%global appLoc; /** * The appLoc represents the metadata or SAS Drive location of the app you * are about to deploy * * To set an alternative appLoc, simply populate the appLoc variable prior * to running this program, eg: * * %let apploc=/my/apploc; * %inc thisfile; * * Do NOT change compiled_apploc - it is not the deploy location, it is the * appLoc that was baked into the frontend files at build time. It is used * by the swap= parameter of %mv_createfile to rewrite that string to the * runtime appLoc when streaming web (html/css/js) files are uploaded. * Changing it breaks dynamic appLoc switching (no strings will match). * */ %let compiled_apploc=/30.SASApps/3030.Projects/303001.DataController/build2/DataController; %let appLoc=%sysfunc(coalescec(&appLoc,&compiled_apploc)); /** * The serverName represents the SAS 9 logical server context * There is no programmatic (SAS code) way to obtain this * So it is taken from the sasjsconfig file OR supplied at runtime, eg: * * %let apploc=/my/apploc; * %let serverName=SASAppDC; * %inc thisfile; * */ %global serverName; %let compiled_serverName=SASApp; %let serverName=%sysfunc(coalescec(&serverName,&compiled_serverName)); %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 mf_getattrn( libds ,attr )/*/STORE SOURCE*/; %local dsid rc; %let dsid=%sysfunc(open(&libds,is)); %if &dsid = 0 %then %do; %put %str(WARN)ING: Cannot open %trim(&libds), system message below; %put %sysfunc(sysmsg()); -1 %end; %else %do; %sysfunc(attrn(&dsid,&attr)) %let rc=%sysfunc(close(&dsid)); %end; %mend mf_getattrn; %macro mf_nobs(libds )/*/STORE SOURCE*/; %mf_getattrn(&libds,NLOBS) %mend mf_nobs; %macro mf_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 mf_verifymacvars( verifyVars /* list of macro variable NAMES */ ,makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */ ,mAbort=SOFT )/*/STORE SOURCE*/; %local verifyIterator verifyVar abortmsg; %do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( ))); %let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( )); %if not %symexist(&verifyvar) %then %do; %let abortmsg= Variable &verifyVar is MISSING; %goto exit_err; %end; %if %length(%trim(&&&verifyVar))=0 %then %do; %let abortmsg= Variable &verifyVar is EMPTY; %goto exit_err; %end; %if &makeupcase=YES %then %do; %let &verifyVar=%upcase(&&&verifyvar); %end; %end; %goto exit_success; %exit_err: %put &abortmsg; %mf_abort(iftrue=(&mabort ne SOFT), mac=mf_verifymacvars, msg=%str(&abortmsg) ) 0 %return; %exit_success: 1 %mend mf_verifymacvars; %macro mm_getDirectories( path= ,outds=work.mm_getDirectories ,mDebug=0 )/*/STORE SOURCE*/; %local mD; %if &mDebug=1 %then %let mD=; %else %let mD=%str(*); %&mD.put Executing mm_getDirectories.sas; %&mD.put _local_; data &outds (keep=directoryuri name directoryname directorydesc ); length directoryuri name directoryname directorydesc $256; call missing(of _all_); __i+1; %if %length(&path)=0 %then %do; do while (metadata_getnobj("omsobj:Directory?@Id contains '.'",__i,directoryuri)>0); %end; %else %do; do while( metadata_getnobj("omsobj:Directory?@DirectoryName='&path'",__i,directoryuri) >0 ); %end; __rc1=metadata_getattr(directoryuri, "Name", name); __rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname); __rc3=metadata_getattr(directoryuri, "Desc", directorydesc); &mD.putlog (_all_) (=); drop __:; __i+1; if sum(of __rc1-__rc3)=0 then output; end; run; %mend mm_getDirectories; %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 mm_updatestpsourcecode(stp= ,stpcode= ,minify=NO ,mdebug=0 ); /* first, check if STP exists */ %local tsuri; %let tsuri=stopifempty ; data _null_; format type uri tsuri value $200.; call missing (of _all_); path="&stp.(StoredProcess)"; /* first, find the STP ID */ if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do; /* get sourcecode */ cnt=1; do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0); rc=metadata_getattr(tsuri,"Name",value); %if &mdebug=1 %then %do; put tsuri= value=; %end; if value="SourceCode" then do; /* found it! */ rc=metadata_getattr(tsuri,"Id",value); call symputx('tsuri',value,'l'); stop; end; cnt+1; end; end; else put (_all_)(=); run; %if &tsuri=stopifempty %then %do; %put %str(WARN)ING: &stp.(StoredProcess) not found!; %return; %end; %if %length(&stpcode)<2 %then %do; %put %str(WARN)ING: No SAS code supplied!!; %return; %end; %local frefin frefout; %let frefin=%mf_getuniquefileref(); %let frefout=%mf_getuniquefileref(); /* write header XML */ data _null_; file &frefin; put "$METAREPOSITORY ','>'); outstr=tranwrd(outstr,"'",'''); outstr=tranwrd(outstr,'"','"'); outstr=tranwrd(outstr,'0A'x,' '); outstr=tranwrd(outstr,'0D'x,' '); outstr=tranwrd(outstr,'$','$'); %if &minify=YES %then %do; outstr=cats(outstr); if outstr ne ''; if not (outstr=:'/*' and subpad(left(reverse(outstr)),1,2)='/*'); %end; outstr=trim(outstr); put outstr ' '; run; %end; data _null_; file &frefin mod; put "'>SAS268435456 "; run; proc metadata in= &frefin out=&frefout; run; %if &mdebug=1 %then %do; /* write the response to the log for debugging */ data _null_; infile &frefout lrecl=32767; input; put _infile_; run; %end; %else %do; filename &frefin clear; filename &frefout clear; %end; %mend mm_updatestpsourcecode; %macro mm_getrepos( outds=work.mm_getrepos )/*/STORE SOURCE*/; * use a temporary fileref to hold the response; filename response temp; /* get list of libraries */ proc metadata in= "1" out=response; run; /* write the response to the log for debugging */ /* data _null_; infile response lrecl=1048576; input; put _infile_; run; */ /* create an XML map to read the response */ filename sxlemap temp; data _null_; file sxlemap; put ''; put "/GetRepositories/Repositories/Repository"; put ""; put ''; put "/GetRepositories/Repositories/Repository/@Id"; put ""; put "characterstring200"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Name"; put ""; put "characterstring200"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Desc"; put ""; put "characterstring200"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@DefaultNS"; put "characterstring200"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@RepositoryType"; put "characterstring20"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@RepositoryFormat"; put "characterstring10"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@Access"; put "characterstring16"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@CurrentAccess"; put "characterstring16"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@PauseState"; put "characterstring16"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Path"; put ""; put "characterstring256"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Engine"; put ""; put "characterstring8"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Options"; put ""; put "characterstring32"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@MetadataCreated"; put "characterstring24"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@MetadataUpdated"; put "characterstring24"; put ''; put '
'; run; libname _XML_ xml xmlfileref=response xmlmap=sxlemap; proc sort data= _XML_.SASRepos out=&outds; by name; run; /* clear references */ filename sxlemap clear; filename response clear; libname _XML_ clear; %mend mm_getrepos; %macro mm_getservercontexts( outds=work.mm_getrepos )/*/STORE SOURCE*/; %local repo repocnt x; %let repo=%sysfunc(getoption(metarepository)); /* first get list of available repos */ %mm_getrepos(outds=work.repos) %let repocnt=0; data _null_; set repos; where repositorytype in('CUSTOM','FOUNDATION'); keep id name ; call symputx(cats('repo',_n_),name,'l'); call symputx('repocnt',_n_,'l'); run; filename __mc1 temp; filename __mc2 temp; data &outds; length serveruri servername $200; call missing (of _all_); stop; run; %do x=1 %to &repocnt; options metarepository=&&repo&x; proc metadata in= "$METAREPOSITORY ServerContextSAS 0" out=__mc1; run; /* data _null_; infile __mc1 lrecl=1048576; input; put _infile_; run; */ data _null_; file __mc2; put ''; put "/GetMetadataObjects/Objects/ServerContext"; put ""; put ''; put "/GetMetadataObjects/Objects/ServerContext/@Id"; put ""; put "characterstring200"; put ''; put ''; put "/GetMetadataObjects/Objects/ServerContext/@Name"; put ""; put "characterstring200"; put ''; put '
'; run; libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2; proc append base=&outds data=__mc3.SASContexts;run; libname __mc3 clear; %end; options metarepository=&repo; filename __mc1 clear; filename __mc2 clear; %mend mm_getservercontexts; %macro mp_abort(mac=mp_abort.sas, 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; end; /* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES sessions provide only _METAUSER) - guard it separately or SYMGET raises "Invalid argument" and pollutes SYSERRORTEXT inside the very abort JSON we are writing here. */ if symexist('_metaperson') then do; _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_isblank(param )/*/STORE SOURCE*/; %sysevalf(%superq(param)=,boolean) %mend mf_isblank; %macro mp_dropmembers( list /* space separated list of datasets / views */ ,libref=WORK /* can only drop from a single library at a time */ ,iftrue=%str(1=1) )/*/STORE SOURCE*/; %if not(%eval(%unquote(&iftrue))) %then %return; %if %mf_isblank(&list) %then %do; %put NOTE: nothing to drop!; %return; %end; proc datasets lib=&libref nolist; delete &list; delete &list /mtype=view; run; %mend mp_dropmembers; %macro mm_createstp( stpname=SASjs Default STP ,stpdesc=This stp was created automatically by the mm_createstp macro ,filename=mm_createstp.sas ,directory=SASEnvironment/SASCode ,tree=/User Folders/sasdemo ,package=false ,streaming=true ,outds=work.mm_createstp ,mDebug=0 ,server=SASApp ,stptype=1 ,minify=NO ,frefin=mm_in ,frefout=mm_out ,LogicalServerType=Sps )/*/STORE SOURCE*/; %local mD; %if &mDebug=1 %then %let mD=; %else %let mD=%str(*); %&mD.put Executing mm_CreateSTP.sas; %&mD.put _local_; %mp_abort( iftrue=(%mf_verifymacvars(stpname filename directory tree)=0) ,mac=&sysmacroname ,msg=%str(Empty inputs: stpname filename directory tree) ) %mp_dropmembers(%scan(&outds,2,.)) /* check LogicalServerType validity */ %mp_abort( iftrue=( &LogicalServerType ne Sps and &LogicalServerType ne Wks and &LogicalServerType ne Any ) ,mac=&sysmacroname ,msg=%str(Invalid value for LogicalServerType (&LogicalServerType)) ) /** * check tree exists */ data _null_; length type uri $256; rc=metadata_pathobj("","&tree","Folder",type,uri); call symputx('foldertype',type,'l'); call symputx('treeuri',uri,'l'); run; %if &foldertype ne Tree %then %do; %put %str(WARN)ING: Tree &tree does not exist!; %return; %end; /** * Check STP does not exist already */ %local cmtype; data _null_; length type uri $256; rc=metadata_pathobj("","&tree/&stpname",'StoredProcess',type,uri); call symputx('cmtype',type,'l'); call symputx('stpuri',uri,'l'); run; %if &cmtype = ClassifierMap %then %do; %put %str(WARN)ING: Stored Process &stpname already exists in &tree!; %return; %end; /** * Check that the physical file exists */ %if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do; %put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!; %return; %end; %if &stptype=1 %then %do; /* type 1 STP - where code is stored on filesystem */ %if %sysevalf(&sysver lt 9.2) %then %do; %put %str(WARN)ING: Version 9.2 or later required; %return; %end; /* check directory object (where 9.2 source code reference is stored) */ data _null_; length id $20 dirtype $256; rc=metadata_resolve("&directory",dirtype,id); call symputx('checkdirtype',dirtype,'l'); run; %if &checkdirtype ne Directory %then %do; %mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug) %if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do; %put %str(WARN)ING: The directory object does not exist for &directory; %return; %end; %end; %else %do; data &outds; directoryuri="&directory"; run; %end; data &outds (keep=stpuri prompturi fileuri texturi); length stpuri prompturi fileuri texturi serveruri $256 ; if _n_=1 then call missing (of _all_); set &outds; /* final checks on uris */ length id $20 type $256; __rc=metadata_resolve("&treeuri",type,id); if type ne 'Tree' then do; putlog "%str(WARN)ING: Invalid tree URI: &treeuri"; stopme=1; end; __rc=metadata_resolve(directoryuri,type,id); if type ne 'Directory' then do; putlog "%str(WARN)ING: Invalid directory URI: " directoryuri; stopme=1; end; /* get server info */ __rc=metadata_resolve("&server",type,serveruri); if type ne 'LogicalServer' then do; __rc=metadata_getnobj("omsobj:LogicalServer?@Name='&server'",1,serveruri); if serveruri='' then do; putlog "%str(WARN)ING: Invalid server: &server"; stopme=1; end; end; if stopme=1 then do; putlog (_all_)(=); stop; end; /* create empty prompt */ rc1=METADATA_NEWOBJ('PromptGroup',prompturi,'Parameters'); rc2=METADATA_SETATTR(prompturi, 'UsageVersion', '1000000'); rc3=METADATA_SETATTR(prompturi, 'GroupType','2'); rc4=METADATA_SETATTR(prompturi, 'Name','Parameters'); rc5=METADATA_SETATTR(prompturi, 'PublicType','Embedded:PromptGroup'); GroupInfo= ""; rc6 = METADATA_SETATTR(prompturi, 'GroupInfo',groupinfo); if sum(of rc1-rc6) ne 0 then do; putlog "%str(WARN)ING: Issue creating prompt."; if prompturi ne . then do; putlog ' Removing orphan: ' prompturi; rc = METADATA_DELOBJ(prompturi); put rc=; end; stop; end; /* create a file uri */ rc7=METADATA_NEWOBJ('File',fileuri,'SP Source File'); rc8=METADATA_SETATTR(fileuri, 'FileName',"&filename"); rc9=METADATA_SETATTR(fileuri, 'IsARelativeName','1'); rc10=METADATA_SETASSN(fileuri, 'Directories','MODIFY',directoryuri); if sum(of rc7-rc10) ne 0 then do; putlog "%str(WARN)ING: Issue creating file."; if fileuri ne . then do; putlog ' Removing orphans:' prompturi fileuri; rc = METADATA_DELOBJ(prompturi); rc = METADATA_DELOBJ(fileuri); put (_all_)(=); end; stop; end; /* create a TextStore object */ rc11= METADATA_NEWOBJ('TextStore',texturi,'Stored Process'); rc12= METADATA_SETATTR(texturi, 'TextRole','StoredProcessConfiguration'); rc13= METADATA_SETATTR(texturi, 'TextType','XML'); storedtext='' !!"" !!""; rc14= METADATA_SETATTR(texturi, 'StoredText',storedtext); if sum(of rc11-rc14) ne 0 then do; putlog "%str(WARN)ING: Issue creating TextStore."; if texturi ne . then do; putlog ' Removing orphans: ' prompturi fileuri texturi; rc = METADATA_DELOBJ(prompturi); rc = METADATA_DELOBJ(fileuri); rc = METADATA_DELOBJ(texturi); put (_all_)(=); end; stop; end; /* create meta obj */ rc15= METADATA_NEWOBJ('ClassifierMap',stpuri,"&stpname"); rc16= METADATA_SETASSN(stpuri, 'Trees','MODIFY',treeuri); rc17= METADATA_SETASSN(stpuri, 'ComputeLocations','MODIFY',serveruri); rc18= METADATA_SETASSN(stpuri, 'SourceCode','MODIFY',fileuri); rc19= METADATA_SETASSN(stpuri, 'Prompts','MODIFY',prompturi); rc20= METADATA_SETASSN(stpuri, 'Notes','MODIFY',texturi); rc21= METADATA_SETATTR(stpuri, 'PublicType', 'StoredProcess'); rc22= METADATA_SETATTR(stpuri, 'TransformRole', 'StoredProcess'); rc23= METADATA_SETATTR(stpuri, 'UsageVersion', '1000000'); rc24= METADATA_SETATTR(stpuri, 'Desc', "&stpdesc"); /* tidy up if err */ if sum(of rc15-rc24) ne 0 then do; putlog "%str(WARN)ING: Issue creating STP."; if stpuri ne . then do; putlog ' Removing orphans: ' prompturi fileuri texturi stpuri; rc = METADATA_DELOBJ(prompturi); rc = METADATA_DELOBJ(fileuri); rc = METADATA_DELOBJ(texturi); rc = METADATA_DELOBJ(stpuri); put (_all_)(=); end; end; else do; fullpath=cats('_program=',treepath,"/&stpname"); putlog "NOTE: Stored Process Created!"; putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath; putlog "NOTE- "; putlog "NOTE-"; end; output; stop; run; %end; %else %if &stptype=2 %then %do; /* type 2 stp - code is stored in metadata */ %if %sysevalf(&sysver lt 9.3) %then %do; %put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs; %return; %end; /* check we have the correct ServerContext */ %mm_getservercontexts(outds=contexts) %local serveruri; %let serveruri=NOTFOUND; data _null_; set contexts; where upcase(servername)="%upcase(&server)"; call symputx('serveruri',serveruri); run; %if &serveruri=NOTFOUND %then %do; %put %str(WARN)ING: ServerContext *&server* not found!; %return; %end; /** * First, create a Hello World type 2 stored process */ filename &frefin temp; data _null_; file &frefin; treeuri=quote(symget('treeuri')); serveruri=quote(symget('serveruri')); stpdesc=quote(symget('stpdesc')); stpname=quote(symget('stpname')); put "$METAREPOSITORY "/ ''/ " "/ " "/ " "/ " "/ ' '/ ' ' / " "/ " "/ ' '/ " "/ ""/ "SAS"/ "268435456"; run; filename &frefout temp; proc metadata in= &frefin out=&frefout ; run; %if &mdebug=1 %then %do; /* write the response to the log for debugging */ data _null_; infile &frefout lrecl=1048576; input; put _infile_; run; %end; /** * Next, add the source code */ %mm_updatestpsourcecode(stp=&tree/&stpname ,stpcode="&directory/&filename" ,mdebug=&mdebug ,minify=&minify) %end; %else %do; %put %str(WARN)ING: STPTYPE=*&stptype* not recognised!; %end; %mend mm_createstp; %macro mf_getuser( )/*/STORE SOURCE*/; %local user; %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; %let user=&SYS_COMPUTE_SESSION_OWNER; %end; %else %if %symexist(_metaperson) %then %do; %if %length(&_metaperson)=0 %then %let user=&sysuserid; /* sometimes SAS will add @domain extension - remove for consistency */ /* but be sure to quote in case of usernames with commas */ %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); %end; %else %let user=&sysuserid; %quote(&user) %mend mf_getuser; %macro mm_createfolder(path=,mDebug=0); %put &sysmacroname: execution started for &path; %local dbg errorcheck; %if &mDebug=0 %then %let dbg=*; %local parentFolderObjId child errorcheck paths; %let paths=0; %let errorcheck=1; %if &syscc ge 4 %then %do; %put SYSCC=&syscc - this macro requires a clean session; %return; %end; data _null_; length objId parentId objType parent child $200 folderPath $1000; call missing (of _all_); folderPath = "%trim(&path)"; * remove any trailing slash ; if ( substr(folderPath,length(folderPath),1) = '/' ) then folderPath=substr(folderPath,1,length(folderPath)-1); * name must not be blank; if ( folderPath = '' ) then do; put 'ERR' +(-1) "OR: &sysmacroname PATH parameter value must be non-blank"; end; * must have a starting slash ; if ( substr(folderPath,1,1) ne '/' ) then do; put 'ERR' +(-1) "OR: &sysmacroname PATH param value must have starting slash"; stop; end; * check if folder already exists ; rc=metadata_pathobj('',cats(folderPath,"(Folder)"),"",objType,objId); if rc ge 1 then do; put "NOTE: Folder " folderPath " already exists!"; stop; end; * do not create a root (one level) folder ; if countc(folderPath,'/')=1 then do; put 'ERR' +(-1) "OR: &sysmacroname will not create a new ROOT folder"; stop; end; * check that root folder exists ; root=cats('/',scan(folderpath,1,'/'),"(Folder)"); if metadata_pathobj('',root,"",objType,parentId)<1 then do; put 'ERR' +(-1) "OR: " root " does not exist!"; stop; end; * check that parent folder exists ; child=scan(folderPath,-1,'/'); parent=substr(folderpath,1,length(folderpath)-length(child)-1); rc=metadata_pathobj('',cats(parent,"(Folder)"),"",objType,parentId); if rc<1 then do; putlog 'The following folders will be created:'; /* folder does not exist - so start from top and work down */ length newpath $1000; paths=0; do x=2 to countw(folderpath,'/'); newpath=''; do i=1 to x; newpath=cats(newpath,'/',scan(folderpath,i,'/')); end; rc=metadata_pathobj('',cats(newpath,"(Folder)"),"",objType,parentId); if rc<1 then do; paths+1; call symputx(cats('path',paths),newpath); putlog newpath; end; call symputx('paths',paths); end; end; else putlog "parent " parent " exists"; call symputx('parentFolderObjId',parentId,'l'); call symputx('child',child,'l'); call symputx('errorcheck',0,'l'); &dbg put (_all_)(=); run; %if &errorcheck=1 or &syscc ge 4 %then %return; %if &paths>0 %then %do x=1 %to &paths; %put executing recursive call for &&path&x; %mm_createfolder(path=&&path&x) %end; %else %do; filename __newdir temp; options noquotelenmax; %local inmeta; %put creating: &path; %let inmeta=$METAREPOSITORY SAS268435456 ; proc metadata in="&inmeta" out=__newdir verbose; run ; /* check it was successful */ data _null_; length objId parentId objType parent child $200 ; call missing (of _all_); rc=metadata_pathobj('',cats("&path","(Folder)"),"",objType,objId); if rc ge 1 then do; putlog "SUCCCESS! &path created."; end; else do; putlog 'ERR' +(-1) "OR: unsuccessful attempt to create &path"; call symputx('syscc',8); end; run; /* write the response to the log for debugging */ %if &mDebug ne 0 %then %do; data _null_; infile __newdir lrecl=32767; input; put _infile_; run; %end; filename __newdir clear; %end; %put &sysmacroname: execution finished for &path; %mend mm_createfolder; %macro mm_deletestp( target= )/*/STORE SOURCE*/; /** * Check STP does exist */ %local cmtype; data _null_; length type uri $256; rc=metadata_pathobj("","&target",'StoredProcess',type,uri); call symputx('cmtype',type,'l'); call symputx('stpuri',uri,'l'); run; %if &cmtype ne ClassifierMap %then %do; %put NOTE: No Stored Process found at ⌖ %return; %end; filename __in temp lrecl=10000; filename __out temp lrecl=10000; data _null_ ; file __in ; put ""; put "SAS268436480"; put ""; run ; proc metadata in=__in out=__out verbose;run; /* list the result */ data _null_;infile __out; input; list; run; filename __in clear; filename __out clear; /** * Check deletion */ %local isgone; data _null_; length type uri $256; call missing (of _all_); rc=metadata_pathobj("","&target",'Note',type,uri); call symputx('isgone',type,'l'); run; %if &isgone = ClassifierMap %then %do; %put %str(ERR)OR: STP not deleted from ⌖ %let syscc=4; %return; %end; %mend mm_deletestp; /* system macro dependencies for build process end*/ /* system macros for build process */ %macro mm_createwebservice(path= ,name=initService ,precode= ,code=ft15f001 ,desc=This stp was created automagically by the mm_createwebservice macro ,mDebug=0 ,server=SASApp ,replace=YES ,adapter=sasjs )/*/STORE SOURCE*/; %if &syscc ge 4 %then %do; %put &=syscc - &sysmacroname will not execute in this state; %return; %end; %local mD; %if &mDebug=1 %then %let mD=; %else %let mD=%str(*); %&mD.put Executing mm_createwebservice.sas; %&mD.put _local_; * remove any trailing slash ; %if "%substr(&path,%length(&path),1)" = "/" %then %let path=%substr(&path,1,%length(&path)-1); /** * Add webout macro * These put statements are auto generated - to change the macro, change the * source (mm_webout) and run `build.py` */ filename sasjs temp; data _null_; file sasjs lrecl=3000 ; put "/* Created on %sysfunc(datetime(),datetime19.) by %mf_getuser() */"; /* 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 ' /* trim (not cats) so leading blanks are retained */ '; put ' else &&name&i=''"''!!trim(&&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 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 ' '; 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 ' '; put ' '; 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 ' /* a plain $ informat strips leading blanks - use $char instead */ '; put ' call symputx(''input_statement'' '; put ' ,prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_) '; put ' ); '; 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 ' '; put '%else %if &action=OPEN %then %do; '; put ' /* fix encoding */ '; put ' OPTIONS NOBOMFILE; '; put ' '; 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 ' '; 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 ' '; put '%end; '; put ' '; 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 ' '; put '%end; '; put ' '; put '%mend mm_webout; '; /* WEBOUT END */ put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO'; put ' ,maxobs=MAX'; put ');'; put ' %mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt,missing=&missing'; put ' ,showmeta=&showmeta,maxobs=&maxobs'; put ' )'; put '%mend;'; run; /* add precode and code */ %local work tmpfile; %let work=%sysfunc(pathname(work)); %let tmpfile=__mm_createwebservice.temp; %local x fref freflist mod; %let freflist= &adapter &precode &code ; %do x=1 %to %sysfunc(countw(&freflist)); %if &x>1 %then %let mod=mod; %let fref=%scan(&freflist,&x); %&mD.put &sysmacroname: adding &fref; data _null_; file "&work/&tmpfile" lrecl=3000 &mod; infile &fref; input; put _infile_; run; %end; /* create the metadata folder if not already there */ %mm_createfolder(path=&path) %if &syscc ge 4 %then %return; %if %upcase(&replace)=YES %then %do; %mm_deletestp(target=&path/&name) %end; /* create the web service */ %mm_createstp(stpname=&name ,filename=&tmpfile ,directory=&work ,tree=&path ,stpdesc=&desc ,mDebug=&mdebug ,server=&server ,stptype=2) /* find the web app url */ %local url; %let url=localhost/SASStoredProcess; data _null_; length url $128; rc=METADATA_GETURI("Stored Process Web App",url); if rc=0 then call symputx('url',url,'l'); run; %put &sysmacroname: STP &name successfully created in &path; %put Check it out here:; %put ;%put ;%put ; %put &url?_PROGRAM=&path/&name; %put ;%put ;%put ; %mend mm_createwebservice; /* system macros for build process end */ * BuildInit start; /** @file @brief Initialise build program for SAS 9 DC

SAS Macros

**/ options nomprint; %global _metaperson _url dcpath; /* set webout if not running in STP mode */ data _null_; if "&sysprocessmode" ne "SAS Stored Process Server" then do; call execute('filename _webout temp;'); end; run; * BuildInit end; %let path=services; %let service=clickme; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put '''';'; put 'put '' '';'; put 'put '' Data Controller'';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '''';'; put 'run;'; put '%sasjsout(HTML)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/admin; %let service=configurator; 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief provides the web service to create the control tables'; put '@details'; put '

SAS Macros

'; put '@li dc_getusergroups.sas'; put '@li mf_getuser.sas'; put '@li mf_getapploc.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 '%let root=%mf_getapploc();'; put '/* create web page */'; put 'data _null_;'; put 'file _webout;'; put 'infile datalines ;'; put 'input;'; put 'put _infile_;'; put 'datalines4;'; put ''; put ''; put ''; put ''; put 'Data Controller'; put ''; put ''; put ''; put ''; put ''; put '
'; put '
'; put ''; put 'Data Controller'; put '
'; put '
'; put '
'; put '
'; put '
'; put '
'; put ''; put '
'; put '
'; put 'Terms and Conditions'; put '
'; put '
'; put '
'; put '

Due to the way the Demo version is compiled (in an easy-to-deploy but'; put 'inefficient-to-run format), it should not be deployed to production servers.'; put 'Before proceeding with configuration, please confirm that you have read,'; put 'understood, and agreed to the'; put 'Data Controller for SAS© Evaluation Agreement.'; put '

'; put '
'; put '
'; put '>'; put ''; put '
'; put '
'; put '
'; put ''; put ''; put '
'; put '
'; put '
'; put ''; put ''; put ';;;;'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=demodata; 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 '/** @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_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 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 mf_uid('; put ')/*/STORE SOURCE*/;'; put '%local today now;'; put '%let today=%sysfunc(today(),yymmddn8.);'; put '%let now=%sysfunc(compress(%sysfunc(time(),tod12.3),:.));'; put '&today._&now._&sysjobid._%sysevalf(%sysfunc(ranuni(0))*999,CEIL)'; put '%mend mf_uid;'; 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_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref dttm ds1;'; put '%let inref=%mf_getuniquefileref();'; put '%let outref=%mf_getuniquefileref();'; put '%if &outfile=0 %then %let outfile=&infile;'; put '%let ds1=%mf_getuniquename(prefix=allchars);'; put '%let ds2=%mf_getuniquename(prefix=startmark);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '/* %put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) secs to run; */'; put '%mend mp_replace;'; 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 mm_getDirectories('; put 'path='; put ',outds=work.mm_getDirectories'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getDirectories.sas;'; put '%&mD.put _local_;'; put 'data &outds (keep=directoryuri name directoryname directorydesc );'; put 'length directoryuri name directoryname directorydesc $256;'; put 'call missing(of _all_);'; put '__i+1;'; put '%if %length(&path)=0 %then %do;'; put 'do while'; put '(metadata_getnobj("omsobj:Directory?@Id contains ''.''",__i,directoryuri)>0);'; put '%end; %else %do;'; put 'do while('; put 'metadata_getnobj("omsobj:Directory?@DirectoryName=''&path''",__i,directoryuri)'; put '>0'; put ');'; put '%end;'; put '__rc1=metadata_getattr(directoryuri, "Name", name);'; put '__rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname);'; put '__rc3=metadata_getattr(directoryuri, "Desc", directorydesc);'; put '&mD.putlog (_all_) (=);'; put 'drop __:;'; put '__i+1;'; put 'if sum(of __rc1-__rc3)=0 then output;'; put 'end;'; put 'run;'; put '%mend mm_getDirectories;'; put '%macro mm_updatestpsourcecode(stp='; put ',stpcode='; put ',minify=NO'; put ',mdebug=0'; put ');'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&stp.(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '%if &mdebug=1 %then %do;'; put 'put tsuri= value=;'; put '%end;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%if &tsuri=stopifempty %then %do;'; put '%put %str(WARN)ING: &stp.(StoredProcess) not found!;'; put '%return;'; put '%end;'; put '%if %length(&stpcode)<2 %then %do;'; put '%put %str(WARN)ING: No SAS code supplied!!;'; put '%return;'; put '%end;'; put '%local frefin frefout;'; put '%let frefin=%mf_getuniquefileref();'; put '%let frefout=%mf_getuniquefileref();'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'put "$METAREPOSITORY'; put '2 %then %do;'; put 'data _null_;'; put 'file &frefin lrecl=32767 mod;'; put 'infile &stpcode lrecl=32767;'; put 'length outstr $32767;'; put 'input outstr ;'; put '/* escape code so it can be stored as XML */'; put 'outstr=tranwrd(_infile_,''&'',''&'');'; put 'outstr=tranwrd(outstr,''<'',''<'');'; put 'outstr=tranwrd(outstr,''>'',''>'');'; put 'outstr=tranwrd(outstr,"''",''''');'; put 'outstr=tranwrd(outstr,''"'',''"'');'; put 'outstr=tranwrd(outstr,''0A''x,'' '');'; put 'outstr=tranwrd(outstr,''0D''x,'' '');'; put 'outstr=tranwrd(outstr,''$'',''$'');'; put '%if &minify=YES %then %do;'; put 'outstr=cats(outstr);'; put 'if outstr ne '''';'; put 'if not (outstr=:''/*'' and subpad(left(reverse(outstr)),1,2)=''/*'');'; put '%end;'; put 'outstr=trim(outstr);'; put 'put outstr '' '';'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &frefin mod;'; put 'put "''>SAS268435456'; put '";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_updatestpsourcecode;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro mm_getservercontexts('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* first get list of available repos */'; put '%mm_getrepos(outds=work.repos)'; put '%let repocnt=0;'; put 'data _null_;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put 'filename __mc1 temp;'; put 'filename __mc2 temp;'; put 'data &outds;'; put 'length serveruri servername $200;'; put 'call missing (of _all_);'; put 'stop;'; put 'run;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'ServerContextSAS'; put '0"'; put 'out=__mc1;'; put 'run;'; put '/*'; put 'data _null_;'; put 'infile __mc1 lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put 'data _null_;'; put 'file __mc2;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2;'; put 'proc append base=&outds data=__mc3.SASContexts;run;'; put 'libname __mc3 clear;'; put '%end;'; put 'options metarepository=&repo;'; put 'filename __mc1 clear;'; put 'filename __mc2 clear;'; put '%mend mm_getservercontexts;'; 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 mm_createstp('; put 'stpname=SASjs Default STP'; put ',stpdesc=This stp was created automatically by the mm_createstp macro'; put ',filename=mm_createstp.sas'; put ',directory=SASEnvironment/SASCode'; put ',tree=/User Folders/sasdemo'; put ',package=false'; put ',streaming=true'; put ',outds=work.mm_createstp'; put ',mDebug=0'; put ',server=SASApp'; put ',stptype=1'; put ',minify=NO'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',LogicalServerType=Sps'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_CreateSTP.sas;'; put '%&mD.put _local_;'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(stpname filename directory tree)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: stpname filename directory tree)'; put ')'; put '%mp_dropmembers(%scan(&outds,2,.))'; put '/* check LogicalServerType validity */'; put '%mp_abort('; put 'iftrue=('; put '&LogicalServerType ne Sps'; put 'and &LogicalServerType ne Wks'; put 'and &LogicalServerType ne Any'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid value for LogicalServerType (&LogicalServerType))'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check STP does not exist already'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&stpname",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype = ClassifierMap %then %do;'; put '%put %str(WARN)ING: Stored Process &stpname already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that the physical file exists'; put '*/'; put '%if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do;'; put '%put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!;'; put '%return;'; put '%end;'; put '%if &stptype=1 %then %do;'; put '/* type 1 STP - where code is stored on filesystem */'; put '%if %sysevalf(&sysver lt 9.2) %then %do;'; put '%put %str(WARN)ING: Version 9.2 or later required;'; put '%return;'; put '%end;'; put '/* check directory object (where 9.2 source code reference is stored) */'; put 'data _null_;'; put 'length id $20 dirtype $256;'; put 'rc=metadata_resolve("&directory",dirtype,id);'; put 'call symputx(''checkdirtype'',dirtype,''l'');'; put 'run;'; put '%if &checkdirtype ne Directory %then %do;'; put '%mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug)'; put '%if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do;'; put '%put %str(WARN)ING: The directory object does not exist for &directory;'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'directoryuri="&directory";'; put 'run;'; put '%end;'; put 'data &outds (keep=stpuri prompturi fileuri texturi);'; put 'length stpuri prompturi fileuri texturi serveruri $256 ;'; put 'if _n_=1 then call missing (of _all_);'; put 'set &outds;'; put '/* final checks on uris */'; put 'length id $20 type $256;'; put '__rc=metadata_resolve("&treeuri",type,id);'; put 'if type ne ''Tree'' then do;'; put 'putlog "%str(WARN)ING: Invalid tree URI: &treeuri";'; put 'stopme=1;'; put 'end;'; put '__rc=metadata_resolve(directoryuri,type,id);'; put 'if type ne ''Directory'' then do;'; put 'putlog "%str(WARN)ING: Invalid directory URI: " directoryuri;'; put 'stopme=1;'; put 'end;'; put '/* get server info */'; put '__rc=metadata_resolve("&server",type,serveruri);'; put 'if type ne ''LogicalServer'' then do;'; put '__rc=metadata_getnobj("omsobj:LogicalServer?@Name=''&server''",1,serveruri);'; put 'if serveruri='''' then do;'; put 'putlog "%str(WARN)ING: Invalid server: &server";'; put 'stopme=1;'; put 'end;'; put 'end;'; put 'if stopme=1 then do;'; put 'putlog (_all_)(=);'; put 'stop;'; put 'end;'; put '/* create empty prompt */'; put 'rc1=METADATA_NEWOBJ(''PromptGroup'',prompturi,''Parameters'');'; put 'rc2=METADATA_SETATTR(prompturi, ''UsageVersion'', ''1000000'');'; put 'rc3=METADATA_SETATTR(prompturi, ''GroupType'',''2'');'; put 'rc4=METADATA_SETATTR(prompturi, ''Name'',''Parameters'');'; put 'rc5=METADATA_SETATTR(prompturi, ''PublicType'',''Embedded:PromptGroup'');'; put 'GroupInfo='; put '"";'; put 'rc6 = METADATA_SETATTR(prompturi, ''GroupInfo'',groupinfo);'; put 'if sum(of rc1-rc6) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating prompt.";'; put 'if prompturi ne . then do;'; put 'putlog '' Removing orphan: '' prompturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'put rc=;'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a file uri */'; put 'rc7=METADATA_NEWOBJ(''File'',fileuri,''SP Source File'');'; put 'rc8=METADATA_SETATTR(fileuri, ''FileName'',"&filename");'; put 'rc9=METADATA_SETATTR(fileuri, ''IsARelativeName'',''1'');'; put 'rc10=METADATA_SETASSN(fileuri, ''Directories'',''MODIFY'',directoryuri);'; put 'if sum(of rc7-rc10) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating file.";'; put 'if fileuri ne . then do;'; put 'putlog '' Removing orphans:'' prompturi fileuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a TextStore object */'; put 'rc11= METADATA_NEWOBJ(''TextStore'',texturi,''Stored Process'');'; put 'rc12= METADATA_SETATTR(texturi, ''TextRole'',''StoredProcessConfiguration'');'; put 'rc13= METADATA_SETATTR(texturi, ''TextType'',''XML'');'; put 'storedtext='''''; put '!!""'; put '!!"";'; put 'rc14= METADATA_SETATTR(texturi, ''StoredText'',storedtext);'; put 'if sum(of rc11-rc14) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating TextStore.";'; put 'if texturi ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create meta obj */'; put 'rc15= METADATA_NEWOBJ(''ClassifierMap'',stpuri,"&stpname");'; put 'rc16= METADATA_SETASSN(stpuri, ''Trees'',''MODIFY'',treeuri);'; put 'rc17= METADATA_SETASSN(stpuri, ''ComputeLocations'',''MODIFY'',serveruri);'; put 'rc18= METADATA_SETASSN(stpuri, ''SourceCode'',''MODIFY'',fileuri);'; put 'rc19= METADATA_SETASSN(stpuri, ''Prompts'',''MODIFY'',prompturi);'; put 'rc20= METADATA_SETASSN(stpuri, ''Notes'',''MODIFY'',texturi);'; put 'rc21= METADATA_SETATTR(stpuri, ''PublicType'', ''StoredProcess'');'; put 'rc22= METADATA_SETATTR(stpuri, ''TransformRole'', ''StoredProcess'');'; put 'rc23= METADATA_SETATTR(stpuri, ''UsageVersion'', ''1000000'');'; put 'rc24= METADATA_SETATTR(stpuri, ''Desc'', "&stpdesc");'; put '/* tidy up if err */'; put 'if sum(of rc15-rc24) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating STP.";'; put 'if stpuri ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi stpuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'rc = METADATA_DELOBJ(stpuri);'; put 'put (_all_)(=);'; put 'end;'; put 'end;'; put 'else do;'; put 'fullpath=cats(''_program='',treepath,"/&stpname");'; put 'putlog "NOTE: Stored Process Created!";'; put 'putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath;'; put 'putlog "NOTE- "; putlog "NOTE-";'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%else %if &stptype=2 %then %do;'; put '/* type 2 stp - code is stored in metadata */'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs;'; put '%return;'; put '%end;'; put '/* check we have the correct ServerContext */'; put '%mm_getservercontexts(outds=contexts)'; put '%local serveruri; %let serveruri=NOTFOUND;'; put 'data _null_;'; put 'set contexts;'; put 'where upcase(servername)="%upcase(&server)";'; put 'call symputx(''serveruri'',serveruri);'; put 'run;'; put '%if &serveruri=NOTFOUND %then %do;'; put '%put %str(WARN)ING: ServerContext *&server* not found!;'; put '%return;'; put '%end;'; put '/**'; put '* First, create a Hello World type 2 stored process'; put '*/'; put 'filename &frefin temp;'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'stpdesc=quote(symget(''stpdesc''));'; put 'stpname=quote(symget(''stpname''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '" "/'; put '" "/'; put '" "/'; put '" "/'; put ''' ''/'; put ''' '' /'; put '" "/'; put '" "/'; put ''' ''/'; put '" "/'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout ;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '/**'; put '* Next, add the source code'; put '*/'; put '%mm_updatestpsourcecode(stp=&tree/&stpname'; put ',stpcode="&directory/&filename"'; put ',mdebug=&mdebug'; put ',minify=&minify)'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: STPTYPE=*&stptype* not recognised!;'; put '%end;'; put '%mend mm_createstp;'; put '%macro ms_deletefile(driveloc'; put ',mdebug=0'; put ');'; put '%local headref;'; put '%let headref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &headref lrecl=1000;'; put 'infile "&_sasjs_tokenfile" lrecl=1000;'; put 'input;'; put 'put _infile_;'; put 'run;'; put 'proc http method=''DELETE'' headerin=&headref'; put 'url="&_sasjs_apiserverurl/SASjsApi/drive/file?_filePath=&driveloc";'; put '%if &mdebug=1 %then %do;'; put 'debug level=2;'; put '%end;'; put 'run;'; put 'filename &headref clear;'; put '%mend ms_deletefile;'; put '%macro ms_createfile(driveloc'; put ',inref=0'; put ',mdebug=0'; put ');'; put '/* first, delete in case it exists */'; put '%ms_deletefile(&driveloc,mdebug=&mdebug)'; put '%local fname0 fname1 fname2 boundary fname statcd msg optval;'; put '%let fname0=%mf_getuniquefileref();'; put '%let fname1=%mf_getuniquefileref();'; put '%let fname2=%mf_getuniquefileref();'; put '%let boundary=%mf_getuniquename();'; put '/* avoid sending bom marker to API */'; put '%let optval=%sysfunc(getoption(bomfile));'; put 'options nobomfile;'; put 'data _null_;'; put 'file &fname0 termstr=crlf lrecl=32767;'; put 'infile &inref end=eof lrecl=32767;'; put 'if _n_ = 1 then do;'; put 'put "--&boundary.";'; put 'put ''Content-Disposition: form-data; name="filePath"'';'; put 'put ;'; put 'put "&driveloc";'; put 'put "--&boundary";'; put 'put ''Content-Disposition: form-data; name="file"; filename="ignore.sas"'';'; put 'put "Content-Type: text/plain";'; put 'put ;'; put 'end;'; put 'input;'; put 'put _infile_; /* add the actual file to be sent */'; put 'if eof then do;'; put 'put ;'; put 'put "--&boundary--";'; put 'end;'; put 'run;'; put 'data _null_;'; put 'file &fname1 lrecl=1000;'; put 'infile "&_sasjs_tokenfile" lrecl=1000;'; put 'input;'; put 'if _n_=1 then put "Content-Type: multipart/form-data; boundary=&boundary";'; put 'put _infile_;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &fname0 lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'data _null_;'; put 'infile &fname1 lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'proc http method=''POST'' in=&fname0 headerin=&fname1 out=&fname2'; put 'url="&_sasjs_apiserverurl/SASjsApi/drive/file";'; put '%if &mdebug=1 %then %do;'; put 'debug level=1;'; put '%end;'; put 'run;'; put '%let statcd=0;'; put 'data _null_;'; put 'infile &fname2;'; put 'input;'; put 'putlog _infile_;'; put 'if _infile_=''{"status":"success"}'' then call symputx(''statcd'',1,''l'');'; put 'else call symputx(''msg'',_infile_,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue=(&statcd=0)'; put ',mac=ms_createfile.sas'; put ',msg=%superq(msg)'; put ')'; put '/* reset options */'; put 'options &optval;'; put '%mend ms_createfile;'; put '%macro mf_getuniquelibref(prefix=mc);'; put '%local x maxtries;'; 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 mfv_getpathuri(filepath'; put ')/*/STORE SOURCE*/;'; put '%mf_abort('; put 'iftrue=(&syscc ne 0),'; put 'msg=Cannot enter &sysmacroname with syscc=&syscc'; put ')'; put '%local fref rc path name var /* var is used to avoid delete timing issue */;'; put '%let fref=%mf_getuniquefileref();'; put '%let name=%scan(&filepath,-1,/);'; put '%let path=%substr(&filepath,1,%length(&filepath)-%length(&name)-1);'; put '%if %sysfunc(filename(fref,,filesrvc,folderPath="&path" filename="&name"))=0'; put '%then %do;'; put '%let var=_FILESRVC_&fref._URI;'; put '%str(&&&var)'; put '%let rc=%sysfunc(filename(fref));'; put '%symdel &var;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: did not find &filepath;'; put '%let syscc=0;'; put '%end;'; put '%mf_abort('; put 'iftrue=(&syscc ne 0),'; put 'msg=Cannot leave &sysmacroname with syscc=&syscc'; put ')'; put '%mend mfv_getpathuri;'; put '%macro mfv_existfolder(path'; put ')/*/STORE SOURCE*/;'; put '%mf_abort('; put 'iftrue=(&syscc ne 0),'; put 'msg=Cannot enter mfv_existfolder.sas with syscc=&syscc'; put ')'; put '%local fref rc var;'; put '%let fref=%mf_getuniquefileref();'; put '%if %sysfunc(filename(fref,,filesrvc,folderPath="&path"))=0 %then %do;'; put '1'; put '%let var=_FILESRVC_&fref._URI;'; put '%let rc=%sysfunc(filename(fref));'; put '%symdel &var;'; put '%end;'; put '%else %do;'; put '0'; put '%let syscc=0;'; put '%end;'; put '%mf_abort('; put 'iftrue=(&syscc ne 0),'; put 'msg=Cannot leave mfv_existfolder.sas with syscc=&syscc'; put ')'; put '%mend mfv_existfolder;'; put '%macro mv_createfolder(path='; put ',access_token_var=ACCESS_TOKEN'; put ',grant_type=sas_services'; put ',mdebug=0'; put ',outds=_null_'; put ');'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '%mp_abort('; put 'iftrue=(&syscc ne 0),'; put 'msg=Cannot enter &sysmacroname with syscc=&syscc'; put ')'; put '%if %mfv_existfolder(&path)=1 %then %do;'; put '%&dbg.put &sysmacroname: &path already exists;'; put 'data &outds;'; put 'self_uri="%mfv_getpathuri(&path)";'; put 'output;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%mp_abort(iftrue=(&syscc ne 0),msg=syscc=&syscc when folder checking)'; 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=(%length(&path)=1)'; put ',mac=&sysmacroname'; put ',msg=%str(path value must be provided)'; put ')'; put 'options noquotelenmax;'; put '%local subfolder_cnt; /* determine the number of subfolders */'; put '%let subfolder_cnt=%sysfunc(countw(&path,/));'; put '%local base_uri; /* location of rest apis */'; put '%let base_uri=%mf_getplatform(VIYARESTAPI);'; put '%local href; /* resource address (none for root) */'; put '%let href="&base_uri/folders/folders?parentFolderUri=/folders/folders/none";'; put '%local x newpath subfolder;'; put '%do x=1 %to &subfolder_cnt;'; put '%let subfolder=%scan(&path,&x,%str(/));'; put '%let newpath=&newpath/&subfolder;'; put '%local fname1;'; put '%let fname1=%mf_getuniquefileref();'; put '%put &sysmacroname checking to see if &newpath exists;'; put 'proc http method=''GET'' out=&fname1 &oauth_bearer'; put 'url="&base_uri/folders/folders/@item?path=&newpath";'; 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=401 %then %do;'; put '/* relates to: https://github.com/sasjs/core/issues/400 */'; put '%put 401 thrown in &sysmacroname;'; put '%put sleeping: %sysfunc(sleep(12,1)) secs - will try again;'; put 'proc http method=''GET'' out=&fname1 &oauth_bearer'; put 'url="&base_uri/folders/folders/@item?path=&newpath";'; put '%if &grant_type=authorization_code %then %do;'; put 'headers "Authorization"="Bearer &&&access_token_var";'; put '%end;'; put 'run;'; put '%end;'; put '%local libref1;'; put '%let libref1=%mf_getuniquelibref();'; put 'libname &libref1 JSON fileref=&fname1;'; put '%mp_abort('; put 'iftrue=('; put '&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 404'; put ')'; put ',mac=mv_createfolder124'; put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)'; put ')'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname following check to see if &newpath exists:;'; put '%put _local_;'; put 'data _null_;'; put 'infile &fname1;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%end;'; put '%if &SYS_PROCHTTP_STATUS_CODE=200 %then %do;'; put 'data _null_;'; put 'set &libref1..links;'; put 'if rel=''createChild'' then'; put 'call symputx(''href'',quote(cats("&base_uri",href)),''l'');'; put 'run;'; put '%end;'; put '%else %if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;'; put '%put &sysmacroname &newpath not found - creating it now;'; put '%local fname2;'; put '%let fname2=%mf_getuniquefileref();'; put 'data _null_;'; put 'length json $1000;'; put 'json=cats("''"'; put ',''{"name":'''; put ',quote(trim(symget(''subfolder'')))'; put ','',"description":'''; put ',quote("&subfolder, created by &sysmacroname")'; put ','',"type":"folder"}'''; put ',"''"'; put ');'; put 'call symputx(''json'',json,''l'');'; put 'run;'; put 'proc http method=''POST'''; put 'in=&json'; put 'out=&fname2'; put '&oauth_bearer'; put 'url=%unquote(%superq(href));'; put 'headers'; put '%if &grant_type=authorization_code %then %do;'; put '"Authorization"="Bearer &&&access_token_var"'; put '%end;'; put '''Content-Type''=''application/vnd.sas.content.folder+json'''; put '''Accept''=''application/vnd.sas.content.folder+json'';'; put 'run;'; put '%if &SYS_PROCHTTP_STATUS_CODE ne 201 %then %do;'; put '%put &=SYS_PROCHTTP_STATUS_CODE &=SYS_PROCHTTP_STATUS_PHRASE;'; put '%end;'; put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 201)'; put ',mac=&sysmacroname'; put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)'; put ')'; put '%local libref2;'; put '%let libref2=%mf_getuniquelibref();'; put 'libname &libref2 JSON fileref=&fname2;'; put '%put &sysmacroname &newpath now created. Grabbing the follow on link ;'; put 'data &outds;'; put 'set &libref2..links;'; put 'if rel=''createChild'' then do;'; put 'call symputx(''href'',quote(cats("&base_uri",href)),''l'');'; put '&dbg put (_all_)(=);'; put 'end;'; put 'if method=''GET'' and rel=''self'' then do;'; put 'self_uri=uri;'; put 'output;'; put 'end;'; put 'keep self_uri ;'; put 'run;'; put 'libname &libref2 clear;'; put 'filename &fname2 clear;'; put '%end;'; put 'filename &fname1 clear;'; put 'libname &libref1 clear;'; put '%end;'; put '%mp_abort('; put 'iftrue=(&syscc ne 0),'; put 'msg=Cannot leave &sysmacroname with syscc=&syscc'; put ')'; put '%mend mv_createfolder;'; 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 uri $1000;'; put 'call missing(of _all_);'; 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 '%macro mv_createjob(path='; put ',name='; put ',desc=Created by the mv_createjob.sas macro'; put ',precode='; put ',code=ft15f001'; put ',access_token_var=ACCESS_TOKEN'; put ',grant_type=sas_services'; put ',replace=YES'; put ',debug=0'; put ',contextname='; put ',addjesbeginendmacros=false'; 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 '/* initial validation checking */'; 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=(%length(&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 'options noquotelenmax;'; put '* remove any trailing slash ;'; put '%if "%substr(&path,%length(&path),1)" = "/" %then'; put '%let path=%substr(&path,1,%length(&path)-1);'; put '/* ensure folder exists */'; put '%put &sysmacroname: Path &path being checked / created;'; put '%mv_createfolder(path=&path)'; 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/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 &debug %then %do;'; put 'data _null_;'; put 'infile &fname1;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%end;'; 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 '/* path exists. Grab follow on link to check members */'; 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(''membercheck'',quote("&base_uri"!!trim(href)),''l'');'; put 'else if rel=''self'' then call symputx(''parentFolderUri'',href,''l'');'; put 'run;'; put 'data _null_;'; put 'set &libref1..root;'; put 'call symputx(''folderid'',id,''l'');'; put 'run;'; put '%local fname2;'; put '%let fname2=%mf_getuniquefileref();'; put 'proc http method=''GET'''; put 'out=&fname2'; put '&oauth_bearer'; put 'url=%unquote(%superq(membercheck));'; put 'headers'; put '%if &grant_type=authorization_code %then %do;'; put '"Authorization"="Bearer &&&access_token_var"'; put '%end;'; put '''Accept''=''application/vnd.sas.collection+json'''; put '''Accept-Language''=''string'';'; put '%if &debug=1 %then %do;'; put 'debug level = 3;'; put '%end;'; put 'run;'; put '/*data _null_;infile &fname2;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 '%if %upcase(&replace)=YES %then %do;'; put '%mv_deletejes(path=&path, name=&name)'; put '%end;'; put '%else %do;'; put '/* check that job does not already exist in that folder */'; put '%local libref2;'; put '%let libref2=%mf_getuniquelibref();'; put 'libname &libref2 JSON fileref=&fname2;'; put '%local exists; %let exists=0;'; put 'data _null_;'; put 'set &libref2..items;'; put 'if contenttype=''jobDefinition'' and upcase(name)="%upcase(&name)" then'; put 'call symputx(''exists'',1,''l'');'; put 'run;'; put '%mp_abort(iftrue=(&exists=1)'; put ',mac=&sysmacroname'; put ',msg=%str(Job &name already exists in &path)'; put ')'; put 'libname &libref2 clear;'; put '%end;'; put '/* set up the body of the request to create the service */'; put '%local fname3 comma;'; put '%let fname3=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &fname3 TERMSTR='' '';'; put 'length string $32767;'; put 'string=cats(''{"version": 0,"name":"'''; put ',"&name"'; put ',''","type":"Compute","parameters":['''; put '%if &addjesbeginendmacros ne 0 %then %do;'; put ',''{"name":"_addjesbeginendmacros"'''; put ','',"type":"CHARACTER","defaultValue":"'''; put ',"&addjesbeginendmacros"'; put ',''"}'''; put '%let comma=%str(,);'; put '%end;'; put ');'; put 'context=quote(cats(symget(''contextname'')));'; put 'if context ne ''""'' then do;'; put 'string=cats(string'; put ',"&comma"'; put ',''{"version": 1,"name": "_contextName","defaultValue":'''; put ',context,'',"type":"CHARACTER","label":"Context Name","required": false}'''; put ');'; put 'end;'; put 'string=cats(string,''],"code":"'');'; put 'put string;'; put 'run;'; put '/* insert the code, escaping double quotes and carriage returns */'; put '%local x fref freflist;'; put '%let freflist= &precode &code ;'; put '%do x=1 %to %sysfunc(countw(&freflist));'; put '%let fref=%scan(&freflist,&x);'; put '%put &sysmacroname: adding &fref;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("&fref","I",1,"B");'; put 'fileid = fopen("&fname3","A",1,"B");'; put 'rec = "20"x;'; put 'do while(fread(filein)=0);'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then do; /* DOUBLE QUOTE */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''"'');rc =fwrite(fileid);'; put 'end;'; put 'else if rec=''0A''x then do; /* LF */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''n'');rc =fwrite(fileid);'; put 'end;'; put 'else if rec=''0D''x then do; /* CR */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''r'');rc =fwrite(fileid);'; put 'end;'; put 'else if rec=''09''x then do; /* TAB */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''t'');rc =fwrite(fileid);'; put 'end;'; put 'else if rec=''5C''x then do; /* BACKSLASH */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'end;'; put 'else if rec=''01''x then do; /* Unprintable */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''u'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''1'');rc =fwrite(fileid);'; put 'end;'; put 'else if rec=''07''x then do; /* Bell Char */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''u'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''7'');rc =fwrite(fileid);'; put 'end;'; put 'else if rec=''1B''x then do; /* escape char */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''u'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''1'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''B'');rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%end;'; put '/* finish off the body of the code file loaded to JES */'; put 'data _null_;'; put 'file &fname3 mod TERMSTR='' '';'; put 'put ''"}'';'; put 'run;'; put '/* now we can create the job!! */'; put '%local fname4;'; put '%let fname4=%mf_getuniquefileref();'; put 'proc http method=''POST'''; put 'in=&fname3'; put 'out=&fname4'; put '&oauth_bearer'; put 'url="&base_uri/jobDefinitions/definitions?parentFolderUri=&parentFolderUri";'; put 'headers ''Content-Type''=''application/vnd.sas.job.definition+json'''; put '%if &grant_type=authorization_code %then %do;'; put '"Authorization"="Bearer &&&access_token_var"'; put '%end;'; put '"Accept"="application/vnd.sas.job.definition+json";'; put '%if &debug=1 %then %do;'; put 'debug level = 3;'; put '%end;'; put 'run;'; put '/*data _null_;infile &fname4;input;putlog _infile_;run;*/'; put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 201)'; put ',mac=&sysmacroname'; put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)'; put ')'; put '/* clear refs */'; put 'filename &fname1 clear;'; put 'filename &fname2 clear;'; put 'filename &fname3 clear;'; put 'filename &fname4 clear;'; put 'libname &libref1 clear;'; put '/* get the url so we can give a helpful log message */'; put '%local url;'; put 'data _null_;'; 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";'; put 'end;'; put 'else url="&systcpiphostname";'; put 'call symputx(''url'',url);'; put 'run;'; put '%put &sysmacroname: Job &name successfully created in &path;'; put '%put &sysmacroname:;'; put '%put &sysmacroname: Check it out here:;'; put '%put &sysmacroname:;%put;'; put '%put &url/SASJobExecution?_PROGRAM=&path/&name;%put;'; put '%put &sysmacroname:;'; put '%put &sysmacroname:;'; put '%mend mv_createjob;'; put '%macro mx_createjob(path=HOME'; put ',name=initJob'; put ',precode='; put ',code=ft15f001'; put ',desc=This job was created by the mx_createjob macro'; put ',replace=YES'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%if &syscc ge 4 %then %do;'; put '%put syscc=&syscc - &sysmacroname will not execute in this state;'; put '%return;'; put '%end;'; put '/* combine precode and code into a single file */'; put '%local tempref x fref freflist;'; put '%let tempref=%mf_getuniquefileref();'; put '%local work tmpfile;'; put '%let work=%sysfunc(pathname(work));'; put '%let tmpfile=&tempref..sas;'; put 'filename &tempref "&work/&tmpfile";'; put '%let freflist=&precode &code ;'; put '%do x=1 %to %sysfunc(countw(&freflist));'; put '%let fref=%scan(&freflist,&x);'; put '%put &sysmacroname: adding &fref;'; put 'data _null_;'; put 'file &tempref lrecl=3000 termstr=crlf mod;'; put 'infile &fref lrecl=3000;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%local platform; %let platform=%mf_getplatform();'; put '%if &platform=SASVIYA %then %do;'; put '%if "&path"="HOME" %then %let path=/Users/&sysuserid/My Folder;'; put '%mv_createjob(path=&path'; put ',name=&name'; put ',code=&tempref'; put ',desc=&desc'; put ',replace=&replace'; put ')'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%if "&path"="HOME" %then %let path=/Users/&_sasjs_username/My Folder;'; put '%ms_createfile(&path/&name..sas'; put ',inref=&tempref'; put ',mdebug=&mdebug'; put ')'; put '%end;'; put '%else %do;'; put '%if "&path"="HOME" %then %let path=/User Folders/&_METAPERSON/My Folder;'; put '%mm_createstp(stpname=&name'; put ',filename=&tmpfile'; put ',directory=&work'; put ',tree=&path'; put ',stpdesc=&desc'; put ',mDebug=&mdebug'; put ')'; put '%end;'; put 'filename &tempref clear;'; put '%mend mx_createjob;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Creates demo tables and associated config'; put '@details Can be removed in prod installs.'; put 'To activate this job, add the following to SETTINGS:'; put '%let demolib=PUBLIC;'; put 'libname &demolib "%sysfunc(pathname(&dc_libref))/&demolib";'; put '%let joblib=HOOKLIB;'; put 'libname &joblib "%sysfunc(pathname(&dc_libref))/&joblib";'; put '%let dcdemoflag=1;'; put 'Note that this will:'; put '* REPLACE any tables named CARS_EXT or COUNTRIES in the PUBLIC library'; put '* REPLACE all DC config for libraries named PUBLIC'; put '* CREATE a folder called "demo" in the DC Apploc'; put '* CREATE two BASE libraries (HOOKLIB & PUBLIC) in the DC (physical) folder'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@li mf_getengine.sas'; put '@li mf_getuser.sas'; put '@li mf_increment.sas'; put '@li mf_nobs.sas'; put '@li mf_uid.sas'; put '@li mp_abort.sas'; put '@li mp_binarycopy.sas'; put '@li mp_replace.sas'; put '@li mx_createjob.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 '%let dcdemoflag=0;'; put 'options dlcreatedir;'; put '%global joblib demolib;'; put '%mpeinit()'; put '%mp_abort(iftrue= (&dcdemoflag ne 1)'; put ',mac=&_program'; put ',msg=%str(Job not configured. See comments in the code.)'; put ')'; put 'data work.cars_ext(index=(carspk=(make model PRODUCTIONDATE) /unique));'; put 'attrib'; put 'MAKE length= $13'; put 'MODEL length= $40'; put 'TYPE length= $8'; put 'ORIGIN length= $6'; put 'COUNTRY length= $30'; put 'POTENTIALBUY length= $6'; put 'COMMENT length= $30'; put 'NOTES length= $30'; put 'CHECKBOXVAR length= $3'; put 'PRODUCTIONDATE length= 8 format=DATE9.'; put ';'; put 'set sashelp.cars;'; put 'retain comment ''n/a'';'; put 'if mod(ceil(ranuni(1)*100),3)=0 then notes=catx('' '',make,type);'; put 'call missing(notes);'; put '/* random / reproducible date between 1960 and 2020 */'; put 'PRODUCTIONDATE=ceil(ranuni(1)*365*60);'; put 'if mod(ceil(ranuni(1)*1000),2)=0 then CHECKBOXVAR=''YES'';'; put 'else CHECKBOXVAR=''No'';'; put 'if mod(ceil(ranuni(1)*1000),3)=0 then POTENTIALBUY=''Maybe'';'; put 'else if mod(ceil(ranuni(1)*1000),2)=0 then POTENTIALBUY=''Yes'';'; put 'else POTENTIALBUY=''No'';'; put 'make=cats(make);'; put 'model=cats(model);'; put 'array cntrs (4) $ 60 _temporary_ ( "Germany" "France" "Poland" "Italy");'; put 'if origin=''USA'' then country=''USA'';'; put 'else if origin=''Asia'' then do;'; put 'if mod(_n_,2)=0 then country=''Japan'';'; put 'else country=''Korea'';'; put 'end;'; put 'else COUNTRY = cntrs[ ceil(dim(cntrs) * ranuni(1))];'; put '*put (_all_)(=);'; put 'run;'; put 'data work.COUNTRIES(index=(countriespk=(origin country) /unique));'; put 'attrib'; put 'ORIGIN length= $6'; put 'COUNTRY length= $30'; put ';'; put 'infile cards dsd;'; put 'input'; put 'ORIGIN :$char.'; put 'COUNTRY :$char.'; put ';'; put 'datalines4;'; put 'Europe,Germany'; put 'Europe,France'; put 'Europe,Poland'; put 'Europe,Italy'; put 'USA,USA'; put 'Asia,Japan'; put 'Asia,Korea'; put ';;;;'; put 'run;'; put 'data work.jobdata;'; put 'length message job $100;'; put 'call missing(of _all_);'; put 'stop;'; put 'run;'; put '%let engine_type=%mf_getengine(&demolib);'; put '%put &=engine_type;'; put '%if &engine_type=CAS %then %do;'; put 'proc cas;'; put 'table.tableExists result=r / name="CARS_EXT" caslib="PUBLIC";'; put 'if r.exists then'; put 'table.dropTable / name="CARS_EXT" caslib="PUBLIC" quiet=TRUE;'; put 'table.tableExists result=r2 / name="COUNTRIES" caslib="PUBLIC";'; put 'if r2.exists then'; put 'table.dropTable / name="COUNTRIES" caslib="PUBLIC" quiet=TRUE;'; put 'table.tableExists result=r2 / name="MPE_AUDIT" caslib="PUBLIC";'; put 'if r2.exists then'; put 'table.dropTable / name="MPE_AUDIT" caslib="PUBLIC" quiet=TRUE;'; put 'quit;'; put 'proc casutil;'; put 'load data=work.CARS_EXT outcaslib="PUBLIC" casout="CARS_EXT" promote;'; put 'load data=work.COUNTRIES outcaslib="PUBLIC" casout="COUNTRIES" promote;'; put 'load data=&dc_libref..MPE_AUDIT'; put 'outcaslib="PUBLIC" casout="MPE_AUDIT" promote;'; put 'run;'; put 'data &joblib..JOBDATA; set work.JOBDATA;run;'; put '%end;'; put '%else %do;'; put 'options replace;'; put 'data &demolib..CARS_EXT; set work.cars_ext;'; put 'data &demolib..COUNTRIES; set work.countries;'; put 'data &joblib..JOBDATA; set work.JOBDATA;run;'; put '%end;'; put '%let apploc=%mf_getapploc(&_program);'; put '%let demolib=%upcase(&demolib);'; put 'proc sql;'; put 'delete from &dc_libref..mpe_tables'; put 'where libref="&demolib" and dsn in (''CARS_EXT'',''COUNTRIES'');'; 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="&demolib";'; put 'LOADTYPE=''UPDATE'';'; put 'NUM_OF_APPROVALS_REQUIRED=1;'; put 'PRE_EDIT_HOOK="&apploc/demo/PREEDIT";'; put 'POST_EDIT_HOOK="&apploc/demo/POSTEDIT";'; put 'PRE_APPROVE_HOOK="&apploc/demo/PREAPPROVE";'; put 'POST_APPROVE_HOOK="&apploc/demo/POSTAPPROVE";'; put 'DSN=''CARS_EXT''; BUSKEY=''MAKE MODEL PRODUCTIONDATE''; output;'; put 'DSN=''COUNTRIES''; BUSKEY=''ORIGIN COUNTRY''; output;'; put 'run;'; put 'proc append base=&dc_libref..MPE_TABLES data=&syslast;'; put 'run;'; put '/* hard coded values for CHECKBOXVAR */'; put '%let rk=1e6;'; put 'proc sql noprint;'; put 'delete from &dc_libref..mpe_selectbox'; put 'where select_lib="&demolib"'; put 'and select_ds in (''CARS_EXT'');'; put 'select max(selectbox_rk) into: rk'; put 'from &dc_libref..mpe_selectbox;'; put 'insert into &dc_libref..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&demolib"'; put ',select_ds="CARS_EXT"'; put ',base_column="CHECKBOXVAR"'; put ',selectbox_value=''Yes'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &dc_libref..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&demolib"'; put ',select_ds="CARS_EXT"'; put ',base_column="CHECKBOXVAR"'; put ',selectbox_value=''No'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put '/* Table driven values */'; put 'delete from &dc_libref..MPE_VALIDATIONS'; put 'where base_lib="&demolib" and base_ds="CARS_EXT";'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="MAKE"'; put ',rule_type=''HARDSELECT'''; put ',rule_value="SASHELP.CARS.MAKE"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="MODEL"'; put ',rule_type=''HARDSELECT'''; put ',rule_value="SASHELP.CARS.MODEL"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="TYPE"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="SASHELP.CARS.TYPE"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="POTENTIALBUY"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="&demolib..CARS_EXT.POTENTIALBUY"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="COMMENT"'; put ',rule_type=''NOTNULL'''; put ',rule_value="n/a"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="ENGINESIZE"'; put ',rule_type=''MINVAL'''; put ',rule_value="1.3"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="ENGINESIZE"'; put ',rule_type=''MAXVAL'''; put ',rule_value="8.3"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=syscc=&syscc during param configuration)'; put ')'; put '/* programmatic values for COUNTRY (Dynamic Dropdown) */'; put 'filename vldtr temp;'; put 'data _null_;'; put 'file vldtr ;'; put 'put ''proc sql;'';'; put 'put ''create table work.vals as'';'; put 'put '' select distinct ORIGIN as raw_value'';'; put 'put " from &demolib..COUNTRIES";'; put 'put '' order by 1;'';'; put 'put ''data work.DYNAMIC_VALUES; set work.vals;display_index=_n_;run;'';'; put 'put '' '';'; put 'put ''proc sql;'';'; put 'put ''create table work.dev as '';'; put 'put '' select a.display_index, a.raw_value'';'; put 'put '' from work.DYNAMIC_VALUES as a'';'; put 'put " left join &demolib..countries as b";'; put 'put " on a.raw_value=b.origin";'; put 'put '' order by display_index;'';'; put 'put ''data work.DYNAMIC_EXTENDED_VALUES; set work.dev;by display_index;'';'; put 'put '' EXTRA_COL_NAME="COUNTRY";'';'; put 'put '' DISPLAY_TYPE="C";'';'; put 'put '' RAW_VALUE_CHAR=raw_value;'';'; put 'put '' RAW_VALUE_NUM=.;'';'; put 'put '' if first.display_index then forced_value=1;'';'; put 'put ''run;'';'; put 'run;'; put '%mx_createjob(path=&apploc/demo'; put ',name=origin,code=vldtr'; put ')'; put 'proc sql;'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="ORIGIN"'; put ',rule_type=''HARDSELECT_HOOK'''; put ',rule_value="&apploc/demo/origin"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/* PRE_EDIT JOB */'; put '%let fvar=XXXXXXXXXXX; /* cannot substitute macvars in parmcards */'; put 'filename ft15f001 temp;'; put 'parmcards4;'; put 'proc sql;'; put 'insert into XXXXXXXXXXX.JOBDATA values('; put '"&orig_libds (%mf_nobs(work.out) obs) fetched for editing %trim('; put ')by %mf_getUser() at %sysfunc(datetime(),datetime19.)","&pgmloc");'; put ';;;;'; put 'filename f1 temp;'; put '%mp_binarycopy(inref=ft15f001, outref=f1)'; put '%mp_replace("%sysfunc(pathname(f1))", findvar=fvar, replacevar=joblib)'; put '%mx_createjob(path=&apploc/demo,name=PREEDIT,code=f1)'; put 'filename ft15f001 clear;'; put '/* POST EDIT JOB */'; put 'filename ft15f001 temp;'; put 'parmcards4;'; put 'proc sql;'; put 'insert into XXXXXXXXXXX.JOBDATA values('; put '"&orig_libds staged %trim('; put ')by %mf_getUser() at %sysfunc(datetime(),datetime19.)","&pgmloc");'; put ';;;;'; put 'filename f2 temp;'; put '%mp_binarycopy(inref=ft15f001, outref=f2)'; put '%mp_replace("%sysfunc(pathname(f2))", findvar=fvar, replacevar=joblib)'; put '%mx_createjob(path=&apploc/demo,name=POSTEDIT,code=f2)'; put 'filename ft15f001 clear;'; put '/* PRE APPROVE JOB */'; put 'filename ft15f001 temp;'; put 'parmcards4;'; put 'proc sql;'; put 'insert into XXXXXXXXXXX.JOBDATA values('; put '"&orig_libds (%mf_nobs(work.staging_ds) obs) under review by %trim('; put ')by %mf_getUser() at %sysfunc(datetime(),datetime19.)","&pgmloc");'; put ';;;;'; put 'filename f3 temp;'; put '%mp_binarycopy(inref=ft15f001, outref=f3)'; put '%mp_replace("%sysfunc(pathname(f3))", findvar=fvar, replacevar=joblib)'; put '%mx_createjob(path=&apploc/demo,name=PREAPPROVE,code=f3)'; put 'filename ft15f001 clear;'; put '/* POST APPROVE JOB */'; put 'filename ft15f001 temp;'; put 'parmcards4;'; put 'proc sql;'; put 'insert into XXXXXXXXXXX.JOBDATA values('; put '"&orig_libds (%mf_nobs(work.staging_ds) obs) approved by %trim('; put ')by %mf_getUser() at %sysfunc(datetime(),datetime19.)","&pgmloc");'; put ';;;;'; put 'filename f4 temp;'; put '%mp_binarycopy(inref=ft15f001, outref=f4)'; put '%mp_replace("%sysfunc(pathname(f4))", findvar=fvar, replacevar=joblib)'; put '%mx_createjob(path=&apploc/demo,name=POSTAPPROVE,code=f4)'; put 'filename ft15f001 clear;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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_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_extr i extr_word outvar;'; put '%if %length(&str1)=0 %then %do;'; put '%put &sysmacroname: str1 is empty, nothing to compare;'; put '%return;'; put '%end;'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%if %sysfunc(indexw(%superq(str2),%superq(extr_word)))=0 %then'; put '%let outvar=&outvar &extr_word;'; put '%end;'; put '/* send out the result without any surrounding whitespace */'; put '%do;&outvar%end;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 'Requires membership of the DC administrators group.'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mp_abort.sas'; put '@li mp_dirlist.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 '%global parent;'; put '%mpeinit()'; put '/* check user is in admin group */'; put '%let cnt=0;'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.usergroups)'; put 'proc sql noprint;'; put 'select count(*) into:cnt'; put 'from usergroups'; put 'where groupname="&mpeadmins";'; put '%mp_abort(iftrue= (&cnt=0)'; put ',mac=&_program'; put ',msg=%str(This service is only available to &mpeadmins members)'; put ')'; put '/* if no parent is specified, default to root - read with symget'; put '* (never re-resolved) so macro content in the param cannot execute */'; put '%let is_bad=0;'; put 'data _null_;'; put 'length _parent $512;'; put '_parent=coalescec(symget(''parent''),''/'');'; put 'if index(_parent,''%'')>0 or index(_parent,''&'')>0 then do;'; put 'putlog ''ERR'' ''OR: Invalid parent:'' _parent;'; put 'call symputx(''is_bad'',1,''l'');'; put 'end;'; put 'else call symputx(''parent'',_parent,''g'');'; put 'run;'; put '%mp_abort(iftrue=(&is_bad=1)'; put ',mac=&_program..sas'; put ',msg=%str(Invalid parent)'; put ')'; put '%mp_dirlist(path=&parent,outds=dirlist, maxdepth=2)'; put '%webout(OPEN)'; put '%webout(OBJ,dirlist)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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_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_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_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 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=YES'; 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_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; 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_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()'; 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 created with the smaller length...'; put '**/'; put 'else if vlen<8 then header=cats(varnm,'':best'',vlen,''.'');'; put 'else header=cats(varnm,'':best32.'');'; 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 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 '%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=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=ISNAME %then %do;'; put '/* match a valid SAS name (V7 rules) */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISNAME";'; 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=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 SAS format*/'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^(?:[_a-z\$]\w{0,31}|[0-9]+)\.[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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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_abort.sas'; put '@li mp_binarycopy.sas'; put '@li mp_ds2cards.sas'; put '@li mp_ds2csv.sas'; put '@li mp_streamfile.sas'; put '@li mp_validatecol.sas'; put '@li mpe_getgroups.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 '%global dclib islib newlib;'; put '%mpeinit()'; put '/* check user is in admin group */'; put '%let cnt=0;'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.usergroups)'; put 'proc sql noprint;'; put 'select count(*) into:cnt'; put 'from usergroups'; put 'where groupname="&mpeadmins";'; put '%mp_abort(iftrue= (&cnt=0)'; put ',mac=&_program'; put ',msg=%str(The DC configuration can only be exported by &mpeadmins members)'; put ')'; put 'data _null_;'; put 'newlib=coalescec(symget(''dclib''),"&mpelib");'; put '%mp_validatecol(newlib,ISLIB,islib)'; put 'call symputx(''islib'',islib);'; put 'call symputx(''newlib'',upcase(newlib));'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&islib ne 1)'; put ',mac=&_program'; put ',msg=%nrstr(&newlib is not a valid libref)'; put ')'; put '%let work=%sysfunc(pathname(work));'; 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 '/* cannot use PROC EXPORT as we need to wrap all csv char values in quotes */'; put '/* cannot use excel as it does not work consistently in all SAS envs */'; put '%mp_ds2csv(&ds,outfile="&work/&newlib..&ds..csv",headerformat=NAME)'; put 'ods package(ProdOutput) add file="&work/&newlib..&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 'if alert_lib="&mpelib" then alert_lib="&newlib";'; 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 'CLS_LIBREF="&newlib";'; 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 'if var_name=''DC_MACROS'' then var_value=tranwrd(var_value,"&mpelib","&newlib");'; 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 'if xl_libref="&mpelib" then xl_libref="&newlib";'; 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 'if rls_libref="&mpelib" then rls_libref="&newlib";'; 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 'if libref="&mpelib" then libref="&newlib";'; 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 'data MPE_XLMAP_INFO;'; put 'set &mpelib..MPE_XLMAP_INFO;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'drop tx_: ;'; put 'if XLMAP_TARGETLIBDS=:"&mpelib.." then'; put 'XLMAP_TARGETLIBDS=tranwrd(XLMAP_TARGETLIBDS,"&mpelib..","&newlib..");'; put 'run;'; put '%conditional_export(MPE_XLMAP_INFO)'; put 'data MPE_XLMAP_RULES;'; put 'set &mpelib..MPE_XLMAP_RULES;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_XLMAP_RULES)'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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_ds2ddl(libref,ds,fref=getddl,flavour=SAS,showlog=YES,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 '%local constraints_used;'; put '%macro addConst();'; 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_ds2ddl;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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_ds2ddl.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_ds2ddl(&DC_LIBREF'; put ',flavour=&flavour'; put ',schema=&schema'; put ',applydttm=YES'; put ',showlog=NO'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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_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_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC_EMAIL"'; put ',var_name="SUBMITTED_TEMPLATE"'; put ',var_value=''Dear user,''!!''0A''x!!''Please be advised that a change to table'''; put '!!'' &alert_lib..&alert_ds has been proposed by &from_user on the '''; put '!!''&syshostname SAS server.''!!''0A''x!!''Reason provided: '''; put '!!''%superq(SUBMITTED_TXT)'''; put '!!''0A''x!!''This is an automated email by Data Controller for SAS. For '''; put '!!''documentation, please visit https://docs.datacontroller.io'''; put ',var_active=1'; put ',var_desc=''Template email, sent after submitting a change'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC_EMAIL"'; put ',var_name="APPROVED_TEMPLATE"'; put ',var_value=''Dear user,''!!''0A''x!!''Please be advised that a change to table'''; put '!!'' &alert_lib..&alert_ds has been approved by &from_user on the '''; put '!!''&syshostname SAS server.''!!''0A''x!!''This is an automated email by Data'''; put '!!'' Controller for SAS. For documentation, please visit '''; put '!!''https://docs.datacontroller.io'''; put ',var_active=1'; put ',var_desc=''Template email, sent after approving a change'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC_EMAIL"'; put ',var_name="REJECTED_TEMPLATE"'; put ',var_value=''Dear user,''!!''0A''x!!''Please be advised that a change to table'''; put '!!'' &alert_lib..&alert_ds has been rejected by &from_user on the '''; put '!!''&syshostname SAS server.''!!''0A''x!!''Reason provided: '''; put '!!''%superq(REVIEW_REASON_TXT)'''; put '!!''0A''x!!''This is an automated email by Data Controller for SAS. For '''; put '!!''documentation, please visit https://docs.datacontroller.io'''; put ',var_active=1'; put ',var_desc=''Template email, sent after rejecting a change'';'; 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="HARDSELECT"'; 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="HARDSELECT_HOOK"'; 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="HIDDEN"'; 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="MAXVAL"'; 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="MINVAL"'; 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_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="NOTNULL"'; 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="NUMBER_FORMAT"'; put ',selectbox_order=8'; 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="READONLY"'; put ',selectbox_order=9'; 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="ROUND"'; put ',selectbox_order=10'; 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=11'; 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=12'; 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="HARDREGEX"'; put ',selectbox_order=13'; 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="SOFTREGEX"'; put ',selectbox_order=14'; 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="HARDFORMULA"'; put ',selectbox_order=15'; 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="SOFTFORMULA"'; put ',selectbox_order=16'; 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_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_VALIDATIONS"'; put ',base_column="RULE_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_SECURITY"'; put ',base_column="DSN"'; 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_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_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_SUBGROUP_ID"'; put ',rule_type=''NOTNULL'''; 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 '/* test hard regex - SOME_CHAR must contain "the" or "data" */'; 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_CHAR"'; put ',rule_type=''HARDREGEX'''; put ',rule_value=''/the|data/i'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/* test soft regex - SOME_CHAR should contain the letter "t" */'; 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_CHAR"'; put ',rule_type=''SOFTREGEX'''; put ',rule_value=''/t/'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/* test soft regex - PRIMARY_KEY_FIELD should be an integer (yellow if it'; put 'contains a decimal point). All generated keys are integers, so no'; put 'warning shows until a demo user enters a decimal. */'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_X_TEST"'; put ',base_col="PRIMARY_KEY_FIELD"'; put ',rule_type=''SOFTREGEX'''; put ',rule_value=''/^\d+$/'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/* test hard regex - SOME_SHORTNUM must not be between 1 and 5. Generated'; put 'data starts at 6, so nothing is blocked until a demo user enters 1-5. */'; 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_SHORTNUM"'; put ',rule_type=''HARDREGEX'''; put ',rule_value=''/^(?![1-5](\.\d+)?$).*/'''; 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=8'; 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=8'; 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=8'; 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=8'; 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=8'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=5'; put ',some_char=''= testing the formula situation'''; put ',some_dropdown=''Option 1'''; put ',some_num=42'; put ',some_date=42'; put ',some_datetime=42'; put ',some_time=42'; put ',some_shortnum=8'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=6'; put ',some_char="''=the formula with leading apostrophe"'; put ',some_dropdown=''Option 1'''; put ',some_num=42'; put ',some_date=42'; put ',some_datetime=42'; put ',some_time=42'; put ',some_shortnum=8'; 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=6+round(ranuni(0)*94,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 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_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 mm_createdocument('; put 'tree=/User Folders/sasdemo'; put ',name=myNote'; put ',desc=Created by &sysmacroname'; put ',textrole='; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',mDebug=1'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%mp_abort(iftrue= (%mf_verifymacvars(tree name)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: tree name)'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue= (&type ne Tree)'; put ',mac=mm_createdocument.sas'; put ',msg=Tree &tree does not exist!'; put ')'; put '/**'; put '* Check object does not exist already'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&name","Note",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''docuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &type = Document %then %do;'; put '%put Document &name already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Now we can create the document'; put '*/'; put 'filename &frefin temp;'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'name=quote("&name");'; put 'desc=quote("&desc");'; put 'textrole=quote("&textrole");'; put 'treeuri=quote("&treeuri");'; put 'put "$METAREPOSITORY"/'; put '''"/'; put '" "/'; put ''' '' /'; put '''''/'; put '/*URI="Document for public note" */'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout verbose;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%mend mm_createdocument;'; put '%macro mm_createfolder(path=,mDebug=0);'; put '%put &sysmacroname: execution started for &path;'; put '%local dbg errorcheck;'; put '%if &mDebug=0 %then %let dbg=*;'; put '%local parentFolderObjId child errorcheck paths;'; put '%let paths=0;'; put '%let errorcheck=1;'; put '%if &syscc ge 4 %then %do;'; put '%put SYSCC=&syscc - this macro requires a clean session;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'length objId parentId objType parent child $200'; put 'folderPath $1000;'; put 'call missing (of _all_);'; put 'folderPath = "%trim(&path)";'; put '* remove any trailing slash ;'; put 'if ( substr(folderPath,length(folderPath),1) = ''/'' ) then'; put 'folderPath=substr(folderPath,1,length(folderPath)-1);'; put '* name must not be blank;'; put 'if ( folderPath = '''' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH parameter value must be non-blank";'; put 'end;'; put '* must have a starting slash ;'; put 'if ( substr(folderPath,1,1) ne ''/'' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH param value must have starting slash";'; put 'stop;'; put 'end;'; put '* check if folder already exists ;'; put 'rc=metadata_pathobj('''',cats(folderPath,"(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'put "NOTE: Folder " folderPath " already exists!";'; put 'stop;'; put 'end;'; put '* do not create a root (one level) folder ;'; put 'if countc(folderPath,''/'')=1 then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname will not create a new ROOT folder";'; put 'stop;'; put 'end;'; put '* check that root folder exists ;'; put 'root=cats(''/'',scan(folderpath,1,''/''),"(Folder)");'; put 'if metadata_pathobj('''',root,"",objType,parentId)<1 then do;'; put 'put ''ERR'' +(-1) "OR: " root " does not exist!";'; put 'stop;'; put 'end;'; put '* check that parent folder exists ;'; put 'child=scan(folderPath,-1,''/'');'; put 'parent=substr(folderpath,1,length(folderpath)-length(child)-1);'; put 'rc=metadata_pathobj('''',cats(parent,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'putlog ''The following folders will be created:'';'; put '/* folder does not exist - so start from top and work down */'; put 'length newpath $1000;'; put 'paths=0;'; put 'do x=2 to countw(folderpath,''/'');'; put 'newpath='''';'; put 'do i=1 to x;'; put 'newpath=cats(newpath,''/'',scan(folderpath,i,''/''));'; put 'end;'; put 'rc=metadata_pathobj('''',cats(newpath,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'paths+1;'; put 'call symputx(cats(''path'',paths),newpath);'; put 'putlog newpath;'; put 'end;'; put 'call symputx(''paths'',paths);'; put 'end;'; put 'end;'; put 'else putlog "parent " parent " exists";'; put 'call symputx(''parentFolderObjId'',parentId,''l'');'; put 'call symputx(''child'',child,''l'');'; put 'call symputx(''errorcheck'',0,''l'');'; put '&dbg put (_all_)(=);'; put 'run;'; put '%if &errorcheck=1 or &syscc ge 4 %then %return;'; put '%if &paths>0 %then %do x=1 %to &paths;'; put '%put executing recursive call for &&path&x;'; put '%mm_createfolder(path=&&path&x)'; put '%end;'; put '%else %do;'; put 'filename __newdir temp;'; put 'options noquotelenmax;'; put '%local inmeta;'; put '%put creating: &path;'; put '%let inmeta=$METAREPOSITORY'; put ''; put 'SAS268435456'; put ';'; put 'proc metadata in="&inmeta" out=__newdir verbose;'; put 'run ;'; put '/* check it was successful */'; put 'data _null_;'; put 'length objId parentId objType parent child $200 ;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj('''',cats("&path","(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'putlog "SUCCCESS! &path created.";'; put 'end;'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unsuccessful attempt to create &path";'; put 'call symputx(''syscc'',8);'; put 'end;'; put 'run;'; put '/* write the response to the log for debugging */'; put '%if &mDebug ne 0 %then %do;'; put 'data _null_;'; put 'infile __newdir lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'filename __newdir clear;'; put '%end;'; put '%put &sysmacroname: execution finished for &path;'; put '%mend mm_createfolder;'; put '%macro mm_createlibrary('; put 'libname=My New Library'; put ',libref=mynewlib'; put ',libdesc=Created automatically using the mm_createlibrary macro'; put ',engine=BASE'; put ',tree=/User Folders/sasdemo'; put ',servercontext=SASApp'; put ',directory=/tmp/somelib'; put ',IsPreassigned=0'; put ',mDebug=0'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%let libref=%upcase(&libref);'; put '/**'; put '* Check Library does not exist already with this libname'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Name=''&libname''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libname (&libname);'; put '%return;'; put '%end;'; put '/**'; put '* Check Library does not exist already with this libref'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Libref=''&libref''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libref (&libref) ;'; put '%return;'; put '%end;'; put '/**'; put '* Attempt to create tree'; put '*/'; put '%mm_createfolder(path=&tree)'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Create filerefs for proc metadata call'; put '*/'; put 'filename &frefin temp;'; put 'filename &frefout temp;'; put '%mp_abort(iftrue= ('; put '&engine=BASE & %mf_verifymacvars(libname libref engine servercontext tree)=0'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: libname libref engine servercontext tree)'; put ')'; put '%if &engine=BASE %then %do;'; put '/**'; put '* Check that the ServerContext exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:ServerContext?@Name=''&ServerContext''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''serveruri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne ServerContext %then %do;'; put '%put %str(ERR)OR: ServerContext (&ServerContext) does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Get prototype info'; put '*/'; put 'data _null_;'; put 'length type uri str $256;'; put 'str="omsobj:Prototype?@Name=''Library.SAS.Prototype.Name.xmlKey.txt''";'; put 'rc=metadata_resolve(str,type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''prototypeuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Prototype %then %do;'; put '%put %str(ERR)OR: Prototype Library.SAS.Prototype.Name.xmlKey.txt not found;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Physical location exists'; put '*/'; put '%if %sysfunc(fileexist(&directory))=0 %then %do;'; put '%put %str(ERR)OR: Physical directory (&directory) does not appear to exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Directory Object exists in metadata'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Directory %then %do;'; put '%put NOTE: Directory object does not exist for (&directory) location;'; put '%put NOTE: It will now be created;'; put 'data _null_;'; put 'file &frefin;'; put 'directory=quote(symget(''directory''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input; put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure directory (&directory) object was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype2'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &checktype2 ne Directory %then %do;'; put '%put %str(ERR)OR: Directory (&directory) object was NOT created!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Directory (&directoryuri) successfully created!;'; put '%end;'; put '/**'; put '* check SAS version'; put '*/'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: Version 9.3 or later required;'; put '%return;'; put '%end;'; put '/**'; put '* Prepare the XML and create the library'; put '*/'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'directoryuri=quote(symget(''directoryuri''));'; put 'libname=quote(symget(''libname''));'; put 'libref=quote(symget(''libref''));'; put 'IsPreassigned=quote(symget(''IsPreassigned''));'; put 'prototypeuri=quote(symget(''prototypeuri''));'; put '/* escape description so it can be stored as XML */'; put 'libdesc=tranwrd(symget(''libdesc''),''&'',''&'');'; put 'libdesc=tranwrd(libdesc,''<'',''<'');'; put 'libdesc=tranwrd(libdesc,''>'',''>'');'; put 'libdesc=tranwrd(libdesc,"''",''''');'; put 'libdesc=tranwrd(libdesc,''"'',''"'');'; put 'libdesc=tranwrd(libdesc,''0A''x,'' '');'; put 'libdesc=tranwrd(libdesc,''0D''x,'' '');'; put 'libdesc=tranwrd(libdesc,''$'',''$'');'; put 'libdesc=quote(trim(libdesc));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put ''' ''/'; put ''' "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '" "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '''SAS''/'; put '''268435456'';'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose ;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure library (&libname) was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&libname","Library",type,uri);'; put 'call symputx(''libtype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &libtype ne SASLibrary %then %do;'; put '%put %str(ERR)OR: Could not find (&libname) at (&tree)!!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Library (&libname) successfully created in (&tree)!;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Other library engine types are not yet supported!!;'; put '%end;'; put '/**'; put '* Wrap up'; put '*/'; put '%if &mdebug ne 1 %then %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_createlibrary;'; 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 mm_getDirectories('; put 'path='; put ',outds=work.mm_getDirectories'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getDirectories.sas;'; put '%&mD.put _local_;'; put 'data &outds (keep=directoryuri name directoryname directorydesc );'; put 'length directoryuri name directoryname directorydesc $256;'; put 'call missing(of _all_);'; put '__i+1;'; put '%if %length(&path)=0 %then %do;'; put 'do while'; put '(metadata_getnobj("omsobj:Directory?@Id contains ''.''",__i,directoryuri)>0);'; put '%end; %else %do;'; put 'do while('; put 'metadata_getnobj("omsobj:Directory?@DirectoryName=''&path''",__i,directoryuri)'; put '>0'; put ');'; put '%end;'; put '__rc1=metadata_getattr(directoryuri, "Name", name);'; put '__rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname);'; put '__rc3=metadata_getattr(directoryuri, "Desc", directorydesc);'; put '&mD.putlog (_all_) (=);'; put 'drop __:;'; put '__i+1;'; put 'if sum(of __rc1-__rc3)=0 then output;'; put 'end;'; put 'run;'; put '%mend mm_getDirectories;'; put '%macro mm_updatestpsourcecode(stp='; put ',stpcode='; put ',minify=NO'; put ',mdebug=0'; put ');'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&stp.(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '%if &mdebug=1 %then %do;'; put 'put tsuri= value=;'; put '%end;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%if &tsuri=stopifempty %then %do;'; put '%put %str(WARN)ING: &stp.(StoredProcess) not found!;'; put '%return;'; put '%end;'; put '%if %length(&stpcode)<2 %then %do;'; put '%put %str(WARN)ING: No SAS code supplied!!;'; put '%return;'; put '%end;'; put '%local frefin frefout;'; put '%let frefin=%mf_getuniquefileref();'; put '%let frefout=%mf_getuniquefileref();'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'put "$METAREPOSITORY'; put '2 %then %do;'; put 'data _null_;'; put 'file &frefin lrecl=32767 mod;'; put 'infile &stpcode lrecl=32767;'; put 'length outstr $32767;'; put 'input outstr ;'; put '/* escape code so it can be stored as XML */'; put 'outstr=tranwrd(_infile_,''&'',''&'');'; put 'outstr=tranwrd(outstr,''<'',''<'');'; put 'outstr=tranwrd(outstr,''>'',''>'');'; put 'outstr=tranwrd(outstr,"''",''''');'; put 'outstr=tranwrd(outstr,''"'',''"'');'; put 'outstr=tranwrd(outstr,''0A''x,'' '');'; put 'outstr=tranwrd(outstr,''0D''x,'' '');'; put 'outstr=tranwrd(outstr,''$'',''$'');'; put '%if &minify=YES %then %do;'; put 'outstr=cats(outstr);'; put 'if outstr ne '''';'; put 'if not (outstr=:''/*'' and subpad(left(reverse(outstr)),1,2)=''/*'');'; put '%end;'; put 'outstr=trim(outstr);'; put 'put outstr '' '';'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &frefin mod;'; put 'put "''>SAS268435456'; put '";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_updatestpsourcecode;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro mm_getservercontexts('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* first get list of available repos */'; put '%mm_getrepos(outds=work.repos)'; put '%let repocnt=0;'; put 'data _null_;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put 'filename __mc1 temp;'; put 'filename __mc2 temp;'; put 'data &outds;'; put 'length serveruri servername $200;'; put 'call missing (of _all_);'; put 'stop;'; put 'run;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'ServerContextSAS'; put '0"'; put 'out=__mc1;'; put 'run;'; put '/*'; put 'data _null_;'; put 'infile __mc1 lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put 'data _null_;'; put 'file __mc2;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2;'; put 'proc append base=&outds data=__mc3.SASContexts;run;'; put 'libname __mc3 clear;'; put '%end;'; put 'options metarepository=&repo;'; put 'filename __mc1 clear;'; put 'filename __mc2 clear;'; put '%mend mm_getservercontexts;'; 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 mm_createstp('; put 'stpname=SASjs Default STP'; put ',stpdesc=This stp was created automatically by the mm_createstp macro'; put ',filename=mm_createstp.sas'; put ',directory=SASEnvironment/SASCode'; put ',tree=/User Folders/sasdemo'; put ',package=false'; put ',streaming=true'; put ',outds=work.mm_createstp'; put ',mDebug=0'; put ',server=SASApp'; put ',stptype=1'; put ',minify=NO'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',LogicalServerType=Sps'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_CreateSTP.sas;'; put '%&mD.put _local_;'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(stpname filename directory tree)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: stpname filename directory tree)'; put ')'; put '%mp_dropmembers(%scan(&outds,2,.))'; put '/* check LogicalServerType validity */'; put '%mp_abort('; put 'iftrue=('; put '&LogicalServerType ne Sps'; put 'and &LogicalServerType ne Wks'; put 'and &LogicalServerType ne Any'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid value for LogicalServerType (&LogicalServerType))'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check STP does not exist already'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&stpname",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype = ClassifierMap %then %do;'; put '%put %str(WARN)ING: Stored Process &stpname already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that the physical file exists'; put '*/'; put '%if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do;'; put '%put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!;'; put '%return;'; put '%end;'; put '%if &stptype=1 %then %do;'; put '/* type 1 STP - where code is stored on filesystem */'; put '%if %sysevalf(&sysver lt 9.2) %then %do;'; put '%put %str(WARN)ING: Version 9.2 or later required;'; put '%return;'; put '%end;'; put '/* check directory object (where 9.2 source code reference is stored) */'; put 'data _null_;'; put 'length id $20 dirtype $256;'; put 'rc=metadata_resolve("&directory",dirtype,id);'; put 'call symputx(''checkdirtype'',dirtype,''l'');'; put 'run;'; put '%if &checkdirtype ne Directory %then %do;'; put '%mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug)'; put '%if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do;'; put '%put %str(WARN)ING: The directory object does not exist for &directory;'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'directoryuri="&directory";'; put 'run;'; put '%end;'; put 'data &outds (keep=stpuri prompturi fileuri texturi);'; put 'length stpuri prompturi fileuri texturi serveruri $256 ;'; put 'if _n_=1 then call missing (of _all_);'; put 'set &outds;'; put '/* final checks on uris */'; put 'length id $20 type $256;'; put '__rc=metadata_resolve("&treeuri",type,id);'; put 'if type ne ''Tree'' then do;'; put 'putlog "%str(WARN)ING: Invalid tree URI: &treeuri";'; put 'stopme=1;'; put 'end;'; put '__rc=metadata_resolve(directoryuri,type,id);'; put 'if type ne ''Directory'' then do;'; put 'putlog "%str(WARN)ING: Invalid directory URI: " directoryuri;'; put 'stopme=1;'; put 'end;'; put '/* get server info */'; put '__rc=metadata_resolve("&server",type,serveruri);'; put 'if type ne ''LogicalServer'' then do;'; put '__rc=metadata_getnobj("omsobj:LogicalServer?@Name=''&server''",1,serveruri);'; put 'if serveruri='''' then do;'; put 'putlog "%str(WARN)ING: Invalid server: &server";'; put 'stopme=1;'; put 'end;'; put 'end;'; put 'if stopme=1 then do;'; put 'putlog (_all_)(=);'; put 'stop;'; put 'end;'; put '/* create empty prompt */'; put 'rc1=METADATA_NEWOBJ(''PromptGroup'',prompturi,''Parameters'');'; put 'rc2=METADATA_SETATTR(prompturi, ''UsageVersion'', ''1000000'');'; put 'rc3=METADATA_SETATTR(prompturi, ''GroupType'',''2'');'; put 'rc4=METADATA_SETATTR(prompturi, ''Name'',''Parameters'');'; put 'rc5=METADATA_SETATTR(prompturi, ''PublicType'',''Embedded:PromptGroup'');'; put 'GroupInfo='; put '"";'; put 'rc6 = METADATA_SETATTR(prompturi, ''GroupInfo'',groupinfo);'; put 'if sum(of rc1-rc6) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating prompt.";'; put 'if prompturi ne . then do;'; put 'putlog '' Removing orphan: '' prompturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'put rc=;'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a file uri */'; put 'rc7=METADATA_NEWOBJ(''File'',fileuri,''SP Source File'');'; put 'rc8=METADATA_SETATTR(fileuri, ''FileName'',"&filename");'; put 'rc9=METADATA_SETATTR(fileuri, ''IsARelativeName'',''1'');'; put 'rc10=METADATA_SETASSN(fileuri, ''Directories'',''MODIFY'',directoryuri);'; put 'if sum(of rc7-rc10) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating file.";'; put 'if fileuri ne . then do;'; put 'putlog '' Removing orphans:'' prompturi fileuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a TextStore object */'; put 'rc11= METADATA_NEWOBJ(''TextStore'',texturi,''Stored Process'');'; put 'rc12= METADATA_SETATTR(texturi, ''TextRole'',''StoredProcessConfiguration'');'; put 'rc13= METADATA_SETATTR(texturi, ''TextType'',''XML'');'; put 'storedtext='''''; put '!!""'; put '!!"";'; put 'rc14= METADATA_SETATTR(texturi, ''StoredText'',storedtext);'; put 'if sum(of rc11-rc14) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating TextStore.";'; put 'if texturi ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create meta obj */'; put 'rc15= METADATA_NEWOBJ(''ClassifierMap'',stpuri,"&stpname");'; put 'rc16= METADATA_SETASSN(stpuri, ''Trees'',''MODIFY'',treeuri);'; put 'rc17= METADATA_SETASSN(stpuri, ''ComputeLocations'',''MODIFY'',serveruri);'; put 'rc18= METADATA_SETASSN(stpuri, ''SourceCode'',''MODIFY'',fileuri);'; put 'rc19= METADATA_SETASSN(stpuri, ''Prompts'',''MODIFY'',prompturi);'; put 'rc20= METADATA_SETASSN(stpuri, ''Notes'',''MODIFY'',texturi);'; put 'rc21= METADATA_SETATTR(stpuri, ''PublicType'', ''StoredProcess'');'; put 'rc22= METADATA_SETATTR(stpuri, ''TransformRole'', ''StoredProcess'');'; put 'rc23= METADATA_SETATTR(stpuri, ''UsageVersion'', ''1000000'');'; put 'rc24= METADATA_SETATTR(stpuri, ''Desc'', "&stpdesc");'; put '/* tidy up if err */'; put 'if sum(of rc15-rc24) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating STP.";'; put 'if stpuri ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi stpuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'rc = METADATA_DELOBJ(stpuri);'; put 'put (_all_)(=);'; put 'end;'; put 'end;'; put 'else do;'; put 'fullpath=cats(''_program='',treepath,"/&stpname");'; put 'putlog "NOTE: Stored Process Created!";'; put 'putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath;'; put 'putlog "NOTE- "; putlog "NOTE-";'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%else %if &stptype=2 %then %do;'; put '/* type 2 stp - code is stored in metadata */'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs;'; put '%return;'; put '%end;'; put '/* check we have the correct ServerContext */'; put '%mm_getservercontexts(outds=contexts)'; put '%local serveruri; %let serveruri=NOTFOUND;'; put 'data _null_;'; put 'set contexts;'; put 'where upcase(servername)="%upcase(&server)";'; put 'call symputx(''serveruri'',serveruri);'; put 'run;'; put '%if &serveruri=NOTFOUND %then %do;'; put '%put %str(WARN)ING: ServerContext *&server* not found!;'; put '%return;'; put '%end;'; put '/**'; put '* First, create a Hello World type 2 stored process'; put '*/'; put 'filename &frefin temp;'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'stpdesc=quote(symget(''stpdesc''));'; put 'stpname=quote(symget(''stpname''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '" "/'; put '" "/'; put '" "/'; put '" "/'; put ''' ''/'; put ''' '' /'; put '" "/'; put '" "/'; put ''' ''/'; put '" "/'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout ;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '/**'; put '* Next, add the source code'; put '*/'; put '%mm_updatestpsourcecode(stp=&tree/&stpname'; put ',stpcode="&directory/&filename"'; put ',mdebug=&mdebug'; put ',minify=&minify)'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: STPTYPE=*&stptype* not recognised!;'; put '%end;'; put '%mend mm_createstp;'; put '%macro mm_deletedocument('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check document exist'; put '*/'; put '%local type;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &type ne Document %then %do;'; put '%put %str(WARN)ING: No Document found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = Document %then %do;'; put '%put %str(ERR)OR: Document not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletedocument;'; put '%macro mm_deletestp('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check STP does exist'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype ne ClassifierMap %then %do;'; put '%put NOTE: No Stored Process found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = ClassifierMap %then %do;'; put '%put %str(ERR)OR: STP not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletestp;'; put '%macro mm_getstpinfo(pgm'; put ',outds=work.mm_getstpinfo'; put ',mDebug=0'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put 'data &outds;'; put 'length type stp_uri tsuri servercontext value $200'; put 'StoredProcessConfiguration $1000 sourcecode_first32k $32767;'; put 'keep path stp_uri sourcecode_first32k StoredProcessConfiguration'; put 'servercontext;'; put 'call missing (of _all_);'; put 'path="&pgm(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,stp_uri)>0 then do;'; put '/* get attributes */'; put 'cnt=1;'; put 'do while (metadata_getnasn(stp_uri,"Notes",cnt,tsuri)>0);'; put 'rc1=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put 'rc2=metadata_getattr(tsuri,"StoredText",sourcecode_first32k);'; put 'end;'; put 'else if value="Stored Process" then do;'; put 'rc3=metadata_getattr(tsuri,"StoredText",StoredProcessConfiguration);'; put 'end;'; put 'cnt+1;'; put 'end;'; put '/* get context (should only be one) */'; put 'rc4=metadata_getnasn(stp_uri,"ComputeLocations",1,tsuri);'; put 'rc5=metadata_getattr(tsuri,"Name",servercontext);'; put 'end;'; put 'else do;'; put 'put ''ERR'' +(-1) "OR: could not find " path;'; put 'put (_all_)(=);'; put 'end;'; put '&md.put (_all_)(=);'; put 'run;'; put '%mend mm_getstpinfo ;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief service for creating the configuration tables in DEMO mode.'; put '@details'; put 'STP for creating the configuration tables in DEMO mode.'; put 'It also adds the STAGING directory as subdirectory to the BASE'; put 'library location.'; put 'Note - the CURLIB var is added during the build process.'; put '@warning This STP self destructs! It will delete itself after a successful run'; put 'to avoid being executed twice (and overwriting actual data)'; put '

SAS Macros

'; put '@li mf_getapploc.sas'; put '@li mf_getuser.sas'; put '@li mf_mkdir.sas'; put '@li mm_createdocument.sas'; put '@li mm_createlibrary.sas'; put '@li mm_createstp.sas'; put '@li mm_deletedocument.sas'; put '@li mm_deletestp.sas'; put '@li mm_getstpcode.sas'; put '@li mm_getstpinfo.sas'; put '@li mp_abort.sas'; put '@li mp_init.sas'; put '@li mpe_makedata.sas'; put '@li mpe_makedatamodel.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 '%mp_init()'; put '%global admin repo path; /* URL params from configurator */'; put '%let repo=%sysfunc(coalescec(&repo,Foundation));'; put '%let admin=%sysfunc(coalescec(&admin,dc-admin));'; put '%let dcpath=%sysfunc(coalescec(&path,NOTFOUND));'; put '%mp_abort(iftrue= ("&dcpath" = "NOTFOUND")'; put ',mac=&_program'; put ',msg=%str(PATH variable was not provided)'; put ')'; put '%let root=%mf_getapploc();'; put '%let work=%sysfunc(pathname(work));'; put '%let dc_libref=%upcase(DC%substr(%sysevalf(%sysfunc(datetime())/60),3,6));'; put '%let DC_LIBNAME=Data Controller(&dc_libref);'; put '%let dcpath=&dcpath/&dc_libref;'; put '%put _all_;'; put '%mf_mkdir(&dcpath/dc_staging)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Unable to create &dcpath using &sysuserid)'; put ')'; put '/* check we have the admin rights to update the items in the Admin folder */'; put '%mm_createdocument(tree=&root/services/admin,name=permTest)'; put '%mm_deletedocument(target=&root/services/admin/permTest)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(User &_metaperson does not have WriteMetadata on metadata folder:'; put '&root )'; put ')'; 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 on physical'; put 'directory: &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 '/* get the server context from the current STP */'; put '%mm_getstpinfo(&_program,outds=work.stpinfo)'; put 'data _null_;'; put 'set work.stpinfo;'; put 'call symputx(''serverContext'',serverContext);'; put 'run;'; put '/* create the library */'; put '%mm_createlibrary('; put 'libname=&DC_LIBNAME'; put ',libref=&dc_libref'; put ',libdesc=Data Controller for SAS configuration tables'; put ',engine=BASE'; put ',tree=&root/data'; put ',servercontext=&serverContext'; put ',directory=&dcpath'; put ',mDebug=1'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=buildtermsas9'; put ',msg=%str(Unable to create &dc_libref library)'; put ')'; put '/* assign the library */'; put 'libname &dc_libref "&dcpath";'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=buildtermsas9'; put ',msg=%str(Unable to assign the &dc_libref library)'; put ')'; put '/* make the tables */'; put '/* SASAdministrators */'; put '%mpe_makedatamodel(lib=&dc_libref)'; put '%mpe_makedata(lib=&DC_LIBREF,mpeadmins=&admin,path=%str(&dcpath))'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem creating tables in &DC_LIBREF library\n'; put 'SYSERRORTEXT=&SYSERRORTEXT \n'; put 'SYSWARNINGTEXT=&SYSWARNINGTEXT)'; put ')'; put '/* register tables in metadata */'; put 'proc metalib;'; put 'omr (library="&DC_LIBNAME");'; put 'folder="&root/data";'; put 'update_rule=(delete);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem registering metadata for tables in &DC_LIBREF library \n'; put 'os user=&sysuserid \n'; put 'metaperson=%mf_getuser() \n'; put 'SYSERRORTEXT=&SYSERRORTEXT \n'; put 'SYSWARNINGTEXT=&SYSWARNINGTEXT'; put ')'; put ')'; put '/* finally, update the app component. The user will need WM perms for this. */'; put 'data _null_;'; put 'file "&work/settings.sas" mod ;'; put 'put '' '';'; put 'put ''%global DC_LIBREF DC_LIBNAME DC_LIBLOC DC_STAGING_AREA DC_ADMIN_GROUP'';'; put 'put '' DC_REPO_USERS DC_DTTMTFMT DC_MACROS;'';'; put 'put '' '';'; put 'put ''/* This metadata library (libref) contains control datasets for DC */'';'; put 'put ''/* If a different libref must be used, configure it below */'';'; put 'put ''%let DC_LIBREF='' "&DC_LIBREF;";'; put 'put ''%let DC_LIBNAME='' "&DC_LIBNAME;";'; put 'put ''%let DC_LIBLOC='' "&dcpath;";'; put 'put '' '';'; put 'put ''libname &DC_LIBREF "&dc_libloc";'';'; put 'put '' '';'; put 'put ''/* This metadata group has unrestricted access to Data Controller */'';'; put 'put ''%let dc_admin_group='' "&admin;";'; put 'put '' '';'; put 'put ''/* This repository is used to query for users and groups */'';'; put 'put ''%let dc_repo_users='' "&repo;";'; put 'put '' '';'; put 'put ''/* This physical location is used for staging data and audit history */'';'; put 'put ''%let dc_staging_area=&dc_libloc/dc_staging;'';'; put 'put '' '';'; put 'put ''data _null_;'';'; put 'put '' set &DC_LIBREF..mpe_config(where=('';'; put 'put '' var_scope="DC" '';'; put 'put '' and &dc_dttmtfmt. lt tx_to'';'; put 'put '' and var_active=1'';'; put 'put " ));";'; put 'put " call symputx(var_name,var_value,''G'');";'; put 'put '' putlog var_name "=" var_value;'';'; put 'put "run;";'; put 'put '' '';'; put 'put ''/* to override any DC macros with client versions, place them below */'';'; put 'put ''options insert=(sasautos=("&dc_macros"));'';'; put 'run;'; put '/*'; put 'put ''data _null_;'';'; put 'put '' length lib_uri up_uri path $256;'';'; put 'put '' call missing (of _all_);'';'; put 'put '' rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''''&dc_libref''''",1,lib_uri);'';'; put 'put '' rc=metadata_getnasn(lib_uri,"UsingPackages",1,up_uri);'';'; put 'put '' rc=metadata_getattr(up_uri,"DirectoryName",path);'';'; put 'put '' call symputx("dc_libloc",path);'';'; put 'put ''run;'';'; put '*/'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=syscc=&syscc when preparing data_controller_settings)'; put ')'; put '%mm_createstp(stpname=Data_Controller_Settings'; put ',filename=settings.sas'; put ',directory=&work'; put ',tree=&root/services/public'; put ',Server=&serverContext'; put ',stptype=2'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str('; put 'Problem updating the dc_staging area in'; put '&root/services/public/DataController Settings \n'; put 'SYSERRORTEXT=&SYSERRORTEXT \n'; put 'SYSWARNINGTEXT=&SYSWARNINGTEXT'; put ')'; put ')'; put 'data _null_;'; put 'file _webout;'; put 'put ''

Data Controller Config

'';'; put 'put ''

The following items have been successfully configured:

'';'; put 'put "";'; put 'put "

Next Steps:

";'; put 'put "
  1. Populate ";'; put 'put "Table Lineage
  2. ";'; put 'put "
  3. Populate";'; put 'put "Data Catalog
  4. ";'; put 'put "
  5. Now, ";'; put 'put "hereLaunch!
";'; put 'run;'; put '/* We ran successfully, now remove configurator and makedata STPs */'; put '%mm_deletestp(target=&root/services/admin/configurator)'; put '%mm_deletestp(target=&_program)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=makelib; 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '%macro mm_createfolder(path=,mDebug=0);'; put '%put &sysmacroname: execution started for &path;'; put '%local dbg errorcheck;'; put '%if &mDebug=0 %then %let dbg=*;'; put '%local parentFolderObjId child errorcheck paths;'; put '%let paths=0;'; put '%let errorcheck=1;'; put '%if &syscc ge 4 %then %do;'; put '%put SYSCC=&syscc - this macro requires a clean session;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'length objId parentId objType parent child $200'; put 'folderPath $1000;'; put 'call missing (of _all_);'; put 'folderPath = "%trim(&path)";'; put '* remove any trailing slash ;'; put 'if ( substr(folderPath,length(folderPath),1) = ''/'' ) then'; put 'folderPath=substr(folderPath,1,length(folderPath)-1);'; put '* name must not be blank;'; put 'if ( folderPath = '''' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH parameter value must be non-blank";'; put 'end;'; put '* must have a starting slash ;'; put 'if ( substr(folderPath,1,1) ne ''/'' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH param value must have starting slash";'; put 'stop;'; put 'end;'; put '* check if folder already exists ;'; put 'rc=metadata_pathobj('''',cats(folderPath,"(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'put "NOTE: Folder " folderPath " already exists!";'; put 'stop;'; put 'end;'; put '* do not create a root (one level) folder ;'; put 'if countc(folderPath,''/'')=1 then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname will not create a new ROOT folder";'; put 'stop;'; put 'end;'; put '* check that root folder exists ;'; put 'root=cats(''/'',scan(folderpath,1,''/''),"(Folder)");'; put 'if metadata_pathobj('''',root,"",objType,parentId)<1 then do;'; put 'put ''ERR'' +(-1) "OR: " root " does not exist!";'; put 'stop;'; put 'end;'; put '* check that parent folder exists ;'; put 'child=scan(folderPath,-1,''/'');'; put 'parent=substr(folderpath,1,length(folderpath)-length(child)-1);'; put 'rc=metadata_pathobj('''',cats(parent,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'putlog ''The following folders will be created:'';'; put '/* folder does not exist - so start from top and work down */'; put 'length newpath $1000;'; put 'paths=0;'; put 'do x=2 to countw(folderpath,''/'');'; put 'newpath='''';'; put 'do i=1 to x;'; put 'newpath=cats(newpath,''/'',scan(folderpath,i,''/''));'; put 'end;'; put 'rc=metadata_pathobj('''',cats(newpath,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'paths+1;'; put 'call symputx(cats(''path'',paths),newpath);'; put 'putlog newpath;'; put 'end;'; put 'call symputx(''paths'',paths);'; put 'end;'; put 'end;'; put 'else putlog "parent " parent " exists";'; put 'call symputx(''parentFolderObjId'',parentId,''l'');'; put 'call symputx(''child'',child,''l'');'; put 'call symputx(''errorcheck'',0,''l'');'; put '&dbg put (_all_)(=);'; put 'run;'; put '%if &errorcheck=1 or &syscc ge 4 %then %return;'; put '%if &paths>0 %then %do x=1 %to &paths;'; put '%put executing recursive call for &&path&x;'; put '%mm_createfolder(path=&&path&x)'; put '%end;'; put '%else %do;'; put 'filename __newdir temp;'; put 'options noquotelenmax;'; put '%local inmeta;'; put '%put creating: &path;'; put '%let inmeta=$METAREPOSITORY'; put ''; put 'SAS268435456'; put ';'; put 'proc metadata in="&inmeta" out=__newdir verbose;'; put 'run ;'; put '/* check it was successful */'; put 'data _null_;'; put 'length objId parentId objType parent child $200 ;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj('''',cats("&path","(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'putlog "SUCCCESS! &path created.";'; put 'end;'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unsuccessful attempt to create &path";'; put 'call symputx(''syscc'',8);'; put 'end;'; put 'run;'; put '/* write the response to the log for debugging */'; put '%if &mDebug ne 0 %then %do;'; put 'data _null_;'; put 'infile __newdir lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'filename __newdir clear;'; put '%end;'; put '%put &sysmacroname: execution finished for &path;'; put '%mend mm_createfolder;'; put '%macro mm_createlibrary('; put 'libname=My New Library'; put ',libref=mynewlib'; put ',libdesc=Created automatically using the mm_createlibrary macro'; put ',engine=BASE'; put ',tree=/User Folders/sasdemo'; put ',servercontext=SASApp'; put ',directory=/tmp/somelib'; put ',IsPreassigned=0'; put ',mDebug=0'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%let libref=%upcase(&libref);'; put '/**'; put '* Check Library does not exist already with this libname'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Name=''&libname''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libname (&libname);'; put '%return;'; put '%end;'; put '/**'; put '* Check Library does not exist already with this libref'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Libref=''&libref''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libref (&libref) ;'; put '%return;'; put '%end;'; put '/**'; put '* Attempt to create tree'; put '*/'; put '%mm_createfolder(path=&tree)'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Create filerefs for proc metadata call'; put '*/'; put 'filename &frefin temp;'; put 'filename &frefout temp;'; put '%mp_abort(iftrue= ('; put '&engine=BASE & %mf_verifymacvars(libname libref engine servercontext tree)=0'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: libname libref engine servercontext tree)'; put ')'; put '%if &engine=BASE %then %do;'; put '/**'; put '* Check that the ServerContext exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:ServerContext?@Name=''&ServerContext''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''serveruri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne ServerContext %then %do;'; put '%put %str(ERR)OR: ServerContext (&ServerContext) does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Get prototype info'; put '*/'; put 'data _null_;'; put 'length type uri str $256;'; put 'str="omsobj:Prototype?@Name=''Library.SAS.Prototype.Name.xmlKey.txt''";'; put 'rc=metadata_resolve(str,type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''prototypeuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Prototype %then %do;'; put '%put %str(ERR)OR: Prototype Library.SAS.Prototype.Name.xmlKey.txt not found;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Physical location exists'; put '*/'; put '%if %sysfunc(fileexist(&directory))=0 %then %do;'; put '%put %str(ERR)OR: Physical directory (&directory) does not appear to exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Directory Object exists in metadata'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Directory %then %do;'; put '%put NOTE: Directory object does not exist for (&directory) location;'; put '%put NOTE: It will now be created;'; put 'data _null_;'; put 'file &frefin;'; put 'directory=quote(symget(''directory''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input; put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure directory (&directory) object was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype2'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &checktype2 ne Directory %then %do;'; put '%put %str(ERR)OR: Directory (&directory) object was NOT created!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Directory (&directoryuri) successfully created!;'; put '%end;'; put '/**'; put '* check SAS version'; put '*/'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: Version 9.3 or later required;'; put '%return;'; put '%end;'; put '/**'; put '* Prepare the XML and create the library'; put '*/'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'directoryuri=quote(symget(''directoryuri''));'; put 'libname=quote(symget(''libname''));'; put 'libref=quote(symget(''libref''));'; put 'IsPreassigned=quote(symget(''IsPreassigned''));'; put 'prototypeuri=quote(symget(''prototypeuri''));'; put '/* escape description so it can be stored as XML */'; put 'libdesc=tranwrd(symget(''libdesc''),''&'',''&'');'; put 'libdesc=tranwrd(libdesc,''<'',''<'');'; put 'libdesc=tranwrd(libdesc,''>'',''>'');'; put 'libdesc=tranwrd(libdesc,"''",''''');'; put 'libdesc=tranwrd(libdesc,''"'',''"'');'; put 'libdesc=tranwrd(libdesc,''0A''x,'' '');'; put 'libdesc=tranwrd(libdesc,''0D''x,'' '');'; put 'libdesc=tranwrd(libdesc,''$'',''$'');'; put 'libdesc=quote(trim(libdesc));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put ''' ''/'; put ''' "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '" "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '''SAS''/'; put '''268435456'';'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose ;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure library (&libname) was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&libname","Library",type,uri);'; put 'call symputx(''libtype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &libtype ne SASLibrary %then %do;'; put '%put %str(ERR)OR: Could not find (&libname) at (&tree)!!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Library (&libname) successfully created in (&tree)!;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Other library engine types are not yet supported!!;'; put '%end;'; put '/**'; put '* Wrap up'; put '*/'; put '%if &mdebug ne 1 %then %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_createlibrary;'; put '%macro mm_createdocument('; put 'tree=/User Folders/sasdemo'; put ',name=myNote'; put ',desc=Created by &sysmacroname'; put ',textrole='; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',mDebug=1'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%mp_abort(iftrue= (%mf_verifymacvars(tree name)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: tree name)'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue= (&type ne Tree)'; put ',mac=mm_createdocument.sas'; put ',msg=Tree &tree does not exist!'; put ')'; put '/**'; put '* Check object does not exist already'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&name","Note",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''docuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &type = Document %then %do;'; put '%put Document &name already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Now we can create the document'; put '*/'; put 'filename &frefin temp;'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'name=quote("&name");'; put 'desc=quote("&desc");'; put 'textrole=quote("&textrole");'; put 'treeuri=quote("&treeuri");'; put 'put "$METAREPOSITORY"/'; put '''"/'; put '" "/'; put ''' '' /'; put '''''/'; put '/*URI="Document for public note" */'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout verbose;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%mend mm_createdocument;'; put '%macro mm_deletedocument('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check document exist'; put '*/'; put '%local type;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &type ne Document %then %do;'; put '%put %str(WARN)ING: No Document found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = Document %then %do;'; put '%put %str(ERR)OR: Document not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletedocument;'; put '%macro mm_deletestp('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check STP does exist'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype ne ClassifierMap %then %do;'; put '%put NOTE: No Stored Process found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = ClassifierMap %then %do;'; put '%put %str(ERR)OR: STP not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletestp;'; 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 mm_getDirectories('; put 'path='; put ',outds=work.mm_getDirectories'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getDirectories.sas;'; put '%&mD.put _local_;'; put 'data &outds (keep=directoryuri name directoryname directorydesc );'; put 'length directoryuri name directoryname directorydesc $256;'; put 'call missing(of _all_);'; put '__i+1;'; put '%if %length(&path)=0 %then %do;'; put 'do while'; put '(metadata_getnobj("omsobj:Directory?@Id contains ''.''",__i,directoryuri)>0);'; put '%end; %else %do;'; put 'do while('; put 'metadata_getnobj("omsobj:Directory?@DirectoryName=''&path''",__i,directoryuri)'; put '>0'; put ');'; put '%end;'; put '__rc1=metadata_getattr(directoryuri, "Name", name);'; put '__rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname);'; put '__rc3=metadata_getattr(directoryuri, "Desc", directorydesc);'; put '&mD.putlog (_all_) (=);'; put 'drop __:;'; put '__i+1;'; put 'if sum(of __rc1-__rc3)=0 then output;'; put 'end;'; put 'run;'; put '%mend mm_getDirectories;'; put '%macro mm_updatestpsourcecode(stp='; put ',stpcode='; put ',minify=NO'; put ',mdebug=0'; put ');'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&stp.(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '%if &mdebug=1 %then %do;'; put 'put tsuri= value=;'; put '%end;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%if &tsuri=stopifempty %then %do;'; put '%put %str(WARN)ING: &stp.(StoredProcess) not found!;'; put '%return;'; put '%end;'; put '%if %length(&stpcode)<2 %then %do;'; put '%put %str(WARN)ING: No SAS code supplied!!;'; put '%return;'; put '%end;'; put '%local frefin frefout;'; put '%let frefin=%mf_getuniquefileref();'; put '%let frefout=%mf_getuniquefileref();'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'put "$METAREPOSITORY'; put '2 %then %do;'; put 'data _null_;'; put 'file &frefin lrecl=32767 mod;'; put 'infile &stpcode lrecl=32767;'; put 'length outstr $32767;'; put 'input outstr ;'; put '/* escape code so it can be stored as XML */'; put 'outstr=tranwrd(_infile_,''&'',''&'');'; put 'outstr=tranwrd(outstr,''<'',''<'');'; put 'outstr=tranwrd(outstr,''>'',''>'');'; put 'outstr=tranwrd(outstr,"''",''''');'; put 'outstr=tranwrd(outstr,''"'',''"'');'; put 'outstr=tranwrd(outstr,''0A''x,'' '');'; put 'outstr=tranwrd(outstr,''0D''x,'' '');'; put 'outstr=tranwrd(outstr,''$'',''$'');'; put '%if &minify=YES %then %do;'; put 'outstr=cats(outstr);'; put 'if outstr ne '''';'; put 'if not (outstr=:''/*'' and subpad(left(reverse(outstr)),1,2)=''/*'');'; put '%end;'; put 'outstr=trim(outstr);'; put 'put outstr '' '';'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &frefin mod;'; put 'put "''>SAS268435456'; put '";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_updatestpsourcecode;'; put '%macro mm_getservercontexts('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* first get list of available repos */'; put '%mm_getrepos(outds=work.repos)'; put '%let repocnt=0;'; put 'data _null_;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put 'filename __mc1 temp;'; put 'filename __mc2 temp;'; put 'data &outds;'; put 'length serveruri servername $200;'; put 'call missing (of _all_);'; put 'stop;'; put 'run;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'ServerContextSAS'; put '0"'; put 'out=__mc1;'; put 'run;'; put '/*'; put 'data _null_;'; put 'infile __mc1 lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put 'data _null_;'; put 'file __mc2;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2;'; put 'proc append base=&outds data=__mc3.SASContexts;run;'; put 'libname __mc3 clear;'; put '%end;'; put 'options metarepository=&repo;'; put 'filename __mc1 clear;'; put 'filename __mc2 clear;'; put '%mend mm_getservercontexts;'; 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 mm_createstp('; put 'stpname=SASjs Default STP'; put ',stpdesc=This stp was created automatically by the mm_createstp macro'; put ',filename=mm_createstp.sas'; put ',directory=SASEnvironment/SASCode'; put ',tree=/User Folders/sasdemo'; put ',package=false'; put ',streaming=true'; put ',outds=work.mm_createstp'; put ',mDebug=0'; put ',server=SASApp'; put ',stptype=1'; put ',minify=NO'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',LogicalServerType=Sps'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_CreateSTP.sas;'; put '%&mD.put _local_;'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(stpname filename directory tree)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: stpname filename directory tree)'; put ')'; put '%mp_dropmembers(%scan(&outds,2,.))'; put '/* check LogicalServerType validity */'; put '%mp_abort('; put 'iftrue=('; put '&LogicalServerType ne Sps'; put 'and &LogicalServerType ne Wks'; put 'and &LogicalServerType ne Any'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid value for LogicalServerType (&LogicalServerType))'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check STP does not exist already'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&stpname",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype = ClassifierMap %then %do;'; put '%put %str(WARN)ING: Stored Process &stpname already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that the physical file exists'; put '*/'; put '%if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do;'; put '%put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!;'; put '%return;'; put '%end;'; put '%if &stptype=1 %then %do;'; put '/* type 1 STP - where code is stored on filesystem */'; put '%if %sysevalf(&sysver lt 9.2) %then %do;'; put '%put %str(WARN)ING: Version 9.2 or later required;'; put '%return;'; put '%end;'; put '/* check directory object (where 9.2 source code reference is stored) */'; put 'data _null_;'; put 'length id $20 dirtype $256;'; put 'rc=metadata_resolve("&directory",dirtype,id);'; put 'call symputx(''checkdirtype'',dirtype,''l'');'; put 'run;'; put '%if &checkdirtype ne Directory %then %do;'; put '%mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug)'; put '%if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do;'; put '%put %str(WARN)ING: The directory object does not exist for &directory;'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'directoryuri="&directory";'; put 'run;'; put '%end;'; put 'data &outds (keep=stpuri prompturi fileuri texturi);'; put 'length stpuri prompturi fileuri texturi serveruri $256 ;'; put 'if _n_=1 then call missing (of _all_);'; put 'set &outds;'; put '/* final checks on uris */'; put 'length id $20 type $256;'; put '__rc=metadata_resolve("&treeuri",type,id);'; put 'if type ne ''Tree'' then do;'; put 'putlog "%str(WARN)ING: Invalid tree URI: &treeuri";'; put 'stopme=1;'; put 'end;'; put '__rc=metadata_resolve(directoryuri,type,id);'; put 'if type ne ''Directory'' then do;'; put 'putlog "%str(WARN)ING: Invalid directory URI: " directoryuri;'; put 'stopme=1;'; put 'end;'; put '/* get server info */'; put '__rc=metadata_resolve("&server",type,serveruri);'; put 'if type ne ''LogicalServer'' then do;'; put '__rc=metadata_getnobj("omsobj:LogicalServer?@Name=''&server''",1,serveruri);'; put 'if serveruri='''' then do;'; put 'putlog "%str(WARN)ING: Invalid server: &server";'; put 'stopme=1;'; put 'end;'; put 'end;'; put 'if stopme=1 then do;'; put 'putlog (_all_)(=);'; put 'stop;'; put 'end;'; put '/* create empty prompt */'; put 'rc1=METADATA_NEWOBJ(''PromptGroup'',prompturi,''Parameters'');'; put 'rc2=METADATA_SETATTR(prompturi, ''UsageVersion'', ''1000000'');'; put 'rc3=METADATA_SETATTR(prompturi, ''GroupType'',''2'');'; put 'rc4=METADATA_SETATTR(prompturi, ''Name'',''Parameters'');'; put 'rc5=METADATA_SETATTR(prompturi, ''PublicType'',''Embedded:PromptGroup'');'; put 'GroupInfo='; put '"";'; put 'rc6 = METADATA_SETATTR(prompturi, ''GroupInfo'',groupinfo);'; put 'if sum(of rc1-rc6) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating prompt.";'; put 'if prompturi ne . then do;'; put 'putlog '' Removing orphan: '' prompturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'put rc=;'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a file uri */'; put 'rc7=METADATA_NEWOBJ(''File'',fileuri,''SP Source File'');'; put 'rc8=METADATA_SETATTR(fileuri, ''FileName'',"&filename");'; put 'rc9=METADATA_SETATTR(fileuri, ''IsARelativeName'',''1'');'; put 'rc10=METADATA_SETASSN(fileuri, ''Directories'',''MODIFY'',directoryuri);'; put 'if sum(of rc7-rc10) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating file.";'; put 'if fileuri ne . then do;'; put 'putlog '' Removing orphans:'' prompturi fileuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a TextStore object */'; put 'rc11= METADATA_NEWOBJ(''TextStore'',texturi,''Stored Process'');'; put 'rc12= METADATA_SETATTR(texturi, ''TextRole'',''StoredProcessConfiguration'');'; put 'rc13= METADATA_SETATTR(texturi, ''TextType'',''XML'');'; put 'storedtext='''''; put '!!""'; put '!!"";'; put 'rc14= METADATA_SETATTR(texturi, ''StoredText'',storedtext);'; put 'if sum(of rc11-rc14) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating TextStore.";'; put 'if texturi ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create meta obj */'; put 'rc15= METADATA_NEWOBJ(''ClassifierMap'',stpuri,"&stpname");'; put 'rc16= METADATA_SETASSN(stpuri, ''Trees'',''MODIFY'',treeuri);'; put 'rc17= METADATA_SETASSN(stpuri, ''ComputeLocations'',''MODIFY'',serveruri);'; put 'rc18= METADATA_SETASSN(stpuri, ''SourceCode'',''MODIFY'',fileuri);'; put 'rc19= METADATA_SETASSN(stpuri, ''Prompts'',''MODIFY'',prompturi);'; put 'rc20= METADATA_SETASSN(stpuri, ''Notes'',''MODIFY'',texturi);'; put 'rc21= METADATA_SETATTR(stpuri, ''PublicType'', ''StoredProcess'');'; put 'rc22= METADATA_SETATTR(stpuri, ''TransformRole'', ''StoredProcess'');'; put 'rc23= METADATA_SETATTR(stpuri, ''UsageVersion'', ''1000000'');'; put 'rc24= METADATA_SETATTR(stpuri, ''Desc'', "&stpdesc");'; put '/* tidy up if err */'; put 'if sum(of rc15-rc24) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating STP.";'; put 'if stpuri ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi stpuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'rc = METADATA_DELOBJ(stpuri);'; put 'put (_all_)(=);'; put 'end;'; put 'end;'; put 'else do;'; put 'fullpath=cats(''_program='',treepath,"/&stpname");'; put 'putlog "NOTE: Stored Process Created!";'; put 'putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath;'; put 'putlog "NOTE- "; putlog "NOTE-";'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%else %if &stptype=2 %then %do;'; put '/* type 2 stp - code is stored in metadata */'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs;'; put '%return;'; put '%end;'; put '/* check we have the correct ServerContext */'; put '%mm_getservercontexts(outds=contexts)'; put '%local serveruri; %let serveruri=NOTFOUND;'; put 'data _null_;'; put 'set contexts;'; put 'where upcase(servername)="%upcase(&server)";'; put 'call symputx(''serveruri'',serveruri);'; put 'run;'; put '%if &serveruri=NOTFOUND %then %do;'; put '%put %str(WARN)ING: ServerContext *&server* not found!;'; put '%return;'; put '%end;'; put '/**'; put '* First, create a Hello World type 2 stored process'; put '*/'; put 'filename &frefin temp;'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'stpdesc=quote(symget(''stpdesc''));'; put 'stpname=quote(symget(''stpname''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '" "/'; put '" "/'; put '" "/'; put '" "/'; put ''' ''/'; put ''' '' /'; put '" "/'; put '" "/'; put ''' ''/'; put '" "/'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout ;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '/**'; put '* Next, add the source code'; put '*/'; put '%mm_updatestpsourcecode(stp=&tree/&stpname'; put ',stpcode="&directory/&filename"'; put ',mdebug=&mdebug'; put ',minify=&minify)'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: STPTYPE=*&stptype* not recognised!;'; put '%end;'; put '%mend mm_createstp;'; 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 '* 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Create a demo (base engine) library'; put '@details'; put 'Creates the library'; put '@warning This STP self destructs! It will delete itself after a successful run'; put 'to avoid being executed twice (and overwriting actual data)'; put '

SAS Macros

'; put '@li mm_createlibrary.sas'; put '@li mm_createdocument.sas'; put '@li mm_deletedocument.sas'; put '@li mp_abort.sas'; put '@li dc_assignlib.sas'; put '@li mm_deletestp.sas'; put '@li mm_createstp.sas'; put '@li mf_mkdir.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 dcpath;'; put '%let dclib=%upcase(DC%substr(%sysevalf(%sysfunc(datetime())/60),3,6));'; put '%let dclibname=Data Controller(&dclib);'; put '%let work=%sysfunc(pathname(work));'; put '%let dcpath=&dcpath/&dclib;'; put '%mf_mkdir(&dcpath)'; put '%mf_mkdir(&work)'; put '%put &=dcpath;'; put '/* check we have physical permissions to the DCLIB folder */'; put 'data _null_;'; put 'file "&dcpath/permTest.txt";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &sysuserid does not have WRITE permissions on physical'; put 'directory: &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 '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Unable to write to &dcpath)'; put ')'; put 'data _null_;'; put 'pgm="&_program";'; put 'rootlen=length(trim(pgm))-length("/services/admin/makelib");'; put 'root=substr(pgm,1,rootlen);'; put 'putlog root=;'; put 'call symputx(''deploy_dir'',root);'; put 'run;'; put 'options noquotelenmax ps=max;'; put '/* check we have the admin rights to update the items in the Admin folder */'; put '%mm_createdocument(tree=&deploy_dir/services/admin,name=permTest)'; put '%mm_deletedocument(target=&deploy_dir/services/admin/permTest)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &_metaperson does not have WriteMetadata on SAS folder:'; put '&deploy_dir )'; put ')'; put '/**'; put '* Create library and load data'; put '*/'; put '%let mpelibname=Data Controller (&dclib);'; put '%mm_createlibrary('; put 'libname=&mpelibname'; put ',libref=&dclib'; put ',libdesc=Configuration tables for the MacroPeople Data Controller application'; put ',engine=BASE'; put ',tree=&deploy_dir/data'; put ',servercontext=SASApp'; put ',directory=&dcpath'; put ',mDebug=1)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Unable to create &dclib library)'; put ')'; put '/* get direct libref */'; put '%dc_assignlib(READ,&dclib)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Unable to assign &dclib library)'; put ')'; put '/* create an initial settings service (this will be overwritten in the'; put 'data update step)'; put '*/'; put '%let temploc=&work/temp.txt;'; put 'data _null_;'; put 'file "&temploc" ;'; put 'put ''/* Data Controller Precode */'' / / ;'; put 'put '' '';'; put 'put ''options noquotelenmax ps=max;'';'; put 'put ''%global DC_LIBREF DC_LIBNAME;'';'; put 'put '' '';'; put 'put ''/* This metadata library (libref) contains control datasets for DC */'';'; put 'put ''/* If a different libref must be used, configure it below */'';'; put 'put ''%let DC_LIBREF='' "&dclib;";'; put 'put ''%let DC_LIBNAME='' "&mpelibname;";'; put 'put '' '';'; put 'put ''/* get physical path for direct libname - needed to track requests */'';'; put 'put ''data _null_;'';'; put 'put '' length lib_uri up_uri path $256;'';'; put 'put '' call missing (of _all_);'';'; put 'put '' rc=metadata_getnobj("omsobj:SASLibrary?@Libref=''''&dc_libref''''",1,lib_uri);'';'; put 'put '' rc=metadata_getnasn(lib_uri,"UsingPackages",1,up_uri);'';'; put 'put '' rc=metadata_getattr(up_uri,"DirectoryName",path);'';'; put 'put '' call symputx("dc_libloc",path);'';'; put 'put ''run;'';'; put 'put ''libname &DC_LIBREF "&dc_libloc";'';'; put 'put '' '';'; put 'run;'; put '%mm_deletestp(target=&deploy_dir/services/public/Data_Controller_Settings)'; put '%mm_createstp(stpname=Data_Controller_Settings'; put ',filename=temp.txt'; put ',directory=&work'; put ',tree=&deploy_dir/services/public'; put ',Server=SASApp'; put ',stptype=2'; put ',mdebug=1'; put ',stpdesc=Data Controller Configuration'; put ',minify=NO)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Issue creating settings stp)'; put ')'; put 'data _null_;'; put 'file _webout;'; put 'put "

Library &dclib successfully assigned

";'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_getuniquelibref(prefix=mc);'; put '%local x maxtries;'; 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_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; 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 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 ',AUDITFOLDER=0'; 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 '%mp_abort('; put 'iftrue=(%sysfunc(exist(&base_lib..&base_dsn)) ne 1),'; put 'msg=&base_lib..&base_dsn does not exist'; put ')'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 ),'; put 'msg=&append_lib..&append_dsn does not exist'; put ')'; 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 '%mp_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 '%mp_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/* set up folder */'; put '%local tmplib;%let tmplib=%mf_getuniquelibref();'; put '%if "&AUDITFOLDER"="0" %then %do;'; put 'filename tmp temp lrecl=10000;'; put 'libname &tmplib (work);'; put '%end;'; put '%else %do;'; put '%mf_mkdir(&AUDITFOLDER)'; put 'filename tmp "&AUDITFOLDER/deleterecords.sas" lrecl=10000;'; put 'libname &tmplib "&AUDITFOLDER";'; put '%end;'; put '/**'; put '* Create closeout statements. If UPDATE approach and CAS engine, use the'; put '* DeleteRows action (as regular SQL deletes are not supported).'; put '* Otherwise, the deletions 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 etype;'; put '%let update_cnt=0;'; put '%let etype=%mf_getengine(&base_lib);'; put '%put &=etype;'; put '%if &loadtype=UPDATE and &etype=CAS %then %do;'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds &tmplib..deleterecords;'; put 'set work.___closeout1;'; put 'keep &pk;'; put 'run;'; put '/* build the proc */'; put 'data _null_;'; put 'file tmp;'; put 'put "/* libname approve ''&AUDITFOLDER''; */";'; put 'put ''proc cas;table.deleteRows result=r/ table={'' ;'; put 'put " caslib=''&base_lib'',name=''&base_dsn'',where=''1=1'',";'; put 'put " whereTable={caslib=''CASUSER'',name=''&delds''}";'; put 'put "};";'; put 'put "call symputx(''update_cnt'',r.RowsDeleted);";'; put 'put "quit;";'; put 'put "data;set casuser.&delds;putlog (_all_)(=);run;";'; put 'put ''%put &=update_cnt;'';'; put 'put "proc sql;drop table CASUSER.&delds;";'; put 'stop;'; put 'run;'; put '%end;'; put '%else %do;'; 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 'put ''%put update_cnt=&update_cnt;'';'; put 'run;'; put '%end;'; 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 '%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 '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; 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_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_extr i extr_word outvar;'; put '%if %length(&str1)=0 %then %do;'; put '%put &sysmacroname: str1 is empty, nothing to compare;'; put '%return;'; put '%end;'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%if %sysfunc(indexw(%superq(str2),%superq(extr_word)))=0 %then'; put '%let outvar=&outvar &extr_word;'; put '%end;'; put '/* send out the result without any surrounding whitespace */'; put '%do;&outvar%end;'; 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) format=32. into: maxkey trimmed'; put '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=%sysevalf(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%sysevalf(&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=%sysevalf(&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 %sysevalf(&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 mp_rowhash('; put 'md5_col='; put ',cvars='; put ',nvars='; put ');'; put '/* DATA step temp variables use five leading underscores. The names'; put 'are generated at macro invocation to avoid clashing with data columns. */'; put '%local state digest pair numtext normal i chars nums;'; put '%let state=%mf_getuniquename(prefix=_____state_);'; put '%let digest=%mf_getuniquename(prefix=_____digest_);'; put '%let pair=%mf_getuniquename(prefix=_____pair_);'; put '%let numtext=%mf_getuniquename(prefix=_____numtext_);'; put '%let normal=%mf_getuniquename(prefix=_____normal_);'; put '%let i=%mf_getuniquename(prefix=_____i_);'; put '%let chars=%mf_getuniquename(prefix=_____chars_);'; put '%let nums=%mf_getuniquename(prefix=_____nums_);'; put 'length &state $16'; put '&digest $16'; put '&pair $32'; put '&numtext $64'; put '&normal &i 8;'; put 'if _n_=1 then call missing(&state,&digest,&pair,&numtext,&normal,&i);'; put 'drop &state &digest &pair &numtext &normal &i;'; put '/* Versioned seed prevents confusion with other hashing schemes. */'; put '&state = md5(''DC HASH v2'');'; put '%if %length(&cvars)>0 %then %do;'; put 'array &chars{*} $ &cvars;'; put 'do &i = 1 to dim(&chars);'; put '/* Leading blanks are retained. */'; put '&digest = md5(trimn(&chars[&i]));'; put 'substr(&pair, 1, 16) = &state;'; put 'substr(&pair, 17, 16) = &digest;'; put '&state = md5(&pair);'; put 'end;'; put '%end;'; put '%if %length(&nvars)>0 %then %do;'; put 'array &nums{*} &nvars;'; put 'do &i = 1 to dim(&nums);'; put '/*'; put 'multiply-by-one for consistent cross-system precision.'; put 'Ignore null to protect SAS special missing values.'; put 'Cannot use IFN() as it evaluates both sides'; put '*/'; put 'if missing(&nums[&i]) then &normal = &nums[&i];'; put 'else &normal = &nums[&i] * 1;'; put '&numtext = put(&normal, binary64.);'; put '&digest = md5(trim(&numtext));'; put 'substr(&pair, 1, 16) = &state;'; put 'substr(&pair, 17, 16) = &digest;'; put '&state = md5(&pair);'; put 'end;'; put '%end;'; put '&md5_col = put(&state, $hex32.);'; put '%mend mp_rowhash;'; 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=33;'; 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 %length(&CLOSE_VARS)>0 and (&engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW or &engine_type=SASIOSNF)'; 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 hash_char_vars hash_num_vars ;'; 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 '/* Character variables are hashed separately from numerics so that the'; put 'iterative hash can be built with arrays rather than by concatenating'; put 'hundreds of 32-byte hex strings. */'; put 'select name into: hash_char_vars separated by '' '''; put 'from work.bitemp_cols'; put 'where type in (2,6)'; put 'and upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select name into: hash_num_vars separated by '' '''; put 'from work.bitemp_cols'; put 'where type not in (2,6)'; put 'and 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 &=hash_char_vars;'; put '%put &=hash_num_vars;'; 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___) or %index(%quote(&cols),_____) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___" or "_____".%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 '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&hash_num_vars'; put ')'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; 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 or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%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 '%let temp_table=%upcase(%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 in-db empty table with PK + MD5 only */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&temp_table'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; 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 '%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 '/* inherit remote length to handle byte expansion */'; put 'if 0 then set &base_lib..&temp_table(keep=&md5_col);'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; 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 hash_char_vars=&hash_char_vars;'; put '%put hash_num_vars=&hash_num_vars;'; put 'data work.bitemp1_current(drop=___TMP___NEW_FLG);'; put 'set work.bitemp0_base(drop=&md5_col);'; put 'if ___TMP___NEW_FLG=0;'; put 'length &md5_col $32;'; put '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&hash_num_vars'; put ')'; put 'run;'; 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 '/* For bitemporal we also include the business dates in the comparison hash.'; put 'The business dates are passed as prefix numerics so that both lookup and'; put 'update tables use exactly the same hashing order. */'; 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 '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&bus_from &bus_to &hash_num_vars'; put ')'; 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 '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&bus_from &bus_to &hash_num_vars'; put ')'; 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 or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%then %do;'; put '%let innertable=%upcase(%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 '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&innertable'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put 'exec (create table &innertable'; put '(like &baselib_schema.&base_dsn)'; put ') by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; 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 '%put Not using passthrough for *&engine_type* engine;'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '%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 '/** @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 dc_refreshcatalog(libref);'; put '/* take current repository */'; put '%local repo repocnt xx;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'put (_all_)(=);'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put &sysmacroname #&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 xx=1 %to &repocnt;'; put 'options metarepository=&&repo&xx;'; put '%mpe_refreshlibs()'; put '/* get libs to be ignored */'; put '%local ignorelist;'; put 'proc sql noprint;'; put 'select var_value into: ignorelist'; put 'from &mpelib..MPE_CONFIG'; put 'where var_scope=''DC_CATALOG'''; put 'and var_name="DC_IGNORELIBS"'; put 'and &dc_dttmtfmt. < TX_TO'; put 'and var_active=1;'; put '/* get all libs */'; put '%let libcnt=0;'; put 'data libraries;'; put 'set &mpelib..mpe_datacatalog_libs;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'if index("&ignorelist",''|''!!upcase(trim(libref))!!''|'')=0;'; put 'i+1;'; put 'call symputx(cats(''lib'',i),libref);'; put 'call symputx(''libcnt'',i);'; put 'run;'; put '%local i;'; put '%do i=1 %to &libcnt;'; put '%dc_assignlib(WRITE,&&lib&i)'; put '%mpe_refreshtables(&&lib&i)'; put '%mpe_refreshcatalogs(&&lib&i)'; put '%end;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_refreshcatalog;'; 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=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=ISNAME %then %do;'; put '/* match a valid SAS name (V7 rules) */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISNAME";'; 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=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 SAS format*/'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^(?:[_a-z\$]\w{0,31}|[0-9]+)\.[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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 'Requires membership of the DC administrators group.'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@li dc_refreshcatalog.sas'; put '@li mf_getuser.sas'; put '@li mpe_getgroups.sas'; put '@li mp_abort.sas'; put '@li mp_validatecol.sas'; put '@li mpeterm.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 '/**'; put '* libref is a request input used in dc_assignlib and catalog queries -'; put '* it must be a well-formed libref before use. Read with symget (never'; put '* re-resolved) and validated in a data step.'; put '*/'; put '%let is_lib=0;'; put 'data _null_;'; put 'length _libref $8;'; put '_libref=coalescec(symget(''libref''),'''');'; put '/* an absent libref is a valid, full catalog refresh */'; put 'if missing(_libref) then do;'; put 'call symputx(''is_lib'',1,''l'');'; put 'call symputx(''libref'','''',''g'');'; put 'stop;'; put 'end;'; put '%mp_validatecol(_libref,ISLIB,is_lib)'; put 'if is_lib=0 then putlog ''ERR'' ''OR: Invalid libref:'' _libref;'; put 'call symputx(''is_lib'',is_lib,''l'');'; put 'if is_lib=1 then call symputx(''libref'',upcase(_libref),''g'');'; put 'run;'; put '%mp_abort(iftrue= (&is_lib ne 1)'; put ',mac=&_program..sas'; put ',msg=%str(Invalid libref)'; put ')'; put '/* check user is in admin group */'; put '%let cnt=0;'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.usergroups)'; put 'proc sql noprint;'; put 'select count(*) into:cnt'; put 'from usergroups'; put 'where groupname="&mpeadmins";'; put '%mp_abort(iftrue= (&cnt=0)'; put ',mac=&_program'; put ',msg=%str(This service is only available to &mpeadmins members)'; put ')'; put '%dc_refreshcatalog(&libref)'; put 'data sasparams;'; put 'length msg $64;'; put 'msg=''Catalog Refresh Complete'';'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,sasparams)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_getuniquelibref(prefix=mc);'; put '%local x maxtries;'; 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_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; 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 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 ',AUDITFOLDER=0'; 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 '%mp_abort('; put 'iftrue=(%sysfunc(exist(&base_lib..&base_dsn)) ne 1),'; put 'msg=&base_lib..&base_dsn does not exist'; put ')'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 ),'; put 'msg=&append_lib..&append_dsn does not exist'; put ')'; 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 '%mp_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 '%mp_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/* set up folder */'; put '%local tmplib;%let tmplib=%mf_getuniquelibref();'; put '%if "&AUDITFOLDER"="0" %then %do;'; put 'filename tmp temp lrecl=10000;'; put 'libname &tmplib (work);'; put '%end;'; put '%else %do;'; put '%mf_mkdir(&AUDITFOLDER)'; put 'filename tmp "&AUDITFOLDER/deleterecords.sas" lrecl=10000;'; put 'libname &tmplib "&AUDITFOLDER";'; put '%end;'; put '/**'; put '* Create closeout statements. If UPDATE approach and CAS engine, use the'; put '* DeleteRows action (as regular SQL deletes are not supported).'; put '* Otherwise, the deletions 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 etype;'; put '%let update_cnt=0;'; put '%let etype=%mf_getengine(&base_lib);'; put '%put &=etype;'; put '%if &loadtype=UPDATE and &etype=CAS %then %do;'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds &tmplib..deleterecords;'; put 'set work.___closeout1;'; put 'keep &pk;'; put 'run;'; put '/* build the proc */'; put 'data _null_;'; put 'file tmp;'; put 'put "/* libname approve ''&AUDITFOLDER''; */";'; put 'put ''proc cas;table.deleteRows result=r/ table={'' ;'; put 'put " caslib=''&base_lib'',name=''&base_dsn'',where=''1=1'',";'; put 'put " whereTable={caslib=''CASUSER'',name=''&delds''}";'; put 'put "};";'; put 'put "call symputx(''update_cnt'',r.RowsDeleted);";'; put 'put "quit;";'; put 'put "data;set casuser.&delds;putlog (_all_)(=);run;";'; put 'put ''%put &=update_cnt;'';'; put 'put "proc sql;drop table CASUSER.&delds;";'; put 'stop;'; put 'run;'; put '%end;'; put '%else %do;'; 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 'put ''%put update_cnt=&update_cnt;'';'; put 'run;'; put '%end;'; 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 '%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 '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; 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_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_extr i extr_word outvar;'; put '%if %length(&str1)=0 %then %do;'; put '%put &sysmacroname: str1 is empty, nothing to compare;'; put '%return;'; put '%end;'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%if %sysfunc(indexw(%superq(str2),%superq(extr_word)))=0 %then'; put '%let outvar=&outvar &extr_word;'; put '%end;'; put '/* send out the result without any surrounding whitespace */'; put '%do;&outvar%end;'; 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) format=32. into: maxkey trimmed'; put '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=%sysevalf(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%sysevalf(&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=%sysevalf(&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 %sysevalf(&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 mp_rowhash('; put 'md5_col='; put ',cvars='; put ',nvars='; put ');'; put '/* DATA step temp variables use five leading underscores. The names'; put 'are generated at macro invocation to avoid clashing with data columns. */'; put '%local state digest pair numtext normal i chars nums;'; put '%let state=%mf_getuniquename(prefix=_____state_);'; put '%let digest=%mf_getuniquename(prefix=_____digest_);'; put '%let pair=%mf_getuniquename(prefix=_____pair_);'; put '%let numtext=%mf_getuniquename(prefix=_____numtext_);'; put '%let normal=%mf_getuniquename(prefix=_____normal_);'; put '%let i=%mf_getuniquename(prefix=_____i_);'; put '%let chars=%mf_getuniquename(prefix=_____chars_);'; put '%let nums=%mf_getuniquename(prefix=_____nums_);'; put 'length &state $16'; put '&digest $16'; put '&pair $32'; put '&numtext $64'; put '&normal &i 8;'; put 'if _n_=1 then call missing(&state,&digest,&pair,&numtext,&normal,&i);'; put 'drop &state &digest &pair &numtext &normal &i;'; put '/* Versioned seed prevents confusion with other hashing schemes. */'; put '&state = md5(''DC HASH v2'');'; put '%if %length(&cvars)>0 %then %do;'; put 'array &chars{*} $ &cvars;'; put 'do &i = 1 to dim(&chars);'; put '/* Leading blanks are retained. */'; put '&digest = md5(trimn(&chars[&i]));'; put 'substr(&pair, 1, 16) = &state;'; put 'substr(&pair, 17, 16) = &digest;'; put '&state = md5(&pair);'; put 'end;'; put '%end;'; put '%if %length(&nvars)>0 %then %do;'; put 'array &nums{*} &nvars;'; put 'do &i = 1 to dim(&nums);'; put '/*'; put 'multiply-by-one for consistent cross-system precision.'; put 'Ignore null to protect SAS special missing values.'; put 'Cannot use IFN() as it evaluates both sides'; put '*/'; put 'if missing(&nums[&i]) then &normal = &nums[&i];'; put 'else &normal = &nums[&i] * 1;'; put '&numtext = put(&normal, binary64.);'; put '&digest = md5(trim(&numtext));'; put 'substr(&pair, 1, 16) = &state;'; put 'substr(&pair, 17, 16) = &digest;'; put '&state = md5(&pair);'; put 'end;'; put '%end;'; put '&md5_col = put(&state, $hex32.);'; put '%mend mp_rowhash;'; 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=33;'; 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 %length(&CLOSE_VARS)>0 and (&engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW or &engine_type=SASIOSNF)'; 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 hash_char_vars hash_num_vars ;'; 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 '/* Character variables are hashed separately from numerics so that the'; put 'iterative hash can be built with arrays rather than by concatenating'; put 'hundreds of 32-byte hex strings. */'; put 'select name into: hash_char_vars separated by '' '''; put 'from work.bitemp_cols'; put 'where type in (2,6)'; put 'and upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select name into: hash_num_vars separated by '' '''; put 'from work.bitemp_cols'; put 'where type not in (2,6)'; put 'and 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 &=hash_char_vars;'; put '%put &=hash_num_vars;'; 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___) or %index(%quote(&cols),_____) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___" or "_____".%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 '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&hash_num_vars'; put ')'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; 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 or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%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 '%let temp_table=%upcase(%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 in-db empty table with PK + MD5 only */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&temp_table'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; 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 '%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 '/* inherit remote length to handle byte expansion */'; put 'if 0 then set &base_lib..&temp_table(keep=&md5_col);'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; 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 hash_char_vars=&hash_char_vars;'; put '%put hash_num_vars=&hash_num_vars;'; put 'data work.bitemp1_current(drop=___TMP___NEW_FLG);'; put 'set work.bitemp0_base(drop=&md5_col);'; put 'if ___TMP___NEW_FLG=0;'; put 'length &md5_col $32;'; put '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&hash_num_vars'; put ')'; put 'run;'; 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 '/* For bitemporal we also include the business dates in the comparison hash.'; put 'The business dates are passed as prefix numerics so that both lookup and'; put 'update tables use exactly the same hashing order. */'; 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 '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&bus_from &bus_to &hash_num_vars'; put ')'; 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 '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&bus_from &bus_to &hash_num_vars'; put ')'; 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 or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%then %do;'; put '%let innertable=%upcase(%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 '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&innertable'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put 'exec (create table &innertable'; put '(like &baselib_schema.&base_dsn)'; put ') by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; 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 '%put Not using passthrough for *&engine_type* engine;'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file refreshlibs.sas'; put '@brief Refreshes the library data catalog'; put '@details Requires membership of the DC administrators group.'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@li mpe_refreshlibs.sas'; put '@li mf_getuser.sas'; put '@li mpe_getgroups.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 '/* check user is in admin group */'; put '%let cnt=0;'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.usergroups)'; put 'proc sql noprint;'; put 'select count(*) into:cnt'; put 'from usergroups'; put 'where groupname="&mpeadmins";'; put '%mp_abort(iftrue= (&cnt=0)'; put ',mac=&_program'; put ',msg=%str(This service is only available to &mpeadmins members)'; put ')'; put '%mpe_refreshlibs()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=refreshtablelineage; 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_getuniquelibref(prefix=mc);'; put '%local x maxtries;'; 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_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; 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 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 ',AUDITFOLDER=0'; 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 '%mp_abort('; put 'iftrue=(%sysfunc(exist(&base_lib..&base_dsn)) ne 1),'; put 'msg=&base_lib..&base_dsn does not exist'; put ')'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 ),'; put 'msg=&append_lib..&append_dsn does not exist'; put ')'; 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 '%mp_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 '%mp_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/* set up folder */'; put '%local tmplib;%let tmplib=%mf_getuniquelibref();'; put '%if "&AUDITFOLDER"="0" %then %do;'; put 'filename tmp temp lrecl=10000;'; put 'libname &tmplib (work);'; put '%end;'; put '%else %do;'; put '%mf_mkdir(&AUDITFOLDER)'; put 'filename tmp "&AUDITFOLDER/deleterecords.sas" lrecl=10000;'; put 'libname &tmplib "&AUDITFOLDER";'; put '%end;'; put '/**'; put '* Create closeout statements. If UPDATE approach and CAS engine, use the'; put '* DeleteRows action (as regular SQL deletes are not supported).'; put '* Otherwise, the deletions 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 etype;'; put '%let update_cnt=0;'; put '%let etype=%mf_getengine(&base_lib);'; put '%put &=etype;'; put '%if &loadtype=UPDATE and &etype=CAS %then %do;'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds &tmplib..deleterecords;'; put 'set work.___closeout1;'; put 'keep &pk;'; put 'run;'; put '/* build the proc */'; put 'data _null_;'; put 'file tmp;'; put 'put "/* libname approve ''&AUDITFOLDER''; */";'; put 'put ''proc cas;table.deleteRows result=r/ table={'' ;'; put 'put " caslib=''&base_lib'',name=''&base_dsn'',where=''1=1'',";'; put 'put " whereTable={caslib=''CASUSER'',name=''&delds''}";'; put 'put "};";'; put 'put "call symputx(''update_cnt'',r.RowsDeleted);";'; put 'put "quit;";'; put 'put "data;set casuser.&delds;putlog (_all_)(=);run;";'; put 'put ''%put &=update_cnt;'';'; put 'put "proc sql;drop table CASUSER.&delds;";'; put 'stop;'; put 'run;'; put '%end;'; put '%else %do;'; 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 'put ''%put update_cnt=&update_cnt;'';'; put 'run;'; put '%end;'; 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 '%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 '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; 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_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_extr i extr_word outvar;'; put '%if %length(&str1)=0 %then %do;'; put '%put &sysmacroname: str1 is empty, nothing to compare;'; put '%return;'; put '%end;'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%if %sysfunc(indexw(%superq(str2),%superq(extr_word)))=0 %then'; put '%let outvar=&outvar &extr_word;'; put '%end;'; put '/* send out the result without any surrounding whitespace */'; put '%do;&outvar%end;'; 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) format=32. into: maxkey trimmed'; put '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=%sysevalf(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%sysevalf(&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=%sysevalf(&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 %sysevalf(&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 mp_rowhash('; put 'md5_col='; put ',cvars='; put ',nvars='; put ');'; put '/* DATA step temp variables use five leading underscores. The names'; put 'are generated at macro invocation to avoid clashing with data columns. */'; put '%local state digest pair numtext normal i chars nums;'; put '%let state=%mf_getuniquename(prefix=_____state_);'; put '%let digest=%mf_getuniquename(prefix=_____digest_);'; put '%let pair=%mf_getuniquename(prefix=_____pair_);'; put '%let numtext=%mf_getuniquename(prefix=_____numtext_);'; put '%let normal=%mf_getuniquename(prefix=_____normal_);'; put '%let i=%mf_getuniquename(prefix=_____i_);'; put '%let chars=%mf_getuniquename(prefix=_____chars_);'; put '%let nums=%mf_getuniquename(prefix=_____nums_);'; put 'length &state $16'; put '&digest $16'; put '&pair $32'; put '&numtext $64'; put '&normal &i 8;'; put 'if _n_=1 then call missing(&state,&digest,&pair,&numtext,&normal,&i);'; put 'drop &state &digest &pair &numtext &normal &i;'; put '/* Versioned seed prevents confusion with other hashing schemes. */'; put '&state = md5(''DC HASH v2'');'; put '%if %length(&cvars)>0 %then %do;'; put 'array &chars{*} $ &cvars;'; put 'do &i = 1 to dim(&chars);'; put '/* Leading blanks are retained. */'; put '&digest = md5(trimn(&chars[&i]));'; put 'substr(&pair, 1, 16) = &state;'; put 'substr(&pair, 17, 16) = &digest;'; put '&state = md5(&pair);'; put 'end;'; put '%end;'; put '%if %length(&nvars)>0 %then %do;'; put 'array &nums{*} &nvars;'; put 'do &i = 1 to dim(&nums);'; put '/*'; put 'multiply-by-one for consistent cross-system precision.'; put 'Ignore null to protect SAS special missing values.'; put 'Cannot use IFN() as it evaluates both sides'; put '*/'; put 'if missing(&nums[&i]) then &normal = &nums[&i];'; put 'else &normal = &nums[&i] * 1;'; put '&numtext = put(&normal, binary64.);'; put '&digest = md5(trim(&numtext));'; put 'substr(&pair, 1, 16) = &state;'; put 'substr(&pair, 17, 16) = &digest;'; put '&state = md5(&pair);'; put 'end;'; put '%end;'; put '&md5_col = put(&state, $hex32.);'; put '%mend mp_rowhash;'; 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=33;'; 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 %length(&CLOSE_VARS)>0 and (&engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW or &engine_type=SASIOSNF)'; 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 hash_char_vars hash_num_vars ;'; 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 '/* Character variables are hashed separately from numerics so that the'; put 'iterative hash can be built with arrays rather than by concatenating'; put 'hundreds of 32-byte hex strings. */'; put 'select name into: hash_char_vars separated by '' '''; put 'from work.bitemp_cols'; put 'where type in (2,6)'; put 'and upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select name into: hash_num_vars separated by '' '''; put 'from work.bitemp_cols'; put 'where type not in (2,6)'; put 'and 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 &=hash_char_vars;'; put '%put &=hash_num_vars;'; 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___) or %index(%quote(&cols),_____) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___" or "_____".%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 '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&hash_num_vars'; put ')'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; 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 or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%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 '%let temp_table=%upcase(%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 in-db empty table with PK + MD5 only */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&temp_table'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; 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 '%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 '/* inherit remote length to handle byte expansion */'; put 'if 0 then set &base_lib..&temp_table(keep=&md5_col);'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; 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 hash_char_vars=&hash_char_vars;'; put '%put hash_num_vars=&hash_num_vars;'; put 'data work.bitemp1_current(drop=___TMP___NEW_FLG);'; put 'set work.bitemp0_base(drop=&md5_col);'; put 'if ___TMP___NEW_FLG=0;'; put 'length &md5_col $32;'; put '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&hash_num_vars'; put ')'; put 'run;'; 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 '/* For bitemporal we also include the business dates in the comparison hash.'; put 'The business dates are passed as prefix numerics so that both lookup and'; put 'update tables use exactly the same hashing order. */'; 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 '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&bus_from &bus_to &hash_num_vars'; put ')'; 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 '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&bus_from &bus_to &hash_num_vars'; put ')'; 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 or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%then %do;'; put '%let innertable=%upcase(%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 '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&innertable'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put 'exec (create table &innertable'; put '(like &baselib_schema.&base_dsn)'; put ') by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; 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 '%put Not using passthrough for *&engine_type* engine;'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; 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 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file refreshtablelineage.sas'; put '@brief updates the table level lineage'; put '@details extracts all sources/targets from every job'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@li bitemporal_dataloader.sas'; put '@li mp_binarycopy.sas'; put '@li mf_getuniquefileref.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 '/* get list of libraries */'; put '%let fileref1=%mf_getuniquefileref();'; put 'filename &fileref1 temp;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'JobSAS'; put ''; put '8452'; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put '"'; put 'out=&fileref1'; put ';'; put 'run;'; put '/* create an XML map and extract dependencies from response */'; put '%macro getTables(type=);'; put '%local x;'; put '%do x=1 %to 2;'; put '%local dir;'; put '%if &x=1 %then %let dir=Source;'; put '%else %let dir=Target;'; put '%local y;'; put '%do y=1 %to 3;'; put '%local maptype;'; put '%if &y=1 %then %let maptype=ClassifierMap;'; put '%else %if &y=2 %then %let maptype=Select;'; put '%else %if &y=3 %then %let maptype=Join;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "";'; put 'put "";'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities/TransformationActivi"@;'; put 'put "ty/Steps/TransformationStep/Transformations/&maptype/Classifier"@;'; put 'put "&dir.s/&type";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/@Name";'; put 'put "characterstring128";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/Steps/TransformationStep/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/Steps/TransformationStep/Transformations"@;'; put 'put "/&maptype/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put "";'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/Steps/TransformationStep/Transformations/"@;'; put 'put "&maptype/Classifier&dir.s/&type/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=&fileref1 xmlmap=sxlemap;'; put 'data work.&dir.&type/view=work.&dir.&type;'; put 'set _xml_.&dir.&type;'; put 'length tabletype maptype $16 tabledirection $1;'; put 'jobname=upcase(jobname);'; put 'tabletype="&type";'; put 'maptype="&maptype";'; put 'if "&dir"="Source" then tabledirection="R";'; put 'else tabledirection=''F'';'; put 'run;'; put 'proc append base=work.alldata data=work.&dir.&type;'; put 'run;'; put 'libname _XML_ clear;'; put '%end;'; put '%end;'; put '%mend getTables;'; put '/* list of types:'; put 'https://support.sas.com/documentation/cdl/en/omamodref/63903/HTML/default/viewer.htm#classifiermap.htm'; put '*/'; put '%getTables(type=PhysicalTable)'; put '%getTables(type=ExternalTable)'; put '%getTables(type=QueryTable)'; put '%getTables(type=RelationalTable)'; put '%getTables(type=Report)'; put '%getTables(type=Cube)'; put '%getTables(type=DataTable)'; put '/* remove dups and get tables */'; put 'proc sort data=work.alldata(keep=jobid jobname tableid tabletype tabledirection)'; put 'out=work.sorted nodupkey;'; put 'by _all_;'; put 'run;'; put 'proc sort data=work.sorted(keep=tableid) out=work.tables nodupkey;'; put 'by tableid;'; put 'run;'; put '/* this bit is slow due to lookups but given the different table types'; put 'it was the easiest approach */'; put 'data work.tables2;'; put 'length tablename liburi puri $64 libref schemaname $8 ;'; put 'if _n_=1 then call missing(tablename, liburi, puri, libref, schemaname);'; put 'set work.tables;'; put 'drop rc liburi;'; put 'if metadata_getnasn(tableid,"TablePackage",1,liburi)>0 then do;'; put 'rc= metadata_getattr(liburi, "SchemaName", SchemaName);'; put 'if ^missing(SchemaName) then do;'; put 'if metadata_getnasn(liburi,"UsedByPackages",1,puri)>0 then do;'; put 'rc=metadata_getattr(puri,"Libref",libref);'; put 'end;'; put 'end;'; put 'else rc=metadata_getattr(liburi,"Libref",libref);'; put 'libref=upcase(libref);'; put 'end;'; put 'rc=metadata_getattr(tableid,"Name",tablename);'; put 'tablename=upcase(tablename);'; put 'run;'; put 'proc sql;'; put 'create table work.augmented as'; put 'select a.*'; put ',b.tablename'; put ',b.libref'; put 'from work.sorted a'; put 'left join work.tables2 b'; put 'on a.tableid=b.tableid;'; put 'create table work.mpe_lineage_tabs as'; put 'select distinct'; put 'coalesce(a.jobid,b.jobid) as jobid,'; put 'coalesce(a.jobname,b.jobname) as jobname,'; put 'coalesce(a.tableid,"N/A") as srctableid,'; put 'a.tabletype as srctabletype,'; put 'a.tablename as srctablename,'; put 'coalesce(a.libref,''nolib'') as srclibref,'; put 'coalesce(b.tableid,"N/A") as tgttableid,'; put 'b.tabletype as tgttabletype,'; put 'b.tablename as tgttablename,'; put 'coalesce(b.libref,''nolib'') as tgtlibref'; put 'from work.augmented(where=(tabledirection=''R'')) a'; put 'full join work.augmented(where=(tabledirection=''F'')) b'; put 'on a.jobid=b.jobid'; put ';'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=MPE_LINEAGE_TABS'; put ',append_dsn=MPE_LINEAGE_TABS'; put ',PK=jobid srctableid tgttableid'; put ',etlsource=&_program'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put ')'; put '%mp_binarycopy(inref=&fileref1, outref=_webout)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_getuniquelibref(prefix=mc);'; put '%local x maxtries;'; 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_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; 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 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 ',AUDITFOLDER=0'; 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 '%mp_abort('; put 'iftrue=(%sysfunc(exist(&base_lib..&base_dsn)) ne 1),'; put 'msg=&base_lib..&base_dsn does not exist'; put ')'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 ),'; put 'msg=&append_lib..&append_dsn does not exist'; put ')'; 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 '%mp_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 '%mp_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/* set up folder */'; put '%local tmplib;%let tmplib=%mf_getuniquelibref();'; put '%if "&AUDITFOLDER"="0" %then %do;'; put 'filename tmp temp lrecl=10000;'; put 'libname &tmplib (work);'; put '%end;'; put '%else %do;'; put '%mf_mkdir(&AUDITFOLDER)'; put 'filename tmp "&AUDITFOLDER/deleterecords.sas" lrecl=10000;'; put 'libname &tmplib "&AUDITFOLDER";'; put '%end;'; put '/**'; put '* Create closeout statements. If UPDATE approach and CAS engine, use the'; put '* DeleteRows action (as regular SQL deletes are not supported).'; put '* Otherwise, the deletions 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 etype;'; put '%let update_cnt=0;'; put '%let etype=%mf_getengine(&base_lib);'; put '%put &=etype;'; put '%if &loadtype=UPDATE and &etype=CAS %then %do;'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds &tmplib..deleterecords;'; put 'set work.___closeout1;'; put 'keep &pk;'; put 'run;'; put '/* build the proc */'; put 'data _null_;'; put 'file tmp;'; put 'put "/* libname approve ''&AUDITFOLDER''; */";'; put 'put ''proc cas;table.deleteRows result=r/ table={'' ;'; put 'put " caslib=''&base_lib'',name=''&base_dsn'',where=''1=1'',";'; put 'put " whereTable={caslib=''CASUSER'',name=''&delds''}";'; put 'put "};";'; put 'put "call symputx(''update_cnt'',r.RowsDeleted);";'; put 'put "quit;";'; put 'put "data;set casuser.&delds;putlog (_all_)(=);run;";'; put 'put ''%put &=update_cnt;'';'; put 'put "proc sql;drop table CASUSER.&delds;";'; put 'stop;'; put 'run;'; put '%end;'; put '%else %do;'; 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 'put ''%put update_cnt=&update_cnt;'';'; put 'run;'; put '%end;'; 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 '%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 '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; 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_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_extr i extr_word outvar;'; put '%if %length(&str1)=0 %then %do;'; put '%put &sysmacroname: str1 is empty, nothing to compare;'; put '%return;'; put '%end;'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%if %sysfunc(indexw(%superq(str2),%superq(extr_word)))=0 %then'; put '%let outvar=&outvar &extr_word;'; put '%end;'; put '/* send out the result without any surrounding whitespace */'; put '%do;&outvar%end;'; 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) format=32. into: maxkey trimmed'; put '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=%sysevalf(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%sysevalf(&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=%sysevalf(&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 %sysevalf(&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 mp_rowhash('; put 'md5_col='; put ',cvars='; put ',nvars='; put ');'; put '/* DATA step temp variables use five leading underscores. The names'; put 'are generated at macro invocation to avoid clashing with data columns. */'; put '%local state digest pair numtext normal i chars nums;'; put '%let state=%mf_getuniquename(prefix=_____state_);'; put '%let digest=%mf_getuniquename(prefix=_____digest_);'; put '%let pair=%mf_getuniquename(prefix=_____pair_);'; put '%let numtext=%mf_getuniquename(prefix=_____numtext_);'; put '%let normal=%mf_getuniquename(prefix=_____normal_);'; put '%let i=%mf_getuniquename(prefix=_____i_);'; put '%let chars=%mf_getuniquename(prefix=_____chars_);'; put '%let nums=%mf_getuniquename(prefix=_____nums_);'; put 'length &state $16'; put '&digest $16'; put '&pair $32'; put '&numtext $64'; put '&normal &i 8;'; put 'if _n_=1 then call missing(&state,&digest,&pair,&numtext,&normal,&i);'; put 'drop &state &digest &pair &numtext &normal &i;'; put '/* Versioned seed prevents confusion with other hashing schemes. */'; put '&state = md5(''DC HASH v2'');'; put '%if %length(&cvars)>0 %then %do;'; put 'array &chars{*} $ &cvars;'; put 'do &i = 1 to dim(&chars);'; put '/* Leading blanks are retained. */'; put '&digest = md5(trimn(&chars[&i]));'; put 'substr(&pair, 1, 16) = &state;'; put 'substr(&pair, 17, 16) = &digest;'; put '&state = md5(&pair);'; put 'end;'; put '%end;'; put '%if %length(&nvars)>0 %then %do;'; put 'array &nums{*} &nvars;'; put 'do &i = 1 to dim(&nums);'; put '/*'; put 'multiply-by-one for consistent cross-system precision.'; put 'Ignore null to protect SAS special missing values.'; put 'Cannot use IFN() as it evaluates both sides'; put '*/'; put 'if missing(&nums[&i]) then &normal = &nums[&i];'; put 'else &normal = &nums[&i] * 1;'; put '&numtext = put(&normal, binary64.);'; put '&digest = md5(trim(&numtext));'; put 'substr(&pair, 1, 16) = &state;'; put 'substr(&pair, 17, 16) = &digest;'; put '&state = md5(&pair);'; put 'end;'; put '%end;'; put '&md5_col = put(&state, $hex32.);'; put '%mend mp_rowhash;'; 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=33;'; 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 %length(&CLOSE_VARS)>0 and (&engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW or &engine_type=SASIOSNF)'; 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 hash_char_vars hash_num_vars ;'; 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 '/* Character variables are hashed separately from numerics so that the'; put 'iterative hash can be built with arrays rather than by concatenating'; put 'hundreds of 32-byte hex strings. */'; put 'select name into: hash_char_vars separated by '' '''; put 'from work.bitemp_cols'; put 'where type in (2,6)'; put 'and upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select name into: hash_num_vars separated by '' '''; put 'from work.bitemp_cols'; put 'where type not in (2,6)'; put 'and 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 &=hash_char_vars;'; put '%put &=hash_num_vars;'; 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___) or %index(%quote(&cols),_____) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___" or "_____".%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 '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&hash_num_vars'; put ')'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; 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 or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%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 '%let temp_table=%upcase(%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 in-db empty table with PK + MD5 only */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&temp_table'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; 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 '%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 '/* inherit remote length to handle byte expansion */'; put 'if 0 then set &base_lib..&temp_table(keep=&md5_col);'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; 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 hash_char_vars=&hash_char_vars;'; put '%put hash_num_vars=&hash_num_vars;'; put 'data work.bitemp1_current(drop=___TMP___NEW_FLG);'; put 'set work.bitemp0_base(drop=&md5_col);'; put 'if ___TMP___NEW_FLG=0;'; put 'length &md5_col $32;'; put '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&hash_num_vars'; put ')'; put 'run;'; 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 '/* For bitemporal we also include the business dates in the comparison hash.'; put 'The business dates are passed as prefix numerics so that both lookup and'; put 'update tables use exactly the same hashing order. */'; 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 '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&bus_from &bus_to &hash_num_vars'; put ')'; 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 '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&bus_from &bus_to &hash_num_vars'; put ')'; 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 or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%then %do;'; put '%let innertable=%upcase(%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 '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&innertable'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put 'exec (create table &innertable'; put '(like &baselib_schema.&base_dsn)'; put ') by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; 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 '%put Not using passthrough for *&engine_type* engine;'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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_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=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=ISNAME %then %do;'; put '/* match a valid SAS name (V7 rules) */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISNAME";'; 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=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 SAS format*/'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^(?:[_a-z\$]\w{0,31}|[0-9]+)\.[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 '%macro mpe_validatecol(incol,rule,outcol);'; put '%if &rule=LIBDS %then %do;'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename(prefix=cat);'; put '&tempcol=strip(&incol);'; put '/* permit the format-catalog form: LIBREF.CATALOGNAME-FC, exactly */'; put 'if length(&tempcol)>3'; put 'and upcase(substr(&tempcol,length(&tempcol)-2,3))=''-FC'''; put 'then &tempcol=substr(&tempcol,1,length(&tempcol)-3);'; put '%mp_validatecol(&tempcol,LIBDS,&outcol)'; put 'drop &tempcol;'; put '%end;'; put '%else %mp_validatecol(&incol,&rule,&outcol);'; put '%mend mpe_validatecol;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/**'; put '* Validate inputs before they reach executable code. base_table is'; put '* interpolated into a SQL where clause (and callers may pass raw request'; put '* input), so it must be a well-formed LIBREF.DATASET (or the'; put '* LIBREF.CATALOGNAME-FC form of a format catalog) and access_level must'; put '* be one of the known levels - anything else aborts before the query is'; put '* built. Values are read with symget (never re-resolved) and scanned in'; put '* a data step so no macro content in the input can execute.'; put '*/'; put '%local is_libds is_level;'; put '%let is_libds=0;'; put '%let is_level=0;'; put 'data _null_;'; put 'length _bt $64 _lvl $16;'; put '_bt=symget(''base_table'');'; put '_lvl=upcase(symget(''access_level''));'; put '%mpe_validatecol(_bt,LIBDS,is_libds)'; put 'if is_libds=0 then do;'; put 'call symputx(''is_libds'',0,''l'');'; put 'putlog ''ERR'' ''OR: Invalid base_table:'' _bt;'; put 'stop;'; put 'end;'; put 'if _lvl not in (''EDIT'',''APPROVE'',''VIEW'',''SIGNOFF'',''AUDIT'') then do;'; put 'call symputx(''is_level'',0,''l'');'; put 'putlog ''ERR'' ''OR: Invalid access_level:'' _lvl;'; put 'stop;'; put 'end;'; put '/* escape any embedded quotes so the value cannot break out of the'; put '* double-quoted SQL literals below (defence in depth - the LIBDS'; put '* check above already rejects quotes) */'; put '_bt=tranwrd(_bt,''"'','''');'; put 'call symputx(''base_table'',_bt,''l'');'; put 'call symputx(''access_level'',_lvl,''l'');'; put 'call symputx(''is_libds'',is_libds,''l'');'; put 'call symputx(''is_level'',1,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue=(&is_libds ne 1)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Invalid base_table)'; put ')'; put '%mp_abort('; put 'iftrue=(&is_level ne 1)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Invalid access_level)'; 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 'data work.alertmessage;'; put 'set &mpelib..mpe_config;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also var_scope=''DC_EMAIL'' and var_name="&alert_event._TEMPLATE";'; put 'run;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; 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 '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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; put '/* fallback message */'; 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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; put '/* fallback message */'; 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 '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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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_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_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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 '/* sanitise message to prevent code injection */'; put 'REVIEW_REASON_TXT=compress(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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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_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=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=ISNAME %then %do;'; put '/* match a valid SAS name (V7 rules) */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISNAME";'; 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=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 SAS format*/'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^(?:[_a-z\$]\w{0,31}|[0-9]+)\.[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 '%macro mpe_validatecol(incol,rule,outcol);'; put '%if &rule=LIBDS %then %do;'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename(prefix=cat);'; put '&tempcol=strip(&incol);'; put '/* permit the format-catalog form: LIBREF.CATALOGNAME-FC, exactly */'; put 'if length(&tempcol)>3'; put 'and upcase(substr(&tempcol,length(&tempcol)-2,3))=''-FC'''; put 'then &tempcol=substr(&tempcol,1,length(&tempcol)-3);'; put '%mp_validatecol(&tempcol,LIBDS,&outcol)'; put 'drop &tempcol;'; put '%end;'; put '%else %mp_validatecol(&incol,&rule,&outcol);'; put '%mend mpe_validatecol;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/**'; put '* Validate inputs before they reach executable code. base_table is'; put '* interpolated into a SQL where clause (and callers may pass raw request'; put '* input), so it must be a well-formed LIBREF.DATASET (or the'; put '* LIBREF.CATALOGNAME-FC form of a format catalog) and access_level must'; put '* be one of the known levels - anything else aborts before the query is'; put '* built. Values are read with symget (never re-resolved) and scanned in'; put '* a data step so no macro content in the input can execute.'; put '*/'; put '%local is_libds is_level;'; put '%let is_libds=0;'; put '%let is_level=0;'; put 'data _null_;'; put 'length _bt $64 _lvl $16;'; put '_bt=symget(''base_table'');'; put '_lvl=upcase(symget(''access_level''));'; put '%mpe_validatecol(_bt,LIBDS,is_libds)'; put 'if is_libds=0 then do;'; put 'call symputx(''is_libds'',0,''l'');'; put 'putlog ''ERR'' ''OR: Invalid base_table:'' _bt;'; put 'stop;'; put 'end;'; put 'if _lvl not in (''EDIT'',''APPROVE'',''VIEW'',''SIGNOFF'',''AUDIT'') then do;'; put 'call symputx(''is_level'',0,''l'');'; put 'putlog ''ERR'' ''OR: Invalid access_level:'' _lvl;'; put 'stop;'; put 'end;'; put '/* escape any embedded quotes so the value cannot break out of the'; put '* double-quoted SQL literals below (defence in depth - the LIBDS'; put '* check above already rejects quotes) */'; put '_bt=tranwrd(_bt,''"'','''');'; put 'call symputx(''base_table'',_bt,''l'');'; put 'call symputx(''access_level'',_lvl,''l'');'; put 'call symputx(''is_libds'',is_libds,''l'');'; put 'call symputx(''is_level'',1,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue=(&is_libds ne 1)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Invalid base_table)'; put ')'; put '%mp_abort('; put 'iftrue=(&is_level ne 1)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Invalid access_level)'; 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_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_extr i extr_word outvar;'; put '%if %length(&str1)=0 %then %do;'; put '%put &sysmacroname: str1 is empty, nothing to compare;'; put '%return;'; put '%end;'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%if %sysfunc(indexw(%superq(str2),%superq(extr_word)))=0 %then'; put '%let outvar=&outvar &extr_word;'; put '%end;'; put '/* send out the result without any surrounding whitespace */'; put '%do;&outvar%end;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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_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=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=ISNAME %then %do;'; put '/* match a valid SAS name (V7 rules) */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISNAME";'; 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=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 SAS format*/'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^(?:[_a-z\$]\w{0,31}|[0-9]+)\.[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 '%macro mpe_validatecol(incol,rule,outcol);'; put '%if &rule=LIBDS %then %do;'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename(prefix=cat);'; put '&tempcol=strip(&incol);'; put '/* permit the format-catalog form: LIBREF.CATALOGNAME-FC, exactly */'; put 'if length(&tempcol)>3'; put 'and upcase(substr(&tempcol,length(&tempcol)-2,3))=''-FC'''; put 'then &tempcol=substr(&tempcol,1,length(&tempcol)-3);'; put '%mp_validatecol(&tempcol,LIBDS,&outcol)'; put 'drop &tempcol;'; put '%end;'; put '%else %mp_validatecol(&incol,&rule,&outcol);'; put '%mend mpe_validatecol;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/**'; put '* Validate inputs before they reach executable code. base_table is'; put '* interpolated into a SQL where clause (and callers may pass raw request'; put '* input), so it must be a well-formed LIBREF.DATASET (or the'; put '* LIBREF.CATALOGNAME-FC form of a format catalog) and access_level must'; put '* be one of the known levels - anything else aborts before the query is'; put '* built. Values are read with symget (never re-resolved) and scanned in'; put '* a data step so no macro content in the input can execute.'; put '*/'; put '%local is_libds is_level;'; put '%let is_libds=0;'; put '%let is_level=0;'; put 'data _null_;'; put 'length _bt $64 _lvl $16;'; put '_bt=symget(''base_table'');'; put '_lvl=upcase(symget(''access_level''));'; put '%mpe_validatecol(_bt,LIBDS,is_libds)'; put 'if is_libds=0 then do;'; put 'call symputx(''is_libds'',0,''l'');'; put 'putlog ''ERR'' ''OR: Invalid base_table:'' _bt;'; put 'stop;'; put 'end;'; put 'if _lvl not in (''EDIT'',''APPROVE'',''VIEW'',''SIGNOFF'',''AUDIT'') then do;'; put 'call symputx(''is_level'',0,''l'');'; put 'putlog ''ERR'' ''OR: Invalid access_level:'' _lvl;'; put 'stop;'; put 'end;'; put '/* escape any embedded quotes so the value cannot break out of the'; put '* double-quoted SQL literals below (defence in depth - the LIBDS'; put '* check above already rejects quotes) */'; put '_bt=tranwrd(_bt,''"'','''');'; put 'call symputx(''base_table'',_bt,''l'');'; put 'call symputx(''access_level'',_lvl,''l'');'; put 'call symputx(''is_libds'',is_libds,''l'');'; put 'call symputx(''is_level'',1,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue=(&is_libds ne 1)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Invalid base_table)'; put ')'; put '%mp_abort('; put 'iftrue=(&is_level ne 1)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Invalid access_level)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 mf_getuser.sas'; put '@li mp_abort.sas'; put '@li mp_binarycopy.sas'; put '@li mp_streamfile.sas'; put '@li mp_validatecol.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 '/**'; put '* Validate inputs before they reach executable code. libds is passed to'; put '* the access check (which interpolates it into SQL) and table is used in'; put '* the staging file path, so both must be well formed before use. Values'; put '* are re-read with symget (never re-resolved) and validated in a data'; put '* step so no macro content in the request can execute.'; put '*/'; put '%let is_libds=0;'; put '%let is_table=0;'; put '%let is_csv=0;'; put 'data _null_;'; put 'length _libds $64 _table $64 _csv $128;'; put '_libds=symget(''libds'');'; put '_table=symget(''table'');'; put '_csv=coalescec(symget(''stp_diffs_csv''),''tempDiffs.csv'');'; put '%mp_validatecol(_libds,LIBDS,is_libds)'; put '%mp_validatecol(_table,ISNAME,is_table)'; put '/* the diffs csv filename must stay inside the staging directory */'; put 'if findc(_csv,''/\'')>0 or index(_csv,''..'')>0 then do;'; put 'is_csv=0;'; put 'putlog ''ERR'' ''OR: Invalid stp_diffs_csv:'' _csv;'; put 'end;'; put 'else is_csv=1;'; put 'if is_libds=0 then putlog ''ERR'' ''OR: Invalid libds:'' _libds;'; put 'if is_table=0 then putlog ''ERR'' ''OR: Invalid table:'' _table;'; put 'call symputx(''is_libds'',is_libds,''l'');'; put 'call symputx(''is_table'',is_table,''l'');'; put 'call symputx(''is_csv'',is_csv,''l'');'; put 'if is_libds=1 then call symputx(''libds'',_libds,''g'');'; put 'if is_table=1 then call symputx(''table'',_table,''g'');'; put 'if is_csv=1 then call symputx(''stp_diffs_csv'',_csv,''g'');'; put 'run;'; put '%mp_abort(iftrue= (&is_libds ne 1)'; put ',mac=&_program..sas'; put ',msg=%str(Invalid libds)'; put ')'; put '%mp_abort(iftrue= (&is_table ne 1)'; put ',mac=&_program..sas'; put ',msg=%str(Invalid table)'; put ')'; put '%mp_abort(iftrue= (&is_csv ne 1)'; put ',mac=&_program..sas'; put ',msg=%str(Invalid stp_diffs_csv)'; put ')'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_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_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=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=ISNAME %then %do;'; put '/* match a valid SAS name (V7 rules) */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISNAME";'; 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=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 SAS format*/'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^(?:[_a-z\$]\w{0,31}|[0-9]+)\.[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 '%macro mp_applyformats(inds,errds=0'; put ')/*/STORE SOURCE*/;'; put '%local outds liblist i engine lib msg ;'; put '/**'; put '* Validations'; put '*/'; put 'proc sort data=&inds;'; put 'by lib ds var fmt;'; put 'run;'; put '%if &errds=0 %then %let outds=%mf_getuniquename(prefix=mp_applyformats);'; put '%else %let outds=&errds;'; put 'data &outds;'; put 'set &inds;'; put 'where fmt not in ('''',''.'', ''$'', ''$CHAR.'',''8.'');'; put 'length msg $128;'; put 'by lib ds var fmt;'; put 'if libref(lib) ne 0 then do;'; put 'msg=catx('' '',''libref'',lib,''is not assigned!'');'; put '%if &errds=0 %then %do;'; put 'putlog ''ERR'' +(-1) "OR: " msg;'; put '%end;'; put 'output;'; put 'return;'; put 'end;'; put 'if exist(cats(lib,''.'',ds)) ne 1 then do;'; put 'msg=catx('' '',''libds'',lib,''.'',ds,''does not exist!'');'; put '%if &errds=0 %then %do;'; put 'putlog ''ERR'' +(-1) "OR: " msg;'; put '%end;'; put 'output;'; put 'return;'; put 'end;'; put '%mp_validatecol(fmt,FORMAT,is_fmt)'; put 'if is_fmt=0 then do;'; put 'msg=catx('' '',''format'',fmt,''on libds'',lib,''.'',ds,''.'',var,''is not valid!'');'; put '%if &errds=0 %then %do;'; put 'putlog ''ERR'' +(-1) "OR: " msg;'; put '%end;'; put 'output;'; put 'return;'; put 'end;'; put 'if first.ds then do;'; put 'retain dsid;'; put 'dsid=open(cats(lib,''.'',ds));'; put 'if dsid=0 then do;'; put 'msg=catx('' '',''libds'',lib,''.'',ds,'' could not be opened!'');'; put '%if &errds=0 %then %do;'; put 'putlog ''ERR'' +(-1) "OR: " msg;'; put '%end;'; put 'output;'; put 'return;'; put 'end;'; put 'if varnum(dsid,var)<1 then do;'; put 'msg=catx('' '',''Variable'',lib,''.'',ds,''.'',var,'' was not found!'');'; put '%if &errds=0 %then %do;'; put 'putlog ''ERR'' +(-1) "OR: " msg;'; put '%end;'; put 'output;'; put 'end;'; put 'end;'; put 'if last.ds then rc=close(dsid);'; put 'run;'; put 'proc sql noprint;'; put 'select distinct lib into: liblist separated by '' '' from &inds;'; put '%put &=liblist;'; put '%if %length(&liblist)>0 %then %do i=1 %to %sysfunc(countw(&liblist));'; put '%let lib=%scan(&liblist,1);'; put '%let engine=%mf_getengine(&lib);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put '%let msg=&lib has &engine engine - formats cannot be applied;'; put 'insert into &outds set lib="&lib",ds="_all_",var="_all", msg="&msg" ;'; put '%if &errds=0 %then %put %str(ERR)OR: &msg;'; put '%end;'; put '%end;'; put 'quit;'; put '%if %mf_nobs(&outds)>0 %then %return;'; put '/**'; put '* Validations complete - now apply the actual formats!'; put '*/'; put '%let fref=%mf_getuniquefileref();'; put 'data _null_;'; put 'set &inds;'; put 'by lib ds var fmt;'; put 'where fmt not in ('''',''.'', ''$'', ''$CHAR.'',''8.'');'; put 'file &fref;'; put 'if first.lib then put ''proc datasets nolist lib='' lib '';'';'; put 'if first.ds then put '' modify '' ds '';'';'; put 'put '' format '' var fmt '';'';'; put 'if last.ds then put '' run;'';'; put 'if last.lib then put ''quit;'';'; put 'run;'; put '%inc &fref/source2;'; put '%if &errds=0 %then %do;'; put 'proc sql;'; put 'drop table &outds;'; put '%end;'; put '%mend mp_applyformats;'; 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 '* 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 Fetches the staged table (unformatted and formatted versions) for'; put 'a submitted change, given its TABLE_ID.'; put '

Service Inputs

'; put '
IWANT
'; put '|TABLE_ID:$char32.|'; put '|---|'; put '|DC20220208T142124517_124703_1184|'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li mf_existds.sas'; put '@li mp_abort.sas'; put '@li mp_applyformats.sas'; put '@li mp_getcols.sas'; put '@li mp_validatecol.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 '/* table_id arrives in the web request (work.iwant) and is used in libname,'; put 'set and where statements below - so validate it strictly (must be a valid'; put 'SAS name) before ANY such use, to prevent code injection */'; put '%let table_id=0;'; put 'data _null_;'; put 'set work.iwant;'; put '%mp_validatecol(table_id,ISNAME,is_name)'; put 'if is_name=1 then call symputx(''table_id'',table_id);'; put 'else putlog ''ERR'' ''OR: Invalid table_id: '' table_id;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= ("&table_id"="0")'; put ',mac=&_program..sas'; put ',msg=%str(Invalid table_id provided)'; put ')'; put '/* whitelist check - the table_id must also exist in mpe_submit. The same'; put 'lookup provides the base library & dataset, used further down to source'; put 'the formats. These are also validated before use in code. */'; put '%let base_lib=;'; put '%let base_ds=;'; put 'data _null_;'; put 'set &mpelib..mpe_submit;'; put 'where TABLE_ID="&table_id";'; put 'length base_libds $41;'; put 'base_libds=cats(base_lib,''.'',base_ds);'; put '%mp_validatecol(base_libds,LIBDS,is_base_libds)'; put 'if is_base_libds=1 then do;'; put 'call symputx(''base_lib'',base_lib);'; put 'call symputx(''base_ds'',base_ds);'; put 'end;'; put 'else putlog ''ERR'' ''OR: Invalid base libds: '' base_libds;'; put 'run;'; put '%mp_abort(iftrue= ("&base_lib"="" or "&base_ds"="")'; put ',mac=&_program..sas'; put ',msg=%str(No valid mpe_submit record found for table_id=&table_id)'; put ')'; 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 '/* the staged dataset on disk has no formats, so apply those of the base'; put 'table (sourced from mpe_submit above) to the work copy - this drives the'; put 'frontend''s Formatted/Unformatted toggle */'; put '%dc_assignlib(READ,&base_lib)'; put '%mp_getcols(&base_lib..&base_ds,outds=work.basecols)'; put 'data work.stagefmts;'; put 'set work.basecols;'; put 'length lib $8 ds $32 var $32 fmt $49;'; put 'lib=''WORK'';'; put 'ds=''STAGETABLE'';'; put 'var=name;'; put 'fmt=format;'; put 'keep lib ds var fmt;'; put 'run;'; put '%mp_applyformats(work.stagefmts)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc after applying base formats)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,stagetable,missing=STRING)'; put '/* same table again with SAS formats applied */'; put '%webout(OBJ,stagetable,dslabel=fmt_stagetable,fmt=Y,missing=STRING)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_getuniquelibref(prefix=mc);'; put '%local x maxtries;'; 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_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; 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 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 ',AUDITFOLDER=0'; 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 '%mp_abort('; put 'iftrue=(%sysfunc(exist(&base_lib..&base_dsn)) ne 1),'; put 'msg=&base_lib..&base_dsn does not exist'; put ')'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 ),'; put 'msg=&append_lib..&append_dsn does not exist'; put ')'; 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 '%mp_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 '%mp_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/* set up folder */'; put '%local tmplib;%let tmplib=%mf_getuniquelibref();'; put '%if "&AUDITFOLDER"="0" %then %do;'; put 'filename tmp temp lrecl=10000;'; put 'libname &tmplib (work);'; put '%end;'; put '%else %do;'; put '%mf_mkdir(&AUDITFOLDER)'; put 'filename tmp "&AUDITFOLDER/deleterecords.sas" lrecl=10000;'; put 'libname &tmplib "&AUDITFOLDER";'; put '%end;'; put '/**'; put '* Create closeout statements. If UPDATE approach and CAS engine, use the'; put '* DeleteRows action (as regular SQL deletes are not supported).'; put '* Otherwise, the deletions 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 etype;'; put '%let update_cnt=0;'; put '%let etype=%mf_getengine(&base_lib);'; put '%put &=etype;'; put '%if &loadtype=UPDATE and &etype=CAS %then %do;'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds &tmplib..deleterecords;'; put 'set work.___closeout1;'; put 'keep &pk;'; put 'run;'; put '/* build the proc */'; put 'data _null_;'; put 'file tmp;'; put 'put "/* libname approve ''&AUDITFOLDER''; */";'; put 'put ''proc cas;table.deleteRows result=r/ table={'' ;'; put 'put " caslib=''&base_lib'',name=''&base_dsn'',where=''1=1'',";'; put 'put " whereTable={caslib=''CASUSER'',name=''&delds''}";'; put 'put "};";'; put 'put "call symputx(''update_cnt'',r.RowsDeleted);";'; put 'put "quit;";'; put 'put "data;set casuser.&delds;putlog (_all_)(=);run;";'; put 'put ''%put &=update_cnt;'';'; put 'put "proc sql;drop table CASUSER.&delds;";'; put 'stop;'; put 'run;'; put '%end;'; put '%else %do;'; 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 'put ''%put update_cnt=&update_cnt;'';'; put 'run;'; put '%end;'; 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 '%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 '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; 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_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_extr i extr_word outvar;'; put '%if %length(&str1)=0 %then %do;'; put '%put &sysmacroname: str1 is empty, nothing to compare;'; put '%return;'; put '%end;'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%if %sysfunc(indexw(%superq(str2),%superq(extr_word)))=0 %then'; put '%let outvar=&outvar &extr_word;'; put '%end;'; put '/* send out the result without any surrounding whitespace */'; put '%do;&outvar%end;'; 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) format=32. into: maxkey trimmed'; put '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=%sysevalf(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%sysevalf(&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=%sysevalf(&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 %sysevalf(&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 mp_rowhash('; put 'md5_col='; put ',cvars='; put ',nvars='; put ');'; put '/* DATA step temp variables use five leading underscores. The names'; put 'are generated at macro invocation to avoid clashing with data columns. */'; put '%local state digest pair numtext normal i chars nums;'; put '%let state=%mf_getuniquename(prefix=_____state_);'; put '%let digest=%mf_getuniquename(prefix=_____digest_);'; put '%let pair=%mf_getuniquename(prefix=_____pair_);'; put '%let numtext=%mf_getuniquename(prefix=_____numtext_);'; put '%let normal=%mf_getuniquename(prefix=_____normal_);'; put '%let i=%mf_getuniquename(prefix=_____i_);'; put '%let chars=%mf_getuniquename(prefix=_____chars_);'; put '%let nums=%mf_getuniquename(prefix=_____nums_);'; put 'length &state $16'; put '&digest $16'; put '&pair $32'; put '&numtext $64'; put '&normal &i 8;'; put 'if _n_=1 then call missing(&state,&digest,&pair,&numtext,&normal,&i);'; put 'drop &state &digest &pair &numtext &normal &i;'; put '/* Versioned seed prevents confusion with other hashing schemes. */'; put '&state = md5(''DC HASH v2'');'; put '%if %length(&cvars)>0 %then %do;'; put 'array &chars{*} $ &cvars;'; put 'do &i = 1 to dim(&chars);'; put '/* Leading blanks are retained. */'; put '&digest = md5(trimn(&chars[&i]));'; put 'substr(&pair, 1, 16) = &state;'; put 'substr(&pair, 17, 16) = &digest;'; put '&state = md5(&pair);'; put 'end;'; put '%end;'; put '%if %length(&nvars)>0 %then %do;'; put 'array &nums{*} &nvars;'; put 'do &i = 1 to dim(&nums);'; put '/*'; put 'multiply-by-one for consistent cross-system precision.'; put 'Ignore null to protect SAS special missing values.'; put 'Cannot use IFN() as it evaluates both sides'; put '*/'; put 'if missing(&nums[&i]) then &normal = &nums[&i];'; put 'else &normal = &nums[&i] * 1;'; put '&numtext = put(&normal, binary64.);'; put '&digest = md5(trim(&numtext));'; put 'substr(&pair, 1, 16) = &state;'; put 'substr(&pair, 17, 16) = &digest;'; put '&state = md5(&pair);'; put 'end;'; put '%end;'; put '&md5_col = put(&state, $hex32.);'; put '%mend mp_rowhash;'; 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=33;'; 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 %length(&CLOSE_VARS)>0 and (&engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW or &engine_type=SASIOSNF)'; 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 hash_char_vars hash_num_vars ;'; 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 '/* Character variables are hashed separately from numerics so that the'; put 'iterative hash can be built with arrays rather than by concatenating'; put 'hundreds of 32-byte hex strings. */'; put 'select name into: hash_char_vars separated by '' '''; put 'from work.bitemp_cols'; put 'where type in (2,6)'; put 'and upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select name into: hash_num_vars separated by '' '''; put 'from work.bitemp_cols'; put 'where type not in (2,6)'; put 'and 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 &=hash_char_vars;'; put '%put &=hash_num_vars;'; 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___) or %index(%quote(&cols),_____) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___" or "_____".%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 '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&hash_num_vars'; put ')'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; 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 or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%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 '%let temp_table=%upcase(%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 in-db empty table with PK + MD5 only */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&temp_table'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; 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 '%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 '/* inherit remote length to handle byte expansion */'; put 'if 0 then set &base_lib..&temp_table(keep=&md5_col);'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; 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 hash_char_vars=&hash_char_vars;'; put '%put hash_num_vars=&hash_num_vars;'; put 'data work.bitemp1_current(drop=___TMP___NEW_FLG);'; put 'set work.bitemp0_base(drop=&md5_col);'; put 'if ___TMP___NEW_FLG=0;'; put 'length &md5_col $32;'; put '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&hash_num_vars'; put ')'; put 'run;'; 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 '/* For bitemporal we also include the business dates in the comparison hash.'; put 'The business dates are passed as prefix numerics so that both lookup and'; put 'update tables use exactly the same hashing order. */'; 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 '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&bus_from &bus_to &hash_num_vars'; put ')'; 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 '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&bus_from &bus_to &hash_num_vars'; put ')'; 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 or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%then %do;'; put '%let innertable=%upcase(%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 '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&innertable'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put 'exec (create table &innertable'; put '(like &baselib_schema.&base_dsn)'; put ') by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; 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 '%put Not using passthrough for *&engine_type* engine;'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; 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 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=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=ISNAME %then %do;'; put '/* match a valid SAS name (V7 rules) */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISNAME";'; 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=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 SAS format*/'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^(?:[_a-z\$]\w{0,31}|[0-9]+)\.[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 '%macro mpe_validatecol(incol,rule,outcol);'; put '%if &rule=LIBDS %then %do;'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename(prefix=cat);'; put '&tempcol=strip(&incol);'; put '/* permit the format-catalog form: LIBREF.CATALOGNAME-FC, exactly */'; put 'if length(&tempcol)>3'; put 'and upcase(substr(&tempcol,length(&tempcol)-2,3))=''-FC'''; put 'then &tempcol=substr(&tempcol,1,length(&tempcol)-3);'; put '%mp_validatecol(&tempcol,LIBDS,&outcol)'; put 'drop &tempcol;'; put '%end;'; put '%else %mp_validatecol(&incol,&rule,&outcol);'; put '%mend mpe_validatecol;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/**'; put '* Validate inputs before they reach executable code. base_table is'; put '* interpolated into a SQL where clause (and callers may pass raw request'; put '* input), so it must be a well-formed LIBREF.DATASET (or the'; put '* LIBREF.CATALOGNAME-FC form of a format catalog) and access_level must'; put '* be one of the known levels - anything else aborts before the query is'; put '* built. Values are read with symget (never re-resolved) and scanned in'; put '* a data step so no macro content in the input can execute.'; put '*/'; put '%local is_libds is_level;'; put '%let is_libds=0;'; put '%let is_level=0;'; put 'data _null_;'; put 'length _bt $64 _lvl $16;'; put '_bt=symget(''base_table'');'; put '_lvl=upcase(symget(''access_level''));'; put '%mpe_validatecol(_bt,LIBDS,is_libds)'; put 'if is_libds=0 then do;'; put 'call symputx(''is_libds'',0,''l'');'; put 'putlog ''ERR'' ''OR: Invalid base_table:'' _bt;'; put 'stop;'; put 'end;'; put 'if _lvl not in (''EDIT'',''APPROVE'',''VIEW'',''SIGNOFF'',''AUDIT'') then do;'; put 'call symputx(''is_level'',0,''l'');'; put 'putlog ''ERR'' ''OR: Invalid access_level:'' _lvl;'; put 'stop;'; put 'end;'; put '/* escape any embedded quotes so the value cannot break out of the'; put '* double-quoted SQL literals below (defence in depth - the LIBDS'; put '* check above already rejects quotes) */'; put '_bt=tranwrd(_bt,''"'','''');'; put 'call symputx(''base_table'',_bt,''l'');'; put 'call symputx(''access_level'',_lvl,''l'');'; put 'call symputx(''is_libds'',is_libds,''l'');'; put 'call symputx(''is_level'',1,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue=(&is_libds ne 1)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Invalid base_table)'; put ')'; put '%mp_abort('; put 'iftrue=(&is_level ne 1)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Invalid access_level)'; 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 'data work.alertmessage;'; put 'set &mpelib..mpe_config;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also var_scope=''DC_EMAIL'' and var_name="&alert_event._TEMPLATE";'; put 'run;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; 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 '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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; put '/* fallback message */'; 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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; put '/* fallback message */'; 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 '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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; 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_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 'length fmthash $32;'; put '%mp_rowhash('; put 'md5_col=fmthash'; put ',cvars=&cvars'; put ',nvars=&nvars'; put ')'; 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 fmthash $32;'; 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 '%mp_rowhash('; put 'md5_col=fmthash'; put ',cvars=&cvars'; put ',nvars=&nvars'; put ')'; 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 '%local engine_type;'; put '%let engine_type=%mf_getengine(&lib);'; put '%if &engine_type=CAS %then %do;'; put '/* Fixed char variables cannot be appended to CAS varchar columns, so'; put 'cast them (per the target table structure) in a CASUSER copy of the'; put 'staging table, then append via data step. Approach mirrors the CAS'; put 'append in bitemporal_dataloader.sas */'; put 'proc contents noprint data=&libds'; put 'out=work.rpl_base_cols(keep=name type);'; put 'run;'; put 'proc contents noprint data=WORK.&STAGING_DS'; put 'out=work.rpl_stag_cols(keep=name type);'; put 'run;'; put 'proc sql noprint;'; put 'create table work.rpl_vchars as'; put 'select a.name'; put 'from work.rpl_base_cols a'; put 'inner join work.rpl_stag_cols b'; put 'on upcase(a.name)=upcase(b.name)'; put 'where a.type=6; /* varchar in target */'; put 'quit;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop tmpds;'; put '%let vcfmt=;'; put '%let vcrename=;'; put '%let vcassign=;'; put '%let vcdrop=;'; put 'data _null_;'; put 'set work.rpl_vchars 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 tmpds=%mf_getuniquename();'; put 'data casuser.&tmpds;'; put '&vcfmt'; put 'set WORK.&STAGING_DS &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* exit on err condition before the destructive truncate below */'; put '%if &syscc>0 %then %do;'; put '%mp_lockanytable(UNLOCK,lib=&lib,ds=&ds,ref=&ETLSOURCE (aborted),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* ensure cleanup */'; put 'proc sql;drop table CASUSER.&tmpds;quit;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - aborting before REPLACE truncate of &libds.)'; put ')'; put '/* CAS tables do not support SQL deletes, so truncate with deleteRows.'; put 'This is deliberately the last step before the append, to minimise'; put 'the time in which the target table is empty. */'; put 'proc cas;'; put 'table.deleteRows / table={caslib="&lib",name="&ds",where="1=1"};'; put 'quit;'; put '/* load the target with varchars applied */'; put 'data &libds (append=yes) / sessref=dcsession;'; put 'set casuser.&tmpds;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmpds;'; put 'quit;'; put '%end;'; put '%else %do;'; put '/* exit on err condition before the destructive delete below */'; put '%if &syscc>0 %then %do;'; put '%mp_lockanytable(UNLOCK,lib=&lib,ds=&ds,ref=&ETLSOURCE (aborted),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - aborting before REPLACE delete of &libds.)'; put ')'; put 'proc sql;'; put 'delete * from &libds;'; put 'quit;'; put 'proc append base=&libds data=WORK.&STAGING_DS force nowarn;run;'; put '%end;'; 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 '%macro dc_cassave(libds, mdebug=0);'; put '%mend dc_cassave;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 dc_cassave.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 '/* save table to disk (if viya + cas) */'; put '%dc_cassave(&libds)'; 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 cannot exit cleanly from inside a %include, so an abort there'; put '(eg in a hook script run via mp_include) only records the error in'; put 'work.mp_abort_errds. mode=INCLUDE picks that up and aborts properly here. */'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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_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=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=ISNAME %then %do;'; put '/* match a valid SAS name (V7 rules) */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISNAME";'; 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=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 SAS format*/'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^(?:[_a-z\$]\w{0,31}|[0-9]+)\.[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 '%macro mpe_validatecol(incol,rule,outcol);'; put '%if &rule=LIBDS %then %do;'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename(prefix=cat);'; put '&tempcol=strip(&incol);'; put '/* permit the format-catalog form: LIBREF.CATALOGNAME-FC, exactly */'; put 'if length(&tempcol)>3'; put 'and upcase(substr(&tempcol,length(&tempcol)-2,3))=''-FC'''; put 'then &tempcol=substr(&tempcol,1,length(&tempcol)-3);'; put '%mp_validatecol(&tempcol,LIBDS,&outcol)'; put 'drop &tempcol;'; put '%end;'; put '%else %mp_validatecol(&incol,&rule,&outcol);'; put '%mend mpe_validatecol;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/**'; put '* Validate inputs before they reach executable code. base_table is'; put '* interpolated into a SQL where clause (and callers may pass raw request'; put '* input), so it must be a well-formed LIBREF.DATASET (or the'; put '* LIBREF.CATALOGNAME-FC form of a format catalog) and access_level must'; put '* be one of the known levels - anything else aborts before the query is'; put '* built. Values are read with symget (never re-resolved) and scanned in'; put '* a data step so no macro content in the input can execute.'; put '*/'; put '%local is_libds is_level;'; put '%let is_libds=0;'; put '%let is_level=0;'; put 'data _null_;'; put 'length _bt $64 _lvl $16;'; put '_bt=symget(''base_table'');'; put '_lvl=upcase(symget(''access_level''));'; put '%mpe_validatecol(_bt,LIBDS,is_libds)'; put 'if is_libds=0 then do;'; put 'call symputx(''is_libds'',0,''l'');'; put 'putlog ''ERR'' ''OR: Invalid base_table:'' _bt;'; put 'stop;'; put 'end;'; put 'if _lvl not in (''EDIT'',''APPROVE'',''VIEW'',''SIGNOFF'',''AUDIT'') then do;'; put 'call symputx(''is_level'',0,''l'');'; put 'putlog ''ERR'' ''OR: Invalid access_level:'' _lvl;'; put 'stop;'; put 'end;'; put '/* escape any embedded quotes so the value cannot break out of the'; put '* double-quoted SQL literals below (defence in depth - the LIBDS'; put '* check above already rejects quotes) */'; put '_bt=tranwrd(_bt,''"'','''');'; put 'call symputx(''base_table'',_bt,''l'');'; put 'call symputx(''access_level'',_lvl,''l'');'; put 'call symputx(''is_libds'',is_libds,''l'');'; put 'call symputx(''is_level'',1,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue=(&is_libds ne 1)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Invalid base_table)'; put ')'; put '%mp_abort('; put 'iftrue=(&is_level ne 1)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Invalid access_level)'; 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 dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro dc_casload(libds, mdebug=0);'; put '%mend dc_casload;'; put '%macro mm_getgroupmembers('; put 'group /* metadata group for which to bring back members */'; put ',outds=work.mm_getgroupmembers /* output dataset to contain the results */'; put ',emails=NO /* set to yes to bring back emails also */'; put ',id=NO /* set to yes if passing an ID rather than group name */'; put ')/*/STORE SOURCE*/;'; put 'data &outds ;'; put 'attrib uriGrp uriMem GroupId GroupName Group_or_Role MemberName MemberType'; put 'euri email length=$64'; put 'GroupDesc length=$256'; put 'rcGrp rcMem rc i j length=3;'; put 'call missing (of _all_);'; put 'drop uriGrp uriMem rcGrp rcMem rc i j arc ;'; put 'i=1;'; put '* Grab the URI for the first Group ;'; put '%if &id=NO %then %do;'; put 'rcGrp=metadata_getnobj("omsobj:IdentityGroup?@Name=''&group''",i,uriGrp);'; put '%end;'; put '%else %do;'; put 'rcGrp=metadata_getnobj("omsobj:IdentityGroup?@Id=''&group''",i,uriGrp);'; put '%end;'; put '* If Group found, enter do loop ;'; put 'if rcGrp>0 then do;'; put 'call missing (rcMem,uriMem,GroupId,GroupName,Group_or_Role'; put ',MemberName,MemberType);'; put '* get group info ;'; put 'rc = metadata_getattr(uriGrp,"Id",GroupId);'; put 'rc = metadata_getattr(uriGrp,"Name",GroupName);'; put 'rc = metadata_getattr(uriGrp,"PublicType",Group_or_Role);'; put 'rc = metadata_getattr(uriGrp,"Desc",GroupDesc);'; put 'j=1;'; put 'do while (metadata_getnasn(uriGrp,"MemberIdentities",j,uriMem) > 0);'; put 'call missing (MemberName, MemberType, email);'; put 'rc = metadata_getattr(uriMem,"Name",MemberName);'; put 'rc = metadata_getattr(uriMem,"PublicType",MemberType);'; put 'if membertype=''User'' and "&emails"=''YES'' then do;'; put 'if metadata_getnasn(uriMem,"EmailAddresses",1,euri)>0 then do;'; put 'arc=metadata_getattr(euri,"Address",email);'; put 'end;'; put 'end;'; put 'output;'; put 'j+1;'; put 'end;'; put 'end;'; put 'run;'; put '%mend mm_getgroupmembers;'; put '%macro dc_getgroupmembers(group,outds=dc_getgroupmembers);'; put '%mm_getgroupmembers(&group,outds=&outds)'; 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_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_extr i extr_word outvar;'; put '%if %length(&str1)=0 %then %do;'; put '%put &sysmacroname: str1 is empty, nothing to compare;'; put '%return;'; put '%end;'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%if %sysfunc(indexw(%superq(str2),%superq(extr_word)))=0 %then'; put '%let outvar=&outvar &extr_word;'; put '%end;'; put '/* send out the result without any surrounding whitespace */'; put '%do;&outvar%end;'; 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=YES'; 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()'; 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 '* 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 LABEL - var label. https://core.sasjs.io/mp__getcols_8sas.html'; put '@li FMTNAME - derived format. https://core.sasjs.io/mp__getcols_8sas.html'; put '@li DDTYPE - derived dropdown. C=CHARACTER, N=NUMERIC, else DATE / TIME /'; put 'DATETIME. 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 '@li coltype - front-end column formatting spec'; 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_casload.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 '%dc_casload(&libds)'; 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 vars4;'; put 'set vars3;'; put 'length coltype $500.;'; put 'format=upcase(format);'; put 'coltype=cats(''{"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,'',"type":"datetime"}'');'; 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"}'');'; 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"}'');'; 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 'output;'; 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 cannot exit cleanly from inside a %include, so an abort there'; put '(eg in a hook script run via mp_include) only records the error in'; put 'work.mp_abort_errds. mode=INCLUDE picks that up and aborts properly here. */'; 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 - pull column names from the CLS-filtered WORK dataset but'; put 'join to mpe_datadictionary using the underlying LIB.DSN reference */'; put '%mpe_getlabels(COLUMNS,sasdata1,tgt_ds=&libds,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. Trim COLS payload in the SQL below - DDTYPE'; put 'C=CHARACTER N=NUMERIC (dates kept in full), VARNUM dropped (client'; put 'relies on column order, not position) */'; put 'proc sql;'; put 'create table work.cols as'; put 'select a.NAME'; put ',coalesce(c.desc,a.NAME) as LABEL'; put ',a.FMTNAME'; put ',case a.DDTYPE'; put 'when ''CHARACTER'' then ''C'''; put 'when ''NUMERIC'' then ''N'''; put 'else a.DDTYPE end as 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.longdesc'; put ',d.colType'; put 'from work.cols1(drop=varnum) 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 'left join work.vars4 d'; put 'on a.NAME=d.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 '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 '%dc_casload(&lib..&ds)'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; 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=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=ISNAME %then %do;'; put '/* match a valid SAS name (V7 rules) */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISNAME";'; 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=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 SAS format*/'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^(?:[_a-z\$]\w{0,31}|[0-9]+)\.[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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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.|RAW_VALUE|'; put '|---|---|'; put '|1|77.43|'; put '|2|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_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|N|0.5||'; put '|1|DISCOUNT_RT|N|0.4||'; put '|1|DISCOUNT_RT|N|0.3||'; put '|1|CURRENCY_SYMBOL|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|C||"RSD"|'; put '|2|DISCOUNT_RT|N|0.5||'; put '|2|DISCOUNT_RT|N|0.4||'; put '|2|CURRENCY_SYMBOL|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|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 cannot exit cleanly from inside a %include, so an abort there'; put '(eg in a hook script run via mp_include) only records the error in'; put 'work.mp_abort_errds. mode=INCLUDE picks that up and aborts properly here. */'; put '%mp_abort(mode=INCLUDE)'; put '/* ensure that the DISPLAY_INDEX variable exists. */'; put 'data work.dynamic_values;'; put 'length DISPLAY_INDEX 8;'; 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 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_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(OBJ,dynamic_values,fmt=N)'; put '%webout(OBJ,dynamic_extended_values,fmt=N)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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_extr i extr_word outvar;'; put '%if %length(&str1)=0 %then %do;'; put '%put &sysmacroname: str1 is empty, nothing to compare;'; put '%return;'; put '%end;'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%if %sysfunc(indexw(%superq(str2),%superq(extr_word)))=0 %then'; put '%let outvar=&outvar &extr_word;'; put '%end;'; put '/* send out the result without any surrounding whitespace */'; put '%do;&outvar%end;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 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=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=ISNAME %then %do;'; put '/* match a valid SAS name (V7 rules) */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISNAME";'; 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=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 SAS format*/'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^(?:[_a-z\$]\w{0,31}|[0-9]+)\.[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 '%macro mpe_validatecol(incol,rule,outcol);'; put '%if &rule=LIBDS %then %do;'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename(prefix=cat);'; put '&tempcol=strip(&incol);'; put '/* permit the format-catalog form: LIBREF.CATALOGNAME-FC, exactly */'; put 'if length(&tempcol)>3'; put 'and upcase(substr(&tempcol,length(&tempcol)-2,3))=''-FC'''; put 'then &tempcol=substr(&tempcol,1,length(&tempcol)-3);'; put '%mp_validatecol(&tempcol,LIBDS,&outcol)'; put 'drop &tempcol;'; put '%end;'; put '%else %mp_validatecol(&incol,&rule,&outcol);'; put '%mend mpe_validatecol;'; 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 '/**'; put '* Validate inputs before they reach executable code. base_table is'; put '* interpolated into a SQL where clause (and callers may pass raw request'; put '* input), so it must be a well-formed LIBREF.DATASET (or the'; put '* LIBREF.CATALOGNAME-FC form of a format catalog) and access_level must'; put '* be one of the known levels - anything else aborts before the query is'; put '* built. Values are read with symget (never re-resolved) and scanned in'; put '* a data step so no macro content in the input can execute.'; put '*/'; put '%local is_libds is_level;'; put '%let is_libds=0;'; put '%let is_level=0;'; put 'data _null_;'; put 'length _bt $64 _lvl $16;'; put '_bt=symget(''base_table'');'; put '_lvl=upcase(symget(''access_level''));'; put '%mpe_validatecol(_bt,LIBDS,is_libds)'; put 'if is_libds=0 then do;'; put 'call symputx(''is_libds'',0,''l'');'; put 'putlog ''ERR'' ''OR: Invalid base_table:'' _bt;'; put 'stop;'; put 'end;'; put 'if _lvl not in (''EDIT'',''APPROVE'',''VIEW'',''SIGNOFF'',''AUDIT'') then do;'; put 'call symputx(''is_level'',0,''l'');'; put 'putlog ''ERR'' ''OR: Invalid access_level:'' _lvl;'; put 'stop;'; put 'end;'; put '/* escape any embedded quotes so the value cannot break out of the'; put '* double-quoted SQL literals below (defence in depth - the LIBDS'; put '* check above already rejects quotes) */'; put '_bt=tranwrd(_bt,''"'','''');'; put 'call symputx(''base_table'',_bt,''l'');'; put 'call symputx(''access_level'',_lvl,''l'');'; put 'call symputx(''is_libds'',is_libds,''l'');'; put 'call symputx(''is_level'',1,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue=(&is_libds ne 1)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Invalid base_table)'; put ')'; put '%mp_abort('; put 'iftrue=(&is_level ne 1)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Invalid access_level)'; 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 'data work.alertmessage;'; put 'set &mpelib..mpe_config;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also var_scope=''DC_EMAIL'' and var_name="&alert_event._TEMPLATE";'; put 'run;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; 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 '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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; put '/* fallback message */'; 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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; put '/* fallback message */'; 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 '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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '%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_extr i extr_word outvar;'; put '%if %length(&str1)=0 %then %do;'; put '%put &sysmacroname: str1 is empty, nothing to compare;'; put '%return;'; put '%end;'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%if %sysfunc(indexw(%superq(str2),%superq(extr_word)))=0 %then'; put '%let outvar=&outvar &extr_word;'; put '%end;'; put '/* send out the result without any surrounding whitespace */'; put '%do;&outvar%end;'; 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 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 '/* The post edit hook may have re-pointed the changeset at a different table -'; put '* that is what lets an empty mirror stand in for a real one. The target must'; put '* itself be registered in MPE_TABLES: the approval screen resolves the table''s'; put '* audit settings from that row, and a changeset whose base table has no row'; put '* cannot be reviewed. Fail here, while the submitter is still watching. */'; put '%local target_chk;'; put 'proc sql noprint;'; put 'select count(*) into: target_chk'; put 'from &mpelib..mpe_tables'; put 'where tx_from le &now and &now lt tx_to'; put 'and upcase(libref)="%upcase(&libref)"'; put 'and upcase(dsn)="%upcase(&ds)";'; put '%if &target_chk=0 %then %do;'; put '%let msg=%str(ERR)OR: target table &libref..&ds is not registered in%trim('; put ') &mpelib..mpe_tables - a post edit hook may only route a changeset to a%trim('; put ') registered table;'; put '%mpe_loadfail('; put 'status=FAILED - TARGET NOT REGISTERED'; 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_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_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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 mp_validatecol.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 '/* validate libds to prevent code injection */'; put '%mp_validatecol(LIBDS,LIBDS,is_libds)'; put 'if is_libds=0 then do;'; put 'putlog ''ERR'' ''OR: Invalid libds:'' libds;'; put 'call symputx(''bad_libds'',1);'; put 'end;'; put 'else call symputx(''bad_libds'',0);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&bad_libds=1)'; put ',mac=&_program'; put ',msg=%str(Invalid libds supplied)'; put ')'; 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 cannot exit cleanly from inside a %include, so an abort there'; put '(eg in a hook script run via mp_include) only records the error in'; put 'work.mp_abort_errds. mode=INCLUDE picks that up and aborts properly here. */'; 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 'data _null_;'; put 'if "&xlsref" ne "0" then do;'; put 'rc=fcopy("&xlsref","outref");'; put 'end;'; put 'run;'; put '/**'; put '* if running 9.3 or older, delete step above and enable macro below'; put '%mp_binarycopy(iftrue=("&xlsref" ne "0"),inref=&xlsref,outref=outref)'; put '*/'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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_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=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=ISNAME %then %do;'; put '/* match a valid SAS name (V7 rules) */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISNAME";'; 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=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 SAS format*/'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^(?:[_a-z\$]\w{0,31}|[0-9]+)\.[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 '%macro mpe_validatecol(incol,rule,outcol);'; put '%if &rule=LIBDS %then %do;'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename(prefix=cat);'; put '&tempcol=strip(&incol);'; put '/* permit the format-catalog form: LIBREF.CATALOGNAME-FC, exactly */'; put 'if length(&tempcol)>3'; put 'and upcase(substr(&tempcol,length(&tempcol)-2,3))=''-FC'''; put 'then &tempcol=substr(&tempcol,1,length(&tempcol)-3);'; put '%mp_validatecol(&tempcol,LIBDS,&outcol)'; put 'drop &tempcol;'; put '%end;'; put '%else %mp_validatecol(&incol,&rule,&outcol);'; put '%mend mpe_validatecol;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/**'; put '* Validate inputs before they reach executable code. base_table is'; put '* interpolated into a SQL where clause (and callers may pass raw request'; put '* input), so it must be a well-formed LIBREF.DATASET (or the'; put '* LIBREF.CATALOGNAME-FC form of a format catalog) and access_level must'; put '* be one of the known levels - anything else aborts before the query is'; put '* built. Values are read with symget (never re-resolved) and scanned in'; put '* a data step so no macro content in the input can execute.'; put '*/'; put '%local is_libds is_level;'; put '%let is_libds=0;'; put '%let is_level=0;'; put 'data _null_;'; put 'length _bt $64 _lvl $16;'; put '_bt=symget(''base_table'');'; put '_lvl=upcase(symget(''access_level''));'; put '%mpe_validatecol(_bt,LIBDS,is_libds)'; put 'if is_libds=0 then do;'; put 'call symputx(''is_libds'',0,''l'');'; put 'putlog ''ERR'' ''OR: Invalid base_table:'' _bt;'; put 'stop;'; put 'end;'; put 'if _lvl not in (''EDIT'',''APPROVE'',''VIEW'',''SIGNOFF'',''AUDIT'') then do;'; put 'call symputx(''is_level'',0,''l'');'; put 'putlog ''ERR'' ''OR: Invalid access_level:'' _lvl;'; put 'stop;'; put 'end;'; put '/* escape any embedded quotes so the value cannot break out of the'; put '* double-quoted SQL literals below (defence in depth - the LIBDS'; put '* check above already rejects quotes) */'; put '_bt=tranwrd(_bt,''"'','''');'; put 'call symputx(''base_table'',_bt,''l'');'; put 'call symputx(''access_level'',_lvl,''l'');'; put 'call symputx(''is_libds'',is_libds,''l'');'; put 'call symputx(''is_level'',1,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue=(&is_libds ne 1)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Invalid base_table)'; put ')'; put '%mp_abort('; put 'iftrue=(&is_level ne 1)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Invalid access_level)'; 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 '%local libds;'; put 'proc sql noprint;'; put 'select upcase(cats(base_lib,''.'',base_ds)) into: libds'; put 'from &dc_libref..mpe_submit'; put 'where TABLE_ID="&load_ref";'; put '%local base_lib base_ds;'; put '%let base_lib=%scan(&libds,1,.);'; put '%let base_ds=%scan(&libds,2,.);'; put '/**'; put '* check if there is actually a version to restore'; put '*/'; put '%local audtab;'; put 'proc sql noprint;'; put 'select coalescec(audit_libds,"&dc_libref..MPE_AUDIT") into: audtab trimmed'; put 'from &dc_libref..MPE_TABLES'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";'; put '%if "&audtab"="0" %then %do;'; put '%let &outresult=NO;'; put '%let &outreason= &libds has no audit table configured;'; put '%return;'; put '%end;'; put '%local chk;'; put '%let chk=0;'; put 'proc sql noprint;'; put 'select count(*) into: chk from &audtab'; put 'where load_ref="&load_ref";'; put '%if &chk=0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=No entry for &load_ref in &audtab;'; 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 &outresult=YES;'; put '%let &outreason=IS ADMIN;'; put '%return;'; put '%end;'; put '/* check if user has basic access */'; 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 &outresult=NO;'; put '%let &outreason=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 &outresult=NO;'; put '%let &outreason=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 &outresult=NO;'; put '%let &outreason=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 &outresult=YES;'; put '%let &outreason=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 'data work.alertmessage;'; put 'set &mpelib..mpe_config;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also var_scope=''DC_EMAIL'' and var_name="&alert_event._TEMPLATE";'; put 'run;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; 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 '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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; put '/* fallback message */'; 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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; put '/* fallback message */'; 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 '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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '%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_extr i extr_word outvar;'; put '%if %length(&str1)=0 %then %do;'; put '%put &sysmacroname: str1 is empty, nothing to compare;'; put '%return;'; put '%end;'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%if %sysfunc(indexw(%superq(str2),%superq(extr_word)))=0 %then'; put '%let outvar=&outvar &extr_word;'; put '%end;'; put '/* send out the result without any surrounding whitespace */'; put '%do;&outvar%end;'; 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 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 '/* The post edit hook may have re-pointed the changeset at a different table -'; put '* that is what lets an empty mirror stand in for a real one. The target must'; put '* itself be registered in MPE_TABLES: the approval screen resolves the table''s'; put '* audit settings from that row, and a changeset whose base table has no row'; put '* cannot be reviewed. Fail here, while the submitter is still watching. */'; put '%local target_chk;'; put 'proc sql noprint;'; put 'select count(*) into: target_chk'; put 'from &mpelib..mpe_tables'; put 'where tx_from le &now and &now lt tx_to'; put 'and upcase(libref)="%upcase(&libref)"'; put 'and upcase(dsn)="%upcase(&ds)";'; put '%if &target_chk=0 %then %do;'; put '%let msg=%str(ERR)OR: target table &libref..&ds is not registered in%trim('; put ') &mpelib..mpe_tables - a post edit hook may only route a changeset to a%trim('; put ') registered table;'; put '%mpe_loadfail('; put 'status=FAILED - TARGET NOT REGISTERED'; 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=YES'; 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_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_applyformats(inds,errds=0'; put ')/*/STORE SOURCE*/;'; put '%local outds liblist i engine lib msg ;'; put '/**'; put '* Validations'; put '*/'; put 'proc sort data=&inds;'; put 'by lib ds var fmt;'; put 'run;'; put '%if &errds=0 %then %let outds=%mf_getuniquename(prefix=mp_applyformats);'; put '%else %let outds=&errds;'; put 'data &outds;'; put 'set &inds;'; put 'where fmt not in ('''',''.'', ''$'', ''$CHAR.'',''8.'');'; put 'length msg $128;'; put 'by lib ds var fmt;'; put 'if libref(lib) ne 0 then do;'; put 'msg=catx('' '',''libref'',lib,''is not assigned!'');'; put '%if &errds=0 %then %do;'; put 'putlog ''ERR'' +(-1) "OR: " msg;'; put '%end;'; put 'output;'; put 'return;'; put 'end;'; put 'if exist(cats(lib,''.'',ds)) ne 1 then do;'; put 'msg=catx('' '',''libds'',lib,''.'',ds,''does not exist!'');'; put '%if &errds=0 %then %do;'; put 'putlog ''ERR'' +(-1) "OR: " msg;'; put '%end;'; put 'output;'; put 'return;'; put 'end;'; put '%mp_validatecol(fmt,FORMAT,is_fmt)'; put 'if is_fmt=0 then do;'; put 'msg=catx('' '',''format'',fmt,''on libds'',lib,''.'',ds,''.'',var,''is not valid!'');'; put '%if &errds=0 %then %do;'; put 'putlog ''ERR'' +(-1) "OR: " msg;'; put '%end;'; put 'output;'; put 'return;'; put 'end;'; put 'if first.ds then do;'; put 'retain dsid;'; put 'dsid=open(cats(lib,''.'',ds));'; put 'if dsid=0 then do;'; put 'msg=catx('' '',''libds'',lib,''.'',ds,'' could not be opened!'');'; put '%if &errds=0 %then %do;'; put 'putlog ''ERR'' +(-1) "OR: " msg;'; put '%end;'; put 'output;'; put 'return;'; put 'end;'; put 'if varnum(dsid,var)<1 then do;'; put 'msg=catx('' '',''Variable'',lib,''.'',ds,''.'',var,'' was not found!'');'; put '%if &errds=0 %then %do;'; put 'putlog ''ERR'' +(-1) "OR: " msg;'; put '%end;'; put 'output;'; put 'end;'; put 'end;'; put 'if last.ds then rc=close(dsid);'; put 'run;'; put 'proc sql noprint;'; put 'select distinct lib into: liblist separated by '' '' from &inds;'; put '%put &=liblist;'; put '%if %length(&liblist)>0 %then %do i=1 %to %sysfunc(countw(&liblist));'; put '%let lib=%scan(&liblist,1);'; put '%let engine=%mf_getengine(&lib);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put '%let msg=&lib has &engine engine - formats cannot be applied;'; put 'insert into &outds set lib="&lib",ds="_all_",var="_all", msg="&msg" ;'; put '%if &errds=0 %then %put %str(ERR)OR: &msg;'; put '%end;'; put '%end;'; put 'quit;'; put '%if %mf_nobs(&outds)>0 %then %return;'; put '/**'; put '* Validations complete - now apply the actual formats!'; put '*/'; put '%let fref=%mf_getuniquefileref();'; put 'data _null_;'; put 'set &inds;'; put 'by lib ds var fmt;'; put 'where fmt not in ('''',''.'', ''$'', ''$CHAR.'',''8.'');'; put 'file &fref;'; put 'if first.lib then put ''proc datasets nolist lib='' lib '';'';'; put 'if first.ds then put '' modify '' ds '';'';'; put 'put '' format '' var fmt '';'';'; put 'if last.ds then put '' run;'';'; put 'if last.lib then put ''quit;'';'; put 'run;'; put '%inc &fref/source2;'; put '%if &errds=0 %then %do;'; put 'proc sql;'; put 'drop table &outds;'; put '%end;'; put '%mend mp_applyformats;'; 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()'; 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 created with the smaller length...'; put '**/'; put 'else if vlen<8 then header=cats(varnm,'':best'',vlen,''.'');'; put 'else header=cats(varnm,'':best32.'');'; 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 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 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_getfilesize(fpath=,libds=0,format=NO'; put ')/*/STORE SOURCE*/;'; put '%local rc fid fref bytes dsid lib vnum;'; put '%if &libds ne 0 %then %do;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put '%let dsid=%sysfunc(open('; put 'sashelp.vtable(where=(libname="&lib" and memname="%scan(&libds,-1,.)")'; put 'keep=libname memname filesize'; put ')'; put '));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,FILESIZE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let bytes=%sysfunc(getvarn(&dsid,&vnum));'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%else %put &sysmacroname: &libds could not be opened! %sysfunc(sysmsg());'; put '%end;'; put '%else %do;'; put '%let rc=%sysfunc(filename(fref,&fpath));'; put '%let fid=%sysfunc(fopen(&fref));'; put '%let bytes=%sysfunc(finfo(&fid,File Size (bytes)));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(fref));'; put '%end;'; put '%if &format=NO %then %do;'; put '&bytes'; put '%end;'; put '%else %do;'; put '%sysfunc(INPUTN(&bytes, best.),sizekmg.)'; put '%end;'; put '%mend mf_getfilesize ;'; put '%macro mcf_length(wrap=YES'; 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 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()'; 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_ds2squeeze('; put 'libds,'; put 'outds=work.mp_ds2squeeze,'; put 'mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg source;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %do;'; put '%let dbg=*;'; put '%let source=/source2;'; put '%end;'; put '%local optval ds fref startsize;'; put '%let ds=%mf_getuniquename();'; put '%let fref=%mf_getuniquefileref();'; put '%let startsize=%mf_getfilesize(libds=&libds,format=yes);'; put '%mp_getmaxvarlengths(&libds,outds=&ds)'; put 'data _null_;'; put 'set &ds end=last;'; put 'file &fref;'; put '/* grab the types */'; put 'retain dsid;'; put 'if _n_=1 then dsid=open("&libds",''is'');'; put 'if dsid le 0 then do;'; put 'msg=sysmsg();'; put 'put msg=;'; put 'stop;'; put 'end;'; put 'type=vartype(dsid,varnum(dsid, name));'; put 'if last then rc=close(dsid);'; put '/* write out the length statement */'; put 'if _n_=1 then put ''length '';'; put 'length len $6;'; put 'if type=''C'' then do;'; put 'if maxlen=0 then len=''$1'';'; put 'else len=cats(''$'',maxlen);'; put 'end;'; put 'else do;'; put 'if maxlen=0 then len=''3'';'; put 'else len=cats(maxlen);'; put 'end;'; put 'put '' '' name '' '' len;'; put 'if last then 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 &outds;'; put '%inc &fref &source;'; put 'set &libds;'; put 'run;'; put 'options varlenchk=&optval;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds;'; put 'filename &fref clear;'; put '%end;'; put '%put &sysmacroname: &libds was &startsize;'; put '%put &sysmacroname: &outds is %mf_getfilesize(libds=&outds,format=yes);'; put '%mend mp_ds2squeeze;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 mcf_getfmttype.sas'; put '@li mf_nobs.sas'; put '@li mf_mkdir.sas'; put '@li mp_abort.sas'; put '@li mp_applyformats.sas'; put '@li mp_ds2csv.sas'; put '@li mp_getcols.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 'format _all_;'; put 'run;'; put '/* find all of the date / datetime / time vars */'; put '%mcf_getfmttype(wrap=YES)'; put '%mp_getcols(&tgtds,outds=work.cols)'; put 'data work.applydtfmts;'; put 'set work.cols;'; put 'lib="APPROVE";'; put 'ds="JSDSET";'; put 'var=name;'; put 'fmt=coalescec(format,''0'');'; put 'fmttype=mcf_getfmttype(fmt);'; put 'if fmttype in (''DATE'',''DATETIME'',''TIME'');'; put 'keep lib ds var fmt;'; put 'run;'; put '%mp_applyformats(work.applydtfmts)'; 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 cannot exit cleanly from inside a %include, so an abort there'; put '(eg in a hook script run via mp_include) only records the error in'; put 'work.mp_abort_errds. mode=INCLUDE picks that up and aborts properly here. */'; put '%mp_abort(mode=INCLUDE)'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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_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=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=ISNAME %then %do;'; put '/* match a valid SAS name (V7 rules) */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISNAME";'; 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=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 SAS format*/'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^(?:[_a-z\$]\w{0,31}|[0-9]+)\.[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 '%macro mpe_validatecol(incol,rule,outcol);'; put '%if &rule=LIBDS %then %do;'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename(prefix=cat);'; put '&tempcol=strip(&incol);'; put '/* permit the format-catalog form: LIBREF.CATALOGNAME-FC, exactly */'; put 'if length(&tempcol)>3'; put 'and upcase(substr(&tempcol,length(&tempcol)-2,3))=''-FC'''; put 'then &tempcol=substr(&tempcol,1,length(&tempcol)-3);'; put '%mp_validatecol(&tempcol,LIBDS,&outcol)'; put 'drop &tempcol;'; put '%end;'; put '%else %mp_validatecol(&incol,&rule,&outcol);'; put '%mend mpe_validatecol;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/**'; put '* Validate inputs before they reach executable code. base_table is'; put '* interpolated into a SQL where clause (and callers may pass raw request'; put '* input), so it must be a well-formed LIBREF.DATASET (or the'; put '* LIBREF.CATALOGNAME-FC form of a format catalog) and access_level must'; put '* be one of the known levels - anything else aborts before the query is'; put '* built. Values are read with symget (never re-resolved) and scanned in'; put '* a data step so no macro content in the input can execute.'; put '*/'; put '%local is_libds is_level;'; put '%let is_libds=0;'; put '%let is_level=0;'; put 'data _null_;'; put 'length _bt $64 _lvl $16;'; put '_bt=symget(''base_table'');'; put '_lvl=upcase(symget(''access_level''));'; put '%mpe_validatecol(_bt,LIBDS,is_libds)'; put 'if is_libds=0 then do;'; put 'call symputx(''is_libds'',0,''l'');'; put 'putlog ''ERR'' ''OR: Invalid base_table:'' _bt;'; put 'stop;'; put 'end;'; put 'if _lvl not in (''EDIT'',''APPROVE'',''VIEW'',''SIGNOFF'',''AUDIT'') then do;'; put 'call symputx(''is_level'',0,''l'');'; put 'putlog ''ERR'' ''OR: Invalid access_level:'' _lvl;'; put 'stop;'; put 'end;'; put '/* escape any embedded quotes so the value cannot break out of the'; put '* double-quoted SQL literals below (defence in depth - the LIBDS'; put '* check above already rejects quotes) */'; put '_bt=tranwrd(_bt,''"'','''');'; put 'call symputx(''base_table'',_bt,''l'');'; put 'call symputx(''access_level'',_lvl,''l'');'; put 'call symputx(''is_libds'',is_libds,''l'');'; put 'call symputx(''is_level'',1,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue=(&is_libds ne 1)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Invalid base_table)'; put ')'; put '%mp_abort('; put 'iftrue=(&is_level ne 1)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Invalid access_level)'; 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 'data work.alertmessage;'; put 'set &mpelib..mpe_config;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also var_scope=''DC_EMAIL'' and var_name="&alert_event._TEMPLATE";'; put 'run;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; 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 '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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; put '/* fallback message */'; 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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; put '/* fallback message */'; 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 '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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '%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_extr i extr_word outvar;'; put '%if %length(&str1)=0 %then %do;'; put '%put &sysmacroname: str1 is empty, nothing to compare;'; put '%return;'; put '%end;'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%if %sysfunc(indexw(%superq(str2),%superq(extr_word)))=0 %then'; put '%let outvar=&outvar &extr_word;'; put '%end;'; put '/* send out the result without any surrounding whitespace */'; put '%do;&outvar%end;'; 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 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 '/* The post edit hook may have re-pointed the changeset at a different table -'; put '* that is what lets an empty mirror stand in for a real one. The target must'; put '* itself be registered in MPE_TABLES: the approval screen resolves the table''s'; put '* audit settings from that row, and a changeset whose base table has no row'; put '* cannot be reviewed. Fail here, while the submitter is still watching. */'; put '%local target_chk;'; put 'proc sql noprint;'; put 'select count(*) into: target_chk'; put 'from &mpelib..mpe_tables'; put 'where tx_from le &now and &now lt tx_to'; put 'and upcase(libref)="%upcase(&libref)"'; put 'and upcase(dsn)="%upcase(&ds)";'; put '%if &target_chk=0 %then %do;'; put '%let msg=%str(ERR)OR: target table &libref..&ds is not registered in%trim('; put ') &mpelib..mpe_tables - a post edit hook may only route a changeset to a%trim('; put ') registered table;'; put '%mpe_loadfail('; put 'status=FAILED - TARGET NOT REGISTERED'; 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 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_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=YES'; 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()'; 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 created with the smaller length...'; put '**/'; put 'else if vlen<8 then header=cats(varnm,'':best'',vlen,''.'');'; put 'else header=cats(varnm,'':best32.'');'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 mp_validatecol.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 '/* sanitise message to prevent code injection */'; put 'message=compress(message, ''&%;'');'; 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 '/* validate libds to prevent code injection */'; put '%mp_validatecol(LIBDS,LIBDS,is_libds)'; put 'if is_libds=0 then do;'; put 'putlog ''ERR'' ''OR: Invalid libds:'' libds;'; put 'call symputx(''bad_libds'',1);'; put 'end;'; put 'else call symputx(''bad_libds'',0);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&bad_libds=1)'; put ',mac=&_program'; put ',msg=%str(Invalid libds supplied)'; put ')'; 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 cannot exit cleanly from inside a %include, so an abort there'; put '(eg in a hook script run via mp_include) only records the error in'; put 'work.mp_abort_errds. mode=INCLUDE picks that up and aborts properly here. */'; put '%mp_abort(mode=INCLUDE)'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 'It also checks that EDIT scope security is not being applied to tables'; put 'with a REPLACE loadtype (these are incompatible - see issue #211).'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li mp_abort.sas'; put '@li mp_filtercheck.sas'; put '

Related Macros

'; put '@li mpe_loader.sas'; put '**/'; put '/* REPLACE loadtype is incompatible with row level EDIT security (#211) */'; put 'proc sql noprint;'; put 'create table work.badloadtypes as'; put 'select distinct cats(upcase(a.rls_libref),''.'',upcase(a.rls_table)) as libds'; put 'from work.staging_ds(where=(rls_active=1'; put 'and upcase(rls_scope) in (''EDIT'',''ALL'')'; put 'and upcase(_____DELETE__THIS__RECORD_____) ne ''YES'')) a'; put 'inner join &dc_libref..mpe_tables(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(a.rls_libref)=upcase(b.libref)'; put 'and upcase(a.rls_table)=upcase(b.dsn)'; put 'where upcase(b.loadtype)=''REPLACE'';'; put '%let badloadtypes=0;'; put '%let badloadtype=;'; put 'data _null_;'; put 'set work.badloadtypes;'; put 'call symputx(''badloadtypes'',_n_);'; put 'call symputx(''badloadtype'',libds);'; put 'run;'; put '%mp_abort(iftrue=(&badloadtypes ne 0)'; put ',mac=mpe_row_level_security_postedit'; put ',msg=%str(Row level EDIT security cannot be applied to table(s) with a%trim('; put ') REPLACE loadtype, eg: &badloadtype. Remove the security rule(s) or%trim('; put ') change the loadtype.)'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 'if LIBREF in (''WORK'',''CASUSER'',''SASUSER'') then do;'; put 'putlog "ERR" +(-1) "OR: invalid LIBREF - " LIBREF;'; put 'call symputx(''errval'',1);'; put 'call symputx(''errmsg'',"Invalid LIBREF: "!!LIBREF);'; put 'end;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 '/* do not accept certain librefs */'; put 'if LIBREF in (''WORK'',''CASUSER'',''SASUSER'')'; put 'then do;'; put 'call symputx(''errmsg'',"Invalid LIBREF: "!!LIBREF);'; put 'call symputx(''errflag'',1);'; put 'end;'; 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 '/* REPLACE loadtype is incompatible with row level EDIT security (#211) */'; put 'proc sql noprint;'; put 'create table work.badloadtypes as'; put 'select distinct cats(upcase(a.libref),''.'',upcase(a.dsn)) as libds'; put 'from work.staging_ds(where=(loadtype=''REPLACE'''; put 'and upcase(_____DELETE__THIS__RECORD_____) ne ''YES'')) a'; put 'inner join &dc_libref..mpe_row_level_security(where=('; put 'rls_active=1 and &dc_dttmtfmt. lt tx_to'; put 'and upcase(rls_scope) in (''EDIT'',''ALL''))) b'; put 'on upcase(a.libref)=upcase(b.rls_libref)'; put 'and upcase(a.dsn)=upcase(b.rls_table);'; put '%let badloadtypes=0;'; put '%let badloadtype=;'; put 'data _null_;'; put 'set work.badloadtypes;'; put 'call symputx(''badloadtypes'',_n_);'; put 'call symputx(''badloadtype'',libds);'; put 'run;'; put '%mp_abort(iftrue=(&badloadtypes ne 0)'; put ',mac=mpe_tables_postedit'; put ',msg=%str(REPLACE loadtype cannot be applied to table(s) with row level%trim('; put ') EDIT security, eg: &badloadtype. Remove the security rule(s) or change%trim('; put ') the loadtype.)'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 '/** check that any supplied HARDREGEX / SOFTREGEX rules contain a valid'; put 'regex pattern. The frontend evaluates these as JavaScript regexes'; put '(invalid ones are silently ignored there), so prxparse is used here as'; put 'a best-effort syntax check to catch typos at config time.'; put 'An empty pattern is treated as valid (matches everything in JS). */'; put 'data work.regex_check;'; put 'length source $74;'; put 'set work.staging_ds('; put 'where=(rule_type in (''HARDREGEX'',''SOFTREGEX'')'; put 'and upcase(_____DELETE__THIS__RECORD_____) ne "YES")'; put ');'; put 'keep source rule_value;'; put 'if rule_value ne '' '' then do;'; put 'rx=prxparse(strip(rule_value));'; put 'if missing(rx) then do;'; put 'source=catx(''.'',base_lib,base_ds,base_col);'; put 'output;'; put 'end;'; put 'else call prxfree(rx);'; put 'end;'; put 'run;'; put '%global src_list3;'; put '%let src_list3='''';'; put 'proc sql noprint;'; put 'select distinct quote(cats(source)) into: src_list3 separated by '','''; put 'from work.regex_check;'; put 'quit;'; put '%mp_abort(iftrue= (%mf_nobs(work.regex_check)>0)'; put ',mac=mpe_validations_postedit'; put ',msg=%str(The following vars have invalid REGEX patterns: &src_list3)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_extr i extr_word outvar;'; put '%if %length(&str1)=0 %then %do;'; put '%put &sysmacroname: str1 is empty, nothing to compare;'; put '%return;'; put '%end;'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%if %sysfunc(indexw(%superq(str2),%superq(extr_word)))=0 %then'; put '%let outvar=&outvar &extr_word;'; put '%end;'; put '/* send out the result without any surrounding whitespace */'; put '%do;&outvar%end;'; 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=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=ISNAME %then %do;'; put '/* match a valid SAS name (V7 rules) */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISNAME";'; 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=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 SAS format*/'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^(?:[_a-z\$]\w{0,31}|[0-9]+)\.[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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/lineage; %let service=fetchcollineage; 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_getuniquelibref(prefix=mc);'; put '%local x maxtries;'; 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_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; 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 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 ',AUDITFOLDER=0'; 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 '%mp_abort('; put 'iftrue=(%sysfunc(exist(&base_lib..&base_dsn)) ne 1),'; put 'msg=&base_lib..&base_dsn does not exist'; put ')'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 ),'; put 'msg=&append_lib..&append_dsn does not exist'; put ')'; 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 '%mp_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 '%mp_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/* set up folder */'; put '%local tmplib;%let tmplib=%mf_getuniquelibref();'; put '%if "&AUDITFOLDER"="0" %then %do;'; put 'filename tmp temp lrecl=10000;'; put 'libname &tmplib (work);'; put '%end;'; put '%else %do;'; put '%mf_mkdir(&AUDITFOLDER)'; put 'filename tmp "&AUDITFOLDER/deleterecords.sas" lrecl=10000;'; put 'libname &tmplib "&AUDITFOLDER";'; put '%end;'; put '/**'; put '* Create closeout statements. If UPDATE approach and CAS engine, use the'; put '* DeleteRows action (as regular SQL deletes are not supported).'; put '* Otherwise, the deletions 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 etype;'; put '%let update_cnt=0;'; put '%let etype=%mf_getengine(&base_lib);'; put '%put &=etype;'; put '%if &loadtype=UPDATE and &etype=CAS %then %do;'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds &tmplib..deleterecords;'; put 'set work.___closeout1;'; put 'keep &pk;'; put 'run;'; put '/* build the proc */'; put 'data _null_;'; put 'file tmp;'; put 'put "/* libname approve ''&AUDITFOLDER''; */";'; put 'put ''proc cas;table.deleteRows result=r/ table={'' ;'; put 'put " caslib=''&base_lib'',name=''&base_dsn'',where=''1=1'',";'; put 'put " whereTable={caslib=''CASUSER'',name=''&delds''}";'; put 'put "};";'; put 'put "call symputx(''update_cnt'',r.RowsDeleted);";'; put 'put "quit;";'; put 'put "data;set casuser.&delds;putlog (_all_)(=);run;";'; put 'put ''%put &=update_cnt;'';'; put 'put "proc sql;drop table CASUSER.&delds;";'; put 'stop;'; put 'run;'; put '%end;'; put '%else %do;'; 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 'put ''%put update_cnt=&update_cnt;'';'; put 'run;'; put '%end;'; 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 '%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 '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; 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_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_extr i extr_word outvar;'; put '%if %length(&str1)=0 %then %do;'; put '%put &sysmacroname: str1 is empty, nothing to compare;'; put '%return;'; put '%end;'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%if %sysfunc(indexw(%superq(str2),%superq(extr_word)))=0 %then'; put '%let outvar=&outvar &extr_word;'; put '%end;'; put '/* send out the result without any surrounding whitespace */'; put '%do;&outvar%end;'; 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) format=32. into: maxkey trimmed'; put '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=%sysevalf(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%sysevalf(&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=%sysevalf(&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 %sysevalf(&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 mp_rowhash('; put 'md5_col='; put ',cvars='; put ',nvars='; put ');'; put '/* DATA step temp variables use five leading underscores. The names'; put 'are generated at macro invocation to avoid clashing with data columns. */'; put '%local state digest pair numtext normal i chars nums;'; put '%let state=%mf_getuniquename(prefix=_____state_);'; put '%let digest=%mf_getuniquename(prefix=_____digest_);'; put '%let pair=%mf_getuniquename(prefix=_____pair_);'; put '%let numtext=%mf_getuniquename(prefix=_____numtext_);'; put '%let normal=%mf_getuniquename(prefix=_____normal_);'; put '%let i=%mf_getuniquename(prefix=_____i_);'; put '%let chars=%mf_getuniquename(prefix=_____chars_);'; put '%let nums=%mf_getuniquename(prefix=_____nums_);'; put 'length &state $16'; put '&digest $16'; put '&pair $32'; put '&numtext $64'; put '&normal &i 8;'; put 'if _n_=1 then call missing(&state,&digest,&pair,&numtext,&normal,&i);'; put 'drop &state &digest &pair &numtext &normal &i;'; put '/* Versioned seed prevents confusion with other hashing schemes. */'; put '&state = md5(''DC HASH v2'');'; put '%if %length(&cvars)>0 %then %do;'; put 'array &chars{*} $ &cvars;'; put 'do &i = 1 to dim(&chars);'; put '/* Leading blanks are retained. */'; put '&digest = md5(trimn(&chars[&i]));'; put 'substr(&pair, 1, 16) = &state;'; put 'substr(&pair, 17, 16) = &digest;'; put '&state = md5(&pair);'; put 'end;'; put '%end;'; put '%if %length(&nvars)>0 %then %do;'; put 'array &nums{*} &nvars;'; put 'do &i = 1 to dim(&nums);'; put '/*'; put 'multiply-by-one for consistent cross-system precision.'; put 'Ignore null to protect SAS special missing values.'; put 'Cannot use IFN() as it evaluates both sides'; put '*/'; put 'if missing(&nums[&i]) then &normal = &nums[&i];'; put 'else &normal = &nums[&i] * 1;'; put '&numtext = put(&normal, binary64.);'; put '&digest = md5(trim(&numtext));'; put 'substr(&pair, 1, 16) = &state;'; put 'substr(&pair, 17, 16) = &digest;'; put '&state = md5(&pair);'; put 'end;'; put '%end;'; put '&md5_col = put(&state, $hex32.);'; put '%mend mp_rowhash;'; 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=33;'; 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 %length(&CLOSE_VARS)>0 and (&engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW or &engine_type=SASIOSNF)'; 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 hash_char_vars hash_num_vars ;'; 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 '/* Character variables are hashed separately from numerics so that the'; put 'iterative hash can be built with arrays rather than by concatenating'; put 'hundreds of 32-byte hex strings. */'; put 'select name into: hash_char_vars separated by '' '''; put 'from work.bitemp_cols'; put 'where type in (2,6)'; put 'and upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select name into: hash_num_vars separated by '' '''; put 'from work.bitemp_cols'; put 'where type not in (2,6)'; put 'and 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 &=hash_char_vars;'; put '%put &=hash_num_vars;'; 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___) or %index(%quote(&cols),_____) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___" or "_____".%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 '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&hash_num_vars'; put ')'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; 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 or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%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 '%let temp_table=%upcase(%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 in-db empty table with PK + MD5 only */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&temp_table'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; 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 '%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 '/* inherit remote length to handle byte expansion */'; put 'if 0 then set &base_lib..&temp_table(keep=&md5_col);'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; 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 hash_char_vars=&hash_char_vars;'; put '%put hash_num_vars=&hash_num_vars;'; put 'data work.bitemp1_current(drop=___TMP___NEW_FLG);'; put 'set work.bitemp0_base(drop=&md5_col);'; put 'if ___TMP___NEW_FLG=0;'; put 'length &md5_col $32;'; put '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&hash_num_vars'; put ')'; put 'run;'; 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 '/* For bitemporal we also include the business dates in the comparison hash.'; put 'The business dates are passed as prefix numerics so that both lookup and'; put 'update tables use exactly the same hashing order. */'; 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 '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&bus_from &bus_to &hash_num_vars'; put ')'; 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 '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&bus_from &bus_to &hash_num_vars'; put ')'; 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 or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%then %do;'; put '%let innertable=%upcase(%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 '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&innertable'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put 'exec (create table &innertable'; put '(like &baselib_schema.&base_dsn)'; put ') by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; 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 '%put Not using passthrough for *&engine_type* engine;'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; 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 meta_mapper('; put 'baseds=work.allmap /* base table to contain metamapping (two level) */'; put ', stageds=col_meta /* temp table to append to base*/'; put ', metaid=OMSOBJ:Column\A5HOSDWY.BF00LWQT'; put ', direction=REVERSE /* either REVERSE or FORWARDS */'; put ', level=0 /* system var - show level of nesting */'; put ', job= /* system var - avoid looping same source */'; put ', levelcheck=50 /* system var - avoid going too deep down the rabbit hole */'; put ', append=NO /* system var - when YES means appending within nested loop */'; put ');'; put '%if &level>&levelcheck %then %return;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%if &direction=REVERSE %then %do;'; put '%let start=Target;'; put '%let finish=Source;'; put '%end;'; put '%else %do;'; put '%let start=Source;'; put '%let finish=Target;'; put '%end;'; put '%if &append=NO %then %do;'; put 'proc datasets lib=work;'; put 'delete %scan(&baseds,2,.);'; put 'quit;'; put '%let index_statement=(index=(HASH/unique));'; put '%end;'; put '%else %let index_statement=;'; put 'data &stageds &index_statement ;'; put 'length HASH $32'; put 'jobname sourcetablename sourcecolname sourcecoluri'; put 'map_type map_transform targettablename targetcolname targetcoluri'; put 'uri targettableuri tfmuri sourcetableuri scuri tpuri tmpuri mturi $256'; put 'Derived_Rule $500 Marker_ID Name_ID N_Name LibRef engine sourcePublicType'; put 'targetPublicType $64;'; put 'keep HASH jobname sourcetablename sourcecolname sourcecoluri'; put 'map_type map_transform'; put 'targettablename targetcolname targetcoluri Derived_Rule level;'; put '/* proc transpose logic only */'; put 'length sourceshorttablename sourcemembertype sourcelocation'; put 'assoc assocuri name sturi foundrefuri foundfinishuri'; put 'targetshorttablename targetlocation targetmembertype trafoName $256'; put 'sourceshorttableuri sourceshortcoluri checkrdm targetshorttableuri'; put 'targetshortcoluri selected_direction $17'; put 'lturi _location $200;'; put 'call missing (of _all_);'; put '&start.coluri="&METAID";'; put 'level=&level;'; put '/* first get table associated with the column */'; put 'if metadata_getnasn(&start.coluri,''Table'',1,&start.tableuri)=0 then do;'; put 'putlog "ERR" "OR: Table not found";'; put 'stop;'; put 'end;'; put 'rc=metadata_getattr(&start.tableuri,"Name",&start.tablename);'; put 'rc=metadata_getattr(&start.coluri,"Name",&start.colname);'; put 'rc=metadata_getattr(&start.tableuri,''PublicType'',&start.PublicType);'; put 'if (metadata_getnasn(&start.tableuri, "TablePackage",1, tpuri)>0) then'; put 'do;'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&start.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&start.tablename'; put ');'; put 'end;'; put 'else if (&start.PublicType="ExternalFile") then do;'; put 'rc=metadata_getnasn(&start.tableuri, "OwningFile",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefs",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefLocations",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,''FileName'',&start.tablename);'; put 'end;'; put 'else &start.tablename = ''work. ''||trim(lowcase(&start.tablename));'; put '/* now loop the Source / TargetFeatureMaps */'; put 'tfm=1;'; put 'do while(metadata_getnasn(&start.coluri,"&start.FeatureMaps",tfm,tfmuri)>0);'; put 'call missing(derived_rule);'; put 'rc=metadata_getattr(tfmuri,''TransformRole'',map_type);'; put '/* get job and step name */'; put 'if (metadata_getnasn(tfmuri,''AssociatedClassifierMap'',1,tmpuri)<1) then'; put 'do;'; put 'rc=metadata_getnasn(tfmuri,"&finish.Transformations",1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''AssociatedClassifierMap'',1,tmpuri);'; put 'end ;'; put 'rc=metadata_getnasn(tmpuri,''Steps'',1,tmpuri);'; put 'rc=metadata_getattr(tmpuri,''Name'',map_transform);'; put 'rc=metadata_getnasn(tmpuri,''Activities'',1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''Jobs'',1,tmpuri);'; put 'rc=metadata_getattr(tmpuri,''Name'',jobname);'; put 'if Map_Type = ''DERIVED'' then do;'; put 'if(metadata_getnasn(tfmuri,"SourceCode",1, scuri)>0) then do;'; put '/* standard */'; put 'mturi=tfmuri;'; put 'end;'; put 'else do;'; put '/* some SQL joins store transform rules elsewhere */'; put 'rc=metadata_getnasn(tfmuri,"Feature&start.s",1, tmpuri);'; put 'if (metadata_getnasn(tmpuri,"Variables",1, tmpuri)>0)'; put 'then rc=metadata_getnasn(tmpuri,"OwningTransformation",1, mturi);'; put 'else rc=metadata_getnasn(tfmuri,"Transformation&start.s",1, mturi);'; put 'rc=metadata_getnasn(mturi,"SourceCode",1, scuri);'; put 'end;'; put 'rc=metadata_getattr(scuri,"StoredText",Derived_Rule);'; put 'Derived_Rule = compress(Derived_Rule,''0A''x);'; put '/* loop to generate derived rule (swap ref numbers for col descs) */'; put 'sv=1;'; put 'do while(metadata_getnasn(mturi,"SubstitutionVariables",sv,tmpuri)>0);'; put 'rc=metadata_getattr(tmpuri,"Marker",Marker_ID);'; put 'rc=metadata_getattr(tmpuri,"Name",Name_ID);'; put 'N_Name = compress(scan(Name_ID,2,''-''));'; put 'Derived_Rule=tranwrd('; put 'Derived_Rule,compress(Marker_ID),compress(N_Name)'; put ');'; put 'sv+1;'; put 'end;'; put 'end;'; put '/* get source col attributes */'; put 'fs=1;'; put 'do while(metadata_getnasn(tfmuri,"Feature&finish.s",fs,&finish.coluri)>0);'; put 'rc=metadata_getattr(&finish.coluri,''Name'',&finish.colname);'; put 'rc=metadata_getnasn(&finish.coluri,''Table'',1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put 'rc=metadata_getattr(&finish.tableuri,''PublicType'',&finish.PublicType);'; put 'if (metadata_getnasn(&finish.tableuri,"TablePackage",1,tpuri)>0) then'; put 'do;'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&finish.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&finish.tablename'; put ');'; put 'end;'; put 'else if (&finish.PublicType="ExternalFile") then do;'; put 'rc=metadata_getnasn(&finish.tableuri, "OwningFile",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefs",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefLocations",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,''FileName'',&finish.tablename);'; put 'end;'; put 'else &finish.tablename=compress(''work.''||lowcase(&finish.tablename));'; put '/* do a lookup to see if this record has been loaded before,'; put 'IF base table exists */'; put 'hash=put(md5('; put 'cats(jobname,sourcecoluri,map_type,map_transform,targetcoluri)'; put '),$hex32.);'; put '%if %sysfunc(exist(&baseds)) %then %do;'; put 'set &baseds(keep=hash) key=hash/unique;'; put 'if _iorc_ ne 0 then do;'; put '/* hash did not exist, hence this is a new record */'; put 'output;'; put '_error_=0;'; put 'end;'; put '%end;'; put '%else %do;'; put 'output;'; put '%end;'; put 'fs+1;'; put 'end;'; put 'tfm+1;'; put 'end;'; put '/* No finish URI found - so proceed to see if this is due to transpose */'; put 'if missing(&finish.coluri)'; put 'and (metadata_getnasn(&start.tableuri,"&start.ClassifierMaps",1,tmpuri)>0)'; put 'then do;'; put 'length trafoname $256;'; put 'call missing(trafoName);'; put 'rc=metadata_getattr(tmpuri,''Name'',trafoName);'; put '/* get &finsh.tablename and jobname */'; put 'rc=metadata_getnasn(tmpuri,"Classifier&finish.s",1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put '&finish.shorttablename=&finish.tablename;'; put 'rc=metadata_getnasn(tmpuri,''Steps'',1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''Activities'',1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''Jobs'',1,tmpuri);'; put 'rc=metadata_getattr(tmpuri,''Name'',jobname);'; put 'rc1=1;n1=1;'; put 'do while(rc1>0);'; put 'rc1=metadata_getnasl(&finish.tableuri,n1,assoc);'; put 'if (assoc="Columns") then do;'; put 'rc2=1;n2=1;'; put 'do while(rc2>0 and missing(foundfinishuri));'; put '/* Walk through all column associations: SpecSourceTransformations*/'; put 'rc2=metadata_getnasn(&finish.tableuri,trim(assoc),n2,assocuri);'; put '/* REVERSE */'; put '%if ("&direction." = "REVERSE") %then %do;'; put 'if metadata_getnasn(assocuri,"SpecSourceTransformations",1,sturi)>0'; put 'then do;'; put 'rc=metadata_getattr(sturi,"Name",name);'; put '/* SAS Transpose: varColumns */'; put 'if (name ="varColumns") then do;'; put 'foundfinishuri = "true"; /* do a while exit */'; put 'put "scource colname name=" name;'; put 'put "scource colname uri=" assocuri;'; put '&finish.coluri=assocuri;'; put '&finish.shortcoluri=substr('; put '&finish.coluri,find(&finish.coluri, ''\'')+1'; put ');'; put 'rc=metadata_getattr(&finish.coluri,''Name'',&finish.colname);'; put 'rc=metadata_getnasn(&finish.coluri,''Table'',1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put '&finish.shorttablename=&finish.tablename;'; put 'map_type = "ONETOONE";'; put '/* get MemberType */'; put 'rc=metadata_getattr('; put '&finish.tableuri,"MemberType",&finish.membertype'; put ');'; put '&finish.shorttableuri = substr('; put '&finish.tableuri,find(&finish.tableuri, ''\'')+1'; put ');'; put 'rc=metadata_getattr('; put '&finish.shorttableuri,"PublicType",&finish.publictype'; put ');'; put 'if metadata_getnasn('; put '&finish.shorttableuri,"TablePackage",1,tpuri'; put ')>0'; put 'then do;'; put '/* init LibRef to overwrite previous for &start!!! */'; put 'call missing (LibRef);'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&finish.shorttablename=&finish.tablename;'; put '&finish.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&finish.tablename'; put ');'; put 'end;'; put '/* get SAS Folder location of the table */'; put 'if &finish.publictype eq "Table" then do;'; put 'lturi=&finish.shorttableuri;'; put 'rc=metadata_getnasn(lturi,"Trees",1,lturi);'; put 'rc=metadata_getattr(lturi,"Name",&finish.location);'; put 'tree=1;'; put 'do while (tree>0);'; put 'tree=metadata_getnasn(lturi,"ParentTree",1,lturi);'; put 'if tree > 0 then do;'; put 'rc=metadata_getattr(lturi,"Name",_location);'; put '&finish.location=catx(''/'',_location,&finish.location);'; put 'end;'; put 'end;'; put '&finish.location = ''/''||&finish.location;'; put 'end;'; put 'map_transform = trafoName;'; put 'derived_rule = "Transpose vertical";'; put '/* do a lookup to see if this record has been loaded before,'; put 'IF base table exists */'; put 'hash=put(md5('; put 'cats(jobname,sourcecoluri,map_type,map_transform,targetcoluri)'; put '),$hex32.);'; put '%if %sysfunc(exist(&baseds)) %then %do;'; put 'set &baseds(keep=hash) key=hash/unique;'; put 'if _iorc_ ne 0 then do;'; put '/* hash did not exist, hence this is a new record */'; put 'output;'; put '_error_=0;'; put 'end;'; put '%end;'; put '%else %do;'; put 'output;'; put '%end;'; put 'end; /* (name = "_VALUE_COLUMN") */'; put 'end; /* (metadata_getnasn(assocuri2,"Spec&finish.xxx",1,sturi)>0) */'; put '%end; /* &direction = "REVERSE" */'; put '/* FORWARDS: if TargetFeatureMaps not available: -> target! */'; put '%if ("&direction." = "FORWARDS") %then %do;'; put 'if (metadata_getnasn(assocuri,"TargetFeatureMaps",1,sfuri)<0)'; put 'then do;'; put 'rc=metadata_getattr(assocuri,"Name",name);'; put 'if not missing(assocuri) then do;'; put 'put "target colname name=" name;'; put 'put "target colname uri=" assocuri;'; put '&finish.coluri=assocuri;'; put '&finish.shortcoluri=substr('; put '&finish.coluri,find(&finish.coluri, ''\'')+1'; put ');'; put 'rc=metadata_getattr(&finish.coluri,''Name'',&finish.colname);'; put 'rc=metadata_getnasn(&finish.coluri,''Table'',1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put '&finish.shorttablename=&finish.tablename;'; put 'map_type = "ONETOMANY";'; put '/* get MemberType */'; put 'rc=metadata_getattr('; put '&finish.tableuri,"MemberType",&finish.membertype'; put ');'; put '&finish.shorttableuri = substr('; put '&finish.tableuri,find(&finish.tableuri, ''\'')+1'; put ');'; put 'rc=metadata_getattr('; put '&finish.shorttableuri,"PublicType",&finish.publictype'; put ');'; put 'if metadata_getnasn('; put '&finish.shorttableuri,"TablePackage",1,tpuri'; put ')>0'; put 'then do;'; put '/* init LibRef to overwrite previous for &start!!! */'; put 'call missing (LibRef);'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&finish.shorttablename=&finish.tablename;'; put '&finish.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&finish.tablename'; put ');'; put 'end;'; put '/* get table''s SAS Folder location */'; put 'if &finish.publictype eq "Table" then do;'; put 'lturi=&finish.shorttableuri;'; put 'rc=metadata_getnasn(lturi,"Trees",1,lturi);'; put 'rc=metadata_getattr(lturi,"Name",&finish.location);'; put 'tree=1;'; put 'do while (tree>0);'; put 'tree=metadata_getnasn(lturi,"ParentTree",1,lturi);'; put 'if tree > 0 then do;'; put 'rc=metadata_getattr(lturi,"Name",_location);'; put '&finish.location=catx(''/'',_location,&finish.location);'; put 'end;'; put 'end;'; put '&finish.location = ''/''||&finish.location;'; put 'end;'; put 'map_transform = trafoName;'; put 'derived_rule = "Transpose horizontal";'; put '/* do a lookup to see if this record has been loaded before,'; put 'IF base table exists */'; put 'hash=put(md5('; put 'cats(jobname,sourcecoluri,map_type,map_transform,targetcoluri)'; put '),$hex32.);'; put '%if %sysfunc(exist(&baseds)) %then %do;'; put 'set &baseds(keep=hash) key=hash/unique;'; put 'if _iorc_ ne 0 then do;'; put '/* hash did not exist, hence this is a new record */'; put 'output;'; put '_error_=0;'; put 'end;'; put '%end;'; put '%else %do;'; put 'output;'; put '%end;'; put 'end;'; put 'end;'; put '%end; /* (&direction = "FORWARDS" */'; put 'call missing(assocuri);'; put 'n2+1;'; put 'end; /* while(rc1>0) */'; put 'end; /* (assoc="Columns") */'; put 'call missing(assoc);'; put 'n1+1;'; put 'end; /* while(rc1>0) */'; put 'end; /* missing(&finish.coluri) */'; put '/* ################# end mapping for Transpose flat ################# */'; put 'stop;'; put 'run;'; put 'proc append base=&baseds data=&stageds;'; put 'run;'; put 'data _null_;'; put 'set &stageds;'; put 'call execute(''%meta_mapper(metaid=''!!&finish.coluri'; put '!!",baseds=&baseds"'; put '!!",direction=&direction"'; put '!!",level=%eval(&level+1)"'; put '!!",levelcheck=&levelcheck"'; put '!!",job="!!jobname'; put '!!",append=YES)");'; put 'run;'; put '%mend meta_mapper;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief fetch the metadata and server as dotlang'; put 'Some nice ideas for formatting are available here:'; put 'https://renenyffenegger.ch/notes/tools/Graphviz/examples/index'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@li bitemporal_dataloader.sas'; put '@li meta_mapper.sas'; put '@version 9.4'; 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 column_id direction refresh;'; put '/* enable col id and direction to be passed as url params */'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%let max_depth=50;'; put '%put &=inds;'; put 'data _null_;'; put 'length max_depth $ 8;'; put 'set &inds;'; put 'call symputx(''column_id'',coluri);'; put 'call symputx(''direction'',direction);'; put 'call symputx(''refresh'',refresh);'; put 'if input(max_depth,8.)>0 then call symputx(''max_depth'',max_depth);'; put 'putlog (_all_)(=);'; put 'run;'; put '%put &=max_depth &=refresh;'; put 'data info;'; put 'length coluri colname taburi tabname liburi libref $256;'; put 'call missing(of _all_);'; put 'if metadata_getattr("&column_id","Name",colname)<0 then do;'; put 'putlog "Col &column_id not found";'; put 'call symputx(''syscc'',''1234'');'; put 'stop;'; put 'end;'; put 'rc=metadata_getnasn("&column_id","Table",1,taburi);'; put 'rc=metadata_getattr(taburi,"Name",tabname);'; put 'rc=metadata_getnasn(taburi,"TablePackage",1,liburi);'; put 'rc=metadata_getattr(liburi,"Libref",libref);'; put 'call symputx(''lib'',libref);'; put 'call symputx(''tab'',tabname);'; put 'call symputx(''col'',colname);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%macro launcher();'; put '/* check whether a lineage run already taken place */'; put 'proc sql noprint;'; put 'create table existing_data as'; put 'select * from &mpelib..mpe_lineage_cols'; put 'where col_id="&column_id"'; put 'and direction="%substr(&direction,1,1)";'; put '/* no data, so make some, and append it */'; put '%if &sqlobs=0 or &refresh=1 %then %do;'; put '%meta_mapper(metaid=&column_id'; put ', direction=&direction /* either REVERSE or FORWARDS */'; put ', baseds=work.allmap'; put ', levelcheck=%eval(&max_depth-1)'; put ')'; put 'data append;'; put 'length col_id $32 direction $1 modified_by $64;'; put 'retain col_id "&column_id";'; put 'retain direction "%substr(&direction,1,1)";'; put '%global modified_by modified_dttm;'; put '%let modified_dttm=%sysfunc(datetime());'; put 'retain modified_dttm &modified_dttm;'; put 'retain modified_by "%mf_getuser()";'; put '%let modified_by=%mf_getuser();'; put 'set allmap;'; put 'drop hash;'; put 'run;'; put 'proc sort data=append out=appendme nodupkey;'; put 'by col_id direction sourcecoluri targetcoluri map_type map_transform;'; put 'run;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_lineage_cols'; put ',append_dsn=appendme'; put ',PK=col_id direction sourcecoluri targetcoluri map_type map_transform'; put ',etlsource=&_program'; put ',loadtype=UPDATE'; put ',close_vars=col_id direction'; put ',dclib=&mpelib'; put ')'; put '%end;'; put '%else %do;'; put '/* data exists, so use it */'; put 'data work.allmap(drop=modified_by modified_dttm);'; put 'set existing_data(drop=col_id direction );'; put 'if _n_=1 then do;'; put 'call symputx(''modified_by'',modified_by,''g'');'; put 'call symputx(''modified_dttm'',modified_dttm,''g'');'; put 'end;'; put 'where level < &max_depth;'; put 'run;'; put '%end;'; put '%mend launcher;'; put '%launcher()'; put '/* generate graphviz */'; put 'filename tmp "%sysfunc(pathname(work))\GraphViz%sysfunc(datetime()).txt"'; put 'lrecl=10000 encoding=''utf-8'';'; put 'options noquotelenmax;'; put '%macro fcmpconditional();'; put '%if &sysver=9.3 and &sysscp=WIN %then %do;'; put '/* nothing - as the FCMP function causes an exception err in this case */'; put '%end;'; put '%else %do;'; put '/* prepare quick func to enable word wrapping of transformations */'; put 'options cmplib=work.funcs;'; put 'proc fcmp outlib=work.funcs.macrocore;'; put 'function wordwrap(str $,cols,splitchar $) $;'; put 'length outstr $32767 curstr $5000;'; put 'base=0;'; put 'put str=;'; put 'do i=1 to countw(str,'' '','' '');'; put 'curstr=scan(str,i,'' '');'; put 'outstr=trim(outstr)!!'' ''!!curstr;'; put 'base=base+length(curstr)+1;'; put 'if base>cols then do;'; put 'outstr=cats(outstr,splitchar);'; put 'base=0;'; put 'end;'; put 'end;'; put 'return (outstr);'; put 'endsub;'; put 'run;'; put '%end;'; put '%mend fcmpconditional;'; put '%fcmpconditional()'; put '/* prepare label with metadata */'; put 'proc sql;'; put 'create table jobs as select distinct jobname as job from work.allmap ;'; put 'create table cols as select distinct upcase(scan(cat,1,''.-'')) as tmplib'; put ',cats(calculated tmplib,''.'',upcase(scan(cat,2,''.''))) as tmptab'; put ',cats(calculated tmptab,''.'',upcase(col)) as col'; put 'from (select sourcetablename as cat, sourcecolname as col from work.allmap'; put 'union select targettablename as cat, targetcolname as col from work.allmap )'; put 'having findc(tmplib,''/\'')=0 and tmplib ne ''WORK'';'; put 'create table files as select distinct file'; put 'from (select sourcetablename as file from work.allmap'; put 'where findc(sourcetablename,''/\'')>0'; put 'union select targettablename as file from work.allmap'; put 'where findc(targettablename,''/\'')>0'; put ') ;'; put 'create table libs as select distinct tmplib as lib from cols;'; put 'create table tabs as select distinct tmptab as tab from cols;'; put 'data _null_;'; put 'file tmp;'; put 'put ''digraph G {'; put 'concentrate=true;'; put 'node [style=filled,shape=plain];'; put 'labelloc = "t";'; put ''';'; put 'label= "label=<'; put ''; put ''; put ''; put ''; put ''; put ''; put '
&direction Lineage for &col
Library:
&libGenerated by:&modified_by
Table:&tabGenerated on:'; put '%sysfunc(round(&modified_dttm,2),datetime19.)
>";'; put 'put label;'; put 'if "FORWARD"="&direction" then call symputx(''dirdesc'',''Impacted'');'; put 'else call symputx(''dirdesc'',''Source'');'; put '/* close out if there is no lineage */'; put 'if nobs=0 then put ''x [label="No lineage found" shape=Mdiamond]}'';'; put 'set work.allmap nobs=nobs;'; put 'stop;'; put 'run;'; put 'data graphviz1;'; put 'file tmp mod;'; put 'length line arrow $1000 stab ttab slib tlib $100 sbox tbox tooltip $500;'; put 'if _n_=1 then call missing(line, sbox, tbox, tooltip);'; put 'set work.allmap ;'; put 'sourceid=sourcecoluri;'; put 'targetid=targetcoluri;'; put 'if index(sourcetablename,'':'') then do;'; put 'slib='''';'; put 'stab=sourcetablename;'; put 'end;'; put 'else if map_transform=''File Reader'' then do;'; put 'stab=scan(sourcetablename,-1,''/\'');'; put 'slib=subpad(sourcetablename,1,length(sourcetablename)-length(stab));'; put 'end;'; put 'else do;'; put 'slib=scan(sourcetablename,1,''.'');'; put 'stab=scan(sourcetablename,2,''.'');'; put 'end;'; put 'if index(targettablename,'':'') then do;'; put 'tlib='''';'; put 'ttab=targettablename;'; put 'end;'; put 'else if map_transform=''File Reader'' then do;'; put 'ttab=scan(targettablename,-1,''/\'');'; put 'tlib=subpad(targettablename,1,length(targettablename)-length(ttab));'; put 'end;'; put 'else do;'; put 'tlib=scan(targettablename,1,''.'');'; put 'ttab=scan(targettablename,2,''.'');'; put 'end;'; put 'if trim(derived_rule) ne '''' then do;'; put 'derived_rule=tranwrd(derived_rule,''"'',''\"'');'; put '%macro quick();'; put '%if "&sysver"="9.3" and "&sysscp"="WIN" %then %do;'; put 'arrow=cats(''[color=Red, fontcolor=Red, penwidth="3", arrowsize="2",'''; put ',''label=">>'',map_transform,''<<\n'',derived_rule,''"]'');'; put '%end;'; put '%else %do;'; put 'arrow=cats(''[color=Red, fontcolor=Red, penwidth="3", arrowsize="2",'''; put ',''label=">>'',map_transform,''<<\n'',wordwrap(derived_rule,24,''\n''),''"]'');'; put '%end;'; put '%mend quick; %quick()'; put 'end;'; put 'else arrow=cats(''[ label="'',map_transform,''"]'');'; put 'source=quote(strip(sourceid));'; put 'target=quote(strip(targetid));'; put 'put '' '' source '' -> '' target arrow;'; put 'run;'; put 'data graphviz2 (keep=id tab lib col tooltip map_transform);'; put 'set graphviz1 (rename=(source=id stab=tab slib=lib sourcecolname=col ))'; put 'graphviz1 (rename=(target=id ttab=tab tlib=lib targetcolname=col ));'; put 'if upcase(lib)=:''WORK'' then tooltip=cats('',tooltip="Job:'',jobname,''"'');'; put 'else tooltip='''';'; put 'run;'; put 'proc sort data=graphviz2 out=graphviz3 noduprec; by _all_; run;'; put 'data _null_;'; put 'length shape $100 ;'; put 'set graphviz3 end=last;'; put 'file tmp mod;'; put 'tab=tranwrd(tab,''\'',''\\'');'; put 'tab=tranwrd(tab,''&'',''&'');'; put 'lib=tranwrd(lib,''&'',''&'');'; put 'if upcase(lib)=:''WORK'' then do;'; put 'lib=''WORK'';'; put 'put id ''[label=<
Table'' tab'; put '''
Column'' col'; put '''
> ,fillcolor=lightgrey, shape=" " '' tooltip '']'';'; put 'end;'; put 'else if map_transform=''File Reader'' then do;'; put 'put id ''[label="Location: '' lib ''\nFile:'' tab ''\nColumn: '' col'; put '''",shape=parallelogram, fillcolor="#00b300"'' tooltip '']'';'; put 'end;'; put 'else do;'; put 'engine=scan(lib,2,''-'');'; put 'lib=scan(lib,1,''-'');'; put 'if engine=''BASE'' then fillcolour=''lightyellow '';'; put 'else fillcolour=''lightblue'';'; put 'shape='' shape=cylinder, fillcolor= ''!!fillcolour;'; put 'put id ''[label=<
Library'' lib'; put '''
Table'' tab'; put '''
Column'' col'; put '''
> ,'' shape tooltip '']'';'; put 'end;'; put 'run;'; put 'data _null_;'; put 'file tmp mod;'; put '/* close out if records exist */'; put 'set work.allmap;'; put 'put ''}'';'; put 'stop;'; put 'run;'; put 'data flatdata;'; put 'length type $8 item $256;'; put 'keep type item;'; put 'set cols(in=cols) tabs(in=tabs) files(in=files) libs(in=libs) jobs(in=jobs);'; put 'if cols then do;'; put 'type=''Column'';'; put 'item=col;'; put 'end;'; put 'else if tabs then do;'; put 'type=''Table'';'; put 'item=tab;'; put 'end;'; put 'else if files then do;'; put 'type=''File'';'; put 'item=file;'; put 'end;'; put 'else if libs then do;'; put 'type=''Library'';'; put 'item=lib;'; put 'end;'; put 'else if jobs then do;'; put 'type=''Job'';'; put 'item=job;'; put 'end;'; put 'run;'; put 'data fromSAS;'; put 'infile tmp end=last;'; put 'file tmp;'; put 'input ;'; put 'string=_infile_;'; put 'put string;'; put 'run;'; put 'filename tmp clear;'; put '/* get list of IDs so frontend can make a clickable list */'; put 'proc sql;'; put 'create table ids as select distinct id from graphviz3;'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS,missing=STRING)'; put '%webout(OBJ,ids,dslabel=clickableIDS)'; put '%webout(OBJ,info)'; put '%webout(OBJ,flatdata)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=fetchtablelineage; 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief fetch Table Lineage for SAS 9'; put 'Some nice ideas for formatting are available here:'; put 'https://renenyffenegger.ch/notes/tools/Graphviz/examples/index'; put '

SAS Macros

'; 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 '%global table_id direction graphOrientation;'; put '/* enable table id and direction to be passed as url params */'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%put &=inds;'; put '%let max_depth=50;'; put 'data _null_;'; put 'length max_depth $ 8;'; put 'set &inds;'; put 'call symputx(''table_id'',table_id);'; put 'call symputx(''direction'',direction);'; put 'call symputx(''graphOrientation'',''LR'');'; put 'if max_depth>''0'' then call symputx(''max_depth'',max_depth);'; put 'putlog (_all_)(=);'; put 'run;'; put '%put &=max_depth;'; put '%mp_abort(iftrue= (&table_id=undefined)'; put ',mac=&_program'; put ',msg=%str(Table_id UNDEFINED provided from frontend)'; put ')'; put 'data work.info;'; put 'length tableid tablename liburi $64 libref $8;'; put 'drop rc;'; put 'tableid="&table_id";'; put 'call missing(liburi);'; put 'rc=metadata_getattr(tableid,"Name",tablename);'; put 'if metadata_getnasn(tableid,"TablePackage",1,liburi)>0 then do;'; put 'rc=metadata_getattr(liburi,"Libref",libref);'; put 'libref=upcase(libref);'; put 'end;'; put 'tablename=upcase(tablename);'; put 'if missing(libref) then libref=''nolib'';'; put 'call symputx(''libds'',cats(libref,''.'',tablename));'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%let src=%sysfunc(ifc(&direction=REVERSE,src,tgt));'; put '%let tgt=%sysfunc(ifc(&direction=REVERSE,tgt,src));'; put 'data work.sourcetable/view=work.sourcetable;'; put 'set &mpelib..MPE_LINEAGE_TABS;'; put 'where &dc_dttmtfmt. lt tx_to ;'; put 'drop tx_from tx_to;'; put 'run;'; put '%macro recursivejoin(iter=0'; put ',maxiter=&max_depth /* avoid infinite loop */'; put ');'; put '%if &iter=0 %then %do;'; put 'data work.baseds ;'; put 'retain level 0;'; put 'set work.sourcetable;'; put 'where &tgt.tableid="&table_id";'; put 'run;'; put '%let iter=1;'; put 'proc sql;'; put '%end;'; put '%else %if &iter>&maxiter %then %return;'; put 'create table work.appendds as'; put 'select distinct &iter as level'; put ',b.*'; put 'from work.baseds a'; put 'left join work.sourcetable b'; put 'on a.&src.tableid=b.&tgt.tableid'; put 'where a.level=%eval(&iter.-1)'; put 'and b.&src.tableid is not null'; put 'and a.&src.tableid is not null'; put 'and a.&src.tableid ne ''N/A'';'; put '%let obs=&sqlobs;'; put 'insert into work.baseds select * from work.appendds;'; put '%if &obs %then %do;'; put '%recursivejoin(iter=%eval(&iter.+1) )'; put '%end;'; put '%mend recursivejoin;'; put '%recursivejoin()'; put 'proc sql;'; put 'create table work.final as'; put 'select distinct *'; put 'from work.baseds(drop=level)'; put 'where jobid is not null;'; put '/* generate graphviz */'; put 'filename tmp "%sysfunc(pathname(work))\GraphViz%sysfunc(datetime()).txt"'; put 'lrecl=10000 encoding=''utf-8'';'; put '/* prepare label with metadata */'; put 'proc sql;'; put 'create table work.jobs as'; put 'select distinct jobid'; put ', jobname'; put ',quote(cats(jobid))||'' [label=''||quote(cats(jobname))||''];'' as line'; put 'from work.final;'; put 'create table work.tables as'; put 'select distinct &src.tableid as tableid'; put ',&src.tablename as tablename'; put ',&src.libref as libref'; put 'from work.final'; put 'where &src.tableid ne ''N/A'''; put 'union select'; put '&tgt.tableid as tableid'; put ',&tgt.tablename as tablename'; put ',&tgt.libref as libref'; put 'from work.final'; put 'where &tgt.tableid ne ''N/A'''; put 'order by libref, tablename;'; put 'create table idlookup as'; put 'select tableid as metaid'; put ',''TABLE'' as metatype'; put ',cats(libref,''.'',tablename) as metaname'; put 'from work.tables'; put 'union'; put 'select jobid as metaid'; put ',''JOB'' as metatype'; put ',jobname as metaname'; put 'from work.jobs'; put 'order by metaid;'; put 'data CRAYONS;'; put 'length attribute value $8;'; put 'infile datalines4 dsd;'; put 'input attribute value;'; put 'call symput(cats(''col'',_n_),quote(trim(value)));'; put 'datalines;'; put 'red,#e6194b'; put 'green,#3cb44b'; put 'blue,#4363d8'; put 'orange,#f58231'; put 'purple,#911eb4'; put 'cyan,#46f0f0'; put 'magenta,#f032e6'; put 'lime,#bcf60c'; put 'pink,#fabebe'; put 'teal,#008080'; put 'lavender,#e6beff'; put 'brown,#9a6324'; put 'beige,#fffac8'; put 'maroon,#800000'; put 'mint,#aaffc3'; put 'olive,#808000'; put 'apricot,#ffd8b1'; put 'navy,#000075'; put 'gray,#808080'; put 'black,#00000'; put 'yellow,#ffe119'; put 'white,#ffffff'; put 'bazaar,#98777b'; put 'beaver,#9f8170'; put 'bisque,#ffe4c4'; put 'blond,#faf0be'; put 'blush,#de5d83'; put 'bole,#79443b'; put 'bone,#e3dac9'; put 'brass,#b5a642'; put 'bronze,#cd7f32'; put 'bubbles,#e7feff'; put 'buff,#f0dc82'; put 'camel,#c19a6b'; put 'canary,#ffff99'; put 'capri,#00bfff'; put 'cardinal,#c41e3a'; put 'carmine,#ff0040'; put 'celadon,#ace1af'; put 'celeste,#b2ffff'; put 'cerise,#de3163'; put 'cerulean,#007ba7'; put 'cherry,#de3163'; put 'chestnut,#cd5c5c'; put 'cinnabar,#e34234'; put 'cinnamon,#d2691e'; put 'citrine,#e4d00a'; put 'cobalt,#0047ab'; put 'coffee,#6f4e37'; put 'copper,#b87333'; put 'coral,#ff7f50'; put 'corn,#fbec5d'; put 'cornsilk,#fff8dc'; put 'cream,#fffdd0'; put 'crimson,#dc143c'; put 'daffodil,#ffff31'; put 'denim,#1560bd'; put 'desert,#c19a6b'; put 'drab,#967117'; put 'ecru,#c2b280'; put 'eggplant,#614051'; put 'eggshell,#f0ead6'; put 'emerald,#50c878'; put 'fallow,#c19a6b'; put 'fawn,#e5aa70'; put 'fern,#71bc78'; put 'flame,#e25822'; put 'flax,#eedc82'; put 'folly,#ff004f'; put 'fuchsia,#ff00ff'; put 'fulvous,#e48400'; put 'gamboge,#e49b0f'; put 'ginger,#b06500'; put 'glaucous,#6082b6'; put 'glitter,#e6e8fa'; put 'gold,#ffd700'; put 'grullo,#a99a86'; put 'icterine,#fcf75e'; put 'indigo,#4b0082'; put 'iris,#5a4fcf'; put 'ivory,#fffff0'; put 'jade,#00a86b'; put ';;;;'; put 'run;'; put 'proc sort data=work.tables out=work.libs nodupkey;'; put 'by libref;'; put 'run;'; put 'data work.alllibs;'; put 'set work.libs end=last;'; put 'length line $1000. ;'; put 'crayon=symget(cats(''col'',_n_));'; put 'call symputx(libref,crayon);'; put 'if _n_=1 then do;'; put 'line=''subgraph cluster_libs { label="Libraries";'';output;'; put 'end;'; put 'line=cats(libref)!!'' [label=''||quote(cats(libref))||''; style="filled"; color='''; put '||cats(crayon)||'', shape = Mrecord, fontcolor=white]'';output;'; put 'if last then do;'; put 'line=''}'';output;'; put 'end;'; put 'run;'; put 'data alltables;'; put 'length line $1000. ;'; put 'set work.tables;'; put 'crayon=symget(libref);'; put 'line=quote(cats(tableid))||'' [label="''||cats(tablename)'; put '!!''", color=''!!cats(crayon)'; put '!!'', shape=cylinder,style=filled,fontcolor=white];'';'; put 'output;'; put 'run;'; put 'proc sort'; put 'data=final(keep=&src.tableid jobid &src.libref) out=&src.relations nodupkey;'; put 'by &src.tableid jobid;'; put 'proc sort'; put 'data=final(keep=&tgt.tableid jobid &tgt.libref) out=&tgt.relations nodupkey;'; put 'by jobid &tgt.tableid;'; put 'run;'; put 'data srcrelations;'; put 'set srcrelations;'; put 'length line $1000;'; put 'where srctableid ne ''N/A'';'; put 'line=cats('; put '''"'',cats(srctableid),''" -> "'',jobid,''" [color='',symget(srclibref),''];'''; put ');'; put 'data tgtrelations;'; put 'set tgtrelations;'; put 'where tgttableid ne ''N/A'';'; put 'length line $1000;'; put 'line=cats('; put '''"'',cats(jobid),''" -> "'',tgttableid,''" [color='',symget(tgtlibref),''];'''; put ');'; put 'run;'; put 'data finalfinal;'; put 'set work.alllibs(keep=line) work.alltables (keep=line) work.jobs(keep=line)'; put 'work.&src.relations(keep=line) work.&tgt.relations(keep=line) end=last;'; put 'if _N_ = 1 then do;'; put 'firstline=line;'; put 'line=''strict digraph "''!!"&libds"!!''" {''; output;'; put 'line="rankdir=&graphOrientation; nodesep=0.5; node [shape = octagon];";output;'; put 'line=firstline;'; put 'end;'; put 'output;'; put 'if last then do;'; put 'line=''}'';'; put 'output;'; put 'end;'; put 'drop firstline;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,finalfinal)'; put '%webout(OBJ,info)'; put '%webout(OBJ,final,dslabel=flatdata)'; put '%webout(OBJ,idlookup)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getmetacols; 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getcols('; put 'tableuri='; put ',outds=work.mm_getcols'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'keep col: SAS:;'; put 'length assoc uri coluri colname coldesc SASColumnType SASFormat SASInformat'; put 'SASPrecision SASColumnLength $256;'; put 'call missing (of _all_);'; put 'uri=symget(''tableuri'');'; put 'n=1;'; put 'do while (metadata_getnasn(uri,''Columns'',n,coluri)>0);'; put 'rc3=metadata_getattr(coluri,"Name",colname);'; put 'rc3=metadata_getattr(coluri,"Desc",coldesc);'; put 'rc4=metadata_getattr(coluri,"SASColumnType",SASColumnType);'; put 'rc5=metadata_getattr(coluri,"SASFormat",SASFormat);'; put 'rc6=metadata_getattr(coluri,"SASInformat",SASInformat);'; put 'rc7=metadata_getattr(coluri,"SASPrecision",SASPrecision);'; put 'rc8=metadata_getattr(coluri,"SASColumnLength",SASColumnLength);'; put 'output;'; put 'call missing(colname,coldesc,SASColumnType,SASFormat,SASInformat'; put ',SASPrecision,SASColumnLength);'; put 'n+1;'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by colname;'; put 'run;'; put '%mend mm_getcols;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getmetacols.sas'; put '@brief List the cols as defined in metadata'; put '@details Provide a table uri and get list of columns'; put '

SAS Macros

'; put '@li mm_getcols.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 '%global tableuri;'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%put &=inds;'; put 'data _null_;'; put 'set &inds;'; put 'call symputx(''tableuri'',scan(tableuri,-1,''\''));'; put 'run;'; put '%put &=tableuri;'; put '/* load parameters */'; put '%mm_getcols(tableuri=&tableuri,outds=metacols)'; put 'data out;'; put 'set metacols;'; put 'keep col:;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,out,dslabel=metacols)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getmetatables; 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_gettables('; put 'uri='; put ',outds=work.mm_gettables'; put ',getauth=YES'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'length uri serveruri conn_uri domainuri libname ServerContext AuthDomain'; put 'path_schema usingpkguri type tableuri $256 id $17'; put 'libdesc $200 libref engine $8 IsDBMSLibname IsPreassigned $1'; put 'tablename $50 /* metadata table names can be longer than $32 */'; put ';'; put 'keep libname libdesc libref engine ServerContext path_schema AuthDomain'; put 'tableuri tablename IsPreassigned IsDBMSLibname id;'; put 'call missing (of _all_);'; put 'uri=symget(''uri'');'; put 'rc= metadata_getattr(uri, "Name", libname);'; put 'if rc <0 then do;'; put 'put ''The library is not defined in this metadata repository.'';'; put 'stop;'; put 'end;'; put 'rc= metadata_getattr(uri, "Desc", libdesc);'; put 'rc= metadata_getattr(uri, "Libref", libref);'; put 'rc= metadata_getattr(uri, "Engine", engine);'; put 'rc= metadata_getattr(uri, "IsDBMSLibname", IsDBMSLibname);'; put 'rc= metadata_getattr(uri, "IsPreassigned", IsPreassigned);'; put 'rc= metadata_getattr(uri, "Id", Id);'; put '/*** Get associated ServerContext ***/'; put 'rc= metadata_getnasn(uri, "DeployedComponents", 1, serveruri);'; put 'if rc > 0 then rc2= metadata_getattr(serveruri, "Name", ServerContext);'; put 'else ServerContext='''';'; put '/*** If the library is a DBMS library, get the Authentication Domain'; put 'associated with the DBMS connection credentials ***/'; put 'if IsDBMSLibname="1" and "&getauth"=''YES'' then do;'; put 'rc= metadata_getnasn(uri, "LibraryConnection", 1, conn_uri);'; put 'if rc>0 then do;'; put 'rc2= metadata_getnasn(conn_uri, "Domain", 1, domainuri);'; put 'if rc2>0 then rc3= metadata_getattr(domainuri, "Name", AuthDomain);'; put 'end;'; put 'end;'; put '/*** Get the path/database schema for this library ***/'; put 'rc=metadata_getnasn(uri, "UsingPackages", 1, usingpkguri);'; put 'if rc>0 then do;'; put 'rc=metadata_resolve(usingpkguri,type,id);'; put 'if type=''Directory'' then'; put 'rc=metadata_getattr(usingpkguri, "DirectoryName", path_schema);'; put 'else if type=''DatabaseSchema'' then'; put 'rc=metadata_getattr(usingpkguri, "Name", path_schema);'; put 'else path_schema="unknown";'; put 'end;'; put '/*** Get the tables associated with this library ***/'; put '/*** If DBMS, tables are associated with DatabaseSchema ***/'; put 'if type=''DatabaseSchema'' then do;'; put 't=1;'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'else if type in (''Directory'',''SASLibrary'') then do;'; put 't=1;'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by tablename tableuri;'; put 'run;'; put '%mend mm_gettables;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getmetatables.sas'; put '@brief List the tables as defined in metadata'; put '@details Provide a library uri and get list of tables'; put '

SAS Macros

'; put '@li mm_gettables.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 '%global liburi;'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%put &=inds;'; put 'data _null_;'; put 'set &inds;'; put 'call symputx(''liburi'',liburi);'; put 'run;'; put '/* load parameters */'; put '%mm_gettables(uri=&liburi,outds=metatables,getauth=NO)'; put 'data out;'; put 'set metatables;'; put 'keep table:;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,metatables)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/metanav; %let service=metadetails; 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getdetails(uri'; put ',outattrs=work.attributes'; put ',outassocs=work.associations'; put ',sortoptions='; put ')/*/STORE SOURCE*/;'; put 'data &outassocs;'; put 'keep assoc assocuri name;'; put 'length assoc assocuri name $256;'; put 'call missing(of _all_);'; put 'rc1=1;n1=1;'; put 'do while(rc1>0);'; put '/* Walk through all possible associations of this object. */'; put 'rc1=metadata_getnasl("&uri",n1,assoc);'; put 'rc2=1;n2=1;'; put 'do while(rc2>0);'; put '/* Walk through all the associations on this machine object. */'; put 'rc2=metadata_getnasn("&uri",trim(assoc),n2,assocuri);'; put 'if (rc2>0) then do;'; put 'rc3=metadata_getattr(assocuri,"Name",name);'; put 'output;'; put 'end;'; put 'call missing(name,assocuri);'; put 'n2+1;'; put 'end;'; put 'n1+1;'; put 'end;'; put 'run;'; put 'proc sort &sortoptions;'; put 'by assoc name;'; put 'run;'; put 'data &outattrs;'; put 'keep type name value;'; put 'length type $4 name $256 value $32767;'; put 'rc1=1;n1=1;type=''Prop'';name='''';value='''';'; put 'do while(rc1>0);'; put 'rc1=metadata_getnprp("&uri",n1,name,value);'; put 'if rc1>0 then output;'; put 'n1+1;'; put 'end;'; put 'rc1=1;n1=1;type=''Attr'';'; put 'do while(rc1>0);'; put 'rc1=metadata_getnatr("&uri",n1,name,value);'; put 'if rc1>0 then output;'; put 'n1+1;'; put 'end;'; put 'run;'; put 'proc sort &sortoptions;'; put 'by type name;'; put 'run;'; put '%mend mm_getdetails;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metadetails.sas'; put '@brief Retrieves metadata attributes and associations for a particular object'; put '@details'; put '

SAS Macros

'; put '@li mm_getdetails.sas'; put '@li mpe_getvars.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 '%mpe_getvars(SASControlTable, SASControlTable)'; put '%mm_getdetails(&objecturi'; put ',outattrs=work.attributes'; put ',outassocs=work.associations'; put ',sortoptions=SORTSEQ=LINGUISTIC'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,attributes, missing=STRING)'; put '%webout(OBJ,associations)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=metaobjects; 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getobjects('; put 'type=SASLibrary'; put ',outds=work.mm_getobjects'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"$METAREPOSITORY'; put '&typeSAS'; put '0"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/&type";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/&type/@Id";'; put 'put "characterstring200";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/&type/@Name";'; put 'put "characterstring200";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASObjects out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getobjects;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metaobjects.sas'; put '@brief Retrieves list of objects for a particular metadata type'; put '@details'; put '

SAS Macros

'; put '@li mm_getobjects.sas'; put '@li mpe_getvars.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 '%mpe_getvars(SASControlTable, SASControlTable)'; put 'options metarepository=&repo;'; put '%mm_getobjects('; put 'type=&metatype'; put ',outds=work.objects'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,objects,missing=STRING)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=metarepos; 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metarepos.sas'; put '@brief Retrieves list of metadata types'; put '@details'; put '

SAS Macros

'; put '@li mm_getrepos.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 '%mm_getrepos(outds=work.repos)'; put 'data outrepos;'; put 'set repos;'; put 'if repositorytype in (''CUSTOM'',''FOUNDATION'');'; put 'keep id name description;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,outrepos)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=metatypes; 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_gettypes('; put 'outds=work.mm_gettypes'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put ''; put 'SAS'; put ''; put '2048'; put ''; put ''; put '$METAREPOSITORY'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put ''//GetTypes/Types/Type'';'; put 'put ''64'';'; put 'put ''//GetTypes/Types/Type/@Id'';'; put 'put ''256'';'; put 'put ''//GetTypes/Types/Type/@Desc'';'; put 'put '''';'; put 'put ''//GetTypes/Types/Type/@HasSubtypes'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.sastypes out=&outds;'; put 'by id;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_gettypes;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metatypes.sas'; put '@brief Retrieves list of metadata types'; put '@details'; put '

SAS Macros

'; put '@li mm_gettypes.sas'; 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 '%mm_gettypes(outds=work.types)'; put '%webout(OPEN)'; put '%webout(OBJ,types)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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_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=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=ISNAME %then %do;'; put '/* match a valid SAS name (V7 rules) */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISNAME";'; 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=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 SAS format*/'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^(?:[_a-z\$]\w{0,31}|[0-9]+)\.[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 '%macro mpe_validatecol(incol,rule,outcol);'; put '%if &rule=LIBDS %then %do;'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename(prefix=cat);'; put '&tempcol=strip(&incol);'; put '/* permit the format-catalog form: LIBREF.CATALOGNAME-FC, exactly */'; put 'if length(&tempcol)>3'; put 'and upcase(substr(&tempcol,length(&tempcol)-2,3))=''-FC'''; put 'then &tempcol=substr(&tempcol,1,length(&tempcol)-3);'; put '%mp_validatecol(&tempcol,LIBDS,&outcol)'; put 'drop &tempcol;'; put '%end;'; put '%else %mp_validatecol(&incol,&rule,&outcol);'; put '%mend mpe_validatecol;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/**'; put '* Validate inputs before they reach executable code. base_table is'; put '* interpolated into a SQL where clause (and callers may pass raw request'; put '* input), so it must be a well-formed LIBREF.DATASET (or the'; put '* LIBREF.CATALOGNAME-FC form of a format catalog) and access_level must'; put '* be one of the known levels - anything else aborts before the query is'; put '* built. Values are read with symget (never re-resolved) and scanned in'; put '* a data step so no macro content in the input can execute.'; put '*/'; put '%local is_libds is_level;'; put '%let is_libds=0;'; put '%let is_level=0;'; put 'data _null_;'; put 'length _bt $64 _lvl $16;'; put '_bt=symget(''base_table'');'; put '_lvl=upcase(symget(''access_level''));'; put '%mpe_validatecol(_bt,LIBDS,is_libds)'; put 'if is_libds=0 then do;'; put 'call symputx(''is_libds'',0,''l'');'; put 'putlog ''ERR'' ''OR: Invalid base_table:'' _bt;'; put 'stop;'; put 'end;'; put 'if _lvl not in (''EDIT'',''APPROVE'',''VIEW'',''SIGNOFF'',''AUDIT'') then do;'; put 'call symputx(''is_level'',0,''l'');'; put 'putlog ''ERR'' ''OR: Invalid access_level:'' _lvl;'; put 'stop;'; put 'end;'; put '/* escape any embedded quotes so the value cannot break out of the'; put '* double-quoted SQL literals below (defence in depth - the LIBDS'; put '* check above already rejects quotes) */'; put '_bt=tranwrd(_bt,''"'','''');'; put 'call symputx(''base_table'',_bt,''l'');'; put 'call symputx(''access_level'',_lvl,''l'');'; put 'call symputx(''is_libds'',is_libds,''l'');'; put 'call symputx(''is_level'',1,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue=(&is_libds ne 1)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Invalid base_table)'; put ')'; put '%mp_abort('; put 'iftrue=(&is_level ne 1)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Invalid access_level)'; 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 '%local libds;'; put 'proc sql noprint;'; put 'select upcase(cats(base_lib,''.'',base_ds)) into: libds'; put 'from &dc_libref..mpe_submit'; put 'where TABLE_ID="&load_ref";'; put '%local base_lib base_ds;'; put '%let base_lib=%scan(&libds,1,.);'; put '%let base_ds=%scan(&libds,2,.);'; put '/**'; put '* check if there is actually a version to restore'; put '*/'; put '%local audtab;'; put 'proc sql noprint;'; put 'select coalescec(audit_libds,"&dc_libref..MPE_AUDIT") into: audtab trimmed'; put 'from &dc_libref..MPE_TABLES'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";'; put '%if "&audtab"="0" %then %do;'; put '%let &outresult=NO;'; put '%let &outreason= &libds has no audit table configured;'; put '%return;'; put '%end;'; put '%local chk;'; put '%let chk=0;'; put 'proc sql noprint;'; put 'select count(*) into: chk from &audtab'; put 'where load_ref="&load_ref";'; put '%if &chk=0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=No entry for &load_ref in &audtab;'; 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 &outresult=YES;'; put '%let &outreason=IS ADMIN;'; put '%return;'; put '%end;'; put '/* check if user has basic access */'; 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 &outresult=NO;'; put '%let &outreason=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 &outresult=NO;'; put '%let &outreason=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 &outresult=NO;'; put '%let &outreason=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 &outresult=YES;'; put '%let &outreason=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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=ISNAME %then %do;'; put '/* match a valid SAS name (V7 rules) */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISNAME";'; 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=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 SAS format*/'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^(?:[_a-z\$]\w{0,31}|[0-9]+)\.[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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 mp_abort.sas'; put '@li mp_validatecol.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 '* The libds is read from the IWANT input table. Reading it with'; put '* mf_getvalue would re-resolve any macro content in the value, so it is'; put '* read with symget in a data step and validated (LIBREF.DATASET) before'; put '* it is used in proc contents.'; put '*/'; put '%let is_libds=0;'; put 'data _null_;'; put 'length _libds $64;'; put 'set work.iwant;'; put '_libds=libds;'; put '%mp_validatecol(_libds,LIBDS,is_libds)'; put 'if is_libds=0 then putlog ''ERR'' ''OR: Invalid libds:'' _libds;'; put 'call symputx(''is_libds'',is_libds,''l'');'; put 'if is_libds=1 then call symputx(''ds'',upcase(_libds),''l'');'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&is_libds ne 1)'; put ',mac=&_program..sas'; put ',msg=%str(Invalid libds)'; put ')'; 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=''C'';'; 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=''N'';'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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_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=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=ISNAME %then %do;'; put '/* match a valid SAS name (V7 rules) */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISNAME";'; 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=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 SAS format*/'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^(?:[_a-z\$]\w{0,31}|[0-9]+)\.[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 '%macro mpe_validatecol(incol,rule,outcol);'; put '%if &rule=LIBDS %then %do;'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename(prefix=cat);'; put '&tempcol=strip(&incol);'; put '/* permit the format-catalog form: LIBREF.CATALOGNAME-FC, exactly */'; put 'if length(&tempcol)>3'; put 'and upcase(substr(&tempcol,length(&tempcol)-2,3))=''-FC'''; put 'then &tempcol=substr(&tempcol,1,length(&tempcol)-3);'; put '%mp_validatecol(&tempcol,LIBDS,&outcol)'; put 'drop &tempcol;'; put '%end;'; put '%else %mp_validatecol(&incol,&rule,&outcol);'; put '%mend mpe_validatecol;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_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 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_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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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_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 '@li mp_validatecol.sas'; put '@li mpe_validatecol.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 '/**'; put '* libds and col are request inputs that flow into executable positions'; put '* (set &libds, proc sql select &col2). They are read from the IWANT'; put '* table with symget in a data step (never re-resolved) and validated'; put '* here before use - mf_getvalue would re-resolve any macro content in'; put '* the value before this code ran.'; put '*/'; put '%let libds=;'; put '%let col2=;'; put '%let is_libds=0;'; put '%let is_col=0;'; put 'data _null_;'; put 'length _libds $64 _col $32;'; put 'set work.iwant;'; put '_libds=libds;'; put '_col=col;'; put '%mpe_validatecol(_libds,LIBDS,is_libds)'; put '%mp_validatecol(_col,ISNAME,is_col)'; put 'if is_libds=0 then putlog ''ERR'' ''OR: Invalid libds:'' _libds;'; put 'if is_col=0 then putlog ''ERR'' ''OR: Invalid col:'' _col;'; put 'call symputx(''is_libds'',is_libds,''l'');'; put 'call symputx(''is_col'',is_col,''l'');'; put 'if is_libds=1 then call symputx(''libds'',upcase(_libds),''l'');'; put 'if is_col=1 then call symputx(''col2'',upcase(_col),''l'');'; put 'stop;'; put 'run;'; put '%let is_fmt=0;'; put '%let startrow=1;'; put '%let rows=4000;'; put '%mp_abort(iftrue= (%mf_verifymacvars(libds col2)=0)'; put ',mac=&_program..sas'; put ',msg=%str(Missing inputs from iwant)'; put ')'; put '%mp_abort(iftrue= (&is_libds ne 1)'; put ',mac=&_program..sas'; put ',msg=%str(Invalid libds)'; put ')'; put '%mp_abort(iftrue= (&is_col ne 1)'; put ',mac=&_program..sas'; put ',msg=%str(Invalid col)'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_ds2ddl(libref,ds,fref=getddl,flavour=SAS,showlog=YES,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 '%local constraints_used;'; put '%macro addConst();'; 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_ds2ddl;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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_ds2ddl.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_ds2ddl(&libref,&ds,flavour=&flavour, fref=tmp, applydttm=YES, showlog=NO)'; put '%mp_streamfile(contenttype=TEXT'; put ',inloc=%str(&tmploc)'; put ',outname=&libref._&ds..ddl'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getgroups(outds=mm_getlibs);'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getgroups(outds=&outds,repo=foundation)'; put '%do x=1 %to &repocnt;'; put '%mm_getgroups(outds=&outds.a, repo=&&repo&x)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'proc sort data=&outds noduprec;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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_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=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=ISNAME %then %do;'; put '/* match a valid SAS name (V7 rules) */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISNAME";'; 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=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 SAS format*/'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^(?:[_a-z\$]\w{0,31}|[0-9]+)\.[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 '%macro mpe_validatecol(incol,rule,outcol);'; put '%if &rule=LIBDS %then %do;'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename(prefix=cat);'; put '&tempcol=strip(&incol);'; put '/* permit the format-catalog form: LIBREF.CATALOGNAME-FC, exactly */'; put 'if length(&tempcol)>3'; put 'and upcase(substr(&tempcol,length(&tempcol)-2,3))=''-FC'''; put 'then &tempcol=substr(&tempcol,1,length(&tempcol)-3);'; put '%mp_validatecol(&tempcol,LIBDS,&outcol)'; put 'drop &tempcol;'; put '%end;'; put '%else %mp_validatecol(&incol,&rule,&outcol);'; put '%mend mpe_validatecol;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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_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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; 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_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 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 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=YES'; 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_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_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()'; 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 created with the smaller length...'; put '**/'; put 'else if vlen<8 then header=cats(varnm,'':best'',vlen,''.'');'; put 'else header=cats(varnm,'':best32.'');'; 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 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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_getuser.sas'; put '@li mf_existfeature.sas'; put '@li dc_assignlib.sas'; put '@li mp_abort.sas'; put '@li mp_binarycopy.sas'; put '@li mp_cntlout.sas'; put '@li mp_ds2cards.sas'; put '@li mp_ds2csv.sas'; put '@li mp_streamfile.sas'; put '@li mp_validatecol.sas'; put '@li mpe_validatecol.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 '/**'; put '* Validate inputs before they reach executable code. table is used as a'; put '* dataset reference, in the output file path, and in the download filename,'; put '* so it must be a well-formed LIBREF.DATASET (the trailing -FC catalog'; put '* suffix is permitted); filter must be an integer. Values are read with'; put '* symget (never re-resolved) and validated in a data step so no macro'; put '* content in the input can execute.'; put '*/'; put '%let is_libds=0;'; put '%let is_int=0;'; put '%let is_type=0;'; put 'data _null_;'; put 'length _table $64 _filter $16 _type $16;'; put '_type=upcase(coalescec(symget(''type''),''''));'; put '_table=coalescec(symget(''table''),'''');'; put '_filter=coalescec(symget(''filter''),''0'');'; put 'if missing(_table) then do;'; put 'putlog ''ERR'' ''OR: Missing table'';'; put 'stop;'; put 'end;'; put '%mpe_validatecol(_table,LIBDS,is_libds)'; put '/* an absent filter is a valid, unfiltered download */'; put 'if missing(_filter) then _filter=''0'';'; put '%mp_validatecol(_filter,ISINT,is_int)'; put '/* type is validated against a fixed list of download formats */'; put 'length _types_ok 8;'; put '_types_ok=0;'; put 'if _type in (''SAS'',''CSV'',''EXCEL'',''MARKDOWN'',''WEBCSV'',''WEBTAB'')'; put 'then _types_ok=1;'; put 'else putlog ''ERR'' ''OR: Invalid type:'' _type;'; put 'if is_libds=0 then putlog ''ERR'' ''OR: Invalid table:'' _table;'; put 'if is_int=0 then putlog ''ERR'' ''OR: Invalid filter:'' _filter;'; put 'call symputx(''is_libds'',is_libds,''l'');'; put 'call symputx(''is_int'',is_int,''l'');'; put 'call symputx(''is_type'',_types_ok,''l'');'; put 'call symputx(''filter'',_filter,''l'');'; put 'if is_libds=1 then call symputx(''table'',upcase(_table),''l'');'; put 'if _types_ok=1 then call symputx(''type'',_type,''l'');'; put 'run;'; put '%mp_abort(iftrue= (&is_libds ne 1)'; put ',mac=&_program..sas'; put ',msg=%str(Invalid table)'; put ')'; put '%mp_abort(iftrue= (&is_int ne 1)'; put ',mac=&_program..sas'; put ',msg=%str(Invalid filter)'; put ')'; put '%mp_abort(iftrue= (&is_type ne 1)'; put ',mac=&_program..sas'; put ',msg=%str(Invalid type)'; 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 '/* cannot use PROC EXPORT as we need to wrap all char values in quotes */'; put '%mp_ds2csv(work.staged,outfile="&outfile",headerformat=NAME)'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_getuniquelibref(prefix=mc);'; put '%local x maxtries;'; 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_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; 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 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 ',AUDITFOLDER=0'; 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 '%mp_abort('; put 'iftrue=(%sysfunc(exist(&base_lib..&base_dsn)) ne 1),'; put 'msg=&base_lib..&base_dsn does not exist'; put ')'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 ),'; put 'msg=&append_lib..&append_dsn does not exist'; put ')'; 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 '%mp_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 '%mp_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/* set up folder */'; put '%local tmplib;%let tmplib=%mf_getuniquelibref();'; put '%if "&AUDITFOLDER"="0" %then %do;'; put 'filename tmp temp lrecl=10000;'; put 'libname &tmplib (work);'; put '%end;'; put '%else %do;'; put '%mf_mkdir(&AUDITFOLDER)'; put 'filename tmp "&AUDITFOLDER/deleterecords.sas" lrecl=10000;'; put 'libname &tmplib "&AUDITFOLDER";'; put '%end;'; put '/**'; put '* Create closeout statements. If UPDATE approach and CAS engine, use the'; put '* DeleteRows action (as regular SQL deletes are not supported).'; put '* Otherwise, the deletions 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 etype;'; put '%let update_cnt=0;'; put '%let etype=%mf_getengine(&base_lib);'; put '%put &=etype;'; put '%if &loadtype=UPDATE and &etype=CAS %then %do;'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds &tmplib..deleterecords;'; put 'set work.___closeout1;'; put 'keep &pk;'; put 'run;'; put '/* build the proc */'; put 'data _null_;'; put 'file tmp;'; put 'put "/* libname approve ''&AUDITFOLDER''; */";'; put 'put ''proc cas;table.deleteRows result=r/ table={'' ;'; put 'put " caslib=''&base_lib'',name=''&base_dsn'',where=''1=1'',";'; put 'put " whereTable={caslib=''CASUSER'',name=''&delds''}";'; put 'put "};";'; put 'put "call symputx(''update_cnt'',r.RowsDeleted);";'; put 'put "quit;";'; put 'put "data;set casuser.&delds;putlog (_all_)(=);run;";'; put 'put ''%put &=update_cnt;'';'; put 'put "proc sql;drop table CASUSER.&delds;";'; put 'stop;'; put 'run;'; put '%end;'; put '%else %do;'; 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 'put ''%put update_cnt=&update_cnt;'';'; put 'run;'; put '%end;'; 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 '%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 '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; 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_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_extr i extr_word outvar;'; put '%if %length(&str1)=0 %then %do;'; put '%put &sysmacroname: str1 is empty, nothing to compare;'; put '%return;'; put '%end;'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%if %sysfunc(indexw(%superq(str2),%superq(extr_word)))=0 %then'; put '%let outvar=&outvar &extr_word;'; put '%end;'; put '/* send out the result without any surrounding whitespace */'; put '%do;&outvar%end;'; 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) format=32. into: maxkey trimmed'; put '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=%sysevalf(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%sysevalf(&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=%sysevalf(&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 %sysevalf(&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 mp_rowhash('; put 'md5_col='; put ',cvars='; put ',nvars='; put ');'; put '/* DATA step temp variables use five leading underscores. The names'; put 'are generated at macro invocation to avoid clashing with data columns. */'; put '%local state digest pair numtext normal i chars nums;'; put '%let state=%mf_getuniquename(prefix=_____state_);'; put '%let digest=%mf_getuniquename(prefix=_____digest_);'; put '%let pair=%mf_getuniquename(prefix=_____pair_);'; put '%let numtext=%mf_getuniquename(prefix=_____numtext_);'; put '%let normal=%mf_getuniquename(prefix=_____normal_);'; put '%let i=%mf_getuniquename(prefix=_____i_);'; put '%let chars=%mf_getuniquename(prefix=_____chars_);'; put '%let nums=%mf_getuniquename(prefix=_____nums_);'; put 'length &state $16'; put '&digest $16'; put '&pair $32'; put '&numtext $64'; put '&normal &i 8;'; put 'if _n_=1 then call missing(&state,&digest,&pair,&numtext,&normal,&i);'; put 'drop &state &digest &pair &numtext &normal &i;'; put '/* Versioned seed prevents confusion with other hashing schemes. */'; put '&state = md5(''DC HASH v2'');'; put '%if %length(&cvars)>0 %then %do;'; put 'array &chars{*} $ &cvars;'; put 'do &i = 1 to dim(&chars);'; put '/* Leading blanks are retained. */'; put '&digest = md5(trimn(&chars[&i]));'; put 'substr(&pair, 1, 16) = &state;'; put 'substr(&pair, 17, 16) = &digest;'; put '&state = md5(&pair);'; put 'end;'; put '%end;'; put '%if %length(&nvars)>0 %then %do;'; put 'array &nums{*} &nvars;'; put 'do &i = 1 to dim(&nums);'; put '/*'; put 'multiply-by-one for consistent cross-system precision.'; put 'Ignore null to protect SAS special missing values.'; put 'Cannot use IFN() as it evaluates both sides'; put '*/'; put 'if missing(&nums[&i]) then &normal = &nums[&i];'; put 'else &normal = &nums[&i] * 1;'; put '&numtext = put(&normal, binary64.);'; put '&digest = md5(trim(&numtext));'; put 'substr(&pair, 1, 16) = &state;'; put 'substr(&pair, 17, 16) = &digest;'; put '&state = md5(&pair);'; put 'end;'; put '%end;'; put '&md5_col = put(&state, $hex32.);'; put '%mend mp_rowhash;'; 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=33;'; 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 %length(&CLOSE_VARS)>0 and (&engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW or &engine_type=SASIOSNF)'; 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 hash_char_vars hash_num_vars ;'; 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 '/* Character variables are hashed separately from numerics so that the'; put 'iterative hash can be built with arrays rather than by concatenating'; put 'hundreds of 32-byte hex strings. */'; put 'select name into: hash_char_vars separated by '' '''; put 'from work.bitemp_cols'; put 'where type in (2,6)'; put 'and upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select name into: hash_num_vars separated by '' '''; put 'from work.bitemp_cols'; put 'where type not in (2,6)'; put 'and 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 &=hash_char_vars;'; put '%put &=hash_num_vars;'; 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___) or %index(%quote(&cols),_____) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___" or "_____".%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 '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&hash_num_vars'; put ')'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; 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 or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%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 '%let temp_table=%upcase(%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 in-db empty table with PK + MD5 only */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&temp_table'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; 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 '%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 '/* inherit remote length to handle byte expansion */'; put 'if 0 then set &base_lib..&temp_table(keep=&md5_col);'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; 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 hash_char_vars=&hash_char_vars;'; put '%put hash_num_vars=&hash_num_vars;'; put 'data work.bitemp1_current(drop=___TMP___NEW_FLG);'; put 'set work.bitemp0_base(drop=&md5_col);'; put 'if ___TMP___NEW_FLG=0;'; put 'length &md5_col $32;'; put '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&hash_num_vars'; put ')'; put 'run;'; 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 '/* For bitemporal we also include the business dates in the comparison hash.'; put 'The business dates are passed as prefix numerics so that both lookup and'; put 'update tables use exactly the same hashing order. */'; 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 '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&bus_from &bus_to &hash_num_vars'; put ')'; 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 '%mp_rowhash(md5_col=&md5_col'; put ',cvars=&hash_char_vars'; put ',nvars=&bus_from &bus_to &hash_num_vars'; put ')'; 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 or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%then %do;'; put '%let innertable=%upcase(%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 '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&innertable'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put 'exec (create table &innertable'; put '(like &baselib_schema.&base_dsn)'; put ') by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; 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 '%put Not using passthrough for *&engine_type* engine;'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '%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 '/** @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 dc_refreshcatalog(libref);'; put '/* take current repository */'; put '%local repo repocnt xx;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'put (_all_)(=);'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put &sysmacroname #&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 xx=1 %to &repocnt;'; put 'options metarepository=&&repo&xx;'; put '%mpe_refreshlibs()'; put '/* get libs to be ignored */'; put '%local ignorelist;'; put 'proc sql noprint;'; put 'select var_value into: ignorelist'; put 'from &mpelib..MPE_CONFIG'; put 'where var_scope=''DC_CATALOG'''; put 'and var_name="DC_IGNORELIBS"'; put 'and &dc_dttmtfmt. < TX_TO'; put 'and var_active=1;'; put '/* get all libs */'; put '%let libcnt=0;'; put 'data libraries;'; put 'set &mpelib..mpe_datacatalog_libs;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'if index("&ignorelist",''|''!!upcase(trim(libref))!!''|'')=0;'; put 'i+1;'; put 'call symputx(cats(''lib'',i),libref);'; put 'call symputx(''libcnt'',i);'; put 'run;'; put '%local i;'; put '%do i=1 %to &libcnt;'; put '%dc_assignlib(WRITE,&&lib&i)'; put '%mpe_refreshtables(&&lib&i)'; put '%mpe_refreshcatalogs(&&lib&i)'; put '%end;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 '/* session timezone. Blank TIMEZONE means timestamps are stamped with the'; put 'raw OS clock, which is UTC in Viya containers when the option is unset. */'; put 'length timezone systimezoneident $32;'; put 'timezone=getoption(''TIMEZONE'');'; put 'systimezoneident=symget(''SYSTIMEZONEIDENT'');'; put 'systimezoneoffset=symget(''SYSTIMEZONEOFFSET'');'; 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 'union'; 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 '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.DSN=''*ALL*'''; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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_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=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=ISNAME %then %do;'; put '/* match a valid SAS name (V7 rules) */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISNAME";'; 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=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 SAS format*/'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^(?:[_a-z\$]\w{0,31}|[0-9]+)\.[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 '%macro mpe_validatecol(incol,rule,outcol);'; put '%if &rule=LIBDS %then %do;'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename(prefix=cat);'; put '&tempcol=strip(&incol);'; put '/* permit the format-catalog form: LIBREF.CATALOGNAME-FC, exactly */'; put 'if length(&tempcol)>3'; put 'and upcase(substr(&tempcol,length(&tempcol)-2,3))=''-FC'''; put 'then &tempcol=substr(&tempcol,1,length(&tempcol)-3);'; put '%mp_validatecol(&tempcol,LIBDS,&outcol)'; put 'drop &tempcol;'; put '%end;'; put '%else %mp_validatecol(&incol,&rule,&outcol);'; put '%mend mpe_validatecol;'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_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,fetchobs=1'; put ')/*/STORE SOURCE*/;'; put '%local dsid;'; put '%let dsid=%sysfunc(open(&libds(where=(&filter))));'; put '%if (&dsid) %then %do;'; put '%local rc &variable;'; put '%syscall set(dsid);'; put '%let rc = %sysfunc(fetchobs(&dsid,&fetchobs));'; put '%if (&rc ne 0) %then %do;'; put '%put NOTE: Problem reading obs &fetchobs from &libds..;'; put '%put %sysfunc(sysmsg());'; put '/* Coerce an rc value of -1 (read past end of data) to a 4'; put 'that, in SAS condition code terms, represents the sysmsg'; put 'w@rning it generates. */'; put '%if &rc eq -1 %then %let rc = 4;'; put '/* And update SYSCC if the &rc value is higher */'; put '%let syscc = %sysfunc(max(&syscc,&rc));'; put '%end;'; put '%let rc = %sysfunc(close(&dsid));'; put '%trim(&&&variable)'; put '%end;'; put '%else %do;'; put '%put %sysfunc(sysmsg());'; put '%let syscc = %sysfunc(max(&syscc,%sysfunc(sysrc())));'; put '%end;'; put '%mend mf_getvalue;'; 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_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_rowhash('; put 'md5_col='; put ',cvars='; put ',nvars='; put ');'; put '/* DATA step temp variables use five leading underscores. The names'; put 'are generated at macro invocation to avoid clashing with data columns. */'; put '%local state digest pair numtext normal i chars nums;'; put '%let state=%mf_getuniquename(prefix=_____state_);'; put '%let digest=%mf_getuniquename(prefix=_____digest_);'; put '%let pair=%mf_getuniquename(prefix=_____pair_);'; put '%let numtext=%mf_getuniquename(prefix=_____numtext_);'; put '%let normal=%mf_getuniquename(prefix=_____normal_);'; put '%let i=%mf_getuniquename(prefix=_____i_);'; put '%let chars=%mf_getuniquename(prefix=_____chars_);'; put '%let nums=%mf_getuniquename(prefix=_____nums_);'; put 'length &state $16'; put '&digest $16'; put '&pair $32'; put '&numtext $64'; put '&normal &i 8;'; put 'if _n_=1 then call missing(&state,&digest,&pair,&numtext,&normal,&i);'; put 'drop &state &digest &pair &numtext &normal &i;'; put '/* Versioned seed prevents confusion with other hashing schemes. */'; put '&state = md5(''DC HASH v2'');'; put '%if %length(&cvars)>0 %then %do;'; put 'array &chars{*} $ &cvars;'; put 'do &i = 1 to dim(&chars);'; put '/* Leading blanks are retained. */'; put '&digest = md5(trimn(&chars[&i]));'; put 'substr(&pair, 1, 16) = &state;'; put 'substr(&pair, 17, 16) = &digest;'; put '&state = md5(&pair);'; put 'end;'; put '%end;'; put '%if %length(&nvars)>0 %then %do;'; put 'array &nums{*} &nvars;'; put 'do &i = 1 to dim(&nums);'; put '/*'; put 'multiply-by-one for consistent cross-system precision.'; put 'Ignore null to protect SAS special missing values.'; put 'Cannot use IFN() as it evaluates both sides'; put '*/'; put 'if missing(&nums[&i]) then &normal = &nums[&i];'; put 'else &normal = &nums[&i] * 1;'; put '&numtext = put(&normal, binary64.);'; put '&digest = md5(trim(&numtext));'; put 'substr(&pair, 1, 16) = &state;'; put 'substr(&pair, 17, 16) = &digest;'; put '&state = md5(&pair);'; put 'end;'; put '%end;'; put '&md5_col = put(&state, $hex32.);'; put '%mend mp_rowhash;'; 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 '%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 - listed first so it is hashed first */'; put '%mp_rowhash('; put 'md5_col=&keyvar'; put ',cvars=&prevkeyvar %mf_getvarlist(&libds,typefilter=C)'; 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) format=32. into: maxkey trimmed'; put '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=%sysevalf(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%sysevalf(&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=%sysevalf(&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 %sysevalf(&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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 mp_abort.sas'; put '@li mp_filterstore.sas'; put '@li mpe_validatecol.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 '/**'; put '* filter_table is a request input that flows into executable positions'; put '* (mp_filterstore libds=, which interpolates it into SQL). It is read'; put '* from the IWANT table in a data step (never re-resolved) and validated'; put '* before use - mf_getvalue would re-resolve any macro content in the'; put '* value before this code ran. A format catalog is referenced as'; put '* LIBREF.CATALOGNAME-FC, so that form is accepted too.'; put '*/'; put '%let ds=;'; put '%let is_libds=0;'; put 'data _null_;'; put 'length _ds $64;'; put 'set work.iwant;'; put '_ds=filter_table;'; put '%mpe_validatecol(_ds,LIBDS,is_libds)'; put 'if is_libds=0 then putlog ''ERR'' ''OR: Invalid filter_table:'' _ds;'; put 'call symputx(''is_libds'',is_libds,''l'');'; put 'if is_libds=1 then call symputx(''ds'',upcase(_ds),''l'');'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&is_libds ne 1)'; put ',mac=&_program..sas'; put ',msg=%str(Invalid filter_table)'; put ')'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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_dttmtfmt0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro dc_casload(libds, mdebug=0);'; put '%mend dc_casload;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_gettables('; put 'uri='; put ',outds=work.mm_gettables'; put ',getauth=YES'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'length uri serveruri conn_uri domainuri libname ServerContext AuthDomain'; put 'path_schema usingpkguri type tableuri $256 id $17'; put 'libdesc $200 libref engine $8 IsDBMSLibname IsPreassigned $1'; put 'tablename $50 /* metadata table names can be longer than $32 */'; put ';'; put 'keep libname libdesc libref engine ServerContext path_schema AuthDomain'; put 'tableuri tablename IsPreassigned IsDBMSLibname id;'; put 'call missing (of _all_);'; put 'uri=symget(''uri'');'; put 'rc= metadata_getattr(uri, "Name", libname);'; put 'if rc <0 then do;'; put 'put ''The library is not defined in this metadata repository.'';'; put 'stop;'; put 'end;'; put 'rc= metadata_getattr(uri, "Desc", libdesc);'; put 'rc= metadata_getattr(uri, "Libref", libref);'; put 'rc= metadata_getattr(uri, "Engine", engine);'; put 'rc= metadata_getattr(uri, "IsDBMSLibname", IsDBMSLibname);'; put 'rc= metadata_getattr(uri, "IsPreassigned", IsPreassigned);'; put 'rc= metadata_getattr(uri, "Id", Id);'; put '/*** Get associated ServerContext ***/'; put 'rc= metadata_getnasn(uri, "DeployedComponents", 1, serveruri);'; put 'if rc > 0 then rc2= metadata_getattr(serveruri, "Name", ServerContext);'; put 'else ServerContext='''';'; put '/*** If the library is a DBMS library, get the Authentication Domain'; put 'associated with the DBMS connection credentials ***/'; put 'if IsDBMSLibname="1" and "&getauth"=''YES'' then do;'; put 'rc= metadata_getnasn(uri, "LibraryConnection", 1, conn_uri);'; put 'if rc>0 then do;'; put 'rc2= metadata_getnasn(conn_uri, "Domain", 1, domainuri);'; put 'if rc2>0 then rc3= metadata_getattr(domainuri, "Name", AuthDomain);'; put 'end;'; put 'end;'; put '/*** Get the path/database schema for this library ***/'; put 'rc=metadata_getnasn(uri, "UsingPackages", 1, usingpkguri);'; put 'if rc>0 then do;'; put 'rc=metadata_resolve(usingpkguri,type,id);'; put 'if type=''Directory'' then'; put 'rc=metadata_getattr(usingpkguri, "DirectoryName", path_schema);'; put 'else if type=''DatabaseSchema'' then'; put 'rc=metadata_getattr(usingpkguri, "Name", path_schema);'; put 'else path_schema="unknown";'; put 'end;'; put '/*** Get the tables associated with this library ***/'; put '/*** If DBMS, tables are associated with DatabaseSchema ***/'; put 'if type=''DatabaseSchema'' then do;'; put 't=1;'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'else if type in (''Directory'',''SASLibrary'') then do;'; put 't=1;'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by tablename tableuri;'; put 'run;'; put '%mend mm_gettables;'; put '%macro mm_getcols('; put 'tableuri='; put ',outds=work.mm_getcols'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'keep col: SAS:;'; put 'length assoc uri coluri colname coldesc SASColumnType SASFormat SASInformat'; put 'SASPrecision SASColumnLength $256;'; put 'call missing (of _all_);'; put 'uri=symget(''tableuri'');'; put 'n=1;'; put 'do while (metadata_getnasn(uri,''Columns'',n,coluri)>0);'; put 'rc3=metadata_getattr(coluri,"Name",colname);'; put 'rc3=metadata_getattr(coluri,"Desc",coldesc);'; put 'rc4=metadata_getattr(coluri,"SASColumnType",SASColumnType);'; put 'rc5=metadata_getattr(coluri,"SASFormat",SASFormat);'; put 'rc6=metadata_getattr(coluri,"SASInformat",SASInformat);'; put 'rc7=metadata_getattr(coluri,"SASPrecision",SASPrecision);'; put 'rc8=metadata_getattr(coluri,"SASColumnLength",SASColumnLength);'; put 'output;'; put 'call missing(colname,coldesc,SASColumnType,SASFormat,SASInformat'; put ',SASPrecision,SASColumnLength);'; put 'n+1;'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by colname;'; put 'run;'; put '%mend mm_getcols;'; put '%macro mm_createdataset(libds=,tableuri=,outds=work.mm_createdataset,mDebug=0);'; put '%local dbg errorcheck tempds1 tempds2 tempds3;'; put '%if &mDebug=0 %then %let dbg=*;'; put '%let errorcheck=1;'; put '%if %index(&libds,.)>0 %then %do;'; put '/* get lib uri */'; put 'data;run;%let tempds1=&syslast;'; put '%mm_getlibs(outds=&tempds1)'; put 'data _null_;'; put 'set &tempds1;'; put 'if upcase(libraryref)="%upcase(%scan(&libds,1,.))";'; put 'call symputx(''liburi'',LibraryId,''l'');'; put 'run;'; put '/* get ds uri */'; put 'data;run;%let tempds2=&syslast;'; put '%mm_gettables(uri=&liburi,outds=&tempds2)'; put 'data _null_;'; put 'set &tempds2;'; put 'where upcase(tablename)="%upcase(%scan(&libds,2,.))";'; put '&dbg putlog tableuri=;'; put 'call symputx(''tableuri'',tableuri);'; put 'run;'; put '%end;'; put 'data;run;'; put '%let tempds3=&syslast;'; put '%mm_getcols(tableuri=&tableuri,outds=&tempds3)'; put '%if %mf_nobs(&tempds3)=0 %then %do;'; put '%put &libds (&tableuri) has no columns defined!!;'; put 'data &outds;'; put 'run;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'set &tempds3 end=last;'; put 'if _n_=1 then call execute(''data &outds;'');'; put 'length attrib $32767;'; put 'if SAScolumntype=''C'' then type=''$'';'; put 'attrib=''attrib ''!!cats(colname)!!'' length=''!!cats(type,SASColumnLength,''.'');'; put 'if not missing(sasformat) then fmt='' format=''!!cats(sasformat);'; put 'if not missing(sasinformat) then infmt='' informat=''!!cats(sasinformat);'; put 'if not missing(coldesc) then desc='' label=''!!quote(cats(coldesc));'; put 'attrib=trim(attrib)!!fmt!!infmt!!desc!!'';'';'; put 'call execute(attrib);'; put 'if last then call execute(''call missing(of _all_);stop;run;'');'; put 'run;'; put '%mend mm_createdataset;'; put '%macro dc_createdataset(libds=mm_getlibs,outds=viewdata);'; put '%mm_createdataset(libds=&libds,outds=viewdata)'; put '%mend dc_createdataset;'; put '%macro mm_gettableid('; put 'libref='; put ',ds='; put ',outds=work.mm_gettableid'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put 'data &outds;'; put 'length uri usingpkguri id type tableuri tablename tmpuri $256;'; put 'call missing(of _all_);'; put 'keep tableuri tablename;'; put 'n=1;'; put 'rc=0;'; put 'if metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",n,uri)<1 then do;'; put 'put "Library &libref not found";'; put 'stop;'; put 'end;'; put '&mD.putlog "uri is " uri;'; put 'if metadata_getnasn(uri, "UsingPackages", 1, usingpkguri)>0 then do;'; put 'rc=metadata_resolve(usingpkguri,type,id);'; put '&mD.putlog "Type is " type;'; put 'end;'; put 'if type=''DatabaseSchema'' then tmpuri=usingpkguri;'; put 'else tmpuri=uri;'; put 't=1;'; put 'do while(metadata_getnasn(tmpuri, "Tables", t, tableuri)>0);'; put 't+1;'; put 'rc= metadata_getattr(tableuri, "Name", tablename);'; put '&mD.putlog "Table is " tablename;'; put 'if upcase(tablename)="%upcase(&ds)" then do;'; put 'output;'; put 'end;'; put 'end;'; put 'run;'; put '%mend mm_gettableid;'; put '%macro dc_gettableid(libref='; put ',ds='; put ',outds=);'; put '%mm_gettableid(libref=&libref,ds=&ds,outds=&outds)'; put '%if %mf_nobs(&outds)=0 %then %do;'; put 'data &outds;'; put 'tableuri='''';'; put 'tablename="&ds";'; put 'run;'; put '%end;'; 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 '%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 '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=ISNAME %then %do;'; put '/* match a valid SAS name (V7 rules) */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISNAME";'; 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=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 SAS format*/'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^(?:[_a-z\$]\w{0,31}|[0-9]+)\.[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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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:best.|SEARCHTYPE:$4|SEARCHVAL:$100|'; put '|---|---|---|---'; put '|DC258467.MPE_X_TEST|-1|CHAR|Some String|'; put 'No input column may be longer than the length declared in this service -'; put 'LIBDS 41, SEARCHTYPE 4, SEARCHVAL 100. An input column longer than the'; put 'declared length stops the step with "Multiple lengths were specified for'; put 'the variable ...", so the SASjs adapter sends the $char form (eg $char4.),'; put 'which also preserves any leading blanks.'; put '

Service Outputs

'; put '
cols
'; put '@li DDTYPE - C=CHARACTER, N=NUMERIC, else DATE / TIME / DATETIME'; put '@li FORMAT'; put '@li LABEL'; put '@li LENGTH'; put '@li NAME'; put '@li TYPE'; 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_casload.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 '/* 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 '%dc_casload(&libds)'; 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 not %symexist(DC_MAXOBS_WEBVIEW) %then %do;'; put '%put NOTE:;%put NOTE- DC_MAXOBS_WEBVIEW not found!;'; put '%put NOTE- Please add to &mpelib..MPE_CONFIG table;'; put '%put NOTE-;%put NOTE-;'; put '%global DC_MAXOBS_WEBVIEW;'; put '%let DC_MAXOBS_WEBVIEW=500;'; put '%end;'; 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_>&DC_MAXOBS_WEBVIEW 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=&DC_MAXOBS_WEBVIEW'; 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=&DC_MAXOBS_WEBVIEW'; 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_<=&DC_MAXOBS_WEBVIEW;'; 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=&DC_MAXOBS_WEBVIEW;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%mp_getcols(&libds, outds=cols1)'; put '/* trim COLS payload in the SQL below - DDTYPE C=CHARACTER N=NUMERIC'; put '(dates kept in full), VARNUM dropped (client relies on column order,'; put 'not position) */'; put 'proc sql;'; put 'create table cols as'; put 'select a.name'; put ',a.type'; put ',a.length'; put ',a.format'; put ',a.fmtname'; put ',case a.ddtype'; put 'when ''CHARACTER'' then ''C'''; put 'when ''NUMERIC'' then ''N'''; put 'else a.ddtype end as ddtype'; put ',coalesce(b.dd_shortdesc,a.label,a.name) as label'; put 'from cols1 a'; put 'left join &mpelib..mpe_datadictionary'; put '(where=(&dc_dttmtfmt. < tx_to'; put 'and dd_source ? %upcase("&orig_libds")'; put 'and dd_type=''COLUMN'')) b'; put 'on scan(b.dd_source,-1,''.'')=upcase(a.name);'; put 'quit;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/usernav; %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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getusers('; put 'outds=work.mm_getusers,'; put 'user=0'; put ')/*/STORE SOURCE*/;'; put 'filename response temp;'; put '%if %superq(user)=0 %then %do;'; put 'proc metadata in= '''; put '$METAREPOSITORY'; put 'Person'; put 'SAS'; put '0'; put ''; put ''; put ''; put ''; put ''; put ''''; put 'out=response;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename inref temp;'; put 'data _null_;'; put 'file inref;'; put 'put "";'; put 'put "$METAREPOSITORY";'; put 'put "Person";'; put 'put "SAS";'; put 'put "";'; put 'put "128";'; put 'put "";'; put 'put "";'; put 'put '''';'; put 'put "";'; put 'length string $10000;'; put 'string=cats('''');'; put 'put string;'; put 'put "";'; put 'put "";'; put 'run;'; put 'proc metadata in=inref out=response;'; put 'run;'; put '%end;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Id";'; put 'put "characterstring32";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Name";'; put 'put "characterstring256";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASObjects out=&outds;'; put 'by name;'; put 'run;'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 mp_abort.sas'; put '@li mm_getusers.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 '%macro x();'; put '%if %sysfunc(exist(work.iwant)) ne 1 %then %do;'; put '/* macro called by configurator - grab the URI of calling user */'; put '%mm_getusers(user=&_metaperson, outds=work.iwant)'; put '%end;'; put '%mend x;'; put '%x()'; put 'data groups'; put 'roles(rename=(groupuri=roleuri groupname=rolename groupdesc=roledesc)) ;'; put 'length uri groupuri groupname groupdesc publictype str $256;'; put 'call missing(of _all_);'; put 'set iwant;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No groups found for ";'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri, "PublicType", PublicType);'; put 'a+1;'; put 'if PublicType = ''Role'' then output roles;'; put 'else output groups;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'keep groupuri groupname groupdesc;'; put 'if _n_=1 then delete; /* no content so don''t send empty row */'; put 'run;'; put 'data emails;'; put 'keep email type;'; put 'length emailuri email type uri str $256;'; put 'call missing(of _all_);'; put 'set iwant;'; put '/* credit'; put 'https://seleritysas.com/data-step-view-of-email-addresses-in-sas-metadata'; put '*/'; put 'emailrc=1;email_count=1;'; put 'do while(emailrc>0);'; put '/* Get Email from Person */'; put 'emailrc=metadata_getnasn(uri,"EmailAddresses",email_count,emailuri);'; put 'arc=1;'; put 'if (emailrc>0) then do;'; put 'arc=metadata_getattr(emailuri,"Address",email);'; put 'arc=metadata_getattr(emailuri,"EmailType",type);'; put 'end;'; put 'if (arc=0) then output emails;'; put 'email_count=email_count+1;'; put 'end;'; put 'run;'; put 'data logins;'; put 'length domain userid loginuri domainuri uri $256;'; put 'keep domain userid;'; put 'call missing(of _all_);'; put 'set iwant;'; put 'login_count=1;'; put 'do while(metadata_getnasn(uri,"Logins",login_count,loginuri)>0);'; put 'rc=metadata_getattr(loginuri,"UserID",userid);'; put 'rc=metadata_getnasn(loginuri,"Domain",1,domainuri);'; put 'rc=metadata_getattr(domainuri,"Name",domain);'; put 'output;'; put 'login_count+1;'; put 'end;'; put 'run;'; put 'data info;'; put 'length uri name displayname metadatacreated metadataupdated $256;'; put 'keep name displayname metadatacreated metadataupdated;'; put 'call missing(of _all_);'; put 'set iwant;'; put 'rc=metadata_getattr(uri,"Name",name);'; put 'rc=metadata_getattr(uri,"DisplayName",displayname);'; put 'rc=metadata_getattr(uri,"MetadataCreated",MetadataCreated);'; put 'rc=metadata_getattr(uri,"MetadataUpdated",MetadataUpdated);'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,emails)'; put '%webout(OBJ,groups)'; put '%webout(OBJ,roles)'; put '%webout(OBJ,logins)'; put '%webout(OBJ,info)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getusers('; put 'outds=work.mm_getusers,'; put 'user=0'; put ')/*/STORE SOURCE*/;'; put 'filename response temp;'; put '%if %superq(user)=0 %then %do;'; put 'proc metadata in= '''; put '$METAREPOSITORY'; put 'Person'; put 'SAS'; put '0'; put ''; put ''; put ''; put ''; put ''; put ''''; put 'out=response;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename inref temp;'; put 'data _null_;'; put 'file inref;'; put 'put "";'; put 'put "$METAREPOSITORY";'; put 'put "Person";'; put 'put "SAS";'; put 'put "";'; put 'put "128";'; put 'put "";'; put 'put "";'; put 'put '''';'; put 'put "";'; put 'length string $10000;'; put 'string=cats('''');'; put 'put string;'; put 'put "";'; put 'put "";'; put 'run;'; put 'proc metadata in=inref out=response;'; put 'run;'; put '%end;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Id";'; put 'put "characterstring32";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Name";'; put 'put "characterstring256";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASObjects out=&outds;'; put 'by name;'; put 'run;'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getusers;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getusers(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getusers(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getusers(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 '@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 sasMembers ;'; put 'attrib uriGrp uriMem GroupId GroupName Group_or_Role MemberName MemberType'; put 'MemberUpdated membercreated emailuri length=$64'; put 'GroupDesc email length=$256'; put 'rcGrp rcMem rc i j length=3;'; put 'call missing (of _all_);'; put 'drop uriGrp rcGrp rcMem rc i j;'; put 'set iwant;'; put 'i=1;'; put '* Grab the URI for the first Group ;'; put 'rcGrp=metadata_getnobj(groupid,i,uriGrp);'; put '* If Group found, enter do loop ;'; put 'if rcGrp>0 then do;'; put 'call missing (rcMem,uriMem,GroupId,GroupName,Group_or_Role'; put ',MemberName,MemberType);'; put '* get group info ;'; put 'rc = metadata_getattr(uriGrp,"Id",GroupId);'; put 'rc = metadata_getattr(uriGrp,"Name",GroupName);'; put 'rc = metadata_getattr(uriGrp,"PublicType",Group_or_Role);'; put 'rc = metadata_getattr(uriGrp,"Desc",GroupDesc);'; put 'j=1;'; put 'do while (metadata_getnasn(uriGrp,"MemberIdentities",j,uriMem) > 0);'; put 'call missing (MemberName,MemberType);'; put 'rc = metadata_getattr(uriMem,"Name",MemberName);'; put 'rc = metadata_getattr(uriMem,"PublicType",MemberType);'; put 'rc=metadata_getattr(uriMem, "MetadataCreated", MemberCreated);'; put 'rc=metadata_getattr(uriMem, "MetadataUpdated", MemberUpdated);'; put 'emailrc=metadata_getnasn(uriMem,"EmailAddresses",1,emailuri);'; put 'if (emailrc>0) then rc=metadata_getattr(emailuri,"Address",email);'; put 'output;'; put 'j+1;'; put 'call missing(email,emailuri);'; put 'end;'; put 'end;'; put 'if _n_=1 then delete;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,sasMembers)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=usermembersbyrole; 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file usermembersbyrole.sas'; put '@brief List the members of a role'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mpeinit.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 'data sasMembers sasgroups;'; put 'attrib uriGrp uriMem roleId roleName Group_or_Role MemberName MemberType'; put 'MemberUpdated membercreated emailuri length=$64'; put 'roleDesc email length=$256'; put 'rcGrp rcMem rc i j length=3;'; put 'call missing (of _all_);'; put 'set iwant;'; put 'i=1;'; put '* Grab the URI for the first Group ;'; put 'rcGrp=metadata_getnobj(roleid,i,uriGrp);'; put '* If Group found, enter do loop ;'; put 'if rcGrp>0 then do;'; put 'call missing (rcMem,uriMem,roleId,roleName,Group_or_Role'; put ',MemberName,MemberType,roleDesc);'; put '* get group info ;'; put 'rc = metadata_getattr(uriGrp,"Id",roleId);'; put 'rc = metadata_getattr(uriGrp,"Name",roleName);'; put 'rc = metadata_getattr(uriGrp,"PublicType",Group_or_Role);'; put 'rc = metadata_getattr(uriGrp,"Desc",roleDesc);'; put 'j=1;'; put 'if Group_or_Role=''Role'' then do while'; put '(metadata_getnasn(uriGrp,"MemberIdentities",j,uriMem) > 0);'; put 'call missing (MemberName,MemberType);'; put 'call missing(email,emailuri);'; put 'rc = metadata_getattr(uriMem,"Name",MemberName);'; put 'rc = metadata_getattr(uriMem,"PublicType",MemberType);'; put 'rc=metadata_getattr(uriMem, "MetadataCreated", MemberCreated);'; put 'rc=metadata_getattr(uriMem, "MetadataUpdated", MemberUpdated);'; put 'emailrc=metadata_getnasn(uriMem,"EmailAddresses",1,emailuri);'; put 'if (emailrc>0) then rc=metadata_getattr(emailuri,"Address",email);'; put 'if membertype=''UserGroup'' then output sasgroups;'; put 'else output sasmembers;'; put 'j+1;'; put 'end;'; put 'end;'; put 'if _n_=1 then delete; /* no roles so don''t send empty row */'; put 'keep uriMem membertype membername MemberCreated MemberUpdated email;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,sasGroups)'; put '%webout(OBJ,sasMembers)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=userroles; 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getroles('; put 'outds=work.mm_getroles'; put ')/*/STORE SOURCE*/;'; put 'filename response temp;'; put 'options noquotelenmax;'; put 'proc metadata in= ''$METAREPOSITORY'; put 'IdentityGroupSAS388'; put ''; put ''; put ''; put ''; put ''''; put 'out=response;'; put 'run;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup/@Id";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup/@Name";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup/@Desc";'; put 'put "";'; put 'put "characterstring500";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.roles out=&outds;'; put 'by rolename;'; put 'run;'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getroles;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getroles(outds=mm_getroles);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getroles(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getroles(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getroles;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file userroles.sas'; put '@brief List all SAS Roles'; put '@details Gets a list of all SAS Roles'; put '

SAS Macros

'; put '@li dc_getroles.sas'; put '@li mpeinit.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 '%dc_getroles(outds=roles)'; put '%webout(OPEN)'; put '%webout(OBJ,roles)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=ISNAME %then %do;'; put '/* match a valid SAS name (V7 rules) */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISNAME";'; 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=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 SAS format*/'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^(?:[_a-z\$]\w{0,31}|[0-9]+)\.[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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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.|RAW_VALUE|'; put '|---|---|'; put '|1|77.43|'; put '|2|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_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|N|0.5||'; put '|1|DISCOUNT_RT|N|0.4||'; put '|1|DISCOUNT_RT|N|0.3||'; put '|1|CURRENCY_SYMBOL|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|C||"RSD"|'; put '|2|DISCOUNT_RT|N|0.5||'; put '|2|DISCOUNT_RT|N|0.4||'; put '|2|CURRENCY_SYMBOL|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|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=raw_value) );'; put 'run;'; put 'data work.DYNAMIC_VALUES;'; put 'set work.DYNAMIC_VALUES;'; put 'format raw_value;'; put 'raw_value=upcase(raw_value);'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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.|RAW_VALUE|'; put '|---|---|'; put '|1|77.43|'; put '|2|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_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|---|---|'; put '|1|DISCOUNT_RT|N|0.5||'; put '|1|DISCOUNT_RT|N|0.4||'; put '|1|DISCOUNT_RT|N|0.3||'; put '|1|CURRENCY_SYMBOL|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|C||"RSD"|'; put '|2|DISCOUNT_RT|N|0.5||'; put '|2|DISCOUNT_RT|N|0.4||'; put '|2|CURRENCY_SYMBOL|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|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 upcase(libraryref) as raw_value'; put 'from work.mm_getLibs'; put 'order by 1;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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.|RAW_VALUE|'; put '|---|---|'; put '|1|77.43|'; put '|2|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_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|N|0.5||'; put '|1|DISCOUNT_RT|N|0.4||'; put '|1|DISCOUNT_RT|N|0.3||'; put '|1|CURRENCY_SYMBOL|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|C||"RSD"|'; put '|2|DISCOUNT_RT|N|0.5||'; put '|2|DISCOUNT_RT|N|0.4||'; put '|2|CURRENCY_SYMBOL|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|C||"HKD"|'; put '**/'; put '/* send back the raw and formatted values */'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct upcase(libref) as raw_value'; put 'from &mpelib..mpe_tables'; put 'where &dc_dttmtfmt. < tx_to'; put 'order by 1;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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. raw_value is unformatted haracter/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.|RAW_VALUE|'; put '|---|---|'; put '|1|77.43|'; put '|2|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_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|FORCED_VALUE|'; put '|---|---|---|---|---|---|'; put '|1|DISCOUNT_RT|N|0.5||.|'; put '|1|DISCOUNT_RT|N|0.4||0|'; put '|1|DISCOUNT_RT|N|0.3||1|'; put '|1|CURRENCY_SYMBOL|C||"GBP"|.|'; put '|1|CURRENCY_SYMBOL|C||"RSD"|.|'; put '|2|DISCOUNT_RT|N|0.5||.|'; put '|2|DISCOUNT_RT|N|0.4||1|'; put '|2|CURRENCY_SYMBOL|C||"EUR"|.|'; put '|2|CURRENCY_SYMBOL|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 );'; put 'set work.source end=last;'; put 'by libref;'; put 'if last.libref then do;'; put 'display_index+1;'; put 'raw_value=libref;'; put 'output;'; put 'end;'; put 'if last then do;'; put 'display_index+1;'; put 'raw_value=''*ALL*'';'; put 'output;'; put 'end;'; put 'run;'; put 'data work.dynamic_extended_values(keep=display_index extra_col_name display_type'; put '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 'forced_value=0;'; put 'if first.libref then display_index+1;'; put 'if last.libref then do;'; put 'raw_value_char=''*ALL*'';'; put 'forced_value=1;'; put 'output;'; put 'end;'; put 'else output;'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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.'; 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.|RAW_VALUE|'; put '|---|---|'; put '|1|77.43|'; put '|2|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|EXTRA_COL_NAME:$32.|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|---|---|'; put '|1|DISCOUNT_RT|N|0.5||'; put '|1|DISCOUNT_RT|N|0.4||'; put '|1|DISCOUNT_RT|N|0.3||'; put '|1|CURRENCY_SYMBOL|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|C||"RSD"|'; put '|2|DISCOUNT_RT|N|0.5||'; put '|2|DISCOUNT_RT|N|0.4||'; put '|2|CURRENCY_SYMBOL|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|C||"HKD"|'; 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 upcase(memname) as raw_value'; put 'from work.source;'; put 'data work.DYNAMIC_VALUES;'; put 'set work.members;'; put 'display_index=_n_;'; put 'run;'; put 'proc sql;'; put 'create table work.dynamic_extended_values as'; put 'select a.display_index'; put ',a.raw_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.raw_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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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.'; put '|RAW_VALUE:??|'; put '|---|'; put '|44|'; put '

SAS Macros

'; put '@li dc_getlibs.sas'; put '**/'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct some_num as raw_value'; put 'from &libds'; put 'order by 1;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getgroups(outds=mm_getlibs);'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getgroups(outds=&outds,repo=foundation)'; put '%do x=1 %to &repocnt;'; put '%mm_getgroups(outds=&outds.a, repo=&&repo&x)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'proc sort data=&outds noduprec;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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.|RAW_VALUE|'; put '|---|---|---|'; put '|1|77.43|'; put '|2|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_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|---|---|'; put '|1|DISCOUNT_RT|N|0.5||'; put '|1|DISCOUNT_RT|N|0.4||'; put '|1|DISCOUNT_RT|N|0.3||'; put '|1|CURRENCY_SYMBOL|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|C||"RSD"|'; put '|2|DISCOUNT_RT|N|0.5||'; put '|2|DISCOUNT_RT|N|0.4||'; put '|2|CURRENCY_SYMBOL|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|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 raw_value'; put 'from work.groups'; put 'order by 1;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; 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 mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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.|RAW_VALUE|'; put '|---|---|---|'; put '|1|77.43|'; put '|2|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_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|---|---|'; put '|1|DISCOUNT_RT|N|0.5||'; put '|1|DISCOUNT_RT|N|0.4||'; put '|1|DISCOUNT_RT|N|0.3||'; put '|1|CURRENCY_SYMBOL|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|C||"RSD"|'; put '|2|DISCOUNT_RT|N|0.5||'; put '|2|DISCOUNT_RT|N|0.4||'; put '|2|CURRENCY_SYMBOL|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|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 cls_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 upcase(name) as raw_value'; put 'from work.members'; put 'where MemType=''DATA'''; put 'order by 1;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 '/* trim (not cats) so leading blanks are retained */'; put 'else &&name&i=''"''!!trim(&&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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 '/* a plain $ informat strips leading blanks - use $char instead */'; put 'call symputx(''input_statement'''; put ',prxchange(''s/:\$(?=[0-9 ])/:\$char/i'',-1,_infile_)'; put ');'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 mp_abort(mac=mp_abort.sas, 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 'end;'; put '/* _METAPERSON is not always set when _METAUSER is (e.g. Viya JES'; put 'sessions provide only _METAUSER) - guard it separately or SYMGET'; put 'raises "Invalid argument" and pollutes SYSERRORTEXT inside the'; put 'very abort JSON we are writing here. */'; put 'if symexist(''_metaperson'') then do;'; 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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.PROCESSMODE &prefix._STPSRV_HEADER_LOC /* SASjs server specific vars*/'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; 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 '/* `_debug` is 131 by default, but the adapter sends 128 on the Viya WEB JES'; put '* path when runAsTask is enabled (see WebJobExecutor.getRequestParams), and'; put '* 128 also arrives when a `log` debug value is requested. All of them mean'; put '* "debug on" - so all of them enable the extra logging below. */'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put 'or "&_debug"="128"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%if "&sasjs_mdebug"="1" %then %do;'; put '%if %sysfunc(exist(work.browser_url_vars)) %then %do;'; put 'data _null_;'; put 'length name value $1024;'; put 'set work.browser_url_vars;'; put 'putlog "NOTE: &sysmacroname: work.browser_url_vars:";'; put 'putlog name= value=;'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_url_vars on this request;'; put '%if %sysfunc(exist(work.browser_info)) %then %do;'; put 'data _null_;'; put 'set work.browser_info;'; put 'putlog "NOTE: &sysmacroname: work.browser_info:";'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%else %put NOTE: &sysmacroname: no work.browser_info on this request;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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.|RAW_VALUE|'; put '|---|---|'; put '|1|77.43|'; put '|2|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_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|---|---|'; put '|1|DISCOUNT_RT|N|0.5||'; put '|1|DISCOUNT_RT|N|0.4||'; put '|1|DISCOUNT_RT|N|0.3||'; put '|1|CURRENCY_SYMBOL|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|C||"RSD"|'; put '|2|DISCOUNT_RT|N|0.5||'; put '|2|DISCOUNT_RT|N|0.4||'; put '|2|CURRENCY_SYMBOL|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|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 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/web9; %let service=887.f912dabf61f5b9fe-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s4ODddLHs5Mjg4NyhWZSxXZSxBZSl7dmFyIFp0PUFlKDI5MjkzKS5kZWZhdWx0LFVlPUFlKDUzMzQ0KS5kZWZhdWx0LHFlPUFlKDQyOTU4KS5kZWZhdWx0''@;'; put 'put ''LEZlPUFlKDgyODgxKS5kZWZhdWx0O1ZlLmV4cG9ydHM9ZnVuY3Rpb24gcyhFLFMsYil7ZnVuY3Rpb24gYSh0LGUpe2lmKCFTW3RdKXtpZighRVt0XSl7aWYobylyZXR1cm4gbyh0LCEwKTt2YXIgbj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIit0KyInIik7dGhyb3cgbi5jb2Rl''@;'; put 'put ''PSJNT0RVTEVfTk9UX0ZPVU5EIixufXZhciBpPVNbdF09e2V4cG9ydHM6e319O0VbdF1bMF0uY2FsbChpLmV4cG9ydHMsZnVuY3Rpb24oaCl7cmV0dXJuIGEoRVt0XVsxXVtoXXx8aCl9LGksaS5leHBvcnRzLHMsRSxTLGIpfXJldHVybiBTW3RdLmV4cG9ydHN9Zm9yKHZhciBvPXZvaWQgMCxy''@;'; put 'put ''PTA7cjxiLmxlbmd0aDtyKyspYShiW3JdKTtyZXR1cm4gYX0oezE6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCJmcyIpLGE9cygiZmFzdC1jc3YiKSxvPXMoImRheWpzL3BsdWdpbi9jdXN0b21QYXJzZUZvcm1hdCIpLHI9cygiZGF5anMvcGx1Z2luL3V0YyIpLHQ9''@;'; put 'put ''cygiZGF5anMiKS5leHRlbmQobykuZXh0ZW5kKHIpLGU9cygiLi4vdXRpbHMvc3RyZWFtLWJ1ZiIpLHtmczp7ZXhpc3RzOmx9fT1zKCIuLi91dGlscy91dGlscyIpLG49e3RydWU6ITAsZmFsc2U6ITEsIiNOL0EiOntlcnJvcjoiI04vQSJ9LCIjUkVGISI6e2Vycm9yOiIjUkVGISJ9LCIjTkFN''@;'; put 'put ''RT8iOntlcnJvcjoiI05BTUU/In0sIiNESVYvMCEiOntlcnJvcjoiI0RJVi8wISJ9LCIjTlVMTCEiOntlcnJvcjoiI05VTEwhIn0sIiNWQUxVRSEiOntlcnJvcjoiI1ZBTFVFISJ9LCIjTlVNISI6e2Vycm9yOiIjTlVNISJ9fTtFLmV4cG9ydHM9Y2xhc3N7Y29uc3RydWN0b3IoaSl7dGhpcy53''@;'; put 'put ''b3JrYm9vaz1pLHRoaXMud29ya3NoZWV0PW51bGx9cmVhZEZpbGUoaSxoKXt2YXIgZj10aGlzO3JldHVybiBadChmdW5jdGlvbiooKXtpZihoPWh8fHt9LCEoeWllbGQgbChpKSkpdGhyb3cgbmV3IEVycm9yKCJGaWxlIG5vdCBmb3VuZDogIitpKTtjb25zdCB1PWIuY3JlYXRlUmVhZFN0cmVh''@;'; put 'put ''bShpKSxwPXlpZWxkIGYucmVhZCh1LGgpO3JldHVybiB1LmNsb3NlKCkscH0pKCl9cmVhZChpLGgpe3JldHVybiBoPWh8fHt9LG5ldyBQcm9taXNlKChmLHUpPT57Y29uc3QgcD10aGlzLndvcmtib29rLmFkZFdvcmtzaGVldChoLnNoZWV0TmFtZSksZD1oLmRhdGVGb3JtYXRzfHxbIllZWVkt''@;'; put 'put ''TU0tRERbVF1ISDptbTpzc1oiLCJZWVlZLU1NLUREW1RdSEg6bW06c3MiLCJNTS1ERC1ZWVlZIiwiWVlZWS1NTS1ERCJdLHY9aC5tYXB8fGZ1bmN0aW9uKEEpe2lmKCIiPT09QSlyZXR1cm4gbnVsbDtjb25zdCBJPU51bWJlcihBKTtpZighTnVtYmVyLmlzTmFOKEkpJiZJIT09MS8wKXJldHVy''@;'; put 'put ''biBJO2NvbnN0IEw9ZC5yZWR1Y2UoKFAsQik9PntpZihQKXJldHVybiBQO2NvbnN0ICQ9dChBLEIsITApO3JldHVybiAkLmlzVmFsaWQoKT8kOm51bGx9LG51bGwpO2lmKEwpcmV0dXJuIG5ldyBEYXRlKEwudmFsdWVPZigpKTtjb25zdCBOPW5bQV07cmV0dXJuIHZvaWQgMCE9PU4/TjpBfSxf''@;'; put 'put ''PWEucGFyc2UoaC5wYXJzZXJPcHRpb25zKS5vbigiZGF0YSIsQT0+e3AuYWRkUm93KEEubWFwKHYpKX0pLm9uKCJlbmQiLCgpPT57Xy5lbWl0KCJ3b3Jrc2hlZXQiLHApfSk7Xy5vbigid29ya3NoZWV0IixmKS5vbigiZXJyb3IiLHUpLGkucGlwZShfKX0pfWNyZWF0ZUlucHV0U3RyZWFtKCl7''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJgQ1NWI2NyZWF0ZUlucHV0U3RyZWFtYCBpcyBkZXByZWNhdGVkLiBZb3Ugc2hvdWxkIHVzZSBgQ1NWI3JlYWRgIGluc3RlYWQuIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiB2ZXJzaW9uIDUuMC4gUGxlYXNlIGZvbGxvdyB1cGdyYWRlIGluc3RydWN0''@;'; put 'put ''aW9uOiBodHRwczovL2dpdGh1Yi5jb20vZXhjZWxqcy9leGNlbGpzL2Jsb2IvbWFzdGVyL1VQR1JBREUtNC4wLm1kIil9d3JpdGUoaSxoKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsdSk9Pntjb25zdCBwPXRoaXMud29ya2Jvb2suZ2V0V29ya3NoZWV0KChoPWh8fHt9KS5zaGVldE5hbWV8fGgu''@;'; put 'put ''c2hlZXRJZCksZD1hLmZvcm1hdChoLmZvcm1hdHRlck9wdGlvbnMpO2kub24oImZpbmlzaCIsKCk9PntmKCl9KSxkLm9uKCJlcnJvciIsdSksZC5waXBlKGkpO2NvbnN0e2RhdGVGb3JtYXQ6dixkYXRlVVRDOl99PWgsQT1oLm1hcHx8KE49PntpZihOKXtpZihOLnRleHR8fE4uaHlwZXJsaW5r''@;'; put 'put ''KXJldHVybiBOLmh5cGVybGlua3x8Ti50ZXh0fHwiIjtpZihOLmZvcm11bGF8fE4ucmVzdWx0KXJldHVybiBOLnJlc3VsdHx8IiI7aWYoTiBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIHY/Xz90LnV0YyhOKS5mb3JtYXQodik6dChOKS5mb3JtYXQodik6Xz90LnV0YyhOKS5mb3JtYXQoKTp0KE4p''@;'; put 'put ''LmZvcm1hdCgpO2lmKE4uZXJyb3IpcmV0dXJuIE4uZXJyb3I7aWYoIm9iamVjdCI9PXR5cGVvZiBOKXJldHVybiBKU09OLnN0cmluZ2lmeShOKX1yZXR1cm4gTn0pLEk9dm9pZCAwPT09aC5pbmNsdWRlRW1wdHlSb3dzfHxoLmluY2x1ZGVFbXB0eVJvd3M7bGV0IEw9MTtwJiZwLmVhY2hSb3co''@;'; put 'put ''KE4sUCk9PntpZihJKWZvcig7TCsrPFAtMTspZC53cml0ZShbXSk7Y29uc3R7dmFsdWVzOkJ9PU47Qi5zaGlmdCgpLGQud3JpdGUoQi5tYXAoQSkpLEw9UH0pLGQuZW5kKCl9KX13cml0ZUZpbGUoaSxoKXtjb25zdCBmPXtlbmNvZGluZzooaD1ofHx7fSkuZW5jb2Rpbmd8fCJ1dGY4In0sdT1i''@;'; put 'put ''LmNyZWF0ZVdyaXRlU3RyZWFtKGksZik7cmV0dXJuIHRoaXMud3JpdGUodSxoKX13cml0ZUJ1ZmZlcihpKXt2YXIgaD10aGlzO3JldHVybiBadChmdW5jdGlvbiooKXtjb25zdCBmPW5ldyBlO3JldHVybiB5aWVsZCBoLndyaXRlKGYsaSksZi5yZWFkKCl9KSgpfX19LHsiLi4vdXRpbHMvc3Ry''@;'; put 'put ''ZWFtLWJ1ZiI6MjQsIi4uL3V0aWxzL3V0aWxzIjoyNyxkYXlqczozOTEsImRheWpzL3BsdWdpbi9jdXN0b21QYXJzZUZvcm1hdCI6MzkyLCJkYXlqcy9wbHVnaW4vdXRjIjozOTMsImZhc3QtY3N2Ijo0MjQsZnM6MjE2fV0sMjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBi''@;'; put 'put ''PXMoIi4uL3V0aWxzL2NvbC1jYWNoZSIpO2NsYXNzIGF7Y29uc3RydWN0b3Iocix0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MDtpZih0aGlzLndvcmtzaGVldD1yLHQpaWYoInN0cmluZyI9PXR5cGVvZiB0KXtjb25zdCBs''@;'; put 'put ''PWIuZGVjb2RlQWRkcmVzcyh0KTt0aGlzLm5hdGl2ZUNvbD1sLmNvbCtlLHRoaXMubmF0aXZlQ29sT2ZmPTAsdGhpcy5uYXRpdmVSb3c9bC5yb3crZSx0aGlzLm5hdGl2ZVJvd09mZj0wfWVsc2Ugdm9pZCAwIT09dC5uYXRpdmVDb2w/KHRoaXMubmF0aXZlQ29sPXQubmF0aXZlQ29sfHwwLHRo''@;'; put 'put ''aXMubmF0aXZlQ29sT2ZmPXQubmF0aXZlQ29sT2ZmfHwwLHRoaXMubmF0aXZlUm93PXQubmF0aXZlUm93fHwwLHRoaXMubmF0aXZlUm93T2ZmPXQubmF0aXZlUm93T2ZmfHwwKTp2b2lkIDAhPT10LmNvbD8odGhpcy5jb2w9dC5jb2wrZSx0aGlzLnJvdz10LnJvdytlKToodGhpcy5uYXRpdmVD''@;'; put 'put ''b2w9MCx0aGlzLm5hdGl2ZUNvbE9mZj0wLHRoaXMubmF0aXZlUm93PTAsdGhpcy5uYXRpdmVSb3dPZmY9MCk7ZWxzZSB0aGlzLm5hdGl2ZUNvbD0wLHRoaXMubmF0aXZlQ29sT2ZmPTAsdGhpcy5uYXRpdmVSb3c9MCx0aGlzLm5hdGl2ZVJvd09mZj0wfXN0YXRpYyBhc0luc3RhbmNlKHIpe3Jl''@;'; put 'put ''dHVybiByIGluc3RhbmNlb2YgYXx8bnVsbD09cj9yOm5ldyBhKHIpfWdldCBjb2woKXtyZXR1cm4gdGhpcy5uYXRpdmVDb2wrTWF0aC5taW4odGhpcy5jb2xXaWR0aC0xLHRoaXMubmF0aXZlQ29sT2ZmKS90aGlzLmNvbFdpZHRofXNldCBjb2wocil7dGhpcy5uYXRpdmVDb2w9TWF0aC5mbG9v''@;'; put 'put ''cihyKSx0aGlzLm5hdGl2ZUNvbE9mZj1NYXRoLmZsb29yKChyLXRoaXMubmF0aXZlQ29sKSp0aGlzLmNvbFdpZHRoKX1nZXQgcm93KCl7cmV0dXJuIHRoaXMubmF0aXZlUm93K01hdGgubWluKHRoaXMucm93SGVpZ2h0LTEsdGhpcy5uYXRpdmVSb3dPZmYpL3RoaXMucm93SGVpZ2h0fXNldCBy''@;'; put 'put ''b3cocil7dGhpcy5uYXRpdmVSb3c9TWF0aC5mbG9vcihyKSx0aGlzLm5hdGl2ZVJvd09mZj1NYXRoLmZsb29yKChyLXRoaXMubmF0aXZlUm93KSp0aGlzLnJvd0hlaWdodCl9Z2V0IGNvbFdpZHRoKCl7cmV0dXJuIHRoaXMud29ya3NoZWV0JiZ0aGlzLndvcmtzaGVldC5nZXRDb2x1bW4odGhp''@;'; put 'put ''cy5uYXRpdmVDb2wrMSkmJnRoaXMud29ya3NoZWV0LmdldENvbHVtbih0aGlzLm5hdGl2ZUNvbCsxKS5pc0N1c3RvbVdpZHRoP01hdGguZmxvb3IoMWU0KnRoaXMud29ya3NoZWV0LmdldENvbHVtbih0aGlzLm5hdGl2ZUNvbCsxKS53aWR0aCk6NjRlNH1nZXQgcm93SGVpZ2h0KCl7cmV0dXJu''@;'; put 'put ''IHRoaXMud29ya3NoZWV0JiZ0aGlzLndvcmtzaGVldC5nZXRSb3codGhpcy5uYXRpdmVSb3crMSkmJnRoaXMud29ya3NoZWV0LmdldFJvdyh0aGlzLm5hdGl2ZVJvdysxKS5oZWlnaHQ/TWF0aC5mbG9vcigxZTQqdGhpcy53b3Jrc2hlZXQuZ2V0Um93KHRoaXMubmF0aXZlUm93KzEpLmhlaWdo''@;'; put 'put ''dCk6MThlNH1nZXQgbW9kZWwoKXtyZXR1cm57bmF0aXZlQ29sOnRoaXMubmF0aXZlQ29sLG5hdGl2ZUNvbE9mZjp0aGlzLm5hdGl2ZUNvbE9mZixuYXRpdmVSb3c6dGhpcy5uYXRpdmVSb3csbmF0aXZlUm93T2ZmOnRoaXMubmF0aXZlUm93T2ZmfX1zZXQgbW9kZWwocil7dGhpcy5uYXRpdmVD''@;'; put 'put ''b2w9ci5uYXRpdmVDb2wsdGhpcy5uYXRpdmVDb2xPZmY9ci5uYXRpdmVDb2xPZmYsdGhpcy5uYXRpdmVSb3c9ci5uYXRpdmVSb3csdGhpcy5uYXRpdmVSb3dPZmY9ci5uYXRpdmVSb3dPZmZ9fUUuZXhwb3J0cz1hfSx7Ii4uL3V0aWxzL2NvbC1jYWNoZSI6MTl9XSwzOltmdW5jdGlvbihzLEUs''@;'; put 'put ''Uyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vdXRpbHMvY29sLWNhY2hlIiksYT1zKCIuLi91dGlscy91bmRlci1kYXNoIiksbz1zKCIuL2VudW1zIikse3NsaWRlRm9ybXVsYTpyfT1zKCIuLi91dGlscy9zaGFyZWQtZm9ybXVsYSIpLHQ9cygiLi9ub3RlIik7Y2xhc3MgZXtjb25zdHJ1''@;'; put 'put ''Y3RvcihpLGgsZil7aWYoIWl8fCFoKXRocm93IG5ldyBFcnJvcigiQSBDZWxsIG5lZWRzIGEgUm93Iik7dGhpcy5fcm93PWksdGhpcy5fY29sdW1uPWgsYi52YWxpZGF0ZUFkZHJlc3MoZiksdGhpcy5fYWRkcmVzcz1mLHRoaXMuX3ZhbHVlPWwuY3JlYXRlKGUuVHlwZXMuTnVsbCx0aGlzKSx0''@;'; put 'put ''aGlzLnN0eWxlPXRoaXMuX21lcmdlU3R5bGUoaS5zdHlsZSxoLnN0eWxlLHt9KSx0aGlzLl9tZXJnZUNvdW50PTB9Z2V0IHdvcmtzaGVldCgpe3JldHVybiB0aGlzLl9yb3cud29ya3NoZWV0fWdldCB3b3JrYm9vaygpe3JldHVybiB0aGlzLl9yb3cud29ya3NoZWV0Lndvcmtib29rfWRlc3Ry''@;'; put 'put ''b3koKXtkZWxldGUgdGhpcy5zdHlsZSxkZWxldGUgdGhpcy5fdmFsdWUsZGVsZXRlIHRoaXMuX3JvdyxkZWxldGUgdGhpcy5fY29sdW1uLGRlbGV0ZSB0aGlzLl9hZGRyZXNzfWdldCBudW1GbXQoKXtyZXR1cm4gdGhpcy5zdHlsZS5udW1GbXR9c2V0IG51bUZtdChpKXt0aGlzLnN0eWxlLm51''@;'; put 'put ''bUZtdD1pfWdldCBmb250KCl7cmV0dXJuIHRoaXMuc3R5bGUuZm9udH1zZXQgZm9udChpKXt0aGlzLnN0eWxlLmZvbnQ9aX1nZXQgYWxpZ25tZW50KCl7cmV0dXJuIHRoaXMuc3R5bGUuYWxpZ25tZW50fXNldCBhbGlnbm1lbnQoaSl7dGhpcy5zdHlsZS5hbGlnbm1lbnQ9aX1nZXQgYm9yZGVy''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuc3R5bGUuYm9yZGVyfXNldCBib3JkZXIoaSl7dGhpcy5zdHlsZS5ib3JkZXI9aX1nZXQgZmlsbCgpe3JldHVybiB0aGlzLnN0eWxlLmZpbGx9c2V0IGZpbGwoaSl7dGhpcy5zdHlsZS5maWxsPWl9Z2V0IHByb3RlY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHlsZS5wcm90''@;'; put 'put ''ZWN0aW9ufXNldCBwcm90ZWN0aW9uKGkpe3RoaXMuc3R5bGUucHJvdGVjdGlvbj1pfV9tZXJnZVN0eWxlKGksaCxmKXtjb25zdCB1PWkmJmkubnVtRm10fHxoJiZoLm51bUZtdDt1JiYoZi5udW1GbXQ9dSk7Y29uc3QgcD1pJiZpLmZvbnR8fGgmJmguZm9udDtwJiYoZi5mb250PXApO2NvbnN0''@;'; put 'put ''IGQ9aSYmaS5hbGlnbm1lbnR8fGgmJmguYWxpZ25tZW50O2QmJihmLmFsaWdubWVudD1kKTtjb25zdCB2PWkmJmkuYm9yZGVyfHxoJiZoLmJvcmRlcjt2JiYoZi5ib3JkZXI9dik7Y29uc3QgXz1pJiZpLmZpbGx8fGgmJmguZmlsbDtfJiYoZi5maWxsPV8pO2NvbnN0IEE9aSYmaS5wcm90ZWN0''@;'; put 'put ''aW9ufHxoJiZoLnByb3RlY3Rpb247cmV0dXJuIEEmJihmLnByb3RlY3Rpb249QSksZn1nZXQgYWRkcmVzcygpe3JldHVybiB0aGlzLl9hZGRyZXNzfWdldCByb3coKXtyZXR1cm4gdGhpcy5fcm93Lm51bWJlcn1nZXQgY29sKCl7cmV0dXJuIHRoaXMuX2NvbHVtbi5udW1iZXJ9Z2V0ICRjb2wk''@;'; put 'put ''cm93KCl7cmV0dXJuYCQke3RoaXMuX2NvbHVtbi5sZXR0ZXJ9JCR7dGhpcy5yb3d9YH1nZXQgdHlwZSgpe3JldHVybiB0aGlzLl92YWx1ZS50eXBlfWdldCBlZmZlY3RpdmVUeXBlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlLmVmZmVjdGl2ZVR5cGV9dG9Dc3ZTdHJpbmcoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''dmFsdWUudG9Dc3ZTdHJpbmcoKX1hZGRNZXJnZVJlZigpe3RoaXMuX21lcmdlQ291bnQrK31yZWxlYXNlTWVyZ2VSZWYoKXt0aGlzLl9tZXJnZUNvdW50LS19Z2V0IGlzTWVyZ2VkKCl7cmV0dXJuIHRoaXMuX21lcmdlQ291bnQ+MHx8dGhpcy50eXBlPT09ZS5UeXBlcy5NZXJnZX1tZXJnZShp''@;'; put 'put ''LGgpe3RoaXMuX3ZhbHVlLnJlbGVhc2UoKSx0aGlzLl92YWx1ZT1sLmNyZWF0ZShlLlR5cGVzLk1lcmdlLHRoaXMsaSksaHx8KHRoaXMuc3R5bGU9aS5zdHlsZSl9dW5tZXJnZSgpe3RoaXMudHlwZT09PWUuVHlwZXMuTWVyZ2UmJih0aGlzLl92YWx1ZS5yZWxlYXNlKCksdGhpcy5fdmFsdWU9''@;'; put 'put ''bC5jcmVhdGUoZS5UeXBlcy5OdWxsLHRoaXMpLHRoaXMuc3R5bGU9dGhpcy5fbWVyZ2VTdHlsZSh0aGlzLl9yb3cuc3R5bGUsdGhpcy5fY29sdW1uLnN0eWxlLHt9KSl9aXNNZXJnZWRUbyhpKXtyZXR1cm4gdGhpcy5fdmFsdWUudHlwZT09PWUuVHlwZXMuTWVyZ2UmJnRoaXMuX3ZhbHVlLmlz''@;'; put 'put ''TWVyZ2VkVG8oaSl9Z2V0IG1hc3Rlcigpe3JldHVybiB0aGlzLnR5cGU9PT1lLlR5cGVzLk1lcmdlP3RoaXMuX3ZhbHVlLm1hc3Rlcjp0aGlzfWdldCBpc0h5cGVybGluaygpe3JldHVybiB0aGlzLl92YWx1ZS50eXBlPT09ZS5UeXBlcy5IeXBlcmxpbmt9Z2V0IGh5cGVybGluaygpe3JldHVy''@;'; put 'put ''biB0aGlzLl92YWx1ZS5oeXBlcmxpbmt9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlLnZhbHVlfXNldCB2YWx1ZShpKXt0aGlzLnR5cGUhPT1lLlR5cGVzLk1lcmdlPyh0aGlzLl92YWx1ZS5yZWxlYXNlKCksdGhpcy5fdmFsdWU9bC5jcmVhdGUobC5nZXRUeXBlKGkpLHRoaXMsaSkp''@;'; put 'put ''OnRoaXMuX3ZhbHVlLm1hc3Rlci52YWx1ZT1pfWdldCBub3RlKCl7cmV0dXJuIHRoaXMuX2NvbW1lbnQmJnRoaXMuX2NvbW1lbnQubm90ZX1zZXQgbm90ZShpKXt0aGlzLl9jb21tZW50PW5ldyB0KGkpfWdldCB0ZXh0KCl7cmV0dXJuIHRoaXMuX3ZhbHVlLnRvU3RyaW5nKCl9Z2V0IGh0bWwo''@;'; put 'put ''KXtyZXR1cm4gYS5lc2NhcGVIdG1sKHRoaXMudGV4dCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy50ZXh0fV91cGdyYWRlVG9IeXBlcmxpbmsoaSl7dGhpcy50eXBlPT09ZS5UeXBlcy5TdHJpbmcmJih0aGlzLl92YWx1ZT1sLmNyZWF0ZShlLlR5cGVzLkh5cGVybGluayx0aGlzLHt0ZXh0OnRo''@;'; put 'put ''aXMuX3ZhbHVlLnZhbHVlLGh5cGVybGluazppfSkpfWdldCBmb3JtdWxhKCl7cmV0dXJuIHRoaXMuX3ZhbHVlLmZvcm11bGF9Z2V0IHJlc3VsdCgpe3JldHVybiB0aGlzLl92YWx1ZS5yZXN1bHR9Z2V0IGZvcm11bGFUeXBlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlLmZvcm11bGFUeXBlfWdldCBm''@;'; put 'put ''dWxsQWRkcmVzcygpe2NvbnN0e3dvcmtzaGVldDppfT10aGlzLl9yb3c7cmV0dXJue3NoZWV0TmFtZTppLm5hbWUsYWRkcmVzczp0aGlzLmFkZHJlc3Mscm93OnRoaXMucm93LGNvbDp0aGlzLmNvbH19Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5uYW1lc1swXX1zZXQgbmFtZShpKXt0aGlzLm5h''@;'; put 'put ''bWVzPVtpXX1nZXQgbmFtZXMoKXtyZXR1cm4gdGhpcy53b3JrYm9vay5kZWZpbmVkTmFtZXMuZ2V0TmFtZXNFeCh0aGlzLmZ1bGxBZGRyZXNzKX1zZXQgbmFtZXMoaSl7Y29uc3R7ZGVmaW5lZE5hbWVzOmh9PXRoaXMud29ya2Jvb2s7aC5yZW1vdmVBbGxOYW1lcyh0aGlzLmZ1bGxBZGRyZXNz''@;'; put 'put ''KSxpLmZvckVhY2goZj0+e2guYWRkRXgodGhpcy5mdWxsQWRkcmVzcyxmKX0pfWFkZE5hbWUoaSl7dGhpcy53b3JrYm9vay5kZWZpbmVkTmFtZXMuYWRkRXgodGhpcy5mdWxsQWRkcmVzcyxpKX1yZW1vdmVOYW1lKGkpe3RoaXMud29ya2Jvb2suZGVmaW5lZE5hbWVzLnJlbW92ZUV4KHRoaXMu''@;'; put 'put ''ZnVsbEFkZHJlc3MsaSl9cmVtb3ZlQWxsTmFtZXMoKXt0aGlzLndvcmtib29rLmRlZmluZWROYW1lcy5yZW1vdmVBbGxOYW1lcyh0aGlzLmZ1bGxBZGRyZXNzKX1nZXQgX2RhdGFWYWxpZGF0aW9ucygpe3JldHVybiB0aGlzLndvcmtzaGVldC5kYXRhVmFsaWRhdGlvbnN9Z2V0IGRhdGFWYWxp''@;'; put 'put ''ZGF0aW9uKCl7cmV0dXJuIHRoaXMuX2RhdGFWYWxpZGF0aW9ucy5maW5kKHRoaXMuYWRkcmVzcyl9c2V0IGRhdGFWYWxpZGF0aW9uKGkpe3RoaXMuX2RhdGFWYWxpZGF0aW9ucy5hZGQodGhpcy5hZGRyZXNzLGkpfWdldCBtb2RlbCgpe2NvbnN0e21vZGVsOml9PXRoaXMuX3ZhbHVlO3JldHVy''@;'; put 'put ''biBpLnN0eWxlPXRoaXMuc3R5bGUsdGhpcy5fY29tbWVudCYmKGkuY29tbWVudD10aGlzLl9jb21tZW50Lm1vZGVsKSxpfXNldCBtb2RlbChpKXt0aGlzLl92YWx1ZS5yZWxlYXNlKCksdGhpcy5fdmFsdWU9bC5jcmVhdGUoaS50eXBlLHRoaXMpLHRoaXMuX3ZhbHVlLm1vZGVsPWksaS5jb21t''@;'; put 'put ''ZW50JiYibm90ZSI9PT1pLmNvbW1lbnQudHlwZSYmKHRoaXMuX2NvbW1lbnQ9dC5mcm9tTW9kZWwoaS5jb21tZW50KSksdGhpcy5zdHlsZT1pLnN0eWxlP2kuc3R5bGU6e319fWUuVHlwZXM9by5WYWx1ZVR5cGU7Y29uc3QgbD17Z2V0VHlwZTpuPT5udWxsPT1uP2UuVHlwZXMuTnVsbDpuIGlu''@;'; put 'put ''c3RhbmNlb2YgU3RyaW5nfHwic3RyaW5nIj09dHlwZW9mIG4/ZS5UeXBlcy5TdHJpbmc6Im51bWJlciI9PXR5cGVvZiBuP2UuVHlwZXMuTnVtYmVyOiJib29sZWFuIj09dHlwZW9mIG4/ZS5UeXBlcy5Cb29sZWFuOm4gaW5zdGFuY2VvZiBEYXRlP2UuVHlwZXMuRGF0ZTpuLnRleHQmJm4uaHlw''@;'; put 'put ''ZXJsaW5rP2UuVHlwZXMuSHlwZXJsaW5rOm4uZm9ybXVsYXx8bi5zaGFyZWRGb3JtdWxhP2UuVHlwZXMuRm9ybXVsYTpuLnJpY2hUZXh0P2UuVHlwZXMuUmljaFRleHQ6bi5zaGFyZWRTdHJpbmc/ZS5UeXBlcy5TaGFyZWRTdHJpbmc6bi5lcnJvcj9lLlR5cGVzLkVycm9yOmUuVHlwZXMuSlNP''@;'; put 'put ''Tix0eXBlczpbe3Q6ZS5UeXBlcy5OdWxsLGY6Y2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5tb2RlbD17YWRkcmVzczpuLmFkZHJlc3MsdHlwZTplLlR5cGVzLk51bGx9fWdldCB2YWx1ZSgpe3JldHVybiBudWxsfXNldCB2YWx1ZShuKXt9Z2V0IHR5cGUoKXtyZXR1cm4gZS5UeXBlcy5OdWxs''@;'; put 'put ''fWdldCBlZmZlY3RpdmVUeXBlKCl7cmV0dXJuIGUuVHlwZXMuTnVsbH1nZXQgYWRkcmVzcygpe3JldHVybiB0aGlzLm1vZGVsLmFkZHJlc3N9c2V0IGFkZHJlc3Mobil7dGhpcy5tb2RlbC5hZGRyZXNzPW59dG9Dc3ZTdHJpbmcoKXtyZXR1cm4iIn1yZWxlYXNlKCl7fXRvU3RyaW5nKCl7cmV0''@;'; put 'put ''dXJuIiJ9fX0se3Q6ZS5UeXBlcy5OdW1iZXIsZjpjbGFzc3tjb25zdHJ1Y3RvcihuLGkpe3RoaXMubW9kZWw9e2FkZHJlc3M6bi5hZGRyZXNzLHR5cGU6ZS5UeXBlcy5OdW1iZXIsdmFsdWU6aX19Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMubW9kZWwudmFsdWV9c2V0IHZhbHVlKG4pe3RoaXMu''@;'; put 'put ''bW9kZWwudmFsdWU9bn1nZXQgdHlwZSgpe3JldHVybiBlLlR5cGVzLk51bWJlcn1nZXQgZWZmZWN0aXZlVHlwZSgpe3JldHVybiBlLlR5cGVzLk51bWJlcn1nZXQgYWRkcmVzcygpe3JldHVybiB0aGlzLm1vZGVsLmFkZHJlc3N9c2V0IGFkZHJlc3Mobil7dGhpcy5tb2RlbC5hZGRyZXNzPW59''@;'; put 'put ''dG9Dc3ZTdHJpbmcoKXtyZXR1cm4gdGhpcy5tb2RlbC52YWx1ZS50b1N0cmluZygpfXJlbGVhc2UoKXt9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5tb2RlbC52YWx1ZS50b1N0cmluZygpfX19LHt0OmUuVHlwZXMuU3RyaW5nLGY6Y2xhc3N7Y29uc3RydWN0b3IobixpKXt0aGlzLm1vZGVsPXth''@;'; put 'put ''ZGRyZXNzOm4uYWRkcmVzcyx0eXBlOmUuVHlwZXMuU3RyaW5nLHZhbHVlOml9fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlfXNldCB2YWx1ZShuKXt0aGlzLm1vZGVsLnZhbHVlPW59Z2V0IHR5cGUoKXtyZXR1cm4gZS5UeXBlcy5TdHJpbmd9Z2V0IGVmZmVjdGl2ZVR5cGUo''@;'; put 'put ''KXtyZXR1cm4gZS5UeXBlcy5TdHJpbmd9Z2V0IGFkZHJlc3MoKXtyZXR1cm4gdGhpcy5tb2RlbC5hZGRyZXNzfXNldCBhZGRyZXNzKG4pe3RoaXMubW9kZWwuYWRkcmVzcz1ufXRvQ3N2U3RyaW5nKCl7cmV0dXJuYCIke3RoaXMubW9kZWwudmFsdWUucmVwbGFjZSgvIi9nLCciIicpfSJgfXJl''@;'; put 'put ''bGVhc2UoKXt9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5tb2RlbC52YWx1ZX19fSx7dDplLlR5cGVzLkRhdGUsZjpjbGFzc3tjb25zdHJ1Y3RvcihuLGkpe3RoaXMubW9kZWw9e2FkZHJlc3M6bi5hZGRyZXNzLHR5cGU6ZS5UeXBlcy5EYXRlLHZhbHVlOml9fWdldCB2YWx1ZSgpe3JldHVybiB0''@;'; put 'put ''aGlzLm1vZGVsLnZhbHVlfXNldCB2YWx1ZShuKXt0aGlzLm1vZGVsLnZhbHVlPW59Z2V0IHR5cGUoKXtyZXR1cm4gZS5UeXBlcy5EYXRlfWdldCBlZmZlY3RpdmVUeXBlKCl7cmV0dXJuIGUuVHlwZXMuRGF0ZX1nZXQgYWRkcmVzcygpe3JldHVybiB0aGlzLm1vZGVsLmFkZHJlc3N9c2V0IGFk''@;'; put 'put ''ZHJlc3Mobil7dGhpcy5tb2RlbC5hZGRyZXNzPW59dG9Dc3ZTdHJpbmcoKXtyZXR1cm4gdGhpcy5tb2RlbC52YWx1ZS50b0lTT1N0cmluZygpfXJlbGVhc2UoKXt9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5tb2RlbC52YWx1ZS50b1N0cmluZygpfX19LHt0OmUuVHlwZXMuSHlwZXJsaW5rLGY6''@;'; put 'put ''Y2xhc3N7Y29uc3RydWN0b3IobixpKXt0aGlzLm1vZGVsPXthZGRyZXNzOm4uYWRkcmVzcyx0eXBlOmUuVHlwZXMuSHlwZXJsaW5rLHRleHQ6aT9pLnRleHQ6dm9pZCAwLGh5cGVybGluazppP2kuaHlwZXJsaW5rOnZvaWQgMH0saSYmaS50b29sdGlwJiYodGhpcy5tb2RlbC50b29sdGlwPWku''@;'; put 'put ''dG9vbHRpcCl9Z2V0IHZhbHVlKCl7Y29uc3Qgbj17dGV4dDp0aGlzLm1vZGVsLnRleHQsaHlwZXJsaW5rOnRoaXMubW9kZWwuaHlwZXJsaW5rfTtyZXR1cm4gdGhpcy5tb2RlbC50b29sdGlwJiYobi50b29sdGlwPXRoaXMubW9kZWwudG9vbHRpcCksbn1zZXQgdmFsdWUobil7dGhpcy5tb2Rl''@;'; put 'put ''bD17dGV4dDpuLnRleHQsaHlwZXJsaW5rOm4uaHlwZXJsaW5rfSxuLnRvb2x0aXAmJih0aGlzLm1vZGVsLnRvb2x0aXA9bi50b29sdGlwKX1nZXQgdGV4dCgpe3JldHVybiB0aGlzLm1vZGVsLnRleHR9c2V0IHRleHQobil7dGhpcy5tb2RlbC50ZXh0PW59Z2V0IGh5cGVybGluaygpe3JldHVy''@;'; put 'put ''biB0aGlzLm1vZGVsLmh5cGVybGlua31zZXQgaHlwZXJsaW5rKG4pe3RoaXMubW9kZWwuaHlwZXJsaW5rPW59Z2V0IHR5cGUoKXtyZXR1cm4gZS5UeXBlcy5IeXBlcmxpbmt9Z2V0IGVmZmVjdGl2ZVR5cGUoKXtyZXR1cm4gZS5UeXBlcy5IeXBlcmxpbmt9Z2V0IGFkZHJlc3MoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5tb2RlbC5hZGRyZXNzfXNldCBhZGRyZXNzKG4pe3RoaXMubW9kZWwuYWRkcmVzcz1ufXRvQ3N2U3RyaW5nKCl7cmV0dXJuIHRoaXMubW9kZWwuaHlwZXJsaW5rfXJlbGVhc2UoKXt9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5tb2RlbC50ZXh0fX19LHt0OmUuVHlwZXMuRm9ybXVsYSxm''@;'; put 'put ''OmNsYXNze2NvbnN0cnVjdG9yKG4saSl7dGhpcy5jZWxsPW4sdGhpcy5tb2RlbD17YWRkcmVzczpuLmFkZHJlc3MsdHlwZTplLlR5cGVzLkZvcm11bGEsc2hhcmVUeXBlOmk/aS5zaGFyZVR5cGU6dm9pZCAwLHJlZjppP2kucmVmOnZvaWQgMCxmb3JtdWxhOmk/aS5mb3JtdWxhOnZvaWQgMCxz''@;'; put 'put ''aGFyZWRGb3JtdWxhOmk/aS5zaGFyZWRGb3JtdWxhOnZvaWQgMCxyZXN1bHQ6aT9pLnJlc3VsdDp2b2lkIDB9fV9jb3B5TW9kZWwobil7Y29uc3QgaT17fSxoPWY9Pntjb25zdCB1PW5bZl07dSYmKGlbZl09dSl9O3JldHVybiBoKCJmb3JtdWxhIiksaCgicmVzdWx0IiksaCgicmVmIiksaCgi''@;'; put 'put ''c2hhcmVUeXBlIiksaCgic2hhcmVkRm9ybXVsYSIpLGl9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX2NvcHlNb2RlbCh0aGlzLm1vZGVsKX1zZXQgdmFsdWUobil7dGhpcy5tb2RlbD10aGlzLl9jb3B5TW9kZWwobil9dmFsaWRhdGUobil7c3dpdGNoKGwuZ2V0VHlwZShuKSl7Y2FzZSBlLlR5''@;'; put 'put ''cGVzLk51bGw6Y2FzZSBlLlR5cGVzLlN0cmluZzpjYXNlIGUuVHlwZXMuTnVtYmVyOmNhc2UgZS5UeXBlcy5EYXRlOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcHJvY2VzcyB0aGF0IHR5cGUgb2YgcmVzdWx0IHZhbHVlIil9fWdldCBkZXBlbmRlbmNpZXMoKXtyZXR1''@;'; put 'put ''cm57cmFuZ2VzOnRoaXMuZm9ybXVsYS5tYXRjaCgvKFthLXpBLVowLTldKyEpP1tBLVpdezEsM31cZHsxLDR9OltBLVpdezEsM31cZHsxLDR9L2cpLGNlbGxzOnRoaXMuZm9ybXVsYS5yZXBsYWNlKC8oW2EtekEtWjAtOV0rISk/W0EtWl17MSwzfVxkezEsNH06W0EtWl17MSwzfVxkezEsNH0v''@;'; put 'put ''ZywiIikubWF0Y2goLyhbYS16QS1aMC05XSshKT9bQS1aXXsxLDN9XGR7MSw0fS9nKX19Z2V0IGZvcm11bGEoKXtyZXR1cm4gdGhpcy5tb2RlbC5mb3JtdWxhfHx0aGlzLl9nZXRUcmFuc2xhdGVkRm9ybXVsYSgpfXNldCBmb3JtdWxhKG4pe3RoaXMubW9kZWwuZm9ybXVsYT1ufWdldCBmb3Jt''@;'; put 'put ''dWxhVHlwZSgpe3JldHVybiB0aGlzLm1vZGVsLmZvcm11bGE/by5Gb3JtdWxhVHlwZS5NYXN0ZXI6dGhpcy5tb2RlbC5zaGFyZWRGb3JtdWxhP28uRm9ybXVsYVR5cGUuU2hhcmVkOm8uRm9ybXVsYVR5cGUuTm9uZX1nZXQgcmVzdWx0KCl7cmV0dXJuIHRoaXMubW9kZWwucmVzdWx0fXNldCBy''@;'; put 'put ''ZXN1bHQobil7dGhpcy5tb2RlbC5yZXN1bHQ9bn1nZXQgdHlwZSgpe3JldHVybiBlLlR5cGVzLkZvcm11bGF9Z2V0IGVmZmVjdGl2ZVR5cGUoKXtjb25zdCBuPXRoaXMubW9kZWwucmVzdWx0O3JldHVybiBudWxsPT1uP28uVmFsdWVUeXBlLk51bGw6biBpbnN0YW5jZW9mIFN0cmluZ3x8InN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBuP28uVmFsdWVUeXBlLlN0cmluZzoibnVtYmVyIj09dHlwZW9mIG4/by5WYWx1ZVR5cGUuTnVtYmVyOm4gaW5zdGFuY2VvZiBEYXRlP28uVmFsdWVUeXBlLkRhdGU6bi50ZXh0JiZuLmh5cGVybGluaz9vLlZhbHVlVHlwZS5IeXBlcmxpbms6bi5mb3JtdWxhP28uVmFs''@;'; put 'put ''dWVUeXBlLkZvcm11bGE6by5WYWx1ZVR5cGUuTnVsbH1nZXQgYWRkcmVzcygpe3JldHVybiB0aGlzLm1vZGVsLmFkZHJlc3N9c2V0IGFkZHJlc3Mobil7dGhpcy5tb2RlbC5hZGRyZXNzPW59X2dldFRyYW5zbGF0ZWRGb3JtdWxhKCl7aWYoIXRoaXMuX3RyYW5zbGF0ZWRGb3JtdWxhJiZ0aGlz''@;'; put 'put ''Lm1vZGVsLnNoYXJlZEZvcm11bGEpe2NvbnN0e3dvcmtzaGVldDpufT10aGlzLmNlbGwsaT1uLmZpbmRDZWxsKHRoaXMubW9kZWwuc2hhcmVkRm9ybXVsYSk7dGhpcy5fdHJhbnNsYXRlZEZvcm11bGE9aSYmcihpLmZvcm11bGEsaS5hZGRyZXNzLHRoaXMubW9kZWwuYWRkcmVzcyl9cmV0dXJu''@;'; put 'put ''IHRoaXMuX3RyYW5zbGF0ZWRGb3JtdWxhfXRvQ3N2U3RyaW5nKCl7cmV0dXJuIiIrKHRoaXMubW9kZWwucmVzdWx0fHwiIil9cmVsZWFzZSgpe310b1N0cmluZygpe3JldHVybiB0aGlzLm1vZGVsLnJlc3VsdD90aGlzLm1vZGVsLnJlc3VsdC50b1N0cmluZygpOiIifX19LHt0OmUuVHlwZXMu''@;'; put 'put ''TWVyZ2UsZjpjbGFzc3tjb25zdHJ1Y3RvcihuLGkpe3RoaXMubW9kZWw9e2FkZHJlc3M6bi5hZGRyZXNzLHR5cGU6ZS5UeXBlcy5NZXJnZSxtYXN0ZXI6aT9pLmFkZHJlc3M6dm9pZCAwfSx0aGlzLl9tYXN0ZXI9aSxpJiZpLmFkZE1lcmdlUmVmKCl9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X21hc3Rlci52YWx1ZX1zZXQgdmFsdWUobil7biBpbnN0YW5jZW9mIGU/KHRoaXMuX21hc3RlciYmdGhpcy5fbWFzdGVyLnJlbGVhc2VNZXJnZVJlZigpLG4uYWRkTWVyZ2VSZWYoKSx0aGlzLl9tYXN0ZXI9bik6dGhpcy5fbWFzdGVyLnZhbHVlPW59aXNNZXJnZWRUbyhuKXtyZXR1cm4gbj09''@;'; put 'put ''PXRoaXMuX21hc3Rlcn1nZXQgbWFzdGVyKCl7cmV0dXJuIHRoaXMuX21hc3Rlcn1nZXQgdHlwZSgpe3JldHVybiBlLlR5cGVzLk1lcmdlfWdldCBlZmZlY3RpdmVUeXBlKCl7cmV0dXJuIHRoaXMuX21hc3Rlci5lZmZlY3RpdmVUeXBlfWdldCBhZGRyZXNzKCl7cmV0dXJuIHRoaXMubW9kZWwu''@;'; put 'put ''YWRkcmVzc31zZXQgYWRkcmVzcyhuKXt0aGlzLm1vZGVsLmFkZHJlc3M9bn10b0NzdlN0cmluZygpe3JldHVybiIifXJlbGVhc2UoKXt0aGlzLl9tYXN0ZXIucmVsZWFzZU1lcmdlUmVmKCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy52YWx1ZS50b1N0cmluZygpfX19LHt0OmUuVHlwZXMuSlNP''@;'; put 'put ''TixmOmNsYXNze2NvbnN0cnVjdG9yKG4saSl7dGhpcy5tb2RlbD17YWRkcmVzczpuLmFkZHJlc3MsdHlwZTplLlR5cGVzLlN0cmluZyx2YWx1ZTpKU09OLnN0cmluZ2lmeShpKSxyYXdWYWx1ZTppfX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5tb2RlbC5yYXdWYWx1ZX1zZXQgdmFsdWUobil7''@;'; put 'put ''dGhpcy5tb2RlbC5yYXdWYWx1ZT1uLHRoaXMubW9kZWwudmFsdWU9SlNPTi5zdHJpbmdpZnkobil9Z2V0IHR5cGUoKXtyZXR1cm4gZS5UeXBlcy5TdHJpbmd9Z2V0IGVmZmVjdGl2ZVR5cGUoKXtyZXR1cm4gZS5UeXBlcy5TdHJpbmd9Z2V0IGFkZHJlc3MoKXtyZXR1cm4gdGhpcy5tb2RlbC5h''@;'; put 'put ''ZGRyZXNzfXNldCBhZGRyZXNzKG4pe3RoaXMubW9kZWwuYWRkcmVzcz1ufXRvQ3N2U3RyaW5nKCl7cmV0dXJuIHRoaXMubW9kZWwudmFsdWV9cmVsZWFzZSgpe310b1N0cmluZygpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlfX19LHt0OmUuVHlwZXMuU2hhcmVkU3RyaW5nLGY6Y2xhc3N7Y29u''@;'; put 'put ''c3RydWN0b3IobixpKXt0aGlzLm1vZGVsPXthZGRyZXNzOm4uYWRkcmVzcyx0eXBlOmUuVHlwZXMuU2hhcmVkU3RyaW5nLHZhbHVlOml9fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlfXNldCB2YWx1ZShuKXt0aGlzLm1vZGVsLnZhbHVlPW59Z2V0IHR5cGUoKXtyZXR1cm4g''@;'; put 'put ''ZS5UeXBlcy5TaGFyZWRTdHJpbmd9Z2V0IGVmZmVjdGl2ZVR5cGUoKXtyZXR1cm4gZS5UeXBlcy5TaGFyZWRTdHJpbmd9Z2V0IGFkZHJlc3MoKXtyZXR1cm4gdGhpcy5tb2RlbC5hZGRyZXNzfXNldCBhZGRyZXNzKG4pe3RoaXMubW9kZWwuYWRkcmVzcz1ufXRvQ3N2U3RyaW5nKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMubW9kZWwudmFsdWUudG9TdHJpbmcoKX1yZWxlYXNlKCl7fXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMubW9kZWwudmFsdWUudG9TdHJpbmcoKX19fSx7dDplLlR5cGVzLlJpY2hUZXh0LGY6Y2xhc3N7Y29uc3RydWN0b3IobixpKXt0aGlzLm1vZGVsPXthZGRyZXNzOm4uYWRkcmVzcyx0''@;'; put 'put ''eXBlOmUuVHlwZXMuU3RyaW5nLHZhbHVlOml9fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlfXNldCB2YWx1ZShuKXt0aGlzLm1vZGVsLnZhbHVlPW59dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5tb2RlbC52YWx1ZS5yaWNoVGV4dC5tYXAobj0+bi50ZXh0KS5qb2luKCIiKX1n''@;'; put 'put ''ZXQgdHlwZSgpe3JldHVybiBlLlR5cGVzLlJpY2hUZXh0fWdldCBlZmZlY3RpdmVUeXBlKCl7cmV0dXJuIGUuVHlwZXMuUmljaFRleHR9Z2V0IGFkZHJlc3MoKXtyZXR1cm4gdGhpcy5tb2RlbC5hZGRyZXNzfXNldCBhZGRyZXNzKG4pe3RoaXMubW9kZWwuYWRkcmVzcz1ufXRvQ3N2U3RyaW5n''@;'; put 'put ''KCl7cmV0dXJuYCIke3RoaXMudGV4dC5yZXBsYWNlKC8iL2csJyIiJyl9ImB9cmVsZWFzZSgpe319fSx7dDplLlR5cGVzLkJvb2xlYW4sZjpjbGFzc3tjb25zdHJ1Y3RvcihuLGkpe3RoaXMubW9kZWw9e2FkZHJlc3M6bi5hZGRyZXNzLHR5cGU6ZS5UeXBlcy5Cb29sZWFuLHZhbHVlOml9fWdl''@;'; put 'put ''dCB2YWx1ZSgpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlfXNldCB2YWx1ZShuKXt0aGlzLm1vZGVsLnZhbHVlPW59Z2V0IHR5cGUoKXtyZXR1cm4gZS5UeXBlcy5Cb29sZWFufWdldCBlZmZlY3RpdmVUeXBlKCl7cmV0dXJuIGUuVHlwZXMuQm9vbGVhbn1nZXQgYWRkcmVzcygpe3JldHVybiB0''@;'; put 'put ''aGlzLm1vZGVsLmFkZHJlc3N9c2V0IGFkZHJlc3Mobil7dGhpcy5tb2RlbC5hZGRyZXNzPW59dG9Dc3ZTdHJpbmcoKXtyZXR1cm4gdGhpcy5tb2RlbC52YWx1ZT8xOjB9cmVsZWFzZSgpe310b1N0cmluZygpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlLnRvU3RyaW5nKCl9fX0se3Q6ZS5UeXBl''@;'; put 'put ''cy5FcnJvcixmOmNsYXNze2NvbnN0cnVjdG9yKG4saSl7dGhpcy5tb2RlbD17YWRkcmVzczpuLmFkZHJlc3MsdHlwZTplLlR5cGVzLkVycm9yLHZhbHVlOml9fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlfXNldCB2YWx1ZShuKXt0aGlzLm1vZGVsLnZhbHVlPW59Z2V0IHR5''@;'; put 'put ''cGUoKXtyZXR1cm4gZS5UeXBlcy5FcnJvcn1nZXQgZWZmZWN0aXZlVHlwZSgpe3JldHVybiBlLlR5cGVzLkVycm9yfWdldCBhZGRyZXNzKCl7cmV0dXJuIHRoaXMubW9kZWwuYWRkcmVzc31zZXQgYWRkcmVzcyhuKXt0aGlzLm1vZGVsLmFkZHJlc3M9bn10b0NzdlN0cmluZygpe3JldHVybiB0''@;'; put 'put ''aGlzLnRvU3RyaW5nKCl9cmVsZWFzZSgpe310b1N0cmluZygpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlLmVycm9yLnRvU3RyaW5nKCl9fX1dLnJlZHVjZSgobixpKT0+KG5baS50XT1pLmYsbiksW10pLGNyZWF0ZShuLGksaCl7Y29uc3QgZj10aGlzLnR5cGVzW25dO2lmKCFmKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiQ291bGQgbm90IGNyZWF0ZSBWYWx1ZSBvZiB0eXBlICIrbik7cmV0dXJuIG5ldyBmKGksaCl9fTtFLmV4cG9ydHM9ZX0seyIuLi91dGlscy9jb2wtY2FjaGUiOjE5LCIuLi91dGlscy9zaGFyZWQtZm9ybXVsYSI6MjMsIi4uL3V0aWxzL3VuZGVyLWRhc2giOjI2LCIuL2VudW1z''@;'; put 'put ''Ijo3LCIuL25vdGUiOjl9XSw0OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vdXRpbHMvdW5kZXItZGFzaCIpLGE9cygiLi9lbnVtcyIpLG89cygiLi4vdXRpbHMvY29sLWNhY2hlIik7Y2xhc3Mgcntjb25zdHJ1Y3RvcihlLGwsbil7dGhpcy5fd29ya3NoZWV0''@;'; put 'put ''PWUsdGhpcy5fbnVtYmVyPWwsITEhPT1uJiYodGhpcy5kZWZuPW4pfWdldCBudW1iZXIoKXtyZXR1cm4gdGhpcy5fbnVtYmVyfWdldCB3b3Jrc2hlZXQoKXtyZXR1cm4gdGhpcy5fd29ya3NoZWV0fWdldCBsZXR0ZXIoKXtyZXR1cm4gby5uMmwodGhpcy5fbnVtYmVyKX1nZXQgaXNDdXN0b21X''@;'; put 'put ''aWR0aCgpe3JldHVybiB2b2lkIDAhPT10aGlzLndpZHRoJiY5IT09dGhpcy53aWR0aH1nZXQgZGVmbigpe3JldHVybntoZWFkZXI6dGhpcy5faGVhZGVyLGtleTp0aGlzLmtleSx3aWR0aDp0aGlzLndpZHRoLHN0eWxlOnRoaXMuc3R5bGUsaGlkZGVuOnRoaXMuaGlkZGVuLG91dGxpbmVMZXZl''@;'; put 'put ''bDp0aGlzLm91dGxpbmVMZXZlbH19c2V0IGRlZm4oZSl7ZT8odGhpcy5rZXk9ZS5rZXksdGhpcy53aWR0aD12b2lkIDAhPT1lLndpZHRoP2Uud2lkdGg6OSx0aGlzLm91dGxpbmVMZXZlbD1lLm91dGxpbmVMZXZlbCx0aGlzLnN0eWxlPWUuc3R5bGU/ZS5zdHlsZTp7fSx0aGlzLmhlYWRlcj1l''@;'; put 'put ''LmhlYWRlcix0aGlzLl9oaWRkZW49ISFlLmhpZGRlbik6KGRlbGV0ZSB0aGlzLl9oZWFkZXIsZGVsZXRlIHRoaXMuX2tleSxkZWxldGUgdGhpcy53aWR0aCx0aGlzLnN0eWxlPXt9LHRoaXMub3V0bGluZUxldmVsPTApfWdldCBoZWFkZXJzKCl7cmV0dXJuIHRoaXMuX2hlYWRlciYmdGhpcy5f''@;'; put 'put ''aGVhZGVyIGluc3RhbmNlb2YgQXJyYXk/dGhpcy5faGVhZGVyOlt0aGlzLl9oZWFkZXJdfWdldCBoZWFkZXIoKXtyZXR1cm4gdGhpcy5faGVhZGVyfXNldCBoZWFkZXIoZSl7dm9pZCAwIT09ZT8odGhpcy5faGVhZGVyPWUsdGhpcy5oZWFkZXJzLmZvckVhY2goKGwsbik9Pnt0aGlzLl93b3Jr''@;'; put 'put ''c2hlZXQuZ2V0Q2VsbChuKzEsdGhpcy5udW1iZXIpLnZhbHVlPWx9KSk6dGhpcy5faGVhZGVyPXZvaWQgMH1nZXQga2V5KCl7cmV0dXJuIHRoaXMuX2tleX1zZXQga2V5KGUpeyh0aGlzLl9rZXkmJnRoaXMuX3dvcmtzaGVldC5nZXRDb2x1bW5LZXkodGhpcy5fa2V5KSk9PT10aGlzJiZ0aGlz''@;'; put 'put ''Ll93b3Jrc2hlZXQuZGVsZXRlQ29sdW1uS2V5KHRoaXMuX2tleSksdGhpcy5fa2V5PWUsZSYmdGhpcy5fd29ya3NoZWV0LnNldENvbHVtbktleSh0aGlzLl9rZXksdGhpcyl9Z2V0IGhpZGRlbigpe3JldHVybiEhdGhpcy5faGlkZGVufXNldCBoaWRkZW4oZSl7dGhpcy5faGlkZGVuPWV9Z2V0''@;'; put 'put ''IG91dGxpbmVMZXZlbCgpe3JldHVybiB0aGlzLl9vdXRsaW5lTGV2ZWx8fDB9c2V0IG91dGxpbmVMZXZlbChlKXt0aGlzLl9vdXRsaW5lTGV2ZWw9ZX1nZXQgY29sbGFwc2VkKCl7cmV0dXJuISEodGhpcy5fb3V0bGluZUxldmVsJiZ0aGlzLl9vdXRsaW5lTGV2ZWw+PXRoaXMuX3dvcmtzaGVl''@;'; put 'put ''dC5wcm9wZXJ0aWVzLm91dGxpbmVMZXZlbENvbCl9dG9TdHJpbmcoKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoe2tleTp0aGlzLmtleSx3aWR0aDp0aGlzLndpZHRoLGhlYWRlcnM6dGhpcy5oZWFkZXJzLmxlbmd0aD90aGlzLmhlYWRlcnM6dm9pZCAwfSl9ZXF1aXZhbGVudFRvKGUpe3JldHVy''@;'; put 'put ''biB0aGlzLndpZHRoPT09ZS53aWR0aCYmdGhpcy5oaWRkZW49PT1lLmhpZGRlbiYmdGhpcy5vdXRsaW5lTGV2ZWw9PT1lLm91dGxpbmVMZXZlbCYmYi5pc0VxdWFsKHRoaXMuc3R5bGUsZS5zdHlsZSl9Z2V0IGlzRGVmYXVsdCgpe2lmKHRoaXMuaXNDdXN0b21XaWR0aHx8dGhpcy5oaWRkZW58''@;'; put 'put ''fHRoaXMub3V0bGluZUxldmVsKXJldHVybiExO2NvbnN0IGU9dGhpcy5zdHlsZTtyZXR1cm4hZXx8IShlLmZvbnR8fGUubnVtRm10fHxlLmFsaWdubWVudHx8ZS5ib3JkZXJ8fGUuZmlsbHx8ZS5wcm90ZWN0aW9uKX1nZXQgaGVhZGVyQ291bnQoKXtyZXR1cm4gdGhpcy5oZWFkZXJzLmxlbmd0''@;'; put 'put ''aH1lYWNoQ2VsbChlLGwpe2NvbnN0IG49dGhpcy5udW1iZXI7bHx8KGw9ZSxlPW51bGwpLHRoaXMuX3dvcmtzaGVldC5lYWNoUm93KGUsKGksaCk9PntsKGkuZ2V0Q2VsbChuKSxoKX0pfWdldCB2YWx1ZXMoKXtjb25zdCBlPVtdO3JldHVybiB0aGlzLmVhY2hDZWxsKChsLG4pPT57bCYmbC50''@;'; put 'put ''eXBlIT09YS5WYWx1ZVR5cGUuTnVsbCYmKGVbbl09bC52YWx1ZSl9KSxlfXNldCB2YWx1ZXMoZSl7aWYoIWUpcmV0dXJuO2NvbnN0IGw9dGhpcy5udW1iZXI7bGV0IG49MDtlLmhhc093blByb3BlcnR5KCIwIikmJihuPTEpLGUuZm9yRWFjaCgoaSxoKT0+e3RoaXMuX3dvcmtzaGVldC5nZXRD''@;'; put 'put ''ZWxsKGgrbixsKS52YWx1ZT1pfSl9X2FwcGx5U3R5bGUoZSxsKXtyZXR1cm4gdGhpcy5zdHlsZVtlXT1sLHRoaXMuZWFjaENlbGwobj0+e25bZV09bH0pLGx9Z2V0IG51bUZtdCgpe3JldHVybiB0aGlzLnN0eWxlLm51bUZtdH1zZXQgbnVtRm10KGUpe3RoaXMuX2FwcGx5U3R5bGUoIm51bUZt''@;'; put 'put ''dCIsZSl9Z2V0IGZvbnQoKXtyZXR1cm4gdGhpcy5zdHlsZS5mb250fXNldCBmb250KGUpe3RoaXMuX2FwcGx5U3R5bGUoImZvbnQiLGUpfWdldCBhbGlnbm1lbnQoKXtyZXR1cm4gdGhpcy5zdHlsZS5hbGlnbm1lbnR9c2V0IGFsaWdubWVudChlKXt0aGlzLl9hcHBseVN0eWxlKCJhbGlnbm1l''@;'; put 'put ''bnQiLGUpfWdldCBwcm90ZWN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGUucHJvdGVjdGlvbn1zZXQgcHJvdGVjdGlvbihlKXt0aGlzLl9hcHBseVN0eWxlKCJwcm90ZWN0aW9uIixlKX1nZXQgYm9yZGVyKCl7cmV0dXJuIHRoaXMuc3R5bGUuYm9yZGVyfXNldCBib3JkZXIoZSl7dGhpcy5fYXBw''@;'; put 'put ''bHlTdHlsZSgiYm9yZGVyIixlKX1nZXQgZmlsbCgpe3JldHVybiB0aGlzLnN0eWxlLmZpbGx9c2V0IGZpbGwoZSl7dGhpcy5fYXBwbHlTdHlsZSgiZmlsbCIsZSl9c3RhdGljIHRvTW9kZWwoZSl7Y29uc3QgbD1bXTtsZXQgbj1udWxsO3JldHVybiBlJiZlLmZvckVhY2goKGksaCk9PntpLmlz''@;'; put 'put ''RGVmYXVsdD9uJiYobj1udWxsKTpuJiZpLmVxdWl2YWxlbnRUbyhuKT9uLm1heD1oKzE6KG49e21pbjpoKzEsbWF4OmgrMSx3aWR0aDp2b2lkIDAhPT1pLndpZHRoP2kud2lkdGg6OSxzdHlsZTppLnN0eWxlLGlzQ3VzdG9tV2lkdGg6aS5pc0N1c3RvbVdpZHRoLGhpZGRlbjppLmhpZGRlbixv''@;'; put 'put ''dXRsaW5lTGV2ZWw6aS5vdXRsaW5lTGV2ZWwsY29sbGFwc2VkOmkuY29sbGFwc2VkfSxsLnB1c2gobikpfSksbC5sZW5ndGg/bDp2b2lkIDB9c3RhdGljIGZyb21Nb2RlbChlLGwpe2NvbnN0IG49W107bGV0IGk9MSxoPTA7Zm9yKGw9KGw9bHx8W10pLnNvcnQoZnVuY3Rpb24oZix1KXtyZXR1''@;'; put 'put ''cm4gZi5taW4tdS5taW59KTtoPGwubGVuZ3RoOyl7Y29uc3QgZj1sW2grK107Zm9yKDtpPGYubWluOyluLnB1c2gobmV3IHIoZSxpKyspKTtmb3IoO2k8PWYubWF4OyluLnB1c2gobmV3IHIoZSxpKyssZikpfXJldHVybiBuLmxlbmd0aD9uOm51bGx9fUUuZXhwb3J0cz1yfSx7Ii4uL3V0aWxz''@;'; put 'put ''L2NvbC1jYWNoZSI6MTksIi4uL3V0aWxzL3VuZGVyLWRhc2giOjI2LCIuL2VudW1zIjo3fV0sNTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtFLmV4cG9ydHM9Y2xhc3N7Y29uc3RydWN0b3IoYil7dGhpcy5tb2RlbD1ifHx7fX1hZGQoYixhKXtyZXR1cm4gdGhpcy5tb2RlbFtiXT1h''@;'; put 'put ''fWZpbmQoYil7cmV0dXJuIHRoaXMubW9kZWxbYl19cmVtb3ZlKGIpe3RoaXMubW9kZWxbYl09dm9pZCAwfX19LHt9XSw2OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vdXRpbHMvdW5kZXItZGFzaCIpLGE9cygiLi4vdXRpbHMvY29sLWNhY2hlIiksbz1zKCIu''@;'; put 'put ''Li91dGlscy9jZWxsLW1hdHJpeCIpLHI9cygiLi9yYW5nZSIpLHQ9L1skXShcdyspWyRdKFxkKykoOlskXShcdyspWyRdKFxkKykpPy87RS5leHBvcnRzPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tYXRyaXhNYXA9e319Z2V0TWF0cml4KGUpe3JldHVybiB0aGlzLm1hdHJpeE1hcFtlXXx8''@;'; put 'put ''KHRoaXMubWF0cml4TWFwW2VdPW5ldyBvKX1hZGQoZSxsKXtjb25zdCBuPWEuZGVjb2RlRXgoZSk7dGhpcy5hZGRFeChuLGwpfWFkZEV4KGUsbCl7Y29uc3Qgbj10aGlzLmdldE1hdHJpeChsKTtpZihlLnRvcClmb3IobGV0IGk9ZS5sZWZ0O2k8PWUucmlnaHQ7aSsrKWZvcihsZXQgaD1lLnRv''@;'; put 'put ''cDtoPD1lLmJvdHRvbTtoKyspe2NvbnN0IGY9e3NoZWV0TmFtZTplLnNoZWV0TmFtZSxhZGRyZXNzOmEubjJsKGkpK2gscm93OmgsY29sOml9O24uYWRkQ2VsbEV4KGYpfWVsc2Ugbi5hZGRDZWxsRXgoZSl9cmVtb3ZlKGUsbCl7Y29uc3Qgbj1hLmRlY29kZUV4KGUpO3RoaXMucmVtb3ZlRXgo''@;'; put 'put ''bixsKX1yZW1vdmVFeChlLGwpe3RoaXMuZ2V0TWF0cml4KGwpLnJlbW92ZUNlbGxFeChlKX1yZW1vdmVBbGxOYW1lcyhlKXtiLmVhY2godGhpcy5tYXRyaXhNYXAsbD0+e2wucmVtb3ZlQ2VsbEV4KGUpfSl9Zm9yRWFjaChlKXtiLmVhY2godGhpcy5tYXRyaXhNYXAsKGwsbik9PntsLmZvckVh''@;'; put 'put ''Y2goaT0+e2UobixpKX0pfSl9Z2V0TmFtZXMoZSl7cmV0dXJuIHRoaXMuZ2V0TmFtZXNFeChhLmRlY29kZUV4KGUpKX1nZXROYW1lc0V4KGUpe3JldHVybiBiLm1hcCh0aGlzLm1hdHJpeE1hcCwobCxuKT0+bC5maW5kQ2VsbEV4KGUpJiZuKS5maWx0ZXIoQm9vbGVhbil9X2V4cGxvcmUoZSxs''@;'; put 'put ''KXtsLm1hcms9ITE7Y29uc3R7c2hlZXROYW1lOm59PWwsaT1uZXcgcihsLnJvdyxsLmNvbCxsLnJvdyxsLmNvbCxuKTtsZXQgaCxmO2Z1bmN0aW9uIHUoZCx2KXtjb25zdCBfPWUuZmluZENlbGxBdChuLGQsbC5jb2wpO3JldHVybiEoIV98fCFfLm1hcmt8fChpW3ZdPWQsXy5tYXJrPSExLDAp''@;'; put 'put ''KX1mb3IoZj1sLnJvdy0xO3UoZiwidG9wIik7Zi0tKTtmb3IoZj1sLnJvdysxO3UoZiwiYm90dG9tIik7ZisrKTtmdW5jdGlvbiBwKGQsdil7Y29uc3QgXz1bXTtmb3IoZj1pLnRvcDtmPD1pLmJvdHRvbTtmKyspe2NvbnN0IEE9ZS5maW5kQ2VsbEF0KG4sZixkKTtpZighQXx8IUEubWFyayly''@;'; put 'put ''ZXR1cm4hMTtfLnB1c2goQSl9aVt2XT1kO2ZvcihsZXQgQT0wO0E8Xy5sZW5ndGg7QSsrKV9bQV0ubWFyaz0hMTtyZXR1cm4hMH1mb3IoaD1sLmNvbC0xO3AoaCwibGVmdCIpO2gtLSk7Zm9yKGg9bC5jb2wrMTtwKGgsInJpZ2h0Iik7aCsrKTtyZXR1cm4gaX1nZXRSYW5nZXMoZSxsKXtyZXR1''@;'; put 'put ''cm4obD1sfHx0aGlzLm1hdHJpeE1hcFtlXSk/KGwuZm9yRWFjaChuPT57bi5tYXJrPSEwfSkse25hbWU6ZSxyYW5nZXM6bC5tYXAobj0+bi5tYXJrJiZ0aGlzLl9leHBsb3JlKGwsbikpLmZpbHRlcihCb29sZWFuKS5tYXAobj0+bi4kc2hvcnRSYW5nZSl9KTp7bmFtZTplLHJhbmdlczpbXX19''@;'; put 'put ''bm9ybWFsaXNlTWF0cml4KGUsbCl7ZS5mb3JFYWNoSW5TaGVldChsLChuLGksaCk9PntuJiYobi5yb3c9PT1pJiZuLmNvbD09PWh8fChuLnJvdz1pLG4uY29sPWgsbi5hZGRyZXNzPWEubjJsKGgpK2kpKX0pfXNwbGljZVJvd3MoZSxsLG4saSl7Yi5lYWNoKHRoaXMubWF0cml4TWFwLGg9Pnto''@;'; put 'put ''LnNwbGljZVJvd3MoZSxsLG4saSksdGhpcy5ub3JtYWxpc2VNYXRyaXgoaCxlKX0pfXNwbGljZUNvbHVtbnMoZSxsLG4saSl7Yi5lYWNoKHRoaXMubWF0cml4TWFwLGg9PntoLnNwbGljZUNvbHVtbnMoZSxsLG4saSksdGhpcy5ub3JtYWxpc2VNYXRyaXgoaCxlKX0pfWdldCBtb2RlbCgpe3Jl''@;'; put 'put ''dHVybiBiLm1hcCh0aGlzLm1hdHJpeE1hcCwoZSxsKT0+dGhpcy5nZXRSYW5nZXMobCxlKSkuZmlsdGVyKGU9PmUucmFuZ2VzLmxlbmd0aCl9c2V0IG1vZGVsKGUpe2NvbnN0IGw9dGhpcy5tYXRyaXhNYXA9e307ZS5mb3JFYWNoKG49Pntjb25zdCBpPWxbbi5uYW1lXT1uZXcgbztuLnJhbmdl''@;'; put 'put ''cy5mb3JFYWNoKGg9Pnt0LnRlc3QoaC5zcGxpdCgiISIpLnBvcCgpfHwiIikmJmkuYWRkQ2VsbChoKX0pfSl9fX0seyIuLi91dGlscy9jZWxsLW1hdHJpeCI6MTgsIi4uL3V0aWxzL2NvbC1jYWNoZSI6MTksIi4uL3V0aWxzL3VuZGVyLWRhc2giOjI2LCIuL3JhbmdlIjoxMH1dLDc6W2Z1bmN0''@;'; put 'put ''aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7RS5leHBvcnRzPXtWYWx1ZVR5cGU6e051bGw6MCxNZXJnZToxLE51bWJlcjoyLFN0cmluZzozLERhdGU6NCxIeXBlcmxpbms6NSxGb3JtdWxhOjYsU2hhcmVkU3RyaW5nOjcsUmljaFRleHQ6OCxCb29sZWFuOjksRXJyb3I6MTB9LEZvcm11bGFUeXBl''@;'; put 'put ''OntOb25lOjAsTWFzdGVyOjEsU2hhcmVkOjJ9LFJlbGF0aW9uc2hpcFR5cGU6e05vbmU6MCxPZmZpY2VEb2N1bWVudDoxLFdvcmtzaGVldDoyLENhbGNDaGFpbjozLFNoYXJlZFN0cmluZ3M6NCxTdHlsZXM6NSxUaGVtZTo2LEh5cGVybGluazo3fSxEb2N1bWVudFR5cGU6e1hsc3g6MX0sUmVh''@;'; put 'put ''ZGluZ09yZGVyOntMZWZ0VG9SaWdodDoxLFJpZ2h0VG9MZWZ0OjJ9LEVycm9yVmFsdWU6e05vdEFwcGxpY2FibGU6IiNOL0EiLFJlZjoiI1JFRiEiLE5hbWU6IiNOQU1FPyIsRGl2WmVybzoiI0RJVi8wISIsTnVsbDoiI05VTEwhIixWYWx1ZToiI1ZBTFVFISIsTnVtOiIjTlVNISJ9fX0se31d''@;'; put 'put ''LDg6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi91dGlscy9jb2wtY2FjaGUiKSxhPXMoIi4vYW5jaG9yIik7RS5leHBvcnRzPWNsYXNze2NvbnN0cnVjdG9yKG8scil7dGhpcy53b3Jrc2hlZXQ9byx0aGlzLm1vZGVsPXJ9Z2V0IG1vZGVsKCl7c3dpdGNoKHRo''@;'; put 'put ''aXMudHlwZSl7Y2FzZSJiYWNrZ3JvdW5kIjpyZXR1cm57dHlwZTp0aGlzLnR5cGUsaW1hZ2VJZDp0aGlzLmltYWdlSWR9O2Nhc2UiaW1hZ2UiOnJldHVybnt0eXBlOnRoaXMudHlwZSxpbWFnZUlkOnRoaXMuaW1hZ2VJZCxoeXBlcmxpbmtzOnRoaXMucmFuZ2UuaHlwZXJsaW5rcyxyYW5nZTp7''@;'; put 'put ''dGw6dGhpcy5yYW5nZS50bC5tb2RlbCxicjp0aGlzLnJhbmdlLmJyJiZ0aGlzLnJhbmdlLmJyLm1vZGVsLGV4dDp0aGlzLnJhbmdlLmV4dCxlZGl0QXM6dGhpcy5yYW5nZS5lZGl0QXN9fTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBJbWFnZSBUeXBlIil9fXNldCBtb2RlbChv''@;'; put 'put ''KXtsZXR7dHlwZTpyLGltYWdlSWQ6dCxyYW5nZTplLGh5cGVybGlua3M6bH09bztpZih0aGlzLnR5cGU9cix0aGlzLmltYWdlSWQ9dCwiaW1hZ2UiPT09cilpZigic3RyaW5nIj09dHlwZW9mIGUpe2NvbnN0IG49Yi5kZWNvZGUoZSk7dGhpcy5yYW5nZT17dGw6bmV3IGEodGhpcy53b3Jrc2hl''@;'; put 'put ''ZXQse2NvbDpuLmxlZnQscm93Om4udG9wfSwtMSksYnI6bmV3IGEodGhpcy53b3Jrc2hlZXQse2NvbDpuLnJpZ2h0LHJvdzpuLmJvdHRvbX0sMCksZWRpdEFzOiJvbmVDZWxsIn19ZWxzZSB0aGlzLnJhbmdlPXt0bDpuZXcgYSh0aGlzLndvcmtzaGVldCxlLnRsLDApLGJyOmUuYnImJm5ldyBh''@;'; put 'put ''KHRoaXMud29ya3NoZWV0LGUuYnIsMCksZXh0OmUuZXh0LGVkaXRBczplLmVkaXRBcyxoeXBlcmxpbmtzOmx8fGUuaHlwZXJsaW5rc319fX0seyIuLi91dGlscy9jb2wtY2FjaGUiOjE5LCIuL2FuY2hvciI6Mn1dLDk6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIu''@;'; put 'put ''Li91dGlscy91bmRlci1kYXNoIik7Y2xhc3MgYXtjb25zdHJ1Y3RvcihyKXt0aGlzLm5vdGU9cn1nZXQgbW9kZWwoKXtsZXQgcj1udWxsO3JldHVybiByPSJzdHJpbmciPT10eXBlb2YgdGhpcy5ub3RlP3t0eXBlOiJub3RlIixub3RlOnt0ZXh0czpbe3RleHQ6dGhpcy5ub3RlfV19fTp7dHlw''@;'; put 'put ''ZToibm90ZSIsbm90ZTp0aGlzLm5vdGV9LGIuZGVlcE1lcmdlKHt9LGEuREVGQVVMVF9DT05GSUdTLHIpfXNldCBtb2RlbChyKXtjb25zdHtub3RlOnR9PXIse3RleHRzOmV9PXQ7dGhpcy5ub3RlPTE9PT1lLmxlbmd0aCYmMT09PU9iamVjdC5rZXlzKGVbMF0pLmxlbmd0aD9lWzBdLnRleHQ6''@;'; put 'put ''dH1zdGF0aWMgZnJvbU1vZGVsKHIpe2NvbnN0IHQ9bmV3IGE7cmV0dXJuIHQubW9kZWw9cix0fX1hLkRFRkFVTFRfQ09ORklHUz17bm90ZTp7bWFyZ2luczp7aW5zZXRtb2RlOiJhdXRvIixpbnNldDpbLjEzLC4xMywuMjUsLjI1XX0scHJvdGVjdGlvbjp7bG9ja2VkOiJUcnVlIixsb2NrVGV4''@;'; put 'put ''dDoiVHJ1ZSJ9LGVkaXRBczoiYWJzb2x1dGUifX0sRS5leHBvcnRzPWF9LHsiLi4vdXRpbHMvdW5kZXItZGFzaCI6MjZ9XSwxMDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uL3V0aWxzL2NvbC1jYWNoZSIpO2NsYXNzIGF7Y29uc3RydWN0b3IoKXt0aGlzLmRl''@;'; put 'put ''Y29kZShhcmd1bWVudHMpfXNldFRMQlIocix0LGUsbCxuKXtpZihhcmd1bWVudHMubGVuZ3RoPDQpe2NvbnN0IGk9Yi5kZWNvZGVBZGRyZXNzKHIpLGg9Yi5kZWNvZGVBZGRyZXNzKHQpO3RoaXMubW9kZWw9e3RvcDpNYXRoLm1pbihpLnJvdyxoLnJvdyksbGVmdDpNYXRoLm1pbihpLmNvbCxo''@;'; put 'put ''LmNvbCksYm90dG9tOk1hdGgubWF4KGkucm93LGgucm93KSxyaWdodDpNYXRoLm1heChpLmNvbCxoLmNvbCksc2hlZXROYW1lOmV9LHRoaXMuc2V0VExCUihpLnJvdyxpLmNvbCxoLnJvdyxoLmNvbCxuKX1lbHNlIHRoaXMubW9kZWw9e3RvcDpNYXRoLm1pbihyLGUpLGxlZnQ6TWF0aC5taW4o''@;'; put 'put ''dCxsKSxib3R0b206TWF0aC5tYXgocixlKSxyaWdodDpNYXRoLm1heCh0LGwpLHNoZWV0TmFtZTpufX1kZWNvZGUocil7c3dpdGNoKHIubGVuZ3RoKXtjYXNlIDU6dGhpcy5zZXRUTEJSKHJbMF0sclsxXSxyWzJdLHJbM10scls0XSk7YnJlYWs7Y2FzZSA0OnRoaXMuc2V0VExCUihyWzBdLHJb''@;'; put 'put ''MV0sclsyXSxyWzNdKTticmVhaztjYXNlIDM6dGhpcy5zZXRUTEJSKHJbMF0sclsxXSxyWzJdKTticmVhaztjYXNlIDI6dGhpcy5zZXRUTEJSKHJbMF0sclsxXSk7YnJlYWs7Y2FzZSAxOntjb25zdCB0PXJbMF07aWYodCBpbnN0YW5jZW9mIGEpdGhpcy5tb2RlbD17dG9wOnQubW9kZWwudG9w''@;'; put 'put ''LGxlZnQ6dC5tb2RlbC5sZWZ0LGJvdHRvbTp0Lm1vZGVsLmJvdHRvbSxyaWdodDp0Lm1vZGVsLnJpZ2h0LHNoZWV0TmFtZTp0LnNoZWV0TmFtZX07ZWxzZSBpZih0IGluc3RhbmNlb2YgQXJyYXkpdGhpcy5kZWNvZGUodCk7ZWxzZSBpZih0LnRvcCYmdC5sZWZ0JiZ0LmJvdHRvbSYmdC5yaWdo''@;'; put 'put ''dCl0aGlzLm1vZGVsPXt0b3A6dC50b3AsbGVmdDp0LmxlZnQsYm90dG9tOnQuYm90dG9tLHJpZ2h0OnQucmlnaHQsc2hlZXROYW1lOnQuc2hlZXROYW1lfTtlbHNle2NvbnN0IGU9Yi5kZWNvZGVFeCh0KTt0aGlzLm1vZGVsPWUudG9wP3t0b3A6ZS50b3AsbGVmdDplLmxlZnQsYm90dG9tOmUu''@;'; put 'put ''Ym90dG9tLHJpZ2h0OmUucmlnaHQsc2hlZXROYW1lOmUuc2hlZXROYW1lfTp7dG9wOmUucm93LGxlZnQ6ZS5jb2wsYm90dG9tOmUucm93LHJpZ2h0OmUuY29sLHNoZWV0TmFtZTplLnNoZWV0TmFtZX19YnJlYWt9Y2FzZSAwOnRoaXMubW9kZWw9e3RvcDowLGxlZnQ6MCxib3R0b206MCxyaWdo''@;'; put 'put ''dDowfTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIHRvIF9nZXREaW1lbnNpb25zKCkgLSAiK3IubGVuZ3RoKX19Z2V0IHRvcCgpe3JldHVybiB0aGlzLm1vZGVsLnRvcHx8MX1zZXQgdG9wKHIpe3RoaXMubW9kZWwudG9wPXJ9Z2V0''@;'; put 'put ''IGxlZnQoKXtyZXR1cm4gdGhpcy5tb2RlbC5sZWZ0fHwxfXNldCBsZWZ0KHIpe3RoaXMubW9kZWwubGVmdD1yfWdldCBib3R0b20oKXtyZXR1cm4gdGhpcy5tb2RlbC5ib3R0b218fDF9c2V0IGJvdHRvbShyKXt0aGlzLm1vZGVsLmJvdHRvbT1yfWdldCByaWdodCgpe3JldHVybiB0aGlzLm1v''@;'; put 'put ''ZGVsLnJpZ2h0fHwxfXNldCByaWdodChyKXt0aGlzLm1vZGVsLnJpZ2h0PXJ9Z2V0IHNoZWV0TmFtZSgpe3JldHVybiB0aGlzLm1vZGVsLnNoZWV0TmFtZX1zZXQgc2hlZXROYW1lKHIpe3RoaXMubW9kZWwuc2hlZXROYW1lPXJ9Z2V0IF9zZXJpYWxpc2VkU2hlZXROYW1lKCl7Y29uc3R7c2hl''@;'; put 'put ''ZXROYW1lOnJ9PXRoaXMubW9kZWw7cmV0dXJuIHI/L15bYS16QS1aMC05XSokLy50ZXN0KHIpP3IrIiEiOmAnJHtyfSchYDoiIn1leHBhbmQocix0LGUsbCl7KCF0aGlzLm1vZGVsLnRvcHx8cjx0aGlzLnRvcCkmJih0aGlzLnRvcD1yKSwoIXRoaXMubW9kZWwubGVmdHx8dDx0aGlzLmxlZnQp''@;'; put 'put ''JiYodGhpcy5sZWZ0PXQpLCghdGhpcy5tb2RlbC5ib3R0b218fGU+dGhpcy5ib3R0b20pJiYodGhpcy5ib3R0b209ZSksKCF0aGlzLm1vZGVsLnJpZ2h0fHxsPnRoaXMucmlnaHQpJiYodGhpcy5yaWdodD1sKX1leHBhbmRSb3cocil7aWYocil7Y29uc3R7ZGltZW5zaW9uczp0LG51bWJlcjpl''@;'; put 'put ''fT1yO3QmJnRoaXMuZXhwYW5kKGUsdC5taW4sZSx0Lm1heCl9fWV4cGFuZFRvQWRkcmVzcyhyKXtjb25zdCB0PWIuZGVjb2RlRXgocik7dGhpcy5leHBhbmQodC5yb3csdC5jb2wsdC5yb3csdC5jb2wpfWdldCB0bCgpe3JldHVybiBiLm4ybCh0aGlzLmxlZnQpK3RoaXMudG9wfWdldCAkdCRs''@;'; put 'put ''KCl7cmV0dXJuYCQke2IubjJsKHRoaXMubGVmdCl9JCR7dGhpcy50b3B9YH1nZXQgYnIoKXtyZXR1cm4gYi5uMmwodGhpcy5yaWdodCkrdGhpcy5ib3R0b219Z2V0ICRiJHIoKXtyZXR1cm5gJCR7Yi5uMmwodGhpcy5yaWdodCl9JCR7dGhpcy5ib3R0b219YH1nZXQgcmFuZ2UoKXtyZXR1cm5g''@;'; put 'put ''JHt0aGlzLl9zZXJpYWxpc2VkU2hlZXROYW1lK3RoaXMudGx9OiR7dGhpcy5icn1gfWdldCAkcmFuZ2UoKXtyZXR1cm5gJHt0aGlzLl9zZXJpYWxpc2VkU2hlZXROYW1lK3RoaXMuJHQkbH06JHt0aGlzLiRiJHJ9YH1nZXQgc2hvcnRSYW5nZSgpe3JldHVybiB0aGlzLmNvdW50PjE/dGhpcy5y''@;'; put 'put ''YW5nZTp0aGlzLl9zZXJpYWxpc2VkU2hlZXROYW1lK3RoaXMudGx9Z2V0ICRzaG9ydFJhbmdlKCl7cmV0dXJuIHRoaXMuY291bnQ+MT90aGlzLiRyYW5nZTp0aGlzLl9zZXJpYWxpc2VkU2hlZXROYW1lK3RoaXMuJHQkbH1nZXQgY291bnQoKXtyZXR1cm4oMSt0aGlzLmJvdHRvbS10aGlzLnRv''@;'; put 'put ''cCkqKDErdGhpcy5yaWdodC10aGlzLmxlZnQpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMucmFuZ2V9aW50ZXJzZWN0cyhyKXtyZXR1cm4hKHIuc2hlZXROYW1lJiZ0aGlzLnNoZWV0TmFtZSYmci5zaGVldE5hbWUhPT10aGlzLnNoZWV0TmFtZXx8ci5ib3R0b208dGhpcy50b3B8fHIudG9wPnRo''@;'; put 'put ''aXMuYm90dG9tfHxyLnJpZ2h0PHRoaXMubGVmdHx8ci5sZWZ0PnRoaXMucmlnaHQpfWNvbnRhaW5zKHIpe2NvbnN0IHQ9Yi5kZWNvZGVFeChyKTtyZXR1cm4gdGhpcy5jb250YWluc0V4KHQpfWNvbnRhaW5zRXgocil7cmV0dXJuKCFyLnNoZWV0TmFtZXx8IXRoaXMuc2hlZXROYW1lfHxyLnNo''@;'; put 'put ''ZWV0TmFtZT09PXRoaXMuc2hlZXROYW1lKSYmci5yb3c+PXRoaXMudG9wJiZyLnJvdzw9dGhpcy5ib3R0b20mJnIuY29sPj10aGlzLmxlZnQmJnIuY29sPD10aGlzLnJpZ2h0fWZvckVhY2hBZGRyZXNzKHIpe2ZvcihsZXQgdD10aGlzLmxlZnQ7dDw9dGhpcy5yaWdodDt0KyspZm9yKGxldCBl''@;'; put 'put ''PXRoaXMudG9wO2U8PXRoaXMuYm90dG9tO2UrKylyKGIuZW5jb2RlQWRkcmVzcyhlLHQpLGUsdCl9fUUuZXhwb3J0cz1hfSx7Ii4uL3V0aWxzL2NvbC1jYWNoZSI6MTl9XSwxMTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uL3V0aWxzL3VuZGVyLWRhc2giKSxh''@;'; put 'put ''PXMoIi4vZW51bXMiKSxvPXMoIi4uL3V0aWxzL2NvbC1jYWNoZSIpLHI9cygiLi9jZWxsIik7RS5leHBvcnRzPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fd29ya3NoZWV0PXQsdGhpcy5fbnVtYmVyPWUsdGhpcy5fY2VsbHM9W10sdGhpcy5zdHlsZT17fSx0aGlzLm91dGxpbmVMZXZl''@;'; put 'put ''bD0wfWdldCBudW1iZXIoKXtyZXR1cm4gdGhpcy5fbnVtYmVyfWdldCB3b3Jrc2hlZXQoKXtyZXR1cm4gdGhpcy5fd29ya3NoZWV0fWNvbW1pdCgpe3RoaXMuX3dvcmtzaGVldC5fY29tbWl0Um93KHRoaXMpfWRlc3Ryb3koKXtkZWxldGUgdGhpcy5fd29ya3NoZWV0LGRlbGV0ZSB0aGlzLl9j''@;'; put 'put ''ZWxscyxkZWxldGUgdGhpcy5zdHlsZX1maW5kQ2VsbCh0KXtyZXR1cm4gdGhpcy5fY2VsbHNbdC0xXX1nZXRDZWxsRXgodCl7bGV0IGU9dGhpcy5fY2VsbHNbdC5jb2wtMV07aWYoIWUpe2NvbnN0IGw9dGhpcy5fd29ya3NoZWV0LmdldENvbHVtbih0LmNvbCk7ZT1uZXcgcih0aGlzLGwsdC5h''@;'; put 'put ''ZGRyZXNzKSx0aGlzLl9jZWxsc1t0LmNvbC0xXT1lfXJldHVybiBlfWdldENlbGwodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtjb25zdCBlPXRoaXMuX3dvcmtzaGVldC5nZXRDb2x1bW5LZXkodCk7dD1lP2UubnVtYmVyOm8ubDJuKHQpfXJldHVybiB0aGlzLl9jZWxsc1t0LTFdfHx0aGlz''@;'; put 'put ''LmdldENlbGxFeCh7YWRkcmVzczpvLmVuY29kZUFkZHJlc3ModGhpcy5fbnVtYmVyLHQpLHJvdzp0aGlzLl9udW1iZXIsY29sOnR9KX1zcGxpY2UodCxlKXtjb25zdCBsPXQrZTtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShuPjI/bi0yOjApLGg9MjtoPG47aCsrKWlb''@;'; put 'put ''aC0yXT1hcmd1bWVudHNbaF07Y29uc3QgZj1pLmxlbmd0aC1lLHU9dGhpcy5fY2VsbHMubGVuZ3RoO2xldCBwLGQsdjtpZihmPDApZm9yKHA9dCtpLmxlbmd0aDtwPD11O3ArKyl2PXRoaXMuX2NlbGxzW3AtMV0sZD10aGlzLl9jZWxsc1twLWYtMV0sZD8odj10aGlzLmdldENlbGwocCksdi52''@;'; put 'put ''YWx1ZT1kLnZhbHVlLHYuc3R5bGU9ZC5zdHlsZSx2Ll9jb21tZW50PWQuX2NvbW1lbnQpOnYmJih2LnZhbHVlPW51bGwsdi5zdHlsZT17fSx2Ll9jb21tZW50PXZvaWQgMCk7ZWxzZSBpZihmPjApZm9yKHA9dTtwPj1sO3AtLSlkPXRoaXMuX2NlbGxzW3AtMV0sZD8odj10aGlzLmdldENlbGwo''@;'; put 'put ''cCtmKSx2LnZhbHVlPWQudmFsdWUsdi5zdHlsZT1kLnN0eWxlLHYuX2NvbW1lbnQ9ZC5fY29tbWVudCk6dGhpcy5fY2VsbHNbcCtmLTFdPXZvaWQgMDtmb3IocD0wO3A8aS5sZW5ndGg7cCsrKXY9dGhpcy5nZXRDZWxsKHQrcCksdi52YWx1ZT1pW3BdLHYuc3R5bGU9e30sdi5fY29tbWVudD12''@;'; put 'put ''b2lkIDB9ZWFjaENlbGwodCxlKXtpZihlfHwoZT10LHQ9bnVsbCksdCYmdC5pbmNsdWRlRW1wdHkpe2NvbnN0IGw9dGhpcy5fY2VsbHMubGVuZ3RoO2ZvcihsZXQgbj0xO248PWw7bisrKWUodGhpcy5nZXRDZWxsKG4pLG4pfWVsc2UgdGhpcy5fY2VsbHMuZm9yRWFjaCgobCxuKT0+e2wmJmwu''@;'; put 'put ''dHlwZSE9PWEuVmFsdWVUeXBlLk51bGwmJmUobCxuKzEpfSl9YWRkUGFnZUJyZWFrKHQsZSl7Y29uc3QgbD10aGlzLl93b3Jrc2hlZXQsbj1NYXRoLm1heCgwLHQtMSl8fDAsaT1NYXRoLm1heCgwLGUtMSl8fDE2ODM4LGg9e2lkOnRoaXMuX251bWJlcixtYXg6aSxtYW46MX07biYmKGgubWlu''@;'; put 'put ''PW4pLGwucm93QnJlYWtzLnB1c2goaCl9Z2V0IHZhbHVlcygpe2NvbnN0IHQ9W107cmV0dXJuIHRoaXMuX2NlbGxzLmZvckVhY2goZT0+e2UmJmUudHlwZSE9PWEuVmFsdWVUeXBlLk51bGwmJih0W2UuY29sXT1lLnZhbHVlKX0pLHR9c2V0IHZhbHVlcyh0KXtpZih0aGlzLl9jZWxscz1bXSx0''@;'; put 'put ''KWlmKHQgaW5zdGFuY2VvZiBBcnJheSl7bGV0IGU9MDt0Lmhhc093blByb3BlcnR5KCIwIikmJihlPTEpLHQuZm9yRWFjaCgobCxuKT0+e3ZvaWQgMCE9PWwmJih0aGlzLmdldENlbGxFeCh7YWRkcmVzczpvLmVuY29kZUFkZHJlc3ModGhpcy5fbnVtYmVyLG4rZSkscm93OnRoaXMuX251bWJl''@;'; put 'put ''cixjb2w6bitlfSkudmFsdWU9bCl9KX1lbHNlIHRoaXMuX3dvcmtzaGVldC5lYWNoQ29sdW1uS2V5KChlLGwpPT57dm9pZCAwIT09dFtsXSYmKHRoaXMuZ2V0Q2VsbEV4KHthZGRyZXNzOm8uZW5jb2RlQWRkcmVzcyh0aGlzLl9udW1iZXIsZS5udW1iZXIpLHJvdzp0aGlzLl9udW1iZXIsY29s''@;'; put 'put ''OmUubnVtYmVyfSkudmFsdWU9dFtsXSl9KX1nZXQgaGFzVmFsdWVzKCl7cmV0dXJuIGIuc29tZSh0aGlzLl9jZWxscyx0PT50JiZ0LnR5cGUhPT1hLlZhbHVlVHlwZS5OdWxsKX1nZXQgY2VsbENvdW50KCl7cmV0dXJuIHRoaXMuX2NlbGxzLmxlbmd0aH1nZXQgYWN0dWFsQ2VsbENvdW50KCl7''@;'; put 'put ''bGV0IHQ9MDtyZXR1cm4gdGhpcy5lYWNoQ2VsbCgoKT0+e3QrK30pLHR9Z2V0IGRpbWVuc2lvbnMoKXtsZXQgdD0wLGU9MDtyZXR1cm4gdGhpcy5fY2VsbHMuZm9yRWFjaChsPT57bCYmbC50eXBlIT09YS5WYWx1ZVR5cGUuTnVsbCYmKCghdHx8dD5sLmNvbCkmJih0PWwuY29sKSxlPGwuY29s''@;'; put 'put ''JiYoZT1sLmNvbCkpfSksdD4wP3ttaW46dCxtYXg6ZX06bnVsbH1fYXBwbHlTdHlsZSh0LGUpe3JldHVybiB0aGlzLnN0eWxlW3RdPWUsdGhpcy5fY2VsbHMuZm9yRWFjaChsPT57bCYmKGxbdF09ZSl9KSxlfWdldCBudW1GbXQoKXtyZXR1cm4gdGhpcy5zdHlsZS5udW1GbXR9c2V0IG51bUZt''@;'; put 'put ''dCh0KXt0aGlzLl9hcHBseVN0eWxlKCJudW1GbXQiLHQpfWdldCBmb250KCl7cmV0dXJuIHRoaXMuc3R5bGUuZm9udH1zZXQgZm9udCh0KXt0aGlzLl9hcHBseVN0eWxlKCJmb250Iix0KX1nZXQgYWxpZ25tZW50KCl7cmV0dXJuIHRoaXMuc3R5bGUuYWxpZ25tZW50fXNldCBhbGlnbm1lbnQo''@;'; put 'put ''dCl7dGhpcy5fYXBwbHlTdHlsZSgiYWxpZ25tZW50Iix0KX1nZXQgcHJvdGVjdGlvbigpe3JldHVybiB0aGlzLnN0eWxlLnByb3RlY3Rpb259c2V0IHByb3RlY3Rpb24odCl7dGhpcy5fYXBwbHlTdHlsZSgicHJvdGVjdGlvbiIsdCl9Z2V0IGJvcmRlcigpe3JldHVybiB0aGlzLnN0eWxlLmJv''@;'; put 'put ''cmRlcn1zZXQgYm9yZGVyKHQpe3RoaXMuX2FwcGx5U3R5bGUoImJvcmRlciIsdCl9Z2V0IGZpbGwoKXtyZXR1cm4gdGhpcy5zdHlsZS5maWxsfXNldCBmaWxsKHQpe3RoaXMuX2FwcGx5U3R5bGUoImZpbGwiLHQpfWdldCBoaWRkZW4oKXtyZXR1cm4hIXRoaXMuX2hpZGRlbn1zZXQgaGlkZGVu''@;'; put 'put ''KHQpe3RoaXMuX2hpZGRlbj10fWdldCBvdXRsaW5lTGV2ZWwoKXtyZXR1cm4gdGhpcy5fb3V0bGluZUxldmVsfHwwfXNldCBvdXRsaW5lTGV2ZWwodCl7dGhpcy5fb3V0bGluZUxldmVsPXR9Z2V0IGNvbGxhcHNlZCgpe3JldHVybiEhKHRoaXMuX291dGxpbmVMZXZlbCYmdGhpcy5fb3V0bGlu''@;'; put 'put ''ZUxldmVsPj10aGlzLl93b3Jrc2hlZXQucHJvcGVydGllcy5vdXRsaW5lTGV2ZWxSb3cpfWdldCBtb2RlbCgpe2NvbnN0IHQ9W107bGV0IGU9MCxsPTA7cmV0dXJuIHRoaXMuX2NlbGxzLmZvckVhY2gobj0+e2lmKG4pe2NvbnN0IGk9bi5tb2RlbDtpJiYoKCFlfHxlPm4uY29sKSYmKGU9bi5j''@;'; put 'put ''b2wpLGw8bi5jb2wmJihsPW4uY29sKSx0LnB1c2goaSkpfX0pLHRoaXMuaGVpZ2h0fHx0Lmxlbmd0aD97Y2VsbHM6dCxudW1iZXI6dGhpcy5udW1iZXIsbWluOmUsbWF4OmwsaGVpZ2h0OnRoaXMuaGVpZ2h0LHN0eWxlOnRoaXMuc3R5bGUsaGlkZGVuOnRoaXMuaGlkZGVuLG91dGxpbmVMZXZl''@;'; put 'put ''bDp0aGlzLm91dGxpbmVMZXZlbCxjb2xsYXBzZWQ6dGhpcy5jb2xsYXBzZWR9Om51bGx9c2V0IG1vZGVsKHQpe2lmKHQubnVtYmVyIT09dGhpcy5fbnVtYmVyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCByb3cgbnVtYmVyIGluIG1vZGVsIik7bGV0IGU7dGhpcy5fY2VsbHM9W10sdC5jZWxs''@;'; put 'put ''cy5mb3JFYWNoKGw9Pntzd2l0Y2gobC50eXBlKXtjYXNlIHIuVHlwZXMuTWVyZ2U6YnJlYWs7ZGVmYXVsdDp7bGV0IG47aWYobC5hZGRyZXNzKW49by5kZWNvZGVBZGRyZXNzKGwuYWRkcmVzcyk7ZWxzZSBpZihlKXtjb25zdHtyb3c6aX09ZSxoPWUuY29sKzE7bj17cm93OmksY29sOmgsYWRk''@;'; put 'put ''cmVzczpvLmVuY29kZUFkZHJlc3MoaSxoKSwkY29sJHJvdzpgJCR7by5uMmwoaCl9JCR7aX1gfX1lPW4sdGhpcy5nZXRDZWxsRXgobikubW9kZWw9bDticmVha319fSksdC5oZWlnaHQ/dGhpcy5oZWlnaHQ9dC5oZWlnaHQ6ZGVsZXRlIHRoaXMuaGVpZ2h0LHRoaXMuaGlkZGVuPXQuaGlkZGVu''@;'; put 'put ''LHRoaXMub3V0bGluZUxldmVsPXQub3V0bGluZUxldmVsfHwwLHRoaXMuc3R5bGU9dC5zdHlsZSYmSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnN0eWxlKSl8fHt9fX19LHsiLi4vdXRpbHMvY29sLWNhY2hlIjoxOSwiLi4vdXRpbHMvdW5kZXItZGFzaCI6MjYsIi4vY2VsbCI6MywiLi9l''@;'; put 'put ''bnVtcyI6N31dLDEyOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vdXRpbHMvY29sLWNhY2hlIik7Y2xhc3MgYXtjb25zdHJ1Y3RvcihyLHQsZSl7dGhpcy50YWJsZT1yLHRoaXMuY29sdW1uPXQsdGhpcy5pbmRleD1lfV9zZXQocix0KXt0aGlzLnRhYmxlLmNh''@;'; put 'put ''Y2hlU3RhdGUoKSx0aGlzLmNvbHVtbltyXT10fWdldCBuYW1lKCl7cmV0dXJuIHRoaXMuY29sdW1uLm5hbWV9c2V0IG5hbWUocil7dGhpcy5fc2V0KCJuYW1lIixyKX1nZXQgZmlsdGVyQnV0dG9uKCl7cmV0dXJuIHRoaXMuY29sdW1uLmZpbHRlckJ1dHRvbn1zZXQgZmlsdGVyQnV0dG9uKHIp''@;'; put 'put ''e3RoaXMuY29sdW1uLmZpbHRlckJ1dHRvbj1yfWdldCBzdHlsZSgpe3JldHVybiB0aGlzLmNvbHVtbi5zdHlsZX1zZXQgc3R5bGUocil7dGhpcy5jb2x1bW4uc3R5bGU9cn1nZXQgdG90YWxzUm93TGFiZWwoKXtyZXR1cm4gdGhpcy5jb2x1bW4udG90YWxzUm93TGFiZWx9c2V0IHRvdGFsc1Jv''@;'; put 'put ''d0xhYmVsKHIpe3RoaXMuX3NldCgidG90YWxzUm93TGFiZWwiLHIpfWdldCB0b3RhbHNSb3dGdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbHVtbi50b3RhbHNSb3dGdW5jdGlvbn1zZXQgdG90YWxzUm93RnVuY3Rpb24ocil7dGhpcy5fc2V0KCJ0b3RhbHNSb3dGdW5jdGlvbiIscil9Z2V0IHRv''@;'; put 'put ''dGFsc1Jvd1Jlc3VsdCgpe3JldHVybiB0aGlzLmNvbHVtbi50b3RhbHNSb3dSZXN1bHR9c2V0IHRvdGFsc1Jvd1Jlc3VsdChyKXt0aGlzLl9zZXQoInRvdGFsc1Jvd1Jlc3VsdCIscil9Z2V0IHRvdGFsc1Jvd0Zvcm11bGEoKXtyZXR1cm4gdGhpcy5jb2x1bW4udG90YWxzUm93Rm9ybXVsYX1z''@;'; put 'put ''ZXQgdG90YWxzUm93Rm9ybXVsYShyKXt0aGlzLl9zZXQoInRvdGFsc1Jvd0Zvcm11bGEiLHIpfX1FLmV4cG9ydHM9Y2xhc3N7Y29uc3RydWN0b3IobyxyKXt0aGlzLndvcmtzaGVldD1vLHImJih0aGlzLnRhYmxlPXIsdGhpcy52YWxpZGF0ZSgpLHRoaXMuc3RvcmUoKSl9Z2V0Rm9ybXVsYShv''@;'; put 'put ''KXtzd2l0Y2goby50b3RhbHNSb3dGdW5jdGlvbil7Y2FzZSJub25lIjpyZXR1cm4gbnVsbDtjYXNlImF2ZXJhZ2UiOnJldHVybmBTVUJUT1RBTCgxMDEsJHt0aGlzLnRhYmxlLm5hbWV9WyR7by5uYW1lfV0pYDtjYXNlImNvdW50TnVtcyI6cmV0dXJuYFNVQlRPVEFMKDEwMiwke3RoaXMudGFi''@;'; put 'put ''bGUubmFtZX1bJHtvLm5hbWV9XSlgO2Nhc2UiY291bnQiOnJldHVybmBTVUJUT1RBTCgxMDMsJHt0aGlzLnRhYmxlLm5hbWV9WyR7by5uYW1lfV0pYDtjYXNlIm1heCI6cmV0dXJuYFNVQlRPVEFMKDEwNCwke3RoaXMudGFibGUubmFtZX1bJHtvLm5hbWV9XSlgO2Nhc2UibWluIjpyZXR1cm5g''@;'; put 'put ''U1VCVE9UQUwoMTA1LCR7dGhpcy50YWJsZS5uYW1lfVske28ubmFtZX1dKWA7Y2FzZSJzdGREZXYiOnJldHVybmBTVUJUT1RBTCgxMDYsJHt0aGlzLnRhYmxlLm5hbWV9WyR7by5uYW1lfV0pYDtjYXNlInZhciI6cmV0dXJuYFNVQlRPVEFMKDEwNywke3RoaXMudGFibGUubmFtZX1bJHtvLm5h''@;'; put 'put ''bWV9XSlgO2Nhc2Uic3VtIjpyZXR1cm5gU1VCVE9UQUwoMTA5LCR7dGhpcy50YWJsZS5uYW1lfVske28ubmFtZX1dKWA7Y2FzZSJjdXN0b20iOnJldHVybiBvLnRvdGFsc1Jvd0Zvcm11bGE7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgVG90YWxzIFJvdyBGdW5jdGlvbjogIitv''@;'; put 'put ''LnRvdGFsc1Jvd0Z1bmN0aW9uKX19Z2V0IHdpZHRoKCl7cmV0dXJuIHRoaXMudGFibGUuY29sdW1ucy5sZW5ndGh9Z2V0IGhlaWdodCgpe3JldHVybiB0aGlzLnRhYmxlLnJvd3MubGVuZ3RofWdldCBmaWx0ZXJIZWlnaHQoKXtyZXR1cm4gdGhpcy5oZWlnaHQrKHRoaXMudGFibGUuaGVhZGVy''@;'; put 'put ''Um93PzE6MCl9Z2V0IHRhYmxlSGVpZ2h0KCl7cmV0dXJuIHRoaXMuZmlsdGVySGVpZ2h0Kyh0aGlzLnRhYmxlLnRvdGFsc1Jvdz8xOjApfXZhbGlkYXRlKCl7Y29uc3R7dGFibGU6b309dGhpcyxyPShmLHUscCk9Pnt2b2lkIDA9PT1mW3VdJiYoZlt1XT1wKX07cihvLCJoZWFkZXJSb3ciLCEw''@;'; put 'put ''KSxyKG8sInRvdGFsc1JvdyIsITEpLHIobywic3R5bGUiLHt9KSxyKG8uc3R5bGUsInRoZW1lIiwiVGFibGVTdHlsZU1lZGl1bTIiKSxyKG8uc3R5bGUsInNob3dGaXJzdENvbHVtbiIsITEpLHIoby5zdHlsZSwic2hvd0xhc3RDb2x1bW4iLCExKSxyKG8uc3R5bGUsInNob3dSb3dTdHJpcGVz''@;'; put 'put ''IiwhMSkscihvLnN0eWxlLCJzaG93Q29sdW1uU3RyaXBlcyIsITEpO2NvbnN0IHQ9KGYsdSk9PntpZighZil0aHJvdyBuZXcgRXJyb3IodSl9O3Qoby5yZWYsIlRhYmxlIG11c3QgaGF2ZSByZWYiKSx0KG8uY29sdW1ucywiVGFibGUgbXVzdCBoYXZlIGNvbHVtbiBkZWZpbml0aW9ucyIpLHQo''@;'; put 'put ''by5yb3dzLCJUYWJsZSBtdXN0IGhhdmUgcm93IGRlZmluaXRpb25zIiksby50bD1iLmRlY29kZUFkZHJlc3Moby5yZWYpO2NvbnN0e3JvdzplLGNvbDpsfT1vLnRsO3QoZT4wLCJUYWJsZSBtdXN0IGJlIG9uIHZhbGlkIHJvdyIpLHQobD4wLCJUYWJsZSBtdXN0IGJlIG9uIHZhbGlkIGNvbCIp''@;'; put 'put ''O2NvbnN0e3dpZHRoOm4sZmlsdGVySGVpZ2h0OmksdGFibGVIZWlnaHQ6aH09dGhpcztvLmF1dG9GaWx0ZXJSZWY9Yi5lbmNvZGUoZSxsLGUraS0xLGwrbi0xKSxvLnRhYmxlUmVmPWIuZW5jb2RlKGUsbCxlK2gtMSxsK24tMSksby5jb2x1bW5zLmZvckVhY2goKGYsdSk9Pnt0KGYubmFtZSxg''@;'; put 'put ''Q29sdW1uICR7dX0gbXVzdCBoYXZlIGEgbmFtZWApLDA9PT11P3IoZiwidG90YWxzUm93TGFiZWwiLCJUb3RhbCIpOihyKGYsInRvdGFsc1Jvd0Z1bmN0aW9uIiwibm9uZSIpLGYudG90YWxzUm93Rm9ybXVsYT10aGlzLmdldEZvcm11bGEoZikpfSl9c3RvcmUoKXtjb25zdCBvPShpLGgpPT57''@;'; put 'put ''aCYmT2JqZWN0LmtleXMoaCkuZm9yRWFjaChmPT57aVtmXT1oW2ZdfSl9LHt3b3Jrc2hlZXQ6cix0YWJsZTp0fT10aGlzLHtyb3c6ZSxjb2w6bH09dC50bDtsZXQgbj0wO2lmKHQuaGVhZGVyUm93KXtjb25zdCBpPXIuZ2V0Um93KGUrbisrKTt0LmNvbHVtbnMuZm9yRWFjaCgoaCxmKT0+e2Nv''@;'; put 'put ''bnN0e3N0eWxlOnUsbmFtZTpwfT1oLGQ9aS5nZXRDZWxsKGwrZik7ZC52YWx1ZT1wLG8oZCx1KX0pfWlmKHQucm93cy5mb3JFYWNoKGk9Pntjb25zdCBoPXIuZ2V0Um93KGUrbisrKTtpLmZvckVhY2goKGYsdSk9Pntjb25zdCBwPWguZ2V0Q2VsbChsK3UpO3AudmFsdWU9ZixvKHAsdC5jb2x1''@;'; put 'put ''bW5zW3VdLnN0eWxlKX0pfSksdC50b3RhbHNSb3cpe2NvbnN0IGk9ci5nZXRSb3coZStuKyspO3QuY29sdW1ucy5mb3JFYWNoKChoLGYpPT57Y29uc3QgdT1pLmdldENlbGwobCtmKTtpZigwPT09Zil1LnZhbHVlPWgudG90YWxzUm93TGFiZWw7ZWxzZXtjb25zdCBwPXRoaXMuZ2V0Rm9ybXVs''@;'; put 'put ''YShoKTt1LnZhbHVlPXA/e2Zvcm11bGE6aC50b3RhbHNSb3dGb3JtdWxhLHJlc3VsdDpoLnRvdGFsc1Jvd1Jlc3VsdH06bnVsbH1vKHUsaC5zdHlsZSl9KX19bG9hZChvKXtjb25zdHt0YWJsZTpyfT10aGlzLHtyb3c6dCxjb2w6ZX09ci50bDtsZXQgbD0wO2lmKHIuaGVhZGVyUm93KXtjb25z''@;'; put 'put ''dCBuPW8uZ2V0Um93KHQrbCsrKTtyLmNvbHVtbnMuZm9yRWFjaCgoaSxoKT0+e24uZ2V0Q2VsbChlK2gpLnZhbHVlPWkubmFtZX0pfWlmKHIucm93cy5mb3JFYWNoKG49Pntjb25zdCBpPW8uZ2V0Um93KHQrbCsrKTtuLmZvckVhY2goKGgsZik9PntpLmdldENlbGwoZStmKS52YWx1ZT1ofSl9''@;'; put 'put ''KSxyLnRvdGFsc1Jvdyl7Y29uc3Qgbj1vLmdldFJvdyh0K2wrKyk7ci5jb2x1bW5zLmZvckVhY2goKGksaCk9Pntjb25zdCBmPW4uZ2V0Q2VsbChlK2gpOzA9PT1oP2YudmFsdWU9aS50b3RhbHNSb3dMYWJlbDp0aGlzLmdldEZvcm11bGEoaSkmJihmLnZhbHVlPXtmb3JtdWxhOmkudG90YWxz''@;'; put 'put ''Um93Rm9ybXVsYSxyZXN1bHQ6aS50b3RhbHNSb3dSZXN1bHR9KX0pfX1nZXQgbW9kZWwoKXtyZXR1cm4gdGhpcy50YWJsZX1zZXQgbW9kZWwobyl7dGhpcy50YWJsZT1vfWNhY2hlU3RhdGUoKXt0aGlzLl9jYWNoZXx8KHRoaXMuX2NhY2hlPXtyZWY6dGhpcy5yZWYsd2lkdGg6dGhpcy53aWR0''@;'; put 'put ''aCx0YWJsZUhlaWdodDp0aGlzLnRhYmxlSGVpZ2h0fSl9Y29tbWl0KCl7aWYoIXRoaXMuX2NhY2hlKXJldHVybjt0aGlzLnZhbGlkYXRlKCk7Y29uc3Qgbz1iLmRlY29kZUFkZHJlc3ModGhpcy5fY2FjaGUucmVmKTtpZih0aGlzLnJlZiE9PXRoaXMuX2NhY2hlLnJlZilmb3IobGV0IHI9MDty''@;'; put 'put ''PHRoaXMuX2NhY2hlLnRhYmxlSGVpZ2h0O3IrKyl7Y29uc3QgdD10aGlzLndvcmtzaGVldC5nZXRSb3coby5yb3crcik7Zm9yKGxldCBlPTA7ZTx0aGlzLl9jYWNoZS53aWR0aDtlKyspdC5nZXRDZWxsKG8uY29sK2UpLnZhbHVlPW51bGx9ZWxzZXtmb3IobGV0IHI9dGhpcy50YWJsZUhlaWdo''@;'; put 'put ''dDtyPHRoaXMuX2NhY2hlLnRhYmxlSGVpZ2h0O3IrKyl7Y29uc3QgdD10aGlzLndvcmtzaGVldC5nZXRSb3coby5yb3crcik7Zm9yKGxldCBlPTA7ZTx0aGlzLl9jYWNoZS53aWR0aDtlKyspdC5nZXRDZWxsKG8uY29sK2UpLnZhbHVlPW51bGx9Zm9yKGxldCByPTA7cjx0aGlzLnRhYmxlSGVp''@;'; put 'put ''Z2h0O3IrKyl7Y29uc3QgdD10aGlzLndvcmtzaGVldC5nZXRSb3coby5yb3crcik7Zm9yKGxldCBlPXRoaXMud2lkdGg7ZTx0aGlzLl9jYWNoZS53aWR0aDtlKyspdC5nZXRDZWxsKG8uY29sK2UpLnZhbHVlPW51bGx9fXRoaXMuc3RvcmUoKX1hZGRSb3cobyxyKXt0aGlzLmNhY2hlU3RhdGUo''@;'; put 'put ''KSx2b2lkIDA9PT1yP3RoaXMudGFibGUucm93cy5wdXNoKG8pOnRoaXMudGFibGUucm93cy5zcGxpY2UociwwLG8pfXJlbW92ZVJvd3Mobyl7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7dGhpcy5jYWNoZVN0YXRlKCksdGhp''@;'; put 'put ''cy50YWJsZS5yb3dzLnNwbGljZShvLHIpfWdldENvbHVtbihvKXtyZXR1cm4gbmV3IGEodGhpcyx0aGlzLnRhYmxlLmNvbHVtbnNbb10sbyl9YWRkQ29sdW1uKG8scix0KXt0aGlzLmNhY2hlU3RhdGUoKSx2b2lkIDA9PT10Pyh0aGlzLnRhYmxlLmNvbHVtbnMucHVzaChvKSx0aGlzLnRhYmxl''@;'; put 'put ''LnJvd3MuZm9yRWFjaCgoZSxsKT0+e2UucHVzaChyW2xdKX0pKToodGhpcy50YWJsZS5jb2x1bW5zLnNwbGljZSh0LDAsbyksdGhpcy50YWJsZS5yb3dzLmZvckVhY2goKGUsbCk9PntlLnNwbGljZSh0LDAscltsXSl9KSl9cmVtb3ZlQ29sdW1ucyhvKXtsZXQgcj1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTt0aGlzLmNhY2hlU3RhdGUoKSx0aGlzLnRhYmxlLmNvbHVtbnMuc3BsaWNlKG8sciksdGhpcy50YWJsZS5yb3dzLmZvckVhY2godD0+e3Quc3BsaWNlKG8scil9KX1fYXNzaWduKG8scix0KXt0aGlzLmNhY2hlU3RhdGUo''@;'; put 'put ''KSxvW3JdPXR9Z2V0IHJlZigpe3JldHVybiB0aGlzLnRhYmxlLnJlZn1zZXQgcmVmKG8pe3RoaXMuX2Fzc2lnbih0aGlzLnRhYmxlLCJyZWYiLG8pfWdldCBuYW1lKCl7cmV0dXJuIHRoaXMudGFibGUubmFtZX1zZXQgbmFtZShvKXt0aGlzLnRhYmxlLm5hbWU9b31nZXQgZGlzcGxheU5hbWUo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy50YWJsZS5kaXNwbHlOYW1lfHx0aGlzLnRhYmxlLm5hbWV9c2V0IGRpc3BsYXlOYW1lbmFtZShvKXt0aGlzLnRhYmxlLmRpc3BsYXlOYW1lPW99Z2V0IGhlYWRlclJvdygpe3JldHVybiB0aGlzLnRhYmxlLmhlYWRlclJvd31zZXQgaGVhZGVyUm93KG8pe3RoaXMuX2Fz''@;'; put 'put ''c2lnbih0aGlzLnRhYmxlLCJoZWFkZXJSb3ciLG8pfWdldCB0b3RhbHNSb3coKXtyZXR1cm4gdGhpcy50YWJsZS50b3RhbHNSb3d9c2V0IHRvdGFsc1JvdyhvKXt0aGlzLl9hc3NpZ24odGhpcy50YWJsZSwidG90YWxzUm93IixvKX1nZXQgdGhlbWUoKXtyZXR1cm4gdGhpcy50YWJsZS5zdHls''@;'; put 'put ''ZS5uYW1lfXNldCB0aGVtZShvKXt0aGlzLnRhYmxlLnN0eWxlLm5hbWU9b31nZXQgc2hvd0ZpcnN0Q29sdW1uKCl7cmV0dXJuIHRoaXMudGFibGUuc3R5bGUuc2hvd0ZpcnN0Q29sdW1ufXNldCBzaG93Rmlyc3RDb2x1bW4obyl7dGhpcy50YWJsZS5zdHlsZS5zaG93Rmlyc3RDb2x1bW49b31n''@;'; put 'put ''ZXQgc2hvd0xhc3RDb2x1bW4oKXtyZXR1cm4gdGhpcy50YWJsZS5zdHlsZS5zaG93TGFzdENvbHVtbn1zZXQgc2hvd0xhc3RDb2x1bW4obyl7dGhpcy50YWJsZS5zdHlsZS5zaG93TGFzdENvbHVtbj1vfWdldCBzaG93Um93U3RyaXBlcygpe3JldHVybiB0aGlzLnRhYmxlLnN0eWxlLnNob3dS''@;'; put 'put ''b3dTdHJpcGVzfXNldCBzaG93Um93U3RyaXBlcyhvKXt0aGlzLnRhYmxlLnN0eWxlLnNob3dSb3dTdHJpcGVzPW99Z2V0IHNob3dDb2x1bW5TdHJpcGVzKCl7cmV0dXJuIHRoaXMudGFibGUuc3R5bGUuc2hvd0NvbHVtblN0cmlwZXN9c2V0IHNob3dDb2x1bW5TdHJpcGVzKG8pe3RoaXMudGFi''@;'; put 'put ''bGUuc3R5bGUuc2hvd0NvbHVtblN0cmlwZXM9b319fSx7Ii4uL3V0aWxzL2NvbC1jYWNoZSI6MTl9XSwxMzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4vd29ya3NoZWV0IiksYT1zKCIuL2RlZmluZWQtbmFtZXMiKSxvPXMoIi4uL3hsc3gveGxzeCIpLHI9cygi''@;'; put 'put ''Li4vY3N2L2NzdiIpO0UuZXhwb3J0cz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY2F0ZWdvcnk9IiIsdGhpcy5jb21wYW55PSIiLHRoaXMuY3JlYXRlZD1uZXcgRGF0ZSx0aGlzLmRlc2NyaXB0aW9uPSIiLHRoaXMua2V5d29yZHM9IiIsdGhpcy5tYW5hZ2VyPSIiLHRoaXMubW9kaWZpZWQ9''@;'; put 'put ''dGhpcy5jcmVhdGVkLHRoaXMucHJvcGVydGllcz17fSx0aGlzLmNhbGNQcm9wZXJ0aWVzPXt9LHRoaXMuX3dvcmtzaGVldHM9W10sdGhpcy5zdWJqZWN0PSIiLHRoaXMudGl0bGU9IiIsdGhpcy52aWV3cz1bXSx0aGlzLm1lZGlhPVtdLHRoaXMuX2RlZmluZWROYW1lcz1uZXcgYX1nZXQgeGxz''@;'; put 'put ''eCgpe3JldHVybiB0aGlzLl94bHN4fHwodGhpcy5feGxzeD1uZXcgbyh0aGlzKSksdGhpcy5feGxzeH1nZXQgY3N2KCl7cmV0dXJuIHRoaXMuX2Nzdnx8KHRoaXMuX2Nzdj1uZXcgcih0aGlzKSksdGhpcy5fY3N2fWdldCBuZXh0SWQoKXtmb3IobGV0IHQ9MTt0PHRoaXMuX3dvcmtzaGVldHMu''@;'; put 'put ''bGVuZ3RoO3QrKylpZighdGhpcy5fd29ya3NoZWV0c1t0XSlyZXR1cm4gdDtyZXR1cm4gdGhpcy5fd29ya3NoZWV0cy5sZW5ndGh8fDF9YWRkV29ya3NoZWV0KHQsZSl7Y29uc3QgbD10aGlzLm5leHRJZDtlJiYoInN0cmluZyI9PXR5cGVvZiBlPyhjb25zb2xlLnRyYWNlKCd0YWJDb2xvciBh''@;'; put 'put ''cmd1bWVudCBpcyBub3cgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB3b3JrYm9vay5hZGRXb3Jrc2hlZXQobmFtZSwge3Byb3BlcnRpZXM6IHsgdGFiQ29sb3I6IHsgYXJnYjogInJiZyB2YWx1ZSIgfSB9JyksZT17cHJvcGVydGllczp7dGFiQ29sb3I6e2FyZ2I6ZX19fSk6KGUuYXJnYnx8ZS50''@;'; put 'put ''aGVtZXx8ZS5pbmRleGVkKSYmKGNvbnNvbGUudHJhY2UoInRhYkNvbG9yIGFyZ3VtZW50IGlzIG5vdyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHdvcmtib29rLmFkZFdvcmtzaGVldChuYW1lLCB7cHJvcGVydGllczogeyB0YWJDb2xvcjogeyAuLi4gfSB9IiksZT17cHJvcGVydGllczp7dGFi''@;'; put 'put ''Q29sb3I6ZX19KSk7Y29uc3Qgbj10aGlzLl93b3Jrc2hlZXRzLnJlZHVjZSgoZix1KT0+KHUmJnUub3JkZXJObyk+Zj91Lm9yZGVyTm86ZiwwKSxpPU9iamVjdC5hc3NpZ24oe30sZSx7aWQ6bCxuYW1lOnQsb3JkZXJObzpuKzEsd29ya2Jvb2s6dGhpc30pLGg9bmV3IGIoaSk7cmV0dXJuIHRo''@;'; put 'put ''aXMuX3dvcmtzaGVldHNbbF09aCxofXJlbW92ZVdvcmtzaGVldEV4KHQpe2RlbGV0ZSB0aGlzLl93b3Jrc2hlZXRzW3QuaWRdfXJlbW92ZVdvcmtzaGVldCh0KXtjb25zdCBlPXRoaXMuZ2V0V29ya3NoZWV0KHQpO2UmJmUuZGVzdHJveSgpfWdldFdvcmtzaGVldCh0KXtyZXR1cm4gdm9pZCAw''@;'; put 'put ''PT09dD90aGlzLl93b3Jrc2hlZXRzLmZpbmQoQm9vbGVhbik6Im51bWJlciI9PXR5cGVvZiB0P3RoaXMuX3dvcmtzaGVldHNbdF06InN0cmluZyI9PXR5cGVvZiB0P3RoaXMuX3dvcmtzaGVldHMuZmluZChlPT5lJiZlLm5hbWU9PT10KTp2b2lkIDB9Z2V0IHdvcmtzaGVldHMoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fd29ya3NoZWV0cy5zbGljZSgxKS5zb3J0KCh0LGUpPT50Lm9yZGVyTm8tZS5vcmRlck5vKS5maWx0ZXIoQm9vbGVhbil9ZWFjaFNoZWV0KHQpe3RoaXMud29ya3NoZWV0cy5mb3JFYWNoKGU9Pnt0KGUsZS5pZCl9KX1nZXQgZGVmaW5lZE5hbWVzKCl7cmV0dXJuIHRoaXMuX2RlZmlu''@;'; put 'put ''ZWROYW1lc31jbGVhclRoZW1lcygpe3RoaXMuX3RoZW1lcz12b2lkIDB9YWRkSW1hZ2UodCl7Y29uc3QgZT10aGlzLm1lZGlhLmxlbmd0aDtyZXR1cm4gdGhpcy5tZWRpYS5wdXNoKE9iamVjdC5hc3NpZ24oe30sdCx7dHlwZToiaW1hZ2UifSkpLGV9Z2V0SW1hZ2UodCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''bWVkaWFbdF19Z2V0IG1vZGVsKCl7cmV0dXJue2NyZWF0b3I6dGhpcy5jcmVhdG9yfHwiVW5rbm93biIsbGFzdE1vZGlmaWVkQnk6dGhpcy5sYXN0TW9kaWZpZWRCeXx8IlVua25vd24iLGxhc3RQcmludGVkOnRoaXMubGFzdFByaW50ZWQsY3JlYXRlZDp0aGlzLmNyZWF0ZWQsbW9kaWZpZWQ6''@;'; put 'put ''dGhpcy5tb2RpZmllZCxwcm9wZXJ0aWVzOnRoaXMucHJvcGVydGllcyx3b3Jrc2hlZXRzOnRoaXMud29ya3NoZWV0cy5tYXAodD0+dC5tb2RlbCksc2hlZXRzOnRoaXMud29ya3NoZWV0cy5tYXAodD0+dC5tb2RlbCkuZmlsdGVyKEJvb2xlYW4pLGRlZmluZWROYW1lczp0aGlzLl9kZWZpbmVk''@;'; put 'put ''TmFtZXMubW9kZWwsdmlld3M6dGhpcy52aWV3cyxjb21wYW55OnRoaXMuY29tcGFueSxtYW5hZ2VyOnRoaXMubWFuYWdlcix0aXRsZTp0aGlzLnRpdGxlLHN1YmplY3Q6dGhpcy5zdWJqZWN0LGtleXdvcmRzOnRoaXMua2V5d29yZHMsY2F0ZWdvcnk6dGhpcy5jYXRlZ29yeSxkZXNjcmlwdGlv''@;'; put 'put ''bjp0aGlzLmRlc2NyaXB0aW9uLGxhbmd1YWdlOnRoaXMubGFuZ3VhZ2UscmV2aXNpb246dGhpcy5yZXZpc2lvbixjb250ZW50U3RhdHVzOnRoaXMuY29udGVudFN0YXR1cyx0aGVtZXM6dGhpcy5fdGhlbWVzLG1lZGlhOnRoaXMubWVkaWEsY2FsY1Byb3BlcnRpZXM6dGhpcy5jYWxjUHJvcGVy''@;'; put 'put ''dGllc319c2V0IG1vZGVsKHQpe3RoaXMuY3JlYXRvcj10LmNyZWF0b3IsdGhpcy5sYXN0TW9kaWZpZWRCeT10Lmxhc3RNb2RpZmllZEJ5LHRoaXMubGFzdFByaW50ZWQ9dC5sYXN0UHJpbnRlZCx0aGlzLmNyZWF0ZWQ9dC5jcmVhdGVkLHRoaXMubW9kaWZpZWQ9dC5tb2RpZmllZCx0aGlzLmNv''@;'; put 'put ''bXBhbnk9dC5jb21wYW55LHRoaXMubWFuYWdlcj10Lm1hbmFnZXIsdGhpcy50aXRsZT10LnRpdGxlLHRoaXMuc3ViamVjdD10LnN1YmplY3QsdGhpcy5rZXl3b3Jkcz10LmtleXdvcmRzLHRoaXMuY2F0ZWdvcnk9dC5jYXRlZ29yeSx0aGlzLmRlc2NyaXB0aW9uPXQuZGVzY3JpcHRpb24sdGhp''@;'; put 'put ''cy5sYW5ndWFnZT10Lmxhbmd1YWdlLHRoaXMucmV2aXNpb249dC5yZXZpc2lvbix0aGlzLmNvbnRlbnRTdGF0dXM9dC5jb250ZW50U3RhdHVzLHRoaXMucHJvcGVydGllcz10LnByb3BlcnRpZXMsdGhpcy5jYWxjUHJvcGVydGllcz10LmNhbGNQcm9wZXJ0aWVzLHRoaXMuX3dvcmtzaGVldHM9''@;'; put 'put ''W10sdC53b3Jrc2hlZXRzLmZvckVhY2goZT0+e2NvbnN0e2lkOmwsbmFtZTpuLHN0YXRlOml9PWUsaD10LnNoZWV0cyYmdC5zaGVldHMuZmluZEluZGV4KGY9PmYuaWQ9PT1sKTsodGhpcy5fd29ya3NoZWV0c1tsXT1uZXcgYih7aWQ6bCxuYW1lOm4sb3JkZXJObzpoLHN0YXRlOmksd29ya2Jv''@;'; put 'put ''b2s6dGhpc30pKS5tb2RlbD1lfSksdGhpcy5fZGVmaW5lZE5hbWVzLm1vZGVsPXQuZGVmaW5lZE5hbWVzLHRoaXMudmlld3M9dC52aWV3cyx0aGlzLl90aGVtZXM9dC50aGVtZXMsdGhpcy5tZWRpYT10Lm1lZGlhfHxbXX19fSx7Ii4uL2Nzdi9jc3YiOjEsIi4uL3hsc3gveGxzeCI6MTQ0LCIu''@;'; put 'put ''L2RlZmluZWQtbmFtZXMiOjYsIi4vd29ya3NoZWV0IjoxNH1dLDE0OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vdXRpbHMvdW5kZXItZGFzaCIpLGE9cygiLi4vdXRpbHMvY29sLWNhY2hlIiksbz1zKCIuL3JhbmdlIikscj1zKCIuL3JvdyIpLHQ9cygiLi9j''@;'; put 'put ''b2x1bW4iKSxlPXMoIi4vZW51bXMiKSxsPXMoIi4vaW1hZ2UiKSxuPXMoIi4vdGFibGUiKSxpPXMoIi4vZGF0YS12YWxpZGF0aW9ucyIpLGg9cygiLi4vdXRpbHMvZW5jcnlwdG9yIikse2NvcHlTdHlsZTpmfT1zKCIuLi91dGlscy9jb3B5LXN0eWxlIik7RS5leHBvcnRzPWNsYXNze2NvbnN0''@;'; put 'put ''cnVjdG9yKHUpe3RoaXMuX3dvcmtib29rPSh1PXV8fHt9KS53b3JrYm9vayx0aGlzLmlkPXUuaWQsdGhpcy5vcmRlck5vPXUub3JkZXJObyx0aGlzLm5hbWU9dS5uYW1lLHRoaXMuc3RhdGU9dS5zdGF0ZXx8InZpc2libGUiLHRoaXMuX3Jvd3M9W10sdGhpcy5fY29sdW1ucz1udWxsLHRoaXMu''@;'; put 'put ''X2tleXM9e30sdGhpcy5fbWVyZ2VzPXt9LHRoaXMucm93QnJlYWtzPVtdLHRoaXMucHJvcGVydGllcz1PYmplY3QuYXNzaWduKHt9LHtkZWZhdWx0Um93SGVpZ2h0OjE1LGR5RGVzY2VudDo1NSxvdXRsaW5lTGV2ZWxDb2w6MCxvdXRsaW5lTGV2ZWxSb3c6MH0sdS5wcm9wZXJ0aWVzKSx0aGlz''@;'; put 'put ''LnBhZ2VTZXR1cD1PYmplY3QuYXNzaWduKHt9LHttYXJnaW5zOntsZWZ0Oi43LHJpZ2h0Oi43LHRvcDouNzUsYm90dG9tOi43NSxoZWFkZXI6LjMsZm9vdGVyOi4zfSxvcmllbnRhdGlvbjoicG9ydHJhaXQiLGhvcml6b250YWxEcGk6NDI5NDk2NzI5NSx2ZXJ0aWNhbERwaTo0Mjk0OTY3Mjk1''@;'; put 'put ''LGZpdFRvUGFnZTohKCF1LnBhZ2VTZXR1cHx8IXUucGFnZVNldHVwLmZpdFRvV2lkdGgmJiF1LnBhZ2VTZXR1cC5maXRUb0hlaWdodHx8dS5wYWdlU2V0dXAuc2NhbGUpLHBhZ2VPcmRlcjoiZG93blRoZW5PdmVyIixibGFja0FuZFdoaXRlOiExLGRyYWZ0OiExLGNlbGxDb21tZW50czoiTm9u''@;'; put 'put ''ZSIsZXJyb3JzOiJkaXNwbGF5ZWQiLHNjYWxlOjEwMCxmaXRUb1dpZHRoOjEsZml0VG9IZWlnaHQ6MSxwYXBlclNpemU6dm9pZCAwLHNob3dSb3dDb2xIZWFkZXJzOiExLHNob3dHcmlkTGluZXM6ITEsZmlyc3RQYWdlTnVtYmVyOnZvaWQgMCxob3Jpem9udGFsQ2VudGVyZWQ6ITEsdmVydGlj''@;'; put 'put ''YWxDZW50ZXJlZDohMSxyb3dCcmVha3M6bnVsbCxjb2xCcmVha3M6bnVsbH0sdS5wYWdlU2V0dXApLHRoaXMuaGVhZGVyRm9vdGVyPU9iamVjdC5hc3NpZ24oe30se2RpZmZlcmVudEZpcnN0OiExLGRpZmZlcmVudE9kZEV2ZW46ITEsb2RkSGVhZGVyOm51bGwsb2RkRm9vdGVyOm51bGwsZXZl''@;'; put 'put ''bkhlYWRlcjpudWxsLGV2ZW5Gb290ZXI6bnVsbCxmaXJzdEhlYWRlcjpudWxsLGZpcnN0Rm9vdGVyOm51bGx9LHUuaGVhZGVyRm9vdGVyKSx0aGlzLmRhdGFWYWxpZGF0aW9ucz1uZXcgaSx0aGlzLnZpZXdzPXUudmlld3N8fFtdLHRoaXMuYXV0b0ZpbHRlcj11LmF1dG9GaWx0ZXJ8fG51bGws''@;'; put 'put ''dGhpcy5fbWVkaWE9W10sdGhpcy5zaGVldFByb3RlY3Rpb249bnVsbCx0aGlzLnRhYmxlcz17fSx0aGlzLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3M9W119Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5fbmFtZX1zZXQgbmFtZSh1KXtpZih2b2lkIDA9PT11JiYodT0ic2hlZXQiK3RoaXMuaWQpLHRo''@;'; put 'put ''aXMuX25hbWUhPT11KXtpZigic3RyaW5nIiE9dHlwZW9mIHUpdGhyb3cgbmV3IEVycm9yKCJUaGUgbmFtZSBoYXMgdG8gYmUgYSBzdHJpbmcuIik7aWYoIiI9PT11KXRocm93IG5ldyBFcnJvcigiVGhlIG5hbWUgY2FuJ3QgYmUgZW1wdHkuIik7aWYoIkhpc3RvcnkiPT09dSl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoJ1RoZSBuYW1lICJIaXN0b3J5IiBpcyBwcm90ZWN0ZWQuIFBsZWFzZSB1c2UgYSBkaWZmZXJlbnQgbmFtZS4nKTtpZigvWyo/Oi9cXFtcXV0vLnRlc3QodSkpdGhyb3cgbmV3IEVycm9yKGBXb3Jrc2hlZXQgbmFtZSAke3V9IGNhbm5vdCBpbmNsdWRlIGFueSBvZiB0aGUgZm9sbG93''@;'; put 'put ''aW5nIGNoYXJhY3RlcnM6ICogPyA6IFxcIC8gWyBdYCk7aWYoLyheJyl8KCckKS8udGVzdCh1KSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBmaXJzdCBvciBsYXN0IGNoYXJhY3RlciBvZiB3b3Jrc2hlZXQgbmFtZSBjYW5ub3QgYmUgYSBzaW5nbGUgcXVvdGF0aW9uIG1hcms6ICIrdSk7aWYodSYm''@;'; put 'put ''dS5sZW5ndGg+MzEmJihjb25zb2xlLndhcm4oYFdvcmtzaGVldCBuYW1lICR7dX0gZXhjZWVkcyAzMSBjaGFycy4gVGhpcyB3aWxsIGJlIHRydW5jYXRlZGApLHU9dS5zdWJzdHJpbmcoMCwzMSkpLHRoaXMuX3dvcmtib29rLl93b3Jrc2hlZXRzLmZpbmQocD0+cCYmcC5uYW1lLnRvTG93ZXJD''@;'; put 'put ''YXNlKCk9PT11LnRvTG93ZXJDYXNlKCkpKXRocm93IG5ldyBFcnJvcigiV29ya3NoZWV0IG5hbWUgYWxyZWFkeSBleGlzdHM6ICIrdSk7dGhpcy5fbmFtZT11fX1nZXQgd29ya2Jvb2soKXtyZXR1cm4gdGhpcy5fd29ya2Jvb2t9ZGVzdHJveSgpe3RoaXMuX3dvcmtib29rLnJlbW92ZVdvcmtz''@;'; put 'put ''aGVldEV4KHRoaXMpfWdldCBkaW1lbnNpb25zKCl7Y29uc3QgdT1uZXcgbztyZXR1cm4gdGhpcy5fcm93cy5mb3JFYWNoKHA9PntpZihwKXtjb25zdCBkPXAuZGltZW5zaW9ucztkJiZ1LmV4cGFuZChwLm51bWJlcixkLm1pbixwLm51bWJlcixkLm1heCl9fSksdX1nZXQgY29sdW1ucygpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9jb2x1bW5zfXNldCBjb2x1bW5zKHUpe3RoaXMuX2hlYWRlclJvd0NvdW50PXUucmVkdWNlKCh2LF8pPT5NYXRoLm1heCh2LChfLmhlYWRlcj8xOl8uaGVhZGVycyYmXy5oZWFkZXJzLmxlbmd0aCl8fDApLDApO2xldCBwPTE7Y29uc3QgZD10aGlzLl9jb2x1bW5zPVtdO3Uu''@;'; put 'put ''Zm9yRWFjaCh2PT57Y29uc3QgXz1uZXcgdCh0aGlzLHArKywhMSk7ZC5wdXNoKF8pLF8uZGVmbj12fSl9Z2V0Q29sdW1uS2V5KHUpe3JldHVybiB0aGlzLl9rZXlzW3VdfXNldENvbHVtbktleSh1LHApe3RoaXMuX2tleXNbdV09cH1kZWxldGVDb2x1bW5LZXkodSl7ZGVsZXRlIHRoaXMuX2tl''@;'; put 'put ''eXNbdV19ZWFjaENvbHVtbktleSh1KXtiLmVhY2godGhpcy5fa2V5cyx1KX1nZXRDb2x1bW4odSl7aWYoInN0cmluZyI9PXR5cGVvZiB1KXtjb25zdCBwPXRoaXMuX2tleXNbdV07aWYocClyZXR1cm4gcDt1PWEubDJuKHUpfWlmKHRoaXMuX2NvbHVtbnN8fCh0aGlzLl9jb2x1bW5zPVtdKSx1''@;'; put 'put ''PnRoaXMuX2NvbHVtbnMubGVuZ3RoKXtsZXQgcD10aGlzLl9jb2x1bW5zLmxlbmd0aCsxO2Zvcig7cDw9dTspdGhpcy5fY29sdW1ucy5wdXNoKG5ldyB0KHRoaXMscCsrKSl9cmV0dXJuIHRoaXMuX2NvbHVtbnNbdS0xXX1zcGxpY2VDb2x1bW5zKHUscCl7Y29uc3QgZD10aGlzLl9yb3dzLmxl''@;'; put 'put ''bmd0aDtmb3IodmFyIHY9YXJndW1lbnRzLmxlbmd0aCxfPW5ldyBBcnJheSh2PjI/di0yOjApLEE9MjtBPHY7QSsrKV9bQS0yXT1hcmd1bWVudHNbQV07aWYoXy5sZW5ndGg+MClmb3IobGV0IFA9MDtQPGQ7UCsrKXtjb25zdCBCPVt1LHBdO18uZm9yRWFjaChEPT57Qi5wdXNoKERbUF18fG51''@;'; put 'put ''bGwpfSk7Y29uc3QgJD10aGlzLmdldFJvdyhQKzEpOyQuc3BsaWNlLmFwcGx5KCQsQil9ZWxzZSB0aGlzLl9yb3dzLmZvckVhY2goUD0+e1AmJlAuc3BsaWNlKHUscCl9KTtjb25zdCBJPV8ubGVuZ3RoLXAsTD11K3AsTj10aGlzLl9jb2x1bW5zLmxlbmd0aDtpZihJPDApZm9yKGxldCBQPXUr''@;'; put 'put ''Xy5sZW5ndGg7UDw9TjtQKyspdGhpcy5nZXRDb2x1bW4oUCkuZGVmbj10aGlzLmdldENvbHVtbihQLUkpLmRlZm47ZWxzZSBpZihJPjApZm9yKGxldCBQPU47UD49TDtQLS0pdGhpcy5nZXRDb2x1bW4oUCtJKS5kZWZuPXRoaXMuZ2V0Q29sdW1uKFApLmRlZm47Zm9yKGxldCBQPXU7UDx1K18u''@;'; put 'put ''bGVuZ3RoO1ArKyl0aGlzLmdldENvbHVtbihQKS5kZWZuPW51bGw7dGhpcy53b3JrYm9vay5kZWZpbmVkTmFtZXMuc3BsaWNlQ29sdW1ucyh0aGlzLm5hbWUsdSxwLF8ubGVuZ3RoKX1nZXQgbGFzdENvbHVtbigpe3JldHVybiB0aGlzLmdldENvbHVtbih0aGlzLmNvbHVtbkNvdW50KX1nZXQg''@;'; put 'put ''Y29sdW1uQ291bnQoKXtsZXQgdT0wO3JldHVybiB0aGlzLmVhY2hSb3cocD0+e3U9TWF0aC5tYXgodSxwLmNlbGxDb3VudCl9KSx1fWdldCBhY3R1YWxDb2x1bW5Db3VudCgpe2NvbnN0IHU9W107bGV0IHA9MDtyZXR1cm4gdGhpcy5lYWNoUm93KGQ9PntkLmVhY2hDZWxsKHY9PntsZXR7Y29s''@;'; put 'put ''Ol99PXY7dVtfXXx8KHVbX109ITAscCsrKX0pfSkscH1fY29tbWl0Um93KCl7fWdldCBfbGFzdFJvd051bWJlcigpe2NvbnN0IHU9dGhpcy5fcm93cztsZXQgcD11Lmxlbmd0aDtmb3IoO3A+MCYmdm9pZCAwPT09dVtwLTFdOylwLS07cmV0dXJuIHB9Z2V0IF9uZXh0Um93KCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2xhc3RSb3dOdW1iZXIrMX1nZXQgbGFzdFJvdygpe2lmKHRoaXMuX3Jvd3MubGVuZ3RoKXJldHVybiB0aGlzLl9yb3dzW3RoaXMuX3Jvd3MubGVuZ3RoLTFdfWZpbmRSb3codSl7cmV0dXJuIHRoaXMuX3Jvd3NbdS0xXX1maW5kUm93cyh1LHApe3JldHVybiB0aGlzLl9yb3dzLnNsaWNl''@;'; put 'put ''KHUtMSx1LTErcCl9Z2V0IHJvd0NvdW50KCl7cmV0dXJuIHRoaXMuX2xhc3RSb3dOdW1iZXJ9Z2V0IGFjdHVhbFJvd0NvdW50KCl7bGV0IHU9MDtyZXR1cm4gdGhpcy5lYWNoUm93KCgpPT57dSsrfSksdX1nZXRSb3codSl7bGV0IHA9dGhpcy5fcm93c1t1LTFdO3JldHVybiBwfHwocD10aGlz''@;'; put 'put ''Ll9yb3dzW3UtMV09bmV3IHIodGhpcyx1KSkscH1nZXRSb3dzKHUscCl7aWYocDwxKXJldHVybjtjb25zdCBkPVtdO2ZvcihsZXQgdj11O3Y8dStwO3YrKylkLnB1c2godGhpcy5nZXRSb3codikpO3JldHVybiBkfWFkZFJvdyh1KXtsZXQgcD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Im4iO2NvbnN0IGQ9dGhpcy5fbmV4dFJvdyx2PXRoaXMuZ2V0Um93KGQpO3JldHVybiB2LnZhbHVlcz11LHRoaXMuX3NldFN0eWxlT3B0aW9uKGQsImkiPT09cFswXT9wOiJuIiksdn1hZGRSb3dzKHUpe2xldCBwPWFyZ3VtZW50cy5sZW5ndGg+''@;'; put 'put ''MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToibiI7Y29uc3QgZD1bXTtyZXR1cm4gdS5mb3JFYWNoKHY9PntkLnB1c2godGhpcy5hZGRSb3codixwKSl9KSxkfWluc2VydFJvdyh1LHApe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJd''@;'; put 'put ''P2FyZ3VtZW50c1syXToibiI7cmV0dXJuIHRoaXMuc3BsaWNlUm93cyh1LDAscCksdGhpcy5fc2V0U3R5bGVPcHRpb24odSxkKSx0aGlzLmdldFJvdyh1KX1pbnNlcnRSb3dzKHUscCl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJd''@;'; put 'put ''OiJuIjtpZih0aGlzLnNwbGljZVJvd3ModSwwLC4uLnApLCJuIiE9PWQpZm9yKGxldCB2PTA7djxwLmxlbmd0aDt2KyspIm8iPT09ZFswXSYmdm9pZCAwIT09dGhpcy5maW5kUm93KHAubGVuZ3RoK3Urdik/dGhpcy5fY29weVN0eWxlKHAubGVuZ3RoK3Urdix1K3YsIisiPT09ZFsxXSk6Imki''@;'; put 'put ''PT09ZFswXSYmdm9pZCAwIT09dGhpcy5maW5kUm93KHUtMSkmJnRoaXMuX2NvcHlTdHlsZSh1LTEsdSt2LCIrIj09PWRbMV0pO3JldHVybiB0aGlzLmdldFJvd3ModSxwLmxlbmd0aCl9X3NldFN0eWxlT3B0aW9uKHUpe2xldCBwPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1l''@;'; put 'put ''bnRzWzFdP2FyZ3VtZW50c1sxXToibiI7Im8iPT09cFswXSYmdm9pZCAwIT09dGhpcy5maW5kUm93KHUrMSk/dGhpcy5fY29weVN0eWxlKHUrMSx1LCIrIj09PXBbMV0pOiJpIj09PXBbMF0mJnZvaWQgMCE9PXRoaXMuZmluZFJvdyh1LTEpJiZ0aGlzLl9jb3B5U3R5bGUodS0xLHUsIisiPT09''@;'; put 'put ''cFsxXSl9X2NvcHlTdHlsZSh1LHApe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3Qgdj10aGlzLmdldFJvdyh1KSxfPXRoaXMuZ2V0Um93KHApO18uc3R5bGU9Zih2LnN0eWxlKSx2LmVhY2hDZWxsKHtpbmNsdWRlRW1w''@;'; put 'put ''dHk6ZH0sKEEsSSk9PntfLmdldENlbGwoSSkuc3R5bGU9ZihBLnN0eWxlKX0pLF8uaGVpZ2h0PXYuaGVpZ2h0fWR1cGxpY2F0ZVJvdyh1LHApe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3Qgdj10aGlzLl9yb3dzW3Ut''@;'; put 'put ''MV0sXz1uZXcgQXJyYXkocCkuZmlsbCh2LnZhbHVlcyk7dGhpcy5zcGxpY2VSb3dzKHUrMSxkPzA6cCwuLi5fKTtmb3IobGV0IEE9MDtBPHA7QSsrKXtjb25zdCBJPXRoaXMuX3Jvd3NbdStBXTtJLnN0eWxlPXYuc3R5bGUsSS5oZWlnaHQ9di5oZWlnaHQsdi5lYWNoQ2VsbCh7aW5jbHVkZUVt''@;'; put 'put ''cHR5OiEwfSwoTCxOKT0+e0kuZ2V0Q2VsbChOKS5zdHlsZT1MLnN0eWxlfSl9fXNwbGljZVJvd3ModSxwKXtjb25zdCBkPXUrcDtmb3IodmFyIHY9YXJndW1lbnRzLmxlbmd0aCxfPW5ldyBBcnJheSh2PjI/di0yOjApLEE9MjtBPHY7QSsrKV9bQS0yXT1hcmd1bWVudHNbQV07Y29uc3QgST1f''@;'; put 'put ''Lmxlbmd0aCxMPUktcCxOPXRoaXMuX3Jvd3MubGVuZ3RoO2xldCBQLEI7aWYoTDwwKWZvcih1PT09TiYmKHRoaXMuX3Jvd3NbTi0xXT12b2lkIDApLFA9ZDtQPD1OO1ArKylpZihCPXRoaXMuX3Jvd3NbUC0xXSxCKXtjb25zdCAkPXRoaXMuZ2V0Um93KFArTCk7JC52YWx1ZXM9Qi52YWx1ZXMs''@;'; put 'put ''JC5zdHlsZT1CLnN0eWxlLCQuaGVpZ2h0PUIuaGVpZ2h0LEIuZWFjaENlbGwoe2luY2x1ZGVFbXB0eTohMH0sKEQseCk9PnskLmdldENlbGwoeCkuc3R5bGU9RC5zdHlsZX0pLHRoaXMuX3Jvd3NbUC0xXT12b2lkIDB9ZWxzZSB0aGlzLl9yb3dzW1ArTC0xXT12b2lkIDA7ZWxzZSBpZihMPjAp''@;'; put 'put ''Zm9yKFA9TjtQPj1kO1AtLSlpZihCPXRoaXMuX3Jvd3NbUC0xXSxCKXtjb25zdCAkPXRoaXMuZ2V0Um93KFArTCk7JC52YWx1ZXM9Qi52YWx1ZXMsJC5zdHlsZT1CLnN0eWxlLCQuaGVpZ2h0PUIuaGVpZ2h0LEIuZWFjaENlbGwoe2luY2x1ZGVFbXB0eTohMH0sKEQseCk9PntpZigkLmdldENl''@;'; put 'put ''bGwoeCkuc3R5bGU9RC5zdHlsZSwiTWVyZ2VWYWx1ZSI9PT1ELl92YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKXtjb25zdCBNPXRoaXMuZ2V0Um93KEQuX3Jvdy5fbnVtYmVyK0kpLmdldENlbGwoeCksaj1ELl92YWx1ZS5fbWFzdGVyLGM9dGhpcy5nZXRSb3coai5fcm93Ll9udW1iZXIrSSkuZ2V0''@;'; put 'put ''Q2VsbChqLl9jb2x1bW4uX251bWJlcik7TS5tZXJnZShjKX19KX1lbHNlIHRoaXMuX3Jvd3NbUCtMLTFdPXZvaWQgMDtmb3IoUD0wO1A8STtQKyspe2NvbnN0ICQ9dGhpcy5nZXRSb3codStQKTskLnN0eWxlPXt9LCQudmFsdWVzPV9bUF19dGhpcy53b3JrYm9vay5kZWZpbmVkTmFtZXMuc3Bs''@;'; put 'put ''aWNlUm93cyh0aGlzLm5hbWUsdSxwLEkpfWVhY2hSb3codSxwKXtpZihwfHwocD11LHU9dm9pZCAwKSx1JiZ1LmluY2x1ZGVFbXB0eSl7Y29uc3QgZD10aGlzLl9yb3dzLmxlbmd0aDtmb3IobGV0IHY9MTt2PD1kO3YrKylwKHRoaXMuZ2V0Um93KHYpLHYpfWVsc2UgdGhpcy5fcm93cy5mb3JF''@;'; put 'put ''YWNoKGQ9PntkJiZkLmhhc1ZhbHVlcyYmcChkLGQubnVtYmVyKX0pfWdldFNoZWV0VmFsdWVzKCl7Y29uc3QgdT1bXTtyZXR1cm4gdGhpcy5fcm93cy5mb3JFYWNoKHA9PntwJiYodVtwLm51bWJlcl09cC52YWx1ZXMpfSksdX1maW5kQ2VsbCh1LHApe2NvbnN0IGQ9YS5nZXRBZGRyZXNzKHUs''@;'; put 'put ''cCksdj10aGlzLl9yb3dzW2Qucm93LTFdO3JldHVybiB2P3YuZmluZENlbGwoZC5jb2wpOnZvaWQgMH1nZXRDZWxsKHUscCl7Y29uc3QgZD1hLmdldEFkZHJlc3ModSxwKTtyZXR1cm4gdGhpcy5nZXRSb3coZC5yb3cpLmdldENlbGxFeChkKX1tZXJnZUNlbGxzKCl7Zm9yKHZhciB1PWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGgscD1uZXcgQXJyYXkodSksZD0wO2Q8dTtkKyspcFtkXT1hcmd1bWVudHNbZF07Y29uc3Qgdj1uZXcgbyhwKTt0aGlzLl9tZXJnZUNlbGxzSW50ZXJuYWwodil9bWVyZ2VDZWxsc1dpdGhvdXRTdHlsZSgpe2Zvcih2YXIgdT1hcmd1bWVudHMubGVuZ3RoLHA9bmV3IEFycmF5''@;'; put 'put ''KHUpLGQ9MDtkPHU7ZCsrKXBbZF09YXJndW1lbnRzW2RdO2NvbnN0IHY9bmV3IG8ocCk7dGhpcy5fbWVyZ2VDZWxsc0ludGVybmFsKHYsITApfV9tZXJnZUNlbGxzSW50ZXJuYWwodSxwKXtiLmVhY2godGhpcy5fbWVyZ2VzLHY9PntpZih2LmludGVyc2VjdHModSkpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJDYW5ub3QgbWVyZ2UgYWxyZWFkeSBtZXJnZWQgY2VsbHMiKX0pO2NvbnN0IGQ9dGhpcy5nZXRDZWxsKHUudG9wLHUubGVmdCk7Zm9yKGxldCB2PXUudG9wO3Y8PXUuYm90dG9tO3YrKylmb3IobGV0IF89dS5sZWZ0O188PXUucmlnaHQ7XysrKSh2PnUudG9wfHxfPnUubGVmdCkmJnRoaXMu''@;'; put 'put ''Z2V0Q2VsbCh2LF8pLm1lcmdlKGQscCk7dGhpcy5fbWVyZ2VzW2QuYWRkcmVzc109dX1fdW5NZXJnZU1hc3Rlcih1KXtjb25zdCBwPXRoaXMuX21lcmdlc1t1LmFkZHJlc3NdO2lmKHApe2ZvcihsZXQgZD1wLnRvcDtkPD1wLmJvdHRvbTtkKyspZm9yKGxldCB2PXAubGVmdDt2PD1wLnJpZ2h0''@;'; put 'put ''O3YrKyl0aGlzLmdldENlbGwoZCx2KS51bm1lcmdlKCk7ZGVsZXRlIHRoaXMuX21lcmdlc1t1LmFkZHJlc3NdfX1nZXQgaGFzTWVyZ2VzKCl7cmV0dXJuIGIuc29tZSh0aGlzLl9tZXJnZXMsQm9vbGVhbil9dW5NZXJnZUNlbGxzKCl7Zm9yKHZhciB1PWFyZ3VtZW50cy5sZW5ndGgscD1uZXcg''@;'; put 'put ''QXJyYXkodSksZD0wO2Q8dTtkKyspcFtkXT1hcmd1bWVudHNbZF07Y29uc3Qgdj1uZXcgbyhwKTtmb3IobGV0IF89di50b3A7Xzw9di5ib3R0b207XysrKWZvcihsZXQgQT12LmxlZnQ7QTw9di5yaWdodDtBKyspe2NvbnN0IEk9dGhpcy5maW5kQ2VsbChfLEEpO0kmJihJLnR5cGU9PT1lLlZh''@;'; put 'put ''bHVlVHlwZS5NZXJnZT90aGlzLl91bk1lcmdlTWFzdGVyKEkubWFzdGVyKTp0aGlzLl9tZXJnZXNbSS5hZGRyZXNzXSYmdGhpcy5fdW5NZXJnZU1hc3RlcihJKSl9fWZpbGxGb3JtdWxhKHUscCxkKXtsZXQgdj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1''@;'; put 'put ''bWVudHNbM106InNoYXJlZCI7Y29uc3QgXz1hLmRlY29kZSh1KSx7dG9wOkEsbGVmdDpJLGJvdHRvbTpMLHJpZ2h0Ok59PV8sUD1OLUkrMSxCPWEuZW5jb2RlQWRkcmVzcyhBLEkpLCQ9InNoYXJlZCI9PT12O2xldCBEO0Q9ImZ1bmN0aW9uIj09dHlwZW9mIGQ/ZDpBcnJheS5pc0FycmF5KGQp''@;'; put 'put ''P0FycmF5LmlzQXJyYXkoZFswXSk/KE0saik9PmRbTS1BXVtqLUldOihNLGopPT5kWyhNLUEpKlArKGotSSldOigpPT57fTtsZXQgeD0hMDtmb3IobGV0IE09QTtNPD1MO00rKylmb3IobGV0IGo9STtqPD1OO2orKyl4Pyh0aGlzLmdldENlbGwoTSxqKS52YWx1ZT17c2hhcmVUeXBlOnYsZm9y''@;'; put 'put ''bXVsYTpwLHJlZjp1LHJlc3VsdDpEKE0sail9LHg9ITEpOnRoaXMuZ2V0Q2VsbChNLGopLnZhbHVlPSQ/e3NoYXJlZEZvcm11bGE6QixyZXN1bHQ6RChNLGopfTpEKE0sail9YWRkSW1hZ2UodSxwKXt0aGlzLl9tZWRpYS5wdXNoKG5ldyBsKHRoaXMse3R5cGU6ImltYWdlIixpbWFnZUlkOnUs''@;'; put 'put ''cmFuZ2U6cH0pKX1nZXRJbWFnZXMoKXtyZXR1cm4gdGhpcy5fbWVkaWEuZmlsdGVyKHU9PiJpbWFnZSI9PT11LnR5cGUpfWFkZEJhY2tncm91bmRJbWFnZSh1KXt0aGlzLl9tZWRpYS5wdXNoKG5ldyBsKHRoaXMse3R5cGU6ImJhY2tncm91bmQiLGltYWdlSWQ6dX0pKX1nZXRCYWNrZ3JvdW5k''@;'; put 'put ''SW1hZ2VJZCgpe2NvbnN0IHU9dGhpcy5fbWVkaWEuZmluZChwPT4iYmFja2dyb3VuZCI9PT1wLnR5cGUpO3JldHVybiB1JiZ1LmltYWdlSWR9cHJvdGVjdCh1LHApe3JldHVybiBuZXcgUHJvbWlzZShkPT57dGhpcy5zaGVldFByb3RlY3Rpb249e3NoZWV0OiEwfSxwJiYic3BpbkNvdW50Imlu''@;'; put 'put ''IHAmJihwLnNwaW5Db3VudD1OdW1iZXIuaXNGaW5pdGUocC5zcGluQ291bnQpP01hdGgucm91bmQoTWF0aC5tYXgoMCxwLnNwaW5Db3VudCkpOjFlNSksdSYmKHRoaXMuc2hlZXRQcm90ZWN0aW9uLmFsZ29yaXRobU5hbWU9IlNIQS01MTIiLHRoaXMuc2hlZXRQcm90ZWN0aW9uLnNhbHRWYWx1''@;'; put 'put ''ZT1oLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygiYmFzZTY0IiksdGhpcy5zaGVldFByb3RlY3Rpb24uc3BpbkNvdW50PXAmJiJzcGluQ291bnQiaW4gcD9wLnNwaW5Db3VudDoxZTUsdGhpcy5zaGVldFByb3RlY3Rpb24uaGFzaFZhbHVlPWguY29udmVydFBhc3N3b3JkVG9IYXNoKHUsIlNI''@;'; put 'put ''QTUxMiIsdGhpcy5zaGVldFByb3RlY3Rpb24uc2FsdFZhbHVlLHRoaXMuc2hlZXRQcm90ZWN0aW9uLnNwaW5Db3VudCkpLHAmJih0aGlzLnNoZWV0UHJvdGVjdGlvbj1PYmplY3QuYXNzaWduKHRoaXMuc2hlZXRQcm90ZWN0aW9uLHApLCF1JiYic3BpbkNvdW50ImluIHAmJmRlbGV0ZSB0aGlz''@;'; put 'put ''LnNoZWV0UHJvdGVjdGlvbi5zcGluQ291bnQpLGQoKX0pfXVucHJvdGVjdCgpe3RoaXMuc2hlZXRQcm90ZWN0aW9uPW51bGx9YWRkVGFibGUodSl7Y29uc3QgcD1uZXcgbih0aGlzLHUpO3JldHVybiB0aGlzLnRhYmxlc1t1Lm5hbWVdPXAscH1nZXRUYWJsZSh1KXtyZXR1cm4gdGhpcy50YWJs''@;'; put 'put ''ZXNbdV19cmVtb3ZlVGFibGUodSl7ZGVsZXRlIHRoaXMudGFibGVzW3VdfWdldFRhYmxlcygpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMudGFibGVzKX1hZGRDb25kaXRpb25hbEZvcm1hdHRpbmcodSl7dGhpcy5jb25kaXRpb25hbEZvcm1hdHRpbmdzLnB1c2godSl9cmVtb3ZlQ29uZGl0''@;'; put 'put ''aW9uYWxGb3JtYXR0aW5nKHUpeyJudW1iZXIiPT10eXBlb2YgdT90aGlzLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3Muc3BsaWNlKHUsMSk6dGhpcy5jb25kaXRpb25hbEZvcm1hdHRpbmdzPXUgaW5zdGFuY2VvZiBGdW5jdGlvbj90aGlzLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3MuZmlsdGVyKHUp''@;'; put 'put ''OltdfWdldCB0YWJDb2xvcigpe3JldHVybiBjb25zb2xlLnRyYWNlKCJ3b3Jrc2hlZXQudGFiQ29sb3IgcHJvcGVydHkgaXMgbm93IGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2Ugd29ya3NoZWV0LnByb3BlcnRpZXMudGFiQ29sb3IiKSx0aGlzLnByb3BlcnRpZXMudGFiQ29sb3J9c2V0IHRhYkNv''@;'; put 'put ''bG9yKHUpe2NvbnNvbGUudHJhY2UoIndvcmtzaGVldC50YWJDb2xvciBwcm9wZXJ0eSBpcyBub3cgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB3b3Jrc2hlZXQucHJvcGVydGllcy50YWJDb2xvciIpLHRoaXMucHJvcGVydGllcy50YWJDb2xvcj11fWdldCBtb2RlbCgpe2NvbnN0IHU9e2lkOnRo''@;'; put 'put ''aXMuaWQsbmFtZTp0aGlzLm5hbWUsZGF0YVZhbGlkYXRpb25zOnRoaXMuZGF0YVZhbGlkYXRpb25zLm1vZGVsLHByb3BlcnRpZXM6dGhpcy5wcm9wZXJ0aWVzLHN0YXRlOnRoaXMuc3RhdGUscGFnZVNldHVwOnRoaXMucGFnZVNldHVwLGhlYWRlckZvb3Rlcjp0aGlzLmhlYWRlckZvb3Rlcixy''@;'; put 'put ''b3dCcmVha3M6dGhpcy5yb3dCcmVha3Msdmlld3M6dGhpcy52aWV3cyxhdXRvRmlsdGVyOnRoaXMuYXV0b0ZpbHRlcixtZWRpYTp0aGlzLl9tZWRpYS5tYXAodj0+di5tb2RlbCksc2hlZXRQcm90ZWN0aW9uOnRoaXMuc2hlZXRQcm90ZWN0aW9uLHRhYmxlczpPYmplY3QudmFsdWVzKHRoaXMu''@;'; put 'put ''dGFibGVzKS5tYXAodj0+di5tb2RlbCksY29uZGl0aW9uYWxGb3JtYXR0aW5nczp0aGlzLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3N9O3UuY29scz10LnRvTW9kZWwodGhpcy5jb2x1bW5zKTtjb25zdCBwPXUucm93cz1bXSxkPXUuZGltZW5zaW9ucz1uZXcgbztyZXR1cm4gdGhpcy5fcm93cy5m''@;'; put 'put ''b3JFYWNoKHY9Pntjb25zdCBfPXYmJnYubW9kZWw7XyYmKGQuZXhwYW5kKF8ubnVtYmVyLF8ubWluLF8ubnVtYmVyLF8ubWF4KSxwLnB1c2goXykpfSksdS5tZXJnZXM9W10sYi5lYWNoKHRoaXMuX21lcmdlcyx2PT57dS5tZXJnZXMucHVzaCh2LnJhbmdlKX0pLHV9X3BhcnNlUm93cyh1KXt0''@;'; put 'put ''aGlzLl9yb3dzPVtdLHUucm93cy5mb3JFYWNoKHA9Pntjb25zdCBkPW5ldyByKHRoaXMscC5udW1iZXIpO3RoaXMuX3Jvd3NbZC5udW1iZXItMV09ZCxkLm1vZGVsPXB9KX1fcGFyc2VNZXJnZUNlbGxzKHUpe2IuZWFjaCh1Lm1lcmdlQ2VsbHMscD0+e3RoaXMubWVyZ2VDZWxsc1dpdGhvdXRT''@;'; put 'put ''dHlsZShwKX0pfXNldCBtb2RlbCh1KXt0aGlzLm5hbWU9dS5uYW1lLHRoaXMuX2NvbHVtbnM9dC5mcm9tTW9kZWwodGhpcyx1LmNvbHMpLHRoaXMuX3BhcnNlUm93cyh1KSx0aGlzLl9wYXJzZU1lcmdlQ2VsbHModSksdGhpcy5kYXRhVmFsaWRhdGlvbnM9bmV3IGkodS5kYXRhVmFsaWRhdGlv''@;'; put 'put ''bnMpLHRoaXMucHJvcGVydGllcz11LnByb3BlcnRpZXMsdGhpcy5wYWdlU2V0dXA9dS5wYWdlU2V0dXAsdGhpcy5oZWFkZXJGb290ZXI9dS5oZWFkZXJGb290ZXIsdGhpcy52aWV3cz11LnZpZXdzLHRoaXMuYXV0b0ZpbHRlcj11LmF1dG9GaWx0ZXIsdGhpcy5fbWVkaWE9dS5tZWRpYS5tYXAo''@;'; put 'put ''cD0+bmV3IGwodGhpcyxwKSksdGhpcy5zaGVldFByb3RlY3Rpb249dS5zaGVldFByb3RlY3Rpb24sdGhpcy50YWJsZXM9dS50YWJsZXMucmVkdWNlKChwLGQpPT57Y29uc3Qgdj1uZXcgbjtyZXR1cm4gdi5tb2RlbD1kLHBbZC5uYW1lXT12LHB9LHt9KSx0aGlzLmNvbmRpdGlvbmFsRm9ybWF0''@;'; put 'put ''dGluZ3M9dS5jb25kaXRpb25hbEZvcm1hdHRpbmdzfX19LHsiLi4vdXRpbHMvY29sLWNhY2hlIjoxOSwiLi4vdXRpbHMvY29weS1zdHlsZSI6MjAsIi4uL3V0aWxzL2VuY3J5cHRvciI6MjEsIi4uL3V0aWxzL3VuZGVyLWRhc2giOjI2LCIuL2NvbHVtbiI6NCwiLi9kYXRhLXZhbGlkYXRpb25z''@;'; put 'put ''Ijo1LCIuL2VudW1zIjo3LCIuL2ltYWdlIjo4LCIuL3JhbmdlIjoxMCwiLi9yb3ciOjExLCIuL3RhYmxlIjoxMn1dLDE1OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3MoImNvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlIikscygiY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuZmlu''@;'; put 'put ''YWxseSIpLHMoImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduIikscygiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzIikscygiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC52YWx1ZXMiKSxzKCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sIikscygiY29yZS1qcy9tb2R1''@;'; put 'put ''bGVzL2VzLnN5bWJvbC5hc3luYy1pdGVyYXRvciIpLHMoImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvciIpLHMoImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcyIpLHMoImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kLWluZGV4IikscygiY29yZS1qcy9tb2R1''@;'; put 'put ''bGVzL2VzLmFycmF5LmZpbmQiKSxzKCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmZyb20tY29kZS1wb2ludCIpLHMoImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMiKSxzKCJjb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmlzLW5hbiIpLHMoInJlZ2VuZXJhdG9yLXJ1bnRp''@;'; put 'put ''bWUvcnVudGltZSIpO2NvbnN0IGI9e1dvcmtib29rOnMoIi4vZG9jL3dvcmtib29rIil9LGE9cygiLi9kb2MvZW51bXMiKTtPYmplY3Qua2V5cyhhKS5mb3JFYWNoKG89PntiW29dPWFbb119KSxFLmV4cG9ydHM9Yn0seyIuL2RvYy9lbnVtcyI6NywiLi9kb2Mvd29ya2Jvb2siOjEzLCJjb3Jl''@;'; put 'put ''LWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZCI6MzU5LCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZC1pbmRleCI6MzU4LCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMiOjM2MCwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yIjozNjEsImNvcmUtanMvbW9k''@;'; put 'put ''dWxlcy9lcy5udW1iZXIuaXMtbmFuIjozNjMsImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduIjozNjQsImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cyI6MzY2LCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnZhbHVlcyI6MzY3LCJjb3JlLWpzL21vZHVsZXMvZXMucHJv''@;'; put 'put ''bWlzZSI6MzcyLCJjb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5maW5hbGx5IjozNzEsImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuZnJvbS1jb2RlLXBvaW50IjozNzYsImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMiOjM3NywiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJv''@;'; put 'put ''bCI6MzgxLCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yIjozNzgsInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZSI6NDkyfV0sMTY6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj10eXBlb2YgVGV4dERlY29kZXI+InUiP251bGw6bmV3IFRl''@;'; put 'put ''eHREZWNvZGVyKCJ1dGYtOCIpO1MuYnVmZmVyVG9TdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhP2E6Yj9iLmRlY29kZShhKTphLnRvU3RyaW5nKCl9fSx7fV0sMTc6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj10eXBlb2YgVGV4dEVuY29k''@;'; put 'put ''ZXI+InUiP251bGw6bmV3IFRleHRFbmNvZGVyKCJ1dGYtOCIpLHtCdWZmZXI6YX09cygiYnVmZmVyIik7Uy5zdHJpbmdUb0J1ZmZlcj1mdW5jdGlvbihvKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIG8/bzphLmZyb20oYj9iLmVuY29kZShvKS5idWZmZXI6byl9fSx7YnVmZmVyOjIyMH1dLDE4''@;'; put 'put ''OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi91bmRlci1kYXNoIiksYT1zKCIuL2NvbC1jYWNoZSIpO0UuZXhwb3J0cz1jbGFzc3tjb25zdHJ1Y3RvcihvKXt0aGlzLnRlbXBsYXRlPW8sdGhpcy5zaGVldHM9e319YWRkQ2VsbChvKXt0aGlzLmFkZENlbGxFeChh''@;'; put 'put ''LmRlY29kZUV4KG8pKX1nZXRDZWxsKG8pe3JldHVybiB0aGlzLmZpbmRDZWxsRXgoYS5kZWNvZGVFeChvKSwhMCl9ZmluZENlbGwobyl7cmV0dXJuIHRoaXMuZmluZENlbGxFeChhLmRlY29kZUV4KG8pLCExKX1maW5kQ2VsbEF0KG8scix0KXtjb25zdCBlPXRoaXMuc2hlZXRzW29dLGw9ZSYm''@;'; put 'put ''ZVtyXTtyZXR1cm4gbCYmbFt0XX1hZGRDZWxsRXgobyl7aWYoby50b3ApZm9yKGxldCByPW8udG9wO3I8PW8uYm90dG9tO3IrKylmb3IobGV0IHQ9by5sZWZ0O3Q8PW8ucmlnaHQ7dCsrKXRoaXMuZ2V0Q2VsbEF0KG8uc2hlZXROYW1lLHIsdCk7ZWxzZSB0aGlzLmZpbmRDZWxsRXgobywhMCl9''@;'; put 'put ''Z2V0Q2VsbEV4KG8pe3JldHVybiB0aGlzLmZpbmRDZWxsRXgobywhMCl9ZmluZENlbGxFeChvLHIpe2NvbnN0IHQ9dGhpcy5maW5kU2hlZXQobyxyKSxlPXRoaXMuZmluZFNoZWV0Um93KHQsbyxyKTtyZXR1cm4gdGhpcy5maW5kUm93Q2VsbChlLG8scil9Z2V0Q2VsbEF0KG8scix0KXtjb25z''@;'; put 'put ''dCBlPXRoaXMuc2hlZXRzW29dfHwodGhpcy5zaGVldHNbb109W10pLGw9ZVtyXXx8KGVbcl09W10pO3JldHVybiBsW3RdfHwobFt0XT17c2hlZXROYW1lOm8sYWRkcmVzczphLm4ybCh0KStyLHJvdzpyLGNvbDp0fSl9cmVtb3ZlQ2VsbEV4KG8pe2NvbnN0IHI9dGhpcy5maW5kU2hlZXQobyk7''@;'; put 'put ''aWYoIXIpcmV0dXJuO2NvbnN0IHQ9dGhpcy5maW5kU2hlZXRSb3cocixvKTt0JiZkZWxldGUgdFtvLmNvbF19Zm9yRWFjaEluU2hlZXQobyxyKXtjb25zdCB0PXRoaXMuc2hlZXRzW29dO3QmJnQuZm9yRWFjaCgoZSxsKT0+e2UmJmUuZm9yRWFjaCgobixpKT0+e24mJnIobixsLGkpfSl9KX1m''@;'; put 'put ''b3JFYWNoKG8pe2IuZWFjaCh0aGlzLnNoZWV0cywocix0KT0+e3RoaXMuZm9yRWFjaEluU2hlZXQodCxvKX0pfW1hcChvKXtjb25zdCByPVtdO3JldHVybiB0aGlzLmZvckVhY2godD0+e3IucHVzaChvKHQpKX0pLHJ9ZmluZFNoZWV0KG8scil7Y29uc3QgdD1vLnNoZWV0TmFtZTtyZXR1cm4g''@;'; put 'put ''dGhpcy5zaGVldHNbdF0/dGhpcy5zaGVldHNbdF06cj90aGlzLnNoZWV0c1t0XT1bXTp2b2lkIDB9ZmluZFNoZWV0Um93KG8scix0KXtjb25zdHtyb3c6ZX09cjtyZXR1cm4gbyYmb1tlXT9vW2VdOnQ/b1tlXT1bXTp2b2lkIDB9ZmluZFJvd0NlbGwobyxyLHQpe2NvbnN0e2NvbDplfT1yO3Jl''@;'; put 'put ''dHVybiBvJiZvW2VdP29bZV06dD9vW2VdPXRoaXMudGVtcGxhdGU/T2JqZWN0LmFzc2lnbihyLEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy50ZW1wbGF0ZSkpKTpyOnZvaWQgMH1zcGxpY2VSb3dzKG8scix0LGUpe2NvbnN0IGw9dGhpcy5zaGVldHNbb107aWYobCl7Y29uc3Qgbj1b''@;'; put 'put ''XTtmb3IobGV0IGk9MDtpPGU7aSsrKW4ucHVzaChbXSk7bC5zcGxpY2Uocix0LC4uLm4pfX1zcGxpY2VDb2x1bW5zKG8scix0LGUpe2NvbnN0IGw9dGhpcy5zaGVldHNbb107aWYobCl7Y29uc3Qgbj1bXTtmb3IobGV0IGk9MDtpPGU7aSsrKW4ucHVzaChudWxsKTtiLmVhY2gobCxpPT57aS5z''@;'; put 'put ''cGxpY2Uocix0LC4uLm4pfSl9fX19LHsiLi9jb2wtY2FjaGUiOjE5LCIuL3VuZGVyLWRhc2giOjI2fV0sMTk6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj0vXltBLVpdK1xkKyQvLGE9e19kaWN0aW9uYXJ5OlsiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJ''@;'; put 'put ''IiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiXSxfbDJuRmlsbDowLF9sMm46e30sX24ybDpbXSxfbGV2ZWw6bz0+bzw9MjY/MTpvPD02NzY/MjozLF9maWxsKG8pe2xldCByLHQsZSxsLG4saT0xO2lmKG8+PTQpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJPdXQgb2YgYm91bmRzLiBFeGNlbCBzdXBwb3J0cyBjb2x1bW5zIGZyb20gMSB0byAxNjM4NCIpO2lmKHRoaXMuX2wybkZpbGw8MSYmbz49MSl7Zm9yKDtpPD0yNjspcj10aGlzLl9kaWN0aW9uYXJ5W2ktMV0sdGhpcy5fbjJsW2ldPXIsdGhpcy5fbDJuW3JdPWksaSsr''@;'; put 'put ''O3RoaXMuX2wybkZpbGw9MX1pZih0aGlzLl9sMm5GaWxsPDImJm8+PTIpe2ZvcihpPTI3O2k8PTcwMjspdD1pLTI3LGU9dCUyNixsPU1hdGguZmxvb3IodC8yNikscj10aGlzLl9kaWN0aW9uYXJ5W2xdK3RoaXMuX2RpY3Rpb25hcnlbZV0sdGhpcy5fbjJsW2ldPXIsdGhpcy5fbDJuW3JdPWks''@;'; put 'put ''aSsrO3RoaXMuX2wybkZpbGw9Mn1pZih0aGlzLl9sMm5GaWxsPDMmJm8+PTMpe2ZvcihpPTcwMztpPD0xNjM4NDspdD1pLTcwMyxlPXQlMjYsbD1NYXRoLmZsb29yKHQvMjYpJTI2LG49TWF0aC5mbG9vcih0LzY3Nikscj10aGlzLl9kaWN0aW9uYXJ5W25dK3RoaXMuX2RpY3Rpb25hcnlbbF0r''@;'; put 'put ''dGhpcy5fZGljdGlvbmFyeVtlXSx0aGlzLl9uMmxbaV09cix0aGlzLl9sMm5bcl09aSxpKys7dGhpcy5fbDJuRmlsbD0zfX0sbDJuKG8pe2lmKHRoaXMuX2wybltvXXx8dGhpcy5fZmlsbChvLmxlbmd0aCksIXRoaXMuX2wybltvXSl0aHJvdyBuZXcgRXJyb3IoIk91dCBvZiBib3VuZHMuIElu''@;'; put 'put ''dmFsaWQgY29sdW1uIGxldHRlcjogIitvKTtyZXR1cm4gdGhpcy5fbDJuW29dfSxuMmwobyl7aWYobzwxfHxvPjE2Mzg0KXRocm93IG5ldyBFcnJvcihvKyIgaXMgb3V0IG9mIGJvdW5kcy4gRXhjZWwgc3VwcG9ydHMgY29sdW1ucyBmcm9tIDEgdG8gMTYzODQiKTtyZXR1cm4gdGhpcy5fbjJs''@;'; put 'put ''W29dfHx0aGlzLl9maWxsKHRoaXMuX2xldmVsKG8pKSx0aGlzLl9uMmxbb119LF9oYXNoOnt9LHZhbGlkYXRlQWRkcmVzcyhvKXtpZighYi50ZXN0KG8pKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBBZGRyZXNzOiAiK28pO3JldHVybiEwfSxkZWNvZGVBZGRyZXNzKG8pe2NvbnN0IHI9by5s''@;'; put 'put ''ZW5ndGg8NSYmdGhpcy5faGFzaFtvXTtpZihyKXJldHVybiByO2xldCB0PSExLGU9IiIsbD0wLG49ITEsaT0iIixoPTA7Zm9yKGxldCB1LHA9MDtwPG8ubGVuZ3RoO3ArKylpZih1PW8uY2hhckNvZGVBdChwKSwhbiYmdT49NjUmJnU8PTkwKXQ9ITAsZSs9b1twXSxsPTI2KmwrdS02NDtlbHNl''@;'; put 'put ''IGlmKHU+PTQ4JiZ1PD01NyluPSEwLGkrPW9bcF0saD0xMCpoK3UtNDg7ZWxzZSBpZihuJiZ0JiYzNiE9PXUpYnJlYWs7aWYodCl7aWYobD4xNjM4NCl0aHJvdyBuZXcgRXJyb3IoIk91dCBvZiBib3VuZHMuIEludmFsaWQgY29sdW1uIGxldHRlcjogIitlKX1lbHNlIGw9dm9pZCAwO258fCho''@;'; put 'put ''PXZvaWQgMCk7Y29uc3QgZj17YWRkcmVzczpvPWUraSxjb2w6bCxyb3c6aCwkY29sJHJvdzpgJCR7ZX0kJHtpfWB9O3JldHVybiBsPD0xMDAmJmg8PTEwMCYmKHRoaXMuX2hhc2hbb109Zix0aGlzLl9oYXNoW2YuJGNvbCRyb3ddPWYpLGZ9LGdldEFkZHJlc3MobyxyKXtpZihyKXtjb25zdCB0''@;'; put 'put ''PXRoaXMubjJsKHIpK287cmV0dXJuIHRoaXMuZGVjb2RlQWRkcmVzcyh0KX1yZXR1cm4gdGhpcy5kZWNvZGVBZGRyZXNzKG8pfSxkZWNvZGUobyl7Y29uc3Qgcj1vLnNwbGl0KCI6Iik7aWYoMj09PXIubGVuZ3RoKXtjb25zdCB0PXRoaXMuZGVjb2RlQWRkcmVzcyhyWzBdKSxlPXRoaXMuZGVj''@;'; put 'put ''b2RlQWRkcmVzcyhyWzFdKSxsPXt0b3A6TWF0aC5taW4odC5yb3csZS5yb3cpLGxlZnQ6TWF0aC5taW4odC5jb2wsZS5jb2wpLGJvdHRvbTpNYXRoLm1heCh0LnJvdyxlLnJvdykscmlnaHQ6TWF0aC5tYXgodC5jb2wsZS5jb2wpfTtyZXR1cm4gbC50bD10aGlzLm4ybChsLmxlZnQpK2wudG9w''@;'; put 'put ''LGwuYnI9dGhpcy5uMmwobC5yaWdodCkrbC5ib3R0b20sbC5kaW1lbnNpb25zPWAke2wudGx9OiR7bC5icn1gLGx9cmV0dXJuIHRoaXMuZGVjb2RlQWRkcmVzcyhvKX0sZGVjb2RlRXgobyl7Y29uc3Qgcj1vLm1hdGNoKC8oPzooPzooPzonKCg/OlteJ118JycpKiknKXwoW14nXiAhXSopKSEp''@;'; put 'put ''PyguKikvKSx0PXJbMV18fHJbMl0sZT1yWzNdLGw9ZS5zcGxpdCgiOiIpO2lmKGwubGVuZ3RoPjEpe2xldCBpPXRoaXMuZGVjb2RlQWRkcmVzcyhsWzBdKSxoPXRoaXMuZGVjb2RlQWRkcmVzcyhsWzFdKTtjb25zdCBmPU1hdGgubWluKGkucm93LGgucm93KSx1PU1hdGgubWluKGkuY29sLGgu''@;'; put 'put ''Y29sKSxwPU1hdGgubWF4KGkucm93LGgucm93KSxkPU1hdGgubWF4KGkuY29sLGguY29sKTtyZXR1cm4gaT10aGlzLm4ybCh1KStmLGg9dGhpcy5uMmwoZCkrcCx7dG9wOmYsbGVmdDp1LGJvdHRvbTpwLHJpZ2h0OmQsc2hlZXROYW1lOnQsdGw6e2FkZHJlc3M6aSxjb2w6dSxyb3c6ZiwkY29s''@;'; put 'put ''JHJvdzpgJCR7dGhpcy5uMmwodSl9JCR7Zn1gLHNoZWV0TmFtZTp0fSxicjp7YWRkcmVzczpoLGNvbDpkLHJvdzpwLCRjb2wkcm93OmAkJHt0aGlzLm4ybChkKX0kJHtwfWAsc2hlZXROYW1lOnR9LGRpbWVuc2lvbnM6YCR7aX06JHtofWB9fWlmKGUuc3RhcnRzV2l0aCgiIyIpKXJldHVybiB0''@;'; put 'put ''P3tzaGVldE5hbWU6dCxlcnJvcjplfTp7ZXJyb3I6ZX07Y29uc3Qgbj10aGlzLmRlY29kZUFkZHJlc3MoZSk7cmV0dXJuIHQ/e3NoZWV0TmFtZTp0LC4uLm59Om59LGVuY29kZUFkZHJlc3M6KG8scik9PmEubjJsKHIpK28sZW5jb2RlKCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2Ug''@;'; put 'put ''MjpyZXR1cm4gYS5lbmNvZGVBZGRyZXNzKGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pO2Nhc2UgNDpyZXR1cm5gJHthLmVuY29kZUFkZHJlc3MoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSl9OiR7YS5lbmNvZGVBZGRyZXNzKGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10pfWA7ZGVmYXVs''@;'; put 'put ''dDp0aHJvdyBuZXcgRXJyb3IoIkNhbiBvbmx5IGVuY29kZSB3aXRoIDIgb3IgNCBhcmd1bWVudHMiKX19LGluUmFuZ2UobyxyKXtjb25zdFt0LGUsLGwsbl09byxbaSxoXT1yO3JldHVybiBpPj10JiZpPD1sJiZoPj1lJiZoPD1ufX07RS5leHBvcnRzPWF9LHt9XSwyMDpbZnVuY3Rpb24ocyxF''@;'; put 'put ''LFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPShvLHIpPT4oey4uLm8sLi4uci5yZWR1Y2UoKHQsZSk9PihvW2VdJiYodFtlXT17Li4ub1tlXX0pLHQpLHt9KX0pLGE9ZnVuY3Rpb24obyxyLHQpe29bdF0mJihyW3RdPWIob1t0XSxhcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50''@;'; put 'put ''c1szXT9hcmd1bWVudHNbM106W10pKX07Uy5jb3B5U3R5bGU9bz0+e2lmKCFvKXJldHVybiBvO2lmKDA9PT1PYmplY3Qua2V5cyhvKS5sZW5ndGgpcmV0dXJue307Y29uc3QgdD17Li4ub307cmV0dXJuIGEobyx0LCJmb250IixbImNvbG9yIl0pLGEobyx0LCJhbGlnbm1lbnQiKSxhKG8sdCwi''@;'; put 'put ''cHJvdGVjdGlvbiIpLG8uYm9yZGVyJiYoYShvLHQsImJvcmRlciIpLGEoby5ib3JkZXIsdC5ib3JkZXIsInRvcCIsWyJjb2xvciJdKSxhKG8uYm9yZGVyLHQuYm9yZGVyLCJsZWZ0IixbImNvbG9yIl0pLGEoby5ib3JkZXIsdC5ib3JkZXIsImJvdHRvbSIsWyJjb2xvciJdKSxhKG8uYm9yZGVy''@;'; put 'put ''LHQuYm9yZGVyLCJyaWdodCIsWyJjb2xvciJdKSxhKG8uYm9yZGVyLHQuYm9yZGVyLCJkaWFnb25hbCIsWyJjb2xvciJdKSksby5maWxsJiYoYShvLHQsImZpbGwiLFsiZmdDb2xvciIsImJnQ29sb3IiLCJjZW50ZXIiXSksby5maWxsLnN0b3BzJiYodC5maWxsLnN0b3BzPW8uZmlsbC5zdG9w''@;'; put 'put ''cy5tYXAoZT0+YihlLFsiY29sb3IiXSkpKSksdH19LHt9XSwyMTpbZnVuY3Rpb24ocyxFLFMpeyhmdW5jdGlvbihiKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Y29uc3QgYT1zKCJjcnlwdG8iKSxvPXtoYXNoKHIpe2NvbnN0IHQ9YS5jcmVhdGVIYXNoKHIpO2Zvcih2YXIgZT1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoLGw9bmV3IEFycmF5KGU+MT9lLTE6MCksbj0xO248ZTtuKyspbFtuLTFdPWFyZ3VtZW50c1tuXTtyZXR1cm4gdC51cGRhdGUoYi5jb25jYXQobCkpLHQuZGlnZXN0KCl9LGNvbnZlcnRQYXNzd29yZFRvSGFzaChyLHQsZSxsKXtpZih0PXQudG9Mb3dlckNhc2UoKSxhLmdldEhh''@;'; put 'put ''c2hlcygpLmluZGV4T2YodCk8MCl0aHJvdyBuZXcgRXJyb3IoYEhhc2ggYWxnb3JpdGhtICcke3R9JyBub3Qgc3VwcG9ydGVkIWApO2NvbnN0IG49Yi5mcm9tKHIsInV0ZjE2bGUiKTtsZXQgaT10aGlzLmhhc2godCxiLmZyb20oZSwiYmFzZTY0Iiksbik7Zm9yKGxldCBoPTA7aDxsO2grKyl7''@;'; put 'put ''Y29uc3QgZj1iLmFsbG9jKDQpO2Yud3JpdGVVSW50MzJMRShoLDApLGk9dGhpcy5oYXNoKHQsaSxmKX1yZXR1cm4gaS50b1N0cmluZygiYmFzZTY0Iil9LHJhbmRvbUJ5dGVzOnI9PmEucmFuZG9tQnl0ZXMocil9O0UuZXhwb3J0cz1vfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxzKCJidWZm''@;'; put 'put ''ZXIiKS5CdWZmZXIpfSx7YnVmZmVyOjIyMCxjcnlwdG86MzkwfV0sMjI6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3R7U2F4ZXNQYXJzZXI6Yn09cygic2F4ZXMiKSx7UGFzc1Rocm91Z2g6YX09cygicmVhZGFibGUtc3RyZWFtIikse2J1ZmZlclRvU3RyaW5nOm99PXMoIi4v''@;'; put 'put ''YnJvd3Nlci1idWZmZXItZGVjb2RlIik7RS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHI9cWUoZnVuY3Rpb24qKHQpe3QucGlwZSYmIXRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdJiYodD10LnBpcGUobmV3IGEpKTtjb25zdCBlPW5ldyBiO2xldCBsO2Uub24oImVycm9yIixkPT57bD1kfSk7bGV0''@;'; put 'put ''IG49W107ZS5vbigib3BlbnRhZyIsZD0+bi5wdXNoKHtldmVudFR5cGU6Im9wZW50YWciLHZhbHVlOmR9KSksZS5vbigidGV4dCIsZD0+bi5wdXNoKHtldmVudFR5cGU6InRleHQiLHZhbHVlOmR9KSksZS5vbigiY2xvc2V0YWciLGQ9Pm4ucHVzaCh7ZXZlbnRUeXBlOiJjbG9zZXRhZyIsdmFs''@;'; put 'put ''dWU6ZH0pKTt2YXIgZixpPSExLGg9ITE7dHJ5e2Zvcih2YXIgcCx1PUZlKHQpO2k9IShwPXlpZWxkIFVlKHUubmV4dCgpKSkuZG9uZTtpPSExKXtpZihlLndyaXRlKG8ocC52YWx1ZSkpLGwpdGhyb3cgbDt5aWVsZCBuLG49W119fWNhdGNoKGQpe2g9ITAsZj1kfWZpbmFsbHl7dHJ5e2kmJm51''@;'; put 'put ''bGwhPXUucmV0dXJuJiYoeWllbGQgVWUodS5yZXR1cm4oKSkpfWZpbmFsbHl7aWYoaCl0aHJvdyBmfX19KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX0seyIuL2Jyb3dzZXItYnVmZmVyLWRlY29kZSI6MTYsInJlYWRhYmxlLXN0cmVhbSI6''@;'; put 'put ''NDkxLHNheGVzOjQ5Nn1dLDIzOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi9jb2wtY2FjaGUiKSxhPS8oKFthLXpfXC0wLTldKikhKT8oW2EtejAtOV8kXXsyLH0pKFsoXSk/L2dpLG89L14oWyRdKT8oW2Etel0rKShbJF0pPyhbMS05XVswLTldKikkL2k7RS5l''@;'; put 'put ''eHBvcnRzPXtzbGlkZUZvcm11bGE6ZnVuY3Rpb24ocix0LGUpe2NvbnN0IGw9Yi5kZWNvZGUodCksbj1iLmRlY29kZShlKTtyZXR1cm4gci5yZXBsYWNlKGEsKGksaCxmLHUscCk9PntpZihwKXJldHVybiBpO2NvbnN0IGQ9by5leGVjKHUpO2lmKGQpe2NvbnN0IHY9ZFsxXSxfPWRbMl0udG9V''@;'; put 'put ''cHBlckNhc2UoKSxBPWRbM10sST1kWzRdO2lmKF8ubGVuZ3RoPjN8fDM9PT1fLmxlbmd0aCYmXz4iWEZEIilyZXR1cm4gaTtsZXQgTD1iLmwybihfKSxOPXBhcnNlSW50KEksMTApO3JldHVybiB2fHwoTCs9bi5jb2wtbC5jb2wpLEF8fChOKz1uLnJvdy1sLnJvdyksKGh8fCIiKSsodnx8IiIp''@;'; put 'put ''K2IubjJsKEwpKyhBfHwiIikrTn1yZXR1cm4gaX0pfX19LHsiLi9jb2wtY2FjaGUiOjE5fV0sMjQ6W2Z1bmN0aW9uKHMsRSxTKXsoZnVuY3Rpb24oYixhKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Y29uc3Qgbz1zKCJyZWFkYWJsZS1zdHJlYW0iKSxyPXMoIi4vdXRpbHMiKSx0PXMoIi4v''@;'; put 'put ''c3RyaW5nLWJ1ZiIpO2NsYXNzIGV7Y29uc3RydWN0b3IodSxwKXt0aGlzLl9kYXRhPXUsdGhpcy5fZW5jb2Rpbmc9cH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMudG9CdWZmZXIoKS5sZW5ndGh9Y29weSh1LHAsZCx2KXtyZXR1cm4gdGhpcy50b0J1ZmZlcigpLmNvcHkodSxwLGQsdil9dG9C''@;'; put 'put ''dWZmZXIoKXtyZXR1cm4gdGhpcy5fYnVmZmVyfHwodGhpcy5fYnVmZmVyPWEuZnJvbSh0aGlzLl9kYXRhLHRoaXMuX2VuY29kaW5nKSksdGhpcy5fYnVmZmVyfX1jbGFzcyBse2NvbnN0cnVjdG9yKHUpe3RoaXMuX2RhdGE9dX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2RhdGEubGVuZ3Ro''@;'; put 'put ''fWNvcHkodSxwLGQsdil7cmV0dXJuIHRoaXMuX2RhdGEuX2J1Zi5jb3B5KHUscCxkLHYpfXRvQnVmZmVyKCl7cmV0dXJuIHRoaXMuX2RhdGEudG9CdWZmZXIoKX19Y2xhc3Mgbntjb25zdHJ1Y3Rvcih1KXt0aGlzLl9kYXRhPXV9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9kYXRhLmxlbmd0''@;'; put 'put ''aH1jb3B5KHUscCxkLHYpe3RoaXMuX2RhdGEuY29weSh1LHAsZCx2KX10b0J1ZmZlcigpe3JldHVybiB0aGlzLl9kYXRhfX1jbGFzcyBpe2NvbnN0cnVjdG9yKHUpe3RoaXMuc2l6ZT11LHRoaXMuYnVmZmVyPWEuYWxsb2ModSksdGhpcy5pUmVhZD0wLHRoaXMuaVdyaXRlPTB9dG9CdWZmZXIo''@;'; put 'put ''KXtpZigwPT09dGhpcy5pUmVhZCYmdGhpcy5pV3JpdGU9PT10aGlzLnNpemUpcmV0dXJuIHRoaXMuYnVmZmVyO2NvbnN0IHU9YS5hbGxvYyh0aGlzLmlXcml0ZS10aGlzLmlSZWFkKTtyZXR1cm4gdGhpcy5idWZmZXIuY29weSh1LDAsdGhpcy5pUmVhZCx0aGlzLmlXcml0ZSksdX1nZXQgbGVu''@;'; put 'put ''Z3RoKCl7cmV0dXJuIHRoaXMuaVdyaXRlLXRoaXMuaVJlYWR9Z2V0IGVvZCgpe3JldHVybiB0aGlzLmlSZWFkPT09dGhpcy5pV3JpdGV9Z2V0IGZ1bGwoKXtyZXR1cm4gdGhpcy5pV3JpdGU9PT10aGlzLnNpemV9cmVhZCh1KXtsZXQgcDtyZXR1cm4gMD09PXU/bnVsbDp2b2lkIDA9PT11fHx1''@;'; put 'put ''Pj10aGlzLmxlbmd0aD8ocD10aGlzLnRvQnVmZmVyKCksdGhpcy5pUmVhZD10aGlzLmlXcml0ZSxwKToocD1hLmFsbG9jKHUpLHRoaXMuYnVmZmVyLmNvcHkocCwwLHRoaXMuaVJlYWQsdSksdGhpcy5pUmVhZCs9dSxwKX13cml0ZSh1LHAsZCl7Y29uc3Qgdj1NYXRoLm1pbihkLHRoaXMuc2l6''@;'; put 'put ''ZS10aGlzLmlXcml0ZSk7cmV0dXJuIHUuY29weSh0aGlzLmJ1ZmZlcix0aGlzLmlXcml0ZSxwLHArdiksdGhpcy5pV3JpdGUrPXYsdn19Y29uc3QgaD1mdW5jdGlvbihmKXt0aGlzLmJ1ZlNpemU9KGY9Znx8e30pLmJ1ZlNpemV8fDEwNDg1NzYsdGhpcy5idWZmZXJzPVtdLHRoaXMuYmF0Y2g9''@;'; put 'put ''Zi5iYXRjaHx8ITEsdGhpcy5jb3JrZWQ9ITEsdGhpcy5pblBvcz0wLHRoaXMub3V0UG9zPTAsdGhpcy5waXBlcz1bXSx0aGlzLnBhdXNlZD0hMSx0aGlzLmVuY29kaW5nPW51bGx9O3IuaW5oZXJpdHMoaCxvLkR1cGxleCx7dG9CdWZmZXIoKXtzd2l0Y2godGhpcy5idWZmZXJzLmxlbmd0aCl7''@;'; put 'put ''Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMTpyZXR1cm4gdGhpcy5idWZmZXJzWzBdLnRvQnVmZmVyKCk7ZGVmYXVsdDpyZXR1cm4gYS5jb25jYXQodGhpcy5idWZmZXJzLm1hcChmPT5mLnRvQnVmZmVyKCkpKX19LF9nZXRXcml0YWJsZUJ1ZmZlcigpe2lmKHRoaXMuYnVmZmVycy5sZW5ndGgp''@;'; put 'put ''e2NvbnN0IHU9dGhpcy5idWZmZXJzW3RoaXMuYnVmZmVycy5sZW5ndGgtMV07aWYoIXUuZnVsbClyZXR1cm4gdX1jb25zdCBmPW5ldyBpKHRoaXMuYnVmU2l6ZSk7cmV0dXJuIHRoaXMuYnVmZmVycy5wdXNoKGYpLGZ9LF9waXBlKGYpe3ZhciB1PXRoaXM7cmV0dXJuIFp0KGZ1bmN0aW9uKigp''@;'; put 'put ''e3lpZWxkIFByb21pc2UuYWxsKHUucGlwZXMubWFwKGZ1bmN0aW9uKHApe3JldHVybiBuZXcgUHJvbWlzZShkPT57cC53cml0ZShmLnRvQnVmZmVyKCksKCk9PntkKCl9KX0pfSkpfSkoKX0sX3dyaXRlVG9CdWZmZXJzKGYpe2xldCB1PTA7Y29uc3QgcD1mLmxlbmd0aDtmb3IoO3U8cDspdSs9''@;'; put 'put ''dGhpcy5fZ2V0V3JpdGFibGVCdWZmZXIoKS53cml0ZShmLHUscC11KX0sd3JpdGUoZix1LHApe3ZhciBkPXRoaXM7cmV0dXJuIFp0KGZ1bmN0aW9uKigpe2xldCB2O2lmKHUgaW5zdGFuY2VvZiBGdW5jdGlvbiYmKHA9dSx1PSJ1dGY4IikscD1wfHxyLm5vcCxmIGluc3RhbmNlb2YgdCl2PW5l''@;'; put 'put ''dyBsKGYpO2Vsc2UgaWYoZiBpbnN0YW5jZW9mIGEpdj1uZXcgbihmKTtlbHNle2lmKCEoInN0cmluZyI9PXR5cGVvZiBmfHxmIGluc3RhbmNlb2YgU3RyaW5nfHxmIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXRocm93IG5ldyBFcnJvcigiQ2h1bmsgbXVzdCBiZSBvbmUgb2YgdHlwZSBTdHJp''@;'; put 'put ''bmcsIEJ1ZmZlciBvciBTdHJpbmdCdWYuIik7dj1uZXcgZShmLHUpfWlmKGQucGlwZXMubGVuZ3RoKWlmKGQuYmF0Y2gpZm9yKGQuX3dyaXRlVG9CdWZmZXJzKHYpOyFkLmNvcmtlZCYmZC5idWZmZXJzLmxlbmd0aD4xOylkLl9waXBlKGQuYnVmZmVycy5zaGlmdCgpKTtlbHNlIGQuY29ya2Vk''@;'; put 'put ''PyhkLl93cml0ZVRvQnVmZmVycyh2KSxiLm5leHRUaWNrKHApKTooeWllbGQgZC5fcGlwZSh2KSxwKCkpO2Vsc2UgZC5wYXVzZWR8fGQuZW1pdCgiZGF0YSIsdi50b0J1ZmZlcigpKSxkLl93cml0ZVRvQnVmZmVycyh2KSxkLmVtaXQoInJlYWRhYmxlIik7cmV0dXJuITB9KSgpfSxjb3JrKCl7''@;'; put 'put ''dGhpcy5jb3JrZWQ9ITB9LF9mbHVzaCgpe2lmKHRoaXMucGlwZXMubGVuZ3RoKWZvcig7dGhpcy5idWZmZXJzLmxlbmd0aDspdGhpcy5fcGlwZSh0aGlzLmJ1ZmZlcnMuc2hpZnQoKSl9LHVuY29yaygpe3RoaXMuY29ya2VkPSExLHRoaXMuX2ZsdXNoKCl9LGVuZChmLHUscCl7Y29uc3QgZD12''@;'; put 'put ''PT57dj9wKHYpOih0aGlzLl9mbHVzaCgpLHRoaXMucGlwZXMuZm9yRWFjaChfPT57Xy5lbmQoKX0pLHRoaXMuZW1pdCgiZmluaXNoIikpfTtmP3RoaXMud3JpdGUoZix1LGQpOmQoKX0scmVhZChmKXtsZXQgdTtpZihmKXtmb3IodT1bXTtmJiZ0aGlzLmJ1ZmZlcnMubGVuZ3RoJiYhdGhpcy5i''@;'; put 'put ''dWZmZXJzWzBdLmVvZDspe2NvbnN0IHA9dGhpcy5idWZmZXJzWzBdLGQ9cC5yZWFkKGYpO2YtPWQubGVuZ3RoLHUucHVzaChkKSxwLmVvZCYmcC5mdWxsJiZ0aGlzLmJ1ZmZlcnMuc2hpZnQoKX1yZXR1cm4gYS5jb25jYXQodSl9cmV0dXJuIHU9dGhpcy5idWZmZXJzLm1hcChwPT5wLnRvQnVm''@;'; put 'put ''ZmVyKCkpLmZpbHRlcihCb29sZWFuKSx0aGlzLmJ1ZmZlcnM9W10sYS5jb25jYXQodSl9LHNldEVuY29kaW5nKGYpe3RoaXMuZW5jb2Rpbmc9Zn0scGF1c2UoKXt0aGlzLnBhdXNlZD0hMH0scmVzdW1lKCl7dGhpcy5wYXVzZWQ9ITF9LGlzUGF1c2VkKCl7cmV0dXJuISF0aGlzLnBhdXNlZH0s''@;'; put 'put ''cGlwZShmKXt0aGlzLnBpcGVzLnB1c2goZiksIXRoaXMucGF1c2VkJiZ0aGlzLmJ1ZmZlcnMubGVuZ3RoJiZ0aGlzLmVuZCgpfSx1bnBpcGUoZil7dGhpcy5waXBlcz10aGlzLnBpcGVzLmZpbHRlcih1PT51IT09Zil9LHVuc2hpZnQoKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBJbXBsZW1lbnRl''@;'; put 'put ''ZCIpfSx3cmFwKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgSW1wbGVtZW50ZWQiKX19KSxFLmV4cG9ydHM9aH0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMscygiX3Byb2Nlc3MiKSxzKCJidWZmZXIiKS5CdWZmZXIpfSx7Ii4vc3RyaW5nLWJ1ZiI6MjUsIi4vdXRpbHMiOjI3LF9wcm9jZXNzOjQ2''@;'; put 'put ''NyxidWZmZXI6MjIwLCJyZWFkYWJsZS1zdHJlYW0iOjQ5MX1dLDI1OltmdW5jdGlvbihzLEUsUyl7KGZ1bmN0aW9uKGIpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtFLmV4cG9ydHM9Y2xhc3N7Y29uc3RydWN0b3IoYSl7dGhpcy5fYnVmPWIuYWxsb2MoYSYmYS5zaXplfHwxNjM4NCksdGhp''@;'; put 'put ''cy5fZW5jb2Rpbmc9YSYmYS5lbmNvZGluZ3x8InV0ZjgiLHRoaXMuX2luUG9zPTAsdGhpcy5fYnVmZmVyPXZvaWQgMH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2luUG9zfWdldCBjYXBhY2l0eSgpe3JldHVybiB0aGlzLl9idWYubGVuZ3RofWdldCBidWZmZXIoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''YnVmfXRvQnVmZmVyKCl7cmV0dXJuIHRoaXMuX2J1ZmZlcnx8KHRoaXMuX2J1ZmZlcj1iLmFsbG9jKHRoaXMubGVuZ3RoKSx0aGlzLl9idWYuY29weSh0aGlzLl9idWZmZXIsMCwwLHRoaXMubGVuZ3RoKSksdGhpcy5fYnVmZmVyfXJlc2V0KGEpe2E9YXx8MCx0aGlzLl9idWZmZXI9dm9pZCAw''@;'; put 'put ''LHRoaXMuX2luUG9zPWF9X2dyb3coYSl7bGV0IG89Mip0aGlzLl9idWYubGVuZ3RoO2Zvcig7bzxhOylvKj0yO2NvbnN0IHI9Yi5hbGxvYyhvKTt0aGlzLl9idWYuY29weShyLDApLHRoaXMuX2J1Zj1yfWFkZFRleHQoYSl7dGhpcy5fYnVmZmVyPXZvaWQgMDtsZXQgbz10aGlzLl9pblBvcyt0''@;'; put 'put ''aGlzLl9idWYud3JpdGUoYSx0aGlzLl9pblBvcyx0aGlzLl9lbmNvZGluZyk7Zm9yKDtvPj10aGlzLl9idWYubGVuZ3RoLTQ7KXRoaXMuX2dyb3codGhpcy5faW5Qb3MrYS5sZW5ndGgpLG89dGhpcy5faW5Qb3MrdGhpcy5fYnVmLndyaXRlKGEsdGhpcy5faW5Qb3MsdGhpcy5fZW5jb2Rpbmcp''@;'; put 'put ''O3RoaXMuX2luUG9zPW99YWRkU3RyaW5nQnVmKGEpe2EubGVuZ3RoJiYodGhpcy5fYnVmZmVyPXZvaWQgMCx0aGlzLmxlbmd0aCthLmxlbmd0aD50aGlzLmNhcGFjaXR5JiZ0aGlzLl9ncm93KHRoaXMubGVuZ3RoK2EubGVuZ3RoKSxhLl9idWYuY29weSh0aGlzLl9idWYsdGhpcy5faW5Qb3Ms''@;'; put 'put ''MCxhLmxlbmd0aCksdGhpcy5faW5Qb3MrPWEubGVuZ3RoKX19fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxzKCJidWZmZXIiKS5CdWZmZXIpfSx7YnVmZmVyOjIyMH1dLDI2OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0e3RvU3RyaW5nOmJ9PU9iamVjdC5wcm90b3R5cGUs''@;'; put 'put ''YT0vWyImPD5dLyxvPXtlYWNoOmZ1bmN0aW9uKHIsdCl7ciYmKEFycmF5LmlzQXJyYXkocik/ci5mb3JFYWNoKHQpOk9iamVjdC5rZXlzKHIpLmZvckVhY2goZT0+e3QocltlXSxlKX0pKX0sc29tZTpmdW5jdGlvbihyLHQpe3JldHVybiEhciYmKEFycmF5LmlzQXJyYXkocik/ci5zb21lKHQp''@;'; put 'put ''Ok9iamVjdC5rZXlzKHIpLnNvbWUoZT0+dChyW2VdLGUpKSl9LGV2ZXJ5OmZ1bmN0aW9uKHIsdCl7cmV0dXJuIXJ8fChBcnJheS5pc0FycmF5KHIpP3IuZXZlcnkodCk6T2JqZWN0LmtleXMocikuZXZlcnkoZT0+dChyW2VdLGUpKSl9LG1hcDpmdW5jdGlvbihyLHQpe3JldHVybiByP0FycmF5''@;'; put 'put ''LmlzQXJyYXkocik/ci5tYXAodCk6T2JqZWN0LmtleXMocikubWFwKGU9PnQocltlXSxlKSk6W119LGtleUJ5OihyLHQpPT5yLnJlZHVjZSgoZSxsKT0+KGVbbFt0XV09bCxlKSx7fSksaXNFcXVhbDpmdW5jdGlvbihyLHQpe2NvbnN0IGU9dHlwZW9mIHIsbD10eXBlb2YgdCxuPUFycmF5Lmlz''@;'; put 'put ''QXJyYXkociksaT1BcnJheS5pc0FycmF5KHQpO2xldCBoO2lmKGUhPT1sKXJldHVybiExO2lmKCJvYmplY3QiPT10eXBlb2Ygcil7aWYobnx8aSlyZXR1cm4hKCFufHwhaSkmJnIubGVuZ3RoPT09dC5sZW5ndGgmJnIuZXZlcnkoKGYsdSk9Pm8uaXNFcXVhbChmLHRbdV0pKTtpZihudWxsPT09''@;'; put 'put ''cnx8bnVsbD09PXQpcmV0dXJuIHI9PT10O2lmKGg9T2JqZWN0LmtleXMociksT2JqZWN0LmtleXModCkubGVuZ3RoIT09aC5sZW5ndGgpcmV0dXJuITE7Zm9yKGNvbnN0IGYgb2YgaClpZighdC5oYXNPd25Qcm9wZXJ0eShmKSlyZXR1cm4hMTtyZXR1cm4gby5ldmVyeShyLChmLHUpPT5vLmlz''@;'; put 'put ''RXF1YWwoZix0W3VdKSl9cmV0dXJuIHI9PT10fSxlc2NhcGVIdG1sKHIpe2NvbnN0IHQ9YS5leGVjKHIpO2lmKCF0KXJldHVybiByO2xldCBlPSIiLGw9IiIsbj0wLGk9dC5pbmRleDtmb3IoO2k8ci5sZW5ndGg7aSsrKXtzd2l0Y2goci5jaGFyQXQoaSkpe2Nhc2UnIic6bD0iJnF1b3Q7Ijti''@;'; put 'put ''cmVhaztjYXNlIiYiOmw9IiZhbXA7IjticmVhaztjYXNlIiciOmw9IiZhcG9zOyI7YnJlYWs7Y2FzZSI8IjpsPSImbHQ7IjticmVhaztjYXNlIj4iOmw9IiZndDsiO2JyZWFrO2RlZmF1bHQ6Y29udGludWV9biE9PWkmJihlKz1yLnN1YnN0cmluZyhuLGkpKSxuPWkrMSxlKz1sfXJldHVybiBu''@;'; put 'put ''IT09aT9lK3Iuc3Vic3RyaW5nKG4saSk6ZX0sc3RyY21wOihyLHQpPT5yPHQ/LTE6cj50PzE6MCxpc1VuZGVmaW5lZDpyPT4iW29iamVjdCBVbmRlZmluZWRdIj09PWIuY2FsbChyKSxpc09iamVjdDpyPT4iW29iamVjdCBPYmplY3RdIj09PWIuY2FsbChyKSxkZWVwTWVyZ2UoKXtjb25zdCBy''@;'; put 'put ''PWFyZ3VtZW50c1swXXx8e30se2xlbmd0aDp0fT1hcmd1bWVudHM7bGV0IGUsbCxuO2Z1bmN0aW9uIGkoaCxmKXtlPXJbZl0sbj1BcnJheS5pc0FycmF5KGgpLG8uaXNPYmplY3QoaCl8fG4/KG4/KG49ITEsbD1lJiZBcnJheS5pc0FycmF5KGUpP2U6W10pOmw9ZSYmby5pc09iamVjdChlKT9l''@;'; put 'put ''Ont9LHJbZl09by5kZWVwTWVyZ2UobCxoKSk6by5pc1VuZGVmaW5lZChoKXx8KHJbZl09aCl9Zm9yKGxldCBoPTA7aDx0O2grKylvLmVhY2goYXJndW1lbnRzW2hdLGkpO3JldHVybiByfX07RS5leHBvcnRzPW99LHt9XSwyNzpbZnVuY3Rpb24ocyxFLFMpeyhmdW5jdGlvbihiLGEpeyhmdW5j''@;'; put 'put ''dGlvbigpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBvPXMoImZzIikscj0vWzw+JiciXHg3Rlx4MDAtXHgwOFx4MEItXHgwQ1x4MEUtXHgxRl0vLHQ9e25vcCgpe30scHJvbWlzZUltbWVkaWF0ZTplPT5uZXcgUHJvbWlzZShsPT57Yi5zZXRJbW1lZGlhdGU/YSgoKT0+e2woZSl9KTpzZXRUaW1lb3V0''@;'; put 'put ''KCgpPT57bChlKX0sMSl9KSxpbmhlcml0czpmdW5jdGlvbihlLGwsbixpKXtlLnN1cGVyXz1sLGl8fChpPW4sbj1udWxsKSxuJiZPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGY9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxmLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixmKSl9''@;'; put 'put ''KTtjb25zdCBoPXtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH19O2kmJk9iamVjdC5rZXlzKGkpLmZvckVhY2goZj0+e2hbZl09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpLGYpfSksZS5wcm90b3R5cGU9T2Jq''@;'; put 'put ''ZWN0LmNyZWF0ZShsLnByb3RvdHlwZSxoKX0sZGF0ZVRvRXhjZWw6KGUsbCk9PjI1NTY5K2UuZ2V0VGltZSgpLzg2NGU1LShsPzE0NjI6MCksZXhjZWxUb0RhdGUoZSxsKXtjb25zdCBuPU1hdGgucm91bmQoMjQqKGUtMjU1NjkrKGw/MTQ2MjowKSkqMzYwMCoxZTMpO3JldHVybiBuZXcgRGF0''@;'; put 'put ''ZShuKX0scGFyc2VQYXRoKGUpe2NvbnN0IGw9ZS5sYXN0SW5kZXhPZigiLyIpO3JldHVybntwYXRoOmUuc3Vic3RyaW5nKDAsbCksbmFtZTplLnN1YnN0cmluZyhsKzEpfX0sZ2V0UmVsc1BhdGgoZSl7Y29uc3QgbD10LnBhcnNlUGF0aChlKTtyZXR1cm5gJHtsLnBhdGh9L19yZWxzLyR7bC5u''@;'; put 'put ''YW1lfS5yZWxzYH0seG1sRW5jb2RlKGUpe2NvbnN0IGw9ci5leGVjKGUpO2lmKCFsKXJldHVybiBlO2xldCBuPSIiLGk9IiIsaD0wLGY9bC5pbmRleDtmb3IoO2Y8ZS5sZW5ndGg7ZisrKXtjb25zdCB1PWUuY2hhckNvZGVBdChmKTtzd2l0Y2godSl7Y2FzZSAzNDppPSImcXVvdDsiO2JyZWFr''@;'; put 'put ''O2Nhc2UgMzg6aT0iJmFtcDsiO2JyZWFrO2Nhc2UgMzk6aT0iJmFwb3M7IjticmVhaztjYXNlIDYwOmk9IiZsdDsiO2JyZWFrO2Nhc2UgNjI6aT0iJmd0OyI7YnJlYWs7Y2FzZSAxMjc6aT0iIjticmVhaztkZWZhdWx0OmlmKHU8PTMxJiYodTw9OHx8dT49MTEmJjEzIT09dSkpe2k9IiI7YnJl''@;'; put 'put ''YWt9Y29udGludWV9aCE9PWYmJihuKz1lLnN1YnN0cmluZyhoLGYpKSxoPWYrMSxpJiYobis9aSl9cmV0dXJuIGghPT1mP24rZS5zdWJzdHJpbmcoaCxmKTpufSx4bWxEZWNvZGU6ZT0+ZS5yZXBsYWNlKC8mKFthLXpdKik7L2csbD0+e3N3aXRjaChsKXtjYXNlIiZsdDsiOnJldHVybiI8Ijtj''@;'; put 'put ''YXNlIiZndDsiOnJldHVybiI+IjtjYXNlIiZhbXA7IjpyZXR1cm4iJiI7Y2FzZSImYXBvczsiOnJldHVybiInIjtjYXNlIiZxdW90OyI6cmV0dXJuJyInO2RlZmF1bHQ6cmV0dXJuIGx9fSksdmFsaWRJbnQoZSl7Y29uc3QgbD1wYXJzZUludChlLDEwKTtyZXR1cm4gTnVtYmVyLmlzTmFOKGwp''@;'; put 'put ''PzA6bH0saXNEYXRlRm10OmU9PiEhZSYmbnVsbCE9PShlPShlPWUucmVwbGFjZSgvXFtbXlxdXSpdL2csIiIpKS5yZXBsYWNlKC8iW14iXSoiL2csIiIpKS5tYXRjaCgvW3ltZGhNc2JdKy8pLGZzOntleGlzdHM6ZT0+bmV3IFByb21pc2UobD0+e28uYWNjZXNzKGUsby5jb25zdGFudHMuRl9P''@;'; put 'put ''SyxuPT57bCghbil9KX0pfSx0b0lzb0RhdGVTdHJpbmc6ZT0+ZS50b0lzb1N0cmluZygpLnN1YnNzdHIoMCwxMCkscGFyc2VCb29sZWFuOmU9PiEwPT09ZXx8InRydWUiPT09ZXx8MT09PWV8fCIxIj09PWV9O0UuZXhwb3J0cz10fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xv''@;'; put 'put ''YmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9LHMoInRpbWVycyIpLnNldEltbWVkaWF0ZSl9LHtmczoyMTYsdGltZXJzOjUyM31dLDI4OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi91bmRlci1k''@;'; put 'put ''YXNoIiksYT1zKCIuL3V0aWxzIik7ZnVuY3Rpb24gbyhlLGwsbil7ZS5wdXNoKGAgJHtsfT0iJHthLnhtbEVuY29kZShuLnRvU3RyaW5nKCkpfSJgKX1mdW5jdGlvbiByKGUsbCl7aWYobCl7Y29uc3Qgbj1bXTtiLmVhY2gobCwoaSxoKT0+e3ZvaWQgMCE9PWkmJm8obixoLGkpfSksZS5wdXNo''@;'; put 'put ''KG4uam9pbigiIikpfX1jbGFzcyB0e2NvbnN0cnVjdG9yKCl7dGhpcy5feG1sPVtdLHRoaXMuX3N0YWNrPVtdLHRoaXMuX3JvbGxiYWNrcz1bXX1nZXQgdG9zKCl7cmV0dXJuIHRoaXMuX3N0YWNrLmxlbmd0aD90aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGgtMV06dm9pZCAwfWdldCBj''@;'; put 'put ''dXJzb3IoKXtyZXR1cm4gdGhpcy5feG1sLmxlbmd0aH1vcGVuWG1sKGwpe2NvbnN0IG49dGhpcy5feG1sO24ucHVzaCgiPD94bWwiKSxyKG4sbCksbi5wdXNoKCI/PlxuIil9b3Blbk5vZGUobCxuKXtjb25zdCBoPXRoaXMuX3htbDt0aGlzLnRvcyYmdGhpcy5vcGVuJiZoLnB1c2goIj4iKSx0''@;'; put 'put ''aGlzLl9zdGFjay5wdXNoKGwpLGgucHVzaCgiPCIpLGgucHVzaChsKSxyKGgsbiksdGhpcy5sZWFmPSEwLHRoaXMub3Blbj0hMH1hZGRBdHRyaWJ1dGUobCxuKXtpZighdGhpcy5vcGVuKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHdyaXRlIGF0dHJpYnV0ZXMgdG8gbm9kZSBpZiBpdCBpcyBu''@;'; put 'put ''b3Qgb3BlbiIpO3ZvaWQgMCE9PW4mJm8odGhpcy5feG1sLGwsbil9YWRkQXR0cmlidXRlcyhsKXtpZighdGhpcy5vcGVuKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHdyaXRlIGF0dHJpYnV0ZXMgdG8gbm9kZSBpZiBpdCBpcyBub3Qgb3BlbiIpO3IodGhpcy5feG1sLGwpfXdyaXRlVGV4dChs''@;'; put 'put ''KXtjb25zdCBuPXRoaXMuX3htbDt0aGlzLm9wZW4mJihuLnB1c2goIj4iKSx0aGlzLm9wZW49ITEpLHRoaXMubGVhZj0hMSxuLnB1c2goYS54bWxFbmNvZGUobC50b1N0cmluZygpKSl9d3JpdGVYbWwobCl7dGhpcy5vcGVuJiYodGhpcy5feG1sLnB1c2goIj4iKSx0aGlzLm9wZW49ITEpLHRo''@;'; put 'put ''aXMubGVhZj0hMSx0aGlzLl94bWwucHVzaChsKX1jbG9zZU5vZGUoKXtjb25zdCBsPXRoaXMuX3N0YWNrLnBvcCgpLG49dGhpcy5feG1sO3RoaXMubGVhZj9uLnB1c2goIi8+Iik6KG4ucHVzaCgiPC8iKSxuLnB1c2gobCksbi5wdXNoKCI+IikpLHRoaXMub3Blbj0hMSx0aGlzLmxlYWY9ITF9''@;'; put 'put ''bGVhZk5vZGUobCxuLGkpe3RoaXMub3Blbk5vZGUobCxuKSx2b2lkIDAhPT1pJiZ0aGlzLndyaXRlVGV4dChpKSx0aGlzLmNsb3NlTm9kZSgpfWNsb3NlQWxsKCl7Zm9yKDt0aGlzLl9zdGFjay5sZW5ndGg7KXRoaXMuY2xvc2VOb2RlKCl9YWRkUm9sbGJhY2soKXtyZXR1cm4gdGhpcy5fcm9s''@;'; put 'put ''bGJhY2tzLnB1c2goe3htbDp0aGlzLl94bWwubGVuZ3RoLHN0YWNrOnRoaXMuX3N0YWNrLmxlbmd0aCxsZWFmOnRoaXMubGVhZixvcGVuOnRoaXMub3Blbn0pLHRoaXMuY3Vyc29yfWNvbW1pdCgpe3RoaXMuX3JvbGxiYWNrcy5wb3AoKX1yb2xsYmFjaygpe2NvbnN0IGw9dGhpcy5fcm9sbGJh''@;'; put 'put ''Y2tzLnBvcCgpO3RoaXMuX3htbC5sZW5ndGg+bC54bWwmJnRoaXMuX3htbC5zcGxpY2UobC54bWwsdGhpcy5feG1sLmxlbmd0aC1sLnhtbCksdGhpcy5fc3RhY2subGVuZ3RoPmwuc3RhY2smJnRoaXMuX3N0YWNrLnNwbGljZShsLnN0YWNrLHRoaXMuX3N0YWNrLmxlbmd0aC1sLnN0YWNrKSx0''@;'; put 'put ''aGlzLmxlYWY9bC5sZWFmLHRoaXMub3Blbj1sLm9wZW59Z2V0IHhtbCgpe3JldHVybiB0aGlzLmNsb3NlQWxsKCksdGhpcy5feG1sLmpvaW4oIiIpfX10LlN0ZERvY0F0dHJpYnV0ZXM9e3ZlcnNpb246IjEuMCIsZW5jb2Rpbmc6IlVURi04IixzdGFuZGFsb25lOiJ5ZXMifSxFLmV4cG9ydHM9''@;'; put 'put ''dH0seyIuL3VuZGVyLWRhc2giOjI2LCIuL3V0aWxzIjoyN31dLDI5OltmdW5jdGlvbihzLEUsUyl7KGZ1bmN0aW9uKGIpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBhPXMoImV2ZW50cyIpLG89cygianN6aXAiKSxyPXMoIi4vc3RyZWFtLWJ1ZiIpLHtzdHJpbmdUb0J1ZmZlcjp0''@;'; put 'put ''fT1zKCIuL2Jyb3dzZXItYnVmZmVyLWVuY29kZSIpO0UuZXhwb3J0cz17WmlwV3JpdGVyOmNsYXNzIGUgZXh0ZW5kcyBhLkV2ZW50RW1pdHRlcntjb25zdHJ1Y3RvcihuKXtzdXBlcigpLHRoaXMub3B0aW9ucz1PYmplY3QuYXNzaWduKHt0eXBlOiJub2RlYnVmZmVyIixjb21wcmVzc2lvbjoi''@;'; put 'put ''REVGTEFURSJ9LG4pLHRoaXMuemlwPW5ldyBvLHRoaXMuc3RyZWFtPW5ldyByfWFwcGVuZChuLGkpe2kuaGFzT3duUHJvcGVydHkoImJhc2U2NCIpJiZpLmJhc2U2ND90aGlzLnppcC5maWxlKGkubmFtZSxuLHtiYXNlNjQ6ITB9KTooYi5icm93c2VyJiYic3RyaW5nIj09dHlwZW9mIG4mJihu''@;'; put 'put ''PXQobikpLHRoaXMuemlwLmZpbGUoaS5uYW1lLG4pKX1maW5hbGl6ZSgpe3ZhciBuPXRoaXM7cmV0dXJuIFp0KGZ1bmN0aW9uKigpe2NvbnN0IGk9eWllbGQgbi56aXAuZ2VuZXJhdGVBc3luYyhuLm9wdGlvbnMpO24uc3RyZWFtLmVuZChpKSxuLmVtaXQoImZpbmlzaCIpfSkoKX1yZWFkKG4p''@;'; put 'put ''e3JldHVybiB0aGlzLnN0cmVhbS5yZWFkKG4pfXNldEVuY29kaW5nKG4pe3JldHVybiB0aGlzLnN0cmVhbS5zZXRFbmNvZGluZyhuKX1wYXVzZSgpe3JldHVybiB0aGlzLnN0cmVhbS5wYXVzZSgpfXJlc3VtZSgpe3JldHVybiB0aGlzLnN0cmVhbS5yZXN1bWUoKX1pc1BhdXNlZCgpe3JldHVy''@;'; put 'put ''biB0aGlzLnN0cmVhbS5pc1BhdXNlZCgpfXBpcGUobixpKXtyZXR1cm4gdGhpcy5zdHJlYW0ucGlwZShuLGkpfXVucGlwZShuKXtyZXR1cm4gdGhpcy5zdHJlYW0udW5waXBlKG4pfXVuc2hpZnQobil7cmV0dXJuIHRoaXMuc3RyZWFtLnVuc2hpZnQobil9d3JhcChuKXtyZXR1cm4gdGhpcy5z''@;'; put 'put ''dHJlYW0ud3JhcChuKX19fX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMscygiX3Byb2Nlc3MiKSl9LHsiLi9icm93c2VyLWJ1ZmZlci1lbmNvZGUiOjE3LCIuL3N0cmVhbS1idWYiOjI0LF9wcm9jZXNzOjQ2NyxldmVudHM6NDIyLGpzemlwOjQ0MX1dLDMwOltmdW5jdGlvbihzLEUsUyl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO0UuZXhwb3J0cz17MDp7ZjoiR2VuZXJhbCJ9LDE6e2Y6IjAifSwyOntmOiIwLjAwIn0sMzp7ZjoiIywjIzAifSw0OntmOiIjLCMjMC4wMCJ9LDk6e2Y6IjAlIn0sMTA6e2Y6IjAuMDAlIn0sMTE6e2Y6IjAuMDBFKzAwIn0sMTI6e2Y6IiMgPy8/In0sMTM6e2Y6IiMgPz8vPz8i''@;'; put 'put ''fSwxNDp7ZjoibW0tZGQteXkifSwxNTp7ZjoiZC1tbW0teXkifSwxNjp7ZjoiZC1tbW0ifSwxNzp7ZjoibW1tLXl5In0sMTg6e2Y6Img6bW0gQU0vUE0ifSwxOTp7ZjoiaDptbTpzcyBBTS9QTSJ9LDIwOntmOiJoOm1tIn0sMjE6e2Y6Img6bW06c3MifSwyMjp7ZjonbS9kL3l5ICJoIjptbSd9''@;'; put 'put ''LDI3OnsiemgtdHciOiJbJC00MDRdZS9tL2QiLCJ6aC1jbiI6J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsImphLWpwIjoiWyQtNDExXWdlLm0uZCIsImtvLWtyIjoneXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1Iid9LDI4OnsiemgtdHciOidbJC00MDRdZSJcdTVlNzQibSJcdTY3''@;'; put 'put ''MDgiZCJcdTY1ZTUiJywiemgtY24iOidtIlx1NjcwOCJkIlx1NjVlNSInLCJqYS1qcCI6J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLCJrby1rciI6Im1tLWRkIn0sMjk6eyJ6aC10dyI6J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLCJ6aC1jbiI6''@;'; put 'put ''J20iXHU2NzA4ImQiXHU2NWU1IicsImphLWpwIjonWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsImtvLWtyIjoibW0tZGQifSwzMDp7InpoLXR3IjoibS9kL3l5ICIsInpoLWNuIjoibS1kLXl5IiwiamEtanAiOiJtL2QveXkiLCJrby1rciI6Im1tLWRkLXl5In0sMzE6''@;'; put 'put ''eyJ6aC10dyI6J3l5eXkiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsInpoLWNuIjoneXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJywiamEtanAiOid5eXl5Ilx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLCJrby1rciI6J3l5eXkiXHViMTQ0IiBtbSJcdWM2ZDQiIGRkIlx1Yzc3''@;'; put 'put ''YyInfSwzMjp7InpoLXR3IjonaGgiXHU2NjQyIm1tIlx1NTIwNiInLCJ6aC1jbiI6J2giXHU2NWY2Im1tIlx1NTIwNiInLCJqYS1qcCI6J2giXHU2NjQyIm1tIlx1NTIwNiInLCJrby1rciI6J2giXHVjMmRjIiBtbSJcdWJkODQiJ30sMzM6eyJ6aC10dyI6J2hoIlx1NjY0MiJtbSJcdTUyMDYi''@;'; put 'put ''c3MiXHU3OWQyIicsInpoLWNuIjonaCJcdTY1ZjYibW0iXHU1MjA2InNzIlx1NzlkMiInLCJqYS1qcCI6J2giXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJywia28ta3IiOidoIlx1YzJkYyIgbW0iXHViZDg0IiBzcyJcdWNkMDgiJ30sMzQ6eyJ6aC10dyI6J1x1NGUwYVx1NTM0OC9cdTRl''@;'; put 'put ''MGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiInLCJ6aC1jbiI6J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2IicsImphLWpwIjoneXl5eSJcdTVlNzQibSJcdTY3MDgiJywia28ta3IiOiJ5eXl5LW1tLWRkIn0sMzU6eyJ6aC10dyI6J1x1NGUwYVx1NTM0''@;'; put 'put ''OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJywiemgtY24iOidcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJywiamEtanAiOidtIlx1NjcwOCJkIlx1NjVlNSInLCJrby1rciI6Inl5eXktbW0tZGQifSwz''@;'; put 'put ''Njp7InpoLXR3IjoiWyQtNDA0XWUvbS9kIiwiemgtY24iOid5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLCJqYS1qcCI6IlskLTQxMV1nZS5tLmQiLCJrby1rciI6J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInfSwzNzp7ZjoiIywjIzAgOygjLCMjMCkifSwzODp7ZjoiIywjIzAg''@;'; put 'put ''O1tSZWRdKCMsIyMwKSJ9LDM5OntmOiIjLCMjMC4wMCA7KCMsIyMwLjAwKSJ9LDQwOntmOiIjLCMjMC4wMCA7W1JlZF0oIywjIzAuMDApIn0sNDU6e2Y6Im1tOnNzIn0sNDY6e2Y6IltoXTptbTpzcyJ9LDQ3OntmOiJtbXNzLjAifSw0ODp7ZjoiIyMwLjBFKzAifSw0OTp7ZjoiQCJ9LDUwOnsi''@;'; put 'put ''emgtdHciOiJbJC00MDRdZS9tL2QiLCJ6aC1jbiI6J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsImphLWpwIjoiWyQtNDExXWdlLm0uZCIsImtvLWtyIjoneXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1Iid9LDUxOnsiemgtdHciOidbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJc''@;'; put 'put ''dTY1ZTUiJywiemgtY24iOidtIlx1NjcwOCJkIlx1NjVlNSInLCJqYS1qcCI6J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLCJrby1rciI6Im1tLWRkIn0sNTI6eyJ6aC10dyI6J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiInLCJ6''@;'; put 'put ''aC1jbiI6J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsImphLWpwIjoneXl5eSJcdTVlNzQibSJcdTY3MDgiJywia28ta3IiOiJ5eXl5LW1tLWRkIn0sNTM6eyJ6aC10dyI6J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJywiemgtY24iOidt''@;'; put 'put ''Ilx1NjcwOCJkIlx1NjVlNSInLCJqYS1qcCI6J20iXHU2NzA4ImQiXHU2NWU1IicsImtvLWtyIjoieXl5eS1tbS1kZCJ9LDU0OnsiemgtdHciOidbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJywiemgtY24iOidtIlx1NjcwOCJkIlx1NjVlNSInLCJqYS1qcCI6J1skLTQxMV1n''@;'; put 'put ''Z2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLCJrby1rciI6Im1tLWRkIn0sNTU6eyJ6aC10dyI6J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiInLCJ6aC1jbiI6J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2Iics''@;'; put 'put ''ImphLWpwIjoneXl5eSJcdTVlNzQibSJcdTY3MDgiJywia28ta3IiOiJ5eXl5LW1tLWRkIn0sNTY6eyJ6aC10dyI6J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJywiemgtY24iOidcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2''@;'; put 'put ''NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJywiamEtanAiOidtIlx1NjcwOCJkIlx1NjVlNSInLCJrby1rciI6Inl5eXktbW0tZGQifSw1Nzp7InpoLXR3IjoiWyQtNDA0XWUvbS9kIiwiemgtY24iOid5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLCJqYS1qcCI6IlskLTQxMV1nZS5tLmQiLCJrby1r''@;'; put 'put ''ciI6J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInfSw1ODp7InpoLXR3IjonWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsInpoLWNuIjonbSJcdTY3MDgiZCJcdTY1ZTUiJywiamEtanAiOidbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUi''@;'; put 'put ''Jywia28ta3IiOiJtbS1kZCJ9LDU5OnsidGgtdGgiOiJ0MCJ9LDYwOnsidGgtdGgiOiJ0MC4wMCJ9LDYxOnsidGgtdGgiOiJ0IywjIzAifSw2Mjp7InRoLXRoIjoidCMsIyMwLjAwIn0sNjc6eyJ0aC10aCI6InQwJSJ9LDY4OnsidGgtdGgiOiJ0MC4wMCUifSw2OTp7InRoLXRoIjoidCMgPy8/''@;'; put 'put ''In0sNzA6eyJ0aC10aCI6InQjID8/Lz8/In0sODE6eyJ0aC10aCI6ImQvbS9iYiJ9fX0se31dLDMxOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO0UuZXhwb3J0cz17T2ZmaWNlRG9jdW1lbnQ6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8y''@;'; put 'put ''MDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiLFdvcmtzaGVldDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiLENhbGNDaGFpbjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMu''@;'; put 'put ''b3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jYWxjQ2hhaW4iLFNoYXJlZFN0cmluZ3M6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvc2hhcmVkU3RyaW5ncyIsU3R5bGVzOiJodHRwOi8vc2No''@;'; put 'put ''ZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3N0eWxlcyIsVGhlbWU6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvdGhlbWUiLEh5cGVybGluazoiaHR0cDov''@;'; put 'put ''L3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9oeXBlcmxpbmsiLEltYWdlOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2ltYWdlIixDb3JlUHJvcGVy''@;'; put 'put ''dGllczoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxhdGlvbnNoaXBzL21ldGFkYXRhL2NvcmUtcHJvcGVydGllcyIsRXh0ZW5kZXJQcm9wZXJ0aWVzOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAw''@;'; put 'put ''Ni9yZWxhdGlvbnNoaXBzL2V4dGVuZGVkLXByb3BlcnRpZXMiLENvbW1lbnRzOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NvbW1lbnRzIixWbWxEcmF3aW5nOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0''@;'; put 'put ''cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3ZtbERyYXdpbmciLFRhYmxlOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RhYmxlIn19LHt9XSwzMjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijtjb25zdCBiPXMoIi4uLy4uL3V0aWxzL3BhcnNlLXNheCIpLGE9cygiLi4vLi4vdXRpbHMveG1sLXN0cmVhbSIpO2NsYXNzIG97cHJlcGFyZSgpe31yZW5kZXIoKXt9cGFyc2VPcGVuKHQpe31wYXJzZVRleHQodCl7fXBhcnNlQ2xvc2UodCl7fXJlY29uY2lsZSh0LGUpe31yZXNl''@;'; put 'put ''dCgpe3RoaXMubW9kZWw9bnVsbCx0aGlzLm1hcCYmT2JqZWN0LnZhbHVlcyh0aGlzLm1hcCkuZm9yRWFjaCh0PT57dCBpbnN0YW5jZW9mIG8/dC5yZXNldCgpOnQueGZvcm0mJnQueGZvcm0ucmVzZXQoKX0pfW1lcmdlTW9kZWwodCl7dGhpcy5tb2RlbD1PYmplY3QuYXNzaWduKHRoaXMubW9k''@;'; put 'put ''ZWx8fHt9LHQpfXBhcnNlKHQpe3ZhciBlPXRoaXM7cmV0dXJuIFp0KGZ1bmN0aW9uKigpe3ZhciBpLGw9ITEsbj0hMTt0cnl7Zm9yKHZhciBmLGg9RmUodCk7bD0hKGY9eWllbGQgaC5uZXh0KCkpLmRvbmU7bD0hMSl7Y29uc3QgdT1mLnZhbHVlO2Zvcihjb25zdHtldmVudFR5cGU6cCx2YWx1''@;'; put 'put ''ZTpkfW9mIHUpaWYoIm9wZW50YWciPT09cCllLnBhcnNlT3BlbihkKTtlbHNlIGlmKCJ0ZXh0Ij09PXApZS5wYXJzZVRleHQoZCk7ZWxzZSBpZigiY2xvc2V0YWciPT09cCYmIWUucGFyc2VDbG9zZShkLm5hbWUpKXJldHVybiBlLm1vZGVsfX1jYXRjaCh1KXtuPSEwLGk9dX1maW5hbGx5e3Ry''@;'; put 'put ''eXtsJiZudWxsIT1oLnJldHVybiYmKHlpZWxkIGgucmV0dXJuKCkpfWZpbmFsbHl7aWYobil0aHJvdyBpfX1yZXR1cm4gZS5tb2RlbH0pKCl9cGFyc2VTdHJlYW0odCl7dmFyIGU9dGhpcztyZXR1cm4gWnQoZnVuY3Rpb24qKCl7cmV0dXJuIGUucGFyc2UoYih0KSl9KSgpfWdldCB4bWwoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy50b1htbCh0aGlzLm1vZGVsKX10b1htbCh0KXtjb25zdCBlPW5ldyBhO3JldHVybiB0aGlzLnJlbmRlcihlLHQpLGUueG1sfXN0YXRpYyB0b0F0dHJpYnV0ZSh0LGUpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNb''@;'; put 'put ''Ml07aWYodm9pZCAwPT09dCl7aWYobClyZXR1cm4gZX1lbHNlIGlmKGx8fHQhPT1lKXJldHVybiB0LnRvU3RyaW5nKCl9c3RhdGljIHRvU3RyaW5nQXR0cmlidXRlKHQsZSl7cmV0dXJuIG8udG9BdHRyaWJ1dGUodCxlLGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJd''@;'; put 'put ''JiZhcmd1bWVudHNbMl0pfXN0YXRpYyB0b1N0cmluZ1ZhbHVlKHQsZSl7cmV0dXJuIHZvaWQgMD09PXQ/ZTp0fXN0YXRpYyB0b0Jvb2xBdHRyaWJ1dGUodCxlKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2lmKHZvaWQgMD09''@;'; put 'put ''PXQpe2lmKGwpcmV0dXJuIGV9ZWxzZSBpZihsfHx0IT09ZSlyZXR1cm4gdD8iMSI6IjAifXN0YXRpYyB0b0Jvb2xWYWx1ZSh0LGUpe3JldHVybiB2b2lkIDA9PT10P2U6IjEiPT09dH1zdGF0aWMgdG9JbnRBdHRyaWJ1dGUodCxlKXtyZXR1cm4gby50b0F0dHJpYnV0ZSh0LGUsYXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSl9c3RhdGljIHRvSW50VmFsdWUodCxlKXtyZXR1cm4gdm9pZCAwPT09dD9lOnBhcnNlSW50KHQsMTApfXN0YXRpYyB0b0Zsb2F0QXR0cmlidXRlKHQsZSl7cmV0dXJuIG8udG9BdHRyaWJ1dGUodCxlLGFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0pfXN0YXRpYyB0b0Zsb2F0VmFsdWUodCxlKXtyZXR1cm4gdm9pZCAwPT09dD9lOnBhcnNlRmxvYXQodCl9fUUuZXhwb3J0cz1vfSx7Ii4uLy4uL3V0aWxzL3BhcnNlLXNheCI6MjIsIi4uLy4uL3V0aWxz''@;'; put 'put ''L3htbC1zdHJlYW0iOjI4fV0sMzM6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi9iYXNlLXhmb3JtIiksYT1zKCIuLi8uLi8uLi91dGlscy9jb2wtY2FjaGUiKTtmdW5jdGlvbiBvKHQpe3RyeXtyZXR1cm4gYS5kZWNvZGVFeCh0KSwhMH1jYXRjaHtyZXR1cm4h''@;'; put 'put ''MX19ZnVuY3Rpb24gcih0KXtjb25zdCBlPVtdO2xldCBsPSExLG49IiI7cmV0dXJuIHQuc3BsaXQoIiwiKS5mb3JFYWNoKGk9PntpZighaSlyZXR1cm47Y29uc3QgaD0oaS5tYXRjaCgvJy9nKXx8W10pLmxlbmd0aDtpZighaClyZXR1cm4gdm9pZChsP24rPWkrIiwiOm8oaSkmJmUucHVzaChp''@;'; put 'put ''KSk7Y29uc3QgZj1oJTI9PTA7IWwmJmYmJm8oaSk/ZS5wdXNoKGkpOmwmJiFmPyhsPSExLG8obitpKSYmZS5wdXNoKG4raSksbj0iIik6KGw9ITAsbis9aSsiLCIpfSksZX1FLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBie3JlbmRlcih0LGUpe3Qub3Blbk5vZGUoImRlZmluZWROYW1lIix7bmFt''@;'; put 'put ''ZTplLm5hbWUsbG9jYWxTaGVldElkOmUubG9jYWxTaGVldElkfSksdC53cml0ZVRleHQoZS5yYW5nZXMuam9pbigiLCIpKSx0LmNsb3NlTm9kZSgpfXBhcnNlT3Blbih0KXtyZXR1cm4iZGVmaW5lZE5hbWUiPT09dC5uYW1lJiYodGhpcy5fcGFyc2VkTmFtZT10LmF0dHJpYnV0ZXMubmFtZSx0''@;'; put 'put ''aGlzLl9wYXJzZWRMb2NhbFNoZWV0SWQ9dC5hdHRyaWJ1dGVzLmxvY2FsU2hlZXRJZCx0aGlzLl9wYXJzZWRUZXh0PVtdLCEwKX1wYXJzZVRleHQodCl7dGhpcy5fcGFyc2VkVGV4dC5wdXNoKHQpfXBhcnNlQ2xvc2UoKXtyZXR1cm4gdGhpcy5tb2RlbD17bmFtZTp0aGlzLl9wYXJzZWROYW1l''@;'; put 'put ''LHJhbmdlczpyKHRoaXMuX3BhcnNlZFRleHQuam9pbigiIikpfSx2b2lkIDAhPT10aGlzLl9wYXJzZWRMb2NhbFNoZWV0SWQmJih0aGlzLm1vZGVsLmxvY2FsU2hlZXRJZD1wYXJzZUludCh0aGlzLl9wYXJzZWRMb2NhbFNoZWV0SWQsMTApKSwhMX19fSx7Ii4uLy4uLy4uL3V0aWxzL2NvbC1j''@;'; put 'put ''YWNoZSI6MTksIi4uL2Jhc2UteGZvcm0iOjMyfV0sMzQ6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi8uLi8uLi91dGlscy91dGlscyIpLGE9cygiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGF7cmVuZGVyKG8scil7by5sZWFmTm9k''@;'; put 'put ''ZSgic2hlZXQiLHtzaGVldElkOnIuaWQsbmFtZTpyLm5hbWUsc3RhdGU6ci5zdGF0ZSwicjppZCI6ci5ySWR9KX1wYXJzZU9wZW4obyl7cmV0dXJuInNoZWV0Ij09PW8ubmFtZSYmKHRoaXMubW9kZWw9e25hbWU6Yi54bWxEZWNvZGUoby5hdHRyaWJ1dGVzLm5hbWUpLGlkOnBhcnNlSW50KG8u''@;'; put 'put ''YXR0cmlidXRlcy5zaGVldElkLDEwKSxzdGF0ZTpvLmF0dHJpYnV0ZXMuc3RhdGUscklkOm8uYXR0cmlidXRlc1sicjppZCJdfSwhMCl9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uLy4uLy4uL3V0aWxzL3V0aWxzIjoyNywiLi4vYmFzZS14Zm9ybSI6MzJ9XSwz''@;'; put 'put ''NTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBie3JlbmRlcihhLG8pe2EubGVhZk5vZGUoImNhbGNQciIse2NhbGNJZDoxNzEwMjcsZnVsbENhbGNPbkxvYWQ6by5mdWxsQ2FsY09uTG9hZD8x''@;'; put 'put ''OnZvaWQgMH0pfXBhcnNlT3BlbihhKXtyZXR1cm4iY2FsY1ByIj09PWEubmFtZSYmKHRoaXMubW9kZWw9e30sITApfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0seyIuLi9iYXNlLXhmb3JtIjozMn1dLDM2OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0''@;'; put 'put ''IGI9cygiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGJ7cmVuZGVyKGEsbyl7YS5sZWFmTm9kZSgid29ya2Jvb2tQciIse2RhdGUxOTA0Om8uZGF0ZTE5MDQ/MTp2b2lkIDAsZGVmYXVsdFRoZW1lVmVyc2lvbjoxNjQwMTEsZmlsdGVyUHJpdmFjeToxfSl9cGFyc2VP''@;'; put 'put ''cGVuKGEpe3JldHVybiJ3b3JrYm9va1ByIj09PWEubmFtZSYmKHRoaXMubW9kZWw9e2RhdGUxOTA0OiIxIj09PWEuYXR0cmlidXRlcy5kYXRlMTkwNH0sITApfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0seyIuLi9iYXNlLXhmb3JtIjozMn1dLDM3OltmdW5jdGlvbihz''@;'; put 'put ''LEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGJ7cmVuZGVyKGEsbyl7Y29uc3Qgcj17eFdpbmRvdzpvLnh8fDAseVdpbmRvdzpvLnl8fDAsd2luZG93V2lkdGg6by53aWR0aHx8MTJlMyx3aW5kb3dIZWlnaHQ6by5o''@;'; put 'put ''ZWlnaHR8fDI0ZTMsZmlyc3RTaGVldDpvLmZpcnN0U2hlZXQsYWN0aXZlVGFiOm8uYWN0aXZlVGFifTtvLnZpc2liaWxpdHkmJiJ2aXNpYmxlIiE9PW8udmlzaWJpbGl0eSYmKHIudmlzaWJpbGl0eT1vLnZpc2liaWxpdHkpLGEubGVhZk5vZGUoIndvcmtib29rVmlldyIscil9cGFyc2VPcGVu''@;'; put 'put ''KGEpe2lmKCJ3b3JrYm9va1ZpZXciPT09YS5uYW1lKXtjb25zdCBvPXRoaXMubW9kZWw9e30scj1mdW5jdGlvbihlLGwsbil7Y29uc3QgaT12b2lkIDAhPT1sP29bZV09bDpuO3ZvaWQgMCE9PWkmJihvW2VdPWkpfSx0PWZ1bmN0aW9uKGUsbCxuKXtjb25zdCBpPXZvaWQgMCE9PWw/b1tlXT1w''@;'; put 'put ''YXJzZUludChsLDEwKTpuO3ZvaWQgMCE9PWkmJihvW2VdPWkpfTtyZXR1cm4gdCgieCIsYS5hdHRyaWJ1dGVzLnhXaW5kb3csMCksdCgieSIsYS5hdHRyaWJ1dGVzLnlXaW5kb3csMCksdCgid2lkdGgiLGEuYXR0cmlidXRlcy53aW5kb3dXaWR0aCwyNWUzKSx0KCJoZWlnaHQiLGEuYXR0cmli''@;'; put 'put ''dXRlcy53aW5kb3dIZWlnaHQsMWU0KSxyKCJ2aXNpYmlsaXR5IixhLmF0dHJpYnV0ZXMudmlzaWJpbGl0eSwidmlzaWJsZSIpLHQoImFjdGl2ZVRhYiIsYS5hdHRyaWJ1dGVzLmFjdGl2ZVRhYix2b2lkIDApLHQoImZpcnN0U2hlZXQiLGEuYXR0cmlidXRlcy5maXJzdFNoZWV0LHZvaWQgMCks''@;'; put 'put ''ITB9cmV0dXJuITF9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sMzg6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi8uLi8uLi91dGlscy91bmRlci1kYXNoIiksYT1zKCIuLi8uLi8uLi91dGlscy9j''@;'; put 'put ''b2wtY2FjaGUiKSxvPXMoIi4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW0iKSxyPXMoIi4uL2Jhc2UteGZvcm0iKSx0PXMoIi4uL3N0YXRpYy14Zm9ybSIpLGU9cygiLi4vbGlzdC14Zm9ybSIpLGw9cygiLi9kZWZpbmVkLW5hbWUteGZvcm0iKSxuPXMoIi4vc2hlZXQteGZvcm0iKSxpPXMoIi4v''@;'; put 'put ''d29ya2Jvb2stdmlldy14Zm9ybSIpLGg9cygiLi93b3JrYm9vay1wcm9wZXJ0aWVzLXhmb3JtIiksZj1zKCIuL3dvcmtib29rLWNhbGMtcHJvcGVydGllcy14Zm9ybSIpO2NsYXNzIHUgZXh0ZW5kcyBye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17ZmlsZVZlcnNpb246dS5TVEFU''@;'; put 'put ''SUNfWEZPUk1TLmZpbGVWZXJzaW9uLHdvcmtib29rUHI6bmV3IGgsYm9va1ZpZXdzOm5ldyBlKHt0YWc6ImJvb2tWaWV3cyIsY291bnQ6ITEsY2hpbGRYZm9ybTpuZXcgaX0pLHNoZWV0czpuZXcgZSh7dGFnOiJzaGVldHMiLGNvdW50OiExLGNoaWxkWGZvcm06bmV3IG59KSxkZWZpbmVkTmFt''@;'; put 'put ''ZXM6bmV3IGUoe3RhZzoiZGVmaW5lZE5hbWVzIixjb3VudDohMSxjaGlsZFhmb3JtOm5ldyBsfSksY2FsY1ByOm5ldyBmfX1wcmVwYXJlKGQpe2Quc2hlZXRzPWQud29ya3NoZWV0cztjb25zdCB2PVtdO2xldCBfPTA7ZC5zaGVldHMuZm9yRWFjaChBPT57aWYoQS5wYWdlU2V0dXAmJkEucGFn''@;'; put 'put ''ZVNldHVwLnByaW50QXJlYSYmQS5wYWdlU2V0dXAucHJpbnRBcmVhLnNwbGl0KCImJiIpLmZvckVhY2goST0+e2NvbnN0IEw9SS5zcGxpdCgiOiIpO3YucHVzaCh7bmFtZToiX3hsbm0uUHJpbnRfQXJlYSIscmFuZ2VzOltgJyR7QS5uYW1lfSchJCR7TFswXX06JCR7TFsxXX1gXSxsb2NhbFNo''@;'; put 'put ''ZWV0SWQ6X30pfSksQS5wYWdlU2V0dXAmJihBLnBhZ2VTZXR1cC5wcmludFRpdGxlc1Jvd3x8QS5wYWdlU2V0dXAucHJpbnRUaXRsZXNDb2x1bW4pKXtjb25zdCBJPVtdO2lmKEEucGFnZVNldHVwLnByaW50VGl0bGVzQ29sdW1uKXtjb25zdCBOPUEucGFnZVNldHVwLnByaW50VGl0bGVzQ29s''@;'; put 'put ''dW1uLnNwbGl0KCI6Iik7SS5wdXNoKGAnJHtBLm5hbWV9JyEkJHtOWzBdfTokJHtOWzFdfWApfWlmKEEucGFnZVNldHVwLnByaW50VGl0bGVzUm93KXtjb25zdCBOPUEucGFnZVNldHVwLnByaW50VGl0bGVzUm93LnNwbGl0KCI6Iik7SS5wdXNoKGAnJHtBLm5hbWV9JyEkJHtOWzBdfTokJHtO''@;'; put 'put ''WzFdfWApfXYucHVzaCh7bmFtZToiX3hsbm0uUHJpbnRfVGl0bGVzIixyYW5nZXM6SSxsb2NhbFNoZWV0SWQ6X30pfV8rK30pLHYubGVuZ3RoJiYoZC5kZWZpbmVkTmFtZXM9ZC5kZWZpbmVkTmFtZXMuY29uY2F0KHYpKSwoZC5tZWRpYXx8W10pLmZvckVhY2goKEEsSSk9PntBLm5hbWU9QS50''@;'; put 'put ''eXBlKyhJKzEpfSl9cmVuZGVyKGQsdil7ZC5vcGVuWG1sKG8uU3RkRG9jQXR0cmlidXRlcyksZC5vcGVuTm9kZSgid29ya2Jvb2siLHUuV09SS0JPT0tfQVRUUklCVVRFUyksdGhpcy5tYXAuZmlsZVZlcnNpb24ucmVuZGVyKGQpLHRoaXMubWFwLndvcmtib29rUHIucmVuZGVyKGQsdi5wcm9w''@;'; put 'put ''ZXJ0aWVzKSx0aGlzLm1hcC5ib29rVmlld3MucmVuZGVyKGQsdi52aWV3cyksdGhpcy5tYXAuc2hlZXRzLnJlbmRlcihkLHYuc2hlZXRzKSx0aGlzLm1hcC5kZWZpbmVkTmFtZXMucmVuZGVyKGQsdi5kZWZpbmVkTmFtZXMpLHRoaXMubWFwLmNhbGNQci5yZW5kZXIoZCx2LmNhbGNQcm9wZXJ0''@;'; put 'put ''aWVzKSxkLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihkKXtyZXR1cm4gdGhpcy5wYXJzZXI/KHRoaXMucGFyc2VyLnBhcnNlT3BlbihkKSwhMCk6KCJ3b3JrYm9vayI9PT1kLm5hbWV8fCh0aGlzLnBhcnNlcj10aGlzLm1hcFtkLm5hbWVdLHRoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZU9w''@;'; put 'put ''ZW4oZCkpLCEwKX1wYXJzZVRleHQoZCl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChkKX1wYXJzZUNsb3NlKGQpe3JldHVybiB0aGlzLnBhcnNlcj8odGhpcy5wYXJzZXIucGFyc2VDbG9zZShkKXx8KHRoaXMucGFyc2VyPXZvaWQgMCksITApOiJ3b3JrYm9vayIhPT1kfHwo''@;'; put 'put ''dGhpcy5tb2RlbD17c2hlZXRzOnRoaXMubWFwLnNoZWV0cy5tb2RlbCxwcm9wZXJ0aWVzOnRoaXMubWFwLndvcmtib29rUHIubW9kZWx8fHt9LHZpZXdzOnRoaXMubWFwLmJvb2tWaWV3cy5tb2RlbCxjYWxjUHJvcGVydGllczp7fX0sdGhpcy5tYXAuZGVmaW5lZE5hbWVzLm1vZGVsJiYodGhp''@;'; put 'put ''cy5tb2RlbC5kZWZpbmVkTmFtZXM9dGhpcy5tYXAuZGVmaW5lZE5hbWVzLm1vZGVsKSwhMSl9cmVjb25jaWxlKGQpe2NvbnN0IHY9KGQud29ya2Jvb2tSZWxzfHxbXSkucmVkdWNlKChOLFApPT4oTltQLklkXT1QLE4pLHt9KSxfPVtdO2xldCBBLEk9MDsoZC5zaGVldHN8fFtdKS5mb3JFYWNo''@;'; put 'put ''KE49Pntjb25zdCBQPXZbTi5ySWRdO1AmJihBPWQud29ya3NoZWV0SGFzaFsieGwvIitQLlRhcmdldC5yZXBsYWNlKC9eKFxzfFwveGxcLykrLywiIildLEEmJihBLm5hbWU9Ti5uYW1lLEEuaWQ9Ti5pZCxBLnN0YXRlPU4uc3RhdGUsX1tJKytdPUEpKX0pO2NvbnN0IEw9W107Yi5lYWNoKGQu''@;'; put 'put ''ZGVmaW5lZE5hbWVzLE49PntpZigiX3hsbm0uUHJpbnRfQXJlYSI9PT1OLm5hbWUpe2lmKEE9X1tOLmxvY2FsU2hlZXRJZF0sQSl7QS5wYWdlU2V0dXB8fChBLnBhZ2VTZXR1cD17fSk7Y29uc3QgUD1hLmRlY29kZUV4KE4ucmFuZ2VzWzBdKTtBLnBhZ2VTZXR1cC5wcmludEFyZWE9QS5wYWdl''@;'; put 'put ''U2V0dXAucHJpbnRBcmVhP2Ake0EucGFnZVNldHVwLnByaW50QXJlYX0mJiR7UC5kaW1lbnNpb25zfWA6UC5kaW1lbnNpb25zfX1lbHNlIGlmKCJfeGxubS5QcmludF9UaXRsZXMiPT09Ti5uYW1lKXtpZihBPV9bTi5sb2NhbFNoZWV0SWRdLEEpe0EucGFnZVNldHVwfHwoQS5wYWdlU2V0dXA9''@;'; put 'put ''e30pO2NvbnN0IFA9Ti5yYW5nZXMuam9pbigiLCIpLEI9L1wkL2csRD1QLm1hdGNoKC9cJFxkKzpcJFxkKy8pO0QmJkQubGVuZ3RoJiYoQS5wYWdlU2V0dXAucHJpbnRUaXRsZXNSb3c9RFswXS5yZXBsYWNlKEIsIiIpKTtjb25zdCBNPVAubWF0Y2goL1wkW0EtWl0rOlwkW0EtWl0rLyk7TSYm''@;'; put 'put ''TS5sZW5ndGgmJihBLnBhZ2VTZXR1cC5wcmludFRpdGxlc0NvbHVtbj1NWzBdLnJlcGxhY2UoQiwiIikpfX1lbHNlIEwucHVzaChOKX0pLGQuZGVmaW5lZE5hbWVzPUwsZC5tZWRpYS5mb3JFYWNoKChOLFApPT57Ti5pbmRleD1QfSl9fXUuV09SS0JPT0tfQVRUUklCVVRFUz17eG1sbnM6Imh0''@;'; put 'put ''dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIsInhtbG5zOnIiOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIiwieG1sbnM6bWMiOiJodHRwOi8vc2NoZW1hcy5v''@;'; put 'put ''cGVueG1sZm9ybWF0cy5vcmcvbWFya3VwLWNvbXBhdGliaWxpdHkvMjAwNiIsIm1jOklnbm9yYWJsZSI6IngxNSIsInhtbG5zOngxNSI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAxMC8xMS9tYWluIn0sdS5TVEFUSUNfWEZPUk1TPXtmaWxl''@;'; put 'put ''VmVyc2lvbjpuZXcgdCh7dGFnOiJmaWxlVmVyc2lvbiIsJDp7YXBwTmFtZToieGwiLGxhc3RFZGl0ZWQ6NSxsb3dlc3RFZGl0ZWQ6NSxydXBCdWlsZDo5MzAzfX0pfSxFLmV4cG9ydHM9dX0seyIuLi8uLi8uLi91dGlscy9jb2wtY2FjaGUiOjE5LCIuLi8uLi8uLi91dGlscy91bmRlci1kYXNo''@;'; put 'put ''IjoyNiwiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbSI6MjgsIi4uL2Jhc2UteGZvcm0iOjMyLCIuLi9saXN0LXhmb3JtIjo3MSwiLi4vc3RhdGljLXhmb3JtIjoxMjAsIi4vZGVmaW5lZC1uYW1lLXhmb3JtIjozMywiLi9zaGVldC14Zm9ybSI6MzQsIi4vd29ya2Jvb2stY2FsYy1wcm9wZXJ0''@;'; put 'put ''aWVzLXhmb3JtIjozNSwiLi93b3JrYm9vay1wcm9wZXJ0aWVzLXhmb3JtIjozNiwiLi93b3JrYm9vay12aWV3LXhmb3JtIjozN31dLDM5OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vc3RyaW5ncy9yaWNoLXRleHQteGZvcm0iKSxhPXMoIi4uLy4uLy4uL3V0''@;'; put 'put ''aWxzL3V0aWxzIiksbz1zKCIuLi9iYXNlLXhmb3JtIikscj1FLmV4cG9ydHM9ZnVuY3Rpb24odCl7dGhpcy5tb2RlbD10fTthLmluaGVyaXRzKHIsbyx7Z2V0IHRhZygpe3JldHVybiJyIn0sZ2V0IHJpY2hUZXh0WGZvcm0oKXtyZXR1cm4gdGhpcy5fcmljaFRleHRYZm9ybXx8KHRoaXMuX3Jp''@;'; put 'put ''Y2hUZXh0WGZvcm09bmV3IGIpLHRoaXMuX3JpY2hUZXh0WGZvcm19LHJlbmRlcih0LGUpe3Qub3Blbk5vZGUoImNvbW1lbnQiLHtyZWY6KGU9ZXx8dGhpcy5tb2RlbCkucmVmLGF1dGhvcklkOjB9KSx0Lm9wZW5Ob2RlKCJ0ZXh0IiksZSYmZS5ub3RlJiZlLm5vdGUudGV4dHMmJmUubm90ZS50''@;'; put 'put ''ZXh0cy5mb3JFYWNoKGw9Pnt0aGlzLnJpY2hUZXh0WGZvcm0ucmVuZGVyKHQsbCl9KSx0LmNsb3NlTm9kZSgpLHQuY2xvc2VOb2RlKCl9LHBhcnNlT3Blbih0KXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKHQpLCEwO3N3aXRjaCh0Lm5hbWUpe2Nhc2UiY29t''@;'; put 'put ''bWVudCI6cmV0dXJuIHRoaXMubW9kZWw9e3R5cGU6Im5vdGUiLG5vdGU6e3RleHRzOltdfSwuLi50LmF0dHJpYnV0ZXN9LCEwO2Nhc2UiciI6cmV0dXJuIHRoaXMucGFyc2VyPXRoaXMucmljaFRleHRYZm9ybSx0aGlzLnBhcnNlci5wYXJzZU9wZW4odCksITA7ZGVmYXVsdDpyZXR1cm4hMX19''@;'; put 'put ''LHBhcnNlVGV4dCh0KXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KHQpfSxwYXJzZUNsb3NlKHQpe3N3aXRjaCh0KXtjYXNlImNvbW1lbnQiOnJldHVybiExO2Nhc2UiciI6cmV0dXJuIHRoaXMubW9kZWwubm90ZS50ZXh0cy5wdXNoKHRoaXMucGFyc2VyLm1vZGVsKSx0aGlz''@;'; put 'put ''LnBhcnNlcj12b2lkIDAsITA7ZGVmYXVsdDpyZXR1cm4gdGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlQ2xvc2UodCksITB9fX0pfSx7Ii4uLy4uLy4uL3V0aWxzL3V0aWxzIjoyNywiLi4vYmFzZS14Zm9ybSI6MzIsIi4uL3N0cmluZ3MvcmljaC10ZXh0LXhmb3JtIjoxMjJ9XSw0MDpb''@;'; put 'put ''ZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW0iKSxhPXMoIi4uLy4uLy4uL3V0aWxzL3V0aWxzIiksbz1zKCIuLi9iYXNlLXhmb3JtIikscj1zKCIuL2NvbW1lbnQteGZvcm0iKSx0PUUuZXhwb3J0cz1mdW5jdGlvbigpe3Ro''@;'; put 'put ''aXMubWFwPXtjb21tZW50Om5ldyByfX07YS5pbmhlcml0cyh0LG8se0NPTU1FTlRTX0FUVFJJQlVURVM6e3htbG5zOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW4ifX0se3JlbmRlcihlLGwpe2w9bHx8dGhpcy5tb2RlbCxlLm9wZW5Y''@;'; put 'put ''bWwoYi5TdGREb2NBdHRyaWJ1dGVzKSxlLm9wZW5Ob2RlKCJjb21tZW50cyIsdC5DT01NRU5UU19BVFRSSUJVVEVTKSxlLm9wZW5Ob2RlKCJhdXRob3JzIiksZS5sZWFmTm9kZSgiYXV0aG9yIixudWxsLCJBdXRob3IiKSxlLmNsb3NlTm9kZSgpLGUub3Blbk5vZGUoImNvbW1lbnRMaXN0Iiks''@;'; put 'put ''bC5jb21tZW50cy5mb3JFYWNoKG49Pnt0aGlzLm1hcC5jb21tZW50LnJlbmRlcihlLG4pfSksZS5jbG9zZU5vZGUoKSxlLmNsb3NlTm9kZSgpfSxwYXJzZU9wZW4oZSl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMDtzd2l0Y2goZS5uYW1lKXtjYXNl''@;'; put 'put ''ImNvbW1lbnRMaXN0IjpyZXR1cm4gdGhpcy5tb2RlbD17Y29tbWVudHM6W119LCEwO2Nhc2UiY29tbWVudCI6cmV0dXJuIHRoaXMucGFyc2VyPXRoaXMubWFwLmNvbW1lbnQsdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO2RlZmF1bHQ6cmV0dXJuITF9fSxwYXJzZVRleHQoZSl7dGhpcy5w''@;'; put 'put ''YXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChlKX0scGFyc2VDbG9zZShlKXtzd2l0Y2goZSl7Y2FzZSJjb21tZW50TGlzdCI6cmV0dXJuITE7Y2FzZSJjb21tZW50IjpyZXR1cm4gdGhpcy5tb2RlbC5jb21tZW50cy5wdXNoKHRoaXMucGFyc2VyLm1vZGVsKSx0aGlzLnBhcnNlcj12b2lk''@;'; put 'put ''IDAsITA7ZGVmYXVsdDpyZXR1cm4gdGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoZSksITB9fX0pfSx7Ii4uLy4uLy4uL3V0aWxzL3V0aWxzIjoyNywiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbSI6MjgsIi4uL2Jhc2UteGZvcm0iOjMyLCIuL2NvbW1lbnQteGZvcm0iOjM5''@;'; put 'put ''fV0sNDE6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi8uLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgYntjb25zdHJ1Y3RvcihhKXtzdXBlcigpLHRoaXMuX21vZGVsPWF9Z2V0IHRhZygpe3JldHVybiB0aGlzLl9tb2RlbCYmdGhpcy5f''@;'; put 'put ''bW9kZWwudGFnfXJlbmRlcihhLG8scil7KG89PT1yWzJdfHwieDpTaXplV2l0aENlbGxzIj09PXRoaXMudGFnJiZvPT09clsxXSkmJmEubGVhZk5vZGUodGhpcy50YWcpfXBhcnNlT3BlbihhKXtyZXR1cm4gYS5uYW1lPT09dGhpcy50YWcmJih0aGlzLm1vZGVsPXt9LHRoaXMubW9kZWxbdGhp''@;'; put 'put ''cy50YWddPSEwLCEwKX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHsiLi4vLi4vYmFzZS14Zm9ybSI6MzJ9XSw0MjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uLy4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBi''@;'; put 'put ''e2NvbnN0cnVjdG9yKGEpe3N1cGVyKCksdGhpcy5fbW9kZWw9YX1nZXQgdGFnKCl7cmV0dXJuIHRoaXMuX21vZGVsJiZ0aGlzLl9tb2RlbC50YWd9cmVuZGVyKGEsbyl7YS5sZWFmTm9kZSh0aGlzLnRhZyxudWxsLG8pfXBhcnNlT3BlbihhKXtyZXR1cm4gYS5uYW1lPT09dGhpcy50YWcmJih0''@;'; put 'put ''aGlzLnRleHQ9IiIsITApfXBhcnNlVGV4dChhKXt0aGlzLnRleHQ9YX1wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0seyIuLi8uLi9iYXNlLXhmb3JtIjozMn1dLDQzOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFz''@;'; put 'put ''cyBleHRlbmRzIGJ7Z2V0IHRhZygpe3JldHVybiJ4OkFuY2hvciJ9Z2V0QW5jaG9yUmVjdChhKXtjb25zdCBvPU1hdGguZmxvb3IoYS5sZWZ0KSxyPU1hdGguZmxvb3IoNjgqKGEubGVmdC1vKSksdD1NYXRoLmZsb29yKGEudG9wKSxlPU1hdGguZmxvb3IoMTgqKGEudG9wLXQpKSxsPU1hdGgu''@;'; put 'put ''Zmxvb3IoYS5yaWdodCksbj1NYXRoLmZsb29yKDY4KihhLnJpZ2h0LWwpKSxpPU1hdGguZmxvb3IoYS5ib3R0b20pO3JldHVybltvLHIsdCxlLGwsbixpLE1hdGguZmxvb3IoMTgqKGEuYm90dG9tLWkpKV19Z2V0RGVmYXVsdFJlY3QoYSl7Y29uc3Qgbz1hLmNvbCxyPU1hdGgubWF4KGEucm93''@;'; put 'put ''LTIsMCk7cmV0dXJuW28sNixyLDE0LG8rMiwyLHIrNCwxNl19cmVuZGVyKGEsbyl7Y29uc3Qgcj1vLmFuY2hvcj90aGlzLmdldEFuY2hvclJlY3Qoby5hbmNob3IpOnRoaXMuZ2V0RGVmYXVsdFJlY3Qoby5yZWZBZGRyZXNzKTthLmxlYWZOb2RlKCJ4OkFuY2hvciIsbnVsbCxyLmpvaW4oIiwg''@;'; put 'put ''IikpfXBhcnNlT3BlbihhKXtyZXR1cm4gYS5uYW1lPT09dGhpcy50YWcmJih0aGlzLnRleHQ9IiIsITApfXBhcnNlVGV4dChhKXt0aGlzLnRleHQ9YX1wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0seyIuLi9iYXNlLXhmb3JtIjozMn1dLDQ0OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O2NvbnN0IGI9cygiLi4vYmFzZS14Zm9ybSIpLGE9cygiLi92bWwtYW5jaG9yLXhmb3JtIiksbz1zKCIuL3N0eWxlL3ZtbC1wcm90ZWN0aW9uLXhmb3JtIikscj1zKCIuL3N0eWxlL3ZtbC1wb3NpdGlvbi14Zm9ybSIpLHQ9WyJ0d29DZWxscyIsIm9uZUNlbGxzIiwiYWJzb2x1dGUiXTtFLmV4''@;'; put 'put ''cG9ydHM9Y2xhc3MgZXh0ZW5kcyBie2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17Ing6QW5jaG9yIjpuZXcgYSwieDpMb2NrZWQiOm5ldyBvKHt0YWc6Ing6TG9ja2VkIn0pLCJ4OkxvY2tUZXh0IjpuZXcgbyh7dGFnOiJ4OkxvY2tUZXh0In0pLCJ4OlNpemVXaXRoQ2VsbHMiOm5l''@;'; put 'put ''dyByKHt0YWc6Ing6U2l6ZVdpdGhDZWxscyJ9KSwieDpNb3ZlV2l0aENlbGxzIjpuZXcgcih7dGFnOiJ4Ok1vdmVXaXRoQ2VsbHMifSl9fWdldCB0YWcoKXtyZXR1cm4ieDpDbGllbnREYXRhIn1yZW5kZXIoZSxsKXtjb25zdHtwcm90ZWN0aW9uOm4sZWRpdEFzOml9PWwubm90ZTtlLm9wZW5O''@;'; put 'put ''b2RlKHRoaXMudGFnLHtPYmplY3RUeXBlOiJOb3RlIn0pLHRoaXMubWFwWyJ4Ok1vdmVXaXRoQ2VsbHMiXS5yZW5kZXIoZSxpLHQpLHRoaXMubWFwWyJ4OlNpemVXaXRoQ2VsbHMiXS5yZW5kZXIoZSxpLHQpLHRoaXMubWFwWyJ4OkFuY2hvciJdLnJlbmRlcihlLGwpLHRoaXMubWFwWyJ4Okxv''@;'; put 'put ''Y2tlZCJdLnJlbmRlcihlLG4ubG9ja2VkKSxlLmxlYWZOb2RlKCJ4OkF1dG9GaWxsIixudWxsLCJGYWxzZSIpLHRoaXMubWFwWyJ4OkxvY2tUZXh0Il0ucmVuZGVyKGUsbi5sb2NrVGV4dCksZS5sZWFmTm9kZSgieDpSb3ciLG51bGwsbC5yZWZBZGRyZXNzLnJvdy0xKSxlLmxlYWZOb2RlKCJ4''@;'; put 'put ''OkNvbHVtbiIsbnVsbCxsLnJlZkFkZHJlc3MuY29sLTEpLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe3JldHVybiBlLm5hbWU9PT10aGlzLnRhZz8odGhpcy5yZXNldCgpLHRoaXMubW9kZWw9e2FuY2hvcjpbXSxwcm90ZWN0aW9uOnt9LGVkaXRBczoiIn0pOih0aGlzLnBhcnNlcj10aGlz''@;'; put 'put ''Lm1hcFtlLm5hbWVdLHRoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSkpLCEwfXBhcnNlVGV4dChlKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KGUpfXBhcnNlQ2xvc2UoZSl7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUp''@;'; put 'put ''fHwodGhpcy5wYXJzZXI9dm9pZCAwKSwhMCk6ZSE9PXRoaXMudGFnfHwodGhpcy5ub3JtYWxpemVNb2RlbCgpLCExKX1ub3JtYWxpemVNb2RlbCgpe2NvbnN0IGU9T2JqZWN0LmFzc2lnbih7fSx0aGlzLm1hcFsieDpNb3ZlV2l0aENlbGxzIl0ubW9kZWwsdGhpcy5tYXBbIng6U2l6ZVdpdGhD''@;'; put 'put ''ZWxscyJdLm1vZGVsKSxsPU9iamVjdC5rZXlzKGUpLmxlbmd0aDt0aGlzLm1vZGVsLmVkaXRBcz10W2xdLHRoaXMubW9kZWwuYW5jaG9yPXRoaXMubWFwWyJ4OkFuY2hvciJdLnRleHQsdGhpcy5tb2RlbC5wcm90ZWN0aW9uLmxvY2tlZD10aGlzLm1hcFsieDpMb2NrZWQiXS50ZXh0LHRoaXMu''@;'; put 'put ''bW9kZWwucHJvdGVjdGlvbi5sb2NrVGV4dD10aGlzLm1hcFsieDpMb2NrVGV4dCJdLnRleHR9fX0seyIuLi9iYXNlLXhmb3JtIjozMiwiLi9zdHlsZS92bWwtcG9zaXRpb24teGZvcm0iOjQxLCIuL3N0eWxlL3ZtbC1wcm90ZWN0aW9uLXhmb3JtIjo0MiwiLi92bWwtYW5jaG9yLXhmb3JtIjo0''@;'; put 'put ''M31dLDQ1OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbSIpLGE9cygiLi4vYmFzZS14Zm9ybSIpLG89cygiLi92bWwtc2hhcGUteGZvcm0iKTtjbGFzcyByIGV4dGVuZHMgYXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhp''@;'; put 'put ''cy5tYXA9eyJ2OnNoYXBlIjpuZXcgb319Z2V0IHRhZygpe3JldHVybiJ4bWwifXJlbmRlcihlLGwpe2Uub3BlblhtbChiLlN0ZERvY0F0dHJpYnV0ZXMpLGUub3Blbk5vZGUodGhpcy50YWcsci5EUkFXSU5HX0FUVFJJQlVURVMpLGUub3Blbk5vZGUoIm86c2hhcGVsYXlvdXQiLHsidjpleHQi''@;'; put 'put ''OiJlZGl0In0pLGUubGVhZk5vZGUoIm86aWRtYXAiLHsidjpleHQiOiJlZGl0IixkYXRhOjF9KSxlLmNsb3NlTm9kZSgpLGUub3Blbk5vZGUoInY6c2hhcGV0eXBlIix7aWQ6Il94MDAwMF90MjAyIixjb29yZHNpemU6IjIxNjAwLDIxNjAwIiwibzpzcHQiOjIwMixwYXRoOiJtLGwsMjE2MDBy''@;'; put 'put ''MjE2MDAsbDIxNjAwLHhlIn0pLGUubGVhZk5vZGUoInY6c3Ryb2tlIix7am9pbnN0eWxlOiJtaXRlciJ9KSxlLmxlYWZOb2RlKCJ2OnBhdGgiLHtncmFkaWVudHNoYXBlb2s6InQiLCJvOmNvbm5lY3R0eXBlIjoicmVjdCJ9KSxlLmNsb3NlTm9kZSgpLGwuY29tbWVudHMuZm9yRWFjaCgobixp''@;'; put 'put ''KT0+e3RoaXMubWFwWyJ2OnNoYXBlIl0ucmVuZGVyKGUsbixpKX0pLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe3JldHVybiB0aGlzLnBhcnNlcj8odGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwKTooZS5uYW1lPT09dGhpcy50YWc/KHRoaXMucmVzZXQoKSx0aGlzLm1vZGVsPXtjb21t''@;'; put 'put ''ZW50czpbXX0pOih0aGlzLnBhcnNlcj10aGlzLm1hcFtlLm5hbWVdLHRoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSkpLCEwKX1wYXJzZVRleHQoZSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChlKX1wYXJzZUNsb3NlKGUpe3JldHVybiB0aGlzLnBhcnNl''@;'; put 'put ''cj8odGhpcy5wYXJzZXIucGFyc2VDbG9zZShlKXx8KHRoaXMubW9kZWwuY29tbWVudHMucHVzaCh0aGlzLnBhcnNlci5tb2RlbCksdGhpcy5wYXJzZXI9dm9pZCAwKSwhMCk6ZSE9PXRoaXMudGFnfXJlY29uY2lsZShlLGwpe2UuYW5jaG9ycy5mb3JFYWNoKG49PntuLmJyP3RoaXMubWFwWyJ4''@;'; put 'put ''ZHI6dHdvQ2VsbEFuY2hvciJdLnJlY29uY2lsZShuLGwpOnRoaXMubWFwWyJ4ZHI6b25lQ2VsbEFuY2hvciJdLnJlY29uY2lsZShuLGwpfSl9fXIuRFJBV0lOR19BVFRSSUJVVEVTPXsieG1sbnM6diI6InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIiwieG1sbnM6byI6InVybjpzY2hl''@;'; put 'put ''bWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIsInhtbG5zOngiOiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpleGNlbCJ9LEUuZXhwb3J0cz1yfSx7Ii4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW0iOjI4LCIuLi9iYXNlLXhmb3JtIjozMiwiLi92bWwtc2hhcGUteGZv''@;'; put 'put ''cm0iOjQ2fV0sNDY6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi9iYXNlLXhmb3JtIiksYT1zKCIuL3ZtbC10ZXh0Ym94LXhmb3JtIiksbz1zKCIuL3ZtbC1jbGllbnQtZGF0YS14Zm9ybSIpO2NsYXNzIHIgZXh0ZW5kcyBie2NvbnN0cnVjdG9yKCl7c3VwZXIo''@;'; put 'put ''KSx0aGlzLm1hcD17InY6dGV4dGJveCI6bmV3IGEsIng6Q2xpZW50RGF0YSI6bmV3IG99fWdldCB0YWcoKXtyZXR1cm4idjpzaGFwZSJ9cmVuZGVyKGUsbCxuKXtlLm9wZW5Ob2RlKCJ2OnNoYXBlIixyLlZfU0hBUEVfQVRUUklCVVRFUyhsLG4pKSxlLmxlYWZOb2RlKCJ2OmZpbGwiLHtjb2xv''@;'; put 'put ''cjI6ImluZm9CYWNrZ3JvdW5kIFs4MF0ifSksZS5sZWFmTm9kZSgidjpzaGFkb3ciLHtjb2xvcjoibm9uZSBbODFdIixvYnNjdXJlZDoidCJ9KSxlLmxlYWZOb2RlKCJ2OnBhdGgiLHsibzpjb25uZWN0dHlwZSI6Im5vbmUifSksdGhpcy5tYXBbInY6dGV4dGJveCJdLnJlbmRlcihlLGwpLHRo''@;'; put 'put ''aXMubWFwWyJ4OkNsaWVudERhdGEiXS5yZW5kZXIoZSxsKSxlLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihlKXtyZXR1cm4gdGhpcy5wYXJzZXI/KHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMCk6KGUubmFtZT09PXRoaXMudGFnPyh0aGlzLnJlc2V0KCksdGhpcy5tb2RlbD17bWFyZ2luczp7''@;'; put 'put ''aW5zZXRtb2RlOmUuYXR0cmlidXRlc1sibzppbnNldG1vZGUiXX0sYW5jaG9yOiIiLGVkaXRBczoiIixwcm90ZWN0aW9uOnt9fSk6KHRoaXMucGFyc2VyPXRoaXMubWFwW2UubmFtZV0sdGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSksITApfXBhcnNlVGV4dChlKXt0aGlz''@;'; put 'put ''LnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KGUpfXBhcnNlQ2xvc2UoZSl7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpfHwodGhpcy5wYXJzZXI9dm9pZCAwKSwhMCk6ZSE9PXRoaXMudGFnfHwodGhpcy5tb2RlbC5tYXJnaW5zLmluc2V0PXRoaXMu''@;'; put 'put ''bWFwWyJ2OnRleHRib3giXS5tb2RlbCYmdGhpcy5tYXBbInY6dGV4dGJveCJdLm1vZGVsLmluc2V0LHRoaXMubW9kZWwucHJvdGVjdGlvbj10aGlzLm1hcFsieDpDbGllbnREYXRhIl0ubW9kZWwmJnRoaXMubWFwWyJ4OkNsaWVudERhdGEiXS5tb2RlbC5wcm90ZWN0aW9uLHRoaXMubW9kZWwu''@;'; put 'put ''YW5jaG9yPXRoaXMubWFwWyJ4OkNsaWVudERhdGEiXS5tb2RlbCYmdGhpcy5tYXBbIng6Q2xpZW50RGF0YSJdLm1vZGVsLmFuY2hvcix0aGlzLm1vZGVsLmVkaXRBcz10aGlzLm1hcFsieDpDbGllbnREYXRhIl0ubW9kZWwmJnRoaXMubWFwWyJ4OkNsaWVudERhdGEiXS5tb2RlbC5lZGl0QXMs''@;'; put 'put ''ITEpfX1yLlZfU0hBUEVfQVRUUklCVVRFUz0odCxlKT0+KHtpZDoiX3gwMDAwX3MiKygxMDI1K2UpLHR5cGU6IiNfeDAwMDBfdDIwMiIsc3R5bGU6InBvc2l0aW9uOmFic29sdXRlOyBtYXJnaW4tbGVmdDoxMDUuM3B0O21hcmdpbi10b3A6MTAuNXB0O3dpZHRoOjk3LjhwdDtoZWlnaHQ6NTku''@;'; put 'put ''MXB0O3otaW5kZXg6MTt2aXNpYmlsaXR5OmhpZGRlbiIsZmlsbGNvbG9yOiJpbmZvQmFja2dyb3VuZCBbODBdIixzdHJva2Vjb2xvcjoibm9uZSBbODFdIiwibzppbnNldG1vZGUiOnQubm90ZS5tYXJnaW5zJiZ0Lm5vdGUubWFyZ2lucy5pbnNldG1vZGV9KSxFLmV4cG9ydHM9cn0seyIuLi9i''@;'; put 'put ''YXNlLXhmb3JtIjozMiwiLi92bWwtY2xpZW50LWRhdGEteGZvcm0iOjQ0LCIuL3ZtbC10ZXh0Ym94LXhmb3JtIjo0N31dLDQ3OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGJ7Z2V0IHRhZygp''@;'; put 'put ''e3JldHVybiJ2OnRleHRib3gifWNvbnZlcnNpb25Vbml0KGEsbyxyKXtyZXR1cm5gJHtwYXJzZUZsb2F0KGEpKm8udG9GaXhlZCgyKX0ke3J9YH1yZXZlcnNlQ29udmVyc2lvblVuaXQoYSl7cmV0dXJuKGF8fCIiKS5zcGxpdCgiLCIpLm1hcChvPT5OdW1iZXIocGFyc2VGbG9hdCh0aGlzLmNv''@;'; put 'put ''bnZlcnNpb25Vbml0KHBhcnNlRmxvYXQobyksLjEsIiIpKS50b0ZpeGVkKDIpKSl9cmVuZGVyKGEsbyl7Y29uc3Qgcj17c3R5bGU6Im1zby1kaXJlY3Rpb24tYWx0OmF1dG8ifTtpZihvJiZvLm5vdGUpe2xldHtpbnNldDp0fT1vLm5vdGUmJm8ubm90ZS5tYXJnaW5zO0FycmF5LmlzQXJyYXko''@;'; put 'put ''dCkmJih0PXQubWFwKGU9PnRoaXMuY29udmVyc2lvblVuaXQoZSwxMCwibW0iKSkuam9pbigiLCIpKSx0JiYoci5pbnNldD10KX1hLm9wZW5Ob2RlKCJ2OnRleHRib3giLHIpLGEubGVhZk5vZGUoImRpdiIse3N0eWxlOiJ0ZXh0LWFsaWduOmxlZnQifSksYS5jbG9zZU5vZGUoKX1wYXJzZU9w''@;'; put 'put ''ZW4oYSl7cmV0dXJuIGEubmFtZT09PXRoaXMudGFnJiYodGhpcy5tb2RlbD17aW5zZXQ6dGhpcy5yZXZlcnNlQ29udmVyc2lvblVuaXQoYS5hdHRyaWJ1dGVzLmluc2V0KX0pLCEwfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKGEpe3JldHVybiBhIT09dGhpcy50YWd9fX0seyIuLi9iYXNlLXhm''@;'; put 'put ''b3JtIjozMn1dLDQ4OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgYntjcmVhdGVOZXdNb2RlbChhKXtyZXR1cm57fX1wYXJzZU9wZW4oYSl7cmV0dXJuIHRoaXMucGFyc2VyPXRoaXMucGFyc2Vy''@;'; put 'put ''fHx0aGlzLm1hcFthLm5hbWVdLHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZU9wZW4oYSksITApOmEubmFtZT09PXRoaXMudGFnJiYodGhpcy5tb2RlbD10aGlzLmNyZWF0ZU5ld01vZGVsKGEpLCEwKX1wYXJzZVRleHQoYSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4''@;'; put 'put ''dChhKX1vblBhcnNlckNsb3NlKGEsbyl7dGhpcy5tb2RlbFthXT1vLm1vZGVsfXBhcnNlQ2xvc2UoYSl7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGEpfHwodGhpcy5vblBhcnNlckNsb3NlKGEsdGhpcy5wYXJzZXIpLHRoaXMucGFyc2VyPXZvaWQgMCksITAp''@;'; put 'put ''OmEhPT10aGlzLnRhZ319fSx7Ii4vYmFzZS14Zm9ybSI6MzJ9XSw0OTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBie3JlbmRlcihhLG8pe2Eub3Blbk5vZGUoIkhlYWRpbmdQYWlycyIpLGEu''@;'; put 'put ''b3Blbk5vZGUoInZ0OnZlY3RvciIse3NpemU6MixiYXNlVHlwZToidmFyaWFudCJ9KSxhLm9wZW5Ob2RlKCJ2dDp2YXJpYW50IiksYS5sZWFmTm9kZSgidnQ6bHBzdHIiLHZvaWQgMCwiV29ya3NoZWV0cyIpLGEuY2xvc2VOb2RlKCksYS5vcGVuTm9kZSgidnQ6dmFyaWFudCIpLGEubGVhZk5v''@;'; put 'put ''ZGUoInZ0Omk0Iix2b2lkIDAsby5sZW5ndGgpLGEuY2xvc2VOb2RlKCksYS5jbG9zZU5vZGUoKSxhLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihhKXtyZXR1cm4iSGVhZGluZ1BhaXJzIj09PWEubmFtZX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZShhKXtyZXR1cm4iSGVhZGluZ1BhaXJzIiE9PWF9''@;'; put 'put ''fX0seyIuLi9iYXNlLXhmb3JtIjozMn1dLDUwOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGJ7cmVuZGVyKGEsbyl7YS5vcGVuTm9kZSgiVGl0bGVzT2ZQYXJ0cyIpLGEub3Blbk5vZGUoInZ0''@;'; put 'put ''OnZlY3RvciIse3NpemU6by5sZW5ndGgsYmFzZVR5cGU6Imxwc3RyIn0pLG8uZm9yRWFjaChyPT57YS5sZWFmTm9kZSgidnQ6bHBzdHIiLHZvaWQgMCxyLm5hbWUpfSksYS5jbG9zZU5vZGUoKSxhLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihhKXtyZXR1cm4iVGl0bGVzT2ZQYXJ0cyI9PT1hLm5h''@;'; put 'put ''bWV9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoYSl7cmV0dXJuIlRpdGxlc09mUGFydHMiIT09YX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sNTE6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtIiksYT1zKCIuLi9iYXNl''@;'; put 'put ''LXhmb3JtIiksbz1zKCIuLi9zaW1wbGUvc3RyaW5nLXhmb3JtIikscj1zKCIuL2FwcC1oZWFkaW5nLXBhaXJzLXhmb3JtIiksdD1zKCIuL2FwcC10aXRsZXMtb2YtcGFydHMteGZvcm0iKTtjbGFzcyBlIGV4dGVuZHMgYXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e0NvbXBhbnk6''@;'; put 'put ''bmV3IG8oe3RhZzoiQ29tcGFueSJ9KSxNYW5hZ2VyOm5ldyBvKHt0YWc6Ik1hbmFnZXIifSksSGVhZGluZ1BhaXJzOm5ldyByLFRpdGxlT2ZQYXJ0czpuZXcgdH19cmVuZGVyKG4saSl7bi5vcGVuWG1sKGIuU3RkRG9jQXR0cmlidXRlcyksbi5vcGVuTm9kZSgiUHJvcGVydGllcyIsZS5QUk9Q''@;'; put 'put ''RVJUWV9BVFRSSUJVVEVTKSxuLmxlYWZOb2RlKCJBcHBsaWNhdGlvbiIsdm9pZCAwLCJNaWNyb3NvZnQgRXhjZWwiKSxuLmxlYWZOb2RlKCJEb2NTZWN1cml0eSIsdm9pZCAwLCIwIiksbi5sZWFmTm9kZSgiU2NhbGVDcm9wIix2b2lkIDAsImZhbHNlIiksdGhpcy5tYXAuSGVhZGluZ1BhaXJz''@;'; put 'put ''LnJlbmRlcihuLGkud29ya3NoZWV0cyksdGhpcy5tYXAuVGl0bGVPZlBhcnRzLnJlbmRlcihuLGkud29ya3NoZWV0cyksdGhpcy5tYXAuQ29tcGFueS5yZW5kZXIobixpLmNvbXBhbnl8fCIiKSx0aGlzLm1hcC5NYW5hZ2VyLnJlbmRlcihuLGkubWFuYWdlciksbi5sZWFmTm9kZSgiTGlua3NV''@;'; put 'put ''cFRvRGF0ZSIsdm9pZCAwLCJmYWxzZSIpLG4ubGVhZk5vZGUoIlNoYXJlZERvYyIsdm9pZCAwLCJmYWxzZSIpLG4ubGVhZk5vZGUoIkh5cGVybGlua3NDaGFuZ2VkIix2b2lkIDAsImZhbHNlIiksbi5sZWFmTm9kZSgiQXBwVmVyc2lvbiIsdm9pZCAwLCIxNi4wMzAwIiksbi5jbG9zZU5vZGUo''@;'; put 'put ''KX1wYXJzZU9wZW4obil7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZU9wZW4obiksITApOiJQcm9wZXJ0aWVzIj09PW4ubmFtZXx8KHRoaXMucGFyc2VyPXRoaXMubWFwW24ubmFtZV0sISF0aGlzLnBhcnNlciYmKHRoaXMucGFyc2VyLnBhcnNlT3BlbihuKSwhMCkpfXBh''@;'; put 'put ''cnNlVGV4dChuKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KG4pfXBhcnNlQ2xvc2Uobil7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZUNsb3NlKG4pfHwodGhpcy5wYXJzZXI9dm9pZCAwKSwhMCk6IlByb3BlcnRpZXMiIT09bnx8KHRoaXMubW9kZWw9''@;'; put 'put ''e3dvcmtzaGVldHM6dGhpcy5tYXAuVGl0bGVPZlBhcnRzLm1vZGVsLGNvbXBhbnk6dGhpcy5tYXAuQ29tcGFueS5tb2RlbCxtYW5hZ2VyOnRoaXMubWFwLk1hbmFnZXIubW9kZWx9LCExKX19ZS5EYXRlRm9ybWF0PWZ1bmN0aW9uKGwpe3JldHVybiBsLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgv''@;'; put 'put ''Wy5dXGR7Myw2fS8sIiIpfSxlLkRhdGVBdHRycz17InhzaTp0eXBlIjoiZGN0ZXJtczpXM0NEVEYifSxlLlBST1BFUlRZX0FUVFJJQlVURVM9e3htbG5zOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9leHRlbmRlZC1wcm9wZXJ0aWVzIiwi''@;'; put 'put ''eG1sbnM6dnQiOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9kb2NQcm9wc1ZUeXBlcyJ9LEUuZXhwb3J0cz1lfSx7Ii4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW0iOjI4LCIuLi9iYXNlLXhmb3JtIjozMiwiLi4vc2ltcGxlL3N0cmluZy14''@;'; put 'put ''Zm9ybSI6MTE5LCIuL2FwcC1oZWFkaW5nLXBhaXJzLXhmb3JtIjo0OSwiLi9hcHAtdGl0bGVzLW9mLXBhcnRzLXhmb3JtIjo1MH1dLDUyOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbSIpLGE9cygiLi4vYmFzZS14Zm9y''@;'; put 'put ''bSIpO2NsYXNzIG8gZXh0ZW5kcyBhe3JlbmRlcih0LGUpe3Qub3BlblhtbChiLlN0ZERvY0F0dHJpYnV0ZXMpLHQub3Blbk5vZGUoIlR5cGVzIixvLlBST1BFUlRZX0FUVFJJQlVURVMpO2NvbnN0IGw9e307KGUubWVkaWF8fFtdKS5mb3JFYWNoKG49PntpZigiaW1hZ2UiPT09bi50eXBlKXtj''@;'; put 'put ''b25zdCBpPW4uZXh0ZW5zaW9uO2xbaV18fChsW2ldPSEwLHQubGVhZk5vZGUoIkRlZmF1bHQiLHtFeHRlbnNpb246aSxDb250ZW50VHlwZToiaW1hZ2UvIitpfSkpfX0pLHQubGVhZk5vZGUoIkRlZmF1bHQiLHtFeHRlbnNpb246InJlbHMiLENvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi92bmQu''@;'; put 'put ''b3BlbnhtbGZvcm1hdHMtcGFja2FnZS5yZWxhdGlvbnNoaXBzK3htbCJ9KSx0LmxlYWZOb2RlKCJEZWZhdWx0Iix7RXh0ZW5zaW9uOiJ4bWwiLENvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94bWwifSksdC5sZWFmTm9kZSgiT3ZlcnJpZGUiLHtQYXJ0TmFtZToiL3hsL3dvcmtib29rLnhtbCIs''@;'; put 'put ''Q29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Lm1haW4reG1sIn0pLGUud29ya3NoZWV0cy5mb3JFYWNoKG49Pnt0LmxlYWZOb2RlKCJPdmVycmlkZSIse1BhcnROYW1lOmAveGwvd29ya3NoZWV0cy9z''@;'; put 'put ''aGVldCR7bi5pZH0ueG1sYCxDb250ZW50VHlwZToiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwud29ya3NoZWV0K3htbCJ9KX0pLHQubGVhZk5vZGUoIk92ZXJyaWRlIix7UGFydE5hbWU6Ii94bC90aGVtZS90aGVtZTEueG1sIixD''@;'; put 'put ''b250ZW50VHlwZToiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lK3htbCJ9KSx0LmxlYWZOb2RlKCJPdmVycmlkZSIse1BhcnROYW1lOiIveGwvc3R5bGVzLnhtbCIsQ29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1v''@;'; put 'put ''ZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnN0eWxlcyt4bWwifSksZS5zaGFyZWRTdHJpbmdzJiZlLnNoYXJlZFN0cmluZ3MuY291bnQmJnQubGVhZk5vZGUoIk92ZXJyaWRlIix7UGFydE5hbWU6Ii94bC9zaGFyZWRTdHJpbmdzLnhtbCIsQ29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3Zu''@;'; put 'put ''ZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoYXJlZFN0cmluZ3MreG1sIn0pLGUudGFibGVzJiZlLnRhYmxlcy5mb3JFYWNoKG49Pnt0LmxlYWZOb2RlKCJPdmVycmlkZSIse1BhcnROYW1lOiIveGwvdGFibGVzLyIrbi50YXJnZXQsQ29udGVudFR5cGU6''@;'; put 'put ''ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlK3htbCJ9KX0pLGUuZHJhd2luZ3MmJmUuZHJhd2luZ3MuZm9yRWFjaChuPT57dC5sZWFmTm9kZSgiT3ZlcnJpZGUiLHtQYXJ0TmFtZTpgL3hsL2RyYXdpbmdzLyR7bi5uYW1l''@;'; put 'put ''fS54bWxgLENvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZyt4bWwifSl9KSxlLmNvbW1lbnRSZWZzJiYodC5sZWFmTm9kZSgiRGVmYXVsdCIse0V4dGVuc2lvbjoidm1sIixDb250ZW50VHlwZToiYXBwbGljYXRpb24vdm5k''@;'; put 'put ''Lm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnZtbERyYXdpbmcifSksZS5jb21tZW50UmVmcy5mb3JFYWNoKG49PntsZXR7Y29tbWVudE5hbWU6aX09bjt0LmxlYWZOb2RlKCJPdmVycmlkZSIse1BhcnROYW1lOmAveGwvJHtpfS54bWxgLENvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi92''@;'; put 'put ''bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb21tZW50cyt4bWwifSl9KSksdC5sZWFmTm9kZSgiT3ZlcnJpZGUiLHtQYXJ0TmFtZToiL2RvY1Byb3BzL2NvcmUueG1sIixDb250ZW50VHlwZToiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBh''@;'; put 'put ''Y2thZ2UuY29yZS1wcm9wZXJ0aWVzK3htbCJ9KSx0LmxlYWZOb2RlKCJPdmVycmlkZSIse1BhcnROYW1lOiIvZG9jUHJvcHMvYXBwLnhtbCIsQ29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5leHRlbmRlZC1wcm9wZXJ0aWVzK3htbCJ9''@;'; put 'put ''KSx0LmNsb3NlTm9kZSgpfXBhcnNlT3Blbigpe3JldHVybiExfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fW8uUFJPUEVSVFlfQVRUUklCVVRFUz17eG1sbnM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvY29udGVudC10eXBlcyJ9''@;'; put 'put ''LEUuZXhwb3J0cz1vfSx7Ii4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW0iOjI4LCIuLi9iYXNlLXhmb3JtIjozMn1dLDUzOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbSIpLGE9cygiLi4vYmFzZS14Zm9ybSIpLG89cygi''@;'; put 'put ''Li4vc2ltcGxlL2RhdGUteGZvcm0iKSxyPXMoIi4uL3NpbXBsZS9zdHJpbmcteGZvcm0iKSx0PXMoIi4uL3NpbXBsZS9pbnRlZ2VyLXhmb3JtIik7Y2xhc3MgZSBleHRlbmRzIGF7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXsiZGM6Y3JlYXRvciI6bmV3IHIoe3RhZzoiZGM6Y3Jl''@;'; put 'put ''YXRvciJ9KSwiZGM6dGl0bGUiOm5ldyByKHt0YWc6ImRjOnRpdGxlIn0pLCJkYzpzdWJqZWN0IjpuZXcgcih7dGFnOiJkYzpzdWJqZWN0In0pLCJkYzpkZXNjcmlwdGlvbiI6bmV3IHIoe3RhZzoiZGM6ZGVzY3JpcHRpb24ifSksImRjOmlkZW50aWZpZXIiOm5ldyByKHt0YWc6ImRjOmlkZW50''@;'; put 'put ''aWZpZXIifSksImRjOmxhbmd1YWdlIjpuZXcgcih7dGFnOiJkYzpsYW5ndWFnZSJ9KSwiY3A6a2V5d29yZHMiOm5ldyByKHt0YWc6ImNwOmtleXdvcmRzIn0pLCJjcDpjYXRlZ29yeSI6bmV3IHIoe3RhZzoiY3A6Y2F0ZWdvcnkifSksImNwOmxhc3RNb2RpZmllZEJ5IjpuZXcgcih7dGFnOiJj''@;'; put 'put ''cDpsYXN0TW9kaWZpZWRCeSJ9KSwiY3A6bGFzdFByaW50ZWQiOm5ldyBvKHt0YWc6ImNwOmxhc3RQcmludGVkIixmb3JtYXQ6ZS5EYXRlRm9ybWF0fSksImNwOnJldmlzaW9uIjpuZXcgdCh7dGFnOiJjcDpyZXZpc2lvbiJ9KSwiY3A6dmVyc2lvbiI6bmV3IHIoe3RhZzoiY3A6dmVyc2lvbiJ9''@;'; put 'put ''KSwiY3A6Y29udGVudFN0YXR1cyI6bmV3IHIoe3RhZzoiY3A6Y29udGVudFN0YXR1cyJ9KSwiY3A6Y29udGVudFR5cGUiOm5ldyByKHt0YWc6ImNwOmNvbnRlbnRUeXBlIn0pLCJkY3Rlcm1zOmNyZWF0ZWQiOm5ldyBvKHt0YWc6ImRjdGVybXM6Y3JlYXRlZCIsYXR0cnM6ZS5EYXRlQXR0cnMs''@;'; put 'put ''Zm9ybWF0OmUuRGF0ZUZvcm1hdH0pLCJkY3Rlcm1zOm1vZGlmaWVkIjpuZXcgbyh7dGFnOiJkY3Rlcm1zOm1vZGlmaWVkIixhdHRyczplLkRhdGVBdHRycyxmb3JtYXQ6ZS5EYXRlRm9ybWF0fSl9fXJlbmRlcihuLGkpe24ub3BlblhtbChiLlN0ZERvY0F0dHJpYnV0ZXMpLG4ub3Blbk5vZGUo''@;'; put 'put ''ImNwOmNvcmVQcm9wZXJ0aWVzIixlLkNPUkVfUFJPUEVSVFlfQVRUUklCVVRFUyksdGhpcy5tYXBbImRjOmNyZWF0b3IiXS5yZW5kZXIobixpLmNyZWF0b3IpLHRoaXMubWFwWyJkYzp0aXRsZSJdLnJlbmRlcihuLGkudGl0bGUpLHRoaXMubWFwWyJkYzpzdWJqZWN0Il0ucmVuZGVyKG4saS5z''@;'; put 'put ''dWJqZWN0KSx0aGlzLm1hcFsiZGM6ZGVzY3JpcHRpb24iXS5yZW5kZXIobixpLmRlc2NyaXB0aW9uKSx0aGlzLm1hcFsiZGM6aWRlbnRpZmllciJdLnJlbmRlcihuLGkuaWRlbnRpZmllciksdGhpcy5tYXBbImRjOmxhbmd1YWdlIl0ucmVuZGVyKG4saS5sYW5ndWFnZSksdGhpcy5tYXBbImNw''@;'; put 'put ''OmtleXdvcmRzIl0ucmVuZGVyKG4saS5rZXl3b3JkcyksdGhpcy5tYXBbImNwOmNhdGVnb3J5Il0ucmVuZGVyKG4saS5jYXRlZ29yeSksdGhpcy5tYXBbImNwOmxhc3RNb2RpZmllZEJ5Il0ucmVuZGVyKG4saS5sYXN0TW9kaWZpZWRCeSksdGhpcy5tYXBbImNwOmxhc3RQcmludGVkIl0ucmVu''@;'; put 'put ''ZGVyKG4saS5sYXN0UHJpbnRlZCksdGhpcy5tYXBbImNwOnJldmlzaW9uIl0ucmVuZGVyKG4saS5yZXZpc2lvbiksdGhpcy5tYXBbImNwOnZlcnNpb24iXS5yZW5kZXIobixpLnZlcnNpb24pLHRoaXMubWFwWyJjcDpjb250ZW50U3RhdHVzIl0ucmVuZGVyKG4saS5jb250ZW50U3RhdHVzKSx0''@;'; put 'put ''aGlzLm1hcFsiY3A6Y29udGVudFR5cGUiXS5yZW5kZXIobixpLmNvbnRlbnRUeXBlKSx0aGlzLm1hcFsiZGN0ZXJtczpjcmVhdGVkIl0ucmVuZGVyKG4saS5jcmVhdGVkKSx0aGlzLm1hcFsiZGN0ZXJtczptb2RpZmllZCJdLnJlbmRlcihuLGkubW9kaWZpZWQpLG4uY2xvc2VOb2RlKCl9cGFy''@;'; put 'put ''c2VPcGVuKG4pe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4obiksITA7c3dpdGNoKG4ubmFtZSl7Y2FzZSJjcDpjb3JlUHJvcGVydGllcyI6Y2FzZSJjb3JlUHJvcGVydGllcyI6cmV0dXJuITA7ZGVmYXVsdDppZih0aGlzLnBhcnNlcj10aGlzLm1hcFtuLm5h''@;'; put 'put ''bWVdLHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4obiksITA7dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHhtbCBub2RlIGluIHBhcnNlT3BlbjogIitKU09OLnN0cmluZ2lmeShuKSl9fXBhcnNlVGV4dChuKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFy''@;'; put 'put ''c2VUZXh0KG4pfXBhcnNlQ2xvc2Uobil7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlQ2xvc2Uobil8fCh0aGlzLnBhcnNlcj12b2lkIDApLCEwO3N3aXRjaChuKXtjYXNlImNwOmNvcmVQcm9wZXJ0aWVzIjpjYXNlImNvcmVQcm9wZXJ0aWVzIjpyZXR1cm4gdGhpcy5t''@;'; put 'put ''b2RlbD17Y3JlYXRvcjp0aGlzLm1hcFsiZGM6Y3JlYXRvciJdLm1vZGVsLHRpdGxlOnRoaXMubWFwWyJkYzp0aXRsZSJdLm1vZGVsLHN1YmplY3Q6dGhpcy5tYXBbImRjOnN1YmplY3QiXS5tb2RlbCxkZXNjcmlwdGlvbjp0aGlzLm1hcFsiZGM6ZGVzY3JpcHRpb24iXS5tb2RlbCxpZGVudGlm''@;'; put 'put ''aWVyOnRoaXMubWFwWyJkYzppZGVudGlmaWVyIl0ubW9kZWwsbGFuZ3VhZ2U6dGhpcy5tYXBbImRjOmxhbmd1YWdlIl0ubW9kZWwsa2V5d29yZHM6dGhpcy5tYXBbImNwOmtleXdvcmRzIl0ubW9kZWwsY2F0ZWdvcnk6dGhpcy5tYXBbImNwOmNhdGVnb3J5Il0ubW9kZWwsbGFzdE1vZGlmaWVk''@;'; put 'put ''Qnk6dGhpcy5tYXBbImNwOmxhc3RNb2RpZmllZEJ5Il0ubW9kZWwsbGFzdFByaW50ZWQ6dGhpcy5tYXBbImNwOmxhc3RQcmludGVkIl0ubW9kZWwscmV2aXNpb246dGhpcy5tYXBbImNwOnJldmlzaW9uIl0ubW9kZWwsY29udGVudFN0YXR1czp0aGlzLm1hcFsiY3A6Y29udGVudFN0YXR1cyJd''@;'; put 'put ''Lm1vZGVsLGNvbnRlbnRUeXBlOnRoaXMubWFwWyJjcDpjb250ZW50VHlwZSJdLm1vZGVsLGNyZWF0ZWQ6dGhpcy5tYXBbImRjdGVybXM6Y3JlYXRlZCJdLm1vZGVsLG1vZGlmaWVkOnRoaXMubWFwWyJkY3Rlcm1zOm1vZGlmaWVkIl0ubW9kZWx9LCExO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJVbmV4cGVjdGVkIHhtbCBub2RlIGluIHBhcnNlQ2xvc2U6ICIrbil9fX1lLkRhdGVGb3JtYXQ9ZnVuY3Rpb24obCl7cmV0dXJuIGwudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9bLl1cZHszfS8sIiIpfSxlLkRhdGVBdHRycz17InhzaTp0eXBlIjoiZGN0ZXJtczpXM0NEVEYifSxlLkNPUkVf''@;'; put 'put ''UFJPUEVSVFlfQVRUUklCVVRFUz17InhtbG5zOmNwIjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXMiLCJ4bWxuczpkYyI6Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiwieG1sbnM6ZGN0ZXJt''@;'; put 'put ''cyI6Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8iLCJ4bWxuczpkY21pdHlwZSI6Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS8iLCJ4bWxuczp4c2kiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSJ9LEUuZXhwb3J0cz1lfSx7Ii4uLy4uLy4uL3V0aWxz''@;'; put 'put ''L3htbC1zdHJlYW0iOjI4LCIuLi9iYXNlLXhmb3JtIjozMiwiLi4vc2ltcGxlL2RhdGUteGZvcm0iOjExNywiLi4vc2ltcGxlL2ludGVnZXIteGZvcm0iOjExOCwiLi4vc2ltcGxlL3N0cmluZy14Zm9ybSI6MTE5fV0sNTQ6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1z''@;'; put 'put ''KCIuLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgYntyZW5kZXIoYSxvKXthLmxlYWZOb2RlKCJSZWxhdGlvbnNoaXAiLG8pfXBhcnNlT3BlbihhKXtyZXR1cm4iUmVsYXRpb25zaGlwIj09PWEubmFtZSYmKHRoaXMubW9kZWw9YS5hdHRyaWJ1dGVzLCEwKX1wYXJzZVRl''@;'; put 'put ''eHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSw1NTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW0iKSxhPXMoIi4uL2Jhc2UteGZvcm0iKSxvPXMoIi4vcmVsYXRpb25zaGlw''@;'; put 'put ''LXhmb3JtIik7Y2xhc3MgciBleHRlbmRzIGF7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtSZWxhdGlvbnNoaXA6bmV3IG99fXJlbmRlcihlLGwpe2w9bHx8dGhpcy5fdmFsdWVzLGUub3BlblhtbChiLlN0ZERvY0F0dHJpYnV0ZXMpLGUub3Blbk5vZGUoIlJlbGF0aW9uc2hpcHMi''@;'; put 'put ''LHIuUkVMQVRJT05TSElQU19BVFRSSUJVVEVTKSxsLmZvckVhY2gobj0+e3RoaXMubWFwLlJlbGF0aW9uc2hpcC5yZW5kZXIoZSxuKX0pLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7aWYoIlJlbGF0''@;'; put 'put ''aW9uc2hpcHMiPT09ZS5uYW1lKXJldHVybiB0aGlzLm1vZGVsPVtdLCEwO2lmKHRoaXMucGFyc2VyPXRoaXMubWFwW2UubmFtZV0sdGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMDt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgeG1sIG5vZGUgaW4gcGFy''@;'; put 'put ''c2VPcGVuOiAiK0pTT04uc3RyaW5naWZ5KGUpKX1wYXJzZVRleHQoZSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChlKX1wYXJzZUNsb3NlKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpfHwodGhpcy5tb2RlbC5wdXNoKHRoaXMu''@;'; put 'put ''cGFyc2VyLm1vZGVsKSx0aGlzLnBhcnNlcj12b2lkIDApLCEwO2lmKCJSZWxhdGlvbnNoaXBzIj09PWUpcmV0dXJuITE7dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHhtbCBub2RlIGluIHBhcnNlQ2xvc2U6ICIrZSl9fXIuUkVMQVRJT05TSElQU19BVFRSSUJVVEVTPXt4bWxuczoiaHR0''@;'; put 'put ''cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxhdGlvbnNoaXBzIn0sRS5leHBvcnRzPXJ9LHsiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbSI6MjgsIi4uL2Jhc2UteGZvcm0iOjMyLCIuL3JlbGF0aW9uc2hpcC14Zm9ybSI6NTR9XSw1NjpbZnVuY3Rpb24o''@;'; put 'put ''cyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBie3BhcnNlT3BlbihhKXtyZXR1cm4gdGhpcy5wYXJzZXI/KHRoaXMucGFyc2VyLnBhcnNlT3BlbihhKSwhMCk6KGEubmFtZT09PXRoaXMudGFnPyh0aGlzLnJlc2V0''@;'; put 'put ''KCksdGhpcy5tb2RlbD17cmFuZ2U6e2VkaXRBczphLmF0dHJpYnV0ZXMuZWRpdEFzfHwib25lQ2VsbCJ9fSk6KHRoaXMucGFyc2VyPXRoaXMubWFwW2EubmFtZV0sdGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlT3BlbihhKSksITApfXBhcnNlVGV4dChhKXt0aGlzLnBhcnNlciYmdGhp''@;'; put 'put ''cy5wYXJzZXIucGFyc2VUZXh0KGEpfXJlY29uY2lsZVBpY3R1cmUoYSxvKXtpZihhJiZhLnJJZCl7Y29uc3Qgcj1vLnJlbHNbYS5ySWRdLlRhcmdldC5tYXRjaCgvLipcL21lZGlhXC8oLitbLl1bYS16QS1aXXszLDR9KS8pO2lmKHIpcmV0dXJuIG8ubWVkaWFbby5tZWRpYUluZGV4W3JbMV1d''@;'; put 'put ''XX19fX0seyIuLi9iYXNlLXhmb3JtIjozMn1dLDU3OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vYmFzZS14Zm9ybSIpLGE9cygiLi9ibGlwLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgYntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9''@;'; put 'put ''eyJhOmJsaXAiOm5ldyBhfX1nZXQgdGFnKCl7cmV0dXJuInhkcjpibGlwRmlsbCJ9cmVuZGVyKG8scil7by5vcGVuTm9kZSh0aGlzLnRhZyksdGhpcy5tYXBbImE6YmxpcCJdLnJlbmRlcihvLHIpLG8ub3Blbk5vZGUoImE6c3RyZXRjaCIpLG8ubGVhZk5vZGUoImE6ZmlsbFJlY3QiKSxvLmNs''@;'; put 'put ''b3NlTm9kZSgpLG8uY2xvc2VOb2RlKCl9cGFyc2VPcGVuKG8pe3JldHVybiB0aGlzLnBhcnNlcj8odGhpcy5wYXJzZXIucGFyc2VPcGVuKG8pLCEwKTooby5uYW1lPT09dGhpcy50YWc/dGhpcy5yZXNldCgpOih0aGlzLnBhcnNlcj10aGlzLm1hcFtvLm5hbWVdLHRoaXMucGFyc2VyJiZ0aGlz''@;'; put 'put ''LnBhcnNlci5wYXJzZU9wZW4obykpLCEwKX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZShvKXtyZXR1cm4gdGhpcy5wYXJzZXI/KHRoaXMucGFyc2VyLnBhcnNlQ2xvc2Uobyl8fCh0aGlzLnBhcnNlcj12b2lkIDApLCEwKTpvIT09dGhpcy50YWd8fCh0aGlzLm1vZGVsPXRoaXMubWFwWyJhOmJs''@;'; put 'put ''aXAiXS5tb2RlbCwhMSl9fX0seyIuLi9iYXNlLXhmb3JtIjozMiwiLi9ibGlwLXhmb3JtIjo1OH1dLDU4OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGJ7Z2V0IHRhZygpe3JldHVybiJhOmJs''@;'; put 'put ''aXAifXJlbmRlcihhLG8pe2EubGVhZk5vZGUodGhpcy50YWcseyJ4bWxuczpyIjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcyIsInI6ZW1iZWQiOm8ucklkLGNzdGF0ZToicHJpbnQifSl9cGFyc2VPcGVuKGEpe3Jl''@;'; put 'put ''dHVybiBhLm5hbWU9PT10aGlzLnRhZyYmKHRoaXMubW9kZWw9e3JJZDphLmF0dHJpYnV0ZXNbInI6ZW1iZWQiXX0pLCEwfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKGEpe3JldHVybiBhIT09dGhpcy50YWd9fX0seyIuLi9iYXNlLXhmb3JtIjozMn1dLDU5OltmdW5jdGlvbihzLEUsUyl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGJ7Z2V0IHRhZygpe3JldHVybiJ4ZHI6Y052UGljUHIifXJlbmRlcihhKXthLm9wZW5Ob2RlKHRoaXMudGFnKSxhLmxlYWZOb2RlKCJhOnBpY0xvY2tzIix7bm9DaGFuZ2VBc3BlY3Q6''@;'; put 'put ''IjEifSksYS5jbG9zZU5vZGUoKX1wYXJzZU9wZW4oYSl7cmV0dXJuITB9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoYSl7cmV0dXJuIGEhPT10aGlzLnRhZ319fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sNjA6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi9iYXNl''@;'; put 'put ''LXhmb3JtIiksYT1zKCIuL2hsaW5rLWNsaWNrLXhmb3JtIiksbz1zKCIuL2V4dC1sc3QteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBie2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17ImE6aGxpbmtDbGljayI6bmV3IGEsImE6ZXh0THN0IjpuZXcgb319Z2V0IHRhZygp''@;'; put 'put ''e3JldHVybiJ4ZHI6Y052UHIifXJlbmRlcihyLHQpe3Iub3Blbk5vZGUodGhpcy50YWcse2lkOnQuaW5kZXgsbmFtZToiUGljdHVyZSAiK3QuaW5kZXh9KSx0aGlzLm1hcFsiYTpobGlua0NsaWNrIl0ucmVuZGVyKHIsdCksdGhpcy5tYXBbImE6ZXh0THN0Il0ucmVuZGVyKHIsdCksci5jbG9z''@;'; put 'put ''ZU5vZGUoKX1wYXJzZU9wZW4ocil7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZU9wZW4ociksITApOihyLm5hbWU9PT10aGlzLnRhZz90aGlzLnJlc2V0KCk6KHRoaXMucGFyc2VyPXRoaXMubWFwW3IubmFtZV0sdGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlT3Bl''@;'; put 'put ''bihyKSksITApfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKHIpe3JldHVybiB0aGlzLnBhcnNlcj8odGhpcy5wYXJzZXIucGFyc2VDbG9zZShyKXx8KHRoaXMucGFyc2VyPXZvaWQgMCksITApOnIhPT10aGlzLnRhZ3x8KHRoaXMubW9kZWw9dGhpcy5tYXBbImE6aGxpbmtDbGljayJdLm1vZGVs''@;'; put 'put ''LCExKX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyLCIuL2V4dC1sc3QteGZvcm0iOjYzLCIuL2hsaW5rLWNsaWNrLXhmb3JtIjo2NX1dLDYxOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vYmFzZS14Zm9ybSIpLGE9cygiLi4vc2ltcGxlL2ludGVnZXIteGZvcm0i''@;'; put 'put ''KTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBie2NvbnN0cnVjdG9yKG8pe3N1cGVyKCksdGhpcy50YWc9by50YWcsdGhpcy5tYXA9eyJ4ZHI6Y29sIjpuZXcgYSh7dGFnOiJ4ZHI6Y29sIix6ZXJvOiEwfSksInhkcjpjb2xPZmYiOm5ldyBhKHt0YWc6Inhkcjpjb2xPZmYiLHplcm86ITB9KSwi''@;'; put 'put ''eGRyOnJvdyI6bmV3IGEoe3RhZzoieGRyOnJvdyIsemVybzohMH0pLCJ4ZHI6cm93T2ZmIjpuZXcgYSh7dGFnOiJ4ZHI6cm93T2ZmIix6ZXJvOiEwfSl9fXJlbmRlcihvLHIpe28ub3Blbk5vZGUodGhpcy50YWcpLHRoaXMubWFwWyJ4ZHI6Y29sIl0ucmVuZGVyKG8sci5uYXRpdmVDb2wpLHRo''@;'; put 'put ''aXMubWFwWyJ4ZHI6Y29sT2ZmIl0ucmVuZGVyKG8sci5uYXRpdmVDb2xPZmYpLHRoaXMubWFwWyJ4ZHI6cm93Il0ucmVuZGVyKG8sci5uYXRpdmVSb3cpLHRoaXMubWFwWyJ4ZHI6cm93T2ZmIl0ucmVuZGVyKG8sci5uYXRpdmVSb3dPZmYpLG8uY2xvc2VOb2RlKCl9cGFyc2VPcGVuKG8pe3Jl''@;'; put 'put ''dHVybiB0aGlzLnBhcnNlcj8odGhpcy5wYXJzZXIucGFyc2VPcGVuKG8pLCEwKTooby5uYW1lPT09dGhpcy50YWc/dGhpcy5yZXNldCgpOih0aGlzLnBhcnNlcj10aGlzLm1hcFtvLm5hbWVdLHRoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZU9wZW4obykpLCEwKX1wYXJzZVRleHQobyl7''@;'; put 'put ''dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChvKX1wYXJzZUNsb3NlKG8pe3JldHVybiB0aGlzLnBhcnNlcj8odGhpcy5wYXJzZXIucGFyc2VDbG9zZShvKXx8KHRoaXMucGFyc2VyPXZvaWQgMCksITApOm8hPT10aGlzLnRhZ3x8KHRoaXMubW9kZWw9e25hdGl2ZUNvbDp0aGlz''@;'; put 'put ''Lm1hcFsieGRyOmNvbCJdLm1vZGVsLG5hdGl2ZUNvbE9mZjp0aGlzLm1hcFsieGRyOmNvbE9mZiJdLm1vZGVsLG5hdGl2ZVJvdzp0aGlzLm1hcFsieGRyOnJvdyJdLm1vZGVsLG5hdGl2ZVJvd09mZjp0aGlzLm1hcFsieGRyOnJvd09mZiJdLm1vZGVsfSwhMSl9fX0seyIuLi9iYXNlLXhmb3Jt''@;'; put 'put ''IjozMiwiLi4vc2ltcGxlL2ludGVnZXIteGZvcm0iOjExOH1dLDYyOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vLi4vLi4vdXRpbHMvY29sLWNhY2hlIiksYT1zKCIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtIiksbz1zKCIuLi9iYXNlLXhmb3JtIikscj1z''@;'; put 'put ''KCIuL3R3by1jZWxsLWFuY2hvci14Zm9ybSIpLHQ9cygiLi9vbmUtY2VsbC1hbmNob3IteGZvcm0iKTtjbGFzcyBlIGV4dGVuZHMgb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9eyJ4ZHI6dHdvQ2VsbEFuY2hvciI6bmV3IHIsInhkcjpvbmVDZWxsQW5jaG9yIjpuZXcgdH19cHJl''@;'; put 'put ''cGFyZShuKXtuLmFuY2hvcnMuZm9yRWFjaCgoaSxoKT0+e3ZhciBmO2kuYW5jaG9yVHlwZT0oInN0cmluZyI9PXR5cGVvZihmPWkpLnJhbmdlP2IuZGVjb2RlKGYucmFuZ2UpOmYucmFuZ2UpLmJyPyJ4ZHI6dHdvQ2VsbEFuY2hvciI6InhkcjpvbmVDZWxsQW5jaG9yIix0aGlzLm1hcFtpLmFu''@;'; put 'put ''Y2hvclR5cGVdLnByZXBhcmUoaSx7aW5kZXg6aH0pfSl9Z2V0IHRhZygpe3JldHVybiJ4ZHI6d3NEciJ9cmVuZGVyKG4saSl7bi5vcGVuWG1sKGEuU3RkRG9jQXR0cmlidXRlcyksbi5vcGVuTm9kZSh0aGlzLnRhZyxlLkRSQVdJTkdfQVRUUklCVVRFUyksaS5hbmNob3JzLmZvckVhY2goaD0+''@;'; put 'put ''e3RoaXMubWFwW2guYW5jaG9yVHlwZV0ucmVuZGVyKG4saCl9KSxuLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihuKXtyZXR1cm4gdGhpcy5wYXJzZXI/KHRoaXMucGFyc2VyLnBhcnNlT3BlbihuKSwhMCk6KG4ubmFtZT09PXRoaXMudGFnPyh0aGlzLnJlc2V0KCksdGhpcy5tb2RlbD17YW5jaG9y''@;'; put 'put ''czpbXX0pOih0aGlzLnBhcnNlcj10aGlzLm1hcFtuLm5hbWVdLHRoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZU9wZW4obikpLCEwKX1wYXJzZVRleHQobil7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChuKX1wYXJzZUNsb3NlKG4pe3JldHVybiB0aGlzLnBhcnNlcj8o''@;'; put 'put ''dGhpcy5wYXJzZXIucGFyc2VDbG9zZShuKXx8KHRoaXMubW9kZWwuYW5jaG9ycy5wdXNoKHRoaXMucGFyc2VyLm1vZGVsKSx0aGlzLnBhcnNlcj12b2lkIDApLCEwKTpuIT09dGhpcy50YWd9cmVjb25jaWxlKG4saSl7bi5hbmNob3JzLmZvckVhY2goaD0+e2guYnI/dGhpcy5tYXBbInhkcjp0''@;'; put 'put ''d29DZWxsQW5jaG9yIl0ucmVjb25jaWxlKGgsaSk6dGhpcy5tYXBbInhkcjpvbmVDZWxsQW5jaG9yIl0ucmVjb25jaWxlKGgsaSl9KX19ZS5EUkFXSU5HX0FUVFJJQlVURVM9eyJ4bWxuczp4ZHIiOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvc3By''@;'; put 'put ''ZWFkc2hlZXREcmF3aW5nIiwieG1sbnM6YSI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9tYWluIn0sRS5leHBvcnRzPWV9LHsiLi4vLi4vLi4vdXRpbHMvY29sLWNhY2hlIjoxOSwiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbSI6MjgsIi4uL2Jh''@;'; put 'put ''c2UteGZvcm0iOjMyLCIuL29uZS1jZWxsLWFuY2hvci14Zm9ybSI6NjcsIi4vdHdvLWNlbGwtYW5jaG9yLXhmb3JtIjo3MH1dLDYzOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGJ7Z2V0IHRh''@;'; put 'put ''Zygpe3JldHVybiJhOmV4dExzdCJ9cmVuZGVyKGEpe2Eub3Blbk5vZGUodGhpcy50YWcpLGEub3Blbk5vZGUoImE6ZXh0Iix7dXJpOiJ7RkYyQjVFRjQtRkZGMi00MEI0LUJFNDktRjIzOEUyN0ZDMjM2fSJ9KSxhLmxlYWZOb2RlKCJhMTY6Y3JlYXRpb25JZCIseyJ4bWxuczphMTYiOiJodHRw''@;'; put 'put ''Oi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9kcmF3aW5nLzIwMTQvbWFpbiIsaWQ6InswMDAwMDAwMC0wMDA4LTAwMDAtMDAwMC0wMDAwMDIwMDAwMDB9In0pLGEuY2xvc2VOb2RlKCksYS5jbG9zZU5vZGUoKX1wYXJzZU9wZW4oYSl7cmV0dXJuITB9cGFyc2VUZXh0KCl7fXBhcnNl''@;'; put 'put ''Q2xvc2UoYSl7cmV0dXJuIGEhPT10aGlzLnRhZ319fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sNjQ6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgYntjb25zdHJ1Y3RvcihhKXtzdXBlcigpLHRo''@;'; put 'put ''aXMudGFnPWEudGFnLHRoaXMubWFwPXt9fXJlbmRlcihhLG8pe2Eub3Blbk5vZGUodGhpcy50YWcpO2NvbnN0IHI9TWF0aC5mbG9vcig5NTI1Km8ud2lkdGgpLHQ9TWF0aC5mbG9vcig5NTI1Km8uaGVpZ2h0KTthLmFkZEF0dHJpYnV0ZSgiY3giLHIpLGEuYWRkQXR0cmlidXRlKCJjeSIsdCks''@;'; put 'put ''YS5jbG9zZU5vZGUoKX1wYXJzZU9wZW4oYSl7cmV0dXJuIGEubmFtZT09PXRoaXMudGFnJiYodGhpcy5tb2RlbD17d2lkdGg6cGFyc2VJbnQoYS5hdHRyaWJ1dGVzLmN4fHwiMCIsMTApLzk1MjUsaGVpZ2h0OnBhcnNlSW50KGEuYXR0cmlidXRlcy5jeXx8IjAiLDEwKS85NTI1fSwhMCl9cGFy''@;'; put 'put ''c2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sNjU6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgYntnZXQgdGFnKCl7cmV0dXJuImE6aGxp''@;'; put 'put ''bmtDbGljayJ9cmVuZGVyKGEsbyl7by5oeXBlcmxpbmtzJiZvLmh5cGVybGlua3MucklkJiZhLmxlYWZOb2RlKHRoaXMudGFnLHsieG1sbnM6ciI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMiLCJyOmlkIjpvLmh5''@;'; put 'put ''cGVybGlua3MucklkLHRvb2x0aXA6by5oeXBlcmxpbmtzLnRvb2x0aXB9KX1wYXJzZU9wZW4oYSl7cmV0dXJuIGEubmFtZT09PXRoaXMudGFnJiYodGhpcy5tb2RlbD17aHlwZXJsaW5rczp7cklkOmEuYXR0cmlidXRlc1sicjppZCJdLHRvb2x0aXA6YS5hdHRyaWJ1dGVzLnRvb2x0aXB9fSks''@;'; put 'put ''ITB9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sNjY6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi9iYXNlLXhmb3JtIiksYT1zKCIuL2MtbnYtcHIteGZvcm0iKSxvPXMoIi4vYy1udi1waWMtcHIt''@;'; put 'put ''eGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBie2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17InhkcjpjTnZQciI6bmV3IGEsInhkcjpjTnZQaWNQciI6bmV3IG99fWdldCB0YWcoKXtyZXR1cm4ieGRyOm52UGljUHIifXJlbmRlcihyLHQpe3Iub3Blbk5vZGUodGhpcy50''@;'; put 'put ''YWcpLHRoaXMubWFwWyJ4ZHI6Y052UHIiXS5yZW5kZXIocix0KSx0aGlzLm1hcFsieGRyOmNOdlBpY1ByIl0ucmVuZGVyKHIsdCksci5jbG9zZU5vZGUoKX1wYXJzZU9wZW4ocil7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZU9wZW4ociksITApOihyLm5hbWU9PT10aGlz''@;'; put 'put ''LnRhZz90aGlzLnJlc2V0KCk6KHRoaXMucGFyc2VyPXRoaXMubWFwW3IubmFtZV0sdGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlT3BlbihyKSksITApfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKHIpe3JldHVybiB0aGlzLnBhcnNlcj8odGhpcy5wYXJzZXIucGFyc2VDbG9zZShyKXx8''@;'; put 'put ''KHRoaXMucGFyc2VyPXZvaWQgMCksITApOnIhPT10aGlzLnRhZ3x8KHRoaXMubW9kZWw9dGhpcy5tYXBbInhkcjpjTnZQciJdLm1vZGVsLCExKX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyLCIuL2MtbnYtcGljLXByLXhmb3JtIjo1OSwiLi9jLW52LXByLXhmb3JtIjo2MH1dLDY3OltmdW5jdGlv''@;'; put 'put ''bihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi9iYXNlLWNlbGwtYW5jaG9yLXhmb3JtIiksYT1zKCIuLi9zdGF0aWMteGZvcm0iKSxvPXMoIi4vY2VsbC1wb3NpdGlvbi14Zm9ybSIpLHI9cygiLi9leHQteGZvcm0iKSx0PXMoIi4vcGljLXhmb3JtIik7RS5leHBvcnRzPWNsYXNz''@;'; put 'put ''IGV4dGVuZHMgYntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9eyJ4ZHI6ZnJvbSI6bmV3IG8oe3RhZzoieGRyOmZyb20ifSksInhkcjpleHQiOm5ldyByKHt0YWc6InhkcjpleHQifSksInhkcjpwaWMiOm5ldyB0LCJ4ZHI6Y2xpZW50RGF0YSI6bmV3IGEoe3RhZzoieGRyOmNsaWVu''@;'; put 'put ''dERhdGEifSl9fWdldCB0YWcoKXtyZXR1cm4ieGRyOm9uZUNlbGxBbmNob3IifXByZXBhcmUoZSxsKXt0aGlzLm1hcFsieGRyOnBpYyJdLnByZXBhcmUoZS5waWN0dXJlLGwpfXJlbmRlcihlLGwpe2Uub3Blbk5vZGUodGhpcy50YWcse2VkaXRBczpsLnJhbmdlLmVkaXRBc3x8Im9uZUNlbGwi''@;'; put 'put ''fSksdGhpcy5tYXBbInhkcjpmcm9tIl0ucmVuZGVyKGUsbC5yYW5nZS50bCksdGhpcy5tYXBbInhkcjpleHQiXS5yZW5kZXIoZSxsLnJhbmdlLmV4dCksdGhpcy5tYXBbInhkcjpwaWMiXS5yZW5kZXIoZSxsLnBpY3R1cmUpLHRoaXMubWFwWyJ4ZHI6Y2xpZW50RGF0YSJdLnJlbmRlcihlLHt9''@;'; put 'put ''KSxlLmNsb3NlTm9kZSgpfXBhcnNlQ2xvc2UoZSl7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpfHwodGhpcy5wYXJzZXI9dm9pZCAwKSwhMCk6ZSE9PXRoaXMudGFnfHwodGhpcy5tb2RlbC5yYW5nZS50bD10aGlzLm1hcFsieGRyOmZyb20iXS5tb2RlbCx0''@;'; put 'put ''aGlzLm1vZGVsLnJhbmdlLmV4dD10aGlzLm1hcFsieGRyOmV4dCJdLm1vZGVsLHRoaXMubW9kZWwucGljdHVyZT10aGlzLm1hcFsieGRyOnBpYyJdLm1vZGVsLCExKX1yZWNvbmNpbGUoZSxsKXtlLm1lZGl1bT10aGlzLnJlY29uY2lsZVBpY3R1cmUoZS5waWN0dXJlLGwpfX19LHsiLi4vc3Rh''@;'; put 'put ''dGljLXhmb3JtIjoxMjAsIi4vYmFzZS1jZWxsLWFuY2hvci14Zm9ybSI6NTYsIi4vY2VsbC1wb3NpdGlvbi14Zm9ybSI6NjEsIi4vZXh0LXhmb3JtIjo2NCwiLi9waWMteGZvcm0iOjY4fV0sNjg6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi9iYXNlLXhmb3Jt''@;'; put 'put ''IiksYT1zKCIuLi9zdGF0aWMteGZvcm0iKSxvPXMoIi4vYmxpcC1maWxsLXhmb3JtIikscj1zKCIuL252LXBpYy1wci14Zm9ybSIpLHQ9cygiLi9zcC1wciIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGJ7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXsieGRyOm52UGljUHIiOm5l''@;'; put 'put ''dyByLCJ4ZHI6YmxpcEZpbGwiOm5ldyBvLCJ4ZHI6c3BQciI6bmV3IGEodCl9fWdldCB0YWcoKXtyZXR1cm4ieGRyOnBpYyJ9cHJlcGFyZShlLGwpe2UuaW5kZXg9bC5pbmRleCsxfXJlbmRlcihlLGwpe2Uub3Blbk5vZGUodGhpcy50YWcpLHRoaXMubWFwWyJ4ZHI6bnZQaWNQciJdLnJlbmRl''@;'; put 'put ''cihlLGwpLHRoaXMubWFwWyJ4ZHI6YmxpcEZpbGwiXS5yZW5kZXIoZSxsKSx0aGlzLm1hcFsieGRyOnNwUHIiXS5yZW5kZXIoZSxsKSxlLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihlKXtyZXR1cm4gdGhpcy5wYXJzZXI/KHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMCk6KGUubmFtZT09PXRo''@;'; put 'put ''aXMudGFnP3RoaXMucmVzZXQoKToodGhpcy5wYXJzZXI9dGhpcy5tYXBbZS5uYW1lXSx0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpKSwhMCl9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoZSl7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUp''@;'; put 'put ''fHwodGhpcy5tZXJnZU1vZGVsKHRoaXMucGFyc2VyLm1vZGVsKSx0aGlzLnBhcnNlcj12b2lkIDApLCEwKTplIT09dGhpcy50YWd9fX0seyIuLi9iYXNlLXhmb3JtIjozMiwiLi4vc3RhdGljLXhmb3JtIjoxMjAsIi4vYmxpcC1maWxsLXhmb3JtIjo1NywiLi9udi1waWMtcHIteGZvcm0iOjY2''@;'; put 'put ''LCIuL3NwLXByIjo2OX1dLDY5OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO0UuZXhwb3J0cz17dGFnOiJ4ZHI6c3BQciIsYzpbe3RhZzoiYTp4ZnJtIixjOlt7dGFnOiJhOm9mZiIsJDp7eDoiMCIseToiMCJ9fSx7dGFnOiJhOmV4dCIsJDp7Y3g6IjAiLGN5OiIwIn19XX0se3RhZzoi''@;'; put 'put ''YTpwcnN0R2VvbSIsJDp7cHJzdDoicmVjdCJ9LGM6W3t0YWc6ImE6YXZMc3QifV19XX19LHt9XSw3MDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4vYmFzZS1jZWxsLWFuY2hvci14Zm9ybSIpLGE9cygiLi4vc3RhdGljLXhmb3JtIiksbz1zKCIuL2NlbGwtcG9z''@;'; put 'put ''aXRpb24teGZvcm0iKSxyPXMoIi4vcGljLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgYntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9eyJ4ZHI6ZnJvbSI6bmV3IG8oe3RhZzoieGRyOmZyb20ifSksInhkcjp0byI6bmV3IG8oe3RhZzoieGRyOnRvIn0pLCJ4ZHI6cGlj''@;'; put 'put ''IjpuZXcgciwieGRyOmNsaWVudERhdGEiOm5ldyBhKHt0YWc6InhkcjpjbGllbnREYXRhIn0pfX1nZXQgdGFnKCl7cmV0dXJuInhkcjp0d29DZWxsQW5jaG9yIn1wcmVwYXJlKHQsZSl7dGhpcy5tYXBbInhkcjpwaWMiXS5wcmVwYXJlKHQucGljdHVyZSxlKX1yZW5kZXIodCxlKXt0Lm9wZW5O''@;'; put 'put ''b2RlKHRoaXMudGFnLHtlZGl0QXM6ZS5yYW5nZS5lZGl0QXN8fCJvbmVDZWxsIn0pLHRoaXMubWFwWyJ4ZHI6ZnJvbSJdLnJlbmRlcih0LGUucmFuZ2UudGwpLHRoaXMubWFwWyJ4ZHI6dG8iXS5yZW5kZXIodCxlLnJhbmdlLmJyKSx0aGlzLm1hcFsieGRyOnBpYyJdLnJlbmRlcih0LGUucGlj''@;'; put 'put ''dHVyZSksdGhpcy5tYXBbInhkcjpjbGllbnREYXRhIl0ucmVuZGVyKHQse30pLHQuY2xvc2VOb2RlKCl9cGFyc2VDbG9zZSh0KXtyZXR1cm4gdGhpcy5wYXJzZXI/KHRoaXMucGFyc2VyLnBhcnNlQ2xvc2UodCl8fCh0aGlzLnBhcnNlcj12b2lkIDApLCEwKTp0IT09dGhpcy50YWd8fCh0aGlz''@;'; put 'put ''Lm1vZGVsLnJhbmdlLnRsPXRoaXMubWFwWyJ4ZHI6ZnJvbSJdLm1vZGVsLHRoaXMubW9kZWwucmFuZ2UuYnI9dGhpcy5tYXBbInhkcjp0byJdLm1vZGVsLHRoaXMubW9kZWwucGljdHVyZT10aGlzLm1hcFsieGRyOnBpYyJdLm1vZGVsLCExKX1yZWNvbmNpbGUodCxlKXt0Lm1lZGl1bT10aGlz''@;'; put 'put ''LnJlY29uY2lsZVBpY3R1cmUodC5waWN0dXJlLGUpfX19LHsiLi4vc3RhdGljLXhmb3JtIjoxMjAsIi4vYmFzZS1jZWxsLWFuY2hvci14Zm9ybSI6NTYsIi4vY2VsbC1wb3NpdGlvbi14Zm9ybSI6NjEsIi4vcGljLXhmb3JtIjo2OH1dLDcxOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O2NvbnN0IGI9cygiLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgYntjb25zdHJ1Y3RvcihhKXtzdXBlcigpLHRoaXMudGFnPWEudGFnLHRoaXMuYWx3YXlzPSEhYS5hbHdheXMsdGhpcy5jb3VudD1hLmNvdW50LHRoaXMuZW1wdHk9YS5lbXB0eSx0aGlzLiRjb3VudD1h''@;'; put 'put ''LiRjb3VudHx8ImNvdW50Iix0aGlzLiQ9YS4kLHRoaXMuY2hpbGRYZm9ybT1hLmNoaWxkWGZvcm0sdGhpcy5tYXhJdGVtcz1hLm1heEl0ZW1zfXByZXBhcmUoYSxvKXtjb25zdHtjaGlsZFhmb3JtOnJ9PXRoaXM7YSYmYS5mb3JFYWNoKCh0LGUpPT57by5pbmRleD1lLHIucHJlcGFyZSh0LG8p''@;'; put 'put ''fSl9cmVuZGVyKGEsbyl7aWYodGhpcy5hbHdheXN8fG8mJm8ubGVuZ3RoKXthLm9wZW5Ob2RlKHRoaXMudGFnLHRoaXMuJCksdGhpcy5jb3VudCYmYS5hZGRBdHRyaWJ1dGUodGhpcy4kY291bnQsbyYmby5sZW5ndGh8fDApO2NvbnN0e2NoaWxkWGZvcm06cn09dGhpczsob3x8W10pLmZvckVh''@;'; put 'put ''Y2goKHQsZSk9PntyLnJlbmRlcihhLHQsZSl9KSxhLmNsb3NlTm9kZSgpfWVsc2UgdGhpcy5lbXB0eSYmYS5sZWFmTm9kZSh0aGlzLnRhZyl9cGFyc2VPcGVuKGEpe3JldHVybiB0aGlzLnBhcnNlcj8odGhpcy5wYXJzZXIucGFyc2VPcGVuKGEpLCEwKTphLm5hbWU9PT10aGlzLnRhZz8odGhp''@;'; put 'put ''cy5tb2RlbD1bXSwhMCk6ISF0aGlzLmNoaWxkWGZvcm0ucGFyc2VPcGVuKGEpJiYodGhpcy5wYXJzZXI9dGhpcy5jaGlsZFhmb3JtLCEwKX1wYXJzZVRleHQoYSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChhKX1wYXJzZUNsb3NlKGEpe2lmKHRoaXMucGFyc2VyKXtpZigh''@;'; put 'put ''dGhpcy5wYXJzZXIucGFyc2VDbG9zZShhKSYmKHRoaXMubW9kZWwucHVzaCh0aGlzLnBhcnNlci5tb2RlbCksdGhpcy5wYXJzZXI9dm9pZCAwLHRoaXMubWF4SXRlbXMmJnRoaXMubW9kZWwubGVuZ3RoPnRoaXMubWF4SXRlbXMpKXRocm93IG5ldyBFcnJvcihgTWF4ICR7dGhpcy5jaGlsZFhm''@;'; put 'put ''b3JtLnRhZ30gY291bnQgKCR7dGhpcy5tYXhJdGVtc30pIGV4Y2VlZGVkYCk7cmV0dXJuITB9cmV0dXJuITF9cmVjb25jaWxlKGEsbyl7aWYoYSl7Y29uc3R7Y2hpbGRYZm9ybTpyfT10aGlzO2EuZm9yRWFjaCh0PT57ci5yZWNvbmNpbGUodCxvKX0pfX19fSx7Ii4vYmFzZS14Zm9ybSI6MzJ9''@;'; put 'put ''XSw3MjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uLy4uLy4uL3V0aWxzL2NvbC1jYWNoZSIpLGE9cygiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGF7Z2V0IHRhZygpe3JldHVybiJhdXRvRmlsdGVyIn1yZW5kZXIobyxyKXtpZihy''@;'; put 'put ''KWlmKCJzdHJpbmciPT10eXBlb2YgcilvLmxlYWZOb2RlKCJhdXRvRmlsdGVyIix7cmVmOnJ9KTtlbHNle2NvbnN0IHQ9ZnVuY3Rpb24obil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuP246Yi5nZXRBZGRyZXNzKG4ucm93LG4uY29sdW1uKS5hZGRyZXNzfSxlPXQoci5mcm9tKSxsPXQoci50''@;'; put 'put ''byk7ZSYmbCYmby5sZWFmTm9kZSgiYXV0b0ZpbHRlciIse3JlZjpgJHtlfToke2x9YH0pfX1wYXJzZU9wZW4obyl7ImF1dG9GaWx0ZXIiPT09by5uYW1lJiYodGhpcy5tb2RlbD1vLmF0dHJpYnV0ZXMucmVmKX19fSx7Ii4uLy4uLy4uL3V0aWxzL2NvbC1jYWNoZSI6MTksIi4uL2Jhc2UteGZv''@;'; put 'put ''cm0iOjMyfV0sNzM6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi8uLi8uLi91dGlscy91dGlscyIpLGE9cygiLi4vYmFzZS14Zm9ybSIpLG89cygiLi4vLi4vLi4vZG9jL3JhbmdlIikscj1zKCIuLi8uLi8uLi9kb2MvZW51bXMiKSx0PXMoIi4uL3N0cmluZ3Mv''@;'; put 'put ''cmljaC10ZXh0LXhmb3JtIik7ZnVuY3Rpb24gZShsKXtpZihudWxsPT1sKXJldHVybiByLlZhbHVlVHlwZS5OdWxsO2lmKGwgaW5zdGFuY2VvZiBTdHJpbmd8fCJzdHJpbmciPT10eXBlb2YgbClyZXR1cm4gci5WYWx1ZVR5cGUuU3RyaW5nO2lmKCJudW1iZXIiPT10eXBlb2YgbClyZXR1cm4g''@;'; put 'put ''ci5WYWx1ZVR5cGUuTnVtYmVyO2lmKCJib29sZWFuIj09dHlwZW9mIGwpcmV0dXJuIHIuVmFsdWVUeXBlLkJvb2xlYW47aWYobCBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIHIuVmFsdWVUeXBlLkRhdGU7aWYobC50ZXh0JiZsLmh5cGVybGluaylyZXR1cm4gci5WYWx1ZVR5cGUuSHlwZXJsaW5r''@;'; put 'put ''O2lmKGwuZm9ybXVsYSlyZXR1cm4gci5WYWx1ZVR5cGUuRm9ybXVsYTtpZihsLmVycm9yKXJldHVybiByLlZhbHVlVHlwZS5FcnJvcjt0aHJvdyBuZXcgRXJyb3IoIkkgY291bGQgbm90IHVuZGVyc3RhbmQgdHlwZSBvZiB2YWx1ZSIpfUUuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGF7Y29uc3Ry''@;'; put 'put ''dWN0b3IoKXtzdXBlcigpLHRoaXMucmljaFRleHRYRm9ybT1uZXcgdH1nZXQgdGFnKCl7cmV0dXJuImMifXByZXBhcmUobCxuKXtjb25zdCBpPW4uc3R5bGVzLmFkZFN0eWxlTW9kZWwobC5zdHlsZXx8e30sKGg9bCkudHlwZT09PXIuVmFsdWVUeXBlLkZvcm11bGE/ZShoLnJlc3VsdCk6aC50''@;'; put 'put ''eXBlKTt2YXIgaDtzd2l0Y2goaSYmKGwuc3R5bGVJZD1pKSxsLmNvbW1lbnQmJm4uY29tbWVudHMucHVzaCh7Li4ubC5jb21tZW50LHJlZjpsLmFkZHJlc3N9KSxsLnR5cGUpe2Nhc2Ugci5WYWx1ZVR5cGUuU3RyaW5nOmNhc2Ugci5WYWx1ZVR5cGUuUmljaFRleHQ6bi5zaGFyZWRTdHJpbmdz''@;'; put 'put ''JiYobC5zc0lkPW4uc2hhcmVkU3RyaW5ncy5hZGQobC52YWx1ZSkpO2JyZWFrO2Nhc2Ugci5WYWx1ZVR5cGUuRGF0ZTpuLmRhdGUxOTA0JiYobC5kYXRlMTkwND0hMCk7YnJlYWs7Y2FzZSByLlZhbHVlVHlwZS5IeXBlcmxpbms6bi5zaGFyZWRTdHJpbmdzJiZudWxsIT1sLnRleHQmJihsLnNz''@;'; put 'put ''SWQ9bi5zaGFyZWRTdHJpbmdzLmFkZChsLnRleHQpKSxuLmh5cGVybGlua3MucHVzaCh7YWRkcmVzczpsLmFkZHJlc3MsdGFyZ2V0OmwuaHlwZXJsaW5rLHRvb2x0aXA6bC50b29sdGlwfSk7YnJlYWs7Y2FzZSByLlZhbHVlVHlwZS5NZXJnZTpuLm1lcmdlcy5hZGQobCk7YnJlYWs7Y2FzZSBy''@;'; put 'put ''LlZhbHVlVHlwZS5Gb3JtdWxhOmlmKG4uZGF0ZTE5MDQmJihsLmRhdGUxOTA0PSEwKSwic2hhcmVkIj09PWwuc2hhcmVUeXBlJiYobC5zaT1uLnNpRm9ybXVsYWUrKyksbC5mb3JtdWxhKW4uZm9ybXVsYWVbbC5hZGRyZXNzXT1sO2Vsc2UgaWYobC5zaGFyZWRGb3JtdWxhKXtjb25zdCBoPW4u''@;'; put 'put ''Zm9ybXVsYWVbbC5zaGFyZWRGb3JtdWxhXTtpZighaCl0aHJvdyBuZXcgRXJyb3IoIlNoYXJlZCBGb3JtdWxhIG1hc3RlciBtdXN0IGV4aXN0IGFib3ZlIGFuZCBvciBsZWZ0IG9mIGNsb25lIGZvciBjZWxsICIrbC5hZGRyZXNzKTt2b2lkIDA9PT1oLnNpPyhoLnNoYXJlVHlwZT0ic2hhcmVk''@;'; put 'put ''IixoLnNpPW4uc2lGb3JtdWxhZSsrLGgucmFuZ2U9bmV3IG8oaC5hZGRyZXNzLGwuYWRkcmVzcykpOmgucmFuZ2UmJmgucmFuZ2UuZXhwYW5kVG9BZGRyZXNzKGwuYWRkcmVzcyksbC5zaT1oLnNpfX19cmVuZGVyRm9ybXVsYShsLG4pe2xldCBpPW51bGw7c3dpdGNoKG4uc2hhcmVUeXBlKXtj''@;'; put 'put ''YXNlInNoYXJlZCI6aT17dDoic2hhcmVkIixyZWY6bi5yZWZ8fG4ucmFuZ2UucmFuZ2Usc2k6bi5zaX07YnJlYWs7Y2FzZSJhcnJheSI6aT17dDoiYXJyYXkiLHJlZjpuLnJlZn07YnJlYWs7ZGVmYXVsdDp2b2lkIDAhPT1uLnNpJiYoaT17dDoic2hhcmVkIixzaTpuLnNpfSl9c3dpdGNoKGUo''@;'; put 'put ''bi5yZXN1bHQpKXtjYXNlIHIuVmFsdWVUeXBlLk51bGw6bC5sZWFmTm9kZSgiZiIsaSxuLmZvcm11bGEpO2JyZWFrO2Nhc2Ugci5WYWx1ZVR5cGUuU3RyaW5nOmwuYWRkQXR0cmlidXRlKCJ0Iiwic3RyIiksbC5sZWFmTm9kZSgiZiIsaSxuLmZvcm11bGEpLGwubGVhZk5vZGUoInYiLG51bGws''@;'; put 'put ''bi5yZXN1bHQpO2JyZWFrO2Nhc2Ugci5WYWx1ZVR5cGUuTnVtYmVyOmwubGVhZk5vZGUoImYiLGksbi5mb3JtdWxhKSxsLmxlYWZOb2RlKCJ2IixudWxsLG4ucmVzdWx0KTticmVhaztjYXNlIHIuVmFsdWVUeXBlLkJvb2xlYW46bC5hZGRBdHRyaWJ1dGUoInQiLCJiIiksbC5sZWFmTm9kZSgi''@;'; put 'put ''ZiIsaSxuLmZvcm11bGEpLGwubGVhZk5vZGUoInYiLG51bGwsbi5yZXN1bHQ/MTowKTticmVhaztjYXNlIHIuVmFsdWVUeXBlLkVycm9yOmwuYWRkQXR0cmlidXRlKCJ0IiwiZSIpLGwubGVhZk5vZGUoImYiLGksbi5mb3JtdWxhKSxsLmxlYWZOb2RlKCJ2IixudWxsLG4ucmVzdWx0LmVycm9y''@;'; put 'put ''KTticmVhaztjYXNlIHIuVmFsdWVUeXBlLkRhdGU6bC5sZWFmTm9kZSgiZiIsaSxuLmZvcm11bGEpLGwubGVhZk5vZGUoInYiLG51bGwsYi5kYXRlVG9FeGNlbChuLnJlc3VsdCxuLmRhdGUxOTA0KSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkkgY291bGQgbm90IHVuZGVyc3Rh''@;'; put 'put ''bmQgdHlwZSBvZiB2YWx1ZSIpfX1yZW5kZXIobCxuKXtpZihuLnR5cGUhPT1yLlZhbHVlVHlwZS5OdWxsfHxuLnN0eWxlSWQpe3N3aXRjaChsLm9wZW5Ob2RlKCJjIiksbC5hZGRBdHRyaWJ1dGUoInIiLG4uYWRkcmVzcyksbi5zdHlsZUlkJiZsLmFkZEF0dHJpYnV0ZSgicyIsbi5zdHlsZUlk''@;'; put 'put ''KSxuLnR5cGUpe2Nhc2Ugci5WYWx1ZVR5cGUuTnVsbDpicmVhaztjYXNlIHIuVmFsdWVUeXBlLk51bWJlcjpsLmxlYWZOb2RlKCJ2IixudWxsLG4udmFsdWUpO2JyZWFrO2Nhc2Ugci5WYWx1ZVR5cGUuQm9vbGVhbjpsLmFkZEF0dHJpYnV0ZSgidCIsImIiKSxsLmxlYWZOb2RlKCJ2IixudWxs''@;'; put 'put ''LG4udmFsdWU/IjEiOiIwIik7YnJlYWs7Y2FzZSByLlZhbHVlVHlwZS5FcnJvcjpsLmFkZEF0dHJpYnV0ZSgidCIsImUiKSxsLmxlYWZOb2RlKCJ2IixudWxsLG4udmFsdWUuZXJyb3IpO2JyZWFrO2Nhc2Ugci5WYWx1ZVR5cGUuU3RyaW5nOmNhc2Ugci5WYWx1ZVR5cGUuUmljaFRleHQ6dm9p''@;'; put 'put ''ZCAwIT09bi5zc0lkPyhsLmFkZEF0dHJpYnV0ZSgidCIsInMiKSxsLmxlYWZOb2RlKCJ2IixudWxsLG4uc3NJZCkpOm4udmFsdWUmJm4udmFsdWUucmljaFRleHQ/KGwuYWRkQXR0cmlidXRlKCJ0IiwiaW5saW5lU3RyIiksbC5vcGVuTm9kZSgiaXMiKSxuLnZhbHVlLnJpY2hUZXh0LmZvckVh''@;'; put 'put ''Y2goaT0+e3RoaXMucmljaFRleHRYRm9ybS5yZW5kZXIobCxpKX0pLGwuY2xvc2VOb2RlKCJpcyIpKToobC5hZGRBdHRyaWJ1dGUoInQiLCJzdHIiKSxsLmxlYWZOb2RlKCJ2IixudWxsLG4udmFsdWUpKTticmVhaztjYXNlIHIuVmFsdWVUeXBlLkRhdGU6bC5sZWFmTm9kZSgidiIsbnVsbCxi''@;'; put 'put ''LmRhdGVUb0V4Y2VsKG4udmFsdWUsbi5kYXRlMTkwNCkpO2JyZWFrO2Nhc2Ugci5WYWx1ZVR5cGUuSHlwZXJsaW5rOnZvaWQgMCE9PW4uc3NJZD8obC5hZGRBdHRyaWJ1dGUoInQiLCJzIiksbC5sZWFmTm9kZSgidiIsbnVsbCxuLnNzSWQpKToobC5hZGRBdHRyaWJ1dGUoInQiLCJzdHIiKSxs''@;'; put 'put ''LmxlYWZOb2RlKCJ2IixudWxsLG4udGV4dCkpO2JyZWFrO2Nhc2Ugci5WYWx1ZVR5cGUuRm9ybXVsYTp0aGlzLnJlbmRlckZvcm11bGEobCxuKX1sLmNsb3NlTm9kZSgpfX1wYXJzZU9wZW4obCl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihsKSwhMDtzd2l0''@;'; put 'put ''Y2gobC5uYW1lKXtjYXNlImMiOnJldHVybiB0aGlzLm1vZGVsPXthZGRyZXNzOmwuYXR0cmlidXRlcy5yfSx0aGlzLnQ9bC5hdHRyaWJ1dGVzLnQsbC5hdHRyaWJ1dGVzLnMmJih0aGlzLm1vZGVsLnN0eWxlSWQ9cGFyc2VJbnQobC5hdHRyaWJ1dGVzLnMsMTApKSwhMDtjYXNlImYiOnJldHVy''@;'; put 'put ''biB0aGlzLmN1cnJlbnROb2RlPSJmIix0aGlzLm1vZGVsLnNpPWwuYXR0cmlidXRlcy5zaSx0aGlzLm1vZGVsLnNoYXJlVHlwZT1sLmF0dHJpYnV0ZXMudCx0aGlzLm1vZGVsLnJlZj1sLmF0dHJpYnV0ZXMucmVmLCEwO2Nhc2UidiI6cmV0dXJuIHRoaXMuY3VycmVudE5vZGU9InYiLCEwO2Nh''@;'; put 'put ''c2UidCI6cmV0dXJuIHRoaXMuY3VycmVudE5vZGU9InQiLCEwO2Nhc2UiciI6cmV0dXJuIHRoaXMucGFyc2VyPXRoaXMucmljaFRleHRYRm9ybSx0aGlzLnBhcnNlci5wYXJzZU9wZW4obCksITA7ZGVmYXVsdDpyZXR1cm4hMX19cGFyc2VUZXh0KGwpe2lmKHRoaXMucGFyc2VyKXRoaXMucGFy''@;'; put 'put ''c2VyLnBhcnNlVGV4dChsKTtlbHNlIHN3aXRjaCh0aGlzLmN1cnJlbnROb2RlKXtjYXNlImYiOnRoaXMubW9kZWwuZm9ybXVsYT10aGlzLm1vZGVsLmZvcm11bGE/dGhpcy5tb2RlbC5mb3JtdWxhK2w6bDticmVhaztjYXNlInYiOmNhc2UidCI6dGhpcy5tb2RlbC52YWx1ZSYmdGhpcy5tb2Rl''@;'; put 'put ''bC52YWx1ZS5yaWNoVGV4dD90aGlzLm1vZGVsLnZhbHVlLnJpY2hUZXh0LnRleHQ9dGhpcy5tb2RlbC52YWx1ZS5yaWNoVGV4dC50ZXh0P3RoaXMubW9kZWwudmFsdWUucmljaFRleHQudGV4dCtsOmw6dGhpcy5tb2RlbC52YWx1ZT10aGlzLm1vZGVsLnZhbHVlP3RoaXMubW9kZWwudmFsdWUr''@;'; put 'put ''bDpsfX1wYXJzZUNsb3NlKGwpe3N3aXRjaChsKXtjYXNlImMiOntjb25zdHttb2RlbDpufT10aGlzO2lmKG4uZm9ybXVsYXx8bi5zaGFyZVR5cGUpbi50eXBlPXIuVmFsdWVUeXBlLkZvcm11bGEsbi52YWx1ZSYmKG4ucmVzdWx0PSJzdHIiPT09dGhpcy50P2IueG1sRGVjb2RlKG4udmFsdWUp''@;'; put 'put ''OiJiIj09PXRoaXMudD8wIT09cGFyc2VJbnQobi52YWx1ZSwxMCk6ImUiPT09dGhpcy50P3tlcnJvcjpuLnZhbHVlfTpwYXJzZUZsb2F0KG4udmFsdWUpLG4udmFsdWU9dm9pZCAwKTtlbHNlIGlmKHZvaWQgMCE9PW4udmFsdWUpc3dpdGNoKHRoaXMudCl7Y2FzZSJzIjpuLnR5cGU9ci5WYWx1''@;'; put 'put ''ZVR5cGUuU3RyaW5nLG4udmFsdWU9cGFyc2VJbnQobi52YWx1ZSwxMCk7YnJlYWs7Y2FzZSJzdHIiOm4udHlwZT1yLlZhbHVlVHlwZS5TdHJpbmcsbi52YWx1ZT1iLnhtbERlY29kZShuLnZhbHVlKTticmVhaztjYXNlImlubGluZVN0ciI6bi50eXBlPXIuVmFsdWVUeXBlLlN0cmluZzticmVh''@;'; put 'put ''aztjYXNlImIiOm4udHlwZT1yLlZhbHVlVHlwZS5Cb29sZWFuLG4udmFsdWU9MCE9PXBhcnNlSW50KG4udmFsdWUsMTApO2JyZWFrO2Nhc2UiZSI6bi50eXBlPXIuVmFsdWVUeXBlLkVycm9yLG4udmFsdWU9e2Vycm9yOm4udmFsdWV9O2JyZWFrO2RlZmF1bHQ6bi50eXBlPXIuVmFsdWVUeXBl''@;'; put 'put ''Lk51bWJlcixuLnZhbHVlPXBhcnNlRmxvYXQobi52YWx1ZSl9ZWxzZSBuLnR5cGU9bi5zdHlsZUlkP3IuVmFsdWVUeXBlLk51bGw6ci5WYWx1ZVR5cGUuTWVyZ2U7cmV0dXJuITF9Y2FzZSJmIjpjYXNlInYiOmNhc2UiaXMiOnJldHVybiB0aGlzLmN1cnJlbnROb2RlPXZvaWQgMCwhMDtjYXNl''@;'; put 'put ''InQiOnJldHVybiB0aGlzLnBhcnNlcj8odGhpcy5wYXJzZXIucGFyc2VDbG9zZShsKSwhMCk6KHRoaXMuY3VycmVudE5vZGU9dm9pZCAwLCEwKTtjYXNlInIiOnJldHVybiB0aGlzLm1vZGVsLnZhbHVlPXRoaXMubW9kZWwudmFsdWV8fHt9LHRoaXMubW9kZWwudmFsdWUucmljaFRleHQ9dGhp''@;'; put 'put ''cy5tb2RlbC52YWx1ZS5yaWNoVGV4dHx8W10sdGhpcy5tb2RlbC52YWx1ZS5yaWNoVGV4dC5wdXNoKHRoaXMucGFyc2VyLm1vZGVsKSx0aGlzLnBhcnNlcj12b2lkIDAsdGhpcy5jdXJyZW50Tm9kZT12b2lkIDAsITA7ZGVmYXVsdDpyZXR1cm4hIXRoaXMucGFyc2VyJiYodGhpcy5wYXJzZXIu''@;'; put 'put ''cGFyc2VDbG9zZShsKSwhMCl9fXJlY29uY2lsZShsLG4pe2NvbnN0IGk9bC5zdHlsZUlkJiZuLnN0eWxlcyYmbi5zdHlsZXMuZ2V0U3R5bGVNb2RlbChsLnN0eWxlSWQpO3N3aXRjaChpJiYobC5zdHlsZT1pKSx2b2lkIDAhPT1sLnN0eWxlSWQmJihsLnN0eWxlSWQ9dm9pZCAwKSxsLnR5cGUp''@;'; put 'put ''e2Nhc2Ugci5WYWx1ZVR5cGUuU3RyaW5nOiJudW1iZXIiPT10eXBlb2YgbC52YWx1ZSYmbi5zaGFyZWRTdHJpbmdzJiYobC52YWx1ZT1uLnNoYXJlZFN0cmluZ3MuZ2V0U3RyaW5nKGwudmFsdWUpKSxsLnZhbHVlLnJpY2hUZXh0JiYobC50eXBlPXIuVmFsdWVUeXBlLlJpY2hUZXh0KTticmVh''@;'; put 'put ''aztjYXNlIHIuVmFsdWVUeXBlLk51bWJlcjppJiZiLmlzRGF0ZUZtdChpLm51bUZtdCkmJihsLnR5cGU9ci5WYWx1ZVR5cGUuRGF0ZSxsLnZhbHVlPWIuZXhjZWxUb0RhdGUobC52YWx1ZSxuLmRhdGUxOTA0KSk7YnJlYWs7Y2FzZSByLlZhbHVlVHlwZS5Gb3JtdWxhOnZvaWQgMCE9PWwucmVz''@;'; put 'put ''dWx0JiZpJiZiLmlzRGF0ZUZtdChpLm51bUZtdCkmJihsLnJlc3VsdD1iLmV4Y2VsVG9EYXRlKGwucmVzdWx0LG4uZGF0ZTE5MDQpKSwic2hhcmVkIj09PWwuc2hhcmVUeXBlJiYobC5yZWY/bi5mb3JtdWxhZVtsLnNpXT1sLmFkZHJlc3M6KGwuc2hhcmVkRm9ybXVsYT1uLmZvcm11bGFlW2wu''@;'; put 'put ''c2ldLGRlbGV0ZSBsLnNoYXJlVHlwZSksZGVsZXRlIGwuc2kpfWNvbnN0IGg9bi5oeXBlcmxpbmtNYXBbbC5hZGRyZXNzXTtoJiYobC50eXBlPT09ci5WYWx1ZVR5cGUuRm9ybXVsYT8obC50ZXh0PWwucmVzdWx0LGwucmVzdWx0PXZvaWQgMCk6KGwudGV4dD1sLnZhbHVlLGwudmFsdWU9dm9p''@;'; put 'put ''ZCAwKSxsLnR5cGU9ci5WYWx1ZVR5cGUuSHlwZXJsaW5rLGwuaHlwZXJsaW5rPWgpO2NvbnN0IGY9bi5jb21tZW50c01hcCYmbi5jb21tZW50c01hcFtsLmFkZHJlc3NdO2YmJihsLmNvbW1lbnQ9Zil9fX0seyIuLi8uLi8uLi9kb2MvZW51bXMiOjcsIi4uLy4uLy4uL2RvYy9yYW5nZSI6MTAs''@;'; put 'put ''Ii4uLy4uLy4uL3V0aWxzL3V0aWxzIjoyNywiLi4vYmFzZS14Zm9ybSI6MzIsIi4uL3N0cmluZ3MvcmljaC10ZXh0LXhmb3JtIjoxMjJ9XSw3NDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uLy4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5k''@;'; put 'put ''cyBie2dldCB0YWcoKXtyZXR1cm4ieDE0OmNmSWNvbiJ9cmVuZGVyKGEsbyl7YS5sZWFmTm9kZSh0aGlzLnRhZyx7aWNvblNldDpvLmljb25TZXQsaWNvbklkOm8uaWNvbklkfSl9cGFyc2VPcGVuKGEpe2xldHthdHRyaWJ1dGVzOm99PWE7dGhpcy5tb2RlbD17aWNvblNldDpvLmljb25TZXQs''@;'; put 'put ''aWNvbklkOmIudG9JbnRWYWx1ZShvLmljb25JZCl9fXBhcnNlQ2xvc2UoYSl7cmV0dXJuIGEhPT10aGlzLnRhZ319fSx7Ii4uLy4uL2Jhc2UteGZvcm0iOjMyfV0sNzU6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3R7djQ6Yn09cygidXVpZCIpLGE9cygiLi4vLi4vYmFzZS14''@;'; put 'put ''Zm9ybSIpLG89cygiLi4vLi4vY29tcG9zaXRlLXhmb3JtIikscj1zKCIuL2RhdGFiYXItZXh0LXhmb3JtIiksdD1zKCIuL2ljb24tc2V0LWV4dC14Zm9ybSIpLGU9eyIzVHJpYW5nbGVzIjohMCwiM1N0YXJzIjohMCwiNUJveGVzIjohMH07Y2xhc3MgbCBleHRlbmRzIG97Y29uc3RydWN0b3Io''@;'; put 'put ''KXtzdXBlcigpLHRoaXMubWFwPXsieDE0OmRhdGFCYXIiOnRoaXMuZGF0YWJhclhmb3JtPW5ldyByLCJ4MTQ6aWNvblNldCI6dGhpcy5pY29uU2V0WGZvcm09bmV3IHR9fWdldCB0YWcoKXtyZXR1cm4ieDE0OmNmUnVsZSJ9c3RhdGljIGlzRXh0KGkpe3JldHVybiJkYXRhQmFyIj09PWkudHlw''@;'; put 'put ''ZT9yLmlzRXh0KGkpOiEoImljb25TZXQiIT09aS50eXBlfHwhaS5jdXN0b20mJiFlW2kuaWNvblNldF0pfXByZXBhcmUoaSl7bC5pc0V4dChpKSYmKGkueDE0SWQ9YHske2IoKX19YC50b1VwcGVyQ2FzZSgpKX1yZW5kZXIoaSxoKXtpZihsLmlzRXh0KGgpKXN3aXRjaChoLnR5cGUpe2Nhc2Ui''@;'; put 'put ''ZGF0YUJhciI6dGhpcy5yZW5kZXJEYXRhQmFyKGksaCk7YnJlYWs7Y2FzZSJpY29uU2V0Ijp0aGlzLnJlbmRlckljb25TZXQoaSxoKX19cmVuZGVyRGF0YUJhcihpLGgpe2kub3Blbk5vZGUodGhpcy50YWcse3R5cGU6ImRhdGFCYXIiLGlkOmgueDE0SWR9KSx0aGlzLmRhdGFiYXJYZm9ybS5y''@;'; put 'put ''ZW5kZXIoaSxoKSxpLmNsb3NlTm9kZSgpfXJlbmRlckljb25TZXQoaSxoKXtpLm9wZW5Ob2RlKHRoaXMudGFnLHt0eXBlOiJpY29uU2V0Iixwcmlvcml0eTpoLnByaW9yaXR5LGlkOmgueDE0SWR8fGB7JHtiKCl9fWB9KSx0aGlzLmljb25TZXRYZm9ybS5yZW5kZXIoaSxoKSxpLmNsb3NlTm9k''@;'; put 'put ''ZSgpfWNyZWF0ZU5ld01vZGVsKGkpe2xldHthdHRyaWJ1dGVzOmh9PWk7cmV0dXJue3R5cGU6aC50eXBlLHgxNElkOmguaWQscHJpb3JpdHk6YS50b0ludFZhbHVlKGgucHJpb3JpdHkpfX1vblBhcnNlckNsb3NlKGksaCl7T2JqZWN0LmFzc2lnbih0aGlzLm1vZGVsLGgubW9kZWwpfX1FLmV4''@;'; put 'put ''cG9ydHM9bH0seyIuLi8uLi9iYXNlLXhmb3JtIjozMiwiLi4vLi4vY29tcG9zaXRlLXhmb3JtIjo0OCwiLi9kYXRhYmFyLWV4dC14Zm9ybSI6NzksIi4vaWNvbi1zZXQtZXh0LXhmb3JtIjo4MSx1dWlkOjUyOH1dLDc2OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygi''@;'; put 'put ''Li4vLi4vY29tcG9zaXRlLXhmb3JtIiksYT1zKCIuL2YtZXh0LXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgYntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9eyJ4bTpmIjp0aGlzLmZFeHRYZm9ybT1uZXcgYX19Z2V0IHRhZygpe3JldHVybiJ4MTQ6Y2Z2byJ9cmVuZGVy''@;'; put 'put ''KG8scil7by5vcGVuTm9kZSh0aGlzLnRhZyx7dHlwZTpyLnR5cGV9KSx2b2lkIDAhPT1yLnZhbHVlJiZ0aGlzLmZFeHRYZm9ybS5yZW5kZXIobyxyLnZhbHVlKSxvLmNsb3NlTm9kZSgpfWNyZWF0ZU5ld01vZGVsKG8pe3JldHVybnt0eXBlOm8uYXR0cmlidXRlcy50eXBlfX1vblBhcnNlckNs''@;'; put 'put ''b3NlKG8scil7InhtOmYiPT09byYmKHRoaXMubW9kZWwudmFsdWU9ci5tb2RlbD9wYXJzZUZsb2F0KHIubW9kZWwpOjApfX19LHsiLi4vLi4vY29tcG9zaXRlLXhmb3JtIjo0OCwiLi9mLWV4dC14Zm9ybSI6ODB9XSw3NzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMo''@;'; put 'put ''Ii4uLy4uL2NvbXBvc2l0ZS14Zm9ybSIpLGE9cygiLi9zcXJlZi1leHQteGZvcm0iKSxvPXMoIi4vY2YtcnVsZS1leHQteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBie2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17InhtOnNxcmVmIjp0aGlzLnNxUmVmPW5ldyBhLCJ4''@;'; put 'put ''MTQ6Y2ZSdWxlIjp0aGlzLmNmUnVsZT1uZXcgb319Z2V0IHRhZygpe3JldHVybiJ4MTQ6Y29uZGl0aW9uYWxGb3JtYXR0aW5nIn1wcmVwYXJlKHIsdCl7ci5ydWxlcy5mb3JFYWNoKGU9Pnt0aGlzLmNmUnVsZS5wcmVwYXJlKGUsdCl9KX1yZW5kZXIocix0KXt0LnJ1bGVzLnNvbWUoby5pc0V4''@;'; put 'put ''dCkmJihyLm9wZW5Ob2RlKHRoaXMudGFnLHsieG1sbnM6eG0iOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9leGNlbC8yMDA2L21haW4ifSksdC5ydWxlcy5maWx0ZXIoby5pc0V4dCkuZm9yRWFjaChlPT50aGlzLmNmUnVsZS5yZW5kZXIocixlKSksdGhpcy5zcVJlZi5y''@;'; put 'put ''ZW5kZXIocix0LnJlZiksci5jbG9zZU5vZGUoKSl9Y3JlYXRlTmV3TW9kZWwoKXtyZXR1cm57cnVsZXM6W119fW9uUGFyc2VyQ2xvc2Uocix0KXtzd2l0Y2gocil7Y2FzZSJ4bTpzcXJlZiI6dGhpcy5tb2RlbC5yZWY9dC5tb2RlbDticmVhaztjYXNlIngxNDpjZlJ1bGUiOnRoaXMubW9kZWwu''@;'; put 'put ''cnVsZXMucHVzaCh0Lm1vZGVsKX19fX0seyIuLi8uLi9jb21wb3NpdGUteGZvcm0iOjQ4LCIuL2NmLXJ1bGUtZXh0LXhmb3JtIjo3NSwiLi9zcXJlZi1leHQteGZvcm0iOjgyfV0sNzg6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi8uLi9jb21wb3NpdGUteGZv''@;'; put 'put ''cm0iKSxhPXMoIi4vY2YtcnVsZS1leHQteGZvcm0iKSxvPXMoIi4vY29uZGl0aW9uYWwtZm9ybWF0dGluZy1leHQteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBie2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17IngxNDpjb25kaXRpb25hbEZvcm1hdHRpbmciOnRoaXMu''@;'; put 'put ''Y2ZYZm9ybT1uZXcgb319Z2V0IHRhZygpe3JldHVybiJ4MTQ6Y29uZGl0aW9uYWxGb3JtYXR0aW5ncyJ9aGFzQ29udGVudChyKXtyZXR1cm4gdm9pZCAwPT09ci5oYXNFeHRDb250ZW50JiYoci5oYXNFeHRDb250ZW50PXIuc29tZSh0PT50LnJ1bGVzLnNvbWUoYS5pc0V4dCkpKSxyLmhhc0V4''@;'; put 'put ''dENvbnRlbnR9cHJlcGFyZShyLHQpe3IuZm9yRWFjaChlPT57dGhpcy5jZlhmb3JtLnByZXBhcmUoZSx0KX0pfXJlbmRlcihyLHQpe3RoaXMuaGFzQ29udGVudCh0KSYmKHIub3Blbk5vZGUodGhpcy50YWcpLHQuZm9yRWFjaChlPT50aGlzLmNmWGZvcm0ucmVuZGVyKHIsZSkpLHIuY2xvc2VO''@;'; put 'put ''b2RlKCkpfWNyZWF0ZU5ld01vZGVsKCl7cmV0dXJuW119b25QYXJzZXJDbG9zZShyLHQpe3RoaXMubW9kZWwucHVzaCh0Lm1vZGVsKX19fSx7Ii4uLy4uL2NvbXBvc2l0ZS14Zm9ybSI6NDgsIi4vY2YtcnVsZS1leHQteGZvcm0iOjc1LCIuL2NvbmRpdGlvbmFsLWZvcm1hdHRpbmctZXh0LXhm''@;'; put 'put ''b3JtIjo3N31dLDc5OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vLi4vYmFzZS14Zm9ybSIpLGE9cygiLi4vLi4vY29tcG9zaXRlLXhmb3JtIiksbz1zKCIuLi8uLi9zdHlsZS9jb2xvci14Zm9ybSIpLHI9cygiLi9jZnZvLWV4dC14Zm9ybSIpO0UuZXhwb3J0''@;'; put 'put ''cz1jbGFzcyBleHRlbmRzIGF7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXsieDE0OmNmdm8iOnRoaXMuY2Z2b1hmb3JtPW5ldyByLCJ4MTQ6Ym9yZGVyQ29sb3IiOnRoaXMuYm9yZGVyQ29sb3JYZm9ybT1uZXcgbygieDE0OmJvcmRlckNvbG9yIiksIngxNDpuZWdhdGl2ZUJvcmRl''@;'; put 'put ''ckNvbG9yIjp0aGlzLm5lZ2F0aXZlQm9yZGVyQ29sb3JYZm9ybT1uZXcgbygieDE0Om5lZ2F0aXZlQm9yZGVyQ29sb3IiKSwieDE0Om5lZ2F0aXZlRmlsbENvbG9yIjp0aGlzLm5lZ2F0aXZlRmlsbENvbG9yWGZvcm09bmV3IG8oIngxNDpuZWdhdGl2ZUZpbGxDb2xvciIpLCJ4MTQ6YXhpc0Nv''@;'; put 'put ''bG9yIjp0aGlzLmF4aXNDb2xvclhmb3JtPW5ldyBvKCJ4MTQ6YXhpc0NvbG9yIil9fXN0YXRpYyBpc0V4dCh0KXtyZXR1cm4hdC5ncmFkaWVudH1nZXQgdGFnKCl7cmV0dXJuIngxNDpkYXRhQmFyIn1yZW5kZXIodCxlKXt0Lm9wZW5Ob2RlKHRoaXMudGFnLHttaW5MZW5ndGg6Yi50b0ludEF0''@;'; put 'put ''dHJpYnV0ZShlLm1pbkxlbmd0aCwwLCEwKSxtYXhMZW5ndGg6Yi50b0ludEF0dHJpYnV0ZShlLm1heExlbmd0aCwxMDAsITApLGJvcmRlcjpiLnRvQm9vbEF0dHJpYnV0ZShlLmJvcmRlciwhMSksZ3JhZGllbnQ6Yi50b0Jvb2xBdHRyaWJ1dGUoZS5ncmFkaWVudCwhMCksbmVnYXRpdmVCYXJD''@;'; put 'put ''b2xvclNhbWVBc1Bvc2l0aXZlOmIudG9Cb29sQXR0cmlidXRlKGUubmVnYXRpdmVCYXJDb2xvclNhbWVBc1Bvc2l0aXZlLCEwKSxuZWdhdGl2ZUJhckJvcmRlckNvbG9yU2FtZUFzUG9zaXRpdmU6Yi50b0Jvb2xBdHRyaWJ1dGUoZS5uZWdhdGl2ZUJhckJvcmRlckNvbG9yU2FtZUFzUG9zaXRp''@;'; put 'put ''dmUsITApLGF4aXNQb3NpdGlvbjpiLnRvQXR0cmlidXRlKGUuYXhpc1Bvc2l0aW9uLCJhdXRvIiksZGlyZWN0aW9uOmIudG9BdHRyaWJ1dGUoZS5kaXJlY3Rpb24sImxlZnRUb1JpZ2h0Iil9KSxlLmNmdm8uZm9yRWFjaChsPT57dGhpcy5jZnZvWGZvcm0ucmVuZGVyKHQsbCl9KSx0aGlzLmJv''@;'; put 'put ''cmRlckNvbG9yWGZvcm0ucmVuZGVyKHQsZS5ib3JkZXJDb2xvciksdGhpcy5uZWdhdGl2ZUJvcmRlckNvbG9yWGZvcm0ucmVuZGVyKHQsZS5uZWdhdGl2ZUJvcmRlckNvbG9yKSx0aGlzLm5lZ2F0aXZlRmlsbENvbG9yWGZvcm0ucmVuZGVyKHQsZS5uZWdhdGl2ZUZpbGxDb2xvciksdGhpcy5h''@;'; put 'put ''eGlzQ29sb3JYZm9ybS5yZW5kZXIodCxlLmF4aXNDb2xvciksdC5jbG9zZU5vZGUoKX1jcmVhdGVOZXdNb2RlbCh0KXtsZXR7YXR0cmlidXRlczplfT10O3JldHVybntjZnZvOltdLG1pbkxlbmd0aDpiLnRvSW50VmFsdWUoZS5taW5MZW5ndGgsMCksbWF4TGVuZ3RoOmIudG9JbnRWYWx1ZShl''@;'; put 'put ''Lm1heExlbmd0aCwxMDApLGJvcmRlcjpiLnRvQm9vbFZhbHVlKGUuYm9yZGVyLCExKSxncmFkaWVudDpiLnRvQm9vbFZhbHVlKGUuZ3JhZGllbnQsITApLG5lZ2F0aXZlQmFyQ29sb3JTYW1lQXNQb3NpdGl2ZTpiLnRvQm9vbFZhbHVlKGUubmVnYXRpdmVCYXJDb2xvclNhbWVBc1Bvc2l0aXZl''@;'; put 'put ''LCEwKSxuZWdhdGl2ZUJhckJvcmRlckNvbG9yU2FtZUFzUG9zaXRpdmU6Yi50b0Jvb2xWYWx1ZShlLm5lZ2F0aXZlQmFyQm9yZGVyQ29sb3JTYW1lQXNQb3NpdGl2ZSwhMCksYXhpc1Bvc2l0aW9uOmIudG9TdHJpbmdWYWx1ZShlLmF4aXNQb3NpdGlvbiwiYXV0byIpLGRpcmVjdGlvbjpiLnRv''@;'; put 'put ''U3RyaW5nVmFsdWUoZS5kaXJlY3Rpb24sImxlZnRUb1JpZ2h0Iil9fW9uUGFyc2VyQ2xvc2UodCxlKXtjb25zdFssbF09dC5zcGxpdCgiOiIpOyJjZnZvIj09PWw/dGhpcy5tb2RlbC5jZnZvLnB1c2goZS5tb2RlbCk6dGhpcy5tb2RlbFtsXT1lLm1vZGVsfX19LHsiLi4vLi4vYmFzZS14Zm9y''@;'; put 'put ''bSI6MzIsIi4uLy4uL2NvbXBvc2l0ZS14Zm9ybSI6NDgsIi4uLy4uL3N0eWxlL2NvbG9yLXhmb3JtIjoxMjgsIi4vY2Z2by1leHQteGZvcm0iOjc2fV0sODA6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi8uLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNz''@;'; put 'put ''IGV4dGVuZHMgYntnZXQgdGFnKCl7cmV0dXJuInhtOmYifXJlbmRlcihhLG8pe2EubGVhZk5vZGUodGhpcy50YWcsbnVsbCxvKX1wYXJzZU9wZW4oKXt0aGlzLm1vZGVsPSIifXBhcnNlVGV4dChhKXt0aGlzLm1vZGVsKz1hfXBhcnNlQ2xvc2UoYSl7cmV0dXJuIGEhPT10aGlzLnRhZ319fSx7''@;'; put 'put ''Ii4uLy4uL2Jhc2UteGZvcm0iOjMyfV0sODE6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi8uLi9iYXNlLXhmb3JtIiksYT1zKCIuLi8uLi9jb21wb3NpdGUteGZvcm0iKSxvPXMoIi4vY2Z2by1leHQteGZvcm0iKSxyPXMoIi4vY2YtaWNvbi1leHQteGZvcm0i''@;'; put 'put ''KTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBhe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17IngxNDpjZnZvIjp0aGlzLmNmdm9YZm9ybT1uZXcgbywieDE0OmNmSWNvbiI6dGhpcy5jZkljb25YZm9ybT1uZXcgcn19Z2V0IHRhZygpe3JldHVybiJ4MTQ6aWNvblNldCJ9cmVuZGVy''@;'; put 'put ''KHQsZSl7dC5vcGVuTm9kZSh0aGlzLnRhZyx7aWNvblNldDpiLnRvU3RyaW5nQXR0cmlidXRlKGUuaWNvblNldCkscmV2ZXJzZTpiLnRvQm9vbEF0dHJpYnV0ZShlLnJldmVyc2UsITEpLHNob3dWYWx1ZTpiLnRvQm9vbEF0dHJpYnV0ZShlLnNob3dWYWx1ZSwhMCksY3VzdG9tOmIudG9Cb29s''@;'; put 'put ''QXR0cmlidXRlKGUuaWNvbnMsITEpfSksZS5jZnZvLmZvckVhY2gobD0+e3RoaXMuY2Z2b1hmb3JtLnJlbmRlcih0LGwpfSksZS5pY29ucyYmZS5pY29ucy5mb3JFYWNoKChsLG4pPT57bC5pY29uSWQ9bix0aGlzLmNmSWNvblhmb3JtLnJlbmRlcih0LGwpfSksdC5jbG9zZU5vZGUoKX1jcmVh''@;'; put 'put ''dGVOZXdNb2RlbCh0KXtsZXR7YXR0cmlidXRlczplfT10O3JldHVybntjZnZvOltdLGljb25TZXQ6Yi50b1N0cmluZ1ZhbHVlKGUuaWNvblNldCwiM1RyYWZmaWNMaWdodHMiKSxyZXZlcnNlOmIudG9Cb29sVmFsdWUoZS5yZXZlcnNlLCExKSxzaG93VmFsdWU6Yi50b0Jvb2xWYWx1ZShlLnNo''@;'; put 'put ''b3dWYWx1ZSwhMCl9fW9uUGFyc2VyQ2xvc2UodCxlKXtjb25zdFssbF09dC5zcGxpdCgiOiIpO3N3aXRjaChsKXtjYXNlImNmdm8iOnRoaXMubW9kZWwuY2Z2by5wdXNoKGUubW9kZWwpO2JyZWFrO2Nhc2UiY2ZJY29uIjp0aGlzLm1vZGVsLmljb25zfHwodGhpcy5tb2RlbC5pY29ucz1bXSks''@;'; put 'put ''dGhpcy5tb2RlbC5pY29ucy5wdXNoKGUubW9kZWwpO2JyZWFrO2RlZmF1bHQ6dGhpcy5tb2RlbFtsXT1lLm1vZGVsfX19fSx7Ii4uLy4uL2Jhc2UteGZvcm0iOjMyLCIuLi8uLi9jb21wb3NpdGUteGZvcm0iOjQ4LCIuL2NmLWljb24tZXh0LXhmb3JtIjo3NCwiLi9jZnZvLWV4dC14Zm9ybSI6''@;'; put 'put ''NzZ9XSw4MjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uLy4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBie2dldCB0YWcoKXtyZXR1cm4ieG06c3FyZWYifXJlbmRlcihhLG8pe2EubGVhZk5vZGUodGhpcy50YWcsbnVsbCxvKX1wYXJz''@;'; put 'put ''ZU9wZW4oKXt0aGlzLm1vZGVsPSIifXBhcnNlVGV4dChhKXt0aGlzLm1vZGVsKz1hfXBhcnNlQ2xvc2UoYSl7cmV0dXJuIGEhPT10aGlzLnRhZ319fSx7Ii4uLy4uL2Jhc2UteGZvcm0iOjMyfV0sODM6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi8uLi9iYXNl''@;'; put 'put ''LXhmb3JtIiksYT1zKCIuLi8uLi9jb21wb3NpdGUteGZvcm0iKSxvPXMoIi4uLy4uLy4uLy4uL2RvYy9yYW5nZSIpLHI9cygiLi9kYXRhYmFyLXhmb3JtIiksdD1zKCIuL2V4dC1sc3QtcmVmLXhmb3JtIiksZT1zKCIuL2Zvcm11bGEteGZvcm0iKSxsPXMoIi4vY29sb3Itc2NhbGUteGZvcm0i''@;'; put 'put ''KSxuPXMoIi4vaWNvbi1zZXQteGZvcm0iKSxpPXsiM1RyaWFuZ2xlcyI6ITAsIjNTdGFycyI6ITAsIjVCb3hlcyI6ITB9LGg9dT0+e2NvbnN0e3R5cGU6cCxvcGVyYXRvcjpkfT11O3N3aXRjaChwKXtjYXNlImNvbnRhaW5zVGV4dCI6Y2FzZSJjb250YWluc0JsYW5rcyI6Y2FzZSJub3RDb250''@;'; put 'put ''YWluc0JsYW5rcyI6Y2FzZSJjb250YWluc0Vycm9ycyI6Y2FzZSJub3RDb250YWluc0Vycm9ycyI6cmV0dXJue3R5cGU6ImNvbnRhaW5zVGV4dCIsb3BlcmF0b3I6cH07ZGVmYXVsdDpyZXR1cm57dHlwZTpwLG9wZXJhdG9yOmR9fX07Y2xhc3MgZiBleHRlbmRzIGF7Y29uc3RydWN0b3IoKXtz''@;'; put 'put ''dXBlcigpLHRoaXMubWFwPXtkYXRhQmFyOnRoaXMuZGF0YWJhclhmb3JtPW5ldyByLGV4dExzdDp0aGlzLmV4dExzdFJlZlhmb3JtPW5ldyB0LGZvcm11bGE6dGhpcy5mb3JtdWxhWGZvcm09bmV3IGUsY29sb3JTY2FsZTp0aGlzLmNvbG9yU2NhbGVYZm9ybT1uZXcgbCxpY29uU2V0OnRoaXMu''@;'; put 'put ''aWNvblNldFhmb3JtPW5ldyBufX1nZXQgdGFnKCl7cmV0dXJuImNmUnVsZSJ9c3RhdGljIGlzUHJpbWl0aXZlKHApe3JldHVybiJpY29uU2V0IiE9PXAudHlwZXx8IXAuY3VzdG9tJiYhaVtwLmljb25TZXRdfXJlbmRlcihwLGQpe3N3aXRjaChkLnR5cGUpe2Nhc2UiZXhwcmVzc2lvbiI6dGhp''@;'; put 'put ''cy5yZW5kZXJFeHByZXNzaW9uKHAsZCk7YnJlYWs7Y2FzZSJjZWxsSXMiOnRoaXMucmVuZGVyQ2VsbElzKHAsZCk7YnJlYWs7Y2FzZSJ0b3AxMCI6dGhpcy5yZW5kZXJUb3AxMChwLGQpO2JyZWFrO2Nhc2UiYWJvdmVBdmVyYWdlIjp0aGlzLnJlbmRlckFib3ZlQXZlcmFnZShwLGQpO2JyZWFr''@;'; put 'put ''O2Nhc2UiZGF0YUJhciI6dGhpcy5yZW5kZXJEYXRhQmFyKHAsZCk7YnJlYWs7Y2FzZSJjb2xvclNjYWxlIjp0aGlzLnJlbmRlckNvbG9yU2NhbGUocCxkKTticmVhaztjYXNlImljb25TZXQiOnRoaXMucmVuZGVySWNvblNldChwLGQpO2JyZWFrO2Nhc2UiY29udGFpbnNUZXh0Ijp0aGlzLnJl''@;'; put 'put ''bmRlclRleHQocCxkKTticmVhaztjYXNlInRpbWVQZXJpb2QiOnRoaXMucmVuZGVyVGltZVBlcmlvZChwLGQpfX1yZW5kZXJFeHByZXNzaW9uKHAsZCl7cC5vcGVuTm9kZSh0aGlzLnRhZyx7dHlwZToiZXhwcmVzc2lvbiIsZHhmSWQ6ZC5keGZJZCxwcmlvcml0eTpkLnByaW9yaXR5fSksdGhp''@;'; put 'put ''cy5mb3JtdWxhWGZvcm0ucmVuZGVyKHAsZC5mb3JtdWxhZVswXSkscC5jbG9zZU5vZGUoKX1yZW5kZXJDZWxsSXMocCxkKXtwLm9wZW5Ob2RlKHRoaXMudGFnLHt0eXBlOiJjZWxsSXMiLGR4ZklkOmQuZHhmSWQscHJpb3JpdHk6ZC5wcmlvcml0eSxvcGVyYXRvcjpkLm9wZXJhdG9yfSksZC5m''@;'; put 'put ''b3JtdWxhZS5mb3JFYWNoKHY9Pnt0aGlzLmZvcm11bGFYZm9ybS5yZW5kZXIocCx2KX0pLHAuY2xvc2VOb2RlKCl9cmVuZGVyVG9wMTAocCxkKXtwLmxlYWZOb2RlKHRoaXMudGFnLHt0eXBlOiJ0b3AxMCIsZHhmSWQ6ZC5keGZJZCxwcmlvcml0eTpkLnByaW9yaXR5LHBlcmNlbnQ6Yi50b0Jv''@;'; put 'put ''b2xBdHRyaWJ1dGUoZC5wZXJjZW50LCExKSxib3R0b206Yi50b0Jvb2xBdHRyaWJ1dGUoZC5ib3R0b20sITEpLHJhbms6Yi50b0ludFZhbHVlKGQucmFuaywxMCwhMCl9KX1yZW5kZXJBYm92ZUF2ZXJhZ2UocCxkKXtwLmxlYWZOb2RlKHRoaXMudGFnLHt0eXBlOiJhYm92ZUF2ZXJhZ2UiLGR4''@;'; put 'put ''ZklkOmQuZHhmSWQscHJpb3JpdHk6ZC5wcmlvcml0eSxhYm92ZUF2ZXJhZ2U6Yi50b0Jvb2xBdHRyaWJ1dGUoZC5hYm92ZUF2ZXJhZ2UsITApfSl9cmVuZGVyRGF0YUJhcihwLGQpe3Aub3Blbk5vZGUodGhpcy50YWcse3R5cGU6ImRhdGFCYXIiLHByaW9yaXR5OmQucHJpb3JpdHl9KSx0aGlz''@;'; put 'put ''LmRhdGFiYXJYZm9ybS5yZW5kZXIocCxkKSx0aGlzLmV4dExzdFJlZlhmb3JtLnJlbmRlcihwLGQpLHAuY2xvc2VOb2RlKCl9cmVuZGVyQ29sb3JTY2FsZShwLGQpe3Aub3Blbk5vZGUodGhpcy50YWcse3R5cGU6ImNvbG9yU2NhbGUiLHByaW9yaXR5OmQucHJpb3JpdHl9KSx0aGlzLmNvbG9y''@;'; put 'put ''U2NhbGVYZm9ybS5yZW5kZXIocCxkKSxwLmNsb3NlTm9kZSgpfXJlbmRlckljb25TZXQocCxkKXtmLmlzUHJpbWl0aXZlKGQpJiYocC5vcGVuTm9kZSh0aGlzLnRhZyx7dHlwZToiaWNvblNldCIscHJpb3JpdHk6ZC5wcmlvcml0eX0pLHRoaXMuaWNvblNldFhmb3JtLnJlbmRlcihwLGQpLHAu''@;'; put 'put ''Y2xvc2VOb2RlKCkpfXJlbmRlclRleHQocCxkKXtwLm9wZW5Ob2RlKHRoaXMudGFnLHt0eXBlOmQub3BlcmF0b3IsZHhmSWQ6ZC5keGZJZCxwcmlvcml0eTpkLnByaW9yaXR5LG9wZXJhdG9yOmIudG9TdHJpbmdBdHRyaWJ1dGUoZC5vcGVyYXRvciwiY29udGFpbnNUZXh0Iil9KTtjb25zdCB2''@;'; put 'put ''PShfPT57aWYoXy5mb3JtdWxhZSYmXy5mb3JtdWxhZVswXSlyZXR1cm4gXy5mb3JtdWxhZVswXTtjb25zdCBBPW5ldyBvKF8ucmVmKSx7dGw6SX09QTtzd2l0Y2goXy5vcGVyYXRvcil7Y2FzZSJjb250YWluc1RleHQiOnJldHVybmBOT1QoSVNFUlJPUihTRUFSQ0goIiR7Xy50ZXh0fSIsJHtJ''@;'; put 'put ''fSkpKWA7Y2FzZSJjb250YWluc0JsYW5rcyI6cmV0dXJuYExFTihUUklNKCR7SX0pKT0wYDtjYXNlIm5vdENvbnRhaW5zQmxhbmtzIjpyZXR1cm5gTEVOKFRSSU0oJHtJfSkpPjBgO2Nhc2UiY29udGFpbnNFcnJvcnMiOnJldHVybmBJU0VSUk9SKCR7SX0pYDtjYXNlIm5vdENvbnRhaW5zRXJy''@;'; put 'put ''b3JzIjpyZXR1cm5gTk9UKElTRVJST1IoJHtJfSkpYDtkZWZhdWx0OnJldHVybn19KShkKTt2JiZ0aGlzLmZvcm11bGFYZm9ybS5yZW5kZXIocCx2KSxwLmNsb3NlTm9kZSgpfXJlbmRlclRpbWVQZXJpb2QocCxkKXtwLm9wZW5Ob2RlKHRoaXMudGFnLHt0eXBlOiJ0aW1lUGVyaW9kIixkeGZJ''@;'; put 'put ''ZDpkLmR4ZklkLHByaW9yaXR5OmQucHJpb3JpdHksdGltZVBlcmlvZDpkLnRpbWVQZXJpb2R9KTtjb25zdCB2PShfPT57aWYoXy5mb3JtdWxhZSYmXy5mb3JtdWxhZVswXSlyZXR1cm4gXy5mb3JtdWxhZVswXTtjb25zdCBBPW5ldyBvKF8ucmVmKSx7dGw6SX09QTtzd2l0Y2goXy50aW1lUGVy''@;'; put 'put ''aW9kKXtjYXNlInRoaXNXZWVrIjpyZXR1cm5gQU5EKFRPREFZKCktUk9VTkRET1dOKCR7SX0sMCk8PVdFRUtEQVkoVE9EQVkoKSktMSxST1VORERPV04oJHtJfSwwKS1UT0RBWSgpPD03LVdFRUtEQVkoVE9EQVkoKSkpYDtjYXNlImxhc3RXZWVrIjpyZXR1cm5gQU5EKFRPREFZKCktUk9VTkRE''@;'; put 'put ''T1dOKCR7SX0sMCk+PShXRUVLREFZKFRPREFZKCkpKSxUT0RBWSgpLVJPVU5ERE9XTigke0l9LDApPChXRUVLREFZKFRPREFZKCkpKzcpKWA7Y2FzZSJuZXh0V2VlayI6cmV0dXJuYEFORChST1VORERPV04oJHtJfSwwKS1UT0RBWSgpPig3LVdFRUtEQVkoVE9EQVkoKSkpLFJPVU5ERE9XTigk''@;'; put 'put ''e0l9LDApLVRPREFZKCk8KDE1LVdFRUtEQVkoVE9EQVkoKSkpKWA7Y2FzZSJ5ZXN0ZXJkYXkiOnJldHVybmBGTE9PUigke0l9LDEpPVRPREFZKCktMWA7Y2FzZSJ0b2RheSI6cmV0dXJuYEZMT09SKCR7SX0sMSk9VE9EQVkoKWA7Y2FzZSJ0b21vcnJvdyI6cmV0dXJuYEZMT09SKCR7SX0sMSk9''@;'; put 'put ''VE9EQVkoKSsxYDtjYXNlImxhc3Q3RGF5cyI6cmV0dXJuYEFORChUT0RBWSgpLUZMT09SKCR7SX0sMSk8PTYsRkxPT1IoJHtJfSwxKTw9VE9EQVkoKSlgO2Nhc2UibGFzdE1vbnRoIjpyZXR1cm5gQU5EKE1PTlRIKCR7SX0pPU1PTlRIKEVEQVRFKFRPREFZKCksMC0xKSksWUVBUigke0l9KT1Z''@;'; put 'put ''RUFSKEVEQVRFKFRPREFZKCksMC0xKSkpYDtjYXNlInRoaXNNb250aCI6cmV0dXJuYEFORChNT05USCgke0l9KT1NT05USChUT0RBWSgpKSxZRUFSKCR7SX0pPVlFQVIoVE9EQVkoKSkpYDtjYXNlIm5leHRNb250aCI6cmV0dXJuYEFORChNT05USCgke0l9KT1NT05USChFREFURShUT0RBWSgp''@;'; put 'put ''LDArMSkpLFlFQVIoJHtJfSk9WUVBUihFREFURShUT0RBWSgpLDArMSkpKWA7ZGVmYXVsdDpyZXR1cm59fSkoZCk7diYmdGhpcy5mb3JtdWxhWGZvcm0ucmVuZGVyKHAsdikscC5jbG9zZU5vZGUoKX1jcmVhdGVOZXdNb2RlbChwKXtsZXR7YXR0cmlidXRlczpkfT1wO3JldHVybnsuLi5oKGQp''@;'; put 'put ''LGR4ZklkOmIudG9JbnRWYWx1ZShkLmR4ZklkKSxwcmlvcml0eTpiLnRvSW50VmFsdWUoZC5wcmlvcml0eSksdGltZVBlcmlvZDpkLnRpbWVQZXJpb2QscGVyY2VudDpiLnRvQm9vbFZhbHVlKGQucGVyY2VudCksYm90dG9tOmIudG9Cb29sVmFsdWUoZC5ib3R0b20pLHJhbms6Yi50b0ludFZh''@;'; put 'put ''bHVlKGQucmFuayksYWJvdmVBdmVyYWdlOmIudG9Cb29sVmFsdWUoZC5hYm92ZUF2ZXJhZ2UpfX1vblBhcnNlckNsb3NlKHAsZCl7c3dpdGNoKHApe2Nhc2UiZGF0YUJhciI6Y2FzZSJleHRMc3QiOmNhc2UiY29sb3JTY2FsZSI6Y2FzZSJpY29uU2V0IjpPYmplY3QuYXNzaWduKHRoaXMubW9k''@;'; put 'put ''ZWwsZC5tb2RlbCk7YnJlYWs7Y2FzZSJmb3JtdWxhIjp0aGlzLm1vZGVsLmZvcm11bGFlPXRoaXMubW9kZWwuZm9ybXVsYWV8fFtdLHRoaXMubW9kZWwuZm9ybXVsYWUucHVzaChkLm1vZGVsKX19fUUuZXhwb3J0cz1mfSx7Ii4uLy4uLy4uLy4uL2RvYy9yYW5nZSI6MTAsIi4uLy4uL2Jhc2Ut''@;'; put 'put ''eGZvcm0iOjMyLCIuLi8uLi9jb21wb3NpdGUteGZvcm0iOjQ4LCIuL2NvbG9yLXNjYWxlLXhmb3JtIjo4NSwiLi9kYXRhYmFyLXhmb3JtIjo4OCwiLi9leHQtbHN0LXJlZi14Zm9ybSI6ODksIi4vZm9ybXVsYS14Zm9ybSI6OTAsIi4vaWNvbi1zZXQteGZvcm0iOjkxfV0sODQ6W2Z1bmN0aW9u''@;'; put 'put ''KHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi8uLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgYntnZXQgdGFnKCl7cmV0dXJuImNmdm8ifXJlbmRlcihhLG8pe2EubGVhZk5vZGUodGhpcy50YWcse3R5cGU6by50eXBlLHZhbDpvLnZhbHVlfSl9cGFyc2VP''@;'; put 'put ''cGVuKGEpe3RoaXMubW9kZWw9e3R5cGU6YS5hdHRyaWJ1dGVzLnR5cGUsdmFsdWU6Yi50b0Zsb2F0VmFsdWUoYS5hdHRyaWJ1dGVzLnZhbCl9fXBhcnNlQ2xvc2UoYSl7cmV0dXJuIGEhPT10aGlzLnRhZ319fSx7Ii4uLy4uL2Jhc2UteGZvcm0iOjMyfV0sODU6W2Z1bmN0aW9uKHMsRSxTKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi8uLi9jb21wb3NpdGUteGZvcm0iKSxhPXMoIi4uLy4uL3N0eWxlL2NvbG9yLXhmb3JtIiksbz1zKCIuL2Nmdm8teGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBie2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17Y2Z2bzp0aGlz''@;'; put 'put ''LmNmdm9YZm9ybT1uZXcgbyxjb2xvcjp0aGlzLmNvbG9yWGZvcm09bmV3IGF9fWdldCB0YWcoKXtyZXR1cm4iY29sb3JTY2FsZSJ9cmVuZGVyKHIsdCl7ci5vcGVuTm9kZSh0aGlzLnRhZyksdC5jZnZvLmZvckVhY2goZT0+e3RoaXMuY2Z2b1hmb3JtLnJlbmRlcihyLGUpfSksdC5jb2xvci5m''@;'; put 'put ''b3JFYWNoKGU9Pnt0aGlzLmNvbG9yWGZvcm0ucmVuZGVyKHIsZSl9KSxyLmNsb3NlTm9kZSgpfWNyZWF0ZU5ld01vZGVsKHIpe3JldHVybntjZnZvOltdLGNvbG9yOltdfX1vblBhcnNlckNsb3NlKHIsdCl7dGhpcy5tb2RlbFtyXS5wdXNoKHQubW9kZWwpfX19LHsiLi4vLi4vY29tcG9zaXRl''@;'; put 'put ''LXhmb3JtIjo0OCwiLi4vLi4vc3R5bGUvY29sb3IteGZvcm0iOjEyOCwiLi9jZnZvLXhmb3JtIjo4NH1dLDg2OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vLi4vY29tcG9zaXRlLXhmb3JtIiksYT1zKCIuL2NmLXJ1bGUteGZvcm0iKTtFLmV4cG9ydHM9Y2xh''@;'; put 'put ''c3MgZXh0ZW5kcyBie2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17Y2ZSdWxlOm5ldyBhfX1nZXQgdGFnKCl7cmV0dXJuImNvbmRpdGlvbmFsRm9ybWF0dGluZyJ9cmVuZGVyKG8scil7ci5ydWxlcy5zb21lKGEuaXNQcmltaXRpdmUpJiYoby5vcGVuTm9kZSh0aGlzLnRhZyx7c3Fy''@;'; put 'put ''ZWY6ci5yZWZ9KSxyLnJ1bGVzLmZvckVhY2godD0+e2EuaXNQcmltaXRpdmUodCkmJih0LnJlZj1yLnJlZix0aGlzLm1hcC5jZlJ1bGUucmVuZGVyKG8sdCkpfSksby5jbG9zZU5vZGUoKSl9Y3JlYXRlTmV3TW9kZWwobyl7bGV0e2F0dHJpYnV0ZXM6cn09bztyZXR1cm57cmVmOnIuc3FyZWYs''@;'; put 'put ''cnVsZXM6W119fW9uUGFyc2VyQ2xvc2UobyxyKXt0aGlzLm1vZGVsLnJ1bGVzLnB1c2goci5tb2RlbCl9fX0seyIuLi8uLi9jb21wb3NpdGUteGZvcm0iOjQ4LCIuL2NmLXJ1bGUteGZvcm0iOjgzfV0sODc6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi8uLi9i''@;'; put 'put ''YXNlLXhmb3JtIiksYT1zKCIuL2NvbmRpdGlvbmFsLWZvcm1hdHRpbmcteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBie2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmNmWGZvcm09bmV3IGF9Z2V0IHRhZygpe3JldHVybiJjb25kaXRpb25hbEZvcm1hdHRpbmcifXJlc2V0KCl7''@;'; put 'put ''dGhpcy5tb2RlbD1bXX1wcmVwYXJlKG8scil7bGV0IHQ9by5yZWR1Y2UoKGUsbCk9Pk1hdGgubWF4KGUsLi4ubC5ydWxlcy5tYXAobj0+bi5wcmlvcml0eXx8MCkpLDEpO28uZm9yRWFjaChlPT57ZS5ydWxlcy5mb3JFYWNoKGw9PntsLnByaW9yaXR5fHwobC5wcmlvcml0eT10KyspLGwuc3R5''@;'; put 'put ''bGUmJihsLmR4ZklkPXIuc3R5bGVzLmFkZER4ZlN0eWxlKGwuc3R5bGUpKX0pfSl9cmVuZGVyKG8scil7ci5mb3JFYWNoKHQ9Pnt0aGlzLmNmWGZvcm0ucmVuZGVyKG8sdCl9KX1wYXJzZU9wZW4obyl7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZU9wZW4obyksITApOiJj''@;'; put 'put ''b25kaXRpb25hbEZvcm1hdHRpbmciPT09by5uYW1lJiYodGhpcy5wYXJzZXI9dGhpcy5jZlhmb3JtLHRoaXMucGFyc2VyLnBhcnNlT3BlbihvKSwhMCl9cGFyc2VUZXh0KG8pe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQobyl9cGFyc2VDbG9zZShvKXtyZXR1cm4hKCF0aGlz''@;'; put 'put ''LnBhcnNlcnx8IXRoaXMucGFyc2VyLnBhcnNlQ2xvc2UobykmJih0aGlzLm1vZGVsLnB1c2godGhpcy5wYXJzZXIubW9kZWwpLHRoaXMucGFyc2VyPXZvaWQgMCwxKSl9cmVjb25jaWxlKG8scil7by5mb3JFYWNoKHQ9Pnt0LnJ1bGVzLmZvckVhY2goZT0+e3ZvaWQgMCE9PWUuZHhmSWQmJihl''@;'; put 'put ''LnN0eWxlPXIuc3R5bGVzLmdldER4ZlN0eWxlKGUuZHhmSWQpLGRlbGV0ZSBlLmR4ZklkKX0pfSl9fX0seyIuLi8uLi9iYXNlLXhmb3JtIjozMiwiLi9jb25kaXRpb25hbC1mb3JtYXR0aW5nLXhmb3JtIjo4Nn1dLDg4OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygi''@;'; put 'put ''Li4vLi4vY29tcG9zaXRlLXhmb3JtIiksYT1zKCIuLi8uLi9zdHlsZS9jb2xvci14Zm9ybSIpLG89cygiLi9jZnZvLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgYntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e2Nmdm86dGhpcy5jZnZvWGZvcm09bmV3IG8sY29sb3I6''@;'; put 'put ''dGhpcy5jb2xvclhmb3JtPW5ldyBhfX1nZXQgdGFnKCl7cmV0dXJuImRhdGFCYXIifXJlbmRlcihyLHQpe3Iub3Blbk5vZGUodGhpcy50YWcpLHQuY2Z2by5mb3JFYWNoKGU9Pnt0aGlzLmNmdm9YZm9ybS5yZW5kZXIocixlKX0pLHRoaXMuY29sb3JYZm9ybS5yZW5kZXIocix0LmNvbG9yKSxy''@;'; put 'put ''LmNsb3NlTm9kZSgpfWNyZWF0ZU5ld01vZGVsKCl7cmV0dXJue2Nmdm86W119fW9uUGFyc2VyQ2xvc2Uocix0KXtzd2l0Y2gocil7Y2FzZSJjZnZvIjp0aGlzLm1vZGVsLmNmdm8ucHVzaCh0Lm1vZGVsKTticmVhaztjYXNlImNvbG9yIjp0aGlzLm1vZGVsLmNvbG9yPXQubW9kZWx9fX19LHsi''@;'; put 'put ''Li4vLi4vY29tcG9zaXRlLXhmb3JtIjo0OCwiLi4vLi4vc3R5bGUvY29sb3IteGZvcm0iOjEyOCwiLi9jZnZvLXhmb3JtIjo4NH1dLDg5OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vLi4vYmFzZS14Zm9ybSIpLGE9cygiLi4vLi4vY29tcG9zaXRlLXhmb3Jt''@;'; put 'put ''Iik7Y2xhc3MgbyBleHRlbmRzIGJ7Z2V0IHRhZygpe3JldHVybiJ4MTQ6aWQifXJlbmRlcihlLGwpe2UubGVhZk5vZGUodGhpcy50YWcsbnVsbCxsKX1wYXJzZU9wZW4oKXt0aGlzLm1vZGVsPSIifXBhcnNlVGV4dChlKXt0aGlzLm1vZGVsKz1lfXBhcnNlQ2xvc2UoZSl7cmV0dXJuIGUhPT10''@;'; put 'put ''aGlzLnRhZ319Y2xhc3MgciBleHRlbmRzIGF7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXsieDE0OmlkIjp0aGlzLmlkWGZvcm09bmV3IG99fWdldCB0YWcoKXtyZXR1cm4iZXh0In1yZW5kZXIoZSxsKXtlLm9wZW5Ob2RlKHRoaXMudGFnLHt1cmk6IntCMDI1RjkzNy1DN0IxLTQ3''@;'; put 'put ''RDMtQjY3Ri1BNjJFRkY2NjZFM0V9IiwieG1sbnM6eDE0IjoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDA5LzkvbWFpbiJ9KSx0aGlzLmlkWGZvcm0ucmVuZGVyKGUsbC54MTRJZCksZS5jbG9zZU5vZGUoKX1jcmVhdGVOZXdNb2RlbCgpe3Jl''@;'; put 'put ''dHVybnt9fW9uUGFyc2VyQ2xvc2UoZSxsKXt0aGlzLm1vZGVsLngxNElkPWwubW9kZWx9fUUuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGF7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtleHQ6bmV3IHJ9fWdldCB0YWcoKXtyZXR1cm4iZXh0THN0In1yZW5kZXIodCxlKXt0Lm9wZW5O''@;'; put 'put ''b2RlKHRoaXMudGFnKSx0aGlzLm1hcC5leHQucmVuZGVyKHQsZSksdC5jbG9zZU5vZGUoKX1jcmVhdGVOZXdNb2RlbCgpe3JldHVybnt9fW9uUGFyc2VyQ2xvc2UodCxlKXtPYmplY3QuYXNzaWduKHRoaXMubW9kZWwsZS5tb2RlbCl9fX0seyIuLi8uLi9iYXNlLXhmb3JtIjozMiwiLi4vLi4v''@;'; put 'put ''Y29tcG9zaXRlLXhmb3JtIjo0OH1dLDkwOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGJ7Z2V0IHRhZygpe3JldHVybiJmb3JtdWxhIn1yZW5kZXIoYSxvKXthLmxlYWZOb2RlKHRoaXMu''@;'; put 'put ''dGFnLG51bGwsbyl9cGFyc2VPcGVuKCl7dGhpcy5tb2RlbD0iIn1wYXJzZVRleHQoYSl7dGhpcy5tb2RlbCs9YX1wYXJzZUNsb3NlKGEpe3JldHVybiBhIT09dGhpcy50YWd9fX0seyIuLi8uLi9iYXNlLXhmb3JtIjozMn1dLDkxOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0''@;'; put 'put ''IGI9cygiLi4vLi4vYmFzZS14Zm9ybSIpLGE9cygiLi4vLi4vY29tcG9zaXRlLXhmb3JtIiksbz1zKCIuL2Nmdm8teGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBhe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17Y2Z2bzp0aGlzLmNmdm9YZm9ybT1uZXcgb319Z2V0IHRh''@;'; put 'put ''Zygpe3JldHVybiJpY29uU2V0In1yZW5kZXIocix0KXtyLm9wZW5Ob2RlKHRoaXMudGFnLHtpY29uU2V0OmIudG9TdHJpbmdBdHRyaWJ1dGUodC5pY29uU2V0LCIzVHJhZmZpY0xpZ2h0cyIpLHJldmVyc2U6Yi50b0Jvb2xBdHRyaWJ1dGUodC5yZXZlcnNlLCExKSxzaG93VmFsdWU6Yi50b0Jv''@;'; put 'put ''b2xBdHRyaWJ1dGUodC5zaG93VmFsdWUsITApfSksdC5jZnZvLmZvckVhY2goZT0+e3RoaXMuY2Z2b1hmb3JtLnJlbmRlcihyLGUpfSksci5jbG9zZU5vZGUoKX1jcmVhdGVOZXdNb2RlbChyKXtsZXR7YXR0cmlidXRlczp0fT1yO3JldHVybntpY29uU2V0OmIudG9TdHJpbmdWYWx1ZSh0Lmlj''@;'; put 'put ''b25TZXQsIjNUcmFmZmljTGlnaHRzIikscmV2ZXJzZTpiLnRvQm9vbFZhbHVlKHQucmV2ZXJzZSksc2hvd1ZhbHVlOmIudG9Cb29sVmFsdWUodC5zaG93VmFsdWUpLGNmdm86W119fW9uUGFyc2VyQ2xvc2Uocix0KXt0aGlzLm1vZGVsW3JdLnB1c2godC5tb2RlbCl9fX0seyIuLi8uLi9iYXNl''@;'; put 'put ''LXhmb3JtIjozMiwiLi4vLi4vY29tcG9zaXRlLXhmb3JtIjo0OCwiLi9jZnZvLXhmb3JtIjo4NH1dLDkyOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vLi4vLi4vdXRpbHMvdXRpbHMiKSxhPXMoIi4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0''@;'; put 'put ''ZW5kcyBhe2dldCB0YWcoKXtyZXR1cm4iY29sIn1wcmVwYXJlKG8scil7Y29uc3QgdD1yLnN0eWxlcy5hZGRTdHlsZU1vZGVsKG8uc3R5bGV8fHt9KTt0JiYoby5zdHlsZUlkPXQpfXJlbmRlcihvLHIpe28ub3Blbk5vZGUoImNvbCIpLG8uYWRkQXR0cmlidXRlKCJtaW4iLHIubWluKSxvLmFk''@;'; put 'put ''ZEF0dHJpYnV0ZSgibWF4IixyLm1heCksci53aWR0aCYmby5hZGRBdHRyaWJ1dGUoIndpZHRoIixyLndpZHRoKSxyLnN0eWxlSWQmJm8uYWRkQXR0cmlidXRlKCJzdHlsZSIsci5zdHlsZUlkKSxyLmhpZGRlbiYmby5hZGRBdHRyaWJ1dGUoImhpZGRlbiIsIjEiKSxyLmJlc3RGaXQmJm8uYWRk''@;'; put 'put ''QXR0cmlidXRlKCJiZXN0Rml0IiwiMSIpLHIub3V0bGluZUxldmVsJiZvLmFkZEF0dHJpYnV0ZSgib3V0bGluZUxldmVsIixyLm91dGxpbmVMZXZlbCksci5jb2xsYXBzZWQmJm8uYWRkQXR0cmlidXRlKCJjb2xsYXBzZWQiLCIxIiksby5hZGRBdHRyaWJ1dGUoImN1c3RvbVdpZHRoIiwiMSIp''@;'; put 'put ''LG8uY2xvc2VOb2RlKCl9cGFyc2VPcGVuKG8pe2lmKCJjb2wiPT09by5uYW1lKXtjb25zdCByPXRoaXMubW9kZWw9e21pbjpwYXJzZUludChvLmF0dHJpYnV0ZXMubWlufHwiMCIsMTApLG1heDpwYXJzZUludChvLmF0dHJpYnV0ZXMubWF4fHwiMCIsMTApLHdpZHRoOnZvaWQgMD09PW8uYXR0''@;'; put 'put ''cmlidXRlcy53aWR0aD92b2lkIDA6cGFyc2VGbG9hdChvLmF0dHJpYnV0ZXMud2lkdGh8fCIwIil9O3JldHVybiBvLmF0dHJpYnV0ZXMuc3R5bGUmJihyLnN0eWxlSWQ9cGFyc2VJbnQoby5hdHRyaWJ1dGVzLnN0eWxlLDEwKSksYi5wYXJzZUJvb2xlYW4oby5hdHRyaWJ1dGVzLmhpZGRlbikm''@;'; put 'put ''JihyLmhpZGRlbj0hMCksYi5wYXJzZUJvb2xlYW4oby5hdHRyaWJ1dGVzLmJlc3RGaXQpJiYoci5iZXN0Rml0PSEwKSxvLmF0dHJpYnV0ZXMub3V0bGluZUxldmVsJiYoci5vdXRsaW5lTGV2ZWw9cGFyc2VJbnQoby5hdHRyaWJ1dGVzLm91dGxpbmVMZXZlbCwxMCkpLGIucGFyc2VCb29sZWFu''@;'; put 'put ''KG8uYXR0cmlidXRlcy5jb2xsYXBzZWQpJiYoci5jb2xsYXBzZWQ9ITApLCEwfXJldHVybiExfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9cmVjb25jaWxlKG8scil7by5zdHlsZUlkJiYoby5zdHlsZT1yLnN0eWxlcy5nZXRTdHlsZU1vZGVsKG8uc3R5bGVJZCkpfX19LHsi''@;'; put 'put ''Li4vLi4vLi4vdXRpbHMvdXRpbHMiOjI3LCIuLi9iYXNlLXhmb3JtIjozMn1dLDkzOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaCIpLGE9cygiLi4vLi4vLi4vdXRpbHMvdXRpbHMiKSxvPXMoIi4uLy4uLy4uL3V0aWxz''@;'; put 'put ''L2NvbC1jYWNoZSIpLHI9cygiLi4vYmFzZS14Zm9ybSIpLHQ9cygiLi4vLi4vLi4vZG9jL3JhbmdlIik7ZnVuY3Rpb24gZShuLGksaCxmKXtjb25zdCB1PWlbaF07dm9pZCAwIT09dT9uW2hdPXU6dm9pZCAwIT09ZiYmKG5baF09Zil9ZnVuY3Rpb24gbChuLGksaCxmKXtjb25zdCB1PWlbaF07''@;'; put 'put ''dm9pZCAwIT09dT9uW2hdPWEucGFyc2VCb29sZWFuKHUpOnZvaWQgMCE9PWYmJihuW2hdPWYpfUUuZXhwb3J0cz1jbGFzcyBleHRlbmRzIHJ7Z2V0IHRhZygpe3JldHVybiJkYXRhVmFsaWRhdGlvbnMifXJlbmRlcihuLGkpe2NvbnN0IGg9ZnVuY3Rpb24oZil7Y29uc3QgdT1iLm1hcChmLCh2''@;'; put 'put ''LF8pPT4oe2FkZHJlc3M6XyxkYXRhVmFsaWRhdGlvbjp2LG1hcmtlZDohMX0pKS5zb3J0KCh2LF8pPT5iLnN0cmNtcCh2LmFkZHJlc3MsXy5hZGRyZXNzKSkscD1iLmtleUJ5KHUsImFkZHJlc3MiKSxkPSh2LF8sQSk9Pntmb3IobGV0IEk9MDtJPF87SSsrKXtjb25zdCBMPW8uZW5jb2RlQWRk''@;'; put 'put ''cmVzcyh2LnJvdytJLEEpO2lmKCFmW0xdfHwhYi5pc0VxdWFsKGZbdi5hZGRyZXNzXSxmW0xdKSlyZXR1cm4hMX1yZXR1cm4hMH07cmV0dXJuIHUubWFwKHY9PntpZighdi5tYXJrZWQpe2NvbnN0IF89by5kZWNvZGVFeCh2LmFkZHJlc3MpO2lmKF8uZGltZW5zaW9ucylyZXR1cm4gcFtfLmRp''@;'; put 'put ''bWVuc2lvbnNdLm1hcmtlZD0hMCx7Li4udi5kYXRhVmFsaWRhdGlvbixzcXJlZjp2LmFkZHJlc3N9O2xldCBBPTEsST1vLmVuY29kZUFkZHJlc3MoXy5yb3crQSxfLmNvbCk7Zm9yKDtmW0ldJiZiLmlzRXF1YWwodi5kYXRhVmFsaWRhdGlvbixmW0ldKTspQSsrLEk9by5lbmNvZGVBZGRyZXNz''@;'; put 'put ''KF8ucm93K0EsXy5jb2wpO2xldCBMPTE7Zm9yKDtkKF8sQSxfLmNvbCtMKTspTCsrO2ZvcihsZXQgTj0wO048QTtOKyspZm9yKGxldCBQPTA7UDxMO1ArKylJPW8uZW5jb2RlQWRkcmVzcyhfLnJvdytOLF8uY29sK1ApLHBbSV0ubWFya2VkPSEwO3JldHVybiBBPjF8fEw+MT97Li4udi5kYXRh''@;'; put 'put ''VmFsaWRhdGlvbixzcXJlZjpgJHt2LmFkZHJlc3N9OiR7by5lbmNvZGVBZGRyZXNzKF8ucm93KyhBLTEpLF8uY29sKyhMLTEpKX1gfTp7Li4udi5kYXRhVmFsaWRhdGlvbixzcXJlZjp2LmFkZHJlc3N9fXJldHVybiBudWxsfSkuZmlsdGVyKEJvb2xlYW4pfShpKTtoLmxlbmd0aCYmKG4ub3Bl''@;'; put 'put ''bk5vZGUoImRhdGFWYWxpZGF0aW9ucyIse2NvdW50OmgubGVuZ3RofSksaC5mb3JFYWNoKGY9PntuLm9wZW5Ob2RlKCJkYXRhVmFsaWRhdGlvbiIpLCJhbnkiIT09Zi50eXBlJiYobi5hZGRBdHRyaWJ1dGUoInR5cGUiLGYudHlwZSksZi5vcGVyYXRvciYmImxpc3QiIT09Zi50eXBlJiYiYmV0''@;'; put 'put ''d2VlbiIhPT1mLm9wZXJhdG9yJiZuLmFkZEF0dHJpYnV0ZSgib3BlcmF0b3IiLGYub3BlcmF0b3IpLGYuYWxsb3dCbGFuayYmbi5hZGRBdHRyaWJ1dGUoImFsbG93QmxhbmsiLCIxIikpLGYuc2hvd0lucHV0TWVzc2FnZSYmbi5hZGRBdHRyaWJ1dGUoInNob3dJbnB1dE1lc3NhZ2UiLCIxIiks''@;'; put 'put ''Zi5wcm9tcHRUaXRsZSYmbi5hZGRBdHRyaWJ1dGUoInByb21wdFRpdGxlIixmLnByb21wdFRpdGxlKSxmLnByb21wdCYmbi5hZGRBdHRyaWJ1dGUoInByb21wdCIsZi5wcm9tcHQpLGYuc2hvd0Vycm9yTWVzc2FnZSYmbi5hZGRBdHRyaWJ1dGUoInNob3dFcnJvck1lc3NhZ2UiLCIxIiksZi5l''@;'; put 'put ''cnJvclN0eWxlJiZuLmFkZEF0dHJpYnV0ZSgiZXJyb3JTdHlsZSIsZi5lcnJvclN0eWxlKSxmLmVycm9yVGl0bGUmJm4uYWRkQXR0cmlidXRlKCJlcnJvclRpdGxlIixmLmVycm9yVGl0bGUpLGYuZXJyb3ImJm4uYWRkQXR0cmlidXRlKCJlcnJvciIsZi5lcnJvciksbi5hZGRBdHRyaWJ1dGUo''@;'; put 'put ''InNxcmVmIixmLnNxcmVmKSwoZi5mb3JtdWxhZXx8W10pLmZvckVhY2goKHUscCk9PntuLm9wZW5Ob2RlKCJmb3JtdWxhIisocCsxKSksbi53cml0ZVRleHQoImRhdGUiPT09Zi50eXBlP2EuZGF0ZVRvRXhjZWwobmV3IERhdGUodSkpOnUpLG4uY2xvc2VOb2RlKCl9KSxuLmNsb3NlTm9kZSgp''@;'; put 'put ''fSksbi5jbG9zZU5vZGUoKSl9cGFyc2VPcGVuKG4pe3N3aXRjaChuLm5hbWUpe2Nhc2UiZGF0YVZhbGlkYXRpb25zIjpyZXR1cm4gdGhpcy5tb2RlbD17fSwhMDtjYXNlImRhdGFWYWxpZGF0aW9uIjp7dGhpcy5fYWRkcmVzcz1uLmF0dHJpYnV0ZXMuc3FyZWY7Y29uc3QgaT17dHlwZTpuLmF0''@;'; put 'put ''dHJpYnV0ZXMudHlwZXx8ImFueSIsZm9ybXVsYWU6W119O3N3aXRjaChuLmF0dHJpYnV0ZXMudHlwZSYmbChpLG4uYXR0cmlidXRlcywiYWxsb3dCbGFuayIpLGwoaSxuLmF0dHJpYnV0ZXMsInNob3dJbnB1dE1lc3NhZ2UiKSxsKGksbi5hdHRyaWJ1dGVzLCJzaG93RXJyb3JNZXNzYWdlIiks''@;'; put 'put ''aS50eXBlKXtjYXNlImFueSI6Y2FzZSJsaXN0IjpjYXNlImN1c3RvbSI6YnJlYWs7ZGVmYXVsdDplKGksbi5hdHRyaWJ1dGVzLCJvcGVyYXRvciIsImJldHdlZW4iKX1yZXR1cm4gZShpLG4uYXR0cmlidXRlcywicHJvbXB0VGl0bGUiKSxlKGksbi5hdHRyaWJ1dGVzLCJwcm9tcHQiKSxlKGks''@;'; put 'put ''bi5hdHRyaWJ1dGVzLCJlcnJvclN0eWxlIiksZShpLG4uYXR0cmlidXRlcywiZXJyb3JUaXRsZSIpLGUoaSxuLmF0dHJpYnV0ZXMsImVycm9yIiksdGhpcy5fZGF0YVZhbGlkYXRpb249aSwhMH1jYXNlImZvcm11bGExIjpjYXNlImZvcm11bGEyIjpyZXR1cm4gdGhpcy5fZm9ybXVsYT1bXSwh''@;'; put 'put ''MDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQobil7dGhpcy5fZm9ybXVsYSYmdGhpcy5fZm9ybXVsYS5wdXNoKG4pfXBhcnNlQ2xvc2Uobil7c3dpdGNoKG4pe2Nhc2UiZGF0YVZhbGlkYXRpb25zIjpyZXR1cm4hMTtjYXNlImRhdGFWYWxpZGF0aW9uIjpyZXR1cm4gdGhpcy5fZGF0YVZh''@;'; put 'put ''bGlkYXRpb24uZm9ybXVsYWUmJnRoaXMuX2RhdGFWYWxpZGF0aW9uLmZvcm11bGFlLmxlbmd0aHx8KGRlbGV0ZSB0aGlzLl9kYXRhVmFsaWRhdGlvbi5mb3JtdWxhZSxkZWxldGUgdGhpcy5fZGF0YVZhbGlkYXRpb24ub3BlcmF0b3IpLCh0aGlzLl9hZGRyZXNzLnNwbGl0KC9ccysvZyl8fFtd''@;'; put 'put ''KS5mb3JFYWNoKGk9PntpLmluY2x1ZGVzKCI6Iik/bmV3IHQoaSkuZm9yRWFjaEFkZHJlc3MoaD0+e3RoaXMubW9kZWxbaF09dGhpcy5fZGF0YVZhbGlkYXRpb259KTp0aGlzLm1vZGVsW2ldPXRoaXMuX2RhdGFWYWxpZGF0aW9ufSksITA7Y2FzZSJmb3JtdWxhMSI6Y2FzZSJmb3JtdWxhMiI6''@;'; put 'put ''e2xldCBpPXRoaXMuX2Zvcm11bGEuam9pbigiIik7c3dpdGNoKHRoaXMuX2RhdGFWYWxpZGF0aW9uLnR5cGUpe2Nhc2Uid2hvbGUiOmNhc2UidGV4dExlbmd0aCI6aT1wYXJzZUludChpLDEwKTticmVhaztjYXNlImRlY2ltYWwiOmk9cGFyc2VGbG9hdChpKTticmVhaztjYXNlImRhdGUiOmk9''@;'; put 'put ''YS5leGNlbFRvRGF0ZShwYXJzZUZsb2F0KGkpKX1yZXR1cm4gdGhpcy5fZGF0YVZhbGlkYXRpb24uZm9ybXVsYWUucHVzaChpKSx0aGlzLl9mb3JtdWxhPXZvaWQgMCwhMH1kZWZhdWx0OnJldHVybiEwfX19fSx7Ii4uLy4uLy4uL2RvYy9yYW5nZSI6MTAsIi4uLy4uLy4uL3V0aWxzL2NvbC1j''@;'; put 'put ''YWNoZSI6MTksIi4uLy4uLy4uL3V0aWxzL3VuZGVyLWRhc2giOjI2LCIuLi8uLi8uLi91dGlscy91dGlscyI6MjcsIi4uL2Jhc2UteGZvcm0iOjMyfV0sOTQ6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4''@;'; put 'put ''dGVuZHMgYntnZXQgdGFnKCl7cmV0dXJuImRpbWVuc2lvbiJ9cmVuZGVyKGEsbyl7byYmYS5sZWFmTm9kZSgiZGltZW5zaW9uIix7cmVmOm99KX1wYXJzZU9wZW4oYSl7cmV0dXJuImRpbWVuc2lvbiI9PT1hLm5hbWUmJih0aGlzLm1vZGVsPWEuYXR0cmlidXRlcy5yZWYsITApfXBhcnNlVGV4''@;'; put 'put ''dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0seyIuLi9iYXNlLXhmb3JtIjozMn1dLDk1OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGJ7Z2V0IHRhZygpe3JldHVybiJkcmF3aW5nIn1y''@;'; put 'put ''ZW5kZXIoYSxvKXtvJiZhLmxlYWZOb2RlKHRoaXMudGFnLHsicjppZCI6by5ySWR9KX1wYXJzZU9wZW4oYSl7cmV0dXJuIGEubmFtZT09PXRoaXMudGFnJiYodGhpcy5tb2RlbD17cklkOmEuYXR0cmlidXRlc1sicjppZCJdfSwhMCl9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4h''@;'; put 'put ''MX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sOTY6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi9jb21wb3NpdGUteGZvcm0iKSxhPXMoIi4vY2YtZXh0L2NvbmRpdGlvbmFsLWZvcm1hdHRpbmdzLWV4dC14Zm9ybSIpO2NsYXNzIG8gZXh0ZW5kcyBie2NvbnN0''@;'; put 'put ''cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17IngxNDpjb25kaXRpb25hbEZvcm1hdHRpbmdzIjp0aGlzLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3M9bmV3IGF9fWdldCB0YWcoKXtyZXR1cm4iZXh0In1oYXNDb250ZW50KHQpe3JldHVybiB0aGlzLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3MuaGFz''@;'; put 'put ''Q29udGVudCh0LmNvbmRpdGlvbmFsRm9ybWF0dGluZ3MpfXByZXBhcmUodCxlKXt0aGlzLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3MucHJlcGFyZSh0LmNvbmRpdGlvbmFsRm9ybWF0dGluZ3MsZSl9cmVuZGVyKHQsZSl7dC5vcGVuTm9kZSgiZXh0Iix7dXJpOiJ7NzhDMEQ5MzEtNjQzNy00MDdk''@;'; put 'put ''LUE4RUUtRjBBQUQ3NTM5RTY1fSIsInhtbG5zOngxNCI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAwOS85L21haW4ifSksdGhpcy5jb25kaXRpb25hbEZvcm1hdHRpbmdzLnJlbmRlcih0LGUuY29uZGl0aW9uYWxGb3JtYXR0aW5ncyksdC5j''@;'; put 'put ''bG9zZU5vZGUoKX1jcmVhdGVOZXdNb2RlbCgpe3JldHVybnt9fW9uUGFyc2VyQ2xvc2UodCxlKXt0aGlzLm1vZGVsW3RdPWUubW9kZWx9fUUuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGJ7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtleHQ6dGhpcy5leHQ9bmV3IG99fWdldCB0YWco''@;'; put 'put ''KXtyZXR1cm4iZXh0THN0In1wcmVwYXJlKHIsdCl7dGhpcy5leHQucHJlcGFyZShyLHQpfWhhc0NvbnRlbnQocil7cmV0dXJuIHRoaXMuZXh0Lmhhc0NvbnRlbnQocil9cmVuZGVyKHIsdCl7dGhpcy5oYXNDb250ZW50KHQpJiYoci5vcGVuTm9kZSgiZXh0THN0IiksdGhpcy5leHQucmVuZGVy''@;'; put 'put ''KHIsdCksci5jbG9zZU5vZGUoKSl9Y3JlYXRlTmV3TW9kZWwoKXtyZXR1cm57fX1vblBhcnNlckNsb3NlKHIsdCl7T2JqZWN0LmFzc2lnbih0aGlzLm1vZGVsLHQubW9kZWwpfX19LHsiLi4vY29tcG9zaXRlLXhmb3JtIjo0OCwiLi9jZi1leHQvY29uZGl0aW9uYWwtZm9ybWF0dGluZ3MtZXh0''@;'; put 'put ''LXhmb3JtIjo3OH1dLDk3OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGJ7Z2V0IHRhZygpe3JldHVybiJoZWFkZXJGb290ZXIifXJlbmRlcihhLG8pe2lmKG8pe2EuYWRkUm9sbGJhY2soKTts''@;'; put 'put ''ZXQgcj0hMTthLm9wZW5Ob2RlKCJoZWFkZXJGb290ZXIiKSxvLmRpZmZlcmVudEZpcnN0JiYoYS5hZGRBdHRyaWJ1dGUoImRpZmZlcmVudEZpcnN0IiwiMSIpLHI9ITApLG8uZGlmZmVyZW50T2RkRXZlbiYmKGEuYWRkQXR0cmlidXRlKCJkaWZmZXJlbnRPZGRFdmVuIiwiMSIpLHI9ITApLG8u''@;'; put 'put ''b2RkSGVhZGVyJiYic3RyaW5nIj09dHlwZW9mIG8ub2RkSGVhZGVyJiYoYS5sZWFmTm9kZSgib2RkSGVhZGVyIixudWxsLG8ub2RkSGVhZGVyKSxyPSEwKSxvLm9kZEZvb3RlciYmInN0cmluZyI9PXR5cGVvZiBvLm9kZEZvb3RlciYmKGEubGVhZk5vZGUoIm9kZEZvb3RlciIsbnVsbCxvLm9k''@;'; put 'put ''ZEZvb3Rlcikscj0hMCksby5ldmVuSGVhZGVyJiYic3RyaW5nIj09dHlwZW9mIG8uZXZlbkhlYWRlciYmKGEubGVhZk5vZGUoImV2ZW5IZWFkZXIiLG51bGwsby5ldmVuSGVhZGVyKSxyPSEwKSxvLmV2ZW5Gb290ZXImJiJzdHJpbmciPT10eXBlb2Ygby5ldmVuRm9vdGVyJiYoYS5sZWFmTm9k''@;'; put 'put ''ZSgiZXZlbkZvb3RlciIsbnVsbCxvLmV2ZW5Gb290ZXIpLHI9ITApLG8uZmlyc3RIZWFkZXImJiJzdHJpbmciPT10eXBlb2Ygby5maXJzdEhlYWRlciYmKGEubGVhZk5vZGUoImZpcnN0SGVhZGVyIixudWxsLG8uZmlyc3RIZWFkZXIpLHI9ITApLG8uZmlyc3RGb290ZXImJiJzdHJpbmciPT10''@;'; put 'put ''eXBlb2Ygby5maXJzdEZvb3RlciYmKGEubGVhZk5vZGUoImZpcnN0Rm9vdGVyIixudWxsLG8uZmlyc3RGb290ZXIpLHI9ITApLHI/KGEuY2xvc2VOb2RlKCksYS5jb21taXQoKSk6YS5yb2xsYmFjaygpfX1wYXJzZU9wZW4oYSl7c3dpdGNoKGEubmFtZSl7Y2FzZSJoZWFkZXJGb290ZXIiOnJl''@;'; put 'put ''dHVybiB0aGlzLm1vZGVsPXt9LGEuYXR0cmlidXRlcy5kaWZmZXJlbnRGaXJzdCYmKHRoaXMubW9kZWwuZGlmZmVyZW50Rmlyc3Q9MT09PXBhcnNlSW50KGEuYXR0cmlidXRlcy5kaWZmZXJlbnRGaXJzdCwwKSksYS5hdHRyaWJ1dGVzLmRpZmZlcmVudE9kZEV2ZW4mJih0aGlzLm1vZGVsLmRp''@;'; put 'put ''ZmZlcmVudE9kZEV2ZW49MT09PXBhcnNlSW50KGEuYXR0cmlidXRlcy5kaWZmZXJlbnRPZGRFdmVuLDApKSwhMDtjYXNlIm9kZEhlYWRlciI6cmV0dXJuIHRoaXMuY3VycmVudE5vZGU9Im9kZEhlYWRlciIsITA7Y2FzZSJvZGRGb290ZXIiOnJldHVybiB0aGlzLmN1cnJlbnROb2RlPSJvZGRG''@;'; put 'put ''b290ZXIiLCEwO2Nhc2UiZXZlbkhlYWRlciI6cmV0dXJuIHRoaXMuY3VycmVudE5vZGU9ImV2ZW5IZWFkZXIiLCEwO2Nhc2UiZXZlbkZvb3RlciI6cmV0dXJuIHRoaXMuY3VycmVudE5vZGU9ImV2ZW5Gb290ZXIiLCEwO2Nhc2UiZmlyc3RIZWFkZXIiOnJldHVybiB0aGlzLmN1cnJlbnROb2Rl''@;'; put 'put ''PSJmaXJzdEhlYWRlciIsITA7Y2FzZSJmaXJzdEZvb3RlciI6cmV0dXJuIHRoaXMuY3VycmVudE5vZGU9ImZpcnN0Rm9vdGVyIiwhMDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQoYSl7c3dpdGNoKHRoaXMuY3VycmVudE5vZGUpe2Nhc2Uib2RkSGVhZGVyIjp0aGlzLm1vZGVsLm9kZEhl''@;'; put 'put ''YWRlcj1hO2JyZWFrO2Nhc2Uib2RkRm9vdGVyIjp0aGlzLm1vZGVsLm9kZEZvb3Rlcj1hO2JyZWFrO2Nhc2UiZXZlbkhlYWRlciI6dGhpcy5tb2RlbC5ldmVuSGVhZGVyPWE7YnJlYWs7Y2FzZSJldmVuRm9vdGVyIjp0aGlzLm1vZGVsLmV2ZW5Gb290ZXI9YTticmVhaztjYXNlImZpcnN0SGVh''@;'; put 'put ''ZGVyIjp0aGlzLm1vZGVsLmZpcnN0SGVhZGVyPWE7YnJlYWs7Y2FzZSJmaXJzdEZvb3RlciI6dGhpcy5tb2RlbC5maXJzdEZvb3Rlcj1hfX1wYXJzZUNsb3NlKCl7c3dpdGNoKHRoaXMuY3VycmVudE5vZGUpe2Nhc2Uib2RkSGVhZGVyIjpjYXNlIm9kZEZvb3RlciI6Y2FzZSJldmVuSGVhZGVy''@;'; put 'put ''IjpjYXNlImV2ZW5Gb290ZXIiOmNhc2UiZmlyc3RIZWFkZXIiOmNhc2UiZmlyc3RGb290ZXIiOnJldHVybiB0aGlzLmN1cnJlbnROb2RlPXZvaWQgMCwhMDtkZWZhdWx0OnJldHVybiExfX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sOTg6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7''@;'; put 'put ''Y29uc3QgYj1zKCIuLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgYntnZXQgdGFnKCl7cmV0dXJuImh5cGVybGluayJ9cmVuZGVyKGEsbyl7dGhpcy5pc0ludGVybmFsTGluayhvKT9hLmxlYWZOb2RlKCJoeXBlcmxpbmsiLHtyZWY6by5hZGRyZXNzLCJyOmlkIjpvLnJJ''@;'; put 'put ''ZCx0b29sdGlwOm8udG9vbHRpcCxsb2NhdGlvbjpvLnRhcmdldH0pOmEubGVhZk5vZGUoImh5cGVybGluayIse3JlZjpvLmFkZHJlc3MsInI6aWQiOm8ucklkLHRvb2x0aXA6by50b29sdGlwfSl9cGFyc2VPcGVuKGEpe3JldHVybiJoeXBlcmxpbmsiPT09YS5uYW1lJiYodGhpcy5tb2RlbD17''@;'; put 'put ''YWRkcmVzczphLmF0dHJpYnV0ZXMucmVmLHJJZDphLmF0dHJpYnV0ZXNbInI6aWQiXSx0b29sdGlwOmEuYXR0cmlidXRlcy50b29sdGlwfSxhLmF0dHJpYnV0ZXMubG9jYXRpb24mJih0aGlzLm1vZGVsLnRhcmdldD1hLmF0dHJpYnV0ZXMubG9jYXRpb24pLCEwKX1wYXJzZVRleHQoKXt9cGFy''@;'; put 'put ''c2VDbG9zZSgpe3JldHVybiExfWlzSW50ZXJuYWxMaW5rKGEpe3JldHVybiBhLnRhcmdldCYmL15bXiFdKyFbYS16QS1aXStbXGRdKyQvLnRlc3QoYS50YXJnZXQpfX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSw5OTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4u''@;'; put 'put ''L2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBie2dldCB0YWcoKXtyZXR1cm4ibWVyZ2VDZWxsIn1yZW5kZXIoYSxvKXthLmxlYWZOb2RlKCJtZXJnZUNlbGwiLHtyZWY6b30pfXBhcnNlT3BlbihhKXtyZXR1cm4ibWVyZ2VDZWxsIj09PWEubmFtZSYmKHRoaXMubW9kZWw9''@;'; put 'put ''YS5hdHRyaWJ1dGVzLnJlZiwhMCl9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sMTAwOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaCIpLGE9cygiLi4vLi4v''@;'; put 'put ''Li4vZG9jL3JhbmdlIiksbz1zKCIuLi8uLi8uLi91dGlscy9jb2wtY2FjaGUiKSxyPXMoIi4uLy4uLy4uL2RvYy9lbnVtcyIpO0UuZXhwb3J0cz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWVyZ2VzPXt9fWFkZCh0KXt0aGlzLm1lcmdlc1t0Lm1hc3Rlcl0/dGhpcy5tZXJnZXNbdC5tYXN0''@;'; put 'put ''ZXJdLmV4cGFuZFRvQWRkcmVzcyh0LmFkZHJlc3MpOnRoaXMubWVyZ2VzW3QubWFzdGVyXT1uZXcgYShgJHt0Lm1hc3Rlcn06JHt0LmFkZHJlc3N9YCl9Z2V0IG1lcmdlQ2VsbHMoKXtyZXR1cm4gYi5tYXAodGhpcy5tZXJnZXMsdD0+dC5yYW5nZSl9cmVjb25jaWxlKHQsZSl7Yi5lYWNoKHQs''@;'; put 'put ''bD0+e2NvbnN0IG49by5kZWNvZGUobCk7Zm9yKGxldCBpPW4udG9wO2k8PW4uYm90dG9tO2krKyl7Y29uc3QgaD1lW2ktMV07Zm9yKGxldCBmPW4ubGVmdDtmPD1uLnJpZ2h0O2YrKyl7Y29uc3QgdT1oLmNlbGxzW2YtMV07dT91LnR5cGU9PT1yLlZhbHVlVHlwZS5NZXJnZSYmKHUubWFzdGVy''@;'; put 'put ''PW4udGwpOmguY2VsbHNbZl09e3R5cGU6ci5WYWx1ZVR5cGUuTnVsbCxhZGRyZXNzOm8uZW5jb2RlQWRkcmVzcyhpLGYpfX19fSl9Z2V0TWFzdGVyQWRkcmVzcyh0KXtjb25zdCBlPXRoaXMuaGFzaFt0XTtyZXR1cm4gZSYmZS50bH19fSx7Ii4uLy4uLy4uL2RvYy9lbnVtcyI6NywiLi4vLi4v''@;'; put 'put ''Li4vZG9jL3JhbmdlIjoxMCwiLi4vLi4vLi4vdXRpbHMvY29sLWNhY2hlIjoxOSwiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaCI6MjZ9XSwxMDE6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi9iYXNlLXhmb3JtIiksYT1vPT52b2lkIDAhPT1vO0UuZXhwb3J0''@;'; put 'put ''cz1jbGFzcyBleHRlbmRzIGJ7Z2V0IHRhZygpe3JldHVybiJvdXRsaW5lUHIifXJlbmRlcihvLHIpe3JldHVybiEoIXJ8fCFhKHIuc3VtbWFyeUJlbG93KSYmIWEoci5zdW1tYXJ5UmlnaHQpfHwoby5sZWFmTm9kZSh0aGlzLnRhZyx7c3VtbWFyeUJlbG93OmEoci5zdW1tYXJ5QmVsb3cpP051''@;'; put 'put ''bWJlcihyLnN1bW1hcnlCZWxvdyk6dm9pZCAwLHN1bW1hcnlSaWdodDphKHIuc3VtbWFyeVJpZ2h0KT9OdW1iZXIoci5zdW1tYXJ5UmlnaHQpOnZvaWQgMH0pLDApKX1wYXJzZU9wZW4obyl7cmV0dXJuIG8ubmFtZT09PXRoaXMudGFnJiYodGhpcy5tb2RlbD17c3VtbWFyeUJlbG93OmEoby5h''@;'; put 'put ''dHRyaWJ1dGVzLnN1bW1hcnlCZWxvdyk/ISFOdW1iZXIoby5hdHRyaWJ1dGVzLnN1bW1hcnlCZWxvdyk6dm9pZCAwLHN1bW1hcnlSaWdodDphKG8uYXR0cmlidXRlcy5zdW1tYXJ5UmlnaHQpPyEhTnVtYmVyKG8uYXR0cmlidXRlcy5zdW1tYXJ5UmlnaHQpOnZvaWQgMH0sITApfXBhcnNlVGV4''@;'; put 'put ''dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0seyIuLi9iYXNlLXhmb3JtIjozMn1dLDEwMjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBie2dldCB0YWcoKXtyZXR1cm4iYnJrIn1yZW5k''@;'; put 'put ''ZXIoYSxvKXthLmxlYWZOb2RlKCJicmsiLG8pfXBhcnNlT3BlbihhKXtyZXR1cm4iYnJrIj09PWEubmFtZSYmKHRoaXMubW9kZWw9YS5hdHRyaWJ1dGVzLnJlZiwhMCl9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sMTAzOltmdW5j''@;'; put 'put ''dGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaCIpLGE9cygiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGF7Z2V0IHRhZygpe3JldHVybiJwYWdlTWFyZ2lucyJ9cmVuZGVyKG8scil7aWYocil7Y29uc3Qg''@;'; put 'put ''dD17bGVmdDpyLmxlZnQscmlnaHQ6ci5yaWdodCx0b3A6ci50b3AsYm90dG9tOnIuYm90dG9tLGhlYWRlcjpyLmhlYWRlcixmb290ZXI6ci5mb290ZXJ9O2Iuc29tZSh0LGU9PnZvaWQgMCE9PWUpJiZvLmxlYWZOb2RlKHRoaXMudGFnLHQpfX1wYXJzZU9wZW4obyl7cmV0dXJuIG8ubmFtZT09''@;'; put 'put ''PXRoaXMudGFnJiYodGhpcy5tb2RlbD17bGVmdDpwYXJzZUZsb2F0KG8uYXR0cmlidXRlcy5sZWZ0fHwuNykscmlnaHQ6cGFyc2VGbG9hdChvLmF0dHJpYnV0ZXMucmlnaHR8fC43KSx0b3A6cGFyc2VGbG9hdChvLmF0dHJpYnV0ZXMudG9wfHwuNzUpLGJvdHRvbTpwYXJzZUZsb2F0KG8uYXR0''@;'; put 'put ''cmlidXRlcy5ib3R0b218fC43NSksaGVhZGVyOnBhcnNlRmxvYXQoby5hdHRyaWJ1dGVzLmhlYWRlcnx8LjMpLGZvb3RlcjpwYXJzZUZsb2F0KG8uYXR0cmlidXRlcy5mb290ZXJ8fC4zKX0sITApfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0seyIuLi8uLi8uLi91dGls''@;'; put 'put ''cy91bmRlci1kYXNoIjoyNiwiLi4vYmFzZS14Zm9ybSI6MzJ9XSwxMDQ6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgYntnZXQgdGFnKCl7cmV0dXJuInBhZ2VTZXRVcFByIn1yZW5kZXIoYSxv''@;'; put 'put ''KXtyZXR1cm4hKCFvfHwhby5maXRUb1BhZ2V8fChhLmxlYWZOb2RlKHRoaXMudGFnLHtmaXRUb1BhZ2U6by5maXRUb1BhZ2U/IjEiOnZvaWQgMH0pLDApKX1wYXJzZU9wZW4oYSl7cmV0dXJuIGEubmFtZT09PXRoaXMudGFnJiYodGhpcy5tb2RlbD17Zml0VG9QYWdlOiIxIj09PWEuYXR0cmli''@;'; put 'put ''dXRlcy5maXRUb1BhZ2V9LCEwKX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSwxMDU6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi8uLi8uLi91dGlscy91bmRlci1kYXNoIiksYT1zKCIuLi9iYXNl''@;'; put 'put ''LXhmb3JtIik7ZnVuY3Rpb24gbyhsKXtyZXR1cm4gbD8iMSI6dm9pZCAwfWZ1bmN0aW9uIHIobCl7aWYoIm92ZXJUaGVuRG93biI9PT1sKXJldHVybiBsfWZ1bmN0aW9uIHQobCl7c3dpdGNoKGwpe2Nhc2UiYXRFbmQiOmNhc2UiYXNEaXNwbHllZCI6cmV0dXJuIGw7ZGVmYXVsdDpyZXR1cm59''@;'; put 'put ''fWZ1bmN0aW9uIGUobCl7c3dpdGNoKGwpe2Nhc2UiZGFzaCI6Y2FzZSJibGFuayI6Y2FzZSJOQSI6cmV0dXJuIGw7ZGVmYXVsdDpyZXR1cm59fUUuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGF7Z2V0IHRhZygpe3JldHVybiJwYWdlU2V0dXAifXJlbmRlcihsLG4pe2lmKG4pe2NvbnN0IGk9e3Bh''@;'; put 'put ''cGVyU2l6ZTpuLnBhcGVyU2l6ZSxvcmllbnRhdGlvbjpuLm9yaWVudGF0aW9uLGhvcml6b250YWxEcGk6bi5ob3Jpem9udGFsRHBpLHZlcnRpY2FsRHBpOm4udmVydGljYWxEcGkscGFnZU9yZGVyOnIobi5wYWdlT3JkZXIpLGJsYWNrQW5kV2hpdGU6byhuLmJsYWNrQW5kV2hpdGUpLGRyYWZ0''@;'; put 'put ''Om8obi5kcmFmdCksY2VsbENvbW1lbnRzOnQobi5jZWxsQ29tbWVudHMpLGVycm9yczplKG4uZXJyb3JzKSxzY2FsZTpuLnNjYWxlLGZpdFRvV2lkdGg6bi5maXRUb1dpZHRoLGZpdFRvSGVpZ2h0Om4uZml0VG9IZWlnaHQsZmlyc3RQYWdlTnVtYmVyOm4uZmlyc3RQYWdlTnVtYmVyLHVzZUZp''@;'; put 'put ''cnN0UGFnZU51bWJlcjpvKG4uZmlyc3RQYWdlTnVtYmVyKSx1c2VQcmludGVyRGVmYXVsdHM6byhuLnVzZVByaW50ZXJEZWZhdWx0cyksY29waWVzOm4uY29waWVzfTtiLnNvbWUoaSxoPT52b2lkIDAhPT1oKSYmbC5sZWFmTm9kZSh0aGlzLnRhZyxpKX19cGFyc2VPcGVuKGwpe3JldHVybiBs''@;'; put 'put ''Lm5hbWU9PT10aGlzLnRhZyYmKHRoaXMubW9kZWw9e3BhcGVyU2l6ZToobj1sLmF0dHJpYnV0ZXMucGFwZXJTaXplLHZvaWQgMCE9PW4/cGFyc2VJbnQobiwxMCk6dm9pZCAwKSxvcmllbnRhdGlvbjpsLmF0dHJpYnV0ZXMub3JpZW50YXRpb258fCJwb3J0cmFpdCIsaG9yaXpvbnRhbERwaTpw''@;'; put 'put ''YXJzZUludChsLmF0dHJpYnV0ZXMuaG9yaXpvbnRhbERwaXx8IjQyOTQ5NjcyOTUiLDEwKSx2ZXJ0aWNhbERwaTpwYXJzZUludChsLmF0dHJpYnV0ZXMudmVydGljYWxEcGl8fCI0Mjk0OTY3Mjk1IiwxMCkscGFnZU9yZGVyOmwuYXR0cmlidXRlcy5wYWdlT3JkZXJ8fCJkb3duVGhlbk92ZXIi''@;'; put 'put ''LGJsYWNrQW5kV2hpdGU6IjEiPT09bC5hdHRyaWJ1dGVzLmJsYWNrQW5kV2hpdGUsZHJhZnQ6IjEiPT09bC5hdHRyaWJ1dGVzLmRyYWZ0LGNlbGxDb21tZW50czpsLmF0dHJpYnV0ZXMuY2VsbENvbW1lbnRzfHwiTm9uZSIsZXJyb3JzOmwuYXR0cmlidXRlcy5lcnJvcnN8fCJkaXNwbGF5ZWQi''@;'; put 'put ''LHNjYWxlOnBhcnNlSW50KGwuYXR0cmlidXRlcy5zY2FsZXx8IjEwMCIsMTApLGZpdFRvV2lkdGg6cGFyc2VJbnQobC5hdHRyaWJ1dGVzLmZpdFRvV2lkdGh8fCIxIiwxMCksZml0VG9IZWlnaHQ6cGFyc2VJbnQobC5hdHRyaWJ1dGVzLmZpdFRvSGVpZ2h0fHwiMSIsMTApLGZpcnN0UGFnZU51''@;'; put 'put ''bWJlcjpwYXJzZUludChsLmF0dHJpYnV0ZXMuZmlyc3RQYWdlTnVtYmVyfHwiMSIsMTApLHVzZUZpcnN0UGFnZU51bWJlcjoiMSI9PT1sLmF0dHJpYnV0ZXMudXNlRmlyc3RQYWdlTnVtYmVyLHVzZVByaW50ZXJEZWZhdWx0czoiMSI9PT1sLmF0dHJpYnV0ZXMudXNlUHJpbnRlckRlZmF1bHRz''@;'; put 'put ''LGNvcGllczpwYXJzZUludChsLmF0dHJpYnV0ZXMuY29waWVzfHwiMSIsMTApfSwhMCk7dmFyIG59cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uLy4uLy4uL3V0aWxzL3VuZGVyLWRhc2giOjI2LCIuLi9iYXNlLXhmb3JtIjozMn1dLDEwNjpbZnVuY3Rpb24ocyxF''@;'; put 'put ''LFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBie2dldCB0YWcoKXtyZXR1cm4icGljdHVyZSJ9cmVuZGVyKGEsbyl7byYmYS5sZWFmTm9kZSh0aGlzLnRhZyx7InI6aWQiOm8ucklkfSl9cGFyc2VPcGVuKGEpe3JldHVy''@;'; put 'put ''biBhLm5hbWU9PT10aGlzLnRhZyYmKHRoaXMubW9kZWw9e3JJZDphLmF0dHJpYnV0ZXNbInI6aWQiXX0sITApfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0seyIuLi9iYXNlLXhmb3JtIjozMn1dLDEwNzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBi''@;'; put 'put ''PXMoIi4uLy4uLy4uL3V0aWxzL3VuZGVyLWRhc2giKSxhPXMoIi4uL2Jhc2UteGZvcm0iKTtmdW5jdGlvbiBvKHIpe3JldHVybiByPyIxIjp2b2lkIDB9RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgYXtnZXQgdGFnKCl7cmV0dXJuInByaW50T3B0aW9ucyJ9cmVuZGVyKHIsdCl7aWYodCl7Y29u''@;'; put 'put ''c3QgZT17aGVhZGluZ3M6byh0LnNob3dSb3dDb2xIZWFkZXJzKSxncmlkTGluZXM6byh0LnNob3dHcmlkTGluZXMpLGhvcml6b250YWxDZW50ZXJlZDpvKHQuaG9yaXpvbnRhbENlbnRlcmVkKSx2ZXJ0aWNhbENlbnRlcmVkOm8odC52ZXJ0aWNhbENlbnRlcmVkKX07Yi5zb21lKGUsbD0+dm9p''@;'; put 'put ''ZCAwIT09bCkmJnIubGVhZk5vZGUodGhpcy50YWcsZSl9fXBhcnNlT3BlbihyKXtyZXR1cm4gci5uYW1lPT09dGhpcy50YWcmJih0aGlzLm1vZGVsPXtzaG93Um93Q29sSGVhZGVyczoiMSI9PT1yLmF0dHJpYnV0ZXMuaGVhZGluZ3Msc2hvd0dyaWRMaW5lczoiMSI9PT1yLmF0dHJpYnV0ZXMu''@;'; put 'put ''Z3JpZExpbmVzLGhvcml6b250YWxDZW50ZXJlZDoiMSI9PT1yLmF0dHJpYnV0ZXMuaG9yaXpvbnRhbENlbnRlcmVkLHZlcnRpY2FsQ2VudGVyZWQ6IjEiPT09ci5hdHRyaWJ1dGVzLnZlcnRpY2FsQ2VudGVyZWR9LCEwKX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHsi''@;'; put 'put ''Li4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaCI6MjYsIi4uL2Jhc2UteGZvcm0iOjMyfV0sMTA4OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi9wYWdlLWJyZWFrcy14Zm9ybSIpLGE9cygiLi4vbGlzdC14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGF7''@;'; put 'put ''Y29uc3RydWN0b3IoKXtzdXBlcih7dGFnOiJyb3dCcmVha3MiLGNvdW50OiEwLGNoaWxkWGZvcm06bmV3IGJ9KX1yZW5kZXIobyxyKXtpZihyJiZyLmxlbmd0aCl7by5vcGVuTm9kZSh0aGlzLnRhZyx0aGlzLiQpLHRoaXMuY291bnQmJihvLmFkZEF0dHJpYnV0ZSh0aGlzLiRjb3VudCxyLmxl''@;'; put 'put ''bmd0aCksby5hZGRBdHRyaWJ1dGUoIm1hbnVhbEJyZWFrQ291bnQiLHIubGVuZ3RoKSk7Y29uc3R7Y2hpbGRYZm9ybTp0fT10aGlzO3IuZm9yRWFjaChlPT57dC5yZW5kZXIobyxlKX0pLG8uY2xvc2VOb2RlKCl9ZWxzZSB0aGlzLmVtcHR5JiZvLmxlYWZOb2RlKHRoaXMudGFnKX19fSx7Ii4u''@;'; put 'put ''L2xpc3QteGZvcm0iOjcxLCIuL3BhZ2UtYnJlYWtzLXhmb3JtIjoxMDJ9XSwxMDk6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi9iYXNlLXhmb3JtIiksYT1zKCIuLi8uLi8uLi91dGlscy91dGlscyIpLG89cygiLi9jZWxsLXhmb3JtIik7RS5leHBvcnRzPWNs''@;'; put 'put ''YXNzIGV4dGVuZHMgYntjb25zdHJ1Y3RvcihyKXtzdXBlcigpLHRoaXMubWF4SXRlbXM9ciYmci5tYXhJdGVtcyx0aGlzLm1hcD17YzpuZXcgb319Z2V0IHRhZygpe3JldHVybiJyb3cifXByZXBhcmUocix0KXtjb25zdCBlPXQuc3R5bGVzLmFkZFN0eWxlTW9kZWwoci5zdHlsZSk7ZSYmKHIu''@;'; put 'put ''c3R5bGVJZD1lKTtjb25zdCBsPXRoaXMubWFwLmM7ci5jZWxscy5mb3JFYWNoKG49PntsLnByZXBhcmUobix0KX0pfXJlbmRlcihyLHQsZSl7ci5vcGVuTm9kZSgicm93Iiksci5hZGRBdHRyaWJ1dGUoInIiLHQubnVtYmVyKSx0LmhlaWdodCYmKHIuYWRkQXR0cmlidXRlKCJodCIsdC5oZWln''@;'; put 'put ''aHQpLHIuYWRkQXR0cmlidXRlKCJjdXN0b21IZWlnaHQiLCIxIikpLHQuaGlkZGVuJiZyLmFkZEF0dHJpYnV0ZSgiaGlkZGVuIiwiMSIpLHQubWluPjAmJnQubWF4PjAmJnQubWluPD10Lm1heCYmci5hZGRBdHRyaWJ1dGUoInNwYW5zIixgJHt0Lm1pbn06JHt0Lm1heH1gKSx0LnN0eWxlSWQm''@;'; put 'put ''JihyLmFkZEF0dHJpYnV0ZSgicyIsdC5zdHlsZUlkKSxyLmFkZEF0dHJpYnV0ZSgiY3VzdG9tRm9ybWF0IiwiMSIpKSxyLmFkZEF0dHJpYnV0ZSgieDE0YWM6ZHlEZXNjZW50IiwiMC4yNSIpLHQub3V0bGluZUxldmVsJiZyLmFkZEF0dHJpYnV0ZSgib3V0bGluZUxldmVsIix0Lm91dGxpbmVM''@;'; put 'put ''ZXZlbCksdC5jb2xsYXBzZWQmJnIuYWRkQXR0cmlidXRlKCJjb2xsYXBzZWQiLCIxIik7Y29uc3QgbD10aGlzLm1hcC5jO3QuY2VsbHMuZm9yRWFjaChuPT57bC5yZW5kZXIocixuLGUpfSksci5jbG9zZU5vZGUoKX1wYXJzZU9wZW4ocil7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFy''@;'; put 'put ''c2VyLnBhcnNlT3BlbihyKSwhMDtpZigicm93Ij09PXIubmFtZSl7dGhpcy5udW1Sb3dzU2Vlbis9MTtjb25zdCB0PXIuYXR0cmlidXRlcy5zcGFucz9yLmF0dHJpYnV0ZXMuc3BhbnMuc3BsaXQoIjoiKS5tYXAobD0+cGFyc2VJbnQobCwxMCkpOlt2b2lkIDAsdm9pZCAwXSxlPXRoaXMubW9k''@;'; put 'put ''ZWw9e251bWJlcjpwYXJzZUludChyLmF0dHJpYnV0ZXMuciwxMCksbWluOnRbMF0sbWF4OnRbMV0sY2VsbHM6W119O3JldHVybiByLmF0dHJpYnV0ZXMucyYmKGUuc3R5bGVJZD1wYXJzZUludChyLmF0dHJpYnV0ZXMucywxMCkpLGEucGFyc2VCb29sZWFuKHIuYXR0cmlidXRlcy5oaWRkZW4p''@;'; put 'put ''JiYoZS5oaWRkZW49ITApLGEucGFyc2VCb29sZWFuKHIuYXR0cmlidXRlcy5iZXN0Rml0KSYmKGUuYmVzdEZpdD0hMCksci5hdHRyaWJ1dGVzLmh0JiYoZS5oZWlnaHQ9cGFyc2VGbG9hdChyLmF0dHJpYnV0ZXMuaHQpKSxyLmF0dHJpYnV0ZXMub3V0bGluZUxldmVsJiYoZS5vdXRsaW5lTGV2''@;'; put 'put ''ZWw9cGFyc2VJbnQoci5hdHRyaWJ1dGVzLm91dGxpbmVMZXZlbCwxMCkpLGEucGFyc2VCb29sZWFuKHIuYXR0cmlidXRlcy5jb2xsYXBzZWQpJiYoZS5jb2xsYXBzZWQ9ITApLCEwfXJldHVybiB0aGlzLnBhcnNlcj10aGlzLm1hcFtyLm5hbWVdLCEhdGhpcy5wYXJzZXImJih0aGlzLnBhcnNl''@;'; put 'put ''ci5wYXJzZU9wZW4ociksITApfXBhcnNlVGV4dChyKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KHIpfXBhcnNlQ2xvc2Uocil7aWYodGhpcy5wYXJzZXIpe2lmKCF0aGlzLnBhcnNlci5wYXJzZUNsb3NlKHIpKXtpZih0aGlzLm1vZGVsLmNlbGxzLnB1c2godGhpcy5wYXJz''@;'; put 'put ''ZXIubW9kZWwpLHRoaXMubWF4SXRlbXMmJnRoaXMubW9kZWwuY2VsbHMubGVuZ3RoPnRoaXMubWF4SXRlbXMpdGhyb3cgbmV3IEVycm9yKGBNYXggY29sdW1uIGNvdW50ICgke3RoaXMubWF4SXRlbXN9KSBleGNlZWRlZGApO3RoaXMucGFyc2VyPXZvaWQgMH1yZXR1cm4hMH1yZXR1cm4hMX1y''@;'; put 'put ''ZWNvbmNpbGUocix0KXtyLnN0eWxlPXIuc3R5bGVJZD90LnN0eWxlcy5nZXRTdHlsZU1vZGVsKHIuc3R5bGVJZCk6e30sdm9pZCAwIT09ci5zdHlsZUlkJiYoci5zdHlsZUlkPXZvaWQgMCk7Y29uc3QgZT10aGlzLm1hcC5jO3IuY2VsbHMuZm9yRWFjaChsPT57ZS5yZWNvbmNpbGUobCx0KX0p''@;'; put 'put ''fX19LHsiLi4vLi4vLi4vdXRpbHMvdXRpbHMiOjI3LCIuLi9iYXNlLXhmb3JtIjozMiwiLi9jZWxsLXhmb3JtIjo3M31dLDExMDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uLy4uLy4uL3V0aWxzL3VuZGVyLWRhc2giKSxhPXMoIi4uL2Jhc2UteGZvcm0iKTtF''@;'; put 'put ''LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBhe2dldCB0YWcoKXtyZXR1cm4ic2hlZXRGb3JtYXRQciJ9cmVuZGVyKG8scil7aWYocil7Y29uc3QgdD17ZGVmYXVsdFJvd0hlaWdodDpyLmRlZmF1bHRSb3dIZWlnaHQsb3V0bGluZUxldmVsUm93OnIub3V0bGluZUxldmVsUm93LG91dGxpbmVMZXZl''@;'; put 'put ''bENvbDpyLm91dGxpbmVMZXZlbENvbCwieDE0YWM6ZHlEZXNjZW50IjpyLmR5RGVzY2VudH07ci5kZWZhdWx0Q29sV2lkdGgmJih0LmRlZmF1bHRDb2xXaWR0aD1yLmRlZmF1bHRDb2xXaWR0aCksci5kZWZhdWx0Um93SGVpZ2h0JiYxNT09PXIuZGVmYXVsdFJvd0hlaWdodHx8KHQuY3VzdG9t''@;'; put 'put ''SGVpZ2h0PSIxIiksYi5zb21lKHQsZT0+dm9pZCAwIT09ZSkmJm8ubGVhZk5vZGUoInNoZWV0Rm9ybWF0UHIiLHQpfX1wYXJzZU9wZW4obyl7cmV0dXJuInNoZWV0Rm9ybWF0UHIiPT09by5uYW1lJiYodGhpcy5tb2RlbD17ZGVmYXVsdFJvd0hlaWdodDpwYXJzZUZsb2F0KG8uYXR0cmlidXRl''@;'; put 'put ''cy5kZWZhdWx0Um93SGVpZ2h0fHwiMCIpLGR5RGVzY2VudDpwYXJzZUZsb2F0KG8uYXR0cmlidXRlc1sieDE0YWM6ZHlEZXNjZW50Il18fCIwIiksb3V0bGluZUxldmVsUm93OnBhcnNlSW50KG8uYXR0cmlidXRlcy5vdXRsaW5lTGV2ZWxSb3d8fCIwIiwxMCksb3V0bGluZUxldmVsQ29sOnBh''@;'; put 'put ''cnNlSW50KG8uYXR0cmlidXRlcy5vdXRsaW5lTGV2ZWxDb2x8fCIwIiwxMCl9LG8uYXR0cmlidXRlcy5kZWZhdWx0Q29sV2lkdGgmJih0aGlzLm1vZGVsLmRlZmF1bHRDb2xXaWR0aD1wYXJzZUZsb2F0KG8uYXR0cmlidXRlcy5kZWZhdWx0Q29sV2lkdGgpKSwhMCl9cGFyc2VUZXh0KCl7fXBh''@;'; put 'put ''cnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uLy4uLy4uL3V0aWxzL3VuZGVyLWRhc2giOjI2LCIuLi9iYXNlLXhmb3JtIjozMn1dLDExMTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uL2Jhc2UteGZvcm0iKSxhPXMoIi4uL3N0eWxlL2NvbG9yLXhmb3JtIiks''@;'; put 'put ''bz1zKCIuL3BhZ2Utc2V0dXAtcHJvcGVydGllcy14Zm9ybSIpLHI9cygiLi9vdXRsaW5lLXByb3BlcnRpZXMteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBie2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17dGFiQ29sb3I6bmV3IGEoInRhYkNvbG9yIikscGFnZVNldFVw''@;'; put 'put ''UHI6bmV3IG8sb3V0bGluZVByOm5ldyByfX1nZXQgdGFnKCl7cmV0dXJuInNoZWV0UHIifXJlbmRlcih0LGUpe2lmKGUpe3QuYWRkUm9sbGJhY2soKSx0Lm9wZW5Ob2RlKCJzaGVldFByIik7bGV0IGw9ITE7bD10aGlzLm1hcC50YWJDb2xvci5yZW5kZXIodCxlLnRhYkNvbG9yKXx8bCxsPXRo''@;'; put 'put ''aXMubWFwLnBhZ2VTZXRVcFByLnJlbmRlcih0LGUucGFnZVNldHVwKXx8bCxsPXRoaXMubWFwLm91dGxpbmVQci5yZW5kZXIodCxlLm91dGxpbmVQcm9wZXJ0aWVzKXx8bCxsPyh0LmNsb3NlTm9kZSgpLHQuY29tbWl0KCkpOnQucm9sbGJhY2soKX19cGFyc2VPcGVuKHQpe3JldHVybiB0aGlz''@;'; put 'put ''LnBhcnNlcj8odGhpcy5wYXJzZXIucGFyc2VPcGVuKHQpLCEwKTp0Lm5hbWU9PT10aGlzLnRhZz8odGhpcy5yZXNldCgpLCEwKTohIXRoaXMubWFwW3QubmFtZV0mJih0aGlzLnBhcnNlcj10aGlzLm1hcFt0Lm5hbWVdLHRoaXMucGFyc2VyLnBhcnNlT3Blbih0KSwhMCl9cGFyc2VUZXh0KHQp''@;'; put 'put ''e3JldHVybiEhdGhpcy5wYXJzZXImJih0aGlzLnBhcnNlci5wYXJzZVRleHQodCksITApfXBhcnNlQ2xvc2UodCl7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZUNsb3NlKHQpfHwodGhpcy5wYXJzZXI9dm9pZCAwKSwhMCk6KHRoaXMubWFwLnRhYkNvbG9yLm1vZGVsfHx0''@;'; put 'put ''aGlzLm1hcC5wYWdlU2V0VXBQci5tb2RlbHx8dGhpcy5tYXAub3V0bGluZVByLm1vZGVsPyh0aGlzLm1vZGVsPXt9LHRoaXMubWFwLnRhYkNvbG9yLm1vZGVsJiYodGhpcy5tb2RlbC50YWJDb2xvcj10aGlzLm1hcC50YWJDb2xvci5tb2RlbCksdGhpcy5tYXAucGFnZVNldFVwUHIubW9kZWwm''@;'; put 'put ''Jih0aGlzLm1vZGVsLnBhZ2VTZXR1cD10aGlzLm1hcC5wYWdlU2V0VXBQci5tb2RlbCksdGhpcy5tYXAub3V0bGluZVByLm1vZGVsJiYodGhpcy5tb2RlbC5vdXRsaW5lUHJvcGVydGllcz10aGlzLm1hcC5vdXRsaW5lUHIubW9kZWwpKTp0aGlzLm1vZGVsPW51bGwsITEpfX19LHsiLi4vYmFz''@;'; put 'put ''ZS14Zm9ybSI6MzIsIi4uL3N0eWxlL2NvbG9yLXhmb3JtIjoxMjgsIi4vb3V0bGluZS1wcm9wZXJ0aWVzLXhmb3JtIjoxMDEsIi4vcGFnZS1zZXR1cC1wcm9wZXJ0aWVzLXhmb3JtIjoxMDR9XSwxMTI6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi8uLi8uLi91''@;'; put 'put ''dGlscy91bmRlci1kYXNoIiksYT1zKCIuLi9iYXNlLXhmb3JtIik7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0P2U6dm9pZCAwfWZ1bmN0aW9uIHIodCxlKXtyZXR1cm4gdD09PWV8fHZvaWQgMH1FLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBhe2dldCB0YWcoKXtyZXR1cm4ic2hlZXRQcm90ZWN0''@;'; put 'put ''aW9uIn1yZW5kZXIodCxlKXtpZihlKXtjb25zdCBsPXtzaGVldDpvKGUuc2hlZXQsIjEiKSxzZWxlY3RMb2NrZWRDZWxsczohMT09PWUuc2VsZWN0TG9ja2VkQ2VsbHM/IjEiOnZvaWQgMCxzZWxlY3RVbmxvY2tlZENlbGxzOiExPT09ZS5zZWxlY3RVbmxvY2tlZENlbGxzPyIxIjp2b2lkIDAs''@;'; put 'put ''Zm9ybWF0Q2VsbHM6byhlLmZvcm1hdENlbGxzLCIwIiksZm9ybWF0Q29sdW1uczpvKGUuZm9ybWF0Q29sdW1ucywiMCIpLGZvcm1hdFJvd3M6byhlLmZvcm1hdFJvd3MsIjAiKSxpbnNlcnRDb2x1bW5zOm8oZS5pbnNlcnRDb2x1bW5zLCIwIiksaW5zZXJ0Um93czpvKGUuaW5zZXJ0Um93cywi''@;'; put 'put ''MCIpLGluc2VydEh5cGVybGlua3M6byhlLmluc2VydEh5cGVybGlua3MsIjAiKSxkZWxldGVDb2x1bW5zOm8oZS5kZWxldGVDb2x1bW5zLCIwIiksZGVsZXRlUm93czpvKGUuZGVsZXRlUm93cywiMCIpLHNvcnQ6byhlLnNvcnQsIjAiKSxhdXRvRmlsdGVyOm8oZS5hdXRvRmlsdGVyLCIwIiks''@;'; put 'put ''cGl2b3RUYWJsZXM6byhlLnBpdm90VGFibGVzLCIwIil9O2Uuc2hlZXQmJihsLmFsZ29yaXRobU5hbWU9ZS5hbGdvcml0aG1OYW1lLGwuaGFzaFZhbHVlPWUuaGFzaFZhbHVlLGwuc2FsdFZhbHVlPWUuc2FsdFZhbHVlLGwuc3BpbkNvdW50PWUuc3BpbkNvdW50LGwub2JqZWN0cz1vKCExPT09''@;'; put 'put ''ZS5vYmplY3RzLCIxIiksbC5zY2VuYXJpb3M9byghMT09PWUuc2NlbmFyaW9zLCIxIikpLGIuc29tZShsLG49PnZvaWQgMCE9PW4pJiZ0LmxlYWZOb2RlKHRoaXMudGFnLGwpfX1wYXJzZU9wZW4odCl7cmV0dXJuIHQubmFtZT09PXRoaXMudGFnJiYodGhpcy5tb2RlbD17c2hlZXQ6cih0LmF0''@;'; put 'put ''dHJpYnV0ZXMuc2hlZXQsIjEiKSxvYmplY3RzOiIxIiE9PXQuYXR0cmlidXRlcy5vYmplY3RzJiZ2b2lkIDAsc2NlbmFyaW9zOiIxIiE9PXQuYXR0cmlidXRlcy5zY2VuYXJpb3MmJnZvaWQgMCxzZWxlY3RMb2NrZWRDZWxsczoiMSIhPT10LmF0dHJpYnV0ZXMuc2VsZWN0TG9ja2VkQ2VsbHMm''@;'; put 'put ''JnZvaWQgMCxzZWxlY3RVbmxvY2tlZENlbGxzOiIxIiE9PXQuYXR0cmlidXRlcy5zZWxlY3RVbmxvY2tlZENlbGxzJiZ2b2lkIDAsZm9ybWF0Q2VsbHM6cih0LmF0dHJpYnV0ZXMuZm9ybWF0Q2VsbHMsIjAiKSxmb3JtYXRDb2x1bW5zOnIodC5hdHRyaWJ1dGVzLmZvcm1hdENvbHVtbnMsIjAi''@;'; put 'put ''KSxmb3JtYXRSb3dzOnIodC5hdHRyaWJ1dGVzLmZvcm1hdFJvd3MsIjAiKSxpbnNlcnRDb2x1bW5zOnIodC5hdHRyaWJ1dGVzLmluc2VydENvbHVtbnMsIjAiKSxpbnNlcnRSb3dzOnIodC5hdHRyaWJ1dGVzLmluc2VydFJvd3MsIjAiKSxpbnNlcnRIeXBlcmxpbmtzOnIodC5hdHRyaWJ1dGVz''@;'; put 'put ''Lmluc2VydEh5cGVybGlua3MsIjAiKSxkZWxldGVDb2x1bW5zOnIodC5hdHRyaWJ1dGVzLmRlbGV0ZUNvbHVtbnMsIjAiKSxkZWxldGVSb3dzOnIodC5hdHRyaWJ1dGVzLmRlbGV0ZVJvd3MsIjAiKSxzb3J0OnIodC5hdHRyaWJ1dGVzLnNvcnQsIjAiKSxhdXRvRmlsdGVyOnIodC5hdHRyaWJ1''@;'; put 'put ''dGVzLmF1dG9GaWx0ZXIsIjAiKSxwaXZvdFRhYmxlczpyKHQuYXR0cmlidXRlcy5waXZvdFRhYmxlcywiMCIpfSx0LmF0dHJpYnV0ZXMuYWxnb3JpdGhtTmFtZSYmKHRoaXMubW9kZWwuYWxnb3JpdGhtTmFtZT10LmF0dHJpYnV0ZXMuYWxnb3JpdGhtTmFtZSx0aGlzLm1vZGVsLmhhc2hWYWx1''@;'; put 'put ''ZT10LmF0dHJpYnV0ZXMuaGFzaFZhbHVlLHRoaXMubW9kZWwuc2FsdFZhbHVlPXQuYXR0cmlidXRlcy5zYWx0VmFsdWUsdGhpcy5tb2RlbC5zcGluQ291bnQ9cGFyc2VJbnQodC5hdHRyaWJ1dGVzLnNwaW5Db3VudCwxMCkpLCEwKX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiEx''@;'; put 'put ''fX19LHsiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaCI6MjYsIi4uL2Jhc2UteGZvcm0iOjMyfV0sMTEzOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vLi4vLi4vdXRpbHMvY29sLWNhY2hlIiksYT1zKCIuLi9iYXNlLXhmb3JtIiksbz17ZnJvemVuOiJmcm96''@;'; put 'put ''ZW4iLGZyb3plblNwbGl0OiJmcm96ZW4iLHNwbGl0OiJzcGxpdCJ9O0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGF7Z2V0IHRhZygpe3JldHVybiJzaGVldFZpZXcifXByZXBhcmUocil7c3dpdGNoKHIuc3RhdGUpe2Nhc2UiZnJvemVuIjpjYXNlInNwbGl0IjpicmVhaztkZWZhdWx0OnIuc3Rh''@;'; put 'put ''dGU9Im5vcm1hbCJ9fXJlbmRlcihyLHQpe3Iub3Blbk5vZGUoInNoZWV0VmlldyIse3dvcmtib29rVmlld0lkOnQud29ya2Jvb2tWaWV3SWR8fDB9KTtjb25zdCBlPWZ1bmN0aW9uKGYsdSxwKXtwJiZyLmFkZEF0dHJpYnV0ZShmLHUpfTtsZXQgbCxuLGksaDtzd2l0Y2goZSgicmlnaHRUb0xl''@;'; put 'put ''ZnQiLCIxIiwhMD09PXQucmlnaHRUb0xlZnQpLGUoInRhYlNlbGVjdGVkIiwiMSIsdC50YWJTZWxlY3RlZCksZSgic2hvd1J1bGVyIiwiMCIsITE9PT10LnNob3dSdWxlciksZSgic2hvd1Jvd0NvbEhlYWRlcnMiLCIwIiwhMT09PXQuc2hvd1Jvd0NvbEhlYWRlcnMpLGUoInNob3dHcmlkTGlu''@;'; put 'put ''ZXMiLCIwIiwhMT09PXQuc2hvd0dyaWRMaW5lcyksZSgiem9vbVNjYWxlIix0Lnpvb21TY2FsZSx0Lnpvb21TY2FsZSksZSgiem9vbVNjYWxlTm9ybWFsIix0Lnpvb21TY2FsZU5vcm1hbCx0Lnpvb21TY2FsZU5vcm1hbCksZSgidmlldyIsdC5zdHlsZSx0LnN0eWxlKSx0LnN0YXRlKXtjYXNl''@;'; put 'put ''ImZyb3plbiI6bj10LnhTcGxpdHx8MCxpPXQueVNwbGl0fHwwLGw9dC50b3BMZWZ0Q2VsbHx8Yi5nZXRBZGRyZXNzKGkrMSxuKzEpLmFkZHJlc3MsaD0odC54U3BsaXQmJnQueVNwbGl0PyJib3R0b21SaWdodCI6dC54U3BsaXQmJiJ0b3BSaWdodCIpfHwiYm90dG9tTGVmdCIsci5sZWFmTm9k''@;'; put 'put ''ZSgicGFuZSIse3hTcGxpdDp0LnhTcGxpdHx8dm9pZCAwLHlTcGxpdDp0LnlTcGxpdHx8dm9pZCAwLHRvcExlZnRDZWxsOmwsYWN0aXZlUGFuZTpoLHN0YXRlOiJmcm96ZW4ifSksci5sZWFmTm9kZSgic2VsZWN0aW9uIix7cGFuZTpoLGFjdGl2ZUNlbGw6dC5hY3RpdmVDZWxsLHNxcmVmOnQu''@;'; put 'put ''YWN0aXZlQ2VsbH0pO2JyZWFrO2Nhc2Uic3BsaXQiOiJ0b3BMZWZ0Ij09PXQuYWN0aXZlUGFuZSYmKHQuYWN0aXZlUGFuZT12b2lkIDApLHIubGVhZk5vZGUoInBhbmUiLHt4U3BsaXQ6dC54U3BsaXR8fHZvaWQgMCx5U3BsaXQ6dC55U3BsaXR8fHZvaWQgMCx0b3BMZWZ0Q2VsbDp0LnRvcExl''@;'; put 'put ''ZnRDZWxsLGFjdGl2ZVBhbmU6dC5hY3RpdmVQYW5lfSksci5sZWFmTm9kZSgic2VsZWN0aW9uIix7cGFuZTp0LmFjdGl2ZVBhbmUsYWN0aXZlQ2VsbDp0LmFjdGl2ZUNlbGwsc3FyZWY6dC5hY3RpdmVDZWxsfSk7YnJlYWs7Y2FzZSJub3JtYWwiOnQuYWN0aXZlQ2VsbCYmci5sZWFmTm9kZSgi''@;'; put 'put ''c2VsZWN0aW9uIix7YWN0aXZlQ2VsbDp0LmFjdGl2ZUNlbGwsc3FyZWY6dC5hY3RpdmVDZWxsfSl9ci5jbG9zZU5vZGUoKX1wYXJzZU9wZW4ocil7c3dpdGNoKHIubmFtZSl7Y2FzZSJzaGVldFZpZXciOnJldHVybiB0aGlzLnNoZWV0Vmlldz17d29ya2Jvb2tWaWV3SWQ6cGFyc2VJbnQoci5h''@;'; put 'put ''dHRyaWJ1dGVzLndvcmtib29rVmlld0lkLDEwKSxyaWdodFRvTGVmdDoiMSI9PT1yLmF0dHJpYnV0ZXMucmlnaHRUb0xlZnQsdGFiU2VsZWN0ZWQ6IjEiPT09ci5hdHRyaWJ1dGVzLnRhYlNlbGVjdGVkLHNob3dSdWxlcjoiMCIhPT1yLmF0dHJpYnV0ZXMuc2hvd1J1bGVyLHNob3dSb3dDb2xI''@;'; put 'put ''ZWFkZXJzOiIwIiE9PXIuYXR0cmlidXRlcy5zaG93Um93Q29sSGVhZGVycyxzaG93R3JpZExpbmVzOiIwIiE9PXIuYXR0cmlidXRlcy5zaG93R3JpZExpbmVzLHpvb21TY2FsZTpwYXJzZUludChyLmF0dHJpYnV0ZXMuem9vbVNjYWxlfHwiMTAwIiwxMCksem9vbVNjYWxlTm9ybWFsOnBhcnNl''@;'; put 'put ''SW50KHIuYXR0cmlidXRlcy56b29tU2NhbGVOb3JtYWx8fCIxMDAiLDEwKSxzdHlsZTpyLmF0dHJpYnV0ZXMudmlld30sdGhpcy5wYW5lPXZvaWQgMCx0aGlzLnNlbGVjdGlvbnM9e30sITA7Y2FzZSJwYW5lIjpyZXR1cm4gdGhpcy5wYW5lPXt4U3BsaXQ6cGFyc2VJbnQoci5hdHRyaWJ1dGVz''@;'; put 'put ''LnhTcGxpdHx8IjAiLDEwKSx5U3BsaXQ6cGFyc2VJbnQoci5hdHRyaWJ1dGVzLnlTcGxpdHx8IjAiLDEwKSx0b3BMZWZ0Q2VsbDpyLmF0dHJpYnV0ZXMudG9wTGVmdENlbGwsYWN0aXZlUGFuZTpyLmF0dHJpYnV0ZXMuYWN0aXZlUGFuZXx8InRvcExlZnQiLHN0YXRlOnIuYXR0cmlidXRlcy5z''@;'; put 'put ''dGF0ZX0sITA7Y2FzZSJzZWxlY3Rpb24iOntjb25zdCB0PXIuYXR0cmlidXRlcy5wYW5lfHwidG9wTGVmdCI7cmV0dXJuIHRoaXMuc2VsZWN0aW9uc1t0XT17cGFuZTp0LGFjdGl2ZUNlbGw6ci5hdHRyaWJ1dGVzLmFjdGl2ZUNlbGx9LCEwfWRlZmF1bHQ6cmV0dXJuITF9fXBhcnNlVGV4dCgp''@;'; put 'put ''e31wYXJzZUNsb3NlKHIpe2xldCB0LGU7cmV0dXJuInNoZWV0VmlldyIhPT1yfHwodGhpcy5zaGVldFZpZXcmJnRoaXMucGFuZT8odD10aGlzLm1vZGVsPXt3b3JrYm9va1ZpZXdJZDp0aGlzLnNoZWV0Vmlldy53b3JrYm9va1ZpZXdJZCxyaWdodFRvTGVmdDp0aGlzLnNoZWV0Vmlldy5yaWdo''@;'; put 'put ''dFRvTGVmdCxzdGF0ZTpvW3RoaXMucGFuZS5zdGF0ZV18fCJzcGxpdCIseFNwbGl0OnRoaXMucGFuZS54U3BsaXQseVNwbGl0OnRoaXMucGFuZS55U3BsaXQsdG9wTGVmdENlbGw6dGhpcy5wYW5lLnRvcExlZnRDZWxsLHNob3dSdWxlcjp0aGlzLnNoZWV0Vmlldy5zaG93UnVsZXIsc2hvd1Jv''@;'; put 'put ''d0NvbEhlYWRlcnM6dGhpcy5zaGVldFZpZXcuc2hvd1Jvd0NvbEhlYWRlcnMsc2hvd0dyaWRMaW5lczp0aGlzLnNoZWV0Vmlldy5zaG93R3JpZExpbmVzLHpvb21TY2FsZTp0aGlzLnNoZWV0Vmlldy56b29tU2NhbGUsem9vbVNjYWxlTm9ybWFsOnRoaXMuc2hlZXRWaWV3Lnpvb21TY2FsZU5v''@;'; put 'put ''cm1hbH0sInNwbGl0Ij09PXRoaXMubW9kZWwuc3RhdGUmJih0LmFjdGl2ZVBhbmU9dGhpcy5wYW5lLmFjdGl2ZVBhbmUpLGU9dGhpcy5zZWxlY3Rpb25zW3RoaXMucGFuZS5hY3RpdmVQYW5lXSxlJiZlLmFjdGl2ZUNlbGwmJih0LmFjdGl2ZUNlbGw9ZS5hY3RpdmVDZWxsKSx0aGlzLnNoZWV0''@;'; put 'put ''Vmlldy5zdHlsZSYmKHQuc3R5bGU9dGhpcy5zaGVldFZpZXcuc3R5bGUpKToodD10aGlzLm1vZGVsPXt3b3JrYm9va1ZpZXdJZDp0aGlzLnNoZWV0Vmlldy53b3JrYm9va1ZpZXdJZCxyaWdodFRvTGVmdDp0aGlzLnNoZWV0Vmlldy5yaWdodFRvTGVmdCxzdGF0ZToibm9ybWFsIixzaG93UnVs''@;'; put 'put ''ZXI6dGhpcy5zaGVldFZpZXcuc2hvd1J1bGVyLHNob3dSb3dDb2xIZWFkZXJzOnRoaXMuc2hlZXRWaWV3LnNob3dSb3dDb2xIZWFkZXJzLHNob3dHcmlkTGluZXM6dGhpcy5zaGVldFZpZXcuc2hvd0dyaWRMaW5lcyx6b29tU2NhbGU6dGhpcy5zaGVldFZpZXcuem9vbVNjYWxlLHpvb21TY2Fs''@;'; put 'put ''ZU5vcm1hbDp0aGlzLnNoZWV0Vmlldy56b29tU2NhbGVOb3JtYWx9LGU9dGhpcy5zZWxlY3Rpb25zLnRvcExlZnQsZSYmZS5hY3RpdmVDZWxsJiYodC5hY3RpdmVDZWxsPWUuYWN0aXZlQ2VsbCksdGhpcy5zaGVldFZpZXcuc3R5bGUmJih0LnN0eWxlPXRoaXMuc2hlZXRWaWV3LnN0eWxlKSks''@;'; put 'put ''ITEpfXJlY29uY2lsZSgpe319fSx7Ii4uLy4uLy4uL3V0aWxzL2NvbC1jYWNoZSI6MTksIi4uL2Jhc2UteGZvcm0iOjMyfV0sMTE0OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGJ7Z2V0IHRh''@;'; put 'put ''Zygpe3JldHVybiJ0YWJsZVBhcnQifXJlbmRlcihhLG8pe28mJmEubGVhZk5vZGUodGhpcy50YWcseyJyOmlkIjpvLnJJZH0pfXBhcnNlT3BlbihhKXtyZXR1cm4gYS5uYW1lPT09dGhpcy50YWcmJih0aGlzLm1vZGVsPXtySWQ6YS5hdHRyaWJ1dGVzWyJyOmlkIl19LCEwKX1wYXJzZVRleHQo''@;'; put 'put ''KXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSwxMTU6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi8uLi8uLi91dGlscy91bmRlci1kYXNoIiksYT1zKCIuLi8uLi8uLi91dGlscy9jb2wtY2FjaGUiKSxvPXMoIi4uLy4u''@;'; put 'put ''Ly4uL3V0aWxzL3htbC1zdHJlYW0iKSxyPXMoIi4uLy4uL3JlbC10eXBlIiksdD1zKCIuL21lcmdlcyIpLGU9cygiLi4vYmFzZS14Zm9ybSIpLGw9cygiLi4vbGlzdC14Zm9ybSIpLG49cygiLi9yb3cteGZvcm0iKSxpPXMoIi4vY29sLXhmb3JtIiksaD1zKCIuL2RpbWVuc2lvbi14Zm9ybSIp''@;'; put 'put ''LGY9cygiLi9oeXBlcmxpbmsteGZvcm0iKSx1PXMoIi4vbWVyZ2UtY2VsbC14Zm9ybSIpLHA9cygiLi9kYXRhLXZhbGlkYXRpb25zLXhmb3JtIiksZD1zKCIuL3NoZWV0LXByb3BlcnRpZXMteGZvcm0iKSx2PXMoIi4vc2hlZXQtZm9ybWF0LXByb3BlcnRpZXMteGZvcm0iKSxfPXMoIi4vc2hl''@;'; put 'put ''ZXQtdmlldy14Zm9ybSIpLEE9cygiLi9zaGVldC1wcm90ZWN0aW9uLXhmb3JtIiksST1zKCIuL3BhZ2UtbWFyZ2lucy14Zm9ybSIpLEw9cygiLi9wYWdlLXNldHVwLXhmb3JtIiksTj1zKCIuL3ByaW50LW9wdGlvbnMteGZvcm0iKSxQPXMoIi4vYXV0by1maWx0ZXIteGZvcm0iKSxCPXMoIi4v''@;'; put 'put ''cGljdHVyZS14Zm9ybSIpLCQ9cygiLi9kcmF3aW5nLXhmb3JtIiksRD1zKCIuL3RhYmxlLXBhcnQteGZvcm0iKSx4PXMoIi4vcm93LWJyZWFrcy14Zm9ybSIpLE09cygiLi9oZWFkZXItZm9vdGVyLXhmb3JtIiksaj1zKCIuL2NmL2NvbmRpdGlvbmFsLWZvcm1hdHRpbmdzLXhmb3JtIiksYz1z''@;'; put 'put ''KCIuL2V4dC1sc3QteGZvcm0iKTtjbGFzcyBnIGV4dGVuZHMgZXtjb25zdHJ1Y3Rvcih3KXtzdXBlcigpO2NvbnN0e21heFJvd3M6ayxtYXhDb2xzOk8saWdub3JlTm9kZXM6en09d3x8e307dGhpcy5pZ25vcmVOb2Rlcz16fHxbXSx0aGlzLm1hcD17c2hlZXRQcjpuZXcgZCxkaW1lbnNpb246''@;'; put 'put ''bmV3IGgsc2hlZXRWaWV3czpuZXcgbCh7dGFnOiJzaGVldFZpZXdzIixjb3VudDohMSxjaGlsZFhmb3JtOm5ldyBffSksc2hlZXRGb3JtYXRQcjpuZXcgdixjb2xzOm5ldyBsKHt0YWc6ImNvbHMiLGNvdW50OiExLGNoaWxkWGZvcm06bmV3IGl9KSxzaGVldERhdGE6bmV3IGwoe3RhZzoic2hl''@;'; put 'put ''ZXREYXRhIixjb3VudDohMSxlbXB0eTohMCxjaGlsZFhmb3JtOm5ldyBuKHttYXhJdGVtczpPfSksbWF4SXRlbXM6a30pLGF1dG9GaWx0ZXI6bmV3IFAsbWVyZ2VDZWxsczpuZXcgbCh7dGFnOiJtZXJnZUNlbGxzIixjb3VudDohMCxjaGlsZFhmb3JtOm5ldyB1fSkscm93QnJlYWtzOm5ldyB4''@;'; put 'put ''LGh5cGVybGlua3M6bmV3IGwoe3RhZzoiaHlwZXJsaW5rcyIsY291bnQ6ITEsY2hpbGRYZm9ybTpuZXcgZn0pLHBhZ2VNYXJnaW5zOm5ldyBJLGRhdGFWYWxpZGF0aW9uczpuZXcgcCxwYWdlU2V0dXA6bmV3IEwsaGVhZGVyRm9vdGVyOm5ldyBNLHByaW50T3B0aW9uczpuZXcgTixwaWN0dXJl''@;'; put 'put ''Om5ldyBCLGRyYXdpbmc6bmV3ICQsc2hlZXRQcm90ZWN0aW9uOm5ldyBBLHRhYmxlUGFydHM6bmV3IGwoe3RhZzoidGFibGVQYXJ0cyIsY291bnQ6ITAsY2hpbGRYZm9ybTpuZXcgRH0pLGNvbmRpdGlvbmFsRm9ybWF0dGluZzpuZXcgaixleHRMc3Q6bmV3IGN9fXByZXBhcmUodyxrKXtrLm1l''@;'; put 'put ''cmdlcz1uZXcgdCx3Lmh5cGVybGlua3M9ay5oeXBlcmxpbmtzPVtdLHcuY29tbWVudHM9ay5jb21tZW50cz1bXSxrLmZvcm11bGFlPXt9LGsuc2lGb3JtdWxhZT0wLHRoaXMubWFwLmNvbHMucHJlcGFyZSh3LmNvbHMsayksdGhpcy5tYXAuc2hlZXREYXRhLnByZXBhcmUody5yb3dzLGspLHRo''@;'; put 'put ''aXMubWFwLmNvbmRpdGlvbmFsRm9ybWF0dGluZy5wcmVwYXJlKHcuY29uZGl0aW9uYWxGb3JtYXR0aW5ncyxrKSx3Lm1lcmdlQ2VsbHM9ay5tZXJnZXMubWVyZ2VDZWxscztjb25zdCBPPXcucmVscz1bXTtmdW5jdGlvbiB6KFIpe3JldHVybiJySWQiKyhSLmxlbmd0aCsxKX1pZih3Lmh5cGVy''@;'; put 'put ''bGlua3MuZm9yRWFjaChSPT57Y29uc3QgSD16KE8pO1IucklkPUgsTy5wdXNoKHtJZDpILFR5cGU6ci5IeXBlcmxpbmssVGFyZ2V0OlIudGFyZ2V0LFRhcmdldE1vZGU6IkV4dGVybmFsIn0pfSksdy5jb21tZW50cy5sZW5ndGg+MCl7Y29uc3QgUj17SWQ6eihPKSxUeXBlOnIuQ29tbWVudHMs''@;'; put 'put ''VGFyZ2V0OmAuLi9jb21tZW50cyR7dy5pZH0ueG1sYH07Ty5wdXNoKFIpO2NvbnN0IEg9e0lkOnooTyksVHlwZTpyLlZtbERyYXdpbmcsVGFyZ2V0OmAuLi9kcmF3aW5ncy92bWxEcmF3aW5nJHt3LmlkfS52bWxgfTtPLnB1c2goSCksdy5jb21tZW50cy5mb3JFYWNoKFQ9PntULnJlZkFkZHJl''@;'; put 'put ''c3M9YS5kZWNvZGVBZGRyZXNzKFQucmVmKX0pLGsuY29tbWVudFJlZnMucHVzaCh7Y29tbWVudE5hbWU6ImNvbW1lbnRzIit3LmlkLHZtbERyYXdpbmc6InZtbERyYXdpbmciK3cuaWR9KX1jb25zdCBVPVtdO2xldCBWO3cubWVkaWEuZm9yRWFjaChSPT57aWYoImJhY2tncm91bmQiPT09Ui50''@;'; put 'put ''eXBlKXtjb25zdCBIPXooTyk7Vj1rLm1lZGlhW1IuaW1hZ2VJZF0sTy5wdXNoKHtJZDpILFR5cGU6ci5JbWFnZSxUYXJnZXQ6YC4uL21lZGlhLyR7Vi5uYW1lfS4ke1YuZXh0ZW5zaW9ufWB9KSx3LmJhY2tncm91bmQ9e3JJZDpIfSx3LmltYWdlPWsubWVkaWFbUi5pbWFnZUlkXX1lbHNlIGlm''@;'; put 'put ''KCJpbWFnZSI9PT1SLnR5cGUpe2xldHtkcmF3aW5nOkh9PXc7Vj1rLm1lZGlhW1IuaW1hZ2VJZF0sSHx8KEg9dy5kcmF3aW5nPXtySWQ6eihPKSxuYW1lOiJkcmF3aW5nIisgKytrLmRyYXdpbmdzQ291bnQsYW5jaG9yczpbXSxyZWxzOltdfSxrLmRyYXdpbmdzLnB1c2goSCksTy5wdXNoKHtJ''@;'; put 'put ''ZDpILnJJZCxUeXBlOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RyYXdpbmciLFRhcmdldDpgLi4vZHJhd2luZ3MvJHtILm5hbWV9LnhtbGB9KSk7bGV0IFQ9dGhpcy5wcmVJbWFnZUlkPT09Ui5pbWFnZUlkP1Vb''@;'; put 'put ''Ui5pbWFnZUlkXTpVW0gucmVscy5sZW5ndGhdO1R8fChUPXooSC5yZWxzKSxVW0gucmVscy5sZW5ndGhdPVQsSC5yZWxzLnB1c2goe0lkOlQsVHlwZToiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9pbWFnZSIsVGFy''@;'; put 'put ''Z2V0OmAuLi9tZWRpYS8ke1YubmFtZX0uJHtWLmV4dGVuc2lvbn1gfSkpO2NvbnN0IEM9e3BpY3R1cmU6e3JJZDpUfSxyYW5nZTpSLnJhbmdlfTtpZihSLmh5cGVybGlua3MmJlIuaHlwZXJsaW5rcy5oeXBlcmxpbmspe2NvbnN0IEY9eihILnJlbHMpO1VbSC5yZWxzLmxlbmd0aF09RixDLnBp''@;'; put 'put ''Y3R1cmUuaHlwZXJsaW5rcz17dG9vbHRpcDpSLmh5cGVybGlua3MudG9vbHRpcCxySWQ6Rn0sSC5yZWxzLnB1c2goe0lkOkYsVHlwZTpyLkh5cGVybGluayxUYXJnZXQ6Ui5oeXBlcmxpbmtzLmh5cGVybGluayxUYXJnZXRNb2RlOiJFeHRlcm5hbCJ9KX10aGlzLnByZUltYWdlSWQ9Ui5pbWFn''@;'; put 'put ''ZUlkLEguYW5jaG9ycy5wdXNoKEMpfX0pLHcudGFibGVzLmZvckVhY2goUj0+e2NvbnN0IEg9eihPKTtSLnJJZD1ILE8ucHVzaCh7SWQ6SCxUeXBlOnIuVGFibGUsVGFyZ2V0OiIuLi90YWJsZXMvIitSLnRhcmdldH0pLFIuY29sdW1ucy5mb3JFYWNoKFQ9Pntjb25zdHtzdHlsZTpDfT1UO0Mm''@;'; put 'put ''JihULmR4ZklkPWsuc3R5bGVzLmFkZER4ZlN0eWxlKEMpKX0pfSksdGhpcy5tYXAuZXh0THN0LnByZXBhcmUodyxrKX1yZW5kZXIodyxrKXt3Lm9wZW5YbWwoby5TdGREb2NBdHRyaWJ1dGVzKSx3Lm9wZW5Ob2RlKCJ3b3Jrc2hlZXQiLGcuV09SS1NIRUVUX0FUVFJJQlVURVMpO2NvbnN0IE89''@;'; put 'put ''ay5wcm9wZXJ0aWVzP3tkZWZhdWx0Um93SGVpZ2h0OmsucHJvcGVydGllcy5kZWZhdWx0Um93SGVpZ2h0LGR5RGVzY2VudDprLnByb3BlcnRpZXMuZHlEZXNjZW50LG91dGxpbmVMZXZlbENvbDprLnByb3BlcnRpZXMub3V0bGluZUxldmVsQ29sLG91dGxpbmVMZXZlbFJvdzprLnByb3BlcnRp''@;'; put 'put ''ZXMub3V0bGluZUxldmVsUm93fTp2b2lkIDA7ay5wcm9wZXJ0aWVzJiZrLnByb3BlcnRpZXMuZGVmYXVsdENvbFdpZHRoJiYoTy5kZWZhdWx0Q29sV2lkdGg9ay5wcm9wZXJ0aWVzLmRlZmF1bHRDb2xXaWR0aCk7Y29uc3QgVT1rLnBhZ2VTZXR1cCYmay5wYWdlU2V0dXAubWFyZ2lucyxWPXtz''@;'; put 'put ''aG93Um93Q29sSGVhZGVyczprLnBhZ2VTZXR1cCYmay5wYWdlU2V0dXAuc2hvd1Jvd0NvbEhlYWRlcnMsc2hvd0dyaWRMaW5lczprLnBhZ2VTZXR1cCYmay5wYWdlU2V0dXAuc2hvd0dyaWRMaW5lcyxob3Jpem9udGFsQ2VudGVyZWQ6ay5wYWdlU2V0dXAmJmsucGFnZVNldHVwLmhvcml6b250''@;'; put 'put ''YWxDZW50ZXJlZCx2ZXJ0aWNhbENlbnRlcmVkOmsucGFnZVNldHVwJiZrLnBhZ2VTZXR1cC52ZXJ0aWNhbENlbnRlcmVkfSxSPWsuc2hlZXRQcm90ZWN0aW9uO3RoaXMubWFwLnNoZWV0UHIucmVuZGVyKHcse291dGxpbmVQcm9wZXJ0aWVzOmsucHJvcGVydGllcyYmay5wcm9wZXJ0aWVzLm91''@;'; put 'put ''dGxpbmVQcm9wZXJ0aWVzLHRhYkNvbG9yOmsucHJvcGVydGllcyYmay5wcm9wZXJ0aWVzLnRhYkNvbG9yLHBhZ2VTZXR1cDprLnBhZ2VTZXR1cCYmay5wYWdlU2V0dXAuZml0VG9QYWdlP3tmaXRUb1BhZ2U6ay5wYWdlU2V0dXAuZml0VG9QYWdlfTp2b2lkIDB9KSx0aGlzLm1hcC5kaW1lbnNp''@;'; put 'put ''b24ucmVuZGVyKHcsay5kaW1lbnNpb25zKSx0aGlzLm1hcC5zaGVldFZpZXdzLnJlbmRlcih3LGsudmlld3MpLHRoaXMubWFwLnNoZWV0Rm9ybWF0UHIucmVuZGVyKHcsTyksdGhpcy5tYXAuY29scy5yZW5kZXIodyxrLmNvbHMpLHRoaXMubWFwLnNoZWV0RGF0YS5yZW5kZXIodyxrLnJvd3Mp''@;'; put 'put ''LHRoaXMubWFwLnNoZWV0UHJvdGVjdGlvbi5yZW5kZXIodyxSKSx0aGlzLm1hcC5hdXRvRmlsdGVyLnJlbmRlcih3LGsuYXV0b0ZpbHRlciksdGhpcy5tYXAubWVyZ2VDZWxscy5yZW5kZXIodyxrLm1lcmdlQ2VsbHMpLHRoaXMubWFwLmNvbmRpdGlvbmFsRm9ybWF0dGluZy5yZW5kZXIodyxr''@;'; put 'put ''LmNvbmRpdGlvbmFsRm9ybWF0dGluZ3MpLHRoaXMubWFwLmRhdGFWYWxpZGF0aW9ucy5yZW5kZXIodyxrLmRhdGFWYWxpZGF0aW9ucyksdGhpcy5tYXAuaHlwZXJsaW5rcy5yZW5kZXIodyxrLmh5cGVybGlua3MpLHRoaXMubWFwLnByaW50T3B0aW9ucy5yZW5kZXIodyxWKSx0aGlzLm1hcC5w''@;'; put 'put ''YWdlTWFyZ2lucy5yZW5kZXIodyxVKSx0aGlzLm1hcC5wYWdlU2V0dXAucmVuZGVyKHcsay5wYWdlU2V0dXApLHRoaXMubWFwLmhlYWRlckZvb3Rlci5yZW5kZXIodyxrLmhlYWRlckZvb3RlciksdGhpcy5tYXAucm93QnJlYWtzLnJlbmRlcih3LGsucm93QnJlYWtzKSx0aGlzLm1hcC5kcmF3''@;'; put 'put ''aW5nLnJlbmRlcih3LGsuZHJhd2luZyksdGhpcy5tYXAucGljdHVyZS5yZW5kZXIodyxrLmJhY2tncm91bmQpLHRoaXMubWFwLnRhYmxlUGFydHMucmVuZGVyKHcsay50YWJsZXMpLHRoaXMubWFwLmV4dExzdC5yZW5kZXIodyxrKSxrLnJlbHMmJmsucmVscy5mb3JFYWNoKEg9PntILlR5cGU9''@;'; put 'put ''PT1yLlZtbERyYXdpbmcmJncubGVhZk5vZGUoImxlZ2FjeURyYXdpbmciLHsicjppZCI6SC5JZH0pfSksdy5jbG9zZU5vZGUoKX1wYXJzZU9wZW4odyl7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZU9wZW4odyksITApOiJ3b3Jrc2hlZXQiPT09dy5uYW1lPyhiLmVhY2go''@;'; put 'put ''dGhpcy5tYXAsaz0+e2sucmVzZXQoKX0pLCEwKToodGhpcy5tYXBbdy5uYW1lXSYmIXRoaXMuaWdub3JlTm9kZXMuaW5jbHVkZXMody5uYW1lKSYmKHRoaXMucGFyc2VyPXRoaXMubWFwW3cubmFtZV0sdGhpcy5wYXJzZXIucGFyc2VPcGVuKHcpKSwhMCl9cGFyc2VUZXh0KHcpe3RoaXMucGFy''@;'; put 'put ''c2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQodyl9cGFyc2VDbG9zZSh3KXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VDbG9zZSh3KXx8KHRoaXMucGFyc2VyPXZvaWQgMCksITA7aWYoIndvcmtzaGVldCI9PT13KXtjb25zdCBrPXRoaXMubWFwLnNoZWV0Rm9ybWF0''@;'; put 'put ''UHIubW9kZWx8fHt9O3RoaXMubWFwLnNoZWV0UHIubW9kZWwmJnRoaXMubWFwLnNoZWV0UHIubW9kZWwudGFiQ29sb3ImJihrLnRhYkNvbG9yPXRoaXMubWFwLnNoZWV0UHIubW9kZWwudGFiQ29sb3IpLHRoaXMubWFwLnNoZWV0UHIubW9kZWwmJnRoaXMubWFwLnNoZWV0UHIubW9kZWwub3V0''@;'; put 'put ''bGluZVByb3BlcnRpZXMmJihrLm91dGxpbmVQcm9wZXJ0aWVzPXRoaXMubWFwLnNoZWV0UHIubW9kZWwub3V0bGluZVByb3BlcnRpZXMpO2NvbnN0IHo9T2JqZWN0LmFzc2lnbih7Zml0VG9QYWdlOnRoaXMubWFwLnNoZWV0UHIubW9kZWwmJnRoaXMubWFwLnNoZWV0UHIubW9kZWwucGFnZVNl''@;'; put 'put ''dHVwJiZ0aGlzLm1hcC5zaGVldFByLm1vZGVsLnBhZ2VTZXR1cC5maXRUb1BhZ2V8fCExLG1hcmdpbnM6dGhpcy5tYXAucGFnZU1hcmdpbnMubW9kZWx9LHRoaXMubWFwLnBhZ2VTZXR1cC5tb2RlbCx0aGlzLm1hcC5wcmludE9wdGlvbnMubW9kZWwpLFU9KCh5LHcpPT57aWYoIXd8fCF3Lmxl''@;'; put 'put ''bmd0aClyZXR1cm4geTtpZigheXx8IXkubGVuZ3RoKXJldHVybiB3O2NvbnN0IGs9e30sTz17fTtyZXR1cm4geS5mb3JFYWNoKHo9PntrW3oucmVmXT16LHoucnVsZXMuZm9yRWFjaChVPT57Y29uc3R7eDE0SWQ6Vn09VTtWJiYoT1tWXT1VKX0pfSksdy5mb3JFYWNoKHo9Pnt6LnJ1bGVzLmZv''@;'; put 'put ''ckVhY2goVT0+e2NvbnN0IFY9T1tVLngxNElkXTt2YXIgUixIO1Y/KFI9VixIPVUsT2JqZWN0LmtleXMoSCkuZm9yRWFjaChUPT57Y29uc3QgRj1IW1RdO3ZvaWQgMD09PVJbVF0mJnZvaWQgMCE9PUYmJihSW1RdPUYpfSkpOmtbei5yZWZdP2tbei5yZWZdLnJ1bGVzLnB1c2goVSk6eS5wdXNo''@;'; put 'put ''KHtyZWY6ei5yZWYscnVsZXM6W1VdfSl9KX0pLHl9KSh0aGlzLm1hcC5jb25kaXRpb25hbEZvcm1hdHRpbmcubW9kZWwsdGhpcy5tYXAuZXh0THN0Lm1vZGVsJiZ0aGlzLm1hcC5leHRMc3QubW9kZWxbIngxNDpjb25kaXRpb25hbEZvcm1hdHRpbmdzIl0pO3JldHVybiB0aGlzLm1vZGVsPXtk''@;'; put 'put ''aW1lbnNpb25zOnRoaXMubWFwLmRpbWVuc2lvbi5tb2RlbCxjb2xzOnRoaXMubWFwLmNvbHMubW9kZWwscm93czp0aGlzLm1hcC5zaGVldERhdGEubW9kZWwsbWVyZ2VDZWxsczp0aGlzLm1hcC5tZXJnZUNlbGxzLm1vZGVsLGh5cGVybGlua3M6dGhpcy5tYXAuaHlwZXJsaW5rcy5tb2RlbCxk''@;'; put 'put ''YXRhVmFsaWRhdGlvbnM6dGhpcy5tYXAuZGF0YVZhbGlkYXRpb25zLm1vZGVsLHByb3BlcnRpZXM6ayx2aWV3czp0aGlzLm1hcC5zaGVldFZpZXdzLm1vZGVsLHBhZ2VTZXR1cDp6LGhlYWRlckZvb3Rlcjp0aGlzLm1hcC5oZWFkZXJGb290ZXIubW9kZWwsYmFja2dyb3VuZDp0aGlzLm1hcC5w''@;'; put 'put ''aWN0dXJlLm1vZGVsLGRyYXdpbmc6dGhpcy5tYXAuZHJhd2luZy5tb2RlbCx0YWJsZXM6dGhpcy5tYXAudGFibGVQYXJ0cy5tb2RlbCxjb25kaXRpb25hbEZvcm1hdHRpbmdzOlV9LHRoaXMubWFwLmF1dG9GaWx0ZXIubW9kZWwmJih0aGlzLm1vZGVsLmF1dG9GaWx0ZXI9dGhpcy5tYXAuYXV0''@;'; put 'put ''b0ZpbHRlci5tb2RlbCksdGhpcy5tYXAuc2hlZXRQcm90ZWN0aW9uLm1vZGVsJiYodGhpcy5tb2RlbC5zaGVldFByb3RlY3Rpb249dGhpcy5tYXAuc2hlZXRQcm90ZWN0aW9uLm1vZGVsKSwhMX1yZXR1cm4hMH1yZWNvbmNpbGUodyxrKXtjb25zdCBPPSh3LnJlbGF0aW9uc2hpcHN8fFtdKS5y''@;'; put 'put ''ZWR1Y2UoKFUsVik9PntpZihVW1YuSWRdPVYsVi5UeXBlPT09ci5Db21tZW50cyYmKHcuY29tbWVudHM9ay5jb21tZW50c1tWLlRhcmdldF0uY29tbWVudHMpLFYuVHlwZT09PXIuVm1sRHJhd2luZyYmdy5jb21tZW50cyYmdy5jb21tZW50cy5sZW5ndGgpe2NvbnN0IFI9ay52bWxEcmF3aW5n''@;'; put 'put ''c1tWLlRhcmdldF0uY29tbWVudHM7dy5jb21tZW50cy5mb3JFYWNoKChILFQpPT57SC5ub3RlPU9iamVjdC5hc3NpZ24oe30sSC5ub3RlLFJbVF0pfSl9cmV0dXJuIFV9LHt9KTtpZihrLmNvbW1lbnRzTWFwPSh3LmNvbW1lbnRzfHxbXSkucmVkdWNlKChVLFYpPT4oVi5yZWYmJihVW1YucmVm''@;'; put 'put ''XT1WKSxVKSx7fSksay5oeXBlcmxpbmtNYXA9KHcuaHlwZXJsaW5rc3x8W10pLnJlZHVjZSgoVSxWKT0+KFYucklkJiYoVVtWLmFkZHJlc3NdPU9bVi5ySWRdLlRhcmdldCksVSkse30pLGsuZm9ybXVsYWU9e30sdy5yb3dzPXcucm93cyYmdy5yb3dzLmZpbHRlcihCb29sZWFuKXx8W10sdy5y''@;'; put 'put ''b3dzLmZvckVhY2goVT0+e1UuY2VsbHM9VS5jZWxscyYmVS5jZWxscy5maWx0ZXIoQm9vbGVhbil8fFtdfSksdGhpcy5tYXAuY29scy5yZWNvbmNpbGUody5jb2xzLGspLHRoaXMubWFwLnNoZWV0RGF0YS5yZWNvbmNpbGUody5yb3dzLGspLHRoaXMubWFwLmNvbmRpdGlvbmFsRm9ybWF0dGlu''@;'; put 'put ''Zy5yZWNvbmNpbGUody5jb25kaXRpb25hbEZvcm1hdHRpbmdzLGspLHcubWVkaWE9W10sdy5kcmF3aW5nKXtjb25zdCBVPU9bdy5kcmF3aW5nLnJJZF0uVGFyZ2V0Lm1hdGNoKC9cL2RyYXdpbmdzXC8oW2EtekEtWjAtOV0rKVsuXVthLXpBLVpdezMsNH0kLyk7VSYmay5kcmF3aW5nc1tVWzFd''@;'; put 'put ''XS5hbmNob3JzLmZvckVhY2goUj0+e1IubWVkaXVtJiZ3Lm1lZGlhLnB1c2goe3R5cGU6ImltYWdlIixpbWFnZUlkOlIubWVkaXVtLmluZGV4LHJhbmdlOlIucmFuZ2UsaHlwZXJsaW5rczpSLnBpY3R1cmUuaHlwZXJsaW5rc30pfSl9Y29uc3Qgej13LmJhY2tncm91bmQmJk9bdy5iYWNrZ3Jv''@;'; put 'put ''dW5kLnJJZF07aWYoeil7Y29uc3QgVT16LlRhcmdldC5zcGxpdCgiL21lZGlhLyIpWzFdLFY9ay5tZWRpYUluZGV4JiZrLm1lZGlhSW5kZXhbVV07dm9pZCAwIT09ViYmdy5tZWRpYS5wdXNoKHt0eXBlOiJiYWNrZ3JvdW5kIixpbWFnZUlkOlZ9KX13LnRhYmxlcz0ody50YWJsZXN8fFtdKS5t''@;'; put 'put ''YXAoVT0+ay50YWJsZXNbT1tVLnJJZF0uVGFyZ2V0XSksZGVsZXRlIHcucmVsYXRpb25zaGlwcyxkZWxldGUgdy5oeXBlcmxpbmtzLGRlbGV0ZSB3LmNvbW1lbnRzfX1nLldPUktTSEVFVF9BVFRSSUJVVEVTPXt4bWxuczoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVh''@;'; put 'put ''ZHNoZWV0bWwvMjAwNi9tYWluIiwieG1sbnM6ciI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMiLCJ4bWxuczptYyI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0''@;'; put 'put ''eS8yMDA2IiwibWM6SWdub3JhYmxlIjoieDE0YWMiLCJ4bWxuczp4MTRhYyI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAwOS85L2FjIn0sRS5leHBvcnRzPWd9LHsiLi4vLi4vLi4vdXRpbHMvY29sLWNhY2hlIjoxOSwiLi4vLi4vLi4vdXRp''@;'; put 'put ''bHMvdW5kZXItZGFzaCI6MjYsIi4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW0iOjI4LCIuLi8uLi9yZWwtdHlwZSI6MzEsIi4uL2Jhc2UteGZvcm0iOjMyLCIuLi9saXN0LXhmb3JtIjo3MSwiLi9hdXRvLWZpbHRlci14Zm9ybSI6NzIsIi4vY2YvY29uZGl0aW9uYWwtZm9ybWF0dGluZ3MteGZv''@;'; put 'put ''cm0iOjg3LCIuL2NvbC14Zm9ybSI6OTIsIi4vZGF0YS12YWxpZGF0aW9ucy14Zm9ybSI6OTMsIi4vZGltZW5zaW9uLXhmb3JtIjo5NCwiLi9kcmF3aW5nLXhmb3JtIjo5NSwiLi9leHQtbHN0LXhmb3JtIjo5NiwiLi9oZWFkZXItZm9vdGVyLXhmb3JtIjo5NywiLi9oeXBlcmxpbmsteGZvcm0i''@;'; put 'put ''Ojk4LCIuL21lcmdlLWNlbGwteGZvcm0iOjk5LCIuL21lcmdlcyI6MTAwLCIuL3BhZ2UtbWFyZ2lucy14Zm9ybSI6MTAzLCIuL3BhZ2Utc2V0dXAteGZvcm0iOjEwNSwiLi9waWN0dXJlLXhmb3JtIjoxMDYsIi4vcHJpbnQtb3B0aW9ucy14Zm9ybSI6MTA3LCIuL3Jvdy1icmVha3MteGZvcm0i''@;'; put 'put ''OjEwOCwiLi9yb3cteGZvcm0iOjEwOSwiLi9zaGVldC1mb3JtYXQtcHJvcGVydGllcy14Zm9ybSI6MTEwLCIuL3NoZWV0LXByb3BlcnRpZXMteGZvcm0iOjExMSwiLi9zaGVldC1wcm90ZWN0aW9uLXhmb3JtIjoxMTIsIi4vc2hlZXQtdmlldy14Zm9ybSI6MTEzLCIuL3RhYmxlLXBhcnQteGZv''@;'; put 'put ''cm0iOjExNH1dLDExNjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBie2NvbnN0cnVjdG9yKGEpe3N1cGVyKCksdGhpcy50YWc9YS50YWcsdGhpcy5hdHRyPWEuYXR0cn1yZW5kZXIoYSxvKXtv''@;'; put 'put ''JiYoYS5vcGVuTm9kZSh0aGlzLnRhZyksYS5jbG9zZU5vZGUoKSl9cGFyc2VPcGVuKGEpe2EubmFtZT09PXRoaXMudGFnJiYodGhpcy5tb2RlbD0hMCl9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sMTE3OltmdW5jdGlvbihzLEUs''@;'; put 'put ''Uyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGJ7Y29uc3RydWN0b3IoYSl7c3VwZXIoKSx0aGlzLnRhZz1hLnRhZyx0aGlzLmF0dHI9YS5hdHRyLHRoaXMuYXR0cnM9YS5hdHRycyx0aGlzLl9mb3JtYXQ9YS5mb3JtYXR8''@;'; put 'put ''fGZ1bmN0aW9uKG8pe3RyeXtyZXR1cm4gTnVtYmVyLmlzTmFOKG8uZ2V0VGltZSgpKT8iIjpvLnRvSVNPU3RyaW5nKCl9Y2F0Y2h7cmV0dXJuIiJ9fSx0aGlzLl9wYXJzZT1hLnBhcnNlfHxmdW5jdGlvbihvKXtyZXR1cm4gbmV3IERhdGUobyl9fXJlbmRlcihhLG8pe28mJihhLm9wZW5Ob2Rl''@;'; put 'put ''KHRoaXMudGFnKSx0aGlzLmF0dHJzJiZhLmFkZEF0dHJpYnV0ZXModGhpcy5hdHRycyksdGhpcy5hdHRyP2EuYWRkQXR0cmlidXRlKHRoaXMuYXR0cix0aGlzLl9mb3JtYXQobykpOmEud3JpdGVUZXh0KHRoaXMuX2Zvcm1hdChvKSksYS5jbG9zZU5vZGUoKSl9cGFyc2VPcGVuKGEpe2EubmFt''@;'; put 'put ''ZT09PXRoaXMudGFnJiYodGhpcy5hdHRyP3RoaXMubW9kZWw9dGhpcy5fcGFyc2UoYS5hdHRyaWJ1dGVzW3RoaXMuYXR0cl0pOnRoaXMudGV4dD1bXSl9cGFyc2VUZXh0KGEpe3RoaXMuYXR0cnx8dGhpcy50ZXh0LnB1c2goYSl9cGFyc2VDbG9zZSgpe3JldHVybiB0aGlzLmF0dHJ8fCh0aGlz''@;'; put 'put ''Lm1vZGVsPXRoaXMuX3BhcnNlKHRoaXMudGV4dC5qb2luKCIiKSkpLCExfX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSwxMTg6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgYntjb25zdHJ1Y3Rv''@;'; put 'put ''cihhKXtzdXBlcigpLHRoaXMudGFnPWEudGFnLHRoaXMuYXR0cj1hLmF0dHIsdGhpcy5hdHRycz1hLmF0dHJzLHRoaXMuemVybz1hLnplcm99cmVuZGVyKGEsbyl7KG98fHRoaXMuemVybykmJihhLm9wZW5Ob2RlKHRoaXMudGFnKSx0aGlzLmF0dHJzJiZhLmFkZEF0dHJpYnV0ZXModGhpcy5h''@;'; put 'put ''dHRycyksdGhpcy5hdHRyP2EuYWRkQXR0cmlidXRlKHRoaXMuYXR0cixvKTphLndyaXRlVGV4dChvKSxhLmNsb3NlTm9kZSgpKX1wYXJzZU9wZW4oYSl7cmV0dXJuIGEubmFtZT09PXRoaXMudGFnJiYodGhpcy5hdHRyP3RoaXMubW9kZWw9cGFyc2VJbnQoYS5hdHRyaWJ1dGVzW3RoaXMuYXR0''@;'; put 'put ''cl0sMTApOnRoaXMudGV4dD1bXSwhMCl9cGFyc2VUZXh0KGEpe3RoaXMuYXR0cnx8dGhpcy50ZXh0LnB1c2goYSl9cGFyc2VDbG9zZSgpe3JldHVybiB0aGlzLmF0dHJ8fCh0aGlzLm1vZGVsPXBhcnNlSW50KHRoaXMudGV4dC5qb2luKCIiKXx8MCwxMCkpLCExfX19LHsiLi4vYmFzZS14Zm9y''@;'; put 'put ''bSI6MzJ9XSwxMTk6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgYntjb25zdHJ1Y3RvcihhKXtzdXBlcigpLHRoaXMudGFnPWEudGFnLHRoaXMuYXR0cj1hLmF0dHIsdGhpcy5hdHRycz1hLmF0''@;'; put 'put ''dHJzfXJlbmRlcihhLG8pe3ZvaWQgMCE9PW8mJihhLm9wZW5Ob2RlKHRoaXMudGFnKSx0aGlzLmF0dHJzJiZhLmFkZEF0dHJpYnV0ZXModGhpcy5hdHRycyksdGhpcy5hdHRyP2EuYWRkQXR0cmlidXRlKHRoaXMuYXR0cixvKTphLndyaXRlVGV4dChvKSxhLmNsb3NlTm9kZSgpKX1wYXJzZU9w''@;'; put 'put ''ZW4oYSl7YS5uYW1lPT09dGhpcy50YWcmJih0aGlzLmF0dHI/dGhpcy5tb2RlbD1hLmF0dHJpYnV0ZXNbdGhpcy5hdHRyXTp0aGlzLnRleHQ9W10pfXBhcnNlVGV4dChhKXt0aGlzLmF0dHJ8fHRoaXMudGV4dC5wdXNoKGEpfXBhcnNlQ2xvc2UoKXtyZXR1cm4gdGhpcy5hdHRyfHwodGhpcy5t''@;'; put 'put ''b2RlbD10aGlzLnRleHQuam9pbigiIikpLCExfX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSwxMjA6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuL2Jhc2UteGZvcm0iKSxhPXMoIi4uLy4uL3V0aWxzL3htbC1zdHJlYW0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5k''@;'; put 'put ''cyBie2NvbnN0cnVjdG9yKG8pe3N1cGVyKCksdGhpcy5fbW9kZWw9b31yZW5kZXIobyl7aWYoIXRoaXMuX3htbCl7Y29uc3Qgcj1uZXcgYTsoZnVuY3Rpb24gdChlLGwpe2Uub3Blbk5vZGUobC50YWcsbC4kKSxsLmMmJmwuYy5mb3JFYWNoKG49Pnt0KGUsbil9KSxsLnQmJmUud3JpdGVUZXh0''@;'; put 'put ''KGwudCksZS5jbG9zZU5vZGUoKX0pKHIsdGhpcy5fbW9kZWwpLHRoaXMuX3htbD1yLnhtbH1vLndyaXRlWG1sKHRoaXMuX3htbCl9cGFyc2VPcGVuKCl7cmV0dXJuITB9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2Uobyl7cmV0dXJuIG8hPT10aGlzLl9tb2RlbC50YWd9fX0seyIuLi8uLi91dGls''@;'; put 'put ''cy94bWwtc3RyZWFtIjoyOCwiLi9iYXNlLXhmb3JtIjozMn1dLDEyMTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4vdGV4dC14Zm9ybSIpLGE9cygiLi9yaWNoLXRleHQteGZvcm0iKSxvPXMoIi4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5k''@;'; put 'put ''cyBve2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17cjpuZXcgYSx0Om5ldyBifX1nZXQgdGFnKCl7cmV0dXJuInJQaCJ9cmVuZGVyKHIsdCl7aWYoci5vcGVuTm9kZSh0aGlzLnRhZyx7c2I6dC5zYnx8MCxlYjp0LmVifHwwfSksdCYmdC5oYXNPd25Qcm9wZXJ0eSgicmljaFRleHQi''@;'; put 'put ''KSYmdC5yaWNoVGV4dCl7Y29uc3R7cjplfT10aGlzLm1hcDt0LnJpY2hUZXh0LmZvckVhY2gobD0+e2UucmVuZGVyKHIsbCl9KX1lbHNlIHQmJnRoaXMubWFwLnQucmVuZGVyKHIsdC50ZXh0KTtyLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihyKXtjb25zdHtuYW1lOnR9PXI7cmV0dXJuIHRoaXMu''@;'; put 'put ''cGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZU9wZW4ociksITApOnQ9PT10aGlzLnRhZz8odGhpcy5tb2RlbD17c2I6cGFyc2VJbnQoci5hdHRyaWJ1dGVzLnNiLDEwKSxlYjpwYXJzZUludChyLmF0dHJpYnV0ZXMuZWIsMTApfSwhMCk6KHRoaXMucGFyc2VyPXRoaXMubWFwW3RdLCEhdGhpcy5w''@;'; put 'put ''YXJzZXImJih0aGlzLnBhcnNlci5wYXJzZU9wZW4ociksITApKX1wYXJzZVRleHQocil7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChyKX1wYXJzZUNsb3NlKHIpe2lmKHRoaXMucGFyc2VyKXtpZighdGhpcy5wYXJzZXIucGFyc2VDbG9zZShyKSl7c3dpdGNoKHIpe2Nhc2Ui''@;'; put 'put ''ciI6e2xldCB0PXRoaXMubW9kZWwucmljaFRleHQ7dHx8KHQ9dGhpcy5tb2RlbC5yaWNoVGV4dD1bXSksdC5wdXNoKHRoaXMucGFyc2VyLm1vZGVsKTticmVha31jYXNlInQiOnRoaXMubW9kZWwudGV4dD10aGlzLnBhcnNlci5tb2RlbH10aGlzLnBhcnNlcj12b2lkIDB9cmV0dXJuITB9cmV0''@;'; put 'put ''dXJuIHIhPT10aGlzLnRhZ319fSx7Ii4uL2Jhc2UteGZvcm0iOjMyLCIuL3JpY2gtdGV4dC14Zm9ybSI6MTIyLCIuL3RleHQteGZvcm0iOjEyNX1dLDEyMjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4vdGV4dC14Zm9ybSIpLGE9cygiLi4vc3R5bGUvZm9udC14''@;'; put 'put ''Zm9ybSIpLG89cygiLi4vYmFzZS14Zm9ybSIpO2NsYXNzIHIgZXh0ZW5kcyBve2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5tb2RlbD1lfWdldCB0YWcoKXtyZXR1cm4iciJ9Z2V0IHRleHRYZm9ybSgpe3JldHVybiB0aGlzLl90ZXh0WGZvcm18fCh0aGlzLl90ZXh0WGZvcm09bmV3IGIp''@;'; put 'put ''fWdldCBmb250WGZvcm0oKXtyZXR1cm4gdGhpcy5fZm9udFhmb3JtfHwodGhpcy5fZm9udFhmb3JtPW5ldyBhKHIuRk9OVF9PUFRJT05TKSl9cmVuZGVyKGUsbCl7bD1sfHx0aGlzLm1vZGVsLGUub3Blbk5vZGUoInIiKSxsLmZvbnQmJnRoaXMuZm9udFhmb3JtLnJlbmRlcihlLGwuZm9udCks''@;'; put 'put ''dGhpcy50ZXh0WGZvcm0ucmVuZGVyKGUsbC50ZXh0KSxlLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO3N3aXRjaChlLm5hbWUpe2Nhc2UiciI6cmV0dXJuIHRoaXMubW9kZWw9e30sITA7Y2FzZSJ0Ijpy''@;'; put 'put ''ZXR1cm4gdGhpcy5wYXJzZXI9dGhpcy50ZXh0WGZvcm0sdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO2Nhc2UiclByIjpyZXR1cm4gdGhpcy5wYXJzZXI9dGhpcy5mb250WGZvcm0sdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO2RlZmF1bHQ6cmV0dXJuITF9fXBhcnNlVGV4dChlKXt0''@;'; put 'put ''aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KGUpfXBhcnNlQ2xvc2UoZSl7c3dpdGNoKGUpe2Nhc2UiciI6cmV0dXJuITE7Y2FzZSJ0IjpyZXR1cm4gdGhpcy5tb2RlbC50ZXh0PXRoaXMucGFyc2VyLm1vZGVsLHRoaXMucGFyc2VyPXZvaWQgMCwhMDtjYXNlInJQciI6cmV0dXJu''@;'; put 'put ''IHRoaXMubW9kZWwuZm9udD10aGlzLnBhcnNlci5tb2RlbCx0aGlzLnBhcnNlcj12b2lkIDAsITA7ZGVmYXVsdDpyZXR1cm4gdGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoZSksITB9fX1yLkZPTlRfT1BUSU9OUz17dGFnTmFtZToiclByIixmb250TmFtZVRhZzoickZvbnQi''@;'; put 'put ''fSxFLmV4cG9ydHM9cn0seyIuLi9iYXNlLXhmb3JtIjozMiwiLi4vc3R5bGUvZm9udC14Zm9ybSI6MTMxLCIuL3RleHQteGZvcm0iOjEyNX1dLDEyMzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4vdGV4dC14Zm9ybSIpLGE9cygiLi9yaWNoLXRleHQteGZvcm0i''@;'; put 'put ''KSxvPXMoIi4vcGhvbmV0aWMtdGV4dC14Zm9ybSIpLHI9cygiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIHJ7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLm1vZGVsPXQsdGhpcy5tYXA9e3I6bmV3IGEsdDpuZXcgYixyUGg6bmV3IG99fWdldCB0YWcoKXtyZXR1''@;'; put 'put ''cm4ic2kifXJlbmRlcih0LGUpe3Qub3Blbk5vZGUodGhpcy50YWcpLGUmJmUuaGFzT3duUHJvcGVydHkoInJpY2hUZXh0IikmJmUucmljaFRleHQ/ZS5yaWNoVGV4dC5sZW5ndGg/ZS5yaWNoVGV4dC5mb3JFYWNoKGw9Pnt0aGlzLm1hcC5yLnJlbmRlcih0LGwpfSk6dGhpcy5tYXAudC5yZW5k''@;'; put 'put ''ZXIodCwiIik6bnVsbCE9ZSYmdGhpcy5tYXAudC5yZW5kZXIodCxlKSx0LmNsb3NlTm9kZSgpfXBhcnNlT3Blbih0KXtjb25zdHtuYW1lOmV9PXQ7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZU9wZW4odCksITApOmU9PT10aGlzLnRhZz8odGhpcy5tb2RlbD17fSwhMCk6''@;'; put 'put ''KHRoaXMucGFyc2VyPXRoaXMubWFwW2VdLCEhdGhpcy5wYXJzZXImJih0aGlzLnBhcnNlci5wYXJzZU9wZW4odCksITApKX1wYXJzZVRleHQodCl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dCh0KX1wYXJzZUNsb3NlKHQpe2lmKHRoaXMucGFyc2VyKXtpZighdGhpcy5wYXJz''@;'; put 'put ''ZXIucGFyc2VDbG9zZSh0KSl7c3dpdGNoKHQpe2Nhc2UiciI6e2xldCBlPXRoaXMubW9kZWwucmljaFRleHQ7ZXx8KGU9dGhpcy5tb2RlbC5yaWNoVGV4dD1bXSksZS5wdXNoKHRoaXMucGFyc2VyLm1vZGVsKTticmVha31jYXNlInQiOnRoaXMubW9kZWw9dGhpcy5wYXJzZXIubW9kZWx9dGhp''@;'; put 'put ''cy5wYXJzZXI9dm9pZCAwfXJldHVybiEwfXJldHVybiB0IT09dGhpcy50YWd9fX0seyIuLi9iYXNlLXhmb3JtIjozMiwiLi9waG9uZXRpYy10ZXh0LXhmb3JtIjoxMjEsIi4vcmljaC10ZXh0LXhmb3JtIjoxMjIsIi4vdGV4dC14Zm9ybSI6MTI1fV0sMTI0OltmdW5jdGlvbihzLEUsUyl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbSIpLGE9cygiLi4vYmFzZS14Zm9ybSIpLG89cygiLi9zaGFyZWQtc3RyaW5nLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgYXtjb25zdHJ1Y3RvcihyKXtzdXBlcigpLHRoaXMubW9kZWw9cnx8e3Zh''@;'; put 'put ''bHVlczpbXSxjb3VudDowfSx0aGlzLmhhc2g9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnJpY2g9T2JqZWN0LmNyZWF0ZShudWxsKX1nZXQgc2hhcmVkU3RyaW5nWGZvcm0oKXtyZXR1cm4gdGhpcy5fc2hhcmVkU3RyaW5nWGZvcm18fCh0aGlzLl9zaGFyZWRTdHJpbmdYZm9ybT1uZXcgbyl9''@;'; put 'put ''Z2V0IHZhbHVlcygpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlc31nZXQgdW5pcXVlQ291bnQoKXtyZXR1cm4gdGhpcy5tb2RlbC52YWx1ZXMubGVuZ3RofWdldCBjb3VudCgpe3JldHVybiB0aGlzLm1vZGVsLmNvdW50fWdldFN0cmluZyhyKXtyZXR1cm4gdGhpcy5tb2RlbC52YWx1ZXNbcl19''@;'; put 'put ''YWRkKHIpe3JldHVybiByLnJpY2hUZXh0P3RoaXMuYWRkUmljaFRleHQocik6dGhpcy5hZGRUZXh0KHIpfWFkZFRleHQocil7bGV0IHQ9dGhpcy5oYXNoW3JdO3JldHVybiB2b2lkIDA9PT10JiYodD10aGlzLmhhc2hbcl09dGhpcy5tb2RlbC52YWx1ZXMubGVuZ3RoLHRoaXMubW9kZWwudmFs''@;'; put 'put ''dWVzLnB1c2gocikpLHRoaXMubW9kZWwuY291bnQrKyx0fWFkZFJpY2hUZXh0KHIpe2NvbnN0IHQ9dGhpcy5zaGFyZWRTdHJpbmdYZm9ybS50b1htbChyKTtsZXQgZT10aGlzLnJpY2hbdF07cmV0dXJuIHZvaWQgMD09PWUmJihlPXRoaXMucmljaFt0XT10aGlzLm1vZGVsLnZhbHVlcy5sZW5n''@;'; put 'put ''dGgsdGhpcy5tb2RlbC52YWx1ZXMucHVzaChyKSksdGhpcy5tb2RlbC5jb3VudCsrLGV9cmVuZGVyKHIsdCl7dD10fHx0aGlzLl92YWx1ZXMsci5vcGVuWG1sKGIuU3RkRG9jQXR0cmlidXRlcyksci5vcGVuTm9kZSgic3N0Iix7eG1sbnM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRz''@;'; put 'put ''Lm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIsY291bnQ6dC5jb3VudCx1bmlxdWVDb3VudDp0LnZhbHVlcy5sZW5ndGh9KTtjb25zdCBlPXRoaXMuc2hhcmVkU3RyaW5nWGZvcm07dC52YWx1ZXMuZm9yRWFjaChsPT57ZS5yZW5kZXIocixsKX0pLHIuY2xvc2VOb2RlKCl9cGFyc2VPcGVu''@;'; put 'put ''KHIpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4ociksITA7c3dpdGNoKHIubmFtZSl7Y2FzZSJzc3QiOnJldHVybiEwO2Nhc2Uic2kiOnJldHVybiB0aGlzLnBhcnNlcj10aGlzLnNoYXJlZFN0cmluZ1hmb3JtLHRoaXMucGFyc2VyLnBhcnNlT3BlbihyKSwh''@;'; put 'put ''MDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCB4bWwgbm9kZSBpbiBwYXJzZU9wZW46ICIrSlNPTi5zdHJpbmdpZnkocikpfX1wYXJzZVRleHQocil7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChyKX1wYXJzZUNsb3NlKHIpe2lmKHRoaXMucGFyc2VyKXJl''@;'; put 'put ''dHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKHIpfHwodGhpcy5tb2RlbC52YWx1ZXMucHVzaCh0aGlzLnBhcnNlci5tb2RlbCksdGhpcy5tb2RlbC5jb3VudCsrLHRoaXMucGFyc2VyPXZvaWQgMCksITA7aWYoInNzdCI9PT1yKXJldHVybiExO3Rocm93IG5ldyBFcnJvcigiVW5leHBlY3Rl''@;'; put 'put ''ZCB4bWwgbm9kZSBpbiBwYXJzZUNsb3NlOiAiK3IpfX19LHsiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbSI6MjgsIi4uL2Jhc2UteGZvcm0iOjMyLCIuL3NoYXJlZC1zdHJpbmcteGZvcm0iOjEyM31dLDEyNTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uL2Jh''@;'; put 'put ''c2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBie2dldCB0YWcoKXtyZXR1cm4idCJ9cmVuZGVyKGEsbyl7YS5vcGVuTm9kZSgidCIpLC9eXHN8XG58XHMkLy50ZXN0KG8pJiZhLmFkZEF0dHJpYnV0ZSgieG1sOnNwYWNlIiwicHJlc2VydmUiKSxhLndyaXRlVGV4dChvKSxhLmNs''@;'; put 'put ''b3NlTm9kZSgpfWdldCBtb2RlbCgpe3JldHVybiB0aGlzLl90ZXh0LmpvaW4oIiIpLnJlcGxhY2UoL194KFswLTlBLUZdezR9KV8vZywoYSxvKT0+U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChvLDE2KSkpfXBhcnNlT3BlbihhKXtyZXR1cm4idCI9PT1hLm5hbWUmJih0aGlzLl90ZXh0''@;'; put 'put ''PVtdLCEwKX1wYXJzZVRleHQoYSl7dGhpcy5fdGV4dC5wdXNoKGEpfXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sMTI2OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vLi4vLi4vZG9jL2VudW1zIiksYT1zKCIuLi8uLi8u''@;'; put 'put ''Li91dGlscy91dGlscyIpLG89cygiLi4vYmFzZS14Zm9ybSIpLHI9e2hvcml6b250YWxWYWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiLCJmaWxsIiwiY2VudGVyQ29udGludW91cyIsImRpc3RyaWJ1dGVkIiwianVzdGlmeSJdLnJlZHVjZSgoZSxsKT0+KGVbbF09ITAsZSkse30pLGhv''@;'; put 'put ''cml6b250YWwoZSl7cmV0dXJuIHRoaXMuaG9yaXpvbnRhbFZhbHVlc1tlXT9lOnZvaWQgMH0sdmVydGljYWxWYWx1ZXM6WyJ0b3AiLCJtaWRkbGUiLCJib3R0b20iLCJkaXN0cmlidXRlZCIsImp1c3RpZnkiXS5yZWR1Y2UoKGUsbCk9PihlW2xdPSEwLGUpLHt9KSx2ZXJ0aWNhbChlKXtyZXR1''@;'; put 'put ''cm4ibWlkZGxlIj09PWU/ImNlbnRlciI6dGhpcy52ZXJ0aWNhbFZhbHVlc1tlXT9lOnZvaWQgMH0sd3JhcFRleHQ6ZT0+ISFlfHx2b2lkIDAsc2hyaW5rVG9GaXQ6ZT0+ISFlfHx2b2lkIDAsdGV4dFJvdGF0aW9uOmU9PiJ2ZXJ0aWNhbCI9PT1lfHwoZT1hLnZhbGlkSW50KGUpKT49LTkwJiZl''@;'; put 'put ''PD05MD9lOnZvaWQgMCxpbmRlbnQ6ZT0+KGU9YS52YWxpZEludChlKSxNYXRoLm1heCgwLGUpKSxyZWFkaW5nT3JkZXIoZSl7c3dpdGNoKGUpe2Nhc2UibHRyIjpyZXR1cm4gYi5SZWFkaW5nT3JkZXIuTGVmdFRvUmlnaHQ7Y2FzZSJydGwiOnJldHVybiBiLlJlYWRpbmdPcmRlci5SaWdodFRv''@;'; put 'put ''TGVmdDtkZWZhdWx0OnJldHVybn19fSx0PXt0b1htbChlKXtpZihlPXIudGV4dFJvdGF0aW9uKGUpKXtpZigidmVydGljYWwiPT09ZSlyZXR1cm4gMjU1O2NvbnN0IGw9TWF0aC5yb3VuZChlKTtpZihsPj0wJiZsPD05MClyZXR1cm4gbDtpZihsPDAmJmw+PS05MClyZXR1cm4gOTAtbH19LHRv''@;'; put 'put ''TW9kZWwoZSl7Y29uc3QgbD1hLnZhbGlkSW50KGUpO2lmKHZvaWQgMCE9PWwpe2lmKDI1NT09PWwpcmV0dXJuInZlcnRpY2FsIjtpZihsPj0wJiZsPD05MClyZXR1cm4gbDtpZihsPjkwJiZsPD0xODApcmV0dXJuIDkwLWx9fX07RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgb3tnZXQgdGFnKCl7''@;'; put 'put ''cmV0dXJuImFsaWdubWVudCJ9cmVuZGVyKGUsbCl7ZS5hZGRSb2xsYmFjaygpLGUub3Blbk5vZGUoImFsaWdubWVudCIpO2xldCBuPSExO2Z1bmN0aW9uIGkoaCxmKXtmJiYoZS5hZGRBdHRyaWJ1dGUoaCxmKSxuPSEwKX1pKCJob3Jpem9udGFsIixyLmhvcml6b250YWwobC5ob3Jpem9udGFs''@;'; put 'put ''KSksaSgidmVydGljYWwiLHIudmVydGljYWwobC52ZXJ0aWNhbCkpLGkoIndyYXBUZXh0IiwhIXIud3JhcFRleHQobC53cmFwVGV4dCkmJiIxIiksaSgic2hyaW5rVG9GaXQiLCEhci5zaHJpbmtUb0ZpdChsLnNocmlua1RvRml0KSYmIjEiKSxpKCJpbmRlbnQiLHIuaW5kZW50KGwuaW5kZW50''@;'; put 'put ''KSksaSgidGV4dFJvdGF0aW9uIix0LnRvWG1sKGwudGV4dFJvdGF0aW9uKSksaSgicmVhZGluZ09yZGVyIixyLnJlYWRpbmdPcmRlcihsLnJlYWRpbmdPcmRlcikpLGUuY2xvc2VOb2RlKCksbj9lLmNvbW1pdCgpOmUucm9sbGJhY2soKX1wYXJzZU9wZW4oZSl7Y29uc3QgbD17fTtsZXQgbj0h''@;'; put 'put ''MTtmdW5jdGlvbiBpKGgsZix1KXtoJiYobFtmXT11LG49ITApfWkoZS5hdHRyaWJ1dGVzLmhvcml6b250YWwsImhvcml6b250YWwiLGUuYXR0cmlidXRlcy5ob3Jpem9udGFsKSxpKGUuYXR0cmlidXRlcy52ZXJ0aWNhbCwidmVydGljYWwiLCJjZW50ZXIiPT09ZS5hdHRyaWJ1dGVzLnZlcnRp''@;'; put 'put ''Y2FsPyJtaWRkbGUiOmUuYXR0cmlidXRlcy52ZXJ0aWNhbCksaShlLmF0dHJpYnV0ZXMud3JhcFRleHQsIndyYXBUZXh0IixhLnBhcnNlQm9vbGVhbihlLmF0dHJpYnV0ZXMud3JhcFRleHQpKSxpKGUuYXR0cmlidXRlcy5zaHJpbmtUb0ZpdCwic2hyaW5rVG9GaXQiLGEucGFyc2VCb29sZWFu''@;'; put 'put ''KGUuYXR0cmlidXRlcy5zaHJpbmtUb0ZpdCkpLGkoZS5hdHRyaWJ1dGVzLmluZGVudCwiaW5kZW50IixwYXJzZUludChlLmF0dHJpYnV0ZXMuaW5kZW50LDEwKSksaShlLmF0dHJpYnV0ZXMudGV4dFJvdGF0aW9uLCJ0ZXh0Um90YXRpb24iLHQudG9Nb2RlbChlLmF0dHJpYnV0ZXMudGV4dFJv''@;'; put 'put ''dGF0aW9uKSksaShlLmF0dHJpYnV0ZXMucmVhZGluZ09yZGVyLCJyZWFkaW5nT3JkZXIiLCIyIj09PWUuYXR0cmlidXRlcy5yZWFkaW5nT3JkZXI/InJ0bCI6Imx0ciIpLHRoaXMubW9kZWw9bj9sOm51bGx9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uLy4uLy4u''@;'; put 'put ''L2RvYy9lbnVtcyI6NywiLi4vLi4vLi4vdXRpbHMvdXRpbHMiOjI3LCIuLi9iYXNlLXhmb3JtIjozMn1dLDEyNzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uL2Jhc2UteGZvcm0iKSxhPXMoIi4uLy4uLy4uL3V0aWxzL3V0aWxzIiksbz1zKCIuL2NvbG9yLXhm''@;'; put 'put ''b3JtIik7Y2xhc3MgciBleHRlbmRzIGJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLm5hbWU9ZSx0aGlzLm1hcD17Y29sb3I6bmV3IG99fWdldCB0YWcoKXtyZXR1cm4gdGhpcy5uYW1lfXJlbmRlcihlLGwsbil7Y29uc3QgaT1sJiZsLmNvbG9yfHxufHx0aGlzLmRlZmF1bHRDb2xvcjtl''@;'; put 'put ''Lm9wZW5Ob2RlKHRoaXMubmFtZSksbCYmbC5zdHlsZSYmKGUuYWRkQXR0cmlidXRlKCJzdHlsZSIsbC5zdHlsZSksaSYmdGhpcy5tYXAuY29sb3IucmVuZGVyKGUsaSkpLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9w''@;'; put 'put ''ZW4oZSksITA7c3dpdGNoKGUubmFtZSl7Y2FzZSB0aGlzLm5hbWU6e2NvbnN0e3N0eWxlOmx9PWUuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5tb2RlbD1sP3tzdHlsZTpsfTp2b2lkIDAsITB9Y2FzZSJjb2xvciI6cmV0dXJuIHRoaXMucGFyc2VyPXRoaXMubWFwLmNvbG9yLHRoaXMucGFyc2Vy''@;'; put 'put ''LnBhcnNlT3BlbihlKSwhMDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQoZSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChlKX1wYXJzZUNsb3NlKGUpe3JldHVybiB0aGlzLnBhcnNlcj8odGhpcy5wYXJzZXIucGFyc2VDbG9zZShlKXx8KHRoaXMucGFyc2VyPXZvaWQg''@;'; put 'put ''MCksITApOihlPT09dGhpcy5uYW1lJiZ0aGlzLm1hcC5jb2xvci5tb2RlbCYmKHRoaXMubW9kZWx8fCh0aGlzLm1vZGVsPXt9KSx0aGlzLm1vZGVsLmNvbG9yPXRoaXMubWFwLmNvbG9yLm1vZGVsKSwhMSl9dmFsaWRTdHlsZShlKXtyZXR1cm4gci52YWxpZFN0eWxlVmFsdWVzW2VdfX1yLnZh''@;'; put 'put ''bGlkU3R5bGVWYWx1ZXM9WyJ0aGluIiwiZGFzaGVkIiwiZG90dGVkIiwiZGFzaERvdCIsImhhaXIiLCJkYXNoRG90RG90Iiwic2xhbnREYXNoRG90IiwibWVkaXVtRGFzaGVkIiwibWVkaXVtRGFzaERvdERvdCIsIm1lZGl1bURhc2hEb3QiLCJtZWRpdW0iLCJkb3VibGUiLCJ0aGljayJdLnJl''@;'; put 'put ''ZHVjZSgodCxlKT0+KHRbZV09ITAsdCkse30pLEUuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGJ7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXt0b3A6bmV3IHIoInRvcCIpLGxlZnQ6bmV3IHIoImxlZnQiKSxib3R0b206bmV3IHIoImJvdHRvbSIpLHJpZ2h0Om5ldyByKCJyaWdodCIp''@;'; put 'put ''LGRpYWdvbmFsOm5ldyByKCJkaWFnb25hbCIpfX1yZW5kZXIodCxlKXtjb25zdHtjb2xvcjpsfT1lO2Z1bmN0aW9uIG4oaSxoKXtpJiYhaS5jb2xvciYmZS5jb2xvciYmKGk9ey4uLmksY29sb3I6ZS5jb2xvcn0pLGgucmVuZGVyKHQsaSxsKX10Lm9wZW5Ob2RlKCJib3JkZXIiKSxlLmRpYWdv''@;'; put 'put ''bmFsJiZlLmRpYWdvbmFsLnN0eWxlJiYoZS5kaWFnb25hbC51cCYmdC5hZGRBdHRyaWJ1dGUoImRpYWdvbmFsVXAiLCIxIiksZS5kaWFnb25hbC5kb3duJiZ0LmFkZEF0dHJpYnV0ZSgiZGlhZ29uYWxEb3duIiwiMSIpKSxuKGUubGVmdCx0aGlzLm1hcC5sZWZ0KSxuKGUucmlnaHQsdGhpcy5t''@;'; put 'put ''YXAucmlnaHQpLG4oZS50b3AsdGhpcy5tYXAudG9wKSxuKGUuYm90dG9tLHRoaXMubWFwLmJvdHRvbSksbihlLmRpYWdvbmFsLHRoaXMubWFwLmRpYWdvbmFsKSx0LmNsb3NlTm9kZSgpfXBhcnNlT3Blbih0KXtyZXR1cm4gdGhpcy5wYXJzZXI/KHRoaXMucGFyc2VyLnBhcnNlT3Blbih0KSwh''@;'; put 'put ''MCk6ImJvcmRlciI9PT10Lm5hbWU/KHRoaXMucmVzZXQoKSx0aGlzLmRpYWdvbmFsVXA9YS5wYXJzZUJvb2xlYW4odC5hdHRyaWJ1dGVzLmRpYWdvbmFsVXApLHRoaXMuZGlhZ29uYWxEb3duPWEucGFyc2VCb29sZWFuKHQuYXR0cmlidXRlcy5kaWFnb25hbERvd24pLCEwKToodGhpcy5wYXJz''@;'; put 'put ''ZXI9dGhpcy5tYXBbdC5uYW1lXSwhIXRoaXMucGFyc2VyJiYodGhpcy5wYXJzZXIucGFyc2VPcGVuKHQpLCEwKSl9cGFyc2VUZXh0KHQpe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQodCl9cGFyc2VDbG9zZSh0KXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIu''@;'; put 'put ''cGFyc2VDbG9zZSh0KXx8KHRoaXMucGFyc2VyPXZvaWQgMCksITA7aWYoImJvcmRlciI9PT10KXtjb25zdCBlPXRoaXMubW9kZWw9e30sbD1mdW5jdGlvbihuLGksaCl7aSYmKGgmJk9iamVjdC5hc3NpZ24oaSxoKSxlW25dPWkpfTtsKCJsZWZ0Iix0aGlzLm1hcC5sZWZ0Lm1vZGVsKSxsKCJy''@;'; put 'put ''aWdodCIsdGhpcy5tYXAucmlnaHQubW9kZWwpLGwoInRvcCIsdGhpcy5tYXAudG9wLm1vZGVsKSxsKCJib3R0b20iLHRoaXMubWFwLmJvdHRvbS5tb2RlbCksbCgiZGlhZ29uYWwiLHRoaXMubWFwLmRpYWdvbmFsLm1vZGVsLHt1cDp0aGlzLmRpYWdvbmFsVXAsZG93bjp0aGlzLmRpYWdvbmFs''@;'; put 'put ''RG93bn0pfXJldHVybiExfX19LHsiLi4vLi4vLi4vdXRpbHMvdXRpbHMiOjI3LCIuLi9iYXNlLXhmb3JtIjozMiwiLi9jb2xvci14Zm9ybSI6MTI4fV0sMTI4OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBl''@;'; put 'put ''eHRlbmRzIGJ7Y29uc3RydWN0b3IoYSl7c3VwZXIoKSx0aGlzLm5hbWU9YXx8ImNvbG9yIn1nZXQgdGFnKCl7cmV0dXJuIHRoaXMubmFtZX1yZW5kZXIoYSxvKXtyZXR1cm4hIW8mJihhLm9wZW5Ob2RlKHRoaXMubmFtZSksby5hcmdiP2EuYWRkQXR0cmlidXRlKCJyZ2IiLG8uYXJnYik6dm9p''@;'; put 'put ''ZCAwIT09by50aGVtZT8oYS5hZGRBdHRyaWJ1dGUoInRoZW1lIixvLnRoZW1lKSx2b2lkIDAhPT1vLnRpbnQmJmEuYWRkQXR0cmlidXRlKCJ0aW50IixvLnRpbnQpKTp2b2lkIDAhPT1vLmluZGV4ZWQ/YS5hZGRBdHRyaWJ1dGUoImluZGV4ZWQiLG8uaW5kZXhlZCk6YS5hZGRBdHRyaWJ1dGUo''@;'; put 'put ''ImF1dG8iLCIxIiksYS5jbG9zZU5vZGUoKSwhMCl9cGFyc2VPcGVuKGEpe3JldHVybiBhLm5hbWU9PT10aGlzLm5hbWUmJihhLmF0dHJpYnV0ZXMucmdiP3RoaXMubW9kZWw9e2FyZ2I6YS5hdHRyaWJ1dGVzLnJnYn06YS5hdHRyaWJ1dGVzLnRoZW1lPyh0aGlzLm1vZGVsPXt0aGVtZTpwYXJz''@;'; put 'put ''ZUludChhLmF0dHJpYnV0ZXMudGhlbWUsMTApfSxhLmF0dHJpYnV0ZXMudGludCYmKHRoaXMubW9kZWwudGludD1wYXJzZUZsb2F0KGEuYXR0cmlidXRlcy50aW50KSkpOnRoaXMubW9kZWw9YS5hdHRyaWJ1dGVzLmluZGV4ZWQ/e2luZGV4ZWQ6cGFyc2VJbnQoYS5hdHRyaWJ1dGVzLmluZGV4''@;'; put 'put ''ZWQsMTApfTp2b2lkIDAsITApfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0seyIuLi9iYXNlLXhmb3JtIjozMn1dLDEyOTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uL2Jhc2UteGZvcm0iKSxhPXMoIi4vYWxpZ25tZW50LXhmb3JtIiks''@;'; put 'put ''bz1zKCIuL2JvcmRlci14Zm9ybSIpLHI9cygiLi9maWxsLXhmb3JtIiksdD1zKCIuL2ZvbnQteGZvcm0iKSxlPXMoIi4vbnVtZm10LXhmb3JtIiksbD1zKCIuL3Byb3RlY3Rpb24teGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBie2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1h''@;'; put 'put ''cD17YWxpZ25tZW50Om5ldyBhLGJvcmRlcjpuZXcgbyxmaWxsOm5ldyByLGZvbnQ6bmV3IHQsbnVtRm10Om5ldyBlLHByb3RlY3Rpb246bmV3IGx9fWdldCB0YWcoKXtyZXR1cm4iZHhmIn1yZW5kZXIobixpKXtuLm9wZW5Ob2RlKHRoaXMudGFnKSxpLmZvbnQmJnRoaXMubWFwLmZvbnQucmVu''@;'; put 'put ''ZGVyKG4saS5mb250KSxpLm51bUZtdCYmaS5udW1GbXRJZCYmdGhpcy5tYXAubnVtRm10LnJlbmRlcihuLHtpZDppLm51bUZtdElkLGZvcm1hdENvZGU6aS5udW1GbXR9KSxpLmZpbGwmJnRoaXMubWFwLmZpbGwucmVuZGVyKG4saS5maWxsKSxpLmFsaWdubWVudCYmdGhpcy5tYXAuYWxpZ25t''@;'; put 'put ''ZW50LnJlbmRlcihuLGkuYWxpZ25tZW50KSxpLmJvcmRlciYmdGhpcy5tYXAuYm9yZGVyLnJlbmRlcihuLGkuYm9yZGVyKSxpLnByb3RlY3Rpb24mJnRoaXMubWFwLnByb3RlY3Rpb24ucmVuZGVyKG4saS5wcm90ZWN0aW9uKSxuLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihuKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5wYXJzZXI/KHRoaXMucGFyc2VyLnBhcnNlT3BlbihuKSwhMCk6bi5uYW1lPT09dGhpcy50YWc/KHRoaXMucmVzZXQoKSwhMCk6KHRoaXMucGFyc2VyPXRoaXMubWFwW24ubmFtZV0sdGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlT3BlbihuKSwhMCl9cGFyc2VUZXh0KG4pe3RoaXMu''@;'; put 'put ''cGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQobil9cGFyc2VDbG9zZShuKXtyZXR1cm4gdGhpcy5wYXJzZXI/KHRoaXMucGFyc2VyLnBhcnNlQ2xvc2Uobil8fCh0aGlzLnBhcnNlcj12b2lkIDApLCEwKTpuIT09dGhpcy50YWd8fCh0aGlzLm1vZGVsPXthbGlnbm1lbnQ6dGhpcy5tYXAu''@;'; put 'put ''YWxpZ25tZW50Lm1vZGVsLGJvcmRlcjp0aGlzLm1hcC5ib3JkZXIubW9kZWwsZmlsbDp0aGlzLm1hcC5maWxsLm1vZGVsLGZvbnQ6dGhpcy5tYXAuZm9udC5tb2RlbCxudW1GbXQ6dGhpcy5tYXAubnVtRm10Lm1vZGVsLHByb3RlY3Rpb246dGhpcy5tYXAucHJvdGVjdGlvbi5tb2RlbH0sITEp''@;'; put 'put ''fX19LHsiLi4vYmFzZS14Zm9ybSI6MzIsIi4vYWxpZ25tZW50LXhmb3JtIjoxMjYsIi4vYm9yZGVyLXhmb3JtIjoxMjcsIi4vZmlsbC14Zm9ybSI6MTMwLCIuL2ZvbnQteGZvcm0iOjEzMSwiLi9udW1mbXQteGZvcm0iOjEzMiwiLi9wcm90ZWN0aW9uLXhmb3JtIjoxMzN9XSwxMzA6W2Z1bmN0''@;'; put 'put ''aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi9iYXNlLXhmb3JtIiksYT1zKCIuL2NvbG9yLXhmb3JtIik7Y2xhc3MgbyBleHRlbmRzIGJ7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtjb2xvcjpuZXcgYX19Z2V0IHRhZygpe3JldHVybiJzdG9wIn1yZW5kZXIo''@;'; put 'put ''bixpKXtuLm9wZW5Ob2RlKCJzdG9wIiksbi5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixpLnBvc2l0aW9uKSx0aGlzLm1hcC5jb2xvci5yZW5kZXIobixpLmNvbG9yKSxuLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihuKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVu''@;'; put 'put ''KG4pLCEwO3N3aXRjaChuLm5hbWUpe2Nhc2Uic3RvcCI6cmV0dXJuIHRoaXMubW9kZWw9e3Bvc2l0aW9uOnBhcnNlRmxvYXQobi5hdHRyaWJ1dGVzLnBvc2l0aW9uKX0sITA7Y2FzZSJjb2xvciI6cmV0dXJuIHRoaXMucGFyc2VyPXRoaXMubWFwLmNvbG9yLHRoaXMucGFyc2VyLnBhcnNlT3Bl''@;'; put 'put ''bihuKSwhMDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZShuKXtyZXR1cm4hIXRoaXMucGFyc2VyJiYodGhpcy5wYXJzZXIucGFyc2VDbG9zZShuKXx8KHRoaXMubW9kZWwuY29sb3I9dGhpcy5wYXJzZXIubW9kZWwsdGhpcy5wYXJzZXI9dm9pZCAwKSwhMCl9fWNs''@;'; put 'put ''YXNzIHIgZXh0ZW5kcyBie2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17ZmdDb2xvcjpuZXcgYSgiZmdDb2xvciIpLGJnQ29sb3I6bmV3IGEoImJnQ29sb3IiKX19Z2V0IG5hbWUoKXtyZXR1cm4icGF0dGVybiJ9Z2V0IHRhZygpe3JldHVybiJwYXR0ZXJuRmlsbCJ9cmVuZGVyKG4s''@;'; put 'put ''aSl7bi5vcGVuTm9kZSgicGF0dGVybkZpbGwiKSxuLmFkZEF0dHJpYnV0ZSgicGF0dGVyblR5cGUiLGkucGF0dGVybiksaS5mZ0NvbG9yJiZ0aGlzLm1hcC5mZ0NvbG9yLnJlbmRlcihuLGkuZmdDb2xvciksaS5iZ0NvbG9yJiZ0aGlzLm1hcC5iZ0NvbG9yLnJlbmRlcihuLGkuYmdDb2xvciks''@;'; put 'put ''bi5jbG9zZU5vZGUoKX1wYXJzZU9wZW4obil7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZU9wZW4obiksITApOiJwYXR0ZXJuRmlsbCI9PT1uLm5hbWU/KHRoaXMubW9kZWw9e3R5cGU6InBhdHRlcm4iLHBhdHRlcm46bi5hdHRyaWJ1dGVzLnBhdHRlcm5UeXBlfSwhMCk6''@;'; put 'put ''KHRoaXMucGFyc2VyPXRoaXMubWFwW24ubmFtZV0sISF0aGlzLnBhcnNlciYmKHRoaXMucGFyc2VyLnBhcnNlT3BlbihuKSwhMCkpfXBhcnNlVGV4dChuKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KG4pfXBhcnNlQ2xvc2Uobil7cmV0dXJuISF0aGlzLnBhcnNlciYmKHRo''@;'; put 'put ''aXMucGFyc2VyLnBhcnNlQ2xvc2Uobil8fCh0aGlzLnBhcnNlci5tb2RlbCYmKHRoaXMubW9kZWxbbl09dGhpcy5wYXJzZXIubW9kZWwpLHRoaXMucGFyc2VyPXZvaWQgMCksITApfX1jbGFzcyB0IGV4dGVuZHMgYntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e3N0b3A6bmV3IG99''@;'; put 'put ''fWdldCBuYW1lKCl7cmV0dXJuImdyYWRpZW50In1nZXQgdGFnKCl7cmV0dXJuImdyYWRpZW50RmlsbCJ9cmVuZGVyKG4saSl7c3dpdGNoKG4ub3Blbk5vZGUoImdyYWRpZW50RmlsbCIpLGkuZ3JhZGllbnQpe2Nhc2UiYW5nbGUiOm4uYWRkQXR0cmlidXRlKCJkZWdyZWUiLGkuZGVncmVlKTti''@;'; put 'put ''cmVhaztjYXNlInBhdGgiOm4uYWRkQXR0cmlidXRlKCJ0eXBlIiwicGF0aCIpLGkuY2VudGVyLmxlZnQmJihuLmFkZEF0dHJpYnV0ZSgibGVmdCIsaS5jZW50ZXIubGVmdCksdm9pZCAwPT09aS5jZW50ZXIucmlnaHQmJm4uYWRkQXR0cmlidXRlKCJyaWdodCIsaS5jZW50ZXIubGVmdCkpLGku''@;'; put 'put ''Y2VudGVyLnJpZ2h0JiZuLmFkZEF0dHJpYnV0ZSgicmlnaHQiLGkuY2VudGVyLnJpZ2h0KSxpLmNlbnRlci50b3AmJihuLmFkZEF0dHJpYnV0ZSgidG9wIixpLmNlbnRlci50b3ApLHZvaWQgMD09PWkuY2VudGVyLmJvdHRvbSYmbi5hZGRBdHRyaWJ1dGUoImJvdHRvbSIsaS5jZW50ZXIudG9w''@;'; put 'put ''KSksaS5jZW50ZXIuYm90dG9tJiZuLmFkZEF0dHJpYnV0ZSgiYm90dG9tIixpLmNlbnRlci5ib3R0b20pfWNvbnN0IGg9dGhpcy5tYXAuc3RvcDtpLnN0b3BzLmZvckVhY2goZj0+e2gucmVuZGVyKG4sZil9KSxuLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihuKXtpZih0aGlzLnBhcnNlcilyZXR1''@;'; put 'put ''cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKG4pLCEwO3N3aXRjaChuLm5hbWUpe2Nhc2UiZ3JhZGllbnRGaWxsIjp7Y29uc3QgaT10aGlzLm1vZGVsPXtzdG9wczpbXX07cmV0dXJuIG4uYXR0cmlidXRlcy5kZWdyZWU/KGkuZ3JhZGllbnQ9ImFuZ2xlIixpLmRlZ3JlZT1wYXJzZUludChuLmF0''@;'; put 'put ''dHJpYnV0ZXMuZGVncmVlLDEwKSk6InBhdGgiPT09bi5hdHRyaWJ1dGVzLnR5cGUmJihpLmdyYWRpZW50PSJwYXRoIixpLmNlbnRlcj17bGVmdDpuLmF0dHJpYnV0ZXMubGVmdD9wYXJzZUZsb2F0KG4uYXR0cmlidXRlcy5sZWZ0KTowLHRvcDpuLmF0dHJpYnV0ZXMudG9wP3BhcnNlRmxvYXQo''@;'; put 'put ''bi5hdHRyaWJ1dGVzLnRvcCk6MH0sbi5hdHRyaWJ1dGVzLnJpZ2h0IT09bi5hdHRyaWJ1dGVzLmxlZnQmJihpLmNlbnRlci5yaWdodD1uLmF0dHJpYnV0ZXMucmlnaHQ/cGFyc2VGbG9hdChuLmF0dHJpYnV0ZXMucmlnaHQpOjApLG4uYXR0cmlidXRlcy5ib3R0b20hPT1uLmF0dHJpYnV0ZXMu''@;'; put 'put ''dG9wJiYoaS5jZW50ZXIuYm90dG9tPW4uYXR0cmlidXRlcy5ib3R0b20/cGFyc2VGbG9hdChuLmF0dHJpYnV0ZXMuYm90dG9tKTowKSksITB9Y2FzZSJzdG9wIjpyZXR1cm4gdGhpcy5wYXJzZXI9dGhpcy5tYXAuc3RvcCx0aGlzLnBhcnNlci5wYXJzZU9wZW4obiksITA7ZGVmYXVsdDpyZXR1''@;'; put 'put ''cm4hMX19cGFyc2VUZXh0KG4pe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQobil9cGFyc2VDbG9zZShuKXtyZXR1cm4hIXRoaXMucGFyc2VyJiYodGhpcy5wYXJzZXIucGFyc2VDbG9zZShuKXx8KHRoaXMubW9kZWwuc3RvcHMucHVzaCh0aGlzLnBhcnNlci5tb2RlbCksdGhp''@;'; put 'put ''cy5wYXJzZXI9dm9pZCAwKSwhMCl9fWNsYXNzIGUgZXh0ZW5kcyBie2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17cGF0dGVybkZpbGw6bmV3IHIsZ3JhZGllbnRGaWxsOm5ldyB0fX1nZXQgdGFnKCl7cmV0dXJuImZpbGwifXJlbmRlcihuLGkpe3N3aXRjaChuLmFkZFJvbGxiYWNr''@;'; put 'put ''KCksbi5vcGVuTm9kZSgiZmlsbCIpLGkudHlwZSl7Y2FzZSJwYXR0ZXJuIjp0aGlzLm1hcC5wYXR0ZXJuRmlsbC5yZW5kZXIobixpKTticmVhaztjYXNlImdyYWRpZW50Ijp0aGlzLm1hcC5ncmFkaWVudEZpbGwucmVuZGVyKG4saSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdm9pZCBuLnJvbGxi''@;'; put 'put ''YWNrKCl9bi5jbG9zZU5vZGUoKSxuLmNvbW1pdCgpfXBhcnNlT3BlbihuKXtyZXR1cm4gdGhpcy5wYXJzZXI/KHRoaXMucGFyc2VyLnBhcnNlT3BlbihuKSwhMCk6ImZpbGwiPT09bi5uYW1lPyh0aGlzLm1vZGVsPXt9LCEwKToodGhpcy5wYXJzZXI9dGhpcy5tYXBbbi5uYW1lXSwhIXRoaXMu''@;'; put 'put ''cGFyc2VyJiYodGhpcy5wYXJzZXIucGFyc2VPcGVuKG4pLCEwKSl9cGFyc2VUZXh0KG4pe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQobil9cGFyc2VDbG9zZShuKXtyZXR1cm4hIXRoaXMucGFyc2VyJiYodGhpcy5wYXJzZXIucGFyc2VDbG9zZShuKXx8KHRoaXMubW9kZWw9''@;'; put 'put ''dGhpcy5wYXJzZXIubW9kZWwsdGhpcy5tb2RlbC50eXBlPXRoaXMucGFyc2VyLm5hbWUsdGhpcy5wYXJzZXI9dm9pZCAwKSwhMCl9dmFsaWRTdHlsZShuKXtyZXR1cm4gZS52YWxpZFBhdHRlcm5WYWx1ZXNbbl19fWUudmFsaWRQYXR0ZXJuVmFsdWVzPVsibm9uZSIsInNvbGlkIiwiZGFya1Zl''@;'; put 'put ''cnRpY2FsIiwiZGFya0dyYXkiLCJtZWRpdW1HcmF5IiwibGlnaHRHcmF5IiwiZ3JheTEyNSIsImdyYXkwNjI1IiwiZGFya0hvcml6b250YWwiLCJkYXJrVmVydGljYWwiLCJkYXJrRG93biIsImRhcmtVcCIsImRhcmtHcmlkIiwiZGFya1RyZWxsaXMiLCJsaWdodEhvcml6b250YWwiLCJsaWdo''@;'; put 'put ''dFZlcnRpY2FsIiwibGlnaHREb3duIiwibGlnaHRVcCIsImxpZ2h0R3JpZCIsImxpZ2h0VHJlbGxpcyIsImxpZ2h0R3JpZCJdLnJlZHVjZSgobCxuKT0+KGxbbl09ITAsbCkse30pLGUuU3RvcFhmb3JtPW8sZS5QYXR0ZXJuRmlsbFhmb3JtPXIsZS5HcmFkaWVudEZpbGxYZm9ybT10LEUuZXhw''@;'; put 'put ''b3J0cz1lfSx7Ii4uL2Jhc2UteGZvcm0iOjMyLCIuL2NvbG9yLXhmb3JtIjoxMjh9XSwxMzE6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuL2NvbG9yLXhmb3JtIiksYT1zKCIuLi9zaW1wbGUvYm9vbGVhbi14Zm9ybSIpLG89cygiLi4vc2ltcGxlL2ludGVnZXIt''@;'; put 'put ''eGZvcm0iKSxyPXMoIi4uL3NpbXBsZS9zdHJpbmcteGZvcm0iKSx0PXMoIi4vdW5kZXJsaW5lLXhmb3JtIiksZT1zKCIuLi8uLi8uLi91dGlscy91bmRlci1kYXNoIiksbD1zKCIuLi9iYXNlLXhmb3JtIik7Y2xhc3MgbiBleHRlbmRzIGx7Y29uc3RydWN0b3IoaCl7c3VwZXIoKSx0aGlzLm9w''@;'; put 'put ''dGlvbnM9aHx8bi5PUFRJT05TLHRoaXMubWFwPXtiOntwcm9wOiJib2xkIix4Zm9ybTpuZXcgYSh7dGFnOiJiIixhdHRyOiJ2YWwifSl9LGk6e3Byb3A6Iml0YWxpYyIseGZvcm06bmV3IGEoe3RhZzoiaSIsYXR0cjoidmFsIn0pfSx1Ontwcm9wOiJ1bmRlcmxpbmUiLHhmb3JtOm5ldyB0fSxj''@;'; put 'put ''aGFyc2V0Ontwcm9wOiJjaGFyc2V0Iix4Zm9ybTpuZXcgbyh7dGFnOiJjaGFyc2V0IixhdHRyOiJ2YWwifSl9LGNvbG9yOntwcm9wOiJjb2xvciIseGZvcm06bmV3IGJ9LGNvbmRlbnNlOntwcm9wOiJjb25kZW5zZSIseGZvcm06bmV3IGEoe3RhZzoiY29uZGVuc2UiLGF0dHI6InZhbCJ9KX0s''@;'; put 'put ''ZXh0ZW5kOntwcm9wOiJleHRlbmQiLHhmb3JtOm5ldyBhKHt0YWc6ImV4dGVuZCIsYXR0cjoidmFsIn0pfSxmYW1pbHk6e3Byb3A6ImZhbWlseSIseGZvcm06bmV3IG8oe3RhZzoiZmFtaWx5IixhdHRyOiJ2YWwifSl9LG91dGxpbmU6e3Byb3A6Im91dGxpbmUiLHhmb3JtOm5ldyBhKHt0YWc6''@;'; put 'put ''Im91dGxpbmUiLGF0dHI6InZhbCJ9KX0sdmVydEFsaWduOntwcm9wOiJ2ZXJ0QWxpZ24iLHhmb3JtOm5ldyByKHt0YWc6InZlcnRBbGlnbiIsYXR0cjoidmFsIn0pfSxzY2hlbWU6e3Byb3A6InNjaGVtZSIseGZvcm06bmV3IHIoe3RhZzoic2NoZW1lIixhdHRyOiJ2YWwifSl9LHNoYWRvdzp7''@;'; put 'put ''cHJvcDoic2hhZG93Iix4Zm9ybTpuZXcgYSh7dGFnOiJzaGFkb3ciLGF0dHI6InZhbCJ9KX0sc3RyaWtlOntwcm9wOiJzdHJpa2UiLHhmb3JtOm5ldyBhKHt0YWc6InN0cmlrZSIsYXR0cjoidmFsIn0pfSxzejp7cHJvcDoic2l6ZSIseGZvcm06bmV3IG8oe3RhZzoic3oiLGF0dHI6InZhbCJ9''@;'; put 'put ''KX19LHRoaXMubWFwW3RoaXMub3B0aW9ucy5mb250TmFtZVRhZ109e3Byb3A6Im5hbWUiLHhmb3JtOm5ldyByKHt0YWc6dGhpcy5vcHRpb25zLmZvbnROYW1lVGFnLGF0dHI6InZhbCJ9KX19Z2V0IHRhZygpe3JldHVybiB0aGlzLm9wdGlvbnMudGFnTmFtZX1yZW5kZXIoaCxmKXtjb25zdHtt''@;'; put 'put ''YXA6dX09dGhpcztoLm9wZW5Ob2RlKHRoaXMub3B0aW9ucy50YWdOYW1lKSxlLmVhY2godGhpcy5tYXAsKHAsZCk9Pnt1W2RdLnhmb3JtLnJlbmRlcihoLGZbcC5wcm9wXSl9KSxoLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihoKXtyZXR1cm4gdGhpcy5wYXJzZXI/KHRoaXMucGFyc2VyLnBhcnNl''@;'; put 'put ''T3BlbihoKSwhMCk6dGhpcy5tYXBbaC5uYW1lXT8odGhpcy5wYXJzZXI9dGhpcy5tYXBbaC5uYW1lXS54Zm9ybSx0aGlzLnBhcnNlci5wYXJzZU9wZW4oaCkpOmgubmFtZT09PXRoaXMub3B0aW9ucy50YWdOYW1lJiYodGhpcy5tb2RlbD17fSwhMCl9cGFyc2VUZXh0KGgpe3RoaXMucGFyc2Vy''@;'; put 'put ''JiZ0aGlzLnBhcnNlci5wYXJzZVRleHQoaCl9cGFyc2VDbG9zZShoKXtyZXR1cm4gdGhpcy5wYXJzZXImJiF0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGgpPyh0aGlzLnBhcnNlci5tb2RlbCYmKHRoaXMubW9kZWxbdGhpcy5tYXBbaF0ucHJvcF09dGhpcy5wYXJzZXIubW9kZWwpLHRoaXMucGFy''@;'; put 'put ''c2VyPXZvaWQgMCwhMCk6aCE9PXRoaXMub3B0aW9ucy50YWdOYW1lfX1uLk9QVElPTlM9e3RhZ05hbWU6ImZvbnQiLGZvbnROYW1lVGFnOiJuYW1lIn0sRS5leHBvcnRzPW59LHsiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaCI6MjYsIi4uL2Jhc2UteGZvcm0iOjMyLCIuLi9zaW1wbGUvYm9v''@;'; put 'put ''bGVhbi14Zm9ybSI6MTE2LCIuLi9zaW1wbGUvaW50ZWdlci14Zm9ybSI6MTE4LCIuLi9zaW1wbGUvc3RyaW5nLXhmb3JtIjoxMTksIi4vY29sb3IteGZvcm0iOjEyOCwiLi91bmRlcmxpbmUteGZvcm0iOjEzNn1dLDEzMjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMo''@;'; put 'put ''Ii4uLy4uLy4uL3V0aWxzL3VuZGVyLWRhc2giKSxhPXMoIi4uLy4uL2RlZmF1bHRudW1mb3JtYXRzIiksbz1zKCIuLi9iYXNlLXhmb3JtIikscj1mdW5jdGlvbigpe2NvbnN0IGU9e307cmV0dXJuIGIuZWFjaChhLChsLG4pPT57bC5mJiYoZVtsLmZdPXBhcnNlSW50KG4sMTApKX0pLGV9KCk7''@;'; put 'put ''Y2xhc3MgdCBleHRlbmRzIG97Y29uc3RydWN0b3IobCxuKXtzdXBlcigpLHRoaXMuaWQ9bCx0aGlzLmZvcm1hdENvZGU9bn1nZXQgdGFnKCl7cmV0dXJuIm51bUZtdCJ9cmVuZGVyKGwsbil7bC5sZWFmTm9kZSgibnVtRm10Iix7bnVtRm10SWQ6bi5pZCxmb3JtYXRDb2RlOm4uZm9ybWF0Q29k''@;'; put 'put ''ZX0pfXBhcnNlT3BlbihsKXtyZXR1cm4ibnVtRm10Ij09PWwubmFtZSYmKHRoaXMubW9kZWw9e2lkOnBhcnNlSW50KGwuYXR0cmlidXRlcy5udW1GbXRJZCwxMCksZm9ybWF0Q29kZTpsLmF0dHJpYnV0ZXMuZm9ybWF0Q29kZS5yZXBsYWNlKC9bXFxdKC4pL2csIiQxIil9LCEwKX1wYXJzZVRl''@;'; put 'put ''eHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX10LmdldERlZmF1bHRGbXRJZD1mdW5jdGlvbihlKXtyZXR1cm4gcltlXX0sdC5nZXREZWZhdWx0Rm10Q29kZT1mdW5jdGlvbihlKXtyZXR1cm4gYVtlXSYmYVtlXS5mfSxFLmV4cG9ydHM9dH0seyIuLi8uLi8uLi91dGlscy91bmRlci1kYXNo''@;'; put 'put ''IjoyNiwiLi4vLi4vZGVmYXVsdG51bWZvcm1hdHMiOjMwLCIuLi9iYXNlLXhmb3JtIjozMn1dLDEzMzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uL2Jhc2UteGZvcm0iKSxhX2Jvb2xlYW49KG8scik9PnZvaWQgMD09PW8/cjpvO0UuZXhwb3J0cz1jbGFzcyBl''@;'; put 'put ''eHRlbmRzIGJ7Z2V0IHRhZygpe3JldHVybiJwcm90ZWN0aW9uIn1yZW5kZXIobyxyKXtvLmFkZFJvbGxiYWNrKCksby5vcGVuTm9kZSgicHJvdGVjdGlvbiIpO2xldCB0PSExO2Z1bmN0aW9uIGUobCxuKXt2b2lkIDAhPT1uJiYoby5hZGRBdHRyaWJ1dGUobCxuKSx0PSEwKX1lKCJsb2NrZWQi''@;'; put 'put ''LGFfYm9vbGVhbihyLmxvY2tlZCwhMCk/dm9pZCAwOiIwIiksZSgiaGlkZGVuIixhX2Jvb2xlYW4oci5oaWRkZW4sITEpPyIxIjp2b2lkIDApLG8uY2xvc2VOb2RlKCksdD9vLmNvbW1pdCgpOm8ucm9sbGJhY2soKX1wYXJzZU9wZW4obyl7Y29uc3Qgcj17bG9ja2VkOiIwIiE9PW8uYXR0cmli''@;'; put 'put ''dXRlcy5sb2NrZWQsaGlkZGVuOiIxIj09PW8uYXR0cmlidXRlcy5oaWRkZW59O3RoaXMubW9kZWw9IXIubG9ja2VkfHxyLmhpZGRlbj9yOm51bGx9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sMTM0OltmdW5jdGlvbihzLEUsUyl7''@;'; put 'put ''InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vYmFzZS14Zm9ybSIpLGE9cygiLi9hbGlnbm1lbnQteGZvcm0iKSxvPXMoIi4vcHJvdGVjdGlvbi14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGJ7Y29uc3RydWN0b3Iocil7c3VwZXIoKSx0aGlzLnhmSWQ9ISghcnx8IXIueGZJZCks''@;'; put 'put ''dGhpcy5tYXA9e2FsaWdubWVudDpuZXcgYSxwcm90ZWN0aW9uOm5ldyBvfX1nZXQgdGFnKCl7cmV0dXJuInhmIn1yZW5kZXIocix0KXtyLm9wZW5Ob2RlKCJ4ZiIse251bUZtdElkOnQubnVtRm10SWR8fDAsZm9udElkOnQuZm9udElkfHwwLGZpbGxJZDp0LmZpbGxJZHx8MCxib3JkZXJJZDp0''@;'; put 'put ''LmJvcmRlcklkfHwwfSksdGhpcy54ZklkJiZyLmFkZEF0dHJpYnV0ZSgieGZJZCIsdC54ZklkfHwwKSx0Lm51bUZtdElkJiZyLmFkZEF0dHJpYnV0ZSgiYXBwbHlOdW1iZXJGb3JtYXQiLCIxIiksdC5mb250SWQmJnIuYWRkQXR0cmlidXRlKCJhcHBseUZvbnQiLCIxIiksdC5maWxsSWQmJnIu''@;'; put 'put ''YWRkQXR0cmlidXRlKCJhcHBseUZpbGwiLCIxIiksdC5ib3JkZXJJZCYmci5hZGRBdHRyaWJ1dGUoImFwcGx5Qm9yZGVyIiwiMSIpLHQuYWxpZ25tZW50JiZyLmFkZEF0dHJpYnV0ZSgiYXBwbHlBbGlnbm1lbnQiLCIxIiksdC5wcm90ZWN0aW9uJiZyLmFkZEF0dHJpYnV0ZSgiYXBwbHlQcm90''@;'; put 'put ''ZWN0aW9uIiwiMSIpLHQuYWxpZ25tZW50JiZ0aGlzLm1hcC5hbGlnbm1lbnQucmVuZGVyKHIsdC5hbGlnbm1lbnQpLHQucHJvdGVjdGlvbiYmdGhpcy5tYXAucHJvdGVjdGlvbi5yZW5kZXIocix0LnByb3RlY3Rpb24pLHIuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKHIpe2lmKHRoaXMucGFyc2Vy''@;'; put 'put ''KXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4ociksITA7c3dpdGNoKHIubmFtZSl7Y2FzZSJ4ZiI6cmV0dXJuIHRoaXMubW9kZWw9e251bUZtdElkOnBhcnNlSW50KHIuYXR0cmlidXRlcy5udW1GbXRJZCwxMCksZm9udElkOnBhcnNlSW50KHIuYXR0cmlidXRlcy5mb250SWQsMTApLGZp''@;'; put 'put ''bGxJZDpwYXJzZUludChyLmF0dHJpYnV0ZXMuZmlsbElkLDEwKSxib3JkZXJJZDpwYXJzZUludChyLmF0dHJpYnV0ZXMuYm9yZGVySWQsMTApfSx0aGlzLnhmSWQmJih0aGlzLm1vZGVsLnhmSWQ9cGFyc2VJbnQoci5hdHRyaWJ1dGVzLnhmSWQsMTApKSwhMDtjYXNlImFsaWdubWVudCI6cmV0''@;'; put 'put ''dXJuIHRoaXMucGFyc2VyPXRoaXMubWFwLmFsaWdubWVudCx0aGlzLnBhcnNlci5wYXJzZU9wZW4ociksITA7Y2FzZSJwcm90ZWN0aW9uIjpyZXR1cm4gdGhpcy5wYXJzZXI9dGhpcy5tYXAucHJvdGVjdGlvbix0aGlzLnBhcnNlci5wYXJzZU9wZW4ociksITA7ZGVmYXVsdDpyZXR1cm4hMX19''@;'; put 'put ''cGFyc2VUZXh0KHIpe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQocil9cGFyc2VDbG9zZShyKXtyZXR1cm4gdGhpcy5wYXJzZXI/KHRoaXMucGFyc2VyLnBhcnNlQ2xvc2Uocil8fCh0aGlzLm1hcC5wcm90ZWN0aW9uPT09dGhpcy5wYXJzZXI/dGhpcy5tb2RlbC5wcm90ZWN0''@;'; put 'put ''aW9uPXRoaXMucGFyc2VyLm1vZGVsOnRoaXMubW9kZWwuYWxpZ25tZW50PXRoaXMucGFyc2VyLm1vZGVsLHRoaXMucGFyc2VyPXZvaWQgMCksITApOiJ4ZiIhPT1yfX19LHsiLi4vYmFzZS14Zm9ybSI6MzIsIi4vYWxpZ25tZW50LXhmb3JtIjoxMjYsIi4vcHJvdGVjdGlvbi14Zm9ybSI6MTMz''@;'; put 'put ''fV0sMTM1OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vLi4vLi4vZG9jL2VudW1zIiksYT1zKCIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtIiksbz1zKCIuLi9iYXNlLXhmb3JtIikscj1zKCIuLi9zdGF0aWMteGZvcm0iKSx0PXMoIi4uL2xpc3QteGZvcm0i''@;'; put 'put ''KSxlPXMoIi4vZm9udC14Zm9ybSIpLGw9cygiLi9maWxsLXhmb3JtIiksbj1zKCIuL2JvcmRlci14Zm9ybSIpLGk9cygiLi9udW1mbXQteGZvcm0iKSxoPXMoIi4vc3R5bGUteGZvcm0iKSxmPXMoIi4vZHhmLXhmb3JtIik7Y2xhc3MgdSBleHRlbmRzIG97Y29uc3RydWN0b3IoZCl7c3VwZXIo''@;'; put 'put ''KSx0aGlzLm1hcD17bnVtRm10czpuZXcgdCh7dGFnOiJudW1GbXRzIixjb3VudDohMCxjaGlsZFhmb3JtOm5ldyBpfSksZm9udHM6bmV3IHQoe3RhZzoiZm9udHMiLGNvdW50OiEwLGNoaWxkWGZvcm06bmV3IGUsJDp7IngxNGFjOmtub3duRm9udHMiOjF9fSksZmlsbHM6bmV3IHQoe3RhZzoi''@;'; put 'put ''ZmlsbHMiLGNvdW50OiEwLGNoaWxkWGZvcm06bmV3IGx9KSxib3JkZXJzOm5ldyB0KHt0YWc6ImJvcmRlcnMiLGNvdW50OiEwLGNoaWxkWGZvcm06bmV3IG59KSxjZWxsU3R5bGVYZnM6bmV3IHQoe3RhZzoiY2VsbFN0eWxlWGZzIixjb3VudDohMCxjaGlsZFhmb3JtOm5ldyBofSksY2VsbFhm''@;'; put 'put ''czpuZXcgdCh7dGFnOiJjZWxsWGZzIixjb3VudDohMCxjaGlsZFhmb3JtOm5ldyBoKHt4ZklkOiEwfSl9KSxkeGZzOm5ldyB0KHt0YWc6ImR4ZnMiLGFsd2F5czohMCxjb3VudDohMCxjaGlsZFhmb3JtOm5ldyBmfSksbnVtRm10Om5ldyBpLGZvbnQ6bmV3IGUsZmlsbDpuZXcgbCxib3JkZXI6''@;'; put 'put ''bmV3IG4sc3R5bGU6bmV3IGgoe3hmSWQ6ITB9KSxjZWxsU3R5bGVzOnUuU1RBVElDX1hGT1JNUy5jZWxsU3R5bGVzLHRhYmxlU3R5bGVzOnUuU1RBVElDX1hGT1JNUy50YWJsZVN0eWxlcyxleHRMc3Q6dS5TVEFUSUNfWEZPUk1TLmV4dExzdH0sZCYmdGhpcy5pbml0KCl9aW5pdEluZGV4KCl7''@;'; put 'put ''dGhpcy5pbmRleD17c3R5bGU6e30sbnVtRm10Ont9LG51bUZtdE5leHRJZDoxNjQsZm9udDp7fSxib3JkZXI6e30sZmlsbDp7fX19aW5pdCgpe3RoaXMubW9kZWw9e3N0eWxlczpbXSxudW1GbXRzOltdLGZvbnRzOltdLGJvcmRlcnM6W10sZmlsbHM6W10sZHhmczpbXX0sdGhpcy5pbml0SW5k''@;'; put 'put ''ZXgoKSx0aGlzLl9hZGRCb3JkZXIoe30pLHRoaXMuX2FkZFN0eWxlKHtudW1GbXRJZDowLGZvbnRJZDowLGZpbGxJZDowLGJvcmRlcklkOjAseGZJZDowfSksdGhpcy5fYWRkRmlsbCh7dHlwZToicGF0dGVybiIscGF0dGVybjoibm9uZSJ9KSx0aGlzLl9hZGRGaWxsKHt0eXBlOiJwYXR0ZXJu''@;'; put 'put ''IixwYXR0ZXJuOiJncmF5MTI1In0pLHRoaXMud2Vha01hcD1uZXcgV2Vha01hcH1yZW5kZXIoZCx2KXt2PXZ8fHRoaXMubW9kZWwsZC5vcGVuWG1sKGEuU3RkRG9jQXR0cmlidXRlcyksZC5vcGVuTm9kZSgic3R5bGVTaGVldCIsdS5TVFlMRVNIRUVUX0FUVFJJQlVURVMpLHRoaXMuaW5kZXg/''@;'; put 'put ''KHYubnVtRm10cyYmdi5udW1GbXRzLmxlbmd0aCYmKGQub3Blbk5vZGUoIm51bUZtdHMiLHtjb3VudDp2Lm51bUZtdHMubGVuZ3RofSksdi5udW1GbXRzLmZvckVhY2goXz0+e2Qud3JpdGVYbWwoXyl9KSxkLmNsb3NlTm9kZSgpKSx2LmZvbnRzLmxlbmd0aHx8dGhpcy5fYWRkRm9udCh7c2l6''@;'; put 'put ''ZToxMSxjb2xvcjp7dGhlbWU6MX0sbmFtZToiQ2FsaWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9KSxkLm9wZW5Ob2RlKCJmb250cyIse2NvdW50OnYuZm9udHMubGVuZ3RoLCJ4MTRhYzprbm93bkZvbnRzIjoxfSksdi5mb250cy5mb3JFYWNoKF89PntkLndyaXRlWG1sKF8pfSksZC5j''@;'; put 'put ''bG9zZU5vZGUoKSxkLm9wZW5Ob2RlKCJmaWxscyIse2NvdW50OnYuZmlsbHMubGVuZ3RofSksdi5maWxscy5mb3JFYWNoKF89PntkLndyaXRlWG1sKF8pfSksZC5jbG9zZU5vZGUoKSxkLm9wZW5Ob2RlKCJib3JkZXJzIix7Y291bnQ6di5ib3JkZXJzLmxlbmd0aH0pLHYuYm9yZGVycy5mb3JF''@;'; put 'put ''YWNoKF89PntkLndyaXRlWG1sKF8pfSksZC5jbG9zZU5vZGUoKSx0aGlzLm1hcC5jZWxsU3R5bGVYZnMucmVuZGVyKGQsW3tudW1GbXRJZDowLGZvbnRJZDowLGZpbGxJZDowLGJvcmRlcklkOjAseGZJZDowfV0pLGQub3Blbk5vZGUoImNlbGxYZnMiLHtjb3VudDp2LnN0eWxlcy5sZW5ndGh9''@;'; put 'put ''KSx2LnN0eWxlcy5mb3JFYWNoKF89PntkLndyaXRlWG1sKF8pfSksZC5jbG9zZU5vZGUoKSk6KHRoaXMubWFwLm51bUZtdHMucmVuZGVyKGQsdi5udW1GbXRzKSx0aGlzLm1hcC5mb250cy5yZW5kZXIoZCx2LmZvbnRzKSx0aGlzLm1hcC5maWxscy5yZW5kZXIoZCx2LmZpbGxzKSx0aGlzLm1h''@;'; put 'put ''cC5ib3JkZXJzLnJlbmRlcihkLHYuYm9yZGVycyksdGhpcy5tYXAuY2VsbFN0eWxlWGZzLnJlbmRlcihkLFt7bnVtRm10SWQ6MCxmb250SWQ6MCxmaWxsSWQ6MCxib3JkZXJJZDowLHhmSWQ6MH1dKSx0aGlzLm1hcC5jZWxsWGZzLnJlbmRlcihkLHYuc3R5bGVzKSksdS5TVEFUSUNfWEZPUk1T''@;'; put 'put ''LmNlbGxTdHlsZXMucmVuZGVyKGQpLHRoaXMubWFwLmR4ZnMucmVuZGVyKGQsdi5keGZzKSx1LlNUQVRJQ19YRk9STVMudGFibGVTdHlsZXMucmVuZGVyKGQpLHUuU1RBVElDX1hGT1JNUy5leHRMc3QucmVuZGVyKGQpLGQuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGQpe3JldHVybiB0aGlzLnBh''@;'; put 'put ''cnNlcj8odGhpcy5wYXJzZXIucGFyc2VPcGVuKGQpLCEwKToic3R5bGVTaGVldCI9PT1kLm5hbWU/KHRoaXMuaW5pdEluZGV4KCksITApOih0aGlzLnBhcnNlcj10aGlzLm1hcFtkLm5hbWVdLHRoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZU9wZW4oZCksITApfXBhcnNlVGV4dChkKXt0''@;'; put 'put ''aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KGQpfXBhcnNlQ2xvc2UoZCl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoZCl8fCh0aGlzLnBhcnNlcj12b2lkIDApLCEwO2lmKCJzdHlsZVNoZWV0Ij09PWQpe3RoaXMubW9kZWw9e307Y29uc3Qg''@;'; put 'put ''dj0oXyxBKT0+e0EubW9kZWwmJkEubW9kZWwubGVuZ3RoJiYodGhpcy5tb2RlbFtfXT1BLm1vZGVsKX07aWYodigibnVtRm10cyIsdGhpcy5tYXAubnVtRm10cyksdigiZm9udHMiLHRoaXMubWFwLmZvbnRzKSx2KCJmaWxscyIsdGhpcy5tYXAuZmlsbHMpLHYoImJvcmRlcnMiLHRoaXMubWFw''@;'; put 'put ''LmJvcmRlcnMpLHYoInN0eWxlcyIsdGhpcy5tYXAuY2VsbFhmcyksdigiZHhmcyIsdGhpcy5tYXAuZHhmcyksdGhpcy5pbmRleD17bW9kZWw6W10sbnVtRm10OltdfSx0aGlzLm1vZGVsLm51bUZtdHMpe2NvbnN0IF89dGhpcy5pbmRleC5udW1GbXQ7dGhpcy5tb2RlbC5udW1GbXRzLmZvckVh''@;'; put 'put ''Y2goQT0+e19bQS5pZF09QS5mb3JtYXRDb2RlfSl9cmV0dXJuITF9cmV0dXJuITB9YWRkU3R5bGVNb2RlbChkLHYpe2lmKCFkKXJldHVybiAwO2lmKHRoaXMubW9kZWwuZm9udHMubGVuZ3RofHx0aGlzLl9hZGRGb250KHtzaXplOjExLGNvbG9yOnt0aGVtZToxfSxuYW1lOiJDYWxpYnJpIixm''@;'; put 'put ''YW1pbHk6MixzY2hlbWU6Im1pbm9yIn0pLHRoaXMud2Vha01hcCYmdGhpcy53ZWFrTWFwLmhhcyhkKSlyZXR1cm4gdGhpcy53ZWFrTWFwLmdldChkKTtjb25zdCBfPXt9O2lmKHY9dnx8Yi5WYWx1ZVR5cGUuTnVtYmVyLGQubnVtRm10KV8ubnVtRm10SWQ9dGhpcy5fYWRkTnVtRm10U3RyKGQu''@;'; put 'put ''bnVtRm10KTtlbHNlIHN3aXRjaCh2KXtjYXNlIGIuVmFsdWVUeXBlLk51bWJlcjpfLm51bUZtdElkPXRoaXMuX2FkZE51bUZtdFN0cigiR2VuZXJhbCIpO2JyZWFrO2Nhc2UgYi5WYWx1ZVR5cGUuRGF0ZTpfLm51bUZtdElkPXRoaXMuX2FkZE51bUZtdFN0cigibW0tZGQteXkiKX1kLmZvbnQm''@;'; put 'put ''JihfLmZvbnRJZD10aGlzLl9hZGRGb250KGQuZm9udCkpLGQuYm9yZGVyJiYoXy5ib3JkZXJJZD10aGlzLl9hZGRCb3JkZXIoZC5ib3JkZXIpKSxkLmZpbGwmJihfLmZpbGxJZD10aGlzLl9hZGRGaWxsKGQuZmlsbCkpLGQuYWxpZ25tZW50JiYoXy5hbGlnbm1lbnQ9ZC5hbGlnbm1lbnQpLGQu''@;'; put 'put ''cHJvdGVjdGlvbiYmKF8ucHJvdGVjdGlvbj1kLnByb3RlY3Rpb24pO2NvbnN0IEE9dGhpcy5fYWRkU3R5bGUoXyk7cmV0dXJuIHRoaXMud2Vha01hcCYmdGhpcy53ZWFrTWFwLnNldChkLEEpLEF9Z2V0U3R5bGVNb2RlbChkKXtjb25zdCB2PXRoaXMubW9kZWwuc3R5bGVzW2RdO2lmKCF2KXJl''@;'; put 'put ''dHVybiBudWxsO2xldCBfPXRoaXMuaW5kZXgubW9kZWxbZF07aWYoXylyZXR1cm4gXztpZihfPXRoaXMuaW5kZXgubW9kZWxbZF09e30sdi5udW1GbXRJZCl7Y29uc3QgST10aGlzLmluZGV4Lm51bUZtdFt2Lm51bUZtdElkXXx8aS5nZXREZWZhdWx0Rm10Q29kZSh2Lm51bUZtdElkKTtJJiYo''@;'; put 'put ''Xy5udW1GbXQ9SSl9ZnVuY3Rpb24gQShJLEwsTil7aWYoTnx8MD09PU4pe2NvbnN0IFA9TFtOXTtQJiYoX1tJXT1QKX19cmV0dXJuIEEoImZvbnQiLHRoaXMubW9kZWwuZm9udHMsdi5mb250SWQpLEEoImJvcmRlciIsdGhpcy5tb2RlbC5ib3JkZXJzLHYuYm9yZGVySWQpLEEoImZpbGwiLHRo''@;'; put 'put ''aXMubW9kZWwuZmlsbHMsdi5maWxsSWQpLHYuYWxpZ25tZW50JiYoXy5hbGlnbm1lbnQ9di5hbGlnbm1lbnQpLHYucHJvdGVjdGlvbiYmKF8ucHJvdGVjdGlvbj12LnByb3RlY3Rpb24pLF99YWRkRHhmU3R5bGUoZCl7cmV0dXJuIGQubnVtRm10JiYoZC5udW1GbXRJZD10aGlzLl9hZGROdW1G''@;'; put 'put ''bXRTdHIoZC5udW1GbXQpKSx0aGlzLm1vZGVsLmR4ZnMucHVzaChkKSx0aGlzLm1vZGVsLmR4ZnMubGVuZ3RoLTF9Z2V0RHhmU3R5bGUoZCl7cmV0dXJuIHRoaXMubW9kZWwuZHhmc1tkXX1fYWRkU3R5bGUoZCl7Y29uc3Qgdj10aGlzLm1hcC5zdHlsZS50b1htbChkKTtsZXQgXz10aGlzLmlu''@;'; put 'put ''ZGV4LnN0eWxlW3ZdO3JldHVybiB2b2lkIDA9PT1fJiYoXz10aGlzLmluZGV4LnN0eWxlW3ZdPXRoaXMubW9kZWwuc3R5bGVzLmxlbmd0aCx0aGlzLm1vZGVsLnN0eWxlcy5wdXNoKHYpKSxffV9hZGROdW1GbXRTdHIoZCl7bGV0IHY9aS5nZXREZWZhdWx0Rm10SWQoZCk7aWYodm9pZCAwIT09''@;'; put 'put ''dnx8KHY9dGhpcy5pbmRleC5udW1GbXRbZF0sdm9pZCAwIT09dikpcmV0dXJuIHY7dj10aGlzLmluZGV4Lm51bUZtdFtkXT0xNjQrdGhpcy5tb2RlbC5udW1GbXRzLmxlbmd0aDtjb25zdCBfPXRoaXMubWFwLm51bUZtdC50b1htbCh7aWQ6dixmb3JtYXRDb2RlOmR9KTtyZXR1cm4gdGhpcy5t''@;'; put 'put ''b2RlbC5udW1GbXRzLnB1c2goXyksdn1fYWRkRm9udChkKXtjb25zdCB2PXRoaXMubWFwLmZvbnQudG9YbWwoZCk7bGV0IF89dGhpcy5pbmRleC5mb250W3ZdO3JldHVybiB2b2lkIDA9PT1fJiYoXz10aGlzLmluZGV4LmZvbnRbdl09dGhpcy5tb2RlbC5mb250cy5sZW5ndGgsdGhpcy5tb2Rl''@;'; put 'put ''bC5mb250cy5wdXNoKHYpKSxffV9hZGRCb3JkZXIoZCl7Y29uc3Qgdj10aGlzLm1hcC5ib3JkZXIudG9YbWwoZCk7bGV0IF89dGhpcy5pbmRleC5ib3JkZXJbdl07cmV0dXJuIHZvaWQgMD09PV8mJihfPXRoaXMuaW5kZXguYm9yZGVyW3ZdPXRoaXMubW9kZWwuYm9yZGVycy5sZW5ndGgsdGhp''@;'; put 'put ''cy5tb2RlbC5ib3JkZXJzLnB1c2godikpLF99X2FkZEZpbGwoZCl7Y29uc3Qgdj10aGlzLm1hcC5maWxsLnRvWG1sKGQpO2xldCBfPXRoaXMuaW5kZXguZmlsbFt2XTtyZXR1cm4gdm9pZCAwPT09XyYmKF89dGhpcy5pbmRleC5maWxsW3ZdPXRoaXMubW9kZWwuZmlsbHMubGVuZ3RoLHRoaXMu''@;'; put 'put ''bW9kZWwuZmlsbHMucHVzaCh2KSksX319dS5TVFlMRVNIRUVUX0FUVFJJQlVURVM9e3htbG5zOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW4iLCJ4bWxuczptYyI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJr''@;'; put 'put ''dXAtY29tcGF0aWJpbGl0eS8yMDA2IiwibWM6SWdub3JhYmxlIjoieDE0YWMgeDE2cjIiLCJ4bWxuczp4MTRhYyI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAwOS85L2FjIiwieG1sbnM6eDE2cjIiOiJodHRwOi8vc2NoZW1hcy5taWNyb3Nv''@;'; put 'put ''ZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMTUvMDIvbWFpbiJ9LHUuU1RBVElDX1hGT1JNUz17Y2VsbFN0eWxlczpuZXcgcih7dGFnOiJjZWxsU3R5bGVzIiwkOntjb3VudDoxfSxjOlt7dGFnOiJjZWxsU3R5bGUiLCQ6e25hbWU6Ik5vcm1hbCIseGZJZDowLGJ1aWx0aW5JZDowfX1d''@;'; put 'put ''fSksZHhmczpuZXcgcih7dGFnOiJkeGZzIiwkOntjb3VudDowfX0pLHRhYmxlU3R5bGVzOm5ldyByKHt0YWc6InRhYmxlU3R5bGVzIiwkOntjb3VudDowLGRlZmF1bHRUYWJsZVN0eWxlOiJUYWJsZVN0eWxlTWVkaXVtMiIsZGVmYXVsdFBpdm90U3R5bGU6IlBpdm90U3R5bGVMaWdodDE2In19''@;'; put 'put ''KSxleHRMc3Q6bmV3IHIoe3RhZzoiZXh0THN0IixjOlt7dGFnOiJleHQiLCQ6e3VyaToie0VCNzlERUYyLTgwQjgtNDNlNS05NUJELTU0Q0JEREY5MDIwQ30iLCJ4bWxuczp4MTQiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMDkvOS9tYWlu''@;'; put 'put ''In0sYzpbe3RhZzoieDE0OnNsaWNlclN0eWxlcyIsJDp7ZGVmYXVsdFNsaWNlclN0eWxlOiJTbGljZXJTdHlsZUxpZ2h0MSJ9fV19LHt0YWc6ImV4dCIsJDp7dXJpOiJ7OTI2MEE1MTAtRjMwMS00NmE4LTg2MzUtRjUxMkQ2NEJFNUY1fSIsInhtbG5zOngxNSI6Imh0dHA6Ly9zY2hlbWFzLm1p''@;'; put 'put ''Y3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAxMC8xMS9tYWluIn0sYzpbe3RhZzoieDE1OnRpbWVsaW5lU3R5bGVzIiwkOntkZWZhdWx0VGltZWxpbmVTdHlsZToiVGltZVNsaWNlclN0eWxlTGlnaHQxIn19XX1dfSl9LHUuTW9jaz1jbGFzcyBleHRlbmRzIHV7Y29uc3RydWN0''@;'; put 'put ''b3IoKXtzdXBlcigpLHRoaXMubW9kZWw9e3N0eWxlczpbe251bUZtdElkOjAsZm9udElkOjAsZmlsbElkOjAsYm9yZGVySWQ6MCx4ZklkOjB9XSxudW1GbXRzOltdLGZvbnRzOlt7c2l6ZToxMSxjb2xvcjp7dGhlbWU6MX0sbmFtZToiQ2FsaWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9''@;'; put 'put ''XSxib3JkZXJzOlt7fV0sZmlsbHM6W3t0eXBlOiJwYXR0ZXJuIixwYXR0ZXJuOiJub25lIn0se3R5cGU6InBhdHRlcm4iLHBhdHRlcm46ImdyYXkxMjUifV19fXBhcnNlU3RyZWFtKHApe3JldHVybiBwLmF1dG9kcmFpbigpLFByb21pc2UucmVzb2x2ZSgpfWFkZFN0eWxlTW9kZWwocCxkKXty''@;'; put 'put ''ZXR1cm4gZD09PWIuVmFsdWVUeXBlLkRhdGU/dGhpcy5kYXRlU3R5bGVJZDowfWdldCBkYXRlU3R5bGVJZCgpe2lmKCF0aGlzLl9kYXRlU3R5bGVJZCl7Y29uc3QgcD17bnVtRm10SWQ6aS5nZXREZWZhdWx0Rm10SWQoIm1tLWRkLXl5Iil9O3RoaXMuX2RhdGVTdHlsZUlkPXRoaXMubW9kZWwu''@;'; put 'put ''c3R5bGVzLmxlbmd0aCx0aGlzLm1vZGVsLnN0eWxlcy5wdXNoKHApfXJldHVybiB0aGlzLl9kYXRlU3R5bGVJZH1nZXRTdHlsZU1vZGVsKCl7cmV0dXJue319fSxFLmV4cG9ydHM9dX0seyIuLi8uLi8uLi9kb2MvZW51bXMiOjcsIi4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW0iOjI4LCIuLi9i''@;'; put 'put ''YXNlLXhmb3JtIjozMiwiLi4vbGlzdC14Zm9ybSI6NzEsIi4uL3N0YXRpYy14Zm9ybSI6MTIwLCIuL2JvcmRlci14Zm9ybSI6MTI3LCIuL2R4Zi14Zm9ybSI6MTI5LCIuL2ZpbGwteGZvcm0iOjEzMCwiLi9mb250LXhmb3JtIjoxMzEsIi4vbnVtZm10LXhmb3JtIjoxMzIsIi4vc3R5bGUteGZv''@;'; put 'put ''cm0iOjEzNH1dLDEzNjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uL2Jhc2UteGZvcm0iKTtjbGFzcyBhIGV4dGVuZHMgYntjb25zdHJ1Y3RvcihyKXtzdXBlcigpLHRoaXMubW9kZWw9cn1nZXQgdGFnKCl7cmV0dXJuInUifXJlbmRlcihyLHQpe2lmKCEwPT09''@;'; put 'put ''KHQ9dHx8dGhpcy5tb2RlbCkpci5sZWFmTm9kZSgidSIpO2Vsc2V7Y29uc3QgZT1hLkF0dHJpYnV0ZXNbdF07ZSYmci5sZWFmTm9kZSgidSIsZSl9fXBhcnNlT3BlbihyKXsidSI9PT1yLm5hbWUmJih0aGlzLm1vZGVsPXIuYXR0cmlidXRlcy52YWx8fCEwKX1wYXJzZVRleHQoKXt9cGFyc2VD''@;'; put 'put ''bG9zZSgpe3JldHVybiExfX1hLkF0dHJpYnV0ZXM9e3NpbmdsZTp7fSxkb3VibGU6e3ZhbDoiZG91YmxlIn0sc2luZ2xlQWNjb3VudGluZzp7dmFsOiJzaW5nbGVBY2NvdW50aW5nIn0sZG91YmxlQWNjb3VudGluZzp7dmFsOiJkb3VibGVBY2NvdW50aW5nIn19LEUuZXhwb3J0cz1hfSx7Ii4u''@;'; put 'put ''L2Jhc2UteGZvcm0iOjMyfV0sMTM3OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vYmFzZS14Zm9ybSIpLGE9cygiLi9maWx0ZXItY29sdW1uLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgYntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9''@;'; put 'put ''e2ZpbHRlckNvbHVtbjpuZXcgYX19Z2V0IHRhZygpe3JldHVybiJhdXRvRmlsdGVyIn1wcmVwYXJlKG8pe28uY29sdW1ucy5mb3JFYWNoKChyLHQpPT57dGhpcy5tYXAuZmlsdGVyQ29sdW1uLnByZXBhcmUocix7aW5kZXg6dH0pfSl9cmVuZGVyKG8scil7cmV0dXJuIG8ub3Blbk5vZGUodGhp''@;'; put 'put ''cy50YWcse3JlZjpyLmF1dG9GaWx0ZXJSZWZ9KSxyLmNvbHVtbnMuZm9yRWFjaCh0PT57dGhpcy5tYXAuZmlsdGVyQ29sdW1uLnJlbmRlcihvLHQpfSksby5jbG9zZU5vZGUoKSwhMH1wYXJzZU9wZW4obyl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihvKSwh''@;'; put 'put ''MDtpZihvLm5hbWU9PT10aGlzLnRhZylyZXR1cm4gdGhpcy5tb2RlbD17YXV0b0ZpbHRlclJlZjpvLmF0dHJpYnV0ZXMucmVmLGNvbHVtbnM6W119LCEwO2lmKHRoaXMucGFyc2VyPXRoaXMubWFwW28ubmFtZV0sdGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VPcGVuKG8pLCEwO3Rocm93''@;'; put 'put ''IG5ldyBFcnJvcigiVW5leHBlY3RlZCB4bWwgbm9kZSBpbiBwYXJzZU9wZW46ICIrSlNPTi5zdHJpbmdpZnkobykpfXBhcnNlVGV4dChvKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KG8pfXBhcnNlQ2xvc2Uobyl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2Vy''@;'; put 'put ''LnBhcnNlQ2xvc2Uobyl8fCh0aGlzLm1vZGVsLmNvbHVtbnMucHVzaCh0aGlzLnBhcnNlci5tb2RlbCksdGhpcy5wYXJzZXI9dm9pZCAwKSwhMDtpZihvPT09dGhpcy50YWcpcmV0dXJuITE7dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHhtbCBub2RlIGluIHBhcnNlQ2xvc2U6ICIrbyl9''@;'; put 'put ''fX0seyIuLi9iYXNlLXhmb3JtIjozMiwiLi9maWx0ZXItY29sdW1uLXhmb3JtIjoxMzl9XSwxMzg6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgYntnZXQgdGFnKCl7cmV0dXJuImN1c3RvbUZp''@;'; put 'put ''bHRlciJ9cmVuZGVyKGEsbyl7YS5sZWFmTm9kZSh0aGlzLnRhZyx7dmFsOm8udmFsLG9wZXJhdG9yOm8ub3BlcmF0b3J9KX1wYXJzZU9wZW4oYSl7cmV0dXJuIGEubmFtZT09PXRoaXMudGFnJiYodGhpcy5tb2RlbD17dmFsOmEuYXR0cmlidXRlcy52YWwsb3BlcmF0b3I6YS5hdHRyaWJ1dGVz''@;'; put 'put ''Lm9wZXJhdG9yfSwhMCl9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sMTM5OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vYmFzZS14Zm9ybSIpLGE9cygiLi4vbGlzdC14Zm9ybSIpLG89cygiLi9j''@;'; put 'put ''dXN0b20tZmlsdGVyLXhmb3JtIikscj1zKCIuL2ZpbHRlci14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGJ7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtjdXN0b21GaWx0ZXJzOm5ldyBhKHt0YWc6ImN1c3RvbUZpbHRlcnMiLGNvdW50OiExLGVtcHR5OiEwLGNoaWxk''@;'; put 'put ''WGZvcm06bmV3IG99KSxmaWx0ZXJzOm5ldyBhKHt0YWc6ImZpbHRlcnMiLGNvdW50OiExLGVtcHR5OiEwLGNoaWxkWGZvcm06bmV3IHJ9KX19Z2V0IHRhZygpe3JldHVybiJmaWx0ZXJDb2x1bW4ifXByZXBhcmUodCxlKXt0LmNvbElkPWUuaW5kZXgudG9TdHJpbmcoKX1yZW5kZXIodCxlKXty''@;'; put 'put ''ZXR1cm4gZS5jdXN0b21GaWx0ZXJzPyh0Lm9wZW5Ob2RlKHRoaXMudGFnLHtjb2xJZDplLmNvbElkLGhpZGRlbkJ1dHRvbjplLmZpbHRlckJ1dHRvbj8iMCI6IjEifSksdGhpcy5tYXAuY3VzdG9tRmlsdGVycy5yZW5kZXIodCxlLmN1c3RvbUZpbHRlcnMpLHQuY2xvc2VOb2RlKCksITApOih0''@;'; put 'put ''LmxlYWZOb2RlKHRoaXMudGFnLHtjb2xJZDplLmNvbElkLGhpZGRlbkJ1dHRvbjplLmZpbHRlckJ1dHRvbj8iMCI6IjEifSksITApfXBhcnNlT3Blbih0KXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKHQpLCEwO2NvbnN0e2F0dHJpYnV0ZXM6ZX09dDtpZih0''@;'; put 'put ''Lm5hbWU9PT10aGlzLnRhZylyZXR1cm4gdGhpcy5tb2RlbD17ZmlsdGVyQnV0dG9uOiIwIj09PWUuaGlkZGVuQnV0dG9ufSwhMDtpZih0aGlzLnBhcnNlcj10aGlzLm1hcFt0Lm5hbWVdLHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlT3Blbih0KSwhMDt0aHJvdyBuZXcgRXJyb3IoIlVu''@;'; put 'put ''ZXhwZWN0ZWQgeG1sIG5vZGUgaW4gcGFyc2VPcGVuOiAiK0pTT04uc3RyaW5naWZ5KHQpKX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSh0KXtyZXR1cm4gdGhpcy5wYXJzZXI/KHRoaXMucGFyc2VyLnBhcnNlQ2xvc2UodCl8fCh0aGlzLnBhcnNlcj12b2lkIDApLCEwKTp0IT09dGhpcy50YWd8''@;'; put 'put ''fCh0aGlzLm1vZGVsLmN1c3RvbUZpbHRlcnM9dGhpcy5tYXAuY3VzdG9tRmlsdGVycy5tb2RlbCwhMSl9fX0seyIuLi9iYXNlLXhmb3JtIjozMiwiLi4vbGlzdC14Zm9ybSI6NzEsIi4vY3VzdG9tLWZpbHRlci14Zm9ybSI6MTM4LCIuL2ZpbHRlci14Zm9ybSI6MTQwfV0sMTQwOltmdW5jdGlv''@;'; put 'put ''bihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGJ7Z2V0IHRhZygpe3JldHVybiJmaWx0ZXIifXJlbmRlcihhLG8pe2EubGVhZk5vZGUodGhpcy50YWcse3ZhbDpvLnZhbH0pfXBhcnNlT3BlbihhKXtyZXR1cm4g''@;'; put 'put ''YS5uYW1lPT09dGhpcy50YWcmJih0aGlzLm1vZGVsPXt2YWw6YS5hdHRyaWJ1dGVzLnZhbH0sITApfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0seyIuLi9iYXNlLXhmb3JtIjozMn1dLDE0MTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4u''@;'; put 'put ''L2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBie2dldCB0YWcoKXtyZXR1cm4idGFibGVDb2x1bW4ifXByZXBhcmUoYSxvKXthLmlkPW8uaW5kZXgrMX1yZW5kZXIoYSxvKXtyZXR1cm4gYS5sZWFmTm9kZSh0aGlzLnRhZyx7aWQ6by5pZC50b1N0cmluZygpLG5hbWU6by5u''@;'; put 'put ''YW1lLHRvdGFsc1Jvd0xhYmVsOm8udG90YWxzUm93TGFiZWwsdG90YWxzUm93RnVuY3Rpb246by50b3RhbHNSb3dGdW5jdGlvbixkeGZJZDpvLmR4ZklkfSksITB9cGFyc2VPcGVuKGEpe2lmKGEubmFtZT09PXRoaXMudGFnKXtjb25zdHthdHRyaWJ1dGVzOm99PWE7cmV0dXJuIHRoaXMubW9k''@;'; put 'put ''ZWw9e25hbWU6by5uYW1lLHRvdGFsc1Jvd0xhYmVsOm8udG90YWxzUm93TGFiZWwsdG90YWxzUm93RnVuY3Rpb246by50b3RhbHNSb3dGdW5jdGlvbixkeGZJZDpvLmR4ZklkfSwhMH1yZXR1cm4hMX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHsiLi4vYmFzZS14Zm9y''@;'; put 'put ''bSI6MzJ9XSwxNDI6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgYntnZXQgdGFnKCl7cmV0dXJuInRhYmxlU3R5bGVJbmZvIn1yZW5kZXIoYSxvKXtyZXR1cm4gYS5sZWFmTm9kZSh0aGlzLnRh''@;'; put 'put ''Zyx7bmFtZTpvLnRoZW1lP28udGhlbWU6dm9pZCAwLHNob3dGaXJzdENvbHVtbjpvLnNob3dGaXJzdENvbHVtbj8iMSI6IjAiLHNob3dMYXN0Q29sdW1uOm8uc2hvd0xhc3RDb2x1bW4/IjEiOiIwIixzaG93Um93U3RyaXBlczpvLnNob3dSb3dTdHJpcGVzPyIxIjoiMCIsc2hvd0NvbHVtblN0''@;'; put 'put ''cmlwZXM6by5zaG93Q29sdW1uU3RyaXBlcz8iMSI6IjAifSksITB9cGFyc2VPcGVuKGEpe2lmKGEubmFtZT09PXRoaXMudGFnKXtjb25zdHthdHRyaWJ1dGVzOm99PWE7cmV0dXJuIHRoaXMubW9kZWw9e3RoZW1lOm8ubmFtZT9vLm5hbWU6bnVsbCxzaG93Rmlyc3RDb2x1bW46IjEiPT09by5z''@;'; put 'put ''aG93Rmlyc3RDb2x1bW4sc2hvd0xhc3RDb2x1bW46IjEiPT09by5zaG93TGFzdENvbHVtbixzaG93Um93U3RyaXBlczoiMSI9PT1vLnNob3dSb3dTdHJpcGVzLHNob3dDb2x1bW5TdHJpcGVzOiIxIj09PW8uc2hvd0NvbHVtblN0cmlwZXN9LCEwfXJldHVybiExfXBhcnNlVGV4dCgpe31wYXJz''@;'; put 'put ''ZUNsb3NlKCl7cmV0dXJuITF9fX0seyIuLi9iYXNlLXhmb3JtIjozMn1dLDE0MzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoIi4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW0iKSxhPXMoIi4uL2Jhc2UteGZvcm0iKSxvPXMoIi4uL2xpc3QteGZvcm0iKSxyPXMoIi4v''@;'; put 'put ''YXV0by1maWx0ZXIteGZvcm0iKSx0PXMoIi4vdGFibGUtY29sdW1uLXhmb3JtIiksZT1zKCIuL3RhYmxlLXN0eWxlLWluZm8teGZvcm0iKTtjbGFzcyBsIGV4dGVuZHMgYXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e2F1dG9GaWx0ZXI6bmV3IHIsdGFibGVDb2x1bW5zOm5ldyBv''@;'; put 'put ''KHt0YWc6InRhYmxlQ29sdW1ucyIsY291bnQ6ITAsZW1wdHk6ITAsY2hpbGRYZm9ybTpuZXcgdH0pLHRhYmxlU3R5bGVJbmZvOm5ldyBlfX1wcmVwYXJlKGksaCl7dGhpcy5tYXAuYXV0b0ZpbHRlci5wcmVwYXJlKGkpLHRoaXMubWFwLnRhYmxlQ29sdW1ucy5wcmVwYXJlKGkuY29sdW1ucyxo''@;'; put 'put ''KX1nZXQgdGFnKCl7cmV0dXJuInRhYmxlIn1yZW5kZXIoaSxoKXtpLm9wZW5YbWwoYi5TdGREb2NBdHRyaWJ1dGVzKSxpLm9wZW5Ob2RlKHRoaXMudGFnLHsuLi5sLlRBQkxFX0FUVFJJQlVURVMsaWQ6aC5pZCxuYW1lOmgubmFtZSxkaXNwbGF5TmFtZTpoLmRpc3BsYXlOYW1lfHxoLm5hbWUs''@;'; put 'put ''cmVmOmgudGFibGVSZWYsdG90YWxzUm93Q291bnQ6aC50b3RhbHNSb3c/IjEiOnZvaWQgMCx0b3RhbHNSb3dTaG93bjpoLnRvdGFsc1Jvdz92b2lkIDA6IjEiLGhlYWRlclJvd0NvdW50OmguaGVhZGVyUm93PyIxIjoiMCJ9KSx0aGlzLm1hcC5hdXRvRmlsdGVyLnJlbmRlcihpLGgpLHRoaXMu''@;'; put 'put ''bWFwLnRhYmxlQ29sdW1ucy5yZW5kZXIoaSxoLmNvbHVtbnMpLHRoaXMubWFwLnRhYmxlU3R5bGVJbmZvLnJlbmRlcihpLGguc3R5bGUpLGkuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGkpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4oaSksITA7Y29uc3R7bmFt''@;'; put 'put ''ZTpoLGF0dHJpYnV0ZXM6Zn09aTtyZXR1cm4gaD09PXRoaXMudGFnPyh0aGlzLnJlc2V0KCksdGhpcy5tb2RlbD17bmFtZTpmLm5hbWUsZGlzcGxheU5hbWU6Zi5kaXNwbGF5TmFtZXx8Zi5uYW1lLHRhYmxlUmVmOmYucmVmLHRvdGFsc1JvdzoiMSI9PT1mLnRvdGFsc1Jvd0NvdW50LGhlYWRl''@;'; put 'put ''clJvdzoiMSI9PT1mLmhlYWRlclJvd0NvdW50fSk6KHRoaXMucGFyc2VyPXRoaXMubWFwW2kubmFtZV0sdGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlT3BlbihpKSksITB9cGFyc2VUZXh0KGkpe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQoaSl9cGFyc2VDbG9zZShp''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5wYXJzZXI/KHRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoaSl8fCh0aGlzLnBhcnNlcj12b2lkIDApLCEwKTppIT09dGhpcy50YWd8fCh0aGlzLm1vZGVsLmNvbHVtbnM9dGhpcy5tYXAudGFibGVDb2x1bW5zLm1vZGVsLHRoaXMubWFwLmF1dG9GaWx0ZXIubW9kZWwmJih0''@;'; put 'put ''aGlzLm1vZGVsLmF1dG9GaWx0ZXJSZWY9dGhpcy5tYXAuYXV0b0ZpbHRlci5tb2RlbC5hdXRvRmlsdGVyUmVmLHRoaXMubWFwLmF1dG9GaWx0ZXIubW9kZWwuY29sdW1ucy5mb3JFYWNoKChoLGYpPT57dGhpcy5tb2RlbC5jb2x1bW5zW2ZdLmZpbHRlckJ1dHRvbj1oLmZpbHRlckJ1dHRvbn0p''@;'; put 'put ''KSx0aGlzLm1vZGVsLnN0eWxlPXRoaXMubWFwLnRhYmxlU3R5bGVJbmZvLm1vZGVsLCExKX1yZWNvbmNpbGUoaSxoKXtpLmNvbHVtbnMuZm9yRWFjaChmPT57dm9pZCAwIT09Zi5keGZJZCYmKGYuc3R5bGU9aC5zdHlsZXMuZ2V0RHhmU3R5bGUoZi5keGZJZCkpfSl9fWwuVEFCTEVfQVRUUklC''@;'; put 'put ''VVRFUz17eG1sbnM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIsInhtbG5zOm1jIjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL21hcmt1cC1jb21wYXRpYmlsaXR5LzIwMDYiLCJtYzpJZ25vcmFibGUiOiJ4ciB4''@;'; put 'put ''cjMiLCJ4bWxuczp4ciI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAxNC9yZXZpc2lvbiIsInhtbG5zOnhyMyI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAxNi9yZXZpc2lvbjMifSxFLmV4''@;'; put 'put ''cG9ydHM9bH0seyIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtIjoyOCwiLi4vYmFzZS14Zm9ybSI6MzIsIi4uL2xpc3QteGZvcm0iOjcxLCIuL2F1dG8tZmlsdGVyLXhmb3JtIjoxMzcsIi4vdGFibGUtY29sdW1uLXhmb3JtIjoxNDEsIi4vdGFibGUtc3R5bGUtaW5mby14Zm9ybSI6MTQyfV0s''@;'; put 'put ''MTQ0OltmdW5jdGlvbihzLEUsUyl7KGZ1bmN0aW9uKGIsYSl7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0IG89cygiZnMiKSxyPXMoImpzemlwIikse1Bhc3NUaHJvdWdoOnR9PXMoInJlYWRhYmxlLXN0cmVhbSIpLGU9cygiLi4vdXRpbHMvemlwLXN0cmVhbSIpLGw9cygiLi4vdXRp''@;'; put 'put ''bHMvc3RyZWFtLWJ1ZiIpLG49cygiLi4vdXRpbHMvdXRpbHMiKSxpPXMoIi4uL3V0aWxzL3htbC1zdHJlYW0iKSx7YnVmZmVyVG9TdHJpbmc6aH09cygiLi4vdXRpbHMvYnJvd3Nlci1idWZmZXItZGVjb2RlIiksZj1zKCIuL3hmb3JtL3N0eWxlL3N0eWxlcy14Zm9ybSIpLHU9cygiLi94Zm9y''@;'; put 'put ''bS9jb3JlL2NvcmUteGZvcm0iKSxwPXMoIi4veGZvcm0vc3RyaW5ncy9zaGFyZWQtc3RyaW5ncy14Zm9ybSIpLGQ9cygiLi94Zm9ybS9jb3JlL3JlbGF0aW9uc2hpcHMteGZvcm0iKSx2PXMoIi4veGZvcm0vY29yZS9jb250ZW50LXR5cGVzLXhmb3JtIiksXz1zKCIuL3hmb3JtL2NvcmUvYXBw''@;'; put 'put ''LXhmb3JtIiksQT1zKCIuL3hmb3JtL2Jvb2svd29ya2Jvb2steGZvcm0iKSxJPXMoIi4veGZvcm0vc2hlZXQvd29ya3NoZWV0LXhmb3JtIiksTD1zKCIuL3hmb3JtL2RyYXdpbmcvZHJhd2luZy14Zm9ybSIpLE49cygiLi94Zm9ybS90YWJsZS90YWJsZS14Zm9ybSIpLFA9cygiLi94Zm9ybS9j''@;'; put 'put ''b21tZW50L2NvbW1lbnRzLXhmb3JtIiksQj1zKCIuL3hmb3JtL2NvbW1lbnQvdm1sLW5vdGVzLXhmb3JtIiksJD1zKCIuL3htbC90aGVtZTEiKTtjbGFzcyBEe2NvbnN0cnVjdG9yKE0pe3RoaXMud29ya2Jvb2s9TX1yZWFkRmlsZShNLGope3ZhciBjPXRoaXM7cmV0dXJuIFp0KGZ1bmN0aW9u''@;'; put 'put ''Kigpe2lmKCEoeWllbGQgbi5mcy5leGlzdHMoTSkpKXRocm93IG5ldyBFcnJvcigiRmlsZSBub3QgZm91bmQ6ICIrTSk7Y29uc3QgbT1vLmNyZWF0ZVJlYWRTdHJlYW0oTSk7dHJ5e2NvbnN0IGc9eWllbGQgYy5yZWFkKG0saik7cmV0dXJuIG0uY2xvc2UoKSxnfWNhdGNoKGcpe3Rocm93IG0u''@;'; put 'put ''Y2xvc2UoKSxnfX0pKCl9cGFyc2VSZWxzKE0pe3JldHVybihuZXcgZCkucGFyc2VTdHJlYW0oTSl9cGFyc2VXb3JrYm9vayhNKXtyZXR1cm4obmV3IEEpLnBhcnNlU3RyZWFtKE0pfXBhcnNlU2hhcmVkU3RyaW5ncyhNKXtyZXR1cm4obmV3IHApLnBhcnNlU3RyZWFtKE0pfXJlY29uY2lsZShN''@;'; put 'put ''LGope2NvbnN0IGM9bmV3IEEsbT1uZXcgSShqKSxnPW5ldyBMLHk9bmV3IE47Yy5yZWNvbmNpbGUoTSk7Y29uc3Qgdz17bWVkaWE6TS5tZWRpYSxtZWRpYUluZGV4Ok0ubWVkaWFJbmRleH07T2JqZWN0LmtleXMoTS5kcmF3aW5ncykuZm9yRWFjaCh6PT57Y29uc3QgVT1NLmRyYXdpbmdzW3pd''@;'; put 'put ''LFY9TS5kcmF3aW5nUmVsc1t6XTtWJiYody5yZWxzPVYucmVkdWNlKChSLEgpPT4oUltILklkXT1ILFIpLHt9KSwoVS5hbmNob3JzfHxbXSkuZm9yRWFjaChSPT57Y29uc3QgSD1SLnBpY3R1cmUmJlIucGljdHVyZS5oeXBlcmxpbmtzO0gmJncucmVsc1tILnJJZF0mJihILmh5cGVybGluaz13''@;'; put 'put ''LnJlbHNbSC5ySWRdLlRhcmdldCxkZWxldGUgSC5ySWQpfSksZy5yZWNvbmNpbGUoVSx3KSl9KTtjb25zdCBrPXtzdHlsZXM6TS5zdHlsZXN9O09iamVjdC52YWx1ZXMoTS50YWJsZXMpLmZvckVhY2goej0+e3kucmVjb25jaWxlKHosayl9KTtjb25zdCBPPXtzdHlsZXM6TS5zdHlsZXMsc2hh''@;'; put 'put ''cmVkU3RyaW5nczpNLnNoYXJlZFN0cmluZ3MsbWVkaWE6TS5tZWRpYSxtZWRpYUluZGV4Ok0ubWVkaWFJbmRleCxkYXRlMTkwNDpNLnByb3BlcnRpZXMmJk0ucHJvcGVydGllcy5kYXRlMTkwNCxkcmF3aW5nczpNLmRyYXdpbmdzLGNvbW1lbnRzOk0uY29tbWVudHMsdGFibGVzOk0udGFibGVz''@;'; put 'put ''LHZtbERyYXdpbmdzOk0udm1sRHJhd2luZ3N9O00ud29ya3NoZWV0cy5mb3JFYWNoKHo9Pnt6LnJlbGF0aW9uc2hpcHM9TS53b3Jrc2hlZXRSZWxzW3ouc2hlZXROb10sbS5yZWNvbmNpbGUoeixPKX0pLGRlbGV0ZSBNLndvcmtzaGVldEhhc2gsZGVsZXRlIE0ud29ya3NoZWV0UmVscyxkZWxl''@;'; put 'put ''dGUgTS5nbG9iYWxSZWxzLGRlbGV0ZSBNLnNoYXJlZFN0cmluZ3MsZGVsZXRlIE0ud29ya2Jvb2tSZWxzLGRlbGV0ZSBNLnNoZWV0RGVmcyxkZWxldGUgTS5zdHlsZXMsZGVsZXRlIE0ubWVkaWFJbmRleCxkZWxldGUgTS5kcmF3aW5ncyxkZWxldGUgTS5kcmF3aW5nUmVscyxkZWxldGUgTS52''@;'; put 'put ''bWxEcmF3aW5nc31fcHJvY2Vzc1dvcmtzaGVldEVudHJ5KE0saixjLG0sZyl7cmV0dXJuIFp0KGZ1bmN0aW9uKigpe2NvbnN0IHk9bmV3IEkobSksdz15aWVsZCB5LnBhcnNlU3RyZWFtKE0pO3cuc2hlZXRObz1jLGoud29ya3NoZWV0SGFzaFtnXT13LGoud29ya3NoZWV0cy5wdXNoKHcpfSko''@;'; put 'put ''KX1fcHJvY2Vzc0NvbW1lbnRFbnRyeShNLGosYyl7cmV0dXJuIFp0KGZ1bmN0aW9uKigpe2NvbnN0IG09bmV3IFAsZz15aWVsZCBtLnBhcnNlU3RyZWFtKE0pO2ouY29tbWVudHNbYC4uLyR7Y30ueG1sYF09Z30pKCl9X3Byb2Nlc3NUYWJsZUVudHJ5KE0saixjKXtyZXR1cm4gWnQoZnVuY3Rp''@;'; put 'put ''b24qKCl7Y29uc3QgbT1uZXcgTixnPXlpZWxkIG0ucGFyc2VTdHJlYW0oTSk7ai50YWJsZXNbYC4uL3RhYmxlcy8ke2N9LnhtbGBdPWd9KSgpfV9wcm9jZXNzV29ya3NoZWV0UmVsc0VudHJ5KE0saixjKXtyZXR1cm4gWnQoZnVuY3Rpb24qKCl7Y29uc3QgbT1uZXcgZCxnPXlpZWxkIG0ucGFy''@;'; put 'put ''c2VTdHJlYW0oTSk7ai53b3Jrc2hlZXRSZWxzW2NdPWd9KSgpfV9wcm9jZXNzTWVkaWFFbnRyeShNLGosYyl7cmV0dXJuIFp0KGZ1bmN0aW9uKigpe2NvbnN0IG09Yy5sYXN0SW5kZXhPZigiLiIpO2lmKG0+PTEpe2NvbnN0IGc9Yy5zdWJzdHIobSsxKSx5PWMuc3Vic3RyKDAsbSk7eWllbGQg''@;'; put 'put ''bmV3IFByb21pc2UoKHcsayk9Pntjb25zdCBPPW5ldyBsO08ub24oImZpbmlzaCIsKCk9PntqLm1lZGlhSW5kZXhbY109ai5tZWRpYS5sZW5ndGgsai5tZWRpYUluZGV4W3ldPWoubWVkaWEubGVuZ3RoO2NvbnN0IHo9e3R5cGU6ImltYWdlIixuYW1lOnksZXh0ZW5zaW9uOmcsYnVmZmVyOk8u''@;'; put 'put ''dG9CdWZmZXIoKX07ai5tZWRpYS5wdXNoKHopLHcoKX0pLE0ub24oImVycm9yIix6PT57ayh6KX0pLE0ucGlwZShPKX0pfX0pKCl9X3Byb2Nlc3NEcmF3aW5nRW50cnkoTSxqLGMpe3JldHVybiBadChmdW5jdGlvbiooKXtjb25zdCBtPW5ldyBMLGc9eWllbGQgbS5wYXJzZVN0cmVhbShNKTtq''@;'; put 'put ''LmRyYXdpbmdzW2NdPWd9KSgpfV9wcm9jZXNzRHJhd2luZ1JlbHNFbnRyeShNLGosYyl7cmV0dXJuIFp0KGZ1bmN0aW9uKigpe2NvbnN0IG09bmV3IGQsZz15aWVsZCBtLnBhcnNlU3RyZWFtKE0pO2ouZHJhd2luZ1JlbHNbY109Z30pKCl9X3Byb2Nlc3NWbWxEcmF3aW5nRW50cnkoTSxqLGMp''@;'; put 'put ''e3JldHVybiBadChmdW5jdGlvbiooKXtjb25zdCBtPW5ldyBCLGc9eWllbGQgbS5wYXJzZVN0cmVhbShNKTtqLnZtbERyYXdpbmdzW2AuLi9kcmF3aW5ncy8ke2N9LnZtbGBdPWd9KSgpfV9wcm9jZXNzVGhlbWVFbnRyeShNLGosYyl7cmV0dXJuIFp0KGZ1bmN0aW9uKigpe3lpZWxkIG5ldyBQ''@;'; put 'put ''cm9taXNlKChtLGcpPT57Y29uc3QgeT1uZXcgbDtNLm9uKCJlcnJvciIsZykseS5vbigiZXJyb3IiLGcpLHkub24oImZpbmlzaCIsKCk9PntqLnRoZW1lc1tjXT15LnJlYWQoKS50b1N0cmluZygpLG0oKX0pLE0ucGlwZSh5KX0pfSkoKX1jcmVhdGVJbnB1dFN0cmVhbSgpe3Rocm93IG5ldyBF''@;'; put 'put ''cnJvcigiYFhMU1gjY3JlYXRlSW5wdXRTdHJlYW1gIGlzIGRlcHJlY2F0ZWQuIFlvdSBzaG91bGQgdXNlIGBYTFNYI3JlYWRgIGluc3RlYWQuIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiB2ZXJzaW9uIDUuMC4gUGxlYXNlIGZvbGxvdyB1cGdyYWRlIGluc3RydWN0aW9uOiBodHRw''@;'; put 'put ''czovL2dpdGh1Yi5jb20vZXhjZWxqcy9leGNlbGpzL2Jsb2IvbWFzdGVyL1VQR1JBREUtNC4wLm1kIil9cmVhZChNLGope3ZhciBjPXRoaXM7cmV0dXJuIFp0KGZ1bmN0aW9uKigpeyFNW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSYmTS5waXBlJiYoTT1NLnBpcGUobmV3IHQpKTtjb25zdCBtPVtd''@;'; put 'put ''O3ZhciB3LGc9ITEseT0hMTt0cnl7Zm9yKHZhciBPLGs9RmUoTSk7Zz0hKE89eWllbGQgay5uZXh0KCkpLmRvbmU7Zz0hMSltLnB1c2goTy52YWx1ZSl9Y2F0Y2goeil7eT0hMCx3PXp9ZmluYWxseXt0cnl7ZyYmbnVsbCE9ay5yZXR1cm4mJih5aWVsZCBrLnJldHVybigpKX1maW5hbGx5e2lm''@;'; put 'put ''KHkpdGhyb3cgd319cmV0dXJuIGMubG9hZChhLmNvbmNhdChtKSxqKX0pKCl9bG9hZChNLGope3ZhciBjPXRoaXM7cmV0dXJuIFp0KGZ1bmN0aW9uKigpe2xldCBtO209aiYmai5iYXNlNjQ/YS5mcm9tKE0udG9TdHJpbmcoKSwiYmFzZTY0Iik6TTtjb25zdCBnPXt3b3Jrc2hlZXRzOltdLHdv''@;'; put 'put ''cmtzaGVldEhhc2g6e30sd29ya3NoZWV0UmVsczpbXSx0aGVtZXM6e30sbWVkaWE6W10sbWVkaWFJbmRleDp7fSxkcmF3aW5nczp7fSxkcmF3aW5nUmVsczp7fSxjb21tZW50czp7fSx0YWJsZXM6e30sdm1sRHJhd2luZ3M6e319LHk9eWllbGQgci5sb2FkQXN5bmMobSk7Zm9yKGNvbnN0IHcg''@;'; put 'put ''b2YgT2JqZWN0LnZhbHVlcyh5LmZpbGVzKSlpZighdy5kaXIpe2xldCBrLE89dy5uYW1lO2lmKCIvIj09PU9bMF0mJihPPU8uc3Vic3RyKDEpKSxPLm1hdGNoKC94bFwvbWVkaWFcLy8pfHxPLm1hdGNoKC94bFwvdGhlbWVcLyhbYS16QS1aMC05XSspWy5deG1sLykpaz1uZXcgdCxrLndyaXRl''@;'; put 'put ''KHlpZWxkIHcuYXN5bmMoIm5vZGVidWZmZXIiKSk7ZWxzZXtsZXQgejtrPW5ldyB0KHt3cml0YWJsZU9iamVjdE1vZGU6ITAscmVhZGFibGVPYmplY3RNb2RlOiEwfSksej1iLmJyb3dzZXI/aCh5aWVsZCB3LmFzeW5jKCJub2RlYnVmZmVyIikpOnlpZWxkIHcuYXN5bmMoInN0cmluZyIpO2Nv''@;'; put 'put ''bnN0IFU9MTYzODQ7Zm9yKGxldCBWPTA7Vjx6Lmxlbmd0aDtWKz1VKWsud3JpdGUoei5zdWJzdHJpbmcoVixWK1UpKX1zd2l0Y2goay5lbmQoKSxPKXtjYXNlIl9yZWxzLy5yZWxzIjpnLmdsb2JhbFJlbHM9eWllbGQgYy5wYXJzZVJlbHMoayk7YnJlYWs7Y2FzZSJ4bC93b3JrYm9vay54bWwi''@;'; put 'put ''Ontjb25zdCB6PXlpZWxkIGMucGFyc2VXb3JrYm9vayhrKTtnLnNoZWV0cz16LnNoZWV0cyxnLmRlZmluZWROYW1lcz16LmRlZmluZWROYW1lcyxnLnZpZXdzPXoudmlld3MsZy5wcm9wZXJ0aWVzPXoucHJvcGVydGllcyxnLmNhbGNQcm9wZXJ0aWVzPXouY2FsY1Byb3BlcnRpZXM7YnJlYWt9''@;'; put 'put ''Y2FzZSJ4bC9fcmVscy93b3JrYm9vay54bWwucmVscyI6Zy53b3JrYm9va1JlbHM9eWllbGQgYy5wYXJzZVJlbHMoayk7YnJlYWs7Y2FzZSJ4bC9zaGFyZWRTdHJpbmdzLnhtbCI6Zy5zaGFyZWRTdHJpbmdzPW5ldyBwLHlpZWxkIGcuc2hhcmVkU3RyaW5ncy5wYXJzZVN0cmVhbShrKTticmVh''@;'; put 'put ''aztjYXNlInhsL3N0eWxlcy54bWwiOmcuc3R5bGVzPW5ldyBmLHlpZWxkIGcuc3R5bGVzLnBhcnNlU3RyZWFtKGspO2JyZWFrO2Nhc2UiZG9jUHJvcHMvYXBwLnhtbCI6e2NvbnN0IHo9bmV3IF8sVT15aWVsZCB6LnBhcnNlU3RyZWFtKGspO2cuY29tcGFueT1VLmNvbXBhbnksZy5tYW5hZ2Vy''@;'; put 'put ''PVUubWFuYWdlcjticmVha31jYXNlImRvY1Byb3BzL2NvcmUueG1sIjp7Y29uc3Qgej1uZXcgdSxVPXlpZWxkIHoucGFyc2VTdHJlYW0oayk7T2JqZWN0LmFzc2lnbihnLFUpO2JyZWFrfWRlZmF1bHQ6e2xldCB6PU8ubWF0Y2goL3hsXC93b3Jrc2hlZXRzXC9zaGVldChcZCspWy5deG1sLyk7''@;'; put 'put ''aWYoeil7eWllbGQgYy5fcHJvY2Vzc1dvcmtzaGVldEVudHJ5KGssZyx6WzFdLGosTyk7YnJlYWt9aWYoej1PLm1hdGNoKC94bFwvd29ya3NoZWV0c1wvX3JlbHNcL3NoZWV0KFxkKylbLl14bWwucmVscy8pLHope3lpZWxkIGMuX3Byb2Nlc3NXb3Jrc2hlZXRSZWxzRW50cnkoayxnLHpbMV0p''@;'; put 'put ''O2JyZWFrfWlmKHo9Ty5tYXRjaCgveGxcL3RoZW1lXC8oW2EtekEtWjAtOV0rKVsuXXhtbC8pLHope3lpZWxkIGMuX3Byb2Nlc3NUaGVtZUVudHJ5KGssZyx6WzFdKTticmVha31pZih6PU8ubWF0Y2goL3hsXC9tZWRpYVwvKFthLXpBLVowLTldK1suXVthLXpBLVowLTldezMsNH0pJC8pLHop''@;'; put 'put ''e3lpZWxkIGMuX3Byb2Nlc3NNZWRpYUVudHJ5KGssZyx6WzFdKTticmVha31pZih6PU8ubWF0Y2goL3hsXC9kcmF3aW5nc1wvKFthLXpBLVowLTldKylbLl14bWwvKSx6KXt5aWVsZCBjLl9wcm9jZXNzRHJhd2luZ0VudHJ5KGssZyx6WzFdKTticmVha31pZih6PU8ubWF0Y2goL3hsXC8oY29t''@;'; put 'put ''bWVudHNcZCspWy5deG1sLykseil7eWllbGQgYy5fcHJvY2Vzc0NvbW1lbnRFbnRyeShrLGcselsxXSk7YnJlYWt9aWYoej1PLm1hdGNoKC94bFwvdGFibGVzXC8odGFibGVcZCspWy5deG1sLykseil7eWllbGQgYy5fcHJvY2Vzc1RhYmxlRW50cnkoayxnLHpbMV0pO2JyZWFrfWlmKHo9Ty5t''@;'; put 'put ''YXRjaCgveGxcL2RyYXdpbmdzXC9fcmVsc1wvKFthLXpBLVowLTldKylbLl14bWxbLl1yZWxzLykseil7eWllbGQgYy5fcHJvY2Vzc0RyYXdpbmdSZWxzRW50cnkoayxnLHpbMV0pO2JyZWFrfWlmKHo9Ty5tYXRjaCgveGxcL2RyYXdpbmdzXC8odm1sRHJhd2luZ1xkKylbLl12bWwvKSx6KXt5''@;'; put 'put ''aWVsZCBjLl9wcm9jZXNzVm1sRHJhd2luZ0VudHJ5KGssZyx6WzFdKTticmVha319fX1yZXR1cm4gYy5yZWNvbmNpbGUoZyxqKSxjLndvcmtib29rLm1vZGVsPWcsYy53b3JrYm9va30pKCl9YWRkTWVkaWEoTSxqKXtyZXR1cm4gWnQoZnVuY3Rpb24qKCl7eWllbGQgUHJvbWlzZS5hbGwoai5t''@;'; put 'put ''ZWRpYS5tYXAoZnVuY3Rpb24oKXt2YXIgYz1adChmdW5jdGlvbioobSl7aWYoImltYWdlIj09PW0udHlwZSl7Y29uc3QgZz1geGwvbWVkaWEvJHttLm5hbWV9LiR7bS5leHRlbnNpb259YDtpZihtLmZpbGVuYW1lKXtjb25zdCB5PXlpZWxkKHc9bS5maWxlbmFtZSxuZXcgUHJvbWlzZSgoTyx6''@;'; put 'put ''KT0+e28ucmVhZEZpbGUodyx1bmRlZmluZWQsKFUsVik9PntVP3ooVSk6TyhWKX0pfSkpO3JldHVybiBNLmFwcGVuZCh5LHtuYW1lOmd9KX1pZihtLmJ1ZmZlcilyZXR1cm4gTS5hcHBlbmQobS5idWZmZXIse25hbWU6Z30pO2lmKG0uYmFzZTY0KXtjb25zdCB5PW0uYmFzZTY0LHc9eS5zdWJz''@;'; put 'put ''dHJpbmcoeS5pbmRleE9mKCIsIikrMSk7cmV0dXJuIE0uYXBwZW5kKHcse25hbWU6ZyxiYXNlNjQ6ITB9KX19dmFyIHc7dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBtZWRpYSIpfSk7cmV0dXJuIGZ1bmN0aW9uKG0pe3JldHVybiBjLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKX0p''@;'; put 'put ''KCl9YWRkRHJhd2luZ3MoTSxqKXtjb25zdCBjPW5ldyBMLG09bmV3IGQ7ai53b3Jrc2hlZXRzLmZvckVhY2goZz0+e2NvbnN0e2RyYXdpbmc6eX09ZztpZih5KXtjLnByZXBhcmUoeSx7fSk7bGV0IHc9Yy50b1htbCh5KTtNLmFwcGVuZCh3LHtuYW1lOmB4bC9kcmF3aW5ncy8ke3kubmFtZX0u''@;'; put 'put ''eG1sYH0pLHc9bS50b1htbCh5LnJlbHMpLE0uYXBwZW5kKHcse25hbWU6YHhsL2RyYXdpbmdzL19yZWxzLyR7eS5uYW1lfS54bWwucmVsc2B9KX19KX1hZGRUYWJsZXMoTSxqKXtjb25zdCBjPW5ldyBOO2oud29ya3NoZWV0cy5mb3JFYWNoKG09Pntjb25zdHt0YWJsZXM6Z309bTtnLmZvckVh''@;'; put 'put ''Y2goeT0+e2MucHJlcGFyZSh5LHt9KTtjb25zdCB3PWMudG9YbWwoeSk7TS5hcHBlbmQodyx7bmFtZToieGwvdGFibGVzLyIreS50YXJnZXR9KX0pfSl9YWRkQ29udGVudFR5cGVzKE0sail7cmV0dXJuIFp0KGZ1bmN0aW9uKigpe2NvbnN0IGM9KG5ldyB2KS50b1htbChqKTtNLmFwcGVuZChj''@;'; put 'put ''LHtuYW1lOiJbQ29udGVudF9UeXBlc10ueG1sIn0pfSkoKX1hZGRBcHAoTSxqKXtyZXR1cm4gWnQoZnVuY3Rpb24qKCl7Y29uc3QgYz0obmV3IF8pLnRvWG1sKGopO00uYXBwZW5kKGMse25hbWU6ImRvY1Byb3BzL2FwcC54bWwifSl9KSgpfWFkZENvcmUoTSxqKXtyZXR1cm4gWnQoZnVuY3Rp''@;'; put 'put ''b24qKCl7Y29uc3QgYz1uZXcgdTtNLmFwcGVuZChjLnRvWG1sKGopLHtuYW1lOiJkb2NQcm9wcy9jb3JlLnhtbCJ9KX0pKCl9YWRkVGhlbWVzKE0sail7cmV0dXJuIFp0KGZ1bmN0aW9uKigpe2NvbnN0IGM9ai50aGVtZXN8fHt0aGVtZTE6JH07T2JqZWN0LmtleXMoYykuZm9yRWFjaChtPT57''@;'; put 'put ''TS5hcHBlbmQoY1ttXSx7bmFtZTpgeGwvdGhlbWUvJHttfS54bWxgfSl9KX0pKCl9YWRkT2ZmaWNlUmVscyhNKXtyZXR1cm4gWnQoZnVuY3Rpb24qKCl7Y29uc3Qgaj0obmV3IGQpLnRvWG1sKFt7SWQ6InJJZDEiLFR5cGU6RC5SZWxUeXBlLk9mZmljZURvY3VtZW50LFRhcmdldDoieGwvd29y''@;'; put 'put ''a2Jvb2sueG1sIn0se0lkOiJySWQyIixUeXBlOkQuUmVsVHlwZS5Db3JlUHJvcGVydGllcyxUYXJnZXQ6ImRvY1Byb3BzL2NvcmUueG1sIn0se0lkOiJySWQzIixUeXBlOkQuUmVsVHlwZS5FeHRlbmRlclByb3BlcnRpZXMsVGFyZ2V0OiJkb2NQcm9wcy9hcHAueG1sIn1dKTtNLmFwcGVuZChq''@;'; put 'put ''LHtuYW1lOiJfcmVscy8ucmVscyJ9KX0pKCl9YWRkV29ya2Jvb2tSZWxzKE0sail7cmV0dXJuIFp0KGZ1bmN0aW9uKigpe2xldCBjPTE7Y29uc3QgbT1be0lkOiJySWQiK2MrKyxUeXBlOkQuUmVsVHlwZS5TdHlsZXMsVGFyZ2V0OiJzdHlsZXMueG1sIn0se0lkOiJySWQiK2MrKyxUeXBlOkQu''@;'; put 'put ''UmVsVHlwZS5UaGVtZSxUYXJnZXQ6InRoZW1lL3RoZW1lMS54bWwifV07ai5zaGFyZWRTdHJpbmdzLmNvdW50JiZtLnB1c2goe0lkOiJySWQiK2MrKyxUeXBlOkQuUmVsVHlwZS5TaGFyZWRTdHJpbmdzLFRhcmdldDoic2hhcmVkU3RyaW5ncy54bWwifSksai53b3Jrc2hlZXRzLmZvckVhY2go''@;'; put 'put ''eT0+e3kucklkPSJySWQiK2MrKyxtLnB1c2goe0lkOnkucklkLFR5cGU6RC5SZWxUeXBlLldvcmtzaGVldCxUYXJnZXQ6YHdvcmtzaGVldHMvc2hlZXQke3kuaWR9LnhtbGB9KX0pO2NvbnN0IGc9KG5ldyBkKS50b1htbChtKTtNLmFwcGVuZChnLHtuYW1lOiJ4bC9fcmVscy93b3JrYm9vay54''@;'; put 'put ''bWwucmVscyJ9KX0pKCl9YWRkU2hhcmVkU3RyaW5ncyhNLGope3JldHVybiBadChmdW5jdGlvbiooKXtqLnNoYXJlZFN0cmluZ3MmJmouc2hhcmVkU3RyaW5ncy5jb3VudCYmTS5hcHBlbmQoai5zaGFyZWRTdHJpbmdzLnhtbCx7bmFtZToieGwvc2hhcmVkU3RyaW5ncy54bWwifSl9KSgpfWFk''@;'; put 'put ''ZFN0eWxlcyhNLGope3JldHVybiBadChmdW5jdGlvbiooKXtjb25zdHt4bWw6Y309ai5zdHlsZXM7YyYmTS5hcHBlbmQoYyx7bmFtZToieGwvc3R5bGVzLnhtbCJ9KX0pKCl9YWRkV29ya2Jvb2soTSxqKXtyZXR1cm4gWnQoZnVuY3Rpb24qKCl7Y29uc3QgYz1uZXcgQTtNLmFwcGVuZChjLnRv''@;'; put 'put ''WG1sKGopLHtuYW1lOiJ4bC93b3JrYm9vay54bWwifSl9KSgpfWFkZFdvcmtzaGVldHMoTSxqKXtyZXR1cm4gWnQoZnVuY3Rpb24qKCl7Y29uc3QgYz1uZXcgSSxtPW5ldyBkLGc9bmV3IFAseT1uZXcgQjtqLndvcmtzaGVldHMuZm9yRWFjaCh3PT57bGV0IGs9bmV3IGk7Yy5yZW5kZXIoayx3''@;'; put 'put ''KSxNLmFwcGVuZChrLnhtbCx7bmFtZTpgeGwvd29ya3NoZWV0cy9zaGVldCR7dy5pZH0ueG1sYH0pLHcucmVscyYmdy5yZWxzLmxlbmd0aCYmKGs9bmV3IGksbS5yZW5kZXIoayx3LnJlbHMpLE0uYXBwZW5kKGsueG1sLHtuYW1lOmB4bC93b3Jrc2hlZXRzL19yZWxzL3NoZWV0JHt3LmlkfS54''@;'; put 'put ''bWwucmVsc2B9KSksdy5jb21tZW50cy5sZW5ndGg+MCYmKGs9bmV3IGksZy5yZW5kZXIoayx3KSxNLmFwcGVuZChrLnhtbCx7bmFtZTpgeGwvY29tbWVudHMke3cuaWR9LnhtbGB9KSxrPW5ldyBpLHkucmVuZGVyKGssdyksTS5hcHBlbmQoay54bWwse25hbWU6YHhsL2RyYXdpbmdzL3ZtbERy''@;'; put 'put ''YXdpbmcke3cuaWR9LnZtbGB9KSl9KX0pKCl9X2ZpbmFsaXplKE0pe3JldHVybiBuZXcgUHJvbWlzZSgoaixjKT0+e00ub24oImZpbmlzaCIsKCk9PntqKHRoaXMpfSksTS5vbigiZXJyb3IiLGMpLE0uZmluYWxpemUoKX0pfXByZXBhcmVNb2RlbChNLGope00uY3JlYXRvcj1NLmNyZWF0b3J8''@;'; put 'put ''fCJFeGNlbEpTIixNLmxhc3RNb2RpZmllZEJ5PU0ubGFzdE1vZGlmaWVkQnl8fCJFeGNlbEpTIixNLmNyZWF0ZWQ9TS5jcmVhdGVkfHxuZXcgRGF0ZSxNLm1vZGlmaWVkPU0ubW9kaWZpZWR8fG5ldyBEYXRlLE0udXNlU2hhcmVkU3RyaW5ncz12b2lkIDA9PT1qLnVzZVNoYXJlZFN0cmluZ3N8''@;'; put 'put ''fGoudXNlU2hhcmVkU3RyaW5ncyxNLnVzZVN0eWxlcz12b2lkIDA9PT1qLnVzZVN0eWxlc3x8ai51c2VTdHlsZXMsTS5zaGFyZWRTdHJpbmdzPW5ldyBwLE0uc3R5bGVzPU0udXNlU3R5bGVzP25ldyBmKCEwKTpuZXcgZi5Nb2NrO2NvbnN0IGM9bmV3IEEsbT1uZXcgSTtjLnByZXBhcmUoTSk7''@;'; put 'put ''Y29uc3QgZz17c2hhcmVkU3RyaW5nczpNLnNoYXJlZFN0cmluZ3Msc3R5bGVzOk0uc3R5bGVzLGRhdGUxOTA0Ok0ucHJvcGVydGllcy5kYXRlMTkwNCxkcmF3aW5nc0NvdW50OjAsbWVkaWE6TS5tZWRpYX07Zy5kcmF3aW5ncz1NLmRyYXdpbmdzPVtdLGcuY29tbWVudFJlZnM9TS5jb21tZW50''@;'; put 'put ''UmVmcz1bXTtsZXQgeT0wO00udGFibGVzPVtdLE0ud29ya3NoZWV0cy5mb3JFYWNoKHc9Pnt3LnRhYmxlcy5mb3JFYWNoKGs9Pnt5Kyssay50YXJnZXQ9YHRhYmxlJHt5fS54bWxgLGsuaWQ9eSxNLnRhYmxlcy5wdXNoKGspfSksbS5wcmVwYXJlKHcsZyl9KX13cml0ZShNLGope3ZhciBjPXRo''@;'; put 'put ''aXM7cmV0dXJuIFp0KGZ1bmN0aW9uKigpe2o9anx8e307Y29uc3R7bW9kZWw6bX09Yy53b3JrYm9vayxnPW5ldyBlLlppcFdyaXRlcihqLnppcCk7cmV0dXJuIGcucGlwZShNKSxjLnByZXBhcmVNb2RlbChtLGopLHlpZWxkIGMuYWRkQ29udGVudFR5cGVzKGcsbSkseWllbGQgYy5hZGRPZmZp''@;'; put 'put ''Y2VSZWxzKGcsbSkseWllbGQgYy5hZGRXb3JrYm9va1JlbHMoZyxtKSx5aWVsZCBjLmFkZFdvcmtzaGVldHMoZyxtKSx5aWVsZCBjLmFkZFNoYXJlZFN0cmluZ3MoZyxtKSx5aWVsZCBjLmFkZERyYXdpbmdzKGcsbSkseWllbGQgYy5hZGRUYWJsZXMoZyxtKSx5aWVsZCBQcm9taXNlLmFsbChb''@;'; put 'put ''Yy5hZGRUaGVtZXMoZyxtKSxjLmFkZFN0eWxlcyhnLG0pXSkseWllbGQgYy5hZGRNZWRpYShnLG0pLHlpZWxkIFByb21pc2UuYWxsKFtjLmFkZEFwcChnLG0pLGMuYWRkQ29yZShnLG0pXSkseWllbGQgYy5hZGRXb3JrYm9vayhnLG0pLGMuX2ZpbmFsaXplKGcpfSkoKX13cml0ZUZpbGUoTSxq''@;'; put 'put ''KXtjb25zdCBjPW8uY3JlYXRlV3JpdGVTdHJlYW0oTSk7cmV0dXJuIG5ldyBQcm9taXNlKChtLGcpPT57Yy5vbigiZmluaXNoIiwoKT0+e20oKX0pLGMub24oImVycm9yIix5PT57Zyh5KX0pLHRoaXMud3JpdGUoYyxqKS50aGVuKCgpPT57Yy5lbmQoKX0pLmNhdGNoKHk9PntnKHkpfSl9KX13''@;'; put 'put ''cml0ZUJ1ZmZlcihNKXt2YXIgaj10aGlzO3JldHVybiBadChmdW5jdGlvbiooKXtjb25zdCBjPW5ldyBsO3JldHVybiB5aWVsZCBqLndyaXRlKGMsTSksYy5yZWFkKCl9KSgpfX1ELlJlbFR5cGU9cygiLi9yZWwtdHlwZSIpLEUuZXhwb3J0cz1EfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxz''@;'; put 'put ''KCJfcHJvY2VzcyIpLHMoImJ1ZmZlciIpLkJ1ZmZlcil9LHsiLi4vdXRpbHMvYnJvd3Nlci1idWZmZXItZGVjb2RlIjoxNiwiLi4vdXRpbHMvc3RyZWFtLWJ1ZiI6MjQsIi4uL3V0aWxzL3V0aWxzIjoyNywiLi4vdXRpbHMveG1sLXN0cmVhbSI6MjgsIi4uL3V0aWxzL3ppcC1zdHJlYW0iOjI5''@;'; put 'put ''LCIuL3JlbC10eXBlIjozMSwiLi94Zm9ybS9ib29rL3dvcmtib29rLXhmb3JtIjozOCwiLi94Zm9ybS9jb21tZW50L2NvbW1lbnRzLXhmb3JtIjo0MCwiLi94Zm9ybS9jb21tZW50L3ZtbC1ub3Rlcy14Zm9ybSI6NDUsIi4veGZvcm0vY29yZS9hcHAteGZvcm0iOjUxLCIuL3hmb3JtL2NvcmUv''@;'; put 'put ''Y29udGVudC10eXBlcy14Zm9ybSI6NTIsIi4veGZvcm0vY29yZS9jb3JlLXhmb3JtIjo1MywiLi94Zm9ybS9jb3JlL3JlbGF0aW9uc2hpcHMteGZvcm0iOjU1LCIuL3hmb3JtL2RyYXdpbmcvZHJhd2luZy14Zm9ybSI6NjIsIi4veGZvcm0vc2hlZXQvd29ya3NoZWV0LXhmb3JtIjoxMTUsIi4v''@;'; put 'put ''eGZvcm0vc3RyaW5ncy9zaGFyZWQtc3RyaW5ncy14Zm9ybSI6MTI0LCIuL3hmb3JtL3N0eWxlL3N0eWxlcy14Zm9ybSI6MTM1LCIuL3hmb3JtL3RhYmxlL3RhYmxlLXhmb3JtIjoxNDMsIi4veG1sL3RoZW1lMSI6MTQ1LF9wcm9jZXNzOjQ2NyxidWZmZXI6MjIwLGZzOjIxNixqc3ppcDo0NDEs''@;'; put 'put ''InJlYWRhYmxlLXN0cmVhbSI6NDkxfV0sMTQ1OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO0UuZXhwb3J0cz0nPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PlxuPGE6dGhlbWUgeG1sbnM6YT0iaHR0cDovL3NjaGVtYXMub3Blbnht''@;'; put 'put ''bGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L21haW4iIG5hbWU9Ik9mZmljZSBUaGVtZSI+IDxhOnRoZW1lRWxlbWVudHM+IDxhOmNsclNjaGVtZSBuYW1lPSJPZmZpY2UiPiA8YTpkazE+IDxhOnN5c0NsciB2YWw9IndpbmRvd1RleHQiIGxhc3RDbHI9IjAwMDAwMCIvPiA8L2E6ZGsxPiA8''@;'; put 'put ''YTpsdDE+IDxhOnN5c0NsciB2YWw9IndpbmRvdyIgbGFzdENscj0iRkZGRkZGIi8+IDwvYTpsdDE+IDxhOmRrMj4gPGE6c3JnYkNsciB2YWw9IjFGNDk3RCIvPiA8L2E6ZGsyPiA8YTpsdDI+IDxhOnNyZ2JDbHIgdmFsPSJFRUVDRTEiLz4gPC9hOmx0Mj4gPGE6YWNjZW50MT4gPGE6c3JnYkNs''@;'; put 'put ''ciB2YWw9IjRGODFCRCIvPiA8L2E6YWNjZW50MT4gPGE6YWNjZW50Mj4gPGE6c3JnYkNsciB2YWw9IkMwNTA0RCIvPiA8L2E6YWNjZW50Mj4gPGE6YWNjZW50Mz4gPGE6c3JnYkNsciB2YWw9IjlCQkI1OSIvPiA8L2E6YWNjZW50Mz4gPGE6YWNjZW50ND4gPGE6c3JnYkNsciB2YWw9IjgwNjRB''@;'; put 'put ''MiIvPiA8L2E6YWNjZW50ND4gPGE6YWNjZW50NT4gPGE6c3JnYkNsciB2YWw9IjRCQUNDNiIvPiA8L2E6YWNjZW50NT4gPGE6YWNjZW50Nj4gPGE6c3JnYkNsciB2YWw9IkY3OTY0NiIvPiA8L2E6YWNjZW50Nj4gPGE6aGxpbms+IDxhOnNyZ2JDbHIgdmFsPSIwMDAwRkYiLz4gPC9hOmhsaW5r''@;'; put 'put ''PiA8YTpmb2xIbGluaz4gPGE6c3JnYkNsciB2YWw9IjgwMDA4MCIvPiA8L2E6Zm9sSGxpbms+IDwvYTpjbHJTY2hlbWU+IDxhOmZvbnRTY2hlbWUgbmFtZT0iT2ZmaWNlIj4gPGE6bWFqb3JGb250PiA8YTpsYXRpbiB0eXBlZmFjZT0iQ2FtYnJpYSIvPiA8YTplYSB0eXBlZmFjZT0iIi8+IDxh''@;'; put 'put ''OmNzIHR5cGVmYWNlPSIiLz4gPGE6Zm9udCBzY3JpcHQ9IkpwYW4iIHR5cGVmYWNlPSJcdWZmMmRcdWZmMzMgXHVmZjMwXHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmIi8+IDxhOmZvbnQgc2NyaXB0PSJIYW5nIiB0eXBlZmFjZT0iXHViOWQxXHVjNzQwIFx1YWNlMFx1YjUxNSIvPiA8YTpmb250''@;'; put 'put ''IHNjcmlwdD0iSGFucyIgdHlwZWZhY2U9Ilx1NWI4Ylx1NGY1MyIvPiA8YTpmb250IHNjcmlwdD0iSGFudCIgdHlwZWZhY2U9Ilx1NjViMFx1N2QzMFx1NjYwZVx1OWFkNCIvPiA8YTpmb250IHNjcmlwdD0iQXJhYiIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPiA8YTpmb250IHNjcmlw''@;'; put 'put ''dD0iSGViciIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPiA8YTpmb250IHNjcmlwdD0iVGhhaSIgdHlwZWZhY2U9IlRhaG9tYSIvPiA8YTpmb250IHNjcmlwdD0iRXRoaSIgdHlwZWZhY2U9Ik55YWxhIi8+IDxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0iVnJpbmRhIi8+IDxh''@;'; put 'put ''OmZvbnQgc2NyaXB0PSJHdWpyIiB0eXBlZmFjZT0iU2hydXRpIi8+IDxhOmZvbnQgc2NyaXB0PSJLaG1yIiB0eXBlZmFjZT0iTW9vbEJvcmFuIi8+IDxhOmZvbnQgc2NyaXB0PSJLbmRhIiB0eXBlZmFjZT0iVHVuZ2EiLz4gPGE6Zm9udCBzY3JpcHQ9Ikd1cnUiIHR5cGVmYWNlPSJSYWF2aSIv''@;'; put 'put ''PiA8YTpmb250IHNjcmlwdD0iQ2FucyIgdHlwZWZhY2U9IkV1cGhlbWlhIi8+IDxhOmZvbnQgc2NyaXB0PSJDaGVyIiB0eXBlZmFjZT0iUGxhbnRhZ2VuZXQgQ2hlcm9rZWUiLz4gPGE6Zm9udCBzY3JpcHQ9IllpaWkiIHR5cGVmYWNlPSJNaWNyb3NvZnQgWWkgQmFpdGkiLz4gPGE6Zm9udCBz''@;'; put 'put ''Y3JpcHQ9IlRpYnQiIHR5cGVmYWNlPSJNaWNyb3NvZnQgSGltYWxheWEiLz4gPGE6Zm9udCBzY3JpcHQ9IlRoYWEiIHR5cGVmYWNlPSJNViBCb2xpIi8+IDxhOmZvbnQgc2NyaXB0PSJEZXZhIiB0eXBlZmFjZT0iTWFuZ2FsIi8+IDxhOmZvbnQgc2NyaXB0PSJUZWx1IiB0eXBlZmFjZT0iR2F1''@;'; put 'put ''dGFtaSIvPiA8YTpmb250IHNjcmlwdD0iVGFtbCIgdHlwZWZhY2U9IkxhdGhhIi8+IDxhOmZvbnQgc2NyaXB0PSJTeXJjIiB0eXBlZmFjZT0iRXN0cmFuZ2VsbyBFZGVzc2EiLz4gPGE6Zm9udCBzY3JpcHQ9Ik9yeWEiIHR5cGVmYWNlPSJLYWxpbmdhIi8+IDxhOmZvbnQgc2NyaXB0PSJNbHlt''@;'; put 'put ''IiB0eXBlZmFjZT0iS2FydGlrYSIvPiA8YTpmb250IHNjcmlwdD0iTGFvbyIgdHlwZWZhY2U9IkRva0NoYW1wYSIvPiA8YTpmb250IHNjcmlwdD0iU2luaCIgdHlwZWZhY2U9Iklza29vbGEgUG90YSIvPiA8YTpmb250IHNjcmlwdD0iTW9uZyIgdHlwZWZhY2U9Ik1vbmdvbGlhbiBCYWl0aSIv''@;'; put 'put ''PiA8YTpmb250IHNjcmlwdD0iVmlldCIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPiA8YTpmb250IHNjcmlwdD0iVWlnaCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBVaWdodXIiLz4gPGE6Zm9udCBzY3JpcHQ9Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8+IDwvYTptYWpvckZvbnQ+IDxh''@;'; put 'put ''Om1pbm9yRm9udD4gPGE6bGF0aW4gdHlwZWZhY2U9IkNhbGlicmkiLz4gPGE6ZWEgdHlwZWZhY2U9IiIvPiA8YTpjcyB0eXBlZmFjZT0iIi8+IDxhOmZvbnQgc2NyaXB0PSJKcGFuIiB0eXBlZmFjZT0iXHVmZjJkXHVmZjMzIFx1ZmYzMFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZiIvPiA8YTpm''@;'; put 'put ''b250IHNjcmlwdD0iSGFuZyIgdHlwZWZhY2U9Ilx1YjlkMVx1Yzc0MCBcdWFjZTBcdWI1MTUiLz4gPGE6Zm9udCBzY3JpcHQ9IkhhbnMiIHR5cGVmYWNlPSJcdTViOGJcdTRmNTMiLz4gPGE6Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSJcdTY1YjBcdTdkMzBcdTY2MGVcdTlhZDQiLz4g''@;'; put 'put ''PGE6Zm9udCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNlPSJBcmlhbCIvPiA8YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9IkFyaWFsIi8+IDxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFob21hIi8+IDxhOmZvbnQgc2NyaXB0PSJFdGhpIiB0eXBlZmFjZT0iTnlhbGEiLz4g''@;'; put 'put ''PGE6Zm9udCBzY3JpcHQ9IkJlbmciIHR5cGVmYWNlPSJWcmluZGEiLz4gPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJTaHJ1dGkiLz4gPGE6Zm9udCBzY3JpcHQ9IktobXIiIHR5cGVmYWNlPSJEYXVuUGVuaCIvPiA8YTpmb250IHNjcmlwdD0iS25kYSIgdHlwZWZhY2U9IlR1bmdh''@;'; put 'put ''Ii8+IDxhOmZvbnQgc2NyaXB0PSJHdXJ1IiB0eXBlZmFjZT0iUmFhdmkiLz4gPGE6Zm9udCBzY3JpcHQ9IkNhbnMiIHR5cGVmYWNlPSJFdXBoZW1pYSIvPiA8YTpmb250IHNjcmlwdD0iQ2hlciIgdHlwZWZhY2U9IlBsYW50YWdlbmV0IENoZXJva2VlIi8+IDxhOmZvbnQgc2NyaXB0PSJZaWlp''@;'; put 'put ''IiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+IDxhOmZvbnQgc2NyaXB0PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFsYXlhIi8+IDxhOmZvbnQgc2NyaXB0PSJUaGFhIiB0eXBlZmFjZT0iTVYgQm9saSIvPiA8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlwZWZhY2U9Ik1h''@;'; put 'put ''bmdhbCIvPiA8YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9IkdhdXRhbWkiLz4gPGE6Zm9udCBzY3JpcHQ9IlRhbWwiIHR5cGVmYWNlPSJMYXRoYSIvPiA8YTpmb250IHNjcmlwdD0iU3lyYyIgdHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRlc3NhIi8+IDxhOmZvbnQgc2NyaXB0PSJPcnlh''@;'; put 'put ''IiB0eXBlZmFjZT0iS2FsaW5nYSIvPiA8YTpmb250IHNjcmlwdD0iTWx5bSIgdHlwZWZhY2U9IkthcnRpa2EiLz4gPGE6Zm9udCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNlPSJEb2tDaGFtcGEiLz4gPGE6Zm9udCBzY3JpcHQ9IlNpbmgiIHR5cGVmYWNlPSJJc2tvb2xhIFBvdGEiLz4gPGE6Zm9u''@;'; put 'put ''dCBzY3JpcHQ9Ik1vbmciIHR5cGVmYWNlPSJNb25nb2xpYW4gQmFpdGkiLz4gPGE6Zm9udCBzY3JpcHQ9IlZpZXQiIHR5cGVmYWNlPSJBcmlhbCIvPiA8YTpmb250IHNjcmlwdD0iVWlnaCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBVaWdodXIiLz4gPGE6Zm9udCBzY3JpcHQ9Ikdlb3IiIHR5cGVm''@;'; put 'put ''YWNlPSJTeWxmYWVuIi8+IDwvYTptaW5vckZvbnQ+IDwvYTpmb250U2NoZW1lPiA8YTpmbXRTY2hlbWUgbmFtZT0iT2ZmaWNlIj4gPGE6ZmlsbFN0eWxlTHN0PiA8YTpzb2xpZEZpbGw+IDxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+IDwvYTpzb2xpZEZpbGw+IDxhOmdyYWRGaWxsIHJvdFdp''@;'; put 'put ''dGhTaGFwZT0iMSI+IDxhOmdzTHN0PiA8YTpncyBwb3M9IjAiPiA8YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+IDxhOnRpbnQgdmFsPSI1MDAwMCIvPiA8YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz4gPC9hOnNjaGVtZUNscj4gPC9hOmdzPiA8YTpncyBwb3M9IjM1MDAwIj4gPGE6c2NoZW1lQ2xy''@;'; put 'put ''IHZhbD0icGhDbHIiPiA8YTp0aW50IHZhbD0iMzcwMDAiLz4gPGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+IDwvYTpzY2hlbWVDbHI+IDwvYTpncz4gPGE6Z3MgcG9zPSIxMDAwMDAiPiA8YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+IDxhOnRpbnQgdmFsPSIxNTAwMCIvPiA8YTpzYXRNb2QgdmFs''@;'; put 'put ''PSIzNTAwMDAiLz4gPC9hOnNjaGVtZUNscj4gPC9hOmdzPiA8L2E6Z3NMc3Q+IDxhOmxpbiBhbmc9IjE2MjAwMDAwIiBzY2FsZWQ9IjEiLz4gPC9hOmdyYWRGaWxsPiA8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPiA8YTpnc0xzdD4gPGE6Z3MgcG9zPSIwIj4gPGE6c2NoZW1lQ2xyIHZh''@;'; put 'put ''bD0icGhDbHIiPiA8YTp0aW50IHZhbD0iMTAwMDAwIi8+IDxhOnNoYWRlIHZhbD0iMTAwMDAwIi8+IDxhOnNhdE1vZCB2YWw9IjEzMDAwMCIvPiA8L2E6c2NoZW1lQ2xyPiA8L2E6Z3M+IDxhOmdzIHBvcz0iMTAwMDAwIj4gPGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPiA8YTp0aW50IHZhbD0i''@;'; put 'put ''NTAwMDAiLz4gPGE6c2hhZGUgdmFsPSIxMDAwMDAiLz4gPGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+IDwvYTpzY2hlbWVDbHI+IDwvYTpncz4gPC9hOmdzTHN0PiA8YTpsaW4gYW5nPSIxNjIwMDAwMCIgc2NhbGVkPSIwIi8+IDwvYTpncmFkRmlsbD4gPC9hOmZpbGxTdHlsZUxzdD4gPGE6bG5T''@;'; put 'put ''dHlsZUxzdD4gPGE6bG4gdz0iOTUyNSIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+IDxhOnNvbGlkRmlsbD4gPGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPiA8YTpzaGFkZSB2YWw9Ijk1MDAwIi8+IDxhOnNhdE1vZCB2YWw9IjEwNTAwMCIvPiA8L2E6c2NoZW1lQ2xyPiA8L2E6''@;'; put 'put ''c29saWRGaWxsPiA8YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+IDwvYTpsbj4gPGE6bG4gdz0iMjU0MDAiIGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPiA8YTpzb2xpZEZpbGw+IDxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+IDwvYTpzb2xpZEZpbGw+IDxhOnByc3REYXNoIHZh''@;'; put 'put ''bD0ic29saWQiLz4gPC9hOmxuPiA8YTpsbiB3PSIzODEwMCIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+IDxhOnNvbGlkRmlsbD4gPGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz4gPC9hOnNvbGlkRmlsbD4gPGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPiA8L2E6bG4+IDwvYTps''@;'; put 'put ''blN0eWxlTHN0PiA8YTplZmZlY3RTdHlsZUxzdD4gPGE6ZWZmZWN0U3R5bGU+IDxhOmVmZmVjdExzdD4gPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBkaXN0PSIyMDAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPiA8YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj4gPGE6YWxw''@;'; put 'put ''aGEgdmFsPSIzODAwMCIvPiA8L2E6c3JnYkNscj4gPC9hOm91dGVyU2hkdz4gPC9hOmVmZmVjdExzdD4gPC9hOmVmZmVjdFN0eWxlPiA8YTplZmZlY3RTdHlsZT4gPGE6ZWZmZWN0THN0PiA8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIzMDAwIiBkaXI9IjU0MDAwMDAiIHJv''@;'; put 'put ''dFdpdGhTaGFwZT0iMCI+IDxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPiA8YTphbHBoYSB2YWw9IjM1MDAwIi8+IDwvYTpzcmdiQ2xyPiA8L2E6b3V0ZXJTaGR3PiA8L2E6ZWZmZWN0THN0PiA8L2E6ZWZmZWN0U3R5bGU+IDxhOmVmZmVjdFN0eWxlPiA8YTplZmZlY3RMc3Q+IDxhOm91dGVyU2hk''@;'; put 'put ''dyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjMwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj4gPGE6c3JnYkNsciB2YWw9IjAwMDAwMCI+IDxhOmFscGhhIHZhbD0iMzUwMDAiLz4gPC9hOnNyZ2JDbHI+IDwvYTpvdXRlclNoZHc+IDwvYTplZmZlY3RMc3Q+IDxhOnNjZW5lM2Q+''@;'; put 'put ''IDxhOmNhbWVyYSBwcnN0PSJvcnRob2dyYXBoaWNGcm9udCI+IDxhOnJvdCBsYXQ9IjAiIGxvbj0iMCIgcmV2PSIwIi8+IDwvYTpjYW1lcmE+IDxhOmxpZ2h0UmlnIHJpZz0idGhyZWVQdCIgZGlyPSJ0Ij4gPGE6cm90IGxhdD0iMCIgbG9uPSIwIiByZXY9IjEyMDAwMDAiLz4gPC9hOmxpZ2h0''@;'; put 'put ''UmlnPiA8L2E6c2NlbmUzZD4gPGE6c3AzZD4gPGE6YmV2ZWxUIHc9IjYzNTAwIiBoPSIyNTQwMCIvPiA8L2E6c3AzZD4gPC9hOmVmZmVjdFN0eWxlPiA8L2E6ZWZmZWN0U3R5bGVMc3Q+IDxhOmJnRmlsbFN0eWxlTHN0PiA8YTpzb2xpZEZpbGw+IDxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+''@;'; put 'put ''IDwvYTpzb2xpZEZpbGw+IDxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+IDxhOmdzTHN0PiA8YTpncyBwb3M9IjAiPiA8YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+IDxhOnRpbnQgdmFsPSI0MDAwMCIvPiA8YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz4gPC9hOnNjaGVtZUNscj4gPC9hOmdz''@;'; put 'put ''PiA8YTpncyBwb3M9IjQwMDAwIj4gPGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPiA8YTp0aW50IHZhbD0iNDUwMDAiLz4gPGE6c2hhZGUgdmFsPSI5OTAwMCIvPiA8YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz4gPC9hOnNjaGVtZUNscj4gPC9hOmdzPiA8YTpncyBwb3M9IjEwMDAwMCI+IDxhOnNj''@;'; put 'put ''aGVtZUNsciB2YWw9InBoQ2xyIj4gPGE6c2hhZGUgdmFsPSIyMDAwMCIvPiA8YTpzYXRNb2QgdmFsPSIyNTUwMDAiLz4gPC9hOnNjaGVtZUNscj4gPC9hOmdzPiA8L2E6Z3NMc3Q+IDxhOnBhdGggcGF0aD0iY2lyY2xlIj4gPGE6ZmlsbFRvUmVjdCBsPSI1MDAwMCIgdD0iLTgwMDAwIiByPSI1''@;'; put 'put ''MDAwMCIgYj0iMTgwMDAwIi8+IDwvYTpwYXRoPiA8L2E6Z3JhZEZpbGw+IDxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+IDxhOmdzTHN0PiA8YTpncyBwb3M9IjAiPiA8YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+IDxhOnRpbnQgdmFsPSI4MDAwMCIvPiA8YTpzYXRNb2QgdmFsPSIzMDAw''@;'; put 'put ''MDAiLz4gPC9hOnNjaGVtZUNscj4gPC9hOmdzPiA8YTpncyBwb3M9IjEwMDAwMCI+IDxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj4gPGE6c2hhZGUgdmFsPSIzMDAwMCIvPiA8YTpzYXRNb2QgdmFsPSIyMDAwMDAiLz4gPC9hOnNjaGVtZUNscj4gPC9hOmdzPiA8L2E6Z3NMc3Q+IDxhOnBhdGgg''@;'; put 'put ''cGF0aD0iY2lyY2xlIj4gPGE6ZmlsbFRvUmVjdCBsPSI1MDAwMCIgdD0iNTAwMDAiIHI9IjUwMDAwIiBiPSI1MDAwMCIvPiA8L2E6cGF0aD4gPC9hOmdyYWRGaWxsPiA8L2E6YmdGaWxsU3R5bGVMc3Q+IDwvYTpmbXRTY2hlbWU+IDwvYTp0aGVtZUVsZW1lbnRzPiA8YTpvYmplY3REZWZhdWx0''@;'; put 'put ''cz4gPGE6c3BEZWY+IDxhOnNwUHIvPiA8YTpib2R5UHIvPiA8YTpsc3RTdHlsZS8+IDxhOnN0eWxlPiA8YTpsblJlZiBpZHg9IjEiPiA8YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+IDwvYTpsblJlZj4gPGE6ZmlsbFJlZiBpZHg9IjMiPiA8YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+''@;'; put 'put ''IDwvYTpmaWxsUmVmPiA8YTplZmZlY3RSZWYgaWR4PSIyIj4gPGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPiA8L2E6ZWZmZWN0UmVmPiA8YTpmb250UmVmIGlkeD0ibWlub3IiPiA8YTpzY2hlbWVDbHIgdmFsPSJsdDEiLz4gPC9hOmZvbnRSZWY+IDwvYTpzdHlsZT4gPC9hOnNwRGVmPiA8''@;'; put 'put ''YTpsbkRlZj4gPGE6c3BQci8+IDxhOmJvZHlQci8+IDxhOmxzdFN0eWxlLz4gPGE6c3R5bGU+IDxhOmxuUmVmIGlkeD0iMiI+IDxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz4gPC9hOmxuUmVmPiA8YTpmaWxsUmVmIGlkeD0iMCI+IDxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz4gPC9h''@;'; put 'put ''OmZpbGxSZWY+IDxhOmVmZmVjdFJlZiBpZHg9IjEiPiA8YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+IDwvYTplZmZlY3RSZWY+IDxhOmZvbnRSZWYgaWR4PSJtaW5vciI+IDxhOnNjaGVtZUNsciB2YWw9InR4MSIvPiA8L2E6Zm9udFJlZj4gPC9hOnN0eWxlPiA8L2E6bG5EZWY+IDwvYTpv''@;'; put 'put ''YmplY3REZWZhdWx0cz4gPGE6ZXh0cmFDbHJTY2hlbWVMc3QvPiA8L2E6dGhlbWU+J30se31dLDE0NjpbZnVuY3Rpb24ocyxFLFMpeyhmdW5jdGlvbihiKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFMu''@;'; put 'put ''Q3N2Rm9ybWF0dGVyU3RyZWFtPXZvaWQgMDtjb25zdCBhPXMoInN0cmVhbSIpLG89cygiLi9mb3JtYXR0ZXIiKTtTLkNzdkZvcm1hdHRlclN0cmVhbT1jbGFzcyByIGV4dGVuZHMgYS5UcmFuc2Zvcm17Y29uc3RydWN0b3IoZSl7c3VwZXIoe3dyaXRhYmxlT2JqZWN0TW9kZTplLm9iamVjdE1v''@;'; put 'put ''ZGV9KSx0aGlzLmhhc1dyaXR0ZW5CT009ITEsdGhpcy5mb3JtYXR0ZXJPcHRpb25zPWUsdGhpcy5yb3dGb3JtYXR0ZXI9bmV3IG8uUm93Rm9ybWF0dGVyKGUpLHRoaXMuaGFzV3JpdHRlbkJPTT0hZS53cml0ZUJPTX10cmFuc2Zvcm0oZSl7cmV0dXJuIHRoaXMucm93Rm9ybWF0dGVyLnJvd1Ry''@;'; put 'put ''YW5zZm9ybT1lLHRoaXN9X3RyYW5zZm9ybShlLGwsbil7bGV0IGk9ITE7dHJ5e3RoaXMuaGFzV3JpdHRlbkJPTXx8KHRoaXMucHVzaCh0aGlzLmZvcm1hdHRlck9wdGlvbnMuQk9NKSx0aGlzLmhhc1dyaXR0ZW5CT009ITApLHRoaXMucm93Rm9ybWF0dGVyLmZvcm1hdChlLChoLGYpPT5oPyhp''@;'; put 'put ''PSEwLG4oaCkpOihmJiZmLmZvckVhY2godT0+e3RoaXMucHVzaChiLmZyb20odSwidXRmOCIpKX0pLGk9ITAsbigpKSl9Y2F0Y2goaCl7aWYoaSl0aHJvdyBoO24oaCl9fV9mbHVzaChlKXt0aGlzLnJvd0Zvcm1hdHRlci5maW5pc2goKGwsbik9Pmw/ZShsKToobiYmbi5mb3JFYWNoKGk9Pnt0''@;'; put 'put ''aGlzLnB1c2goYi5mcm9tKGksInV0ZjgiKSl9KSxlKCkpKX19fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxzKCJidWZmZXIiKS5CdWZmZXIpfSx7Ii4vZm9ybWF0dGVyIjoxNTAsYnVmZmVyOjIyMCxzdHJlYW06NTA1fV0sMTQ3OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShTLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxTLkZvcm1hdHRlck9wdGlvbnM9dm9pZCAwLFMuRm9ybWF0dGVyT3B0aW9ucz1jbGFzc3tjb25zdHJ1Y3Rvcigpe2xldCBiPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50''@;'; put 'put ''c1swXTp7fTt2YXIgYTt0aGlzLm9iamVjdE1vZGU9ITAsdGhpcy5kZWxpbWl0ZXI9IiwiLHRoaXMucm93RGVsaW1pdGVyPSJcbiIsdGhpcy5xdW90ZT0nIicsdGhpcy5lc2NhcGU9dGhpcy5xdW90ZSx0aGlzLnF1b3RlQ29sdW1ucz0hMSx0aGlzLnF1b3RlSGVhZGVycz10aGlzLnF1b3RlQ29s''@;'; put 'put ''dW1ucyx0aGlzLmhlYWRlcnM9bnVsbCx0aGlzLmluY2x1ZGVFbmRSb3dEZWxpbWl0ZXI9ITEsdGhpcy53cml0ZUJPTT0hMSx0aGlzLkJPTT0iXHVmZWZmIix0aGlzLmFsd2F5c1dyaXRlSGVhZGVycz0hMSxPYmplY3QuYXNzaWduKHRoaXMsYnx8e30pLHZvaWQgMD09PWI/LnF1b3RlSGVhZGVy''@;'; put 'put ''cyYmKHRoaXMucXVvdGVIZWFkZXJzPXRoaXMucXVvdGVDb2x1bW5zKSwhMD09PWI/LnF1b3RlP3RoaXMucXVvdGU9JyInOiExPT09Yj8ucXVvdGUmJih0aGlzLnF1b3RlPSIiKSwic3RyaW5nIiE9dHlwZW9mIGI/LmVzY2FwZSYmKHRoaXMuZXNjYXBlPXRoaXMucXVvdGUpLHRoaXMuc2hvdWxk''@;'; put 'put ''V3JpdGVIZWFkZXJzPSEhdGhpcy5oZWFkZXJzJiYobnVsbD09PShhPWIud3JpdGVIZWFkZXJzKXx8dm9pZCAwPT09YXx8YSksdGhpcy5oZWFkZXJzPUFycmF5LmlzQXJyYXkodGhpcy5oZWFkZXJzKT90aGlzLmhlYWRlcnM6bnVsbCx0aGlzLmVzY2FwZWRRdW90ZT1gJHt0aGlzLmVzY2FwZX0k''@;'; put 'put ''e3RoaXMucXVvdGV9YH19fSx7fV0sMTQ4OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFMuRmll''@;'; put 'put ''bGRGb3JtYXR0ZXI9dm9pZCAwO2NvbnN0IGE9YihzKCJsb2Rhc2guaXNib29sZWFuIikpLG89YihzKCJsb2Rhc2guaXNuaWwiKSkscj1iKHMoImxvZGFzaC5lc2NhcGVyZWdleHAiKSk7Uy5GaWVsZEZvcm1hdHRlcj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9oZWFkZXJzPW51bGwsdGhp''@;'; put 'put ''cy5mb3JtYXR0ZXJPcHRpb25zPXQsbnVsbCE9PXQuaGVhZGVycyYmKHRoaXMuaGVhZGVycz10LmhlYWRlcnMpLHRoaXMuUkVQTEFDRV9SRUdFWFA9bmV3IFJlZ0V4cCh0LnF1b3RlLCJnIik7Y29uc3QgZT1gWyR7dC5kZWxpbWl0ZXJ9JHtyLmRlZmF1bHQodC5yb3dEZWxpbWl0ZXIpfXxccnxc''@;'; put 'put ''bl1gO3RoaXMuRVNDQVBFX1JFR0VYUD1uZXcgUmVnRXhwKGUpfXNldCBoZWFkZXJzKHQpe3RoaXMuX2hlYWRlcnM9dH1zaG91bGRRdW90ZSh0LGUpe2NvbnN0IGw9ZT90aGlzLmZvcm1hdHRlck9wdGlvbnMucXVvdGVIZWFkZXJzOnRoaXMuZm9ybWF0dGVyT3B0aW9ucy5xdW90ZUNvbHVtbnM7''@;'; put 'put ''cmV0dXJuIGEuZGVmYXVsdChsKT9sOkFycmF5LmlzQXJyYXkobCk/bFt0XTpudWxsIT09dGhpcy5faGVhZGVycyYmbFt0aGlzLl9oZWFkZXJzW3RdXX1mb3JtYXQodCxlLGwpe2NvbnN0IG49KCIiKyhvLmRlZmF1bHQodCk/IiI6dCkpLnJlcGxhY2UoL1wwL2csIiIpLHtmb3JtYXR0ZXJPcHRp''@;'; put 'put ''b25zOml9PXRoaXM7cmV0dXJuIiIhPT1pLnF1b3RlJiYtMSE9PW4uaW5kZXhPZihpLnF1b3RlKT90aGlzLnF1b3RlRmllbGQobi5yZXBsYWNlKHRoaXMuUkVQTEFDRV9SRUdFWFAsaS5lc2NhcGVkUXVvdGUpKTotMSE9PW4uc2VhcmNoKHRoaXMuRVNDQVBFX1JFR0VYUCl8fHRoaXMuc2hvdWxk''@;'; put 'put ''UXVvdGUoZSxsKT90aGlzLnF1b3RlRmllbGQobik6bn1xdW90ZUZpZWxkKHQpe2NvbnN0e3F1b3RlOmV9PXRoaXMuZm9ybWF0dGVyT3B0aW9ucztyZXR1cm5gJHtlfSR7dH0ke2V9YH19fSx7ImxvZGFzaC5lc2NhcGVyZWdleHAiOjQ0MiwibG9kYXNoLmlzYm9vbGVhbiI6NDQ0LCJsb2Rhc2gu''@;'; put 'put ''aXNuaWwiOjQ0N31dLDE0OTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1mdW5jdGlvbihsKXtyZXR1cm4gbCYmbC5fX2VzTW9kdWxlP2w6e2RlZmF1bHQ6bH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxTLlJvd0Zvcm1hdHRl''@;'; put 'put ''cj12b2lkIDA7Y29uc3QgYT1iKHMoImxvZGFzaC5pc2Z1bmN0aW9uIikpLG89YihzKCJsb2Rhc2guaXNlcXVhbCIpKSxyPXMoIi4vRmllbGRGb3JtYXR0ZXIiKSx0PXMoIi4uL3R5cGVzIik7Y2xhc3MgZXtjb25zdHJ1Y3RvcihuKXt0aGlzLnJvd0NvdW50PTAsdGhpcy5mb3JtYXR0ZXJPcHRp''@;'; put 'put ''b25zPW4sdGhpcy5maWVsZEZvcm1hdHRlcj1uZXcgci5GaWVsZEZvcm1hdHRlcihuKSx0aGlzLmhlYWRlcnM9bi5oZWFkZXJzLHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzPW4uc2hvdWxkV3JpdGVIZWFkZXJzLHRoaXMuaGFzV3JpdHRlbkhlYWRlcnM9ITEsbnVsbCE9PXRoaXMuaGVhZGVycyYm''@;'; put 'put ''KHRoaXMuZmllbGRGb3JtYXR0ZXIuaGVhZGVycz10aGlzLmhlYWRlcnMpLG4udHJhbnNmb3JtJiYodGhpcy5yb3dUcmFuc2Zvcm09bi50cmFuc2Zvcm0pfXN0YXRpYyBpc1Jvd0hhc2hBcnJheShuKXtyZXR1cm4hIUFycmF5LmlzQXJyYXkobikmJkFycmF5LmlzQXJyYXkoblswXSkmJjI9PT1u''@;'; put 'put ''WzBdLmxlbmd0aH1zdGF0aWMgaXNSb3dBcnJheShuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKSYmIXRoaXMuaXNSb3dIYXNoQXJyYXkobil9c3RhdGljIGdhdGhlckhlYWRlcnMobil7cmV0dXJuIGUuaXNSb3dIYXNoQXJyYXkobik/bi5tYXAoaT0+aVswXSk6QXJyYXkuaXNBcnJheShuKT9u''@;'; put 'put ''Ok9iamVjdC5rZXlzKG4pfXN0YXRpYyBjcmVhdGVUcmFuc2Zvcm0obil7cmV0dXJuIHQuaXNTeW5jVHJhbnNmb3JtKG4pPyhpLGgpPT57bGV0IGY9bnVsbDt0cnl7Zj1uKGkpfWNhdGNoKHUpe3JldHVybiBoKHUpfXJldHVybiBoKG51bGwsZil9OihpLGgpPT57bihpLGgpfX1zZXQgcm93VHJh''@;'; put 'put ''bnNmb3JtKG4pe2lmKCFhLmRlZmF1bHQobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHRyYW5zZm9ybSBzaG91bGQgYmUgYSBmdW5jdGlvbiIpO3RoaXMuX3Jvd1RyYW5zZm9ybT1lLmNyZWF0ZVRyYW5zZm9ybShuKX1mb3JtYXQobixpKXt0aGlzLmNhbGxUcmFuc2Zvcm1lcihuLChoLGYp''@;'; put 'put ''PT57aWYoaClyZXR1cm4gaShoKTtpZighbilyZXR1cm4gaShudWxsKTtjb25zdCB1PVtdO2lmKGYpe2NvbnN0e3Nob3VsZEZvcm1hdENvbHVtbnM6cCxoZWFkZXJzOmR9PXRoaXMuY2hlY2tIZWFkZXJzKGYpO2lmKHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzJiZkJiYhdGhpcy5oYXNXcml0dGVu''@;'; put 'put ''SGVhZGVycyYmKHUucHVzaCh0aGlzLmZvcm1hdENvbHVtbnMoZCwhMCkpLHRoaXMuaGFzV3JpdHRlbkhlYWRlcnM9ITApLHApe2NvbnN0IHY9dGhpcy5nYXRoZXJDb2x1bW5zKGYpO3UucHVzaCh0aGlzLmZvcm1hdENvbHVtbnModiwhMSkpfX1yZXR1cm4gaShudWxsLHUpfSl9ZmluaXNoKG4p''@;'; put 'put ''e2NvbnN0IGk9W107aWYodGhpcy5mb3JtYXR0ZXJPcHRpb25zLmFsd2F5c1dyaXRlSGVhZGVycyYmMD09PXRoaXMucm93Q291bnQpe2lmKCF0aGlzLmhlYWRlcnMpcmV0dXJuIG4obmV3IEVycm9yKCJgYWx3YXlzV3JpdGVIZWFkZXJzYCBvcHRpb24gaXMgc2V0IHRvIHRydWUgYnV0IGBoZWFk''@;'; put 'put ''ZXJzYCBvcHRpb24gbm90IHByb3ZpZGVkLiIpKTtpLnB1c2godGhpcy5mb3JtYXRDb2x1bW5zKHRoaXMuaGVhZGVycywhMCkpfXJldHVybiB0aGlzLmZvcm1hdHRlck9wdGlvbnMuaW5jbHVkZUVuZFJvd0RlbGltaXRlciYmaS5wdXNoKHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5yb3dEZWxpbWl0''@;'; put 'put ''ZXIpLG4obnVsbCxpKX1jaGVja0hlYWRlcnMobil7aWYodGhpcy5oZWFkZXJzKXJldHVybntzaG91bGRGb3JtYXRDb2x1bW5zOiEwLGhlYWRlcnM6dGhpcy5oZWFkZXJzfTtjb25zdCBpPWUuZ2F0aGVySGVhZGVycyhuKTtyZXR1cm4gdGhpcy5oZWFkZXJzPWksdGhpcy5maWVsZEZvcm1hdHRl''@;'; put 'put ''ci5oZWFkZXJzPWksdGhpcy5zaG91bGRXcml0ZUhlYWRlcnM/e3Nob3VsZEZvcm1hdENvbHVtbnM6IW8uZGVmYXVsdChpLG4pLGhlYWRlcnM6aX06e3Nob3VsZEZvcm1hdENvbHVtbnM6ITAsaGVhZGVyczpudWxsfX1nYXRoZXJDb2x1bW5zKG4pe2lmKG51bGw9PT10aGlzLmhlYWRlcnMpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJIZWFkZXJzIGlzIGN1cnJlbnRseSBudWxsIik7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/ZS5pc1Jvd0hhc2hBcnJheShuKT90aGlzLmhlYWRlcnMubWFwKChpLGgpPT57Y29uc3QgZj1uW2hdO3JldHVybiBmP2ZbMV06IiJ9KTplLmlzUm93QXJyYXkobikmJiF0aGlz''@;'; put 'put ''LnNob3VsZFdyaXRlSGVhZGVycz9uOnRoaXMuaGVhZGVycy5tYXAoKGksaCk9Pm5baF0pOnRoaXMuaGVhZGVycy5tYXAoaT0+bltpXSl9Y2FsbFRyYW5zZm9ybWVyKG4saSl7cmV0dXJuIHRoaXMuX3Jvd1RyYW5zZm9ybT90aGlzLl9yb3dUcmFuc2Zvcm0obixpKTppKG51bGwsbil9Zm9ybWF0''@;'; put 'put ''Q29sdW1ucyhuLGkpe2NvbnN0IGg9bi5tYXAoKHUscCk9PnRoaXMuZmllbGRGb3JtYXR0ZXIuZm9ybWF0KHUscCxpKSkuam9pbih0aGlzLmZvcm1hdHRlck9wdGlvbnMuZGVsaW1pdGVyKSx7cm93Q291bnQ6Zn09dGhpcztyZXR1cm4gdGhpcy5yb3dDb3VudCs9MSxmP1t0aGlzLmZvcm1hdHRl''@;'; put 'put ''ck9wdGlvbnMucm93RGVsaW1pdGVyLGhdLmpvaW4oIiIpOmh9fVMuUm93Rm9ybWF0dGVyPWV9LHsiLi4vdHlwZXMiOjE1MiwiLi9GaWVsZEZvcm1hdHRlciI6MTQ4LCJsb2Rhc2guaXNlcXVhbCI6NDQ1LCJsb2Rhc2guaXNmdW5jdGlvbiI6NDQ2fV0sMTUwOltmdW5jdGlvbihzLEUsUyl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxTLkZpZWxkRm9ybWF0dGVyPVMuUm93Rm9ybWF0dGVyPXZvaWQgMDt2YXIgYj1zKCIuL1Jvd0Zvcm1hdHRlciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJSb3dGb3JtYXR0ZXIiLHtl''@;'; put 'put ''bnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBiLlJvd0Zvcm1hdHRlcn19KTt2YXIgYT1zKCIuL0ZpZWxkRm9ybWF0dGVyIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIkZpZWxkRm9ybWF0dGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5GaWVs''@;'; put 'put ''ZEZvcm1hdHRlcn19KX0seyIuL0ZpZWxkRm9ybWF0dGVyIjoxNDgsIi4vUm93Rm9ybWF0dGVyIjoxNDl9XSwxNTE6W2Z1bmN0aW9uKHMsRSxTKXsoZnVuY3Rpb24oYil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBhPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24ocCxkLHYsXyl7dm9pZCAw''@;'; put 'put ''PT09XyYmKF89diksT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsXyx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZFt2XX19KX06ZnVuY3Rpb24ocCxkLHYsXyl7dm9pZCAwPT09XyYmKF89dikscFtfXT1kW3ZdfSxvPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24ocCxkKXtPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkocCwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZH0pfTpmdW5jdGlvbihwLGQpe3AuZGVmYXVsdD1kfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksUy53cml0ZVRvUGF0aD1TLndyaXRlVG9TdHJpbmc9Uy53''@;'; put 'put ''cml0ZVRvQnVmZmVyPVMud3JpdGVUb1N0cmVhbT1TLndyaXRlPVMuZm9ybWF0PVMuRm9ybWF0dGVyT3B0aW9ucz1TLkNzdkZvcm1hdHRlclN0cmVhbT12b2lkIDA7Y29uc3QgZT1zKCJ1dGlsIiksbD1zKCJzdHJlYW0iKSxuPWZ1bmN0aW9uKHApe2lmKHAmJnAuX19lc01vZHVsZSlyZXR1cm4g''@;'; put 'put ''cDt2YXIgZD17fTtpZihudWxsIT1wKWZvcih2YXIgdiBpbiBwKSJkZWZhdWx0IiE9PXYmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwLHYpJiZhKGQscCx2KTtyZXR1cm4gbyhkLHApLGR9KHMoImZzIikpLGk9cygiLi9Gb3JtYXR0ZXJPcHRpb25zIiksaD1zKCIuL0Nz''@;'; put 'put ''dkZvcm1hdHRlclN0cmVhbSIpOyFmdW5jdGlvbihwLGQpe2Zvcih2YXIgdiBpbiBwKSJkZWZhdWx0Ij09PXZ8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLHYpfHxhKGQscCx2KX0ocygiLi90eXBlcyIpLFMpO3ZhciBmPXMoIi4vQ3N2Rm9ybWF0dGVyU3RyZWFtIik7''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIkNzdkZvcm1hdHRlclN0cmVhbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGYuQ3N2Rm9ybWF0dGVyU3RyZWFtfX0pO3ZhciB1PXMoIi4vRm9ybWF0dGVyT3B0aW9ucyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJGb3Jt''@;'; put 'put ''YXR0ZXJPcHRpb25zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5Gb3JtYXR0ZXJPcHRpb25zfX0pLFMuZm9ybWF0PXA9Pm5ldyBoLkNzdkZvcm1hdHRlclN0cmVhbShuZXcgaS5Gb3JtYXR0ZXJPcHRpb25zKHApKSxTLndyaXRlPShwLGQpPT57Y29uc3Qgdj1TLmZv''@;'; put 'put ''cm1hdChkKSxfPWUucHJvbWlzaWZ5KChBLEkpPT57di53cml0ZShBLHZvaWQgMCxJKX0pO3JldHVybiBwLnJlZHVjZSgoQSxJKT0+QS50aGVuKCgpPT5fKEkpKSxQcm9taXNlLnJlc29sdmUoKSkudGhlbigoKT0+di5lbmQoKSkuY2F0Y2goQT0+e3YuZW1pdCgiZXJyb3IiLEEpfSksdn0sUy53''@;'; put 'put ''cml0ZVRvU3RyZWFtPShwLGQsdik9PlMud3JpdGUoZCx2KS5waXBlKHApLFMud3JpdGVUb0J1ZmZlcj1mdW5jdGlvbihwKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307Y29uc3Qgdj1bXSxfPW5ldyBsLldyaXRhYmxlKHt3''@;'; put 'put ''cml0ZShBLEksTCl7di5wdXNoKEEpLEwoKX19KTtyZXR1cm4gbmV3IFByb21pc2UoKEEsSSk9PntfLm9uKCJlcnJvciIsSSkub24oImZpbmlzaCIsKCk9PkEoYi5jb25jYXQodikpKSxTLndyaXRlKHAsZCkucGlwZShfKX0pfSxTLndyaXRlVG9TdHJpbmc9KHAsZCk9PlMud3JpdGVUb0J1ZmZl''@;'; put 'put ''cihwLGQpLnRoZW4odj0+di50b1N0cmluZygpKSxTLndyaXRlVG9QYXRoPShwLGQsdik9Pntjb25zdCBfPW4uY3JlYXRlV3JpdGVTdHJlYW0ocCx7ZW5jb2Rpbmc6InV0ZjgifSk7cmV0dXJuIFMud3JpdGUoZCx2KS5waXBlKF8pfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMscygiYnVmZmVy''@;'; put 'put ''IikuQnVmZmVyKX0seyIuL0NzdkZvcm1hdHRlclN0cmVhbSI6MTQ2LCIuL0Zvcm1hdHRlck9wdGlvbnMiOjE0NywiLi90eXBlcyI6MTUyLGJ1ZmZlcjoyMjAsZnM6MjE2LHN0cmVhbTo1MDUsdXRpbDo1Mjd9XSwxNTI6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KFMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFMuaXNTeW5jVHJhbnNmb3JtPXZvaWQgMCxTLmlzU3luY1RyYW5zZm9ybT1iPT4xPT09Yi5sZW5ndGh9LHt9XSwxNTM6W2Z1bmN0aW9uKHMsRSxTKXsoZnVuY3Rpb24oYil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShTLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxTLkNzdlBhcnNlclN0cmVhbT12b2lkIDA7Y29uc3QgYT1zKCJzdHJpbmdfZGVjb2RlciIpLG89cygic3RyZWFtIikscj1zKCIuL3RyYW5zZm9ybXMiKSx0PXMoIi4vcGFyc2VyIik7Y2xhc3MgZSBleHRlbmRzIG8u''@;'; put 'put ''VHJhbnNmb3Jte2NvbnN0cnVjdG9yKG4pe3N1cGVyKHtvYmplY3RNb2RlOm4ub2JqZWN0TW9kZX0pLHRoaXMubGluZXM9IiIsdGhpcy5yb3dDb3VudD0wLHRoaXMucGFyc2VkUm93Q291bnQ9MCx0aGlzLnBhcnNlZExpbmVDb3VudD0wLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLmhlYWRlcnNF''@;'; put 'put ''bWl0dGVkPSExLHRoaXMucGFyc2VyT3B0aW9ucz1uLHRoaXMucGFyc2VyPW5ldyB0LlBhcnNlcihuKSx0aGlzLmhlYWRlclRyYW5zZm9ybWVyPW5ldyByLkhlYWRlclRyYW5zZm9ybWVyKG4pLHRoaXMuZGVjb2Rlcj1uZXcgYS5TdHJpbmdEZWNvZGVyKG4uZW5jb2RpbmcpLHRoaXMucm93VHJh''@;'; put 'put ''bnNmb3JtZXJWYWxpZGF0b3I9bmV3IHIuUm93VHJhbnNmb3JtZXJWYWxpZGF0b3J9Z2V0IGhhc0hpdFJvd0xpbWl0KCl7cmV0dXJuIHRoaXMucGFyc2VyT3B0aW9ucy5saW1pdFJvd3MmJnRoaXMucm93Q291bnQ+PXRoaXMucGFyc2VyT3B0aW9ucy5tYXhSb3dzfWdldCBzaG91bGRFbWl0Um93''@;'; put 'put ''cygpe3JldHVybiB0aGlzLnBhcnNlZFJvd0NvdW50PnRoaXMucGFyc2VyT3B0aW9ucy5za2lwUm93c31nZXQgc2hvdWxkU2tpcExpbmUoKXtyZXR1cm4gdGhpcy5wYXJzZWRMaW5lQ291bnQ8PXRoaXMucGFyc2VyT3B0aW9ucy5za2lwTGluZXN9dHJhbnNmb3JtKG4pe3JldHVybiB0aGlzLnJv''@;'; put 'put ''d1RyYW5zZm9ybWVyVmFsaWRhdG9yLnJvd1RyYW5zZm9ybT1uLHRoaXN9dmFsaWRhdGUobil7cmV0dXJuIHRoaXMucm93VHJhbnNmb3JtZXJWYWxpZGF0b3Iucm93VmFsaWRhdG9yPW4sdGhpc31lbWl0KG4pe2lmKCJlbmQiPT09bilyZXR1cm4gdGhpcy5lbmRFbWl0dGVkfHwodGhpcy5lbmRF''@;'; put 'put ''bWl0dGVkPSEwLHN1cGVyLmVtaXQoImVuZCIsdGhpcy5yb3dDb3VudCkpLCExO2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGk+MT9pLTE6MCksZj0xO2Y8aTtmKyspaFtmLTFdPWFyZ3VtZW50c1tmXTtyZXR1cm4gc3VwZXIuZW1pdChuLC4uLmgpfV90cmFuc2Zvcm0o''@;'; put 'put ''bixpLGgpe2lmKHRoaXMuaGFzSGl0Um93TGltaXQpcmV0dXJuIGgoKTtjb25zdCBmPWUud3JhcERvbmVDYWxsYmFjayhoKTt0cnl7Y29uc3R7bGluZXM6dX09dGhpcyxwPXUrdGhpcy5kZWNvZGVyLndyaXRlKG4pLGQ9dGhpcy5wYXJzZShwLCEwKTtyZXR1cm4gdGhpcy5wcm9jZXNzUm93cyhk''@;'; put 'put ''LGYpfWNhdGNoKHUpe3JldHVybiBmKHUpfX1fZmx1c2gobil7Y29uc3QgaT1lLndyYXBEb25lQ2FsbGJhY2sobik7aWYodGhpcy5oYXNIaXRSb3dMaW1pdClyZXR1cm4gaSgpO3RyeXtjb25zdCBoPXRoaXMubGluZXMrdGhpcy5kZWNvZGVyLmVuZCgpLGY9dGhpcy5wYXJzZShoLCExKTtyZXR1''@;'; put 'put ''cm4gdGhpcy5wcm9jZXNzUm93cyhmLGkpfWNhdGNoKGgpe3JldHVybiBpKGgpfX1wYXJzZShuLGkpe2lmKCFuKXJldHVybltdO2NvbnN0e2xpbmU6aCxyb3dzOmZ9PXRoaXMucGFyc2VyLnBhcnNlKG4saSk7cmV0dXJuIHRoaXMubGluZXM9aCxmfXByb2Nlc3NSb3dzKG4saSl7Y29uc3QgaD1u''@;'; put 'put ''Lmxlbmd0aCxmPXU9Pntjb25zdCBwPV89Pl8/aShfKTp1JTEwMCE9MD9mKHUrMSk6dm9pZCBiKCgpPT5mKHUrMSkpO2lmKHRoaXMuY2hlY2tBbmRFbWl0SGVhZGVycygpLHU+PWh8fHRoaXMuaGFzSGl0Um93TGltaXQpcmV0dXJuIGkoKTtpZih0aGlzLnBhcnNlZExpbmVDb3VudCs9MSx0aGlz''@;'; put 'put ''LnNob3VsZFNraXBMaW5lKXJldHVybiBwKCk7Y29uc3QgZD1uW3VdO3RoaXMucm93Q291bnQrPTEsdGhpcy5wYXJzZWRSb3dDb3VudCs9MTtjb25zdCB2PXRoaXMucm93Q291bnQ7cmV0dXJuIHRoaXMudHJhbnNmb3JtUm93KGQsKF8sQSk9PntpZihfKXJldHVybiB0aGlzLnJvd0NvdW50LT0x''@;'; put 'put ''LHAoXyk7aWYoIUEpcmV0dXJuIHAobmV3IEVycm9yKCJleHBlY3RlZCB0cmFuc2Zvcm0gcmVzdWx0IikpO2lmKEEuaXNWYWxpZCl7aWYoQS5yb3cpcmV0dXJuIHRoaXMucHVzaFJvdyhBLnJvdyxwKX1lbHNlIHRoaXMuZW1pdCgiZGF0YS1pbnZhbGlkIixBLnJvdyx2LEEucmVhc29uKTtyZXR1''@;'; put 'put ''cm4gcCgpfSl9O2YoMCl9dHJhbnNmb3JtUm93KG4saSl7dHJ5e3RoaXMuaGVhZGVyVHJhbnNmb3JtZXIudHJhbnNmb3JtKG4sKGgsZik9Pmg/aShoKTpmP2YuaXNWYWxpZD9mLnJvdz90aGlzLnNob3VsZEVtaXRSb3dzP3RoaXMucm93VHJhbnNmb3JtZXJWYWxpZGF0b3IudHJhbnNmb3JtQW5k''@;'; put 'put ''VmFsaWRhdGUoZi5yb3csaSk6dGhpcy5za2lwUm93KGkpOih0aGlzLnJvd0NvdW50LT0xLHRoaXMucGFyc2VkUm93Q291bnQtPTEsaShudWxsLHtyb3c6bnVsbCxpc1ZhbGlkOiEwfSkpOnRoaXMuc2hvdWxkRW1pdFJvd3M/aShudWxsLHtpc1ZhbGlkOiExLHJvdzpufSk6dGhpcy5za2lwUm93''@;'; put 'put ''KGkpOmkobmV3IEVycm9yKCJFeHBlY3RlZCByZXN1bHQgZnJvbSBoZWFkZXIgdHJhbnNmb3JtIikpKX1jYXRjaChoKXtpKGgpfX1jaGVja0FuZEVtaXRIZWFkZXJzKCl7IXRoaXMuaGVhZGVyc0VtaXR0ZWQmJnRoaXMuaGVhZGVyVHJhbnNmb3JtZXIuaGVhZGVycyYmKHRoaXMuaGVhZGVyc0Vt''@;'; put 'put ''aXR0ZWQ9ITAsdGhpcy5lbWl0KCJoZWFkZXJzIix0aGlzLmhlYWRlclRyYW5zZm9ybWVyLmhlYWRlcnMpKX1za2lwUm93KG4pe3JldHVybiB0aGlzLnJvd0NvdW50LT0xLG4obnVsbCx7cm93Om51bGwsaXNWYWxpZDohMH0pfXB1c2hSb3cobixpKXt0cnl7dGhpcy5wdXNoKHRoaXMucGFyc2Vy''@;'; put 'put ''T3B0aW9ucy5vYmplY3RNb2RlP246SlNPTi5zdHJpbmdpZnkobikpLGkoKX1jYXRjaChoKXtpKGgpfX1zdGF0aWMgd3JhcERvbmVDYWxsYmFjayhuKXtsZXQgaT0hMTtyZXR1cm4gZnVuY3Rpb24oaCl7aWYoaCl7aWYoaSl0aHJvdyBoO3JldHVybiBpPSEwLHZvaWQgbihoKX1mb3IodmFyIGY9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aCx1PW5ldyBBcnJheShmPjE/Zi0xOjApLHA9MTtwPGY7cCsrKXVbcC0xXT1hcmd1bWVudHNbcF07biguLi51KX19fVMuQ3N2UGFyc2VyU3RyZWFtPWV9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHMoInRpbWVycyIpLnNldEltbWVkaWF0ZSl9LHsiLi9wYXJzZXIi''@;'; put 'put ''OjE2NSwiLi90cmFuc2Zvcm1zIjoxNjgsc3RyZWFtOjUwNSxzdHJpbmdfZGVjb2RlcjoyMTgsdGltZXJzOjUyM31dLDE1NDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1mdW5jdGlvbihyKXtyZXR1cm4gciYmci5fX2VzTW9kdWxlP3I6e2RlZmF1bHQ6cn19O09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShTLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxTLlBhcnNlck9wdGlvbnM9dm9pZCAwO2NvbnN0IGE9YihzKCJsb2Rhc2guZXNjYXBlcmVnZXhwIikpLG89YihzKCJsb2Rhc2guaXNuaWwiKSk7Uy5QYXJzZXJPcHRpb25zPWNsYXNze2NvbnN0cnVjdG9yKHIpe3ZhciB0''@;'; put 'put ''O2lmKHRoaXMub2JqZWN0TW9kZT0hMCx0aGlzLmRlbGltaXRlcj0iLCIsdGhpcy5pZ25vcmVFbXB0eT0hMSx0aGlzLnF1b3RlPSciJyx0aGlzLmVzY2FwZT1udWxsLHRoaXMuZXNjYXBlQ2hhcj10aGlzLnF1b3RlLHRoaXMuY29tbWVudD1udWxsLHRoaXMuc3VwcG9ydHNDb21tZW50cz0hMSx0''@;'; put 'put ''aGlzLmx0cmltPSExLHRoaXMucnRyaW09ITEsdGhpcy50cmltPSExLHRoaXMuaGVhZGVycz1udWxsLHRoaXMucmVuYW1lSGVhZGVycz0hMSx0aGlzLnN0cmljdENvbHVtbkhhbmRsaW5nPSExLHRoaXMuZGlzY2FyZFVubWFwcGVkQ29sdW1ucz0hMSx0aGlzLmNhcnJpYWdlUmV0dXJuPSJcciIs''@;'; put 'put ''dGhpcy5lbmNvZGluZz0idXRmOCIsdGhpcy5saW1pdFJvd3M9ITEsdGhpcy5tYXhSb3dzPTAsdGhpcy5za2lwTGluZXM9MCx0aGlzLnNraXBSb3dzPTAsT2JqZWN0LmFzc2lnbih0aGlzLHJ8fHt9KSx0aGlzLmRlbGltaXRlci5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoImRlbGltaXRlciBv''@;'; put 'put ''cHRpb24gbXVzdCBiZSBvbmUgY2hhcmFjdGVyIGxvbmciKTt0aGlzLmVzY2FwZWREZWxpbWl0ZXI9YS5kZWZhdWx0KHRoaXMuZGVsaW1pdGVyKSx0aGlzLmVzY2FwZUNoYXI9bnVsbCE9PSh0PXRoaXMuZXNjYXBlKSYmdm9pZCAwIT09dD90OnRoaXMucXVvdGUsdGhpcy5zdXBwb3J0c0NvbW1l''@;'; put 'put ''bnRzPSFvLmRlZmF1bHQodGhpcy5jb21tZW50KSx0aGlzLk5FWFRfVE9LRU5fUkVHRVhQPW5ldyBSZWdFeHAoYChbXlxcc118XFxyXFxufFxcbnxcXHJ8JHt0aGlzLmVzY2FwZWREZWxpbWl0ZXJ9KWApLHRoaXMubWF4Um93cz4wJiYodGhpcy5saW1pdFJvd3M9ITApfX19LHsibG9kYXNoLmVz''@;'; put 'put ''Y2FwZXJlZ2V4cCI6NDQyLCJsb2Rhc2guaXNuaWwiOjQ0N31dLDE1NTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGYsdSxwLGQpe3ZvaWQgMD09PWQmJihkPXApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLGQse2VudW1lcmFibGU6''@;'; put 'put ''ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHVbcF19fSl9OmZ1bmN0aW9uKGYsdSxwLGQpe3ZvaWQgMD09PWQmJihkPXApLGZbZF09dVtwXX0sYT1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGYsdSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGYsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVl''@;'; put 'put ''OnV9KX06ZnVuY3Rpb24oZix1KXtmLmRlZmF1bHQ9dX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFMucGFyc2VTdHJpbmc9Uy5wYXJzZUZpbGU9Uy5wYXJzZVN0cmVhbT1TLnBhcnNlPVMuUGFyc2VyT3B0aW9ucz1TLkNzdlBhcnNlclN0cmVhbT12''@;'; put 'put ''b2lkIDA7Y29uc3QgdD1mdW5jdGlvbihmKXtpZihmJiZmLl9fZXNNb2R1bGUpcmV0dXJuIGY7dmFyIHU9e307aWYobnVsbCE9Zilmb3IodmFyIHAgaW4gZikiZGVmYXVsdCIhPT1wJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZixwKSYmYih1LGYscCk7cmV0dXJuIGEo''@;'; put 'put ''dSxmKSx1fShzKCJmcyIpKSxlPXMoInN0cmVhbSIpLGw9cygiLi9QYXJzZXJPcHRpb25zIiksbj1zKCIuL0NzdlBhcnNlclN0cmVhbSIpOyFmdW5jdGlvbihmLHUpe2Zvcih2YXIgcCBpbiBmKSJkZWZhdWx0Ij09PXB8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1LHAp''@;'; put 'put ''fHxiKHUsZixwKX0ocygiLi90eXBlcyIpLFMpO3ZhciBpPXMoIi4vQ3N2UGFyc2VyU3RyZWFtIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIkNzdlBhcnNlclN0cmVhbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuQ3N2UGFyc2VyU3RyZWFtfX0pO3ZhciBoPXMo''@;'; put 'put ''Ii4vUGFyc2VyT3B0aW9ucyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJQYXJzZXJPcHRpb25zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaC5QYXJzZXJPcHRpb25zfX0pLFMucGFyc2U9Zj0+bmV3IG4uQ3N2UGFyc2VyU3RyZWFtKG5ldyBsLlBhcnNlck9wdGlv''@;'; put 'put ''bnMoZikpLFMucGFyc2VTdHJlYW09KGYsdSk9PmYucGlwZShuZXcgbi5Dc3ZQYXJzZXJTdHJlYW0obmV3IGwuUGFyc2VyT3B0aW9ucyh1KSkpLFMucGFyc2VGaWxlPWZ1bmN0aW9uKGYpe2xldCB1PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sx''@;'; put 'put ''XTp7fTtyZXR1cm4gdC5jcmVhdGVSZWFkU3RyZWFtKGYpLnBpcGUobmV3IG4uQ3N2UGFyc2VyU3RyZWFtKG5ldyBsLlBhcnNlck9wdGlvbnModSkpKX0sUy5wYXJzZVN0cmluZz0oZix1KT0+e2NvbnN0IHA9bmV3IGUuUmVhZGFibGU7cmV0dXJuIHAucHVzaChmKSxwLnB1c2gobnVsbCkscC5w''@;'; put 'put ''aXBlKG5ldyBuLkNzdlBhcnNlclN0cmVhbShuZXcgbC5QYXJzZXJPcHRpb25zKHUpKSl9fSx7Ii4vQ3N2UGFyc2VyU3RyZWFtIjoxNTMsIi4vUGFyc2VyT3B0aW9ucyI6MTU0LCIuL3R5cGVzIjoxNjksZnM6MjE2LHN0cmVhbTo1MDV9XSwxNTY6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFMuUGFyc2VyPXZvaWQgMDtjb25zdCBiPXMoIi4vU2Nhbm5lciIpLGE9cygiLi9Sb3dQYXJzZXIiKSxvPXMoIi4vVG9rZW4iKTtjbGFzcyBye2NvbnN0cnVjdG9yKGUpe3RoaXMucGFyc2VyT3B0aW9u''@;'; put 'put ''cz1lLHRoaXMucm93UGFyc2VyPW5ldyBhLlJvd1BhcnNlcih0aGlzLnBhcnNlck9wdGlvbnMpfXN0YXRpYyByZW1vdmVCT00oZSl7cmV0dXJuIGUmJjY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApP2Uuc2xpY2UoMSk6ZX1wYXJzZShlLGwpe2NvbnN0IG49bmV3IGIuU2Nhbm5lcih7bGluZTpyLnJl''@;'; put 'put ''bW92ZUJPTShlKSxwYXJzZXJPcHRpb25zOnRoaXMucGFyc2VyT3B0aW9ucyxoYXNNb3JlRGF0YTpsfSk7cmV0dXJuIHRoaXMucGFyc2VyT3B0aW9ucy5zdXBwb3J0c0NvbW1lbnRzP3RoaXMucGFyc2VXaXRoQ29tbWVudHMobik6dGhpcy5wYXJzZVdpdGhvdXRDb21tZW50cyhuKX1wYXJzZVdp''@;'; put 'put ''dGhvdXRDb21tZW50cyhlKXtjb25zdCBsPVtdO2xldCBuPSEwO2Zvcig7bjspbj10aGlzLnBhcnNlUm93KGUsbCk7cmV0dXJue2xpbmU6ZS5saW5lLHJvd3M6bH19cGFyc2VXaXRoQ29tbWVudHMoZSl7Y29uc3R7cGFyc2VyT3B0aW9uczpsfT10aGlzLG49W107Zm9yKGxldCBpPWUubmV4dENo''@;'; put 'put ''YXJhY3RlclRva2VuO251bGwhPT1pO2k9ZS5uZXh0Q2hhcmFjdGVyVG9rZW4paWYoby5Ub2tlbi5pc1Rva2VuQ29tbWVudChpLGwpKXtpZihudWxsPT09ZS5hZHZhbmNlUGFzdExpbmUoKSlyZXR1cm57bGluZTplLmxpbmVGcm9tQ3Vyc29yLHJvd3M6bn07aWYoIWUuaGFzTW9yZUNoYXJhY3Rl''@;'; put 'put ''cnMpcmV0dXJue2xpbmU6ZS5saW5lRnJvbUN1cnNvcixyb3dzOm59O2UudHJ1bmNhdGVUb0N1cnNvcigpfWVsc2UgaWYoIXRoaXMucGFyc2VSb3coZSxuKSlicmVhaztyZXR1cm57bGluZTplLmxpbmUscm93czpufX1wYXJzZVJvdyhlLGwpe2lmKCFlLm5leHROb25TcGFjZVRva2VuKXJldHVy''@;'; put 'put ''biExO2NvbnN0IG49dGhpcy5yb3dQYXJzZXIucGFyc2UoZSk7cmV0dXJuIG51bGwhPT1uJiYodGhpcy5wYXJzZXJPcHRpb25zLmlnbm9yZUVtcHR5JiZhLlJvd1BhcnNlci5pc0VtcHR5Um93KG4pfHxsLnB1c2gobiksITApfX1TLlBhcnNlcj1yfSx7Ii4vUm93UGFyc2VyIjoxNTcsIi4vU2Nh''@;'; put 'put ''bm5lciI6MTU4LCIuL1Rva2VuIjoxNTl9XSwxNTc6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFMuUm93UGFyc2VyPXZvaWQgMDtjb25zdCBiPXMoIi4vY29sdW1uIiksYT1zKCIuL1Rva2VuIik7''@;'; put 'put ''Uy5Sb3dQYXJzZXI9Y2xhc3N7Y29uc3RydWN0b3Iobyl7dGhpcy5wYXJzZXJPcHRpb25zPW8sdGhpcy5jb2x1bW5QYXJzZXI9bmV3IGIuQ29sdW1uUGFyc2VyKG8pfXN0YXRpYyBpc0VtcHR5Um93KG8pe3JldHVybiIiPT09by5qb2luKCIiKS5yZXBsYWNlKC9ccysvZywiIil9cGFyc2Uobyl7''@;'; put 'put ''Y29uc3R7cGFyc2VyT3B0aW9uczpyfT10aGlzLHtoYXNNb3JlRGF0YTp0fT1vLGU9byxsPVtdO2xldCBuPXRoaXMuZ2V0U3RhcnRUb2tlbihlLGwpO2Zvcig7bjspe2lmKGEuVG9rZW4uaXNUb2tlblJvd0RlbGltaXRlcihuKSlyZXR1cm4gZS5hZHZhbmNlUGFzdFRva2VuKG4pLCFlLmhhc01v''@;'; put 'put ''cmVDaGFyYWN0ZXJzJiZhLlRva2VuLmlzVG9rZW5DYXJyaWFnZVJldHVybihuLHIpJiZ0P251bGw6KGUudHJ1bmNhdGVUb0N1cnNvcigpLGwpO2lmKCF0aGlzLnNob3VsZFNraXBDb2x1bW5QYXJzZShlLG4sbCkpe2NvbnN0IGk9dGhpcy5jb2x1bW5QYXJzZXIucGFyc2UoZSk7aWYobnVsbD09''@;'; put 'put ''PWkpcmV0dXJuIG51bGw7bC5wdXNoKGkpfW49ZS5uZXh0Tm9uU3BhY2VUb2tlbn1yZXR1cm4gdD9udWxsOihlLnRydW5jYXRlVG9DdXJzb3IoKSxsKX1nZXRTdGFydFRva2VuKG8scil7Y29uc3QgdD1vLm5leHROb25TcGFjZVRva2VuO3JldHVybiBudWxsIT09dCYmYS5Ub2tlbi5pc1Rva2Vu''@;'; put 'put ''RGVsaW1pdGVyKHQsdGhpcy5wYXJzZXJPcHRpb25zKT8oci5wdXNoKCIiKSxvLm5leHROb25TcGFjZVRva2VuKTp0fXNob3VsZFNraXBDb2x1bW5QYXJzZShvLHIsdCl7Y29uc3R7cGFyc2VyT3B0aW9uczplfT10aGlzO2lmKGEuVG9rZW4uaXNUb2tlbkRlbGltaXRlcihyLGUpKXtvLmFkdmFu''@;'; put 'put ''Y2VQYXN0VG9rZW4ocik7Y29uc3QgbD1vLm5leHRDaGFyYWN0ZXJUb2tlbjtpZighby5oYXNNb3JlQ2hhcmFjdGVyc3x8bnVsbCE9PWwmJmEuVG9rZW4uaXNUb2tlblJvd0RlbGltaXRlcihsKXx8bnVsbCE9PWwmJmEuVG9rZW4uaXNUb2tlbkRlbGltaXRlcihsLGUpKXJldHVybiB0LnB1c2go''@;'; put 'put ''IiIpLCEwfXJldHVybiExfX19LHsiLi9Ub2tlbiI6MTU5LCIuL2NvbHVtbiI6MTY0fV0sMTU4OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxTLlNjYW5uZXI9dm9pZCAwO2NvbnN0IGI9cygiLi9U''@;'; put 'put ''b2tlbiIpLGE9LygoPzpcclxuKXxcbnxccikvO1MuU2Nhbm5lcj1jbGFzc3tjb25zdHJ1Y3RvcihvKXt0aGlzLmN1cnNvcj0wLHRoaXMubGluZT1vLmxpbmUsdGhpcy5saW5lTGVuZ3RoPXRoaXMubGluZS5sZW5ndGgsdGhpcy5wYXJzZXJPcHRpb25zPW8ucGFyc2VyT3B0aW9ucyx0aGlzLmhh''@;'; put 'put ''c01vcmVEYXRhPW8uaGFzTW9yZURhdGEsdGhpcy5jdXJzb3I9by5jdXJzb3J8fDB9Z2V0IGhhc01vcmVDaGFyYWN0ZXJzKCl7cmV0dXJuIHRoaXMubGluZUxlbmd0aD50aGlzLmN1cnNvcn1nZXQgbmV4dE5vblNwYWNlVG9rZW4oKXtjb25zdHtsaW5lRnJvbUN1cnNvcjpvfT10aGlzLHI9dGhp''@;'; put 'put ''cy5wYXJzZXJPcHRpb25zLk5FWFRfVE9LRU5fUkVHRVhQO2lmKC0xPT09by5zZWFyY2gocikpcmV0dXJuIG51bGw7Y29uc3QgdD1yLmV4ZWMobyk7aWYobnVsbD09dClyZXR1cm4gbnVsbDtjb25zdCBlPXRbMV0sbD10aGlzLmN1cnNvcisodC5pbmRleHx8MCk7cmV0dXJuIG5ldyBiLlRva2Vu''@;'; put 'put ''KHt0b2tlbjplLHN0YXJ0Q3Vyc29yOmwsZW5kQ3Vyc29yOmwrZS5sZW5ndGgtMX0pfWdldCBuZXh0Q2hhcmFjdGVyVG9rZW4oKXtjb25zdHtjdXJzb3I6byxsaW5lTGVuZ3RoOnJ9PXRoaXM7cmV0dXJuIHI8PW8/bnVsbDpuZXcgYi5Ub2tlbih7dG9rZW46dGhpcy5saW5lW29dLHN0YXJ0Q3Vy''@;'; put 'put ''c29yOm8sZW5kQ3Vyc29yOm99KX1nZXQgbGluZUZyb21DdXJzb3IoKXtyZXR1cm4gdGhpcy5saW5lLnN1YnN0cih0aGlzLmN1cnNvcil9YWR2YW5jZVBhc3RMaW5lKCl7Y29uc3Qgbz1hLmV4ZWModGhpcy5saW5lRnJvbUN1cnNvcik7cmV0dXJuIG8/KHRoaXMuY3Vyc29yKz0oby5pbmRleHx8''@;'; put 'put ''MCkrb1swXS5sZW5ndGgsdGhpcyk6dGhpcy5oYXNNb3JlRGF0YT9udWxsOih0aGlzLmN1cnNvcj10aGlzLmxpbmVMZW5ndGgsdGhpcyl9YWR2YW5jZVRvKG8pe3JldHVybiB0aGlzLmN1cnNvcj1vLHRoaXN9YWR2YW5jZVRvVG9rZW4obyl7cmV0dXJuIHRoaXMuY3Vyc29yPW8uc3RhcnRDdXJz''@;'; put 'put ''b3IsdGhpc31hZHZhbmNlUGFzdFRva2VuKG8pe3JldHVybiB0aGlzLmN1cnNvcj1vLmVuZEN1cnNvcisxLHRoaXN9dHJ1bmNhdGVUb0N1cnNvcigpe3JldHVybiB0aGlzLmxpbmU9dGhpcy5saW5lRnJvbUN1cnNvcix0aGlzLmxpbmVMZW5ndGg9dGhpcy5saW5lLmxlbmd0aCx0aGlzLmN1cnNv''@;'; put 'put ''cj0wLHRoaXN9fX0seyIuL1Rva2VuIjoxNTl9XSwxNTk6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFMuVG9rZW49dm9pZCAwLFMuVG9rZW49Y2xhc3N7Y29uc3RydWN0b3IoYil7dGhpcy50b2tl''@;'; put 'put ''bj1iLnRva2VuLHRoaXMuc3RhcnRDdXJzb3I9Yi5zdGFydEN1cnNvcix0aGlzLmVuZEN1cnNvcj1iLmVuZEN1cnNvcn1zdGF0aWMgaXNUb2tlblJvd0RlbGltaXRlcihiKXtjb25zdCBhPWIudG9rZW47cmV0dXJuIlxyIj09PWF8fCJcbiI9PT1hfHwiXHJcbiI9PT1hfXN0YXRpYyBpc1Rva2Vu''@;'; put 'put ''Q2FycmlhZ2VSZXR1cm4oYixhKXtyZXR1cm4gYi50b2tlbj09PWEuY2FycmlhZ2VSZXR1cm59c3RhdGljIGlzVG9rZW5Db21tZW50KGIsYSl7cmV0dXJuIGEuc3VwcG9ydHNDb21tZW50cyYmISFiJiZiLnRva2VuPT09YS5jb21tZW50fXN0YXRpYyBpc1Rva2VuRXNjYXBlQ2hhcmFjdGVyKGIs''@;'; put 'put ''YSl7cmV0dXJuIGIudG9rZW49PT1hLmVzY2FwZUNoYXJ9c3RhdGljIGlzVG9rZW5RdW90ZShiLGEpe3JldHVybiBiLnRva2VuPT09YS5xdW90ZX1zdGF0aWMgaXNUb2tlbkRlbGltaXRlcihiLGEpe3JldHVybiBiLnRva2VuPT09YS5kZWxpbWl0ZXJ9fX0se31dLDE2MDpbZnVuY3Rpb24ocyxF''@;'; put 'put ''LFMpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksUy5Db2x1bW5Gb3JtYXR0ZXI9dm9pZCAwLFMuQ29sdW1uRm9ybWF0dGVyPWNsYXNze2NvbnN0cnVjdG9yKGIpe3RoaXMuZm9ybWF0PWIudHJpbT9hPT5hLnRyaW0oKTpiLmx0''@;'; put 'put ''cmltP2E9PmEudHJpbUxlZnQoKTpiLnJ0cmltP2E9PmEudHJpbVJpZ2h0KCk6YT0+YX19fSx7fV0sMTYxOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxTLkNvbHVtblBhcnNlcj12b2lkIDA7Y29u''@;'; put 'put ''c3QgYj1zKCIuL05vblF1b3RlZENvbHVtblBhcnNlciIpLGE9cygiLi9RdW90ZWRDb2x1bW5QYXJzZXIiKSxvPXMoIi4uL1Rva2VuIik7Uy5Db2x1bW5QYXJzZXI9Y2xhc3N7Y29uc3RydWN0b3Iocil7dGhpcy5wYXJzZXJPcHRpb25zPXIsdGhpcy5xdW90ZWRDb2x1bW5QYXJzZXI9bmV3IGEu''@;'; put 'put ''UXVvdGVkQ29sdW1uUGFyc2VyKHIpLHRoaXMubm9uUXVvdGVkQ29sdW1uUGFyc2VyPW5ldyBiLk5vblF1b3RlZENvbHVtblBhcnNlcihyKX1wYXJzZShyKXtjb25zdHtuZXh0Tm9uU3BhY2VUb2tlbjp0fT1yO3JldHVybiBudWxsIT09dCYmby5Ub2tlbi5pc1Rva2VuUXVvdGUodCx0aGlzLnBh''@;'; put 'put ''cnNlck9wdGlvbnMpPyhyLmFkdmFuY2VUb1Rva2VuKHQpLHRoaXMucXVvdGVkQ29sdW1uUGFyc2VyLnBhcnNlKHIpKTp0aGlzLm5vblF1b3RlZENvbHVtblBhcnNlci5wYXJzZShyKX19fSx7Ii4uL1Rva2VuIjoxNTksIi4vTm9uUXVvdGVkQ29sdW1uUGFyc2VyIjoxNjIsIi4vUXVvdGVkQ29s''@;'; put 'put ''dW1uUGFyc2VyIjoxNjN9XSwxNjI6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFMuTm9uUXVvdGVkQ29sdW1uUGFyc2VyPXZvaWQgMDtjb25zdCBiPXMoIi4vQ29sdW1uRm9ybWF0dGVyIiksYT1z''@;'; put 'put ''KCIuLi9Ub2tlbiIpO1MuTm9uUXVvdGVkQ29sdW1uUGFyc2VyPWNsYXNze2NvbnN0cnVjdG9yKG8pe3RoaXMucGFyc2VyT3B0aW9ucz1vLHRoaXMuY29sdW1uRm9ybWF0dGVyPW5ldyBiLkNvbHVtbkZvcm1hdHRlcihvKX1wYXJzZShvKXtpZighby5oYXNNb3JlQ2hhcmFjdGVycylyZXR1cm4g''@;'; put 'put ''bnVsbDtjb25zdHtwYXJzZXJPcHRpb25zOnJ9PXRoaXMsdD1bXTtsZXQgZT1vLm5leHRDaGFyYWN0ZXJUb2tlbjtmb3IoO2UmJiFhLlRva2VuLmlzVG9rZW5EZWxpbWl0ZXIoZSxyKSYmIWEuVG9rZW4uaXNUb2tlblJvd0RlbGltaXRlcihlKTtlPW8ubmV4dENoYXJhY3RlclRva2VuKXQucHVz''@;'; put 'put ''aChlLnRva2VuKSxvLmFkdmFuY2VQYXN0VG9rZW4oZSk7cmV0dXJuIHRoaXMuY29sdW1uRm9ybWF0dGVyLmZvcm1hdCh0LmpvaW4oIiIpKX19fSx7Ii4uL1Rva2VuIjoxNTksIi4vQ29sdW1uRm9ybWF0dGVyIjoxNjB9XSwxNjM6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KFMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFMuUXVvdGVkQ29sdW1uUGFyc2VyPXZvaWQgMDtjb25zdCBiPXMoIi4vQ29sdW1uRm9ybWF0dGVyIiksYT1zKCIuLi9Ub2tlbiIpO1MuUXVvdGVkQ29sdW1uUGFyc2VyPWNsYXNze2NvbnN0cnVjdG9yKG8pe3RoaXMu''@;'; put 'put ''cGFyc2VyT3B0aW9ucz1vLHRoaXMuY29sdW1uRm9ybWF0dGVyPW5ldyBiLkNvbHVtbkZvcm1hdHRlcihvKX1wYXJzZShvKXtpZighby5oYXNNb3JlQ2hhcmFjdGVycylyZXR1cm4gbnVsbDtjb25zdCByPW8uY3Vyc29yLHtmb3VuZENsb3NpbmdRdW90ZTp0LGNvbDplfT10aGlzLmdhdGhlckRh''@;'; put 'put ''dGFCZXR3ZWVuUXVvdGVzKG8pO2lmKCF0KXtpZihvLmFkdmFuY2VUbyhyKSwhby5oYXNNb3JlRGF0YSl0aHJvdyBuZXcgRXJyb3IoYFBhcnNlIEVycm9yOiBtaXNzaW5nIGNsb3Npbmc6ICcke3RoaXMucGFyc2VyT3B0aW9ucy5xdW90ZXx8IiJ9JyBpbiBsaW5lOiBhdCAnJHtvLmxpbmVGcm9t''@;'; put 'put ''Q3Vyc29yLnJlcGxhY2UoL1tcclxuXS9nLCJcXG4nIil9J2ApO3JldHVybiBudWxsfXJldHVybiB0aGlzLmNoZWNrRm9yTWFsZm9ybWVkQ29sdW1uKG8pLGV9Z2F0aGVyRGF0YUJldHdlZW5RdW90ZXMobyl7Y29uc3R7cGFyc2VyT3B0aW9uczpyfT10aGlzO2xldCB0PSExLGU9ITE7Y29uc3Qg''@;'; put 'put ''bD1bXTtsZXQgbj1vLm5leHRDaGFyYWN0ZXJUb2tlbjtmb3IoOyFlJiZudWxsIT09bjtuPW8ubmV4dENoYXJhY3RlclRva2VuKXtjb25zdCBpPWEuVG9rZW4uaXNUb2tlblF1b3RlKG4scik7aWYoIXQmJmkpdD0hMDtlbHNlIGlmKHQpaWYoYS5Ub2tlbi5pc1Rva2VuRXNjYXBlQ2hhcmFjdGVy''@;'; put 'put ''KG4scikpe28uYWR2YW5jZVBhc3RUb2tlbihuKTtjb25zdCBoPW8ubmV4dENoYXJhY3RlclRva2VuO251bGwhPT1oJiYoYS5Ub2tlbi5pc1Rva2VuUXVvdGUoaCxyKXx8YS5Ub2tlbi5pc1Rva2VuRXNjYXBlQ2hhcmFjdGVyKGgscikpPyhsLnB1c2goaC50b2tlbiksbj1oKTppP2U9ITA6bC5w''@;'; put 'put ''dXNoKG4udG9rZW4pfWVsc2UgaT9lPSEwOmwucHVzaChuLnRva2VuKTtvLmFkdmFuY2VQYXN0VG9rZW4obil9cmV0dXJue2NvbDp0aGlzLmNvbHVtbkZvcm1hdHRlci5mb3JtYXQobC5qb2luKCIiKSksZm91bmRDbG9zaW5nUXVvdGU6ZX19Y2hlY2tGb3JNYWxmb3JtZWRDb2x1bW4obyl7Y29u''@;'; put 'put ''c3R7cGFyc2VyT3B0aW9uczpyfT10aGlzLHtuZXh0Tm9uU3BhY2VUb2tlbjp0fT1vO2lmKHQpe2NvbnN0IGU9YS5Ub2tlbi5pc1Rva2VuRGVsaW1pdGVyKHQsciksbD1hLlRva2VuLmlzVG9rZW5Sb3dEZWxpbWl0ZXIodCk7aWYoIWUmJiFsKXtjb25zdCBuPW8ubGluZUZyb21DdXJzb3Iuc3Vi''@;'; put 'put ''c3RyKDAsMTApLnJlcGxhY2UoL1tcclxuXS9nLCJcXG4nIik7dGhyb3cgbmV3IEVycm9yKGBQYXJzZSBFcnJvcjogZXhwZWN0ZWQ6ICcke3IuZXNjYXBlZERlbGltaXRlcn0nIE9SIG5ldyBsaW5lIGdvdDogJyR7dC50b2tlbn0nLiBhdCAnJHtufWApfW8uYWR2YW5jZVRvVG9rZW4odCl9ZWxz''@;'; put 'put ''ZSBvLmhhc01vcmVEYXRhfHxvLmFkdmFuY2VQYXN0TGluZSgpfX19LHsiLi4vVG9rZW4iOjE1OSwiLi9Db2x1bW5Gb3JtYXR0ZXIiOjE2MH1dLDE2NDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks''@;'; put 'put ''Uy5Db2x1bW5Gb3JtYXR0ZXI9Uy5RdW90ZWRDb2x1bW5QYXJzZXI9Uy5Ob25RdW90ZWRDb2x1bW5QYXJzZXI9Uy5Db2x1bW5QYXJzZXI9dm9pZCAwO3ZhciBiPXMoIi4vQ29sdW1uUGFyc2VyIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIkNvbHVtblBhcnNlciIse2VudW1lcmFibGU6ITAs''@;'; put 'put ''Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGIuQ29sdW1uUGFyc2VyfX0pO3ZhciBhPXMoIi4vTm9uUXVvdGVkQ29sdW1uUGFyc2VyIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIk5vblF1b3RlZENvbHVtblBhcnNlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuTm9u''@;'; put 'put ''UXVvdGVkQ29sdW1uUGFyc2VyfX0pO3ZhciBvPXMoIi4vUXVvdGVkQ29sdW1uUGFyc2VyIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIlF1b3RlZENvbHVtblBhcnNlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uUXVvdGVkQ29sdW1uUGFyc2VyfX0pO3ZhciBy''@;'; put 'put ''PXMoIi4vQ29sdW1uRm9ybWF0dGVyIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIkNvbHVtbkZvcm1hdHRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuQ29sdW1uRm9ybWF0dGVyfX0pfSx7Ii4vQ29sdW1uRm9ybWF0dGVyIjoxNjAsIi4vQ29sdW1uUGFyc2Vy''@;'; put 'put ''IjoxNjEsIi4vTm9uUXVvdGVkQ29sdW1uUGFyc2VyIjoxNjIsIi4vUXVvdGVkQ29sdW1uUGFyc2VyIjoxNjN9XSwxNjU6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFMuUXVvdGVkQ29sdW1uUGFy''@;'; put 'put ''c2VyPVMuTm9uUXVvdGVkQ29sdW1uUGFyc2VyPVMuQ29sdW1uUGFyc2VyPVMuVG9rZW49Uy5TY2FubmVyPVMuUm93UGFyc2VyPVMuUGFyc2VyPXZvaWQgMDt2YXIgYj1zKCIuL1BhcnNlciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJQYXJzZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBiLlBhcnNlcn19KTt2YXIgYT1zKCIuL1Jvd1BhcnNlciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJSb3dQYXJzZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLlJvd1BhcnNlcn19KTt2YXIgbz1zKCIuL1NjYW5uZXIiKTtPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoUywiU2Nhbm5lciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uU2Nhbm5lcn19KTt2YXIgcj1zKCIuL1Rva2VuIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIlRva2VuIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''ci5Ub2tlbn19KTt2YXIgdD1zKCIuL2NvbHVtbiIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJDb2x1bW5QYXJzZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0LkNvbHVtblBhcnNlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUywiTm9uUXVvdGVkQ29sdW1u''@;'; put 'put ''UGFyc2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5Ob25RdW90ZWRDb2x1bW5QYXJzZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIlF1b3RlZENvbHVtblBhcnNlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuUXVvdGVkQ29s''@;'; put 'put ''dW1uUGFyc2VyfX0pfSx7Ii4vUGFyc2VyIjoxNTYsIi4vUm93UGFyc2VyIjoxNTcsIi4vU2Nhbm5lciI6MTU4LCIuL1Rva2VuIjoxNTksIi4vY29sdW1uIjoxNjR9XSwxNjY6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01v''@;'; put 'put ''ZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksUy5IZWFkZXJUcmFuc2Zvcm1lcj12b2lkIDA7Y29uc3QgYT1iKHMoImxvZGFzaC5pc3VuZGVmaW5lZCIpKSxvPWIocygibG9kYXNoLmlzZnVuY3Rpb24iKSkscj1iKHMo''@;'; put 'put ''ImxvZGFzaC51bmlxIikpLHQ9YihzKCJsb2Rhc2guZ3JvdXBieSIpKTtTLkhlYWRlclRyYW5zZm9ybWVyPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuaGVhZGVycz1udWxsLHRoaXMucmVjZWl2ZWRIZWFkZXJzPSExLHRoaXMuc2hvdWxkVXNlRmlyc3RSb3c9ITEsdGhpcy5wcm9jZXNzZWRG''@;'; put 'put ''aXJzdFJvdz0hMSx0aGlzLmhlYWRlcnNMZW5ndGg9MCx0aGlzLnBhcnNlck9wdGlvbnM9ZSwhMD09PWUuaGVhZGVycz90aGlzLnNob3VsZFVzZUZpcnN0Um93PSEwOkFycmF5LmlzQXJyYXkoZS5oZWFkZXJzKT90aGlzLnNldEhlYWRlcnMoZS5oZWFkZXJzKTpvLmRlZmF1bHQoZS5oZWFkZXJz''@;'; put 'put ''KSYmKHRoaXMuaGVhZGVyc1RyYW5zZm9ybT1lLmhlYWRlcnMpfXRyYW5zZm9ybShlLGwpe3JldHVybiB0aGlzLnNob3VsZE1hcFJvdyhlKT9sKG51bGwsdGhpcy5wcm9jZXNzUm93KGUpKTpsKG51bGwse3JvdzpudWxsLGlzVmFsaWQ6ITB9KX1zaG91bGRNYXBSb3coZSl7Y29uc3R7cGFyc2Vy''@;'; put 'put ''T3B0aW9uczpsfT10aGlzO2lmKCF0aGlzLmhlYWRlcnNUcmFuc2Zvcm0mJmwucmVuYW1lSGVhZGVycyYmIXRoaXMucHJvY2Vzc2VkRmlyc3RSb3cpe2lmKCF0aGlzLnJlY2VpdmVkSGVhZGVycyl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHJlbmFtaW5nIGhlYWRlcnM6IG5ldyBoZWFkZXJzIG11''@;'; put 'put ''c3QgYmUgcHJvdmlkZWQgaW4gYW4gYXJyYXkiKTtyZXR1cm4gdGhpcy5wcm9jZXNzZWRGaXJzdFJvdz0hMCwhMX1pZighdGhpcy5yZWNlaXZlZEhlYWRlcnMmJkFycmF5LmlzQXJyYXkoZSkpe2lmKHRoaXMuaGVhZGVyc1RyYW5zZm9ybSl0aGlzLnNldEhlYWRlcnModGhpcy5oZWFkZXJzVHJh''@;'; put 'put ''bnNmb3JtKGUpKTtlbHNle2lmKCF0aGlzLnNob3VsZFVzZUZpcnN0Um93KXJldHVybiEwO3RoaXMuc2V0SGVhZGVycyhlKX1yZXR1cm4hMX1yZXR1cm4hMH1wcm9jZXNzUm93KGUpe2lmKCF0aGlzLmhlYWRlcnMpcmV0dXJue3JvdzplLGlzVmFsaWQ6ITB9O2NvbnN0e3BhcnNlck9wdGlvbnM6''@;'; put 'put ''bH09dGhpcztpZighbC5kaXNjYXJkVW5tYXBwZWRDb2x1bW5zJiZlLmxlbmd0aD50aGlzLmhlYWRlcnNMZW5ndGgpe2lmKCFsLnN0cmljdENvbHVtbkhhbmRsaW5nKXRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBFcnJvcjogY29sdW1uIGhlYWRlciBtaXNtYXRjaCBleHBlY3RlZDogJHt0''@;'; put 'put ''aGlzLmhlYWRlcnNMZW5ndGh9IGNvbHVtbnMgZ290OiAke2UubGVuZ3RofWApO3JldHVybntyb3c6ZSxpc1ZhbGlkOiExLHJlYXNvbjpgQ29sdW1uIGhlYWRlciBtaXNtYXRjaCBleHBlY3RlZDogJHt0aGlzLmhlYWRlcnNMZW5ndGh9IGNvbHVtbnMgZ290OiAke2UubGVuZ3RofWB9fXJldHVy''@;'; put 'put ''biBsLnN0cmljdENvbHVtbkhhbmRsaW5nJiZlLmxlbmd0aDx0aGlzLmhlYWRlcnNMZW5ndGg/e3JvdzplLGlzVmFsaWQ6ITEscmVhc29uOmBDb2x1bW4gaGVhZGVyIG1pc21hdGNoIGV4cGVjdGVkOiAke3RoaXMuaGVhZGVyc0xlbmd0aH0gY29sdW1ucyBnb3Q6ICR7ZS5sZW5ndGh9YH06e3Jv''@;'; put 'put ''dzp0aGlzLm1hcEhlYWRlcnMoZSksaXNWYWxpZDohMH19bWFwSGVhZGVycyhlKXtjb25zdCBsPXt9LHtoZWFkZXJzOm4saGVhZGVyc0xlbmd0aDppfT10aGlzO2ZvcihsZXQgaD0wO2g8aTtoKz0xKXtjb25zdCBmPW5baF07aWYoIWEuZGVmYXVsdChmKSl7Y29uc3QgdT1lW2hdO2xbZl09YS5k''@;'; put 'put ''ZWZhdWx0KHUpPyIiOnV9fXJldHVybiBsfXNldEhlYWRlcnMoZSl7dmFyIGw7Y29uc3Qgbj1lLmZpbHRlcihpPT4hIWkpO2lmKHIuZGVmYXVsdChuKS5sZW5ndGghPT1uLmxlbmd0aCl7Y29uc3QgaT10LmRlZmF1bHQobiksaD1PYmplY3Qua2V5cyhpKS5maWx0ZXIoZj0+aVtmXS5sZW5ndGg+''@;'; put 'put ''MSk7dGhyb3cgbmV3IEVycm9yKCJEdXBsaWNhdGUgaGVhZGVycyBmb3VuZCAiK0pTT04uc3RyaW5naWZ5KGgpKX10aGlzLmhlYWRlcnM9ZSx0aGlzLnJlY2VpdmVkSGVhZGVycz0hMCx0aGlzLmhlYWRlcnNMZW5ndGg9KG51bGw9PT0obD10aGlzLmhlYWRlcnMpfHx2b2lkIDA9PT1sP3ZvaWQg''@;'; put 'put ''MDpsLmxlbmd0aCl8fDB9fX0seyJsb2Rhc2guZ3JvdXBieSI6NDQzLCJsb2Rhc2guaXNmdW5jdGlvbiI6NDQ2LCJsb2Rhc2guaXN1bmRlZmluZWQiOjQ0OCwibG9kYXNoLnVuaXEiOjQ0OX1dLDE2NzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''UywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksUy5Sb3dUcmFuc2Zvcm1lclZhbGlkYXRvcj12b2lkIDA7Y29uc3QgYT0odD1zKCJsb2Rhc2guaXNmdW5jdGlvbiIpKSYmdC5fX2VzTW9kdWxlP3Q6e2RlZmF1bHQ6dH0sbz1zKCIuLi90eXBlcyIpO3ZhciB0O2NsYXNzIHJ7Y29uc3RydWN0b3Io''@;'; put 'put ''KXt0aGlzLl9yb3dUcmFuc2Zvcm09bnVsbCx0aGlzLl9yb3dWYWxpZGF0b3I9bnVsbH1zdGF0aWMgY3JlYXRlVHJhbnNmb3JtKGUpe3JldHVybiBvLmlzU3luY1RyYW5zZm9ybShlKT8obCxuKT0+e2xldCBpPW51bGw7dHJ5e2k9ZShsKX1jYXRjaChoKXtyZXR1cm4gbihoKX1yZXR1cm4gbihu''@;'; put 'put ''dWxsLGkpfTplfXN0YXRpYyBjcmVhdGVWYWxpZGF0b3IoZSl7cmV0dXJuIG8uaXNTeW5jVmFsaWRhdGUoZSk/KGwsbik9PntuKG51bGwse3JvdzpsLGlzVmFsaWQ6ZShsKX0pfToobCxuKT0+e2UobCwoaSxoLGYpPT5pP24oaSk6bihudWxsLGg/e3JvdzpsLGlzVmFsaWQ6aCxyZWFzb246Zn06''@;'; put 'put ''e3JvdzpsLGlzVmFsaWQ6ITEscmVhc29uOmZ9KSl9fXNldCByb3dUcmFuc2Zvcm0oZSl7aWYoIWEuZGVmYXVsdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgdHJhbnNmb3JtIHNob3VsZCBiZSBhIGZ1bmN0aW9uIik7dGhpcy5fcm93VHJhbnNmb3JtPXIuY3JlYXRlVHJhbnNmb3JtKGUp''@;'; put 'put ''fXNldCByb3dWYWxpZGF0b3IoZSl7aWYoIWEuZGVmYXVsdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgdmFsaWRhdGUgc2hvdWxkIGJlIGEgZnVuY3Rpb24iKTt0aGlzLl9yb3dWYWxpZGF0b3I9ci5jcmVhdGVWYWxpZGF0b3IoZSl9dHJhbnNmb3JtQW5kVmFsaWRhdGUoZSxsKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jYWxsVHJhbnNmb3JtZXIoZSwobixpKT0+bj9sKG4pOmk/dGhpcy5jYWxsVmFsaWRhdG9yKGksKGgsZik9Pmg/bChoKTpsKG51bGwsZiYmIWYuaXNWYWxpZD97cm93OmksaXNWYWxpZDohMSxyZWFzb246Zi5yZWFzb259Ontyb3c6aSxpc1ZhbGlkOiEwfSkpOmwobnVsbCx7cm93''@;'; put 'put ''Om51bGwsaXNWYWxpZDohMH0pKX1jYWxsVHJhbnNmb3JtZXIoZSxsKXtyZXR1cm4gdGhpcy5fcm93VHJhbnNmb3JtP3RoaXMuX3Jvd1RyYW5zZm9ybShlLGwpOmwobnVsbCxlKX1jYWxsVmFsaWRhdG9yKGUsbCl7cmV0dXJuIHRoaXMuX3Jvd1ZhbGlkYXRvcj90aGlzLl9yb3dWYWxpZGF0b3Io''@;'; put 'put ''ZSxsKTpsKG51bGwse3JvdzplLGlzVmFsaWQ6ITB9KX19Uy5Sb3dUcmFuc2Zvcm1lclZhbGlkYXRvcj1yfSx7Ii4uL3R5cGVzIjoxNjksImxvZGFzaC5pc2Z1bmN0aW9uIjo0NDZ9XSwxNjg6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIl9f''@;'; put 'put ''ZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFMuSGVhZGVyVHJhbnNmb3JtZXI9Uy5Sb3dUcmFuc2Zvcm1lclZhbGlkYXRvcj12b2lkIDA7dmFyIGI9cygiLi9Sb3dUcmFuc2Zvcm1lclZhbGlkYXRvciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJSb3dUcmFuc2Zvcm1lclZhbGlkYXRvciIse2Vu''@;'; put 'put ''dW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGIuUm93VHJhbnNmb3JtZXJWYWxpZGF0b3J9fSk7dmFyIGE9cygiLi9IZWFkZXJUcmFuc2Zvcm1lciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJIZWFkZXJUcmFuc2Zvcm1lciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIGEuSGVhZGVyVHJhbnNmb3JtZXJ9fSl9LHsiLi9IZWFkZXJUcmFuc2Zvcm1lciI6MTY2LCIuL1Jvd1RyYW5zZm9ybWVyVmFsaWRhdG9yIjoxNjd9XSwxNjk6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIl9fZXNNb2R1bGUi''@;'; put 'put ''LHt2YWx1ZTohMH0pLFMuaXNTeW5jVmFsaWRhdGU9Uy5pc1N5bmNUcmFuc2Zvcm09dm9pZCAwLFMuaXNTeW5jVHJhbnNmb3JtPWI9PjE9PT1iLmxlbmd0aCxTLmlzU3luY1ZhbGlkYXRlPWI9PjE9PT1iLmxlbmd0aH0se31dLDE3MDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25z''@;'; put 'put ''dCBiPVM7Yi5iaWdudW09cygiYm4uanMiKSxiLmRlZmluZT1zKCIuL2FzbjEvYXBpIikuZGVmaW5lLGIuYmFzZT1zKCIuL2FzbjEvYmFzZSIpLGIuY29uc3RhbnRzPXMoIi4vYXNuMS9jb25zdGFudHMiKSxiLmRlY29kZXJzPXMoIi4vYXNuMS9kZWNvZGVycyIpLGIuZW5jb2RlcnM9cygiLi9h''@;'; put 'put ''c24xL2VuY29kZXJzIil9LHsiLi9hc24xL2FwaSI6MTcxLCIuL2FzbjEvYmFzZSI6MTczLCIuL2FzbjEvY29uc3RhbnRzIjoxNzcsIi4vYXNuMS9kZWNvZGVycyI6MTc5LCIuL2FzbjEvZW5jb2RlcnMiOjE4MiwiYm4uanMiOjE4NH1dLDE3MTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijtjb25zdCBiPXMoIi4vZW5jb2RlcnMiKSxhPXMoIi4vZGVjb2RlcnMiKSxvPXMoImluaGVyaXRzIik7ZnVuY3Rpb24gcih0LGUpe3RoaXMubmFtZT10LHRoaXMuYm9keT1lLHRoaXMuZGVjb2RlcnM9e30sdGhpcy5lbmNvZGVycz17fX1TLmRlZmluZT1mdW5jdGlvbih0LGUpe3JldHVybiBu''@;'; put 'put ''ZXcgcih0LGUpfSxyLnByb3RvdHlwZS5fY3JlYXRlTmFtZWQ9ZnVuY3Rpb24odCl7Y29uc3QgZT10aGlzLm5hbWU7ZnVuY3Rpb24gbChuKXt0aGlzLl9pbml0TmFtZWQobixlKX1yZXR1cm4gbyhsLHQpLGwucHJvdG90eXBlLl9pbml0TmFtZWQ9ZnVuY3Rpb24obixpKXt0LmNhbGwodGhpcyxu''@;'; put 'put ''LGkpfSxuZXcgbCh0aGlzKX0sci5wcm90b3R5cGUuX2dldERlY29kZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVjb2RlcnMuaGFzT3duUHJvcGVydHkodD10fHwiZGVyIil8fCh0aGlzLmRlY29kZXJzW3RdPXRoaXMuX2NyZWF0ZU5hbWVkKGFbdF0pKSx0aGlzLmRlY29kZXJzW3RdfSxy''@;'; put 'put ''LnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24odCxlLGwpe3JldHVybiB0aGlzLl9nZXREZWNvZGVyKGUpLmRlY29kZSh0LGwpfSxyLnByb3RvdHlwZS5fZ2V0RW5jb2Rlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lbmNvZGVycy5oYXNPd25Qcm9wZXJ0eSh0PXR8fCJkZXIiKXx8KHRoaXMu''@;'; put 'put ''ZW5jb2RlcnNbdF09dGhpcy5fY3JlYXRlTmFtZWQoYlt0XSkpLHRoaXMuZW5jb2RlcnNbdF19LHIucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih0LGUsbCl7cmV0dXJuIHRoaXMuX2dldEVuY29kZXIoZSkuZW5jb2RlKHQsbCl9fSx7Ii4vZGVjb2RlcnMiOjE3OSwiLi9lbmNvZGVycyI6MTgy''@;'; put 'put ''LGluaGVyaXRzOjQ0MH1dLDE3MjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoImluaGVyaXRzIiksYT1zKCIuLi9iYXNlL3JlcG9ydGVyIikuUmVwb3J0ZXIsbz1zKCJzYWZlci1idWZmZXIiKS5CdWZmZXI7ZnVuY3Rpb24gcihlLGwpe2EuY2FsbCh0aGlzLGwpLG8u''@;'; put 'put ''aXNCdWZmZXIoZSk/KHRoaXMuYmFzZT1lLHRoaXMub2Zmc2V0PTAsdGhpcy5sZW5ndGg9ZS5sZW5ndGgpOnRoaXMuZXJyb3IoIklucHV0IG5vdCBCdWZmZXIiKX1mdW5jdGlvbiB0KGUsbCl7aWYoQXJyYXkuaXNBcnJheShlKSl0aGlzLmxlbmd0aD0wLHRoaXMudmFsdWU9ZS5tYXAoZnVuY3Rp''@;'; put 'put ''b24obil7cmV0dXJuIHQuaXNFbmNvZGVyQnVmZmVyKG4pfHwobj1uZXcgdChuLGwpKSx0aGlzLmxlbmd0aCs9bi5sZW5ndGgsbn0sdGhpcyk7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKCEoMDw9ZSYmZTw9MjU1KSlyZXR1cm4gbC5lcnJvcigibm9uLWJ5dGUgRW5jb2RlckJ1ZmZl''@;'; put 'put ''ciB2YWx1ZSIpO3RoaXMudmFsdWU9ZSx0aGlzLmxlbmd0aD0xfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBlKXRoaXMudmFsdWU9ZSx0aGlzLmxlbmd0aD1vLmJ5dGVMZW5ndGgoZSk7ZWxzZXtpZighby5pc0J1ZmZlcihlKSlyZXR1cm4gbC5lcnJvcigiVW5zdXBwb3J0ZWQgdHlwZTogIit0''@;'; put 'put ''eXBlb2YgZSk7dGhpcy52YWx1ZT1lLHRoaXMubGVuZ3RoPWUubGVuZ3RofX1iKHIsYSksUy5EZWNvZGVyQnVmZmVyPXIsci5pc0RlY29kZXJCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiByfHwib2JqZWN0Ij09dHlwZW9mIGUmJm8uaXNCdWZmZXIoZS5iYXNlKSYmIkRl''@;'; put 'put ''Y29kZXJCdWZmZXIiPT09ZS5jb25zdHJ1Y3Rvci5uYW1lJiYibnVtYmVyIj09dHlwZW9mIGUub2Zmc2V0JiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zYXZlJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5yZXN0b3JlJiYiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''ZS5pc0VtcHR5JiYiZnVuY3Rpb24iPT10eXBlb2YgZS5yZWFkVUludDgmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnNraXAmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJhd30sci5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6YS5wcm90''@;'; put 'put ''b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sci5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihlKXtjb25zdCBsPW5ldyByKHRoaXMuYmFzZSk7cmV0dXJuIGwub2Zmc2V0PWUub2Zmc2V0LGwubGVuZ3RoPXRoaXMub2Zmc2V0LHRoaXMub2Zmc2V0PWUub2Zmc2V0LGEucHJvdG90eXBlLnJlc3Rv''@;'; put 'put ''cmUuY2FsbCh0aGlzLGUucmVwb3J0ZXIpLGx9LHIucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXQ9PT10aGlzLmxlbmd0aH0sci5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9mZnNldCsxPD10aGlzLmxlbmd0aD90aGlz''@;'; put 'put ''LmJhc2UucmVhZFVJbnQ4KHRoaXMub2Zmc2V0KyssITApOnRoaXMuZXJyb3IoZXx8IkRlY29kZXJCdWZmZXIgb3ZlcnJ1biIpfSxyLnByb3RvdHlwZS5za2lwPWZ1bmN0aW9uKGUsbCl7aWYoISh0aGlzLm9mZnNldCtlPD10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXMuZXJyb3IobHx8IkRlY29k''@;'; put 'put ''ZXJCdWZmZXIgb3ZlcnJ1biIpO2NvbnN0IG49bmV3IHIodGhpcy5iYXNlKTtyZXR1cm4gbi5fcmVwb3J0ZXJTdGF0ZT10aGlzLl9yZXBvcnRlclN0YXRlLG4ub2Zmc2V0PXRoaXMub2Zmc2V0LG4ubGVuZ3RoPXRoaXMub2Zmc2V0K2UsdGhpcy5vZmZzZXQrPWUsbn0sci5wcm90b3R5cGUucmF3''@;'; put 'put ''PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmJhc2Uuc2xpY2UoZT9lLm9mZnNldDp0aGlzLm9mZnNldCx0aGlzLmxlbmd0aCl9LFMuRW5jb2RlckJ1ZmZlcj10LHQuaXNFbmNvZGVyQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdHx8Im9iamVjdCI9PXR5cGVvZiBlJiYi''@;'; put 'put ''RW5jb2RlckJ1ZmZlciI9PT1lLmNvbnN0cnVjdG9yLm5hbWUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmpvaW59LHQucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oZSxsKXtyZXR1cm4gZXx8KGU9by5hbGxvYyh0aGlzLmxlbmd0aCkpLGx8fChsPTAp''@;'; put 'put ''LDA9PT10aGlzLmxlbmd0aHx8KEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uam9pbihlLGwpLGwrPW4ubGVuZ3RofSk6KCJudW1iZXIiPT10eXBlb2YgdGhpcy52YWx1ZT9lW2xdPXRoaXMudmFsdWU6InN0cmluZyI9PXR5cGVvZiB0''@;'; put 'put ''aGlzLnZhbHVlP2Uud3JpdGUodGhpcy52YWx1ZSxsKTpvLmlzQnVmZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHkoZSxsKSxsKz10aGlzLmxlbmd0aCkpLGV9fSx7Ii4uL2Jhc2UvcmVwb3J0ZXIiOjE3NSxpbmhlcml0czo0NDAsInNhZmVyLWJ1ZmZlciI6NDk1fV0sMTczOltmdW5j''@;'; put 'put ''dGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9UztiLlJlcG9ydGVyPXMoIi4vcmVwb3J0ZXIiKS5SZXBvcnRlcixiLkRlY29kZXJCdWZmZXI9cygiLi9idWZmZXIiKS5EZWNvZGVyQnVmZmVyLGIuRW5jb2RlckJ1ZmZlcj1zKCIuL2J1ZmZlciIpLkVuY29kZXJCdWZmZXIsYi5Ob2Rl''@;'; put 'put ''PXMoIi4vbm9kZSIpfSx7Ii4vYnVmZmVyIjoxNzIsIi4vbm9kZSI6MTc0LCIuL3JlcG9ydGVyIjoxNzV9XSwxNzQ6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1zKCIuLi9iYXNlL3JlcG9ydGVyIikuUmVwb3J0ZXIsYT1zKCIuLi9iYXNlL2J1ZmZlciIpLkVuY29kZXJC''@;'; put 'put ''dWZmZXIsbz1zKCIuLi9iYXNlL2J1ZmZlciIpLkRlY29kZXJCdWZmZXIscj1zKCJtaW5pbWFsaXN0aWMtYXNzZXJ0IiksdD1bInNlcSIsInNlcW9mIiwic2V0Iiwic2V0b2YiLCJvYmppZCIsImJvb2wiLCJnZW50aW1lIiwidXRjdGltZSIsIm51bGxfIiwiZW51bSIsImludCIsIm9iakRlc2Mi''@;'; put 'put ''LCJiaXRzdHIiLCJibXBzdHIiLCJjaGFyc3RyIiwiZ2Vuc3RyIiwiZ3JhcGhzdHIiLCJpYTVzdHIiLCJpc282NDZzdHIiLCJudW1zdHIiLCJvY3RzdHIiLCJwcmludHN0ciIsInQ2MXN0ciIsInVuaXN0ciIsInV0ZjhzdHIiLCJ2aWRlb3N0ciJdLGU9WyJrZXkiLCJvYmoiLCJ1c2UiLCJvcHRp''@;'; put 'put ''b25hbCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJkZWYiLCJjaG9pY2UiLCJhbnkiLCJjb250YWlucyJdLmNvbmNhdCh0KTtmdW5jdGlvbiBsKGksaCxmKXtjb25zdCB1PXt9O3RoaXMuX2Jhc2VTdGF0ZT11LHUubmFtZT1mLHUuZW5jPWksdS5wYXJlbnQ9aHx8bnVsbCx1LmNoaWxkcmVuPW51''@;'; put 'put ''bGwsdS50YWc9bnVsbCx1LmFyZ3M9bnVsbCx1LnJldmVyc2VBcmdzPW51bGwsdS5jaG9pY2U9bnVsbCx1Lm9wdGlvbmFsPSExLHUuYW55PSExLHUub2JqPSExLHUudXNlPW51bGwsdS51c2VEZWNvZGVyPW51bGwsdS5rZXk9bnVsbCx1LmRlZmF1bHQ9bnVsbCx1LmV4cGxpY2l0PW51bGwsdS5p''@;'; put 'put ''bXBsaWNpdD1udWxsLHUuY29udGFpbnM9bnVsbCx1LnBhcmVudHx8KHUuY2hpbGRyZW49W10sdGhpcy5fd3JhcCgpKX1FLmV4cG9ydHM9bDtjb25zdCBuPVsiZW5jIiwicGFyZW50IiwiY2hpbGRyZW4iLCJ0YWciLCJhcmdzIiwicmV2ZXJzZUFyZ3MiLCJjaG9pY2UiLCJvcHRpb25hbCIsImFu''@;'; put 'put ''eSIsIm9iaiIsInVzZSIsImFsdGVyZWRVc2UiLCJrZXkiLCJkZWZhdWx0IiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImNvbnRhaW5zIl07bC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtjb25zdCBpPXRoaXMuX2Jhc2VTdGF0ZSxoPXt9O24uZm9yRWFjaChmdW5jdGlvbih1KXtoW3VdPWlb''@;'; put 'put ''dV19KTtjb25zdCBmPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGgucGFyZW50KTtyZXR1cm4gZi5fYmFzZVN0YXRlPWgsZn0sbC5wcm90b3R5cGUuX3dyYXA9ZnVuY3Rpb24oKXtjb25zdCBpPXRoaXMuX2Jhc2VTdGF0ZTtlLmZvckVhY2goZnVuY3Rpb24oaCl7dGhpc1toXT1mdW5jdGlvbigpe2Nv''@;'; put 'put ''bnN0IGY9bmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyk7cmV0dXJuIGkuY2hpbGRyZW4ucHVzaChmKSxmW2hdLmFwcGx5KGYsYXJndW1lbnRzKX19LHRoaXMpfSxsLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihpKXtjb25zdCBoPXRoaXMuX2Jhc2VTdGF0ZTtyKG51bGw9PT1oLnBhcmVudCks''@;'; put 'put ''aS5jYWxsKHRoaXMpLGguY2hpbGRyZW49aC5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oZil7cmV0dXJuIGYuX2Jhc2VTdGF0ZS5wYXJlbnQ9PT10aGlzfSx0aGlzKSxyLmVxdWFsKGguY2hpbGRyZW4ubGVuZ3RoLDEsIlJvb3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZCIpfSxsLnBy''@;'; put 'put ''b3RvdHlwZS5fdXNlQXJncz1mdW5jdGlvbihpKXtjb25zdCBoPXRoaXMuX2Jhc2VTdGF0ZSxmPWkuZmlsdGVyKGZ1bmN0aW9uKHUpe3JldHVybiB1IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7aT1pLmZpbHRlcihmdW5jdGlvbih1KXtyZXR1cm4hKHUgaW5zdGFuY2VvZiB0''@;'; put 'put ''aGlzLmNvbnN0cnVjdG9yKX0sdGhpcyksMCE9PWYubGVuZ3RoJiYocihudWxsPT09aC5jaGlsZHJlbiksaC5jaGlsZHJlbj1mLGYuZm9yRWFjaChmdW5jdGlvbih1KXt1Ll9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRoaXMpKSwwIT09aS5sZW5ndGgmJihyKG51bGw9PT1oLmFyZ3MpLGguYXJn''@;'; put 'put ''cz1pLGgucmV2ZXJzZUFyZ3M9aS5tYXAoZnVuY3Rpb24odSl7aWYoIm9iamVjdCIhPXR5cGVvZiB1fHx1LmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiB1O2NvbnN0IHA9e307cmV0dXJuIE9iamVjdC5rZXlzKHUpLmZvckVhY2goZnVuY3Rpb24oZCl7ZD09KDB8ZCkmJihkfD0wKSxwW3Vb''@;'; put 'put ''ZF1dPWR9KSxwfSkpfSxbIl9wZWVrVGFnIiwiX2RlY29kZVRhZyIsIl91c2UiLCJfZGVjb2RlU3RyIiwiX2RlY29kZU9iamlkIiwiX2RlY29kZVRpbWUiLCJfZGVjb2RlTnVsbCIsIl9kZWNvZGVJbnQiLCJfZGVjb2RlQm9vbCIsIl9kZWNvZGVMaXN0IiwiX2VuY29kZUNvbXBvc2l0ZSIsIl9l''@;'; put 'put ''bmNvZGVTdHIiLCJfZW5jb2RlT2JqaWQiLCJfZW5jb2RlVGltZSIsIl9lbmNvZGVOdWxsIiwiX2VuY29kZUludCIsIl9lbmNvZGVCb29sIl0uZm9yRWFjaChmdW5jdGlvbihpKXtsLnByb3RvdHlwZVtpXT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihpKyIgbm90IGltcGxlbWVudGVkIGZv''@;'; put 'put ''ciBlbmNvZGluZzogIit0aGlzLl9iYXNlU3RhdGUuZW5jKX19KSx0LmZvckVhY2goZnVuY3Rpb24oaSl7bC5wcm90b3R5cGVbaV09ZnVuY3Rpb24oKXtjb25zdCBoPXRoaXMuX2Jhc2VTdGF0ZSxmPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIHIobnVsbD09''@;'; put 'put ''PWgudGFnKSxoLnRhZz1pLHRoaXMuX3VzZUFyZ3MoZiksdGhpc319KSxsLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oaSl7cihpKTtjb25zdCBoPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gcihudWxsPT09aC51c2UpLGgudXNlPWksdGhpc30sbC5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLm9wdGlvbmFsPSEwLHRoaXN9LGwucHJvdG90eXBlLmRlZj1mdW5jdGlvbihpKXtjb25zdCBoPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gcihudWxsPT09aC5kZWZhdWx0KSxoLmRlZmF1bHQ9aSxoLm9wdGlvbmFsPSEwLHRoaXN9LGwucHJvdG90eXBl''@;'; put 'put ''LmV4cGxpY2l0PWZ1bmN0aW9uKGkpe2NvbnN0IGg9dGhpcy5fYmFzZVN0YXRlO3JldHVybiByKG51bGw9PT1oLmV4cGxpY2l0JiZudWxsPT09aC5pbXBsaWNpdCksaC5leHBsaWNpdD1pLHRoaXN9LGwucHJvdG90eXBlLmltcGxpY2l0PWZ1bmN0aW9uKGkpe2NvbnN0IGg9dGhpcy5fYmFzZVN0''@;'; put 'put ''YXRlO3JldHVybiByKG51bGw9PT1oLmV4cGxpY2l0JiZudWxsPT09aC5pbXBsaWNpdCksaC5pbXBsaWNpdD1pLHRoaXN9LGwucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe2NvbnN0IGk9dGhpcy5fYmFzZVN0YXRlLGg9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1''@;'; put 'put ''cm4gaS5vYmo9ITAsMCE9PWgubGVuZ3RoJiZ0aGlzLl91c2VBcmdzKGgpLHRoaXN9LGwucHJvdG90eXBlLmtleT1mdW5jdGlvbihpKXtjb25zdCBoPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gcihudWxsPT09aC5rZXkpLGgua2V5PWksdGhpc30sbC5wcm90b3R5cGUuYW55PWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5hbnk9ITAsdGhpc30sbC5wcm90b3R5cGUuY2hvaWNlPWZ1bmN0aW9uKGkpe2NvbnN0IGg9dGhpcy5fYmFzZVN0YXRlO3JldHVybiByKG51bGw9PT1oLmNob2ljZSksaC5jaG9pY2U9aSx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKGkpLm1hcChmdW5j''@;'; put 'put ''dGlvbihmKXtyZXR1cm4gaVtmXX0pKSx0aGlzfSxsLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihpKXtjb25zdCBoPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gcihudWxsPT09aC51c2UpLGguY29udGFpbnM9aSx0aGlzfSxsLnByb3RvdHlwZS5fZGVjb2RlPWZ1bmN0aW9uKGksaCl7Y29u''@;'; put 'put ''c3QgZj10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PWYucGFyZW50KXJldHVybiBpLndyYXBSZXN1bHQoZi5jaGlsZHJlblswXS5fZGVjb2RlKGksaCkpO2xldCB1LHA9Zi5kZWZhdWx0LGQ9ITAsdj1udWxsO2lmKG51bGwhPT1mLmtleSYmKHY9aS5lbnRlcktleShmLmtleSkpLGYub3B0aW9u''@;'; put 'put ''YWwpe2xldCBfPW51bGw7aWYobnVsbCE9PWYuZXhwbGljaXQ/Xz1mLmV4cGxpY2l0Om51bGwhPT1mLmltcGxpY2l0P189Zi5pbXBsaWNpdDpudWxsIT09Zi50YWcmJihfPWYudGFnKSxudWxsIT09X3x8Zi5hbnkpe2lmKGQ9dGhpcy5fcGVla1RhZyhpLF8sZi5hbnkpLGkuaXNFcnJvcihkKSly''@;'; put 'put ''ZXR1cm4gZH1lbHNle2NvbnN0IEE9aS5zYXZlKCk7dHJ5e251bGw9PT1mLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKGYudGFnLGksaCk6dGhpcy5fZGVjb2RlQ2hvaWNlKGksaCksZD0hMH1jYXRjaHtkPSExfWkucmVzdG9yZShBKX19aWYoZi5vYmomJmQmJih1PWkuZW50ZXJPYmplY3Qo''@;'; put 'put ''KSksZCl7aWYobnVsbCE9PWYuZXhwbGljaXQpe2NvbnN0IEE9dGhpcy5fZGVjb2RlVGFnKGksZi5leHBsaWNpdCk7aWYoaS5pc0Vycm9yKEEpKXJldHVybiBBO2k9QX1jb25zdCBfPWkub2Zmc2V0O2lmKG51bGw9PT1mLnVzZSYmbnVsbD09PWYuY2hvaWNlKXtsZXQgQTtmLmFueSYmKEE9aS5z''@;'; put 'put ''YXZlKCkpO2NvbnN0IEk9dGhpcy5fZGVjb2RlVGFnKGksbnVsbCE9PWYuaW1wbGljaXQ/Zi5pbXBsaWNpdDpmLnRhZyxmLmFueSk7aWYoaS5pc0Vycm9yKEkpKXJldHVybiBJO2YuYW55P3A9aS5yYXcoQSk6aT1JfWlmKGgmJmgudHJhY2smJm51bGwhPT1mLnRhZyYmaC50cmFjayhpLnBhdGgo''@;'; put 'put ''KSxfLGkubGVuZ3RoLCJ0YWdnZWQiKSxoJiZoLnRyYWNrJiZudWxsIT09Zi50YWcmJmgudHJhY2soaS5wYXRoKCksaS5vZmZzZXQsaS5sZW5ndGgsImNvbnRlbnQiKSxmLmFueXx8KHA9bnVsbD09PWYuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoZi50YWcsaSxoKTp0aGlzLl9kZWNvZGVD''@;'; put 'put ''aG9pY2UoaSxoKSksaS5pc0Vycm9yKHApKXJldHVybiBwO2lmKGYuYW55fHxudWxsIT09Zi5jaG9pY2V8fG51bGw9PT1mLmNoaWxkcmVufHxmLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oQSl7QS5fZGVjb2RlKGksaCl9KSxmLmNvbnRhaW5zJiYoIm9jdHN0ciI9PT1mLnRhZ3x8ImJpdHN0''@;'; put 'put ''ciI9PT1mLnRhZykpe2NvbnN0IEE9bmV3IG8ocCk7cD10aGlzLl9nZXRVc2UoZi5jb250YWlucyxpLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShBLGgpfX1yZXR1cm4gZi5vYmomJmQmJihwPWkubGVhdmVPYmplY3QodSkpLG51bGw9PT1mLmtleXx8bnVsbD09PXAmJiEwIT09ZD9udWxs''@;'; put 'put ''IT09diYmaS5leGl0S2V5KHYpOmkubGVhdmVLZXkodixmLmtleSxwKSxwfSxsLnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYz1mdW5jdGlvbihpLGgsZil7Y29uc3QgdT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuInNlcSI9PT1pfHwic2V0Ij09PWk/bnVsbDoic2Vxb2YiPT09aXx8InNldG9mIj09''@;'; put 'put ''PWk/dGhpcy5fZGVjb2RlTGlzdChoLGksdS5hcmdzWzBdLGYpOi9zdHIkLy50ZXN0KGkpP3RoaXMuX2RlY29kZVN0cihoLGksZik6Im9iamlkIj09PWkmJnUuYXJncz90aGlzLl9kZWNvZGVPYmppZChoLHUuYXJnc1swXSx1LmFyZ3NbMV0sZik6Im9iamlkIj09PWk/dGhpcy5fZGVjb2RlT2Jq''@;'; put 'put ''aWQoaCxudWxsLG51bGwsZik6ImdlbnRpbWUiPT09aXx8InV0Y3RpbWUiPT09aT90aGlzLl9kZWNvZGVUaW1lKGgsaSxmKToibnVsbF8iPT09aT90aGlzLl9kZWNvZGVOdWxsKGgsZik6ImJvb2wiPT09aT90aGlzLl9kZWNvZGVCb29sKGgsZik6Im9iakRlc2MiPT09aT90aGlzLl9kZWNvZGVT''@;'; put 'put ''dHIoaCxpLGYpOiJpbnQiPT09aXx8ImVudW0iPT09aT90aGlzLl9kZWNvZGVJbnQoaCx1LmFyZ3MmJnUuYXJnc1swXSxmKTpudWxsIT09dS51c2U/dGhpcy5fZ2V0VXNlKHUudXNlLGguX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKGgsZik6aC5lcnJvcigidW5rbm93biB0YWc6ICIraSl9''@;'; put 'put ''LGwucHJvdG90eXBlLl9nZXRVc2U9ZnVuY3Rpb24oaSxoKXtjb25zdCBmPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gZi51c2VEZWNvZGVyPXRoaXMuX3VzZShpLGgpLHIobnVsbD09PWYudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCksZi51c2VEZWNvZGVyPWYudXNlRGVjb2Rlci5fYmFz''@;'; put 'put ''ZVN0YXRlLmNoaWxkcmVuWzBdLGYuaW1wbGljaXQhPT1mLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCYmKGYudXNlRGVjb2Rlcj1mLnVzZURlY29kZXIuY2xvbmUoKSxmLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1mLmltcGxpY2l0KSxmLnVzZURlY29kZXJ9LGwucHJv''@;'; put 'put ''dG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24oaSxoKXtjb25zdCBmPXRoaXMuX2Jhc2VTdGF0ZTtsZXQgdT1udWxsLHA9ITE7cmV0dXJuIE9iamVjdC5rZXlzKGYuY2hvaWNlKS5zb21lKGZ1bmN0aW9uKGQpe2NvbnN0IHY9aS5zYXZlKCksXz1mLmNob2ljZVtkXTt0cnl7Y29uc3QgQT1f''@;'; put 'put ''Ll9kZWNvZGUoaSxoKTtpZihpLmlzRXJyb3IoQSkpcmV0dXJuITE7dT17dHlwZTpkLHZhbHVlOkF9LHA9ITB9Y2F0Y2h7cmV0dXJuIGkucmVzdG9yZSh2KSwhMX1yZXR1cm4hMH0sdGhpcykscD91OmkuZXJyb3IoIkNob2ljZSBub3QgbWF0Y2hlZCIpfSxsLnByb3RvdHlwZS5fY3JlYXRlRW5j''@;'; put 'put ''b2RlckJ1ZmZlcj1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IGEoaSx0aGlzLnJlcG9ydGVyKX0sbC5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbihpLGgsZil7Y29uc3QgdT10aGlzLl9iYXNlU3RhdGU7aWYobnVsbCE9PXUuZGVmYXVsdCYmdS5kZWZhdWx0PT09aSlyZXR1cm47Y29uc3QgcD10''@;'; put 'put ''aGlzLl9lbmNvZGVWYWx1ZShpLGgsZik7cmV0dXJuIHZvaWQgMD09PXB8fHRoaXMuX3NraXBEZWZhdWx0KHAsaCxmKT92b2lkIDA6cH0sbC5wcm90b3R5cGUuX2VuY29kZVZhbHVlPWZ1bmN0aW9uKGksaCxmKXtjb25zdCB1PXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09dS5wYXJlbnQpcmV0''@;'; put 'put ''dXJuIHUuY2hpbGRyZW5bMF0uX2VuY29kZShpLGh8fG5ldyBiKTtsZXQgcD1udWxsO2lmKHRoaXMucmVwb3J0ZXI9aCx1Lm9wdGlvbmFsJiZ2b2lkIDA9PT1pKXtpZihudWxsPT09dS5kZWZhdWx0KXJldHVybjtpPXUuZGVmYXVsdH1sZXQgZD1udWxsLHY9ITE7aWYodS5hbnkpcD10aGlzLl9j''@;'; put 'put ''cmVhdGVFbmNvZGVyQnVmZmVyKGkpO2Vsc2UgaWYodS5jaG9pY2UpcD10aGlzLl9lbmNvZGVDaG9pY2UoaSxoKTtlbHNlIGlmKHUuY29udGFpbnMpZD10aGlzLl9nZXRVc2UodS5jb250YWlucyxmKS5fZW5jb2RlKGksaCksdj0hMDtlbHNlIGlmKHUuY2hpbGRyZW4pZD11LmNoaWxkcmVuLm1h''@;'; put 'put ''cChmdW5jdGlvbihfKXtpZigibnVsbF8iPT09Xy5fYmFzZVN0YXRlLnRhZylyZXR1cm4gXy5fZW5jb2RlKG51bGwsaCxpKTtpZihudWxsPT09Xy5fYmFzZVN0YXRlLmtleSlyZXR1cm4gaC5lcnJvcigiQ2hpbGQgc2hvdWxkIGhhdmUgYSBrZXkiKTtjb25zdCBBPWguZW50ZXJLZXkoXy5fYmFz''@;'; put 'put ''ZVN0YXRlLmtleSk7aWYoIm9iamVjdCIhPXR5cGVvZiBpKXJldHVybiBoLmVycm9yKCJDaGlsZCBleHBlY3RlZCwgYnV0IGlucHV0IGlzIG5vdCBvYmplY3QiKTtjb25zdCBJPV8uX2VuY29kZShpW18uX2Jhc2VTdGF0ZS5rZXldLGgsaSk7cmV0dXJuIGgubGVhdmVLZXkoQSksSX0sdGhpcyku''@;'; put 'put ''ZmlsdGVyKGZ1bmN0aW9uKF8pe3JldHVybiBffSksZD10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGQpO2Vsc2UgaWYoInNlcW9mIj09PXUudGFnfHwic2V0b2YiPT09dS50YWcpe2lmKCF1LmFyZ3N8fDEhPT11LmFyZ3MubGVuZ3RoKXJldHVybiBoLmVycm9yKCJUb28gbWFueSBhcmdzIGZv''@;'; put 'put ''ciA6ICIrdS50YWcpO2lmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiBoLmVycm9yKCJzZXFvZi9zZXRvZiwgYnV0IGRhdGEgaXMgbm90IEFycmF5Iik7Y29uc3QgXz10aGlzLmNsb25lKCk7Xy5fYmFzZVN0YXRlLmltcGxpY2l0PW51bGwsZD10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGku''@;'; put 'put ''bWFwKGZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9nZXRVc2UodGhpcy5fYmFzZVN0YXRlLmFyZ3NbMF0saSkuX2VuY29kZShBLGgpfSxfKSl9ZWxzZSBudWxsIT09dS51c2U/cD10aGlzLl9nZXRVc2UodS51c2UsZikuX2VuY29kZShpLGgpOihkPXRoaXMuX2VuY29kZVByaW1pdGl2ZSh1LnRh''@;'; put 'put ''ZyxpKSx2PSEwKTtpZighdS5hbnkmJm51bGw9PT11LmNob2ljZSl7Y29uc3QgXz1udWxsIT09dS5pbXBsaWNpdD91LmltcGxpY2l0OnUudGFnLEE9bnVsbD09PXUuaW1wbGljaXQ/InVuaXZlcnNhbCI6ImNvbnRleHQiO251bGw9PT1fP251bGw9PT11LnVzZSYmaC5lcnJvcigiVGFnIGNvdWxk''@;'; put 'put ''IGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PXUudXNlJiYocD10aGlzLl9lbmNvZGVDb21wb3NpdGUoXyx2LEEsZCkpfXJldHVybiBudWxsIT09dS5leHBsaWNpdCYmKHA9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKHUuZXhwbGljaXQsITEsImNvbnRleHQiLHApKSxwfSxsLnBy''@;'; put 'put ''b3RvdHlwZS5fZW5jb2RlQ2hvaWNlPWZ1bmN0aW9uKGksaCl7Y29uc3QgZj10aGlzLl9iYXNlU3RhdGUsdT1mLmNob2ljZVtpLnR5cGVdO3JldHVybiB1fHxyKCExLGkudHlwZSsiIG5vdCBmb3VuZCBpbiAiK0pTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKGYuY2hvaWNlKSkpLHUuX2VuY29k''@;'; put 'put ''ZShpLnZhbHVlLGgpfSxsLnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlPWZ1bmN0aW9uKGksaCl7Y29uc3QgZj10aGlzLl9iYXNlU3RhdGU7aWYoL3N0ciQvLnRlc3QoaSkpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihoLGkpO2lmKCJvYmppZCI9PT1pJiZmLmFyZ3MpcmV0dXJuIHRoaXMuX2Vu''@;'; put 'put ''Y29kZU9iamlkKGgsZi5yZXZlcnNlQXJnc1swXSxmLmFyZ3NbMV0pO2lmKCJvYmppZCI9PT1pKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChoLG51bGwsbnVsbCk7aWYoImdlbnRpbWUiPT09aXx8InV0Y3RpbWUiPT09aSlyZXR1cm4gdGhpcy5fZW5jb2RlVGltZShoLGkpO2lmKCJudWxsXyI9''@;'; put 'put ''PT1pKXJldHVybiB0aGlzLl9lbmNvZGVOdWxsKCk7aWYoImludCI9PT1pfHwiZW51bSI9PT1pKXJldHVybiB0aGlzLl9lbmNvZGVJbnQoaCxmLmFyZ3MmJmYucmV2ZXJzZUFyZ3NbMF0pO2lmKCJib29sIj09PWkpcmV0dXJuIHRoaXMuX2VuY29kZUJvb2woaCk7aWYoIm9iakRlc2MiPT09aSly''@;'; put 'put ''ZXR1cm4gdGhpcy5fZW5jb2RlU3RyKGgsaSk7dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB0YWc6ICIraSl9LGwucHJvdG90eXBlLl9pc051bXN0cj1mdW5jdGlvbihpKXtyZXR1cm4vXlswLTkgXSokLy50ZXN0KGkpfSxsLnByb3RvdHlwZS5faXNQcmludHN0cj1mdW5jdGlvbihpKXty''@;'; put 'put ''ZXR1cm4vXltBLVphLXowLTkgJygpKywtLi86PT9dKiQvLnRlc3QoaSl9fSx7Ii4uL2Jhc2UvYnVmZmVyIjoxNzIsIi4uL2Jhc2UvcmVwb3J0ZXIiOjE3NSwibWluaW1hbGlzdGljLWFzc2VydCI6NDUzfV0sMTc1OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiaW5o''@;'; put 'put ''ZXJpdHMiKTtmdW5jdGlvbiBhKHIpe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczpyfHx7fSxlcnJvcnM6W119fWZ1bmN0aW9uIG8ocix0KXt0aGlzLnBhdGg9cix0aGlzLnJldGhyb3codCl9Uy5SZXBvcnRlcj1hLGEucHJvdG90eXBlLmlzRXJyb3I9ZnVu''@;'; put 'put ''Y3Rpb24ocil7cmV0dXJuIHIgaW5zdGFuY2VvZiBvfSxhLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7Y29uc3Qgcj10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybntvYmo6ci5vYmoscGF0aExlbjpyLnBhdGgubGVuZ3RofX0sYS5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihyKXtjb25z''@;'; put 'put ''dCB0PXRoaXMuX3JlcG9ydGVyU3RhdGU7dC5vYmo9ci5vYmosdC5wYXRoPXQucGF0aC5zbGljZSgwLHIucGF0aExlbil9LGEucHJvdG90eXBlLmVudGVyS2V5PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgucHVzaChyKX0sYS5wcm90b3R5cGUuZXhpdEtleT1m''@;'; put 'put ''dW5jdGlvbihyKXtjb25zdCB0PXRoaXMuX3JlcG9ydGVyU3RhdGU7dC5wYXRoPXQucGF0aC5zbGljZSgwLHItMSl9LGEucHJvdG90eXBlLmxlYXZlS2V5PWZ1bmN0aW9uKHIsdCxlKXtjb25zdCBsPXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KHIpLG51bGwhPT1sLm9iaiYmKGwu''@;'; put 'put ''b2JqW3RdPWUpfSxhLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKCIvIil9LGEucHJvdG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7Y29uc3Qgcj10aGlzLl9yZXBvcnRlclN0YXRlLHQ9ci5vYmo7cmV0dXJuIHIub2Jq''@;'; put 'put ''PXt9LHR9LGEucHJvdG90eXBlLmxlYXZlT2JqZWN0PWZ1bmN0aW9uKHIpe2NvbnN0IHQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxlPXQub2JqO3JldHVybiB0Lm9iaj1yLGV9LGEucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHIpe2xldCB0O2NvbnN0IGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxsPXIg''@;'; put 'put ''aW5zdGFuY2VvZiBvO2lmKHQ9bD9yOm5ldyBvKGUucGF0aC5tYXAoZnVuY3Rpb24obil7cmV0dXJuIlsiK0pTT04uc3RyaW5naWZ5KG4pKyJdIn0pLmpvaW4oIiIpLHIubWVzc2FnZXx8cixyLnN0YWNrKSwhZS5vcHRpb25zLnBhcnRpYWwpdGhyb3cgdDtyZXR1cm4gbHx8ZS5lcnJvcnMucHVz''@;'; put 'put ''aCh0KSx0fSxhLnByb3RvdHlwZS53cmFwUmVzdWx0PWZ1bmN0aW9uKHIpe2NvbnN0IHQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm4gdC5vcHRpb25zLnBhcnRpYWw/e3Jlc3VsdDp0aGlzLmlzRXJyb3Iocik/bnVsbDpyLGVycm9yczp0LmVycm9yc306cn0sYihvLEVycm9yKSxvLnByb3Rv''@;'; put 'put ''dHlwZS5yZXRocm93PWZ1bmN0aW9uKHIpe2lmKHRoaXMubWVzc2FnZT1yKyIgYXQ6ICIrKHRoaXMucGF0aHx8IihzaGFsbG93KSIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLG8pLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''dGhpcy5tZXNzYWdlKX1jYXRjaCh0KXt0aGlzLnN0YWNrPXQuc3RhY2t9cmV0dXJuIHRoaXN9fSx7aW5oZXJpdHM6NDQwfV0sMTc2OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYSl7Y29uc3Qgbz17fTtyZXR1cm4gT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5j''@;'; put 'put ''dGlvbihyKXsoMHxyKT09ciYmKHJ8PTApLG9bYVtyXV09cn0pLG99Uy50YWdDbGFzcz17MDoidW5pdmVyc2FsIiwxOiJhcHBsaWNhdGlvbiIsMjoiY29udGV4dCIsMzoicHJpdmF0ZSJ9LFMudGFnQ2xhc3NCeU5hbWU9YihTLnRhZ0NsYXNzKSxTLnRhZz17MDoiZW5kIiwxOiJib29sIiwyOiJp''@;'; put 'put ''bnQiLDM6ImJpdHN0ciIsNDoib2N0c3RyIiw1OiJudWxsXyIsNjoib2JqaWQiLDc6Im9iakRlc2MiLDg6ImV4dGVybmFsIiw5OiJyZWFsIiwxMDoiZW51bSIsMTE6ImVtYmVkIiwxMjoidXRmOHN0ciIsMTM6InJlbGF0aXZlT2lkIiwxNjoic2VxIiwxNzoic2V0IiwxODoibnVtc3RyIiwxOToi''@;'; put 'put ''cHJpbnRzdHIiLDIwOiJ0NjFzdHIiLDIxOiJ2aWRlb3N0ciIsMjI6ImlhNXN0ciIsMjM6InV0Y3RpbWUiLDI0OiJnZW50aW1lIiwyNToiZ3JhcGhzdHIiLDI2OiJpc282NDZzdHIiLDI3OiJnZW5zdHIiLDI4OiJ1bmlzdHIiLDI5OiJjaGFyc3RyIiwzMDoiYm1wc3RyIn0sUy50YWdCeU5hbWU9''@;'; put 'put ''YihTLnRhZyl9LHt9XSwxNzc6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1TO2IuX3JldmVyc2U9ZnVuY3Rpb24oYSl7Y29uc3Qgbz17fTtyZXR1cm4gT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbihyKXsoMHxyKT09ciYmKHJ8PTApLG9bYVtyXV09cn0pLG99''@;'; put 'put ''LGIuZGVyPXMoIi4vZGVyIil9LHsiLi9kZXIiOjE3Nn1dLDE3ODpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoImluaGVyaXRzIiksYT1zKCJibi5qcyIpLG89cygiLi4vYmFzZS9idWZmZXIiKS5EZWNvZGVyQnVmZmVyLHI9cygiLi4vYmFzZS9ub2RlIiksdD1zKCIu''@;'; put 'put ''Li9jb25zdGFudHMvZGVyIik7ZnVuY3Rpb24gZShoKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9aC5uYW1lLHRoaXMuZW50aXR5PWgsdGhpcy50cmVlPW5ldyBsLHRoaXMudHJlZS5faW5pdChoLmJvZHkpfWZ1bmN0aW9uIGwoaCl7ci5jYWxsKHRoaXMsImRlciIsaCl9ZnVuY3Rpb24gbiho''@;'; put 'put ''LGYpe2xldCB1PWgucmVhZFVJbnQ4KGYpO2lmKGguaXNFcnJvcih1KSlyZXR1cm4gdTtjb25zdCBwPXQudGFnQ2xhc3NbdT4+Nl0sZD0hKDMyJnUpO2lmKDMxJn51KXUmPTMxO2Vsc2V7bGV0IHY9dTtmb3IodT0wOyEoMTI4Jn52KTspe2lmKHY9aC5yZWFkVUludDgoZiksaC5pc0Vycm9yKHYp''@;'; put 'put ''KXJldHVybiB2O3U8PD03LHV8PTEyNyZ2fX1yZXR1cm57Y2xzOnAscHJpbWl0aXZlOmQsdGFnOnUsdGFnU3RyOnQudGFnW3VdfX1mdW5jdGlvbiBpKGgsZix1KXtsZXQgcD1oLnJlYWRVSW50OCh1KTtpZihoLmlzRXJyb3IocCkpcmV0dXJuIHA7aWYoIWYmJjEyOD09PXApcmV0dXJuIG51bGw7''@;'; put 'put ''aWYoISgxMjgmcCkpcmV0dXJuIHA7Y29uc3QgZD0xMjcmcDtpZihkPjQpcmV0dXJuIGguZXJyb3IoImxlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmciKTtwPTA7Zm9yKGxldCB2PTA7djxkO3YrKyl7cDw8PTg7Y29uc3QgXz1oLnJlYWRVSW50OCh1KTtpZihoLmlzRXJyb3IoXykpcmV0dXJuIF87''@;'; put 'put ''cHw9X31yZXR1cm4gcH1FLmV4cG9ydHM9ZSxlLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oaCxmKXtyZXR1cm4gby5pc0RlY29kZXJCdWZmZXIoaCl8fChoPW5ldyBvKGgsZikpLHRoaXMudHJlZS5fZGVjb2RlKGgsZil9LGIobCxyKSxsLnByb3RvdHlwZS5fcGVla1RhZz1mdW5jdGlvbiho''@;'; put 'put ''LGYsdSl7aWYoaC5pc0VtcHR5KCkpcmV0dXJuITE7Y29uc3QgcD1oLnNhdmUoKSxkPW4oaCwnRmFpbGVkIHRvIHBlZWsgdGFnOiAiJytmKyciJyk7cmV0dXJuIGguaXNFcnJvcihkKT9kOihoLnJlc3RvcmUocCksZC50YWc9PT1mfHxkLnRhZ1N0cj09PWZ8fGQudGFnU3RyKyJvZiI9PT1mfHx1''@;'; put 'put ''KX0sbC5wcm90b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlvbihoLGYsdSl7Y29uc3QgcD1uKGgsJ0ZhaWxlZCB0byBkZWNvZGUgdGFnIG9mICInK2YrJyInKTtpZihoLmlzRXJyb3IocCkpcmV0dXJuIHA7bGV0IGQ9aShoLHAucHJpbWl0aXZlLCdGYWlsZWQgdG8gZ2V0IGxlbmd0aCBvZiAiJytm''@;'; put 'put ''KyciJyk7aWYoaC5pc0Vycm9yKGQpKXJldHVybiBkO2lmKCF1JiZwLnRhZyE9PWYmJnAudGFnU3RyIT09ZiYmcC50YWdTdHIrIm9mIiE9PWYpcmV0dXJuIGguZXJyb3IoJ0ZhaWxlZCB0byBtYXRjaCB0YWc6ICInK2YrJyInKTtpZihwLnByaW1pdGl2ZXx8bnVsbCE9PWQpcmV0dXJuIGguc2tp''@;'; put 'put ''cChkLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicrZisnIicpO2NvbnN0IHY9aC5zYXZlKCksXz10aGlzLl9za2lwVW50aWxFbmQoaCwnRmFpbGVkIHRvIHNraXAgaW5kZWZpbml0ZSBsZW5ndGggYm9keTogIicrdGhpcy50YWcrJyInKTtyZXR1cm4gaC5pc0Vycm9yKF8pP186KGQ9aC5v''@;'; put 'put ''ZmZzZXQtdi5vZmZzZXQsaC5yZXN0b3JlKHYpLGguc2tpcChkLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicrZisnIicpKX0sbC5wcm90b3R5cGUuX3NraXBVbnRpbEVuZD1mdW5jdGlvbihoLGYpe2Zvcig7Oyl7Y29uc3QgdT1uKGgsZik7aWYoaC5pc0Vycm9yKHUpKXJldHVybiB1O2Nv''@;'; put 'put ''bnN0IHA9aShoLHUucHJpbWl0aXZlLGYpO2lmKGguaXNFcnJvcihwKSlyZXR1cm4gcDtsZXQgZDtpZihkPXUucHJpbWl0aXZlfHxudWxsIT09cD9oLnNraXAocCk6dGhpcy5fc2tpcFVudGlsRW5kKGgsZiksaC5pc0Vycm9yKGQpKXJldHVybiBkO2lmKCJlbmQiPT09dS50YWdTdHIpYnJlYWt9''@;'; put 'put ''fSxsLnByb3RvdHlwZS5fZGVjb2RlTGlzdD1mdW5jdGlvbihoLGYsdSxwKXtjb25zdCBkPVtdO2Zvcig7IWguaXNFbXB0eSgpOyl7Y29uc3Qgdj10aGlzLl9wZWVrVGFnKGgsImVuZCIpO2lmKGguaXNFcnJvcih2KSlyZXR1cm4gdjtjb25zdCBfPXUuZGVjb2RlKGgsImRlciIscCk7aWYoaC5p''@;'; put 'put ''c0Vycm9yKF8pJiZ2KWJyZWFrO2QucHVzaChfKX1yZXR1cm4gZH0sbC5wcm90b3R5cGUuX2RlY29kZVN0cj1mdW5jdGlvbihoLGYpe2lmKCJiaXRzdHIiPT09Zil7Y29uc3QgdT1oLnJlYWRVSW50OCgpO3JldHVybiBoLmlzRXJyb3IodSk/dTp7dW51c2VkOnUsZGF0YTpoLnJhdygpfX1pZigi''@;'; put 'put ''Ym1wc3RyIj09PWYpe2NvbnN0IHU9aC5yYXcoKTtpZih1Lmxlbmd0aCUyPT0xKXJldHVybiBoLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogYm1wc3RyIGxlbmd0aCBtaXNtYXRjaCIpO2xldCBwPSIiO2ZvcihsZXQgZD0wO2Q8dS5sZW5ndGgvMjtkKyspcCs9U3RyaW5nLmZyb21D''@;'; put 'put ''aGFyQ29kZSh1LnJlYWRVSW50MTZCRSgyKmQpKTtyZXR1cm4gcH1pZigibnVtc3RyIj09PWYpe2NvbnN0IHU9aC5yYXcoKS50b1N0cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNOdW1zdHIodSk/dTpoLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHVuc3VwcG9y''@;'; put 'put ''dGVkIGNoYXJhY3RlcnMiKX1pZigib2N0c3RyIj09PWZ8fCJvYmpEZXNjIj09PWYpcmV0dXJuIGgucmF3KCk7aWYoInByaW50c3RyIj09PWYpe2NvbnN0IHU9aC5yYXcoKS50b1N0cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNQcmludHN0cih1KT91OmguZXJyb3IoIkRlY29kaW5nIG9m''@;'; put 'put ''IHN0cmluZyB0eXBlOiBwcmludHN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9cmV0dXJuL3N0ciQvLnRlc3QoZik/aC5yYXcoKS50b1N0cmluZygpOmguZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK2YrIiB1bnN1cHBvcnRlZCIpfSxsLnByb3RvdHlwZS5fZGVjb2RlT2Jq''@;'; put 'put ''aWQ9ZnVuY3Rpb24oaCxmLHUpe2xldCBwO2NvbnN0IGQ9W107bGV0IHY9MCxfPTA7Zm9yKDshaC5pc0VtcHR5KCk7KV89aC5yZWFkVUludDgoKSx2PDw9Nyx2fD0xMjcmXywhKDEyOCZfKSYmKGQucHVzaCh2KSx2PTApO2lmKDEyOCZfJiZkLnB1c2godikscD11P2Q6W2RbMF0vNDB8MCxkWzBd''@;'; put 'put ''JTQwXS5jb25jYXQoZC5zbGljZSgxKSksZil7bGV0IEw9ZltwLmpvaW4oIiAiKV07dm9pZCAwPT09TCYmKEw9ZltwLmpvaW4oIi4iKV0pLHZvaWQgMCE9PUwmJihwPUwpfXJldHVybiBwfSxsLnByb3RvdHlwZS5fZGVjb2RlVGltZT1mdW5jdGlvbihoLGYpe2NvbnN0IHU9aC5yYXcoKS50b1N0''@;'; put 'put ''cmluZygpO2xldCBwLGQsdixfLEEsSTtpZigiZ2VudGltZSI9PT1mKXA9MHx1LnNsaWNlKDAsNCksZD0wfHUuc2xpY2UoNCw2KSx2PTB8dS5zbGljZSg2LDgpLF89MHx1LnNsaWNlKDgsMTApLEE9MHx1LnNsaWNlKDEwLDEyKSxJPTB8dS5zbGljZSgxMiwxNCk7ZWxzZXtpZigidXRjdGltZSIh''@;'; put 'put ''PT1mKXJldHVybiBoLmVycm9yKCJEZWNvZGluZyAiK2YrIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Iik7cD0wfHUuc2xpY2UoMCwyKSxkPTB8dS5zbGljZSgyLDQpLHY9MHx1LnNsaWNlKDQsNiksXz0wfHUuc2xpY2UoNiw4KSxBPTB8dS5zbGljZSg4LDEwKSxJPTB8dS5zbGljZSgxMCwx''@;'; put 'put ''MikscD1wPDcwPzJlMytwOjE5MDArcH1yZXR1cm4gRGF0ZS5VVEMocCxkLTEsdixfLEEsSSwwKX0sbC5wcm90b3R5cGUuX2RlY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5wcm90b3R5cGUuX2RlY29kZUJvb2w9ZnVuY3Rpb24oaCl7Y29uc3QgZj1oLnJlYWRVSW50OCgpO3Jl''@;'; put 'put ''dHVybiBoLmlzRXJyb3IoZik/ZjowIT09Zn0sbC5wcm90b3R5cGUuX2RlY29kZUludD1mdW5jdGlvbihoLGYpe2NvbnN0IHU9aC5yYXcoKTtsZXQgcD1uZXcgYSh1KTtyZXR1cm4gZiYmKHA9ZltwLnRvU3RyaW5nKDEwKV18fHApLHB9LGwucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oaCxmKXty''@;'; put 'put ''ZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaCYmKGg9aChmKSksaC5fZ2V0RGVjb2RlcigiZGVyIikudHJlZX19LHsiLi4vYmFzZS9idWZmZXIiOjE3MiwiLi4vYmFzZS9ub2RlIjoxNzQsIi4uL2NvbnN0YW50cy9kZXIiOjE3NiwiYm4uanMiOjE4NCxpbmhlcml0czo0NDB9XSwxNzk6W2Z1bmN0''@;'; put 'put ''aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Y29uc3QgYj1TO2IuZGVyPXMoIi4vZGVyIiksYi5wZW09cygiLi9wZW0iKX0seyIuL2RlciI6MTc4LCIuL3BlbSI6MTgwfV0sMTgwOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9cygiaW5oZXJpdHMiKSxhPXMoInNhZmVyLWJ1''@;'; put 'put ''ZmZlciIpLkJ1ZmZlcixvPXMoIi4vZGVyIik7ZnVuY3Rpb24gcih0KXtvLmNhbGwodGhpcyx0KSx0aGlzLmVuYz0icGVtIn1iKHIsbyksRS5leHBvcnRzPXIsci5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHQsZSl7Y29uc3QgbD10LnRvU3RyaW5nKCkuc3BsaXQoL1tcclxuXSsvZyksbj1l''@;'; put 'put ''LmxhYmVsLnRvVXBwZXJDYXNlKCksaT0vXi0tLS0tKEJFR0lOfEVORCkgKFteLV0rKS0tLS0tJC87bGV0IGg9LTEsZj0tMTtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoO2QrKyl7Y29uc3Qgdj1sW2RdLm1hdGNoKGkpO2lmKG51bGwhPT12JiZ2WzJdPT09bil7aWYoLTEhPT1oKXtpZigiRU5EIiE9''@;'; put 'put ''PXZbMV0pYnJlYWs7Zj1kO2JyZWFrfWlmKCJCRUdJTiIhPT12WzFdKWJyZWFrO2g9ZH19aWYoLTE9PT1ofHwtMT09PWYpdGhyb3cgbmV3IEVycm9yKCJQRU0gc2VjdGlvbiBub3QgZm91bmQgZm9yOiAiK24pO2NvbnN0IHU9bC5zbGljZShoKzEsZikuam9pbigiIik7dS5yZXBsYWNlKC9bXmEt''@;'; put 'put ''ejAtOSsvPV0rL2dpLCIiKTtjb25zdCBwPWEuZnJvbSh1LCJiYXNlNjQiKTtyZXR1cm4gby5wcm90b3R5cGUuZGVjb2RlLmNhbGwodGhpcyxwLGUpfX0seyIuL2RlciI6MTc4LGluaGVyaXRzOjQ0MCwic2FmZXItYnVmZmVyIjo0OTV9XSwxODE6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7Y29uc3QgYj1zKCJpbmhlcml0cyIpLGE9cygic2FmZXItYnVmZmVyIikuQnVmZmVyLG89cygiLi4vYmFzZS9ub2RlIikscj1zKCIuLi9jb25zdGFudHMvZGVyIik7ZnVuY3Rpb24gdChuKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9bi5uYW1lLHRoaXMuZW50aXR5PW4sdGhpcy50cmVl''@;'; put 'put ''PW5ldyBlLHRoaXMudHJlZS5faW5pdChuLmJvZHkpfWZ1bmN0aW9uIGUobil7by5jYWxsKHRoaXMsImRlciIsbil9ZnVuY3Rpb24gbChuKXtyZXR1cm4gbjwxMD8iMCIrbjpufUUuZXhwb3J0cz10LHQucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihuLGkpe3JldHVybiB0aGlzLnRyZWUuX2Vu''@;'; put 'put ''Y29kZShuLGkpLmpvaW4oKX0sYihlLG8pLGUucHJvdG90eXBlLl9lbmNvZGVDb21wb3NpdGU9ZnVuY3Rpb24obixpLGgsZil7Y29uc3QgdT1mdW5jdGlvbih2LF8sQSxJKXtsZXQgTDtpZigic2Vxb2YiPT09dj92PSJzZXEiOiJzZXRvZiI9PT12JiYodj0ic2V0Iiksci50YWdCeU5hbWUuaGFz''@;'; put 'put ''T3duUHJvcGVydHkodikpTD1yLnRhZ0J5TmFtZVt2XTtlbHNle2lmKCJudW1iZXIiIT10eXBlb2Ygdnx8KDB8dikhPT12KXJldHVybiBJLmVycm9yKCJVbmtub3duIHRhZzogIit2KTtMPXZ9cmV0dXJuIEw+PTMxP0kuZXJyb3IoIk11bHRpLW9jdGV0IHRhZyBlbmNvZGluZyB1bnN1cHBvcnRl''@;'; put 'put ''ZCIpOihffHwoTHw9MzIpLEx8PXIudGFnQ2xhc3NCeU5hbWVbQXx8InVuaXZlcnNhbCJdPDw2LEwpfShuLGksaCx0aGlzLnJlcG9ydGVyKTtpZihmLmxlbmd0aDwxMjgpe2NvbnN0IHY9YS5hbGxvYygyKTtyZXR1cm4gdlswXT11LHZbMV09Zi5sZW5ndGgsdGhpcy5fY3JlYXRlRW5jb2RlckJ1''@;'; put 'put ''ZmZlcihbdixmXSl9bGV0IHA9MTtmb3IobGV0IHY9Zi5sZW5ndGg7dj49MjU2O3Y+Pj04KXArKztjb25zdCBkPWEuYWxsb2MoMitwKTtkWzBdPXUsZFsxXT0xMjh8cDtmb3IobGV0IHY9MStwLF89Zi5sZW5ndGg7Xz4wO3YtLSxfPj49OClkW3ZdPTI1NSZfO3JldHVybiB0aGlzLl9jcmVhdGVF''@;'; put 'put ''bmNvZGVyQnVmZmVyKFtkLGZdKX0sZS5wcm90b3R5cGUuX2VuY29kZVN0cj1mdW5jdGlvbihuLGkpe2lmKCJiaXRzdHIiPT09aSlyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMHxuLnVudXNlZCxuLmRhdGFdKTtpZigiYm1wc3RyIj09PWkpe2NvbnN0IGg9YS5hbGxvYygyKm4u''@;'; put 'put ''bGVuZ3RoKTtmb3IobGV0IGY9MDtmPG4ubGVuZ3RoO2YrKyloLndyaXRlVUludDE2QkUobi5jaGFyQ29kZUF0KGYpLDIqZik7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoaCl9cmV0dXJuIm51bXN0ciI9PT1pP3RoaXMuX2lzTnVtc3RyKG4pP3RoaXMuX2NyZWF0ZUVuY29kZXJC''@;'; put 'put ''dWZmZXIobik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2UiKToicHJpbnRzdHIiPT09aT90aGlzLl9pc1ByaW50c3RyKG4pP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIobik6dGhpcy5y''@;'; put 'put ''ZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBzcGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwg''@;'; put 'put ''Y29tbWEsIGh5cGhlbiwgZG90LCBzbGFzaCwgY29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmsiKTovc3RyJC8udGVzdChpKXx8Im9iakRlc2MiPT09aT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG4pOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBl''@;'; put 'put ''OiAiK2krIiB1bnN1cHBvcnRlZCIpfSxlLnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24obixpLGgpe2lmKCJzdHJpbmciPT10eXBlb2Ygbil7aWYoIWkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQi''@;'; put 'put ''KTtpZighaS5oYXNPd25Qcm9wZXJ0eShuKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXAiKTtuPWlbbl0uc3BsaXQoL1tccy5dKy9nKTtmb3IobGV0IGQ9MDtkPG4ubGVuZ3RoO2QrKyluW2RdfD0wfWVsc2UgaWYoQXJyYXkuaXNBcnJh''@;'; put 'put ''eShuKSl7bj1uLnNsaWNlKCk7Zm9yKGxldCBkPTA7ZDxuLmxlbmd0aDtkKyspbltkXXw9MH1pZighQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQoKSBzaG91bGQgYmUgZWl0aGVyIGFycmF5IG9yIHN0cmluZywgZ290OiAiK0pTT04uc3RyaW5naWZ5''@;'; put 'put ''KG4pKTtpZighaCl7aWYoblsxXT49NDApcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlNlY29uZCBvYmppZCBpZGVudGlmaWVyIE9PQiIpO24uc3BsaWNlKDAsMiw0MCpuWzBdK25bMV0pfWxldCBmPTA7Zm9yKGxldCBkPTA7ZDxuLmxlbmd0aDtkKyspe2xldCB2PW5bZF07Zm9yKGYrKzt2''@;'; put 'put ''Pj0xMjg7dj4+PTcpZisrfWNvbnN0IHU9YS5hbGxvYyhmKTtsZXQgcD11Lmxlbmd0aC0xO2ZvcihsZXQgZD1uLmxlbmd0aC0xO2Q+PTA7ZC0tKXtsZXQgdj1uW2RdO2Zvcih1W3AtLV09MTI3JnY7KHY+Pj03KT4wOyl1W3AtLV09MTI4fDEyNyZ2fXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVy''@;'; put 'put ''QnVmZmVyKHUpfSxlLnByb3RvdHlwZS5fZW5jb2RlVGltZT1mdW5jdGlvbihuLGkpe2xldCBoO2NvbnN0IGY9bmV3IERhdGUobik7cmV0dXJuImdlbnRpbWUiPT09aT9oPVtsKGYuZ2V0VVRDRnVsbFllYXIoKSksbChmLmdldFVUQ01vbnRoKCkrMSksbChmLmdldFVUQ0RhdGUoKSksbChmLmdl''@;'; put 'put ''dFVUQ0hvdXJzKCkpLGwoZi5nZXRVVENNaW51dGVzKCkpLGwoZi5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6InV0Y3RpbWUiPT09aT9oPVtsKGYuZ2V0VVRDRnVsbFllYXIoKSUxMDApLGwoZi5nZXRVVENNb250aCgpKzEpLGwoZi5nZXRVVENEYXRlKCkpLGwoZi5nZXRVVENIb3Vy''@;'; put 'put ''cygpKSxsKGYuZ2V0VVRDTWludXRlcygpKSxsKGYuZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nICIraSsiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKSx0aGlzLl9lbmNvZGVTdHIoaCwib2N0c3RyIil9LGUucHJvdG90eXBl''@;'; put 'put ''Ll9lbmNvZGVOdWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoIiIpfSxlLnByb3RvdHlwZS5fZW5jb2RlSW50PWZ1bmN0aW9uKG4saSl7aWYoInN0cmluZyI9PXR5cGVvZiBuKXtpZighaSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU3RyaW5nIGlu''@;'; put 'put ''dCBvciBlbnVtIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCIpO2lmKCFpLmhhc093blByb3BlcnR5KG4pKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJWYWx1ZXMgbWFwIGRvZXNuJ3QgY29udGFpbjogIitKU09OLnN0cmluZ2lmeShuKSk7bj1pW25dfWlmKCJudW1iZXIiIT10eXBlb2Yg''@;'; put 'put ''biYmIWEuaXNCdWZmZXIobikpe2NvbnN0IHU9bi50b0FycmF5KCk7IW4uc2lnbiYmMTI4JnVbMF0mJnUudW5zaGlmdCgwKSxuPWEuZnJvbSh1KX1pZihhLmlzQnVmZmVyKG4pKXtsZXQgdT1uLmxlbmd0aDswPT09bi5sZW5ndGgmJnUrKztjb25zdCBwPWEuYWxsb2ModSk7cmV0dXJuIG4uY29w''@;'; put 'put ''eShwKSwwPT09bi5sZW5ndGgmJihwWzBdPTApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIocCl9aWYobjwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIobik7aWYobjwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsbl0pO2xldCBoPTE7Zm9yKGxl''@;'; put 'put ''dCB1PW47dT49MjU2O3U+Pj04KWgrKztjb25zdCBmPW5ldyBBcnJheShoKTtmb3IobGV0IHU9Zi5sZW5ndGgtMTt1Pj0wO3UtLSlmW3VdPTI1NSZuLG4+Pj04O3JldHVybiAxMjgmZlswXSYmZi51bnNoaWZ0KDApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoYS5mcm9tKGYpKX0sZS5wcm90''@;'; put 'put ''b3R5cGUuX2VuY29kZUJvb2w9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIobj8yNTU6MCl9LGUucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24obixpKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbiYmKG49bihpKSksbi5fZ2V0RW5jb2RlcigiZGVyIikudHJl''@;'; put 'put ''ZX0sZS5wcm90b3R5cGUuX3NraXBEZWZhdWx0PWZ1bmN0aW9uKG4saSxoKXtjb25zdCBmPXRoaXMuX2Jhc2VTdGF0ZTtsZXQgdTtpZihudWxsPT09Zi5kZWZhdWx0KXJldHVybiExO2NvbnN0IHA9bi5qb2luKCk7aWYodm9pZCAwPT09Zi5kZWZhdWx0QnVmZmVyJiYoZi5kZWZhdWx0QnVmZmVy''@;'; put 'put ''PXRoaXMuX2VuY29kZVZhbHVlKGYuZGVmYXVsdCxpLGgpLmpvaW4oKSkscC5sZW5ndGghPT1mLmRlZmF1bHRCdWZmZXIubGVuZ3RoKXJldHVybiExO2Zvcih1PTA7dTxwLmxlbmd0aDt1KyspaWYocFt1XSE9PWYuZGVmYXVsdEJ1ZmZlclt1XSlyZXR1cm4hMTtyZXR1cm4hMH19LHsiLi4vYmFz''@;'; put 'put ''ZS9ub2RlIjoxNzQsIi4uL2NvbnN0YW50cy9kZXIiOjE3Nixpbmhlcml0czo0NDAsInNhZmVyLWJ1ZmZlciI6NDk1fV0sMTgyOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2NvbnN0IGI9UztiLmRlcj1zKCIuL2RlciIpLGIucGVtPXMoIi4vcGVtIil9LHsiLi9kZXIiOjE4MSwiLi9w''@;'; put 'put ''ZW0iOjE4M31dLDE4MzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijtjb25zdCBiPXMoImluaGVyaXRzIiksYT1zKCIuL2RlciIpO2Z1bmN0aW9uIG8ocil7YS5jYWxsKHRoaXMsciksdGhpcy5lbmM9InBlbSJ9YihvLGEpLEUuZXhwb3J0cz1vLG8ucHJvdG90eXBlLmVuY29kZT1mdW5j''@;'; put 'put ''dGlvbihyLHQpe2NvbnN0IGU9YS5wcm90b3R5cGUuZW5jb2RlLmNhbGwodGhpcyxyKS50b1N0cmluZygiYmFzZTY0IiksbD1bIi0tLS0tQkVHSU4gIit0LmxhYmVsKyItLS0tLSJdO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bis9NjQpbC5wdXNoKGUuc2xpY2UobixuKzY0KSk7cmV0dXJuIGwu''@;'; put 'put ''cHVzaCgiLS0tLS1FTkQgIit0LmxhYmVsKyItLS0tLSIpLGwuam9pbigiXG4iKX19LHsiLi9kZXIiOjE4MSxpbmhlcml0czo0NDB9XSwxODQ6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7IWZ1bmN0aW9uKGIpe2Z1bmN0aW9uIG8oeCxNKXtpZigheCl0aHJvdyBuZXcgRXJyb3IoTXx8''@;'; put 'put ''IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiByKHgsTSl7eC5zdXBlcl89TTt2YXIgaj1mdW5jdGlvbigpe307ai5wcm90b3R5cGU9TS5wcm90b3R5cGUseC5wcm90b3R5cGU9bmV3IGoseC5wcm90b3R5cGUuY29uc3RydWN0b3I9eH1mdW5jdGlvbiB0KHgsTSxqKXtpZih0LmlzQk4oeCkp''@;'; put 'put ''cmV0dXJuIHg7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PXgmJigibGUiIT09TSYmImJlIiE9PU18fChqPU0sTT0xMCksdGhpcy5faW5pdCh4fHwwLE18fDEwLGp8fCJiZSIpKX12YXIgZTsib2JqZWN0Ij09dHlwZW9m''@;'; put 'put ''IGI/Yi5leHBvcnRzPXQ6KHZvaWQgMCkuQk49dCx0LkJOPXQsdC53b3JkU2l6ZT0yNjt0cnl7ZT10eXBlb2Ygd2luZG93PCJ1IiYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVyOnMoImJ1ZmZlciIpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gbCh4LE0pe3ZhciBqPXguY2hh''@;'; put 'put ''ckNvZGVBdChNKTtyZXR1cm4gaj49NjUmJmo8PTcwP2otNTU6aj49OTcmJmo8PTEwMj9qLTg3OmotNDgmMTV9ZnVuY3Rpb24gbih4LE0sail7dmFyIGM9bCh4LGopO3JldHVybiBqLTE+PU0mJihjfD1sKHgsai0xKTw8NCksY31mdW5jdGlvbiBpKHgsTSxqLGMpe2Zvcih2YXIgbT0wLGc9TWF0''@;'; put 'put ''aC5taW4oeC5sZW5ndGgsaikseT1NO3k8Zzt5Kyspe3ZhciB3PXguY2hhckNvZGVBdCh5KS00ODttKj1jLG0rPXc+PTQ5P3ctNDkrMTA6dz49MTc/dy0xNysxMDp3fXJldHVybiBtfXQuaXNCTj1mdW5jdGlvbih4KXtyZXR1cm4geCBpbnN0YW5jZW9mIHR8fG51bGwhPT14JiYib2JqZWN0Ij09''@;'; put 'put ''dHlwZW9mIHgmJnguY29uc3RydWN0b3Iud29yZFNpemU9PT10LndvcmRTaXplJiZBcnJheS5pc0FycmF5KHgud29yZHMpfSx0Lm1heD1mdW5jdGlvbih4LE0pe3JldHVybiB4LmNtcChNKT4wP3g6TX0sdC5taW49ZnVuY3Rpb24oeCxNKXtyZXR1cm4geC5jbXAoTSk8MD94Ok19LHQucHJvdG90''@;'; put 'put ''eXBlLl9pbml0PWZ1bmN0aW9uKHgsTSxqKXtpZigibnVtYmVyIj09dHlwZW9mIHgpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoeCxNLGopO2lmKCJvYmplY3QiPT10eXBlb2YgeClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHgsTSxqKTsiaGV4Ij09PU0mJihNPTE2KSxvKE09PT0oMHxNKSYmTT49''@;'; put 'put ''MiYmTTw9MzYpO3ZhciBjPTA7Ii0iPT09KHg9eC50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihjKyssdGhpcy5uZWdhdGl2ZT0xKSxjPHgubGVuZ3RoJiYoMTY9PT1NP3RoaXMuX3BhcnNlSGV4KHgsYyxqKToodGhpcy5fcGFyc2VCYXNlKHgsTSxjKSwibGUiPT09aiYmdGhp''@;'; put 'put ''cy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLE0saikpKX0sdC5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oeCxNLGope3g8MCYmKHRoaXMubmVnYXRpdmU9MSx4PS14KSx4PDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ4XSx0aGlzLmxlbmd0aD0xKTp4PDQ1MDM1OTk2''@;'; put 'put ''MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJngseC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG8oeDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZ4LHgvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PWomJnRo''@;'; put 'put ''aXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxNLGopfSx0LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHgsTSxqKXtpZihvKCJudW1iZXIiPT10eXBlb2YgeC5sZW5ndGgpLHgubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5s''@;'; put 'put ''ZW5ndGg9TWF0aC5jZWlsKHgubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGM9MDtjPHRoaXMubGVuZ3RoO2MrKyl0aGlzLndvcmRzW2NdPTA7dmFyIG0sZyx5PTA7aWYoImJlIj09PWopZm9yKGM9eC5sZW5ndGgtMSxtPTA7Yz49MDtjLT0zKXRo''@;'; put 'put ''aXMud29yZHNbbV18PShnPXhbY118eFtjLTFdPDw4fHhbYy0yXTw8MTYpPDx5JjY3MTA4ODYzLHRoaXMud29yZHNbbSsxXT1nPj4+MjYteSY2NzEwODg2MywoeSs9MjQpPj0yNiYmKHktPTI2LG0rKyk7ZWxzZSBpZigibGUiPT09ailmb3IoYz0wLG09MDtjPHgubGVuZ3RoO2MrPTMpdGhpcy53''@;'; put 'put ''b3Jkc1ttXXw9KGc9eFtjXXx4W2MrMV08PDh8eFtjKzJdPDwxNik8PHkmNjcxMDg4NjMsdGhpcy53b3Jkc1ttKzFdPWc+Pj4yNi15JjY3MTA4ODYzLCh5Kz0yNCk+PTI2JiYoeS09MjYsbSsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx0LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oeCxN''@;'; put 'put ''LGope3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoeC5sZW5ndGgtTSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgYz0wO2M8dGhpcy5sZW5ndGg7YysrKXRoaXMud29yZHNbY109MDt2YXIgbSxnPTAseT0wO2lmKCJiZSI9PT1qKWZvcihjPXgubGVuZ3RoLTE7''@;'; put 'put ''Yz49TTtjLT0yKW09bih4LE0sYyk8PGcsdGhpcy53b3Jkc1t5XXw9NjcxMDg4NjMmbSxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1t5Kz0xXXw9bT4+PjI2KTpnKz04O2Vsc2UgZm9yKGM9KHgubGVuZ3RoLU0pJTI9PTA/TSsxOk07Yzx4Lmxlbmd0aDtjKz0yKW09bih4LE0sYyk8PGcsdGhpcy53''@;'; put 'put ''b3Jkc1t5XXw9NjcxMDg4NjMmbSxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1t5Kz0xXXw9bT4+PjI2KTpnKz04O3RoaXMuc3RyaXAoKX0sdC5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbih4LE0sail7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIGM9MCxtPTE7bTw9''@;'; put 'put ''NjcxMDg4NjM7bSo9TSljKys7Yy0tLG09bS9NfDA7Zm9yKHZhciBnPXgubGVuZ3RoLWoseT1nJWMsdz1NYXRoLm1pbihnLGcteSkraixrPTAsTz1qO088dztPKz1jKWs9aSh4LE8sTytjLE0pLHRoaXMuaW11bG4obSksdGhpcy53b3Jkc1swXStrPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWs6''@;'; put 'put ''dGhpcy5faWFkZG4oayk7aWYoMCE9PXkpe3ZhciB6PTE7Zm9yKGs9aSh4LE8seC5sZW5ndGgsTSksTz0wO088eTtPKyspeio9TTt0aGlzLmltdWxuKHopLHRoaXMud29yZHNbMF0razw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1rOnRoaXMuX2lhZGRuKGspfXRoaXMuc3RyaXAoKX0sdC5wcm90''@;'; put 'put ''b3R5cGUuY29weT1mdW5jdGlvbih4KXt4LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBNPTA7TTx0aGlzLmxlbmd0aDtNKyspeC53b3Jkc1tNXT10aGlzLndvcmRzW01dO3gubGVuZ3RoPXRoaXMubGVuZ3RoLHgubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSx4LnJlZD10aGlz''@;'; put 'put ''LnJlZH0sdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgeD1uZXcgdChudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHgpLHh9LHQucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oeCl7Zm9yKDt0aGlzLmxlbmd0aDx4Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRo''@;'; put 'put ''aXN9LHQucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdC5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9''@;'; put 'put ''PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHQucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIGg9WyIiLCIwIiwiMDAi''@;'; put 'put ''LCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sZj1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSx1PVswLDAsMzM1NTQ0MzIsNDMw''@;'; put 'put ''NDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIs''@;'; put 'put ''NjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIHAoeCxNLGope2oubmVnYXRpdmU9TS5uZWdhdGl2ZV54Lm5l''@;'; put 'put ''Z2F0aXZlO3ZhciBjPXgubGVuZ3RoK00ubGVuZ3RofDA7ai5sZW5ndGg9YyxjPWMtMXwwO3ZhciBtPTB8eC53b3Jkc1swXSxnPTB8TS53b3Jkc1swXSx5PW0qZyxrPXkvNjcxMDg4NjR8MDtqLndvcmRzWzBdPTY3MTA4ODYzJnk7Zm9yKHZhciBPPTE7TzxjO08rKyl7Zm9yKHZhciB6PWs+Pj4y''@;'; put 'put ''NixVPTY3MTA4ODYzJmssVj1NYXRoLm1pbihPLE0ubGVuZ3RoLTEpLFI9TWF0aC5tYXgoMCxPLXgubGVuZ3RoKzEpO1I8PVY7UisrKXorPSh5PShtPTB8eC53b3Jkc1tPLVJ8MF0pKihnPTB8TS53b3Jkc1tSXSkrVSkvNjcxMDg4NjR8MCxVPTY3MTA4ODYzJnk7ai53b3Jkc1tPXT0wfFUsaz0w''@;'; put 'put ''fHp9cmV0dXJuIDAhPT1rP2oud29yZHNbT109MHxrOmoubGVuZ3RoLS0sai5zdHJpcCgpfXQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHgsTSl7dmFyIGo7aWYoTT0wfE18fDEsMTY9PT0oeD14fHwxMCl8fCJoZXgiPT09eCl7aj0iIjtmb3IodmFyIGM9MCxtPTAsZz0wO2c8dGhpcy5s''@;'; put 'put ''ZW5ndGg7ZysrKXt2YXIgeT10aGlzLndvcmRzW2ddLHc9KDE2Nzc3MjE1Jih5PDxjfG0pKS50b1N0cmluZygxNik7aj0wIT0obT15Pj4+MjQtYyYxNjc3NzIxNSl8fGchPT10aGlzLmxlbmd0aC0xP2hbNi13Lmxlbmd0aF0rdytqOncraiwoYys9Mik+PTI2JiYoYy09MjYsZy0tKX1mb3IoMCE9''@;'; put 'put ''PW0mJihqPW0udG9TdHJpbmcoMTYpK2opO2oubGVuZ3RoJU0hPTA7KWo9IjAiK2o7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoaj0iLSIraiksan1pZih4PT09KDB8eCkmJng+PTImJng8PTM2KXt2YXIgaz1mW3hdLE89dVt4XTtqPSIiO3ZhciB6PXRoaXMuY2xvbmUoKTtmb3Ioei5uZWdh''@;'; put 'put ''dGl2ZT0wOyF6LmlzWmVybygpOyl7dmFyIFU9ei5tb2RuKE8pLnRvU3RyaW5nKHgpO2o9KHo9ei5pZGl2bihPKSkuaXNaZXJvKCk/VStqOmhbay1VLmxlbmd0aF0rVStqfWZvcih0aGlzLmlzWmVybygpJiYoaj0iMCIraik7ai5sZW5ndGglTSE9MDspaj0iMCIrajtyZXR1cm4gMCE9PXRoaXMu''@;'; put 'put ''bmVnYXRpdmUmJihqPSItIitqKSxqfW8oITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdC5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgeD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/eCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXToz''@;'; put 'put ''PT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3grPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZvKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8teDp4''@;'; put 'put ''fSx0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHQucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHgsTSl7cmV0dXJuIG8odm9pZCAwIT09ZSksdGhpcy50b0FycmF5TGlrZShlLHgsTSl9LHQucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rp''@;'; put 'put ''b24oeCxNKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSx4LE0pfSx0LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbih4LE0sail7dmFyIGM9dGhpcy5ieXRlTGVuZ3RoKCksbT1qfHxNYXRoLm1heCgxLGMpO28oYzw9bSwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVk''@;'; put 'put ''IGxlbmd0aCIpLG8obT4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIGcseSx3PSJsZSI9PT1NLGs9bmV3IHgobSksTz10aGlzLmNsb25lKCk7aWYodyl7Zm9yKHk9MDshTy5pc1plcm8oKTt5KyspZz1PLmFuZGxuKDI1NSksTy5pdXNocm4oOCksa1t5''@;'; put 'put ''XT1nO2Zvcig7eTxtO3krKylrW3ldPTB9ZWxzZXtmb3IoeT0wO3k8bS1jO3krKylrW3ldPTA7Zm9yKHk9MDshTy5pc1plcm8oKTt5KyspZz1PLmFuZGxuKDI1NSksTy5pdXNocm4oOCksa1ttLXktMV09Z31yZXR1cm4ga30sdC5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0''@;'; put 'put ''aW9uKHgpe3JldHVybiAzMi1NYXRoLmNsejMyKHgpfTpmdW5jdGlvbih4KXt2YXIgTT14LGo9MDtyZXR1cm4gTT49NDA5NiYmKGorPTEzLE0+Pj49MTMpLE0+PTY0JiYoais9NyxNPj4+PTcpLE0+PTgmJihqKz00LE0+Pj49NCksTT49MiYmKGorPTIsTT4+Pj0yKSxqK019LHQucHJvdG90eXBl''@;'; put 'put ''Ll96ZXJvQml0cz1mdW5jdGlvbih4KXtpZigwPT09eClyZXR1cm4gMjY7dmFyIE09eCxqPTA7cmV0dXJuISg4MTkxJk0pJiYoais9MTMsTT4+Pj0xMyksISgxMjcmTSkmJihqKz03LE0+Pj49NyksISgxNSZNKSYmKGorPTQsTT4+Pj00KSwhKDMmTSkmJihqKz0yLE0+Pj49MiksISgxJk0pJiZq''@;'; put 'put ''Kyssan0sdC5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIE09dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrTX0sdC5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygp''@;'; put 'put ''KXJldHVybiAwO2Zvcih2YXIgeD0wLE09MDtNPHRoaXMubGVuZ3RoO00rKyl7dmFyIGo9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tNXSk7aWYoeCs9aiwyNiE9PWopYnJlYWt9cmV0dXJuIHh9LHQucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRo''@;'; put 'put ''aXMuYml0TGVuZ3RoKCkvOCl9LHQucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbih4KXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bih4KS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHQucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLnRl''@;'; put 'put ''c3RuKHgtMSk/dGhpcy5ub3RuKHgpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHQucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx0LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdC5w''@;'; put 'put ''cm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdC5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbih4KXtmb3IoO3RoaXMubGVuZ3RoPHgubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBN''@;'; put 'put ''PTA7TTx4Lmxlbmd0aDtNKyspdGhpcy53b3Jkc1tNXT10aGlzLndvcmRzW01dfHgud29yZHNbTV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdC5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHgpe3JldHVybiBvKDA9PSh0aGlzLm5lZ2F0aXZlfHgubmVnYXRpdmUpKSx0aGlzLml1b3IoeCl9LHQucHJv''@;'; put 'put ''dG90eXBlLm9yPWZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLmxlbmd0aD54Lmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHgpOnguY2xvbmUoKS5pb3IodGhpcyl9LHQucHJvdG90eXBlLnVvcj1mdW5jdGlvbih4KXtyZXR1cm4gdGhpcy5sZW5ndGg+eC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3Io''@;'; put 'put ''eCk6eC5jbG9uZSgpLml1b3IodGhpcyl9LHQucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHgpe3ZhciBNO009dGhpcy5sZW5ndGg+eC5sZW5ndGg/eDp0aGlzO2Zvcih2YXIgaj0wO2o8TS5sZW5ndGg7aisrKXRoaXMud29yZHNbal09dGhpcy53b3Jkc1tqXSZ4LndvcmRzW2pdO3JldHVybiB0''@;'; put 'put ''aGlzLmxlbmd0aD1NLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHQucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oeCl7cmV0dXJuIG8oMD09KHRoaXMubmVnYXRpdmV8eC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoeCl9LHQucHJvdG90eXBlLmFuZD1mdW5jdGlvbih4KXtyZXR1cm4gdGhpcy5sZW5ndGg+''@;'; put 'put ''eC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoeCk6eC5jbG9uZSgpLmlhbmQodGhpcyl9LHQucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMubGVuZ3RoPngubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZCh4KTp4LmNsb25lKCkuaXVhbmQodGhpcyl9LHQucHJvdG90eXBl''@;'; put 'put ''Lml1eG9yPWZ1bmN0aW9uKHgpe3ZhciBNLGo7dGhpcy5sZW5ndGg+eC5sZW5ndGg/KE09dGhpcyxqPXgpOihNPXgsaj10aGlzKTtmb3IodmFyIGM9MDtjPGoubGVuZ3RoO2MrKyl0aGlzLndvcmRzW2NdPU0ud29yZHNbY11eai53b3Jkc1tjXTtpZih0aGlzIT09TSlmb3IoO2M8TS5sZW5ndGg7''@;'; put 'put ''YysrKXRoaXMud29yZHNbY109TS53b3Jkc1tjXTtyZXR1cm4gdGhpcy5sZW5ndGg9TS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx0LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHgpe3JldHVybiBvKDA9PSh0aGlzLm5lZ2F0aXZlfHgubmVnYXRpdmUpKSx0aGlzLml1eG9yKHgpfSx0LnByb3RvdHlw''@;'; put 'put ''ZS54b3I9ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMubGVuZ3RoPngubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHgpOnguY2xvbmUoKS5peG9yKHRoaXMpfSx0LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLmxlbmd0aD54Lmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3Io''@;'; put 'put ''eCk6eC5jbG9uZSgpLml1eG9yKHRoaXMpfSx0LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbih4KXtvKCJudW1iZXIiPT10eXBlb2YgeCYmeD49MCk7dmFyIE09MHxNYXRoLmNlaWwoeC8yNiksaj14JTI2O3RoaXMuX2V4cGFuZChNKSxqPjAmJk0tLTtmb3IodmFyIGM9MDtjPE07YysrKXRoaXMu''@;'; put 'put ''d29yZHNbY109NjcxMDg4NjMmfnRoaXMud29yZHNbY107cmV0dXJuIGo+MCYmKHRoaXMud29yZHNbY109fnRoaXMud29yZHNbY10mNjcxMDg4NjM+PjI2LWopLHRoaXMuc3RyaXAoKX0sdC5wcm90b3R5cGUubm90bj1mdW5jdGlvbih4KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHgpfSx0''@;'; put 'put ''LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHgsTSl7bygibnVtYmVyIj09dHlwZW9mIHgmJng+PTApO3ZhciBqPXgvMjZ8MCxjPXglMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChqKzEpLHRoaXMud29yZHNbal09TT90aGlzLndvcmRzW2pdfDE8PGM6dGhpcy53b3Jkc1tqXSZ+KDE8PGMpLHRoaXMu''@;'; put 'put ''c3RyaXAoKX0sdC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih4KXt2YXIgTSxqLGM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT14Lm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsTT10aGlzLmlzdWIoeCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10''@;'; put 'put ''aGlzLm5lZ2F0aXZlJiYwIT09eC5uZWdhdGl2ZSlyZXR1cm4geC5uZWdhdGl2ZT0wLE09dGhpcy5pc3ViKHgpLHgubmVnYXRpdmU9MSxNLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPngubGVuZ3RoPyhqPXRoaXMsYz14KTooaj14LGM9dGhpcyk7Zm9yKHZhciBtPTAsZz0wO2c8Yy5sZW5ndGg7''@;'; put 'put ''ZysrKXRoaXMud29yZHNbZ109NjcxMDg4NjMmKE09KDB8ai53b3Jkc1tnXSkrKDB8Yy53b3Jkc1tnXSkrbSksbT1NPj4+MjY7Zm9yKDswIT09bSYmZzxqLmxlbmd0aDtnKyspdGhpcy53b3Jkc1tnXT02NzEwODg2MyYoTT0oMHxqLndvcmRzW2ddKSttKSxtPU0+Pj4yNjtpZih0aGlzLmxlbmd0''@;'; put 'put ''aD1qLmxlbmd0aCwwIT09bSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1tLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihqIT09dGhpcylmb3IoO2c8ai5sZW5ndGg7ZysrKXRoaXMud29yZHNbZ109ai53b3Jkc1tnXTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHgpe3ZhciBN''@;'; put 'put ''O3JldHVybiAwIT09eC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHgubmVnYXRpdmU9MCxNPXRoaXMuc3ViKHgpLHgubmVnYXRpdmVePTEsTSk6MD09PXgubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsTT14LnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZl''@;'; put 'put ''PTEsTSk6dGhpcy5sZW5ndGg+eC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoeCk6eC5jbG9uZSgpLmlhZGQodGhpcyl9LHQucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oeCl7aWYoMCE9PXgubmVnYXRpdmUpe3gubmVnYXRpdmU9MDt2YXIgTT10aGlzLmlhZGQoeCk7cmV0dXJuIHgubmVnYXRp''@;'; put 'put ''dmU9MSxNLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHgpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBqLGMsbT10aGlzLmNtcCh4KTtpZigwPT09bSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRo''@;'; put 'put ''aXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7bT4wPyhqPXRoaXMsYz14KTooaj14LGM9dGhpcyk7Zm9yKHZhciBnPTAseT0wO3k8Yy5sZW5ndGg7eSsrKWc9KE09KDB8ai53b3Jkc1t5XSktKDB8Yy53b3Jkc1t5XSkrZyk+PjI2LHRoaXMud29yZHNbeV09NjcxMDg4NjMmTTtmb3Io''@;'; put 'put ''OzAhPT1nJiZ5PGoubGVuZ3RoO3krKylnPShNPSgwfGoud29yZHNbeV0pK2cpPj4yNix0aGlzLndvcmRzW3ldPTY3MTA4ODYzJk07aWYoMD09PWcmJnk8ai5sZW5ndGgmJmohPT10aGlzKWZvcig7eTxqLmxlbmd0aDt5KyspdGhpcy53b3Jkc1t5XT1qLndvcmRzW3ldO3JldHVybiB0aGlzLmxl''@;'; put 'put ''bmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCx5KSxqIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx0LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHgpfTt2YXIgZD1mdW5jdGlvbih4LE0sail7dmFyIGMsbSxnLHk9eC53''@;'; put 'put ''b3Jkcyx3PU0ud29yZHMsaz1qLndvcmRzLE89MCx6PTB8eVswXSxVPTgxOTEmeixWPXo+Pj4xMyxSPTB8eVsxXSxIPTgxOTEmUixUPVI+Pj4xMyxDPTB8eVsyXSxGPTgxOTEmQyxxPUM+Pj4xMyxZPTB8eVszXSxYPTgxOTEmWSxLPVk+Pj4xMyxydD0wfHlbNF0sdHQ9ODE5MSZydCxXPXJ0Pj4+''@;'; put 'put ''MTMsUT0wfHlbNV0sRz04MTkxJlEsZXQ9UT4+PjEzLG50PTB8eVs2XSxpdD04MTkxJm50LG90PW50Pj4+MTMsaHQ9MHx5WzddLGZ0PTgxOTEmaHQscHQ9aHQ+Pj4xMyxUdD0wfHlbOF0seXQ9ODE5MSZUdCx3dD1UdD4+PjEzLHF0PTB8eVs5XSxFdD04MTkxJnF0LF90PXF0Pj4+MTMsQXQ9MHx3''@;'; put 'put ''WzBdLGd0PTgxOTEmQXQsbXQ9QXQ+Pj4xMyxWdD0wfHdbMV0sU3Q9ODE5MSZWdCxPdD1WdD4+PjEzLHllPTB8d1syXSxSdD04MTkxJnllLE50PXllPj4+MTMsYWU9MHx3WzNdLEx0PTgxOTEmYWUsenQ9YWU+Pj4xMyxwZT0wfHdbNF0sQnQ9ODE5MSZwZSxQdD1wZT4+PjEzLGNlPTB8d1s1XSxG''@;'; put 'put ''dD04MTkxJmNlLEl0PWNlPj4+MTMsdmU9MHx3WzZdLFV0PTgxOTEmdmUsSj12ZT4+PjEzLGF0PTB8d1s3XSxsdD04MTkxJmF0LGR0PWF0Pj4+MTMsWXQ9MHx3WzhdLHZ0PTgxOTEmWXQsa3Q9WXQ+Pj4xMyx0ZT0wfHdbOV0sanQ9ODE5MSZ0ZSx4dD10ZT4+PjEzO2oubmVnYXRpdmU9eC5uZWdh''@;'; put 'put ''dGl2ZV5NLm5lZ2F0aXZlLGoubGVuZ3RoPTE5O3ZhciBRdD0oTysoYz1NYXRoLmltdWwoVSxndCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoVSxtdCkpK01hdGguaW11bChWLGd0KXwwKSk8PDEzKXwwO089KChnPU1hdGguaW11bChWLG10KSkrKG0+Pj4xMyl8MCkrKFF0Pj4+MjYpfDAs''@;'; put 'put ''UXQmPTY3MTA4ODYzLGM9TWF0aC5pbXVsKEgsZ3QpLG09KG09TWF0aC5pbXVsKEgsbXQpKStNYXRoLmltdWwoVCxndCl8MCxnPU1hdGguaW11bChULG10KTt2YXIgV3Q9KE8rKGM9YytNYXRoLmltdWwoVSxTdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFUsT3QpfDApK01hdGgu''@;'; put 'put ''aW11bChWLFN0KXwwKSk8PDEzKXwwO089KChnPWcrTWF0aC5pbXVsKFYsT3QpfDApKyhtPj4+MTMpfDApKyhXdD4+PjI2KXwwLFd0Jj02NzEwODg2MyxjPU1hdGguaW11bChGLGd0KSxtPShtPU1hdGguaW11bChGLG10KSkrTWF0aC5pbXVsKHEsZ3QpfDAsZz1NYXRoLmltdWwocSxtdCksYz1j''@;'; put 'put ''K01hdGguaW11bChILFN0KXwwLG09KG09bStNYXRoLmltdWwoSCxPdCl8MCkrTWF0aC5pbXVsKFQsU3QpfDAsZz1nK01hdGguaW11bChULE90KXwwO3ZhciBYdD0oTysoYz1jK01hdGguaW11bChVLFJ0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVSxOdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFYsUnQpfDApKTw8MTMpfDA7Tz0oKGc9ZytNYXRoLmltdWwoVixOdCl8MCkrKG0+Pj4xMyl8MCkrKFh0Pj4+MjYpfDAsWHQmPTY3MTA4ODYzLGM9TWF0aC5pbXVsKFgsZ3QpLG09KG09TWF0aC5pbXVsKFgsbXQpKStNYXRoLmltdWwoSyxndCl8MCxnPU1hdGguaW11bChLLG10KSxjPWMrTWF0''@;'; put 'put ''aC5pbXVsKEYsU3QpfDAsbT0obT1tK01hdGguaW11bChGLE90KXwwKStNYXRoLmltdWwocSxTdCl8MCxnPWcrTWF0aC5pbXVsKHEsT3QpfDAsYz1jK01hdGguaW11bChILFJ0KXwwLG09KG09bStNYXRoLmltdWwoSCxOdCl8MCkrTWF0aC5pbXVsKFQsUnQpfDAsZz1nK01hdGguaW11bChULE50''@;'; put 'put ''KXwwO3ZhciByZT0oTysoYz1jK01hdGguaW11bChVLEx0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVSx6dCl8MCkrTWF0aC5pbXVsKFYsTHQpfDApKTw8MTMpfDA7Tz0oKGc9ZytNYXRoLmltdWwoVix6dCl8MCkrKG0+Pj4xMyl8MCkrKHJlPj4+MjYpfDAscmUmPTY3MTA4ODYz''@;'; put 'put ''LGM9TWF0aC5pbXVsKHR0LGd0KSxtPShtPU1hdGguaW11bCh0dCxtdCkpK01hdGguaW11bChXLGd0KXwwLGc9TWF0aC5pbXVsKFcsbXQpLGM9YytNYXRoLmltdWwoWCxTdCl8MCxtPShtPW0rTWF0aC5pbXVsKFgsT3QpfDApK01hdGguaW11bChLLFN0KXwwLGc9ZytNYXRoLmltdWwoSyxPdCl8''@;'; put 'put ''MCxjPWMrTWF0aC5pbXVsKEYsUnQpfDAsbT0obT1tK01hdGguaW11bChGLE50KXwwKStNYXRoLmltdWwocSxSdCl8MCxnPWcrTWF0aC5pbXVsKHEsTnQpfDAsYz1jK01hdGguaW11bChILEx0KXwwLG09KG09bStNYXRoLmltdWwoSCx6dCl8MCkrTWF0aC5pbXVsKFQsTHQpfDAsZz1nK01hdGgu''@;'; put 'put ''aW11bChULHp0KXwwO3ZhciBpZT0oTysoYz1jK01hdGguaW11bChVLEJ0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVSxQdCl8MCkrTWF0aC5pbXVsKFYsQnQpfDApKTw8MTMpfDA7Tz0oKGc9ZytNYXRoLmltdWwoVixQdCl8MCkrKG0+Pj4xMyl8MCkrKGllPj4+MjYpfDAsaWUm''@;'; put 'put ''PTY3MTA4ODYzLGM9TWF0aC5pbXVsKEcsZ3QpLG09KG09TWF0aC5pbXVsKEcsbXQpKStNYXRoLmltdWwoZXQsZ3QpfDAsZz1NYXRoLmltdWwoZXQsbXQpLGM9YytNYXRoLmltdWwodHQsU3QpfDAsbT0obT1tK01hdGguaW11bCh0dCxPdCl8MCkrTWF0aC5pbXVsKFcsU3QpfDAsZz1nK01hdGgu''@;'; put 'put ''aW11bChXLE90KXwwLGM9YytNYXRoLmltdWwoWCxSdCl8MCxtPShtPW0rTWF0aC5pbXVsKFgsTnQpfDApK01hdGguaW11bChLLFJ0KXwwLGc9ZytNYXRoLmltdWwoSyxOdCl8MCxjPWMrTWF0aC5pbXVsKEYsTHQpfDAsbT0obT1tK01hdGguaW11bChGLHp0KXwwKStNYXRoLmltdWwocSxMdCl8''@;'; put 'put ''MCxnPWcrTWF0aC5pbXVsKHEsenQpfDAsYz1jK01hdGguaW11bChILEJ0KXwwLG09KG09bStNYXRoLmltdWwoSCxQdCl8MCkrTWF0aC5pbXVsKFQsQnQpfDAsZz1nK01hdGguaW11bChULFB0KXwwO3ZhciB1ZT0oTysoYz1jK01hdGguaW11bChVLEZ0KXwwKXwwKSsoKDgxOTEmKG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoVSxJdCl8MCkrTWF0aC5pbXVsKFYsRnQpfDApKTw8MTMpfDA7Tz0oKGc9ZytNYXRoLmltdWwoVixJdCl8MCkrKG0+Pj4xMyl8MCkrKHVlPj4+MjYpfDAsdWUmPTY3MTA4ODYzLGM9TWF0aC5pbXVsKGl0LGd0KSxtPShtPU1hdGguaW11bChpdCxtdCkpK01hdGguaW11bChvdCxn''@;'; put 'put ''dCl8MCxnPU1hdGguaW11bChvdCxtdCksYz1jK01hdGguaW11bChHLFN0KXwwLG09KG09bStNYXRoLmltdWwoRyxPdCl8MCkrTWF0aC5pbXVsKGV0LFN0KXwwLGc9ZytNYXRoLmltdWwoZXQsT3QpfDAsYz1jK01hdGguaW11bCh0dCxSdCl8MCxtPShtPW0rTWF0aC5pbXVsKHR0LE50KXwwKStN''@;'; put 'put ''YXRoLmltdWwoVyxSdCl8MCxnPWcrTWF0aC5pbXVsKFcsTnQpfDAsYz1jK01hdGguaW11bChYLEx0KXwwLG09KG09bStNYXRoLmltdWwoWCx6dCl8MCkrTWF0aC5pbXVsKEssTHQpfDAsZz1nK01hdGguaW11bChLLHp0KXwwLGM9YytNYXRoLmltdWwoRixCdCl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KEYsUHQpfDApK01hdGguaW11bChxLEJ0KXwwLGc9ZytNYXRoLmltdWwocSxQdCl8MCxjPWMrTWF0aC5pbXVsKEgsRnQpfDAsbT0obT1tK01hdGguaW11bChILEl0KXwwKStNYXRoLmltdWwoVCxGdCl8MCxnPWcrTWF0aC5pbXVsKFQsSXQpfDA7dmFyIGRlPShPKyhjPWMrTWF0aC5pbXVsKFUs''@;'; put 'put ''VXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVLEopfDApK01hdGguaW11bChWLFV0KXwwKSk8PDEzKXwwO089KChnPWcrTWF0aC5pbXVsKFYsSil8MCkrKG0+Pj4xMyl8MCkrKGRlPj4+MjYpfDAsZGUmPTY3MTA4ODYzLGM9TWF0aC5pbXVsKGZ0LGd0KSxtPShtPU1hdGguaW11''@;'; put 'put ''bChmdCxtdCkpK01hdGguaW11bChwdCxndCl8MCxnPU1hdGguaW11bChwdCxtdCksYz1jK01hdGguaW11bChpdCxTdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LE90KXwwKStNYXRoLmltdWwob3QsU3QpfDAsZz1nK01hdGguaW11bChvdCxPdCl8MCxjPWMrTWF0aC5pbXVsKEcsUnQpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChHLE50KXwwKStNYXRoLmltdWwoZXQsUnQpfDAsZz1nK01hdGguaW11bChldCxOdCl8MCxjPWMrTWF0aC5pbXVsKHR0LEx0KXwwLG09KG09bStNYXRoLmltdWwodHQsenQpfDApK01hdGguaW11bChXLEx0KXwwLGc9ZytNYXRoLmltdWwoVyx6dCl8MCxjPWMrTWF0aC5p''@;'; put 'put ''bXVsKFgsQnQpfDAsbT0obT1tK01hdGguaW11bChYLFB0KXwwKStNYXRoLmltdWwoSyxCdCl8MCxnPWcrTWF0aC5pbXVsKEssUHQpfDAsYz1jK01hdGguaW11bChGLEZ0KXwwLG09KG09bStNYXRoLmltdWwoRixJdCl8MCkrTWF0aC5pbXVsKHEsRnQpfDAsZz1nK01hdGguaW11bChxLEl0KXww''@;'; put 'put ''LGM9YytNYXRoLmltdWwoSCxVdCl8MCxtPShtPW0rTWF0aC5pbXVsKEgsSil8MCkrTWF0aC5pbXVsKFQsVXQpfDAsZz1nK01hdGguaW11bChULEopfDA7dmFyIGxlPShPKyhjPWMrTWF0aC5pbXVsKFUsbHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVLGR0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoVixsdCl8MCkpPDwxMyl8MDtPPSgoZz1nK01hdGguaW11bChWLGR0KXwwKSsobT4+PjEzKXwwKSsobGU+Pj4yNil8MCxsZSY9NjcxMDg4NjMsYz1NYXRoLmltdWwoeXQsZ3QpLG09KG09TWF0aC5pbXVsKHl0LG10KSkrTWF0aC5pbXVsKHd0LGd0KXwwLGc9TWF0aC5pbXVsKHd0LG10KSxj''@;'; put 'put ''PWMrTWF0aC5pbXVsKGZ0LFN0KXwwLG09KG09bStNYXRoLmltdWwoZnQsT3QpfDApK01hdGguaW11bChwdCxTdCl8MCxnPWcrTWF0aC5pbXVsKHB0LE90KXwwLGM9YytNYXRoLmltdWwoaXQsUnQpfDAsbT0obT1tK01hdGguaW11bChpdCxOdCl8MCkrTWF0aC5pbXVsKG90LFJ0KXwwLGc9ZytN''@;'; put 'put ''YXRoLmltdWwob3QsTnQpfDAsYz1jK01hdGguaW11bChHLEx0KXwwLG09KG09bStNYXRoLmltdWwoRyx6dCl8MCkrTWF0aC5pbXVsKGV0LEx0KXwwLGc9ZytNYXRoLmltdWwoZXQsenQpfDAsYz1jK01hdGguaW11bCh0dCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHR0LFB0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoVyxCdCl8MCxnPWcrTWF0aC5pbXVsKFcsUHQpfDAsYz1jK01hdGguaW11bChYLEZ0KXwwLG09KG09bStNYXRoLmltdWwoWCxJdCl8MCkrTWF0aC5pbXVsKEssRnQpfDAsZz1nK01hdGguaW11bChLLEl0KXwwLGM9YytNYXRoLmltdWwoRixVdCl8MCxtPShtPW0rTWF0aC5pbXVsKEYsSil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKHEsVXQpfDAsZz1nK01hdGguaW11bChxLEopfDAsYz1jK01hdGguaW11bChILGx0KXwwLG09KG09bStNYXRoLmltdWwoSCxkdCl8MCkrTWF0aC5pbXVsKFQsbHQpfDAsZz1nK01hdGguaW11bChULGR0KXwwO3ZhciBmZT0oTysoYz1jK01hdGguaW11bChVLHZ0KXwwKXww''@;'; put 'put ''KSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVSxrdCl8MCkrTWF0aC5pbXVsKFYsdnQpfDApKTw8MTMpfDA7Tz0oKGc9ZytNYXRoLmltdWwoVixrdCl8MCkrKG0+Pj4xMyl8MCkrKGZlPj4+MjYpfDAsZmUmPTY3MTA4ODYzLGM9TWF0aC5pbXVsKEV0LGd0KSxtPShtPU1hdGguaW11bChFdCxt''@;'; put 'put ''dCkpK01hdGguaW11bChfdCxndCl8MCxnPU1hdGguaW11bChfdCxtdCksYz1jK01hdGguaW11bCh5dCxTdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LE90KXwwKStNYXRoLmltdWwod3QsU3QpfDAsZz1nK01hdGguaW11bCh3dCxPdCl8MCxjPWMrTWF0aC5pbXVsKGZ0LFJ0KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoZnQsTnQpfDApK01hdGguaW11bChwdCxSdCl8MCxnPWcrTWF0aC5pbXVsKHB0LE50KXwwLGM9YytNYXRoLmltdWwoaXQsTHQpfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKG90LEx0KXwwLGc9ZytNYXRoLmltdWwob3QsenQpfDAsYz1jK01hdGguaW11''@;'; put 'put ''bChHLEJ0KXwwLG09KG09bStNYXRoLmltdWwoRyxQdCl8MCkrTWF0aC5pbXVsKGV0LEJ0KXwwLGc9ZytNYXRoLmltdWwoZXQsUHQpfDAsYz1jK01hdGguaW11bCh0dCxGdCl8MCxtPShtPW0rTWF0aC5pbXVsKHR0LEl0KXwwKStNYXRoLmltdWwoVyxGdCl8MCxnPWcrTWF0aC5pbXVsKFcsSXQp''@;'; put 'put ''fDAsYz1jK01hdGguaW11bChYLFV0KXwwLG09KG09bStNYXRoLmltdWwoWCxKKXwwKStNYXRoLmltdWwoSyxVdCl8MCxnPWcrTWF0aC5pbXVsKEssSil8MCxjPWMrTWF0aC5pbXVsKEYsbHQpfDAsbT0obT1tK01hdGguaW11bChGLGR0KXwwKStNYXRoLmltdWwocSxsdCl8MCxnPWcrTWF0aC5p''@;'; put 'put ''bXVsKHEsZHQpfDAsYz1jK01hdGguaW11bChILHZ0KXwwLG09KG09bStNYXRoLmltdWwoSCxrdCl8MCkrTWF0aC5pbXVsKFQsdnQpfDAsZz1nK01hdGguaW11bChULGt0KXwwO3ZhciBaPShPKyhjPWMrTWF0aC5pbXVsKFUsanQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVLHh0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoVixqdCl8MCkpPDwxMyl8MDtPPSgoZz1nK01hdGguaW11bChWLHh0KXwwKSsobT4+PjEzKXwwKSsoWj4+PjI2KXwwLFomPTY3MTA4ODYzLGM9TWF0aC5pbXVsKEV0LFN0KSxtPShtPU1hdGguaW11bChFdCxPdCkpK01hdGguaW11bChfdCxTdCl8MCxnPU1hdGguaW11''@;'; put 'put ''bChfdCxPdCksYz1jK01hdGguaW11bCh5dCxSdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LE50KXwwKStNYXRoLmltdWwod3QsUnQpfDAsZz1nK01hdGguaW11bCh3dCxOdCl8MCxjPWMrTWF0aC5pbXVsKGZ0LEx0KXwwLG09KG09bStNYXRoLmltdWwoZnQsenQpfDApK01hdGguaW11bChwdCxM''@;'; put 'put ''dCl8MCxnPWcrTWF0aC5pbXVsKHB0LHp0KXwwLGM9YytNYXRoLmltdWwoaXQsQnQpfDAsbT0obT1tK01hdGguaW11bChpdCxQdCl8MCkrTWF0aC5pbXVsKG90LEJ0KXwwLGc9ZytNYXRoLmltdWwob3QsUHQpfDAsYz1jK01hdGguaW11bChHLEZ0KXwwLG09KG09bStNYXRoLmltdWwoRyxJdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKGV0LEZ0KXwwLGc9ZytNYXRoLmltdWwoZXQsSXQpfDAsYz1jK01hdGguaW11bCh0dCxVdCl8MCxtPShtPW0rTWF0aC5pbXVsKHR0LEopfDApK01hdGguaW11bChXLFV0KXwwLGc9ZytNYXRoLmltdWwoVyxKKXwwLGM9YytNYXRoLmltdWwoWCxsdCl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKFgsZHQpfDApK01hdGguaW11bChLLGx0KXwwLGc9ZytNYXRoLmltdWwoSyxkdCl8MCxjPWMrTWF0aC5pbXVsKEYsdnQpfDAsbT0obT1tK01hdGguaW11bChGLGt0KXwwKStNYXRoLmltdWwocSx2dCl8MCxnPWcrTWF0aC5pbXVsKHEsa3QpfDA7dmFyIHN0PShPKyhjPWMrTWF0aC5p''@;'; put 'put ''bXVsKEgsanQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChILHh0KXwwKStNYXRoLmltdWwoVCxqdCl8MCkpPDwxMyl8MDtPPSgoZz1nK01hdGguaW11bChULHh0KXwwKSsobT4+PjEzKXwwKSsoc3Q+Pj4yNil8MCxzdCY9NjcxMDg4NjMsYz1NYXRoLmltdWwoRXQsUnQpLG09KG09''@;'; put 'put ''TWF0aC5pbXVsKEV0LE50KSkrTWF0aC5pbXVsKF90LFJ0KXwwLGc9TWF0aC5pbXVsKF90LE50KSxjPWMrTWF0aC5pbXVsKHl0LEx0KXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bCh3dCxMdCl8MCxnPWcrTWF0aC5pbXVsKHd0LHp0KXwwLGM9YytNYXRoLmltdWwoZnQs''@;'; put 'put ''QnQpfDAsbT0obT1tK01hdGguaW11bChmdCxQdCl8MCkrTWF0aC5pbXVsKHB0LEJ0KXwwLGc9ZytNYXRoLmltdWwocHQsUHQpfDAsYz1jK01hdGguaW11bChpdCxGdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LEl0KXwwKStNYXRoLmltdWwob3QsRnQpfDAsZz1nK01hdGguaW11bChvdCxJdCl8''@;'; put 'put ''MCxjPWMrTWF0aC5pbXVsKEcsVXQpfDAsbT0obT1tK01hdGguaW11bChHLEopfDApK01hdGguaW11bChldCxVdCl8MCxnPWcrTWF0aC5pbXVsKGV0LEopfDAsYz1jK01hdGguaW11bCh0dCxsdCl8MCxtPShtPW0rTWF0aC5pbXVsKHR0LGR0KXwwKStNYXRoLmltdWwoVyxsdCl8MCxnPWcrTWF0''@;'; put 'put ''aC5pbXVsKFcsZHQpfDAsYz1jK01hdGguaW11bChYLHZ0KXwwLG09KG09bStNYXRoLmltdWwoWCxrdCl8MCkrTWF0aC5pbXVsKEssdnQpfDAsZz1nK01hdGguaW11bChLLGt0KXwwO3ZhciBjdD0oTysoYz1jK01hdGguaW11bChGLGp0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''Rix4dCl8MCkrTWF0aC5pbXVsKHEsanQpfDApKTw8MTMpfDA7Tz0oKGc9ZytNYXRoLmltdWwocSx4dCl8MCkrKG0+Pj4xMyl8MCkrKGN0Pj4+MjYpfDAsY3QmPTY3MTA4ODYzLGM9TWF0aC5pbXVsKEV0LEx0KSxtPShtPU1hdGguaW11bChFdCx6dCkpK01hdGguaW11bChfdCxMdCl8MCxnPU1h''@;'; put 'put ''dGguaW11bChfdCx6dCksYz1jK01hdGguaW11bCh5dCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFB0KXwwKStNYXRoLmltdWwod3QsQnQpfDAsZz1nK01hdGguaW11bCh3dCxQdCl8MCxjPWMrTWF0aC5pbXVsKGZ0LEZ0KXwwLG09KG09bStNYXRoLmltdWwoZnQsSXQpfDApK01hdGguaW11''@;'; put 'put ''bChwdCxGdCl8MCxnPWcrTWF0aC5pbXVsKHB0LEl0KXwwLGM9YytNYXRoLmltdWwoaXQsVXQpfDAsbT0obT1tK01hdGguaW11bChpdCxKKXwwKStNYXRoLmltdWwob3QsVXQpfDAsZz1nK01hdGguaW11bChvdCxKKXwwLGM9YytNYXRoLmltdWwoRyxsdCl8MCxtPShtPW0rTWF0aC5pbXVsKEcs''@;'; put 'put ''ZHQpfDApK01hdGguaW11bChldCxsdCl8MCxnPWcrTWF0aC5pbXVsKGV0LGR0KXwwLGM9YytNYXRoLmltdWwodHQsdnQpfDAsbT0obT1tK01hdGguaW11bCh0dCxrdCl8MCkrTWF0aC5pbXVsKFcsdnQpfDAsZz1nK01hdGguaW11bChXLGt0KXwwO3ZhciB1dD0oTysoYz1jK01hdGguaW11bChY''@;'; put 'put ''LGp0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoWCx4dCl8MCkrTWF0aC5pbXVsKEssanQpfDApKTw8MTMpfDA7Tz0oKGc9ZytNYXRoLmltdWwoSyx4dCl8MCkrKG0+Pj4xMyl8MCkrKHV0Pj4+MjYpfDAsdXQmPTY3MTA4ODYzLGM9TWF0aC5pbXVsKEV0LEJ0KSxtPShtPU1hdGgu''@;'; put 'put ''aW11bChFdCxQdCkpK01hdGguaW11bChfdCxCdCl8MCxnPU1hdGguaW11bChfdCxQdCksYz1jK01hdGguaW11bCh5dCxGdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEl0KXwwKStNYXRoLmltdWwod3QsRnQpfDAsZz1nK01hdGguaW11bCh3dCxJdCl8MCxjPWMrTWF0aC5pbXVsKGZ0LFV0KXww''@;'; put 'put ''LG09KG09bStNYXRoLmltdWwoZnQsSil8MCkrTWF0aC5pbXVsKHB0LFV0KXwwLGc9ZytNYXRoLmltdWwocHQsSil8MCxjPWMrTWF0aC5pbXVsKGl0LGx0KXwwLG09KG09bStNYXRoLmltdWwoaXQsZHQpfDApK01hdGguaW11bChvdCxsdCl8MCxnPWcrTWF0aC5pbXVsKG90LGR0KXwwLGM9YytN''@;'; put 'put ''YXRoLmltdWwoRyx2dCl8MCxtPShtPW0rTWF0aC5pbXVsKEcsa3QpfDApK01hdGguaW11bChldCx2dCl8MCxnPWcrTWF0aC5pbXVsKGV0LGt0KXwwO3ZhciBidD0oTysoYz1jK01hdGguaW11bCh0dCxqdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHR0LHh0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoVyxqdCl8MCkpPDwxMyl8MDtPPSgoZz1nK01hdGguaW11bChXLHh0KXwwKSsobT4+PjEzKXwwKSsoYnQ+Pj4yNil8MCxidCY9NjcxMDg4NjMsYz1NYXRoLmltdWwoRXQsRnQpLG09KG09TWF0aC5pbXVsKEV0LEl0KSkrTWF0aC5pbXVsKF90LEZ0KXwwLGc9TWF0aC5pbXVsKF90LEl0KSxj''@;'; put 'put ''PWMrTWF0aC5pbXVsKHl0LFV0KXwwLG09KG09bStNYXRoLmltdWwoeXQsSil8MCkrTWF0aC5pbXVsKHd0LFV0KXwwLGc9ZytNYXRoLmltdWwod3QsSil8MCxjPWMrTWF0aC5pbXVsKGZ0LGx0KXwwLG09KG09bStNYXRoLmltdWwoZnQsZHQpfDApK01hdGguaW11bChwdCxsdCl8MCxnPWcrTWF0''@;'; put 'put ''aC5pbXVsKHB0LGR0KXwwLGM9YytNYXRoLmltdWwoaXQsdnQpfDAsbT0obT1tK01hdGguaW11bChpdCxrdCl8MCkrTWF0aC5pbXVsKG90LHZ0KXwwLGc9ZytNYXRoLmltdWwob3Qsa3QpfDA7dmFyIEN0PShPKyhjPWMrTWF0aC5pbXVsKEcsanQpfDApfDApKygoODE5MSYobT0obT1tK01hdGgu''@;'; put 'put ''aW11bChHLHh0KXwwKStNYXRoLmltdWwoZXQsanQpfDApKTw8MTMpfDA7Tz0oKGc9ZytNYXRoLmltdWwoZXQseHQpfDApKyhtPj4+MTMpfDApKyhDdD4+PjI2KXwwLEN0Jj02NzEwODg2MyxjPU1hdGguaW11bChFdCxVdCksbT0obT1NYXRoLmltdWwoRXQsSikpK01hdGguaW11bChfdCxVdCl8''@;'; put 'put ''MCxnPU1hdGguaW11bChfdCxKKSxjPWMrTWF0aC5pbXVsKHl0LGx0KXwwLG09KG09bStNYXRoLmltdWwoeXQsZHQpfDApK01hdGguaW11bCh3dCxsdCl8MCxnPWcrTWF0aC5pbXVsKHd0LGR0KXwwLGM9YytNYXRoLmltdWwoZnQsdnQpfDAsbT0obT1tK01hdGguaW11bChmdCxrdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHB0LHZ0KXwwLGc9ZytNYXRoLmltdWwocHQsa3QpfDA7dmFyIE10PShPKyhjPWMrTWF0aC5pbXVsKGl0LGp0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bChvdCxqdCl8MCkpPDwxMyl8MDtPPSgoZz1nK01hdGguaW11bChvdCx4dCl8''@;'; put 'put ''MCkrKG0+Pj4xMyl8MCkrKE10Pj4+MjYpfDAsTXQmPTY3MTA4ODYzLGM9TWF0aC5pbXVsKEV0LGx0KSxtPShtPU1hdGguaW11bChFdCxkdCkpK01hdGguaW11bChfdCxsdCl8MCxnPU1hdGguaW11bChfdCxkdCksYz1jK01hdGguaW11bCh5dCx2dCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGt0''@;'; put 'put ''KXwwKStNYXRoLmltdWwod3QsdnQpfDAsZz1nK01hdGguaW11bCh3dCxrdCl8MDt2YXIgS3Q9KE8rKGM9YytNYXRoLmltdWwoZnQsanQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChmdCx4dCl8MCkrTWF0aC5pbXVsKHB0LGp0KXwwKSk8PDEzKXwwO089KChnPWcrTWF0aC5pbXVs''@;'; put 'put ''KHB0LHh0KXwwKSsobT4+PjEzKXwwKSsoS3Q+Pj4yNil8MCxLdCY9NjcxMDg4NjMsYz1NYXRoLmltdWwoRXQsdnQpLG09KG09TWF0aC5pbXVsKEV0LGt0KSkrTWF0aC5pbXVsKF90LHZ0KXwwLGc9TWF0aC5pbXVsKF90LGt0KTt2YXIgJHQ9KE8rKGM9YytNYXRoLmltdWwoeXQsanQpfDApfDAp''@;'; put 'put ''KygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKHd0LGp0KXwwKSk8PDEzKXwwO089KChnPWcrTWF0aC5pbXVsKHd0LHh0KXwwKSsobT4+PjEzKXwwKSsoJHQ+Pj4yNil8MCwkdCY9NjcxMDg4NjM7dmFyIER0PShPKyhjPU1hdGguaW11bChFdCxqdCkpfDApKygo''@;'; put 'put ''ODE5MSYobT0obT1NYXRoLmltdWwoRXQseHQpKStNYXRoLmltdWwoX3QsanQpfDApKTw8MTMpfDA7cmV0dXJuIE89KChnPU1hdGguaW11bChfdCx4dCkpKyhtPj4+MTMpfDApKyhEdD4+PjI2KXwwLER0Jj02NzEwODg2MyxrWzBdPVF0LGtbMV09V3Qsa1syXT1YdCxrWzNdPXJlLGtbNF09aWUs''@;'; put 'put ''a1s1XT11ZSxrWzZdPWRlLGtbN109bGUsa1s4XT1mZSxrWzldPVosa1sxMF09c3Qsa1sxMV09Y3Qsa1sxMl09dXQsa1sxM109YnQsa1sxNF09Q3Qsa1sxNV09TXQsa1sxNl09S3Qsa1sxN109JHQsa1sxOF09RHQsMCE9PU8mJihrWzE5XT1PLGoubGVuZ3RoKyspLGp9O2Z1bmN0aW9uIHYoeCxN''@;'; put 'put ''LGope3JldHVybihuZXcgXykubXVscCh4LE0sail9ZnVuY3Rpb24gXyh4LE0pe3RoaXMueD14LHRoaXMueT1NfU1hdGguaW11bHx8KGQ9cCksdC5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oeCxNKXt2YXIgaj10aGlzLmxlbmd0aCt4Lmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYm''@;'; put 'put ''MTA9PT14Lmxlbmd0aD9kKHRoaXMseCxNKTpqPDYzP3AodGhpcyx4LE0pOmo8MTAyND9mdW5jdGlvbihjLG0sZyl7Zy5uZWdhdGl2ZT1tLm5lZ2F0aXZlXmMubmVnYXRpdmUsZy5sZW5ndGg9Yy5sZW5ndGgrbS5sZW5ndGg7Zm9yKHZhciB5PTAsdz0wLGs9MDtrPGcubGVuZ3RoLTE7aysrKXt2''@;'; put 'put ''YXIgTz13O3c9MDtmb3IodmFyIHo9NjcxMDg4NjMmeSxVPU1hdGgubWluKGssbS5sZW5ndGgtMSksVj1NYXRoLm1heCgwLGstYy5sZW5ndGgrMSk7Vjw9VTtWKyspe3ZhciBIPSgwfGMud29yZHNbay1WXSkqKDB8bS53b3Jkc1tWXSksVD02NzEwODg2MyZIO3o9NjcxMDg4NjMmKFQ9VCt6fDAp''@;'; put 'put ''LHcrPShPPShPPU8rKEgvNjcxMDg4NjR8MCl8MCkrKFQ+Pj4yNil8MCk+Pj4yNixPJj02NzEwODg2M31nLndvcmRzW2tdPXoseT1PLE89d31yZXR1cm4gMCE9PXk/Zy53b3Jkc1trXT15OmcubGVuZ3RoLS0sZy5zdHJpcCgpfSh0aGlzLHgsTSk6dih0aGlzLHgsTSl9LF8ucHJvdG90eXBlLm1h''@;'; put 'put ''a2VSQlQ9ZnVuY3Rpb24oeCl7Zm9yKHZhciBNPW5ldyBBcnJheSh4KSxqPXQucHJvdG90eXBlLl9jb3VudEJpdHMoeCktMSxjPTA7Yzx4O2MrKylNW2NdPXRoaXMucmV2QmluKGMsaix4KTtyZXR1cm4gTX0sXy5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHgsTSxqKXtpZigwPT09eHx8eD09''@;'; put 'put ''PWotMSlyZXR1cm4geDtmb3IodmFyIGM9MCxtPTA7bTxNO20rKyljfD0oMSZ4KTw8TS1tLTEseD4+PTE7cmV0dXJuIGN9LF8ucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oeCxNLGosYyxtLGcpe2Zvcih2YXIgeT0wO3k8Zzt5KyspY1t5XT1NW3hbeV1dLG1beV09alt4W3ldXX0sXy5wcm90''@;'; put 'put ''b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHgsTSxqLGMsbSxnKXt0aGlzLnBlcm11dGUoZyx4LE0saixjLG0pO2Zvcih2YXIgeT0xO3k8bTt5PDw9MSlmb3IodmFyIHc9eTw8MSxrPU1hdGguY29zKDIqTWF0aC5QSS93KSxPPU1hdGguc2luKDIqTWF0aC5QSS93KSx6PTA7ejxtO3orPXcpZm9y''@;'; put 'put ''KHZhciBVPWssVj1PLFI9MDtSPHk7UisrKXt2YXIgSD1qW3orUl0sVD1jW3orUl0sQz1qW3orUit5XSxGPWNbeitSK3ldLHE9VSpDLVYqRjtGPVUqRitWKkMsalt6K1JdPUgrKEM9cSksY1t6K1JdPVQrRixqW3orUit5XT1ILUMsY1t6K1IreV09VC1GLFIhPT13JiYocT1rKlUtTypWLFY9aypW''@;'; put 'put ''K08qVSxVPXEpfX0sXy5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oeCxNKXt2YXIgaj0xfE1hdGgubWF4KE0seCksYz0xJmosbT0wO2ZvcihqPWovMnwwO2o7aj4+Pj0xKW0rKztyZXR1cm4gMTw8bSsxK2N9LF8ucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbih4LE0sail7aWYo''@;'; put 'put ''IShqPD0xKSlmb3IodmFyIGM9MDtjPGovMjtjKyspe3ZhciBtPXhbY107eFtjXT14W2otYy0xXSx4W2otYy0xXT1tLG09TVtjXSxNW2NdPS1NW2otYy0xXSxNW2otYy0xXT0tbX19LF8ucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbih4LE0pe2Zvcih2YXIgaj0wLGM9MDtjPE0vMjtj''@;'; put 'put ''Kyspe3ZhciBtPTgxOTIqTWF0aC5yb3VuZCh4WzIqYysxXS9NKStNYXRoLnJvdW5kKHhbMipjXS9NKStqO3hbY109NjcxMDg4NjMmbSxqPW08NjcxMDg4NjQ/MDptLzY3MTA4ODY0fDB9cmV0dXJuIHh9LF8ucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oeCxNLGosYyl7Zm9yKHZhciBt''@;'; put 'put ''PTAsZz0wO2c8TTtnKyspalsyKmddPTgxOTEmKG0rPTB8eFtnXSksalsyKmcrMV09ODE5MSYobT4+Pj0xMyksbT4+Pj0xMztmb3IoZz0yKk07ZzxjOysrZylqW2ddPTA7bygwPT09bSksbyghKC04MTkyJm0pKX0sXy5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbih4KXtmb3IodmFyIE09bmV3IEFy''@;'; put 'put ''cmF5KHgpLGo9MDtqPHg7aisrKU1bal09MDtyZXR1cm4gTX0sXy5wcm90b3R5cGUubXVscD1mdW5jdGlvbih4LE0sail7dmFyIGM9Mip0aGlzLmd1ZXNzTGVuMTNiKHgubGVuZ3RoLE0ubGVuZ3RoKSxtPXRoaXMubWFrZVJCVChjKSxnPXRoaXMuc3R1YihjKSx5PW5ldyBBcnJheShjKSx3PW5l''@;'; put 'put ''dyBBcnJheShjKSxrPW5ldyBBcnJheShjKSxPPW5ldyBBcnJheShjKSx6PW5ldyBBcnJheShjKSxVPW5ldyBBcnJheShjKSxWPWoud29yZHM7Vi5sZW5ndGg9Yyx0aGlzLmNvbnZlcnQxM2IoeC53b3Jkcyx4Lmxlbmd0aCx5LGMpLHRoaXMuY29udmVydDEzYihNLndvcmRzLE0ubGVuZ3RoLE8s''@;'; put 'put ''YyksdGhpcy50cmFuc2Zvcm0oeSxnLHcsayxjLG0pLHRoaXMudHJhbnNmb3JtKE8sZyx6LFUsYyxtKTtmb3IodmFyIFI9MDtSPGM7UisrKXt2YXIgSD13W1JdKnpbUl0ta1tSXSpVW1JdO2tbUl09d1tSXSpVW1JdK2tbUl0qeltSXSx3W1JdPUh9cmV0dXJuIHRoaXMuY29uanVnYXRlKHcsayxj''@;'; put 'put ''KSx0aGlzLnRyYW5zZm9ybSh3LGssVixnLGMsbSksdGhpcy5jb25qdWdhdGUoVixnLGMpLHRoaXMubm9ybWFsaXplMTNiKFYsYyksai5uZWdhdGl2ZT14Lm5lZ2F0aXZlXk0ubmVnYXRpdmUsai5sZW5ndGg9eC5sZW5ndGgrTS5sZW5ndGgsai5zdHJpcCgpfSx0LnByb3RvdHlwZS5tdWw9ZnVu''@;'; put 'put ''Y3Rpb24oeCl7dmFyIE09bmV3IHQobnVsbCk7cmV0dXJuIE0ud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3gubGVuZ3RoKSx0aGlzLm11bFRvKHgsTSl9LHQucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oeCl7dmFyIE09bmV3IHQobnVsbCk7cmV0dXJuIE0ud29yZHM9bmV3IEFycmF5KHRo''@;'; put 'put ''aXMubGVuZ3RoK3gubGVuZ3RoKSx2KHRoaXMseCxNKX0sdC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih4KXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHgsdGhpcyl9LHQucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHgpe28oIm51bWJlciI9PXR5cGVvZiB4KSxvKHg8NjcxMDg4NjQpO2Zv''@;'; put 'put ''cih2YXIgTT0wLGo9MDtqPHRoaXMubGVuZ3RoO2orKyl7dmFyIGM9KDB8dGhpcy53b3Jkc1tqXSkqeCxtPSg2NzEwODg2MyZjKSsoNjcxMDg4NjMmTSk7TT4+PTI2LE0rPWMvNjcxMDg4NjR8MCxNKz1tPj4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZtfXJldHVybiAwIT09TSYmKHRoaXMu''@;'; put 'put ''d29yZHNbal09TSx0aGlzLmxlbmd0aCsrKSx0aGlzfSx0LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oeCl9LHQucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdC5wcm90b3R5cGUuaXNxcj1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHgpe3ZhciBNPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZy5iaXRMZW5ndGgoKSksdz0wO3c8eS5sZW5ndGg7dysrKXt2YXIgTz13JTI2O3lbd109KGcud29yZHNbdy8y''@;'; put 'put ''NnwwXSYxPDxPKT4+Pk99cmV0dXJuIHl9KHgpO2lmKDA9PT1NLmxlbmd0aClyZXR1cm4gbmV3IHQoMSk7Zm9yKHZhciBqPXRoaXMsYz0wO2M8TS5sZW5ndGgmJjA9PT1NW2NdO2MrKyxqPWouc3FyKCkpO2lmKCsrYzxNLmxlbmd0aClmb3IodmFyIG09ai5zcXIoKTtjPE0ubGVuZ3RoO2MrKyxt''@;'; put 'put ''PW0uc3FyKCkpMCE9PU1bY10mJihqPWoubXVsKG0pKTtyZXR1cm4gan0sdC5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHgpe28oIm51bWJlciI9PXR5cGVvZiB4JiZ4Pj0wKTt2YXIgTSxqPXglMjYsYz0oeC1qKS8yNixtPTY3MTA4ODYzPj4+MjYtajw8MjYtajtpZigwIT09ail7dmFyIGc9''@;'; put 'put ''MDtmb3IoTT0wO008dGhpcy5sZW5ndGg7TSsrKXt2YXIgeT10aGlzLndvcmRzW01dJm07dGhpcy53b3Jkc1tNXT0oMHx0aGlzLndvcmRzW01dKS15PDxqfGcsZz15Pj4+MjYtan1nJiYodGhpcy53b3Jkc1tNXT1nLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1jKXtmb3IoTT10aGlzLmxlbmd0aC0x''@;'; put 'put ''O00+PTA7TS0tKXRoaXMud29yZHNbTStjXT10aGlzLndvcmRzW01dO2ZvcihNPTA7TTxjO00rKyl0aGlzLndvcmRzW01dPTA7dGhpcy5sZW5ndGgrPWN9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdC5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oeCl7cmV0dXJuIG8oMD09PXRoaXMubmVnYXRpdmUp''@;'; put 'put ''LHRoaXMuaXVzaGxuKHgpfSx0LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oeCxNLGope3ZhciBjO28oIm51bWJlciI9PXR5cGVvZiB4JiZ4Pj0wKSxjPU0/KE0tTSUyNikvMjY6MDt2YXIgbT14JTI2LGc9TWF0aC5taW4oKHgtbSkvMjYsdGhpcy5sZW5ndGgpLHk9NjcxMDg4NjNeNjcxMDg4''@;'; put 'put ''NjM+Pj5tPDxtLHc9ajtpZihjLT1nLGM9TWF0aC5tYXgoMCxjKSx3KXtmb3IodmFyIGs9MDtrPGc7aysrKXcud29yZHNba109dGhpcy53b3Jkc1trXTt3Lmxlbmd0aD1nfWlmKDAhPT1nKWlmKHRoaXMubGVuZ3RoPmcpZm9yKHRoaXMubGVuZ3RoLT1nLGs9MDtrPHRoaXMubGVuZ3RoO2srKyl0''@;'; put 'put ''aGlzLndvcmRzW2tdPXRoaXMud29yZHNbaytnXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBPPTA7Zm9yKGs9dGhpcy5sZW5ndGgtMTtrPj0wJiYoMCE9PU98fGs+PWMpO2stLSl7dmFyIHo9MHx0aGlzLndvcmRzW2tdO3RoaXMud29yZHNba109Tzw8MjYtbXx6Pj4+''@;'; put 'put ''bSxPPXomeX1yZXR1cm4gdyYmMCE9PU8mJih3LndvcmRzW3cubGVuZ3RoKytdPU8pLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHQucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHgsTSxqKXtyZXR1cm4gbygwPT09dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZSksdGhpcy5pdXNocm4oeCxNLGopfSx0LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oeCl9LHQucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHgpfSx0LnByb3RvdHlwZS5zaHJu''@;'; put 'put ''PWZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oeCl9LHQucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHgpfSx0LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbih4KXtvKCJudW1iZXIiPT10eXBlb2YgeCYmeD49MCk7dmFy''@;'; put 'put ''IE09eCUyNixqPSh4LU0pLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PWp8fCEodGhpcy53b3Jkc1tqXSYxPDxNKSl9LHQucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbih4KXtvKCJudW1iZXIiPT10eXBlb2YgeCYmeD49MCk7dmFyIE09eCUyNixqPSh4LU0pLzI2O3JldHVybiBvKDA9PT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9aj90aGlzOigwIT09TSYmaisrLHRoaXMubGVuZ3RoPU1hdGgubWluKGosdGhpcy5sZW5ndGgpLDAhPT1NJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNe''@;'; put 'put ''NjcxMDg4NjM+Pj5NPDxNKSx0aGlzLnN0cmlwKCkpfSx0LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbih4KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbih4KX0sdC5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oeCl7cmV0dXJuIG8oIm51bWJlciI9PXR5cGVvZiB4KSxvKHg8NjcxMDg4NjQp''@;'; put 'put ''LHg8MD90aGlzLmlzdWJuKC14KTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHg/KHRoaXMud29yZHNbMF09eC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHgpLHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbih4KX0sdC5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHgpe3RoaXMud29yZHNbMF0rPXg7Zm9yKHZhciBNPTA7TTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tNXT49NjcxMDg4NjQ7TSsrKXRoaXMud29yZHNbTV0tPTY3MTA4ODY0LE09''@;'; put 'put ''PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbTSsxXT0xOnRoaXMud29yZHNbTSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxNKzEpLHRoaXN9LHQucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHgpe2lmKG8oIm51bWJlciI9PXR5cGVvZiB4KSxvKHg8Njcx''@;'; put 'put ''MDg4NjQpLHg8MClyZXR1cm4gdGhpcy5pYWRkbigteCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHgpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXgsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDAp''@;'; put 'put ''dGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIE09MDtNPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW01dPDA7TSsrKXRoaXMud29yZHNbTV0rPTY3MTA4ODY0LHRoaXMud29yZHNbTSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx0LnBy''@;'; put 'put ''b3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oeCl9LHQucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3Vibih4KX0sdC5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAs''@;'; put 'put ''dGhpc30sdC5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHQucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbih4LE0sail7dmFyIGMsbTt0aGlzLl9leHBhbmQoeC5sZW5ndGgraik7dmFyIHk9MDtmb3IoYz0wO2M8eC5sZW5ndGg7Yysr''@;'; put 'put ''KXttPSgwfHRoaXMud29yZHNbYytqXSkreTt2YXIgdz0oMHx4LndvcmRzW2NdKSpNO3k9KChtLT02NzEwODg2MyZ3KT4+MjYpLSh3LzY3MTA4ODY0fDApLHRoaXMud29yZHNbYytqXT02NzEwODg2MyZtfWZvcig7Yzx0aGlzLmxlbmd0aC1qO2MrKyl5PShtPSgwfHRoaXMud29yZHNbYytqXSkr''@;'; put 'put ''eSk+PjI2LHRoaXMud29yZHNbYytqXT02NzEwODg2MyZtO2lmKDA9PT15KXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG8oLTE9PT15KSx5PTAsYz0wO2M8dGhpcy5sZW5ndGg7YysrKXk9KG09LSgwfHRoaXMud29yZHNbY10pK3kpPj4yNix0aGlzLndvcmRzW2NdPTY3MTA4ODYzJm07cmV0dXJu''@;'; put 'put ''IHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHQucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHgsTSl7dmFyIGosYz10aGlzLmNsb25lKCksbT14LGc9MHxtLndvcmRzW20ubGVuZ3RoLTFdOzAhPShqPTI2LXRoaXMuX2NvdW50Qml0cyhnKSkmJihtPW0udXNobG4oaiksYy5pdXNo''@;'; put 'put ''bG4oaiksZz0wfG0ud29yZHNbbS5sZW5ndGgtMV0pO3ZhciB5LHc9Yy5sZW5ndGgtbS5sZW5ndGg7aWYoIm1vZCIhPT1NKXsoeT1uZXcgdChudWxsKSkubGVuZ3RoPXcrMSx5LndvcmRzPW5ldyBBcnJheSh5Lmxlbmd0aCk7Zm9yKHZhciBrPTA7azx5Lmxlbmd0aDtrKyspeS53b3Jkc1trXT0w''@;'; put 'put ''fXZhciBPPWMuY2xvbmUoKS5faXNobG5zdWJtdWwobSwxLHcpOzA9PT1PLm5lZ2F0aXZlJiYoYz1PLHkmJih5LndvcmRzW3ddPTEpKTtmb3IodmFyIHo9dy0xO3o+PTA7ei0tKXt2YXIgVT02NzEwODg2NCooMHxjLndvcmRzW20ubGVuZ3RoK3pdKSsoMHxjLndvcmRzW20ubGVuZ3RoK3otMV0p''@;'; put 'put ''O2ZvcihVPU1hdGgubWluKFUvZ3wwLDY3MTA4ODYzKSxjLl9pc2hsbnN1Ym11bChtLFUseik7MCE9PWMubmVnYXRpdmU7KVUtLSxjLm5lZ2F0aXZlPTAsYy5faXNobG5zdWJtdWwobSwxLHopLGMuaXNaZXJvKCl8fChjLm5lZ2F0aXZlXj0xKTt5JiYoeS53b3Jkc1t6XT1VKX1yZXR1cm4geSYm''@;'; put 'put ''eS5zdHJpcCgpLGMuc3RyaXAoKSwiZGl2IiE9PU0mJjAhPT1qJiZjLml1c2hybihqKSx7ZGl2Onl8fG51bGwsbW9kOmN9fSx0LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oeCxNLGope3JldHVybiBvKCF4LmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHQoMCksbW9kOm5ldyB0''@;'; put 'put ''KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXgubmVnYXRpdmU/KGc9dGhpcy5uZWcoKS5kaXZtb2QoeCxNKSwibW9kIiE9PU0mJihjPWcuZGl2Lm5lZygpKSwiZGl2IiE9PU0mJihtPWcubW9kLm5lZygpLGomJjAhPT1tLm5lZ2F0aXZlJiZtLmlhZGQoeCkpLHtkaXY6Yyxtb2Q6bX0pOjA9''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlJiYwIT09eC5uZWdhdGl2ZT8oZz10aGlzLmRpdm1vZCh4Lm5lZygpLE0pLCJtb2QiIT09TSYmKGM9Zy5kaXYubmVnKCkpLHtkaXY6Yyxtb2Q6Zy5tb2R9KTowIT0odGhpcy5uZWdhdGl2ZSZ4Lm5lZ2F0aXZlKT8oZz10aGlzLm5lZygpLmRpdm1vZCh4Lm5lZygpLE0p''@;'; put 'put ''LCJkaXYiIT09TSYmKG09Zy5tb2QubmVnKCksaiYmMCE9PW0ubmVnYXRpdmUmJm0uaXN1Yih4KSkse2RpdjpnLmRpdixtb2Q6bX0pOngubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcCh4KTwwP3tkaXY6bmV3IHQoMCksbW9kOnRoaXN9OjE9PT14Lmxlbmd0aD8iZGl2Ij09PU0/e2Rpdjp0''@;'; put 'put ''aGlzLmRpdm4oeC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09TT97ZGl2Om51bGwsbW9kOm5ldyB0KHRoaXMubW9kbih4LndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHgud29yZHNbMF0pLG1vZDpuZXcgdCh0aGlzLm1vZG4oeC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHgsTSk7''@;'; put 'put ''dmFyIGMsbSxnfSx0LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuZGl2bW9kKHgsImRpdiIsITEpLmRpdn0sdC5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLmRpdm1vZCh4LCJtb2QiLCExKS5tb2R9LHQucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24o''@;'; put 'put ''eCl7cmV0dXJuIHRoaXMuZGl2bW9kKHgsIm1vZCIsITApLm1vZH0sdC5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oeCl7dmFyIE09dGhpcy5kaXZtb2QoeCk7aWYoTS5tb2QuaXNaZXJvKCkpcmV0dXJuIE0uZGl2O3ZhciBqPTAhPT1NLmRpdi5uZWdhdGl2ZT9NLm1vZC5pc3ViKHgpOk0u''@;'; put 'put ''bW9kLGM9eC51c2hybigxKSxtPXguYW5kbG4oMSksZz1qLmNtcChjKTtyZXR1cm4gZzwwfHwxPT09bSYmMD09PWc/TS5kaXY6MCE9PU0uZGl2Lm5lZ2F0aXZlP00uZGl2LmlzdWJuKDEpOk0uZGl2LmlhZGRuKDEpfSx0LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHgpe28oeDw9NjcxMDg4NjMp''@;'; put 'put ''O2Zvcih2YXIgTT0oMTw8MjYpJXgsaj0wLGM9dGhpcy5sZW5ndGgtMTtjPj0wO2MtLSlqPShNKmorKDB8dGhpcy53b3Jkc1tjXSkpJXg7cmV0dXJuIGp9LHQucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHgpe28oeDw9NjcxMDg4NjMpO2Zvcih2YXIgTT0wLGo9dGhpcy5sZW5ndGgtMTtqPj0w''@;'; put 'put ''O2otLSl7dmFyIGM9KDB8dGhpcy53b3Jkc1tqXSkrNjcxMDg4NjQqTTt0aGlzLndvcmRzW2pdPWMveHwwLE09YyV4fXJldHVybiB0aGlzLnN0cmlwKCl9LHQucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bih4KX0sdC5wcm90b3R5cGUuZWdjZD1m''@;'; put 'put ''dW5jdGlvbih4KXtvKDA9PT14Lm5lZ2F0aXZlKSxvKCF4LmlzWmVybygpKTt2YXIgTT10aGlzLGo9eC5jbG9uZSgpO009MCE9PU0ubmVnYXRpdmU/TS51bW9kKHgpOk0uY2xvbmUoKTtmb3IodmFyIGM9bmV3IHQoMSksbT1uZXcgdCgwKSxnPW5ldyB0KDApLHk9bmV3IHQoMSksdz0wO00uaXNF''@;'; put 'put ''dmVuKCkmJmouaXNFdmVuKCk7KU0uaXVzaHJuKDEpLGouaXVzaHJuKDEpLCsrdztmb3IodmFyIGs9ai5jbG9uZSgpLE89TS5jbG9uZSgpOyFNLmlzWmVybygpOyl7Zm9yKHZhciB6PTAsVT0xOzA9PShNLndvcmRzWzBdJlUpJiZ6PDI2OysreixVPDw9MSk7aWYoej4wKWZvcihNLml1c2hybih6''@;'; put 'put ''KTt6LS0gPjA7KShjLmlzT2RkKCl8fG0uaXNPZGQoKSkmJihjLmlhZGQoayksbS5pc3ViKE8pKSxjLml1c2hybigxKSxtLml1c2hybigxKTtmb3IodmFyIFY9MCxSPTE7MD09KGoud29yZHNbMF0mUikmJlY8MjY7KytWLFI8PD0xKTtpZihWPjApZm9yKGouaXVzaHJuKFYpO1YtLSA+MDspKGcu''@;'; put 'put ''aXNPZGQoKXx8eS5pc09kZCgpKSYmKGcuaWFkZChrKSx5LmlzdWIoTykpLGcuaXVzaHJuKDEpLHkuaXVzaHJuKDEpO00uY21wKGopPj0wPyhNLmlzdWIoaiksYy5pc3ViKGcpLG0uaXN1Yih5KSk6KGouaXN1YihNKSxnLmlzdWIoYykseS5pc3ViKG0pKX1yZXR1cm57YTpnLGI6eSxnY2Q6ai5p''@;'; put 'put ''dXNobG4odyl9fSx0LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oeCl7bygwPT09eC5uZWdhdGl2ZSksbygheC5pc1plcm8oKSk7dmFyIE09dGhpcyxqPXguY2xvbmUoKTtNPTAhPT1NLm5lZ2F0aXZlP00udW1vZCh4KTpNLmNsb25lKCk7Zm9yKHZhciBjLG09bmV3IHQoMSksZz1uZXcgdCgw''@;'; put 'put ''KSx5PWouY2xvbmUoKTtNLmNtcG4oMSk+MCYmai5jbXBuKDEpPjA7KXtmb3IodmFyIHc9MCxrPTE7MD09KE0ud29yZHNbMF0maykmJnc8MjY7Kyt3LGs8PD0xKTtpZih3PjApZm9yKE0uaXVzaHJuKHcpO3ctLSA+MDspbS5pc09kZCgpJiZtLmlhZGQoeSksbS5pdXNocm4oMSk7Zm9yKHZhciBP''@;'; put 'put ''PTAsej0xOzA9PShqLndvcmRzWzBdJnopJiZPPDI2OysrTyx6PDw9MSk7aWYoTz4wKWZvcihqLml1c2hybihPKTtPLS0gPjA7KWcuaXNPZGQoKSYmZy5pYWRkKHkpLGcuaXVzaHJuKDEpO00uY21wKGopPj0wPyhNLmlzdWIoaiksbS5pc3ViKGcpKTooai5pc3ViKE0pLGcuaXN1YihtKSl9cmV0''@;'; put 'put ''dXJuKGM9MD09PU0uY21wbigxKT9tOmcpLmNtcG4oMCk8MCYmYy5pYWRkKHgpLGN9LHQucHJvdG90eXBlLmdjZD1mdW5jdGlvbih4KXtpZih0aGlzLmlzWmVybygpKXJldHVybiB4LmFicygpO2lmKHguaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIE09dGhpcy5jbG9uZSgpLGo9eC5j''@;'; put 'put ''bG9uZSgpO00ubmVnYXRpdmU9MCxqLm5lZ2F0aXZlPTA7Zm9yKHZhciBjPTA7TS5pc0V2ZW4oKSYmai5pc0V2ZW4oKTtjKyspTS5pdXNocm4oMSksai5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO00uaXNFdmVuKCk7KU0uaXVzaHJuKDEpO2Zvcig7ai5pc0V2ZW4oKTspai5pdXNocm4oMSk7dmFy''@;'; put 'put ''IG09TS5jbXAoaik7aWYobTwwKXt2YXIgZz1NO009aixqPWd9ZWxzZSBpZigwPT09bXx8MD09PWouY21wbigxKSlicmVhaztNLmlzdWIoail9cmV0dXJuIGouaXVzaGxuKGMpfSx0LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLmVnY2QoeCkuYS51bW9kKHgpfSx0LnBy''@;'; put 'put ''b3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHQucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdC5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMud29yZHNbMF0meH0sdC5w''@;'; put 'put ''cm90b3R5cGUuYmluY249ZnVuY3Rpb24oeCl7bygibnVtYmVyIj09dHlwZW9mIHgpO3ZhciBNPXglMjYsaj0oeC1NKS8yNixjPTE8PE07aWYodGhpcy5sZW5ndGg8PWopcmV0dXJuIHRoaXMuX2V4cGFuZChqKzEpLHRoaXMud29yZHNbal18PWMsdGhpcztmb3IodmFyIG09YyxnPWo7MCE9PW0m''@;'; put 'put ''Jmc8dGhpcy5sZW5ndGg7ZysrKXt2YXIgeT0wfHRoaXMud29yZHNbZ107bT0oeSs9bSk+Pj4yNix0aGlzLndvcmRzW2ddPXkmPTY3MTA4ODYzfXJldHVybiAwIT09bSYmKHRoaXMud29yZHNbZ109bSx0aGlzLmxlbmd0aCsrKSx0aGlzfSx0LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdC5wcm90b3R5cGUuY21wbj1mdW5jdGlvbih4KXt2YXIgTSxqPXg8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWopcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmopcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgp''@;'; put 'put ''LHRoaXMubGVuZ3RoPjEpTT0xO2Vsc2V7aiYmKHg9LXgpLG8oeDw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIGM9MHx0aGlzLndvcmRzWzBdO009Yz09PXg/MDpjPHg/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtTTpNfSx0LnByb3RvdHlwZS5jbXA9ZnVuY3Rp''@;'; put 'put ''b24oeCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT14Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09eC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgTT10aGlzLnVjbXAoeCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LU06TX0sdC5wcm90b3R5cGUudWNt''@;'; put 'put ''cD1mdW5jdGlvbih4KXtpZih0aGlzLmxlbmd0aD54Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx4Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIE09MCxqPXRoaXMubGVuZ3RoLTE7aj49MDtqLS0pe3ZhciBjPTB8dGhpcy53b3Jkc1tqXSxtPTB8eC53b3Jkc1tqXTtpZihjIT09bSl7''@;'; put 'put ''YzxtP009LTE6Yz5tJiYoTT0xKTticmVha319cmV0dXJuIE19LHQucHJvdG90eXBlLmd0bj1mdW5jdGlvbih4KXtyZXR1cm4gMT09PXRoaXMuY21wbih4KX0sdC5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oeCl7cmV0dXJuIDE9PT10aGlzLmNtcCh4KX0sdC5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlv''@;'; put 'put ''bih4KXtyZXR1cm4gdGhpcy5jbXBuKHgpPj0wfSx0LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuY21wKHgpPj0wfSx0LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oeCl7cmV0dXJuLTE9PT10aGlzLmNtcG4oeCl9LHQucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHgpe3JldHVy''@;'; put 'put ''bi0xPT09dGhpcy5jbXAoeCl9LHQucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuY21wbih4KTw9MH0sdC5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLmNtcCh4KTw9MH0sdC5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHgpe3JldHVybiAwPT09dGhp''@;'; put 'put ''cy5jbXBuKHgpfSx0LnByb3RvdHlwZS5lcT1mdW5jdGlvbih4KXtyZXR1cm4gMD09PXRoaXMuY21wKHgpfSx0LnJlZD1mdW5jdGlvbih4KXtyZXR1cm4gbmV3ICQoeCl9LHQucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHgpe3JldHVybiBvKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBp''@;'; put 'put ''biByZWR1Y3Rpb24gY29udGV4dCIpLG8oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikseC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHgpfSx0LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsImZyb21SZWQg''@;'; put 'put ''d29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdC5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLnJlZD14LHRoaXN9LHQucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHgp''@;'; put 'put ''e3JldHVybiBvKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHgpfSx0LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oeCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi''@;'; put 'put ''KSx0aGlzLnJlZC5hZGQodGhpcyx4KX0sdC5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbih4KXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMseCl9LHQucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbih4''@;'; put 'put ''KXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHgpfSx0LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHgpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy''@;'; put 'put ''cyIpLHRoaXMucmVkLmlzdWIodGhpcyx4KX0sdC5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHgpe3JldHVybiBvKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMseCl9LHQucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbih4''@;'; put 'put ''KXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMseCksdGhpcy5yZWQubXVsKHRoaXMseCl9LHQucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oeCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZE11bCB3''@;'; put 'put ''b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHgpLHRoaXMucmVkLmltdWwodGhpcyx4KX0sdC5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0''@;'; put 'put ''aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHQucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5p''@;'; put 'put ''c3FyKHRoaXMpfSx0LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdC5wcm90b3R5cGUucmVkSW52bT1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHQucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWRO''@;'; put 'put ''ZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx0LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oeCl7cmV0dXJuIG8odGhpcy5yZWQmJiF4LnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5f''@;'; put 'put ''dmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyx4KX07dmFyIEE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBJKHgsTSl7dGhpcy5uYW1lPXgsdGhpcy5wPW5ldyB0KE0sMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5r''@;'; put 'put ''PW5ldyB0KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBMKCl7SS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIp''@;'; put 'put ''fWZ1bmN0aW9uIE4oKXtJLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gUCgpe0kuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBCKCl7SS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uICQoeCl7aWYoInN0cmluZyI9PXR5cGVvZiB4KXt2''@;'; put 'put ''YXIgTT10Ll9wcmltZSh4KTt0aGlzLm09TS5wLHRoaXMucHJpbWU9TX1lbHNlIG8oeC5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT14LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBEKHgpeyQuY2FsbCh0aGlzLHgpLHRoaXMuc2hpZnQ9dGhpcy5tLmJp''@;'; put 'put ''dExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHQoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1p''@;'; put 'put ''bnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9SS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciB4PW5ldyB0KG51bGwpO3JldHVybiB4''@;'; put 'put ''LndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSkseH0sSS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbih4KXt2YXIgTSxqPXg7ZG97dGhpcy5zcGxpdChqLHRoaXMudG1wKSxNPShqPShqPXRoaXMuaW11bEsoaikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGls''@;'; put 'put ''ZShNPnRoaXMubik7dmFyIGM9TTx0aGlzLm4/LTE6ai51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1jPyhqLndvcmRzWzBdPTAsai5sZW5ndGg9MSk6Yz4wP2ouaXN1Yih0aGlzLnApOnZvaWQgMCE9PWouc3RyaXA/ai5zdHJpcCgpOmouX3N0cmlwKCksan0sSS5wcm90b3R5cGUuc3BsaXQ9ZnVu''@;'; put 'put ''Y3Rpb24oeCxNKXt4Lml1c2hybih0aGlzLm4sMCxNKX0sSS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oeCl7cmV0dXJuIHguaW11bCh0aGlzLmspfSxyKEwsSSksTC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oeCxNKXtmb3IodmFyIGo9TWF0aC5taW4oeC5sZW5ndGgsOSksYz0wO2M8ajtj''@;'; put 'put ''KyspTS53b3Jkc1tjXT14LndvcmRzW2NdO2lmKE0ubGVuZ3RoPWoseC5sZW5ndGg8PTkpcmV0dXJuIHgud29yZHNbMF09MCx2b2lkKHgubGVuZ3RoPTEpO3ZhciBtPXgud29yZHNbOV07Zm9yKE0ud29yZHNbTS5sZW5ndGgrK109NDE5NDMwMyZtLGM9MTA7Yzx4Lmxlbmd0aDtjKyspe3ZhciBn''@;'; put 'put ''PTB8eC53b3Jkc1tjXTt4LndvcmRzW2MtMTBdPSg0MTk0MzAzJmcpPDw0fG0+Pj4yMixtPWd9eC53b3Jkc1tjLTEwXT1tPj4+PTIyLHgubGVuZ3RoLT0wPT09bSYmeC5sZW5ndGg+MTA/MTA6OX0sTC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oeCl7eC53b3Jkc1t4Lmxlbmd0aF09MCx4Lndv''@;'; put 'put ''cmRzW3gubGVuZ3RoKzFdPTAseC5sZW5ndGgrPTI7Zm9yKHZhciBNPTAsaj0wO2o8eC5sZW5ndGg7aisrKXt2YXIgYz0wfHgud29yZHNbal07eC53b3Jkc1tqXT02NzEwODg2MyYoTSs9OTc3KmMpLE09NjQqYysoTS82NzEwODg2NHwwKX1yZXR1cm4gMD09PXgud29yZHNbeC5sZW5ndGgtMV0m''@;'; put 'put ''Jih4Lmxlbmd0aC0tLDA9PT14LndvcmRzW3gubGVuZ3RoLTFdJiZ4Lmxlbmd0aC0tKSx4fSxyKE4sSSkscihQLEkpLHIoQixJKSxCLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih4KXtmb3IodmFyIE09MCxqPTA7ajx4Lmxlbmd0aDtqKyspe3ZhciBjPTE5KigwfHgud29yZHNbal0pK00sbT02''@;'; put 'put ''NzEwODg2MyZjO2M+Pj49MjYseC53b3Jkc1tqXT1tLE09Y31yZXR1cm4gMCE9PU0mJih4LndvcmRzW3gubGVuZ3RoKytdPU0pLHh9LHQuX3ByaW1lPWZ1bmN0aW9uKHgpe2lmKEFbeF0pcmV0dXJuIEFbeF07dmFyIE07aWYoImsyNTYiPT09eClNPW5ldyBMO2Vsc2UgaWYoInAyMjQiPT09eClN''@;'; put 'put ''PW5ldyBOO2Vsc2UgaWYoInAxOTIiPT09eClNPW5ldyBQO2Vsc2V7aWYoInAyNTUxOSIhPT14KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3gpO009bmV3IEJ9cmV0dXJuIEFbeF09TSxNfSwkLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbih4KXtvKDA9PT14Lm5lZ2F0aXZl''@;'; put 'put ''LCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG8oeC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sJC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oeCxNKXtvKDA9PSh4Lm5lZ2F0aXZlfE0ubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBv''@;'; put 'put ''c2l0aXZlcyIpLG8oeC5yZWQmJngucmVkPT09TS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sJC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbih4KXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoeCkuX2ZvcmNlUmVkKHRoaXMpOngudW1vZCh0aGlz''@;'; put 'put ''Lm0pLl9mb3JjZVJlZCh0aGlzKX0sJC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHgpe3JldHVybiB4LmlzWmVybygpP3guY2xvbmUoKTp0aGlzLm0uc3ViKHgpLl9mb3JjZVJlZCh0aGlzKX0sJC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHgsTSl7dGhpcy5fdmVyaWZ5Mih4LE0pO3ZhciBqPXgu''@;'; put 'put ''YWRkKE0pO3JldHVybiBqLmNtcCh0aGlzLm0pPj0wJiZqLmlzdWIodGhpcy5tKSxqLl9mb3JjZVJlZCh0aGlzKX0sJC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih4LE0pe3RoaXMuX3ZlcmlmeTIoeCxNKTt2YXIgaj14LmlhZGQoTSk7cmV0dXJuIGouY21wKHRoaXMubSk+PTAmJmouaXN1Yih0''@;'; put 'put ''aGlzLm0pLGp9LCQucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih4LE0pe3RoaXMuX3ZlcmlmeTIoeCxNKTt2YXIgaj14LnN1YihNKTtyZXR1cm4gai5jbXBuKDApPDAmJmouaWFkZCh0aGlzLm0pLGouX2ZvcmNlUmVkKHRoaXMpfSwkLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHgsTSl7dGhpcy5f''@;'; put 'put ''dmVyaWZ5Mih4LE0pO3ZhciBqPXguaXN1YihNKTtyZXR1cm4gai5jbXBuKDApPDAmJmouaWFkZCh0aGlzLm0pLGp9LCQucHJvdG90eXBlLnNobD1mdW5jdGlvbih4LE0pe3JldHVybiB0aGlzLl92ZXJpZnkxKHgpLHRoaXMuaW1vZCh4LnVzaGxuKE0pKX0sJC5wcm90b3R5cGUuaW11bD1mdW5j''@;'; put 'put ''dGlvbih4LE0pe3JldHVybiB0aGlzLl92ZXJpZnkyKHgsTSksdGhpcy5pbW9kKHguaW11bChNKSl9LCQucHJvdG90eXBlLm11bD1mdW5jdGlvbih4LE0pe3JldHVybiB0aGlzLl92ZXJpZnkyKHgsTSksdGhpcy5pbW9kKHgubXVsKE0pKX0sJC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbih4KXty''@;'; put 'put ''ZXR1cm4gdGhpcy5pbXVsKHgseC5jbG9uZSgpKX0sJC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLm11bCh4LHgpfSwkLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHgpe2lmKHguaXNaZXJvKCkpcmV0dXJuIHguY2xvbmUoKTt2YXIgTT10aGlzLm0uYW5kbG4oMyk7aWYo''@;'; put 'put ''byhNJTI9PTEpLDM9PT1NKXt2YXIgaj10aGlzLm0uYWRkKG5ldyB0KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHgsail9Zm9yKHZhciBjPXRoaXMubS5zdWJuKDEpLG09MDshYy5pc1plcm8oKSYmMD09PWMuYW5kbG4oMSk7KW0rKyxjLml1c2hybigxKTtvKCFjLmlzWmVybygpKTt2''@;'; put 'put ''YXIgZz1uZXcgdCgxKS50b1JlZCh0aGlzKSx5PWcucmVkTmVnKCksdz10aGlzLm0uc3VibigxKS5pdXNocm4oMSksaz10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKGs9bmV3IHQoMiprKmspLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhrLHcpLmNtcCh5KTspay5yZWRJQWRkKHkpO2Zvcih2YXIg''@;'; put 'put ''Tz10aGlzLnBvdyhrLGMpLHo9dGhpcy5wb3coeCxjLmFkZG4oMSkuaXVzaHJuKDEpKSxVPXRoaXMucG93KHgsYyksVj1tOzAhPT1VLmNtcChnKTspe2Zvcih2YXIgUj1VLEg9MDswIT09Ui5jbXAoZyk7SCsrKVI9Ui5yZWRTcXIoKTtvKEg8Vik7dmFyIFQ9dGhpcy5wb3coTyxuZXcgdCgxKS5p''@;'; put 'put ''dXNobG4oVi1ILTEpKTt6PXoucmVkTXVsKFQpLE89VC5yZWRTcXIoKSxVPVUucmVkTXVsKE8pLFY9SH1yZXR1cm4gen0sJC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih4KXt2YXIgTT14Ll9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09TS5uZWdhdGl2ZT8oTS5uZWdhdGl2ZT0wLHRoaXMuaW1v''@;'; put 'put ''ZChNKS5yZWROZWcoKSk6dGhpcy5pbW9kKE0pfSwkLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oeCxNKXtpZihNLmlzWmVybygpKXJldHVybiBuZXcgdCgxKS50b1JlZCh0aGlzKTtpZigwPT09TS5jbXBuKDEpKXJldHVybiB4LmNsb25lKCk7dmFyIGo9bmV3IEFycmF5KDE2KTtqWzBdPW5ldyB0''@;'; put 'put ''KDEpLnRvUmVkKHRoaXMpLGpbMV09eDtmb3IodmFyIGM9MjtjPGoubGVuZ3RoO2MrKylqW2NdPXRoaXMubXVsKGpbYy0xXSx4KTt2YXIgbT1qWzBdLGc9MCx5PTAsdz1NLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09dyYmKHc9MjYpLGM9TS5sZW5ndGgtMTtjPj0wO2MtLSl7Zm9yKHZhciBrPU0u''@;'; put 'put ''d29yZHNbY10sTz13LTE7Tz49MDtPLS0pe3ZhciB6PWs+Pk8mMTttIT09alswXSYmKG09dGhpcy5zcXIobSkpLDAhPT16fHwwIT09Zz8oZzw8PTEsZ3w9eiwoND09PSsreXx8MD09PWMmJjA9PT1PKSYmKG09dGhpcy5tdWwobSxqW2ddKSx5PTAsZz0wKSk6eT0wfXc9MjZ9cmV0dXJuIG19LCQu''@;'; put 'put ''cHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih4KXt2YXIgTT14LnVtb2QodGhpcy5tKTtyZXR1cm4gTT09PXg/TS5jbG9uZSgpOk19LCQucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHgpe3ZhciBNPXguY2xvbmUoKTtyZXR1cm4gTS5yZWQ9bnVsbCxNfSx0Lm1vbnQ9ZnVuY3Rp''@;'; put 'put ''b24oeCl7cmV0dXJuIG5ldyBEKHgpfSxyKEQsJCksRC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLmltb2QoeC51c2hsbih0aGlzLnNoaWZ0KSl9LEQucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHgpe3ZhciBNPXRoaXMuaW1vZCh4Lm11bCh0aGlz''@;'; put 'put ''LnJpbnYpKTtyZXR1cm4gTS5yZWQ9bnVsbCxNfSxELnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHgsTSl7aWYoeC5pc1plcm8oKXx8TS5pc1plcm8oKSlyZXR1cm4geC53b3Jkc1swXT0wLHgubGVuZ3RoPTEseDt2YXIgaj14LmltdWwoTSksYz1qLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlz''@;'; put 'put ''Lm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxtPWouaXN1YihjKS5pdXNocm4odGhpcy5zaGlmdCksZz1tO3JldHVybiBtLmNtcCh0aGlzLm0pPj0wP2c9bS5pc3ViKHRoaXMubSk6bS5jbXBuKDApPDAmJihnPW0uaWFkZCh0aGlzLm0pKSxnLl9mb3JjZVJlZCh0aGlzKX0s''@;'; put 'put ''RC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHgsTSl7aWYoeC5pc1plcm8oKXx8TS5pc1plcm8oKSlyZXR1cm4gbmV3IHQoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBqPXgubXVsKE0pLGM9ai5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRo''@;'; put 'put ''aXMubSksbT1qLmlzdWIoYykuaXVzaHJuKHRoaXMuc2hpZnQpLGc9bTtyZXR1cm4gbS5jbXAodGhpcy5tKT49MD9nPW0uaXN1Yih0aGlzLm0pOm0uY21wbigwKTwwJiYoZz1tLmlhZGQodGhpcy5tKSksZy5fZm9yY2VSZWQodGhpcyl9LEQucHJvdG90eXBlLmludm09ZnVuY3Rpb24oeCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuaW1vZCh4Ll9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odm9pZCAwPT09RXx8RSl9LHtidWZmZXI6MTg4fV0sMTg1OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO1MuYnl0ZUxlbmd0aD1mdW5jdGlvbihpKXt2YXIgaD1sKGkpLHU9''@;'; put 'put ''aFsxXTtyZXR1cm4gMyooaFswXSt1KS80LXV9LFMudG9CeXRlQXJyYXk9ZnVuY3Rpb24oaSl7dmFyIGgsZixOLHU9bChpKSxwPXVbMF0sZD11WzFdLHY9bmV3IG8oMyoocCsoTj1kKSkvNC1OKSxfPTAsQT1kPjA/cC00OnA7Zm9yKGY9MDtmPEE7Zis9NCloPWFbaS5jaGFyQ29kZUF0KGYpXTw8''@;'; put 'put ''MTh8YVtpLmNoYXJDb2RlQXQoZisxKV08PDEyfGFbaS5jaGFyQ29kZUF0KGYrMildPDw2fGFbaS5jaGFyQ29kZUF0KGYrMyldLHZbXysrXT1oPj4xNiYyNTUsdltfKytdPWg+PjgmMjU1LHZbXysrXT0yNTUmaDtyZXR1cm4gMj09PWQmJihoPWFbaS5jaGFyQ29kZUF0KGYpXTw8MnxhW2kuY2hh''@;'; put 'put ''ckNvZGVBdChmKzEpXT4+NCx2W18rK109MjU1JmgpLDE9PT1kJiYoaD1hW2kuY2hhckNvZGVBdChmKV08PDEwfGFbaS5jaGFyQ29kZUF0KGYrMSldPDw0fGFbaS5jaGFyQ29kZUF0KGYrMildPj4yLHZbXysrXT1oPj44JjI1NSx2W18rK109MjU1JmgpLHZ9LFMuZnJvbUJ5dGVBcnJheT1mdW5j''@;'; put 'put ''dGlvbihpKXtmb3IodmFyIGgsZj1pLmxlbmd0aCx1PWYlMyxwPVtdLGQ9MCx2PWYtdTtkPHY7ZCs9MTYzODMpcC5wdXNoKG4oaSxkLGQrMTYzODM+dj92OmQrMTYzODMpKTtyZXR1cm4gMT09PXU/cC5wdXNoKGJbKGg9aVtmLTFdKT4+Ml0rYltoPDw0JjYzXSsiPT0iKToyPT09dSYmcC5wdXNo''@;'; put 'put ''KGJbKGg9KGlbZi0yXTw8OCkraVtmLTFdKT4+MTBdK2JbaD4+NCY2M10rYltoPDwyJjYzXSsiPSIpLHAuam9pbigiIil9O2Zvcih2YXIgYj1bXSxhPVtdLG89dHlwZW9mIFVpbnQ4QXJyYXk8InUiP1VpbnQ4QXJyYXk6QXJyYXkscj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZn''@;'; put 'put ''aGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsdD0wO3Q8NjQ7Kyt0KWJbdF09clt0XSxhW3IuY2hhckNvZGVBdCh0KV09dDtmdW5jdGlvbiBsKGkpe3ZhciBoPWkubGVuZ3RoO2lmKGglND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEg''@;'; put 'put ''bXVsdGlwbGUgb2YgNCIpO3ZhciBmPWkuaW5kZXhPZigiPSIpO3JldHVybi0xPT09ZiYmKGY9aCksW2YsZj09PWg/MDo0LWYlNF19ZnVuY3Rpb24gbihpLGgsZil7Zm9yKHZhciBwLGQ9W10sdj1oO3Y8Zjt2Kz0zKWQucHVzaChiWyhwPShpW3ZdPDwxNiYxNjcxMTY4MCkrKGlbdisxXTw8OCY2''@;'; put 'put ''NTI4MCkrKDI1NSZpW3YrMl0pKT4+MTgmNjNdK2JbcD4+MTImNjNdK2JbcD4+NiY2M10rYls2MyZwXSk7cmV0dXJuIGQuam9pbigiIil9YVs0NV09NjIsYVs5NV09NjN9LHt9XSwxODY6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7IWZ1bmN0aW9uKGIpe2Z1bmN0aW9uIG8oYyxtKXtp''@;'; put 'put ''ZighYyl0aHJvdyBuZXcgRXJyb3IobXx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiByKGMsbSl7Yy5zdXBlcl89bTt2YXIgZz1mdW5jdGlvbigpe307Zy5wcm90b3R5cGU9bS5wcm90b3R5cGUsYy5wcm90b3R5cGU9bmV3IGcsYy5wcm90b3R5cGUuY29uc3RydWN0b3I9Y31mdW5jdGlv''@;'; put 'put ''biB0KGMsbSxnKXtpZih0LmlzQk4oYykpcmV0dXJuIGM7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PWMmJigibGUiIT09bSYmImJlIiE9PW18fChnPW0sbT0xMCksdGhpcy5faW5pdChjfHwwLG18fDEwLGd8fCJiZSIp''@;'; put 'put ''KX12YXIgZTsib2JqZWN0Ij09dHlwZW9mIGI/Yi5leHBvcnRzPXQ6KHZvaWQgMCkuQk49dCx0LkJOPXQsdC53b3JkU2l6ZT0yNjt0cnl7ZT10eXBlb2Ygd2luZG93PCJ1IiYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVyOnMoImJ1ZmZlciIpLkJ1ZmZlcn1jYXRjaHt9ZnVu''@;'; put 'put ''Y3Rpb24gbChjLG0pe3ZhciBnPWMuY2hhckNvZGVBdChtKTtyZXR1cm4gZz49NDgmJmc8PTU3P2ctNDg6Zz49NjUmJmc8PTcwP2ctNTU6Zz49OTcmJmc8PTEwMj9nLTg3OnZvaWQgbyghMSwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gIitjKX1mdW5jdGlvbiBuKGMsbSxnKXt2YXIgeT1sKGMsZyk7''@;'; put 'put ''cmV0dXJuIGctMT49bSYmKHl8PWwoYyxnLTEpPDw0KSx5fWZ1bmN0aW9uIGkoYyxtLGcseSl7Zm9yKHZhciB3PTAsaz0wLE89TWF0aC5taW4oYy5sZW5ndGgsZyksej1tO3o8Tzt6Kyspe3ZhciBVPWMuY2hhckNvZGVBdCh6KS00ODt3Kj15LGs9VT49NDk/VS00OSsxMDpVPj0xNz9VLTE3KzEw''@;'; put 'put ''OlUsbyhVPj0wJiZrPHksIkludmFsaWQgY2hhcmFjdGVyIiksdys9a31yZXR1cm4gd31mdW5jdGlvbiBoKGMsbSl7Yy53b3Jkcz1tLndvcmRzLGMubGVuZ3RoPW0ubGVuZ3RoLGMubmVnYXRpdmU9bS5uZWdhdGl2ZSxjLnJlZD1tLnJlZH1pZih0LmlzQk49ZnVuY3Rpb24oYyl7cmV0dXJuIGMg''@;'; put 'put ''aW5zdGFuY2VvZiB0fHxudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjJiZjLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dC53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShjLndvcmRzKX0sdC5tYXg9ZnVuY3Rpb24oYyxtKXtyZXR1cm4gYy5jbXAobSk+MD9jOm19LHQubWluPWZ1bmN0aW9uKGMs''@;'; put 'put ''bSl7cmV0dXJuIGMuY21wKG0pPDA/YzptfSx0LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihjLG0sZyl7aWYoIm51bWJlciI9PXR5cGVvZiBjKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGMsbSxnKTtpZigib2JqZWN0Ij09dHlwZW9mIGMpcmV0dXJuIHRoaXMuX2luaXRBcnJheShjLG0sZyk7''@;'; put 'put ''ImhleCI9PT1tJiYobT0xNiksbyhtPT09KDB8bSkmJm0+PTImJm08PTM2KTt2YXIgeT0wOyItIj09PShjPWMudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoeSsrLHRoaXMubmVnYXRpdmU9MSkseTxjLmxlbmd0aCYmKDE2PT09bT90aGlzLl9wYXJzZUhleChjLHksZyk6KHRo''@;'; put 'put ''aXMuX3BhcnNlQmFzZShjLG0seSksImxlIj09PWcmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxtLGcpKSl9LHQucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGMsbSxnKXtjPDAmJih0aGlzLm5lZ2F0aXZlPTEsYz0tYyksYzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcx''@;'; put 'put ''MDg4NjMmY10sdGhpcy5sZW5ndGg9MSk6Yzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZjLGMvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihvKGM8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmYyxjLzY3MTA4ODY0JjY3MTA4''@;'; put 'put ''ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1nJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksbSxnKX0sdC5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihjLG0sZyl7aWYobygibnVtYmVyIj09dHlwZW9mIGMubGVuZ3RoKSxjLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53''@;'; put 'put ''b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChjLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aDt5KyspdGhpcy53b3Jkc1t5XT0wO3ZhciB3LGssTz0wO2lmKCJiZSI9PT1n''@;'; put 'put ''KWZvcih5PWMubGVuZ3RoLTEsdz0wO3k+PTA7eS09Myl0aGlzLndvcmRzW3ddfD0oaz1jW3ldfGNbeS0xXTw8OHxjW3ktMl08PDE2KTw8TyY2NzEwODg2Myx0aGlzLndvcmRzW3crMV09az4+PjI2LU8mNjcxMDg4NjMsKE8rPTI0KT49MjYmJihPLT0yNix3KyspO2Vsc2UgaWYoImxlIj09PWcp''@;'; put 'put ''Zm9yKHk9MCx3PTA7eTxjLmxlbmd0aDt5Kz0zKXRoaXMud29yZHNbd118PShrPWNbeV18Y1t5KzFdPDw4fGNbeSsyXTw8MTYpPDxPJjY3MTA4ODYzLHRoaXMud29yZHNbdysxXT1rPj4+MjYtTyY2NzEwODg2MywoTys9MjQpPj0yNiYmKE8tPTI2LHcrKyk7cmV0dXJuIHRoaXMuX3N0cmlwKCl9''@;'; put 'put ''LHQucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihjLG0sZyl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChjLmxlbmd0aC1tKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aDt5KyspdGhpcy53b3Jkc1t5XT0wO3ZhciB3LGs9''@;'; put 'put ''MCxPPTA7aWYoImJlIj09PWcpZm9yKHk9Yy5sZW5ndGgtMTt5Pj1tO3ktPTIpdz1uKGMsbSx5KTw8ayx0aGlzLndvcmRzW09dfD02NzEwODg2MyZ3LGs+PTE4PyhrLT0xOCx0aGlzLndvcmRzW08rPTFdfD13Pj4+MjYpOmsrPTg7ZWxzZSBmb3IoeT0oYy5sZW5ndGgtbSklMj09MD9tKzE6bTt5''@;'; put 'put ''PGMubGVuZ3RoO3krPTIpdz1uKGMsbSx5KTw8ayx0aGlzLndvcmRzW09dfD02NzEwODg2MyZ3LGs+PTE4PyhrLT0xOCx0aGlzLndvcmRzW08rPTFdfD13Pj4+MjYpOmsrPTg7dGhpcy5fc3RyaXAoKX0sdC5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihjLG0sZyl7dGhpcy53b3Jkcz1b''@;'; put 'put ''MF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHk9MCx3PTE7dzw9NjcxMDg4NjM7dyo9bSl5Kys7eS0tLHc9dy9tfDA7Zm9yKHZhciBrPWMubGVuZ3RoLWcsTz1rJXksej1NYXRoLm1pbihrLGstTykrZyxVPTAsVj1nO1Y8ejtWKz15KVU9aShjLFYsVit5LG0pLHRoaXMuaW11bG4odyksdGhpcy53''@;'; put 'put ''b3Jkc1swXStVPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPVU6dGhpcy5faWFkZG4oVSk7aWYoMCE9PU8pe3ZhciBSPTE7Zm9yKFU9aShjLFYsYy5sZW5ndGgsbSksVj0wO1Y8TztWKyspUio9bTt0aGlzLmltdWxuKFIpLHRoaXMud29yZHNbMF0rVTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1V''@;'; put 'put ''OnRoaXMuX2lhZGRuKFUpfXRoaXMuX3N0cmlwKCl9LHQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYyl7Yy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgbT0wO208dGhpcy5sZW5ndGg7bSsrKWMud29yZHNbbV09dGhpcy53b3Jkc1ttXTtjLmxlbmd0aD10aGlzLmxlbmd0''@;'; put 'put ''aCxjLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsYy5yZWQ9dGhpcy5yZWR9LHQucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKGMpe2goYyx0aGlzKX0sdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgYz1uZXcgdChudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGMpLGN9LHQucHJvdG90eXBl''@;'; put 'put ''Ll9leHBhbmQ9ZnVuY3Rpb24oYyl7Zm9yKDt0aGlzLmxlbmd0aDxjOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLl9zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRo''@;'; put 'put ''aXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHQucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx0eXBlb2YgU3ltYm9sPCJ1IiYmImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIFN5bWJvbC5mb3IpdHJ5e3QucHJvdG90eXBlW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildPWZ9Y2F0Y2h7dC5wcm90b3R5cGUuaW5zcGVjdD1mfWVsc2UgdC5wcm90b3R5cGUuaW5zcGVjdD1mO2Z1bmN0aW9uIGYoKXtyZXR1cm4odGhpcy5yZWQ/''@;'; put 'put ''IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In12YXIgdT1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxwPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2''@;'; put 'put ''LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLGQ9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYy''@;'; put 'put ''NSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUy''@;'; put 'put ''MTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gdihjLG0sZyl7Zy5uZWdhdGl2ZT1tLm5lZ2F0aXZlXmMubmVnYXRpdmU7dmFyIHk9Yy5sZW5ndGgrbS5sZW5ndGh8MDtnLmxlbmd0aD15LHk9eS0xfDA7dmFyIHc9MHxjLndvcmRzWzBdLGs9MHxtLndvcmRzWzBdLE89dyprLFU9Ty82NzEwODg2NHww''@;'; put 'put ''O2cud29yZHNbMF09NjcxMDg4NjMmTztmb3IodmFyIFY9MTtWPHk7VisrKXtmb3IodmFyIFI9VT4+PjI2LEg9NjcxMDg4NjMmVSxUPU1hdGgubWluKFYsbS5sZW5ndGgtMSksQz1NYXRoLm1heCgwLFYtYy5sZW5ndGgrMSk7Qzw9VDtDKyspUis9KE89KHc9MHxjLndvcmRzW1YtQ3wwXSkqKGs9''@;'; put 'put ''MHxtLndvcmRzW0NdKStIKS82NzEwODg2NHwwLEg9NjcxMDg4NjMmTztnLndvcmRzW1ZdPTB8SCxVPTB8Un1yZXR1cm4gMCE9PVU/Zy53b3Jkc1tWXT0wfFU6Zy5sZW5ndGgtLSxnLl9zdHJpcCgpfXQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGMsbSl7dmFyIGc7aWYobT0wfG18fDEs''@;'; put 'put ''MTY9PT0oYz1jfHwxMCl8fCJoZXgiPT09Yyl7Zz0iIjtmb3IodmFyIHk9MCx3PTAsaz0wO2s8dGhpcy5sZW5ndGg7aysrKXt2YXIgTz10aGlzLndvcmRzW2tdLHo9KDE2Nzc3MjE1JihPPDx5fHcpKS50b1N0cmluZygxNik7dz1PPj4+MjQteSYxNjc3NzIxNSwoeSs9Mik+PTI2JiYoeS09MjYs''@;'; put 'put ''ay0tKSxnPTAhPT13fHxrIT09dGhpcy5sZW5ndGgtMT91WzYtei5sZW5ndGhdK3orZzp6K2d9Zm9yKDAhPT13JiYoZz13LnRvU3RyaW5nKDE2KStnKTtnLmxlbmd0aCVtIT0wOylnPSIwIitnO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKGc9Ii0iK2cpLGd9aWYoYz09PSgwfGMpJiZjPj0y''@;'; put 'put ''JiZjPD0zNil7dmFyIFU9cFtjXSxWPWRbY107Zz0iIjt2YXIgUj10aGlzLmNsb25lKCk7Zm9yKFIubmVnYXRpdmU9MDshUi5pc1plcm8oKTspe3ZhciBIPVIubW9kcm4oVikudG9TdHJpbmcoYyk7Zz0oUj1SLmlkaXZuKFYpKS5pc1plcm8oKT9IK2c6dVtVLUgubGVuZ3RoXStIK2d9Zm9yKHRo''@;'; put 'put ''aXMuaXNaZXJvKCkmJihnPSIwIitnKTtnLmxlbmd0aCVtIT0wOylnPSIwIitnO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKGc9Ii0iK2cpLGd9byghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx0LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBjPXRo''@;'; put 'put ''aXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9jKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Yys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm8oITEsIk51bWJl''@;'; put 'put ''ciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1jOmN9LHQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2LDIpfSxlJiYodC5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oYyxtKXtyZXR1''@;'; put 'put ''cm4gdGhpcy50b0FycmF5TGlrZShlLGMsbSl9KSx0LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGMsbSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksYyxtKX0sdC5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oYyxtLGcpe3RoaXMuX3N0cmlwKCk7dmFyIHk9dGhpcy5i''@;'; put 'put ''eXRlTGVuZ3RoKCksdz1nfHxNYXRoLm1heCgxLHkpO28oeTw9dywiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG8odz4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKTt2YXIgTyx6LGs9KHo9dywoTz1jKS5hbGxvY1Vuc2FmZT9PLmFsbG9jVW5zYWZlKHop''@;'; put 'put ''Om5ldyBPKHopKTtyZXR1cm4gdGhpc1siX3RvQXJyYXlMaWtlIisoImxlIj09PW0/IkxFIjoiQkUiKV0oayx5KSxrfSx0LnByb3RvdHlwZS5fdG9BcnJheUxpa2VMRT1mdW5jdGlvbihjLG0pe2Zvcih2YXIgZz0wLHk9MCx3PTAsaz0wO3c8dGhpcy5sZW5ndGg7dysrKXt2YXIgTz10aGlzLndv''@;'; put 'put ''cmRzW3ddPDxrfHk7Y1tnKytdPTI1NSZPLGc8Yy5sZW5ndGgmJihjW2crK109Tz4+OCYyNTUpLGc8Yy5sZW5ndGgmJihjW2crK109Tz4+MTYmMjU1KSw2PT09az8oZzxjLmxlbmd0aCYmKGNbZysrXT1PPj4yNCYyNTUpLHk9MCxrPTApOih5PU8+Pj4yNCxrKz0yKX1pZihnPGMubGVuZ3RoKWZv''@;'; put 'put ''cihjW2crK109eTtnPGMubGVuZ3RoOyljW2crK109MH0sdC5wcm90b3R5cGUuX3RvQXJyYXlMaWtlQkU9ZnVuY3Rpb24oYyxtKXtmb3IodmFyIGc9Yy5sZW5ndGgtMSx5PTAsdz0wLGs9MDt3PHRoaXMubGVuZ3RoO3crKyl7dmFyIE89dGhpcy53b3Jkc1t3XTw8a3x5O2NbZy0tXT0yNTUmTyxn''@;'; put 'put ''Pj0wJiYoY1tnLS1dPU8+PjgmMjU1KSxnPj0wJiYoY1tnLS1dPU8+PjE2JjI1NSksNj09PWs/KGc+PTAmJihjW2ctLV09Tz4+MjQmMjU1KSx5PTAsaz0wKTooeT1PPj4+MjQsays9Mil9aWYoZz49MClmb3IoY1tnLS1dPXk7Zz49MDspY1tnLS1dPTB9LHQucHJvdG90eXBlLl9jb3VudEJpdHM9''@;'; put 'put ''TWF0aC5jbHozMj9mdW5jdGlvbihjKXtyZXR1cm4gMzItTWF0aC5jbHozMihjKX06ZnVuY3Rpb24oYyl7dmFyIG09YyxnPTA7cmV0dXJuIG0+PTQwOTYmJihnKz0xMyxtPj4+PTEzKSxtPj02NCYmKGcrPTcsbT4+Pj03KSxtPj04JiYoZys9NCxtPj4+PTQpLG0+PTImJihnKz0yLG0+Pj49Miks''@;'; put 'put ''ZyttfSx0LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oYyl7aWYoMD09PWMpcmV0dXJuIDI2O3ZhciBtPWMsZz0wO3JldHVybiEoODE5MSZtKSYmKGcrPTEzLG0+Pj49MTMpLCEoMTI3Jm0pJiYoZys9NyxtPj4+PTcpLCEoMTUmbSkmJihnKz00LG0+Pj49NCksISgzJm0pJiYoZys9Mixt''@;'; put 'put ''Pj4+PTIpLCEoMSZtKSYmZysrLGd9LHQucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBtPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK219LHQucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7''@;'; put 'put ''aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGM9MCxtPTA7bTx0aGlzLmxlbmd0aDttKyspe3ZhciBnPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbbV0pO2lmKGMrPWcsMjYhPT1nKWJyZWFrfXJldHVybiBjfSx0LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx0LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oYyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oYykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx0LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihj''@;'; put 'put ''KXtyZXR1cm4gdGhpcy50ZXN0bihjLTEpP3RoaXMubm90bihjKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx0LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5pbmVnKCl9LHQucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHQucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oYyl7Zm9yKDt0aGlzLmxlbmd0aDxjLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0''@;'; put 'put ''aCsrXT0wO2Zvcih2YXIgbT0wO208Yy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttXXxjLndvcmRzW21dO3JldHVybiB0aGlzLl9zdHJpcCgpfSx0LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oYyl7cmV0dXJuIG8oMD09KHRoaXMubmVnYXRpdmV8Yy5uZWdhdGl2ZSkpLHRo''@;'; put 'put ''aXMuaXVvcihjKX0sdC5wcm90b3R5cGUub3I9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMubGVuZ3RoPmMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoYyk6Yy5jbG9uZSgpLmlvcih0aGlzKX0sdC5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmxlbmd0aD5jLmxlbmd0aD90''@;'; put 'put ''aGlzLmNsb25lKCkuaXVvcihjKTpjLmNsb25lKCkuaXVvcih0aGlzKX0sdC5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oYyl7dmFyIG07bT10aGlzLmxlbmd0aD5jLmxlbmd0aD9jOnRoaXM7Zm9yKHZhciBnPTA7ZzxtLmxlbmd0aDtnKyspdGhpcy53b3Jkc1tnXT10aGlzLndvcmRzW2ddJmMu''@;'; put 'put ''d29yZHNbZ107cmV0dXJuIHRoaXMubGVuZ3RoPW0ubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LHQucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oYyl7cmV0dXJuIG8oMD09KHRoaXMubmVnYXRpdmV8Yy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoYyl9LHQucHJvdG90eXBlLmFuZD1mdW5jdGlvbihjKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5sZW5ndGg+Yy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoYyk6Yy5jbG9uZSgpLmlhbmQodGhpcyl9LHQucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMubGVuZ3RoPmMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChjKTpjLmNsb25lKCkuaXVhbmQo''@;'; put 'put ''dGhpcyl9LHQucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGMpe3ZhciBtLGc7dGhpcy5sZW5ndGg+Yy5sZW5ndGg/KG09dGhpcyxnPWMpOihtPWMsZz10aGlzKTtmb3IodmFyIHk9MDt5PGcubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ldPW0ud29yZHNbeV1eZy53b3Jkc1t5XTtpZih0aGlzIT09''@;'; put 'put ''bSlmb3IoO3k8bS5sZW5ndGg7eSsrKXRoaXMud29yZHNbeV09bS53b3Jkc1t5XTtyZXR1cm4gdGhpcy5sZW5ndGg9bS5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sdC5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihjKXtyZXR1cm4gbygwPT0odGhpcy5uZWdhdGl2ZXxjLm5lZ2F0aXZlKSksdGhpcy5p''@;'; put 'put ''dXhvcihjKX0sdC5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmxlbmd0aD5jLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihjKTpjLmNsb25lKCkuaXhvcih0aGlzKX0sdC5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yy5sZW5ndGg/''@;'; put 'put ''dGhpcy5jbG9uZSgpLml1eG9yKGMpOmMuY2xvbmUoKS5pdXhvcih0aGlzKX0sdC5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oYyl7bygibnVtYmVyIj09dHlwZW9mIGMmJmM+PTApO3ZhciBtPTB8TWF0aC5jZWlsKGMvMjYpLGc9YyUyNjt0aGlzLl9leHBhbmQobSksZz4wJiZtLS07Zm9yKHZh''@;'; put 'put ''ciB5PTA7eTxtO3krKyl0aGlzLndvcmRzW3ldPTY3MTA4ODYzJn50aGlzLndvcmRzW3ldO3JldHVybiBnPjAmJih0aGlzLndvcmRzW3ldPX50aGlzLndvcmRzW3ldJjY3MTA4ODYzPj4yNi1nKSx0aGlzLl9zdHJpcCgpfSx0LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlz''@;'; put 'put ''LmNsb25lKCkuaW5vdG4oYyl9LHQucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oYyxtKXtvKCJudW1iZXIiPT10eXBlb2YgYyYmYz49MCk7dmFyIGc9Yy8yNnwwLHk9YyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKGcrMSksdGhpcy53b3Jkc1tnXT1tP3RoaXMud29yZHNbZ118MTw8eTp0aGlzLndv''@;'; put 'put ''cmRzW2ddJn4oMTw8eSksdGhpcy5fc3RyaXAoKX0sdC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihjKXt2YXIgbSxnLHk7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1jLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsbT10aGlzLmlzdWIoYyksdGhpcy5uZWdhdGl2ZV49MSx0aGlz''@;'; put 'put ''Ll9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yy5uZWdhdGl2ZSlyZXR1cm4gYy5uZWdhdGl2ZT0wLG09dGhpcy5pc3ViKGMpLGMubmVnYXRpdmU9MSxtLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmMubGVuZ3RoPyhnPXRoaXMseT1jKTooZz1jLHk9dGhpcyk7Zm9yKHZh''@;'; put 'put ''ciB3PTAsaz0wO2s8eS5sZW5ndGg7aysrKXRoaXMud29yZHNba109NjcxMDg4NjMmKG09KDB8Zy53b3Jkc1trXSkrKDB8eS53b3Jkc1trXSkrdyksdz1tPj4+MjY7Zm9yKDswIT09dyYmazxnLmxlbmd0aDtrKyspdGhpcy53b3Jkc1trXT02NzEwODg2MyYobT0oMHxnLndvcmRzW2tdKSt3KSx3''@;'; put 'put ''PW0+Pj4yNjtpZih0aGlzLmxlbmd0aD1nLmxlbmd0aCwwIT09dyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT13LHRoaXMubGVuZ3RoKys7ZWxzZSBpZihnIT09dGhpcylmb3IoO2s8Zy5sZW5ndGg7aysrKXRoaXMud29yZHNba109Zy53b3Jkc1trXTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUu''@;'; put 'put ''YWRkPWZ1bmN0aW9uKGMpe3ZhciBtO3JldHVybiAwIT09Yy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGMubmVnYXRpdmU9MCxtPXRoaXMuc3ViKGMpLGMubmVnYXRpdmVePTEsbSk6MD09PWMubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsbT1jLnN1''@;'; put 'put ''Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsbSk6dGhpcy5sZW5ndGg+Yy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoYyk6Yy5jbG9uZSgpLmlhZGQodGhpcyl9LHQucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oYyl7aWYoMCE9PWMubmVnYXRpdmUpe2MubmVnYXRpdmU9MDt2YXIgbT10aGlzLmlh''@;'; put 'put ''ZGQoYyk7cmV0dXJuIGMubmVnYXRpdmU9MSxtLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGMpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBnLHksdz10aGlzLmNtcChjKTtpZigwPT09dylyZXR1''@;'; put 'put ''cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7dz4wPyhnPXRoaXMseT1jKTooZz1jLHk9dGhpcyk7Zm9yKHZhciBrPTAsTz0wO088eS5sZW5ndGg7TysrKWs9KG09KDB8Zy53b3Jkc1tPXSktKDB8eS53b3Jkc1tPXSkrayk+PjI2LHRoaXMud29y''@;'; put 'put ''ZHNbT109NjcxMDg4NjMmbTtmb3IoOzAhPT1rJiZPPGcubGVuZ3RoO08rKylrPShtPSgwfGcud29yZHNbT10pK2spPj4yNix0aGlzLndvcmRzW09dPTY3MTA4ODYzJm07aWYoMD09PWsmJk88Zy5sZW5ndGgmJmchPT10aGlzKWZvcig7TzxnLmxlbmd0aDtPKyspdGhpcy53b3Jkc1tPXT1nLndv''@;'; put 'put ''cmRzW09dO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxPKSxnIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5fc3RyaXAoKX0sdC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihjKX07dmFyIF89ZnVuY3Rpb24o''@;'; put 'put ''YyxtLGcpe3ZhciB5LHcsayxPPWMud29yZHMsej1tLndvcmRzLFU9Zy53b3JkcyxWPTAsUj0wfE9bMF0sSD04MTkxJlIsVD1SPj4+MTMsQz0wfE9bMV0sRj04MTkxJkMscT1DPj4+MTMsWT0wfE9bMl0sWD04MTkxJlksSz1ZPj4+MTMscnQ9MHxPWzNdLHR0PTgxOTEmcnQsVz1ydD4+PjEzLFE9''@;'; put 'put ''MHxPWzRdLEc9ODE5MSZRLGV0PVE+Pj4xMyxudD0wfE9bNV0saXQ9ODE5MSZudCxvdD1udD4+PjEzLGh0PTB8T1s2XSxmdD04MTkxJmh0LHB0PWh0Pj4+MTMsVHQ9MHxPWzddLHl0PTgxOTEmVHQsd3Q9VHQ+Pj4xMyxxdD0wfE9bOF0sRXQ9ODE5MSZxdCxfdD1xdD4+PjEzLEF0PTB8T1s5XSxn''@;'; put 'put ''dD04MTkxJkF0LG10PUF0Pj4+MTMsVnQ9MHx6WzBdLFN0PTgxOTEmVnQsT3Q9VnQ+Pj4xMyx5ZT0wfHpbMV0sUnQ9ODE5MSZ5ZSxOdD15ZT4+PjEzLGFlPTB8elsyXSxMdD04MTkxJmFlLHp0PWFlPj4+MTMscGU9MHx6WzNdLEJ0PTgxOTEmcGUsUHQ9cGU+Pj4xMyxjZT0wfHpbNF0sRnQ9ODE5''@;'; put 'put ''MSZjZSxJdD1jZT4+PjEzLHZlPTB8els1XSxVdD04MTkxJnZlLEo9dmU+Pj4xMyxhdD0wfHpbNl0sbHQ9ODE5MSZhdCxkdD1hdD4+PjEzLFl0PTB8els3XSx2dD04MTkxJll0LGt0PVl0Pj4+MTMsdGU9MHx6WzhdLGp0PTgxOTEmdGUseHQ9dGU+Pj4xMyxRdD0wfHpbOV0sV3Q9ODE5MSZRdCxY''@;'; put 'put ''dD1RdD4+PjEzO2cubmVnYXRpdmU9Yy5uZWdhdGl2ZV5tLm5lZ2F0aXZlLGcubGVuZ3RoPTE5O3ZhciByZT0oVisoeT1NYXRoLmltdWwoSCxTdCkpfDApKygoODE5MSYodz0odz1NYXRoLmltdWwoSCxPdCkpK01hdGguaW11bChULFN0KXwwKSk8PDEzKXwwO1Y9KChrPU1hdGguaW11bChULE90''@;'; put 'put ''KSkrKHc+Pj4xMyl8MCkrKHJlPj4+MjYpfDAscmUmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKEYsU3QpLHc9KHc9TWF0aC5pbXVsKEYsT3QpKStNYXRoLmltdWwocSxTdCl8MCxrPU1hdGguaW11bChxLE90KTt2YXIgaWU9KFYrKHk9eStNYXRoLmltdWwoSCxSdCl8MCl8MCkrKCg4MTkxJih3PSh3''@;'; put 'put ''PXcrTWF0aC5pbXVsKEgsTnQpfDApK01hdGguaW11bChULFJ0KXwwKSk8PDEzKXwwO1Y9KChrPWsrTWF0aC5pbXVsKFQsTnQpfDApKyh3Pj4+MTMpfDApKyhpZT4+PjI2KXwwLGllJj02NzEwODg2Myx5PU1hdGguaW11bChYLFN0KSx3PSh3PU1hdGguaW11bChYLE90KSkrTWF0aC5pbXVsKEss''@;'; put 'put ''U3QpfDAsaz1NYXRoLmltdWwoSyxPdCkseT15K01hdGguaW11bChGLFJ0KXwwLHc9KHc9dytNYXRoLmltdWwoRixOdCl8MCkrTWF0aC5pbXVsKHEsUnQpfDAsaz1rK01hdGguaW11bChxLE50KXwwO3ZhciB1ZT0oVisoeT15K01hdGguaW11bChILEx0KXwwKXwwKSsoKDgxOTEmKHc9KHc9dytN''@;'; put 'put ''YXRoLmltdWwoSCx6dCl8MCkrTWF0aC5pbXVsKFQsTHQpfDApKTw8MTMpfDA7Vj0oKGs9aytNYXRoLmltdWwoVCx6dCl8MCkrKHc+Pj4xMyl8MCkrKHVlPj4+MjYpfDAsdWUmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKHR0LFN0KSx3PSh3PU1hdGguaW11bCh0dCxPdCkpK01hdGguaW11bChXLFN0''@;'; put 'put ''KXwwLGs9TWF0aC5pbXVsKFcsT3QpLHk9eStNYXRoLmltdWwoWCxSdCl8MCx3PSh3PXcrTWF0aC5pbXVsKFgsTnQpfDApK01hdGguaW11bChLLFJ0KXwwLGs9aytNYXRoLmltdWwoSyxOdCl8MCx5PXkrTWF0aC5pbXVsKEYsTHQpfDAsdz0odz13K01hdGguaW11bChGLHp0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwocSxMdCl8MCxrPWsrTWF0aC5pbXVsKHEsenQpfDA7dmFyIGRlPShWKyh5PXkrTWF0aC5pbXVsKEgsQnQpfDApfDApKygoODE5MSYodz0odz13K01hdGguaW11bChILFB0KXwwKStNYXRoLmltdWwoVCxCdCl8MCkpPDwxMyl8MDtWPSgoaz1rK01hdGguaW11bChULFB0KXwwKSsodz4+PjEz''@;'; put 'put ''KXwwKSsoZGU+Pj4yNil8MCxkZSY9NjcxMDg4NjMseT1NYXRoLmltdWwoRyxTdCksdz0odz1NYXRoLmltdWwoRyxPdCkpK01hdGguaW11bChldCxTdCl8MCxrPU1hdGguaW11bChldCxPdCkseT15K01hdGguaW11bCh0dCxSdCl8MCx3PSh3PXcrTWF0aC5pbXVsKHR0LE50KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoVyxSdCl8MCxrPWsrTWF0aC5pbXVsKFcsTnQpfDAseT15K01hdGguaW11bChYLEx0KXwwLHc9KHc9dytNYXRoLmltdWwoWCx6dCl8MCkrTWF0aC5pbXVsKEssTHQpfDAsaz1rK01hdGguaW11bChLLHp0KXwwLHk9eStNYXRoLmltdWwoRixCdCl8MCx3PSh3PXcrTWF0aC5pbXVsKEYsUHQp''@;'; put 'put ''fDApK01hdGguaW11bChxLEJ0KXwwLGs9aytNYXRoLmltdWwocSxQdCl8MDt2YXIgbGU9KFYrKHk9eStNYXRoLmltdWwoSCxGdCl8MCl8MCkrKCg4MTkxJih3PSh3PXcrTWF0aC5pbXVsKEgsSXQpfDApK01hdGguaW11bChULEZ0KXwwKSk8PDEzKXwwO1Y9KChrPWsrTWF0aC5pbXVsKFQsSXQp''@;'; put 'put ''fDApKyh3Pj4+MTMpfDApKyhsZT4+PjI2KXwwLGxlJj02NzEwODg2Myx5PU1hdGguaW11bChpdCxTdCksdz0odz1NYXRoLmltdWwoaXQsT3QpKStNYXRoLmltdWwob3QsU3QpfDAsaz1NYXRoLmltdWwob3QsT3QpLHk9eStNYXRoLmltdWwoRyxSdCl8MCx3PSh3PXcrTWF0aC5pbXVsKEcsTnQp''@;'; put 'put ''fDApK01hdGguaW11bChldCxSdCl8MCxrPWsrTWF0aC5pbXVsKGV0LE50KXwwLHk9eStNYXRoLmltdWwodHQsTHQpfDAsdz0odz13K01hdGguaW11bCh0dCx6dCl8MCkrTWF0aC5pbXVsKFcsTHQpfDAsaz1rK01hdGguaW11bChXLHp0KXwwLHk9eStNYXRoLmltdWwoWCxCdCl8MCx3PSh3PXcr''@;'; put 'put ''TWF0aC5pbXVsKFgsUHQpfDApK01hdGguaW11bChLLEJ0KXwwLGs9aytNYXRoLmltdWwoSyxQdCl8MCx5PXkrTWF0aC5pbXVsKEYsRnQpfDAsdz0odz13K01hdGguaW11bChGLEl0KXwwKStNYXRoLmltdWwocSxGdCl8MCxrPWsrTWF0aC5pbXVsKHEsSXQpfDA7dmFyIGZlPShWKyh5PXkrTWF0''@;'; put 'put ''aC5pbXVsKEgsVXQpfDApfDApKygoODE5MSYodz0odz13K01hdGguaW11bChILEopfDApK01hdGguaW11bChULFV0KXwwKSk8PDEzKXwwO1Y9KChrPWsrTWF0aC5pbXVsKFQsSil8MCkrKHc+Pj4xMyl8MCkrKGZlPj4+MjYpfDAsZmUmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKGZ0LFN0KSx3PSh3''@;'; put 'put ''PU1hdGguaW11bChmdCxPdCkpK01hdGguaW11bChwdCxTdCl8MCxrPU1hdGguaW11bChwdCxPdCkseT15K01hdGguaW11bChpdCxSdCl8MCx3PSh3PXcrTWF0aC5pbXVsKGl0LE50KXwwKStNYXRoLmltdWwob3QsUnQpfDAsaz1rK01hdGguaW11bChvdCxOdCl8MCx5PXkrTWF0aC5pbXVsKEcs''@;'; put 'put ''THQpfDAsdz0odz13K01hdGguaW11bChHLHp0KXwwKStNYXRoLmltdWwoZXQsTHQpfDAsaz1rK01hdGguaW11bChldCx6dCl8MCx5PXkrTWF0aC5pbXVsKHR0LEJ0KXwwLHc9KHc9dytNYXRoLmltdWwodHQsUHQpfDApK01hdGguaW11bChXLEJ0KXwwLGs9aytNYXRoLmltdWwoVyxQdCl8MCx5''@;'; put 'put ''PXkrTWF0aC5pbXVsKFgsRnQpfDAsdz0odz13K01hdGguaW11bChYLEl0KXwwKStNYXRoLmltdWwoSyxGdCl8MCxrPWsrTWF0aC5pbXVsKEssSXQpfDAseT15K01hdGguaW11bChGLFV0KXwwLHc9KHc9dytNYXRoLmltdWwoRixKKXwwKStNYXRoLmltdWwocSxVdCl8MCxrPWsrTWF0aC5pbXVs''@;'; put 'put ''KHEsSil8MDt2YXIgWj0oVisoeT15K01hdGguaW11bChILGx0KXwwKXwwKSsoKDgxOTEmKHc9KHc9dytNYXRoLmltdWwoSCxkdCl8MCkrTWF0aC5pbXVsKFQsbHQpfDApKTw8MTMpfDA7Vj0oKGs9aytNYXRoLmltdWwoVCxkdCl8MCkrKHc+Pj4xMyl8MCkrKFo+Pj4yNil8MCxaJj02NzEwODg2''@;'; put 'put ''Myx5PU1hdGguaW11bCh5dCxTdCksdz0odz1NYXRoLmltdWwoeXQsT3QpKStNYXRoLmltdWwod3QsU3QpfDAsaz1NYXRoLmltdWwod3QsT3QpLHk9eStNYXRoLmltdWwoZnQsUnQpfDAsdz0odz13K01hdGguaW11bChmdCxOdCl8MCkrTWF0aC5pbXVsKHB0LFJ0KXwwLGs9aytNYXRoLmltdWwo''@;'; put 'put ''cHQsTnQpfDAseT15K01hdGguaW11bChpdCxMdCl8MCx3PSh3PXcrTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwob3QsTHQpfDAsaz1rK01hdGguaW11bChvdCx6dCl8MCx5PXkrTWF0aC5pbXVsKEcsQnQpfDAsdz0odz13K01hdGguaW11bChHLFB0KXwwKStNYXRoLmltdWwoZXQsQnQp''@;'; put 'put ''fDAsaz1rK01hdGguaW11bChldCxQdCl8MCx5PXkrTWF0aC5pbXVsKHR0LEZ0KXwwLHc9KHc9dytNYXRoLmltdWwodHQsSXQpfDApK01hdGguaW11bChXLEZ0KXwwLGs9aytNYXRoLmltdWwoVyxJdCl8MCx5PXkrTWF0aC5pbXVsKFgsVXQpfDAsdz0odz13K01hdGguaW11bChYLEopfDApK01h''@;'; put 'put ''dGguaW11bChLLFV0KXwwLGs9aytNYXRoLmltdWwoSyxKKXwwLHk9eStNYXRoLmltdWwoRixsdCl8MCx3PSh3PXcrTWF0aC5pbXVsKEYsZHQpfDApK01hdGguaW11bChxLGx0KXwwLGs9aytNYXRoLmltdWwocSxkdCl8MDt2YXIgc3Q9KFYrKHk9eStNYXRoLmltdWwoSCx2dCl8MCl8MCkrKCg4''@;'; put 'put ''MTkxJih3PSh3PXcrTWF0aC5pbXVsKEgsa3QpfDApK01hdGguaW11bChULHZ0KXwwKSk8PDEzKXwwO1Y9KChrPWsrTWF0aC5pbXVsKFQsa3QpfDApKyh3Pj4+MTMpfDApKyhzdD4+PjI2KXwwLHN0Jj02NzEwODg2Myx5PU1hdGguaW11bChFdCxTdCksdz0odz1NYXRoLmltdWwoRXQsT3QpKStN''@;'; put 'put ''YXRoLmltdWwoX3QsU3QpfDAsaz1NYXRoLmltdWwoX3QsT3QpLHk9eStNYXRoLmltdWwoeXQsUnQpfDAsdz0odz13K01hdGguaW11bCh5dCxOdCl8MCkrTWF0aC5pbXVsKHd0LFJ0KXwwLGs9aytNYXRoLmltdWwod3QsTnQpfDAseT15K01hdGguaW11bChmdCxMdCl8MCx3PSh3PXcrTWF0aC5p''@;'; put 'put ''bXVsKGZ0LHp0KXwwKStNYXRoLmltdWwocHQsTHQpfDAsaz1rK01hdGguaW11bChwdCx6dCl8MCx5PXkrTWF0aC5pbXVsKGl0LEJ0KXwwLHc9KHc9dytNYXRoLmltdWwoaXQsUHQpfDApK01hdGguaW11bChvdCxCdCl8MCxrPWsrTWF0aC5pbXVsKG90LFB0KXwwLHk9eStNYXRoLmltdWwoRyxG''@;'; put 'put ''dCl8MCx3PSh3PXcrTWF0aC5pbXVsKEcsSXQpfDApK01hdGguaW11bChldCxGdCl8MCxrPWsrTWF0aC5pbXVsKGV0LEl0KXwwLHk9eStNYXRoLmltdWwodHQsVXQpfDAsdz0odz13K01hdGguaW11bCh0dCxKKXwwKStNYXRoLmltdWwoVyxVdCl8MCxrPWsrTWF0aC5pbXVsKFcsSil8MCx5PXkr''@;'; put 'put ''TWF0aC5pbXVsKFgsbHQpfDAsdz0odz13K01hdGguaW11bChYLGR0KXwwKStNYXRoLmltdWwoSyxsdCl8MCxrPWsrTWF0aC5pbXVsKEssZHQpfDAseT15K01hdGguaW11bChGLHZ0KXwwLHc9KHc9dytNYXRoLmltdWwoRixrdCl8MCkrTWF0aC5pbXVsKHEsdnQpfDAsaz1rK01hdGguaW11bChx''@;'; put 'put ''LGt0KXwwO3ZhciBjdD0oVisoeT15K01hdGguaW11bChILGp0KXwwKXwwKSsoKDgxOTEmKHc9KHc9dytNYXRoLmltdWwoSCx4dCl8MCkrTWF0aC5pbXVsKFQsanQpfDApKTw8MTMpfDA7Vj0oKGs9aytNYXRoLmltdWwoVCx4dCl8MCkrKHc+Pj4xMyl8MCkrKGN0Pj4+MjYpfDAsY3QmPTY3MTA4''@;'; put 'put ''ODYzLHk9TWF0aC5pbXVsKGd0LFN0KSx3PSh3PU1hdGguaW11bChndCxPdCkpK01hdGguaW11bChtdCxTdCl8MCxrPU1hdGguaW11bChtdCxPdCkseT15K01hdGguaW11bChFdCxSdCl8MCx3PSh3PXcrTWF0aC5pbXVsKEV0LE50KXwwKStNYXRoLmltdWwoX3QsUnQpfDAsaz1rK01hdGguaW11''@;'; put 'put ''bChfdCxOdCl8MCx5PXkrTWF0aC5pbXVsKHl0LEx0KXwwLHc9KHc9dytNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bCh3dCxMdCl8MCxrPWsrTWF0aC5pbXVsKHd0LHp0KXwwLHk9eStNYXRoLmltdWwoZnQsQnQpfDAsdz0odz13K01hdGguaW11bChmdCxQdCl8MCkrTWF0aC5pbXVsKHB0''@;'; put 'put ''LEJ0KXwwLGs9aytNYXRoLmltdWwocHQsUHQpfDAseT15K01hdGguaW11bChpdCxGdCl8MCx3PSh3PXcrTWF0aC5pbXVsKGl0LEl0KXwwKStNYXRoLmltdWwob3QsRnQpfDAsaz1rK01hdGguaW11bChvdCxJdCl8MCx5PXkrTWF0aC5pbXVsKEcsVXQpfDAsdz0odz13K01hdGguaW11bChHLEop''@;'; put 'put ''fDApK01hdGguaW11bChldCxVdCl8MCxrPWsrTWF0aC5pbXVsKGV0LEopfDAseT15K01hdGguaW11bCh0dCxsdCl8MCx3PSh3PXcrTWF0aC5pbXVsKHR0LGR0KXwwKStNYXRoLmltdWwoVyxsdCl8MCxrPWsrTWF0aC5pbXVsKFcsZHQpfDAseT15K01hdGguaW11bChYLHZ0KXwwLHc9KHc9dytN''@;'; put 'put ''YXRoLmltdWwoWCxrdCl8MCkrTWF0aC5pbXVsKEssdnQpfDAsaz1rK01hdGguaW11bChLLGt0KXwwLHk9eStNYXRoLmltdWwoRixqdCl8MCx3PSh3PXcrTWF0aC5pbXVsKEYseHQpfDApK01hdGguaW11bChxLGp0KXwwLGs9aytNYXRoLmltdWwocSx4dCl8MDt2YXIgdXQ9KFYrKHk9eStNYXRo''@;'; put 'put ''LmltdWwoSCxXdCl8MCl8MCkrKCg4MTkxJih3PSh3PXcrTWF0aC5pbXVsKEgsWHQpfDApK01hdGguaW11bChULFd0KXwwKSk8PDEzKXwwO1Y9KChrPWsrTWF0aC5pbXVsKFQsWHQpfDApKyh3Pj4+MTMpfDApKyh1dD4+PjI2KXwwLHV0Jj02NzEwODg2Myx5PU1hdGguaW11bChndCxSdCksdz0o''@;'; put 'put ''dz1NYXRoLmltdWwoZ3QsTnQpKStNYXRoLmltdWwobXQsUnQpfDAsaz1NYXRoLmltdWwobXQsTnQpLHk9eStNYXRoLmltdWwoRXQsTHQpfDAsdz0odz13K01hdGguaW11bChFdCx6dCl8MCkrTWF0aC5pbXVsKF90LEx0KXwwLGs9aytNYXRoLmltdWwoX3QsenQpfDAseT15K01hdGguaW11bCh5''@;'; put 'put ''dCxCdCl8MCx3PSh3PXcrTWF0aC5pbXVsKHl0LFB0KXwwKStNYXRoLmltdWwod3QsQnQpfDAsaz1rK01hdGguaW11bCh3dCxQdCl8MCx5PXkrTWF0aC5pbXVsKGZ0LEZ0KXwwLHc9KHc9dytNYXRoLmltdWwoZnQsSXQpfDApK01hdGguaW11bChwdCxGdCl8MCxrPWsrTWF0aC5pbXVsKHB0LEl0''@;'; put 'put ''KXwwLHk9eStNYXRoLmltdWwoaXQsVXQpfDAsdz0odz13K01hdGguaW11bChpdCxKKXwwKStNYXRoLmltdWwob3QsVXQpfDAsaz1rK01hdGguaW11bChvdCxKKXwwLHk9eStNYXRoLmltdWwoRyxsdCl8MCx3PSh3PXcrTWF0aC5pbXVsKEcsZHQpfDApK01hdGguaW11bChldCxsdCl8MCxrPWsr''@;'; put 'put ''TWF0aC5pbXVsKGV0LGR0KXwwLHk9eStNYXRoLmltdWwodHQsdnQpfDAsdz0odz13K01hdGguaW11bCh0dCxrdCl8MCkrTWF0aC5pbXVsKFcsdnQpfDAsaz1rK01hdGguaW11bChXLGt0KXwwLHk9eStNYXRoLmltdWwoWCxqdCl8MCx3PSh3PXcrTWF0aC5pbXVsKFgseHQpfDApK01hdGguaW11''@;'; put 'put ''bChLLGp0KXwwLGs9aytNYXRoLmltdWwoSyx4dCl8MDt2YXIgYnQ9KFYrKHk9eStNYXRoLmltdWwoRixXdCl8MCl8MCkrKCg4MTkxJih3PSh3PXcrTWF0aC5pbXVsKEYsWHQpfDApK01hdGguaW11bChxLFd0KXwwKSk8PDEzKXwwO1Y9KChrPWsrTWF0aC5pbXVsKHEsWHQpfDApKyh3Pj4+MTMp''@;'; put 'put ''fDApKyhidD4+PjI2KXwwLGJ0Jj02NzEwODg2Myx5PU1hdGguaW11bChndCxMdCksdz0odz1NYXRoLmltdWwoZ3QsenQpKStNYXRoLmltdWwobXQsTHQpfDAsaz1NYXRoLmltdWwobXQsenQpLHk9eStNYXRoLmltdWwoRXQsQnQpfDAsdz0odz13K01hdGguaW11bChFdCxQdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKF90LEJ0KXwwLGs9aytNYXRoLmltdWwoX3QsUHQpfDAseT15K01hdGguaW11bCh5dCxGdCl8MCx3PSh3PXcrTWF0aC5pbXVsKHl0LEl0KXwwKStNYXRoLmltdWwod3QsRnQpfDAsaz1rK01hdGguaW11bCh3dCxJdCl8MCx5PXkrTWF0aC5pbXVsKGZ0LFV0KXwwLHc9KHc9dytNYXRoLmlt''@;'; put 'put ''dWwoZnQsSil8MCkrTWF0aC5pbXVsKHB0LFV0KXwwLGs9aytNYXRoLmltdWwocHQsSil8MCx5PXkrTWF0aC5pbXVsKGl0LGx0KXwwLHc9KHc9dytNYXRoLmltdWwoaXQsZHQpfDApK01hdGguaW11bChvdCxsdCl8MCxrPWsrTWF0aC5pbXVsKG90LGR0KXwwLHk9eStNYXRoLmltdWwoRyx2dCl8''@;'; put 'put ''MCx3PSh3PXcrTWF0aC5pbXVsKEcsa3QpfDApK01hdGguaW11bChldCx2dCl8MCxrPWsrTWF0aC5pbXVsKGV0LGt0KXwwLHk9eStNYXRoLmltdWwodHQsanQpfDAsdz0odz13K01hdGguaW11bCh0dCx4dCl8MCkrTWF0aC5pbXVsKFcsanQpfDAsaz1rK01hdGguaW11bChXLHh0KXwwO3ZhciBD''@;'; put 'put ''dD0oVisoeT15K01hdGguaW11bChYLFd0KXwwKXwwKSsoKDgxOTEmKHc9KHc9dytNYXRoLmltdWwoWCxYdCl8MCkrTWF0aC5pbXVsKEssV3QpfDApKTw8MTMpfDA7Vj0oKGs9aytNYXRoLmltdWwoSyxYdCl8MCkrKHc+Pj4xMyl8MCkrKEN0Pj4+MjYpfDAsQ3QmPTY3MTA4ODYzLHk9TWF0aC5p''@;'; put 'put ''bXVsKGd0LEJ0KSx3PSh3PU1hdGguaW11bChndCxQdCkpK01hdGguaW11bChtdCxCdCl8MCxrPU1hdGguaW11bChtdCxQdCkseT15K01hdGguaW11bChFdCxGdCl8MCx3PSh3PXcrTWF0aC5pbXVsKEV0LEl0KXwwKStNYXRoLmltdWwoX3QsRnQpfDAsaz1rK01hdGguaW11bChfdCxJdCl8MCx5''@;'; put 'put ''PXkrTWF0aC5pbXVsKHl0LFV0KXwwLHc9KHc9dytNYXRoLmltdWwoeXQsSil8MCkrTWF0aC5pbXVsKHd0LFV0KXwwLGs9aytNYXRoLmltdWwod3QsSil8MCx5PXkrTWF0aC5pbXVsKGZ0LGx0KXwwLHc9KHc9dytNYXRoLmltdWwoZnQsZHQpfDApK01hdGguaW11bChwdCxsdCl8MCxrPWsrTWF0''@;'; put 'put ''aC5pbXVsKHB0LGR0KXwwLHk9eStNYXRoLmltdWwoaXQsdnQpfDAsdz0odz13K01hdGguaW11bChpdCxrdCl8MCkrTWF0aC5pbXVsKG90LHZ0KXwwLGs9aytNYXRoLmltdWwob3Qsa3QpfDAseT15K01hdGguaW11bChHLGp0KXwwLHc9KHc9dytNYXRoLmltdWwoRyx4dCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KGV0LGp0KXwwLGs9aytNYXRoLmltdWwoZXQseHQpfDA7dmFyIE10PShWKyh5PXkrTWF0aC5pbXVsKHR0LFd0KXwwKXwwKSsoKDgxOTEmKHc9KHc9dytNYXRoLmltdWwodHQsWHQpfDApK01hdGguaW11bChXLFd0KXwwKSk8PDEzKXwwO1Y9KChrPWsrTWF0aC5pbXVsKFcsWHQpfDApKyh3Pj4+''@;'; put 'put ''MTMpfDApKyhNdD4+PjI2KXwwLE10Jj02NzEwODg2Myx5PU1hdGguaW11bChndCxGdCksdz0odz1NYXRoLmltdWwoZ3QsSXQpKStNYXRoLmltdWwobXQsRnQpfDAsaz1NYXRoLmltdWwobXQsSXQpLHk9eStNYXRoLmltdWwoRXQsVXQpfDAsdz0odz13K01hdGguaW11bChFdCxKKXwwKStNYXRo''@;'; put 'put ''LmltdWwoX3QsVXQpfDAsaz1rK01hdGguaW11bChfdCxKKXwwLHk9eStNYXRoLmltdWwoeXQsbHQpfDAsdz0odz13K01hdGguaW11bCh5dCxkdCl8MCkrTWF0aC5pbXVsKHd0LGx0KXwwLGs9aytNYXRoLmltdWwod3QsZHQpfDAseT15K01hdGguaW11bChmdCx2dCl8MCx3PSh3PXcrTWF0aC5p''@;'; put 'put ''bXVsKGZ0LGt0KXwwKStNYXRoLmltdWwocHQsdnQpfDAsaz1rK01hdGguaW11bChwdCxrdCl8MCx5PXkrTWF0aC5pbXVsKGl0LGp0KXwwLHc9KHc9dytNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bChvdCxqdCl8MCxrPWsrTWF0aC5pbXVsKG90LHh0KXwwO3ZhciBLdD0oVisoeT15K01h''@;'; put 'put ''dGguaW11bChHLFd0KXwwKXwwKSsoKDgxOTEmKHc9KHc9dytNYXRoLmltdWwoRyxYdCl8MCkrTWF0aC5pbXVsKGV0LFd0KXwwKSk8PDEzKXwwO1Y9KChrPWsrTWF0aC5pbXVsKGV0LFh0KXwwKSsodz4+PjEzKXwwKSsoS3Q+Pj4yNil8MCxLdCY9NjcxMDg4NjMseT1NYXRoLmltdWwoZ3QsVXQp''@;'; put 'put ''LHc9KHc9TWF0aC5pbXVsKGd0LEopKStNYXRoLmltdWwobXQsVXQpfDAsaz1NYXRoLmltdWwobXQsSikseT15K01hdGguaW11bChFdCxsdCl8MCx3PSh3PXcrTWF0aC5pbXVsKEV0LGR0KXwwKStNYXRoLmltdWwoX3QsbHQpfDAsaz1rK01hdGguaW11bChfdCxkdCl8MCx5PXkrTWF0aC5pbXVs''@;'; put 'put ''KHl0LHZ0KXwwLHc9KHc9dytNYXRoLmltdWwoeXQsa3QpfDApK01hdGguaW11bCh3dCx2dCl8MCxrPWsrTWF0aC5pbXVsKHd0LGt0KXwwLHk9eStNYXRoLmltdWwoZnQsanQpfDAsdz0odz13K01hdGguaW11bChmdCx4dCl8MCkrTWF0aC5pbXVsKHB0LGp0KXwwLGs9aytNYXRoLmltdWwocHQs''@;'; put 'put ''eHQpfDA7dmFyICR0PShWKyh5PXkrTWF0aC5pbXVsKGl0LFd0KXwwKXwwKSsoKDgxOTEmKHc9KHc9dytNYXRoLmltdWwoaXQsWHQpfDApK01hdGguaW11bChvdCxXdCl8MCkpPDwxMyl8MDtWPSgoaz1rK01hdGguaW11bChvdCxYdCl8MCkrKHc+Pj4xMyl8MCkrKCR0Pj4+MjYpfDAsJHQmPTY3''@;'; put 'put ''MTA4ODYzLHk9TWF0aC5pbXVsKGd0LGx0KSx3PSh3PU1hdGguaW11bChndCxkdCkpK01hdGguaW11bChtdCxsdCl8MCxrPU1hdGguaW11bChtdCxkdCkseT15K01hdGguaW11bChFdCx2dCl8MCx3PSh3PXcrTWF0aC5pbXVsKEV0LGt0KXwwKStNYXRoLmltdWwoX3QsdnQpfDAsaz1rK01hdGgu''@;'; put 'put ''aW11bChfdCxrdCl8MCx5PXkrTWF0aC5pbXVsKHl0LGp0KXwwLHc9KHc9dytNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bCh3dCxqdCl8MCxrPWsrTWF0aC5pbXVsKHd0LHh0KXwwO3ZhciBEdD0oVisoeT15K01hdGguaW11bChmdCxXdCl8MCl8MCkrKCg4MTkxJih3PSh3PXcrTWF0aC5p''@;'; put 'put ''bXVsKGZ0LFh0KXwwKStNYXRoLmltdWwocHQsV3QpfDApKTw8MTMpfDA7Vj0oKGs9aytNYXRoLmltdWwocHQsWHQpfDApKyh3Pj4+MTMpfDApKyhEdD4+PjI2KXwwLER0Jj02NzEwODg2Myx5PU1hdGguaW11bChndCx2dCksdz0odz1NYXRoLmltdWwoZ3Qsa3QpKStNYXRoLmltdWwobXQsdnQp''@;'; put 'put ''fDAsaz1NYXRoLmltdWwobXQsa3QpLHk9eStNYXRoLmltdWwoRXQsanQpfDAsdz0odz13K01hdGguaW11bChFdCx4dCl8MCkrTWF0aC5pbXVsKF90LGp0KXwwLGs9aytNYXRoLmltdWwoX3QseHQpfDA7dmFyIEh0PShWKyh5PXkrTWF0aC5pbXVsKHl0LFd0KXwwKXwwKSsoKDgxOTEmKHc9KHc9''@;'; put 'put ''dytNYXRoLmltdWwoeXQsWHQpfDApK01hdGguaW11bCh3dCxXdCl8MCkpPDwxMyl8MDtWPSgoaz1rK01hdGguaW11bCh3dCxYdCl8MCkrKHc+Pj4xMyl8MCkrKEh0Pj4+MjYpfDAsSHQmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKGd0LGp0KSx3PSh3PU1hdGguaW11bChndCx4dCkpK01hdGguaW11''@;'; put 'put ''bChtdCxqdCl8MCxrPU1hdGguaW11bChtdCx4dCk7dmFyIHNlPShWKyh5PXkrTWF0aC5pbXVsKEV0LFd0KXwwKXwwKSsoKDgxOTEmKHc9KHc9dytNYXRoLmltdWwoRXQsWHQpfDApK01hdGguaW11bChfdCxXdCl8MCkpPDwxMyl8MDtWPSgoaz1rK01hdGguaW11bChfdCxYdCl8MCkrKHc+Pj4x''@;'; put 'put ''Myl8MCkrKHNlPj4+MjYpfDAsc2UmPTY3MTA4ODYzO3ZhciBvZT0oVisoeT1NYXRoLmltdWwoZ3QsV3QpKXwwKSsoKDgxOTEmKHc9KHc9TWF0aC5pbXVsKGd0LFh0KSkrTWF0aC5pbXVsKG10LFd0KXwwKSk8PDEzKXwwO3JldHVybiBWPSgoaz1NYXRoLmltdWwobXQsWHQpKSsodz4+PjEzKXww''@;'; put 'put ''KSsob2U+Pj4yNil8MCxvZSY9NjcxMDg4NjMsVVswXT1yZSxVWzFdPWllLFVbMl09dWUsVVszXT1kZSxVWzRdPWxlLFVbNV09ZmUsVVs2XT1aLFVbN109c3QsVVs4XT1jdCxVWzldPXV0LFVbMTBdPWJ0LFVbMTFdPUN0LFVbMTJdPU10LFVbMTNdPUt0LFVbMTRdPSR0LFVbMTVdPUR0LFVbMTZd''@;'; put 'put ''PUh0LFVbMTddPXNlLFVbMThdPW9lLDAhPT1WJiYoVVsxOV09VixnLmxlbmd0aCsrKSxnfTtmdW5jdGlvbiBBKGMsbSxnKXtnLm5lZ2F0aXZlPW0ubmVnYXRpdmVeYy5uZWdhdGl2ZSxnLmxlbmd0aD1jLmxlbmd0aCttLmxlbmd0aDtmb3IodmFyIHk9MCx3PTAsaz0wO2s8Zy5sZW5ndGgtMTtr''@;'; put 'put ''Kyspe3ZhciBPPXc7dz0wO2Zvcih2YXIgej02NzEwODg2MyZ5LFU9TWF0aC5taW4oayxtLmxlbmd0aC0xKSxWPU1hdGgubWF4KDAsay1jLmxlbmd0aCsxKTtWPD1VO1YrKyl7dmFyIEg9KDB8Yy53b3Jkc1trLVZdKSooMHxtLndvcmRzW1ZdKSxUPTY3MTA4ODYzJkg7ej02NzEwODg2MyYoVD1U''@;'; put 'put ''K3p8MCksdys9KE89KE89TysoSC82NzEwODg2NHwwKXwwKSsoVD4+PjI2KXwwKT4+PjI2LE8mPTY3MTA4ODYzfWcud29yZHNba109eix5PU8sTz13fXJldHVybiAwIT09eT9nLndvcmRzW2tdPXk6Zy5sZW5ndGgtLSxnLl9zdHJpcCgpfWZ1bmN0aW9uIEkoYyxtLGcpe3JldHVybiBBKGMsbSxn''@;'; put 'put ''KX1mdW5jdGlvbiBMKGMsbSl7dGhpcy54PWMsdGhpcy55PW19TWF0aC5pbXVsfHwoXz12KSx0LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihjLG0pe3ZhciBnPXRoaXMubGVuZ3RoK2MubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PWMubGVuZ3RoP18odGhpcyxjLG0pOmc8''@;'; put 'put ''NjM/dih0aGlzLGMsbSk6ZzwxMDI0P0EodGhpcyxjLG0pOkkodGhpcyxjLG0pfSxMLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGMpe2Zvcih2YXIgbT1uZXcgQXJyYXkoYyksZz10LnByb3RvdHlwZS5fY291bnRCaXRzKGMpLTEseT0wO3k8Yzt5KyspbVt5XT10aGlzLnJldkJpbih5LGcs''@;'; put 'put ''Yyk7cmV0dXJuIG19LEwucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihjLG0sZyl7aWYoMD09PWN8fGM9PT1nLTEpcmV0dXJuIGM7Zm9yKHZhciB5PTAsdz0wO3c8bTt3KyspeXw9KDEmYyk8PG0tdy0xLGM+Pj0xO3JldHVybiB5fSxMLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGMsbSxn''@;'; put 'put ''LHksdyxrKXtmb3IodmFyIE89MDtPPGs7TysrKXlbT109bVtjW09dXSx3W09dPWdbY1tPXV19LEwucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihjLG0sZyx5LHcsayl7dGhpcy5wZXJtdXRlKGssYyxtLGcseSx3KTtmb3IodmFyIE89MTtPPHc7Tzw8PTEpZm9yKHZhciB6PU88PDEsVT1N''@;'; put 'put ''YXRoLmNvcygyKk1hdGguUEkveiksVj1NYXRoLnNpbigyKk1hdGguUEkveiksUj0wO1I8dztSKz16KWZvcih2YXIgSD1VLFQ9VixDPTA7QzxPO0MrKyl7dmFyIEY9Z1tSK0NdLHE9eVtSK0NdLFk9Z1tSK0MrT10sWD15W1IrQytPXSxLPUgqWS1UKlg7WD1IKlgrVCpZLGdbUitDXT1GKyhZPUsp''@;'; put 'put ''LHlbUitDXT1xK1gsZ1tSK0MrT109Ri1ZLHlbUitDK09dPXEtWCxDIT09eiYmKEs9VSpILVYqVCxUPVUqVCtWKkgsSD1LKX19LEwucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGMsbSl7dmFyIGc9MXxNYXRoLm1heChtLGMpLHk9MSZnLHc9MDtmb3IoZz1nLzJ8MDtnO2c+Pj49MSl3''@;'; put 'put ''Kys7cmV0dXJuIDE8PHcrMSt5fSxMLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oYyxtLGcpe2lmKCEoZzw9MSkpZm9yKHZhciB5PTA7eTxnLzI7eSsrKXt2YXIgdz1jW3ldO2NbeV09Y1tnLXktMV0sY1tnLXktMV09dyx3PW1beV0sbVt5XT0tbVtnLXktMV0sbVtnLXktMV09LXd9fSxM''@;'; put 'put ''LnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oYyxtKXtmb3IodmFyIGc9MCx5PTA7eTxtLzI7eSsrKXt2YXIgdz04MTkyKk1hdGgucm91bmQoY1syKnkrMV0vbSkrTWF0aC5yb3VuZChjWzIqeV0vbSkrZztjW3ldPTY3MTA4ODYzJncsZz13PDY3MTA4ODY0PzA6dy82NzEwODg2NHww''@;'; put 'put ''fXJldHVybiBjfSxMLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGMsbSxnLHkpe2Zvcih2YXIgdz0wLGs9MDtrPG07aysrKWdbMiprXT04MTkxJih3Kz0wfGNba10pLGdbMiprKzFdPTgxOTEmKHc+Pj49MTMpLHc+Pj49MTM7Zm9yKGs9MiptO2s8eTsrK2spZ1trXT0wO28oMD09PXcp''@;'; put 'put ''LG8oISgtODE5MiZ3KSl9LEwucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oYyl7Zm9yKHZhciBtPW5ldyBBcnJheShjKSxnPTA7ZzxjO2crKyltW2ddPTA7cmV0dXJuIG19LEwucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oYyxtLGcpe3ZhciB5PTIqdGhpcy5ndWVzc0xlbjEzYihjLmxlbmd0aCxt''@;'; put 'put ''Lmxlbmd0aCksdz10aGlzLm1ha2VSQlQoeSksaz10aGlzLnN0dWIoeSksTz1uZXcgQXJyYXkoeSksej1uZXcgQXJyYXkoeSksVT1uZXcgQXJyYXkoeSksVj1uZXcgQXJyYXkoeSksUj1uZXcgQXJyYXkoeSksSD1uZXcgQXJyYXkoeSksVD1nLndvcmRzO1QubGVuZ3RoPXksdGhpcy5jb252ZXJ0''@;'; put 'put ''MTNiKGMud29yZHMsYy5sZW5ndGgsTyx5KSx0aGlzLmNvbnZlcnQxM2IobS53b3JkcyxtLmxlbmd0aCxWLHkpLHRoaXMudHJhbnNmb3JtKE8sayx6LFUseSx3KSx0aGlzLnRyYW5zZm9ybShWLGssUixILHksdyk7Zm9yKHZhciBDPTA7Qzx5O0MrKyl7dmFyIEY9eltDXSpSW0NdLVVbQ10qSFtD''@;'; put 'put ''XTtVW0NdPXpbQ10qSFtDXStVW0NdKlJbQ10seltDXT1GfXJldHVybiB0aGlzLmNvbmp1Z2F0ZSh6LFUseSksdGhpcy50cmFuc2Zvcm0oeixVLFQsayx5LHcpLHRoaXMuY29uanVnYXRlKFQsayx5KSx0aGlzLm5vcm1hbGl6ZTEzYihULHkpLGcubmVnYXRpdmU9Yy5uZWdhdGl2ZV5tLm5lZ2F0''@;'; put 'put ''aXZlLGcubGVuZ3RoPWMubGVuZ3RoK20ubGVuZ3RoLGcuX3N0cmlwKCl9LHQucHJvdG90eXBlLm11bD1mdW5jdGlvbihjKXt2YXIgbT1uZXcgdChudWxsKTtyZXR1cm4gbS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrYy5sZW5ndGgpLHRoaXMubXVsVG8oYyxtKX0sdC5wcm90b3R5cGUu''@;'; put 'put ''bXVsZj1mdW5jdGlvbihjKXt2YXIgbT1uZXcgdChudWxsKTtyZXR1cm4gbS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrYy5sZW5ndGgpLEkodGhpcyxjLG0pfSx0LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oYyx0aGlzKX0sdC5wcm90''@;'; put 'put ''b3R5cGUuaW11bG49ZnVuY3Rpb24oYyl7dmFyIG09YzwwO20mJihjPS1jKSxvKCJudW1iZXIiPT10eXBlb2YgYyksbyhjPDY3MTA4ODY0KTtmb3IodmFyIGc9MCx5PTA7eTx0aGlzLmxlbmd0aDt5Kyspe3ZhciB3PSgwfHRoaXMud29yZHNbeV0pKmMsaz0oNjcxMDg4NjMmdykrKDY3MTA4ODYz''@;'; put 'put ''JmcpO2c+Pj0yNixnKz13LzY3MTA4ODY0fDAsZys9az4+PjI2LHRoaXMud29yZHNbeV09NjcxMDg4NjMma31yZXR1cm4gMCE9PWcmJih0aGlzLndvcmRzW3ldPWcsdGhpcy5sZW5ndGgrKyksbT90aGlzLmluZWcoKTp0aGlzfSx0LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGMpe3JldHVybiB0''@;'; put 'put ''aGlzLmNsb25lKCkuaW11bG4oYyl9LHQucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGMpe3ZhciBt''@;'; put 'put ''PWZ1bmN0aW9uKGspe2Zvcih2YXIgTz1uZXcgQXJyYXkoay5iaXRMZW5ndGgoKSksej0wO3o8Ty5sZW5ndGg7eisrKU9bel09ay53b3Jkc1t6LzI2fDBdPj4+eiUyNiYxO3JldHVybiBPfShjKTtpZigwPT09bS5sZW5ndGgpcmV0dXJuIG5ldyB0KDEpO2Zvcih2YXIgZz10aGlzLHk9MDt5PG0u''@;'; put 'put ''bGVuZ3RoJiYwPT09bVt5XTt5KyssZz1nLnNxcigpKTtpZigrK3k8bS5sZW5ndGgpZm9yKHZhciB3PWcuc3FyKCk7eTxtLmxlbmd0aDt5Kyssdz13LnNxcigpKTAhPT1tW3ldJiYoZz1nLm11bCh3KSk7cmV0dXJuIGd9LHQucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihjKXtvKCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgYyYmYz49MCk7dmFyIG0sZz1jJTI2LHk9KGMtZykvMjYsdz02NzEwODg2Mz4+PjI2LWc8PDI2LWc7aWYoMCE9PWcpe3ZhciBrPTA7Zm9yKG09MDttPHRoaXMubGVuZ3RoO20rKyl7dmFyIE89dGhpcy53b3Jkc1ttXSZ3O3RoaXMud29yZHNbbV09KDB8dGhpcy53b3Jkc1ttXSkt''@;'; put 'put ''Tzw8Z3xrLGs9Tz4+PjI2LWd9ayYmKHRoaXMud29yZHNbbV09ayx0aGlzLmxlbmd0aCsrKX1pZigwIT09eSl7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wO20tLSl0aGlzLndvcmRzW20reV09dGhpcy53b3Jkc1ttXTtmb3IobT0wO208eTttKyspdGhpcy53b3Jkc1ttXT0wO3RoaXMubGVuZ3Ro''@;'; put 'put ''Kz15fXJldHVybiB0aGlzLl9zdHJpcCgpfSx0LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihjKXtyZXR1cm4gbygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oYyl9LHQucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihjLG0sZyl7dmFyIHk7bygibnVtYmVyIj09dHlwZW9mIGMmJmM+''@;'; put 'put ''PTApLHk9bT8obS1tJTI2KS8yNjowO3ZhciB3PWMlMjYsaz1NYXRoLm1pbigoYy13KS8yNix0aGlzLmxlbmd0aCksTz02NzEwODg2M142NzEwODg2Mz4+Pnc8PHcsej1nO2lmKHktPWsseT1NYXRoLm1heCgwLHkpLHope2Zvcih2YXIgVT0wO1U8aztVKyspei53b3Jkc1tVXT10aGlzLndvcmRz''@;'; put 'put ''W1VdO3oubGVuZ3RoPWt9aWYoMCE9PWspaWYodGhpcy5sZW5ndGg+aylmb3IodGhpcy5sZW5ndGgtPWssVT0wO1U8dGhpcy5sZW5ndGg7VSsrKXRoaXMud29yZHNbVV09dGhpcy53b3Jkc1tVK2tdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIFY9MDtmb3IoVT10aGlz''@;'; put 'put ''Lmxlbmd0aC0xO1U+PTAmJigwIT09Vnx8VT49eSk7VS0tKXt2YXIgUj0wfHRoaXMud29yZHNbVV07dGhpcy53b3Jkc1tVXT1WPDwyNi13fFI+Pj53LFY9UiZPfXJldHVybiB6JiYwIT09ViYmKHoud29yZHNbei5sZW5ndGgrK109ViksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0w''@;'; put 'put ''LHRoaXMubGVuZ3RoPTEpLHRoaXMuX3N0cmlwKCl9LHQucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGMsbSxnKXtyZXR1cm4gbygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oYyxtLGcpfSx0LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNo''@;'; put 'put ''bG4oYyl9LHQucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGMpfSx0LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oYyl9LHQucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGMpe3JldHVybiB0''@;'; put 'put ''aGlzLmNsb25lKCkuaXVzaHJuKGMpfSx0LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihjKXtvKCJudW1iZXIiPT10eXBlb2YgYyYmYz49MCk7dmFyIG09YyUyNixnPShjLW0pLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PWd8fCEodGhpcy53b3Jkc1tnXSYxPDxtKSl9LHQucHJvdG90eXBlLmlt''@;'; put 'put ''YXNrbj1mdW5jdGlvbihjKXtvKCJudW1iZXIiPT10eXBlb2YgYyYmYz49MCk7dmFyIG09YyUyNixnPShjLW0pLzI2O3JldHVybiBvKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9Zz90aGlzOigwIT09bSYm''@;'; put 'put ''ZysrLHRoaXMubGVuZ3RoPU1hdGgubWluKGcsdGhpcy5sZW5ndGgpLDAhPT1tJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5tPDxtKSx0aGlzLl9zdHJpcCgpKX0sdC5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuY2xvbmUo''@;'; put 'put ''KS5pbWFza24oYyl9LHQucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGMpe3JldHVybiBvKCJudW1iZXIiPT10eXBlb2YgYyksbyhjPDY3MTA4ODY0KSxjPDA/dGhpcy5pc3VibigtYyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTw9Yz8odGhp''@;'; put 'put ''cy53b3Jkc1swXT1jLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oYyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGMpfSx0LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oYyl7dGhpcy53b3Jkc1sw''@;'; put 'put ''XSs9Yztmb3IodmFyIG09MDttPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW21dPj02NzEwODg2NDttKyspdGhpcy53b3Jkc1ttXS09NjcxMDg4NjQsbT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1ttKzFdPTE6dGhpcy53b3Jkc1ttKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4''@;'; put 'put ''KHRoaXMubGVuZ3RoLG0rMSksdGhpc30sdC5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oYyl7aWYobygibnVtYmVyIj09dHlwZW9mIGMpLG8oYzw2NzEwODg2NCksYzwwKXJldHVybiB0aGlzLmlhZGRuKC1jKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRo''@;'; put 'put ''aXMuaWFkZG4oYyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09YywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgbT0wO208dGhpcy5sZW5ndGgmJnRo''@;'; put 'put ''aXMud29yZHNbbV08MDttKyspdGhpcy53b3Jkc1ttXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1ttKzFdLT0xO3JldHVybiB0aGlzLl9zdHJpcCgpfSx0LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oYyl9LHQucHJvdG90eXBlLnN1Ym49ZnVuY3Rp''@;'; put 'put ''b24oYyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihjKX0sdC5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdC5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHQucHJvdG90eXBlLl9pc2hs''@;'; put 'put ''bnN1Ym11bD1mdW5jdGlvbihjLG0sZyl7dmFyIHksdzt0aGlzLl9leHBhbmQoYy5sZW5ndGgrZyk7dmFyIE89MDtmb3IoeT0wO3k8Yy5sZW5ndGg7eSsrKXt3PSgwfHRoaXMud29yZHNbeStnXSkrTzt2YXIgej0oMHxjLndvcmRzW3ldKSptO089KCh3LT02NzEwODg2MyZ6KT4+MjYpLSh6LzY3''@;'; put 'put ''MTA4ODY0fDApLHRoaXMud29yZHNbeStnXT02NzEwODg2MyZ3fWZvcig7eTx0aGlzLmxlbmd0aC1nO3krKylPPSh3PSgwfHRoaXMud29yZHNbeStnXSkrTyk+PjI2LHRoaXMud29yZHNbeStnXT02NzEwODg2MyZ3O2lmKDA9PT1PKXJldHVybiB0aGlzLl9zdHJpcCgpO2ZvcihvKC0xPT09Tyks''@;'; put 'put ''Tz0wLHk9MDt5PHRoaXMubGVuZ3RoO3krKylPPSh3PS0oMHx0aGlzLndvcmRzW3ldKStPKT4+MjYsdGhpcy53b3Jkc1t5XT02NzEwODg2MyZ3O3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fc3RyaXAoKX0sdC5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oYyxtKXt2YXIgZyx5PXRo''@;'; put 'put ''aXMuY2xvbmUoKSx3PWMsaz0wfHcud29yZHNbdy5sZW5ndGgtMV07MCE9KGc9MjYtdGhpcy5fY291bnRCaXRzKGspKSYmKHc9dy51c2hsbihnKSx5Lml1c2hsbihnKSxrPTB8dy53b3Jkc1t3Lmxlbmd0aC0xXSk7dmFyIE8sej15Lmxlbmd0aC13Lmxlbmd0aDtpZigibW9kIiE9PW0peyhPPW5l''@;'; put 'put ''dyB0KG51bGwpKS5sZW5ndGg9eisxLE8ud29yZHM9bmV3IEFycmF5KE8ubGVuZ3RoKTtmb3IodmFyIFU9MDtVPE8ubGVuZ3RoO1UrKylPLndvcmRzW1VdPTB9dmFyIFY9eS5jbG9uZSgpLl9pc2hsbnN1Ym11bCh3LDEseik7MD09PVYubmVnYXRpdmUmJih5PVYsTyYmKE8ud29yZHNbel09MSkp''@;'; put 'put ''O2Zvcih2YXIgUj16LTE7Uj49MDtSLS0pe3ZhciBIPTY3MTA4ODY0KigwfHkud29yZHNbdy5sZW5ndGgrUl0pKygwfHkud29yZHNbdy5sZW5ndGgrUi0xXSk7Zm9yKEg9TWF0aC5taW4oSC9rfDAsNjcxMDg4NjMpLHkuX2lzaGxuc3VibXVsKHcsSCxSKTswIT09eS5uZWdhdGl2ZTspSC0tLHku''@;'; put 'put ''bmVnYXRpdmU9MCx5Ll9pc2hsbnN1Ym11bCh3LDEsUikseS5pc1plcm8oKXx8KHkubmVnYXRpdmVePTEpO08mJihPLndvcmRzW1JdPUgpfXJldHVybiBPJiZPLl9zdHJpcCgpLHkuX3N0cmlwKCksImRpdiIhPT1tJiYwIT09ZyYmeS5pdXNocm4oZykse2RpdjpPfHxudWxsLG1vZDp5fX0sdC5w''@;'; put 'put ''cm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGMsbSxnKXtyZXR1cm4gbyghYy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB0KDApLG1vZDpuZXcgdCgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1jLm5lZ2F0aXZlPyhrPXRoaXMubmVnKCkuZGl2bW9kKGMsbSksIm1vZCIhPT1t''@;'; put 'put ''JiYoeT1rLmRpdi5uZWcoKSksImRpdiIhPT1tJiYodz1rLm1vZC5uZWcoKSxnJiYwIT09dy5uZWdhdGl2ZSYmdy5pYWRkKGMpKSx7ZGl2OnksbW9kOnd9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWMubmVnYXRpdmU/KGs9dGhpcy5kaXZtb2QoYy5uZWcoKSxtKSwibW9kIiE9PW0mJih5PWsu''@;'; put 'put ''ZGl2Lm5lZygpKSx7ZGl2OnksbW9kOmsubW9kfSk6MCE9KHRoaXMubmVnYXRpdmUmYy5uZWdhdGl2ZSk/KGs9dGhpcy5uZWcoKS5kaXZtb2QoYy5uZWcoKSxtKSwiZGl2IiE9PW0mJih3PWsubW9kLm5lZygpLGcmJjAhPT13Lm5lZ2F0aXZlJiZ3LmlzdWIoYykpLHtkaXY6ay5kaXYsbW9kOnd9''@;'; put 'put ''KTpjLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoYyk8MD97ZGl2Om5ldyB0KDApLG1vZDp0aGlzfToxPT09Yy5sZW5ndGg/ImRpdiI9PT1tP3tkaXY6dGhpcy5kaXZuKGMud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PW0/e2RpdjpudWxsLG1vZDpuZXcgdCh0aGlzLm1vZHJuKGMu''@;'; put 'put ''d29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oYy53b3Jkc1swXSksbW9kOm5ldyB0KHRoaXMubW9kcm4oYy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGMsbSk7dmFyIHksdyxrfSx0LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuZGl2bW9kKGMsImRpdiIsITEpLmRp''@;'; put 'put ''dn0sdC5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmRpdm1vZChjLCJtb2QiLCExKS5tb2R9LHQucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuZGl2bW9kKGMsIm1vZCIsITApLm1vZH0sdC5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oYyl7''@;'; put 'put ''dmFyIG09dGhpcy5kaXZtb2QoYyk7aWYobS5tb2QuaXNaZXJvKCkpcmV0dXJuIG0uZGl2O3ZhciBnPTAhPT1tLmRpdi5uZWdhdGl2ZT9tLm1vZC5pc3ViKGMpOm0ubW9kLHk9Yy51c2hybigxKSx3PWMuYW5kbG4oMSksaz1nLmNtcCh5KTtyZXR1cm4gazwwfHwxPT09dyYmMD09PWs/bS5kaXY6''@;'; put 'put ''MCE9PW0uZGl2Lm5lZ2F0aXZlP20uZGl2LmlzdWJuKDEpOm0uZGl2LmlhZGRuKDEpfSx0LnByb3RvdHlwZS5tb2Rybj1mdW5jdGlvbihjKXt2YXIgbT1jPDA7bSYmKGM9LWMpLG8oYzw9NjcxMDg4NjMpO2Zvcih2YXIgZz0oMTw8MjYpJWMseT0wLHc9dGhpcy5sZW5ndGgtMTt3Pj0wO3ctLSl5''@;'; put 'put ''PShnKnkrKDB8dGhpcy53b3Jkc1t3XSkpJWM7cmV0dXJuIG0/LXk6eX0sdC5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5tb2RybihjKX0sdC5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oYyl7dmFyIG09YzwwO20mJihjPS1jKSxvKGM8PTY3MTA4ODYzKTtmb3IodmFy''@;'; put 'put ''IGc9MCx5PXRoaXMubGVuZ3RoLTE7eT49MDt5LS0pe3ZhciB3PSgwfHRoaXMud29yZHNbeV0pKzY3MTA4ODY0Kmc7dGhpcy53b3Jkc1t5XT13L2N8MCxnPXclY31yZXR1cm4gdGhpcy5fc3RyaXAoKSxtP3RoaXMuaW5lZygpOnRoaXN9LHQucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oYyl7cmV0''@;'; put 'put ''dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihjKX0sdC5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihjKXtvKDA9PT1jLm5lZ2F0aXZlKSxvKCFjLmlzWmVybygpKTt2YXIgbT10aGlzLGc9Yy5jbG9uZSgpO209MCE9PW0ubmVnYXRpdmU/bS51bW9kKGMpOm0uY2xvbmUoKTtmb3IodmFyIHk9bmV3IHQo''@;'; put 'put ''MSksdz1uZXcgdCgwKSxrPW5ldyB0KDApLE89bmV3IHQoMSksej0wO20uaXNFdmVuKCkmJmcuaXNFdmVuKCk7KW0uaXVzaHJuKDEpLGcuaXVzaHJuKDEpLCsrejtmb3IodmFyIFU9Zy5jbG9uZSgpLFY9bS5jbG9uZSgpOyFtLmlzWmVybygpOyl7Zm9yKHZhciBSPTAsSD0xOzA9PShtLndvcmRz''@;'; put 'put ''WzBdJkgpJiZSPDI2OysrUixIPDw9MSk7aWYoUj4wKWZvcihtLml1c2hybihSKTtSLS0gPjA7KSh5LmlzT2RkKCl8fHcuaXNPZGQoKSkmJih5LmlhZGQoVSksdy5pc3ViKFYpKSx5Lml1c2hybigxKSx3Lml1c2hybigxKTtmb3IodmFyIFQ9MCxDPTE7MD09KGcud29yZHNbMF0mQykmJlQ8MjY7''@;'; put 'put ''KytULEM8PD0xKTtpZihUPjApZm9yKGcuaXVzaHJuKFQpO1QtLSA+MDspKGsuaXNPZGQoKXx8Ty5pc09kZCgpKSYmKGsuaWFkZChVKSxPLmlzdWIoVikpLGsuaXVzaHJuKDEpLE8uaXVzaHJuKDEpO20uY21wKGcpPj0wPyhtLmlzdWIoZykseS5pc3ViKGspLHcuaXN1YihPKSk6KGcuaXN1Yiht''@;'; put 'put ''KSxrLmlzdWIoeSksTy5pc3ViKHcpKX1yZXR1cm57YTprLGI6TyxnY2Q6Zy5pdXNobG4oeil9fSx0LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oYyl7bygwPT09Yy5uZWdhdGl2ZSksbyghYy5pc1plcm8oKSk7dmFyIG09dGhpcyxnPWMuY2xvbmUoKTttPTAhPT1tLm5lZ2F0aXZlP20udW1v''@;'; put 'put ''ZChjKTptLmNsb25lKCk7Zm9yKHZhciB5LHc9bmV3IHQoMSksaz1uZXcgdCgwKSxPPWcuY2xvbmUoKTttLmNtcG4oMSk+MCYmZy5jbXBuKDEpPjA7KXtmb3IodmFyIHo9MCxVPTE7MD09KG0ud29yZHNbMF0mVSkmJno8MjY7Kyt6LFU8PD0xKTtpZih6PjApZm9yKG0uaXVzaHJuKHopO3otLSA+''@;'; put 'put ''MDspdy5pc09kZCgpJiZ3LmlhZGQoTyksdy5pdXNocm4oMSk7Zm9yKHZhciBWPTAsUj0xOzA9PShnLndvcmRzWzBdJlIpJiZWPDI2OysrVixSPDw9MSk7aWYoVj4wKWZvcihnLml1c2hybihWKTtWLS0gPjA7KWsuaXNPZGQoKSYmay5pYWRkKE8pLGsuaXVzaHJuKDEpO20uY21wKGcpPj0wPyht''@;'; put 'put ''LmlzdWIoZyksdy5pc3ViKGspKTooZy5pc3ViKG0pLGsuaXN1Yih3KSl9cmV0dXJuKHk9MD09PW0uY21wbigxKT93OmspLmNtcG4oMCk8MCYmeS5pYWRkKGMpLHl9LHQucHJvdG90eXBlLmdjZD1mdW5jdGlvbihjKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBjLmFicygpO2lmKGMuaXNaZXJv''@;'; put 'put ''KCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIG09dGhpcy5jbG9uZSgpLGc9Yy5jbG9uZSgpO20ubmVnYXRpdmU9MCxnLm5lZ2F0aXZlPTA7Zm9yKHZhciB5PTA7bS5pc0V2ZW4oKSYmZy5pc0V2ZW4oKTt5KyspbS5pdXNocm4oMSksZy5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO20uaXNFdmVuKCk7''@;'; put 'put ''KW0uaXVzaHJuKDEpO2Zvcig7Zy5pc0V2ZW4oKTspZy5pdXNocm4oMSk7dmFyIHc9bS5jbXAoZyk7aWYodzwwKXt2YXIgaz1tO209ZyxnPWt9ZWxzZSBpZigwPT09d3x8MD09PWcuY21wbigxKSlicmVhazttLmlzdWIoZyl9cmV0dXJuIGcuaXVzaGxuKHkpfSx0LnByb3RvdHlwZS5pbnZtPWZ1''@;'; put 'put ''bmN0aW9uKGMpe3JldHVybiB0aGlzLmVnY2QoYykuYS51bW9kKGMpfSx0LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHQucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdC5wcm90b3R5cGUu''@;'; put 'put ''YW5kbG49ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMud29yZHNbMF0mY30sdC5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oYyl7bygibnVtYmVyIj09dHlwZW9mIGMpO3ZhciBtPWMlMjYsZz0oYy1tKS8yNix5PTE8PG07aWYodGhpcy5sZW5ndGg8PWcpcmV0dXJuIHRoaXMuX2V4cGFuZChnKzEp''@;'; put 'put ''LHRoaXMud29yZHNbZ118PXksdGhpcztmb3IodmFyIHc9eSxrPWc7MCE9PXcmJms8dGhpcy5sZW5ndGg7aysrKXt2YXIgTz0wfHRoaXMud29yZHNba107dz0oTys9dyk+Pj4yNix0aGlzLndvcmRzW2tdPU8mPTY3MTA4ODYzfXJldHVybiAwIT09dyYmKHRoaXMud29yZHNba109dyx0aGlzLmxl''@;'; put 'put ''bmd0aCsrKSx0aGlzfSx0LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdC5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihjKXt2YXIgbSxnPWM8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWcpcmV0dXJuLTE7aWYo''@;'; put 'put ''MD09PXRoaXMubmVnYXRpdmUmJmcpcmV0dXJuIDE7aWYodGhpcy5fc3RyaXAoKSx0aGlzLmxlbmd0aD4xKW09MTtlbHNle2cmJihjPS1jKSxvKGM8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciB5PTB8dGhpcy53b3Jkc1swXTttPXk9PT1jPzA6eTxjPy0xOjF9cmV0dXJuIDAh''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlPzB8LW06bX0sdC5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGMpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWMubmVnYXRpdmUpcmV0dXJuIDE7dmFyIG09dGhpcy51Y21wKGMpO3Jl''@;'; put 'put ''dHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1tOm19LHQucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oYyl7aWYodGhpcy5sZW5ndGg+Yy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Yy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBtPTAsZz10aGlzLmxlbmd0aC0xO2c+PTA7Zy0tKXt2''@;'; put 'put ''YXIgeT0wfHRoaXMud29yZHNbZ10sdz0wfGMud29yZHNbZ107aWYoeSE9PXcpe3k8dz9tPS0xOnk+dyYmKG09MSk7YnJlYWt9fXJldHVybiBtfSx0LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oYyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oYyl9LHQucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGMpe3Jl''@;'; put 'put ''dHVybiAxPT09dGhpcy5jbXAoYyl9LHQucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuY21wbihjKT49MH0sdC5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmNtcChjKT49MH0sdC5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGMpe3JldHVybi0xPT09''@;'; put 'put ''dGhpcy5jbXBuKGMpfSx0LnByb3RvdHlwZS5sdD1mdW5jdGlvbihjKXtyZXR1cm4tMT09PXRoaXMuY21wKGMpfSx0LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmNtcG4oYyk8PTB9LHQucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5jbXAoYyk8''@;'; put 'put ''PTB9LHQucHJvdG90eXBlLmVxbj1mdW5jdGlvbihjKXtyZXR1cm4gMD09PXRoaXMuY21wbihjKX0sdC5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oYyl7cmV0dXJuIDA9PT10aGlzLmNtcChjKX0sdC5yZWQ9ZnVuY3Rpb24oYyl7cmV0dXJuIG5ldyBNKGMpfSx0LnByb3RvdHlwZS50b1JlZD1mdW5j''@;'; put 'put ''dGlvbihjKXtyZXR1cm4gbyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxvKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGMuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChjKX0sdC5wcm90b3R5cGUu''@;'; put 'put ''ZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHQucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihjKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5yZWQ9Yyx0aGlzfSx0LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihjKXtyZXR1cm4gbyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChjKX0sdC5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGMpe3JldHVybiBv''@;'; put 'put ''KHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsYyl9LHQucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oYyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y''@;'; put 'put ''ZWQuaWFkZCh0aGlzLGMpfSx0LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oYyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxjKX0sdC5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihjKXtyZXR1cm4g''@;'; put 'put ''byh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsYyl9LHQucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihjKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMu''@;'; put 'put ''cmVkLnNobCh0aGlzLGMpfSx0LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oYyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGMpLHRoaXMucmVkLm11bCh0aGlzLGMpfSx0LnByb3RvdHlwZS5y''@;'; put 'put ''ZWRJTXVsPWZ1bmN0aW9uKGMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxjKSx0aGlzLnJlZC5pbXVsKHRoaXMsYyl9LHQucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBvKHRo''@;'; put 'put ''aXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx0LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJl''@;'; put 'put ''ZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdC5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRo''@;'; put 'put ''aXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHQucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx0LnByb3Rv''@;'; put 'put ''dHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdC5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGMpe3JldHVybiBvKHRo''@;'; put 'put ''aXMucmVkJiYhYy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsYyl9O3ZhciBOPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gUChjLG0pe3RoaXMubmFtZT1jLHRoaXMu''@;'; put 'put ''cD1uZXcgdChtLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdCgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gQigpe1AuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiAkKCl7UC5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIEQoKXtQLmNhbGwo''@;'; put 'put ''dGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24geCgpe1AuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZm''@;'; put 'put ''ZmZmZWQiKX1mdW5jdGlvbiBNKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYyl7dmFyIG09dC5fcHJpbWUoYyk7dGhpcy5tPW0ucCx0aGlzLnByaW1lPW19ZWxzZSBvKGMuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Yyx0aGlzLnByaW1lPW51bGx9ZnVu''@;'; put 'put ''Y3Rpb24gaihjKXtNLmNhbGwodGhpcyxjKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB0KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIu''@;'; put 'put ''c3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfVAucHJvdG90''@;'; put 'put ''eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgYz1uZXcgdChudWxsKTtyZXR1cm4gYy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGN9LFAucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oYyl7dmFyIG0sZz1jO2Rve3RoaXMuc3BsaXQoZyx0aGlzLnRtcCksbT0oZz0oZz10''@;'; put 'put ''aGlzLmltdWxLKGcpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUobT50aGlzLm4pO3ZhciB5PW08dGhpcy5uPy0xOmcudWNtcCh0aGlzLnApO3JldHVybiAwPT09eT8oZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEpOnk+MD9nLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1nLnN0cmlw''@;'; put 'put ''P2cuc3RyaXAoKTpnLl9zdHJpcCgpLGd9LFAucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGMsbSl7Yy5pdXNocm4odGhpcy5uLDAsbSl9LFAucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGMpe3JldHVybiBjLmltdWwodGhpcy5rKX0scihCLFApLEIucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9u''@;'; put 'put ''KGMsbSl7Zm9yKHZhciBnPU1hdGgubWluKGMubGVuZ3RoLDkpLHk9MDt5PGc7eSsrKW0ud29yZHNbeV09Yy53b3Jkc1t5XTtpZihtLmxlbmd0aD1nLGMubGVuZ3RoPD05KXJldHVybiBjLndvcmRzWzBdPTAsdm9pZChjLmxlbmd0aD0xKTt2YXIgdz1jLndvcmRzWzldO2ZvcihtLndvcmRzW20u''@;'; put 'put ''bGVuZ3RoKytdPTQxOTQzMDMmdyx5PTEwO3k8Yy5sZW5ndGg7eSsrKXt2YXIgaz0wfGMud29yZHNbeV07Yy53b3Jkc1t5LTEwXT0oNDE5NDMwMyZrKTw8NHx3Pj4+MjIsdz1rfWMud29yZHNbeS0xMF09dz4+Pj0yMixjLmxlbmd0aC09MD09PXcmJmMubGVuZ3RoPjEwPzEwOjl9LEIucHJvdG90''@;'; put 'put ''eXBlLmltdWxLPWZ1bmN0aW9uKGMpe2Mud29yZHNbYy5sZW5ndGhdPTAsYy53b3Jkc1tjLmxlbmd0aCsxXT0wLGMubGVuZ3RoKz0yO2Zvcih2YXIgbT0wLGc9MDtnPGMubGVuZ3RoO2crKyl7dmFyIHk9MHxjLndvcmRzW2ddO2Mud29yZHNbZ109NjcxMDg4NjMmKG0rPTk3Nyp5KSxtPTY0Knkr''@;'; put 'put ''KG0vNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1jLndvcmRzW2MubGVuZ3RoLTFdJiYoYy5sZW5ndGgtLSwwPT09Yy53b3Jkc1tjLmxlbmd0aC0xXSYmYy5sZW5ndGgtLSksY30scigkLFApLHIoRCxQKSxyKHgsUCkseC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYyl7Zm9yKHZhciBtPTAsZz0w''@;'; put 'put ''O2c8Yy5sZW5ndGg7ZysrKXt2YXIgeT0xOSooMHxjLndvcmRzW2ddKSttLHc9NjcxMDg4NjMmeTt5Pj4+PTI2LGMud29yZHNbZ109dyxtPXl9cmV0dXJuIDAhPT1tJiYoYy53b3Jkc1tjLmxlbmd0aCsrXT1tKSxjfSx0Ll9wcmltZT1mdW5jdGlvbihjKXtpZihOW2NdKXJldHVybiBOW2NdO3Zh''@;'; put 'put ''ciBtO2lmKCJrMjU2Ij09PWMpbT1uZXcgQjtlbHNlIGlmKCJwMjI0Ij09PWMpbT1uZXcgJDtlbHNlIGlmKCJwMTkyIj09PWMpbT1uZXcgRDtlbHNle2lmKCJwMjU1MTkiIT09Yyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitjKTttPW5ldyB4fXJldHVybiBOW2NdPW0sbX0sTS5w''@;'; put 'put ''cm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oYyl7bygwPT09Yy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxvKGMucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LE0ucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGMsbSl7bygwPT0o''@;'; put 'put ''Yy5uZWdhdGl2ZXxtLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxvKGMucmVkJiZjLnJlZD09PW0ucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LE0ucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMucHJpbWU/dGhp''@;'; put 'put ''cy5wcmltZS5pcmVkdWNlKGMpLl9mb3JjZVJlZCh0aGlzKTooaChjLGMudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKSksYyl9LE0ucHJvdG90eXBlLm5lZz1mdW5jdGlvbihjKXtyZXR1cm4gYy5pc1plcm8oKT9jLmNsb25lKCk6dGhpcy5tLnN1YihjKS5fZm9yY2VSZWQodGhpcyl9LE0u''@;'; put 'put ''cHJvdG90eXBlLmFkZD1mdW5jdGlvbihjLG0pe3RoaXMuX3ZlcmlmeTIoYyxtKTt2YXIgZz1jLmFkZChtKTtyZXR1cm4gZy5jbXAodGhpcy5tKT49MCYmZy5pc3ViKHRoaXMubSksZy5fZm9yY2VSZWQodGhpcyl9LE0ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oYyxtKXt0aGlzLl92ZXJpZnky''@;'; put 'put ''KGMsbSk7dmFyIGc9Yy5pYWRkKG0pO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wJiZnLmlzdWIodGhpcy5tKSxnfSxNLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYyxtKXt0aGlzLl92ZXJpZnkyKGMsbSk7dmFyIGc9Yy5zdWIobSk7cmV0dXJuIGcuY21wbigwKTwwJiZnLmlhZGQodGhpcy5tKSxn''@;'; put 'put ''Ll9mb3JjZVJlZCh0aGlzKX0sTS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihjLG0pe3RoaXMuX3ZlcmlmeTIoYyxtKTt2YXIgZz1jLmlzdWIobSk7cmV0dXJuIGcuY21wbigwKTwwJiZnLmlhZGQodGhpcy5tKSxnfSxNLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oYyxtKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''dmVyaWZ5MShjKSx0aGlzLmltb2QoYy51c2hsbihtKSl9LE0ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYyxtKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihjLG0pLHRoaXMuaW1vZChjLmltdWwobSkpfSxNLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYyxtKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mihj''@;'; put 'put ''LG0pLHRoaXMuaW1vZChjLm11bChtKSl9LE0ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuaW11bChjLGMuY2xvbmUoKSl9LE0ucHJvdG90eXBlLnNxcj1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5tdWwoYyxjKX0sTS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihjKXtp''@;'; put 'put ''ZihjLmlzWmVybygpKXJldHVybiBjLmNsb25lKCk7dmFyIG09dGhpcy5tLmFuZGxuKDMpO2lmKG8obSUyPT0xKSwzPT09bSl7dmFyIGc9dGhpcy5tLmFkZChuZXcgdCgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhjLGcpfWZvcih2YXIgeT10aGlzLm0uc3VibigxKSx3PTA7IXkuaXNa''@;'; put 'put ''ZXJvKCkmJjA9PT15LmFuZGxuKDEpOyl3KysseS5pdXNocm4oMSk7bygheS5pc1plcm8oKSk7dmFyIGs9bmV3IHQoMSkudG9SZWQodGhpcyksTz1rLnJlZE5lZygpLHo9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLFU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihVPW5ldyB0KDIqVSpVKS50b1Jl''@;'; put 'put ''ZCh0aGlzKTswIT09dGhpcy5wb3coVSx6KS5jbXAoTyk7KVUucmVkSUFkZChPKTtmb3IodmFyIFY9dGhpcy5wb3coVSx5KSxSPXRoaXMucG93KGMseS5hZGRuKDEpLml1c2hybigxKSksSD10aGlzLnBvdyhjLHkpLFQ9dzswIT09SC5jbXAoayk7KXtmb3IodmFyIEM9SCxGPTA7MCE9PUMuY21w''@;'; put 'put ''KGspO0YrKylDPUMucmVkU3FyKCk7byhGPFQpO3ZhciBxPXRoaXMucG93KFYsbmV3IHQoMSkuaXVzaGxuKFQtRi0xKSk7Uj1SLnJlZE11bChxKSxWPXEucmVkU3FyKCksSD1ILnJlZE11bChWKSxUPUZ9cmV0dXJuIFJ9LE0ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYyl7dmFyIG09Yy5faW52''@;'; put 'put ''bXAodGhpcy5tKTtyZXR1cm4gMCE9PW0ubmVnYXRpdmU/KG0ubmVnYXRpdmU9MCx0aGlzLmltb2QobSkucmVkTmVnKCkpOnRoaXMuaW1vZChtKX0sTS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGMsbSl7aWYobS5pc1plcm8oKSlyZXR1cm4gbmV3IHQoMSkudG9SZWQodGhpcyk7aWYoMD09PW0u''@;'; put 'put ''Y21wbigxKSlyZXR1cm4gYy5jbG9uZSgpO3ZhciBnPW5ldyBBcnJheSgxNik7Z1swXT1uZXcgdCgxKS50b1JlZCh0aGlzKSxnWzFdPWM7Zm9yKHZhciB5PTI7eTxnLmxlbmd0aDt5KyspZ1t5XT10aGlzLm11bChnW3ktMV0sYyk7dmFyIHc9Z1swXSxrPTAsTz0wLHo9bS5iaXRMZW5ndGgoKSUy''@;'; put 'put ''Njtmb3IoMD09PXomJih6PTI2KSx5PW0ubGVuZ3RoLTE7eT49MDt5LS0pe2Zvcih2YXIgVT1tLndvcmRzW3ldLFY9ei0xO1Y+PTA7Vi0tKXt2YXIgUj1VPj5WJjE7dyE9PWdbMF0mJih3PXRoaXMuc3FyKHcpKSwwIT09Unx8MCE9PWs/KGs8PD0xLGt8PVIsKDQ9PT0rK098fDA9PT15JiYwPT09''@;'; put 'put ''VikmJih3PXRoaXMubXVsKHcsZ1trXSksTz0wLGs9MCkpOk89MH16PTI2fXJldHVybiB3fSxNLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oYyl7dmFyIG09Yy51bW9kKHRoaXMubSk7cmV0dXJuIG09PT1jP20uY2xvbmUoKTptfSxNLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlv''@;'; put 'put ''bihjKXt2YXIgbT1jLmNsb25lKCk7cmV0dXJuIG0ucmVkPW51bGwsbX0sdC5tb250PWZ1bmN0aW9uKGMpe3JldHVybiBuZXcgaihjKX0scihqLE0pLGoucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5pbW9kKGMudXNobG4odGhpcy5zaGlmdCkpfSxqLnByb3Rv''@;'; put 'put ''dHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihjKXt2YXIgbT10aGlzLmltb2QoYy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIG0ucmVkPW51bGwsbX0sai5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihjLG0pe2lmKGMuaXNaZXJvKCl8fG0uaXNaZXJvKCkpcmV0dXJuIGMud29yZHNbMF09MCxjLmxl''@;'; put 'put ''bmd0aD0xLGM7dmFyIGc9Yy5pbXVsKG0pLHk9Zy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksdz1nLmlzdWIoeSkuaXVzaHJuKHRoaXMuc2hpZnQpLGs9dztyZXR1cm4gdy5jbXAodGhpcy5tKT49MD9rPXcuaXN1Yih0aGlz''@;'; put 'put ''Lm0pOncuY21wbigwKTwwJiYoaz13LmlhZGQodGhpcy5tKSksay5fZm9yY2VSZWQodGhpcyl9LGoucHJvdG90eXBlLm11bD1mdW5jdGlvbihjLG0pe2lmKGMuaXNaZXJvKCl8fG0uaXNaZXJvKCkpcmV0dXJuIG5ldyB0KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgZz1jLm11bChtKSx5PWcubWFz''@;'; put 'put ''a24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHc9Zy5pc3ViKHkpLml1c2hybih0aGlzLnNoaWZ0KSxrPXc7cmV0dXJuIHcuY21wKHRoaXMubSk+PTA/az13LmlzdWIodGhpcy5tKTp3LmNtcG4oMCk8MCYmKGs9dy5pYWRkKHRoaXMu''@;'; put 'put ''bSkpLGsuX2ZvcmNlUmVkKHRoaXMpfSxqLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmltb2QoYy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHZvaWQgMD09PUV8fEUpfSx7YnVmZmVyOjE4OH1dLDE4NzpbZnVuY3Rpb24ocyxF''@;'; put 'put ''LFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYjtmdW5jdGlvbiBhKHIpe3RoaXMucmFuZD1yfWlmKEUuZXhwb3J0cz1mdW5jdGlvbihyKXtyZXR1cm4gYnx8KGI9bmV3IGEobnVsbCkpLGIuZ2VuZXJhdGUocil9LEUuZXhwb3J0cy5SYW5kPWEsYS5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24ocil7''@;'; put 'put ''cmV0dXJuIHRoaXMuX3JhbmQocil9LGEucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHIpe2lmKHRoaXMucmFuZC5nZXRCeXRlcylyZXR1cm4gdGhpcy5yYW5kLmdldEJ5dGVzKHIpO2Zvcih2YXIgdD1uZXcgVWludDhBcnJheShyKSxlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXT10aGlzLnJhbmQu''@;'; put 'put ''Z2V0Qnl0ZSgpO3JldHVybiB0fSwib2JqZWN0Ij09dHlwZW9mIHNlbGYpc2VsZi5jcnlwdG8mJnNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcz9hLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihyKXt2YXIgdD1uZXcgVWludDhBcnJheShyKTtyZXR1cm4gc2VsZi5jcnlwdG8uZ2V0UmFuZG9t''@;'; put 'put ''VmFsdWVzKHQpLHR9OnNlbGYubXNDcnlwdG8mJnNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP2EucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHIpe3ZhciB0PW5ldyBVaW50OEFycmF5KHIpO3JldHVybiBzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyh0KSx0fToib2JqZWN0Ij09''@;'; put 'put ''dHlwZW9mIHdpbmRvdyYmKGEucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQgeWV0Iil9KTtlbHNlIHRyeXt2YXIgbz1zKCJjcnlwdG8iKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygby5yYW5kb21CeXRlcyl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''Ik5vdCBzdXBwb3J0ZWQiKTthLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihyKXtyZXR1cm4gby5yYW5kb21CeXRlcyhyKX19Y2F0Y2h7fX0se2NyeXB0bzoxODh9XSwxODg6W2Z1bmN0aW9uKHMsRSxTKXt9LHt9XSwxODk6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygi''@;'; put 'put ''c2FmZS1idWZmZXIiKS5CdWZmZXI7ZnVuY3Rpb24gYShuKXtiLmlzQnVmZmVyKG4pfHwobj1iLmZyb20obikpO2Zvcih2YXIgaT1uLmxlbmd0aC80fDAsaD1uZXcgQXJyYXkoaSksZj0wO2Y8aTtmKyspaFtmXT1uLnJlYWRVSW50MzJCRSg0KmYpO3JldHVybiBofWZ1bmN0aW9uIG8obil7Zm9y''@;'; put 'put ''KDswPG4ubGVuZ3RoO24rKyluWzBdPTB9ZnVuY3Rpb24gcihuLGksaCxmLHUpe2Zvcih2YXIgcCxkLHYsXyxBPWhbMF0sST1oWzFdLEw9aFsyXSxOPWhbM10sUD1uWzBdXmlbMF0sQj1uWzFdXmlbMV0sJD1uWzJdXmlbMl0sRD1uWzNdXmlbM10seD00LE09MTtNPHU7TSsrKXA9QVtQPj4+MjRd''@;'; put 'put ''XklbQj4+PjE2JjI1NV1eTFskPj4+OCYyNTVdXk5bMjU1JkRdXmlbeCsrXSxkPUFbQj4+PjI0XV5JWyQ+Pj4xNiYyNTVdXkxbRD4+PjgmMjU1XV5OWzI1NSZQXV5pW3grK10sdj1BWyQ+Pj4yNF1eSVtEPj4+MTYmMjU1XV5MW1A+Pj44JjI1NV1eTlsyNTUmQl1eaVt4KytdLF89QVtEPj4+MjRd''@;'; put 'put ''XklbUD4+PjE2JjI1NV1eTFtCPj4+OCYyNTVdXk5bMjU1JiRdXmlbeCsrXSxQPXAsQj1kLCQ9dixEPV87cmV0dXJuIHA9KGZbUD4+PjI0XTw8MjR8ZltCPj4+MTYmMjU1XTw8MTZ8ZlskPj4+OCYyNTVdPDw4fGZbMjU1JkRdKV5pW3grK10sZD0oZltCPj4+MjRdPDwyNHxmWyQ+Pj4xNiYyNTVd''@;'; put 'put ''PDwxNnxmW0Q+Pj44JjI1NV08PDh8ZlsyNTUmUF0pXmlbeCsrXSx2PShmWyQ+Pj4yNF08PDI0fGZbRD4+PjE2JjI1NV08PDE2fGZbUD4+PjgmMjU1XTw8OHxmWzI1NSZCXSleaVt4KytdLF89KGZbRD4+PjI0XTw8MjR8ZltQPj4+MTYmMjU1XTw8MTZ8ZltCPj4+OCYyNTVdPDw4fGZbMjU1JiRd''@;'; put 'put ''KV5pW3grK10sW3A+Pj49MCxkPj4+PTAsdj4+Pj0wLF8+Pj49MF19dmFyIHQ9WzAsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTRdLGU9ZnVuY3Rpb24oKXtmb3IodmFyIG49bmV3IEFycmF5KDI1NiksaT0wO2k8MjU2O2krKyluW2ldPWk8MTI4P2k8PDE6aTw8MV4yODM7Zm9yKHZhciBoPVtd''@;'; put 'put ''LGY9W10sdT1bW10sW10sW10sW11dLHA9W1tdLFtdLFtdLFtdXSxkPTAsdj0wLF89MDtfPDI1NjsrK18pe3ZhciBBPXZedjw8MV52PDwyXnY8PDNedjw8NDtoW2RdPUE9QT4+PjheMjU1JkFeOTksZltBXT1kO3ZhciBJPW5bZF0sTD1uW0ldLE49bltMXSxQPTI1NypuW0FdXjE2ODQzMDA4KkE7''@;'; put 'put ''dVswXVtkXT1QPDwyNHxQPj4+OCx1WzFdW2RdPVA8PDE2fFA+Pj4xNix1WzJdW2RdPVA8PDh8UD4+PjI0LHVbM11bZF09UCxwWzBdW0FdPShQPTE2ODQzMDA5Kk5eNjU1MzcqTF4yNTcqSV4xNjg0MzAwOCpkKTw8MjR8UD4+PjgscFsxXVtBXT1QPDwxNnxQPj4+MTYscFsyXVtBXT1QPDw4fFA+''@;'; put 'put ''Pj4yNCxwWzNdW0FdPVAsMD09PWQ/ZD12PTE6KGQ9SV5uW25bbltOXkldXV0sdl49bltuW3ZdXSl9cmV0dXJue1NCT1g6aCxJTlZfU0JPWDpmLFNVQl9NSVg6dSxJTlZfU1VCX01JWDpwfX0oKTtmdW5jdGlvbiBsKG4pe3RoaXMuX2tleT1hKG4pLHRoaXMuX3Jlc2V0KCl9bC5ibG9ja1NpemU9''@;'; put 'put ''MTYsbC5rZXlTaXplPTMyLGwucHJvdG90eXBlLmJsb2NrU2l6ZT1sLmJsb2NrU2l6ZSxsLnByb3RvdHlwZS5rZXlTaXplPWwua2V5U2l6ZSxsLnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIG49dGhpcy5fa2V5LGk9bi5sZW5ndGgsaD1pKzYsZj00KihoKzEpLHU9W10scD0w''@;'; put 'put ''O3A8aTtwKyspdVtwXT1uW3BdO2ZvcihwPWk7cDxmO3ArKyl7dmFyIGQ9dVtwLTFdO3AlaT09MD8oZD1lLlNCT1hbKGQ9ZDw8OHxkPj4+MjQpPj4+MjRdPDwyNHxlLlNCT1hbZD4+PjE2JjI1NV08PDE2fGUuU0JPWFtkPj4+OCYyNTVdPDw4fGUuU0JPWFsyNTUmZF0sZF49dFtwL2l8MF08PDI0''@;'; put 'put ''KTppPjYmJnAlaT09NCYmKGQ9ZS5TQk9YW2Q+Pj4yNF08PDI0fGUuU0JPWFtkPj4+MTYmMjU1XTw8MTZ8ZS5TQk9YW2Q+Pj44JjI1NV08PDh8ZS5TQk9YWzI1NSZkXSksdVtwXT11W3AtaV1eZH1mb3IodmFyIHY9W10sXz0wO188ZjtfKyspe3ZhciBBPWYtXyxJPXVbQS0oXyU0PzA6NCldO3Zb''@;'; put 'put ''X109Xzw0fHxBPD00P0k6ZS5JTlZfU1VCX01JWFswXVtlLlNCT1hbST4+PjI0XV1eZS5JTlZfU1VCX01JWFsxXVtlLlNCT1hbST4+PjE2JjI1NV1dXmUuSU5WX1NVQl9NSVhbMl1bZS5TQk9YW0k+Pj44JjI1NV1dXmUuSU5WX1NVQl9NSVhbM11bZS5TQk9YWzI1NSZJXV19dGhpcy5fblJvdW5k''@;'; put 'put ''cz1oLHRoaXMuX2tleVNjaGVkdWxlPXUsdGhpcy5faW52S2V5U2NoZWR1bGU9dn0sbC5wcm90b3R5cGUuZW5jcnlwdEJsb2NrUmF3PWZ1bmN0aW9uKG4pe3JldHVybiByKG49YShuKSx0aGlzLl9rZXlTY2hlZHVsZSxlLlNVQl9NSVgsZS5TQk9YLHRoaXMuX25Sb3VuZHMpfSxsLnByb3RvdHlw''@;'; put 'put ''ZS5lbmNyeXB0QmxvY2s9ZnVuY3Rpb24obil7dmFyIGk9dGhpcy5lbmNyeXB0QmxvY2tSYXcobiksaD1iLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gaC53cml0ZVVJbnQzMkJFKGlbMF0sMCksaC53cml0ZVVJbnQzMkJFKGlbMV0sNCksaC53cml0ZVVJbnQzMkJFKGlbMl0sOCksaC53cml0ZVVJ''@;'; put 'put ''bnQzMkJFKGlbM10sMTIpLGh9LGwucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1mdW5jdGlvbihuKXt2YXIgaT0obj1hKG4pKVsxXTtuWzFdPW5bM10sblszXT1pO3ZhciBoPXIobix0aGlzLl9pbnZLZXlTY2hlZHVsZSxlLklOVl9TVUJfTUlYLGUuSU5WX1NCT1gsdGhpcy5fblJvdW5kcyksZj1i''@;'; put 'put ''LmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gZi53cml0ZVVJbnQzMkJFKGhbMF0sMCksZi53cml0ZVVJbnQzMkJFKGhbM10sNCksZi53cml0ZVVJbnQzMkJFKGhbMl0sOCksZi53cml0ZVVJbnQzMkJFKGhbMV0sMTIpLGZ9LGwucHJvdG90eXBlLnNjcnViPWZ1bmN0aW9uKCl7byh0aGlzLl9rZXlT''@;'; put 'put ''Y2hlZHVsZSksbyh0aGlzLl9pbnZLZXlTY2hlZHVsZSksbyh0aGlzLl9rZXkpfSxFLmV4cG9ydHMuQUVTPWx9LHsic2FmZS1idWZmZXIiOjQ5NH1dLDE5MDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuL2FlcyIpLGE9cygic2FmZS1idWZmZXIiKS5CdWZmZXIsbz1z''@;'; put 'put ''KCJjaXBoZXItYmFzZSIpLHI9cygiaW5oZXJpdHMiKSx0PXMoIi4vZ2hhc2giKSxlPXMoImJ1ZmZlci14b3IiKSxsPXMoIi4vaW5jcjMyIik7ZnVuY3Rpb24gbihpLGgsZix1KXtvLmNhbGwodGhpcyk7dmFyIHA9YS5hbGxvYyg0LDApO3RoaXMuX2NpcGhlcj1uZXcgYi5BRVMoaCk7dmFyIGQ9''@;'; put 'put ''dGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayhwKTt0aGlzLl9naGFzaD1uZXcgdChkKSxmPWZ1bmN0aW9uKHYsXyxBKXtpZigxMj09PV8ubGVuZ3RoKXJldHVybiB2Ll9maW5JRD1hLmNvbmNhdChbXyxhLmZyb20oWzAsMCwwLDFdKV0pLGEuY29uY2F0KFtfLGEuZnJvbShbMCwwLDAsMl0pXSk7''@;'; put 'put ''dmFyIEk9bmV3IHQoQSksTD1fLmxlbmd0aCxOPUwlMTY7SS51cGRhdGUoXyksTiYmSS51cGRhdGUoYS5hbGxvYyhOPTE2LU4sMCkpLEkudXBkYXRlKGEuYWxsb2MoOCwwKSk7dmFyIFA9OCpMLEI9YS5hbGxvYyg4KTtCLndyaXRlVUludEJFKFAsMCw4KSxJLnVwZGF0ZShCKSx2Ll9maW5JRD1J''@;'; put 'put ''LnN0YXRlO3ZhciAkPWEuZnJvbSh2Ll9maW5JRCk7cmV0dXJuIGwoJCksJH0odGhpcyxmLGQpLHRoaXMuX3ByZXY9YS5mcm9tKGYpLHRoaXMuX2NhY2hlPWEuYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9YS5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PXUsdGhpcy5fYWxlbj0w''@;'; put 'put ''LHRoaXMuX2xlbj0wLHRoaXMuX21vZGU9aSx0aGlzLl9hdXRoVGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfXIobixvKSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGkpe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMuX2FsZW4pe3ZhciBoPTE2LXRoaXMuX2FsZW4lMTY7aDwxNiYmKGg9YS5h''@;'; put 'put ''bGxvYyhoLDApLHRoaXMuX2doYXNoLnVwZGF0ZShoKSl9dGhpcy5fY2FsbGVkPSEwO3ZhciBmPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLGkpO3JldHVybiB0aGlzLl9naGFzaC51cGRhdGUodGhpcy5fZGVjcnlwdD9pOmYpLHRoaXMuX2xlbis9aS5sZW5ndGgsZn0sbi5wcm90b3R5cGUuX2Zp''@;'; put 'put ''bmFsPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdCYmIXRoaXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt2YXIgaT1lKHRoaXMuX2doYXNoLmZpbmFsKDgqdGhpcy5fYWxlbiw4KnRoaXMuX2xl''@;'; put 'put ''biksdGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0aGlzLl9maW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQmJmZ1bmN0aW9uKGgsZil7dmFyIHU9MDtoLmxlbmd0aCE9PWYubGVuZ3RoJiZ1Kys7Zm9yKHZhciBwPU1hdGgubWluKGgubGVuZ3RoLGYubGVuZ3RoKSxkPTA7ZDxwOysrZCl1Kz1oW2Rd''@;'; put 'put ''XmZbZF07cmV0dXJuIHV9KGksdGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt0aGlzLl9hdXRoVGFnPWksdGhpcy5fY2lwaGVyLnNjcnViKCl9LG4ucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVu''@;'; put 'put ''Y3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0fHwhYS5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7cmV0dXJuIHRoaXMuX2F1dGhUYWd9LG4ucHJvdG90eXBlLnNldEF1dGhUYWc9''@;'; put 'put ''ZnVuY3Rpb24oaSl7aWYoIXRoaXMuX2RlY3J5cHQpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2F1dGhUYWc9aX0sbi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKGkpe2lmKHRoaXMuX2NhbGxlZCl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IEFBRCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2doYXNoLnVwZGF0ZShpKSx0aGlzLl9hbGVuKz1pLmxlbmd0aH0sRS5leHBvcnRzPW59LHsiLi9hZXMiOjE4OSwiLi9naGFzaCI6MTk0LCIuL2luY3IzMiI6MTk1LCJidWZmZXIt''@;'; put 'put ''eG9yIjoyMTksImNpcGhlci1iYXNlIjoyMjEsaW5oZXJpdHM6NDQwLCJzYWZlLWJ1ZmZlciI6NDk0fV0sMTkxOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4vZW5jcnlwdGVyIiksYT1zKCIuL2RlY3J5cHRlciIpLG89cygiLi9tb2Rlcy9saXN0Lmpzb24iKTtTLmNy''@;'; put 'put ''ZWF0ZUNpcGhlcj1TLkNpcGhlcj1iLmNyZWF0ZUNpcGhlcixTLmNyZWF0ZUNpcGhlcml2PVMuQ2lwaGVyaXY9Yi5jcmVhdGVDaXBoZXJpdixTLmNyZWF0ZURlY2lwaGVyPVMuRGVjaXBoZXI9YS5jcmVhdGVEZWNpcGhlcixTLmNyZWF0ZURlY2lwaGVyaXY9Uy5EZWNpcGhlcml2PWEuY3JlYXRl''@;'; put 'put ''RGVjaXBoZXJpdixTLmxpc3RDaXBoZXJzPVMuZ2V0Q2lwaGVycz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhvKX19LHsiLi9kZWNyeXB0ZXIiOjE5MiwiLi9lbmNyeXB0ZXIiOjE5MywiLi9tb2Rlcy9saXN0Lmpzb24iOjIwM31dLDE5MjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgYj1zKCIuL2F1dGhDaXBoZXIiKSxhPXMoInNhZmUtYnVmZmVyIikuQnVmZmVyLG89cygiLi9tb2RlcyIpLHI9cygiLi9zdHJlYW1DaXBoZXIiKSx0PXMoImNpcGhlci1iYXNlIiksZT1zKCIuL2FlcyIpLGw9cygiZXZwX2J5dGVzdG9rZXkiKTtmdW5jdGlvbiBuKGYsdSxwKXt0''@;'; put 'put ''LmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IGksdGhpcy5fbGFzdD12b2lkIDAsdGhpcy5fY2lwaGVyPW5ldyBlLkFFUyh1KSx0aGlzLl9wcmV2PWEuZnJvbShwKSx0aGlzLl9tb2RlPWYsdGhpcy5fYXV0b3BhZGRpbmc9ITB9ZnVuY3Rpb24gaSgpe3RoaXMuY2FjaGU9YS5hbGxvY1Vuc2Fm''@;'; put 'put ''ZSgwKX1mdW5jdGlvbiBoKGYsdSxwKXt2YXIgZD1vW2YudG9Mb3dlckNhc2UoKV07aWYoIWQpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBwJiYocD1hLmZyb20ocCkpLCJHQ00iIT09ZC5tb2RlJiZwLmxlbmd0aCE9PWQuaXYp''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIitwLmxlbmd0aCk7aWYoInN0cmluZyI9PXR5cGVvZiB1JiYodT1hLmZyb20odSkpLHUubGVuZ3RoIT09ZC5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIit1Lmxlbmd0aCk7cmV0dXJu''@;'; put 'put ''InN0cmVhbSI9PT1kLnR5cGU/bmV3IHIoZC5tb2R1bGUsdSxwLCEwKToiYXV0aCI9PT1kLnR5cGU/bmV3IGIoZC5tb2R1bGUsdSxwLCEwKTpuZXcgbihkLm1vZHVsZSx1LHApfXMoImluaGVyaXRzIikobix0KSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGYpe3ZhciB1LHA7dGhpcy5f''@;'; put 'put ''Y2FjaGUuYWRkKGYpO2Zvcih2YXIgZD1bXTt1PXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KXA9dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsdSksZC5wdXNoKHApO3JldHVybiBhLmNvbmNhdChkKX0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIGY9dGhpcy5f''@;'; put 'put ''Y2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gZnVuY3Rpb24odSl7dmFyIHA9dVsxNV07aWYocDwxfHxwPjE2KXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2Zvcih2YXIgZD0tMTsrK2Q8cDspaWYodVtkKygxNi1wKV0hPT1wKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2lmKDE2IT09cClyZXR1cm4gdS5zbGljZSgwLDE2LXApfSh0aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxmKSk7aWYoZil0aHJvdyBuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSxuLnByb3Rv''@;'; put 'put ''dHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFmLHRoaXN9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihmKXt0aGlzLmNhY2hlPWEuY29uY2F0KFt0aGlzLmNhY2hlLGZdKX0saS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGYpe3ZhciB1''@;'; put 'put ''O2lmKGYpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE2KXJldHVybiB1PXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx1fWVsc2UgaWYodGhpcy5jYWNoZS5sZW5ndGg+PTE2KXJldHVybiB1PXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5j''@;'; put 'put ''YWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx1O3JldHVybiBudWxsfSxpLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlfSxTLmNyZWF0ZURlY2lwaGVyPWZ1bmN0aW9uKGYsdSl7dmFyIHA9b1tmLnRvTG93ZXJDYXNlKCld''@;'; put 'put ''O2lmKCFwKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO3ZhciBkPWwodSwhMSxwLmtleSxwLml2KTtyZXR1cm4gaChmLGQua2V5LGQuaXYpfSxTLmNyZWF0ZURlY2lwaGVyaXY9aH0seyIuL2FlcyI6MTg5LCIuL2F1dGhDaXBoZXIiOjE5MCwiLi9tb2RlcyI6MjAy''@;'; put 'put ''LCIuL3N0cmVhbUNpcGhlciI6MjA1LCJjaXBoZXItYmFzZSI6MjIxLGV2cF9ieXRlc3Rva2V5OjQyMyxpbmhlcml0czo0NDAsInNhZmUtYnVmZmVyIjo0OTR9XSwxOTM6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi9tb2RlcyIpLGE9cygiLi9hdXRoQ2lwaGVyIiks''@;'; put 'put ''bz1zKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcixyPXMoIi4vc3RyZWFtQ2lwaGVyIiksdD1zKCJjaXBoZXItYmFzZSIpLGU9cygiLi9hZXMiKSxsPXMoImV2cF9ieXRlc3Rva2V5Iik7ZnVuY3Rpb24gbih1LHAsZCl7dC5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBoLHRoaXMuX2NpcGhlcj1u''@;'; put 'put ''ZXcgZS5BRVMocCksdGhpcy5fcHJldj1vLmZyb20oZCksdGhpcy5fbW9kZT11LHRoaXMuX2F1dG9wYWRkaW5nPSEwfXMoImluaGVyaXRzIikobix0KSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHUpe3ZhciBwLGQ7dGhpcy5fY2FjaGUuYWRkKHUpO2Zvcih2YXIgdj1bXTtwPXRoaXMu''@;'; put 'put ''X2NhY2hlLmdldCgpOylkPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHApLHYucHVzaChkKTtyZXR1cm4gby5jb25jYXQodil9O3ZhciBpPW8uYWxsb2MoMTYsMTYpO2Z1bmN0aW9uIGgoKXt0aGlzLmNhY2hlPW8uYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gZih1LHAsZCl7dmFyIHY9Ylt1LnRv''@;'; put 'put ''TG93ZXJDYXNlKCldO2lmKCF2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgcCYmKHA9by5mcm9tKHApKSxwLmxlbmd0aCE9PXYua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrcC5sZW5n''@;'; put 'put ''dGgpO2lmKCJzdHJpbmciPT10eXBlb2YgZCYmKGQ9by5mcm9tKGQpKSwiR0NNIiE9PXYubW9kZSYmZC5sZW5ndGghPT12Lml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrZC5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09di50eXBlP25ldyByKHYubW9kdWxlLHAs''@;'; put 'put ''ZCk6ImF1dGgiPT09di50eXBlP25ldyBhKHYubW9kdWxlLHAsZCk6bmV3IG4odi5tb2R1bGUscCxkKX1uLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgdT10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiB1PXRoaXMuX21vZGUuZW5jcnlwdCh0''@;'; put 'put ''aGlzLHUpLHRoaXMuX2NpcGhlci5zY3J1YigpLHU7aWYoIXUuZXF1YWxzKGkpKXRocm93IHRoaXMuX2NpcGhlci5zY3J1YigpLG5ldyBFcnJvcigiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LG4ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKHUpe3JldHVy''@;'; put 'put ''biB0aGlzLl9hdXRvcGFkZGluZz0hIXUsdGhpc30saC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHUpe3RoaXMuY2FjaGU9by5jb25jYXQoW3RoaXMuY2FjaGUsdV0pfSxoLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNSl7dmFyIHU9dGhpcy5jYWNoZS5z''@;'; put 'put ''bGljZSgwLDE2KTtyZXR1cm4gdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx1fXJldHVybiBudWxsfSxoLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgdT0xNi10aGlzLmNhY2hlLmxlbmd0aCxwPW8uYWxsb2NVbnNhZmUodSksZD0tMTsrK2Q8dTspcC53cml0ZVVJ''@;'; put 'put ''bnQ4KHUsZCk7cmV0dXJuIG8uY29uY2F0KFt0aGlzLmNhY2hlLHBdKX0sUy5jcmVhdGVDaXBoZXJpdj1mLFMuY3JlYXRlQ2lwaGVyPWZ1bmN0aW9uKHUscCl7dmFyIGQ9Ylt1LnRvTG93ZXJDYXNlKCldO2lmKCFkKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO3Zh''@;'; put 'put ''ciB2PWwocCwhMSxkLmtleSxkLml2KTtyZXR1cm4gZih1LHYua2V5LHYuaXYpfX0seyIuL2FlcyI6MTg5LCIuL2F1dGhDaXBoZXIiOjE5MCwiLi9tb2RlcyI6MjAyLCIuL3N0cmVhbUNpcGhlciI6MjA1LCJjaXBoZXItYmFzZSI6MjIxLGV2cF9ieXRlc3Rva2V5OjQyMyxpbmhlcml0czo0NDAs''@;'; put 'put ''InNhZmUtYnVmZmVyIjo0OTR9XSwxOTQ6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygic2FmZS1idWZmZXIiKS5CdWZmZXIsYT1iLmFsbG9jKDE2LDApO2Z1bmN0aW9uIG8odCl7dmFyIGU9Yi5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIGUud3JpdGVVSW50MzJCRSh0WzBd''@;'; put 'put ''Pj4+MCwwKSxlLndyaXRlVUludDMyQkUodFsxXT4+PjAsNCksZS53cml0ZVVJbnQzMkJFKHRbMl0+Pj4wLDgpLGUud3JpdGVVSW50MzJCRSh0WzNdPj4+MCwxMiksZX1mdW5jdGlvbiByKHQpe3RoaXMuaD10LHRoaXMuc3RhdGU9Yi5hbGxvYygxNiwwKSx0aGlzLmNhY2hlPWIuYWxsb2NVbnNh''@;'; put 'put ''ZmUoMCl9ci5wcm90b3R5cGUuZ2hhc2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPS0xOysrZTx0Lmxlbmd0aDspdGhpcy5zdGF0ZVtlXV49dFtlXTt0aGlzLl9tdWx0aXBseSgpfSxyLnByb3RvdHlwZS5fbXVsdGlwbHk9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxsLG49Wyh0PXRoaXMuaCkucmVh''@;'; put 'put ''ZFVJbnQzMkJFKDApLHQucmVhZFVJbnQzMkJFKDQpLHQucmVhZFVJbnQzMkJFKDgpLHQucmVhZFVJbnQzMkJFKDEyKV0saT1bMCwwLDAsMF0saD0tMTsrK2g8MTI4Oyl7Zm9yKCEhKHRoaXMuc3RhdGVbfn4oaC84KV0mMTw8Ny1oJTgpJiYoaVswXV49blswXSxpWzFdXj1uWzFdLGlbMl1ePW5b''@;'; put 'put ''Ml0saVszXV49blszXSksbD0hISgxJm5bM10pLGU9MztlPjA7ZS0tKW5bZV09bltlXT4+PjF8KDEmbltlLTFdKTw8MzE7blswXT1uWzBdPj4+MSxsJiYoblswXT1uWzBdXjIyNTw8MjQpfXRoaXMuc3RhdGU9byhpKX0sci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlO2Zvcih0''@;'; put 'put ''aGlzLmNhY2hlPWIuY29uY2F0KFt0aGlzLmNhY2hlLHRdKTt0aGlzLmNhY2hlLmxlbmd0aD49MTY7KWU9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHRoaXMuZ2hhc2goZSl9LHIucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKHQsZSl7cmV0''@;'; put 'put ''dXJuIHRoaXMuY2FjaGUubGVuZ3RoJiZ0aGlzLmdoYXNoKGIuY29uY2F0KFt0aGlzLmNhY2hlLGFdLDE2KSksdGhpcy5naGFzaChvKFswLHQsMCxlXSkpLHRoaXMuc3RhdGV9LEUuZXhwb3J0cz1yfSx7InNhZmUtYnVmZmVyIjo0OTR9XSwxOTU6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7RS5leHBvcnRzPWZ1bmN0aW9uKGIpe2Zvcih2YXIgYSxvPWIubGVuZ3RoO28tLTspe2lmKDI1NSE9PShhPWIucmVhZFVJbnQ4KG8pKSl7YSsrLGIud3JpdGVVSW50OChhLG8pO2JyZWFrfWIud3JpdGVVSW50OCgwLG8pfX19LHt9XSwxOTY6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIGI9cygiYnVmZmVyLXhvciIpO1MuZW5jcnlwdD1mdW5jdGlvbihhLG8pe3ZhciByPWIobyxhLl9wcmV2KTtyZXR1cm4gYS5fcHJldj1hLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHIpLGEuX3ByZXZ9LFMuZGVjcnlwdD1mdW5jdGlvbihhLG8pe3ZhciByPWEuX3ByZXY7YS5fcHJldj1v''@;'; put 'put ''O3ZhciB0PWEuX2NpcGhlci5kZWNyeXB0QmxvY2sobyk7cmV0dXJuIGIodCxyKX19LHsiYnVmZmVyLXhvciI6MjE5fV0sMTk3OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoInNhZmUtYnVmZmVyIikuQnVmZmVyLGE9cygiYnVmZmVyLXhvciIpO2Z1bmN0aW9uIG8ocix0''@;'; put 'put ''LGUpe3ZhciBsPXQubGVuZ3RoLG49YSh0LHIuX2NhY2hlKTtyZXR1cm4gci5fY2FjaGU9ci5fY2FjaGUuc2xpY2UobCksci5fcHJldj1iLmNvbmNhdChbci5fcHJldixlP3Q6bl0pLG59Uy5lbmNyeXB0PWZ1bmN0aW9uKHIsdCxlKXtmb3IodmFyIGwsbj1iLmFsbG9jVW5zYWZlKDApO3QubGVu''@;'; put 'put ''Z3RoOyl7aWYoMD09PXIuX2NhY2hlLmxlbmd0aCYmKHIuX2NhY2hlPXIuX2NpcGhlci5lbmNyeXB0QmxvY2soci5fcHJldiksci5fcHJldj1iLmFsbG9jVW5zYWZlKDApKSwhKHIuX2NhY2hlLmxlbmd0aDw9dC5sZW5ndGgpKXtuPWIuY29uY2F0KFtuLG8ocix0LGUpXSk7YnJlYWt9bj1iLmNv''@;'; put 'put ''bmNhdChbbixvKHIsdC5zbGljZSgwLGw9ci5fY2FjaGUubGVuZ3RoKSxlKV0pLHQ9dC5zbGljZShsKX1yZXR1cm4gbn19LHsiYnVmZmVyLXhvciI6MjE5LCJzYWZlLWJ1ZmZlciI6NDk0fV0sMTk4OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoInNhZmUtYnVmZmVyIiku''@;'; put 'put ''QnVmZmVyO2Z1bmN0aW9uIGEocix0LGUpe2Zvcih2YXIgbCxuLGk9LTEsaD0wOysraTw4OylsPXQmMTw8Ny1pPzEyODowLGgrPSgxMjgmKG49ci5fY2lwaGVyLmVuY3J5cHRCbG9jayhyLl9wcmV2KVswXV5sKSk+PmklOCxyLl9wcmV2PW8oci5fcHJldixlP2w6bik7cmV0dXJuIGh9ZnVuY3Rp''@;'; put 'put ''b24gbyhyLHQpe3ZhciBlPXIubGVuZ3RoLGw9LTEsbj1iLmFsbG9jVW5zYWZlKHIubGVuZ3RoKTtmb3Iocj1iLmNvbmNhdChbcixiLmZyb20oW3RdKV0pOysrbDxlOyluW2xdPXJbbF08PDF8cltsKzFdPj43O3JldHVybiBufVMuZW5jcnlwdD1mdW5jdGlvbihyLHQsZSl7Zm9yKHZhciBsPXQu''@;'; put 'put ''bGVuZ3RoLG49Yi5hbGxvY1Vuc2FmZShsKSxpPS0xOysraTxsOyluW2ldPWEocix0W2ldLGUpO3JldHVybiBufX0seyJzYWZlLWJ1ZmZlciI6NDk0fV0sMTk5OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoInNhZmUtYnVmZmVyIikuQnVmZmVyO2Z1bmN0aW9uIGEobyxy''@;'; put 'put ''LHQpe3ZhciBlPW8uX2NpcGhlci5lbmNyeXB0QmxvY2soby5fcHJldilbMF1ecjtyZXR1cm4gby5fcHJldj1iLmNvbmNhdChbby5fcHJldi5zbGljZSgxKSxiLmZyb20oW3Q/cjplXSldKSxlfVMuZW5jcnlwdD1mdW5jdGlvbihvLHIsdCl7Zm9yKHZhciBlPXIubGVuZ3RoLGw9Yi5hbGxvY1Vu''@;'; put 'put ''c2FmZShlKSxuPS0xOysrbjxlOylsW25dPWEobyxyW25dLHQpO3JldHVybiBsfX0seyJzYWZlLWJ1ZmZlciI6NDk0fV0sMjAwOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoImJ1ZmZlci14b3IiKSxhPXMoInNhZmUtYnVmZmVyIikuQnVmZmVyLG89cygiLi4vaW5jcjMy''@;'; put 'put ''Iik7ZnVuY3Rpb24gcih0KXt2YXIgZT10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrUmF3KHQuX3ByZXYpO3JldHVybiBvKHQuX3ByZXYpLGV9Uy5lbmNyeXB0PWZ1bmN0aW9uKHQsZSl7dmFyIGw9TWF0aC5jZWlsKGUubGVuZ3RoLzE2KSxuPXQuX2NhY2hlLmxlbmd0aDt0Ll9jYWNoZT1hLmNvbmNh''@;'; put 'put ''dChbdC5fY2FjaGUsYS5hbGxvY1Vuc2FmZSgxNipsKV0pO2Zvcih2YXIgaT0wO2k8bDtpKyspe3ZhciBoPXIodCksZj1uKzE2Kmk7dC5fY2FjaGUud3JpdGVVSW50MzJCRShoWzBdLGYrMCksdC5fY2FjaGUud3JpdGVVSW50MzJCRShoWzFdLGYrNCksdC5fY2FjaGUud3JpdGVVSW50MzJCRSho''@;'; put 'put ''WzJdLGYrOCksdC5fY2FjaGUud3JpdGVVSW50MzJCRShoWzNdLGYrMTIpfXZhciB1PXQuX2NhY2hlLnNsaWNlKDAsZS5sZW5ndGgpO3JldHVybiB0Ll9jYWNoZT10Ll9jYWNoZS5zbGljZShlLmxlbmd0aCksYihlLHUpfX0seyIuLi9pbmNyMzIiOjE5NSwiYnVmZmVyLXhvciI6MjE5LCJzYWZl''@;'; put 'put ''LWJ1ZmZlciI6NDk0fV0sMjAxOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO1MuZW5jcnlwdD1mdW5jdGlvbihiLGEpe3JldHVybiBiLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGEpfSxTLmRlY3J5cHQ9ZnVuY3Rpb24oYixhKXtyZXR1cm4gYi5fY2lwaGVyLmRlY3J5cHRCbG9jayhhKX19''@;'; put 'put ''LHt9XSwyMDI6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9e0VDQjpzKCIuL2VjYiIpLENCQzpzKCIuL2NiYyIpLENGQjpzKCIuL2NmYiIpLENGQjg6cygiLi9jZmI4IiksQ0ZCMTpzKCIuL2NmYjEiKSxPRkI6cygiLi9vZmIiKSxDVFI6cygiLi9jdHIiKSxHQ006cygiLi9j''@;'; put 'put ''dHIiKX0sYT1zKCIuL2xpc3QuanNvbiIpO2Zvcih2YXIgbyBpbiBhKWFbb10ubW9kdWxlPWJbYVtvXS5tb2RlXTtFLmV4cG9ydHM9YX0seyIuL2NiYyI6MTk2LCIuL2NmYiI6MTk3LCIuL2NmYjEiOjE5OCwiLi9jZmI4IjoxOTksIi4vY3RyIjoyMDAsIi4vZWNiIjoyMDEsIi4vbGlzdC5qc29u''@;'; put 'put ''IjoyMDMsIi4vb2ZiIjoyMDR9XSwyMDM6W2Z1bmN0aW9uKHMsRSxTKXtFLmV4cG9ydHM9eyJhZXMtMTI4LWVjYiI6e2NpcGhlcjoiQUVTIixrZXk6MTI4LGl2OjAsbW9kZToiRUNCIix0eXBlOiJibG9jayJ9LCJhZXMtMTkyLWVjYiI6e2NpcGhlcjoiQUVTIixrZXk6MTkyLGl2OjAsbW9kZToi''@;'; put 'put ''RUNCIix0eXBlOiJibG9jayJ9LCJhZXMtMjU2LWVjYiI6e2NpcGhlcjoiQUVTIixrZXk6MjU2LGl2OjAsbW9kZToiRUNCIix0eXBlOiJibG9jayJ9LCJhZXMtMTI4LWNiYyI6e2NpcGhlcjoiQUVTIixrZXk6MTI4LGl2OjE2LG1vZGU6IkNCQyIsdHlwZToiYmxvY2sifSwiYWVzLTE5Mi1jYmMi''@;'; put 'put ''OntjaXBoZXI6IkFFUyIsa2V5OjE5MixpdjoxNixtb2RlOiJDQkMiLHR5cGU6ImJsb2NrIn0sImFlcy0yNTYtY2JjIjp7Y2lwaGVyOiJBRVMiLGtleToyNTYsaXY6MTYsbW9kZToiQ0JDIix0eXBlOiJibG9jayJ9LGFlczEyODp7Y2lwaGVyOiJBRVMiLGtleToxMjgsaXY6MTYsbW9kZToiQ0JD''@;'; put 'put ''Iix0eXBlOiJibG9jayJ9LGFlczE5Mjp7Y2lwaGVyOiJBRVMiLGtleToxOTIsaXY6MTYsbW9kZToiQ0JDIix0eXBlOiJibG9jayJ9LGFlczI1Njp7Y2lwaGVyOiJBRVMiLGtleToyNTYsaXY6MTYsbW9kZToiQ0JDIix0eXBlOiJibG9jayJ9LCJhZXMtMTI4LWNmYiI6e2NpcGhlcjoiQUVTIixr''@;'; put 'put ''ZXk6MTI4LGl2OjE2LG1vZGU6IkNGQiIsdHlwZToic3RyZWFtIn0sImFlcy0xOTItY2ZiIjp7Y2lwaGVyOiJBRVMiLGtleToxOTIsaXY6MTYsbW9kZToiQ0ZCIix0eXBlOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIiOntjaXBoZXI6IkFFUyIsa2V5OjI1NixpdjoxNixtb2RlOiJDRkIiLHR5cGU6''@;'; put 'put ''InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjgiOntjaXBoZXI6IkFFUyIsa2V5OjEyOCxpdjoxNixtb2RlOiJDRkI4Iix0eXBlOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmI4Ijp7Y2lwaGVyOiJBRVMiLGtleToxOTIsaXY6MTYsbW9kZToiQ0ZCOCIsdHlwZToic3RyZWFtIn0sImFlcy0yNTYtY2ZiOCI6''@;'; put 'put ''e2NpcGhlcjoiQUVTIixrZXk6MjU2LGl2OjE2LG1vZGU6IkNGQjgiLHR5cGU6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjEiOntjaXBoZXI6IkFFUyIsa2V5OjEyOCxpdjoxNixtb2RlOiJDRkIxIix0eXBlOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmIxIjp7Y2lwaGVyOiJBRVMiLGtleToxOTIsaXY6''@;'; put 'put ''MTYsbW9kZToiQ0ZCMSIsdHlwZToic3RyZWFtIn0sImFlcy0yNTYtY2ZiMSI6e2NpcGhlcjoiQUVTIixrZXk6MjU2LGl2OjE2LG1vZGU6IkNGQjEiLHR5cGU6InN0cmVhbSJ9LCJhZXMtMTI4LW9mYiI6e2NpcGhlcjoiQUVTIixrZXk6MTI4LGl2OjE2LG1vZGU6Ik9GQiIsdHlwZToic3RyZWFt''@;'; put 'put ''In0sImFlcy0xOTItb2ZiIjp7Y2lwaGVyOiJBRVMiLGtleToxOTIsaXY6MTYsbW9kZToiT0ZCIix0eXBlOiJzdHJlYW0ifSwiYWVzLTI1Ni1vZmIiOntjaXBoZXI6IkFFUyIsa2V5OjI1NixpdjoxNixtb2RlOiJPRkIiLHR5cGU6InN0cmVhbSJ9LCJhZXMtMTI4LWN0ciI6e2NpcGhlcjoiQUVT''@;'; put 'put ''IixrZXk6MTI4LGl2OjE2LG1vZGU6IkNUUiIsdHlwZToic3RyZWFtIn0sImFlcy0xOTItY3RyIjp7Y2lwaGVyOiJBRVMiLGtleToxOTIsaXY6MTYsbW9kZToiQ1RSIix0eXBlOiJzdHJlYW0ifSwiYWVzLTI1Ni1jdHIiOntjaXBoZXI6IkFFUyIsa2V5OjI1NixpdjoxNixtb2RlOiJDVFIiLHR5''@;'; put 'put ''cGU6InN0cmVhbSJ9LCJhZXMtMTI4LWdjbSI6e2NpcGhlcjoiQUVTIixrZXk6MTI4LGl2OjEyLG1vZGU6IkdDTSIsdHlwZToiYXV0aCJ9LCJhZXMtMTkyLWdjbSI6e2NpcGhlcjoiQUVTIixrZXk6MTkyLGl2OjEyLG1vZGU6IkdDTSIsdHlwZToiYXV0aCJ9LCJhZXMtMjU2LWdjbSI6e2NpcGhl''@;'; put 'put ''cjoiQUVTIixrZXk6MjU2LGl2OjEyLG1vZGU6IkdDTSIsdHlwZToiYXV0aCJ9fX0se31dLDIwNDpbZnVuY3Rpb24ocyxFLFMpeyhmdW5jdGlvbihiKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGE9cygiYnVmZmVyLXhvciIpO2Z1bmN0aW9uIG8ocil7cmV0dXJuIHIuX3ByZXY9ci5f''@;'; put 'put ''Y2lwaGVyLmVuY3J5cHRCbG9jayhyLl9wcmV2KSxyLl9wcmV2fVMuZW5jcnlwdD1mdW5jdGlvbihyLHQpe2Zvcig7ci5fY2FjaGUubGVuZ3RoPHQubGVuZ3RoOylyLl9jYWNoZT1iLmNvbmNhdChbci5fY2FjaGUsbyhyKV0pO3ZhciBlPXIuX2NhY2hlLnNsaWNlKDAsdC5sZW5ndGgpO3JldHVy''@;'; put 'put ''biByLl9jYWNoZT1yLl9jYWNoZS5zbGljZSh0Lmxlbmd0aCksYSh0LGUpfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMscygiYnVmZmVyIikuQnVmZmVyKX0se2J1ZmZlcjoyMjAsImJ1ZmZlci14b3IiOjIxOX1dLDIwNTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIu''@;'; put 'put ''L2FlcyIpLGE9cygic2FmZS1idWZmZXIiKS5CdWZmZXIsbz1zKCJjaXBoZXItYmFzZSIpO2Z1bmN0aW9uIHIodCxlLGwsbil7by5jYWxsKHRoaXMpLHRoaXMuX2NpcGhlcj1uZXcgYi5BRVMoZSksdGhpcy5fcHJldj1hLmZyb20obCksdGhpcy5fY2FjaGU9YS5hbGxvY1Vuc2FmZSgwKSx0aGlz''@;'; put 'put ''Ll9zZWNDYWNoZT1hLmFsbG9jVW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9bix0aGlzLl9tb2RlPXR9cygiaW5oZXJpdHMiKShyLG8pLHIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHQsdGhpcy5fZGVjcnlwdCl9LHIucHJvdG90''@;'; put 'put ''eXBlLl9maW5hbD1mdW5jdGlvbigpe3RoaXMuX2NpcGhlci5zY3J1YigpfSxFLmV4cG9ydHM9cn0seyIuL2FlcyI6MTg5LCJjaXBoZXItYmFzZSI6MjIxLGluaGVyaXRzOjQ0MCwic2FmZS1idWZmZXIiOjQ5NH1dLDIwNjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCJi''@;'; put 'put ''cm93c2VyaWZ5LWRlcyIpLGE9cygiYnJvd3NlcmlmeS1hZXMvYnJvd3NlciIpLG89cygiYnJvd3NlcmlmeS1hZXMvbW9kZXMiKSxyPXMoImJyb3dzZXJpZnktZGVzL21vZGVzIiksdD1zKCJldnBfYnl0ZXN0b2tleSIpO2Z1bmN0aW9uIGUobixpLGgpe2lmKG49bi50b0xvd2VyQ2FzZSgpLG9b''@;'; put 'put ''bl0pcmV0dXJuIGEuY3JlYXRlQ2lwaGVyaXYobixpLGgpO2lmKHJbbl0pcmV0dXJuIG5ldyBiKHtrZXk6aSxpdjpoLG1vZGU6bn0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfWZ1bmN0aW9uIGwobixpLGgpe2lmKG49bi50b0xvd2VyQ2FzZSgpLG9bbl0pcmV0''@;'; put 'put ''dXJuIGEuY3JlYXRlRGVjaXBoZXJpdihuLGksaCk7aWYocltuXSlyZXR1cm4gbmV3IGIoe2tleTppLGl2OmgsbW9kZTpuLGRlY3J5cHQ6ITB9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1TLmNyZWF0ZUNpcGhlcj1TLkNpcGhlcj1mdW5jdGlvbihuLGkpe3Zh''@;'; put 'put ''ciBoLGY7aWYobj1uLnRvTG93ZXJDYXNlKCksb1tuXSloPW9bbl0ua2V5LGY9b1tuXS5pdjtlbHNle2lmKCFyW25dKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2g9OCpyW25dLmtleSxmPXJbbl0uaXZ9dmFyIHU9dChpLCExLGgsZik7cmV0dXJuIGUobix1Lmtl''@;'; put 'put ''eSx1Lml2KX0sUy5jcmVhdGVDaXBoZXJpdj1TLkNpcGhlcml2PWUsUy5jcmVhdGVEZWNpcGhlcj1TLkRlY2lwaGVyPWZ1bmN0aW9uKG4saSl7dmFyIGgsZjtpZihuPW4udG9Mb3dlckNhc2UoKSxvW25dKWg9b1tuXS5rZXksZj1vW25dLml2O2Vsc2V7aWYoIXJbbl0pdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aD04KnJbbl0ua2V5LGY9cltuXS5pdn12YXIgdT10KGksITEsaCxmKTtyZXR1cm4gbChuLHUua2V5LHUuaXYpfSxTLmNyZWF0ZURlY2lwaGVyaXY9Uy5EZWNpcGhlcml2PWwsUy5saXN0Q2lwaGVycz1TLmdldENpcGhlcnM9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gT2JqZWN0LmtleXMocikuY29uY2F0KGEuZ2V0Q2lwaGVycygpKX19LHsiYnJvd3NlcmlmeS1hZXMvYnJvd3NlciI6MTkxLCJicm93c2VyaWZ5LWFlcy9tb2RlcyI6MjAyLCJicm93c2VyaWZ5LWRlcyI6MjA3LCJicm93c2VyaWZ5LWRlcy9tb2RlcyI6MjA4LGV2cF9ieXRlc3Rva2V5''@;'; put 'put ''OjQyM31dLDIwNzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCJjaXBoZXItYmFzZSIpLGE9cygiZGVzLmpzIiksbz1zKCJpbmhlcml0cyIpLHI9cygic2FmZS1idWZmZXIiKS5CdWZmZXIsdD17ImRlcy1lZGUzLWNiYyI6YS5DQkMuaW5zdGFudGlhdGUoYS5FREUpLCJk''@;'; put 'put ''ZXMtZWRlMyI6YS5FREUsImRlcy1lZGUtY2JjIjphLkNCQy5pbnN0YW50aWF0ZShhLkVERSksImRlcy1lZGUiOmEuRURFLCJkZXMtY2JjIjphLkNCQy5pbnN0YW50aWF0ZShhLkRFUyksImRlcy1lY2IiOmEuREVTfTtmdW5jdGlvbiBlKGwpe2IuY2FsbCh0aGlzKTt2YXIgbixpPWwubW9kZS50''@;'; put 'put ''b0xvd2VyQ2FzZSgpLGg9dFtpXTtuPWwuZGVjcnlwdD8iZGVjcnlwdCI6ImVuY3J5cHQiO3ZhciBmPWwua2V5O3IuaXNCdWZmZXIoZil8fChmPXIuZnJvbShmKSksImRlcy1lZGUiIT09aSYmImRlcy1lZGUtY2JjIiE9PWl8fChmPXIuY29uY2F0KFtmLGYuc2xpY2UoMCw4KV0pKTt2YXIgdT1s''@;'; put 'put ''Lml2O3IuaXNCdWZmZXIodSl8fCh1PXIuZnJvbSh1KSksdGhpcy5fZGVzPWguY3JlYXRlKHtrZXk6Zixpdjp1LHR5cGU6bn0pfXQuZGVzPXRbImRlcy1jYmMiXSx0LmRlczM9dFsiZGVzLWVkZTMtY2JjIl0sRS5leHBvcnRzPWUsbyhlLGIpLGUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24o''@;'; put 'put ''bCl7cmV0dXJuIHIuZnJvbSh0aGlzLl9kZXMudXBkYXRlKGwpKX0sZS5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHIuZnJvbSh0aGlzLl9kZXMuZmluYWwoKSl9fSx7ImNpcGhlci1iYXNlIjoyMjEsImRlcy5qcyI6Mzk0LGluaGVyaXRzOjQ0MCwic2FmZS1idWZmZXIiOjQ5''@;'; put 'put ''NH1dLDIwODpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtTWyJkZXMtZWNiIl09e2tleTo4LGl2OjB9LFNbImRlcy1jYmMiXT1TLmRlcz17a2V5OjgsaXY6OH0sU1siZGVzLWVkZTMtY2JjIl09Uy5kZXMzPXtrZXk6MjQsaXY6OH0sU1siZGVzLWVkZTMiXT17a2V5OjI0LGl2OjB9LFNb''@;'; put 'put ''ImRlcy1lZGUtY2JjIl09e2tleToxNixpdjo4fSxTWyJkZXMtZWRlIl09e2tleToxNixpdjowfX0se31dLDIwOTpbZnVuY3Rpb24ocyxFLFMpeyhmdW5jdGlvbihiKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGE9cygiYm4uanMiKSxvPXMoInJhbmRvbWJ5dGVzIik7ZnVuY3Rpb24g''@;'; put 'put ''cihlKXt2YXIgbCxuPWUubW9kdWx1cy5ieXRlTGVuZ3RoKCk7ZG97bD1uZXcgYShvKG4pKX13aGlsZShsLmNtcChlLm1vZHVsdXMpPj0wfHwhbC51bW9kKGUucHJpbWUxKXx8IWwudW1vZChlLnByaW1lMikpO3JldHVybiBsfWZ1bmN0aW9uIHQoZSxsKXt2YXIgTCxOLG49e2JsaW5kZXI6KE49''@;'; put 'put ''cihMPWwpKS50b1JlZChhLm1vbnQoTC5tb2R1bHVzKSkucmVkUG93KG5ldyBhKEwucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCksdW5ibGluZGVyOk4uaW52bShMLm1vZHVsdXMpfSxpPWwubW9kdWx1cy5ieXRlTGVuZ3RoKCksaD1uZXcgYShlKS5tdWwobi5ibGluZGVyKS51bW9kKGwubW9k''@;'; put 'put ''dWx1cyksZj1oLnRvUmVkKGEubW9udChsLnByaW1lMSkpLHU9aC50b1JlZChhLm1vbnQobC5wcmltZTIpKSxwPWwuY29lZmZpY2llbnQsZD1sLnByaW1lMSx2PWwucHJpbWUyLF89Zi5yZWRQb3cobC5leHBvbmVudDEpLmZyb21SZWQoKSxBPXUucmVkUG93KGwuZXhwb25lbnQyKS5mcm9tUmVk''@;'; put 'put ''KCksST1fLmlzdWIoQSkuaW11bChwKS51bW9kKGQpLmltdWwodik7cmV0dXJuIEEuaWFkZChJKS5pbXVsKG4udW5ibGluZGVyKS51bW9kKGwubW9kdWx1cykudG9BcnJheUxpa2UoYiwiYmUiLGkpfXQuZ2V0cj1yLEUuZXhwb3J0cz10fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxzKCJidWZm''@;'; put 'put ''ZXIiKS5CdWZmZXIpfSx7ImJuLmpzIjoxODYsYnVmZmVyOjIyMCxyYW5kb21ieXRlczo0NzV9XSwyMTA6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7RS5leHBvcnRzPXMoIi4vYnJvd3Nlci9hbGdvcml0aG1zLmpzb24iKX0seyIuL2Jyb3dzZXIvYWxnb3JpdGhtcy5qc29uIjoyMTF9''@;'; put 'put ''XSwyMTE6W2Z1bmN0aW9uKHMsRSxTKXtFLmV4cG9ydHM9e3NoYTIyNFdpdGhSU0FFbmNyeXB0aW9uOntzaWduOiJyc2EiLGhhc2g6InNoYTIyNCIsaWQ6IjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjIn0sIlJTQS1TSEEyMjQiOntzaWduOiJlY2RzYS9yc2EiLGhhc2g6''@;'; put 'put ''InNoYTIyNCIsaWQ6IjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjIn0sc2hhMjU2V2l0aFJTQUVuY3J5cHRpb246e3NpZ246InJzYSIsaGFzaDoic2hhMjU2IixpZDoiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjAifSwiUlNBLVNIQTI1NiI6e3Np''@;'; put 'put ''Z246ImVjZHNhL3JzYSIsaGFzaDoic2hhMjU2IixpZDoiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjAifSxzaGEzODRXaXRoUlNBRW5jcnlwdGlvbjp7c2lnbjoicnNhIixoYXNoOiJzaGEzODQiLGlkOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQz''@;'; put 'put ''MCJ9LCJSU0EtU0hBMzg0Ijp7c2lnbjoiZWNkc2EvcnNhIixoYXNoOiJzaGEzODQiLGlkOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LHNoYTUxMldpdGhSU0FFbmNyeXB0aW9uOntzaWduOiJyc2EiLGhhc2g6InNoYTUxMiIsaWQ6IjMwNTEzMDBkMDYwOTYwODY0''@;'; put 'put ''ODAxNjUwMzA0MDIwMzA1MDAwNDQwIn0sIlJTQS1TSEE1MTIiOntzaWduOiJlY2RzYS9yc2EiLGhhc2g6InNoYTUxMiIsaWQ6IjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwIn0sIlJTQS1TSEExIjp7c2lnbjoicnNhIixoYXNoOiJzaGExIixpZDoiMzAyMTMwMDkwNjA1''@;'; put 'put ''MmIwZTAzMDIxYTA1MDAwNDE0In0sImVjZHNhLXdpdGgtU0hBMSI6e3NpZ246ImVjZHNhIixoYXNoOiJzaGExIixpZDoiIn0sc2hhMjU2OntzaWduOiJlY2RzYSIsaGFzaDoic2hhMjU2IixpZDoiIn0sc2hhMjI0OntzaWduOiJlY2RzYSIsaGFzaDoic2hhMjI0IixpZDoiIn0sc2hhMzg0Ontz''@;'; put 'put ''aWduOiJlY2RzYSIsaGFzaDoic2hhMzg0IixpZDoiIn0sc2hhNTEyOntzaWduOiJlY2RzYSIsaGFzaDoic2hhNTEyIixpZDoiIn0sIkRTQS1TSEEiOntzaWduOiJkc2EiLGhhc2g6InNoYTEiLGlkOiIifSwiRFNBLVNIQTEiOntzaWduOiJkc2EiLGhhc2g6InNoYTEiLGlkOiIifSxEU0E6e3Np''@;'; put 'put ''Z246ImRzYSIsaGFzaDoic2hhMSIsaWQ6IiJ9LCJEU0EtV0lUSC1TSEEyMjQiOntzaWduOiJkc2EiLGhhc2g6InNoYTIyNCIsaWQ6IiJ9LCJEU0EtU0hBMjI0Ijp7c2lnbjoiZHNhIixoYXNoOiJzaGEyMjQiLGlkOiIifSwiRFNBLVdJVEgtU0hBMjU2Ijp7c2lnbjoiZHNhIixoYXNoOiJzaGEy''@;'; put 'put ''NTYiLGlkOiIifSwiRFNBLVNIQTI1NiI6e3NpZ246ImRzYSIsaGFzaDoic2hhMjU2IixpZDoiIn0sIkRTQS1XSVRILVNIQTM4NCI6e3NpZ246ImRzYSIsaGFzaDoic2hhMzg0IixpZDoiIn0sIkRTQS1TSEEzODQiOntzaWduOiJkc2EiLGhhc2g6InNoYTM4NCIsaWQ6IiJ9LCJEU0EtV0lUSC1T''@;'; put 'put ''SEE1MTIiOntzaWduOiJkc2EiLGhhc2g6InNoYTUxMiIsaWQ6IiJ9LCJEU0EtU0hBNTEyIjp7c2lnbjoiZHNhIixoYXNoOiJzaGE1MTIiLGlkOiIifSwiRFNBLVJJUEVNRDE2MCI6e3NpZ246ImRzYSIsaGFzaDoicm1kMTYwIixpZDoiIn0scmlwZW1kMTYwV2l0aFJTQTp7c2lnbjoicnNhIixo''@;'; put 'put ''YXNoOiJybWQxNjAiLGlkOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSwiUlNBLVJJUEVNRDE2MCI6e3NpZ246InJzYSIsaGFzaDoicm1kMTYwIixpZDoiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0In0sbWQ1V2l0aFJTQUVuY3J5cHRpb246e3NpZ246InJzYSIsaGFz''@;'; put 'put ''aDoibWQ1IixpZDoiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwIn0sIlJTQS1NRDUiOntzaWduOiJyc2EiLGhhc2g6Im1kNSIsaWQ6IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9fX0se31dLDIxMjpbZnVuY3Rpb24ocyxFLFMpe0UuZXhwb3J0cz17''@;'; put 'put ''IjEuMy4xMzIuMC4xMCI6InNlY3AyNTZrMSIsIjEuMy4xMzIuMC4zMyI6InAyMjQiLCIxLjIuODQwLjEwMDQ1LjMuMS4xIjoicDE5MiIsIjEuMi44NDAuMTAwNDUuMy4xLjciOiJwMjU2IiwiMS4zLjEzMi4wLjM0IjoicDM4NCIsIjEuMy4xMzIuMC4zNSI6InA1MjEifX0se31dLDIxMzpbZnVu''@;'; put 'put ''Y3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcixhPXMoImNyZWF0ZS1oYXNoIiksbz1zKCJyZWFkYWJsZS1zdHJlYW0iKSxyPXMoImluaGVyaXRzIiksdD1zKCIuL3NpZ24iKSxlPXMoIi4vdmVyaWZ5IiksbD1zKCIuL2FsZ29yaXRobXMuanNv''@;'; put 'put ''biIpO2Z1bmN0aW9uIG4odSl7by5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBwPWxbdV07aWYoIXApdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFzaFR5cGU9cC5oYXNoLHRoaXMuX2hhc2g9YShwLmhhc2gpLHRoaXMuX3RhZz1wLmlkLHRoaXMuX3Np''@;'; put 'put ''Z25UeXBlPXAuc2lnbn1mdW5jdGlvbiBpKHUpe28uV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgcD1sW3VdO2lmKCFwKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2g9YShwLmhhc2gpLHRoaXMuX3RhZz1wLmlkLHRoaXMuX3NpZ25UeXBlPXAuc2ln''@;'; put 'put ''bn1mdW5jdGlvbiBoKHUpe3JldHVybiBuZXcgbih1KX1mdW5jdGlvbiBmKHUpe3JldHVybiBuZXcgaSh1KX1PYmplY3Qua2V5cyhsKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe2xbdV0uaWQ9Yi5mcm9tKGxbdV0uaWQsImhleCIpLGxbdS50b0xvd2VyQ2FzZSgpXT1sW3VdfSkscihuLG8uV3JpdGFi''@;'; put 'put ''bGUpLG4ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbih1LHAsZCl7dGhpcy5faGFzaC51cGRhdGUodSksZCgpfSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odSxwKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHUmJih1PWIuZnJvbSh1LHApKSx0aGlzLl9oYXNoLnVwZGF0ZSh1KSx0aGlz''@;'; put 'put ''fSxuLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKHUscCl7dGhpcy5lbmQoKTt2YXIgZD10aGlzLl9oYXNoLmRpZ2VzdCgpLHY9dChkLHUsdGhpcy5faGFzaFR5cGUsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKTtyZXR1cm4gcD92LnRvU3RyaW5nKHApOnZ9LHIoaSxvLldyaXRhYmxlKSxpLnBy''@;'; put 'put ''b3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24odSxwLGQpe3RoaXMuX2hhc2gudXBkYXRlKHUpLGQoKX0saS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHUscCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB1JiYodT1iLmZyb20odSxwKSksdGhpcy5faGFzaC51cGRhdGUodSksdGhpc30saS5wcm90''@;'; put 'put ''b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKHUscCxkKXsic3RyaW5nIj09dHlwZW9mIHAmJihwPWIuZnJvbShwLGQpKSx0aGlzLmVuZCgpO3ZhciB2PXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuIGUocCx2LHUsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKX0sRS5leHBvcnRzPXtTaWduOmgsVmVy''@;'; put 'put ''aWZ5OmYsY3JlYXRlU2lnbjpoLGNyZWF0ZVZlcmlmeTpmfX0seyIuL2FsZ29yaXRobXMuanNvbiI6MjExLCIuL3NpZ24iOjIxNCwiLi92ZXJpZnkiOjIxNSwiY3JlYXRlLWhhc2giOjM4Nixpbmhlcml0czo0NDAsInJlYWRhYmxlLXN0cmVhbSI6NDkxLCJzYWZlLWJ1ZmZlciI6NDk0fV0sMjE0''@;'; put 'put ''OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoInNhZmUtYnVmZmVyIikuQnVmZmVyLGE9cygiY3JlYXRlLWhtYWMiKSxvPXMoImJyb3dzZXJpZnktcnNhIikscj1zKCJlbGxpcHRpYyIpLmVjLHQ9cygiYm4uanMiKSxlPXMoInBhcnNlLWFzbjEiKSxsPXMoIi4vY3VydmVz''@;'; put 'put ''Lmpzb24iKTtmdW5jdGlvbiBuKHUscCxkLHYpe2lmKCh1PWIuZnJvbSh1LnRvQXJyYXkoKSkpLmxlbmd0aDxwLmJ5dGVMZW5ndGgoKSl7dmFyIF89Yi5hbGxvYyhwLmJ5dGVMZW5ndGgoKS11Lmxlbmd0aCk7dT1iLmNvbmNhdChbXyx1XSl9dmFyIEE9ZC5sZW5ndGgsST1mdW5jdGlvbihQLEIp''@;'; put 'put ''e1A9KFA9aShQLEIpKS5tb2QoQik7dmFyICQ9Yi5mcm9tKFAudG9BcnJheSgpKTtpZigkLmxlbmd0aDxCLmJ5dGVMZW5ndGgoKSl7dmFyIEQ9Yi5hbGxvYyhCLmJ5dGVMZW5ndGgoKS0kLmxlbmd0aCk7JD1iLmNvbmNhdChbRCwkXSl9cmV0dXJuICR9KGQscCksTD1iLmFsbG9jKEEpO0wuZmls''@;'; put 'put ''bCgxKTt2YXIgTj1iLmFsbG9jKEEpO3JldHVybiBOPWEodixOKS51cGRhdGUoTCkudXBkYXRlKGIuZnJvbShbMF0pKS51cGRhdGUodSkudXBkYXRlKEkpLmRpZ2VzdCgpLEw9YSh2LE4pLnVwZGF0ZShMKS5kaWdlc3QoKSx7azpOPWEodixOKS51cGRhdGUoTCkudXBkYXRlKGIuZnJvbShbMV0p''@;'; put 'put ''KS51cGRhdGUodSkudXBkYXRlKEkpLmRpZ2VzdCgpLHY6TD1hKHYsTikudXBkYXRlKEwpLmRpZ2VzdCgpfX1mdW5jdGlvbiBpKHUscCl7dmFyIGQ9bmV3IHQodSksdj0odS5sZW5ndGg8PDMpLXAuYml0TGVuZ3RoKCk7cmV0dXJuIHY+MCYmZC5pc2hybih2KSxkfWZ1bmN0aW9uIGgodSxwLGQp''@;'; put 'put ''e3ZhciB2LF87ZG97Zm9yKHY9Yi5hbGxvYygwKTs4KnYubGVuZ3RoPHUuYml0TGVuZ3RoKCk7KXAudj1hKGQscC5rKS51cGRhdGUocC52KS5kaWdlc3QoKSx2PWIuY29uY2F0KFt2LHAudl0pO189aSh2LHUpLHAuaz1hKGQscC5rKS51cGRhdGUocC52KS51cGRhdGUoYi5mcm9tKFswXSkpLmRp''@;'; put 'put ''Z2VzdCgpLHAudj1hKGQscC5rKS51cGRhdGUocC52KS5kaWdlc3QoKX13aGlsZSgtMSE9PV8uY21wKHUpKTtyZXR1cm4gX31mdW5jdGlvbiBmKHUscCxkLHYpe3JldHVybiB1LnRvUmVkKHQubW9udChkKSkucmVkUG93KHApLmZyb21SZWQoKS5tb2Qodil9RS5leHBvcnRzPWZ1bmN0aW9uKHUs''@;'; put 'put ''cCxkLHYsXyl7dmFyIEE9ZShwKTtpZihBLmN1cnZlKXtpZigiZWNkc2EiIT09diYmImVjZHNhL3JzYSIhPT12KXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbihQLEIpe3ZhciAkPWxbQi5jdXJ2ZS5qb2luKCIuIildO2lmKCEkKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigidW5rbm93biBjdXJ2ZSAiK0IuY3VydmUuam9pbigiLiIpKTt2YXIgRD1uZXcgcigkKS5rZXlGcm9tUHJpdmF0ZShCLnByaXZhdGVLZXkpLnNpZ24oUCk7cmV0dXJuIGIuZnJvbShELnRvREVSKCkpfSh1LEEpfWlmKCJkc2EiPT09QS50eXBlKXtpZigiZHNhIiE9PXYpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uKFAsQiwkKXtmb3IodmFyIEQseD1CLnBhcmFtcy5wcml2X2tleSxNPUIucGFyYW1zLnAsaj1CLnBhcmFtcy5xLGM9Qi5wYXJhbXMuZyxtPW5ldyB0KDApLGc9aShQLGopLm1vZChqKSx5PSExLHc9''@;'; put 'put ''bih4LGosUCwkKTshMT09PXk7KW09ZihjLEQ9aChqLHcsJCksTSxqKSwwPT09KHk9RC5pbnZtKGopLmltdWwoZy5hZGQoeC5tdWwobSkpKS5tb2QoaikpLmNtcG4oMCkmJih5PSExLG09bmV3IHQoMCkpO3JldHVybiBmdW5jdGlvbihrLE8pe2s9ay50b0FycmF5KCksTz1PLnRvQXJyYXkoKSwx''@;'; put 'put ''Mjgma1swXSYmKGs9WzBdLmNvbmNhdChrKSksMTI4Jk9bMF0mJihPPVswXS5jb25jYXQoTykpO3ZhciB6PVs0OCxrLmxlbmd0aCtPLmxlbmd0aCs0LDIsay5sZW5ndGhdO3JldHVybiB6PXouY29uY2F0KGssWzIsTy5sZW5ndGhdLE8pLGIuZnJvbSh6KX0obSx5KX0odSxBLGQpfWlmKCJyc2Ei''@;'; put 'put ''IT09diYmImVjZHNhL3JzYSIhPT12KXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3U9Yi5jb25jYXQoW18sdV0pO2Zvcih2YXIgST1BLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLEw9WzAsMV07dS5sZW5ndGgrTC5sZW5ndGgrMTxJOylMLnB1c2goMjU1KTtMLnB1c2go''@;'; put 'put ''MCk7Zm9yKHZhciBOPS0xOysrTjx1Lmxlbmd0aDspTC5wdXNoKHVbTl0pO3JldHVybiBvKEwsQSl9LEUuZXhwb3J0cy5nZXRLZXk9bixFLmV4cG9ydHMubWFrZUtleT1ofSx7Ii4vY3VydmVzLmpzb24iOjIxMiwiYm4uanMiOjE4NiwiYnJvd3NlcmlmeS1yc2EiOjIwOSwiY3JlYXRlLWhtYWMi''@;'; put 'put ''OjM4OCxlbGxpcHRpYzo0MDUsInBhcnNlLWFzbjEiOjQ1OSwic2FmZS1idWZmZXIiOjQ5NH1dLDIxNTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcixhPXMoImJuLmpzIiksbz1zKCJlbGxpcHRpYyIpLmVjLHI9cygicGFyc2UtYXNu''@;'; put 'put ''MSIpLHQ9cygiLi9jdXJ2ZXMuanNvbiIpO2Z1bmN0aW9uIGUobCxuKXtpZihsLmNtcG4oMCk8PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpO2lmKGwuY21wKG4pPj1uKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKX1FLmV4cG9ydHM9ZnVuY3Rpb24obCxuLGksaCxmKXt2''@;'; put 'put ''YXIgdT1yKGkpO2lmKCJlYyI9PT11LnR5cGUpe2lmKCJlY2RzYSIhPT1oJiYiZWNkc2EvcnNhIiE9PWgpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24oTCxOLFApe3ZhciBCPXRbUC5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIild''@;'; put 'put ''O2lmKCFCKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjdXJ2ZSAiK1AuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIpKTtyZXR1cm4gbmV3IG8oQikudmVyaWZ5KE4sTCxQLmRhdGEuc3ViamVjdFByaXZhdGVLZXkuZGF0YSl9KGwsbix1KX1pZigiZHNhIj09PXUudHlwZSl7aWYoImRz''@;'; put 'put ''YSIhPT1oKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uKEwsTixQKXt2YXIgQj1QLmRhdGEucCwkPVAuZGF0YS5xLEQ9UC5kYXRhLmcseD1QLmRhdGEucHViX2tleSxNPXIuc2lnbmF0dXJlLmRlY29kZShMLCJkZXIiKSxqPU0ucyxjPU0u''@;'; put 'put ''cjtlKGosJCksZShjLCQpO3ZhciBtPWEubW9udChCKSxnPWouaW52bSgkKTtyZXR1cm4gMD09PUQudG9SZWQobSkucmVkUG93KG5ldyBhKE4pLm11bChnKS5tb2QoJCkpLmZyb21SZWQoKS5tdWwoeC50b1JlZChtKS5yZWRQb3coYy5tdWwoZykubW9kKCQpKS5mcm9tUmVkKCkpLm1vZChCKS5t''@;'; put 'put ''b2QoJCkuY21wKGMpfShsLG4sdSl9aWYoInJzYSIhPT1oJiYiZWNkc2EvcnNhIiE9PWgpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtuPWIuY29uY2F0KFtmLG5dKTtmb3IodmFyIHA9dS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxkPVsxXSx2PTA7bi5sZW5ndGgrZC5s''@;'; put 'put ''ZW5ndGgrMjxwOylkLnB1c2goMjU1KSx2Kys7ZC5wdXNoKDApO2Zvcih2YXIgXz0tMTsrK188bi5sZW5ndGg7KWQucHVzaChuW19dKTtkPWIuZnJvbShkKTt2YXIgQT1hLm1vbnQodS5tb2R1bHVzKTtsPShsPW5ldyBhKGwpLnRvUmVkKEEpKS5yZWRQb3cobmV3IGEodS5wdWJsaWNFeHBvbmVu''@;'; put 'put ''dCkpLGw9Yi5mcm9tKGwuZnJvbVJlZCgpLnRvQXJyYXkoKSk7dmFyIEk9djw4PzE6MDtmb3IocD1NYXRoLm1pbihsLmxlbmd0aCxkLmxlbmd0aCksbC5sZW5ndGghPT1kLmxlbmd0aCYmKEk9MSksXz0tMTsrK188cDspSXw9bFtfXV5kW19dO3JldHVybiAwPT09SX19LHsiLi9jdXJ2ZXMuanNv''@;'; put 'put ''biI6MjEyLCJibi5qcyI6MTg2LGVsbGlwdGljOjQwNSwicGFyc2UtYXNuMSI6NDU5LCJzYWZlLWJ1ZmZlciI6NDk0fV0sMjE2OltmdW5jdGlvbihzLEUsUyl7fSx7fV0sMjE3OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoImJ1ZmZlciIpLGE9Yi5CdWZmZXI7ZnVuY3Rp''@;'; put 'put ''b24gbyh0LGUpe2Zvcih2YXIgbCBpbiB0KWVbbF09dFtsXX1mdW5jdGlvbiByKHQsZSxsKXtyZXR1cm4gYSh0LGUsbCl9YS5mcm9tJiZhLmFsbG9jJiZhLmFsbG9jVW5zYWZlJiZhLmFsbG9jVW5zYWZlU2xvdz9FLmV4cG9ydHM9YjoobyhiLFMpLFMuQnVmZmVyPXIpLG8oYSxyKSxyLmZyb209''@;'; put 'put ''ZnVuY3Rpb24odCxlLGwpe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBhKHQsZSxsKX0sci5hbGxvYz1mdW5jdGlvbih0LGUsbCl7aWYoIm51bWJlciIhPXR5cGVvZiB0KXRocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgbj1hKHQpO3JldHVybiB2b2lkIDAhPT1lPyJzdHJpbmciPT10eXBlb2YgbD9uLmZpbGwoZSxsKTpuLmZpbGwoZSk6bi5maWxsKDApLG59LHIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odCl7aWYoIm51bWJlciIhPXR5cGVv''@;'; put 'put ''ZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gYSh0KX0sci5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odCl7aWYoIm51bWJlciIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIi''@;'; put 'put ''KTtyZXR1cm4gYi5TbG93QnVmZmVyKHQpfX0se2J1ZmZlcjoyMjB9XSwyMTg6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygic2FmZS1idWZmZXIiKS5CdWZmZXIsYT1iLmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKHUpe3N3aXRjaCgodT0iIit1KSYmdS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''KXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1''@;'; put 'put ''bmN0aW9uIG8odSl7dmFyIHA7c3dpdGNoKHRoaXMuZW5jb2Rpbmc9ZnVuY3Rpb24oZCl7dmFyIHY9ZnVuY3Rpb24oXyl7aWYoIV8pcmV0dXJuInV0ZjgiO2Zvcih2YXIgQTs7KXN3aXRjaChfKXtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiJ1dGY4IjtjYXNlInVjczIiOmNhc2UidWNz''@;'; put 'put ''LTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuInV0ZjE2bGUiO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuImxhdGluMSI7Y2FzZSJiYXNlNjQiOmNhc2UiYXNjaWkiOmNhc2UiaGV4IjpyZXR1cm4gXztkZWZhdWx0OmlmKEEpcmV0dXJuO189KCIiK18pLnRv''@;'; put 'put ''TG93ZXJDYXNlKCksQT0hMH19KGQpO2lmKCJzdHJpbmciIT10eXBlb2YgdiYmKGIuaXNFbmNvZGluZz09PWF8fCFhKGQpKSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZCk7cmV0dXJuIHZ8fGR9KHUpLHRoaXMuZW5jb2Rpbmcpe2Nhc2UidXRmMTZsZSI6dGhpcy50ZXh0''@;'; put 'put ''PWUsdGhpcy5lbmQ9bCxwPTQ7YnJlYWs7Y2FzZSJ1dGY4Ijp0aGlzLmZpbGxMYXN0PXQscD00O2JyZWFrO2Nhc2UiYmFzZTY0Ijp0aGlzLnRleHQ9bix0aGlzLmVuZD1pLHA9MzticmVhaztkZWZhdWx0OnJldHVybiB0aGlzLndyaXRlPWgsdm9pZCh0aGlzLmVuZD1mKX10aGlzLmxhc3ROZWVk''@;'; put 'put ''PTAsdGhpcy5sYXN0VG90YWw9MCx0aGlzLmxhc3RDaGFyPWIuYWxsb2NVbnNhZmUocCl9ZnVuY3Rpb24gcih1KXtyZXR1cm4gdTw9MTI3PzA6dT4+NT09Nj8yOnU+PjQ9PTE0PzM6dT4+Mz09MzA/NDp1Pj42PT0yPy0xOi0yfWZ1bmN0aW9uIHQodSl7dmFyIHA9dGhpcy5sYXN0VG90YWwtdGhp''@;'; put 'put ''cy5sYXN0TmVlZCxkPWZ1bmN0aW9uKHYsXyl7aWYoMTI4IT0oMTkyJl9bMF0pKXJldHVybiB2Lmxhc3ROZWVkPTAsIlx1ZmZmZCI7aWYodi5sYXN0TmVlZD4xJiZfLmxlbmd0aD4xKXtpZigxMjghPSgxOTImX1sxXSkpcmV0dXJuIHYubGFzdE5lZWQ9MSwiXHVmZmZkIjtpZih2Lmxhc3ROZWVk''@;'; put 'put ''PjImJl8ubGVuZ3RoPjImJjEyOCE9KDE5MiZfWzJdKSlyZXR1cm4gdi5sYXN0TmVlZD0yLCJcdWZmZmQifX0odGhpcyx1KTtyZXR1cm4gdm9pZCAwIT09ZD9kOnRoaXMubGFzdE5lZWQ8PXUubGVuZ3RoPyh1LmNvcHkodGhpcy5sYXN0Q2hhcixwLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0''@;'; put 'put ''Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpKToodS5jb3B5KHRoaXMubGFzdENoYXIscCwwLHUubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPXUubGVuZ3RoKSl9ZnVuY3Rpb24gZSh1LHApe2lmKCh1Lmxlbmd0aC1wKSUyPT0wKXt2YXIgZD11LnRvU3Ry''@;'; put 'put ''aW5nKCJ1dGYxNmxlIixwKTtpZihkKXt2YXIgdj1kLmNoYXJDb2RlQXQoZC5sZW5ndGgtMSk7aWYodj49NTUyOTYmJnY8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPXVbdS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT11''@;'; put 'put ''W3UubGVuZ3RoLTFdLGQuc2xpY2UoMCwtMSl9cmV0dXJuIGR9cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09dVt1Lmxlbmd0aC0xXSx1LnRvU3RyaW5nKCJ1dGYxNmxlIixwLHUubGVuZ3RoLTEpfWZ1bmN0aW9uIGwodSl7dmFyIHA9dSYm''@;'; put 'put ''dS5sZW5ndGg/dGhpcy53cml0ZSh1KToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9wK3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2bGUiLDAsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCk6cH1mdW5jdGlvbiBuKHUscCl7dmFyIGQ9KHUubGVuZ3RoLXApJTM7cmV0dXJuIDA9PT1k''@;'; put 'put ''P3UudG9TdHJpbmcoImJhc2U2NCIscCk6KHRoaXMubGFzdE5lZWQ9My1kLHRoaXMubGFzdFRvdGFsPTMsMT09PWQ/dGhpcy5sYXN0Q2hhclswXT11W3UubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPXVbdS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT11W3UubGVuZ3RoLTFdKSx1LnRv''@;'; put 'put ''U3RyaW5nKCJiYXNlNjQiLHAsdS5sZW5ndGgtZCkpfWZ1bmN0aW9uIGkodSl7dmFyIHA9dSYmdS5sZW5ndGg/dGhpcy53cml0ZSh1KToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9wK3RoaXMubGFzdENoYXIudG9TdHJpbmcoImJhc2U2NCIsMCwzLXRoaXMubGFzdE5lZWQpOnB9ZnVuY3Rpb24g''@;'; put 'put ''aCh1KXtyZXR1cm4gdS50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBmKHUpe3JldHVybiB1JiZ1Lmxlbmd0aD90aGlzLndyaXRlKHUpOiIifVMuU3RyaW5nRGVjb2Rlcj1vLG8ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHUpe2lmKDA9PT11Lmxlbmd0aClyZXR1cm4iIjt2YXIg''@;'; put 'put ''cCxkO2lmKHRoaXMubGFzdE5lZWQpe2lmKHZvaWQgMD09PShwPXRoaXMuZmlsbExhc3QodSkpKXJldHVybiIiO2Q9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSBkPTA7cmV0dXJuIGQ8dS5sZW5ndGg/cD9wK3RoaXMudGV4dCh1LGQpOnRoaXMudGV4dCh1LGQpOnB8fCIifSxv''@;'; put 'put ''LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24odSl7dmFyIHA9dSYmdS5sZW5ndGg/dGhpcy53cml0ZSh1KToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9wKyJcdWZmZmQiOnB9LG8ucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24odSxwKXt2YXIgZD1mdW5jdGlvbihfLEEsSSl7dmFyIEw9QS5sZW5ndGgt''@;'; put 'put ''MTtpZihMPEkpcmV0dXJuIDA7dmFyIE49cihBW0xdKTtyZXR1cm4gTj49MD8oTj4wJiYoXy5sYXN0TmVlZD1OLTEpLE4pOi0tTDxJfHwtMj09PU4/MDooTj1yKEFbTF0pKT49MD8oTj4wJiYoXy5sYXN0TmVlZD1OLTIpLE4pOi0tTDxJfHwtMj09PU4/MDooTj1yKEFbTF0pKT49MD8oTj4wJiYo''@;'; put 'put ''Mj09PU4/Tj0wOl8ubGFzdE5lZWQ9Ti0zKSxOKTowfSh0aGlzLHUscCk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIHUudG9TdHJpbmcoInV0ZjgiLHApO3RoaXMubGFzdFRvdGFsPWQ7dmFyIHY9dS5sZW5ndGgtKGQtdGhpcy5sYXN0TmVlZCk7cmV0dXJuIHUuY29weSh0aGlzLmxhc3RDaGFy''@;'; put 'put ''LDAsdiksdS50b1N0cmluZygidXRmOCIscCx2KX0sby5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24odSl7aWYodGhpcy5sYXN0TmVlZDw9dS5sZW5ndGgpcmV0dXJuIHUuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0''@;'; put 'put ''aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7dS5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHUubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT11Lmxlbmd0aH19LHsic2FmZS1idWZmZXIiOjIxN31dLDIx''@;'; put 'put ''OTpbZnVuY3Rpb24ocyxFLFMpeyhmdW5jdGlvbihiKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7RS5leHBvcnRzPWZ1bmN0aW9uKGEsbyl7Zm9yKHZhciByPU1hdGgubWluKGEubGVuZ3RoLG8ubGVuZ3RoKSx0PW5ldyBiKHIpLGU9MDtlPHI7KytlKXRbZV09YVtlXV5vW2VdO3JldHVybiB0''@;'; put 'put ''fX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMscygiYnVmZmVyIikuQnVmZmVyKX0se2J1ZmZlcjoyMjB9XSwyMjA6W2Z1bmN0aW9uKHMsRSxTKXsoZnVuY3Rpb24oYil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBhPXMoImJhc2U2NC1qcyIpLG89cygiaWVlZTc1NCIpO2Z1bmN0aW9u''@;'; put 'put ''IHIoVCl7aWYoVD4yMTQ3NDgzNjQ3KXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrVCsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyk7dmFyIEM9bmV3IFVpbnQ4QXJyYXkoVCk7cmV0dXJuIEMuX19wcm90b19fPXQucHJvdG90eXBlLEN9ZnVuY3Rpb24gdChULEMs''@;'; put 'put ''Ril7aWYoIm51bWJlciI9PXR5cGVvZiBUKXtpZigic3RyaW5nIj09dHlwZW9mIEMpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7cmV0dXJuIG4oVCl9cmV0dXJuIGUoVCxDLEYp''@;'; put 'put ''fWZ1bmN0aW9uIGUoVCxDLEYpe2lmKCJzdHJpbmciPT10eXBlb2YgVClyZXR1cm4gZnVuY3Rpb24oWCxLKXtpZigic3RyaW5nIj09dHlwZW9mIEsmJiIiIT09S3x8KEs9InV0ZjgiKSwhdC5pc0VuY29kaW5nKEspKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrSyk7''@;'; put 'put ''dmFyIHJ0PTB8ZihYLEspLHR0PXIocnQpLFc9dHQud3JpdGUoWCxLKTtyZXR1cm4gVyE9PXJ0JiYodHQ9dHQuc2xpY2UoMCxXKSksdHR9KFQsQyk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KFQpKXJldHVybiBpKFQpO2lmKG51bGw9PVQpdGhyb3cgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1l''@;'; put 'put ''bnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBUKTtpZihSKFQsQXJyYXlCdWZmZXIpfHxUJiZSKFQuYnVmZmVyLEFycmF5QnVmZmVyKSlyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24oWCxLLHJ0KXtpZihLPDB8fFguYnl0ZUxlbmd0aDxLKXRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZihYLmJ5dGVMZW5ndGg8SysocnR8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRl''@;'; put 'put ''IG9mIGJ1ZmZlciBib3VuZHMnKTt2YXIgdHQ7cmV0dXJuKHR0PXZvaWQgMD09PUsmJnZvaWQgMD09PXJ0P25ldyBVaW50OEFycmF5KFgpOnZvaWQgMD09PXJ0P25ldyBVaW50OEFycmF5KFgsSyk6bmV3IFVpbnQ4QXJyYXkoWCxLLHJ0KSkuX19wcm90b19fPXQucHJvdG90eXBlLHR0fShULEMs''@;'; put 'put ''Rik7aWYoIm51bWJlciI9PXR5cGVvZiBUKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3ZhciBxPVQudmFsdWVPZiYmVC52YWx1ZU9mKCk7aWYobnVsbCE9cSYmcSE9PVQp''@;'; put 'put ''cmV0dXJuIHQuZnJvbShxLEMsRik7dmFyIFk9ZnVuY3Rpb24oWCl7aWYodC5pc0J1ZmZlcihYKSl7dmFyIEs9MHxoKFgubGVuZ3RoKSxydD1yKEspO3JldHVybiAwPT09cnQubGVuZ3RofHxYLmNvcHkocnQsMCwwLEspLHJ0fXJldHVybiB2b2lkIDAhPT1YLmxlbmd0aD8ibnVtYmVyIiE9dHlw''@;'; put 'put ''ZW9mIFgubGVuZ3RofHxIKFgubGVuZ3RoKT9yKDApOmkoWCk6IkJ1ZmZlciI9PT1YLnR5cGUmJkFycmF5LmlzQXJyYXkoWC5kYXRhKT9pKFguZGF0YSk6dm9pZCAwfShUKTtpZihZKXJldHVybiBZO2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBUW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIHQuZnJvbShUW1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLEMsRik7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFy''@;'; put 'put ''cmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgVCl9ZnVuY3Rpb24gbChUKXtpZigibnVtYmVyIiE9dHlwZW9mIFQpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtp''@;'; put 'put ''ZihUPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytUKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1mdW5jdGlvbiBuKFQpe3JldHVybiBsKFQpLHIoVDwwPzA6MHxoKFQpKX1mdW5jdGlvbiBpKFQpe2Zvcih2YXIgQz1ULmxlbmd0aDwwPzA6MHxoKFQubGVu''@;'; put 'put ''Z3RoKSxGPXIoQykscT0wO3E8QztxKz0xKUZbcV09MjU1JlRbcV07cmV0dXJuIEZ9ZnVuY3Rpb24gaChUKXtpZihUPj0yMTQ3NDgzNjQ3KXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4N2ZmZmZmZmYg''@;'; put 'put ''Ynl0ZXMiKTtyZXR1cm4gMHxUfWZ1bmN0aW9uIGYoVCxDKXtpZih0LmlzQnVmZmVyKFQpKXJldHVybiBULmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoVCl8fFIoVCxBcnJheUJ1ZmZlcikpcmV0dXJuIFQuYnl0ZUxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIFQpdGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIFQpO3ZhciBGPVQubGVuZ3RoLHE9YXJndW1lbnRzLmxlbmd0aD4yJiYhMD09PWFyZ3VtZW50c1syXTtp''@;'; put 'put ''ZighcSYmMD09PUYpcmV0dXJuIDA7Zm9yKHZhciBZPSExOzspc3dpdGNoKEMpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIEY7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4geihUKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0''@;'; put 'put ''ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKkY7Y2FzZSJoZXgiOnJldHVybiBGPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIFUoVCkubGVuZ3RoO2RlZmF1bHQ6aWYoWSlyZXR1cm4gcT8tMTp6KFQpLmxlbmd0aDtDPSgiIitDKS50b0xvd2VyQ2FzZSgpLFk9ITB9fWZ1bmN0aW9uIHUo''@;'; put 'put ''VCxDLEYpe3ZhciBxPSExO2lmKCh2b2lkIDA9PT1DfHxDPDApJiYoQz0wKSxDPnRoaXMubGVuZ3RofHwoKHZvaWQgMD09PUZ8fEY+dGhpcy5sZW5ndGgpJiYoRj10aGlzLmxlbmd0aCksRjw9MCl8fChGPj4+PTApPD0oQz4+Pj0wKSlyZXR1cm4iIjtmb3IoVHx8KFQ9InV0ZjgiKTs7KXN3aXRj''@;'; put 'put ''aChUKXtjYXNlImhleCI6cmV0dXJuIE0odGhpcyxDLEYpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuICQodGhpcyxDLEYpO2Nhc2UiYXNjaWkiOnJldHVybiBEKHRoaXMsQyxGKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiB4KHRoaXMsQyxGKTtjYXNlImJhc2U2NCI6''@;'; put 'put ''cmV0dXJuIEIodGhpcyxDLEYpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gaih0aGlzLEMsRik7ZGVmYXVsdDppZihxKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrVCk7VD0oVCsiIikudG9Mb3dlckNh''@;'; put 'put ''c2UoKSxxPSEwfX1mdW5jdGlvbiBwKFQsQyxGKXt2YXIgcT1UW0NdO1RbQ109VFtGXSxUW0ZdPXF9ZnVuY3Rpb24gZChULEMsRixxLFkpe2lmKDA9PT1ULmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIEY/KHE9RixGPTApOkY+MjE0NzQ4MzY0Nz9GPTIxNDc0ODM2NDc6Rjwt''@;'; put 'put ''MjE0NzQ4MzY0OCYmKEY9LTIxNDc0ODM2NDgpLEgoRj0rRikmJihGPVk/MDpULmxlbmd0aC0xKSxGPDAmJihGPVQubGVuZ3RoK0YpLEY+PVQubGVuZ3RoKXtpZihZKXJldHVybi0xO0Y9VC5sZW5ndGgtMX1lbHNlIGlmKEY8MCl7aWYoIVkpcmV0dXJuLTE7Rj0wfWlmKCJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgQyYmKEM9dC5mcm9tKEMscSkpLHQuaXNCdWZmZXIoQykpcmV0dXJuIDA9PT1DLmxlbmd0aD8tMTp2KFQsQyxGLHEsWSk7aWYoIm51bWJlciI9PXR5cGVvZiBDKXJldHVybiBDJj0yNTUsImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/WT9VaW50OEFy''@;'; put 'put ''cmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoVCxDLEYpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoVCxDLEYpOnYoVCxbQ10sRixxLFkpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIHYo''@;'; put 'put ''VCxDLEYscSxZKXt2YXIgWCxLPTEscnQ9VC5sZW5ndGgsdHQ9Qy5sZW5ndGg7aWYodm9pZCAwIT09cSYmKCJ1Y3MyIj09PShxPVN0cmluZyhxKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PXF8fCJ1dGYxNmxlIj09PXF8fCJ1dGYtMTZsZSI9PT1xKSl7aWYoVC5sZW5ndGg8Mnx8Qy5sZW5n''@;'; put 'put ''dGg8MilyZXR1cm4tMTtLPTIscnQvPTIsdHQvPTIsRi89Mn1mdW5jdGlvbiBXKG50LGl0KXtyZXR1cm4gMT09PUs/bnRbaXRdOm50LnJlYWRVSW50MTZCRShpdCpLKX1pZihZKXt2YXIgUT0tMTtmb3IoWD1GO1g8cnQ7WCsrKWlmKFcoVCxYKT09PVcoQywtMT09PVE/MDpYLVEpKXtpZigtMT09''@;'; put 'put ''PVEmJihRPVgpLFgtUSsxPT09dHQpcmV0dXJuIFEqS31lbHNlLTEhPT1RJiYoWC09WC1RKSxRPS0xfWVsc2UgZm9yKEYrdHQ+cnQmJihGPXJ0LXR0KSxYPUY7WD49MDtYLS0pe2Zvcih2YXIgRz0hMCxldD0wO2V0PHR0O2V0KyspaWYoVyhULFgrZXQpIT09VyhDLGV0KSl7Rz0hMTticmVha31p''@;'; put 'put ''ZihHKXJldHVybiBYfXJldHVybi0xfWZ1bmN0aW9uIF8oVCxDLEYscSl7Rj1OdW1iZXIoRil8fDA7dmFyIFk9VC5sZW5ndGgtRjtxPyhxPU51bWJlcihxKSk+WSYmKHE9WSk6cT1ZO3ZhciBYPUMubGVuZ3RoO3E+WC8yJiYocT1YLzIpO2Zvcih2YXIgSz0wO0s8cTsrK0spe3ZhciBydD1wYXJz''@;'; put 'put ''ZUludChDLnN1YnN0cigyKkssMiksMTYpO2lmKEgocnQpKXJldHVybiBLO1RbRitLXT1ydH1yZXR1cm4gS31mdW5jdGlvbiBBKFQsQyxGLHEpe3JldHVybiBWKHooQyxULmxlbmd0aC1GKSxULEYscSl9ZnVuY3Rpb24gSShULEMsRixxKXtyZXR1cm4gVihmdW5jdGlvbihZKXtmb3IodmFyIFg9''@;'; put 'put ''W10sSz0wO0s8WS5sZW5ndGg7KytLKVgucHVzaCgyNTUmWS5jaGFyQ29kZUF0KEspKTtyZXR1cm4gWH0oQyksVCxGLHEpfWZ1bmN0aW9uIEwoVCxDLEYscSl7cmV0dXJuIEkoVCxDLEYscSl9ZnVuY3Rpb24gTihULEMsRixxKXtyZXR1cm4gVihVKEMpLFQsRixxKX1mdW5jdGlvbiBQKFQsQyxG''@;'; put 'put ''LHEpe3JldHVybiBWKGZ1bmN0aW9uKFksWCl7Zm9yKHZhciBLLHJ0LFc9W10sUT0wO1E8WS5sZW5ndGgmJiEoKFgtPTIpPDApOysrUSlydD0oSz1ZLmNoYXJDb2RlQXQoUSkpPj44LFcucHVzaChLJTI1NiksVy5wdXNoKHJ0KTtyZXR1cm4gV30oQyxULmxlbmd0aC1GKSxULEYscSl9ZnVuY3Rp''@;'; put 'put ''b24gQihULEMsRil7cmV0dXJuIGEuZnJvbUJ5dGVBcnJheSgwPT09QyYmRj09PVQubGVuZ3RoP1Q6VC5zbGljZShDLEYpKX1mdW5jdGlvbiAkKFQsQyxGKXtGPU1hdGgubWluKFQubGVuZ3RoLEYpO2Zvcih2YXIgcT1bXSxZPUM7WTxGOyl7dmFyIFgsSyxydCx0dCxXPVRbWV0sUT1udWxsLEc9''@;'; put 'put ''Vz4yMzk/NDpXPjIyMz8zOlc+MTkxPzI6MTtpZihZK0c8PUYpc3dpdGNoKEcpe2Nhc2UgMTpXPDEyOCYmKFE9Vyk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYoWD1UW1krMV0pKSYmKHR0PSgzMSZXKTw8Nnw2MyZYKT4xMjcmJihRPXR0KTticmVhaztjYXNlIDM6Sz1UW1krMl0sMTI4PT0oMTky''@;'; put 'put ''JihYPVRbWSsxXSkpJiYxMjg9PSgxOTImSykmJih0dD0oMTUmVyk8PDEyfCg2MyZYKTw8Nnw2MyZLKT4yMDQ3JiYodHQ8NTUyOTZ8fHR0PjU3MzQzKSYmKFE9dHQpO2JyZWFrO2Nhc2UgNDpLPVRbWSsyXSxydD1UW1krM10sMTI4PT0oMTkyJihYPVRbWSsxXSkpJiYxMjg9PSgxOTImSykmJjEy''@;'; put 'put ''OD09KDE5MiZydCkmJih0dD0oMTUmVyk8PDE4fCg2MyZYKTw8MTJ8KDYzJkspPDw2fDYzJnJ0KT42NTUzNSYmdHQ8MTExNDExMiYmKFE9dHQpfW51bGw9PT1RPyhRPTY1NTMzLEc9MSk6UT42NTUzNSYmKHEucHVzaCgoUS09NjU1MzYpPj4+MTAmMTAyM3w1NTI5NiksUT01NjMyMHwxMDIzJlEp''@;'; put 'put ''LHEucHVzaChRKSxZKz1HfXJldHVybiBmdW5jdGlvbihldCl7dmFyIG50PWV0Lmxlbmd0aDtpZihudDw9NDA5NilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZXQpO2Zvcih2YXIgaXQ9IiIsb3Q9MDtvdDxudDspaXQrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHko''@;'; put 'put ''U3RyaW5nLGV0LnNsaWNlKG90LG90Kz00MDk2KSk7cmV0dXJuIGl0fShxKX1mdW5jdGlvbiBEKFQsQyxGKXt2YXIgcT0iIjtGPU1hdGgubWluKFQubGVuZ3RoLEYpO2Zvcih2YXIgWT1DO1k8RjsrK1kpcSs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmVFtZXSk7cmV0dXJuIHF9ZnVuY3Rpb24g''@;'; put 'put ''eChULEMsRil7dmFyIHE9IiI7Rj1NYXRoLm1pbihULmxlbmd0aCxGKTtmb3IodmFyIFk9QztZPEY7KytZKXErPVN0cmluZy5mcm9tQ2hhckNvZGUoVFtZXSk7cmV0dXJuIHF9ZnVuY3Rpb24gTShULEMsRil7dmFyIHE9VC5sZW5ndGg7KCFDfHxDPDApJiYoQz0wKSwoIUZ8fEY8MHx8Rj5xKSYm''@;'; put 'put ''KEY9cSk7Zm9yKHZhciBZPSIiLFg9QztYPEY7KytYKVkrPU8oVFtYXSk7cmV0dXJuIFl9ZnVuY3Rpb24gaihULEMsRil7Zm9yKHZhciBxPVQuc2xpY2UoQyxGKSxZPSIiLFg9MDtYPHEubGVuZ3RoO1grPTIpWSs9U3RyaW5nLmZyb21DaGFyQ29kZShxW1hdKzI1NipxW1grMV0pO3JldHVybiBZ''@;'; put 'put ''fWZ1bmN0aW9uIGMoVCxDLEYpe2lmKFQlMSE9MHx8VDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihUK0M+Ril0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIG0oVCxDLEYs''@;'; put 'put ''cSxZLFgpe2lmKCF0LmlzQnVmZmVyKFQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihDPll8fEM8WCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYo''@;'; put 'put ''RitxPlQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBnKFQsQyxGLHEsWSxYKXtpZihGK3E+VC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKEY8MCl0aHJvdyBuZXcgUmFuZ2VFcnJv''@;'; put 'put ''cigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24geShULEMsRixxLFkpe3JldHVybiBDPStDLEY+Pj49MCxZfHxnKFQsMCxGLDQpLG8ud3JpdGUoVCxDLEYscSwyMyw0KSxGKzR9ZnVuY3Rpb24gdyhULEMsRixxLFkpe3JldHVybiBDPStDLEY+Pj49MCxZfHxnKFQsMCxGLDgpLG8ud3Jp''@;'; put 'put ''dGUoVCxDLEYscSw1Miw4KSxGKzh9Uy5CdWZmZXI9dCxTLlNsb3dCdWZmZXI9ZnVuY3Rpb24oVCl7cmV0dXJuK1QhPVQmJihUPTApLHQuYWxsb2MoK1QpfSxTLklOU1BFQ1RfTUFYX0JZVEVTPTUwLFMua01heExlbmd0aD0yMTQ3NDgzNjQ3LCh0LlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rp''@;'; put 'put ''b24oKXt0cnl7dmFyIFQ9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIFQuX19wcm90b19fPXtfX3Byb3RvX186VWludDhBcnJheS5wcm90b3R5cGUsZm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX0sNDI9PT1ULmZvbygpfWNhdGNoe3JldHVybiExfX0oKSl8fHR5cGVvZiBjb25zb2xlPiJ1Inx8''@;'; put 'put ''ImZ1bmN0aW9uIiE9dHlwZW9mIGNvbnNvbGUuZXJyb3J8fGNvbnNvbGUuZXJyb3IoIlRoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSBgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVx''@;'; put 'put ''dWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LiIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZih0LmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''dC5wcm90b3R5cGUsIm9mZnNldCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYodC5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wuc3BlY2llcyYmdFtTeW1ib2wuc3BlY2llc109PT10JiZPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkodCxTeW1ib2wuc3BlY2llcyx7dmFsdWU6bnVsbCxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMX0pLHQucG9vbFNpemU9ODE5Mix0LmZyb209ZnVuY3Rpb24oVCxDLEYpe3JldHVybiBlKFQsQyxGKX0sdC5wcm90b3R5cGUuX19wcm90''@;'; put 'put ''b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLHQuX19wcm90b19fPVVpbnQ4QXJyYXksdC5hbGxvYz1mdW5jdGlvbihULEMsRil7cmV0dXJuIFk9QyxYPUYsbChxPVQpLHE8PTA/cihxKTp2b2lkIDAhPT1ZPyJzdHJpbmciPT10eXBlb2YgWD9yKHEpLmZpbGwoWSxYKTpyKHEpLmZpbGwoWSk6cihx''@;'; put 'put ''KTt2YXIgcSxZLFh9LHQuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oVCl7cmV0dXJuIG4oVCl9LHQuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKFQpe3JldHVybiBuKFQpfSx0LmlzQnVmZmVyPWZ1bmN0aW9uKFQpe3JldHVybiBudWxsIT1UJiYhMD09PVQuX2lzQnVmZmVyJiZUIT09dC5wcm90b3R5''@;'; put 'put ''cGV9LHQuY29tcGFyZT1mdW5jdGlvbihULEMpe2lmKFIoVCxVaW50OEFycmF5KSYmKFQ9dC5mcm9tKFQsVC5vZmZzZXQsVC5ieXRlTGVuZ3RoKSksUihDLFVpbnQ4QXJyYXkpJiYoQz10LmZyb20oQyxDLm9mZnNldCxDLmJ5dGVMZW5ndGgpKSwhdC5pc0J1ZmZlcihUKXx8IXQuaXNCdWZmZXIo''@;'; put 'put ''QykpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoVD09PUMpcmV0dXJuIDA7Zm9yKHZhciBGPVQubGVuZ3RoLHE9Qy5sZW5ndGgsWT0wLFg9TWF0aC5taW4oRixxKTtZ''@;'; put 'put ''PFg7KytZKWlmKFRbWV0hPT1DW1ldKXtGPVRbWV0scT1DW1ldO2JyZWFrfXJldHVybiBGPHE/LTE6cTxGPzE6MH0sdC5pc0VuY29kaW5nPWZ1bmN0aW9uKFQpe3N3aXRjaChTdHJpbmcoVCkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2Np''@;'; put 'put ''aSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSx0LmNvbmNhdD1mdW5jdGlvbihULEMpe2lmKCFBcnJheS5pc0FycmF5KFQp''@;'; put 'put ''KXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09VC5sZW5ndGgpcmV0dXJuIHQuYWxsb2MoMCk7dmFyIEY7aWYodm9pZCAwPT09Qylmb3IoQz0wLEY9MDtGPFQubGVuZ3RoOysrRilDKz1UW0ZdLmxlbmd0aDt2''@;'; put 'put ''YXIgcT10LmFsbG9jVW5zYWZlKEMpLFk9MDtmb3IoRj0wO0Y8VC5sZW5ndGg7KytGKXt2YXIgWD1UW0ZdO2lmKFIoWCxVaW50OEFycmF5KSYmKFg9dC5mcm9tKFgpKSwhdC5pc0J1ZmZlcihYKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBv''@;'; put 'put ''ZiBCdWZmZXJzJyk7WC5jb3B5KHEsWSksWSs9WC5sZW5ndGh9cmV0dXJuIHF9LHQuYnl0ZUxlbmd0aD1mLHQucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCx0LnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgVD10aGlzLmxlbmd0aDtpZihUJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3Io''@;'; put 'put ''IkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciBDPTA7QzxUO0MrPTIpcCh0aGlzLEMsQysxKTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5sZW5ndGg7aWYoVCU0IT0wKXRocm93IG5ldyBSYW5n''@;'; put 'put ''ZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgQz0wO0M8VDtDKz00KXAodGhpcyxDLEMrMykscCh0aGlzLEMrMSxDKzIpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgVD10aGlzLmxlbmd0aDtp''@;'; put 'put ''ZihUJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciBDPTA7QzxUO0MrPTgpcCh0aGlzLEMsQys3KSxwKHRoaXMsQysxLEMrNikscCh0aGlzLEMrMixDKzUpLHAodGhpcyxDKzMsQys0KTtyZXR1cm4g''@;'; put 'put ''dGhpc30sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgVD10aGlzLmxlbmd0aDtyZXR1cm4gMD09PVQ/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/JCh0aGlzLDAsVCk6dS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHQucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPXQucHJvdG90''@;'; put 'put ''eXBlLnRvU3RyaW5nLHQucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihUKXtpZighdC5pc0J1ZmZlcihUKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT1UfHwwPT09dC5jb21wYXJlKHRoaXMsVCl9LHQucHJvdG90eXBlLmlu''@;'; put 'put ''c3BlY3Q9ZnVuY3Rpb24oKXt2YXIgVD0iIixDPVMuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIFQ9dGhpcy50b1N0cmluZygiaGV4IiwwLEMpLnJlcGxhY2UoLyguezJ9KS9nLCIkMSAiKS50cmltKCksdGhpcy5sZW5ndGg+QyYmKFQrPSIgLi4uICIpLCI8QnVmZmVyICIrVCsiPiJ9LHQucHJv''@;'; put 'put ''dG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oVCxDLEYscSxZKXtpZihSKFQsVWludDhBcnJheSkmJihUPXQuZnJvbShULFQub2Zmc2V0LFQuYnl0ZUxlbmd0aCkpLCF0LmlzQnVmZmVyKFQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0''@;'; put 'put ''eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIFQpO2lmKHZvaWQgMD09PUMmJihDPTApLHZvaWQgMD09PUYmJihGPVQ/VC5sZW5ndGg6MCksdm9pZCAwPT09cSYmKHE9MCksdm9pZCAwPT09WSYmKFk9dGhpcy5sZW5ndGgpLEM8MHx8Rj5ULmxlbmd0aHx8''@;'; put 'put ''cTwwfHxZPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihxPj1ZJiZDPj1GKXJldHVybiAwO2lmKHE+PVkpcmV0dXJuLTE7aWYoQz49RilyZXR1cm4gMTtpZih0aGlzPT09VClyZXR1cm4gMDtmb3IodmFyIFg9KFk+Pj49MCktKHE+Pj49''@;'; put 'put ''MCksSz0oRj4+Pj0wKS0oQz4+Pj0wKSxydD1NYXRoLm1pbihYLEspLHR0PXRoaXMuc2xpY2UocSxZKSxXPVQuc2xpY2UoQyxGKSxRPTA7UTxydDsrK1EpaWYodHRbUV0hPT1XW1FdKXtYPXR0W1FdLEs9V1tRXTticmVha31yZXR1cm4gWDxLPy0xOks8WD8xOjB9LHQucHJvdG90eXBlLmluY2x1''@;'; put 'put ''ZGVzPWZ1bmN0aW9uKFQsQyxGKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihULEMsRil9LHQucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oVCxDLEYpe3JldHVybiBkKHRoaXMsVCxDLEYsITApfSx0LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihULEMsRil7cmV0dXJuIGQodGhp''@;'; put 'put ''cyxULEMsRiwhMSl9LHQucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKFQsQyxGLHEpe2lmKHZvaWQgMD09PUMpcT0idXRmOCIsRj10aGlzLmxlbmd0aCxDPTA7ZWxzZSBpZih2b2lkIDA9PT1GJiYic3RyaW5nIj09dHlwZW9mIEMpcT1DLEY9dGhpcy5sZW5ndGgsQz0wO2Vsc2V7aWYoIWlzRmlu''@;'; put 'put ''aXRlKEMpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTtDPj4+PTAsaXNGaW5pdGUoRik/KEY+Pj49MCx2b2lkIDA9PT1xJiYocT0idXRmOCIpKToocT1GLEY9dm9pZCAwKX12''@;'; put 'put ''YXIgWT10aGlzLmxlbmd0aC1DO2lmKCh2b2lkIDA9PT1GfHxGPlkpJiYoRj1ZKSxULmxlbmd0aD4wJiYoRjwwfHxDPDApfHxDPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO3F8fChxPSJ1dGY4Iik7Zm9y''@;'; put 'put ''KHZhciBYPSExOzspc3dpdGNoKHEpe2Nhc2UiaGV4IjpyZXR1cm4gXyh0aGlzLFQsQyxGKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBBKHRoaXMsVCxDLEYpO2Nhc2UiYXNjaWkiOnJldHVybiBJKHRoaXMsVCxDLEYpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIEwo''@;'; put 'put ''dGhpcyxULEMsRik7Y2FzZSJiYXNlNjQiOnJldHVybiBOKHRoaXMsVCxDLEYpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gUCh0aGlzLFQsQyxGKTtkZWZhdWx0OmlmKFgpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNv''@;'; put 'put ''ZGluZzogIitxKTtxPSgiIitxKS50b0xvd2VyQ2FzZSgpLFg9ITB9fSx0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19LHQucHJvdG90eXBlLnNsaWNlPWZ1''@;'; put 'put ''bmN0aW9uKFQsQyl7dmFyIEY9dGhpcy5sZW5ndGg7KFQ9fn5UKTwwPyhUKz1GKTwwJiYoVD0wKTpUPkYmJihUPUYpLChDPXZvaWQgMD09PUM/Rjp+fkMpPDA/KEMrPUYpPDAmJihDPTApOkM+RiYmKEM9RiksQzxUJiYoQz1UKTt2YXIgcT10aGlzLnN1YmFycmF5KFQsQyk7cmV0dXJuIHEuX19w''@;'; put 'put ''cm90b19fPXQucHJvdG90eXBlLHF9LHQucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oVCxDLEYpe1Q+Pj49MCxDPj4+PTAsRnx8YyhULEMsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcT10aGlzW1RdLFk9MSxYPTA7KytYPEMmJihZKj0yNTYpOylxKz10aGlzW1QrWF0qWTtyZXR1cm4gcX0s''@;'; put 'put ''dC5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihULEMsRil7VD4+Pj0wLEM+Pj49MCxGfHxjKFQsQyx0aGlzLmxlbmd0aCk7Zm9yKHZhciBxPXRoaXNbVCstLUNdLFk9MTtDPjAmJihZKj0yNTYpOylxKz10aGlzW1QrLS1DXSpZO3JldHVybiBxfSx0LnByb3RvdHlwZS5yZWFkVUludDg9''@;'; put 'put ''ZnVuY3Rpb24oVCxDKXtyZXR1cm4gVD4+Pj0wLEN8fGMoVCwxLHRoaXMubGVuZ3RoKSx0aGlzW1RdfSx0LnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oVCxDKXtyZXR1cm4gVD4+Pj0wLEN8fGMoVCwyLHRoaXMubGVuZ3RoKSx0aGlzW1RdfHRoaXNbVCsxXTw8OH0sdC5wcm90b3R5''@;'; put 'put ''cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKFQsQyl7cmV0dXJuIFQ+Pj49MCxDfHxjKFQsMix0aGlzLmxlbmd0aCksdGhpc1tUXTw8OHx0aGlzW1QrMV19LHQucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihULEMpe3JldHVybiBUPj4+PTAsQ3x8YyhULDQsdGhpcy5sZW5ndGgpLCh0''@;'; put 'put ''aGlzW1RdfHRoaXNbVCsxXTw8OHx0aGlzW1QrMl08PDE2KSsxNjc3NzIxNip0aGlzW1QrM119LHQucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihULEMpe3JldHVybiBUPj4+PTAsQ3x8YyhULDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbVF0rKHRoaXNbVCsxXTw8MTZ8dGhp''@;'; put 'put ''c1tUKzJdPDw4fHRoaXNbVCszXSl9LHQucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihULEMsRil7VD4+Pj0wLEM+Pj49MCxGfHxjKFQsQyx0aGlzLmxlbmd0aCk7Zm9yKHZhciBxPXRoaXNbVF0sWT0xLFg9MDsrK1g8QyYmKFkqPTI1Nik7KXErPXRoaXNbVCtYXSpZO3JldHVybiBxPj0o''@;'; put 'put ''WSo9MTI4KSYmKHEtPU1hdGgucG93KDIsOCpDKSkscX0sdC5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKFQsQyxGKXtUPj4+PTAsQz4+Pj0wLEZ8fGMoVCxDLHRoaXMubGVuZ3RoKTtmb3IodmFyIHE9QyxZPTEsWD10aGlzW1QrLS1xXTtxPjAmJihZKj0yNTYpOylYKz10aGlzW1QrLS1x''@;'; put 'put ''XSpZO3JldHVybiBYPj0oWSo9MTI4KSYmKFgtPU1hdGgucG93KDIsOCpDKSksWH0sdC5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oVCxDKXtyZXR1cm4gVD4+Pj0wLEN8fGMoVCwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tUXT8tMSooMjU1LXRoaXNbVF0rMSk6dGhpc1tUXX0sdC5wcm90''@;'; put 'put ''b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oVCxDKXtUPj4+PTAsQ3x8YyhULDIsdGhpcy5sZW5ndGgpO3ZhciBGPXRoaXNbVF18dGhpc1tUKzFdPDw4O3JldHVybiAzMjc2OCZGPzQyOTQ5MDE3NjB8RjpGfSx0LnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihULEMpe1Q+Pj49MCxD''@;'; put 'put ''fHxjKFQsMix0aGlzLmxlbmd0aCk7dmFyIEY9dGhpc1tUKzFdfHRoaXNbVF08PDg7cmV0dXJuIDMyNzY4JkY/NDI5NDkwMTc2MHxGOkZ9LHQucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKFQsQyl7cmV0dXJuIFQ+Pj49MCxDfHxjKFQsNCx0aGlzLmxlbmd0aCksdGhpc1tUXXx0aGlz''@;'; put 'put ''W1QrMV08PDh8dGhpc1tUKzJdPDwxNnx0aGlzW1QrM108PDI0fSx0LnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihULEMpe3JldHVybiBUPj4+PTAsQ3x8YyhULDQsdGhpcy5sZW5ndGgpLHRoaXNbVF08PDI0fHRoaXNbVCsxXTw8MTZ8dGhpc1tUKzJdPDw4fHRoaXNbVCszXX0sdC5w''@;'; put 'put ''cm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oVCxDKXtyZXR1cm4gVD4+Pj0wLEN8fGMoVCw0LHRoaXMubGVuZ3RoKSxvLnJlYWQodGhpcyxULCEwLDIzLDQpfSx0LnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihULEMpe3JldHVybiBUPj4+PTAsQ3x8YyhULDQsdGhpcy5sZW5n''@;'; put 'put ''dGgpLG8ucmVhZCh0aGlzLFQsITEsMjMsNCl9LHQucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihULEMpe3JldHVybiBUPj4+PTAsQ3x8YyhULDgsdGhpcy5sZW5ndGgpLG8ucmVhZCh0aGlzLFQsITAsNTIsOCl9LHQucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihULEMp''@;'; put 'put ''e3JldHVybiBUPj4+PTAsQ3x8YyhULDgsdGhpcy5sZW5ndGgpLG8ucmVhZCh0aGlzLFQsITEsNTIsOCl9LHQucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKFQsQyxGLHEpe1Q9K1QsQz4+Pj0wLEY+Pj49MCxxfHxtKHRoaXMsVCxDLEYsTWF0aC5wb3coMiw4KkYpLTEsMCk7dmFyIFk9''@;'; put 'put ''MSxYPTA7Zm9yKHRoaXNbQ109MjU1JlQ7KytYPEYmJihZKj0yNTYpOyl0aGlzW0MrWF09VC9ZJjI1NTtyZXR1cm4gQytGfSx0LnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihULEMsRixxKXtUPStULEM+Pj49MCxGPj4+PTAscXx8bSh0aGlzLFQsQyxGLE1hdGgucG93KDIsOCpGKS0x''@;'; put 'put ''LDApO3ZhciBZPUYtMSxYPTE7Zm9yKHRoaXNbQytZXT0yNTUmVDstLVk+PTAmJihYKj0yNTYpOyl0aGlzW0MrWV09VC9YJjI1NTtyZXR1cm4gQytGfSx0LnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKFQsQyxGKXtyZXR1cm4gVD0rVCxDPj4+PTAsRnx8bSh0aGlzLFQsQywxLDI1NSww''@;'; put 'put ''KSx0aGlzW0NdPTI1NSZULEMrMX0sdC5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihULEMsRil7cmV0dXJuIFQ9K1QsQz4+Pj0wLEZ8fG0odGhpcyxULEMsMiw2NTUzNSwwKSx0aGlzW0NdPTI1NSZULHRoaXNbQysxXT1UPj4+OCxDKzJ9LHQucHJvdG90eXBlLndyaXRlVUludDE2''@;'; put 'put ''QkU9ZnVuY3Rpb24oVCxDLEYpe3JldHVybiBUPStULEM+Pj49MCxGfHxtKHRoaXMsVCxDLDIsNjU1MzUsMCksdGhpc1tDXT1UPj4+OCx0aGlzW0MrMV09MjU1JlQsQysyfSx0LnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKFQsQyxGKXtyZXR1cm4gVD0rVCxDPj4+PTAsRnx8bSh0''@;'; put 'put ''aGlzLFQsQyw0LDQyOTQ5NjcyOTUsMCksdGhpc1tDKzNdPVQ+Pj4yNCx0aGlzW0MrMl09VD4+PjE2LHRoaXNbQysxXT1UPj4+OCx0aGlzW0NdPTI1NSZULEMrNH0sdC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihULEMsRil7cmV0dXJuIFQ9K1QsQz4+Pj0wLEZ8fG0odGhpcyxU''@;'; put 'put ''LEMsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbQ109VD4+PjI0LHRoaXNbQysxXT1UPj4+MTYsdGhpc1tDKzJdPVQ+Pj44LHRoaXNbQyszXT0yNTUmVCxDKzR9LHQucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oVCxDLEYscSl7aWYoVD0rVCxDPj4+PTAsIXEpe3ZhciBZPU1hdGgucG93KDIs''@;'; put 'put ''OCpGLTEpO20odGhpcyxULEMsRixZLTEsLVkpfXZhciBYPTAsSz0xLHJ0PTA7Zm9yKHRoaXNbQ109MjU1JlQ7KytYPEYmJihLKj0yNTYpOylUPDAmJjA9PT1ydCYmMCE9PXRoaXNbQytYLTFdJiYocnQ9MSksdGhpc1tDK1hdPShUL0t8MCktcnQmMjU1O3JldHVybiBDK0Z9LHQucHJvdG90eXBl''@;'; put 'put ''LndyaXRlSW50QkU9ZnVuY3Rpb24oVCxDLEYscSl7aWYoVD0rVCxDPj4+PTAsIXEpe3ZhciBZPU1hdGgucG93KDIsOCpGLTEpO20odGhpcyxULEMsRixZLTEsLVkpfXZhciBYPUYtMSxLPTEscnQ9MDtmb3IodGhpc1tDK1hdPTI1NSZUOy0tWD49MCYmKEsqPTI1Nik7KVQ8MCYmMD09PXJ0JiYw''@;'; put 'put ''IT09dGhpc1tDK1grMV0mJihydD0xKSx0aGlzW0MrWF09KFQvS3wwKS1ydCYyNTU7cmV0dXJuIEMrRn0sdC5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKFQsQyxGKXtyZXR1cm4gVD0rVCxDPj4+PTAsRnx8bSh0aGlzLFQsQywxLDEyNywtMTI4KSxUPDAmJihUPTI1NStUKzEpLHRoaXNb''@;'; put 'put ''Q109MjU1JlQsQysxfSx0LnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oVCxDLEYpe3JldHVybiBUPStULEM+Pj49MCxGfHxtKHRoaXMsVCxDLDIsMzI3NjcsLTMyNzY4KSx0aGlzW0NdPTI1NSZULHRoaXNbQysxXT1UPj4+OCxDKzJ9LHQucHJvdG90eXBlLndyaXRlSW50MTZCRT1m''@;'; put 'put ''dW5jdGlvbihULEMsRil7cmV0dXJuIFQ9K1QsQz4+Pj0wLEZ8fG0odGhpcyxULEMsMiwzMjc2NywtMzI3NjgpLHRoaXNbQ109VD4+PjgsdGhpc1tDKzFdPTI1NSZULEMrMn0sdC5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKFQsQyxGKXtyZXR1cm4gVD0rVCxDPj4+PTAsRnx8bSh0''@;'; put 'put ''aGlzLFQsQyw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNbQ109MjU1JlQsdGhpc1tDKzFdPVQ+Pj44LHRoaXNbQysyXT1UPj4+MTYsdGhpc1tDKzNdPVQ+Pj4yNCxDKzR9LHQucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihULEMsRil7cmV0dXJuIFQ9K1QsQz4+Pj0wLEZ8''@;'; put 'put ''fG0odGhpcyxULEMsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxUPDAmJihUPTQyOTQ5NjcyOTUrVCsxKSx0aGlzW0NdPVQ+Pj4yNCx0aGlzW0MrMV09VD4+PjE2LHRoaXNbQysyXT1UPj4+OCx0aGlzW0MrM109MjU1JlQsQys0fSx0LnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24o''@;'; put 'put ''VCxDLEYpe3JldHVybiB5KHRoaXMsVCxDLCEwLEYpfSx0LnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oVCxDLEYpe3JldHVybiB5KHRoaXMsVCxDLCExLEYpfSx0LnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKFQsQyxGKXtyZXR1cm4gdyh0aGlzLFQsQywhMCxGKX0s''@;'; put 'put ''dC5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihULEMsRil7cmV0dXJuIHcodGhpcyxULEMsITEsRil9LHQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oVCxDLEYscSl7aWYoIXQuaXNCdWZmZXIoVCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVm''@;'; put 'put ''ZmVyIik7aWYoRnx8KEY9MCkscXx8MD09PXF8fChxPXRoaXMubGVuZ3RoKSxDPj1ULmxlbmd0aCYmKEM9VC5sZW5ndGgpLEN8fChDPTApLHE+MCYmcTxGJiYocT1GKSxxPT09Rnx8MD09PVQubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoQzwwKXRocm93IG5ldyBSYW5nZUVy''@;'; put 'put ''cm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYoRjwwfHxGPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO3E+dGhpcy5sZW5n''@;'; put 'put ''dGgmJihxPXRoaXMubGVuZ3RoKSxULmxlbmd0aC1DPHEtRiYmKHE9VC5sZW5ndGgtQytGKTt2YXIgWT1xLUY7aWYodGhpcz09PVQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKXRoaXMuY29weVdpdGhpbihDLEYscSk7ZWxzZSBpZih0aGlzPT09''@;'; put 'put ''VCYmRjxDJiZDPHEpZm9yKHZhciBYPVktMTtYPj0wOy0tWClUW1grQ109dGhpc1tYK0ZdO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoVCx0aGlzLnN1YmFycmF5KEYscSksQyk7cmV0dXJuIFl9LHQucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oVCxDLEYscSl7aWYoInN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBUKXtpZigic3RyaW5nIj09dHlwZW9mIEM/KHE9QyxDPTAsRj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiBGJiYocT1GLEY9dGhpcy5sZW5ndGgpLHZvaWQgMCE9PXEmJiJzdHJpbmciIT10eXBlb2YgcSl0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0''@;'; put 'put ''IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBxJiYhdC5pc0VuY29kaW5nKHEpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcSk7aWYoMT09PVQubGVuZ3RoKXt2YXIgWT1ULmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PXEmJlk8MTI4fHwibGF0aW4x''@;'; put 'put ''Ij09PXEpJiYoVD1ZKX19ZWxzZSJudW1iZXIiPT10eXBlb2YgVCYmKFQmPTI1NSk7aWYoQzwwfHx0aGlzLmxlbmd0aDxDfHx0aGlzLmxlbmd0aDxGKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihGPD1DKXJldHVybiB0aGlzO3ZhciBYO2lmKEM+Pj49MCxG''@;'; put 'put ''PXZvaWQgMD09PUY/dGhpcy5sZW5ndGg6Rj4+PjAsVHx8KFQ9MCksIm51bWJlciI9PXR5cGVvZiBUKWZvcihYPUM7WDxGOysrWCl0aGlzW1hdPVQ7ZWxzZXt2YXIgSz10LmlzQnVmZmVyKFQpP1Q6dC5mcm9tKFQscSkscnQ9Sy5sZW5ndGg7aWYoMD09PXJ0KXRocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''J1RoZSB2YWx1ZSAiJytUKyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3IoWD0wO1g8Ri1DOysrWCl0aGlzW1grQ109S1tYJXJ0XX1yZXR1cm4gdGhpc307dmFyIGs9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBPKFQpe3JldHVybiBUPDE2PyIwIitULnRvU3Ry''@;'; put 'put ''aW5nKDE2KTpULnRvU3RyaW5nKDE2KX1mdW5jdGlvbiB6KFQsQyl7dmFyIEY7Qz1DfHwxLzA7Zm9yKHZhciBxPVQubGVuZ3RoLFk9bnVsbCxYPVtdLEs9MDtLPHE7KytLKXtpZigoRj1ULmNoYXJDb2RlQXQoSykpPjU1Mjk1JiZGPDU3MzQ0KXtpZighWSl7aWYoRj41NjMxOSl7KEMtPTMpPi0x''@;'; put 'put ''JiZYLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKEsrMT09PXEpeyhDLT0zKT4tMSYmWC5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1ZPUY7Y29udGludWV9aWYoRjw1NjMyMCl7KEMtPTMpPi0xJiZYLnB1c2goMjM5LDE5MSwxODkpLFk9Rjtjb250aW51ZX1GPTY1NTM2KyhZLTU1''@;'; put 'put ''Mjk2PDwxMHxGLTU2MzIwKX1lbHNlIFkmJihDLT0zKT4tMSYmWC5wdXNoKDIzOSwxOTEsMTg5KTtpZihZPW51bGwsRjwxMjgpe2lmKChDLT0xKTwwKWJyZWFrO1gucHVzaChGKX1lbHNlIGlmKEY8MjA0OCl7aWYoKEMtPTIpPDApYnJlYWs7WC5wdXNoKEY+PjZ8MTkyLDYzJkZ8MTI4KX1lbHNl''@;'; put 'put ''IGlmKEY8NjU1MzYpe2lmKChDLT0zKTwwKWJyZWFrO1gucHVzaChGPj4xMnwyMjQsRj4+NiY2M3wxMjgsNjMmRnwxMjgpfWVsc2V7aWYoIShGPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKEMtPTQpPDApYnJlYWs7WC5wdXNoKEY+PjE4fDI0MCxG''@;'; put 'put ''Pj4xMiY2M3wxMjgsRj4+NiY2M3wxMjgsNjMmRnwxMjgpfX1yZXR1cm4gWH1mdW5jdGlvbiBVKFQpe3JldHVybiBhLnRvQnl0ZUFycmF5KGZ1bmN0aW9uKEMpe2lmKChDPShDPUMuc3BsaXQoIj0iKVswXSkudHJpbSgpLnJlcGxhY2UoaywiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7Qy5s''@;'; put 'put ''ZW5ndGglNCE9MDspQys9Ij0iO3JldHVybiBDfShUKSl9ZnVuY3Rpb24gVihULEMsRixxKXtmb3IodmFyIFk9MDtZPHEmJiEoWStGPj1DLmxlbmd0aHx8WT49VC5sZW5ndGgpOysrWSlDW1krRl09VFtZXTtyZXR1cm4gWX1mdW5jdGlvbiBSKFQsQyl7cmV0dXJuIFQgaW5zdGFuY2VvZiBDfHxu''@;'; put 'put ''dWxsIT1UJiZudWxsIT1ULmNvbnN0cnVjdG9yJiZudWxsIT1ULmNvbnN0cnVjdG9yLm5hbWUmJlQuY29uc3RydWN0b3IubmFtZT09PUMubmFtZX1mdW5jdGlvbiBIKFQpe3JldHVybiBUIT1UfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMscygiYnVmZmVyIikuQnVmZmVyKX0seyJiYXNlNjQt''@;'; put 'put ''anMiOjE4NSxidWZmZXI6MjIwLGllZWU3NTQ6NDM5fV0sMjIxOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoInNhZmUtYnVmZmVyIikuQnVmZmVyLGE9cygic3RyZWFtIikuVHJhbnNmb3JtLG89cygic3RyaW5nX2RlY29kZXIiKS5TdHJpbmdEZWNvZGVyO2Z1bmN0aW9u''@;'; put 'put ''IHIodCl7YS5jYWxsKHRoaXMpLHRoaXMuaGFzaE1vZGU9InN0cmluZyI9PXR5cGVvZiB0LHRoaXMuaGFzaE1vZGU/dGhpc1t0XT10aGlzLl9maW5hbE9yRGlnZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9maW5hbCYmKHRoaXMuX19maW5hbD10aGlzLl9maW5hbCx0''@;'; put 'put ''aGlzLl9maW5hbD1udWxsKSx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH1zKCJpbmhlcml0cyIpKHIsYSksci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxsKXsic3RyaW5nIj09dHlwZW9mIHQmJih0PWIuZnJvbSh0LGUpKTt2YXIgbj10aGlzLl91cGRhdGUo''@;'; put 'put ''dCk7cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczoobCYmKG49dGhpcy5fdG9TdHJpbmcobixsKSksbil9LHIucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSxyLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gZ2V0''@;'; put 'put ''IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LHIucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sci5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKCl7dGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSxyLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxsKXt2YXIgbjt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUodCk6dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZSh0KSl9Y2F0''@;'; put 'put ''Y2goaSl7bj1pfWZpbmFsbHl7bChuKX19LHIucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7dGhpcy5wdXNoKHRoaXMuX19maW5hbCgpKX1jYXRjaChsKXtlPWx9dChlKX0sci5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2Zp''@;'; put 'put ''bmFsKCl8fGIuYWxsb2MoMCk7cmV0dXJuIHQmJihlPXRoaXMuX3RvU3RyaW5nKGUsdCwhMCkpLGV9LHIucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbih0LGUsbCl7aWYodGhpcy5fZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IG8oZSksdGhpcy5fZW5jb2Rpbmc9ZSksdGhpcy5fZW5j''@;'; put 'put ''b2RpbmchPT1lKXRocm93IG5ldyBFcnJvcigiY2FuJ3Qgc3dpdGNoIGVuY29kaW5ncyIpO3ZhciBuPXRoaXMuX2RlY29kZXIud3JpdGUodCk7cmV0dXJuIGwmJihuKz10aGlzLl9kZWNvZGVyLmVuZCgpKSxufSxFLmV4cG9ydHM9cn0se2luaGVyaXRzOjQ0MCwic2FmZS1idWZmZXIiOjQ5NCxz''@;'; put 'put ''dHJlYW06NTA1LHN0cmluZ19kZWNvZGVyOjIxOH1dLDIyMjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiKSxhPXMoIi4uL2ludGVybmFscy90cnktdG8tc3RyaW5nIiksbz1UeXBlRXJyb3I7RS5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''KHIpe2lmKGIocikpcmV0dXJuIHI7dGhyb3cgbmV3IG8oYShyKSsiIGlzIG5vdCBhIGZ1bmN0aW9uIil9fSx7Ii4uL2ludGVybmFscy9pcy1jYWxsYWJsZSI6Mjg1LCIuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZyI6MzQ5fV0sMjIzOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBiPXMoIi4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvciIpLGE9cygiLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmciKSxvPVR5cGVFcnJvcjtFLmV4cG9ydHM9ZnVuY3Rpb24ocil7aWYoYihyKSlyZXR1cm4gcjt0aHJvdyBuZXcgbyhhKHIpKyIgaXMgbm90IGEgY29uc3RydWN0b3IiKX19''@;'; put 'put ''LHsiLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yIjoyODYsIi4uL2ludGVybmFscy90cnktdG8tc3RyaW5nIjozNDl9XSwyMjQ6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIiksYT1TdHJpbmcsbz1UeXBlRXJyb3I7RS5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uKHIpe2lmKCJvYmplY3QiPT10eXBlb2Ygcnx8YihyKSlyZXR1cm4gcjt0aHJvdyBuZXcgbygiQ2FuJ3Qgc2V0ICIrYShyKSsiIGFzIGEgcHJvdG90eXBlIil9fSx7Ii4uL2ludGVybmFscy9pcy1jYWxsYWJsZSI6Mjg1fV0sMjI1OltmdW5jdGlvbihzLEUsUyl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCIpLGE9cygiLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUiKSxvPXMoIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5IikuZixyPWIoInVuc2NvcGFibGVzIiksdD1BcnJheS5wcm90b3R5''@;'; put 'put ''cGU7dm9pZCAwPT09dFtyXSYmbyh0LHIse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTphKG51bGwpfSksRS5leHBvcnRzPWZ1bmN0aW9uKGUpe3Rbcl1bZV09ITB9fSx7Ii4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlIjozMDYsIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Ijoz''@;'; put 'put ''MDgsIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCI6MzU3fV0sMjI2OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mIiksYT1UeXBlRXJyb3I7RS5leHBvcnRzPWZ1bmN0aW9uKG8scil7aWYoYihy''@;'; put 'put ''LG8pKXJldHVybiBvO3Rocm93IG5ldyBhKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpfX0seyIuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZiI6MzE0fV0sMjI3OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9pcy1vYmplY3QiKSxh''@;'; put 'put ''PVN0cmluZyxvPVR5cGVFcnJvcjtFLmV4cG9ydHM9ZnVuY3Rpb24ocil7aWYoYihyKSlyZXR1cm4gcjt0aHJvdyBuZXcgbyhhKHIpKyIgaXMgbm90IGFuIG9iamVjdCIpfX0seyIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0IjoyODl9XSwyMjg6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIGI9cygiLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0IiksYT1zKCIuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgiKSxvPXMoIi4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZSIpLHI9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbCxuKXt2YXIgaSxo''@;'; put 'put ''PWIoZSksZj1vKGgpLHU9YShuLGYpO2lmKHQmJmwhPWwpe2Zvcig7Zj51OylpZigoaT1oW3UrK10pIT1pKXJldHVybiEwfWVsc2UgZm9yKDtmPnU7dSsrKWlmKCh0fHx1IGluIGgpJiZoW3VdPT09bClyZXR1cm4gdHx8dXx8MDtyZXR1cm4hdCYmLTF9fTtFLmV4cG9ydHM9e2luY2x1ZGVzOnIo''@;'; put 'put ''ITApLGluZGV4T2Y6cighMSl9fSx7Ii4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZSI6Mjk5LCIuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgiOjM0MCwiLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0IjozNDF9XSwyMjk6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCIpLGE9cygiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyIpLG89cygiLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Iikscj1zKCIuLi9pbnRlcm5hbHMvdG8tb2JqZWN0IiksdD1zKCIu''@;'; put 'put ''Li9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UiKSxlPXMoIi4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZSIpLGw9YShbXS5wdXNoKSxuPWZ1bmN0aW9uKGkpe3ZhciBoPTE9PT1pLGY9Mj09PWksdT0zPT09aSxwPTQ9PT1pLGQ9Nj09PWksdj03PT09aSxfPTU9PT1pfHxk''@;'; put 'put ''O3JldHVybiBmdW5jdGlvbihBLEksTCxOKXtmb3IodmFyIFAsQiwkPXIoQSksRD1vKCQpLHg9YihJLEwpLE09dChEKSxqPTAsYz1OfHxlLG09aD9jKEEsTSk6Znx8dj9jKEEsMCk6dm9pZCAwO00+ajtqKyspaWYoKF98fGogaW4gRCkmJihCPXgoUD1EW2pdLGosJCksaSkpaWYoaCltW2pdPUI7''@;'; put 'put ''ZWxzZSBpZihCKXN3aXRjaChpKXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiBQO2Nhc2UgNjpyZXR1cm4gajtjYXNlIDI6bChtLFApfWVsc2Ugc3dpdGNoKGkpe2Nhc2UgNDpyZXR1cm4hMTtjYXNlIDc6bChtLFApfXJldHVybiBkPy0xOnV8fHA/cDptfX07RS5leHBvcnRzPXtmb3JF''@;'; put 'put ''YWNoOm4oMCksbWFwOm4oMSksZmlsdGVyOm4oMiksc29tZTpuKDMpLGV2ZXJ5Om4oNCksZmluZDpuKDUpLGZpbmRJbmRleDpuKDYpLGZpbHRlclJlamVjdDpuKDcpfX0seyIuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUiOjIzMywiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQt''@;'; put 'put ''Y29udGV4dCI6MjYyLCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIjoyNjgsIi4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCI6MjgwLCIuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UiOjI5OSwiLi4vaW50ZXJuYWxzL3RvLW9iamVjdCI6MzQ0fV0sMjMwOltm''@;'; put 'put ''dW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCIpLGE9cygiLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlIiksbz1zKCIuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Iikscj1BcnJheSx0PU1hdGgubWF4''@;'; put 'put ''O0UuZXhwb3J0cz1mdW5jdGlvbihlLGwsbil7Zm9yKHZhciBpPWEoZSksaD1iKGwsaSksZj1iKHZvaWQgMD09PW4/aTpuLGkpLHU9cih0KGYtaCwwKSkscD0wO2g8ZjtoKysscCsrKW8odSxwLGVbaF0pO3JldHVybiB1Lmxlbmd0aD1wLHV9fSx7Ii4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVy''@;'; put 'put ''dHkiOjI0MywiLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlIjoyOTksIi4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCI6MzQwfV0sMjMxOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMi''@;'; put 'put ''KTtFLmV4cG9ydHM9YihbXS5zbGljZSl9LHsiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyI6MjY4fV0sMjMyOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9pcy1hcnJheSIpLGE9cygiLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVj''@;'; put 'put ''dG9yIiksbz1zKCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Iikscj1zKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiKSgic3BlY2llcyIpLHQ9QXJyYXk7RS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciBsO3JldHVybiBiKGUpJiYoYShsPWUuY29uc3RydWN0b3IpJiYobD09PXR8fGIo''@;'; put 'put ''bC5wcm90b3R5cGUpKXx8byhsKSYmbnVsbD09PShsPWxbcl0pKSYmKGw9dm9pZCAwKSx2b2lkIDA9PT1sP3Q6bH19LHsiLi4vaW50ZXJuYWxzL2lzLWFycmF5IjoyODQsIi4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvciI6Mjg2LCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0IjoyODksIi4uL2lu''@;'; put 'put ''dGVybmFscy93ZWxsLWtub3duLXN5bWJvbCI6MzU3fV0sMjMzOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yIik7RS5leHBvcnRzPWZ1bmN0aW9uKGEsbyl7cmV0dXJuIG5ldyhiKGEpKSgwPT09bz8w''@;'; put 'put ''Om8pfX0seyIuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvciI6MjMyfV0sMjM0OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCIpKCJpdGVyYXRvciIpLGE9ITE7dHJ5e3ZhciBvPTAscj17bmV4''@;'; put 'put ''dDpmdW5jdGlvbigpe3JldHVybntkb25lOiEhbysrfX0scmV0dXJuOmZ1bmN0aW9uKCl7YT0hMH19O3JbYl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sQXJyYXkuZnJvbShyLGZ1bmN0aW9uKCl7dGhyb3cgMn0pfWNhdGNoe31FLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0cnl7aWYoIWUmJiFh''@;'; put 'put ''KXJldHVybiExfWNhdGNoe3JldHVybiExfXZhciBsPSExO3RyeXt2YXIgbj17fTtuW2JdPWZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpsPSEwfX19fSx0KG4pfWNhdGNoe31yZXR1cm4gbH19LHsiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sIjoz''@;'; put 'put ''NTd9XSwyMzU6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyIpLGE9Yih7fS50b1N0cmluZyksbz1iKCIiLnNsaWNlKTtFLmV4cG9ydHM9ZnVuY3Rpb24ocil7cmV0dXJuIG8oYShyKSw4LC0xKX19LHsiLi4v''@;'; put 'put ''aW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyI6MjY4fV0sMjM2OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQiKSxhPXMoIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSIpLG89cygiLi4vaW50ZXJu''@;'; put 'put ''YWxzL2NsYXNzb2YtcmF3Iikscj1zKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiKSgidG9TdHJpbmdUYWciKSx0PU9iamVjdCxlPSJBcmd1bWVudHMiPT09byhmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO0UuZXhwb3J0cz1iP286ZnVuY3Rpb24obCl7dmFyIG4saSxo''@;'; put 'put ''O3JldHVybiB2b2lkIDA9PT1sPyJVbmRlZmluZWQiOm51bGw9PT1sPyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKGk9ZnVuY3Rpb24oZix1KXt0cnl7cmV0dXJuIGZbdV19Y2F0Y2h7fX0obj10KGwpLHIpKT9pOmU/byhuKToiT2JqZWN0Ij09PShoPW8obikpJiZhKG4uY2FsbGVlKT8iQXJndW1l''@;'; put 'put ''bnRzIjpofX0seyIuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXciOjIzNSwiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIjoyODUsIi4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQiOjM0NywiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sIjozNTd9XSwyMzc6W2Z1bmN0aW9u''@;'; put 'put ''KHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkiKSxhPXMoIi4uL2ludGVybmFscy9vd24ta2V5cyIpLG89cygiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IiKSxyPXMoIi4uL2ludGVybmFscy9v''@;'; put 'put ''YmplY3QtZGVmaW5lLXByb3BlcnR5Iik7RS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxsKXtmb3IodmFyIG49YShlKSxpPXIuZixoPW8uZixmPTA7ZjxuLmxlbmd0aDtmKyspe3ZhciB1PW5bZl07Yih0LHUpfHxsJiZiKGwsdSl8fGkodCx1LGgoZSx1KSl9fX0seyIuLi9pbnRlcm5hbHMvaGFzLW93''@;'; put 'put ''bi1wcm9wZXJ0eSI6Mjc1LCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eSI6MzA4LCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvciI6MzA5LCIuLi9pbnRlcm5hbHMvb3duLWtleXMiOjMyMX1dLDIzODpbZnVuY3Rpb24ocyxFLFMpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiKSgibWF0Y2giKTtFLmV4cG9ydHM9ZnVuY3Rpb24oYSl7dmFyIG89Ly4vO3RyeXsiLy4vIlthXShvKX1jYXRjaHt0cnl7cmV0dXJuIG9bYl09ITEsIi8uLyJbYV0obyl9Y2F0Y2h7fX1yZXR1cm4hMX19''@;'; put 'put ''LHsiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sIjozNTd9XSwyMzk6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2ZhaWxzIik7RS5leHBvcnRzPSFiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe31yZXR1cm4gYS5wcm90b3R5cGUuY29u''@;'; put 'put ''c3RydWN0b3I9bnVsbCxPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IGEpIT09YS5wcm90b3R5cGV9KX0seyIuLi9pbnRlcm5hbHMvZmFpbHMiOjI2MH1dLDI0MDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtFLmV4cG9ydHM9ZnVuY3Rpb24oYixhKXtyZXR1cm57dmFsdWU6Yixkb25l''@;'; put 'put ''OmF9fX0se31dLDI0MTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMiKSxhPXMoIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Iiksbz1zKCIuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0''@;'; put 'put ''b3IiKTtFLmV4cG9ydHM9Yj9mdW5jdGlvbihyLHQsZSl7cmV0dXJuIGEuZihyLHQsbygxLGUpKX06ZnVuY3Rpb24ocix0LGUpe3JldHVybiByW3RdPWUscn19LHsiLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yIjoyNDIsIi4uL2ludGVybmFscy9kZXNjcmlwdG9ycyI6''@;'; put 'put ''MjQ3LCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eSI6MzA4fV0sMjQyOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO0UuZXhwb3J0cz1mdW5jdGlvbihiLGEpe3JldHVybntlbnVtZXJhYmxlOiEoMSZiKSxjb25maWd1cmFibGU6ISgyJmIpLHdyaXRhYmxlOiEoNCZi''@;'; put 'put ''KSx2YWx1ZTphfX19LHt9XSwyNDM6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleSIpLGE9cygiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkiKSxvPXMoIi4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVy''@;'; put 'put ''dHktZGVzY3JpcHRvciIpO0UuZXhwb3J0cz1mdW5jdGlvbihyLHQsZSl7dmFyIGw9Yih0KTtsIGluIHI/YS5mKHIsbCxvKDAsZSkpOnJbbF09ZX19LHsiLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yIjoyNDIsIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3Bl''@;'; put 'put ''cnR5IjozMDgsIi4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkiOjM0Nn1dLDI0NDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbiIpLGE9cygiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkiKTtFLmV4''@;'; put 'put ''cG9ydHM9ZnVuY3Rpb24obyxyLHQpe3JldHVybiB0LmdldCYmYih0LmdldCxyLHtnZXR0ZXI6ITB9KSx0LnNldCYmYih0LnNldCxyLHtzZXR0ZXI6ITB9KSxhLmYobyxyLHQpfX0seyIuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbiI6MzAwLCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1w''@;'; put 'put ''cm9wZXJ0eSI6MzA4fV0sMjQ1OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSIpLGE9cygiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkiKSxvPXMoIi4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluIikscj1z''@;'; put 'put ''KCIuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eSIpO0UuZXhwb3J0cz1mdW5jdGlvbih0LGUsbCxuKXtufHwobj17fSk7dmFyIGk9bi5lbnVtZXJhYmxlLGg9dm9pZCAwIT09bi5uYW1lP24ubmFtZTplO2lmKGIobCkmJm8obCxoLG4pLG4uZ2xvYmFsKWk/dFtlXT1sOnIoZSxs''@;'; put 'put ''KTtlbHNle3RyeXtuLnVuc2FmZT90W2VdJiYoaT0hMCk6ZGVsZXRlIHRbZV19Y2F0Y2h7fWk/dFtlXT1sOmEuZih0LGUse3ZhbHVlOmwsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6IW4ubm9uQ29uZmlndXJhYmxlLHdyaXRhYmxlOiFuLm5vbldyaXRhYmxlfSl9cmV0dXJuIHR9fSx7Ii4u''@;'; put 'put ''L2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5IjoyNDYsIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSI6Mjg1LCIuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbiI6MzAwLCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eSI6MzA4fV0sMjQ2OltmdW5jdGlvbihzLEUs''@;'; put 'put ''Uyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9nbG9iYWwiKSxhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtFLmV4cG9ydHM9ZnVuY3Rpb24obyxyKXt0cnl7YShiLG8se3ZhbHVlOnIsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9Y2F0Y2h7YltvXT1yfXJldHVybiBy''@;'; put 'put ''fX0seyIuLi9pbnRlcm5hbHMvZ2xvYmFsIjoyNzR9XSwyNDc6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2ZhaWxzIik7RS5leHBvcnRzPSFiKGZ1bmN0aW9uKCl7cmV0dXJuIDchPT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sMSx7Z2V0OmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIDd9fSlbMV19KX0seyIuLi9pbnRlcm5hbHMvZmFpbHMiOjI2MH1dLDI0ODpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj0ib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5hbGw7RS5leHBvcnRzPXthbGw6YixJU19IVE1MRERBOnZv''@;'; put 'put ''aWQgMD09PWImJnZvaWQgMCE9PWJ9fSx7fV0sMjQ5OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9nbG9iYWwiKSxhPXMoIi4uL2ludGVybmFscy9pcy1vYmplY3QiKSxvPWIuZG9jdW1lbnQscj1hKG8pJiZhKG8uY3JlYXRlRWxlbWVudCk7RS5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByP28uY3JlYXRlRWxlbWVudCh0KTp7fX19LHsiLi4vaW50ZXJuYWxzL2dsb2JhbCI6Mjc0LCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0IjoyODl9XSwyNTA6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxz''@;'; put 'put ''L2VuZ2luZS1pcy1kZW5vIiksYT1zKCIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUiKTtFLmV4cG9ydHM9IWImJiFhJiYib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmIm9iamVjdCI9PXR5cGVvZiBkb2N1bWVudH0seyIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8iOjI1MSwiLi4vaW50''@;'; put 'put ''ZXJuYWxzL2VuZ2luZS1pcy1ub2RlIjoyNTR9XSwyNTE6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7RS5leHBvcnRzPSJvYmplY3QiPT10eXBlb2YgRGVubyYmRGVubyYmIm9iamVjdCI9PXR5cGVvZiBEZW5vLnZlcnNpb259LHt9XSwyNTI6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Iik7RS5leHBvcnRzPS9pcGFkfGlwaG9uZXxpcG9kL2kudGVzdChiKSYmdHlwZW9mIFBlYmJsZTwidSJ9LHsiLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50IjoyNTZ9XSwyNTM6W2Z1bmN0aW9uKHMsRSxT''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Iik7RS5leHBvcnRzPS8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KGIpfSx7Ii4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCI6MjU2fV0sMjU0OltmdW5jdGlv''@;'; put 'put ''bihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9nbG9iYWwiKSxhPXMoIi4uL2ludGVybmFscy9jbGFzc29mLXJhdyIpO0UuZXhwb3J0cz0icHJvY2VzcyI9PT1hKGIucHJvY2Vzcyl9LHsiLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3IjoyMzUsIi4uL2ludGVybmFs''@;'; put 'put ''cy9nbG9iYWwiOjI3NH1dLDI1NTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQiKTtFLmV4cG9ydHM9L3dlYjBzKD8hLipjaHJvbWUpL2kudGVzdChiKX0seyIuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQi''@;'; put 'put ''OjI1Nn1dLDI1NjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtFLmV4cG9ydHM9dHlwZW9mIG5hdmlnYXRvcjwidSImJlN0cmluZyhuYXZpZ2F0b3IudXNlckFnZW50KXx8IiJ9LHt9XSwyNTc6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGIsYSxvPXMoIi4uL2ludGVy''@;'; put 'put ''bmFscy9nbG9iYWwiKSxyPXMoIi4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCIpLHQ9by5wcm9jZXNzLGU9by5EZW5vLGw9dCYmdC52ZXJzaW9uc3x8ZSYmZS52ZXJzaW9uLG49bCYmbC52ODtuJiYoYT0oYj1uLnNwbGl0KCIuIikpWzBdPjAmJmJbMF08ND8xOisoYlswXStiWzFdKSks''@;'; put 'put ''IWEmJnImJighKGI9ci5tYXRjaCgvRWRnZVwvKFxkKykvKSl8fGJbMV0+PTc0KSYmKGI9ci5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pKSYmKGE9K2JbMV0pLEUuZXhwb3J0cz1hfSx7Ii4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCI6MjU2LCIuLi9pbnRlcm5hbHMvZ2xvYmFsIjoyNzR9''@;'; put 'put ''XSwyNTg6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7RS5leHBvcnRzPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl19LHt9XSwyNTk6''@;'; put 'put ''W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2dsb2JhbCIpLGE9cygiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IiKS5mLG89cygiLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0''@;'; put 'put ''eSIpLHI9cygiLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbiIpLHQ9cygiLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHkiKSxlPXMoIi4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMiKSxsPXMoIi4uL2ludGVybmFscy9pcy1mb3JjZWQiKTtFLmV4''@;'; put 'put ''cG9ydHM9ZnVuY3Rpb24obixpKXt2YXIgaCxmLHUscCxkLHY9bi50YXJnZXQsXz1uLmdsb2JhbCxBPW4uc3RhdDtpZihoPV8/YjpBP2Jbdl18fHQodix7fSk6KGJbdl18fHt9KS5wcm90b3R5cGUpZm9yKGYgaW4gaSl7aWYocD1pW2ZdLHU9bi5kb250Q2FsbEdldFNldD8oZD1hKGgsZikpJiZk''@;'; put 'put ''LnZhbHVlOmhbZl0sIWwoXz9mOnYrKEE/Ii4iOiIjIikrZixuLmZvcmNlZCkmJnZvaWQgMCE9PXUpe2lmKHR5cGVvZiBwPT10eXBlb2YgdSljb250aW51ZTtlKHAsdSl9KG4uc2hhbXx8dSYmdS5zaGFtKSYmbyhwLCJzaGFtIiwhMCkscihoLGYscCxuKX19fSx7Ii4uL2ludGVybmFscy9jb3B5''@;'; put 'put ''LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMiOjIzNywiLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eSI6MjQxLCIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluIjoyNDUsIi4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5IjoyNDYsIi4uL2ludGVy''@;'; put 'put ''bmFscy9nbG9iYWwiOjI3NCwiLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCI6Mjg3LCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvciI6MzA5fV0sMjYwOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO0UuZXhwb3J0cz1mdW5jdGlvbihiKXt0cnl7cmV0''@;'; put 'put ''dXJuISFiKCl9Y2F0Y2h7cmV0dXJuITB9fX0se31dLDI2MTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUiKSxhPUZ1bmN0aW9uLnByb3RvdHlwZSxvPWEuYXBwbHkscj1hLmNhbGw7RS5leHBvcnRzPSJvYmpl''@;'; put 'put ''Y3QiPT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5hcHBseXx8KGI/ci5iaW5kKG8pOmZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkobyxhcmd1bWVudHMpfSl9LHsiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlIjoyNjN9XSwyNjI6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UiKSxhPXMoIi4uL2ludGVybmFscy9hLWNhbGxhYmxlIiksbz1zKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUiKSxyPWIoYi5iaW5kKTtFLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXty''@;'; put 'put ''ZXR1cm4gYSh0KSx2b2lkIDA9PT1lP3Q6bz9yKHQsZSk6ZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fX0seyIuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZSI6MjIyLCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUiOjI2MywiLi4vaW50ZXJuYWxzL2Z1bmN0''@;'; put 'put ''aW9uLXVuY3VycnktdGhpcy1jbGF1c2UiOjI2N31dLDI2MzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZmFpbHMiKTtFLmV4cG9ydHM9IWIoZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbigpe30uYmluZCgpO3JldHVybiJmdW5jdGlvbiIhPXR5''@;'; put 'put ''cGVvZiBhfHxhLmhhc093blByb3BlcnR5KCJwcm90b3R5cGUiKX0pfSx7Ii4uL2ludGVybmFscy9mYWlscyI6MjYwfV0sMjY0OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZSIpLGE9RnVuY3Rpb24ucHJvdG90''@;'; put 'put ''eXBlLmNhbGw7RS5leHBvcnRzPWI/YS5iaW5kKGEpOmZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkoYSxhcmd1bWVudHMpfX0seyIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUiOjI2M31dLDI2NTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRl''@;'; put 'put ''cm5hbHMvZGVzY3JpcHRvcnMiKSxhPXMoIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Iiksbz1GdW5jdGlvbi5wcm90b3R5cGUscj1iJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHQ9YShvLCJuYW1lIiksZT10JiYic29tZXRoaW5nIj09PWZ1bmN0aW9uKCl7fS5uYW1l''@;'; put 'put ''LGw9dCYmKCFifHxiJiZyKG8sIm5hbWUiKS5jb25maWd1cmFibGUpO0UuZXhwb3J0cz17RVhJU1RTOnQsUFJPUEVSOmUsQ09ORklHVVJBQkxFOmx9fSx7Ii4uL2ludGVybmFscy9kZXNjcmlwdG9ycyI6MjQ3LCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSI6Mjc1fV0sMjY2OltmdW5j''@;'; put 'put ''dGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiKSxhPXMoIi4uL2ludGVybmFscy9hLWNhbGxhYmxlIik7RS5leHBvcnRzPWZ1bmN0aW9uKG8scix0KXt0cnl7cmV0dXJuIGIoYShPYmplY3QuZ2V0T3duUHJvcGVydHlE''@;'; put 'put ''ZXNjcmlwdG9yKG8scilbdF0pKX1jYXRjaHt9fX0seyIuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZSI6MjIyLCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIjoyNjh9XSwyNjc6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2NsYXNz''@;'; put 'put ''b2YtcmF3IiksYT1zKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIik7RS5leHBvcnRzPWZ1bmN0aW9uKG8pe2lmKCJGdW5jdGlvbiI9PT1iKG8pKXJldHVybiBhKG8pfX0seyIuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXciOjIzNSwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVu''@;'; put 'put ''Y3VycnktdGhpcyI6MjY4fV0sMjY4OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZSIpLGE9RnVuY3Rpb24ucHJvdG90eXBlLG89YS5jYWxsLHI9YiYmYS5iaW5kLmJpbmQobyxvKTtFLmV4cG9ydHM9Yj9yOmZ1''@;'; put 'put ''bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBvLmFwcGx5KHQsYXJndW1lbnRzKX19fSx7Ii4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZSI6MjYzfV0sMjY5OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9nbG9iYWwi''@;'; put 'put ''KSxhPXMoIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSIpO0UuZXhwb3J0cz1mdW5jdGlvbihyLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/ZnVuY3Rpb24ocil7cmV0dXJuIGEocik/cjp2b2lkIDB9KGJbcl0pOmJbcl0mJmJbcl1bdF19fSx7Ii4uL2ludGVybmFscy9nbG9iYWwiOjI3''@;'; put 'put ''NCwiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIjoyODV9XSwyNzA6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2NsYXNzb2YiKSxhPXMoIi4uL2ludGVybmFscy9nZXQtbWV0aG9kIiksbz1zKCIuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRl''@;'; put 'put ''ZmluZWQiKSxyPXMoIi4uL2ludGVybmFscy9pdGVyYXRvcnMiKSx0PXMoIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCIpKCJpdGVyYXRvciIpO0UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZighbyhlKSlyZXR1cm4gYShlLHQpfHxhKGUsIkBAaXRlcmF0b3IiKXx8cltiKGUpXX19LHsi''@;'; put 'put ''Li4vaW50ZXJuYWxzL2NsYXNzb2YiOjIzNiwiLi4vaW50ZXJuYWxzL2dldC1tZXRob2QiOjI3MywiLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkIjoyODgsIi4uL2ludGVybmFscy9pdGVyYXRvcnMiOjI5OCwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sIjozNTd9XSwy''@;'; put 'put ''NzE6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwiKSxhPXMoIi4uL2ludGVybmFscy9hLWNhbGxhYmxlIiksbz1zKCIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Iikscj1zKCIuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZyIp''@;'; put 'put ''LHQ9cygiLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QiKSxlPVR5cGVFcnJvcjtFLmV4cG9ydHM9ZnVuY3Rpb24obCxuKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPDI/dChsKTpuO2lmKGEoaSkpcmV0dXJuIG8oYihpLGwpKTt0aHJvdyBuZXcgZShyKGwpKyIgaXMgbm90IGl0ZXJh''@;'; put 'put ''YmxlIil9fSx7Ii4uL2ludGVybmFscy9hLWNhbGxhYmxlIjoyMjIsIi4uL2ludGVybmFscy9hbi1vYmplY3QiOjIyNywiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwiOjI2NCwiLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QiOjI3MCwiLi4vaW50ZXJuYWxzL3RyeS10by1zdHJp''@;'; put 'put ''bmciOjM0OX1dLDI3MjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIiksYT1zKCIuLi9pbnRlcm5hbHMvaXMtYXJyYXkiKSxvPXMoIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSIpLHI9cygiLi4vaW50ZXJu''@;'; put 'put ''YWxzL2NsYXNzb2YtcmF3IiksdD1zKCIuLi9pbnRlcm5hbHMvdG8tc3RyaW5nIiksZT1iKFtdLnB1c2gpO0UuZXhwb3J0cz1mdW5jdGlvbihsKXtpZihvKGwpKXJldHVybiBsO2lmKGEobCkpe2Zvcih2YXIgbj1sLmxlbmd0aCxpPVtdLGg9MDtoPG47aCsrKXt2YXIgZj1sW2hdOyJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgZj9lKGksZik6Im51bWJlciIhPXR5cGVvZiBmJiYiTnVtYmVyIiE9PXIoZikmJiJTdHJpbmciIT09cihmKXx8ZShpLHQoZikpfXZhciB1PWkubGVuZ3RoLHA9ITA7cmV0dXJuIGZ1bmN0aW9uKGQsdil7aWYocClyZXR1cm4gcD0hMSx2O2lmKGEodGhpcykpcmV0dXJuIHY7Zm9y''@;'; put 'put ''KHZhciBfPTA7Xzx1O18rKylpZihpW19dPT09ZClyZXR1cm4gdn19fX0seyIuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXciOjIzNSwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyI6MjY4LCIuLi9pbnRlcm5hbHMvaXMtYXJyYXkiOjI4NCwiLi4vaW50ZXJuYWxzL2lzLWNhbGxh''@;'; put 'put ''YmxlIjoyODUsIi4uL2ludGVybmFscy90by1zdHJpbmciOjM0OH1dLDI3MzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZSIpLGE9cygiLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkIik7RS5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKG8scil7dmFyIHQ9b1tyXTtyZXR1cm4gYSh0KT92b2lkIDA6Yih0KX19LHsiLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUiOjIyMiwiLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkIjoyODh9XSwyNzQ6W2Z1bmN0aW9uKHMsRSxTKXsoZnVuY3Rpb24oYil7KGZ1bmN0aW9uKCl7''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBhPWZ1bmN0aW9uKG8pe3JldHVybiBvJiZvLk1hdGg9PT1NYXRoJiZvfTtFLmV4cG9ydHM9YSgib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxhKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxhKCJvYmplY3QiPT10eXBl''@;'; put 'put ''b2Ygc2VsZiYmc2VsZil8fGEoIm9iamVjdCI9PXR5cGVvZiBiJiZiKXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8dGhpc3x8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1''@;'; put 'put ''Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwyNzU6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyIpLGE9cygiLi4vaW50ZXJuYWxzL3RvLW9iamVjdCIpLG89Yih7fS5oYXNPd25Q''@;'; put 'put ''cm9wZXJ0eSk7RS5leHBvcnRzPU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKHIsdCl7cmV0dXJuIG8oYShyKSx0KX19LHsiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyI6MjY4LCIuLi9pbnRlcm5hbHMvdG8tb2JqZWN0IjozNDR9XSwyNzY6W2Z1bmN0aW9uKHMsRSxTKXsidXNl''@;'; put 'put ''IHN0cmljdCI7RS5leHBvcnRzPXt9fSx7fV0sMjc3OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO0UuZXhwb3J0cz1mdW5jdGlvbihiLGEpe3RyeXsxPT09YXJndW1lbnRzLmxlbmd0aD9jb25zb2xlLmVycm9yKGIpOmNvbnNvbGUuZXJyb3IoYixhKX1jYXRjaHt9fX0se31dLDI3ODpb''@;'; put 'put ''ZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluIik7RS5leHBvcnRzPWIoImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50Iil9LHsiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbiI6MjY5fV0sMjc5OltmdW5jdGlvbihzLEUsUyl7''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9kZXNjcmlwdG9ycyIpLGE9cygiLi4vaW50ZXJuYWxzL2ZhaWxzIiksbz1zKCIuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQiKTtFLmV4cG9ydHM9IWImJiFhKGZ1bmN0aW9uKCl7cmV0dXJuIDchPT1PYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkobygiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LHsiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzIjoyNDcsIi4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCI6MjQ5LCIuLi9pbnRlcm5hbHMvZmFpbHMiOjI2MH1dLDI4''@;'; put 'put ''MDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIiksYT1zKCIuLi9pbnRlcm5hbHMvZmFpbHMiKSxvPXMoIi4uL2ludGVybmFscy9jbGFzc29mLXJhdyIpLHI9T2JqZWN0LHQ9YigiIi5zcGxpdCk7RS5leHBv''@;'; put 'put ''cnRzPWEoZnVuY3Rpb24oKXtyZXR1cm4hcigieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSk/ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PT1vKGUpP3QoZSwiIik6cihlKX06cn0seyIuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXciOjIzNSwiLi4vaW50ZXJuYWxzL2ZhaWxzIjoyNjAs''@;'; put 'put ''Ii4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiOjI2OH1dLDI4MTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIiksYT1zKCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiKSxvPXMoIi4uL2lu''@;'; put 'put ''dGVybmFscy9zaGFyZWQtc3RvcmUiKSxyPWIoRnVuY3Rpb24udG9TdHJpbmcpO2Eoby5pbnNwZWN0U291cmNlKXx8KG8uaW5zcGVjdFNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gcih0KX0pLEUuZXhwb3J0cz1vLmluc3BlY3RTb3VyY2V9LHsiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3Vy''@;'; put 'put ''cnktdGhpcyI6MjY4LCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiOjI4NSwiLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZSI6MzMzfV0sMjgyOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiLGEsbyxyPXMoIi4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24i''@;'; put 'put ''KSx0PXMoIi4uL2ludGVybmFscy9nbG9iYWwiKSxlPXMoIi4uL2ludGVybmFscy9pcy1vYmplY3QiKSxsPXMoIi4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkiKSxuPXMoIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5IiksaT1zKCIuLi9pbnRlcm5hbHMv''@;'; put 'put ''c2hhcmVkLXN0b3JlIiksaD1zKCIuLi9pbnRlcm5hbHMvc2hhcmVkLWtleSIpLGY9cygiLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzIiksdT10LlR5cGVFcnJvcjtpZihyfHxpLnN0YXRlKXt2YXIgZD1pLnN0YXRlfHwoaS5zdGF0ZT1uZXcoMCx0LldlYWtNYXApKTtkLmdldD1kLmdldCxkLmhh''@;'; put 'put ''cz1kLmhhcyxkLnNldD1kLnNldCxiPWZ1bmN0aW9uKF8sQSl7aWYoZC5oYXMoXykpdGhyb3cgbmV3IHUoIk9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkIik7cmV0dXJuIEEuZmFjYWRlPV8sZC5zZXQoXyxBKSxBfSxhPWZ1bmN0aW9uKF8pe3JldHVybiBkLmdldChfKXx8e319LG89ZnVuY3Rp''@;'; put 'put ''b24oXyl7cmV0dXJuIGQuaGFzKF8pfX1lbHNle3ZhciB2PWgoInN0YXRlIik7Zlt2XT0hMCxiPWZ1bmN0aW9uKF8sQSl7aWYobihfLHYpKXRocm93IG5ldyB1KCJPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCIpO3JldHVybiBBLmZhY2FkZT1fLGwoXyx2LEEpLEF9LGE9ZnVuY3Rpb24oXyl7''@;'; put 'put ''cmV0dXJuIG4oXyx2KT9fW3ZdOnt9fSxvPWZ1bmN0aW9uKF8pe3JldHVybiBuKF8sdil9fUUuZXhwb3J0cz17c2V0OmIsZ2V0OmEsaGFzOm8sZW5mb3JjZTpmdW5jdGlvbihfKXtyZXR1cm4gbyhfKT9hKF8pOmIoXyx7fSl9LGdldHRlckZvcjpmdW5jdGlvbihfKXtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''QSl7dmFyIEk7aWYoIWUoQSl8fChJPWEoQSkpLnR5cGUhPT1fKXRocm93IG5ldyB1KCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrXysiIHJlcXVpcmVkIik7cmV0dXJuIEl9fX19LHsiLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eSI6MjQxLCIuLi9pbnRlcm5h''@;'; put 'put ''bHMvZ2xvYmFsIjoyNzQsIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5IjoyNzUsIi4uL2ludGVybmFscy9oaWRkZW4ta2V5cyI6Mjc2LCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0IjoyODksIi4uL2ludGVybmFscy9zaGFyZWQta2V5IjozMzIsIi4uL2ludGVybmFscy9zaGFyZWQtc3Rv''@;'; put 'put ''cmUiOjMzMywiLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbiI6MzU0fV0sMjgzOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCIpLGE9cygiLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycyIpLG89Yigi''@;'; put 'put ''aXRlcmF0b3IiKSxyPUFycmF5LnByb3RvdHlwZTtFLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJihhLkFycmF5PT09dHx8cltvXT09PXQpfX0seyIuLi9pbnRlcm5hbHMvaXRlcmF0b3JzIjoyOTgsIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCI6MzU3fV0s''@;'; put 'put ''Mjg0OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9jbGFzc29mLXJhdyIpO0UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4iQXJyYXkiPT09YihhKX19LHsiLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3IjoyMzV9XSwy''@;'; put 'put ''ODU6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2RvY3VtZW50LWFsbCIpLGE9Yi5hbGw7RS5leHBvcnRzPWIuSVNfSFRNTEREQT9mdW5jdGlvbihvKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygb3x8bz09PWF9OmZ1bmN0aW9uKG8pe3JldHVy''@;'; put 'put ''biJmdW5jdGlvbiI9PXR5cGVvZiBvfX0seyIuLi9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsIjoyNDh9XSwyODY6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyIpLGE9cygiLi4vaW50ZXJuYWxzL2ZhaWxzIiks''@;'; put 'put ''bz1zKCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiKSxyPXMoIi4uL2ludGVybmFscy9jbGFzc29mIiksdD1zKCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluIiksZT1zKCIuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UiKSxsPWZ1bmN0aW9uKCl7fSxuPVtdLGk9dCgiUmVmbGVjdCIsImNv''@;'; put 'put ''bnN0cnVjdCIpLGg9L15ccyooPzpjbGFzc3xmdW5jdGlvbilcYi8sZj1iKGguZXhlYyksdT0haC50ZXN0KGwpLHA9ZnVuY3Rpb24odil7aWYoIW8odikpcmV0dXJuITE7dHJ5e3JldHVybiBpKGwsbix2KSwhMH1jYXRjaHtyZXR1cm4hMX19LGQ9ZnVuY3Rpb24odil7aWYoIW8odikpcmV0dXJu''@;'; put 'put ''ITE7c3dpdGNoKHIodikpe2Nhc2UiQXN5bmNGdW5jdGlvbiI6Y2FzZSJHZW5lcmF0b3JGdW5jdGlvbiI6Y2FzZSJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIjpyZXR1cm4hMX10cnl7cmV0dXJuIHV8fCEhZihoLGUodikpfWNhdGNoe3JldHVybiEwfX07ZC5zaGFtPSEwLEUuZXhwb3J0cz0haXx8''@;'; put 'put ''YShmdW5jdGlvbigpe3ZhciB2O3JldHVybiBwKHAuY2FsbCl8fCFwKE9iamVjdCl8fCFwKGZ1bmN0aW9uKCl7dj0hMH0pfHx2fSk/ZDpwfSx7Ii4uL2ludGVybmFscy9jbGFzc29mIjoyMzYsIi4uL2ludGVybmFscy9mYWlscyI6MjYwLCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10''@;'; put 'put ''aGlzIjoyNjgsIi4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4iOjI2OSwiLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlIjoyODEsIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSI6Mjg1fV0sMjg3OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9m''@;'; put 'put ''YWlscyIpLGE9cygiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIiksbz0vI3xcLnByb3RvdHlwZVwuLyxyPWZ1bmN0aW9uKGksaCl7dmFyIGY9ZVt0KGkpXTtyZXR1cm4gZj09PW58fGYhPT1sJiYoYShoKT9iKGgpOiEhaCl9LHQ9ci5ub3JtYWxpemU9ZnVuY3Rpb24oaSl7cmV0dXJuIFN0cmlu''@;'; put 'put ''ZyhpKS5yZXBsYWNlKG8sIi4iKS50b0xvd2VyQ2FzZSgpfSxlPXIuZGF0YT17fSxsPXIuTkFUSVZFPSJOIixuPXIuUE9MWUZJTEw9IlAiO0UuZXhwb3J0cz1yfSx7Ii4uL2ludGVybmFscy9mYWlscyI6MjYwLCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiOjI4NX1dLDI4ODpbZnVuY3Rpb24o''@;'; put 'put ''cyxFLFMpeyJ1c2Ugc3RyaWN0IjtFLmV4cG9ydHM9ZnVuY3Rpb24oYil7cmV0dXJuIG51bGw9PWJ9fSx7fV0sMjg5OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSIpLGE9cygiLi4vaW50ZXJuYWxzL2RvY3VtZW50LWFsbCIp''@;'; put 'put ''LG89YS5hbGw7RS5leHBvcnRzPWEuSVNfSFRNTEREQT9mdW5jdGlvbihyKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHI/bnVsbCE9PXI6YihyKXx8cj09PW99OmZ1bmN0aW9uKHIpe3JldHVybiJvYmplY3QiPT10eXBlb2Ygcj9udWxsIT09cjpiKHIpfX0seyIuLi9pbnRlcm5hbHMvZG9jdW1l''@;'; put 'put ''bnQtYWxsIjoyNDgsIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSI6Mjg1fV0sMjkwOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO0UuZXhwb3J0cz0hMX0se31dLDI5MTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Iiks''@;'; put 'put ''YT1zKCIuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXciKSxvPXMoIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCIpKCJtYXRjaCIpO0UuZXhwb3J0cz1mdW5jdGlvbihyKXt2YXIgdDtyZXR1cm4gYihyKSYmKHZvaWQgMCE9PSh0PXJbb10pPyEhdDoiUmVnRXhwIj09PWEocikpfX0seyIu''@;'; put 'put ''Li9pbnRlcm5hbHMvY2xhc3NvZi1yYXciOjIzNSwiLi4vaW50ZXJuYWxzL2lzLW9iamVjdCI6Mjg5LCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiOjM1N31dLDI5MjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWlu''@;'; put 'put ''IiksYT1zKCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiKSxvPXMoIi4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mIikscj1zKCIuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQiKSx0PU9iamVjdDtFLmV4cG9ydHM9cj9mdW5jdGlvbihlKXtyZXR1cm4ic3ltYm9sIj09''@;'; put 'put ''dHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3ZhciBsPWIoIlN5bWJvbCIpO3JldHVybiBhKGwpJiZvKGwucHJvdG90eXBlLHQoZSkpfX0seyIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluIjoyNjksIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSI6Mjg1LCIuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXBy''@;'; put 'put ''b3RvdHlwZS1vZiI6MzE0LCIuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQiOjM1MX1dLDI5MzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0IiksYT1zKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2Fs''@;'; put 'put ''bCIpLG89cygiLi4vaW50ZXJuYWxzL2FuLW9iamVjdCIpLHI9cygiLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmciKSx0PXMoIi4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QiKSxlPXMoIi4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZSIpLGw9cygiLi4vaW50''@;'; put 'put ''ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YiKSxuPXMoIi4uL2ludGVybmFscy9nZXQtaXRlcmF0b3IiKSxpPXMoIi4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kIiksaD1zKCIuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UiKSxmPVR5cGVFcnJvcix1PWZ1bmN0aW9uKGQs''@;'; put 'put ''dil7dGhpcy5zdG9wcGVkPWQsdGhpcy5yZXN1bHQ9dn0scD11LnByb3RvdHlwZTtFLmV4cG9ydHM9ZnVuY3Rpb24oZCx2LF8pe3ZhciBBLEksTCxOLFAsQiwkLHg9ISghX3x8IV8uQVNfRU5UUklFUyksTT0hKCFffHwhXy5JU19SRUNPUkQpLGo9ISghX3x8IV8uSVNfSVRFUkFUT1IpLGM9ISgh''@;'; put 'put ''X3x8IV8uSU5URVJSVVBURUQpLG09Yih2LF8mJl8udGhhdCksZz1mdW5jdGlvbih3KXtyZXR1cm4gQSYmaChBLCJub3JtYWwiLHcpLG5ldyB1KCEwLHcpfSx5PWZ1bmN0aW9uKHcpe3JldHVybiB4PyhvKHcpLGM/bSh3WzBdLHdbMV0sZyk6bSh3WzBdLHdbMV0pKTpjP20odyxnKTptKHcpfTtp''@;'; put 'put ''ZihNKUE9ZC5pdGVyYXRvcjtlbHNlIGlmKGopQT1kO2Vsc2V7aWYoIShJPWkoZCkpKXRocm93IG5ldyBmKHIoZCkrIiBpcyBub3QgaXRlcmFibGUiKTtpZih0KEkpKXtmb3IoTD0wLE49ZShkKTtOPkw7TCsrKWlmKChQPXkoZFtMXSkpJiZsKHAsUCkpcmV0dXJuIFA7cmV0dXJuIG5ldyB1KCEx''@;'; put 'put ''KX1BPW4oZCxJKX1mb3IoQj1NP2QubmV4dDpBLm5leHQ7ISgkPWEoQixBKSkuZG9uZTspe3RyeXtQPXkoJC52YWx1ZSl9Y2F0Y2godyl7aChBLCJ0aHJvdyIsdyl9aWYoIm9iamVjdCI9PXR5cGVvZiBQJiZQJiZsKHAsUCkpcmV0dXJuIFB9cmV0dXJuIG5ldyB1KCExKX19LHsiLi4vaW50ZXJu''@;'; put 'put ''YWxzL2FuLW9iamVjdCI6MjI3LCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0IjoyNjIsIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsIjoyNjQsIi4uL2ludGVybmFscy9nZXQtaXRlcmF0b3IiOjI3MSwiLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QiOjI3MCwi''@;'; put 'put ''Li4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCI6MjgzLCIuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UiOjI5NCwiLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlIjoyOTksIi4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mIjozMTQsIi4uL2lu''@;'; put 'put ''dGVybmFscy90cnktdG8tc3RyaW5nIjozNDl9XSwyOTQ6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwiKSxhPXMoIi4uL2ludGVybmFscy9hbi1vYmplY3QiKSxvPXMoIi4uL2ludGVybmFscy9nZXQtbWV0aG9kIik7RS5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uKHIsdCxlKXt2YXIgbCxuO2Eocik7dHJ5e2lmKCEobD1vKHIsInJldHVybiIpKSl7aWYoInRocm93Ij09PXQpdGhyb3cgZTtyZXR1cm4gZX1sPWIobCxyKX1jYXRjaChpKXtuPSEwLGw9aX1pZigidGhyb3ciPT09dCl0aHJvdyBlO2lmKG4pdGhyb3cgbDtyZXR1cm4g''@;'; put 'put ''YShsKSxlfX0seyIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0IjoyMjcsIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsIjoyNjQsIi4uL2ludGVybmFscy9nZXQtbWV0aG9kIjoyNzN9XSwyOTU6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2l0ZXJh''@;'; put 'put ''dG9ycy1jb3JlIikuSXRlcmF0b3JQcm90b3R5cGUsYT1zKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZSIpLG89cygiLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yIikscj1zKCIuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWciKSx0PXMoIi4uL2ludGVybmFs''@;'; put 'put ''cy9pdGVyYXRvcnMiKSxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O0UuZXhwb3J0cz1mdW5jdGlvbihsLG4saSxoKXt2YXIgZj1uKyIgSXRlcmF0b3IiO3JldHVybiBsLnByb3RvdHlwZT1hKGIse25leHQ6bygrIWgsaSl9KSxyKGwsZiwhMSwhMCksdFtmXT1lLGx9fSx7Ii4uL2ludGVybmFs''@;'; put 'put ''cy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvciI6MjQyLCIuLi9pbnRlcm5hbHMvaXRlcmF0b3JzIjoyOTgsIi4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZSI6Mjk3LCIuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZSI6MzA2LCIuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWciOjMz''@;'; put 'put ''MX1dLDI5NjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZXhwb3J0IiksYT1zKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCIpLG89cygiLi4vaW50ZXJuYWxzL2lzLXB1cmUiKSxyPXMoIi4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lIiks''@;'; put 'put ''dD1zKCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiKSxlPXMoIi4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtY29uc3RydWN0b3IiKSxsPXMoIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZiIpLG49cygiLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9m''@;'; put 'put ''IiksaT1zKCIuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWciKSxoPXMoIi4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkiKSxmPXMoIi4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4iKSx1PXMoIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCIp''@;'; put 'put ''LHA9cygiLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycyIpLGQ9cygiLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlIiksdj1yLlBST1BFUixfPXIuQ09ORklHVVJBQkxFLEE9ZC5JdGVyYXRvclByb3RvdHlwZSxJPWQuQlVHR1lfU0FGQVJJX0lURVJBVE9SUyxMPXUoIml0ZXJhdG9yIiksTj1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB0aGlzfTtFLmV4cG9ydHM9ZnVuY3Rpb24oUCxCLCQsRCx4LE0sail7ZSgkLEIsRCk7dmFyIGMsbSxnLHk9ZnVuY3Rpb24oUil7aWYoUj09PXgmJlUpcmV0dXJuIFU7aWYoIUkmJlImJlIgaW4gTylyZXR1cm4gT1tSXTtzd2l0Y2goUil7Y2FzZSJrZXlzIjpjYXNlInZh''@;'; put 'put ''bHVlcyI6Y2FzZSJlbnRyaWVzIjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3ICQodGhpcyxSKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyAkKHRoaXMpfX0sdz1CKyIgSXRlcmF0b3IiLGs9ITEsTz1QLnByb3RvdHlwZSx6PU9bTF18fE9bIkBAaXRlcmF0b3IiXXx8eCYmT1t4''@;'; put 'put ''XSxVPSFJJiZ6fHx5KHgpLFY9IkFycmF5Ij09PUImJk8uZW50cmllc3x8ejtpZihWJiYoYz1sKFYuY2FsbChuZXcgUCkpKSE9PU9iamVjdC5wcm90b3R5cGUmJmMubmV4dCYmKG98fGwoYyk9PT1BfHwobj9uKGMsQSk6dChjW0xdKXx8ZihjLEwsTikpLGkoYyx3LCEwLCEwKSxvJiYocFt3XT1O''@;'; put 'put ''KSksdiYmInZhbHVlcyI9PT14JiZ6JiYidmFsdWVzIiE9PXoubmFtZSYmKCFvJiZfP2goTywibmFtZSIsInZhbHVlcyIpOihrPSEwLFU9ZnVuY3Rpb24oKXtyZXR1cm4gYSh6LHRoaXMpfSkpLHgpaWYobT17dmFsdWVzOnkoInZhbHVlcyIpLGtleXM6TT9VOnkoImtleXMiKSxlbnRyaWVzOnko''@;'; put 'put ''ImVudHJpZXMiKX0sailmb3IoZyBpbiBtKShJfHxrfHwhKGcgaW4gTykpJiZmKE8sZyxtW2ddKTtlbHNlIGIoe3RhcmdldDpCLHByb3RvOiEwLGZvcmNlZDpJfHxrfSxtKTtyZXR1cm4gbyYmIWp8fE9bTF09PT1VfHxmKE8sTCxVLHtuYW1lOnh9KSxwW0JdPVUsbX19LHsiLi4vaW50ZXJuYWxz''@;'; put 'put ''L2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eSI6MjQxLCIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluIjoyNDUsIi4uL2ludGVybmFscy9leHBvcnQiOjI1OSwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwiOjI2NCwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUiOjI2NSwi''@;'; put 'put ''Li4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIjoyODUsIi4uL2ludGVybmFscy9pcy1wdXJlIjoyOTAsIi4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtY29uc3RydWN0b3IiOjI5NSwiLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycyI6Mjk4LCIuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUiOjI5''@;'; put 'put ''NywiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mIjozMTMsIi4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZiI6MzE4LCIuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWciOjMzMSwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sIjozNTd9XSwy''@;'; put 'put ''OTc6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGIsYSxvLHI9cygiLi4vaW50ZXJuYWxzL2ZhaWxzIiksdD1zKCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiKSxlPXMoIi4uL2ludGVybmFscy9pcy1vYmplY3QiKSxsPXMoIi4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlIiks''@;'; put 'put ''bj1zKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YiKSxpPXMoIi4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4iKSxoPXMoIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCIpLGY9cygiLi4vaW50ZXJuYWxzL2lzLXB1cmUiKSx1PWgoIml0ZXJhdG9yIikscD0h''@;'; put 'put ''MTtbXS5rZXlzJiYoIm5leHQiaW4obz1bXS5rZXlzKCkpPyhhPW4obihvKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmKGI9YSk6cD0hMCksIWUoYil8fHIoZnVuY3Rpb24oKXt2YXIgZD17fTtyZXR1cm4gYlt1XS5jYWxsKGQpIT09ZH0pP2I9e306ZiYmKGI9bChiKSksdChiW3VdKXx8aShiLHUs''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLEUuZXhwb3J0cz17SXRlcmF0b3JQcm90b3R5cGU6YixCVUdHWV9TQUZBUklfSVRFUkFUT1JTOnB9fSx7Ii4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4iOjI0NSwiLi4vaW50ZXJuYWxzL2ZhaWxzIjoyNjAsIi4uL2ludGVybmFscy9pcy1jYWxs''@;'; put 'put ''YWJsZSI6Mjg1LCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0IjoyODksIi4uL2ludGVybmFscy9pcy1wdXJlIjoyOTAsIi4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlIjozMDYsIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZiI6MzEzLCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93''@;'; put 'put ''bi1zeW1ib2wiOjM1N31dLDI5ODpbZnVuY3Rpb24ocyxFLFMpe2FyZ3VtZW50c1s0XVsyNzZdWzBdLmFwcGx5KFMsYXJndW1lbnRzKX0se2R1cDoyNzZ9XSwyOTk6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCIpO0UuZXhwb3J0''@;'; put 'put ''cz1mdW5jdGlvbihhKXtyZXR1cm4gYihhLmxlbmd0aCl9fSx7Ii4uL2ludGVybmFscy90by1sZW5ndGgiOjM0M31dLDMwMDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIiksYT1zKCIuLi9pbnRlcm5hbHMv''@;'; put 'put ''ZmFpbHMiKSxvPXMoIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSIpLHI9cygiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkiKSx0PXMoIi4uL2ludGVybmFscy9kZXNjcmlwdG9ycyIpLGU9cygiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUiKS5DT05GSUdVUkFCTEUsbD1zKCIuLi9p''@;'; put 'put ''bnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UiKSxuPXMoIi4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZSIpLGk9bi5lbmZvcmNlLGg9bi5nZXQsZj1TdHJpbmcsdT1PYmplY3QuZGVmaW5lUHJvcGVydHkscD1iKCIiLnNsaWNlKSxkPWIoIiIucmVwbGFjZSksdj1iKFtdLmpvaW4pLF89dCYmIWEo''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gOCE9PXUoZnVuY3Rpb24oKXt9LCJsZW5ndGgiLHt2YWx1ZTo4fSkubGVuZ3RofSksQT1TdHJpbmcoU3RyaW5nKS5zcGxpdCgiU3RyaW5nIiksST1FLmV4cG9ydHM9ZnVuY3Rpb24oTCxOLFApeyJTeW1ib2woIj09PXAoZihOKSwwLDcpJiYoTj0iWyIrZChmKE4p''@;'; put 'put ''LC9eU3ltYm9sXCgoW14pXSopXCkvLCIkMSIpKyJdIiksUCYmUC5nZXR0ZXImJihOPSJnZXQgIitOKSxQJiZQLnNldHRlciYmKE49InNldCAiK04pLCghcihMLCJuYW1lIil8fGUmJkwubmFtZSE9PU4pJiYodD91KEwsIm5hbWUiLHt2YWx1ZTpOLGNvbmZpZ3VyYWJsZTohMH0pOkwubmFtZT1O''@;'; put 'put ''KSxfJiZQJiZyKFAsImFyaXR5IikmJkwubGVuZ3RoIT09UC5hcml0eSYmdShMLCJsZW5ndGgiLHt2YWx1ZTpQLmFyaXR5fSk7dHJ5e1AmJnIoUCwiY29uc3RydWN0b3IiKSYmUC5jb25zdHJ1Y3Rvcj90JiZ1KEwsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSk6TC5wcm90b3R5cGUmJihMLnBy''@;'; put 'put ''b3RvdHlwZT12b2lkIDApfWNhdGNoe312YXIgQj1pKEwpO3JldHVybiByKEIsInNvdXJjZSIpfHwoQi5zb3VyY2U9dihBLCJzdHJpbmciPT10eXBlb2YgTj9OOiIiKSksTH07RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nPUkoZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzKSYmaCh0aGlzKS5z''@;'; put 'put ''b3VyY2V8fGwodGhpcyl9LCJ0b1N0cmluZyIpfSx7Ii4uL2ludGVybmFscy9kZXNjcmlwdG9ycyI6MjQ3LCIuLi9pbnRlcm5hbHMvZmFpbHMiOjI2MCwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUiOjI2NSwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyI6MjY4LCIuLi9p''@;'; put 'put ''bnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSI6Mjc1LCIuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UiOjI4MSwiLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlIjoyODIsIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSI6Mjg1fV0sMzAxOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBiPU1hdGguY2VpbCxhPU1hdGguZmxvb3I7RS5leHBvcnRzPU1hdGgudHJ1bmN8fGZ1bmN0aW9uKG8pe3ZhciByPStvO3JldHVybihyPjA/YTpiKShyKX19LHt9XSwzMDI6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGIsYSxvLHIsdCxlPXMoIi4uL2ludGVybmFscy9n''@;'; put 'put ''bG9iYWwiKSxsPXMoIi4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQiKSxuPXMoIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yIikuZixpPXMoIi4uL2ludGVybmFscy90YXNrIikuc2V0LGg9cygiLi4vaW50ZXJuYWxzL3F1ZXVlIiksZj1z''@;'; put 'put ''KCIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcyIpLHU9cygiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MtcGViYmxlIikscD1zKCIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLXdlYm9zLXdlYmtpdCIpLGQ9cygiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlIiksdj1lLk11dGF0aW9uT2Jz''@;'; put 'put ''ZXJ2ZXJ8fGUuV2ViS2l0TXV0YXRpb25PYnNlcnZlcixfPWUuZG9jdW1lbnQsQT1lLnByb2Nlc3MsST1lLlByb21pc2UsTD1uKGUsInF1ZXVlTWljcm90YXNrIiksTj1MJiZMLnZhbHVlO2lmKCFOKXt2YXIgUD1uZXcgaCxCPWZ1bmN0aW9uKCl7dmFyICQsRDtmb3IoZCYmKCQ9QS5kb21haW4p''@;'; put 'put ''JiYkLmV4aXQoKTtEPVAuZ2V0KCk7KXRyeXtEKCl9Y2F0Y2goeCl7dGhyb3cgUC5oZWFkJiZiKCkseH0kJiYkLmVudGVyKCl9O2Z8fGR8fHB8fCF2fHwhXz8hdSYmSSYmSS5yZXNvbHZlPygocj1JLnJlc29sdmUodm9pZCAwKSkuY29uc3RydWN0b3I9SSx0PWwoci50aGVuLHIpLGI9ZnVuY3Rp''@;'; put 'put ''b24oKXt0KEIpfSk6ZD9iPWZ1bmN0aW9uKCl7QS5uZXh0VGljayhCKX06KGk9bChpLGUpLGI9ZnVuY3Rpb24oKXtpKEIpfSk6KGE9ITAsbz1fLmNyZWF0ZVRleHROb2RlKCIiKSxuZXcgdihCKS5vYnNlcnZlKG8se2NoYXJhY3RlckRhdGE6ITB9KSxiPWZ1bmN0aW9uKCl7by5kYXRhPWE9IWF9''@;'; put 'put ''KSxOPWZ1bmN0aW9uKCQpe1AuaGVhZHx8YigpLFAuYWRkKCQpfX1FLmV4cG9ydHM9Tn0seyIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcyI6MjUzLCIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy1wZWJibGUiOjI1MiwiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlIjoyNTQsIi4uL2lu''@;'; put 'put ''dGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0IjoyNTUsIi4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQiOjI2MiwiLi4vaW50ZXJuYWxzL2dsb2JhbCI6Mjc0LCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvciI6MzA5LCIuLi9pbnRl''@;'; put 'put ''cm5hbHMvcXVldWUiOjMyOCwiLi4vaW50ZXJuYWxzL3Rhc2siOjMzOX1dLDMwMzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZSIpLGE9VHlwZUVycm9yLG89ZnVuY3Rpb24ocil7dmFyIHQsZTt0aGlzLnByb21pc2U9bmV3IHIo''@;'; put 'put ''ZnVuY3Rpb24obCxuKXtpZih2b2lkIDAhPT10fHx2b2lkIDAhPT1lKXRocm93IG5ldyBhKCJCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvciIpO3Q9bCxlPW59KSx0aGlzLnJlc29sdmU9Yih0KSx0aGlzLnJlamVjdD1iKGUpfTtFLmV4cG9ydHMuZj1mdW5jdGlvbihyKXtyZXR1cm4gbmV3IG8ocil9''@;'; put 'put ''fSx7Ii4uL2ludGVybmFscy9hLWNhbGxhYmxlIjoyMjJ9XSwzMDQ6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCIpLGE9VHlwZUVycm9yO0UuZXhwb3J0cz1mdW5jdGlvbihvKXtpZihiKG8pKXRocm93IG5ldyBhKCJUaGUgbWV0''@;'; put 'put ''aG9kIGRvZXNuJ3QgYWNjZXB0IHJlZ3VsYXIgZXhwcmVzc2lvbnMiKTtyZXR1cm4gb319LHsiLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCI6MjkxfV0sMzA1OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9kZXNjcmlwdG9ycyIpLGE9cygiLi4vaW50''@;'; put 'put ''ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyIpLG89cygiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwiKSxyPXMoIi4uL2ludGVybmFscy9mYWlscyIpLHQ9cygiLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzIiksZT1zKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHkt''@;'; put 'put ''c3ltYm9scyIpLGw9cygiLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlIiksbj1zKCIuLi9pbnRlcm5hbHMvdG8tb2JqZWN0IiksaT1zKCIuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QiKSxoPU9iamVjdC5hc3NpZ24sZj1PYmplY3QuZGVmaW5lUHJvcGVydHks''@;'; put 'put ''dT1hKFtdLmNvbmNhdCk7RS5leHBvcnRzPSFofHxyKGZ1bmN0aW9uKCl7aWYoYiYmMSE9PWgoe2I6MX0saChmKHt9LCJhIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtmKHRoaXMsImIiLHt2YWx1ZTozLGVudW1lcmFibGU6ITF9KX19KSx7YjoyfSkpLmIpcmV0dXJuITA7dmFyIHA9''@;'; put 'put ''e30sZD17fSx2PVN5bWJvbCgiYXNzaWduIGRldGVjdGlvbiIpO3JldHVybiBwW3ZdPTcsImFiY2RlZmdoaWprbG1ub3BxcnN0Ii5zcGxpdCgiIikuZm9yRWFjaChmdW5jdGlvbihfKXtkW19dPV99KSw3IT09aCh7fSxwKVt2XXx8ImFiY2RlZmdoaWprbG1ub3BxcnN0IiE9PXQoaCh7fSxkKSku''@;'; put 'put ''am9pbigiIil9KT9mdW5jdGlvbihwLGQpe2Zvcih2YXIgdj1uKHApLF89YXJndW1lbnRzLmxlbmd0aCxBPTEsST1lLmYsTD1sLmY7Xz5BOylmb3IodmFyIE4sUD1pKGFyZ3VtZW50c1tBKytdKSxCPUk/dSh0KFApLEkoUCkpOnQoUCksJD1CLmxlbmd0aCxEPTA7JD5EOylOPUJbRCsrXSxiJiYh''@;'; put 'put ''byhMLFAsTil8fCh2W05dPVBbTl0pO3JldHVybiB2fTpofSx7Ii4uL2ludGVybmFscy9kZXNjcmlwdG9ycyI6MjQ3LCIuLi9pbnRlcm5hbHMvZmFpbHMiOjI2MCwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwiOjI2NCwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyI6MjY4''@;'; put 'put ''LCIuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QiOjI4MCwiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMiOjMxMiwiLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzIjozMTYsIi4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZSI6MzE3''@;'; put 'put ''LCIuLi9pbnRlcm5hbHMvdG8tb2JqZWN0IjozNDR9XSwzMDY6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGIsYT1zKCIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Iiksbz1zKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzIikscj1zKCIuLi9pbnRlcm5hbHMv''@;'; put 'put ''ZW51bS1idWcta2V5cyIpLHQ9cygiLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzIiksZT1zKCIuLi9pbnRlcm5hbHMvaHRtbCIpLGw9cygiLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50IiksaT1zKCIuLi9pbnRlcm5hbHMvc2hhcmVkLWtleSIpKCJJRV9QUk9UTyIpLGg9ZnVu''@;'; put 'put ''Y3Rpb24oKXt9LGY9ZnVuY3Rpb24oZCl7cmV0dXJuIjxzY3JpcHQ+IitkKyI8XC9zY3JpcHQ+In0sdT1mdW5jdGlvbihkKXtkLndyaXRlKGYoIiIpKSxkLmNsb3NlKCk7dmFyIHY9ZC5wYXJlbnRXaW5kb3cuT2JqZWN0O3JldHVybiBkPW51bGwsdn0scD1mdW5jdGlvbigpe3RyeXtiPW5ldyBB''@;'; put 'put ''Y3RpdmVYT2JqZWN0KCJodG1sZmlsZSIpfWNhdGNoe312YXIgZCx2O3A9dHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5kb21haW4mJmI/dShiKTooKHY9bCgiaWZyYW1lIikpLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGUuYXBwZW5kQ2hpbGQodiksdi5zcmM9ImphdmFzY3JpcHQ6IiwoZD12''@;'; put 'put ''LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSxkLndyaXRlKGYoImRvY3VtZW50LkY9T2JqZWN0IikpLGQuY2xvc2UoKSxkLkYpOnUoYik7Zm9yKHZhciBfPXIubGVuZ3RoO18tLTspZGVsZXRlIHAucHJvdG90eXBlW3JbX11dO3JldHVybiBwKCl9O3RbaV09ITAsRS5leHBvcnRzPU9i''@;'; put 'put ''amVjdC5jcmVhdGV8fGZ1bmN0aW9uKGQsdil7dmFyIF87cmV0dXJuIG51bGwhPT1kPyhoLnByb3RvdHlwZT1hKGQpLF89bmV3IGgsaC5wcm90b3R5cGU9bnVsbCxfW2ldPWQpOl89cCgpLHZvaWQgMD09PXY/XzpvLmYoXyx2KX19LHsiLi4vaW50ZXJuYWxzL2FuLW9iamVjdCI6MjI3LCIuLi9p''@;'; put 'put ''bnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQiOjI0OSwiLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMiOjI1OCwiLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzIjoyNzYsIi4uL2ludGVybmFscy9odG1sIjoyNzgsIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMi''@;'; put 'put ''OjMwNywiLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXkiOjMzMn1dLDMwNzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMiKSxhPXMoIi4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZyIpLG89cygiLi4vaW50ZXJu''@;'; put 'put ''YWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkiKSxyPXMoIi4uL2ludGVybmFscy9hbi1vYmplY3QiKSx0PXMoIi4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCIpLGU9cygiLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzIik7Uy5mPWImJiFhP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1''@;'; put 'put ''bmN0aW9uKGwsbil7cihsKTtmb3IodmFyIGksaD10KG4pLGY9ZShuKSx1PWYubGVuZ3RoLHA9MDt1PnA7KW8uZihsLGk9ZltwKytdLGhbaV0pO3JldHVybiBsfX0seyIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0IjoyMjcsIi4uL2ludGVybmFscy9kZXNjcmlwdG9ycyI6MjQ3LCIuLi9pbnRlcm5h''@;'; put 'put ''bHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eSI6MzA4LCIuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMiOjMxNiwiLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0IjozNDEsIi4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZyI6MzUyfV0sMzA4OltmdW5jdGlvbihzLEUsUyl7''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9kZXNjcmlwdG9ycyIpLGE9cygiLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lIiksbz1zKCIuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWciKSxyPXMoIi4uL2ludGVybmFscy9hbi1vYmplY3QiKSx0PXMoIi4u''@;'; put 'put ''L2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkiKSxlPVR5cGVFcnJvcixsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7Uy5mPWI/bz9mdW5jdGlvbihpLGgsZil7aWYocihpKSxoPXQoaCkscihmKSwiZnVuY3Rpb24iPT10eXBlb2YgaSYm''@;'; put 'put ''InByb3RvdHlwZSI9PT1oJiYidmFsdWUiaW4gZiYmIndyaXRhYmxlImluIGYmJiFmLndyaXRhYmxlKXt2YXIgdT1uKGksaCk7dSYmdS53cml0YWJsZSYmKGlbaF09Zi52YWx1ZSxmPXtjb25maWd1cmFibGU6ImNvbmZpZ3VyYWJsZSJpbiBmP2YuY29uZmlndXJhYmxlOnUuY29uZmlndXJhYmxl''@;'; put 'put ''LGVudW1lcmFibGU6ImVudW1lcmFibGUiaW4gZj9mLmVudW1lcmFibGU6dS5lbnVtZXJhYmxlLHdyaXRhYmxlOiExfSl9cmV0dXJuIGwoaSxoLGYpfTpsOmZ1bmN0aW9uKGksaCxmKXtpZihyKGkpLGg9dChoKSxyKGYpLGEpdHJ5e3JldHVybiBsKGksaCxmKX1jYXRjaHt9aWYoImdldCJpbiBm''@;'; put 'put ''fHwic2V0ImluIGYpdGhyb3cgbmV3IGUoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIGYmJihpW2hdPWYudmFsdWUpLGl9fSx7Ii4uL2ludGVybmFscy9hbi1vYmplY3QiOjIyNywiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzIjoyNDcsIi4uL2ludGVybmFscy9p''@;'; put 'put ''ZTgtZG9tLWRlZmluZSI6Mjc5LCIuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5IjozNDYsIi4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZyI6MzUyfV0sMzA5OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9kZXNjcmlwdG9y''@;'; put 'put ''cyIpLGE9cygiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwiKSxvPXMoIi4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZSIpLHI9cygiLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yIiksdD1zKCIuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1v''@;'; put 'put ''YmplY3QiKSxlPXMoIi4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkiKSxsPXMoIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Iiksbj1zKCIuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUiKSxpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7Uy5mPWI/aTpmdW5jdGlv''@;'; put 'put ''bihoLGYpe2lmKGg9dChoKSxmPWUoZiksbil0cnl7cmV0dXJuIGkoaCxmKX1jYXRjaHt9aWYobChoLGYpKXJldHVybiByKCFhKG8uZixoLGYpLGhbZl0pfX0seyIuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IiOjI0MiwiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzIjoy''@;'; put 'put ''NDcsIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsIjoyNjQsIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5IjoyNzUsIi4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZSI6Mjc5LCIuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUiOjMxNywiLi4vaW50ZXJu''@;'; put 'put ''YWxzL3RvLWluZGV4ZWQtb2JqZWN0IjozNDEsIi4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkiOjM0Nn1dLDMxMDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXciKSxhPXMoIi4uL2ludGVybmFscy90by1pbmRleGVkLW9i''@;'; put 'put ''amVjdCIpLG89cygiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzIikuZixyPXMoIi4uL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUiKSx0PSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVj''@;'; put 'put ''dC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6W107RS5leHBvcnRzLmY9ZnVuY3Rpb24oZSl7cmV0dXJuIHQmJiJXaW5kb3ciPT09YihlKT9mdW5jdGlvbihsKXt0cnl7cmV0dXJuIG8obCl9Y2F0Y2h7cmV0dXJuIHIodCl9fShlKTpvKGEoZSkpfX0seyIuLi9pbnRlcm5hbHMvYXJyYXkt''@;'; put 'put ''c2xpY2Utc2ltcGxlIjoyMzAsIi4uL2ludGVybmFscy9jbGFzc29mLXJhdyI6MjM1LCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMiOjMxMSwiLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0IjozNDF9XSwzMTE6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsIiksYT1zKCIuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cyIpLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7Uy5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbihvKXtyZXR1cm4g''@;'; put 'put ''YihvLGEpfX0seyIuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cyI6MjU4LCIuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwiOjMxNX1dLDMxMjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtTLmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30se31dLDMxMzpbZnVu''@;'; put 'put ''Y3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSIpLGE9cygiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIiksbz1zKCIuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Iikscj1zKCIuLi9pbnRlcm5hbHMvc2hhcmVkLWtleSIpLHQ9cygi''@;'; put 'put ''Li4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlciIpLGU9cigiSUVfUFJPVE8iKSxsPU9iamVjdCxuPWwucHJvdG90eXBlO0UuZXhwb3J0cz10P2wuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oaSl7dmFyIGg9byhpKTtpZihiKGgsZSkpcmV0dXJuIGhbZV07dmFyIGY9aC5jb25z''@;'; put 'put ''dHJ1Y3RvcjtyZXR1cm4gYShmKSYmaCBpbnN0YW5jZW9mIGY/Zi5wcm90b3R5cGU6aCBpbnN0YW5jZW9mIGw/bjpudWxsfX0seyIuLi9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyIjoyMzksIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5IjoyNzUsIi4uL2ludGVybmFs''@;'; put 'put ''cy9pcy1jYWxsYWJsZSI6Mjg1LCIuLi9pbnRlcm5hbHMvc2hhcmVkLWtleSI6MzMyLCIuLi9pbnRlcm5hbHMvdG8tb2JqZWN0IjozNDR9XSwzMTQ6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyIpO0UuZXhw''@;'; put 'put ''b3J0cz1iKHt9LmlzUHJvdG90eXBlT2YpfSx7Ii4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiOjI2OH1dLDMxNTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIiksYT1zKCIuLi9pbnRlcm5h''@;'; put 'put ''bHMvaGFzLW93bi1wcm9wZXJ0eSIpLG89cygiLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Iikscj1zKCIuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMiKS5pbmRleE9mLHQ9cygiLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzIiksZT1iKFtdLnB1c2gpO0UuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''bihsLG4pe3ZhciBpLGg9byhsKSxmPTAsdT1bXTtmb3IoaSBpbiBoKSFhKHQsaSkmJmEoaCxpKSYmZSh1LGkpO2Zvcig7bi5sZW5ndGg+ZjspYShoLGk9bltmKytdKSYmKH5yKHUsaSl8fGUodSxpKSk7cmV0dXJuIHV9fSx7Ii4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcyI6MjI4LCIuLi9p''@;'; put 'put ''bnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIjoyNjgsIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5IjoyNzUsIi4uL2ludGVybmFscy9oaWRkZW4ta2V5cyI6Mjc2LCIuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QiOjM0MX1dLDMxNjpbZnVuY3Rpb24ocyxFLFMpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwiKSxhPXMoIi4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzIik7RS5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbihvKXtyZXR1cm4gYihvLGEpfX0seyIuLi9pbnRlcm5hbHMvZW51bS1idWct''@;'; put 'put ''a2V5cyI6MjU4LCIuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwiOjMxNX1dLDMxNzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isbz1hJiYhYi5jYWxsKHsx''@;'; put 'put ''OjJ9LDEpO1MuZj1vP2Z1bmN0aW9uKHIpe3ZhciB0PWEodGhpcyxyKTtyZXR1cm4hIXQmJnQuZW51bWVyYWJsZX06Yn0se31dLDMxODpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yIiksYT1z''@;'; put 'put ''KCIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Iiksbz1zKCIuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUiKTtFLmV4cG9ydHM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIHIsdD0hMSxlPXt9O3RyeXsocj1iKE9iamVjdC5wcm90''@;'; put 'put ''b3R5cGUsIl9fcHJvdG9fXyIsInNldCIpKShlLFtdKSx0PWUgaW5zdGFuY2VvZiBBcnJheX1jYXRjaHt9cmV0dXJuIGZ1bmN0aW9uKGwsbil7cmV0dXJuIGEobCksbyhuKSx0P3IobCxuKTpsLl9fcHJvdG9fXz1uLGx9fSgpOnZvaWQgMCl9LHsiLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJv''@;'; put 'put ''dG90eXBlIjoyMjQsIi4uL2ludGVybmFscy9hbi1vYmplY3QiOjIyNywiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvciI6MjY2fV0sMzE5OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9kZXNjcmlwdG9ycyIpLGE9''@;'; put 'put ''cygiLi4vaW50ZXJuYWxzL2ZhaWxzIiksbz1zKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIikscj1zKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YiKSx0PXMoIi4uL2ludGVybmFscy9vYmplY3Qta2V5cyIpLGU9cygiLi4vaW50ZXJuYWxzL3RvLWlu''@;'; put 'put ''ZGV4ZWQtb2JqZWN0IiksbD1vKHMoIi4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZSIpLmYpLG49byhbXS5wdXNoKSxpPWImJmEoZnVuY3Rpb24oKXt2YXIgZj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBmWzJdPTIsIWwoZiwyKX0pLGg9ZnVuY3Rpb24oZil7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKHUpe2Zvcih2YXIgcCxkPWUodSksdj10KGQpLF89aSYmbnVsbD09PXIoZCksQT12Lmxlbmd0aCxJPTAsTD1bXTtBPkk7KXA9dltJKytdLGImJiEoXz9wIGluIGQ6bChkLHApKXx8bihMLGY/W3AsZFtwXV06ZFtwXSk7cmV0dXJuIEx9fTtFLmV4cG9ydHM9e2VudHJp''@;'; put 'put ''ZXM6aCghMCksdmFsdWVzOmgoITEpfX0seyIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMiOjI0NywiLi4vaW50ZXJuYWxzL2ZhaWxzIjoyNjAsIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiOjI2OCwiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mIjozMTMs''@;'; put 'put ''Ii4uL2ludGVybmFscy9vYmplY3Qta2V5cyI6MzE2LCIuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUiOjMxNywiLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0IjozNDF9XSwzMjA6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4v''@;'; put 'put ''aW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwiKSxhPXMoIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSIpLG89cygiLi4vaW50ZXJuYWxzL2lzLW9iamVjdCIpLHI9VHlwZUVycm9yO0UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBsLG47aWYoInN0cmluZyI9PT1lJiZhKGw9dC50b1N0cmluZykm''@;'; put 'put ''JiFvKG49YihsLHQpKXx8YShsPXQudmFsdWVPZikmJiFvKG49YihsLHQpKXx8InN0cmluZyIhPT1lJiZhKGw9dC50b1N0cmluZykmJiFvKG49YihsLHQpKSlyZXR1cm4gbjt0aHJvdyBuZXcgcigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9fSx7Ii4uL2ludGVy''@;'; put 'put ''bmFscy9mdW5jdGlvbi1jYWxsIjoyNjQsIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSI6Mjg1LCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0IjoyODl9XSwzMjE6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbiIpLGE9cygiLi4v''@;'; put 'put ''aW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyIpLG89cygiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzIikscj1zKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scyIpLHQ9cygiLi4vaW50ZXJuYWxzL2FuLW9iamVjdCIp''@;'; put 'put ''LGU9YShbXS5jb25jYXQpO0UuZXhwb3J0cz1iKCJSZWZsZWN0Iiwib3duS2V5cyIpfHxmdW5jdGlvbihsKXt2YXIgbj1vLmYodChsKSksaT1yLmY7cmV0dXJuIGk/ZShuLGkobCkpOm59fSx7Ii4uL2ludGVybmFscy9hbi1vYmplY3QiOjIyNywiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3Vy''@;'; put 'put ''cnktdGhpcyI6MjY4LCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluIjoyNjksIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcyI6MzExLCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scyI6MzEyfV0sMzIyOltmdW5jdGlvbihzLEUs''@;'; put 'put ''Uyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9nbG9iYWwiKTtFLmV4cG9ydHM9Yn0seyIuLi9pbnRlcm5hbHMvZ2xvYmFsIjoyNzR9XSwzMjM6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7RS5leHBvcnRzPWZ1bmN0aW9uKGIpe3RyeXtyZXR1cm57ZXJyb3I6ITEs''@;'; put 'put ''dmFsdWU6YigpfX1jYXRjaChhKXtyZXR1cm57ZXJyb3I6ITAsdmFsdWU6YX19fX0se31dLDMyNDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZ2xvYmFsIiksYT1zKCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IiKSxv''@;'; put 'put ''PXMoIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSIpLHI9cygiLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCIpLHQ9cygiLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlIiksZT1zKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiKSxsPXMoIi4uL2ludGVybmFscy9lbmdpbmUtaXMtYnJv''@;'; put 'put ''d3NlciIpLG49cygiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1kZW5vIiksaT1zKCIuLi9pbnRlcm5hbHMvaXMtcHVyZSIpLGg9cygiLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uIiksZj1hJiZhLnByb3RvdHlwZSx1PWUoInNwZWNpZXMiKSxwPSExLGQ9byhiLlByb21pc2VSZWplY3Rp''@;'; put 'put ''b25FdmVudCksdj1yKCJQcm9taXNlIixmdW5jdGlvbigpe3ZhciBfPXQoYSksQT1fIT09U3RyaW5nKGEpO2lmKCFBJiY2Nj09PWh8fGkmJighZi5jYXRjaHx8IWYuZmluYWxseSkpcmV0dXJuITA7aWYoIWh8fGg8NTF8fCEvbmF0aXZlIGNvZGUvLnRlc3QoXykpe3ZhciBJPW5ldyBhKGZ1bmN0''@;'; put 'put ''aW9uKE4pe04oMSl9KSxMPWZ1bmN0aW9uKE4pe04oZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7fSl9O2lmKChJLmNvbnN0cnVjdG9yPXt9KVt1XT1MLCEocD1JLnRoZW4oZnVuY3Rpb24oKXt9KWluc3RhbmNlb2YgTCkpcmV0dXJuITB9cmV0dXJuIUEmJihsfHxuKSYmIWR9KTtFLmV4cG9ydHM9''@;'; put 'put ''e0NPTlNUUlVDVE9SOnYsUkVKRUNUSU9OX0VWRU5UOmQsU1VCQ0xBU1NJTkc6cH19LHsiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1icm93c2VyIjoyNTAsIi4uL2ludGVybmFscy9lbmdpbmUtaXMtZGVubyI6MjUxLCIuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24iOjI1NywiLi4vaW50''@;'; put 'put ''ZXJuYWxzL2dsb2JhbCI6Mjc0LCIuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UiOjI4MSwiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIjoyODUsIi4uL2ludGVybmFscy9pcy1mb3JjZWQiOjI4NywiLi4vaW50ZXJuYWxzL2lzLXB1cmUiOjI5MCwiLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0''@;'; put 'put ''aXZlLWNvbnN0cnVjdG9yIjozMjUsIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCI6MzU3fV0sMzI1OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9nbG9iYWwiKTtFLmV4cG9ydHM9Yi5Qcm9taXNlfSx7Ii4uL2ludGVybmFscy9nbG9i''@;'; put 'put ''YWwiOjI3NH1dLDMyNjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0IiksYT1zKCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Iiksbz1zKCIuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eSIpO0UuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbihyLHQpe2lmKGIociksYSh0KSYmdC5jb25zdHJ1Y3Rvcj09PXIpcmV0dXJuIHQ7dmFyIGU9by5mKHIpO3JldHVybigwLGUucmVzb2x2ZSkodCksZS5wcm9taXNlfX0seyIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0IjoyMjcsIi4uL2ludGVybmFscy9pcy1vYmplY3QiOjI4OSwiLi4vaW50''@;'; put 'put ''ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkiOjMwM31dLDMyNzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IiKSxhPXMoIi4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVy''@;'; put 'put ''YXRpb24iKSxvPXMoIi4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbiIpLkNPTlNUUlVDVE9SO0UuZXhwb3J0cz1vfHwhYShmdW5jdGlvbihyKXtiLmFsbChyKS50aGVuKHZvaWQgMCxmdW5jdGlvbigpe30pfSl9LHsiLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3Ru''@;'; put 'put ''ZXNzLW9mLWl0ZXJhdGlvbiI6MjM0LCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24iOjMyNCwiLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yIjozMjV9XSwzMjg6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9ZnVuY3Rp''@;'; put 'put ''b24oKXt0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbH07Yi5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihhKXt2YXIgbz17aXRlbTphLG5leHQ6bnVsbH0scj10aGlzLnRhaWw7cj9yLm5leHQ9bzp0aGlzLmhlYWQ9byx0aGlzLnRhaWw9b30sZ2V0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5o''@;'; put 'put ''ZWFkO2lmKGEpcmV0dXJuIG51bGw9PT0odGhpcy5oZWFkPWEubmV4dCkmJih0aGlzLnRhaWw9bnVsbCksYS5pdGVtfX0sRS5leHBvcnRzPWJ9LHt9XSwzMjk6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkIiks''@;'; put 'put ''YT1UeXBlRXJyb3I7RS5leHBvcnRzPWZ1bmN0aW9uKG8pe2lmKGIobykpdGhyb3cgbmV3IGEoIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrbyk7cmV0dXJuIG99fSx7Ii4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCI6Mjg4fV0sMzMwOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4iKSxhPXMoIi4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3IiKSxvPXMoIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCIpLHI9cygiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzIiksdD1vKCJzcGVj''@;'; put 'put ''aWVzIik7RS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciBsPWIoZSk7ciYmbCYmIWxbdF0mJmEobCx0LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSx7Ii4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3IiOjI0NCwiLi4vaW50ZXJuYWxz''@;'; put 'put ''L2Rlc2NyaXB0b3JzIjoyNDcsIi4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4iOjI2OSwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sIjozNTd9XSwzMzE6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVy''@;'; put 'put ''dHkiKS5mLGE9cygiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkiKSxvPXMoIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCIpKCJ0b1N0cmluZ1RhZyIpO0UuZXhwb3J0cz1mdW5jdGlvbihyLHQsZSl7ciYmIWUmJihyPXIucHJvdG90eXBlKSxyJiYhYShyLG8pJiZiKHIsbyx7''@;'; put 'put ''Y29uZmlndXJhYmxlOiEwLHZhbHVlOnR9KX19LHsiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkiOjI3NSwiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkiOjMwOCwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sIjozNTd9XSwzMzI6W2Z1bmN0aW9uKHMsRSxT''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL3NoYXJlZCIpLGE9cygiLi4vaW50ZXJuYWxzL3VpZCIpLG89Yigia2V5cyIpO0UuZXhwb3J0cz1mdW5jdGlvbihyKXtyZXR1cm4gb1tyXXx8KG9bcl09YShyKSl9fSx7Ii4uL2ludGVybmFscy9zaGFyZWQiOjMzNCwiLi4vaW50''@;'; put 'put ''ZXJuYWxzL3VpZCI6MzUwfV0sMzMzOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9nbG9iYWwiKSxhPXMoIi4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Iiksbz1iWyJfX2NvcmUtanNfc2hhcmVkX18iXXx8YSgiX19jb3JlLWpz''@;'; put 'put ''X3NoYXJlZF9fIix7fSk7RS5leHBvcnRzPW99LHsiLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHkiOjI0NiwiLi4vaW50ZXJuYWxzL2dsb2JhbCI6Mjc0fV0sMzM0OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9pcy1wdXJlIiks''@;'; put 'put ''YT1zKCIuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlIik7KEUuZXhwb3J0cz1mdW5jdGlvbihvLHIpe3JldHVybiBhW29dfHwoYVtvXT12b2lkIDAhPT1yP3I6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjoiMy4zMy4wIixtb2RlOmI/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdo''@;'; put 'put ''dDoiXHhhOSAyMDE0LTIwMjMgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSkiLGxpY2Vuc2U6Imh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzMuMC9MSUNFTlNFIixzb3VyY2U6Imh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzIn0pfSx7''@;'; put 'put ''Ii4uL2ludGVybmFscy9pcy1wdXJlIjoyOTAsIi4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUiOjMzM31dLDMzNTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0IiksYT1zKCIuLi9pbnRlcm5hbHMvYS1jb25zdHJ1Y3RvciIpLG89''@;'; put 'put ''cygiLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkIikscj1zKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiKSgic3BlY2llcyIpO0UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBsLG49Yih0KS5jb25zdHJ1Y3RvcjtyZXR1cm4gdm9pZCAwPT09bnx8byhsPWIobilb''@;'; put 'put ''cl0pP2U6YShsKX19LHsiLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3IiOjIyMywiLi4vaW50ZXJuYWxzL2FuLW9iamVjdCI6MjI3LCIuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQiOjI4OCwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sIjozNTd9XSwzMzY6W2Z1bmN0''@;'; put 'put ''aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uIiksYT1zKCIuLi9pbnRlcm5hbHMvZmFpbHMiKSxvPXMoIi4uL2ludGVybmFscy9nbG9iYWwiKS5TdHJpbmc7RS5leHBvcnRzPSEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9s''@;'; put 'put ''cyYmIWEoZnVuY3Rpb24oKXt2YXIgcj1TeW1ib2woInN5bWJvbCBkZXRlY3Rpb24iKTtyZXR1cm4hbyhyKXx8IShPYmplY3QocilpbnN0YW5jZW9mIFN5bWJvbCl8fCFTeW1ib2wuc2hhbSYmYiYmYjw0MX0pfSx7Ii4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbiI6MjU3LCIuLi9pbnRl''@;'; put 'put ''cm5hbHMvZmFpbHMiOjI2MCwiLi4vaW50ZXJuYWxzL2dsb2JhbCI6Mjc0fV0sMzM3OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsIiksYT1zKCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluIiksbz1zKCIuLi9pbnRlcm5h''@;'; put 'put ''bHMvd2VsbC1rbm93bi1zeW1ib2wiKSxyPXMoIi4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4iKTtFLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1hKCJTeW1ib2wiKSxlPXQmJnQucHJvdG90eXBlLGw9ZSYmZS52YWx1ZU9mLG49bygidG9QcmltaXRpdmUiKTtlJiYhZVtuXSYmcihlLG4s''@;'; put 'put ''ZnVuY3Rpb24oaSl7cmV0dXJuIGIobCx0aGlzKX0se2FyaXR5OjF9KX19LHsiLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbiI6MjQ1LCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCI6MjY0LCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluIjoyNjksIi4uL2ludGVybmFscy93ZWxsLWtu''@;'; put 'put ''b3duLXN5bWJvbCI6MzU3fV0sMzM4OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uIik7RS5leHBvcnRzPWImJiEhU3ltYm9sLmZvciYmISFTeW1ib2wua2V5Rm9yfSx7Ii4uL2ludGVybmFscy9z''@;'; put 'put ''eW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uIjozMzZ9XSwzMzk6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGIsYSxvLHIsdD1zKCIuLi9pbnRlcm5hbHMvZ2xvYmFsIiksZT1zKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkiKSxsPXMoIi4uL2ludGVybmFscy9mdW5j''@;'; put 'put ''dGlvbi1iaW5kLWNvbnRleHQiKSxuPXMoIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSIpLGk9cygiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkiKSxoPXMoIi4uL2ludGVybmFscy9mYWlscyIpLGY9cygiLi4vaW50ZXJuYWxzL2h0bWwiKSx1PXMoIi4uL2ludGVybmFscy9hcnJheS1z''@;'; put 'put ''bGljZSIpLHA9cygiLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50IiksZD1zKCIuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCIpLHY9cygiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MiKSxfPXMoIi4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZSIp''@;'; put 'put ''LEE9dC5zZXRJbW1lZGlhdGUsST10LmNsZWFySW1tZWRpYXRlLEw9dC5wcm9jZXNzLE49dC5EaXNwYXRjaCxQPXQuRnVuY3Rpb24sQj10Lk1lc3NhZ2VDaGFubmVsLCQ9dC5TdHJpbmcsRD0wLHg9e307aChmdW5jdGlvbigpe2I9dC5sb2NhdGlvbn0pO3ZhciBNPWZ1bmN0aW9uKGcpe2lmKGko''@;'; put 'put ''eCxnKSl7dmFyIHk9eFtnXTtkZWxldGUgeFtnXSx5KCl9fSxqPWZ1bmN0aW9uKGcpe3JldHVybiBmdW5jdGlvbigpe00oZyl9fSxjPWZ1bmN0aW9uKGcpe00oZy5kYXRhKX0sbT1mdW5jdGlvbihnKXt0LnBvc3RNZXNzYWdlKCQoZyksYi5wcm90b2NvbCsiLy8iK2IuaG9zdCl9O0EmJkl8fChB''@;'; put 'put ''PWZ1bmN0aW9uKGcpe2QoYXJndW1lbnRzLmxlbmd0aCwxKTt2YXIgeT1uKGcpP2c6UChnKSx3PXUoYXJndW1lbnRzLDEpO3JldHVybiB4WysrRF09ZnVuY3Rpb24oKXtlKHksdm9pZCAwLHcpfSxhKEQpLER9LEk9ZnVuY3Rpb24oZyl7ZGVsZXRlIHhbZ119LF8/YT1mdW5jdGlvbihnKXtMLm5l''@;'; put 'put ''eHRUaWNrKGooZykpfTpOJiZOLm5vdz9hPWZ1bmN0aW9uKGcpe04ubm93KGooZykpfTpCJiYhdj8ocj0obz1uZXcgQikucG9ydDIsby5wb3J0MS5vbm1lc3NhZ2U9YyxhPWwoci5wb3N0TWVzc2FnZSxyKSk6dC5hZGRFdmVudExpc3RlbmVyJiZuKHQucG9zdE1lc3NhZ2UpJiYhdC5pbXBvcnRT''@;'; put 'put ''Y3JpcHRzJiZiJiYiZmlsZToiIT09Yi5wcm90b2NvbCYmIWgobSk/KGE9bSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGMsITEpKTphPSJvbnJlYWR5c3RhdGVjaGFuZ2UiaW4gcCgic2NyaXB0Iik/ZnVuY3Rpb24oZyl7Zi5hcHBlbmRDaGlsZChwKCJzY3JpcHQiKSkub25yZWFkeXN0''@;'; put 'put ''YXRlY2hhbmdlPWZ1bmN0aW9uKCl7Zi5yZW1vdmVDaGlsZCh0aGlzKSxNKGcpfX06ZnVuY3Rpb24oZyl7c2V0VGltZW91dChqKGcpLDApfSksRS5leHBvcnRzPXtzZXQ6QSxjbGVhcjpJfX0seyIuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UiOjIzMSwiLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNy''@;'; put 'put ''ZWF0ZS1lbGVtZW50IjoyNDksIi4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zIjoyNTMsIi4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZSI6MjU0LCIuLi9pbnRlcm5hbHMvZmFpbHMiOjI2MCwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5IjoyNjEsIi4uL2ludGVybmFscy9mdW5jdGlv''@;'; put 'put ''bi1iaW5kLWNvbnRleHQiOjI2MiwiLi4vaW50ZXJuYWxzL2dsb2JhbCI6Mjc0LCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSI6Mjc1LCIuLi9pbnRlcm5hbHMvaHRtbCI6Mjc4LCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiOjI4NSwiLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3Vt''@;'; put 'put ''ZW50cy1sZW5ndGgiOjM1M31dLDM0MDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eSIpLGE9TWF0aC5tYXgsbz1NYXRoLm1pbjtFLmV4cG9ydHM9ZnVuY3Rpb24ocix0KXt2YXIgZT1iKHIpO3JldHVybiBl''@;'; put 'put ''PDA/YShlK3QsMCk6byhlLHQpfX0seyIuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eSI6MzQyfV0sMzQxOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCIpLGE9cygiLi4vaW50ZXJuYWxzL3JlcXVpcmUt''@;'; put 'put ''b2JqZWN0LWNvZXJjaWJsZSIpO0UuZXhwb3J0cz1mdW5jdGlvbihvKXtyZXR1cm4gYihhKG8pKX19LHsiLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0IjoyODAsIi4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUiOjMyOX1dLDM0MjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvbWF0aC10cnVuYyIpO0UuZXhwb3J0cz1mdW5jdGlvbihhKXt2YXIgbz0rYTtyZXR1cm4gbyE9b3x8MD09PW8/MDpiKG8pfX0seyIuLi9pbnRlcm5hbHMvbWF0aC10cnVuYyI6MzAxfV0sMzQzOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5IiksYT1NYXRoLm1pbjtFLmV4cG9ydHM9ZnVuY3Rpb24obyl7cmV0dXJuIG8+MD9hKGIobyksOTAwNzE5OTI1NDc0MDk5MSk6MH19LHsiLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkiOjM0''@;'; put 'put ''Mn1dLDM0NDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlIiksYT1PYmplY3Q7RS5leHBvcnRzPWZ1bmN0aW9uKG8pe3JldHVybiBhKGIobykpfX0seyIuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3Qt''@;'; put 'put ''Y29lcmNpYmxlIjozMjl9XSwzNDU6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwiKSxhPXMoIi4uL2ludGVybmFscy9pcy1vYmplY3QiKSxvPXMoIi4uL2ludGVybmFscy9pcy1zeW1ib2wiKSxyPXMoIi4uL2ludGVybmFs''@;'; put 'put ''cy9nZXQtbWV0aG9kIiksdD1zKCIuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlIiksZT1zKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiKSxsPVR5cGVFcnJvcixuPWUoInRvUHJpbWl0aXZlIik7RS5leHBvcnRzPWZ1bmN0aW9uKGksaCl7aWYoIWEoaSl8fG8oaSkp''@;'; put 'put ''cmV0dXJuIGk7dmFyIGYsdT1yKGksbik7aWYodSl7aWYodm9pZCAwPT09aCYmKGg9ImRlZmF1bHQiKSxmPWIodSxpLGgpLCFhKGYpfHxvKGYpKXJldHVybiBmO3Rocm93IG5ldyBsKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX1yZXR1cm4gdm9pZCAwPT09aCYm''@;'; put 'put ''KGg9Im51bWJlciIpLHQoaSxoKX19LHsiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwiOjI2NCwiLi4vaW50ZXJuYWxzL2dldC1tZXRob2QiOjI3MywiLi4vaW50ZXJuYWxzL2lzLW9iamVjdCI6Mjg5LCIuLi9pbnRlcm5hbHMvaXMtc3ltYm9sIjoyOTIsIi4uL2ludGVybmFscy9vcmRpbmFy''@;'; put 'put ''eS10by1wcmltaXRpdmUiOjMyMCwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sIjozNTd9XSwzNDY6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZSIpLGE9cygiLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCIpO0UuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbihvKXt2YXIgcj1iKG8sInN0cmluZyIpO3JldHVybiBhKHIpP3I6cisiIn19LHsiLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCI6MjkyLCIuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlIjozNDV9XSwzNDc6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9e307''@;'; put 'put ''YltzKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiKSgidG9TdHJpbmdUYWciKV09InoiLEUuZXhwb3J0cz0iW29iamVjdCB6XSI9PT1TdHJpbmcoYil9LHsiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sIjozNTd9XSwzNDg6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2NsYXNzb2YiKSxhPVN0cmluZztFLmV4cG9ydHM9ZnVuY3Rpb24obyl7aWYoIlN5bWJvbCI9PT1iKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIik7cmV0dXJuIGEobyl9fSx7''@;'; put 'put ''Ii4uL2ludGVybmFscy9jbGFzc29mIjoyMzZ9XSwzNDk6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9U3RyaW5nO0UuZXhwb3J0cz1mdW5jdGlvbihhKXt0cnl7cmV0dXJuIGIoYSl9Y2F0Y2h7cmV0dXJuIk9iamVjdCJ9fX0se31dLDM1MDpbZnVuY3Rpb24ocyxFLFMpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIiksYT0wLG89TWF0aC5yYW5kb20oKSxyPWIoMS4udG9TdHJpbmcpO0UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4iU3ltYm9sKCIrKHZvaWQgMD09PXQ/IiI6dCkrIilfIityKCsrYStvLDM2''@;'; put 'put ''KX19LHsiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyI6MjY4fV0sMzUxOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uIik7RS5leHBvcnRzPWImJiFTeW1ib2wuc2hhbSYmInN5''@;'; put 'put ''bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3J9LHsiLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24iOjMzNn1dLDM1MjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMiKSxhPXMoIi4uL2ludGVy''@;'; put 'put ''bmFscy9mYWlscyIpO0UuZXhwb3J0cz1iJiZhKGZ1bmN0aW9uKCl7cmV0dXJuIDQyIT09T2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKCl7fSwicHJvdG90eXBlIix7dmFsdWU6NDIsd3JpdGFibGU6ITF9KS5wcm90b3R5cGV9KX0seyIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMiOjI0''@;'; put 'put ''NywiLi4vaW50ZXJuYWxzL2ZhaWxzIjoyNjB9XSwzNTM6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9VHlwZUVycm9yO0UuZXhwb3J0cz1mdW5jdGlvbihhLG8pe2lmKGE8byl0aHJvdyBuZXcgYigiTm90IGVub3VnaCBhcmd1bWVudHMiKTtyZXR1cm4gYX19LHt9XSwzNTQ6''@;'; put 'put ''W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2dsb2JhbCIpLGE9cygiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIiksbz1iLldlYWtNYXA7RS5leHBvcnRzPWEobykmJi9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcobykpfSx7Ii4uL2ludGVybmFs''@;'; put 'put ''cy9nbG9iYWwiOjI3NCwiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIjoyODV9XSwzNTU6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL3BhdGgiKSxhPXMoIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Iiksbz1zKCIuLi9pbnRlcm5hbHMv''@;'; put 'put ''d2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCIpLHI9cygiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkiKS5mO0UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1iLlN5bWJvbHx8KGIuU3ltYm9sPXt9KTthKGUsdCl8fHIoZSx0LHt2YWx1ZTpvLmYodCl9KX19LHsiLi4vaW50''@;'; put 'put ''ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkiOjI3NSwiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkiOjMwOCwiLi4vaW50ZXJuYWxzL3BhdGgiOjMyMiwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQiOjM1Nn1dLDM1NjpbZnVuY3Rpb24ocyxFLFMpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiKTtTLmY9Yn0seyIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiOjM1N31dLDM1NzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZ2xvYmFsIiks''@;'; put 'put ''YT1zKCIuLi9pbnRlcm5hbHMvc2hhcmVkIiksbz1zKCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSIpLHI9cygiLi4vaW50ZXJuYWxzL3VpZCIpLHQ9cygiLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24iKSxlPXMoIi4uL2ludGVybmFscy91c2Utc3ltYm9s''@;'; put 'put ''LWFzLXVpZCIpLGw9Yi5TeW1ib2wsbj1hKCJ3a3MiKSxpPWU/bC5mb3J8fGw6bCYmbC53aXRob3V0U2V0dGVyfHxyO0UuZXhwb3J0cz1mdW5jdGlvbihoKXtyZXR1cm4gbyhuLGgpfHwobltoXT10JiZvKGwsaCk/bFtoXTppKCJTeW1ib2wuIitoKSksbltoXX19LHsiLi4vaW50ZXJuYWxzL2ds''@;'; put 'put ''b2JhbCI6Mjc0LCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSI6Mjc1LCIuLi9pbnRlcm5hbHMvc2hhcmVkIjozMzQsIi4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uIjozMzYsIi4uL2ludGVybmFscy91aWQiOjM1MCwiLi4vaW50ZXJuYWxzL3VzZS1zeW1i''@;'; put 'put ''b2wtYXMtdWlkIjozNTF9XSwzNTg6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2V4cG9ydCIpLGE9cygiLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbiIpLmZpbmRJbmRleCxvPXMoIi4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMi''@;'; put 'put ''KSxyPSEwOyJmaW5kSW5kZXgiaW5bXSYmQXJyYXkoMSkuZmluZEluZGV4KGZ1bmN0aW9uKCl7cj0hMX0pLGIoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpyfSx7ZmluZEluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRz''@;'; put 'put ''WzFdOnZvaWQgMCl9fSksbygiZmluZEluZGV4Iil9LHsiLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcyI6MjI1LCIuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uIjoyMjksIi4uL2ludGVybmFscy9leHBvcnQiOjI1OX1dLDM1OTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZXhwb3J0IiksYT1zKCIuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uIikuZmluZCxvPXMoIi4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMiKSxyPSEwOyJmaW5kImluW10mJkFycmF5KDEpLmZpbmQoZnVuY3Rpb24oKXtyPSExfSksYih7''@;'; put 'put ''dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOnJ9LHtmaW5kOmZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksbygiZmluZCIpfSx7Ii4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMiOjIyNSwiLi4v''@;'; put 'put ''aW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbiI6MjI5LCIuLi9pbnRlcm5hbHMvZXhwb3J0IjoyNTl9XSwzNjA6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2V4cG9ydCIpLGE9cygiLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzIikuaW5jbHVk''@;'; put 'put ''ZXMsbz1zKCIuLi9pbnRlcm5hbHMvZmFpbHMiKSxyPXMoIi4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMiKTtiKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6byhmdW5jdGlvbigpe3JldHVybiFBcnJheSgxKS5pbmNsdWRlcygpfSl9LHtpbmNsdWRlczpmdW5jdGlvbih0''@;'; put 'put ''KXtyZXR1cm4gYSh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLHIoImluY2x1ZGVzIil9LHsiLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcyI6MjI1LCIuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMiOjIyOCwiLi4vaW50ZXJuYWxzL2V4''@;'; put 'put ''cG9ydCI6MjU5LCIuLi9pbnRlcm5hbHMvZmFpbHMiOjI2MH1dLDM2MTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QiKSxhPXMoIi4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMiKSxvPXMoIi4uL2ludGVy''@;'; put 'put ''bmFscy9pdGVyYXRvcnMiKSxyPXMoIi4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZSIpLHQ9cygiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkiKS5mLGU9cygiLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZSIpLGw9cygiLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJl''@;'; put 'put ''c3VsdC1vYmplY3QiKSxuPXMoIi4uL2ludGVybmFscy9pcy1wdXJlIiksaT1zKCIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMiKSxoPXIuc2V0LGY9ci5nZXR0ZXJGb3IoIkFycmF5IEl0ZXJhdG9yIik7RS5leHBvcnRzPWUoQXJyYXksIkFycmF5IixmdW5jdGlvbihwLGQpe2godGhpcyx7dHlw''@;'; put 'put ''ZToiQXJyYXkgSXRlcmF0b3IiLHRhcmdldDpiKHApLGluZGV4OjAsa2luZDpkfSl9LGZ1bmN0aW9uKCl7dmFyIHA9Zih0aGlzKSxkPXAudGFyZ2V0LHY9cC5raW5kLF89cC5pbmRleCsrO2lmKCFkfHxfPj1kLmxlbmd0aClyZXR1cm4gcC50YXJnZXQ9dm9pZCAwLGwodm9pZCAwLCEwKTtzd2l0''@;'; put 'put ''Y2godil7Y2FzZSJrZXlzIjpyZXR1cm4gbChfLCExKTtjYXNlInZhbHVlcyI6cmV0dXJuIGwoZFtfXSwhMSl9cmV0dXJuIGwoW18sZFtfXV0sITEpfSwidmFsdWVzIik7dmFyIHU9by5Bcmd1bWVudHM9by5BcnJheTtpZihhKCJrZXlzIiksYSgidmFsdWVzIiksYSgiZW50cmllcyIpLCFuJiZp''@;'; put 'put ''JiYidmFsdWVzIiE9PXUubmFtZSl0cnl7dCh1LCJuYW1lIix7dmFsdWU6InZhbHVlcyJ9KX1jYXRjaHt9fSx7Ii4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMiOjIyNSwiLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QiOjI0MCwiLi4vaW50ZXJuYWxzL2Rlc2Ny''@;'; put 'put ''aXB0b3JzIjoyNDcsIi4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZSI6MjgyLCIuLi9pbnRlcm5hbHMvaXMtcHVyZSI6MjkwLCIuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lIjoyOTYsIi4uL2ludGVybmFscy9pdGVyYXRvcnMiOjI5OCwiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUt''@;'; put 'put ''cHJvcGVydHkiOjMwOCwiLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0IjozNDF9XSwzNjI6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2V4cG9ydCIpLGE9cygiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbiIpLG89cygiLi4vaW50ZXJu''@;'; put 'put ''YWxzL2Z1bmN0aW9uLWFwcGx5Iikscj1zKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCIpLHQ9cygiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyIpLGU9cygiLi4vaW50ZXJuYWxzL2ZhaWxzIiksbD1zKCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiKSxuPXMoIi4uL2lu''@;'; put 'put ''dGVybmFscy9pcy1zeW1ib2wiKSxpPXMoIi4uL2ludGVybmFscy9hcnJheS1zbGljZSIpLGg9cygiLi4vaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uIiksZj1zKCIuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbiIpLHU9U3RyaW5nLHA9YSgiSlNP''@;'; put 'put ''TiIsInN0cmluZ2lmeSIpLGQ9dCgvLi8uZXhlYyksdj10KCIiLmNoYXJBdCksXz10KCIiLmNoYXJDb2RlQXQpLEE9dCgiIi5yZXBsYWNlKSxJPXQoMS4udG9TdHJpbmcpLEw9L1tcdUQ4MDAtXHVERkZGXS9nLE49L15bXHVEODAwLVx1REJGRl0kLyxQPS9eW1x1REMwMC1cdURGRkZdJC8sQj0h''@;'; put 'put ''Znx8ZShmdW5jdGlvbigpe3ZhciBNPWEoIlN5bWJvbCIpKCJzdHJpbmdpZnkgZGV0ZWN0aW9uIik7cmV0dXJuIltudWxsXSIhPT1wKFtNXSl8fCJ7fSIhPT1wKHthOk19KXx8Int9IiE9PXAoT2JqZWN0KE0pKX0pLCQ9ZShmdW5jdGlvbigpe3JldHVybiciXFx1ZGYwNlxcdWQ4MzQiJyE9PXAo''@;'; put 'put ''Ilx1ZGYwNlx1ZDgzNCIpfHwnIlxcdWRlYWQiJyE9PXAoIlx1ZGVhZCIpfSksRD1mdW5jdGlvbihNLGope3ZhciBjPWkoYXJndW1lbnRzKSxtPWgoaik7aWYobChtKXx8dm9pZCAwIT09TSYmIW4oTSkpcmV0dXJuIGNbMV09ZnVuY3Rpb24oZyx5KXtpZihsKG0pJiYoeT1yKG0sdGhpcyx1KGcp''@;'; put 'put ''LHkpKSwhbih5KSlyZXR1cm4geX0sbyhwLG51bGwsYyl9LHg9ZnVuY3Rpb24oTSxqLGMpe3ZhciBtPXYoYyxqLTEpLGc9dihjLGorMSk7cmV0dXJuIGQoTixNKSYmIWQoUCxnKXx8ZChQLE0pJiYhZChOLG0pPyJcXHUiK0koXyhNLDApLDE2KTpNfTtwJiZiKHt0YXJnZXQ6IkpTT04iLHN0YXQ6''@;'; put 'put ''ITAsYXJpdHk6Myxmb3JjZWQ6Qnx8JH0se3N0cmluZ2lmeTpmdW5jdGlvbihNLGosYyl7dmFyIG09aShhcmd1bWVudHMpLGc9byhCP0Q6cCxudWxsLG0pO3JldHVybiAkJiYic3RyaW5nIj09dHlwZW9mIGc/QShnLEwseCk6Z319KX0seyIuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UiOjIzMSwi''@;'; put 'put ''Li4vaW50ZXJuYWxzL2V4cG9ydCI6MjU5LCIuLi9pbnRlcm5hbHMvZmFpbHMiOjI2MCwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5IjoyNjEsIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsIjoyNjQsIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiOjI2OCwiLi4vaW50''@;'; put 'put ''ZXJuYWxzL2dldC1idWlsdC1pbiI6MjY5LCIuLi9pbnRlcm5hbHMvZ2V0LWpzb24tcmVwbGFjZXItZnVuY3Rpb24iOjI3MiwiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIjoyODUsIi4uL2ludGVybmFscy9pcy1zeW1ib2wiOjI5MiwiLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1k''@;'; put 'put ''ZXRlY3Rpb24iOjMzNn1dLDM2MzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtzKCIuLi9pbnRlcm5hbHMvZXhwb3J0Iikoe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7aXNOYU46ZnVuY3Rpb24oYil7cmV0dXJuIGIhPWJ9fSl9LHsiLi4vaW50ZXJuYWxzL2V4cG9ydCI6MjU5fV0s''@;'; put 'put ''MzY0OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9leHBvcnQiKSxhPXMoIi4uL2ludGVybmFscy9vYmplY3QtYXNzaWduIik7Yih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsYXJpdHk6Mixmb3JjZWQ6T2JqZWN0LmFzc2lnbiE9PWF9LHthc3Np''@;'; put 'put ''Z246YX0pfSx7Ii4uL2ludGVybmFscy9leHBvcnQiOjI1OSwiLi4vaW50ZXJuYWxzL29iamVjdC1hc3NpZ24iOjMwNX1dLDM2NTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZXhwb3J0IiksYT1zKCIuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0''@;'; put 'put ''cnVjdG9yLWRldGVjdGlvbiIpLG89cygiLi4vaW50ZXJuYWxzL2ZhaWxzIikscj1zKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scyIpLHQ9cygiLi4vaW50ZXJuYWxzL3RvLW9iamVjdCIpO2Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohYXx8''@;'; put 'put ''byhmdW5jdGlvbigpe3IuZigxKX0pfSx7Z2V0T3duUHJvcGVydHlTeW1ib2xzOmZ1bmN0aW9uKGUpe3ZhciBsPXIuZjtyZXR1cm4gbD9sKHQoZSkpOltdfX0pfSx7Ii4uL2ludGVybmFscy9leHBvcnQiOjI1OSwiLi4vaW50ZXJuYWxzL2ZhaWxzIjoyNjAsIi4uL2ludGVybmFscy9vYmplY3Qt''@;'; put 'put ''Z2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzIjozMTIsIi4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uIjozMzYsIi4uL2ludGVybmFscy90by1vYmplY3QiOjM0NH1dLDM2NjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMv''@;'; put 'put ''ZXhwb3J0IiksYT1zKCIuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Iiksbz1zKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMiKTtiKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6cygiLi4vaW50ZXJuYWxzL2ZhaWxzIikoZnVuY3Rpb24oKXtvKDEpfSl9LHtrZXlzOmZ1bmN0aW9uKHIp''@;'; put 'put ''e3JldHVybiBvKGEocikpfX0pfSx7Ii4uL2ludGVybmFscy9leHBvcnQiOjI1OSwiLi4vaW50ZXJuYWxzL2ZhaWxzIjoyNjAsIi4uL2ludGVybmFscy9vYmplY3Qta2V5cyI6MzE2LCIuLi9pbnRlcm5hbHMvdG8tb2JqZWN0IjozNDR9XSwzNjc6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2V4cG9ydCIpLGE9cygiLi4vaW50ZXJuYWxzL29iamVjdC10by1hcnJheSIpLnZhbHVlcztiKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se3ZhbHVlczpmdW5jdGlvbihvKXtyZXR1cm4gYShvKX19KX0seyIuLi9pbnRlcm5hbHMvZXhwb3J0Ijoy''@;'; put 'put ''NTksIi4uL2ludGVybmFscy9vYmplY3QtdG8tYXJyYXkiOjMxOX1dLDM2ODpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZXhwb3J0IiksYT1zKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCIpLG89cygiLi4vaW50ZXJuYWxzL2EtY2FsbGFi''@;'; put 'put ''bGUiKSxyPXMoIi4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5IiksdD1zKCIuLi9pbnRlcm5hbHMvcGVyZm9ybSIpLGU9cygiLi4vaW50ZXJuYWxzL2l0ZXJhdGUiKTtiKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITAsZm9yY2VkOnMoIi4uL2ludGVybmFscy9wcm9taXNlLXN0''@;'; put 'put ''YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbiIpfSx7YWxsOmZ1bmN0aW9uKGwpe3ZhciBuPXRoaXMsaT1yLmYobiksaD1pLnJlc29sdmUsZj1pLnJlamVjdCx1PXQoZnVuY3Rpb24oKXt2YXIgcD1vKG4ucmVzb2x2ZSksZD1bXSx2PTAsXz0xO2UobCxmdW5jdGlvbihBKXt2YXIgST12KyssTD0h''@;'; put 'put ''MTtfKyssYShwLG4sQSkudGhlbihmdW5jdGlvbihOKXtMfHwoTD0hMCxkW0ldPU4sLS1ffHxoKGQpKX0sZil9KSwtLV98fGgoZCl9KTtyZXR1cm4gdS5lcnJvciYmZih1LnZhbHVlKSxpLnByb21pc2V9fSl9LHsiLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUiOjIyMiwiLi4vaW50ZXJuYWxzL2V4''@;'; put 'put ''cG9ydCI6MjU5LCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCI6MjY0LCIuLi9pbnRlcm5hbHMvaXRlcmF0ZSI6MjkzLCIuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eSI6MzAzLCIuLi9pbnRlcm5hbHMvcGVyZm9ybSI6MzIzLCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0''@;'; put 'put ''aWNzLWluY29ycmVjdC1pdGVyYXRpb24iOjMyN31dLDM2OTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZXhwb3J0IiksYT1zKCIuLi9pbnRlcm5hbHMvaXMtcHVyZSIpLG89cygiLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0''@;'; put 'put ''ZWN0aW9uIikuQ09OU1RSVUNUT1Iscj1zKCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IiKSx0PXMoIi4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4iKSxlPXMoIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSIpLGw9cygiLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1p''@;'; put 'put ''biIpLG49ciYmci5wcm90b3R5cGU7aWYoYih7dGFyZ2V0OiJQcm9taXNlIixwcm90bzohMCxmb3JjZWQ6byxyZWFsOiEwfSx7Y2F0Y2g6ZnVuY3Rpb24oaCl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsaCl9fSksIWEmJmUocikpe3ZhciBpPXQoIlByb21pc2UiKS5wcm90b3R5cGUuY2F0Y2g7''@;'; put 'put ''bi5jYXRjaCE9PWkmJmwobiwiY2F0Y2giLGkse3Vuc2FmZTohMH0pfX0seyIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluIjoyNDUsIi4uL2ludGVybmFscy9leHBvcnQiOjI1OSwiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbiI6MjY5LCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiOjI4''@;'; put 'put ''NSwiLi4vaW50ZXJuYWxzL2lzLXB1cmUiOjI5MCwiLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uIjozMjQsIi4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvciI6MzI1fV0sMzcwOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBi''@;'; put 'put ''LGEsbyxyPXMoIi4uL2ludGVybmFscy9leHBvcnQiKSx0PXMoIi4uL2ludGVybmFscy9pcy1wdXJlIiksZT1zKCIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUiKSxsPXMoIi4uL2ludGVybmFscy9nbG9iYWwiKSxuPXMoIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsIiksaT1zKCIuLi9p''@;'; put 'put ''bnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluIiksaD1zKCIuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YiKSxmPXMoIi4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZyIpLHU9cygiLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzIikscD1zKCIuLi9pbnRlcm5hbHMvYS1jYWxs''@;'; put 'put ''YWJsZSIpLGQ9cygiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIiksdj1zKCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0IiksXz1zKCIuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UiKSxBPXMoIi4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yIiksST1zKCIuLi9pbnRlcm5hbHMvdGFzayIp''@;'; put 'put ''LnNldCxMPXMoIi4uL2ludGVybmFscy9taWNyb3Rhc2siKSxOPXMoIi4uL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMiKSxQPXMoIi4uL2ludGVybmFscy9wZXJmb3JtIiksQj1zKCIuLi9pbnRlcm5hbHMvcXVldWUiKSwkPXMoIi4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZSIpLEQ9''@;'; put 'put ''cygiLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yIikseD1zKCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24iKSxNPXMoIi4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Iiksaj14LkNPTlNUUlVDVE9SLGM9eC5SRUpFQ1RJ''@;'; put 'put ''T05fRVZFTlQsbT14LlNVQkNMQVNTSU5HLGc9JC5nZXR0ZXJGb3IoIlByb21pc2UiKSx5PSQuc2V0LHc9RCYmRC5wcm90b3R5cGUsaz1ELE89dyx6PWwuVHlwZUVycm9yLFU9bC5kb2N1bWVudCxWPWwucHJvY2VzcyxSPU0uZixIPVIsVD0hIShVJiZVLmNyZWF0ZUV2ZW50JiZsLmRpc3BhdGNo''@;'; put 'put ''RXZlbnQpLEM9ZnVuY3Rpb24oRyl7dmFyIGV0O3JldHVybiEoIXYoRyl8fCFkKGV0PUcudGhlbikpJiZldH0sRj1mdW5jdGlvbihHLGV0KXt2YXIgbnQsaXQsb3QsaHQ9ZXQudmFsdWUsZnQ9MT09PWV0LnN0YXRlLHB0PWZ0P0cub2s6Ry5mYWlsLFR0PUcucmVzb2x2ZSx5dD1HLnJlamVjdCx3''@;'; put 'put ''dD1HLmRvbWFpbjt0cnl7cHQ/KGZ0fHwoMj09PWV0LnJlamVjdGlvbiYmcnQoZXQpLGV0LnJlamVjdGlvbj0xKSwhMD09PXB0P250PWh0Oih3dCYmd3QuZW50ZXIoKSxudD1wdChodCksd3QmJih3dC5leGl0KCksb3Q9ITApKSxudD09PUcucHJvbWlzZT95dChuZXcgeigiUHJvbWlzZS1jaGFp''@;'; put 'put ''biBjeWNsZSIpKTooaXQ9QyhudCkpP24oaXQsbnQsVHQseXQpOlR0KG50KSk6eXQoaHQpfWNhdGNoKHF0KXt3dCYmIW90JiZ3dC5leGl0KCkseXQocXQpfX0scT1mdW5jdGlvbihHLGV0KXtHLm5vdGlmaWVkfHwoRy5ub3RpZmllZD0hMCxMKGZ1bmN0aW9uKCl7Zm9yKHZhciBudCxpdD1HLnJl''@;'; put 'put ''YWN0aW9ucztudD1pdC5nZXQoKTspRihudCxHKTtHLm5vdGlmaWVkPSExLGV0JiYhRy5yZWplY3Rpb24mJlgoRyl9KSl9LFk9ZnVuY3Rpb24oRyxldCxudCl7dmFyIGl0LG90O1Q/KChpdD1VLmNyZWF0ZUV2ZW50KCJFdmVudCIpKS5wcm9taXNlPWV0LGl0LnJlYXNvbj1udCxpdC5pbml0RXZl''@;'; put 'put ''bnQoRywhMSwhMCksbC5kaXNwYXRjaEV2ZW50KGl0KSk6aXQ9e3Byb21pc2U6ZXQscmVhc29uOm50fSwhYyYmKG90PWxbIm9uIitHXSk/b3QoaXQpOiJ1bmhhbmRsZWRyZWplY3Rpb24iPT09RyYmTigiVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIixudCl9LFg9ZnVuY3Rpb24oRyl7bihJ''@;'; put 'put ''LGwsZnVuY3Rpb24oKXt2YXIgZXQsbnQ9Ry5mYWNhZGUsaXQ9Ry52YWx1ZTtpZihLKEcpJiYoZXQ9UChmdW5jdGlvbigpe2U/Vi5lbWl0KCJ1bmhhbmRsZWRSZWplY3Rpb24iLGl0LG50KTpZKCJ1bmhhbmRsZWRyZWplY3Rpb24iLG50LGl0KX0pLEcucmVqZWN0aW9uPWV8fEsoRyk/MjoxLGV0''@;'; put 'put ''LmVycm9yKSl0aHJvdyBldC52YWx1ZX0pfSxLPWZ1bmN0aW9uKEcpe3JldHVybiAxIT09Ry5yZWplY3Rpb24mJiFHLnBhcmVudH0scnQ9ZnVuY3Rpb24oRyl7bihJLGwsZnVuY3Rpb24oKXt2YXIgZXQ9Ry5mYWNhZGU7ZT9WLmVtaXQoInJlamVjdGlvbkhhbmRsZWQiLGV0KTpZKCJyZWplY3Rp''@;'; put 'put ''b25oYW5kbGVkIixldCxHLnZhbHVlKX0pfSx0dD1mdW5jdGlvbihHLGV0LG50KXtyZXR1cm4gZnVuY3Rpb24oaXQpe0coZXQsaXQsbnQpfX0sVz1mdW5jdGlvbihHLGV0LG50KXtHLmRvbmV8fChHLmRvbmU9ITAsbnQmJihHPW50KSxHLnZhbHVlPWV0LEcuc3RhdGU9MixxKEcsITApKX0sUT1m''@;'; put 'put ''dW5jdGlvbihHLGV0LG50KXtpZighRy5kb25lKXtHLmRvbmU9ITAsbnQmJihHPW50KTt0cnl7aWYoRy5mYWNhZGU9PT1ldCl0aHJvdyBuZXcgeigiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGYiKTt2YXIgaXQ9QyhldCk7aXQ/TChmdW5jdGlvbigpe3ZhciBvdD17ZG9uZTohMX07''@;'; put 'put ''dHJ5e24oaXQsZXQsdHQoUSxvdCxHKSx0dChXLG90LEcpKX1jYXRjaChodCl7VyhvdCxodCxHKX19KTooRy52YWx1ZT1ldCxHLnN0YXRlPTEscShHLCExKSl9Y2F0Y2gob3Qpe1coe2RvbmU6ITF9LG90LEcpfX19O2lmKGomJihPPShrPWZ1bmN0aW9uKEcpe18odGhpcyxPKSxwKEcpLG4oYix0''@;'; put 'put ''aGlzKTt2YXIgZXQ9Zyh0aGlzKTt0cnl7Ryh0dChRLGV0KSx0dChXLGV0KSl9Y2F0Y2gobnQpe1coZXQsbnQpfX0pLnByb3RvdHlwZSwoYj1mdW5jdGlvbihHKXt5KHRoaXMse3R5cGU6IlByb21pc2UiLGRvbmU6ITEsbm90aWZpZWQ6ITEscGFyZW50OiExLHJlYWN0aW9uczpuZXcgQixyZWpl''@;'; put 'put ''Y3Rpb246ITEsc3RhdGU6MCx2YWx1ZTp2b2lkIDB9KX0pLnByb3RvdHlwZT1pKE8sInRoZW4iLGZ1bmN0aW9uKEcsZXQpe3ZhciBudD1nKHRoaXMpLGl0PVIoQSh0aGlzLGspKTtyZXR1cm4gbnQucGFyZW50PSEwLGl0Lm9rPSFkKEcpfHxHLGl0LmZhaWw9ZChldCkmJmV0LGl0LmRvbWFpbj1l''@;'; put 'put ''P1YuZG9tYWluOnZvaWQgMCwwPT09bnQuc3RhdGU/bnQucmVhY3Rpb25zLmFkZChpdCk6TChmdW5jdGlvbigpe0YoaXQsbnQpfSksaXQucHJvbWlzZX0pLGE9ZnVuY3Rpb24oKXt2YXIgRz1uZXcgYixldD1nKEcpO3RoaXMucHJvbWlzZT1HLHRoaXMucmVzb2x2ZT10dChRLGV0KSx0aGlzLnJl''@;'; put 'put ''amVjdD10dChXLGV0KX0sTS5mPVI9ZnVuY3Rpb24oRyl7cmV0dXJuIEc9PT1rfHx2b2lkIDA9PT1HP25ldyBhKEcpOkgoRyl9LCF0JiZkKEQpJiZ3IT09T2JqZWN0LnByb3RvdHlwZSkpe289dy50aGVuLG18fGkodywidGhlbiIsZnVuY3Rpb24oRyxldCl7dmFyIG50PXRoaXM7cmV0dXJuIG5l''@;'; put 'put ''dyBrKGZ1bmN0aW9uKGl0LG90KXtuKG8sbnQsaXQsb3QpfSkudGhlbihHLGV0KX0se3Vuc2FmZTohMH0pO3RyeXtkZWxldGUgdy5jb25zdHJ1Y3Rvcn1jYXRjaHt9aCYmaCh3LE8pfXIoe2dsb2JhbDohMCxjb25zdHJ1Y3RvcjohMCx3cmFwOiEwLGZvcmNlZDpqfSx7UHJvbWlzZTprfSksZihr''@;'; put 'put ''LCJQcm9taXNlIiwhMSwhMCksdSgiUHJvbWlzZSIpfSx7Ii4uL2ludGVybmFscy9hLWNhbGxhYmxlIjoyMjIsIi4uL2ludGVybmFscy9hbi1pbnN0YW5jZSI6MjI2LCIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluIjoyNDUsIi4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZSI6MjU0LCIu''@;'; put 'put ''Li9pbnRlcm5hbHMvZXhwb3J0IjoyNTksIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsIjoyNjQsIi4uL2ludGVybmFscy9nbG9iYWwiOjI3NCwiLi4vaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycyI6Mjc3LCIuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUiOjI4MiwiLi4vaW50ZXJu''@;'; put 'put ''YWxzL2lzLWNhbGxhYmxlIjoyODUsIi4uL2ludGVybmFscy9pcy1vYmplY3QiOjI4OSwiLi4vaW50ZXJuYWxzL2lzLXB1cmUiOjI5MCwiLi4vaW50ZXJuYWxzL21pY3JvdGFzayI6MzAyLCIuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eSI6MzAzLCIuLi9pbnRlcm5hbHMvb2Jq''@;'; put 'put ''ZWN0LXNldC1wcm90b3R5cGUtb2YiOjMxOCwiLi4vaW50ZXJuYWxzL3BlcmZvcm0iOjMyMywiLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uIjozMjQsIi4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvciI6MzI1LCIuLi9pbnRlcm5hbHMvcXVl''@;'; put 'put ''dWUiOjMyOCwiLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzIjozMzAsIi4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZyI6MzMxLCIuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvciI6MzM1LCIuLi9pbnRlcm5hbHMvdGFzayI6MzM5fV0sMzcxOltmdW5jdGlvbihzLEUsUyl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9leHBvcnQiKSxhPXMoIi4uL2ludGVybmFscy9pcy1wdXJlIiksbz1zKCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IiKSxyPXMoIi4uL2ludGVybmFscy9mYWlscyIpLHQ9cygiLi4vaW50ZXJuYWxzL2dldC1i''@;'; put 'put ''dWlsdC1pbiIpLGU9cygiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIiksbD1zKCIuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvciIpLG49cygiLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZSIpLGk9cygiLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbiIpLGg9byYmby5wcm90''@;'; put 'put ''b3R5cGU7aWYoYih7dGFyZ2V0OiJQcm9taXNlIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohIW8mJnIoZnVuY3Rpb24oKXtoLmZpbmFsbHkuY2FsbCh7dGhlbjpmdW5jdGlvbigpe319LGZ1bmN0aW9uKCl7fSl9KX0se2ZpbmFsbHk6ZnVuY3Rpb24odSl7dmFyIHA9bCh0aGlzLHQoIlByb21p''@;'; put 'put ''c2UiKSksZD1lKHUpO3JldHVybiB0aGlzLnRoZW4oZD9mdW5jdGlvbih2KXtyZXR1cm4gbihwLHUoKSkudGhlbihmdW5jdGlvbigpe3JldHVybiB2fSl9OnUsZD9mdW5jdGlvbih2KXtyZXR1cm4gbihwLHUoKSkudGhlbihmdW5jdGlvbigpe3Rocm93IHZ9KX06dSl9fSksIWEmJmUobykpe3Zh''@;'; put 'put ''ciBmPXQoIlByb21pc2UiKS5wcm90b3R5cGUuZmluYWxseTtoLmZpbmFsbHkhPT1mJiZpKGgsImZpbmFsbHkiLGYse3Vuc2FmZTohMH0pfX0seyIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluIjoyNDUsIi4uL2ludGVybmFscy9leHBvcnQiOjI1OSwiLi4vaW50ZXJuYWxzL2ZhaWxzIjoy''@;'; put 'put ''NjAsIi4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4iOjI2OSwiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIjoyODUsIi4uL2ludGVybmFscy9pcy1wdXJlIjoyOTAsIi4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvciI6MzI1LCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNv''@;'; put 'put ''bHZlIjozMjYsIi4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yIjozMzV9XSwzNzI6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7cygiLi4vbW9kdWxlcy9lcy5wcm9taXNlLmNvbnN0cnVjdG9yIikscygiLi4vbW9kdWxlcy9lcy5wcm9taXNlLmFsbCIpLHMoIi4uL21vZHVs''@;'; put 'put ''ZXMvZXMucHJvbWlzZS5jYXRjaCIpLHMoIi4uL21vZHVsZXMvZXMucHJvbWlzZS5yYWNlIikscygiLi4vbW9kdWxlcy9lcy5wcm9taXNlLnJlamVjdCIpLHMoIi4uL21vZHVsZXMvZXMucHJvbWlzZS5yZXNvbHZlIil9LHsiLi4vbW9kdWxlcy9lcy5wcm9taXNlLmFsbCI6MzY4LCIuLi9tb2R1''@;'; put 'put ''bGVzL2VzLnByb21pc2UuY2F0Y2giOjM2OSwiLi4vbW9kdWxlcy9lcy5wcm9taXNlLmNvbnN0cnVjdG9yIjozNzAsIi4uL21vZHVsZXMvZXMucHJvbWlzZS5yYWNlIjozNzMsIi4uL21vZHVsZXMvZXMucHJvbWlzZS5yZWplY3QiOjM3NCwiLi4vbW9kdWxlcy9lcy5wcm9taXNlLnJlc29sdmUi''@;'; put 'put ''OjM3NX1dLDM3MzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZXhwb3J0IiksYT1zKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCIpLG89cygiLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUiKSxyPXMoIi4uL2ludGVybmFscy9uZXctcHJvbWlz''@;'; put 'put ''ZS1jYXBhYmlsaXR5IiksdD1zKCIuLi9pbnRlcm5hbHMvcGVyZm9ybSIpLGU9cygiLi4vaW50ZXJuYWxzL2l0ZXJhdGUiKTtiKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITAsZm9yY2VkOnMoIi4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbiIpfSx7cmFj''@;'; put 'put ''ZTpmdW5jdGlvbihsKXt2YXIgbj10aGlzLGk9ci5mKG4pLGg9aS5yZWplY3QsZj10KGZ1bmN0aW9uKCl7dmFyIHU9byhuLnJlc29sdmUpO2UobCxmdW5jdGlvbihwKXthKHUsbixwKS50aGVuKGkucmVzb2x2ZSxoKX0pfSk7cmV0dXJuIGYuZXJyb3ImJmgoZi52YWx1ZSksaS5wcm9taXNlfX0p''@;'; put 'put ''fSx7Ii4uL2ludGVybmFscy9hLWNhbGxhYmxlIjoyMjIsIi4uL2ludGVybmFscy9leHBvcnQiOjI1OSwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwiOjI2NCwiLi4vaW50ZXJuYWxzL2l0ZXJhdGUiOjI5MywiLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkiOjMwMywiLi4v''@;'; put 'put ''aW50ZXJuYWxzL3BlcmZvcm0iOjMyMywiLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uIjozMjd9XSwzNzQ6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2V4cG9ydCIpLGE9cygiLi4vaW50ZXJuYWxzL2Z1''@;'; put 'put ''bmN0aW9uLWNhbGwiKSxvPXMoIi4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Iik7Yih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwLGZvcmNlZDpzKCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24iKS5DT05TVFJVQ1RPUn0se3JlamVjdDpmdW5j''@;'; put 'put ''dGlvbihyKXt2YXIgdD1vLmYodGhpcyk7cmV0dXJuIGEodC5yZWplY3Qsdm9pZCAwLHIpLHQucHJvbWlzZX19KX0seyIuLi9pbnRlcm5hbHMvZXhwb3J0IjoyNTksIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsIjoyNjQsIi4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Ijoz''@;'; put 'put ''MDMsIi4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbiI6MzI0fV0sMzc1OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9leHBvcnQiKSxhPXMoIi4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4iKSxvPXMoIi4uL2ludGVy''@;'; put 'put ''bmFscy9pcy1wdXJlIikscj1zKCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IiKSx0PXMoIi4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbiIpLkNPTlNUUlVDVE9SLGU9cygiLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZSIpLGw9YSgi''@;'; put 'put ''UHJvbWlzZSIpLG49byYmIXQ7Yih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwLGZvcmNlZDpvfHx0fSx7cmVzb2x2ZTpmdW5jdGlvbihpKXtyZXR1cm4gZShuJiZ0aGlzPT09bD9yOnRoaXMsaSl9fSl9LHsiLi4vaW50ZXJuYWxzL2V4cG9ydCI6MjU5LCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0''@;'; put 'put ''LWluIjoyNjksIi4uL2ludGVybmFscy9pcy1wdXJlIjoyOTAsIi4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbiI6MzI0LCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IiOjMyNSwiLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZSI6MzI2''@;'; put 'put ''fV0sMzc2OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9leHBvcnQiKSxhPXMoIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiKSxvPXMoIi4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCIpLHI9UmFuZ2VFcnJvcix0PVN0''@;'; put 'put ''cmluZy5mcm9tQ2hhckNvZGUsZT1TdHJpbmcuZnJvbUNvZGVQb2ludCxsPWEoW10uam9pbik7Yih7dGFyZ2V0OiJTdHJpbmciLHN0YXQ6ITAsYXJpdHk6MSxmb3JjZWQ6ISFlJiYxIT09ZS5sZW5ndGh9LHtmcm9tQ29kZVBvaW50OmZ1bmN0aW9uKG4pe2Zvcih2YXIgaSxoPVtdLGY9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aCx1PTA7Zj51Oyl7aWYoaT0rYXJndW1lbnRzW3UrK10sbyhpLDExMTQxMTEpIT09aSl0aHJvdyBuZXcgcihpKyIgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludCIpO2hbdV09aTw2NTUzNj90KGkpOnQoNTUyOTYrKChpLT02NTUzNik+PjEwKSxpJTEwMjQrNTYzMjApfXJldHVy''@;'; put 'put ''biBsKGgsIiIpfX0pfSx7Ii4uL2ludGVybmFscy9leHBvcnQiOjI1OSwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyI6MjY4LCIuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgiOjM0MH1dLDM3NzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIu''@;'; put 'put ''Li9pbnRlcm5hbHMvZXhwb3J0IiksYT1zKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIiksbz1zKCIuLi9pbnRlcm5hbHMvbm90LWEtcmVnZXhwIikscj1zKCIuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlIiksdD1zKCIuLi9pbnRlcm5hbHMvdG8tc3Ry''@;'; put 'put ''aW5nIiksZT1zKCIuLi9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMiKSxsPWEoIiIuaW5kZXhPZik7Yih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDohZSgiaW5jbHVkZXMiKX0se2luY2x1ZGVzOmZ1bmN0aW9uKG4pe3JldHVybiEhfmwodChyKHRoaXMpKSx0KG8o''@;'; put 'put ''bikpLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0seyIuLi9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMiOjIzOCwiLi4vaW50ZXJuYWxzL2V4cG9ydCI6MjU5LCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIjoyNjgsIi4uL2lu''@;'; put 'put ''dGVybmFscy9ub3QtYS1yZWdleHAiOjMwNCwiLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZSI6MzI5LCIuLi9pbnRlcm5hbHMvdG8tc3RyaW5nIjozNDh9XSwzNzg6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7cygiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3lt''@;'; put 'put ''Ym9sLWRlZmluZSIpKCJhc3luY0l0ZXJhdG9yIil9LHsiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZSI6MzU1fV0sMzc5OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL2ludGVybmFscy9leHBvcnQiKSxhPXMoIi4uL2ludGVybmFscy9nbG9i''@;'; put 'put ''YWwiKSxvPXMoIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsIikscj1zKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIiksdD1zKCIuLi9pbnRlcm5hbHMvaXMtcHVyZSIpLGU9cygiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzIiksbD1zKCIuLi9pbnRlcm5hbHMvc3ltYm9s''@;'; put 'put ''LWNvbnN0cnVjdG9yLWRldGVjdGlvbiIpLG49cygiLi4vaW50ZXJuYWxzL2ZhaWxzIiksaT1zKCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSIpLGg9cygiLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YiKSxmPXMoIi4uL2ludGVybmFscy9hbi1vYmplY3QiKSx1PXMo''@;'; put 'put ''Ii4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCIpLHA9cygiLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleSIpLGQ9cygiLi4vaW50ZXJuYWxzL3RvLXN0cmluZyIpLHY9cygiLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yIiksXz1zKCIuLi9pbnRlcm5hbHMv''@;'; put 'put ''b2JqZWN0LWNyZWF0ZSIpLEE9cygiLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzIiksST1zKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMiKSxMPXMoIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCIpLE49cygiLi4v''@;'; put 'put ''aW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMiKSxQPXMoIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yIiksQj1zKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eSIpLCQ9cygiLi4vaW50ZXJuYWxzL29iamVj''@;'; put 'put ''dC1kZWZpbmUtcHJvcGVydGllcyIpLEQ9cygiLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlIikseD1zKCIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluIiksTT1zKCIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yIiksaj1zKCIuLi9pbnRl''@;'; put 'put ''cm5hbHMvc2hhcmVkIiksYz1zKCIuLi9pbnRlcm5hbHMvc2hhcmVkLWtleSIpLG09cygiLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzIiksZz1zKCIuLi9pbnRlcm5hbHMvdWlkIikseT1zKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiKSx3PXMoIi4uL2ludGVybmFscy93ZWxsLWtu''@;'; put 'put ''b3duLXN5bWJvbC13cmFwcGVkIiksaz1zKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lIiksTz1zKCIuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUiKSx6PXMoIi4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZyIpLFU9cygiLi4vaW50ZXJu''@;'; put 'put ''YWxzL2ludGVybmFsLXN0YXRlIiksVj1zKCIuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uIikuZm9yRWFjaCxSPWMoImhpZGRlbiIpLEg9VS5zZXQsVD1VLmdldHRlckZvcigiU3ltYm9sIiksQz1PYmplY3QucHJvdG90eXBlLEY9YS5TeW1ib2wscT1GJiZGLnByb3RvdHlwZSxZPWEuUmFu''@;'; put 'put ''Z2VFcnJvcixYPWEuVHlwZUVycm9yLEs9YS5RT2JqZWN0LHJ0PVAuZix0dD1CLmYsVz1MLmYsUT1ELmYsRz1yKFtdLnB1c2gpLGV0PWooInN5bWJvbHMiKSxudD1qKCJvcC1zeW1ib2xzIiksaXQ9aigid2tzIiksb3Q9IUt8fCFLLnByb3RvdHlwZXx8IUsucHJvdG90eXBlLmZpbmRDaGlsZCxo''@;'; put 'put ''dD1mdW5jdGlvbihBdCxndCxtdCl7dmFyIFZ0PXJ0KEMsZ3QpO1Z0JiZkZWxldGUgQ1tndF0sdHQoQXQsZ3QsbXQpLFZ0JiZBdCE9PUMmJnR0KEMsZ3QsVnQpfSxmdD1lJiZuKGZ1bmN0aW9uKCl7cmV0dXJuIDchPT1fKHR0KHt9LCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHR0KHRoaXMs''@;'; put 'put ''ImEiLHt2YWx1ZTo3fSkuYX19KSkuYX0pP2h0OnR0LHB0PWZ1bmN0aW9uKEF0LGd0KXt2YXIgbXQ9ZXRbQXRdPV8ocSk7cmV0dXJuIEgobXQse3R5cGU6IlN5bWJvbCIsdGFnOkF0LGRlc2NyaXB0aW9uOmd0fSksZXx8KG10LmRlc2NyaXB0aW9uPWd0KSxtdH0sVHQ9ZnVuY3Rpb24oQXQsZ3Qs''@;'; put 'put ''bXQpe0F0PT09QyYmVHQobnQsZ3QsbXQpLGYoQXQpO3ZhciBWdD1wKGd0KTtyZXR1cm4gZihtdCksaShldCxWdCk/KG10LmVudW1lcmFibGU/KGkoQXQsUikmJkF0W1JdW1Z0XSYmKEF0W1JdW1Z0XT0hMSksbXQ9XyhtdCx7ZW51bWVyYWJsZTp2KDAsITEpfSkpOihpKEF0LFIpfHx0dChBdCxS''@;'; put 'put ''LHYoMSx7fSkpLEF0W1JdW1Z0XT0hMCksZnQoQXQsVnQsbXQpKTp0dChBdCxWdCxtdCl9LHl0PWZ1bmN0aW9uKEF0LGd0KXtmKEF0KTt2YXIgbXQ9dShndCksVnQ9QShtdCkuY29uY2F0KF90KG10KSk7cmV0dXJuIFYoVnQsZnVuY3Rpb24oU3Qpe2UmJiFvKHd0LG10LFN0KXx8VHQoQXQsU3Qs''@;'; put 'put ''bXRbU3RdKX0pLEF0fSx3dD1mdW5jdGlvbihBdCl7dmFyIGd0PXAoQXQpLG10PW8oUSx0aGlzLGd0KTtyZXR1cm4hKHRoaXM9PT1DJiZpKGV0LGd0KSYmIWkobnQsZ3QpKSYmKCEobXR8fCFpKHRoaXMsZ3QpfHwhaShldCxndCl8fGkodGhpcyxSKSYmdGhpc1tSXVtndF0pfHxtdCl9LHF0PWZ1''@;'; put 'put ''bmN0aW9uKEF0LGd0KXt2YXIgbXQ9dShBdCksVnQ9cChndCk7aWYobXQhPT1DfHwhaShldCxWdCl8fGkobnQsVnQpKXt2YXIgU3Q9cnQobXQsVnQpO3JldHVybiFTdHx8IWkoZXQsVnQpfHxpKG10LFIpJiZtdFtSXVtWdF18fChTdC5lbnVtZXJhYmxlPSEwKSxTdH19LEV0PWZ1bmN0aW9uKEF0''@;'; put 'put ''KXt2YXIgZ3Q9Vyh1KEF0KSksbXQ9W107cmV0dXJuIFYoZ3QsZnVuY3Rpb24oVnQpe2koZXQsVnQpfHxpKG0sVnQpfHxHKG10LFZ0KX0pLG10fSxfdD1mdW5jdGlvbihBdCl7dmFyIGd0PUF0PT09QyxtdD1XKGd0P250OnUoQXQpKSxWdD1bXTtyZXR1cm4gVihtdCxmdW5jdGlvbihTdCl7IWko''@;'; put 'put ''ZXQsU3QpfHxndCYmIWkoQyxTdCl8fEcoVnQsZXRbU3RdKX0pLFZ0fTtsfHwoeChxPShGPWZ1bmN0aW9uKCl7aWYoaChxLHRoaXMpKXRocm93IG5ldyBYKCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IiKTt2YXIgQXQ9YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBd''@;'; put 'put ''P2QoYXJndW1lbnRzWzBdKTp2b2lkIDAsZ3Q9ZyhBdCksbXQ9ZnVuY3Rpb24oVnQpe3RoaXM9PT1DJiZvKG10LG50LFZ0KSxpKHRoaXMsUikmJmkodGhpc1tSXSxndCkmJih0aGlzW1JdW2d0XT0hMSk7dmFyIFN0PXYoMSxWdCk7dHJ5e2Z0KHRoaXMsZ3QsU3QpfWNhdGNoKE90KXtpZighKE90''@;'; put 'put ''IGluc3RhbmNlb2YgWSkpdGhyb3cgT3Q7aHQodGhpcyxndCxTdCl9fTtyZXR1cm4gZSYmb3QmJmZ0KEMsZ3Qse2NvbmZpZ3VyYWJsZTohMCxzZXQ6bXR9KSxwdChndCxBdCl9KS5wcm90b3R5cGUsInRvU3RyaW5nIixmdW5jdGlvbigpe3JldHVybiBUKHRoaXMpLnRhZ30pLHgoRiwid2l0aG91''@;'; put 'put ''dFNldHRlciIsZnVuY3Rpb24oQXQpe3JldHVybiBwdChnKEF0KSxBdCl9KSxELmY9d3QsQi5mPVR0LCQuZj15dCxQLmY9cXQsSS5mPUwuZj1FdCxOLmY9X3Qsdy5mPWZ1bmN0aW9uKEF0KXtyZXR1cm4gcHQoeShBdCksQXQpfSxlJiYoTShxLCJkZXNjcmlwdGlvbiIse2NvbmZpZ3VyYWJsZToh''@;'; put 'put ''MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVCh0aGlzKS5kZXNjcmlwdGlvbn19KSx0fHx4KEMsInByb3BlcnR5SXNFbnVtZXJhYmxlIix3dCx7dW5zYWZlOiEwfSkpKSxiKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsd3JhcDohMCxmb3JjZWQ6IWwsc2hhbTohbH0se1N5bWJvbDpGfSksVihB''@;'; put 'put ''KGl0KSxmdW5jdGlvbihBdCl7ayhBdCl9KSxiKHt0YXJnZXQ6IlN5bWJvbCIsc3RhdDohMCxmb3JjZWQ6IWx9LHt1c2VTZXR0ZXI6ZnVuY3Rpb24oKXtvdD0hMH0sdXNlU2ltcGxlOmZ1bmN0aW9uKCl7b3Q9ITF9fSksYih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFsLHNoYW06''@;'; put 'put ''IWV9LHtjcmVhdGU6ZnVuY3Rpb24oQXQsZ3Qpe3JldHVybiB2b2lkIDA9PT1ndD9fKEF0KTp5dChfKEF0KSxndCl9LGRlZmluZVByb3BlcnR5OlR0LGRlZmluZVByb3BlcnRpZXM6eXQsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOnF0fSksYih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9y''@;'; put 'put ''Y2VkOiFsfSx7Z2V0T3duUHJvcGVydHlOYW1lczpFdH0pLE8oKSx6KEYsIlN5bWJvbCIpLG1bUl09ITB9LHsiLi4vaW50ZXJuYWxzL2FuLW9iamVjdCI6MjI3LCIuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uIjoyMjksIi4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRv''@;'; put 'put ''ciI6MjQyLCIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluIjoyNDUsIi4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3IiOjI0NCwiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzIjoyNDcsIi4uL2ludGVybmFscy9leHBvcnQiOjI1OSwiLi4vaW50ZXJuYWxzL2ZhaWxzIjoy''@;'; put 'put ''NjAsIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsIjoyNjQsIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiOjI2OCwiLi4vaW50ZXJuYWxzL2dsb2JhbCI6Mjc0LCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSI6Mjc1LCIuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMi''@;'; put 'put ''OjI3NiwiLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlIjoyODIsIi4uL2ludGVybmFscy9pcy1wdXJlIjoyOTAsIi4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlIjozMDYsIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMiOjMwNywiLi4vaW50ZXJuYWxzL29iamVjdC1k''@;'; put 'put ''ZWZpbmUtcHJvcGVydHkiOjMwOCwiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IiOjMwOSwiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzIjozMTEsIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1l''@;'; put 'put ''cy1leHRlcm5hbCI6MzEwLCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scyI6MzEyLCIuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZiI6MzE0LCIuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMiOjMxNiwiLi4vaW50ZXJuYWxzL29iamVjdC1wcm9w''@;'; put 'put ''ZXJ0eS1pcy1lbnVtZXJhYmxlIjozMTcsIi4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZyI6MzMxLCIuLi9pbnRlcm5hbHMvc2hhcmVkIjozMzQsIi4uL2ludGVybmFscy9zaGFyZWQta2V5IjozMzIsIi4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uIjozMzYs''@;'; put 'put ''Ii4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZSI6MzM3LCIuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QiOjM0MSwiLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleSI6MzQ2LCIuLi9pbnRlcm5hbHMvdG8tc3RyaW5nIjozNDgsIi4uL2ludGVybmFscy91aWQi''@;'; put 'put ''OjM1MCwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sIjozNTcsIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUiOjM1NSwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQiOjM1Nn1dLDM4MDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgYj1zKCIuLi9pbnRlcm5hbHMvZXhwb3J0IiksYT1zKCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluIiksbz1zKCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSIpLHI9cygiLi4vaW50ZXJuYWxzL3RvLXN0cmluZyIpLHQ9cygiLi4vaW50ZXJuYWxzL3NoYXJlZCIpLGU9cygi''@;'; put 'put ''Li4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24iKSxsPXQoInN0cmluZy10by1zeW1ib2wtcmVnaXN0cnkiKSxuPXQoInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnkiKTtiKHt0YXJnZXQ6IlN5bWJvbCIsc3RhdDohMCxmb3JjZWQ6IWV9LHtmb3I6ZnVuY3Rpb24oaSl7dmFy''@;'; put 'put ''IGg9cihpKTtpZihvKGwsaCkpcmV0dXJuIGxbaF07dmFyIGY9YSgiU3ltYm9sIikoaCk7cmV0dXJuIGxbaF09ZixuW2ZdPWgsZn19KX0seyIuLi9pbnRlcm5hbHMvZXhwb3J0IjoyNTksIi4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4iOjI2OSwiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVy''@;'; put 'put ''dHkiOjI3NSwiLi4vaW50ZXJuYWxzL3NoYXJlZCI6MzM0LCIuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbiI6MzM4LCIuLi9pbnRlcm5hbHMvdG8tc3RyaW5nIjozNDh9XSwzODE6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7cygiLi4vbW9kdWxlcy9lcy5zeW1i''@;'; put 'put ''b2wuY29uc3RydWN0b3IiKSxzKCIuLi9tb2R1bGVzL2VzLnN5bWJvbC5mb3IiKSxzKCIuLi9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yIikscygiLi4vbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeSIpLHMoIi4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktc3ltYm9scyIp''@;'; put 'put ''fSx7Ii4uL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnkiOjM2MiwiLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzIjozNjUsIi4uL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yIjozNzksIi4uL21vZHVsZXMvZXMuc3ltYm9sLmZvciI6MzgwLCIuLi9t''@;'; put 'put ''b2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yIjozODJ9XSwzODI6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vaW50ZXJuYWxzL2V4cG9ydCIpLGE9cygiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkiKSxvPXMoIi4uL2ludGVybmFscy9pcy1zeW1ib2wiKSxy''@;'; put 'put ''PXMoIi4uL2ludGVybmFscy90cnktdG8tc3RyaW5nIiksdD1zKCIuLi9pbnRlcm5hbHMvc2hhcmVkIiksZT1zKCIuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbiIpLGw9dCgic3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeSIpO2Ioe3RhcmdldDoiU3ltYm9sIixzdGF0OiEw''@;'; put 'put ''LGZvcmNlZDohZX0se2tleUZvcjpmdW5jdGlvbihuKXtpZighbyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKHIobikrIiBpcyBub3QgYSBzeW1ib2wiKTtpZihhKGwsbikpcmV0dXJuIGxbbl19fSl9LHsiLi4vaW50ZXJuYWxzL2V4cG9ydCI6MjU5LCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9w''@;'; put 'put ''ZXJ0eSI6Mjc1LCIuLi9pbnRlcm5hbHMvaXMtc3ltYm9sIjoyOTIsIi4uL2ludGVybmFscy9zaGFyZWQiOjMzNCwiLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24iOjMzOCwiLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmciOjM0OX1dLDM4MzpbZnVuY3Rpb24ocyxFLFMp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGEpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSl9Uy5pc0FycmF5PWZ1bmN0aW9uKGEpe3JldHVybiBBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkoYSk6IltvYmplY3QgQXJyYXldIj09PWIoYSl9LFMuaXNCb29sZWFu''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGF9LFMuaXNOdWxsPWZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT09YX0sUy5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YX0sUy5pc051bWJlcj1mdW5jdGlvbihhKXtyZXR1cm4ibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIGF9LFMuaXNTdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhfSxTLmlzU3ltYm9sPWZ1bmN0aW9uKGEpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgYX0sUy5pc1VuZGVmaW5lZD1mdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YX0sUy5pc1JlZ0V4cD1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PWIoYSl9LFMuaXNPYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBhJiZudWxsIT09YX0sUy5pc0RhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIltvYmplY3QgRGF0ZV0iPT09YihhKX0sUy5pc0Vycm9yPWZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiJbb2JqZWN0IEVycm9yXSI9PT1iKGEpfHxhIGluc3RhbmNlb2YgRXJyb3J9LFMuaXNGdW5jdGlvbj1mdW5jdGlvbihhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYX0sUy5pc1ByaW1pdGl2ZT1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09PWF8fCJib29sZWFu''@;'; put 'put ''Ij09dHlwZW9mIGF8fCJudW1iZXIiPT10eXBlb2YgYXx8InN0cmluZyI9PXR5cGVvZiBhfHwic3ltYm9sIj09dHlwZW9mIGF8fHZvaWQgMD09PWF9LFMuaXNCdWZmZXI9cygiYnVmZmVyIikuQnVmZmVyLmlzQnVmZmVyfSx7YnVmZmVyOjIyMH1dLDM4NDpbZnVuY3Rpb24ocyxFLFMpeyhmdW5j''@;'; put 'put ''dGlvbihiKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGE9cygiZWxsaXB0aWMiKSxvPXMoImJuLmpzIik7RS5leHBvcnRzPWZ1bmN0aW9uKGwpe3JldHVybiBuZXcgdChsKX07dmFyIHI9e3NlY3AyNTZrMTp7bmFtZToic2VjcDI1NmsxIixieXRlTGVuZ3RoOjMyfSxzZWNwMjI0cjE6''@;'; put 'put ''e25hbWU6InAyMjQiLGJ5dGVMZW5ndGg6Mjh9LHByaW1lMjU2djE6e25hbWU6InAyNTYiLGJ5dGVMZW5ndGg6MzJ9LHByaW1lMTkydjE6e25hbWU6InAxOTIiLGJ5dGVMZW5ndGg6MjR9LGVkMjU1MTk6e25hbWU6ImVkMjU1MTkiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AzODRyMTp7bmFtZToicDM4''@;'; put 'put ''NCIsYnl0ZUxlbmd0aDo0OH0sc2VjcDUyMXIxOntuYW1lOiJwNTIxIixieXRlTGVuZ3RoOjY2fX07ZnVuY3Rpb24gdChsKXt0aGlzLmN1cnZlVHlwZT1yW2xdLHRoaXMuY3VydmVUeXBlfHwodGhpcy5jdXJ2ZVR5cGU9e25hbWU6bH0pLHRoaXMuY3VydmU9bmV3IGEuZWModGhpcy5jdXJ2ZVR5''@;'; put 'put ''cGUubmFtZSksdGhpcy5rZXlzPXZvaWQgMH1mdW5jdGlvbiBlKGwsbixpKXtBcnJheS5pc0FycmF5KGwpfHwobD1sLnRvQXJyYXkoKSk7dmFyIGg9bmV3IGIobCk7aWYoaSYmaC5sZW5ndGg8aSl7dmFyIGY9bmV3IGIoaS1oLmxlbmd0aCk7Zi5maWxsKDApLGg9Yi5jb25jYXQoW2YsaF0pfXJl''@;'; put 'put ''dHVybiBuP2gudG9TdHJpbmcobik6aH1yLnAyMjQ9ci5zZWNwMjI0cjEsci5wMjU2PXIuc2VjcDI1NnIxPXIucHJpbWUyNTZ2MSxyLnAxOTI9ci5zZWNwMTkycjE9ci5wcmltZTE5MnYxLHIucDM4ND1yLnNlY3AzODRyMSxyLnA1MjE9ci5zZWNwNTIxcjEsdC5wcm90b3R5cGUuZ2VuZXJhdGVL''@;'; put 'put ''ZXlzPWZ1bmN0aW9uKGwsbil7cmV0dXJuIHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmdldFB1YmxpY0tleShsLG4pfSx0LnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKGwsbixpKXtyZXR1cm4gbj1ufHwidXRmOCIsYi5pc0J1ZmZlcihsKXx8KGw9bmV3''@;'; put 'put ''IGIobCxuKSksZSh0aGlzLmN1cnZlLmtleUZyb21QdWJsaWMobCkuZ2V0UHVibGljKCkubXVsKHRoaXMua2V5cy5nZXRQcml2YXRlKCkpLmdldFgoKSxpLHRoaXMuY3VydmVUeXBlLmJ5dGVMZW5ndGgpfSx0LnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24obCxuKXt2YXIgaT10aGlz''@;'; put 'put ''LmtleXMuZ2V0UHVibGljKCJjb21wcmVzc2VkIj09PW4sITApO3JldHVybiJoeWJyaWQiPT09biYmKGlbMF09aVtpLmxlbmd0aC0xXSUyPzc6NiksZShpLGwpfSx0LnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKGwpe3JldHVybiBlKHRoaXMua2V5cy5nZXRQcml2YXRlKCksbCl9''@;'; put 'put ''LHQucHJvdG90eXBlLnNldFB1YmxpY0tleT1mdW5jdGlvbihsLG4pe3JldHVybiBuPW58fCJ1dGY4IixiLmlzQnVmZmVyKGwpfHwobD1uZXcgYihsLG4pKSx0aGlzLmtleXMuX2ltcG9ydFB1YmxpYyhsKSx0aGlzfSx0LnByb3RvdHlwZS5zZXRQcml2YXRlS2V5PWZ1bmN0aW9uKGwsbil7bj1u''@;'; put 'put ''fHwidXRmOCIsYi5pc0J1ZmZlcihsKXx8KGw9bmV3IGIobCxuKSk7dmFyIGk9bmV3IG8obCk7cmV0dXJuIGk9aS50b1N0cmluZygxNiksdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigpLHRoaXMua2V5cy5faW1wb3J0UHJpdmF0ZShpKSx0aGlzfX0pLmNhbGwodGhpcyl9KS5jYWxs''@;'; put 'put ''KHRoaXMscygiYnVmZmVyIikuQnVmZmVyKX0seyJibi5qcyI6Mzg1LGJ1ZmZlcjoyMjAsZWxsaXB0aWM6NDA1fV0sMzg1OltmdW5jdGlvbihzLEUsUyl7YXJndW1lbnRzWzRdWzE4NF1bMF0uYXBwbHkoUyxhcmd1bWVudHMpfSx7YnVmZmVyOjE4OCxkdXA6MTg0fV0sMzg2OltmdW5jdGlvbihz''@;'; put 'put ''LEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoImluaGVyaXRzIiksYT1zKCJtZDUuanMiKSxvPXMoInJpcGVtZDE2MCIpLHI9cygic2hhLmpzIiksdD1zKCJjaXBoZXItYmFzZSIpO2Z1bmN0aW9uIGUobCl7dC5jYWxsKHRoaXMsImRpZ2VzdCIpLHRoaXMuX2hhc2g9bH1iKGUsdCksZS5wcm90''@;'; put 'put ''b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihsKXt0aGlzLl9oYXNoLnVwZGF0ZShsKX0sZS5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc2guZGlnZXN0KCl9LEUuZXhwb3J0cz1mdW5jdGlvbihsKXtyZXR1cm4ibWQ1Ij09PShsPWwudG9Mb3dlckNhc2UoKSk/bmV3''@;'; put 'put ''IGE6InJtZDE2MCI9PT1sfHwicmlwZW1kMTYwIj09PWw/bmV3IG86bmV3IGUocihsKSl9fSx7ImNpcGhlci1iYXNlIjoyMjEsaW5oZXJpdHM6NDQwLCJtZDUuanMiOjQ1MCxyaXBlbWQxNjA6NDkzLCJzaGEuanMiOjQ5OH1dLDM4NzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''Yj1zKCJtZDUuanMiKTtFLmV4cG9ydHM9ZnVuY3Rpb24oYSl7cmV0dXJuKG5ldyBiKS51cGRhdGUoYSkuZGlnZXN0KCl9fSx7Im1kNS5qcyI6NDUwfV0sMzg4OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoImluaGVyaXRzIiksYT1zKCIuL2xlZ2FjeSIpLG89cygiY2lw''@;'; put 'put ''aGVyLWJhc2UiKSxyPXMoInNhZmUtYnVmZmVyIikuQnVmZmVyLHQ9cygiY3JlYXRlLWhhc2gvbWQ1IiksZT1zKCJyaXBlbWQxNjAiKSxsPXMoInNoYS5qcyIpLG49ci5hbGxvYygxMjgpO2Z1bmN0aW9uIGkoaCxmKXtvLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBmJiYo''@;'; put 'put ''Zj1yLmZyb20oZikpO3ZhciB1PSJzaGE1MTIiPT09aHx8InNoYTM4NCI9PT1oPzEyODo2NDt0aGlzLl9hbGc9aCx0aGlzLl9rZXk9ZixmLmxlbmd0aD51P2Y9KCJybWQxNjAiPT09aD9uZXcgZTpsKGgpKS51cGRhdGUoZikuZGlnZXN0KCk6Zi5sZW5ndGg8dSYmKGY9ci5jb25jYXQoW2Ysbl0s''@;'; put 'put ''dSkpO2Zvcih2YXIgcD10aGlzLl9pcGFkPXIuYWxsb2NVbnNhZmUodSksZD10aGlzLl9vcGFkPXIuYWxsb2NVbnNhZmUodSksdj0wO3Y8dTt2KyspcFt2XT01NF5mW3ZdLGRbdl09OTJeZlt2XTt0aGlzLl9oYXNoPSJybWQxNjAiPT09aD9uZXcgZTpsKGgpLHRoaXMuX2hhc2gudXBkYXRlKHAp''@;'; put 'put ''fWIoaSxvKSxpLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGgpe3RoaXMuX2hhc2gudXBkYXRlKGgpfSxpLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgaD10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybigicm1kMTYwIj09PXRoaXMuX2FsZz9uZXcgZTpsKHRoaXMuX2FsZykp''@;'; put 'put ''LnVwZGF0ZSh0aGlzLl9vcGFkKS51cGRhdGUoaCkuZGlnZXN0KCl9LEUuZXhwb3J0cz1mdW5jdGlvbihoLGYpe3JldHVybiJybWQxNjAiPT09KGg9aC50b0xvd2VyQ2FzZSgpKXx8InJpcGVtZDE2MCI9PT1oP25ldyBpKCJybWQxNjAiLGYpOiJtZDUiPT09aD9uZXcgYSh0LGYpOm5ldyBpKGgs''@;'; put 'put ''Zil9fSx7Ii4vbGVnYWN5IjozODksImNpcGhlci1iYXNlIjoyMjEsImNyZWF0ZS1oYXNoL21kNSI6Mzg3LGluaGVyaXRzOjQ0MCxyaXBlbWQxNjA6NDkzLCJzYWZlLWJ1ZmZlciI6NDk0LCJzaGEuanMiOjQ5OH1dLDM4OTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCJp''@;'; put 'put ''bmhlcml0cyIpLGE9cygic2FmZS1idWZmZXIiKS5CdWZmZXIsbz1zKCJjaXBoZXItYmFzZSIpLHI9YS5hbGxvYygxMjgpO2Z1bmN0aW9uIHQoZSxsKXtvLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBsJiYobD1hLmZyb20obCkpLHRoaXMuX2FsZz1lLHRoaXMuX2tleT1s''@;'; put 'put ''LGwubGVuZ3RoPjY0P2w9ZShsKTpsLmxlbmd0aDw2NCYmKGw9YS5jb25jYXQoW2wscl0sNjQpKTtmb3IodmFyIG49dGhpcy5faXBhZD1hLmFsbG9jVW5zYWZlKDY0KSxpPXRoaXMuX29wYWQ9YS5hbGxvY1Vuc2FmZSg2NCksaD0wO2g8NjQ7aCsrKW5baF09NTRebFtoXSxpW2hdPTkyXmxbaF07''@;'; put 'put ''dGhpcy5faGFzaD1bbl19Yih0LG8pLHQucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5faGFzaC5wdXNoKGUpfSx0LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9hbGcoYS5jb25jYXQodGhpcy5faGFzaCkpO3JldHVybiB0aGlzLl9hbGcoYS5jb25j''@;'; put 'put ''YXQoW3RoaXMuX29wYWQsZV0pKX0sRS5leHBvcnRzPXR9LHsiY2lwaGVyLWJhc2UiOjIyMSxpbmhlcml0czo0NDAsInNhZmUtYnVmZmVyIjo0OTR9XSwzOTA6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Uy5yYW5kb21CeXRlcz1TLnJuZz1TLnBzZXVkb1JhbmRvbUJ5dGVzPVMucHJu''@;'; put 'put ''Zz1zKCJyYW5kb21ieXRlcyIpLFMuY3JlYXRlSGFzaD1TLkhhc2g9cygiY3JlYXRlLWhhc2giKSxTLmNyZWF0ZUhtYWM9Uy5IbWFjPXMoImNyZWF0ZS1obWFjIik7dmFyIGI9cygiYnJvd3NlcmlmeS1zaWduL2FsZ29zIiksYT1PYmplY3Qua2V5cyhiKSxvPVsic2hhMSIsInNoYTIyNCIsInNo''@;'; put 'put ''YTI1NiIsInNoYTM4NCIsInNoYTUxMiIsIm1kNSIsInJtZDE2MCJdLmNvbmNhdChhKTtTLmdldEhhc2hlcz1mdW5jdGlvbigpe3JldHVybiBvfTt2YXIgcj1zKCJwYmtkZjIiKTtTLnBia2RmMj1yLnBia2RmMixTLnBia2RmMlN5bmM9ci5wYmtkZjJTeW5jO3ZhciB0PXMoImJyb3dzZXJpZnkt''@;'; put 'put ''Y2lwaGVyIik7Uy5DaXBoZXI9dC5DaXBoZXIsUy5jcmVhdGVDaXBoZXI9dC5jcmVhdGVDaXBoZXIsUy5DaXBoZXJpdj10LkNpcGhlcml2LFMuY3JlYXRlQ2lwaGVyaXY9dC5jcmVhdGVDaXBoZXJpdixTLkRlY2lwaGVyPXQuRGVjaXBoZXIsUy5jcmVhdGVEZWNpcGhlcj10LmNyZWF0ZURlY2lw''@;'; put 'put ''aGVyLFMuRGVjaXBoZXJpdj10LkRlY2lwaGVyaXYsUy5jcmVhdGVEZWNpcGhlcml2PXQuY3JlYXRlRGVjaXBoZXJpdixTLmdldENpcGhlcnM9dC5nZXRDaXBoZXJzLFMubGlzdENpcGhlcnM9dC5saXN0Q2lwaGVyczt2YXIgZT1zKCJkaWZmaWUtaGVsbG1hbiIpO1MuRGlmZmllSGVsbG1hbkdy''@;'; put 'put ''b3VwPWUuRGlmZmllSGVsbG1hbkdyb3VwLFMuY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPWUuY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwLFMuZ2V0RGlmZmllSGVsbG1hbj1lLmdldERpZmZpZUhlbGxtYW4sUy5jcmVhdGVEaWZmaWVIZWxsbWFuPWUuY3JlYXRlRGlmZmllSGVsbG1hbixTLkRp''@;'; put 'put ''ZmZpZUhlbGxtYW49ZS5EaWZmaWVIZWxsbWFuO3ZhciBsPXMoImJyb3dzZXJpZnktc2lnbiIpO1MuY3JlYXRlU2lnbj1sLmNyZWF0ZVNpZ24sUy5TaWduPWwuU2lnbixTLmNyZWF0ZVZlcmlmeT1sLmNyZWF0ZVZlcmlmeSxTLlZlcmlmeT1sLlZlcmlmeSxTLmNyZWF0ZUVDREg9cygiY3JlYXRl''@;'; put 'put ''LWVjZGgiKTt2YXIgbj1zKCJwdWJsaWMtZW5jcnlwdCIpO1MucHVibGljRW5jcnlwdD1uLnB1YmxpY0VuY3J5cHQsUy5wcml2YXRlRW5jcnlwdD1uLnByaXZhdGVFbmNyeXB0LFMucHVibGljRGVjcnlwdD1uLnB1YmxpY0RlY3J5cHQsUy5wcml2YXRlRGVjcnlwdD1uLnByaXZhdGVEZWNyeXB0''@;'; put 'put ''O3ZhciBpPXMoInJhbmRvbWZpbGwiKTtTLnJhbmRvbUZpbGw9aS5yYW5kb21GaWxsLFMucmFuZG9tRmlsbFN5bmM9aS5yYW5kb21GaWxsU3luYyxTLmNyZWF0ZUNyZWRlbnRpYWxzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFsic29ycnksIGNyZWF0ZUNyZWRlbnRpYWxzIGlzIG5vdCBp''@;'; put 'put ''bXBsZW1lbnRlZCB5ZXQiLCJ3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cyIsImh0dHBzOi8vZ2l0aHViLmNvbS9jcnlwdG8tYnJvd3NlcmlmeS9jcnlwdG8tYnJvd3NlcmlmeSJdLmpvaW4oIlxuIikpfSxTLmNvbnN0YW50cz17REhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRToyLERIX0NIRUNLX1Bf''@;'; put 'put ''Tk9UX1BSSU1FOjEsREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUjo0LERIX05PVF9TVUlUQUJMRV9HRU5FUkFUT1I6OCxOUE5fRU5BQkxFRDoxLEFMUE5fRU5BQkxFRDoxLFJTQV9QS0NTMV9QQURESU5HOjEsUlNBX1NTTFYyM19QQURESU5HOjIsUlNBX05PX1BBRERJTkc6MyxSU0FfUEtD''@;'; put 'put ''UzFfT0FFUF9QQURESU5HOjQsUlNBX1g5MzFfUEFERElORzo1LFJTQV9QS0NTMV9QU1NfUEFERElORzo2LFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRDoyLFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEOjQsUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQ6Nn19LHsiYnJvd3NlcmlmeS1j''@;'; put 'put ''aXBoZXIiOjIwNiwiYnJvd3NlcmlmeS1zaWduIjoyMTMsImJyb3dzZXJpZnktc2lnbi9hbGdvcyI6MjEwLCJjcmVhdGUtZWNkaCI6Mzg0LCJjcmVhdGUtaGFzaCI6Mzg2LCJjcmVhdGUtaG1hYyI6Mzg4LCJkaWZmaWUtaGVsbG1hbiI6NDAwLHBia2RmMjo0NjAsInB1YmxpYy1lbmNyeXB0Ijo0''@;'; put 'put ''NjgscmFuZG9tYnl0ZXM6NDc1LHJhbmRvbWZpbGw6NDc2fV0sMzkxOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiLGE7Yj12b2lkIDAsYT1mdW5jdGlvbigpe3ZhciBiPTZlNCxhPTM2ZTUsbz0ibWlsbGlzZWNvbmQiLHI9InNlY29uZCIsdD0ibWludXRlIixlPSJob3VyIixs''@;'; put 'put ''PSJkYXkiLG49IndlZWsiLGk9Im1vbnRoIixoPSJxdWFydGVyIixmPSJ5ZWFyIix1PSJkYXRlIixwPSJJbnZhbGlkIERhdGUiLGQ9L14oXGR7NH0pWy0vXT8oXGR7MSwyfSk/Wy0vXT8oXGR7MCwyfSlbVHRcc10qKFxkezEsMn0pPzo/KFxkezEsMn0pPzo/KFxkezEsMn0pP1suOl0/KFxkKyk/''@;'; put 'put ''JC8sdj0vXFsoW15cXV0rKV18WXsxLDR9fE17MSw0fXxEezEsMn18ZHsxLDR9fEh7MSwyfXxoezEsMn18YXxBfG17MSwyfXxzezEsMn18WnsxLDJ9fFNTUy9nLF89e25hbWU6ImVuIix3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0''@;'; put 'put ''dXJkYXkiLnNwbGl0KCJfIiksbW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG9yZGluYWw6ZnVuY3Rpb24oYyl7dmFyIG09WyJ0aCIsInN0IiwibmQi''@;'; put 'put ''LCJyZCJdLGc9YyUxMDA7cmV0dXJuIlsiK2MrKG1bKGctMjApJTEwXXx8bVtnXXx8bVswXSkrIl0ifX0sQT1mdW5jdGlvbihjLG0sZyl7dmFyIHk9U3RyaW5nKGMpO3JldHVybiF5fHx5Lmxlbmd0aD49bT9jOiIiK0FycmF5KG0rMS15Lmxlbmd0aCkuam9pbihnKStjfSxJPXtzOkEsejpmdW5j''@;'; put 'put ''dGlvbihjKXt2YXIgbT0tYy51dGNPZmZzZXQoKSxnPU1hdGguYWJzKG0pLHk9TWF0aC5mbG9vcihnLzYwKSx3PWclNjA7cmV0dXJuKG08PTA/IisiOiItIikrQSh5LDIsIjAiKSsiOiIrQSh3LDIsIjAiKX0sbTpmdW5jdGlvbiBjKG0sZyl7aWYobS5kYXRlKCk8Zy5kYXRlKCkpcmV0dXJuLWMo''@;'; put 'put ''ZyxtKTt2YXIgeT0xMiooZy55ZWFyKCktbS55ZWFyKCkpKyhnLm1vbnRoKCktbS5tb250aCgpKSx3PW0uY2xvbmUoKS5hZGQoeSxpKSxrPWctdzwwLE89bS5jbG9uZSgpLmFkZCh5KyhrPy0xOjEpLGkpO3JldHVybisoLSh5KyhnLXcpLyhrP3ctTzpPLXcpKXx8MCl9LGE6ZnVuY3Rpb24oYyl7''@;'; put 'put ''cmV0dXJuIGM8MD9NYXRoLmNlaWwoYyl8fDA6TWF0aC5mbG9vcihjKX0scDpmdW5jdGlvbihjKXtyZXR1cm57TTppLHk6Zix3Om4sZDpsLEQ6dSxoOmUsbTp0LHM6cixtczpvLFE6aH1bY118fFN0cmluZyhjfHwiIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9zJC8sIiIpfSx1OmZ1bmN0aW9u''@;'; put 'put ''KGMpe3JldHVybiB2b2lkIDA9PT1jfX0sTD0iZW4iLE49e307TltMXT1fO3ZhciBQPSIkaXNEYXlqc09iamVjdCIsQj1mdW5jdGlvbihjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIE18fCEoIWN8fCFjW1BdKX0sJD1mdW5jdGlvbiBjKG0sZyx5KXt2YXIgdztpZighbSlyZXR1cm4gTDtpZigic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIG0pe3ZhciBrPW0udG9Mb3dlckNhc2UoKTtOW2tdJiYodz1rKSxnJiYoTltrXT1nLHc9ayk7dmFyIE89bS5zcGxpdCgiLSIpO2lmKCF3JiZPLmxlbmd0aD4xKXJldHVybiBjKE9bMF0pfWVsc2V7dmFyIHo9bS5uYW1lO05bel09bSx3PXp9cmV0dXJuIXkmJncmJihMPXcp''@;'; put 'put ''LHd8fCF5JiZMfSxEPWZ1bmN0aW9uKGMsbSl7aWYoQihjKSlyZXR1cm4gYy5jbG9uZSgpO3ZhciBnPSJvYmplY3QiPT10eXBlb2YgbT9tOnt9O3JldHVybiBnLmRhdGU9YyxnLmFyZ3M9YXJndW1lbnRzLG5ldyBNKGcpfSx4PUk7eC5sPSQseC5pPUIseC53PWZ1bmN0aW9uKGMsbSl7cmV0dXJu''@;'; put 'put ''IEQoYyx7bG9jYWxlOm0uJEwsdXRjOm0uJHUseDptLiR4LCRvZmZzZXQ6bS4kb2Zmc2V0fSl9O3ZhciBNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYyhnKXt0aGlzLiRMPSQoZy5sb2NhbGUsbnVsbCwhMCksdGhpcy5wYXJzZShnKSx0aGlzLiR4PXRoaXMuJHh8fGcueHx8e30sdGhpc1tQXT0hMH12''@;'; put 'put ''YXIgbT1jLnByb3RvdHlwZTtyZXR1cm4gbS5wYXJzZT1mdW5jdGlvbihnKXt0aGlzLiRkPWZ1bmN0aW9uKHkpe3ZhciB3PXkuZGF0ZSxrPXkudXRjO2lmKG51bGw9PT13KXJldHVybiBuZXcgRGF0ZShOYU4pO2lmKHgudSh3KSlyZXR1cm4gbmV3IERhdGU7aWYodyBpbnN0YW5jZW9mIERhdGUp''@;'; put 'put ''cmV0dXJuIG5ldyBEYXRlKHcpO2lmKCJzdHJpbmciPT10eXBlb2YgdyYmIS9aJC9pLnRlc3Qodykpe3ZhciBPPXcubWF0Y2goZCk7aWYoTyl7dmFyIHo9T1syXS0xfHwwLFU9KE9bN118fCIwIikuc3Vic3RyaW5nKDAsMyk7cmV0dXJuIGs/bmV3IERhdGUoRGF0ZS5VVEMoT1sxXSx6LE9bM118''@;'; put 'put ''fDEsT1s0XXx8MCxPWzVdfHwwLE9bNl18fDAsVSkpOm5ldyBEYXRlKE9bMV0seixPWzNdfHwxLE9bNF18fDAsT1s1XXx8MCxPWzZdfHwwLFUpfX1yZXR1cm4gbmV3IERhdGUodyl9KGcpLHRoaXMuaW5pdCgpfSxtLmluaXQ9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLiRkO3RoaXMuJHk9Zy5nZXRG''@;'; put 'put ''dWxsWWVhcigpLHRoaXMuJE09Zy5nZXRNb250aCgpLHRoaXMuJEQ9Zy5nZXREYXRlKCksdGhpcy4kVz1nLmdldERheSgpLHRoaXMuJEg9Zy5nZXRIb3VycygpLHRoaXMuJG09Zy5nZXRNaW51dGVzKCksdGhpcy4kcz1nLmdldFNlY29uZHMoKSx0aGlzLiRtcz1nLmdldE1pbGxpc2Vjb25kcygp''@;'; put 'put ''fSxtLiR1dGlscz1mdW5jdGlvbigpe3JldHVybiB4fSxtLmlzVmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b1N0cmluZygpIT09cH0sbS5pc1NhbWU9ZnVuY3Rpb24oZyx5KXt2YXIgdz1EKGcpO3JldHVybiB0aGlzLnN0YXJ0T2YoeSk8PXcmJnc8PXRoaXMuZW5kT2YoeSl9LG0u''@;'; put 'put ''aXNBZnRlcj1mdW5jdGlvbihnLHkpe3JldHVybiBEKGcpPHRoaXMuc3RhcnRPZih5KX0sbS5pc0JlZm9yZT1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLmVuZE9mKHkpPEQoZyl9LG0uJGc9ZnVuY3Rpb24oZyx5LHcpe3JldHVybiB4LnUoZyk/dGhpc1t5XTp0aGlzLnNldCh3LGcpfSxtLnVu''@;'; put 'put ''aXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxtLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC5nZXRUaW1lKCl9LG0uc3RhcnRPZj1mdW5jdGlvbihnLHkpe3ZhciB3PXRoaXMsaz0hIXgudSh5KXx8eSxPPXgucChnKSx6PWZ1bmN0''@;'; put 'put ''aW9uKHEsWSl7dmFyIFg9eC53KHcuJHU/RGF0ZS5VVEMody4keSxZLHEpOm5ldyBEYXRlKHcuJHksWSxxKSx3KTtyZXR1cm4gaz9YOlguZW5kT2YobCl9LFU9ZnVuY3Rpb24ocSxZKXtyZXR1cm4geC53KHcudG9EYXRlKClbcV0uYXBwbHkody50b0RhdGUoInMiKSwoaz9bMCwwLDAsMF06WzIz''@;'; put 'put ''LDU5LDU5LDk5OV0pLnNsaWNlKFkpKSx3KX0sVj10aGlzLiRXLFI9dGhpcy4kTSxIPXRoaXMuJEQsVD0ic2V0IisodGhpcy4kdT8iVVRDIjoiIik7c3dpdGNoKE8pe2Nhc2UgZjpyZXR1cm4gaz96KDEsMCk6eigzMSwxMSk7Y2FzZSBpOnJldHVybiBrP3ooMSxSKTp6KDAsUisxKTtjYXNlIG46''@;'; put 'put ''dmFyIEM9dGhpcy4kbG9jYWxlKCkud2Vla1N0YXJ0fHwwLEY9KFY8Qz9WKzc6ViktQztyZXR1cm4geihrP0gtRjpIKyg2LUYpLFIpO2Nhc2UgbDpjYXNlIHU6cmV0dXJuIFUoVCsiSG91cnMiLDApO2Nhc2UgZTpyZXR1cm4gVShUKyJNaW51dGVzIiwxKTtjYXNlIHQ6cmV0dXJuIFUoVCsiU2Vj''@;'; put 'put ''b25kcyIsMik7Y2FzZSByOnJldHVybiBVKFQrIk1pbGxpc2Vjb25kcyIsMyk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5jbG9uZSgpfX0sbS5lbmRPZj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5zdGFydE9mKGcsITEpfSxtLiRzZXQ9ZnVuY3Rpb24oZyx5KXt2YXIgdyxrPXgucChnKSxPPSJzZXQi''@;'; put 'put ''Kyh0aGlzLiR1PyJVVEMiOiIiKSx6PSh3PXt9LHdbbF09TysiRGF0ZSIsd1t1XT1PKyJEYXRlIix3W2ldPU8rIk1vbnRoIix3W2ZdPU8rIkZ1bGxZZWFyIix3W2VdPU8rIkhvdXJzIix3W3RdPU8rIk1pbnV0ZXMiLHdbcl09TysiU2Vjb25kcyIsd1tvXT1PKyJNaWxsaXNlY29uZHMiLHcpW2td''@;'; put 'put ''LFU9az09PWw/dGhpcy4kRCsoeS10aGlzLiRXKTp5O2lmKGs9PT1pfHxrPT09Zil7dmFyIFY9dGhpcy5jbG9uZSgpLnNldCh1LDEpO1YuJGRbel0oVSksVi5pbml0KCksdGhpcy4kZD1WLnNldCh1LE1hdGgubWluKHRoaXMuJEQsVi5kYXlzSW5Nb250aCgpKSkuJGR9ZWxzZSB6JiZ0aGlzLiRk''@;'; put 'put ''W3pdKFUpO3JldHVybiB0aGlzLmluaXQoKSx0aGlzfSxtLnNldD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLmNsb25lKCkuJHNldChnLHkpfSxtLmdldD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpc1t4LnAoZyldKCl9LG0uYWRkPWZ1bmN0aW9uKGcseSl7dmFyIHcsaz10aGlzO2c9TnVtYmVy''@;'; put 'put ''KGcpO3ZhciBPPXgucCh5KSx6PWZ1bmN0aW9uKFIpe3ZhciBIPUQoayk7cmV0dXJuIHgudyhILmRhdGUoSC5kYXRlKCkrTWF0aC5yb3VuZChSKmcpKSxrKX07aWYoTz09PWkpcmV0dXJuIHRoaXMuc2V0KGksdGhpcy4kTStnKTtpZihPPT09ZilyZXR1cm4gdGhpcy5zZXQoZix0aGlzLiR5K2cp''@;'; put 'put ''O2lmKE89PT1sKXJldHVybiB6KDEpO2lmKE89PT1uKXJldHVybiB6KDcpO3ZhciBVPSh3PXt9LHdbdF09Yix3W2VdPWEsd1tyXT0xZTMsdylbT118fDEsVj10aGlzLiRkLmdldFRpbWUoKStnKlU7cmV0dXJuIHgudyhWLHRoaXMpfSxtLnN1YnRyYWN0PWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRo''@;'; put 'put ''aXMuYWRkKC0xKmcseSl9LG0uZm9ybWF0PWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMsdz10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHcuaW52YWxpZERhdGV8fHA7dmFyIGs9Z3x8IllZWVktTU0tRERUSEg6bW06c3NaIixPPXgueih0aGlzKSx6PXRoaXMuJEgsVT10''@;'; put 'put ''aGlzLiRtLFY9dGhpcy4kTSxSPXcud2Vla2RheXMsSD13Lm1vbnRocyxDPWZ1bmN0aW9uKFksWCxLLHJ0KXtyZXR1cm4gWSYmKFlbWF18fFkoeSxrKSl8fEtbWF0uc2xpY2UoMCxydCl9LEY9ZnVuY3Rpb24oWSl7cmV0dXJuIHgucyh6JTEyfHwxMixZLCIwIil9LHE9dy5tZXJpZGllbXx8ZnVu''@;'; put 'put ''Y3Rpb24oWSxYLEspe3ZhciBydD1ZPDEyPyJBTSI6IlBNIjtyZXR1cm4gSz9ydC50b0xvd2VyQ2FzZSgpOnJ0fTtyZXR1cm4gay5yZXBsYWNlKHYsZnVuY3Rpb24oWSxYKXtyZXR1cm4gWHx8ZnVuY3Rpb24oSyl7c3dpdGNoKEspe2Nhc2UiWVkiOnJldHVybiBTdHJpbmcoeS4keSkuc2xpY2Uo''@;'; put 'put ''LTIpO2Nhc2UiWVlZWSI6cmV0dXJuIHgucyh5LiR5LDQsIjAiKTtjYXNlIk0iOnJldHVybiBWKzE7Y2FzZSJNTSI6cmV0dXJuIHgucyhWKzEsMiwiMCIpO2Nhc2UiTU1NIjpyZXR1cm4gQyh3Lm1vbnRoc1Nob3J0LFYsSCwzKTtjYXNlIk1NTU0iOnJldHVybiBDKEgsVik7Y2FzZSJEIjpyZXR1''@;'; put 'put ''cm4geS4kRDtjYXNlIkREIjpyZXR1cm4geC5zKHkuJEQsMiwiMCIpO2Nhc2UiZCI6cmV0dXJuIFN0cmluZyh5LiRXKTtjYXNlImRkIjpyZXR1cm4gQyh3LndlZWtkYXlzTWluLHkuJFcsUiwyKTtjYXNlImRkZCI6cmV0dXJuIEMody53ZWVrZGF5c1Nob3J0LHkuJFcsUiwzKTtjYXNlImRkZGQi''@;'; put 'put ''OnJldHVybiBSW3kuJFddO2Nhc2UiSCI6cmV0dXJuIFN0cmluZyh6KTtjYXNlIkhIIjpyZXR1cm4geC5zKHosMiwiMCIpO2Nhc2UiaCI6cmV0dXJuIEYoMSk7Y2FzZSJoaCI6cmV0dXJuIEYoMik7Y2FzZSJhIjpyZXR1cm4gcSh6LFUsITApO2Nhc2UiQSI6cmV0dXJuIHEoeixVLCExKTtjYXNl''@;'; put 'put ''Im0iOnJldHVybiBTdHJpbmcoVSk7Y2FzZSJtbSI6cmV0dXJuIHgucyhVLDIsIjAiKTtjYXNlInMiOnJldHVybiBTdHJpbmcoeS4kcyk7Y2FzZSJzcyI6cmV0dXJuIHgucyh5LiRzLDIsIjAiKTtjYXNlIlNTUyI6cmV0dXJuIHgucyh5LiRtcywzLCIwIik7Y2FzZSJaIjpyZXR1cm4gT31yZXR1''@;'; put 'put ''cm4gbnVsbH0oWSl8fE8ucmVwbGFjZSgiOiIsIiIpfSl9LG0udXRjT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIDE1Ki1NYXRoLnJvdW5kKHRoaXMuJGQuZ2V0VGltZXpvbmVPZmZzZXQoKS8xNSl9LG0uZGlmZj1mdW5jdGlvbihnLHksdyl7dmFyIGssTz10aGlzLHo9eC5wKHkpLFU9RChnKSxW''@;'; put 'put ''PShVLnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKmIsUj10aGlzLVUsSD1mdW5jdGlvbigpe3JldHVybiB4Lm0oTyxVKX07c3dpdGNoKHope2Nhc2UgZjprPUgoKS8xMjticmVhaztjYXNlIGk6az1IKCk7YnJlYWs7Y2FzZSBoOms9SCgpLzM7YnJlYWs7Y2FzZSBuOms9KFItVikvNjA0''@;'; put 'put ''OGU1O2JyZWFrO2Nhc2UgbDprPShSLVYpLzg2NGU1O2JyZWFrO2Nhc2UgZTprPVIvYTticmVhaztjYXNlIHQ6az1SL2I7YnJlYWs7Y2FzZSByOms9Ui8xZTM7YnJlYWs7ZGVmYXVsdDprPVJ9cmV0dXJuIHc/azp4LmEoayl9LG0uZGF5c0luTW9udGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5l''@;'; put 'put ''bmRPZihpKS4kRH0sbS4kbG9jYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIE5bdGhpcy4kTF19LG0ubG9jYWxlPWZ1bmN0aW9uKGcseSl7aWYoIWcpcmV0dXJuIHRoaXMuJEw7dmFyIHc9dGhpcy5jbG9uZSgpLGs9JChnLHksITApO3JldHVybiBrJiYody4kTD1rKSx3fSxtLmNsb25lPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHgudyh0aGlzLiRkLHRoaXMpfSxtLnRvRGF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LG0udG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMudG9JU09TdHJpbmcoKTpudWxsfSxtLnRvSVNPU3RyaW5nPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9JU09TdHJpbmcoKX0sbS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvVVRDU3RyaW5nKCl9LGN9KCksaj1NLnByb3RvdHlwZTtyZXR1cm4gRC5wcm90b3R5cGU9aixbWyIkbXMiLG9dLFsiJHMiLHJdLFsiJG0iLHRdLFsiJEgi''@;'; put 'put ''LGVdLFsiJFciLGxdLFsiJE0iLGldLFsiJHkiLGZdLFsiJEQiLHVdXS5mb3JFYWNoKGZ1bmN0aW9uKGMpe2pbY1sxXV09ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMuJGcobSxjWzBdLGNbMV0pfX0pLEQuZXh0ZW5kPWZ1bmN0aW9uKGMsbSl7cmV0dXJuIGMuJGl8fChjKG0sTSxEKSxjLiRpPSEw''@;'; put 'put ''KSxEfSxELmxvY2FsZT0kLEQuaXNEYXlqcz1CLEQudW5peD1mdW5jdGlvbihjKXtyZXR1cm4gRCgxZTMqYyl9LEQuZW49TltMXSxELkxzPU4sRC5wPXt9LER9LCJvYmplY3QiPT10eXBlb2YgUyYmdm9pZCAwIT09RT9FLmV4cG9ydHM9YSgpOihiPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9i''@;'; put 'put ''YWxUaGlzOmJ8fHNlbGYpLmRheWpzPWEoKX0se31dLDM5MjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYixhO2I9dm9pZCAwLGE9ZnVuY3Rpb24oKXt2YXIgYj17TFRTOiJoOm1tOnNzIEEiLExUOiJoOm1tIEEiLEw6Ik1NL0REL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExM''@;'; put 'put ''TDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGE9LyhcW1teW10qXF0pfChbLV86Ly4sKClcc10rKXwoQXxhfFlZWVl8WVk/fE1NP00/TT98RG98REQ/fGhoP3xISD98bW0/fHNzP3xTezEsM318enxaWj8pL2csbz0vXGRcZC8scj0vXGRc''@;'; put 'put ''ZD8vLHQ9L1xkKlteLV86LywoKVxzXGRdKy8sZT17fSxsPWZ1bmN0aW9uKGQpe3JldHVybihkPStkKSsoZD42OD8xOTAwOjJlMyl9LG49ZnVuY3Rpb24oZCl7cmV0dXJuIGZ1bmN0aW9uKHYpe3RoaXNbZF09K3Z9fSxpPVsvWystXVxkXGQ6PyhcZFxkKT98Wi8sZnVuY3Rpb24oZCl7KHRoaXMu''@;'; put 'put ''em9uZXx8KHRoaXMuem9uZT17fSkpLm9mZnNldD1mdW5jdGlvbih2KXtpZighdnx8IloiPT09dilyZXR1cm4gMDt2YXIgXz12Lm1hdGNoKC8oWystXXxcZFxkKS9nKSxBPTYwKl9bMV0rKCtfWzJdfHwwKTtyZXR1cm4gMD09PUE/MDoiKyI9PT1fWzBdPy1BOkF9KGQpfV0saD1mdW5jdGlvbihk''@;'; put 'put ''KXt2YXIgdj1lW2RdO3JldHVybiB2JiYodi5pbmRleE9mP3Y6di5zLmNvbmNhdCh2LmYpKX0sZj1mdW5jdGlvbihkLHYpe3ZhciBfLEE9ZS5tZXJpZGllbTtpZihBKXtmb3IodmFyIEk9MTtJPD0yNDtJKz0xKWlmKGQuaW5kZXhPZihBKEksMCx2KSk+LTEpe189ST4xMjticmVha319ZWxzZSBf''@;'; put 'put ''PWQ9PT0odj8icG0iOiJQTSIpO3JldHVybiBffSx1PXtBOlt0LGZ1bmN0aW9uKGQpe3RoaXMuYWZ0ZXJub29uPWYoZCwhMSl9XSxhOlt0LGZ1bmN0aW9uKGQpe3RoaXMuYWZ0ZXJub29uPWYoZCwhMCl9XSxTOlsvXGQvLGZ1bmN0aW9uKGQpe3RoaXMubWlsbGlzZWNvbmRzPTEwMCorZH1dLFNT''@;'; put 'put ''OltvLGZ1bmN0aW9uKGQpe3RoaXMubWlsbGlzZWNvbmRzPTEwKitkfV0sU1NTOlsvXGR7M30vLGZ1bmN0aW9uKGQpe3RoaXMubWlsbGlzZWNvbmRzPStkfV0sczpbcixuKCJzZWNvbmRzIildLHNzOltyLG4oInNlY29uZHMiKV0sbTpbcixuKCJtaW51dGVzIildLG1tOltyLG4oIm1pbnV0ZXMi''@;'; put 'put ''KV0sSDpbcixuKCJob3VycyIpXSxoOltyLG4oImhvdXJzIildLEhIOltyLG4oImhvdXJzIildLGhoOltyLG4oImhvdXJzIildLEQ6W3IsbigiZGF5IildLEREOltvLG4oImRheSIpXSxEbzpbdCxmdW5jdGlvbihkKXt2YXIgdj1lLm9yZGluYWwsXz1kLm1hdGNoKC9cZCsvKTtpZih0aGlzLmRh''@;'; put 'put ''eT1fWzBdLHYpZm9yKHZhciBBPTE7QTw9MzE7QSs9MSl2KEEpLnJlcGxhY2UoL1xbfFxdL2csIiIpPT09ZCYmKHRoaXMuZGF5PUEpfV0sTTpbcixuKCJtb250aCIpXSxNTTpbbyxuKCJtb250aCIpXSxNTU06W3QsZnVuY3Rpb24oZCl7dmFyIHY9aCgibW9udGhzIiksXz0oaCgibW9udGhzU2hv''@;'; put 'put ''cnQiKXx8di5tYXAoZnVuY3Rpb24oQSl7cmV0dXJuIEEuc2xpY2UoMCwzKX0pKS5pbmRleE9mKGQpKzE7aWYoXzwxKXRocm93IG5ldyBFcnJvcjt0aGlzLm1vbnRoPV8lMTJ8fF99XSxNTU1NOlt0LGZ1bmN0aW9uKGQpe3ZhciB2PWgoIm1vbnRocyIpLmluZGV4T2YoZCkrMTtpZih2PDEpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yO3RoaXMubW9udGg9diUxMnx8dn1dLFk6Wy9bKy1dP1xkKy8sbigieWVhciIpXSxZWTpbbyxmdW5jdGlvbihkKXt0aGlzLnllYXI9bChkKX1dLFlZWVk6Wy9cZHs0fS8sbigieWVhciIpXSxaOmksWlo6aX07cmV0dXJuIGZ1bmN0aW9uKGQsdixfKXtfLnAuY3VzdG9tUGFy''@;'; put 'put ''c2VGb3JtYXQ9ITAsZCYmZC5wYXJzZVR3b0RpZ2l0WWVhciYmKGw9ZC5wYXJzZVR3b0RpZ2l0WWVhcik7dmFyIEE9di5wcm90b3R5cGUsST1BLnBhcnNlO0EucGFyc2U9ZnVuY3Rpb24oTCl7dmFyIE49TC5kYXRlLFA9TC51dGMsQj1MLmFyZ3M7dGhpcy4kdT1QO3ZhciAkPUJbMV07aWYoInN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiAkKXt2YXIgRD0hMD09PUJbMl0seD0hMD09PUJbM10sTT1EfHx4LGo9QlsyXTt4JiYoaj1CWzJdKSxlPXRoaXMuJGxvY2FsZSgpLCFEJiZqJiYoZT1fLkxzW2pdKSx0aGlzLiRkPWZ1bmN0aW9uKHksdyxrKXt0cnl7aWYoWyJ4IiwiWCJdLmluZGV4T2Yodyk+LTEpcmV0''@;'; put 'put ''dXJuIG5ldyBEYXRlKCgiWCI9PT13PzFlMzoxKSp5KTt2YXIgTz1mdW5jdGlvbiBwKGQpe3ZhciBfO189ZSYmZS5mb3JtYXRzO2Zvcih2YXIgQT0oZD1kLnJlcGxhY2UoLyhcW1teXF1dK10pfChMVFM/fGx7MSw0fXxMezEsNH0pL2csZnVuY3Rpb24oRCx4LE0pe3ZhciBqPU0mJk0udG9VcHBl''@;'; put 'put ''ckNhc2UoKTtyZXR1cm4geHx8X1tNXXx8YltNXXx8X1tqXS5yZXBsYWNlKC8oXFtbXlxdXStdKXwoTU1NTXxNTXxERHxkZGRkKS9nLGZ1bmN0aW9uKGMsbSxnKXtyZXR1cm4gbXx8Zy5zbGljZSgxKX0pfSkpLm1hdGNoKGEpLEk9QS5sZW5ndGgsTD0wO0w8STtMKz0xKXt2YXIgTj1BW0xdLFA9''@;'; put 'put ''dVtOXSwkPVAmJlBbMV07QVtMXT0kP3tyZWdleDpQJiZQWzBdLHBhcnNlcjokfTpOLnJlcGxhY2UoL15cW3xcXSQvZywiIil9cmV0dXJuIGZ1bmN0aW9uKEQpe2Zvcih2YXIgeD17fSxNPTAsaj0wO008STtNKz0xKXt2YXIgYz1BW01dO2lmKCJzdHJpbmciPT10eXBlb2YgYylqKz1jLmxlbmd0''@;'; put 'put ''aDtlbHNle3ZhciBtPWMucmVnZXgsZz1jLnBhcnNlcix5PUQuc2xpY2Uoaiksdz1tLmV4ZWMoeSlbMF07Zy5jYWxsKHgsdyksRD1ELnJlcGxhY2UodywiIil9fXJldHVybiBmdW5jdGlvbihrKXt2YXIgTz1rLmFmdGVybm9vbjtpZih2b2lkIDAhPT1PKXt2YXIgej1rLmhvdXJzO08/ejwxMiYm''@;'; put 'put ''KGsuaG91cnMrPTEyKToxMj09PXomJihrLmhvdXJzPTApLGRlbGV0ZSBrLmFmdGVybm9vbn19KHgpLHh9fSh3KSh5KSx6PU8ueWVhcixVPU8ubW9udGgsVj1PLmRheSxSPU8uaG91cnMsSD1PLm1pbnV0ZXMsVD1PLnNlY29uZHMsQz1PLm1pbGxpc2Vjb25kcyxGPU8uem9uZSxxPW5ldyBEYXRl''@;'; put 'put ''LFk9Vnx8KHp8fFU/MTpxLmdldERhdGUoKSksWD16fHxxLmdldEZ1bGxZZWFyKCksSz0wO3omJiFVfHwoSz1VPjA/VS0xOnEuZ2V0TW9udGgoKSk7dmFyIHJ0PVJ8fDAsdHQ9SHx8MCxXPVR8fDAsUT1DfHwwO3JldHVybiBGP25ldyBEYXRlKERhdGUuVVRDKFgsSyxZLHJ0LHR0LFcsUSs2MCpG''@;'; put 'put ''Lm9mZnNldCoxZTMpKTprP25ldyBEYXRlKERhdGUuVVRDKFgsSyxZLHJ0LHR0LFcsUSkpOm5ldyBEYXRlKFgsSyxZLHJ0LHR0LFcsUSl9Y2F0Y2h7cmV0dXJuIG5ldyBEYXRlKCIiKX19KE4sJCxQKSx0aGlzLmluaXQoKSxqJiYhMCE9PWomJih0aGlzLiRMPXRoaXMubG9jYWxlKGopLiRMKSxN''@;'; put 'put ''JiZOIT10aGlzLmZvcm1hdCgkKSYmKHRoaXMuJGQ9bmV3IERhdGUoIiIpKSxlPXt9fWVsc2UgaWYoJCBpbnN0YW5jZW9mIEFycmF5KWZvcih2YXIgYz0kLmxlbmd0aCxtPTE7bTw9YzttKz0xKXtCWzFdPSRbbS0xXTt2YXIgZz1fLmFwcGx5KHRoaXMsQik7aWYoZy5pc1ZhbGlkKCkpe3RoaXMu''@;'; put 'put ''JGQ9Zy4kZCx0aGlzLiRMPWcuJEwsdGhpcy5pbml0KCk7YnJlYWt9bT09PWMmJih0aGlzLiRkPW5ldyBEYXRlKCIiKSl9ZWxzZSBJLmNhbGwodGhpcyxMKX19fSwib2JqZWN0Ij09dHlwZW9mIFMmJnZvaWQgMCE9PUU/RS5leHBvcnRzPWEoKTooYj10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xv''@;'; put 'put ''YmFsVGhpczpifHxzZWxmKS5kYXlqc19wbHVnaW5fY3VzdG9tUGFyc2VGb3JtYXQ9YSgpfSx7fV0sMzkzOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiLGE7Yj12b2lkIDAsYT1mdW5jdGlvbigpe3ZhciBiPSJtaW51dGUiLGE9L1srLV1cZFxkKD86Oj9cZFxkKT8vZyxvPS8o''@;'; put 'put ''WystXXxcZFxkKS9nO3JldHVybiBmdW5jdGlvbihyLHQsZSl7dmFyIGw9dC5wcm90b3R5cGU7ZS51dGM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyB0KHtkYXRlOmQsdXRjOiEwLGFyZ3M6YXJndW1lbnRzfSl9LGwudXRjPWZ1bmN0aW9uKGQpe3ZhciB2PWUodGhpcy50b0RhdGUoKSx7bG9jYWxl''@;'; put 'put ''OnRoaXMuJEwsdXRjOiEwfSk7cmV0dXJuIGQ/di5hZGQodGhpcy51dGNPZmZzZXQoKSxiKTp2fSxsLmxvY2FsPWZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcy50b0RhdGUoKSx7bG9jYWxlOnRoaXMuJEwsdXRjOiExfSl9O3ZhciBuPWwucGFyc2U7bC5wYXJzZT1mdW5jdGlvbihkKXtkLnV0YyYm''@;'; put 'put ''KHRoaXMuJHU9ITApLHRoaXMuJHV0aWxzKCkudShkLiRvZmZzZXQpfHwodGhpcy4kb2Zmc2V0PWQuJG9mZnNldCksbi5jYWxsKHRoaXMsZCl9O3ZhciBpPWwuaW5pdDtsLmluaXQ9ZnVuY3Rpb24oKXtpZih0aGlzLiR1KXt2YXIgZD10aGlzLiRkO3RoaXMuJHk9ZC5nZXRVVENGdWxsWWVhcigp''@;'; put 'put ''LHRoaXMuJE09ZC5nZXRVVENNb250aCgpLHRoaXMuJEQ9ZC5nZXRVVENEYXRlKCksdGhpcy4kVz1kLmdldFVUQ0RheSgpLHRoaXMuJEg9ZC5nZXRVVENIb3VycygpLHRoaXMuJG09ZC5nZXRVVENNaW51dGVzKCksdGhpcy4kcz1kLmdldFVUQ1NlY29uZHMoKSx0aGlzLiRtcz1kLmdldFVUQ01p''@;'; put 'put ''bGxpc2Vjb25kcygpfWVsc2UgaS5jYWxsKHRoaXMpfTt2YXIgaD1sLnV0Y09mZnNldDtsLnV0Y09mZnNldD1mdW5jdGlvbihkLHYpe3ZhciBfPXRoaXMuJHV0aWxzKCkudTtpZihfKGQpKXJldHVybiB0aGlzLiR1PzA6Xyh0aGlzLiRvZmZzZXQpP2guY2FsbCh0aGlzKTp0aGlzLiRvZmZzZXQ7''@;'; put 'put ''aWYoInN0cmluZyI9PXR5cGVvZiBkJiZudWxsPT09KGQ9ZnVuY3Rpb24oTil7dm9pZCAwPT09TiYmKE49IiIpO3ZhciBQPU4ubWF0Y2goYSk7aWYoIVApcmV0dXJuIG51bGw7dmFyIEI9KCIiK1BbMF0pLm1hdGNoKG8pfHxbIi0iLDAsMF0sRD02MCorQlsxXSsgK0JbMl07cmV0dXJuIDA9PT1E''@;'; put 'put ''PzA6IisiPT09QlswXT9EOi1EfShkKSkpcmV0dXJuIHRoaXM7dmFyIEE9TWF0aC5hYnMoZCk8PTE2PzYwKmQ6ZCxJPXRoaXM7aWYodilyZXR1cm4gSS4kb2Zmc2V0PUEsSS4kdT0wPT09ZCxJO2lmKDAhPT1kKXt2YXIgTD10aGlzLiR1P3RoaXMudG9EYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQo''@;'; put 'put ''KTotMSp0aGlzLnV0Y09mZnNldCgpOyhJPXRoaXMubG9jYWwoKS5hZGQoQStMLGIpKS4kb2Zmc2V0PUEsSS4keC4kbG9jYWxPZmZzZXQ9TH1lbHNlIEk9dGhpcy51dGMoKTtyZXR1cm4gSX07dmFyIGY9bC5mb3JtYXQ7bC5mb3JtYXQ9ZnVuY3Rpb24oZCl7cmV0dXJuIGYuY2FsbCh0aGlzLGR8''@;'; put 'put ''fCh0aGlzLiR1PyJZWVlZLU1NLUREVEhIOm1tOnNzW1pdIjoiIikpfSxsLnZhbHVlT2Y9ZnVuY3Rpb24oKXt2YXIgZD10aGlzLiR1dGlscygpLnUodGhpcy4kb2Zmc2V0KT8wOnRoaXMuJG9mZnNldCsodGhpcy4keC4kbG9jYWxPZmZzZXR8fHRoaXMuJGQuZ2V0VGltZXpvbmVPZmZzZXQoKSk7''@;'; put 'put ''cmV0dXJuIHRoaXMuJGQudmFsdWVPZigpLTZlNCpkfSxsLmlzVVRDPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLiR1fSxsLnRvSVNPU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKX0sbC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRv''@;'; put 'put ''RGF0ZSgpLnRvVVRDU3RyaW5nKCl9O3ZhciB1PWwudG9EYXRlO2wudG9EYXRlPWZ1bmN0aW9uKGQpe3JldHVybiJzIj09PWQmJnRoaXMuJG9mZnNldD9lKHRoaXMuZm9ybWF0KCJZWVlZLU1NLUREIEhIOm1tOnNzOlNTUyIpKS50b0RhdGUoKTp1LmNhbGwodGhpcyl9O3ZhciBwPWwuZGlmZjts''@;'; put 'put ''LmRpZmY9ZnVuY3Rpb24oZCx2LF8pe2lmKGQmJnRoaXMuJHU9PT1kLiR1KXJldHVybiBwLmNhbGwodGhpcyxkLHYsXyk7dmFyIEE9dGhpcy5sb2NhbCgpLEk9ZShkKS5sb2NhbCgpO3JldHVybiBwLmNhbGwoQSxJLHYsXyl9fX0sIm9iamVjdCI9PXR5cGVvZiBTJiZ2b2lkIDAhPT1FP0UuZXhw''@;'; put 'put ''b3J0cz1hKCk6KGI9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6Ynx8c2VsZikuZGF5anNfcGx1Z2luX3V0Yz1hKCl9LHt9XSwzOTQ6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Uy51dGlscz1zKCIuL2Rlcy91dGlscyIpLFMuQ2lwaGVyPXMoIi4vZGVzL2NpcGhlciIp''@;'; put 'put ''LFMuREVTPXMoIi4vZGVzL2RlcyIpLFMuQ0JDPXMoIi4vZGVzL2NiYyIpLFMuRURFPXMoIi4vZGVzL2VkZSIpfSx7Ii4vZGVzL2NiYyI6Mzk1LCIuL2Rlcy9jaXBoZXIiOjM5NiwiLi9kZXMvZGVzIjozOTcsIi4vZGVzL2VkZSI6Mzk4LCIuL2Rlcy91dGlscyI6Mzk5fV0sMzk1OltmdW5jdGlv''@;'; put 'put ''bihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIm1pbmltYWxpc3RpYy1hc3NlcnQiKSxhPXMoImluaGVyaXRzIiksbz17fTtmdW5jdGlvbiByKHQpe2IuZXF1YWwodC5sZW5ndGgsOCwiSW52YWxpZCBJViBsZW5ndGgiKSx0aGlzLml2PW5ldyBBcnJheSg4KTtmb3IodmFyIGU9MDtlPHRo''@;'; put 'put ''aXMuaXYubGVuZ3RoO2UrKyl0aGlzLml2W2VdPXRbZV19Uy5pbnN0YW50aWF0ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGgpe3QuY2FsbCh0aGlzLGgpLHRoaXMuX2NiY0luaXQoKX1hKGUsdCk7Zm9yKHZhciBsPU9iamVjdC5rZXlzKG8pLG49MDtuPGwubGVuZ3RoO24rKyl7dmFyIGk9bFtu''@;'; put 'put ''XTtlLnByb3RvdHlwZVtpXT1vW2ldfXJldHVybiBlLmNyZWF0ZT1mdW5jdGlvbihoKXtyZXR1cm4gbmV3IGUoaCl9LGV9LG8uX2NiY0luaXQ9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgcih0aGlzLm9wdGlvbnMuaXYpO3RoaXMuX2NiY1N0YXRlPXR9LG8uX3VwZGF0ZT1mdW5jdGlvbih0LGUsbCxu''@;'; put 'put ''KXt2YXIgaD10aGlzLmNvbnN0cnVjdG9yLnN1cGVyXy5wcm90b3R5cGUsZj10aGlzLl9jYmNTdGF0ZS5pdjtpZigiZW5jcnlwdCI9PT10aGlzLnR5cGUpe2Zvcih2YXIgdT0wO3U8dGhpcy5ibG9ja1NpemU7dSsrKWZbdV1ePXRbZSt1XTtmb3IoaC5fdXBkYXRlLmNhbGwodGhpcyxmLDAsbCxu''@;'; put 'put ''KSx1PTA7dTx0aGlzLmJsb2NrU2l6ZTt1KyspZlt1XT1sW24rdV19ZWxzZXtmb3IoaC5fdXBkYXRlLmNhbGwodGhpcyx0LGUsbCxuKSx1PTA7dTx0aGlzLmJsb2NrU2l6ZTt1KyspbFtuK3VdXj1mW3VdO2Zvcih1PTA7dTx0aGlzLmJsb2NrU2l6ZTt1KyspZlt1XT10W2UrdV19fX0se2luaGVy''@;'; put 'put ''aXRzOjQ0MCwibWluaW1hbGlzdGljLWFzc2VydCI6NDUzfV0sMzk2OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIm1pbmltYWxpc3RpYy1hc3NlcnQiKTtmdW5jdGlvbiBhKG8pe3RoaXMub3B0aW9ucz1vLHRoaXMudHlwZT10aGlzLm9wdGlvbnMudHlwZSx0aGlzLmJs''@;'; put 'put ''b2NrU2l6ZT04LHRoaXMuX2luaXQoKSx0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5wYWRkaW5nPSExIT09by5wYWRkaW5nfUUuZXhwb3J0cz1hLGEucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKCl7fSxhLnByb3RvdHlwZS51cGRh''@;'; put 'put ''dGU9ZnVuY3Rpb24obyl7cmV0dXJuIDA9PT1vLmxlbmd0aD9bXToiZGVjcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fdXBkYXRlRGVjcnlwdChvKTp0aGlzLl91cGRhdGVFbmNyeXB0KG8pfSxhLnByb3RvdHlwZS5fYnVmZmVyPWZ1bmN0aW9uKG8scil7Zm9yKHZhciB0PU1hdGgubWluKHRoaXMu''@;'; put 'put ''YnVmZmVyLmxlbmd0aC10aGlzLmJ1ZmZlck9mZixvLmxlbmd0aC1yKSxlPTA7ZTx0O2UrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZitlXT1vW3IrZV07cmV0dXJuIHRoaXMuYnVmZmVyT2ZmKz10LHR9LGEucHJvdG90eXBlLl9mbHVzaEJ1ZmZlcj1mdW5jdGlvbihvLHIpe3JldHVybiB0''@;'; put 'put ''aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCxvLHIpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5ibG9ja1NpemV9LGEucHJvdG90eXBlLl91cGRhdGVFbmNyeXB0PWZ1bmN0aW9uKG8pe3ZhciByPTAsdD0wLGw9bmV3IEFycmF5KCgodGhpcy5idWZmZXJPZmYrby5sZW5ndGgpL3RoaXMuYmxvY2tT''@;'; put 'put ''aXplfDApKnRoaXMuYmxvY2tTaXplKTswIT09dGhpcy5idWZmZXJPZmYmJihyKz10aGlzLl9idWZmZXIobyxyKSx0aGlzLmJ1ZmZlck9mZj09PXRoaXMuYnVmZmVyLmxlbmd0aCYmKHQrPXRoaXMuX2ZsdXNoQnVmZmVyKGwsdCkpKTtmb3IodmFyIG49by5sZW5ndGgtKG8ubGVuZ3RoLXIpJXRo''@;'; put 'put ''aXMuYmxvY2tTaXplO3I8bjtyKz10aGlzLmJsb2NrU2l6ZSl0aGlzLl91cGRhdGUobyxyLGwsdCksdCs9dGhpcy5ibG9ja1NpemU7Zm9yKDtyPG8ubGVuZ3RoO3IrKyx0aGlzLmJ1ZmZlck9mZisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmXT1vW3JdO3JldHVybiBsfSxhLnByb3RvdHlw''@;'; put 'put ''ZS5fdXBkYXRlRGVjcnlwdD1mdW5jdGlvbihvKXtmb3IodmFyIHI9MCx0PTAsZT1NYXRoLmNlaWwoKHRoaXMuYnVmZmVyT2ZmK28ubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZSktMSxsPW5ldyBBcnJheShlKnRoaXMuYmxvY2tTaXplKTtlPjA7ZS0tKXIrPXRoaXMuX2J1ZmZlcihvLHIpLHQrPXRo''@;'; put 'put ''aXMuX2ZsdXNoQnVmZmVyKGwsdCk7cmV0dXJuIHIrPXRoaXMuX2J1ZmZlcihvLHIpLGx9LGEucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKG8pe3ZhciByLHQ7cmV0dXJuIG8mJihyPXRoaXMudXBkYXRlKG8pKSx0PSJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9maW5hbEVuY3J5cHQoKTp0''@;'; put 'put ''aGlzLl9maW5hbERlY3J5cHQoKSxyP3IuY29uY2F0KHQpOnR9LGEucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24obyxyKXtpZigwPT09cilyZXR1cm4hMTtmb3IoO3I8by5sZW5ndGg7KW9bcisrXT0wO3JldHVybiEwfSxhLnByb3RvdHlwZS5fZmluYWxFbmNyeXB0PWZ1bmN0aW9uKCl7aWYoIXRo''@;'; put 'put ''aXMuX3BhZCh0aGlzLmJ1ZmZlcix0aGlzLmJ1ZmZlck9mZikpcmV0dXJuW107dmFyIG89bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsbywwKSxvfSxhLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24obyl7cmV0dXJuIG99LGEucHJv''@;'; put 'put ''dG90eXBlLl9maW5hbERlY3J5cHQ9ZnVuY3Rpb24oKXtiLmVxdWFsKHRoaXMuYnVmZmVyT2ZmLHRoaXMuYmxvY2tTaXplLCJOb3QgZW5vdWdoIGRhdGEgdG8gZGVjcnlwdCIpO3ZhciBvPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX2ZsdXNoQnVmZmVyKG8sMCksdGhp''@;'; put 'put ''cy5fdW5wYWQobyl9fSx7Im1pbmltYWxpc3RpYy1hc3NlcnQiOjQ1M31dLDM5NzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCJtaW5pbWFsaXN0aWMtYXNzZXJ0IiksYT1zKCJpbmhlcml0cyIpLG89cygiLi91dGlscyIpLHI9cygiLi9jaXBoZXIiKTtmdW5jdGlvbiB0''@;'; put 'put ''KCl7dGhpcy50bXA9bmV3IEFycmF5KDIpLHRoaXMua2V5cz1udWxsfWZ1bmN0aW9uIGUobil7ci5jYWxsKHRoaXMsbik7dmFyIGk9bmV3IHQ7dGhpcy5fZGVzU3RhdGU9aSx0aGlzLmRlcml2ZUtleXMoaSxuLmtleSl9YShlLHIpLEUuZXhwb3J0cz1lLGUuY3JlYXRlPWZ1bmN0aW9uKG4pe3Jl''@;'; put 'put ''dHVybiBuZXcgZShuKX07dmFyIGw9WzEsMSwyLDIsMiwyLDIsMiwxLDIsMiwyLDIsMiwyLDFdO2UucHJvdG90eXBlLmRlcml2ZUtleXM9ZnVuY3Rpb24obixpKXtuLmtleXM9bmV3IEFycmF5KDMyKSxiLmVxdWFsKGkubGVuZ3RoLHRoaXMuYmxvY2tTaXplLCJJbnZhbGlkIGtleSBsZW5ndGgi''@;'; put 'put ''KTt2YXIgaD1vLnJlYWRVSW50MzJCRShpLDApLGY9by5yZWFkVUludDMyQkUoaSw0KTtvLnBjMShoLGYsbi50bXAsMCksaD1uLnRtcFswXSxmPW4udG1wWzFdO2Zvcih2YXIgdT0wO3U8bi5rZXlzLmxlbmd0aDt1Kz0yKXt2YXIgcD1sW3U+Pj4xXTtoPW8ucjI4c2hsKGgscCksZj1vLnIyOHNo''@;'; put 'put ''bChmLHApLG8ucGMyKGgsZixuLmtleXMsdSl9fSxlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKG4saSxoLGYpe3ZhciB1PXRoaXMuX2Rlc1N0YXRlLHA9by5yZWFkVUludDMyQkUobixpKSxkPW8ucmVhZFVJbnQzMkJFKG4saSs0KTtvLmlwKHAsZCx1LnRtcCwwKSxwPXUudG1wWzBdLGQ9''@;'; put 'put ''dS50bXBbMV0sImVuY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX2VuY3J5cHQodSxwLGQsdS50bXAsMCk6dGhpcy5fZGVjcnlwdCh1LHAsZCx1LnRtcCwwKSxkPXUudG1wWzFdLG8ud3JpdGVVSW50MzJCRShoLHA9dS50bXBbMF0sZiksby53cml0ZVVJbnQzMkJFKGgsZCxmKzQpfSxlLnByb3Rv''@;'; put 'put ''dHlwZS5fcGFkPWZ1bmN0aW9uKG4saSl7aWYoITE9PT10aGlzLnBhZGRpbmcpcmV0dXJuITE7Zm9yKHZhciBoPW4ubGVuZ3RoLWksZj1pO2Y8bi5sZW5ndGg7ZisrKW5bZl09aDtyZXR1cm4hMH0sZS5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKG4pe2lmKCExPT09dGhpcy5wYWRkaW5nKXJl''@;'; put 'put ''dHVybiBuO2Zvcih2YXIgaT1uW24ubGVuZ3RoLTFdLGg9bi5sZW5ndGgtaTtoPG4ubGVuZ3RoO2grKyliLmVxdWFsKG5baF0saSk7cmV0dXJuIG4uc2xpY2UoMCxuLmxlbmd0aC1pKX0sZS5wcm90b3R5cGUuX2VuY3J5cHQ9ZnVuY3Rpb24obixpLGgsZix1KXtmb3IodmFyIHA9aSxkPWgsdj0w''@;'; put 'put ''O3Y8bi5rZXlzLmxlbmd0aDt2Kz0yKXt2YXIgXz1uLmtleXNbdl0sQT1uLmtleXNbdisxXTtvLmV4cGFuZChkLG4udG1wLDApO3ZhciBJPW8uc3Vic3RpdHV0ZShfXj1uLnRtcFswXSxBXj1uLnRtcFsxXSksTD1kO2Q9KHBeby5wZXJtdXRlKEkpKT4+PjAscD1MfW8ucmlwKGQscCxmLHUpfSxl''@;'; put 'put ''LnByb3RvdHlwZS5fZGVjcnlwdD1mdW5jdGlvbihuLGksaCxmLHUpe2Zvcih2YXIgcD1oLGQ9aSx2PW4ua2V5cy5sZW5ndGgtMjt2Pj0wO3YtPTIpe3ZhciBfPW4ua2V5c1t2XSxBPW4ua2V5c1t2KzFdO28uZXhwYW5kKHAsbi50bXAsMCk7dmFyIEk9by5zdWJzdGl0dXRlKF9ePW4udG1wWzBd''@;'; put 'put ''LEFePW4udG1wWzFdKSxMPXA7cD0oZF5vLnBlcm11dGUoSSkpPj4+MCxkPUx9by5yaXAocCxkLGYsdSl9fSx7Ii4vY2lwaGVyIjozOTYsIi4vdXRpbHMiOjM5OSxpbmhlcml0czo0NDAsIm1pbmltYWxpc3RpYy1hc3NlcnQiOjQ1M31dLDM5ODpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgYj1zKCJtaW5pbWFsaXN0aWMtYXNzZXJ0IiksYT1zKCJpbmhlcml0cyIpLG89cygiLi9jaXBoZXIiKSxyPXMoIi4vZGVzIik7ZnVuY3Rpb24gdChsLG4pe2IuZXF1YWwobi5sZW5ndGgsMjQsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBpPW4uc2xpY2UoMCw4KSxoPW4uc2xpY2Uo''@;'; put 'put ''OCwxNiksZj1uLnNsaWNlKDE2LDI0KTt0aGlzLmNpcGhlcnM9ImVuY3J5cHQiPT09bD9bci5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTppfSksci5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpofSksci5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpmfSldOltyLmNyZWF0ZSh7dHlw''@;'; put 'put ''ZToiZGVjcnlwdCIsa2V5OmZ9KSxyLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Omh9KSxyLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Oml9KV19ZnVuY3Rpb24gZShsKXtvLmNhbGwodGhpcyxsKTt2YXIgbj1uZXcgdCh0aGlzLnR5cGUsdGhpcy5vcHRpb25zLmtleSk7dGhpcy5fZWRl''@;'; put 'put ''U3RhdGU9bn1hKGUsbyksRS5leHBvcnRzPWUsZS5jcmVhdGU9ZnVuY3Rpb24obCl7cmV0dXJuIG5ldyBlKGwpfSxlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGwsbixpLGgpe3ZhciBmPXRoaXMuX2VkZVN0YXRlO2YuY2lwaGVyc1swXS5fdXBkYXRlKGwsbixpLGgpLGYuY2lwaGVyc1sx''@;'; put 'put ''XS5fdXBkYXRlKGksaCxpLGgpLGYuY2lwaGVyc1syXS5fdXBkYXRlKGksaCxpLGgpfSxlLnByb3RvdHlwZS5fcGFkPXIucHJvdG90eXBlLl9wYWQsZS5wcm90b3R5cGUuX3VucGFkPXIucHJvdG90eXBlLl91bnBhZH0seyIuL2NpcGhlciI6Mzk2LCIuL2RlcyI6Mzk3LGluaGVyaXRzOjQ0MCwi''@;'; put 'put ''bWluaW1hbGlzdGljLWFzc2VydCI6NDUzfV0sMzk5OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO1MucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKHIsdCl7cmV0dXJuKHJbMCt0XTw8MjR8clsxK3RdPDwxNnxyWzIrdF08PDh8clszK3RdKT4+PjB9LFMud3JpdGVVSW50MzJCRT1mdW5jdGlv''@;'; put 'put ''bihyLHQsZSl7clswK2VdPXQ+Pj4yNCxyWzErZV09dD4+PjE2JjI1NSxyWzIrZV09dD4+PjgmMjU1LHJbMytlXT0yNTUmdH0sUy5pcD1mdW5jdGlvbihyLHQsZSxsKXtmb3IodmFyIG49MCxpPTAsaD02O2g+PTA7aC09Mil7Zm9yKHZhciBmPTA7Zjw9MjQ7Zis9OCluPDw9MSxufD10Pj4+Zito''@;'; put 'put ''JjE7Zm9yKGY9MDtmPD0yNDtmKz04KW48PD0xLG58PXI+Pj5mK2gmMX1mb3IoaD02O2g+PTA7aC09Mil7Zm9yKGY9MTtmPD0yNTtmKz04KWk8PD0xLGl8PXQ+Pj5mK2gmMTtmb3IoZj0xO2Y8PTI1O2YrPTgpaTw8PTEsaXw9cj4+PmYraCYxfWVbbCswXT1uPj4+MCxlW2wrMV09aT4+PjB9LFMu''@;'; put 'put ''cmlwPWZ1bmN0aW9uKHIsdCxlLGwpe2Zvcih2YXIgbj0wLGk9MCxoPTA7aDw0O2grKylmb3IodmFyIGY9MjQ7Zj49MDtmLT04KW48PD0xLG58PXQ+Pj5mK2gmMSxuPDw9MSxufD1yPj4+ZitoJjE7Zm9yKGg9NDtoPDg7aCsrKWZvcihmPTI0O2Y+PTA7Zi09OClpPDw9MSxpfD10Pj4+ZitoJjEs''@;'; put 'put ''aTw8PTEsaXw9cj4+PmYraCYxO2VbbCswXT1uPj4+MCxlW2wrMV09aT4+PjB9LFMucGMxPWZ1bmN0aW9uKHIsdCxlLGwpe2Zvcih2YXIgbj0wLGk9MCxoPTc7aD49NTtoLS0pe2Zvcih2YXIgZj0wO2Y8PTI0O2YrPTgpbjw8PTEsbnw9dD4+ZitoJjE7Zm9yKGY9MDtmPD0yNDtmKz04KW48PD0x''@;'; put 'put ''LG58PXI+PmYraCYxfWZvcihmPTA7Zjw9MjQ7Zis9OCluPDw9MSxufD10Pj5mK2gmMTtmb3IoaD0xO2g8PTM7aCsrKXtmb3IoZj0wO2Y8PTI0O2YrPTgpaTw8PTEsaXw9dD4+ZitoJjE7Zm9yKGY9MDtmPD0yNDtmKz04KWk8PD0xLGl8PXI+PmYraCYxfWZvcihmPTA7Zjw9MjQ7Zis9OClpPDw9''@;'; put 'put ''MSxpfD1yPj5mK2gmMTtlW2wrMF09bj4+PjAsZVtsKzFdPWk+Pj4wfSxTLnIyOHNobD1mdW5jdGlvbihyLHQpe3JldHVybiByPDx0JjI2ODQzNTQ1NXxyPj4+MjgtdH07dmFyIGI9WzE0LDExLDE3LDQsMjcsMjMsMjUsMCwxMywyMiw3LDE4LDUsOSwxNiwyNCwyLDIwLDEyLDIxLDEsOCwxNSwy''@;'; put 'put ''NiwxNSw0LDI1LDE5LDksMSwyNiwxNiw1LDExLDIzLDgsMTIsNywxNywwLDIyLDMsMTAsMTQsNiwyMCwyNywyNF07Uy5wYzI9ZnVuY3Rpb24ocix0LGUsbCl7Zm9yKHZhciBuPTAsaT0wLGg9Yi5sZW5ndGg+Pj4xLGY9MDtmPGg7ZisrKW48PD0xLG58PXI+Pj5iW2ZdJjE7Zm9yKGY9aDtmPGIu''@;'; put 'put ''bGVuZ3RoO2YrKylpPDw9MSxpfD10Pj4+YltmXSYxO2VbbCswXT1uPj4+MCxlW2wrMV09aT4+PjB9LFMuZXhwYW5kPWZ1bmN0aW9uKHIsdCxlKXt2YXIgbD0wLG49MDtsPSgxJnIpPDw1fHI+Pj4yNztmb3IodmFyIGk9MjM7aT49MTU7aS09NClsPDw9NixsfD1yPj4+aSY2Mztmb3IoaT0xMTtp''@;'; put 'put ''Pj0zO2ktPTQpbnw9cj4+PmkmNjMsbjw8PTY7bnw9KDMxJnIpPDwxfHI+Pj4zMSx0W2UrMF09bD4+PjAsdFtlKzFdPW4+Pj4wfTt2YXIgYT1bMTQsMCw0LDE1LDEzLDcsMSw0LDIsMTQsMTUsMiwxMSwxMyw4LDEsMywxMCwxMCw2LDYsMTIsMTIsMTEsNSw5LDksNSwwLDMsNyw4LDQsMTUsMSwx''@;'; put 'put ''MiwxNCw4LDgsMiwxMyw0LDYsOSwyLDEsMTEsNywxNSw1LDEyLDExLDksMyw3LDE0LDMsMTAsMTAsMCw1LDYsMCwxMywxNSwzLDEsMTMsOCw0LDE0LDcsNiwxNSwxMSwyLDMsOCw0LDE0LDksMTIsNywwLDIsMSwxMywxMCwxMiw2LDAsOSw1LDExLDEwLDUsMCwxMywxNCw4LDcsMTAsMTEsMSwx''@;'; put 'put ''MCwzLDQsMTUsMTMsNCwxLDIsNSwxMSw4LDYsMTIsNyw2LDEyLDksMCwzLDUsMiwxNCwxNSw5LDEwLDEzLDAsNyw5LDAsMTQsOSw2LDMsMyw0LDE1LDYsNSwxMCwxLDIsMTMsOCwxMiw1LDcsMTQsMTEsMTIsNCwxMSwyLDE1LDgsMSwxMywxLDYsMTAsNCwxMyw5LDAsOCw2LDE1LDksMyw4LDAs''@;'; put 'put ''NywxMSw0LDEsMTUsMiwxNCwxMiwzLDUsMTEsMTAsNSwxNCwyLDcsMTIsNywxMywxMyw4LDE0LDExLDMsNSwwLDYsNiwxNSw5LDAsMTAsMywxLDQsMiw3LDgsMiw1LDEyLDExLDEsMTIsMTAsNCwxNCwxNSw5LDEwLDMsNiwxNSw5LDAsMCw2LDEyLDEwLDExLDEsNywxMywxMyw4LDE1LDksMSw0''@;'; put 'put ''LDMsNSwxNCwxMSw1LDEyLDIsNyw4LDIsNCwxNCwyLDE0LDEyLDExLDQsMiwxLDEyLDcsNCwxMCw3LDExLDEzLDYsMSw4LDUsNSwwLDMsMTUsMTUsMTAsMTMsMywwLDksMTQsOCw5LDYsNCwxMSwyLDgsMSwxMiwxMSw3LDEwLDEsMTMsMTQsNywyLDgsMTMsMTUsNiw5LDE1LDEyLDAsNSw5LDYs''@;'; put 'put ''MTAsMyw0LDAsNSwxNCwzLDEyLDEwLDEsMTUsMTAsNCwxNSwyLDksNywyLDEyLDYsOSw4LDUsMCw2LDEzLDEsMywxMyw0LDE0LDE0LDAsNywxMSw1LDMsMTEsOCw5LDQsMTQsMywxNSwyLDUsMTIsMiw5LDgsNSwxMiwxNSwzLDEwLDcsMTEsMCwxNCw0LDEsMTAsNywxLDYsMTMsMCwxMSw4LDYs''@;'; put 'put ''MTMsNCwxMywxMSwwLDIsMTEsMTQsNywxNSw0LDAsOSw4LDEsMTMsMTAsMywxNCwxMiwzLDksNSw3LDEyLDUsMiwxMCwxNSw2LDgsMSw2LDEsNiw0LDExLDExLDEzLDEzLDgsMTIsMSwzLDQsNywxMCwxNCw3LDEwLDksMTUsNSw2LDAsOCwxNSwwLDE0LDUsMiw5LDMsMiwxMiwxMywxLDIsMTUs''@;'; put 'put ''OCwxMyw0LDgsNiwxMCwxNSwzLDExLDcsMSw0LDEwLDEyLDksNSwzLDYsMTQsMTEsNSwwLDAsMTQsMTIsOSw3LDIsNywyLDExLDEsNCwxNCwxLDcsOSw0LDEyLDEwLDE0LDgsMiwxMywwLDE1LDYsMTIsMTAsOSwxMywwLDE1LDMsMyw1LDUsNiw4LDExXTtTLnN1YnN0aXR1dGU9ZnVuY3Rpb24o''@;'; put 'put ''cix0KXtmb3IodmFyIGU9MCxsPTA7bDw0O2wrKyllPDw9NCxlfD1hWzY0KmwrKHI+Pj4xOC02KmwmNjMpXTtmb3IobD0wO2w8NDtsKyspZTw8PTQsZXw9YVsyNTYrNjQqbCsodD4+PjE4LTYqbCY2MyldO3JldHVybiBlPj4+MH07dmFyIG89WzE2LDI1LDEyLDExLDMsMjAsNCwxNSwzMSwxNyw5''@;'; put 'put ''LDYsMjcsMTQsMSwyMiwzMCwyNCw4LDE4LDAsNSwyOSwyMywxMywxOSwyLDI2LDEwLDIxLDI4LDddO1MucGVybXV0ZT1mdW5jdGlvbihyKXtmb3IodmFyIHQ9MCxlPTA7ZTxvLmxlbmd0aDtlKyspdDw8PTEsdHw9cj4+Pm9bZV0mMTtyZXR1cm4gdD4+PjB9LFMucGFkU3BsaXQ9ZnVuY3Rpb24o''@;'; put 'put ''cix0LGUpe2Zvcih2YXIgbD1yLnRvU3RyaW5nKDIpO2wubGVuZ3RoPHQ7KWw9IjAiK2w7Zm9yKHZhciBuPVtdLGk9MDtpPHQ7aSs9ZSluLnB1c2gobC5zbGljZShpLGkrZSkpO3JldHVybiBuLmpvaW4oIiAiKX19LHt9XSw0MDA6W2Z1bmN0aW9uKHMsRSxTKXsoZnVuY3Rpb24oYil7KGZ1bmN0''@;'; put 'put ''aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBhPXMoIi4vbGliL2dlbmVyYXRlUHJpbWUiKSxvPXMoIi4vbGliL3ByaW1lcy5qc29uIikscj1zKCIuL2xpYi9kaCIpLHQ9e2JpbmFyeTohMCxoZXg6ITAsYmFzZTY0OiEwfTtTLkRpZmZpZUhlbGxtYW5Hcm91cD1TLmNyZWF0ZURpZmZpZUhlbGxtYW5H''@;'; put 'put ''cm91cD1TLmdldERpZmZpZUhlbGxtYW49ZnVuY3Rpb24oZSl7dmFyIGw9bmV3IGIob1tlXS5wcmltZSwiaGV4Iiksbj1uZXcgYihvW2VdLmdlbiwiaGV4Iik7cmV0dXJuIG5ldyByKGwsbil9LFMuY3JlYXRlRGlmZmllSGVsbG1hbj1TLkRpZmZpZUhlbGxtYW49ZnVuY3Rpb24gZShsLG4saSxo''@;'; put 'put ''KXtyZXR1cm4gYi5pc0J1ZmZlcihuKXx8dm9pZCAwPT09dFtuXT9lKGwsImJpbmFyeSIsbixpKToobj1ufHwiYmluYXJ5IixoPWh8fCJiaW5hcnkiLGk9aXx8bmV3IGIoWzJdKSxiLmlzQnVmZmVyKGkpfHwoaT1uZXcgYihpLGgpKSwibnVtYmVyIj09dHlwZW9mIGw/bmV3IHIoYShsLGkpLGks''@;'; put 'put ''ITApOihiLmlzQnVmZmVyKGwpfHwobD1uZXcgYihsLG4pKSxuZXcgcihsLGksITApKSl9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxzKCJidWZmZXIiKS5CdWZmZXIpfSx7Ii4vbGliL2RoIjo0MDEsIi4vbGliL2dlbmVyYXRlUHJpbWUiOjQwMiwiLi9saWIvcHJpbWVzLmpzb24iOjQwMyxi''@;'; put 'put ''dWZmZXI6MjIwfV0sNDAxOltmdW5jdGlvbihzLEUsUyl7KGZ1bmN0aW9uKGIpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgYT1zKCJibi5qcyIpLG89bmV3KHMoIm1pbGxlci1yYWJpbiIpKSxyPW5ldyBhKDI0KSx0PW5ldyBhKDExKSxlPW5ldyBhKDEwKSxsPW5ldyBhKDMpLG49bmV3''@;'; put 'put ''IGEoNyksaT1zKCIuL2dlbmVyYXRlUHJpbWUiKSxoPXMoInJhbmRvbWJ5dGVzIik7ZnVuY3Rpb24gZihfLEEpe3JldHVybiBBPUF8fCJ1dGY4IixiLmlzQnVmZmVyKF8pfHwoXz1uZXcgYihfLEEpKSx0aGlzLl9wdWI9bmV3IGEoXyksdGhpc31mdW5jdGlvbiB1KF8sQSl7cmV0dXJuIEE9QXx8''@;'; put 'put ''InV0ZjgiLGIuaXNCdWZmZXIoXyl8fChfPW5ldyBiKF8sQSkpLHRoaXMuX3ByaXY9bmV3IGEoXyksdGhpc31FLmV4cG9ydHM9ZDt2YXIgcD17fTtmdW5jdGlvbiBkKF8sQSxJKXt0aGlzLnNldEdlbmVyYXRvcihBKSx0aGlzLl9fcHJpbWU9bmV3IGEoXyksdGhpcy5fcHJpbWU9YS5tb250KHRo''@;'; put 'put ''aXMuX19wcmltZSksdGhpcy5fcHJpbWVMZW49Xy5sZW5ndGgsdGhpcy5fcHViPXZvaWQgMCx0aGlzLl9wcml2PXZvaWQgMCx0aGlzLl9wcmltZUNvZGU9dm9pZCAwLEk/KHRoaXMuc2V0UHVibGljS2V5PWYsdGhpcy5zZXRQcml2YXRlS2V5PXUpOnRoaXMuX3ByaW1lQ29kZT04fWZ1bmN0aW9u''@;'; put 'put ''IHYoXyxBKXt2YXIgST1uZXcgYihfLnRvQXJyYXkoKSk7cmV0dXJuIEE/SS50b1N0cmluZyhBKTpJfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLnByb3RvdHlwZSwidmVyaWZ5RXJyb3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiJudW1iZXIiIT10eXBlb2YgdGhpcy5f''@;'; put 'put ''cHJpbWVDb2RlJiYodGhpcy5fcHJpbWVDb2RlPWZ1bmN0aW9uKF8sQSl7dmFyIEk9QS50b1N0cmluZygiaGV4IiksTD1bSSxfLnRvU3RyaW5nKDE2KV0uam9pbigiXyIpO2lmKEwgaW4gcClyZXR1cm4gcFtMXTt2YXIgTixQPTA7aWYoXy5pc0V2ZW4oKXx8IWkuc2ltcGxlU2lldmV8fCFpLmZl''@;'; put 'put ''cm1hdFRlc3QoXyl8fCFvLnRlc3QoXykpcmV0dXJuIFArPTEscFtMXT1QKz0iMDIiPT09SXx8IjA1Ij09PUk/ODo0LFA7c3dpdGNoKG8udGVzdChfLnNocm4oMSkpfHwoUCs9MiksSSl7Y2FzZSIwMiI6Xy5tb2QocikuY21wKHQpJiYoUCs9OCk7YnJlYWs7Y2FzZSIwNSI6KE49Xy5tb2QoZSkp''@;'; put 'put ''LmNtcChsKSYmTi5jbXAobikmJihQKz04KTticmVhaztkZWZhdWx0OlArPTR9cmV0dXJuIHBbTF09UCxQfSh0aGlzLl9fcHJpbWUsdGhpcy5fX2dlbikpLHRoaXMuX3ByaW1lQ29kZX19KSxkLnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdnx8KHRo''@;'; put 'put ''aXMuX3ByaXY9bmV3IGEoaCh0aGlzLl9wcmltZUxlbikpKSx0aGlzLl9wdWI9dGhpcy5fZ2VuLnRvUmVkKHRoaXMuX3ByaW1lKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLHRoaXMuZ2V0UHVibGljS2V5KCl9LGQucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVuY3Rpb24oXyl7dmFy''@;'; put 'put ''IEE9KF89KF89bmV3IGEoXykpLnRvUmVkKHRoaXMuX3ByaW1lKSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSxJPW5ldyBiKEEudG9BcnJheSgpKSxMPXRoaXMuZ2V0UHJpbWUoKTtpZihJLmxlbmd0aDxMLmxlbmd0aCl7dmFyIE49bmV3IGIoTC5sZW5ndGgtSS5sZW5ndGgpO04uZmls''@;'; put 'put ''bCgwKSxJPWIuY29uY2F0KFtOLEldKX1yZXR1cm4gSX0sZC5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKF8pe3JldHVybiB2KHRoaXMuX3B1YixfKX0sZC5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihfKXtyZXR1cm4gdih0aGlzLl9wcml2LF8pfSxkLnByb3RvdHlw''@;'; put 'put ''ZS5nZXRQcmltZT1mdW5jdGlvbihfKXtyZXR1cm4gdih0aGlzLl9fcHJpbWUsXyl9LGQucHJvdG90eXBlLmdldEdlbmVyYXRvcj1mdW5jdGlvbihfKXtyZXR1cm4gdih0aGlzLl9nZW4sXyl9LGQucHJvdG90eXBlLnNldEdlbmVyYXRvcj1mdW5jdGlvbihfLEEpe3JldHVybiBBPUF8fCJ1dGY4''@;'; put 'put ''IixiLmlzQnVmZmVyKF8pfHwoXz1uZXcgYihfLEEpKSx0aGlzLl9fZ2VuPV8sdGhpcy5fZ2VuPW5ldyBhKF8pLHRoaXN9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxzKCJidWZmZXIiKS5CdWZmZXIpfSx7Ii4vZ2VuZXJhdGVQcmltZSI6NDAyLCJibi5qcyI6NDA0LGJ1ZmZlcjoyMjAsIm1p''@;'; put 'put ''bGxlci1yYWJpbiI6NDUxLHJhbmRvbWJ5dGVzOjQ3NX1dLDQwMjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCJyYW5kb21ieXRlcyIpO0UuZXhwb3J0cz1fLF8uc2ltcGxlU2lldmU9ZCxfLmZlcm1hdFRlc3Q9djt2YXIgYT1zKCJibi5qcyIpLG89bmV3IGEoMjQpLHI9''@;'; put 'put ''bmV3KHMoIm1pbGxlci1yYWJpbiIpKSx0PW5ldyBhKDEpLGU9bmV3IGEoMiksbD1uZXcgYSg1KSxuPShuZXcgYSgxNiksbmV3IGEoOCksbmV3IGEoMTApKSxpPW5ldyBhKDMpLGg9KG5ldyBhKDcpLG5ldyBhKDExKSksZj1uZXcgYSg0KSx1PShuZXcgYSgxMiksbnVsbCk7ZnVuY3Rpb24gZChB''@;'; put 'put ''KXtmb3IodmFyIEk9ZnVuY3Rpb24gcCgpe2lmKG51bGwhPT11KXJldHVybiB1O3ZhciBBPVtdO0FbMF09Mjtmb3IodmFyIEk9MSxMPTM7TDwxMDQ4NTc2O0wrPTIpe2Zvcih2YXIgTj1NYXRoLmNlaWwoTWF0aC5zcXJ0KEwpKSxQPTA7UDxJJiZBW1BdPD1OJiZMJUFbUF0hPTA7UCsrKTtJIT09''@;'; put 'put ''UCYmQVtQXTw9Tnx8KEFbSSsrXT1MKX1yZXR1cm4gdT1BLEF9KCksTD0wO0w8SS5sZW5ndGg7TCsrKWlmKDA9PT1BLm1vZG4oSVtMXSkpcmV0dXJuIDA9PT1BLmNtcG4oSVtMXSk7cmV0dXJuITB9ZnVuY3Rpb24gdihBKXt2YXIgST1hLm1vbnQoQSk7cmV0dXJuIDA9PT1lLnRvUmVkKEkpLnJl''@;'; put 'put ''ZFBvdyhBLnN1Ym4oMSkpLmZyb21SZWQoKS5jbXBuKDEpfWZ1bmN0aW9uIF8oQSxJKXtpZihBPDE2KXJldHVybiBuZXcgYSgyPT09SXx8NT09PUk/WzE0MCwxMjNdOlsxNDAsMzldKTt2YXIgTCxOO2ZvcihJPW5ldyBhKEkpOzspe2ZvcihMPW5ldyBhKGIoTWF0aC5jZWlsKEEvOCkpKTtMLmJp''@;'; put 'put ''dExlbmd0aCgpPkE7KUwuaXNocm4oMSk7aWYoTC5pc0V2ZW4oKSYmTC5pYWRkKHQpLEwudGVzdG4oMSl8fEwuaWFkZChlKSxJLmNtcChlKSl7aWYoIUkuY21wKGwpKWZvcig7TC5tb2QobikuY21wKGkpOylMLmlhZGQoZil9ZWxzZSBmb3IoO0wubW9kKG8pLmNtcChoKTspTC5pYWRkKGYpO2lm''@;'; put 'put ''KGQoTj1MLnNocm4oMSkpJiZkKEwpJiZ2KE4pJiZ2KEwpJiZyLnRlc3QoTikmJnIudGVzdChMKSlyZXR1cm4gTH19fSx7ImJuLmpzIjo0MDQsIm1pbGxlci1yYWJpbiI6NDUxLHJhbmRvbWJ5dGVzOjQ3NX1dLDQwMzpbZnVuY3Rpb24ocyxFLFMpe0UuZXhwb3J0cz17bW9kcDE6e2dlbjoiMDIi''@;'; put 'put ''LHByaW1lOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3''@;'; put 'put ''ZWM2ZjQ0YzQyZTlhNjNhMzYyMGZmZmZmZmZmZmZmZmZmZmYifSxtb2RwMjp7Z2VuOiIwMiIscHJpbWU6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIz''@;'; put 'put ''Y2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U2NTM4MWZmZmZmZmZmZmZmZmZmZmYifSxtb2RwNTp7Z2Vu''@;'; put 'put ''OiIwMiIscHJpbWU6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2''@;'; put 'put ''NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1''@;'; put 'put ''MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMjM3MzI3ZmZmZmZmZmZmZmZmZmZmZiJ9LG1vZHAxNDp7Z2VuOiIwMiIscHJpbWU6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVh''@;'; put 'put ''NjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0''@;'; put 'put ''NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5''@;'; put 'put ''YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhY2FhNjhmZmZmZmZmZmZmZmZmZmZmIn0sbW9kcDE1OntnZW46IjAyIixwcmltZToiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2''@;'; put 'put ''OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2Vk''@;'; put 'put ''ZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2''@;'; put 'put ''YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRm''@;'; put 'put ''MWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2''@;'; put 'put ''Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkzYWQyY2FmZmZmZmZmZmZmZmZmZmZmIn0sbW9kcDE2OntnZW46IjAyIixwcmltZToiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4''@;'; put 'put ''YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFm''@;'; put 'put ''ZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5''@;'; put 'put ''ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3''@;'; put 'put ''NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVh''@;'; put 'put ''YjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5''@;'; put 'put ''YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDYzMTk5ZmZmZmZmZmZmZmZmZmZmZiJ9LG1vZHAxNzp7Z2VuOiIwMiIscHJp''@;'; put 'put ''bWU6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZm''@;'; put 'put ''NDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5''@;'; put 'put ''MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFh''@;'; put 'put ''YWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0''@;'; put 'put ''NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNl''@;'; put 'put ''OWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkw''@;'; put 'put ''YTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIx''@;'; put 'put ''YmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFk''@;'; put 'put ''NDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYz''@;'; put 'put ''ZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkY2M0MDI0ZmZmZmZmZmZmZmZmZmZmZiJ9LG1vZHAxODp7Z2VuOiIwMiIscHJpbWU6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0''@;'; put 'put ''YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4''@;'; put 'put ''YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdh''@;'; put 'put ''MjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2Fi''@;'; put 'put ''ZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEy''@;'; put 'put ''MGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTVi''@;'; put 'put ''ZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVl''@;'; put 'put ''NWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3''@;'; put 'put ''Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdj''@;'; put 'put ''NWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkYmUxMTU5NzRhMzkyNmYxMmZlZTVlNDM4Nzc3Y2I2YTkzMmRmOGNkOGJlYzRkMDczYjkzMWJh''@;'; put 'put ''M2JjODMyYjY4ZDlkZDMwMDc0MWZhN2JmOGFmYzQ3ZWQyNTc2ZjY5MzZiYTQyNDY2M2FhYjYzOWM1YWU0ZjU2ODM0MjNiNDc0MmJmMWM5NzgyMzhmMTZjYmUzOWQ2NTJkZTNmZGI4YmVmYzg0OGFkOTIyMjIyZTA0YTQwMzdjMDcxM2ViNTdhODFhMjNmMGM3MzQ3M2ZjNjQ2Y2VhMzA2YjRiY2Jj''@;'; put 'put ''ODg2MmY4Mzg1ZGRmYTlkNGI3ZmEyYzA4N2U4Nzk2ODMzMDNlZDViZGQzYTA2MmIzY2Y1YjNhMjc4YTY2ZDJhMTNmODNmNDRmODJkZGYzMTBlZTA3NGFiNmEzNjQ1OTdlODk5YTAyNTVkYzE2NGYzMWNjNTA4NDY4NTFkZjlhYjQ4MTk1ZGVkN2VhMWIxZDUxMGJkN2VlNzRkNzNmYWYzNmJjMzFl''@;'; put 'put ''Y2ZhMjY4MzU5MDQ2ZjRlYjg3OWY5MjQwMDk0MzhiNDgxYzZjZDc4ODlhMDAyZWQ1ZWUzODJiYzkxOTBkYTZmYzAyNmU0Nzk1NThlNDQ3NTY3N2U5YWE5ZTMwNTBlMjc2NTY5NGRmYzgxZjU2ZTg4MGI5NmU3MTYwYzk4MGRkOThlZGQzZGZmZmZmZmZmZmZmZmZmZmZmIn19fSx7fV0sNDA0Oltm''@;'; put 'put ''dW5jdGlvbihzLEUsUyl7YXJndW1lbnRzWzRdWzE4NF1bMF0uYXBwbHkoUyxhcmd1bWVudHMpfSx7YnVmZmVyOjE4OCxkdXA6MTg0fV0sNDA1OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPVM7Yi52ZXJzaW9uPXMoIi4uL3BhY2thZ2UuanNvbiIpLnZlcnNpb24sYi51dGls''@;'; put 'put ''cz1zKCIuL2VsbGlwdGljL3V0aWxzIiksYi5yYW5kPXMoImJyb3JhbmQiKSxiLmN1cnZlPXMoIi4vZWxsaXB0aWMvY3VydmUiKSxiLmN1cnZlcz1zKCIuL2VsbGlwdGljL2N1cnZlcyIpLGIuZWM9cygiLi9lbGxpcHRpYy9lYyIpLGIuZWRkc2E9cygiLi9lbGxpcHRpYy9lZGRzYSIpfSx7Ii4u''@;'; put 'put ''L3BhY2thZ2UuanNvbiI6NDIxLCIuL2VsbGlwdGljL2N1cnZlIjo0MDgsIi4vZWxsaXB0aWMvY3VydmVzIjo0MTEsIi4vZWxsaXB0aWMvZWMiOjQxMiwiLi9lbGxpcHRpYy9lZGRzYSI6NDE1LCIuL2VsbGlwdGljL3V0aWxzIjo0MTksYnJvcmFuZDoxODd9XSw0MDY6W2Z1bmN0aW9uKHMsRSxT''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIGI9cygiYm4uanMiKSxhPXMoIi4uL3V0aWxzIiksbz1hLmdldE5BRixyPWEuZ2V0SlNGLHQ9YS5hc3NlcnQ7ZnVuY3Rpb24gZShuLGkpe3RoaXMudHlwZT1uLHRoaXMucD1uZXcgYihpLnAsMTYpLHRoaXMucmVkPWkucHJpbWU/Yi5yZWQoaS5wcmltZSk6Yi5t''@;'; put 'put ''b250KHRoaXMucCksdGhpcy56ZXJvPW5ldyBiKDApLnRvUmVkKHRoaXMucmVkKSx0aGlzLm9uZT1uZXcgYigxKS50b1JlZCh0aGlzLnJlZCksdGhpcy50d289bmV3IGIoMikudG9SZWQodGhpcy5yZWQpLHRoaXMubj1pLm4mJm5ldyBiKGkubiwxNiksdGhpcy5nPWkuZyYmdGhpcy5wb2ludEZy''@;'; put 'put ''b21KU09OKGkuZyxpLmdSZWQpLHRoaXMuX3duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQyPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDM9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUND1uZXcgQXJyYXkoNCksdGhpcy5fYml0TGVuZ3RoPXRoaXMubj90aGlzLm4uYml0TGVuZ3RoKCk6''@;'; put 'put ''MDt2YXIgaD10aGlzLm4mJnRoaXMucC5kaXYodGhpcy5uKTshaHx8aC5jbXBuKDEwMCk+MD90aGlzLnJlZE49bnVsbDoodGhpcy5fbWF4d2VsbFRyaWNrPSEwLHRoaXMucmVkTj10aGlzLm4udG9SZWQodGhpcy5yZWQpKX1mdW5jdGlvbiBsKG4saSl7dGhpcy5jdXJ2ZT1uLHRoaXMudHlwZT1p''@;'; put 'put ''LHRoaXMucHJlY29tcHV0ZWQ9bnVsbH1FLmV4cG9ydHM9ZSxlLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LGUucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQi''@;'; put 'put ''KX0sZS5wcm90b3R5cGUuX2ZpeGVkTmFmTXVsPWZ1bmN0aW9uKG4saSl7dChuLnByZWNvbXB1dGVkKTt2YXIgaD1uLl9nZXREb3VibGVzKCksZj1vKGksMSx0aGlzLl9iaXRMZW5ndGgpLHU9KDE8PGguc3RlcCsxKS0oaC5zdGVwJTI9PTA/MjoxKTt1Lz0zO3ZhciBwLGQsdj1bXTtmb3IocD0w''@;'; put 'put ''O3A8Zi5sZW5ndGg7cCs9aC5zdGVwKXtkPTA7Zm9yKHZhciBfPXAraC5zdGVwLTE7Xz49cDtfLS0pZD0oZDw8MSkrZltfXTt2LnB1c2goZCl9Zm9yKHZhciBBPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxJPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxMPXU7TD4wO0wtLSl7Zm9y''@;'; put 'put ''KHA9MDtwPHYubGVuZ3RoO3ArKykoZD12W3BdKT09PUw/ST1JLm1peGVkQWRkKGgucG9pbnRzW3BdKTpkPT09LUwmJihJPUkubWl4ZWRBZGQoaC5wb2ludHNbcF0ubmVnKCkpKTtBPUEuYWRkKEkpfXJldHVybiBBLnRvUCgpfSxlLnByb3RvdHlwZS5fd25hZk11bD1mdW5jdGlvbihuLGkpe2Zv''@;'; put 'put ''cih2YXIgaD00LGY9bi5fZ2V0TkFGUG9pbnRzKGgpLHU9Zi5wb2ludHMscD1vKGksaD1mLnduZCx0aGlzLl9iaXRMZW5ndGgpLGQ9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHY9cC5sZW5ndGgtMTt2Pj0wO3YtLSl7Zm9yKHZhciBfPTA7dj49MCYmMD09PXBbdl07di0tKV8rKztpZih2''@;'; put 'put ''Pj0wJiZfKyssZD1kLmRibHAoXyksdjwwKWJyZWFrO3ZhciBBPXBbdl07dCgwIT09QSksZD0iYWZmaW5lIj09PW4udHlwZT9kLm1peGVkQWRkKEE+MD91W0EtMT4+MV06dVstQS0xPj4xXS5uZWcoKSk6ZC5hZGQoQT4wP3VbQS0xPj4xXTp1Wy1BLTE+PjFdLm5lZygpKX1yZXR1cm4iYWZmaW5l''@;'; put 'put ''Ij09PW4udHlwZT9kLnRvUCgpOmR9LGUucHJvdG90eXBlLl93bmFmTXVsQWRkPWZ1bmN0aW9uKG4saSxoLGYsdSl7dmFyIHAsZCx2LF89dGhpcy5fd25hZlQxLEE9dGhpcy5fd25hZlQyLEk9dGhpcy5fd25hZlQzLEw9MDtmb3IocD0wO3A8ZjtwKyspe3ZhciBOPSh2PWlbcF0pLl9nZXROQUZQ''@;'; put 'put ''b2ludHMobik7X1twXT1OLnduZCxBW3BdPU4ucG9pbnRzfWZvcihwPWYtMTtwPj0xO3AtPTIpe3ZhciBQPXAtMSxCPXA7aWYoMT09PV9bUF0mJjE9PT1fW0JdKXt2YXIgJD1baVtQXSxudWxsLG51bGwsaVtCXV07MD09PWlbUF0ueS5jbXAoaVtCXS55KT8oJFsxXT1pW1BdLmFkZChpW0JdKSwk''@;'; put 'put ''WzJdPWlbUF0udG9KKCkubWl4ZWRBZGQoaVtCXS5uZWcoKSkpOjA9PT1pW1BdLnkuY21wKGlbQl0ueS5yZWROZWcoKSk/KCRbMV09aVtQXS50b0ooKS5taXhlZEFkZChpW0JdKSwkWzJdPWlbUF0uYWRkKGlbQl0ubmVnKCkpKTooJFsxXT1pW1BdLnRvSigpLm1peGVkQWRkKGlbQl0pLCRbMl09''@;'; put 'put ''aVtQXS50b0ooKS5taXhlZEFkZChpW0JdLm5lZygpKSk7dmFyIEQ9Wy0zLC0xLC01LC03LDAsNyw1LDEsM10seD1yKGhbUF0saFtCXSk7Zm9yKEw9TWF0aC5tYXgoeFswXS5sZW5ndGgsTCksSVtQXT1uZXcgQXJyYXkoTCksSVtCXT1uZXcgQXJyYXkoTCksZD0wO2Q8TDtkKyspSVtQXVtkXT1E''@;'; put 'put ''WzMqKDErKDB8eFswXVtkXSkpKygxKygwfHhbMV1bZF0pKV0sSVtCXVtkXT0wLEFbUF09JH1lbHNlIElbUF09byhoW1BdLF9bUF0sdGhpcy5fYml0TGVuZ3RoKSxJW0JdPW8oaFtCXSxfW0JdLHRoaXMuX2JpdExlbmd0aCksTD1NYXRoLm1heChJW1BdLmxlbmd0aCxMKSxMPU1hdGgubWF4KElb''@;'; put 'put ''Ql0ubGVuZ3RoLEwpfXZhciBjPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxtPXRoaXMuX3duYWZUNDtmb3IocD1MO3A+PTA7cC0tKXtmb3IodmFyIGc9MDtwPj0wOyl7dmFyIHk9ITA7Zm9yKGQ9MDtkPGY7ZCsrKW1bZF09MHxJW2RdW3BdLDAhPT1tW2RdJiYoeT0hMSk7aWYoIXkpYnJl''@;'; put 'put ''YWs7ZysrLHAtLX1pZihwPj0wJiZnKyssYz1jLmRibHAoZykscDwwKWJyZWFrO2ZvcihkPTA7ZDxmO2QrKyl7dmFyIHc9bVtkXTswIT09dyYmKHc+MD92PUFbZF1bdy0xPj4xXTp3PDAmJih2PUFbZF1bLXctMT4+MV0ubmVnKCkpLGM9ImFmZmluZSI9PT12LnR5cGU/Yy5taXhlZEFkZCh2KTpj''@;'; put 'put ''LmFkZCh2KSl9fWZvcihwPTA7cDxmO3ArKylBW3BdPW51bGw7cmV0dXJuIHU/YzpjLnRvUCgpfSxlLkJhc2VQb2ludD1sLGwucHJvdG90eXBlLmVxPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sbC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKX0sZS5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24obixpKXtuPWEudG9BcnJheShuLGkpO3ZhciBoPXRoaXMucC5ieXRlTGVuZ3RoKCk7aWYoKDQ9PT1uWzBdfHw2PT09blswXXx8Nz09PW5bMF0pJiZuLmxlbmd0aC0xPT0yKmgp''@;'; put 'put ''cmV0dXJuIDY9PT1uWzBdP3QobltuLmxlbmd0aC0xXSUyPT0wKTo3PT09blswXSYmdChuW24ubGVuZ3RoLTFdJTI9PTEpLHRoaXMucG9pbnQobi5zbGljZSgxLDEraCksbi5zbGljZSgxK2gsMSsyKmgpKTtpZigoMj09PW5bMF18fDM9PT1uWzBdKSYmbi5sZW5ndGgtMT09PWgpcmV0dXJuIHRo''@;'; put 'put ''aXMucG9pbnRGcm9tWChuLnNsaWNlKDEsMStoKSwzPT09blswXSk7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHBvaW50IGZvcm1hdCIpfSxsLnByb3RvdHlwZS5lbmNvZGVDb21wcmVzc2VkPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVuY29kZShuLCEwKX0sbC5wcm90b3R5cGUuX2VuY29k''@;'; put 'put ''ZT1mdW5jdGlvbihuKXt2YXIgaT10aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpLGg9dGhpcy5nZXRYKCkudG9BcnJheSgiYmUiLGkpO3JldHVybiBuP1t0aGlzLmdldFkoKS5pc0V2ZW4oKT8yOjNdLmNvbmNhdChoKTpbNF0uY29uY2F0KGgsdGhpcy5nZXRZKCkudG9BcnJheSgiYmUiLGkpKX0s''@;'; put 'put ''bC5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKG4saSl7cmV0dXJuIGEuZW5jb2RlKHRoaXMuX2VuY29kZShpKSxuKX0sbC5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbihuKXtpZih0aGlzLnByZWNvbXB1dGVkKXJldHVybiB0aGlzO3ZhciBpPXtkb3VibGVzOm51bGwsbmFmOm51bGws''@;'; put 'put ''YmV0YTpudWxsfTtyZXR1cm4gaS5uYWY9dGhpcy5fZ2V0TkFGUG9pbnRzKDgpLGkuZG91Ymxlcz10aGlzLl9nZXREb3VibGVzKDQsbiksaS5iZXRhPXRoaXMuX2dldEJldGEoKSx0aGlzLnByZWNvbXB1dGVkPWksdGhpc30sbC5wcm90b3R5cGUuX2hhc0RvdWJsZXM9ZnVuY3Rpb24obil7aWYo''@;'; put 'put ''IXRoaXMucHJlY29tcHV0ZWQpcmV0dXJuITE7dmFyIGk9dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO3JldHVybiEhaSYmaS5wb2ludHMubGVuZ3RoPj1NYXRoLmNlaWwoKG4uYml0TGVuZ3RoKCkrMSkvaS5zdGVwKX0sbC5wcm90b3R5cGUuX2dldERvdWJsZXM9ZnVuY3Rpb24obixpKXtpZih0''@;'; put 'put ''aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcztmb3IodmFyIGg9W3RoaXNdLGY9dGhpcyx1PTA7dTxpO3UrPW4pe2Zvcih2YXIgcD0wO3A8bjtwKyspZj1mLmRibCgpO2gucHVzaChmKX1yZXR1cm57c3RlcDpu''@;'; put 'put ''LHBvaW50czpofX0sbC5wcm90b3R5cGUuX2dldE5BRlBvaW50cz1mdW5jdGlvbihuKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLm5hZilyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7Zm9yKHZhciBpPVt0aGlzXSxoPSgxPDxuKS0xLGY9MT09PWg/bnVsbDp0aGlz''@;'; put 'put ''LmRibCgpLHU9MTt1PGg7dSsrKWlbdV09aVt1LTFdLmFkZChmKTtyZXR1cm57d25kOm4scG9pbnRzOml9fSxsLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKG4pe2Zvcih2YXIgaT10aGlzLGg9MDtoPG47aCsrKWk9''@;'; put 'put ''aS5kYmwoKTtyZXR1cm4gaX19LHsiLi4vdXRpbHMiOjQxOSwiYm4uanMiOjQyMH1dLDQwNzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi91dGlscyIpLGE9cygiYm4uanMiKSxvPXMoImluaGVyaXRzIikscj1zKCIuL2Jhc2UiKSx0PWIuYXNzZXJ0O2Z1bmN0aW9u''@;'; put 'put ''IGUobil7dGhpcy50d2lzdGVkPTEhPSgwfG4uYSksdGhpcy5tT25lQT10aGlzLnR3aXN0ZWQmJi0xPT0oMHxuLmEpLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxyLmNhbGwodGhpcywiZWR3YXJkcyIsbiksdGhpcy5hPW5ldyBhKG4uYSwxNikudW1vZCh0aGlzLnJlZC5tKSx0aGlzLmE9dGhp''@;'; put 'put ''cy5hLnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3IGEobi5jLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyBhKG4uZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJlZEFkZCh0aGlzLmQpLHQoIXRoaXMudHdpc3RlZHx8''@;'; put 'put ''MD09PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PSgwfG4uYyl9ZnVuY3Rpb24gbChuLGksaCxmLHUpe3IuQmFzZVBvaW50LmNhbGwodGhpcyxuLCJwcm9qZWN0aXZlIiksbnVsbD09PWkmJm51bGw9PT1oJiZudWxsPT09Zj8odGhpcy54PXRoaXMuY3VydmUuemVybyx0''@;'; put 'put ''aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMudD10aGlzLmN1cnZlLnplcm8sdGhpcy56T25lPSEwKToodGhpcy54PW5ldyBhKGksMTYpLHRoaXMueT1uZXcgYShoLDE2KSx0aGlzLno9Zj9uZXcgYShmLDE2KTp0aGlzLmN1cnZlLm9uZSx0aGlzLnQ9dSYm''@;'; put 'put ''bmV3IGEodSwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhp''@;'; put 'put ''cy50JiYhdGhpcy50LnJlZCYmKHRoaXMudD10aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRlZCYmIXRoaXMudCYmKHRoaXMudD10aGlzLngucmVkTXVsKHRoaXMueSksdGhpcy56T25lfHwodGhp''@;'; put 'put ''cy50PXRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSkpKSl9byhlLHIpLEUuZXhwb3J0cz1lLGUucHJvdG90eXBlLl9tdWxBPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLm1PbmVBP24ucmVkTmVnKCk6dGhpcy5hLnJlZE11bChuKX0sZS5wcm90b3R5cGUuX211bEM9ZnVuY3Rpb24obil7''@;'; put 'put ''cmV0dXJuIHRoaXMub25lQz9uOnRoaXMuYy5yZWRNdWwobil9LGUucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihuLGksaCxmKXtyZXR1cm4gdGhpcy5wb2ludChuLGksaCxmKX0sZS5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbihuLGkpeyhuPW5ldyBhKG4sMTYpKS5yZWR8fChuPW4u''@;'; put 'put ''dG9SZWQodGhpcy5yZWQpKTt2YXIgaD1uLnJlZFNxcigpLGY9dGhpcy5jMi5yZWRTdWIodGhpcy5hLnJlZE11bChoKSksdT10aGlzLm9uZS5yZWRTdWIodGhpcy5jMi5yZWRNdWwodGhpcy5kKS5yZWRNdWwoaCkpLHA9Zi5yZWRNdWwodS5yZWRJbnZtKCkpLGQ9cC5yZWRTcXJ0KCk7aWYoMCE9''@;'; put 'put ''PWQucmVkU3FyKCkucmVkU3ViKHApLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciB2PWQuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKGkmJiF2fHwhaSYmdikmJihkPWQucmVkTmVnKCkpLHRoaXMucG9pbnQobixkKX0sZS5wcm90b3R5cGUucG9p''@;'; put 'put ''bnRGcm9tWT1mdW5jdGlvbihuLGkpeyhuPW5ldyBhKG4sMTYpKS5yZWR8fChuPW4udG9SZWQodGhpcy5yZWQpKTt2YXIgaD1uLnJlZFNxcigpLGY9aC5yZWRTdWIodGhpcy5jMiksdT1oLnJlZE11bCh0aGlzLmQpLnJlZE11bCh0aGlzLmMyKS5yZWRTdWIodGhpcy5hKSxwPWYucmVkTXVsKHUu''@;'; put 'put ''cmVkSW52bSgpKTtpZigwPT09cC5jbXAodGhpcy56ZXJvKSl7aWYoaSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gdGhpcy5wb2ludCh0aGlzLnplcm8sbil9dmFyIGQ9cC5yZWRTcXJ0KCk7aWYoMCE9PWQucmVkU3FyKCkucmVkU3ViKHApLmNtcCh0aGlzLnplcm8p''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3JldHVybiBkLmZyb21SZWQoKS5pc09kZCgpIT09aSYmKGQ9ZC5yZWROZWcoKSksdGhpcy5wb2ludChkLG4pfSxlLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihuKXtpZihuLmlzSW5maW5pdHkoKSlyZXR1cm4hMDtuLm5vcm1h''@;'; put 'put ''bGl6ZSgpO3ZhciBpPW4ueC5yZWRTcXIoKSxoPW4ueS5yZWRTcXIoKSxmPWkucmVkTXVsKHRoaXMuYSkucmVkQWRkKGgpLHU9dGhpcy5jMi5yZWRNdWwodGhpcy5vbmUucmVkQWRkKHRoaXMuZC5yZWRNdWwoaSkucmVkTXVsKGgpKSk7cmV0dXJuIDA9PT1mLmNtcCh1KX0sbyhsLHIuQmFzZVBv''@;'; put 'put ''aW50KSxlLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKG4pe3JldHVybiBsLmZyb21KU09OKHRoaXMsbil9LGUucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKG4saSxoLGYpe3JldHVybiBuZXcgbCh0aGlzLG4saSxoLGYpfSxsLmZyb21KU09OPWZ1bmN0aW9uKG4saSl7cmV0dXJu''@;'; put 'put ''IG5ldyBsKG4saVswXSxpWzFdLGlbMl0pfSxsLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55''@;'; put 'put ''LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LGwucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMueC5jbXBuKDApJiYoMD09PXRoaXMueS5jbXAodGhpcy56KXx8dGhpcy56T25l''@;'; put 'put ''JiYwPT09dGhpcy55LmNtcCh0aGlzLmN1cnZlLmMpKX0sbC5wcm90b3R5cGUuX2V4dERibD1mdW5jdGlvbigpe3ZhciBuPXRoaXMueC5yZWRTcXIoKSxpPXRoaXMueS5yZWRTcXIoKSxoPXRoaXMuei5yZWRTcXIoKTtoPWgucmVkSUFkZChoKTt2YXIgZj10aGlzLmN1cnZlLl9tdWxBKG4pLHU9''@;'; put 'put ''dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLnJlZElTdWIobikucmVkSVN1YihpKSxwPWYucmVkQWRkKGkpLGQ9cC5yZWRTdWIoaCksdj1mLnJlZFN1YihpKSxfPXUucmVkTXVsKGQpLEE9cC5yZWRNdWwodiksST11LnJlZE11bCh2KSxMPWQucmVkTXVsKHApO3JldHVybiB0aGlzLmN1''@;'; put 'put ''cnZlLnBvaW50KF8sQSxMLEkpfSxsLnByb3RvdHlwZS5fcHJvakRibD1mdW5jdGlvbigpe3ZhciBuLGksaCxmLHUscCxkPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKSx2PXRoaXMueC5yZWRTcXIoKSxfPXRoaXMueS5yZWRTcXIoKTtpZih0aGlzLmN1cnZlLnR3aXN0ZWQpe3ZhciBB''@;'; put 'put ''PShmPXRoaXMuY3VydmUuX211bEEodikpLnJlZEFkZChfKTt0aGlzLnpPbmU/KG49ZC5yZWRTdWIodikucmVkU3ViKF8pLnJlZE11bChBLnJlZFN1Yih0aGlzLmN1cnZlLnR3bykpLGk9QS5yZWRNdWwoZi5yZWRTdWIoXykpLGg9QS5yZWRTcXIoKS5yZWRTdWIoQSkucmVkU3ViKEEpKToodT10''@;'; put 'put ''aGlzLnoucmVkU3FyKCkscD1BLnJlZFN1Yih1KS5yZWRJU3ViKHUpLG49ZC5yZWRTdWIodikucmVkSVN1YihfKS5yZWRNdWwocCksaT1BLnJlZE11bChmLnJlZFN1YihfKSksaD1BLnJlZE11bChwKSl9ZWxzZSBmPXYucmVkQWRkKF8pLHU9dGhpcy5jdXJ2ZS5fbXVsQyh0aGlzLnopLnJlZFNx''@;'; put 'put ''cigpLHA9Zi5yZWRTdWIodSkucmVkU3ViKHUpLG49dGhpcy5jdXJ2ZS5fbXVsQyhkLnJlZElTdWIoZikpLnJlZE11bChwKSxpPXRoaXMuY3VydmUuX211bEMoZikucmVkTXVsKHYucmVkSVN1YihfKSksaD1mLnJlZE11bChwKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChuLGksaCl9LGwucHJv''@;'; put 'put ''dG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0RGJsKCk6dGhpcy5fcHJvakRibCgpfSxsLnByb3RvdHlwZS5fZXh0QWRkPWZ1bmN0aW9uKG4pe3ZhciBpPXRoaXMueS5yZWRTdWIodGhpcy54KS5y''@;'; put 'put ''ZWRNdWwobi55LnJlZFN1YihuLngpKSxoPXRoaXMueS5yZWRBZGQodGhpcy54KS5yZWRNdWwobi55LnJlZEFkZChuLngpKSxmPXRoaXMudC5yZWRNdWwodGhpcy5jdXJ2ZS5kZCkucmVkTXVsKG4udCksdT10aGlzLnoucmVkTXVsKG4uei5yZWRBZGQobi56KSkscD1oLnJlZFN1YihpKSxkPXUu''@;'; put 'put ''cmVkU3ViKGYpLHY9dS5yZWRBZGQoZiksXz1oLnJlZEFkZChpKSxBPXAucmVkTXVsKGQpLEk9di5yZWRNdWwoXyksTD1wLnJlZE11bChfKSxOPWQucmVkTXVsKHYpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEEsSSxOLEwpfSxsLnByb3RvdHlwZS5fcHJvakFkZD1mdW5jdGlvbihuKXt2YXIg''@;'; put 'put ''aSxoLGY9dGhpcy56LnJlZE11bChuLnopLHU9Zi5yZWRTcXIoKSxwPXRoaXMueC5yZWRNdWwobi54KSxkPXRoaXMueS5yZWRNdWwobi55KSx2PXRoaXMuY3VydmUuZC5yZWRNdWwocCkucmVkTXVsKGQpLF89dS5yZWRTdWIodiksQT11LnJlZEFkZCh2KSxJPXRoaXMueC5yZWRBZGQodGhpcy55''@;'; put 'put ''KS5yZWRNdWwobi54LnJlZEFkZChuLnkpKS5yZWRJU3ViKHApLnJlZElTdWIoZCksTD1mLnJlZE11bChfKS5yZWRNdWwoSSk7cmV0dXJuIHRoaXMuY3VydmUudHdpc3RlZD8oaT1mLnJlZE11bChBKS5yZWRNdWwoZC5yZWRTdWIodGhpcy5jdXJ2ZS5fbXVsQShwKSkpLGg9Xy5yZWRNdWwoQSkp''@;'; put 'put ''OihpPWYucmVkTXVsKEEpLnJlZE11bChkLnJlZFN1YihwKSksaD10aGlzLmN1cnZlLl9tdWxDKF8pLnJlZE11bChBKSksdGhpcy5jdXJ2ZS5wb2ludChMLGksaCl9LGwucHJvdG90eXBlLmFkZD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/bjpuLmlzSW5maW5pdHkoKT90''@;'; put 'put ''aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0QWRkKG4pOnRoaXMuX3Byb2pBZGQobil9LGwucHJvdG90eXBlLm11bD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5faGFzRG91YmxlcyhuKT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLG4pOnRoaXMuY3VydmUuX3duYWZNdWwo''@;'; put 'put ''dGhpcyxuKX0sbC5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKG4saSxoKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLGldLFtuLGhdLDIsITEpfSxsLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKG4saSxoKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgx''@;'; put 'put ''LFt0aGlzLGldLFtuLGhdLDIsITApfSxsLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnpPbmUpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy56LnJlZEludm0oKTtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwobiksdGhpcy55PXRoaXMueS5yZWRNdWwobiksdGhpcy50''@;'; put 'put ''JiYodGhpcy50PXRoaXMudC5yZWRNdWwobikpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnpPbmU9ITAsdGhpc30sbC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygpLHRoaXMueSx0aGlzLnosdGhpcy50JiZ0aGlzLnQu''@;'; put 'put ''cmVkTmVnKCkpfSxsLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX0sbC5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueS5mcm9tUmVkKCl9LGwucHJvdG90eXBlLmVx''@;'; put 'put ''PWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzPT09bnx8MD09PXRoaXMuZ2V0WCgpLmNtcChuLmdldFgoKSkmJjA9PT10aGlzLmdldFkoKS5jbXAobi5nZXRZKCkpfSxsLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24obil7dmFyIGk9bi50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKHRoaXMu''@;'; put 'put ''eik7aWYoMD09PXRoaXMueC5jbXAoaSkpcmV0dXJuITA7Zm9yKHZhciBoPW4uY2xvbmUoKSxmPXRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTs7KXtpZihoLmlhZGQodGhpcy5jdXJ2ZS5uKSxoLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKGkucmVkSUFkZChmKSwwPT09''@;'; put 'put ''dGhpcy54LmNtcChpKSlyZXR1cm4hMH19LGwucHJvdG90eXBlLnRvUD1sLnByb3RvdHlwZS5ub3JtYWxpemUsbC5wcm90b3R5cGUubWl4ZWRBZGQ9bC5wcm90b3R5cGUuYWRkfSx7Ii4uL3V0aWxzIjo0MTksIi4vYmFzZSI6NDA2LCJibi5qcyI6NDIwLGluaGVyaXRzOjQ0MH1dLDQwODpbZnVu''@;'; put 'put ''Y3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1TO2IuYmFzZT1zKCIuL2Jhc2UiKSxiLnNob3J0PXMoIi4vc2hvcnQiKSxiLm1vbnQ9cygiLi9tb250IiksYi5lZHdhcmRzPXMoIi4vZWR3YXJkcyIpfSx7Ii4vYmFzZSI6NDA2LCIuL2Vkd2FyZHMiOjQwNywiLi9tb250Ijo0MDksIi4v''@;'; put 'put ''c2hvcnQiOjQxMH1dLDQwOTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCJibi5qcyIpLGE9cygiaW5oZXJpdHMiKSxvPXMoIi4vYmFzZSIpLHI9cygiLi4vdXRpbHMiKTtmdW5jdGlvbiB0KGwpe28uY2FsbCh0aGlzLCJtb250IixsKSx0aGlzLmE9bmV3IGIobC5hLDE2''@;'; put 'put ''KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBiKGwuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuaTQ9bmV3IGIoNCkudG9SZWQodGhpcy5yZWQpLnJlZEludm0oKSx0aGlzLnR3bz1uZXcgYigyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5hMjQ9dGhpcy5pNC5yZWRNdWwodGhpcy5hLnJl''@;'; put 'put ''ZEFkZCh0aGlzLnR3bykpfWZ1bmN0aW9uIGUobCxuLGkpe28uQmFzZVBvaW50LmNhbGwodGhpcyxsLCJwcm9qZWN0aXZlIiksbnVsbD09PW4mJm51bGw9PT1pPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUuemVybyk6KHRoaXMueD1uZXcgYihuLDE2KSx0aGlzLno9''@;'; put 'put ''bmV3IGIoaSwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpKX1hKHQsbyksRS5leHBvcnRzPXQsdC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24obCl7''@;'; put 'put ''dmFyIG49bC5ub3JtYWxpemUoKS54LGk9bi5yZWRTcXIoKSxoPWkucmVkTXVsKG4pLnJlZEFkZChpLnJlZE11bCh0aGlzLmEpKS5yZWRBZGQobik7cmV0dXJuIDA9PT1oLnJlZFNxcnQoKS5yZWRTcXIoKS5jbXAoaCl9LGEoZSxvLkJhc2VQb2ludCksdC5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9''@;'; put 'put ''ZnVuY3Rpb24obCxuKXtyZXR1cm4gdGhpcy5wb2ludChyLnRvQXJyYXkobCxuKSwxKX0sdC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24obCxuKXtyZXR1cm4gbmV3IGUodGhpcyxsLG4pfSx0LnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKGwpe3JldHVybiBlLmZyb21KU09OKHRo''@;'; put 'put ''aXMsbCl9LGUucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkudG9BcnJheSgiYmUiLHRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkpfSxlLmZyb21KU09OPWZ1bmN0aW9uKGwsbil7cmV0dXJu''@;'; put 'put ''IG5ldyBlKGwsblswXSxuWzFdfHxsLm9uZSl9LGUucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlz''@;'; put 'put ''LnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sZS5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9LGUucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3ZhciBsPXRoaXMueC5yZWRBZGQodGhpcy56KS5yZWRTcXIoKSxuPXRoaXMu''@;'; put 'put ''eC5yZWRTdWIodGhpcy56KS5yZWRTcXIoKSxpPWwucmVkU3ViKG4pLGg9bC5yZWRNdWwobiksZj1pLnJlZE11bChuLnJlZEFkZCh0aGlzLmN1cnZlLmEyNC5yZWRNdWwoaSkpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChoLGYpfSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oKXt0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxlLnByb3RvdHlwZS5kaWZmQWRkPWZ1bmN0aW9uKGwsbil7dmFyIGk9dGhpcy54LnJlZEFkZCh0aGlzLnopLGg9dGhpcy54LnJlZFN1Yih0aGlzLnopLGY9bC54LnJlZEFkZChsLnopLHU9bC54LnJlZFN1Yihs''@;'; put 'put ''LnopLnJlZE11bChpKSxwPWYucmVkTXVsKGgpLGQ9bi56LnJlZE11bCh1LnJlZEFkZChwKS5yZWRTcXIoKSksdj1uLngucmVkTXVsKHUucmVkSVN1YihwKS5yZWRTcXIoKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoZCx2KX0sZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGwpe2Zvcih2YXIg''@;'; put 'put ''bj1sLmNsb25lKCksaT10aGlzLGg9dGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpLGY9W107MCE9PW4uY21wbigwKTtuLml1c2hybigxKSlmLnB1c2gobi5hbmRsbigxKSk7Zm9yKHZhciB1PWYubGVuZ3RoLTE7dT49MDt1LS0pMD09PWZbdV0/KGk9aS5kaWZmQWRkKGgsdGhpcyksaD1oLmRi''@;'; put 'put ''bCgpKTooaD1pLmRpZmZBZGQoaCx0aGlzKSxpPWkuZGJsKCkpO3JldHVybiBofSxlLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxlLnByb3RvdHlwZS5qdW1sQWRkPWZ1bmN0aW9uKCl7dGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sZS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24obCl7cmV0dXJuIDA9PT10aGlzLmdldFgoKS5jbXAobC5nZXRYKCkpfSxlLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PXRo''@;'; put 'put ''aXMueC5yZWRNdWwodGhpcy56LnJlZEludm0oKSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXN9LGUucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfX0seyIuLi91dGlscyI6NDE5LCIuL2Jhc2UiOjQwNiwiYm4uanMi''@;'; put 'put ''OjQyMCxpbmhlcml0czo0NDB9XSw0MTA6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vdXRpbHMiKSxhPXMoImJuLmpzIiksbz1zKCJpbmhlcml0cyIpLHI9cygiLi9iYXNlIiksdD1iLmFzc2VydDtmdW5jdGlvbiBlKGkpe3IuY2FsbCh0aGlzLCJzaG9ydCIsaSks''@;'; put 'put ''dGhpcy5hPW5ldyBhKGkuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgYShpLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnRpbnY9dGhpcy50d28ucmVkSW52bSgpLHRoaXMuemVyb0E9MD09PXRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSx0aGlzLnRocmVlQT0wPT09dGhpcy5h''@;'; put 'put ''LmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSx0aGlzLmVuZG89dGhpcy5fZ2V0RW5kb21vcnBoaXNtKGkpLHRoaXMuX2VuZG9XbmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX2VuZG9XbmFmVDI9bmV3IEFycmF5KDQpfWZ1bmN0aW9uIGwoaSxoLGYsdSl7ci5CYXNlUG9pbnQuY2FsbCh0''@;'; put 'put ''aGlzLGksImFmZmluZSIpLG51bGw9PT1oJiZudWxsPT09Zj8odGhpcy54PW51bGwsdGhpcy55PW51bGwsdGhpcy5pbmY9ITApOih0aGlzLng9bmV3IGEoaCwxNiksdGhpcy55PW5ldyBhKGYsMTYpLHUmJih0aGlzLnguZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpLHRoaXMueS5mb3JjZVJlZCh0''@;'; put 'put ''aGlzLmN1cnZlLnJlZCkpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLmluZj0hMSl9ZnVuY3Rpb24gbihpLGgsZix1KXtyLkJhc2VQb2ludC5jYWxs''@;'; put 'put ''KHRoaXMsaSwiamFjb2JpYW4iKSxudWxsPT09aCYmbnVsbD09PWYmJm51bGw9PT11Pyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej1uZXcgYSgwKSk6KHRoaXMueD1uZXcgYShoLDE2KSx0aGlzLnk9bmV3IGEoZiwxNiksdGhpcy56PW5ldyBhKHUs''@;'; put 'put ''MTYpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9''@;'; put 'put ''dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmV9byhlLHIpLEUuZXhwb3J0cz1lLGUucHJvdG90eXBlLl9nZXRFbmRvbW9ycGhpc209ZnVuY3Rpb24oaSl7aWYodGhpcy56ZXJvQSYmdGhpcy5nJiZ0aGlzLm4mJjE9PT10aGlzLnAubW9kbigzKSl7dmFyIGgsZjtpZihpLmJldGEpaD1uZXcgYShpLmJl''@;'; put 'put ''dGEsMTYpLnRvUmVkKHRoaXMucmVkKTtlbHNle3ZhciB1PXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLnApO2g9KGg9dVswXS5jbXAodVsxXSk8MD91WzBdOnVbMV0pLnRvUmVkKHRoaXMucmVkKX1pZihpLmxhbWJkYSlmPW5ldyBhKGkubGFtYmRhLDE2KTtlbHNle3ZhciBwPXRoaXMuX2dldEVu''@;'; put 'put ''ZG9Sb290cyh0aGlzLm4pOzA9PT10aGlzLmcubXVsKHBbMF0pLnguY21wKHRoaXMuZy54LnJlZE11bChoKSk/Zj1wWzBdOnQoMD09PXRoaXMuZy5tdWwoZj1wWzFdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoaCkpKX1yZXR1cm57YmV0YTpoLGxhbWJkYTpmLGJhc2lzOmkuYmFzaXM/aS5iYXNp''@;'; put 'put ''cy5tYXAoZnVuY3Rpb24oZCl7cmV0dXJue2E6bmV3IGEoZC5hLDE2KSxiOm5ldyBhKGQuYiwxNil9fSk6dGhpcy5fZ2V0RW5kb0Jhc2lzKGYpfX19LGUucHJvdG90eXBlLl9nZXRFbmRvUm9vdHM9ZnVuY3Rpb24oaSl7dmFyIGg9aT09PXRoaXMucD90aGlzLnJlZDphLm1vbnQoaSksZj1uZXcg''@;'; put 'put ''YSgyKS50b1JlZChoKS5yZWRJbnZtKCksdT1mLnJlZE5lZygpLHA9bmV3IGEoMykudG9SZWQoaCkucmVkTmVnKCkucmVkU3FydCgpLnJlZE11bChmKTtyZXR1cm5bdS5yZWRBZGQocCkuZnJvbVJlZCgpLHUucmVkU3ViKHApLmZyb21SZWQoKV19LGUucHJvdG90eXBlLl9nZXRFbmRvQmFzaXM9''@;'; put 'put ''ZnVuY3Rpb24oaSl7Zm9yKHZhciBoLGYsdSxwLGQsdixfLEEsSSxMPXRoaXMubi51c2hybihNYXRoLmZsb29yKHRoaXMubi5iaXRMZW5ndGgoKS8yKSksTj1pLFA9dGhpcy5uLmNsb25lKCksQj1uZXcgYSgxKSwkPW5ldyBhKDApLEQ9bmV3IGEoMCkseD1uZXcgYSgxKSxNPTA7MCE9PU4uY21w''@;'; put 'put ''bigwKTspe3ZhciBqPVAuZGl2KE4pO0E9UC5zdWIoai5tdWwoTikpLEk9RC5zdWIoai5tdWwoQikpO3ZhciBjPXguc3ViKGoubXVsKCQpKTtpZighdSYmQS5jbXAoTCk8MCloPV8ubmVnKCksZj1CLHU9QS5uZWcoKSxwPUk7ZWxzZSBpZih1JiYyPT0rK00pYnJlYWs7Xz1BLFA9TixOPUEsRD1C''@;'; put 'put ''LEI9SSx4PSQsJD1jfWQ9QS5uZWcoKSx2PUk7dmFyIG09dS5zcXIoKS5hZGQocC5zcXIoKSk7cmV0dXJuIGQuc3FyKCkuYWRkKHYuc3FyKCkpLmNtcChtKT49MCYmKGQ9aCx2PWYpLHUubmVnYXRpdmUmJih1PXUubmVnKCkscD1wLm5lZygpKSxkLm5lZ2F0aXZlJiYoZD1kLm5lZygpLHY9di5u''@;'; put 'put ''ZWcoKSksW3thOnUsYjpwfSx7YTpkLGI6dn1dfSxlLnByb3RvdHlwZS5fZW5kb1NwbGl0PWZ1bmN0aW9uKGkpe3ZhciBoPXRoaXMuZW5kby5iYXNpcyxmPWhbMF0sdT1oWzFdLHA9dS5iLm11bChpKS5kaXZSb3VuZCh0aGlzLm4pLGQ9Zi5iLm5lZygpLm11bChpKS5kaXZSb3VuZCh0aGlzLm4p''@;'; put 'put ''LHY9cC5tdWwoZi5hKSxfPWQubXVsKHUuYSksQT1wLm11bChmLmIpLEk9ZC5tdWwodS5iKTtyZXR1cm57azE6aS5zdWIodikuc3ViKF8pLGsyOkEuYWRkKEkpLm5lZygpfX0sZS5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbihpLGgpeyhpPW5ldyBhKGksMTYpKS5yZWR8fChpPWkudG9S''@;'; put 'put ''ZWQodGhpcy5yZWQpKTt2YXIgZj1pLnJlZFNxcigpLnJlZE11bChpKS5yZWRJQWRkKGkucmVkTXVsKHRoaXMuYSkpLnJlZElBZGQodGhpcy5iKSx1PWYucmVkU3FydCgpO2lmKDAhPT11LnJlZFNxcigpLnJlZFN1YihmKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQg''@;'; put 'put ''cG9pbnQiKTt2YXIgcD11LmZyb21SZWQoKS5pc09kZCgpO3JldHVybihoJiYhcHx8IWgmJnApJiYodT11LnJlZE5lZygpKSx0aGlzLnBvaW50KGksdSl9LGUucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKGkpe2lmKGkuaW5mKXJldHVybiEwO3ZhciBoPWkueCxmPWkueSx1PXRoaXMuYS5y''@;'; put 'put ''ZWRNdWwoaCkscD1oLnJlZFNxcigpLnJlZE11bChoKS5yZWRJQWRkKHUpLnJlZElBZGQodGhpcy5iKTtyZXR1cm4gMD09PWYucmVkU3FyKCkucmVkSVN1YihwKS5jbXBuKDApfSxlLnByb3RvdHlwZS5fZW5kb1duYWZNdWxBZGQ9ZnVuY3Rpb24oaSxoLGYpe2Zvcih2YXIgdT10aGlzLl9lbmRv''@;'; put 'put ''V25hZlQxLHA9dGhpcy5fZW5kb1duYWZUMixkPTA7ZDxpLmxlbmd0aDtkKyspe3ZhciB2PXRoaXMuX2VuZG9TcGxpdChoW2RdKSxfPWlbZF0sQT1fLl9nZXRCZXRhKCk7di5rMS5uZWdhdGl2ZSYmKHYuazEuaW5lZygpLF89Xy5uZWcoITApKSx2LmsyLm5lZ2F0aXZlJiYodi5rMi5pbmVnKCks''@;'; put 'put ''QT1BLm5lZyghMCkpLHVbMipkXT1fLHVbMipkKzFdPUEscFsyKmRdPXYuazEscFsyKmQrMV09di5rMn1mb3IodmFyIEk9dGhpcy5fd25hZk11bEFkZCgxLHUscCwyKmQsZiksTD0wO0w8MipkO0wrKyl1W0xdPW51bGwscFtMXT1udWxsO3JldHVybiBJfSxvKGwsci5CYXNlUG9pbnQpLGUucHJv''@;'; put 'put ''dG90eXBlLnBvaW50PWZ1bmN0aW9uKGksaCxmKXtyZXR1cm4gbmV3IGwodGhpcyxpLGgsZil9LGUucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oaSxoKXtyZXR1cm4gbC5mcm9tSlNPTih0aGlzLGksaCl9LGwucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7aWYodGhpcy5j''@;'; put 'put ''dXJ2ZS5lbmRvKXt2YXIgaT10aGlzLnByZWNvbXB1dGVkO2lmKGkmJmkuYmV0YSlyZXR1cm4gaS5iZXRhO3ZhciBoPXRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSksdGhpcy55KTtpZihpKXt2YXIgZj10aGlzLmN1cnZlLHU9ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIGYucG9pbnQocC54LnJlZE11bChmLmVuZG8uYmV0YSkscC55KX07aS5iZXRhPWgsaC5wcmVjb21wdXRlZD17YmV0YTpudWxsLG5hZjppLm5hZiYme3duZDppLm5hZi53bmQscG9pbnRzOmkubmFmLnBvaW50cy5tYXAodSl9LGRvdWJsZXM6aS5kb3VibGVzJiZ7c3RlcDppLmRvdWJs''@;'; put 'put ''ZXMuc3RlcCxwb2ludHM6aS5kb3VibGVzLnBvaW50cy5tYXAodSl9fX1yZXR1cm4gaH19LGwucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByZWNvbXB1dGVkP1t0aGlzLngsdGhpcy55LHRoaXMucHJlY29tcHV0ZWQmJntkb3VibGVzOnRoaXMucHJlY29tcHV0ZWQu''@;'; put 'put ''ZG91YmxlcyYme3N0ZXA6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnN0ZXAscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5wb2ludHMuc2xpY2UoMSl9LG5hZjp0aGlzLnByZWNvbXB1dGVkLm5hZiYme3duZDp0aGlzLnByZWNvbXB1dGVkLm5hZi53bmQscG9pbnRzOnRoaXMucHJl''@;'; put 'put ''Y29tcHV0ZWQubmFmLnBvaW50cy5zbGljZSgxKX19XTpbdGhpcy54LHRoaXMueV19LGwuZnJvbUpTT049ZnVuY3Rpb24oaSxoLGYpeyJzdHJpbmciPT10eXBlb2YgaCYmKGg9SlNPTi5wYXJzZShoKSk7dmFyIHU9aS5wb2ludChoWzBdLGhbMV0sZik7aWYoIWhbMl0pcmV0dXJuIHU7ZnVuY3Rp''@;'; put 'put ''b24gcCh2KXtyZXR1cm4gaS5wb2ludCh2WzBdLHZbMV0sZil9dmFyIGQ9aFsyXTtyZXR1cm4gdS5wcmVjb21wdXRlZD17YmV0YTpudWxsLGRvdWJsZXM6ZC5kb3VibGVzJiZ7c3RlcDpkLmRvdWJsZXMuc3RlcCxwb2ludHM6W3VdLmNvbmNhdChkLmRvdWJsZXMucG9pbnRzLm1hcChwKSl9LG5h''@;'; put 'put ''ZjpkLm5hZiYme3duZDpkLm5hZi53bmQscG9pbnRzOlt1XS5jb25jYXQoZC5uYWYucG9pbnRzLm1hcChwKSl9fSx1fSxsLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhp''@;'; put 'put ''cy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LGwucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmZ9LGwucHJvdG90eXBlLmFkZD1mdW5jdGlvbihpKXtpZih0aGlzLmluZily''@;'; put 'put ''ZXR1cm4gaTtpZihpLmluZilyZXR1cm4gdGhpcztpZih0aGlzLmVxKGkpKXJldHVybiB0aGlzLmRibCgpO2lmKHRoaXMubmVnKCkuZXEoaSkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTtpZigwPT09dGhpcy54LmNtcChpLngpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51''@;'; put 'put ''bGwsbnVsbCk7dmFyIGg9dGhpcy55LnJlZFN1YihpLnkpOzAhPT1oLmNtcG4oMCkmJihoPWgucmVkTXVsKHRoaXMueC5yZWRTdWIoaS54KS5yZWRJbnZtKCkpKTt2YXIgZj1oLnJlZFNxcigpLnJlZElTdWIodGhpcy54KS5yZWRJU3ViKGkueCksdT1oLnJlZE11bCh0aGlzLngucmVkU3ViKGYp''@;'; put 'put ''KS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoZix1KX0sbC5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIGk9dGhpcy55LnJlZEFkZCh0aGlzLnkpO2lmKDA9PT1pLmNtcG4oMCkpcmV0dXJuIHRoaXMuY3VydmUucG9p''@;'; put 'put ''bnQobnVsbCxudWxsKTt2YXIgaD10aGlzLmN1cnZlLmEsZj10aGlzLngucmVkU3FyKCksdT1pLnJlZEludm0oKSxwPWYucmVkQWRkKGYpLnJlZElBZGQoZikucmVkSUFkZChoKS5yZWRNdWwodSksZD1wLnJlZFNxcigpLnJlZElTdWIodGhpcy54LnJlZEFkZCh0aGlzLngpKSx2PXAucmVkTXVs''@;'; put 'put ''KHRoaXMueC5yZWRTdWIoZCkpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChkLHYpfSxsLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueC5mcm9tUmVkKCl9LGwucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55LmZyb21S''@;'; put 'put ''ZWQoKX0sbC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGkpe3JldHVybiBpPW5ldyBhKGksMTYpLHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5faGFzRG91YmxlcyhpKT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLGkpOnRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25h''@;'; put 'put ''Zk11bEFkZChbdGhpc10sW2ldKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsaSl9LGwucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbihpLGgsZil7dmFyIHU9W3RoaXMsaF0scD1baSxmXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKHUscCk6dGhp''@;'; put 'put ''cy5jdXJ2ZS5fd25hZk11bEFkZCgxLHUscCwyKX0sbC5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihpLGgsZil7dmFyIHU9W3RoaXMsaF0scD1baSxmXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKHUscCwhMCk6dGhpcy5jdXJ2ZS5fd25hZk11''@;'; put 'put ''bEFkZCgxLHUscCwyLCEwKX0sbC5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXM9PT1pfHx0aGlzLmluZj09PWkuaW5mJiYodGhpcy5pbmZ8fDA9PT10aGlzLnguY21wKGkueCkmJjA9PT10aGlzLnkuY21wKGkueSkpfSxsLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oaSl7aWYo''@;'; put 'put ''dGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIGg9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpKTtpZihpJiZ0aGlzLnByZWNvbXB1dGVkKXt2YXIgZj10aGlzLnByZWNvbXB1dGVkLHU9ZnVuY3Rpb24ocCl7cmV0dXJuIHAubmVnKCl9O2gucHJlY29tcHV0ZWQ9e25hZjpm''@;'; put 'put ''Lm5hZiYme3duZDpmLm5hZi53bmQscG9pbnRzOmYubmFmLnBvaW50cy5tYXAodSl9LGRvdWJsZXM6Zi5kb3VibGVzJiZ7c3RlcDpmLmRvdWJsZXMuc3RlcCxwb2ludHM6Zi5kb3VibGVzLnBvaW50cy5tYXAodSl9fX1yZXR1cm4gaH0sbC5wcm90b3R5cGUudG9KPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaW5mP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LHRoaXMuY3VydmUub25lKX0sbyhuLHIuQmFzZVBvaW50KSxlLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oaSxoLGYpe3JldHVybiBuZXcgbih0aGlzLGks''@;'; put 'put ''aCxmKX0sbi5wcm90b3R5cGUudG9QPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgaT10aGlzLnoucmVkSW52bSgpLGg9aS5yZWRTcXIoKSxmPXRoaXMueC5yZWRNdWwoaCksdT10aGlzLnkucmVkTXVsKGgpLnJl''@;'; put 'put ''ZE11bChpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChmLHUpfSxuLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSx0aGlzLnopfSxuLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oaSl7aWYodGhpcy5pc0luZmlu''@;'; put 'put ''aXR5KCkpcmV0dXJuIGk7aWYoaS5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIGg9aS56LnJlZFNxcigpLGY9dGhpcy56LnJlZFNxcigpLHU9dGhpcy54LnJlZE11bChoKSxwPWkueC5yZWRNdWwoZiksZD10aGlzLnkucmVkTXVsKGgucmVkTXVsKGkueikpLHY9aS55LnJlZE11bChmLnJl''@;'; put 'put ''ZE11bCh0aGlzLnopKSxfPXUucmVkU3ViKHApLEE9ZC5yZWRTdWIodik7aWYoMD09PV8uY21wbigwKSlyZXR1cm4gMCE9PUEuY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgST1fLnJlZFNxcigpLEw9SS5yZWRNdWwoXyksTj11LnJlZE11''@;'; put 'put ''bChJKSxQPUEucmVkU3FyKCkucmVkSUFkZChMKS5yZWRJU3ViKE4pLnJlZElTdWIoTiksQj1BLnJlZE11bChOLnJlZElTdWIoUCkpLnJlZElTdWIoZC5yZWRNdWwoTCkpLCQ9dGhpcy56LnJlZE11bChpLnopLnJlZE11bChfKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoUCxCLCQpfSxuLnBy''@;'; put 'put ''b3RvdHlwZS5taXhlZEFkZD1mdW5jdGlvbihpKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gaS50b0ooKTtpZihpLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgaD10aGlzLnoucmVkU3FyKCksZj10aGlzLngsdT1pLngucmVkTXVsKGgpLHA9dGhpcy55LGQ9aS55LnJlZE11bCho''@;'; put 'put ''KS5yZWRNdWwodGhpcy56KSx2PWYucmVkU3ViKHUpLF89cC5yZWRTdWIoZCk7aWYoMD09PXYuY21wbigwKSlyZXR1cm4gMCE9PV8uY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgQT12LnJlZFNxcigpLEk9QS5yZWRNdWwodiksTD1mLnJl''@;'; put 'put ''ZE11bChBKSxOPV8ucmVkU3FyKCkucmVkSUFkZChJKS5yZWRJU3ViKEwpLnJlZElTdWIoTCksUD1fLnJlZE11bChMLnJlZElTdWIoTikpLnJlZElTdWIocC5yZWRNdWwoSSkpLEI9dGhpcy56LnJlZE11bCh2KTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoTixQLEIpfSxuLnByb3RvdHlwZS5k''@;'; put 'put ''YmxwPWZ1bmN0aW9uKGkpe2lmKDA9PT1pKXJldHVybiB0aGlzO2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO2lmKCFpKXJldHVybiB0aGlzLmRibCgpO3ZhciBoO2lmKHRoaXMuY3VydmUuemVyb0F8fHRoaXMuY3VydmUudGhyZWVBKXt2YXIgZj10aGlzO2ZvcihoPTA7aDxpO2gr''@;'; put 'put ''KylmPWYuZGJsKCk7cmV0dXJuIGZ9dmFyIHU9dGhpcy5jdXJ2ZS5hLHA9dGhpcy5jdXJ2ZS50aW52LGQ9dGhpcy54LHY9dGhpcy55LF89dGhpcy56LEE9Xy5yZWRTcXIoKS5yZWRTcXIoKSxJPXYucmVkQWRkKHYpO2ZvcihoPTA7aDxpO2grKyl7dmFyIEw9ZC5yZWRTcXIoKSxOPUkucmVkU3Fy''@;'; put 'put ''KCksUD1OLnJlZFNxcigpLEI9TC5yZWRBZGQoTCkucmVkSUFkZChMKS5yZWRJQWRkKHUucmVkTXVsKEEpKSwkPWQucmVkTXVsKE4pLEQ9Qi5yZWRTcXIoKS5yZWRJU3ViKCQucmVkQWRkKCQpKSx4PSQucmVkSVN1YihEKSxNPUIucmVkTXVsKHgpO009TS5yZWRJQWRkKE0pLnJlZElTdWIoUCk7''@;'; put 'put ''dmFyIGo9SS5yZWRNdWwoXyk7aCsxPGkmJihBPUEucmVkTXVsKFApKSxkPUQsXz1qLEk9TX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoZCxJLnJlZE11bChwKSxfKX0sbi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS56''@;'; put 'put ''ZXJvQT90aGlzLl96ZXJvRGJsKCk6dGhpcy5jdXJ2ZS50aHJlZUE/dGhpcy5fdGhyZWVEYmwoKTp0aGlzLl9kYmwoKX0sbi5wcm90b3R5cGUuX3plcm9EYmw9ZnVuY3Rpb24oKXt2YXIgaSxoLGY7aWYodGhpcy56T25lKXt2YXIgdT10aGlzLngucmVkU3FyKCkscD10aGlzLnkucmVkU3FyKCks''@;'; put 'put ''ZD1wLnJlZFNxcigpLHY9dGhpcy54LnJlZEFkZChwKS5yZWRTcXIoKS5yZWRJU3ViKHUpLnJlZElTdWIoZCk7dj12LnJlZElBZGQodik7dmFyIF89dS5yZWRBZGQodSkucmVkSUFkZCh1KSxBPV8ucmVkU3FyKCkucmVkSVN1Yih2KS5yZWRJU3ViKHYpLEk9ZC5yZWRJQWRkKGQpO0k9KEk9SS5y''@;'; put 'put ''ZWRJQWRkKEkpKS5yZWRJQWRkKEkpLGk9QSxoPV8ucmVkTXVsKHYucmVkSVN1YihBKSkucmVkSVN1YihJKSxmPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBMPXRoaXMueC5yZWRTcXIoKSxOPXRoaXMueS5yZWRTcXIoKSxQPU4ucmVkU3FyKCksQj10aGlzLngucmVkQWRkKE4pLnJl''@;'; put 'put ''ZFNxcigpLnJlZElTdWIoTCkucmVkSVN1YihQKTtCPUIucmVkSUFkZChCKTt2YXIgJD1MLnJlZEFkZChMKS5yZWRJQWRkKEwpLEQ9JC5yZWRTcXIoKSx4PVAucmVkSUFkZChQKTt4PSh4PXgucmVkSUFkZCh4KSkucmVkSUFkZCh4KSxpPUQucmVkSVN1YihCKS5yZWRJU3ViKEIpLGg9JC5yZWRN''@;'; put 'put ''dWwoQi5yZWRJU3ViKGkpKS5yZWRJU3ViKHgpLGY9KGY9dGhpcy55LnJlZE11bCh0aGlzLnopKS5yZWRJQWRkKGYpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChpLGgsZil9LG4ucHJvdG90eXBlLl90aHJlZURibD1mdW5jdGlvbigpe3ZhciBpLGgsZjtpZih0aGlzLnpPbmUpe3ZhciB1PXRo''@;'; put 'put ''aXMueC5yZWRTcXIoKSxwPXRoaXMueS5yZWRTcXIoKSxkPXAucmVkU3FyKCksdj10aGlzLngucmVkQWRkKHApLnJlZFNxcigpLnJlZElTdWIodSkucmVkSVN1YihkKTt2PXYucmVkSUFkZCh2KTt2YXIgXz11LnJlZEFkZCh1KS5yZWRJQWRkKHUpLnJlZElBZGQodGhpcy5jdXJ2ZS5hKSxBPV8u''@;'; put 'put ''cmVkU3FyKCkucmVkSVN1Yih2KS5yZWRJU3ViKHYpO2k9QTt2YXIgST1kLnJlZElBZGQoZCk7ST0oST1JLnJlZElBZGQoSSkpLnJlZElBZGQoSSksaD1fLnJlZE11bCh2LnJlZElTdWIoQSkpLnJlZElTdWIoSSksZj10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgTD10aGlzLnoucmVk''@;'; put 'put ''U3FyKCksTj10aGlzLnkucmVkU3FyKCksUD10aGlzLngucmVkTXVsKE4pLEI9dGhpcy54LnJlZFN1YihMKS5yZWRNdWwodGhpcy54LnJlZEFkZChMKSk7Qj1CLnJlZEFkZChCKS5yZWRJQWRkKEIpO3ZhciAkPVAucmVkSUFkZChQKSxEPSgkPSQucmVkSUFkZCgkKSkucmVkQWRkKCQpO2k9Qi5y''@;'; put 'put ''ZWRTcXIoKS5yZWRJU3ViKEQpLGY9dGhpcy55LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLnJlZElTdWIoTikucmVkSVN1YihMKTt2YXIgeD1OLnJlZFNxcigpO3g9KHg9KHg9eC5yZWRJQWRkKHgpKS5yZWRJQWRkKHgpKS5yZWRJQWRkKHgpLGg9Qi5yZWRNdWwoJC5yZWRJU3ViKGkpKS5yZWRJ''@;'; put 'put ''U3ViKHgpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChpLGgsZil9LG4ucHJvdG90eXBlLl9kYmw9ZnVuY3Rpb24oKXt2YXIgaT10aGlzLmN1cnZlLmEsaD10aGlzLngsZj10aGlzLnksdT10aGlzLnoscD11LnJlZFNxcigpLnJlZFNxcigpLGQ9aC5yZWRTcXIoKSx2PWYucmVkU3FyKCksXz1k''@;'; put 'put ''LnJlZEFkZChkKS5yZWRJQWRkKGQpLnJlZElBZGQoaS5yZWRNdWwocCkpLEE9aC5yZWRBZGQoaCksST0oQT1BLnJlZElBZGQoQSkpLnJlZE11bCh2KSxMPV8ucmVkU3FyKCkucmVkSVN1YihJLnJlZEFkZChJKSksTj1JLnJlZElTdWIoTCksUD12LnJlZFNxcigpO1A9KFA9KFA9UC5yZWRJQWRk''@;'; put 'put ''KFApKS5yZWRJQWRkKFApKS5yZWRJQWRkKFApO3ZhciBCPV8ucmVkTXVsKE4pLnJlZElTdWIoUCksJD1mLnJlZEFkZChmKS5yZWRNdWwodSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KEwsQiwkKX0sbi5wcm90b3R5cGUudHJwbD1mdW5jdGlvbigpe2lmKCF0aGlzLmN1cnZlLnplcm9BKXJl''@;'; put 'put ''dHVybiB0aGlzLmRibCgpLmFkZCh0aGlzKTt2YXIgaT10aGlzLngucmVkU3FyKCksaD10aGlzLnkucmVkU3FyKCksZj10aGlzLnoucmVkU3FyKCksdT1oLnJlZFNxcigpLHA9aS5yZWRBZGQoaSkucmVkSUFkZChpKSxkPXAucmVkU3FyKCksdj10aGlzLngucmVkQWRkKGgpLnJlZFNxcigpLnJl''@;'; put 'put ''ZElTdWIoaSkucmVkSVN1Yih1KSxfPSh2PSh2PSh2PXYucmVkSUFkZCh2KSkucmVkQWRkKHYpLnJlZElBZGQodikpLnJlZElTdWIoZCkpLnJlZFNxcigpLEE9dS5yZWRJQWRkKHUpO0E9KEE9KEE9QS5yZWRJQWRkKEEpKS5yZWRJQWRkKEEpKS5yZWRJQWRkKEEpO3ZhciBJPXAucmVkSUFkZCh2''@;'; put 'put ''KS5yZWRTcXIoKS5yZWRJU3ViKGQpLnJlZElTdWIoXykucmVkSVN1YihBKSxMPWgucmVkTXVsKEkpO0w9KEw9TC5yZWRJQWRkKEwpKS5yZWRJQWRkKEwpO3ZhciBOPXRoaXMueC5yZWRNdWwoXykucmVkSVN1YihMKTtOPShOPU4ucmVkSUFkZChOKSkucmVkSUFkZChOKTt2YXIgUD10aGlzLnku''@;'; put 'put ''cmVkTXVsKEkucmVkTXVsKEEucmVkSVN1YihJKSkucmVkSVN1Yih2LnJlZE11bChfKSkpO1A9KFA9KFA9UC5yZWRJQWRkKFApKS5yZWRJQWRkKFApKS5yZWRJQWRkKFApO3ZhciBCPXRoaXMuei5yZWRBZGQodikucmVkU3FyKCkucmVkSVN1YihmKS5yZWRJU3ViKF8pO3JldHVybiB0aGlzLmN1''@;'; put 'put ''cnZlLmpwb2ludChOLFAsQil9LG4ucHJvdG90eXBlLm11bD1mdW5jdGlvbihpLGgpe3JldHVybiBpPW5ldyBhKGksaCksdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLGkpfSxuLnByb3RvdHlwZS5lcT1mdW5jdGlvbihpKXtpZigiYWZmaW5lIj09PWkudHlwZSlyZXR1cm4gdGhpcy5lcShpLnRv''@;'; put 'put ''SigpKTtpZih0aGlzPT09aSlyZXR1cm4hMDt2YXIgaD10aGlzLnoucmVkU3FyKCksZj1pLnoucmVkU3FyKCk7aWYoMCE9PXRoaXMueC5yZWRNdWwoZikucmVkSVN1YihpLngucmVkTXVsKGgpKS5jbXBuKDApKXJldHVybiExO3ZhciB1PWgucmVkTXVsKHRoaXMueikscD1mLnJlZE11bChpLnop''@;'; put 'put ''O3JldHVybiAwPT09dGhpcy55LnJlZE11bChwKS5yZWRJU3ViKGkueS5yZWRNdWwodSkpLmNtcG4oMCl9LG4ucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbihpKXt2YXIgaD10aGlzLnoucmVkU3FyKCksZj1pLnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoaCk7aWYoMD09PXRoaXMueC5j''@;'; put 'put ''bXAoZikpcmV0dXJuITA7Zm9yKHZhciB1PWkuY2xvbmUoKSxwPXRoaXMuY3VydmUucmVkTi5yZWRNdWwoaCk7Oyl7aWYodS5pYWRkKHRoaXMuY3VydmUubiksdS5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihmLnJlZElBZGQocCksMD09PXRoaXMueC5jbXAoZikpcmV0dXJuITB9''@;'; put 'put ''fSxuLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgSlBvaW50IEluZmluaXR5PiI6IjxFQyBKUG9pbnQgeDogIit0aGlzLngudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LnRv''@;'; put 'put ''U3RyaW5nKDE2LDIpKyI+In0sbi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9fSx7Ii4uL3V0aWxzIjo0MTksIi4vYmFzZSI6NDA2LCJibi5qcyI6NDIwLGluaGVyaXRzOjQ0MH1dLDQxMTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgYixhPVMsbz1zKCJoYXNoLmpzIikscj1zKCIuL2N1cnZlIiksdD1zKCIuL3V0aWxzIikuYXNzZXJ0O2Z1bmN0aW9uIGUobil7dGhpcy5jdXJ2ZT0ic2hvcnQiPT09bi50eXBlP25ldyByLnNob3J0KG4pOiJlZHdhcmRzIj09PW4udHlwZT9uZXcgci5lZHdhcmRzKG4pOm5ldyBy''@;'; put 'put ''Lm1vbnQobiksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMuaGFzaD1uLmhhc2gsdCh0aGlzLmcudmFsaWRhdGUoKSwiSW52YWxpZCBjdXJ2ZSIpLHQodGhpcy5nLm11bCh0aGlzLm4pLmlzSW5maW5pdHkoKSwiSW52YWxpZCBjdXJ2ZSwgRypOICE9IE8iKX1m''@;'; put 'put ''dW5jdGlvbiBsKG4saSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsbix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIGg9bmV3IGUoaSk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLG4se2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEw''@;'; put 'put ''LHZhbHVlOmh9KSxofX0pfWEuUHJlc2V0Q3VydmU9ZSxsKCJwMTkyIix7dHlwZToic2hvcnQiLHByaW1lOiJwMTkyIixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFiIDcyMjQzMDQ5IGZlYjhkZWVjIGMxNDZiOWIxIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiA5OWRlZjgzNiAxNDZiYzliMSBiNGQyMjgzMSIsaGFzaDpvLnNoYTI1NixnUmVkOiExLGc6WyIxODhk''@;'; put 'put ''YTgwZSBiMDMwOTBmNiA3Y2JmMjBlYiA0M2ExODgwMCBmNGZmMGFmZCA4MmZmMTAxMiIsIjA3MTkyYjk1IGZmYzhkYTc4IDYzMTAxMWVkIDZiMjRjZGQ1IDczZjk3N2ExIDFlNzk0ODExIl19KSxsKCJwMjI0Iix7dHlwZToic2hvcnQiLHByaW1lOiJwMjI0IixwOiJmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUiLGI6ImI0MDUwYTg1IDBjMDRiM2FiIGY1NDEzMjU2IDUwNDRiMGI3IGQ3YmZkOGJhIDI3''@;'; put 'put ''MGIzOTQzIDIzNTVmZmI0IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmMTZhMiBlMGI4ZjAzZSAxM2RkMjk0NSA1YzVjMmEzZCIsaGFzaDpvLnNoYTI1NixnUmVkOiExLGc6WyJiNzBlMGNiZCA2YmI0YmY3ZiAzMjEzOTBiOSA0YTAzYzFkMyA1NmMyMTEyMiAzNDMyODBkNiAx''@;'; put 'put ''MTVjMWQyMSIsImJkMzc2Mzg4IGI1ZjcyM2ZiIDRjMjJkZmU2IGNkNDM3NWEwIDVhMDc0NzY0IDQ0ZDU4MTk5IDg1MDA3ZTM0Il19KSxsKCJwMjU2Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI1YWM2MzVkOCBhYTNhOTNlNyBiM2ViYmQ1NSA3Njk4ODZiYyA2NTFkMDZiMCBjYzUzYjBmNiAzYmNlM2MzZSAy''@;'; put 'put ''N2QyNjA0YiIsbjoiZmZmZmZmZmYgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgYmNlNmZhYWQgYTcxNzllODQgZjNiOWNhYzIgZmM2MzI1NTEiLGhhc2g6by5zaGEyNTYsZ1JlZDohMSxnOlsiNmIxN2QxZjIgZTEyYzQyNDcgZjhiY2U2ZTUgNjNhNDQwZjIgNzcwMzdkODEgMmRlYjMzYTAg''@;'; put 'put ''ZjRhMTM5NDUgZDg5OGMyOTYiLCI0ZmUzNDJlMiBmZTFhN2Y5YiA4ZWU3ZWI0YSA3YzBmOWUxNiAyYmNlMzM1NyA2YjMxNWVjZSBjYmI2NDA2OCAzN2JmNTFmNSJdfSksbCgicDM4NCIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAw''@;'; put 'put ''MDAwMCAwMDAwMDAwMCBmZmZmZmZmYyIsYjoiYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTkgMTgxZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgNTAxMzg3NWEgYzY1NjM5OGQgOGEyZWQxOWQgMmE4NWM4ZWQgZDNlYzJhZWYiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGM3NjM0ZDgxIGY0MzcyZGRmIDU4MWEwZGIyIDQ4YjBhNzdhIGVjZWMxOTZhIGNjYzUyOTczIixoYXNoOm8uc2hhMzg0LGdSZWQ6ITEsZzpbImFhODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5''@;'; put 'put ''Zjc0MWUwIDgyNTQyYTM4IDU1MDJmMjVkIGJmNTUyOTZjIDNhNTQ1ZTM4IDcyNzYwYWI3IiwiMzYxN2RlNGEgOTYyNjJjNmYgNWQ5ZTk4YmYgOTI5MmRjMjkgZjhmNDFkYmQgMjg5YTE0N2MgZTlkYTMxMTMgYjVmMGI4YzAgMGE2MGIxY2UgMWQ3ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWYiXX0p''@;'; put 'put ''LGwoInA1MjEiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiIsYToiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjAwMDAwMDUxIDk1M2ViOTYxIDhlMWM5YTFmIDkyOWEyMWEwIGI2ODU0MGVlIGEyZGE3MjViIDk5YjMxNWYzIGI4YjQ4OTkxIDhlZjEwOWUxIDU2MTkzOTUxIGVjN2U5MzdiIDE2NTJjMGJkIDNiYjFiZjA3IDM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0''@;'; put 'put ''IDZiNTAzZjAwIixuOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYSA1MTg2ODc4MyBiZjJmOTY2YiA3ZmNjMDE0OCBmNzA5YTVkMCAzYmI1YzliOCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQw''@;'; put 'put ''OSIsaGFzaDpvLnNoYTUxMixnUmVkOiExLGc6WyIwMDAwMDBjNiA4NThlMDZiNyAwNDA0ZTljZCA5ZTNlY2I2NiAyMzk1YjQ0MiA5YzY0ODEzOSAwNTNmYjUyMSBmODI4YWY2MCA2YjRkM2RiYSBhMTRiNWU3NyBlZmU3NTkyOCBmZTFkYzEyNyBhMmZmYThkZSAzMzQ4YjNjMSA4NTZhNDI5YiBm''@;'; put 'put ''OTdlN2UzMSBjMmU1YmQ2NiIsIjAwMDAwMTE4IDM5Mjk2YTc4IDlhM2JjMDA0IDVjOGE1ZmI0IDJjN2QxYmQ5IDk4ZjU0NDQ5IDU3OWI0NDY4IDE3YWZiZDE3IDI3M2U2NjJjIDk3ZWU3Mjk5IDVlZjQyNjQwIGM1NTBiOTAxIDNmYWQwNzYxIDM1M2M3MDg2IGEyNzJjMjQwIDg4YmU5NDc2IDlm''@;'; put 'put ''ZDE2NjUwIl19KSxsKCJjdXJ2ZTI1NTE5Iix7dHlwZToibW9udCIscHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIsYToiNzZkMDYiLGI6IjEiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQiLGhhc2g6by5zaGEyNTYsZ1JlZDohMSxnOlsiOSJdfSksbCgiZWQyNTUxOSIse3R5cGU6ImVkd2FyZHMiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ii0xIixjOiIxIixkOiI1MjAzNmNlZTJiNmZmZTczIDhjYzc0MDc5Nzc3OWU4OTggMDA3MDBhNGQ0MTQxZDhhYiA3NWViNGRjYTEzNTk3OGEzIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3''@;'; put 'put ''OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOm8uc2hhMjU2LGdSZWQ6ITEsZzpbIjIxNjkzNmQzY2Q2ZTUzZmVjMGE0ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1YTdiMmM5NTYyZDYwOGYyNWQ1MWEiLCI2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2''@;'; put 'put ''NjY2NjY2NjY2NjY2NjU4Il19KTt0cnl7Yj1zKCIuL3ByZWNvbXB1dGVkL3NlY3AyNTZrMSIpfWNhdGNoe2I9dm9pZCAwfWwoInNlY3AyNTZrMSIse3R5cGU6InNob3J0IixwcmltZToiazI1NiIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmUgZmZmZmZjMmYiLGE6IjAiLGI6IjciLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGJhYWVkY2U2IGFmNDhhMDNiIGJmZDI1ZThjIGQwMzY0MTQxIixoOiIxIixoYXNoOm8uc2hhMjU2LGJldGE6IjdhZTk2YTJiNjU3YzA3MTA2ZTY0NDc5ZWFjMzQz''@;'; put 'put ''NGU5OWNmMDQ5NzUxMmY1ODk5NWMxMzk2YzI4NzE5NTAxZWUiLGxhbWJkYToiNTM2M2FkNGNjMDVjMzBlMGE1MjYxYzAyODgxMjY0NWExMjJlMjJlYTIwODE2Njc4ZGYwMjk2N2MxYjIzYmQ3MiIsYmFzaXM6W3thOiIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSIsYjoiLWU0NDM3''@;'; put 'put ''ZWQ2MDEwZTg4Mjg2ZjU0N2ZhOTBhYmZlNGMzIn0se2E6IjExNGNhNTBmN2E4ZTJmM2Y2NTdjMTEwOGQ5ZDQ0Y2ZkOCIsYjoiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUifV0sZ1JlZDohMSxnOlsiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2Uy''@;'; put 'put ''OGQ5NTlmMjgxNWIxNmY4MTc5OCIsIjQ4M2FkYTc3MjZhM2M0NjU1ZGE0ZmJmYzBlMTEwOGE4ZmQxN2I0NDhhNjg1NTQxOTljNDdkMDhmZmIxMGQ0YjgiLGJdfSl9LHsiLi9jdXJ2ZSI6NDA4LCIuL3ByZWNvbXB1dGVkL3NlY3AyNTZrMSI6NDE4LCIuL3V0aWxzIjo0MTksImhhc2guanMiOjQy''@;'; put 'put ''Nn1dLDQxMjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCJibi5qcyIpLGE9cygiaG1hYy1kcmJnIiksbz1zKCIuLi91dGlscyIpLHI9cygiLi4vY3VydmVzIiksdD1zKCJicm9yYW5kIiksZT1vLmFzc2VydCxsPXMoIi4va2V5Iiksbj1zKCIuL3NpZ25hdHVyZSIpO2Z1''@;'; put 'put ''bmN0aW9uIGkoaCl7aWYoISh0aGlzIGluc3RhbmNlb2YgaSkpcmV0dXJuIG5ldyBpKGgpOyJzdHJpbmciPT10eXBlb2YgaCYmKGUoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsaCksIlVua25vd24gY3VydmUgIitoKSxoPXJbaF0pLGggaW5zdGFuY2VvZiByLlByZXNl''@;'; put 'put ''dEN1cnZlJiYoaD17Y3VydmU6aH0pLHRoaXMuY3VydmU9aC5jdXJ2ZS5jdXJ2ZSx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMubmg9dGhpcy5uLnVzaHJuKDEpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5nPWguY3VydmUuZyx0aGlzLmcucHJlY29tcHV0ZShoLmN1cnZlLm4uYml0TGVuZ3Ro''@;'; put 'put ''KCkrMSksdGhpcy5oYXNoPWguaGFzaHx8aC5jdXJ2ZS5oYXNofUUuZXhwb3J0cz1pLGkucHJvdG90eXBlLmtleVBhaXI9ZnVuY3Rpb24oaCl7cmV0dXJuIG5ldyBsKHRoaXMsaCl9LGkucHJvdG90eXBlLmtleUZyb21Qcml2YXRlPWZ1bmN0aW9uKGgsZil7cmV0dXJuIGwuZnJvbVByaXZhdGUo''@;'; put 'put ''dGhpcyxoLGYpfSxpLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKGgsZil7cmV0dXJuIGwuZnJvbVB1YmxpYyh0aGlzLGgsZil9LGkucHJvdG90eXBlLmdlbktleVBhaXI9ZnVuY3Rpb24oaCl7aHx8KGg9e30pO2Zvcih2YXIgZj1uZXcgYSh7aGFzaDp0aGlzLmhhc2gscGVyczpo''@;'; put 'put ''LnBlcnMscGVyc0VuYzpoLnBlcnNFbmN8fCJ1dGY4IixlbnRyb3B5OmguZW50cm9weXx8dCh0aGlzLmhhc2guaG1hY1N0cmVuZ3RoKSxlbnRyb3B5RW5jOmguZW50cm9weSYmaC5lbnRyb3B5RW5jfHwidXRmOCIsbm9uY2U6dGhpcy5uLnRvQXJyYXkoKX0pLHU9dGhpcy5uLmJ5dGVMZW5ndGgo''@;'; put 'put ''KSxwPXRoaXMubi5zdWIobmV3IGIoMikpOzspe3ZhciBkPW5ldyBiKGYuZ2VuZXJhdGUodSkpO2lmKCEoZC5jbXAocCk+MCkpcmV0dXJuIGQuaWFkZG4oMSksdGhpcy5rZXlGcm9tUHJpdmF0ZShkKX19LGkucHJvdG90eXBlLl90cnVuY2F0ZVRvTj1mdW5jdGlvbihoLGYpe3ZhciB1PTgqaC5i''@;'; put 'put ''eXRlTGVuZ3RoKCktdGhpcy5uLmJpdExlbmd0aCgpO3JldHVybiB1PjAmJihoPWgudXNocm4odSkpLCFmJiZoLmNtcCh0aGlzLm4pPj0wP2guc3ViKHRoaXMubik6aH0saS5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihoLGYsdSxwKXsib2JqZWN0Ij09dHlwZW9mIHUmJihwPXUsdT1udWxsKSxw''@;'; put 'put ''fHwocD17fSksZj10aGlzLmtleUZyb21Qcml2YXRlKGYsdSksaD10aGlzLl90cnVuY2F0ZVRvTihuZXcgYihoLDE2KSk7Zm9yKHZhciBkPXRoaXMubi5ieXRlTGVuZ3RoKCksdj1mLmdldFByaXZhdGUoKS50b0FycmF5KCJiZSIsZCksXz1oLnRvQXJyYXkoImJlIixkKSxBPW5ldyBhKHtoYXNo''@;'; put 'put ''OnRoaXMuaGFzaCxlbnRyb3B5OnYsbm9uY2U6XyxwZXJzOnAucGVycyxwZXJzRW5jOnAucGVyc0VuY3x8InV0ZjgifSksST10aGlzLm4uc3ViKG5ldyBiKDEpKSxMPTA7O0wrKyl7dmFyIE49cC5rP3AuayhMKTpuZXcgYihBLmdlbmVyYXRlKHRoaXMubi5ieXRlTGVuZ3RoKCkpKTtpZighKChO''@;'; put 'put ''PXRoaXMuX3RydW5jYXRlVG9OKE4sITApKS5jbXBuKDEpPD0wfHxOLmNtcChJKT49MCkpe3ZhciBQPXRoaXMuZy5tdWwoTik7aWYoIVAuaXNJbmZpbml0eSgpKXt2YXIgQj1QLmdldFgoKSwkPUIudW1vZCh0aGlzLm4pO2lmKDAhPT0kLmNtcG4oMCkpe3ZhciBEPU4uaW52bSh0aGlzLm4pLm11''@;'; put 'put ''bCgkLm11bChmLmdldFByaXZhdGUoKSkuaWFkZChoKSk7aWYoMCE9PShEPUQudW1vZCh0aGlzLm4pKS5jbXBuKDApKXt2YXIgeD0oUC5nZXRZKCkuaXNPZGQoKT8xOjApfCgwIT09Qi5jbXAoJCk/MjowKTtyZXR1cm4gcC5jYW5vbmljYWwmJkQuY21wKHRoaXMubmgpPjAmJihEPXRoaXMubi5z''@;'; put 'put ''dWIoRCkseF49MSksbmV3IG4oe3I6JCxzOkQscmVjb3ZlcnlQYXJhbTp4fSl9fX19fX0saS5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKGgsZix1LHApe2g9dGhpcy5fdHJ1bmNhdGVUb04obmV3IGIoaCwxNikpLHU9dGhpcy5rZXlGcm9tUHVibGljKHUscCk7dmFyIGQ9KGY9bmV3IG4oZiwi''@;'; put 'put ''aGV4IikpLnIsdj1mLnM7aWYoZC5jbXBuKDEpPDB8fGQuY21wKHRoaXMubik+PTB8fHYuY21wbigxKTwwfHx2LmNtcCh0aGlzLm4pPj0wKXJldHVybiExO3ZhciBfLEE9di5pbnZtKHRoaXMubiksST1BLm11bChoKS51bW9kKHRoaXMubiksTD1BLm11bChkKS51bW9kKHRoaXMubik7cmV0dXJu''@;'; put 'put ''IHRoaXMuY3VydmUuX21heHdlbGxUcmljaz8hKF89dGhpcy5nLmptdWxBZGQoSSx1LmdldFB1YmxpYygpLEwpKS5pc0luZmluaXR5KCkmJl8uZXFYVG9QKGQpOiEoXz10aGlzLmcubXVsQWRkKEksdS5nZXRQdWJsaWMoKSxMKSkuaXNJbmZpbml0eSgpJiYwPT09Xy5nZXRYKCkudW1vZCh0aGlz''@;'; put 'put ''Lm4pLmNtcChkKX0saS5wcm90b3R5cGUucmVjb3ZlclB1YktleT1mdW5jdGlvbihoLGYsdSxwKXtlKCgzJnUpPT09dSwiVGhlIHJlY292ZXJ5IHBhcmFtIGlzIG1vcmUgdGhhbiB0d28gYml0cyIpLGY9bmV3IG4oZixwKTt2YXIgZD10aGlzLm4sdj1uZXcgYihoKSxfPWYucixBPWYucyxJPTEm''@;'; put 'put ''dSxMPXU+PjE7aWYoXy5jbXAodGhpcy5jdXJ2ZS5wLnVtb2QodGhpcy5jdXJ2ZS5uKSk+PTAmJkwpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGUiKTtfPXRoaXMuY3VydmUucG9pbnRGcm9tWChMP18uYWRkKHRoaXMuY3VydmUubik6XyxJKTt2''@;'; put 'put ''YXIgTj1mLnIuaW52bShkKSxQPWQuc3ViKHYpLm11bChOKS51bW9kKGQpLEI9QS5tdWwoTikudW1vZChkKTtyZXR1cm4gdGhpcy5nLm11bEFkZChQLF8sQil9LGkucHJvdG90eXBlLmdldEtleVJlY292ZXJ5UGFyYW09ZnVuY3Rpb24oaCxmLHUscCl7aWYobnVsbCE9PShmPW5ldyBuKGYscCkp''@;'; put 'put ''LnJlY292ZXJ5UGFyYW0pcmV0dXJuIGYucmVjb3ZlcnlQYXJhbTtmb3IodmFyIGQ9MDtkPDQ7ZCsrKXt2YXIgdjt0cnl7dj10aGlzLnJlY292ZXJQdWJLZXkoaCxmLGQpfWNhdGNoe2NvbnRpbnVlfWlmKHYuZXEodSkpcmV0dXJuIGR9dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB2''@;'; put 'put ''YWxpZCByZWNvdmVyeSBmYWN0b3IiKX19LHsiLi4vY3VydmVzIjo0MTEsIi4uL3V0aWxzIjo0MTksIi4va2V5Ijo0MTMsIi4vc2lnbmF0dXJlIjo0MTQsImJuLmpzIjo0MjAsYnJvcmFuZDoxODcsImhtYWMtZHJiZyI6NDM4fV0sNDEzOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBiPXMoImJuLmpzIiksYT1zKCIuLi91dGlscyIpLmFzc2VydDtmdW5jdGlvbiBvKHIsdCl7dGhpcy5lYz1yLHRoaXMucHJpdj1udWxsLHRoaXMucHViPW51bGwsdC5wcml2JiZ0aGlzLl9pbXBvcnRQcml2YXRlKHQucHJpdix0LnByaXZFbmMpLHQucHViJiZ0aGlzLl9pbXBvcnRQdWJsaWMo''@;'; put 'put ''dC5wdWIsdC5wdWJFbmMpfUUuZXhwb3J0cz1vLG8uZnJvbVB1YmxpYz1mdW5jdGlvbihyLHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBvP3Q6bmV3IG8ocix7cHViOnQscHViRW5jOmV9KX0sby5mcm9tUHJpdmF0ZT1mdW5jdGlvbihyLHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBvP3Q6bmV3''@;'; put 'put ''IG8ocix7cHJpdjp0LHByaXZFbmM6ZX0pfSxvLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuZ2V0UHVibGljKCk7cmV0dXJuIHIuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITEscmVhc29uOiJJbnZhbGlkIHB1YmxpYyBrZXkifTpyLnZhbGlkYXRlKCk/ci5tdWwodGhp''@;'; put 'put ''cy5lYy5jdXJ2ZS5uKS5pc0luZmluaXR5KCk/e3Jlc3VsdDohMCxyZWFzb246bnVsbH06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgKiBOICE9IE8ifTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSBpcyBub3QgYSBwb2ludCJ9fSxvLnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVu''@;'; put 'put ''Y3Rpb24ocix0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHImJih0PXIscj1udWxsKSx0aGlzLnB1Ynx8KHRoaXMucHViPXRoaXMuZWMuZy5tdWwodGhpcy5wcml2KSksdD90aGlzLnB1Yi5lbmNvZGUodCxyKTp0aGlzLnB1Yn0sby5wcm90b3R5cGUuZ2V0UHJpdmF0ZT1mdW5jdGlvbihyKXty''@;'; put 'put ''ZXR1cm4iaGV4Ij09PXI/dGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpOnRoaXMucHJpdn0sby5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGU9ZnVuY3Rpb24ocix0KXt0aGlzLnByaXY9bmV3IGIocix0fHwxNiksdGhpcy5wcml2PXRoaXMucHJpdi51bW9kKHRoaXMuZWMuY3VydmUubil9LG8ucHJv''@;'; put 'put ''dG90eXBlLl9pbXBvcnRQdWJsaWM9ZnVuY3Rpb24ocix0KXtpZihyLnh8fHIueSlyZXR1cm4ibW9udCI9PT10aGlzLmVjLmN1cnZlLnR5cGU/YShyLngsIk5lZWQgeCBjb29yZGluYXRlIik6InNob3J0IiE9PXRoaXMuZWMuY3VydmUudHlwZSYmImVkd2FyZHMiIT09dGhpcy5lYy5jdXJ2ZS50''@;'; put 'put ''eXBlfHxhKHIueCYmci55LCJOZWVkIGJvdGggeCBhbmQgeSBjb29yZGluYXRlIiksdm9pZCh0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLnBvaW50KHIueCxyLnkpKTt0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLmRlY29kZVBvaW50KHIsdCl9LG8ucHJvdG90eXBlLmRlcml2ZT1mdW5jdGlvbihyKXty''@;'; put 'put ''ZXR1cm4gci52YWxpZGF0ZSgpfHxhKHIudmFsaWRhdGUoKSwicHVibGljIHBvaW50IG5vdCB2YWxpZGF0ZWQiKSxyLm11bCh0aGlzLnByaXYpLmdldFgoKX0sby5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihyLHQsZSl7cmV0dXJuIHRoaXMuZWMuc2lnbihyLHRoaXMsdCxlKX0sby5wcm90b3R5''@;'; put 'put ''cGUudmVyaWZ5PWZ1bmN0aW9uKHIsdCl7cmV0dXJuIHRoaXMuZWMudmVyaWZ5KHIsdCx0aGlzKX0sby5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiI8S2V5IHByaXY6ICIrKHRoaXMucHJpdiYmdGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpKSsiIHB1YjogIisodGhpcy5wdWIm''@;'; put 'put ''JnRoaXMucHViLmluc3BlY3QoKSkrIiA+In19LHsiLi4vdXRpbHMiOjQxOSwiYm4uanMiOjQyMH1dLDQxNDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCJibi5qcyIpLGE9cygiLi4vdXRpbHMiKSxvPWEuYXNzZXJ0O2Z1bmN0aW9uIHIoaSxoKXtpZihpIGluc3RhbmNl''@;'; put 'put ''b2YgcilyZXR1cm4gaTt0aGlzLl9pbXBvcnRERVIoaSxoKXx8KG8oaS5yJiZpLnMsIlNpZ25hdHVyZSB3aXRob3V0IHIgb3IgcyIpLHRoaXMucj1uZXcgYihpLnIsMTYpLHRoaXMucz1uZXcgYihpLnMsMTYpLHRoaXMucmVjb3ZlcnlQYXJhbT12b2lkIDA9PT1pLnJlY292ZXJ5UGFyYW0/bnVs''@;'; put 'put ''bDppLnJlY292ZXJ5UGFyYW0pfWZ1bmN0aW9uIHQoKXt0aGlzLnBsYWNlPTB9ZnVuY3Rpb24gZShpLGgpe3ZhciBmPWlbaC5wbGFjZSsrXTtpZighKDEyOCZmKSlyZXR1cm4gZjt2YXIgdT0xNSZmO2lmKDA9PT11fHx1PjQpcmV0dXJuITE7Zm9yKHZhciBwPTAsZD0wLHY9aC5wbGFjZTtkPHU7''@;'; put 'put ''ZCsrLHYrKylwPDw9OCxwfD1pW3ZdLHA+Pj49MDtyZXR1cm4hKHA8PTEyNykmJihoLnBsYWNlPXYscCl9ZnVuY3Rpb24gbChpKXtmb3IodmFyIGg9MCxmPWkubGVuZ3RoLTE7IWlbaF0mJiEoMTI4JmlbaCsxXSkmJmg8ZjspaCsrO3JldHVybiAwPT09aD9pOmkuc2xpY2UoaCl9ZnVuY3Rpb24g''@;'; put 'put ''bihpLGgpe2lmKGg8MTI4KWkucHVzaChoKTtlbHNle3ZhciBmPTErKE1hdGgubG9nKGgpL01hdGguTE4yPj4+Myk7Zm9yKGkucHVzaCgxMjh8Zik7LS1mOylpLnB1c2goaD4+PihmPDwzKSYyNTUpO2kucHVzaChoKX19RS5leHBvcnRzPXIsci5wcm90b3R5cGUuX2ltcG9ydERFUj1mdW5jdGlv''@;'; put 'put ''bihpLGgpe2k9YS50b0FycmF5KGksaCk7dmFyIGY9bmV3IHQ7aWYoNDghPT1pW2YucGxhY2UrK10pcmV0dXJuITE7dmFyIHU9ZShpLGYpO2lmKCExPT09dXx8dStmLnBsYWNlIT09aS5sZW5ndGh8fDIhPT1pW2YucGxhY2UrK10pcmV0dXJuITE7dmFyIHA9ZShpLGYpO2lmKCExPT09cClyZXR1''@;'; put 'put ''cm4hMTt2YXIgZD1pLnNsaWNlKGYucGxhY2UscCtmLnBsYWNlKTtpZihmLnBsYWNlKz1wLDIhPT1pW2YucGxhY2UrK10pcmV0dXJuITE7dmFyIHY9ZShpLGYpO2lmKCExPT09dnx8aS5sZW5ndGghPT12K2YucGxhY2UpcmV0dXJuITE7dmFyIF89aS5zbGljZShmLnBsYWNlLHYrZi5wbGFjZSk7''@;'; put 'put ''aWYoMD09PWRbMF0pe2lmKCEoMTI4JmRbMV0pKXJldHVybiExO2Q9ZC5zbGljZSgxKX1pZigwPT09X1swXSl7aWYoISgxMjgmX1sxXSkpcmV0dXJuITE7Xz1fLnNsaWNlKDEpfXJldHVybiB0aGlzLnI9bmV3IGIoZCksdGhpcy5zPW5ldyBiKF8pLHRoaXMucmVjb3ZlcnlQYXJhbT1udWxsLCEw''@;'; put 'put ''fSxyLnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbihpKXt2YXIgaD10aGlzLnIudG9BcnJheSgpLGY9dGhpcy5zLnRvQXJyYXkoKTtmb3IoMTI4JmhbMF0mJihoPVswXS5jb25jYXQoaCkpLDEyOCZmWzBdJiYoZj1bMF0uY29uY2F0KGYpKSxoPWwoaCksZj1sKGYpOyEoZlswXXx8MTI4JmZbMV0p''@;'; put 'put ''OylmPWYuc2xpY2UoMSk7dmFyIHU9WzJdO24odSxoLmxlbmd0aCksKHU9dS5jb25jYXQoaCkpLnB1c2goMiksbih1LGYubGVuZ3RoKTt2YXIgcD11LmNvbmNhdChmKSxkPVs0OF07cmV0dXJuIG4oZCxwLmxlbmd0aCksZD1kLmNvbmNhdChwKSxhLmVuY29kZShkLGkpfX0seyIuLi91dGlscyI6''@;'; put 'put ''NDE5LCJibi5qcyI6NDIwfV0sNDE1OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoImhhc2guanMiKSxhPXMoIi4uL2N1cnZlcyIpLG89cygiLi4vdXRpbHMiKSxyPW8uYXNzZXJ0LHQ9by5wYXJzZUJ5dGVzLGU9cygiLi9rZXkiKSxsPXMoIi4vc2lnbmF0dXJlIik7ZnVu''@;'; put 'put ''Y3Rpb24gbihpKXtpZihyKCJlZDI1NTE5Ij09PWksIm9ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXIiKSwhKHRoaXMgaW5zdGFuY2VvZiBuKSlyZXR1cm4gbmV3IG4oaSk7dGhpcy5jdXJ2ZT1pPWFbaV0uY3VydmUsdGhpcy5nPWkuZyx0aGlzLmcucHJlY29tcHV0ZShpLm4uYml0TGVu''@;'; put 'put ''Z3RoKCkrMSksdGhpcy5wb2ludENsYXNzPWkucG9pbnQoKS5jb25zdHJ1Y3Rvcix0aGlzLmVuY29kaW5nTGVuZ3RoPU1hdGguY2VpbChpLm4uYml0TGVuZ3RoKCkvOCksdGhpcy5oYXNoPWIuc2hhNTEyfUUuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oaSxoKXtpPXQoaSk7''@;'; put 'put ''dmFyIGY9dGhpcy5rZXlGcm9tU2VjcmV0KGgpLHU9dGhpcy5oYXNoSW50KGYubWVzc2FnZVByZWZpeCgpLGkpLHA9dGhpcy5nLm11bCh1KSxkPXRoaXMuZW5jb2RlUG9pbnQocCksdj10aGlzLmhhc2hJbnQoZCxmLnB1YkJ5dGVzKCksaSkubXVsKGYucHJpdigpKSxfPXUuYWRkKHYpLnVtb2Qo''@;'; put 'put ''dGhpcy5jdXJ2ZS5uKTtyZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJlKHtSOnAsUzpfLFJlbmNvZGVkOmR9KX0sbi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKGksaCxmKXtpPXQoaSksaD10aGlzLm1ha2VTaWduYXR1cmUoaCk7dmFyIHU9dGhpcy5rZXlGcm9tUHVibGljKGYpLHA9dGhpcy5o''@;'; put 'put ''YXNoSW50KGguUmVuY29kZWQoKSx1LnB1YkJ5dGVzKCksaSksZD10aGlzLmcubXVsKGguUygpKTtyZXR1cm4gaC5SKCkuYWRkKHUucHViKCkubXVsKHApKS5lcShkKX0sbi5wcm90b3R5cGUuaGFzaEludD1mdW5jdGlvbigpe2Zvcih2YXIgaT10aGlzLmhhc2goKSxoPTA7aDxhcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoO2grKylpLnVwZGF0ZShhcmd1bWVudHNbaF0pO3JldHVybiBvLmludEZyb21MRShpLmRpZ2VzdCgpKS51bW9kKHRoaXMuY3VydmUubil9LG4ucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oaSl7cmV0dXJuIGUuZnJvbVB1YmxpYyh0aGlzLGkpfSxuLnByb3RvdHlwZS5r''@;'; put 'put ''ZXlGcm9tU2VjcmV0PWZ1bmN0aW9uKGkpe3JldHVybiBlLmZyb21TZWNyZXQodGhpcyxpKX0sbi5wcm90b3R5cGUubWFrZVNpZ25hdHVyZT1mdW5jdGlvbihpKXtyZXR1cm4gaSBpbnN0YW5jZW9mIGw/aTpuZXcgbCh0aGlzLGkpfSxuLnByb3RvdHlwZS5lbmNvZGVQb2ludD1mdW5jdGlvbihp''@;'; put 'put ''KXt2YXIgaD1pLmdldFkoKS50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIGhbdGhpcy5lbmNvZGluZ0xlbmd0aC0xXXw9aS5nZXRYKCkuaXNPZGQoKT8xMjg6MCxofSxuLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihpKXt2YXIgaD0oaT1vLnBhcnNlQnl0''@;'; put 'put ''ZXMoaSkpLmxlbmd0aC0xLGY9aS5zbGljZSgwLGgpLmNvbmNhdCgtMTI5JmlbaF0pLHU9ISEoMTI4JmlbaF0pLHA9by5pbnRGcm9tTEUoZik7cmV0dXJuIHRoaXMuY3VydmUucG9pbnRGcm9tWShwLHUpfSxuLnByb3RvdHlwZS5lbmNvZGVJbnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGkudG9BcnJh''@;'; put 'put ''eSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpfSxuLnByb3RvdHlwZS5kZWNvZGVJbnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIG8uaW50RnJvbUxFKGkpfSxuLnByb3RvdHlwZS5pc1BvaW50PWZ1bmN0aW9uKGkpe3JldHVybiBpIGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzfX0seyIuLi9jdXJ2''@;'; put 'put ''ZXMiOjQxMSwiLi4vdXRpbHMiOjQxOSwiLi9rZXkiOjQxNiwiLi9zaWduYXR1cmUiOjQxNywiaGFzaC5qcyI6NDI2fV0sNDE2OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL3V0aWxzIiksYT1iLmFzc2VydCxvPWIucGFyc2VCeXRlcyxyPWIuY2FjaGVkUHJvcGVy''@;'; put 'put ''dHk7ZnVuY3Rpb24gdChlLGwpe3RoaXMuZWRkc2E9ZSx0aGlzLl9zZWNyZXQ9byhsLnNlY3JldCksZS5pc1BvaW50KGwucHViKT90aGlzLl9wdWI9bC5wdWI6dGhpcy5fcHViQnl0ZXM9byhsLnB1Yil9dC5mcm9tUHVibGljPWZ1bmN0aW9uKGUsbCl7cmV0dXJuIGwgaW5zdGFuY2VvZiB0P2w6''@;'; put 'put ''bmV3IHQoZSx7cHViOmx9KX0sdC5mcm9tU2VjcmV0PWZ1bmN0aW9uKGUsbCl7cmV0dXJuIGwgaW5zdGFuY2VvZiB0P2w6bmV3IHQoZSx7c2VjcmV0Omx9KX0sdC5wcm90b3R5cGUuc2VjcmV0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlY3JldH0scih0LCJwdWJCeXRlcyIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLnB1YigpKX0pLHIodCwicHViIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wdWJCeXRlcz90aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTp0aGlzLmVkZHNhLmcubXVsKHRoaXMucHJpdigpKX0pLHIodCwi''@;'; put 'put ''cHJpdkJ5dGVzIixmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWRkc2EsbD10aGlzLmhhc2goKSxuPWUuZW5jb2RpbmdMZW5ndGgtMSxpPWwuc2xpY2UoMCxlLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gaVswXSY9MjQ4LGlbbl0mPTEyNyxpW25dfD02NCxpfSkscih0LCJwcml2IixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKX0pLHIodCwiaGFzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5oYXNoKCkudXBkYXRlKHRoaXMuc2VjcmV0KCkpLmRpZ2VzdCgpfSkscih0LCJtZXNzYWdlUHJlZml4IixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB0aGlzLmhhc2goKS5zbGljZSh0aGlzLmVkZHNhLmVuY29kaW5nTGVuZ3RoKX0pLHQucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oZSl7cmV0dXJuIGEodGhpcy5fc2VjcmV0LCJLZXlQYWlyIGNhbiBvbmx5IHZlcmlmeSIpLHRoaXMuZWRkc2Euc2lnbihlLHRoaXMpfSx0LnByb3RvdHlwZS52''@;'; put 'put ''ZXJpZnk9ZnVuY3Rpb24oZSxsKXtyZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnkoZSxsLHRoaXMpfSx0LnByb3RvdHlwZS5nZXRTZWNyZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGEodGhpcy5fc2VjcmV0LCJLZXlQYWlyIGlzIHB1YmxpYyBvbmx5IiksYi5lbmNvZGUodGhpcy5zZWNyZXQoKSxlKX0s''@;'; put 'put ''dC5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKGUpe3JldHVybiBiLmVuY29kZSh0aGlzLnB1YkJ5dGVzKCksZSl9LEUuZXhwb3J0cz10fSx7Ii4uL3V0aWxzIjo0MTl9XSw0MTc6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiYm4uanMiKSxhPXMoIi4uL3V0aWxz''@;'; put 'put ''Iiksbz1hLmFzc2VydCxyPWEuY2FjaGVkUHJvcGVydHksdD1hLnBhcnNlQnl0ZXM7ZnVuY3Rpb24gZShsLG4pe3RoaXMuZWRkc2E9bCwib2JqZWN0IiE9dHlwZW9mIG4mJihuPXQobikpLEFycmF5LmlzQXJyYXkobikmJihuPXtSOm4uc2xpY2UoMCxsLmVuY29kaW5nTGVuZ3RoKSxTOm4uc2xp''@;'; put 'put ''Y2UobC5lbmNvZGluZ0xlbmd0aCl9KSxvKG4uUiYmbi5TLCJTaWduYXR1cmUgd2l0aG91dCBSIG9yIFMiKSxsLmlzUG9pbnQobi5SKSYmKHRoaXMuX1I9bi5SKSxuLlMgaW5zdGFuY2VvZiBiJiYodGhpcy5fUz1uLlMpLHRoaXMuX1JlbmNvZGVkPUFycmF5LmlzQXJyYXkobi5SKT9uLlI6bi5S''@;'; put 'put ''ZW5jb2RlZCx0aGlzLl9TZW5jb2RlZD1BcnJheS5pc0FycmF5KG4uUyk/bi5TOm4uU2VuY29kZWR9cihlLCJTIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLlNlbmNvZGVkKCkpfSkscihlLCJSIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29k''@;'; put 'put ''ZVBvaW50KHRoaXMuUmVuY29kZWQoKSl9KSxyKGUsIlJlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKX0pLHIoZSwiU2VuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlSW50KHRoaXMuUygpKX0pLGUucHJv''@;'; put 'put ''dG90eXBlLnRvQnl0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SZW5jb2RlZCgpLmNvbmNhdCh0aGlzLlNlbmNvZGVkKCkpfSxlLnByb3RvdHlwZS50b0hleD1mdW5jdGlvbigpe3JldHVybiBhLmVuY29kZSh0aGlzLnRvQnl0ZXMoKSwiaGV4IikudG9VcHBlckNhc2UoKX0sRS5leHBvcnRz''@;'; put 'put ''PWV9LHsiLi4vdXRpbHMiOjQxOSwiYm4uanMiOjQyMH1dLDQxODpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtFLmV4cG9ydHM9e2RvdWJsZXM6e3N0ZXA6NCxwb2ludHM6W1siZTYwZmNlOTNiNTllOWVjNTMwMTFhYWJjMjFjMjNlOTdiMmEzMTM2OWI4N2E1YWU5YzQ0ZWU4OWUyYTZk''@;'; put 'put ''ZWMwYSIsImY3ZTM1MDczOTllNTk1OTI5ZGI5OWYzNGY1NzkzNzEwMTI5Njg5MWU0NGQyM2YwYmUxZjMyY2NlNjk2MTY4MjEiXSxbIjgyODIyNjMyMTJjNjA5ZDllYTJhNmUzZTE3MmRlMjM4ZDhjMzljYWJkNWFjMWNhMTA2NDZlMjNmZDVmNTE1MDgiLCIxMWY4YTgwOTg1NTdkZmU0NWU4MjU2''@;'; put 'put ''ZTgzMGI2MGFjZTYyZDYxM2FjMmY3YjE3YmVkMzFiNmVhZmY2ZTI2Y2FmIl0sWyIxNzVlMTU5ZjcyOGI4NjVhNzJmOTljYzZjNmZjODQ2ZGUwYjkzODMzZmQyMjIyZWQ3M2ZjZTViNTUxZTViNzM5IiwiZDM1MDZlMGQ5ZTNjNzllYmE0ZWY5N2E1MWZmNzFmNWVhY2I1OTU1YWRkMjQzNDVjNmVm''@;'; put 'put ''YTZmZmVlOWZlZDY5NSJdLFsiMzYzZDkwZDQ0N2IwMGM5Yzk5Y2VhYzA1YjYyNjJlZTA1MzQ0MWM3ZTU1NTUyZmZlNTI2YmFkOGY4M2ZmNDY0MCIsIjRlMjczYWRmYzczMjIyMTk1M2I0NDUzOTdmMzM2MzE0NWI5YTg5MDA4MTk5ZWNiNjIwMDNjN2YzYmVlOWRlOSJdLFsiOGI0YjVmMTY1ZGYz''@;'; put 'put ''YzJiZThjNjI0NGI1Yjc0NTYzODg0M2U0YTc4MWExNWJjZDFiNjlmNzlhNTVkZmZkZjgwYyIsIjRhYWQwYTZmNjhkMzA4YjRiM2ZiZDc4MTNhYjBkYTA0ZjllMzM2NTQ2MTYyZWU1NmIzZWZmMGM2NWZkNGZkMzYiXSxbIjcyM2NiYWE2ZTVkYjk5NmQ2YmY3NzFjMDBiZDU0OGM3YjcwMGRiZmZh''@;'; put 'put ''NmMwZTc3YmNiNjExNTkyNTIzMmZjZGEiLCI5NmU4NjdiNTU5NWNjNDk4YTkyMTEzNzQ4ODgyNGQ2ZTI2NjBhMDY1Mzc3OTQ5NDgwMWRjMDY5ZDllYjM5ZjVmIl0sWyJlZWJmYTRkNDkzYmViZjk4YmE1ZmVlYzgxMmMyZDNiNTA5NDc5NjEyMzdhOTE5ODM5YTUzM2VjYTBlN2RkN2ZhIiwiNWQ5''@;'; put 'put ''YThjYTM5NzBlZjBmMjY5ZWU3ZWRhZjE3ODA4OWQ5YWU0Y2RjM2E3MTFmNzEyZGRmZDRmZGFlMWRlODk5OSJdLFsiMTAwZjQ0ZGE2OTZlNzE2NzI3OTFkMGEwOWI3YmRlNDU5ZjEyMTVhMjliM2MwM2JmZWZkNzgzNWIzOWE0OGRiMCIsImNkZDllMTMxOTJhMDBiNzcyZWM4ZjMzMDBjMDkwNjY2''@;'; put 'put ''YjdmZjRhMThmZjUxOTVhYzBmYmQ1Y2Q2MmJjNjVhMDkiXSxbImUxMDMxYmUyNjJjN2VkMWIxZGM5MjI3YTRhMDRjMDE3YTc3ZjhkNDQ2NGYzYjM4NTJjOGFjZGU2ZTUzNGZkMmQiLCI5ZDcwNjE5Mjg5NDA0MDVlNmJiNmE0MTc2NTk3NTM1YWYyOTJkZDQxOWUxY2VkNzlhNDRmMThmMjk0NTZh''@;'; put 'put ''MDBkIl0sWyJmZWVhNmNhZTQ2ZDU1YjUzMGFjMjgzOWYxNDNiZDdlYzVjZjhiMjY2YTQxZDZhZjUyZDVlNjg4ZDkwOTQ2OTZkIiwiZTU3YzZiNmM5N2RjZTFiYWIwNmU0ZTEyYmYzZWNkNWM5ODFjODk1N2NjNDE0NDJkMzE1NWRlYmYxODA5MDA4OCJdLFsiZGE2N2E5MWQ5MTA0OWNkY2IzNjdi''@;'; put 'put ''ZTRiZTZmZmNhM2NmZWVkNjU3ZDgwODU4M2RlMzNmYTk3OGJjMWVjNmNiMSIsIjliYWNhYTM1NDgxNjQyYmM0MWY0NjNmN2VjOTc4MGU1ZGVjN2FkYzUwOGY3NDBhMTdlOWVhOGUyN2E2OGJlMWQiXSxbIjUzOTA0ZmFhMGIzMzRjZGRhNmUwMDA5MzVlZjIyMTUxZWMwOGQwZjdiYjExMDY5ZjU3''@;'; put 'put ''NTQ1Y2NjMWEzN2I3YzAiLCI1YmMwODdkMGJjODAxMDZkODhjOWVjY2FjMjBkM2MxYzEzOTk5OTgxZTE0NDM0Njk5ZGNiMDk2YjAyMjc3MWM4Il0sWyI4ZTdiY2QwYmQzNTk4M2E3NzE5Y2NhNzc2NGNhOTA2Nzc5YjUzYTA0M2E5YjhiY2FlZmY5NTlmNDNhZDg2MDQ3IiwiMTBiNzc3MGIyYTNk''@;'; put 'put ''YTRiMzk0MDMxMDQyMGNhOTUxNDU3OWU4OGUyZTQ3ZmQ2OGIzZWExMDA0N2U4NDYwMzcyYSJdLFsiMzg1ZWVkMzRjMWNkZmYyMWU2ZDA4MTg2ODliODFiZGU3MWE3ZjRmMTgzOTdlNjY5MGE4NDFlMTU5OWM0Mzg2MiIsIjI4M2JlYmMzZThlYTIzZjU2NzAxZGUxOWU5ZWJmNDU3NmIzMDRlZWMy''@;'; put 'put ''MDg2ZGM4Y2MwNDU4ZmU1NTQyZTU0NTMiXSxbIjZmOWQ5YjgwM2VjZjE5MTYzN2M3M2E0NDEzZGZhMTgwZmRkZjg0YTU5NDdmYmM5YzYwNmVkODZjM2ZhYzNhNyIsIjdjODBjNjhlNjAzMDU5YmE2OWI4ZTJhMzBlNDVjNGQ0N2VhNGRkMmY1YzI4MTAwMmQ4Njg5MDYwM2E4NDIxNjAiXSxbIjMz''@;'; put 'put ''MjJkNDAxMjQzYzRlMjU4MmEyMTQ3YzEwNGQ2ZWNiZjc3NGQxNjNkYjBmNWU1MzEzYjdlMGU3NDJkMGU2YmQiLCI1NmU3MDc5N2U5NjY0ZWY1YmZiMDE5YmM0ZGRhZjliNzI4MDVmNjNlYTI4NzNhZjYyNGYzYTJlOTZjMjhiMmEwIl0sWyI4NTY3MmM3ZDJkZTBiN2RhMmJkMTc3MGQ4OTY2NTg2''@;'; put 'put ''ODc0MWIzZjlhZjc2NDMzOTc3MjFkNzRkMjgxMzRhYjgzIiwiN2M0ODFiOWI1YjQzYjJlYjYzNzQwNDliZmE2MmMyZTVlNzdmMTdmY2M1Mjk4ZjQ0YzhlMzA5NGY3OTAzMTNhNiJdLFsiOTQ4YmY4MDliMTk4OGE0NmIwNmM5ZjE5MTk0MTNiMTBmOTIyNmM2MGY2Njg4MzJmZmQ5NTlhZjYwYzgy''@;'; put 'put ''YTBhIiwiNTNhNTYyODU2ZGNiNjY0NmRjNmI3NGM1ZDFjMzQxOGM2ZDRkZmYwOGM5N2NkMmJlZDRjYjdmODhkOGM4ZTU4OSJdLFsiNjI2MGNlN2Y0NjE4MDFjMzRmMDY3Y2UwZjAyODczYThmMWIwZTQ0ZGZjNjk3NTJhY2NlY2Q4MTlmMzhmZDhlOCIsImJjMmRhODJiNmZhNWI1NzFhN2YwOTA0''@;'; put 'put ''OTc3NmExZWY3ZWNkMjkyMjM4MDUxYzE5OGMxYTg0ZTk1YjJiNGFlMTciXSxbImU1MDM3ZGUwYWZjMWQ4ZDQzZDgzNDg0MTRiYmY0MTAzMDQzZWM4ZjU3NWJmZGM0MzI5NTNjYzhkMjAzN2ZhMmQiLCI0NTcxNTM0YmFhOTRkM2I1ZjlmOThkMDlmYjk5MGJkZGJkNWY1YjAzZWM0ODFmMTBlMGU1''@;'; put 'put ''ZGM4NDFkNzU1YmRhIl0sWyJlMDYzNzJiMGY0YTIwN2FkZjVlYTkwNWU4ZjE3NzFiNGU3ZThkYmQxYzZhNmM1YjcyNTg2NmEwYWU0ZmNlNzI1IiwiN2E5MDg5NzRiY2UxOGNmZTEyYTI3YmIyYWQ1YTQ4OGNkNzQ4NGE3Nzg3MTA0ODcwYjI3MDM0Zjk0ZWVlMzFkZCJdLFsiMjEzYzdhNzE1Y2Q1''@;'; put 'put ''ZDQ1MzU4ZDBiYmY5ZGMwY2UwMjIwNGIxMGJkZGUyYTNmNTg1NDBhZDY5MDhkMDU1OTc1NCIsIjRiNmRhZDBiNWFlNDYyNTA3MDEzYWQwNjI0NWJhMTkwYmI0ODUwZjVmMzZhN2VlZGRmZjJjMjc1MzRiNDU4ZjIiXSxbIjRlN2MyNzJhN2FmNGIzNGU4ZGJiOTM1MmE1NDE5YTg3ZTI4MzhjNzBh''@;'; put 'put ''ZGM2MmNkZGYwY2MzYTNiMDhmYmQ1M2MiLCIxNzc0OWM3NjZjOWQwYjE4ZTE2ZmQwOWY2ZGVmNjgxYjUzMGI5NjE0YmZmN2RkMzNlMGIzOTQxODE3ZGNhYWU2Il0sWyJmZWE3NGUzZGJlNzc4YjFiMTBmMjM4YWQ2MTY4NmFhNWM3NmUzZGIyYmU0MzA1NzYzMjQyN2UyODQwZmIyN2I2IiwiNmUw''@;'; put 'put ''NTY4ZGI5YjBiMTMyOTdjZjY3NGRlY2NiNmFmOTMxMjZiNTk2Yjk3M2Y3Yjc3NzAxZDNkYjdmMjNjYjk2ZiJdLFsiNzZlNjQxMTNmNjc3Y2YwZTEwYTI1NzBkNTk5OTY4ZDMxNTQ0ZTE3OWI3NjA0MzI5NTJjMDJhNDQxN2JkZGUzOSIsImM5MGRkZjhkZWU0ZTk1Y2Y1NzcwNjZkNzA2ODFmMGQz''@;'; put 'put ''NWUyYTMzZDJiNTZkMjAzMmI0YjE3NTJkMTkwMWFjMDEiXSxbImM3MzhjNTZiMDNiMmFiZTFlODI4MWJhYTc0M2Y4ZjlhOGY3Y2M2NDNkZjI2Y2JlZTNhYjE1MDI0MmJjYmI4OTEiLCI4OTNmYjU3ODk1MWFkMjUzN2Y3MThmMmVhY2JmYmJiYjgyMzE0ZWVmNzg4MGNmZTkxN2U3MzVkOTY5OWE4''@;'; put 'put ''NGMzIl0sWyJkODk1NjI2NTQ4YjY1YjgxZTI2NGM3NjM3Yzk3Mjg3N2QxZDcyZTVmM2E5MjUwMTQzNzJlOWY2NTg4ZjZjMTRiIiwiZmViZmFhMzhmMmJjN2VhZTcyOGVjNjA4MThjMzQwZWIwMzQyOGQ2MzJiYjA2N2UxNzkzNjNlZDc1ZDdkOTkxZiJdLFsiYjhkYTk0MDMyYTk1NzUxOGViMGY2''@;'; put 'put ''NDMzNTcxZTg3NjFjZWZmYzczNjkzZTg0ZWRkNDkxNTBhNTY0ZjY3NmUwMyIsIjI4MDRkZmE0NDgwNWExZTRkN2M5OWNjOTc2MjgwOGIwOTJjYzU4NGQ5NWZmM2I1MTE0ODhlNGU3NGVmZGY2ZTciXSxbImU4MGZlYTE0NDQxZmIzM2E3ZDhhZGFiOTQ3NWQ3ZmFiMjAxOWVmZmI1MTU2YTc5MmYx''@;'; put 'put ''YTExNzc4ZTNjMGRmNWQiLCJlZWQxZGU3ZjYzOGUwMDc3MWU4OTc2OGNhM2NhOTQ0NzJkMTU1ZTgwYWYzMjJlYTlmY2I0MjkxYjZhYzllYzc4Il0sWyJhMzAxNjk3YmRmY2Q3MDQzMTNiYTQ4ZTUxZDU2NzU0M2YyYTE4MjAzMWVmZDY5MTVkZGMwN2JiY2M0ZTE2MDcwIiwiNzM3MGY5MWNmYjY3''@;'; put 'put ''ZTRmNTA4MTgwOWZhMjVkNDBmOWIxNzM1ZGJmN2MwYTExYTEzMGMwZDFhMDQxZTE3N2VhMSJdLFsiOTBhZDg1YjM4OWQ2YjkzNjQ2M2Y5ZDA1MTI2NzhkZTIwOGNjMzMwYjExMzA3ZmZmYWI3YWM2M2UzZmIwNGVkNCIsImU1MDdhMzYyMGEzODI2MWFmZmRjYmQ5NDI3MjIyYjgzOWFlZmFiZTE1''@;'; put 'put ''ODI4OTRkOTkxZDRkNDhjYjZlZjE1MCJdLFsiOGY2OGI5ZDJmNjNiNWYzMzkyMzljMWFkOTgxZjE2MmVlODhjNTY3ODcyM2VhMzM1MWI3YjQ0NGM5ZWM0YzBkYSIsIjY2MmE5ZjJkYmEwNjM5ODZkZTFkOTBjMmI2YmUyMTVkYmJlYTJjZmU5NTUxMGJmZGYyM2NiZjc5NTAxZmZmODIiXSxbImU0''@;'; put 'put ''ZjNmYjAxNzZhZjg1ZDY1ZmY5OWZmOTE5OGMzNjA5MWY0OGU4NjUwMzY4MWUzZTY2ODZmZDUwNTMyMzFlMTEiLCIxZTYzNjMzYWQwZWY0ZjFjMTY2MWE2ZDBlYTAyYjcyODZjYzdlNzRlYzk1MWQxYzk4MjJjMzg1NzZmZWI3M2JjIl0sWyI4YzAwZmE5YjE4ZWJmMzMxZWI5NjE1MzdhNDVhNDI2''@;'; put 'put ''NmM3MDM0ZjJmMGQ0ZTFkMDcxNmZiNmVhZTIwZWFlMjllIiwiZWZhNDcyNjdmZWE1MjFhMWE5ZGMzNDNhMzczNmM5NzRjMmZhZGFmYTgxZTM2YzU0ZTdkMmE0YzY2NzAyNDE0YiJdLFsiZTdhMjZjZTY5ZGQ0ODI5ZjNlMTBjZWMwYTllOThlZDMxNDNkMDg0ZjMwOGI5MmMwOTk3ZmRkZmM2MGNi''@;'; put 'put ''M2U0MSIsIjJhNzU4ZTMwMGZhNzk4NGI0NzFiMDA2YTFhYWZiYjE4ZDBhNmIyYzA0MjBlODNlMjBlOGE5NDIxY2YyY2ZkNTEiXSxbImI2NDU5ZTBlZTM2NjJlYzhkMjM1NDBjMjIzYmNiZGM1NzFjYmNiOTY3ZDc5NDI0ZjNjZjI5ZWIzZGU2YjgwZWYiLCI2N2M4NzZkMDZmM2UwNmRlMWRhZGYx''@;'; put 'put ''NmU1NjYxZGIzYzRiM2FlNmQ0OGUzNWIyZmYzMGJmMGI2MWE3MWJhNDUiXSxbImQ2OGE4MGM4MjgwYmI4NDA3OTMyMzRhYTExOGYwNjIzMWQ2ZjFmYzY3ZTczYzVhNWRlZGEwZjViNDk2OTQzZTgiLCJkYjhiYTlmZmY0YjU4NmQwMGM0YjFmOTE3N2IwZTI4YjViMGU3YjhmNzg0NTI5NWEyOTRj''@;'; put 'put ''ODQyNjZiMTMzMTIwIl0sWyIzMjRhZWQ3ZGY2NWM4MDQyNTJkYzAyNzA5MDdhMzBiMDk2MTJhZWI5NzM0NDljZWE0MDk1OTgwZmMyOGQzZDVkIiwiNjQ4YTM2NTc3NGI2MWYyZmYxMzBjMGMzNWFlYzFmNGYxOTIxM2IwYzdlMzMyODQzOTY3MjI0YWY5NmFiN2M4NCJdLFsiNGRmOWMxNDkxOWNk''@;'; put 'put ''ZTYxZjZkNTFkZmRiZTVmZWU1ZGNlZWM0MTQzYmE4ZDFjYTg4OGU4YmQzNzNmZDA1NGM5NiIsIjM1ZWM1MTA5MmQ4NzI4MDUwOTc0YzIzYTFkODVkNGI1ZDUwNmNkYzI4ODQ5MDE5MmViYWMwNmNhZDEwZDVkIl0sWyI5YzM5MTlhODRhNDc0ODcwZmFlZDhhOWMxY2M2NjAyMTUyMzQ4OTA1NGQ3''@;'; put 'put ''ZjAzMDhjYmZjOTljOGFjMWY5OGNkIiwiZGRiODRmMGY0YTRkZGQ1NzU4NGYwNDRiZjI2MGU2NDE5MDUzMjZmNzZjNjRjOGU2YmU3ZTVlMDNkNGZjNTk5ZCJdLFsiNjA1NzE3MGIxZGQxMmZkZjhkZTA1ZjI4MWQ4ZTA2YmI5MWUxNDkzYThiOTFkNGNjNWEyMTM4MjEyMGE5NTllNSIsIjlhMWFm''@;'; put 'put ''MGIyNmE2YTQ4MDdhZGQ5YTJkYWY3MWRmMjYyNDY1MTUyYmMzZWUyNGM2NWU4OTliZTkzMjM4NWEyYTgiXSxbImE1NzZkZjhlMjNhMDg0MTE0MjE0MzlhNDUxOGRhMzE4ODBjZWYwZmJhN2Q0ZGYxMmIxYTY5NzNlZWNiOTQyNjYiLCI0MGE2YmYyMGU3NjY0MGIyYzkyYjk3YWZlNThjZDgyYzQz''@;'; put 'put ''MmUxMGE3ZjUxNGQ5ZjNlZThiZTExYWUxYjI4ZWM4Il0sWyI3Nzc4YTc4YzI4ZGVjM2UzMGEwNWZlOTYyOWRlOGMzOGJiMzBkMWY1Y2Y5YTNhMjA4Zjc2Mzg4OWJlNThhZDcxIiwiMzQ2MjZkOWFiNWE1YjIyZmY3MDk4ZTEyZjJmZjU4MDA4N2IzODQxMWZmMjRhYzU2M2I1MTNmYzFmZDlmNDNh''@;'; put 'put ''YyJdLFsiOTI4OTU1ZWU2MzdhODQ0NjM3MjlmZDMwZTdhZmQyZWQ1Zjk2Mjc0ZTVhZDdlNWNiMDllZGE5YzA2ZDkwM2FjIiwiYzI1NjIxMDAzZDNmNDJhODI3Yjc4YTEzMDkzYTk1ZWVhYzNkMjZlZmE4YThkODNmYzUxODBlOTM1YmNkMDkxZiJdLFsiODVkMGZlZjNlYzZkYjEwOTM5OTA2NGYz''@;'; put 'put ''YTBlM2IyODU1NjQ1YjRhOTA3YWQzNTQ1MjdhYWU3NTE2M2Q4Mjc1MSIsIjFmMDM2NDg0MTNhMzhjMGJlMjlkNDk2ZTU4MmNmNTY2M2U4NzUxZTk2ODc3MzMxNTgyYzIzN2EyNGViMWY5NjIiXSxbImZmMmIwZGNlOTdlZWNlOTdjMWM5YjYwNDE3OThiODVkZmRmYjZkODg4MmRhMjAzMDhmNTQw''@;'; put 'put ''NDgyNDUyNjA4N2UiLCI0OTNkMTNmZWY1MjRiYTE4OGFmNGM0ZGM1NGQwNzkzNmM3YjdlZDZmYjkwZTJjZWIyYzk1MWUwMWYwYzI5OTA3Il0sWyI4MjdmYmJlNGIxZTg4MGVhOWVkMmIyZTYzMDFiMjEyYjU3ZjFlZTE0OGNkNmRkMjg3ODBlNWUyY2Y4NTZlMjQxIiwiYzYwZjljOTIzYzcyN2Iw''@;'; put 'put ''YjcxYmVmMmM2N2QxZDEyNjg3ZmY3YTYzMTg2OTAzMTY2ZDYwNWI2OGJhZWMyOTNlYyJdLFsiZWFhNjQ5ZjIxZjUxYmRiYWU3YmU0YWUzNGNlNmU1MjE3YTU4ZmRjZTdmNDdmOWFhN2YzYjU4ZmEyMTIwZTJiMyIsImJlMzI3OWVkNWJiYmIwM2FjNjlhODBmODk4NzlhYTVhMDFhNmI5NjVmMTNm''@;'; put 'put ''N2U1OWQ0N2E1MzA1YmE1YWQ5M2QiXSxbImU0YTQyZDQzYzVjZjE2OWQ5MzkxZGY2ZGVjZjQyZWU1NDFiNmQ4ZjBjOWExMzc0MDFlMjM2MzJkZGEzNGQyNGYiLCI0ZDlmOTJlNzE2ZDFjNzM1MjZmYzk5Y2NmYjhhZDM0Y2U4ODZlZWRmYThkOGU0ZjEzYTdmNzEzMWRlYmE5NDE0Il0sWyIxZWM4''@;'; put 'put ''MGZlZjM2MGNiZGQ5NTQxNjBmYWRhYjM1MmI2YjkyYjUzNTc2YTg4ZmVhNDk0NzE3M2I5ZDQzMDBiZjE5IiwiYWVlZmU5Mzc1NmI1MzQwZDJmM2E0OTU4YTdhYmJmNWUwMTQ2ZTc3ZjYyOTVhMDdiNjcxY2RjMWNjMTA3Y2VmZCJdLFsiMTQ2YTc3OGMwNDY3MGMyZjkxYjAwYWY0NjgwZGZhOGJj''@;'; put 'put ''ZTM0OTA3MTdkNThiYTg4OWRkYjU5MjgzNjY2NDJiZSIsImIzMThlMGVjMzM1NDAyOGFkZDY2OTgyN2Y5ZDRiMjg3MGFhYTk3MWQyZjdlNWVkMWQwYjI5NzQ4M2Q4M2VmZDAiXSxbImZhNTBjMGY2MWQyMmU1ZjA3ZTNhY2ViYjFhYTA3YjEyOGQwMDEyMjA5YTI4Yjk3NzZkNzZhODc5MzE4MGVl''@;'; put 'put ''ZjkiLCI2Yjg0YzY5MjIzOTdlYmE5YjcyY2QyODcyMjgxYTY4YTVlNjgzMjkzYTU3YTIxM2IzOGNkOGQ3ZDNmNGYyODExIl0sWyJkYTFkNjFkMGNhNzIxYTExYjFhNWJmNmI3ZDg4ZTg0MjFhMjg4YWI1ZDViYmE1MjIwZTUzZDMyYjVmMDY3ZWMyIiwiODE1N2Y1NWE3Yzk5MzA2Yzc5YzA3NjYx''@;'; put 'put ''NjFjOTFlMjk2NmE3Mzg5OWQyNzliNDhhNjU1ZmJhMGYxYWQ4MzZmMSJdLFsiYThlMjgyZmYwYzk3MDY5MDcyMTVmZjk4ZThmZDQxNjYxNTMxMWRlMDQ0NmYxZTA2MmE3M2IwNjEwZDA2NGUxMyIsIjdmOTczNTViOGRiODFjMDlhYmZiN2YzYzViMjUxNTg4OGI2NzlhM2U1MGRkNmJkNmNlZjdj''@;'; put 'put ''NzMxMTFmNGNjMGMiXSxbIjE3NGE1M2I5YzlhMjg1ODcyZDM5ZTU2ZTY5MTNjYWIxNWQ1OWIxZmE1MTI1MDhjMDIyZjM4MmRlODMxOTQ5N2MiLCJjY2M5ZGMzN2FiZmM5YzE2NTdiNDE1NWYyYzQ3ZjllNjY0NmIzYTFkOGNiOTg1NDM4M2RhMTNhYzA3OWFmYTczIl0sWyI5NTkzOTY5ODE5NDM3''@;'; put 'put ''ODVjM2QzZTU3ZWRmNTAxOGNkYmUwMzllNzMwZTQ5MThiM2Q4ODRmZGZmMDk0NzViN2JhIiwiMmU3ZTU1Mjg4OGMzMzFkZDhiYTAzODZhNGI5Y2Q2ODQ5YzY1M2Y2NGM4NzA5Mzg1ZTliOGFiZjg3NTI0ZjJmZCJdLFsiZDJhNjNhNTBhZTQwMWU1NmQ2NDVhMTE1M2IxMDlhOGZjY2EwYTQzZDU2''@;'; put 'put ''MWZiYTJkYmI1MTM0MGM5ZDgyYjE1MSIsImU4MmQ4NmZiNjQ0M2ZjYjc1NjVhZWU1OGIyOTQ4MjIwYTcwZjc1MGFmNDg0Y2E1MmQ0MTQyMTc0ZGNmODk0MDUiXSxbIjY0NTg3ZTIzMzU0NzFlYjg5MGVlNzg5NmQ3Y2ZkYzg2NmJhY2JkYmQzODM5MzE3YjM0MzZmOWI0NTYxN2UwNzMiLCJkOTlm''@;'; put 'put ''Y2RkNWJmNjkwMmUyYWU5NmRkNjQ0N2MyOTlhMTg1YjkwYTM5MTMzYWVhYjM1ODI5OWU1ZTlmYWY2NTg5Il0sWyI4NDgxYmRlMGU0ZTRkODg1YjNhNTQ2ZDNlNTQ5ZGUwNDJmMGFhNmNlYTI1MGU3ZmQzNThkNmM4NmRkNDVlNDU4IiwiMzhlZTdiOGNiYTU0MDRkZDg0YTI1YmYzOWNlY2IyY2E5''@;'; put 'put ''MDBhNzljNDJiMjYyZTU1NmQ2NGIxYjU5Nzc5MDU3ZSJdLFsiMTM0NjRhNTdhNzgxMDJhYTYyYjY5NzlhZTgxN2Y0NjM3ZmZjZmVkM2M0YjFjZTMwYmNkNjMwM2Y2Y2FmNjY2YiIsIjY5YmUxNTkwMDQ2MTQ1ODBlZjdlNDMzNDUzY2NiMGNhNDhmMzAwYTgxZDA5NDJlMTNmNDk1YTkwN2Y2ZWNj''@;'; put 'put ''MjciXSxbImJjNGE5ZGY1YjcxM2ZlMmU5YWVmNDMwYmNjMWRjOTdhMGNkOWNjZWRlMmYyODU4OGNhZGEzYTBkMmQ4M2YzNjYiLCJkM2E4MWNhNmU3ODVjMDYzODM5MzdhZGY0Yjc5OGNhYTZlOGE5ZmJmYTU0N2IxNmQ3NThkNjY2NTgxZjMzYzEiXSxbIjhjMjhhOTdiZjgyOThiYzBkMjNkOGM3''@;'; put 'put ''NDk0NTJhMzJlNjk0YjY1ZTMwYTk0NzJhMzk1NGFiMzBmZTUzMjRjYWEiLCI0MGEzMDQ2M2EzMzA1MTkzMzc4ZmVkZjMxZjdjYzBlYjdhZTc4NGYwNDUxY2I5NDU5ZTcxZGM3M2NiZWY5NDgyIl0sWyI4ZWE5NjY2MTM5NTI3YThjMWRkOTRjZTRmMDcxZmQyM2M4YjM1MGM1YTRiYjMzNzQ4YzRi''@;'; put 'put ''YTExMWZhY2NhZTAiLCI2MjBlZmFiYmM4ZWUyNzgyZTI0ZTdjMGNmYjk1YzVkNzM1Yjc4M2JlOWNmMGY4ZTk1NWFmMzRhMzBlNjJiOTQ1Il0sWyJkZDM2MjVmYWVmNWJhMDYwNzQ2Njk3MTZiYmQzNzg4ZDg5YmRkZTgxNTk1OTk2ODA5MmY3NmNjNGViOWE5Nzg3IiwiN2ExODhmYTM1MjBlMzBk''@;'; put 'put ''NDYxZGEyNTAxMDQ1NzMxY2E5NDE0NjE5ODI4ODMzOTU5MzdmNjhkMDBjNjQ0YTU3MyJdLFsiZjcxMGQ3OWQ5ZWI5NjIyOTdlNGY2MjMyYjQwZThmN2ZlYjJiYzYzODE0NjE0ZDY5MmMxMmRlNzUyNDA4MjIxZSIsImVhOThlNjcyMzJkM2IzMjk1ZDNiNTM1NTMyMTE1Y2NhYzg2MTJjNzIxODUx''@;'; put 'put ''NjE3NTI2YWU0N2E5Yzc3YmZjODIiXV19LG5hZjp7d25kOjcscG9pbnRzOltbImY5MzA4YTAxOTI1OGMzMTA0OTM0NGY4NWY4OWQ1MjI5YjUzMWM4NDU4MzZmOTliMDg2MDFmMTEzYmNlMDM2ZjkiLCIzODhmN2IwZjYzMmRlODE0MGZlMzM3ZTYyYTM3ZjM1NjY1MDBhOTk5MzRjMjIzMWI2Y2I5''@;'; put 'put ''ZmQ3NTg0YjhlNjcyIl0sWyIyZjhiZGU0ZDFhMDcyMDkzNTViNGE3MjUwYTVjNTEyOGU4OGI4NGJkZGM2MTlhYjdjYmE4ZDU2OWIyNDBlZmU0IiwiZDhhYzIyMjYzNmU1ZTNkNmQ0ZGJhOWRkYTZjOWM0MjZmNzg4MjcxYmFiMGQ2ODQwZGNhODdkM2FhNmFjNjJkNiJdLFsiNWNiZGYwNjQ2ZTVk''@;'; put 'put ''YjRlYWEzOThmMzY1ZjJlYTdhMGUzZDQxOWI3ZTAzMzBlMzljZTkyYmRkZWRjYWM0ZjliYyIsIjZhZWJjYTQwYmEyNTU5NjBhMzE3OGQ2ZDg2MWE1NGRiYTgxM2QwYjgxM2ZkZTdiNWE1MDgyNjI4MDg3MjY0ZGEiXSxbImFjZDQ4NGUyZjBjN2Y2NTMwOWFkMTc4YTlmNTU5YWJkZTA5Nzk2OTc0''@;'; put 'put ''YzU3ZTcxNGMzNWYxMTBkZmMyN2NjYmUiLCJjYzMzODkyMWIwYTdkOWZkNjQzODA5NzE3NjNiNjFlOWFkZDg4OGE0Mzc1ZjhlMGYwNWNjMjYyYWM2NGY5YzM3Il0sWyI3NzRhZTdmODU4YTk0MTFlNWVmNDI0NmI3MGM2NWFhYzU2NDk5ODBiZTVjMTc4OTFiYmVjMTc4OTVkYTAwOGNiIiwiZDk4''@;'; put 'put ''NGEwMzJlYjZiNWUxOTAyNDNkZDU2ZDdiN2IzNjUzNzJkYjFlMmRmZjlkNmE4MzAxZDc0YzljOTUzYzYxYiJdLFsiZjI4NzczYzJkOTc1Mjg4YmM3ZDFkMjA1YzM3NDg2NTFiMDc1ZmJjNjYxMGU1OGNkZGVlZGRmOGYxOTQwNWFhOCIsImFiMDkwMmU4ZDg4MGE4OTc1ODIxMmViNjVjZGFmNDcz''@;'; put 'put ''YTFhMDZkYTUyMWZhOTFmMjliNWNiNTJkYjAzZWQ4MSJdLFsiZDc5MjRkNGY3ZDQzZWE5NjVhNDY1YWUzMDk1ZmY0MTEzMWU1OTQ2ZjNjODVmNzllNDRhZGJjZjhlMjdlMDgwZSIsIjU4MWUyODcyYTg2YzcyYTY4Mzg0MmVjMjI4Y2M2ZGVmZWE0MGFmMmJkODk2ZDNhNWM1MDRkYzlmZjZhMjZi''@;'; put 'put ''NTgiXSxbImRlZmRlYTRjZGI2Nzc3NTBhNDIwZmVlODA3ZWFjZjIxZWI5ODk4YWU3OWI5NzY4NzY2ZTRmYWEwNGEyZDRhMzQiLCI0MjExYWIwNjk0NjM1MTY4ZTk5N2IwZWFkMmE5M2RhZWNlZDFmNGEwNGE5NWMwZjZjZmIxOTlmNjllNTZlYjc3Il0sWyIyYjRlYTBhNzk3YTQ0M2QyOTNlZjVj''@;'; put 'put ''ZmY0NDRmNDk3OWYwNmFjZmViZDdlODZkMjc3NDc1NjU2MTM4Mzg1YjZjIiwiODVlODliYzAzNzk0NWQ5M2IzNDMwODNiNWExYzg2MTMxYTAxZjYwYzUwMjY5NzYzYjU3MGM4NTRlNWMwOWI3YSJdLFsiMzUyYmJmNGE0Y2RkMTI1NjRmOTNmYTMzMmNlMzMzMzAxZDlhZDQwMjcxZjgxMDcxODEz''@;'; put 'put ''NDBhZWYyNWJlNTlkNSIsIjMyMWViNDA3NTM0OGY1MzRkNTljMTgyNTlkZGEzZTFmNGExYjNiMmU3MWIxMDM5YzY3YmQzZDhiY2Y4MTk5OGMiXSxbIjJmYTIxMDRkNmIzOGQxMWIwMjMwMDEwNTU5ODc5MTI0ZTQyYWI4ZGZlZmY1ZmYyOWRjOWNkYWRkNGVjYWNjM2YiLCIyZGUxMDY4Mjk1ZGQ4''@;'; put 'put ''NjViNjQ1NjkzMzViZDVkZDgwMTgxZDcwZWNmYzg4MjY0ODQyM2JhNzZiNTMyYjdkNjciXSxbIjkyNDgyNzliMDliNGQ2OGRhYjIxYTliMDY2ZWRkYTgzMjYzYzNkODRlMDk1NzJlMjY5Y2EwY2Q3ZjU0NTM3MTQiLCI3MzAxNmY3YmYyMzRhYWRlNWQxYWE3MWJkZWEyYjFmZjNmYzBkZTJhODg3''@;'; put 'put ''OTEyZmZlNTRhMzJjZTk3Y2IzNDAyIl0sWyJkYWVkNGYyYmUzYThiZjI3OGU3MDEzMmZiMGJlYjc1MjJmNTcwZTE0NGJmNjE1YzA3ZTk5NmQ0NDNkZWU4NzI5IiwiYTY5ZGNlNGE3ZDZjOThlOGQ0YTFhY2E4N2VmOGQ3MDAzZjgzYzIzMGYzYWZhNzI2YWI0MGU1MjI5MGJlMWM1NSJdLFsiYzQ0''@;'; put 'put ''ZDEyYzcwNjVkODEyZThhY2YyOGQ3Y2JiMTlmOTAxMWVjZDllOWZkZjI4MWIwZTZhM2I1ZTg3ZDIyZTdkYiIsIjIxMTlhNDYwY2UzMjZjZGM3NmM0NTkyNmM5ODJmZGFjMGUxMDZlODYxZWRmNjFjNWEwMzkwNjNmMGUwZTY0ODIiXSxbIjZhMjQ1YmY2ZGM2OTg1MDRjODlhMjBjZmRlZDYwODUz''@;'; put 'put ''MTUyYjY5NTMzNmMyODA2M2I2MWM2NWNiZDI2OWU2YjQiLCJlMDIyY2Y0MmMyYmQ0YTcwOGIzZjUxMjZmMTZhMjRhZDhiMzNiYTQ4ZDA0MjNiNmVmZDVlNjM0ODEwMGQ4YTgyIl0sWyIxNjk3ZmZhNmZkOWRlNjI3YzA3N2UzZDJmZTU0MTA4NGNlMTMzMDBiMGJlYzExNDZmOTVhZTU3ZjBkMGJk''@;'; put 'put ''NmE1IiwiYjljMzk4ZjE4NjgwNmY1ZDI3NTYxNTA2ZTQ1NTc0MzNhMmNmMTUwMDllNDk4YWU3YWRlZTlkNjNkMDFiMjM5NiJdLFsiNjA1YmRiMDE5OTgxNzE4Yjk4NmQwZjA3ZTgzNGNiMGQ5ZGViODM2MGZmYjdmNjFkZjk4MjM0NWVmMjdhNzQ3OSIsIjI5NzJkMmRlNGY4ZDIwNjgxYTc4ZDkz''@;'; put 'put ''ZWM5NmZlMjNjMjZiZmFlODRmYjE0ZGI0M2IwMWUxZTkwNTZiOGM0OSJdLFsiNjJkMTRkYWI0MTUwYmY0OTc0MDJmZGM0NWEyMTVlMTBkY2IwMWMzNTQ5NTliMTBjZmUzMWM3ZTlkODdmZjMzZCIsIjgwZmMwNmJkOGNjNWIwMTA5ODA4OGExOTUwZWVkMGRiMDFhYTEzMjk2N2FiNDcyMjM1ZjU2''@;'; put 'put ''NDI0ODNiMjVlYWYiXSxbIjgwYzYwYWQwMDQwZjI3ZGFkZTViNGIwNmM0MDhlNTZiMmM1MGU5ZjU2YjliOGI0MjVlNTU1YzJmODYzMDhiNmYiLCIxYzM4MzAzZjFjYzVjMzBmMjZlNjZiYWQ3ZmU3MmY3MGE2NWVlZDRjYmU3MDI0ZWIxYWEwMWY1NjQzMGJkNTdhIl0sWyI3YTkzNzVhZDYxNjdh''@;'; put 'put ''ZDU0YWE3NGM2MzQ4Y2M1NGQzNDRjYzVkYzk0ODdkODQ3MDQ5ZDVlYWJiMGZhMDNjOGZiIiwiZDBlM2ZhOWVjYTg3MjY5MDk1NTllMGQ3OTI2OTA0NmJkYzU5ZWExMGM3MGNlMmIwMmQ0OTllYzIyNGRjN2Y3Il0sWyJkNTI4ZWNkOWI2OTZiNTRjOTA3YTllZDA0NTQ0N2E3OWJiNDA4ZWMzOWI2''@;'; put 'put ''OGRmNTA0YmI1MWY0NTliYzNmZmM5IiwiZWVjZjQxMjUzMTM2ZTVmOTk5NjZmMjE4ODFmZDY1NmViYzQzNDU0MDVjNTIwZGJjMDYzNDY1YjUyMTQwOTkzMyJdLFsiNDkzNzBhNGI1ZjQzNDEyZWEyNWY1MTRlOGVjZGFkMDUyNjYxMTVlNGE3ZWNiMTM4NzIzMTgwOGY4YjQ1OTYzIiwiNzU4ZjNm''@;'; put 'put ''NDFhZmQ2ZWQ0MjhiMzA4MWIwNTEyZmQ2MmE1NGMzZjNhZmJiNWI2NzY0YjY1MzA1MmExMjk0OWM5YSJdLFsiNzdmMjMwOTM2ZWU4OGNiYmQ3M2RmOTMwZDY0NzAyZWY4ODFkODExZTBlMTQ5OGUyZjFjMTNlYjFmYzM0NWQ3NCIsIjk1OGVmNDJhNzg4NmI2NDAwYTA4MjY2ZTliYTFiMzc4OTZj''@;'; put 'put ''OTUzMzBkOTcwNzdjYmJlOGViM2M3NjcxYzYwZDYiXSxbImYyZGFjOTkxY2M0Y2U0YjllYTQ0ODg3ZTVjN2MwYmNlNThjODAwNzRhYjlkNGRiYWViMjg1MzFiNzczOWY1MzAiLCJlMGRlZGM5YjNiMmY4ZGFkNGRhMWYzMmRlYzI1MzFkZjllYjVmYmViMDU5OGU0ZmQxYTExN2RiYTcwM2EzYzM3''@;'; put 'put ''Il0sWyI0NjNiM2Q5ZjY2MjYyMWZiMWI0YmU4ZmJiZTI1MjAxMjVhMjE2Y2RmYzlkYWUzZGViY2JhNDg1MGM2OTBkNDViIiwiNWVkNDMwZDc4YzI5NmMzNTQzMTE0MzA2ZGQ4NjIyZDdjNjIyZTI3Yzk3MGExZGUzMWNiMzc3YjAxYWY3MzA3ZSJdLFsiZjE2ZjgwNDI0NGU0NmUyYTA5MjMyZDRh''@;'; put 'put ''ZmYzYjU5OTc2Yjk4ZmFjMTQzMjhhMmQxYTMyNDk2YjQ5OTk4ZjI0NyIsImNlZGFiZDliODIyMDNmN2UxM2QyMDZmY2RmNGUzM2Q5MmE2YzUzYzI2ZTVjY2UyNmQ2NTc5OTYyYzRlMzFkZjYiXSxbImNhZjc1NDI3MmRjODQ1NjNiMDM1MmI3YTE0MzExYWY1NWQyNDUzMTVhY2UyN2M2NTM2OWUx''@;'; put 'put ''NWY3MTUxZDQxZDEiLCJjYjQ3NDY2MGVmMzVmNWYyYTQxYjY0M2ZhNWU0NjA1NzVmNGZhOWI3OTYyMjMyYTVjMzJmOTA4MzE4YTA0NDc2Il0sWyIyNjAwY2E0YjI4MmNiOTg2Zjg1ZDBmMTcwOTk3OWQ4YjQ0YTA5YzA3Y2I4NmQ3YzEyNDQ5N2JjODZmMDgyMTIwIiwiNDExOWI4ODc1M2MxNWJk''@;'; put 'put ''NmE2OTNiMDNmY2RkYmI0NWQ1YWM2YmU3NGFiNWYwZWY0NGIwYmU5NDc1YTdlNGI0MCJdLFsiNzYzNWNhNzJkN2U4NDMyYzMzOGVjNTNjZDEyMjIwYmMwMWM0ODY4NWUyNGY3ZGM4YzYwMmE3NzQ2OTk4ZTQzNSIsIjkxYjY0OTYwOTQ4OWQ2MTNkMWQ1ZTU5MGY3OGU2ZDc0ZWNmYzA2MWQ1NzA0''@;'; put 'put ''OGJhZDllNzZmMzAyYzViOWM2MSJdLFsiNzU0ZTMyMzlmMzI1NTcwY2RiYmY0YTg3ZGVlZThhNjZiN2YyYjMzNDc5ZDQ2OGZiYzFhNTA3NDNiZjU2Y2MxOCIsIjY3M2ZiODZlNWJkYTMwZmIzY2QwZWQzMDRlYTQ5YTAyM2VlMzNkMDE5N2E2OTVkMGM1ZDk4MDkzYzUzNjY4MyJdLFsiZTNlNmJk''@;'; put 'put ''MTA3MWExZTk2YWZmNTc4NTljODJkNTcwZjAzMzA4MDA2NjFkMWM5NTJmOWZlMjY5NDY5MWQ5YjllOCIsIjU5YzllMGJiYTM5NGU3NmY0MGMwYWE1ODM3OWEzY2I2YTVhMjI4Mzk5M2U5MGM0MTY3MDAyYWY0OTIwZTM3ZjUiXSxbIjE4NmI0ODNkMDU2YTAzMzgyNmFlNzNkODhmNzMyOTg1YzRj''@;'; put 'put ''Y2IxZjMyYmEzNWY0YjRjYzQ3ZmRjZjA0YWE2ZWIiLCIzYjk1MmQzMmM2N2NmNzdlMmUxNzQ0NmUyMDQxODBhYjIxZmI4MDkwODk1MTM4YjRhNGE3OTdmODZlODA4ODhiIl0sWyJkZjlkNzBhNmI5ODc2Y2U1NDRjOTg1NjFmNGJlNGY3MjU0NDJlNmQyYjczN2Q5YzkxYTgzMjE3MjRjZTA5NjNm''@;'; put 'put ''IiwiNTVlYjJkYWZkODRkNmNjZDVmODYyYjc4NWRjMzlkNGFiMTU3MjIyNzIwZWY5ZGEyMTdiOGM0NWNmMmJhMjQxNyJdLFsiNWVkZDVjYzIzYzUxZTg3YTQ5N2NhODE1ZDVkY2UwZjhhYjUyNTU0Zjg0OWVkODk5NWRlNjRjNWYzNGNlNzE0MyIsImVmYWU5YzhkYmMxNDEzMDY2MWU4Y2VjMDMw''@;'; put 'put ''Yzg5YWQwYzEzYzY2YzBkMTdhMjkwNWNkYzcwNmFiNzM5OWE4NjgiXSxbIjI5MDc5OGMyYjY0NzY4MzBkYTEyZmUwMjI4N2U5ZTc3N2FhM2ZiYTFjMzU1YjE3YTcyMmQzNjJmODQ2MTRmYmEiLCJlMzhkYTc2ZGNkNDQwNjIxOTg4ZDAwYmNmNzlhZjI1ZDViMjljMDk0ZGIyYTIzMTQ2ZDAwM2Fm''@;'; put 'put ''ZDQxOTQzZTdhIl0sWyJhZjNjNDIzYTk1ZDlmNWIzMDU0NzU0ZWZhMTUwYWMzOWNkMjk1NTJmZTM2MDI1NzM2MmRmZGVjZWY0MDUzYjQ1IiwiZjk4YTNmZDgzMWViMmI3NDlhOTNiMGU2ZjM1Y2ZiNDBjOGNkNWFhNjY3YTE1NTgxYmMyZmVkZWQ0OThmZDljNiJdLFsiNzY2ZGJiMjRkMTM0ZTc0''@;'; put 'put ''NWNjY2FhMjhjOTliZjI3NDkwNmJiNjZiMjZkY2Y5OGRmOGQyZmVkNTBkODg0MjQ5YSIsIjc0NGIxMTUyZWFjYmU1ZTM4ZGNjODg3OTgwZGEzOGI4OTc1ODRhNjVmYTA2Y2VkZDJjOTI0Zjk3Y2JhYzU5OTYiXSxbIjU5ZGJmNDZmOGM5NDc1OWJhMjEyNzdjMzM3ODRmNDE2NDVmN2I0NGY2YzU5''@;'; put 'put ''NmE1OGNlOTJlNjY2MTkxYWJlM2UiLCJjNTM0YWQ0NDE3NWZiYzMwMGY0ZWE2Y2U2NDgzMDlhMDQyY2U3MzlhNzkxOTc5OGNkODVlMjE2YzRhMzA3ZjZlIl0sWyJmMTNhZGE5NTEwM2M0NTM3MzA1ZTY5MWU3NGU5YTRhOGRkNjQ3ZTcxMWE5NWU3M2NiNjJkYzYwMThjZmQ4N2I4IiwiZTEzODE3''@;'; put 'put ''YjQ0ZWUxNGRlNjYzYmY0YmM4MDgzNDFmMzI2OTQ5ZTIxYTZhNzVjMjU3MDc3ODQxOWJkYWY1NzMzZCJdLFsiNzc1NGI0ZmEwZThhY2VkMDZkNDE2N2EyYzU5Y2NhNGNkYTE4NjljMDZlYmFkZmI2NDg4NTUwMDE1YTg4NTIyYyIsIjMwZTkzZTg2NGU2NjlkODIyMjRiOTY3YzMwMjBiOGZhOGQx''@;'; put 'put ''ZTRlMzUwYjZjYmNjNTM3YTQ4YjU3ODQxMTYzYTIiXSxbIjk0OGRjYWRmNTk5MGUwNDhhYTM4NzRkNDZhYmVmOWQ3MDE4NThmOTVkZTgwNDFkMmE2ODI4Yzk5ZTIyNjI1MTkiLCJlNDkxYTQyNTM3ZjZlNTk3ZDVkMjhhMzIyNGIxYmMyNWRmOTE1NGVmYmQyZWYxZDJjYmJhMmNhZTUzNDdkNTdl''@;'; put 'put ''Il0sWyI3OTYyNDE0NDUwYzc2YzE2ODljN2I0OGY4MjAyZWMzN2ZiMjI0Y2Y1YWMwYmZhMTU3MDMyOGE4YTNkN2M3N2FiIiwiMTAwYjYxMGVjNGZmYjQ3NjBkNWMxZmMxMzNlZjZmNmIxMjUwN2EwNTFmMDRhYzU3NjBhZmE1YjI5ZGI4MzQzNyJdLFsiMzUxNDA4NzgzNDk2NGI1NGIxNWIxNjA2''@;'; put 'put ''NDRkOTE1NDg1YTE2OTc3MjI1Yjg4NDdiYjBkZDA4NTEzN2VjNDdjYSIsImVmMGFmYmIyMDU2MjA1NDQ4ZTE2NTJjNDhlODEyN2ZjNjAzOWU3N2MxNWMyMzc4YjdlN2QxNWEwZGUyOTMzMTEiXSxbImQzY2MzMGFkNmI0ODNlNGJjNzljZTJjOWRkOGJjNTQ5OTNlOTQ3ZWI4ZGY3ODdiNDQyOTQz''@;'; put 'put ''ZDNmN2I1MjdlYWYiLCI4YjM3OGEyMmQ4MjcyNzhkODljNWU5YmU4Zjk1MDhhZTNjMmFkNDYyOTAzNTg2MzBhZmIzNGRiMDRlZWRlMGE0Il0sWyIxNjI0ZDg0NzgwNzMyODYwY2UxYzc4ZmNiZmVmZTA4YjJiMjk4MjNkYjkxM2Y2NDkzOTc1YmEwZmY0ODQ3NjEwIiwiNjg2NTFjZjliNmRhOTAz''@;'; put 'put ''ZTA5MTQ0NDhjNmNkOWQ0Y2E4OTY4NzhmNTI4MmJlNGM4Y2MwNmUyYTQwNDA3ODU3NSJdLFsiNzMzY2U4MGRhOTU1YThhMjY5MDJjOTU2MzNlNjJhOTg1MTkyNDc0YjVhZjIwN2RhNmRmN2I0ZmQ1ZmM2MWNkNCIsImY1NDM1YTJiZDJiYWRmN2Q0ODVhNGQ4YjhkYjlmY2NlM2UxZWY4ZTAyMDFl''@;'; put 'put ''NDU3OGM1NDY3M2JjMWRjNWVhMWQiXSxbIjE1ZDk0NDEyNTQ5NDUwNjRjZjFhMWMzM2JiZDNiNDlmODk2NmM1MDkyMTcxZTY5OWVmMjU4ZGZhYjgxYzA0NWMiLCJkNTZlYjMwYjY5NDYzZTcyMzRmNTEzN2I3M2I4NDE3NzQzNDgwMGJhY2ViZmM2ODVmYzM3YmJlOWVmZTQwNzBkIl0sWyJhMWQw''@;'; put 'put ''ZmNmMmVjOWRlNjc1YjYxMjEzNmU1Y2U3MGQyNzFjMjE0MTdjOWQyYjhhYWFhYzEzODU5OWQwNzE3OTQwIiwiZWRkNzdmNTBiY2I1YTNjYWIyZTkwNzM3MzA5NjY3ZjI2NDE0NjJhNTQwNzBmM2Q1MTkyMTJkMzljMTk3YTYyOSJdLFsiZTIyZmJlMTVjMGFmOGNjYzU3ODBjMDczNWY4NGRiZTlh''@;'; put 'put ''NzkwYmFkZWU4MjQ1YzA2YzdjYTM3MzMxY2IzNjk4MCIsImE4NTViYWJhZDVjZDYwYzg4YjQzMGE2OWY1M2ExYTdhMzgyODkxNTQ5NjQ3OTliZTQzZDA2ZDc3ZDMxZGEwNiJdLFsiMzExMDkxZGQ5ODYwZThlMjBlZTEzNDczYzExNTVmNWY2OTYzNWUzOTQ3MDRlYWE3NDAwOTQ1MjI0NmNmYTli''@;'; put 'put ''MyIsIjY2ZGI2NTZmODdkMWYwNGZmZmQxZjA0Nzg4YzA2ODMwODcxZWM1YTY0ZmVlZTY4NWJkODBmMGIxMjg2ZDgzNzQiXSxbIjM0YzFmZDA0ZDMwMWJlODliMzFjMDQ0MmQzZTZhYzI0ODgzOTI4YjQ1YTkzNDA3ODE4NjdkNDIzMmVjMmRiZGYiLCI5NDE0Njg1ZTk3YjFiNTk1NGJkNDZmNzMw''@;'; put 'put ''MTc0MTM2ZDU3ZjFjZWViNDg3NDQzZGM1MzIxODU3YmE3M2FiZWUiXSxbImYyMTllYTVkNmI1NDcwMWMxYzE0ZGU1YjU1N2ViNDJhOGQxM2YzYWJiY2QwOGFmZmNjMmE1ZTZiMDQ5YjhkNjMiLCI0Y2I5NTk1N2U4M2Q0MGIwZjczYWY0NTQ0Y2NjZjZiMWY0YjA4ZDNjMDdiMjdmYjhkOGMyOTYy''@;'; put 'put ''YTQwMDc2NmQxIl0sWyJkN2I4NzQwZjc0YThmYmFhYjFmNjgzZGI4ZjQ1ZGUyNjU0M2E1NDkwYmNhNjI3MDg3MjM2OTEyNDY5YTBiNDQ4IiwiZmE3Nzk2ODEyOGQ5YzkyZWUxMDEwZjMzN2FkNDcxN2VmZjE1ZGI1ZWQzYzA0OWIzNDExZTAzMTVlYWE0NTkzYiJdLFsiMzJkMzFjMjIyZjhmNmYw''@;'; put 'put ''ZWY4NmY3Yzk4ZDNhMzMzNWVhZDViY2QzMmFiZGQ5NDI4OWZlNGQzMDkxYWE4MjRiZiIsIjVmMzAzMmY1ODkyMTU2ZTM5Y2NkM2Q3OTE1YjllMWRhMmU2ZGFjOWU2ZjI2ZTk2MTExOGQxNGI4NDYyZTE2NjEiXSxbIjc0NjFmMzcxOTE0YWIzMjY3MTA0NWExNTVkOTgzMWVhODc5M2Q3N2NkNTk1''@;'; put 'put ''OTJjNDM0MGY4NmNiYzE4MzQ3YjUiLCI4ZWMwYmEyMzhiOTZiZWMwY2JkZGRjYWUwYWE0NDI1NDJlZWUxZmY1MGM5ODZlYTZiMzk4NDdiM2NjMDkyZmY2Il0sWyJlZTA3OWFkYjFkZjE4NjAwNzQzNTZhMjVhYTM4MjA2YTZkNzE2YjJjM2U2NzQ1M2QyODc2OThiYWQ3YjJiMmQ2IiwiOGRjMjQx''@;'; put 'put ''MmFhZmUzYmU1YzRjNWYzN2UwZWNjNWY5ZjZhNDQ2OTg5YWYwNGM0ZTI1ZWJhYWM0NzllYzFjOGMxZSJdLFsiMTZlYzkzZTQ0N2VjODNmMDQ2N2IxODMwMmVlNjIwZjdlNjVkZTMzMTg3NGM5ZGM3MmJmZDg2MTZiYTlkYTZiNSIsIjVlNDYzMTE1MGU2MmZiNDBkMGU4YzJhN2NhNTgwNGEzOWQ1''@;'; put 'put ''ODE4NmE1MGU0OTcxMzk2MjY3NzhlMjViMDY3NGQiXSxbImVhYTVmOTgwYzI0NWY2ZjAzODk3ODI5MGFmYTcwYjZiZDg4NTU4OTdmOThiNmFhNDg1Yjk2MDY1ZDUzN2JkOTkiLCJmNjVmNWQzZTI5MmMyZTA4MTlhNTI4MzkxYzk5NDYyNGQ3ODQ4NjlkN2U2ZWE2N2ZiMTgwNDEwMjRlZGMwN2Rj''@;'; put 'put ''Il0sWyI3OGM5NDA3NTQ0YWMxMzI2OTJlZTE5MTBhMDI0Mzk5NThhZTA0ODc3MTUxMzQyZWE5NmM0YjZiMzVhNDlmNTEiLCJmM2UwMzE5MTY5ZWI5Yjg1ZDU0MDQ3OTU1MzlhNWU2OGZhMWZiZDU4M2MwNjRkMjQ2MmI2NzVmMTk0YTNkZGI0Il0sWyI0OTRmNGJlMjE5YTFhNzcwMTZkY2Q4Mzg0''@;'; put 'put ''MzFhZWEwMDAxY2RjOGFlN2E2ZmM2ODg3MjY1NzhkOTcwMjg1N2E1IiwiNDIyNDJhOTY5MjgzYTVmMzM5YmE3ZjA3NWUzNmJhMmFmOTI1Y2UzMGQ3NjdlZDZlNTVmNGIwMzE4ODBkNTYyYyJdLFsiYTU5OGE4MDMwZGE2ZDg2YzZiYzdmMmY1MTQ0ZWE1NDlkMjgyMTFlYTU4ZmFhNzBlYmY0YzFl''@;'; put 'put ''NjY1YzFmZTliNSIsIjIwNGI1ZDZmODQ4MjJjMzA3ZTRiNGE3MTQwNzM3YWVjMjNmYzYzYjY1YjM1Zjg2YTEwMDI2ZGJkMmQ4NjRlNmIiXSxbImM0MTkxNjM2NWFiYjJiNWQwOTE5MmY1ZjJkYmVhZmVjMjA4ZjAyMGYxMjU3MGExODRkYmFkYzNlNTg1OTU5OTciLCI0ZjE0MzUxZDAwODdlZmE0''@;'; put 'put ''OWQyNDViMzI4OTg0OTg5ZDVjYWY5NDUwZjM0YmZjMGVkMTZlOTZiNThmYTk5MTMiXSxbIjg0MWQ2MDYzYTU4NmZhNDc1YTcyNDYwNGRhMDNiYzViOTJhMmUwZDJlMGEzNmFjZmU0YzczYTU1MTQ3NDI4ODEiLCI3Mzg2N2Y1OWMwNjU5ZTgxOTA0ZjlhMWM3NTQzNjk4ZTYyNTYyZDY3NDRjMTY5''@;'; put 'put ''Y2U3YTM2ZGUwMWE4ZDYxNTQiXSxbIjVlOTViYjM5OWE2OTcxZDM3NjAyNjk0N2Y4OWJkZTJmMjgyYjMzODEwOTI4YmU0ZGVkMTEyYWM0ZDcwZTIwZDUiLCIzOWYyM2YzNjY4MDkwODViZWViZmM3MTE4MTMxMzc3NWE5OWM5YWVkN2Q4YmEzOGIxNjEzODRjNzQ2MDEyODY1Il0sWyIzNmU0NjQx''@;'; put 'put ''YTUzOTQ4ZmQ0NzZjMzlmOGE5OWZkOTc0ZTVlYzA3NTY0YjUzMTVkOGJmOTk0NzFiY2EwZWYyZjY2IiwiZDI0MjRiMWIxYWJlNGViODE2NDIyN2IwODVjOWFhOTQ1NmVhMTM0OTNmZDU2M2UwNmZkNTFjZjU2OTRjNzhmYyJdLFsiMzM2NTgxZWE3YmZiYmIyOTBjMTkxYTJmNTA3YTQxY2Y1NjQz''@;'; put 'put ''ODQyMTcwZTkxNGZhZWFiMjdjMmM1NzlmNzI2IiwiZWFkMTIxNjg1OTVmZTFiZTk5MjUyMTI5YjZlNTZiMzM5MWY3YWIxNDEwY2QxZTBlZjNkY2RjYWJkMmZkYTIyNCJdLFsiOGFiODk4MTZkYWRmZDZiNmExZjI2MzRmY2YwMGVjODQwMzc4MTAyNWVkNjg5MGM0ODQ5NzQyNzA2YmQ0M2VkZSIs''@;'; put 'put ''IjZmZGNlZjA5ZjJmNmQwYTA0NGU2NTRhZWY2MjQxMzZmNTAzZDQ1OWMzZTg5ODQ1ODU4YTQ3YTkxMjljZGQyNGUiXSxbIjFlMzNmMWE3NDZjOWM1Nzc4MTMzMzQ0ZDkyOTlmY2FhMjBiMDkzOGU4YWNmZjI1NDRiYjQwMjg0YjhjNWZiOTQiLCI2MDY2MDI1N2RkMTFiM2FhOWM4ZWQ2MThkMjRl''@;'; put 'put ''ZGZmMjMwNmQzMjBmMWQwMzAxMGUzM2E3ZDIwNTdmM2IzYjYiXSxbIjg1YjdjMWRjYjNjZWMxYjdlZTdmMzBkZWQ3OWRkMjBhMGVkMWY0Y2MxOGNiY2ZjZmE0MTAzNjFmZDhmMDhmMzEiLCIzZDk4YTljZGQwMjZkZDQzZjM5MDQ4ZjI1YTg4NDdmNGZjYWZhZDE4OTVkN2E2MzNjNmZlZDNjMzVl''@;'; put 'put ''OTk5NTExIl0sWyIyOWRmOWZiZDhkOWU0NjUwOTI3NWY0YjEyNWQ2ZDQ1ZDdmYmU5YTNiODc4YTdhZjg3MmEyODAwNjYxYWM1ZjUxIiwiYjRjNGZlOTljNzc1YTYwNmUyZDg4NjIxNzkxMzlmZmRhNjFkYzg2MWMwMTllNTVjZDI4NzZlYjJhMjdkODRiIl0sWyJhMGIxY2FlMDZiMGE4NDdhM2Zl''@;'; put 'put ''YTZlNjcxYWFmOGFkZmRmZTU4Y2EyZjc2ODEwNWM4MDgyYjJlNDQ5ZmNlMjUyIiwiYWU0MzQxMDJlZGRlMDk1OGVjNGIxOWQ5MTdhNmEyOGU2YjcyZGExODM0YWZmMGU2NTBmMDQ5NTAzYTI5NmNmMiJdLFsiNGU4Y2VhZmI5YjNlOWExMzZkYzdmZjY3ZTg0MDI5NWI0OTlkZmIzYjIxMzNlNGJh''@;'; put 'put ''MTEzZjJlNGMwZTEyMWU1IiwiY2YyMTc0MTE4YzhiNmQ3YTRiNDhmNmQ1MzRjZTVjNzk0MjJjMDg2YTYzNDYwNTAyYjgyN2NlNjJhMzI2NjgzYyJdLFsiZDI0YTQ0ZTA0N2UxOWI2ZjVhZmI4MWM3Y2EyZjY5MDgwYTUwNzY2ODlhMDEwOTE5ZjQyNzI1YzJiNzg5YTMzYiIsIjZmYjhkNTU5MWI0''@;'; put 'put ''NjZmOGZjNjNkYjUwZjFjMGYxYzY5MDEzZjk5Njg4N2I4MjQ0ZDJjZGVjNDE3YWZlYThmYTMiXSxbImVhMDE2MDZhN2E2YzljZGQyNDlmZGZjZmFjYjk5NTg0MDAxZWRkMjhhYmJhYjc3YjUxMDRlOThlOGUzYjM1ZDQiLCIzMjJhZjQ5MDhjNzMxMmIwY2ZiZmUzNjlmN2E3YjNjZGI3ZDQ0OTRi''@;'; put 'put ''YzI4MjM3MDBjZmQ2NTIxODhhM2VhOThkIl0sWyJhZjhhZGRiZjJiNjYxYzhhNmM2MzI4NjU1ZWI5NjY1MTI1MjAwN2Q4YzVlYTMxYmU0YWQxOTZkZThjZTIxMzFmIiwiNjc0OWU2N2MwMjliODVmNTJhMDM0ZWFmZDA5NjgzNmIyNTIwODE4NjgwZTI2YWM4ZjNkZmJjZGI3MTc0OTcwMCJdLFsi''@;'; put 'put ''ZTNhZTE5NzQ1NjZjYTA2Y2M1MTZkNDdlMGZiMTY1YTY3NGEzZGFiY2ZjYTE1ZTcyMmYwZTM0NTBmNDU4ODkiLCIyYWVhYmU3ZTQ1MzE1MTAxMTYyMTdmMDdiZjRkMDczMDBkZTk3ZTQ4NzRmODFmNTMzNDIwYTcyZWViMGJkNmE0Il0sWyI1OTFlZTM1NTMxM2Q5OTcyMWNmNjk5M2ZmZWQxZTNl''@;'; put 'put ''MzAxOTkzZmYzZWQyNTg4MDIwNzVlYThjZWQzOTdlMjQ2IiwiYjBlYTU1OGExMTNjMzBiZWE2MGZjNDc3NTQ2MGM3OTAxZmYwYjA1M2QyNWNhMmJkZWVlOThmMWE0YmU1ZDE5NiJdLFsiMTEzOTZkNTVmZGE1NGM0OWYxOWFhOTczMThkOGRhNjFmYTg1ODRlNDdiMDg0OTQ1MDc3Y2YwMzI1NWI1''@;'; put 'put ''Mjk4NCIsIjk5OGM3NGE4Y2Q0NWFjMDEyODlkNTgzM2E3YmViNDc0NGZmNTM2YjAxYjI1N2JlNGM1NzY3YmVhOTNlYTU3YTQiXSxbIjNjNWQyYTFiYTM5YzVhMTc5MDAwMDczOGM5ZTBjNDBiOGRjZGZkNTQ2ODc1NGI2NDA1NTQwMTU3ZTAxN2FhN2EiLCJiMjI4NDI3OTk5NWEzNGUyZjlkNGRl''@;'; put 'put ''NzM5NmZjMThiODBmOWI4YjlmZGQyNzBmNjY2MWY3OWNhNGM4MWJkMjU3Il0sWyJjYzg3MDRiOGE2MGEwZGVmYTNhOTlhNzI5OWYyZTljM2ZiYzM5NWFmYjA0YWMwNzg0MjVlZjhhMTc5M2NjMDMwIiwiYmRkNDYwMzlmZWVkMTc4ODFkMWUwODYyZGIzNDdmOGNmMzk1Yjc0ZmM0YmNkYzRlOTQw''@;'; put 'put ''Yjc0ZTNhYzFmMWIxMyJdLFsiYzUzM2U0ZjdlYTg1NTVhYWNkOTc3N2FjNWNhZDI5Yjk3ZGQ0ZGVmY2NjNTNlZTdlYTIwNDExOWIyODg5YjE5NyIsIjZmMGEyNTZiYzVlZmRmNDI5YTJmYjYyNDJmMWE0M2EyZDliOTI1YmI0YTRiM2EyNmJiOGUwZjQ1ZWI1OTYwOTYiXSxbImMxNGY4ZjJjY2Iy''@;'; put 'put ''N2Q2ZjEwOWY2ZDA4ZDAzY2M5NmE2OWJhOGMzNGVlYzA3YmJjZjU2NmQ0OGUzM2RhNjU5MyIsImMzNTlkNjkyM2JiMzk4ZjdmZDQ0NzNlMTZmZTFjMjg0NzViNzQwZGQwOTgwNzVlNmMwZTg2NDkxMTNkYzNhMzgiXSxbImE2Y2JjMzA0NmJjNmE0NTBiYWMyNDc4OWZhMTcxMTVhNGM5NzM5ZWQ3''@;'; put 'put ''NWY4ZjIxY2U0NDFmNzJlMGI5MGU2ZWYiLCIyMWFlN2Y0NjgwZTg4OWJiMTMwNjE5ZTJjMGY5NWEzNjBjZWI1NzNjNzA2MDMxMzk4NjJhZmQ2MTdmYTliOWYiXSxbIjM0N2Q2ZDlhMDJjNDg5MjdlYmZiODZjMTM1OWIxY2FmMTMwYTNjMDI2N2QxMWNlNjM0NGIzOWY5OWQ0M2NjMzgiLCI2MGVh''@;'; put 'put ''N2Y2MWEzNTM1MjRkMWM5ODdmNmVjZWM5MmYwODZkNTY1YWI2ODc4NzBjYjEyNjg5ZmYxZTMxYzc0NDQ4Il0sWyJkYTY1NDVkMjE4MWRiOGQ5ODNmN2RjYjM3NWVmNTg2NmQ0N2M2N2IxYmYzMWM4Y2Y4NTVlZjc0MzdiNzI2NTZhIiwiNDliOTY3MTVhYjY4NzhhNzllNzhmMDdjZTU2ODBjNWQ2''@;'; put 'put ''NjczMDUxYjQ5MzViZDg5N2ZlYTgyNGI3N2RjMjA4YSJdLFsiYzQwNzQ3Y2M5ZDAxMmNiMWExM2I4MTQ4MzA5YzZkZTdlYzI1ZDY5NDVkNjU3MTQ2YjlkNTk5NGI4ZmViMTExMSIsIjVjYTU2MDc1M2JlMmExMmZjNmRlNmNhZjJjYjQ4OTU2NWRiOTM2MTU2Yjk1MTRlMWJiNWU4MzAzN2UwZmEy''@;'; put 'put ''ZDQiXSxbIjRlNDJjOGVjODJjOTk3OThjY2YzYTYxMGJlODcwZTc4MzM4YzdmNzEzMzQ4YmQzNGM4MjAzZWY0MDM3ZjM1MDIiLCI3NTcxZDc0ZWU1ZTBmYjkyYTdhOGIzM2EwNzc4MzM0MWE1NDkyMTQ0Y2M1NGJjYzQwYTk0NDczNjkzNjA2NDM3Il0sWyIzNzc1YWI3MDg5YmM2YWY4MjNhYmEy''@;'; put 'put ''ZTFhZjcwYjIzNmQyNTFjYWRiMGM4Njc0MzI4NzUyMmExYjNiMGRlZGVhIiwiYmU1MmQxMDdiY2ZhMDlkOGJjYjk3MzZhODI4Y2ZhN2ZhYzhkYjE3YmY3YTc2YTJjNDJhZDk2MTQwOTAxOGNmNyJdLFsiY2VlMzFjYmY3ZTM0ZWMzNzlkOTRmYjgxNGQzZDc3NWFkOTU0NTk1ZDEzMTRiYTg4NDY5''@;'; put 'put ''NTllM2U4MmY3NGUyNiIsIjhmZDY0YTE0YzA2YjU4OWMyNmI5NDdhZTJiY2Y2YmZhMDE0OWVmMGJlMTRlZDRkODBmNDQ4YTAxYzQzYjFjNmQiXSxbImI0ZjllYWVhMDliNjkxNzYxOWY2ZWE2YTRlYjU0NjRlZmRkYjU4ZmQ0NWIxZWJlZmNkYzFhMDFkMDhiNDc5ODYiLCIzOWU1Yzk5MjViNWE1''@;'; put 'put ''NGIwNzQzM2E0ZjE4YzYxNzI2ZjhiYjEzMWMwMTJjYTU0MmViMjRhOGFjMDcyMDA2ODJhIl0sWyJkNDI2M2RmYzNkMmRmOTIzYTAxNzlhNDg5NjZkMzBjZTg0ZTI1MTVhZmMzZGNjYzFiNzc5MDc3OTJlYmNjNjBlIiwiNjJkZmFmMDdhMGY3OGZlYjMwZTMwZDYyOTU4NTNjZTE4OWUxMjc3NjBh''@;'; put 'put ''ZDZjZjdmYWUxNjRlMTIyYTIwOGQ1NCJdLFsiNDg0NTc1MjQ4MjBmYTY1YTRmOGQzNWViNjkzMDg1N2MwMDMyYWNjMGE0YTJkZTQyMjIzM2VlZGE4OTc2MTJjNCIsIjI1YTc0OGFiMzY3OTc5ZDk4NzMzYzM4YTFmYTFjMmU3ZGM2Y2MwN2RiMmQ2MGE5YWU3YTc2YWFhNDliZDBmNzciXSxbImRm''@;'; put 'put ''ZWVlZjE4ODExMDFmMmNiMTE2NDRmM2EyYWZkZmMyMDQ1ZTE5OTE5MTUyOTIzZjM2N2ExNzY3YzExY2NlZGEiLCJlY2ZiNzA1NmNmMWRlMDQyZjk0MjBiYWIzOTY3OTNjMGMzOTBiZGU3NGI0YmJkZmYxNmE4M2FlMDlhOWE3NTE3Il0sWyI2ZDdlZjZiMTc1NDNmODM3M2M1NzNmNDRlMWYzODk4''@;'; put 'put ''MzVkODliY2JjNjA2MmNlZDM2YzgyZGY4M2I4ZmFlODU5IiwiY2Q0NTBlYzMzNTQzODk4NmRmZWZhMTBjNTdmZWE5YmNjNTIxYTA5NTliMmQ4MGJiZjc0YjE5MGRjYTcxMmQxMCJdLFsiZTc1NjA1ZDU5MTAyYTVhMjY4NDUwMGQzYjk5MWYyZTNmM2M4OGI5MzIyNTU0NzAzNWFmMjVhZjY2ZTA0''@;'; put 'put ''NTQxZiIsImY1YzU0NzU0YThmNzFlZTU0MGI5YjQ4NzI4NDczZTMxNGY3MjlhYzUzMDhiMDY5MzgzNjA5OTBlMmJmYWQxMjUiXSxbImViOTg2NjBmNGM0ZGZhYTA2YTJiZTQ1M2Q1MDIwYmM5OWEwYzJlNjBhYmUzODg0NTdkZDQzZmVmYjFlZDYyMGMiLCI2Y2I5YTg4NzZkOWNiODUyMDYwOWFm''@;'; put 'put ''M2FkZDI2Y2QyMGEwYTdjZDhhOTQxMTEzMWNlODVmNDQxMDAwOTkyMjNlIl0sWyIxM2U4N2IwMjdkODUxNGQzNTkzOWYyZTY4OTJiMTk5MjIxNTQ1OTY5NDE4ODgzMzZkYzM1NjNlM2I4ZGJhOTQyIiwiZmVmNWEzYzY4MDU5YTZkZWM1ZDYyNDExNGJmMWU5MWFhYzJiOWRhNTY4ZDZhYmViMjU3''@;'; put 'put ''MGQ1NTY0NmI4YWRmMSJdLFsiZWUxNjMwMjZlOWZkNmZlMDE3YzM4ZjA2YTViZTZmYzEyNTQyNGIzNzFjZTI3MDhlN2JmNDQ5MTY5MWU1NzY0YSIsIjFhY2IyNTBmMjU1ZGQ2MWM0M2Q5NGNjYzY3MGQwZjU4ZjQ5YWUzZmExNWI5NjYyM2U1NDMwZGEwYWQ2YzYyYjIiXSxbImIyNjhmNWVmOWFk''@;'; put 'put ''NTFlNGQ3OGRlM2E3NTBjMmRjODliMWU2MjZkNDM1MDU4Njc5OTk5MzJlNWRiMzNhZjNkODAiLCI1ZjMxMGQ0YjNjOTliOWViYjE5Zjc3ZDQxYzFkZWUwMThjZjBkMzRmZDQxOTE2MTQwMDNlOTQ1YTEyMTZlNDIzIl0sWyJmZjA3ZjMxMThhOWRmMDM1ZTlmYWQ4NWViNmM3YmZlNDJiMDJmMDFj''@;'; put 'put ''YTk5Y2VlYTNiZjdmZmRiYTkzYzQ3NTBkIiwiNDM4MTM2ZDYwM2U4NThhM2E1YzQ0MGMzOGVjY2JhZGRjMWQyOTQyMTE0ZTJlZGRkNDc0MGQwOThjZWQxZjBkOCJdLFsiOGQ4Yjk4NTVjN2MwNTJhMzQxNDZmZDIwZmZiNjU4YmVhNGI5ZjY5ZTBkODI1ZWJlYzE2ZThjM2NlMmI1MjZhMSIsImNk''@;'; put 'put ''YjU1OWVlZGMyZDc5ZjkyNmJhZjQ0ZmI4NGVhNGQ0NGJjZjUwZmVlNTFkN2NlYjMwZTJlN2Y0NjMwMzY3NTgiXSxbIjUyZGIwYjUzODRkZmJmMDViZmE5ZDQ3MmQ3YWUyNmRmZTRiODUxY2VjYTkxYjFlYmE1NDI2MzE4MGRhMzJiNjMiLCJjM2I5OTdkMDUwZWU1ZDQyM2ViYWY2NmE2ZGI5ZjU3''@;'; put 'put ''YjMxODBjOTAyODc1Njc5ZGU5MjRiNjlkODRhN2IzNzUiXSxbImU2MmY5NDkwZDNkNTFkYTYzOTVlZmQyNGU4MDkxOWNjN2QwZjI5YzNmM2ZhNDhjNmZmZjU0M2JlY2JkNDMzNTIiLCI2ZDg5YWQ3YmE0ODc2YjBiMjJjMmNhMjgwYzY4Mjg2MmYzNDJjODU5MWYxZGFmNTE3MGUwN2JmZDljY2Fm''@;'; put 'put ''YTdkIl0sWyI3ZjMwZWEyNDc2YjM5OWI0OTU3NTA5Yzg4Zjc3ZDAxOTFhZmEyZmY1Y2I3YjE0ZmQ2ZDhlN2Q2NWFhYWIxMTkzIiwiY2E1ZWY3ZDRiMjMxYzk0YzNiMTUzODlhNWY2MzExZTlkYWZmN2JiNjdiMTAzZTk4ODBlZjRiZmY2MzdhY2FlYyJdLFsiNTA5OGZmMWUxZDlmMTRmYjQ2YTIx''@;'; put 'put ''MGZhZGE2YzkwM2ZlZjBmYjdiNGExZGQxZDlhYzYwYTAzNjE4MDBiN2EwMCIsIjk3MzExNDFkODFmYzhmODA4NGQzN2M2ZTc1NDIwMDZiM2VlMWI0MGQ2MGRmZTUzNjJhNWIxMzJmZDE3ZGRjMCJdLFsiMzJiNzhjN2RlOWVlNTEyYTcyODk1YmU2YjljYmVmYTZlMmYzYzRjY2NlNDQ1Yzk2Yjlm''@;'; put 'put ''MmM4MWUyNzc4YWQ1OCIsImVlMTg0OWY1MTNkZjcxZTMyZWZjMzg5NmVlMjgyNjBjNzNiYjgwNTQ3YWUyMjc1YmE0OTcyMzc3OTRjODc1M2MiXSxbImUyY2I3NGZkZGM4ZTlmYmNkMDc2ZWVmMmE3YzcyYjBjZTM3ZDUwZjA4MjY5ZGZjMDc0YjU4MTU1MDU0N2E0ZjciLCJkM2FhMmVkNzFjOWRk''@;'; put 'put ''MjI0N2E2MmRmMDYyNzM2ZWIwYmFkZGVhOWUzNjEyMmQyYmU4NjQxYWJjYjAwNWNjNGE0Il0sWyI4NDM4NDQ3NTY2ZDRkN2JlZGFkYzI5OTQ5NmFiMzU3NDI2MDA5YTM1ZjIzNWNiMTQxYmUwZDk5Y2QxMGFlM2E4IiwiYzRlMTAyMDkxNjk4MGE0ZGE1ZDAxYWM1ZTZhZDMzMDczNGVmMGQ3OTA2''@;'; put 'put ''NjMxYzRmMjM5MDQyNmIyZWRkNzkxZiJdLFsiNDE2MmQ0ODhiODk0MDIwMzliNTg0YzZmYzZjMzA4ODcwNTg3ZDljNDZmNjYwYjg3OGFiNjVjODJjNzExZDY3ZSIsIjY3MTYzZTkwMzIzNjI4OWY3NzZmMjJjMjVmYjhhM2FmYzE3MzJmMmI4NGI0ZTk1ZGJkYTQ3YWU1YTA4NTI2NDkiXSxbIjNm''@;'; put 'put ''YWQzZmE4NGNhZjBmMzRmMGY4OWJmZDJkY2Y1NGZjMTc1ZDc2N2FlYzNlNTA2ODRmM2JhNGE0YmY1ZjY4M2QiLCJjZDFiYzdjYjZjYzQwN2JiMmYwY2E2NDdjNzE4YTczMGNmNzE4NzJlN2QwZDJhNTNmYTIwZWZjZGZlNjE4MjYiXSxbIjY3NGYyNjAwYTMwMDdhMDA1NjhjMWE3Y2UwNWQwODE2''@;'; put 'put ''YzFmYjg0YmYxMzcwNzk4ZjFjNjk1MzJmYWViMWE4NmIiLCIyOTlkMjFmOTQxM2YzM2IzZWRmNDNiMjU3MDA0NTgwYjcwZGI1N2RhMGIxODIyNTllMDllZWNjNjllMGQzOGE1Il0sWyJkMzJmNGRhNTRhZGU3NGFiYjgxYjgxNWFkMWZiM2IyNjNkODJkNmM2OTI3MTRiY2ZmODdkMjliZDVlZTlm''@;'; put 'put ''MDhmIiwiZjk0MjllNzM4YjhlNTNiOTY4ZTk5MDE2YzA1OTcwNzc4MmUxNGY0NTM1MzU5ZDU4MmZjNDE2OTEwYjNlZWE4NyJdLFsiMzBlNGU2NzA0MzUzODU1NTZlNTkzNjU3MTM1ODQ1ZDM2ZmJiNjkzMWY3MmIwOGNiMWVkOTU0ZjFlM2NlM2ZmNiIsIjQ2MmY5YmNlNjE5ODk4NjM4NDk5MzUw''@;'; put 'put ''MTEzYmJjOWIxMGE4NzhkMzVkYTcwNzQwZGM2OTVhNTU5ZWI4OGRiN2IiXSxbImJlMjA2MjAwM2M1MWNjMzAwNDY4MjkwNDMzMGU0ZGVlN2YzZGNkMTBiMDFlNTgwYmYxOTcxYjA0ZDRjYWQyOTciLCI2MjE4OGJjNDlkNjFlNTQyODU3M2Q0OGE3NGUxYzY1NWIxYzYxMDkwOTA1NjgyYTBkNTU1''@;'; put 'put ''OGVkNzJkY2NiOWJjIl0sWyI5MzE0NDQyM2FjZTM0NTFlZDI5ZTBmYjlhYzJhZjIxMWNiNmU4NGE2MDFkZjU5OTNjNDE5ODU5ZmZmNWRmMDRhIiwiN2MxMGRmYjE2NGMzNDI1ZjVjNzFhM2Y5ZDc5OTIwMzhmMTA2NTIyNGY3MmJiOWQxZDkwMmE2ZDEzMDM3YjQ3YyJdLFsiYjAxNWY4MDQ0ZjVm''@;'; put 'put ''Y2JkY2YyMWNhMjZkNmMzNGZiODE5NzgyOTIwNWM3YjdkMmE3Y2I2NjQxOGMxNTdiMTEyYyIsImFiOGMxZTA4NmQwNGU4MTM3NDRhNjU1YjJkZjhkNWY4M2IzY2RjNmZhYTMwODhjMWQzYWVhMTQ1NGUzYTFkNWYiXSxbImQ1ZTllMWRhNjQ5ZDk3ZDg5ZTQ4NjgxMTdhNDY1YTNhNGY4YTE4ZGU1''@;'; put 'put ''N2ExNDBkMzZiM2YyYWYzNDFhMjFiNTIiLCI0Y2IwNDQzN2YzOTFlZDczMTExYTEzY2MxZDRkZDBkYjE2OTM0NjVjMjI0MDQ4MGQ4OTU1ZTg1OTJmMjc0NDdhIl0sWyJkM2FlNDEwNDdkZDdjYTA2NWRiZjhlZDc3Yjk5MjQzOTk4MzAwNWNkNzJlMTZkNmY5OTZhNTMxNmQzNjk2NmJiIiwiYmQx''@;'; put 'put ''YWViMjFhZDIyZWJiMjJhMTBmMDMwMzQxN2M2ZDk2NGY4Y2RkN2RmMGFjYTYxNGIxMGRjMTRkMTI1YWM0NiJdLFsiNDYzZTI3NjNkODg1Zjk1OGZjNjZjZGQyMjgwMGYwYTQ4NzE5N2QwYTgyZTM3N2I0OWY4MGFmODdjODk3YjA2NSIsImJmZWZhY2RiMGU1ZDBmZDdkZjNhMzExYTk0ZGUwNjJi''@;'; put 'put ''MjZiODBjNjFmYmM5NzUwOGI3OTk5MjY3MWVmN2NhN2YiXSxbIjc5ODVmZGZkMTI3YzA1NjdjNmY1M2VjMWJiNjNlYzMxNThlNTk3YzQwYmZlNzQ3YzgzY2RkZmM5MTA2NDE5MTciLCI2MDNjMTJkYWYzZDk4NjJlZjJiMjVmZTFkZTI4OWFlZDI0ZWQyOTFlMGVjNjcwODcwM2E1YmQ1NjdmMzJl''@;'; put 'put ''ZDAzIl0sWyI3NGExYWQ2YjVmNzZlMzlkYjJkZDI0OTQxMGVhYzdmOTllNzRjNTljYjgzZDJkMGVkNWZmMTU0M2RhNzcwM2U5IiwiY2M2MTU3ZWYxOGM5YzYzY2Q2MTkzZDgzNjMxYmJlYTAwOTNlMDk2ODk0MmU4YzMzZDU3MzdmZDc5MGUwZGIwOCJdLFsiMzA2ODJhNTA3MDMzNzVmNjAyZDQx''@;'; put 'put ''NjY2NGJhMTliN2ZjOWJhYjQyYzcyNzQ3NDYzYTcxZDA4OTZiMjJmNmRhMyIsIjU1M2UwNGY2YjAxOGI0ZmE2YzhmMzllN2YzMTFkMzE3NjI5MGQwZTBmMTljYTczZjE3NzE0ZDk5NzdhMjJmZjgiXSxbIjllMjE1OGYwZDdjMGQ1ZjI2YzM3OTFlZmVmYTc5NTk3NjU0ZTdhMmIyNDY0ZjUyYjFl''@;'; put 'put ''ZTZjMTM0Nzc2OWVmNTciLCI3MTJmY2RkMWI5MDUzZjA5MDAzYTM0ODFmYTc3NjJlOWZmZDdjOGVmMzVhMzg1MDllMmZiZjI2MjkwMDgzNzMiXSxbIjE3NmUyNjk4OWE0M2M5Y2ZlYmE0MDI5YzIwMjUzOGMyODE3MmU1NjZlM2M0ZmNlNzMyMjg1N2YzYmUzMjdkNjYiLCJlZDhjYzlkMDRiMjll''@;'; put 'put ''Yjg3N2QyNzBiNDg3OGRjNDNjMTlhZWZkMzFmNGVlZTA5ZWU3YjQ3ODM0YzFmYTRiMWMzIl0sWyI3NWQ0NmVmZWEzNzcxZTZlNjhhYmI4OWExM2FkNzQ3ZWNmMTg5MjM5M2RmYzRmMWI3MDA0Nzg4YzUwMzc0ZGE4IiwiOTg1MjM5MGE5OTUwNzY3OWZkMGI4NmZkMmIzOWE4NjhkN2VmYzIyMTUx''@;'; put 'put ''MzQ2ZTFhM2NhNDcyNjU4NmE2YmVkOCJdLFsiODA5YTIwYzY3ZDY0OTAwZmZiNjk4YzRjODI1ZjZkNWYyMzEwZmIwNDUxYzg2OTM0NWI3MzE5ZjY0NTYwNTcyMSIsIjllOTk0OTgwZDk5MTdlMjJiNzZiMDYxOTI3ZmEwNDE0M2QwOTZjY2M1NDk2M2U2YTVlYmZhNWYzZjhlMjg2YzEiXSxbIjFi''@;'; put 'put ''Mzg5MDNhNDNmN2YxMTRlZDQ1MDBiNGVhYzcwODNmZGVmZWNlMWNmMjljNjM1MjhkNTYzNDQ2Zjk3MmMxODAiLCI0MDM2ZWRjOTMxYTYwYWU4ODkzNTNmNzdmZDUzZGU0YTI3MDhiMjZiNmY1ZGE3MmFkMzM5NDExOWRhZjQwOGY5Il1dfX19LHt9XSw0MTk6W2Z1bmN0aW9uKHMsRSxTKXsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIGI9UyxhPXMoImJuLmpzIiksbz1zKCJtaW5pbWFsaXN0aWMtYXNzZXJ0Iikscj1zKCJtaW5pbWFsaXN0aWMtY3J5cHRvLXV0aWxzIik7Yi5hc3NlcnQ9byxiLnRvQXJyYXk9ci50b0FycmF5LGIuemVybzI9ci56ZXJvMixiLnRvSGV4PXIudG9IZXgsYi5lbmNvZGU9ci5l''@;'; put 'put ''bmNvZGUsYi5nZXROQUY9ZnVuY3Rpb24odCxlLGwpe3ZhciBuPW5ldyBBcnJheShNYXRoLm1heCh0LmJpdExlbmd0aCgpLGwpKzEpO24uZmlsbCgwKTtmb3IodmFyIGk9MTw8ZSsxLGg9dC5jbG9uZSgpLGY9MDtmPG4ubGVuZ3RoO2YrKyl7dmFyIHUscD1oLmFuZGxuKGktMSk7aC5pc09kZCgp''@;'; put 'put ''P2guaXN1Ym4odT1wPihpPj4xKS0xPyhpPj4xKS1wOnApOnU9MCxuW2ZdPXUsaC5pdXNocm4oMSl9cmV0dXJuIG59LGIuZ2V0SlNGPWZ1bmN0aW9uKHQsZSl7dmFyIGw9W1tdLFtdXTt0PXQuY2xvbmUoKSxlPWUuY2xvbmUoKTtmb3IodmFyIG4saT0wLGg9MDt0LmNtcG4oLWkpPjB8fGUuY21w''@;'; put 'put ''bigtaCk+MDspe3ZhciBmLHUscD10LmFuZGxuKDMpK2kmMyxkPWUuYW5kbG4oMykraCYzOzM9PT1wJiYocD0tMSksMz09PWQmJihkPS0xKSxmPTEmcD8zIT0obj10LmFuZGxuKDcpK2kmNykmJjUhPT1ufHwyIT09ZD9wOi1wOjAsbFswXS5wdXNoKGYpLHU9MSZkPzMhPShuPWUuYW5kbG4oNykr''@;'; put 'put ''aCY3KSYmNSE9PW58fDIhPT1wP2Q6LWQ6MCxsWzFdLnB1c2godSksMippPT09ZisxJiYoaT0xLWkpLDIqaD09PXUrMSYmKGg9MS1oKSx0Lml1c2hybigxKSxlLml1c2hybigxKX1yZXR1cm4gbH0sYi5jYWNoZWRQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbCl7dmFyIG49Il8iK2U7dC5wcm90b3R5''@;'; put 'put ''cGVbZV09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpc1tuXT90aGlzW25dOnRoaXNbbl09bC5jYWxsKHRoaXMpfX0sYi5wYXJzZUJ5dGVzPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9iLnRvQXJyYXkodCwiaGV4Iik6dH0sYi5pbnRGcm9tTEU9ZnVuY3Rpb24o''@;'; put 'put ''dCl7cmV0dXJuIG5ldyBhKHQsImhleCIsImxlIil9fSx7ImJuLmpzIjo0MjAsIm1pbmltYWxpc3RpYy1hc3NlcnQiOjQ1MywibWluaW1hbGlzdGljLWNyeXB0by11dGlscyI6NDU0fV0sNDIwOltmdW5jdGlvbihzLEUsUyl7YXJndW1lbnRzWzRdWzE4NF1bMF0uYXBwbHkoUyxhcmd1bWVudHMp''@;'; put 'put ''fSx7YnVmZmVyOjE4OCxkdXA6MTg0fV0sNDIxOltmdW5jdGlvbihzLEUsUyl7RS5leHBvcnRzPXtuYW1lOiJlbGxpcHRpYyIsdmVyc2lvbjoiNi41LjQiLGRlc2NyaXB0aW9uOiJFQyBjcnlwdG9ncmFwaHkiLG1haW46ImxpYi9lbGxpcHRpYy5qcyIsZmlsZXM6WyJsaWIiXSxzY3JpcHRzOnts''@;'; put 'put ''aW50OiJlc2xpbnQgbGliIHRlc3QiLCJsaW50OmZpeCI6Im5wbSBydW4gbGludCAtLSAtLWZpeCIsdW5pdDoiaXN0YW5idWwgdGVzdCBfbW9jaGEgLS1yZXBvcnRlcj1zcGVjIHRlc3QvaW5kZXguanMiLHRlc3Q6Im5wbSBydW4gbGludCAmJiBucG0gcnVuIHVuaXQiLHZlcnNpb246ImdydW50''@;'; put 'put ''IGRpc3QgJiYgZ2l0IGFkZCBkaXN0LyJ9LHJlcG9zaXRvcnk6e3R5cGU6ImdpdCIsdXJsOiJnaXRAZ2l0aHViLmNvbTppbmR1dG55L2VsbGlwdGljIn0sa2V5d29yZHM6WyJFQyIsIkVsbGlwdGljIiwiY3VydmUiLCJDcnlwdG9ncmFwaHkiXSxhdXRob3I6IkZlZG9yIEluZHV0bnkgPGZlZG9y''@;'; put 'put ''QGluZHV0bnkuY29tPiIsbGljZW5zZToiTUlUIixidWdzOnt1cmw6Imh0dHBzOi8vZ2l0aHViLmNvbS9pbmR1dG55L2VsbGlwdGljL2lzc3VlcyJ9LGhvbWVwYWdlOiJodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpYyIsZGV2RGVwZW5kZW5jaWVzOnticmZzOiJeMi4wLjIiLGNv''@;'; put 'put ''dmVyYWxsczoiXjMuMS4wIixlc2xpbnQ6Il43LjYuMCIsZ3J1bnQ6Il4xLjIuMSIsImdydW50LWJyb3dzZXJpZnkiOiJeNS4zLjAiLCJncnVudC1jbGkiOiJeMS4zLjIiLCJncnVudC1jb250cmliLWNvbm5lY3QiOiJeMy4wLjAiLCJncnVudC1jb250cmliLWNvcHkiOiJeMS4wLjAiLCJncnVu''@;'; put 'put ''dC1jb250cmliLXVnbGlmeSI6Il41LjAuMCIsImdydW50LW1vY2hhLWlzdGFuYnVsIjoiXjUuMC4yIiwiZ3J1bnQtc2F1Y2VsYWJzIjoiXjkuMC4xIixpc3RhbmJ1bDoiXjAuNC41Iixtb2NoYToiXjguMC4xIn0sZGVwZW5kZW5jaWVzOnsiYm4uanMiOiJeNC4xMS45Iixicm9yYW5kOiJeMS4x''@;'; put 'put ''LjAiLCJoYXNoLmpzIjoiXjEuMC4wIiwiaG1hYy1kcmJnIjoiXjEuMC4xIixpbmhlcml0czoiXjIuMC40IiwibWluaW1hbGlzdGljLWFzc2VydCI6Il4xLjAuMSIsIm1pbmltYWxpc3RpYy1jcnlwdG8tdXRpbHMiOiJeMS4wLjEifX19LHt9XSw0MjI6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIGI9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oTil7dmFyIFA9ZnVuY3Rpb24oKXt9O3JldHVybiBQLnByb3RvdHlwZT1OLG5ldyBQfSxhPU9iamVjdC5rZXlzfHxmdW5jdGlvbihOKXt2YXIgUD1bXTtmb3IodmFyIEIgaW4gTilPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl''@;'; put 'put ''cnR5LmNhbGwoTixCKSYmUC5wdXNoKEIpO3JldHVybiBCfSxvPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kfHxmdW5jdGlvbihOKXt2YXIgUD10aGlzO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBQLmFwcGx5KE4sYXJndW1lbnRzKX19O2Z1bmN0aW9uIHIoKXt0aGlzLl9ldmVudHMmJk9iamVj''@;'; put 'put ''dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLCJfZXZlbnRzIil8fCh0aGlzLl9ldmVudHM9YihudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9RS5leHBvcnRzPXIsci5FdmVudEVtaXR0ZXI9''@;'; put 'put ''cixyLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDt2YXIgdCxlPTEwO3RyeXt2YXIgbD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJ4Iix7dmFsdWU6MH0pLHQ9MD09PWwueH1jYXRjaHt0''@;'; put 'put ''PSExfWZ1bmN0aW9uIG4oTil7cmV0dXJuIHZvaWQgMD09PU4uX21heExpc3RlbmVycz9yLmRlZmF1bHRNYXhMaXN0ZW5lcnM6Ti5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIGQoTixQLEIsJCl7dmFyIEQseCxNO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBCKXRocm93IG5ldyBUeXBlRXJyb3IoJyJs''@;'; put 'put ''aXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7aWYoKHg9Ti5fZXZlbnRzKT8oeC5uZXdMaXN0ZW5lciYmKE4uZW1pdCgibmV3TGlzdGVuZXIiLFAsQi5saXN0ZW5lcj9CLmxpc3RlbmVyOkIpLHg9Ti5fZXZlbnRzKSxNPXhbUF0pOih4PU4uX2V2ZW50cz1iKG51bGwpLE4u''@;'; put 'put ''X2V2ZW50c0NvdW50PTApLE0pe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBNP009eFtQXT0kP1tCLE1dOltNLEJdOiQ/TS51bnNoaWZ0KEIpOk0ucHVzaChCKSwhTS53YXJuZWQmJihEPW4oTikpJiZEPjAmJk0ubGVuZ3RoPkQpe00ud2FybmVkPSEwO3ZhciBqPW5ldyBFcnJvcigiUG9zc2libGUg''@;'; put 'put ''RXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAiK00ubGVuZ3RoKycgIicrU3RyaW5nKFApKyciIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQuJyk7ai5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5p''@;'; put 'put ''bmciLGouZW1pdHRlcj1OLGoudHlwZT1QLGouY291bnQ9TS5sZW5ndGgsIm9iamVjdCI9PXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigiJXM6ICVzIixqLm5hbWUsai5tZXNzYWdlKX19ZWxzZSBNPXhbUF09QiwrK04uX2V2ZW50c0NvdW50O3JldHVybiBOfWZ1''@;'; put 'put ''bmN0aW9uIHYoKXtpZighdGhpcy5maXJlZClzd2l0Y2godGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtjYXNl''@;'; put 'put ''IDE6cmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCxhcmd1bWVudHNbMF0pO2Nhc2UgMjpyZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0LGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pO2Nhc2UgMzpyZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMu''@;'; put 'put ''dGFyZ2V0LGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKTtkZWZhdWx0OmZvcih2YXIgTj1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksUD0wO1A8Ti5sZW5ndGg7KytQKU5bUF09YXJndW1lbnRzW1BdO3RoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsTil9''@;'; put 'put ''fWZ1bmN0aW9uIF8oTixQLEIpe3ZhciAkPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDpOLHR5cGU6UCxsaXN0ZW5lcjpCfSxEPW8uY2FsbCh2LCQpO3JldHVybiBELmxpc3RlbmVyPUIsJC53cmFwRm49RCxEfWZ1bmN0aW9uIEEoTixQLEIpe3ZhciAkPU4uX2V2ZW50cztpZighJCly''@;'; put 'put ''ZXR1cm5bXTt2YXIgRD0kW1BdO3JldHVybiBEPyJmdW5jdGlvbiI9PXR5cGVvZiBEP0I/W0QubGlzdGVuZXJ8fERdOltEXTpCP2Z1bmN0aW9uKHgpe2Zvcih2YXIgTT1uZXcgQXJyYXkoeC5sZW5ndGgpLGo9MDtqPE0ubGVuZ3RoOysrailNW2pdPXhbal0ubGlzdGVuZXJ8fHhbal07cmV0dXJu''@;'; put 'put ''IE19KEQpOkwoRCxELmxlbmd0aCk6W119ZnVuY3Rpb24gSShOKXt2YXIgUD10aGlzLl9ldmVudHM7aWYoUCl7dmFyIEI9UFtOXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgQilyZXR1cm4gMTtpZihCKXJldHVybiBCLmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiBMKE4sUCl7Zm9yKHZhciBCPW5l''@;'; put 'put ''dyBBcnJheShQKSwkPTA7JDxQOysrJClCWyRdPU5bJF07cmV0dXJuIEJ9dD9PYmplY3QuZGVmaW5lUHJvcGVydHkociwiZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGV9LHNldDpmdW5jdGlvbihOKXtpZigibnVtYmVyIiE9dHlwZW9m''@;'; put 'put ''IE58fE48MHx8TiE9Til0aHJvdyBuZXcgVHlwZUVycm9yKCciZGVmYXVsdE1heExpc3RlbmVycyIgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO2U9Tn19KTpyLmRlZmF1bHRNYXhMaXN0ZW5lcnM9ZSxyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oTil7aWYoIm51bWJl''@;'; put 'put ''ciIhPXR5cGVvZiBOfHxOPDB8fGlzTmFOKE4pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJuIiBhcmd1bWVudCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7cmV0dXJuIHRoaXMuX21heExpc3RlbmVycz1OLHRoaXN9LHIucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBuKHRoaXMpfSxyLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKE4pe3ZhciBQLEIsJCxELHgsTSxqPSJlcnJvciI9PT1OO2lmKE09dGhpcy5fZXZlbnRzKWo9aiYmbnVsbD09TS5lcnJvcjtlbHNlIGlmKCFqKXJldHVybiExO2lmKGope2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmKFA9YXJn''@;'; put 'put ''dW1lbnRzWzFdKSxQIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgUDt2YXIgYz1uZXcgRXJyb3IoJ1VuaGFuZGxlZCAiZXJyb3IiIGV2ZW50LiAoJytQKyIpIik7dGhyb3cgYy5jb250ZXh0PVAsY31pZighKEI9TVtOXSkpcmV0dXJuITE7dmFyIG09ImZ1bmN0aW9uIj09dHlwZW9mIEI7c3dpdGNo''@;'; put 'put ''KCQ9YXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOiFmdW5jdGlvbiBpKE4sUCxCKXtpZihQKU4uY2FsbChCKTtlbHNlIGZvcih2YXIgJD1OLmxlbmd0aCxEPUwoTiwkKSx4PTA7eDwkOysreClEW3hdLmNhbGwoQil9KEIsbSx0aGlzKTticmVhaztjYXNlIDI6IWZ1bmN0aW9uIGgoTixQLEIsJCl7''@;'; put 'put ''aWYoUClOLmNhbGwoQiwkKTtlbHNlIGZvcih2YXIgRD1OLmxlbmd0aCx4PUwoTixEKSxNPTA7TTxEOysrTSl4W01dLmNhbGwoQiwkKX0oQixtLHRoaXMsYXJndW1lbnRzWzFdKTticmVhaztjYXNlIDM6IWZ1bmN0aW9uIGYoTixQLEIsJCxEKXtpZihQKU4uY2FsbChCLCQsRCk7ZWxzZSBmb3Io''@;'; put 'put ''dmFyIHg9Ti5sZW5ndGgsTT1MKE4seCksaj0wO2o8eDsrK2opTVtqXS5jYWxsKEIsJCxEKX0oQixtLHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSk7YnJlYWs7Y2FzZSA0OiFmdW5jdGlvbiB1KE4sUCxCLCQsRCx4KXtpZihQKU4uY2FsbChCLCQsRCx4KTtlbHNlIGZvcih2YXIgTT1O''@;'; put 'put ''Lmxlbmd0aCxqPUwoTixNKSxjPTA7YzxNOysrYylqW2NdLmNhbGwoQiwkLEQseCl9KEIsbSx0aGlzLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdKTticmVhaztkZWZhdWx0OmZvcihEPW5ldyBBcnJheSgkLTEpLHg9MTt4PCQ7eCsrKURbeC0xXT1hcmd1bWVudHNbeF07''@;'; put 'put ''IWZ1bmN0aW9uIHAoTixQLEIsJCl7aWYoUClOLmFwcGx5KEIsJCk7ZWxzZSBmb3IodmFyIEQ9Ti5sZW5ndGgseD1MKE4sRCksTT0wO008RDsrK00peFtNXS5hcHBseShCLCQpfShCLG0sdGhpcyxEKX1yZXR1cm4hMH0sci5wcm90b3R5cGUub249ci5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVu''@;'; put 'put ''Y3Rpb24oTixQKXtyZXR1cm4gZCh0aGlzLE4sUCwhMSl9LHIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbihOLFApe3JldHVybiBkKHRoaXMsTixQLCEwKX0sci5wcm90b3R5cGUub25jZT1mdW5jdGlvbihOLFApe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBQKXRocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIHRoaXMub24oTixfKHRoaXMsTixQKSksdGhpc30sci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbihOLFApe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBQKXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIHRoaXMucHJlcGVuZExpc3RlbmVyKE4sXyh0aGlzLE4sUCkpLHRoaXN9LHIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKE4sUCl7dmFyIEIsJCxELHgsTTtpZigiZnVu''@;'; put 'put ''Y3Rpb24iIT10eXBlb2YgUCl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO2lmKCEoJD10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKCEoQj0kW05dKSlyZXR1cm4gdGhpcztpZihCPT09UHx8Qi5saXN0ZW5lcj09PVApMD09''@;'; put 'put ''LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9YihudWxsKTooZGVsZXRlICRbTl0sJC5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsTixCLmxpc3RlbmVyfHxQKSk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgQil7Zm9yKEQ9LTEseD1CLmxlbmd0''@;'; put 'put ''aC0xO3g+PTA7eC0tKWlmKEJbeF09PT1QfHxCW3hdLmxpc3RlbmVyPT09UCl7TT1CW3hdLmxpc3RlbmVyLEQ9eDticmVha31pZihEPDApcmV0dXJuIHRoaXM7MD09PUQ/Qi5zaGlmdCgpOmZ1bmN0aW9uKGosYyl7Zm9yKHZhciBtPWMsZz1tKzEseT1qLmxlbmd0aDtnPHk7bSs9MSxnKz0xKWpb''@;'; put 'put ''bV09altnXTtqLnBvcCgpfShCLEQpLDE9PT1CLmxlbmd0aCYmKCRbTl09QlswXSksJC5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsTixNfHxQKX1yZXR1cm4gdGhpc30sci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKE4pe3ZhciBQLEIs''@;'; put 'put ''JDtpZighKEI9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZighQi5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1iKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOkJbTl0mJigwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2''@;'; put 'put ''ZW50cz1iKG51bGwpOmRlbGV0ZSBCW05dKSx0aGlzO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgRCx4PWEoQik7Zm9yKCQ9MDskPHgubGVuZ3RoOysrJCkicmVtb3ZlTGlzdGVuZXIiIT09KEQ9eFskXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKEQpO3JldHVybiB0aGlzLnJlbW92''@;'; put 'put ''ZUFsbExpc3RlbmVycygicmVtb3ZlTGlzdGVuZXIiKSx0aGlzLl9ldmVudHM9YihudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoImZ1bmN0aW9uIj09dHlwZW9mKFA9QltOXSkpdGhpcy5yZW1vdmVMaXN0ZW5lcihOLFApO2Vsc2UgaWYoUClmb3IoJD1QLmxlbmd0aC0xOyQ+PTA7''@;'; put 'put ''JC0tKXRoaXMucmVtb3ZlTGlzdGVuZXIoTixQWyRdKTtyZXR1cm4gdGhpc30sci5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKE4pe3JldHVybiBBKHRoaXMsTiwhMCl9LHIucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbihOKXtyZXR1cm4gQSh0aGlzLE4sITEpfSxyLmxpc3Rl''@;'; put 'put ''bmVyQ291bnQ9ZnVuY3Rpb24oTixQKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTi5saXN0ZW5lckNvdW50P04ubGlzdGVuZXJDb3VudChQKTpJLmNhbGwoTixQKX0sci5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1JLHIucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fZXZlbnRzQ291bnQ+MD9SZWZsZWN0Lm93bktleXModGhpcy5fZXZlbnRzKTpbXX19LHt9XSw0MjM6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygic2FmZS1idWZmZXIiKS5CdWZmZXIsYT1zKCJtZDUuanMiKTtFLmV4cG9ydHM9ZnVuY3Rpb24obyxyLHQsZSl7''@;'; put 'put ''aWYoYi5pc0J1ZmZlcihvKXx8KG89Yi5mcm9tKG8sImJpbmFyeSIpKSxyJiYoYi5pc0J1ZmZlcihyKXx8KHI9Yi5mcm9tKHIsImJpbmFyeSIpKSw4IT09ci5sZW5ndGgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJzYWx0IHNob3VsZCBiZSBCdWZmZXIgd2l0aCA4IGJ5dGUgbGVuZ3RoIik7Zm9y''@;'; put 'put ''KHZhciBsPXQvOCxuPWIuYWxsb2MobCksaT1iLmFsbG9jKGV8fDApLGg9Yi5hbGxvYygwKTtsPjB8fGU+MDspe3ZhciBmPW5ldyBhO2YudXBkYXRlKGgpLGYudXBkYXRlKG8pLHImJmYudXBkYXRlKHIpLGg9Zi5kaWdlc3QoKTt2YXIgdT0wO2lmKGw+MCl7dmFyIHA9bi5sZW5ndGgtbDt1PU1h''@;'; put 'put ''dGgubWluKGwsaC5sZW5ndGgpLGguY29weShuLHAsMCx1KSxsLT11fWlmKHU8aC5sZW5ndGgmJmU+MCl7dmFyIGQ9aS5sZW5ndGgtZSx2PU1hdGgubWluKGUsaC5sZW5ndGgtdSk7aC5jb3B5KGksZCx1LHUrdiksZS09dn19cmV0dXJuIGguZmlsbCgwKSx7a2V5Om4saXY6aX19fSx7Im1kNS5q''@;'; put 'put ''cyI6NDUwLCJzYWZlLWJ1ZmZlciI6NDk0fV0sNDI0OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxTLkNzdlBhcnNlclN0cmVhbT1TLlBhcnNlck9wdGlvbnM9Uy5wYXJzZUZpbGU9Uy5wYXJzZVN0''@;'; put 'put ''cmVhbT1TLnBhcnNlU3RyaW5nPVMucGFyc2U9Uy5Gb3JtYXR0ZXJPcHRpb25zPVMuQ3N2Rm9ybWF0dGVyU3RyZWFtPVMud3JpdGVUb1BhdGg9Uy53cml0ZVRvU3RyaW5nPVMud3JpdGVUb0J1ZmZlcj1TLndyaXRlVG9TdHJlYW09Uy53cml0ZT1TLmZvcm1hdD12b2lkIDA7dmFyIGI9cygiQGZh''@;'; put 'put ''c3QtY3N2L2Zvcm1hdCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJmb3JtYXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBiLmZvcm1hdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUywid3JpdGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBiLndyaXRlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJ3cml0ZVRvU3RyZWFtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYi53cml0ZVRvU3RyZWFtfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJ3cml0ZVRvQnVmZmVyIix7ZW51bWVyYWJsZTohMCxn''@;'; put 'put ''ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYi53cml0ZVRvQnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJ3cml0ZVRvU3RyaW5nIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYi53cml0ZVRvU3RyaW5nfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJ3cml0''@;'; put 'put ''ZVRvUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGIud3JpdGVUb1BhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIkNzdkZvcm1hdHRlclN0cmVhbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGIuQ3N2Rm9ybWF0dGVyU3RyZWFt''@;'; put 'put ''fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJGb3JtYXR0ZXJPcHRpb25zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYi5Gb3JtYXR0ZXJPcHRpb25zfX0pO3ZhciBhPXMoIkBmYXN0LWNzdi9wYXJzZSIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJwYXJzZSIs''@;'; put 'put ''e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEucGFyc2V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFMsInBhcnNlU3RyaW5nIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5wYXJzZVN0cmluZ319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUywi''@;'; put 'put ''cGFyc2VTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLnBhcnNlU3RyZWFtfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJwYXJzZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLnBhcnNlRmlsZX19KSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoUywiUGFyc2VyT3B0aW9ucyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuUGFyc2VyT3B0aW9uc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUywiQ3N2UGFyc2VyU3RyZWFtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''YS5Dc3ZQYXJzZXJTdHJlYW19fSl9LHsiQGZhc3QtY3N2L2Zvcm1hdCI6MTUxLCJAZmFzdC1jc3YvcGFyc2UiOjE1NX1dLDQyNTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcixhPXMoInJlYWRhYmxlLXN0cmVhbSIpLlRyYW5zZm9y''@;'; put 'put ''bTtmdW5jdGlvbiBvKHIpe2EuY2FsbCh0aGlzKSx0aGlzLl9ibG9jaz1iLmFsbG9jVW5zYWZlKHIpLHRoaXMuX2Jsb2NrU2l6ZT1yLHRoaXMuX2Jsb2NrT2Zmc2V0PTAsdGhpcy5fbGVuZ3RoPVswLDAsMCwwXSx0aGlzLl9maW5hbGl6ZWQ9ITF9cygiaW5oZXJpdHMiKShvLGEpLG8ucHJvdG90''@;'; put 'put ''eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24ocix0LGUpe3ZhciBsPW51bGw7dHJ5e3RoaXMudXBkYXRlKHIsdCl9Y2F0Y2gobil7bD1ufWUobCl9LG8ucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbihyKXt2YXIgdD1udWxsO3RyeXt0aGlzLnB1c2godGhpcy5kaWdlc3QoKSl9Y2F0Y2goZSl7dD1l''@;'; put 'put ''fXIodCl9LG8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihyLHQpe2lmKGZ1bmN0aW9uKGYpe2lmKCFiLmlzQnVmZmVyKGYpJiYic3RyaW5nIiE9dHlwZW9mIGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGF0YSBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgYnVmZmVyIil9KHIpLHRoaXMuX2ZpbmFs''@;'; put 'put ''aXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO2IuaXNCdWZmZXIocil8fChyPWIuZnJvbShyLHQpKTtmb3IodmFyIGU9dGhpcy5fYmxvY2ssbD0wO3RoaXMuX2Jsb2NrT2Zmc2V0K3IubGVuZ3RoLWw+PXRoaXMuX2Jsb2NrU2l6ZTspe2Zvcih2YXIgbj10aGlz''@;'; put 'put ''Ll9ibG9ja09mZnNldDtuPHRoaXMuX2Jsb2NrU2l6ZTspZVtuKytdPXJbbCsrXTt0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wfWZvcig7bDxyLmxlbmd0aDspZVt0aGlzLl9ibG9ja09mZnNldCsrXT1yW2wrK107Zm9yKHZhciBpPTAsaD04KnIubGVuZ3RoO2g+MDsrK2kpdGhp''@;'; put 'put ''cy5fbGVuZ3RoW2ldKz1oLChoPXRoaXMuX2xlbmd0aFtpXS80Mjk0OTY3Mjk2fDApPjAmJih0aGlzLl9sZW5ndGhbaV0tPTQyOTQ5NjcyOTYqaCk7cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgaXMgbm90IGltcGxl''@;'; put 'put ''bWVudGVkIil9LG8ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihyKXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTt0aGlzLl9maW5hbGl6ZWQ9ITA7dmFyIHQ9dGhpcy5fZGlnZXN0KCk7dm9pZCAwIT09ciYmKHQ9dC50b1N0cmlu''@;'; put 'put ''ZyhyKSksdGhpcy5fYmxvY2suZmlsbCgwKSx0aGlzLl9ibG9ja09mZnNldD0wO2Zvcih2YXIgZT0wO2U8NDsrK2UpdGhpcy5fbGVuZ3RoW2VdPTA7cmV0dXJuIHR9LG8ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl9kaWdlc3QgaXMgbm90IGltcGxlbWVu''@;'; put 'put ''dGVkIil9LEUuZXhwb3J0cz1vfSx7aW5oZXJpdHM6NDQwLCJyZWFkYWJsZS1zdHJlYW0iOjQ5MSwic2FmZS1idWZmZXIiOjQ5NH1dLDQyNjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1TO2IudXRpbHM9cygiLi9oYXNoL3V0aWxzIiksYi5jb21tb249cygiLi9oYXNoL2Nv''@;'; put 'put ''bW1vbiIpLGIuc2hhPXMoIi4vaGFzaC9zaGEiKSxiLnJpcGVtZD1zKCIuL2hhc2gvcmlwZW1kIiksYi5obWFjPXMoIi4vaGFzaC9obWFjIiksYi5zaGExPWIuc2hhLnNoYTEsYi5zaGEyNTY9Yi5zaGEuc2hhMjU2LGIuc2hhMjI0PWIuc2hhLnNoYTIyNCxiLnNoYTM4ND1iLnNoYS5zaGEzODQs''@;'; put 'put ''Yi5zaGE1MTI9Yi5zaGEuc2hhNTEyLGIucmlwZW1kMTYwPWIucmlwZW1kLnJpcGVtZDE2MH0seyIuL2hhc2gvY29tbW9uIjo0MjcsIi4vaGFzaC9obWFjIjo0MjgsIi4vaGFzaC9yaXBlbWQiOjQyOSwiLi9oYXNoL3NoYSI6NDMwLCIuL2hhc2gvdXRpbHMiOjQzN31dLDQyNzpbZnVuY3Rpb24o''@;'; put 'put ''cyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuL3V0aWxzIiksYT1zKCJtaW5pbWFsaXN0aWMtYXNzZXJ0Iik7ZnVuY3Rpb24gbygpe3RoaXMucGVuZGluZz1udWxsLHRoaXMucGVuZGluZ1RvdGFsPTAsdGhpcy5ibG9ja1NpemU9dGhpcy5jb25zdHJ1Y3Rvci5ibG9ja1NpemUsdGhpcy5v''@;'; put 'put ''dXRTaXplPXRoaXMuY29uc3RydWN0b3Iub3V0U2l6ZSx0aGlzLmhtYWNTdHJlbmd0aD10aGlzLmNvbnN0cnVjdG9yLmhtYWNTdHJlbmd0aCx0aGlzLnBhZExlbmd0aD10aGlzLmNvbnN0cnVjdG9yLnBhZExlbmd0aC84LHRoaXMuZW5kaWFuPSJiaWciLHRoaXMuX2RlbHRhOD10aGlzLmJsb2Nr''@;'; put 'put ''U2l6ZS84LHRoaXMuX2RlbHRhMzI9dGhpcy5ibG9ja1NpemUvMzJ9Uy5CbG9ja0hhc2g9byxvLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24ocix0KXtpZihyPWIudG9BcnJheShyLHQpLHRoaXMucGVuZGluZz10aGlzLnBlbmRpbmc/dGhpcy5wZW5kaW5nLmNvbmNhdChyKTpyLHRoaXMucGVu''@;'; put 'put ''ZGluZ1RvdGFsKz1yLmxlbmd0aCx0aGlzLnBlbmRpbmcubGVuZ3RoPj10aGlzLl9kZWx0YTgpe3ZhciBlPShyPXRoaXMucGVuZGluZykubGVuZ3RoJXRoaXMuX2RlbHRhODt0aGlzLnBlbmRpbmc9ci5zbGljZShyLmxlbmd0aC1lLHIubGVuZ3RoKSwwPT09dGhpcy5wZW5kaW5nLmxlbmd0aCYm''@;'; put 'put ''KHRoaXMucGVuZGluZz1udWxsKSxyPWIuam9pbjMyKHIsMCxyLmxlbmd0aC1lLHRoaXMuZW5kaWFuKTtmb3IodmFyIGw9MDtsPHIubGVuZ3RoO2wrPXRoaXMuX2RlbHRhMzIpdGhpcy5fdXBkYXRlKHIsbCxsK3RoaXMuX2RlbHRhMzIpfXJldHVybiB0aGlzfSxvLnByb3RvdHlwZS5kaWdlc3Q9''@;'; put 'put ''ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKSxhKG51bGw9PT10aGlzLnBlbmRpbmcpLHRoaXMuX2RpZ2VzdChyKX0sby5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbigpe3ZhciByPXRoaXMucGVuZGluZ1RvdGFsLHQ9dGhpcy5fZGVsdGE4LGU9dC0ocit0aGlzLnBh''@;'; put 'put ''ZExlbmd0aCkldCxsPW5ldyBBcnJheShlK3RoaXMucGFkTGVuZ3RoKTtsWzBdPTEyODtmb3IodmFyIG49MTtuPGU7bisrKWxbbl09MDtpZihyPDw9MywiYmlnIj09PXRoaXMuZW5kaWFuKXtmb3IodmFyIGk9ODtpPHRoaXMucGFkTGVuZ3RoO2krKylsW24rK109MDtsW24rK109MCxsW24rK109''@;'; put 'put ''MCxsW24rK109MCxsW24rK109MCxsW24rK109cj4+PjI0JjI1NSxsW24rK109cj4+PjE2JjI1NSxsW24rK109cj4+PjgmMjU1LGxbbisrXT0yNTUmcn1lbHNlIGZvcihsW24rK109MjU1JnIsbFtuKytdPXI+Pj44JjI1NSxsW24rK109cj4+PjE2JjI1NSxsW24rK109cj4+PjI0JjI1NSxsW24r''@;'; put 'put ''K109MCxsW24rK109MCxsW24rK109MCxsW24rK109MCxpPTg7aTx0aGlzLnBhZExlbmd0aDtpKyspbFtuKytdPTA7cmV0dXJuIGx9fSx7Ii4vdXRpbHMiOjQzNywibWluaW1hbGlzdGljLWFzc2VydCI6NDUzfV0sNDI4OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4v''@;'; put 'put ''dXRpbHMiKSxhPXMoIm1pbmltYWxpc3RpYy1hc3NlcnQiKTtmdW5jdGlvbiBvKHIsdCxlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBvKSlyZXR1cm4gbmV3IG8ocix0LGUpO3RoaXMuSGFzaD1yLHRoaXMuYmxvY2tTaXplPXIuYmxvY2tTaXplLzgsdGhpcy5vdXRTaXplPXIub3V0U2l6ZS84LHRo''@;'; put 'put ''aXMuaW5uZXI9bnVsbCx0aGlzLm91dGVyPW51bGwsdGhpcy5faW5pdChiLnRvQXJyYXkodCxlKSl9RS5leHBvcnRzPW8sby5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocil7ci5sZW5ndGg+dGhpcy5ibG9ja1NpemUmJihyPShuZXcgdGhpcy5IYXNoKS51cGRhdGUocikuZGlnZXN0KCkpLGEo''@;'; put 'put ''ci5sZW5ndGg8PXRoaXMuYmxvY2tTaXplKTtmb3IodmFyIHQ9ci5sZW5ndGg7dDx0aGlzLmJsb2NrU2l6ZTt0Kyspci5wdXNoKDApO2Zvcih0PTA7dDxyLmxlbmd0aDt0Kyspclt0XV49NTQ7Zm9yKHRoaXMuaW5uZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShyKSx0PTA7dDxyLmxlbmd0aDt0''@;'; put 'put ''Kyspclt0XV49MTA2O3RoaXMub3V0ZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShyKX0sby5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHIsdCl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKHIsdCksdGhpc30sby5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLm91''@;'; put 'put ''dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKSx0aGlzLm91dGVyLmRpZ2VzdChyKX19LHsiLi91dGlscyI6NDM3LCJtaW5pbWFsaXN0aWMtYXNzZXJ0Ijo0NTN9XSw0Mjk6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi91dGlscyIpLGE9cygiLi9jb21tb24i''@;'; put 'put ''KSxvPWIucm90bDMyLHI9Yi5zdW0zMix0PWIuc3VtMzJfMyxlPWIuc3VtMzJfNCxsPWEuQmxvY2tIYXNoO2Z1bmN0aW9uIG4oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSlyZXR1cm4gbmV3IG47bC5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIs''@;'; put 'put ''MjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuZW5kaWFuPSJsaXR0bGUifWZ1bmN0aW9uIGkoXyxBLEksTCl7cmV0dXJuIF88PTE1P0FeSV5MOl88PTMxP0EmSXx+QSZMOl88PTQ3PyhBfH5JKV5MOl88PTYzP0EmTHxJJn5MOkFeKEl8fkwpfWZ1bmN0aW9uIGgoXyl7cmV0dXJuIF88PTE1PzA6''@;'; put 'put ''Xzw9MzE/MTUxODUwMDI0OTpfPD00Nz8xODU5Nzc1MzkzOl88PTYzPzI0MDA5NTk3MDg6Mjg0MDg1MzgzOH1mdW5jdGlvbiBmKF8pe3JldHVybiBfPD0xNT8xMzUyODI5OTI2Ol88PTMxPzE1NDg2MDM2ODQ6Xzw9NDc/MTgzNjA3MjY5MTpfPD02Mz8yMDUzOTk0MjE3OjB9Yi5pbmhlcml0cyhu''@;'; put 'put ''LGwpLFMucmlwZW1kMTYwPW4sbi5ibG9ja1NpemU9NTEyLG4ub3V0U2l6ZT0xNjAsbi5obWFjU3RyZW5ndGg9MTkyLG4ucGFkTGVuZ3RoPTY0LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oXyxBKXtmb3IodmFyIEk9dGhpcy5oWzBdLEw9dGhpcy5oWzFdLE49dGhpcy5oWzJdLFA9dGhp''@;'; put 'put ''cy5oWzNdLEI9dGhpcy5oWzRdLCQ9SSxEPUwseD1OLE09UCxqPUIsYz0wO2M8ODA7YysrKXt2YXIgbT1yKG8oZShJLGkoYyxMLE4sUCksX1t1W2NdK0FdLGgoYykpLGRbY10pLEIpO0k9QixCPVAsUD1vKE4sMTApLE49TCxMPW0sbT1yKG8oZSgkLGkoNzktYyxELHgsTSksX1twW2NdK0FdLGYo''@;'; put 'put ''YykpLHZbY10pLGopLCQ9aixqPU0sTT1vKHgsMTApLHg9RCxEPW19bT10KHRoaXMuaFsxXSxOLE0pLHRoaXMuaFsxXT10KHRoaXMuaFsyXSxQLGopLHRoaXMuaFsyXT10KHRoaXMuaFszXSxCLCQpLHRoaXMuaFszXT10KHRoaXMuaFs0XSxJLEQpLHRoaXMuaFs0XT10KHRoaXMuaFswXSxMLHgp''@;'; put 'put ''LHRoaXMuaFswXT1tfSxuLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKF8pe3JldHVybiJoZXgiPT09Xz9iLnRvSGV4MzIodGhpcy5oLCJsaXR0bGUiKTpiLnNwbGl0MzIodGhpcy5oLCJsaXR0bGUiKX07dmFyIHU9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0''@;'; put 'put ''LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10scD1bNSwxNCw3LDAsOSwy''@;'; put 'put ''LDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEz''@;'; put 'put ''LDE0LDAsMyw5LDExXSxkPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1''@;'; put 'put ''LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSx2PVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0''@;'; put 'put ''LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXX0seyIuL2NvbW1vbiI6NDI3LCIuL3V0aWxzIjo0Mzd9XSw0MzA6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Uy5zaGEx''@;'; put 'put ''PXMoIi4vc2hhLzEiKSxTLnNoYTIyND1zKCIuL3NoYS8yMjQiKSxTLnNoYTI1Nj1zKCIuL3NoYS8yNTYiKSxTLnNoYTM4ND1zKCIuL3NoYS8zODQiKSxTLnNoYTUxMj1zKCIuL3NoYS81MTIiKX0seyIuL3NoYS8xIjo0MzEsIi4vc2hhLzIyNCI6NDMyLCIuL3NoYS8yNTYiOjQzMywiLi9zaGEv''@;'; put 'put ''Mzg0Ijo0MzQsIi4vc2hhLzUxMiI6NDM1fV0sNDMxOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL3V0aWxzIiksYT1zKCIuLi9jb21tb24iKSxvPXMoIi4vY29tbW9uIikscj1iLnJvdGwzMix0PWIuc3VtMzIsZT1iLnN1bTMyXzUsbD1vLmZ0XzEsbj1hLkJsb2Nr''@;'; put 'put ''SGFzaCxpPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwzMzk1NDY5NzgyXTtmdW5jdGlvbiBoKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgaCkpcmV0dXJuIG5ldyBoO24uY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3''@;'; put 'put ''OCwzMjg1Mzc3NTIwXSx0aGlzLlc9bmV3IEFycmF5KDgwKX1iLmluaGVyaXRzKGgsbiksRS5leHBvcnRzPWgsaC5ibG9ja1NpemU9NTEyLGgub3V0U2l6ZT0xNjAsaC5obWFjU3RyZW5ndGg9ODAsaC5wYWRMZW5ndGg9NjQsaC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihmLHUpe2Zvcih2''@;'; put 'put ''YXIgcD10aGlzLlcsZD0wO2Q8MTY7ZCsrKXBbZF09Zlt1K2RdO2Zvcig7ZDxwLmxlbmd0aDtkKyspcFtkXT1yKHBbZC0zXV5wW2QtOF1ecFtkLTE0XV5wW2QtMTZdLDEpO3ZhciB2PXRoaXMuaFswXSxfPXRoaXMuaFsxXSxBPXRoaXMuaFsyXSxJPXRoaXMuaFszXSxMPXRoaXMuaFs0XTtmb3Io''@;'; put 'put ''ZD0wO2Q8cC5sZW5ndGg7ZCsrKXt2YXIgTj1+fihkLzIwKSxQPWUocih2LDUpLGwoTixfLEEsSSksTCxwW2RdLGlbTl0pO0w9SSxJPUEsQT1yKF8sMzApLF89dix2PVB9dGhpcy5oWzBdPXQodGhpcy5oWzBdLHYpLHRoaXMuaFsxXT10KHRoaXMuaFsxXSxfKSx0aGlzLmhbMl09dCh0aGlzLmhb''@;'; put 'put ''Ml0sQSksdGhpcy5oWzNdPXQodGhpcy5oWzNdLEkpLHRoaXMuaFs0XT10KHRoaXMuaFs0XSxMKX0saC5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihmKXtyZXR1cm4iaGV4Ij09PWY/Yi50b0hleDMyKHRoaXMuaCwiYmlnIik6Yi5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSx7Ii4uL2NvbW1v''@;'; put 'put ''biI6NDI3LCIuLi91dGlscyI6NDM3LCIuL2NvbW1vbiI6NDM2fV0sNDMyOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uL3V0aWxzIiksYT1zKCIuLzI1NiIpO2Z1bmN0aW9uIG8oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBvKSlyZXR1cm4gbmV3IG87YS5jYWxsKHRo''@;'; put 'put ''aXMpLHRoaXMuaD1bMzIzODM3MTAzMiw5MTQxNTA2NjMsODEyNzAyOTk5LDQxNDQ5MTI2OTcsNDI5MDc3NTg1NywxNzUwNjAzMDI1LDE2OTQwNzY4MzksMzIwNDA3NTQyOF19Yi5pbmhlcml0cyhvLGEpLEUuZXhwb3J0cz1vLG8uYmxvY2tTaXplPTUxMixvLm91dFNpemU9MjI0LG8uaG1hY1N0''@;'; put 'put ''cmVuZ3RoPTE5MixvLnBhZExlbmd0aD02NCxvLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHIpe3JldHVybiJoZXgiPT09cj9iLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIpOmIuc3BsaXQzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIil9fSx7Ii4uL3V0aWxzIjo0MzcsIi4v''@;'; put 'put ''MjU2Ijo0MzN9XSw0MzM6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vdXRpbHMiKSxhPXMoIi4uL2NvbW1vbiIpLG89cygiLi9jb21tb24iKSxyPXMoIm1pbmltYWxpc3RpYy1hc3NlcnQiKSx0PWIuc3VtMzIsZT1iLnN1bTMyXzQsbD1iLnN1bTMyXzUsbj1vLmNo''@;'; put 'put ''MzIsaT1vLm1hajMyLGg9by5zMF8yNTYsZj1vLnMxXzI1Nix1PW8uZzBfMjU2LHA9by5nMV8yNTYsZD1hLkJsb2NrSGFzaCx2PVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0''@;'; put 'put ''MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4''@;'; put 'put ''NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0''@;'; put 'put ''NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIw''@;'; put 'put ''NjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdO2Z1bmN0aW9uIF8oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBfKSlyZXR1cm4gbmV3IF87ZC5jYWxsKHRoaXMp''@;'; put 'put ''LHRoaXMuaD1bMTc3OTAzMzcwMywzMTQ0MTM0Mjc3LDEwMTM5MDQyNDIsMjc3MzQ4MDc2MiwxMzU5ODkzMTE5LDI2MDA4MjI5MjQsNTI4NzM0NjM1LDE1NDE0NTkyMjVdLHRoaXMuaz12LHRoaXMuVz1uZXcgQXJyYXkoNjQpfWIuaW5oZXJpdHMoXyxkKSxFLmV4cG9ydHM9XyxfLmJsb2NrU2l6''@;'; put 'put ''ZT01MTIsXy5vdXRTaXplPTI1NixfLmhtYWNTdHJlbmd0aD0xOTIsXy5wYWRMZW5ndGg9NjQsXy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihBLEkpe2Zvcih2YXIgTD10aGlzLlcsTj0wO048MTY7TisrKUxbTl09QVtJK05dO2Zvcig7TjxMLmxlbmd0aDtOKyspTFtOXT1lKHAoTFtOLTJd''@;'; put 'put ''KSxMW04tN10sdShMW04tMTVdKSxMW04tMTZdKTt2YXIgUD10aGlzLmhbMF0sQj10aGlzLmhbMV0sJD10aGlzLmhbMl0sRD10aGlzLmhbM10seD10aGlzLmhbNF0sTT10aGlzLmhbNV0saj10aGlzLmhbNl0sYz10aGlzLmhbN107Zm9yKHIodGhpcy5rLmxlbmd0aD09PUwubGVuZ3RoKSxOPTA7''@;'; put 'put ''TjxMLmxlbmd0aDtOKyspe3ZhciBtPWwoYyxmKHgpLG4oeCxNLGopLHRoaXMua1tOXSxMW05dKSxnPXQoaChQKSxpKFAsQiwkKSk7Yz1qLGo9TSxNPXgseD10KEQsbSksRD0kLCQ9QixCPVAsUD10KG0sZyl9dGhpcy5oWzBdPXQodGhpcy5oWzBdLFApLHRoaXMuaFsxXT10KHRoaXMuaFsxXSxC''@;'; put 'put ''KSx0aGlzLmhbMl09dCh0aGlzLmhbMl0sJCksdGhpcy5oWzNdPXQodGhpcy5oWzNdLEQpLHRoaXMuaFs0XT10KHRoaXMuaFs0XSx4KSx0aGlzLmhbNV09dCh0aGlzLmhbNV0sTSksdGhpcy5oWzZdPXQodGhpcy5oWzZdLGopLHRoaXMuaFs3XT10KHRoaXMuaFs3XSxjKX0sXy5wcm90b3R5cGUu''@;'; put 'put ''X2RpZ2VzdD1mdW5jdGlvbihBKXtyZXR1cm4iaGV4Ij09PUE/Yi50b0hleDMyKHRoaXMuaCwiYmlnIik6Yi5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSx7Ii4uL2NvbW1vbiI6NDI3LCIuLi91dGlscyI6NDM3LCIuL2NvbW1vbiI6NDM2LCJtaW5pbWFsaXN0aWMtYXNzZXJ0Ijo0NTN9XSw0MzQ6''@;'; put 'put ''W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vdXRpbHMiKSxhPXMoIi4vNTEyIik7ZnVuY3Rpb24gbygpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG8pKXJldHVybiBuZXcgbzthLmNhbGwodGhpcyksdGhpcy5oPVszNDE4MDcwMzY1LDMyMzgzNzEwMzIsMTY1NDI3MDI1''@;'; put 'put ''MCw5MTQxNTA2NjMsMjQzODUyOTM3MCw4MTI3MDI5OTksMzU1NDYyMzYwLDQxNDQ5MTI2OTcsMTczMTQwNTQxNSw0MjkwNzc1ODU3LDIzOTQxODAyMzEsMTc1MDYwMzAyNSwzNjc1MDA4NTI1LDE2OTQwNzY4MzksMTIwMzA2MjgxMywzMjA0MDc1NDI4XX1iLmluaGVyaXRzKG8sYSksRS5leHBv''@;'; put 'put ''cnRzPW8sby5ibG9ja1NpemU9MTAyNCxvLm91dFNpemU9Mzg0LG8uaG1hY1N0cmVuZ3RoPTE5MixvLnBhZExlbmd0aD0xMjgsby5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihyKXtyZXR1cm4iaGV4Ij09PXI/Yi50b0hleDMyKHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIik6Yi5zcGxpdDMy''@;'; put 'put ''KHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIil9fSx7Ii4uL3V0aWxzIjo0MzcsIi4vNTEyIjo0MzV9XSw0MzU6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vdXRpbHMiKSxhPXMoIi4uL2NvbW1vbiIpLG89cygibWluaW1hbGlzdGljLWFzc2VydCIpLHI9Yi5yb3Ry''@;'; put 'put ''NjRfaGksdD1iLnJvdHI2NF9sbyxlPWIuc2hyNjRfaGksbD1iLnNocjY0X2xvLG49Yi5zdW02NCxpPWIuc3VtNjRfaGksaD1iLnN1bTY0X2xvLGY9Yi5zdW02NF80X2hpLHU9Yi5zdW02NF80X2xvLHA9Yi5zdW02NF81X2hpLGQ9Yi5zdW02NF81X2xvLHY9YS5CbG9ja0hhc2gsXz1bMTExNjM1''@;'; put 'put ''MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1''@;'; put 'put ''NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwz''@;'; put 'put ''NDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYw''@;'; put 'put ''NjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2''@;'; put 'put ''MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAs''@;'; put 'put ''MTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQw''@;'; put 'put ''OTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQw''@;'; put 'put ''MywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcs''@;'; put 'put ''MzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3''@;'; put 'put ''NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4''@;'; put 'put ''LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdO2Z1bmN0aW9uIEEoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBBKSlyZXR1cm4gbmV3IEE7di5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQx''@;'; put 'put ''MzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPV8sdGhpcy5XPW5l''@;'; put 'put ''dyBBcnJheSgxNjApfWZ1bmN0aW9uIEkoZyx5LHcsayxPKXt2YXIgej1nJndefmcmTztyZXR1cm4gejwwJiYoeis9NDI5NDk2NzI5Niksen1mdW5jdGlvbiBMKGcseSx3LGssTyx6KXt2YXIgVT15JmtefnkmejtyZXR1cm4gVTwwJiYoVSs9NDI5NDk2NzI5NiksVX1mdW5jdGlvbiBOKGcseSx3''@;'; put 'put ''LGssTyl7dmFyIHo9ZyZ3XmcmT153Jk87cmV0dXJuIHo8MCYmKHorPTQyOTQ5NjcyOTYpLHp9ZnVuY3Rpb24gUChnLHksdyxrLE8seil7dmFyIFU9eSZrXnkmel5rJno7cmV0dXJuIFU8MCYmKFUrPTQyOTQ5NjcyOTYpLFV9ZnVuY3Rpb24gQihnLHkpe3ZhciB3PXIoZyx5LDI4KV5yKHksZywy''@;'; put 'put ''KV5yKHksZyw3KTtyZXR1cm4gdzwwJiYodys9NDI5NDk2NzI5Niksd31mdW5jdGlvbiAkKGcseSl7dmFyIHc9dChnLHksMjgpXnQoeSxnLDIpXnQoeSxnLDcpO3JldHVybiB3PDAmJih3Kz00Mjk0OTY3Mjk2KSx3fWZ1bmN0aW9uIEQoZyx5KXt2YXIgdz1yKGcseSwxNClecihnLHksMTgpXnIo''@;'; put 'put ''eSxnLDkpO3JldHVybiB3PDAmJih3Kz00Mjk0OTY3Mjk2KSx3fWZ1bmN0aW9uIHgoZyx5KXt2YXIgdz10KGcseSwxNCledChnLHksMTgpXnQoeSxnLDkpO3JldHVybiB3PDAmJih3Kz00Mjk0OTY3Mjk2KSx3fWZ1bmN0aW9uIE0oZyx5KXt2YXIgdz1yKGcseSwxKV5yKGcseSw4KV5lKGcseSw3''@;'; put 'put ''KTtyZXR1cm4gdzwwJiYodys9NDI5NDk2NzI5Niksd31mdW5jdGlvbiBqKGcseSl7dmFyIHc9dChnLHksMSledChnLHksOClebChnLHksNyk7cmV0dXJuIHc8MCYmKHcrPTQyOTQ5NjcyOTYpLHd9ZnVuY3Rpb24gYyhnLHkpe3ZhciB3PXIoZyx5LDE5KV5yKHksZywyOSleZShnLHksNik7cmV0''@;'; put 'put ''dXJuIHc8MCYmKHcrPTQyOTQ5NjcyOTYpLHd9ZnVuY3Rpb24gbShnLHkpe3ZhciB3PXQoZyx5LDE5KV50KHksZywyOSlebChnLHksNik7cmV0dXJuIHc8MCYmKHcrPTQyOTQ5NjcyOTYpLHd9Yi5pbmhlcml0cyhBLHYpLEUuZXhwb3J0cz1BLEEuYmxvY2tTaXplPTEwMjQsQS5vdXRTaXplPTUx''@;'; put 'put ''MixBLmhtYWNTdHJlbmd0aD0xOTIsQS5wYWRMZW5ndGg9MTI4LEEucHJvdG90eXBlLl9wcmVwYXJlQmxvY2s9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHc9dGhpcy5XLGs9MDtrPDMyO2srKyl3W2tdPWdbeStrXTtmb3IoO2s8dy5sZW5ndGg7ays9Mil7dmFyIE89Yyh3W2stNF0sd1trLTNdKSx6''@;'; put 'put ''PW0od1trLTRdLHdbay0zXSksVT13W2stMTRdLFY9d1trLTEzXSxSPU0od1trLTMwXSx3W2stMjldKSxIPWood1trLTMwXSx3W2stMjldKSxUPXdbay0zMl0sQz13W2stMzFdO3dba109ZihPLHosVSxWLFIsSCxULEMpLHdbaysxXT11KE8seixVLFYsUixILFQsQyl9fSxBLnByb3RvdHlwZS5f''@;'; put 'put ''dXBkYXRlPWZ1bmN0aW9uKGcseSl7dGhpcy5fcHJlcGFyZUJsb2NrKGcseSk7dmFyIHc9dGhpcy5XLGs9dGhpcy5oWzBdLE89dGhpcy5oWzFdLHo9dGhpcy5oWzJdLFU9dGhpcy5oWzNdLFY9dGhpcy5oWzRdLFI9dGhpcy5oWzVdLEg9dGhpcy5oWzZdLFQ9dGhpcy5oWzddLEM9dGhpcy5oWzhd''@;'; put 'put ''LEY9dGhpcy5oWzldLHE9dGhpcy5oWzEwXSxZPXRoaXMuaFsxMV0sWD10aGlzLmhbMTJdLEs9dGhpcy5oWzEzXSxydD10aGlzLmhbMTRdLHR0PXRoaXMuaFsxNV07byh0aGlzLmsubGVuZ3RoPT09dy5sZW5ndGgpO2Zvcih2YXIgVz0wO1c8dy5sZW5ndGg7Vys9Mil7dmFyIFE9cnQsRz10dCxl''@;'; put 'put ''dD1EKEMsRiksbnQ9eChDLEYpLGl0PUkoQywwLHEsMCxYKSxvdD1MKDAsRiwwLFksMCxLKSxodD10aGlzLmtbV10sZnQ9dGhpcy5rW1crMV0scHQ9d1tXXSxUdD13W1crMV0seXQ9cChRLEcsZXQsbnQsaXQsb3QsaHQsZnQscHQsVHQpLHd0PWQoUSxHLGV0LG50LGl0LG90LGh0LGZ0LHB0LFR0''@;'; put 'put ''KTtRPUIoayxPKSxHPSQoayxPKSxldD1OKGssMCx6LDAsViksbnQ9UCgwLE8sMCxVLDAsUik7dmFyIHF0PWkoUSxHLGV0LG50KSxFdD1oKFEsRyxldCxudCk7cnQ9WCx0dD1LLFg9cSxLPVkscT1DLFk9RixDPWkoSCxULHl0LHd0KSxGPWgoVCxULHl0LHd0KSxIPVYsVD1SLFY9eixSPVUsej1r''@;'; put 'put ''LFU9TyxrPWkoeXQsd3QscXQsRXQpLE89aCh5dCx3dCxxdCxFdCl9bih0aGlzLmgsMCxrLE8pLG4odGhpcy5oLDIseixVKSxuKHRoaXMuaCw0LFYsUiksbih0aGlzLmgsNixILFQpLG4odGhpcy5oLDgsQyxGKSxuKHRoaXMuaCwxMCxxLFkpLG4odGhpcy5oLDEyLFgsSyksbih0aGlzLmgsMTQs''@;'; put 'put ''cnQsdHQpfSxBLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKGcpe3JldHVybiJoZXgiPT09Zz9iLnRvSGV4MzIodGhpcy5oLCJiaWciKTpiLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LHsiLi4vY29tbW9uIjo0MjcsIi4uL3V0aWxzIjo0MzcsIm1pbmltYWxpc3RpYy1hc3NlcnQiOjQ1M31d''@;'; put 'put ''LDQzNjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCIuLi91dGlscyIpLnJvdHIzMjtmdW5jdGlvbiBhKHQsZSxsKXtyZXR1cm4gdCZlXn50Jmx9ZnVuY3Rpb24gbyh0LGUsbCl7cmV0dXJuIHQmZV50JmxeZSZsfWZ1bmN0aW9uIHIodCxlLGwpe3JldHVybiB0XmVebH1T''@;'; put 'put ''LmZ0XzE9ZnVuY3Rpb24odCxlLGwsbil7cmV0dXJuIDA9PT10P2EoZSxsLG4pOjE9PT10fHwzPT09dD9yKGUsbCxuKToyPT09dD9vKGUsbCxuKTp2b2lkIDB9LFMuY2gzMj1hLFMubWFqMzI9byxTLnAzMj1yLFMuczBfMjU2PWZ1bmN0aW9uKHQpe3JldHVybiBiKHQsMileYih0LDEzKV5iKHQs''@;'; put 'put ''MjIpfSxTLnMxXzI1Nj1mdW5jdGlvbih0KXtyZXR1cm4gYih0LDYpXmIodCwxMSleYih0LDI1KX0sUy5nMF8yNTY9ZnVuY3Rpb24odCl7cmV0dXJuIGIodCw3KV5iKHQsMTgpXnQ+Pj4zfSxTLmcxXzI1Nj1mdW5jdGlvbih0KXtyZXR1cm4gYih0LDE3KV5iKHQsMTkpXnQ+Pj4xMH19LHsiLi4v''@;'; put 'put ''dXRpbHMiOjQzN31dLDQzNzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCJtaW5pbWFsaXN0aWMtYXNzZXJ0IiksYT1zKCJpbmhlcml0cyIpO2Z1bmN0aW9uIG8obCxuKXtyZXR1cm4gNTUyOTY9PSg2NDUxMiZsLmNoYXJDb2RlQXQobikpJiYhKG48MHx8bisxPj1sLmxl''@;'; put 'put ''bmd0aCkmJjU2MzIwPT0oNjQ1MTImbC5jaGFyQ29kZUF0KG4rMSkpfWZ1bmN0aW9uIHIobCl7cmV0dXJuKGw+Pj4yNHxsPj4+OCY2NTI4MHxsPDw4JjE2NzExNjgwfCgyNTUmbCk8PDI0KT4+PjB9ZnVuY3Rpb24gdChsKXtyZXR1cm4gMT09PWwubGVuZ3RoPyIwIitsOmx9ZnVuY3Rpb24gZShs''@;'; put 'put ''KXtyZXR1cm4gNz09PWwubGVuZ3RoPyIwIitsOjY9PT1sLmxlbmd0aD8iMDAiK2w6NT09PWwubGVuZ3RoPyIwMDAiK2w6ND09PWwubGVuZ3RoPyIwMDAwIitsOjM9PT1sLmxlbmd0aD8iMDAwMDAiK2w6Mj09PWwubGVuZ3RoPyIwMDAwMDAiK2w6MT09PWwubGVuZ3RoPyIwMDAwMDAwIitsOmx9''@;'; put 'put ''Uy5pbmhlcml0cz1hLFMudG9BcnJheT1mdW5jdGlvbihsLG4pe2lmKEFycmF5LmlzQXJyYXkobCkpcmV0dXJuIGwuc2xpY2UoKTtpZighbClyZXR1cm5bXTt2YXIgaT1bXTtpZigic3RyaW5nIj09dHlwZW9mIGwpaWYobil7aWYoImhleCI9PT1uKWZvcigobD1sLnJlcGxhY2UoL1teYS16MC05''@;'; put 'put ''XSsvZ2ksIiIpKS5sZW5ndGglMiE9MCYmKGw9IjAiK2wpLGY9MDtmPGwubGVuZ3RoO2YrPTIpaS5wdXNoKHBhcnNlSW50KGxbZl0rbFtmKzFdLDE2KSl9ZWxzZSBmb3IodmFyIGg9MCxmPTA7ZjxsLmxlbmd0aDtmKyspe3ZhciB1PWwuY2hhckNvZGVBdChmKTt1PDEyOD9pW2grK109dTp1PDIw''@;'; put 'put ''NDg/KGlbaCsrXT11Pj42fDE5MixpW2grK109NjMmdXwxMjgpOm8obCxmKT8odT02NTUzNisoKDEwMjMmdSk8PDEwKSsoMTAyMyZsLmNoYXJDb2RlQXQoKytmKSksaVtoKytdPXU+PjE4fDI0MCxpW2grK109dT4+MTImNjN8MTI4LGlbaCsrXT11Pj42JjYzfDEyOCxpW2grK109NjMmdXwxMjgp''@;'; put 'put ''OihpW2grK109dT4+MTJ8MjI0LGlbaCsrXT11Pj42JjYzfDEyOCxpW2grK109NjMmdXwxMjgpfWVsc2UgZm9yKGY9MDtmPGwubGVuZ3RoO2YrKylpW2ZdPTB8bFtmXTtyZXR1cm4gaX0sUy50b0hleD1mdW5jdGlvbihsKXtmb3IodmFyIG49IiIsaT0wO2k8bC5sZW5ndGg7aSsrKW4rPXQobFtp''@;'; put 'put ''XS50b1N0cmluZygxNikpO3JldHVybiBufSxTLmh0b25sPXIsUy50b0hleDMyPWZ1bmN0aW9uKGwsbil7Zm9yKHZhciBpPSIiLGg9MDtoPGwubGVuZ3RoO2grKyl7dmFyIGY9bFtoXTsibGl0dGxlIj09PW4mJihmPXIoZikpLGkrPWUoZi50b1N0cmluZygxNikpfXJldHVybiBpfSxTLnplcm8y''@;'; put 'put ''PXQsUy56ZXJvOD1lLFMuam9pbjMyPWZ1bmN0aW9uKGwsbixpLGgpe3ZhciBmPWktbjtiKGYlND09MCk7Zm9yKHZhciB1PW5ldyBBcnJheShmLzQpLHA9MCxkPW47cDx1Lmxlbmd0aDtwKyssZCs9NCl1W3BdPSgiYmlnIj09PWg/bFtkXTw8MjR8bFtkKzFdPDwxNnxsW2QrMl08PDh8bFtkKzNd''@;'; put 'put ''OmxbZCszXTw8MjR8bFtkKzJdPDwxNnxsW2QrMV08PDh8bFtkXSk+Pj4wO3JldHVybiB1fSxTLnNwbGl0MzI9ZnVuY3Rpb24obCxuKXtmb3IodmFyIGk9bmV3IEFycmF5KDQqbC5sZW5ndGgpLGg9MCxmPTA7aDxsLmxlbmd0aDtoKyssZis9NCl7dmFyIHU9bFtoXTsiYmlnIj09PW4/KGlbZl09''@;'; put 'put ''dT4+PjI0LGlbZisxXT11Pj4+MTYmMjU1LGlbZisyXT11Pj4+OCYyNTUsaVtmKzNdPTI1NSZ1KTooaVtmKzNdPXU+Pj4yNCxpW2YrMl09dT4+PjE2JjI1NSxpW2YrMV09dT4+PjgmMjU1LGlbZl09MjU1JnUpfXJldHVybiBpfSxTLnJvdHIzMj1mdW5jdGlvbihsLG4pe3JldHVybiBsPj4+bnxs''@;'; put 'put ''PDwzMi1ufSxTLnJvdGwzMj1mdW5jdGlvbihsLG4pe3JldHVybiBsPDxufGw+Pj4zMi1ufSxTLnN1bTMyPWZ1bmN0aW9uKGwsbil7cmV0dXJuIGwrbj4+PjB9LFMuc3VtMzJfMz1mdW5jdGlvbihsLG4saSl7cmV0dXJuIGwrbitpPj4+MH0sUy5zdW0zMl80PWZ1bmN0aW9uKGwsbixpLGgpe3Jl''@;'; put 'put ''dHVybiBsK24raStoPj4+MH0sUy5zdW0zMl81PWZ1bmN0aW9uKGwsbixpLGgsZil7cmV0dXJuIGwrbitpK2grZj4+PjB9LFMuc3VtNjQ9ZnVuY3Rpb24obCxuLGksaCl7dmFyIHU9aCtsW24rMV0+Pj4wO2xbbl09KHU8aD8xOjApK2krbFtuXT4+PjAsbFtuKzFdPXV9LFMuc3VtNjRfaGk9ZnVu''@;'; put 'put ''Y3Rpb24obCxuLGksaCl7cmV0dXJuKG4raD4+PjA8bj8xOjApK2wraT4+PjB9LFMuc3VtNjRfbG89ZnVuY3Rpb24obCxuLGksaCl7cmV0dXJuIG4raD4+PjB9LFMuc3VtNjRfNF9oaT1mdW5jdGlvbihsLG4saSxoLGYsdSxwLGQpe3ZhciB2PTAsXz1uO3JldHVybiB2Kz0oXz1fK2g+Pj4wKTxu''@;'; put 'put ''PzE6MCx2Kz0oXz1fK3U+Pj4wKTx1PzE6MCxsK2krZitwKyh2Kz0oXz1fK2Q+Pj4wKTxkPzE6MCk+Pj4wfSxTLnN1bTY0XzRfbG89ZnVuY3Rpb24obCxuLGksaCxmLHUscCxkKXtyZXR1cm4gbitoK3UrZD4+PjB9LFMuc3VtNjRfNV9oaT1mdW5jdGlvbihsLG4saSxoLGYsdSxwLGQsdixfKXt2''@;'; put 'put ''YXIgQT0wLEk9bjtyZXR1cm4gQSs9KEk9SStoPj4+MCk8bj8xOjAsQSs9KEk9SSt1Pj4+MCk8dT8xOjAsQSs9KEk9SStkPj4+MCk8ZD8xOjAsbCtpK2YrcCt2KyhBKz0oST1JK18+Pj4wKTxfPzE6MCk+Pj4wfSxTLnN1bTY0XzVfbG89ZnVuY3Rpb24obCxuLGksaCxmLHUscCxkLHYsXyl7cmV0''@;'; put 'put ''dXJuIG4raCt1K2QrXz4+PjB9LFMucm90cjY0X2hpPWZ1bmN0aW9uKGwsbixpKXtyZXR1cm4objw8MzItaXxsPj4+aSk+Pj4wfSxTLnJvdHI2NF9sbz1mdW5jdGlvbihsLG4saSl7cmV0dXJuKGw8PDMyLWl8bj4+PmkpPj4+MH0sUy5zaHI2NF9oaT1mdW5jdGlvbihsLG4saSl7cmV0dXJuIGw+''@;'; put 'put ''Pj5pfSxTLnNocjY0X2xvPWZ1bmN0aW9uKGwsbixpKXtyZXR1cm4obDw8MzItaXxuPj4+aSk+Pj4wfX0se2luaGVyaXRzOjQ0MCwibWluaW1hbGlzdGljLWFzc2VydCI6NDUzfV0sNDM4OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoImhhc2guanMiKSxhPXMoIm1pbmlt''@;'; put 'put ''YWxpc3RpYy1jcnlwdG8tdXRpbHMiKSxvPXMoIm1pbmltYWxpc3RpYy1hc3NlcnQiKTtmdW5jdGlvbiByKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXJldHVybiBuZXcgcih0KTt0aGlzLmhhc2g9dC5oYXNoLHRoaXMucHJlZFJlc2lzdD0hIXQucHJlZFJlc2lzdCx0aGlzLm91dExlbj10''@;'; put 'put ''aGlzLmhhc2gub3V0U2l6ZSx0aGlzLm1pbkVudHJvcHk9dC5taW5FbnRyb3B5fHx0aGlzLmhhc2guaG1hY1N0cmVuZ3RoLHRoaXMuX3Jlc2VlZD1udWxsLHRoaXMucmVzZWVkSW50ZXJ2YWw9bnVsbCx0aGlzLks9bnVsbCx0aGlzLlY9bnVsbDt2YXIgZT1hLnRvQXJyYXkodC5lbnRyb3B5LHQu''@;'; put 'put ''ZW50cm9weUVuY3x8ImhleCIpLGw9YS50b0FycmF5KHQubm9uY2UsdC5ub25jZUVuY3x8ImhleCIpLG49YS50b0FycmF5KHQucGVycyx0LnBlcnNFbmN8fCJoZXgiKTtvKGUubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMu''@;'; put 'put ''bWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl9pbml0KGUsbCxuKX1FLmV4cG9ydHM9cixyLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUsbCl7dmFyIG49dC5jb25jYXQoZSkuY29uY2F0KGwpO3RoaXMuSz1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCksdGhpcy5WPW5ldyBBcnJheSh0aGlz''@;'; put 'put ''Lm91dExlbi84KTtmb3IodmFyIGk9MDtpPHRoaXMuVi5sZW5ndGg7aSsrKXRoaXMuS1tpXT0wLHRoaXMuVltpXT0xO3RoaXMuX3VwZGF0ZShuKSx0aGlzLl9yZXNlZWQ9MSx0aGlzLnJlc2VlZEludGVydmFsPTI4MTQ3NDk3NjcxMDY1Nn0sci5wcm90b3R5cGUuX2htYWM9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gbmV3IGIuaG1hYyh0aGlzLmhhc2gsdGhpcy5LKX0sci5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFswXSk7dCYmKGU9ZS51cGRhdGUodCkpLHRoaXMuSz1lLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9o''@;'; put 'put ''bWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksdCYmKHRoaXMuSz10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFsxXSkudXBkYXRlKHQpLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCkpfSxyLnByb3RvdHlwZS5yZXNlZWQ9''@;'; put 'put ''ZnVuY3Rpb24odCxlLGwsbil7InN0cmluZyIhPXR5cGVvZiBlJiYobj1sLGw9ZSxlPW51bGwpLHQ9YS50b0FycmF5KHQsZSksbD1hLnRvQXJyYXkobCxuKSxvKHQubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50''@;'; put 'put ''cm9weSsiIGJpdHMiKSx0aGlzLl91cGRhdGUodC5jb25jYXQobHx8W10pKSx0aGlzLl9yZXNlZWQ9MX0sci5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24odCxlLGwsbil7aWYodGhpcy5fcmVzZWVkPnRoaXMucmVzZWVkSW50ZXJ2YWwpdGhyb3cgbmV3IEVycm9yKCJSZXNlZWQgaXMgcmVx''@;'; put 'put ''dWlyZWQiKTsic3RyaW5nIiE9dHlwZW9mIGUmJihuPWwsbD1lLGU9bnVsbCksbCYmKGw9YS50b0FycmF5KGwsbnx8ImhleCIpLHRoaXMuX3VwZGF0ZShsKSk7Zm9yKHZhciBpPVtdO2kubGVuZ3RoPHQ7KXRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksaT1pLmNv''@;'; put 'put ''bmNhdCh0aGlzLlYpO3ZhciBoPWkuc2xpY2UoMCx0KTtyZXR1cm4gdGhpcy5fdXBkYXRlKGwpLHRoaXMuX3Jlc2VlZCsrLGEuZW5jb2RlKGgsZSl9fSx7Imhhc2guanMiOjQyNiwibWluaW1hbGlzdGljLWFzc2VydCI6NDUzLCJtaW5pbWFsaXN0aWMtY3J5cHRvLXV0aWxzIjo0NTR9XSw0Mzk6''@;'; put 'put ''W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Uy5yZWFkPWZ1bmN0aW9uKGIsYSxvLHIsdCl7dmFyIGUsbCxuPTgqdC1yLTEsaT0oMTw8biktMSxoPWk+PjEsZj0tNyx1PW8/dC0xOjAscD1vPy0xOjEsZD1iW2ErdV07Zm9yKHUrPXAsZT1kJigxPDwtZiktMSxkPj49LWYsZis9bjtmPjA7''@;'; put 'put ''ZT0yNTYqZStiW2ErdV0sdSs9cCxmLT04KTtmb3IobD1lJigxPDwtZiktMSxlPj49LWYsZis9cjtmPjA7bD0yNTYqbCtiW2ErdV0sdSs9cCxmLT04KTtpZigwPT09ZSllPTEtaDtlbHNle2lmKGU9PT1pKXJldHVybiBsP05hTjoxLzAqKGQ/LTE6MSk7bCs9TWF0aC5wb3coMixyKSxlLT1ofXJl''@;'; put 'put ''dHVybihkPy0xOjEpKmwqTWF0aC5wb3coMixlLXIpfSxTLndyaXRlPWZ1bmN0aW9uKGIsYSxvLHIsdCxlKXt2YXIgbCxuLGksaD04KmUtdC0xLGY9KDE8PGgpLTEsdT1mPj4xLHA9MjM9PT10P01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxkPXI/MDplLTEsdj1yPzE6LTEsXz1h''@;'; put 'put ''PDB8fDA9PT1hJiYxL2E8MD8xOjA7Zm9yKGE9TWF0aC5hYnMoYSksaXNOYU4oYSl8fGE9PT0xLzA/KG49aXNOYU4oYSk/MTowLGw9Zik6KGw9TWF0aC5mbG9vcihNYXRoLmxvZyhhKS9NYXRoLkxOMiksYSooaT1NYXRoLnBvdygyLC1sKSk8MSYmKGwtLSxpKj0yKSwoYSs9bCt1Pj0xP3AvaTpw''@;'; put 'put ''Kk1hdGgucG93KDIsMS11KSkqaT49MiYmKGwrKyxpLz0yKSxsK3U+PWY/KG49MCxsPWYpOmwrdT49MT8obj0oYSppLTEpKk1hdGgucG93KDIsdCksbCs9dSk6KG49YSpNYXRoLnBvdygyLHUtMSkqTWF0aC5wb3coMix0KSxsPTApKTt0Pj04O2JbbytkXT0yNTUmbixkKz12LG4vPTI1Nix0LT04''@;'; put 'put ''KTtmb3IobD1sPDx0fG4saCs9dDtoPjA7YltvK2RdPTI1NSZsLGQrPXYsbC89MjU2LGgtPTgpO2JbbytkLXZdfD0xMjgqX319LHt9XSw0NDA6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7RS5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGIs''@;'; put 'put ''YSl7YSYmKGIuc3VwZXJfPWEsYi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmIsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSkpfTpmdW5jdGlvbihiLGEpe2lmKGEpe2Iuc3VwZXJfPWE7dmFyIG89ZnVu''@;'; put 'put ''Y3Rpb24oKXt9O28ucHJvdG90eXBlPWEucHJvdG90eXBlLGIucHJvdG90eXBlPW5ldyBvLGIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWJ9fX0se31dLDQ0MTpbZnVuY3Rpb24ocyxFLFMpeyhmdW5jdGlvbihiLGEsbyxyLHQsZSxsLG4peyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjshZnVuY3Rp''@;'; put 'put ''b24oaSl7Im9iamVjdCI9PXR5cGVvZiBTJiZ2b2lkIDAhPT1FP0UuZXhwb3J0cz1pKCk6KHR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT1hP2E6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykuSlNaaXA9aSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBpKGgsZix1KXtm''@;'; put 'put ''dW5jdGlvbiBwKF8sQSl7aWYoIWZbX10pe2lmKCFoW19dKXt2YXIgST0iZnVuY3Rpb24iPT10eXBlb2YgcyYmcztpZighQSYmSSlyZXR1cm4gSShfLCEwKTtpZihkKXJldHVybiBkKF8sITApO3ZhciBMPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK18rIiciKTt0aHJvdyBMLmNv''@;'; put 'put ''ZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLEx9dmFyIE49ZltfXT17ZXhwb3J0czp7fX07aFtfXVswXS5jYWxsKE4uZXhwb3J0cyxmdW5jdGlvbihQKXtyZXR1cm4gcChoW19dWzFdW1BdfHxQKX0sTixOLmV4cG9ydHMsaSxoLGYsdSl9cmV0dXJuIGZbX10uZXhwb3J0c31mb3IodmFyIGQ9ImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIHMmJnMsdj0wO3Y8dS5sZW5ndGg7disrKXAodVt2XSk7cmV0dXJuIHB9KHsxOltmdW5jdGlvbihpLGgsZil7dmFyIHU9aSgiLi91dGlscyIpLHA9aSgiLi9zdXBwb3J0IiksZD0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5''@;'; put 'put ''ejAxMjM0NTY3ODkrLz0iO2YuZW5jb2RlPWZ1bmN0aW9uKHYpe2Zvcih2YXIgXyxBLEksTixQLEIsJD1bXSxEPTAseD12Lmxlbmd0aCxNPXgsaj0ic3RyaW5nIiE9PXUuZ2V0VHlwZU9mKHYpO0Q8di5sZW5ndGg7KU09eC1ELEk9aj8oXz12W0QrK10sQT1EPHg/dltEKytdOjAsRDx4P3ZbRCsr''@;'; put 'put ''XTowKTooXz12LmNoYXJDb2RlQXQoRCsrKSxBPUQ8eD92LmNoYXJDb2RlQXQoRCsrKTowLEQ8eD92LmNoYXJDb2RlQXQoRCsrKTowKSxOPSgzJl8pPDw0fEE+PjQsUD0xPE0/KDE1JkEpPDwyfEk+PjY6NjQsQj0yPE0/NjMmSTo2NCwkLnB1c2goZC5jaGFyQXQoXz4+MikrZC5jaGFyQXQoTikr''@;'; put 'put ''ZC5jaGFyQXQoUCkrZC5jaGFyQXQoQikpO3JldHVybiAkLmpvaW4oIiIpfSxmLmRlY29kZT1mdW5jdGlvbih2KXt2YXIgXyxBLEksTCxOLFAsQj0wLCQ9MCxEPSJkYXRhOiI7aWYodi5zdWJzdHIoMCw1KT09PUQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGJhc2U2NCBpbnB1dCwgaXQgbG9v''@;'; put 'put ''a3MgbGlrZSBhIGRhdGEgdXJsLiIpO3ZhciB4LE09Myoodj12LnJlcGxhY2UoL1teQS1aYS16MC05Ky89XS9nLCIiKSkubGVuZ3RoLzQ7aWYodi5jaGFyQXQodi5sZW5ndGgtMSk9PT1kLmNoYXJBdCg2NCkmJk0tLSx2LmNoYXJBdCh2Lmxlbmd0aC0yKT09PWQuY2hhckF0KDY0KSYmTS0tLE0l''@;'; put 'put ''MSE9MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYmFzZTY0IGlucHV0LCBiYWQgY29udGVudCBsZW5ndGguIik7Zm9yKHg9cC51aW50OGFycmF5P25ldyBVaW50OEFycmF5KDB8TSk6bmV3IEFycmF5KDB8TSk7Qjx2Lmxlbmd0aDspXz1kLmluZGV4T2Yodi5jaGFyQXQoQisrKSk8PDJ8KEw9''@;'; put 'put ''ZC5pbmRleE9mKHYuY2hhckF0KEIrKykpKT4+NCxBPSgxNSZMKTw8NHwoTj1kLmluZGV4T2Yodi5jaGFyQXQoQisrKSkpPj4yLEk9KDMmTik8PDZ8KFA9ZC5pbmRleE9mKHYuY2hhckF0KEIrKykpKSx4WyQrK109Xyw2NCE9PU4mJih4WyQrK109QSksNjQhPT1QJiYoeFskKytdPUkpO3JldHVy''@;'; put 'put ''biB4fX0seyIuL3N1cHBvcnQiOjMwLCIuL3V0aWxzIjozMn1dLDI6W2Z1bmN0aW9uKGksaCxmKXt2YXIgdT1pKCIuL2V4dGVybmFsIikscD1pKCIuL3N0cmVhbS9EYXRhV29ya2VyIiksZD1pKCIuL3N0cmVhbS9DcmMzMlByb2JlIiksdj1pKCIuL3N0cmVhbS9EYXRhTGVuZ3RoUHJvYmUiKTtm''@;'; put 'put ''dW5jdGlvbiBfKEEsSSxMLE4sUCl7dGhpcy5jb21wcmVzc2VkU2l6ZT1BLHRoaXMudW5jb21wcmVzc2VkU2l6ZT1JLHRoaXMuY3JjMzI9TCx0aGlzLmNvbXByZXNzaW9uPU4sdGhpcy5jb21wcmVzc2VkQ29udGVudD1QfV8ucHJvdG90eXBlPXtnZXRDb250ZW50V29ya2VyOmZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIEE9bmV3IHAodS5Qcm9taXNlLnJlc29sdmUodGhpcy5jb21wcmVzc2VkQ29udGVudCkpLnBpcGUodGhpcy5jb21wcmVzc2lvbi51bmNvbXByZXNzV29ya2VyKCkpLnBpcGUobmV3IHYoImRhdGFfbGVuZ3RoIikpLEk9dGhpcztyZXR1cm4gQS5vbigiZW5kIixmdW5jdGlvbigpe2lmKHRo''@;'; put 'put ''aXMuc3RyZWFtSW5mby5kYXRhX2xlbmd0aCE9PUkudW5jb21wcmVzc2VkU2l6ZSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZyA6IHVuY29tcHJlc3NlZCBkYXRhIHNpemUgbWlzbWF0Y2giKX0pLEF9LGdldENvbXByZXNzZWRXb3JrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHAodS5Qcm9taXNlLnJl''@;'; put 'put ''c29sdmUodGhpcy5jb21wcmVzc2VkQ29udGVudCkpLndpdGhTdHJlYW1JbmZvKCJjb21wcmVzc2VkU2l6ZSIsdGhpcy5jb21wcmVzc2VkU2l6ZSkud2l0aFN0cmVhbUluZm8oInVuY29tcHJlc3NlZFNpemUiLHRoaXMudW5jb21wcmVzc2VkU2l6ZSkud2l0aFN0cmVhbUluZm8oImNyYzMyIix0''@;'; put 'put ''aGlzLmNyYzMyKS53aXRoU3RyZWFtSW5mbygiY29tcHJlc3Npb24iLHRoaXMuY29tcHJlc3Npb24pfX0sXy5jcmVhdGVXb3JrZXJGcm9tPWZ1bmN0aW9uKEEsSSxMKXtyZXR1cm4gQS5waXBlKG5ldyBkKS5waXBlKG5ldyB2KCJ1bmNvbXByZXNzZWRTaXplIikpLnBpcGUoSS5jb21wcmVzc1dv''@;'; put 'put ''cmtlcihMKSkucGlwZShuZXcgdigiY29tcHJlc3NlZFNpemUiKSkud2l0aFN0cmVhbUluZm8oImNvbXByZXNzaW9uIixJKX0saC5leHBvcnRzPV99LHsiLi9leHRlcm5hbCI6NiwiLi9zdHJlYW0vQ3JjMzJQcm9iZSI6MjUsIi4vc3RyZWFtL0RhdGFMZW5ndGhQcm9iZSI6MjYsIi4vc3RyZWFt''@;'; put 'put ''L0RhdGFXb3JrZXIiOjI3fV0sMzpbZnVuY3Rpb24oaSxoLGYpe3ZhciB1PWkoIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXIiKTtmLlNUT1JFPXttYWdpYzoiXDBcMCIsY29tcHJlc3NXb3JrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHUoIlNUT1JFIGNvbXByZXNzaW9uIil9LHVuY29tcHJlc3NX''@;'; put 'put ''b3JrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHUoIlNUT1JFIGRlY29tcHJlc3Npb24iKX19LGYuREVGTEFURT1pKCIuL2ZsYXRlIil9LHsiLi9mbGF0ZSI6NywiLi9zdHJlYW0vR2VuZXJpY1dvcmtlciI6Mjh9XSw0OltmdW5jdGlvbihpLGgsZil7dmFyIHU9aSgiLi91dGlscyIpLHA9ZnVu''@;'; put 'put ''Y3Rpb24oKXtmb3IodmFyIGQsdj1bXSxfPTA7XzwyNTY7XysrKXtkPV87Zm9yKHZhciBBPTA7QTw4O0ErKylkPTEmZD8zOTg4MjkyMzg0XmQ+Pj4xOmQ+Pj4xO3ZbX109ZH1yZXR1cm4gdn0oKTtoLmV4cG9ydHM9ZnVuY3Rpb24oZCx2KXtyZXR1cm4gdm9pZCAwIT09ZCYmZC5sZW5ndGg/InN0''@;'; put 'put ''cmluZyIhPT11LmdldFR5cGVPZihkKT9mdW5jdGlvbihfLEEsSSl7dmFyIE49cCxQPTArSTtfXj0tMTtmb3IodmFyIEI9MDtCPFA7QisrKV89Xz4+PjheTlsyNTUmKF9eQVtCXSldO3JldHVybi0xXl99KDB8dixkLGQubGVuZ3RoKTpmdW5jdGlvbihfLEEsSSl7dmFyIE49cCxQPTArSTtfXj0t''@;'; put 'put ''MTtmb3IodmFyIEI9MDtCPFA7QisrKV89Xz4+PjheTlsyNTUmKF9eQS5jaGFyQ29kZUF0KEIpKV07cmV0dXJuLTFeX30oMHx2LGQsZC5sZW5ndGgpOjB9fSx7Ii4vdXRpbHMiOjMyfV0sNTpbZnVuY3Rpb24oaSxoLGYpe2YuYmFzZTY0PSExLGYuYmluYXJ5PSExLGYuZGlyPSExLGYuY3JlYXRl''@;'; put 'put ''Rm9sZGVycz0hMCxmLmRhdGU9bnVsbCxmLmNvbXByZXNzaW9uPW51bGwsZi5jb21wcmVzc2lvbk9wdGlvbnM9bnVsbCxmLmNvbW1lbnQ9bnVsbCxmLnVuaXhQZXJtaXNzaW9ucz1udWxsLGYuZG9zUGVybWlzc2lvbnM9bnVsbH0se31dLDY6W2Z1bmN0aW9uKGksaCxmKXt2YXIgdTt1PXR5cGVv''@;'; put 'put ''ZiBQcm9taXNlPCJ1Ij9Qcm9taXNlOmkoImxpZSIpLGguZXhwb3J0cz17UHJvbWlzZTp1fX0se2xpZTozN31dLDc6W2Z1bmN0aW9uKGksaCxmKXt2YXIgdT10eXBlb2YgVWludDhBcnJheTwidSImJnR5cGVvZiBVaW50MTZBcnJheTwidSImJnR5cGVvZiBVaW50MzJBcnJheTwidSIscD1pKCJw''@;'; put 'put ''YWtvIiksZD1pKCIuL3V0aWxzIiksdj1pKCIuL3N0cmVhbS9HZW5lcmljV29ya2VyIiksXz11PyJ1aW50OGFycmF5IjoiYXJyYXkiO2Z1bmN0aW9uIEEoSSxMKXt2LmNhbGwodGhpcywiRmxhdGVXb3JrZXIvIitJKSx0aGlzLl9wYWtvPW51bGwsdGhpcy5fcGFrb0FjdGlvbj1JLHRoaXMuX3Bh''@;'; put 'put ''a29PcHRpb25zPUwsdGhpcy5tZXRhPXt9fWYubWFnaWM9IlxiXDAiLGQuaW5oZXJpdHMoQSx2KSxBLnByb3RvdHlwZS5wcm9jZXNzQ2h1bms9ZnVuY3Rpb24oSSl7dGhpcy5tZXRhPUkubWV0YSxudWxsPT09dGhpcy5fcGFrbyYmdGhpcy5fY3JlYXRlUGFrbygpLHRoaXMuX3Bha28ucHVzaChk''@;'; put 'put ''LnRyYW5zZm9ybVRvKF8sSS5kYXRhKSwhMSl9LEEucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7di5wcm90b3R5cGUuZmx1c2guY2FsbCh0aGlzKSxudWxsPT09dGhpcy5fcGFrbyYmdGhpcy5fY3JlYXRlUGFrbygpLHRoaXMuX3Bha28ucHVzaChbXSwhMCl9LEEucHJvdG90eXBlLmNsZWFu''@;'; put 'put ''VXA9ZnVuY3Rpb24oKXt2LnByb3RvdHlwZS5jbGVhblVwLmNhbGwodGhpcyksdGhpcy5fcGFrbz1udWxsfSxBLnByb3RvdHlwZS5fY3JlYXRlUGFrbz1mdW5jdGlvbigpe3RoaXMuX3Bha289bmV3IHBbdGhpcy5fcGFrb0FjdGlvbl0oe3JhdzohMCxsZXZlbDp0aGlzLl9wYWtvT3B0aW9ucy5s''@;'; put 'put ''ZXZlbHx8LTF9KTt2YXIgST10aGlzO3RoaXMuX3Bha28ub25EYXRhPWZ1bmN0aW9uKEwpe0kucHVzaCh7ZGF0YTpMLG1ldGE6SS5tZXRhfSl9fSxmLmNvbXByZXNzV29ya2VyPWZ1bmN0aW9uKEkpe3JldHVybiBuZXcgQSgiRGVmbGF0ZSIsSSl9LGYudW5jb21wcmVzc1dvcmtlcj1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBuZXcgQSgiSW5mbGF0ZSIse30pfX0seyIuL3N0cmVhbS9HZW5lcmljV29ya2VyIjoyOCwiLi91dGlscyI6MzIscGFrbzozOH1dLDg6W2Z1bmN0aW9uKGksaCxmKXtmdW5jdGlvbiB1KE4sUCl7dmFyIEIsJD0iIjtmb3IoQj0wO0I8UDtCKyspJCs9U3RyaW5nLmZyb21DaGFy''@;'; put 'put ''Q29kZSgyNTUmTiksTj4+Pj04O3JldHVybiAkfWZ1bmN0aW9uIHAoTixQLEIsJCxELHgpe3ZhciBNLGosYz1OLmZpbGUsbT1OLmNvbXByZXNzaW9uLGc9eCE9PV8udXRmOGVuY29kZSx5PWQudHJhbnNmb3JtVG8oInN0cmluZyIseChjLm5hbWUpKSx3PWQudHJhbnNmb3JtVG8oInN0cmluZyIs''@;'; put 'put ''Xy51dGY4ZW5jb2RlKGMubmFtZSkpLGs9Yy5jb21tZW50LE89ZC50cmFuc2Zvcm1Ubygic3RyaW5nIix4KGspKSx6PWQudHJhbnNmb3JtVG8oInN0cmluZyIsXy51dGY4ZW5jb2RlKGspKSxVPXcubGVuZ3RoIT09Yy5uYW1lLmxlbmd0aCxWPXoubGVuZ3RoIT09ay5sZW5ndGgsUj0iIixIPSIi''@;'; put 'put ''LFQ9IiIsQz1jLmRpcixGPWMuZGF0ZSxxPXtjcmMzMjowLGNvbXByZXNzZWRTaXplOjAsdW5jb21wcmVzc2VkU2l6ZTowfTtQJiYhQnx8KHEuY3JjMzI9Ti5jcmMzMixxLmNvbXByZXNzZWRTaXplPU4uY29tcHJlc3NlZFNpemUscS51bmNvbXByZXNzZWRTaXplPU4udW5jb21wcmVzc2VkU2l6''@;'; put 'put ''ZSk7dmFyIFk9MDtQJiYoWXw9OCksZ3x8IVUmJiFWfHwoWXw9MjA0OCk7dmFyIHR0LFEsWD0wLEs9MDtDJiYoWHw9MTYpLCJVTklYIj09PUQ/KEs9Nzk4LFh8PShRPXR0PWMudW5peFBlcm1pc3Npb25zLHR0fHwoUT1DPzE2ODkzOjMzMjA0KSwoNjU1MzUmUSk8PDE2KSk6KEs9MjAsWHw9ZnVu''@;'; put 'put ''Y3Rpb24odHQpe3JldHVybiA2MyYodHR8fDApfShjLmRvc1Blcm1pc3Npb25zKSksTT1GLmdldFVUQ0hvdXJzKCksTTw8PTYsTXw9Ri5nZXRVVENNaW51dGVzKCksTTw8PTUsTXw9Ri5nZXRVVENTZWNvbmRzKCkvMixqPUYuZ2V0VVRDRnVsbFllYXIoKS0xOTgwLGo8PD00LGp8PUYuZ2V0VVRD''@;'; put 'put ''TW9udGgoKSsxLGo8PD01LGp8PUYuZ2V0VVRDRGF0ZSgpLFUmJihIPXUoMSwxKSt1KEEoeSksNCkrdyxSKz0idXAiK3UoSC5sZW5ndGgsMikrSCksViYmKFQ9dSgxLDEpK3UoQShPKSw0KSt6LFIrPSJ1YyIrdShULmxlbmd0aCwyKStUKTt2YXIgcnQ9IiI7cmV0dXJuIHJ0Kz0iXG5cMCIscnQr''@;'; put 'put ''PXUoWSwyKSxydCs9bS5tYWdpYyxydCs9dShNLDIpLHJ0Kz11KGosMikscnQrPXUocS5jcmMzMiw0KSxydCs9dShxLmNvbXByZXNzZWRTaXplLDQpLHJ0Kz11KHEudW5jb21wcmVzc2VkU2l6ZSw0KSxydCs9dSh5Lmxlbmd0aCwyKSxydCs9dShSLmxlbmd0aCwyKSx7ZmlsZVJlY29yZDpJLkxP''@;'; put 'put ''Q0FMX0ZJTEVfSEVBREVSK3J0K3krUixkaXJSZWNvcmQ6SS5DRU5UUkFMX0ZJTEVfSEVBREVSK3UoSywyKStydCt1KE8ubGVuZ3RoLDIpKyJcMFwwXDBcMCIrdShYLDQpK3UoJCw0KSt5K1IrT319dmFyIGQ9aSgiLi4vdXRpbHMiKSx2PWkoIi4uL3N0cmVhbS9HZW5lcmljV29ya2VyIiksXz1p''@;'; put 'put ''KCIuLi91dGY4IiksQT1pKCIuLi9jcmMzMiIpLEk9aSgiLi4vc2lnbmF0dXJlIik7ZnVuY3Rpb24gTChOLFAsQiwkKXt2LmNhbGwodGhpcywiWmlwRmlsZVdvcmtlciIpLHRoaXMuYnl0ZXNXcml0dGVuPTAsdGhpcy56aXBDb21tZW50PVAsdGhpcy56aXBQbGF0Zm9ybT1CLHRoaXMuZW5jb2Rl''@;'; put 'put ''RmlsZU5hbWU9JCx0aGlzLnN0cmVhbUZpbGVzPU4sdGhpcy5hY2N1bXVsYXRlPSExLHRoaXMuY29udGVudEJ1ZmZlcj1bXSx0aGlzLmRpclJlY29yZHM9W10sdGhpcy5jdXJyZW50U291cmNlT2Zmc2V0PTAsdGhpcy5lbnRyaWVzQ291bnQ9MCx0aGlzLmN1cnJlbnRGaWxlPW51bGwsdGhpcy5f''@;'; put 'put ''c291cmNlcz1bXX1kLmluaGVyaXRzKEwsdiksTC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihOKXt2YXIgUD1OLm1ldGEucGVyY2VudHx8MCxCPXRoaXMuZW50cmllc0NvdW50LCQ9dGhpcy5fc291cmNlcy5sZW5ndGg7dGhpcy5hY2N1bXVsYXRlP3RoaXMuY29udGVudEJ1ZmZlci5wdXNoKE4p''@;'; put 'put ''Oih0aGlzLmJ5dGVzV3JpdHRlbis9Ti5kYXRhLmxlbmd0aCx2LnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyx7ZGF0YTpOLmRhdGEsbWV0YTp7Y3VycmVudEZpbGU6dGhpcy5jdXJyZW50RmlsZSxwZXJjZW50OkI/KFArMTAwKihCLSQtMSkpL0I6MTAwfX0pKX0sTC5wcm90b3R5cGUub3BlbmVk''@;'; put 'put ''U291cmNlPWZ1bmN0aW9uKE4pe3RoaXMuY3VycmVudFNvdXJjZU9mZnNldD10aGlzLmJ5dGVzV3JpdHRlbix0aGlzLmN1cnJlbnRGaWxlPU4uZmlsZS5uYW1lO3ZhciBQPXRoaXMuc3RyZWFtRmlsZXMmJiFOLmZpbGUuZGlyO2lmKFApe3ZhciBCPXAoTixQLCExLHRoaXMuY3VycmVudFNvdXJj''@;'; put 'put ''ZU9mZnNldCx0aGlzLnppcFBsYXRmb3JtLHRoaXMuZW5jb2RlRmlsZU5hbWUpO3RoaXMucHVzaCh7ZGF0YTpCLmZpbGVSZWNvcmQsbWV0YTp7cGVyY2VudDowfX0pfWVsc2UgdGhpcy5hY2N1bXVsYXRlPSEwfSxMLnByb3RvdHlwZS5jbG9zZWRTb3VyY2U9ZnVuY3Rpb24oTil7dGhpcy5hY2N1''@;'; put 'put ''bXVsYXRlPSExO3ZhciAkLFA9dGhpcy5zdHJlYW1GaWxlcyYmIU4uZmlsZS5kaXIsQj1wKE4sUCwhMCx0aGlzLmN1cnJlbnRTb3VyY2VPZmZzZXQsdGhpcy56aXBQbGF0Zm9ybSx0aGlzLmVuY29kZUZpbGVOYW1lKTtpZih0aGlzLmRpclJlY29yZHMucHVzaChCLmRpclJlY29yZCksUCl0aGlz''@;'; put 'put ''LnB1c2goe2RhdGE6KCQ9TixJLkRBVEFfREVTQ1JJUFRPUit1KCQuY3JjMzIsNCkrdSgkLmNvbXByZXNzZWRTaXplLDQpK3UoJC51bmNvbXByZXNzZWRTaXplLDQpKSxtZXRhOntwZXJjZW50OjEwMH19KTtlbHNlIGZvcih0aGlzLnB1c2goe2RhdGE6Qi5maWxlUmVjb3JkLG1ldGE6e3BlcmNl''@;'; put 'put ''bnQ6MH19KTt0aGlzLmNvbnRlbnRCdWZmZXIubGVuZ3RoOyl0aGlzLnB1c2godGhpcy5jb250ZW50QnVmZmVyLnNoaWZ0KCkpO3RoaXMuY3VycmVudEZpbGU9bnVsbH0sTC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIE49dGhpcy5ieXRlc1dyaXR0ZW4sUD0wO1A8dGhpcy5k''@;'; put 'put ''aXJSZWNvcmRzLmxlbmd0aDtQKyspdGhpcy5wdXNoKHtkYXRhOnRoaXMuZGlyUmVjb3Jkc1tQXSxtZXRhOntwZXJjZW50OjEwMH19KTt2YXIgRCx4LE0sbSwkPShEPXRoaXMuZGlyUmVjb3Jkcy5sZW5ndGgseD10aGlzLmJ5dGVzV3JpdHRlbi1OLE09TixtPWQudHJhbnNmb3JtVG8oInN0cmlu''@;'; put 'put ''ZyIsKDAsdGhpcy5lbmNvZGVGaWxlTmFtZSkodGhpcy56aXBDb21tZW50KSksSS5DRU5UUkFMX0RJUkVDVE9SWV9FTkQrIlwwXDBcMFwwIit1KEQsMikrdShELDIpK3UoeCw0KSt1KE0sNCkrdShtLmxlbmd0aCwyKSttKTt0aGlzLnB1c2goe2RhdGE6JCxtZXRhOntwZXJjZW50OjEwMH19KX0s''@;'; put 'put ''TC5wcm90b3R5cGUucHJlcGFyZU5leHRTb3VyY2U9ZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXRoaXMuX3NvdXJjZXMuc2hpZnQoKSx0aGlzLm9wZW5lZFNvdXJjZSh0aGlzLnByZXZpb3VzLnN0cmVhbUluZm8pLHRoaXMuaXNQYXVzZWQ/dGhpcy5wcmV2aW91cy5wYXVzZSgpOnRoaXMucHJl''@;'; put 'put ''dmlvdXMucmVzdW1lKCl9LEwucHJvdG90eXBlLnJlZ2lzdGVyUHJldmlvdXM9ZnVuY3Rpb24oTil7dGhpcy5fc291cmNlcy5wdXNoKE4pO3ZhciBQPXRoaXM7cmV0dXJuIE4ub24oImRhdGEiLGZ1bmN0aW9uKEIpe1AucHJvY2Vzc0NodW5rKEIpfSksTi5vbigiZW5kIixmdW5jdGlvbigpe1Au''@;'; put 'put ''Y2xvc2VkU291cmNlKFAucHJldmlvdXMuc3RyZWFtSW5mbyksUC5fc291cmNlcy5sZW5ndGg/UC5wcmVwYXJlTmV4dFNvdXJjZSgpOlAuZW5kKCl9KSxOLm9uKCJlcnJvciIsZnVuY3Rpb24oQil7UC5lcnJvcihCKX0pLHRoaXN9LEwucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biEhdi5wcm90b3R5cGUucmVzdW1lLmNhbGwodGhpcykmJighdGhpcy5wcmV2aW91cyYmdGhpcy5fc291cmNlcy5sZW5ndGg/KHRoaXMucHJlcGFyZU5leHRTb3VyY2UoKSwhMCk6dGhpcy5wcmV2aW91c3x8dGhpcy5fc291cmNlcy5sZW5ndGh8fHRoaXMuZ2VuZXJhdGVkRXJyb3I/dm9pZCAw''@;'; put 'put ''Oih0aGlzLmVuZCgpLCEwKSl9LEwucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKE4pe3ZhciBQPXRoaXMuX3NvdXJjZXM7aWYoIXYucHJvdG90eXBlLmVycm9yLmNhbGwodGhpcyxOKSlyZXR1cm4hMTtmb3IodmFyIEI9MDtCPFAubGVuZ3RoO0IrKyl0cnl7UFtCXS5lcnJvcihOKX1jYXRjaHt9''@;'; put 'put ''cmV0dXJuITB9LEwucHJvdG90eXBlLmxvY2s9ZnVuY3Rpb24oKXt2LnByb3RvdHlwZS5sb2NrLmNhbGwodGhpcyk7Zm9yKHZhciBOPXRoaXMuX3NvdXJjZXMsUD0wO1A8Ti5sZW5ndGg7UCsrKU5bUF0ubG9jaygpfSxoLmV4cG9ydHM9TH0seyIuLi9jcmMzMiI6NCwiLi4vc2lnbmF0dXJlIjoy''@;'; put 'put ''MywiLi4vc3RyZWFtL0dlbmVyaWNXb3JrZXIiOjI4LCIuLi91dGY4IjozMSwiLi4vdXRpbHMiOjMyfV0sOTpbZnVuY3Rpb24oaSxoLGYpe3ZhciB1PWkoIi4uL2NvbXByZXNzaW9ucyIpLHA9aSgiLi9aaXBGaWxlV29ya2VyIik7Zi5nZW5lcmF0ZVdvcmtlcj1mdW5jdGlvbihkLHYsXyl7dmFy''@;'; put 'put ''IEE9bmV3IHAodi5zdHJlYW1GaWxlcyxfLHYucGxhdGZvcm0sdi5lbmNvZGVGaWxlTmFtZSksST0wO3RyeXtkLmZvckVhY2goZnVuY3Rpb24oTCxOKXtJKys7dmFyIFA9ZnVuY3Rpb24oeCxNKXt2YXIgaj14fHxNLGM9dVtqXTtpZighYyl0aHJvdyBuZXcgRXJyb3IoaisiIGlzIG5vdCBhIHZh''@;'; put 'put ''bGlkIGNvbXByZXNzaW9uIG1ldGhvZCAhIik7cmV0dXJuIGN9KE4ub3B0aW9ucy5jb21wcmVzc2lvbix2LmNvbXByZXNzaW9uKSwkPU4uZGlyLEQ9Ti5kYXRlO04uX2NvbXByZXNzV29ya2VyKFAsTi5vcHRpb25zLmNvbXByZXNzaW9uT3B0aW9uc3x8di5jb21wcmVzc2lvbk9wdGlvbnN8fHt9''@;'; put 'put ''KS53aXRoU3RyZWFtSW5mbygiZmlsZSIse25hbWU6TCxkaXI6JCxkYXRlOkQsY29tbWVudDpOLmNvbW1lbnR8fCIiLHVuaXhQZXJtaXNzaW9uczpOLnVuaXhQZXJtaXNzaW9ucyxkb3NQZXJtaXNzaW9uczpOLmRvc1Blcm1pc3Npb25zfSkucGlwZShBKX0pLEEuZW50cmllc0NvdW50PUl9Y2F0''@;'; put 'put ''Y2goTCl7QS5lcnJvcihMKX1yZXR1cm4gQX19LHsiLi4vY29tcHJlc3Npb25zIjozLCIuL1ppcEZpbGVXb3JrZXIiOjh9XSwxMDpbZnVuY3Rpb24oaSxoLGYpe2Z1bmN0aW9uIHUoKXtpZighKHRoaXMgaW5zdGFuY2VvZiB1KSlyZXR1cm4gbmV3IHU7aWYoYXJndW1lbnRzLmxlbmd0aCl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIlRoZSBjb25zdHJ1Y3RvciB3aXRoIHBhcmFtZXRlcnMgaGFzIGJlZW4gcmVtb3ZlZCBpbiBKU1ppcCAzLjAsIHBsZWFzZSBjaGVjayB0aGUgdXBncmFkZSBndWlkZS4iKTt0aGlzLmZpbGVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5jb21tZW50PW51bGwsdGhpcy5y''@;'; put 'put ''b290PSIiLHRoaXMuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdTtmb3IodmFyIGQgaW4gdGhpcykiZnVuY3Rpb24iIT10eXBlb2YgdGhpc1tkXSYmKHBbZF09dGhpc1tkXSk7cmV0dXJuIHB9fSh1LnByb3RvdHlwZT1pKCIuL29iamVjdCIpKS5sb2FkQXN5bmM9aSgiLi9sb2FkIiksdS5z''@;'; put 'put ''dXBwb3J0PWkoIi4vc3VwcG9ydCIpLHUuZGVmYXVsdHM9aSgiLi9kZWZhdWx0cyIpLHUudmVyc2lvbj0iMy4xMC4xIix1LmxvYWRBc3luYz1mdW5jdGlvbihwLGQpe3JldHVybihuZXcgdSkubG9hZEFzeW5jKHAsZCl9LHUuZXh0ZXJuYWw9aSgiLi9leHRlcm5hbCIpLGguZXhwb3J0cz11fSx7''@;'; put 'put ''Ii4vZGVmYXVsdHMiOjUsIi4vZXh0ZXJuYWwiOjYsIi4vbG9hZCI6MTEsIi4vb2JqZWN0IjoxNSwiLi9zdXBwb3J0IjozMH1dLDExOltmdW5jdGlvbihpLGgsZil7dmFyIHU9aSgiLi91dGlscyIpLHA9aSgiLi9leHRlcm5hbCIpLGQ9aSgiLi91dGY4Iiksdj1pKCIuL3ppcEVudHJpZXMiKSxf''@;'; put 'put ''PWkoIi4vc3RyZWFtL0NyYzMyUHJvYmUiKSxBPWkoIi4vbm9kZWpzVXRpbHMiKTtmdW5jdGlvbiBJKEwpe3JldHVybiBuZXcgcC5Qcm9taXNlKGZ1bmN0aW9uKE4sUCl7dmFyIEI9TC5kZWNvbXByZXNzZWQuZ2V0Q29udGVudFdvcmtlcigpLnBpcGUobmV3IF8pO0Iub24oImVycm9yIixmdW5j''@;'; put 'put ''dGlvbigkKXtQKCQpfSkub24oImVuZCIsZnVuY3Rpb24oKXtCLnN0cmVhbUluZm8uY3JjMzIhPT1MLmRlY29tcHJlc3NlZC5jcmMzMj9QKG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IENSQzMyIG1pc21hdGNoIikpOk4oKX0pLnJlc3VtZSgpfSl9aC5leHBvcnRzPWZ1bmN0aW9uKEwsTil7''@;'; put 'put ''dmFyIFA9dGhpcztyZXR1cm4gTj11LmV4dGVuZChOfHx7fSx7YmFzZTY0OiExLGNoZWNrQ1JDMzI6ITEsb3B0aW1pemVkQmluYXJ5U3RyaW5nOiExLGNyZWF0ZUZvbGRlcnM6ITEsZGVjb2RlRmlsZU5hbWU6ZC51dGY4ZGVjb2RlfSksQS5pc05vZGUmJkEuaXNTdHJlYW0oTCk/cC5Qcm9taXNl''@;'; put 'put ''LnJlamVjdChuZXcgRXJyb3IoIkpTWmlwIGNhbid0IGFjY2VwdCBhIHN0cmVhbSB3aGVuIGxvYWRpbmcgYSB6aXAgZmlsZS4iKSk6dS5wcmVwYXJlQ29udGVudCgidGhlIGxvYWRlZCB6aXAgZmlsZSIsTCwhMCxOLm9wdGltaXplZEJpbmFyeVN0cmluZyxOLmJhc2U2NCkudGhlbihmdW5jdGlv''@;'; put 'put ''bihCKXt2YXIgJD1uZXcgdihOKTtyZXR1cm4gJC5sb2FkKEIpLCR9KS50aGVuKGZ1bmN0aW9uKEIpe3ZhciAkPVtwLlByb21pc2UucmVzb2x2ZShCKV0sRD1CLmZpbGVzO2lmKE4uY2hlY2tDUkMzMilmb3IodmFyIHg9MDt4PEQubGVuZ3RoO3grKykkLnB1c2goSShEW3hdKSk7cmV0dXJuIHAu''@;'; put 'put ''UHJvbWlzZS5hbGwoJCl9KS50aGVuKGZ1bmN0aW9uKEIpe2Zvcih2YXIgJD1CLnNoaWZ0KCksRD0kLmZpbGVzLHg9MDt4PEQubGVuZ3RoO3grKyl7dmFyIE09RFt4XSxqPU0uZmlsZU5hbWVTdHIsYz11LnJlc29sdmUoTS5maWxlTmFtZVN0cik7UC5maWxlKGMsTS5kZWNvbXByZXNzZWQse2Jp''@;'; put 'put ''bmFyeTohMCxvcHRpbWl6ZWRCaW5hcnlTdHJpbmc6ITAsZGF0ZTpNLmRhdGUsZGlyOk0uZGlyLGNvbW1lbnQ6TS5maWxlQ29tbWVudFN0ci5sZW5ndGg/TS5maWxlQ29tbWVudFN0cjpudWxsLHVuaXhQZXJtaXNzaW9uczpNLnVuaXhQZXJtaXNzaW9ucyxkb3NQZXJtaXNzaW9uczpNLmRvc1Bl''@;'; put 'put ''cm1pc3Npb25zLGNyZWF0ZUZvbGRlcnM6Ti5jcmVhdGVGb2xkZXJzfSksTS5kaXJ8fChQLmZpbGUoYykudW5zYWZlT3JpZ2luYWxOYW1lPWopfXJldHVybiAkLnppcENvbW1lbnQubGVuZ3RoJiYoUC5jb21tZW50PSQuemlwQ29tbWVudCksUH0pfX0seyIuL2V4dGVybmFsIjo2LCIuL25vZGVq''@;'; put 'put ''c1V0aWxzIjoxNCwiLi9zdHJlYW0vQ3JjMzJQcm9iZSI6MjUsIi4vdXRmOCI6MzEsIi4vdXRpbHMiOjMyLCIuL3ppcEVudHJpZXMiOjMzfV0sMTI6W2Z1bmN0aW9uKGksaCxmKXt2YXIgdT1pKCIuLi91dGlscyIpLHA9aSgiLi4vc3RyZWFtL0dlbmVyaWNXb3JrZXIiKTtmdW5jdGlvbiBkKHYs''@;'; put 'put ''Xyl7cC5jYWxsKHRoaXMsIk5vZGVqcyBzdHJlYW0gaW5wdXQgYWRhcHRlciBmb3IgIit2KSx0aGlzLl91cHN0cmVhbUVuZGVkPSExLHRoaXMuX2JpbmRTdHJlYW0oXyl9dS5pbmhlcml0cyhkLHApLGQucHJvdG90eXBlLl9iaW5kU3RyZWFtPWZ1bmN0aW9uKHYpe3ZhciBfPXRoaXM7KHRoaXMu''@;'; put 'put ''X3N0cmVhbT12KS5wYXVzZSgpLHYub24oImRhdGEiLGZ1bmN0aW9uKEEpe18ucHVzaCh7ZGF0YTpBLG1ldGE6e3BlcmNlbnQ6MH19KX0pLm9uKCJlcnJvciIsZnVuY3Rpb24oQSl7Xy5pc1BhdXNlZD90aGlzLmdlbmVyYXRlZEVycm9yPUE6Xy5lcnJvcihBKX0pLm9uKCJlbmQiLGZ1bmN0aW9u''@;'; put 'put ''KCl7Xy5pc1BhdXNlZD9fLl91cHN0cmVhbUVuZGVkPSEwOl8uZW5kKCl9KX0sZC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4hIXAucHJvdG90eXBlLnBhdXNlLmNhbGwodGhpcykmJih0aGlzLl9zdHJlYW0ucGF1c2UoKSwhMCl9LGQucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiEhcC5wcm90b3R5cGUucmVzdW1lLmNhbGwodGhpcykmJih0aGlzLl91cHN0cmVhbUVuZGVkP3RoaXMuZW5kKCk6dGhpcy5fc3RyZWFtLnJlc3VtZSgpLCEwKX0saC5leHBvcnRzPWR9LHsiLi4vc3RyZWFtL0dlbmVyaWNXb3JrZXIiOjI4LCIuLi91dGlscyI6MzJ9XSwxMzpb''@;'; put 'put ''ZnVuY3Rpb24oaSxoLGYpe3ZhciB1PWkoInJlYWRhYmxlLXN0cmVhbSIpLlJlYWRhYmxlO2Z1bmN0aW9uIHAoZCx2LF8pe3UuY2FsbCh0aGlzLHYpLHRoaXMuX2hlbHBlcj1kO3ZhciBBPXRoaXM7ZC5vbigiZGF0YSIsZnVuY3Rpb24oSSxMKXtBLnB1c2goSSl8fEEuX2hlbHBlci5wYXVzZSgp''@;'; put 'put ''LF8mJl8oTCl9KS5vbigiZXJyb3IiLGZ1bmN0aW9uKEkpe0EuZW1pdCgiZXJyb3IiLEkpfSkub24oImVuZCIsZnVuY3Rpb24oKXtBLnB1c2gobnVsbCl9KX1pKCIuLi91dGlscyIpLmluaGVyaXRzKHAsdSkscC5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oKXt0aGlzLl9oZWxwZXIucmVzdW1l''@;'; put 'put ''KCl9LGguZXhwb3J0cz1wfSx7Ii4uL3V0aWxzIjozMiwicmVhZGFibGUtc3RyZWFtIjoxNn1dLDE0OltmdW5jdGlvbihpLGgsZil7aC5leHBvcnRzPXtpc05vZGU6dm9pZCAwIT09byxuZXdCdWZmZXJGcm9tOmZ1bmN0aW9uKHUscCl7aWYoby5mcm9tJiZvLmZyb20hPT1VaW50OEFycmF5LmZy''@;'; put 'put ''b20pcmV0dXJuIG8uZnJvbSh1LHApO2lmKCJudW1iZXIiPT10eXBlb2YgdSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm4gbmV3IG8odSxwKX0sYWxsb2NCdWZmZXI6ZnVuY3Rpb24odSl7aWYoby5hbGxvYylyZXR1cm4g''@;'; put 'put ''by5hbGxvYyh1KTt2YXIgcD1uZXcgbyh1KTtyZXR1cm4gcC5maWxsKDApLHB9LGlzQnVmZmVyOmZ1bmN0aW9uKHUpe3JldHVybiBvLmlzQnVmZmVyKHUpfSxpc1N0cmVhbTpmdW5jdGlvbih1KXtyZXR1cm4gdSYmImZ1bmN0aW9uIj09dHlwZW9mIHUub24mJiJmdW5jdGlvbiI9PXR5cGVvZiB1''@;'; put 'put ''LnBhdXNlJiYiZnVuY3Rpb24iPT10eXBlb2YgdS5yZXN1bWV9fX0se31dLDE1OltmdW5jdGlvbihpLGgsZil7ZnVuY3Rpb24gdShjLG0sZyl7dmFyIHkseix3PWQuZ2V0VHlwZU9mKG0pLGs9ZC5leHRlbmQoZ3x8e30sQSk7ay5kYXRlPWsuZGF0ZXx8bmV3IERhdGUsbnVsbCE9PWsuY29tcHJl''@;'; put 'put ''c3Npb24mJihrLmNvbXByZXNzaW9uPWsuY29tcHJlc3Npb24udG9VcHBlckNhc2UoKSksInN0cmluZyI9PXR5cGVvZiBrLnVuaXhQZXJtaXNzaW9ucyYmKGsudW5peFBlcm1pc3Npb25zPXBhcnNlSW50KGsudW5peFBlcm1pc3Npb25zLDgpKSxrLnVuaXhQZXJtaXNzaW9ucyYmMTYzODQmay51''@;'; put 'put ''bml4UGVybWlzc2lvbnMmJihrLmRpcj0hMCksay5kb3NQZXJtaXNzaW9ucyYmMTYmay5kb3NQZXJtaXNzaW9ucyYmKGsuZGlyPSEwKSxrLmRpciYmKGM9RChjKSksay5jcmVhdGVGb2xkZXJzJiYoeT0kKGMpKSYmeC5jYWxsKHRoaXMseSwhMCksZyYmdm9pZCAwIT09Zy5iaW5hcnl8fChrLmJp''@;'; put 'put ''bmFyeT0hKCJzdHJpbmciPT09dyYmITE9PT1rLmJpbmFyeSYmITE9PT1rLmJhc2U2NCkpLChtIGluc3RhbmNlb2YgSSYmMD09PW0udW5jb21wcmVzc2VkU2l6ZXx8ay5kaXJ8fCFtfHwwPT09bS5sZW5ndGgpJiYoay5iYXNlNjQ9ITEsay5iaW5hcnk9ITAsbT0iIixrLmNvbXByZXNzaW9uPSJT''@;'; put 'put ''VE9SRSIsdz0ic3RyaW5nIiksej1tIGluc3RhbmNlb2YgSXx8bSBpbnN0YW5jZW9mIHY/bTpQLmlzTm9kZSYmUC5pc1N0cmVhbShtKT9uZXcgQihjLG0pOmQucHJlcGFyZUNvbnRlbnQoYyxtLGsuYmluYXJ5LGsub3B0aW1pemVkQmluYXJ5U3RyaW5nLGsuYmFzZTY0KTt2YXIgVT1uZXcgTChj''@;'; put 'put ''LHosayk7dGhpcy5maWxlc1tjXT1VfXZhciBwPWkoIi4vdXRmOCIpLGQ9aSgiLi91dGlscyIpLHY9aSgiLi9zdHJlYW0vR2VuZXJpY1dvcmtlciIpLF89aSgiLi9zdHJlYW0vU3RyZWFtSGVscGVyIiksQT1pKCIuL2RlZmF1bHRzIiksST1pKCIuL2NvbXByZXNzZWRPYmplY3QiKSxMPWkoIi4v''@;'; put 'put ''emlwT2JqZWN0IiksTj1pKCIuL2dlbmVyYXRlIiksUD1pKCIuL25vZGVqc1V0aWxzIiksQj1pKCIuL25vZGVqcy9Ob2RlanNTdHJlYW1JbnB1dEFkYXB0ZXIiKSwkPWZ1bmN0aW9uKGMpeyIvIj09PWMuc2xpY2UoLTEpJiYoYz1jLnN1YnN0cmluZygwLGMubGVuZ3RoLTEpKTt2YXIgbT1jLmxh''@;'; put 'put ''c3RJbmRleE9mKCIvIik7cmV0dXJuIDA8bT9jLnN1YnN0cmluZygwLG0pOiIifSxEPWZ1bmN0aW9uKGMpe3JldHVybiIvIiE9PWMuc2xpY2UoLTEpJiYoYys9Ii8iKSxjfSx4PWZ1bmN0aW9uKGMsbSl7cmV0dXJuIG09dm9pZCAwIT09bT9tOkEuY3JlYXRlRm9sZGVycyxjPUQoYyksdGhpcy5m''@;'; put 'put ''aWxlc1tjXXx8dS5jYWxsKHRoaXMsYyxudWxsLHtkaXI6ITAsY3JlYXRlRm9sZGVyczptfSksdGhpcy5maWxlc1tjXX07ZnVuY3Rpb24gTShjKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKX12YXIgaj17bG9hZDpmdW5jdGlvbigp''@;'; put 'put ''e3Rocm93IG5ldyBFcnJvcigiVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVtb3ZlZCBpbiBKU1ppcCAzLjAsIHBsZWFzZSBjaGVjayB0aGUgdXBncmFkZSBndWlkZS4iKX0sZm9yRWFjaDpmdW5jdGlvbihjKXt2YXIgbSxnLHk7Zm9yKG0gaW4gdGhpcy5maWxlcyl5PXRoaXMuZmlsZXNbbV0sKGc9''@;'; put 'put ''bS5zbGljZSh0aGlzLnJvb3QubGVuZ3RoLG0ubGVuZ3RoKSkmJm0uc2xpY2UoMCx0aGlzLnJvb3QubGVuZ3RoKT09PXRoaXMucm9vdCYmYyhnLHkpfSxmaWx0ZXI6ZnVuY3Rpb24oYyl7dmFyIG09W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihnLHkpe2MoZyx5KSYmbS5wdXNoKHkp''@;'; put 'put ''fSksbX0sZmlsZTpmdW5jdGlvbihjLG0sZyl7aWYoMSE9PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHUuY2FsbCh0aGlzLGM9dGhpcy5yb290K2MsbSxnKSx0aGlzO2lmKE0oYykpe3ZhciB5PWM7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGssTyl7cmV0dXJuIU8uZGlyJiZ5LnRlc3Qo''@;'; put 'put ''ayl9KX12YXIgdz10aGlzLmZpbGVzW3RoaXMucm9vdCtjXTtyZXR1cm4gdyYmIXcuZGlyP3c6bnVsbH0sZm9sZGVyOmZ1bmN0aW9uKGMpe2lmKCFjKXJldHVybiB0aGlzO2lmKE0oYykpcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKHcsayl7cmV0dXJuIGsuZGlyJiZjLnRlc3Qodyl9KTt2''@;'; put 'put ''YXIgZz14LmNhbGwodGhpcyx0aGlzLnJvb3QrYykseT10aGlzLmNsb25lKCk7cmV0dXJuIHkucm9vdD1nLm5hbWUseX0scmVtb3ZlOmZ1bmN0aW9uKGMpe3ZhciBtPXRoaXMuZmlsZXNbYz10aGlzLnJvb3QrY107aWYobXx8KCIvIiE9PWMuc2xpY2UoLTEpJiYoYys9Ii8iKSxtPXRoaXMuZmls''@;'; put 'put ''ZXNbY10pLG0mJiFtLmRpcilkZWxldGUgdGhpcy5maWxlc1tjXTtlbHNlIGZvcih2YXIgZz10aGlzLmZpbHRlcihmdW5jdGlvbih3LGspe3JldHVybiBrLm5hbWUuc2xpY2UoMCxjLmxlbmd0aCk9PT1jfSkseT0wO3k8Zy5sZW5ndGg7eSsrKWRlbGV0ZSB0aGlzLmZpbGVzW2dbeV0ubmFtZV07''@;'; put 'put ''cmV0dXJuIHRoaXN9LGdlbmVyYXRlOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW1vdmVkIGluIEpTWmlwIDMuMCwgcGxlYXNlIGNoZWNrIHRoZSB1cGdyYWRlIGd1aWRlLiIpfSxnZW5lcmF0ZUludGVybmFsU3RyZWFtOmZ1bmN0aW9uKGMpe3Zh''@;'; put 'put ''ciBtLGc9e307dHJ5e2lmKChnPWQuZXh0ZW5kKGN8fHt9LHtzdHJlYW1GaWxlczohMSxjb21wcmVzc2lvbjoiU1RPUkUiLGNvbXByZXNzaW9uT3B0aW9uczpudWxsLHR5cGU6IiIscGxhdGZvcm06IkRPUyIsY29tbWVudDpudWxsLG1pbWVUeXBlOiJhcHBsaWNhdGlvbi96aXAiLGVuY29kZUZp''@;'; put 'put ''bGVOYW1lOnAudXRmOGVuY29kZX0pKS50eXBlPWcudHlwZS50b0xvd2VyQ2FzZSgpLGcuY29tcHJlc3Npb249Zy5jb21wcmVzc2lvbi50b1VwcGVyQ2FzZSgpLCJiaW5hcnlzdHJpbmciPT09Zy50eXBlJiYoZy50eXBlPSJzdHJpbmciKSwhZy50eXBlKXRocm93IG5ldyBFcnJvcigiTm8gb3V0''@;'; put 'put ''cHV0IHR5cGUgc3BlY2lmaWVkLiIpO2QuY2hlY2tTdXBwb3J0KGcudHlwZSksImRhcndpbiIhPT1nLnBsYXRmb3JtJiYiZnJlZWJzZCIhPT1nLnBsYXRmb3JtJiYibGludXgiIT09Zy5wbGF0Zm9ybSYmInN1bm9zIiE9PWcucGxhdGZvcm18fChnLnBsYXRmb3JtPSJVTklYIiksIndpbjMyIj09''@;'; put 'put ''PWcucGxhdGZvcm0mJihnLnBsYXRmb3JtPSJET1MiKSxtPU4uZ2VuZXJhdGVXb3JrZXIodGhpcyxnLGcuY29tbWVudHx8dGhpcy5jb21tZW50fHwiIil9Y2F0Y2godyl7KG09bmV3IHYoImVycm9yIikpLmVycm9yKHcpfXJldHVybiBuZXcgXyhtLGcudHlwZXx8InN0cmluZyIsZy5taW1lVHlw''@;'; put 'put ''ZSl9LGdlbmVyYXRlQXN5bmM6ZnVuY3Rpb24oYyxtKXtyZXR1cm4gdGhpcy5nZW5lcmF0ZUludGVybmFsU3RyZWFtKGMpLmFjY3VtdWxhdGUobSl9LGdlbmVyYXRlTm9kZVN0cmVhbTpmdW5jdGlvbihjLG0pe3JldHVybihjPWN8fHt9KS50eXBlfHwoYy50eXBlPSJub2RlYnVmZmVyIiksdGhp''@;'; put 'put ''cy5nZW5lcmF0ZUludGVybmFsU3RyZWFtKGMpLnRvTm9kZWpzU3RyZWFtKG0pfX07aC5leHBvcnRzPWp9LHsiLi9jb21wcmVzc2VkT2JqZWN0IjoyLCIuL2RlZmF1bHRzIjo1LCIuL2dlbmVyYXRlIjo5LCIuL25vZGVqcy9Ob2RlanNTdHJlYW1JbnB1dEFkYXB0ZXIiOjEyLCIuL25vZGVqc1V0''@;'; put 'put ''aWxzIjoxNCwiLi9zdHJlYW0vR2VuZXJpY1dvcmtlciI6MjgsIi4vc3RyZWFtL1N0cmVhbUhlbHBlciI6MjksIi4vdXRmOCI6MzEsIi4vdXRpbHMiOjMyLCIuL3ppcE9iamVjdCI6MzV9XSwxNjpbZnVuY3Rpb24oaSxoLGYpe2guZXhwb3J0cz1pKCJzdHJlYW0iKX0se3N0cmVhbTp2b2lkIDB9''@;'; put 'put ''XSwxNzpbZnVuY3Rpb24oaSxoLGYpe3ZhciB1PWkoIi4vRGF0YVJlYWRlciIpO2Z1bmN0aW9uIHAoZCl7dS5jYWxsKHRoaXMsZCk7Zm9yKHZhciB2PTA7djx0aGlzLmRhdGEubGVuZ3RoO3YrKylkW3ZdPTI1NSZkW3ZdfWkoIi4uL3V0aWxzIikuaW5oZXJpdHMocCx1KSxwLnByb3RvdHlwZS5i''@;'; put 'put ''eXRlQXQ9ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuZGF0YVt0aGlzLnplcm8rZF19LHAucHJvdG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKGQpe2Zvcih2YXIgdj1kLmNoYXJDb2RlQXQoMCksXz1kLmNoYXJDb2RlQXQoMSksQT1kLmNoYXJDb2RlQXQoMiksST1kLmNoYXJD''@;'; put 'put ''b2RlQXQoMyksTD10aGlzLmxlbmd0aC00OzA8PUw7LS1MKWlmKHRoaXMuZGF0YVtMXT09PXYmJnRoaXMuZGF0YVtMKzFdPT09XyYmdGhpcy5kYXRhW0wrMl09PT1BJiZ0aGlzLmRhdGFbTCszXT09PUkpcmV0dXJuIEwtdGhpcy56ZXJvO3JldHVybi0xfSxwLnByb3RvdHlwZS5yZWFkQW5kQ2hl''@;'; put 'put ''Y2tTaWduYXR1cmU9ZnVuY3Rpb24oZCl7dmFyIHY9ZC5jaGFyQ29kZUF0KDApLF89ZC5jaGFyQ29kZUF0KDEpLEE9ZC5jaGFyQ29kZUF0KDIpLEk9ZC5jaGFyQ29kZUF0KDMpLEw9dGhpcy5yZWFkRGF0YSg0KTtyZXR1cm4gdj09PUxbMF0mJl89PT1MWzFdJiZBPT09TFsyXSYmST09PUxbM119''@;'; put 'put ''LHAucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKGQpe2lmKHRoaXMuY2hlY2tPZmZzZXQoZCksMD09PWQpcmV0dXJuW107dmFyIHY9dGhpcy5kYXRhLnNsaWNlKHRoaXMuemVybyt0aGlzLmluZGV4LHRoaXMuemVybyt0aGlzLmluZGV4K2QpO3JldHVybiB0aGlzLmluZGV4Kz1kLHZ9LGgu''@;'; put 'put ''ZXhwb3J0cz1wfSx7Ii4uL3V0aWxzIjozMiwiLi9EYXRhUmVhZGVyIjoxOH1dLDE4OltmdW5jdGlvbihpLGgsZil7dmFyIHU9aSgiLi4vdXRpbHMiKTtmdW5jdGlvbiBwKGQpe3RoaXMuZGF0YT1kLHRoaXMubGVuZ3RoPWQubGVuZ3RoLHRoaXMuaW5kZXg9MCx0aGlzLnplcm89MH1wLnByb3Rv''@;'; put 'put ''dHlwZT17Y2hlY2tPZmZzZXQ6ZnVuY3Rpb24oZCl7dGhpcy5jaGVja0luZGV4KHRoaXMuaW5kZXgrZCl9LGNoZWNrSW5kZXg6ZnVuY3Rpb24oZCl7aWYodGhpcy5sZW5ndGg8dGhpcy56ZXJvK2R8fGQ8MCl0aHJvdyBuZXcgRXJyb3IoIkVuZCBvZiBkYXRhIHJlYWNoZWQgKGRhdGEgbGVuZ3Ro''@;'; put 'put ''ID0gIit0aGlzLmxlbmd0aCsiLCBhc2tlZCBpbmRleCA9ICIrZCsiKS4gQ29ycnVwdGVkIHppcCA/Iil9LHNldEluZGV4OmZ1bmN0aW9uKGQpe3RoaXMuY2hlY2tJbmRleChkKSx0aGlzLmluZGV4PWR9LHNraXA6ZnVuY3Rpb24oZCl7dGhpcy5zZXRJbmRleCh0aGlzLmluZGV4K2QpfSxieXRl''@;'; put 'put ''QXQ6ZnVuY3Rpb24oKXt9LHJlYWRJbnQ6ZnVuY3Rpb24oZCl7dmFyIHYsXz0wO2Zvcih0aGlzLmNoZWNrT2Zmc2V0KGQpLHY9dGhpcy5pbmRleCtkLTE7dj49dGhpcy5pbmRleDt2LS0pXz0oXzw8OCkrdGhpcy5ieXRlQXQodik7cmV0dXJuIHRoaXMuaW5kZXgrPWQsX30scmVhZFN0cmluZzpm''@;'; put 'put ''dW5jdGlvbihkKXtyZXR1cm4gdS50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLnJlYWREYXRhKGQpKX0scmVhZERhdGE6ZnVuY3Rpb24oKXt9LGxhc3RJbmRleE9mU2lnbmF0dXJlOmZ1bmN0aW9uKCl7fSxyZWFkQW5kQ2hlY2tTaWduYXR1cmU6ZnVuY3Rpb24oKXt9LHJlYWREYXRlOmZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIGQ9dGhpcy5yZWFkSW50KDQpO3JldHVybiBuZXcgRGF0ZShEYXRlLlVUQygxOTgwKyhkPj4yNSYxMjcpLChkPj4yMSYxNSktMSxkPj4xNiYzMSxkPj4xMSYzMSxkPj41JjYzLCgzMSZkKTw8MSkpfX0saC5leHBvcnRzPXB9LHsiLi4vdXRpbHMiOjMyfV0sMTk6W2Z1bmN0aW9u''@;'; put 'put ''KGksaCxmKXt2YXIgdT1pKCIuL1VpbnQ4QXJyYXlSZWFkZXIiKTtmdW5jdGlvbiBwKGQpe3UuY2FsbCh0aGlzLGQpfWkoIi4uL3V0aWxzIikuaW5oZXJpdHMocCx1KSxwLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihkKXt0aGlzLmNoZWNrT2Zmc2V0KGQpO3ZhciB2PXRoaXMuZGF0YS5z''@;'; put 'put ''bGljZSh0aGlzLnplcm8rdGhpcy5pbmRleCx0aGlzLnplcm8rdGhpcy5pbmRleCtkKTtyZXR1cm4gdGhpcy5pbmRleCs9ZCx2fSxoLmV4cG9ydHM9cH0seyIuLi91dGlscyI6MzIsIi4vVWludDhBcnJheVJlYWRlciI6MjF9XSwyMDpbZnVuY3Rpb24oaSxoLGYpe3ZhciB1PWkoIi4vRGF0YVJl''@;'; put 'put ''YWRlciIpO2Z1bmN0aW9uIHAoZCl7dS5jYWxsKHRoaXMsZCl9aSgiLi4vdXRpbHMiKS5pbmhlcml0cyhwLHUpLHAucHJvdG90eXBlLmJ5dGVBdD1mdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy56ZXJvK2QpfSxwLnByb3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25h''@;'; put 'put ''dHVyZT1mdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5kYXRhLmxhc3RJbmRleE9mKGQpLXRoaXMuemVyb30scC5wcm90b3R5cGUucmVhZEFuZENoZWNrU2lnbmF0dXJlPWZ1bmN0aW9uKGQpe3JldHVybiBkPT09dGhpcy5yZWFkRGF0YSg0KX0scC5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24o''@;'; put 'put ''ZCl7dGhpcy5jaGVja09mZnNldChkKTt2YXIgdj10aGlzLmRhdGEuc2xpY2UodGhpcy56ZXJvK3RoaXMuaW5kZXgsdGhpcy56ZXJvK3RoaXMuaW5kZXgrZCk7cmV0dXJuIHRoaXMuaW5kZXgrPWQsdn0saC5leHBvcnRzPXB9LHsiLi4vdXRpbHMiOjMyLCIuL0RhdGFSZWFkZXIiOjE4fV0sMjE6''@;'; put 'put ''W2Z1bmN0aW9uKGksaCxmKXt2YXIgdT1pKCIuL0FycmF5UmVhZGVyIik7ZnVuY3Rpb24gcChkKXt1LmNhbGwodGhpcyxkKX1pKCIuLi91dGlscyIpLmluaGVyaXRzKHAsdSkscC5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oZCl7aWYodGhpcy5jaGVja09mZnNldChkKSwwPT09ZClyZXR1''@;'; put 'put ''cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIHY9dGhpcy5kYXRhLnN1YmFycmF5KHRoaXMuemVybyt0aGlzLmluZGV4LHRoaXMuemVybyt0aGlzLmluZGV4K2QpO3JldHVybiB0aGlzLmluZGV4Kz1kLHZ9LGguZXhwb3J0cz1wfSx7Ii4uL3V0aWxzIjozMiwiLi9BcnJheVJlYWRlciI6MTd9XSwy''@;'; put 'put ''MjpbZnVuY3Rpb24oaSxoLGYpe3ZhciB1PWkoIi4uL3V0aWxzIikscD1pKCIuLi9zdXBwb3J0IiksZD1pKCIuL0FycmF5UmVhZGVyIiksdj1pKCIuL1N0cmluZ1JlYWRlciIpLF89aSgiLi9Ob2RlQnVmZmVyUmVhZGVyIiksQT1pKCIuL1VpbnQ4QXJyYXlSZWFkZXIiKTtoLmV4cG9ydHM9ZnVu''@;'; put 'put ''Y3Rpb24oSSl7dmFyIEw9dS5nZXRUeXBlT2YoSSk7cmV0dXJuIHUuY2hlY2tTdXBwb3J0KEwpLCJzdHJpbmciIT09THx8cC51aW50OGFycmF5PyJub2RlYnVmZmVyIj09PUw/bmV3IF8oSSk6cC51aW50OGFycmF5P25ldyBBKHUudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLEkpKTpuZXcgZCh1''@;'; put 'put ''LnRyYW5zZm9ybVRvKCJhcnJheSIsSSkpOm5ldyB2KEkpfX0seyIuLi9zdXBwb3J0IjozMCwiLi4vdXRpbHMiOjMyLCIuL0FycmF5UmVhZGVyIjoxNywiLi9Ob2RlQnVmZmVyUmVhZGVyIjoxOSwiLi9TdHJpbmdSZWFkZXIiOjIwLCIuL1VpbnQ4QXJyYXlSZWFkZXIiOjIxfV0sMjM6W2Z1bmN0''@;'; put 'put ''aW9uKGksaCxmKXtmLkxPQ0FMX0ZJTEVfSEVBREVSPSJQS1x4MDNceDA0IixmLkNFTlRSQUxfRklMRV9IRUFERVI9IlBLXHgwMVx4MDIiLGYuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPSJQS1x4MDVceDA2IixmLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1I9IlBLXHgwNlx4MDciLGYu''@;'; put 'put ''WklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPSJQS1x4MDZceDA2IixmLkRBVEFfREVTQ1JJUFRPUj0iUEtceDA3XGIifSx7fV0sMjQ6W2Z1bmN0aW9uKGksaCxmKXt2YXIgdT1pKCIuL0dlbmVyaWNXb3JrZXIiKSxwPWkoIi4uL3V0aWxzIik7ZnVuY3Rpb24gZCh2KXt1LmNhbGwodGhpcywi''@;'; put 'put ''Q29udmVydFdvcmtlciB0byAiK3YpLHRoaXMuZGVzdFR5cGU9dn1wLmluaGVyaXRzKGQsdSksZC5wcm90b3R5cGUucHJvY2Vzc0NodW5rPWZ1bmN0aW9uKHYpe3RoaXMucHVzaCh7ZGF0YTpwLnRyYW5zZm9ybVRvKHRoaXMuZGVzdFR5cGUsdi5kYXRhKSxtZXRhOnYubWV0YX0pfSxoLmV4cG9y''@;'; put 'put ''dHM9ZH0seyIuLi91dGlscyI6MzIsIi4vR2VuZXJpY1dvcmtlciI6Mjh9XSwyNTpbZnVuY3Rpb24oaSxoLGYpe3ZhciB1PWkoIi4vR2VuZXJpY1dvcmtlciIpLHA9aSgiLi4vY3JjMzIiKTtmdW5jdGlvbiBkKCl7dS5jYWxsKHRoaXMsIkNyYzMyUHJvYmUiKSx0aGlzLndpdGhTdHJlYW1JbmZv''@;'; put 'put ''KCJjcmMzMiIsMCl9aSgiLi4vdXRpbHMiKS5pbmhlcml0cyhkLHUpLGQucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbih2KXt0aGlzLnN0cmVhbUluZm8uY3JjMzI9cCh2LmRhdGEsdGhpcy5zdHJlYW1JbmZvLmNyYzMyfHwwKSx0aGlzLnB1c2godil9LGguZXhwb3J0cz1kfSx7Ii4u''@;'; put 'put ''L2NyYzMyIjo0LCIuLi91dGlscyI6MzIsIi4vR2VuZXJpY1dvcmtlciI6Mjh9XSwyNjpbZnVuY3Rpb24oaSxoLGYpe3ZhciB1PWkoIi4uL3V0aWxzIikscD1pKCIuL0dlbmVyaWNXb3JrZXIiKTtmdW5jdGlvbiBkKHYpe3AuY2FsbCh0aGlzLCJEYXRhTGVuZ3RoUHJvYmUgZm9yICIrdiksdGhp''@;'; put 'put ''cy5wcm9wTmFtZT12LHRoaXMud2l0aFN0cmVhbUluZm8odiwwKX11LmluaGVyaXRzKGQscCksZC5wcm90b3R5cGUucHJvY2Vzc0NodW5rPWZ1bmN0aW9uKHYpe3YmJih0aGlzLnN0cmVhbUluZm9bdGhpcy5wcm9wTmFtZV09KHRoaXMuc3RyZWFtSW5mb1t0aGlzLnByb3BOYW1lXXx8MCkrdi5k''@;'; put 'put ''YXRhLmxlbmd0aCkscC5wcm90b3R5cGUucHJvY2Vzc0NodW5rLmNhbGwodGhpcyx2KX0saC5leHBvcnRzPWR9LHsiLi4vdXRpbHMiOjMyLCIuL0dlbmVyaWNXb3JrZXIiOjI4fV0sMjc6W2Z1bmN0aW9uKGksaCxmKXt2YXIgdT1pKCIuLi91dGlscyIpLHA9aSgiLi9HZW5lcmljV29ya2VyIik7''@;'; put 'put ''ZnVuY3Rpb24gZCh2KXtwLmNhbGwodGhpcywiRGF0YVdvcmtlciIpO3ZhciBfPXRoaXM7dGhpcy5kYXRhSXNSZWFkeT0hMSx0aGlzLmluZGV4PTAsdGhpcy5tYXg9MCx0aGlzLmRhdGE9bnVsbCx0aGlzLnR5cGU9IiIsdGhpcy5fdGlja1NjaGVkdWxlZD0hMSx2LnRoZW4oZnVuY3Rpb24oQSl7''@;'; put 'put ''Xy5kYXRhSXNSZWFkeT0hMCxfLmRhdGE9QSxfLm1heD1BJiZBLmxlbmd0aHx8MCxfLnR5cGU9dS5nZXRUeXBlT2YoQSksXy5pc1BhdXNlZHx8Xy5fdGlja0FuZFJlcGVhdCgpfSxmdW5jdGlvbihBKXtfLmVycm9yKEEpfSl9dS5pbmhlcml0cyhkLHApLGQucHJvdG90eXBlLmNsZWFuVXA9ZnVu''@;'; put 'put ''Y3Rpb24oKXtwLnByb3RvdHlwZS5jbGVhblVwLmNhbGwodGhpcyksdGhpcy5kYXRhPW51bGx9LGQucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3JldHVybiEhcC5wcm90b3R5cGUucmVzdW1lLmNhbGwodGhpcykmJighdGhpcy5fdGlja1NjaGVkdWxlZCYmdGhpcy5kYXRhSXNSZWFkeSYm''@;'; put 'put ''KHRoaXMuX3RpY2tTY2hlZHVsZWQ9ITAsdS5kZWxheSh0aGlzLl90aWNrQW5kUmVwZWF0LFtdLHRoaXMpKSwhMCl9LGQucHJvdG90eXBlLl90aWNrQW5kUmVwZWF0PWZ1bmN0aW9uKCl7dGhpcy5fdGlja1NjaGVkdWxlZD0hMSx0aGlzLmlzUGF1c2VkfHx0aGlzLmlzRmluaXNoZWR8fCh0aGlz''@;'; put 'put ''Ll90aWNrKCksdGhpcy5pc0ZpbmlzaGVkfHwodS5kZWxheSh0aGlzLl90aWNrQW5kUmVwZWF0LFtdLHRoaXMpLHRoaXMuX3RpY2tTY2hlZHVsZWQ9ITApKX0sZC5wcm90b3R5cGUuX3RpY2s9ZnVuY3Rpb24oKXtpZih0aGlzLmlzUGF1c2VkfHx0aGlzLmlzRmluaXNoZWQpcmV0dXJuITE7dmFy''@;'; put 'put ''IHY9bnVsbCxfPU1hdGgubWluKHRoaXMubWF4LHRoaXMuaW5kZXgrMTYzODQpO2lmKHRoaXMuaW5kZXg+PXRoaXMubWF4KXJldHVybiB0aGlzLmVuZCgpO3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2Uic3RyaW5nIjp2PXRoaXMuZGF0YS5zdWJzdHJpbmcodGhpcy5pbmRleCxfKTticmVhaztjYXNl''@;'; put 'put ''InVpbnQ4YXJyYXkiOnY9dGhpcy5kYXRhLnN1YmFycmF5KHRoaXMuaW5kZXgsXyk7YnJlYWs7Y2FzZSJhcnJheSI6Y2FzZSJub2RlYnVmZmVyIjp2PXRoaXMuZGF0YS5zbGljZSh0aGlzLmluZGV4LF8pfXJldHVybiB0aGlzLmluZGV4PV8sdGhpcy5wdXNoKHtkYXRhOnYsbWV0YTp7cGVyY2Vu''@;'; put 'put ''dDp0aGlzLm1heD90aGlzLmluZGV4L3RoaXMubWF4KjEwMDowfX0pfSxoLmV4cG9ydHM9ZH0seyIuLi91dGlscyI6MzIsIi4vR2VuZXJpY1dvcmtlciI6Mjh9XSwyODpbZnVuY3Rpb24oaSxoLGYpe2Z1bmN0aW9uIHUocCl7dGhpcy5uYW1lPXB8fCJkZWZhdWx0Iix0aGlzLnN0cmVhbUluZm89''@;'; put 'put ''e30sdGhpcy5nZW5lcmF0ZWRFcnJvcj1udWxsLHRoaXMuZXh0cmFTdHJlYW1JbmZvPXt9LHRoaXMuaXNQYXVzZWQ9ITAsdGhpcy5pc0ZpbmlzaGVkPSExLHRoaXMuaXNMb2NrZWQ9ITEsdGhpcy5fbGlzdGVuZXJzPXtkYXRhOltdLGVuZDpbXSxlcnJvcjpbXX0sdGhpcy5wcmV2aW91cz1udWxs''@;'; put 'put ''fXUucHJvdG90eXBlPXtwdXNoOmZ1bmN0aW9uKHApe3RoaXMuZW1pdCgiZGF0YSIscCl9LGVuZDpmdW5jdGlvbigpe2lmKHRoaXMuaXNGaW5pc2hlZClyZXR1cm4hMTt0aGlzLmZsdXNoKCk7dHJ5e3RoaXMuZW1pdCgiZW5kIiksdGhpcy5jbGVhblVwKCksdGhpcy5pc0ZpbmlzaGVkPSEwfWNh''@;'; put 'put ''dGNoKHApe3RoaXMuZW1pdCgiZXJyb3IiLHApfXJldHVybiEwfSxlcnJvcjpmdW5jdGlvbihwKXtyZXR1cm4hdGhpcy5pc0ZpbmlzaGVkJiYodGhpcy5pc1BhdXNlZD90aGlzLmdlbmVyYXRlZEVycm9yPXA6KHRoaXMuaXNGaW5pc2hlZD0hMCx0aGlzLmVtaXQoImVycm9yIixwKSx0aGlzLnBy''@;'; put 'put ''ZXZpb3VzJiZ0aGlzLnByZXZpb3VzLmVycm9yKHApLHRoaXMuY2xlYW5VcCgpKSwhMCl9LG9uOmZ1bmN0aW9uKHAsZCl7cmV0dXJuIHRoaXMuX2xpc3RlbmVyc1twXS5wdXNoKGQpLHRoaXN9LGNsZWFuVXA6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbUluZm89dGhpcy5nZW5lcmF0ZWRFcnJvcj10''@;'; put 'put ''aGlzLmV4dHJhU3RyZWFtSW5mbz1udWxsLHRoaXMuX2xpc3RlbmVycz1bXX0sZW1pdDpmdW5jdGlvbihwLGQpe2lmKHRoaXMuX2xpc3RlbmVyc1twXSlmb3IodmFyIHY9MDt2PHRoaXMuX2xpc3RlbmVyc1twXS5sZW5ndGg7disrKXRoaXMuX2xpc3RlbmVyc1twXVt2XS5jYWxsKHRoaXMsZCl9''@;'; put 'put ''LHBpcGU6ZnVuY3Rpb24ocCl7cmV0dXJuIHAucmVnaXN0ZXJQcmV2aW91cyh0aGlzKX0scmVnaXN0ZXJQcmV2aW91czpmdW5jdGlvbihwKXtpZih0aGlzLmlzTG9ja2VkKXRocm93IG5ldyBFcnJvcigiVGhlIHN0cmVhbSAnIit0aGlzKyInIGhhcyBhbHJlYWR5IGJlZW4gdXNlZC4iKTt0aGlz''@;'; put 'put ''LnN0cmVhbUluZm89cC5zdHJlYW1JbmZvLHRoaXMubWVyZ2VTdHJlYW1JbmZvKCksdGhpcy5wcmV2aW91cz1wO3ZhciBkPXRoaXM7cmV0dXJuIHAub24oImRhdGEiLGZ1bmN0aW9uKHYpe2QucHJvY2Vzc0NodW5rKHYpfSkscC5vbigiZW5kIixmdW5jdGlvbigpe2QuZW5kKCl9KSxwLm9uKCJl''@;'; put 'put ''cnJvciIsZnVuY3Rpb24odil7ZC5lcnJvcih2KX0pLHRoaXN9LHBhdXNlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNQYXVzZWQmJiF0aGlzLmlzRmluaXNoZWQmJih0aGlzLmlzUGF1c2VkPSEwLHRoaXMucHJldmlvdXMmJnRoaXMucHJldmlvdXMucGF1c2UoKSwhMCl9LHJlc3VtZTpmdW5j''@;'; put 'put ''dGlvbigpe2lmKCF0aGlzLmlzUGF1c2VkfHx0aGlzLmlzRmluaXNoZWQpcmV0dXJuITE7dmFyIHA9dGhpcy5pc1BhdXNlZD0hMTtyZXR1cm4gdGhpcy5nZW5lcmF0ZWRFcnJvciYmKHRoaXMuZXJyb3IodGhpcy5nZW5lcmF0ZWRFcnJvcikscD0hMCksdGhpcy5wcmV2aW91cyYmdGhpcy5wcmV2''@;'; put 'put ''aW91cy5yZXN1bWUoKSwhcH0sZmx1c2g6ZnVuY3Rpb24oKXt9LHByb2Nlc3NDaHVuazpmdW5jdGlvbihwKXt0aGlzLnB1c2gocCl9LHdpdGhTdHJlYW1JbmZvOmZ1bmN0aW9uKHAsZCl7cmV0dXJuIHRoaXMuZXh0cmFTdHJlYW1JbmZvW3BdPWQsdGhpcy5tZXJnZVN0cmVhbUluZm8oKSx0aGlz''@;'; put 'put ''fSxtZXJnZVN0cmVhbUluZm86ZnVuY3Rpb24oKXtmb3IodmFyIHAgaW4gdGhpcy5leHRyYVN0cmVhbUluZm8pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuZXh0cmFTdHJlYW1JbmZvLHApJiYodGhpcy5zdHJlYW1JbmZvW3BdPXRoaXMuZXh0cmFTdHJlYW1JbmZv''@;'; put 'put ''W3BdKX0sbG9jazpmdW5jdGlvbigpe2lmKHRoaXMuaXNMb2NrZWQpdGhyb3cgbmV3IEVycm9yKCJUaGUgc3RyZWFtICciK3RoaXMrIicgaGFzIGFscmVhZHkgYmVlbiB1c2VkLiIpO3RoaXMuaXNMb2NrZWQ9ITAsdGhpcy5wcmV2aW91cyYmdGhpcy5wcmV2aW91cy5sb2NrKCl9LHRvU3RyaW5n''@;'; put 'put ''OmZ1bmN0aW9uKCl7dmFyIHA9IldvcmtlciAiK3RoaXMubmFtZTtyZXR1cm4gdGhpcy5wcmV2aW91cz90aGlzLnByZXZpb3VzKyIgLT4gIitwOnB9fSxoLmV4cG9ydHM9dX0se31dLDI5OltmdW5jdGlvbihpLGgsZil7dmFyIHU9aSgiLi4vdXRpbHMiKSxwPWkoIi4vQ29udmVydFdvcmtlciIp''@;'; put 'put ''LGQ9aSgiLi9HZW5lcmljV29ya2VyIiksdj1pKCIuLi9iYXNlNjQiKSxfPWkoIi4uL3N1cHBvcnQiKSxBPWkoIi4uL2V4dGVybmFsIiksST1udWxsO2lmKF8ubm9kZXN0cmVhbSl0cnl7ST1pKCIuLi9ub2RlanMvTm9kZWpzU3RyZWFtT3V0cHV0QWRhcHRlciIpfWNhdGNoe31mdW5jdGlvbiBM''@;'; put 'put ''KE4sUCxCKXt2YXIgJD1QO3N3aXRjaChQKXtjYXNlImJsb2IiOmNhc2UiYXJyYXlidWZmZXIiOiQ9InVpbnQ4YXJyYXkiO2JyZWFrO2Nhc2UiYmFzZTY0IjokPSJzdHJpbmcifXRyeXt0aGlzLl9pbnRlcm5hbFR5cGU9JCx0aGlzLl9vdXRwdXRUeXBlPVAsdGhpcy5fbWltZVR5cGU9Qix1LmNo''@;'; put 'put ''ZWNrU3VwcG9ydCgkKSx0aGlzLl93b3JrZXI9Ti5waXBlKG5ldyBwKCQpKSxOLmxvY2soKX1jYXRjaChEKXt0aGlzLl93b3JrZXI9bmV3IGQoImVycm9yIiksdGhpcy5fd29ya2VyLmVycm9yKEQpfX1MLnByb3RvdHlwZT17YWNjdW11bGF0ZTpmdW5jdGlvbihOKXtyZXR1cm4gUD10aGlzLEI9''@;'; put 'put ''TixuZXcgQS5Qcm9taXNlKGZ1bmN0aW9uKCQsRCl7dmFyIHg9W10sTT1QLl9pbnRlcm5hbFR5cGUsaj1QLl9vdXRwdXRUeXBlLGM9UC5fbWltZVR5cGU7UC5vbigiZGF0YSIsZnVuY3Rpb24obSxnKXt4LnB1c2gobSksQiYmQihnKX0pLm9uKCJlcnJvciIsZnVuY3Rpb24obSl7eD1bXSxEKG0p''@;'; put 'put ''fSkub24oImVuZCIsZnVuY3Rpb24oKXt0cnl7dmFyIG09ZnVuY3Rpb24oZyx5LHcpe3N3aXRjaChnKXtjYXNlImJsb2IiOnJldHVybiB1Lm5ld0Jsb2IodS50cmFuc2Zvcm1UbygiYXJyYXlidWZmZXIiLHkpLHcpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gdi5lbmNvZGUoeSk7ZGVmYXVsdDpyZXR1''@;'; put 'put ''cm4gdS50cmFuc2Zvcm1UbyhnLHkpfX0oaixmdW5jdGlvbihnLHkpe3ZhciB3LGs9MCxPPW51bGwsej0wO2Zvcih3PTA7dzx5Lmxlbmd0aDt3Kyspeis9eVt3XS5sZW5ndGg7c3dpdGNoKGcpe2Nhc2Uic3RyaW5nIjpyZXR1cm4geS5qb2luKCIiKTtjYXNlImFycmF5IjpyZXR1cm4gQXJyYXku''@;'; put 'put ''cHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSx5KTtjYXNlInVpbnQ4YXJyYXkiOmZvcihPPW5ldyBVaW50OEFycmF5KHopLHc9MDt3PHkubGVuZ3RoO3crKylPLnNldCh5W3ddLGspLGsrPXlbd10ubGVuZ3RoO3JldHVybiBPO2Nhc2Uibm9kZWJ1ZmZlciI6cmV0dXJuIG8uY29uY2F0KHkpO2Rl''@;'; put 'put ''ZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJjb25jYXQgOiB1bnN1cHBvcnRlZCB0eXBlICciK2crIiciKX19KE0seCksYyk7JChtKX1jYXRjaChnKXtEKGcpfXg9W119KS5yZXN1bWUoKX0pO3ZhciBQLEJ9LG9uOmZ1bmN0aW9uKE4sUCl7dmFyIEI9dGhpcztyZXR1cm4gdGhpcy5fd29ya2VyLm9u''@;'; put 'put ''KE4sImRhdGEiPT09Tj9mdW5jdGlvbigkKXtQLmNhbGwoQiwkLmRhdGEsJC5tZXRhKX06ZnVuY3Rpb24oKXt1LmRlbGF5KFAsYXJndW1lbnRzLEIpfSksdGhpc30scmVzdW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHUuZGVsYXkodGhpcy5fd29ya2VyLnJlc3VtZSxbXSx0aGlzLl93b3JrZXIpLHRo''@;'; put 'put ''aXN9LHBhdXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dvcmtlci5wYXVzZSgpLHRoaXN9LHRvTm9kZWpzU3RyZWFtOmZ1bmN0aW9uKE4pe2lmKHUuY2hlY2tTdXBwb3J0KCJub2Rlc3RyZWFtIiksIm5vZGVidWZmZXIiIT09dGhpcy5fb3V0cHV0VHlwZSl0aHJvdyBuZXcgRXJyb3IodGhp''@;'; put 'put ''cy5fb3V0cHV0VHlwZSsiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBtZXRob2QiKTtyZXR1cm4gbmV3IEkodGhpcyx7b2JqZWN0TW9kZToibm9kZWJ1ZmZlciIhPT10aGlzLl9vdXRwdXRUeXBlfSxOKX19LGguZXhwb3J0cz1MfSx7Ii4uL2Jhc2U2NCI6MSwiLi4vZXh0ZXJuYWwiOjYsIi4u''@;'; put 'put ''L25vZGVqcy9Ob2RlanNTdHJlYW1PdXRwdXRBZGFwdGVyIjoxMywiLi4vc3VwcG9ydCI6MzAsIi4uL3V0aWxzIjozMiwiLi9Db252ZXJ0V29ya2VyIjoyNCwiLi9HZW5lcmljV29ya2VyIjoyOH1dLDMwOltmdW5jdGlvbihpLGgsZil7aWYoZi5iYXNlNjQ9ITAsZi5hcnJheT0hMCxmLnN0cmlu''@;'; put 'put ''Zz0hMCxmLmFycmF5YnVmZmVyPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnR5cGVvZiBVaW50OEFycmF5PCJ1IixmLm5vZGVidWZmZXI9dm9pZCAwIT09byxmLnVpbnQ4YXJyYXk9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpZi5ibG9iPSExO2Vsc2V7dmFy''@;'; put 'put ''IHU9bmV3IEFycmF5QnVmZmVyKDApO3RyeXtmLmJsb2I9MD09PW5ldyBCbG9iKFt1XSx7dHlwZToiYXBwbGljYXRpb24vemlwIn0pLnNpemV9Y2F0Y2h7dHJ5e3ZhciBwPW5ldyhzZWxmLkJsb2JCdWlsZGVyfHxzZWxmLldlYktpdEJsb2JCdWlsZGVyfHxzZWxmLk1vekJsb2JCdWlsZGVyfHxz''@;'; put 'put ''ZWxmLk1TQmxvYkJ1aWxkZXIpO3AuYXBwZW5kKHUpLGYuYmxvYj0wPT09cC5nZXRCbG9iKCJhcHBsaWNhdGlvbi96aXAiKS5zaXplfWNhdGNoe2YuYmxvYj0hMX19fXRyeXtmLm5vZGVzdHJlYW09ISFpKCJyZWFkYWJsZS1zdHJlYW0iKS5SZWFkYWJsZX1jYXRjaHtmLm5vZGVzdHJlYW09ITF9''@;'; put 'put ''fSx7InJlYWRhYmxlLXN0cmVhbSI6MTZ9XSwzMTpbZnVuY3Rpb24oaSxoLGYpe2Zvcih2YXIgdT1pKCIuL3V0aWxzIikscD1pKCIuL3N1cHBvcnQiKSxkPWkoIi4vbm9kZWpzVXRpbHMiKSx2PWkoIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXIiKSxfPW5ldyBBcnJheSgyNTYpLEE9MDtBPDI1NjtB''@;'; put 'put ''KyspX1tBXT0yNTI8PUE/NjoyNDg8PUE/NToyNDA8PUE/NDoyMjQ8PUE/MzoxOTI8PUE/MjoxO2Z1bmN0aW9uIEkoKXt2LmNhbGwodGhpcywidXRmLTggZGVjb2RlIiksdGhpcy5sZWZ0T3Zlcj1udWxsfWZ1bmN0aW9uIEwoKXt2LmNhbGwodGhpcywidXRmLTggZW5jb2RlIil9X1syNTRdPV9b''@;'; put 'put ''MjU0XT0xLGYudXRmOGVuY29kZT1mdW5jdGlvbihOKXtyZXR1cm4gcC5ub2RlYnVmZmVyP2QubmV3QnVmZmVyRnJvbShOLCJ1dGYtOCIpOmZ1bmN0aW9uKFApe3ZhciBCLCQsRCx4LE0saj1QLmxlbmd0aCxjPTA7Zm9yKHg9MDt4PGo7eCsrKTU1Mjk2PT0oNjQ1MTImKCQ9UC5jaGFyQ29kZUF0''@;'; put 'put ''KHgpKSkmJngrMTxqJiY1NjMyMD09KDY0NTEyJihEPVAuY2hhckNvZGVBdCh4KzEpKSkmJigkPTY1NTM2KygkLTU1Mjk2PDwxMCkrKEQtNTYzMjApLHgrKyksYys9JDwxMjg/MTokPDIwNDg/MjokPDY1NTM2PzM6NDtmb3IoQj1wLnVpbnQ4YXJyYXk/bmV3IFVpbnQ4QXJyYXkoYyk6bmV3IEFy''@;'; put 'put ''cmF5KGMpLHg9TT0wO008Yzt4KyspNTUyOTY9PSg2NDUxMiYoJD1QLmNoYXJDb2RlQXQoeCkpKSYmeCsxPGomJjU2MzIwPT0oNjQ1MTImKEQ9UC5jaGFyQ29kZUF0KHgrMSkpKSYmKCQ9NjU1MzYrKCQtNTUyOTY8PDEwKSsoRC01NjMyMCkseCsrKSwkPDEyOD9CW00rK109JDooJDwyMDQ4P0Jb''@;'; put 'put ''TSsrXT0xOTJ8JD4+PjY6KCQ8NjU1MzY/QltNKytdPTIyNHwkPj4+MTI6KEJbTSsrXT0yNDB8JD4+PjE4LEJbTSsrXT0xMjh8JD4+PjEyJjYzKSxCW00rK109MTI4fCQ+Pj42JjYzKSxCW00rK109MTI4fDYzJiQpO3JldHVybiBCfShOKX0sZi51dGY4ZGVjb2RlPWZ1bmN0aW9uKE4pe3JldHVy''@;'; put 'put ''biBwLm5vZGVidWZmZXI/dS50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIsTikudG9TdHJpbmcoInV0Zi04Iik6ZnVuY3Rpb24oUCl7dmFyIEIsJCxELHgsTT1QLmxlbmd0aCxqPW5ldyBBcnJheSgyKk0pO2ZvcihCPSQ9MDtCPE07KWlmKChEPVBbQisrXSk8MTI4KWpbJCsrXT1EO2Vsc2UgaWYo''@;'; put 'put ''NDwoeD1fW0RdKSlqWyQrK109NjU1MzMsQis9eC0xO2Vsc2V7Zm9yKEQmPTI9PT14PzMxOjM9PT14PzE1Ojc7MTx4JiZCPE07KUQ9RDw8Nnw2MyZQW0IrK10seC0tOzE8eD9qWyQrK109NjU1MzM6RDw2NTUzNj9qWyQrK109RDooalskKytdPTU1Mjk2fChELT02NTUzNik+PjEwJjEwMjMsalsk''@;'; put 'put ''KytdPTU2MzIwfDEwMjMmRCl9cmV0dXJuIGoubGVuZ3RoIT09JCYmKGouc3ViYXJyYXk/aj1qLnN1YmFycmF5KDAsJCk6ai5sZW5ndGg9JCksdS5hcHBseUZyb21DaGFyQ29kZShqKX0oTj11LnRyYW5zZm9ybVRvKHAudWludDhhcnJheT8idWludDhhcnJheSI6ImFycmF5IixOKSl9LHUuaW5o''@;'; put 'put ''ZXJpdHMoSSx2KSxJLnByb3RvdHlwZS5wcm9jZXNzQ2h1bms9ZnVuY3Rpb24oTil7dmFyIFA9dS50cmFuc2Zvcm1UbyhwLnVpbnQ4YXJyYXk/InVpbnQ4YXJyYXkiOiJhcnJheSIsTi5kYXRhKTtpZih0aGlzLmxlZnRPdmVyJiZ0aGlzLmxlZnRPdmVyLmxlbmd0aCl7aWYocC51aW50OGFycmF5''@;'; put 'put ''KXt2YXIgQj1QOyhQPW5ldyBVaW50OEFycmF5KEIubGVuZ3RoK3RoaXMubGVmdE92ZXIubGVuZ3RoKSkuc2V0KHRoaXMubGVmdE92ZXIsMCksUC5zZXQoQix0aGlzLmxlZnRPdmVyLmxlbmd0aCl9ZWxzZSBQPXRoaXMubGVmdE92ZXIuY29uY2F0KFApO3RoaXMubGVmdE92ZXI9bnVsbH12YXIg''@;'; put 'put ''JD1mdW5jdGlvbih4LE0pe3ZhciBqO2ZvcigoTT1NfHx4Lmxlbmd0aCk+eC5sZW5ndGgmJihNPXgubGVuZ3RoKSxqPU0tMTswPD1qJiYxMjg9PSgxOTImeFtqXSk7KWotLTtyZXR1cm4gajwwfHwwPT09aj9NOmorX1t4W2pdXT5NP2o6TX0oUCksRD1QOyQhPT1QLmxlbmd0aCYmKHAudWludDhh''@;'; put 'put ''cnJheT8oRD1QLnN1YmFycmF5KDAsJCksdGhpcy5sZWZ0T3Zlcj1QLnN1YmFycmF5KCQsUC5sZW5ndGgpKTooRD1QLnNsaWNlKDAsJCksdGhpcy5sZWZ0T3Zlcj1QLnNsaWNlKCQsUC5sZW5ndGgpKSksdGhpcy5wdXNoKHtkYXRhOmYudXRmOGRlY29kZShEKSxtZXRhOk4ubWV0YX0pfSxJLnBy''@;'; put 'put ''b3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe3RoaXMubGVmdE92ZXImJnRoaXMubGVmdE92ZXIubGVuZ3RoJiYodGhpcy5wdXNoKHtkYXRhOmYudXRmOGRlY29kZSh0aGlzLmxlZnRPdmVyKSxtZXRhOnt9fSksdGhpcy5sZWZ0T3Zlcj1udWxsKX0sZi5VdGY4RGVjb2RlV29ya2VyPUksdS5pbmhl''@;'; put 'put ''cml0cyhMLHYpLEwucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbihOKXt0aGlzLnB1c2goe2RhdGE6Zi51dGY4ZW5jb2RlKE4uZGF0YSksbWV0YTpOLm1ldGF9KX0sZi5VdGY4RW5jb2RlV29ya2VyPUx9LHsiLi9ub2RlanNVdGlscyI6MTQsIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXIi''@;'; put 'put ''OjI4LCIuL3N1cHBvcnQiOjMwLCIuL3V0aWxzIjozMn1dLDMyOltmdW5jdGlvbihpLGgsZil7dmFyIHU9aSgiLi9zdXBwb3J0IikscD1pKCIuL2Jhc2U2NCIpLGQ9aSgiLi9ub2RlanNVdGlscyIpLHY9aSgiLi9leHRlcm5hbCIpO2Z1bmN0aW9uIF8oQil7cmV0dXJuIEJ9ZnVuY3Rpb24gQShC''@;'; put 'put ''LCQpe2Zvcih2YXIgRD0wO0Q8Qi5sZW5ndGg7KytEKSRbRF09MjU1JkIuY2hhckNvZGVBdChEKTtyZXR1cm4gJH1pKCJzZXRpbW1lZGlhdGUiKSxmLm5ld0Jsb2I9ZnVuY3Rpb24oQiwkKXtmLmNoZWNrU3VwcG9ydCgiYmxvYiIpO3RyeXtyZXR1cm4gbmV3IEJsb2IoW0JdLHt0eXBlOiR9KX1j''@;'; put 'put ''YXRjaHt0cnl7dmFyIEQ9bmV3KHNlbGYuQmxvYkJ1aWxkZXJ8fHNlbGYuV2ViS2l0QmxvYkJ1aWxkZXJ8fHNlbGYuTW96QmxvYkJ1aWxkZXJ8fHNlbGYuTVNCbG9iQnVpbGRlcik7cmV0dXJuIEQuYXBwZW5kKEIpLEQuZ2V0QmxvYigkKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIkJ1ZyA6IGNh''@;'; put 'put ''bid0IGNvbnN0cnVjdCB0aGUgQmxvYi4iKX19fTt2YXIgST17c3RyaW5naWZ5QnlDaHVuazpmdW5jdGlvbihCLCQsRCl7dmFyIHg9W10sTT0wLGo9Qi5sZW5ndGg7aWYoajw9RClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLEIpO2Zvcig7TTxqOyl4LnB1c2goU3RyaW5n''@;'; put 'put ''LmZyb21DaGFyQ29kZS5hcHBseShudWxsLCJhcnJheSI9PT0kfHwibm9kZWJ1ZmZlciI9PT0kP0Iuc2xpY2UoTSxNYXRoLm1pbihNK0QsaikpOkIuc3ViYXJyYXkoTSxNYXRoLm1pbihNK0QsaikpKSksTSs9RDtyZXR1cm4geC5qb2luKCIiKX0sc3RyaW5naWZ5QnlDaGFyOmZ1bmN0aW9uKEIp''@;'; put 'put ''e2Zvcih2YXIgJD0iIixEPTA7RDxCLmxlbmd0aDtEKyspJCs9U3RyaW5nLmZyb21DaGFyQ29kZShCW0RdKTtyZXR1cm4gJH0sYXBwbHlDYW5CZVVzZWQ6e3VpbnQ4YXJyYXk6ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHUudWludDhhcnJheSYmMT09PVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHko''@;'; put 'put ''bnVsbCxuZXcgVWludDhBcnJheSgxKSkubGVuZ3RofWNhdGNoe3JldHVybiExfX0oKSxub2RlYnVmZmVyOmZ1bmN0aW9uKCl7dHJ5e3JldHVybiB1Lm5vZGVidWZmZXImJjE9PT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZC5hbGxvY0J1ZmZlcigxKSkubGVuZ3RofWNhdGNoe3Jl''@;'; put 'put ''dHVybiExfX0oKX19O2Z1bmN0aW9uIEwoQil7dmFyICQ9NjU1MzYsRD1mLmdldFR5cGVPZihCKSx4PSEwO2lmKCJ1aW50OGFycmF5Ij09PUQ/eD1JLmFwcGx5Q2FuQmVVc2VkLnVpbnQ4YXJyYXk6Im5vZGVidWZmZXIiPT09RCYmKHg9SS5hcHBseUNhbkJlVXNlZC5ub2RlYnVmZmVyKSx4KWZv''@;'; put 'put ''cig7MTwkOyl0cnl7cmV0dXJuIEkuc3RyaW5naWZ5QnlDaHVuayhCLEQsJCl9Y2F0Y2h7JD1NYXRoLmZsb29yKCQvMil9cmV0dXJuIEkuc3RyaW5naWZ5QnlDaGFyKEIpfWZ1bmN0aW9uIE4oQiwkKXtmb3IodmFyIEQ9MDtEPEIubGVuZ3RoO0QrKykkW0RdPUJbRF07cmV0dXJuICR9Zi5hcHBs''@;'; put 'put ''eUZyb21DaGFyQ29kZT1MO3ZhciBQPXt9O1Auc3RyaW5nPXtzdHJpbmc6XyxhcnJheTpmdW5jdGlvbihCKXtyZXR1cm4gQShCLG5ldyBBcnJheShCLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihCKXtyZXR1cm4gUC5zdHJpbmcudWludDhhcnJheShCKS5idWZmZXJ9LHVpbnQ4YXJy''@;'; put 'put ''YXk6ZnVuY3Rpb24oQil7cmV0dXJuIEEoQixuZXcgVWludDhBcnJheShCLmxlbmd0aCkpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKEIpe3JldHVybiBBKEIsZC5hbGxvY0J1ZmZlcihCLmxlbmd0aCkpfX0sUC5hcnJheT17c3RyaW5nOkwsYXJyYXk6XyxhcnJheWJ1ZmZlcjpmdW5jdGlvbihCKXty''@;'; put 'put ''ZXR1cm4gbmV3IFVpbnQ4QXJyYXkoQikuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKEIpe3JldHVybiBuZXcgVWludDhBcnJheShCKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihCKXtyZXR1cm4gZC5uZXdCdWZmZXJGcm9tKEIpfX0sUC5hcnJheWJ1ZmZlcj17c3RyaW5nOmZ1bmN0aW9uKEIp''@;'; put 'put ''e3JldHVybiBMKG5ldyBVaW50OEFycmF5KEIpKX0sYXJyYXk6ZnVuY3Rpb24oQil7cmV0dXJuIE4obmV3IFVpbnQ4QXJyYXkoQiksbmV3IEFycmF5KEIuYnl0ZUxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpfLHVpbnQ4YXJyYXk6ZnVuY3Rpb24oQil7cmV0dXJuIG5ldyBVaW50OEFycmF5KEIpfSxu''@;'; put 'put ''b2RlYnVmZmVyOmZ1bmN0aW9uKEIpe3JldHVybiBkLm5ld0J1ZmZlckZyb20obmV3IFVpbnQ4QXJyYXkoQikpfX0sUC51aW50OGFycmF5PXtzdHJpbmc6TCxhcnJheTpmdW5jdGlvbihCKXtyZXR1cm4gTihCLG5ldyBBcnJheShCLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihCKXty''@;'; put 'put ''ZXR1cm4gQi5idWZmZXJ9LHVpbnQ4YXJyYXk6Xyxub2RlYnVmZmVyOmZ1bmN0aW9uKEIpe3JldHVybiBkLm5ld0J1ZmZlckZyb20oQil9fSxQLm5vZGVidWZmZXI9e3N0cmluZzpMLGFycmF5OmZ1bmN0aW9uKEIpe3JldHVybiBOKEIsbmV3IEFycmF5KEIubGVuZ3RoKSl9LGFycmF5YnVmZmVy''@;'; put 'put ''OmZ1bmN0aW9uKEIpe3JldHVybiBQLm5vZGVidWZmZXIudWludDhhcnJheShCKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oQil7cmV0dXJuIE4oQixuZXcgVWludDhBcnJheShCLmxlbmd0aCkpfSxub2RlYnVmZmVyOl99LGYudHJhbnNmb3JtVG89ZnVuY3Rpb24oQiwkKXtpZigkPSR8''@;'; put 'put ''fCIiLCFCKXJldHVybiAkO2YuY2hlY2tTdXBwb3J0KEIpO3ZhciBEPWYuZ2V0VHlwZU9mKCQpO3JldHVybiBQW0RdW0JdKCQpfSxmLnJlc29sdmU9ZnVuY3Rpb24oQil7Zm9yKHZhciAkPUIuc3BsaXQoIi8iKSxEPVtdLHg9MDt4PCQubGVuZ3RoO3grKyl7dmFyIE09JFt4XTsiLiI9PT1NfHwi''@;'; put 'put ''Ij09PU0mJjAhPT14JiZ4IT09JC5sZW5ndGgtMXx8KCIuLiI9PT1NP0QucG9wKCk6RC5wdXNoKE0pKX1yZXR1cm4gRC5qb2luKCIvIil9LGYuZ2V0VHlwZU9mPWZ1bmN0aW9uKEIpe3JldHVybiJzdHJpbmciPT10eXBlb2YgQj8ic3RyaW5nIjoiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnBy''@;'; put 'put ''b3RvdHlwZS50b1N0cmluZy5jYWxsKEIpPyJhcnJheSI6dS5ub2RlYnVmZmVyJiZkLmlzQnVmZmVyKEIpPyJub2RlYnVmZmVyIjp1LnVpbnQ4YXJyYXkmJkIgaW5zdGFuY2VvZiBVaW50OEFycmF5PyJ1aW50OGFycmF5Ijp1LmFycmF5YnVmZmVyJiZCIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/''@;'; put 'put ''ImFycmF5YnVmZmVyIjp2b2lkIDB9LGYuY2hlY2tTdXBwb3J0PWZ1bmN0aW9uKEIpe2lmKCF1W0IudG9Mb3dlckNhc2UoKV0pdGhyb3cgbmV3IEVycm9yKEIrIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcGxhdGZvcm0iKX0sZi5NQVhfVkFMVUVfMTZCSVRTPTY1NTM1LGYuTUFYX1ZBTFVF''@;'; put 'put ''XzMyQklUUz0tMSxmLnByZXR0eT1mdW5jdGlvbihCKXt2YXIgJCxELHg9IiI7Zm9yKEQ9MDtEPChCfHwiIikubGVuZ3RoO0QrKyl4Kz0iXFx4IisoKCQ9Qi5jaGFyQ29kZUF0KEQpKTwxNj8iMCI6IiIpKyQudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIHh9LGYuZGVsYXk9ZnVu''@;'; put 'put ''Y3Rpb24oQiwkLEQpe24oZnVuY3Rpb24oKXtCLmFwcGx5KER8fG51bGwsJHx8W10pfSl9LGYuaW5oZXJpdHM9ZnVuY3Rpb24oQiwkKXtmdW5jdGlvbiBEKCl7fUQucHJvdG90eXBlPSQucHJvdG90eXBlLEIucHJvdG90eXBlPW5ldyBEfSxmLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBCLCQsRD17''@;'; put 'put ''fTtmb3IoQj0wO0I8YXJndW1lbnRzLmxlbmd0aDtCKyspZm9yKCQgaW4gYXJndW1lbnRzW0JdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbQl0sJCkmJnZvaWQgMD09PURbJF0mJihEWyRdPWFyZ3VtZW50c1tCXVskXSk7cmV0dXJuIER9LGYucHJlcGFy''@;'; put 'put ''ZUNvbnRlbnQ9ZnVuY3Rpb24oQiwkLEQseCxNKXtyZXR1cm4gdi5Qcm9taXNlLnJlc29sdmUoJCkudGhlbihmdW5jdGlvbihqKXtyZXR1cm4gdS5ibG9iJiYoaiBpbnN0YW5jZW9mIEJsb2J8fC0xIT09WyJbb2JqZWN0IEZpbGVdIiwiW29iamVjdCBCbG9iXSJdLmluZGV4T2YoT2JqZWN0LnBy''@;'; put 'put ''b3RvdHlwZS50b1N0cmluZy5jYWxsKGopKSkmJnR5cGVvZiBGaWxlUmVhZGVyPCJ1Ij9uZXcgdi5Qcm9taXNlKGZ1bmN0aW9uKGMsbSl7dmFyIGc9bmV3IEZpbGVSZWFkZXI7Zy5vbmxvYWQ9ZnVuY3Rpb24oeSl7Yyh5LnRhcmdldC5yZXN1bHQpfSxnLm9uZXJyb3I9ZnVuY3Rpb24oeSl7bSh5''@;'; put 'put ''LnRhcmdldC5lcnJvcil9LGcucmVhZEFzQXJyYXlCdWZmZXIoail9KTpqfSkudGhlbihmdW5jdGlvbihqKXt2YXIgbSxjPWYuZ2V0VHlwZU9mKGopO3JldHVybiBjPygiYXJyYXlidWZmZXIiPT09Yz9qPWYudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLGopOiJzdHJpbmciPT09YyYmKE0/aj1w''@;'; put 'put ''LmRlY29kZShqKTpEJiYhMCE9PXgmJihqPUEobT1qLHUudWludDhhcnJheT9uZXcgVWludDhBcnJheShtLmxlbmd0aCk6bmV3IEFycmF5KG0ubGVuZ3RoKSkpKSxqKTp2LlByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiQ2FuJ3QgcmVhZCB0aGUgZGF0YSBvZiAnIitCKyInLiBJcyBpdCBpbiBh''@;'; put 'put ''IHN1cHBvcnRlZCBKYXZhU2NyaXB0IHR5cGUgKFN0cmluZywgQmxvYiwgQXJyYXlCdWZmZXIsIGV0YykgPyIpKX0pfX0seyIuL2Jhc2U2NCI6MSwiLi9leHRlcm5hbCI6NiwiLi9ub2RlanNVdGlscyI6MTQsIi4vc3VwcG9ydCI6MzAsc2V0aW1tZWRpYXRlOjU0fV0sMzM6W2Z1bmN0aW9uKGks''@;'; put 'put ''aCxmKXt2YXIgdT1pKCIuL3JlYWRlci9yZWFkZXJGb3IiKSxwPWkoIi4vdXRpbHMiKSxkPWkoIi4vc2lnbmF0dXJlIiksdj1pKCIuL3ppcEVudHJ5IiksXz1pKCIuL3N1cHBvcnQiKTtmdW5jdGlvbiBBKEkpe3RoaXMuZmlsZXM9W10sdGhpcy5sb2FkT3B0aW9ucz1JfUEucHJvdG90eXBlPXtj''@;'; put 'put ''aGVja1NpZ25hdHVyZTpmdW5jdGlvbihJKXtpZighdGhpcy5yZWFkZXIucmVhZEFuZENoZWNrU2lnbmF0dXJlKEkpKXt0aGlzLnJlYWRlci5pbmRleC09NDt2YXIgTD10aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpO3Rocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCBvciBidWc6IHVuZXhw''@;'; put 'put ''ZWN0ZWQgc2lnbmF0dXJlICgiK3AucHJldHR5KEwpKyIsIGV4cGVjdGVkICIrcC5wcmV0dHkoSSkrIikiKX19LGlzU2lnbmF0dXJlOmZ1bmN0aW9uKEksTCl7dmFyIE49dGhpcy5yZWFkZXIuaW5kZXg7dGhpcy5yZWFkZXIuc2V0SW5kZXgoSSk7dmFyIFA9dGhpcy5yZWFkZXIucmVhZFN0cmlu''@;'; put 'put ''Zyg0KT09PUw7cmV0dXJuIHRoaXMucmVhZGVyLnNldEluZGV4KE4pLFB9LHJlYWRCbG9ja0VuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuZGlza051bWJlcj10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCgy''@;'; put 'put ''KSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclJlY29yZHM9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5jZW50cmFsRGlyT2Zm''@;'; put 'put ''c2V0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy56aXBDb21tZW50TGVuZ3RoPXRoaXMucmVhZGVyLnJlYWRJbnQoMik7dmFyIEk9dGhpcy5yZWFkZXIucmVhZERhdGEodGhpcy56aXBDb21tZW50TGVuZ3RoKSxOPXAudHJhbnNmb3JtVG8oXy51aW50OGFycmF5PyJ1aW50OGFycmF5Ijoi''@;'; put 'put ''YXJyYXkiLEkpO3RoaXMuemlwQ29tbWVudD10aGlzLmxvYWRPcHRpb25zLmRlY29kZUZpbGVOYW1lKE4pfSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5yZWFkZXIuc2tp''@;'; put 'put ''cCg0KSx0aGlzLmRpc2tOdW1iZXI9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxE''@;'; put 'put ''aXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpck9mZnNldD10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YT17fTtmb3IodmFyIEksTCxOLFA9''@;'; put 'put ''dGhpcy56aXA2NEVuZE9mQ2VudHJhbFNpemUtNDQ7MDxQOylJPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksTD10aGlzLnJlYWRlci5yZWFkSW50KDQpLE49dGhpcy5yZWFkZXIucmVhZERhdGEoTCksdGhpcy56aXA2NEV4dGVuc2libGVEYXRhW0ldPXtpZDpJLGxlbmd0aDpMLHZhbHVlOk59fSxy''@;'; put 'put ''ZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3I6ZnVuY3Rpb24oKXtpZih0aGlzLmRpc2tXaXRoWmlwNjRDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXI9dGhpcy5yZWFkZXIucmVhZEludCg4''@;'; put 'put ''KSx0aGlzLmRpc2tzQ291bnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSwxPHRoaXMuZGlza3NDb3VudCl0aHJvdyBuZXcgRXJyb3IoIk11bHRpLXZvbHVtZXMgemlwIGFyZSBub3Qgc3VwcG9ydGVkIil9LHJlYWRMb2NhbEZpbGVzOmZ1bmN0aW9uKCl7dmFyIEksTDtmb3IoST0wO0k8dGhpcy5m''@;'; put 'put ''aWxlcy5sZW5ndGg7SSsrKXRoaXMucmVhZGVyLnNldEluZGV4KChMPXRoaXMuZmlsZXNbSV0pLmxvY2FsSGVhZGVyT2Zmc2V0KSx0aGlzLmNoZWNrU2lnbmF0dXJlKGQuTE9DQUxfRklMRV9IRUFERVIpLEwucmVhZExvY2FsUGFydCh0aGlzLnJlYWRlciksTC5oYW5kbGVVVEY4KCksTC5wcm9j''@;'; put 'put ''ZXNzQXR0cmlidXRlcygpfSxyZWFkQ2VudHJhbERpcjpmdW5jdGlvbigpe3ZhciBJO2Zvcih0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLmNlbnRyYWxEaXJPZmZzZXQpO3RoaXMucmVhZGVyLnJlYWRBbmRDaGVja1NpZ25hdHVyZShkLkNFTlRSQUxfRklMRV9IRUFERVIpOykoST1uZXcgdih7''@;'; put 'put ''emlwNjQ6dGhpcy56aXA2NH0sdGhpcy5sb2FkT3B0aW9ucykpLnJlYWRDZW50cmFsUGFydCh0aGlzLnJlYWRlciksdGhpcy5maWxlcy5wdXNoKEkpO2lmKHRoaXMuY2VudHJhbERpclJlY29yZHMhPT10aGlzLmZpbGVzLmxlbmd0aCYmMCE9PXRoaXMuY2VudHJhbERpclJlY29yZHMmJjA9PT10''@;'; put 'put ''aGlzLmZpbGVzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgb3IgYnVnOiBleHBlY3RlZCAiK3RoaXMuY2VudHJhbERpclJlY29yZHMrIiByZWNvcmRzIGluIGNlbnRyYWwgZGlyLCBnb3QgIit0aGlzLmZpbGVzLmxlbmd0aCl9LHJlYWRFbmRPZkNlbnRyYWw6ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgST10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShkLkNFTlRSQUxfRElSRUNUT1JZX0VORCk7aWYoSTwwKXRocm93IHRoaXMuaXNTaWduYXR1cmUoMCxkLkxPQ0FMX0ZJTEVfSEVBREVSKT9uZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXA6IGNhbid0IGZpbmQgZW5kIG9m''@;'; put 'put ''IGNlbnRyYWwgZGlyZWN0b3J5Iik6bmV3IEVycm9yKCJDYW4ndCBmaW5kIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSA6IGlzIHRoaXMgYSB6aXAgZmlsZSA/IElmIGl0IGlzLCBzZWUgaHR0cHM6Ly9zdHVrLmdpdGh1Yi5pby9qc3ppcC9kb2N1bWVudGF0aW9uL2hvd3RvL3JlYWRfemlwLmh0''@;'; put 'put ''bWwiKTt0aGlzLnJlYWRlci5zZXRJbmRleChJKTt2YXIgTD1JO2lmKHRoaXMuY2hlY2tTaWduYXR1cmUoZC5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrRW5kT2ZDZW50cmFsKCksdGhpcy5kaXNrTnVtYmVyPT09cC5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmRpc2tXaXRo''@;'; put 'put ''Q2VudHJhbERpclN0YXJ0PT09cC5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz09PXAuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkcz09PXAuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyU2l6ZT09PXAuTUFY''@;'; put 'put ''X1ZBTFVFXzMyQklUU3x8dGhpcy5jZW50cmFsRGlyT2Zmc2V0PT09cC5NQVhfVkFMVUVfMzJCSVRTKXtpZih0aGlzLnppcDY0PSEwLChJPXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKGQuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUikpPDApdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJDb3JydXB0ZWQgemlwOiBjYW4ndCBmaW5kIHRoZSBaSVA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkgbG9jYXRvciIpO2lmKHRoaXMucmVhZGVyLnNldEluZGV4KEkpLHRoaXMuY2hlY2tTaWduYXR1cmUoZC5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKSx0aGlzLnJlYWRC''@;'; put 'put ''bG9ja1ppcDY0RW5kT2ZDZW50cmFsTG9jYXRvcigpLCF0aGlzLmlzU2lnbmF0dXJlKHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpcixkLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCkmJih0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXI9dGhp''@;'; put 'put ''cy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoZC5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpcjwwKSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXA6IGNhbid0IGZpbmQgdGhlIFpJUDY0IGVuZCBvZiBj''@;'; put 'put ''ZW50cmFsIGRpcmVjdG9yeSIpO3RoaXMucmVhZGVyLnNldEluZGV4KHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpciksdGhpcy5jaGVja1NpZ25hdHVyZShkLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCksdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbCgp''@;'; put 'put ''fXZhciBOPXRoaXMuY2VudHJhbERpck9mZnNldCt0aGlzLmNlbnRyYWxEaXJTaXplO3RoaXMuemlwNjQmJihOKz0yMCxOKz0xMit0aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZSk7dmFyIFA9TC1OO2lmKDA8UCl0aGlzLmlzU2lnbmF0dXJlKEwsZC5DRU5UUkFMX0ZJTEVfSEVBREVSKXx8KHRo''@;'; put 'put ''aXMucmVhZGVyLnplcm89UCk7ZWxzZSBpZihQPDApdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwOiBtaXNzaW5nICIrTWF0aC5hYnMoUCkrIiBieXRlcy4iKX0scHJlcGFyZVJlYWRlcjpmdW5jdGlvbihJKXt0aGlzLnJlYWRlcj11KEkpfSxsb2FkOmZ1bmN0aW9uKEkpe3RoaXMucHJl''@;'; put 'put ''cGFyZVJlYWRlcihJKSx0aGlzLnJlYWRFbmRPZkNlbnRyYWwoKSx0aGlzLnJlYWRDZW50cmFsRGlyKCksdGhpcy5yZWFkTG9jYWxGaWxlcygpfX0saC5leHBvcnRzPUF9LHsiLi9yZWFkZXIvcmVhZGVyRm9yIjoyMiwiLi9zaWduYXR1cmUiOjIzLCIuL3N1cHBvcnQiOjMwLCIuL3V0aWxzIjoz''@;'; put 'put ''MiwiLi96aXBFbnRyeSI6MzR9XSwzNDpbZnVuY3Rpb24oaSxoLGYpe3ZhciB1PWkoIi4vcmVhZGVyL3JlYWRlckZvciIpLHA9aSgiLi91dGlscyIpLGQ9aSgiLi9jb21wcmVzc2VkT2JqZWN0Iiksdj1pKCIuL2NyYzMyIiksXz1pKCIuL3V0ZjgiKSxBPWkoIi4vY29tcHJlc3Npb25zIiksST1p''@;'; put 'put ''KCIuL3N1cHBvcnQiKTtmdW5jdGlvbiBMKE4sUCl7dGhpcy5vcHRpb25zPU4sdGhpcy5sb2FkT3B0aW9ucz1QfUwucHJvdG90eXBlPXtpc0VuY3J5cHRlZDpmdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy5iaXRGbGFnKX0sdXNlVVRGODpmdW5jdGlvbigpe3JldHVybiEoMjA0OCZ+dGhpcy5i''@;'; put 'put ''aXRGbGFnKX0scmVhZExvY2FsUGFydDpmdW5jdGlvbihOKXt2YXIgUCxCO2lmKE4uc2tpcCgyMiksdGhpcy5maWxlTmFtZUxlbmd0aD1OLnJlYWRJbnQoMiksQj1OLnJlYWRJbnQoMiksdGhpcy5maWxlTmFtZT1OLnJlYWREYXRhKHRoaXMuZmlsZU5hbWVMZW5ndGgpLE4uc2tpcChCKSwtMT09''@;'; put 'put ''PXRoaXMuY29tcHJlc3NlZFNpemV8fC0xPT09dGhpcy51bmNvbXByZXNzZWRTaXplKXRocm93IG5ldyBFcnJvcigiQnVnIG9yIGNvcnJ1cHRlZCB6aXAgOiBkaWRuJ3QgZ2V0IGVub3VnaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjZW50cmFsIGRpcmVjdG9yeSAoY29tcHJlc3NlZFNpemUgPT09''@;'; put 'put ''IC0xIHx8IHVuY29tcHJlc3NlZFNpemUgPT09IC0xKSIpO2lmKG51bGw9PT0oUD1mdW5jdGlvbigkKXtmb3IodmFyIEQgaW4gQSlpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQSxEKSYmQVtEXS5tYWdpYz09PSQpcmV0dXJuIEFbRF07cmV0dXJuIG51bGx9KHRoaXMu''@;'; put 'put ''Y29tcHJlc3Npb25NZXRob2QpKSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBjb21wcmVzc2lvbiAiK3AucHJldHR5KHRoaXMuY29tcHJlc3Npb25NZXRob2QpKyIgdW5rbm93biAoaW5uZXIgZmlsZSA6ICIrcC50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLmZpbGVOYW1lKSsi''@;'; put 'put ''KSIpO3RoaXMuZGVjb21wcmVzc2VkPW5ldyBkKHRoaXMuY29tcHJlc3NlZFNpemUsdGhpcy51bmNvbXByZXNzZWRTaXplLHRoaXMuY3JjMzIsUCxOLnJlYWREYXRhKHRoaXMuY29tcHJlc3NlZFNpemUpKX0scmVhZENlbnRyYWxQYXJ0OmZ1bmN0aW9uKE4pe3RoaXMudmVyc2lvbk1hZGVCeT1O''@;'; put 'put ''LnJlYWRJbnQoMiksTi5za2lwKDIpLHRoaXMuYml0RmxhZz1OLnJlYWRJbnQoMiksdGhpcy5jb21wcmVzc2lvbk1ldGhvZD1OLnJlYWRTdHJpbmcoMiksdGhpcy5kYXRlPU4ucmVhZERhdGUoKSx0aGlzLmNyYzMyPU4ucmVhZEludCg0KSx0aGlzLmNvbXByZXNzZWRTaXplPU4ucmVhZEludCg0''@;'; put 'put ''KSx0aGlzLnVuY29tcHJlc3NlZFNpemU9Ti5yZWFkSW50KDQpO3ZhciBQPU4ucmVhZEludCgyKTtpZih0aGlzLmV4dHJhRmllbGRzTGVuZ3RoPU4ucmVhZEludCgyKSx0aGlzLmZpbGVDb21tZW50TGVuZ3RoPU4ucmVhZEludCgyKSx0aGlzLmRpc2tOdW1iZXJTdGFydD1OLnJlYWRJbnQoMiks''@;'; put 'put ''dGhpcy5pbnRlcm5hbEZpbGVBdHRyaWJ1dGVzPU4ucmVhZEludCgyKSx0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXM9Ti5yZWFkSW50KDQpLHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9Ti5yZWFkSW50KDQpLHRoaXMuaXNFbmNyeXB0ZWQoKSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRlZCB6''@;'; put 'put ''aXAgYXJlIG5vdCBzdXBwb3J0ZWQiKTtOLnNraXAoUCksdGhpcy5yZWFkRXh0cmFGaWVsZHMoTiksdGhpcy5wYXJzZVpJUDY0RXh0cmFGaWVsZChOKSx0aGlzLmZpbGVDb21tZW50PU4ucmVhZERhdGEodGhpcy5maWxlQ29tbWVudExlbmd0aCl9LHByb2Nlc3NBdHRyaWJ1dGVzOmZ1bmN0aW9u''@;'; put 'put ''KCl7dGhpcy51bml4UGVybWlzc2lvbnM9bnVsbCx0aGlzLmRvc1Blcm1pc3Npb25zPW51bGw7dmFyIE49dGhpcy52ZXJzaW9uTWFkZUJ5Pj44O3RoaXMuZGlyPSEhKDE2JnRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyksMD09TiYmKHRoaXMuZG9zUGVybWlzc2lvbnM9NjMmdGhpcy5leHRl''@;'; put 'put ''cm5hbEZpbGVBdHRyaWJ1dGVzKSwzPT1OJiYodGhpcy51bml4UGVybWlzc2lvbnM9dGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzPj4xNiY2NTUzNSksdGhpcy5kaXJ8fCIvIiE9PXRoaXMuZmlsZU5hbWVTdHIuc2xpY2UoLTEpfHwodGhpcy5kaXI9ITApfSxwYXJzZVpJUDY0RXh0cmFGaWVs''@;'; put 'put ''ZDpmdW5jdGlvbigpe2lmKHRoaXMuZXh0cmFGaWVsZHNbMV0pe3ZhciBOPXUodGhpcy5leHRyYUZpZWxkc1sxXS52YWx1ZSk7dGhpcy51bmNvbXByZXNzZWRTaXplPT09cC5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy51bmNvbXByZXNzZWRTaXplPU4ucmVhZEludCg4KSksdGhpcy5jb21wcmVz''@;'; put 'put ''c2VkU2l6ZT09PXAuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMuY29tcHJlc3NlZFNpemU9Ti5yZWFkSW50KDgpKSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PT09cC5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5sb2NhbEhlYWRlck9mZnNldD1OLnJlYWRJbnQoOCkpLHRoaXMuZGlza051bWJlclN0''@;'; put 'put ''YXJ0PT09cC5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5kaXNrTnVtYmVyU3RhcnQ9Ti5yZWFkSW50KDQpKX19LHJlYWRFeHRyYUZpZWxkczpmdW5jdGlvbihOKXt2YXIgUCxCLCQsRD1OLmluZGV4K3RoaXMuZXh0cmFGaWVsZHNMZW5ndGg7Zm9yKHRoaXMuZXh0cmFGaWVsZHN8fCh0aGlzLmV4''@;'; put 'put ''dHJhRmllbGRzPXt9KTtOLmluZGV4KzQ8RDspUD1OLnJlYWRJbnQoMiksQj1OLnJlYWRJbnQoMiksJD1OLnJlYWREYXRhKEIpLHRoaXMuZXh0cmFGaWVsZHNbUF09e2lkOlAsbGVuZ3RoOkIsdmFsdWU6JH07Ti5zZXRJbmRleChEKX0saGFuZGxlVVRGODpmdW5jdGlvbigpe3ZhciBOPUkudWlu''@;'; put 'put ''dDhhcnJheT8idWludDhhcnJheSI6ImFycmF5IjtpZih0aGlzLnVzZVVURjgoKSl0aGlzLmZpbGVOYW1lU3RyPV8udXRmOGRlY29kZSh0aGlzLmZpbGVOYW1lKSx0aGlzLmZpbGVDb21tZW50U3RyPV8udXRmOGRlY29kZSh0aGlzLmZpbGVDb21tZW50KTtlbHNle3ZhciBQPXRoaXMuZmluZEV4''@;'; put 'put ''dHJhRmllbGRVbmljb2RlUGF0aCgpO2lmKG51bGwhPT1QKXRoaXMuZmlsZU5hbWVTdHI9UDtlbHNle3ZhciBCPXAudHJhbnNmb3JtVG8oTix0aGlzLmZpbGVOYW1lKTt0aGlzLmZpbGVOYW1lU3RyPXRoaXMubG9hZE9wdGlvbnMuZGVjb2RlRmlsZU5hbWUoQil9dmFyICQ9dGhpcy5maW5kRXh0''@;'; put 'put ''cmFGaWVsZFVuaWNvZGVDb21tZW50KCk7aWYobnVsbCE9PSQpdGhpcy5maWxlQ29tbWVudFN0cj0kO2Vsc2V7dmFyIEQ9cC50cmFuc2Zvcm1UbyhOLHRoaXMuZmlsZUNvbW1lbnQpO3RoaXMuZmlsZUNvbW1lbnRTdHI9dGhpcy5sb2FkT3B0aW9ucy5kZWNvZGVGaWxlTmFtZShEKX19fSxmaW5k''@;'; put 'put ''RXh0cmFGaWVsZFVuaWNvZGVQYXRoOmZ1bmN0aW9uKCl7dmFyIE49dGhpcy5leHRyYUZpZWxkc1syODc4OV07aWYoTil7dmFyIFA9dShOLnZhbHVlKTtyZXR1cm4gMSE9PVAucmVhZEludCgxKXx8dih0aGlzLmZpbGVOYW1lKSE9PVAucmVhZEludCg0KT9udWxsOl8udXRmOGRlY29kZShQLnJl''@;'; put 'put ''YWREYXRhKE4ubGVuZ3RoLTUpKX1yZXR1cm4gbnVsbH0sZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudDpmdW5jdGlvbigpe3ZhciBOPXRoaXMuZXh0cmFGaWVsZHNbMjU0NjFdO2lmKE4pe3ZhciBQPXUoTi52YWx1ZSk7cmV0dXJuIDEhPT1QLnJlYWRJbnQoMSl8fHYodGhpcy5maWxlQ29t''@;'; put 'put ''bWVudCkhPT1QLnJlYWRJbnQoNCk/bnVsbDpfLnV0ZjhkZWNvZGUoUC5yZWFkRGF0YShOLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9fSxoLmV4cG9ydHM9TH0seyIuL2NvbXByZXNzZWRPYmplY3QiOjIsIi4vY29tcHJlc3Npb25zIjozLCIuL2NyYzMyIjo0LCIuL3JlYWRlci9yZWFkZXJGb3Ii''@;'; put 'put ''OjIyLCIuL3N1cHBvcnQiOjMwLCIuL3V0ZjgiOjMxLCIuL3V0aWxzIjozMn1dLDM1OltmdW5jdGlvbihpLGgsZil7ZnVuY3Rpb24gdShQLEIsJCl7dGhpcy5uYW1lPVAsdGhpcy5kaXI9JC5kaXIsdGhpcy5kYXRlPSQuZGF0ZSx0aGlzLmNvbW1lbnQ9JC5jb21tZW50LHRoaXMudW5peFBlcm1p''@;'; put 'put ''c3Npb25zPSQudW5peFBlcm1pc3Npb25zLHRoaXMuZG9zUGVybWlzc2lvbnM9JC5kb3NQZXJtaXNzaW9ucyx0aGlzLl9kYXRhPUIsdGhpcy5fZGF0YUJpbmFyeT0kLmJpbmFyeSx0aGlzLm9wdGlvbnM9e2NvbXByZXNzaW9uOiQuY29tcHJlc3Npb24sY29tcHJlc3Npb25PcHRpb25zOiQuY29t''@;'; put 'put ''cHJlc3Npb25PcHRpb25zfX12YXIgcD1pKCIuL3N0cmVhbS9TdHJlYW1IZWxwZXIiKSxkPWkoIi4vc3RyZWFtL0RhdGFXb3JrZXIiKSx2PWkoIi4vdXRmOCIpLF89aSgiLi9jb21wcmVzc2VkT2JqZWN0IiksQT1pKCIuL3N0cmVhbS9HZW5lcmljV29ya2VyIik7dS5wcm90b3R5cGU9e2ludGVy''@;'; put 'put ''bmFsU3RyZWFtOmZ1bmN0aW9uKFApe3ZhciBCPW51bGwsJD0ic3RyaW5nIjt0cnl7aWYoIVApdGhyb3cgbmV3IEVycm9yKCJObyBvdXRwdXQgdHlwZSBzcGVjaWZpZWQuIik7dmFyIEQ9InN0cmluZyI9PT0oJD1QLnRvTG93ZXJDYXNlKCkpfHwidGV4dCI9PT0kOyJiaW5hcnlzdHJpbmciIT09''@;'; put 'put ''JCYmInRleHQiIT09JHx8KCQ9InN0cmluZyIpLEI9dGhpcy5fZGVjb21wcmVzc1dvcmtlcigpO3ZhciB4PSF0aGlzLl9kYXRhQmluYXJ5O3gmJiFEJiYoQj1CLnBpcGUobmV3IHYuVXRmOEVuY29kZVdvcmtlcikpLCF4JiZEJiYoQj1CLnBpcGUobmV3IHYuVXRmOERlY29kZVdvcmtlcikpfWNh''@;'; put 'put ''dGNoKE0peyhCPW5ldyBBKCJlcnJvciIpKS5lcnJvcihNKX1yZXR1cm4gbmV3IHAoQiwkLCIiKX0sYXN5bmM6ZnVuY3Rpb24oUCxCKXtyZXR1cm4gdGhpcy5pbnRlcm5hbFN0cmVhbShQKS5hY2N1bXVsYXRlKEIpfSxub2RlU3RyZWFtOmZ1bmN0aW9uKFAsQil7cmV0dXJuIHRoaXMuaW50ZXJu''@;'; put 'put ''YWxTdHJlYW0oUHx8Im5vZGVidWZmZXIiKS50b05vZGVqc1N0cmVhbShCKX0sX2NvbXByZXNzV29ya2VyOmZ1bmN0aW9uKFAsQil7aWYodGhpcy5fZGF0YSBpbnN0YW5jZW9mIF8mJnRoaXMuX2RhdGEuY29tcHJlc3Npb24ubWFnaWM9PT1QLm1hZ2ljKXJldHVybiB0aGlzLl9kYXRhLmdldENv''@;'; put 'put ''bXByZXNzZWRXb3JrZXIoKTt2YXIgJD10aGlzLl9kZWNvbXByZXNzV29ya2VyKCk7cmV0dXJuIHRoaXMuX2RhdGFCaW5hcnl8fCgkPSQucGlwZShuZXcgdi5VdGY4RW5jb2RlV29ya2VyKSksXy5jcmVhdGVXb3JrZXJGcm9tKCQsUCxCKX0sX2RlY29tcHJlc3NXb3JrZXI6ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fZGF0YSBpbnN0YW5jZW9mIF8/dGhpcy5fZGF0YS5nZXRDb250ZW50V29ya2VyKCk6dGhpcy5fZGF0YSBpbnN0YW5jZW9mIEE/dGhpcy5fZGF0YTpuZXcgZCh0aGlzLl9kYXRhKX19O2Zvcih2YXIgST1bImFzVGV4dCIsImFzQmluYXJ5IiwiYXNOb2RlQnVmZmVyIiwiYXNV''@;'; put 'put ''aW50OEFycmF5IiwiYXNBcnJheUJ1ZmZlciJdLEw9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbW92ZWQgaW4gSlNaaXAgMy4wLCBwbGVhc2UgY2hlY2sgdGhlIHVwZ3JhZGUgZ3VpZGUuIil9LE49MDtOPEkubGVuZ3RoO04rKyl1LnByb3RvdHlw''@;'; put 'put ''ZVtJW05dXT1MO2guZXhwb3J0cz11fSx7Ii4vY29tcHJlc3NlZE9iamVjdCI6MiwiLi9zdHJlYW0vRGF0YVdvcmtlciI6MjcsIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXIiOjI4LCIuL3N0cmVhbS9TdHJlYW1IZWxwZXIiOjI5LCIuL3V0ZjgiOjMxfV0sMzY6W2Z1bmN0aW9uKGksaCxmKXsoZnVu''@;'; put 'put ''Y3Rpb24odSl7dmFyIHAsZCx2PXUuTXV0YXRpb25PYnNlcnZlcnx8dS5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO2lmKHYpe3ZhciBfPTAsQT1uZXcgdihQKSxJPXUuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpO0Eub2JzZXJ2ZShJLHtjaGFyYWN0ZXJEYXRhOiEwfSkscD1mdW5jdGlvbigp''@;'; put 'put ''e0kuZGF0YT1fPSsrXyUyfX1lbHNlIGlmKHUuc2V0SW1tZWRpYXRlfHx2b2lkIDA9PT11Lk1lc3NhZ2VDaGFubmVsKXA9ImRvY3VtZW50ImluIHUmJiJvbnJlYWR5c3RhdGVjaGFuZ2UiaW4gdS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKT9mdW5jdGlvbigpe3ZhciBCPXUuZG9j''@;'; put 'put ''dW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7Qi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtQKCksQi5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxCLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoQiksQj1udWxsfSx1LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGls''@;'; put 'put ''ZChCKX06ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KFAsMCl9O2Vsc2V7dmFyIEw9bmV3IHUuTWVzc2FnZUNoYW5uZWw7TC5wb3J0MS5vbm1lc3NhZ2U9UCxwPWZ1bmN0aW9uKCl7TC5wb3J0Mi5wb3N0TWVzc2FnZSgwKX19dmFyIE49W107ZnVuY3Rpb24gUCgpe3ZhciBCLCQ7ZD0hMDtmb3IodmFy''@;'; put 'put ''IEQ9Ti5sZW5ndGg7RDspe2ZvcigkPU4sTj1bXSxCPS0xOysrQjxEOykkW0JdKCk7RD1OLmxlbmd0aH1kPSExfWguZXhwb3J0cz1mdW5jdGlvbihCKXsxIT09Ti5wdXNoKEIpfHxkfHxwKCl9fSkuY2FsbCh0aGlzLHZvaWQgMCE9PWE/YTp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2lu''@;'; put 'put ''ZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sMzc6W2Z1bmN0aW9uKGksaCxmKXt2YXIgdT1pKCJpbW1lZGlhdGUiKTtmdW5jdGlvbiBwKCl7fXZhciBkPXt9LHY9WyJSRUpFQ1RFRCJdLF89WyJGVUxGSUxMRUQiXSxBPVsiUEVORElORyJdO2Z1bmN0aW9uIEkoRCl7aWYoImZ1bmN0aW9uIiE9dHlw''@;'; put 'put ''ZW9mIEQpdGhyb3cgbmV3IFR5cGVFcnJvcigicmVzb2x2ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIik7dGhpcy5zdGF0ZT1BLHRoaXMucXVldWU9W10sdGhpcy5vdXRjb21lPXZvaWQgMCxEIT09cCYmQih0aGlzLEQpfWZ1bmN0aW9uIEwoRCx4LE0pe3RoaXMucHJvbWlzZT1ELCJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiB4JiYodGhpcy5vbkZ1bGZpbGxlZD14LHRoaXMuY2FsbEZ1bGZpbGxlZD10aGlzLm90aGVyQ2FsbEZ1bGZpbGxlZCksImZ1bmN0aW9uIj09dHlwZW9mIE0mJih0aGlzLm9uUmVqZWN0ZWQ9TSx0aGlzLmNhbGxSZWplY3RlZD10aGlzLm90aGVyQ2FsbFJlamVjdGVkKX1mdW5jdGlv''@;'; put 'put ''biBOKEQseCxNKXt1KGZ1bmN0aW9uKCl7dmFyIGo7dHJ5e2o9eChNKX1jYXRjaChjKXtyZXR1cm4gZC5yZWplY3QoRCxjKX1qPT09RD9kLnJlamVjdChELG5ldyBUeXBlRXJyb3IoIkNhbm5vdCByZXNvbHZlIHByb21pc2Ugd2l0aCBpdHNlbGYiKSk6ZC5yZXNvbHZlKEQsail9KX1mdW5jdGlv''@;'; put 'put ''biBQKEQpe3ZhciB4PUQmJkQudGhlbjtpZihEJiYoIm9iamVjdCI9PXR5cGVvZiBEfHwiZnVuY3Rpb24iPT10eXBlb2YgRCkmJiJmdW5jdGlvbiI9PXR5cGVvZiB4KXJldHVybiBmdW5jdGlvbigpe3guYXBwbHkoRCxhcmd1bWVudHMpfX1mdW5jdGlvbiBCKEQseCl7dmFyIE09ITE7ZnVuY3Rp''@;'; put 'put ''b24gaihnKXtNfHwoTT0hMCxkLnJlamVjdChELGcpKX1mdW5jdGlvbiBjKGcpe018fChNPSEwLGQucmVzb2x2ZShELGcpKX12YXIgbT0kKGZ1bmN0aW9uKCl7eChjLGopfSk7ImVycm9yIj09PW0uc3RhdHVzJiZqKG0udmFsdWUpfWZ1bmN0aW9uICQoRCx4KXt2YXIgTT17fTt0cnl7TS52YWx1''@;'; put 'put ''ZT1EKHgpLE0uc3RhdHVzPSJzdWNjZXNzIn1jYXRjaChqKXtNLnN0YXR1cz0iZXJyb3IiLE0udmFsdWU9an1yZXR1cm4gTX0oaC5leHBvcnRzPUkpLnByb3RvdHlwZS5maW5hbGx5PWZ1bmN0aW9uKEQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBEKXJldHVybiB0aGlzO3ZhciB4PXRoaXMuY29u''@;'; put 'put ''c3RydWN0b3I7cmV0dXJuIHRoaXMudGhlbihmdW5jdGlvbihNKXtyZXR1cm4geC5yZXNvbHZlKEQoKSkudGhlbihmdW5jdGlvbigpe3JldHVybiBNfSl9LGZ1bmN0aW9uKE0pe3JldHVybiB4LnJlc29sdmUoRCgpKS50aGVuKGZ1bmN0aW9uKCl7dGhyb3cgTX0pfSl9LEkucHJvdG90eXBlLmNh''@;'; put 'put ''dGNoPWZ1bmN0aW9uKEQpe3JldHVybiB0aGlzLnRoZW4obnVsbCxEKX0sSS5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihELHgpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBEJiZ0aGlzLnN0YXRlPT09X3x8ImZ1bmN0aW9uIiE9dHlwZW9mIHgmJnRoaXMuc3RhdGU9PT12KXJldHVybiB0aGlzO3Zh''@;'; put 'put ''ciBNPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHApO3JldHVybiB0aGlzLnN0YXRlIT09QT9OKE0sdGhpcy5zdGF0ZT09PV8/RDp4LHRoaXMub3V0Y29tZSk6dGhpcy5xdWV1ZS5wdXNoKG5ldyBMKE0sRCx4KSksTX0sTC5wcm90b3R5cGUuY2FsbEZ1bGZpbGxlZD1mdW5jdGlvbihEKXtkLnJlc29s''@;'; put 'put ''dmUodGhpcy5wcm9taXNlLEQpfSxMLnByb3RvdHlwZS5vdGhlckNhbGxGdWxmaWxsZWQ9ZnVuY3Rpb24oRCl7Tih0aGlzLnByb21pc2UsdGhpcy5vbkZ1bGZpbGxlZCxEKX0sTC5wcm90b3R5cGUuY2FsbFJlamVjdGVkPWZ1bmN0aW9uKEQpe2QucmVqZWN0KHRoaXMucHJvbWlzZSxEKX0sTC5w''@;'; put 'put ''cm90b3R5cGUub3RoZXJDYWxsUmVqZWN0ZWQ9ZnVuY3Rpb24oRCl7Tih0aGlzLnByb21pc2UsdGhpcy5vblJlamVjdGVkLEQpfSxkLnJlc29sdmU9ZnVuY3Rpb24oRCx4KXt2YXIgTT0kKFAseCk7aWYoImVycm9yIj09PU0uc3RhdHVzKXJldHVybiBkLnJlamVjdChELE0udmFsdWUpO3ZhciBq''@;'; put 'put ''PU0udmFsdWU7aWYoailCKEQsaik7ZWxzZXtELnN0YXRlPV8sRC5vdXRjb21lPXg7Zm9yKHZhciBjPS0xLG09RC5xdWV1ZS5sZW5ndGg7KytjPG07KUQucXVldWVbY10uY2FsbEZ1bGZpbGxlZCh4KX1yZXR1cm4gRH0sZC5yZWplY3Q9ZnVuY3Rpb24oRCx4KXtELnN0YXRlPXYsRC5vdXRjb21l''@;'; put 'put ''PXg7Zm9yKHZhciBNPS0xLGo9RC5xdWV1ZS5sZW5ndGg7KytNPGo7KUQucXVldWVbTV0uY2FsbFJlamVjdGVkKHgpO3JldHVybiBEfSxJLnJlc29sdmU9ZnVuY3Rpb24oRCl7cmV0dXJuIEQgaW5zdGFuY2VvZiB0aGlzP0Q6ZC5yZXNvbHZlKG5ldyB0aGlzKHApLEQpfSxJLnJlamVjdD1mdW5j''@;'; put 'put ''dGlvbihEKXt2YXIgeD1uZXcgdGhpcyhwKTtyZXR1cm4gZC5yZWplY3QoeCxEKX0sSS5hbGw9ZnVuY3Rpb24oRCl7dmFyIHg9dGhpcztpZigiW29iamVjdCBBcnJheV0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEQpKXJldHVybiB0aGlzLnJlamVjdChuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJtdXN0IGJlIGFuIGFycmF5IikpO3ZhciBNPUQubGVuZ3RoLGo9ITE7aWYoIU0pcmV0dXJuIHRoaXMucmVzb2x2ZShbXSk7Zm9yKHZhciBjPW5ldyBBcnJheShNKSxtPTAsZz0tMSx5PW5ldyB0aGlzKHApOysrZzxNOyl3KERbZ10sZyk7cmV0dXJuIHk7ZnVuY3Rpb24gdyhrLE8pe3gucmVz''@;'; put 'put ''b2x2ZShrKS50aGVuKGZ1bmN0aW9uKHope2NbT109eiwrK20hPT1NfHxqfHwoaj0hMCxkLnJlc29sdmUoeSxjKSl9LGZ1bmN0aW9uKHope2p8fChqPSEwLGQucmVqZWN0KHkseikpfSl9fSxJLnJhY2U9ZnVuY3Rpb24oRCl7aWYoIltvYmplY3QgQXJyYXldIiE9PU9iamVjdC5wcm90b3R5cGUu''@;'; put 'put ''dG9TdHJpbmcuY2FsbChEKSlyZXR1cm4gdGhpcy5yZWplY3QobmV3IFR5cGVFcnJvcigibXVzdCBiZSBhbiBhcnJheSIpKTt2YXIgeD1ELmxlbmd0aCxNPSExO2lmKCF4KXJldHVybiB0aGlzLnJlc29sdmUoW10pO2Zvcih2YXIgYz0tMSxtPW5ldyB0aGlzKHApOysrYzx4Oyl0aGlzLnJlc29s''@;'; put 'put ''dmUoRFtjXSkudGhlbihmdW5jdGlvbihnKXtNfHwoTT0hMCxkLnJlc29sdmUobSxnKSl9LGZ1bmN0aW9uKGcpe018fChNPSEwLGQucmVqZWN0KG0sZykpfSk7cmV0dXJuIG19fSx7aW1tZWRpYXRlOjM2fV0sMzg6W2Z1bmN0aW9uKGksaCxmKXt2YXIgdT17fTsoMCxpKCIuL2xpYi91dGlscy9j''@;'; put 'put ''b21tb24iKS5hc3NpZ24pKHUsaSgiLi9saWIvZGVmbGF0ZSIpLGkoIi4vbGliL2luZmxhdGUiKSxpKCIuL2xpYi96bGliL2NvbnN0YW50cyIpKSxoLmV4cG9ydHM9dX0seyIuL2xpYi9kZWZsYXRlIjozOSwiLi9saWIvaW5mbGF0ZSI6NDAsIi4vbGliL3V0aWxzL2NvbW1vbiI6NDEsIi4vbGli''@;'; put 'put ''L3psaWIvY29uc3RhbnRzIjo0NH1dLDM5OltmdW5jdGlvbihpLGgsZil7dmFyIHU9aSgiLi96bGliL2RlZmxhdGUiKSxwPWkoIi4vdXRpbHMvY29tbW9uIiksZD1pKCIuL3V0aWxzL3N0cmluZ3MiKSx2PWkoIi4vemxpYi9tZXNzYWdlcyIpLF89aSgiLi96bGliL3pzdHJlYW0iKSxBPU9iamVj''@;'; put 'put ''dC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gSShOKXtpZighKHRoaXMgaW5zdGFuY2VvZiBJKSlyZXR1cm4gbmV3IEkoTik7dGhpcy5vcHRpb25zPXAuYXNzaWduKHtsZXZlbDotMSxtZXRob2Q6OCxjaHVua1NpemU6MTYzODQsd2luZG93Qml0czoxNSxtZW1MZXZlbDo4LHN0cmF0ZWd5''@;'; put 'put ''OjAsdG86IiJ9LE58fHt9KTt2YXIgUD10aGlzLm9wdGlvbnM7UC5yYXcmJjA8UC53aW5kb3dCaXRzP1Aud2luZG93Qml0cz0tUC53aW5kb3dCaXRzOlAuZ3ppcCYmMDxQLndpbmRvd0JpdHMmJlAud2luZG93Qml0czwxNiYmKFAud2luZG93Qml0cys9MTYpLHRoaXMuZXJyPTAsdGhpcy5tc2c9''@;'; put 'put ''IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IF8sdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciBCPXUuZGVmbGF0ZUluaXQyKHRoaXMuc3RybSxQLmxldmVsLFAubWV0aG9kLFAud2luZG93Qml0cyxQLm1lbUxldmVsLFAuc3RyYXRlZ3kpO2lmKDAhPT1CKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcih2W0JdKTtpZihQLmhlYWRlciYmdS5kZWZsYXRlU2V0SGVhZGVyKHRoaXMuc3RybSxQLmhlYWRlciksUC5kaWN0aW9uYXJ5KXt2YXIgJDtpZigkPSJzdHJpbmciPT10eXBlb2YgUC5kaWN0aW9uYXJ5P2Quc3RyaW5nMmJ1ZihQLmRpY3Rpb25hcnkpOiJbb2JqZWN0IEFy''@;'; put 'put ''cmF5QnVmZmVyXSI9PT1BLmNhbGwoUC5kaWN0aW9uYXJ5KT9uZXcgVWludDhBcnJheShQLmRpY3Rpb25hcnkpOlAuZGljdGlvbmFyeSwwIT09KEI9dS5kZWZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sJCkpKXRocm93IG5ldyBFcnJvcih2W0JdKTt0aGlzLl9kaWN0X3NldD0hMH19ZnVu''@;'; put 'put ''Y3Rpb24gTChOLFApe3ZhciBCPW5ldyBJKFApO2lmKEIucHVzaChOLCEwKSxCLmVycil0aHJvdyBCLm1zZ3x8dltCLmVycl07cmV0dXJuIEIucmVzdWx0fUkucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oTixQKXt2YXIgQiwkLEQ9dGhpcy5zdHJtLHg9dGhpcy5vcHRpb25zLmNodW5rU2l6ZTtp''@;'; put 'put ''Zih0aGlzLmVuZGVkKXJldHVybiExOyQ9UD09PX5+UD9QOiEwPT09UD80OjAsRC5pbnB1dD0ic3RyaW5nIj09dHlwZW9mIE4/ZC5zdHJpbmcyYnVmKE4pOiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1BLmNhbGwoTik/bmV3IFVpbnQ4QXJyYXkoTik6TixELm5leHRfaW49MCxELmF2YWlsX2lu''@;'; put 'put ''PUQuaW5wdXQubGVuZ3RoO2Rve2lmKDA9PT1ELmF2YWlsX291dCYmKEQub3V0cHV0PW5ldyBwLkJ1ZjgoeCksRC5uZXh0X291dD0wLEQuYXZhaWxfb3V0PXgpLDEhPT0oQj11LmRlZmxhdGUoRCwkKSkmJjAhPT1CKXJldHVybiB0aGlzLm9uRW5kKEIpLCEodGhpcy5lbmRlZD0hMCk7MCE9PUQu''@;'; put 'put ''YXZhaWxfb3V0JiYoMCE9PUQuYXZhaWxfaW58fDQhPT0kJiYyIT09JCl8fHRoaXMub25EYXRhKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP2QuYnVmMmJpbnN0cmluZyhwLnNocmlua0J1ZihELm91dHB1dCxELm5leHRfb3V0KSk6cC5zaHJpbmtCdWYoRC5vdXRwdXQsRC5uZXh0X291dCkp''@;'; put 'put ''fXdoaWxlKCgwPEQuYXZhaWxfaW58fDA9PT1ELmF2YWlsX291dCkmJjEhPT1CKTtyZXR1cm4gND09PSQ/KEI9dS5kZWZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChCKSx0aGlzLmVuZGVkPSEwLDA9PT1CKToyIT09JHx8KHRoaXMub25FbmQoMCksIShELmF2YWlsX291dD0wKSl9LEku''@;'; put 'put ''cHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihOKXt0aGlzLmNodW5rcy5wdXNoKE4pfSxJLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihOKXswPT09TiYmKHRoaXMucmVzdWx0PSJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMuY2h1bmtzLmpvaW4oIiIpOnAuZmxhdHRlbkNodW5rcyh0''@;'; put 'put ''aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPU4sdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sZi5EZWZsYXRlPUksZi5kZWZsYXRlPUwsZi5kZWZsYXRlUmF3PWZ1bmN0aW9uKE4sUCl7cmV0dXJuKFA9UHx8e30pLnJhdz0hMCxMKE4sUCl9LGYuZ3ppcD1mdW5jdGlvbihOLFAp''@;'; put 'put ''e3JldHVybihQPVB8fHt9KS5nemlwPSEwLEwoTixQKX19LHsiLi91dGlscy9jb21tb24iOjQxLCIuL3V0aWxzL3N0cmluZ3MiOjQyLCIuL3psaWIvZGVmbGF0ZSI6NDYsIi4vemxpYi9tZXNzYWdlcyI6NTEsIi4vemxpYi96c3RyZWFtIjo1M31dLDQwOltmdW5jdGlvbihpLGgsZil7dmFyIHU9''@;'; put 'put ''aSgiLi96bGliL2luZmxhdGUiKSxwPWkoIi4vdXRpbHMvY29tbW9uIiksZD1pKCIuL3V0aWxzL3N0cmluZ3MiKSx2PWkoIi4vemxpYi9jb25zdGFudHMiKSxfPWkoIi4vemxpYi9tZXNzYWdlcyIpLEE9aSgiLi96bGliL3pzdHJlYW0iKSxJPWkoIi4vemxpYi9nemhlYWRlciIpLEw9T2JqZWN0''@;'; put 'put ''LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBOKEIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIE4pKXJldHVybiBuZXcgTihCKTt0aGlzLm9wdGlvbnM9cC5hc3NpZ24oe2NodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjAsdG86IiJ9LEJ8fHt9KTt2YXIgJD10aGlzLm9wdGlvbnM7JC5yYXcm''@;'; put 'put ''JjA8PSQud2luZG93Qml0cyYmJC53aW5kb3dCaXRzPDE2JiYoJC53aW5kb3dCaXRzPS0kLndpbmRvd0JpdHMsMD09PSQud2luZG93Qml0cyYmKCQud2luZG93Qml0cz0tMTUpKSwhKDA8PSQud2luZG93Qml0cyYmJC53aW5kb3dCaXRzPDE2KXx8QiYmQi53aW5kb3dCaXRzfHwoJC53aW5kb3dC''@;'; put 'put ''aXRzKz0zMiksMTU8JC53aW5kb3dCaXRzJiYkLndpbmRvd0JpdHM8NDgmJiEoMTUmJC53aW5kb3dCaXRzKSYmKCQud2luZG93Qml0c3w9MTUpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IEEsdGhpcy5zdHJtLmF2YWls''@;'; put 'put ''X291dD0wO3ZhciBEPXUuaW5mbGF0ZUluaXQyKHRoaXMuc3RybSwkLndpbmRvd0JpdHMpO2lmKEQhPT12LlpfT0spdGhyb3cgbmV3IEVycm9yKF9bRF0pO3RoaXMuaGVhZGVyPW5ldyBJLHUuaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpfWZ1bmN0aW9uIFAoQiwkKXt2''@;'; put 'put ''YXIgRD1uZXcgTigkKTtpZihELnB1c2goQiwhMCksRC5lcnIpdGhyb3cgRC5tc2d8fF9bRC5lcnJdO3JldHVybiBELnJlc3VsdH1OLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEIsJCl7dmFyIEQseCxNLGosYyxtLGc9dGhpcy5zdHJtLHk9dGhpcy5vcHRpb25zLmNodW5rU2l6ZSx3PXRoaXMu''@;'; put 'put ''b3B0aW9ucy5kaWN0aW9uYXJ5LGs9ITE7aWYodGhpcy5lbmRlZClyZXR1cm4hMTt4PSQ9PT1+fiQ/JDohMD09PSQ/di5aX0ZJTklTSDp2LlpfTk9fRkxVU0gsZy5pbnB1dD0ic3RyaW5nIj09dHlwZW9mIEI/ZC5iaW5zdHJpbmcyYnVmKEIpOiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1MLmNh''@;'; put 'put ''bGwoQik/bmV3IFVpbnQ4QXJyYXkoQik6QixnLm5leHRfaW49MCxnLmF2YWlsX2luPWcuaW5wdXQubGVuZ3RoO2Rve2lmKDA9PT1nLmF2YWlsX291dCYmKGcub3V0cHV0PW5ldyBwLkJ1ZjgoeSksZy5uZXh0X291dD0wLGcuYXZhaWxfb3V0PXkpLChEPXUuaW5mbGF0ZShnLHYuWl9OT19GTFVT''@;'; put 'put ''SCkpPT09di5aX05FRURfRElDVCYmdyYmKG09InN0cmluZyI9PXR5cGVvZiB3P2Quc3RyaW5nMmJ1Zih3KToiW29iamVjdCBBcnJheUJ1ZmZlcl0iPT09TC5jYWxsKHcpP25ldyBVaW50OEFycmF5KHcpOncsRD11LmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxtKSksRD09PXYuWl9C''@;'; put 'put ''VUZfRVJST1ImJiEwPT09ayYmKEQ9di5aX09LLGs9ITEpLEQhPT12LlpfU1RSRUFNX0VORCYmRCE9PXYuWl9PSylyZXR1cm4gdGhpcy5vbkVuZChEKSwhKHRoaXMuZW5kZWQ9ITApO2cubmV4dF9vdXQmJigwIT09Zy5hdmFpbF9vdXQmJkQhPT12LlpfU1RSRUFNX0VORCYmKDAhPT1nLmF2YWls''@;'; put 'put ''X2lufHx4IT09di5aX0ZJTklTSCYmeCE9PXYuWl9TWU5DX0ZMVVNIKXx8KCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvPyhNPWQudXRmOGJvcmRlcihnLm91dHB1dCxnLm5leHRfb3V0KSxqPWcubmV4dF9vdXQtTSxjPWQuYnVmMnN0cmluZyhnLm91dHB1dCxNKSxnLm5leHRfb3V0PWosZy5h''@;'; put 'put ''dmFpbF9vdXQ9eS1qLGomJnAuYXJyYXlTZXQoZy5vdXRwdXQsZy5vdXRwdXQsTSxqLDApLHRoaXMub25EYXRhKGMpKTp0aGlzLm9uRGF0YShwLnNocmlua0J1ZihnLm91dHB1dCxnLm5leHRfb3V0KSkpKSwwPT09Zy5hdmFpbF9pbiYmMD09PWcuYXZhaWxfb3V0JiYoaz0hMCl9d2hpbGUoKDA8''@;'; put 'put ''Zy5hdmFpbF9pbnx8MD09PWcuYXZhaWxfb3V0KSYmRCE9PXYuWl9TVFJFQU1fRU5EKTtyZXR1cm4gRD09PXYuWl9TVFJFQU1fRU5EJiYoeD12LlpfRklOSVNIKSx4PT09di5aX0ZJTklTSD8oRD11LmluZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKEQpLHRoaXMuZW5kZWQ9ITAsRD09''@;'; put 'put ''PXYuWl9PSyk6eCE9PXYuWl9TWU5DX0ZMVVNIfHwodGhpcy5vbkVuZCh2LlpfT0spLCEoZy5hdmFpbF9vdXQ9MCkpfSxOLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24oQil7dGhpcy5jaHVua3MucHVzaChCKX0sTi5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24oQil7Qj09PXYuWl9PSyYmKHRo''@;'; put 'put ''aXMucmVzdWx0PSJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMuY2h1bmtzLmpvaW4oIiIpOnAuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPUIsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sZi5JbmZsYXRlPU4sZi5pbmZsYXRlPVAsZi5p''@;'; put 'put ''bmZsYXRlUmF3PWZ1bmN0aW9uKEIsJCl7cmV0dXJuKCQ9JHx8e30pLnJhdz0hMCxQKEIsJCl9LGYudW5nemlwPVB9LHsiLi91dGlscy9jb21tb24iOjQxLCIuL3V0aWxzL3N0cmluZ3MiOjQyLCIuL3psaWIvY29uc3RhbnRzIjo0NCwiLi96bGliL2d6aGVhZGVyIjo0NywiLi96bGliL2luZmxh''@;'; put 'put ''dGUiOjQ5LCIuL3psaWIvbWVzc2FnZXMiOjUxLCIuL3psaWIvenN0cmVhbSI6NTN9XSw0MTpbZnVuY3Rpb24oaSxoLGYpe3ZhciB1PXR5cGVvZiBVaW50OEFycmF5PCJ1IiYmdHlwZW9mIFVpbnQxNkFycmF5PCJ1IiYmdHlwZW9mIEludDMyQXJyYXk8InUiO2YuYXNzaWduPWZ1bmN0aW9uKHYp''@;'; put 'put ''e2Zvcih2YXIgXz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7Xy5sZW5ndGg7KXt2YXIgQT1fLnNoaWZ0KCk7aWYoQSl7aWYoIm9iamVjdCIhPXR5cGVvZiBBKXRocm93IG5ldyBUeXBlRXJyb3IoQSsibXVzdCBiZSBub24tb2JqZWN0Iik7Zm9yKHZhciBJIGluIEEp''@;'; put 'put ''QS5oYXNPd25Qcm9wZXJ0eShJKSYmKHZbSV09QVtJXSl9fXJldHVybiB2fSxmLnNocmlua0J1Zj1mdW5jdGlvbih2LF8pe3JldHVybiB2Lmxlbmd0aD09PV8/djp2LnN1YmFycmF5P3Yuc3ViYXJyYXkoMCxfKToodi5sZW5ndGg9Xyx2KX07dmFyIHA9e2FycmF5U2V0OmZ1bmN0aW9uKHYsXyxB''@;'; put 'put ''LEksTCl7aWYoXy5zdWJhcnJheSYmdi5zdWJhcnJheSl2LnNldChfLnN1YmFycmF5KEEsQStJKSxMKTtlbHNlIGZvcih2YXIgTj0wO048STtOKyspdltMK05dPV9bQStOXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbih2KXt2YXIgXyxBLEksTCxOLFA7Zm9yKF89ST0wLEE9di5sZW5ndGg7XzxB''@;'; put 'put ''O18rKylJKz12W19dLmxlbmd0aDtmb3IoUD1uZXcgVWludDhBcnJheShJKSxfPUw9MCxBPXYubGVuZ3RoO188QTtfKyspUC5zZXQoTj12W19dLEwpLEwrPU4ubGVuZ3RoO3JldHVybiBQfX0sZD17YXJyYXlTZXQ6ZnVuY3Rpb24odixfLEEsSSxMKXtmb3IodmFyIE49MDtOPEk7TisrKXZbTCtO''@;'; put 'put ''XT1fW0ErTl19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24odil7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLHYpfX07Zi5zZXRUeXBlZD1mdW5jdGlvbih2KXt2PyhmLkJ1Zjg9VWludDhBcnJheSxmLkJ1ZjE2PVVpbnQxNkFycmF5LGYuQnVmMzI9SW50MzJBcnJheSxmLmFzc2lnbihmLHApKToo''@;'; put 'put ''Zi5CdWY4PUFycmF5LGYuQnVmMTY9QXJyYXksZi5CdWYzMj1BcnJheSxmLmFzc2lnbihmLGQpKX0sZi5zZXRUeXBlZCh1KX0se31dLDQyOltmdW5jdGlvbihpLGgsZil7dmFyIHU9aSgiLi9jb21tb24iKSxwPSEwLGQ9ITA7dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxbMF0p''@;'; put 'put ''fWNhdGNoe3A9ITF9dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgxKSl9Y2F0Y2h7ZD0hMX1mb3IodmFyIHY9bmV3IHUuQnVmOCgyNTYpLF89MDtfPDI1NjtfKyspdltfXT0yNTI8PV8/NjoyNDg8PV8/NToyNDA8PV8/NDoyMjQ8PV8/MzoxOTI8PV8/''@;'; put 'put ''MjoxO2Z1bmN0aW9uIEEoSSxMKXtpZihMPDY1NTM3JiYoSS5zdWJhcnJheSYmZHx8IUkuc3ViYXJyYXkmJnApKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdS5zaHJpbmtCdWYoSSxMKSk7Zm9yKHZhciBOPSIiLFA9MDtQPEw7UCsrKU4rPVN0cmluZy5mcm9tQ2hhckNv''@;'; put 'put ''ZGUoSVtQXSk7cmV0dXJuIE59dlsyNTRdPXZbMjU0XT0xLGYuc3RyaW5nMmJ1Zj1mdW5jdGlvbihJKXt2YXIgTCxOLFAsQiwkLEQ9SS5sZW5ndGgseD0wO2ZvcihCPTA7QjxEO0IrKyk1NTI5Nj09KDY0NTEyJihOPUkuY2hhckNvZGVBdChCKSkpJiZCKzE8RCYmNTYzMjA9PSg2NDUxMiYoUD1J''@;'; put 'put ''LmNoYXJDb2RlQXQoQisxKSkpJiYoTj02NTUzNisoTi01NTI5Njw8MTApKyhQLTU2MzIwKSxCKyspLHgrPU48MTI4PzE6TjwyMDQ4PzI6Tjw2NTUzNj8zOjQ7Zm9yKEw9bmV3IHUuQnVmOCh4KSxCPSQ9MDskPHg7QisrKTU1Mjk2PT0oNjQ1MTImKE49SS5jaGFyQ29kZUF0KEIpKSkmJkIrMTxE''@;'; put 'put ''JiY1NjMyMD09KDY0NTEyJihQPUkuY2hhckNvZGVBdChCKzEpKSkmJihOPTY1NTM2KyhOLTU1Mjk2PDwxMCkrKFAtNTYzMjApLEIrKyksTjwxMjg/TFskKytdPU46KE48MjA0OD9MWyQrK109MTkyfE4+Pj42OihOPDY1NTM2P0xbJCsrXT0yMjR8Tj4+PjEyOihMWyQrK109MjQwfE4+Pj4xOCxM''@;'; put 'put ''WyQrK109MTI4fE4+Pj4xMiY2MyksTFskKytdPTEyOHxOPj4+NiY2MyksTFskKytdPTEyOHw2MyZOKTtyZXR1cm4gTH0sZi5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKEkpe3JldHVybiBBKEksSS5sZW5ndGgpfSxmLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oSSl7Zm9yKHZhciBMPW5ldyB1LkJ1''@;'; put 'put ''ZjgoSS5sZW5ndGgpLE49MCxQPUwubGVuZ3RoO048UDtOKyspTFtOXT1JLmNoYXJDb2RlQXQoTik7cmV0dXJuIEx9LGYuYnVmMnN0cmluZz1mdW5jdGlvbihJLEwpe3ZhciBOLFAsQiwkLEQ9THx8SS5sZW5ndGgseD1uZXcgQXJyYXkoMipEKTtmb3IoTj1QPTA7TjxEOylpZigoQj1JW04rK10p''@;'; put 'put ''PDEyOCl4W1ArK109QjtlbHNlIGlmKDQ8KCQ9dltCXSkpeFtQKytdPTY1NTMzLE4rPSQtMTtlbHNle2ZvcihCJj0yPT09JD8zMTozPT09JD8xNTo3OzE8JCYmTjxEOylCPUI8PDZ8NjMmSVtOKytdLCQtLTsxPCQ/eFtQKytdPTY1NTMzOkI8NjU1MzY/eFtQKytdPUI6KHhbUCsrXT01NTI5Nnwo''@;'; put 'put ''Qi09NjU1MzYpPj4xMCYxMDIzLHhbUCsrXT01NjMyMHwxMDIzJkIpfXJldHVybiBBKHgsUCl9LGYudXRmOGJvcmRlcj1mdW5jdGlvbihJLEwpe3ZhciBOO2ZvcigoTD1MfHxJLmxlbmd0aCk+SS5sZW5ndGgmJihMPUkubGVuZ3RoKSxOPUwtMTswPD1OJiYxMjg9PSgxOTImSVtOXSk7KU4tLTty''@;'; put 'put ''ZXR1cm4gTjwwfHwwPT09Tj9MOk4rdltJW05dXT5MP046TH19LHsiLi9jb21tb24iOjQxfV0sNDM6W2Z1bmN0aW9uKGksaCxmKXtoLmV4cG9ydHM9ZnVuY3Rpb24odSxwLGQsdil7Zm9yKHZhciBfPTY1NTM1JnUsQT11Pj4+MTYmNjU1MzUsST0wOzAhPT1kOyl7Zm9yKGQtPUk9MmUzPGQ/MmUz''@;'; put 'put ''OmQ7QT1BKyhfPV8rcFt2KytdfDApfDAsLS1JOyk7XyU9NjU1MjEsQSU9NjU1MjF9cmV0dXJuIF98QTw8MTZ9fSx7fV0sNDQ6W2Z1bmN0aW9uKGksaCxmKXtoLmV4cG9ydHM9e1pfTk9fRkxVU0g6MCxaX1BBUlRJQUxfRkxVU0g6MSxaX1NZTkNfRkxVU0g6MixaX0ZVTExfRkxVU0g6MyxaX0ZJ''@;'; put 'put ''TklTSDo0LFpfQkxPQ0s6NSxaX1RSRUVTOjYsWl9PSzowLFpfU1RSRUFNX0VORDoxLFpfTkVFRF9ESUNUOjIsWl9FUlJOTzotMSxaX1NUUkVBTV9FUlJPUjotMixaX0RBVEFfRVJST1I6LTMsWl9CVUZfRVJST1I6LTUsWl9OT19DT01QUkVTU0lPTjowLFpfQkVTVF9TUEVFRDoxLFpfQkVTVF9D''@;'; put 'put ''T01QUkVTU0lPTjo5LFpfREVGQVVMVF9DT01QUkVTU0lPTjotMSxaX0ZJTFRFUkVEOjEsWl9IVUZGTUFOX09OTFk6MixaX1JMRTozLFpfRklYRUQ6NCxaX0RFRkFVTFRfU1RSQVRFR1k6MCxaX0JJTkFSWTowLFpfVEVYVDoxLFpfVU5LTk9XTjoyLFpfREVGTEFURUQ6OH19LHt9XSw0NTpbZnVu''@;'; put 'put ''Y3Rpb24oaSxoLGYpe3ZhciB1PWZ1bmN0aW9uKCl7Zm9yKHZhciBwLGQ9W10sdj0wO3Y8MjU2O3YrKyl7cD12O2Zvcih2YXIgXz0wO188ODtfKyspcD0xJnA/Mzk4ODI5MjM4NF5wPj4+MTpwPj4+MTtkW3ZdPXB9cmV0dXJuIGR9KCk7aC5leHBvcnRzPWZ1bmN0aW9uKHAsZCx2LF8pe3ZhciBB''@;'; put 'put ''PXUsST1fK3Y7cF49LTE7Zm9yKHZhciBMPV87TDxJO0wrKylwPXA+Pj44XkFbMjU1JihwXmRbTF0pXTtyZXR1cm4tMV5wfX0se31dLDQ2OltmdW5jdGlvbihpLGgsZil7dmFyIHUscD1pKCIuLi91dGlscy9jb21tb24iKSxkPWkoIi4vdHJlZXMiKSx2PWkoIi4vYWRsZXIzMiIpLF89aSgiLi9j''@;'; put 'put ''cmMzMiIpLEE9aSgiLi9tZXNzYWdlcyIpLEk9LTIsTD0yNTgsTj0yNjIsUD0xMTM7ZnVuY3Rpb24gQihSLEgpe3JldHVybiBSLm1zZz1BW0hdLEh9ZnVuY3Rpb24gJChSKXtyZXR1cm4oUjw8MSktKDQ8Uj85OjApfWZ1bmN0aW9uIEQoUil7Zm9yKHZhciBIPVIubGVuZ3RoOzA8PS0tSDspUltI''@;'; put 'put ''XT0wfWZ1bmN0aW9uIHgoUil7dmFyIEg9Ui5zdGF0ZSxUPUgucGVuZGluZztUPlIuYXZhaWxfb3V0JiYoVD1SLmF2YWlsX291dCksMCE9PVQmJihwLmFycmF5U2V0KFIub3V0cHV0LEgucGVuZGluZ19idWYsSC5wZW5kaW5nX291dCxULFIubmV4dF9vdXQpLFIubmV4dF9vdXQrPVQsSC5wZW5k''@;'; put 'put ''aW5nX291dCs9VCxSLnRvdGFsX291dCs9VCxSLmF2YWlsX291dC09VCxILnBlbmRpbmctPVQsMD09PUgucGVuZGluZyYmKEgucGVuZGluZ19vdXQ9MCkpfWZ1bmN0aW9uIE0oUixIKXtkLl90cl9mbHVzaF9ibG9jayhSLDA8PVIuYmxvY2tfc3RhcnQ/Ui5ibG9ja19zdGFydDotMSxSLnN0cnN0''@;'; put 'put ''YXJ0LVIuYmxvY2tfc3RhcnQsSCksUi5ibG9ja19zdGFydD1SLnN0cnN0YXJ0LHgoUi5zdHJtKX1mdW5jdGlvbiBqKFIsSCl7Ui5wZW5kaW5nX2J1ZltSLnBlbmRpbmcrK109SH1mdW5jdGlvbiBjKFIsSCl7Ui5wZW5kaW5nX2J1ZltSLnBlbmRpbmcrK109SD4+PjgmMjU1LFIucGVuZGluZ19i''@;'; put 'put ''dWZbUi5wZW5kaW5nKytdPTI1NSZIfWZ1bmN0aW9uIG0oUixIKXt2YXIgVCxDLEY9Ui5tYXhfY2hhaW5fbGVuZ3RoLHE9Ui5zdHJzdGFydCxZPVIucHJldl9sZW5ndGgsWD1SLm5pY2VfbWF0Y2gsSz1SLnN0cnN0YXJ0PlIud19zaXplLU4/Ui5zdHJzdGFydC0oUi53X3NpemUtTik6MCxydD1S''@;'; put 'put ''LndpbmRvdyx0dD1SLndfbWFzayxXPVIucHJldixRPVIuc3Ryc3RhcnQrTCxHPXJ0W3ErWS0xXSxldD1ydFtxK1ldO1IucHJldl9sZW5ndGg+PVIuZ29vZF9tYXRjaCYmKEY+Pj0yKSxYPlIubG9va2FoZWFkJiYoWD1SLmxvb2thaGVhZCk7ZG97aWYocnRbKFQ9SCkrWV09PT1ldCYmcnRbVCtZ''@;'; put 'put ''LTFdPT09RyYmcnRbVF09PT1ydFtxXSYmcnRbKytUXT09PXJ0W3ErMV0pe3ErPTIsVCsrO2Rve313aGlsZShydFsrK3FdPT09cnRbKytUXSYmcnRbKytxXT09PXJ0WysrVF0mJnJ0WysrcV09PT1ydFsrK1RdJiZydFsrK3FdPT09cnRbKytUXSYmcnRbKytxXT09PXJ0WysrVF0mJnJ0WysrcV09''@;'; put 'put ''PT1ydFsrK1RdJiZydFsrK3FdPT09cnRbKytUXSYmcnRbKytxXT09PXJ0WysrVF0mJnE8USk7aWYoQz1MLShRLXEpLHE9US1MLFk8Qyl7aWYoUi5tYXRjaF9zdGFydD1ILFg8PShZPUMpKWJyZWFrO0c9cnRbcStZLTFdLGV0PXJ0W3ErWV19fX13aGlsZSgoSD1XW0gmdHRdKT5LJiYwIT0tLUYp''@;'; put 'put ''O3JldHVybiBZPD1SLmxvb2thaGVhZD9ZOlIubG9va2FoZWFkfWZ1bmN0aW9uIGcoUil7dmFyIEgsVCxDLEYscSxZLFgsSyxydCx0dCxXPVIud19zaXplO2Rve2lmKEY9Ui53aW5kb3dfc2l6ZS1SLmxvb2thaGVhZC1SLnN0cnN0YXJ0LFIuc3Ryc3RhcnQ+PVcrKFctTikpe2ZvcihwLmFycmF5''@;'; put 'put ''U2V0KFIud2luZG93LFIud2luZG93LFcsVywwKSxSLm1hdGNoX3N0YXJ0LT1XLFIuc3Ryc3RhcnQtPVcsUi5ibG9ja19zdGFydC09VyxIPVQ9Ui5oYXNoX3NpemU7Qz1SLmhlYWRbLS1IXSxSLmhlYWRbSF09Vzw9Qz9DLVc6MCwtLVQ7KTtmb3IoSD1UPVc7Qz1SLnByZXZbLS1IXSxSLnByZXZb''@;'; put 'put ''SF09Vzw9Qz9DLVc6MCwtLVQ7KTtGKz1XfWlmKDA9PT1SLnN0cm0uYXZhaWxfaW4pYnJlYWs7aWYoWD1SLndpbmRvdyxLPVIuc3Ryc3RhcnQrUi5sb29rYWhlYWQsdHQ9dm9pZCAwLChydD1GKTwodHQ9KFk9Ui5zdHJtKS5hdmFpbF9pbikmJih0dD1ydCksVD0wPT09dHQ/MDooWS5hdmFpbF9p''@;'; put 'put ''bi09dHQscC5hcnJheVNldChYLFkuaW5wdXQsWS5uZXh0X2luLHR0LEspLDE9PT1ZLnN0YXRlLndyYXA/WS5hZGxlcj12KFkuYWRsZXIsWCx0dCxLKToyPT09WS5zdGF0ZS53cmFwJiYoWS5hZGxlcj1fKFkuYWRsZXIsWCx0dCxLKSksWS5uZXh0X2luKz10dCxZLnRvdGFsX2luKz10dCx0dCks''@;'; put 'put ''Ui5sb29rYWhlYWQrPVQsUi5sb29rYWhlYWQrUi5pbnNlcnQ+PTMpZm9yKFIuaW5zX2g9Ui53aW5kb3dbcT1SLnN0cnN0YXJ0LVIuaW5zZXJ0XSxSLmluc19oPShSLmluc19oPDxSLmhhc2hfc2hpZnReUi53aW5kb3dbcSsxXSkmUi5oYXNoX21hc2s7Ui5pbnNlcnQmJihSLmluc19oPShSLmlu''@;'; put 'put ''c19oPDxSLmhhc2hfc2hpZnReUi53aW5kb3dbcSszLTFdKSZSLmhhc2hfbWFzayxSLnByZXZbcSZSLndfbWFza109Ui5oZWFkW1IuaW5zX2hdLFIuaGVhZFtSLmluc19oXT1xLHErKyxSLmluc2VydC0tLCEoUi5sb29rYWhlYWQrUi5pbnNlcnQ8MykpOyk7fXdoaWxlKFIubG9va2FoZWFkPE4m''@;'; put 'put ''JjAhPT1SLnN0cm0uYXZhaWxfaW4pfWZ1bmN0aW9uIHkoUixIKXtmb3IodmFyIFQsQzs7KXtpZihSLmxvb2thaGVhZDxOKXtpZihnKFIpLFIubG9va2FoZWFkPE4mJjA9PT1IKXJldHVybiAxO2lmKDA9PT1SLmxvb2thaGVhZClicmVha31pZihUPTAsUi5sb29rYWhlYWQ+PTMmJihSLmluc19o''@;'; put 'put ''PShSLmluc19oPDxSLmhhc2hfc2hpZnReUi53aW5kb3dbUi5zdHJzdGFydCszLTFdKSZSLmhhc2hfbWFzayxUPVIucHJldltSLnN0cnN0YXJ0JlIud19tYXNrXT1SLmhlYWRbUi5pbnNfaF0sUi5oZWFkW1IuaW5zX2hdPVIuc3Ryc3RhcnQpLDAhPT1UJiZSLnN0cnN0YXJ0LVQ8PVIud19zaXpl''@;'; put 'put ''LU4mJihSLm1hdGNoX2xlbmd0aD1tKFIsVCkpLFIubWF0Y2hfbGVuZ3RoPj0zKWlmKEM9ZC5fdHJfdGFsbHkoUixSLnN0cnN0YXJ0LVIubWF0Y2hfc3RhcnQsUi5tYXRjaF9sZW5ndGgtMyksUi5sb29rYWhlYWQtPVIubWF0Y2hfbGVuZ3RoLFIubWF0Y2hfbGVuZ3RoPD1SLm1heF9sYXp5X21h''@;'; put 'put ''dGNoJiZSLmxvb2thaGVhZD49Myl7Zm9yKFIubWF0Y2hfbGVuZ3RoLS07Ui5zdHJzdGFydCsrLFIuaW5zX2g9KFIuaW5zX2g8PFIuaGFzaF9zaGlmdF5SLndpbmRvd1tSLnN0cnN0YXJ0KzMtMV0pJlIuaGFzaF9tYXNrLFQ9Ui5wcmV2W1Iuc3Ryc3RhcnQmUi53X21hc2tdPVIuaGVhZFtSLmlu''@;'; put 'put ''c19oXSxSLmhlYWRbUi5pbnNfaF09Ui5zdHJzdGFydCwwIT0tLVIubWF0Y2hfbGVuZ3RoOyk7Ui5zdHJzdGFydCsrfWVsc2UgUi5zdHJzdGFydCs9Ui5tYXRjaF9sZW5ndGgsUi5tYXRjaF9sZW5ndGg9MCxSLmluc19oPVIud2luZG93W1Iuc3Ryc3RhcnRdLFIuaW5zX2g9KFIuaW5zX2g8PFIu''@;'; put 'put ''aGFzaF9zaGlmdF5SLndpbmRvd1tSLnN0cnN0YXJ0KzFdKSZSLmhhc2hfbWFzaztlbHNlIEM9ZC5fdHJfdGFsbHkoUiwwLFIud2luZG93W1Iuc3Ryc3RhcnRdKSxSLmxvb2thaGVhZC0tLFIuc3Ryc3RhcnQrKztpZihDJiYoTShSLCExKSwwPT09Ui5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9''@;'; put 'put ''cmV0dXJuIFIuaW5zZXJ0PVIuc3Ryc3RhcnQ8Mj9SLnN0cnN0YXJ0OjIsND09PUg/KE0oUiwhMCksMD09PVIuc3RybS5hdmFpbF9vdXQ/Mzo0KTpSLmxhc3RfbGl0JiYoTShSLCExKSwwPT09Ui5zdHJtLmF2YWlsX291dCk/MToyfWZ1bmN0aW9uIHcoUixIKXtmb3IodmFyIFQsQyxGOzspe2lm''@;'; put 'put ''KFIubG9va2FoZWFkPE4pe2lmKGcoUiksUi5sb29rYWhlYWQ8TiYmMD09PUgpcmV0dXJuIDE7aWYoMD09PVIubG9va2FoZWFkKWJyZWFrfWlmKFQ9MCxSLmxvb2thaGVhZD49MyYmKFIuaW5zX2g9KFIuaW5zX2g8PFIuaGFzaF9zaGlmdF5SLndpbmRvd1tSLnN0cnN0YXJ0KzMtMV0pJlIuaGFz''@;'; put 'put ''aF9tYXNrLFQ9Ui5wcmV2W1Iuc3Ryc3RhcnQmUi53X21hc2tdPVIuaGVhZFtSLmluc19oXSxSLmhlYWRbUi5pbnNfaF09Ui5zdHJzdGFydCksUi5wcmV2X2xlbmd0aD1SLm1hdGNoX2xlbmd0aCxSLnByZXZfbWF0Y2g9Ui5tYXRjaF9zdGFydCxSLm1hdGNoX2xlbmd0aD0yLDAhPT1UJiZSLnBy''@;'; put 'put ''ZXZfbGVuZ3RoPFIubWF4X2xhenlfbWF0Y2gmJlIuc3Ryc3RhcnQtVDw9Ui53X3NpemUtTiYmKFIubWF0Y2hfbGVuZ3RoPW0oUixUKSxSLm1hdGNoX2xlbmd0aDw9NSYmKDE9PT1SLnN0cmF0ZWd5fHwzPT09Ui5tYXRjaF9sZW5ndGgmJjQwOTY8Ui5zdHJzdGFydC1SLm1hdGNoX3N0YXJ0KSYm''@;'; put 'put ''KFIubWF0Y2hfbGVuZ3RoPTIpKSxSLnByZXZfbGVuZ3RoPj0zJiZSLm1hdGNoX2xlbmd0aDw9Ui5wcmV2X2xlbmd0aCl7Zm9yKEY9Ui5zdHJzdGFydCtSLmxvb2thaGVhZC0zLEM9ZC5fdHJfdGFsbHkoUixSLnN0cnN0YXJ0LTEtUi5wcmV2X21hdGNoLFIucHJldl9sZW5ndGgtMyksUi5sb29r''@;'; put 'put ''YWhlYWQtPVIucHJldl9sZW5ndGgtMSxSLnByZXZfbGVuZ3RoLT0yOysrUi5zdHJzdGFydDw9RiYmKFIuaW5zX2g9KFIuaW5zX2g8PFIuaGFzaF9zaGlmdF5SLndpbmRvd1tSLnN0cnN0YXJ0KzMtMV0pJlIuaGFzaF9tYXNrLFQ9Ui5wcmV2W1Iuc3Ryc3RhcnQmUi53X21hc2tdPVIuaGVhZFtS''@;'; put 'put ''Lmluc19oXSxSLmhlYWRbUi5pbnNfaF09Ui5zdHJzdGFydCksMCE9LS1SLnByZXZfbGVuZ3RoOyk7aWYoUi5tYXRjaF9hdmFpbGFibGU9MCxSLm1hdGNoX2xlbmd0aD0yLFIuc3Ryc3RhcnQrKyxDJiYoTShSLCExKSwwPT09Ui5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9ZWxzZSBpZihSLm1h''@;'; put 'put ''dGNoX2F2YWlsYWJsZSl7aWYoKEM9ZC5fdHJfdGFsbHkoUiwwLFIud2luZG93W1Iuc3Ryc3RhcnQtMV0pKSYmTShSLCExKSxSLnN0cnN0YXJ0KyssUi5sb29rYWhlYWQtLSwwPT09Ui5zdHJtLmF2YWlsX291dClyZXR1cm4gMX1lbHNlIFIubWF0Y2hfYXZhaWxhYmxlPTEsUi5zdHJzdGFydCsr''@;'; put 'put ''LFIubG9va2FoZWFkLS19cmV0dXJuIFIubWF0Y2hfYXZhaWxhYmxlJiYoQz1kLl90cl90YWxseShSLDAsUi53aW5kb3dbUi5zdHJzdGFydC0xXSksUi5tYXRjaF9hdmFpbGFibGU9MCksUi5pbnNlcnQ9Ui5zdHJzdGFydDwyP1Iuc3Ryc3RhcnQ6Miw0PT09SD8oTShSLCEwKSwwPT09Ui5zdHJt''@;'; put 'put ''LmF2YWlsX291dD8zOjQpOlIubGFzdF9saXQmJihNKFIsITEpLDA9PT1SLnN0cm0uYXZhaWxfb3V0KT8xOjJ9ZnVuY3Rpb24gayhSLEgsVCxDLEYpe3RoaXMuZ29vZF9sZW5ndGg9Uix0aGlzLm1heF9sYXp5PUgsdGhpcy5uaWNlX2xlbmd0aD1ULHRoaXMubWF4X2NoYWluPUMsdGhpcy5mdW5j''@;'; put 'put ''PUZ9ZnVuY3Rpb24gTygpe3RoaXMuc3RybT1udWxsLHRoaXMuc3RhdHVzPTAsdGhpcy5wZW5kaW5nX2J1Zj1udWxsLHRoaXMucGVuZGluZ19idWZfc2l6ZT0wLHRoaXMucGVuZGluZ19vdXQ9MCx0aGlzLnBlbmRpbmc9MCx0aGlzLndyYXA9MCx0aGlzLmd6aGVhZD1udWxsLHRoaXMuZ3ppbmRl''@;'; put 'put ''eD0wLHRoaXMubWV0aG9kPTgsdGhpcy5sYXN0X2ZsdXNoPS0xLHRoaXMud19zaXplPTAsdGhpcy53X2JpdHM9MCx0aGlzLndfbWFzaz0wLHRoaXMud2luZG93PW51bGwsdGhpcy53aW5kb3dfc2l6ZT0wLHRoaXMucHJldj1udWxsLHRoaXMuaGVhZD1udWxsLHRoaXMuaW5zX2g9MCx0aGlzLmhh''@;'; put 'put ''c2hfc2l6ZT0wLHRoaXMuaGFzaF9iaXRzPTAsdGhpcy5oYXNoX21hc2s9MCx0aGlzLmhhc2hfc2hpZnQ9MCx0aGlzLmJsb2NrX3N0YXJ0PTAsdGhpcy5tYXRjaF9sZW5ndGg9MCx0aGlzLnByZXZfbWF0Y2g9MCx0aGlzLm1hdGNoX2F2YWlsYWJsZT0wLHRoaXMuc3Ryc3RhcnQ9MCx0aGlzLm1h''@;'; put 'put ''dGNoX3N0YXJ0PTAsdGhpcy5sb29rYWhlYWQ9MCx0aGlzLnByZXZfbGVuZ3RoPTAsdGhpcy5tYXhfY2hhaW5fbGVuZ3RoPTAsdGhpcy5tYXhfbGF6eV9tYXRjaD0wLHRoaXMubGV2ZWw9MCx0aGlzLnN0cmF0ZWd5PTAsdGhpcy5nb29kX21hdGNoPTAsdGhpcy5uaWNlX21hdGNoPTAsdGhpcy5k''@;'; put 'put ''eW5fbHRyZWU9bmV3IHAuQnVmMTYoMTE0NiksdGhpcy5keW5fZHRyZWU9bmV3IHAuQnVmMTYoMTIyKSx0aGlzLmJsX3RyZWU9bmV3IHAuQnVmMTYoNzgpLEQodGhpcy5keW5fbHRyZWUpLEQodGhpcy5keW5fZHRyZWUpLEQodGhpcy5ibF90cmVlKSx0aGlzLmxfZGVzYz1udWxsLHRoaXMuZF9k''@;'; put 'put ''ZXNjPW51bGwsdGhpcy5ibF9kZXNjPW51bGwsdGhpcy5ibF9jb3VudD1uZXcgcC5CdWYxNigxNiksdGhpcy5oZWFwPW5ldyBwLkJ1ZjE2KDU3MyksRCh0aGlzLmhlYXApLHRoaXMuaGVhcF9sZW49MCx0aGlzLmhlYXBfbWF4PTAsdGhpcy5kZXB0aD1uZXcgcC5CdWYxNig1NzMpLEQodGhpcy5k''@;'; put 'put ''ZXB0aCksdGhpcy5sX2J1Zj0wLHRoaXMubGl0X2J1ZnNpemU9MCx0aGlzLmxhc3RfbGl0PTAsdGhpcy5kX2J1Zj0wLHRoaXMub3B0X2xlbj0wLHRoaXMuc3RhdGljX2xlbj0wLHRoaXMubWF0Y2hlcz0wLHRoaXMuaW5zZXJ0PTAsdGhpcy5iaV9idWY9MCx0aGlzLmJpX3ZhbGlkPTB9ZnVuY3Rp''@;'; put 'put ''b24geihSKXt2YXIgSDtyZXR1cm4gUiYmUi5zdGF0ZT8oUi50b3RhbF9pbj1SLnRvdGFsX291dD0wLFIuZGF0YV90eXBlPTIsKEg9Ui5zdGF0ZSkucGVuZGluZz0wLEgucGVuZGluZ19vdXQ9MCxILndyYXA8MCYmKEgud3JhcD0tSC53cmFwKSxILnN0YXR1cz1ILndyYXA/NDI6UCxSLmFkbGVy''@;'; put 'put ''PTI9PT1ILndyYXA/MDoxLEgubGFzdF9mbHVzaD0wLGQuX3RyX2luaXQoSCksMCk6QihSLEkpfWZ1bmN0aW9uIFUoUil7dmFyIFQsSD16KFIpO3JldHVybiAwPT09SCYmKChUPVIuc3RhdGUpLndpbmRvd19zaXplPTIqVC53X3NpemUsRChULmhlYWQpLFQubWF4X2xhenlfbWF0Y2g9dVtULmxl''@;'; put 'put ''dmVsXS5tYXhfbGF6eSxULmdvb2RfbWF0Y2g9dVtULmxldmVsXS5nb29kX2xlbmd0aCxULm5pY2VfbWF0Y2g9dVtULmxldmVsXS5uaWNlX2xlbmd0aCxULm1heF9jaGFpbl9sZW5ndGg9dVtULmxldmVsXS5tYXhfY2hhaW4sVC5zdHJzdGFydD0wLFQuYmxvY2tfc3RhcnQ9MCxULmxvb2thaGVh''@;'; put 'put ''ZD0wLFQuaW5zZXJ0PTAsVC5tYXRjaF9sZW5ndGg9VC5wcmV2X2xlbmd0aD0yLFQubWF0Y2hfYXZhaWxhYmxlPTAsVC5pbnNfaD0wKSxIfWZ1bmN0aW9uIFYoUixILFQsQyxGLHEpe2lmKCFSKXJldHVybiBJO3ZhciBZPTE7aWYoLTE9PT1IJiYoSD02KSxDPDA/KFk9MCxDPS1DKToxNTxDJiYo''@;'; put 'put ''WT0yLEMtPTE2KSxGPDF8fDk8Rnx8OCE9PVR8fEM8OHx8MTU8Q3x8SDwwfHw5PEh8fHE8MHx8NDxxKXJldHVybiBCKFIsSSk7OD09PUMmJihDPTkpO3ZhciBYPW5ldyBPO3JldHVybihSLnN0YXRlPVgpLnN0cm09UixYLndyYXA9WSxYLmd6aGVhZD1udWxsLFgud19iaXRzPUMsWC53X3NpemU9''@;'; put 'put ''MTw8WC53X2JpdHMsWC53X21hc2s9WC53X3NpemUtMSxYLmhhc2hfYml0cz1GKzcsWC5oYXNoX3NpemU9MTw8WC5oYXNoX2JpdHMsWC5oYXNoX21hc2s9WC5oYXNoX3NpemUtMSxYLmhhc2hfc2hpZnQ9fn4oKFguaGFzaF9iaXRzKzMtMSkvMyksWC53aW5kb3c9bmV3IHAuQnVmOCgyKlgud19z''@;'; put 'put ''aXplKSxYLmhlYWQ9bmV3IHAuQnVmMTYoWC5oYXNoX3NpemUpLFgucHJldj1uZXcgcC5CdWYxNihYLndfc2l6ZSksWC5saXRfYnVmc2l6ZT0xPDxGKzYsWC5wZW5kaW5nX2J1Zl9zaXplPTQqWC5saXRfYnVmc2l6ZSxYLnBlbmRpbmdfYnVmPW5ldyBwLkJ1ZjgoWC5wZW5kaW5nX2J1Zl9zaXpl''@;'; put 'put ''KSxYLmRfYnVmPTEqWC5saXRfYnVmc2l6ZSxYLmxfYnVmPTMqWC5saXRfYnVmc2l6ZSxYLmxldmVsPUgsWC5zdHJhdGVneT1xLFgubWV0aG9kPVQsVShSKX11PVtuZXcgaygwLDAsMCwwLGZ1bmN0aW9uKFIsSCl7dmFyIFQ9NjU1MzU7Zm9yKFQ+Ui5wZW5kaW5nX2J1Zl9zaXplLTUmJihUPVIu''@;'; put 'put ''cGVuZGluZ19idWZfc2l6ZS01KTs7KXtpZihSLmxvb2thaGVhZDw9MSl7aWYoZyhSKSwwPT09Ui5sb29rYWhlYWQmJjA9PT1IKXJldHVybiAxO2lmKDA9PT1SLmxvb2thaGVhZClicmVha31SLnN0cnN0YXJ0Kz1SLmxvb2thaGVhZCxSLmxvb2thaGVhZD0wO3ZhciBDPVIuYmxvY2tfc3RhcnQr''@;'; put 'put ''VDtpZigoMD09PVIuc3Ryc3RhcnR8fFIuc3Ryc3RhcnQ+PUMpJiYoUi5sb29rYWhlYWQ9Ui5zdHJzdGFydC1DLFIuc3Ryc3RhcnQ9QyxNKFIsITEpLDA9PT1SLnN0cm0uYXZhaWxfb3V0KXx8Ui5zdHJzdGFydC1SLmJsb2NrX3N0YXJ0Pj1SLndfc2l6ZS1OJiYoTShSLCExKSwwPT09Ui5zdHJt''@;'; put 'put ''LmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIFIuaW5zZXJ0PTAsND09PUg/KE0oUiwhMCksMD09PVIuc3RybS5hdmFpbF9vdXQ/Mzo0KTooUi5zdHJzdGFydD5SLmJsb2NrX3N0YXJ0JiZNKFIsITEpLDEpfSksbmV3IGsoNCw0LDgsNCx5KSxuZXcgayg0LDUsMTYsOCx5KSxuZXcgayg0LDYs''@;'; put 'put ''MzIsMzIseSksbmV3IGsoNCw0LDE2LDE2LHcpLG5ldyBrKDgsMTYsMzIsMzIsdyksbmV3IGsoOCwxNiwxMjgsMTI4LHcpLG5ldyBrKDgsMzIsMTI4LDI1Nix3KSxuZXcgaygzMiwxMjgsMjU4LDEwMjQsdyksbmV3IGsoMzIsMjU4LDI1OCw0MDk2LHcpXSxmLmRlZmxhdGVJbml0PWZ1bmN0aW9u''@;'; put 'put ''KFIsSCl7cmV0dXJuIFYoUixILDgsMTUsOCwwKX0sZi5kZWZsYXRlSW5pdDI9VixmLmRlZmxhdGVSZXNldD1VLGYuZGVmbGF0ZVJlc2V0S2VlcD16LGYuZGVmbGF0ZVNldEhlYWRlcj1mdW5jdGlvbihSLEgpe3JldHVybiBSJiZSLnN0YXRlPzIhPT1SLnN0YXRlLndyYXA/STooUi5zdGF0ZS5n''@;'; put 'put ''emhlYWQ9SCwwKTpJfSxmLmRlZmxhdGU9ZnVuY3Rpb24oUixIKXt2YXIgVCxDLEYscTtpZighUnx8IVIuc3RhdGV8fDU8SHx8SDwwKXJldHVybiBSP0IoUixJKTpJO2lmKEM9Ui5zdGF0ZSwhUi5vdXRwdXR8fCFSLmlucHV0JiYwIT09Ui5hdmFpbF9pbnx8NjY2PT09Qy5zdGF0dXMmJjQhPT1I''@;'; put 'put ''KXJldHVybiBCKFIsMD09PVIuYXZhaWxfb3V0Py01OkkpO2lmKEMuc3RybT1SLFQ9Qy5sYXN0X2ZsdXNoLEMubGFzdF9mbHVzaD1ILDQyPT09Qy5zdGF0dXMpaWYoMj09PUMud3JhcClSLmFkbGVyPTAsaihDLDMxKSxqKEMsMTM5KSxqKEMsOCksQy5nemhlYWQ/KGooQywoQy5nemhlYWQudGV4''@;'; put 'put ''dD8xOjApKyhDLmd6aGVhZC5oY3JjPzI6MCkrKEMuZ3poZWFkLmV4dHJhPzQ6MCkrKEMuZ3poZWFkLm5hbWU/ODowKSsoQy5nemhlYWQuY29tbWVudD8xNjowKSksaihDLDI1NSZDLmd6aGVhZC50aW1lKSxqKEMsQy5nemhlYWQudGltZT4+OCYyNTUpLGooQyxDLmd6aGVhZC50aW1lPj4xNiYy''@;'; put 'put ''NTUpLGooQyxDLmd6aGVhZC50aW1lPj4yNCYyNTUpLGooQyw5PT09Qy5sZXZlbD8yOjI8PUMuc3RyYXRlZ3l8fEMubGV2ZWw8Mj80OjApLGooQywyNTUmQy5nemhlYWQub3MpLEMuZ3poZWFkLmV4dHJhJiZDLmd6aGVhZC5leHRyYS5sZW5ndGgmJihqKEMsMjU1JkMuZ3poZWFkLmV4dHJhLmxl''@;'; put 'put ''bmd0aCksaihDLEMuZ3poZWFkLmV4dHJhLmxlbmd0aD4+OCYyNTUpKSxDLmd6aGVhZC5oY3JjJiYoUi5hZGxlcj1fKFIuYWRsZXIsQy5wZW5kaW5nX2J1ZixDLnBlbmRpbmcsMCkpLEMuZ3ppbmRleD0wLEMuc3RhdHVzPTY5KTooaihDLDApLGooQywwKSxqKEMsMCksaihDLDApLGooQywwKSxq''@;'; put 'put ''KEMsOT09PUMubGV2ZWw/MjoyPD1DLnN0cmF0ZWd5fHxDLmxldmVsPDI/NDowKSxqKEMsMyksQy5zdGF0dXM9UCk7ZWxzZXt2YXIgWT04KyhDLndfYml0cy04PDw0KTw8ODtZfD0oMjw9Qy5zdHJhdGVneXx8Qy5sZXZlbDwyPzA6Qy5sZXZlbDw2PzE6Nj09PUMubGV2ZWw/MjozKTw8NiwwIT09''@;'; put 'put ''Qy5zdHJzdGFydCYmKFl8PTMyKSxZKz0zMS1ZJTMxLEMuc3RhdHVzPVAsYyhDLFkpLDAhPT1DLnN0cnN0YXJ0JiYoYyhDLFIuYWRsZXI+Pj4xNiksYyhDLDY1NTM1JlIuYWRsZXIpKSxSLmFkbGVyPTF9aWYoNjk9PT1DLnN0YXR1cylpZihDLmd6aGVhZC5leHRyYSl7Zm9yKEY9Qy5wZW5kaW5n''@;'; put 'put ''O0MuZ3ppbmRleDwoNjU1MzUmQy5nemhlYWQuZXh0cmEubGVuZ3RoKSYmKEMucGVuZGluZyE9PUMucGVuZGluZ19idWZfc2l6ZXx8KEMuZ3poZWFkLmhjcmMmJkMucGVuZGluZz5GJiYoUi5hZGxlcj1fKFIuYWRsZXIsQy5wZW5kaW5nX2J1ZixDLnBlbmRpbmctRixGKSkseChSKSxGPUMucGVu''@;'; put 'put ''ZGluZyxDLnBlbmRpbmchPT1DLnBlbmRpbmdfYnVmX3NpemUpKTspaihDLDI1NSZDLmd6aGVhZC5leHRyYVtDLmd6aW5kZXhdKSxDLmd6aW5kZXgrKztDLmd6aGVhZC5oY3JjJiZDLnBlbmRpbmc+RiYmKFIuYWRsZXI9XyhSLmFkbGVyLEMucGVuZGluZ19idWYsQy5wZW5kaW5nLUYsRikpLEMu''@;'; put 'put ''Z3ppbmRleD09PUMuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKEMuZ3ppbmRleD0wLEMuc3RhdHVzPTczKX1lbHNlIEMuc3RhdHVzPTczO2lmKDczPT09Qy5zdGF0dXMpaWYoQy5nemhlYWQubmFtZSl7Rj1DLnBlbmRpbmc7ZG97aWYoQy5wZW5kaW5nPT09Qy5wZW5kaW5nX2J1Zl9zaXplJiYoQy5n''@;'; put 'put ''emhlYWQuaGNyYyYmQy5wZW5kaW5nPkYmJihSLmFkbGVyPV8oUi5hZGxlcixDLnBlbmRpbmdfYnVmLEMucGVuZGluZy1GLEYpKSx4KFIpLEY9Qy5wZW5kaW5nLEMucGVuZGluZz09PUMucGVuZGluZ19idWZfc2l6ZSkpe3E9MTticmVha31xPUMuZ3ppbmRleDxDLmd6aGVhZC5uYW1lLmxlbmd0''@;'; put 'put ''aD8yNTUmQy5nemhlYWQubmFtZS5jaGFyQ29kZUF0KEMuZ3ppbmRleCsrKTowLGooQyxxKX13aGlsZSgwIT09cSk7Qy5nemhlYWQuaGNyYyYmQy5wZW5kaW5nPkYmJihSLmFkbGVyPV8oUi5hZGxlcixDLnBlbmRpbmdfYnVmLEMucGVuZGluZy1GLEYpKSwwPT09cSYmKEMuZ3ppbmRleD0wLEMu''@;'; put 'put ''c3RhdHVzPTkxKX1lbHNlIEMuc3RhdHVzPTkxO2lmKDkxPT09Qy5zdGF0dXMpaWYoQy5nemhlYWQuY29tbWVudCl7Rj1DLnBlbmRpbmc7ZG97aWYoQy5wZW5kaW5nPT09Qy5wZW5kaW5nX2J1Zl9zaXplJiYoQy5nemhlYWQuaGNyYyYmQy5wZW5kaW5nPkYmJihSLmFkbGVyPV8oUi5hZGxlcixD''@;'; put 'put ''LnBlbmRpbmdfYnVmLEMucGVuZGluZy1GLEYpKSx4KFIpLEY9Qy5wZW5kaW5nLEMucGVuZGluZz09PUMucGVuZGluZ19idWZfc2l6ZSkpe3E9MTticmVha31xPUMuZ3ppbmRleDxDLmd6aGVhZC5jb21tZW50Lmxlbmd0aD8yNTUmQy5nemhlYWQuY29tbWVudC5jaGFyQ29kZUF0KEMuZ3ppbmRl''@;'; put 'put ''eCsrKTowLGooQyxxKX13aGlsZSgwIT09cSk7Qy5nemhlYWQuaGNyYyYmQy5wZW5kaW5nPkYmJihSLmFkbGVyPV8oUi5hZGxlcixDLnBlbmRpbmdfYnVmLEMucGVuZGluZy1GLEYpKSwwPT09cSYmKEMuc3RhdHVzPTEwMyl9ZWxzZSBDLnN0YXR1cz0xMDM7aWYoMTAzPT09Qy5zdGF0dXMmJihD''@;'; put 'put ''Lmd6aGVhZC5oY3JjPyhDLnBlbmRpbmcrMj5DLnBlbmRpbmdfYnVmX3NpemUmJngoUiksQy5wZW5kaW5nKzI8PUMucGVuZGluZ19idWZfc2l6ZSYmKGooQywyNTUmUi5hZGxlciksaihDLFIuYWRsZXI+PjgmMjU1KSxSLmFkbGVyPTAsQy5zdGF0dXM9UCkpOkMuc3RhdHVzPVApLDAhPT1DLnBl''@;'; put 'put ''bmRpbmcpe2lmKHgoUiksMD09PVIuYXZhaWxfb3V0KXJldHVybiBDLmxhc3RfZmx1c2g9LTEsMH1lbHNlIGlmKDA9PT1SLmF2YWlsX2luJiYkKEgpPD0kKFQpJiY0IT09SClyZXR1cm4gQihSLC01KTtpZig2NjY9PT1DLnN0YXR1cyYmMCE9PVIuYXZhaWxfaW4pcmV0dXJuIEIoUiwtNSk7aWYo''@;'; put 'put ''MCE9PVIuYXZhaWxfaW58fDAhPT1DLmxvb2thaGVhZHx8MCE9PUgmJjY2NiE9PUMuc3RhdHVzKXt2YXIgWD0yPT09Qy5zdHJhdGVneT9mdW5jdGlvbihLLHJ0KXtmb3IodmFyIHR0Ozspe2lmKDA9PT1LLmxvb2thaGVhZCYmKGcoSyksMD09PUsubG9va2FoZWFkKSl7aWYoMD09PXJ0KXJldHVy''@;'; put 'put ''biAxO2JyZWFrfWlmKEsubWF0Y2hfbGVuZ3RoPTAsdHQ9ZC5fdHJfdGFsbHkoSywwLEsud2luZG93W0suc3Ryc3RhcnRdKSxLLmxvb2thaGVhZC0tLEsuc3Ryc3RhcnQrKyx0dCYmKE0oSywhMSksMD09PUsuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBLLmluc2VydD0wLDQ9PT1y''@;'; put 'put ''dD8oTShLLCEwKSwwPT09Sy5zdHJtLmF2YWlsX291dD8zOjQpOksubGFzdF9saXQmJihNKEssITEpLDA9PT1LLnN0cm0uYXZhaWxfb3V0KT8xOjJ9KEMsSCk6Mz09PUMuc3RyYXRlZ3k/ZnVuY3Rpb24oSyxydCl7Zm9yKHZhciB0dCxXLFEsRyxldD1LLndpbmRvdzs7KXtpZihLLmxvb2thaGVh''@;'; put 'put ''ZDw9TCl7aWYoZyhLKSxLLmxvb2thaGVhZDw9TCYmMD09PXJ0KXJldHVybiAxO2lmKDA9PT1LLmxvb2thaGVhZClicmVha31pZihLLm1hdGNoX2xlbmd0aD0wLEsubG9va2FoZWFkPj0zJiYwPEsuc3Ryc3RhcnQmJihXPWV0W1E9Sy5zdHJzdGFydC0xXSk9PT1ldFsrK1FdJiZXPT09ZXRbKytR''@;'; put 'put ''XSYmVz09PWV0WysrUV0pe0c9Sy5zdHJzdGFydCtMO2Rve313aGlsZShXPT09ZXRbKytRXSYmVz09PWV0WysrUV0mJlc9PT1ldFsrK1FdJiZXPT09ZXRbKytRXSYmVz09PWV0WysrUV0mJlc9PT1ldFsrK1FdJiZXPT09ZXRbKytRXSYmVz09PWV0WysrUV0mJlE8Ryk7Sy5tYXRjaF9sZW5ndGg9''@;'; put 'put ''TC0oRy1RKSxLLm1hdGNoX2xlbmd0aD5LLmxvb2thaGVhZCYmKEsubWF0Y2hfbGVuZ3RoPUsubG9va2FoZWFkKX1pZihLLm1hdGNoX2xlbmd0aD49Mz8odHQ9ZC5fdHJfdGFsbHkoSywxLEsubWF0Y2hfbGVuZ3RoLTMpLEsubG9va2FoZWFkLT1LLm1hdGNoX2xlbmd0aCxLLnN0cnN0YXJ0Kz1L''@;'; put 'put ''Lm1hdGNoX2xlbmd0aCxLLm1hdGNoX2xlbmd0aD0wKToodHQ9ZC5fdHJfdGFsbHkoSywwLEsud2luZG93W0suc3Ryc3RhcnRdKSxLLmxvb2thaGVhZC0tLEsuc3Ryc3RhcnQrKyksdHQmJihNKEssITEpLDA9PT1LLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gSy5pbnNlcnQ9MCw0''@;'; put 'put ''PT09cnQ/KE0oSywhMCksMD09PUsuc3RybS5hdmFpbF9vdXQ/Mzo0KTpLLmxhc3RfbGl0JiYoTShLLCExKSwwPT09Sy5zdHJtLmF2YWlsX291dCk/MToyfShDLEgpOnVbQy5sZXZlbF0uZnVuYyhDLEgpO2lmKDMhPT1YJiY0IT09WHx8KEMuc3RhdHVzPTY2NiksMT09PVh8fDM9PT1YKXJldHVy''@;'; put 'put ''biAwPT09Ui5hdmFpbF9vdXQmJihDLmxhc3RfZmx1c2g9LTEpLDA7aWYoMj09PVgmJigxPT09SD9kLl90cl9hbGlnbihDKTo1IT09SCYmKGQuX3RyX3N0b3JlZF9ibG9jayhDLDAsMCwhMSksMz09PUgmJihEKEMuaGVhZCksMD09PUMubG9va2FoZWFkJiYoQy5zdHJzdGFydD0wLEMuYmxvY2tf''@;'; put 'put ''c3RhcnQ9MCxDLmluc2VydD0wKSkpLHgoUiksMD09PVIuYXZhaWxfb3V0KSlyZXR1cm4gQy5sYXN0X2ZsdXNoPS0xLDB9cmV0dXJuIDQhPT1IPzA6Qy53cmFwPD0wPzE6KDI9PT1DLndyYXA/KGooQywyNTUmUi5hZGxlciksaihDLFIuYWRsZXI+PjgmMjU1KSxqKEMsUi5hZGxlcj4+MTYmMjU1''@;'; put 'put ''KSxqKEMsUi5hZGxlcj4+MjQmMjU1KSxqKEMsMjU1JlIudG90YWxfaW4pLGooQyxSLnRvdGFsX2luPj44JjI1NSksaihDLFIudG90YWxfaW4+PjE2JjI1NSksaihDLFIudG90YWxfaW4+PjI0JjI1NSkpOihjKEMsUi5hZGxlcj4+PjE2KSxjKEMsNjU1MzUmUi5hZGxlcikpLHgoUiksMDxDLndy''@;'; put 'put ''YXAmJihDLndyYXA9LUMud3JhcCksMCE9PUMucGVuZGluZz8wOjEpfSxmLmRlZmxhdGVFbmQ9ZnVuY3Rpb24oUil7dmFyIEg7cmV0dXJuIFImJlIuc3RhdGU/NDIhPT0oSD1SLnN0YXRlLnN0YXR1cykmJjY5IT09SCYmNzMhPT1IJiY5MSE9PUgmJjEwMyE9PUgmJkghPT1QJiY2NjYhPT1IP0Io''@;'; put 'put ''UixJKTooUi5zdGF0ZT1udWxsLEg9PT1QP0IoUiwtMyk6MCk6SX0sZi5kZWZsYXRlU2V0RGljdGlvbmFyeT1mdW5jdGlvbihSLEgpe3ZhciBULEMsRixxLFksWCxLLHJ0LHR0PUgubGVuZ3RoO2lmKCFSfHwhUi5zdGF0ZXx8Mj09PShxPShUPVIuc3RhdGUpLndyYXApfHwxPT09cSYmNDIhPT1U''@;'; put 'put ''LnN0YXR1c3x8VC5sb29rYWhlYWQpcmV0dXJuIEk7Zm9yKDE9PT1xJiYoUi5hZGxlcj12KFIuYWRsZXIsSCx0dCwwKSksVC53cmFwPTAsdHQ+PVQud19zaXplJiYoMD09PXEmJihEKFQuaGVhZCksVC5zdHJzdGFydD0wLFQuYmxvY2tfc3RhcnQ9MCxULmluc2VydD0wKSxydD1uZXcgcC5CdWY4''@;'; put 'put ''KFQud19zaXplKSxwLmFycmF5U2V0KHJ0LEgsdHQtVC53X3NpemUsVC53X3NpemUsMCksSD1ydCx0dD1ULndfc2l6ZSksWT1SLmF2YWlsX2luLFg9Ui5uZXh0X2luLEs9Ui5pbnB1dCxSLmF2YWlsX2luPXR0LFIubmV4dF9pbj0wLFIuaW5wdXQ9SCxnKFQpO1QubG9va2FoZWFkPj0zOyl7Zm9y''@;'; put 'put ''KEM9VC5zdHJzdGFydCxGPVQubG9va2FoZWFkLTI7VC5pbnNfaD0oVC5pbnNfaDw8VC5oYXNoX3NoaWZ0XlQud2luZG93W0MrMy0xXSkmVC5oYXNoX21hc2ssVC5wcmV2W0MmVC53X21hc2tdPVQuaGVhZFtULmluc19oXSxULmhlYWRbVC5pbnNfaF09QyxDKyssLS1GOyk7VC5zdHJzdGFydD1D''@;'; put 'put ''LFQubG9va2FoZWFkPTIsZyhUKX1yZXR1cm4gVC5zdHJzdGFydCs9VC5sb29rYWhlYWQsVC5ibG9ja19zdGFydD1ULnN0cnN0YXJ0LFQuaW5zZXJ0PVQubG9va2FoZWFkLFQubG9va2FoZWFkPTAsVC5tYXRjaF9sZW5ndGg9VC5wcmV2X2xlbmd0aD0yLFQubWF0Y2hfYXZhaWxhYmxlPTAsUi5u''@;'; put 'put ''ZXh0X2luPVgsUi5pbnB1dD1LLFIuYXZhaWxfaW49WSxULndyYXA9cSwwfSxmLmRlZmxhdGVJbmZvPSJwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjQxLCIuL2FkbGVyMzIiOjQzLCIuL2NyYzMyIjo0NSwiLi9tZXNzYWdlcyI6NTEsIi4v''@;'; put 'put ''dHJlZXMiOjUyfV0sNDc6W2Z1bmN0aW9uKGksaCxmKXtoLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aGlzLnRleHQ9MCx0aGlzLnRpbWU9MCx0aGlzLnhmbGFncz0wLHRoaXMub3M9MCx0aGlzLmV4dHJhPW51bGwsdGhpcy5leHRyYV9sZW49MCx0aGlzLm5hbWU9IiIsdGhpcy5jb21tZW50PSIiLHRo''@;'; put 'put ''aXMuaGNyYz0wLHRoaXMuZG9uZT0hMX19LHt9XSw0ODpbZnVuY3Rpb24oaSxoLGYpe2guZXhwb3J0cz1mdW5jdGlvbih1LHApe3ZhciBkLHYsXyxBLEksTCxOLFAsQiwkLEQseCxNLGosYyxtLGcseSx3LGssTyx6LFUsVixSO1Y9dS5pbnB1dCxfPSh2PXUubmV4dF9pbikrKHUuYXZhaWxfaW4t''@;'; put 'put ''NSksUj11Lm91dHB1dCxJPShBPXUubmV4dF9vdXQpLShwLXUuYXZhaWxfb3V0KSxMPUErKHUuYXZhaWxfb3V0LTI1NyksTj0oZD11LnN0YXRlKS5kbWF4LFA9ZC53c2l6ZSxCPWQud2hhdmUsJD1kLnduZXh0LEQ9ZC53aW5kb3cseD1kLmhvbGQsTT1kLmJpdHMsaj1kLmxlbmNvZGUsYz1kLmRp''@;'; put 'put ''c3Rjb2RlLG09KDE8PGQubGVuYml0cyktMSxnPSgxPDxkLmRpc3RiaXRzKS0xO3Q6ZG97TTwxNSYmKHgrPVZbdisrXTw8TSx4Kz1WW3YrK108PChNKz04KSxNKz04KSx5PWpbeCZtXTtlOmZvcig7Oyl7aWYoeD4+Pj13PXk+Pj4yNCxNLT13LDA9PSh3PXk+Pj4xNiYyNTUpKVJbQSsrXT02NTUz''@;'; put 'put ''NSZ5O2Vsc2V7aWYoISgxNiZ3KSl7aWYoISg2NCZ3KSl7eT1qWyg2NTUzNSZ5KSsoeCYoMTw8dyktMSldO2NvbnRpbnVlIGV9aWYoMzImdyl7ZC5tb2RlPTEyO2JyZWFrIHR9dS5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsZC5tb2RlPTMwO2JyZWFrIHR9az02NTUzNSZ5LCh3''@;'; put 'put ''Jj0xNSkmJihNPHcmJih4Kz1WW3YrK108PE0sTSs9OCksays9eCYoMTw8dyktMSx4Pj4+PXcsTS09dyksTTwxNSYmKHgrPVZbdisrXTw8TSx4Kz1WW3YrK108PChNKz04KSxNKz04KSx5PWNbeCZnXTtyOmZvcig7Oyl7aWYoeD4+Pj13PXk+Pj4yNCxNLT13LCEoMTYmKHc9eT4+PjE2JjI1NSkp''@;'; put 'put ''KXtpZighKDY0JncpKXt5PWNbKDY1NTM1JnkpKyh4JigxPDx3KS0xKV07Y29udGludWUgcn11Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixkLm1vZGU9MzA7YnJlYWsgdH1pZihPPTY1NTM1JnksTTwodyY9MTUpJiYoeCs9Vlt2KytdPDxNLChNKz04KTx3JiYoeCs9Vlt2KytdPDxNLE0r''@;'; put 'put ''PTgpKSxOPChPKz14JigxPDx3KS0xKSl7dS5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixkLm1vZGU9MzA7YnJlYWsgdH1pZih4Pj4+PXcsTS09dywodz1BLUkpPE8pe2lmKEI8KHc9Ty13KSYmZC5zYW5lKXt1Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2si''@;'; put 'put ''LGQubW9kZT0zMDticmVhayB0fWlmKFU9RCwoej0wKT09PSQpe2lmKHorPVAtdyx3PGspe2ZvcihrLT13O1JbQSsrXT1EW3orK10sLS13Oyk7ej1BLU8sVT1SfX1lbHNlIGlmKCQ8dyl7aWYoeis9UCskLXcsKHctPSQpPGspe2ZvcihrLT13O1JbQSsrXT1EW3orK10sLS13Oyk7aWYoej0wLCQ8''@;'; put 'put ''ayl7Zm9yKGstPXc9JDtSW0ErK109RFt6KytdLC0tdzspO3o9QS1PLFU9Un19fWVsc2UgaWYoeis9JC13LHc8ayl7Zm9yKGstPXc7UltBKytdPURbeisrXSwtLXc7KTt6PUEtTyxVPVJ9Zm9yKDsyPGs7KVJbQSsrXT1VW3orK10sUltBKytdPVVbeisrXSxSW0ErK109VVt6KytdLGstPTM7ayYm''@;'; put 'put ''KFJbQSsrXT1VW3orK10sMTxrJiYoUltBKytdPVVbeisrXSkpfWVsc2V7Zm9yKHo9QS1PO1JbQSsrXT1SW3orK10sUltBKytdPVJbeisrXSxSW0ErK109Ult6KytdLDI8KGstPTMpOyk7ayYmKFJbQSsrXT1SW3orK10sMTxrJiYoUltBKytdPVJbeisrXSkpfWJyZWFrfX1icmVha319d2hpbGUo''@;'; put 'put ''djxfJiZBPEwpO3YtPWs9TT4+Myx4Jj0oMTw8KE0tPWs8PDMpKS0xLHUubmV4dF9pbj12LHUubmV4dF9vdXQ9QSx1LmF2YWlsX2luPXY8Xz9fLXYrNTo1LSh2LV8pLHUuYXZhaWxfb3V0PUE8TD9MLUErMjU3OjI1Ny0oQS1MKSxkLmhvbGQ9eCxkLmJpdHM9TX19LHt9XSw0OTpbZnVuY3Rpb24o''@;'; put 'put ''aSxoLGYpe3ZhciB1PWkoIi4uL3V0aWxzL2NvbW1vbiIpLHA9aSgiLi9hZGxlcjMyIiksZD1pKCIuL2NyYzMyIiksdj1pKCIuL2luZmZhc3QiKSxfPWkoIi4vaW5mdHJlZXMiKSxBPS0yO2Z1bmN0aW9uIEkobSl7cmV0dXJuKG0+Pj4yNCYyNTUpKyhtPj4+OCY2NTI4MCkrKCg2NTI4MCZtKTw8''@;'; put 'put ''OCkrKCgyNTUmbSk8PDI0KX1mdW5jdGlvbiBMKCl7dGhpcy5tb2RlPTAsdGhpcy5sYXN0PSExLHRoaXMud3JhcD0wLHRoaXMuaGF2ZWRpY3Q9ITEsdGhpcy5mbGFncz0wLHRoaXMuZG1heD0wLHRoaXMuY2hlY2s9MCx0aGlzLnRvdGFsPTAsdGhpcy5oZWFkPW51bGwsdGhpcy53Yml0cz0wLHRo''@;'; put 'put ''aXMud3NpemU9MCx0aGlzLndoYXZlPTAsdGhpcy53bmV4dD0wLHRoaXMud2luZG93PW51bGwsdGhpcy5ob2xkPTAsdGhpcy5iaXRzPTAsdGhpcy5sZW5ndGg9MCx0aGlzLm9mZnNldD0wLHRoaXMuZXh0cmE9MCx0aGlzLmxlbmNvZGU9bnVsbCx0aGlzLmRpc3Rjb2RlPW51bGwsdGhpcy5sZW5i''@;'; put 'put ''aXRzPTAsdGhpcy5kaXN0Yml0cz0wLHRoaXMubmNvZGU9MCx0aGlzLm5sZW49MCx0aGlzLm5kaXN0PTAsdGhpcy5oYXZlPTAsdGhpcy5uZXh0PW51bGwsdGhpcy5sZW5zPW5ldyB1LkJ1ZjE2KDMyMCksdGhpcy53b3JrPW5ldyB1LkJ1ZjE2KDI4OCksdGhpcy5sZW5keW49bnVsbCx0aGlzLmRp''@;'; put 'put ''c3RkeW49bnVsbCx0aGlzLnNhbmU9MCx0aGlzLmJhY2s9MCx0aGlzLndhcz0wfWZ1bmN0aW9uIE4obSl7dmFyIGc7cmV0dXJuIG0mJm0uc3RhdGU/KG0udG90YWxfaW49bS50b3RhbF9vdXQ9KGc9bS5zdGF0ZSkudG90YWw9MCxtLm1zZz0iIixnLndyYXAmJihtLmFkbGVyPTEmZy53cmFwKSxn''@;'; put 'put ''Lm1vZGU9MSxnLmxhc3Q9MCxnLmhhdmVkaWN0PTAsZy5kbWF4PTMyNzY4LGcuaGVhZD1udWxsLGcuaG9sZD0wLGcuYml0cz0wLGcubGVuY29kZT1nLmxlbmR5bj1uZXcgdS5CdWYzMig4NTIpLGcuZGlzdGNvZGU9Zy5kaXN0ZHluPW5ldyB1LkJ1ZjMyKDU5MiksZy5zYW5lPTEsZy5iYWNrPS0x''@;'; put 'put ''LDApOkF9ZnVuY3Rpb24gUChtKXt2YXIgZztyZXR1cm4gbSYmbS5zdGF0ZT8oKGc9bS5zdGF0ZSkud3NpemU9MCxnLndoYXZlPTAsZy53bmV4dD0wLE4obSkpOkF9ZnVuY3Rpb24gQihtLGcpe3ZhciB5LHc7cmV0dXJuIG0mJm0uc3RhdGU/KHc9bS5zdGF0ZSxnPDA/KHk9MCxnPS1nKTooeT0x''@;'; put 'put ''KyhnPj40KSxnPDQ4JiYoZyY9MTUpKSxnJiYoZzw4fHwxNTxnKT9BOihudWxsIT09dy53aW5kb3cmJncud2JpdHMhPT1nJiYody53aW5kb3c9bnVsbCksdy53cmFwPXksdy53Yml0cz1nLFAobSkpKTpBfWZ1bmN0aW9uICQobSxnKXt2YXIgeSx3O3JldHVybiBtPyh3PW5ldyBMLChtLnN0YXRl''@;'; put 'put ''PXcpLndpbmRvdz1udWxsLDAhPT0oeT1CKG0sZykpJiYobS5zdGF0ZT1udWxsKSx5KTpBfXZhciBELHgsTT0hMDtmdW5jdGlvbiBqKG0pe2lmKE0pe3ZhciBnO2ZvcihEPW5ldyB1LkJ1ZjMyKDUxMikseD1uZXcgdS5CdWYzMigzMiksZz0wO2c8MTQ0OyltLmxlbnNbZysrXT04O2Zvcig7Zzwy''@;'; put 'put ''NTY7KW0ubGVuc1tnKytdPTk7Zm9yKDtnPDI4MDspbS5sZW5zW2crK109Nztmb3IoO2c8Mjg4OyltLmxlbnNbZysrXT04O2ZvcihfKDEsbS5sZW5zLDAsMjg4LEQsMCxtLndvcmsse2JpdHM6OX0pLGc9MDtnPDMyOyltLmxlbnNbZysrXT01O18oMixtLmxlbnMsMCwzMix4LDAsbS53b3JrLHti''@;'; put 'put ''aXRzOjV9KSxNPSExfW0ubGVuY29kZT1ELG0ubGVuYml0cz05LG0uZGlzdGNvZGU9eCxtLmRpc3RiaXRzPTV9ZnVuY3Rpb24gYyhtLGcseSx3KXt2YXIgayxPPW0uc3RhdGU7cmV0dXJuIG51bGw9PT1PLndpbmRvdyYmKE8ud3NpemU9MTw8Ty53Yml0cyxPLnduZXh0PTAsTy53aGF2ZT0wLE8u''@;'; put 'put ''d2luZG93PW5ldyB1LkJ1ZjgoTy53c2l6ZSkpLHc+PU8ud3NpemU/KHUuYXJyYXlTZXQoTy53aW5kb3csZyx5LU8ud3NpemUsTy53c2l6ZSwwKSxPLnduZXh0PTAsTy53aGF2ZT1PLndzaXplKToodzwoaz1PLndzaXplLU8ud25leHQpJiYoaz13KSx1LmFycmF5U2V0KE8ud2luZG93LGcseS13''@;'; put 'put ''LGssTy53bmV4dCksKHctPWspPyh1LmFycmF5U2V0KE8ud2luZG93LGcseS13LHcsMCksTy53bmV4dD13LE8ud2hhdmU9Ty53c2l6ZSk6KE8ud25leHQrPWssTy53bmV4dD09PU8ud3NpemUmJihPLnduZXh0PTApLE8ud2hhdmU8Ty53c2l6ZSYmKE8ud2hhdmUrPWspKSksMH1mLmluZmxhdGVS''@;'; put 'put ''ZXNldD1QLGYuaW5mbGF0ZVJlc2V0Mj1CLGYuaW5mbGF0ZVJlc2V0S2VlcD1OLGYuaW5mbGF0ZUluaXQ9ZnVuY3Rpb24obSl7cmV0dXJuICQobSwxNSl9LGYuaW5mbGF0ZUluaXQyPSQsZi5pbmZsYXRlPWZ1bmN0aW9uKG0sZyl7dmFyIHksdyxrLE8seixVLFYsUixILFQsQyxGLHEsWSxYLEss''@;'; put 'put ''cnQsdHQsVyxRLEcsZXQsbnQsaXQsb3Q9MCxodD1uZXcgdS5CdWY4KDQpLGZ0PVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XTtpZighbXx8IW0uc3RhdGV8fCFtLm91dHB1dHx8IW0uaW5wdXQmJjAhPT1tLmF2YWlsX2luKXJldHVybiBBOzEyPT09KHk9''@;'; put 'put ''bS5zdGF0ZSkubW9kZSYmKHkubW9kZT0xMyksej1tLm5leHRfb3V0LGs9bS5vdXRwdXQsTz1tLm5leHRfaW4sdz1tLmlucHV0LFI9eS5ob2xkLEg9eS5iaXRzLFQ9VT1tLmF2YWlsX2luLEM9Vj1tLmF2YWlsX291dCxldD0wO3Q6Zm9yKDs7KXN3aXRjaCh5Lm1vZGUpe2Nhc2UgMTppZigwPT09''@;'; put 'put ''eS53cmFwKXt5Lm1vZGU9MTM7YnJlYWt9Zm9yKDtIPDE2Oyl7aWYoMD09PVUpYnJlYWsgdDtVLS0sUis9d1tPKytdPDxILEgrPTh9aWYoMiZ5LndyYXAmJjM1NjE1PT09Uil7aHRbeS5jaGVjaz0wXT0yNTUmUixodFsxXT1SPj4+OCYyNTUseS5jaGVjaz1kKHkuY2hlY2ssaHQsMiwwKSxIPVI9''@;'; put 'put ''MCx5Lm1vZGU9MjticmVha31pZih5LmZsYWdzPTAseS5oZWFkJiYoeS5oZWFkLmRvbmU9ITEpLCEoMSZ5LndyYXApfHwoKCgyNTUmUik8PDgpKyhSPj44KSklMzEpe20ubXNnPSJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIix5Lm1vZGU9MzA7YnJlYWt9aWYoOCE9KDE1JlIpKXttLm1zZz0idW5r''@;'; put 'put ''bm93biBjb21wcmVzc2lvbiBtZXRob2QiLHkubW9kZT0zMDticmVha31pZihILT00LEc9OCsoMTUmKFI+Pj49NCkpLDA9PT15LndiaXRzKXkud2JpdHM9RztlbHNlIGlmKEc+eS53Yml0cyl7bS5tc2c9ImludmFsaWQgd2luZG93IHNpemUiLHkubW9kZT0zMDticmVha315LmRtYXg9MTw8Ryxt''@;'; put 'put ''LmFkbGVyPXkuY2hlY2s9MSx5Lm1vZGU9NTEyJlI/MTA6MTIsSD1SPTA7YnJlYWs7Y2FzZSAyOmZvcig7SDwxNjspe2lmKDA9PT1VKWJyZWFrIHQ7VS0tLFIrPXdbTysrXTw8SCxIKz04fWlmKHkuZmxhZ3M9Uiw4IT0oMjU1JnkuZmxhZ3MpKXttLm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBt''@;'; put 'put ''ZXRob2QiLHkubW9kZT0zMDticmVha31pZig1NzM0NCZ5LmZsYWdzKXttLm1zZz0idW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0Iix5Lm1vZGU9MzA7YnJlYWt9eS5oZWFkJiYoeS5oZWFkLnRleHQ9Uj4+OCYxKSw1MTImeS5mbGFncyYmKGh0WzBdPTI1NSZSLGh0WzFdPVI+Pj44JjI1NSx5LmNo''@;'; put 'put ''ZWNrPWQoeS5jaGVjayxodCwyLDApKSxIPVI9MCx5Lm1vZGU9MztjYXNlIDM6Zm9yKDtIPDMyOyl7aWYoMD09PVUpYnJlYWsgdDtVLS0sUis9d1tPKytdPDxILEgrPTh9eS5oZWFkJiYoeS5oZWFkLnRpbWU9UiksNTEyJnkuZmxhZ3MmJihodFswXT0yNTUmUixodFsxXT1SPj4+OCYyNTUsaHRb''@;'; put 'put ''Ml09Uj4+PjE2JjI1NSxodFszXT1SPj4+MjQmMjU1LHkuY2hlY2s9ZCh5LmNoZWNrLGh0LDQsMCkpLEg9Uj0wLHkubW9kZT00O2Nhc2UgNDpmb3IoO0g8MTY7KXtpZigwPT09VSlicmVhayB0O1UtLSxSKz13W08rK108PEgsSCs9OH15LmhlYWQmJih5LmhlYWQueGZsYWdzPTI1NSZSLHkuaGVh''@;'; put 'put ''ZC5vcz1SPj44KSw1MTImeS5mbGFncyYmKGh0WzBdPTI1NSZSLGh0WzFdPVI+Pj44JjI1NSx5LmNoZWNrPWQoeS5jaGVjayxodCwyLDApKSxIPVI9MCx5Lm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZ5LmZsYWdzKXtmb3IoO0g8MTY7KXtpZigwPT09VSlicmVhayB0O1UtLSxSKz13W08rK108PEgs''@;'; put 'put ''SCs9OH15Lmxlbmd0aD1SLHkuaGVhZCYmKHkuaGVhZC5leHRyYV9sZW49UiksNTEyJnkuZmxhZ3MmJihodFswXT0yNTUmUixodFsxXT1SPj4+OCYyNTUseS5jaGVjaz1kKHkuY2hlY2ssaHQsMiwwKSksSD1SPTB9ZWxzZSB5LmhlYWQmJih5LmhlYWQuZXh0cmE9bnVsbCk7eS5tb2RlPTY7Y2Fz''@;'; put 'put ''ZSA2OmlmKDEwMjQmeS5mbGFncyYmKFU8KEY9eS5sZW5ndGgpJiYoRj1VKSxGJiYoeS5oZWFkJiYoRz15LmhlYWQuZXh0cmFfbGVuLXkubGVuZ3RoLHkuaGVhZC5leHRyYXx8KHkuaGVhZC5leHRyYT1uZXcgQXJyYXkoeS5oZWFkLmV4dHJhX2xlbikpLHUuYXJyYXlTZXQoeS5oZWFkLmV4dHJh''@;'; put 'put ''LHcsTyxGLEcpKSw1MTImeS5mbGFncyYmKHkuY2hlY2s9ZCh5LmNoZWNrLHcsRixPKSksVS09RixPKz1GLHkubGVuZ3RoLT1GKSx5Lmxlbmd0aCkpYnJlYWsgdDt5Lmxlbmd0aD0wLHkubW9kZT03O2Nhc2UgNzppZigyMDQ4JnkuZmxhZ3Mpe2lmKDA9PT1VKWJyZWFrIHQ7Zm9yKEY9MDtHPXdb''@;'; put 'put ''TytGKytdLHkuaGVhZCYmRyYmeS5sZW5ndGg8NjU1MzYmJih5LmhlYWQubmFtZSs9U3RyaW5nLmZyb21DaGFyQ29kZShHKSksRyYmRjxVOyk7aWYoNTEyJnkuZmxhZ3MmJih5LmNoZWNrPWQoeS5jaGVjayx3LEYsTykpLFUtPUYsTys9RixHKWJyZWFrIHR9ZWxzZSB5LmhlYWQmJih5LmhlYWQu''@;'; put 'put ''bmFtZT1udWxsKTt5Lmxlbmd0aD0wLHkubW9kZT04O2Nhc2UgODppZig0MDk2JnkuZmxhZ3Mpe2lmKDA9PT1VKWJyZWFrIHQ7Zm9yKEY9MDtHPXdbTytGKytdLHkuaGVhZCYmRyYmeS5sZW5ndGg8NjU1MzYmJih5LmhlYWQuY29tbWVudCs9U3RyaW5nLmZyb21DaGFyQ29kZShHKSksRyYmRjxV''@;'; put 'put ''Oyk7aWYoNTEyJnkuZmxhZ3MmJih5LmNoZWNrPWQoeS5jaGVjayx3LEYsTykpLFUtPUYsTys9RixHKWJyZWFrIHR9ZWxzZSB5LmhlYWQmJih5LmhlYWQuY29tbWVudD1udWxsKTt5Lm1vZGU9OTtjYXNlIDk6aWYoNTEyJnkuZmxhZ3Mpe2Zvcig7SDwxNjspe2lmKDA9PT1VKWJyZWFrIHQ7VS0t''@;'; put 'put ''LFIrPXdbTysrXTw8SCxIKz04fWlmKFIhPT0oNjU1MzUmeS5jaGVjaykpe20ubXNnPSJoZWFkZXIgY3JjIG1pc21hdGNoIix5Lm1vZGU9MzA7YnJlYWt9SD1SPTB9eS5oZWFkJiYoeS5oZWFkLmhjcmM9eS5mbGFncz4+OSYxLHkuaGVhZC5kb25lPSEwKSxtLmFkbGVyPXkuY2hlY2s9MCx5Lm1v''@;'; put 'put ''ZGU9MTI7YnJlYWs7Y2FzZSAxMDpmb3IoO0g8MzI7KXtpZigwPT09VSlicmVhayB0O1UtLSxSKz13W08rK108PEgsSCs9OH1tLmFkbGVyPXkuY2hlY2s9SShSKSxIPVI9MCx5Lm1vZGU9MTE7Y2FzZSAxMTppZigwPT09eS5oYXZlZGljdClyZXR1cm4gbS5uZXh0X291dD16LG0uYXZhaWxfb3V0''@;'; put 'put ''PVYsbS5uZXh0X2luPU8sbS5hdmFpbF9pbj1VLHkuaG9sZD1SLHkuYml0cz1ILDI7bS5hZGxlcj15LmNoZWNrPTEseS5tb2RlPTEyO2Nhc2UgMTI6aWYoNT09PWd8fDY9PT1nKWJyZWFrIHQ7Y2FzZSAxMzppZih5Lmxhc3Qpe1I+Pj49NyZILEgtPTcmSCx5Lm1vZGU9Mjc7YnJlYWt9Zm9yKDtI''@;'; put 'put ''PDM7KXtpZigwPT09VSlicmVhayB0O1UtLSxSKz13W08rK108PEgsSCs9OH1zd2l0Y2goeS5sYXN0PTEmUixILT0xLDMmKFI+Pj49MSkpe2Nhc2UgMDp5Lm1vZGU9MTQ7YnJlYWs7Y2FzZSAxOmlmKGooeSkseS5tb2RlPTIwLDYhPT1nKWJyZWFrO1I+Pj49MixILT0yO2JyZWFrIHQ7Y2FzZSAy''@;'; put 'put ''OnkubW9kZT0xNzticmVhaztjYXNlIDM6bS5tc2c9ImludmFsaWQgYmxvY2sgdHlwZSIseS5tb2RlPTMwfVI+Pj49MixILT0yO2JyZWFrO2Nhc2UgMTQ6Zm9yKFI+Pj49NyZILEgtPTcmSDtIPDMyOyl7aWYoMD09PVUpYnJlYWsgdDtVLS0sUis9d1tPKytdPDxILEgrPTh9aWYoKDY1NTM1JlIp''@;'; put 'put ''IT0oUj4+PjE2XjY1NTM1KSl7bS5tc2c9ImludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMiLHkubW9kZT0zMDticmVha31pZih5Lmxlbmd0aD02NTUzNSZSLEg9Uj0wLHkubW9kZT0xNSw2PT09ZylicmVhayB0O2Nhc2UgMTU6eS5tb2RlPTE2O2Nhc2UgMTY6aWYoRj15Lmxlbmd0aCl7aWYo''@;'; put 'put ''VTxGJiYoRj1VKSxWPEYmJihGPVYpLDA9PT1GKWJyZWFrIHQ7dS5hcnJheVNldChrLHcsTyxGLHopLFUtPUYsTys9RixWLT1GLHorPUYseS5sZW5ndGgtPUY7YnJlYWt9eS5tb2RlPTEyO2JyZWFrO2Nhc2UgMTc6Zm9yKDtIPDE0Oyl7aWYoMD09PVUpYnJlYWsgdDtVLS0sUis9d1tPKytdPDxI''@;'; put 'put ''LEgrPTh9aWYoeS5ubGVuPTI1NysoMzEmUiksSC09NSx5Lm5kaXN0PTErKDMxJihSPj4+PTUpKSxILT01LHkubmNvZGU9NCsoMTUmKFI+Pj49NSkpLFI+Pj49NCxILT00LDI4Njx5Lm5sZW58fDMwPHkubmRpc3Qpe20ubXNnPSJ0b28gbWFueSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9scyIs''@;'; put 'put ''eS5tb2RlPTMwO2JyZWFrfXkuaGF2ZT0wLHkubW9kZT0xODtjYXNlIDE4OmZvcig7eS5oYXZlPHkubmNvZGU7KXtmb3IoO0g8Mzspe2lmKDA9PT1VKWJyZWFrIHQ7VS0tLFIrPXdbTysrXTw8SCxIKz04fXkubGVuc1tmdFt5LmhhdmUrK11dPTcmUixSPj4+PTMsSC09M31mb3IoO3kuaGF2ZTwx''@;'; put 'put ''OTspeS5sZW5zW2Z0W3kuaGF2ZSsrXV09MDtpZih5LmxlbmNvZGU9eS5sZW5keW4seS5sZW5iaXRzPTcsZXQ9XygwLHkubGVucywwLDE5LHkubGVuY29kZSwwLHkud29yayxudD17Yml0czp5LmxlbmJpdHN9KSx5LmxlbmJpdHM9bnQuYml0cyxldCl7bS5tc2c9ImludmFsaWQgY29kZSBsZW5n''@;'; put 'put ''dGhzIHNldCIseS5tb2RlPTMwO2JyZWFrfXkuaGF2ZT0wLHkubW9kZT0xOTtjYXNlIDE5OmZvcig7eS5oYXZlPHkubmxlbit5Lm5kaXN0Oyl7Zm9yKDtLPShvdD15LmxlbmNvZGVbUiYoMTw8eS5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUscnQ9NjU1MzUmb3QsISgoWD1vdD4+PjI0KTw9SCk7KXtp''@;'; put 'put ''ZigwPT09VSlicmVhayB0O1UtLSxSKz13W08rK108PEgsSCs9OH1pZihydDwxNilSPj4+PVgsSC09WCx5LmxlbnNbeS5oYXZlKytdPXJ0O2Vsc2V7aWYoMTY9PT1ydCl7Zm9yKGl0PVgrMjtIPGl0Oyl7aWYoMD09PVUpYnJlYWsgdDtVLS0sUis9d1tPKytdPDxILEgrPTh9aWYoUj4+Pj1YLEgt''@;'; put 'put ''PVgsMD09PXkuaGF2ZSl7bS5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLHkubW9kZT0zMDticmVha31HPXkubGVuc1t5LmhhdmUtMV0sRj0zKygzJlIpLFI+Pj49MixILT0yfWVsc2UgaWYoMTc9PT1ydCl7Zm9yKGl0PVgrMztIPGl0Oyl7aWYoMD09PVUpYnJlYWsgdDtVLS0sUis9''@;'; put 'put ''d1tPKytdPDxILEgrPTh9SC09WCxHPTAsRj0zKyg3JihSPj4+PVgpKSxSPj4+PTMsSC09M31lbHNle2ZvcihpdD1YKzc7SDxpdDspe2lmKDA9PT1VKWJyZWFrIHQ7VS0tLFIrPXdbTysrXTw8SCxIKz04fUgtPVgsRz0wLEY9MTErKDEyNyYoUj4+Pj1YKSksUj4+Pj03LEgtPTd9aWYoeS5oYXZl''@;'; put 'put ''K0Y+eS5ubGVuK3kubmRpc3Qpe20ubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0Iix5Lm1vZGU9MzA7YnJlYWt9Zm9yKDtGLS07KXkubGVuc1t5LmhhdmUrK109R319aWYoMzA9PT15Lm1vZGUpYnJlYWs7aWYoMD09PXkubGVuc1syNTZdKXttLm1zZz0iaW52YWxpZCBjb2RlIC0tIG1p''@;'; put 'put ''c3NpbmcgZW5kLW9mLWJsb2NrIix5Lm1vZGU9MzA7YnJlYWt9aWYoeS5sZW5iaXRzPTksZXQ9XygxLHkubGVucywwLHkubmxlbix5LmxlbmNvZGUsMCx5LndvcmssbnQ9e2JpdHM6eS5sZW5iaXRzfSkseS5sZW5iaXRzPW50LmJpdHMsZXQpe20ubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3Ro''@;'; put 'put ''cyBzZXQiLHkubW9kZT0zMDticmVha31pZih5LmRpc3RiaXRzPTYseS5kaXN0Y29kZT15LmRpc3RkeW4sZXQ9XygyLHkubGVucyx5Lm5sZW4seS5uZGlzdCx5LmRpc3Rjb2RlLDAseS53b3JrLG50PXtiaXRzOnkuZGlzdGJpdHN9KSx5LmRpc3RiaXRzPW50LmJpdHMsZXQpe20ubXNnPSJpbnZh''@;'; put 'put ''bGlkIGRpc3RhbmNlcyBzZXQiLHkubW9kZT0zMDticmVha31pZih5Lm1vZGU9MjAsNj09PWcpYnJlYWsgdDtjYXNlIDIwOnkubW9kZT0yMTtjYXNlIDIxOmlmKDY8PVUmJjI1ODw9Vil7bS5uZXh0X291dD16LG0uYXZhaWxfb3V0PVYsbS5uZXh0X2luPU8sbS5hdmFpbF9pbj1VLHkuaG9sZD1S''@;'; put 'put ''LHkuYml0cz1ILHYobSxDKSx6PW0ubmV4dF9vdXQsaz1tLm91dHB1dCxWPW0uYXZhaWxfb3V0LE89bS5uZXh0X2luLHc9bS5pbnB1dCxVPW0uYXZhaWxfaW4sUj15LmhvbGQsSD15LmJpdHMsMTI9PT15Lm1vZGUmJih5LmJhY2s9LTEpO2JyZWFrfWZvcih5LmJhY2s9MDtLPShvdD15LmxlbmNv''@;'; put 'put ''ZGVbUiYoMTw8eS5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUscnQ9NjU1MzUmb3QsISgoWD1vdD4+PjI0KTw9SCk7KXtpZigwPT09VSlicmVhayB0O1UtLSxSKz13W08rK108PEgsSCs9OH1pZihLJiYhKDI0MCZLKSl7Zm9yKHR0PVgsVz1LLFE9cnQ7Sz0ob3Q9eS5sZW5jb2RlW1ErKChSJigxPDx0''@;'; put 'put ''dCtXKS0xKT4+dHQpXSk+Pj4xNiYyNTUscnQ9NjU1MzUmb3QsISh0dCsoWD1vdD4+PjI0KTw9SCk7KXtpZigwPT09VSlicmVhayB0O1UtLSxSKz13W08rK108PEgsSCs9OH1SPj4+PXR0LEgtPXR0LHkuYmFjays9dHR9aWYoUj4+Pj1YLEgtPVgseS5iYWNrKz1YLHkubGVuZ3RoPXJ0LDA9PT1L''@;'; put 'put ''KXt5Lm1vZGU9MjY7YnJlYWt9aWYoMzImSyl7eS5iYWNrPS0xLHkubW9kZT0xMjticmVha31pZig2NCZLKXttLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIix5Lm1vZGU9MzA7YnJlYWt9eS5leHRyYT0xNSZLLHkubW9kZT0yMjtjYXNlIDIyOmlmKHkuZXh0cmEpe2ZvcihpdD15''@;'; put 'put ''LmV4dHJhO0g8aXQ7KXtpZigwPT09VSlicmVhayB0O1UtLSxSKz13W08rK108PEgsSCs9OH15Lmxlbmd0aCs9UiYoMTw8eS5leHRyYSktMSxSPj4+PXkuZXh0cmEsSC09eS5leHRyYSx5LmJhY2srPXkuZXh0cmF9eS53YXM9eS5sZW5ndGgseS5tb2RlPTIzO2Nhc2UgMjM6Zm9yKDtLPShvdD15''@;'; put 'put ''LmRpc3Rjb2RlW1ImKDE8PHkuZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSxydD02NTUzNSZvdCwhKChYPW90Pj4+MjQpPD1IKTspe2lmKDA9PT1VKWJyZWFrIHQ7VS0tLFIrPXdbTysrXTw8SCxIKz04fWlmKCEoMjQwJkspKXtmb3IodHQ9WCxXPUssUT1ydDtLPShvdD15LmRpc3Rjb2RlW1ErKChS''@;'; put 'put ''JigxPDx0dCtXKS0xKT4+dHQpXSk+Pj4xNiYyNTUscnQ9NjU1MzUmb3QsISh0dCsoWD1vdD4+PjI0KTw9SCk7KXtpZigwPT09VSlicmVhayB0O1UtLSxSKz13W08rK108PEgsSCs9OH1SPj4+PXR0LEgtPXR0LHkuYmFjays9dHR9aWYoUj4+Pj1YLEgtPVgseS5iYWNrKz1YLDY0Jkspe20ubXNn''@;'; put 'put ''PSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLHkubW9kZT0zMDticmVha315Lm9mZnNldD1ydCx5LmV4dHJhPTE1JksseS5tb2RlPTI0O2Nhc2UgMjQ6aWYoeS5leHRyYSl7Zm9yKGl0PXkuZXh0cmE7SDxpdDspe2lmKDA9PT1VKWJyZWFrIHQ7VS0tLFIrPXdbTysrXTw8SCxIKz04fXkub2Zmc2V0''@;'; put 'put ''Kz1SJigxPDx5LmV4dHJhKS0xLFI+Pj49eS5leHRyYSxILT15LmV4dHJhLHkuYmFjays9eS5leHRyYX1pZih5Lm9mZnNldD55LmRtYXgpe20ubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIseS5tb2RlPTMwO2JyZWFrfXkubW9kZT0yNTtjYXNlIDI1OmlmKDA9PT1WKWJyZWFr''@;'; put 'put ''IHQ7aWYoeS5vZmZzZXQ+KEY9Qy1WKSl7aWYoKEY9eS5vZmZzZXQtRik+eS53aGF2ZSYmeS5zYW5lKXttLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLHkubW9kZT0zMDticmVha31xPUY+eS53bmV4dD95LndzaXplLShGLT15LnduZXh0KTp5LnduZXh0LUYsRj55Lmxlbmd0''@;'; put 'put ''aCYmKEY9eS5sZW5ndGgpLFk9eS53aW5kb3d9ZWxzZSBZPWsscT16LXkub2Zmc2V0LEY9eS5sZW5ndGg7Zm9yKFY8RiYmKEY9ViksVi09Rix5Lmxlbmd0aC09RjtrW3orK109WVtxKytdLC0tRjspOzA9PT15Lmxlbmd0aCYmKHkubW9kZT0yMSk7YnJlYWs7Y2FzZSAyNjppZigwPT09VilicmVh''@;'; put 'put ''ayB0O2tbeisrXT15Lmxlbmd0aCxWLS0seS5tb2RlPTIxO2JyZWFrO2Nhc2UgMjc6aWYoeS53cmFwKXtmb3IoO0g8MzI7KXtpZigwPT09VSlicmVhayB0O1UtLSxSfD13W08rK108PEgsSCs9OH1pZihtLnRvdGFsX291dCs9Qy09Vix5LnRvdGFsKz1DLEMmJihtLmFkbGVyPXkuY2hlY2s9eS5m''@;'; put 'put ''bGFncz9kKHkuY2hlY2ssayxDLHotQyk6cCh5LmNoZWNrLGssQyx6LUMpKSxDPVYsKHkuZmxhZ3M/UjpJKFIpKSE9PXkuY2hlY2spe20ubXNnPSJpbmNvcnJlY3QgZGF0YSBjaGVjayIseS5tb2RlPTMwO2JyZWFrfUg9Uj0wfXkubW9kZT0yODtjYXNlIDI4OmlmKHkud3JhcCYmeS5mbGFncyl7''@;'; put 'put ''Zm9yKDtIPDMyOyl7aWYoMD09PVUpYnJlYWsgdDtVLS0sUis9d1tPKytdPDxILEgrPTh9aWYoUiE9PSg0Mjk0OTY3Mjk1JnkudG90YWwpKXttLm1zZz0iaW5jb3JyZWN0IGxlbmd0aCBjaGVjayIseS5tb2RlPTMwO2JyZWFrfUg9Uj0wfXkubW9kZT0yOTtjYXNlIDI5OmV0PTE7YnJlYWsgdDtj''@;'; put 'put ''YXNlIDMwOmV0PS0zO2JyZWFrIHQ7Y2FzZSAzMTpyZXR1cm4tNDtkZWZhdWx0OnJldHVybiBBfXJldHVybiBtLm5leHRfb3V0PXosbS5hdmFpbF9vdXQ9VixtLm5leHRfaW49TyxtLmF2YWlsX2luPVUseS5ob2xkPVIseS5iaXRzPUgsKHkud3NpemV8fEMhPT1tLmF2YWlsX291dCYmeS5tb2Rl''@;'; put 'put ''PDMwJiYoeS5tb2RlPDI3fHw0IT09ZykpJiZjKG0sbS5vdXRwdXQsbS5uZXh0X291dCxDLW0uYXZhaWxfb3V0KT8oeS5tb2RlPTMxLC00KTooQy09bS5hdmFpbF9vdXQsbS50b3RhbF9pbis9VC09bS5hdmFpbF9pbixtLnRvdGFsX291dCs9Qyx5LnRvdGFsKz1DLHkud3JhcCYmQyYmKG0uYWRs''@;'; put 'put ''ZXI9eS5jaGVjaz15LmZsYWdzP2QoeS5jaGVjayxrLEMsbS5uZXh0X291dC1DKTpwKHkuY2hlY2ssayxDLG0ubmV4dF9vdXQtQykpLG0uZGF0YV90eXBlPXkuYml0cysoeS5sYXN0PzY0OjApKygxMj09PXkubW9kZT8xMjg6MCkrKDIwPT09eS5tb2RlfHwxNT09PXkubW9kZT8yNTY6MCksKDA9''@;'; put 'put ''PVQmJjA9PT1DfHw0PT09ZykmJjA9PT1ldCYmKGV0PS01KSxldCl9LGYuaW5mbGF0ZUVuZD1mdW5jdGlvbihtKXtpZighbXx8IW0uc3RhdGUpcmV0dXJuIEE7dmFyIGc9bS5zdGF0ZTtyZXR1cm4gZy53aW5kb3cmJihnLndpbmRvdz1udWxsKSxtLnN0YXRlPW51bGwsMH0sZi5pbmZsYXRlR2V0''@;'; put 'put ''SGVhZGVyPWZ1bmN0aW9uKG0sZyl7dmFyIHk7cmV0dXJuIG0mJm0uc3RhdGUmJjImKHk9bS5zdGF0ZSkud3JhcD8oKHkuaGVhZD1nKS5kb25lPSExLDApOkF9LGYuaW5mbGF0ZVNldERpY3Rpb25hcnk9ZnVuY3Rpb24obSxnKXt2YXIgeSx3PWcubGVuZ3RoO3JldHVybiBtJiZtLnN0YXRlPzAh''@;'; put 'put ''PT0oeT1tLnN0YXRlKS53cmFwJiYxMSE9PXkubW9kZT9BOjExPT09eS5tb2RlJiZwKDEsZyx3LDApIT09eS5jaGVjaz8tMzpjKG0sZyx3LHcpPyh5Lm1vZGU9MzEsLTQpOih5LmhhdmVkaWN0PTEsMCk6QX0sZi5pbmZsYXRlSW5mbz0icGFrbyBpbmZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0''@;'; put 'put ''KSJ9LHsiLi4vdXRpbHMvY29tbW9uIjo0MSwiLi9hZGxlcjMyIjo0MywiLi9jcmMzMiI6NDUsIi4vaW5mZmFzdCI6NDgsIi4vaW5mdHJlZXMiOjUwfV0sNTA6W2Z1bmN0aW9uKGksaCxmKXt2YXIgdT1pKCIuLi91dGlscy9jb21tb24iKSxwPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3''@;'; put 'put ''LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4LDAsMF0sZD1bMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTcsMTcsMTcsMTcsMTgsMTgsMTgsMTgsMTksMTksMTksMTksMjAsMjAsMjAsMjAsMjEsMjEsMjEsMjEsMTYsNzIsNzhdLHY9WzEs''@;'; put 'put ''MiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3NywwLDBdLF89WzE2LDE2LDE2LDE2LDE3LDE3LDE4LDE4LDE5LDE5LDIwLDIwLDIxLDIxLDIyLDIy''@;'; put 'put ''LDIzLDIzLDI0LDI0LDI1LDI1LDI2LDI2LDI3LDI3LDI4LDI4LDI5LDI5LDY0LDY0XTtoLmV4cG9ydHM9ZnVuY3Rpb24oQSxJLEwsTixQLEIsJCxEKXt2YXIgeCxNLGosYyxtLGcseSx3LGssTz1ELmJpdHMsej0wLFU9MCxWPTAsUj0wLEg9MCxUPTAsQz0wLEY9MCxxPTAsWT0wLFg9bnVsbCxL''@;'; put 'put ''PTAscnQ9bmV3IHUuQnVmMTYoMTYpLHR0PW5ldyB1LkJ1ZjE2KDE2KSxXPW51bGwsUT0wO2Zvcih6PTA7ejw9MTU7eisrKXJ0W3pdPTA7Zm9yKFU9MDtVPE47VSsrKXJ0W0lbTCtVXV0rKztmb3IoSD1PLFI9MTU7MTw9UiYmMD09PXJ0W1JdO1ItLSk7aWYoUjxIJiYoSD1SKSwwPT09UilyZXR1''@;'; put 'put ''cm4gUFtCKytdPTIwOTcxNTIwLFBbQisrXT0yMDk3MTUyMCxELmJpdHM9MSwwO2ZvcihWPTE7VjxSJiYwPT09cnRbVl07VisrKTtmb3IoSDxWJiYoSD1WKSx6PUY9MTt6PD0xNTt6KyspaWYoRjw8PTEsKEYtPXJ0W3pdKTwwKXJldHVybi0xO2lmKDA8RiYmKDA9PT1BfHwxIT09UikpcmV0dXJu''@;'; put 'put ''LTE7Zm9yKHR0WzFdPTAsej0xO3o8MTU7eisrKXR0W3orMV09dHRbel0rcnRbel07Zm9yKFU9MDtVPE47VSsrKTAhPT1JW0wrVV0mJigkW3R0W0lbTCtVXV0rK109VSk7aWYoZz0wPT09QT8oWD1XPSQsMTkpOjE9PT1BPyhYPXAsSy09MjU3LFc9ZCxRLT0yNTcsMjU2KTooWD12LFc9XywtMSks''@;'; put 'put ''ej1WLG09QixDPVU9WT0wLGo9LTEsYz0ocT0xPDwoVD1IKSktMSwxPT09QSYmODUyPHF8fDI9PT1BJiY1OTI8cSlyZXR1cm4gMTtmb3IoOzspe2Zvcih5PXotQyxrPSRbVV08Zz8odz0wLCRbVV0pOiRbVV0+Zz8odz1XW1ErJFtVXV0sWFtLKyRbVV1dKToodz05NiwwKSx4PTE8PHotQyxWPU09''@;'; put 'put ''MTw8VDtQW20rKFk+PkMpKyhNLT14KV09eTw8MjR8dzw8MTZ8aywwIT09TTspO2Zvcih4PTE8PHotMTtZJng7KXg+Pj0xO2lmKDAhPT14PyhZJj14LTEsWSs9eCk6WT0wLFUrKywwPT0tLXJ0W3pdKXtpZih6PT09UilicmVhazt6PUlbTCskW1VdXX1pZihIPHomJihZJmMpIT09ail7Zm9yKDA9''@;'; put 'put ''PT1DJiYoQz1IKSxtKz1WLEY9MTw8KFQ9ei1DKTtUK0M8UiYmISgoRi09cnRbVCtDXSk8PTApOylUKyssRjw8PTE7aWYocSs9MTw8VCwxPT09QSYmODUyPHF8fDI9PT1BJiY1OTI8cSlyZXR1cm4gMTtQW2o9WSZjXT1IPDwyNHxUPDwxNnxtLUJ9fXJldHVybiAwIT09WSYmKFBbbStZXT16LUM8''@;'; put 'put ''PDI0fDY0PDwxNiksRC5iaXRzPUgsMH19LHsiLi4vdXRpbHMvY29tbW9uIjo0MX1dLDUxOltmdW5jdGlvbihpLGgsZil7aC5leHBvcnRzPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJk''@;'; put 'put ''YXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn19LHt9XSw1MjpbZnVuY3Rpb24oaSxoLGYpe3ZhciB1PWkoIi4uL3V0aWxzL2NvbW1vbiIpO2Z1bmN0aW9uIHAoVyl7Zm9yKHZhciBRPVcu''@;'; put 'put ''bGVuZ3RoOzA8PS0tUTspV1tRXT0wfXZhciBJPVswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDBdLEw9WzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTNdLE49WzAs''@;'; put 'put ''MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddLFA9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdLEI9bmV3IEFycmF5KDU3Nik7cChCKTt2YXIgJD1uZXcgQXJyYXkoNjApO3AoJCk7dmFyIEQ9bmV3IEFycmF5KDUxMik7cChEKTt2YXIg''@;'; put 'put ''eD1uZXcgQXJyYXkoMjU2KTtwKHgpO3ZhciBNPW5ldyBBcnJheSgyOSk7cChNKTt2YXIgaixjLG0sZz1uZXcgQXJyYXkoMzApO2Z1bmN0aW9uIHkoVyxRLEcsZXQsbnQpe3RoaXMuc3RhdGljX3RyZWU9Vyx0aGlzLmV4dHJhX2JpdHM9USx0aGlzLmV4dHJhX2Jhc2U9Ryx0aGlzLmVsZW1zPWV0''@;'; put 'put ''LHRoaXMubWF4X2xlbmd0aD1udCx0aGlzLmhhc19zdHJlZT1XJiZXLmxlbmd0aH1mdW5jdGlvbiB3KFcsUSl7dGhpcy5keW5fdHJlZT1XLHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz1RfWZ1bmN0aW9uIGsoVyl7cmV0dXJuIFc8MjU2P0RbV106RFsyNTYrKFc+Pj43KV19ZnVuY3Rp''@;'; put 'put ''b24gTyhXLFEpe1cucGVuZGluZ19idWZbVy5wZW5kaW5nKytdPTI1NSZRLFcucGVuZGluZ19idWZbVy5wZW5kaW5nKytdPVE+Pj44JjI1NX1mdW5jdGlvbiB6KFcsUSxHKXtXLmJpX3ZhbGlkPjE2LUc/KFcuYmlfYnVmfD1RPDxXLmJpX3ZhbGlkJjY1NTM1LE8oVyxXLmJpX2J1ZiksVy5iaV9i''@;'; put 'put ''dWY9UT4+MTYtVy5iaV92YWxpZCxXLmJpX3ZhbGlkKz1HLTE2KTooVy5iaV9idWZ8PVE8PFcuYmlfdmFsaWQmNjU1MzUsVy5iaV92YWxpZCs9Ryl9ZnVuY3Rpb24gVShXLFEsRyl7eihXLEdbMipRXSxHWzIqUSsxXSl9ZnVuY3Rpb24gVihXLFEpe2Zvcih2YXIgRz0wO0d8PTEmVyxXPj4+PTEs''@;'; put 'put ''Rzw8PTEsMDwtLVE7KTtyZXR1cm4gRz4+PjF9ZnVuY3Rpb24gUihXLFEsRyl7dmFyIGV0LG50LGl0PW5ldyBBcnJheSgxNiksb3Q9MDtmb3IoZXQ9MTtldDw9MTU7ZXQrKylpdFtldF09b3Q9b3QrR1tldC0xXTw8MTtmb3IobnQ9MDtudDw9UTtudCsrKXt2YXIgaHQ9V1syKm50KzFdOzAhPT1o''@;'; put 'put ''dCYmKFdbMipudF09VihpdFtodF0rKyxodCkpfX1mdW5jdGlvbiBIKFcpe3ZhciBRO2ZvcihRPTA7UTwyODY7USsrKVcuZHluX2x0cmVlWzIqUV09MDtmb3IoUT0wO1E8MzA7USsrKVcuZHluX2R0cmVlWzIqUV09MDtmb3IoUT0wO1E8MTk7USsrKVcuYmxfdHJlZVsyKlFdPTA7Vy5keW5fbHRy''@;'; put 'put ''ZWVbNTEyXT0xLFcub3B0X2xlbj1XLnN0YXRpY19sZW49MCxXLmxhc3RfbGl0PVcubWF0Y2hlcz0wfWZ1bmN0aW9uIFQoVyl7ODxXLmJpX3ZhbGlkP08oVyxXLmJpX2J1Zik6MDxXLmJpX3ZhbGlkJiYoVy5wZW5kaW5nX2J1ZltXLnBlbmRpbmcrK109Vy5iaV9idWYpLFcuYmlfYnVmPTAsVy5i''@;'; put 'put ''aV92YWxpZD0wfWZ1bmN0aW9uIEMoVyxRLEcsZXQpe3ZhciBudD0yKlEsaXQ9MipHO3JldHVybiBXW250XTxXW2l0XXx8V1tudF09PT1XW2l0XSYmZXRbUV08PWV0W0ddfWZ1bmN0aW9uIEYoVyxRLEcpe2Zvcih2YXIgZXQ9Vy5oZWFwW0ddLG50PUc8PDE7bnQ8PVcuaGVhcF9sZW4mJihudDxX''@;'; put 'put ''LmhlYXBfbGVuJiZDKFEsVy5oZWFwW250KzFdLFcuaGVhcFtudF0sVy5kZXB0aCkmJm50KyssIUMoUSxldCxXLmhlYXBbbnRdLFcuZGVwdGgpKTspVy5oZWFwW0ddPVcuaGVhcFtudF0sRz1udCxudDw8PTE7Vy5oZWFwW0ddPWV0fWZ1bmN0aW9uIHEoVyxRLEcpe3ZhciBldCxudCxpdCxvdCxo''@;'; put 'put ''dD0wO2lmKDAhPT1XLmxhc3RfbGl0KWZvcig7ZXQ9Vy5wZW5kaW5nX2J1ZltXLmRfYnVmKzIqaHRdPDw4fFcucGVuZGluZ19idWZbVy5kX2J1ZisyKmh0KzFdLG50PVcucGVuZGluZ19idWZbVy5sX2J1ZitodF0saHQrKywwPT09ZXQ/VShXLG50LFEpOihVKFcsKGl0PXhbbnRdKSsyNTYrMSxR''@;'; put 'put ''KSwwIT09KG90PUlbaXRdKSYmeihXLG50LT1NW2l0XSxvdCksVShXLGl0PWsoLS1ldCksRyksMCE9PShvdD1MW2l0XSkmJnooVyxldC09Z1tpdF0sb3QpKSxodDxXLmxhc3RfbGl0Oyk7VShXLDI1NixRKX1mdW5jdGlvbiBZKFcsUSl7dmFyIEcsZXQsbnQsaXQ9US5keW5fdHJlZSxvdD1RLnN0''@;'; put 'put ''YXRfZGVzYy5zdGF0aWNfdHJlZSxodD1RLnN0YXRfZGVzYy5oYXNfc3RyZWUsZnQ9US5zdGF0X2Rlc2MuZWxlbXMscHQ9LTE7Zm9yKFcuaGVhcF9sZW49MCxXLmhlYXBfbWF4PTU3MyxHPTA7RzxmdDtHKyspMCE9PWl0WzIqR10/KFcuaGVhcFsrK1cuaGVhcF9sZW5dPXB0PUcsVy5kZXB0aFtH''@;'; put 'put ''XT0wKTppdFsyKkcrMV09MDtmb3IoO1cuaGVhcF9sZW48MjspaXRbMioobnQ9Vy5oZWFwWysrVy5oZWFwX2xlbl09cHQ8Mj8rK3B0OjApXT0xLFcuZGVwdGhbbnRdPTAsVy5vcHRfbGVuLS0saHQmJihXLnN0YXRpY19sZW4tPW90WzIqbnQrMV0pO2ZvcihRLm1heF9jb2RlPXB0LEc9Vy5oZWFw''@;'; put 'put ''X2xlbj4+MTsxPD1HO0ctLSlGKFcsaXQsRyk7Zm9yKG50PWZ0O0c9Vy5oZWFwWzFdLFcuaGVhcFsxXT1XLmhlYXBbVy5oZWFwX2xlbi0tXSxGKFcsaXQsMSksZXQ9Vy5oZWFwWzFdLFcuaGVhcFstLVcuaGVhcF9tYXhdPUcsVy5oZWFwWy0tVy5oZWFwX21heF09ZXQsaXRbMipudF09aXRbMipH''@;'; put 'put ''XStpdFsyKmV0XSxXLmRlcHRoW250XT0oVy5kZXB0aFtHXT49Vy5kZXB0aFtldF0/Vy5kZXB0aFtHXTpXLmRlcHRoW2V0XSkrMSxpdFsyKkcrMV09aXRbMipldCsxXT1udCxXLmhlYXBbMV09bnQrKyxGKFcsaXQsMSksMjw9Vy5oZWFwX2xlbjspO1cuaGVhcFstLVcuaGVhcF9tYXhdPVcuaGVh''@;'; put 'put ''cFsxXSxmdW5jdGlvbihUdCx5dCl7dmFyIHd0LHF0LEV0LF90LEF0LGd0LG10PXl0LmR5bl90cmVlLFZ0PXl0Lm1heF9jb2RlLFN0PXl0LnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxPdD15dC5zdGF0X2Rlc2MuaGFzX3N0cmVlLHllPXl0LnN0YXRfZGVzYy5leHRyYV9iaXRzLFJ0PXl0LnN0YXRf''@;'; put 'put ''ZGVzYy5leHRyYV9iYXNlLE50PXl0LnN0YXRfZGVzYy5tYXhfbGVuZ3RoLGFlPTA7Zm9yKF90PTA7X3Q8PTE1O190KyspVHQuYmxfY291bnRbX3RdPTA7Zm9yKG10WzIqVHQuaGVhcFtUdC5oZWFwX21heF0rMV09MCx3dD1UdC5oZWFwX21heCsxO3d0PDU3Mzt3dCsrKU50PChfdD1tdFsyKm10''@;'; put 'put ''WzIqKHF0PVR0LmhlYXBbd3RdKSsxXSsxXSsxKSYmKF90PU50LGFlKyspLG10WzIqcXQrMV09X3QsVnQ8cXR8fChUdC5ibF9jb3VudFtfdF0rKyxBdD0wLFJ0PD1xdCYmKEF0PXllW3F0LVJ0XSksVHQub3B0X2xlbis9KGd0PW10WzIqcXRdKSooX3QrQXQpLE90JiYoVHQuc3RhdGljX2xlbis9''@;'; put 'put ''Z3QqKFN0WzIqcXQrMV0rQXQpKSk7aWYoMCE9PWFlKXtkb3tmb3IoX3Q9TnQtMTswPT09VHQuYmxfY291bnRbX3RdOylfdC0tO1R0LmJsX2NvdW50W190XS0tLFR0LmJsX2NvdW50W190KzFdKz0yLFR0LmJsX2NvdW50W050XS0tLGFlLT0yfXdoaWxlKDA8YWUpO2ZvcihfdD1OdDswIT09X3Q7''@;'; put 'put ''X3QtLSlmb3IocXQ9VHQuYmxfY291bnRbX3RdOzAhPT1xdDspVnQ8KEV0PVR0LmhlYXBbLS13dF0pfHwobXRbMipFdCsxXSE9PV90JiYoVHQub3B0X2xlbis9KF90LW10WzIqRXQrMV0pKm10WzIqRXRdLG10WzIqRXQrMV09X3QpLHF0LS0pfX0oVyxRKSxSKGl0LHB0LFcuYmxfY291bnQpfWZ1''@;'; put 'put ''bmN0aW9uIFgoVyxRLEcpe3ZhciBldCxudCxpdD0tMSxvdD1RWzFdLGh0PTAsZnQ9NyxwdD00O2ZvcigwPT09b3QmJihmdD0xMzgscHQ9MyksUVsyKihHKzEpKzFdPTY1NTM1LGV0PTA7ZXQ8PUc7ZXQrKyludD1vdCxvdD1RWzIqKGV0KzEpKzFdLCsraHQ8ZnQmJm50PT09b3R8fChodDxwdD9X''@;'; put 'put ''LmJsX3RyZWVbMipudF0rPWh0OjAhPT1udD8obnQhPT1pdCYmVy5ibF90cmVlWzIqbnRdKyssVy5ibF90cmVlWzMyXSsrKTpodDw9MTA/Vy5ibF90cmVlWzM0XSsrOlcuYmxfdHJlZVszNl0rKyxpdD1udCxwdD0oaHQ9MCk9PT1vdD8oZnQ9MTM4LDMpOm50PT09b3Q/KGZ0PTYsMyk6KGZ0PTcs''@;'; put 'put ''NCkpfWZ1bmN0aW9uIEsoVyxRLEcpe3ZhciBldCxudCxpdD0tMSxvdD1RWzFdLGh0PTAsZnQ9NyxwdD00O2ZvcigwPT09b3QmJihmdD0xMzgscHQ9MyksZXQ9MDtldDw9RztldCsrKWlmKG50PW90LG90PVFbMiooZXQrMSkrMV0sISgrK2h0PGZ0JiZudD09PW90KSl7aWYoaHQ8cHQpZm9yKDtV''@;'; put 'put ''KFcsbnQsVy5ibF90cmVlKSwwIT0tLWh0Oyk7ZWxzZSAwIT09bnQ/KG50IT09aXQmJihVKFcsbnQsVy5ibF90cmVlKSxodC0tKSxVKFcsMTYsVy5ibF90cmVlKSx6KFcsaHQtMywyKSk6aHQ8PTEwPyhVKFcsMTcsVy5ibF90cmVlKSx6KFcsaHQtMywzKSk6KFUoVywxOCxXLmJsX3RyZWUpLHoo''@;'; put 'put ''VyxodC0xMSw3KSk7aXQ9bnQscHQ9KGh0PTApPT09b3Q/KGZ0PTEzOCwzKTpudD09PW90PyhmdD02LDMpOihmdD03LDQpfX1wKGcpO3ZhciBydD0hMTtmdW5jdGlvbiB0dChXLFEsRyxldCl7dmFyIG50LGl0LG90O3ooVywwKyhldD8xOjApLDMpLGl0PVEsb3Q9RyxUKG50PVcpLE8obnQsb3Qp''@;'; put 'put ''LE8obnQsfm90KSx1LmFycmF5U2V0KG50LnBlbmRpbmdfYnVmLG50LndpbmRvdyxpdCxvdCxudC5wZW5kaW5nKSxudC5wZW5kaW5nKz1vdH1mLl90cl9pbml0PWZ1bmN0aW9uKFcpe3J0fHwoZnVuY3Rpb24oKXt2YXIgUSxHLGV0LG50LGl0LG90PW5ldyBBcnJheSgxNik7Zm9yKG50PWV0PTA7''@;'; put 'put ''bnQ8Mjg7bnQrKylmb3IoTVtudF09ZXQsUT0wO1E8MTw8SVtudF07USsrKXhbZXQrK109bnQ7Zm9yKHhbZXQtMV09bnQsbnQ9aXQ9MDtudDwxNjtudCsrKWZvcihnW250XT1pdCxRPTA7UTwxPDxMW250XTtRKyspRFtpdCsrXT1udDtmb3IoaXQ+Pj03O250PDMwO250KyspZm9yKGdbbnRdPWl0''@;'; put 'put ''PDw3LFE9MDtRPDE8PExbbnRdLTc7USsrKURbMjU2K2l0KytdPW50O2ZvcihHPTA7Rzw9MTU7RysrKW90W0ddPTA7Zm9yKFE9MDtRPD0xNDM7KUJbMipRKzFdPTgsUSsrLG90WzhdKys7Zm9yKDtRPD0yNTU7KUJbMipRKzFdPTksUSsrLG90WzldKys7Zm9yKDtRPD0yNzk7KUJbMipRKzFdPTcs''@;'; put 'put ''USsrLG90WzddKys7Zm9yKDtRPD0yODc7KUJbMipRKzFdPTgsUSsrLG90WzhdKys7Zm9yKFIoQiwyODcsb3QpLFE9MDtRPDMwO1ErKykkWzIqUSsxXT01LCRbMipRXT1WKFEsNSk7aj1uZXcgeShCLEksMjU3LDI4NiwxNSksYz1uZXcgeSgkLEwsMCwzMCwxNSksbT1uZXcgeShuZXcgQXJyYXko''@;'; put 'put ''MCksTiwwLDE5LDcpfSgpLHJ0PSEwKSxXLmxfZGVzYz1uZXcgdyhXLmR5bl9sdHJlZSxqKSxXLmRfZGVzYz1uZXcgdyhXLmR5bl9kdHJlZSxjKSxXLmJsX2Rlc2M9bmV3IHcoVy5ibF90cmVlLG0pLFcuYmlfYnVmPTAsVy5iaV92YWxpZD0wLEgoVyl9LGYuX3RyX3N0b3JlZF9ibG9jaz10dCxm''@;'; put 'put ''Ll90cl9mbHVzaF9ibG9jaz1mdW5jdGlvbihXLFEsRyxldCl7dmFyIG50LGl0LG90PTA7MDxXLmxldmVsPygyPT09Vy5zdHJtLmRhdGFfdHlwZSYmKFcuc3RybS5kYXRhX3R5cGU9ZnVuY3Rpb24oaHQpe3ZhciBmdCxwdD00MDkzNjI0NDQ3O2ZvcihmdD0wO2Z0PD0zMTtmdCsrLHB0Pj4+PTEp''@;'; put 'put ''aWYoMSZwdCYmMCE9PWh0LmR5bl9sdHJlZVsyKmZ0XSlyZXR1cm4gMDtpZigwIT09aHQuZHluX2x0cmVlWzE4XXx8MCE9PWh0LmR5bl9sdHJlZVsyMF18fDAhPT1odC5keW5fbHRyZWVbMjZdKXJldHVybiAxO2ZvcihmdD0zMjtmdDwyNTY7ZnQrKylpZigwIT09aHQuZHluX2x0cmVlWzIqZnRd''@;'; put 'put ''KXJldHVybiAxO3JldHVybiAwfShXKSksWShXLFcubF9kZXNjKSxZKFcsVy5kX2Rlc2MpLG90PWZ1bmN0aW9uKGh0KXt2YXIgZnQ7Zm9yKFgoaHQsaHQuZHluX2x0cmVlLGh0LmxfZGVzYy5tYXhfY29kZSksWChodCxodC5keW5fZHRyZWUsaHQuZF9kZXNjLm1heF9jb2RlKSxZKGh0LGh0LmJs''@;'; put 'put ''X2Rlc2MpLGZ0PTE4OzM8PWZ0JiYwPT09aHQuYmxfdHJlZVsyKlBbZnRdKzFdO2Z0LS0pO3JldHVybiBodC5vcHRfbGVuKz0zKihmdCsxKSs1KzUrNCxmdH0oVyksKGl0PVcuc3RhdGljX2xlbiszKzc+Pj4zKTw9KG50PVcub3B0X2xlbiszKzc+Pj4zKSYmKG50PWl0KSk6bnQ9aXQ9Rys1LEcr''@;'; put 'put ''NDw9bnQmJi0xIT09UT90dChXLFEsRyxldCk6ND09PVcuc3RyYXRlZ3l8fGl0PT09bnQ/KHooVywyKyhldD8xOjApLDMpLHEoVyxCLCQpKTooeihXLDQrKGV0PzE6MCksMyksZnVuY3Rpb24oaHQsZnQscHQsVHQpe3ZhciB5dDtmb3IoeihodCxmdC0yNTcsNSkseihodCxwdC0xLDUpLHooaHQs''@;'; put 'put ''VHQtNCw0KSx5dD0wO3l0PFR0O3l0KyspeihodCxodC5ibF90cmVlWzIqUFt5dF0rMV0sMyk7SyhodCxodC5keW5fbHRyZWUsZnQtMSksSyhodCxodC5keW5fZHRyZWUscHQtMSl9KFcsVy5sX2Rlc2MubWF4X2NvZGUrMSxXLmRfZGVzYy5tYXhfY29kZSsxLG90KzEpLHEoVyxXLmR5bl9sdHJl''@;'; put 'put ''ZSxXLmR5bl9kdHJlZSkpLEgoVyksZXQmJlQoVyl9LGYuX3RyX3RhbGx5PWZ1bmN0aW9uKFcsUSxHKXtyZXR1cm4gVy5wZW5kaW5nX2J1ZltXLmRfYnVmKzIqVy5sYXN0X2xpdF09UT4+PjgmMjU1LFcucGVuZGluZ19idWZbVy5kX2J1ZisyKlcubGFzdF9saXQrMV09MjU1JlEsVy5wZW5kaW5n''@;'; put 'put ''X2J1ZltXLmxfYnVmK1cubGFzdF9saXRdPTI1NSZHLFcubGFzdF9saXQrKywwPT09UT9XLmR5bl9sdHJlZVsyKkddKys6KFcubWF0Y2hlcysrLFEtLSxXLmR5bl9sdHJlZVsyKih4W0ddKzI1NisxKV0rKyxXLmR5bl9kdHJlZVsyKmsoUSldKyspLFcubGFzdF9saXQ9PT1XLmxpdF9idWZzaXpl''@;'; put 'put ''LTF9LGYuX3RyX2FsaWduPWZ1bmN0aW9uKFcpe3ZhciBRO3ooVywyLDMpLFUoVywyNTYsQiksMTY9PT0oUT1XKS5iaV92YWxpZD8oTyhRLFEuYmlfYnVmKSxRLmJpX2J1Zj0wLFEuYmlfdmFsaWQ9MCk6ODw9US5iaV92YWxpZCYmKFEucGVuZGluZ19idWZbUS5wZW5kaW5nKytdPTI1NSZRLmJp''@;'; put 'put ''X2J1ZixRLmJpX2J1Zj4+PTgsUS5iaV92YWxpZC09OCl9fSx7Ii4uL3V0aWxzL2NvbW1vbiI6NDF9XSw1MzpbZnVuY3Rpb24oaSxoLGYpe2guZXhwb3J0cz1mdW5jdGlvbigpe3RoaXMuaW5wdXQ9bnVsbCx0aGlzLm5leHRfaW49MCx0aGlzLmF2YWlsX2luPTAsdGhpcy50b3RhbF9pbj0wLHRo''@;'; put 'put ''aXMub3V0cHV0PW51bGwsdGhpcy5uZXh0X291dD0wLHRoaXMuYXZhaWxfb3V0PTAsdGhpcy50b3RhbF9vdXQ9MCx0aGlzLm1zZz0iIix0aGlzLnN0YXRlPW51bGwsdGhpcy5kYXRhX3R5cGU9Mix0aGlzLmFkbGVyPTB9fSx7fV0sNTQ6W2Z1bmN0aW9uKGksaCxmKXsoZnVuY3Rpb24odSl7IWZ1''@;'; put 'put ''bmN0aW9uKHApe2lmKCFwLnNldEltbWVkaWF0ZSl7dmFyIHYsXyxBLEksTD0xLE49e30sUD0hMSxCPXAuZG9jdW1lbnQsJD1PYmplY3QuZ2V0UHJvdG90eXBlT2YmJk9iamVjdC5nZXRQcm90b3R5cGVPZihwKTskPSQmJiQuc2V0VGltZW91dD8kOnAsdj0iW29iamVjdCBwcm9jZXNzXSI9PT17''@;'; put 'put ''fS50b1N0cmluZy5jYWxsKHAucHJvY2Vzcyk/ZnVuY3Rpb24oail7Yi5uZXh0VGljayhmdW5jdGlvbigpe3goail9KX06ZnVuY3Rpb24oKXtpZihwLnBvc3RNZXNzYWdlJiYhcC5pbXBvcnRTY3JpcHRzKXt2YXIgaj0hMCxjPXAub25tZXNzYWdlO3JldHVybiBwLm9ubWVzc2FnZT1mdW5jdGlv''@;'; put 'put ''bigpe2o9ITF9LHAucG9zdE1lc3NhZ2UoIiIsIioiKSxwLm9ubWVzc2FnZT1jLGp9fSgpPyhJPSJzZXRJbW1lZGlhdGUkIitNYXRoLnJhbmRvbSgpKyIkIixwLmFkZEV2ZW50TGlzdGVuZXI/cC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixNLCExKTpwLmF0dGFjaEV2ZW50KCJvbm1lc3Nh''@;'; put 'put ''Z2UiLE0pLGZ1bmN0aW9uKGope3AucG9zdE1lc3NhZ2UoSStqLCIqIil9KTpwLk1lc3NhZ2VDaGFubmVsPygoQT1uZXcgTWVzc2FnZUNoYW5uZWwpLnBvcnQxLm9ubWVzc2FnZT1mdW5jdGlvbihqKXt4KGouZGF0YSl9LGZ1bmN0aW9uKGope0EucG9ydDIucG9zdE1lc3NhZ2Uoail9KTpCJiYi''@;'; put 'put ''b25yZWFkeXN0YXRlY2hhbmdlImluIEIuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik/KF89Qi5kb2N1bWVudEVsZW1lbnQsZnVuY3Rpb24oail7dmFyIGM9Qi5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe3goaiksYy5vbnJlYWR5c3RhdGVj''@;'; put 'put ''aGFuZ2U9bnVsbCxfLnJlbW92ZUNoaWxkKGMpLGM9bnVsbH0sXy5hcHBlbmRDaGlsZChjKX0pOmZ1bmN0aW9uKGope3NldFRpbWVvdXQoeCwwLGopfSwkLnNldEltbWVkaWF0ZT1mdW5jdGlvbihqKXsiZnVuY3Rpb24iIT10eXBlb2YgaiYmKGo9bmV3IEZ1bmN0aW9uKCIiK2opKTtmb3IodmFy''@;'; put 'put ''IGM9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSksbT0wO208Yy5sZW5ndGg7bSsrKWNbbV09YXJndW1lbnRzW20rMV07cmV0dXJuIE5bTF09e2NhbGxiYWNrOmosYXJnczpjfSx2KEwpLEwrK30sJC5jbGVhckltbWVkaWF0ZT1EfWZ1bmN0aW9uIEQoail7ZGVsZXRlIE5bal19ZnVuY3Rp''@;'; put 'put ''b24geChqKXtpZihQKXNldFRpbWVvdXQoeCwwLGopO2Vsc2V7dmFyIGM9TltqXTtpZihjKXtQPSEwO3RyeXshZnVuY3Rpb24obSl7dmFyIGc9bS5jYWxsYmFjayx5PW0uYXJncztzd2l0Y2goeS5sZW5ndGgpe2Nhc2UgMDpnKCk7YnJlYWs7Y2FzZSAxOmcoeVswXSk7YnJlYWs7Y2FzZSAyOmco''@;'; put 'put ''eVswXSx5WzFdKTticmVhaztjYXNlIDM6Zyh5WzBdLHlbMV0seVsyXSk7YnJlYWs7ZGVmYXVsdDpnLmFwcGx5KHZvaWQgMCx5KX19KGMpfWZpbmFsbHl7RChqKSxQPSExfX19fWZ1bmN0aW9uIE0oail7ai5zb3VyY2U9PT1wJiYic3RyaW5nIj09dHlwZW9mIGouZGF0YSYmMD09PWouZGF0YS5p''@;'; put 'put ''bmRleE9mKEkpJiZ4KCtqLmRhdGEuc2xpY2UoSS5sZW5ndGgpKX19KHR5cGVvZiBzZWxmPiJ1Ij92b2lkIDA9PT11P3RoaXM6dTpzZWxmKX0pLmNhbGwodGhpcyx2b2lkIDAhPT1hP2E6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dfSx7fSxb''@;'; put 'put ''MTBdKSgxMCl9KX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMscygiX3Byb2Nlc3MiKSx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9LHMoImJ1ZmZlciIpLkJ1ZmZlcixhcmd1bWVudHNbM10sYXJndW1lbnRz''@;'; put 'put ''WzRdLGFyZ3VtZW50c1s1XSxhcmd1bWVudHNbNl0scygidGltZXJzIikuc2V0SW1tZWRpYXRlKX0se19wcm9jZXNzOjQ2NyxidWZmZXI6MjIwLHRpbWVyczo1MjN9XSw0NDI6W2Z1bmN0aW9uKHMsRSxTKXsoZnVuY3Rpb24oYil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBhPS9bXFxe''@;'; put 'put ''JC4qKz8oKVtcXXt9fF0vZyxvPVJlZ0V4cChhLnNvdXJjZSksdD0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLGU9Im9iamVjdCI9PXR5cGVvZiBiJiZiJiZiLk9iamVjdD09PU9iamVjdCYmYnx8dHx8RnVuY3Rpb24oInJldHVybiB0aGlz''@;'; put 'put ''IikoKSxsPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsbj1lLlN5bWJvbCxpPW4/bi5wcm90b3R5cGU6dm9pZCAwLGg9aT9pLnRvU3RyaW5nOnZvaWQgMDtFLmV4cG9ydHM9ZnVuY3Rpb24odSl7dmFyIHA7cmV0dXJuKHU9bnVsbD09KHA9dSk/IiI6ZnVuY3Rpb24gZih1KXtpZigic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIHUpcmV0dXJuIHU7aWYoInN5bWJvbCI9PXR5cGVvZihkPXUpfHxmdW5jdGlvbih2KXtyZXR1cm4hIXYmJiJvYmplY3QiPT10eXBlb2Ygdn0oZCkmJiJbb2JqZWN0IFN5bWJvbF0iPT1sLmNhbGwoZCkpcmV0dXJuIGg/aC5jYWxsKHUpOiIiO3ZhciBkLHA9dSsiIjtyZXR1cm4i''@;'; put 'put ''MCI9PXAmJjEvdT09LTEvMD8iLTAiOnB9KHApKSYmby50ZXN0KHUpP3UucmVwbGFjZShhLCJcXCQmIik6dX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7''@;'; put 'put ''fV0sNDQzOltmdW5jdGlvbihzLEUsUyl7KGZ1bmN0aW9uKGIpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgYT0iW29iamVjdCBBcmd1bWVudHNdIixvPSJbb2JqZWN0IE1hcF0iLHI9IltvYmplY3QgT2JqZWN0XSIsdD0iW29iamVjdCBTZXRdIixlPS9cLnxcWyg/OlteW1xdXSp8KFsi''@;'; put 'put ''J10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLGw9L15cdyokLyxuPS9eXC4vLGk9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csaD0vXFwoXFwpPy9nLGY9''@;'; put 'put ''L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sdT0vXig/OjB8WzEtOV1cZCopJC8scD17fTtwWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1wWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1wWyJbb2JqZWN0IEludDhBcnJheV0iXT1wWyJbb2JqZWN0IEludDE2QXJyYXldIl09cFsiW29i''@;'; put 'put ''amVjdCBJbnQzMkFycmF5XSJdPXBbIltvYmplY3QgVWludDhBcnJheV0iXT1wWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPXBbIltvYmplY3QgVWludDE2QXJyYXldIl09cFsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxwW2FdPXBbIltvYmplY3QgQXJyYXldIl09cFsiW29iamVj''@;'; put 'put ''dCBBcnJheUJ1ZmZlcl0iXT1wWyJbb2JqZWN0IEJvb2xlYW5dIl09cFsiW29iamVjdCBEYXRhVmlld10iXT1wWyJbb2JqZWN0IERhdGVdIl09cFsiW29iamVjdCBFcnJvcl0iXT1wWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPXBbb109cFsiW29iamVjdCBOdW1iZXJdIl09cFtyXT1wWyJbb2JqZWN0''@;'; put 'put ''IFJlZ0V4cF0iXT1wW3RdPXBbIltvYmplY3QgU3RyaW5nXSJdPXBbIltvYmplY3QgV2Vha01hcF0iXT0hMTt2YXIgZD0ib2JqZWN0Ij09dHlwZW9mIGImJmImJmIuT2JqZWN0PT09T2JqZWN0JiZiLHY9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYm''@;'; put 'put ''c2VsZixfPWR8fHZ8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksQT0ib2JqZWN0Ij09dHlwZW9mIFMmJlMmJiFTLm5vZGVUeXBlJiZTLEk9QSYmIm9iamVjdCI9PXR5cGVvZiBFJiZFJiYhRS5ub2RlVHlwZSYmRSxMPUkmJkkuZXhwb3J0cz09PUEmJmQucHJvY2VzcyxOPWZ1bmN0aW9uKCl7''@;'; put 'put ''dHJ5e3JldHVybiBMJiZMLmJpbmRpbmcoInV0aWwiKX1jYXRjaHt9fSgpLFA9TiYmTi5pc1R5cGVkQXJyYXk7ZnVuY3Rpb24gQihaLHN0LGN0LHV0KXtmb3IodmFyIGJ0PS0xLEN0PVo/Wi5sZW5ndGg6MDsrK2J0PEN0Oyl7dmFyIE10PVpbYnRdO3N0KHV0LE10LGN0KE10KSxaKX1yZXR1cm4g''@;'; put 'put ''dXR9ZnVuY3Rpb24gJChaLHN0KXtmb3IodmFyIGN0PS0xLHV0PVo/Wi5sZW5ndGg6MDsrK2N0PHV0OylpZihzdChaW2N0XSxjdCxaKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBEKFope3ZhciBzdD0hMTtpZihudWxsIT1aJiYiZnVuY3Rpb24iIT10eXBlb2YgWi50b1N0cmluZyl0cnl7''@;'; put 'put ''c3Q9ISEoWisiIil9Y2F0Y2h7fXJldHVybiBzdH1mdW5jdGlvbiB4KFope3ZhciBzdD0tMSxjdD1BcnJheShaLnNpemUpO3JldHVybiBaLmZvckVhY2goZnVuY3Rpb24odXQsYnQpe2N0Wysrc3RdPVtidCx1dF19KSxjdH1mdW5jdGlvbiBNKFope3ZhciBzdD0tMSxjdD1BcnJheShaLnNpemUp''@;'; put 'put ''O3JldHVybiBaLmZvckVhY2goZnVuY3Rpb24odXQpe2N0Wysrc3RdPXV0fSksY3R9dmFyIGosYyxtLGc9QXJyYXkucHJvdG90eXBlLHk9RnVuY3Rpb24ucHJvdG90eXBlLHc9T2JqZWN0LnByb3RvdHlwZSxrPV9bIl9fY29yZS1qc19zaGFyZWRfXyJdLE89KGo9L1teLl0rJC8uZXhlYyhrJiZr''@;'; put 'put ''LmtleXMmJmsua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK2o6IiIsej15LnRvU3RyaW5nLFU9dy5oYXNPd25Qcm9wZXJ0eSxWPXcudG9TdHJpbmcsUj1SZWdFeHAoIl4iK3ouY2FsbChVKS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2Uo''@;'; put 'put ''L2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKSxIPV8uU3ltYm9sLFQ9Xy5VaW50OEFycmF5LEM9dy5wcm9wZXJ0eUlzRW51bWVyYWJsZSxGPWcuc3BsaWNlLHE9KGM9T2JqZWN0LmtleXMsbT1PYmplY3QsZnVuY3Rp''@;'; put 'put ''b24oWil7cmV0dXJuIGMobShaKSl9KSxZPVB0KF8sIkRhdGFWaWV3IiksWD1QdChfLCJNYXAiKSxLPVB0KF8sIlByb21pc2UiKSxydD1QdChfLCJTZXQiKSx0dD1QdChfLCJXZWFrTWFwIiksVz1QdChPYmplY3QsImNyZWF0ZSIpLFE9bHQoWSksRz1sdChYKSxldD1sdChLKSxudD1sdChydCks''@;'; put 'put ''aXQ9bHQodHQpLG90PUg/SC5wcm90b3R5cGU6dm9pZCAwLGh0PW90P290LnZhbHVlT2Y6dm9pZCAwLGZ0PW90P290LnRvU3RyaW5nOnZvaWQgMDtmdW5jdGlvbiBwdChaKXt2YXIgc3Q9LTEsY3Q9Wj9aLmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7KytzdDxjdDspe3ZhciB1dD1aW3N0XTt0''@;'; put 'put ''aGlzLnNldCh1dFswXSx1dFsxXSl9fWZ1bmN0aW9uIFR0KFope3ZhciBzdD0tMSxjdD1aP1oubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK3N0PGN0Oyl7dmFyIHV0PVpbc3RdO3RoaXMuc2V0KHV0WzBdLHV0WzFdKX19ZnVuY3Rpb24geXQoWil7dmFyIHN0PS0xLGN0PVo/Wi5sZW5ndGg6''@;'; put 'put ''MDtmb3IodGhpcy5jbGVhcigpOysrc3Q8Y3Q7KXt2YXIgdXQ9WltzdF07dGhpcy5zZXQodXRbMF0sdXRbMV0pfX1mdW5jdGlvbiB3dChaKXt2YXIgc3Q9LTEsY3Q9Wj9aLmxlbmd0aDowO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyB5dDsrK3N0PGN0Oyl0aGlzLmFkZChaW3N0XSl9ZnVuY3Rpb24g''@;'; put 'put ''cXQoWil7dGhpcy5fX2RhdGFfXz1uZXcgVHQoWil9ZnVuY3Rpb24gX3QoWixzdCl7Zm9yKHZhciBjdD1aLmxlbmd0aDtjdC0tOylpZih0ZShaW2N0XVswXSxzdCkpcmV0dXJuIGN0O3JldHVybi0xfWZ1bmN0aW9uIEF0KFosc3QsY3QsdXQpe3JldHVybiBWdChaLGZ1bmN0aW9uKGJ0LEN0LE10''@;'; put 'put ''KXtzdCh1dCxidCxjdChidCksTXQpfSksdXR9cHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1XP1cobnVsbCk6e319LHB0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oWil7cmV0dXJuIHRoaXMuaGFzKFopJiZkZWxldGUgdGhpcy5fX2RhdGFfX1taXX0scHQu''@;'; put 'put ''cHJvdG90eXBlLmdldD1mdW5jdGlvbihaKXt2YXIgc3Q9dGhpcy5fX2RhdGFfXztpZihXKXt2YXIgY3Q9c3RbWl07cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09Y3Q/dm9pZCAwOmN0fXJldHVybiBVLmNhbGwoc3QsWik/c3RbWl06dm9pZCAwfSxwdC5wcm90b3R5cGUuaGFz''@;'; put 'put ''PWZ1bmN0aW9uKFope3ZhciBzdD10aGlzLl9fZGF0YV9fO3JldHVybiBXP3ZvaWQgMCE9PXN0W1pdOlUuY2FsbChzdCxaKX0scHQucHJvdG90eXBlLnNldD1mdW5jdGlvbihaLHN0KXtyZXR1cm4gdGhpcy5fX2RhdGFfX1taXT1XJiZ2b2lkIDA9PT1zdD8iX19sb2Rhc2hfaGFzaF91bmRlZmlu''@;'; put 'put ''ZWRfXyI6c3QsdGhpc30sVHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXX0sVHQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihaKXt2YXIgc3Q9dGhpcy5fX2RhdGFfXyxjdD1fdChzdCxaKTtyZXR1cm4hKGN0PDB8fChjdD09c3QubGVuZ3RoLTE/c3QucG9w''@;'; put 'put ''KCk6Ri5jYWxsKHN0LGN0LDEpLDApKX0sVHQucHJvdG90eXBlLmdldD1mdW5jdGlvbihaKXt2YXIgc3Q9dGhpcy5fX2RhdGFfXyxjdD1fdChzdCxaKTtyZXR1cm4gY3Q8MD92b2lkIDA6c3RbY3RdWzFdfSxUdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKFope3JldHVybiBfdCh0aGlzLl9fZGF0''@;'; put 'put ''YV9fLFopPi0xfSxUdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKFosc3Qpe3ZhciBjdD10aGlzLl9fZGF0YV9fLHV0PV90KGN0LFopO3JldHVybiB1dDwwP2N0LnB1c2goW1osc3RdKTpjdFt1dF1bMV09c3QsdGhpc30seXQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFf''@;'; put 'put ''Xz17aGFzaDpuZXcgcHQsbWFwOm5ldyhYfHxUdCksc3RyaW5nOm5ldyBwdH19LHl0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oWil7cmV0dXJuIEJ0KHRoaXMsWikuZGVsZXRlKFopfSx5dC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKFope3JldHVybiBCdCh0aGlzLFopLmdldChaKX0seXQu''@;'; put 'put ''cHJvdG90eXBlLmhhcz1mdW5jdGlvbihaKXtyZXR1cm4gQnQodGhpcyxaKS5oYXMoWil9LHl0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oWixzdCl7cmV0dXJuIEJ0KHRoaXMsWikuc2V0KFosc3QpLHRoaXN9LHd0LnByb3RvdHlwZS5hZGQ9d3QucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oWil7''@;'; put 'put ''cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KFosIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iKSx0aGlzfSx3dC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKFope3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhaKX0scXQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1u''@;'; put 'put ''ZXcgVHR9LHF0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oWil7cmV0dXJuIHRoaXMuX19kYXRhX18uZGVsZXRlKFopfSxxdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKFope3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChaKX0scXQucHJvdG90eXBlLmhhcz1mdW5jdGlvbihaKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fX2RhdGFfXy5oYXMoWil9LHF0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oWixzdCl7dmFyIGN0PXRoaXMuX19kYXRhX187aWYoY3QgaW5zdGFuY2VvZiBUdCl7dmFyIHV0PWN0Ll9fZGF0YV9fO2lmKCFYfHx1dC5sZW5ndGg8MTk5KXJldHVybiB1dC5wdXNoKFtaLHN0XSksdGhpcztj''@;'; put 'put ''dD10aGlzLl9fZGF0YV9fPW5ldyB5dCh1dCl9cmV0dXJuIGN0LnNldChaLHN0KSx0aGlzfTt2YXIgZ3QsVnQ9KGd0PWZ1bmN0aW9uKFosc3Qpe3JldHVybiBaJiZTdChaLHN0LGxlKX0sZnVuY3Rpb24oWixzdCl7aWYobnVsbD09WilyZXR1cm4gWjtpZighUXQoWikpcmV0dXJuIGd0KFosc3Qp''@;'; put 'put ''O2Zvcih2YXIgY3Q9Wi5sZW5ndGgsdXQ9LTEsYnQ9T2JqZWN0KFopOysrdXQ8Y3QmJiExIT09c3QoYnRbdXRdLHV0LGJ0KTspO3JldHVybiBafSksU3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oc3QsY3QsdXQpe2Zvcih2YXIgYnQ9LTEsQ3Q9T2JqZWN0KHN0KSxNdD11dChzdCksS3Q9''@;'; put 'put ''TXQubGVuZ3RoO0t0LS07KXt2YXIgJHQ9TXRbKytidF07aWYoITE9PT1jdChDdFskdF0sJHQsQ3QpKWJyZWFrfXJldHVybiBzdH19KCk7ZnVuY3Rpb24gT3QoWixzdCl7Zm9yKHZhciBjdD0wLHV0PShzdD1JdChzdCxaKT9bc3RdOnp0KHN0KSkubGVuZ3RoO251bGwhPVomJmN0PHV0OylaPVpb''@;'; put 'put ''YXQoc3RbY3QrK10pXTtyZXR1cm4gY3QmJmN0PT11dD9aOnZvaWQgMH1mdW5jdGlvbiB5ZShaLHN0KXtyZXR1cm4gbnVsbCE9WiYmc3QgaW4gT2JqZWN0KFopfWZ1bmN0aW9uIFJ0KFosc3QsY3QsdXQsYnQpe3JldHVybiBaPT09c3R8fChudWxsPT1afHxudWxsPT1zdHx8IXJlKFopJiYhaWUo''@;'; put 'put ''c3QpP1ohPVomJnN0IT1zdDpmdW5jdGlvbihDdCxNdCxLdCwkdCxEdCxIdCl7dmFyIHNlPXh0KEN0KSxvZT14dChNdCksSnQ9IltvYmplY3QgQXJyYXldIixuZT0iW29iamVjdCBBcnJheV0iO3NlfHwoSnQ9KEp0PWNlKEN0KSk9PWE/cjpKdCksb2V8fChuZT0obmU9Y2UoTXQpKT09YT9yOm5l''@;'; put 'put ''KTt2YXIgaGU9SnQ9PXImJiFEKEN0KSxiZT1uZT09ciYmIUQoTXQpLGdlPUp0PT1uZTtpZihnZSYmIWhlKXJldHVybiBIdHx8KEh0PW5ldyBxdCksc2V8fGRlKEN0KT9wZShDdCxNdCxLdCwkdCxEdCxIdCk6ZnVuY3Rpb24oR3QsZWUsTGUsQ2UsT2UsbWUsX2Upe3N3aXRjaChMZSl7Y2FzZSJb''@;'; put 'put ''b2JqZWN0IERhdGFWaWV3XSI6aWYoR3QuYnl0ZUxlbmd0aCE9ZWUuYnl0ZUxlbmd0aHx8R3QuYnl0ZU9mZnNldCE9ZWUuYnl0ZU9mZnNldClyZXR1cm4hMTtHdD1HdC5idWZmZXIsZWU9ZWUuYnVmZmVyO2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOnJldHVybiEoR3QuYnl0ZUxlbmd0aCE9''@;'; put 'put ''ZWUuYnl0ZUxlbmd0aHx8IUNlKG5ldyBUKEd0KSxuZXcgVChlZSkpKTtjYXNlIltvYmplY3QgQm9vbGVhbl0iOmNhc2UiW29iamVjdCBEYXRlXSI6Y2FzZSJbb2JqZWN0IE51bWJlcl0iOnJldHVybiB0ZSgrR3QsK2VlKTtjYXNlIltvYmplY3QgRXJyb3JdIjpyZXR1cm4gR3QubmFtZT09ZWUu''@;'; put 'put ''bmFtZSYmR3QubWVzc2FnZT09ZWUubWVzc2FnZTtjYXNlIltvYmplY3QgUmVnRXhwXSI6Y2FzZSJbb2JqZWN0IFN0cmluZ10iOnJldHVybiBHdD09ZWUrIiI7Y2FzZSBvOnZhciB4ZT14O2Nhc2UgdDppZih4ZXx8KHhlPU0pLEd0LnNpemUhPWVlLnNpemUmJiEoMiZtZSkpcmV0dXJuITE7dmFy''@;'; put 'put ''IGplPV9lLmdldChHdCk7aWYoamUpcmV0dXJuIGplPT1lZTttZXw9MSxfZS5zZXQoR3QsZWUpO3ZhciBUZT1wZSh4ZShHdCkseGUoZWUpLENlLE9lLG1lLF9lKTtyZXR1cm4gX2UuZGVsZXRlKEd0KSxUZTtjYXNlIltvYmplY3QgU3ltYm9sXSI6aWYoaHQpcmV0dXJuIGh0LmNhbGwoR3QpPT1o''@;'; put 'put ''dC5jYWxsKGVlKX1yZXR1cm4hMX0oQ3QsTXQsSnQsS3QsJHQsRHQsSHQpO2lmKCEoMiZEdCkpe3ZhciB3ZT1oZSYmVS5jYWxsKEN0LCJfX3dyYXBwZWRfXyIpLFNlPWJlJiZVLmNhbGwoTXQsIl9fd3JhcHBlZF9fIik7aWYod2V8fFNlKXt2YXIgUmU9d2U/Q3QudmFsdWUoKTpDdCxNZT1TZT9N''@;'; put 'put ''dC52YWx1ZSgpOk10O3JldHVybiBIdHx8KEh0PW5ldyBxdCksS3QoUmUsTWUsJHQsRHQsSHQpfX1yZXR1cm4hIWdlJiYoSHR8fChIdD1uZXcgcXQpLGZ1bmN0aW9uKEd0LGVlLExlLENlLE9lLG1lKXt2YXIgX2U9MiZPZSx4ZT1sZShHdCksRWU9eGUubGVuZ3RoO2lmKEVlIT1sZShlZSkubGVu''@;'; put 'put ''Z3RoJiYhX2UpcmV0dXJuITE7Zm9yKHZhciBUZT1FZTtUZS0tOyl7dmFyIGtlPXhlW1RlXTtpZighKF9lP2tlIGluIGVlOlUuY2FsbChlZSxrZSkpKXJldHVybiExfXZhciAkZT1tZS5nZXQoR3QpO2lmKCRlJiZtZS5nZXQoZWUpKXJldHVybiAkZT09ZWU7dmFyIEllPSEwO21lLnNldChHdCxl''@;'; put 'put ''ZSksbWUuc2V0KGVlLEd0KTtmb3IodmFyIHplPV9lOysrVGU8RWU7KXt2YXIgTmU9R3Rba2U9eGVbVGVdXSxQZT1lZVtrZV07aWYoQ2UpdmFyIEhlPV9lP0NlKFBlLE5lLGtlLGVlLEd0LG1lKTpDZShOZSxQZSxrZSxHdCxlZSxtZSk7aWYoISh2b2lkIDA9PT1IZT9OZT09PVBlfHxMZShOZSxQ''@;'; put 'put ''ZSxDZSxPZSxtZSk6SGUpKXtJZT0hMTticmVha316ZXx8KHplPSJjb25zdHJ1Y3RvciI9PWtlKX1pZihJZSYmIXplKXt2YXIgQmU9R3QuY29uc3RydWN0b3IsRGU9ZWUuY29uc3RydWN0b3I7QmU9PURlfHwhKCJjb25zdHJ1Y3RvciJpbiBHdCl8fCEoImNvbnN0cnVjdG9yImluIGVlKXx8ImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIEJlJiZCZSBpbnN0YW5jZW9mIEJlJiYiZnVuY3Rpb24iPT10eXBlb2YgRGUmJkRlIGluc3RhbmNlb2YgRGV8fChJZT0hMSl9cmV0dXJuIG1lLmRlbGV0ZShHdCksbWUuZGVsZXRlKGVlKSxJZX0oQ3QsTXQsS3QsJHQsRHQsSHQpKX0oWixzdCxSdCxjdCx1dCxidCkp''@;'; put 'put ''fWZ1bmN0aW9uIHp0KFope3JldHVybiB4dChaKT9aOkooWil9ZnVuY3Rpb24gcGUoWixzdCxjdCx1dCxidCxDdCl7dmFyIE10PTImYnQsS3Q9Wi5sZW5ndGgsJHQ9c3QubGVuZ3RoO2lmKEt0IT0kdCYmIShNdCYmJHQ+S3QpKXJldHVybiExO3ZhciBEdD1DdC5nZXQoWik7aWYoRHQmJkN0Lmdl''@;'; put 'put ''dChzdCkpcmV0dXJuIER0PT1zdDt2YXIgSHQ9LTEsc2U9ITAsb2U9MSZidD9uZXcgd3Q6dm9pZCAwO2ZvcihDdC5zZXQoWixzdCksQ3Quc2V0KHN0LFopOysrSHQ8S3Q7KXt2YXIgSnQ9WltIdF0sbmU9c3RbSHRdO2lmKHV0KXZhciBoZT1NdD91dChuZSxKdCxIdCxzdCxaLEN0KTp1dChKdCxu''@;'; put 'put ''ZSxIdCxaLHN0LEN0KTtpZih2b2lkIDAhPT1oZSl7aWYoaGUpY29udGludWU7c2U9ITE7YnJlYWt9aWYob2Upe2lmKCEkKHN0LGZ1bmN0aW9uKGJlLGdlKXtpZighb2UuaGFzKGdlKSYmKEp0PT09YmV8fGN0KEp0LGJlLHV0LGJ0LEN0KSkpcmV0dXJuIG9lLmFkZChnZSl9KSl7c2U9ITE7YnJl''@;'; put 'put ''YWt9fWVsc2UgaWYoSnQhPT1uZSYmIWN0KEp0LG5lLHV0LGJ0LEN0KSl7c2U9ITE7YnJlYWt9fXJldHVybiBDdC5kZWxldGUoWiksQ3QuZGVsZXRlKHN0KSxzZX1mdW5jdGlvbiBCdChaLHN0KXt2YXIgY3QsdXQsYnQ9Wi5fX2RhdGFfXztyZXR1cm4oInN0cmluZyI9PSh1dD10eXBlb2YoY3Q9''@;'; put 'put ''c3QpKXx8Im51bWJlciI9PXV0fHwic3ltYm9sIj09dXR8fCJib29sZWFuIj09dXQ/Il9fcHJvdG9fXyIhPT1jdDpudWxsPT09Y3QpP2J0WyJzdHJpbmciPT10eXBlb2Ygc3Q/InN0cmluZyI6Imhhc2giXTpidC5tYXB9ZnVuY3Rpb24gUHQoWixzdCl7dmFyIHV0LGJ0LGN0PSh1dD1aLGJ0PXN0''@;'; put 'put ''LHV0Py5bYnRdKTtyZXR1cm4gZnVuY3Rpb24gTnQoWil7cmV0dXJuISghcmUoWil8fChzdD1aLE8mJk8gaW4gc3QpKSYmKFd0KFopfHxEKFopP1I6ZikudGVzdChsdChaKSk7dmFyIHN0fShjdCk/Y3Q6dm9pZCAwfXZhciBjZT1mdW5jdGlvbihaKXtyZXR1cm4gVi5jYWxsKFopfTtmdW5jdGlv''@;'; put 'put ''biBGdChaLHN0KXtyZXR1cm4hIShzdD1zdD8/OTAwNzE5OTI1NDc0MDk5MSkmJigibnVtYmVyIj09dHlwZW9mIFp8fHUudGVzdChaKSkmJlo+LTEmJlolMT09MCYmWjxzdH1mdW5jdGlvbiBJdChaLHN0KXtpZih4dChaKSlyZXR1cm4hMTt2YXIgY3Q9dHlwZW9mIFo7cmV0dXJuISgibnVtYmVy''@;'; put 'put ''IiE9Y3QmJiJzeW1ib2wiIT1jdCYmImJvb2xlYW4iIT1jdCYmbnVsbCE9WiYmIXVlKFopKXx8bC50ZXN0KFopfHwhZS50ZXN0KFopfHxudWxsIT1zdCYmWiBpbiBPYmplY3Qoc3QpfWZ1bmN0aW9uIHZlKFope3JldHVybiBaPT1aJiYhcmUoWil9ZnVuY3Rpb24gVXQoWixzdCl7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKGN0KXtyZXR1cm4gbnVsbCE9Y3QmJmN0W1pdPT09c3QmJih2b2lkIDAhPT1zdHx8WiBpbiBPYmplY3QoY3QpKX19KFkmJiJbb2JqZWN0IERhdGFWaWV3XSIhPWNlKG5ldyBZKG5ldyBBcnJheUJ1ZmZlcigxKSkpfHxYJiZjZShuZXcgWCkhPW98fEsmJiJbb2JqZWN0IFByb21pc2Vd''@;'; put 'put ''IiE9Y2UoSy5yZXNvbHZlKCkpfHxydCYmY2UobmV3IHJ0KSE9dHx8dHQmJiJbb2JqZWN0IFdlYWtNYXBdIiE9Y2UobmV3IHR0KSkmJihjZT1mdW5jdGlvbihaKXt2YXIgc3Q9Vi5jYWxsKFopLGN0PXN0PT1yP1ouY29uc3RydWN0b3I6dm9pZCAwLHV0PWN0P2x0KGN0KTp2b2lkIDA7aWYodXQp''@;'; put 'put ''c3dpdGNoKHV0KXtjYXNlIFE6cmV0dXJuIltvYmplY3QgRGF0YVZpZXddIjtjYXNlIEc6cmV0dXJuIG87Y2FzZSBldDpyZXR1cm4iW29iamVjdCBQcm9taXNlXSI7Y2FzZSBudDpyZXR1cm4gdDtjYXNlIGl0OnJldHVybiJbb2JqZWN0IFdlYWtNYXBdIn1yZXR1cm4gc3R9KTt2YXIgSj1rdChm''@;'; put 'put ''dW5jdGlvbihaKXt2YXIgc3Q7Wj1udWxsPT0oc3Q9Wik/IiI6ZnVuY3Rpb24odXQpe2lmKCJzdHJpbmciPT10eXBlb2YgdXQpcmV0dXJuIHV0O2lmKHVlKHV0KSlyZXR1cm4gZnQ/ZnQuY2FsbCh1dCk6IiI7dmFyIGJ0PXV0KyIiO3JldHVybiIwIj09YnQmJjEvdXQ9PS0xLzA/Ii0wIjpidH0o''@;'; put 'put ''c3QpO3ZhciBjdD1bXTtyZXR1cm4gbi50ZXN0KFopJiZjdC5wdXNoKCIiKSxaLnJlcGxhY2UoaSxmdW5jdGlvbih1dCxidCxDdCxNdCl7Y3QucHVzaChDdD9NdC5yZXBsYWNlKGgsIiQxIik6YnR8fHV0KX0pLGN0fSk7ZnVuY3Rpb24gYXQoWil7aWYoInN0cmluZyI9PXR5cGVvZiBafHx1ZSha''@;'; put 'put ''KSlyZXR1cm4gWjt2YXIgc3Q9WisiIjtyZXR1cm4iMCI9PXN0JiYxL1o9PS0xLzA/Ii0wIjpzdH1mdW5jdGlvbiBsdChaKXtpZihudWxsIT1aKXt0cnl7cmV0dXJuIHouY2FsbChaKX1jYXRjaHt9dHJ5e3JldHVybiBaKyIifWNhdGNoe319cmV0dXJuIiJ9dmFyIGR0LHZ0PShkdD1mdW5jdGlv''@;'; put 'put ''bihaLHN0LGN0KXtVLmNhbGwoWixjdCk/WltjdF0ucHVzaChzdCk6WltjdF09W3N0XX0sZnVuY3Rpb24oWixzdCl7dmFyIHV0PXt9O3JldHVybih4dChaKT9COkF0KShaLGR0LGZ1bmN0aW9uIGFlKFope3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBaP1o6bnVsbD09Wj9mZToib2JqZWN0Ij09''@;'; put 'put ''dHlwZW9mIFo/eHQoWik/KGJ0PVpbMV0sSXQodXQ9WlswXSkmJnZlKGJ0KT9VdChhdCh1dCksYnQpOmZ1bmN0aW9uKEN0KXt2YXIgS3QsSHQsTXQ9dm9pZCAwPT09KEh0PW51bGw9PShLdD1DdCk/dm9pZCAwOk90KEt0LHV0KSk/dm9pZCAwOkh0O3JldHVybiB2b2lkIDA9PT1NdCYmTXQ9PT1i''@;'; put 'put ''dD9mdW5jdGlvbihLdCwkdCl7cmV0dXJuIG51bGwhPUt0JiZmdW5jdGlvbihEdCxIdCxzZSl7Zm9yKHZhciBvZSxKdD0tMSxuZT0oSHQ9SXQoSHQsRHQpP1tIdF06enQoSHQpKS5sZW5ndGg7KytKdDxuZTspe3ZhciBoZT1hdChIdFtKdF0pO2lmKCEob2U9bnVsbCE9RHQmJnNlKER0LGhlKSkp''@;'; put 'put ''YnJlYWs7RHQ9RHRbaGVdfXJldHVybiBvZXx8ISEobmU9RHQ/RHQubGVuZ3RoOjApJiZYdChuZSkmJkZ0KGhlLG5lKSYmKHh0KER0KXx8anQoRHQpKX0oS3QsJHQseWUpfShDdCx1dCk6UnQoYnQsTXQsdm9pZCAwLDMpfSk6ZnVuY3Rpb24odXQpe3ZhciBidD1mdW5jdGlvbihDdCl7Zm9yKHZh''@;'; put 'put ''ciBNdD1sZShDdCksS3Q9TXQubGVuZ3RoO0t0LS07KXt2YXIgJHQ9TXRbS3RdLER0PUN0WyR0XTtNdFtLdF09WyR0LER0LHZlKER0KV19cmV0dXJuIE10fSh1dCk7cmV0dXJuIDE9PWJ0Lmxlbmd0aCYmYnRbMF1bMl0/VXQoYnRbMF1bMF0sYnRbMF1bMV0pOmZ1bmN0aW9uKEN0KXtyZXR1cm4g''@;'; put 'put ''Q3Q9PT11dHx8ZnVuY3Rpb24oTXQsS3QsJHQsRHQpe3ZhciBIdD0kdC5sZW5ndGgsc2U9SHQ7aWYobnVsbD09TXQpcmV0dXJuIXNlO2ZvcihNdD1PYmplY3QoTXQpO0h0LS07KXt2YXIgSnQ9JHRbSHRdO2lmKEp0WzJdP0p0WzFdIT09TXRbSnRbMF1dOiEoSnRbMF1pbiBNdCkpcmV0dXJuITF9''@;'; put 'put ''Zm9yKDsrK0h0PHNlOyl7dmFyIG5lPShKdD0kdFtIdF0pWzBdLGhlPU10W25lXSxiZT1KdFsxXTtpZihKdFsyXSl7aWYodm9pZCAwPT09aGUmJiEobmUgaW4gTXQpKXJldHVybiExfWVsc2V7dmFyIHdlLGdlPW5ldyBxdDtpZighKHZvaWQgMD09PXdlP1J0KGJlLGhlLER0LDMsZ2UpOndlKSly''@;'; put 'put ''ZXR1cm4hMX19cmV0dXJuITB9KEN0LDAsYnQpfX0oWik6SXQoc3Q9Wik/KGN0PWF0KHN0KSxmdW5jdGlvbih1dCl7cmV0dXJuIHV0Py5bY3RdfSk6ZnVuY3Rpb24odXQpe3JldHVybiBmdW5jdGlvbihidCl7cmV0dXJuIE90KGJ0LHV0KX19KHN0KTt2YXIgdXQsYnQsc3QsY3R9KHN0KSx1dCl9''@;'; put 'put ''KTtmdW5jdGlvbiBrdChaLHN0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgWnx8c3QmJiJmdW5jdGlvbiIhPXR5cGVvZiBzdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIGZ1bmN0aW9uIik7dmFyIGN0PWZ1bmN0aW9uKCl7dmFyIHV0PWFyZ3VtZW50cyxidD1zdD9zdC5hcHBseSh0''@;'; put 'put ''aGlzLHV0KTp1dFswXSxDdD1jdC5jYWNoZTtpZihDdC5oYXMoYnQpKXJldHVybiBDdC5nZXQoYnQpO3ZhciBNdD1aLmFwcGx5KHRoaXMsdXQpO3JldHVybiBjdC5jYWNoZT1DdC5zZXQoYnQsTXQpLE10fTtyZXR1cm4gY3QuY2FjaGU9bmV3KGt0LkNhY2hlfHx5dCksY3R9ZnVuY3Rpb24gdGUo''@;'; put 'put ''WixzdCl7cmV0dXJuIFo9PT1zdHx8WiE9WiYmc3QhPXN0fWZ1bmN0aW9uIGp0KFope3JldHVybiBpZShzdD1aKSYmUXQoc3QpJiZVLmNhbGwoWiwiY2FsbGVlIikmJighQy5jYWxsKFosImNhbGxlZSIpfHxWLmNhbGwoWik9PWEpO3ZhciBzdH1rdC5DYWNoZT15dDt2YXIgeHQ9QXJyYXkuaXNB''@;'; put 'put ''cnJheTtmdW5jdGlvbiBRdChaKXtyZXR1cm4gbnVsbCE9WiYmWHQoWi5sZW5ndGgpJiYhV3QoWil9ZnVuY3Rpb24gV3QoWil7dmFyIHN0PXJlKFopP1YuY2FsbChaKToiIjtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT1zdHx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09c3R9ZnVu''@;'; put 'put ''Y3Rpb24gWHQoWil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBaJiZaPi0xJiZaJTE9PTAmJlo8PTkwMDcxOTkyNTQ3NDA5OTF9ZnVuY3Rpb24gcmUoWil7dmFyIHN0PXR5cGVvZiBaO3JldHVybiEhWiYmKCJvYmplY3QiPT1zdHx8ImZ1bmN0aW9uIj09c3QpfWZ1bmN0aW9uIGllKFope3JldHVy''@;'; put 'put ''biEhWiYmIm9iamVjdCI9PXR5cGVvZiBafWZ1bmN0aW9uIHVlKFope3JldHVybiJzeW1ib2wiPT10eXBlb2YgWnx8aWUoWikmJiJbb2JqZWN0IFN5bWJvbF0iPT1WLmNhbGwoWil9dmFyIGRlPVA/ZnVuY3Rpb24oWil7cmV0dXJuIGZ1bmN0aW9uKHN0KXtyZXR1cm4gWihzdCl9fShQKTpmdW5j''@;'; put 'put ''dGlvbihaKXtyZXR1cm4gaWUoWikmJlh0KFoubGVuZ3RoKSYmISFwW1YuY2FsbChaKV19O2Z1bmN0aW9uIGxlKFope3JldHVybiBRdChaKT9mdW5jdGlvbiBFdChaLHN0KXt2YXIgY3Q9eHQoWil8fGp0KFopP2Z1bmN0aW9uKE10LEt0KXtmb3IodmFyICR0PS0xLER0PUFycmF5KE10KTsrKyR0''@;'; put 'put ''PE10OylEdFskdF09S3QoJHQpO3JldHVybiBEdH0oWi5sZW5ndGgsU3RyaW5nKTpbXSx1dD1jdC5sZW5ndGgsYnQ9ISF1dDtmb3IodmFyIEN0IGluIFopIXN0JiYhVS5jYWxsKFosQ3QpfHxidCYmKCJsZW5ndGgiPT1DdHx8RnQoQ3QsdXQpKXx8Y3QucHVzaChDdCk7cmV0dXJuIGN0fShaKTpm''@;'; put 'put ''dW5jdGlvbiBMdChaKXtpZihjdD0oc3Q9WikmJnN0LmNvbnN0cnVjdG9yLHN0IT09KCJmdW5jdGlvbiI9PXR5cGVvZiBjdCYmY3QucHJvdG90eXBlfHx3KSlyZXR1cm4gcShaKTt2YXIgc3QsY3QsYnQ9W107Zm9yKHZhciBDdCBpbiBPYmplY3QoWikpVS5jYWxsKFosQ3QpJiYiY29uc3RydWN0''@;'; put 'put ''b3IiIT1DdCYmYnQucHVzaChDdCk7cmV0dXJuIGJ0fShaKX1mdW5jdGlvbiBmZShaKXtyZXR1cm4gWn1FLmV4cG9ydHM9dnR9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5k''@;'; put 'put ''b3c6e30pfSx7fV0sNDQ0OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7RS5leHBvcnRzPWZ1bmN0aW9uKGEpe3JldHVybiEwPT09YXx8ITE9PT1hfHxmdW5jdGlvbihvKXtyZXR1cm4hIW8mJiJvYmplY3QiPT10eXBlb2Ygb30o''@;'; put 'put ''YSkmJiJbb2JqZWN0IEJvb2xlYW5dIj09Yi5jYWxsKGEpfX0se31dLDQ0NTpbZnVuY3Rpb24ocyxFLFMpeyhmdW5jdGlvbihiKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGE9IltvYmplY3QgQXJndW1lbnRzXSIsbz0iW29iamVjdCBNYXBdIixyPSJbb2JqZWN0IE9iamVjdF0iLHQ9''@;'; put 'put ''IltvYmplY3QgU2V0XSIsZT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxsPS9eKD86MHxbMS05XVxkKikkLyxuPXt9O25bIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPW5bIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPW5bIltvYmplY3QgSW50OEFycmF5XSJdPW5bIltvYmplY3QgSW50''@;'; put 'put ''MTZBcnJheV0iXT1uWyJbb2JqZWN0IEludDMyQXJyYXldIl09blsiW29iamVjdCBVaW50OEFycmF5XSJdPW5bIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09blsiW29iamVjdCBVaW50MTZBcnJheV0iXT1uWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLG5bYV09blsiW29iamVjdCBB''@;'; put 'put ''cnJheV0iXT1uWyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPW5bIltvYmplY3QgQm9vbGVhbl0iXT1uWyJbb2JqZWN0IERhdGFWaWV3XSJdPW5bIltvYmplY3QgRGF0ZV0iXT1uWyJbb2JqZWN0IEVycm9yXSJdPW5bIltvYmplY3QgRnVuY3Rpb25dIl09bltvXT1uWyJbb2JqZWN0IE51bWJlcl0i''@;'; put 'put ''XT1uW3JdPW5bIltvYmplY3QgUmVnRXhwXSJdPW5bdF09blsiW29iamVjdCBTdHJpbmddIl09blsiW29iamVjdCBXZWFrTWFwXSJdPSExO3ZhciBpPSJvYmplY3QiPT10eXBlb2YgYiYmYiYmYi5PYmplY3Q9PT1PYmplY3QmJmIsaD0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYu''@;'; put 'put ''T2JqZWN0PT09T2JqZWN0JiZzZWxmLGY9aXx8aHx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSx1PSJvYmplY3QiPT10eXBlb2YgUyYmUyYmIVMubm9kZVR5cGUmJlMscD11JiYib2JqZWN0Ij09dHlwZW9mIEUmJkUmJiFFLm5vZGVUeXBlJiZFLGQ9cCYmcC5leHBvcnRzPT09dSx2PWQmJmku''@;'; put 'put ''cHJvY2VzcyxfPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiB2JiZ2LmJpbmRpbmcmJnYuYmluZGluZygidXRpbCIpfWNhdGNoe319KCksQT1fJiZfLmlzVHlwZWRBcnJheTtmdW5jdGlvbiBJKEosYXQpe2Zvcih2YXIgbHQ9LTEsZHQ9bnVsbD09Sj8wOkoubGVuZ3RoOysrbHQ8ZHQ7KWlmKGF0KEpb''@;'; put 'put ''bHRdLGx0LEopKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEwoSil7dmFyIGF0PS0xLGx0PUFycmF5KEouc2l6ZSk7cmV0dXJuIEouZm9yRWFjaChmdW5jdGlvbihkdCxZdCl7bHRbKythdF09W1l0LGR0XX0pLGx0fWZ1bmN0aW9uIE4oSil7dmFyIGF0PS0xLGx0PUFycmF5KEouc2l6ZSk7''@;'; put 'put ''cmV0dXJuIEouZm9yRWFjaChmdW5jdGlvbihkdCl7bHRbKythdF09ZHR9KSxsdH12YXIgUCxCLCQsRD1BcnJheS5wcm90b3R5cGUsTT1PYmplY3QucHJvdG90eXBlLGo9ZlsiX19jb3JlLWpzX3NoYXJlZF9fIl0sYz1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsbT1NLmhhc093blByb3Bl''@;'; put 'put ''cnR5LGc9KFA9L1teLl0rJC8uZXhlYyhqJiZqLmtleXMmJmoua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK1A6IiIseT1NLnRvU3RyaW5nLHc9UmVnRXhwKCJeIitjLmNhbGwobSkucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNP''@;'; put 'put ''d25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIiksaz1kP2YuQnVmZmVyOnZvaWQgMCxPPWYuU3ltYm9sLHo9Zi5VaW50OEFycmF5LFU9TS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxWPUQuc3BsaWNlLFI9Tz9PLnRvU3RyaW5nVGFn''@;'; put 'put ''OnZvaWQgMCxIPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsVD1rP2suaXNCdWZmZXI6dm9pZCAwLEM9KEI9T2JqZWN0LmtleXMsJD1PYmplY3QsZnVuY3Rpb24oSil7cmV0dXJuIEIoJChKKSl9KSxGPU90KGYsIkRhdGFWaWV3IikscT1PdChmLCJNYXAiKSxZPU90KGYsIlByb21pc2Ui''@;'; put 'put ''KSxYPU90KGYsIlNldCIpLEs9T3QoZiwiV2Vha01hcCIpLHJ0PU90KE9iamVjdCwiY3JlYXRlIiksdHQ9YWUoRiksVz1hZShxKSxRPWFlKFkpLEc9YWUoWCksZXQ9YWUoSyksbnQ9Tz9PLnByb3RvdHlwZTp2b2lkIDAsaXQ9bnQ/bnQudmFsdWVPZjp2b2lkIDA7ZnVuY3Rpb24gb3QoSil7dmFy''@;'; put 'put ''IGF0PS0xLGx0PW51bGw9PUo/MDpKLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrYXQ8bHQ7KXt2YXIgZHQ9SlthdF07dGhpcy5zZXQoZHRbMF0sZHRbMV0pfX1mdW5jdGlvbiBodChKKXt2YXIgYXQ9LTEsbHQ9bnVsbD09Sj8wOkoubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KythdDxsdDsp''@;'; put 'put ''e3ZhciBkdD1KW2F0XTt0aGlzLnNldChkdFswXSxkdFsxXSl9fWZ1bmN0aW9uIGZ0KEope3ZhciBhdD0tMSxsdD1udWxsPT1KPzA6Si5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2F0PGx0Oyl7dmFyIGR0PUpbYXRdO3RoaXMuc2V0KGR0WzBdLGR0WzFdKX19ZnVuY3Rpb24gcHQoSil7dmFy''@;'; put 'put ''IGF0PS0xLGx0PW51bGw9PUo/MDpKLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgZnQ7KythdDxsdDspdGhpcy5hZGQoSlthdF0pfWZ1bmN0aW9uIFR0KEope3ZhciBhdD10aGlzLl9fZGF0YV9fPW5ldyBodChKKTt0aGlzLnNpemU9YXQuc2l6ZX1mdW5jdGlvbiB3dChKLGF0KXtmb3Io''@;'; put 'put ''dmFyIGx0PUoubGVuZ3RoO2x0LS07KWlmKEx0KEpbbHRdWzBdLGF0KSlyZXR1cm4gbHQ7cmV0dXJuLTF9ZnVuY3Rpb24gcXQoSil7cmV0dXJuIG51bGw9PUo/dm9pZCAwPT09Sj8iW29iamVjdCBVbmRlZmluZWRdIjoiW29iamVjdCBOdWxsXSI6UiYmUiBpbiBPYmplY3QoSik/ZnVuY3Rpb24o''@;'; put 'put ''YXQpe3ZhciBsdD1tLmNhbGwoYXQsUiksZHQ9YXRbUl07dHJ5e2F0W1JdPXZvaWQgMDt2YXIgWXQ9ITB9Y2F0Y2h7fXZhciB2dD15LmNhbGwoYXQpO3JldHVybiBZdCYmKGx0P2F0W1JdPWR0OmRlbGV0ZSBhdFtSXSksdnR9KEopOnkuY2FsbChKKX1mdW5jdGlvbiBFdChKKXtyZXR1cm4gSXQo''@;'; put 'put ''SikmJnF0KEopPT1hfWZ1bmN0aW9uIF90KEosYXQsbHQsZHQsWXQpe3JldHVybiBKPT09YXR8fChudWxsPT1KfHxudWxsPT1hdHx8IUl0KEopJiYhSXQoYXQpP0ohPUomJmF0IT1hdDpmdW5jdGlvbih2dCxrdCx0ZSxqdCx4dCxRdCl7dmFyIFd0PXBlKHZ0KSxYdD1wZShrdCkscmU9V3Q/Iltv''@;'; put 'put ''YmplY3QgQXJyYXldIjpSdCh2dCksaWU9WHQ/IltvYmplY3QgQXJyYXldIjpSdChrdCksdWU9KHJlPXJlPT1hP3I6cmUpPT1yLGRlPShpZT1pZT09YT9yOmllKT09cixsZT1yZT09aWU7aWYobGUmJkJ0KHZ0KSl7aWYoIUJ0KGt0KSlyZXR1cm4hMTtXdD0hMCx1ZT0hMX1pZihsZSYmIXVlKXJl''@;'; put 'put ''dHVybiBRdHx8KFF0PW5ldyBUdCksV3R8fHZlKHZ0KT9tdCh2dCxrdCx0ZSxqdCx4dCxRdCk6ZnVuY3Rpb24odXQsYnQsQ3QsTXQsS3QsJHQsRHQpe3N3aXRjaChDdCl7Y2FzZSJbb2JqZWN0IERhdGFWaWV3XSI6aWYodXQuYnl0ZUxlbmd0aCE9YnQuYnl0ZUxlbmd0aHx8dXQuYnl0ZU9mZnNl''@;'; put 'put ''dCE9YnQuYnl0ZU9mZnNldClyZXR1cm4hMTt1dD11dC5idWZmZXIsYnQ9YnQuYnVmZmVyO2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOnJldHVybiEodXQuYnl0ZUxlbmd0aCE9YnQuYnl0ZUxlbmd0aHx8ISR0KG5ldyB6KHV0KSxuZXcgeihidCkpKTtjYXNlIltvYmplY3QgQm9vbGVhbl0i''@;'; put 'put ''OmNhc2UiW29iamVjdCBEYXRlXSI6Y2FzZSJbb2JqZWN0IE51bWJlcl0iOnJldHVybiBMdCgrdXQsK2J0KTtjYXNlIltvYmplY3QgRXJyb3JdIjpyZXR1cm4gdXQubmFtZT09YnQubmFtZSYmdXQubWVzc2FnZT09YnQubWVzc2FnZTtjYXNlIltvYmplY3QgUmVnRXhwXSI6Y2FzZSJbb2JqZWN0''@;'; put 'put ''IFN0cmluZ10iOnJldHVybiB1dD09YnQrIiI7Y2FzZSBvOnZhciBIdD1MO2Nhc2UgdDppZihIdHx8KEh0PU4pLHV0LnNpemUhPWJ0LnNpemUmJiEoMSZNdCkpcmV0dXJuITE7dmFyIG9lPUR0LmdldCh1dCk7aWYob2UpcmV0dXJuIG9lPT1idDtNdHw9MixEdC5zZXQodXQsYnQpO3ZhciBKdD1t''@;'; put 'put ''dChIdCh1dCksSHQoYnQpLE10LEt0LCR0LER0KTtyZXR1cm4gRHQuZGVsZXRlKHV0KSxKdDtjYXNlIltvYmplY3QgU3ltYm9sXSI6aWYoaXQpcmV0dXJuIGl0LmNhbGwodXQpPT1pdC5jYWxsKGJ0KX1yZXR1cm4hMX0odnQsa3QscmUsdGUsanQseHQsUXQpO2lmKCEoMSZ0ZSkpe3ZhciBmZT11''@;'; put 'put ''ZSYmbS5jYWxsKHZ0LCJfX3dyYXBwZWRfXyIpLFo9ZGUmJm0uY2FsbChrdCwiX193cmFwcGVkX18iKTtpZihmZXx8Wil7dmFyIHN0PWZlP3Z0LnZhbHVlKCk6dnQsY3Q9Wj9rdC52YWx1ZSgpOmt0O3JldHVybiBRdHx8KFF0PW5ldyBUdCkseHQoc3QsY3QsdGUsanQsUXQpfX1yZXR1cm4hIWxl''@;'; put 'put ''JiYoUXR8fChRdD1uZXcgVHQpLGZ1bmN0aW9uKHV0LGJ0LEN0LE10LEt0LCR0KXt2YXIgRHQ9MSZDdCxIdD1WdCh1dCksc2U9SHQubGVuZ3RoO2lmKHNlIT1WdChidCkubGVuZ3RoJiYhRHQpcmV0dXJuITE7Zm9yKHZhciBKdD1zZTtKdC0tOyl7dmFyIG5lPUh0W0p0XTtpZighKER0P25lIGlu''@;'; put 'put ''IGJ0Om0uY2FsbChidCxuZSkpKXJldHVybiExfXZhciBoZT0kdC5nZXQodXQpO2lmKGhlJiYkdC5nZXQoYnQpKXJldHVybiBoZT09YnQ7dmFyIGJlPSEwOyR0LnNldCh1dCxidCksJHQuc2V0KGJ0LHV0KTtmb3IodmFyIGdlPUR0OysrSnQ8c2U7KXt2YXIgd2U9dXRbbmU9SHRbSnRdXSxTZT1i''@;'; put 'put ''dFtuZV07aWYoTXQpdmFyIFJlPUR0P010KFNlLHdlLG5lLGJ0LHV0LCR0KTpNdCh3ZSxTZSxuZSx1dCxidCwkdCk7aWYoISh2b2lkIDA9PT1SZT93ZT09PVNlfHxLdCh3ZSxTZSxDdCxNdCwkdCk6UmUpKXtiZT0hMTticmVha31nZXx8KGdlPSJjb25zdHJ1Y3RvciI9PW5lKX1pZihiZSYmIWdl''@;'; put 'put ''KXt2YXIgTWU9dXQuY29uc3RydWN0b3IsR3Q9YnQuY29uc3RydWN0b3I7TWU9PUd0fHwhKCJjb25zdHJ1Y3RvciJpbiB1dCl8fCEoImNvbnN0cnVjdG9yImluIGJ0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIE1lJiZNZSBpbnN0YW5jZW9mIE1lJiYiZnVuY3Rpb24iPT10eXBlb2YgR3QmJkd0IGlu''@;'; put 'put ''c3RhbmNlb2YgR3R8fChiZT0hMSl9cmV0dXJuICR0LmRlbGV0ZSh1dCksJHQuZGVsZXRlKGJ0KSxiZX0odnQsa3QsdGUsanQseHQsUXQpKX0oSixhdCxsdCxkdCxfdCxZdCkpfWZ1bmN0aW9uIG10KEosYXQsbHQsZHQsWXQsdnQpe3ZhciBrdD0xJmx0LHRlPUoubGVuZ3RoLGp0PWF0Lmxlbmd0''@;'; put 'put ''aDtpZih0ZSE9anQmJiEoa3QmJmp0PnRlKSlyZXR1cm4hMTt2YXIgeHQ9dnQuZ2V0KEopO2lmKHh0JiZ2dC5nZXQoYXQpKXJldHVybiB4dD09YXQ7dmFyIFF0PS0xLFd0PSEwLFh0PTImbHQ/bmV3IHB0OnZvaWQgMDtmb3IodnQuc2V0KEosYXQpLHZ0LnNldChhdCxKKTsrK1F0PHRlOyl7dmFy''@;'; put 'put ''IHJlPUpbUXRdLGllPWF0W1F0XTtpZihkdCl2YXIgdWU9a3Q/ZHQoaWUscmUsUXQsYXQsSix2dCk6ZHQocmUsaWUsUXQsSixhdCx2dCk7aWYodm9pZCAwIT09dWUpe2lmKHVlKWNvbnRpbnVlO1d0PSExO2JyZWFrfWlmKFh0KXtpZighSShhdCxmdW5jdGlvbihkZSxsZSl7aWYoIVh0Lmhhcyhs''@;'; put 'put ''ZSkmJihyZT09PWRlfHxZdChyZSxkZSxsdCxkdCx2dCkpKXJldHVybiBYdC5wdXNoKGxlKX0pKXtXdD0hMTticmVha319ZWxzZSBpZihyZSE9PWllJiYhWXQocmUsaWUsbHQsZHQsdnQpKXtXdD0hMTticmVha319cmV0dXJuIHZ0LmRlbGV0ZShKKSx2dC5kZWxldGUoYXQpLFd0fWZ1bmN0aW9u''@;'; put 'put ''IFZ0KEope3JldHVybiBkdD15ZSxZdD1mdW5jdGlvbiBVdChKKXtyZXR1cm4gbnVsbCE9KGF0PUopJiZjZShhdC5sZW5ndGgpJiYhUHQoYXQpP2Z1bmN0aW9uIHl0KEosYXQpe3ZhciBsdD1wZShKKSxkdD0hbHQmJnp0KEopLFl0PSFsdCYmIWR0JiZCdChKKSx2dD0hbHQmJiFkdCYmIVl0JiZ2''@;'; put 'put ''ZShKKSxrdD1sdHx8ZHR8fFl0fHx2dCx0ZT1rdD9mdW5jdGlvbihRdCxXdCl7Zm9yKHZhciBYdD0tMSxyZT1BcnJheShRdCk7KytYdDxRdDspcmVbWHRdPVd0KFh0KTtyZXR1cm4gcmV9KEoubGVuZ3RoLFN0cmluZyk6W10sanQ9dGUubGVuZ3RoO2Zvcih2YXIgeHQgaW4gSikhYXQmJiFtLmNh''@;'; put 'put ''bGwoSix4dCl8fGt0JiYoImxlbmd0aCI9PXh0fHxZdCYmKCJvZmZzZXQiPT14dHx8InBhcmVudCI9PXh0KXx8dnQmJigiYnVmZmVyIj09eHR8fCJieXRlTGVuZ3RoIj09eHR8fCJieXRlT2Zmc2V0Ij09eHQpfHxOdCh4dCxqdCkpfHx0ZS5wdXNoKHh0KTtyZXR1cm4gdGV9KEopOmZ1bmN0aW9u''@;'; put 'put ''IGd0KEope2lmKGx0PShhdD1KKSYmYXQuY29uc3RydWN0b3IsYXQhPT0oImZ1bmN0aW9uIj09dHlwZW9mIGx0JiZsdC5wcm90b3R5cGV8fE0pKXJldHVybiBDKEopO3ZhciBhdCxsdCxZdD1bXTtmb3IodmFyIHZ0IGluIE9iamVjdChKKSltLmNhbGwoSix2dCkmJiJjb25zdHJ1Y3RvciIhPXZ0''@;'; put 'put ''JiZZdC5wdXNoKHZ0KTtyZXR1cm4gWXR9KEopO3ZhciBhdH0oYXQ9SikscGUoYXQpP1l0OmZ1bmN0aW9uKHZ0LGt0KXtmb3IodmFyIHRlPS0xLGp0PWt0Lmxlbmd0aCx4dD12dC5sZW5ndGg7Kyt0ZTxqdDspdnRbeHQrdGVdPWt0W3RlXTtyZXR1cm4gdnR9KFl0LGR0KGF0KSk7dmFyIGF0LGR0''@;'; put 'put ''LFl0fWZ1bmN0aW9uIFN0KEosYXQpe3ZhciBsdCxkdCxZdD1KLl9fZGF0YV9fO3JldHVybigic3RyaW5nIj09KGR0PXR5cGVvZihsdD1hdCkpfHwibnVtYmVyIj09ZHR8fCJzeW1ib2wiPT1kdHx8ImJvb2xlYW4iPT1kdD8iX19wcm90b19fIiE9PWx0Om51bGw9PT1sdCk/WXRbInN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBhdD8ic3RyaW5nIjoiaGFzaCJdOll0Lm1hcH1mdW5jdGlvbiBPdChKLGF0KXt2YXIgZHQsWXQsbHQ9KGR0PUosWXQ9YXQsZHQ/LltZdF0pO3JldHVybiBmdW5jdGlvbiBBdChKKXtyZXR1cm4hKCFGdChKKXx8KGF0PUosZyYmZyBpbiBhdCkpJiYoUHQoSik/dzplKS50ZXN0KGFl''@;'; put 'put ''KEopKTt2YXIgYXR9KGx0KT9sdDp2b2lkIDB9b3QucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1ydD9ydChudWxsKTp7fSx0aGlzLnNpemU9MH0sb3QucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihKKXt2YXIgYXQ9dGhpcy5oYXMoSikmJmRlbGV0ZSB0aGlzLl9f''@;'; put 'put ''ZGF0YV9fW0pdO3JldHVybiB0aGlzLnNpemUtPWF0PzE6MCxhdH0sb3QucHJvdG90eXBlLmdldD1mdW5jdGlvbihKKXt2YXIgYXQ9dGhpcy5fX2RhdGFfXztpZihydCl7dmFyIGx0PWF0W0pdO3JldHVybiJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIj09PWx0P3ZvaWQgMDpsdH1yZXR1cm4g''@;'; put 'put ''bS5jYWxsKGF0LEopP2F0W0pdOnZvaWQgMH0sb3QucHJvdG90eXBlLmhhcz1mdW5jdGlvbihKKXt2YXIgYXQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gcnQ/dm9pZCAwIT09YXRbSl06bS5jYWxsKGF0LEopfSxvdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKEosYXQpe3ZhciBsdD10aGlzLl9fZGF0''@;'; put 'put ''YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKEopPzA6MSxsdFtKXT1ydCYmdm9pZCAwPT09YXQ/Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iOmF0LHRoaXN9LGh0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LGh0LnByb3Rv''@;'; put 'put ''dHlwZS5kZWxldGU9ZnVuY3Rpb24oSil7dmFyIGF0PXRoaXMuX19kYXRhX18sbHQ9d3QoYXQsSik7cmV0dXJuIShsdDwwfHwobHQ9PWF0Lmxlbmd0aC0xP2F0LnBvcCgpOlYuY2FsbChhdCxsdCwxKSwtLXRoaXMuc2l6ZSwwKSl9LGh0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oSil7dmFyIGF0''@;'; put 'put ''PXRoaXMuX19kYXRhX18sbHQ9d3QoYXQsSik7cmV0dXJuIGx0PDA/dm9pZCAwOmF0W2x0XVsxXX0saHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbihKKXtyZXR1cm4gd3QodGhpcy5fX2RhdGFfXyxKKT4tMX0saHQucHJvdG90eXBlLnNldD1mdW5jdGlvbihKLGF0KXt2YXIgbHQ9dGhpcy5fX2Rh''@;'; put 'put ''dGFfXyxkdD13dChsdCxKKTtyZXR1cm4gZHQ8MD8oKyt0aGlzLnNpemUsbHQucHVzaChbSixhdF0pKTpsdFtkdF1bMV09YXQsdGhpc30sZnQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgb3QsbWFwOm5ldyhxfHxodCksc3Ry''@;'; put 'put ''aW5nOm5ldyBvdH19LGZ0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oSil7dmFyIGF0PVN0KHRoaXMsSikuZGVsZXRlKEopO3JldHVybiB0aGlzLnNpemUtPWF0PzE6MCxhdH0sZnQucHJvdG90eXBlLmdldD1mdW5jdGlvbihKKXtyZXR1cm4gU3QodGhpcyxKKS5nZXQoSil9LGZ0LnByb3Rv''@;'; put 'put ''dHlwZS5oYXM9ZnVuY3Rpb24oSil7cmV0dXJuIFN0KHRoaXMsSikuaGFzKEopfSxmdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKEosYXQpe3ZhciBsdD1TdCh0aGlzLEopLGR0PWx0LnNpemU7cmV0dXJuIGx0LnNldChKLGF0KSx0aGlzLnNpemUrPWx0LnNpemU9PWR0PzA6MSx0aGlzfSxwdC5w''@;'; put 'put ''cm90b3R5cGUuYWRkPXB0LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEope3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChKLCJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIiksdGhpc30scHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbihKKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoSil9LFR0''@;'; put 'put ''LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189bmV3IGh0LHRoaXMuc2l6ZT0wfSxUdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKEope3ZhciBhdD10aGlzLl9fZGF0YV9fLGx0PWF0LmRlbGV0ZShKKTtyZXR1cm4gdGhpcy5zaXplPWF0LnNpemUsbHR9LFR0LnBy''@;'; put 'put ''b3RvdHlwZS5nZXQ9ZnVuY3Rpb24oSil7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KEopfSxUdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKEope3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhKKX0sVHQucHJvdG90eXBlLnNldD1mdW5jdGlvbihKLGF0KXt2YXIgbHQ9dGhpcy5fX2RhdGFfXztp''@;'; put 'put ''ZihsdCBpbnN0YW5jZW9mIGh0KXt2YXIgZHQ9bHQuX19kYXRhX187aWYoIXF8fGR0Lmxlbmd0aDwxOTkpcmV0dXJuIGR0LnB1c2goW0osYXRdKSx0aGlzLnNpemU9KytsdC5zaXplLHRoaXM7bHQ9dGhpcy5fX2RhdGFfXz1uZXcgZnQoZHQpfXJldHVybiBsdC5zZXQoSixhdCksdGhpcy5zaXpl''@;'; put 'put ''PWx0LnNpemUsdGhpc307dmFyIHllPUg/ZnVuY3Rpb24oSil7cmV0dXJuIG51bGw9PUo/W106KEo9T2JqZWN0KEopLGZ1bmN0aW9uKGF0LGx0KXtmb3IodmFyIGR0PS0xLFl0PW51bGw9PWF0PzA6YXQubGVuZ3RoLHZ0PTAsa3Q9W107KytkdDxZdDspe3ZhciB0ZT1hdFtkdF07bHQodGUpJiYo''@;'; put 'put ''a3RbdnQrK109dGUpfXJldHVybiBrdH0oSChKKSxmdW5jdGlvbihhdCl7cmV0dXJuIFUuY2FsbChKLGF0KX0pKX06ZnVuY3Rpb24oKXtyZXR1cm5bXX0sUnQ9cXQ7ZnVuY3Rpb24gTnQoSixhdCl7cmV0dXJuISEoYXQ9YXQ/PzkwMDcxOTkyNTQ3NDA5OTEpJiYoIm51bWJlciI9PXR5cGVvZiBK''@;'; put 'put ''fHxsLnRlc3QoSikpJiZKPi0xJiZKJTE9PTAmJko8YXR9ZnVuY3Rpb24gYWUoSil7aWYobnVsbCE9Sil7dHJ5e3JldHVybiBjLmNhbGwoSil9Y2F0Y2h7fXRyeXtyZXR1cm4gSisiIn1jYXRjaHt9fXJldHVybiIifWZ1bmN0aW9uIEx0KEosYXQpe3JldHVybiBKPT09YXR8fEohPUomJmF0IT1h''@;'; put 'put ''dH0oRiYmIltvYmplY3QgRGF0YVZpZXddIiE9UnQobmV3IEYobmV3IEFycmF5QnVmZmVyKDEpKSl8fHEmJlJ0KG5ldyBxKSE9b3x8WSYmIltvYmplY3QgUHJvbWlzZV0iIT1SdChZLnJlc29sdmUoKSl8fFgmJlJ0KG5ldyBYKSE9dHx8SyYmIltvYmplY3QgV2Vha01hcF0iIT1SdChuZXcgSykp''@;'; put 'put ''JiYoUnQ9ZnVuY3Rpb24oSil7dmFyIGF0PXF0KEopLGx0PWF0PT1yP0ouY29uc3RydWN0b3I6dm9pZCAwLGR0PWx0P2FlKGx0KToiIjtpZihkdClzd2l0Y2goZHQpe2Nhc2UgdHQ6cmV0dXJuIltvYmplY3QgRGF0YVZpZXddIjtjYXNlIFc6cmV0dXJuIG87Y2FzZSBROnJldHVybiJbb2JqZWN0''@;'; put 'put ''IFByb21pc2VdIjtjYXNlIEc6cmV0dXJuIHQ7Y2FzZSBldDpyZXR1cm4iW29iamVjdCBXZWFrTWFwXSJ9cmV0dXJuIGF0fSk7dmFyIHp0PUV0KGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/RXQ6ZnVuY3Rpb24oSil7cmV0dXJuIEl0KEopJiZtLmNhbGwoSiwiY2FsbGVlIikmJiFV''@;'; put 'put ''LmNhbGwoSiwiY2FsbGVlIil9LHBlPUFycmF5LmlzQXJyYXksQnQ9VHx8ZnVuY3Rpb24oKXtyZXR1cm4hMX07ZnVuY3Rpb24gUHQoSil7aWYoIUZ0KEopKXJldHVybiExO3ZhciBhdD1xdChKKTtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT1hdHx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rp''@;'; put 'put ''b25dIj09YXR8fCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09YXR8fCJbb2JqZWN0IFByb3h5XSI9PWF0fWZ1bmN0aW9uIGNlKEope3JldHVybiJudW1iZXIiPT10eXBlb2YgSiYmSj4tMSYmSiUxPT0wJiZKPD05MDA3MTk5MjU0NzQwOTkxfWZ1bmN0aW9uIEZ0KEope3ZhciBhdD10eXBlb2Yg''@;'; put 'put ''SjtyZXR1cm4gbnVsbCE9SiYmKCJvYmplY3QiPT1hdHx8ImZ1bmN0aW9uIj09YXQpfWZ1bmN0aW9uIEl0KEope3JldHVybiBudWxsIT1KJiYib2JqZWN0Ij09dHlwZW9mIEp9dmFyIHZlPUE/ZnVuY3Rpb24oSil7cmV0dXJuIGZ1bmN0aW9uKGF0KXtyZXR1cm4gSihhdCl9fShBKTpmdW5jdGlv''@;'; put 'put ''bihKKXtyZXR1cm4gSXQoSikmJmNlKEoubGVuZ3RoKSYmISFuW3F0KEopXX07RS5leHBvcnRzPWZ1bmN0aW9uKEosYXQpe3JldHVybiBfdChKLGF0KX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Yg''@;'; put 'put ''d2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNDQ2OltmdW5jdGlvbihzLEUsUyl7KGZ1bmN0aW9uKGIpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgbz0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLHI9Im9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiBiJiZiJiZiLk9iamVjdD09PU9iamVjdCYmYnx8b3x8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSx0PU9iamVjdC5wcm90b3R5cGUsZT10Lmhhc093blByb3BlcnR5LGw9dC50b1N0cmluZyxuPXIuU3ltYm9sLGk9bj9uLnRvU3RyaW5nVGFnOnZvaWQgMDtFLmV4cG9ydHM9ZnVuY3Rpb24o''@;'; put 'put ''Zil7aWYoZD10eXBlb2YocD1mKSxudWxsPT1wfHwib2JqZWN0IiE9ZCYmImZ1bmN0aW9uIiE9ZClyZXR1cm4hMTt2YXIgcCxkLHU9ZnVuY3Rpb24gaChmKXtyZXR1cm4gbnVsbD09Zj92b2lkIDA9PT1mPyJbb2JqZWN0IFVuZGVmaW5lZF0iOiJbb2JqZWN0IE51bGxdIjppJiZpIGluIE9iamVj''@;'; put 'put ''dChmKT9mdW5jdGlvbih1KXt2YXIgcD1lLmNhbGwodSxpKSxkPXVbaV07dHJ5e3VbaV09dm9pZCAwO3ZhciB2PSEwfWNhdGNoe312YXIgXz1sLmNhbGwodSk7cmV0dXJuIHYmJihwP3VbaV09ZDpkZWxldGUgdVtpXSksX30oZik6bC5jYWxsKGYpfShmKTtyZXR1cm4iW29iamVjdCBGdW5jdGlv''@;'; put 'put ''bl0iPT11fHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT11fHwiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PXV8fCJbb2JqZWN0IFByb3h5XSI9PXV9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlw''@;'; put 'put ''ZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDQ0NzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtFLmV4cG9ydHM9ZnVuY3Rpb24oYil7cmV0dXJuIG51bGw9PWJ9fSx7fV0sNDQ4OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO0UuZXhwb3J0cz1mdW5jdGlvbihiKXty''@;'; put 'put ''ZXR1cm4gdm9pZCAwPT09Yn19LHt9XSw0NDk6W2Z1bmN0aW9uKHMsRSxTKXsoZnVuY3Rpb24oYil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBhPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLHI9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9i''@;'; put 'put ''amVjdCYmc2VsZix0PSJvYmplY3QiPT10eXBlb2YgYiYmYiYmYi5PYmplY3Q9PT1PYmplY3QmJmJ8fHJ8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7ZnVuY3Rpb24gZSh6LFUpe3JldHVybiEoIXp8fCF6Lmxlbmd0aCkmJmZ1bmN0aW9uKFYsUil7aWYoUiE9UilyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''RixxKXtmb3IodmFyIEs9Ri5sZW5ndGgscnQ9LTE7KytydDxLOylpZihxKEZbcnRdLHJ0LEYpKXJldHVybiBydDtyZXR1cm4tMX0oVixuKTtmb3IodmFyIFQ9LTEsQz1WLmxlbmd0aDsrK1Q8QzspaWYoVltUXT09PVIpcmV0dXJuIFQ7cmV0dXJuLTF9KHosVSk+LTF9ZnVuY3Rpb24gbih6KXty''@;'; put 'put ''ZXR1cm4geiE9en1mdW5jdGlvbiBpKHosVSl7cmV0dXJuIHouaGFzKFUpfWZ1bmN0aW9uIGgoeil7dmFyIFU9LTEsVj1BcnJheSh6LnNpemUpO3JldHVybiB6LmZvckVhY2goZnVuY3Rpb24oUil7VlsrK1VdPVJ9KSxWfXZhciBmLHU9QXJyYXkucHJvdG90eXBlLHA9RnVuY3Rpb24ucHJvdG90''@;'; put 'put ''eXBlLGQ9T2JqZWN0LnByb3RvdHlwZSx2PXRbIl9fY29yZS1qc19zaGFyZWRfXyJdLF89KGY9L1teLl0rJC8uZXhlYyh2JiZ2LmtleXMmJnYua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK2Y6IiIsQT1wLnRvU3RyaW5nLEk9ZC5oYXNPd25Qcm9wZXJ0eSxMPWQudG9TdHJp''@;'; put 'put ''bmcsTj1SZWdFeHAoIl4iK0EuY2FsbChJKS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKSxQPXUuc3BsaWNlLEI9ayh0LCJNYXAi''@;'; put 'put ''KSwkPWsodCwiU2V0IiksRD1rKE9iamVjdCwiY3JlYXRlIik7ZnVuY3Rpb24geCh6KXt2YXIgVT0tMSxWPXo/ei5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrVTxWOyl7dmFyIFI9eltVXTt0aGlzLnNldChSWzBdLFJbMV0pfX1mdW5jdGlvbiBNKHope3ZhciBVPS0xLFY9ej96Lmxlbmd0''@;'; put 'put ''aDowO2Zvcih0aGlzLmNsZWFyKCk7KytVPFY7KXt2YXIgUj16W1VdO3RoaXMuc2V0KFJbMF0sUlsxXSl9fWZ1bmN0aW9uIGooeil7dmFyIFU9LTEsVj16P3oubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK1U8Vjspe3ZhciBSPXpbVV07dGhpcy5zZXQoUlswXSxSWzFdKX19ZnVuY3Rpb24g''@;'; put 'put ''Yyh6KXt2YXIgVT0tMSxWPXo/ei5sZW5ndGg6MDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgajsrK1U8VjspdGhpcy5hZGQoeltVXSl9ZnVuY3Rpb24gbSh6LFUpe2Zvcih2YXIgVixSLEg9ei5sZW5ndGg7SC0tOylpZigoVj16W0hdWzBdKT09PShSPVUpfHxWIT1WJiZSIT1SKXJldHVybiBIO3Jl''@;'; put 'put ''dHVybi0xfXgucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1EP0QobnVsbCk6e319LHgucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5oYXMoeikmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW3pdfSx4LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24o''@;'; put 'put ''eil7dmFyIFU9dGhpcy5fX2RhdGFfXztpZihEKXt2YXIgVj1VW3pdO3JldHVybiJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIj09PVY/dm9pZCAwOlZ9cmV0dXJuIEkuY2FsbChVLHopP1Vbel06dm9pZCAwfSx4LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oeil7dmFyIFU9dGhpcy5fX2RhdGFf''@;'; put 'put ''XztyZXR1cm4gRD92b2lkIDAhPT1VW3pdOkkuY2FsbChVLHopfSx4LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oeixVKXtyZXR1cm4gdGhpcy5fX2RhdGFfX1t6XT1EJiZ2b2lkIDA9PT1VPyJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjpVLHRoaXN9LE0ucHJvdG90eXBlLmNsZWFyPWZ1bmN0''@;'; put 'put ''aW9uKCl7dGhpcy5fX2RhdGFfXz1bXX0sTS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHope3ZhciBVPXRoaXMuX19kYXRhX18sVj1tKFUseik7cmV0dXJuIShWPDB8fChWPT1VLmxlbmd0aC0xP1UucG9wKCk6UC5jYWxsKFUsViwxKSwwKSl9LE0ucHJvdG90eXBlLmdldD1mdW5jdGlvbih6''@;'; put 'put ''KXt2YXIgVT10aGlzLl9fZGF0YV9fLFY9bShVLHopO3JldHVybiBWPDA/dm9pZCAwOlVbVl1bMV19LE0ucHJvdG90eXBlLmhhcz1mdW5jdGlvbih6KXtyZXR1cm4gbSh0aGlzLl9fZGF0YV9fLHopPi0xfSxNLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oeixVKXt2YXIgVj10aGlzLl9fZGF0YV9f''@;'; put 'put ''LFI9bShWLHopO3JldHVybiBSPDA/Vi5wdXNoKFt6LFVdKTpWW1JdWzFdPVUsdGhpc30sai5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyB4LG1hcDpuZXcoQnx8TSksc3RyaW5nOm5ldyB4fX0sai5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHop''@;'; put 'put ''e3JldHVybiB3KHRoaXMseikuZGVsZXRlKHopfSxqLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oeil7cmV0dXJuIHcodGhpcyx6KS5nZXQoeil9LGoucHJvdG90eXBlLmhhcz1mdW5jdGlvbih6KXtyZXR1cm4gdyh0aGlzLHopLmhhcyh6KX0sai5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHosVSl7''@;'; put 'put ''cmV0dXJuIHcodGhpcyx6KS5zZXQoeixVKSx0aGlzfSxjLnByb3RvdHlwZS5hZGQ9Yy5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQoeiwiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIpLHRoaXN9LGMucHJvdG90eXBlLmhhcz1mdW5jdGlvbih6''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoeil9O3ZhciB5PSQmJjEvaChuZXcgJChbLC0wXSkpWzFdPT0xLzA/ZnVuY3Rpb24oeil7cmV0dXJuIG5ldyAkKHopfTpmdW5jdGlvbigpe307ZnVuY3Rpb24gdyh6LFUpe3ZhciBWLFIsSD16Ll9fZGF0YV9fO3JldHVybigic3RyaW5nIj09KFI9''@;'; put 'put ''dHlwZW9mKFY9VSkpfHwibnVtYmVyIj09Unx8InN5bWJvbCI9PVJ8fCJib29sZWFuIj09Uj8iX19wcm90b19fIiE9PVY6bnVsbD09PVYpP0hbInN0cmluZyI9PXR5cGVvZiBVPyJzdHJpbmciOiJoYXNoIl06SC5tYXB9ZnVuY3Rpb24gayh6LFUpe3ZhciBSLEgsVj0oUj16LEg9VSxSPy5bSF0p''@;'; put 'put ''O3JldHVybiBmdW5jdGlvbiBnKHope3JldHVybiEoIU8oeil8fChVPXosXyYmXyBpbiBVKSkmJihWPXosUj1PKFYpP0wuY2FsbChWKToiIiwiW29iamVjdCBGdW5jdGlvbl0iPT1SfHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT1SfHxmdW5jdGlvbihWKXt2YXIgUj0hMTtpZihudWxs''@;'; put 'put ''IT1WJiYiZnVuY3Rpb24iIT10eXBlb2YgVi50b1N0cmluZyl0cnl7Uj0hIShWKyIiKX1jYXRjaHt9cmV0dXJuIFJ9KHopP046YSkudGVzdChmdW5jdGlvbihWKXtpZihudWxsIT1WKXt0cnl7cmV0dXJuIEEuY2FsbChWKX1jYXRjaHt9dHJ5e3JldHVybiBWKyIifWNhdGNoe319cmV0dXJuIiJ9''@;'; put 'put ''KHopKTt2YXIgVixSLFV9KFYpP1Y6dm9pZCAwfWZ1bmN0aW9uIE8oeil7dmFyIFU9dHlwZW9mIHo7cmV0dXJuISF6JiYoIm9iamVjdCI9PVV8fCJmdW5jdGlvbiI9PVUpfUUuZXhwb3J0cz1mdW5jdGlvbih6KXtyZXR1cm4geiYmei5sZW5ndGg/ZnVuY3Rpb24oVSxWLFIpe3ZhciBIPS0xLFQ9''@;'; put 'put ''ZSxDPVUubGVuZ3RoLEY9ITAscT1bXSxZPXE7aWYoQz49MjAwKXt2YXIgWD15KFUpO2lmKFgpcmV0dXJuIGgoWCk7Rj0hMSxUPWksWT1uZXcgY31lbHNlIFk9cTt0OmZvcig7KytIPEM7KXt2YXIgSz1VW0hdLHJ0PUs7aWYoSz0wIT09Sz9LOjAsRiYmcnQ9PXJ0KXtmb3IodmFyIHR0PVkubGVu''@;'; put 'put ''Z3RoO3R0LS07KWlmKFlbdHRdPT09cnQpY29udGludWUgdDtxLnB1c2goSyl9ZWxzZSBUKFkscnQsUil8fChZIT09cSYmWS5wdXNoKHJ0KSxxLnB1c2goSykpfXJldHVybiBxfSh6KTpbXX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Yg''@;'; put 'put ''c2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNDUwOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoImluaGVyaXRzIiksYT1zKCJoYXNoLWJhc2UiKSxvPXMoInNhZmUtYnVmZmVyIikuQnVmZmVyLHI9bmV3IEFycmF5KDE2KTtmdW5j''@;'; put 'put ''dGlvbiB0KCl7YS5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4fWZ1bmN0aW9uIGUoZix1KXtyZXR1cm4gZjw8dXxmPj4+MzItdX1mdW5jdGlvbiBsKGYsdSxwLGQsdixfLEEpe3Jl''@;'; put 'put ''dHVybiBlKGYrKHUmcHx+dSZkKSt2K198MCxBKSt1fDB9ZnVuY3Rpb24gbihmLHUscCxkLHYsXyxBKXtyZXR1cm4gZShmKyh1JmR8cCZ+ZCkrditffDAsQSkrdXwwfWZ1bmN0aW9uIGkoZix1LHAsZCx2LF8sQSl7cmV0dXJuIGUoZisodV5wXmQpK3YrX3wwLEEpK3V8MH1mdW5jdGlvbiBoKGYs''@;'; put 'put ''dSxwLGQsdixfLEEpe3JldHVybiBlKGYrKHBeKHV8fmQpKSt2K198MCxBKSt1fDB9Yih0LGEpLHQucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIGY9cix1PTA7dTwxNjsrK3UpZlt1XT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KnUpO3ZhciBwPXRoaXMuX2EsZD10aGlz''@;'; put 'put ''Ll9iLHY9dGhpcy5fYyxfPXRoaXMuX2Q7cD1sKHAsZCx2LF8sZlswXSwzNjE0MDkwMzYwLDcpLF89bChfLHAsZCx2LGZbMV0sMzkwNTQwMjcxMCwxMiksdj1sKHYsXyxwLGQsZlsyXSw2MDYxMDU4MTksMTcpLGQ9bChkLHYsXyxwLGZbM10sMzI1MDQ0MTk2NiwyMikscD1sKHAsZCx2LF8sZls0''@;'; put 'put ''XSw0MTE4NTQ4Mzk5LDcpLF89bChfLHAsZCx2LGZbNV0sMTIwMDA4MDQyNiwxMiksdj1sKHYsXyxwLGQsZls2XSwyODIxNzM1OTU1LDE3KSxkPWwoZCx2LF8scCxmWzddLDQyNDkyNjEzMTMsMjIpLHA9bChwLGQsdixfLGZbOF0sMTc3MDAzNTQxNiw3KSxfPWwoXyxwLGQsdixmWzldLDIzMzY1''@;'; put 'put ''NTI4NzksMTIpLHY9bCh2LF8scCxkLGZbMTBdLDQyOTQ5MjUyMzMsMTcpLGQ9bChkLHYsXyxwLGZbMTFdLDIzMDQ1NjMxMzQsMjIpLHA9bChwLGQsdixfLGZbMTJdLDE4MDQ2MDM2ODIsNyksXz1sKF8scCxkLHYsZlsxM10sNDI1NDYyNjE5NSwxMiksdj1sKHYsXyxwLGQsZlsxNF0sMjc5Mjk2''@;'; put 'put ''NTAwNiwxNykscD1uKHAsZD1sKGQsdixfLHAsZlsxNV0sMTIzNjUzNTMyOSwyMiksdixfLGZbMV0sNDEyOTE3MDc4Niw1KSxfPW4oXyxwLGQsdixmWzZdLDMyMjU0NjU2NjQsOSksdj1uKHYsXyxwLGQsZlsxMV0sNjQzNzE3NzEzLDE0KSxkPW4oZCx2LF8scCxmWzBdLDM5MjEwNjk5OTQsMjAp''@;'; put 'put ''LHA9bihwLGQsdixfLGZbNV0sMzU5MzQwODYwNSw1KSxfPW4oXyxwLGQsdixmWzEwXSwzODAxNjA4Myw5KSx2PW4odixfLHAsZCxmWzE1XSwzNjM0NDg4OTYxLDE0KSxkPW4oZCx2LF8scCxmWzRdLDM4ODk0Mjk0NDgsMjApLHA9bihwLGQsdixfLGZbOV0sNTY4NDQ2NDM4LDUpLF89bihfLHAs''@;'; put 'put ''ZCx2LGZbMTRdLDMyNzUxNjM2MDYsOSksdj1uKHYsXyxwLGQsZlszXSw0MTA3NjAzMzM1LDE0KSxkPW4oZCx2LF8scCxmWzhdLDExNjM1MzE1MDEsMjApLHA9bihwLGQsdixfLGZbMTNdLDI4NTAyODU4MjksNSksXz1uKF8scCxkLHYsZlsyXSw0MjQzNTYzNTEyLDkpLHY9bih2LF8scCxkLGZb''@;'; put 'put ''N10sMTczNTMyODQ3MywxNCkscD1pKHAsZD1uKGQsdixfLHAsZlsxMl0sMjM2ODM1OTU2MiwyMCksdixfLGZbNV0sNDI5NDU4ODczOCw0KSxfPWkoXyxwLGQsdixmWzhdLDIyNzIzOTI4MzMsMTEpLHY9aSh2LF8scCxkLGZbMTFdLDE4MzkwMzA1NjIsMTYpLGQ9aShkLHYsXyxwLGZbMTRdLDQy''@;'; put 'put ''NTk2NTc3NDAsMjMpLHA9aShwLGQsdixfLGZbMV0sMjc2Mzk3NTIzNiw0KSxfPWkoXyxwLGQsdixmWzRdLDEyNzI4OTMzNTMsMTEpLHY9aSh2LF8scCxkLGZbN10sNDEzOTQ2OTY2NCwxNiksZD1pKGQsdixfLHAsZlsxMF0sMzIwMDIzNjY1NiwyMykscD1pKHAsZCx2LF8sZlsxM10sNjgxMjc5''@;'; put 'put ''MTc0LDQpLF89aShfLHAsZCx2LGZbMF0sMzkzNjQzMDA3NCwxMSksdj1pKHYsXyxwLGQsZlszXSwzNTcyNDQ1MzE3LDE2KSxkPWkoZCx2LF8scCxmWzZdLDc2MDI5MTg5LDIzKSxwPWkocCxkLHYsXyxmWzldLDM2NTQ2MDI4MDksNCksXz1pKF8scCxkLHYsZlsxMl0sMzg3MzE1MTQ2MSwxMSks''@;'; put 'put ''dj1pKHYsXyxwLGQsZlsxNV0sNTMwNzQyNTIwLDE2KSxwPWgocCxkPWkoZCx2LF8scCxmWzJdLDMyOTk2Mjg2NDUsMjMpLHYsXyxmWzBdLDQwOTYzMzY0NTIsNiksXz1oKF8scCxkLHYsZls3XSwxMTI2ODkxNDE1LDEwKSx2PWgodixfLHAsZCxmWzE0XSwyODc4NjEyMzkxLDE1KSxkPWgoZCx2''@;'; put 'put ''LF8scCxmWzVdLDQyMzc1MzMyNDEsMjEpLHA9aChwLGQsdixfLGZbMTJdLDE3MDA0ODU1NzEsNiksXz1oKF8scCxkLHYsZlszXSwyMzk5OTgwNjkwLDEwKSx2PWgodixfLHAsZCxmWzEwXSw0MjkzOTE1NzczLDE1KSxkPWgoZCx2LF8scCxmWzFdLDIyNDAwNDQ0OTcsMjEpLHA9aChwLGQsdixf''@;'; put 'put ''LGZbOF0sMTg3MzMxMzM1OSw2KSxfPWgoXyxwLGQsdixmWzE1XSw0MjY0MzU1NTUyLDEwKSx2PWgodixfLHAsZCxmWzZdLDI3MzQ3Njg5MTYsMTUpLGQ9aChkLHYsXyxwLGZbMTNdLDEzMDkxNTE2NDksMjEpLHA9aChwLGQsdixfLGZbNF0sNDE0OTQ0NDIyNiw2KSxfPWgoXyxwLGQsdixmWzEx''@;'; put 'put ''XSwzMTc0NzU2OTE3LDEwKSx2PWgodixfLHAsZCxmWzJdLDcxODc4NzI1OSwxNSksZD1oKGQsdixfLHAsZls5XSwzOTUxNDgxNzQ1LDIxKSx0aGlzLl9hPXRoaXMuX2ErcHwwLHRoaXMuX2I9dGhpcy5fYitkfDAsdGhpcy5fYz10aGlzLl9jK3Z8MCx0aGlzLl9kPXRoaXMuX2QrX3wwfSx0LnBy''@;'; put 'put ''b3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0''@;'; put 'put ''aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIGY9by5hbGxvY1Vuc2Fm''@;'; put 'put ''ZSgxNik7cmV0dXJuIGYud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksZi53cml0ZUludDMyTEUodGhpcy5fYiw0KSxmLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLGYud3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIpLGZ9LEUuZXhwb3J0cz10fSx7Imhhc2gtYmFzZSI6NDI1LGluaGVyaXRzOjQ0MCwi''@;'; put 'put ''c2FmZS1idWZmZXIiOjQ5NH1dLDQ1MTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCJibi5qcyIpLGE9cygiYnJvcmFuZCIpO2Z1bmN0aW9uIG8ocil7dGhpcy5yYW5kPXJ8fG5ldyBhLlJhbmR9RS5leHBvcnRzPW8sby5jcmVhdGU9ZnVuY3Rpb24ocil7cmV0dXJuIG5l''@;'; put 'put ''dyBvKHIpfSxvLnByb3RvdHlwZS5fcmFuZGJlbG93PWZ1bmN0aW9uKHIpe3ZhciB0PXIuYml0TGVuZ3RoKCksZT1NYXRoLmNlaWwodC84KTtkb3t2YXIgbD1uZXcgYih0aGlzLnJhbmQuZ2VuZXJhdGUoZSkpfXdoaWxlKGwuY21wKHIpPj0wKTtyZXR1cm4gbH0sby5wcm90b3R5cGUuX3JhbmRy''@;'; put 'put ''YW5nZT1mdW5jdGlvbihyLHQpe3ZhciBlPXQuc3ViKHIpO3JldHVybiByLmFkZCh0aGlzLl9yYW5kYmVsb3coZSkpfSxvLnByb3RvdHlwZS50ZXN0PWZ1bmN0aW9uKHIsdCxlKXt2YXIgbD1yLmJpdExlbmd0aCgpLG49Yi5tb250KHIpLGk9bmV3IGIoMSkudG9SZWQobik7dHx8KHQ9TWF0aC5t''@;'; put 'put ''YXgoMSxsLzQ4fDApKTtmb3IodmFyIGg9ci5zdWJuKDEpLGY9MDshaC50ZXN0bihmKTtmKyspO2Zvcih2YXIgdT1yLnNocm4oZikscD1oLnRvUmVkKG4pO3Q+MDt0LS0pe3ZhciBkPXRoaXMuX3JhbmRyYW5nZShuZXcgYigyKSxoKTtlJiZlKGQpO3ZhciB2PWQudG9SZWQobikucmVkUG93KHUp''@;'; put 'put ''O2lmKDAhPT12LmNtcChpKSYmMCE9PXYuY21wKHApKXtmb3IodmFyIF89MTtfPGY7XysrKXtpZigwPT09KHY9di5yZWRTcXIoKSkuY21wKGkpKXJldHVybiExO2lmKDA9PT12LmNtcChwKSlicmVha31pZihfPT09ZilyZXR1cm4hMX19cmV0dXJuITB9LG8ucHJvdG90eXBlLmdldERpdmlzb3I9''@;'; put 'put ''ZnVuY3Rpb24ocix0KXt2YXIgZT1yLmJpdExlbmd0aCgpLGw9Yi5tb250KHIpLG49bmV3IGIoMSkudG9SZWQobCk7dHx8KHQ9TWF0aC5tYXgoMSxlLzQ4fDApKTtmb3IodmFyIGk9ci5zdWJuKDEpLGg9MDshaS50ZXN0bihoKTtoKyspO2Zvcih2YXIgZj1yLnNocm4oaCksdT1pLnRvUmVkKGwp''@;'; put 'put ''O3Q+MDt0LS0pe3ZhciBwPXRoaXMuX3JhbmRyYW5nZShuZXcgYigyKSxpKSxkPXIuZ2NkKHApO2lmKDAhPT1kLmNtcG4oMSkpcmV0dXJuIGQ7dmFyIHY9cC50b1JlZChsKS5yZWRQb3coZik7aWYoMCE9PXYuY21wKG4pJiYwIT09di5jbXAodSkpe2Zvcih2YXIgXz0xO188aDtfKyspe2lmKDA9''@;'; put 'put ''PT0odj12LnJlZFNxcigpKS5jbXAobikpcmV0dXJuIHYuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKHIpO2lmKDA9PT12LmNtcCh1KSlicmVha31pZihfPT09aClyZXR1cm4odj12LnJlZFNxcigpKS5mcm9tUmVkKCkuc3VibigxKS5nY2Qocil9fXJldHVybiExfX0seyJibi5qcyI6NDUyLGJyb3Jh''@;'; put 'put ''bmQ6MTg3fV0sNDUyOltmdW5jdGlvbihzLEUsUyl7YXJndW1lbnRzWzRdWzE4NF1bMF0uYXBwbHkoUyxhcmd1bWVudHMpfSx7YnVmZmVyOjE4OCxkdXA6MTg0fV0sNDUzOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYSxvKXtpZighYSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''b3x8IkFzc2VydGlvbiBmYWlsZWQiKX1FLmV4cG9ydHM9YixiLmVxdWFsPWZ1bmN0aW9uKGEsbyxyKXtpZihhIT1vKXRocm93IG5ldyBFcnJvcihyfHwiQXNzZXJ0aW9uIGZhaWxlZDogIithKyIgIT0gIitvKX19LHt9XSw0NTQ6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9''@;'; put 'put ''UztmdW5jdGlvbiBhKHIpe3JldHVybiAxPT09ci5sZW5ndGg/IjAiK3I6cn1mdW5jdGlvbiBvKHIpe2Zvcih2YXIgdD0iIixlPTA7ZTxyLmxlbmd0aDtlKyspdCs9YShyW2VdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIHR9Yi50b0FycmF5PWZ1bmN0aW9uKHIsdCl7aWYoQXJyYXkuaXNBcnJheShy''@;'; put 'put ''KSlyZXR1cm4gci5zbGljZSgpO2lmKCFyKXJldHVybltdO3ZhciBlPVtdO2lmKCJzdHJpbmciIT10eXBlb2Ygcil7Zm9yKHZhciBsPTA7bDxyLmxlbmd0aDtsKyspZVtsXT0wfHJbbF07cmV0dXJuIGV9aWYoImhleCI9PT10KWZvcigocj1yLnJlcGxhY2UoL1teYS16MC05XSsvZ2ksIiIpKS5s''@;'; put 'put ''ZW5ndGglMiE9MCYmKHI9IjAiK3IpLGw9MDtsPHIubGVuZ3RoO2wrPTIpZS5wdXNoKHBhcnNlSW50KHJbbF0rcltsKzFdLDE2KSk7ZWxzZSBmb3IobD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgbj1yLmNoYXJDb2RlQXQobCksaT1uPj44LGg9MjU1Jm47aT9lLnB1c2goaSxoKTplLnB1c2goaCl9''@;'; put 'put ''cmV0dXJuIGV9LGIuemVybzI9YSxiLnRvSGV4PW8sYi5lbmNvZGU9ZnVuY3Rpb24ocix0KXtyZXR1cm4iaGV4Ij09PXQ/byhyKTpyfX0se31dLDQ1NTpbZnVuY3Rpb24ocyxFLFMpe0UuZXhwb3J0cz17IjIuMTYuODQwLjEuMTAxLjMuNC4xLjEiOiJhZXMtMTI4LWVjYiIsIjIuMTYuODQwLjEu''@;'; put 'put ''MTAxLjMuNC4xLjIiOiJhZXMtMTI4LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjMiOiJhZXMtMTI4LW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQiOiJhZXMtMTI4LWNmYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIxIjoiYWVzLTE5Mi1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQu''@;'; put 'put ''MS4yMiI6ImFlcy0xOTItY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjMiOiJhZXMtMTkyLW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjI0IjoiYWVzLTE5Mi1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MSI6ImFlcy0yNTYtZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDIi''@;'; put 'put ''OiJhZXMtMjU2LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzIjoiYWVzLTI1Ni1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NCI6ImFlcy0yNTYtY2ZiIn19LHt9XSw0NTY6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiYXNuMS5qcyIpO1MuY2VydGlmaWNh''@;'; put 'put ''dGU9cygiLi9jZXJ0aWZpY2F0ZSIpO3ZhciBhPWIuZGVmaW5lKCJSU0FQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQoKSx0''@;'; put 'put ''aGlzLmtleSgicHJpdmF0ZUV4cG9uZW50IikuaW50KCksdGhpcy5rZXkoInByaW1lMSIpLmludCgpLHRoaXMua2V5KCJwcmltZTIiKS5pbnQoKSx0aGlzLmtleSgiZXhwb25lbnQxIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MiIpLmludCgpLHRoaXMua2V5KCJjb2VmZmljaWVudCIpLmlu''@;'; put 'put ''dCgpKX0pO1MuUlNBUHJpdmF0ZUtleT1hO3ZhciBvPWIuZGVmaW5lKCJSU0FQdWJsaWNLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQoKSl9KTtTLlJTQVB1YmxpY0tleT1vO3ZhciBy''@;'; put 'put ''PWIuZGVmaW5lKCJTdWJqZWN0UHVibGljS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKHQpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5IikuYml0c3RyKCkpfSk7Uy5QdWJsaWNLZXk9cjt2YXIgdD1iLmRlZmluZSgiQWxnb3Jp''@;'; put 'put ''dGhtSWRlbnRpZmllciIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2JqaWQoKSx0aGlzLmtleSgibm9uZSIpLm51bGxfKCkub3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInBhcmFtcyIpLnNl''@;'; put 'put ''cSgpLm9iaih0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQoKSkub3B0aW9uYWwoKSl9KSxlPWIuZGVmaW5lKCJQcml2YXRlS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRo''@;'; put 'put ''aXMua2V5KCJhbGdvcml0aG0iKS51c2UodCksdGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7Uy5Qcml2YXRlS2V5PWU7dmFyIGw9Yi5kZWZpbmUoIkVuY3J5cHRlZFByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdv''@;'; put 'put ''cml0aG0iKS5zZXEoKS5vYmoodGhpcy5rZXkoImlkIikub2JqaWQoKSx0aGlzLmtleSgiZGVjcnlwdCIpLnNlcSgpLm9iaih0aGlzLmtleSgia2RlIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImtkZXBhcmFtcyIpLnNlcSgpLm9iaih0aGlzLmtleSgic2Fs''@;'; put 'put ''dCIpLm9jdHN0cigpLHRoaXMua2V5KCJpdGVycyIpLmludCgpKSksdGhpcy5rZXkoImNpcGhlciIpLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnbyIpLm9iamlkKCksdGhpcy5rZXkoIml2Iikub2N0c3RyKCkpKSksdGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7Uy5F''@;'; put 'put ''bmNyeXB0ZWRQcml2YXRlS2V5PWw7dmFyIG49Yi5kZWZpbmUoIkRTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQoKSx0''@;'; put 'put ''aGlzLmtleSgicHViX2tleSIpLmludCgpLHRoaXMua2V5KCJwcml2X2tleSIpLmludCgpKX0pO1MuRFNBUHJpdmF0ZUtleT1uLFMuRFNBcGFyYW09Yi5kZWZpbmUoIkRTQXBhcmFtIixmdW5jdGlvbigpe3RoaXMuaW50KCl9KTt2YXIgaT1iLmRlZmluZSgiRUNQcml2YXRlS2V5IixmdW5jdGlv''@;'; put 'put ''bigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInByaXZhdGVLZXkiKS5vY3RzdHIoKSx0aGlzLmtleSgicGFyYW1ldGVycyIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMCkudXNlKGgpLHRoaXMua2V5KCJwdWJsaWNLZXkiKS5vcHRpb25hbCgpLmV4''@;'; put 'put ''cGxpY2l0KDEpLmJpdHN0cigpKX0pO1MuRUNQcml2YXRlS2V5PWk7dmFyIGg9Yi5kZWZpbmUoIkVDUGFyYW1ldGVycyIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7bmFtZWRDdXJ2ZTp0aGlzLm9iamlkKCl9KX0pO1Muc2lnbmF0dXJlPWIuZGVmaW5lKCJzaWduYXR1cmUiLGZ1bmN0aW9uKCl7''@;'; put 'put ''dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInIiKS5pbnQoKSx0aGlzLmtleSgicyIpLmludCgpKX0pfSx7Ii4vY2VydGlmaWNhdGUiOjQ1NywiYXNuMS5qcyI6MTcwfV0sNDU3OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoImFzbjEuanMiKSxhPWIuZGVmaW5lKCJUaW1l''@;'; put 'put ''IixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHt1dGNUaW1lOnRoaXMudXRjdGltZSgpLGdlbmVyYWxUaW1lOnRoaXMuZ2VudGltZSgpfSl9KSxvPWIuZGVmaW5lKCJBdHRyaWJ1dGVUeXBlVmFsdWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInR5cGUiKS5vYmppZCgpLHRo''@;'; put 'put ''aXMua2V5KCJ2YWx1ZSIpLmFueSgpKX0pLHI9Yi5kZWZpbmUoIkFsZ29yaXRobUlkZW50aWZpZXIiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLm9iamlkKCksdGhpcy5rZXkoInBhcmFtZXRlcnMiKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIp''@;'; put 'put ''Lm9iamlkKCkub3B0aW9uYWwoKSl9KSx0PWIuZGVmaW5lKCJTdWJqZWN0UHVibGljS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKHIpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5IikuYml0c3RyKCkpfSksZT1iLmRlZmluZSgi''@;'; put 'put ''UmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSIsZnVuY3Rpb24oKXt0aGlzLnNldG9mKG8pfSksbD1iLmRlZmluZSgiUkROU2VxdWVuY2UiLGZ1bmN0aW9uKCl7dGhpcy5zZXFvZihlKX0pLG49Yi5kZWZpbmUoIk5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe3JkblNlcXVlbmNlOnRoaXMu''@;'; put 'put ''dXNlKGwpfSl9KSxpPWIuZGVmaW5lKCJWYWxpZGl0eSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgibm90QmVmb3JlIikudXNlKGEpLHRoaXMua2V5KCJub3RBZnRlciIpLnVzZShhKSl9KSxoPWIuZGVmaW5lKCJFeHRlbnNpb24iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5v''@;'; put 'put ''YmoodGhpcy5rZXkoImV4dG5JRCIpLm9iamlkKCksdGhpcy5rZXkoImNyaXRpY2FsIikuYm9vbCgpLmRlZighMSksdGhpcy5rZXkoImV4dG5WYWx1ZSIpLm9jdHN0cigpKX0pLGY9Yi5kZWZpbmUoIlRCU0NlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2''@;'; put 'put ''ZXJzaW9uIikuZXhwbGljaXQoMCkuaW50KCkub3B0aW9uYWwoKSx0aGlzLmtleSgic2VyaWFsTnVtYmVyIikuaW50KCksdGhpcy5rZXkoInNpZ25hdHVyZSIpLnVzZShyKSx0aGlzLmtleSgiaXNzdWVyIikudXNlKG4pLHRoaXMua2V5KCJ2YWxpZGl0eSIpLnVzZShpKSx0aGlzLmtleSgic3Vi''@;'; put 'put ''amVjdCIpLnVzZShuKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleUluZm8iKS51c2UodCksdGhpcy5rZXkoImlzc3VlclVuaXF1ZUlEIikuaW1wbGljaXQoMSkuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgic3ViamVjdFVuaXF1ZUlEIikuaW1wbGljaXQoMikuYml0c3RyKCkub3B0''@;'; put 'put ''aW9uYWwoKSx0aGlzLmtleSgiZXh0ZW5zaW9ucyIpLmV4cGxpY2l0KDMpLnNlcW9mKGgpLm9wdGlvbmFsKCkpfSksdT1iLmRlZmluZSgiWDUwOUNlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0YnNDZXJ0aWZpY2F0ZSIpLnVzZShmKSx0aGlzLmtleSgi''@;'; put 'put ''c2lnbmF0dXJlQWxnb3JpdGhtIikudXNlKHIpLHRoaXMua2V5KCJzaWduYXR1cmVWYWx1ZSIpLmJpdHN0cigpKX0pO0UuZXhwb3J0cz11fSx7ImFzbjEuanMiOjE3MH1dLDQ1ODpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj0vUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFtcblxy''@;'; put 'put ''XStERUstSW5mbzogQUVTLSgoPzoxMjgpfCg/OjE5Mil8KD86MjU2KSktQ0JDLChbMC05QS1IXSspW1xuXHJdKyhbMC05QS16XG5ccisvPV0rKVtcblxyXSsvbSxhPS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0vbSxvPS9eLS0tLS1CRUdJTiAoKD86Lio/IEtF''@;'; put 'put ''WSl8Q0VSVElGSUNBVEUpLS0tLS0oWzAtOUEtelxuXHIrLz1dKyktLS0tLUVORCBcMS0tLS0tJC9tLHI9cygiZXZwX2J5dGVzdG9rZXkiKSx0PXMoImJyb3dzZXJpZnktYWVzIiksZT1zKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcjtFLmV4cG9ydHM9ZnVuY3Rpb24obCxuKXt2YXIgaSxoPWwudG9T''@;'; put 'put ''dHJpbmcoKSxmPWgubWF0Y2goYik7aWYoZil7dmFyIHU9ImFlcyIrZlsxXSxwPWUuZnJvbShmWzJdLCJoZXgiKSxkPWUuZnJvbShmWzNdLnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0Iiksdj1yKG4scC5zbGljZSgwLDgpLHBhcnNlSW50KGZbMV0sMTApKS5rZXksXz1bXSxBPXQuY3Jl''@;'; put 'put ''YXRlRGVjaXBoZXJpdih1LHYscCk7Xy5wdXNoKEEudXBkYXRlKGQpKSxfLnB1c2goQS5maW5hbCgpKSxpPWUuY29uY2F0KF8pfWVsc2V7dmFyIEk9aC5tYXRjaChvKTtpPWUuZnJvbShJWzJdLnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0Iil9cmV0dXJue3RhZzpoLm1hdGNoKGEpWzFd''@;'; put 'put ''LGRhdGE6aX19fSx7ImJyb3dzZXJpZnktYWVzIjoxOTEsZXZwX2J5dGVzdG9rZXk6NDIzLCJzYWZlLWJ1ZmZlciI6NDk0fV0sNDU5OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4vYXNuMSIpLGE9cygiLi9hZXNpZC5qc29uIiksbz1zKCIuL2ZpeFByb2MiKSxyPXMo''@;'; put 'put ''ImJyb3dzZXJpZnktYWVzIiksdD1zKCJwYmtkZjIiKSxlPXMoInNhZmUtYnVmZmVyIikuQnVmZmVyO2Z1bmN0aW9uIGwobil7dmFyIGk7Im9iamVjdCIhPXR5cGVvZiBufHxlLmlzQnVmZmVyKG4pfHwoaT1uLnBhc3NwaHJhc2Usbj1uLmtleSksInN0cmluZyI9PXR5cGVvZiBuJiYobj1lLmZy''@;'; put 'put ''b20obikpO3ZhciBoLGYsdixfLEEsSSxMLE4sUCxCLCQsRCx4LHU9byhuLGkpLHA9dS50YWcsZD11LmRhdGE7c3dpdGNoKHApe2Nhc2UiQ0VSVElGSUNBVEUiOmY9Yi5jZXJ0aWZpY2F0ZS5kZWNvZGUoZCwiZGVyIikudGJzQ2VydGlmaWNhdGUuc3ViamVjdFB1YmxpY0tleUluZm87Y2FzZSJQ''@;'; put 'put ''VUJMSUMgS0VZIjpzd2l0Y2goZnx8KGY9Yi5QdWJsaWNLZXkuZGVjb2RlKGQsImRlciIpKSxoPWYuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCIuIikpe2Nhc2UiMS4yLjg0MC4xMTM1NDkuMS4xLjEiOnJldHVybiBiLlJTQVB1YmxpY0tleS5kZWNvZGUoZi5zdWJqZWN0UHVibGljS2V5LmRh''@;'; put 'put ''dGEsImRlciIpO2Nhc2UiMS4yLjg0MC4xMDA0NS4yLjEiOnJldHVybiBmLnN1YmplY3RQcml2YXRlS2V5PWYuc3ViamVjdFB1YmxpY0tleSx7dHlwZToiZWMiLGRhdGE6Zn07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIGYuYWxnb3JpdGhtLnBhcmFtcy5wdWJfa2V5PWIuRFNBcGFy''@;'; put 'put ''YW0uZGVjb2RlKGYuc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKSx7dHlwZToiZHNhIixkYXRhOmYuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IGlkICIraCl9Y2FzZSJFTkNSWVBURUQgUFJJVkFURSBLRVkiOl89aSxBPSh2PWQ9Yi5F''@;'; put 'put ''bmNyeXB0ZWRQcml2YXRlS2V5LmRlY29kZShkLCJkZXIiKSkuYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5zYWx0LEk9cGFyc2VJbnQodi5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLml0ZXJzLnRvU3RyaW5nKCksMTApLEw9YVt2LmFsZ29yaXRobS5kZWNyeXB0LmNp''@;'; put 'put ''cGhlci5hbGdvLmpvaW4oIi4iKV0sTj12LmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5pdixQPXYuc3ViamVjdFByaXZhdGVLZXksQj1wYXJzZUludChMLnNwbGl0KCItIilbMV0sMTApLzgsJD10LnBia2RmMlN5bmMoXyxBLEksQiwic2hhMSIpLEQ9ci5jcmVhdGVEZWNpcGhlcml2KEwsJCxO''@;'; put 'put ''KSwoeD1bXSkucHVzaChELnVwZGF0ZShQKSkseC5wdXNoKEQuZmluYWwoKSksZD1lLmNvbmNhdCh4KTtjYXNlIlBSSVZBVEUgS0VZIjpzd2l0Y2goaD0oZj1iLlByaXZhdGVLZXkuZGVjb2RlKGQsImRlciIpKS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjEx''@;'; put 'put ''MzU0OS4xLjEuMSI6cmV0dXJuIGIuUlNBUHJpdmF0ZUtleS5kZWNvZGUoZi5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIik7Y2FzZSIxLjIuODQwLjEwMDQ1LjIuMSI6cmV0dXJue2N1cnZlOmYuYWxnb3JpdGhtLmN1cnZlLHByaXZhdGVLZXk6Yi5FQ1ByaXZhdGVLZXkuZGVjb2RlKGYuc3ViamVj''@;'; put 'put ''dFByaXZhdGVLZXksImRlciIpLnByaXZhdGVLZXl9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiBmLmFsZ29yaXRobS5wYXJhbXMucHJpdl9rZXk9Yi5EU0FwYXJhbS5kZWNvZGUoZi5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikse3R5cGU6ImRzYSIscGFyYW1zOmYuYWxnb3JpdGht''@;'; put 'put ''LnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IGlkICIraCl9Y2FzZSJSU0EgUFVCTElDIEtFWSI6cmV0dXJuIGIuUlNBUHVibGljS2V5LmRlY29kZShkLCJkZXIiKTtjYXNlIlJTQSBQUklWQVRFIEtFWSI6cmV0dXJuIGIuUlNBUHJpdmF0ZUtleS5kZWNvZGUo''@;'; put 'put ''ZCwiZGVyIik7Y2FzZSJEU0EgUFJJVkFURSBLRVkiOnJldHVybnt0eXBlOiJkc2EiLHBhcmFtczpiLkRTQVByaXZhdGVLZXkuZGVjb2RlKGQsImRlciIpfTtjYXNlIkVDIFBSSVZBVEUgS0VZIjpyZXR1cm57Y3VydmU6KGQ9Yi5FQ1ByaXZhdGVLZXkuZGVjb2RlKGQsImRlciIpKS5wYXJhbWV0''@;'; put 'put ''ZXJzLnZhbHVlLHByaXZhdGVLZXk6ZC5wcml2YXRlS2V5fTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgdHlwZSAiK3ApfX1FLmV4cG9ydHM9bCxsLnNpZ25hdHVyZT1iLnNpZ25hdHVyZX0seyIuL2Flc2lkLmpzb24iOjQ1NSwiLi9hc24xIjo0NTYsIi4vZml4UHJvYyI6''@;'; put 'put ''NDU4LCJicm93c2VyaWZ5LWFlcyI6MTkxLHBia2RmMjo0NjAsInNhZmUtYnVmZmVyIjo0OTR9XSw0NjA6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Uy5wYmtkZjI9cygiLi9saWIvYXN5bmMiKSxTLnBia2RmMlN5bmM9cygiLi9saWIvc3luYyIpfSx7Ii4vbGliL2FzeW5jIjo0NjEs''@;'; put 'put ''Ii4vbGliL3N5bmMiOjQ2NH1dLDQ2MTpbZnVuY3Rpb24ocyxFLFMpeyhmdW5jdGlvbihiKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGEsbyxyPXMoInNhZmUtYnVmZmVyIikuQnVmZmVyLHQ9cygiLi9wcmVjb25kaXRpb24iKSxlPXMoIi4vZGVmYXVsdC1lbmNvZGluZyIpLGw9cygi''@;'; put 'put ''Li9zeW5jIiksbj1zKCIuL3RvLWJ1ZmZlciIpLGk9Yi5jcnlwdG8mJmIuY3J5cHRvLnN1YnRsZSxoPXtzaGE6IlNIQS0xIiwic2hhLTEiOiJTSEEtMSIsc2hhMToiU0hBLTEiLHNoYTI1NjoiU0hBLTI1NiIsInNoYS0yNTYiOiJTSEEtMjU2IixzaGEzODQ6IlNIQS0zODQiLCJzaGEtMzg0Ijoi''@;'; put 'put ''U0hBLTM4NCIsInNoYS01MTIiOiJTSEEtNTEyIixzaGE1MTI6IlNIQS01MTIifSxmPVtdO2Z1bmN0aW9uIHUoKXtyZXR1cm4gb3x8KG89Yi5wcm9jZXNzJiZiLnByb2Nlc3MubmV4dFRpY2s/Yi5wcm9jZXNzLm5leHRUaWNrOmIucXVldWVNaWNyb3Rhc2s/Yi5xdWV1ZU1pY3JvdGFzazpiLnNl''@;'; put 'put ''dEltbWVkaWF0ZT9iLnNldEltbWVkaWF0ZTpiLnNldFRpbWVvdXQpfWZ1bmN0aW9uIHAoZCx2LF8sQSxJKXtyZXR1cm4gaS5pbXBvcnRLZXkoInJhdyIsZCx7bmFtZToiUEJLREYyIn0sITEsWyJkZXJpdmVCaXRzIl0pLnRoZW4oZnVuY3Rpb24oTCl7cmV0dXJuIGkuZGVyaXZlQml0cyh7bmFt''@;'; put 'put ''ZToiUEJLREYyIixzYWx0OnYsaXRlcmF0aW9uczpfLGhhc2g6e25hbWU6SX19LEwsQTw8Myl9KS50aGVuKGZ1bmN0aW9uKEwpe3JldHVybiByLmZyb20oTCl9KX1FLmV4cG9ydHM9ZnVuY3Rpb24oZCx2LF8sQSxJLEwpeyJmdW5jdGlvbiI9PXR5cGVvZiBJJiYoTD1JLEk9dm9pZCAwKTt2YXIg''@;'; put 'put ''UCxCLE49aFsoST1JfHwic2hhMSIpLnRvTG93ZXJDYXNlKCldO2lmKE4mJiJmdW5jdGlvbiI9PXR5cGVvZiBiLlByb21pc2Upe2lmKHQoXyxBKSxkPW4oZCxlLCJQYXNzd29yZCIpLHY9bih2LGUsIlNhbHQiKSwiZnVuY3Rpb24iIT10eXBlb2YgTCl0aHJvdyBuZXcgRXJyb3IoIk5vIGNhbGxi''@;'; put 'put ''YWNrIHByb3ZpZGVkIHRvIHBia2RmMiIpO1A9ZnVuY3Rpb24oUCl7aWYoYi5wcm9jZXNzJiYhYi5wcm9jZXNzLmJyb3dzZXJ8fCFpfHwhaS5pbXBvcnRLZXl8fCFpLmRlcml2ZUJpdHMpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7aWYodm9pZCAwIT09ZltQXSlyZXR1cm4gZltQXTt2YXIg''@;'; put 'put ''Qj1wKGE9YXx8ci5hbGxvYyg4KSxhLDEwLDEyOCxQKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiExfSk7cmV0dXJuIGZbUF09QixCfShOKS50aGVuKGZ1bmN0aW9uKFApe3JldHVybiBQP3AoZCx2LF8sQSxOKTpsKGQsdixfLEEsSSl9KSxCPUws''@;'; put 'put ''UC50aGVuKGZ1bmN0aW9uKCQpe3UoKShmdW5jdGlvbigpe0IobnVsbCwkKX0pfSxmdW5jdGlvbigkKXt1KCkoZnVuY3Rpb24oKXtCKCQpfSl9KX1lbHNlIHUoKShmdW5jdGlvbigpe3ZhciBQO3RyeXtQPWwoZCx2LF8sQSxJKX1jYXRjaChCKXtyZXR1cm4gTChCKX1MKG51bGwsUCl9KX19KS5j''@;'; put 'put ''YWxsKHRoaXMpfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7Ii4vZGVmYXVsdC1lbmNvZGluZyI6NDYyLCIuL3ByZWNvbmRpdGlvbiI6NDYzLCIuL3N5bmMiOjQ2NCwiLi90by1i''@;'; put 'put ''dWZmZXIiOjQ2NSwic2FmZS1idWZmZXIiOjQ5NH1dLDQ2MjpbZnVuY3Rpb24ocyxFLFMpeyhmdW5jdGlvbihiLGEpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgbztvPWEucHJvY2VzcyYmYS5wcm9jZXNzLmJyb3dzZXI/InV0Zi04IjphLnByb2Nlc3MmJmEucHJvY2Vzcy52ZXJzaW9u''@;'; put 'put ''P3BhcnNlSW50KGIudmVyc2lvbi5zcGxpdCgiLiIpWzBdLnNsaWNlKDEpLDEwKT49Nj8idXRmLTgiOiJiaW5hcnkiOiJ1dGYtOCIsRS5leHBvcnRzPW99KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHMoIl9wcm9jZXNzIiksdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1''@;'; put 'put ''Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHtfcHJvY2Vzczo0Njd9XSw0NjM6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9TWF0aC5wb3coMiwzMCktMTtFLmV4cG9ydHM9ZnVuY3Rpb24oYSxvKXtpZigibnVtYmVyIiE9dHlwZW9mIGEpdGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiSXRlcmF0aW9ucyBub3QgYSBudW1iZXIiKTtpZihhPDApdGhyb3cgbmV3IFR5cGVFcnJvcigiQmFkIGl0ZXJhdGlvbnMiKTtpZigibnVtYmVyIiE9dHlwZW9mIG8pdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5IGxlbmd0aCBub3QgYSBudW1iZXIiKTtpZihvPDB8fG8+Ynx8''@;'; put 'put ''byE9byl0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQga2V5IGxlbmd0aCIpfX0se31dLDQ2NDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCJjcmVhdGUtaGFzaC9tZDUiKSxhPXMoInJpcGVtZDE2MCIpLG89cygic2hhLmpzIikscj1zKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZl''@;'; put 'put ''cix0PXMoIi4vcHJlY29uZGl0aW9uIiksZT1zKCIuL2RlZmF1bHQtZW5jb2RpbmciKSxsPXMoIi4vdG8tYnVmZmVyIiksbj1yLmFsbG9jKDEyOCksaT17bWQ1OjE2LHNoYTE6MjAsc2hhMjI0OjI4LHNoYTI1NjozMixzaGEzODQ6NDgsc2hhNTEyOjY0LHJtZDE2MDoyMCxyaXBlbWQxNjA6MjB9''@;'; put 'put ''O2Z1bmN0aW9uIGgoZix1LHApe3ZhciBkPWZ1bmN0aW9uKE4pe3JldHVybiJybWQxNjAiPT09Tnx8InJpcGVtZDE2MCI9PT1OP2Z1bmN0aW9uKEIpe3JldHVybihuZXcgYSkudXBkYXRlKEIpLmRpZ2VzdCgpfToibWQ1Ij09PU4/YjpmdW5jdGlvbiBQKEIpe3JldHVybiBvKE4pLnVwZGF0ZShC''@;'; put 'put ''KS5kaWdlc3QoKX19KGYpLHY9InNoYTUxMiI9PT1mfHwic2hhMzg0Ij09PWY/MTI4OjY0O3UubGVuZ3RoPnY/dT1kKHUpOnUubGVuZ3RoPHYmJih1PXIuY29uY2F0KFt1LG5dLHYpKTtmb3IodmFyIF89ci5hbGxvY1Vuc2FmZSh2K2lbZl0pLEE9ci5hbGxvY1Vuc2FmZSh2K2lbZl0pLEk9MDtJ''@;'; put 'put ''PHY7SSsrKV9bSV09NTRedVtJXSxBW0ldPTkyXnVbSV07dmFyIEw9ci5hbGxvY1Vuc2FmZSh2K3ArNCk7Xy5jb3B5KEwsMCwwLHYpLHRoaXMuaXBhZDE9TCx0aGlzLmlwYWQyPV8sdGhpcy5vcGFkPUEsdGhpcy5hbGc9Zix0aGlzLmJsb2Nrc2l6ZT12LHRoaXMuaGFzaD1kLHRoaXMuc2l6ZT1p''@;'; put 'put ''W2ZdfWgucHJvdG90eXBlLnJ1bj1mdW5jdGlvbihmLHUpe3JldHVybiBmLmNvcHkodSx0aGlzLmJsb2Nrc2l6ZSksdGhpcy5oYXNoKHUpLmNvcHkodGhpcy5vcGFkLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2godGhpcy5vcGFkKX0sRS5leHBvcnRzPWZ1bmN0aW9uKGYsdSxwLGQsdil7dChw''@;'; put 'put ''LGQpO3ZhciBfPW5ldyBoKHY9dnx8InNoYTEiLGY9bChmLGUsIlBhc3N3b3JkIiksKHU9bCh1LGUsIlNhbHQiKSkubGVuZ3RoKSxBPXIuYWxsb2NVbnNhZmUoZCksST1yLmFsbG9jVW5zYWZlKHUubGVuZ3RoKzQpO3UuY29weShJLDAsMCx1Lmxlbmd0aCk7Zm9yKHZhciBMPTAsTj1pW3ZdLFA9''@;'; put 'put ''TWF0aC5jZWlsKGQvTiksQj0xO0I8PVA7QisrKXtJLndyaXRlVUludDMyQkUoQix1Lmxlbmd0aCk7Zm9yKHZhciAkPV8ucnVuKEksXy5pcGFkMSksRD0kLHg9MTt4PHA7eCsrKXtEPV8ucnVuKEQsXy5pcGFkMik7Zm9yKHZhciBNPTA7TTxOO00rKykkW01dXj1EW01dfSQuY29weShBLEwpLEwr''@;'; put 'put ''PU59cmV0dXJuIEF9fSx7Ii4vZGVmYXVsdC1lbmNvZGluZyI6NDYyLCIuL3ByZWNvbmRpdGlvbiI6NDYzLCIuL3RvLWJ1ZmZlciI6NDY1LCJjcmVhdGUtaGFzaC9tZDUiOjM4NyxyaXBlbWQxNjA6NDkzLCJzYWZlLWJ1ZmZlciI6NDk0LCJzaGEuanMiOjQ5OH1dLDQ2NTpbZnVuY3Rpb24ocyxF''@;'; put 'put ''LFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcjtFLmV4cG9ydHM9ZnVuY3Rpb24oYSxvLHIpe2lmKGIuaXNCdWZmZXIoYSkpcmV0dXJuIGE7aWYoInN0cmluZyI9PXR5cGVvZiBhKXJldHVybiBiLmZyb20oYSxvKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoYSkp''@;'; put 'put ''cmV0dXJuIGIuZnJvbShhLmJ1ZmZlcik7dGhyb3cgbmV3IFR5cGVFcnJvcihyKyIgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgdHlwZWQgYXJyYXkgb3IgYSBEYXRhVmlldyIpfX0seyJzYWZlLWJ1ZmZlciI6NDk0fV0sNDY2OltmdW5jdGlvbihzLEUsUyl7KGZ1bmN0aW9uKGIpeyhm''@;'; put 'put ''dW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtFLmV4cG9ydHM9dm9pZCAwPT09Ynx8IWIudmVyc2lvbnx8MD09PWIudmVyc2lvbi5pbmRleE9mKCJ2MC4iKXx8MD09PWIudmVyc2lvbi5pbmRleE9mKCJ2MS4iKSYmMCE9PWIudmVyc2lvbi5pbmRleE9mKCJ2MS44LiIpP3tuZXh0VGljazpmdW5jdGlv''@;'; put 'put ''bihhLG8scix0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aHJvdyBuZXcgVHlwZUVycm9yKCciY2FsbGJhY2siIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO3ZhciBlLGwsbj1hcmd1bWVudHMubGVuZ3RoO3N3aXRjaChuKXtjYXNlIDA6Y2FzZSAxOnJldHVybiBiLm5leHRUaWNr''@;'; put 'put ''KGEpO2Nhc2UgMjpyZXR1cm4gYi5uZXh0VGljayhmdW5jdGlvbigpe2EuY2FsbChudWxsLG8pfSk7Y2FzZSAzOnJldHVybiBiLm5leHRUaWNrKGZ1bmN0aW9uKCl7YS5jYWxsKG51bGwsbyxyKX0pO2Nhc2UgNDpyZXR1cm4gYi5uZXh0VGljayhmdW5jdGlvbigpe2EuY2FsbChudWxsLG8scix0''@;'; put 'put ''KX0pO2RlZmF1bHQ6Zm9yKGU9bmV3IEFycmF5KG4tMSksbD0wO2w8ZS5sZW5ndGg7KWVbbCsrXT1hcmd1bWVudHNbbF07cmV0dXJuIGIubmV4dFRpY2soZnVuY3Rpb24oKXthLmFwcGx5KG51bGwsZSl9KX19fTpifSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxzKCJfcHJvY2VzcyIpKX0se19w''@;'; put 'put ''cm9jZXNzOjQ2N31dLDQ2NzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYixhLG89RS5leHBvcnRzPXt9O2Z1bmN0aW9uIHIoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiB0KCl7dGhyb3cgbmV3IEVycm9yKCJj''@;'; put 'put ''bGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBlKHYpe2lmKGI9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KHYsMCk7aWYoKGI9PT1yfHwhYikmJnNldFRpbWVvdXQpcmV0dXJuIGI9c2V0VGltZW91dCxzZXRUaW1lb3V0KHYsMCk7dHJ5e3JldHVybiBi''@;'; put 'put ''KHYsMCl9Y2F0Y2h7dHJ5e3JldHVybiBiLmNhbGwobnVsbCx2LDApfWNhdGNoe3JldHVybiBiLmNhbGwodGhpcyx2LDApfX19IWZ1bmN0aW9uKCl7dHJ5e2I9ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpyfWNhdGNoe2I9cn10cnl7YT0iZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDp0fWNhdGNoe2E9dH19KCk7dmFyIGwsbj1bXSxpPSExLGg9LTE7ZnVuY3Rpb24gZigpe2kmJmwmJihpPSExLGwubGVuZ3RoP249bC5jb25jYXQobik6aD0tMSxuLmxlbmd0aCYmdSgpKX1mdW5jdGlvbiB1KCl7aWYoIWkpe3ZhciB2PWUoZik7''@;'; put 'put ''aT0hMDtmb3IodmFyIF89bi5sZW5ndGg7Xzspe2ZvcihsPW4sbj1bXTsrK2g8XzspbCYmbFtoXS5ydW4oKTtoPS0xLF89bi5sZW5ndGh9bD1udWxsLGk9ITEsZnVuY3Rpb24oQSl7aWYoYT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KEEpO2lmKChhPT09dHx8IWEpJiZjbGVh''@;'; put 'put ''clRpbWVvdXQpcmV0dXJuIGE9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChBKTt0cnl7YShBKX1jYXRjaHt0cnl7cmV0dXJuIGEuY2FsbChudWxsLEEpfWNhdGNoe3JldHVybiBhLmNhbGwodGhpcyxBKX19fSh2KX19ZnVuY3Rpb24gcCh2LF8pe3RoaXMuZnVuPXYsdGhpcy5hcnJheT1ffWZ1''@;'; put 'put ''bmN0aW9uIGQoKXt9by5uZXh0VGljaz1mdW5jdGlvbih2KXt2YXIgXz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBBPTE7QTxhcmd1bWVudHMubGVuZ3RoO0ErKylfW0EtMV09YXJndW1lbnRzW0FdO24ucHVzaChuZXcgcCh2LF8p''@;'; put 'put ''KSwxIT09bi5sZW5ndGh8fGl8fGUodSl9LHAucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LG8udGl0bGU9ImJyb3dzZXIiLG8uYnJvd3Nlcj0hMCxvLmVudj17fSxvLmFyZ3Y9W10sby52ZXJzaW9uPSIiLG8udmVyc2lvbnM9e30sby5v''@;'; put 'put ''bj1kLG8uYWRkTGlzdGVuZXI9ZCxvLm9uY2U9ZCxvLm9mZj1kLG8ucmVtb3ZlTGlzdGVuZXI9ZCxvLnJlbW92ZUFsbExpc3RlbmVycz1kLG8uZW1pdD1kLG8ucHJlcGVuZExpc3RlbmVyPWQsby5wcmVwZW5kT25jZUxpc3RlbmVyPWQsby5saXN0ZW5lcnM9ZnVuY3Rpb24odil7cmV0dXJuW119''@;'; put 'put ''LG8uYmluZGluZz1mdW5jdGlvbih2KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LG8uY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxvLmNoZGlyPWZ1bmN0aW9uKHYpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3Vw''@;'; put 'put ''cG9ydGVkIil9LG8udW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LHt9XSw0Njg6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7Uy5wdWJsaWNFbmNyeXB0PXMoIi4vcHVibGljRW5jcnlwdCIpLFMucHJpdmF0ZURlY3J5cHQ9cygiLi9wcml2YXRlRGVjcnlwdCIpLFMucHJpdmF0ZUVu''@;'; put 'put ''Y3J5cHQ9ZnVuY3Rpb24oYixhKXtyZXR1cm4gUy5wdWJsaWNFbmNyeXB0KGIsYSwhMCl9LFMucHVibGljRGVjcnlwdD1mdW5jdGlvbihiLGEpe3JldHVybiBTLnByaXZhdGVEZWNyeXB0KGIsYSwhMCl9fSx7Ii4vcHJpdmF0ZURlY3J5cHQiOjQ3MSwiLi9wdWJsaWNFbmNyeXB0Ijo0NzJ9XSw0''@;'; put 'put ''Njk6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiY3JlYXRlLWhhc2giKSxhPXMoInNhZmUtYnVmZmVyIikuQnVmZmVyO2Z1bmN0aW9uIG8ocil7dmFyIHQ9YS5hbGxvY1Vuc2FmZSg0KTtyZXR1cm4gdC53cml0ZVVJbnQzMkJFKHIsMCksdH1FLmV4cG9ydHM9ZnVuY3Rp''@;'; put 'put ''b24ocix0KXtmb3IodmFyIGUsbD1hLmFsbG9jKDApLG49MDtsLmxlbmd0aDx0OyllPW8obisrKSxsPWEuY29uY2F0KFtsLGIoInNoYTEiKS51cGRhdGUocikudXBkYXRlKGUpLmRpZ2VzdCgpXSk7cmV0dXJuIGwuc2xpY2UoMCx0KX19LHsiY3JlYXRlLWhhc2giOjM4Niwic2FmZS1idWZmZXIi''@;'; put 'put ''OjQ5NH1dLDQ3MDpbZnVuY3Rpb24ocyxFLFMpe2FyZ3VtZW50c1s0XVsxODRdWzBdLmFwcGx5KFMsYXJndW1lbnRzKX0se2J1ZmZlcjoxODgsZHVwOjE4NH1dLDQ3MTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCJwYXJzZS1hc24xIiksYT1zKCIuL21nZiIpLG89cygi''@;'; put 'put ''Li94b3IiKSxyPXMoImJuLmpzIiksdD1zKCJicm93c2VyaWZ5LXJzYSIpLGU9cygiY3JlYXRlLWhhc2giKSxsPXMoIi4vd2l0aFB1YmxpYyIpLG49cygic2FmZS1idWZmZXIiKS5CdWZmZXI7RS5leHBvcnRzPWZ1bmN0aW9uKGksaCxmKXt2YXIgdTt1PWkucGFkZGluZz9pLnBhZGRpbmc6Zj8x''@;'; put 'put ''OjQ7dmFyIHAsZD1iKGkpLHY9ZC5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZihoLmxlbmd0aD52fHxuZXcgcihoKS5jbXAoZC5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtwPWY/bChuZXcgcihoKSxkKTp0KGgsZCk7dmFyIF89bi5hbGxvYyh2LXAubGVu''@;'; put 'put ''Z3RoKTtpZihwPW4uY29uY2F0KFtfLHBdLHYpLDQ9PT11KXJldHVybiBmdW5jdGlvbihBLEkpe3ZhciBMPUEubW9kdWx1cy5ieXRlTGVuZ3RoKCksTj1lKCJzaGExIikudXBkYXRlKG4uYWxsb2MoMCkpLmRpZ2VzdCgpLFA9Ti5sZW5ndGg7aWYoMCE9PUlbMF0pdGhyb3cgbmV3IEVycm9yKCJk''@;'; put 'put ''ZWNyeXB0aW9uIGVycm9yIik7dmFyIEI9SS5zbGljZSgxLFArMSksJD1JLnNsaWNlKFArMSksRD1vKEIsYSgkLFApKSx4PW8oJCxhKEQsTC1QLTEpKTtpZihmdW5jdGlvbihqLGMpe2o9bi5mcm9tKGopLGM9bi5mcm9tKGMpO3ZhciBtPTAsZz1qLmxlbmd0aDtqLmxlbmd0aCE9PWMubGVuZ3Ro''@;'; put 'put ''JiYobSsrLGc9TWF0aC5taW4oai5sZW5ndGgsYy5sZW5ndGgpKTtmb3IodmFyIHk9LTE7Kyt5PGc7KW0rPWpbeV1eY1t5XTtyZXR1cm4gbX0oTix4LnNsaWNlKDAsUCkpKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO2Zvcih2YXIgTT1QOzA9PT14W01dOylNKys7aWYoMSE9''@;'; put 'put ''PXhbTSsrXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1cm4geC5zbGljZShNKX0oZCxwKTtpZigxPT09dSlyZXR1cm4gZnVuY3Rpb24oQSxJLEwpe2Zvcih2YXIgTj1JLnNsaWNlKDAsMiksUD0yLEI9MDswIT09SVtQKytdOylpZihQPj1JLmxlbmd0aCl7QisrO2Jy''@;'; put 'put ''ZWFrfXZhciAkPUkuc2xpY2UoMixQLTEpO2lmKCgiMDAwMiIhPT1OLnRvU3RyaW5nKCJoZXgiKSYmIUx8fCIwMDAxIiE9PU4udG9TdHJpbmcoImhleCIpJiZMKSYmQisrLCQubGVuZ3RoPDgmJkIrKyxCKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3JldHVybiBJLnNsaWNl''@;'; put 'put ''KFApfSgwLHAsZik7aWYoMz09PXUpcmV0dXJuIHA7dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHBhZGRpbmciKX19LHsiLi9tZ2YiOjQ2OSwiLi93aXRoUHVibGljIjo0NzMsIi4veG9yIjo0NzQsImJuLmpzIjo0NzAsImJyb3dzZXJpZnktcnNhIjoyMDksImNyZWF0ZS1oYXNoIjozODYsInBh''@;'; put 'put ''cnNlLWFzbjEiOjQ1OSwic2FmZS1idWZmZXIiOjQ5NH1dLDQ3MjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCJwYXJzZS1hc24xIiksYT1zKCJyYW5kb21ieXRlcyIpLG89cygiY3JlYXRlLWhhc2giKSxyPXMoIi4vbWdmIiksdD1zKCIuL3hvciIpLGU9cygiYm4uanMi''@;'; put 'put ''KSxsPXMoIi4vd2l0aFB1YmxpYyIpLG49cygiYnJvd3NlcmlmeS1yc2EiKSxpPXMoInNhZmUtYnVmZmVyIikuQnVmZmVyO0UuZXhwb3J0cz1mdW5jdGlvbihoLGYsdSl7dmFyIHA7cD1oLnBhZGRpbmc/aC5wYWRkaW5nOnU/MTo0O3ZhciBkLHY9YihoKTtpZig0PT09cClkPWZ1bmN0aW9uKF8s''@;'; put 'put ''QSl7dmFyIEk9Xy5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxMPUEubGVuZ3RoLE49bygic2hhMSIpLnVwZGF0ZShpLmFsbG9jKDApKS5kaWdlc3QoKSxQPU4ubGVuZ3RoLEI9MipQO2lmKEw+SS1CLTIpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7dmFyICQ9aS5hbGxvYyhJLUwt''@;'; put 'put ''Qi0yKSxEPUktUC0xLHg9YShQKSxNPXQoaS5jb25jYXQoW04sJCxpLmFsbG9jKDEsMSksQV0sRCkscih4LEQpKSxqPXQoeCxyKE0sUCkpO3JldHVybiBuZXcgZShpLmNvbmNhdChbaS5hbGxvYygxKSxqLE1dLEkpKX0odixmKTtlbHNlIGlmKDE9PT1wKWQ9ZnVuY3Rpb24oXyxBLEkpe3ZhciBM''@;'; put 'put ''LE49QS5sZW5ndGgsUD1fLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKE4+UC0xMSl0aHJvdyBuZXcgRXJyb3IoIm1lc3NhZ2UgdG9vIGxvbmciKTtyZXR1cm4gTD1JP2kuYWxsb2MoUC1OLTMsMjU1KTpmdW5jdGlvbihCKXtmb3IodmFyICQsRD1pLmFsbG9jVW5zYWZlKEIpLHg9MCxNPWEoMipC''@;'; put 'put ''KSxqPTA7eDxCOylqPT09TS5sZW5ndGgmJihNPWEoMipCKSxqPTApLCgkPU1baisrXSkmJihEW3grK109JCk7cmV0dXJuIER9KFAtTi0zKSxuZXcgZShpLmNvbmNhdChbaS5mcm9tKFswLEk/MToyXSksTCxpLmFsbG9jKDEpLEFdLFApKX0odixmLHUpO2Vsc2V7aWYoMyE9PXApdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJ1bmtub3duIHBhZGRpbmciKTtpZigoZD1uZXcgZShmKSkuY21wKHYubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKCJkYXRhIHRvbyBsb25nIGZvciBtb2R1bHVzIil9cmV0dXJuIHU/bihkLHYpOmwoZCx2KX19LHsiLi9tZ2YiOjQ2OSwiLi93aXRoUHVibGljIjo0NzMsIi4v''@;'; put 'put ''eG9yIjo0NzQsImJuLmpzIjo0NzAsImJyb3dzZXJpZnktcnNhIjoyMDksImNyZWF0ZS1oYXNoIjozODYsInBhcnNlLWFzbjEiOjQ1OSxyYW5kb21ieXRlczo0NzUsInNhZmUtYnVmZmVyIjo0OTR9XSw0NzM6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiYm4uanMiKSxh''@;'; put 'put ''PXMoInNhZmUtYnVmZmVyIikuQnVmZmVyO0UuZXhwb3J0cz1mdW5jdGlvbihvLHIpe3JldHVybiBhLmZyb20oby50b1JlZChiLm1vbnQoci5tb2R1bHVzKSkucmVkUG93KG5ldyBiKHIucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCkudG9BcnJheSgpKX19LHsiYm4uanMiOjQ3MCwic2FmZS1i''@;'; put 'put ''dWZmZXIiOjQ5NH1dLDQ3NDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtFLmV4cG9ydHM9ZnVuY3Rpb24oYixhKXtmb3IodmFyIG89Yi5sZW5ndGgscj0tMTsrK3I8bzspYltyXV49YVtyXTtyZXR1cm4gYn19LHt9XSw0NzU6W2Z1bmN0aW9uKHMsRSxTKXsoZnVuY3Rpb24oYixhKXso''@;'; put 'put ''ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIG89cygic2FmZS1idWZmZXIiKS5CdWZmZXIscj1hLmNyeXB0b3x8YS5tc0NyeXB0bztFLmV4cG9ydHM9ciYmci5nZXRSYW5kb21WYWx1ZXM/ZnVuY3Rpb24odCxlKXtpZih0PjQyOTQ5NjcyOTUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInJlcXVl''@;'; put 'put ''c3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMiKTt2YXIgbD1vLmFsbG9jVW5zYWZlKHQpO2lmKHQ+MClpZih0PjY1NTM2KWZvcih2YXIgbj0wO248dDtuKz02NTUzNilyLmdldFJhbmRvbVZhbHVlcyhsLnNsaWNlKG4sbis2NTUzNikpO2Vsc2Ugci5nZXRSYW5kb21WYWx1ZXMobCk7cmV0dXJu''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIGU/Yi5uZXh0VGljayhmdW5jdGlvbigpe2UobnVsbCxsKX0pOmx9OmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwg''@;'; put 'put ''RmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMscygiX3Byb2Nlc3MiKSx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se19wcm9jZXNzOjQ2Nywi''@;'; put 'put ''c2FmZS1idWZmZXIiOjQ5NH1dLDQ3NjpbZnVuY3Rpb24ocyxFLFMpeyhmdW5jdGlvbihiLGEpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKCl7dGhyb3cgbmV3IEVycm9yKCJzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBi''@;'; put 'put ''cm93c2VyXG51c2UgY2hyb21lLCBGaXJlRm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9dmFyIHI9cygic2FmZS1idWZmZXIiKSx0PXMoInJhbmRvbWJ5dGVzIiksZT1yLkJ1ZmZlcixsPXIua01heExlbmd0aCxuPWEuY3J5cHRvfHxhLm1zQ3J5cHRvLGk9TWF0aC5wb3coMiwzMiktMTtm''@;'; put 'put ''dW5jdGlvbiBoKHAsZCl7aWYoIm51bWJlciIhPXR5cGVvZiBwfHxwIT1wKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgbnVtYmVyIik7aWYocD5pfHxwPDApdGhyb3cgbmV3IFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSB1aW50MzIiKTtpZihwPmx8fHA+ZCl0aHJv''@;'; put 'put ''dyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIGYocCxkLHYpe2lmKCJudW1iZXIiIT10eXBlb2YgcHx8cCE9cCl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSBudW1iZXIiKTtpZihwPml8fHA8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJz''@;'; put 'put ''aXplIG11c3QgYmUgYSB1aW50MzIiKTtpZihwK2Q+dnx8cD5sKXRocm93IG5ldyBSYW5nZUVycm9yKCJidWZmZXIgdG9vIHNtYWxsIil9ZnVuY3Rpb24gdShwLGQsdixfKXtpZihiLmJyb3dzZXIpe3ZhciBJPW5ldyBVaW50OEFycmF5KHAuYnVmZmVyLGQsdik7cmV0dXJuIG4uZ2V0UmFuZG9t''@;'; put 'put ''VmFsdWVzKEkpLF8/dm9pZCBiLm5leHRUaWNrKGZ1bmN0aW9uKCl7XyhudWxsLHApfSk6cH1pZighXylyZXR1cm4gdCh2KS5jb3B5KHAsZCkscDt0KHYsZnVuY3Rpb24oTCxOKXtpZihMKXJldHVybiBfKEwpO04uY29weShwLGQpLF8obnVsbCxwKX0pfW4mJm4uZ2V0UmFuZG9tVmFsdWVzfHwh''@;'; put 'put ''Yi5icm93c2VyPyhTLnJhbmRvbUZpbGw9ZnVuY3Rpb24ocCxkLHYsXyl7aWYoIShlLmlzQnVmZmVyKHApfHxwIGluc3RhbmNlb2YgYS5VaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZigiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgZClfPWQsZD0wLHY9cC5sZW5ndGg7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgdilfPXYsdj1wLmxlbmd0aC1kO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIF8pdGhyb3cgbmV3IFR5cGVFcnJvcignImNiIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24n''@;'; put 'put ''KTtyZXR1cm4gaChkLHAubGVuZ3RoKSxmKHYsZCxwLmxlbmd0aCksdShwLGQsdixfKX0sUy5yYW5kb21GaWxsU3luYz1mdW5jdGlvbihwLGQsdil7aWYodm9pZCAwPT09ZCYmKGQ9MCksIShlLmlzQnVmZmVyKHApfHxwIGluc3RhbmNlb2YgYS5VaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCciYnVmIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtyZXR1cm4gaChkLHAubGVuZ3RoKSx2b2lkIDA9PT12JiYodj1wLmxlbmd0aC1kKSxmKHYsZCxwLmxlbmd0aCksdShwLGQsdil9KTooUy5yYW5kb21GaWxsPW8sUy5yYW5kb21GaWxsU3luYz1vKX0p''@;'; put 'put ''LmNhbGwodGhpcyl9KS5jYWxsKHRoaXMscygiX3Byb2Nlc3MiKSx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se19wcm9jZXNzOjQ2NyxyYW5kb21ieXRlczo0NzUsInNhZmUtYnVmZmVyIjo0OTR9XSw0''@;'; put 'put ''Nzc6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9e307ZnVuY3Rpb24gYShyLHQsZSl7ZXx8KGU9RXJyb3IpO3ZhciBsPWZ1bmN0aW9uKG4pe3ZhciBpLGg7ZnVuY3Rpb24gZih1LHAsZCl7cmV0dXJuIG4uY2FsbCh0aGlzLCJzdHJpbmciPT10eXBlb2YgdD90OnQodSxwLGQp''@;'; put 'put ''KXx8dGhpc31yZXR1cm4gaD1uLChpPWYpLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGgucHJvdG90eXBlKSxpLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1pLGkuX19wcm90b19fPWgsZn0oZSk7bC5wcm90b3R5cGUubmFtZT1lLm5hbWUsbC5wcm90b3R5cGUuY29kZT1yLGJbcl09bH1mdW5jdGlv''@;'; put 'put ''biBvKHIsdCl7aWYoQXJyYXkuaXNBcnJheShyKSl7dmFyIGU9ci5sZW5ndGg7cmV0dXJuIHI9ci5tYXAoZnVuY3Rpb24obCl7cmV0dXJuIFN0cmluZyhsKX0pLGU+Mj8ib25lIG9mICIuY29uY2F0KHQsIiAiKS5jb25jYXQoci5zbGljZSgwLGUtMSkuam9pbigiLCAiKSwiLCBvciAiKStyW2Ut''@;'; put 'put ''MV06Mj09PWU/Im9uZSBvZiAiLmNvbmNhdCh0LCIgIikuY29uY2F0KHJbMF0sIiBvciAiKS5jb25jYXQoclsxXSk6Im9mICIuY29uY2F0KHQsIiAiKS5jb25jYXQoclswXSl9cmV0dXJuIm9mICIuY29uY2F0KHQsIiAiKS5jb25jYXQoU3RyaW5nKHIpKX1hKCJFUlJfSU5WQUxJRF9PUFRfVkFM''@;'; put 'put ''VUUiLGZ1bmN0aW9uKHIsdCl7cmV0dXJuJ1RoZSB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAiJytyKyciJ30sVHlwZUVycm9yKSxhKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24ocix0LGUpe3ZhciBsLGgsdSxkO2lmKCJzdHJpbmciPT10eXBlb2YgdCYmIm5v''@;'; put 'put ''dCAiPT09dC5zdWJzdHIoMCwibm90ICIubGVuZ3RoKT8obD0ibXVzdCBub3QgYmUiLHQ9dC5yZXBsYWNlKC9ebm90IC8sIiIpKTpsPSJtdXN0IGJlIix1PXIsKHZvaWQgMD09PWR8fGQ+dS5sZW5ndGgpJiYoZD11Lmxlbmd0aCksIiBhcmd1bWVudCI9PT11LnN1YnN0cmluZyhkLSIgYXJndW1l''@;'; put 'put ''bnQiLmxlbmd0aCxkKSloPSJUaGUgIi5jb25jYXQociwiICIpLmNvbmNhdChsLCIgIikuY29uY2F0KG8odCwidHlwZSIpKTtlbHNle3ZhciBmPWZ1bmN0aW9uKHUscCxkKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIGQmJihkPTApLCEoZCsxPnUubGVuZ3RoKSYmLTEhPT11LmluZGV4T2YoIi4i''@;'; put 'put ''LGQpfShyKT8icHJvcGVydHkiOiJhcmd1bWVudCI7aD0nVGhlICInLmNvbmNhdChyLCciICcpLmNvbmNhdChmLCIgIikuY29uY2F0KGwsIiAiKS5jb25jYXQobyh0LCJ0eXBlIikpfXJldHVybiBoKyIuIFJlY2VpdmVkIHR5cGUgIi5jb25jYXQodHlwZW9mIGUpfSxUeXBlRXJyb3IpLGEoIkVS''@;'; put 'put ''Ul9TVFJFQU1fUFVTSF9BRlRFUl9FT0YiLCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpLGEoIkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEIixmdW5jdGlvbihyKXtyZXR1cm4iVGhlICIrcisiIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQifSksYSgiRVJSX1NUUkVBTV9QUkVNQVRVUkVf''@;'; put 'put ''Q0xPU0UiLCJQcmVtYXR1cmUgY2xvc2UiKSxhKCJFUlJfU1RSRUFNX0RFU1RST1lFRCIsZnVuY3Rpb24ocil7cmV0dXJuIkNhbm5vdCBjYWxsICIrcisiIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQifSksYSgiRVJSX01VTFRJUExFX0NBTExCQUNLIiwiQ2FsbGJhY2sgY2FsbGVkIG11''@;'; put 'put ''bHRpcGxlIHRpbWVzIiksYSgiRVJSX1NUUkVBTV9DQU5OT1RfUElQRSIsIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSxhKCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCIsIndyaXRlIGFmdGVyIGVuZCIpLGEoIkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMiLCJNYXkgbm90IHdyaXRlIG51''@;'; put 'put ''bGwgdmFsdWVzIHRvIHN0cmVhbSIsVHlwZUVycm9yKSxhKCJFUlJfVU5LTk9XTl9FTkNPRElORyIsZnVuY3Rpb24ocil7cmV0dXJuIlVua25vd24gZW5jb2Rpbmc6ICIrcn0sVHlwZUVycm9yKSxhKCJFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UIiwic3RyZWFtLnVuc2hpZnQo''@;'; put 'put ''KSBhZnRlciBlbmQgZXZlbnQiKSxFLmV4cG9ydHMuY29kZXM9Yn0se31dLDQ3ODpbZnVuY3Rpb24ocyxFLFMpeyhmdW5jdGlvbihiKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGE9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGYpe3ZhciB1PVtdO2Zvcih2YXIgcCBpbiBmKXUucHVzaChw''@;'; put 'put ''KTtyZXR1cm4gdX07RS5leHBvcnRzPW47dmFyIG89cygiLi9fc3RyZWFtX3JlYWRhYmxlIikscj1zKCIuL19zdHJlYW1fd3JpdGFibGUiKTtzKCJpbmhlcml0cyIpKG4sbyk7Zm9yKHZhciB0PWEoci5wcm90b3R5cGUpLGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIGw9dFtlXTtuLnByb3RvdHlw''@;'; put 'put ''ZVtsXXx8KG4ucHJvdG90eXBlW2xdPXIucHJvdG90eXBlW2xdKX1mdW5jdGlvbiBuKGYpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXJldHVybiBuZXcgbihmKTtvLmNhbGwodGhpcyxmKSxyLmNhbGwodGhpcyxmKSx0aGlzLmFsbG93SGFsZk9wZW49ITAsZiYmKCExPT09Zi5yZWFkYWJsZSYm''@;'; put 'put ''KHRoaXMucmVhZGFibGU9ITEpLCExPT09Zi53cml0YWJsZSYmKHRoaXMud3JpdGFibGU9ITEpLCExPT09Zi5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExLHRoaXMub25jZSgiZW5kIixpKSkpfWZ1bmN0aW9uIGkoKXt0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHxiLm5l''@;'; put 'put ''eHRUaWNrKGgsdGhpcyl9ZnVuY3Rpb24gaChmKXtmLmVuZCgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJr''@;'; put 'put ''fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShuLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKGYpe3ZvaWQgMCE9''@;'; put 'put ''PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1mLHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPWYpfX0pfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxzKCJfcHJvY2VzcyIpKX0seyIu''@;'; put 'put ''L19zdHJlYW1fcmVhZGFibGUiOjQ4MCwiLi9fc3RyZWFtX3dyaXRhYmxlIjo0ODIsX3Byb2Nlc3M6NDY3LGluaGVyaXRzOjQ0MH1dLDQ3OTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtFLmV4cG9ydHM9YTt2YXIgYj1zKCIuL19zdHJlYW1fdHJhbnNmb3JtIik7ZnVuY3Rpb24gYShv''@;'; put 'put ''KXtpZighKHRoaXMgaW5zdGFuY2VvZiBhKSlyZXR1cm4gbmV3IGEobyk7Yi5jYWxsKHRoaXMsbyl9cygiaW5oZXJpdHMiKShhLGIpLGEucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24obyxyLHQpe3QobnVsbCxvKX19LHsiLi9fc3RyZWFtX3RyYW5zZm9ybSI6NDgxLGluaGVyaXRzOjQ0''@;'; put 'put ''MH1dLDQ4MDpbZnVuY3Rpb24ocyxFLFMpeyhmdW5jdGlvbihiLGEpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgbztFLmV4cG9ydHM9RCxELlJlYWRhYmxlU3RhdGU9JCxzKCJldmVudHMiKTt2YXIgbixyPWZ1bmN0aW9uKFQsQyl7cmV0dXJuIFQubGlzdGVuZXJzKEMpLmxlbmd0aH0s''@;'; put 'put ''dD1zKCIuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtIiksZT1zKCJidWZmZXIiKS5CdWZmZXIsbD0odm9pZCAwIT09YT9hOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LGk9cygidXRpbCIpO249aSYmaS5k''@;'; put 'put ''ZWJ1Z2xvZz9pLmRlYnVnbG9nKCJzdHJlYW0iKTpmdW5jdGlvbigpe307dmFyIGgsZix1LHA9cygiLi9pbnRlcm5hbC9zdHJlYW1zL2J1ZmZlcl9saXN0IiksZD1zKCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSIpLHY9cygiLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlIikuZ2V0SGlnaFdh''@;'; put 'put ''dGVyTWFyayxfPXMoIi4uL2Vycm9ycyIpLmNvZGVzLEE9Xy5FUlJfSU5WQUxJRF9BUkdfVFlQRSxJPV8uRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRixMPV8uRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsTj1fLkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQ7cygiaW5oZXJp''@;'; put 'put ''dHMiKShELHQpO3ZhciBQPWQuZXJyb3JPckRlc3Ryb3ksQj1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtmdW5jdGlvbiAkKFQsQyxGKXtvPW98fHMoIi4vX3N0cmVhbV9kdXBsZXgiKSwiYm9vbGVhbiIhPXR5cGVvZiBGJiYoRj1DIGluc3RhbmNlb2Ygbyks''@;'; put 'put ''dGhpcy5vYmplY3RNb2RlPSEhKFQ9VHx8e30pLm9iamVjdE1vZGUsRiYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhVC5yZWFkYWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz12KHRoaXMsVCwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIixGKSx0aGlzLmJ1ZmZl''@;'; put 'put ''cj1uZXcgcCx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1p''@;'; put 'put ''dHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5wYXVzZWQ9ITAsdGhpcy5lbWl0Q2xvc2U9ITEhPT1ULmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhVC5hdXRvRGVzdHJveSx0aGlzLmRlc3Ryb3llZD0hMSx0''@;'; put 'put ''aGlzLmRlZmF1bHRFbmNvZGluZz1ULmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLFQuZW5jb2RpbmcmJihofHwoaD1zKCJzdHJpbmdfZGVjb2Rlci8iKS5TdHJp''@;'; put 'put ''bmdEZWNvZGVyKSx0aGlzLmRlY29kZXI9bmV3IGgoVC5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1ULmVuY29kaW5nKX1mdW5jdGlvbiBEKFQpe2lmKG89b3x8cygiLi9fc3RyZWFtX2R1cGxleCIpLCEodGhpcyBpbnN0YW5jZW9mIEQpKXJldHVybiBuZXcgRChUKTt0aGlzLl9yZWFkYWJsZVN0''@;'; put 'put ''YXRlPW5ldyAkKFQsdGhpcyx0aGlzIGluc3RhbmNlb2YgbyksdGhpcy5yZWFkYWJsZT0hMCxUJiYoImZ1bmN0aW9uIj09dHlwZW9mIFQucmVhZCYmKHRoaXMuX3JlYWQ9VC5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgVC5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1ULmRlc3Ryb3kpKSx0LmNh''@;'; put 'put ''bGwodGhpcyl9ZnVuY3Rpb24geChULEMsRixxLFkpe24oInJlYWRhYmxlQWRkQ2h1bmsiLEMpO3ZhciBYLHJ0LHR0LFcsUSxLPVQuX3JlYWRhYmxlU3RhdGU7aWYobnVsbD09PUMpSy5yZWFkaW5nPSExLGZ1bmN0aW9uKHJ0LHR0KXtpZihuKCJvbkVvZkNodW5rIiksIXR0LmVuZGVkKXtpZih0''@;'; put 'put ''dC5kZWNvZGVyKXt2YXIgVz10dC5kZWNvZGVyLmVuZCgpO1cmJlcubGVuZ3RoJiYodHQuYnVmZmVyLnB1c2goVyksdHQubGVuZ3RoKz10dC5vYmplY3RNb2RlPzE6Vy5sZW5ndGgpfXR0LmVuZGVkPSEwLHR0LnN5bmM/YyhydCk6KHR0Lm5lZWRSZWFkYWJsZT0hMSx0dC5lbWl0dGVkUmVhZGFi''@;'; put 'put ''bGV8fCh0dC5lbWl0dGVkUmVhZGFibGU9ITAsbShydCkpKX19KFQsSyk7ZWxzZSBpZihZfHwocnQ9SyxlLmlzQnVmZmVyKFE9dHQ9Qyl8fFEgaW5zdGFuY2VvZiBsfHwic3RyaW5nIj09dHlwZW9mIHR0fHx2b2lkIDA9PT10dHx8cnQub2JqZWN0TW9kZXx8KFc9bmV3IEEoImNodW5rIixbInN0''@;'; put 'put ''cmluZyIsIkJ1ZmZlciIsIlVpbnQ4QXJyYXkiXSx0dCkpLFg9VyksWClQKFQsWCk7ZWxzZSBpZihLLm9iamVjdE1vZGV8fEMmJkMubGVuZ3RoPjApaWYoInN0cmluZyI9PXR5cGVvZiBDfHxLLm9iamVjdE1vZGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihDKT09PWUucHJvdG90eXBlfHwoQz1m''@;'; put 'put ''dW5jdGlvbihydCl7cmV0dXJuIGUuZnJvbShydCl9KEMpKSxxKUsuZW5kRW1pdHRlZD9QKFQsbmV3IE4pOk0oVCxLLEMsITApO2Vsc2UgaWYoSy5lbmRlZClQKFQsbmV3IEkpO2Vsc2V7aWYoSy5kZXN0cm95ZWQpcmV0dXJuITE7Sy5yZWFkaW5nPSExLEsuZGVjb2RlciYmIUY/KEM9Sy5kZWNv''@;'; put 'put ''ZGVyLndyaXRlKEMpLEsub2JqZWN0TW9kZXx8MCE9PUMubGVuZ3RoP00oVCxLLEMsITEpOmcoVCxLKSk6TShULEssQywhMSl9ZWxzZSBxfHwoSy5yZWFkaW5nPSExLGcoVCxLKSk7cmV0dXJuIUsuZW5kZWQmJihLLmxlbmd0aDxLLmhpZ2hXYXRlck1hcmt8fDA9PT1LLmxlbmd0aCl9ZnVuY3Rp''@;'; put 'put ''b24gTShULEMsRixxKXtDLmZsb3dpbmcmJjA9PT1DLmxlbmd0aCYmIUMuc3luYz8oQy5hd2FpdERyYWluPTAsVC5lbWl0KCJkYXRhIixGKSk6KEMubGVuZ3RoKz1DLm9iamVjdE1vZGU/MTpGLmxlbmd0aCxxP0MuYnVmZmVyLnVuc2hpZnQoRik6Qy5idWZmZXIucHVzaChGKSxDLm5lZWRSZWFk''@;'; put 'put ''YWJsZSYmYyhUKSksZyhULEMpfWZ1bmN0aW9uIGooVCxDKXtyZXR1cm4gVDw9MHx8MD09PUMubGVuZ3RoJiZDLmVuZGVkPzA6Qy5vYmplY3RNb2RlPzE6VCE9VD9DLmZsb3dpbmcmJkMubGVuZ3RoP0MuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg6Qy5sZW5ndGg6KFQ+Qy5oaWdoV2F0ZXJNYXJr''@;'; put 'put ''JiYoQy5oaWdoV2F0ZXJNYXJrPSgoRj1UKT49MTA3Mzc0MTgyND9GPTEwNzM3NDE4MjQ6KEYtLSxGfD1GPj4+MSxGfD1GPj4+MixGfD1GPj4+NCxGfD1GPj4+OCxGfD1GPj4+MTYsRisrKSxGKSksVDw9Qy5sZW5ndGg/VDpDLmVuZGVkP0MubGVuZ3RoOihDLm5lZWRSZWFkYWJsZT0hMCwwKSk7''@;'; put 'put ''dmFyIEZ9ZnVuY3Rpb24gYyhUKXt2YXIgQz1ULl9yZWFkYWJsZVN0YXRlO24oImVtaXRSZWFkYWJsZSIsQy5uZWVkUmVhZGFibGUsQy5lbWl0dGVkUmVhZGFibGUpLEMubmVlZFJlYWRhYmxlPSExLEMuZW1pdHRlZFJlYWRhYmxlfHwobigiZW1pdFJlYWRhYmxlIixDLmZsb3dpbmcpLEMuZW1p''@;'; put 'put ''dHRlZFJlYWRhYmxlPSEwLGIubmV4dFRpY2sobSxUKSl9ZnVuY3Rpb24gbShUKXt2YXIgQz1ULl9yZWFkYWJsZVN0YXRlO24oImVtaXRSZWFkYWJsZV8iLEMuZGVzdHJveWVkLEMubGVuZ3RoLEMuZW5kZWQpLEMuZGVzdHJveWVkfHwhQy5sZW5ndGgmJiFDLmVuZGVkfHwoVC5lbWl0KCJyZWFk''@;'; put 'put ''YWJsZSIpLEMuZW1pdHRlZFJlYWRhYmxlPSExKSxDLm5lZWRSZWFkYWJsZT0hQy5mbG93aW5nJiYhQy5lbmRlZCYmQy5sZW5ndGg8PUMuaGlnaFdhdGVyTWFyayx6KFQpfWZ1bmN0aW9uIGcoVCxDKXtDLnJlYWRpbmdNb3JlfHwoQy5yZWFkaW5nTW9yZT0hMCxiLm5leHRUaWNrKHksVCxDKSl9''@;'; put 'put ''ZnVuY3Rpb24geShULEMpe2Zvcig7IUMucmVhZGluZyYmIUMuZW5kZWQmJihDLmxlbmd0aDxDLmhpZ2hXYXRlck1hcmt8fEMuZmxvd2luZyYmMD09PUMubGVuZ3RoKTspe3ZhciBGPUMubGVuZ3RoO2lmKG4oIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksVC5yZWFkKDApLEY9PT1DLmxlbmd0aCli''@;'; put 'put ''cmVha31DLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIHcoVCl7dmFyIEM9VC5fcmVhZGFibGVTdGF0ZTtDLnJlYWRhYmxlTGlzdGVuaW5nPVQubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLEMucmVzdW1lU2NoZWR1bGVkJiYhQy5wYXVzZWQ/Qy5mbG93aW5nPSEwOlQubGlzdGVuZXJDb3Vu''@;'; put 'put ''dCgiZGF0YSIpPjAmJlQucmVzdW1lKCl9ZnVuY3Rpb24gayhUKXtuKCJyZWFkYWJsZSBuZXh0dGljayByZWFkIDAiKSxULnJlYWQoMCl9ZnVuY3Rpb24gTyhULEMpe24oInJlc3VtZSIsQy5yZWFkaW5nKSxDLnJlYWRpbmd8fFQucmVhZCgwKSxDLnJlc3VtZVNjaGVkdWxlZD0hMSxULmVtaXQo''@;'; put 'put ''InJlc3VtZSIpLHooVCksQy5mbG93aW5nJiYhQy5yZWFkaW5nJiZULnJlYWQoMCl9ZnVuY3Rpb24geihUKXt2YXIgQz1ULl9yZWFkYWJsZVN0YXRlO2ZvcihuKCJmbG93IixDLmZsb3dpbmcpO0MuZmxvd2luZyYmbnVsbCE9PVQucmVhZCgpOyk7fWZ1bmN0aW9uIFUoVCxDKXtyZXR1cm4gMD09''@;'; put 'put ''PUMubGVuZ3RoP251bGw6KEMub2JqZWN0TW9kZT9GPUMuYnVmZmVyLnNoaWZ0KCk6IVR8fFQ+PUMubGVuZ3RoPyhGPUMuZGVjb2Rlcj9DLmJ1ZmZlci5qb2luKCIiKToxPT09Qy5idWZmZXIubGVuZ3RoP0MuYnVmZmVyLmZpcnN0KCk6Qy5idWZmZXIuY29uY2F0KEMubGVuZ3RoKSxDLmJ1ZmZl''@;'; put 'put ''ci5jbGVhcigpKTpGPUMuYnVmZmVyLmNvbnN1bWUoVCxDLmRlY29kZXIpLEYpO3ZhciBGfWZ1bmN0aW9uIFYoVCl7dmFyIEM9VC5fcmVhZGFibGVTdGF0ZTtuKCJlbmRSZWFkYWJsZSIsQy5lbmRFbWl0dGVkKSxDLmVuZEVtaXR0ZWR8fChDLmVuZGVkPSEwLGIubmV4dFRpY2soUixDLFQpKX1m''@;'; put 'put ''dW5jdGlvbiBSKFQsQyl7aWYobigiZW5kUmVhZGFibGVOVCIsVC5lbmRFbWl0dGVkLFQubGVuZ3RoKSwhVC5lbmRFbWl0dGVkJiYwPT09VC5sZW5ndGgmJihULmVuZEVtaXR0ZWQ9ITAsQy5yZWFkYWJsZT0hMSxDLmVtaXQoImVuZCIpLFQuYXV0b0Rlc3Ryb3kpKXt2YXIgRj1DLl93cml0YWJs''@;'; put 'put ''ZVN0YXRlOyghRnx8Ri5hdXRvRGVzdHJveSYmRi5maW5pc2hlZCkmJkMuZGVzdHJveSgpfX1mdW5jdGlvbiBIKFQsQyl7Zm9yKHZhciBGPTAscT1ULmxlbmd0aDtGPHE7RisrKWlmKFRbRl09PT1DKXJldHVybiBGO3JldHVybi0xfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShELnByb3RvdHlwZSwi''@;'; put 'put ''ZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihUKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0''@;'; put 'put ''ZS5kZXN0cm95ZWQ9VCl9fSksRC5wcm90b3R5cGUuZGVzdHJveT1kLmRlc3Ryb3ksRC5wcm90b3R5cGUuX3VuZGVzdHJveT1kLnVuZGVzdHJveSxELnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihULEMpe0MoVCl9LEQucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oVCxDKXt2YXIgRixxPXRo''@;'; put 'put ''aXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHEub2JqZWN0TW9kZT9GPSEwOiJzdHJpbmciPT10eXBlb2YgVCYmKChDPUN8fHEuZGVmYXVsdEVuY29kaW5nKSE9PXEuZW5jb2RpbmcmJihUPWUuZnJvbShULEMpLEM9IiIpLEY9ITApLHgodGhpcyxULEMsITEsRil9LEQucHJvdG90eXBlLnVuc2hp''@;'; put 'put ''ZnQ9ZnVuY3Rpb24oVCl7cmV0dXJuIHgodGhpcyxULG51bGwsITAsITEpfSxELnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxELnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbihUKXtofHwoaD1zKCJzdHJp''@;'; put 'put ''bmdfZGVjb2Rlci8iKS5TdHJpbmdEZWNvZGVyKTt2YXIgQz1uZXcgaChUKTt0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9Qyx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZztmb3IodmFyIEY9dGhpcy5fcmVhZGFibGVT''@;'; put 'put ''dGF0ZS5idWZmZXIuaGVhZCxxPSIiO251bGwhPT1GOylxKz1DLndyaXRlKEYuZGF0YSksRj1GLm5leHQ7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmNsZWFyKCksIiIhPT1xJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5wdXNoKHEpLHRoaXMuX3JlYWRhYmxlU3RhdGUu''@;'; put 'put ''bGVuZ3RoPXEubGVuZ3RoLHRoaXN9LEQucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oVCl7bigicmVhZCIsVCksVD1wYXJzZUludChULDEwKTt2YXIgQz10aGlzLl9yZWFkYWJsZVN0YXRlLEY9VDtpZigwIT09VCYmKEMuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09VCYmQy5uZWVkUmVhZGFibGUm''@;'; put 'put ''JigoMCE9PUMuaGlnaFdhdGVyTWFyaz9DLmxlbmd0aD49Qy5oaWdoV2F0ZXJNYXJrOkMubGVuZ3RoPjApfHxDLmVuZGVkKSlyZXR1cm4gbigicmVhZDogZW1pdFJlYWRhYmxlIixDLmxlbmd0aCxDLmVuZGVkKSwwPT09Qy5sZW5ndGgmJkMuZW5kZWQ/Vih0aGlzKTpjKHRoaXMpLG51bGw7aWYo''@;'; put 'put ''MD09PShUPWooVCxDKSkmJkMuZW5kZWQpcmV0dXJuIDA9PT1DLmxlbmd0aCYmVih0aGlzKSxudWxsO3ZhciBxLFk9Qy5uZWVkUmVhZGFibGU7cmV0dXJuIG4oIm5lZWQgcmVhZGFibGUiLFkpLCgwPT09Qy5sZW5ndGh8fEMubGVuZ3RoLVQ8Qy5oaWdoV2F0ZXJNYXJrKSYmbigibGVuZ3RoIGxl''@;'; put 'put ''c3MgdGhhbiB3YXRlcm1hcmsiLFk9ITApLEMuZW5kZWR8fEMucmVhZGluZz9uKCJyZWFkaW5nIG9yIGVuZGVkIixZPSExKTpZJiYobigiZG8gcmVhZCIpLEMucmVhZGluZz0hMCxDLnN5bmM9ITAsMD09PUMubGVuZ3RoJiYoQy5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQoQy5oaWdoV2F0''@;'; put 'put ''ZXJNYXJrKSxDLnN5bmM9ITEsQy5yZWFkaW5nfHwoVD1qKEYsQykpKSxudWxsPT09KHE9VD4wP1UoVCxDKTpudWxsKT8oQy5uZWVkUmVhZGFibGU9Qy5sZW5ndGg8PUMuaGlnaFdhdGVyTWFyayxUPTApOihDLmxlbmd0aC09VCxDLmF3YWl0RHJhaW49MCksMD09PUMubGVuZ3RoJiYoQy5lbmRl''@;'; put 'put ''ZHx8KEMubmVlZFJlYWRhYmxlPSEwKSxGIT09VCYmQy5lbmRlZCYmVih0aGlzKSksbnVsbCE9PXEmJnRoaXMuZW1pdCgiZGF0YSIscSkscX0sRC5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oVCl7UCh0aGlzLG5ldyBMKCJfcmVhZCgpIikpfSxELnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKFQs''@;'; put 'put ''Qyl7dmFyIEY9dGhpcyxxPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKHEucGlwZXNDb3VudCl7Y2FzZSAwOnEucGlwZXM9VDticmVhaztjYXNlIDE6cS5waXBlcz1bcS5waXBlcyxUXTticmVhaztkZWZhdWx0OnEucGlwZXMucHVzaChUKX1xLnBpcGVzQ291bnQrPTEsbigicGlwZSBjb3Vu''@;'; put 'put ''dD0lZCBvcHRzPSVqIixxLnBpcGVzQ291bnQsQyk7dmFyIFk9QyYmITE9PT1DLmVuZHx8VD09PWIuc3Rkb3V0fHxUPT09Yi5zdGRlcnI/bnQ6SztmdW5jdGlvbiBLKCl7bigib25lbmQiKSxULmVuZCgpfXEuZW5kRW1pdHRlZD9iLm5leHRUaWNrKFkpOkYub25jZSgiZW5kIixZKSxULm9uKCJ1''@;'; put 'put ''bnBpcGUiLGZ1bmN0aW9uIFgoaXQsb3Qpe24oIm9udW5waXBlIiksaXQ9PT1GJiZvdCYmITE9PT1vdC5oYXNVbnBpcGVkJiYob3QuaGFzVW5waXBlZD0hMCxuKCJjbGVhbnVwIiksVC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLEcpLFQucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsZXQpLFQucmVt''@;'; put 'put ''b3ZlTGlzdGVuZXIoImRyYWluIixydCksVC5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFEpLFQucmVtb3ZlTGlzdGVuZXIoInVucGlwZSIsWCksRi5yZW1vdmVMaXN0ZW5lcigiZW5kIixLKSxGLnJlbW92ZUxpc3RlbmVyKCJlbmQiLG50KSxGLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixXKSx0dD0h''@;'; put 'put ''MCwhcS5hd2FpdERyYWlufHxULl93cml0YWJsZVN0YXRlJiYhVC5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW58fHJ0KCkpfSk7dmFyIHJ0PWZ1bmN0aW9uKGl0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgb3Q9aXQuX3JlYWRhYmxlU3RhdGU7bigicGlwZU9uRHJhaW4iLG90LmF3YWl0RHJhaW4p''@;'; put 'put ''LG90LmF3YWl0RHJhaW4mJm90LmF3YWl0RHJhaW4tLSwwPT09b3QuYXdhaXREcmFpbiYmcihpdCwiZGF0YSIpJiYob3QuZmxvd2luZz0hMCx6KGl0KSl9fShGKTtULm9uKCJkcmFpbiIscnQpO3ZhciB0dD0hMTtmdW5jdGlvbiBXKGl0KXtuKCJvbmRhdGEiKTt2YXIgb3Q9VC53cml0ZShpdCk7''@;'; put 'put ''bigiZGVzdC53cml0ZSIsb3QpLCExPT09b3QmJigoMT09PXEucGlwZXNDb3VudCYmcS5waXBlcz09PVR8fHEucGlwZXNDb3VudD4xJiYtMSE9PUgocS5waXBlcyxUKSkmJiF0dCYmKG4oImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIscS5hd2FpdERyYWluKSxxLmF3YWl0RHJhaW4rKyks''@;'; put 'put ''Ri5wYXVzZSgpKX1mdW5jdGlvbiBRKGl0KXtuKCJvbmVycm9yIixpdCksbnQoKSxULnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsUSksMD09PXIoVCwiZXJyb3IiKSYmUChULGl0KX1mdW5jdGlvbiBHKCl7VC5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixldCksbnQoKX1mdW5jdGlvbiBldCgpe24o''@;'; put 'put ''Im9uZmluaXNoIiksVC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLEcpLG50KCl9ZnVuY3Rpb24gbnQoKXtuKCJ1bnBpcGUiKSxGLnVucGlwZShUKX1yZXR1cm4gRi5vbigiZGF0YSIsVyksZnVuY3Rpb24oaXQsb3QsaHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBpdC5wcmVwZW5kTGlzdGVuZXIp''@;'; put 'put ''cmV0dXJuIGl0LnByZXBlbmRMaXN0ZW5lcihvdCxodCk7aXQuX2V2ZW50cyYmaXQuX2V2ZW50c1tvdF0/QXJyYXkuaXNBcnJheShpdC5fZXZlbnRzW290XSk/aXQuX2V2ZW50c1tvdF0udW5zaGlmdChodCk6aXQuX2V2ZW50c1tvdF09W2h0LGl0Ll9ldmVudHNbb3RdXTppdC5vbihvdCxodCl9''@;'; put 'put ''KFQsImVycm9yIixRKSxULm9uY2UoImNsb3NlIixHKSxULm9uY2UoImZpbmlzaCIsZXQpLFQuZW1pdCgicGlwZSIsRikscS5mbG93aW5nfHwobigicGlwZSByZXN1bWUiKSxGLnJlc3VtZSgpKSxUfSxELnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24oVCl7dmFyIEM9dGhpcy5fcmVhZGFibGVT''@;'; put 'put ''dGF0ZSxGPXtoYXNVbnBpcGVkOiExfTtpZigwPT09Qy5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT1DLnBpcGVzQ291bnQpcmV0dXJuIFQmJlQhPT1DLnBpcGVzfHwoVHx8KFQ9Qy5waXBlcyksQy5waXBlcz1udWxsLEMucGlwZXNDb3VudD0wLEMuZmxvd2luZz0hMSxUJiZULmVtaXQo''@;'; put 'put ''InVucGlwZSIsdGhpcyxGKSksdGhpcztpZighVCl7dmFyIHE9Qy5waXBlcyxZPUMucGlwZXNDb3VudDtDLnBpcGVzPW51bGwsQy5waXBlc0NvdW50PTAsQy5mbG93aW5nPSExO2Zvcih2YXIgWD0wO1g8WTtYKyspcVtYXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1''@;'; put 'put ''cm4gdGhpc312YXIgSz1IKEMucGlwZXMsVCk7cmV0dXJuLTE9PT1LfHwoQy5waXBlcy5zcGxpY2UoSywxKSxDLnBpcGVzQ291bnQtPTEsMT09PUMucGlwZXNDb3VudCYmKEMucGlwZXM9Qy5waXBlc1swXSksVC5lbWl0KCJ1bnBpcGUiLHRoaXMsRikpLHRoaXN9LEQucHJvdG90eXBlLmFkZExp''@;'; put 'put ''c3RlbmVyPUQucHJvdG90eXBlLm9uPWZ1bmN0aW9uKFQsQyl7dmFyIEY9dC5wcm90b3R5cGUub24uY2FsbCh0aGlzLFQsQykscT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiJkYXRhIj09PVQ/KHEucmVhZGFibGVMaXN0ZW5pbmc9dGhpcy5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAs''@;'; put 'put ''ITEhPT1xLmZsb3dpbmcmJnRoaXMucmVzdW1lKCkpOiJyZWFkYWJsZSI9PT1UJiYocS5lbmRFbWl0dGVkfHxxLnJlYWRhYmxlTGlzdGVuaW5nfHwocS5yZWFkYWJsZUxpc3RlbmluZz1xLm5lZWRSZWFkYWJsZT0hMCxxLmZsb3dpbmc9ITEscS5lbWl0dGVkUmVhZGFibGU9ITEsbigib24gcmVh''@;'; put 'put ''ZGFibGUiLHEubGVuZ3RoLHEucmVhZGluZykscS5sZW5ndGg/Yyh0aGlzKTpxLnJlYWRpbmd8fGIubmV4dFRpY2soayx0aGlzKSkpLEZ9LEQucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKFQsQyl7dmFyIEY9dC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIuY2FsbCh0aGlzLFQs''@;'; put 'put ''Qyk7cmV0dXJuInJlYWRhYmxlIj09PVQmJmIubmV4dFRpY2sodyx0aGlzKSxGfSxELnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oVCl7dmFyIEM9dC5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4icmVhZGFibGUi''@;'; put 'put ''IT09VCYmdm9pZCAwIT09VHx8Yi5uZXh0VGljayh3LHRoaXMpLEN9LEQucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3ZhciBGLFQ9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gVC5mbG93aW5nfHwobigicmVzdW1lIiksVC5mbG93aW5nPSFULnJlYWRhYmxlTGlzdGVuaW5nLChGPVQp''@;'; put 'put ''LnJlc3VtZVNjaGVkdWxlZHx8KEYucmVzdW1lU2NoZWR1bGVkPSEwLGIubmV4dFRpY2soTyx0aGlzLEYpKSksVC5wYXVzZWQ9ITEsdGhpc30sRC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gbigiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZs''@;'; put 'put ''b3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYobigicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzLl9yZWFkYWJsZVN0YXRlLnBhdXNlZD0hMCx0aGlzfSxELnByb3RvdHlwZS53cmFwPWZ1bmN0aW9u''@;'; put 'put ''KFQpe3ZhciBDPXRoaXMsRj10aGlzLl9yZWFkYWJsZVN0YXRlLHE9ITE7Zm9yKHZhciBZIGluIFQub24oImVuZCIsZnVuY3Rpb24oKXtpZihuKCJ3cmFwcGVkIGVuZCIpLEYuZGVjb2RlciYmIUYuZW5kZWQpe3ZhciBLPUYuZGVjb2Rlci5lbmQoKTtLJiZLLmxlbmd0aCYmQy5wdXNoKEspfUMu''@;'; put 'put ''cHVzaChudWxsKX0pLFQub24oImRhdGEiLGZ1bmN0aW9uKEspe24oIndyYXBwZWQgZGF0YSIpLEYuZGVjb2RlciYmKEs9Ri5kZWNvZGVyLndyaXRlKEspKSxGLm9iamVjdE1vZGUmJm51bGw9PUt8fChGLm9iamVjdE1vZGV8fEsmJksubGVuZ3RoKSYmKEMucHVzaChLKXx8KHE9ITAsVC5wYXVz''@;'; put 'put ''ZSgpKSl9KSxUKXZvaWQgMD09PXRoaXNbWV0mJiJmdW5jdGlvbiI9PXR5cGVvZiBUW1ldJiYodGhpc1tZXT1mdW5jdGlvbihLKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gVFtLXS5hcHBseShULGFyZ3VtZW50cyl9fShZKSk7Zm9yKHZhciBYPTA7WDxCLmxlbmd0aDtYKyspVC5vbihCW1hd''@;'; put 'put ''LHRoaXMuZW1pdC5iaW5kKHRoaXMsQltYXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKEspe24oIndyYXBwZWQgX3JlYWQiLEspLHEmJihxPSExLFQucmVzdW1lKCkpfSx0aGlzfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoRC5wcm90b3R5cGVbU3ltYm9sLmFzeW5jSXRlcmF0''@;'; put 'put ''b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PWYmJihmPXMoIi4vaW50ZXJuYWwvc3RyZWFtcy9hc3luY19pdGVyYXRvciIpKSxmKHRoaXMpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEQucHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEQucHJvdG90eXBlLCJyZWFkYWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRo''@;'; put 'put ''aXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShELnByb3RvdHlwZSwicmVhZGFibGVGbG93aW5nIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24oVCl7dGhp''@;'; put 'put ''cy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz1UKX19KSxELl9mcm9tTGlzdD1VLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShELnByb3RvdHlwZSwicmVhZGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFk''@;'; put 'put ''YWJsZVN0YXRlLmxlbmd0aH19KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoRC5mcm9tPWZ1bmN0aW9uKFQsQyl7cmV0dXJuIHZvaWQgMD09PXUmJih1PXMoIi4vaW50ZXJuYWwvc3RyZWFtcy9mcm9tIikpLHUoRCxULEMpfSl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHMoIl9wcm9j''@;'; put 'put ''ZXNzIiksdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHsiLi4vZXJyb3JzIjo0NzcsIi4vX3N0cmVhbV9kdXBsZXgiOjQ3OCwiLi9pbnRlcm5hbC9zdHJlYW1zL2FzeW5jX2l0ZXJhdG9yIjo0ODMsIi4v''@;'; put 'put ''aW50ZXJuYWwvc3RyZWFtcy9idWZmZXJfbGlzdCI6NDg0LCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSI6NDg1LCIuL2ludGVybmFsL3N0cmVhbXMvZnJvbSI6NDg3LCIuL2ludGVybmFsL3N0cmVhbXMvc3RhdGUiOjQ4OSwiLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbSI6NDkwLF9wcm9j''@;'; put 'put ''ZXNzOjQ2NyxidWZmZXI6MjIwLGV2ZW50czo0MjIsaW5oZXJpdHM6NDQwLCJzdHJpbmdfZGVjb2Rlci8iOjUyMix1dGlsOjE4OH1dLDQ4MTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtFLmV4cG9ydHM9bjt2YXIgYj1zKCIuLi9lcnJvcnMiKS5jb2RlcyxhPWIuRVJSX01FVEhPRF9O''@;'; put 'put ''T1RfSU1QTEVNRU5URUQsbz1iLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxyPWIuRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORyx0PWIuRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wLGU9cygiLi9fc3RyZWFtX2R1cGxleCIpO2Z1bmN0aW9uIGwoZix1KXt2YXIgcD10aGlzLl90''@;'; put 'put ''cmFuc2Zvcm1TdGF0ZTtwLnRyYW5zZm9ybWluZz0hMTt2YXIgZD1wLndyaXRlY2I7aWYobnVsbD09PWQpcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLG5ldyBvKTtwLndyaXRlY2h1bms9bnVsbCxwLndyaXRlY2I9bnVsbCxudWxsIT11JiZ0aGlzLnB1c2godSksZChmKTt2YXIgdj10aGlzLl9y''@;'; put 'put ''ZWFkYWJsZVN0YXRlO3YucmVhZGluZz0hMSwodi5uZWVkUmVhZGFibGV8fHYubGVuZ3RoPHYuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQodi5oaWdoV2F0ZXJNYXJrKX1mdW5jdGlvbiBuKGYpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXJldHVybiBuZXcgbihmKTtlLmNhbGwodGhpcyxm''@;'; put 'put ''KSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT17YWZ0ZXJUcmFuc2Zvcm06bC5iaW5kKHRoaXMpLG5lZWRUcmFuc2Zvcm06ITEsdHJhbnNmb3JtaW5nOiExLHdyaXRlY2I6bnVsbCx3cml0ZWNodW5rOm51bGwsd3JpdGVlbmNvZGluZzpudWxsfSx0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJs''@;'; put 'put ''ZT0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsZiYmKCJmdW5jdGlvbiI9PXR5cGVvZiBmLnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT1mLnRyYW5zZm9ybSksImZ1bmN0aW9uIj09dHlwZW9mIGYuZmx1c2gmJih0aGlzLl9mbHVzaD1mLmZsdXNoKSksdGhpcy5vbigicHJlZmlu''@;'; put 'put ''aXNoIixpKX1mdW5jdGlvbiBpKCl7dmFyIGY9dGhpczsiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5fZmx1c2h8fHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkP2godGhpcyxudWxsLG51bGwpOnRoaXMuX2ZsdXNoKGZ1bmN0aW9uKHUscCl7aChmLHUscCl9KX1mdW5jdGlvbiBoKGYsdSxw''@;'; put 'put ''KXtpZih1KXJldHVybiBmLmVtaXQoImVycm9yIix1KTtpZihudWxsIT1wJiZmLnB1c2gocCksZi5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3IHQ7aWYoZi5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKXRocm93IG5ldyByO3JldHVybiBmLnB1c2gobnVsbCl9cygiaW5oZXJp''@;'; put 'put ''dHMiKShuLGUpLG4ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZix1KXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxlLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxmLHUpfSxuLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGYsdSxwKXtwKG5ldyBh''@;'; put 'put ''KCJfdHJhbnNmb3JtKCkiKSl9LG4ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihmLHUscCl7dmFyIGQ9dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoZC53cml0ZWNiPXAsZC53cml0ZWNodW5rPWYsZC53cml0ZWVuY29kaW5nPXUsIWQudHJhbnNmb3JtaW5nKXt2YXIgdj10aGlzLl9yZWFkYWJs''@;'; put 'put ''ZVN0YXRlOyhkLm5lZWRUcmFuc2Zvcm18fHYubmVlZFJlYWRhYmxlfHx2Lmxlbmd0aDx2LmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKHYuaGlnaFdhdGVyTWFyayl9fSxuLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihmKXt2YXIgdT10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsPT09dS53''@;'; put 'put ''cml0ZWNodW5rfHx1LnRyYW5zZm9ybWluZz91Lm5lZWRUcmFuc2Zvcm09ITA6KHUudHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybSh1LndyaXRlY2h1bmssdS53cml0ZWVuY29kaW5nLHUuYWZ0ZXJUcmFuc2Zvcm0pKX0sbi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oZix1KXtl''@;'; put 'put ''LnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsZixmdW5jdGlvbihwKXt1KHApfSl9fSx7Ii4uL2Vycm9ycyI6NDc3LCIuL19zdHJlYW1fZHVwbGV4Ijo0NzgsaW5oZXJpdHM6NDQwfV0sNDgyOltmdW5jdGlvbihzLEUsUyl7KGZ1bmN0aW9uKGIsYSl7KGZ1bmN0aW9uKCl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO2Z1bmN0aW9uIG8oeSl7dmFyIHc9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24oayxPKXt2YXIgVT1rLmVudHJ5O2ZvcihrLmVudHJ5PW51bGw7VTspe3ZhciBWPVUuY2FsbGJhY2s7Ty5wZW5kaW5nY2ItLSxW''@;'; put 'put ''KHVuZGVmaW5lZCksVT1VLm5leHR9Ty5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1rfSh3LHkpfX12YXIgcjtFLmV4cG9ydHM9RCxELldyaXRhYmxlU3RhdGU9JDt2YXIgaSx0PXtkZXByZWNhdGU6cygidXRpbC1kZXByZWNhdGUiKX0sZT1zKCIuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtIiks''@;'; put 'put ''bD1zKCJidWZmZXIiKS5CdWZmZXIsbj0odm9pZCAwIT09YT9hOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LGg9cygiLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3kiKSxmPXMoIi4vaW50ZXJuYWwvc3Ry''@;'; put 'put ''ZWFtcy9zdGF0ZSIpLmdldEhpZ2hXYXRlck1hcmssdT1zKCIuLi9lcnJvcnMiKS5jb2RlcyxwPXUuRVJSX0lOVkFMSURfQVJHX1RZUEUsZD11LkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELHY9dS5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssXz11LkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUsQT11''@;'; put 'put ''LkVSUl9TVFJFQU1fREVTVFJPWUVELEk9dS5FUlJfU1RSRUFNX05VTExfVkFMVUVTLEw9dS5FUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCxOPXUuRVJSX1VOS05PV05fRU5DT0RJTkcsUD1oLmVycm9yT3JEZXN0cm95O2Z1bmN0aW9uIEIoKXt9ZnVuY3Rpb24gJCh5LHcsayl7cj1yfHxzKCIu''@;'; put 'put ''L19zdHJlYW1fZHVwbGV4IiksImJvb2xlYW4iIT10eXBlb2YgayYmKGs9dyBpbnN0YW5jZW9mIHIpLHRoaXMub2JqZWN0TW9kZT0hISh5PXl8fHt9KS5vYmplY3RNb2RlLGsmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIXkud3JpdGFibGVPYmplY3RNb2RlKSx0aGlzLmhp''@;'; put 'put ''Z2hXYXRlck1hcms9Zih0aGlzLHksIndyaXRhYmxlSGlnaFdhdGVyTWFyayIsayksdGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWNvZGVTdHJp''@;'; put 'put ''bmdzPSEoITE9PT15LmRlY29kZVN0cmluZ3MpLHRoaXMuZGVmYXVsdEVuY29kaW5nPXkuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5sZW5ndGg9MCx0aGlzLndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5bmM9ITAsdGhpcy5idWZmZXJQcm9jZXNzaW5nPSExLHRoaXMub253''@;'; put 'put ''cml0ZT1mdW5jdGlvbih6KXshZnVuY3Rpb24oVSxWKXt2YXIgRixSPVUuX3dyaXRhYmxlU3RhdGUsSD1SLnN5bmMsVD1SLndyaXRlY2I7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFQpdGhyb3cgbmV3IHY7aWYoKEY9Uikud3JpdGluZz0hMSxGLndyaXRlY2I9bnVsbCxGLmxlbmd0aC09Ri53cml0''@;'; put 'put ''ZWxlbixGLndyaXRlbGVuPTAsVikhZnVuY3Rpb24oRixxLFksWCxLKXstLXEucGVuZGluZ2NiLFk/KGIubmV4dFRpY2soSyxYKSxiLm5leHRUaWNrKGcsRixxKSxGLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxQKEYsWCkpOihLKFgpLEYuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0''@;'; put 'put ''dGVkPSEwLFAoRixYKSxnKEYscSkpfShVLFIsSCxWLFQpO2Vsc2V7dmFyIEM9YyhSKXx8VS5kZXN0cm95ZWQ7Q3x8Ui5jb3JrZWR8fFIuYnVmZmVyUHJvY2Vzc2luZ3x8IVIuYnVmZmVyZWRSZXF1ZXN0fHxqKFUsUiksSD9iLm5leHRUaWNrKE0sVSxSLEMsVCk6TShVLFIsQyxUKX19KHcseil9''@;'; put 'put ''LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmVtaXRDbG9zZT0h''@;'; put 'put ''MSE9PXkuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9ISF5LmF1dG9EZXN0cm95LHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgbyh0aGlzKX1mdW5jdGlvbiBEKHkpe3ZhciB3PXRoaXMgaW5zdGFuY2VvZihyPXJ8fHMoIi4vX3N0cmVh''@;'; put 'put ''bV9kdXBsZXgiKSk7aWYoIXcmJiFpLmNhbGwoRCx0aGlzKSlyZXR1cm4gbmV3IEQoeSk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgJCh5LHRoaXMsdyksdGhpcy53cml0YWJsZT0hMCx5JiYoImZ1bmN0aW9uIj09dHlwZW9mIHkud3JpdGUmJih0aGlzLl93cml0ZT15LndyaXRlKSwiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgeS53cml0ZXYmJih0aGlzLl93cml0ZXY9eS53cml0ZXYpLCJmdW5jdGlvbiI9PXR5cGVvZiB5LmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PXkuZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIHkuZmluYWwmJih0aGlzLl9maW5hbD15LmZpbmFsKSksZS5jYWxsKHRoaXMp''@;'; put 'put ''fWZ1bmN0aW9uIHgoeSx3LGssTyx6LFUsVil7dy53cml0ZWxlbj1PLHcud3JpdGVjYj1WLHcud3JpdGluZz0hMCx3LnN5bmM9ITAsdy5kZXN0cm95ZWQ/dy5vbndyaXRlKG5ldyBBKCJ3cml0ZSIpKTprP3kuX3dyaXRldih6LHcub253cml0ZSk6eS5fd3JpdGUoeixVLHcub253cml0ZSksdy5z''@;'; put 'put ''eW5jPSExfWZ1bmN0aW9uIE0oeSx3LGssTyl7dmFyIHosVTtrfHwoej15LDA9PT0oVT13KS5sZW5ndGgmJlUubmVlZERyYWluJiYoVS5uZWVkRHJhaW49ITEsei5lbWl0KCJkcmFpbiIpKSksdy5wZW5kaW5nY2ItLSxPKCksZyh5LHcpfWZ1bmN0aW9uIGooeSx3KXt3LmJ1ZmZlclByb2Nlc3Np''@;'; put 'put ''bmc9ITA7dmFyIGs9dy5idWZmZXJlZFJlcXVlc3Q7aWYoeS5fd3JpdGV2JiZrJiZrLm5leHQpe3ZhciB6PW5ldyBBcnJheSh3LmJ1ZmZlcmVkUmVxdWVzdENvdW50KSxVPXcuY29ya2VkUmVxdWVzdHNGcmVlO1UuZW50cnk9aztmb3IodmFyIFY9MCxSPSEwO2s7KXpbVl09ayxrLmlzQnVmfHwo''@;'; put 'put ''Uj0hMSksaz1rLm5leHQsVis9MTt6LmFsbEJ1ZmZlcnM9Uix4KHksdywhMCx3Lmxlbmd0aCx6LCIiLFUuZmluaXNoKSx3LnBlbmRpbmdjYisrLHcubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLFUubmV4dD8ody5jb3JrZWRSZXF1ZXN0c0ZyZWU9VS5uZXh0LFUubmV4dD1udWxsKTp3LmNvcmtl''@;'; put 'put ''ZFJlcXVlc3RzRnJlZT1uZXcgbyh3KSx3LmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO2s7KXt2YXIgSD1rLmNodW5rO2lmKHgoeSx3LCExLHcub2JqZWN0TW9kZT8xOkgubGVuZ3RoLEgsay5lbmNvZGluZyxrLmNhbGxiYWNrKSxrPWsubmV4dCx3LmJ1ZmZlcmVkUmVxdWVzdENv''@;'; put 'put ''dW50LS0sdy53cml0aW5nKWJyZWFrfW51bGw9PT1rJiYody5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfXcuYnVmZmVyZWRSZXF1ZXN0PWssdy5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIGMoeSl7cmV0dXJuIHkuZW5kaW5nJiYwPT09eS5sZW5ndGgmJm51bGw9PT15LmJ1ZmZlcmVk''@;'; put 'put ''UmVxdWVzdCYmIXkuZmluaXNoZWQmJiF5LndyaXRpbmd9ZnVuY3Rpb24gbSh5LHcpe3kuX2ZpbmFsKGZ1bmN0aW9uKGspe3cucGVuZGluZ2NiLS0sayYmUCh5LGspLHcucHJlZmluaXNoZWQ9ITAseS5lbWl0KCJwcmVmaW5pc2giKSxnKHksdyl9KX1mdW5jdGlvbiBnKHksdyl7dmFyIHosVSxr''@;'; put 'put ''PWModyk7aWYoayYmKHo9eSwoVT13KS5wcmVmaW5pc2hlZHx8VS5maW5hbENhbGxlZHx8KCJmdW5jdGlvbiIhPXR5cGVvZiB6Ll9maW5hbHx8VS5kZXN0cm95ZWQ/KFUucHJlZmluaXNoZWQ9ITAsei5lbWl0KCJwcmVmaW5pc2giKSk6KFUucGVuZGluZ2NiKyssVS5maW5hbENhbGxlZD0hMCxi''@;'; put 'put ''Lm5leHRUaWNrKG0seixVKSkpLDA9PT13LnBlbmRpbmdjYiYmKHcuZmluaXNoZWQ9ITAseS5lbWl0KCJmaW5pc2giKSx3LmF1dG9EZXN0cm95KSkpe3ZhciBPPXkuX3JlYWRhYmxlU3RhdGU7KCFPfHxPLmF1dG9EZXN0cm95JiZPLmVuZEVtaXR0ZWQpJiZ5LmRlc3Ryb3koKX1yZXR1cm4ga31z''@;'; put 'put ''KCJpbmhlcml0cyIpKEQsZSksJC5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PXRoaXMuYnVmZmVyZWRSZXF1ZXN0LHc9W107eTspdy5wdXNoKHkpLHk9eS5uZXh0O3JldHVybiB3fSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoJC5wcm90b3R5''@;'; put 'put ''cGUsImJ1ZmZlciIse2dldDp0LmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaHt9fSgp''@;'; put 'put ''LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhpPUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShELFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24oeSl7cmV0dXJuISFpLmNhbGwodGhpcyx5KXx8dGhpcz09PUQmJnkmJnkuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiAkfX0pKTppPWZ1bmN0aW9uKHkpe3JldHVybiB5IGluc3RhbmNlb2YgdGhpc30sRC5wcm90b3R5''@;'; put 'put ''cGUucGlwZT1mdW5jdGlvbigpe1AodGhpcyxuZXcgXyl9LEQucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHksdyxrKXt2YXIgTyxSLEgsVCx6PXRoaXMuX3dyaXRhYmxlU3RhdGUsVT0hMSxWPSF6Lm9iamVjdE1vZGUmJihsLmlzQnVmZmVyKE89eSl8fE8gaW5zdGFuY2VvZiBuKTtyZXR1cm4g''@;'; put 'put ''ViYmIWwuaXNCdWZmZXIoeSkmJih5PWwuZnJvbSh5KSksImZ1bmN0aW9uIj09dHlwZW9mIHcmJihrPXcsdz1udWxsKSxWP3c9ImJ1ZmZlciI6d3x8KHc9ei5kZWZhdWx0RW5jb2RpbmcpLCJmdW5jdGlvbiIhPXR5cGVvZiBrJiYoaz1CKSx6LmVuZGluZz8oUj10aGlzLEg9ayxUPW5ldyBMLFAo''@;'; put 'put ''UixUKSxiLm5leHRUaWNrKEgsVCkpOihWfHxmdW5jdGlvbihSLEgsVCxDKXt2YXIgRjtyZXR1cm4gbnVsbD09PVQ/Rj1uZXcgSToic3RyaW5nIj09dHlwZW9mIFR8fEgub2JqZWN0TW9kZXx8KEY9bmV3IHAoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciJdLFQpKSwhRnx8KFAoUixGKSxiLm5l''@;'; put 'put ''eHRUaWNrKEMsRiksITEpfSh0aGlzLHoseSxrKSkmJih6LnBlbmRpbmdjYisrLFU9ZnVuY3Rpb24oUixILFQsQyxGLHEpe2lmKCFUKXt2YXIgWT0oVz1DLCh0dD1IKS5vYmplY3RNb2RlfHwhMT09PXR0LmRlY29kZVN0cmluZ3N8fCJzdHJpbmciIT10eXBlb2YgV3x8KFc9bC5mcm9tKFcsRikp''@;'; put 'put ''LFcpO0MhPT1ZJiYoVD0hMCxGPSJidWZmZXIiLEM9WSl9dmFyIHR0LFcsWD1ILm9iamVjdE1vZGU/MTpDLmxlbmd0aDtILmxlbmd0aCs9WDt2YXIgSz1ILmxlbmd0aDxILmhpZ2hXYXRlck1hcms7aWYoS3x8KEgubmVlZERyYWluPSEwKSxILndyaXRpbmd8fEguY29ya2VkKXt2YXIgcnQ9SC5s''@;'; put 'put ''YXN0QnVmZmVyZWRSZXF1ZXN0O0gubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6QyxlbmNvZGluZzpGLGlzQnVmOlQsY2FsbGJhY2s6cSxuZXh0Om51bGx9LHJ0P3J0Lm5leHQ9SC5sYXN0QnVmZmVyZWRSZXF1ZXN0OkguYnVmZmVyZWRSZXF1ZXN0PUgubGFzdEJ1ZmZlcmVkUmVxdWVzdCxI''@;'; put 'put ''LmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVsc2UgeChSLEgsITEsWCxDLEYscSk7cmV0dXJuIEt9KHRoaXMseixWLHksdyxrKSksVX0sRC5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LEQucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigp''@;'; put 'put ''e3ZhciB5PXRoaXMuX3dyaXRhYmxlU3RhdGU7eS5jb3JrZWQmJih5LmNvcmtlZC0tLHkud3JpdGluZ3x8eS5jb3JrZWR8fHkuYnVmZmVyUHJvY2Vzc2luZ3x8IXkuYnVmZmVyZWRSZXF1ZXN0fHxqKHRoaXMseSkpfSxELnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24oeSl7''@;'; put 'put ''aWYoInN0cmluZyI9PXR5cGVvZiB5JiYoeT15LnRvTG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1dGY4IiwidXRmLTgiLCJhc2NpaSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIiLCJ1Y3MtMiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJhdyJdLmluZGV4T2YoKHkrIiIpLnRvTG93ZXJDYXNlKCkp''@;'; put 'put ''Pi0xKSl0aHJvdyBuZXcgTih5KTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9eSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRC5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''d3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRC5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUu''@;'; put 'put ''aGlnaFdhdGVyTWFya319KSxELnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oeSx3LGspe2sobmV3IGQoIl93cml0ZSgpIikpfSxELnByb3RvdHlwZS5fd3JpdGV2PW51bGwsRC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKHksdyxrKXt2YXIgeixVLFYsTz10aGlzLl93cml0YWJsZVN0YXRlO3Jl''@;'; put 'put ''dHVybiJmdW5jdGlvbiI9PXR5cGVvZiB5PyhrPXkseT1udWxsLHc9bnVsbCk6ImZ1bmN0aW9uIj09dHlwZW9mIHcmJihrPXcsdz1udWxsKSxudWxsIT15JiZ0aGlzLndyaXRlKHksdyksTy5jb3JrZWQmJihPLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLE8uZW5kaW5nfHwoej10aGlzLFY9aywo''@;'; put 'put ''VT1PKS5lbmRpbmc9ITAsZyh6LFUpLFYmJihVLmZpbmlzaGVkP2IubmV4dFRpY2soVik6ei5vbmNlKCJmaW5pc2giLFYpKSxVLmVuZGVkPSEwLHoud3JpdGFibGU9ITEpLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShELnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxl''@;'; put 'put ''OiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRC5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3Rh''@;'; put 'put ''dGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oeSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPXkpfX0pLEQucHJvdG90eXBlLmRlc3Ryb3k9aC5kZXN0cm95LEQucHJvdG90eXBlLl91bmRlc3Ryb3k9aC51''@;'; put 'put ''bmRlc3Ryb3ksRC5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oeSx3KXt3KHkpfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMscygiX3Byb2Nlc3MiKSx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0s''@;'; put 'put ''eyIuLi9lcnJvcnMiOjQ3NywiLi9fc3RyZWFtX2R1cGxleCI6NDc4LCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSI6NDg1LCIuL2ludGVybmFsL3N0cmVhbXMvc3RhdGUiOjQ4OSwiLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbSI6NDkwLF9wcm9jZXNzOjQ2NyxidWZmZXI6MjIwLGluaGVy''@;'; put 'put ''aXRzOjQ0MCwidXRpbC1kZXByZWNhdGUiOjUyNH1dLDQ4MzpbZnVuY3Rpb24ocyxFLFMpeyhmdW5jdGlvbihiKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGE7ZnVuY3Rpb24gbyhBLEksTCl7cmV0dXJuKEk9InN5bWJvbCI9PXR5cGVvZihQPWZ1bmN0aW9uKEIpe2lmKCJvYmplY3Qi''@;'; put 'put ''IT10eXBlb2YgQnx8bnVsbD09PUIpcmV0dXJuIEI7dmFyIEQ9QltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PUQpe3ZhciB4PUQuY2FsbChCLCJzdHJpbmciKTtpZigib2JqZWN0IiE9dHlwZW9mIHgpcmV0dXJuIHg7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBt''@;'; put 'put ''dXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKEIpfShJKSk/UDpTdHJpbmcoUCkpaW4gQT9PYmplY3QuZGVmaW5lUHJvcGVydHkoQSxJLHt2YWx1ZTpMLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6QVtJXT1MLEE7dmFyIFB9''@;'; put 'put ''dmFyIHI9cygiLi9lbmQtb2Ytc3RyZWFtIiksdD1TeW1ib2woImxhc3RSZXNvbHZlIiksZT1TeW1ib2woImxhc3RSZWplY3QiKSxsPVN5bWJvbCgiZXJyb3IiKSxuPVN5bWJvbCgiZW5kZWQiKSxpPVN5bWJvbCgibGFzdFByb21pc2UiKSxoPVN5bWJvbCgiaGFuZGxlUHJvbWlzZSIpLGY9U3lt''@;'; put 'put ''Ym9sKCJzdHJlYW0iKTtmdW5jdGlvbiB1KEEsSSl7cmV0dXJue3ZhbHVlOkEsZG9uZTpJfX1mdW5jdGlvbiBwKEEpe3ZhciBJPUFbdF07aWYobnVsbCE9PUkpe3ZhciBMPUFbZl0ucmVhZCgpO251bGwhPT1MJiYoQVtpXT1udWxsLEFbdF09bnVsbCxBW2VdPW51bGwsSSh1KEwsITEpKSl9fWZ1''@;'; put 'put ''bmN0aW9uIGQoQSl7Yi5uZXh0VGljayhwLEEpfXZhciB2PU9iamVjdC5nZXRQcm90b3R5cGVPZihmdW5jdGlvbigpe30pLF89T2JqZWN0LnNldFByb3RvdHlwZU9mKChvKGE9e2dldCBzdHJlYW0oKXtyZXR1cm4gdGhpc1tmXX0sbmV4dDpmdW5jdGlvbigpe3ZhciBBPXRoaXMsST10aGlzW2xd''@;'; put 'put ''O2lmKG51bGwhPT1JKXJldHVybiBQcm9taXNlLnJlamVjdChJKTtpZih0aGlzW25dKXJldHVybiBQcm9taXNlLnJlc29sdmUodSh2b2lkIDAsITApKTtpZih0aGlzW2ZdLmRlc3Ryb3llZClyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oQiwkKXtiLm5leHRUaWNrKGZ1bmN0aW9uKCl7QVts''@;'; put 'put ''XT8kKEFbbF0pOkIodSh2b2lkIDAsITApKX0pfSk7dmFyIEwsTj10aGlzW2ldO2lmKE4pTD1uZXcgUHJvbWlzZShmdW5jdGlvbihCLCQpe3JldHVybiBmdW5jdGlvbihELHgpe0IudGhlbihmdW5jdGlvbigpeyRbbl0/RCh1KHZvaWQgMCwhMCkpOiRbaF0oRCx4KX0seCl9fShOLHRoaXMpKTtl''@;'; put 'put ''bHNle3ZhciBQPXRoaXNbZl0ucmVhZCgpO2lmKG51bGwhPT1QKXJldHVybiBQcm9taXNlLnJlc29sdmUodShQLCExKSk7TD1uZXcgUHJvbWlzZSh0aGlzW2hdKX1yZXR1cm4gdGhpc1tpXT1MLEx9fSxTeW1ib2wuYXN5bmNJdGVyYXRvcixmdW5jdGlvbigpe3JldHVybiB0aGlzfSksbyhhLCJy''@;'; put 'put ''ZXR1cm4iLGZ1bmN0aW9uKCl7dmFyIEE9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oSSxMKXtBW2ZdLmRlc3Ryb3kobnVsbCxmdW5jdGlvbihOKXtOP0woTik6SSh1KHZvaWQgMCwhMCkpfSl9KX0pLGEpLHYpO0UuZXhwb3J0cz1mdW5jdGlvbihBKXt2YXIgSSxMPU9iamVjdC5j''@;'; put 'put ''cmVhdGUoXywobyhJPXt9LGYse3ZhbHVlOkEsd3JpdGFibGU6ITB9KSxvKEksdCx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLG8oSSxlLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksbyhJLGwse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxvKEksbix7dmFsdWU6QS5fcmVhZGFibGVTdGF0''@;'; put 'put ''ZS5lbmRFbWl0dGVkLHdyaXRhYmxlOiEwfSksbyhJLGgse3ZhbHVlOmZ1bmN0aW9uKE4sUCl7dmFyIEI9TFtmXS5yZWFkKCk7Qj8oTFtpXT1udWxsLExbdF09bnVsbCxMW2VdPW51bGwsTih1KEIsITEpKSk6KExbdF09TixMW2VdPVApfSx3cml0YWJsZTohMH0pLEkpKTtyZXR1cm4gTFtpXT1u''@;'; put 'put ''dWxsLHIoQSxmdW5jdGlvbihOKXtpZihOJiYiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiIT09Ti5jb2RlKXt2YXIgUD1MW2VdO3JldHVybiBudWxsIT09UCYmKExbaV09bnVsbCxMW3RdPW51bGwsTFtlXT1udWxsLFAoTikpLHZvaWQoTFtsXT1OKX12YXIgQj1MW3RdO251bGwhPT1CJiYo''@;'; put 'put ''TFtpXT1udWxsLExbdF09bnVsbCxMW2VdPW51bGwsQih1KHZvaWQgMCwhMCkpKSxMW25dPSEwfSksQS5vbigicmVhZGFibGUiLGQuYmluZChudWxsLEwpKSxMfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMscygiX3Byb2Nlc3MiKSl9LHsiLi9lbmQtb2Ytc3RyZWFtIjo0ODYsX3Byb2Nlc3M6''@;'; put 'put ''NDY3fV0sNDg0OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoaSxoKXt2YXIgZj1PYmplY3Qua2V5cyhpKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgdT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGkpO2gmJih1PXUuZmlsdGVyKGZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGkscCkuZW51bWVyYWJsZX0pKSxmLnB1c2guYXBwbHkoZix1KX1yZXR1cm4gZn1mdW5jdGlvbiBhKGkpe2Zvcih2YXIgaD0xO2g8YXJndW1lbnRzLmxlbmd0aDtoKyspe3ZhciBmPW51bGwhPWFyZ3VtZW50''@;'; put 'put ''c1toXT9hcmd1bWVudHNbaF06e307aCUyP2IoT2JqZWN0KGYpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe28oaSx1LGZbdV0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoaSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y''@;'; put 'put ''cyhmKSk6YihPYmplY3QoZikpLmZvckVhY2goZnVuY3Rpb24odSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGksdSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGYsdSkpfSl9cmV0dXJuIGl9ZnVuY3Rpb24gbyhpLGgsZil7cmV0dXJuKGg9dChoKSlpbiBpP09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShpLGgse3ZhbHVlOmYsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTppW2hdPWYsaX1mdW5jdGlvbiByKGksaCl7Zm9yKHZhciBmPTA7ZjxoLmxlbmd0aDtmKyspe3ZhciB1PWhbZl07dS5lbnVtZXJhYmxlPXUuZW51bWVyYWJsZXx8ITEsdS5jb25m''@;'; put 'put ''aWd1cmFibGU9ITAsInZhbHVlImluIHUmJih1LndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSx0KHUua2V5KSx1KX19ZnVuY3Rpb24gdChpKXt2YXIgaD1mdW5jdGlvbihmKXtpZigib2JqZWN0IiE9dHlwZW9mIGZ8fG51bGw9PT1mKXJldHVybiBmO3ZhciBwPWZbU3ltYm9s''@;'; put 'put ''LnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1wKXt2YXIgZD1wLmNhbGwoZiwic3RyaW5nIik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmlu''@;'; put 'put ''ZyhmKX0oaSk7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBoP2g6U3RyaW5nKGgpfXZhciBlPXMoImJ1ZmZlciIpLkJ1ZmZlcixsPXMoInV0aWwiKS5pbnNwZWN0LG49bCYmbC5jdXN0b218fCJpbnNwZWN0IjtFLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKCl7KGZ1bmN0aW9uKHAsZCl7''@;'; put 'put ''aWYoIShwIGluc3RhbmNlb2YgZCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGkpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9dmFyIGgsZjtyZXR1cm4gaD1pLChmPVt7a2V5OiJwdXNo''@;'; put 'put ''Iix2YWx1ZTpmdW5jdGlvbihwKXt2YXIgZD17ZGF0YTpwLG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1kOnRoaXMuaGVhZD1kLHRoaXMudGFpbD1kLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJ1bnNoaWZ0Iix2YWx1ZTpmdW5jdGlvbihwKXt2YXIgZD17ZGF0YTpwLG5l''@;'; put 'put ''eHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9ZCksdGhpcy5oZWFkPWQsKyt0aGlzLmxlbmd0aH19LHtrZXk6InNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIHA9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMuaGVhZD0xPT09''@;'; put 'put ''dGhpcy5sZW5ndGg/dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxwfX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfX0se2tleToiam9pbiIsdmFsdWU6ZnVuY3Rpb24ocCl7aWYo''@;'; put 'put ''MD09PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgZD10aGlzLmhlYWQsdj0iIitkLmRhdGE7ZD1kLm5leHQ7KXYrPXArZC5kYXRhO3JldHVybiB2fX0se2tleToiY29uY2F0Iix2YWx1ZTpmdW5jdGlvbihwKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIGUuYWxsb2MoMCk7Zm9yKHZh''@;'; put 'put ''ciBBPWUuYWxsb2NVbnNhZmUocD4+PjApLEk9dGhpcy5oZWFkLEw9MDtJOyllLnByb3RvdHlwZS5jb3B5LmNhbGwoSS5kYXRhLEEsTCksTCs9SS5kYXRhLmxlbmd0aCxJPUkubmV4dDtyZXR1cm4gQX19LHtrZXk6ImNvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uKHAsZCl7dmFyIHY7cmV0dXJuIHA8''@;'; put 'put ''dGhpcy5oZWFkLmRhdGEubGVuZ3RoPyh2PXRoaXMuaGVhZC5kYXRhLnNsaWNlKDAscCksdGhpcy5oZWFkLmRhdGE9dGhpcy5oZWFkLmRhdGEuc2xpY2UocCkpOnY9cD09PXRoaXMuaGVhZC5kYXRhLmxlbmd0aD90aGlzLnNoaWZ0KCk6ZD90aGlzLl9nZXRTdHJpbmcocCk6dGhpcy5fZ2V0QnVm''@;'; put 'put ''ZmVyKHApLHZ9fSx7a2V5OiJmaXJzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWFkLmRhdGF9fSx7a2V5OiJfZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihwKXt2YXIgZD10aGlzLmhlYWQsdj0xLF89ZC5kYXRhO2ZvcihwLT1fLmxlbmd0aDtkPWQubmV4dDspe3ZhciBBPWQu''@;'; put 'put ''ZGF0YSxJPXA+QS5sZW5ndGg/QS5sZW5ndGg6cDtpZihfKz1JPT09QS5sZW5ndGg/QTpBLnNsaWNlKDAscCksMD09KHAtPUkpKXtJPT09QS5sZW5ndGg/KCsrdix0aGlzLmhlYWQ9ZC5uZXh0P2QubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1kLGQuZGF0YT1BLnNsaWNlKEkpKTti''@;'; put 'put ''cmVha30rK3Z9cmV0dXJuIHRoaXMubGVuZ3RoLT12LF99fSx7a2V5OiJfZ2V0QnVmZmVyIix2YWx1ZTpmdW5jdGlvbihwKXt2YXIgZD1lLmFsbG9jVW5zYWZlKHApLHY9dGhpcy5oZWFkLF89MTtmb3Iodi5kYXRhLmNvcHkoZCkscC09di5kYXRhLmxlbmd0aDt2PXYubmV4dDspe3ZhciBBPXYu''@;'; put 'put ''ZGF0YSxJPXA+QS5sZW5ndGg/QS5sZW5ndGg6cDtpZihBLmNvcHkoZCxkLmxlbmd0aC1wLDAsSSksMD09KHAtPUkpKXtJPT09QS5sZW5ndGg/KCsrXyx0aGlzLmhlYWQ9di5uZXh0P3YubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD12LHYuZGF0YT1BLnNsaWNlKEkpKTticmVha30r''@;'; put 'put ''K199cmV0dXJuIHRoaXMubGVuZ3RoLT1fLGR9fSx7a2V5Om4sdmFsdWU6ZnVuY3Rpb24ocCxkKXtyZXR1cm4gbCh0aGlzLGEoYSh7fSxkKSx7fSx7ZGVwdGg6MCxjdXN0b21JbnNwZWN0OiExfSkpfX1dKSYmcihoLnByb3RvdHlwZSxmKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwicHJvdG90''@;'; put 'put ''eXBlIix7d3JpdGFibGU6ITF9KSxpfSgpfSx7YnVmZmVyOjIyMCx1dGlsOjE4OH1dLDQ4NTpbZnVuY3Rpb24ocyxFLFMpeyhmdW5jdGlvbihiKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYSh0LGUpe3IodCxlKSxvKHQpfWZ1bmN0aW9uIG8odCl7dC5fd3JpdGFibGVTdGF0''@;'; put 'put ''ZSYmIXQuX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlfHx0Ll9yZWFkYWJsZVN0YXRlJiYhdC5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2V8fHQuZW1pdCgiY2xvc2UiKX1mdW5jdGlvbiByKHQsZSl7dC5lbWl0KCJlcnJvciIsZSl9RS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uKHQsZSl7dmFy''@;'; put 'put ''IGw9dGhpcztyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPyhlP2UodCk6dCYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVT''@;'; put 'put ''dGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxiLm5leHRUaWNrKHIsdGhpcyx0KSk6Yi5uZXh0VGljayhyLHRoaXMsdCkpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRo''@;'; put 'put ''aXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveSh0fHxudWxsLGZ1bmN0aW9uKGgpeyFlJiZoP2wuX3dyaXRhYmxlU3RhdGU/bC5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ/Yi5uZXh0VGljayhvLGwpOihsLl93cml0''@;'; put 'put ''YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxiLm5leHRUaWNrKGEsbCxoKSk6Yi5uZXh0VGljayhhLGwsaCk6ZT8oYi5uZXh0VGljayhvLGwpLGUoaCkpOmIubmV4dFRpY2sobyxsKX0pLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVh''@;'; put 'put ''ZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5nPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSExKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0''@;'; put 'put ''cm95ZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZz0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUucHJlZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hl''@;'; put 'put ''ZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMSl9LGVycm9yT3JEZXN0cm95OmZ1bmN0aW9uKHQsZSl7dmFyIGw9dC5fcmVhZGFibGVTdGF0ZSxuPXQuX3dyaXRhYmxlU3RhdGU7bCYmbC5hdXRvRGVzdHJveXx8biYmbi5hdXRvRGVzdHJveT90LmRlc3Ryb3koZSk6dC5l''@;'; put 'put ''bWl0KCJlcnJvciIsZSl9fX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMscygiX3Byb2Nlc3MiKSl9LHtfcHJvY2Vzczo0Njd9XSw0ODY6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiLi4vLi4vLi4vZXJyb3JzIikuY29kZXMuRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xP''@;'; put 'put ''U0U7ZnVuY3Rpb24gYSgpe31FLmV4cG9ydHM9ZnVuY3Rpb24gbyhyLHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIG8ocixudWxsLHQpO3R8fCh0PXt9KSxlPWZ1bmN0aW9uKEEpe3ZhciBJPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFJKXtJPSEwO2Zvcih2YXIgTD1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoLE49bmV3IEFycmF5KEwpLFA9MDtQPEw7UCsrKU5bUF09YXJndW1lbnRzW1BdO0EuYXBwbHkodGhpcyxOKX19fShlfHxhKTt2YXIgQSxsPXQucmVhZGFibGV8fCExIT09dC5yZWFkYWJsZSYmci5yZWFkYWJsZSxuPXQud3JpdGFibGV8fCExIT09dC53cml0YWJsZSYmci53''@;'; put 'put ''cml0YWJsZSxpPWZ1bmN0aW9uKCl7ci53cml0YWJsZXx8ZigpfSxoPXIuX3dyaXRhYmxlU3RhdGUmJnIuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQsZj1mdW5jdGlvbigpe249ITEsaD0hMCxsfHxlLmNhbGwocil9LHU9ci5fcmVhZGFibGVTdGF0ZSYmci5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0''@;'; put 'put ''dGVkLHA9ZnVuY3Rpb24oKXtsPSExLHU9ITAsbnx8ZS5jYWxsKHIpfSxkPWZ1bmN0aW9uKEEpe2UuY2FsbChyLEEpfSx2PWZ1bmN0aW9uKCl7dmFyIEE7cmV0dXJuIGwmJiF1PyhyLl9yZWFkYWJsZVN0YXRlJiZyLl9yZWFkYWJsZVN0YXRlLmVuZGVkfHwoQT1uZXcgYiksZS5jYWxsKHIsQSkp''@;'; put 'put ''Om4mJiFoPyhyLl93cml0YWJsZVN0YXRlJiZyLl93cml0YWJsZVN0YXRlLmVuZGVkfHwoQT1uZXcgYiksZS5jYWxsKHIsQSkpOnZvaWQgMH0sXz1mdW5jdGlvbigpe3IucmVxLm9uKCJmaW5pc2giLGYpfTtyZXR1cm4oQT1yKS5zZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBLmFib3J0''@;'; put 'put ''PyhyLm9uKCJjb21wbGV0ZSIsZiksci5vbigiYWJvcnQiLHYpLHIucmVxP18oKTpyLm9uKCJyZXF1ZXN0IixfKSk6biYmIXIuX3dyaXRhYmxlU3RhdGUmJihyLm9uKCJlbmQiLGkpLHIub24oImNsb3NlIixpKSksci5vbigiZW5kIixwKSxyLm9uKCJmaW5pc2giLGYpLCExIT09dC5lcnJvciYm''@;'; put 'put ''ci5vbigiZXJyb3IiLGQpLHIub24oImNsb3NlIix2KSxmdW5jdGlvbigpe3IucmVtb3ZlTGlzdGVuZXIoImNvbXBsZXRlIixmKSxyLnJlbW92ZUxpc3RlbmVyKCJhYm9ydCIsdiksci5yZW1vdmVMaXN0ZW5lcigicmVxdWVzdCIsXyksci5yZXEmJnIucmVxLnJlbW92ZUxpc3RlbmVyKCJmaW5p''@;'; put 'put ''c2giLGYpLHIucmVtb3ZlTGlzdGVuZXIoImVuZCIsaSksci5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGkpLHIucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsZiksci5yZW1vdmVMaXN0ZW5lcigiZW5kIixwKSxyLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsZCksci5yZW1vdmVMaXN0ZW5lcigiY2xv''@;'; put 'put ''c2UiLHYpfX19LHsiLi4vLi4vLi4vZXJyb3JzIjo0Nzd9XSw0ODc6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7RS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJSZWFkYWJsZS5mcm9tIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJyb3dzZXIiKX19LHt9XSw0ODg6''@;'; put 'put ''W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGIsYT1zKCIuLi8uLi8uLi9lcnJvcnMiKS5jb2RlcyxvPWEuRVJSX01JU1NJTkdfQVJHUyxyPWEuRVJSX1NUUkVBTV9ERVNUUk9ZRUQ7ZnVuY3Rpb24gdChoKXtpZihoKXRocm93IGh9ZnVuY3Rpb24gbChoKXtoKCl9ZnVuY3Rpb24g''@;'; put 'put ''bihoLGYpe3JldHVybiBoLnBpcGUoZil9RS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdT0wO3U8aDt1KyspZlt1XT1hcmd1bWVudHNbdV07dmFyIHAsZD1mdW5jdGlvbiBpKGgpe3JldHVybiBoLmxlbmd0aD8iZnVuY3Rpb24i''@;'; put 'put ''IT10eXBlb2YgaFtoLmxlbmd0aC0xXT90OmgucG9wKCk6dH0oZik7aWYoQXJyYXkuaXNBcnJheShmWzBdKSYmKGY9ZlswXSksZi5sZW5ndGg8Mil0aHJvdyBuZXcgbygic3RyZWFtcyIpO3ZhciB2PWYubWFwKGZ1bmN0aW9uKF8sQSl7dmFyIEk9QTxmLmxlbmd0aC0xO3JldHVybiBmdW5jdGlv''@;'; put 'put ''biBlKGgsZix1LHApe3A9ZnVuY3Rpb24oXyl7dmFyIEE9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7QXx8KEE9ITAsXy5hcHBseSh2b2lkIDAsYXJndW1lbnRzKSl9fShwKTt2YXIgZD0hMTtoLm9uKCJjbG9zZSIsZnVuY3Rpb24oKXtkPSEwfSksdm9pZCAwPT09YiYmKGI9cygiLi9lbmQtb2Ytc3Ry''@;'; put 'put ''ZWFtIikpLGIoaCx7cmVhZGFibGU6Zix3cml0YWJsZTp1fSxmdW5jdGlvbihfKXtpZihfKXJldHVybiBwKF8pO2Q9ITAscCgpfSk7dmFyIHY9ITE7cmV0dXJuIGZ1bmN0aW9uKF8pe2lmKCFkJiYhdilyZXR1cm4gdj0hMCwoQT1oKS5zZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBLmFi''@;'; put 'put ''b3J0P2guYWJvcnQoKToiZnVuY3Rpb24iPT10eXBlb2YgaC5kZXN0cm95P2guZGVzdHJveSgpOnZvaWQgcChffHxuZXcgcigicGlwZSIpKTt2YXIgQX19KF8sSSxBPjAsZnVuY3Rpb24oTCl7cHx8KHA9TCksTCYmdi5mb3JFYWNoKGwpLEl8fCh2LmZvckVhY2gobCksZChwKSl9KX0pO3JldHVy''@;'; put 'put ''biBmLnJlZHVjZShuKX19LHsiLi4vLi4vLi4vZXJyb3JzIjo0NzcsIi4vZW5kLW9mLXN0cmVhbSI6NDg2fV0sNDg5OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoIi4uLy4uLy4uL2Vycm9ycyIpLmNvZGVzLkVSUl9JTlZBTElEX09QVF9WQUxVRTtFLmV4cG9ydHM9e2dl''@;'; put 'put ''dEhpZ2hXYXRlck1hcms6ZnVuY3Rpb24oYSxvLHIsdCl7dmFyIGwsZT1udWxsIT0obD1vKS5oaWdoV2F0ZXJNYXJrP2wuaGlnaFdhdGVyTWFyazp0P2xbcl06bnVsbDtpZihudWxsIT1lKXtpZighaXNGaW5pdGUoZSl8fE1hdGguZmxvb3IoZSkhPT1lfHxlPDApdGhyb3cgbmV3IGIodD9yOiJo''@;'; put 'put ''aWdoV2F0ZXJNYXJrIixlKTtyZXR1cm4gTWF0aC5mbG9vcihlKX1yZXR1cm4gYS5vYmplY3RNb2RlPzE2OjE2Mzg0fX19LHsiLi4vLi4vLi4vZXJyb3JzIjo0Nzd9XSw0OTA6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7RS5leHBvcnRzPXMoImV2ZW50cyIpLkV2ZW50RW1pdHRlcn0s''@;'; put 'put ''e2V2ZW50czo0MjJ9XSw0OTE6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7KFM9RS5leHBvcnRzPXMoIi4vbGliL19zdHJlYW1fcmVhZGFibGUuanMiKSkuU3RyZWFtPVMsUy5SZWFkYWJsZT1TLFMuV3JpdGFibGU9cygiLi9saWIvX3N0cmVhbV93cml0YWJsZS5qcyIpLFMuRHVwbGV4''@;'; put 'put ''PXMoIi4vbGliL19zdHJlYW1fZHVwbGV4LmpzIiksUy5UcmFuc2Zvcm09cygiLi9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMiKSxTLlBhc3NUaHJvdWdoPXMoIi4vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMiKSxTLmZpbmlzaGVkPXMoIi4vbGliL2ludGVybmFsL3N0cmVhbXMvZW5kLW9m''@;'; put 'put ''LXN0cmVhbS5qcyIpLFMucGlwZWxpbmU9cygiLi9saWIvaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZS5qcyIpfSx7Ii4vbGliL19zdHJlYW1fZHVwbGV4LmpzIjo0NzgsIi4vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMiOjQ3OSwiLi9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcyI6NDgwLCIu''@;'; put 'put ''L2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcyI6NDgxLCIuL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIjo0ODIsIi4vbGliL2ludGVybmFsL3N0cmVhbXMvZW5kLW9mLXN0cmVhbS5qcyI6NDg2LCIuL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3BpcGVsaW5lLmpzIjo0ODh9XSw0OTI6W2Z1bmN0aW9u''@;'; put 'put ''KHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9ZnVuY3Rpb24oYSl7dmFyIG89T2JqZWN0LnByb3RvdHlwZSxyPW8uaGFzT3duUHJvcGVydHksdD1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGcseSx3KXtnW3ldPXcudmFsdWV9LGU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9T''@;'; put 'put ''eW1ib2w6e30sbD1lLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbj1lLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLGk9ZS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGgoZyx5LHcpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZyx5LHt2YWx1ZTp3''@;'; put 'put ''LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZ1t5XX10cnl7aCh7fSwiIil9Y2F0Y2h7aD1mdW5jdGlvbih5LHcsayl7cmV0dXJuIHlbd109a319ZnVuY3Rpb24gZihnLHksdyxrKXt2YXIgej1PYmplY3QuY3JlYXRlKCh5JiZ5LnByb3RvdHlwZSBpbnN0YW5j''@;'; put 'put ''ZW9mIGQ/eTpkKS5wcm90b3R5cGUpLFU9bmV3IGooa3x8W10pO3JldHVybiB0KHosIl9pbnZva2UiLHt2YWx1ZTokKGcsdyxVKX0pLHp9ZnVuY3Rpb24gdShnLHksdyl7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzpnLmNhbGwoeSx3KX19Y2F0Y2goayl7cmV0dXJue3R5cGU6InRocm93''@;'; put 'put ''Iixhcmc6a319fWEud3JhcD1mO3ZhciBwPXt9O2Z1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gdigpe31mdW5jdGlvbiBfKCl7fXZhciBBPXt9O2goQSxsLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KTt2YXIgST1PYmplY3QuZ2V0UHJvdG90eXBlT2YsTD1JJiZJKEkoYyhbXSkpKTtMJiZMIT09byYm''@;'; put 'put ''ci5jYWxsKEwsbCkmJihBPUwpO3ZhciBOPV8ucHJvdG90eXBlPWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQSk7ZnVuY3Rpb24gUChnKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goZnVuY3Rpb24oeSl7aChnLHksZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMuX2ludm9rZSh5''@;'; put 'put ''LHcpfSl9KX1mdW5jdGlvbiBCKGcseSl7dmFyIHc7dCh0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oayxPKXtmdW5jdGlvbiB6KCl7cmV0dXJuIG5ldyB5KGZ1bmN0aW9uKFUsVil7IWZ1bmN0aW9uIFIoSCxULEMsRil7dmFyIHE9dShnW0hdLGcsVCk7aWYoInRocm93IiE9PXEudHlw''@;'; put 'put ''ZSl7dmFyIFk9cS5hcmcsWD1ZLnZhbHVlO3JldHVybiBYJiYib2JqZWN0Ij09dHlwZW9mIFgmJnIuY2FsbChYLCJfX2F3YWl0Iik/eS5yZXNvbHZlKFguX19hd2FpdCkudGhlbihmdW5jdGlvbihLKXtSKCJuZXh0IixLLEMsRil9LGZ1bmN0aW9uKEspe1IoInRocm93IixLLEMsRil9KTp5LnJl''@;'; put 'put ''c29sdmUoWCkudGhlbihmdW5jdGlvbihLKXtZLnZhbHVlPUssQyhZKX0sZnVuY3Rpb24oSyl7cmV0dXJuIFIoInRocm93IixLLEMsRil9KX1GKHEuYXJnKX0oayxPLFUsVil9KX1yZXR1cm4gdz13P3cudGhlbih6LHopOnooKX19KX1mdW5jdGlvbiAkKGcseSx3KXt2YXIgaz0ic3VzcGVuZGVk''@;'; put 'put ''U3RhcnQiO3JldHVybiBmdW5jdGlvbihPLHope2lmKCJleGVjdXRpbmciPT09ayl0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PWspe2lmKCJ0aHJvdyI9PT1PKXRocm93IHo7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEw''@;'; put 'put ''fX1mb3Iody5tZXRob2Q9Tyx3LmFyZz16Ozspe3ZhciBVPXcuZGVsZWdhdGU7aWYoVSl7dmFyIFY9RChVLHcpO2lmKFYpe2lmKFY9PT1wKWNvbnRpbnVlO3JldHVybiBWfX1pZigibmV4dCI9PT13Lm1ldGhvZCl3LnNlbnQ9dy5fc2VudD13LmFyZztlbHNlIGlmKCJ0aHJvdyI9PT13Lm1ldGhv''@;'; put 'put ''ZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PWspdGhyb3cgaz0iY29tcGxldGVkIix3LmFyZzt3LmRpc3BhdGNoRXhjZXB0aW9uKHcuYXJnKX1lbHNlInJldHVybiI9PT13Lm1ldGhvZCYmdy5hYnJ1cHQoInJldHVybiIsdy5hcmcpO2s9ImV4ZWN1dGluZyI7dmFyIFI9dShnLHksdyk7aWYoIm5v''@;'; put 'put ''cm1hbCI9PT1SLnR5cGUpe2lmKGs9dy5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsUi5hcmc9PT1wKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpSLmFyZyxkb25lOncuZG9uZX19InRocm93Ij09PVIudHlwZSYmKGs9ImNvbXBsZXRlZCIsdy5tZXRob2Q9InRocm93Iix3LmFyZz1S''@;'; put 'put ''LmFyZyl9fX1mdW5jdGlvbiBEKGcseSl7dmFyIHc9eS5tZXRob2Qsaz1nLml0ZXJhdG9yW3ddO2lmKHZvaWQgMD09PWspcmV0dXJuIHkuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09dyYmZy5pdGVyYXRvci5yZXR1cm4mJih5Lm1ldGhvZD0icmV0dXJuIix5LmFyZz12b2lkIDAsRChnLHkpLCJ0''@;'; put 'put ''aHJvdyI9PT15Lm1ldGhvZCl8fCJyZXR1cm4iIT09dyYmKHkubWV0aG9kPSJ0aHJvdyIseS5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIit3KyInIG1ldGhvZCIpKSxwO3ZhciBPPXUoayxnLml0ZXJhdG9yLHkuYXJnKTtpZigidGhyb3ciPT09''@;'; put 'put ''Ty50eXBlKXJldHVybiB5Lm1ldGhvZD0idGhyb3ciLHkuYXJnPU8uYXJnLHkuZGVsZWdhdGU9bnVsbCxwO3ZhciB6PU8uYXJnO3JldHVybiB6P3ouZG9uZT8oeVtnLnJlc3VsdE5hbWVdPXoudmFsdWUseS5uZXh0PWcubmV4dExvYywicmV0dXJuIiE9PXkubWV0aG9kJiYoeS5tZXRob2Q9Im5l''@;'; put 'put ''eHQiLHkuYXJnPXZvaWQgMCkseS5kZWxlZ2F0ZT1udWxsLHApOno6KHkubWV0aG9kPSJ0aHJvdyIseS5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx5LmRlbGVnYXRlPW51bGwscCl9ZnVuY3Rpb24geChnKXt2YXIgeT17dHJ5TG9jOmdbMF19''@;'; put 'put ''OzEgaW4gZyYmKHkuY2F0Y2hMb2M9Z1sxXSksMiBpbiBnJiYoeS5maW5hbGx5TG9jPWdbMl0seS5hZnRlckxvYz1nWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh5KX1mdW5jdGlvbiBNKGcpe3ZhciB5PWcuY29tcGxldGlvbnx8e307eS50eXBlPSJub3JtYWwiLGRlbGV0ZSB5LmFyZyxnLmNv''@;'; put 'put ''bXBsZXRpb249eX1mdW5jdGlvbiBqKGcpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxnLmZvckVhY2goeCx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBjKGcpe2lmKGcpe3ZhciB5PWdbbF07aWYoeSlyZXR1cm4geS5jYWxsKGcpO2lmKCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBnLm5leHQpcmV0dXJuIGc7aWYoIWlzTmFOKGcubGVuZ3RoKSl7dmFyIHc9LTEsaz1mdW5jdGlvbiBPKCl7Zm9yKDsrK3c8Zy5sZW5ndGg7KWlmKHIuY2FsbChnLHcpKXJldHVybiBPLnZhbHVlPWdbd10sTy5kb25lPSExLE87cmV0dXJuIE8udmFsdWU9dm9pZCAwLE8uZG9uZT0hMCxPfTty''@;'; put 'put ''ZXR1cm4gay5uZXh0PWt9fXJldHVybntuZXh0Om19fWZ1bmN0aW9uIG0oKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiB2LnByb3RvdHlwZT1fLHQoTiwiY29uc3RydWN0b3IiLHt2YWx1ZTpfLGNvbmZpZ3VyYWJsZTohMH0pLHQoXywiY29uc3RydWN0b3IiLHt2YWx1ZTp2''@;'; put 'put ''LGNvbmZpZ3VyYWJsZTohMH0pLHYuZGlzcGxheU5hbWU9aChfLGksIkdlbmVyYXRvckZ1bmN0aW9uIiksYS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGcpe3ZhciB5PSJmdW5jdGlvbiI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yO3JldHVybiEheSYmKHk9PT12fHwiR2VuZXJhdG9y''@;'; put 'put ''RnVuY3Rpb24iPT09KHkuZGlzcGxheU5hbWV8fHkubmFtZSkpfSxhLm1hcms9ZnVuY3Rpb24oZyl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZyxfKTooZy5fX3Byb3RvX189XyxoKGcsaSwiR2VuZXJhdG9yRnVuY3Rpb24iKSksZy5wcm90b3R5''@;'; put 'put ''cGU9T2JqZWN0LmNyZWF0ZShOKSxnfSxhLmF3cmFwPWZ1bmN0aW9uKGcpe3JldHVybntfX2F3YWl0Omd9fSxQKEIucHJvdG90eXBlKSxoKEIucHJvdG90eXBlLG4sZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGEuQXN5bmNJdGVyYXRvcj1CLGEuYXN5bmM9ZnVuY3Rpb24oZyx5LHcsayxPKXt2''@;'; put 'put ''b2lkIDA9PT1PJiYoTz1Qcm9taXNlKTt2YXIgej1uZXcgQihmKGcseSx3LGspLE8pO3JldHVybiBhLmlzR2VuZXJhdG9yRnVuY3Rpb24oeSk/ejp6Lm5leHQoKS50aGVuKGZ1bmN0aW9uKFUpe3JldHVybiBVLmRvbmU/VS52YWx1ZTp6Lm5leHQoKX0pfSxQKE4pLGgoTixpLCJHZW5lcmF0b3Ii''@;'; put 'put ''KSxoKE4sbCxmdW5jdGlvbigpe3JldHVybiB0aGlzfSksaChOLCJ0b1N0cmluZyIsZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pLGEua2V5cz1mdW5jdGlvbihnKXt2YXIgeT1PYmplY3QoZyksdz1bXTtmb3IodmFyIGsgaW4geSl3LnB1c2goayk7cmV0dXJuIHcucmV2''@;'; put 'put ''ZXJzZSgpLGZ1bmN0aW9uIE8oKXtmb3IoO3cubGVuZ3RoOyl7dmFyIHo9dy5wb3AoKTtpZih6IGluIHkpcmV0dXJuIE8udmFsdWU9eixPLmRvbmU9ITEsT31yZXR1cm4gTy5kb25lPSEwLE99fSxhLnZhbHVlcz1jLGoucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpqLHJlc2V0OmZ1bmN0aW9uKGcp''@;'; put 'put ''e2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goTSksIWcpZm9yKHZhciB5IGlu''@;'; put 'put ''IHRoaXMpInQiPT09eS5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHkpJiYhaXNOYU4oK3kuc2xpY2UoMSkpJiYodGhpc1t5XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBnPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1nLnR5cGUp''@;'; put 'put ''dGhyb3cgZy5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZyl7aWYodGhpcy5kb25lKXRocm93IGc7dmFyIHk9dGhpcztmdW5jdGlvbiB3KFIsSCl7cmV0dXJuIHoudHlwZT0idGhyb3ciLHouYXJnPWcseS5uZXh0PVIsSCYmKHkubWV0aG9kPSJuZXh0''@;'; put 'put ''Iix5LmFyZz12b2lkIDApLCEhSH1mb3IodmFyIGs9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2s+PTA7LS1rKXt2YXIgTz10aGlzLnRyeUVudHJpZXNba10sej1PLmNvbXBsZXRpb247aWYoInJvb3QiPT09Ty50cnlMb2MpcmV0dXJuIHcoImVuZCIpO2lmKE8udHJ5TG9jPD10aGlzLnByZXYp''@;'; put 'put ''e3ZhciBVPXIuY2FsbChPLCJjYXRjaExvYyIpLFY9ci5jYWxsKE8sImZpbmFsbHlMb2MiKTtpZihVJiZWKXtpZih0aGlzLnByZXY8Ty5jYXRjaExvYylyZXR1cm4gdyhPLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8Ty5maW5hbGx5TG9jKXJldHVybiB3KE8uZmluYWxseUxvYyl9ZWxzZSBp''@;'; put 'put ''ZihVKXtpZih0aGlzLnByZXY8Ty5jYXRjaExvYylyZXR1cm4gdyhPLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFWKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8Ty5maW5hbGx5TG9jKXJldHVybiB3KE8uZmluYWxs''@;'; put 'put ''eUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihnLHkpe2Zvcih2YXIgdz10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dz49MDstLXcpe3ZhciBrPXRoaXMudHJ5RW50cmllc1t3XTtpZihrLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoaywiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8ay5maW5h''@;'; put 'put ''bGx5TG9jKXt2YXIgTz1rO2JyZWFrfX1PJiYoImJyZWFrIj09PWd8fCJjb250aW51ZSI9PT1nKSYmTy50cnlMb2M8PXkmJnk8PU8uZmluYWxseUxvYyYmKE89bnVsbCk7dmFyIHo9Tz9PLmNvbXBsZXRpb246e307cmV0dXJuIHoudHlwZT1nLHouYXJnPXksTz8odGhpcy5tZXRob2Q9Im5leHQi''@;'; put 'put ''LHRoaXMubmV4dD1PLmZpbmFsbHlMb2MscCk6dGhpcy5jb21wbGV0ZSh6KX0sY29tcGxldGU6ZnVuY3Rpb24oZyx5KXtpZigidGhyb3ciPT09Zy50eXBlKXRocm93IGcuYXJnO3JldHVybiJicmVhayI9PT1nLnR5cGV8fCJjb250aW51ZSI9PT1nLnR5cGU/dGhpcy5uZXh0PWcuYXJnOiJyZXR1''@;'; put 'put ''cm4iPT09Zy50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9Zy5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWcudHlwZSYmeSYmKHRoaXMubmV4dD15KSxwfSxmaW5pc2g6ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PXRoaXMudHJ5RW50cmllcy5sZW5n''@;'; put 'put ''dGgtMTt5Pj0wOy0teSl7dmFyIHc9dGhpcy50cnlFbnRyaWVzW3ldO2lmKHcuZmluYWxseUxvYz09PWcpcmV0dXJuIHRoaXMuY29tcGxldGUody5jb21wbGV0aW9uLHcuYWZ0ZXJMb2MpLE0odykscH19LGNhdGNoOmZ1bmN0aW9uKGcpe2Zvcih2YXIgeT10aGlzLnRyeUVudHJpZXMubGVuZ3Ro''@;'; put 'put ''LTE7eT49MDstLXkpe3ZhciB3PXRoaXMudHJ5RW50cmllc1t5XTtpZih3LnRyeUxvYz09PWcpe3ZhciBrPXcuY29tcGxldGlvbjtpZigidGhyb3ciPT09ay50eXBlKXt2YXIgTz1rLmFyZztNKHcpfXJldHVybiBPfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxk''@;'; put 'put ''ZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGcseSx3KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6YyhnKSxyZXN1bHROYW1lOnksbmV4dExvYzp3fSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCkscH19LGF9KCJvYmplY3QiPT10eXBlb2YgRT9FLmV4cG9ydHM6''@;'; put 'put ''e30pO3RyeXtyZWdlbmVyYXRvclJ1bnRpbWU9Yn1jYXRjaHsib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWU9YjpGdW5jdGlvbigiciIsInJlZ2VuZXJhdG9yUnVudGltZSA9IHIiKShiKX19LHt9XSw0OTM6W2Z1bmN0aW9uKHMsRSxTKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIGI9cygiYnVmZmVyIikuQnVmZmVyLGE9cygiaW5oZXJpdHMiKSxvPXMoImhhc2gtYmFzZSIpLHI9bmV3IEFycmF5KDE2KSx0PVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgs''@;'; put 'put ''MywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLGU9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcs''@;'; put 'put ''MCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sbD1bMTEsMTQsMTUsMTIsNSw4LDcs''@;'; put 'put ''OSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwx''@;'; put 'put ''MiwxMywxNCwxMSw4LDUsNl0sbj1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5''@;'; put 'put ''LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV0saT1bMCwxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwyODQwODUzODM4XSxoPVsxMzUyODI5OTI2LDE1NDg2MDM2ODQsMTgzNjA3MjY5MSwyMDUzOTk0MjE3LDBdO2Z1bmN0aW9u''@;'; put 'put ''IGYoKXtvLmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwfWZ1bmN0aW9uIHUoSSxMKXtyZXR1cm4gSTw8THxJPj4+MzItTH1mdW5jdGlvbiBwKEks''@;'; put 'put ''TCxOLFAsQiwkLEQseCl7cmV0dXJuIHUoSSsoTF5OXlApKyQrRHwwLHgpK0J8MH1mdW5jdGlvbiBkKEksTCxOLFAsQiwkLEQseCl7cmV0dXJuIHUoSSsoTCZOfH5MJlApKyQrRHwwLHgpK0J8MH1mdW5jdGlvbiB2KEksTCxOLFAsQiwkLEQseCl7cmV0dXJuIHUoSSsoKEx8fk4pXlApKyQrRHww''@;'; put 'put ''LHgpK0J8MH1mdW5jdGlvbiBfKEksTCxOLFAsQiwkLEQseCl7cmV0dXJuIHUoSSsoTCZQfE4mflApKyQrRHwwLHgpK0J8MH1mdW5jdGlvbiBBKEksTCxOLFAsQiwkLEQseCl7cmV0dXJuIHUoSSsoTF4oTnx+UCkpKyQrRHwwLHgpK0J8MH1hKGYsbyksZi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5j''@;'; put 'put ''dGlvbigpe2Zvcih2YXIgST1yLEw9MDtMPDE2OysrTClJW0xdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqTCk7Zm9yKHZhciBOPTB8dGhpcy5fYSxQPTB8dGhpcy5fYixCPTB8dGhpcy5fYywkPTB8dGhpcy5fZCxEPTB8dGhpcy5fZSx4PTB8dGhpcy5fYSxNPTB8dGhpcy5fYixqPTB8dGhp''@;'; put 'put ''cy5fYyxjPTB8dGhpcy5fZCxtPTB8dGhpcy5fZSxnPTA7Zzw4MDtnKz0xKXt2YXIgeSx3O2c8MTY/KHk9cChOLFAsQiwkLEQsSVt0W2ddXSxpWzBdLGxbZ10pLHc9QSh4LE0saixjLG0sSVtlW2ddXSxoWzBdLG5bZ10pKTpnPDMyPyh5PWQoTixQLEIsJCxELElbdFtnXV0saVsxXSxsW2ddKSx3''@;'; put 'put ''PV8oeCxNLGosYyxtLElbZVtnXV0saFsxXSxuW2ddKSk6Zzw0OD8oeT12KE4sUCxCLCQsRCxJW3RbZ11dLGlbMl0sbFtnXSksdz12KHgsTSxqLGMsbSxJW2VbZ11dLGhbMl0sbltnXSkpOmc8NjQ/KHk9XyhOLFAsQiwkLEQsSVt0W2ddXSxpWzNdLGxbZ10pLHc9ZCh4LE0saixjLG0sSVtlW2dd''@;'; put 'put ''XSxoWzNdLG5bZ10pKTooeT1BKE4sUCxCLCQsRCxJW3RbZ11dLGlbNF0sbFtnXSksdz1wKHgsTSxqLGMsbSxJW2VbZ11dLGhbNF0sbltnXSkpLE49RCxEPSQsJD11KEIsMTApLEI9UCxQPXkseD1tLG09YyxjPXUoaiwxMCksaj1NLE09d312YXIgaz10aGlzLl9iK0IrY3wwO3RoaXMuX2I9dGhp''@;'; put 'put ''cy5fYyskK218MCx0aGlzLl9jPXRoaXMuX2QrRCt4fDAsdGhpcy5fZD10aGlzLl9lK04rTXwwLHRoaXMuX2U9dGhpcy5fYStQK2p8MCx0aGlzLl9hPWt9LGYucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhpcy5fYmxv''@;'; put 'put ''Y2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9s''@;'; put 'put ''ZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgST1iLmFsbG9jP2IuYWxsb2MoMjApOm5ldyBiKDIwKTtyZXR1cm4gSS53cml0ZUludDMyTEUodGhpcy5fYSwwKSxJLndyaXRlSW50MzJMRSh0aGlzLl9i''@;'; put 'put ''LDQpLEkud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksSS53cml0ZUludDMyTEUodGhpcy5fZCwxMiksSS53cml0ZUludDMyTEUodGhpcy5fZSwxNiksSX0sRS5leHBvcnRzPWZ9LHtidWZmZXI6MjIwLCJoYXNoLWJhc2UiOjQyNSxpbmhlcml0czo0NDB9XSw0OTQ6W2Z1bmN0aW9uKHMsRSxTKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIGI9cygiYnVmZmVyIiksYT1iLkJ1ZmZlcjtmdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciBsIGluIHQpZVtsXT10W2xdfWZ1bmN0aW9uIHIodCxlLGwpe3JldHVybiBhKHQsZSxsKX1hLmZyb20mJmEuYWxsb2MmJmEuYWxsb2NVbnNhZmUmJmEuYWxsb2NVbnNhZmVTbG93''@;'; put 'put ''P0UuZXhwb3J0cz1iOihvKGIsUyksUy5CdWZmZXI9ciksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSksbyhhLHIpLHIuZnJvbT1mdW5jdGlvbih0LGUsbCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJl''@;'; put 'put ''IGEgbnVtYmVyIik7cmV0dXJuIGEodCxlLGwpfSxyLmFsbG9jPWZ1bmN0aW9uKHQsZSxsKXtpZigibnVtYmVyIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBuPWEodCk7cmV0dXJuIHZvaWQgMCE9PWU/InN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBsP24uZmlsbChlLGwpOm4uZmlsbChlKTpuLmZpbGwoMCksbn0sci5hbGxvY1Vuc2FmZT1mdW5jdGlvbih0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBhKHQpfSxyLmFsbG9jVW5zYWZl''@;'; put 'put ''U2xvdz1mdW5jdGlvbih0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBiLlNsb3dCdWZmZXIodCl9fSx7YnVmZmVyOjIyMH1dLDQ5NTpbZnVuY3Rpb24ocyxFLFMpeyhmdW5jdGlvbihiKXsoZnVu''@;'; put 'put ''Y3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGEsbz1zKCJidWZmZXIiKSxyPW8uQnVmZmVyLHQ9e307Zm9yKGEgaW4gbylvLmhhc093blByb3BlcnR5KGEpJiYiU2xvd0J1ZmZlciIhPT1hJiYiQnVmZmVyIiE9PWEmJih0W2FdPW9bYV0pO3ZhciBlPXQuQnVmZmVyPXt9O2ZvcihhIGluIHIpci5o''@;'; put 'put ''YXNPd25Qcm9wZXJ0eShhKSYmImFsbG9jVW5zYWZlIiE9PWEmJiJhbGxvY1Vuc2FmZVNsb3ciIT09YSYmKGVbYV09clthXSk7aWYodC5CdWZmZXIucHJvdG90eXBlPXIucHJvdG90eXBlLGUuZnJvbSYmZS5mcm9tIT09VWludDhBcnJheS5mcm9tfHwoZS5mcm9tPWZ1bmN0aW9uKGwsbixpKXtp''@;'; put 'put ''ZigibnVtYmVyIj09dHlwZW9mIGwpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgbCk7aWYobCYmdm9pZCAwPT09bC5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhl''@;'; put 'put ''IGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgbCk7cmV0dXJuIHIobCxuLGkpfSksZS5hbGxvY3x8KGUuYWxsb2M9ZnVuY3Rpb24o''@;'; put 'put ''bCxuLGkpe2lmKCJudW1iZXIiIT10eXBlb2YgbCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgbCk7aWYobDwwfHxsPj0yKigxPDwzMCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1Ro''@;'; put 'put ''ZSB2YWx1ZSAiJytsKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTt2YXIgaD1yKGwpO3JldHVybiBuJiYwIT09bi5sZW5ndGg/InN0cmluZyI9PXR5cGVvZiBpP2guZmlsbChuLGkpOmguZmlsbChuKTpoLmZpbGwoMCksaH0pLCF0LmtTdHJpbmdNYXhMZW5ndGgpdHJ5e3Qua1N0''@;'; put 'put ''cmluZ01heExlbmd0aD1iLmJpbmRpbmcoImJ1ZmZlciIpLmtTdHJpbmdNYXhMZW5ndGh9Y2F0Y2h7fXQuY29uc3RhbnRzfHwodC5jb25zdGFudHM9e01BWF9MRU5HVEg6dC5rTWF4TGVuZ3RofSx0LmtTdHJpbmdNYXhMZW5ndGgmJih0LmNvbnN0YW50cy5NQVhfU1RSSU5HX0xFTkdUSD10LmtT''@;'; put 'put ''dHJpbmdNYXhMZW5ndGgpKSxFLmV4cG9ydHM9dH0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMscygiX3Byb2Nlc3MiKSl9LHtfcHJvY2Vzczo0NjcsYnVmZmVyOjIyMH1dLDQ5NjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUywiX19lc01vZHVs''@;'; put 'put ''ZSIse3ZhbHVlOiEwfSk7Y29uc3QgYj1zKCJ4bWxjaGFycy94bWwvMS4wL2VkNSIpLGE9cygieG1sY2hhcnMveG1sLzEuMS9lZDIiKSxvPXMoInhtbGNoYXJzL3htbG5zLzEuMC9lZDMiKTt2YXIgcj1iLmlzUyx0PWIuaXNDaGFyLGU9Yi5pc05hbWVTdGFydENoYXIsbD1iLmlzTmFtZUNoYXIs''@;'; put 'put ''bj1iLlNfTElTVCxpPWIuTkFNRV9SRSxoPWEuaXNDaGFyLGY9by5pc05DTmFtZVN0YXJ0Q2hhcix1PW8uaXNOQ05hbWVDaGFyLHA9by5OQ19OQU1FX1JFO2NvbnN0IGQ9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsdj0iaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxu''@;'; put 'put ''cy8iLF89e19fcHJvdG9fXzpudWxsLHhtbDpkLHhtbG5zOnZ9LEE9e19fcHJvdG9fXzpudWxsLGFtcDoiJiIsZ3Q6Ij4iLGx0OiI8IixxdW90OiciJyxhcG9zOiInIn0sST1jPT4zND09PWN8fDM5PT09YyxMPVszNCwzOV0sTj1bLi4uTCw5MSw2Ml0sUD1bLi4uTCw2MCw5M10sQj1bNjEsNjMs''@;'; put 'put ''Li4ubl0sJD1bLi4ubiw2MiwzOCw2MF07ZnVuY3Rpb24gRChjLG0sZyl7c3dpdGNoKG0pe2Nhc2UieG1sIjpnIT09ZCYmYy5mYWlsKGB4bWwgcHJlZml4IG11c3QgYmUgYm91bmQgdG8gJHtkfS5gKTticmVhaztjYXNlInhtbG5zIjpnIT09diYmYy5mYWlsKGB4bWxucyBwcmVmaXggbXVzdCBi''@;'; put 'put ''ZSBib3VuZCB0byAke3Z9LmApfXN3aXRjaChnKXtjYXNlIHY6Yy5mYWlsKCIiPT09bT9gdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG1heSBub3QgYmUgc2V0IHRvICR7Z30uYDpgbWF5IG5vdCBhc3NpZ24gYSBwcmVmaXggKGV2ZW4gInhtbG5zIikgdG8gdGhlIFVSSSAke3Z9LmApO2JyZWFrO2Nh''@;'; put 'put ''c2UgZDpzd2l0Y2gobSl7Y2FzZSJ4bWwiOmJyZWFrO2Nhc2UiIjpjLmZhaWwoYHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBtYXkgbm90IGJlIHNldCB0byAke2d9LmApO2JyZWFrO2RlZmF1bHQ6Yy5mYWlsKCJtYXkgbm90IGFzc2lnbiB0aGUgeG1sIG5hbWVzcGFjZSB0byBhbm90aGVyIHByZWZp''@;'; put 'put ''eC4iKX19fWNvbnN0IHg9Yz0+cC50ZXN0KGMpLE09Yz0+aS50ZXN0KGMpO1MuRVZFTlRTPVsieG1sZGVjbCIsInRleHQiLCJwcm9jZXNzaW5naW5zdHJ1Y3Rpb24iLCJkb2N0eXBlIiwiY29tbWVudCIsIm9wZW50YWdzdGFydCIsImF0dHJpYnV0ZSIsIm9wZW50YWciLCJjbG9zZXRhZyIsImNk''@;'; put 'put ''YXRhIiwiZXJyb3IiLCJlbmQiLCJyZWFkeSJdO2NvbnN0IGo9e3htbGRlY2w6InhtbGRlY2xIYW5kbGVyIix0ZXh0OiJ0ZXh0SGFuZGxlciIscHJvY2Vzc2luZ2luc3RydWN0aW9uOiJwaUhhbmRsZXIiLGRvY3R5cGU6ImRvY3R5cGVIYW5kbGVyIixjb21tZW50OiJjb21tZW50SGFuZGxlciIs''@;'; put 'put ''b3BlbnRhZ3N0YXJ0OiJvcGVuVGFnU3RhcnRIYW5kbGVyIixhdHRyaWJ1dGU6ImF0dHJpYnV0ZUhhbmRsZXIiLG9wZW50YWc6Im9wZW5UYWdIYW5kbGVyIixjbG9zZXRhZzoiY2xvc2VUYWdIYW5kbGVyIixjZGF0YToiY2RhdGFIYW5kbGVyIixlcnJvcjoiZXJyb3JIYW5kbGVyIixlbmQ6ImVu''@;'; put 'put ''ZEhhbmRsZXIiLHJlYWR5OiJyZWFkeUhhbmRsZXIifTtTLlNheGVzUGFyc2VyPWNsYXNze2NvbnN0cnVjdG9yKGMpe3RoaXMub3B0PWM/P3t9LHRoaXMuZnJhZ21lbnRPcHQ9ISF0aGlzLm9wdC5mcmFnbWVudDtjb25zdCBtPXRoaXMueG1sbnNPcHQ9ISF0aGlzLm9wdC54bWxucztpZih0aGlz''@;'; put 'put ''LnRyYWNrUG9zaXRpb249ITEhPT10aGlzLm9wdC5wb3NpdGlvbix0aGlzLmZpbGVOYW1lPXRoaXMub3B0LmZpbGVOYW1lLG0pe3RoaXMubmFtZVN0YXJ0Q2hlY2s9Zix0aGlzLm5hbWVDaGVjaz11LHRoaXMuaXNOYW1lPXgsdGhpcy5wcm9jZXNzQXR0cmlicz10aGlzLnByb2Nlc3NBdHRyaWJz''@;'; put 'put ''TlMsdGhpcy5wdXNoQXR0cmliPXRoaXMucHVzaEF0dHJpYk5TLHRoaXMubnM9T2JqZWN0LmFzc2lnbih7X19wcm90b19fOm51bGx9LF8pO2NvbnN0IGc9dGhpcy5vcHQuYWRkaXRpb25hbE5hbWVzcGFjZXM7bnVsbCE9ZyYmKGZ1bmN0aW9uKHksdyl7Zm9yKGNvbnN0IGsgb2YgT2JqZWN0Lmtl''@;'; put 'put ''eXModykpRCh5LGssd1trXSl9KHRoaXMsZyksT2JqZWN0LmFzc2lnbih0aGlzLm5zLGcpKX1lbHNlIHRoaXMubmFtZVN0YXJ0Q2hlY2s9ZSx0aGlzLm5hbWVDaGVjaz1sLHRoaXMuaXNOYW1lPU0sdGhpcy5wcm9jZXNzQXR0cmlicz10aGlzLnByb2Nlc3NBdHRyaWJzUGxhaW4sdGhpcy5wdXNo''@;'; put 'put ''QXR0cmliPXRoaXMucHVzaEF0dHJpYlBsYWluO3RoaXMuc3RhdGVUYWJsZT1bdGhpcy5zQmVnaW4sdGhpcy5zQmVnaW5XaGl0ZXNwYWNlLHRoaXMuc0RvY3R5cGUsdGhpcy5zRG9jdHlwZVF1b3RlLHRoaXMuc0RURCx0aGlzLnNEVERRdW90ZWQsdGhpcy5zRFRET3Blbldha2EsdGhpcy5zRFRE''@;'; put 'put ''T3Blbldha2FCYW5nLHRoaXMuc0RURENvbW1lbnQsdGhpcy5zRFREQ29tbWVudEVuZGluZyx0aGlzLnNEVERDb21tZW50RW5kZWQsdGhpcy5zRFREUEksdGhpcy5zRFREUElFbmRpbmcsdGhpcy5zVGV4dCx0aGlzLnNFbnRpdHksdGhpcy5zT3Blbldha2EsdGhpcy5zT3Blbldha2FCYW5nLHRo''@;'; put 'put ''aXMuc0NvbW1lbnQsdGhpcy5zQ29tbWVudEVuZGluZyx0aGlzLnNDb21tZW50RW5kZWQsdGhpcy5zQ0RhdGEsdGhpcy5zQ0RhdGFFbmRpbmcsdGhpcy5zQ0RhdGFFbmRpbmcyLHRoaXMuc1BJRmlyc3RDaGFyLHRoaXMuc1BJUmVzdCx0aGlzLnNQSUJvZHksdGhpcy5zUElFbmRpbmcsdGhpcy5z''@;'; put 'put ''WE1MRGVjbE5hbWVTdGFydCx0aGlzLnNYTUxEZWNsTmFtZSx0aGlzLnNYTUxEZWNsRXEsdGhpcy5zWE1MRGVjbFZhbHVlU3RhcnQsdGhpcy5zWE1MRGVjbFZhbHVlLHRoaXMuc1hNTERlY2xTZXBhcmF0b3IsdGhpcy5zWE1MRGVjbEVuZGluZyx0aGlzLnNPcGVuVGFnLHRoaXMuc09wZW5UYWdT''@;'; put 'put ''bGFzaCx0aGlzLnNBdHRyaWIsdGhpcy5zQXR0cmliTmFtZSx0aGlzLnNBdHRyaWJOYW1lU2F3V2hpdGUsdGhpcy5zQXR0cmliVmFsdWUsdGhpcy5zQXR0cmliVmFsdWVRdW90ZWQsdGhpcy5zQXR0cmliVmFsdWVDbG9zZWQsdGhpcy5zQXR0cmliVmFsdWVVbnF1b3RlZCx0aGlzLnNDbG9zZVRh''@;'; put 'put ''Zyx0aGlzLnNDbG9zZVRhZ1Nhd1doaXRlXSx0aGlzLl9pbml0KCl9Z2V0IGNsb3NlZCgpe3JldHVybiB0aGlzLl9jbG9zZWR9X2luaXQoKXt2YXIgYzt0aGlzLm9wZW5XYWthQmFuZz0iIix0aGlzLnRleHQ9IiIsdGhpcy5uYW1lPSIiLHRoaXMucGlUYXJnZXQ9IiIsdGhpcy5lbnRpdHk9IiIs''@;'; put 'put ''dGhpcy5xPW51bGwsdGhpcy50YWdzPVtdLHRoaXMudGFnPW51bGwsdGhpcy50b3BOUz1udWxsLHRoaXMuY2h1bms9IiIsdGhpcy5jaHVua1Bvc2l0aW9uPTAsdGhpcy5pPTAsdGhpcy5wcmV2ST0wLHRoaXMuY2FycmllZEZyb21QcmV2aW91cz12b2lkIDAsdGhpcy5mb3JiaWRkZW5TdGF0ZT0w''@;'; put 'put ''LHRoaXMuYXR0cmliTGlzdD1bXTtjb25zdHtmcmFnbWVudE9wdDptfT10aGlzO3RoaXMuc3RhdGU9bT8xMzowLHRoaXMucmVwb3J0ZWRUZXh0QmVmb3JlUm9vdD10aGlzLnJlcG9ydGVkVGV4dEFmdGVyUm9vdD10aGlzLmNsb3NlZFJvb3Q9dGhpcy5zYXdSb290PW0sdGhpcy54bWxEZWNsUG9z''@;'; put 'put ''c2libGU9IW0sdGhpcy54bWxEZWNsRXhwZWN0cz1bInZlcnNpb24iXSx0aGlzLmVudGl0eVJldHVyblN0YXRlPXZvaWQgMDtsZXR7ZGVmYXVsdFhNTFZlcnNpb246Z309dGhpcy5vcHQ7aWYodm9pZCAwPT09Zyl7aWYoITA9PT10aGlzLm9wdC5mb3JjZVhNTFZlcnNpb24pdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJmb3JjZVhNTFZlcnNpb24gc2V0IGJ1dCBkZWZhdWx0WE1MVmVyc2lvbiBpcyBub3Qgc2V0Iik7Zz0iMS4wIn10aGlzLnNldFhNTFZlcnNpb24oZyksdGhpcy5wb3NpdGlvbkF0TmV3TGluZT0wLHRoaXMuZG9jdHlwZT0hMSx0aGlzLl9jbG9zZWQ9ITEsdGhpcy54bWxEZWNsPXt2ZXJz''@;'; put 'put ''aW9uOnZvaWQgMCxlbmNvZGluZzp2b2lkIDAsc3RhbmRhbG9uZTp2b2lkIDB9LHRoaXMubGluZT0xLHRoaXMuY29sdW1uPTAsdGhpcy5FTlRJVElFUz1PYmplY3QuY3JlYXRlKEEpLG51bGw9PT0oYz10aGlzLnJlYWR5SGFuZGxlcil8fHZvaWQgMD09PWN8fGMuY2FsbCh0aGlzKX1nZXQgcG9z''@;'; put 'put ''aXRpb24oKXtyZXR1cm4gdGhpcy5jaHVua1Bvc2l0aW9uK3RoaXMuaX1nZXQgY29sdW1uSW5kZXgoKXtyZXR1cm4gdGhpcy5wb3NpdGlvbi10aGlzLnBvc2l0aW9uQXROZXdMaW5lfW9uKGMsbSl7dGhpc1tqW2NdXT1tfW9mZihjKXt0aGlzW2pbY11dPXZvaWQgMH1tYWtlRXJyb3IoYyl7dmFy''@;'; put 'put ''IG07bGV0IGc9bnVsbCE9PShtPXRoaXMuZmlsZU5hbWUpJiZ2b2lkIDAhPT1tP206IiI7cmV0dXJuIHRoaXMudHJhY2tQb3NpdGlvbiYmKGcubGVuZ3RoPjAmJihnKz0iOiIpLGcrPWAke3RoaXMubGluZX06JHt0aGlzLmNvbHVtbn1gKSxnLmxlbmd0aD4wJiYoZys9IjogIiksbmV3IEVycm9y''@;'; put 'put ''KGcrYyl9ZmFpbChjKXtjb25zdCBtPXRoaXMubWFrZUVycm9yKGMpLGc9dGhpcy5lcnJvckhhbmRsZXI7aWYodm9pZCAwPT09Zyl0aHJvdyBtO3JldHVybiBnKG0pLHRoaXN9d3JpdGUoYyl7aWYodGhpcy5jbG9zZWQpcmV0dXJuIHRoaXMuZmFpbCgiY2Fubm90IHdyaXRlIGFmdGVyIGNsb3Nl''@;'; put 'put ''OyBhc3NpZ24gYW4gb25yZWFkeSBoYW5kbGVyLiIpO2xldCBtPSExO251bGw9PT1jPyhtPSEwLGM9IiIpOiJvYmplY3QiPT10eXBlb2YgYyYmKGM9Yy50b1N0cmluZygpKSx2b2lkIDAhPT10aGlzLmNhcnJpZWRGcm9tUHJldmlvdXMmJihjPWAke3RoaXMuY2FycmllZEZyb21QcmV2aW91c30k''@;'; put 'put ''e2N9YCx0aGlzLmNhcnJpZWRGcm9tUHJldmlvdXM9dm9pZCAwKTtsZXQgZz1jLmxlbmd0aDtjb25zdCB5PWMuY2hhckNvZGVBdChnLTEpOyFtJiYoMTM9PT15fHx5Pj01NTI5NiYmeTw9NTYzMTkpJiYodGhpcy5jYXJyaWVkRnJvbVByZXZpb3VzPWNbZy0xXSxnLS0sYz1jLnNsaWNlKDAsZykp''@;'; put 'put ''O2NvbnN0e3N0YXRlVGFibGU6d309dGhpcztmb3IodGhpcy5jaHVuaz1jLHRoaXMuaT0wO3RoaXMuaTxnOyl3W3RoaXMuc3RhdGVdLmNhbGwodGhpcyk7cmV0dXJuIHRoaXMuY2h1bmtQb3NpdGlvbis9ZyxtP3RoaXMuZW5kKCk6dGhpc31jbG9zZSgpe3JldHVybiB0aGlzLndyaXRlKG51bGwp''@;'; put 'put ''fWdldENvZGUxMCgpe2NvbnN0e2NodW5rOmMsaTptfT10aGlzO2lmKHRoaXMucHJldkk9bSx0aGlzLmk9bSsxLG0+PWMubGVuZ3RoKXJldHVybi0xO2NvbnN0IGc9Yy5jaGFyQ29kZUF0KG0pO2lmKHRoaXMuY29sdW1uKyssZzw1NTI5Nil7aWYoZz49MzJ8fDk9PT1nKXJldHVybiBnO3N3aXRj''@;'; put 'put ''aChnKXtjYXNlIDEwOnJldHVybiB0aGlzLmxpbmUrKyx0aGlzLmNvbHVtbj0wLHRoaXMucG9zaXRpb25BdE5ld0xpbmU9dGhpcy5wb3NpdGlvbiwxMDtjYXNlIDEzOnJldHVybiAxMD09PWMuY2hhckNvZGVBdChtKzEpJiYodGhpcy5pPW0rMiksdGhpcy5saW5lKyssdGhpcy5jb2x1bW49MCx0''@;'; put 'put ''aGlzLnBvc2l0aW9uQXROZXdMaW5lPXRoaXMucG9zaXRpb24sLTI7ZGVmYXVsdDpyZXR1cm4gdGhpcy5mYWlsKCJkaXNhbGxvd2VkIGNoYXJhY3Rlci4iKSxnfX1pZihnPjU2MzE5KXJldHVybiBnPj01NzM0NCYmZzw9NjU1MzN8fHRoaXMuZmFpbCgiZGlzYWxsb3dlZCBjaGFyYWN0ZXIuIiks''@;'; put 'put ''Zztjb25zdCB5PTY1NTM2KzEwMjQqKGctNTUyOTYpKyhjLmNoYXJDb2RlQXQobSsxKS01NjMyMCk7cmV0dXJuIHRoaXMuaT1tKzIseT4xMTE0MTExJiZ0aGlzLmZhaWwoImRpc2FsbG93ZWQgY2hhcmFjdGVyLiIpLHl9Z2V0Q29kZTExKCl7Y29uc3R7Y2h1bms6YyxpOm19PXRoaXM7aWYodGhp''@;'; put 'put ''cy5wcmV2ST1tLHRoaXMuaT1tKzEsbT49Yy5sZW5ndGgpcmV0dXJuLTE7Y29uc3QgZz1jLmNoYXJDb2RlQXQobSk7aWYodGhpcy5jb2x1bW4rKyxnPDU1Mjk2KXtpZihnPjMxJiZnPDEyN3x8Zz4xNTkmJjgyMzIhPT1nfHw5PT09ZylyZXR1cm4gZztzd2l0Y2goZyl7Y2FzZSAxMDpyZXR1cm4g''@;'; put 'put ''dGhpcy5saW5lKyssdGhpcy5jb2x1bW49MCx0aGlzLnBvc2l0aW9uQXROZXdMaW5lPXRoaXMucG9zaXRpb24sMTA7Y2FzZSAxMzp7Y29uc3Qgdz1jLmNoYXJDb2RlQXQobSsxKTsxMCE9PXcmJjEzMyE9PXd8fCh0aGlzLmk9bSsyKX1jYXNlIDEzMzpjYXNlIDgyMzI6cmV0dXJuIHRoaXMubGlu''@;'; put 'put ''ZSsrLHRoaXMuY29sdW1uPTAsdGhpcy5wb3NpdGlvbkF0TmV3TGluZT10aGlzLnBvc2l0aW9uLC0yO2RlZmF1bHQ6cmV0dXJuIHRoaXMuZmFpbCgiZGlzYWxsb3dlZCBjaGFyYWN0ZXIuIiksZ319aWYoZz41NjMxOSlyZXR1cm4gZz49NTczNDQmJmc8PTY1NTMzfHx0aGlzLmZhaWwoImRpc2Fs''@;'; put 'put ''bG93ZWQgY2hhcmFjdGVyLiIpLGc7Y29uc3QgeT02NTUzNisxMDI0KihnLTU1Mjk2KSsoYy5jaGFyQ29kZUF0KG0rMSktNTYzMjApO3JldHVybiB0aGlzLmk9bSsyLHk+MTExNDExMSYmdGhpcy5mYWlsKCJkaXNhbGxvd2VkIGNoYXJhY3Rlci4iKSx5fWdldENvZGVOb3JtKCl7Y29uc3QgYz10''@;'; put 'put ''aGlzLmdldENvZGUoKTtyZXR1cm4tMj09PWM/MTA6Y311bmdldCgpe3RoaXMuaT10aGlzLnByZXZJLHRoaXMuY29sdW1uLS19Y2FwdHVyZVRvKGMpe2xldHtpOm19PXRoaXM7Y29uc3R7Y2h1bms6Z309dGhpcztmb3IoOzspe2NvbnN0IHk9dGhpcy5nZXRDb2RlKCksdz0tMj09PXksaz13PzEw''@;'; put 'put ''Onk7aWYoLTE9PT1rfHxjLmluY2x1ZGVzKGspKXJldHVybiB0aGlzLnRleHQrPWcuc2xpY2UobSx0aGlzLnByZXZJKSxrO3cmJih0aGlzLnRleHQrPWcuc2xpY2UobSx0aGlzLnByZXZJKSsiXG4iLG09dGhpcy5pKX19Y2FwdHVyZVRvQ2hhcihjKXtsZXR7aTptfT10aGlzO2NvbnN0e2NodW5r''@;'; put 'put ''Omd9PXRoaXM7Zm9yKDs7KXtsZXQgeT10aGlzLmdldENvZGUoKTtzd2l0Y2goeSl7Y2FzZS0yOnRoaXMudGV4dCs9Zy5zbGljZShtLHRoaXMucHJldkkpKyJcbiIsbT10aGlzLmkseT0xMDticmVhaztjYXNlLTE6cmV0dXJuIHRoaXMudGV4dCs9Zy5zbGljZShtKSwhMX1pZih5PT09YylyZXR1''@;'; put 'put ''cm4gdGhpcy50ZXh0Kz1nLnNsaWNlKG0sdGhpcy5wcmV2SSksITB9fWNhcHR1cmVOYW1lQ2hhcnMoKXtjb25zdHtjaHVuazpjLGk6bX09dGhpcztmb3IoOzspe2NvbnN0IGc9dGhpcy5nZXRDb2RlKCk7aWYoLTE9PT1nKXJldHVybiB0aGlzLm5hbWUrPWMuc2xpY2UobSksLTE7aWYoIWwoZykp''@;'; put 'put ''cmV0dXJuIHRoaXMubmFtZSs9Yy5zbGljZShtLHRoaXMucHJldkkpLC0yPT09Zz8xMDpnfX1za2lwU3BhY2VzKCl7Zm9yKDs7KXtjb25zdCBjPXRoaXMuZ2V0Q29kZU5vcm0oKTtpZigtMT09PWN8fCFyKGMpKXJldHVybiBjfX1zZXRYTUxWZXJzaW9uKGMpe3RoaXMuY3VycmVudFhNTFZlcnNp''@;'; put 'put ''b249YywiMS4wIj09PWM/KHRoaXMuaXNDaGFyPXQsdGhpcy5nZXRDb2RlPXRoaXMuZ2V0Q29kZTEwKToodGhpcy5pc0NoYXI9aCx0aGlzLmdldENvZGU9dGhpcy5nZXRDb2RlMTEpfXNCZWdpbigpezY1Mjc5PT09dGhpcy5jaHVuay5jaGFyQ29kZUF0KDApJiYodGhpcy5pKyssdGhpcy5jb2x1''@;'; put 'put ''bW4rKyksdGhpcy5zdGF0ZT0xfXNCZWdpbldoaXRlc3BhY2UoKXtjb25zdCBjPXRoaXMuaSxtPXRoaXMuc2tpcFNwYWNlcygpO3N3aXRjaCh0aGlzLnByZXZJIT09YyYmKHRoaXMueG1sRGVjbFBvc3NpYmxlPSExKSxtKXtjYXNlIDYwOmlmKHRoaXMuc3RhdGU9MTUsMCE9PXRoaXMudGV4dC5s''@;'; put 'put ''ZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJuby1lbXB0eSB0ZXh0IGF0IHN0YXJ0Iik7YnJlYWs7Y2FzZS0xOmJyZWFrO2RlZmF1bHQ6dGhpcy51bmdldCgpLHRoaXMuc3RhdGU9MTMsdGhpcy54bWxEZWNsUG9zc2libGU9ITF9fXNEb2N0eXBlKCl7dmFyIGM7Y29uc3QgbT10aGlzLmNhcHR1cmVU''@;'; put 'put ''byhOKTtzd2l0Y2gobSl7Y2FzZSA2MjpudWxsPT09KGM9dGhpcy5kb2N0eXBlSGFuZGxlcil8fHZvaWQgMD09PWN8fGMuY2FsbCh0aGlzLHRoaXMudGV4dCksdGhpcy50ZXh0PSIiLHRoaXMuc3RhdGU9MTMsdGhpcy5kb2N0eXBlPSEwO2JyZWFrO2Nhc2UtMTpicmVhaztkZWZhdWx0OnRoaXMu''@;'; put 'put ''dGV4dCs9U3RyaW5nLmZyb21Db2RlUG9pbnQobSksOTE9PT1tP3RoaXMuc3RhdGU9NDpJKG0pJiYodGhpcy5zdGF0ZT0zLHRoaXMucT1tKX19c0RvY3R5cGVRdW90ZSgpe2NvbnN0IGM9dGhpcy5xO3RoaXMuY2FwdHVyZVRvQ2hhcihjKSYmKHRoaXMudGV4dCs9U3RyaW5nLmZyb21Db2RlUG9p''@;'; put 'put ''bnQoYyksdGhpcy5xPW51bGwsdGhpcy5zdGF0ZT0yKX1zRFREKCl7Y29uc3QgYz10aGlzLmNhcHR1cmVUbyhQKTstMSE9PWMmJih0aGlzLnRleHQrPVN0cmluZy5mcm9tQ29kZVBvaW50KGMpLDkzPT09Yz90aGlzLnN0YXRlPTI6NjA9PT1jP3RoaXMuc3RhdGU9NjpJKGMpJiYodGhpcy5zdGF0''@;'; put 'put ''ZT01LHRoaXMucT1jKSl9c0RURFF1b3RlZCgpe2NvbnN0IGM9dGhpcy5xO3RoaXMuY2FwdHVyZVRvQ2hhcihjKSYmKHRoaXMudGV4dCs9U3RyaW5nLmZyb21Db2RlUG9pbnQoYyksdGhpcy5zdGF0ZT00LHRoaXMucT1udWxsKX1zRFRET3Blbldha2EoKXtjb25zdCBjPXRoaXMuZ2V0Q29kZU5v''@;'; put 'put ''cm0oKTtzd2l0Y2godGhpcy50ZXh0Kz1TdHJpbmcuZnJvbUNvZGVQb2ludChjKSxjKXtjYXNlIDMzOnRoaXMuc3RhdGU9Nyx0aGlzLm9wZW5XYWthQmFuZz0iIjticmVhaztjYXNlIDYzOnRoaXMuc3RhdGU9MTE7YnJlYWs7ZGVmYXVsdDp0aGlzLnN0YXRlPTR9fXNEVERPcGVuV2FrYUJhbmco''@;'; put 'put ''KXtjb25zdCBjPVN0cmluZy5mcm9tQ29kZVBvaW50KHRoaXMuZ2V0Q29kZU5vcm0oKSksbT10aGlzLm9wZW5XYWthQmFuZys9Yzt0aGlzLnRleHQrPWMsIi0iIT09bSYmKHRoaXMuc3RhdGU9Ii0tIj09PW0/ODo0LHRoaXMub3Blbldha2FCYW5nPSIiKX1zRFREQ29tbWVudCgpe3RoaXMuY2Fw''@;'; put 'put ''dHVyZVRvQ2hhcig0NSkmJih0aGlzLnRleHQrPSItIix0aGlzLnN0YXRlPTkpfXNEVERDb21tZW50RW5kaW5nKCl7Y29uc3QgYz10aGlzLmdldENvZGVOb3JtKCk7dGhpcy50ZXh0Kz1TdHJpbmcuZnJvbUNvZGVQb2ludChjKSx0aGlzLnN0YXRlPTQ1PT09Yz8xMDo4fXNEVERDb21tZW50RW5k''@;'; put 'put ''ZWQoKXtjb25zdCBjPXRoaXMuZ2V0Q29kZU5vcm0oKTt0aGlzLnRleHQrPVN0cmluZy5mcm9tQ29kZVBvaW50KGMpLDYyPT09Yz90aGlzLnN0YXRlPTQ6KHRoaXMuZmFpbCgibWFsZm9ybWVkIGNvbW1lbnQuIiksdGhpcy5zdGF0ZT04KX1zRFREUEkoKXt0aGlzLmNhcHR1cmVUb0NoYXIoNjMp''@;'; put 'put ''JiYodGhpcy50ZXh0Kz0iPyIsdGhpcy5zdGF0ZT0xMil9c0RURFBJRW5kaW5nKCl7Y29uc3QgYz10aGlzLmdldENvZGVOb3JtKCk7dGhpcy50ZXh0Kz1TdHJpbmcuZnJvbUNvZGVQb2ludChjKSw2Mj09PWMmJih0aGlzLnN0YXRlPTQpfXNUZXh0KCl7MCE9PXRoaXMudGFncy5sZW5ndGg/dGhp''@;'; put 'put ''cy5oYW5kbGVUZXh0SW5Sb290KCk6dGhpcy5oYW5kbGVUZXh0T3V0c2lkZVJvb3QoKX1zRW50aXR5KCl7bGV0e2k6Y309dGhpcztjb25zdHtjaHVuazptfT10aGlzO3Q6Zm9yKDs7KXN3aXRjaCh0aGlzLmdldENvZGUoKSl7Y2FzZS0yOnRoaXMuZW50aXR5Kz1tLnNsaWNlKGMsdGhpcy5wcmV2''@;'; put 'put ''SSkrIlxuIixjPXRoaXMuaTticmVhaztjYXNlIDU5Ontjb25zdHtlbnRpdHlSZXR1cm5TdGF0ZTpnfT10aGlzLHk9dGhpcy5lbnRpdHkrbS5zbGljZShjLHRoaXMucHJldkkpO2xldCB3O3RoaXMuc3RhdGU9ZywiIj09PXk/KHRoaXMuZmFpbCgiZW1wdHkgZW50aXR5IG5hbWUuIiksdz0iJjsi''@;'; put 'put ''KToodz10aGlzLnBhcnNlRW50aXR5KHkpLHRoaXMuZW50aXR5PSIiKSwxMz09PWcmJnZvaWQgMD09PXRoaXMudGV4dEhhbmRsZXJ8fCh0aGlzLnRleHQrPXcpO2JyZWFrIHR9Y2FzZS0xOnRoaXMuZW50aXR5Kz1tLnNsaWNlKGMpO2JyZWFrIHR9fXNPcGVuV2FrYSgpe2NvbnN0IGM9dGhpcy5n''@;'; put 'put ''ZXRDb2RlKCk7aWYoZShjKSl0aGlzLnN0YXRlPTM0LHRoaXMudW5nZXQoKSx0aGlzLnhtbERlY2xQb3NzaWJsZT0hMTtlbHNlIHN3aXRjaChjKXtjYXNlIDQ3OnRoaXMuc3RhdGU9NDMsdGhpcy54bWxEZWNsUG9zc2libGU9ITE7YnJlYWs7Y2FzZSAzMzp0aGlzLnN0YXRlPTE2LHRoaXMub3Bl''@;'; put 'put ''bldha2FCYW5nPSIiLHRoaXMueG1sRGVjbFBvc3NpYmxlPSExO2JyZWFrO2Nhc2UgNjM6dGhpcy5zdGF0ZT0yMzticmVhaztkZWZhdWx0OnRoaXMuZmFpbCgiZGlzYWxsb3dlZCBjaGFyYWN0ZXIgaW4gdGFnIG5hbWUiKSx0aGlzLnN0YXRlPTEzLHRoaXMueG1sRGVjbFBvc3NpYmxlPSExfX1z''@;'; put 'put ''T3Blbldha2FCYW5nKCl7c3dpdGNoKHRoaXMub3Blbldha2FCYW5nKz1TdHJpbmcuZnJvbUNvZGVQb2ludCh0aGlzLmdldENvZGVOb3JtKCkpLHRoaXMub3Blbldha2FCYW5nKXtjYXNlIltDREFUQVsiOnRoaXMuc2F3Um9vdHx8dGhpcy5yZXBvcnRlZFRleHRCZWZvcmVSb290fHwodGhpcy5m''@;'; put 'put ''YWlsKCJ0ZXh0IGRhdGEgb3V0c2lkZSBvZiByb290IG5vZGUuIiksdGhpcy5yZXBvcnRlZFRleHRCZWZvcmVSb290PSEwKSx0aGlzLmNsb3NlZFJvb3QmJiF0aGlzLnJlcG9ydGVkVGV4dEFmdGVyUm9vdCYmKHRoaXMuZmFpbCgidGV4dCBkYXRhIG91dHNpZGUgb2Ygcm9vdCBub2RlLiIpLHRo''@;'; put 'put ''aXMucmVwb3J0ZWRUZXh0QWZ0ZXJSb290PSEwKSx0aGlzLnN0YXRlPTIwLHRoaXMub3Blbldha2FCYW5nPSIiO2JyZWFrO2Nhc2UiLS0iOnRoaXMuc3RhdGU9MTcsdGhpcy5vcGVuV2FrYUJhbmc9IiI7YnJlYWs7Y2FzZSJET0NUWVBFIjp0aGlzLnN0YXRlPTIsKHRoaXMuZG9jdHlwZXx8dGhp''@;'; put 'put ''cy5zYXdSb290KSYmdGhpcy5mYWlsKCJpbmFwcHJvcHJpYXRlbHkgbG9jYXRlZCBkb2N0eXBlIGRlY2xhcmF0aW9uLiIpLHRoaXMub3Blbldha2FCYW5nPSIiO2JyZWFrO2RlZmF1bHQ6dGhpcy5vcGVuV2FrYUJhbmcubGVuZ3RoPj03JiZ0aGlzLmZhaWwoImluY29ycmVjdCBzeW50YXguIil9''@;'; put 'put ''fXNDb21tZW50KCl7dGhpcy5jYXB0dXJlVG9DaGFyKDQ1KSYmKHRoaXMuc3RhdGU9MTgpfXNDb21tZW50RW5kaW5nKCl7dmFyIGM7Y29uc3QgbT10aGlzLmdldENvZGVOb3JtKCk7NDU9PT1tPyh0aGlzLnN0YXRlPTE5LG51bGw9PT0oYz10aGlzLmNvbW1lbnRIYW5kbGVyKXx8dm9pZCAwPT09''@;'; put 'put ''Y3x8Yy5jYWxsKHRoaXMsdGhpcy50ZXh0KSx0aGlzLnRleHQ9IiIpOih0aGlzLnRleHQrPSItIitTdHJpbmcuZnJvbUNvZGVQb2ludChtKSx0aGlzLnN0YXRlPTE3KX1zQ29tbWVudEVuZGVkKCl7Y29uc3QgYz10aGlzLmdldENvZGVOb3JtKCk7NjIhPT1jPyh0aGlzLmZhaWwoIm1hbGZvcm1l''@;'; put 'put ''ZCBjb21tZW50LiIpLHRoaXMudGV4dCs9Ii0tIitTdHJpbmcuZnJvbUNvZGVQb2ludChjKSx0aGlzLnN0YXRlPTE3KTp0aGlzLnN0YXRlPTEzfXNDRGF0YSgpe3RoaXMuY2FwdHVyZVRvQ2hhcig5MykmJih0aGlzLnN0YXRlPTIxKX1zQ0RhdGFFbmRpbmcoKXtjb25zdCBjPXRoaXMuZ2V0Q29k''@;'; put 'put ''ZU5vcm0oKTs5Mz09PWM/dGhpcy5zdGF0ZT0yMjoodGhpcy50ZXh0Kz0iXSIrU3RyaW5nLmZyb21Db2RlUG9pbnQoYyksdGhpcy5zdGF0ZT0yMCl9c0NEYXRhRW5kaW5nMigpe3ZhciBjO2NvbnN0IG09dGhpcy5nZXRDb2RlTm9ybSgpO3N3aXRjaChtKXtjYXNlIDYyOm51bGw9PT0oYz10aGlz''@;'; put 'put ''LmNkYXRhSGFuZGxlcil8fHZvaWQgMD09PWN8fGMuY2FsbCh0aGlzLHRoaXMudGV4dCksdGhpcy50ZXh0PSIiLHRoaXMuc3RhdGU9MTM7YnJlYWs7Y2FzZSA5Mzp0aGlzLnRleHQrPSJdIjticmVhaztkZWZhdWx0OnRoaXMudGV4dCs9Il1dIitTdHJpbmcuZnJvbUNvZGVQb2ludChtKSx0aGlz''@;'; put 'put ''LnN0YXRlPTIwfX1zUElGaXJzdENoYXIoKXtjb25zdCBjPXRoaXMuZ2V0Q29kZU5vcm0oKTt0aGlzLm5hbWVTdGFydENoZWNrKGMpPyh0aGlzLnBpVGFyZ2V0Kz1TdHJpbmcuZnJvbUNvZGVQb2ludChjKSx0aGlzLnN0YXRlPTI0KTo2Mz09PWN8fHIoYyk/KHRoaXMuZmFpbCgicHJvY2Vzc2lu''@;'; put 'put ''ZyBpbnN0cnVjdGlvbiB3aXRob3V0IGEgdGFyZ2V0LiIpLHRoaXMuc3RhdGU9NjM9PT1jPzI2OjI1KToodGhpcy5mYWlsKCJkaXNhbGxvd2VkIGNoYXJhY3RlciBpbiBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5hbWUuIiksdGhpcy5waVRhcmdldCs9U3RyaW5nLmZyb21Db2RlUG9pbnQoYyks''@;'; put 'put ''dGhpcy5zdGF0ZT0yNCl9c1BJUmVzdCgpe2NvbnN0e2NodW5rOmMsaTptfT10aGlzO2Zvcig7Oyl7Y29uc3QgZz10aGlzLmdldENvZGVOb3JtKCk7aWYoLTE9PT1nKXJldHVybiB2b2lkKHRoaXMucGlUYXJnZXQrPWMuc2xpY2UobSkpO2lmKCF0aGlzLm5hbWVDaGVjayhnKSl7dGhpcy5waVRh''@;'; put 'put ''cmdldCs9Yy5zbGljZShtLHRoaXMucHJldkkpO2NvbnN0IHk9NjM9PT1nO3l8fHIoZyk/InhtbCI9PT10aGlzLnBpVGFyZ2V0Pyh0aGlzLnhtbERlY2xQb3NzaWJsZXx8dGhpcy5mYWlsKCJhbiBYTUwgZGVjbGFyYXRpb24gbXVzdCBiZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGRvY3VtZW50LiIp''@;'; put 'put ''LHRoaXMuc3RhdGU9eT8zMzoyNyk6dGhpcy5zdGF0ZT15PzI2OjI1Oih0aGlzLmZhaWwoImRpc2FsbG93ZWQgY2hhcmFjdGVyIGluIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gbmFtZS4iKSx0aGlzLnBpVGFyZ2V0Kz1TdHJpbmcuZnJvbUNvZGVQb2ludChnKSk7YnJlYWt9fX1zUElCb2R5KCl7''@;'; put 'put ''aWYoMD09PXRoaXMudGV4dC5sZW5ndGgpe2NvbnN0IGM9dGhpcy5nZXRDb2RlTm9ybSgpOzYzPT09Yz90aGlzLnN0YXRlPTI2OnIoYyl8fCh0aGlzLnRleHQ9U3RyaW5nLmZyb21Db2RlUG9pbnQoYykpfWVsc2UgdGhpcy5jYXB0dXJlVG9DaGFyKDYzKSYmKHRoaXMuc3RhdGU9MjYpfXNQSUVu''@;'; put 'put ''ZGluZygpe3ZhciBjO2NvbnN0IG09dGhpcy5nZXRDb2RlTm9ybSgpO2lmKDYyPT09bSl7Y29uc3R7cGlUYXJnZXQ6Z309dGhpczsieG1sIj09PWcudG9Mb3dlckNhc2UoKSYmdGhpcy5mYWlsKCJ0aGUgWE1MIGRlY2xhcmF0aW9uIG11c3QgYXBwZWFyIGF0IHRoZSBzdGFydCBvZiB0aGUgZG9j''@;'; put 'put ''dW1lbnQuIiksbnVsbD09PShjPXRoaXMucGlIYW5kbGVyKXx8dm9pZCAwPT09Y3x8Yy5jYWxsKHRoaXMse3RhcmdldDpnLGJvZHk6dGhpcy50ZXh0fSksdGhpcy5waVRhcmdldD10aGlzLnRleHQ9IiIsdGhpcy5zdGF0ZT0xM31lbHNlIDYzPT09bT90aGlzLnRleHQrPSI/IjoodGhpcy50ZXh0''@;'; put 'put ''Kz0iPyIrU3RyaW5nLmZyb21Db2RlUG9pbnQobSksdGhpcy5zdGF0ZT0yNSk7dGhpcy54bWxEZWNsUG9zc2libGU9ITF9c1hNTERlY2xOYW1lU3RhcnQoKXtjb25zdCBjPXRoaXMuc2tpcFNwYWNlcygpOzYzIT09Yz8tMSE9PWMmJih0aGlzLnN0YXRlPTI4LHRoaXMubmFtZT1TdHJpbmcuZnJv''@;'; put 'put ''bUNvZGVQb2ludChjKSk6dGhpcy5zdGF0ZT0zM31zWE1MRGVjbE5hbWUoKXtjb25zdCBjPXRoaXMuY2FwdHVyZVRvKEIpO2lmKDYzPT09YylyZXR1cm4gdGhpcy5zdGF0ZT0zMyx0aGlzLm5hbWUrPXRoaXMudGV4dCx0aGlzLnRleHQ9IiIsdm9pZCB0aGlzLmZhaWwoIlhNTCBkZWNsYXJhdGlv''@;'; put 'put ''biBpcyBpbmNvbXBsZXRlLiIpO2lmKHIoYyl8fDYxPT09Yyl7aWYodGhpcy5uYW1lKz10aGlzLnRleHQsdGhpcy50ZXh0PSIiLCF0aGlzLnhtbERlY2xFeHBlY3RzLmluY2x1ZGVzKHRoaXMubmFtZSkpc3dpdGNoKHRoaXMubmFtZS5sZW5ndGgpe2Nhc2UgMDp0aGlzLmZhaWwoImRpZCBub3Qg''@;'; put 'put ''ZXhwZWN0IGFueSBtb3JlIG5hbWUvdmFsdWUgcGFpcnMuIik7YnJlYWs7Y2FzZSAxOnRoaXMuZmFpbChgZXhwZWN0ZWQgdGhlIG5hbWUgJHt0aGlzLnhtbERlY2xFeHBlY3RzWzBdfS5gKTticmVhaztkZWZhdWx0OnRoaXMuZmFpbCgiZXhwZWN0ZWQgb25lIG9mICIrdGhpcy54bWxEZWNsRXhw''@;'; put 'put ''ZWN0cy5qb2luKCIsICIpKX10aGlzLnN0YXRlPTYxPT09Yz8zMDoyOX19c1hNTERlY2xFcSgpe2NvbnN0IGM9dGhpcy5nZXRDb2RlTm9ybSgpO2lmKDYzPT09YylyZXR1cm4gdGhpcy5zdGF0ZT0zMyx2b2lkIHRoaXMuZmFpbCgiWE1MIGRlY2xhcmF0aW9uIGlzIGluY29tcGxldGUuIik7cihj''@;'; put 'put ''KXx8KDYxIT09YyYmdGhpcy5mYWlsKCJ2YWx1ZSByZXF1aXJlZC4iKSx0aGlzLnN0YXRlPTMwKX1zWE1MRGVjbFZhbHVlU3RhcnQoKXtjb25zdCBjPXRoaXMuZ2V0Q29kZU5vcm0oKTtpZig2Mz09PWMpcmV0dXJuIHRoaXMuc3RhdGU9MzMsdm9pZCB0aGlzLmZhaWwoIlhNTCBkZWNsYXJhdGlv''@;'; put 'put ''biBpcyBpbmNvbXBsZXRlLiIpO3IoYyl8fChJKGMpP3RoaXMucT1jOih0aGlzLmZhaWwoInZhbHVlIG11c3QgYmUgcXVvdGVkLiIpLHRoaXMucT0zMiksdGhpcy5zdGF0ZT0zMSl9c1hNTERlY2xWYWx1ZSgpe2NvbnN0IGM9dGhpcy5jYXB0dXJlVG8oW3RoaXMucSw2M10pO2lmKDYzPT09Yyly''@;'; put 'put ''ZXR1cm4gdGhpcy5zdGF0ZT0zMyx0aGlzLnRleHQ9IiIsdm9pZCB0aGlzLmZhaWwoIlhNTCBkZWNsYXJhdGlvbiBpcyBpbmNvbXBsZXRlLiIpO2lmKC0xPT09YylyZXR1cm47Y29uc3QgbT10aGlzLnRleHQ7c3dpdGNoKHRoaXMudGV4dD0iIix0aGlzLm5hbWUpe2Nhc2UidmVyc2lvbiI6e3Ro''@;'; put 'put ''aXMueG1sRGVjbEV4cGVjdHM9WyJlbmNvZGluZyIsInN0YW5kYWxvbmUiXTtjb25zdCBnPW07dGhpcy54bWxEZWNsLnZlcnNpb249ZywvXjFcLlswLTldKyQvLnRlc3QoZyk/dGhpcy5vcHQuZm9yY2VYTUxWZXJzaW9ufHx0aGlzLnNldFhNTFZlcnNpb24oZyk6dGhpcy5mYWlsKCJ2ZXJzaW9u''@;'; put 'put ''IG51bWJlciBtdXN0IG1hdGNoIC9eMVxcLlswLTldKyQvLiIpO2JyZWFrfWNhc2UiZW5jb2RpbmciOi9eW0EtWmEtel1bQS1aYS16MC05Ll8tXSokLy50ZXN0KG0pfHx0aGlzLmZhaWwoImVuY29kaW5nIHZhbHVlIG11c3QgbWF0Y2ggL15bQS1aYS16MC05XVtBLVphLXowLTkuXy1dKiQvLiIp''@;'; put 'put ''LHRoaXMueG1sRGVjbEV4cGVjdHM9WyJzdGFuZGFsb25lIl0sdGhpcy54bWxEZWNsLmVuY29kaW5nPW07YnJlYWs7Y2FzZSJzdGFuZGFsb25lIjoieWVzIiE9PW0mJiJubyIhPT1tJiZ0aGlzLmZhaWwoJ3N0YW5kYWxvbmUgdmFsdWUgbXVzdCBtYXRjaCAieWVzIiBvciAibm8iLicpLHRoaXMu''@;'; put 'put ''eG1sRGVjbEV4cGVjdHM9W10sdGhpcy54bWxEZWNsLnN0YW5kYWxvbmU9bX10aGlzLm5hbWU9IiIsdGhpcy5zdGF0ZT0zMn1zWE1MRGVjbFNlcGFyYXRvcigpe2NvbnN0IGM9dGhpcy5nZXRDb2RlTm9ybSgpOzYzIT09Yz8ocihjKXx8KHRoaXMuZmFpbCgid2hpdGVzcGFjZSByZXF1aXJlZC4i''@;'; put 'put ''KSx0aGlzLnVuZ2V0KCkpLHRoaXMuc3RhdGU9MjcpOnRoaXMuc3RhdGU9MzN9c1hNTERlY2xFbmRpbmcoKXt2YXIgYzs2Mj09PXRoaXMuZ2V0Q29kZU5vcm0oKT8oInhtbCIhPT10aGlzLnBpVGFyZ2V0P3RoaXMuZmFpbCgicHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMgYXJlIG5vdCBhbGxvd2Vk''@;'; put 'put ''IGJlZm9yZSByb290LiIpOiJ2ZXJzaW9uIiE9PXRoaXMubmFtZSYmdGhpcy54bWxEZWNsRXhwZWN0cy5pbmNsdWRlcygidmVyc2lvbiIpJiZ0aGlzLmZhaWwoIlhNTCBkZWNsYXJhdGlvbiBtdXN0IGNvbnRhaW4gYSB2ZXJzaW9uLiIpLG51bGw9PT0oYz10aGlzLnhtbGRlY2xIYW5kbGVyKXx8''@;'; put 'put ''dm9pZCAwPT09Y3x8Yy5jYWxsKHRoaXMsdGhpcy54bWxEZWNsKSx0aGlzLm5hbWU9IiIsdGhpcy5waVRhcmdldD10aGlzLnRleHQ9IiIsdGhpcy5zdGF0ZT0xMyk6dGhpcy5mYWlsKCJUaGUgY2hhcmFjdGVyID8gaXMgZGlzYWxsb3dlZCBhbnl3aGVyZSBpbiBYTUwgZGVjbGFyYXRpb25zLiIp''@;'; put 'put ''LHRoaXMueG1sRGVjbFBvc3NpYmxlPSExfXNPcGVuVGFnKCl7dmFyIGM7Y29uc3QgbT10aGlzLmNhcHR1cmVOYW1lQ2hhcnMoKTtpZigtMT09PW0pcmV0dXJuO2NvbnN0IGc9dGhpcy50YWc9e25hbWU6dGhpcy5uYW1lLGF0dHJpYnV0ZXM6T2JqZWN0LmNyZWF0ZShudWxsKX07c3dpdGNoKHRo''@;'; put 'put ''aXMubmFtZT0iIix0aGlzLnhtbG5zT3B0JiYodGhpcy50b3BOUz1nLm5zPU9iamVjdC5jcmVhdGUobnVsbCkpLG51bGw9PT0oYz10aGlzLm9wZW5UYWdTdGFydEhhbmRsZXIpfHx2b2lkIDA9PT1jfHxjLmNhbGwodGhpcyxnKSx0aGlzLnNhd1Jvb3Q9ITAsIXRoaXMuZnJhZ21lbnRPcHQmJnRo''@;'; put 'put ''aXMuY2xvc2VkUm9vdCYmdGhpcy5mYWlsKCJkb2N1bWVudHMgbWF5IGNvbnRhaW4gb25seSBvbmUgcm9vdC4iKSxtKXtjYXNlIDYyOnRoaXMub3BlblRhZygpO2JyZWFrO2Nhc2UgNDc6dGhpcy5zdGF0ZT0zNTticmVhaztkZWZhdWx0OnIobSl8fHRoaXMuZmFpbCgiZGlzYWxsb3dlZCBjaGFy''@;'; put 'put ''YWN0ZXIgaW4gdGFnIG5hbWUuIiksdGhpcy5zdGF0ZT0zNn19c09wZW5UYWdTbGFzaCgpezYyPT09dGhpcy5nZXRDb2RlKCk/dGhpcy5vcGVuU2VsZkNsb3NpbmdUYWcoKToodGhpcy5mYWlsKCJmb3J3YXJkLXNsYXNoIGluIG9wZW5pbmcgdGFnIG5vdCBmb2xsb3dlZCBieSA+LiIpLHRoaXMu''@;'; put 'put ''c3RhdGU9MzYpfXNBdHRyaWIoKXtjb25zdCBjPXRoaXMuc2tpcFNwYWNlcygpOy0xIT09YyYmKGUoYyk/KHRoaXMudW5nZXQoKSx0aGlzLnN0YXRlPTM3KTo2Mj09PWM/dGhpcy5vcGVuVGFnKCk6NDc9PT1jP3RoaXMuc3RhdGU9MzU6dGhpcy5mYWlsKCJkaXNhbGxvd2VkIGNoYXJhY3RlciBp''@;'; put 'put ''biBhdHRyaWJ1dGUgbmFtZS4iKSl9c0F0dHJpYk5hbWUoKXtjb25zdCBjPXRoaXMuY2FwdHVyZU5hbWVDaGFycygpOzYxPT09Yz90aGlzLnN0YXRlPTM5OnIoYyk/dGhpcy5zdGF0ZT0zODo2Mj09PWM/KHRoaXMuZmFpbCgiYXR0cmlidXRlIHdpdGhvdXQgdmFsdWUuIiksdGhpcy5wdXNoQXR0''@;'; put 'put ''cmliKHRoaXMubmFtZSx0aGlzLm5hbWUpLHRoaXMubmFtZT10aGlzLnRleHQ9IiIsdGhpcy5vcGVuVGFnKCkpOi0xIT09YyYmdGhpcy5mYWlsKCJkaXNhbGxvd2VkIGNoYXJhY3RlciBpbiBhdHRyaWJ1dGUgbmFtZS4iKX1zQXR0cmliTmFtZVNhd1doaXRlKCl7Y29uc3QgYz10aGlzLnNraXBT''@;'; put 'put ''cGFjZXMoKTtzd2l0Y2goYyl7Y2FzZS0xOnJldHVybjtjYXNlIDYxOnRoaXMuc3RhdGU9Mzk7YnJlYWs7ZGVmYXVsdDp0aGlzLmZhaWwoImF0dHJpYnV0ZSB3aXRob3V0IHZhbHVlLiIpLHRoaXMudGV4dD0iIix0aGlzLm5hbWU9IiIsNjI9PT1jP3RoaXMub3BlblRhZygpOmUoYyk/KHRoaXMu''@;'; put 'put ''dW5nZXQoKSx0aGlzLnN0YXRlPTM3KToodGhpcy5mYWlsKCJkaXNhbGxvd2VkIGNoYXJhY3RlciBpbiBhdHRyaWJ1dGUgbmFtZS4iKSx0aGlzLnN0YXRlPTM2KX19c0F0dHJpYlZhbHVlKCl7Y29uc3QgYz10aGlzLmdldENvZGVOb3JtKCk7SShjKT8odGhpcy5xPWMsdGhpcy5zdGF0ZT00MCk6''@;'; put 'put ''cihjKXx8KHRoaXMuZmFpbCgidW5xdW90ZWQgYXR0cmlidXRlIHZhbHVlLiIpLHRoaXMuc3RhdGU9NDIsdGhpcy51bmdldCgpKX1zQXR0cmliVmFsdWVRdW90ZWQoKXtjb25zdHtxOmMsY2h1bms6bX09dGhpcztsZXR7aTpnfT10aGlzO2Zvcig7Oylzd2l0Y2godGhpcy5nZXRDb2RlKCkpe2Nh''@;'; put 'put ''c2UgYzpyZXR1cm4gdGhpcy5wdXNoQXR0cmliKHRoaXMubmFtZSx0aGlzLnRleHQrbS5zbGljZShnLHRoaXMucHJldkkpKSx0aGlzLm5hbWU9dGhpcy50ZXh0PSIiLHRoaXMucT1udWxsLHZvaWQodGhpcy5zdGF0ZT00MSk7Y2FzZSAzODpyZXR1cm4gdGhpcy50ZXh0Kz1tLnNsaWNlKGcsdGhp''@;'; put 'put ''cy5wcmV2SSksdGhpcy5zdGF0ZT0xNCx2b2lkKHRoaXMuZW50aXR5UmV0dXJuU3RhdGU9NDApO2Nhc2UgMTA6Y2FzZS0yOmNhc2UgOTp0aGlzLnRleHQrPW0uc2xpY2UoZyx0aGlzLnByZXZJKSsiICIsZz10aGlzLmk7YnJlYWs7Y2FzZSA2MDpyZXR1cm4gdGhpcy50ZXh0Kz1tLnNsaWNlKGcs''@;'; put 'put ''dGhpcy5wcmV2SSksdm9pZCB0aGlzLmZhaWwoImRpc2FsbG93ZWQgY2hhcmFjdGVyLiIpO2Nhc2UtMTpyZXR1cm4gdm9pZCh0aGlzLnRleHQrPW0uc2xpY2UoZykpfX1zQXR0cmliVmFsdWVDbG9zZWQoKXtjb25zdCBjPXRoaXMuZ2V0Q29kZU5vcm0oKTtyKGMpP3RoaXMuc3RhdGU9MzY6NjI9''@;'; put 'put ''PT1jP3RoaXMub3BlblRhZygpOjQ3PT09Yz90aGlzLnN0YXRlPTM1OmUoYyk/KHRoaXMuZmFpbCgibm8gd2hpdGVzcGFjZSBiZXR3ZWVuIGF0dHJpYnV0ZXMuIiksdGhpcy51bmdldCgpLHRoaXMuc3RhdGU9MzcpOnRoaXMuZmFpbCgiZGlzYWxsb3dlZCBjaGFyYWN0ZXIgaW4gYXR0cmlidXRl''@;'; put 'put ''IG5hbWUuIil9c0F0dHJpYlZhbHVlVW5xdW90ZWQoKXtjb25zdCBjPXRoaXMuY2FwdHVyZVRvKCQpO3N3aXRjaChjKXtjYXNlIDM4OnRoaXMuc3RhdGU9MTQsdGhpcy5lbnRpdHlSZXR1cm5TdGF0ZT00MjticmVhaztjYXNlIDYwOnRoaXMuZmFpbCgiZGlzYWxsb3dlZCBjaGFyYWN0ZXIuIik7''@;'; put 'put ''YnJlYWs7Y2FzZS0xOmJyZWFrO2RlZmF1bHQ6dGhpcy50ZXh0LmluY2x1ZGVzKCJdXT4iKSYmdGhpcy5mYWlsKCd0aGUgc3RyaW5nICJdXT4iIGlzIGRpc2FsbG93ZWQgaW4gY2hhciBkYXRhLicpLHRoaXMucHVzaEF0dHJpYih0aGlzLm5hbWUsdGhpcy50ZXh0KSx0aGlzLm5hbWU9dGhpcy50''@;'; put 'put ''ZXh0PSIiLDYyPT09Yz90aGlzLm9wZW5UYWcoKTp0aGlzLnN0YXRlPTM2fX1zQ2xvc2VUYWcoKXtjb25zdCBjPXRoaXMuY2FwdHVyZU5hbWVDaGFycygpOzYyPT09Yz90aGlzLmNsb3NlVGFnKCk6cihjKT90aGlzLnN0YXRlPTQ0Oi0xIT09YyYmdGhpcy5mYWlsKCJkaXNhbGxvd2VkIGNoYXJh''@;'; put 'put ''Y3RlciBpbiBjbG9zaW5nIHRhZy4iKX1zQ2xvc2VUYWdTYXdXaGl0ZSgpe3N3aXRjaCh0aGlzLnNraXBTcGFjZXMoKSl7Y2FzZSA2Mjp0aGlzLmNsb3NlVGFnKCk7YnJlYWs7Y2FzZS0xOmJyZWFrO2RlZmF1bHQ6dGhpcy5mYWlsKCJkaXNhbGxvd2VkIGNoYXJhY3RlciBpbiBjbG9zaW5nIHRh''@;'; put 'put ''Zy4iKX19aGFuZGxlVGV4dEluUm9vdCgpe2xldHtpOmMsZm9yYmlkZGVuU3RhdGU6bX09dGhpcztjb25zdHtjaHVuazpnLHRleHRIYW5kbGVyOnl9PXRoaXM7dDpmb3IoOzspc3dpdGNoKHRoaXMuZ2V0Q29kZSgpKXtjYXNlIDYwOmlmKHRoaXMuc3RhdGU9MTUsdm9pZCAwIT09eSl7Y29uc3R7''@;'; put 'put ''dGV4dDp3fT10aGlzLGs9Zy5zbGljZShjLHRoaXMucHJldkkpOzAhPT13Lmxlbmd0aD8oeSh3K2spLHRoaXMudGV4dD0iIik6MCE9PWsubGVuZ3RoJiZ5KGspfW09MDticmVhayB0O2Nhc2UgMzg6dGhpcy5zdGF0ZT0xNCx0aGlzLmVudGl0eVJldHVyblN0YXRlPTEzLHZvaWQgMCE9PXkmJih0''@;'; put 'put ''aGlzLnRleHQrPWcuc2xpY2UoYyx0aGlzLnByZXZJKSksbT0wO2JyZWFrIHQ7Y2FzZSA5Mzpzd2l0Y2gobSl7Y2FzZSAwOm09MTticmVhaztjYXNlIDE6bT0yO2JyZWFrO2Nhc2UgMjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW1wb3NzaWJsZSBzdGF0ZSIpfWJyZWFrO2Nhc2Ug''@;'; put 'put ''NjI6Mj09PW0mJnRoaXMuZmFpbCgndGhlIHN0cmluZyAiXV0+IiBpcyBkaXNhbGxvd2VkIGluIGNoYXIgZGF0YS4nKSxtPTA7YnJlYWs7Y2FzZS0yOnZvaWQgMCE9PXkmJih0aGlzLnRleHQrPWcuc2xpY2UoYyx0aGlzLnByZXZJKSsiXG4iKSxjPXRoaXMuaSxtPTA7YnJlYWs7Y2FzZS0xOnZv''@;'; put 'put ''aWQgMCE9PXkmJih0aGlzLnRleHQrPWcuc2xpY2UoYykpO2JyZWFrIHQ7ZGVmYXVsdDptPTB9dGhpcy5mb3JiaWRkZW5TdGF0ZT1tfWhhbmRsZVRleHRPdXRzaWRlUm9vdCgpe2xldHtpOmN9PXRoaXM7Y29uc3R7Y2h1bms6bSx0ZXh0SGFuZGxlcjpnfT10aGlzO2xldCB5PSExO3Q6Zm9yKDs7''@;'; put 'put ''KXtjb25zdCB3PXRoaXMuZ2V0Q29kZSgpO3N3aXRjaCh3KXtjYXNlIDYwOmlmKHRoaXMuc3RhdGU9MTUsdm9pZCAwIT09Zyl7Y29uc3R7dGV4dDprfT10aGlzLE89bS5zbGljZShjLHRoaXMucHJldkkpOzAhPT1rLmxlbmd0aD8oZyhrK08pLHRoaXMudGV4dD0iIik6MCE9PU8ubGVuZ3RoJiZn''@;'; put 'put ''KE8pfWJyZWFrIHQ7Y2FzZSAzODp0aGlzLnN0YXRlPTE0LHRoaXMuZW50aXR5UmV0dXJuU3RhdGU9MTMsdm9pZCAwIT09ZyYmKHRoaXMudGV4dCs9bS5zbGljZShjLHRoaXMucHJldkkpKSx5PSEwO2JyZWFrIHQ7Y2FzZS0yOnZvaWQgMCE9PWcmJih0aGlzLnRleHQrPW0uc2xpY2UoYyx0aGlz''@;'; put 'put ''LnByZXZJKSsiXG4iKSxjPXRoaXMuaTticmVhaztjYXNlLTE6dm9pZCAwIT09ZyYmKHRoaXMudGV4dCs9bS5zbGljZShjKSk7YnJlYWsgdDtkZWZhdWx0OnIodyl8fCh5PSEwKX19eSYmKHRoaXMuc2F3Um9vdHx8dGhpcy5yZXBvcnRlZFRleHRCZWZvcmVSb290fHwodGhpcy5mYWlsKCJ0ZXh0''@;'; put 'put ''IGRhdGEgb3V0c2lkZSBvZiByb290IG5vZGUuIiksdGhpcy5yZXBvcnRlZFRleHRCZWZvcmVSb290PSEwKSx0aGlzLmNsb3NlZFJvb3QmJiF0aGlzLnJlcG9ydGVkVGV4dEFmdGVyUm9vdCYmKHRoaXMuZmFpbCgidGV4dCBkYXRhIG91dHNpZGUgb2Ygcm9vdCBub2RlLiIpLHRoaXMucmVwb3J0''@;'; put 'put ''ZWRUZXh0QWZ0ZXJSb290PSEwKSl9cHVzaEF0dHJpYk5TKGMsbSl7dmFyIGc7Y29uc3R7cHJlZml4OnksbG9jYWw6d309dGhpcy5xbmFtZShjKSxrPXtuYW1lOmMscHJlZml4OnksbG9jYWw6dyx2YWx1ZTptfTtpZih0aGlzLmF0dHJpYkxpc3QucHVzaChrKSxudWxsPT09KGc9dGhpcy5hdHRy''@;'; put 'put ''aWJ1dGVIYW5kbGVyKXx8dm9pZCAwPT09Z3x8Zy5jYWxsKHRoaXMsayksInhtbG5zIj09PXkpe2NvbnN0IE89bS50cmltKCk7IjEuMCI9PT10aGlzLmN1cnJlbnRYTUxWZXJzaW9uJiYiIj09PU8mJnRoaXMuZmFpbCgiaW52YWxpZCBhdHRlbXB0IHRvIHVuZGVmaW5lIHByZWZpeCBpbiBYTUwg''@;'; put 'put ''MS4wIiksdGhpcy50b3BOU1t3XT1PLEQodGhpcyx3LE8pfWVsc2UgaWYoInhtbG5zIj09PWMpe2NvbnN0IE89bS50cmltKCk7dGhpcy50b3BOU1siIl09TyxEKHRoaXMsIiIsTyl9fXB1c2hBdHRyaWJQbGFpbihjLG0pe3ZhciBnO2NvbnN0IHk9e25hbWU6Yyx2YWx1ZTptfTt0aGlzLmF0dHJp''@;'; put 'put ''Ykxpc3QucHVzaCh5KSxudWxsPT09KGc9dGhpcy5hdHRyaWJ1dGVIYW5kbGVyKXx8dm9pZCAwPT09Z3x8Zy5jYWxsKHRoaXMseSl9ZW5kKCl7dmFyIGMsbTt0aGlzLnNhd1Jvb3R8fHRoaXMuZmFpbCgiZG9jdW1lbnQgbXVzdCBjb250YWluIGEgcm9vdCBlbGVtZW50LiIpO2NvbnN0e3RhZ3M6''@;'; put 'put ''Z309dGhpcztmb3IoO2cubGVuZ3RoPjA7KXtjb25zdCB3PWcucG9wKCk7dGhpcy5mYWlsKCJ1bmNsb3NlZCB0YWc6ICIrdy5uYW1lKX0wIT09dGhpcy5zdGF0ZSYmMTMhPT10aGlzLnN0YXRlJiZ0aGlzLmZhaWwoInVuZXhwZWN0ZWQgZW5kLiIpO2NvbnN0e3RleHQ6eX09dGhpcztyZXR1cm4g''@;'; put 'put ''MCE9PXkubGVuZ3RoJiYobnVsbD09PShjPXRoaXMudGV4dEhhbmRsZXIpfHx2b2lkIDA9PT1jfHxjLmNhbGwodGhpcyx5KSx0aGlzLnRleHQ9IiIpLHRoaXMuX2Nsb3NlZD0hMCxudWxsPT09KG09dGhpcy5lbmRIYW5kbGVyKXx8dm9pZCAwPT09bXx8bS5jYWxsKHRoaXMpLHRoaXMuX2luaXQo''@;'; put 'put ''KSx0aGlzfXJlc29sdmUoYyl7dmFyIG0sZztsZXQgeT10aGlzLnRvcE5TW2NdO2lmKHZvaWQgMCE9PXkpcmV0dXJuIHk7Y29uc3R7dGFnczp3fT10aGlzO2ZvcihsZXQgaz13Lmxlbmd0aC0xO2s+PTA7ay0tKWlmKHk9d1trXS5uc1tjXSx2b2lkIDAhPT15KXJldHVybiB5O3JldHVybiB5PXRo''@;'; put 'put ''aXMubnNbY10sdm9pZCAwIT09eT95Om51bGw9PT0oZz0obT10aGlzLm9wdCkucmVzb2x2ZVByZWZpeCl8fHZvaWQgMD09PWc/dm9pZCAwOmcuY2FsbChtLGMpfXFuYW1lKGMpe2NvbnN0IG09Yy5pbmRleE9mKCI6Iik7aWYoLTE9PT1tKXJldHVybntwcmVmaXg6IiIsbG9jYWw6Y307Y29uc3Qg''@;'; put 'put ''Zz1jLnNsaWNlKG0rMSkseT1jLnNsaWNlKDAsbSk7cmV0dXJuKCIiPT09eXx8IiI9PT1nfHxnLmluY2x1ZGVzKCI6IikpJiZ0aGlzLmZhaWwoYG1hbGZvcm1lZCBuYW1lOiAke2N9LmApLHtwcmVmaXg6eSxsb2NhbDpnfX1wcm9jZXNzQXR0cmlic05TKCl7dmFyIGM7Y29uc3R7YXR0cmliTGlz''@;'; put 'put ''dDptfT10aGlzLGc9dGhpcy50YWc7e2NvbnN0e3ByZWZpeDprLGxvY2FsOk99PXRoaXMucW5hbWUoZy5uYW1lKTtnLnByZWZpeD1rLGcubG9jYWw9Tztjb25zdCB6PWcudXJpPW51bGwhPT0oYz10aGlzLnJlc29sdmUoaykpJiZ2b2lkIDAhPT1jP2M6IiI7IiIhPT1rJiYoInhtbG5zIj09PWsm''@;'; put 'put ''JnRoaXMuZmFpbCgndGFncyBtYXkgbm90IGhhdmUgInhtbG5zIiBhcyBwcmVmaXguJyksIiI9PT16JiYodGhpcy5mYWlsKGB1bmJvdW5kIG5hbWVzcGFjZSBwcmVmaXg6ICR7SlNPTi5zdHJpbmdpZnkoayl9LmApLGcudXJpPWspKX1pZigwPT09bS5sZW5ndGgpcmV0dXJuO2NvbnN0e2F0dHJp''@;'; put 'put ''YnV0ZXM6eX09Zyx3PW5ldyBTZXQ7Zm9yKGNvbnN0IGsgb2YgbSl7Y29uc3R7bmFtZTpPLHByZWZpeDp6LGxvY2FsOlV9PWs7bGV0IFYsUjsiIj09PXo/KFY9InhtbG5zIj09PU8/djoiIixSPU8pOihWPXRoaXMucmVzb2x2ZSh6KSx2b2lkIDA9PT1WJiYodGhpcy5mYWlsKGB1bmJvdW5kIG5h''@;'; put 'put ''bWVzcGFjZSBwcmVmaXg6ICR7SlNPTi5zdHJpbmdpZnkoeil9LmApLFY9eiksUj1geyR7Vn19JHtVfWApLHcuaGFzKFIpJiZ0aGlzLmZhaWwoYGR1cGxpY2F0ZSBhdHRyaWJ1dGU6ICR7Un0uYCksdy5hZGQoUiksay51cmk9Vix5W09dPWt9dGhpcy5hdHRyaWJMaXN0PVtdfXByb2Nlc3NBdHRy''@;'; put 'put ''aWJzUGxhaW4oKXtjb25zdHthdHRyaWJMaXN0OmN9PXRoaXMsbT10aGlzLnRhZy5hdHRyaWJ1dGVzO2Zvcihjb25zdHtuYW1lOmcsdmFsdWU6eX1vZiBjKXZvaWQgMCE9PW1bZ10mJnRoaXMuZmFpbChgZHVwbGljYXRlIGF0dHJpYnV0ZTogJHtnfS5gKSxtW2ddPXk7dGhpcy5hdHRyaWJMaXN0''@;'; put 'put ''PVtdfW9wZW5UYWcoKXt2YXIgYzt0aGlzLnByb2Nlc3NBdHRyaWJzKCk7Y29uc3R7dGFnczptfT10aGlzLGc9dGhpcy50YWc7Zy5pc1NlbGZDbG9zaW5nPSExLG51bGw9PT0oYz10aGlzLm9wZW5UYWdIYW5kbGVyKXx8dm9pZCAwPT09Y3x8Yy5jYWxsKHRoaXMsZyksbS5wdXNoKGcpLHRoaXMu''@;'; put 'put ''c3RhdGU9MTMsdGhpcy5uYW1lPSIifW9wZW5TZWxmQ2xvc2luZ1RhZygpe3ZhciBjLG0sZzt0aGlzLnByb2Nlc3NBdHRyaWJzKCk7Y29uc3R7dGFnczp5fT10aGlzLHc9dGhpcy50YWc7dy5pc1NlbGZDbG9zaW5nPSEwLG51bGw9PT0oYz10aGlzLm9wZW5UYWdIYW5kbGVyKXx8dm9pZCAwPT09''@;'; put 'put ''Y3x8Yy5jYWxsKHRoaXMsdyksbnVsbD09PShtPXRoaXMuY2xvc2VUYWdIYW5kbGVyKXx8dm9pZCAwPT09bXx8bS5jYWxsKHRoaXMsdyksbnVsbD09PSh0aGlzLnRhZz1udWxsIT09KGc9eVt5Lmxlbmd0aC0xXSkmJnZvaWQgMCE9PWc/ZzpudWxsKSYmKHRoaXMuY2xvc2VkUm9vdD0hMCksdGhp''@;'; put 'put ''cy5zdGF0ZT0xMyx0aGlzLm5hbWU9IiJ9Y2xvc2VUYWcoKXtjb25zdHt0YWdzOmMsbmFtZTptfT10aGlzO2lmKHRoaXMuc3RhdGU9MTMsdGhpcy5uYW1lPSIiLCIiPT09bSlyZXR1cm4gdGhpcy5mYWlsKCJ3ZWlyZCBlbXB0eSBjbG9zZSB0YWcuIiksdm9pZCh0aGlzLnRleHQrPSI8Lz4iKTtj''@;'; put 'put ''b25zdCBnPXRoaXMuY2xvc2VUYWdIYW5kbGVyO2xldCB5PWMubGVuZ3RoO2Zvcig7eS0tID4wOyl7Y29uc3Qgdz10aGlzLnRhZz1jLnBvcCgpO2lmKHRoaXMudG9wTlM9dy5ucyxnPy4odyksdy5uYW1lPT09bSlicmVhazt0aGlzLmZhaWwoInVuZXhwZWN0ZWQgY2xvc2UgdGFnLiIpfTA9PT15''@;'; put 'put ''P3RoaXMuY2xvc2VkUm9vdD0hMDp5PDAmJih0aGlzLmZhaWwoYHVubWF0Y2hlZCBjbG9zaW5nIHRhZzogJHttfS5gKSx0aGlzLnRleHQrPWA8LyR7bX0+YCl9cGFyc2VFbnRpdHkoYyl7aWYoIiMiIT09Y1swXSl7Y29uc3QgZz10aGlzLkVOVElUSUVTW2NdO3JldHVybiB2b2lkIDAhPT1nP2c6''@;'; put 'put ''KHRoaXMuZmFpbCh0aGlzLmlzTmFtZShjKT8idW5kZWZpbmVkIGVudGl0eS4iOiJkaXNhbGxvd2VkIGNoYXJhY3RlciBpbiBlbnRpdHkgbmFtZS4iKSxgJiR7Y307YCl9bGV0IG09TmFOO3JldHVybiJ4Ij09PWNbMV0mJi9eI3hbMC05YS1mXSskL2kudGVzdChjKT9tPXBhcnNlSW50KGMuc2xp''@;'; put 'put ''Y2UoMiksMTYpOi9eI1swLTldKyQvLnRlc3QoYykmJihtPXBhcnNlSW50KGMuc2xpY2UoMSksMTApKSx0aGlzLmlzQ2hhcihtKT9TdHJpbmcuZnJvbUNvZGVQb2ludChtKToodGhpcy5mYWlsKCJtYWxmb3JtZWQgY2hhcmFjdGVyIGVudGl0eS4iKSxgJiR7Y307YCl9fX0seyJ4bWxjaGFycy94''@;'; put 'put ''bWwvMS4wL2VkNSI6NTQzLCJ4bWxjaGFycy94bWwvMS4xL2VkMiI6NTQ0LCJ4bWxjaGFycy94bWxucy8xLjAvZWQzIjo1NDV9XSw0OTc6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygic2FmZS1idWZmZXIiKS5CdWZmZXI7ZnVuY3Rpb24gYShvLHIpe3RoaXMuX2Jsb2Nr''@;'; put 'put ''PWIuYWxsb2MobyksdGhpcy5fZmluYWxTaXplPXIsdGhpcy5fYmxvY2tTaXplPW8sdGhpcy5fbGVuPTB9YS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKG8scil7InN0cmluZyI9PXR5cGVvZiBvJiYobz1iLmZyb20obyxyPXJ8fCJ1dGY4IikpO2Zvcih2YXIgdD10aGlzLl9ibG9jayxlPXRo''@;'; put 'put ''aXMuX2Jsb2NrU2l6ZSxsPW8ubGVuZ3RoLG49dGhpcy5fbGVuLGk9MDtpPGw7KXtmb3IodmFyIGg9biVlLGY9TWF0aC5taW4obC1pLGUtaCksdT0wO3U8Zjt1KyspdFtoK3VdPW9baSt1XTtpKz1mLChuKz1mKSVlPT0wJiZ0aGlzLl91cGRhdGUodCl9cmV0dXJuIHRoaXMuX2xlbis9bCx0aGlz''@;'; put 'put ''fSxhLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24obyl7dmFyIHI9dGhpcy5fbGVuJXRoaXMuX2Jsb2NrU2l6ZTt0aGlzLl9ibG9ja1tyXT0xMjgsdGhpcy5fYmxvY2suZmlsbCgwLHIrMSkscj49dGhpcy5fZmluYWxTaXplJiYodGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKSx0aGlzLl9ibG9j''@;'; put 'put ''ay5maWxsKDApKTt2YXIgdD04KnRoaXMuX2xlbjtpZih0PD00Mjk0OTY3Mjk1KXRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUodCx0aGlzLl9ibG9ja1NpemUtNCk7ZWxzZXt2YXIgZT0oNDI5NDk2NzI5NSZ0KT4+PjA7dGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRSgodC1lKS80Mjk0OTY3Mjk2''@;'; put 'put ''LHRoaXMuX2Jsb2NrU2l6ZS04KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKGUsdGhpcy5fYmxvY2tTaXplLTQpfXRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayk7dmFyIG49dGhpcy5faGFzaCgpO3JldHVybiBvP24udG9TdHJpbmcobyk6bn0sYS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlv''@;'; put 'put ''bigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzIil9LEUuZXhwb3J0cz1hfSx7InNhZmUtYnVmZmVyIjo0OTR9XSw0OTg6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9RS5leHBvcnRzPWZ1bmN0aW9uKGEpe2E9YS50''@;'; put 'put ''b0xvd2VyQ2FzZSgpO3ZhciBvPWJbYV07aWYoIW8pdGhyb3cgbmV3IEVycm9yKGErIiBpcyBub3Qgc3VwcG9ydGVkICh3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cykiKTtyZXR1cm4gbmV3IG99O2Iuc2hhPXMoIi4vc2hhIiksYi5zaGExPXMoIi4vc2hhMSIpLGIuc2hhMjI0PXMoIi4vc2hhMjI0''@;'; put 'put ''IiksYi5zaGEyNTY9cygiLi9zaGEyNTYiKSxiLnNoYTM4ND1zKCIuL3NoYTM4NCIpLGIuc2hhNTEyPXMoIi4vc2hhNTEyIil9LHsiLi9zaGEiOjQ5OSwiLi9zaGExIjo1MDAsIi4vc2hhMjI0Ijo1MDEsIi4vc2hhMjU2Ijo1MDIsIi4vc2hhMzg0Ijo1MDMsIi4vc2hhNTEyIjo1MDR9XSw0OTk6''@;'; put 'put ''W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiaW5oZXJpdHMiKSxhPXMoIi4vaGFzaCIpLG89cygic2FmZS1idWZmZXIiKS5CdWZmZXIscj1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLHQ9bmV3IEFycmF5KDgwKTtmdW5jdGlvbiBl''@;'; put 'put ''KCl7dGhpcy5pbml0KCksdGhpcy5fdz10LGEuY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBsKGkpe3JldHVybiBpPDwzMHxpPj4+Mn1mdW5jdGlvbiBuKGksaCxmLHUpe3JldHVybiAwPT09aT9oJmZ8fmgmdToyPT09aT9oJmZ8aCZ1fGYmdTpoXmZedX1iKGUsYSksZS5wcm90b3R5cGUuaW5p''@;'; put 'put ''dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sZS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihpKXtmb3IodmFyIGgsZj10''@;'; put 'put ''aGlzLl93LHU9MHx0aGlzLl9hLHA9MHx0aGlzLl9iLGQ9MHx0aGlzLl9jLHY9MHx0aGlzLl9kLF89MHx0aGlzLl9lLEE9MDtBPDE2OysrQSlmW0FdPWkucmVhZEludDMyQkUoNCpBKTtmb3IoO0E8ODA7KytBKWZbQV09ZltBLTNdXmZbQS04XV5mW0EtMTRdXmZbQS0xNl07Zm9yKHZhciBJPTA7''@;'; put 'put ''STw4MDsrK0kpe3ZhciBMPX5+KEkvMjApLE49MHwoKGg9dSk8PDV8aD4+PjI3KStuKEwscCxkLHYpK18rZltJXStyW0xdO189dix2PWQsZD1sKHApLHA9dSx1PU59dGhpcy5fYT11K3RoaXMuX2F8MCx0aGlzLl9iPXArdGhpcy5fYnwwLHRoaXMuX2M9ZCt0aGlzLl9jfDAsdGhpcy5fZD12K3Ro''@;'; put 'put ''aXMuX2R8MCx0aGlzLl9lPV8rdGhpcy5fZXwwfSxlLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBpPW8uYWxsb2NVbnNhZmUoMjApO3JldHVybiBpLndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksaS53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLGkud3JpdGVJbnQzMkJFKDB8dGhp''@;'; put 'put ''cy5fYyw4KSxpLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLGkud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksaX0sRS5leHBvcnRzPWV9LHsiLi9oYXNoIjo0OTcsaW5oZXJpdHM6NDQwLCJzYWZlLWJ1ZmZlciI6NDk0fV0sNTAwOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBiPXMoImluaGVyaXRzIiksYT1zKCIuL2hhc2giKSxvPXMoInNhZmUtYnVmZmVyIikuQnVmZmVyLHI9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSx0PW5ldyBBcnJheSg4MCk7ZnVuY3Rpb24gZSgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dCxhLmNhbGwo''@;'; put 'put ''dGhpcyw2NCw1Nil9ZnVuY3Rpb24gbChoKXtyZXR1cm4gaDw8NXxoPj4+Mjd9ZnVuY3Rpb24gbihoKXtyZXR1cm4gaDw8MzB8aD4+PjJ9ZnVuY3Rpb24gaShoLGYsdSxwKXtyZXR1cm4gMD09PWg/ZiZ1fH5mJnA6Mj09PWg/ZiZ1fGYmcHx1JnA6Zl51XnB9YihlLGEpLGUucHJvdG90eXBlLmlu''@;'; put 'put ''aXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9LGUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oaCl7Zm9yKHZhciBmLHU9''@;'; put 'put ''dGhpcy5fdyxwPTB8dGhpcy5fYSxkPTB8dGhpcy5fYix2PTB8dGhpcy5fYyxfPTB8dGhpcy5fZCxBPTB8dGhpcy5fZSxJPTA7STwxNjsrK0kpdVtJXT1oLnJlYWRJbnQzMkJFKDQqSSk7Zm9yKDtJPDgwOysrSSl1W0ldPShmPXVbSS0zXV51W0ktOF1edVtJLTE0XV51W0ktMTZdKTw8MXxmPj4+''@;'; put 'put ''MzE7Zm9yKHZhciBMPTA7TDw4MDsrK0wpe3ZhciBOPX5+KEwvMjApLFA9bChwKStpKE4sZCx2LF8pK0ErdVtMXStyW05dfDA7QT1fLF89dix2PW4oZCksZD1wLHA9UH10aGlzLl9hPXArdGhpcy5fYXwwLHRoaXMuX2I9ZCt0aGlzLl9ifDAsdGhpcy5fYz12K3RoaXMuX2N8MCx0aGlzLl9kPV8r''@;'; put 'put ''dGhpcy5fZHwwLHRoaXMuX2U9QSt0aGlzLl9lfDB9LGUucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIGg9by5hbGxvY1Vuc2FmZSgyMCk7cmV0dXJuIGgud3JpdGVJbnQzMkJFKDB8dGhpcy5fYSwwKSxoLndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCksaC53cml0ZUludDMyQkUoMHx0''@;'; put 'put ''aGlzLl9jLDgpLGgud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksaC53cml0ZUludDMyQkUoMHx0aGlzLl9lLDE2KSxofSxFLmV4cG9ydHM9ZX0seyIuL2hhc2giOjQ5Nyxpbmhlcml0czo0NDAsInNhZmUtYnVmZmVyIjo0OTR9XSw1MDE6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIGI9cygiaW5oZXJpdHMiKSxhPXMoIi4vc2hhMjU2Iiksbz1zKCIuL2hhc2giKSxyPXMoInNhZmUtYnVmZmVyIikuQnVmZmVyLHQ9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBlKCl7dGhpcy5pbml0KCksdGhpcy5fdz10LG8uY2FsbCh0aGlzLDY0LDU2KX1iKGUsYSksZS5wcm90b3R5cGUu''@;'; put 'put ''aW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTMyMzgzNzEwMzIsdGhpcy5fYj05MTQxNTA2NjMsdGhpcy5fYz04MTI3MDI5OTksdGhpcy5fZD00MTQ0OTEyNjk3LHRoaXMuX2U9NDI5MDc3NTg1Nyx0aGlzLl9mPTE3NTA2MDMwMjUsdGhpcy5fZz0xNjk0MDc2ODM5LHRoaXMuX2g9MzIw''@;'; put 'put ''NDA3NTQyOCx0aGlzfSxlLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBsPXIuYWxsb2NVbnNhZmUoMjgpO3JldHVybiBsLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLGwud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksbC53cml0ZUludDMyQkUodGhpcy5fYyw4KSxsLndyaXRlSW50MzJC''@;'; put 'put ''RSh0aGlzLl9kLDEyKSxsLndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxsLndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxsLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxsfSxFLmV4cG9ydHM9ZX0seyIuL2hhc2giOjQ5NywiLi9zaGEyNTYiOjUwMixpbmhlcml0czo0NDAsInNhZmUtYnVmZmVy''@;'; put 'put ''Ijo0OTR9XSw1MDI6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygiaW5oZXJpdHMiKSxhPXMoIi4vaGFzaCIpLG89cygic2FmZS1idWZmZXIiKS5CdWZmZXIscj1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3''@;'; put 'put ''MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMs''@;'; put 'put ''MTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1''@;'; put 'put ''MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3''@;'; put 'put ''Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSx0PW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gZSgpe3Ro''@;'; put 'put ''aXMuaW5pdCgpLHRoaXMuX3c9dCxhLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gbCh1LHAsZCl7cmV0dXJuIGRedSYocF5kKX1mdW5jdGlvbiBuKHUscCxkKXtyZXR1cm4gdSZwfGQmKHV8cCl9ZnVuY3Rpb24gaSh1KXtyZXR1cm4odT4+PjJ8dTw8MzApXih1Pj4+MTN8dTw8MTkpXih1Pj4+''@;'; put 'put ''MjJ8dTw8MTApfWZ1bmN0aW9uIGgodSl7cmV0dXJuKHU+Pj42fHU8PDI2KV4odT4+PjExfHU8PDIxKV4odT4+PjI1fHU8PDcpfWZ1bmN0aW9uIGYodSl7cmV0dXJuKHU+Pj43fHU8PDI1KV4odT4+PjE4fHU8PDE0KV51Pj4+M31iKGUsYSksZS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9hPTE3NzkwMzM3MDMsdGhpcy5fYj0zMTQ0MTM0Mjc3LHRoaXMuX2M9MTAxMzkwNDI0Mix0aGlzLl9kPTI3NzM0ODA3NjIsdGhpcy5fZT0xMzU5ODkzMTE5LHRoaXMuX2Y9MjYwMDgyMjkyNCx0aGlzLl9nPTUyODczNDYzNSx0aGlzLl9oPTE1NDE0NTkyMjUsdGhpc30sZS5w''@;'; put 'put ''cm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih1KXtmb3IodmFyIHAsZD10aGlzLl93LHY9MHx0aGlzLl9hLF89MHx0aGlzLl9iLEE9MHx0aGlzLl9jLEk9MHx0aGlzLl9kLEw9MHx0aGlzLl9lLE49MHx0aGlzLl9mLFA9MHx0aGlzLl9nLEI9MHx0aGlzLl9oLCQ9MDskPDE2OysrJClkWyRdPXUu''@;'; put 'put ''cmVhZEludDMyQkUoNCokKTtmb3IoOyQ8NjQ7KyskKWRbJF09MHwoKChwPWRbJC0yXSk+Pj4xN3xwPDwxNSleKHA+Pj4xOXxwPDwxMylecD4+PjEwKStkWyQtN10rZihkWyQtMTVdKStkWyQtMTZdO2Zvcih2YXIgRD0wO0Q8NjQ7KytEKXt2YXIgeD1CK2goTCkrbChMLE4sUCkrcltEXStkW0Rd''@;'; put 'put ''fDAsTT1pKHYpK24odixfLEEpfDA7Qj1QLFA9TixOPUwsTD1JK3h8MCxJPUEsQT1fLF89dix2PXgrTXwwfXRoaXMuX2E9dit0aGlzLl9hfDAsdGhpcy5fYj1fK3RoaXMuX2J8MCx0aGlzLl9jPUErdGhpcy5fY3wwLHRoaXMuX2Q9SSt0aGlzLl9kfDAsdGhpcy5fZT1MK3RoaXMuX2V8MCx0aGlz''@;'; put 'put ''Ll9mPU4rdGhpcy5fZnwwLHRoaXMuX2c9UCt0aGlzLl9nfDAsdGhpcy5faD1CK3RoaXMuX2h8MH0sZS5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgdT1vLmFsbG9jVW5zYWZlKDMyKTtyZXR1cm4gdS53cml0ZUludDMyQkUodGhpcy5fYSwwKSx1LndyaXRlSW50MzJCRSh0aGlzLl9i''@;'; put 'put ''LDQpLHUud3JpdGVJbnQzMkJFKHRoaXMuX2MsOCksdS53cml0ZUludDMyQkUodGhpcy5fZCwxMiksdS53cml0ZUludDMyQkUodGhpcy5fZSwxNiksdS53cml0ZUludDMyQkUodGhpcy5fZiwyMCksdS53cml0ZUludDMyQkUodGhpcy5fZywyNCksdS53cml0ZUludDMyQkUodGhpcy5faCwyOCks''@;'; put 'put ''dX0sRS5leHBvcnRzPWV9LHsiLi9oYXNoIjo0OTcsaW5oZXJpdHM6NDQwLCJzYWZlLWJ1ZmZlciI6NDk0fV0sNTAzOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoImluaGVyaXRzIiksYT1zKCIuL3NoYTUxMiIpLG89cygiLi9oYXNoIikscj1zKCJzYWZlLWJ1ZmZlciIp''@;'; put 'put ''LkJ1ZmZlcix0PW5ldyBBcnJheSgxNjApO2Z1bmN0aW9uIGUoKXt0aGlzLmluaXQoKSx0aGlzLl93PXQsby5jYWxsKHRoaXMsMTI4LDExMil9YihlLGEpLGUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MzQxODA3MDM2NSx0aGlzLl9iaD0xNjU0MjcwMjUwLHRo''@;'; put 'put ''aXMuX2NoPTI0Mzg1MjkzNzAsdGhpcy5fZGg9MzU1NDYyMzYwLHRoaXMuX2VoPTE3MzE0MDU0MTUsdGhpcy5fZmg9MjM5NDE4MDIzMSx0aGlzLl9naD0zNjc1MDA4NTI1LHRoaXMuX2hoPTEyMDMwNjI4MTMsdGhpcy5fYWw9MzIzODM3MTAzMix0aGlzLl9ibD05MTQxNTA2NjMsdGhpcy5fY2w9''@;'; put 'put ''ODEyNzAyOTk5LHRoaXMuX2RsPTQxNDQ5MTI2OTcsdGhpcy5fZWw9NDI5MDc3NTg1Nyx0aGlzLl9mbD0xNzUwNjAzMDI1LHRoaXMuX2dsPTE2OTQwNzY4MzksdGhpcy5faGw9MzIwNDA3NTQyOCx0aGlzfSxlLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBsPXIuYWxsb2NVbnNhZmUo''@;'; put 'put ''NDgpO2Z1bmN0aW9uIG4oaSxoLGYpe2wud3JpdGVJbnQzMkJFKGksZiksbC53cml0ZUludDMyQkUoaCxmKzQpfXJldHVybiBuKHRoaXMuX2FoLHRoaXMuX2FsLDApLG4odGhpcy5fYmgsdGhpcy5fYmwsOCksbih0aGlzLl9jaCx0aGlzLl9jbCwxNiksbih0aGlzLl9kaCx0aGlzLl9kbCwyNCks''@;'; put 'put ''bih0aGlzLl9laCx0aGlzLl9lbCwzMiksbih0aGlzLl9maCx0aGlzLl9mbCw0MCksbH0sRS5leHBvcnRzPWV9LHsiLi9oYXNoIjo0OTcsIi4vc2hhNTEyIjo1MDQsaW5oZXJpdHM6NDQwLCJzYWZlLWJ1ZmZlciI6NDk0fV0sNTA0OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBi''@;'; put 'put ''PXMoImluaGVyaXRzIiksYT1zKCIuL2hhc2giKSxvPXMoInNhZmUtYnVmZmVyIikuQnVmZmVyLHI9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcy''@;'; put 'put ''LDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0''@;'; put 'put ''MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1''@;'; put 'put ''OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5''@;'; put 'put ''NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2''@;'; put 'put ''NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0''@;'; put 'put ''NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5''@;'; put 'put ''Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIs''@;'; put 'put ''MjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0''@;'; put 'put ''MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEs''@;'; put 'put ''MTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXSx0PW5ldyBBcnJheSgxNjApO2Z1bmN0aW9uIGUoKXt0aGlz''@;'; put 'put ''LmluaXQoKSx0aGlzLl93PXQsYS5jYWxsKHRoaXMsMTI4LDExMil9ZnVuY3Rpb24gbChfLEEsSSl7cmV0dXJuIEleXyYoQV5JKX1mdW5jdGlvbiBuKF8sQSxJKXtyZXR1cm4gXyZBfEkmKF98QSl9ZnVuY3Rpb24gaShfLEEpe3JldHVybihfPj4+Mjh8QTw8NCleKEE+Pj4yfF88PDMwKV4oQT4+''@;'; put 'put ''Pjd8Xzw8MjUpfWZ1bmN0aW9uIGgoXyxBKXtyZXR1cm4oXz4+PjE0fEE8PDE4KV4oXz4+PjE4fEE8PDE0KV4oQT4+Pjl8Xzw8MjMpfWZ1bmN0aW9uIGYoXyxBKXtyZXR1cm4oXz4+PjF8QTw8MzEpXihfPj4+OHxBPDwyNCleXz4+Pjd9ZnVuY3Rpb24gdShfLEEpe3JldHVybihfPj4+MXxBPDwz''@;'; put 'put ''MSleKF8+Pj44fEE8PDI0KV4oXz4+Pjd8QTw8MjUpfWZ1bmN0aW9uIHAoXyxBKXtyZXR1cm4oXz4+PjE5fEE8PDEzKV4oQT4+PjI5fF88PDMpXl8+Pj42fWZ1bmN0aW9uIGQoXyxBKXtyZXR1cm4oXz4+PjE5fEE8PDEzKV4oQT4+PjI5fF88PDMpXihfPj4+NnxBPDwyNil9ZnVuY3Rpb24gdihf''@;'; put 'put ''LEEpe3JldHVybiBfPj4+MDxBPj4+MD8xOjB9YihlLGEpLGUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MTc3OTAzMzcwMyx0aGlzLl9iaD0zMTQ0MTM0Mjc3LHRoaXMuX2NoPTEwMTM5MDQyNDIsdGhpcy5fZGg9Mjc3MzQ4MDc2Mix0aGlzLl9laD0xMzU5ODkz''@;'; put 'put ''MTE5LHRoaXMuX2ZoPTI2MDA4MjI5MjQsdGhpcy5fZ2g9NTI4NzM0NjM1LHRoaXMuX2hoPTE1NDE0NTkyMjUsdGhpcy5fYWw9NDA4OTIzNTcyMCx0aGlzLl9ibD0yMjI3ODczNTk1LHRoaXMuX2NsPTQyNzExNzU3MjMsdGhpcy5fZGw9MTU5NTc1MDEyOSx0aGlzLl9lbD0yOTE3NTY1MTM3LHRo''@;'; put 'put ''aXMuX2ZsPTcyNTUxMTE5OSx0aGlzLl9nbD00MjE1Mzg5NTQ3LHRoaXMuX2hsPTMyNzAzMzIwOSx0aGlzfSxlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKF8pe2Zvcih2YXIgQT10aGlzLl93LEk9MHx0aGlzLl9haCxMPTB8dGhpcy5fYmgsTj0wfHRoaXMuX2NoLFA9MHx0aGlzLl9kaCxC''@;'; put 'put ''PTB8dGhpcy5fZWgsJD0wfHRoaXMuX2ZoLEQ9MHx0aGlzLl9naCx4PTB8dGhpcy5faGgsTT0wfHRoaXMuX2FsLGo9MHx0aGlzLl9ibCxjPTB8dGhpcy5fY2wsbT0wfHRoaXMuX2RsLGc9MHx0aGlzLl9lbCx5PTB8dGhpcy5fZmwsdz0wfHRoaXMuX2dsLGs9MHx0aGlzLl9obCxPPTA7TzwzMjtP''@;'; put 'put ''Kz0yKUFbT109Xy5yZWFkSW50MzJCRSg0Kk8pLEFbTysxXT1fLnJlYWRJbnQzMkJFKDQqTys0KTtmb3IoO088MTYwO08rPTIpe3ZhciB6PUFbTy0zMF0sVT1BW08tMzArMV0sVj1mKHosVSksUj11KFUseiksSD1wKHo9QVtPLTRdLFU9QVtPLTQrMV0pLFQ9ZChVLHopLHE9QVtPLTMyXSxZPUFb''@;'; put 'put ''Ty0zMisxXSxYPVIrQVtPLTE0KzFdfDAsSz1WK0FbTy0xNF0rdihYLFIpfDA7Sz0oSz1LK0grdihYPVgrVHwwLFQpfDApK3ErdihYPVgrWXwwLFkpfDAsQVtPXT1LLEFbTysxXT1YfWZvcih2YXIgcnQ9MDtydDwxNjA7cnQrPTIpe0s9QVtydF0sWD1BW3J0KzFdO3ZhciB0dD1uKEksTCxOKSxX''@;'; put 'put ''PW4oTSxqLGMpLFE9aShJLE0pLEc9aShNLEkpLGV0PWgoQixnKSxudD1oKGcsQiksaXQ9cltydF0sb3Q9cltydCsxXSxodD1sKEIsJCxEKSxmdD1sKGcseSx3KSxwdD1rK250fDAsVHQ9eCtldCt2KHB0LGspfDA7VHQ9KFR0PShUdD1UdCtodCt2KHB0PXB0K2Z0fDAsZnQpfDApK2l0K3YocHQ9''@;'; put 'put ''cHQrb3R8MCxvdCl8MCkrSyt2KHB0PXB0K1h8MCxYKXwwO3ZhciB5dD1HK1d8MCx3dD1RK3R0K3YoeXQsRyl8MDt4PUQsaz13LEQ9JCx3PXksJD1CLHk9ZyxCPVArVHQrdihnPW0rcHR8MCxtKXwwLFA9TixtPWMsTj1MLGM9aixMPUksaj1NLEk9VHQrd3QrdihNPXB0K3l0fDAscHQpfDB9dGhp''@;'; put 'put ''cy5fYWw9dGhpcy5fYWwrTXwwLHRoaXMuX2JsPXRoaXMuX2JsK2p8MCx0aGlzLl9jbD10aGlzLl9jbCtjfDAsdGhpcy5fZGw9dGhpcy5fZGwrbXwwLHRoaXMuX2VsPXRoaXMuX2VsK2d8MCx0aGlzLl9mbD10aGlzLl9mbCt5fDAsdGhpcy5fZ2w9dGhpcy5fZ2wrd3wwLHRoaXMuX2hsPXRoaXMu''@;'; put 'put ''X2hsK2t8MCx0aGlzLl9haD10aGlzLl9haCtJK3YodGhpcy5fYWwsTSl8MCx0aGlzLl9iaD10aGlzLl9iaCtMK3YodGhpcy5fYmwsail8MCx0aGlzLl9jaD10aGlzLl9jaCtOK3YodGhpcy5fY2wsYyl8MCx0aGlzLl9kaD10aGlzLl9kaCtQK3YodGhpcy5fZGwsbSl8MCx0aGlzLl9laD10aGlz''@;'; put 'put ''Ll9laCtCK3YodGhpcy5fZWwsZyl8MCx0aGlzLl9maD10aGlzLl9maCskK3YodGhpcy5fZmwseSl8MCx0aGlzLl9naD10aGlzLl9naCtEK3YodGhpcy5fZ2wsdyl8MCx0aGlzLl9oaD10aGlzLl9oaCt4K3YodGhpcy5faGwsayl8MH0sZS5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''Xz1vLmFsbG9jVW5zYWZlKDY0KTtmdW5jdGlvbiBBKEksTCxOKXtfLndyaXRlSW50MzJCRShJLE4pLF8ud3JpdGVJbnQzMkJFKEwsTis0KX1yZXR1cm4gQSh0aGlzLl9haCx0aGlzLl9hbCwwKSxBKHRoaXMuX2JoLHRoaXMuX2JsLDgpLEEodGhpcy5fY2gsdGhpcy5fY2wsMTYpLEEodGhpcy5f''@;'; put 'put ''ZGgsdGhpcy5fZGwsMjQpLEEodGhpcy5fZWgsdGhpcy5fZWwsMzIpLEEodGhpcy5fZmgsdGhpcy5fZmwsNDApLEEodGhpcy5fZ2gsdGhpcy5fZ2wsNDgpLEEodGhpcy5faGgsdGhpcy5faGwsNTYpLF99LEUuZXhwb3J0cz1lfSx7Ii4vaGFzaCI6NDk3LGluaGVyaXRzOjQ0MCwic2FmZS1idWZm''@;'; put 'put ''ZXIiOjQ5NH1dLDUwNTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtFLmV4cG9ydHM9YTt2YXIgYj1zKCJldmVudHMiKS5FdmVudEVtaXR0ZXI7ZnVuY3Rpb24gYSgpe2IuY2FsbCh0aGlzKX1zKCJpbmhlcml0cyIpKGEsYiksYS5SZWFkYWJsZT1zKCJyZWFkYWJsZS1zdHJlYW0vcmVh''@;'; put 'put ''ZGFibGUuanMiKSxhLldyaXRhYmxlPXMoInJlYWRhYmxlLXN0cmVhbS93cml0YWJsZS5qcyIpLGEuRHVwbGV4PXMoInJlYWRhYmxlLXN0cmVhbS9kdXBsZXguanMiKSxhLlRyYW5zZm9ybT1zKCJyZWFkYWJsZS1zdHJlYW0vdHJhbnNmb3JtLmpzIiksYS5QYXNzVGhyb3VnaD1zKCJyZWFkYWJs''@;'; put 'put ''ZS1zdHJlYW0vcGFzc3Rocm91Z2guanMiKSxhLlN0cmVhbT1hLGEucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24obyxyKXt2YXIgdD10aGlzO2Z1bmN0aW9uIGUocCl7by53cml0YWJsZSYmITE9PT1vLndyaXRlKHApJiZ0LnBhdXNlJiZ0LnBhdXNlKCl9ZnVuY3Rpb24gbCgpe3QucmVhZGFibGUm''@;'; put 'put ''JnQucmVzdW1lJiZ0LnJlc3VtZSgpfXQub24oImRhdGEiLGUpLG8ub24oImRyYWluIixsKSxvLl9pc1N0ZGlvfHxyJiYhMT09PXIuZW5kfHwodC5vbigiZW5kIixpKSx0Lm9uKCJjbG9zZSIsaCkpO3ZhciBuPSExO2Z1bmN0aW9uIGkoKXtufHwobj0hMCxvLmVuZCgpKX1mdW5jdGlvbiBoKCl7''@;'; put 'put ''bnx8KG49ITAsImZ1bmN0aW9uIj09dHlwZW9mIG8uZGVzdHJveSYmby5kZXN0cm95KCkpfWZ1bmN0aW9uIGYocCl7aWYodSgpLDA9PT1iLmxpc3RlbmVyQ291bnQodGhpcywiZXJyb3IiKSl0aHJvdyBwfWZ1bmN0aW9uIHUoKXt0LnJlbW92ZUxpc3RlbmVyKCJkYXRhIixlKSxvLnJlbW92ZUxp''@;'; put 'put ''c3RlbmVyKCJkcmFpbiIsbCksdC5yZW1vdmVMaXN0ZW5lcigiZW5kIixpKSx0LnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsaCksdC5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLGYpLG8ucmVtb3ZlTGlzdGVuZXIoImVycm9yIixmKSx0LnJlbW92ZUxpc3RlbmVyKCJlbmQiLHUpLHQucmVtb3ZlTGlz''@;'; put 'put ''dGVuZXIoImNsb3NlIix1KSxvLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsdSl9cmV0dXJuIHQub24oImVycm9yIixmKSxvLm9uKCJlcnJvciIsZiksdC5vbigiZW5kIix1KSx0Lm9uKCJjbG9zZSIsdSksby5vbigiY2xvc2UiLHUpLG8uZW1pdCgicGlwZSIsdCksb319LHtldmVudHM6NDIyLGlu''@;'; put 'put ''aGVyaXRzOjQ0MCwicmVhZGFibGUtc3RyZWFtL2R1cGxleC5qcyI6NTA3LCJyZWFkYWJsZS1zdHJlYW0vcGFzc3Rocm91Z2guanMiOjUxNiwicmVhZGFibGUtc3RyZWFtL3JlYWRhYmxlLmpzIjo1MTcsInJlYWRhYmxlLXN0cmVhbS90cmFuc2Zvcm0uanMiOjUxOCwicmVhZGFibGUtc3RyZWFt''@;'; put 'put ''L3dyaXRhYmxlLmpzIjo1MTl9XSw1MDY6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9e30udG9TdHJpbmc7RS5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGEpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PWIuY2FsbChhKX19LHt9XSw1MDc6W2Z1bmN0aW9uKHMs''@;'; put 'put ''RSxTKXsidXNlIHN0cmljdCI7RS5leHBvcnRzPXMoIi4vbGliL19zdHJlYW1fZHVwbGV4LmpzIil9LHsiLi9saWIvX3N0cmVhbV9kdXBsZXguanMiOjUwOH1dLDUwODpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1zKCJwcm9jZXNzLW5leHRpY2stYXJncyIpLGE9T2JqZWN0''@;'; put 'put ''LmtleXN8fGZ1bmN0aW9uKHUpe3ZhciBwPVtdO2Zvcih2YXIgZCBpbiB1KXAucHVzaChkKTtyZXR1cm4gcH07RS5leHBvcnRzPWk7dmFyIG89T2JqZWN0LmNyZWF0ZShzKCJjb3JlLXV0aWwtaXMiKSk7by5pbmhlcml0cz1zKCJpbmhlcml0cyIpO3ZhciByPXMoIi4vX3N0cmVhbV9yZWFkYWJs''@;'; put 'put ''ZSIpLHQ9cygiLi9fc3RyZWFtX3dyaXRhYmxlIik7by5pbmhlcml0cyhpLHIpO2Zvcih2YXIgZT1hKHQucHJvdG90eXBlKSxsPTA7bDxlLmxlbmd0aDtsKyspe3ZhciBuPWVbbF07aS5wcm90b3R5cGVbbl18fChpLnByb3RvdHlwZVtuXT10LnByb3RvdHlwZVtuXSl9ZnVuY3Rpb24gaSh1KXtp''@;'; put 'put ''ZighKHRoaXMgaW5zdGFuY2VvZiBpKSlyZXR1cm4gbmV3IGkodSk7ci5jYWxsKHRoaXMsdSksdC5jYWxsKHRoaXMsdSksdSYmITE9PT11LnJlYWRhYmxlJiYodGhpcy5yZWFkYWJsZT0hMSksdSYmITE9PT11LndyaXRhYmxlJiYodGhpcy53cml0YWJsZT0hMSksdGhpcy5hbGxvd0hhbGZPcGVu''@;'; put 'put ''PSEwLHUmJiExPT09dS5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExKSx0aGlzLm9uY2UoImVuZCIsaCl9ZnVuY3Rpb24gaCgpe3RoaXMuYWxsb3dIYWxmT3Blbnx8dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8Yi5uZXh0VGljayhmLHRoaXMpfWZ1bmN0aW9uIGYodSl7''@;'; put 'put ''dS5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5w''@;'; put 'put ''cm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9''@;'; put 'put ''LHNldDpmdW5jdGlvbih1KXt2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9dSx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD11KX19KSxpLnByb3RvdHlwZS5fZGVzdHJv''@;'; put 'put ''eT1mdW5jdGlvbih1LHApe3RoaXMucHVzaChudWxsKSx0aGlzLmVuZCgpLGIubmV4dFRpY2socCx1KX19LHsiLi9fc3RyZWFtX3JlYWRhYmxlIjo1MTAsIi4vX3N0cmVhbV93cml0YWJsZSI6NTEyLCJjb3JlLXV0aWwtaXMiOjM4Myxpbmhlcml0czo0NDAsInByb2Nlc3MtbmV4dGljay1hcmdz''@;'; put 'put ''Ijo0NjZ9XSw1MDk6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7RS5leHBvcnRzPW87dmFyIGI9cygiLi9fc3RyZWFtX3RyYW5zZm9ybSIpLGE9T2JqZWN0LmNyZWF0ZShzKCJjb3JlLXV0aWwtaXMiKSk7ZnVuY3Rpb24gbyhyKXtpZighKHRoaXMgaW5zdGFuY2VvZiBvKSlyZXR1cm4g''@;'; put 'put ''bmV3IG8ocik7Yi5jYWxsKHRoaXMscil9YS5pbmhlcml0cz1zKCJpbmhlcml0cyIpLGEuaW5oZXJpdHMobyxiKSxvLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHIsdCxlKXtlKG51bGwscil9fSx7Ii4vX3N0cmVhbV90cmFuc2Zvcm0iOjUxMSwiY29yZS11dGlsLWlzIjozODMsaW5o''@;'; put 'put ''ZXJpdHM6NDQwfV0sNTEwOltmdW5jdGlvbihzLEUsUyl7KGZ1bmN0aW9uKGIsYSl7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBvPXMoInByb2Nlc3MtbmV4dGljay1hcmdzIik7RS5leHBvcnRzPUk7dmFyIHIsdD1zKCJpc2FycmF5Iik7SS5SZWFkYWJsZVN0YXRlPUEscygiZXZlbnRz''@;'; put 'put ''Iik7dmFyIGU9ZnVuY3Rpb24oayxPKXtyZXR1cm4gay5saXN0ZW5lcnMoTykubGVuZ3RofSxsPXMoIi4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0iKSxuPXMoInNhZmUtYnVmZmVyIikuQnVmZmVyLGk9KHZvaWQgMCE9PWE/YTp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8''@;'; put 'put ''InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxoPU9iamVjdC5jcmVhdGUocygiY29yZS11dGlsLWlzIikpO2guaW5oZXJpdHM9cygiaW5oZXJpdHMiKTt2YXIgZj1zKCJ1dGlsIiksdT12b2lkIDA7dT1mJiZmLmRlYnVnbG9nP2YuZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0''@;'; put 'put ''aW9uKCl7fTt2YXIgcCxkPXMoIi4vaW50ZXJuYWwvc3RyZWFtcy9CdWZmZXJMaXN0Iiksdj1zKCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSIpO2guaW5oZXJpdHMoSSxsKTt2YXIgXz1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtmdW5jdGlvbiBBKGss''@;'; put 'put ''Tyl7az1rfHx7fTt2YXIgej1PIGluc3RhbmNlb2Yocj1yfHxzKCIuL19zdHJlYW1fZHVwbGV4IikpO3RoaXMub2JqZWN0TW9kZT0hIWsub2JqZWN0TW9kZSx6JiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFrLnJlYWRhYmxlT2JqZWN0TW9kZSk7dmFyIFU9ay5oaWdoV2F0''@;'; put 'put ''ZXJNYXJrLFY9ay5yZWFkYWJsZUhpZ2hXYXRlck1hcms7dGhpcy5oaWdoV2F0ZXJNYXJrPVV8fDA9PT1VP1U6eiYmKFZ8fDA9PT1WKT9WOnRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NCx0aGlzLmhpZ2hXYXRlck1hcms9TWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspLHRoaXMuYnVmZmVy''@;'; put 'put ''PW5ldyBkLHRoaXMubGVuZ3RoPTAsdGhpcy5waXBlcz1udWxsLHRoaXMucGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0''@;'; put 'put ''dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGluZz1rLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9''@;'; put 'put ''ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLGsuZW5jb2RpbmcmJihwfHwocD1zKCJzdHJpbmdfZGVjb2Rlci8iKS5TdHJpbmdEZWNvZGVyKSx0aGlzLmRlY29kZXI9bmV3IHAoay5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1rLmVuY29kaW5nKX1mdW5jdGlvbiBJKGsp''@;'; put 'put ''e2lmKHI9cnx8cygiLi9fc3RyZWFtX2R1cGxleCIpLCEodGhpcyBpbnN0YW5jZW9mIEkpKXJldHVybiBuZXcgSShrKTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyBBKGssdGhpcyksdGhpcy5yZWFkYWJsZT0hMCxrJiYoImZ1bmN0aW9uIj09dHlwZW9mIGsucmVhZCYmKHRoaXMuX3JlYWQ9ay5y''@;'; put 'put ''ZWFkKSwiZnVuY3Rpb24iPT10eXBlb2Ygay5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1rLmRlc3Ryb3kpKSxsLmNhbGwodGhpcyl9ZnVuY3Rpb24gTChrLE8seixVLFYpe3ZhciBSLFQsQyxGLHEsSD1rLl9yZWFkYWJsZVN0YXRlO3JldHVybiBudWxsPT09Tz8oSC5yZWFkaW5nPSExLGZ1bmN0''@;'; put 'put ''aW9uKFQsQyl7aWYoIUMuZW5kZWQpe2lmKEMuZGVjb2Rlcil7dmFyIEY9Qy5kZWNvZGVyLmVuZCgpO0YmJkYubGVuZ3RoJiYoQy5idWZmZXIucHVzaChGKSxDLmxlbmd0aCs9Qy5vYmplY3RNb2RlPzE6Ri5sZW5ndGgpfUMuZW5kZWQ9ITAsQihUKX19KGssSCkpOihWfHwoVD1ILG4uaXNCdWZm''@;'; put 'put ''ZXIocT1DPU8pfHxxIGluc3RhbmNlb2YgaXx8InN0cmluZyI9PXR5cGVvZiBDfHx2b2lkIDA9PT1DfHxULm9iamVjdE1vZGV8fChGPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksUj1GKSxSP2suZW1pdCgiZXJyb3IiLFIpOkgub2JqZWN0TW9kZXx8''@;'; put 'put ''TyYmTy5sZW5ndGg+MD8oInN0cmluZyI9PXR5cGVvZiBPfHxILm9iamVjdE1vZGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihPKT09PW4ucHJvdG90eXBlfHwoTz1mdW5jdGlvbihUKXtyZXR1cm4gbi5mcm9tKFQpfShPKSksVT9ILmVuZEVtaXR0ZWQ/ay5lbWl0KCJlcnJvciIsbmV3IEVycm9y''@;'; put 'put ''KCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCIpKTpOKGssSCxPLCEwKTpILmVuZGVkP2suZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigic3RyZWFtLnB1c2goKSBhZnRlciBFT0YiKSk6KEgucmVhZGluZz0hMSxILmRlY29kZXImJiF6PyhPPUguZGVjb2Rlci53cml0ZShPKSxILm9i''@;'; put 'put ''amVjdE1vZGV8fDAhPT1PLmxlbmd0aD9OKGssSCxPLCExKTpEKGssSCkpOk4oayxILE8sITEpKSk6VXx8KEgucmVhZGluZz0hMSkpLGZ1bmN0aW9uKFQpe3JldHVybiFULmVuZGVkJiYoVC5uZWVkUmVhZGFibGV8fFQubGVuZ3RoPFQuaGlnaFdhdGVyTWFya3x8MD09PVQubGVuZ3RoKX0oSCl9''@;'; put 'put ''ZnVuY3Rpb24gTihrLE8seixVKXtPLmZsb3dpbmcmJjA9PT1PLmxlbmd0aCYmIU8uc3luYz8oay5lbWl0KCJkYXRhIix6KSxrLnJlYWQoMCkpOihPLmxlbmd0aCs9Ty5vYmplY3RNb2RlPzE6ei5sZW5ndGgsVT9PLmJ1ZmZlci51bnNoaWZ0KHopOk8uYnVmZmVyLnB1c2goeiksTy5uZWVkUmVh''@;'; put 'put ''ZGFibGUmJkIoaykpLEQoayxPKX1mdW5jdGlvbiBQKGssTyl7cmV0dXJuIGs8PTB8fDA9PT1PLmxlbmd0aCYmTy5lbmRlZD8wOk8ub2JqZWN0TW9kZT8xOmshPWs/Ty5mbG93aW5nJiZPLmxlbmd0aD9PLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOk8ubGVuZ3RoOihrPk8uaGlnaFdhdGVyTWFy''@;'; put 'put ''ayYmKE8uaGlnaFdhdGVyTWFyaz0oKHo9ayk+PTgzODg2MDg/ej04Mzg4NjA4Oih6LS0senw9ej4+PjEsenw9ej4+PjIsenw9ej4+PjQsenw9ej4+Pjgsenw9ej4+PjE2LHorKykseikpLGs8PU8ubGVuZ3RoP2s6Ty5lbmRlZD9PLmxlbmd0aDooTy5uZWVkUmVhZGFibGU9ITAsMCkpO3ZhciB6''@;'; put 'put ''fWZ1bmN0aW9uIEIoayl7dmFyIE89ay5fcmVhZGFibGVTdGF0ZTtPLm5lZWRSZWFkYWJsZT0hMSxPLmVtaXR0ZWRSZWFkYWJsZXx8KHUoImVtaXRSZWFkYWJsZSIsTy5mbG93aW5nKSxPLmVtaXR0ZWRSZWFkYWJsZT0hMCxPLnN5bmM/by5uZXh0VGljaygkLGspOiQoaykpfWZ1bmN0aW9uICQo''@;'; put 'put ''ayl7dSgiZW1pdCByZWFkYWJsZSIpLGsuZW1pdCgicmVhZGFibGUiKSxjKGspfWZ1bmN0aW9uIEQoayxPKXtPLnJlYWRpbmdNb3JlfHwoTy5yZWFkaW5nTW9yZT0hMCxvLm5leHRUaWNrKHgsayxPKSl9ZnVuY3Rpb24geChrLE8pe2Zvcih2YXIgej1PLmxlbmd0aDshTy5yZWFkaW5nJiYhTy5m''@;'; put 'put ''bG93aW5nJiYhTy5lbmRlZCYmTy5sZW5ndGg8Ty5oaWdoV2F0ZXJNYXJrJiYodSgibWF5YmVSZWFkTW9yZSByZWFkIDAiKSxrLnJlYWQoMCkseiE9PU8ubGVuZ3RoKTspej1PLmxlbmd0aDtPLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIE0oayl7dSgicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAw''@;'; put 'put ''Iiksay5yZWFkKDApfWZ1bmN0aW9uIGooayxPKXtPLnJlYWRpbmd8fCh1KCJyZXN1bWUgcmVhZCAwIiksay5yZWFkKDApKSxPLnJlc3VtZVNjaGVkdWxlZD0hMSxPLmF3YWl0RHJhaW49MCxrLmVtaXQoInJlc3VtZSIpLGMoayksTy5mbG93aW5nJiYhTy5yZWFkaW5nJiZrLnJlYWQoMCl9ZnVu''@;'; put 'put ''Y3Rpb24gYyhrKXt2YXIgTz1rLl9yZWFkYWJsZVN0YXRlO2Zvcih1KCJmbG93IixPLmZsb3dpbmcpO08uZmxvd2luZyYmbnVsbCE9PWsucmVhZCgpOyk7fWZ1bmN0aW9uIG0oayxPKXtyZXR1cm4gMD09PU8ubGVuZ3RoP251bGw6KE8ub2JqZWN0TW9kZT96PU8uYnVmZmVyLnNoaWZ0KCk6IWt8''@;'; put 'put ''fGs+PU8ubGVuZ3RoPyh6PU8uZGVjb2Rlcj9PLmJ1ZmZlci5qb2luKCIiKToxPT09Ty5idWZmZXIubGVuZ3RoP08uYnVmZmVyLmhlYWQuZGF0YTpPLmJ1ZmZlci5jb25jYXQoTy5sZW5ndGgpLE8uYnVmZmVyLmNsZWFyKCkpOihSPU8uZGVjb2RlciwoVT1rKTwoVj1PLmJ1ZmZlcikuaGVhZC5k''@;'; put 'put ''YXRhLmxlbmd0aD8oSD1WLmhlYWQuZGF0YS5zbGljZSgwLFUpLFYuaGVhZC5kYXRhPVYuaGVhZC5kYXRhLnNsaWNlKFUpKTpIPVU9PT1WLmhlYWQuZGF0YS5sZW5ndGg/Vi5zaGlmdCgpOlI/ZnVuY3Rpb24oVCxDKXt2YXIgRj1DLmhlYWQscT0xLFk9Ri5kYXRhO2ZvcihULT1ZLmxlbmd0aDtG''@;'; put 'put ''PUYubmV4dDspe3ZhciBYPUYuZGF0YSxLPVQ+WC5sZW5ndGg/WC5sZW5ndGg6VDtpZihZKz1LPT09WC5sZW5ndGg/WDpYLnNsaWNlKDAsVCksMD09PShULT1LKSl7Sz09PVgubGVuZ3RoPygrK3EsQy5oZWFkPUYubmV4dD9GLm5leHQ6Qy50YWlsPW51bGwpOihDLmhlYWQ9RixGLmRhdGE9WC5z''@;'; put 'put ''bGljZShLKSk7YnJlYWt9KytxfXJldHVybiBDLmxlbmd0aC09cSxZfShVLFYpOmZ1bmN0aW9uKFQsQyl7dmFyIEY9bi5hbGxvY1Vuc2FmZShUKSxxPUMuaGVhZCxZPTE7Zm9yKHEuZGF0YS5jb3B5KEYpLFQtPXEuZGF0YS5sZW5ndGg7cT1xLm5leHQ7KXt2YXIgWD1xLmRhdGEsSz1UPlgubGVu''@;'; put 'put ''Z3RoP1gubGVuZ3RoOlQ7aWYoWC5jb3B5KEYsRi5sZW5ndGgtVCwwLEspLDA9PT0oVC09Sykpe0s9PT1YLmxlbmd0aD8oKytZLEMuaGVhZD1xLm5leHQ/cS5uZXh0OkMudGFpbD1udWxsKTooQy5oZWFkPXEscS5kYXRhPVguc2xpY2UoSykpO2JyZWFrfSsrWX1yZXR1cm4gQy5sZW5ndGgtPVks''@;'; put 'put ''Rn0oVSxWKSx6PUgpLHopO3ZhciBVLFYsUixILHp9ZnVuY3Rpb24gZyhrKXt2YXIgTz1rLl9yZWFkYWJsZVN0YXRlO2lmKE8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCciZW5kUmVhZGFibGUoKSIgY2FsbGVkIG9uIG5vbi1lbXB0eSBzdHJlYW0nKTtPLmVuZEVtaXR0ZWR8fChPLmVuZGVk''@;'; put 'put ''PSEwLG8ubmV4dFRpY2soeSxPLGspKX1mdW5jdGlvbiB5KGssTyl7ay5lbmRFbWl0dGVkfHwwIT09ay5sZW5ndGh8fChrLmVuZEVtaXR0ZWQ9ITAsTy5yZWFkYWJsZT0hMSxPLmVtaXQoImVuZCIpKX1mdW5jdGlvbiB3KGssTyl7Zm9yKHZhciB6PTAsVT1rLmxlbmd0aDt6PFU7eisrKWlmKGtb''@;'; put 'put ''el09PT1PKXJldHVybiB6O3JldHVybi0xfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rp''@;'; put 'put ''b24oayl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPWspfX0pLEkucHJvdG90eXBlLmRlc3Ryb3k9di5kZXN0cm95LEkucHJvdG90eXBlLl91bmRlc3Ryb3k9di51bmRlc3Ryb3ksSS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oayxPKXt0''@;'; put 'put ''aGlzLnB1c2gobnVsbCksTyhrKX0sSS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihrLE8pe3ZhciB6LFU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gVS5vYmplY3RNb2RlP3o9ITA6InN0cmluZyI9PXR5cGVvZiBrJiYoKE89T3x8VS5kZWZhdWx0RW5jb2RpbmcpIT09VS5lbmNvZGluZyYm''@;'; put 'put ''KGs9bi5mcm9tKGssTyksTz0iIiksej0hMCksTCh0aGlzLGssTywhMSx6KX0sSS5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihrKXtyZXR1cm4gTCh0aGlzLGssbnVsbCwhMCwhMSl9LEkucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0''@;'; put 'put ''YXRlLmZsb3dpbmd9LEkucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKGspe3JldHVybiBwfHwocD1zKCJzdHJpbmdfZGVjb2Rlci8iKS5TdHJpbmdEZWNvZGVyKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9bmV3IHAoayksdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz1r''@;'; put 'put ''LHRoaXN9LEkucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oayl7dSgicmVhZCIsayksaz1wYXJzZUludChrLDEwKTt2YXIgTz10aGlzLl9yZWFkYWJsZVN0YXRlLHo9aztpZigwIT09ayYmKE8uZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09ayYmTy5uZWVkUmVhZGFibGUmJihPLmxlbmd0aD49Ty5o''@;'; put 'put ''aWdoV2F0ZXJNYXJrfHxPLmVuZGVkKSlyZXR1cm4gdSgicmVhZDogZW1pdFJlYWRhYmxlIixPLmxlbmd0aCxPLmVuZGVkKSwwPT09Ty5sZW5ndGgmJk8uZW5kZWQ/Zyh0aGlzKTpCKHRoaXMpLG51bGw7aWYoMD09PShrPVAoayxPKSkmJk8uZW5kZWQpcmV0dXJuIDA9PT1PLmxlbmd0aCYmZyh0''@;'; put 'put ''aGlzKSxudWxsO3ZhciBVLFY9Ty5uZWVkUmVhZGFibGU7cmV0dXJuIHUoIm5lZWQgcmVhZGFibGUiLFYpLCgwPT09Ty5sZW5ndGh8fE8ubGVuZ3RoLWs8Ty5oaWdoV2F0ZXJNYXJrKSYmdSgibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLFY9ITApLE8uZW5kZWR8fE8ucmVhZGluZz91KCJy''@;'; put 'put ''ZWFkaW5nIG9yIGVuZGVkIixWPSExKTpWJiYodSgiZG8gcmVhZCIpLE8ucmVhZGluZz0hMCxPLnN5bmM9ITAsMD09PU8ubGVuZ3RoJiYoTy5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQoTy5oaWdoV2F0ZXJNYXJrKSxPLnN5bmM9ITEsTy5yZWFkaW5nfHwoaz1QKHosTykpKSxudWxsPT09''@;'; put 'put ''KFU9az4wP20oayxPKTpudWxsKT8oTy5uZWVkUmVhZGFibGU9ITAsaz0wKTpPLmxlbmd0aC09aywwPT09Ty5sZW5ndGgmJihPLmVuZGVkfHwoTy5uZWVkUmVhZGFibGU9ITApLHohPT1rJiZPLmVuZGVkJiZnKHRoaXMpKSxudWxsIT09VSYmdGhpcy5lbWl0KCJkYXRhIixVKSxVfSxJLnByb3Rv''@;'; put 'put ''dHlwZS5fcmVhZD1mdW5jdGlvbihrKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIl9yZWFkKCkgaXMgbm90IGltcGxlbWVudGVkIikpfSxJLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKGssTyl7dmFyIHo9dGhpcyxVPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKFUucGlwZXNDb3Vu''@;'; put 'put ''dCl7Y2FzZSAwOlUucGlwZXM9azticmVhaztjYXNlIDE6VS5waXBlcz1bVS5waXBlcyxrXTticmVhaztkZWZhdWx0OlUucGlwZXMucHVzaChrKX1VLnBpcGVzQ291bnQrPTEsdSgicGlwZSBjb3VudD0lZCBvcHRzPSVqIixVLnBpcGVzQ291bnQsTyk7dmFyIFY9TyYmITE9PT1PLmVuZHx8az09''@;'; put 'put ''PWIuc3Rkb3V0fHxrPT09Yi5zdGRlcnI/cnQ6SDtmdW5jdGlvbiBIKCl7dSgib25lbmQiKSxrLmVuZCgpfVUuZW5kRW1pdHRlZD9vLm5leHRUaWNrKFYpOnoub25jZSgiZW5kIixWKSxrLm9uKCJ1bnBpcGUiLGZ1bmN0aW9uIFIodHQsVyl7dSgib251bnBpcGUiKSx0dD09PXomJlcmJiExPT09''@;'; put 'put ''Vy5oYXNVbnBpcGVkJiYoVy5oYXNVbnBpcGVkPSEwLHUoImNsZWFudXAiKSxrLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsWCksay5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixLKSxrLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsVCksay5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFkpLGsucmVtb3Zl''@;'; put 'put ''TGlzdGVuZXIoInVucGlwZSIsUiksei5yZW1vdmVMaXN0ZW5lcigiZW5kIixIKSx6LnJlbW92ZUxpc3RlbmVyKCJlbmQiLHJ0KSx6LnJlbW92ZUxpc3RlbmVyKCJkYXRhIixxKSxDPSEwLCFVLmF3YWl0RHJhaW58fGsuX3dyaXRhYmxlU3RhdGUmJiFrLl93cml0YWJsZVN0YXRlLm5lZWREcmFp''@;'; put 'put ''bnx8VCgpKX0pO3ZhciBUPWZ1bmN0aW9uKHR0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgVz10dC5fcmVhZGFibGVTdGF0ZTt1KCJwaXBlT25EcmFpbiIsVy5hd2FpdERyYWluKSxXLmF3YWl0RHJhaW4mJlcuYXdhaXREcmFpbi0tLDA9PT1XLmF3YWl0RHJhaW4mJmUodHQsImRhdGEiKSYmKFcu''@;'; put 'put ''Zmxvd2luZz0hMCxjKHR0KSl9fSh6KTtrLm9uKCJkcmFpbiIsVCk7dmFyIEM9ITEsRj0hMTtmdW5jdGlvbiBxKHR0KXt1KCJvbmRhdGEiKSxGPSExLCExIT09ay53cml0ZSh0dCl8fEZ8fCgoMT09PVUucGlwZXNDb3VudCYmVS5waXBlcz09PWt8fFUucGlwZXNDb3VudD4xJiYtMSE9PXcoVS5w''@;'; put 'put ''aXBlcyxrKSkmJiFDJiYodSgiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlIixVLmF3YWl0RHJhaW4pLFUuYXdhaXREcmFpbisrLEY9ITApLHoucGF1c2UoKSl9ZnVuY3Rpb24gWSh0dCl7dSgib25lcnJvciIsdHQpLHJ0KCksay5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFkpLDA9PT1lKGss''@;'; put 'put ''ImVycm9yIikmJmsuZW1pdCgiZXJyb3IiLHR0KX1mdW5jdGlvbiBYKCl7ay5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixLKSxydCgpfWZ1bmN0aW9uIEsoKXt1KCJvbmZpbmlzaCIpLGsucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixYKSxydCgpfWZ1bmN0aW9uIHJ0KCl7dSgidW5waXBlIiksei51''@;'; put 'put ''bnBpcGUoayl9cmV0dXJuIHoub24oImRhdGEiLHEpLGZ1bmN0aW9uKHR0LFcsUSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHR0LnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gdHQucHJlcGVuZExpc3RlbmVyKFcsUSk7dHQuX2V2ZW50cyYmdHQuX2V2ZW50c1tXXT90KHR0Ll9ldmVudHNbV10pP3R0''@;'; put 'put ''Ll9ldmVudHNbV10udW5zaGlmdChRKTp0dC5fZXZlbnRzW1ddPVtRLHR0Ll9ldmVudHNbV11dOnR0Lm9uKFcsUSl9KGssImVycm9yIixZKSxrLm9uY2UoImNsb3NlIixYKSxrLm9uY2UoImZpbmlzaCIsSyksay5lbWl0KCJwaXBlIix6KSxVLmZsb3dpbmd8fCh1KCJwaXBlIHJlc3VtZSIpLHou''@;'; put 'put ''cmVzdW1lKCkpLGt9LEkucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihrKXt2YXIgTz10aGlzLl9yZWFkYWJsZVN0YXRlLHo9e2hhc1VucGlwZWQ6ITF9O2lmKDA9PT1PLnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09PU8ucGlwZXNDb3VudClyZXR1cm4gayYmayE9PU8ucGlwZXN8fChr''@;'; put 'put ''fHwoaz1PLnBpcGVzKSxPLnBpcGVzPW51bGwsTy5waXBlc0NvdW50PTAsTy5mbG93aW5nPSExLGsmJmsuZW1pdCgidW5waXBlIix0aGlzLHopKSx0aGlzO2lmKCFrKXt2YXIgVT1PLnBpcGVzLFY9Ty5waXBlc0NvdW50O08ucGlwZXM9bnVsbCxPLnBpcGVzQ291bnQ9MCxPLmZsb3dpbmc9ITE7''@;'; put 'put ''Zm9yKHZhciBSPTA7UjxWO1IrKylVW1JdLmVtaXQoInVucGlwZSIsdGhpcyx7aGFzVW5waXBlZDohMX0pO3JldHVybiB0aGlzfXZhciBIPXcoTy5waXBlcyxrKTtyZXR1cm4tMT09PUh8fChPLnBpcGVzLnNwbGljZShILDEpLE8ucGlwZXNDb3VudC09MSwxPT09Ty5waXBlc0NvdW50JiYoTy5w''@;'; put 'put ''aXBlcz1PLnBpcGVzWzBdKSxrLmVtaXQoInVucGlwZSIsdGhpcyx6KSksdGhpc30sSS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9SS5wcm90b3R5cGUub249ZnVuY3Rpb24oayxPKXt2YXIgej1sLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsayxPKTtpZigiZGF0YSI9PT1rKSExIT09dGhpcy5fcmVh''@;'; put 'put ''ZGFibGVTdGF0ZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpO2Vsc2UgaWYoInJlYWRhYmxlIj09PWspe3ZhciBVPXRoaXMuX3JlYWRhYmxlU3RhdGU7VS5lbmRFbWl0dGVkfHxVLnJlYWRhYmxlTGlzdGVuaW5nfHwoVS5yZWFkYWJsZUxpc3RlbmluZz1VLm5lZWRSZWFkYWJsZT0hMCxVLmVtaXR0''@;'; put 'put ''ZWRSZWFkYWJsZT0hMSxVLnJlYWRpbmc/VS5sZW5ndGgmJkIodGhpcyk6by5uZXh0VGljayhNLHRoaXMpKX1yZXR1cm4gen0sSS5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIHosaz10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBrLmZsb3dpbmd8fCh1KCJyZXN1bWUiKSxrLmZs''@;'; put 'put ''b3dpbmc9ITAsKHo9aykucmVzdW1lU2NoZWR1bGVkfHwoei5yZXN1bWVTY2hlZHVsZWQ9ITAsby5uZXh0VGljayhqLHRoaXMseikpKSx0aGlzfSxJLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiB1KCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUu''@;'; put 'put ''Zmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJih1KCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXN9LEkucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oayl7dmFyIE89dGhpcyx6PXRoaXMuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGUsVT0hMTtmb3IodmFyIFYgaW4gay5vbigiZW5kIixmdW5jdGlvbigpe2lmKHUoIndyYXBwZWQgZW5kIiksei5kZWNvZGVyJiYhei5lbmRlZCl7dmFyIEg9ei5kZWNvZGVyLmVuZCgpO0gmJkgubGVuZ3RoJiZPLnB1c2goSCl9Ty5wdXNoKG51bGwpfSksay5vbigiZGF0YSIsZnVu''@;'; put 'put ''Y3Rpb24oSCl7dSgid3JhcHBlZCBkYXRhIiksei5kZWNvZGVyJiYoSD16LmRlY29kZXIud3JpdGUoSCkpLHoub2JqZWN0TW9kZSYmbnVsbD09SHx8KHoub2JqZWN0TW9kZXx8SCYmSC5sZW5ndGgpJiYoTy5wdXNoKEgpfHwoVT0hMCxrLnBhdXNlKCkpKX0pLGspdm9pZCAwPT09dGhpc1tWXSYm''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIGtbVl0mJih0aGlzW1ZdPWZ1bmN0aW9uKEgpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBrW0hdLmFwcGx5KGssYXJndW1lbnRzKX19KFYpKTtmb3IodmFyIFI9MDtSPF8ubGVuZ3RoO1IrKylrLm9uKF9bUl0sdGhpcy5lbWl0LmJpbmQodGhpcyxfW1JdKSk7''@;'; put 'put ''cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24oSCl7dSgid3JhcHBlZCBfcmVhZCIsSCksVSYmKFU9ITEsay5yZXN1bWUoKSl9LHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLnByb3RvdHlwZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLEkuX2Zyb21MaXN0PW19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHMoIl9wcm9jZXNzIiksdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dp''@;'; put 'put ''bmRvdzp7fSl9LHsiLi9fc3RyZWFtX2R1cGxleCI6NTA4LCIuL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdCI6NTEzLCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSI6NTE0LCIuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtIjo1MTUsX3Byb2Nlc3M6NDY3LCJjb3JlLXV0aWwtaXMiOjM4''@;'; put 'put ''MyxldmVudHM6NDIyLGluaGVyaXRzOjQ0MCxpc2FycmF5OjUwNiwicHJvY2Vzcy1uZXh0aWNrLWFyZ3MiOjQ2Niwic2FmZS1idWZmZXIiOjUyMCwic3RyaW5nX2RlY29kZXIvIjo1MjEsdXRpbDoxODh9XSw1MTE6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7RS5leHBvcnRzPXI7dmFy''@;'; put 'put ''IGI9cygiLi9fc3RyZWFtX2R1cGxleCIpLGE9T2JqZWN0LmNyZWF0ZShzKCJjb3JlLXV0aWwtaXMiKSk7ZnVuY3Rpb24gbyhsLG4pe3ZhciBpPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2kudHJhbnNmb3JtaW5nPSExO3ZhciBoPWkud3JpdGVjYjtpZighaClyZXR1cm4gdGhpcy5lbWl0KCJlcnJv''@;'; put 'put ''ciIsbmV3IEVycm9yKCJ3cml0ZSBjYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSk7aS53cml0ZWNodW5rPW51bGwsaS53cml0ZWNiPW51bGwsbnVsbCE9biYmdGhpcy5wdXNoKG4pLGgobCk7dmFyIGY9dGhpcy5fcmVhZGFibGVTdGF0ZTtmLnJlYWRpbmc9ITEsKGYubmVlZFJlYWRh''@;'; put 'put ''YmxlfHxmLmxlbmd0aDxmLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKGYuaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gcihsKXtpZighKHRoaXMgaW5zdGFuY2VvZiByKSlyZXR1cm4gbmV3IHIobCk7Yi5jYWxsKHRoaXMsbCksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3Jt''@;'; put 'put ''Om8uYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLGwmJigi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgbC50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09bC50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBsLmZsdXNoJiYodGhpcy5fZmx1c2g9bC5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIsdCl9ZnVuY3Rpb24gdCgpe3ZhciBsPXRoaXM7ImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIHRoaXMuX2ZsdXNoP3RoaXMuX2ZsdXNoKGZ1bmN0aW9uKG4saSl7ZShsLG4saSl9KTplKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBlKGwsbixpKXtpZihuKXJldHVybiBsLmVtaXQoImVycm9yIixuKTtpZihudWxsIT1pJiZsLnB1c2goaSksbC5fd3JpdGFibGVTdGF0''@;'; put 'put ''ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAiKTtpZihsLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gc3RpbGwgdHJhbnNmb3Jt''@;'; put 'put ''aW5nIik7cmV0dXJuIGwucHVzaChudWxsKX1hLmluaGVyaXRzPXMoImluaGVyaXRzIiksYS5pbmhlcml0cyhyLGIpLHIucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24obCxuKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxiLnByb3RvdHlwZS5wdXNoLmNhbGwo''@;'; put 'put ''dGhpcyxsLG4pfSxyLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGwsbixpKXt0aHJvdyBuZXcgRXJyb3IoIl90cmFuc2Zvcm0oKSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sci5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGwsbixpKXt2YXIgaD10aGlzLl90cmFuc2Zvcm1TdGF0ZTtp''@;'; put 'put ''ZihoLndyaXRlY2I9aSxoLndyaXRlY2h1bms9bCxoLndyaXRlZW5jb2Rpbmc9biwhaC50cmFuc2Zvcm1pbmcpe3ZhciBmPXRoaXMuX3JlYWRhYmxlU3RhdGU7KGgubmVlZFRyYW5zZm9ybXx8Zi5uZWVkUmVhZGFibGV8fGYubGVuZ3RoPGYuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoZi5o''@;'; put 'put ''aWdoV2F0ZXJNYXJrKX19LHIucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKGwpe3ZhciBuPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGwhPT1uLndyaXRlY2h1bmsmJm4ud3JpdGVjYiYmIW4udHJhbnNmb3JtaW5nPyhuLnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0obi53cml0ZWNo''@;'; put 'put ''dW5rLG4ud3JpdGVlbmNvZGluZyxuLmFmdGVyVHJhbnNmb3JtKSk6bi5uZWVkVHJhbnNmb3JtPSEwfSxyLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihsLG4pe3ZhciBpPXRoaXM7Yi5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLGwsZnVuY3Rpb24oaCl7bihoKSxpLmVtaXQoImNs''@;'; put 'put ''b3NlIil9KX19LHsiLi9fc3RyZWFtX2R1cGxleCI6NTA4LCJjb3JlLXV0aWwtaXMiOjM4Myxpbmhlcml0czo0NDB9XSw1MTI6W2Z1bmN0aW9uKHMsRSxTKXsoZnVuY3Rpb24oYixhLG8peyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgcj1zKCJwcm9jZXNzLW5leHRpY2stYXJncyIpO2Z1''@;'; put 'put ''bmN0aW9uIHQoRCl7dmFyIHg9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24oTSxqKXt2YXIgbT1NLmVudHJ5O2ZvcihNLmVudHJ5PW51bGw7bTspe3ZhciBnPW0uY2FsbGJhY2s7ai5wZW5kaW5nY2ItLSxnKHVuZGVm''@;'; put 'put ''aW5lZCksbT1tLm5leHR9ai5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1NfSh4LEQpfX1FLmV4cG9ydHM9QTt2YXIgZSxsPSFiLmJyb3dzZXImJlsidjAuMTAiLCJ2MC45LiJdLmluZGV4T2YoYi52ZXJzaW9uLnNsaWNlKDAsNSkpPi0xP286ci5uZXh0VGljaztBLldyaXRhYmxlU3RhdGU9Xzt2''@;'; put 'put ''YXIgbj1PYmplY3QuY3JlYXRlKHMoImNvcmUtdXRpbC1pcyIpKTtuLmluaGVyaXRzPXMoImluaGVyaXRzIik7dmFyIHAsaT17ZGVwcmVjYXRlOnMoInV0aWwtZGVwcmVjYXRlIil9LGg9cygiLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbSIpLGY9cygic2FmZS1idWZmZXIiKS5CdWZmZXIsdT0o''@;'; put 'put ''dm9pZCAwIT09YT9hOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LGQ9cygiLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3kiKTtmdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIF8oRCx4KXtlPWV8fHMoIi4vX3N0''@;'; put 'put ''cmVhbV9kdXBsZXgiKTt2YXIgTT14IGluc3RhbmNlb2YgZTt0aGlzLm9iamVjdE1vZGU9ISEoRD1EfHx7fSkub2JqZWN0TW9kZSxNJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFELndyaXRhYmxlT2JqZWN0TW9kZSk7dmFyIGo9RC5oaWdoV2F0ZXJNYXJrLGM9RC53cml0''@;'; put 'put ''YWJsZUhpZ2hXYXRlck1hcms7dGhpcy5oaWdoV2F0ZXJNYXJrPWp8fDA9PT1qP2o6TSYmKGN8fDA9PT1jKT9jOnRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NCx0aGlzLmhpZ2hXYXRlck1hcms9TWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5u''@;'; put 'put ''ZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVjb2RlU3RyaW5ncz0hKCExPT09RC5kZWNvZGVTdHJpbmdzKSx0aGlzLmRlZmF1bHRFbmNvZGluZz1ELmRlZmF1bHRFbmNvZGluZ3x8InV0Zjgi''@;'; put 'put ''LHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oeSl7IWZ1bmN0aW9uKHcsayl7dmFyIFIsTz13Ll93cml0YWJsZVN0YXRlLHo9Ty5zeW5jLFU9Ty53cml0''@;'; put 'put ''ZWNiO2lmKChSPU8pLndyaXRpbmc9ITEsUi53cml0ZWNiPW51bGwsUi5sZW5ndGgtPVIud3JpdGVsZW4sUi53cml0ZWxlbj0wLGspIWZ1bmN0aW9uKFIsSCxULEMsRil7LS1ILnBlbmRpbmdjYixUPyhyLm5leHRUaWNrKEYsQyksci5uZXh0VGljaygkLFIsSCksUi5fd3JpdGFibGVTdGF0ZS5l''@;'; put 'put ''cnJvckVtaXR0ZWQ9ITAsUi5lbWl0KCJlcnJvciIsQykpOihGKEMpLFIuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLFIuZW1pdCgiZXJyb3IiLEMpLCQoUixIKSl9KHcsTyx6LGssVSk7ZWxzZXt2YXIgVj1QKE8pO1Z8fE8uY29ya2VkfHxPLmJ1ZmZlclByb2Nlc3Npbmd8fCFPLmJ1''@;'; put 'put ''ZmZlcmVkUmVxdWVzdHx8Tih3LE8pLHo/bChMLHcsTyxWLFUpOkwodyxPLFYsVSl9fSh4LHkpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRo''@;'; put 'put ''aXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyB0KHRoaXMpfWZ1bmN0aW9uIEEoRCl7aWYoZT1lfHxzKCIuL19zdHJlYW1fZHVwbGV4IiksIShwLmNhbGwoQSx0aGlzKXx8''@;'; put 'put ''dGhpcyBpbnN0YW5jZW9mIGUpKXJldHVybiBuZXcgQShEKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBfKEQsdGhpcyksdGhpcy53cml0YWJsZT0hMCxEJiYoImZ1bmN0aW9uIj09dHlwZW9mIEQud3JpdGUmJih0aGlzLl93cml0ZT1ELndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgRC53cml0''@;'; put 'put ''ZXYmJih0aGlzLl93cml0ZXY9RC53cml0ZXYpLCJmdW5jdGlvbiI9PXR5cGVvZiBELmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PUQuZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIEQuZmluYWwmJih0aGlzLl9maW5hbD1ELmZpbmFsKSksaC5jYWxsKHRoaXMpfWZ1bmN0aW9uIEkoRCx4LE0s''@;'; put 'put ''aixjLG0sZyl7eC53cml0ZWxlbj1qLHgud3JpdGVjYj1nLHgud3JpdGluZz0hMCx4LnN5bmM9ITAsTT9ELl93cml0ZXYoYyx4Lm9ud3JpdGUpOkQuX3dyaXRlKGMsbSx4Lm9ud3JpdGUpLHguc3luYz0hMX1mdW5jdGlvbiBMKEQseCxNLGope3ZhciBjLG07TXx8KGM9RCwwPT09KG09eCkubGVu''@;'; put 'put ''Z3RoJiZtLm5lZWREcmFpbiYmKG0ubmVlZERyYWluPSExLGMuZW1pdCgiZHJhaW4iKSkpLHgucGVuZGluZ2NiLS0saigpLCQoRCx4KX1mdW5jdGlvbiBOKEQseCl7eC5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciBNPXguYnVmZmVyZWRSZXF1ZXN0O2lmKEQuX3dyaXRldiYmTSYmTS5uZXh0KXt2''@;'; put 'put ''YXIgYz1uZXcgQXJyYXkoeC5idWZmZXJlZFJlcXVlc3RDb3VudCksbT14LmNvcmtlZFJlcXVlc3RzRnJlZTttLmVudHJ5PU07Zm9yKHZhciBnPTAseT0hMDtNOyljW2ddPU0sTS5pc0J1Znx8KHk9ITEpLE09TS5uZXh0LGcrPTE7Yy5hbGxCdWZmZXJzPXksSShELHgsITAseC5sZW5ndGgsYywi''@;'; put 'put ''IixtLmZpbmlzaCkseC5wZW5kaW5nY2IrKyx4Lmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCxtLm5leHQ/KHguY29ya2VkUmVxdWVzdHNGcmVlPW0ubmV4dCxtLm5leHQ9bnVsbCk6eC5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IHQoeCkseC5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9y''@;'; put 'put ''KDtNOyl7dmFyIHc9TS5jaHVuaztpZihJKEQseCwhMSx4Lm9iamVjdE1vZGU/MTp3Lmxlbmd0aCx3LE0uZW5jb2RpbmcsTS5jYWxsYmFjayksTT1NLm5leHQseC5idWZmZXJlZFJlcXVlc3RDb3VudC0tLHgud3JpdGluZylicmVha31udWxsPT09TSYmKHgubGFzdEJ1ZmZlcmVkUmVxdWVzdD1u''@;'; put 'put ''dWxsKX14LmJ1ZmZlcmVkUmVxdWVzdD1NLHguYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiBQKEQpe3JldHVybiBELmVuZGluZyYmMD09PUQubGVuZ3RoJiZudWxsPT09RC5idWZmZXJlZFJlcXVlc3QmJiFELmZpbmlzaGVkJiYhRC53cml0aW5nfWZ1bmN0aW9uIEIoRCx4KXtELl9maW5h''@;'; put 'put ''bChmdW5jdGlvbihNKXt4LnBlbmRpbmdjYi0tLE0mJkQuZW1pdCgiZXJyb3IiLE0pLHgucHJlZmluaXNoZWQ9ITAsRC5lbWl0KCJwcmVmaW5pc2giKSwkKEQseCl9KX1mdW5jdGlvbiAkKEQseCl7dmFyIGosYyxNPVAoeCk7cmV0dXJuIE0mJihqPUQsKGM9eCkucHJlZmluaXNoZWR8fGMuZmlu''@;'; put 'put ''YWxDYWxsZWR8fCgiZnVuY3Rpb24iPT10eXBlb2Ygai5fZmluYWw/KGMucGVuZGluZ2NiKyssYy5maW5hbENhbGxlZD0hMCxyLm5leHRUaWNrKEIsaixjKSk6KGMucHJlZmluaXNoZWQ9ITAsai5lbWl0KCJwcmVmaW5pc2giKSkpLDA9PT14LnBlbmRpbmdjYiYmKHguZmluaXNoZWQ9ITAsRC5l''@;'; put 'put ''bWl0KCJmaW5pc2giKSkpLE19bi5pbmhlcml0cyhBLGgpLF8ucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgRD10aGlzLmJ1ZmZlcmVkUmVxdWVzdCx4PVtdO0Q7KXgucHVzaChEKSxEPUQubmV4dDtyZXR1cm4geH0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KF8ucHJvdG90eXBlLCJidWZmZXIiLHtnZXQ6aS5kZXByZWNhdGUoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCdWZmZXIoKX0sIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyIGluc3RlYWQuIiwiREVQMDAw''@;'; put 'put ''MyIpfSl9Y2F0Y2h7fX0oKSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaGFzSW5zdGFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXT8ocD1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoQSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKEQpe3JldHVybiEhcC5jYWxsKHRoaXMsRCl8fHRoaXM9PT1BJiZEJiZELl93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgX319KSk6cD1mdW5jdGlvbihEKXtyZXR1cm4gRCBpbnN0YW5jZW9m''@;'; put 'put ''IHRoaXN9LEEucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSl9LEEucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEQseCxNKXt2YXIgaix5LHcsayxjPXRoaXMuX3dyaXRhYmxlU3RhdGUsbT0h''@;'; put 'put ''MSxnPSFjLm9iamVjdE1vZGUmJihmLmlzQnVmZmVyKGo9RCl8fGogaW5zdGFuY2VvZiB1KTtyZXR1cm4gZyYmIWYuaXNCdWZmZXIoRCkmJihEPWYuZnJvbShEKSksImZ1bmN0aW9uIj09dHlwZW9mIHgmJihNPXgseD1udWxsKSxnP3g9ImJ1ZmZlciI6eHx8KHg9Yy5kZWZhdWx0RW5jb2Rpbmcp''@;'; put 'put ''LCJmdW5jdGlvbiIhPXR5cGVvZiBNJiYoTT12KSxjLmVuZGVkPyh5PXRoaXMsdz1NLGs9bmV3IEVycm9yKCJ3cml0ZSBhZnRlciBlbmQiKSx5LmVtaXQoImVycm9yIixrKSxyLm5leHRUaWNrKHcsaykpOihnfHxmdW5jdGlvbih5LHcsayxPKXt2YXIgej0hMCxVPSExO3JldHVybiBudWxsPT09''@;'; put 'put ''az9VPW5ldyBUeXBlRXJyb3IoIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIik6InN0cmluZyI9PXR5cGVvZiBrfHx2b2lkIDA9PT1rfHx3Lm9iamVjdE1vZGV8fChVPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksVSYmKHkuZW1p''@;'; put 'put ''dCgiZXJyb3IiLFUpLHIubmV4dFRpY2soTyxVKSx6PSExKSx6fSh0aGlzLGMsRCxNKSkmJihjLnBlbmRpbmdjYisrLG09ZnVuY3Rpb24oeSx3LGssTyx6LFUpe2lmKCFrKXt2YXIgVj0oRj1PLChDPXcpLm9iamVjdE1vZGV8fCExPT09Qy5kZWNvZGVTdHJpbmdzfHwic3RyaW5nIiE9dHlwZW9m''@;'; put 'put ''IEZ8fChGPWYuZnJvbShGLHopKSxGKTtPIT09ViYmKGs9ITAsej0iYnVmZmVyIixPPVYpfXZhciBDLEYsUj13Lm9iamVjdE1vZGU/MTpPLmxlbmd0aDt3Lmxlbmd0aCs9Ujt2YXIgSD13Lmxlbmd0aDx3LmhpZ2hXYXRlck1hcms7aWYoSHx8KHcubmVlZERyYWluPSEwKSx3LndyaXRpbmd8fHcu''@;'; put 'put ''Y29ya2VkKXt2YXIgVD13Lmxhc3RCdWZmZXJlZFJlcXVlc3Q7dy5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuazpPLGVuY29kaW5nOnosaXNCdWY6ayxjYWxsYmFjazpVLG5leHQ6bnVsbH0sVD9ULm5leHQ9dy5sYXN0QnVmZmVyZWRSZXF1ZXN0OncuYnVmZmVyZWRSZXF1ZXN0PXcubGFzdEJ1''@;'; put 'put ''ZmZlcmVkUmVxdWVzdCx3LmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVsc2UgSSh5LHcsITEsUixPLHosVSk7cmV0dXJuIEh9KHRoaXMsYyxnLEQseCxNKSksbX0sQS5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LEEucHJvdG90eXBlLnVu''@;'; put 'put ''Y29yaz1mdW5jdGlvbigpe3ZhciBEPXRoaXMuX3dyaXRhYmxlU3RhdGU7RC5jb3JrZWQmJihELmNvcmtlZC0tLEQud3JpdGluZ3x8RC5jb3JrZWR8fEQuYnVmZmVyUHJvY2Vzc2luZ3x8IUQuYnVmZmVyZWRSZXF1ZXN0fHxOKHRoaXMsRCkpfSxBLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rp''@;'; put 'put ''bmc9ZnVuY3Rpb24oRCl7aWYoInN0cmluZyI9PXR5cGVvZiBEJiYoRD1ELnRvTG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1dGY4IiwidXRmLTgiLCJhc2NpaSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIiLCJ1Y3MtMiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJhdyJdLmluZGV4T2YoKEQrIiIp''@;'; put 'put ''LnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0QpO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz1ELHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0''@;'; put 'put ''ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLEEucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihELHgsTSl7TShuZXcgRXJyb3IoIl93cml0ZSgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpKX0sQS5w''@;'; put 'put ''cm90b3R5cGUuX3dyaXRldj1udWxsLEEucHJvdG90eXBlLmVuZD1mdW5jdGlvbihELHgsTSl7dmFyIGMsbSxnLGo9dGhpcy5fd3JpdGFibGVTdGF0ZTsiZnVuY3Rpb24iPT10eXBlb2YgRD8oTT1ELEQ9bnVsbCx4PW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiB4JiYoTT14LHg9bnVsbCksbnVs''@;'; put 'put ''bCE9RCYmdGhpcy53cml0ZShELHgpLGouY29ya2VkJiYoai5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxqLmVuZGluZ3x8KGM9dGhpcyxnPU0sKG09aikuZW5kaW5nPSEwLCQoYyxtKSxnJiYobS5maW5pc2hlZD9yLm5leHRUaWNrKGcpOmMub25jZSgiZmluaXNoIixnKSksbS5lbmRlZD0hMCxj''@;'; put 'put ''LndyaXRhYmxlPSExKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEEucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihEKXt0aGlz''@;'; put 'put ''Ll93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9RCl9fSksQS5wcm90b3R5cGUuZGVzdHJveT1kLmRlc3Ryb3ksQS5wcm90b3R5cGUuX3VuZGVzdHJveT1kLnVuZGVzdHJveSxBLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihELHgpe3RoaXMuZW5kKCks''@;'; put 'put ''eChEKX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHMoIl9wcm9jZXNzIiksdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSxzKCJ0aW1lcnMiKS5zZXRJbW1lZGlhdGUpfSx7Ii4vX3N0cmVhbV9kdXBsZXgi''@;'; put 'put ''OjUwOCwiLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3kiOjUxNCwiLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbSI6NTE1LF9wcm9jZXNzOjQ2NywiY29yZS11dGlsLWlzIjozODMsaW5oZXJpdHM6NDQwLCJwcm9jZXNzLW5leHRpY2stYXJncyI6NDY2LCJzYWZlLWJ1ZmZlciI6NTIwLHRpbWVy''@;'; put 'put ''czo1MjMsInV0aWwtZGVwcmVjYXRlIjo1MjR9XSw1MTM6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7dmFyIGI9cygic2FmZS1idWZmZXIiKS5CdWZmZXIsYT1zKCJ1dGlsIik7RS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbygpeyhmdW5jdGlvbihyLHQpe2lmKCEociBpbnN0''@;'; put 'put ''YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxvKSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXJldHVybiBvLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHIpe3ZhciB0PXtk''@;'; put 'put ''YXRhOnIsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PXQ6dGhpcy5oZWFkPXQsdGhpcy50YWlsPXQsKyt0aGlzLmxlbmd0aH0sby5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihyKXt2YXIgdD17ZGF0YTpyLG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgm''@;'; put 'put ''Jih0aGlzLnRhaWw9dCksdGhpcy5oZWFkPXQsKyt0aGlzLmxlbmd0aH0sby5wcm90b3R5cGUuc2hpZnQ9ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciByPXRoaXMuaGVhZC5kYXRhO3JldHVybiB0aGlzLmhlYWQ9MT09PXRoaXMubGVuZ3RoP3RoaXMudGFpbD1udWxsOnRoaXMu''@;'; put 'put ''aGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgscn19LG8ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9LG8ucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24ocil7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgdD10''@;'; put 'put ''aGlzLmhlYWQsZT0iIit0LmRhdGE7dD10Lm5leHQ7KWUrPXIrdC5kYXRhO3JldHVybiBlfSxvLnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24ocil7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBiLmFsbG9jKDApO2Zvcih2YXIgbj1iLmFsbG9jVW5zYWZlKHI+Pj4wKSxpPXRoaXMuaGVhZCxo''@;'; put 'put ''PTA7aTspaS5kYXRhLmNvcHkobixoKSxoKz1pLmRhdGEubGVuZ3RoLGk9aS5uZXh0O3JldHVybiBufSxvfSgpLGEmJmEuaW5zcGVjdCYmYS5pbnNwZWN0LmN1c3RvbSYmKEUuZXhwb3J0cy5wcm90b3R5cGVbYS5pbnNwZWN0LmN1c3RvbV09ZnVuY3Rpb24oKXt2YXIgbz1hLmluc3BlY3Qoe2xl''@;'; put 'put ''bmd0aDp0aGlzLmxlbmd0aH0pO3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUrIiAiK299KX0seyJzYWZlLWJ1ZmZlciI6NTIwLHV0aWw6MTg4fV0sNTE0OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO3ZhciBiPXMoInByb2Nlc3MtbmV4dGljay1hcmdzIik7ZnVuY3Rpb24gYShv''@;'; put 'put ''LHIpe28uZW1pdCgiZXJyb3IiLHIpfUUuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbihvLHIpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfHx0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRl''@;'; put 'put ''LmRlc3Ryb3llZD8ocj9yKG8pOm8mJih0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsYi5uZXh0VGljayhhLHRoaXMsbykpOmIubmV4dFRpY2soYSx0aGlzLG8pKSx0aGlzKToo''@;'; put 'put ''dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX2Rlc3Ryb3kob3x8bnVsbCxmdW5jdGlvbihuKXshciYmbj90Ll93cml0YWJsZVN0''@;'; put 'put ''YXRlP3QuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodC5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsYi5uZXh0VGljayhhLHQsbikpOmIubmV4dFRpY2soYSx0LG4pOnImJnIobil9KSx0aGlzKX0sdW5kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYm''@;'; put 'put ''KHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxl''@;'; put 'put ''U3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3Rh''@;'; put 'put ''dGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfX19LHsicHJvY2Vzcy1uZXh0aWNrLWFyZ3MiOjQ2Nn1dLDUxNTpbZnVuY3Rpb24ocyxFLFMpe2FyZ3VtZW50c1s0XVs0OTBdWzBdLmFwcGx5KFMsYXJndW1lbnRzKX0se2R1cDo0OTAsZXZlbnRzOjQy''@;'; put 'put ''Mn1dLDUxNjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtFLmV4cG9ydHM9cygiLi9yZWFkYWJsZSIpLlBhc3NUaHJvdWdofSx7Ii4vcmVhZGFibGUiOjUxN31dLDUxNzpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjsoUz1FLmV4cG9ydHM9cygiLi9saWIvX3N0cmVhbV9yZWFk''@;'; put 'put ''YWJsZS5qcyIpKS5TdHJlYW09UyxTLlJlYWRhYmxlPVMsUy5Xcml0YWJsZT1zKCIuL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIiksUy5EdXBsZXg9cygiLi9saWIvX3N0cmVhbV9kdXBsZXguanMiKSxTLlRyYW5zZm9ybT1zKCIuL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcyIpLFMuUGFzc1Ro''@;'; put 'put ''cm91Z2g9cygiLi9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qcyIpfSx7Ii4vbGliL19zdHJlYW1fZHVwbGV4LmpzIjo1MDgsIi4vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMiOjUwOSwiLi9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcyI6NTEwLCIuL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5q''@;'; put 'put ''cyI6NTExLCIuL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIjo1MTJ9XSw1MTg6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7RS5leHBvcnRzPXMoIi4vcmVhZGFibGUiKS5UcmFuc2Zvcm19LHsiLi9yZWFkYWJsZSI6NTE3fV0sNTE5OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O0UuZXhwb3J0cz1zKCIuL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIil9LHsiLi9saWIvX3N0cmVhbV93cml0YWJsZS5qcyI6NTEyfV0sNTIwOltmdW5jdGlvbihzLEUsUyl7YXJndW1lbnRzWzRdWzIxN11bMF0uYXBwbHkoUyxhcmd1bWVudHMpfSx7YnVmZmVyOjIyMCxkdXA6MjE3fV0sNTIx''@;'; put 'put ''OltmdW5jdGlvbihzLEUsUyl7YXJndW1lbnRzWzRdWzIxOF1bMF0uYXBwbHkoUyxhcmd1bWVudHMpfSx7ZHVwOjIxOCwic2FmZS1idWZmZXIiOjUyMH1dLDUyMjpbZnVuY3Rpb24ocyxFLFMpe2FyZ3VtZW50c1s0XVsyMThdWzBdLmFwcGx5KFMsYXJndW1lbnRzKX0se2R1cDoyMTgsInNhZmUt''@;'; put 'put ''YnVmZmVyIjo0OTR9XSw1MjM6W2Z1bmN0aW9uKHMsRSxTKXsoZnVuY3Rpb24oYixhKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIG89cygicHJvY2Vzcy9icm93c2VyLmpzIikubmV4dFRpY2sscj1GdW5jdGlvbi5wcm90b3R5cGUuYXBwbHksdD1BcnJheS5wcm90b3R5cGUuc2xpY2Us''@;'; put 'put ''ZT17fSxsPTA7ZnVuY3Rpb24gbihpLGgpe3RoaXMuX2lkPWksdGhpcy5fY2xlYXJGbj1ofVMuc2V0VGltZW91dD1mdW5jdGlvbigpe3JldHVybiBuZXcgbihyLmNhbGwoc2V0VGltZW91dCx3aW5kb3csYXJndW1lbnRzKSxjbGVhclRpbWVvdXQpfSxTLnNldEludGVydmFsPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIG5ldyBuKHIuY2FsbChzZXRJbnRlcnZhbCx3aW5kb3csYXJndW1lbnRzKSxjbGVhckludGVydmFsKX0sUy5jbGVhclRpbWVvdXQ9Uy5jbGVhckludGVydmFsPWZ1bmN0aW9uKGkpe2kuY2xvc2UoKX0sbi5wcm90b3R5cGUudW5yZWY9bi5wcm90b3R5cGUucmVmPWZ1bmN0aW9uKCl7''@;'; put 'put ''fSxuLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3RoaXMuX2NsZWFyRm4uY2FsbCh3aW5kb3csdGhpcy5faWQpfSxTLmVucm9sbD1mdW5jdGlvbihpLGgpe2NsZWFyVGltZW91dChpLl9pZGxlVGltZW91dElkKSxpLl9pZGxlVGltZW91dD1ofSxTLnVuZW5yb2xsPWZ1bmN0aW9uKGkpe2Ns''@;'; put 'put ''ZWFyVGltZW91dChpLl9pZGxlVGltZW91dElkKSxpLl9pZGxlVGltZW91dD0tMX0sUy5fdW5yZWZBY3RpdmU9Uy5hY3RpdmU9ZnVuY3Rpb24oaSl7Y2xlYXJUaW1lb3V0KGkuX2lkbGVUaW1lb3V0SWQpO3ZhciBoPWkuX2lkbGVUaW1lb3V0O2g+PTAmJihpLl9pZGxlVGltZW91dElkPXNldFRp''@;'; put 'put ''bWVvdXQoZnVuY3Rpb24oKXtpLl9vblRpbWVvdXQmJmkuX29uVGltZW91dCgpfSxoKSl9LFMuc2V0SW1tZWRpYXRlPSJmdW5jdGlvbiI9PXR5cGVvZiBiP2I6ZnVuY3Rpb24oaSl7dmFyIGg9bCsrLGY9IShhcmd1bWVudHMubGVuZ3RoPDIpJiZ0LmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBl''@;'; put 'put ''W2hdPSEwLG8oZnVuY3Rpb24oKXtlW2hdJiYoZj9pLmFwcGx5KG51bGwsZik6aS5jYWxsKG51bGwpLFMuY2xlYXJJbW1lZGlhdGUoaCkpfSksaH0sUy5jbGVhckltbWVkaWF0ZT0iZnVuY3Rpb24iPT10eXBlb2YgYT9hOmZ1bmN0aW9uKGkpe2RlbGV0ZSBlW2ldfX0pLmNhbGwodGhpcyl9KS5j''@;'; put 'put ''YWxsKHRoaXMscygidGltZXJzIikuc2V0SW1tZWRpYXRlLHMoInRpbWVycyIpLmNsZWFySW1tZWRpYXRlKX0seyJwcm9jZXNzL2Jyb3dzZXIuanMiOjQ2Nyx0aW1lcnM6NTIzfV0sNTI0OltmdW5jdGlvbihzLEUsUyl7KGZ1bmN0aW9uKGIpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5j''@;'; put 'put ''dGlvbiBhKG8pe3RyeXtpZighYi5sb2NhbFN0b3JhZ2UpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9dmFyIHI9Yi5sb2NhbFN0b3JhZ2Vbb107cmV0dXJuIG51bGwhPXImJiJ0cnVlIj09PVN0cmluZyhyKS50b0xvd2VyQ2FzZSgpfUUuZXhwb3J0cz1mdW5jdGlvbihvLHIpe2lmKGEoIm5vRGVw''@;'; put 'put ''cmVjYXRpb24iKSlyZXR1cm4gbzt2YXIgdD0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighdCl7aWYoYSgidGhyb3dEZXByZWNhdGlvbiIpKXRocm93IG5ldyBFcnJvcihyKTthKCJ0cmFjZURlcHJlY2F0aW9uIik/Y29uc29sZS50cmFjZShyKTpjb25zb2xlLndhcm4ociksdD0hMH1yZXR1cm4g''@;'; put 'put ''by5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSw1MjU6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7''@;'; put 'put ''RS5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGIsYSl7Yi5zdXBlcl89YSxiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGEucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6YixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJs''@;'; put 'put ''ZTohMH19KX06ZnVuY3Rpb24oYixhKXtiLnN1cGVyXz1hO3ZhciBvPWZ1bmN0aW9uKCl7fTtvLnByb3RvdHlwZT1hLnByb3RvdHlwZSxiLnByb3RvdHlwZT1uZXcgbyxiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ifX0se31dLDUyNjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtFLmV4''@;'; put 'put ''cG9ydHM9ZnVuY3Rpb24oYil7cmV0dXJuIGImJiJvYmplY3QiPT10eXBlb2YgYiYmImZ1bmN0aW9uIj09dHlwZW9mIGIuY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIGIucmVhZFVJbnQ4fX0se31dLDUyNzpbZnVuY3Rpb24ocyxFLFMpeyhmdW5j''@;'; put 'put ''dGlvbihiLGEpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgbz0vJVtzZGolXS9nO1MuZm9ybWF0PWZ1bmN0aW9uKGMpe2lmKCFfKGMpKXtmb3IodmFyIG09W10sZz0wO2c8YXJndW1lbnRzLmxlbmd0aDtnKyspbS5wdXNoKGUoYXJndW1lbnRzW2ddKSk7cmV0dXJuIG0uam9pbigiICIp''@;'; put 'put ''fWc9MTtmb3IodmFyIHk9YXJndW1lbnRzLHc9eS5sZW5ndGgsaz1TdHJpbmcoYykucmVwbGFjZShvLGZ1bmN0aW9uKHope2lmKCIlJSI9PT16KXJldHVybiIlIjtpZihnPj13KXJldHVybiB6O3N3aXRjaCh6KXtjYXNlIiVzIjpyZXR1cm4gU3RyaW5nKHlbZysrXSk7Y2FzZSIlZCI6cmV0dXJu''@;'; put 'put ''IE51bWJlcih5W2crK10pO2Nhc2UiJWoiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoeVtnKytdKX1jYXRjaHtyZXR1cm4iW0NpcmN1bGFyXSJ9ZGVmYXVsdDpyZXR1cm4gen19KSxPPXlbZ107Zzx3O089eVsrK2ddKWQoTyl8fCFMKE8pP2srPSIgIitPOmsrPSIgIitlKE8pO3JldHVybiBr''@;'; put 'put ''fSxTLmRlcHJlY2F0ZT1mdW5jdGlvbihjLG0pe2lmKEEoYS5wcm9jZXNzKSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gUy5kZXByZWNhdGUoYyxtKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2lmKCEwPT09Yi5ub0RlcHJlY2F0aW9uKXJldHVybiBjO3ZhciBnPSExO3JldHVybiBmdW5jdGlv''@;'; put 'put ''bigpe2lmKCFnKXtpZihiLnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKG0pO2IudHJhY2VEZXByZWNhdGlvbj9jb25zb2xlLnRyYWNlKG0pOmNvbnNvbGUuZXJyb3IobSksZz0hMH1yZXR1cm4gYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTt2YXIgcix0PXt9O2Z1bmN0aW9uIGUo''@;'; put 'put ''YyxtKXt2YXIgZz17c2VlbjpbXSxzdHlsaXplOm59O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYoZy5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihnLmNvbG9ycz1hcmd1bWVudHNbM10pLHAobSk/Zy5zaG93SGlkZGVuPW06bSYmUy5fZXh0ZW5kKGcsbSks''@;'; put 'put ''QShnLnNob3dIaWRkZW4pJiYoZy5zaG93SGlkZGVuPSExKSxBKGcuZGVwdGgpJiYoZy5kZXB0aD0yKSxBKGcuY29sb3JzKSYmKGcuY29sb3JzPSExKSxBKGcuY3VzdG9tSW5zcGVjdCkmJihnLmN1c3RvbUluc3BlY3Q9ITApLGcuY29sb3JzJiYoZy5zdHlsaXplPWwpLGkoZyxjLGcuZGVwdGgp''@;'; put 'put ''fWZ1bmN0aW9uIGwoYyxtKXt2YXIgZz1lLnN0eWxlc1ttXTtyZXR1cm4gZz8iXHgxYlsiK2UuY29sb3JzW2ddWzBdKyJtIitjKyJceDFiWyIrZS5jb2xvcnNbZ11bMV0rIm0iOmN9ZnVuY3Rpb24gbihjLG0pe3JldHVybiBjfWZ1bmN0aW9uIGkoYyxtLGcpe2lmKGMuY3VzdG9tSW5zcGVjdCYm''@;'; put 'put ''bSYmQihtLmluc3BlY3QpJiZtLmluc3BlY3QhPT1TLmluc3BlY3QmJighbS5jb25zdHJ1Y3Rvcnx8bS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT1tKSl7dmFyIHk9bS5pbnNwZWN0KGcsYyk7cmV0dXJuIF8oeSl8fCh5PWkoYyx5LGcpKSx5fXZhciB3PWZ1bmN0aW9uKFQsQyl7aWYoQShDKSly''@;'; put 'put ''ZXR1cm4gVC5zdHlsaXplKCJ1bmRlZmluZWQiLCJ1bmRlZmluZWQiKTtpZihfKEMpKXt2YXIgRj0iJyIrSlNPTi5zdHJpbmdpZnkoQykucmVwbGFjZSgvXiJ8IiQvZywiIikucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpKyInIjtyZXR1cm4gVC5zdHlsaXplKEYsInN0''@;'; put 'put ''cmluZyIpfXJldHVybiB2KEMpP1Quc3R5bGl6ZSgiIitDLCJudW1iZXIiKTpwKEMpP1Quc3R5bGl6ZSgiIitDLCJib29sZWFuIik6ZChDKT9ULnN0eWxpemUoIm51bGwiLCJudWxsIik6dm9pZCAwfShjLG0pO2lmKHcpcmV0dXJuIHc7dmFyIEMsaz1PYmplY3Qua2V5cyhtKSxPPShDPXt9LGsu''@;'; put 'put ''Zm9yRWFjaChmdW5jdGlvbihGLHEpe0NbRl09ITB9KSxDKTtpZihjLnNob3dIaWRkZW4mJihrPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG0pKSxQKG0pJiYoay5pbmRleE9mKCJtZXNzYWdlIik+PTB8fGsuaW5kZXhPZigiZGVzY3JpcHRpb24iKT49MCkpcmV0dXJuIGgobSk7aWYoMD09''@;'; put 'put ''PWsubGVuZ3RoKXtpZihCKG0pKXJldHVybiBjLnN0eWxpemUoIltGdW5jdGlvbiIrKG0ubmFtZT8iOiAiK20ubmFtZToiIikrIl0iLCJzcGVjaWFsIik7aWYoSShtKSlyZXR1cm4gYy5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtKSwicmVnZXhwIik7aWYoTihtKSly''@;'; put 'put ''ZXR1cm4gYy5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobSksImRhdGUiKTtpZihQKG0pKXJldHVybiBoKG0pfXZhciBVLFY9IiIsUj0hMSxIPVsieyIsIn0iXTtyZXR1cm4gdShtKSYmKFI9ITAsSD1bIlsiLCJdIl0pLEIobSkmJihWPSIgW0Z1bmN0aW9uIisobS5uYW1l''@;'; put 'put ''PyI6ICIrbS5uYW1lOiIiKSsiXSIpLEkobSkmJihWPSIgIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobSkpLE4obSkmJihWPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKG0pKSxQKG0pJiYoVj0iICIraChtKSksMCE9PWsubGVuZ3RofHxSJiYwIT1tLmxlbmd0''@;'; put 'put ''aD9nPDA/SShtKT9jLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG0pLCJyZWdleHAiKTpjLnN0eWxpemUoIltPYmplY3RdIiwic3BlY2lhbCIpOihjLnNlZW4ucHVzaChtKSxVPVI/ZnVuY3Rpb24oVCxDLEYscSxZKXtmb3IodmFyIFg9W10sSz0wLHJ0PUMubGVuZ3Ro''@;'; put 'put ''O0s8cnQ7KytLKWooQyxTdHJpbmcoSykpP1gucHVzaChmKFQsQyxGLHEsU3RyaW5nKEspLCEwKSk6WC5wdXNoKCIiKTtyZXR1cm4gWS5mb3JFYWNoKGZ1bmN0aW9uKHR0KXt0dC5tYXRjaCgvXlxkKyQvKXx8WC5wdXNoKGYoVCxDLEYscSx0dCwhMCkpfSksWH0oYyxtLGcsTyxrKTprLm1hcChm''@;'; put 'put ''dW5jdGlvbihUKXtyZXR1cm4gZihjLG0sZyxPLFQsUil9KSxjLnNlZW4ucG9wKCksZnVuY3Rpb24oVCxDLEYpe3JldHVybiBULnJlZHVjZShmdW5jdGlvbihxLFkpe3JldHVybiBZLmluZGV4T2YoIlxuIikscStZLnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKT42''@;'; put 'put ''MD9GWzBdKygiIj09PUM/IiI6QysiXG4gIikrIiAiK1Quam9pbigiLFxuICAiKSsiICIrRlsxXTpGWzBdK0MrIiAiK1Quam9pbigiLCAiKSsiICIrRlsxXX0oVSxWLEgpKTpIWzBdK1YrSFsxXX1mdW5jdGlvbiBoKGMpe3JldHVybiJbIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChj''@;'; put 'put ''KSsiXSJ9ZnVuY3Rpb24gZihjLG0sZyx5LHcsayl7dmFyIE8seixVO2lmKChVPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSx3KXx8e3ZhbHVlOm1bd119KS5nZXQ/ej1jLnN0eWxpemUoVS5zZXQ/IltHZXR0ZXIvU2V0dGVyXSI6IltHZXR0ZXJdIiwic3BlY2lhbCIpOlUuc2V0''@;'; put 'put ''JiYoej1jLnN0eWxpemUoIltTZXR0ZXJdIiwic3BlY2lhbCIpKSxqKHksdyl8fChPPSJbIit3KyJdIiksenx8KGMuc2Vlbi5pbmRleE9mKFUudmFsdWUpPDA/KHo9ZChnKT9pKGMsVS52YWx1ZSxudWxsKTppKGMsVS52YWx1ZSxnLTEpKS5pbmRleE9mKCJcbiIpPi0xJiYoej1rP3ouc3BsaXQo''@;'; put 'put ''IlxuIikubWFwKGZ1bmN0aW9uKFYpe3JldHVybiIgICIrVn0pLmpvaW4oIlxuIikuc3Vic3RyKDIpOiJcbiIrei5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oVil7cmV0dXJuIiAgICIrVn0pLmpvaW4oIlxuIikpOno9Yy5zdHlsaXplKCJbQ2lyY3VsYXJdIiwic3BlY2lhbCIpKSxBKE8pKXtp''@;'; put 'put ''ZihrJiZ3Lm1hdGNoKC9eXGQrJC8pKXJldHVybiB6OyhPPUpTT04uc3RyaW5naWZ5KCIiK3cpKS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8wLTldKikiJC8pPyhPPU8uc3Vic3RyKDEsTy5sZW5ndGgtMiksTz1jLnN0eWxpemUoTywibmFtZSIpKTooTz1PLnJlcGxhY2UoLycvZywiXFwn''@;'; put 'put ''IikucmVwbGFjZSgvXFwiL2csJyInKS5yZXBsYWNlKC8oXiJ8IiQpL2csIiciKSxPPWMuc3R5bGl6ZShPLCJzdHJpbmciKSl9cmV0dXJuIE8rIjogIit6fWZ1bmN0aW9uIHUoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyl9ZnVuY3Rpb24gcChjKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBj''@;'; put 'put ''fWZ1bmN0aW9uIGQoYyl7cmV0dXJuIG51bGw9PT1jfWZ1bmN0aW9uIHYoYyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBjfWZ1bmN0aW9uIF8oYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjfWZ1bmN0aW9uIEEoYyl7cmV0dXJuIHZvaWQgMD09PWN9ZnVuY3Rpb24gSShjKXtyZXR1cm4gTChj''@;'; put 'put ''KSYmIltvYmplY3QgUmVnRXhwXSI9PT0kKGMpfWZ1bmN0aW9uIEwoYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT09Y31mdW5jdGlvbiBOKGMpe3JldHVybiBMKGMpJiYiW29iamVjdCBEYXRlXSI9PT0kKGMpfWZ1bmN0aW9uIFAoYyl7cmV0dXJuIEwoYykmJigiW29iamVjdCBF''@;'; put 'put ''cnJvcl0iPT09JChjKXx8YyBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBCKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfWZ1bmN0aW9uICQoYyl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKX1mdW5jdGlvbiBEKGMpe3JldHVybiBjPDEwPyIwIitjLnRv''@;'; put 'put ''U3RyaW5nKDEwKTpjLnRvU3RyaW5nKDEwKX1TLmRlYnVnbG9nPWZ1bmN0aW9uKGMpe2lmKEEocikmJihyPWIuZW52Lk5PREVfREVCVUd8fCIiKSxjPWMudG9VcHBlckNhc2UoKSwhdFtjXSlpZihuZXcgUmVnRXhwKCJcXGIiK2MrIlxcYiIsImkiKS50ZXN0KHIpKXt2YXIgbT1iLnBpZDt0W2Nd''@;'; put 'put ''PWZ1bmN0aW9uKCl7dmFyIGc9Uy5mb3JtYXQuYXBwbHkoUyxhcmd1bWVudHMpO2NvbnNvbGUuZXJyb3IoIiVzICVkOiAlcyIsYyxtLGcpfX1lbHNlIHRbY109ZnVuY3Rpb24oKXt9O3JldHVybiB0W2NdfSxTLmluc3BlY3Q9ZSxlLmNvbG9ycz17Ym9sZDpbMSwyMl0saXRhbGljOlszLDIzXSx1''@;'; put 'put ''bmRlcmxpbmU6WzQsMjRdLGludmVyc2U6WzcsMjddLHdoaXRlOlszNywzOV0sZ3JleTpbOTAsMzldLGJsYWNrOlszMCwzOV0sYmx1ZTpbMzQsMzldLGN5YW46WzM2LDM5XSxncmVlbjpbMzIsMzldLG1hZ2VudGE6WzM1LDM5XSxyZWQ6WzMxLDM5XSx5ZWxsb3c6WzMzLDM5XX0sZS5zdHlsZXM9''@;'; put 'put ''e3NwZWNpYWw6ImN5YW4iLG51bWJlcjoieWVsbG93Iixib29sZWFuOiJ5ZWxsb3ciLHVuZGVmaW5lZDoiZ3JleSIsbnVsbDoiYm9sZCIsc3RyaW5nOiJncmVlbiIsZGF0ZToibWFnZW50YSIscmVnZXhwOiJyZWQifSxTLmlzQXJyYXk9dSxTLmlzQm9vbGVhbj1wLFMuaXNOdWxsPWQsUy5pc051''@;'; put 'put ''bGxPclVuZGVmaW5lZD1mdW5jdGlvbihjKXtyZXR1cm4gbnVsbD09Y30sUy5pc051bWJlcj12LFMuaXNTdHJpbmc9XyxTLmlzU3ltYm9sPWZ1bmN0aW9uKGMpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgY30sUy5pc1VuZGVmaW5lZD1BLFMuaXNSZWdFeHA9SSxTLmlzT2JqZWN0PUwsUy5pc0Rh''@;'; put 'put ''dGU9TixTLmlzRXJyb3I9UCxTLmlzRnVuY3Rpb249QixTLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKGMpe3JldHVybiBudWxsPT09Y3x8ImJvb2xlYW4iPT10eXBlb2YgY3x8Im51bWJlciI9PXR5cGVvZiBjfHwic3RyaW5nIj09dHlwZW9mIGN8fCJzeW1ib2wiPT10eXBlb2YgY3x8dm9pZCAwPT09''@;'; put 'put ''Y30sUy5pc0J1ZmZlcj1zKCIuL3N1cHBvcnQvaXNCdWZmZXIiKTt2YXIgeD1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO2Z1bmN0aW9uIGooYyxtKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Q''@;'; put 'put ''cm9wZXJ0eS5jYWxsKGMsbSl9Uy5sb2c9ZnVuY3Rpb24oKXtjb25zb2xlLmxvZygiJXMgLSAlcyIsZnVuY3Rpb24gTSgpe3ZhciBjPW5ldyBEYXRlLG09W0QoYy5nZXRIb3VycygpKSxEKGMuZ2V0TWludXRlcygpKSxEKGMuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpO3JldHVybltjLmdldERh''@;'; put 'put ''dGUoKSx4W2MuZ2V0TW9udGgoKV0sbV0uam9pbigiICIpfSgpLFMuZm9ybWF0LmFwcGx5KFMsYXJndW1lbnRzKSl9LFMuaW5oZXJpdHM9cygiaW5oZXJpdHMiKSxTLl9leHRlbmQ9ZnVuY3Rpb24oYyxtKXtpZighbXx8IUwobSkpcmV0dXJuIGM7Zm9yKHZhciBnPU9iamVjdC5rZXlzKG0pLHk9''@;'; put 'put ''Zy5sZW5ndGg7eS0tOyljW2dbeV1dPW1bZ1t5XV07cmV0dXJuIGN9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxzKCJfcHJvY2VzcyIpLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7Ii4vc3VwcG9y''@;'; put 'put ''dC9pc0J1ZmZlciI6NTI2LF9wcm9jZXNzOjQ2Nyxpbmhlcml0czo1MjV9XSw1Mjg6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJ2MSIse2VudW1lcmFi''@;'; put 'put ''bGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGIuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUywidjMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFMsInY0Iix7ZW51bWVyYWJsZTohMCxn''@;'; put 'put ''ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJ2NSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUywiTklMIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJ2ZXJzaW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJ2YWxpZGF0ZSIse2VudW1lcmFibGU6ITAsZ2V0''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIGwuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUywic3RyaW5naWZ5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJwYXJzZSIse2VudW1lcmFibGU6ITAs''@;'; put 'put ''Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuZGVmYXVsdH19KTt2YXIgYj1oKHMoIi4vdjEuanMiKSksYT1oKHMoIi4vdjMuanMiKSksbz1oKHMoIi4vdjQuanMiKSkscj1oKHMoIi4vdjUuanMiKSksdD1oKHMoIi4vbmlsLmpzIikpLGU9aChzKCIuL3ZlcnNpb24uanMiKSksbD1oKHMoIi4vdmFs''@;'; put 'put ''aWRhdGUuanMiKSksbj1oKHMoIi4vc3RyaW5naWZ5LmpzIikpLGk9aChzKCIuL3BhcnNlLmpzIikpO2Z1bmN0aW9uIGgoZil7cmV0dXJuIGYmJmYuX19lc01vZHVsZT9mOntkZWZhdWx0OmZ9fX0seyIuL25pbC5qcyI6NTMwLCIuL3BhcnNlLmpzIjo1MzEsIi4vc3RyaW5naWZ5LmpzIjo1MzUs''@;'; put 'put ''Ii4vdjEuanMiOjUzNiwiLi92My5qcyI6NTM3LCIuL3Y0LmpzIjo1MzksIi4vdjUuanMiOjU0MCwiLi92YWxpZGF0ZS5qcyI6NTQxLCIuL3ZlcnNpb24uanMiOjU0Mn1dLDUyOTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGkpe3JldHVybiAxNCsoaSs2ND4+Pjk8''@;'; put 'put ''PDQpKzF9ZnVuY3Rpb24gYShpLGgpe2NvbnN0IGY9KDY1NTM1JmkpKyg2NTUzNSZoKTtyZXR1cm4oaT4+MTYpKyhoPj4xNikrKGY+PjE2KTw8MTZ8NjU1MzUmZn1mdW5jdGlvbiBvKGksaCxmLHUscCxkKXtyZXR1cm4gYSgodj1hKGEoaCxpKSxhKHUsZCkpKTw8KF89cCl8dj4+PjMyLV8sZik7''@;'; put 'put ''dmFyIHYsX31mdW5jdGlvbiByKGksaCxmLHUscCxkLHYpe3JldHVybiBvKGgmZnx+aCZ1LGksaCxwLGQsdil9ZnVuY3Rpb24gdChpLGgsZix1LHAsZCx2KXtyZXR1cm4gbyhoJnV8ZiZ+dSxpLGgscCxkLHYpfWZ1bmN0aW9uIGUoaSxoLGYsdSxwLGQsdil7cmV0dXJuIG8oaF5mXnUsaSxoLHAs''@;'; put 'put ''ZCx2KX1mdW5jdGlvbiBsKGksaCxmLHUscCxkLHYpe3JldHVybiBvKGZeKGh8fnUpLGksaCxwLGQsdil9T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFMuZGVmYXVsdD12b2lkIDAsUy5kZWZhdWx0PWZ1bmN0aW9uKGkpe2lmKCJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgaSl7Y29uc3QgaD11bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoaSkpO2k9bmV3IFVpbnQ4QXJyYXkoaC5sZW5ndGgpO2ZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7KytmKWlbZl09aC5jaGFyQ29kZUF0KGYpfXJldHVybiBmdW5jdGlvbihoKXtjb25zdCBmPVtdLHU9MzIqaC5sZW5ndGg7''@;'; put 'put ''Zm9yKGxldCBwPTA7cDx1O3ArPTgpe2NvbnN0IGQ9aFtwPj41XT4+PnAlMzImMjU1LHY9cGFyc2VJbnQoIjAxMjM0NTY3ODlhYmNkZWYiLmNoYXJBdChkPj4+NCYxNSkrIjAxMjM0NTY3ODlhYmNkZWYiLmNoYXJBdCgxNSZkKSwxNik7Zi5wdXNoKHYpfXJldHVybiBmfShmdW5jdGlvbihoLGYp''@;'; put 'put ''e2hbZj4+NV18PTEyODw8ZiUzMixoW2IoZiktMV09ZjtsZXQgdT0xNzMyNTg0MTkzLHA9LTI3MTczMzg3OSxkPS0xNzMyNTg0MTk0LHY9MjcxNzMzODc4O2ZvcihsZXQgXz0wO188aC5sZW5ndGg7Xys9MTYpe2NvbnN0IEE9dSxJPXAsTD1kLE49djt1PXIodSxwLGQsdixoW19dLDcsLTY4MDg3''@;'; put 'put ''NjkzNiksdj1yKHYsdSxwLGQsaFtfKzFdLDEyLC0zODk1NjQ1ODYpLGQ9cihkLHYsdSxwLGhbXysyXSwxNyw2MDYxMDU4MTkpLHA9cihwLGQsdix1LGhbXyszXSwyMiwtMTA0NDUyNTMzMCksdT1yKHUscCxkLHYsaFtfKzRdLDcsLTE3NjQxODg5Nyksdj1yKHYsdSxwLGQsaFtfKzVdLDEyLDEy''@;'; put 'put ''MDAwODA0MjYpLGQ9cihkLHYsdSxwLGhbXys2XSwxNywtMTQ3MzIzMTM0MSkscD1yKHAsZCx2LHUsaFtfKzddLDIyLC00NTcwNTk4MyksdT1yKHUscCxkLHYsaFtfKzhdLDcsMTc3MDAzNTQxNiksdj1yKHYsdSxwLGQsaFtfKzldLDEyLC0xOTU4NDE0NDE3KSxkPXIoZCx2LHUscCxoW18rMTBd''@;'; put 'put ''LDE3LC00MjA2MykscD1yKHAsZCx2LHUsaFtfKzExXSwyMiwtMTk5MDQwNDE2MiksdT1yKHUscCxkLHYsaFtfKzEyXSw3LDE4MDQ2MDM2ODIpLHY9cih2LHUscCxkLGhbXysxM10sMTIsLTQwMzQxMTAxKSxkPXIoZCx2LHUscCxoW18rMTRdLDE3LC0xNTAyMDAyMjkwKSxwPXIocCxkLHYsdSxo''@;'; put 'put ''W18rMTVdLDIyLDEyMzY1MzUzMjkpLHU9dCh1LHAsZCx2LGhbXysxXSw1LC0xNjU3OTY1MTApLHY9dCh2LHUscCxkLGhbXys2XSw5LC0xMDY5NTAxNjMyKSxkPXQoZCx2LHUscCxoW18rMTFdLDE0LDY0MzcxNzcxMykscD10KHAsZCx2LHUsaFtfXSwyMCwtMzczODk3MzAyKSx1PXQodSxwLGQs''@;'; put 'put ''dixoW18rNV0sNSwtNzAxNTU4NjkxKSx2PXQodix1LHAsZCxoW18rMTBdLDksMzgwMTYwODMpLGQ9dChkLHYsdSxwLGhbXysxNV0sMTQsLTY2MDQ3ODMzNSkscD10KHAsZCx2LHUsaFtfKzRdLDIwLC00MDU1Mzc4NDgpLHU9dCh1LHAsZCx2LGhbXys5XSw1LDU2ODQ0NjQzOCksdj10KHYsdSxw''@;'; put 'put ''LGQsaFtfKzE0XSw5LC0xMDE5ODAzNjkwKSxkPXQoZCx2LHUscCxoW18rM10sMTQsLTE4NzM2Mzk2MSkscD10KHAsZCx2LHUsaFtfKzhdLDIwLDExNjM1MzE1MDEpLHU9dCh1LHAsZCx2LGhbXysxM10sNSwtMTQ0NDY4MTQ2Nyksdj10KHYsdSxwLGQsaFtfKzJdLDksLTUxNDAzNzg0KSxkPXQo''@;'; put 'put ''ZCx2LHUscCxoW18rN10sMTQsMTczNTMyODQ3MykscD10KHAsZCx2LHUsaFtfKzEyXSwyMCwtMTkyNjYwNzczNCksdT1lKHUscCxkLHYsaFtfKzVdLDQsLTM3ODU1OCksdj1lKHYsdSxwLGQsaFtfKzhdLDExLC0yMDIyNTc0NDYzKSxkPWUoZCx2LHUscCxoW18rMTFdLDE2LDE4MzkwMzA1NjIp''@;'; put 'put ''LHA9ZShwLGQsdix1LGhbXysxNF0sMjMsLTM1MzA5NTU2KSx1PWUodSxwLGQsdixoW18rMV0sNCwtMTUzMDk5MjA2MCksdj1lKHYsdSxwLGQsaFtfKzRdLDExLDEyNzI4OTMzNTMpLGQ9ZShkLHYsdSxwLGhbXys3XSwxNiwtMTU1NDk3NjMyKSxwPWUocCxkLHYsdSxoW18rMTBdLDIzLC0xMDk0''@;'; put 'put ''NzMwNjQwKSx1PWUodSxwLGQsdixoW18rMTNdLDQsNjgxMjc5MTc0KSx2PWUodix1LHAsZCxoW19dLDExLC0zNTg1MzcyMjIpLGQ9ZShkLHYsdSxwLGhbXyszXSwxNiwtNzIyNTIxOTc5KSxwPWUocCxkLHYsdSxoW18rNl0sMjMsNzYwMjkxODkpLHU9ZSh1LHAsZCx2LGhbXys5XSw0LC02NDAz''@;'; put 'put ''NjQ0ODcpLHY9ZSh2LHUscCxkLGhbXysxMl0sMTEsLTQyMTgxNTgzNSksZD1lKGQsdix1LHAsaFtfKzE1XSwxNiw1MzA3NDI1MjApLHA9ZShwLGQsdix1LGhbXysyXSwyMywtOTk1MzM4NjUxKSx1PWwodSxwLGQsdixoW19dLDYsLTE5ODYzMDg0NCksdj1sKHYsdSxwLGQsaFtfKzddLDEwLDEx''@;'; put 'put ''MjY4OTE0MTUpLGQ9bChkLHYsdSxwLGhbXysxNF0sMTUsLTE0MTYzNTQ5MDUpLHA9bChwLGQsdix1LGhbXys1XSwyMSwtNTc0MzQwNTUpLHU9bCh1LHAsZCx2LGhbXysxMl0sNiwxNzAwNDg1NTcxKSx2PWwodix1LHAsZCxoW18rM10sMTAsLTE4OTQ5ODY2MDYpLGQ9bChkLHYsdSxwLGhbXysx''@;'; put 'put ''MF0sMTUsLTEwNTE1MjMpLHA9bChwLGQsdix1LGhbXysxXSwyMSwtMjA1NDkyMjc5OSksdT1sKHUscCxkLHYsaFtfKzhdLDYsMTg3MzMxMzM1OSksdj1sKHYsdSxwLGQsaFtfKzE1XSwxMCwtMzA2MTE3NDQpLGQ9bChkLHYsdSxwLGhbXys2XSwxNSwtMTU2MDE5ODM4MCkscD1sKHAsZCx2LHUs''@;'; put 'put ''aFtfKzEzXSwyMSwxMzA5MTUxNjQ5KSx1PWwodSxwLGQsdixoW18rNF0sNiwtMTQ1NTIzMDcwKSx2PWwodix1LHAsZCxoW18rMTFdLDEwLC0xMTIwMjEwMzc5KSxkPWwoZCx2LHUscCxoW18rMl0sMTUsNzE4Nzg3MjU5KSxwPWwocCxkLHYsdSxoW18rOV0sMjEsLTM0MzQ4NTU1MSksdT1hKHUs''@;'; put 'put ''QSkscD1hKHAsSSksZD1hKGQsTCksdj1hKHYsTil9cmV0dXJuW3UscCxkLHZdfShmdW5jdGlvbihoKXtpZigwPT09aC5sZW5ndGgpcmV0dXJuW107Y29uc3QgZj04KmgubGVuZ3RoLHU9bmV3IFVpbnQzMkFycmF5KGIoZikpO2ZvcihsZXQgcD0wO3A8ZjtwKz04KXVbcD4+NV18PSgyNTUmaFtw''@;'; put 'put ''LzhdKTw8cCUzMjtyZXR1cm4gdX0oaSksOCppLmxlbmd0aCkpfX0se31dLDUzMDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksUy5kZWZhdWx0PXZvaWQgMCxTLmRlZmF1bHQ9IjAwMDAwMDAwLTAw''@;'; put 'put ''MDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCJ9LHt9XSw1MzE6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFMuZGVmYXVsdD12b2lkIDA7dmFyIGIsYT0oYj1zKCIuL3ZhbGlkYXRlLmpzIikpJiZi''@;'; put 'put ''Ll9fZXNNb2R1bGU/Yjp7ZGVmYXVsdDpifTtTLmRlZmF1bHQ9ZnVuY3Rpb24ocil7aWYoISgwLGEuZGVmYXVsdCkocikpdGhyb3cgVHlwZUVycm9yKCJJbnZhbGlkIFVVSUQiKTtsZXQgdDtjb25zdCBlPW5ldyBVaW50OEFycmF5KDE2KTtyZXR1cm4gZVswXT0odD1wYXJzZUludChyLnNsaWNl''@;'; put 'put ''KDAsOCksMTYpKT4+PjI0LGVbMV09dD4+PjE2JjI1NSxlWzJdPXQ+Pj44JjI1NSxlWzNdPTI1NSZ0LGVbNF09KHQ9cGFyc2VJbnQoci5zbGljZSg5LDEzKSwxNikpPj4+OCxlWzVdPTI1NSZ0LGVbNl09KHQ9cGFyc2VJbnQoci5zbGljZSgxNCwxOCksMTYpKT4+PjgsZVs3XT0yNTUmdCxlWzhd''@;'; put 'put ''PSh0PXBhcnNlSW50KHIuc2xpY2UoMTksMjMpLDE2KSk+Pj44LGVbOV09MjU1JnQsZVsxMF09KHQ9cGFyc2VJbnQoci5zbGljZSgyNCwzNiksMTYpKS8xMDk5NTExNjI3Nzc2JjI1NSxlWzExXT10LzQyOTQ5NjcyOTYmMjU1LGVbMTJdPXQ+Pj4yNCYyNTUsZVsxM109dD4+PjE2JjI1NSxlWzE0''@;'; put 'put ''XT10Pj4+OCYyNTUsZVsxNV09MjU1JnQsZX19LHsiLi92YWxpZGF0ZS5qcyI6NTQxfV0sNTMyOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxTLmRlZmF1bHQ9dm9pZCAwLFMuZGVmYXVsdD0vXig/''@;'; put 'put ''OlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLTVdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9fDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCkkL2l9LHt9XSw1MzM6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7bGV0IGI7T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KFMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFMuZGVmYXVsdD1mdW5jdGlvbigpe2lmKCFiJiYoYj10eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byl8fHR5cGVvZiBtc0Ny''@;'; put 'put ''eXB0bzwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMmJm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKG1zQ3J5cHRvKSwhYikpdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBz''@;'; put 'put ''Oi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCIpO3JldHVybiBiKGEpfTtjb25zdCBhPW5ldyBVaW50OEFycmF5KDE2KX0se31dLDUzNDpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKHIsdCxlLGwpe3N3aXRjaChy''@;'; put 'put ''KXtjYXNlIDA6cmV0dXJuIHQmZV5+dCZsO2Nhc2UgMTpjYXNlIDM6cmV0dXJuIHReZV5sO2Nhc2UgMjpyZXR1cm4gdCZlXnQmbF5lJmx9fWZ1bmN0aW9uIGEocix0KXtyZXR1cm4gcjw8dHxyPj4+MzItdH1PYmplY3QuZGVmaW5lUHJvcGVydHkoUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks''@;'; put 'put ''Uy5kZWZhdWx0PXZvaWQgMCxTLmRlZmF1bHQ9ZnVuY3Rpb24ocil7Y29uc3QgdD1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMzM5NTQ2OTc4Ml0sZT1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdO2lmKCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2Ygcil7Y29uc3QgaD11bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQocikpO3I9W107Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDsrK2Ypci5wdXNoKGguY2hhckNvZGVBdChmKSl9ZWxzZSBBcnJheS5pc0FycmF5KHIpfHwocj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyKSk7ci5w''@;'; put 'put ''dXNoKDEyOCk7Y29uc3Qgbj1NYXRoLmNlaWwoKHIubGVuZ3RoLzQrMikvMTYpLGk9bmV3IEFycmF5KG4pO2ZvcihsZXQgaD0wO2g8bjsrK2gpe2NvbnN0IGY9bmV3IFVpbnQzMkFycmF5KDE2KTtmb3IobGV0IHU9MDt1PDE2OysrdSlmW3VdPXJbNjQqaCs0KnVdPDwyNHxyWzY0KmgrNCp1KzFd''@;'; put 'put ''PDwxNnxyWzY0KmgrNCp1KzJdPDw4fHJbNjQqaCs0KnUrM107aVtoXT1mfWlbbi0xXVsxNF09OCooci5sZW5ndGgtMSkvTWF0aC5wb3coMiwzMiksaVtuLTFdWzE0XT1NYXRoLmZsb29yKGlbbi0xXVsxNF0pLGlbbi0xXVsxNV09OCooci5sZW5ndGgtMSkmNDI5NDk2NzI5NTtmb3IobGV0IGg9''@;'; put 'put ''MDtoPG47KytoKXtjb25zdCBmPW5ldyBVaW50MzJBcnJheSg4MCk7Zm9yKGxldCBBPTA7QTwxNjsrK0EpZltBXT1pW2hdW0FdO2ZvcihsZXQgQT0xNjtBPDgwOysrQSlmW0FdPWEoZltBLTNdXmZbQS04XV5mW0EtMTRdXmZbQS0xNl0sMSk7bGV0IHU9ZVswXSxwPWVbMV0sZD1lWzJdLHY9ZVsz''@;'; put 'put ''XSxfPWVbNF07Zm9yKGxldCBBPTA7QTw4MDsrK0Epe2NvbnN0IEk9TWF0aC5mbG9vcihBLzIwKSxMPWEodSw1KStiKEkscCxkLHYpK18rdFtJXStmW0FdPj4+MDtfPXYsdj1kLGQ9YShwLDMwKT4+PjAscD11LHU9TH1lWzBdPWVbMF0rdT4+PjAsZVsxXT1lWzFdK3A+Pj4wLGVbMl09ZVsyXStk''@;'; put 'put ''Pj4+MCxlWzNdPWVbM10rdj4+PjAsZVs0XT1lWzRdK18+Pj4wfXJldHVybltlWzBdPj4yNCYyNTUsZVswXT4+MTYmMjU1LGVbMF0+PjgmMjU1LDI1NSZlWzBdLGVbMV0+PjI0JjI1NSxlWzFdPj4xNiYyNTUsZVsxXT4+OCYyNTUsMjU1JmVbMV0sZVsyXT4+MjQmMjU1LGVbMl0+PjE2JjI1NSxl''@;'; put 'put ''WzJdPj44JjI1NSwyNTUmZVsyXSxlWzNdPj4yNCYyNTUsZVszXT4+MTYmMjU1LGVbM10+PjgmMjU1LDI1NSZlWzNdLGVbNF0+PjI0JjI1NSxlWzRdPj4xNiYyNTUsZVs0XT4+OCYyNTUsMjU1JmVbNF1dfX0se31dLDUzNTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksUy5kZWZhdWx0PXZvaWQgMDt2YXIgYixhPShiPXMoIi4vdmFsaWRhdGUuanMiKSkmJmIuX19lc01vZHVsZT9iOntkZWZhdWx0OmJ9O2NvbnN0IG89W107Zm9yKGxldCB0PTA7dDwyNTY7Kyt0KW8ucHVzaCgodCsyNTYpLnRv''@;'; put 'put ''U3RyaW5nKDE2KS5zdWJzdHIoMSkpO1MuZGVmYXVsdD1mdW5jdGlvbih0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtjb25zdCBsPShvW3RbZSswXV0rb1t0W2UrMV1dK29bdFtlKzJdXStvW3RbZSszXV0rIi0iK29bdFtl''@;'; put 'put ''KzRdXStvW3RbZSs1XV0rIi0iK29bdFtlKzZdXStvW3RbZSs3XV0rIi0iK29bdFtlKzhdXStvW3RbZSs5XV0rIi0iK29bdFtlKzEwXV0rb1t0W2UrMTFdXStvW3RbZSsxMl1dK29bdFtlKzEzXV0rb1t0W2UrMTRdXStvW3RbZSsxNV1dKS50b0xvd2VyQ2FzZSgpO2lmKCEoMCxhLmRlZmF1bHQp''@;'; put 'put ''KGwpKXRocm93IFR5cGVFcnJvcigiU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkIik7cmV0dXJuIGx9fSx7Ii4vdmFsaWRhdGUuanMiOjU0MX1dLDUzNjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUywiX19lc01vZHVsZSIse3ZhbHVlOiEw''@;'; put 'put ''fSksUy5kZWZhdWx0PXZvaWQgMDt2YXIgYj1vKHMoIi4vcm5nLmpzIikpLGE9byhzKCIuL3N0cmluZ2lmeS5qcyIpKTtmdW5jdGlvbiBvKGkpe3JldHVybiBpJiZpLl9fZXNNb2R1bGU/aTp7ZGVmYXVsdDppfX1sZXQgcix0LGU9MCxsPTA7Uy5kZWZhdWx0PWZ1bmN0aW9uKGksaCxmKXtsZXQg''@;'; put 'put ''dT1oJiZmfHwwO2NvbnN0IHA9aHx8bmV3IEFycmF5KDE2KTtsZXQgZD0oaT1pfHx7fSkubm9kZXx8cix2PXZvaWQgMCE9PWkuY2xvY2tzZXE/aS5jbG9ja3NlcTp0O2lmKG51bGw9PWR8fG51bGw9PXYpe2NvbnN0IFA9aS5yYW5kb218fChpLnJuZ3x8Yi5kZWZhdWx0KSgpO251bGw9PWQmJihk''@;'; put 'put ''PXI9WzF8UFswXSxQWzFdLFBbMl0sUFszXSxQWzRdLFBbNV1dKSxudWxsPT12JiYodj10PTE2MzgzJihQWzZdPDw4fFBbN10pKX1sZXQgXz12b2lkIDAhPT1pLm1zZWNzP2kubXNlY3M6RGF0ZS5ub3coKSxBPXZvaWQgMCE9PWkubnNlY3M/aS5uc2VjczpsKzE7Y29uc3QgST1fLWUrKEEtbCkv''@;'; put 'put ''MWU0O2lmKEk8MCYmdm9pZCAwPT09aS5jbG9ja3NlcSYmKHY9disxJjE2MzgzKSwoSTwwfHxfPmUpJiZ2b2lkIDA9PT1pLm5zZWNzJiYoQT0wKSxBPj0xZTQpdGhyb3cgbmV3IEVycm9yKCJ1dWlkLnYxKCk6IENhbid0IGNyZWF0ZSBtb3JlIHRoYW4gMTBNIHV1aWRzL3NlYyIpO2U9XyxsPUEs''@;'; put 'put ''dD12LF8rPTEyMjE5MjkyOGU1O2NvbnN0IEw9KDFlNCooMjY4NDM1NDU1Jl8pK0EpJTQyOTQ5NjcyOTY7cFt1KytdPUw+Pj4yNCYyNTUscFt1KytdPUw+Pj4xNiYyNTUscFt1KytdPUw+Pj44JjI1NSxwW3UrK109MjU1Jkw7Y29uc3QgTj1fLzQyOTQ5NjcyOTYqMWU0JjI2ODQzNTQ1NTtwW3Ur''@;'; put 'put ''K109Tj4+PjgmMjU1LHBbdSsrXT0yNTUmTixwW3UrK109Tj4+PjI0JjE1fDE2LHBbdSsrXT1OPj4+MTYmMjU1LHBbdSsrXT12Pj4+OHwxMjgscFt1KytdPTI1NSZ2O2ZvcihsZXQgUD0wO1A8NjsrK1ApcFt1K1BdPWRbUF07cmV0dXJuIGh8fCgwLGEuZGVmYXVsdCkocCl9fSx7Ii4vcm5nLmpz''@;'; put 'put ''Ijo1MzMsIi4vc3RyaW5naWZ5LmpzIjo1MzV9XSw1Mzc6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFMuZGVmYXVsdD12b2lkIDA7dmFyIGI9byhzKCIuL3YzNS5qcyIpKSxhPW8ocygiLi9tZDUu''@;'; put 'put ''anMiKSk7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e2RlZmF1bHQ6dH19dmFyIHI9KDAsYi5kZWZhdWx0KSgidjMiLDQ4LGEuZGVmYXVsdCk7Uy5kZWZhdWx0PXJ9LHsiLi9tZDUuanMiOjUyOSwiLi92MzUuanMiOjUzOH1dLDUzODpbZnVuY3Rpb24ocyxFLFMpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksUy5kZWZhdWx0PWZ1bmN0aW9uKGUsbCxuKXtmdW5jdGlvbiBpKGgsZix1LHApe2lmKCJzdHJpbmciPT10eXBlb2YgaCYmKGg9ZnVuY3Rpb24odil7dj11bmVzY2FwZShlbmNvZGVVUklD''@;'; put 'put ''b21wb25lbnQodikpO2NvbnN0IF89W107Zm9yKGxldCBBPTA7QTx2Lmxlbmd0aDsrK0EpXy5wdXNoKHYuY2hhckNvZGVBdChBKSk7cmV0dXJuIF99KGgpKSwic3RyaW5nIj09dHlwZW9mIGYmJihmPSgwLGEuZGVmYXVsdCkoZikpLDE2IT09Zi5sZW5ndGgpdGhyb3cgVHlwZUVycm9yKCJOYW1l''@;'; put 'put ''c3BhY2UgbXVzdCBiZSBhcnJheS1saWtlICgxNiBpdGVyYWJsZSBpbnRlZ2VyIHZhbHVlcywgMC0yNTUpIik7bGV0IGQ9bmV3IFVpbnQ4QXJyYXkoMTYraC5sZW5ndGgpO2lmKGQuc2V0KGYpLGQuc2V0KGgsZi5sZW5ndGgpLGQ9bihkKSxkWzZdPTE1JmRbNl18bCxkWzhdPTYzJmRbOF18MTI4''@;'; put 'put ''LHUpe3A9cHx8MDtmb3IobGV0IHY9MDt2PDE2Oysrdil1W3Ardl09ZFt2XTtyZXR1cm4gdX1yZXR1cm4oMCxiLmRlZmF1bHQpKGQpfXRyeXtpLm5hbWU9ZX1jYXRjaHt9cmV0dXJuIGkuRE5TPXIsaS5VUkw9dCxpfSxTLlVSTD1TLkROUz12b2lkIDA7dmFyIGI9byhzKCIuL3N0cmluZ2lmeS5q''@;'; put 'put ''cyIpKSxhPW8ocygiLi9wYXJzZS5qcyIpKTtmdW5jdGlvbiBvKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1jb25zdCByPSI2YmE3YjgxMC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgiO1MuRE5TPXI7Y29uc3QgdD0iNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQt''@;'; put 'put ''MDBjMDRmZDQzMGM4IjtTLlVSTD10fSx7Ii4vcGFyc2UuanMiOjUzMSwiLi9zdHJpbmdpZnkuanMiOjUzNX1dLDUzOTpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksUy5kZWZhdWx0PXZvaWQgMDt2''@;'; put 'put ''YXIgYj1vKHMoIi4vcm5nLmpzIikpLGE9byhzKCIuL3N0cmluZ2lmeS5qcyIpKTtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fX1TLmRlZmF1bHQ9ZnVuY3Rpb24odCxlLGwpe2NvbnN0IG49KHQ9dHx8e30pLnJhbmRvbXx8KHQucm5nfHxiLmRlZmF1''@;'; put 'put ''bHQpKCk7aWYobls2XT0xNSZuWzZdfDY0LG5bOF09NjMmbls4XXwxMjgsZSl7bD1sfHwwO2ZvcihsZXQgaT0wO2k8MTY7KytpKWVbbCtpXT1uW2ldO3JldHVybiBlfXJldHVybigwLGEuZGVmYXVsdCkobil9fSx7Ii4vcm5nLmpzIjo1MzMsIi4vc3RyaW5naWZ5LmpzIjo1MzV9XSw1NDA6W2Z1''@;'; put 'put ''bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFMuZGVmYXVsdD12b2lkIDA7dmFyIGI9byhzKCIuL3YzNS5qcyIpKSxhPW8ocygiLi9zaGExLmpzIikpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIHQmJnQuX19l''@;'; put 'put ''c01vZHVsZT90OntkZWZhdWx0OnR9fXZhciByPSgwLGIuZGVmYXVsdCkoInY1Iiw4MCxhLmRlZmF1bHQpO1MuZGVmYXVsdD1yfSx7Ii4vc2hhMS5qcyI6NTM0LCIuL3YzNS5qcyI6NTM4fV0sNTQxOltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShT''@;'; put 'put ''LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxTLmRlZmF1bHQ9dm9pZCAwO3ZhciBiLGE9KGI9cygiLi9yZWdleC5qcyIpKSYmYi5fX2VzTW9kdWxlP2I6e2RlZmF1bHQ6Yn07Uy5kZWZhdWx0PWZ1bmN0aW9uKHIpe3JldHVybiJzdHJpbmciPT10eXBlb2YgciYmYS5kZWZhdWx0LnRlc3Qocil9''@;'; put 'put ''fSx7Ii4vcmVnZXguanMiOjUzMn1dLDU0MjpbZnVuY3Rpb24ocyxFLFMpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksUy5kZWZhdWx0PXZvaWQgMDt2YXIgYixhPShiPXMoIi4vdmFsaWRhdGUuanMiKSkmJmIuX19lc01vZHVs''@;'; put 'put ''ZT9iOntkZWZhdWx0OmJ9O1MuZGVmYXVsdD1mdW5jdGlvbihyKXtpZighKDAsYS5kZWZhdWx0KShyKSl0aHJvdyBUeXBlRXJyb3IoIkludmFsaWQgVVVJRCIpO3JldHVybiBwYXJzZUludChyLnN1YnN0cigxNCwxKSwxNil9fSx7Ii4vdmFsaWRhdGUuanMiOjU0MX1dLDU0MzpbZnVuY3Rpb24o''@;'; put 'put ''cyxFLFMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGEpe3JldHVybiBhPj02NSYmYTw9OTB8fGE+PTk3JiZhPD0xMjJ8fDU4PT09YXx8OTU9PT1hfHw4MjA0PT09YXx8ODIwNT09PWF8fGE+PTE5MiYmYTw9MjE0fHxhPj0yMTYmJmE8PTI0Nnx8YT49MjQ4JiZhPD03Njd8fGE+PTg4MCYmYTw9''@;'; put 'put ''ODkzfHxhPj04OTUmJmE8PTgxOTF8fGE+PTgzMDQmJmE8PTg1OTF8fGE+PTExMjY0JiZhPD0xMjI3MXx8YT49MTIyODkmJmE8PTU1Mjk1fHxhPj02Mzc0NCYmYTw9NjQ5NzV8fGE+PTY1MDA4JiZhPD02NTUzM3x8YT49NjU1MzYmJmE8PTk4MzAzOX1PYmplY3QuZGVmaW5lUHJvcGVydHkoUywi''@;'; put 'put ''X19lc01vZHVsZSIse3ZhbHVlOiEwfSksUy5DSEFSPSJcdFxuXHIgLVx1ZDdmZlx1ZTAwMC1cdWZmZmRcdXsxMDAwMH0tXHV7MTBmZmZmfSIsUy5TPSIgXHRcclxuIixTLk5BTUVfU1RBUlRfQ0hBUj0iOkEtWl9hLXpceGMwLVx4ZDZceGQ4LVx4ZjZceGY4LVx1MDJmZlx1MDM3MC1cdTAzN2Rc''@;'; put 'put ''dTAzN2YtXHUxZmZmXHUyMDBjXHUyMDBkXHUyMDcwLVx1MjE4Zlx1MmMwMC1cdTJmZWZcdTMwMDEtXHVkN2ZmXHVmOTAwLVx1ZmRjZlx1ZmRmMC1cdWZmZmRcdXsxMDAwMH0tXHV7ZWZmZmZ9IixTLk5BTUVfQ0hBUj0iLSIrUy5OQU1FX1NUQVJUX0NIQVIrIi4wLTlceGI3XHUwMzAwLVx1MDM2''@;'; put 'put ''Zlx1MjAzZi1cdTIwNDAiLFMuQ0hBUl9SRT1uZXcgUmVnRXhwKCJeWyIrUy5DSEFSKyJdJCIsInUiKSxTLlNfUkU9bmV3IFJlZ0V4cCgiXlsiK1MuUysiXSskIiwidSIpLFMuTkFNRV9TVEFSVF9DSEFSX1JFPW5ldyBSZWdFeHAoIl5bIitTLk5BTUVfU1RBUlRfQ0hBUisiXSQiLCJ1IiksUy5O''@;'; put 'put ''QU1FX0NIQVJfUkU9bmV3IFJlZ0V4cCgiXlsiK1MuTkFNRV9DSEFSKyJdJCIsInUiKSxTLk5BTUVfUkU9bmV3IFJlZ0V4cCgiXlsiK1MuTkFNRV9TVEFSVF9DSEFSKyJdWyIrUy5OQU1FX0NIQVIrIl0qJCIsInUiKSxTLk5NVE9LRU5fUkU9bmV3IFJlZ0V4cCgiXlsiK1MuTkFNRV9DSEFSKyJd''@;'; put 'put ''KyQiLCJ1IiksUy5TX0xJU1Q9WzMyLDEwLDEzLDldLFMuaXNDaGFyPWZ1bmN0aW9uKGEpe3JldHVybiBhPj0zMiYmYTw9NTUyOTV8fDEwPT09YXx8MTM9PT1hfHw5PT09YXx8YT49NTczNDQmJmE8PTY1NTMzfHxhPj02NTUzNiYmYTw9MTExNDExMX0sUy5pc1M9ZnVuY3Rpb24oYSl7cmV0dXJu''@;'; put 'put ''IDMyPT09YXx8MTA9PT1hfHwxMz09PWF8fDk9PT1hfSxTLmlzTmFtZVN0YXJ0Q2hhcj1iLFMuaXNOYW1lQ2hhcj1mdW5jdGlvbihhKXtyZXR1cm4gYihhKXx8YT49NDgmJmE8PTU3fHw0NT09PWF8fDQ2PT09YXx8MTgzPT09YXx8YT49NzY4JiZhPD04Nzl8fGE+PTgyNTUmJmE8PTgyNTZ9fSx7''@;'; put 'put ''fV0sNTQ0OltmdW5jdGlvbihzLEUsUyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYSl7cmV0dXJuIGE+PTY1JiZhPD05MHx8YT49OTcmJmE8PTEyMnx8NTg9PT1hfHw5NT09PWF8fDgyMDQ9PT1hfHw4MjA1PT09YXx8YT49MTkyJiZhPD0yMTR8fGE+PTIxNiYmYTw9MjQ2fHxhPj0yNDgmJmE8''@;'; put 'put ''PTc2N3x8YT49ODgwJiZhPD04OTN8fGE+PTg5NSYmYTw9ODE5MXx8YT49ODMwNCYmYTw9ODU5MXx8YT49MTEyNjQmJmE8PTEyMjcxfHxhPj0xMjI4OSYmYTw9NTUyOTV8fGE+PTYzNzQ0JiZhPD02NDk3NXx8YT49NjUwMDgmJmE8PTY1NTMzfHxhPj02NTUzNiYmYTw9OTgzMDM5fU9iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShTLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxTLkNIQVI9Ilx4MDEtXHVkN2ZmXHVlMDAwLVx1ZmZmZFx1ezEwMDAwfS1cdXsxMGZmZmZ9IixTLlJFU1RSSUNURURfQ0hBUj0iXHgwMS1cYlx2XGZceDBlLVx4MWZceDdmLVx4ODRceDg2LVx4OWYiLFMuUz0iIFx0XHJc''@;'; put 'put ''biIsUy5OQU1FX1NUQVJUX0NIQVI9IjpBLVpfYS16XHhjMC1ceGQ2XHhkOC1ceGY2XHhmOC1cdTAyZmZcdTAzNzAtXHUwMzdkXHUwMzdmLVx1MWZmZlx1MjAwY1x1MjAwZFx1MjA3MC1cdTIxOGZcdTJjMDAtXHUyZmVmXHUzMDAxLVx1ZDdmZlx1ZjkwMC1cdWZkY2ZcdWZkZjAtXHVmZmZkXHV7''@;'; put 'put ''MTAwMDB9LVx1e2VmZmZmfSIsUy5OQU1FX0NIQVI9Ii0iK1MuTkFNRV9TVEFSVF9DSEFSKyIuMC05XHhiN1x1MDMwMC1cdTAzNmZcdTIwM2YtXHUyMDQwIixTLkNIQVJfUkU9bmV3IFJlZ0V4cCgiXlsiK1MuQ0hBUisiXSQiLCJ1IiksUy5SRVNUUklDVEVEX0NIQVJfUkU9bmV3IFJlZ0V4cCgi''@;'; put 'put ''XlsiK1MuUkVTVFJJQ1RFRF9DSEFSKyJdJCIsInUiKSxTLlNfUkU9bmV3IFJlZ0V4cCgiXlsiK1MuUysiXSskIiwidSIpLFMuTkFNRV9TVEFSVF9DSEFSX1JFPW5ldyBSZWdFeHAoIl5bIitTLk5BTUVfU1RBUlRfQ0hBUisiXSQiLCJ1IiksUy5OQU1FX0NIQVJfUkU9bmV3IFJlZ0V4cCgiXlsi''@;'; put 'put ''K1MuTkFNRV9DSEFSKyJdJCIsInUiKSxTLk5BTUVfUkU9bmV3IFJlZ0V4cCgiXlsiK1MuTkFNRV9TVEFSVF9DSEFSKyJdWyIrUy5OQU1FX0NIQVIrIl0qJCIsInUiKSxTLk5NVE9LRU5fUkU9bmV3IFJlZ0V4cCgiXlsiK1MuTkFNRV9DSEFSKyJdKyQiLCJ1IiksUy5TX0xJU1Q9WzMyLDEwLDEz''@;'; put 'put ''LDldLFMuaXNDaGFyPWZ1bmN0aW9uKGEpe3JldHVybiBhPj0xJiZhPD01NTI5NXx8YT49NTczNDQmJmE8PTY1NTMzfHxhPj02NTUzNiYmYTw9MTExNDExMX0sUy5pc1Jlc3RyaWN0ZWRDaGFyPWZ1bmN0aW9uKGEpe3JldHVybiBhPj0xJiZhPD04fHwxMT09PWF8fDEyPT09YXx8YT49MTQmJmE8''@;'; put 'put ''PTMxfHxhPj0xMjcmJmE8PTEzMnx8YT49MTM0JiZhPD0xNTl9LFMuaXNDaGFyQW5kTm90UmVzdHJpY3RlZD1mdW5jdGlvbihhKXtyZXR1cm4gOT09PWF8fDEwPT09YXx8MTM9PT1hfHxhPjMxJiZhPDEyN3x8MTMzPT09YXx8YT4xNTkmJmE8PTU1Mjk1fHxhPj01NzM0NCYmYTw9NjU1MzN8fGE+''@;'; put 'put ''PTY1NTM2JiZhPD0xMTE0MTExfSxTLmlzUz1mdW5jdGlvbihhKXtyZXR1cm4gMzI9PT1hfHwxMD09PWF8fDEzPT09YXx8OT09PWF9LFMuaXNOYW1lU3RhcnRDaGFyPWIsUy5pc05hbWVDaGFyPWZ1bmN0aW9uKGEpe3JldHVybiBiKGEpfHxhPj00OCYmYTw9NTd8fDQ1PT09YXx8NDY9PT1hfHwx''@;'; put 'put ''ODM9PT1hfHxhPj03NjgmJmE8PTg3OXx8YT49ODI1NSYmYTw9ODI1Nn19LHt9XSw1NDU6W2Z1bmN0aW9uKHMsRSxTKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihhKXtyZXR1cm4gYT49NjUmJmE8PTkwfHw5NT09PWF8fGE+PTk3JiZhPD0xMjJ8fGE+PTE5MiYmYTw9MjE0fHxhPj0yMTYmJmE8''@;'; put 'put ''PTI0Nnx8YT49MjQ4JiZhPD03Njd8fGE+PTg4MCYmYTw9ODkzfHxhPj04OTUmJmE8PTgxOTF8fGE+PTgyMDQmJmE8PTgyMDV8fGE+PTgzMDQmJmE8PTg1OTF8fGE+PTExMjY0JiZhPD0xMjI3MXx8YT49MTIyODkmJmE8PTU1Mjk1fHxhPj02Mzc0NCYmYTw9NjQ5NzV8fGE+PTY1MDA4JiZhPD02''@;'; put 'put ''NTUzM3x8YT49NjU1MzYmJmE8PTk4MzAzOX1PYmplY3QuZGVmaW5lUHJvcGVydHkoUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksUy5OQ19OQU1FX1NUQVJUX0NIQVI9IkEtWl9hLXpceGMwLVx4ZDZceGQ4LVx4ZjZceGY4LVx1MDJmZlx1MDM3MC1cdTAzN2RcdTAzN2YtXHUxZmZmXHUyMDBj''@;'; put 'put ''LVx1MjAwZFx1MjA3MC1cdTIxOGZcdTJjMDAtXHUyZmVmXHUzMDAxLVx1ZDdmZlx1ZjkwMC1cdWZkY2ZcdWZkZjAtXHVmZmZkXHV7MTAwMDB9LVx1e2VmZmZmfSIsUy5OQ19OQU1FX0NIQVI9Ii0iK1MuTkNfTkFNRV9TVEFSVF9DSEFSKyIuMC05XHhiN1x1MDMwMC1cdTAzNmZcdTIwM2YtXHUy''@;'; put 'put ''MDQwIixTLk5DX05BTUVfU1RBUlRfQ0hBUl9SRT1uZXcgUmVnRXhwKCJeWyIrUy5OQ19OQU1FX1NUQVJUX0NIQVIrIl0kIiwidSIpLFMuTkNfTkFNRV9DSEFSX1JFPW5ldyBSZWdFeHAoIl5bIitTLk5DX05BTUVfQ0hBUisiXSQiLCJ1IiksUy5OQ19OQU1FX1JFPW5ldyBSZWdFeHAoIl5bIitT''@;'; put 'put ''Lk5DX05BTUVfU1RBUlRfQ0hBUisiXVsiK1MuTkNfTkFNRV9DSEFSKyJdKiQiLCJ1IiksUy5pc05DTmFtZVN0YXJ0Q2hhcj1iLFMuaXNOQ05hbWVDaGFyPWZ1bmN0aW9uKGEpe3JldHVybiBiKGEpfHw0NT09PWF8fDQ2PT09YXx8YT49NDgmJmE8PTU3fHwxODM9PT1hfHxhPj03NjgmJmE8PTg3''@;'; put 'put ''OXx8YT49ODI1NSYmYTw9ODI1Nn19LHt9XX0se30sWzE1XSkoMTUpfX1dKTs='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=Metropolis-200.0609337a726323e0-woff; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''d09GRgABAAAAAFQgABMAAAAAm8AAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABqAAAABwAAAAcfNH55kdERUYAAAHEAAAATQAAAGIH1Qf8R1BPUwAAAhQAAAcaAAAOdjy+ejlHU1VCAAAJMAAAACAAAAAgRHZMdU9TLzIAAAlQAAAATQAAAGBoPqzrY21hcAAACaAAAAJsAAADnndDD7Fj''@;'; put 'put ''dnQgAAAMDAAAADAAAAA8EY4BjGZwZ20AAAw8AAAGOgAADRZ2ZH12Z2FzcAAAEngAAAAIAAAACAAAABBnbHlmAAASgAAANnMAAGgUxFIgN2hlYWQAAEj0AAAANgAAADYLYYgUaGhlYQAASSwAAAAhAAAAJAd2BDJobXR4AABJUAAAAogAAATuuPI/FGxvY2EAAEvYAAACcgAAAnqJanBwbWF4cAAA''@;'; put 'put ''TkwAAAAgAAAAIAKEAeluYW1lAABObAAAAYIAAANWLdCE9XBvc3QAAE/wAAADoQAABiGXFj2KcHJlcAAAU5QAAACBAAAAjRlQAhB3ZWJmAABUGAAAAAYAAAAG9nhYmAAAAAEAAAAA1FG1agAAAADTwZ2GAAAAANS+pvV42g2MQQqEQBDEEkf0MLPof7ypL/DofXfV/z/AIgRC0TQCLR6cdFRkjVso''@;'; put 'put ''7HzTv1D4B7m4048DOlopNlv645SeXXLT51sXzSa+W3AF3AAAAHjajVcBbFbVFf7Oufe+v/0LWEoLCB0DUhkxTWWESUVGiWMFsVPDmEEHZlucY61Q7BjZiDFKHZql6YzDDpE0qAyMNsBQsSKypqvOOUdkY6YhYFwHyDYm07nFCPL2vfN+6F9ot/GFj8O59917zznf7bmFAMhiMhZC5tXWLUYBPD2I''@;'; put 'put ''Yzj+I1C4hm83rUTpim82NaB8RcOKBs4G/cloOiNhx++yGI0JmGIehwrUuY50NFplq0rUiogfyfDV/GKc+QJKL0BQG7eSA2ajBZ8ilnFQHoPzZKwcQRGG8WR/j7vj7XFvfBRD/Ik/GHLkt4N6+7h3/v+Pxz8dcoX3hhwZ+jx/jPcOMbI97ov3JbjI38u/v0kw2B5xK7OkmMhMT2G2PkcoqgiHqwiP''@;'; put 'put ''6UTAF4gIM4kMriEKMIsoZG5ns1JrCMH9+BFnPkgEZryF/hcIwYuE4CVCcZDw+APhcZQI+DMR4TgR4T0iwmkigw+IDM4Qhazep1wtJrJSLMUolBIpIZdKKXkcK5vl2tOokgp+cyUhdu70xGondnZibycOmEcUoJYoxAIii0VEERrxfa6QRBJZJJFFEvATPMr5bUQhfoZNnP8Efs7524ki7CQy2EUU''@;'; put 'put ''4BdEBruJAjxHZPA8UYA9RCE6iULsJ7LoIrLoJrLoIbJ4lRD8mhDLToR3iCL8iUjzopYXtbx4y0uwvATLi7e8eMuLlzEyhvm6XC4nJzkKXLWKGZrCGlexttNZ05nMzCxmpBGrcDea8D2sZi3vxzo04wFm4UFGv5MRPcdKvsgKHmTljrJix1mp0zzJGbtZxdy3NLlfeq/dw9ekiXEPp7r2UXet8b8G''@;'; put 'put ''UauNDHYHLoycSjDIl6eHvBunziue9/po3Bw3XzyS3rp4c7x50JG/2DeKctOEmCYUXyMcbiU8biMClhIRFfEo5yRqEFODmhoUHUSEHURklRartFilxSotVlfFMcLhBOFwknA4SwScIyIZKSNZ11EyilwmZeSkomIVFRkv47m+ohKXEUUYSQwzpYspXU3pLqf0+US+0r3FE+XFkzGlu5zS+zXuLSpv''@;'; put 'put ''UWUsqvNKTzWeqnsvMbSuk2i9aVZzESbKdRZnxvTrTL+aizlRseYiT7SsefHnK9pZFjIyTa7h7slPr1pGuIj1upVxLWUkbYxkIx5jNE/gSTyFrYxoOyPZwdvYydN28ZQ9PN0x1uAkT3aOJxjF3cZwl/FccYLpWTHCOkqJqaOEu9TQErNr2ImORBPIfcx/t6yXFnlENkq7bJVnZJfskX3SLa/LATkk''@;'; put 'put ''h+VdOSGn5EP5WM6p16wW62gt18k6Vat0hs7SuVqrdbpIl+jteofW6ypdo/foOn1IW3WDbtItuk07dLd26n7t0Tf0LX1bj2ifntT39SP9xMFFbpgrcWPdBFfhrnTT3NVutrvOLXA3usXuNvcNd6e7yzW5H7h73QPux+5h1+Y2uyfd026He97tdV3uNfem+73rde+4Y+6v7h/u3+6sV1/gR/hSP85P''@;'; put 'put ''9FN8pZ/uq/0cP88v9Df7W/xS/y2/3K/0q/1af59f71v8I36jb/db/TN+l9/j9/lu/7o/4A/5w/5df8Kf8h/6j/254EM2FIfRoTxMDlNDVZgRZoW5oTbUhUVhSbg93BHqw6qwJtwT1oWHQmvYEDaFLWFb6Ai7Q2fYH3rCG+Gt8HY4EvrCyfB++Ch8EiGKomG8HU26k9xsPN+4xnhDwmg0bjPP2n5/''@;'; put 'put ''jm8wrjS+1nhlwlpm9vXGc4wrlD9T5Qrjq4yrE0a9cbu+TG4wf6XxbPP3Gp8xz0Tjx40nGUfGC1w9+SnjpsFZf5UXY435L2F82XiLcWM/y7I0drPvMn7VeMOlnGbA7Ev5euMK7fpfrM8OyFXXYIy5xo8b1/czs9dl2fvvnOaza1CelMdNeWceYOfVtNn8V5g/355vOWwxe1le5tMoBtg2mqoi359m''@;'; put 'put ''tTq1bU6qmbQ6adSpPnN2zp/MaTO73a05r96cxg6a3ZPYuZqmGVubU3K4yJ+eIc3bAbPXWo0OJfNdqsAbbK9em2M3ItXtAH+l2WdyNdp5QdX5/vQGXZunmbQi+fZWs7+e+m2+3QstM7/pIae0SXn2HOPIPEPZfzP7bouu1uw3zc5fuSb+Jbkq3n9RpfJ3rM7d7q7/gwfOVHzW3qXgu2sqs5K8Tj27''@;'; put 'put ''diW7YPLCjvB5vsQymIFq9rCkc49g3/4ie3rSuUfaG7XEOvco/l61kH2ojijDTexzo9npbuHvPkuIcuvln2HXW8au1ci320R7vc1kR2/nelvY+b5ive+r7H4vs0O+ggP4Dl90p/FDe1VuxD8l4DF24vHosJ7ayfOKXGa/m0WQeL2p8D7cSV7PbleEsdyrghFNw9U89XU85Y1YzNEXTLu/Mz5sbHeG''@;'; put 'put ''Gu3ng8bLjbcZ9xmfNS7Cl7jPcnxXMlIghZKVIhkuIy490X8AtlKXWAAAAAEAAAAKABwAHgABREZMVAAIAAQAAAAA//8AAAAAAAB42mNgZrJgnMDAysDC1MUUwcDA4A2hGeMYRBjNgHygFBywMyCBUO9wPwYHBgXVP8zS/40ZGJiPMqoqMDBMBskxsTKtB1IKDEwAxlcKNgAAAHjatZNZUI5RHMZ/''@;'; put 'put ''/7d9ESoU9fb2adNGohRF9qXIvpSs2bKv2RrrEENFUsieJKMZE1NTthvuuDVjjL7PlVvuDB3HV0wzzLhyZt5z3nPOnOeceZ7fH3Ch6wtBdI9U6pk4565SrMcljMONgZRwizru0kgTzbTQJh4SIIMkTAZLnCRJqqRLpkyVHMmTQimSEiPVeGW8d4kyj5ut5hPzi+VuBVrBVqhls6KsYVa6dd/mH/lN''@;'; put 'put ''KX2HxY0e2o9p45n4Sn8xxSaxkigpkiYZkiXZkisFskE2a+2XxlutfchsMdvNz5ZhBVhBVohTe6iV9ktbfVQv1HP1VLWrVvVINauHqkk1qgZVr+rUNVWralS1qlKVqkKVqTOqVJ3ofNOZ1Zn0/ZOj3FHgyHfE2Afa/ew+di+7m93o+NrxuePwh5B3yV1e/afmbng7k+CPWwSj+8/4h0bXSRdcdXbu''@;'; put 'put ''eOCJF9744Esv/OhNH/riTwCB9KM/AwgiWGc8SKceikmYTiQcG4OJIJIooolhCLHEEU8CiQxlGEkMJ5kRjCSFVEaRRjqjGUMGmYzVzGQxnglMZBKTmcJUpjGdGWSTw0xmkcts5jCXecxnAQtZxGJNWh75LKWAZSxnhX7/Dnaym2IOcZzTlFNGBec5RyVVVHORGi5xhcvUcpXr3NQU/WT0Ng2apXua''@;'; put 'put ''pp9tFau1HdFs4Gy3N+tZo/tdnPjtVuFfHLxAPZtZ2WNlLZskRo9b2M4x7DgkXPMZKVG6AiK4o3ceoGmWBF0P8d1nipxhxLKNvWxlH3s4wEFdS/s5wlG9dZhSTnGS17qaerFOvMRbfNgofpp/zx+QzaroeNpjYMACHIHQksGSaT0DA9NuJlYGhv8hzNL/jZl2///CdIBJ8P+X/34gPgDIPQ0ieNqt''@;'; put 'put ''Vml300YUlbxlIxtZaFFLx0ycptHIpBSCAQNBiu1CujhbK0FppThJ9wW60X1f8K95ctpz6Dd+Wu8b2SaBhJ721B/07sy7M2+beWMylCBj3a8EQizdNYaWlyi3es2nUxbNBOG2aK77lCpEf/UavUajITesfJ6MgAxPLrYM0/BC1yFTkQi3HUopsSnoXp0y09daM2a/V2lUKFfx85QuBCvX/bzMW01f''@;'; put 'put ''UL2OqYXAElRiVAoCESfsaJNmMNUeCZpj/Rwz79V9AW+akaD+uh9iRrCun9E8o/nQCoMgsMi0g0CSUfe3gsChtBLYJ1OI4FnWq/uUlS7lpIs4AjJDhzJKwi+xGWc3XMEa9thKPOAvSJUGpWfzUHqiKZowEM9lCwhy2Q/rVrQS+DLIB4IWVn3oLA6tbd+hrKIez24ZqSRTOQylK5Fx6UaU2tgmswED''@;'; put 'put ''lJ11qEcJdnXAa9zNGBuCd6CFMGBKuKhd7VWtngHDq7iz+W7u+9TeWvQnu5g2XPAQdygqTRlxXXS+DItzSsKCkx0vUR0ZLSYmBg5YTlNYZVj3Q9u96JDSAbUG+tMotiXzwWzeoUEVp1IV2owWHRpSIApBh7yrvBxAugEN8mgFo0GMHBrGNiM6JQIZaMAuDXmhaIaChpA0h0bU0pofZzYXgyka3JK3''@;'; put 'put ''HRpVS8v+0moyaeUxP6bnD6vYGPbW/Xh4GAWMXBq2+cziJLvxIf4M4kPmJCqRLtT9mJOHaN0m6stmZ/MSyzrYSvS8BFeBZwJEUoP/NczuLdUBBYwNY0wiWx4ZF1umaepajSkjNlKVNZ+GpSsqNIDD1w/DoStCmP9zdNQ0hgzXbYbx4ZxNd2zrONI0jtjGbIcmVGyynESeWR5RcZrlYyrOsHxcxVmW''@;'; put 'put ''R1WcY2mpuIflEyruZfmkivtYPqNkJ++UC5FhKYpk3uAL4tDsLuVkV3kzUdq7lNNd5a1EeUwZNGj/h/ieQnzH4JdAfCzziI/lccTHUiI+llOIj2UB8bGcRnwsn0Z8LGcQH0ulRFkfU0fB7GgoPHbB06XE1VN8VouKHJsc3MITuAA1cUAVZVSS3BEfybA4+rluac1JOjEbZ82Jio9GxgE+uzszD6tP''@;'; put 'put ''KnFa+/sceGblYSO4nfsa53lj8g+Df4sXZSk+aU5wcKeQAHi8v8O4FVHJodOqeKTs0Pw/UXGCG6CfQU2MyYIoihrffOTySrNZkzW0Ch9PBDor2sG8aU6MI6UltKhJGgEtg65Z0DTq8+ytZlEKUW5iv7N7KaKY7EUZzIApKOSmsbDs76REWlg7qen00cDlRtqLniw1W1Zxhb0H72PIzSx5N1JeuCkp''@;'; put 'put ''7UWbUKe8yAIOuZE9uCaCW2jvsopiSlioIj4IbQX77WNEJi0zgy6BImRxsrIP7YodOaKCdgLfetIq79tC7c918iAwm51u50GWkaLzXRX1an1V1tgoV6/cTR8H086wseYXRRlPLnvfnhTsV6cEuQJGV3a/7knx9jvW7UpJPtsXdnnidUoV8l+AB0PulPciGkWRs1ilEc+vW3gyRTkoxkVzHBf00h7t''@;'; put 'put ''ilXfo13Yd+2jVlxWVLIfZdBVdNZuwjc+XwjqQCoKWqQiVng6ZD6bnZrwsZS4LEXcs2TXRfQdPCEd4r84xLX/69xyFNyiyhJdaNcJyQdtHyvorSW7k4cqRmftvGxnoh1JN+gagp5ILjj+XuAujxXpFO7z8wfMX8F25vgYnQa+qugMxBLnrYIEiyre0k6mXlB8hGkJ8EXVQrMCeAnAZPCyapl6pg6g''@;'; put 'put ''Z5aZUwFYYQ6DVeYwWGMOg3W1g653GegVIFOjV9WOmcz5QMlcwDyT0TXmaXSdeRq9xjyNbrBND+B1tsngDbbJIGSbDCLmVAE2mMOgwRwGm8xhsKX9coG2tV+M3tR+MXpL+8Xobe0Xo3e0X4ze1X4xek/7xeh95Phct4Af6BFdBPwwgZcAP+Kk69ECRjfxjLY5txLInI81x2xzPsHi891dP9UjveKz''@;'; put 'put ''BPKKzxPI9NvYp034IoFM+DKBTPgK3HJ3v6/1SNO/SSDTv00g07/Dyjbh+wQy4YcEMuFHcC909/tJjzT95wQy/ZcEMv1XrGwTfksgE35PIBPuqJ2+TKrzZ9W1qXeL0lP125132PkbZTO6LAAAAAEAAf//AA942rV9CXhbV5noOedKupIl2b5aLcubrNXWamuzvMjXS7wvcbzFSRxnc5y0KV3Sli4h''@;'; put 'put ''pLQNFAqUAWZYhr4u0KFMS5K2dKHtFChQ2qHLDG+AecMH5Q0zLG/YBjowbX09/zn3Xlm27KbwfS+1JPvqrP/59+UUlaHFtST+FOdGHKpAduRCXtSE0iiHutAQcomO3nxnezaTbA766qurHEKlQUNQWSKs9Qge3p60e+3JtDedTPPsk4df1af0Gf2k38CTtPq70oZ1yCbT+FPSs7jrP3t67+vtve++''@;'; put 'put ''3kaPp7e390iv59b7jjR6jnjuu+8+z5Ejtw4M3Hd0oOFF7md9Hr8Hfm461jgw4DsIvw14Onsbj9zQ5ozvvPLKB6+8cmd8xRP3wA9CBE2v/R6dI+fY3vxiI8IYLSKEykcRIdySBnOckxvTaDQVmnK/UKnlnWFrkvM6AulUJtnqsNt03v3D5oTG7bZZq6ut5JxkedFts7jdFpsbobU1NIgfxWPkk5WN''@;'; put 'put ''qAyhSg7eH0F03iC8XQfzulE9umH0vHfnbjFUoSNIyxFMEF42YoOhfLS80szxvH7RVEb0emFUgwmpIGNuMUAfsC+Rnj9a2k9puCDWIVRfV1sD07irXVVOWLBVKPzja8OYT/Je3ptlr2ySvZI8e/H0S/ybzI3mG2Ntsbvgda352sw7zdcpf91gfviuzF34a99NPwb/0t9NPw7/0t8FSMbWHiUR8gfk''@;'; put 'put ''QSEUR51iLub31dVWu5w2s6nMYOaIDiOOjCDCkZsRRvgWCma0BHBxorGmpqZ4U9xhFyxa3hH2lWPAkXQMB7MOpxDD6VQeZwFZHE4engl12I4cznQ5fGTSqUBQIJHUkR1iz8loaOfxowda9+bEKxZDvpno5e+Q9os7OkaweWZ06ua5NNfdy2cjrTsrcWX1rqHkbFrX2WWcbfVGeOlN9+5JXJO2/Z4f''@;'; put 'put ''bpWyI6mWDof0JqxNi+Jr/0X+lXwJMMUKpxZHHeiF0fNVcHJhI9aWYazT4hWkQ3qDTn8MaTRoiWCKSWY4Em7JxBOOq+DG3KPng9Al/pZdEDRl/fglE+Z5Jw9nntyiByHQlnZDW/daWBADiURDg82GUKIj0Z5JNcQbYqGArd5WV11ltQiVsJnyQDlvD1tk4CZbAaa2cuzFSey1UKB6G3V2myOJNn2f''@;'; put 'put ''x+vf/fVAMDQYiQ7CexR/qFNq7rwm1x6JtLWH8dRAKDgYlb+KtdGHuQhejE7EW3ZGo5OJloko3rU6hT84kM4MDmTTA9Lx6ERLYiIWnYy3TEYTA5n0IP0K9sehprXfkxPkMYB9GPhPXuyIR/11NW6X04DLOFLPkIpiPl4CMnaMaouwKhJpaIikI6mGcENzuFEHmKUN6ryNdE/Z4o3BN85M1qnjnYju''@;'; put 'put ''zCnv0pINBOHPOpwkiaV9JzuP5O7x1EXGE5Hh8Nxc5spIUyaRvFr6dFdt/URfrjk0fjp/tnmomT+w3LKQu2kgOuiLjITDI835UZ/4TvFA1fHha8jx9lhNV6ghG27uWj03d8tY1/6Q6AViAH6BPkE+iUwoOnreAYhipCyJnS8GJKhE9M95+BMvUtIZX3jE7iOwHWuBI1Vg72x5lSA4y/kg/o9D3soq''@;'; put 'put ''p+A9lIHW+bU5HCNPwdi6h01anAgzNpZ1AvnYnPznL7nksHdu4Zx3149vuOHHu/27v37VDy4EYCKg5zlcp/bTQT8nI7asDLDYuYU572HofMuFH1z1dejHutN+Hfgm4H1fQrNIFLv8GJPJHd2xRpdNq0d4F9YiboTDWIORFqMVHdZqyRJFaO0Y7G4WzQwPZdJNwdoaN0+xE1bajXngBnBqQfgjm+nG''@;'; put 'put ''wYD8W7LV6ajHwSIIZLLAJthzuw06VWCH08F+Z73hPydj3V82G3TeioZyrcbMa8qc0XAkZi/T8GatxtLs0xnMwKz0uspKLmTTas08VyaEdRGnI+wo43izTuMIOYw6vdmAbzLra1qaa8xVPGfSa4y8WRAsFiNv1OhNXFljTXNLjd5s1jta46ZyrsHImXRaE18mEGgimHiTVmfiyhss+nirQ2+mB4v6''@;'; put 'put ''0HFSTlLIiAKAExoOa2YBl4EzYA4tA7nTo9fgccbDK3V8dRh7qfRMUymaJOXfzD/3XP6bOP5N+gsdb3LtNHoM7UTlyCkC6aJBFaWAMHwWij2A843rIo2fDJqtINGcNfWh49EEFW3+ulqxlY7Vhn6LO3AMqLFKtDNknF1HRqGSoaLH7mnDnLSKY11sP8MgYz8H8xuptkCfAJfD2InpQRtRmY+DAy6W''@;'; put 'put ''qEcUaWoqSFK89pu1R/HHyU9hXkEsp4OC5MBXyxNSVoUnB6S7B8hP33wZMfnaAbziGHkS2Fs9iohNgFhsxzJXwCDY2QIqgZ4q6yvrqhyMD+pgIZrNfI6kUzHsbaREAgwA43cPDr57aur04ODpqfzBTOZgPn8okzmUN+29Z2Xl7r17715ZuWdv59jZudn3jo6enZs7O8ZgUA3vb4C81yG3WAVHyQG8''@;'; put 'put ''RmSujQE/xwQrAx0fzCYF75O31D6YEsmB2ZaTq1OI9W+BTelhPy7ULAaNZbAdwAZCRhg4GbujCssiYjJGcPqCGr4qnPVT/kVXzwcLHK4Cw/m0wKn0Nu1oumJnLHr9cOeh3NjMt/BJqantX/KXppp6A5f7xf7UYq7v1NCD8hmGAJ5amD+MusVOdzXM5QOChhXAMkCSQwsCconjNEuAoLAYkJdLlKad''@;'; put 'put ''jJzDqNnn9/j9PO+Ck6acI9nKWGsYp52tGXmNOj6YUbmwAvxXTkWivqP5xFj40NyOgbF9zcORzEJTePH9+SPtA22dU52X9Jp62puTWX9PU763E/d3+vO+dCp0KjGX7tollM/2ZfemGD6E4C0F8C9DZhQVm00YUHBEp4V9YAT66lEAIROlFZoxo9FoNgINC5ZKul6/J4iTAtVYvWkB49ukzxvwzPil''@;'; put 'put ''l4rSzx9swy9IuY4Hf4ZvkM7K59QGcHLCPA1U73EAexMqOaJBGE4K3pGGAYksypJ7I5AaUH2jYA2UAEk+P0pVfKaAlj9+V6S5eaU9PhGJTCQmR1sN+IPSQ3zfXOdyZ/5Er6k9GY8lw2PRyFAoW4WXul5vSR/I96y0M1h0whr9cJZu0ON7xW4gIo4EqohWQ0Z0wGI0Wk6zggpilIcFqtyipgahmqaa''@;'; put 'put ''kK8ROld7/QE9KMRIWRLlIBTLnHyAkksthj8s6gbokSbxe452dZ3oPX1m8NTYO2Z9o3O5/Znqy3r9E5HYRLz/sLly3xB+MHOwO3+s68k7V/7mwK7W4anb52zpbulMfLw5Ptw03rV7WYZzB2zEwOipXqwBGYIZNVE+hJnuDtovaDccLA970h47MIinpHfjl6TvDJOrulpW30P1iRTAoYbBIQzj9Ys9''@;'; put 'put ''Nh0BbjvCFwFB4Rp6AAKGs2JcIxKhcIh0RNpTrTXhmmYZGhEDZWOUe2Q2qRQKfAqwkFmJU/k7WE4YZ/nJ5T2zvZ3D3cc6Oo91j7X3zvZc0dc0Eo+MREB7iI+EWnYlUtORyK50YleLqWU+27Xf7pjLpqZjsZlUbtbm2N+ZnW/Bt3tyfl9HY2OHL5BrINIFXz4Q6vZi7O0OBfI+tNX511XC0Rv0YD8Q''@;'; put 'put ''2LoWCFlLVoAUONgvxzlGi6SFev6NDXTHAa+fnb9DPn5Q0SnCdmH6hwIBC4XFOvP83KaT72L4sIOdfAvDAvLkxpOXsUE6Q09exgF5D0ym4NdBfsCyRs9HQVNyUqbOVirI1ptWtt7cVFDBd8CkVoqfL4gWkwkhk9PksFQyQaRTNA1VEJEthJJN+cR31lipdLLWSHOqnAJ7j8la/DrYexWwDh4JyIS/''@;'; put 'put ''gAwXMH4cf+F8MkxxN4sWsUSmAXd1D+sI6FPWtN9uxvYsfk66AZ/FXZlX808/nWf77ENfJeX4XwBbedQo1lMcp2Ye2E4cmVVYPuGoLlBJOT7lEvS/Pvz3Upq9/iV/Zx7mHEOLxKrOycGc2ShOa+3aMXwW5nxOyn0aZnw18yqd0732e/wtwI8q5ENZMeUwGSmLxJTNczDx6SKZQxm+Fms0Ts2Yy+Xy''@;'; put 'put ''ubz+Kl9QRxeiys11rs5MuWI5/0z73qSvpyk77w/vO9u+mErube8xq+C9Whvs8DZ2+pLx5pMtM8nIzpzxPUWmNV1nZO12bge5F3WjCVjL+TrAAaHRQ/Rcg4Vo9J0dYGdyI+71Zwb12YLcOGQ0EA3IAR3lyroy0C35w0hhdsBE9HpuCTYo6KnNVg/to2Bca7BhHr3dTk3UNgSY6Q2cfuWinbWAqS1U''@;'; put 'put ''JnBIu7J9L57XzSOdjl9i3ScXwMarEkWExAlxfGgAgJEPBJoCvkDAxLtLtJnGQLCIOlsdzqyTZyZc60bmlGxldoGXqtHMzqOPHUncf/7YVV+54siDR5NTsWinvm62JT7c3HO8vXXQYm4vi4Tq69oDi5/Zu/zFlf137csfzlra39Ef3GMg7en4zkRP6uqjDx65/CtXHvzs0sRlGbBDE5GJZP/Jvpi3''@;'; put 'put ''V9v6T+6GQHihd/Zj8yvnlvd+ZrHG4/Y3vLY8aitL5zMLqbYBduYN8PZ14Ps8SPKwGDJgAMwIYCCgpAakOBWrYFRQjUqv15fpy2QVuQqkOM9M2qARk6x07eAAjtOfw/fff8895Nzq1Kv4jHQGgL4fxj8G41eCptWIusR24Pwwgw6oDuSjdhnOVnEQ8VjWxOlc7mqL4KmvbnQ3VjkEl8UVadAzRXij''@;'; put 'put ''APBgquqAzmO3Kr8I+3Frdi6RjLf3pRY7pK/hUMfoeNdPftM3N9f3G3IuMtGSHndWL7Zl5hL41r50qu/X0qPjHR1j0m8pH6Hy6wNAp7UoJoarXcYyiiQjKrt2bHBhwYNaVBPwB6gLS7N+/nzpmePsvQcO3Ls4cKYlErokN37LxMQt47lLQpGWMwMmOLmlew9mWyNNian3Tk6+byrRHG1pg3OhcHuE''@;'; put 'put ''6Vd2ZrUUwMQMcgVMJqPNYrSb7IEG6tuxqlgZxlkF/ShEfn7JfYuL913y85/P3zY+ftv8/eTc7r8+fPgzuzuG37Nr103Dq88x+T8J88VgPiOKixGVK1JdSrMIoqu8WBtmVoZR9niBamWl/FGQX3fg66T34TslD/4Rueq1vCR1kXNdhfHTML4BNYkBdXzK6dioqooBXxiQgY7MeB4b2cvGPSXd0oP/''@;'; put 'put ''nQ36VXVMel53wnl5UFpsBa0LcfWEaLRMiddqEEMuZgM7qCbKWCxoG6ARBryymecRNhLvpsNLe/EHsLXljuFFdoDDd8ABXt8lH2D6RNN38GHpv+M5+QjbElH1CP2e86iw56sYTIOiT1FXl0FHpvulfqkKtBmWmO4WXkl4J1eJ0qIo4nspOeFuum3pJdwqj4s+zHysVurAWLd5ZHMRDJ5JUaS9qJ0E''@;'; put 'put ''sucZaCtQLGLmBcNopiyTJQ6QycnALqBKm18D3Ys0ZVgGJbMHTzZEnXtbwv0BEawzU3cyHs1Fdrbif5RifZd0whz7YKgr2D4bxFqDXkuYdMPM88bJnlOrxSLL06SAkwagCRBd+0R86az0Kk5NS7+7GtYrnQSd+znp/Xjk1EsMfv0wLoFxtVQnZYumozE6kEGnRVpBoIv2A54kBUKkXrELUG71Q6w/''@;'; put 'put ''paFfrK+L32JdNkFdlwGMEq9ggBPYL2Id1omi9Lr0Ol2WDf/H6hQJss9/Vsf9S4bLdaKbJ6RkVEthVAzL8spjPg4jDtFjeYIMwniDq09Q/ktx+Hf/P+xqmensv/vAgbv3j988MXHzuIy4Css5eO/S0mcPdk69b3LyvVMy3jJ5QHH2IOzNBHwHLGNYBZAqh6mbZN2RD1ssN9ssZnu5XQg06KgT31Pg''@;'; put 'put ''PXavypaFSVw9cGVPz5UD/0fEFfMnTsy/TM61Hc6DHJNwx8zg4Kz0fDEMbGBV5sQM9atriQ7MPOaB5DCHh9fNp2Lftt1uD9mDsUCQMmGQ5E5+gzSGFZFsMOvcJIrJ7yJNY00741d2LaowWpu4pum6Bl8BSLjq2kRvYkcgXACW9P38cuJY8FCqGFxF8CqH9YD8JNQBp5qmy6CKKOxNIXefzyMIVsp7''@;'; put 'put ''YLVWbxBsYIFBTptUYEYOXjb/6MjDz4kMdFLsZQY2fMvV5RL8Y+D7NIWc7Ed8jUTIUyhI5ZXDTu1iQrVKFVTUyVskr4Io4Iv4KKgojSsqSiCoQmud+zmcCk798v3p0JFb0xNNe49efVnHSs8tJ0Lh49nYUNOeo1demTsxYsylWo94O72Zrir39Hh2T/JQa3Pc2+VraXO5d+/MLiRlPhgFGA0zHUP2''@;'; put 'put ''1RTMStm5oqja2At2pReoxf0rUvMrEczKLoWO5wA/zkJ/O/KIdYpDH+PirdmRzeazqaKY8q2NLAzXnhkUswzzxMEzU6aRW2bwJ6WVvuMdHcf76G8zt4zIa1X1IR2dS8vsYOCaCsOUuQ6o/DLXoXwM+Ab5uvQPA/CDTdhEuS687iIHYCw/mEkaRkswVhnl+8AoaFiJiXG2eeAUlkotlaJJN6Y/nNeI''@;'; put 'put ''vf6hbzwz+JWvD/285xvf7IHhniL97DVFdq9+Xl4nyFByM+NtwBsNOhgajp6yn/JRLOOaxWIRKFxhlTCkgY2OT2Hd5I9+NIl56b8nf/TqJJ6X7sc+6Qd4Hu+Gd588tgXGPgNj61GtWK3jgAgLDE7xBFgE6glQxoQjC0m/2PnTn09I/68PV+G/kj4Pox2XfkbHaoexRFXuU3iuu9kKvoWCm80isBVn''@;'; put 'put ''ZRcDCP92/IC0F78hTeMLq68nSXdXcvWrsuyfWvsgbiM/fJtWXBIQC15TPz137qfkh62rVup7XXtj7VF81zY+UA50W+0AXpJdoBi1wHxVhflk/9wyomoZ9dfS+dD6fE5g+ml4tcB0P+0hv2x98xwdPoM/gx+UceuC7ki/6ADuzryWMDP14F6teFgu6FC/NQnsgfd+L3NX+00350AK/erVV+mapbV3''@;'; put 'put ''kl1r52G6BjbGNj5jOgQPACRkZvWBnTn5XLuJiN4kL0NfJ+trgp5D8M3VFhDH8qxZp7e798Ys+UrFh2X+1gr6wy+IgKoB43aK41WY0zhBIAigxdfVajmdVkPNWK2OaGVvJdXiXYxWRvVYp1OVLjeYmO6A2++ph5FcPr/XagA4IYcdAFXs6mK2EbVwLaB+qeEwfPpE3n0iu+uSzGL7xNLAzoFp1/4F''@;'; put 'put ''1yXls5M9uyc6iHDNQekbuyKte0daJyL19r59sWSr5M63TVf3tCa75Jg0yYN8sYAF0i12VpQRrYbxycrRglvGxXSoDc45qxUha6PV43ZBT2Dbm5xzQYpTQrFPThW9HzuRz5/o7T5cn8/XH+4OzSQSM8n0dCw2nSbC4I1jY6cGO9PL5Enp39KdUk3boc7Og23U7X0wC2eUAHj/BuC9tQ3i2t4Gcbyl''@;'; put 'put ''DfLbGwYHbxhKLvrD7qFgdl86vS8bGnaH/ftTpqF3jYycGgr5mmsbcgc7Og7lPHXN/iZ69hmAm2cdbgLH4EahxQDHVGvlrHnmz1MU7GK4WQJegcINKwe9vkqBbJbLHgquXhV4NzGIJRn0yJOrO5bTnYOnxsZuBOBh9+pVWQqxTNvBzs5D1F4CuBEfwM2J6qiVCTyGI0wQE05DlgvLc43qivSHqiqE''@;'; put 'put ''quqqat3V8JcDDAO6Up8MsWItwlNHkkTHe2Cx+MgBd7Dh+vb+6wZ3XLNj7B0d0qg2M5uauLQMX6s7MBn11TZ7o0OnxkZvHBy+dSE934L/dnnn1BFGfyAP8BR5BaTVHrGsAuu0lRjpyIjsDKlBOp12CTSGKmZwo0XQfmTHG8tQqAZlVwd0tlL65YJY5vWy2BXPu2Ve56X8hzmGmPNYZ3/s1lvzMzP9''@;'; put 'put ''qVSkwRGo9hFtTkrhb+cG20c8MUezR6b1+NoMqQEY0lj8kLijrpLotIofE2gZGJ6OrFD6holBsaFuGVfBmWlFYw0gO+VwOIxQH/D7fZTGsaCQC7MqMhu8mYAF6RIsqOm+cqjzSl9Nw2LLwrG6FbH30q6uS3t7jtbdOptIzKaT0/H4dJJopdbelfZAfWutZ+/k/nS7eMXAjivEXPqQtCcxlwX7vmUu''@;'; put 'put ''DdBncB+Htz8AHttppMIi+7YZDoOyxrxtriJzDFQJwea1UfuT0jqAUnHXCAq548sWWvIT+ehIOJ+3L7YRoXVPTnoE9/dMB3qD0mNA16+FMwye3fD+cfIVkNEV1AIsuFOr6MEJo6o1XVFuNjF3qXaTu5QHEbLb5bJY4AW8hFzisgjV1YLFtbz6Boy/9tTaBPoIG99Ncb4C+HI51sBpaYtm4jiGJxrg''@;'; put 'put ''chqNWzPGXLRuU7XTYRXYrHyJk1Y5KqY86bwzygreEa0oM/sFtzffn1pfyps/MfBpLd9UTzKrL7QNM3gDSwDqexJG94oNBg3QG6eyW7oaVT8RrEzaYyroGC8F2Fb/YOLLy/k8bprCVdLPfnX0fQDOWhyV5Rc9nvfDuKrdW1li944BlIBVyG25IOCyF6XEloZq2e7VagVGXLolMAZ1Oteohsb95HP3''@;'; put 'put ''okavYPVavTYDUFHR0es2/JK0y3gL7+S+6Vh+qE2cyg/St7x1Kt0+Z6/c31mEEhP59U+iHWuKd6ZAJBVwUtiEk8KfgZP2t4GT2lmGkgqfHIR5N9mbrovam463tjdfOzU8fGpw8Mbh4RsHM4vZ7GImS9+zppF3DQ2dohIG5Eyu/XAud6i9/VCu/VC7vJ5p4Dl5WE+JbBaKZfO6WKYAsuKLymYVMH+W''@;'; put 'put ''bJZ+TS4sl8hmKg9nQB4KW8hDoUgerovCUZkvbicPhYtxwreQh9rVSSysC8RlKbRBHmI0Dfi1AGs10Sw8OTqr4te6JgHCQ7DJOrclk7QXMOpvTgy0700CGb7Sk4tPp6UfEe0l1I4D3eRpGDOwpb3p2mxvBpDfFy62NzPF5qZDkUzU2iTs2L59VdSzbyE92DewfzI+1Ro/0Fy/c6Slr2tndjDcMpsy''@;'; put 'put ''NflivS3+YNTu7ss09/rr3YmWqK+xqVrw5cLh/oDMI/ywxinyUZDncTHixDq2b8LdTFkiWaTOU4CBTqdqAExuWhup4PTLeqig5H0AR6Ju/EwWT9laq1P9MzP597zHV22pN9orhZF2PJP70Idy0gOeZlMZ400w738RrUzPHM0uGdECd6GzUf0IUeJCapKGHdm9Ni/zcRbpRZTdyla5gP+LknGbStRw''@;'; put 'put ''3G8ABQNR4zHpKUbUeFjeL+jVxEa0ah6EaqmpuoFgYRaFVTYt3Tsef2zHq1kQniP4USpDMLA9xFmhf6mNKry1jertve0vMh95f++D+Q9+KA8jTuCH6Gv1DXy/NF+wpfEfYWyWd1PGa7CGsjlq6cDYHClygIKtSvHEAxaPNZh0ZpO8FZ+7997hb31l+NOfHn7mue9/H+tXX3xxVfojHbdubYy4YFyB''@;'; put 'put ''wtqoJ7BkjMEAVoYuoKGbUzybFpuXoaGMhd2YY7sox/xhf2Wtt7apvP5f+5/5Ut+vqsayjwjZCqerj5ilLvzs6pOdWSzvBdgnfgnm3MaOFd7ajs3gPulZfIf0FB6QjrXgT3a0SCsdbNzw2h68lzwBHAVg5GJyoBLjoUaWVQQN5hWCxWhScFAxp4nhLgzsP011KZq96SwndqccFOFpGJzHpll/ItsW''@;'; put 'put ''98+OaDvyLuzzB7zYle/Q3hnqT38wFW2JpW7P9Af1cX1NovmOeNZkziQ+HE7U6OMwy2Vrj6K7t7GJqYS9LJVSkoKo/2kP3s/WHhL9embLCmBRNmI8uJ5Wt0RBNUmzZQlvCztBbATlgH6WxuqzdaQWA9bbG3XwCScSYysOBHxsxSOz/nhbNgE7eScsNvzheNZsysbvaKaL1Qf7M7enYi3R1AfT/SH9''@;'; put 'put ''2hrqwc34NP6CwGPzmiT9EhkuIPy49EsWJaayZtfaHPoiEVR9jK2OCjzXqJpDYiUl+hjTieRkLtAOkh9V4qm+YXOCCGr8dHUH/pUqXx8F+20c1QBlAZdsqK9xVzltVrO2TFaC1BRdWXlmPEioltGFhsu96RhRc3LpWdKkXHrGPrCXgDvjl2ZjYv5ILnckL8amG8NV+UZvd1VYumm+r2++IcR19xrH''@;'; put 'put ''rurtvWrUKHZxQU9zdT0nzWsaqpuvPingu4WTcu5UFhYaYXGuPlGEo6VJGoinuZ48HtZiAkyTJ8zly5R8mq3B80Vu91pUK9j8PtDfqKrkt3vSWZYtt9H8rMU0x4dEJGNHLgcydMdJV7xyIQec+sUXu7rq617M3d5/olNMRWNt0ank7bkXN/ieHNQTbMPIgMH2QDzLNjiqwwTUFA3hlstYWracX+Sw''@;'; put 'put ''Wy1qCnalkSZhs3R4u5rEBy9G8Pi2h1555ZU+eD30R+qtwv25PbnrroM3fCl1WbHz6yd78Bx5gOVBtDIvSZAmCgIyM8flkpajwMKTW2Q6UAdKsSLdWvT7vqoqodJVJZxTPske+umqpL/Ln4C/YZTGX8Z/V9mIw1pUyeEwelLx28zia8jZt+PzofkK3TgjvUDOtrxdn4+T9z7RdzZLXq44I/O64NpL''@;'; put 'put ''gMPn4LRBf0dUfCJymorO91Axxtx2zG0bYFIBKzpMB1VpqP/W2L+Sazvc9dv0jWkcbtmdy+1uWa0nX1zdJedi/gR9CncA0OpEdxGXIJR9TBYlMGaKoLdYXc1MkJ+4rPTD6lL8WWsieo1mQaJr2d4qnTbAZasBxJee8mewrE1gWTeAOg3yWHMFzbYArr2yzlgP0GF2ukUPawKYdXq7NgsizSV1IZfV''@;'; put 'put ''5/NRwU1Bx6LRzLZVtBvquwLhlUm+FGwLVcUqLbU+R53daiuv9CSqNPqov8YXqzAHKRJYjcJEDrOahhSc+7Ps3CM8PfcIelrJxxjB/8z4lQ+1i9nGKqdJQ+TwAkF0rQwhZQYG0ucAUkSez+t22a0FvETFLExJjqJuIZ2qfQKzwSGFr3m2yCFZ53PSmS2ySNgemN+cu76yEdZK83T60EfRF5D+AsHn''@;'; put 'put ''5TSdLdocx85t2pxU22AefXGbNiuFNmZ0xzZt5gpzHUWfk9uQzW2+URjHiL69sY2cH8E9xGjBggbFfoHyIib19QgDF9LDOeg1ywZgkLpF0CsVf7ZW1pyYGWWptEDvCoVBGYFjYjVinqZJFKAhgCVhUyPn0mv7R/DtRCd5fqaE0GlCRZf0DvwR6XKkxL1FlqeQQa+L7kw6GNDwOjdgajUNmbkqAI/L''@;'; put 'put ''MeG0CvpHaCyKw1fAG9K8Q/UyOUYR8HTFpALpdwDW7SY0ycZGM3NoH4Q1p99uJ1pvE9vQiTt1sV5ieHMHmg1FjmzRD43RtBxjwN8M1GcFA6oGpGUFVvnDZgqUZehWrlCyeG1PuUZfu5k8q+Y/Pr9VjkY8y3nxRqpt0x/5zJ6SpA2KTyyHguF3SKGB9zN8wkV4ubnNcfTwNm1Oqm2ABm7cps1cYZyj''@;'; put 'put ''6Cq5zTp+r1Et7cNsroi8nrU7thoHVxa1OY5sm9us/QLGeY2tJyKvZ+1vS9r8O7T5I1uPPM7RtXs2rgdoqRneXmCx0lqazbtR01jUYxooNRSpGhUV8FFbUcNKrezQzQwyp2zd0GfGU1JQjXygqyQP5it+Tk54GRlRU16+g/+xkPaCu/O4dfV2OfnlD3lWigRwYDF9xlNaFJ7yiRJYsTg1g1Wrcr6P''@;'; put 'put ''lfCdzW2O49w2bU6qbeB8X9mmzUqhjRk9tE2bucJcR9Fzm/gXRrvQX+KvER0IA93DepobCUplEEgkmHVmnThze+R2+eeDYTyh/nb77WGk5vP+juXI+1Cc1gdFwrU1LofJoGc+Gpa2o7g9HHL4RFcUPvH7/XF/LGgNWlkGtprVGgAbL1uUL5fkkcOJFTJFckgaU+/HM6kDd+9vvzSWHp6LZ4A2209E''@;'; put 'put ''08Ozq/8W8uNT/vkY0Cg+cfNEyCfdAn+RmnfvWPrswYC361DLmR1AnfQ36TsrIfxwTT0QqfT9qfdNZo82SeM19Qx2LKbMzqlNOcsnSs57c5vj6P9u0+ak2gbO8gvbtJkrjHMU3b2ZVmW9l83Vqcz19MZxNuUaxBj3hHPQLuuwEuUoFK2B5Klw2CqclU4h4Knk5QhosihDw1/I0Oj555IMjVMsRaPt''@;'; put 'put ''pmdmBgdnpBdkmTPDcnGeBRpuEWNGUMKZGgICh1tREy6ZWxsv6uR0QavP4/dEvCwkUZK7Hcbp9YIFlXFT/+pMel8uty/VGmnrSe3J7hkI7wjN9e3o6BifbG+fFIk5OZ1ITCdTM1Xu/dn0fEuHrzvYMdoxkm4bHc+tSgBHOV75MsCxH2QvQX2Xy/S98TkH8P1E0fPn1faYP1Dc/unCc3Nv8fMHCuMf''@;'; put 'put ''nS96zrkL7Y1UOwMagufcXaDDRUHL60HHxOUagJ3HDUqCHetJDuvKDKB48jotDaOW6UjZCtIjHa/XLZsNRM0Gdo2WG00cFYbUtwO0lU7HYgile9JiZ3ssFUu2JGCCiNXn9fl9/goAuRrEktNTS6KrsgN7U2gL0VxzNeZKXpXjXH3XeuuuGdp7aXHodfCAw3t5T0nsS7plIkpDspP9chRsoKNjYGFs''@;'; put 'put ''PSbblc3ki2Ni0kx4NBqo7mlNdco4llgTWewzgy6I7kTc06DRauxYp02BWq8rqPWqXuPn4SuCdVeg4hT7QlCKnqMbqbpJgDXW6kBpfsvWore0IbUE0JFCew2tAgXJBMvMyAqJnq8Oa/5ERYQW0WWS+HCJItJzaddWkdrGuUR5iQGR049es6MkeNsY0jRiipNyTJTi/JBMCzfIuLrxOaWFe4ueP6+2''@;'; put 'put ''x/ylxe0fKIxz9BB7vkZZw21snJfk8T8gtx8FgBmLnh+vkNv/G3z8ho3/kjz+ffLzH8PH79j4cvujn1mvq2glfw/aQhTtEa2VzKtaC+oAaAM2q6UMD8l55w7VBS1syA5zizaapsFhslL8GCy5urq6aF0k4Av4ad6sKpkKiVABKiDpSdJs7s1eefxPi+KVw8NX9XSd6D/WFz58ynmwPtsVDB9yjlTM''@;'; put 'put ''xmOzbZnZeGIuQyxfOLDz9EDvtaPDJ3tmZuazqXC1r7rGG0l5Vl9I7mtv25NK7sm1700BvORYEOU1UzKvGVmH+yCD4y52Tn3ovVs+P47OFz1/XnkO8L2ueJynC8/Ne4qfP6A+R0cvl3lWHzpNykkd85O50SG5wLqGVitQ1wvS8Fir0R7WqUFGFy2kbURIp5aEqO20Ws08kI12iXWYXBAdzCByV1aD''@;'; put 'put ''cFKdbHpqoRYHPcEuKi5qwA7FMv0pLb/4jlrO8DXVJJ3NX1ivYuAK8S0nWG7NrAYJLPtQsNrlNOq0Gj3GWk4JhKwnMGzWXDweT7OnyW8JWjZoLsWKC9NbnFiOwmkUrQW4ZkNw+MbB6f6G4W5vaPjU4K7BhmFROtmCTal8djGL8WLW5ZReS+bxx/enht410uIfDhxIDZ0aaQ2MSm/mcXug/VDuu+2H''@;'; put 'put ''c4GBGuk5P5yRHFegZ71bpjGFJjc+pzjwsaLnz6vtMb+vuP0DhXGOTsvPZV86HWefMs7Hi+JyF8uZ+bPicsKfH5fjVrZIminaxwPKPmB/M6jIxk8U/ADHFL2+WI+WZfrZgkw/NlLcd2/BP2BQ9LbSvhcKct8wLfOuhrVpzgq6mhNVU/i5sI7TY4KdIFG4EZAxiBo/R5kOzS6XGFW1KCtNS6mqrqr2''@;'; put 'put ''CYLg8FDZolW8N9mgXHQhS+jWrJFwVm9LvMMu9BcqMGoaPbUN1h/cf/8dtbmEs8n0KVaN0eiubbDjHawmg+Z0TZMc0EgziLBFcQ/VSNyYKiQ8iUUNnJ7XY62+mSZBU6WE1xO+UInqouusACtNr1djnEowDdYdDocz4XTAZwU1JOQpAyO9sPL0NmqIXVA3EyhK+CI5ui23oyTp6/AJeX8/V5O/6C7d''@;'; put 'put ''UWPfxuwvmhDGtvyRQhaYai99gOnYAUXH/kOJri7nX1F6GFDo4ZNFfU+qfbEePbNN3+eVvgTrD67blo+wvkGl780leERzrb5GnoQ2g6xNBWjxFmSANo9zFtoI2ij2M2Dou5Gan3UIaLQavhkQ+ywaYtDTakstTZzWomU4mspCBZXC56jjnPE9Jxlzu93N7qYgjYAGvIrr3FuSp6UWwqPN4elDPRvi''@;'; put 'put ''0+fP53vWUHGQenT1S0VJW38b6+1dfWRDmLrgx0gU/BjHYNlbwBX0j7MF/ePYLNrKB4LL0Pe26avqLhy0UepdgAZovUsN9epVgowQMK3XVTNJKYLzi4jnFYceZXcVo0yYAQFYWX1xDaoRbF6a0S1QXFfrYLwqRjtl5M8WFcZMyuhbQ9G7Rnq2UCXDkDUMuByqYcUtNI50mOWz0RtfzohWvw/4bzkG''@;'; put 'put ''xRQ0Gh4Erwa0YA+tuUM6ELQ6zTKN0agHrVz9wBIQGJlaqYj2q00ZAPDhrXrQbLJKdmVMzOW1BvxeLw3xaDZuSFeSHCdrtLyaI3d9YZMGW9mmTLkWsCtsYuBvFKOhslbZucNGitPmwIJweMvw91jy3BY+Mf0WPrHN+qtekZWsTojx8WaFjz9b0lfOfaN8fETm4ytKX+nXtMZI7gv4U0GMTEdi7Tnq''@;'; put 'put ''lIqhPDosHojWEz1f5aSGOK2DR0NG6hzm9JoVg6oolQP16XQCdWsyNJLjjkty3DEep+6ueD7elU1XxCpi4Savp6babqVuryqTqiTRq1Rkvcj5J+bVYberxlsXMAhOp+WXbyvFbq+nurot6giH6OUnc2833w70+f8N+FXGaFr2BR5b+3iJv/BlaKNlNC3r/MfuUHIG1qbRD4EurTTOTiWmVY6zq2Xo''@;'; put 'put ''FGSqvPGBfGTp1qqUAd1CJb4fUuyrtosywVExUR0xkbsVUchk9NobMNcTLNbnoTeq2G1Ew3mwXLZfODJVWawoEAkLEjfUgRXiqDBvmUJnVRfkpOU/6pIWqNVWVVU5SZfmdVvy9fLi1FigULXqgHXWt+h5/MfVN5SFAg7SSs2/WvetAg/jN/mGWM4d2GLaQm6cUJIbN5rP0zwSGG8f4PQVIEcaAXcZ''@;'; put 'put ''TuNvyXYbPOcYrk8oz29jz1kdFpObcUVulpXQD4AEl3O3QptJpY0FPSq3eVRtI9dzPamOA+NfxWQcLpJxdJwwazOptLluYxs5j5Z0AY6YaQabyVhmAM2e0xO1sm1TkZgZme2FIjE+TZEka+cF0iX17tkjfuQjXV24LibG8JT0yqg4KkmokKuLWQ5jg1hrLON1VKjqleq5SqUYxM4ue8E8aLXKwBhP''@;'; put 'put ''5cfH81P4QLP0AnaGxBA+Ij3ZXOxjvl71MQOMflUCR9kWfFmxBan+cZfcF87mL9mZtShn83u5vfRrmkeotofn9xXNdbLgz9bDaWw91/MFu1N/DBX5lRMFv/Ix9OUSfUW2s84WbMdjh9BW/m9cjv6xJO620X4luPy0rDOngLE+C+dqAYu/XcwWqlD1pFCGaqDldmqeDTM2aq01DhtLrJMFsWs9vKay''@;'; put 'put ''QxphW1db/LIoXv2H/fccOHDPfhKXPDvlgI8ijHd/ev/S3fu7Vl8g2YlbJyfePaTYldwbLJ80idrRlDjhxHoddd0xrQE4vVavWTYZiE4nV1W6Ro18GUd1esVll0r5wIpItady2Ywv6WuNNNOUU6sv4PObYdEbHXbrfLxIyDZs4uhIlrZch+ypG7qh0fuukUGWhzn8Lq/nuqGCzJWOFWVk4jMbctXH''@;'; put 'put ''e3sm5BzN8W5xTBa+xWmaav66IoMPsrNNK/j7TAleyHmH9GxnZd/PmKKrAf4eZPibVvD0Cbk94O8Cw99Z5bmxaK6T6lyAv+/dcq79DH9nZfy1yXOxuji2zoyyzrtKcF/OZaTrnJPXqcRWY2siq6kT0RuiM9naUK/R6d006l5dCaKdplhrFP9jdGNcFfTFJRDsDtkg0uKtA6uxTYHVi/ei3sv45kDp''@;'; put 'put ''xbrJQd8tQqtbdJRjqyZfxEdTG6wWA5gBPtk9uU10FV+8epBE0kd2VGwVaB28PrF9TeHN86mSeGtO2xZ/iypDlpcqsrzUPJxZTWtLfZ1Gy2+MhWtG3KDxDm8ZEOd53RKiyeBo3Zdx0YD4RTttGRC/SK9tA+Kl/ZSAuC8censBcXyxBFz89KGRLQPjiaXAtlm5o7u0jSWnFazfPk23mD5PqvQJtH1s''@;'; put 'put ''G/p8XqVPrM8qtaRAn7SW1IMeFu1VcLTIaQaJYKKXZ414sEY95CaEaIrpFSxERU5RR5WaoMF0OULwAZDkbqweVjPtoEHc6bfRQwxuakwLAgk+sqkPixTQ4n5GWPSM2I1TW54Qtbtp+SuetW5xCjVltCY2tgnWfUU1sn6gAZr3HEfPia4mrOea7cSgj9oIMZRETiJIq9HeXIZpbY/hChBeAF5a2cNx''@;'; put 'put ''mkWdXN9TEkCJrvfRG8jpi3UCcG7ZXgmmFHXjKJAs0C2O4iwb2wnAoq6IbSIquDRD28kwHwdKcDeSXc/abmjwV2wRQBlMFmdyx6p0fjkni9UsMxzNKjj6zhIcpbnmP2C66rysq5KmEn1Wjv0mCrHfY+hjpboz882eLfhmjw2gorjxNwqxZSP6VkncmPVlcUfZ32u8AW0VuwY97PNb9QWLv+BbxuVL''@;'; put 'put ''SKm3nmb11n7UIbY5gCWVw8mC6MPciHJ7hXpHKnP7rhtF0MPvq/L6ffJdFrLXfJM3ZFN9Njk7eGbKrKsqeAyqDlytVGqTc6wuG1saFBeBv9rxyRPFddss736a7AC7h63VALaiHms5P6a3EinJ/tRfWUi/L3ZX+mhNTchDI9Qb/ZQbc/HXbUqyQ3ZLFqfm59cNTHfUOLA5Sb9gxjF8ofXgDKfa5VwB''@;'; put 'put ''PFWCC3I+PuV7e5g+xKPvFeUHnFTzA+D5rSV9ZR/486oPHPOLqKjvXCG34Cg6VYILrE6b4UuXojM9VDK+nANP8WVR1pkUXJP7zql9wT797jZ9H1D6Uj/cnUV9Txb66tEN2/R9Xp0X63sZnrL6t1vh7Cuor4Bm5dK6BeYrENavN3EzxKxA5VZ2vYluU3Wbvqiq7aHNpWxy/iweIc+/zZptJ63Z/lzX''@;'; put 'put ''sfTUzjR5/rbFxa3HKNRpEHQz0M7VSpWGMkY2yXu70zun0se6yPOLi7cpY4zjw+QCvW2RjdFI8wY01NFVmkJrRiY/V0hIVvbLzIv7x+pCjmxtbdYRqh1rIuN1dSG702kP1dbLc+xBdzB/SIDN8Zb5uZuznecV78a6N0OugYR1mzk3y6duY6PSYj6aUbyixRzG3Hyh8Ix7W1nVxfck39jZGQ7Dq9rn''@;'; put 'put ''q3b5/S4yLv8d7mzyu+SHcp7wNFpFNiSgdraCuMrPaKUkAyGtcgD5Ps+4GUe/mZQrR3wOjZJZrdztW+TcvaHD624pOHQfZJ4bm+LJle+dJV34DHkadt7L5s3aAIZ65s+yYjwEQpDVeBCMVtjNBfNqcTfhJpmS5wBRqFUQA1HNTb14lOrYdBH0agtzvUtwmEOmZj4RtLPfg2b6O+mzWCvKh/hsp/op''@;'; put 'put ''n0c3fpzlg/Oomq2qQgvYOESt1KutlkIeuZP3+pXEcJztPZshL1fc9GGWII7X5qRfrz28dj8qRz42gqt8i2oVX2EsfuNluF+QfZA2V433Ddm3yPyMBf54vcofUR/ObMMfX1b5I+pDTxXx1vW+x/GXL9r3OBaL+s4V+h7FQyX8Ue77QKHvUeq3ZPcTLtA4QnEM4s01WQd4c03RARJru6kvX/ZLszbf''@;'; put 'put ''fFOSYztvSkob2b+9UhjHDLxua//20wX/tnkcbZk71reFjrExzktQ3wnlflX0n8SAoxe/f/gfpDiOdqh9uPa30Ycjb0pqn2H8bXSB3Ak40/owoMvQpsu4XZsu45arhhYekbHIqjq9ZSF9gV6nXG2n1ymTW+l9yha3fJ8yhSP+FnqMfAqgUIGoLGA1QGSkUAME68An2TpqUfsjteVEXYqZFdaz++LZ''@;'; put 'put ''Yqwbyj44xv4WHvVV+SzsRpGNK3Juu8B/3WatrtJ14+vIpyqD8rrZ+r8K67cU1k9RSt0IvXPrcdyNP/2n1VH8r76+eLy3N/64/BHvk/FnGPAqhHYCbgiAG154/yrDcQHfDA14ek+/ZnfRPf3daBRm+w/5rv6WCqwtl6/R12OdCZcZdWXFV+9bzRbOaOSWBEMlrym+sT99kY7s9n25N097c8q9/bkt''@;'; put 'put ''+21xc39JXzA0MmNjoqje4D82Pza3a6c4Ko4M9Ce6E/m2zJa3+dv+jNv8Gzb97Stq25D5k2/6x8ODwcIf0hPqvf935/7U/wHAlv8zgPX/KQC9VyiN1vDf0dsmHtZinAh3YyfALnBv5hOfyLz+ddNjT5iVO53SoGQr7TjWLph18tFPfCL92c/2PvGY6evfYLLiZ8qdinE0KY7VuIlGB+LPiOnNuBoq''@;'; put 'put ''CjXcsgGTMoyNNA+8kPlvwkaj6ulgtmEsEm5uEix+sPkEq99MfVSFezqCYBBS0wI+8qSQbKejmUQAZCd80PjXi/KVi2O3LTv2TXK6XYdcR24ZVhL+Zz7kxcPSZ3kNXpLO1390T4Jdw9h7cijndHrqc32XdrJs/wMTuVpvtS03e0KW7zhOyvFlwAd1D4NCl2BcT74p9jJ6RyxTdEDV4YArewQP4VZX''@;'; put 'put ''6YvxoSTApU6pJdd/yWU1a0lii0tSSovC696qKPyN5W1rwoHO5TlBBuCEElt4gNG//PyC8nw99ik/f77wnL+6+PkD6nN09NLi5+vj94Fatf78bKH9sf1IgcE0uQxgQGMF+i81ea0YYFBiiqmQWLfDApthcplslxUDRrHL/rMIPoqNNlcEIsU8+4sNWQnra6Z2tbwXsL3/omgvTxdgYp6T5ShN+/kI''@;'; put 'put ''u5tCxYWk4J1WrqOg36/NwPfa0u+1q5PofwAPfnx5AAABAAAAAQAAtCcAwl8PPPUAHwPoAAAAANPBnYYAAAAA1L6m9f9W/u8EWAPFAAAACAACAAAAAAAAeNpjYGRgYD767zYDA0vH/7D/k1kiGIAiyIDRGgClhgavAAAAeNqNlE1oE1EUhc+7k5ULwT8UBSlqElubpK2hDaY0lBRbbUrSjnYRakWh''@;'; put 'put ''CxdaYrW6FtG6ExEXXfkDUvcuBbHuRMgmuNKK+EMUWlxkIS04nvuaqXXSgoHDNzO5b9675515poYz4M8MUQcoA9fcR788RFTOI+7sQEIeoBkf0W/G0EPFzQzSMoysAfJmCiks4oS56/2UJ0ibIvbKSbRLDw7LBFVASs6hW05zTAFJvbb1HMu6Ln0PmTM17HNKaJUvaJJHGJc51tbICdYVqSrvXyGP''@;'; put 'put ''BV7v4hw3MSaH0OcMsIZ1TpT/30De8hZruHaZRkzeY1TfGWpGWJ4hIvewXa7jmLmAYa55hWw3n9EpBe+3SSMjXeiQK3BlN9rITnHRxp7DMkkfshhCBRm89V7INgziHXLOFHL6XK7ZelfHmKv0cBExM8lxWf6fYG9JHJQ97G0A+0VYcwdHzFZcJOPmJXrp+4ids0hPuEYziz6zxJrnyNh1jSOKD/Q8''@;'; put 'put ''yfslJOnXqlcbyPlOqn/q3TphwSurf+QP6puzBS2+d0HJToxYqn/rpf7RZ+nAKevVBnLKpPbi/itUvDf0b5D8Sn2SS8yF711Qmgtl1vr7V+qf+qzUfnXOILV3nd+n5oj7Yvu9zT1VP3RNm1GzpvtdJ72qcL3qXRO5Qh7XPmwGmQPNoWZhjWcRNhHuvc6r/QVofWVva1xGMtTCeZlbzU4DmWXNUwOn''@;'; put 'put ''6xnzqfujHm1C/QZsDnUP1b/6t6B5DFIzzmxmrB4z82UyR3VTr5nDX3wGb9R/Z5ANntbnZG7hVFfPGyxTTwHpRcq5jBTPBHsumHlynpylvyVe81wKzSBhWhGhYjLnVW0+HI4t4eh/iZmB+webP/UMeNpNwl1IGgEAAGDzv1NPO/W68+66X+9ueueddxERETJEQiQkYkj0ENFDREQPQ0JkxAjpIXyI''@;'; put 'put ''iBgjImSEhIwYISN6kBgRwweJHiQiIiQiehgSMmTsZQ/j+wwGw/I/e4ZyD9KzbowbT4wPJoMJN1VNd2armTK/NU+bD8w1i9EyZ9mxPFqT1iXroy1p27Ed2s5s97aOPdWb6M32/gQgIAnkgBLQdlCOIceCY9vxzXHntDonnBvOlotzrbp2XXVXG2TANJgFD8BzsAl23QPuUfc7d9UDeqY8ZU+3L9VX''@;'; put 'put ''7WtDHLQCfYaOvUbvmLfgvfFpvhlfxffk5/0J/3v/vr8JW+EJeB4+gk/hl/5Yf7G/jjgRBBlC0sgHpITaUR+6iObRIrqPHqPn6HWACjwH/mAejMEGsQSWwRaxPHaJ3WAvuAGHcA4fwqfwGn6Ft/AOARA4MU1UiO/ED6JB3BJPxOvAJjlIxsgUmSHnyRUyT26Q25Sd8lEUJVHDVJxKUxUaphk6Qo/Q''@;'; put 'put ''CXqSLtMn9AV9RbfoX0yMOWXqTJN5ZjoswOIsxxbYXbbEnrA1DuI+cUdclbvkrrn74ErwY7AYPOcRPsTH+BSf4Rf5PF/k9/kG3xVAISDwgibEhbQwJywLa8Km0BRnxGUxJxbELbEkfhVrYv3NYWgttBXaC4fCjfBD+FWySz6JlzQpLqWlL1JXBuWALMnDclKekRfknFyQd+WSfC13IoFIKpKNVCNt''@;'; put 'put ''ZUyZVTaVPaWsnCoXSlNpKR0VUHFVVEfUxH9m1ZxaUc+iQJSJjkcz0Yw2oc1pWe1Ba+tGfVQf16f0WX1JX9XX9YZ+qz/pvweBv0tAvSoAAAABAAABPABYAAoAPwAEAAIAKAA5AIsAAACDARYAAwABeNqFks1OwkAUhc8UJIDGKDEuGhd9AflTIepSw0ZQIwo7EhAEIlAtxYTX8Cn0Tfx5Ad24du3a''@;'; put 'put ''hYfhtqDBkEk738y599y50wKI4QMBqGAEwCGfMStYXI3ZwDLqwgFk4AgHkcSD8AJMvAmHmPslHEZaxYQjMJXnuYhtVRFeQkndC69gTX0KryKqvoWfsG6EhJ+RNDaEXxA28sKviBrnY34PwDQqOICNGwx54jaaaMHlyR75pHnyFDuxUKNqMa6lY/rkIucus/rM7SGOAhrMc7STjY5E5X3HM+pNDKhU''@;'; put 'put ''GZViRlKPfVzgCGUck2Z5bE55zKth/alS4sphTFuf0ZqqOq9SiXTJ2WbMqPMT5jc4j/Lq1KrkU+pDXd/l3v93M/JzudpDguPul7Otfbu+a5yazbWX05esJlWXuwN+CS8mwdmr2dVdTmomZnY4a2/Sc5lqDVc63/VvqyB3l9OqxZHRWpYnS2GX7y3s+P9KFteMa2h/R+495zsWccsO2lQcxnR+AGii''@;'; put 'put ''gvcAAHjabZNXbBxVFIa/37F33TZO771Xx173xCkua8exYycucezESca7Y2fxehfGu3FsugQCHkDwwjPlCRC9CiR4QKJX0XsH0XmkB+/cCV4k7sN8/xmd858z994hC3edG2Ae/7NUm36QxQyyycGHn1zyyKeAQgLMpIhZzGYOc6fq57OAhSxiMUtYyjKWs4KVrGI1a1jLOtazgY1sYjNb2Mo2tlPM''@;'; put 'put ''DkooJUgZ5VRQSRXV1LCTXdSymz3sZR911NNAIyGaaGY/LRyglTYO0k4HhzhMJ11008MRejlKH/0c4zgDnOAkp7C4nau4mpu5gTt4n+u5lqf5mDu5jbt5nme5h0HC3EiEF7F5jhd4lZd4mVf4liHe4DVe516G+YWbeJs3eYvTfM+PXMcFRBlhlBhxbiHBRVyIwxgpkpxhnO84yyQTXMylXMJj3Mrl''@;'; put 'put ''XMYVXMkP/MTjytIMZStHPvn5i785J5SrPOVLKlChApqpIs3SbM3hV37TXM3TfC3QQi3id97RYi3RUi3Tcq3gc77QSq3Saq3RWq3Tem3QRm3iPu7XZm3RVm3TdhVrh0r4gz/5kq9UqqDKVK4KVapK1arRTu1SrXZrj/ZqH0+oTvVqUCNf841CvMtnfMCHfMSnvMcnalKz9qtFB9SqNh1Uuzp0SIfV''@;'; put 'put ''qS51q0dH1MsDPMgjPMpDPMw13KWjPMOTPKU+fla/jum4BnRCJ3VKlgYVVkS2hvx1o1bYScT9lqGvbtCxz9g+y4W/LjGciNsjfsvQ1xi20kkRg8apCivpD3kWtmF+KJJIWuGwHU/m2/9Kf8izsj2rkPGwXRQ2hxOjo5ZJLRzOCPwtnnvUY4vnEzUsbM2sHMkIfG1WOJW0fTGDNtMvZtBuXsZdFLZn''@;'; put 'put ''esQzPdpNetyFv8ObIWEY6Didig9bTmo0ZqWSgURm5Os0HRzToTOzg5PZodN0cAy6TNWYC38qHi0prQx6LPN1m6SkmabHmyZlmNPjROPDOan0M9Dzn8lSmZG/x9vBlGFBbzjqhFOjQzH7bMF4hu7L0BPT2tdvZpx0kd8/fdqT06ednjhYVuWyLFjp6x12rKlrNW7QaxzGXeT1RqK2Y49Fx/LGz6t0''@;'; put 'put ''XWmovtpjjccGj42+PmM04SL9NlhSEvRY5rHcY4XHSsNgU3Yo5STcoKKpIccqtmLJfMudxUj37qdlkTX92ek4YJ0f0CS63dOywPt9jDb7mtZ5Vvo0THIyGou4ybnW2NQeRWwnL2J76h+3ZbchAAAAeNpj8N7BcCIoYiMjY1/kBsadHAwcDMkFGxnYnTZJMjJogRibeTgYOSAsMTYwi8NpF7MDAyMD''@;'; put 'put ''J5DN6bSLAcpmZnDZqMLYERixwaEjYiNzistGNRBvF0cDAyOLQ0dySARISSQQbObjYOTR2sH4v3UDS+9GJgaXzawpbAwuLgD+HCVgAAAAAAFYmPZ3AAA='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=Metropolis-400.05446670d27f7666-woff; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''d09GRgABAAAAAFUkABMAAAAApQgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABqAAAABwAAAAcfNH55kdERUYAAAHEAAAATQAAAGIH1Qf8R1BPUwAAAhQAAAcXAAAOdj58fExHU1VCAAAJLAAAACAAAAAgRHZMdU9TLzIAAAlMAAAATQAAAGBoQKzzY21hcAAACZwAAAJsAAADnndDD7Fj''@;'; put 'put ''dnQgAAAMCAAAADAAAAA8EawBpGZwZ20AAAw4AAAGOgAADRZ2ZH12Z2FzcAAAEnQAAAAIAAAACAAAABBnbHlmAAASfAAAN4wAAHG4/7HGDGhlYWQAAEoIAAAANgAAADYLZYgSaGhlYQAASkAAAAAhAAAAJAd6BCBobXR4AABKZAAAAoYAAATaq1M+VWxvY2EAAEzsAAACcwAAAnpN7jLmbWF4cAAA''@;'; put 'put ''T2AAAAAgAAAAIAKEApFuYW1lAABPgAAAAXEAAAMQI+x4YXBvc3QAAFD0AAADoQAABiGXFj2KcHJlcAAAVJgAAACBAAAAjRlQAhB3ZWJmAABVHAAAAAYAAAAG9ndYmAAAAAEAAAAA1FG1agAAAADTwZ2GAAAAANS+pvV42g2MQQqEQBDEEkf0MLPof7ypL/DofXfV/z/AIgRC0TQCLR6cdFRkjVso''@;'; put 'put ''7HzTv1D4B7m4048DOlopNlv645SeXXLT51sXzSa+W3AF3AAAAHjajVcNbJbVFX7Oufe+39evgKWUH6EgIVgb0xRGmAiyaRhURyqSjikaZvbjnIPx12EzFuf4cWgWUheHDAlpEPkx2gCiYkXGuoYxxzYCygxhYFwHyBYm0+lCRHn3vOf9sC/QbuMJD4dz73vvPec8t+cWAqCAEZgKmVxXPwN5eHoQ''@;'; put 'put ''x3D8R6Bwc77dOA8Vc7/ROAeVc+fMncPZoD8ZTWck7PhdAQMwDFXmcRiJeteajkYLbFWJmhHxI+m9iF8MNl9AxWcQ1MXN5ICJWIlPEctgKI/BeTJIjqEUvXiyf8Qd8Zb4SHwcPfyJ3+9x5Pfdeju5d/b/J+Of97jCuz2O9HyeP8W7ehjZEnfGuxNc5j/Cv79L0N0ecTOzpBjOTFcxW9cRilrCYRTh''@;'; put 'put ''MYYI+DwRYRyRw3gijwlECXM7kZVqIgRL8RPOfJQIzPhK+l8mBK8QglcJxSHC403C4zgR8FciwkkiwrtEhLNEDu8TOZwnSli9T7laTBSkTMpQIuVSTq6QCvJgVrbAtUdTJSP5zfWE2LnTE6ud2NmJvZ04YDKRRx1RgtuIAhqIUszHg1whiSSySCKLJOBxPMn5q4kS/AJrOf9pbOL8LUQpthE5bCfy''@;'; put 'put ''eIHIYQeRx4tEDi8ReewkStBGlGAPUUA7UUAHUcBeooDfEILfEmLZifA2UYq/EGle1PKilhdveQmWl2B58ZYXb3nxMlAGMl9Xy9XkJEeBq9YyQ1WscS1rO4Y1HcfMTGBG5mMBFqIR38ci1nIplmE5HmEWHmX02xjRi6zkK6zgIVbuOCt2kpU6y5Oct5tVxn0rkvulD9s93CeNjLs31bWbumuOP+pG''@;'; put 'put ''rTbS3R34bORMgm6+PNvj3ThzUfG818fj5fHyy0fSWxevi9d1O/I3+0ZRaZoQ04Tiq4TD3YTHPUTALCKiIp7knEQNYmpQU4OilYiwlYis0mKVFqu0WKXF6qo4QTicIhxOEw6fEAEXiEj6Sl/WtZ/0I/eX/uSkomIVFRkiQ7i+ogZXEaXoS/QypYspXU3prqj0W4ms0r3FE2XiyZnSXVHpXRr3FpW3''@;'; put 'put ''qHIW1UWlpxpP1b2L6FnXSbTeNKvFCBPlOoszZ/p1pl8txpyoWIuRJ1rWTPxZRTvLQk5Gy3junvz0qmOEDazX3YxrFiNZzUjW4ClG8zQ24BlsZERbGMlW3sY2nradp9zL051gDU7zZBd4gn7cbSB3GcIVh5meFX2so5SbOsq5y820xOyb2YmORcPIncx/h6yQlfKErJEW2SjPyXbZKbulQ16XA3JY''@;'; put 'put ''jso7ckrOyAdyTi6o14KW6QCt1BFarbU6VifoLVqn9dqgM/VevU9n6wJt0od0mT6mzbpK1+p63aytukPbdI/u1f16UN/SY9qpp/U9/VA/dnCR6+XK3SA3zI1017vR7gY30U1yt7lpboa7x33d3e++5xrdD9zD7hH3U/czt9qtcxvcs26re8ntcu1un/uDe8MdcW+7E+7v7p/u3+4Trz7v+/gKP9gP''@;'; put 'put ''91W+xo/xN/ov+sl+qp/u7/Sz/Df9A36eX+R/6Jf4FX6lf8Kv8S1+o3/Ob/c7/W7f4V/3B/xhf9S/40/5M/4Df85fCD4UQlkYECrDiFAdasPYMCHcEupCfWgIM8O94b4wOywITeGhsCw8FprDqrA2rA+bQ2vYEdrCnrA37A8Hw1vhWOgMp8N74cPwcYQoinrxdizWbeQlxnUZXpUwmoxbzLO0y1/k''@;'; put 'put ''acY1xjcZP5iwDjV7uvEk42uVP1Ol2niU8ZSEsdB4k75GbjT/eOOJ5u80Pm+e64w3GFcZ540b3Gzy88aLu2d9Mxuj+a9gTDN+1ripi+WuNHaz5xnvM151JacZMPtKnm58rbb/L9aNl+SqvTvGl42fMV7Yxcxeu2Xvv3Oaz/ZuuSrDizNnvsTO1HSJ+avNn7XTrD5u9l2ZzI/qGr1o22iqiqw/zeqU''@;'; put 'put ''1LY5qWbS6qRRp/os2kV/MqfF7E2u6aJ6ixp7w+z9iV2saZqxVNup9rL+9Axp3g6a/SOr0Z9N5+dsfqqcTptjNyLV7SX+GrPPp7bNSVWd9ac36KaMZtKKZO0XzP5W6rf5di90qPk3mD9VWlXGnmScN09P9kfpfbHo7jD7sNnZleviXyXVifdcVqnsjlOKt7v9/+BLZyqusXcp+O6qZlaS16ln165h''@;'; put 'put ''F0xe2BE+x5dYDmNxI3tY0rn7sG9/gT096dx97Y1abp27H3+vmso+VE/0xx3scwPY6e7k7z4ziUrr5UPZ9b7GrjWfb7fh9nobx47ewvXWs/Pdbr3vK+x+r7FD/hIH8B2+6M5isb0q1+BfEvAUO/EQtFpPbeN5Ra6y380iSPxjU+ES3E9ewW5XikHcayQjGo0beOpJPOU0zODor027fzQ+amx3Bvsy''@;'; put 'put ''fMh4rvFm41RVObNL8SXu8wC+KznJS4kUpFR6S58rT/Qf6j6bKQAAAQAAAAoAHAAeAAFERkxUAAgABAAAAAD//wAAAAAAAHjaY2BmcmCcwMDKwMLUxRTBwMDgDaEZ4xhEGM2AfKAUHLAzIIFQ73A/BgcGBdU/zNL/jRkYmI8yqiswMEwGyTGxMq0HUgoMTADJZQpAAAAAeNq1k1lQjlEcxn//t30R''@;'; put 'put ''KhT19vZp00aiFEX2pci+lKzZsq/ZGusQQ0VSyJ4koxkTU1O2G+64NWOMvs+VW+4MHcdXTDPMuHJm3nPec86c55x5nt8fcKHrC0F0j1TqmTjnrlKsxyWMw42BlHCLOu7SSBPNtNAmHhIggyRMBkucJEmqpEumTJUcyZNCKZISI9V4Zbx3iTKPm63mE/OL5W4FWsFWqGWzoqxhVrp13+Yf+U0pfYfF''@;'; put 'put ''jR7aj2njmfhKfzHFJrGSKCmSJhmSJdmSKwWyQTZr7ZfGW619yGwx283PlmEFWEFWiFN7qJX2S1t9VC/Uc/VUtatW9Ug1q4eqSTWqBlWv6tQ1VatqVLWqUpWqQpWpM6pUneh805nVmfT9k6PcUeDId8TYB9r97D52L7ub3ej42vG54/CHkHfJXV79p+ZueDuT4I9bBKP7z/iHRtdJF1x1du544IkX''@;'; put 'put ''3vjgSy/86E0f+uJPAIH0oz8DCCJYZzxIpx6KSZhOJBwbg4kgkiiiiWEIscQRTwKJDGUYSQwnmRGMJIVURpFGOqMZQwaZjNXMZDGeCUxkEpOZwlSmMZ0ZZJPDTGaRy2zmMJd5zGcBC1nEYk1aHvkspYBlLGeFfv8OdrKbYg5xnNOUU0YF5zlHJVVUc5EaLnGFy9Rylevc1BT9ZPQ2DZqle5qmn20V''@;'; put 'put ''q7Ud0WzgbLc361mj+12c+O1W4V8cvEA9m1nZY2UtmyRGj1vYzjHsOCRc8xkpUboCIrijdx6gaZYEXQ/x3WeKnGHEso29bGUfezjAQV1L+znCUb11mFJOcZLXupp6sU68xFt82Ch+mn/PH5DNquh42mNgwAL8gdCZwZlpPQMD024mVgaG/yHM0v+NmXb//8J0jEnw/5f/fiA+AM9PDVh42q1WaXfT''@;'; put 'put ''RhSVvGUjG1loUUvHTJym0cikFIIBA0GK7UK6OFsrQWmlOEn3BbrRfV/wr3ly2nPoN35a7xvZJoGEnvbUH/TuzLszb5t5YzKUIGPdrwRCLN01hpaXKLd6zadTFs0E4bZorvuUKkR/9Rq9RqMhN6x8noyADE8utgzT8ELXIVORCLcdSimxKehenTLT11ozZr9XaVQoV/HzlC4EK9f9vMxbTV9QvY6p''@;'; put 'put ''hcASVGJUCgIRJ+xok2Yw1R4JmmP9HDPv1X0Bb5qRoP66H2JGsK6f0Tyj+dAKgyCwyLSDQJJR97eCwKG0EtgnU4jgWdar+5SVLuWkizgCMkOHMkrCL7EZZzdcwRr22Eo84C9IlQalZ/NQeqIpmjAQz2ULCHLZD+tWtBL4MsgHghZWfegsDq1t36Gsoh7PbhmpJFM5DKUrkXHpRpTa2CazAQOUnXWo''@;'; put 'put ''Rwl2dcBr3M0YG4J3oIUwYEq4qF3tVa2eAcOruLP5bu771N5a9Ce7mDZc8BB3KCpNGXFddL4Mi3NKwoKTHS9RHRktJiYGDlhOU1hlWPdD273okNIBtQb60yi2JfPBbN6hQRWnUhXajBYdGlIgCkGHvKu8HEC6AQ3yaAWjQYwcGsY2IzolAhlowC4NeaFohoKGkDSHRtTSmh9nNheDKRrckrcdGlVL''@;'; put 'put ''y/7SajJp5TE/pucPq9gY9tb9eHgYBYxcGrb5zOIku/Eh/gziQ+YkKpEu1P2Yk4do3Sbqy2Zn8xLLOthK9LwEV4FnAkRSg/81zO4t1QEFjA1jTCJbHhkXW6Zp6lqNKSM2UpU1n4alKyo0gMPXD8OhK0KY/3N01DSGDNdthvHhnE13bOs40jSO2MZshyZUbLKcRJ5ZHlFxmuVjKs6wfFzFWZZHVZxj''@;'; put 'put ''aam4h+UTKu5l+aSK+1g+o2Qn75QLkWEpimTe4Avi0Owu5WRXeTNR2ruU013lrUR5TBk0aP+H+J5CfMfgl0B8LPOIj+VxxMdSIj6WU4iPZQHxsZxGfCyfRnwsZxAfS6VEWR9TR8HsaCg8dsHTpcTVU3xWi4ocmxzcwhO4ADVxQBVlVJLcER/JsDj6uW5pzUk6MRtnzYmKj0bGAT67OzMPq08qcVr7''@;'; put 'put ''+xx4ZuVhI7id+xrneWPyD4N/ixdlKT5pTnBwp5AAeLy/w7gVUcmh06p4pOzQ/D9RcYIboJ9BTYzJgiiKGt985PJKs1mTNbQKH08EOivawbxpTowjpSW0qEkaAS2DrlnQNOrz7K1mUQpRbmK/s3spopjsRRnMgCko5KaxsOzvpERaWDup6fTRwOVG2oueLDVbVnGFvQfvY8jNLHk3Ul64KSntRZtQ''@;'; put 'put ''p7zIAg65kT24JoJbaO+yimJKWKgiPghtBfvtY0QmLTODLoEiZHGysg/tih05ooJ2At960irv20Ltz3XyIDCbnW7nQZaRovNdFfVqfVXW2ChXr9xNHwfTzrCx5hdFGU8ue9+eFOxXpwS5AkZXdr/uSfH2O9btSkk+2xd2eeJ1ShXyX4AHQ+6U9yIaRZGzWKURz69beDJFOSjGRXMcF/TSHu2KVd+j''@;'; put 'put ''Xdh37aNWXFZUsh9l0FV01m7CNz5fCOpAKgpapCJWeDpkPpudmvCxlLgsRdyzZNdF9B08IR3ivzjEtf/r3HIU3KLKEl1o1wnJB20fK+itJbuThypGZ+28bGeiHUk36BqCnkguOP5e4C6PFekU7vPzB8xfwXbm+BidBr6q6AzEEuetggSLKt7STqZeUHyEaQnwRdVCswJ4CcBk8LJqmXqmDqBnlplT''@;'; put 'put ''AVhhDoNV5jBYYw6DdbWDrncZ6BUgU6NX1Y6ZzPlAyVzAPJPRNeZpdJ15Gr3GPI1usE0P4HW2yeANtskgZJsMIuZUATaYw6DBHAabzGGwpf1ygba1X4ze1H4xekv7xeht7Rejd7RfjN7VfjF6T/vF6H3k+Fy3gB/oEV0E/DCBlwA/4qTr0QJGN/GMtjm3EsicjzXHbHM+weLz3V0/1SO94rME8orP''@;'; put 'put ''E8j029inTfgigUz4MoFM+Arccne/r/VI079JINO/TSDTv8PKNuH7BDLhhwQy4UdwL3T3+0mPNP3nBDL9lwQy/VesbBN+SyATfk8gE+6onb5MqvNn1bWpd4vSU/XbnXfY+RtlM7osAAAAAQAB//8AD3jatX0JeGPVeeg550q6kjftkmV50S7bsiTb2rxbtrxKtuyxx+PZPJ5hxuMZGAiTGQjLDEsI''@;'; put 'put ''JSSkSUNC2gRCCDxaaFkmwLBMFghfSiYLJC9tmrRZ2rQp9AXStElL+sDy+88590qyJc8M+b4HY8m+Out//n05QhVoaT2CPyvYkYC0yIxsyI1aUAx1o340gWxJy/BAX08iHmn1e5rqai16nUZBUEV7QOnUO0VzxOw2R2LuWCQmsncRfpWf0mf0nX4CT2Ly71Ib1iERieHP5l7G/f85NPzw8PDDDw+7''@;'; put 'put ''nM7h4eFDw87bHz7kch5yPvzww85Dh24fG3v48Jjju8IbKafXCf9uPeIaG/McgN/GnH3DrkM3dFnDs8ePP3b8+Gx41Rl2wj+ECJpf/x36GnmC7c2bdCGM0RJCqCaDCBGWFVgQrMKUQqHQKmq8ep1StAaMEcFt8cWi8UinxWxSuZf2mmKCw2G1NDVZyBM5w3cdVrPDYbY6EFpfR+P4MbxIHtS5UAVC''@;'; put 'put ''OgFen0Z0Xj+83ADz2lETuiHzZOfszmSzVkWQUiCYILxSiTWamkyNrloQRfVSVQVRq/UZBSZES6bsSR99wD5EavFwaT+p4a5kI0JNjQ31MI29zlZrhQUb9fn/xIYAFiOiW3Qn2E8iwn4iIvsR6Yf4v6LXaq8NDgfvgZ/j2uPR92tPSH9do33unug9+Kuv9j8F//W/2v80/Nf/KkAytH6WhMnbqBF5''@;'; put 'put ''URtqTwbbAi6nva7WajZUVqjFGkSUAGaSBjCQ2xBG+EMAEiuaatLrBQCwRwVoEfP5ExZrLIRj0QGcAPSwWEWf39yIzQge18BbPBaFByR8/Ej2pr0d03sv29+5syt71a72iZnL35c73NUbSWIymRq//EoxOazb3T+tX7PNZzu2x8X+/pq5/tGa39TtnMf2dv1PNUOtuZGRUDBmegsWokTh9f8mb5Jn''@;'; put 'put ''ACOMcDph1Iu+lXmyFk4oUImVFRirlHgVqZBao1IfQQoFWiaYYkw1gF5YrhKJIGiFKXvmST90CV+wC4KmrJ+4XIVF0SrC2UbK9CAE2tJuqHyvXbuSvvZ2h8NkQqi9t70nHnWEHaFmn6nJ1FhXazTodbCZGl+NaA4YOEgjnQBKUw124wh2Gygs3S6V2WSJoE2fD+DCZ1+YbG6ZDIXYK/7ocK51+Np4''@;'; put 'put ''orU13tWCZydb8h8F2MNEK14KZUMdM6HQTLh9Jojn1rbhu1OdkZFUtDOVOxicaQ/Tz6BFMJ6KdI7Qj2B/AmpZ/x05SZ5FDhQAPjOQ7A0HvU0N9XW1FbhCIA6MBJKmGI6XgVwtGSUQKYMMoFBbm9PZFmuLOgPO1jaXSrQElH6V20X3FE8U7ww+ssYTVpVoRbA1K9+lIeHzA2rBTklw99I1/Qe7pmcb''@;'; put 'put ''64OzncF0YPv2/v3tjUMdoffnPtcVn+jv8DVNnhzuGZzvF/fsD+/sTR10t0z4gpOBwGRgcNo5vjI+33Dl0EmyOxKIj9bHW5rjay9nr5u1Z8K9Y4DzwBfQg+RBVIOCmSdbAFEqKeth54sBCXSI/rkIf+IlSiHTu562eAlsxxDLsx7RJLp36u1Go10vtuEfkeOtRrvd2HqcBKDHwPoOnCBfRtVI9VS1''@;'; put 'put ''ErcHGMtKWNn2rOKjx46tNC9s377QvPCzW2796ULrzhc+cO25xQCdEOh3B/bLfUXoy8HjT3DAhVi/FRjh5sVz137ghZ2tCz+99ZafLbC+vfg6vES+CjsZTg4uTo0n/PVWUQ2cKd2PUTUc2iS0AuQnNyEiYCKcoiyWH6QwBSMso31zs+0hl0MpmgIGtuZ4QiXC/26Xzw9/J+KD2M9/o2dptcD/Pj87''@;'; put 'put ''YM6QoS3tQ/+i/E5UabGV/wbY7KJd/RYr24n761o1FhTVtc1WpVJVpVBU1gcDgWB9pUJRpVIprM211QoBq7UVFfl2CtWF2uHrqjXWiErbqDG5GONWVqt0Or1ep1NVK9WiKFS7TJpGrSpi1VRfeksG1xQ6SmpIFFUiX9KNYDrFAuA9ABILaAVYA0UTBZ5mfF2nEusC2E0laoxK1gipeTHzIvzDLS++''@;'; put 'put ''mH7pJTre9PqN6CW0H/DPmgQyR+My+gEReQwU04A8XAUxJ840V1lAytU7HcGjoTAVd0F342AXHasL/Qr34ihQbm3SzBB3oYC4eh0dzOg0O7uwkFvD0Um2n0mQu8/A/JVUg6BPgCNibMUUBypRhUcAVlUsZY9KErYqL13x+m/Wz+KHyOswrz5ZQwcFYYJP8gkpW8MzC7kHFsjr776GmMztBb5yLTkH''@;'; put 'put ''rLAJtSVbgKuyHXMOgkHYswXogPZ0TbrGWgvjmSCMAorNPJHEoiFAJkpMjTCT6oOTkx+cn4PXW+f79kWj+/r69sVi+/qq9nxxdfWBPXseWF394p6JyVvn5m6dmKCvHAZ1lBRAB1Ahe7IWjlIAeKU5h8dYi6f0RgY60Z+I6N1PX+d6ZDBLZrM9J9a2Ida/AzZVCfuxodakv6oStgPYQEiagZOxRqrE''@;'; put 'put ''LCEmj/RWj18h1gYGMSVmunqV6I9LzFCL4Xw63pkYah72du/yJZY+3XeoN7P4NF7K+YZ+OLAabe53dEWCH+rc2zd6Y+beNJ+/GeCph/lb0GCyz1YLc7kwkDSsAwtUuAOV4xWYXbEMCAqLAdm6rMJKpVVJT7kFNXs8To9XFG1w0pS5RDqpHArgmNUiCaTCCkUJ9N+/tTnuPtQ/sXPf/GR6fPfiUHyH''@;'; put 'put ''P7rnE0OrvZme/sW+K8eqhmKRUHSit29gAuOh7vhYZzh8fXghPjCnr9k+0r07wnGhGV4GAPYVwOWCydYq4Ek4rVLCHjAC/fUwgI+JXK1iqrKysrqyGujKoKNr9Tr9OKKnGqw7psf4ztwjFXhh9+pqNvf7Px/Cr+QGx//81/hg7j4Ooy6AUSPM04j6kt0mjBXaGoEo4NzTCF6RAoS8IJAlLuE3AqgR''@;'; put 'put ''Nbj0Rq9HBpAl0ikJY9FP6UmM5xHyZ9cHIzsvD6db9k7MjXdX4HtyZ8WRmcHV/sH3jVX1RLr3N48Fhudi9fhA+vVQ5MBwarULYNAHa4vA+TWgVsqtDXo4O38dUSpIWgVsRaEUFKsoL2ZFWJjMIRpBr2xsbWzxuqFzvdfrU4PehqTFUK5BiQXEDCeSBkC5iEFWJERKMXcdHRi4auz2W9I3T/ftawl4''@;'; put 'put ''JkLx3THHSr8n07xvfGipWrc4ih+DhQ4e6fvKvSt/caC1ud/tnbljm6YzkftIcMI/CtucO0DlDZxjFaOhpmS9AgiIURDlPZjp8KAFg/ZD1UrsjDnNwBSeyN2Fv5/70W6yku5du4vqG1GAQyvAwQ5w6EEjySGTigCHTYtFQJA4hRqAgOGMGKcIBOrrEQr0BLojHfWt9S0eFwxR16ahrKucxiHBx5An''@;'; put 'put ''QMo9rNKf/hrCmMkb7x9eSA1MDF3RP3DFUKZ3eGH4xJhnItwyHhja1T7uBpUpPuvzzcZBqapqX+we2Guu3dadmG8Lzid6Zy2Wvf3di+34E41xryveNBLxxRtI7nlHt9ff58TY2ef3djsY/m86e4cBjr1CAzYEgW0rgXCVZBXQX4C9CoIlUyQd5LOH3cLZ+7xedvYW6eg5HQ/gfkz/lPZvoJDg7NIS''@;'; put 'put ''wU+VnPogw4YUO/YOigHk3OZT57iQ+wg9dnb+sAcmQ/A6yAsr5eeUf7NF6rnxpuTGW1UVQlXWKotBxwQL5eeGIsFCyggZq/SO75alTe6A/BvYdEx24nWw6bQwmYj0QMb3I80ZjJ/D9z8ZCVC6T6CdOEcWAS9VT6kI6FDGmNdcjc0J4BC34dO4p/cXY88/P87OIoXOkRr8T4CJInIlmyj+UlMOFCSB''@;'; put 'put ''LEgsnAhUtusoB6e0T/9P4W/nYuznn9KfTMOcU2gnMcpzCjBnIohjSrNyCp+GOV/Jdd///PNjv+j9BZ3Tvv47/Bqcfy3yoEQyaqmqpGwPU7YtwMQ3FckQysCVWKGwKqZsNpvH5vbWevwquhBZDhb4dA0G261Ybj/XsyfiHGiOznkje/9oYH80sqdnRi+D95TS0+VoSjg7g5ET7dsjbbO9VbcUmc90''@;'; put 'put ''nW3rdwmjoCcPoix+JvNkBWjKBqeDqIXhJoOgUPf1EkDQNBhbVRs+0RR9YtqiT7nmu3bt4pM0V2qIAmSCinJoVQUGrfIgkhggMBa1WlgGwOjVU9LUQTC8FViziC61k+k9TtL0h0xCDYsAHKhaI6hXL9pZCYZHBxVCAlKubt1LFFWAYypxmXWf2UX/S9Ymkwgls8npiTE4qwGfr9Xr8fmqRHuJ8uSi''@;'; put 'put ''NlaRkAAjrINZl50yX5TUqk5mroABmuDagMQ+Rp488v4Xrz702OHoXCjUr26c75hcSh3r6Rw1VKf0Hk9jY7d36b49K4+v7vvC3oGDCUPPVSPNO9U4Hgtmw/2Rk4cfO/S+F48feGg5e2U81OwP758eOZEKeoaVC2etTe6WxeGFTy2uPrGy576leqfd61i7bErURnqiOzpiQxQfAS3JD0DeiKA5BJLN''@;'; put 'put ''GgxwSQN1ALkoQGugYlzATHtTq9UV6gqujteC1iAyU9tfiUl37tbRBRym/1bu/8K995In1rb9Kz6a+wzAfB+MfxzG14FW50L9yR6QODCDCjgCyGUlVackB5WIudZP57LXGfTOpjqX3VVr0dsMtjaHmindGwWPE0sKltko/7IP9yZ2tHd09A1Fl3pzz2N/9+Rk949/mdy2LflL8kRbtiM61tC4pyu+''@;'; put 'put ''ox3fNdDePvCT3Lnxrq7xHNNtqNz8KJMhoWSgzlZZQXEkLYsKywYXGjxg0sJHXWh5lMirCMUHjhMP7t//4NLYLR0x30pi8nQmc3oyseKLddwyVgXntvzggURnvCU0fVtm6oPZUEu8g+oyFG4vMH3OzCykPJiYo0ACU1WlyVBprjL7wLoE8MgoGcAJCfcCWL/vjWOPLC8/cuyNNxZuz2RuX/gseWLn''@;'; put 'put ''vQcP3rdzfOzUzMyNY2s/Z3ufgfn6YL5KFE62yRyb6m6KJRCbNcWaN7NoKrnHDVQ5o1ni33qn+fP4mtxH8edzRvwWWflF+t/T5AlJt5bH16CWpE8en3JhNqqs2sAHGqShIzN+zEZ1y+PO8EFzr/BB+XndD+flRLFkJ5hJSGgiRKFkBoNSgRhykWUY2UI1X8b+QcsxwqG5uUnp1BcJ9dLDi7nxXdjY''@;'; put 'put ''fvfEEjvAiU+FY97ruvkBtq/6voEvz/22vZsfYXd73N/Oj9Dd8FBhz7cwmPqTHkk9XgGdnO6X+su0aDMsMd0t/ETgldySzV2RzeJPU3LC3XTbub/BbXxcdB/z8RqpY6VgX3HTFIyrmWyW9qI2GcjFv2b0B1jETBmG0Uw5J8sCIJOVgV2HtEavAroXTBdYBaWyJz/Q1G1aDPdns4mDg1XJzq5A195J''@;'; put 'put ''/FquY+RYH9/n3vw+HckGjVpJmOTFzCMocM+t0WDgsj6ixxEN0ASI1b1ZvHc193McXcm9cwzWm/sQPpX7a8Cf5PtfZeOOwLgaGFdJdWG2aDoaJQ0JdEqk1Ovpor2AJxE90eR6s2nAubXPsf6Uhn5fWJdYZl0mvbwuDRhBbn0lnMC+LFpH69ns+jpdlBP/fG0bEdn7/6D8uA8xXG5M2kVCSkY15EfF''@;'; put 'put ''sCw3GxM/ms3mdtBj+T4Jw4jhte9T/ktx+Lf/P2x4znT2PbB//wP7Jk+n06cnOeJKLOfAg8vLDx2YyH5wKnPbNMdbpp9QnD0Ie6sCvgNWOKwCSFXA1CVTCCTAFmuqTYZqc41Z73OoaBDBmec9ZrfMlvUz2Dp2MpU6OXY+izULq6sL58gTXSuDgytdb+Oh7MhINveTYhiYaBwm2Ukd+0qiArNSINQ1''@;'; put 'put ''WjDZFEWeUbPZ3GJuDvv8lAGDELeK/mJipo71eMKfsG4SwuS3zd7pztnw8f4lGUC5V7e7r+i8qq4hDyNcf3U41TPmD+RhlfuXpvqlnmXPYqgYXEXwqoE1gfwEgaHAsim8ApqIxN4kcvd4nHq9kfIeumK3H2xuPYOcUvYVkINH5r+06/GzWQa6XM85BjZ82wlD7u23GfQ+SQEn+TX/i4TJlwFqIK9q''@;'; put 'put ''rQQkNsFF4KLO5yJ51YKavUEPBZdFtmqoFzREStgf9ycCOO97X0f4qpHIhHfxssyBWN/RoclrIu1th2ItI74dB686kbhquvLK/nDUmXBEE1ZDW6Y7vjsaCfe3hpyJpo5Ibd2u7V27o2ytQYDTJNMzuG8ob9JyZ45kCmA32LRuoBjT66T+9SyYtGmJlncAjnwK+puRM9koBRswLt6eGZlMHpMsjinz''@;'; put 'put ''kvYo8THsum0yG1/u61uOZydvm6+aumMH/mTuqqHVnp7VIfrbjjumOH3LOpGKzqVkNjhwTolpcs4DJgnnPJSXAe8gP8h9fwH+YRBplPPCzxkyA2N5EVKYGD3BWBWU9wOzoKEtJsrZ5oFbGHRKKkkjdkz/Ce5K7Pbu/OrZxbNf3fmr6a+9OA3D/Q1pYz/byOTas3ydIEfJ3Yy/AX/UqGBoOH7Kgmoy''@;'; put 'put ''mOObwWDQU7jCKmFIDRsdZJq4/+/+bhmLuf9h7ztzf4FtudfxIvz2OrbxsQ0w9sdgbDVqSNapBKDDPJOTvBAGFtySxoQj8+d+deCnP9+Xe3MO1+LP5J7C07mjuTfoWD0w1rgs+yk8C269vF8j79Yz6NmKE9y9AQpAD+gTRwnJHcAPrv12gPjTA2s/5vJ/2/rHcD/52SVamRFALPjZ9uajj75Jfta9''@;'; put 'put ''5uyGHuvvrJ/FT2zhcxVAv1Uu4GXucsWoA+ZryM8n+wOpakb9w3Q+VJjPCow/Bj8dMN2bPeTn3e8+QYeP4/vw0xy3zqgOjSQtwOGZlxRmph7jk5J354wKjRgjRrdfdP+o94Ghm25Ogiz69T/8A11zbv39ZG79GZjOwcbYwkdNhxABgIRsX/urTIqf6yBJYpF8D/paWd8q6DkBn5w0gEjmsyas7sGZ''@;'; put 'put ''63vIVw2f4DyuE3SI3xA9siM/+kHSZMOCohaEgh40+aZGpaBSKtLcyHRAY6WKUGMLbGyq0NsyaqxSoWUJHyXj0lOmHSUt1ljW0ySb8uJjXtpw1KgzU/9Wvb/e53JQz5bH6zZq4KiQxQxnVWTEWQveWgOogXK4EN9+Rca+Ep+/PLGUyO5OTrknA42HdlgO1kzN9s5PdhH9NQdy39jW1rE70zkTaDAO''@;'; put 'put ''Ltos/Z05b3dkxtwXCieQFJ8nEyDrDGANPXdWW0GUIC849BoAaXWZvJPKJnko6TatedA5Nzeiqt8GX6YEt4uMdgkDUYiZjEaEjC6j026DJYPs2uQZ9VOi0svu0GL9474rBwauTPUfaMxkGg/0e2ba2mY6O2fb2mY7iX70xmz21Gh39AA5l/u3aHfOB8Za795odG9v71KU42k74NzbgHPlbTHb1raY''@;'; put 'put ''5YK22H+dmpw8NR5d9kbrRnyRxQj8843Zo94Dsar06YmJU+lmT6TekdgXTyx1ORsj3lZ6ZnE4s0D+zPRC8ZlR2DEwMkOjGMoFdHdubsSQU2Su1w24fpHRLmGg0jMz+Nx6emZYQvECePRks24UoEeVkg/uFDutTnZy5Nza6IFo9+ipbPZGODhsXTu1+cwIPTPigTMzo3pq6QOPFwhThoigICv5Zdoy''@;'; put 'put ''qiI9zmIBbbfeYrfVUglu8DH3q4efVmGxZiddn0p0wnLxwaXakPMDXaPXTY5eM3ry1twu9Upm8lAF3qvekU546jo8bWOnpzOnxr545/Rl+DN70uk9HKdAFuPtwPssaHeyQotVSh1GKpLm2Sr1SKVSLoPGVsscHmhJgSXPK8tQqQNjQwVcZrX0w13JCo+bxSlF0c7ljJvyfuY05EioMr90882ZbdvG''@;'; put 'put ''E/FWr6Zeb3USZSo3gL+eGu9JOxOaKm8904O3kxaAH83R+HayqlFHVEqNmvmwJf4KDA1kjoqsUs1yWVQQiXAZMI0F/ppvR5khrJO2RqVtTZc05qUNx/irA1QnnqkBm2jyeb0eyl+xvtiXHt/gSgc8jJXgYcvQiXT/1R5n4872XYcAJUeP9fcfG92Mkspc5/Bqj6+pt8GxfWp7e2zw6vHxqwdi7bty''@;'; put 'put ''h0LbopFtodC2SHRbiJ/9NCCoAmjYTKNjBh5XYbQECjvzBtuKTHJARL3JbaI+CMrq4Dglf51e4nb4hl0dmYnuwGRbJmNdihN9ZE9P7lk8ODjrGXDnngW29nZrjNHEILx+kfw16Gha6gXI+/RrKfLoM7JHRVtTXcXc+cpN7nwRVIi9DQ1mU0ODyZfJkIONJvqrqXHf2jsw/vor61lpfDulOS3I5RpQ''@;'; put 'put ''QUlaWTSTIDBcVexXwUbtCh5CsFfVWS1GPZtVLAkiFDsBVPkVXBXUVlV5tbamzHiisJR3f6URB5QqTwOJrH23h+tmwJpYLLUSuZMOjQLoXWCmiY6vRtZP9Uam7WGq6DBRArBt/sm+p5YyGWzfj2tzb/xy750AzjbcyM+RHs9nYFzZ96Er8X1MAZSAW/G2QgToyY3+9Kyjjrk+OB1ZKBErl9WiSlAq''@;'; put 'put ''9RkFjTQX2DWQOjykTVTQhKhUtuIWpgv0v1BXSh90wW7kcuuNbqPbpAFuUYReqg2/RMycOOCVPLk9nElFB7L8JWOaifTsNOv29hahXabonSinWsK9kc6+At5TnvzhZzjacxAYmfWkpNSulzFf2r+V40sJYUibL9tzy05029UXIynzJZCUch4oisuYcdjPJn+J7aL+EsuF/SVcMRi/cXLyxvFOqhd0''@;'; put 'put ''cu1AUgvSpyYmTqdTXUuJ+L4EVw+QpM9tB31OX16fo3JaBWIQCL2gWFEgGXGxPqcvVdM2NjRdfLRLGOiS9Dn5OP4gfS73W3LmQDl9jupQ20GH0pfVoQo7sxUpM5kNIo2pPvpNqtHmhqaLj3YJA11Qh9JfTHZdQIdSrs3g6oISdSDXWar3zsPLYYBTFbr+GZ7EwYGkZ6JWwJLuS3USDhizTHgFxZh/''@;'; put 'put ''aCrfa4sOsOmzehO3vQ3xiDlPms9cPt6zJwLs+G/6U7CJ3M9p0AajIOjnL8I6fagjGTLDQi1gbCNS8NbZNruffMjrCXD3E0/+iLM0ATnTzSr65AyCRkJl0HeOh/y7dkQGXZHgcvbwTHh/q2d6ItRXF+1KjISumKtq9iaG2rx1blO1fSgxOt9k7+lo9oAmadA7ukNjO6i+B2vcTu4GfS+cbLNgFZP5''@;'; put 'put ''RLiNikayRAMpAAewJPdzTZTpcEYnVeK8NDsvppfSzUAw0XBePIG3t8YT49u2ZW6+2WnV12vMznQPTqf++I9TubP13ioNlTnAnwC5Gb8VaEKbzG+BYUoCf7N5YJU/oso8krIHC0ZB2Z5bdirwW7Pb5GZhlCLNn0pzHpjUE4Gy2S6Z6QJyvgMcFpgunsy9xJgunoT92IF4a4lSzumSvUCy7qs3MG+F''@;'; put 'put ''kbut7Nv/6pHtP54AzWweP0b1EwziDgkO6F/q/9Jf2P/lnr31Y0Mfu3X28fE7PzoOIy7jB+jP2jv4vtzBgp9OhLFZDmGFqMAKKt+oFwXGFkhRgMVgMFDEc/pFt9EfsSYiohE/8bl7d37zxZ2funvn11559VWsXnv55bXc7+m4jetTxAXj6qmuWKkGvIYhAbmloSle76drtzO81iOdweSW3KoUTQax''@;'; put 'put ''wHZRg8VjXkOdu86lbfyn+Wf+ctubdVOJp/XJalNdkoi5Ofz42kvJbsz3EoeXV2HOLXxk+gv7yOK4I/e3+BO5V3E0d6QX3zbemzs9zsYNrO/Ge8nzwHUBRjamAOgwnnCxDElosCgxAoxm9BaqQilCuB+DbI5RRZ3mqltriNnKg64ipU4Raxa9wVgs6F2cVvX3WrDX5/Nia2+f6vPNI7GPdbYlgp13''@;'; put 'put ''xVPN6pimrq3lE6FEdU0i9PHWoE0Tg1muXD+LHtnC30a1tyv7+qQER+rf3o2X2dqbk14185PpMYK14/FCOvEyBdUMrQYgoilgBbHu54lKCcpdEo2kAQPKm10qeIcTCfX1WvmKLb39qun8To5rbMHWj4cSNdWJ0Cda2uo0MXVzKn5XZzDR1vmx2Eizen0dDeBWfDN+VC/i6vW13FtIcwbh53JvsQwZ''@;'; put 'put ''KuPm1negrxK9rOuz1VGFxJaRc+KMpETXZ/o2T0wFrTDyeSmXJLjXFCN6OXdkbRT/Wraxz+K3yTSqQ06KKY0NdTarxWTUVStJFY/twawLUtkHqH91LOeSlyBwTz8tPqDHCLIerGyPxQoizYx/OBfK9h3s7j7Ylw3OOqNtA4OhaO7D2d7erKtZOZiqnj4+OHh8umqoX+lvinRocldWdkZOXWnEdxiv''@;'; put 'put ''TPH8IET6QS+vR6lkEo6TJpwhkea1i3hSiQkwX5GwMBIzHWnmmSiyiBIn0npUT3MDwR6garHX7IwlWLZvsSsHjpCmKZL+tf87NDCQODg4em1td/WORH/2W99Kp32ec6k7Ro71SRHKO1Lniv3YFtSdjJsw0uC0GhaGKSc7rMIE1EbQZFcqWJkJz4+0mI0GuaREV0mLSlh5j1lOQIYfRuD4s4+/9tpr''@;'; put 'put ''c/Dz+O+o5xtPpmZTJ07ACz5M3d/c/iMLeA85w3K6OpnH1U+TnAF5WRBkWSlQQOGZMlld1BlbbJR1Fv2+207z5O3Gx6R3smA3GurrDfR3/g742oai+If4RZ0LB1RIJ+AA+o7kA57D15A7L8V/THOzBnE89y1yZ+JS/cdW0f3czB/3kO8ZbuK8zb/+Kl6HM9BSWxAhpijcRMXvB6ngYiEAFgLyMSmA''@;'; put 'put ''JfWql2pbNBZUM3qkp+vgYG7gmgHc0rGzu3tX51oT+fO1XTxG/FP0l3gEgNaYtBdxBULZxUxR8nW8CHqXNTZazI2N5p82WiwNDRaLZFsOrifR/9AMbnQt25vOagI8NtIsQjXlx2kurx1g4IBgV1xNM8uAS68WGOl+OswsKJmsCWDWTVu14VLahmxGj8dDpTQFHc/id+XVI5YaC8IqHvnf/q5WW1hn''@;'; put 'put ''bAANx2Q01eic0VqFGPQ2eIK6qlarWa81VuqzVJjAuUfh3H/Gzr1NpOfehr4r5Z6l8T8y/uRBPcmEq9ZapSA8XEkQXStDSM6wQNrsR5KI87jtNrMxj5eomGVJWZ7UvaqSFWPgMLhT4mPNZfLlCnwtd12ZjDm2BxaDE27QuWCtNCcxhf4EPYrUZwh+8lHGcMu0OYrrt2hzQm6DRfTUFm1W822q0We2''@;'; put 'put ''aLMnP9dh9Fe8Ddnc5hv5cSrRDza24flWwnlGCwY0lkzpKXukcFcjDExIDcegVqxogDeqlkA1lUJjSq4oMavWoDNAZ63EnyqBWWI5ASdGc7JAIQDrKiAn4uR+v3s3vos05Iw/5Rk5ND0rnbsV35y7lefQJFnOUxy9k6yPx/w+haiqEwArbFrA3xoML2k7IP8kx32afgIM62p4QYqrZJepJYOAmUu2''@;'; put 'put ''Joi6/bBqe94ICdI+CCtuutRObugU2tBJOHWxXsnA5g407ZMcKtOPW3iVPm8rkJ4RDLt6kI9aLDOHzeRXJj4uITxZ+sBQjUJs3EybtTs+uaNcwlc4oXDhjSTbrTl0766SDDDAJZYvxXC7WcL/2xku4SKc3NzmKHp2izYn5DaA/7ds0WZPfpzD6HrepoDb61Ry3MfmauPrWf9YuXGwo6jNUeBvm9qs''@;'; put 'put ''/zuMs87W08bXs/5kSRsaNFaw9fBxDq8/snE9QEc0MPNtlnfRQCsRNmoYS2pMky40RSqGVgtvDdp6VjZqhm7VIG8qCr4PZiVF9LLfA4gqIoLQxy/z5LnRUTl97lv4fD6FDnencdvan/JEul+m/xNgwHKDGC/pkHjJ/SVwYvkuDE6d0tk+VsJvNrc5ihNbtDkht4GzfXWLNqv5NtXoS1u02ZOf6zB6''@;'; put 'put ''ZRPfwmgOfRJ/m4AphVRPqWn+N2iQfqAOf8KasOKRO2J3fDj2YfovimfYG/sjhuR6hN+yuh43CmJRMogtWEECrQ31tiqVUqHBSJlPe6YfCUUfYWU+77lsr7Id8pnPtczVQ9MiLBlVmYiqg+cfSv4gC4+DqkoDqluPc/EhKMOpAW4T9LT5jH4jqxEqlBiI7kTBowTiHlmsmDtHEU/RwZYIeTGy/4F9''@;'; put 'put ''XZcHIws7QxHgLt2Xt8Gva7/xOPAV44vAZPDu02mPI3fP+CKxnR5ZfuiAx9Wz0nF6FLgL/S339/t9+P448Jjcv2Q/OBXZ78sdiCN2/iy3huFal4SPT5fg7OY2R9G/btHmhNwG8PGJLdrsyY9zGP3FZl7DdXY2V58010sbx9mUdxVizF+pwMoVFZaijfnCYhCbWotJa9VZ9T6nTuSZIJGibDVvPltt''@;'; put 'put ''9pWSbLXrebraTd+Us9UoLWyHuXXkZdRCfV8VYEAwFYrmq63KuecsvIOXVDx12uh1epwBNwsP5n3QoryEWL5OLF8QRUMA21muUuwylsq8mKIpzKmEt9c12d09mSU10flQaD56pJtnM4/TLOZxZ8IRS43G19b5ufK8je8BHEdAcSAodajccwHge0/R8/NyeywuF7f/Sv55dar4+Zn8+Id3Fj0X7Pn2''@;'; put 'put ''lTcjxgfgufBnoH+2oQhKoiPJlQaAnaseNBwzrlB3YVWFBpRmUaWkVRsVKlKxitRIJapVK9UaIldt2DI1lVUCleUS+UWjwSBC0WR0sLc7GAl2todhgoABqM3r8WoB5HIweUOeflGKB4+ybIwxI1rxI+d9kB/xgPPQSY/z5Mi+oxvSP0aXrZ7L+zdFoXN3TrbRpJD0EI9HD3bFhxazRVkhiY6ORCE8''@;'; put 'put ''nTvSMtLsM/eF2uM89yHJch/iWJGsbw87HQqlIgqmiJg3RRRpM1bJOlkQTGkVnNbVLEZ7lWxi22icVrUMChALADAvpz3PzUKsk0qkdcuX1otqZeGNvfCpi3VLtpX0oIYQOlSmoyofI4ujuJmrZ9QZoHiPalkNpsocPlKiliWPDZRL/nAttmtLbKluzfQ1wyX5IK4Wwc1tLJ7rQGlogtPWVajMc0pb''@;'; put 'put ''Xyh6fl5uj8Wjxe3P5Mc5fBl7vv4KvN3DxnmVj/9h3j4D0LMXPT9q4u3/D7z9Xzb+q3z8v+TP/5m+sfF5+8MPoXy9XIJ8B7SnINqdNOqYq7qhnt1qYTIaKvBE5sk6GuqU/fn6Ddm39qSJpr+BNFwtfgxWbWNjY7CxzefxeWlNgizkZPlm9VGlgd2FkbCKm4Mn+B8Xkycm0yeH+i5PHRxp2XeDfU/c''@;'; put 'put ''PtXiOGgft820BWZjnbNtwW0RUvWF5bmbJ1LXZiben9w2OxcfaG42NDXZ2wYcaz9q35GILnSGF2KJxQ5a28bin5R3beO8a7EA93EGxzkO3xvLPafn91jR8/NyeyxeW9z+K/nn1buLn5/Jj3/4fZwHptC1pIb4mI/Qji7j93DQ5A/mhkIKESsVyoMqOXhvo6E9F0Iq5rBaLbRTKhWLQEPKZdZhZlfS''@;'; put 'put ''wqxDu64OhJ3sYFRTa704mQCMxOJiNmyUrPTXadnd9+Qythdk83w8/VShek3Ix16tYMW25PU4E2hkfl+dzVoJupd6gx4HHwlFHxXrceV6le1QRo+zbanHFcf1Lq7H2crpcRccgulxTqezxdnsNfgNG/S4YjWOanEKq5ErcRaK5X4B5IjLO3nj+OxIw8KwywecaGascSGVu6nlnY44sKJ/X4z43wkn''@;'; put 'put ''8Cf3RiZOp0Ouac9yBBhQ2J19J459LuBB3+laSgx35/7eCfjF40wUT3dy/D3M8W7jc4q/f1r0/LzcHosHitufyY9zWMJfHgOh4+yVxvlMUbyb58INJvukgHf5XMOi2POlhJ31f3jYWVgtm0eY38cZaR+wv12oyFcTyftzjkh2WrFdxPWbO/P6zZFMcd/L8n4ejaTDlvZ9Lq8DabZzvutYnxdczB9t''@;'; put 'put ''o/CrxSpBpNFTrCRCWsQqRA3Zw8yeYJceZWSN0oimrFarzWrz6PV6s1Mt1gWU3AuX8PNaPK6sdCYqieByd3T01Y/k6/JsziZ7o/7f7v/CJxq6O5vrP8tK9Bw2e6MRj7JCPSnPd54MAn0HUAJfzomunqpo9ZhqaCIJhzSCWgSyVAdA+1DJZF62jbLQxnTRcS48RJ4DtMAaRTURV+U7GGxg4qvV3Gdp''@;'; put 'put ''ZaHcjXlwwdIOAE6t1AuVdjK9t1ne4wSUe+jb2toSbXGfxwj6abOzQqyXjzGeiG2ln5r18tn6itKRySA9ZYu+NCV59Qp+4L+SU5PpsVtbq8Y25SbTfGWGBZ8u5ChL/oCPMvvLJ9lf/1Fix/H8XMofxiT+8GdFfU/IfbEavbBF3/NSX4LVXOfhNY+sr1/qe0sJXdFc3B+Rc9BmnLXRCl6hGmmgzXNC''@;'; put 'put ''NW0EbSTfEFDszUjO3z0GPKsOPvn7swYF0ajlsLyPik+MBCVagYPS5cuNbRkaEeKXuGjzyTqtW7ZmkoJ2YZLDmvd9Xur472VoikYGu93eam/x04wFn1sKU7lLUnzlC3PQ5iyVY0Mb0lQefTQzlPt9ca7K5NqzRfm+/6szmVz78gbumvcbRvJ+wyPoWLmzBv32zrx+e2QBlfM54gr04y36yrqxAG2+''@;'; put 'put ''zusqgU/RWtJ6NJ4c0YHKoMf0jg+5AoQSn7iERFHynlORpM0wZQmI06iUw40mN63G0lMSlGtY3TKdWSXWWlTUOsNpykGJri73glzhyuinA+jL28DrUmmM9iDLg6a3xd2SNLpdICNrMFGqQGMWQdmg5RJOWi6PVKDIqRQrNBZasIb4OWfkGwtYdpdXbsoAgA+W60EzkXU+n6/NF6h1GXxet5tZTxs3''@;'; put 'put ''pNqcVM0iN6KcWn06v0W1WrshwToENnBL9kHJwNXWSbs2GXEh2Rps3TYr/i7LuC7je1aX8T1vtovUkl3EanuZjG2VZOzLZfyoNF+aytg0l7Enpb65t2hdMO8LeKMlBskPCe0FK6pBISAIMakPNhG1WGulDiN6Vw6a4EwhUEkDMYJasaqR9fAaGj5QLleoiFLJw/nLPJwvcYZwuS4VWKXS846otJvp''@;'; put 'put ''vc70niehjMIRDlPXd3gg3J+IaUPaUKDF7ayvMxupC7y2SjYQKA5wm8D6HpO1saPe7nO4NcY6u/E/Lilve4ev0RZttzb77UaDfdulJnGDLUuLn/SM3/C4wJH1e0tiBz+ENlWM33B798hnkJQHM4/eBJ5hpFkTatC4jDy/Rr5Wh6dXcTnt0VucrIRLFsygm8qM4U1KGyZdljMDJlebq8jDkjbF9ChY''@;'; put 'put ''xTx6kcX8nSiZ7DebiEJwYn4NUeGUJVNDmydglhziaAQL3KKtLpuWbZQXZKVlxfKS9kk5ADN0aU0Wa8bLF1fICVizwzrr2zUi/p+1d6SFAp3QuP1DhTgL8FfNJj8ry+NG9xBlPt9aX5JvnclkaPIYjLcX6O4WkLsuoC9Gd/iH3GcBz/WMHrPS80+z56y+m+kZYUnP0JbQOIAENwh/BG1mpDYWdJa3''@;'; put 'put ''OSu34XXi5+RxYPy7mE6Ai3QCOs4IazMjtfmTjW14fQjpBxypppnFVZUVGjBCBTWRK+Y3FZ9Xo2pzvvhcjFEkSZhFM+nP9c7PZz/ykXQamwOZAJ7J/Xg8M/5bqf6khuXEO5INlRWiikp8tVSRr5OKS83ssjosgkUkDYpr5jJTU5k5fFlr7ptY78/48XLum60FnekhBsMOCT7/WQJD7gP5nuQDobra''@;'; put 'put ''o7wvnMtD7Lw6JD5JeHt4riB6uT3A6oWiuU7kY1tqdG6Luc7n/S3qE6goxhTJx5iOSHoh2SQLxhntcp/JkctQuVgYrkHnS2Lvm/w5uOZabtOAGSh8H87UgBpozkP+Zgs1yV9toaEl/HJuHTNUG4z1FhPL++UKgq0QY5dZIQ2zF9SpCFcR1l7e98X9+7+4D3DAODt5OpM+neZKwuKf7Vv+4v702j+T''@;'; put 'put ''pulbM5nrUkjypwhAGcAlOlAX2pbMWrFaRV3gTJsBVq9UK1aqNESlkv0VlWKFUOSx6Ox0uRDq7OpMxKKuDld7azOM5TB4fB5vNSx6o+O7wMMLwt+xiZkjrgYIbXKFldt7/eg4S40fvc7rOjkiKQO5q4tS5PH1G2uv+nrHedL8WE/vKFULirPm8/VYkn5wkJ1rTMLdr5XgBM+Hpue6wP2d81JfwNGD''@;'; put 'put ''DHdjEo6+yNvn3qL501J7+rypaK4T8lyAux8uO9cVDHcXOO7W87lYnT1bZ1xa530leM/zoek6d/B1HkNSDmOS1egP0/yKWLSpUaEU7TTrpk4HaoeW5VfUb5lfIYrMNW7JewEuJb/iop3K5ldcpNeW+RWl/aT8Cm+wmeZXGFh+BffJl0+w8F3KbQQkHFmZ0JZLtvjoZRe8o+CPdsYF9+asi8oDF761''@;'; put 'put ''gJ9dcD3JctwHUS7Z1IFFVWdTo6AUN6bHKC+QHiPBxvaHHJ/tDzo+2x94fLaS4/MEmi8tPQZfNJkfv3hgqmyeTHifb+sU/+yCsiRbRulvukDSf4FWT8i0CnR+eAtaPS/TKlbH8ufN7qhwoheSOlrhjqzVIBmq6CWgUu4fDEAzy69m0V5yivo5pUQtjZowZY4QvB/EuR3LR9VGuyiQcNMl9Um2bGpO''@;'; put 'put ''7xkg+FBJLwW9JFsP63YiKqRoGqGRmrLsGs2yJ0XdA/R2DbxgLHMY9dX0yo3QJoin8ldwsHqKJKunCKNXkrYWrBZazUSjDpoI0eQjk8q0TAlKhfK2CkzrVzVXgzADMNP6UUFQLKl4FWlJdDFY6KPWkJsu1inZWr69FGEs6iZQWFEbMIzCrMrDCtCiLpMtQou4tPTDykgAt5XicHehHsRb79WVRhLF''@;'; put 'put ''8WhxkUjCovbyGCK7E4XhakLC1WtKcJXWsPya6a2LXG8lvSW6Lc+piORzKo6gz5Xq0czPf2fez39kujj34xv5nI1K9FpJPgbry+L5LKYAbW4tlxMCetmjZfsGCnEKXLMXSfe5zLP7XDyoN9llBt5UDScL/BQLaemGLPl+eBZCKBhI0MPjqXV7PPy+LJZBsclps+n6F/Kpydvmtea8Z8Ny2Qeke2DI''@;'; put 'put ''E+zWF12D5MxwNljufV/xpTBSzSmsdQ5sIC96mzsIajRgPKoxFry46LZG6amy8NRUpu3mZnnvdr1UkERrebZyaDukNtTHnC/6KePDvvBYFx+GSoAKDy3YbGb1UBtd1BsLiQq2MZnjDuniuqJMkaHcWjWxucIob44yXKd35TB66OH5Q3ixBI95PRHl3bsZLoroJ0U5QyfknCF4/pGSvjwWdF6OBWFx''@;'; put 'put ''Pyrquyefb3QY3VaCx+wOG4br/ZIO+FTJ+LyGh+L6EtcBr0dFfffIfcHO/tst+p6R+lJf5+eK+p7I91WjU1v0PS/Pi9XDDG9ZbTi13bXU50GrDGjdFfN5sCImsp8aFXZGVFpUU+76N5VbKKr4/tLmMm+pHmCGnL/E+2ys9D6bB8cO98xku8n5O3fsKD9Gvs6MwEkQclKqMpPGSERE92B3dqbn8Bg5''@;'; put 'put ''v2PHndIY0/ggeQ6scqnKooLQOos0mFPUz1FaF1CNqrxCvspC2jSzlx6ZagybYnV1MVO4YaqFTDfCnxYL/NHE5llAn2O+HR+b54I1B5srOHaXVGtINSLTuFqwsxqRLjZqkD4HDW1ViQVgHYv54mbhkipFir/j4sa+vkAAfmrd7lr6Q6b534G+Nv6g1s1rH+YxJX096mErCNfAZrQUY9JKVuHBKrUA''@;'; put 'put ''pouMGwv0kxle/eaxKKRqEek7GYqc6Df2NVn6847zx5gXyii5zNm5DZF+/EHyFdj5MJs3AbIAa5hvzoTxhBoLrE4NznKV3ey0KF/8QoQZpq1aQJQrJeRA9IsTClld+boEXN1k01uqTbWqkG7WXPQ7GTQYtTUOj/gB+Z2fxyB+jdW4iKiOrUqrBIycoFb3SaMhXxtjFd1eqdgFD/GKl5s/bjjNaG9b''@;'; put 'put ''7q31p9YfRzXIw0aw1ZSpuPPkxxI3fjnB49yfWltv973L/aTMZ5rnkTfIPBKlcHQLHvk9mUeiFHquiL8W+h4Fm/lifY/i0aK+e/J9D+PZEh7J+57J9z0MfI7Z3uvbabymONbz7jrXYd5dl3SYdpCxHma3T0htvv5ujsf13s1JbXg8YTU/TjU6tEU84Sv5eEL1NCqbU5pCH99CPnwvnyuQWpHuvEdv''@;'; put 'put ''Eg2OXPz7IL6fC+PIuNxH6LmEPgJ5Nyf3GcdfRufIA4AznU8BukxknrQUf5GKbdMXqfDKx11Pcywyyg58Lqifp19v0VRLv96C3E6/38Ls4N9vQX10+KvoJfIgQEELUEnxOkaSytcxwjrwbWwdDajn6YYaIi+lml1+w77rhy3GuKGUTWDsb9dZT63HwG5c27gi65YLfGuLtdaXrhvfSR7U+fm62fq/''@;'; put 'put ''Ces35NdPUUreCAYs/BKexA+8t9qwB8bHOzrGxjq+xN86xjn+TAJejaL9gBtgc+nc8PpNhuN6TC9JE+l3LCkOFH3H0iDKwGxv8vyuDi1W1vCvQFJjVRWuqFRVFH9tkrHaIFRWCst6jU5UFH/bUuwiHdk3J/HeIu0tSN+51F22X5lvXSrpC4pffGoqmZS/fWlqcWrH3Gwyk0yPjbQPtg90xct+E5Pp''@;'; put 'put ''D/gmJsemvz1FbR3x9/wtTXii6I/cWfk7m+5/z1/eVPaLnApf6ETvXYziCuCdSqR6CrTr9sAgtgLsfA+k7r479c43dE8/q5fuvIxivdxOYO38CasYhFYPPDD67NO6b7zCZMUb0r3TYTSTnKq3EwW9vaIS028uUIAAJAphRYNJBcaVtL4lX9BUhSsrZZcNs21DbYHWFr3BCzar3uitBvu2cI+WHwxa''@;'; put 'put ''ahvB2wApVNTSjED6fVFO5g7G3+bXUmc+vGJdyhLltkN1B2+bkOqYpj/kwoncGZWA53IvOj4y18euqk4eH0/Vae2O1PCRXlbEtDiWqm8ym1LZy/j3/OAWUoNPAB9UPQVKXTvjevym/xOsWJkqOqDqCMCVnXonEdbW6A8q3LvG7wxRP2MzVitJe5l7zN7jHRzvHNjyCg4pv4TZq7hdipWczeedBGis''@;'; put 'put ''mT0vxJr58/P55+LNxc/PyM/R4euKnxfGT6EPFT2/M9/+yBXyvSnz5AaAAY19qJ9pcRsxwKDEHJMhUbDFfJthcgO3zYoBI9lm/10EH8lO21EEIslEu6c0t46tmfoF+F5wJbq/aC9fycOk+mD+bhP0eXZ3k4wLEb17XrquiX6+vh0+V5Z+rlybQf8P2z+c0wABAAAAAQAA35vmhl8PPPUAHwPoAAAA''@;'; put 'put ''ANPBnYYAAAAA1L6m9f9R/u0EYQPFAAAACAACAAAAAAAAeNpjYGRgYD767yYDA8vE/4H/W1gSGYAiyIDREAClIAahAAAAeNp1lD9MU1EUxr9zXgeig8HBQSsaDVQtf6WBKmhtJKLSpi3PoDFaw8Bk0AgJLkYS48RAQuKiAyQdDHEzcXFwctDBRCYHnQhLbYiSyATR53cuLWJb2nz5te/d++453/3e''@;'; put 'put ''lXXcBj+Spo5RjfBlHoNaQETH0O6F0aHzOIkSBmUM56l2eY4+zeGiNCAtk4jjN67IQrCmr9EnozioaXTpVZzQ+9R1xMl+vcE5ecTstxvPuRzTa88hU7KJQ94DtOovHNVXyOsix26Qk8joKPWd/z8jg1X+DnONZ7ilUQx4I8h7SkV4/ykyjjMcwzp1Cm1awog9M3QGzfoWLbqA/TqNs3IPOda8SXZJ''@;'; put 'put ''CT2aDf7IJST0HE7rY/jahE6yR310yh3OfcTnZpHGMhJYDj7oEQxhBSlvGim7rg/deN/myBN6uIY2meC8LO93s7ckjmuEveXQpMoxM4jKAYyT7fKOvjZi2K15l56wRnnBWvagVd4g4eoaRwQ/MCBxdz1Gv7a8qqMQSPPPvNshrAafzD/yJ1X09uJUxbtq6WEMO5p/O2X+0We9gGvOqzryPpLWi/+/''@;'; put 'put ''zDf6N0SWqBXW1L/tXbUsF8as8/efzD/z2Wj92prVtN5t/QotR9wX61fnuKfmh9W0Gy1rtt9l0qtvrPcLvYuSAXnZ+nAZZA4sh5aFbTIv0o1m89b6q6H5yt4qDDUgFgpzXebWslNDe+eYpxpOlTNWoe2PebQL7R1wObQ9NP/K74LlsZq2VzLL7JkKzPxXMkUlqPdI6j5eQ5CrPLOaNZ6W15R1wCtu''@;'; put 'put ''nTfYoF4CmkTcm0CcZ8KgO1OWyCWygJs6y7OC51JoDh3SixaqTReDosuHx7nc1zpfH/5f7RzwpAAAeNpNwl9IGnEAAGAz/5Sep6Xped6dt/M8r7vTzp+/02MM2UNEiMTwoceIIRE9RA8hETFihEhERA8REj6EjBESMYaIRIyIiOFDhMQIkREyhgzpQSSkh73sYXyfRqNZ/qegORnABta0qvZE+6B9''@;'; put 'put ''HnQOXg62dTadoEvq0rqSrqZH9Ev6gv6PYcawYmgbk8acMW88M9aN7aH4cHa4bEJMKdO2qWpqmaF53pwxfzbXzV2ERqaQXeTGwlnSlqrlAbWhUTSN7qMVtGU1WAlr3Dpv/WA9tMVtdyPYSGnkZTQ52rdH7Qv2L/amvevIOJpj3FjVOeM8dnZdIdeBq+xqYTYsgWWwC6zuJtySe8594u7hUXwV38QL''@;'; put 'put ''eAX/5UE8K54Nz52n5ekRQwROSEScyJIpMk1myByZJ0vkBXlLPlIh6i2VotJUhspRearizXnz3pL3wnvrfaRpepXepHfoQ7pIn9Hnr94xDBNiXjNTTIqZY5aYDPOR6fm0PtSH+zgf8MV9R+x7dpldZ7PsPltge36t3+Gn/cAf9+9we9wxd8p942pck3vingPFQDlwGagHfvIy/5W/5u/4Fv/Ev4w3''@;'; put 'put ''xjvjfUEWtoQDoSRUhCvhXvgt9EVEfCMuiGvilrgnHomnYlWsiT/EttiTJqUr6V56lDpSP4gEsaAQjIYcoc6EZgKZOJIn5Vl5UV6Xs/KhXJTL8mUYC9fCzXA7/AKGAA4koIIEmAWLYBV8AjegHaEi05HtyDW0QQDn4ArcgLswD0uwAr/DBuzAvoIo2H+AklQ2lT2loXSjeFSICjE6BmPTsXLsOlZX''@;'; put 'put ''URVXORWocTWhzqpF9Uw9V2tq4y9MM8mgAAABAAABPABgAAoAQAAEAAIAKAA5AIsAAACDAbUAAwABeNqNks1OwlAQhc9t0YAa48K4YGG6MO6EggQiLjVsFDQSwS0IApFaLcXErU/i1vcwxp8X0I2P4DN4ejtUJY0xN+V+d86Zmd4pAJbwCBMqkQKwyydkhWWeQjawiBNhE2WcCSewhjvhGaTxIDzL''@;'; put 'put ''+IdwEnllCKeQVgXheRRUTXgBDXUr/IQV9Sb8DFt9Cr8gaawKv2LOWA/53UTasLEDF5e4gYcBeujDh4V7PnnYyKFIalO16Otrz4hc5+4wa8TcC2RQRZd5nq7kYqhdR4z1MOapRSVHl63XNo6xhyZqpLi8janMOI815Wnw5DE+0O9j/ej2nw4NRk/pcsnBTQ9Yo8s9yO1Qa5EPqQfaPvfOH7MI5ufz''@;'; put 'put ''VEaW6/pXZVfXdaKqGWouz5OckWT1qPqMjjn5iSfLfdLT0Tf97pmNvWWTsTb/b4HDj2ZSlQlVtGpxFbVWYu8ctvi7iUL09Us4p6+rq3oy3UpUsY4rvuOAikfP8AvcvXhzAAAAeNptk1dsHFUUhr/fsXfdNk7vvVfHXvfEKS5rx7FjJy5x7MRJxrtjZ/F6F8a7cWy6BAIeQPDCM+UJEL0KJHhAolfR''@;'; put 'put ''ewfReaQH79wJXiTuw3z/GZ3znzP33iELd50bYB7/s1SbfpDFDLLJwYefXPLIp4BCAsykiFnMZg5zp+rns4CFLGIxS1jKMpazgpWsYjVrWMs61rOBjWxiM1vYyja2U8wOSiglSBnlVFBJFdXUsJNd1LKbPexlH3XU00AjIZpoZj8tHKCVNg7STgeHOEwnXXTTwxF6OUof/RzjOAOc4CSnsLidq7ia''@;'; put 'put ''m7mBO3if67mWp/mYO7mNu3meZ7mHQcLcSIQXsXmOF3iVl3iZV/iWId7gNV7nXob5hZt4mzd5i9N8z49cxwVEGWGUGHFuIcFFXIjDGCmSnGGc7zjLJBNczKVcwmPcyuVcxhVcyQ/8xOPK0gxlK0c++fmLvzknlKs85UsqUKECmqkizdJszeFXftNczdN8LdBCLeJ33tFiLdFSLdNyreBzvtBKrdJq''@;'; put 'put ''rdFardN6bdBGbeI+7tdmbdFWbdN2FWuHSviDP/mSr1SqoMpUrgpVqkrVqtFO7VKtdmuP9mofT6hO9WpQI1/zjUK8y2d8wId8xKe8xydqUrP2q0UH1Ko2HVS7OnRIh9WpLnWrR0fUywM8yCM8ykM8zDXcpaM8w5M8pT5+Vr+O6bgGdEIndUqWBhVWRLaG/HWjVthJxP2Woa9u0LHP2D7Lhb8uMZyI''@;'; put 'put ''2yN+y9DXGLbSSRGDxqkKK+kPeRa2YX4okkha4bAdT+bb/0p/yLOyPauQ8bBdFDaHE6OjlkktHM4I/C2ee9Rji+cTNSxszawcyQh8bVY4lbR9MYM20y9m0G5exl0Utmd6xDM92k163IW/w5shYRjoOJ2KD1tOajRmpZKBRGbk6zQdHNOhM7ODk9mh03RwDLpM1ZgLfyoeLSmtDHos83WbpKSZpseb''@;'; put 'put ''JmWY0+NE48M5qfQz0POfyVKZkb/H28GUYUFvOOqEU6NDMftswXiG7svQE9Pa129mnHSR3z992pPTp52eOFhW5bIsWOnrHXasqWs1btBrHMZd5PVGorZjj0XH8sbPq3Rdaai+2mONxwaPjb4+YzThIv02WFIS9FjmsdxjhcdKw2BTdijlJNygoqkhxyq2Ysl8y53FSPfup2WRNf3Z6ThgnR/QJLrd''@;'; put 'put ''07LA+32MNvua1nlW+jRMcjIai7jJudbY1B5FbCcvYnvqH7dltyEAAAB42mPw3sFwIihiIyNjX+QGxp0cDBwMyQUbGdidNkkyMmiBGJt5OBg5ICwxNjCLw2kXswMDIwMnkM3ptIsBymZmcNmowtgRGLHBoSNiI3OKy0Y1EG8XRwMDI4tDR3JIBEhJJBBs5uNg5NHawfi/dQNL70YmBpfNrClsDC4u''@;'; put 'put ''AP4cJWAAAAAAAViY9nYAAA=='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=Metropolis-500.4efd580a43b4e116-woff; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''d09GRgABAAAAAFXwABMAAAAAoOAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABqAAAABwAAAAcfKTbLEdERUYAAAHEAAAATQAAAGIH1Qf8R1BPUwAAAhQAAAcfAAAOdj+hfXRHU1VCAAAJNAAAACAAAAAgRHZMdU9TLzIAAAlUAAAATgAAAGBoqa3+Y21hcAAACaQAAAJsAAADnndDD7Fj''@;'; put 'put ''dnQgAAAMEAAAADAAAAA8Ed8By2ZwZ20AAAxAAAAGOgAADRZ2ZH12Z2FzcAAAEnwAAAAIAAAACAAAABBnbHlmAAAShAAAODkAAG08sNGyNWhlYWQAAErAAAAANgAAADYLa4YHaGhlYQAASvgAAAAhAAAAJAeEBCBobXR4AABLHAAAAosAAATasng5PmxvY2EAAE2oAAACbwAAAnpyVVfabWF4cAAA''@;'; put 'put ''UBgAAAAgAAAAIAKRAh5uYW1lAABQOAAAAYUAAANkL+aGSnBvc3QAAFHAAAADoQAABiGXFj2KcHJlcAAAVWQAAACBAAAAjRlQAhB3ZWJmAABV6AAAAAYAAAAG9G1YmAAAAAEAAAAA1CSYugAAAADTwZ2GAAAAANS+pOt42g2MQQqEQBDEEkf0MLPof7ypL/DofXfV/z/AIgRC0TQCLR6cdFRkjVso''@;'; put 'put ''7HzTv1D4B7m4048DOlopNlv645SeXXLT51sXzSa+W3AF3AAAAHjajVcLbFVVFl37fO5r3wMspXyEUgkhUAhWhjCiCKNxmlpIRxmsBA0YNY4fkM9UZKbGyGcUzUjqxJGKZELQMtpgBUTFqkheCP6IIfgJEiwEK2L9ASoaI8p13X0fcEv7ZuxKV3f3Offcs/de5+3zIADSGIopkMqqmloUwNGDMITl''@;'; put 'put ''H4GBnfOXunkomXtj3RyUzp0zdw5ng/5oNJ4RseVzafRDGYarx2IYamxLPBos0FUlaEDAh6TnQj4xUH0eJachqAobyB4TsQK/IJSBMNwG58kAaUMGPbizI2E2bA73hvuR5yf8Ju/I7m69n2BAp/8/C/+dd4WOvCNteUf2htk8I83hwXBrhLOf4O/OCF12ivDzsIFZMhjCTA9ntkYQBhWExQWEw1jC''@;'; put 'put ''4/dEgPFEChcTBZhAFDK3E1mpRYRgKe7nzAcIz4yvoP9FQvASIXiZMHiXcHifcNhPeHxCBPiUCPAZEeAokcI3RAoniEJW7xeuFhJpKZIiFEqxFJNLpIQ8kJVNc+0xVMkwPjOKEN13vGOjO7a6Y6c79qgkClBFFKKaSGMakcF83MUVokgCjSTQSDwexkrObyQK8RhWc/4T+C/nP01ksJFIYRNRgOeI''@;'; put 'put ''FDYTBXieSOEFogBbiEK0EoXYRqSRJdLYTqSxg0jjdULwJiGanQAHiAw+JuK8GM2L0bw4zYvXvHjNi9O8OM2Lk/7Sn/k6V84lRznyXLWCGRrOGlewtmNZ0/HMzARmZD4W4K+ow51YyFouxTL8A/cxCw8w+o2M6HlW8iVW8F1Wbj8r9ikrdZQ7OaEnq4jvLYnOl7lXz+EbUse4e1JfW6m7hvD7btSq''@;'; put 'put ''I9H5yDvyJXGsmyeP5T0bX+b+7gu/Dg+ED4UPnT2SO5FNYdPp/75IjHyuzxiUqiZENWFwDWFxLeFwHeExkwioiJWcE6lBVA1G1WDQQgTYQARaadFKi1ZatNKidTU4RFgcJiw6CIufCY+TRCC9pTfr2kf6kPtKX3JUUdGKigySQVzfYDTOITLoTfRQpYsq3ajSbU7pVxBJpTuNJ0jEk1Kl25zSz2jc''@;'; put 'put ''aVROo0ppVKeUHms8VvcrRH5dR9E61azJRRgp12qcKdWvVf2aXMyRik0u8kjLJhF/UtFWs5CSMXIx3x59elUxwmms17WMayYjaWQkq/A4o3kCT6IJ6xjR04xkA09jK3eb5S53cHeHWIMO7uwkd9CHb+vPtwziimWqZ4Ne2lGKw6W0i9nfLqUlal/KTtQWlJHbmf/tslxWyCOyStbIOlkvm2SLbJXt''@;'; put 'put ''8pbskg9knxyUw/KVfCs/yknjTNoUmX6m1Aw15abCjDMTzGWmytSYaWaGud7cbGabBWaRuccsMw+aBvOoWW3WmqdMi9lsWs02s8PsNLvNHtNm2k2HOWKOm58sbGB72GI7wJbZYXaUHWMvtBPt5bbaXmlr7XX2BnuLvcPW2b/be+199p/2X7bR/sc+aZvtBvuCfcVm7Rv2Hfue3WsP2EP2C3vM/mB/''@;'; put 'put ''dsYVuF6uxA10Q9xwN9qNdRe5P7hKN8VNddPdTHeTu83Ncwvd3W6JW+5WuEfcKrfGrXPr3Sa3xW11291bbpf7wO1zB91h95X71v3oTnrn077I9/Olfqgv9xV+nJ/gL/NVvsZP8zP89f5mP9sv8Iv8PX6Zf9A3+Ef9ar/WP+Vb/Gbf6rf5HX6n3+33+Dbf7jv8EX/c/xQgCIIePB31ZiN5iXKlcrVy''@;'; put 'put ''Y8RYrNysnmXKKxM8VblCeZLy3yI2g9WuVa5SHmH4mSrlyhXKkyNGvfKz5tVTtlyiPEn97con1DNKuUl5pHJG+c92NvkZ5frumVU/E2O1+rswpitvVl58hmVWHLva85TfVF7ZleMMqN2Va5VHmOz/Y2o3matsd4ypyi3K9WeY2ctq9v43x/nMdssjE1yf2HMnO1HTJeovV3/SrtQcPqb2rETm4yg6''@;'; put 'put ''2TkV+bP8jWpPjm2dE2smrk4cdazPnJ3zR3Oa1X7WLjql3pzGPlT7/cjO1TTOWKztWHtJf1zZOG/vqb1Ya/SR6vxrnT9V39Wuc/RExLrt5K9Q+0SughtPqzrpj0/QpIRm4ook7efUvjX263w9F2aw+pvUHyttZMKuUs6oJ599XO27Nbqr1N6jdnLl6nAL+XzlZKWSb5ycO93Z38CdZxqcp/dS8N5V''@;'; put 'put ''zqxEt1PHrj2aXTC6YQf4HW9iKYzDRexhUefuxb49iT096ty99Y5arJ27D/vOFPahGqIvrmKf68dON53ffWYQpdrLB7PrzWLXms+72xC9vY1nR1/D9day8/1Je9/V7H6vskO+hl24lTe6o6jXW+UqfCcej7MTD0KL9tRW7lfkHP1uFkDCWIVLcAt5Obtdht91yhjbKN69L+SuL+cur0QtR99W7e5V''@;'; put 'put ''PqisZwa7E6yVwF3K65U/1qz1VTuDP/I9t+F2SUmBFEpaMtJTenXd0a99l590AAABAAAACgAcAB4AAURGTFQACAAEAAAAAP//AAAAAAAAeNpjYGZyZ/zCwMrAwtTFFMHAwOANoRnjGEQYzYB8BjYGOGBnQAKh3uF+DA4MCqp/mKX/GzMwMJ9k1FFgYJgMkmNiZVoPpBQYmADwbQq1AAB42rWTWVCO''@;'; put 'put ''URzGf/+3fREqFPX29mnTRqIURfalyL6UrNmyr9ka6xBDRVLIniSjGRNTU7Yb7rg1Y4y+z5Vb7gwdx1dMM8y4cmbec95zzpznnHme3x9woesLQXSPVOqZOOeuUqzHJYzDjYGUcIs67tJIE8200CYeEiCDJEwGS5wkSaqkS6ZMlRzJk0IpkhIj1XhlvHeJMo+breYT84vlbgVawVaoZbOirGFWunXf''@;'; put 'put ''5h/5TSl9h8WNHtqPaeOZ+Ep/McUmsZIoKZImGZIl2ZIrBbJBNmvtl8ZbrX3IbDHbzc+WYQVYQVaIU3uolfZLW31UL9Rz9VS1q1b1SDWrh6pJNaoGVa/q1DVVq2pUtapSlapClakzqlSd6HzTmdWZ9P2To9xR4Mh3xNgH2v3sPnYvu5vd6Pja8bnj8IeQd8ldXv2n5m54O5Pgj1sEo/vP+IdG10kX''@;'; put 'put ''XHV27njgiRfe+OBLL/zoTR/64k8AgfSjPwMIIlhnPEinHopJmE4kHBuDiSCSKKKJYQixxBFPAokMZRhJDCeZEYwkhVRGkUY6oxlDBpmM1cxkMZ4JTGQSk5nCVKYxnRlkk8NMZpHLbOYwl3nMZwELWcRiTVoe+SylgGUsZ4V+/w52sptiDnGc05RTRgXnOUclVVRzkRoucYXL1HKV69zUFP1k9DYN''@;'; put 'put ''mqV7mqafbRWrtR3RbOBstzfrWaP7XZz47VbhXxy8QD2bWdljZS2bJEaPW9jOMew4JFzzGSlRugIiuKN3HqBplgRdD/HdZ4qcYcSyjb1sZR97OMBBXUv7OcJRvXWYUk5xkte6mnqxTrzEW3zYKH6af88fkM2q6HjaY2DAApKBMIwhjGk9AwPTbiZWBob/IczS/42Zdv//wnSJSfD/l/9+ID4A2s8N''@;'; put 'put ''snjarVZpd9NGFJW8ZSMbWWhRS8dMnKbRyKQUggEDQYrtQro4WytBaaU4SfcFutF9X/CveXLac+g3flrvG9kmgYSe9tQf9O7MuzNvm3ljMpQgY92vBEIs3TWGlpcot3rNp1MWzQThtmiu+5QqRH/1Gr1GoyE3rHyejIAMTy62DNPwQtchU5EItx1KKbEp6F6dMtPXWjNmv1dpVChX8fOULgQr1/28''@;'; put 'put ''zFtNX1C9jqmFwBJUYlQKAhEn7GiTZjDVHgmaY/0cM+/VfQFvmpGg/rofYkawrp/RPKP50AqDILDItINAklH3t4LAobQS2CdTiOBZ1qv7lJUu5aSLOAIyQ4cySsIvsRlnN1zBGvbYSjzgL0iVBqVn81B6oimaMBDPZQsIctkP61a0EvgyyAeCFlZ96CwOrW3foayiHs9uGakkUzkMpSuRcelGlNrY''@;'; put 'put ''JrMBA5SddahHCXZ1wGvczRgbgneghTBgSrioXe1VrZ4Bw6u4s/lu7vvU3lr0J7uYNlzwEHcoKk0ZcV10vgyLc0rCgpMdL1EdGS0mJgYOWE5TWGVY90PbveiQ0gG1BvrTKLYl88Fs3qFBFadSFdqMFh0aUiAKQYe8q7wcQLoBDfJoBaNBjBwaxjYjOiUCGWjALg15oWiGgoaQNIdG1NKaH2c2F4Mp''@;'; put 'put ''GtyStx0aVUvL/tJqMmnlMT+m5w+r2Bj21v14eBgFjFwatvnM4iS78SH+DOJD5iQqkS7U/ZiTh2jdJurLZmfzEss62Er0vARXgWcCRFKD/zXM7i3VAQWMDWNMIlseGRdbpmnqWo0pIzZSlTWfhqUrKjSAw9cPw6ErQpj/c3TUNIYM122G8eGcTXds6zjSNI7YxmyHJlRsspxEnlkeUXGa5WMqzrB8''@;'; put 'put ''XMVZlkdVnGNpqbiH5RMq7mX5pIr7WD6jZCfvlAuRYSmKZN7gC+LQ7C7lZFd5M1Hau5TTXeWtRHlMGTRo/4f4nkJ8x+CXQHws84iP5XHEx1IiPpZTiI9lAfGxnEZ8LJ9GfCxnEB9LpURZH1NHwexoKDx2wdOlxNVTfFaLihybHNzCE7gANXFAFWVUktwRH8mwOPq5bmnNSToxG2fNiYqPRsYBPrs7''@;'; put 'put ''Mw+rTypxWvv7HHhm5WEjuJ37Gud5Y/IPg3+LF2UpPmlOcHCnkAB4vL/DuBVRyaHTqnik7ND8P1Fxghugn0FNjMmCKIoa33zk8kqzWZM1tAofTwQ6K9rBvGlOjCOlJbSoSRoBLYOuWdA06vPsrWZRClFuYr+zeymimOxFGcyAKSjkprGw7O+kRFpYO6np9NHA5Ubai54sNVtWcYW9B+9jyM0seTdS''@;'; put 'put ''XrgpKe1Fm1CnvMgCDrmRPbgmglto77KKYkpYqCI+CG0F++1jRCYtM4MugSJkcbKyD+2KHTmignYC33rSKu/bQu3PdfIgMJudbudBlpGi810V9Wp9VdbYKFev3E0fB9POsLHmF0UZTy57354U7FenBLkCRld2v+5J8fY71u1KST7bF3Z54nVKFfJfgAdD7pT3IhpFkbNYpRHPr1t4MkU5KMZFcxwX''@;'; put 'put ''9NIe7YpV36Nd2Hfto1ZcVlSyH2XQVXTWbsI3Pl8I6kAqClqkIlZ4OmQ+m52a8LGUuCxF3LNk10X0HTwhHeK/OMS1/+vcchTcosoSXWjXCckHbR8r6K0lu5OHKkZn7bxsZ6IdSTfoGoKeSC44/l7gLo8V6RTu8/MHzF/Bdub4GJ0GvqroDMQS562CBIsq3tJOpl5QfIRpCfBF1UKzAngJwGTwsmqZ''@;'; put 'put ''eqYOoGeWmVMBWGEOg1XmMFhjDoN1tYOudxnoFSBTo1fVjpnM+UDJXMA8k9E15ml0nXkavcY8jW6wTQ/gdbbJ4A22ySBkmwwi5lQBNpjDoMEcBpvMYbCl/XKBtrVfjN7UfjF6S/vF6G3tF6N3tF+M3tV+MXpP+8XofeT4XLeAH+gRXQT8MIGXAD/ipOvRAkY38Yy2ObcSyJyPNcdscz7B4vPdXT/V''@;'; put 'put ''I73iswTyis8TyPTb2KdN+CKBTPgygUz4Ctxyd7+v9UjTv0kg079NINO/w8o24fsEMuGHBDLhR3AvdPf7SY80/ecEMv2XBDL9V6xsE35LIBN+TyAT7qidvkyq82fVtal3i9JT9dudd9j5G2UzuiwAAAABAAH//wAPeNq1fQl4ZFWZ6DnnVtWtLanUnqSy1Z6lktpSqeyp7Etl6XRn7e4kvSXppqFp''@;'; put 'put ''6IVFQBAbBkVRnHEbxUEQB1kaBFqUZRxGBZ49LiMOOo7om3FGHbfnG0Z0JDfvP+fcW3WzNTjf96CTVO79z/affz//f4KMaGE9iT8ueJCALMiJSpAf1aAUakEdaAiVZFw9ne2t6aZkbThQWVrsshYZNAQZY3Var9UrOpNOvzOZ8qeSKZH9FOGj8pQ+oz/pG3iSUj7LMKxBOpnCH5f+Dnf83+6eB3p6''@;'; put 'put ''Hnigx+f19vT0HOnxnnvgiM97xPvAAw94jxw5NzDwwMpA1d8LP+v1Br3w75ajvoGBwEH4NOBt7/Edub7ZHd111VWPXHXVruiqN+qFfwgRNLr+OvoWOc/WFsz4EMZoASFUmEWECEsaLAhuYVSj0Vg0hUFrkVZ019mTgt8VSjU2JRMup0PnnzlT0qcNh8s8oZCHnJd8P6wuKw2HS8uqEVpfR334XnwD''@;'; put 'put ''ebDIh4wIFQnw/SVExw3AtxthXA+qRMOZAYuOIK1AMEF42YQNhsJsYVGBIIr6BbOR6PXWrAYTYiGjCFVWlJdBK09pSbEbxrdbc/+J5XVYTIp+0Z9mX+kk+0qK7EukL/GbsSvtJyK7Iu+NTEQutx+PXWG/Aj69F56csP3Ne2PvxReezz4C/2Wfzz4K/2WfR4CZ0PoF0kbeQBUoiCKoPlMbqfN5PaXF''@;'; put 'put ''bqfNZNSLhYhoAW1kBJaFCT4I63Oj0UqrVQBsBXSwx6lQOO1ypxpwqrETp2GvXW4xFHZWYCeCx4XYaWtKNcID0nbmsql3HejI7j1yJLmvderKxdb+8RNXSZdHE3VNv860ZK44KWZ6ivZlh2w/Kp3elZxpFjs6zbtHO63/6Jmbwu4a6wuGFr8031Zd3WD9JsxDiyLrvyNr5CnYXTtgOora0P/KPla8''@;'; put 'put ''ay5TZ8JaI8Y6LV5FOqQ36PRHkUaDlgimu18AeyAsmUUiCBZh1JN9LAxNopdsggCUtROXzFgU3eKoJ5PcpgUhAEuboe1bzc9nQrFYVZXDgVCsLdba1FgVrWqoDjkqHRWlxXabtQgWUxgqFJ11No7RZAIw6SjEfpzEfoZKv0/ndLiSaNP7Tpx/96mRmtqRWAy+Z6P4vbuk8MTpRDIUjidDeO9ILTzk''@;'; put 'put ''r6rj9GEijPc1jEfjuxoaJmLxiXo8tTaJ/7IjGu3siDV0SvvqJ+JR+g4g6rvp486GaCeitBNcf53cQL6AvKgeNaHOTFs8Gq6qKPeUmIhRIF6MBDJCaRsvAeu5slpgOIYZoKCGBp+voakh5av3RSJ+neiq04bCOr+PLqoprV4avHM3pd060Y3o2tx8nbY0gNOlkqAvse9013JLdqK8NLqnMTZRPzE9''@;'; put 'put ''1FdXORGNnZT+Mllc2tNU73cMXNGxOpo2+hrnYnPtvQf8Nf2hhmwkkq1vHw3sGeiaDCz3nSIj0XBp2lsaDwcSa691Xz2cmmzKIIQpn6MnyYPIjOyZIipF2PbiUWeAwMRteXkh+qetXrfba7XE8H8se90+n9u7PIxoH63rM7iPPIsKkO6JAi2O1TExk3YDg8CixAevvHK1cWrX5J7G2R/d8q7X9jRN''@;'; put 'put ''P3Xq1FNTada2Fto2Km1FaMuREE5z/NTumYR2q9DDqemnrj715EzTntfedcuP9rC2KXwCHyDPo4OoOZPaOzHUVF3h1ulhESMCxhqMtBit6rBWS5aAeF1aEEIAemDP7s72WIPPWydSSoSZppvSOhH+9/vC/Dfg9QYcDvHfkgm3C/5nv3FUACxANPFX7NdCDBtZgflvtJswtHe5mZh93mrUEbuj2qrT''@;'; put 'put ''WQ0ac3GDwW02uw0NxWaNsUijt1Y77ERntJoLKJzRZgg5GWABA7SWaqKOAgboDBlsRgpZgE9YTKUJn7nA7jMKFtFgEQstGr1Wq9dYCvUWvVikMfrsBWZfotRk4ZBikegzAyi8ZaCiAVvNHNTsg5ccluG0Gy0TB2lGJhTK+JFGwJppoG2QFFhAy8D+eAEBaseY4C7SiaV12E81YIpqwiRxPLv/mWf2''@;'; put 'put ''P4u9zz47//zztL+B9WvQt9F1qBC5M8DKaFChMWCUgI3SGHCAT0Vmu2oLPKFwmTccjh2LxEE9hVO1/uE07asR/QS3407gzuKME9GOpumcYUYIZlREO7N7nd5GrJd+jzv3svX0gp58EcY3UY1Pn4DUw9iNKTGYkDEgABGoteJlskY057QhXv/V+gV8gfwUxrVmCmmnt8LYp/mAVHThkcul+y4nP32T''@;'; put 'put ''im5QJk0gO24hz4C4q0SRTA0QH1sxlxIYlDObQFERKNbKoopiF5OLoG/qNJvlHkk1NmC/jzJSBYwk3pbN3jY9fS6bPTednonFZtLp2Xh8Nm3e9+nV1Xv37bt3dfXT+xZ6rx0dvaa395rR0Wt7GQ5g3bgcdLYOeTLFsJUC4GuES3GMLXjUameoE8PppNX/hWtqn9q9QtKjw+9Ym0SsfRQWVQzrKUa1''@;'; put 'put ''mbDJCMsBaiBkhKGTiT9qdCwgpnOs7kBIIxbXdWFFaovhJlncWTBsT/TNvrbRpqaZUN+Bj2eOdYzM3YuHJfeeb7UsRpu6GxPt5xqXOvqvHfqzRTa2H3BZAWPXoK5Me0kxjOPDmMDoMAWmuBHByzCyZgmIEyYCunOJ8rybsXsNqg4EvIGgKJbALlOhkkxQPQOWmjvRtHl6ooz2fzhX2x041Nqza2o8''@;'; put 'put ''m+2d3NWenAp1LXy4/3j7SGvHTOdVw+ZMqrcukWlMpfFe3JyMdUbrO6+LTTe177YV7ult3ZfkdOCHb1nAuxGkG1gfZjAy8IhOC2vACGzNFUAdU6kWzajJZCowFQBP2YroXIPeME5aqbXpT1kFfKv0kAmPXXv48PJv75nEX5aG5u95A/dLz8Dq44CfGhijDLVnWmwg9grMBGvAnhlB8B1pQIELAlng''@;'; put 'put ''2nsjcsAc81ntAT9DDhg6SRkjYphykdiUI8O/ONI1t9KzZ0/vZM+gEX9W+qKuZ6zzaEf3qRHz5UP7xtvahhNVeHXxYiR5qKfvWEuOB7pg3zyoGvWD7QNrtwLRBIuJViOM6ECaaLSCZhXlNKgI81IEQ1kZzK66LOz3QvvSQDCkB4sMybOhwoLyiFvkrAHCOGnL0Rplk48e68xcPXjH7dlze66cbwz0''@;'; put 'put ''RxqnErjqUIu7NzjT3TJVWDjejT/feLCn+7L25z6x+tkDE+Neb/912bqY9NHqbn/HSEdibJbSHggd4mZ8U5kpA32CGddQeYOZnQ12LVg11FrE3pTXCYLgr6SP4B9LPzpNJhdH1z5J7Ygo4CHF8BAG36Mv0+3QEZCqI6IKA7J00AMGMOwPkw7V1RQJ1anqxmh9Wbgs5KuiqIgYqLjazpCQkaOyotz0''@;'; put 'put ''M+ihQkJtiZ+f7Zvsbu/rvbKr+8qewZbuXf1nh1Jzk+3tu2ZTvXtjwwH/cHxvrzk229qxz1W8q7l5KlI/lW7d5XLva2+di+KPtsfqO9ob4m2C9JWuhK+pAuOKJl+ii+51GtaYye91RRHssQG4VE+1BqxUCzyqJatA6QIsTxBcWZUSUPaaLzAYCLK9dvGt5hwL2pb+Ii/YRpfOZaIrib+4ZZczbPe7''@;'; put 'put ''2DbX0x0nz2zcZb7z0kfoNrP9pmtgeoLoQCe4qcymMprN0ModKi13qMxmhMxus8tWxJSHTrYgFOVBtlEkZfJPfIuiUaRTyifws5h+JDrws0D/WkVkBen8PmR4HOOn8fseS9ZxOpwhhMwDHeqe0BGwkeypoLMAO9P469L78CkcH/vBzEMPzTK+60ZPEAf+BVCeiHyZSkqv1DdD4BCQaVlME4Hq7yIq''@;'; put 'put ''pSmn0/+78Xekevb1i/nb5mHMERjTqYwpwJjpepzSOrUj+BSM+XUp9chDD838YOwHdEz3+uv4O7D/TrCW05lGu0FPxRum4lmAgW9S6QkqqLVYo3FrRl0ul9dVFSz2B3V0IjIH56QxMLZzg7/6xO6jfc0zA52Lt3cdaorPpQ84FMzequuO1HVNdV4Vn2mMTLaaT/wg78rS+UXW7xT6yX2Amwn0o4y5''@;'; put 'put ''ykaMhs4OIoKQzD7mBwcpBYaOQdAYbjJjoxYbZ5EWJLWoxUeRaMJ6UX8Y6XSK30P9K1iG1UC9qxponFQaw2INRsGw+pad6MDDasm1QkgnIN3qzq31enEWgUu9xLqZAD+rpKcHoZ6JnvHhQVhUJhQK20OBUKhALNtiQvhCYRXvJFzutFvkEiFBMa6yLhLMYvcrolTmr97HVq/+8snlR5bTM9Foh7Fi''@;'; put 'put ''VzQ2WtdzWWu8z26eLtK4Dd7y8rR/3yf2Lz+6snDPYsdyyt5ystfeF0zEagdrm6OnVx5evvLLVx24b3HiynQkHKqP7GrsPdVX5+/STbjPtJgqqmqmu6Y/OLP66PL+T+wvryoLeLExticRbYxO1Mfb2f6VwrfvgRwWQZPWZaoNWEPwCFARkJUGtChVbWDwU0tGr9cb9UZumhaDFhWZaxk2YRKRPt5+''@;'; put 'put ''Eofpv8N3wn/k/NrkT/GA9CXA+6wc0yhCJciHOjKtIIlhBB1wjlZDtNS8kIMrIuYWMB3LU2qzeitLfR5fsctaYiuJVOmZAbpRIHsx06p12GlXPszigZb5RDze0d10oEN6BNc39vQ0vvRq6/Bw66vkfGQ83jjsqdjb0jQdwx9M19U1f1V6qSuR6PoXZg/FQNbeDbxWjhoydaUlJqOGGhWKPHVtCP/A''@;'; put 'put ''g3JUFgqGaPhHkycBceuu46b7Dx26f2no1sRgYLGx90x//5nexsXAYOLWIfPB+5eW7jvYkuwLR4auHRi4bigS7ku2wL5QvH2Z2TdO5i3k0MQcYxlNZpPDZnKanaEqLUWPQph1OC0TYB22zv7qxCMHDz5y4lf/OXF9f/87xt9Pzs994vDhT87tz5waHr46IxnY2sGAIX0wnglFMxFFslF7RrMAuqVQ''@;'; put 'put ''bYUy697Ew0tg3tidspyzep2P48ulP8cfkkT8BzL5lcVvL5Lzi2hD/wZUkwkp/VNpxXpVVD68MCAD7ZnJLdarX+l3hXb60qL0Xd4p36/7Yb+8KJVJgMuAhEpCNFpmPGs1iBEX90+pJcjEJGh/O2yan7tXXutG/t20eSk//jNcFvuL4aXPHDr0maWRP48N+k809dEN7Ivs8z+Nr5Z+HW/jW9ia6AvV''@;'; put 'put ''8y2s8Hwgv+Y7GU7DmYBsMi6DjUrXS+NDFrQZl5iuFr6S8J3cuSzdsbyMr6HshKPSt8l56TXsg15oq8dZfJLGFVS+BnfTwNEYXV6mrQDWCfrjG4z/gIqYac8omhmsZEkAYnIztBchiz2ogeZ5Ux5mQbnsseu9g/Zddc2Dyy3L3eZMor86uacbtFS87/J2vs4Z6OpDbJ1VmXKDXkuYhsIsAibwGKXd''@;'; put 'put ''ZuM6MWnFSQP2g2von1nGfbdI/47r3/lfR2C60sfxivR16TbcePxl3i8IYvCXzyMttRHZpGlviG4+R50Waa1WOukg0EnSShxSw8oi0NzaedYeeAgIIDcvcZt5OazKvDzgFPitJtiB2eXf/naZfsGcuvDfAvJ/Tn9KbrlP8jCj44qMRyRkS4+2XI8YpuRn/eH3Li9LZ+iWvEEMa5Pw9QaVvZR+f///''@;'; put 'put ''w5flAgeo8uB9S72n+/tP93KpI4sbeLp0/8GFoesGBq4d4jTLdAGl1+OwNjPIHPBGYRbApgKmoYl8AByWWFjgsBU4C53WUJWOBr+9Obnj9Csi2ZrF3iEY9/TQs8vYnt23L/soOd+ymsmstvwGjw20tw9Ib6px4KA2fCZBA9hEK1BHRqBhwLwPo1FFAZ1OZ9gZqg+FqfBFMAdxgyKmMeR0OO1u2oAV''@;'; put 'put ''8vuQf7h1LHpV+5KCHulXPYdal+tz+MEVVzR09fWGanJ4kv6QmO6b659QISqPp0KYC+hMQgNiiku4jLRaWaTJLA5OstVqp/KGztQfBr/TyjCmTcq4IscPTpw//df3LDOUSf2PMnThW045//Cb3zCsvYsijNF0aP2/SBt5FrwB0FEuJ/VHCVahiQZYVTqqGoWDET9FU94LDTeQbQSeW6alj53qWL6x''@;'; put 'put ''b3RiYfxwc8cVfaPXp1ojy43Bdl9osOvUmdarJkwnsgc6Ig1xp61htK1lfyoRHa2OlMc8ldUei2dupm1/is6zBnA0yewKHhfJuXY8kCGbyNgPvp0fuMT4v0n1vyyDa7co8+4uoIt7oD3YvZkKOZiOsXppTuRwBByK+qXCivszitzCvtuzy/H55ua5+MrobdPmsTtm8ful0x0HmsA0wHdKV8/eMcbl''@;'; put 'put ''jGID6ehYWuaLgqSUhSSXNGCqc0ljoBF1Dybfk75/Ev7R/QGGPr/2HVLP+gKvQFPCeAj6MlJZDwKCnuEw1c0WDxLCVqSlmpMKHfgn+E3YX3nywYdPPvzgyX9ZfuoLVFK8Tszsa5L4136IlL7Jp5g8A3lo0EHXhIZjqY2GOa3ZbDYrxSvMEro0sN7xJ7Dwjq997TosSGvXf+3F6/Cc9NdYlP6AZ+HT''@;'; put 'put ''H7DI+y6Avj8GfetReaZUR3kvJ9hkb9zGzm7kPmHLqqRfXf/33zoj/eYoLsCflp7HPdKi9J+0ryboa7ei6yk+8yGtnH+fC2nZrGzGae7mg8Jvwu+T3kGKpFP4g2v/NkHI4sSaxPX9+Pq7cT/57tv0vpJAWPA1/sZnPvMG+e7AWhswEF7//foF/Lc7xBsFsGf1l+MFHm7EKArjhXPjKfEwaorR2Cgd''@;'; put 'put ''D+XHc4OwT8FX9IEHfv/7JvLVgTfP0+4T+JP4C5y2Htcd6cu4QKqzCCGMTKOlp+Uox+M61GdP2v1h0f/t4U+OnzkzBtrn19/8Jp2ztH4l2b3+NAxXxfrYIT5LuxABgYRMrT08NMz3tYtksJu8Am3drK0ZWlJpf9oGPiAfNe32dx24doh82fHn3KerB5vhD8QKfBFCN2YcxVjQuEERWMFyryjXCjqt''@;'; put 'put ''Bnw7B7hnVQCs1RHtKvM9qQFfktVj6orJ9OgBu2crCOUqBqeYZPMZp8eDkCfkCXorYdiSQNBvNwBSkcsJWFUHpnKOrA3sM+XcCt9+9cGypfjU8fRSy8juzsHOqcDR/bZ5c/doaqQ7QaxnD0kvDoYje7OJibqyopaxuuFGKZ6s73c01dTE+ZrHQN5Mgx6ygZfy7AWLETQQlldZDsRVlM1FWErkcBpd''@;'; put 'put ''Iugi8FS9AOTdDERNsg2BN9ml9SqHfTsDAozqtWLub4CZB0/VYbcjZPfZvZ4SmDbomE2hvDBlAKsSwVPbB5+7orPzit62pYpDhyoX29wjNTUj0YbhmprhBmIFF2H8hv5UfC95RvptLCW1RKdTqalodCqVmo5ymooAfUhAH+WoMRM3Ah5KTDDJUmByIectlezsLbku6S29ftNI9sbhpkOhXnd3oGEi''@;'; put 'put ''Gp2IBnqKe8OHm80jNw4N3TBSG+osrUhMxxPTiUpPRzjC94/aEc25/bMK6v2jiGR7w5wB9f5Z8vu3GYgRqcjChpxIlf2jgIWXBGT7J7+l0Mx42gizdf9sIb+V7h+WCT6PJCvZtH+k+VDFUlsv38TFyqvZzkXZLpJn1vr3xlP9N4yPv6M/FcOWtbs27x+N2bxOwrB/LtiUTKaD0I1jh65gwxBBQ5Zz''@;'; put 'put ''M5XnLxOdGyxgd7m7rLQEmjrBj6LzDfBtUxtfXjpHneiFKeOFaXen75rmoeuH+s8Ojp9sk44Z53u65s24yTCaGa0qzgQiAzeMj75jIPue/T278RXZrq4spTEvfFsk34Jh92aMRVintWKkozElulllSKfTLoGlVcyCE2hBg+VoIigqT6YUHAMdSJ3VrS/nM8agn52viaKH6wg/lds8FMbpUef81vXX''@;'; put 'put ''HxwfH20va3IG9OVFrkqinZIm8ONTnZ0TDmuP3uT3UDxG16dII+CxEtWhazOWiiKi0+Zjs7KIBDkHakNHVqlhuCRqiMzzDKl2JiJzIFQ8wkwpINoEBiKyqgqhqrqq2lAARqwMBYMBKiKxVeZ27rV14I3EkyKqs3/S2HvNaNepULhsNrpnqXKxtfd4R8fx3talCqDH/v65uX6ilRI9q62hyhFPxWhv''@;'; put 'put ''tj7edXJw8GRnMrJHumbvwMD8/MAAP/ujhrCVxSVPPmVjJhPfGjdibAQmMYtFlihWsMw9bu7sb30Nb/IPWbRDfgOMUsCtPavD76BhASrhYNfkQJpVFnL49vn4wd7GUE/40KHiediW5L5W6Qu4uXXY2+yV/gak2Vq1LOs74PuT5B/AjrKgAT5tVy4oXUwpxSrbqZ6MA+w5TA2NVdXjeWo6WAoLzCxS''@;'; put 'put ''rd0UqRbBCjjg95cU+/3FicOHyb5AcbE/4C4OzKz9kY6//tL6uDx+KTqSMVpAtxZiDclRt1Y1F0FgpKs5oAPMeDSMuhEACIidPm18CTKFRdFLzSUupxxHF7fE0WVHgJrJutxET8aLCkr8xRWHxzryE37zP436MaPfQwJrr3buYvs+CAugZ4YmtPQFA3PSlJ23cg1I54Q37LmVazz1C9htcHYX2K8b''@;'; put 'put ''3szPX7BZ7cwixNQYYioMXOmu75799J5Dh9auxR7p374/dQ62swfrOR2iz8F8BNTOp2GiwQw5ICJPwKSKkXjYb0oAbX7+yXzQZOjQISo+kbJOoQ9420/lTynG2iqMWEybMrWLChbtkl7UCVqtNauhp7ZsWSB54Hf6VgdviU5Xkns5z0I1fuTzW+1+u99hAPmjomTdhg9JJ+de+E7+Zjp2sCPePMC+''@;'; put 'put ''HT7sGIs3z7pt+9oUCm9tGepNSc8pP4l2KFzfHIs1IxWfWsG/HrtgNRPOqHQNduZOaak8sqq5kNHUFv7kTOhAdpj8ZibUicqMZR5s2q07fLh4Ts2DnQ3S40SbDccU/TMKc9oU9yh5y7iH69Jxj9dvzILpMHTjCBgKzHJoiO6Kwj/ZcBi5YQjezYDdEJ9OcANCsf2mwPazMtvh6Gbbj2pyHbgvwPx5''@;'; put 'put ''A4xiyM41PZMKm21DFczbsNMU9P2P7DTpv8nj89vZadQmmgKbSFnXRpsov64SlWGSVXQSs3Ksm2ymDTCXsF+sm1XQn2C/aNcmsC5vwMxL/VvtT3Db8UlYlwn1XDDpqKcur8rKFCbYMtz8ZMaAU6HovFlK7YALIGWYmLE1JZ0KCb+83LPrmHj4MP7HtpnJPumfiPYwj7m8jl+E8YLU3nVggp3gHcOw''@;'; put 'put ''IPxykZeSzZGXIAoEagPM3g2pQi9YsTS4TqZxF0LF8stnGqKzc5Gm5o6lPcf2xA/XRcYGqpPuhkTzYPzEjLk6ONgVrKiqspb2dAxMV5UNx7xljmKHxVrZHhuao/YSzHGRfAjspWgm4sY6GuYFs+5WqkvIAj00ACSAZ3aAm3LMBrL7qBEU5O6VVc4zAolLD7Ca0njR2VTWPjo+fvD66ytdReX6Eqtj''@;'; put 'put ''ohPHpt7//inpVY/fpOc5SK8DPrVMvthhQJKTLyBaZI2pcgfdylNZ8Oc9QC5fQMX7WexfZQZTRcVmZCUWKlaaFSEDxPJHECkgZPCw9BIVMnhCzskhdUSr5OQokQzFBrTamMdt56EX1/F77zn+Twtg+JzAd1MFjcEqRkI1tN8aw7FeOoZTvnzNzVM3n11+dN8NN+6DHt+Jb6Ffa3/EN0s352NNNuib''@;'; put 'put ''5YAZRQ3NJ6GdYwx9C0R1KGCz2Sj1eMOi3x5OutNJ0Y7ve9/7T3z1uZPvPnfi2a8+/zzWr33+829Kb9B+S9ZHST30a6XZMCY9gSlTI4HIXVPiPEDn7mHEaUVFNoc6LNiFBbaKQiwer3WV+0p85tLXLnvgk6s/8exuedI1WmRzpYleOoo/unaxL4P5WkB84u/BmDvEeayXjvMksE/6Cb5Heg0HpL0j''@;'; put 'put ''+ND8iHTPPOu3en0vPkK+CFKrOhMsYcYlaGk85PMSmuMGILMyP2M0YXVR/U1DgGlQRilgszBNKHYXEqebHxWKlMtEbN5fjesbUxFcvTChb2t14lAoHMSuljb9PTUDTbfF63rq4ufSA9X6boO7tvo9DemCwnTDHdW1xYZuGOey9QvoCRY32jk/DmyIy4aHlVw1mn+5F6+ydQB+9CzuQ0+phnwYD7Iu''@;'; put 'put ''ZuXTe4QnaO42ER11btBpYZ6BkqYZJmkQDyKQP8goWA9sT21biwumHgphZ2ubfhddFBWu1ft3LRuKa6vvaEgXFqQb3lNd6zZ066sH0ufYwm5L99foae55C67Gt+FHrSIuWF+XfokMjyP8tPRLlg3Bc99n0LeYbLWwUys6QaqQmVHOcp3s9Lxoo/HLDEueaAi2TfJBOXmg5UwJmFBKvsBaP35N8T8v''@;'; put 'put ''YImMAS94KWYqyktL3C6HvahAS8z8fApGnZbT7kHcl7IcOp41zmPXNF+cbiroTnA/A+Ajg2rBP5yKTnUcbm050jHVsNvbG2htC/VKd/c0NvYEa7WZPvPYVV1dV44V9HRqq72dtSbpL0yRjpsP2PGC7WAbz4FEZAxsyTLUm8nATtFkIiTSXGQRD2sxAaEqEnYcwvwzmlUkity5Rzzpq8xqDwZAs1Dj''@;'; put 'put ''Luj0ptIse1Md7NCVY5p6RsbWfjqUybSsZAau8wwWTMSbh557bm6uofahwXN9l7fLp2y3DD6kjs26UEumyYGRAY+Aiykyt2RFhwmYTWDGLRtZjQDPeXM57TalBqDIRKsAWHmFU0kohS/G8PjRe77yla8cha97WDQXDw5mB0+cgG/4KA3psv3qIpP4avIcy99JsChimCatAv2ywP6SVqCIwhPbZPDQ''@;'; put 'put ''AKPa+0ioPi9WVrpdVZXux9jPKheZpD+9TvqM/wR6rUFJ/H/w3xX5cJ0WFQm4Dr0qxzXH8S3krrcTE6V5OF24R3qe3NX9dmOibtF/4eAHhsgrDlluB9a/AX7Po7DT/gz44aDpELmJqtV3US3GwtrsWCPEtAJWzB96mEvPNwoHLmttXs7g8rGzYzgQn29t3ZtYqyIfXTsKfXeiV9CXQHWZ6JmiSjAQ''@;'; put 'put ''KjImVMm0TSrsHQoESkvh6xX44ffDRzneu96J1qFBMTrD1mYBe0VjN5B8VMJMoxJg3IOq1pykSUQgtFfzUvUAO30BC5CBAGHdtBMM19nFyG0PBAJUZ1PMsQQNFo5Q5TzSWpNXq1sjJTGrs9zv8ABtWmxV7cX6SKg82FBUEHU7LIU2o20szepjYrDnv2N7HtHRPY+g7zE6DK+P4H9lssmLWjPpSqfD''@;'; put 'put ''rCH86I0gOlFGjFxYgeY5gGR1560qdtmtOZpEanHFU3ESabdOMVlBtuCkLMFim/Oi8uJMumpzZhSbOztLEm4q8tFqHquIetGfoc8h/eMEP/Y5JmS3gTmGHTvAnFVgsIge3AHm8hxMAfroDjCrubFW0L0chmyGeTnXjwl9cyMMzxMSXgMZZAFTfzDTZ6Xyh2l6cMJB8tCsNL1m2QACUbcAdqZ8xqPl''@;'; put 'put ''1hJz5WxFNmhtkYWSCSQkVjJHUjSZCKwCcFGySgaJtLbnDL6TNEvit3kqyV13kfOL0ofxMekjLPejk+XqpDDJlNbWCEQj6iqANMuxBpfZgG6tmAhamdzr6dGsgE/CN6Q5oQQPZfktO2ug3Q7AnD2ERg2oAdtAGyGsueltt6qk9UAbWgk3vGWzTGRzC5rXR45s15DH/WkcIYUag7XAdl4nVTU8BmvB''@;'; put 'put ''smjYzH3bnvcm8cuLgcGG63oK9ZWbWdM9c/fM5oylyUi4L9qs8W7k2GbjkU/MbcxgQoymWL4Po/FqmQ/eyWgKq2hzM8wx9PgOMGcVGOCDa3eAWc31s4JOcpg8ja9fpDkzbKwIn8/6+7b0A6ICJ1Qwx5BnM8z6rwHGxuYT4fNZP78F5t8BpoTNh/ezsv7ZjfMBfqqFb99nOQTlNLt8o3WxoGdnDAaV''@;'; put 'put ''eWGxwI9ySxmr8XNCswLQNcZ8HIE5TEmrEkMA3kqKoPDx13ny18DAr6Z5+tez+JlcChhuWMT+tUd4ItiLi/8AOGD5LUymxGWZcu8WPLGcDYanhLy3n9kidzbDHMOxHWDOKjCwt1/dAebyHEwBenIHmNXcWCvouU3yi+ZM3YFfJQ5QArondAjH6oJh4IxwmuZsuvGHz707c+627tvOdb773B3n3t3J''@;'; put 'put ''PmfefQ6xejUlR4VWudajc7J/68IaUldbXlZi1tGUbKQVRjzsqaB6iuHpPG9QzIIp9LjeldVtOEEEg0J9pOTiR4I69XFfphCYvT4QCdnDdlZxoWRxh8A9TKsyUJMicrkxD40jXu6FXUny1eTB+5bSq5GGI/MNjcDaTUcj9UfmJFRZhke7ssDhOHO6v6JMeiKTJcU39C3df9BXmVqJ39gHvO2tbFyR''@;'; put 'put ''fjztwzdTDpf+MHTdQMO0X7q5nuKe5WmwfW6WaeHRLfSyGeYY+vEOMGcVGKCFz+4As5rrZwV9ajOfc1uZjdUuj/Xcxn425e80ZOqAOrQarF3WYfn4K1eECZrL4nJY3EVua8hbJPKsgqQq2ymYy3ZaeWZLttOZltVM90rL9d8baG/vl9ZysSviJV8DSTX/lBHsdhouqQfqqAAdAEpMoMdE+XRTvKDD''@;'; put 'put ''cti6TE5qXM0Bql7PZ4z2gDfgrfOzY61cjFRUpppSco1Sil6gceaxliOZzOHmg+00W3Z3e8vwcEt7JNnb05jsXSbmpulodLrpWLpiX3PTdGye5snOdEai7Z1xmjMKuOZ5Aq8ArvtAvxPUu4i2eS7AHnxA9fyiAo/FWTX8C7nnBQPq58/l+l+ZUD0XKnPwphs5n8Jz4UNgH0ZQEmVwN6/pLSsDLHs9''@;'; put 'put ''YI04sVHfjHVGAyGijnp2uhG5iHdHGBOFyb82bPN6fp6PEwHColWGq0iPdKJet1xgIEpGfkm20GQWqBbPJw3QcZsu2caMcy2yhdhkUgmMzOaGKN+MFg6/ZRdgRlQ1NtbXI9SYaexqa6lP1idiUcBcnT3gDwQDQUvOrFDS3LdkYPDziU0HviBzOnDuvPFlfvqbORn0Xtm7dEKVnjHXvVASWG3bfCIs''@;'; put 'put ''faA3TLM2elr42XBLItEyN5ZP24jXRxKqk2LpDn+bP+BoqqmNsbyETpaXkEIPZcqDWKtpDBGdNlVKkK4EC6i4EDa4ALxmnWwWBmh5AAFjQQccpWOsx0rdeNLFAZDCHqzYdUEKC3A3XRo449sCxwrgj+TAtRT3xhCz3hi3BnR/ouFGEyXwD+bilq2GW3H38a7tsicCdZsNtxbD2OmeLdkUnL94fgDl''@;'; put 'put ''3yHO18vbPad8/RHV84sKPBYX1fDP5fpZmWHP17/GzuxoP9/g/d/O4WlQLKJ6fszJ4X8Gz82s/2/w/h/kz38Mz+2sfw6/ci+PL9GaqU7yTVQGVtbejL2I1QbKlpPDbjPioexjpfQYTwneWzdkl9JDXwyaAJNV9WNwd8vLy2vLawK+UJDm2ysqWNG+7hA1KULcpiBy8qmO29o/n+45kx0929t2rOdA''@;'; put 'put ''b3jfmfLJqoal/gMVPQVz1cOxgXl69GH51NKeW4Z7z44OXdU1PjrR2Bsorgyn63rL1362lI2O1i8Ox8cjFE/8TI/Ky0kuL/fm8T3K8Leb4/X0ds/pvj2gen5RgcfiFWr4F3LPC/arnz+X639lmcvdbnRErmu2gMXclgHtrFPOzBELTSENkP8skL92SQS+1E4wj9BTVAraVYkk6qlrrj5GB8dQXaOE''@;'; put 'put ''rcGgpyQQKPkFraX6lvwL/lKotCQYLCkNdc0/r3yEOSlnjG5UhWpyNpsDbLYwQLlNYJ3pFZsNngqqp9vabCXb2WzqA7LtbDav11vjrQ7awrYNNpvaZKMWm8Zt5wabixpsYQEEZzg4cuPQZE/Z/h5fCBh6or9sfy8Iu5/UxKK7ov88EfXCJ/zB/YmhG0ciVWOhhSSwcr13/LdxbPIAN38R2Lk9Kr3h''@;'; put 'put ''YfvGz2jo/s9xujiItnlO6eJDqucXFXgs7lXDP5frZ2U3f87PHmg/++V+7ladq/KcrA/nz1W3TZfbera6Q7rctoew27+WM+foIezbPIW1/s9PYYXVrelyOdw8J+MGcDaJVDGXllxc5ij62Ba/hts/d+Xsn6ODaLuYDjag+3Zom7OdsGGSy8bS9T2CF2xfN/TSkWktwUB9WIfJiB5MbthqssLKfei9''@;'; put 'put ''M0DPSlmdHY0WFxeXFpcGaOzG4aVBBy2PoaX9YV4KxlV+Im0igtefiHe4C9pzdWHFFeUlZRbpzjvvqmhNBMt4iViFu9hjxZ2sUEzOO91DeoBn6U1CT3MGLPOA6VWKieCAqdVH9IJeFDHW18CUmWW23Wut/Frm4RroWdQTcVWpZC8Bx1qv55FCt3qJnkz9VlhQ3Ba5AdoEP5+x1tbWpmobQwE7GE1h''@;'; put 'put ''r1Esy6EltYPN5LQqiAqpMlhJD0VZyZYk1pWrOep+qySzUgSGy/o3JrPS/FaGzY/lk1plv/hu5guFZF/o51t8Kp7LSXl3QObdD6ranlXaYj16bIe2F+W2BOvnOH2y2jXWNiy3Pb2tz/5b8gzADDIYi9ABJrkBYJ4WMAUCGDlGApT/zlyO57UgT0rhzWsXbBpi0CunzSGqVjAStGgZNggki14v59DR''@;'; put 'put ''UxF+MQVPCKLSp3ZHaCbFaRMm1d1EEUMbWxRessUG4DycTifn8aqBaTzP5vF4aj01YXoiH/LLxzX+LWmgykUgaHM2xbWZDekU999/KCP9Up1T0b/2jCon9GOt7e1rX9+QVZGLobXkYmhH4f9t9hvsubty9tzRcbRd/A0b0Xd2aKvYggLAfJHXyAHP97E7FgYzfUWgiK2AO36GTLP7KeOJC0gU5YAy''@;'; put 'put ''FfKWLDMkgDHtWuXYzeGnVTZWyoBKPaJf4TO3zJGqAsVhzlUVTE5JTyjVioyHmpmI4jWG9KxyheXKhlA9emfGRr2KECZasB2IAWwBmglfBvRRDea+RqvTLNNgrbLj8u04LGOGSQ+mrYIKKFs/PrxdC5qoWhQOh+vDEZfPHmr0B1mYV9y0It2WtFvqGyA59fbH2cLcInW6go0puNXgmUm/kb2uUneh''@;'; put 'put ''snKbFavyccEHw2d4Su42sVj9NrHYzb6AXvYFWK0mo5FaWWd9eUtbnk9LaWSE66xTclvpZ7TOk7cF2rGQUsTvfwB4wY8KUQNqRfdkHPWVRC8q5QoCvQ4EDXH5UGeiRxSCXrNqwPl6XlHULoEbrdXy0+0lfrrtoZd6bYU2Yp3OytugTS3AmY5GaYQ22hptSSUtDZaGuhq/t6zUaaeR2mKzYtrS+6i4''@;'; put 'put ''Nev+E9J2cWVVVdgfMDgrq1z//ZYZvJN1vrK2hpJgTaXLVTX6ttJ5wZd6DYixivE/j1kfXf/Ulrj29wCmlPE/97eOfozHtOLre9DrwMMOnudAsIPngShXefAcIK4zA16Xl5XLyCdwaVokqXDq65RULeZlHWdPquscgQLykGwr0NzZdRjrBXYW7aW5604H0QheJjJ0qo2VTXNLjqNY0kJVRWmx22Up''@;'; put 'put ''2DYv1q5MyK2e0SH5jHqYzqzCbT8c51PLn1WvVcEsy2MmHX597Y/yNIFmafnNU/kzAJB3xk1xSJZjCn6wNlfHa91Sxzt4+DBNcoL+ZoAHPgS60Ae0zngA/yv3meF5BeONcfn5p9lzVjvLdH9U1v3WLfwGHIrrhfcAzIQM40IXOMwFBYbX4D6j9AP9P8z0NFbpadrPYQYzIcOc3wjD8/lJL9BIAc34''@;'; put 'put ''NJuMBnC1BD1RqpE3FfYWoAJnrrBXTFEiSTtFJ+mVGnbtWrn11sVFsAEXavCI9PPehd4fyvUCXpaXnM0UmIyijmpgfT4v3QQfi+R6vlxacL7Ez8N+Uw5b5uefdLL7szDNC5THx97JQ2NjhybxwRrpJawLL4TxnPSDmtyZyU3KmQng8Rfb4Rp89ldkn53aWfdzWwn272G2r3FZtvHY6hA8txKrAg84''@;'; put 'put ''fSFnWz3MZHBclsGf32Gsi7n4gP44Up2TtOTOSY6ip7bYZdxvvivn4x9dQNud5+DCzWcsctupfPwBF14m56GCsH4V9t6Gyum5fe52AT3JXS9goKXUSq4Y89TK7WUuB8sr5Yq9JH9cnEuucGJr3gzq46p97fkD9x88dP8S6ZHEYXp0ebqPK/e5jy8u3bu0KJnxfw2cHRi4kt9FCHMW/h30O11XC5rK''@;'; put 'put ''TLqxXmcgtACZhQeAhjRavWbZbCA6nRIKMIlGQRUMSCb9foSSLcnmppQ/4Y/X1UB3XnsgFAgWwLw3hlHzMl6ltjWbbDpZhQtlPH7aezoYPNMzzNKbe04HAye7FTUuXaPKc8bXbqir6WxKdfHM547GVDvT50Sd/IyvpJpd1uvH2d6mZPr94ha64Dm3dG+neWwuK9t+QKfHGf2mZDq9yOGln9EcXRme''@;'; put 'put ''Po/mbIjjjH5TMv3evO1YZxj9TnP6tfGxWO0zm2eTPM+PbKF9nqtL5znD53kEyXXTnaxuugv9d8YVj5WXaXT6EqzBxYVE0BSAuaDZPlcAzM8l0Pku7vdp8dZTf9s2uQJv3WrbXIG3arZjrsA2DXmugDkY8dP0HK/VAF7FJULNobdRHk7arr1im6Cz+32rlyoZP35Stzn2bDx0yRJyeb9YznUHWgfj''@;'; put 'put ''Cou6WAXRiuXAk6W04FC9c6K8c5GNOyeKuiVEKzBQPiK0JcmjftPGvWWjyi27DbvwFq3YEeN227a1Hd81U6C2mm2aHvyZS50P4LfKLMcvHhzfLsEjvhTeMd1814x2c5aHNly5c/65ijfPKrwJfL24A29eVHgT6+s4b9YAb9K7AqrQFzMWNxaQywzKwETvIpS3FgA17KSGnnySG2iQT04zMugJs/O2''@;'; put 'put ''HNhEaBMNPYh5O20yNZvA5WObLa00NJYIJh5Mtoo67HSbqNfpFXfYI+rI0zsO8D771n3wOOm9B5uy4Hpy1yCwvP5OltffgL6WKa7BeqHWSQx6ByaGXFKfNkf/Wo32ViOGiWLDSVBcgGFaUygImgUdryzkuXvIgxQs1efb6A3kprdqlKndHp6lBqIjqmYCxROV2w2onhUbuAFTNLKh2YGStxYguCnh''@;'; put 'put ''4/gW2k2052sSAmXVRZuzCJv1o2l1mUKf2xhg9MfupGA0mpZp9IotNOoFG0Zgtuwst2XJxBZ7l+chtOTyEI5uo4d4rPyuXKz86AhS5TC8nMtzMKG/35LDwNqy820WlweYm7fLowAb7BPbtm3Px/px4W4k36exh92nEaDnM04QRwWwrYVA4sxNltNP8nH1vNMELQKBYn/Qwe8nYtkEm8IQm67fIPeM''@;'; put 'put ''3jatt+ViD44j18n3cJDz7NYNS6kcbPB53PecVF/Kwec6AHOdA7/Ij27iUtpSrIdNETEW/FiH6ZlNEXviZ5Fr4FE8LAd7y+RKF1pZsk18t0p+TWO6ueqTjSFdY4CWuIW9oirEvbUSJZmL4pI5FkRS16UczruvwbLNBSqKkwh7xe4KYfTYynNe8NgWOuK1KFRm7mW0IKLvqPJczip5LvD83Vva8rOH''@;'; put 'put ''i8rZAxbnkartai5HZgXdsIWO2B0ejNY6ZFtrS56bXP9BaW2B21ryeSNvu6q0Bd/32zu0fU5uS+OBH1a1PZtrq0dnd2h7URkX69sY3bC6WupPF9I4BM1IpzU7LA7BCmDIAWq9exhRF6ICe0C57kpVDmvIl8F+fkvtK80bP0wuvs27PNz0Lo/PzK72j4/1kYt37t69fR+5+iSCbgWeOy1XJ8l9pJOi''@;'; put 'put ''v6tvbLx/dZZc3L37TrmPEXwFeQ72Uc7GNxKajz9iABU5tF3+eAEyB4VcNr4ccmJOycPjlY2OVGlpytFYMVFLRqoqUg6Xy5GqqGLjTKKHWKwlxMa5ZG765kx/Jbs/HymRawlGsEOoZLUEzaxXem8OzaZf1WIBOHw2VwQqvK2KAvX99Td1dUUinZ0ReoE6/SIj/PdIV4I/cPt4jvweQLobWVErm0G0''@;'; put 'put ''EBZjodQyomWVAOxWGMDpLJOEAn0zwaumAi6NXFUg38OuCjLf0FHh7s8Flh9hUSG3HFLmd7mTdnw7eQFG7mHjpp3Qs4FVaTkwHtJjYZAemJNZqk6BfleVKzSIMMGMQxfoUK1MHIiafMoVy/SGdK4y/bjAV2x1m+xubbpo2sk+29y6tGWGdNqsBQUVXsM7+E/9DXw/uvB/sFoIEZXyigEtIGeIuran''@;'; put 'put ''7bZcDYVb9AflogicPfCBQfKK45YPOd7J+K5X+tn6k+tfAqYKsB5K+F3kG+u0Arm+xI2Xkl/ggU1PVVV4nQctWQAzJx9vUuQj6sV1O8jHVxT5iHrR4wht0/YYfvot2x7DXaq2q7m2K7h/i3zkbZ/LtV1BX+f+7fogPc9Qn4W8+TtuP7z5O9l+iABMmPnGQzLM0wyGqGB4rP3yXD8FQA3bx9pfyMXa''@;'; put 'put ''C8bQtjmQvei9O+iGV3Ln0r0HuO5tRP9GTLjjre+Bf1WqwR1zShuh/W20EfRv/l5p040/gy6SzwLNlDF6GdpcEMfpxa7Ey3ls9oX8Bfbk9g032DPbB38WfZs8CCu2AAZivLaNxHK1bTAm/ms2Zjm90am8EOh8QyGTwIRaoDhgYzdIbRxbu+NUsG6HaVWpPvP54UfIg0VhPj82z3+Gedpy86RkokyY''@;'; put 'put ''YvFhvAvWZNmpLojWxbO6oE118Y+3+nzwr4X+exg+eenvXvjA8dQLdPNOdB3sPTgyRX74/s+Mhq3AIwjkQGT9d5ozqr+P0gXUOIt+yfMc4xasLeR/vkSPdWZsNOmM6j95Yi+wCSaTsGQ1FIka9V9KSb1FQ/ZXT3hrkbYW5L+X0rJtu23+YsqWtuCBNI2OZjLKX04ZnR2d2b0rk82MDPTFumKdzU3b''@;'; put 'put ''/hUVx//gr6hUbfo9oIKtavqT/8IKHskqv4xEpfPK31v5K/oh8af84ZX854mG3B9hyf8xFgzWfRKX4L+jN+Y8AQZzrK4LuwF3gft233337jdftD9xwcFrWQGuQoETGFw47RZrP/jB3Z/+9OCFJ+wvvsx0wS/kO3SjaCIzWuYhGnrHgIlZ6RpQcOBbLxswMWJsorUOuRoXM0tO5REQ+B5FDZG62hqr''@;'; put 'put ''LQjOoNUeLKDBq9xFQ2HwFFnmSSrZSfKVlTRhDJDs9rKQKitvSdw6NPaeFffMINEM7y9Zvm1ELmkZuNaLK6WXYCGt0vcrbspOsmt3u68e7C8uACXee1k7K2gZ6+ovK7Hb+gdmZZnlJQ58Pcg53ROE1hDYc7d7X0/v9WaGDJgyAkhdr9VLhLU1+pXLXWiR72LQP1ViL9CS2DZ3PW29K6Hl8CXuSvjj''@;'; put 'put ''3h2vSpBj9i1UxuOYfObw+Vwsv4XqLvZcdc7Knl/MPRevQ9vBo5Wr1M/z/ffKfip/flcO/ugx5T6KPeRdgAMvigMOqn02DDjY7GMpiMh7WIHNKHkX87jUaJE9rnWkQg93v9QIkl2vezfnPrD5Un+brwP87U+p1vFCDh8FR3M5/Og8u3NGoYOk1T+m3B6Dad4bvNdufa9dm0D/D5D8EiIAAAAAAQAA''@;'; put 'put ''AAEAAA8CG+xfDzz1AB8D6AAAAADTwZ2GAAAAANS+pOv/Q/7oBHUDyQAAAAgAAgAAAAAAAHjaY2BkYGA++e8KAwPLov/O/ytYShmAIsiA0RAApfIGqwAAAHjadZQ/aJNRFMXPvV8GRRysWFFsazHWJkSa1thqwcY0xVSTSFtrg0IXcVARsaCp4uJSsQ4u4uRkEF0s6uRW/wzi4K6TOElUWmgoWAr1''@;'; put 'put ''89xnIjGJCYcfefnee/eed74ny5gEP5KlWqkdyMhrDGkBQb2IDi+MiD7EbqxgSC6hnwrLfezXcSSkCUdkCjFZj6Q88xf0JXolj2b+16Wj2KXT1CS6NY9ePYU+PcvxPPrc85yrGY5xHfKYrGKrN8W9Stiuz5HTOUR1lbyGtJ6nivz9EWmsIaOt2MKaJnQfBr3TyHkeFeL/s0g73uPzrF2vI6QLGLE1''@;'; put 'put ''AwfQpvPUE2zUW6zzCo6z5hWyS76hR0f8XzKBuB7GXp1BVneylhmuNYaInEO73mTtOQxjCYew5L/XTqRQwrB3BykbZ50RN49zZBZZKaFDbnBejn0m0OwNoUUj7G0c23QdeuQuOqUFF8iwvMJB893tOY2Y1SgvWEsbQjyLuKvrNoL4iQEZcONR+rXHedVAgSbS/DPvqoQ1/4P5Ry5SX73NCFe8q5UG''@;'; put 'put ''kXE0/6pl/tFnnlnWedVA3jxpvYz9K/r2jv6lyCL1Ra/y/Cve1cpyYTT/qmX+mc9G69f2rKX1bvtXaDniuVi/+qDsy5jbpzEta3beZdKrz6z3E73rJn3yqPXhMsgcWA4tC395Bu0yiHbz1vqrY8jVEKkwsAHRwCbuy9xadurILFue6sh8u4xVaOdjHv2H9g64HNoZmn/ld8HyWEvLuBSYPdNTxPGd''@;'; put 'put ''PEElqDfo1zDH4Ccra9ayztPynrIMeMU/9w1WqceAxhHzLvMeaSrfKYvkIvkIJ/Ut7wreS4EC38MkglRY5/wfLh8e5/JcG3yzyP4Gj5fwtAB42kXCXUgacQAAcLuuM78uMzvP23mfep95nv/z7kEiQiJCIqInieHDiBgxYsSIiIgxxh5GREQPESIRsYc9DAmJESEj9hAjIkRijJAhEhIiMUaIjNjL''@;'; put 'put ''YPx+Nptt8Z+87WOXrSsLUdA2VITK0H33XvdZdwOG4DA8DL+FD+Faz2jPUk8JYZAUUrRj9hn7nH3VnrcXe+HeusPvWHAUHA0n7kw5t50lZ8WFuIBrxrXmOnDducPudfepx+vRPfOeDc+Jp4GiaBJ9ii6hO+gxWkFbfc/7Hr0T3mq/3v/GZ/NlfXnfn4GxgZcDFT/ln/eXB0cGlwfPMRibwhaxHHYe''@;'; put 'put ''gAJaYCWwHbgJNHEKX8CP8YdgIjgazAZXgh+CF4RGJIkNIk8UiDOiQtwS7SejpJfkyAQ5TmbIBXKN3CT3ySb5GPKGuFAiNB7KhJYpmMIoiUpSk1SWytEQjdIELdCAHqHTTJppMR0WYX0sxSqsxabYKbbEfmOv2RrbYjscwk1z11yNa3EdHuF9/A6/zx/xJf6Kvwkr4XK4Hr6PQBE0wkRAJBlpRDoC''@;'; put 'put ''IuBCWHgldES3iIuKaIkpsSF2JEQalrakA+mz9FW6kmrSbxmRcXlCfifvyodyQT6VL+UfclNuK04FU+aUW6WtwqpXJVVNTaqTamZIj/ZGiagQLWqz2gttXdvScton7US70L7HtNhBrBj7EivHqrF7HdJRndGH9BE9ra/qOb2k/4qT8Wx8L14HCABgDEyDZ2ARvAYbIA8K4Axcgp+g+Z+BGIyRNmaN''@;'; put 'put ''PePIqBoto5WoJ9qm21w135u7ZtmsmnfmgwVZqEVY89aStW5tWvm/amzATQAAAQAAATwAYgAKAD8ABAACACgAOQCLAAAAkAFBAAMAAXjahZLNTsJAFIVPCxqIhKAxLrpqXLiTvygYXGrcCGoklp0JSAVisdAWE1/FNzDxQfx5Ajc+g0uXng63CAYlk2a+mXvuuTO3A2ANH4hBiycBHPIbs4ZNrsas''@;'; put 'put ''I41r4Rj2EAjHUcST8BKMic8yc7+EEyhqhnAShlYVXsGOFnmmYGkPwhmsa5/Cq0jpceFnbOgZ4Rfk9S3hVyR0S/gNaf1yzO8xGLqDA7gY4B4eeuigy5ObeORXRB4FlEgtRk3qukrjk+uc+8zymXuLLGqwmecpJxeOqMLdNnlE7Tm5Q3LQpK7AnLwa+7jAMRo4Ic1z2Z5xWVzH/FXJ4sqjqqdOak5V''@;'; put 'put ''XlzN4nxFjUtV2IFTOthT9ZrkM8bDWJVz+58ehX0NuKogx3E34+wq3/7ENcuYy3WU40tWh9GAuyP+kUiT4xzV7Kt7/tTMzb3jX3vRrRvkFt9y6BBMOlaT/h2pqMlRUrEyz1ZgvIJdvpjo1ZRxQ53NCgPpv01vn9mRax1D7vQY8xhzvgHFfYVjAAAAeNptk1dsHFUUhr/fsXfdNk7vvVfHXvfEKS5r''@;'; put 'put ''x7FjJy5x7MRJxrtjZ/F6F8a7cWy6BAIeQPDCM+UJEL0KJHhAolfRewfReaQH79wJXiTuw3z/GZ3znzP33iELd50bYB7/s1SbfpDFDLLJwYefXPLIp4BCAsykiFnMZg5zp+rns4CFLGIxS1jKMpazgpWsYjVrWMs61rOBjWxiM1vYyja2U8wOSiglSBnlVFBJFdXUsJNd1LKbPexlH3XU00AjIZpo''@;'; put 'put ''Zj8tHKCVNg7STgeHOEwnXXTTwxF6OUof/RzjOAOc4CSnsLidq7iam7mBO3if67mWp/mYO7mNu3meZ7mHQcLcSIQXsXmOF3iVl3iZV/iWId7gNV7nXob5hZt4mzd5i9N8z49cxwVEGWGUGHFuIcFFXIjDGCmSnGGc7zjLJBNczKVcwmPcyuVcxhVcyQ/8xOPK0gxlK0c++fmLvzknlKs85UsqUKEC''@;'; put 'put ''mqkizdJszeFXftNczdN8LdBCLeJ33tFiLdFSLdNyreBzvtBKrdJqrdFardN6bdBGbeI+7tdmbdFWbdN2FWuHSviDP/mSr1SqoMpUrgpVqkrVqtFO7VKtdmuP9mofT6hO9WpQI1/zjUK8y2d8wId8xKe8xydqUrP2q0UH1Ko2HVS7OnRIh9WpLnWrR0fUywM8yCM8ykM8zDXcpaM8w5M8pT5+Vr+O''@;'; put 'put ''6bgGdEIndUqWBhVWRLaG/HWjVthJxP2Woa9u0LHP2D7Lhb8uMZyI2yN+y9DXGLbSSRGDxqkKK+kPeRa2YX4okkha4bAdT+bb/0p/yLOyPauQ8bBdFDaHE6OjlkktHM4I/C2ee9Rji+cTNSxszawcyQh8bVY4lbR9MYM20y9m0G5exl0Utmd6xDM92k163IW/w5shYRjoOJ2KD1tOajRmpZKBRGbk''@;'; put 'put ''6zQdHNOhM7ODk9mh03RwDLpM1ZgLfyoeLSmtDHos83WbpKSZpsebJmWY0+NE48M5qfQz0POfyVKZkb/H28GUYUFvOOqEU6NDMftswXiG7svQE9Pa129mnHSR3z992pPTp52eOFhW5bIsWOnrHXasqWs1btBrHMZd5PVGorZjj0XH8sbPq3Rdaai+2mONxwaPjb4+YzThIv02WFIS9FjmsdxjhcdK''@;'; put 'put ''w2BTdijlJNygoqkhxyq2Ysl8y53FSPfup2WRNf3Z6ThgnR/QJLrd07LA+32MNvua1nlW+jRMcjIai7jJudbY1B5FbCcvYnvqH7dltyEAAAB42mPw3sFwIihiIyNjX+QGxp0cDBwMyQUbGdidNkkyMmiBGJt5OBg5ICwxNjCLw2kXswMDIwMnkM3ptIsBymZmcNmowtgRGLHBoSNiI3OKy0Y1EG8X''@;'; put 'put ''RwMDI4tDR3JIBEhJJBBs5uNg5NHawfi/dQNL70YmBpfNrClsDC4uAP4cJWAAAAAAAViY9GwAAA=='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=Metropolis-600.b2801a38a74ec6c1-woff; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''d09GRgABAAAAAFaEABMAAAAAouAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABqAAAABwAAAAcfNH55kdERUYAAAHEAAAATQAAAGIH1Qf8R1BPUwAAAhQAAAcYAAAOdkDCfpZHU1VCAAAJLAAAACAAAAAgRHZMdU9TLzIAAAlMAAAATQAAAGBpEq8JY21hcAAACZwAAAJsAAADnndDD7Fj''@;'; put 'put ''dnQgAAAMCAAAADAAAAA8EhEB8WZwZ20AAAw4AAAGOgAADRZ2ZH12Z2FzcAAAEnQAAAAIAAAACAAAABBnbHlmAAASfAAAOMwAAG8kHd7Yl2hlYWQAAEtIAAAANgAAADYLc4gRaGhlYQAAS4AAAAAhAAAAJAeRBCBobXR4AABLpAAAAowAAATauY40J2xvY2EAAE4wAAACdAAAAnrU+7n2bWF4cAAA''@;'; put 'put ''UKQAAAAgAAAAIAKUA1BuYW1lAABQxAAAAY4AAAN6MgiIWnBvc3QAAFJUAAADoQAABiGXFj2KcHJlcAAAVfgAAACBAAAAjRlQAhB3ZWJmAABWfAAAAAYAAAAG9nhYmAAAAAEAAAAA1FG1agAAAADTwZ2GAAAAANS+pvV42g2MQQqEQBDEEkf0MLPof7ypL/DofXfV/z/AIgRC0TQCLR6cdFRkjVso''@;'; put 'put ''7HzTv1D4B7m4048DOlopNlv645SeXXLT51sXzSa+W3AF3AAAAHjajVcNbJbVFX7Oufe+X/sVainlR+gYIYQhaTogTJQgGkY60xRUxlw1aLbpnIMhjDHCNucKc2AWAps/XSULQ+10kgqsCnbWkYYwRtxCZBLDoDAGFapxMoQtBpV3z3veD/vWttM+6dPTc+9733vOee537gcBkMc41ELm1NQtQBE8''@;'; put 'put ''PYhjOP4RKNziby6/DxVLvr58MSqXLF6ymLNBfzKazkjY8bk8hmMMJpjHYTzqXEs6Gi2zVSXagIgPyeAVfGKU+QIqPoKgJt5ADpiJ9fgQsYyCchucJyOlEyUYxJ2djTviZ+PD8TEM8BOfG3DkUL/eLlT2+v+t+JEBV3hzwJGjA4/E+wYYeTY+Hrcn+Jj/MH//kqDv2+PX4o3xRuZ1LDM9gdn6HKGo''@;'; put 'put ''Jhw+T3hMJQK+QESYTuRwLVGEGUQxczuTlVpJCFbjZ5y5jgjM+Hr6dxKCFwnBHwjFQcLjNcLjGBFwiojwBhHhDBHhLJHDOSKH94liVu9DrhYTeSmTMhRLuZSTK6SCPIqVzXPtyVTJeD4ziRDbd7pjtR0727G3HQfMIYpQQxTjRiKP+UQJluL7XCGJJLJIIoskYCMe4/xGohi/wibOfwK/5fxniBJs''@;'; put 'put ''J3LYQRTh90QOrUQRnidyeIEowi6iGG1EMXYTeXQQeewh8thL5PEnQvBnQiw7EY4TJfgnkeZFLS9qefGWl2B5CZYXb3nxlhcvI2QE83WlXElOchS4ajUzNIE1rmZtp7Km05mZGczIUizDd7Ec38MK1nI11uCneJBZWMfotzOi51nJF1nBg6zcMVbsDVbqLHfyvp2sMr63Ijlf+oCdw32ynHEPpr7a''@;'; put 'put ''qbuN8X/6UauN8O+ZAUfeJC708+T5TzpPcWf8r/gf8SM9Jy970uIz8dZ460f/dWeft2eUJzjRhJgmFF8hHG4jPG4nAhYSERXxGOckahBTg5oaFC1EhG1EZJUWq7RYpcUqLVZXRRfhcJpw6CYcPiACLhGRDJEhrOtQGUoeJsPISUXFKioyWkZzfUUVriBKMIQYZEoXU7qa0l1B6V8iskr3Fk+UiSdn''@;'; put 'put ''SncFpfdo3FtU3qLKWVSXlZ5qPFX3S8TAuk6i9aZZLUSYKNdZnDnTrzP9aiHmRMVaiDzRsmbizyraWRZyMlmu5duTT68aRjif9bqNcS1kJI2MpAmPM5on8CSeQjMjeoaRbONpbONuO7jLvdxdF2vQzZ1d4g6G8m0j+JbRXHGM6VlRah2lPP4J7XLMw/W0xOzr2Yk6ozHkk8z/Hlkr6+VhaZLN0ixb''@;'; put 'put ''ZYfskpdlj+yXA3JIjsgJOS1vy7vynlxSr3kt0+FaqeN0olbrNJ2hN2iN1ul8rdc79W5dpMt0pd6va/Qh3aCP6ibdok9ri7Zqm+7WvfqKvqqva6ee1G59Ry/oRQcXuUGu3I10Y9x4N8lNdle7mW62u9HNcwvc7e5r7h73HbfcrXIPuAfdz90vXKP7tXvS/c5tcy+4l1yH2+f+6v7mDrvjrsu95f7t''@;'; put 'put ''/us+8OqLfKmv8KP8WD/BV/mp/ho/y8/xtf5mf6tf6L/h7/X3+RX+h77Br/Xr/cO+yW/2zX6r3+F3+Zf9Hr/fH/CH/BF/wp/2b/t3/Xv+UvAhH8rC8FAZxoWJoTpMCzPCDaEm1IX5oT7cGe4Oi8KysDLcH9aEh8KG8GjYFLaEp0NLaA1tYXfYG14Jr4bXQ2c4GbrDO+FCuBghiqJBPB2rdDu5wXi2''@;'; put 'put ''ca1xU8JYZ9xqnjXGjRm+xXiK8SxjW411Suz6zGqTlJ+pcpVxtfHchLHaeKe2kxvMf10P45TxxcxTzcZVxqXGt7hF5BbjVf2znsvEWGv+Pow7jNuN1/Ww3JXGbvYS4/3GjX05zcAAO6k3nqQdn8T6y1656uiP8VXjncare5h5+zT8f1Zmbnt4VWbPvexMTRvMf5X5s/Zsy+FvzL4rk/n0Lb1sG03r''@;'; put 'put ''m/U3mT03tW1Oqpm0OmnUqT4LdsGfzGk1e6dbeVm9BY11mn00sQs1TXOSajvNTNbfmLEPmd1gNTpqOj/Vo0BqtePyiUBf/xSzL6a2zUlVnfWnJ2hWRjPVmcyn9g6zF2WqYHnTSvM3mz9VWlXGTrNamsl8X/u82T+y6G4y++9mZ1eujbclK8fPfaxS2TfOLZzujk/BvWcqPmv3UvDeNZFZSW6nnl27''@;'; put 'put ''il0wuWFHmMKbWA7TcA17WNK5S9m3r2NPTzr3ELujllvnHsrvVbXsQ3XEMNzEPjecne5WfvepJyqtl3+GXe8Odq2lvLuNtdvbdHb0zVxvCzvfXOt9X2b3a2eH/CMO4Fu80Z3FD+xW2YTzEvA4O/FotFhPbeN+Ra6w72YRJF5hKmzAPeS17HYlGMl3jWdEk3E1dz2bu5yHBRw9aNrtMj5tbGcGRzJ8''@;'; put 'put ''1PjHxs8Zn7CsjTO7BF/ke+7FtyUnRVIseSmRwVLad0f/A3IFobcAAQAAAAoAHAAeAAFERkxUAAgABAAAAAD//wAAAAAAAHjaY2Bm8mWKYGBlYGHqAtIMDN4QmjGOQYTRDMhnYGeAAyQmA0Ood7gfgwODguofZun/xgwMzOcYDRUYGCaD5JhYmdYDKQUGJgC8iQorAAAAeNq1k1lQjlEcxn//t30R''@;'; put 'put ''KhT19vZp00aiFEX2pci+lKzZsq/ZGusQQ0VSyJ4koxkTU1O2G+64NWOMvs+VW+4MHcdXTDPMuHJm3nPec86c55x5nt8fcKHrC0F0j1TqmTjnrlKsxyWMw42BlHCLOu7SSBPNtNAmHhIggyRMBkucJEmqpEumTJUcyZNCKZISI9V4Zbx3iTKPm63mE/OL5W4FWsFWqGWzoqxhVrp13+Yf+U0pfYfF''@;'; put 'put ''jR7aj2njmfhKfzHFJrGSKCmSJhmSJdmSKwWyQTZr7ZfGW619yGwx283PlmEFWEFWiFN7qJX2S1t9VC/Uc/VUtatW9Ug1q4eqSTWqBlWv6tQ1VatqVLWqUpWqQpWpM6pUneh805nVmfT9k6PcUeDId8TYB9r97D52L7ub3ej42vG54/CHkHfJXV79p+ZueDuT4I9bBKP7z/iHRtdJF1x1du544IkX''@;'; put 'put ''3vjgSy/86E0f+uJPAIH0oz8DCCJYZzxIpx6KSZhOJBwbg4kgkiiiiWEIscQRTwKJDGUYSQwnmRGMJIVURpFGOqMZQwaZjNXMZDGeCUxkEpOZwlSmMZ0ZZJPDTGaRy2zmMJd5zGcBC1nEYk1aHvkspYBlLGeFfv8OdrKbYg5xnNOUU0YF5zlHJVVUc5EaLnGFy9Rylevc1BT9ZPQ2DZqle5qmn20V''@;'; put 'put ''q7Ud0WzgbLc361mj+12c+O1W4V8cvEA9m1nZY2UtmyRGj1vYzjHsOCRc8xkpUboCIrijdx6gaZYEXQ/x3WeKnGHEso29bGUfezjAQV1L+znCUb11mFJOcZLXupp6sU68xFt82Ch+mn/PH5DNquh42mNgwALKgTCDIYNpPQMD024mVgaG/yHM0v+NmXb//8J0j0nw/5f/fiA+AOYLDgp42q1WaXfT''@;'; put 'put ''RhSVvGUjG1loUUvHTJym0cikFIIBA0GK7UK6OFsrQWmlOEn3BbrRfV/wr3ly2nPoN35a7xvZJoGEnvbUH/TuzLszb5t5YzKUIGPdrwRCLN01hpaXKLd6zadTFs0E4bZorvuUKkR/9Rq9RqMhN6x8noyADE8utgzT8ELXIVORCLcdSimxKehenTLT11ozZr9XaVQoV/HzlC4EK9f9vMxbTV9QvY6p''@;'; put 'put ''hcASVGJUCgIRJ+xok2Yw1R4JmmP9HDPv1X0Bb5qRoP66H2JGsK6f0Tyj+dAKgyCwyLSDQJJR97eCwKG0EtgnU4jgWdar+5SVLuWkizgCMkOHMkrCL7EZZzdcwRr22Eo84C9IlQalZ/NQeqIpmjAQz2ULCHLZD+tWtBL4MsgHghZWfegsDq1t36Gsoh7PbhmpJFM5DKUrkXHpRpTa2CazAQOUnXWo''@;'; put 'put ''Rwl2dcBr3M0YG4J3oIUwYEq4qF3tVa2eAcOruLP5bu771N5a9Ce7mDZc8BB3KCpNGXFddL4Mi3NKwoKTHS9RHRktJiYGDlhOU1hlWPdD273okNIBtQb60yi2JfPBbN6hQRWnUhXajBYdGlIgCkGHvKu8HEC6AQ3yaAWjQYwcGsY2IzolAhlowC4NeaFohoKGkDSHRtTSmh9nNheDKRrckrcdGlVL''@;'; put 'put ''y/7SajJp5TE/pucPq9gY9tb9eHgYBYxcGrb5zOIku/Eh/gziQ+YkKpEu1P2Yk4do3Sbqy2Zn8xLLOthK9LwEV4FnAkRSg/81zO4t1QEFjA1jTCJbHhkXW6Zp6lqNKSM2UpU1n4alKyo0gMPXD8OhK0KY/3N01DSGDNdthvHhnE13bOs40jSO2MZshyZUbLKcRJ5ZHlFxmuVjKs6wfFzFWZZHVZxj''@;'; put 'put ''aam4h+UTKu5l+aSK+1g+o2Qn75QLkWEpimTe4Avi0Owu5WRXeTNR2ruU013lrUR5TBk0aP+H+J5CfMfgl0B8LPOIj+VxxMdSIj6WU4iPZQHxsZxGfCyfRnwsZxAfS6VEWR9TR8HsaCg8dsHTpcTVU3xWi4ocmxzcwhO4ADVxQBVlVJLcER/JsDj6uW5pzUk6MRtnzYmKj0bGAT67OzMPq08qcVr7''@;'; put 'put ''+xx4ZuVhI7id+xrneWPyD4N/ixdlKT5pTnBwp5AAeLy/w7gVUcmh06p4pOzQ/D9RcYIboJ9BTYzJgiiKGt985PJKs1mTNbQKH08EOivawbxpTowjpSW0qEkaAS2DrlnQNOrz7K1mUQpRbmK/s3spopjsRRnMgCko5KaxsOzvpERaWDup6fTRwOVG2oueLDVbVnGFvQfvY8jNLHk3Ul64KSntRZtQ''@;'; put 'put ''p7zIAg65kT24JoJbaO+yimJKWKgiPghtBfvtY0QmLTODLoEiZHGysg/tih05ooJ2At960irv20Ltz3XyIDCbnW7nQZaRovNdFfVqfVXW2ChXr9xNHwfTzrCx5hdFGU8ue9+eFOxXpwS5AkZXdr/uSfH2O9btSkk+2xd2eeJ1ShXyX4AHQ+6U9yIaRZGzWKURz69beDJFOSjGRXMcF/TSHu2KVd+j''@;'; put 'put ''Xdh37aNWXFZUsh9l0FV01m7CNz5fCOpAKgpapCJWeDpkPpudmvCxlLgsRdyzZNdF9B08IR3ivzjEtf/r3HIU3KLKEl1o1wnJB20fK+itJbuThypGZ+28bGeiHUk36BqCnkguOP5e4C6PFekU7vPzB8xfwXbm+BidBr6q6AzEEuetggSLKt7STqZeUHyEaQnwRdVCswJ4CcBk8LJqmXqmDqBnlplT''@;'; put 'put ''AVhhDoNV5jBYYw6DdbWDrncZ6BUgU6NX1Y6ZzPlAyVzAPJPRNeZpdJ15Gr3GPI1usE0P4HW2yeANtskgZJsMIuZUATaYw6DBHAabzGGwpf1ygba1X4ze1H4xekv7xeht7Rejd7RfjN7VfjF6T/vF6H3k+Fy3gB/oEV0E/DCBlwA/4qTr0QJGN/GMtjm3EsicjzXHbHM+weLz3V0/1SO94rME8orP''@;'; put 'put ''E8j029inTfgigUz4MoFM+Arccne/r/VI079JINO/TSDTv8PKNuH7BDLhhwQy4UdwL3T3+0mPNP3nBDL9lwQy/VesbBN+SyATfk8gE+6onb5MqvNn1bWpd4vSU/XbnXfY+RtlM7osAAAAAQAB//8AD3jatX0JdFzFlWhVve73elOr95bU2lq9Sd2t1tJqtfZ+Wmztq21k2RaysC3J2GBbZrOxMeCQ''@;'; put 'put ''BQIhJM5kg4SQYzIhYJZAICQzWSYhzoJ/fuYPJwmTSeCfJH+yTD4hk8mAnv6tqvdarc0488/YUqv7vVv1qu5+b92qRiY0vZzEHxd8SED5yI0KUQBVoRRqRu2oDxXKnq6OtpZ0YzIaCZYVFXjsNqOOIFNtTO+3+yV30h1wJ1OBVDIlsb8SvNWu0mv0L70DV1LaexWGNUgnU/jjyjdx+xudXee7us6f''@;'; put 'put ''76rw+7u6uvZ3+e86v7/Cv99//vx5//79d23den5ua/kPhF93+0N++LljoWLr1uAsvNvqb+uq2H+yyVszduzY48eOjdXM+2v88IMQQVuX30SvkwtsbiG5AmGMphFC1kFEiDCjw4LgFYZ0Ol2+zhqy2/SSN+ZMCgFPONXQmKz3uF1iYPS+ku2GRKKiLFFdTi4o9b+r8ZclEmX+GoSWl1EnPocfJhds''@;'; put 'put ''FciEkE2A11cRfW4FvNwOz/WhMtQvb80XCdILBBOED5ix0WgdtNryBEkyTFtMxGCwD+owIflkCKGy0pJiaOUrKizwwvOd9uw/qSSGpaQUkAJp9ptOst+kxH4lepOQ+EHvQnQ6eiZ6dXS/Z398zjMP787AlXnPt87Ez+DHH98FCD2/6/Fdn4N/ux5HgJmy5edIL/kzKkFBFEMJORaL+suLCr0el91s''@;'; put 'put ''MkhWRPCAHiPcD/PCBM/CBL1oqNRuFwBdQRGInApH0h5vKoEBbWmgtccrhSPuUuxGcNWK3Y7GVANcIL0nDu1+976+gcn5+cU9u2+4uqdn4Nhx5Vg4Goy/2ljTdGRRkrttu6e6nd/07ZgYXzS3d1jG97TavlK08yrsDOafN9aUKkfrK/wR29NIj6qW/12wkmeBsk7Acg1qRd8dfLJgbKccM2O9CWNR''@;'; put 'put ''j+eRiAxG0bCAdDo0QzClfB7gX5ixSEQQ8oUh3+CTEWhSc9kmCEBZO2nGgiXJKw355OQGLQgBWNoMbdxqakoO19aWl7tcCNW21rY0NpTXlCcqw64yV2lRgdNht8FkrGGr5I45KDI7cLIesOiy4gBO4gBDY6BCdLs8SbTmfgdeufepoWh0uLZuOBobqsPv36OE9iwmEoFgdSKA54ZicLFuiN4KJmoC''@;'; put 'put ''AXpxKjFaWzeWSIzBazW+amkcfzYdizelq2NpZSIxWlc7VlPDIAbT8VgTvYUo3/iX/0jeRb6EylEcNaIOubU2ES4rKS4qMBkFUg68LpABytd4BsTOM6gHYWOYAeaprvb7qxurU/64PxavECVPTB8RAxWcgXJnBre8jWmvKHkRnZqXT9ORDkeArWCqpHhkarFzvqVvtLigbrKhYXvN0Lb6vqqS6brE''@;'; put 'put ''9conEp7CtppomSkz2ROL9dTljY/VTrV3TwcrO8OJkUT1cE3zYLh1qH0gvk8+TlrigcLa0oJ4oKJ66S+p3WMFzcG6FoQwlXH0LZBlC3LKNqpBGHnxkDtIYOCOFV0hBa5yR3y+CPA7fvVw0FdZ6Qse7kW0j8blq/AY+QrKQ+IzeXpcG2MqJu1ls/BKn1tcPJgZHx4ez+z6+dmz/zLete3CkSNPbOtm''@;'; put 'put ''bcPQVtbaStCWYyGS5ggKTwwPT2QOQg/z2544cuTCtq4x6OPnY6xtAu/H+8jfoXmUlhtmhnqaqgCXMIcBAWMdRiDW8yLW68kM8K5HD/oHIOemJuWOupqAPyZRRoSBphvTogT/AxXhCP/YCBTg7ymlvB5vKfayzxoqRKkRbqXpRy+7YMUSJSaFdLvgU6ACOkjgCL8gBl50mUWSVxBw6Y1Gm05vLYiW''@;'; put 'put ''W62l1V6rXmc3iAZvhWQ3E9HsyrO6TFgU7C4h4OCgBslerS9wuwpqXZIhB1oQsQlEY7/D4kuU5hs9frPOaDSYHIa8PJMomvKsBodZMph01nLRZsgvTfgsDofFVasrdOc5hDITBTYa8nWmfCIajaLNorMaDCYN3l2oq3VZHBTHHWiWFJI2ZEZhOYB0AtbtAF4HzYEFdADUAZ5GgOthpsRtolQUwwFq''@;'; put 'put ''DVPUKiZJ4Zeu+xL84KIXXlj48pdpf5nlRfQL9EFkRV4Zxo96NZ4DwQk6KM+BSFTk4Ho8YSmrTpSHE9XJaxO1NeXlifbayu2NtK869M+4A/eBtBbIbkQ72kH5AkaEYEQ22pnT7/bX4Tzlj7jvEOOZdrCZP4Hnm6n1p1dAC2LsxZQ7zMgUFIArci3kIdU6WrKWES//Zvk5/B3yK3iuXbbSTs/Cs2/g''@;'; put 'put ''D6SqDG85q5w/S3719iXE7GXd8pvkHvIiqL8yFJergBvZjLnWwGCo2QBsNjCyZbbSAg/Tk2B6Yrq1epCkGhLAXFSwSuFJhruHh++enHzf0ND7JutH4/HR+vqxeHys3rL7M/PzD+/e/fD8/Gd2L3Zcv3Xr9e3t9LWD4YASNg0yLyKfXACkFABfA1yrY5yPh+xOhjopkk7aAy/elPz6/lOkbHDn2aVx''@;'; put 'put ''xNrHYVJhmE8BisoRswmmA9xAyABDJ1OH1AGZRswG2b3BsE4qiGWwpsWlSKOq//IxkKd6SW7cUpvcVjk+92DPdZn+yftxWpHmvpvcHqtpqasdfHfjNR1bbu6+YZE9uxRwGYVnV6GM3FZYAM+pwJjA02EIA9SGg0E/AE/WzQBzwkAQ0s9QJeBl8l+FKoNBfzAkSYVAZapkkvXM7kippKdx7fAkFe3/''@;'; put 'put ''eHd8KLQ33d432D883NHX11Q3HhrY+8m+69v7Wtq3yzcMWTKpiapEU3WiBh/GdfFoKl41dKJ2R2PbhN26vbN1dwPng1J42Ql4N4G2q5ajFvA38ICohzlgBH7nHKCOmdh83ZDZbM4z54FMOWx0rCF/BCft1PMMFGIBn1Yet+Ct52ZmTv3k3Cx+QRk/dA5IGFF+zOkTAxw1wHOKKY4coAvzLESAzrEe''@;'; put 'put ''AY50AKEDuy4IZJob9dU4Ag+twu4MBhiOwPVRMVQhRagwSY1Zbrz/wMDU3o7BofaRjh0m/LzyVRHeLbR33TJiuXZqcktDSq4N4usWn4omr+neem0Lx0EtjG0A6OdDEdQnb7EBDuzAPAVYJ4SwXqcbEEGx6PSCbh5ljasEY9N0RHExjDBSHA74oYuiYChsAD8NqSOieoOpbIlLiQQfHFm28yTxIwc7''@;'; put 'put ''um7sv/fe4Xt2Ht/VHuiO1Q4ldOVXNxg7/KMtdYP5BTfiLzXs6+o+1PaVTx58dGZ4pqyseaE7VKU8WtFcnu5Mxj9M8ZuEiQSY/JTJxWBoMJMeqncw873B1wVvhzqQ2J/yu0EhPKA8jP+g/O97Sfvi1UsXqH8RBTx0qnhIoR650yUS0K4DUs70VS1hgOljIBDTEpWVFAOVqcqGmmqKh4pyioe4kaqt''@;'; put 'put ''jTwMFTM53pWXvgfbZCXUx/jXk1uHM82dWxa7uo/3dDXJQ70nB+tG+hsb+0Zq28djXRCwxMbbLTVTrW1T3oLRpubt8ertTc2j3gK4srMGP9QYrUw3VsUaBOVSU7y0poiQoppS6kQRVA9zHFqhdSnQF+itN4LAGgBrOpisHsRVT+aB6QWYoSB4BnPsgUZrfxmdYygYYrT2cFJz4QUrTD+oc3aA5eba''@;'; put 'put ''EWj99+uoLDPqN1MyV1KCkxdXU5lTXnkEyMzITefA7AWxgG3wUt1NdTUbXiEPsvQ8yLJYELJ4LR6HjRkRUXUtNCNCNjAoFepffESzLMpd2juIvZidJBaIvfIRskvIDoi6FRmfwvh5fOuTyRjlwzTaTkSyG/hQfEYk4Ds5UyF3Hnan8SXlb/BBHJn90dyDD84zuetAj5FC/CfgPAl1DD5ZBmGBA1Ev''@;'; put 'put ''VpjV4kY7Bs+/gHIyjeQQhBBkh6rIiTA89Ry18FSTUzVA/3fgnyoh9vunhZMLMJ4+GI9XG48A40lX45Tere/DB2E8l5S6Fx98cO5Hsz+i43Euv4lfAd5wIz9ql1s0nnAC+wtUmgQdEg7AyLjzRrViVkd5PB6/pzzkDQaZbnSqAi5FVrjevSrKfWJob0f9cGd/9Q29nfvT8+PHvBru79Y1V4Yb+waS''@;'; put 'put ''rfU7G7uvc+z5PysBMEHx5fcLW8gjSEYj6JLs9peXCQahGxsNDqwztrcREViYR1jVEPfqsHES1DhETVS7iibqEu5DquYCvWAwCDOgdO0GGpZV0UgOiGEwCob5d2ysB8LUUTUtIP385q0kSZxEoijNsOajEJAVdAITd450DvdthVlkwuFYKBgOWyTfOteiggYdWQXq8dKwhAtSPcVvjtdRzzx70CgZ''@;'; put 'put ''3LAibZ0X5ha/dnT+C/ubd9XVtluKRxKD050HW2q6nZZ5a57ZWu4rbqiY+sT03Bfm9jw403Yg5Wo+1u3vF3EiFpHDDdEbDnxh7sjXju19eHr8WFMsEo7tG+s+3l3lbzP0dTSO2orLKre37/jA9rknDuz5xJ6S8pKgH3snMrZYfay3qrqR2xYnvLwKelkCCxuTK41Yx4J7HXC0DqwrtXUQGVAPx8Cc''@;'; put 'put ''Xe6yFoB1lVgIGjFjUqp8seEeXAY/d8+eOHHqFLmwNP5r7Ff+BdAOUQd5H/SfD54P41rQX/AEEeRFryN66naoCRgJc8+YPquo0G4rLy30F/m9bluBvSBWbmCOKcO8pp/9mFnZGHY7tTdjeLx1T8NsW1fT/ozyGZxMtLYmvnQx2dmZvEguxEfr9jeU7G5q3FGLP1IXCtc9rvxTOhZL/wPVC9Wgdz8G''@;'; put 'put ''slWCGuQ6CONRoRlsaRGYWRAtVX95ViWJ4EIJKg6HwjRJlGUNj2ZHc+mOG8/v23d+78C7k1PlU3Udh2X5cEfdlH9n/XsGLLOfnZl5ZLa1YVso1nVE7jzSFQ1PpFoZbSjuvsV8HzeLJLKoYkG0iiqL2eUwuy3ucLmeokhjzhgOqUwYw/axN44+uW/fk0ffQMt9RzOZo313kgs7P7lv34M7j7Ue7O5e''@;'; put 'put ''aFWSFAcQmYLtuQDquEaOazqNKhDdNOgSa66Hyjx/M09DUX3iVvWb3e/+B7xPeRC/d+ktoift5xefWSQXFrmPpfVvRFVyWOsfeE3HetXcALhhREbaM+Uz1rM9oPV7mnb6xKLyOu+U0+1vgW5+1Co32YBcdvDNy7AOmAw6plpRr0OMzVa0InORwC9wAvECPADz23NM4noipgL4XThUd25w9tF9+x6d''@;'; put 'put ''Hfpw3VT5gWTmOlm+LhMZK38Mn1T+NdnOSdmWzJKyyHtam/dHGV4jclD1JQ+AD0vnTPNJ+WgtPjGdMfwm4ZV89LTyt6dP40kqVjik/JRcUH6NC6CXfmj1LZbLpHmInFiEh3EQiPRzYQRYO9iOfwJYG+Uk5vrjAe57weBmBGAoL0O9DeU7QzpovuLqwyiouD15umK7oy+S7DzVutBlkesngjX9Lfgl''@;'; put 'put ''pa7ncBun7yh0dZ7Ns1wuMRr0BBx0PIBZxkzg+Uynw8HtYdKOk0YcgNAxMHoaV39M+R2OfPz16dMwuSfxmPJD5XZcuf8feL/UqSiFfvXUd2SDpr2hq5GGOj3S2+100CHglaQdFFLg1CLw3dI3WXuQI8G6Mi5pg3G57Nq4fBA0BOxmoMDY6ddeP3Xq9dfomKbxI4D879G/Skrtk3yR8XKp7JMIWdej''@;'; put 'put ''I9sjhiEFWH/40KlTyjnaXwl+Hfp7XSmhck55WPnviHW52tl7/pprzu/tOJTJHOrgukdVOrOPzMx8dnax60infKSLcyzTO5Rfj7P8lptGqzAKEFUB09TFSrIcpmjNczny3Fa3PVwu0kS5P6t73IGsbu7Fsf4bu7tv7H/iNC7pHB3t/DS50LLQ1bXQ8iu8q72hof01lIsDF/Xt5Xqa7CZ6geh1oPQE''@;'; put 'put ''CJOzgY0uJ2vodrsj7nB1OEJVMNhyrxTJFWMYjS4dSXsbV2GFKMGKLV0DNUfb9mroUX7WMtW1J5DFDy67Nt42LAcrs3h6o2pkeKy1ez2eTgCerDCWpFybR+WaxorUdB4AR0SNFUWBMLGEIbvtQDpk9VMp98b8EYhN7X7V//KqcXUM49985q7TDG27hr6gDH6aYe1Xv2J4G14seJPjjctG2fKfSC/5''@;'; put 'put ''CqpEdXLCC5FhAVgsRHIxRj3DHKNViSKh6iDFGBVxHqpCaJMgq3Qfi3pUtvr9uZa++Vvbe/yd7WNzrZljvSO3N/ZUH0gmO/t23nxL+41j5ubGqemGSHGg0OqsHu5onWmsq9kTiaZClVUu39Rkx0yKjTWoxvKSmkPJhn886aG6yjgA8V8AJAa9ShpePQXh36Iqx/3AI49Ce/B/5VI1EY9x7tzcyOUK''@;'; put 'put ''ujSDTBUXD3g0HYb9d4+cTownG8YTp4bv3mkZuWcnvls52bSrvn5XE363ctPOe0Y4Xl0w1n9m8So8S8/iVdCaqsLkWgdcdq51jDQb78Pkn5Vf3KP84u6f/ITqXPj9MzGyvgoR0pUyeYK+TFTvg7Kgaz/MlLPJg7Zw2PTUklIFBD9CwIwDhe/70CPv/cyH3vfj0194HBS54sK/pb+gORSF8HFC7EE+''@;'; put 'put ''z3Qb6EajCF0TmsulfIe5aXE4HHaKVxhlBHw2IelNJ/FjaPnDzz73IbS8fO7Z5x7AO5XPvfkmnsQ733wT+jSoetyASuQikcpfVrmpkbqDLfUY2UhBs+EC5Q8f+urX7lP+7xngwMeVizitbFMULe6f1mw+xeNK2isb+2fTXg47G2mapwDA8Cfxrcr7QZ2/G59Z+qcZ/LPFGaWC2/2B5VvxCPk+j8w8''@;'; put 'put ''G0RmtiuPzMDOuv0DWPfww8rb5PvblnZsY7hd/vfl5/CPNslZCuD7ms7iXTxlSf2QW3Hd6vHQlAUbD9MD6ni0bBt15mjmlY4H5Y7HC8YiBX5U9cMPY53ydj15bNvbFzita/CD+MucJ58S9/fIHrAMLAsJI6MZ2RvUDMpTIupxJp2U3BcnP7770KFdwDu//+Y36ZyU5UNkYvlFeGg562OTHDDtQgIC''@;'; put 'put ''ELJ96QtbxvjzMySDw+QVaOtlbS2Yxq8I3eDAYIzYU9PeQGbxxh3k656P8vgiAjJLiJ3lM26XvYVY0BWAMXFAFFBWSkQ9sISoh4jQBSgrB3i9SGi4JuhmaDxQOGjAoohmVFb2gfu0HoQKJIPT/Lop2a2lQXiqJxgOOI2AW+RxA3JzTYRXDYMbaR4kpa2X4btvubl4KpHeWd+8t6Wvv72rYyR6/V7r''@;'; put 'put ''qKllS0JujhP7zfuUix2BSNVgXf1IvNha3xPZ0ai0JSItrppgMK6uM5NZsGcOVIp+xKdnysc6wYSRngz4tA+AhoEpfruEMslgNqtTqKbw6NTB1Pk4V/nXAlGPb1WyTw2U/dra4+aAAJNzW4soVsFMQTzsckKM6Cx1lhR6YTZ2u3NN+jBC5cfOMkkrK474+cPt7Yd7mveUnTxZtqe5fPv2TnliQib2''@;'; put 'put ''LbeOjJzaUlc9QV5U/qO6Thm8ur9/erq//2rgr0rAmR545XIxWOHmMZjnsjHYH88MDd0+0HwgPOHuKI/2ReHHn/FMRObaLAOn+/pODVRH+gqKq4fj1cPVJYW9VQnOv3EY01aVjl+TTXaIjwVGQpVoFHuMICy8yCVa/grR1gIxjpVYipJzrEY0Cmi9LCAjmnqXQjNdtxpmPdEc4YCdEg2v4X6P105y''@;'; put 'put ''iEa2Aq2aehjlmvaUTQDBOoFw5MWlLWPx2i2nRkZu3VIbx+LSw1miZWU8BnTzADFkuZ1QgmHmtelA7+rIgezo1DGr3OX1wp8Sb3FRITR1QzRGxxjk5Mp14vzUaxMlPxAV7xzyDPtvaR64tX/rLf2ji23KSfNwumE4D9vM3am9pZ6xQPXWUyNDt24dunemsRtvaUsm26juAkcbL5D/AY89I5tsWNRD''@;'; put 'put ''nChSKlICFSNR1M+Ax1bAkh1oWgf0s6vGzsdrCLIwno1g5CIIQkRQTfPrbwI5TKEAW+yTJB9YeOrd2OlyH8u2af7Wv9x4482DgxNySasnYPTle0qI/oCyF3/6QGPndo9zxGiqKAJcR5e3kw7AdRmKoY9wHnSUYr1gw0RcSRL72EXd6ouqnikHVQkmSCTzMBlhRgKG5uqBkcXJtGwWhGpYmAcFRGvA''@;'; put 'put ''QMuWlyNUHiuPhoMwnrJwKBSkWhbbVcXA48d2vJrlUqtYrgMUQueNldW+qxJDu8p2p7sOtbUd6kpfXTw2NtbRPjbaQfRKfdd8S7hsqrCkp7U7msgc7e092lFbNay8b6yjY3S0o2MM6AseOSlh8cPRZ+10KVslrRcx0YMrM3pmLUhWNKvU29aNbsOdlYss86LeAWrmAQJcyGl3Blw0RUFVIRCUz4kG''@;'; put 'put ''7W6YKD43WXdTe23DwMmTBVcliT25u0X5Eq5LdXcllJdAosLVXHZopufb5Gfgv+WjrXzInmzCvIBykF31j30y+KRwCzyI+ZzLU9Q1ybfmWVgWXb8miy6BN7G/qqqkuKqquOPkSbItWkzfFkdHlt6iz1/+zvKI+nwf2k+tEhGsoOOykqHPGYsgMJbW7RUBKz4d43oEAAJiS2Orb4IOYhl+n6XI63Ha''@;'; put 'put ''2eikdTn+3ByDmB3pYqM93+S3ekpObutaGfLbb5kN0zqxooi4l17r2bGSG4gB3c1o5ktGFixqlLdzU0nHhVfR3M5NY+4NoDYE3dPs46o7U1PPOexO5pVi6lAxWwf+81Uv3/dA/8mTP78flyqvvTx8B1izHX+i46EVGl8l1L9q48MwU19UTcyoAzDn5Gp87JOWzJua+uJK8qYb6AWql88T+FvYAXIf''@;'; put 'put ''QFc9V15EsB6rFshDFY5+xiCJgl5vH9TRlWU2JdBI8JneFeEuEcXC7M0pli4KoIoA8DBwsRHU0louXs3O9bTSJkl+MFl3c1O8PnNzU3WdfPKka6i2cbLAuatF4+9UsrO9Rvmm9pfot4bjDYnqFJ9DN5NRO8jOOLWkWLCAXtIsqZOFcnqqjey5Usj4ap18XlYIpTVCWNsrUimsz5HCpqjyAtFvCTFf''@;'; put 'put ''jfodEzCuNfmXwnfMv3gun3+hLseZgQH2Gu2LxcDp6I/F+qOqwzFwqq/v9MAC+Bvx4WrueHCdsBV0/CyMh/och5mnSEy5PgfzAESB+tU53hrFkpN7CEw7rHUkc2Cu0Klz/7VOnUKemljl01H/aTv4T3wuZ1Q/mDtRmPvB8EEQVvvB2ekV5vg1g5pxYk6SfY3LtQrmyt2f1JW4P/ql0bdX3J8xZXLF''@;'; put 'put ''+8FoK7ycIFS9dT5rZsUJfBZ2ZinBDeIeK/MR3Bozr3iy1D14DhQM0zCOxqRbk7kfz2a2zZ08if9X28KuAeUtot/PZah8+U38A3heJfWRPfBAL0Tn4CWzJUA15VO4UconviblE94g41OKvaWEKuZv35JIb9sVStSlM8Pxuqnmhrl4Mjhc4Y+5ovGmgeTR3Zaq0I62kgKfL98WbI7XDlT5S6a8BYVu''@;'; put 'put ''m9uWl1+RqR+Yoj4XjHWBfAh8rho57sUiTTmDa3iW2hQyTRcxABsQ3u3l7iBzkZwV1EcK8XU1u1oTBcxIF9Ua03jB01oiTwwO3nzjjSWefJ+xxOnZ3om9B+6774DyH0UVJiOzCSDPPqLnesaZ9UZVPQMqRrWeOXGlV7uqGoCVUJLrGVfAFWDrETk8RG0WG5Wd+Kh6adKUDXDMW6BaQNngfuUSVTa4''@;'; put 'put ''V60hAt9Nr9UQaVkVzU+0O1j07uTpH8cdH/nQnT89Du7Pe/Et1FizXI9QC+3X55Hsl88jFZw8fHzuhkMnnzhy5Poj0OOn8Cz9XXoLX6M8tJLvAo+T16yZJB3W0ZQXzSpA3wLJWaRwOBx6lryUAs4ITSZJTvyR287c9Y0X3n3TTXe98I3HH8eGpYcfflv5M+t3eYg0Qb82Wr1jNtAhU2YlateUUffS''@;'; put 'put ''sfsEdfXB4cxl1AwW2CxE6QPt3qJAWcLl+ekdf3PfbT9tvuWL1rydzooEMSq34TuXXrmP8PpGeHkdnrdJvsm+ab5JovmmBHYob+LHsfI77FEGp3DnoSnl7w+x3OXyLnyYvID8qFIOFbB8IFhq3Ocvp3lgmsucVAUbo1G7h9pwmoJMg3ZJgbhFQNIgriFuL1u+lKioSTh/NoqrG1JxHNu7zdTc5MbD''@;'; put 'put ''kTB2NzWbPhXtazpTEx2O1t7W3FdpGDZ4I+G7Jous6ep3has8hmFOs7nl59DfsfzU5rV84EfM7dyp1dVhiNV24evZPAA/BpY/suUT1OfHjEcxmlQr0hAepSXnRHLFvGDXIg2N6TBMJ4HBZSMwAQ/TVV4wF1KEDj0UGaJDN26bjeF4QwPMaXbblMFTFX5XddpaNHlXOOKFeVT2Nd9WC/OqOdPUF5WW''@;'; put 'put ''l1EKR/B9+Gm7hPMQUX6DjE8h/LzyG1atQW1hz/JV6BdMv+az1TM6OGqQmVPOEmtOum612gFmziUviAT/JvmMWrrQe1/JdmLXqhWWtuCX+TMql58jejKMClE5xUpJcWGBx+105Ft02MLXyeCpO9TEIkbDRazmMkjr3LkOpSXulKDhiB2i1yCE1eAB4K/v29V+oKVlf8eu2u3lExW19YEJ5ZPpeDxN''@;'; put 'put ''LHJP3vDRTObIcF5Xhxit6AublBfNkd53bXfilHN7ktVp0rzpi6gYdcsy0JIWOiGJ1k9LuF8PcR3GEmFLMiwyoxVPksSTAYhXpBXbnaEgmBbq3IXc/lSaVZiu0vglmJbHkemlfxzt7m5d6N5yW8mOvP5YfdeTT87Npeo+MXi253CbutJ36+AnUE5u2IOa5UYXRkY8ANGlxMKSORETcJnAuB8wsT0N''@;'; put 'put ''vC6P4lLbs2Az010LbDuIWyt6hV8m5PjrH3jhhRfOPP/88/f9kmaTcc/glsGDB+EFH6IpZUarDBnC7yMXWW1RPctCRmhhLfAtW1CY0QsUUXh0g+oimqDMjT7qc97vCwaLCkPBomeCIfaXDNG/4YKikPYXeDWC6okRf9tWgWM6ZBNwDL2m5kUH8L3k3JXkVGkdUAaPKE+Tc4NXmlP1SoEvLj6wg7zi''@;'; put 'put ''uZPLsH/5ZdJOngBKB2SIwNmCz23UnN5JLRdLq7PllDCzBFjzd+iCMl1XsfYeam2e68Rte27eg8vqd7W07qlfKid3L90EfTej76Hv4N2AtFLZl6MQCFUVozkFv4252ItGS0ui0ZLvRUtLo/RXzRcvt4MZMYPdupHNLd+Fic5pJDwhIYBBttJ8BDj2AsG6o4iuXQhkfkWb7mUrreDyMRBgrNs2g+F2''@;'; put 'put ''ugB5ncFgkNppijleR14RXlWQSffG/LSqNVFUbyso8TsL7XZHnqu8u0AfD5eEE7a8Bq8jP89mcg2l2X6eONDcymge11Oax9HrfD/P8gD+JdNLftQpd5QB57tgYG7qzQ4gPSICLdGjmBM1bcXKayEyRshfXuh12lWNRYNilKux1BKilTQY3UKDG1Ql1ry2MGtFoynXri3NQmwOrMZHuMNWQVfg7BLE''@;'; put 'put ''YbejzyPDUwQ/+XmmaDeAOQj6eGOYExoMltBDm8Acy8LkoY9uAnM8+6w59GEOQ9bCvJztxwx8uQoGaAA+i/BHVlvkQFvlbjtVjRTlBoRBARmQjhh0B4ygF8VpcDPVpSY9d5RYNOewOaBxvqqbzKAosVbIkqL1TX43tgvkkFbQsowGP4DfT7YtvfUtXtly553kwqLyGN6hPMZrUdpZDVEKG2V/FRb1''@;'; put 'put ''UUIgLAf1WIJ1uNgBHGzHRBAHSunmKc791bQaRMBH4QXprl/JMTJ1rsZsYOj2wth9LBfpgEYJ2ghh3W1X3KqUbmla1Uo49Y7N5PjaFiB9Atm/UUO+VkDTCinUEIqCFPrd1PLwdG4+VjXFWmFcE4NohQsvTfl3Jk72WPVlayXVO/nAjrWlVHPR8ERdi86/WoCbTAc+vnN1aRXwFatBYnxeqcrCCcZX''@;'; put 'put ''OIc/18IcRI9tAnNCgwFZOLoJzPFsP3Pwn8Gs8Pny92gND3tWnI9n+f3r+gGmxl05MAfBuq+BWf4twATZeOJ8PMuPr4MBa4XjbDy8n7nlR1aPB2SqCl5+yWoaSlCb3Lza05g2sPUJY46rkZ8Pf0ryi9n+RDc0ywO7Y1rJJbCAKWnnJeW0GM2dlMD44x/xgrS+vjd28Iq0L+DHslVpOLCIi5a+wWvT''@;'; put 'put ''/nbxacABq7dheqVO1SufWYcnVkPC8FSv0vaT63TPWpiDuGoTmBMaDND2K5vAHMvC5KHnNoE5nn3WHHp6jQ6jtWG3Q7xSApZAfEZEuDYWioBYRNLetFfy4o/ceefAnWeHz94xcMedt5/Nvj+L2OKyVjPjBRsURXep8a0L60hlxFfkNYt6HRhavTDgY1eFnKsYrqr5lgKWSaElA55BcdWSIzgXuctR''@;'; put 'put ''Hr6GKOauD8rWioqKaEVV2BFxsB0i2VJzKZCtqqcxIvJ4Ma981VFOiGBPknwvec35vdfurjy+M5EEmT5I3yn5RQW4pikDko0rD2XqlB82Z4j31p6Zz8621szXneqhEl0zr/x6uAxfEwCxfqPrSOdEp/JQgNs6ViPC6Nuk8sCj6+VpDcxB9ONNYE5oMFlbtx7meLYfzY7lyDf3l9mz2tRnvbC6n5x6''@;'; put 'put ''K1pHlJBjwBV6HdYfELG6fJbdPApmK9/jyvfavPaw3yax6jJ3MqfqKpStujp1YaXqSh5jVVfHWhc6uxZabvp1R0ND++tqXWKSfBdkfupZM/jtNHflB44oBaUvQMAxrxVTe/jysIjVlHWxWlY5nwXMuT0lm5xBf9AfD7DVrnX7KmI4pRU6pTRLQJNeva3XdncfbE0mWPXucKq+s7M+VVHd1lJT03qK''@;'; put 'put ''GJt21tXtbGoYL+QVvIdp5e5cY7iqoTGuODntea3BK4DrHjDuBHVPbXRdABrck3P9kgaPpbFc+Jey1/MGcq9fzPY/tzXnuhDMwptPc/mE68J94CNWowYkk0ODT5roikpFMRDVB36AG5tIExZN8GDRKBAkiQNgqc0AU7YxDDZL4EyYJQpmuYKubFfWVelaMMMGYCsQxo0hpug/PsUYMonENGmAmFCU''@;'; put 'put ''iHggz0io98sT+FazRaBOw0pdA51x6nJNLDjbYNCKzebcxpa//nm2/5/nUWQ1gszS5vMg3aJkuOLWsry2IVppRveFv2MXDMlyeSqVSICjJacyrc2JhkSyrhZ4LE5Dn1AwlJ/1utZsUPDmbPlgyzlr1tZRYzvO5sJf5OvsHYfD5Ye79h5fqYNpurq2fXdRaH/L2sV35fODtDympY6vwtdXx5NTQ9ny''@;'; put 'put ''mOKieFVldc6ivPI5OeF31QRD3A5Wgu9Maz8a0GNySRDrdckQEfUNhUCfAgzBcR5IGMTGRFSjRogKRGD0o0gEDSQyVcXiK17JshcslQ9r9ApRWIC77fLAcsU6OHa+wf4suJ6t5YeZe8vy1Lq/0rGltSj4Kwfy1/u1BZ3XZTaqT8GmtW6tcfiGrnXlKlk9FGN6ro/rv2m0wXWq/z6Qc/2SBo+l7bnw''@;'; put 'put ''F7P9zHH9t/wttrZJ+3mZ9/9uDt8NBGzLuX7Qw+F/CddLWf8v8/4f5ddfheth1j+Hn3uQ5+HqWa3N/2S1Yrtkp40tp2QPvnCYcB8vxfBoCx32VdXAdIEcg8XEZD738pScV1zMa8HCIbpHQnNRsu5JeMXlyl0Pwm9s77llePhkT8tC157O8OSRst6BY53T5a0l4+Od8vhEJ7E/dPX2swPdNw31HssM''@;'; put 'put ''DfbX9Zcnaxqi/b6lv+zokq/a1tl9lYYfUsLsyTi3Jypd+LojxdsEx+fhja5Tej2Uc/2SBo+lfbnwL2Wvr+7/Yrb/uSlulzrQNlJI+llO1Uf3TQDfa3UFiKXvkA5YfpJtIJNAFvWjLFz22YrA+9AyrQaat8gtNYCoOXcHGc6PxkqLo1Ulf6D73X6ofsBfpn+jxaWxpoWXtLcwJm0N1ktzsFlf1usi''@;'; put 'put ''OhIJFxXq9Dqzgai+LL0qrFzd0Jct3MiXzV013MiX9fv9Vf7K0Dv5sjqvumXSw1xZCdRlPDx0ZmB4S9G+7ooIvBvZWrSvRzlX/HKwMtof+05fzPcDfxR/cE993+mBaOlIaDoJEhwrG/1l/N88IMOPghDXxX7vpufHsLUrSvudq2R49fUVGebXL2nwWRnm1y9m+1FlWF2Pof3sUfu5N2fNmde5fTy3''@;'; put 'put ''VHGTusP1686b1B1uuEC98W21BJEuUP93lR0qwvyassMsTi6qOAFc9eXmzTLZPNUCemBdjMd9wnNZn3ChJ7ft4Wz+yoge3KTtN7J+o3FU3ZO3vE2ogHigAKSzXW4pwpKuAIuYDBggDAESkzm2HUvP9hWwFVS1JKuwsNBX6Av67Xa7y0+zL3qeVEwHIny7XpKjqT6Nwd+vCNfXtbvLGrK797Cn2FdQ''@;'; put 'put ''YFN+c+LEfWVt9UEf3z3k83gKbDjNNvSp9X7bSC/Iagyl0Qtc8HwlWKcvhhjCgw1CTYIYDUaMjTEsYfBEN78L5lyV3Ki2RZMpHbC4hYN0DQHPiITPUk00sRKAxHpgFnywJky+vbkNpmRHPB5PxxvDQWcgGA64/HQVIoubTQqCQYvZNXSFc4qDSS/Dm3l9gfDcLRyBf9EKhTkW1xYK0+JhhtNPagXD''@;'; put 'put ''aq7gYyxODKtx4i/WxZu8PpbK7lZVdu/O5hk+xmJV1hYb0PlN2l5S2xJsGOV8yvYYsrYRte3COj6NQxxjJi8CTC+DyRd2kD8hI8A8T/5EgQBGzRuBBJzJ1s2+C/RJEYzpNdnkAMLrgObaKnyYmhWMBD06APxry+701ahOsFYwRbVPdFNotJrqRFNDq1tYL9tiFfAKnCiqBdG5wNT9dvh8vrAvFKLV''@;'; put 'put ''CuGAuqQVWF9bohYvoNwSk3d1rKoxeeihkx3Kv2uFJp1Lf59TZ/v+rqampR/n6imeT8xk84kLaP86OnPf7VzWd1tQddmaXCQ2oR9s0lbz+wSAeYrnqEDeh9nZGKCNirEBs11OelHH91WqJ2LQ+nuJSSEgURM9pou4NlqROLpLVPsf0ESMDDOxUh4jeuUWnnHv4eLEpYhcWKQpdyY4TActsJrjEIqj''@;'; put 'put ''M7KDRgwhTPQGcABBtyC6ybwI+KASXHkdjPQAzVRrlFWPN2LlQsyPZFYppIGyOeN9G7UgtHQuHA7HwzFPhTMcDIRYjltS5+DVVMra6mXq9yO1gvm1rRY6q2I6XZ1tdSFzEKIu5S9qQFXstTphshmYvsWRU9QM4RWeZXXNG+ShDRvkodf6+QbVR2B7Z5mNiqo26qvr2vJ6Y2qjBriNWlTbKq/Tfbe8''@;'; put 'put ''LfBKPvEjfkYHwAs1yIoSqAX9mUu7txpL+jKsM0Aop/NiIujoES6oz8fuiBvcUa1CzEyXcQSDbt6IVzZhS5J+BsJoqva1fb1OknNw2/omJiyKdt4QrW0mVyNkpOe84Pls08vA0/i7poamvWtaappTyfxEfiJWFfAXF7mdNP1dYNH8YnocAHeF9X9FRTQuDQWrQiFjYSBUiIV3rI4eqguXdcaLA5V0''@;'; put 'put ''/br3CkqlIf76OTB4gukRvg6wsPzwurWCnwBMJdMjPEZb+ARf021a3oYU0AUuujOUrnjS41cI7s+e48ILqzTp9/jZniZNLuhOWE3gFSbvulOW1VKu+hvUhiB41rfZWr8fHZLNbur2+0HQqREJ0JVjMYcpVO8+PyusjLalLLRZKVBeAzBFt2mVlxZBhJmft2GJslNdlk17c8c+r5YLbKFzKPHmn2zj''@;'; put 'put ''k1gpG1gKw3xKavP0+N+W3lJnpK7loG+trMGAjjWtyQdrNcT67L5u+7p93bQ0WL/0FvQ3CnJ4np03meByiH/P/X+4HmPyOaJef4Jfp3upmZ9Ro/oZznUyz+J54V6AGVVhPOg5DvOcBsP3ZL+o9QP9f5/5BDjHJ6D93MlgRjeG4fsySB/wUx6tvLWYTUZRDxJItN3pazZ656E8t7bROyWl0rQY2y25''@;'; put 'put ''SZ8SAP/+1KnFxbciRyJ4i/KfmaMd39H2fTSw+vBBOc9skkRq6Q0Ia1XiZnhrU/d0ZsuzV7Z5+tgnbbFrauqLblb7gyUw9+rzccP4yaGhk+N4b5Vy8T/DR8J4QvltFcquWd2hrVkBHl/fCNekhPl046ti/TGg3xcZXetU/Wrl8HC9hNg1eMDpRbTyrBPZ9TED+twmz7qUzUMY9qGcdapMdp1qAT25''@;'; put 'put ''zgfk8fm5bC5hYRJttJ6GrWvXuNS2+1byHNiq7hsCxSvQPbYOoFKLnM6eOGEg2SMnjHRrvVavxyLCEmexx8WKeqlrYaIFLpozkS10cWP7ynbvHery/QuzdB/8LOldeqsrc0jOHM7wRfypT1w98+mrF5UU/l7msCzPNzM7BmMWfg7+BZ1XM9ouj3sxjUT0Oppe1wsDwEM6vUF3wGIkoqilHMySSchJ''@;'; put 'put ''OiSTgQBCyeZkU2MqUB+oi1VBd35nMBwM5cG4VydpV8xBjt+gW3OOjOpDCHk8O9t5JBw5KvMC88zRSPC6jOZIKLfl1JvjW1btj2qsq03zCvTGmtoUcyl0uUXouJ86F6pvcYLRNqXy79Pr+ILXP1Pa7uC5PzX+7QU+PcH4N6Xy6SscXnmd1kur8PR6R9Y/PcH4N6Xy780bPut2xr87OP8a+bPYHng2''@;'; put 'put ''zkZ1nA+s431eN03HeRUf525t/3w72z/fgd6WS+rAGakvKRb0UhHdfYh1uMAKLkkeK9rgeef46noNSRJnwPP1DKKVNMa6co3qNeUa79iodF2Nh3DqnVqxdcONijXWt+O1GuZQdYSWadgNUnEsKG6ayb6CQwJI76nrN8hpex84eJlzA65fFCvWpLYts5c7RkCtf29n9e8yXSeow6K+vpToxJIignTg''@;'; put 'put ''LiGgFxHyVq8T6Ng6gbZSqdaubLJOoKNnaN12eWC6TrAGTl0n0MBFvucvXgn4Zaugl0EvLah9p4p8/IO9oxvhN3lN+HJl+tsmpTWLB2kxUnbZuv0ceTqhyRPI4uQm8nRJkydsKOfyFAR5omc8lKMX5HwvUMRjAYqY6XmTKkViGkUo6sgpmgBU67OMBsL8s3WEiWcRfiVt5Ko14Cp51rXSUTLZYdjl''@;'; put 'put ''qJwG81QaTCAMfmkTWtEgnx4XgGed66nhK6XnVaypIuzMHl/B9kO0s/0QCfRtuaAKG4SomxgNLkyM2aJIfVbN6HX6syYMA8XGo2BsAMN0N6Yg6KZFvieT1z4iX3ZZsnqljcFIbnunRnJ0Y3hWWon25zQTKJ7oeQYJVM02aXgBUzTroduEo9dv3PBSAcCpdRycklf2cgR8cdvaKsy0aaw5d3vHRIEl''@;'; put 'put ''xPiPnSXCeDSt8uj6XEgJ+B0FzP+c5P4nuWadj8prODLZGo6FDWwHz6Wfy+bStZwKb/tytkZEq1HMrf9gbVltAMvbA8wdG9WggN9034Zth1fWArC1D6nnoGxj56AE6NqNC7Q+LRrOo/sqBtRTpbQzx1nOXQt22Ja/QLAgEHTxM6ZoULomc7Hm1BTy6PDdk7ZsusIxf0o9PYVcYGelWL1qgsJf5H34''@;'; put 'put ''WO5RKnwfzjYyC3FMCN3Gw3krmFQBYm1dCAN7DfhWXSDZVZwSvbbDa+P0r5/f5ylfbUVnTcbXHPQ7A66Ay0+t27pU78rWnaQ9mxMnsywizc/dynMS50anazf1aJEd0Iqd8cL4sYXXC+GudXzE9+9QnbmL8YKEvptTI3RCqxGC67eta8vXKC5paxRYmkA5bY9n64vm0A3r+IidwcJ4rX3Teka+b4by''@;'; put 'put ''2jT3j46gnLbHtbYb5g1524tqW5o3/GBO2xPZthvlpnjbS9pzsaGBn71C9yXTGDif7sigFf10nxMZQOqmIbKXetw+xtT5yLrRkWViID9nG/HTG+wdprX3N5NLV3ieipeep3J+4eDY8NAouXT/6OjGfWT3dRF0FtjyBnVXl9pHOikFMqNDw2MHF8ilkZH71T56oY9vQHSr7mgwEbqnYYCGGn0b1eDn''@;'; put 'put ''IUtIyO5oUCfNgoknx/wtroaiogZXS/l4jPT6y1tcXi988LPnDKEXWT4lzJ5z2fr+tbsltB0SKykOdT9GLwb9xvZjNLFe6SZWuiNhHqQUY2Eyu4lWuKJdGbnfW3B7Z2d1QpYT3vJyr8fv95DezgT9nOhs8nv4Rb7PYBvWg02zoxY2ghorTCafcgz9moo+9eQewOkk04YCvUOnake2oEen7sxQz9+v''@;'; put 'put ''WFGIp9pLvMNc/EH7Pc7SOT4m8JkyRrckacPvJy+BXHex56bpfkwj293mxrjPgIVedijRJDWpwMPz2tElRBjluxWCIbbZjT4f0cPv2VHa3ANUaSoGsCVQ6HCbHB59xpCscWsf5PzdpN1us5h9pUa6Q8hiLi413a7SJEPXidi5tUV854UeuLKPhqU3OB3ZvSheKRBSN5fgHcf4DpO/8dzB5K9ReX35''@;'; put 'put ''ueVvIysKsh4K+bnzq/e5BbN9CasPoP8Kz1+WhIJVyjLPTbI8JdcpXFfeoelK1I0rNtGVr2i6EnUDxEZtD+In37HtQdyS0/Z4tu0cblqnK3nbi9m2c+hrPD5dbqFnV+aun7z9e+5LvP171ZeILDfTNQmeZ2cwF97+HV8ne/t3KgzP1x/L9pOHrt0kX/9SNl+fN4I2rCXtRu/ZxE68kl3L7lbj3Dr0''@;'; put 'put ''M2LBve987j89m7j3oNZGaL+CNoLl7Te1Ni34A+hV8gTwTTHjmb61mwo5zzi11DhPrn535QsLyN2rvrGAzimD70e/IBdgxvk068j3CJLS7B5BeCb+PntmCaqQy0qswOurNoUJTLkFC4IOduLX6mfrNx0KLt9kWMGc93x8+IfAGxE+PjbOP8A4HdlxMpezVMvvjqHzeBI/DlCb7LGi5wuwPVZrzhd4''@;'; put 'put ''qj0YbA8E2M/5YFuQv4NLHE/twDdfRh8E2kNQYwvA6x8YD9vxzwFAot+Po7s75/txMmgQnvxbXlRVl4/1Vv71NQYsWrDJLJpyv/LGmecQzGZhxm60Sbrcb8pJvUND9q03vLVEWwvq9+U0b9hug2/MWdcWopHGoSFZ1r45Z2hy6KqJMXlQHtjaU5up7Whq3PBbdFz/hW/RKV/zOZgDW974V3/DDh5k''@;'; put 'put ''f+iH4Vrlc9r37XwK3gBs8Mq/eEd9P1aT+yU8K1/Gg8HTr8cR/G16KtEzeoxrYxnsBdwFHpm9//7ZpYuep5/18v3AABfT4AQGF0l7pQhAPfJI/7NPey5+j9mD36nnI9egHfKED6hWjHUioWUkGJnpqfQ6MHcQbR8wYmLC2Ex3jGS3CVlYDStPPcFrDUrEY9EquyME4aHdGcqDUHLl2KcIxI7cWU92''@;'; put 'put ''kJVcCC0vA1R7/SwxynYI1b9nYOTeee9YFxG6dxTOv3dI3RWUua4Mi8rP9QQHlDdKF7vn2JHKncf7ej3mQk9vz+F2tieou6m30GP29HYM0e9swUWkEN8Juk58htB9GM7sae130nPamVMDbo0Amtdv9xNhaYn+5pwRxs+4MDzrdebpSe1//bCJt8Y2PGyC12HAc0C341p1reAJrT4Drn9Dvb6yRsuv''@;'; put 'put ''X8pel47nXr+oXUdzB3Ovv5K93n0q9/q57PWFee1stG3kHpYjT8C8IwEnhnlvXFYDs0/mVNPk4OEeFnRZc5Fxkjtdf1JxwmOvXKyocddja3FD42yOG4izP50z9peyOMi7jttDWrr/NXZOj0bvpD2wVTtxB9N6OLivX39fvzSK/h/iEzz6AAEAAAABAABVErT+Xw889QAfA+gAAAAA08GdhgAAAADU''@;'; put 'put ''vqb1/zb+4wSKA84AAAAIAAIAAAAAAAB42mNgZGBgPvfvPAMDy+b/Zv9zWLoYgCLIgNEQAKcNBrgAAAB42nWUzWsTURTFz70zFEEI2ERQQozGYExMqkm10WotaWpiBWvsRqxYF1IXLlS6UEQFka5ERV24c1Xp0oVKd3ahCAX9C0RQutCCChVKoS6M5z4zEpOacDjz8d68e3/vzMgSToM/OUpFqRQq''@;'; put 'put ''Mo+STiGhE4h7RaT1CbZIB0pyBT3UNnmALj2BgxzfLxeRl/Xok9n6V33J49vo1FPI8v4mvUmdxQ69jl06im49jwyPC2485+owivYc+mFZQdi7xHmLCOsMavoMOV2h30CVdVT1C88/oiohDGkc6/QpjukBlLwzqHk+leH9e6g6f+zmxLlWks8b0h+I+EVs1NfYwHlr9C665RqOsOZlek4WsFNr9V8y''@;'; put 'put ''zprKSOkdVDSB7fSsjiAlE4jpJGsfw4AI9ovU57RAHoKy9wgDvF7Wq258xebIfTJcwmaZ5Lwxsqyh06ty7Twi7DeiIXTJQyQliXP0lLzCHnIfdGveQt5qlDnWspv33pGx1TXFPQD2Sdldz5JXgn2FnRb/lZ/kGsbP2DVJQvW3xo/+jZr3okgH7FqlmQZL49cs40fOepIyVqvIe0G3XsiuWeT2xpjR''@;'; put 'put ''P1Mf9DIKf9m1ynJhbvyaZfyMs7n1a2u2uvVu6wduOeK+WL/MctbxsJqa/XjTuWXN9rvhZPWJ9b4nu72sH44h+3AZZA4sh+488HHEZAQxY2v9tblxZW+B+yHk/A7WydxadtqcWbY8tTnz7TIWuO2PMfqP2zvgcmh7aPwa74LlsdUt4zLD7DWEn/RRapCa5ZhDvIZ6T/DMVm9j2liTdcNb+PO94TOB''@;'; put 'put ''aUD7kPcu8NsRRa/7LqxFL9Uv0+S17L4V8J8jLcPYSnF/699dPjzO5b6u8q+g8hspY9fOeNpFwl1I4nAAAPC1lt+uMptO93H+N6ebO7e5NUF6kiPiCB/iiAiJHo6IOOQ4IqKHIyTikB4OkZCIOEIiIuKIELmHkOghYkQPIRERR/QgItJDyCER93Jw/H4QBGX+2Yb2u6CuNEzA3+Ej+Apudf/oPu9u''@;'; put 'put ''IRZEQJJIDtlH6j0jPcs95ybBNGY6Mb8xp80Z86q5bDYslKVt5azL1jPri020Tdj2bNe2hp2wj9rn7Hl7xQE5Eo6Co+YUnWPOrHPPWUMhlEPH0VV0EzXQVq+jl+vd6RvuW+v39s/3X7qmXGVXe2BiYHvgwi26l9zVQW5wY/ASY7EZ7AAzsI6H80x7cp5rT8ure0e8S95THMVT+DpexMv4Ff7qY31r''@;'; put 'put ''vryv7uv4HX7KL/uT/g/+LSJDrBB5okSUiXPilmgSr+R7Mk1myBUyT5bIMnlNTVOfqSxVoHapCvVMp+k5eoFeodfpIl0KJAJ3gXrgGUDAAbyABTIYBnvgGFSBAW7AI3hiEswJc8HUmAemxXTYJXaV3WB32GO2GuwL/goawZtgI9jmLJyPA5zB3XMN7iVkCY2HaqF66DlsCrvCVPiJh3mUf8cf8lW+''@;'; put 'put ''xj/wLQESXAIr6MKsUBLKwqlwKdwKTeFPxBbBIuGIFsmKiIiJQIyKCXFMnBTnxcW3qSgUdUWp6IE0Ln2UFqVvUkHalY6kM+lKZuVN+UCuyBdyTa7LHcWkeBVW0ZWksqBsKBWlGcNik7FC7LcKq7KaVFPqjPpJ/arm1C31UK2qhnqvNv7TEI3SRrVJraj91O60ptYcehhq6zZ9Wc/pRd3Qb/RH/Ul/''@;'; put 'put ''iVvi7vhUfDb+JZ6N5/8CDBDMyAABAAABPABoAAoAQQAEAAIAKAA5AIsAAACTAmsAAwABeNqNkstOwkAUhv8WNKDGKDHGsOrKGBO5qeBtYdSwUdRIhK0gFRrBYilGXfo2blz6DF6ewI2P4DP4dzitN2LIpJ1v5vznPzOnBRDDO0LQwlEAO3x6rGGOqx7rGEdTOIQN3AqHsYJH4SHE8SE8jFktIhxB''@;'; put 'put ''RksIRxHXToRHsaT5PmMoaQ/CE5jSw8KTiOkzwk+Y1ueFn5HSN4VfENHbwq8Y0a97/BZCXL/DNmy0cQMHFupowIWBez4ZpJBGllRl1KCuoTQdcpFzi1kd5l4ggQJM5jnKyWYffJVJlUXaUrs1HHGnji65QnWamSk11nGMXZSxT+rntRB4+U6DVjR+1Sxx5VBrqZMb384wWN0S+ZQ6m0qvKwd0MTl7''@;'; put 'put ''2TXGKuRDxr3YHufaP33zeu1ytYYkx9UPZ1v5tgLXBGM2135OR7LqjLrc7fIr+ZokZ79mS931q2ay7z377f3tZZk7VZwpHzfoXUE6mVdRgyOrYjmeMI1VvhexHPxPOZxTZ6o6jnyFfOBYxCVvYjHiUNP8BLhZh5cAAHjabZNXbBxVFIa/37F33TZO771Xx173xCkua8exYycucezESca7Y2fxehfG''@;'; put 'put ''u3FsugQCHkDwwjPlCRC9CiR4QKJX0XsH0XmkB+/cCV4k7sN8/xmd858z994hC3edG2Ae/7NUm36QxQyyycGHn1zyyKeAQgLMpIhZzGYOc6fq57OAhSxiMUtYyjKWs4KVrGI1a1jLOtazgY1sYjNb2Mo2tlPMDkooJUgZ5VRQSRXV1LCTXdSymz3sZR911NNAIyGaaGY/LRyglTYO0k4HhzhMJ110''@;'; put 'put ''08MRejlKH/0c4zgDnOAkp7C4nau4mpu5gTt4n+u5lqf5mDu5jbt5nme5h0HC3EiEF7F5jhd4lZd4mVf4liHe4DVe516G+YWbeJs3eYvTfM+PXMcFRBlhlBhxbiHBRVyIwxgpkpxhnO84yyQTXMylXMJj3MrlXMYVXMkP/MTjytIMZStHPvn5i785J5SrPOVLKlChApqpIs3SbM3hV37TXM3TfC3Q''@;'; put 'put ''Qi3id97RYi3RUi3Tcq3gc77QSq3Saq3RWq3Tem3QRm3iPu7XZm3RVm3TdhVrh0r4gz/5kq9UqqDKVK4KVapK1arRTu1SrXZrj/ZqH0+oTvVqUCNf841CvMtnfMCHfMSnvMcnalKz9qtFB9SqNh1Uuzp0SIfVqS51q0dH1MsDPMgjPMpDPMw13KWjPMOTPKU+fla/jum4BnRCJ3VKlgYVVkS2hvx1''@;'; put 'put ''o1bYScT9lqGvbtCxz9g+y4W/LjGciNsjfsvQ1xi20kkRg8apCivpD3kWtmF+KJJIWuGwHU/m2/9Kf8izsj2rkPGwXRQ2hxOjo5ZJLRzOCPwtnnvUY4vnEzUsbM2sHMkIfG1WOJW0fTGDNtMvZtBuXsZdFLZnesQzPdpNetyFv8ObIWEY6Didig9bTmo0ZqWSgURm5Os0HRzToTOzg5PZodN0cAy6''@;'; put 'put ''TNWYC38qHi0prQx6LPN1m6SkmabHmyZlmNPjROPDOan0M9Dzn8lSmZG/x9vBlGFBbzjqhFOjQzH7bMF4hu7L0BPT2tdvZpx0kd8/fdqT06ednjhYVuWyLFjp6x12rKlrNW7QaxzGXeT1RqK2Y49Fx/LGz6t0XWmovtpjjccGj42+PmM04SL9NlhSEvRY5rHcY4XHSsNgU3Yo5STcoKKpIccqtmLJ''@;'; put 'put ''fMudxUj37qdlkTX92ek4YJ0f0CS63dOywPt9jDb7mtZ5Vvo0THIyGou4ybnW2NQeRWwnL2J76h+3ZbchAAAAeNpj8N7BcCIoYiMjY1/kBsadHAwcDMkFGxnYnTZJMjJogRibeTgYOSAsMTYwi8NpF7MDAyMDJ5DN6bSLAcpmZnDZqMLYERixwaEjYiNzistGNRBvF0cDAyOLQ0dySARISSQQbObj''@;'; put 'put ''YOTR2sH4v3UDS+9GJgaXzawpbAwuLgD+HCVgAAAAAAFYmPZ3AAA='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=arrow-down.d88dee16363c6957-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz48ZyBvcGFjaXR5PScwLjYnPjxwYXRoIGQ9J00xMS41ODU5IDZMOC4yOTMwNCA5LjI5Mjg5TDUuMDAwMTUgNicgc3Ryb2tl''@;'; put 'put ''PSdjdXJyZW50Q29sb3InIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvPjwvZz48L3N2Zz4='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=arrow-left-with-bar.4a4c0335e847fcf8-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz48cGF0aCBkPSdNMTEuMDcxMyA0LjY0MTg4TDcuNzIxMTUgNy45OTIwM0wxMS4wNzEzIDExLjM0MjJNNC45MjkzNiA0LjA4''@;'; put 'put ''MzUzTDQuOTI5MzYgMTEuMzQyMicgc3Ryb2tlPSdjdXJyZW50Q29sb3InIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvPjwvc3ZnPg=='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=arrow-left.14f442d033da7685-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz48cGF0aCBkPSdNOS40OTI2OCAxMS4yOTI5TDYuMTk5NzggOC4wMDAwMUw5LjQ5MjY4IDQuNzA3MTInIHN0cm9rZT0nY3Vy''@;'; put 'put ''cmVudENvbG9yJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLz48L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=arrow-narrow-down.59dce26ffb7b6870-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz48cGF0aCBkPSdNOC4wMDAwNCAzLjMzMzMxVjEyLjY2NjZNOC4wMDAwNCAxMi42NjY2TDEwLjY2NjcgOS45OTk5OE04LjAw''@;'; put 'put ''MDA0IDEyLjY2NjZMNS4zMzMzNyA5Ljk5OTk4JyBzdHJva2U9J2N1cnJlbnRDb2xvcicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8+PC9zdmc+Cg=='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=arrow-narrow-up.f668a39d9cb61355-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz48cGF0aCBkPSdNOC4wMDAwOCAxMi42NjY3TDguMDAwMDggMy4zMzMzNU04LjAwMDA4IDMuMzMzMzVMNS4zMzM0MiA2LjAw''@;'; put 'put ''MDAyTTguMDAwMDggMy4zMzMzNUwxMC42NjY3IDYuMDAwMDInIHN0cm9rZT0nY3VycmVudENvbG9yJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLz48L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=arrow-right-with-bar.05e75c50afc9296d-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz48cGF0aCBkPSdNNC45MjkyIDQuNjQxODhMOC4yNzkzNCA3Ljk5MjAzTDQuOTI5MiAxMS4zNDIyTTExLjA3MTEgNC4wODM1''@;'; put 'put ''M1YxMS4zNDIyJyBzdHJva2U9J2N1cnJlbnRDb2xvcicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8+PC9zdmc+'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=arrow-right.349eb3ca634d7dad-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz48cGF0aCBkPSdNNi42NDY0OCAxMC45MzkzTDkuOTM5MzggNy42NDY0NEw2LjY0NjQ4IDQuMzUzNTQnIHN0cm9rZT0nY3Vy''@;'; put 'put ''cmVudENvbG9yJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLz48L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=caret-hidden-down.abacc195526cccc4-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0nOCcgaGVpZ2h0PSc4JyB2aWV3Qm94PScwIDAgOCA4JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPjxwYXRoIGQ9J001Ljk5OTkgM0M2LjI4MzkgMyA2LjQzMjI0IDMuMzI4NjcgNi4yNjA5IDMuNTQxTDYuMjM1NTcgMy41NjlMNC4y''@;'; put 'put ''MzU1NyA1LjU2OUM0LjE3ODE3IDUuNjI2MzkgNC4xMDE4MSA1LjY2MDg3IDQuMDIwOCA1LjY2NTk2QzMuOTM5NzkgNS42NzEwNiAzLjg1OTcgNS42NDY0MiAzLjc5NTU3IDUuNTk2NjdMMy43NjQyNCA1LjU2OUwxLjc2NDI0IDMuNTY5TDEuNzM2NTcgMy41Mzc2N0wxLjcxODU3IDMuNTEyTDEu''@;'; put 'put ''NzAwNTcgMy40OEwxLjY5NDkgMy40NjhMMS42ODU5IDMuNDQ1NjdMMS42NzUyNCAzLjQwOTY3TDEuNjcxOSAzLjM5MkwxLjY2ODU3IDMuMzcyTDEuNjY3MjQgMy4zNTNWMy4zMTM2N0wxLjY2ODkgMy4yOTQzM0wxLjY3MTkgMy4yNzQzM0wxLjY3NTI0IDMuMjU3TDEuNjg1OSAzLjIyMUwxLjY5''@;'; put 'put ''NDkgMy4xOTg2N0wxLjcxODI0IDMuMTU0NjdMMS43Mzk5IDMuMTI0NjdMMS43NjQyNCAzLjA5NzY3TDEuNzk1NTcgMy4wN0wxLjgyMTI0IDMuMDUyTDEuODUzMjQgMy4wMzRMMS44NjUyNCAzLjAyODMzTDEuODg3NTcgMy4wMTkzM0wxLjkyMzU3IDMuMDA4NjdMMS45NDEyNCAzLjAwNTMzTDEu''@;'; put 'put ''OTYxMjQgMy4wMDJMMS45ODAyNCAzLjAwMDY3TDUuOTk5OSAzWicgZmlsbD0nY3VycmVudENvbG9yJy8+PC9zdmc+Cg=='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=caret-hidden-left.5da44345ecf3b3d3-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0nMTAnIGhlaWdodD0nMTAnIHZpZXdCb3g9JzAgMCAxMCAxMCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz48cGF0aCBkPSdNNi4wODQ4MiAxLjM1NzcxTDYuMTE1MDMgMS4zNTUxSDYuMTc2NDlMNi4yMDY3IDEuMzU3NzFMNi4yMzc5''@;'; put 'put ''NSAxLjM2MjM5TDYuMjY1MDMgMS4zNjc2TDYuMzIxMjggMS4zODQyN0w2LjM1NjE4IDEuMzk4MzNMNi40MjQ5MyAxLjQzNDc5TDYuNDcxOCAxLjQ2ODY0TDYuNTEzOTkgMS41MDY2N0w2LjU1NzIyIDEuNTU1NjJMNi41ODUzNCAxLjU5NTczTDYuNjEzNDcgMS42NDU3M0w2LjYyMjMyIDEuNjY0''@;'; put 'put ''NDhMNi42MzYzOSAxLjY5OTM3TDYuNjUzMDUgMS43NTU2Mkw2LjY1ODI2IDEuNzgzMjNMNi42NjM0NyAxLjgxNDQ4TDYuNjY1NTUgMS44NDQxN0w2LjY2NjU5IDEuODc0ODlWOC4xMjQ4OUM2LjY2NjU5IDguNTY4NjQgNi4xNTMwNSA4LjgwMDQyIDUuODIxMjggOC41MzI3MUw1Ljc3NzUzIDgu''@;'; put 'put ''NDkzMTJMMi42NTI1MyA1LjM2ODEyQzIuNTYyODYgNS4yNzg0NCAyLjUwODk5IDUuMTU5MTIgMi41MDEwMyA1LjAzMjU0QzIuNDkzMDcgNC45MDU5NiAyLjUzMTU3IDQuNzgwODMgMi42MDkzIDQuNjgwNjJMMi42NTI1MyA0LjYzMTY3TDUuNzc3NTMgMS41MDY2N0w1LjgyNjQ5IDEuNDYzNDRM''@;'; put 'put ''NS44NjY1OSAxLjQzNTMxTDUuOTE2NTkgMS40MDcxOUw1LjkzNTM0IDEuMzk4MzNMNS45NzAyNCAxLjM4NDI3TDYuMDI2NDkgMS4zNjc2TDYuMDU0MDkgMS4zNjIzOUw2LjA4NDgyIDEuMzU3NzFaJyBmaWxsPSdjdXJyZW50Q29sb3InLz48L3N2Zz4='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=caret-hidden-right.d6655b4da13c436b-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0nMTAnIGhlaWdodD0nMTAnIHZpZXdCb3g9JzAgMCAxMCAxMCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz48cGF0aCBkPSdNMy4zMzMzNyAxLjg3NDk5QzMuMzMzMzcgMS40MzEyNCAzLjg0NjkyIDEuMTk5NDcgNC4xNzg2OSAxLjQ2''@;'; put 'put ''NzE4TDQuMjIyNDQgMS41MDY3Nkw3LjM0NzQ0IDQuNjMxNzZDNy40MzcxMSA0LjcyMTQ1IDcuNDkwOTggNC44NDA3NyA3LjQ5ODk0IDQuOTY3MzVDNy41MDY5IDUuMDkzOTIgNy40Njg0IDUuMjE5MDUgNy4zOTA2NyA1LjMxOTI2TDcuMzQ3NDQgNS4zNjgyMkw0LjIyMjQ0IDguNDkzMjJMNC4x''@;'; put 'put ''NzM0OCA4LjUzNjQ1TDQuMTMzMzcgOC41NjQ1N0w0LjA4MzM3IDguNTkyN0w0LjA2NDYyIDguNjAxNTVMNC4wMjk3MyA4LjYxNTYyTDMuOTczNDggOC42MzIyOEwzLjk0NTg3IDguNjM3NDlMMy45MTQ2MiA4LjY0MjdMMy44ODQ5NCA4LjY0NDc4TDMuODU0MjEgOC42NDU4MkwzLjgyMzQ4IDgu''@;'; put 'put ''NjQ0NzhMMy43OTMyNyA4LjY0MjE4TDMuNzYyMDIgOC42Mzc0OUwzLjczNDk0IDguNjMyMjhMMy42Nzg2OSA4LjYxNTYyTDMuNjQzNzkgOC42MDE1NUwzLjU3NTA0IDguNTY1MUwzLjUyODE3IDguNTMxMjRMMy40ODU5OCA4LjQ5MzIyTDMuNDQyNzUgOC40NDQyNkwzLjQxNDYyIDguNDA0MTZM''@;'; put 'put ''My4zODY1IDguMzU0MTZMMy4zNzc2NCA4LjMzNTQxTDMuMzYzNTggOC4zMDA1MUwzLjM0NjkyIDguMjQ0MjZMMy4zNDE3MSA4LjIxNjY2TDMuMzM2NSA4LjE4NTQxTDMuMzM0NDIgOC4xNTU3MkwzLjMzMzM3IDEuODc0OTlaJyBmaWxsPSdjdXJyZW50Q29sb3InLz48L3N2Zz4='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=caret-hidden-up.3bb9644a109505a8-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0nOCcgaGVpZ2h0PSc4JyB2aWV3Qm94PScwIDAgOCA4JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPjxwYXRoIGQ9J00zLjc2NDI1IDIuNDMwOTlDMy44MjE2NSAyLjM3MzYgMy44OTgwMSAyLjMzOTEzIDMuOTc5MDIgMi4zMzQwM0M0''@;'; put 'put ''LjA2MDAzIDIuMzI4OTQgNC4xNDAxMiAyLjM1MzU4IDQuMjA0MjUgMi40MDMzM0w0LjIzNTU4IDIuNDMwOTlMNi4yMzU1OCA0LjQzMDk5TDYuMjYzMjUgNC40NjIzM0w2LjI4MTI1IDQuNDg3OTlMNi4yOTkyNSA0LjUxOTk5TDYuMzA0OTIgNC41MzE5OUw2LjMxMzkyIDQuNTU0MzNMNi4zMjQ1''@;'; put 'put ''OCA0LjU5MDMzTDYuMzI3OTIgNC42MDc5OUw2LjMzMTI1IDQuNjI3OTlMNi4zMzI1OCA0LjY0Njk5TDYuMzMzMjUgNC42NjY2Nkw2LjMzMjU4IDQuNjg2MzNMNi4zMzA5MiA0LjcwNTY2TDYuMzI3OTIgNC43MjU2Nkw2LjMyNDU4IDQuNzQyOTlMNi4zMTM5MiA0Ljc3ODk5TDYuMzA0OTIgNC44''@;'; put 'put ''MDEzM0w2LjI4MTU4IDQuODQ1MzNMNi4yNTk5MiA0Ljg3NTMzTDYuMjM1NTggNC45MDIzM0w2LjIwNDI1IDQuOTI5OTlMNi4xNzg1OCA0Ljk0Nzk5TDYuMTQ2NTggNC45NjU5OUw2LjEzNDU4IDQuOTcxNjZMNi4xMTIyNSA0Ljk4MDY2TDYuMDc2MjUgNC45OTEzM0w2LjA1ODU4IDQuOTk0NjZM''@;'; put 'put ''Ni4wMzg1OCA0Ljk5Nzk5TDYuMDE5NTggNC45OTkzM0w1Ljk5OTkyIDQuOTk5OTlIMS45OTk5MkMxLjcxNTkyIDQuOTk5OTkgMS41Njc1OCA0LjY3MTMzIDEuNzM4OTIgNC40NTg5OUwxLjc2NDI1IDQuNDMwOTlMMy43NjQyNSAyLjQzMDk5WicgZmlsbD0nY3VycmVudENvbG9yJy8+PC9zdmc+''@;'; put 'put ''Cg=='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=caret.65f1fc0acbe4c7ff-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMiAxMiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+LmNscy0xe2ZpbGw6I2IzYjNiMzt9PC9zdHlsZT4KICAgIDwvZGVmcz4KICAgIDx0aXRsZT5DYXJldDwvdGl0bGU+CiAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xzLTEiIGQ9Ik02LDlMMS4yLDQuMmEwLjY4LDAuNjgsMCwwLDEsMS0xTDYsNy4wOCw5Ljg0LDMuMjRhMC42OCwwLjY4LDAsMSwxLDEsMVoiLz4KPC9zdmc+Cg=='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=check.a7e64bde18502408-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz48cGF0aCBkPSdNMy4zMzMzNyA4LjAwMDAyTDYuNjY2NzEgMTEuMzMzNEwxMy4zMzM0IDQuNjY2NjknIHN0cm9rZT0nY3Vy''@;'; put 'put ''cmVudENvbG9yJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLz48L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=checkbox.eaf82435cbb56ee2-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz48cGF0aCBkPSdNNSA4TDcgMTBMMTEgNicgc3Ryb2tlPSdjdXJyZW50Q29sb3InIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcg''@;'; put 'put ''c3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvPjwvc3ZnPgo='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=chip-close.e00f6d71fe656f88-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz48cGF0aCBkPSdNMTIgNEw0IDEyTTQgNEwxMiAxMicgc3Ryb2tlPSdjdXJyZW50Q29sb3InIHN0cm9rZS1saW5lY2FwPSdy''@;'; put 'put ''b3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvPjwvc3ZnPgo='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=collapse-off.6f8cbb2e643a5a85-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz48cGF0aCBkPSdNNC4zMzMyNSA4SDExLjY2NjYnIHN0cm9rZT0nY3VycmVudENvbG9yJyBzdHJva2UtbGluZWNhcD0ncm91''@;'; put 'put ''bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLz48L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=collapse-on.5fe5cce3bf64e837-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz48cGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTcuNDk5ODggMTEuNjY2N0M3LjQ5''@;'; put 'put ''OTg4IDExLjk0MjggNy43MjM3NCAxMi4xNjY3IDcuOTk5ODggMTIuMTY2N0M4LjI3NjAyIDEyLjE2NjcgOC40OTk4OCAxMS45NDI4IDguNDk5ODggMTEuNjY2N1Y4LjUwMDAySDExLjY2NjZDMTEuOTQyNyA4LjUwMDAyIDEyLjE2NjYgOC4yNzYxNiAxMi4xNjY2IDguMDAwMDJDMTIuMTY2NiA3''@;'; put 'put ''LjcyMzg4IDExLjk0MjcgNy41MDAwMiAxMS42NjY2IDcuNTAwMDJIOC40OTk4OFY0LjMzMzM3QzguNDk5ODggNC4wNTcyMyA4LjI3NjAyIDMuODMzMzcgNy45OTk4OCAzLjgzMzM3QzcuNzIzNzQgMy44MzMzNyA3LjQ5OTg4IDQuMDU3MjMgNy40OTk4OCA0LjMzMzM3VjcuNTAwMDJINC4zMzMy''@;'; put 'put ''NUM0LjA1NzExIDcuNTAwMDIgMy44MzMyNSA3LjcyMzg4IDMuODMzMjUgOC4wMDAwMkMzLjgzMzI1IDguMjc2MTYgNC4wNTcxMSA4LjUwMDAyIDQuMzMzMjUgOC41MDAwMkg3LjQ5OTg4VjExLjY2NjdaJyBmaWxsPSdjdXJyZW50Q29sb3InLz48L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=index-html; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+CiAgICA8dGl0bGU+RGF0YSBDb250cm9sbGVyPC90aXRsZT4KICAgIDwhLS0gPGJhc2UgaHJlZj0iLyI+IC0tPgoKICAgIDwhLS0KICAgICAgU0FTIFZBIGRhdGEtZHJp''@;'; put 'put ''dmVuIGNvbnRlbnQ6IGVhcmxpZXN0LXBvc3NpYmxlIG1lc3NhZ2UgY2FwdHVyZSBydW5zIGJlZm9yZQogICAgICBBbmd1bGFyIGJvb3RzdHJhcHMuIEl0IGlzIHRoZSBgdmEtZWFybHlgIGdsb2JhbCBzY3JpcHQgYnVuZGxlZCB2aWEKICAgICAgYW5ndWxhci5qc29uIChzcmMvYXNzZXRzL3Zh''@;'; put 'put ''LWVhcmx5LmpzKSBhbmQgYXV0by1pbmplY3RlZCBoZXJlIGF0IGJ1aWxkIHRpbWUKICAgICAg4oCUIGV4dGVybmFsIChub3QgaW5saW5lKSBzbyBpdCBwYXNzZXMgYSBzdHJpY3QgQ1NQLCBhbmQgaXQgc2VsZi1ndWFyZHMgb24KICAgICAgP2VtYmVkPXZhIHNvIGl0IGlzIGluZXJ0IGluIG5v''@;'; put 'put ''cm1hbCB1c2UuIFNlZQogICAgICBWYU1lc3NhZ2luZ1NlcnZpY2UucmVwbGF5RWFybHlNZXNzYWdlcy4KICAgIC0tPgoKICAgIDwhLS0gbWV0YSB0YWdzIC0tPgogICAgPCEtLQogICAgICBOT1RFOiBEYXRhIENvbnRyb2xsZXIgbXVzdCBydW4gZW50aXJlbHkgb2ZmbGluZSAvIG9uLXByZW0u''@;'; put 'put ''IE5ldmVyIHJlZmVyZW5jZQogICAgICBleHRlcm5hbCBhc3NldHMgKGZvbnRzLCBpbWFnZXMsIHNjcmlwdHMsIHN0eWxlcywgQ0ROIGxpbmtzLCBvciByZW1vdGUKICAgICAgb2c6L2l0ZW1wcm9wIFVSTHMpIGhlcmUgb3IgYW55d2hlcmUgaW4gdGhlIGJ1aWx0IHByb2R1Y3QuIEFsbCBhc3Nl''@;'; put 'put ''dHMgbXVzdAogICAgICBiZSBidW5kbGVkIGFuZCBzZXJ2ZWQgbG9jYWxseS4KICAgIC0tPgogICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiLz4KICAgIDxtZXRhIGl0ZW1wcm9wPSJuYW1lIiBjb250ZW50PSJEYXRhIENv''@;'; put 'put ''bnRyb2xsZXIgZm9yIFNBU8KuIi8+CiAgICA8bWV0YSBpdGVtcHJvcD0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiLz4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0eXBlIiBjb250ZW50PSJ3ZWJzaXRlIi8+CiAgICA8bWV0YSBwcm9wZXJ0eT0i''@;'; put 'put ''b2c6dGl0bGUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iLz4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzpkZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIvPgoKICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0''@;'; put 'put ''aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIi8+CiAgICA8bGluayByZWw9Imljb24iIHR5cGU9ImltYWdlL3gtaWNvbiIgaHJlZj0iaW1hZ2VzL2Zhdmljb24uaWNvIi8+CiAg''@;'; put 'put ''PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZXMuMmI1NTg2ZWM1Mjc5ZjExYS5jc3MiPjwvaGVhZD4KCiAgPCEtLQogICAgIyMgU0FTSlMgQWRhcHRlciBjb25maWcgZGV0YWlscyAjIwoKICAgICogYXBwTG9jOiBUaGUgbG9jYXRpb24gaW4gbWV0YWRhdGEgb3IgU0FTIGRyaXZl''@;'; put 'put ''IHdoZXJlIERDIHdpbGwgYmUgZGVwbG95ZWQKICAgICogc2VydmVyVHlwZTogZWl0aGVyIFNBUzksIFNBU1ZJWUEgb3IgU0FTSlMKICAgICogbG9naW5NZWNoYW5pc206IFVzZSAnRGVmYXVsdCcgZm9yIHJlZ3VsYXIgKHVzZXIvcGFzcykgbG9naW5zLCBvciAnUmVkaXJlY3RlZCcgZm9yIDJG''@;'; put 'put ''QS9TU08KICAgICogZGVidWc6IFdoZXRoZXIgdG8gZW5hYmxlIGRlYnVnIG9uIHN0YXJ0dXAKCiAgICAjIyBWaXlhIG9ubHkgc2V0dGluZ3MgIyMKICAgICogYWRtaW5Hcm91cDogVGhpcyBncm91cCB3aWxsIGhhdmUgdW5yZXN0cmljdGVkIGFjY2VzcyAoVml5YSBPbmx5KQogICAgKiBkY1Bh''@;'; put 'put ''dGg6IFRoZSBwaHlzaWNhbCBsb2NhdGlvbiBpbiB3aGljaCB0byBkZXBsb3kgdGhlIHN0YWdpbmcgYXJlYSAoVml5YSBvbmx5KQogICAgKiB1c2VDb21wdXRlQXBpOiBDb25uZWN0aW9uIG1ldGhvZCAoVml5YSBvbmx5KQogICAgKiBjb250ZXh0TmFtZTogQ29tcHV0ZSBDb250ZXh0IChWaXlh''@;'; put 'put ''IG9ubHkpCgogIC0tPgoKICA8c2FzanMgc2VydmVydXJsPSIiIGFwcGxvYz0iL1B1YmxpYy9hcHAvZGMiIHNlcnZlcnR5cGU9IlNBU0pTIiBsb2dpbm1lY2hhbmlzbT0iUmVkaXJlY3RlZCIgZGVidWc9ImZhbHNlIiB1c2Vjb21wdXRlYXBpPSJudWxsIiBydW5hc3Rhc2s9InRydWUiIGNvbnRl''@;'; put 'put ''eHRuYW1lPSJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiIGFkbWluZ3JvdXA9IlNBU0FkbWluaXN0cmF0b3JzIiBob3RsaWNlbmNla2V5PSJub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbiI+CiAgPC9zYXNqcz4KCiAgPGJvZHkgY2RzLXRoZW1lPSJsaWdodCIgY2xhc3M9''@;'; put 'put ''Im0tMCI+CiAgICA8bXktYXBwPjwvbXktYXBwPgogIDxzY3JpcHQgc3JjPSJydW50aW1lLmE4ODgyNDIxN2Y2ZGI3Y2QuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9InBvbHlmaWxscy4yYjk2MGYxZWNhZjE3ZjhhLmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0Pjxz''@;'; put 'put ''Y3JpcHQgc3JjPSJzY3JpcHRzLjgwYjMzZjkxZjZmMDJiZDQuanMiIGRlZmVyPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJ2YS1lYXJseS44ZTdmYTM3NzIzYWNiZDlmLmpzIiBkZWZlcj48L3NjcmlwdD48c2NyaXB0IHNyYz0ibWFpbi5jODY1OWZhZjA3NDVlZjViLmpzIiB0eXBlPSJtb2R1bGUi''@;'; put 'put ''Pjwvc2NyaXB0PjwvYm9keT4KPC9odG1sPgo='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=main.c8659faf0745ef5b-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s3OTJdLHszNzQ4MihmZSl7ZmUuZXhwb3J0cz1mdW5jdGlvbihqKXt2YXIgaD17fTtmdW5jdGlvbiB5KGMpe2lmKGhbY10pcmV0dXJuIGhbY10uZXhwb3J0''@;'; put 'put ''czt2YXIgcz1oW2NdPXtpOmMsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4galtjXS5jYWxsKHMuZXhwb3J0cyxzLHMuZXhwb3J0cyx5KSxzLmw9ITAscy5leHBvcnRzfXJldHVybiB5Lm09aix5LmM9aCx5LmQ9ZnVuY3Rpb24oYyxzLEEpe3kubyhjLHMpfHxPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''YyxzLHtlbnVtZXJhYmxlOiEwLGdldDpBfSl9LHkucj1mdW5jdGlvbihjKXt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSx5LnQ9ZnVuY3Rpb24oYyxzKXtpZigxJnMmJihjPXkoYykpLDgmc3x8NCZzJiYib2JqZWN0Ij09dHlwZW9mIGMmJmMmJmMuX19lc01vZHVsZSlyZXR1cm4gYzt2YXIgQT1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHkucihBKSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoQSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6Y30pLDImcyYmInN0cmluZyIhPXR5cGVvZiBjKWZvcih2YXIgdiBpbiBjKXkuZChBLHYsZnVuY3Rpb24oQyl7cmV0dXJuIGNbQ119LmJpbmQobnVsbCx2KSk7cmV0dXJuIEF9LHkubj1mdW5jdGlvbihjKXt2YXIg''@;'; put 'put ''cz1jJiZjLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gYy5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBjfTtyZXR1cm4geS5kKHMsImEiLHMpLHN9LHkubz1mdW5jdGlvbihjLHMpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYyxzKX0seS5wPSIi''@;'; put 'put ''LHkoeS5zPSIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyIpfSh7Ii4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0''@;'; put 'put ''cy9pY29ucy9zcmMvY2xyLWljb25zLWFwaS50cyAqKiohCiAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihqLGgseSl7InVzZSBzdHJpY3QiO09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShoLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxoLkNsYXJpdHlJY29uc0FwaT12b2lkIDA7dmFyIGM9eSgKLyohIC4vdXRpbHMvc2hhcGUtdGVtcGxhdGUtb2JzZXJ2ZXIgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVy''@;'; put 'put ''LnRzIikscz17fSxBPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdigpe31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHYsImluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHYuc2luZ2xlSW5zdGFuY2V8fCh2LnNpbmdsZUluc3RhbmNlPW5ldyB2KSx2LnNpbmdsZUluc3RhbmNlfSxl''@;'; put 'put ''bnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHYucHJvdG90eXBlLnZhbGlkYXRlTmFtZT1mdW5jdGlvbihDKXtpZigwPT09Qy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJTaGFwZSBuYW1lIG9yIGFsaWFzIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nISIpO2lmKC9ccy8udGVzdChD''@;'; put 'put ''KSl0aHJvdyBuZXcgRXJyb3IoIlNoYXBlIG5hbWUgb3IgYWxpYXMgbXVzdCBub3QgY29udGFpbiBhbnkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzISIpO3JldHVybiEwfSx2LnByb3RvdHlwZS5ub3JtYWxpemVTaGFwZU5hbWU9ZnVuY3Rpb24oQyl7cmV0dXJuIEMudG9Mb3dlckNhc2UoKX0sdi5w''@;'; put 'put ''cm90b3R5cGUuc2V0SWNvblRlbXBsYXRlPWZ1bmN0aW9uKEMsdyl7dmFyIFM9dy50cmltKCk7dGhpcy52YWxpZGF0ZU5hbWUoQykmJihDPXRoaXMubm9ybWFsaXplU2hhcGVOYW1lKEMpLHNbQ10mJmRlbGV0ZSBzW0NdLHNbQ109UyxjLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5l''@;'; put 'put ''bWl0Q2hhbmdlcyhDLFMpKX0sdi5wcm90b3R5cGUuc2V0SWNvbkFsaWFzZXM9ZnVuY3Rpb24oQyx3LFMpe2Zvcih2YXIgTD0wLFI9UztMPFIubGVuZ3RoO0wrKyl7dmFyIHg9UltMXTt0aGlzLnZhbGlkYXRlTmFtZSh4KSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KEMseCx7Z2V0OmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIENbd119LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fSx2LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oQyl7aWYoIm9iamVjdCIhPXR5cGVvZiBDKXRocm93IG5ldyBFcnJvcignVGhlIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0IGxpdGVyYWwgcGFzc2VkIGlu''@;'; put 'put ''IHRoZSBmb2xsb3dpbmcgcGF0dGVybjpcbiAgICAgICAgICAgICAgICB7ICJzaGFwZS1uYW1lIjogInNoYXBlLXRlbXBsYXRlIiB9Jyk7Zm9yKHZhciB3IGluIEMpQy5oYXNPd25Qcm9wZXJ0eSh3KSYmdGhpcy5zZXRJY29uVGVtcGxhdGUodyxDW3ddKX0sdi5wcm90b3R5cGUuaGFzPWZ1bmN0''@;'; put 'put ''aW9uKEMpe3JldHVybiEhc1t0aGlzLm5vcm1hbGl6ZVNoYXBlTmFtZShDKV19LHYucHJvdG90eXBlLmdldD1mdW5jdGlvbihDKXtpZighQylyZXR1cm4gcztpZigic3RyaW5nIiE9dHlwZW9mIEMpdGhyb3cgbmV3IFR5cGVFcnJvcigiT25seSBzdHJpbmcgYXJndW1lbnQgaXMgYWxsb3dlZCBp''@;'; put 'put ''biB0aGlzIG1ldGhvZC4iKTtyZXR1cm4gc1t0aGlzLm5vcm1hbGl6ZVNoYXBlTmFtZShDKV19LHYucHJvdG90eXBlLmFsaWFzPWZ1bmN0aW9uKEMpe2lmKCJvYmplY3QiIT10eXBlb2YgQyl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCBsaXRlcmFsIHBh''@;'; put 'put ''c3NlZCBpbiB0aGUgZm9sbG93aW5nIHBhdHRlcm46XG4gICAgICAgICAgICAgICAgeyAic2hhcGUtbmFtZSI6IFsiYWxpYXMtbmFtZSIsIC4uLl0gfScpO2Zvcih2YXIgdyBpbiBDKWlmKEMuaGFzT3duUHJvcGVydHkodykpe2lmKCFzLmhhc093blByb3BlcnR5KHcpKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cignQW4gaWNvbiAiJyt3KyJcIiB5b3UgYXJlIHRyeWluZyB0byBzZXQgYWxpYXNlcyB0byBkb2Vzbid0IGV4aXN0IGluIHRoZSBDbGFyaXR5IEljb25zIHNldHMhIik7dGhpcy5zZXRJY29uQWxpYXNlcyhzLHcsQ1t3XSl9fSx2fSgpO2guQ2xhcml0eUljb25zQXBpPUF9LCIuL3Byb2plY3Rz''@;'; put 'put ''L2ljb25zL3NyYy9jbHItaWNvbnMtZWxlbWVudC50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQudHMgKioqIQogICAgICAg''@;'; put 'put ''ICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKGosaCx5KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGgsIl9fZXNNb2R1bGUiLHt2YWx1ZToh''@;'; put 'put ''MH0pLGguQ2xhcml0eUljb25FbGVtZW50PXZvaWQgMDt2YXIgYz15KAovKiEgLi9jbHItaWNvbnMtYXBpICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIikscz15KAovKiEgLi91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlciAqLwoiLi9wcm9qZWN0cy9pY29u''@;'; put 'put ''cy9zcmMvdXRpbHMvc2hhcGUtdGVtcGxhdGUtb2JzZXJ2ZXIudHMiKSxBPTAsdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7di5jbGFzc05hbWU9ImlzLW9mZi1zY3JlZW4iO3ZhciBDPWZ1bmN0aW9uKCl7cmV0dXJuIEhUTUxFbGVtZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07''@;'; put 'put ''ZnVuY3Rpb24gdygpe3ZhciBTPUMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBTLmNsckljb25VbmlxSWQ9Il9jbHJfaWNvbl8iK0EsQSsrLFN9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYoQz1mdW5jdGlvbigpe3JldHVybiBSZWZsZWN0LmNvbnN0cnVjdChIVE1MRWxlbWVudCxh''@;'; put 'put ''cmd1bWVudHMsdGhpcy5jb25zdHJ1Y3Rvcil9KSxoLkNsYXJpdHlJY29uRWxlbWVudD13LHcub2JzZXJ2ZWRBdHRyaWJ1dGVzPVsic2hhcGUiLCJzaXplIiwidGl0bGUiXSwody5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShIVE1MRWxlbWVudC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOntjb25m''@;'; put 'put ''aWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6d319KSkuY29uc3RydWN0b3I9dyx3LnByb3RvdHlwZS5fYXBwZW5kQ3VzdG9tVGl0bGU9ZnVuY3Rpb24oKXt2YXIgUz12LmNsb25lTm9kZSghMSk7Uy5pZD10aGlzLmNsckljb25VbmlxSWQsUy50ZXh0Q29udGVudD10aGlzLmN1cnJlbnRU''@;'; put 'put ''aXRsZUF0dHJWYWwsdGhpcy5hcHBlbmRDaGlsZChTKX0sdy5wcm90b3R5cGUuX3NldEljb25TaXplPWZ1bmN0aW9uKFMpeyFOdW1iZXIoUyl8fE51bWJlcihTKTwwPyh0aGlzLnN0eWxlLndpZHRoPW51bGwsdGhpcy5zdHlsZS5oZWlnaHQ9bnVsbCk6KHRoaXMuc3R5bGUud2lkdGg9UysicHgi''@;'; put 'put ''LHRoaXMuc3R5bGUuaGVpZ2h0PVMrInB4Iil9LHcucHJvdG90eXBlLl9ub3JtYWxpemVTaGFwZT1mdW5jdGlvbihTKXtyZXR1cm4gUy5zcGxpdCgvXHMvKVswXS50b0xvd2VyQ2FzZSgpfSx3LnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjaz1mdW5jdGlvbigpe3ZhciBTPXRoaXM7aWYodGhp''@;'; put 'put ''cy5nZXRBdHRyaWJ1dGUoInJvbGUiKXx8dGhpcy5zZXRBdHRyaWJ1dGUoInJvbGUiLCJub25lIiksdGhpcy5oYXNBdHRyaWJ1dGUoInNpemUiKSl7dmFyIEw9dGhpcy5nZXRBdHRyaWJ1dGUoInNpemUiKTt0aGlzLmN1cnJlbnRTaXplQXR0clZhbCE9PUwmJih0aGlzLmN1cnJlbnRTaXplQXR0''@;'; put 'put ''clZhbD1MLHRoaXMuX3NldEljb25TaXplKEwpKX1pZih0aGlzLmhhc0F0dHJpYnV0ZSgic2hhcGUiKSl7dmFyIFI9dGhpcy5fbm9ybWFsaXplU2hhcGUodGhpcy5nZXRBdHRyaWJ1dGUoInNoYXBlIikpO2lmKHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb249cy5TaGFwZVRlbXBsYXRl''@;'; put 'put ''T2JzZXJ2ZXIuaW5zdGFuY2Uuc3Vic2NyaWJlVG8oUixmdW5jdGlvbihIKXtTLl9pbmplY3RUZW1wbGF0ZShIKX0pLHRoaXMuY3VycmVudFNoYXBlQXR0clZhbD1SLCFjLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5oYXModGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKSlyZXR1cm4gdm9pZCB0''@;'; put 'put ''aGlzLl9pbmplY3RFcnJvclRlbXBsYXRlKCk7dmFyIHg9Yy5DbGFyaXR5SWNvbnNBcGkuaW5zdGFuY2UuZ2V0KHRoaXMuY3VycmVudFNoYXBlQXR0clZhbCk7aWYoeD09PXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUpcmV0dXJuO3RoaXMuY3VycmVudFNoYXBlVGVtcGxhdGU9eH1pZih0aGlz''@;'; put 'put ''Lmhhc0F0dHJpYnV0ZSgidGl0bGUiKSl7dmFyIFU9dGhpcy5nZXRBdHRyaWJ1dGUoInRpdGxlIik7aWYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsIT09VSYmKHRoaXMuY3VycmVudFRpdGxlQXR0clZhbD1VKSwhdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKXJldHVybn10aGlzLl9pbmplY3RU''@;'; put 'put ''ZW1wbGF0ZSgpfSx3LnByb3RvdHlwZS5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2s9ZnVuY3Rpb24oUyxMLFIpe3ZhciB4PXRoaXM7aWYoInNpemUiPT09UyYmdGhpcy5fc2V0SWNvblNpemUoUiksInNoYXBlIj09PVMpe2lmKHRoaXMuY3VycmVudFNoYXBlQXR0clZhbD10aGlzLl9ub3JtYWxp''@;'; put 'put ''emVTaGFwZShSKSx0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uJiYodGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbigpLHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb249cy5TaGFwZVRlbXBsYXRlT2JzZXJ2ZXIuaW5zdGFuY2Uuc3Vic2NyaWJlVG8odGhpcy5jdXJy''@;'; put 'put ''ZW50U2hhcGVBdHRyVmFsLGZ1bmN0aW9uKFUpe3guX2luamVjdFRlbXBsYXRlKFUpfSkpLCFjLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5oYXModGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKSlyZXR1cm4gdm9pZCB0aGlzLl9pbmplY3RFcnJvclRlbXBsYXRlKCk7dGhpcy5jdXJyZW50U2hh''@;'; put 'put ''cGVUZW1wbGF0ZT1jLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKX0idGl0bGUiPT09UyYmKHRoaXMuY3VycmVudFRpdGxlQXR0clZhbD1SLCF0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpfHx0aGlzLl9pbmplY3RUZW1wbGF0ZSgpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjaz1mdW5jdGlvbigpe3RoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24mJnRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24oKX0sdy5wcm90b3R5cGUuX3NldEFyaWFMYWJlbGxlZEJ5PWZ1bmN0aW9uKCl7dmFyIFM9dGhpcy5nZXRB''@;'; put 'put ''dHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIpLFI9dGhpcy5xdWVyeVNlbGVjdG9yKCJzdmciKXx8dGhpcztTP1MmJlMuaW5kZXhPZih0aGlzLmNsckljb25VbmlxSWQpPDAmJlIuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLFMrIiAiK3RoaXMuY2xySWNvblVuaXFJZCk6Ui5zZXRB''@;'; put 'put ''dHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsdGhpcy5jbHJJY29uVW5pcUlkKX0sdy5wcm90b3R5cGUuX2luamVjdFRlbXBsYXRlPWZ1bmN0aW9uKFMpe1MmJlMhPT10aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlJiYodGhpcy5jdXJyZW50U2hhcGVUZW1wbGF0ZT1TKSx0aGlzLmlubmVySFRN''@;'; put 'put ''TD10aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlLHRoaXMuY3VycmVudFRpdGxlQXR0clZhbCYmKHRoaXMuX3NldEFyaWFMYWJlbGxlZEJ5KCksdGhpcy5fYXBwZW5kQ3VzdG9tVGl0bGUoKSl9LHcucHJvdG90eXBlLl9pbmplY3RFcnJvclRlbXBsYXRlPWZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50''@;'; put 'put ''U2hhcGVUZW1wbGF0ZT1jLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQoImVycm9yIiksdGhpcy5faW5qZWN0VGVtcGxhdGUoKX19LCIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAg''@;'; put 'put ''ICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvaW5kZXgudHMgKioqIQogICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKGosaCx5KXsidXNlIHN0cmljdCI7T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KGgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGguQ2xhcml0eUljb25zPXZvaWQgMDt2YXIgYz15KAovKiEgLi9jbHItaWNvbnMtYXBpICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIikscz15KAovKiEgLi9jbHItaWNvbnMtZWxl''@;'; put 'put ''bWVudCAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQudHMiKSxBPXkoCi8qISAuL3NoYXBlcy9jb3JlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksdj1jLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZTtoLkNs''@;'; put 'put ''YXJpdHlJY29ucz12LHYuYWRkKEEuQ29yZVNoYXBlcyksdHlwZW9mIHdpbmRvdzwidSImJih3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpfHwod2luZG93LkNsYXJpdHlJY29ucz12KSxjdXN0b21FbGVtZW50cy5nZXQoImNsci1pY29uIil8fGN1c3RvbUVsZW1lbnRzLmRl''@;'; put 'put ''ZmluZSgiY2xyLWljb24iLHMuQ2xhcml0eUljb25FbGVtZW50KSl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgISoqKiAu''@;'; put 'put ''L3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihqLGgseSl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxoLkNvcmVTaGFwZXM9aC5DbHJTaGFwZUFycm93PWguQ2xyU2hhcGVTdGVwRm9yd2FyZDI9aC5DbHJTaGFwZUV5ZUhpZGU9aC5DbHJTaGFwZUV5ZT1oLkNsclNoYXBlRXZlbnQ9aC5DbHJT''@;'; put 'put ''aGFwZUNhbGVuZGFyPWguQ2xyU2hhcGVBbmdsZURvdWJsZT1oLkNsclNoYXBlVmlld0NvbHVtbnM9aC5DbHJTaGFwZVNlYXJjaD1oLkNsclNoYXBlVm1CdWc9aC5DbHJTaGFwZUZpbHRlckdyaWRDaXJjbGU9aC5DbHJTaGFwZUZpbHRlckdyaWQ9aC5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWw9''@;'; put 'put ''aC5DbHJTaGFwZUVsbGlwc2lzSG9yaXpvbnRhbD1oLkNsclNoYXBlQ2xvdWQ9aC5DbHJTaGFwZUltYWdlPWguQ2xyU2hhcGVCZWxsPWguQ2xyU2hhcGVGb2xkZXJPcGVuPWguQ2xyU2hhcGVGb2xkZXI9aC5DbHJTaGFwZUFuZ2xlPWguQ2xyU2hhcGVVc2VyPWguQ2xyU2hhcGVCYXJzPWguQ2xy''@;'; put 'put ''U2hhcGVIZWxwSW5mbz1oLkNsclNoYXBlV2FybmluZ1N0YW5kYXJkPWguQ2xyU2hhcGVFcnJvclN0YW5kYXJkPWguQ2xyU2hhcGVTdWNjZXNzU3RhbmRhcmQ9aC5DbHJTaGFwZUluZm9TdGFuZGFyZD1oLkNsclNoYXBlSW5mb0NpcmNsZT1oLkNsclNoYXBlQ2hlY2tDaXJjbGU9aC5DbHJTaGFw''@;'; put 'put ''ZUV4Y2xhbWF0aW9uQ2lyY2xlPWguQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlPWguQ2xyU2hhcGVUaW1lcz1oLkNsclNoYXBlQ2hlY2s9aC5DbHJTaGFwZUNvZz1oLkNsclNoYXBlSG9tZT1oLkNsclNoYXBlVW5rbm93blN0YXR1cz12b2lkIDA7dmFyIGM9eSgKLyohIC4uL3V0aWxzL2Rl''@;'; put 'put ''c2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLHM9eSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO2guQ2xy''@;'; put 'put ''U2hhcGVVbmtub3duU3RhdHVzPSgwLHMuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy41OCIgY3k9IjI2LjIzIiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI0LjcsMTNhNS4xOCw1LjE4LDAsMCwwLTIuMTYtMy41Niw3LjI2LDcuMjYsMCwwLDAtNS43MS0xLjA5QTExLjM0LDExLjM0LDAsMCwwLDEyLDEwLjQ0LDEsMSwwLDEsMCwxMy4yNiwxMmE5LjMyLDkuMzIsMCwwLDEsMy45NC0xLjcyLDUuMjksNS4y''@;'; put 'put ''OSwwLDAsMSw0LjE2Ljc0LDMuMjEsMy4yMSwwLDAsMSwxLjM1LDIuMTljLjMzLDIuNjktMy4xOSwzLjc1LTUuMzIsNC4xNGwtLjgyLjE1djQuMzZhMSwxLDAsMCwwLDIsMFYxOS4xN0MyNC42MSwxNy43OSwyNC44OCwxNC40MSwyNC43LDEzWiIvPicpLGguQ2xyU2hhcGVIb21lPSgwLHMuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuNzEsMTcuMjlsLTE1LTE1YTEsMSwwLDAsMC0xLjQxLDBsLTE1LDE1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTgsNC40MSwzMi4yOSwxOC43MWExLDEsMCwwLDAsMS40MS0xLjQx''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjgsMzJoLTVWMjJIMTNWMzJIOFYxOEw2LDIwVjMyYTIsMiwwLDAsMCwyLDJoN1YyNGg2VjM0aDdhMiwyLDAsMCwwLDItMlYxOS43NmwtMi0yWiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMywxOWExLDEsMCwwLDEtLjcxLS4yOUwxOCw0LjQxLDMuNzEsMTguNzFhMSwxLDAsMCwxLTEuNDEtMS40MWwxNS0xNWExLDEsMCwwLDEsMS40MSwwbDE1LDE1QTEsMSwwLDAsMSwz''@;'; put 'put ''MywxOVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTgsNy43OSw2LDE5LjgzVjMyYTIsMiwwLDAsMCwyLDJoN1YyNGg2VjM0aDdhMiwyLDAsMCwwLDItMlYxOS43NloiLz4nKSxoLkNsclNoYXBlQ29nPSgwLHMu''@;'; put 'put ''Y2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMSwxMWMtMy45LDAtNywzLjEtNyw3czMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdTMjIsMTEsMTguMSwxMXogTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1''@;'; put 'put ''LTVjMi44LDAsNSwyLjIsNSw1UzIwLjksMjMsMTguMSwyM3oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjgsMTQuN0wzMCwxMy44bC0wLjYtMS41bDEuNC0yLjZjMC4zLTAuNiwwLjItMS40LTAuMy0x''@;'; put 'put ''LjlsLTIuNC0yLjRjLTAuNS0wLjUtMS4zLTAuNi0xLjktMC4zbC0yLjYsMS40bC0xLjUtMC42bC0wLjktMi44QzIxLDIuNSwyMC40LDIsMTkuNywyaC0zLjRjLTAuNywwLTEuMywwLjUtMS40LDEuMkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUs''@;'; put 'put ''Ny45LDUuNUw1LjUsNy45QzUsOC40LDQuOSw5LjIsNS4yLDkuOGwxLjMsMi41Yy0wLjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwxNS42LDIsMTYuM3YzLjRjMCwwLjcsMC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwx''@;'; put 'put ''LjQsMC4zLDEuOWwyLjQsMi40YzAuNSwwLjUsMS4zLDAuNiwxLjksMC4zbDIuNi0xLjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4xaDMuNGMwLjcsMCwxLjMtMC41LDEuNS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNs''@;'; put 'put ''Mi40LTIuNGMwLjUtMC41LDAuNi0xLjMsMC4zLTEuOWwtMS40LTIuNmwwLjYtMS41bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwxNS42LDMzLjUsMTQuOSwzMi44LDE0Ljd6IE0zMiwxOS40bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4x''@;'; put 'put ''bC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4z''@;'; put 'put ''LTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgy''@;'; put 'put ''LjhsMS4xLDMuNUwyMSw3LjdjMC43LDAuMiwxLjQsMC41LDIuMSwwLjlsMC41LDAuM2wzLjMtMS44bDIsMmwtMS44LDMuM2wwLjMsMC41YzAuNCwwLjcsMC43LDEuNCwwLjksMi4xbDAuMSwwLjVsMy42LDEuMVYxOS40eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjEsMThjMCwzLjksMy4xLDcsNyw3YzMuOSwwLDctMy4xLDctN3MtMy4xLTctNy03QzE0LjIsMTEsMTEuMSwxNC4xLDExLjEsMTh6IE0yMy4xLDE4YzAsMi44LTIuMiw1LTUsNWMtMi44LDAtNS0yLjIt''@;'; put 'put ''NS01czIuMi01LDUtNUMyMC45LDEzLDIzLjEsMTUuMiwyMy4xLDE4eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjgsMTQuN0wzMCwxMy44bC0wLjEtMC4zYy0wLjgsMC0x''@;'; put 'put ''LjYtMC4yLTIuNC0wLjRjMC4zLDAuNiwwLjYsMS4zLDAuOCwxLjlsMC4xLDAuNWwzLjYsMS4xdjIuOGwtMy42LDEuMUwyOC4zLDIxYy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45''@;'; put 'put ''bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wtMy4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVj''@;'; put 'put ''MC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS4zLDAuNSwxLjksMC44Yy0wLjMtMC44LTAuNC0xLjYtMC40LTIu''@;'; put 'put ''NWwtMC40LTAuMmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIu''@;'; put 'put ''NWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wy''@;'; put 'put ''LjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42''@;'; put 'put ''LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy43LDE1LjRoLTUuM3YwLjFsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMt''@;'; put 'put ''MC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMu''@;'; put 'put ''MywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywy''@;'; put 'put ''LjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwxLjEsMy40bDEuNC0yLjNsLTAuNi0yQzIxLDIuNCwyMC40LDIsMTkuNywyaC0zLjRjLTAuNywwLTEuMywwLjUtMS40LDEuMkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUsNy45LDUuNUw1LjUsNy45''@;'; put 'put ''QzUsOC40LDQuOSw5LjIsNS4yLDkuOGwxLjMsMi41Yy0wLjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwxNS42LDIsMTYuM3YzLjRjMCwwLjcsMC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwxLjQsMC4zLDEuOWwyLjQs''@;'; put 'put ''Mi40YzAuNSwwLjUsMS4zLDAuNiwxLjksMC4zbDIuNi0xLjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4xaDMuNGMwLjcsMCwxLjMtMC41LDEuNS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNsMi40LTIuNGMwLjUtMC41''@;'; put 'put ''LDAuNi0xLjMsMC4zLTEuOWwtMS40LTIuNmwwLjYtMS41bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwxNiwzMy45LDE1LjcsMzMuNywxNS40eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTguMSwyM2MtMi44LDAtNS0yLjItNS01czIuMi01LDUtNWMwLjIsMCwwLjUsMCwwLjcsMC4xYy0wLjItMC42LTAuMy0xLjMtMC4yLTJoLTAuNWMtMy45LDAtNywzLjEtNyw3YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdjMC0wLjktMC4y''@;'; put 'put ''LTEuOC0wLjUtMi42aC0yLjJjMC41LDAuOCwwLjcsMS42LDAuNywyLjVDMjMuMSwyMC44LDIwLjksMjMsMTguMSwyM3oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVy''@;'; put 'put ''dCIgZD0iTTI2LjksMS4xTDIxLjEsMTFjLTAuNCwwLjYtMC4yLDEuNCwwLjMsMS44YzAuMiwwLjIsMC41LDAuMiwwLjgsMC4yaDExLjVjMC43LDAsMS4zLTAuNSwxLjMtMS4yYzAtMC4zLTAuMS0wLjUtMC4yLTAuOGwtNS43LTkuOWMtMC40LTAuNi0xLjEtMC44LTEuOC0wLjVDMjcuMSwwLjgs''@;'; put 'put ''MjcsMSwyNi45LDEuMXoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuNTcsMTUuNzJsLTMuMzUtMWExMS42NSwxMS42NSwwLDAsMC0uOTUtMi4zM2wxLjY0LTMuMDdhLjYxLjYxLDAsMCwwLS4xMS0uNzJMMjcu''@;'; put 'put ''NDEsNi4yYS42MS42MSwwLDAsMC0uNzItLjExTDIzLjY0LDcuNzJhMTEuNjIsMTEuNjIsMCwwLDAtMi4zNi0xbC0xLTMuMzFBLjYxLjYxLDAsMCwwLDE5LjY5LDNIMTYuMzFhLjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEuNjMsMCwwLDAtMi4zOCwxbC0zLTEuNjJhLjYxLjYx''@;'; put 'put ''LDAsMCwwLS43Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAtLjExLjcybDEuNjIsM2ExMS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEsMCwwLDAtLjQzLjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFhMTEuNjIsMTEuNjIsMCwwLDAsMSwyLjMzTDYuMDks''@;'; put 'put ''MjYuNjlhLjYxLjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5LjhhLjYxLjYxLDAsMCwwLC43Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0bDEsMy4zN2EuNjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCwwLC41OC0uNDNsMS0zLjM4YTExLjYzLDExLjYzLDAs''@;'; put 'put ''MCwwLDIuMjgtLjk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAsLjcyLS4xMWwyLjM5LTIuMzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYzLDExLjYzLDAsMCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQzLS41OFYxNi4zMUEuNjEuNjEsMCwwLDAsMzIuNTcs''@;'; put 'put ''MTUuNzJaTTE4LDIzLjVBNS41LDUuNSwwLDEsMSwyMy41LDE4LDUuNSw1LjUsMCwwLDEsMTgsMjMuNVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMyLjU3LDE1LjcybC0zLjM1LTFh''@;'; put 'put ''MTIuMTIsMTIuMTIsMCwwLDAtLjQ3LTEuMzIsNy40OSw3LjQ5LDAsMCwxLTYuMTQtNi4xNiwxMS44MiwxMS44MiwwLDAsMC0xLjMzLS40OGwtMS0zLjMxQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgs''@;'; put 'put ''MWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAs''@;'; put 'put ''MCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4z''@;'; put 'put ''OGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYx''@;'; put 'put ''LjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1i''@;'; put 'put ''YWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMi41NywxNS43MiwzMS41LDE1LjRIMjIuODVBNS41LDUuNSwwLDEsMSwxOCwxMi41YTUu''@;'; put 'put ''NTMsNS41MywwLDAsMSwuNjUsMEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwyLjA5LTMuNjItLjg2LTIuODNBLjYxLjYxLDAsMCwwLDE5LjY5LDNIMTYuMzFhLjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEuNjMsMCwwLDAtMi4zOCwxbC0zLTEuNjJhLjYxLjYxLDAsMCwwLS43''@;'; put 'put ''Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAtLjExLjcybDEuNjIsM2ExMS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEsMCwwLDAtLjQzLjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFhMTEuNjIsMTEuNjIsMCwwLDAsMSwyLjMzTDYuMDksMjYuNjlhLjYx''@;'; put 'put ''LjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5LjhhLjYxLjYxLDAsMCwwLC43Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0bDEsMy4zN2EuNjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCwwLC41OC0uNDNsMS0zLjM4YTExLjYzLDExLjYzLDAsMCwwLDIuMjgt''@;'; put 'put ''Ljk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAsLjcyLS4xMWwyLjM5LTIuMzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYzLDExLjYzLDAsMCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQzLS41OFYxNi4zMUEuNjEuNjEsMCwwLDAsMzIuNTcsMTUuNzJaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwz''@;'; put 'put ''NC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLGguQ2xyU2hhcGVDaGVjaz0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEzLjcyLDI3LjY5LDMuMjksMTcuMjdhMSwx''@;'; put 'put ''LDAsMCwxLDEuNDEtMS40MWw5LDlMMzEuMjksNy4yOWExLDEsMCwwLDEsMS40MSwxLjQxWiIvPicpLGguQ2xyU2hhcGVUaW1lcz0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjQxLDE4bDguMjktOC4yOWEx''@;'; put 'put ''LDEsMCwwLDAtMS40MS0xLjQxTDE4LDE2LjU5LDkuNzEsOC4yOUExLDEsMCwwLDAsOC4yOSw5LjcxTDE2LjU5LDE4LDguMjksMjYuMjlhMSwxLDAsMSwwLDEuNDEsMS40MUwxOCwxOS40MWw4LjI5LDguMjlhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz4nKSxoLkNsclNoYXBlRXhjbGFtYXRpb25U''@;'; put 'put ''cmlhbmdsZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIxLjMyYTEuMywxLjMsMCwwLDAsMS4zLTEuM1YxNGExLjMsMS4zLDAsMSwwLTIuNiwwdjZBMS4zLDEuMywwLDAsMCwxOCwyMS4zMloiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMTcuOTUiIGN5PSIyNC4yNyIgcj0iMS41Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9''@;'; put 'put ''Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNabS0xLjc4LDEuOTRhMSwxLDAsMCwxLS44Ni40OUg4LjIxYTEsMSwwLDAsMS0uODgtMS40OEwxNy4wNyw4LjU1YTEsMSww''@;'; put 'put ''LDAsMSwxLjc2LDBsOS43NCwxNy45NEExLDEsMCwwLDEsMjguNTUsMjcuNDhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLjMzLDI1LjU0LDIwLjU5LDcuNmEzLDMsMCwwLDAtNS4yNywwTDUuNTcsMjUuNTRB''@;'; put 'put ''MywzLDAsMCwwLDguMjEsMzBIMjcuNjlhMywzLDAsMCwwLDIuNjQtNC40M1pNMTYuNDYsMTIuNzRhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40OSwwLDEsMS0zLDBaTTE4LDI2LjI1YTEuNzIsMS43MiwwLDEsMSwxLjcyLTEuNzJBMS43MiwxLjcyLDAsMCwxLDE4LDI2LjI1WiIv''@;'; put 'put ''PicpLGguQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwx''@;'; put 'put ''OCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDIwLjA3YTEuMywxLjMsMCwwLDEtMS4zLTEuM3YtNmExLjMsMS4zLDAsMSwxLDIuNiwwdjZBMS4zLDEuMywwLDAsMSwx''@;'; put 'put ''OCwyMC4wN1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBjeD0iMTcuOTUiIGN5PSIyMy4wMiIgcj0iMS41Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTEuNDksNmExLjQ5LDEuNDksMCwwLDEsMywwdjYuODlhMS40OSwxLjQ5LDAsMSwxLTMsMFpNMTgsMjUuNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNS41''@;'; put 'put ''WiIvPicpLGguQ2xyU2hhcGVDaGVja0NpcmNsZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwx''@;'; put 'put ''MCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE2LjM0LDIzLjc0bC01LTVhMSwxLDAsMCwxLDEuNDEtMS40MWwzLjU5LDMuNTksNi43OC02Ljc4YTEsMSwwLDAsMSwxLjQxLDEu''@;'; put 'put ''NDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDE4QTEyLDEyLDAsMSwxLDE4LDYsMTIsMTIsMCwwLDEsMzAsMThabS00Ljc3LTIuMTZhMS40LDEuNCwwLDAsMC0yLTJsLTYuNzcsNi43N0wxMywxNy4xNmEx''@;'; put 'put ''LjQsMS40LDAsMCwwLTIsMmw1LjQ1LDUuNDVaIi8+JyksaC5DbHJTaGFwZUluZm9DaXJjbGU9KDAscy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgIGN4PSIxNy45MyIgY3k9IjExLjkiIHI9IjEuNCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAgZD0iTTIxLDIzSDE5VjE1SDE2YTEsMSwwLDAsMCwwLDJoMXY2SDE1YTEsMSwwLDEsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMiw1LjE1YTIsMiwwLDEsMSwyLDJBMiwyLDAsMCwxLDE1LjksMTEuMTVaTTIzLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMSwxLDAtMmgyVjE3SDE2YTEsMSwwLDAsMSww''@;'; put 'put ''LTJoNHY4aDJBMSwxLDAsMCwxLDIzLDI0WiIvPicpLGguQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9KDAscy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE3Ljk3IiBjeT0iMTAuNDUiIHI9IjEuNCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjEsMjVIMTlWMTQuMUgxNmExLDEsMCwwLDAsMCwyaDFWMjVIMTVhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFpNMTgsNEExNCwxNCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyLjFhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTgsMi4xWm0tLjEsNS4yOGEyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwxNy45LDcuMzhabTMuNiwyMS4yNWgtN2ExLjQsMS40LDAsMSwxLDAtMi44aDIuMXYtOS4ySDE1YTEuNCwx''@;'; put 'put ''LjQsMCwxLDEsMC0yLjhoNC40djEyaDIuMWExLjQsMS40LDAsMSwxLDAsMi44WiIvPicpLGguQ2xyU2hhcGVTdWNjZXNzU3RhbmRhcmQ9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSww''@;'; put 'put ''LDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOCwxMi4xYTEsMSwwLDAsMC0xLjQxLDBM''@;'; put 'put ''MTUuNDksMjMuMTVsLTYtNkExLDEsMCwwLDAsOCwxOC41M0wxNS40OSwyNiwyOCwxMy41MkExLDEsMCwwLDAsMjgsMTIuMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwx''@;'; put 'put ''NiwxNiwwLDAsMCwxOCwyWk0yOC40NSwxMi42MywxNS4zMSwyNS43Niw3LjU1LDE4YTEuNCwxLjQsMCwwLDEsMi0ybDUuNzgsNS43OEwyNi40NywxMC42NWExLjQsMS40LDAsMSwxLDIsMloiLz4nKSxoLkNsclNoYXBlRXJyb3JTdGFuZGFyZD0oMCxzLmNsckljb25TVkcpKCc8Y2lyY2xlIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYt''@;'; put 'put ''MTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFpNMTgsNEExNCwx''@;'; put 'put ''NCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyLjFhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTgsMi4xWk0xNi42LDguOGExLjQsMS40LDAs''@;'; put 'put ''MCwxLDIuOCwwdjEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI4LjZhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTgsMjguNloiLz4nKSxoLkNsclNoYXBlV2FybmluZ1N0YW5kYXJkPSgwLHMuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxOCIgY3k9IjI2LjA2IiByPSIxLjMzIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMi42MWExLDEsMCwwLDEtMS0xdi0xMmExLDEsMCwxLDEsMiwwdjEy''@;'; put 'put ''QTEsMSwwLDAsMSwxOCwyMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LjA2MjA3ODIsMS42ODExOTYgQzE1LjYyOTg4MTksMC42NDkyNjYzNTUgMTYuNzEwOTA5MSwwLjAxMDIyMTkzOTYgMTcu''@;'; put 'put ''ODg1LDAuMDEwMjIxOTM5NiBDMTkuMDU5MDkwOSwwLjAxMDIyMTkzOTYgMjAuMTQwMTE4MSwwLjY0OTI2NjM1NSAyMC43MDg2NDMzLDEuNjgyNTIxMjkgTDM0LjU5ODY0NCwyNy4yNDI1MjI1IEMzNS4xNDA3NzQ2LDI4LjI0MDEzOTcgMzUuMTE3NDM0NSwyOS40NDk1MzczIDM0LjUzNzIxNjEs''@;'; put 'put ''MzAuNDI1NDk0MyBDMzMuOTU2OTk3NywzMS40MDE0NTE0IDMyLjkwNTY3MSwzMS45OTk2OTg0IDMxLjc3LDMyIEw0LjAyMjM5MzIzLDMxLjk5OTc0OTIgQzIuODc0MDkwMDksMzIuMDI1NDY5OSAxLjc5OTAyODQzLDMxLjQzNzU3NTMgMS4yMDEwNjMzNSwzMC40NTY5MTI2IEMwLjYwMzA5ODI2''@;'; put 'put ''NSwyOS40NzYyNDk5IDAuNTcyNzc3ODk5LDI4LjI1MTMxNzkgMS4xMjIwNzgxOCwyNy4yNDExOTYgTDE1LjA2MjA3ODIsMS42ODExOTYgWiBNMi44Nzg1MDc2NywyOC4xOTc3MjgyIEMyLjY3MDYwOTY2LDI4LjU4MDAzNzYgMi42ODIwOTc1LDI5LjA0NDE0MjMgMi45MDg2NTU3LDI5LjQxNTY5''@;'; put 'put ''NzcgQzMuMTM1MjEzOSwyOS43ODcyNTMyIDMuNTQyNTM1NCwzMC4wMDk5OTU5IDQsMzAgTDMxLjc2OTczNDQsMzAgQzMyLjE5OTkxOTEsMjkuOTk5ODg1OCAzMi41OTgyNDc4LDI5Ljc3MzIyMDggMzIuODE4MDgyMSwyOS40MDM0NDgyIEMzMy4wMzc5MTY0LDI5LjAzMzY3NTcgMzMuMDQ2NzU5''@;'; put 'put ''NSwyOC41NzU0NTY3IDMyLjg0MTM1NjcsMjguMTk3NDc4NyBMMTguOTUzODczOSwyLjY0MjA4MTk1IEMxOC43Mzk0MjM2LDIuMjUyMzQ0MzYgMTguMzI5ODQxOSwyLjAxMDIyMTk0IDE3Ljg4NSwyLjAxMDIyMTk0IEMxNy40NDA2ODg5LDIuMDEwMjIxOTQgMTcuMDMxNTUzOCwyLjI1MTc2Njky''@;'; put 'put ''IDE2LjgxNjg5NDYsMi42NDA2ODc1MyBMMi44Nzg1MDc2NywyOC4xOTc3MjgyIFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQuNiwyOS4yMSwyMC43MSwzLjY1YTMuMjIsMy4yMiwwLDAsMC01LjY2LDBMMS4x''@;'; put 'put ''NywyOS4yMUEzLjIyLDMuMjIsMCwwLDAsNCwzNEgzMS43N2EzLjIyLDMuMjIsMCwwLDAsMi44My00Ljc1Wk0xNi42LDEwYTEuNCwxLjQsMCwwLDEsMi44LDB2MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjkuODVhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTgsMjku''@;'; put 'put ''ODVaIi8+JyksaC5DbHJTaGFwZUhlbHBJbmZvPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS4zOSwyNS40NWExLDEsMCwwLDAtMS4zOC4yOWMtMS40MSwyLjE2LTQsNC44MS02LjMxLDUuN3MtNC4xMi41Ny00Ljg0LDBjLS4zMS0uMjctMS4xMi0xLS40My0zLjQ5LjQ2LTEuNjYsMy4z''@;'; put 'put ''Mi05LjQ4LDQtMTEuMzhsLTIuMTguMjhjLS42OSwxLjg2LTMuMjksOC44NC0zLjc2LDEwLjU4LS42OCwyLjQ5LS4zNCw0LjMsMS4wOSw1LjU2QTUuNTksNS41OSwwLDAsMCwxNSwzNGE5LjUzLDkuNTMsMCwwLDAsMy40NS0uN2MyLjc5LTEuMDksNS43Mi00LjEyLDcuMjYtNi40N0ExLDEsMCww''@;'; put 'put ''LDAsMjUuMzksMjUuNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS4zLDExYTQuNSw0LjUsMCwxLDAtNC41LTQuNUE0LjUsNC41LDAsMCwwLDE5LjMsMTFabTAtN2EyLjUsMi41LDAsMSwxLTIuNSwyLjVB''@;'; put 'put ''Mi41LDIuNSwwLDAsMSwxOS4zLDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS44MSwxNWMuMDYsMCw2LjI3LS44Miw3LjczLTEsLjY1LS4xLDEuMTQsMCwxLjMuMTVzLjIxLjgtLjA3LDEuNjhjLS42MSwx''@;'; put 'put ''Ljg2LTMuNjksMTEtNC41OSwxMy43MWE4LDgsMCwwLDAsMS4yOS0uMzgsNy4zMiw3LjMyLDAsMCwwLDEuMTUtLjZDMTkuODUsMjUsMjIuMTUsMTguMSwyMi42NywxNi41MnMuMzktMi43OC0uMy0zLjZhMy4xNiwzLjE2LDAsMCwwLTMuMDgtLjgzYy0xLjQzLjE1LTcuNDcuOTQtNy43MywxYTEs''@;'; put 'put ''MSwwLDAsMCwuMjYsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjAuNzUiIGN5PSI2IiByPSI0IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTI0Ljg0LDI2LjIzYTEsMSwwLDAsMC0xLjQuMjksMTYuNiwxNi42LDAsMCwxLTMuNTEsMy43N2MtLjMzLjI1LTEuNTYsMS4yLTIuMDgsMS0uMzYtLjExLS4xNS0uODItLjA4LTEuMTJsLjUzLTEuNTdjLjIyLS42NCw0LjA1LTEyLDQuNDctMTMuMy42Mi0xLjkuMzUtMy43Ny0yLjQ4''@;'; put 'put ''LTMuMzItLjc3LjA4LTguNTgsMS4wOS04LjcyLDEuMWExLDEsMCwwLDAsLjEzLDJzMy0uMzksMy4zMy0uNDJhLjg4Ljg4LDAsMCwxLC44NS40NCwyLjQ3LDIuNDcsMCwwLDEtLjA3LDEuNzFjLS4yNiwxLTQuMzcsMTIuNTgtNC41LDEzLjI1YTIuNzgsMi43OCwwLDAsMCwxLjE4LDMsNSw1LDAs''@;'; put 'put ''MCwwLDMuMDguODNoMGE4LjUzLDguNTMsMCwwLDAsMy4wOS0uNjJjMi40OS0xLDUuMDktMy42Niw2LjQ2LTUuNzVBMSwxLDAsMCwwLDI0Ljg0LDI2LjIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxoLkNsclNoYXBlQmFycz0oMCxzLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDI5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBk''@;'; put 'put ''PSJNMzIsMTlINGExLDEsMCwwLDEsMC0ySDMyYTEsMSwwLDAsMSwwLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zMiw5SDRBMSwxLDAsMCwxLDQsN0gzMmExLDEsMCwwLDEsMCwyWiIvPicpLGguQ2xy''@;'; put 'put ''U2hhcGVVc2VyPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwxLDAtNy03QTcsNywwLDAsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEtNSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwx''@;'; put 'put ''LDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAs''@;'; put 'put ''Mi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwx''@;'; put 'put ''N2E3LDcsMCwwLDAsNC40NS0xLjZoLS4yMkEzLjY4LDMuNjgsMCwwLDEsMjAsMTQuNmE1LDUsMCwxLDEsMS4yNC04LjQybDEtMS43NkE3LDcsMCwxLDAsMTgsMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEy''@;'; put 'put ''LDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcsNywwLDAsMCw2''@;'; put 'put ''Ljg1LTUuNTYsNy40LDcuNCwwLDAsMS0yLjI0LTYuNjlBNyw3LDAsMSwwLDE4LDE3Wk0xOCw1YTUsNSwwLDEsMS01LDVBNSw1LDAsMCwxLDE4LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEsMjQuNTJhMTcuMTYsMTcuMTYsMCwwLDAtMjUuMjIsMCwxLjUx''@;'; put 'put ''LDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCwwLDMwLjYxLDI0LjUyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9''@;'; put 'put ''IjE4IiBjeT0iMTAiIHI9IjciIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEsMjQuNTJhMTcuMTYsMTcuMTYsMCwwLDAtMjUuMjIsMCwxLjUxLDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwz''@;'; put 'put ''M2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCwwLDMwLjYxLDI0LjUyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNC40NS0x''@;'; put 'put ''LjZoLS4yMkEzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwzLjE2LTUuNDdBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41Mloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcsNywwLDAsMCw2Ljg1LTUuNTYsNy40LDcuNCwwLDAsMS0yLjI0LTYuNjlBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxoLkNsclNo''@;'; put 'put ''YXBlQW5nbGU9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS41MiwyMi41MiwxOCwxMC42LDYuNDgsMjIuNTJhMS43LDEuNywwLDAsMCwyLjQ1LDIuMzZMMTgsMTUuNDlsOS4wOCw5LjM5YTEuNywxLjcsMCww''@;'; put 'put ''LDAsMi40NS0yLjM2WiIvPicpLGguQ2xyU2hhcGVGb2xkZXI9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5''@;'; put 'put ''YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVptMCwyMEg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41VjI5SDZWMTNoNy4zMWEyLDIsMCwwLDAsMi0ySDZWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTFhNy41LDcuNSwwLDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCww''@;'; put 'put ''LDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMCwxNS40VjI5SDZWMTNoNy4zMWEyLDIsMCww''@;'; put 'put ''LDAsMi0ySDZWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''MTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5''@;'; put 'put ''LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVpNNiwxMVY3aDYuNDlsMi43Miw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQiIGQ9Ik0yMi4yMywxNS40QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaTTYsMTFWN2g2LjQ5bDIuNzIs''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjMuMTMs''@;'; put 'put ''OUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xl''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksaC5DbHJTaGFwZUZvbGRlck9wZW49KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40''@;'; put 'put ''MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFpNMjkuNTUsMjlINi45bDMuODgtMTMuODFhLjY2''@;'; put 'put ''LjY2LDAsMCwxLC4zOC0uMjRIMzMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41''@;'; put 'put ''OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAsMCwxLTEuMjktMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEu''@;'; put 'put ''MzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFpNMjkuNTUsMjlINi45bDMuODgtMTMuODFhLjY2LjY2LDAsMCwxLC4zOC0uMjRIMzMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxl''@;'; put 'put ''cnRlZCIgZD0iTTMzLjY4LDE1LjRoLS4zTDI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0aDkuNDJBMy42NywzLjY3LDAsMCwxLDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCww''@;'; put 'put ''LDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgz''@;'; put 'put ''MC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xYTEuNjgsMS42OCwwLDAsMCwuMDctLjMyQTMuNjcsMy42NywwLDAsMSwzMy42OCwxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgz''@;'; put 'put ''MmEyLDIsMCwwLDAtMi0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0WiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5LDIuNTksMCww''@;'; put 'put ''LDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4z''@;'; put 'put ''NywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCwwLDEsMzMuNjgsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3''@;'; put 'put ''aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoOC41MmE3LjQ5LDcuNDksMCwwLDEtMS4zMS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0''@;'; put 'put ''LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxoLkNsclNo''@;'; put 'put ''YXBlQmVsbD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjUxLDI3LjgzQTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNUExMC44MSwxMC44MSwwLDAs''@;'; put 'put ''MCwxOS4yMSw0LjRWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzLDEsMSwwLDAsMC0uMzQuNzV2MS4zNmExLDEsMCwwLDAs''@;'; put 'put ''MSwxaDI3LjhhMSwxLDAsMCwwLDEtMVYyOC41OEExLDEsMCwwLDAsMzIuNTEsMjcuODNaTTUuMTMsMjguOTRhMTYuMTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNWE4Ljc0LDguNzQsMCwxLDEsMTcuNDcsMHY0Ljk0YTE0LjI0LDE0LjI0LDAs''@;'; put 'put ''MCwwLDEuNjUsNS44NSwxNi4xNywxNi4xNywwLDAsMCwyLjQ0LDNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAs''@;'; put 'put ''MCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDM0LjI4QTIuNjcsMi42NywwLDAsMCwyMC41OCwzMkgxNS4zMkEyLjY3LDIuNjcsMCwwLDAsMTgsMzQu''@;'; put 'put ''MjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuNTEsMjcuODNBMTQuNCwxNC40LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1YTEw''@;'; put 'put ''LjkyLDEwLjkyLDAsMCwwLS4xNi0xLjc5LDcuNDQsNy40NCwwLDAsMS0yLjI0LS44NCw4Ljg5LDguODksMCwwLDEsLjQsMi42NHY0Ljk0YTE0LjI0LDE0LjI0LDAsMCwwLDEuNjUsNS44NSwxNi4xNywxNi4xNywwLDAsMCwyLjQ0LDNINS4xM2ExNi4xNywxNi4xNywwLDAsMCwyLjQ0LTMsMTQu''@;'; put 'put ''MjQsMTQuMjQsMCwwLDAsMS42NS01Ljg1VjE1LjE1QTguOCw4LjgsMCwwLDEsMTgsNi4zMWE4LjYxLDguNjEsMCwwLDEsNC43NiwxLjQ0QTcuNDksNy40OSwwLDAsMSwyMi41LDZjMC0uMjEsMC0uNDIsMC0uNjNhMTAuNTgsMTAuNTgsMCwwLDAtMy4zMi0xVjMuMTFhMS4zMywxLjMzLDAsMSww''@;'; put 'put ''LTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45MywxLDEsMCwwLDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwx''@;'; put 'put ''LDAsMCwwLDMyLjUxLDI3LjgzWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjg1LDI4LjEzbC0uMzQtLjNBMTQuMzcsMTQuMzcsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMz''@;'; put 'put ''LDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45M2wtLjM0LjN2Mi44MkgzMi44NVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTUuMzIsMzJhMi42NSwyLjY1LDAsMCwwLDUuMjUsMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDM0LjI4QTIuNjcsMi42''@;'; put 'put ''NywwLDAsMCwyMC41OCwzMkgxNS4zMkEyLjY3LDIuNjcsMCwwLDAsMTgsMzQuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3''@;'; put 'put ''LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1YTEwLjkyLDEwLjkyLDAsMCwwLS4xNi0xLjc5QTcuNSw3LjUsMCwwLDEsMjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU3LDEwLjU3LDAsMCwwLTMuMzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3''@;'; put 'put ''LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGguQ2xyU2hhcGVJbWFnZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAs''@;'; put 'put ''Mi0yVjZBMiwyLDAsMCwwLDMyLDRaTTQsMzBWNkgzMlYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC45MiwxNGEzLDMsMCwxLDAtMy0zQTMsMywwLDAsMCw4LjkyLDE0Wm0wLTQuNkExLjYsMS42LDAsMSwx''@;'; put 'put ''LDcuMzMsMTEsMS42LDEuNiwwLDAsMSw4LjkyLDkuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjc4LDE1LjM3bC01LjQsNS40LTQtNGExLDEsMCwwLDAtMS40MSwwTDUuOTIsMjIuOXYyLjgzbDYuNzkt''@;'; put 'put ''Ni43OUwxNiwyMi4xOGwtMy43NSwzLjc1SDE1bDguNDUtOC40NUwzMCwyNFYyMS4xOGwtNS44MS01LjgxQTEsMSwwLDAsMCwyMi43OCwxNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuOTMsMTFhMywz''@;'; put 'put ''LDAsMSwwLTMsM0EzLDMsMCwwLDAsMTEuOTMsMTFabS00LjYsMGExLjYsMS42LDAsMSwxLDEuNiwxLjZBMS42LDEuNiwwLDAsMSw3LjMzLDExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMTcuMzgsMjAuNzdsLTQtNGExLDEsMCwwLDAtMS40MSwwTDUuOTIsMjIuOXYyLjgzbDYuNzktNi43OUwxNiwyMi4xOGwtMy43NSwzLjc1SDE1bDguNDUtOC40NUwzMCwyNFYyMS4xOGwtNS44MS01LjgxYTEsMSwwLDAsMC0xLjQxLDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMlYzMEg0VjZIMjIuNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ1LDcuNDUs''@;'; put 'put ''MCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYs''@;'; put 'put ''MjdWMjIuOWw2LTYuMDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwxLjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMzAsMTMuNUE3LjQ4LDcuNDgsMCwwLDEsMjIuNzgsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk04LjkyLDhhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIy''@;'; put 'put ''LjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxoLkNsclNoYXBlQ2xvdWQ9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy4xNCwzM0gxMC42MkM1LjY3LDMzLDEsMjguMTksMSwyMy4xYTEwLDEwLDAsMCwxLDgtOS43NSwxMC4xOSwxMC4xOSwwLDAsMSwyMC4zMywxLjA2QTEwLjA3LDEwLjA3LDAsMCwxLDI5LDE2LjY2YTguMjksOC4yOSwwLDAsMSw2LDhDMzUs''@;'; put 'put ''MjkuMSwzMS4zMywzMywyNy4xNCwzM1pNMTkuMDksNi4yM2E4LjI0LDguMjQsMCwwLDAtOC4xOSw4bDAsLjg3LS44Ni4xQTcuOTQsNy45NCwwLDAsMCwzLDIzLjFjMCw0LDMuNzcsNy45LDcuNjIsNy45SDI3LjE0QzMwLjIxLDMxLDMzLDI4LDMzLDI0LjY1YTYuMzEsNi4zMSwwLDAsMC01LjM3''@;'; put 'put ''LTYuMjZsLTEuMTgtLjE4LjM5LTEuMTNBOC4xOCw4LjE4LDAsMCwwLDE5LjA5LDYuMjNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCww''@;'; put 'put ''LDAsLjI1LTIuMjRjMC0uMzMsMC0uNjUsMC0xYTcuNDUsNy40NSwwLDAsMS0yLjEtLjU0LDgsOCwwLDAsMS0uMyw0LjE2bC0uMzksMS4xMywxLjE4LjE4YTYuMzEsNi4zMSwwLDAsMSw1LjM3LDYuMjZDMzIuOTUsMjgsMzAuMTYsMzEsMjcuMDksMzFIMTAuNTdjLTMuODQsMC03LjYyLTMuOTEt''@;'; put 'put ''Ny42Mi03LjlhNy45NCw3Ljk0LDAsMCwxLDctNy44OWwuODYtLjEsMC0uODdhOC4yNCw4LjI0LDAsMCwxLDguMTktOEE4LjEzLDguMTMsMCwwLDEsMjIuNTgsN2E3LjUzLDcuNTMsMCwwLDEtLjA4LTEsNy41MSw3LjUxLDAsMCwxLC4wOS0xLjEyQTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMs''@;'; put 'put ''MTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNmExMCwxMCwwLDAsMC04LDkuNzVjMCw1LjA5LDQuNjcsOS45LDkuNjIsOS45SDI3LjA5YzQuMTksMCw3Ljg2LTMuOSw3Ljg2LTguMzVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFs''@;'; put 'put ''ZXJ0ZWQiIGQ9Ik0yOSwxNi42NmExMC4xNCwxMC4xNCwwLDAsMCwuMi0xLjNoLTJhOC4yOCw4LjI4LDAsMCwxLS4zNywxLjcybC0uMzksMS4xMywxLjE4LjE4YTYuMzEsNi4zMSwwLDAsMSw1LjM3LDYuMjZDMzIuOTUsMjgsMzAuMTYsMzEsMjcuMDksMzFIMTAuNTdjLTMuODQsMC03LjYyLTMu''@;'; put 'put ''OTEtNy42Mi03LjlhNy45NCw3Ljk0LDAsMCwxLDctNy44OWwuODYtLjEsMC0uODdBOC4xNiw4LjE2LDAsMCwxLDIxLDYuNDdsMS0xLjhBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNmExMCwxMCwwLDAsMC04LDkuNzVjMCw1LjA5LDQuNjcsOS45LDkuNjIsOS45SDI3LjA5YzQuMTksMCw3''@;'; put 'put ''Ljg2LTMuOSw3Ljg2LTguMzVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywx''@;'; put 'put ''MUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0i''@;'; put 'put ''TTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0QTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAsMSwyMy4xQzEsMjguMTksNS42MiwzMywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42''@;'; put 'put ''NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ0LDcuNDQsMCwwLDEtNi42LTguNThB''@;'; put 'put ''MTAuMTMsMTAuMTMsMCwwLDAsMTksNC4yMywxMC4yNiwxMC4yNiwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yOSwxNi42NmExMC4xNSwxMC4xNSwwLDAsMCwuMi0xLjI2aC03QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDMtNS4yMUExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMsMTAu''@;'; put 'put ''NTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2''@;'; put 'put ''Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLGguQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9KDAscy5jbHJJY29uU1ZHKSgn''@;'; put 'put ''PGNpcmNsZSBjeD0iMzEuMSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzEuMSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGguQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPSgwLHMuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjE4IiBjeT0iNC45IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iNC45IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0i''@;'; put 'put ''MTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIzMS4xIiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxoLkNsclNoYXBlRmlsdGVyR3JpZD0oMCxzLmNs''@;'; put 'put ''ckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwx''@;'; put 'put ''NEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTgsMTF2''@;'; put 'put ''MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSwwLDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEyLTcuMjVhLjUuNSwwLDAsMCwuMTUtLjM1VjExWiIv''@;'; put 'put ''PicpLGguQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTUsMjUuODZsMiwxVjIwLjI3YTEsMSwwLDAsMC0uMjktLjdMMTAuMjMsMTNIMjUuNzlsLTYuNDcsNi41N2Ex''@;'; put 'put ''LDEsMCwwLDAtLjI5LjdMMTksMjhsMiwxVjIwLjY4TDI3LjU4LDE0QTEuNDYsMS40NiwwLDAsMCwyOCwxM1YxMmExLDEsMCwwLDAtMS0xSDlhMSwxLDAsMCwwLTEsMXYxYTEuNDYsMS40NiwwLDAsMCwuNDIsMUwxNSwyMC42OFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTIiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1YS41LjUsMCww''@;'; put 'put ''LDAsLjE1LS4zNVYxMVoiLz4nKSxoLkNsclNoYXBlVm1CdWc9KDAscy5jbHJJY29uU1ZHKSgnPHJlY3Qgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgb3BhY2l0eT0iMC4xNSIgc3R5bGU9Imlzb2xhdGlvbjppc29sYXRlIi8+PHBhdGggZD0iTTMuNzksMTQu''@;'; put 'put ''ODNhMS4wOSwxLjA5LDAsMCwwLTEuNDctLjU2LDEuMDksMS4wOSwwLDAsMC0uNTQsMS40OWwyLjQ3LDUuNGMuMzkuODUuOCwxLjI5LDEuNTcsMS4yOVM3LDIyLDcuMzksMjEuMTZsMi4xNy00Ljc3YS4zMy4zMywwLDAsMSwuMzEtLjIuMzUuMzUsMCwwLDEsLjM1LjM1djQuNjFhMS4xNSwxLjE1''@;'; put 'put ''LDAsMCwwLDEuMTQsMS4zLDEuMTcsMS4xNywwLDAsMCwxLjE3LTEuM1YxNy4zOGExLjE1LDEuMTUsMCwwLDEsMS4yMi0xLjIsMS4xMywxLjEzLDAsMCwxLDEuMTgsMS4ydjMuNzdhMS4xNywxLjE3LDAsMSwwLDIuMzIsMFYxNy4zOGExLjE1LDEuMTUsMCwwLDEsMS4yMi0xLjIsMS4xMywxLjEz''@;'; put 'put ''LDAsMCwxLDEuMTgsMS4ydjMuNzdhMS4xNiwxLjE2LDAsMSwwLDIuMzEsMFYxNi44NmEyLjY5LDIuNjksMCwwLDAtMi43OC0yLjY5LDMuNTcsMy41NywwLDAsMC0yLjQ3LDEuMDUsMi43NSwyLjc1LDAsMCwwLTIuMzgtMS4wNUEzLjkzLDMuOTMsMCwwLDAsMTIsMTUuMjJhMi44MiwyLjgyLDAs''@;'; put 'put ''MCwwLTIuMDgtMS4wNUEyLjU1LDIuNTUsMCwwLDAsNy40LDE1Ljg5TDUuODIsMTkuNjNsLTItNC44IiBmaWxsPSIjZmZmZmZmIi8+PHBhdGggZD0iTTMzLDE0LjE4QTEuMTQsMS4xNCwwLDAsMCwzMS45LDE1bC0xLjE5LDMuNzNMMjkuNSwxNS4wNWExLjE4LDEuMTgsMCwwLDAtMS4xNS0uODdo''@;'; put 'put ''LS4xYTEuMiwxLjIsMCwwLDAtMS4xNS44N2wtMS4xOSwzLjcxLTEuMTgtMy43MWExLjE1LDEuMTUsMCwwLDAtMS4xMS0uODcsMS4wOCwxLjA4LDAsMCwwLTEuMTIsMS4wNywxLjY4LDEuNjgsMCwwLDAsLjEuNTRsMiw1LjdhMS4yNywxLjI3LDAsMCwwLDEuMjcsMSwxLjI0LDEuMjQsMCwwLDAs''@;'; put 'put ''MS4yLS45M2wxLjItMy42NCwxLjIsMy42NGExLjI1LDEuMjUsMCwwLDAsMS4yNi45M0ExLjI3LDEuMjcsMCwwLDAsMzIsMjEuNUwzNCwxNS43M2ExLjc3LDEuNzcsMCwwLDAsLjA4LS40OEExLjA3LDEuMDcsMCwwLDAsMzMsMTQuMThaIiBmaWxsPSIjZmZmZmZmIi8+JyksaC5DbHJTaGFwZVNl''@;'; put 'put ''YXJjaD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE2LjMzLDUuMDVBMTAuOTUsMTAuOTUsMCwxLDEsNS4zOSwxNiwxMSwxMSwwLDAsMSwxNi4zMyw1LjA1bTAtMi4wNWExMywxMywwLDEsMCwxMywxMywxMywx''@;'; put 'put ''MywwLDAsMC0xMy0xM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTM1LDMzLjI5bC03LjM3LTcuNDItMS40MiwxLjQxLDcuMzcsNy40MkExLDEsMCwxLDAsMzUsMzMuMjlaIi8+JyksaC5DbHJTaGFwZVZp''@;'; put 'put ''ZXdDb2x1bW5zPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsNUg1QTIsMiwwLDAsMCwzLDdWMjlhMiwyLDAsMCwwLDIsMkgzMWEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMxLDVaTTEzLDI5SDVWN2g4''@;'; put 'put ''Wm0xMCwwSDE1VjdoOFoiLz4nKSxoLkNsclNoYXBlQW5nbGVEb3VibGU9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOSwxOS40MWExLDEsMCwwLDEtLjcxLS4yOUwxOCw4LjgzLDcuNzEsMTkuMTJhMSwxLDAs''@;'; put 'put ''MCwxLTEuNDEtMS40MUwxOCw2LDI5LjcxLDE3LjcxQTEsMSwwLDAsMSwyOSwxOS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LDMwLjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDE5LjgzLDcuNzEs''@;'; put 'put ''MzAuMTJhMSwxLDAsMCwxLTEuNDEtMS40MUwxOCwxNywyOS43MSwyOC43MUExLDEsMCwwLDEsMjksMzAuNDFaIi8+JyksaC5DbHJTaGFwZUNhbGVuZGFyPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuMjUs''@;'; put 'put ''NkgyOVY4aDNWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTQiIHk9IjE0IiB3aWR0aD0i''@;'; put 'put ''MiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjIwIiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC01IiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9''@;'; put 'put ''IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIy''@;'; put 'put ''IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTIiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xMyIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0IiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNW''@;'; put 'put ''OUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiB4PSIxMyIgeT0iNiIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1i''@;'; put 'put ''YWRnZWQiIGQ9Ik0zMiwxMy4yMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSI4IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiB4PSIyMCIgeT0iMTQiIHdpZHRoPSIy''@;'; put 'put ''IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIHg9IjI2IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRn''@;'; put 'put ''ZWQiIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYmFkZ2VkIiB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiIHg9IjE0IiB5PSIyNCIg''@;'; put 'put ''d2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1iYWRnZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEzLS1iYWRnZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTE0LS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNS0tYmFkZ2VkIiBkPSJN''@;'; put 'put ''MjIuNSw2SDEzVjhoOS43OEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgzMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43''@;'; put 'put ''NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIHg9IjE0''@;'; put 'put ''IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTgtLWFsZXJ0ZWQiIHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiIHg9IjE0IiB5PSIyNCIgd2lk''@;'; put 'put ''dGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYWxlcnRlZCIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3Qg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMTItLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cG9seWdvbiBwb2ludHM9IjIxLjI5IDYgMTMgNiAxMyA4IDIwLjE0IDggMjEuMjkgNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4y''@;'; put 'put ''OCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4yNSw2aC00VjlhMi4yLDIuMiwwLDEsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4''@;'; put 'put ''LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5''@;'; put 'put ''aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2VjE0aDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0i''@;'; put 'put ''TTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEs''@;'; put 'put ''MSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlB''@;'; put 'put ''MS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYs''@;'; put 'put ''MTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTAtNUgyMFYxNGgyWm02LDEwSDI2VjI0aDJabTAtNUgyNlYxOWgyWm0wLTVIMjZWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgx''@;'; put 'put ''Mi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgx''@;'; put 'put ''NFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTYsNUgyNlYyNGgyWm0wLTVIMjZWMTloMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVy''@;'; put 'put ''dGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2''@;'; put 'put ''Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLGguQ2xyU2hhcGVFdmVudD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE2LjE3LDI1Ljg2LDEwLjgxLDIwLjVhMSwxLDAsMCwxLDEuNDEtMS40MUwxNi4xNywyM2w4LjY0LTguNjRhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCww''@;'; put 'put ''LDMyLjI1LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC01IiB4PSIxMyIgeT0iNiIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEs''@;'; put 'put ''MCwwLDAtMS40MS0xLjQxTDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0x''@;'; put 'put ''VjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMiwxMy4yMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCww''@;'; put 'put ''LDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMjIuNSw2SDEzVjhoOS43OEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBj''@;'; put 'put ''eD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEwLjgxLDIwLjVsNS4zNiw1LjM2TDI2LjIyLDE1LjgxYTEsMSwwLDAsMCwuMjMtLjQxSDIzLjhMMTYuMTcsMjNsLTMuOTQtMy45''@;'; put 'put ''NGExLDEsMCwwLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiBwb2ludHM9IjIxLjI5IDYgMTMgNiAxMyA4IDIwLjE0IDggMjEuMjkgNiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgzMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgy''@;'; put 'put ''OC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xMCwxMGEx''@;'; put 'put ''LDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAs''@;'; put 'put ''MjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTMyLjI1LDZoLTRWOWEyLjIsMi4yLDAsMCwxLTQuNCwwVjZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3Ljgx''@;'; put 'put ''VjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaTTI1Ljk0LDE2LjU4bC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2''@;'; put 'put ''YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEw''@;'; put 'put ''LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDI2LjNhMS4zNCwxLjM0LDAsMCwxLS4zNiwxLjE4bC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAs''@;'; put 'put ''MCwxLDEyLjksMTlsMy4zOCwzLjM4LDctN2gtMUEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAs''@;'; put 'put ''MCwzNCwzMC4xOVYxNS4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMu''@;'; put 'put ''NjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCww''@;'; put 'put ''LDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIMTIuMlY5QTIu''@;'; put 'put ''MiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wm0tNC4wNiwzLjA4LTkuNjcsOS42N0wxMSwyMC45''@;'; put 'put ''NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzhMMjQsMTQuNjZhMS4zNiwxLjM2LDAsMSwxLDEuOTMsMS45M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdl''@;'; put 'put ''IiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksaC5DbHJTaGFwZUV5ZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1Ljgy''@;'; put 'put ''LDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMDksMTEuMTdBNi44Niw2Ljg2LDAsMSwwLDI1LDE4LDYuODYsNi44NiwwLDAsMCwxOC4wOSwxMS4xN1ptMCwxMS43MkE0Ljg2LDQuODYsMCwxLDEsMjMsMTgsNC44Nyw0Ljg3LDAsMCwx''@;'; put 'put ''LDE4LjA5LDIyLjg5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42MiwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIz''@;'; put 'put ''LDkuMjgsMTAsMTUuODIsMTBzMTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0xNy44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwxOGMzLTUuMjksOC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQz''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTguMDkiIGN5PSIxOC4wMyIgcj0iNi44NiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPicpLGguQ2xyU2hhcGVFeWVIaWRlPSgwLHMuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0yNS4xOSwyMC40QTYuNzgsNi43OCwwLDAsMCwyNS42MiwxOGE2Ljg2LDYuODYsMCwwLDAtNi44Ni02Ljg2LDYuNzksNi43OSwwLDAsMC0yLjM3LjQzTDE4LDEzLjIzYTQuNzgsNC43OCwwLDAsMSwuNzQtLjA2QTQuODcsNC44NywwLDAsMSwyMy42MiwxOGE0''@;'; put 'put ''Ljc5LDQuNzksMCwwLDEtLjA2Ljc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBhMTYuODIsMTYuODIsMCwwLDAtNS4yNC44NUwxNC44NCwx''@;'; put 'put ''MGExNC43OCwxNC43OCwwLDAsMSwzLjYzLS40N2M1LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40MiwxLjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUtNmwuMjYtLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00Ljg3LDUuNzhsNC40Niw0LjQ2YTE5LjUyLDE5LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45MywwLDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2''@;'; put 'put ''Wm05Ljc1LDkuNzUsNi42NSw2LjY1YTQuODEsNC44MSwwLDAsMS0yLjUuNzJBNC44Nyw0Ljg3LDAsMCwxLDEzLjksMTgsNC44MSw0LjgxLDAsMCwxLDE0LjYyLDE1LjUzWm0tMS40NS0xLjQ1YTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42LDEuNmExNC45MSwxNC45MSwwLDAsMS01Ljg2''@;'; put 'put ''LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4zNywxMS4xN0E2Ljc5LDYuNzksMCwwLDAsMTYsMTEu''@;'; put 'put ''Nmw4LjgsOC44QTYuNzgsNi43OCwwLDAsMCwyNS4yMywxOCw2Ljg2LDYuODYsMCwwLDAsMTguMzcsMTEuMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1Ljgy''@;'; put 'put ''LTEwYTE2LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00Ljg3LDUuNzhsNC40Niw0LjQ2YTE5LjUyLDE5LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45Myww''@;'; put 'put ''LDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2Wm04LjMsOC4zYTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42LDEuNmExNC45MSwxNC45MSwwLDAsMS01Ljg2LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLGguQ2xyU2hhcGVTdGVwRm9yd2FyZDI9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTcuMDgsNi41MmExLjY4LDEuNjgsMCwwLDAsMCwyLjRMMTYuNTEsMTgsNy4xMiwyNy4wOGExLjcsMS43LDAsMCwwLDIuMzYsMi40''@;'; put 'put ''NGgwTDIxLjQsMTgsOS40OCw2LjQ3QTEuNjksMS42OSwwLDAsMCw3LjA4LDYuNTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjYuNDksNWExLjcsMS43LDAsMCwwLTEuNywxLjdWMjkuM2ExLjcsMS43LDAsMCwwLDMuNCwwVjYuN0Ex''@;'; put 'put ''LjcsMS43LDAsMCwwLDI2LjQ5LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxoLkNsclNoYXBlQXJyb3c9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI3LjY2LDE1LjYxLDE4LDYsOC4zNCwxNS42MUExLDEsMCwxLDAsOS43NSwxN0wxNyw5''@;'; put 'put ''LjgxVjI4Ljk0YTEsMSwwLDEsMCwyLDBWOS44MUwyNi4yNSwxN2ExLDEsMCwwLDAsMS40MS0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz4nKSxoLkNvcmVTaGFwZXM9eyJ1bmtub3duLXN0YXR1cyI6aC5DbHJTaGFwZVVua25vd25TdGF0dXMsaG9t''@;'; put 'put ''ZTpoLkNsclNoYXBlSG9tZSxjb2c6aC5DbHJTaGFwZUNvZyxjaGVjazpoLkNsclNoYXBlQ2hlY2ssdGltZXM6aC5DbHJTaGFwZVRpbWVzLCJleGNsYW1hdGlvbi10cmlhbmdsZSI6aC5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGUsImV4Y2xhbWF0aW9uLWNpcmNsZSI6aC5DbHJTaGFwZUV4''@;'; put 'put ''Y2xhbWF0aW9uQ2lyY2xlLCJjaGVjay1jaXJjbGUiOmguQ2xyU2hhcGVDaGVja0NpcmNsZSwiaW5mby1jaXJjbGUiOmguQ2xyU2hhcGVJbmZvQ2lyY2xlLCJpbmZvLXN0YW5kYXJkIjpoLkNsclNoYXBlSW5mb1N0YW5kYXJkLCJzdWNjZXNzLXN0YW5kYXJkIjpoLkNsclNoYXBlU3VjY2Vzc1N0''@;'; put 'put ''YW5kYXJkLCJlcnJvci1zdGFuZGFyZCI6aC5DbHJTaGFwZUVycm9yU3RhbmRhcmQsIndhcm5pbmctc3RhbmRhcmQiOmguQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQsImhlbHAtaW5mbyI6aC5DbHJTaGFwZUhlbHBJbmZvLGJhcnM6aC5DbHJTaGFwZUJhcnMsdXNlcjpoLkNsclNoYXBlVXNlcixh''@;'; put 'put ''bmdsZTpoLkNsclNoYXBlQW5nbGUsZm9sZGVyOmguQ2xyU2hhcGVGb2xkZXIsImZvbGRlci1vcGVuIjpoLkNsclNoYXBlRm9sZGVyT3BlbixiZWxsOmguQ2xyU2hhcGVCZWxsLGltYWdlOmguQ2xyU2hhcGVJbWFnZSxjbG91ZDpoLkNsclNoYXBlQ2xvdWQsImVsbGlwc2lzLWhvcml6b250YWwi''@;'; put 'put ''OmguQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWwsImVsbGlwc2lzLXZlcnRpY2FsIjpoLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbCwiZmlsdGVyLWdyaWQiOmguQ2xyU2hhcGVGaWx0ZXJHcmlkLCJmaWx0ZXItZ3JpZC1jaXJjbGUiOmguQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlLCJ2bS1i''@;'; put 'put ''dWciOmguQ2xyU2hhcGVWbUJ1ZyxzZWFyY2g6aC5DbHJTaGFwZVNlYXJjaCwidmlldy1jb2x1bW5zIjpoLkNsclNoYXBlVmlld0NvbHVtbnMsImFuZ2xlLWRvdWJsZSI6aC5DbHJTaGFwZUFuZ2xlRG91YmxlLGNhbGVuZGFyOmguQ2xyU2hhcGVDYWxlbmRhcixldmVudDpoLkNsclNoYXBlRXZl''@;'; put 'put ''bnQsZXllOmguQ2xyU2hhcGVFeWUsImV5ZS1oaWRlIjpoLkNsclNoYXBlRXllSGlkZSwic3RlcC1mb3J3YXJkLTIiOmguQ2xyU2hhcGVTdGVwRm9yd2FyZDIsYXJyb3c6aC5DbHJTaGFwZUFycm93fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaC5Db3JlU2hhcGVzLCJob3VzZSIsKDAsYy5kZXNj''@;'; put 'put ''cmlwdG9yQ29uZmlnKShoLkNvcmVTaGFwZXMuaG9tZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLkNvcmVTaGFwZXMsInNldHRpbmdzIiwoMCxjLmRlc2NyaXB0b3JDb25maWcpKGguQ29yZVNoYXBlcy5jb2cpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaC5Db3JlU2hhcGVzLCJzdWNjZXNz''@;'; put 'put ''IiwoMCxjLmRlc2NyaXB0b3JDb25maWcpKGguQ29yZVNoYXBlcy5jaGVjaykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLkNvcmVTaGFwZXMsImNsb3NlIiwoMCxjLmRlc2NyaXB0b3JDb25maWcpKGguQ29yZVNoYXBlcy50aW1lcykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLkNvcmVTaGFw''@;'; put 'put ''ZXMsIndhcm5pbmciLCgwLGMuZGVzY3JpcHRvckNvbmZpZykoaC5Db3JlU2hhcGVzWyJleGNsYW1hdGlvbi10cmlhbmdsZSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGguQ29yZVNoYXBlcywiZXJyb3IiLCgwLGMuZGVzY3JpcHRvckNvbmZpZykoaC5Db3JlU2hhcGVzWyJleGNsYW1hdGlv''@;'; put 'put ''bi1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLkNvcmVTaGFwZXMsImluZm8iLCgwLGMuZGVzY3JpcHRvckNvbmZpZykoaC5Db3JlU2hhcGVzWyJpbmZvLWNpcmNsZSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGguQ29yZVNoYXBlcywibWVudSIsKDAsYy5kZXNjcmlwdG9y''@;'; put 'put ''Q29uZmlnKShoLkNvcmVTaGFwZXMuYmFycykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLkNvcmVTaGFwZXMsImF2YXRhciIsKDAsYy5kZXNjcmlwdG9yQ29uZmlnKShoLkNvcmVTaGFwZXMudXNlcikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLkNvcmVTaGFwZXMsImNhcmV0IiwoMCxjLmRl''@;'; put 'put ''c2NyaXB0b3JDb25maWcpKGguQ29yZVNoYXBlcy5hbmdsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLkNvcmVTaGFwZXMsImRpcmVjdG9yeSIsKDAsYy5kZXNjcmlwdG9yQ29uZmlnKShoLkNvcmVTaGFwZXMuZm9sZGVyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGguQ29yZVNoYXBlcywi''@;'; put 'put ''bm90aWZpY2F0aW9uIiwoMCxjLmRlc2NyaXB0b3JDb25maWcpKGguQ29yZVNoYXBlcy5iZWxsKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGguQ29yZVNoYXBlcywiY29sbGFwc2UiLCgwLGMuZGVzY3JpcHRvckNvbmZpZykoaC5Db3JlU2hhcGVzWyJhbmdsZS1kb3VibGUiXSkpfSwiLi9wcm9q''@;'; put 'put ''ZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3It''@;'; put 'put ''Y29uZmlnLnRzICoqKiEKICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihqLGgseSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShoLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxoLmRlc2NyaXB0b3JDb25maWc9dm9pZCAwLGguZGVzY3JpcHRvckNvbmZpZz1mdW5jdGlvbiBjKHMpe3JldHVybntlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTpzfX19LCIuL3Byb2plY3RzL2lj''@;'; put 'put ''b25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc2hhcGUt''@;'; put 'put ''dGVtcGxhdGUtb2JzZXJ2ZXIudHMgKioqIQogICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKGosaCx5KXsidXNlIHN0cmljdCI7''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KGgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGguU2hhcGVUZW1wbGF0ZU9ic2VydmVyPWguY2hhbmdlSGFuZGxlckNhbGxiYWNrcz12b2lkIDAsaC5jaGFuZ2VIYW5kbGVyQ2FsbGJhY2tzPXt9O3ZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcygpe3Ro''@;'; put 'put ''aXMuY2FsbGJhY2tzPWguY2hhbmdlSGFuZGxlckNhbGxiYWNrc31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsImluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuc2luZ2xlSW5zdGFuY2V8fChzLnNpbmdsZUluc3RhbmNlPW5ldyBzKSxzLnNpbmdsZUluc3RhbmNlfSxl''@;'; put 'put ''bnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHMucHJvdG90eXBlLnN1YnNjcmliZVRvPWZ1bmN0aW9uKEEsdil7dmFyIEM9dGhpcztyZXR1cm4gdGhpcy5jYWxsYmFja3NbQV0/LTE9PT10aGlzLmNhbGxiYWNrc1tBXS5pbmRleE9mKHYpJiZ0aGlzLmNhbGxiYWNrc1tBXS5wdXNoKHYp''@;'; put 'put ''OnRoaXMuY2FsbGJhY2tzW0FdPVt2XSxmdW5jdGlvbigpe3ZhciB3PUMuY2FsbGJhY2tzW0FdLmluZGV4T2Yodik7Qy5jYWxsYmFja3NbQV0uc3BsaWNlKHcsMSksMD09PUMuY2FsbGJhY2tzW0FdLmxlbmd0aCYmZGVsZXRlIEMuY2FsbGJhY2tzW0FdfX0scy5wcm90b3R5cGUuZW1pdENoYW5n''@;'; put 'put ''ZXM9ZnVuY3Rpb24oQSx2KXt0aGlzLmNhbGxiYWNrc1tBXSYmdGhpcy5jYWxsYmFja3NbQV0ubWFwKGZ1bmN0aW9uKEMpe0Modil9KX0sc30oKTtoLlNoYXBlVGVtcGxhdGVPYnNlcnZlcj1jfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiOgovKiEq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzICoqKiEKICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihqLGgseSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxoLmNsckljb25TVkc9dm9p''@;'; put 'put ''ZCAwO2guY2xySWNvblNWRz1mdW5jdGlvbiB2KEMpe3ZhciB3PSIiO3JldHVybiBDLmluZGV4T2YoIi0tYmFkZ2VkIik+LTEmJih3Kz0iY2FuLWJhZGdlICIpLEMuaW5kZXhPZigiLS1hbGVydGVkIik+LTEmJih3Kz0iY2FuLWFsZXJ0ICIpLEMuaW5kZXhPZigiY2xyLWktc29saWQiKT4tMSYm''@;'; put 'put ''KHcrPSJoYXMtc29saWQgIiksKHc/JzxzdmcgdmVyc2lvbj0iMS4xIiBjbGFzcz0iJyt3KyciIHZpZXdCb3g9IjAgMCAzNiAzNiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJo''@;'; put 'put ''dHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPic6JzxzdmcgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn''@;'; put 'put ''LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nKStDKyI8L3N2Zz4ifX19KX0sODA2ODUoZmUpe2ZlLmV4cG9ydHM9ZnVuY3Rpb24oail7dmFyIGg9e307ZnVuY3Rpb24geShjKXtpZihoW2Nd''@;'; put 'put ''KXJldHVybiBoW2NdLmV4cG9ydHM7dmFyIHM9aFtjXT17aTpjLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGpbY10uY2FsbChzLmV4cG9ydHMscyxzLmV4cG9ydHMseSkscy5sPSEwLHMuZXhwb3J0c31yZXR1cm4geS5tPWoseS5jPWgseS5kPWZ1bmN0aW9uKGMscyxBKXt5Lm8oYyxzKXx8T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KGMscyx7ZW51bWVyYWJsZTohMCxnZXQ6QX0pfSx5LnI9ZnVuY3Rpb24oYyl7dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShjLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0seS50PWZ1bmN0aW9uKGMscyl7aWYoMSZzJiYoYz15KGMpKSw4JnN8fDQmcyYmIm9iamVjdCI9PXR5cGVvZiBjJiZjJiZjLl9fZXNNb2R1bGUpcmV0dXJuIGM7dmFyIEE9T2JqZWN0LmNyZWF0ZShudWxsKTtp''@;'; put 'put ''Zih5LnIoQSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmN9KSwyJnMmJiJzdHJpbmciIT10eXBlb2YgYylmb3IodmFyIHYgaW4gYyl5LmQoQSx2LGZ1bmN0aW9uKEMpe3JldHVybiBjW0NdfS5iaW5kKG51bGwsdikpO3JldHVybiBBfSx5''@;'; put 'put ''Lm49ZnVuY3Rpb24oYyl7dmFyIHM9YyYmYy5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGMuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gY307cmV0dXJuIHkuZChzLCJhIixzKSxzfSx5Lm89ZnVuY3Rpb24oYyxzKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0''@;'; put 'put ''eS5jYWxsKGMscyl9LHkucD0iIix5KHkucz0iLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMiKX0oeyIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvYWxsLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKiohKlwKICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0''@;'; put 'put ''cyBmb3VuZCAqL2Z1bmN0aW9uKGosaCx5KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGguQWxsU2hhcGVzPXZvaWQgMDt2YXIgYz15KAovKiEgLi9jaGFydC1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBl''@;'; put 'put ''cy9jaGFydC1zaGFwZXMudHMiKSxzPXkoCi8qISAuL2NvbW1lcmNlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvbW1lcmNlLXNoYXBlcy50cyIpLEE9eSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBl''@;'; put 'put ''cy50cyIpLHY9eSgKLyohIC4vZXNzZW50aWFsLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2Vzc2VudGlhbC1zaGFwZXMudHMiKSxDPXkoCi8qISAuL21lZGlhLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyIpLHc9''@;'; put 'put ''eSgKLyohIC4vc29jaWFsLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMiKSxTPXkoCi8qISAuL3RlY2hub2xvZ3ktc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGVjaG5vbG9neS1zaGFwZXMudHMiKSxMPXkoCi8q''@;'; put 'put ''ISAuL3RleHQtZWRpdC1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIiksUj15KAovKiEgLi90cmF2ZWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyIpLHg9W0EuQ29yZVNoYXBl''@;'; put 'put ''cyxzLkNvbW1lcmNlU2hhcGVzLHYuRXNzZW50aWFsU2hhcGVzLEMuTWVkaWFTaGFwZXMsdy5Tb2NpYWxTaGFwZXMsUy5UZWNobm9sb2d5U2hhcGVzLFIuVHJhdmVsU2hhcGVzLGMuQ2hhcnRTaGFwZXMsTC5UZXh0RWRpdFNoYXBlc10sVT17fTtoLkFsbFNoYXBlcz1VO2Zvcih2YXIgSD0wLFY9''@;'; put 'put ''eDtIPFYubGVuZ3RoO0grKyl7dmFyIE49VltIXTtmb3IodmFyIHogaW4gTilOLmhhc093blByb3BlcnR5KHopJiYoVVt6XT1OW3pdKX10eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoVSl9LCIu''@;'; put 'put ''L3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jaGFydC1zaGFwZXMu''@;'; put 'put ''dHMgKioqIQogICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oaixoLHkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSksaC5DaGFydFNoYXBlcz1oLkNsclNoYXBlQmVsbEN1cnZlPWguQ2xyU2hhcGVUaWNrQ2hhcnQ9aC5DbHJTaGFwZVNjYXR0ZXJQbG90PWguQ2xyU2hhcGVQaWVDaGFydD1oLkNsclNoYXBlTGluZUNoYXJ0PWguQ2xyU2hhcGVIZWF0TWFwPWguQ2xyU2hhcGVH''@;'; put 'put ''cmlkQ2hhcnQ9aC5DbHJTaGFwZUN1cnZlQ2hhcnQ9aC5DbHJTaGFwZUNsb3VkQ2hhcnQ9aC5DbHJTaGFwZUJ1YmJsZUNoYXJ0PWguQ2xyU2hhcGVCb3hQbG90PWguQ2xyU2hhcGVCYXJDaGFydD1oLkNsclNoYXBlQXhpc0NoYXJ0PXZvaWQgMDt2YXIgYz15KAovKiEgLi4vdXRpbHMvZGVzY3Jp''@;'; put 'put ''cHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIikscz15KAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7aC5DbHJTaGFw''@;'; put 'put ''ZUF4aXNDaGFydD0oMCxzLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMu''@;'; put 'put ''MTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0gNi4wMDcgMjYuNzMxIEwgMjcu''@;'; put 'put ''NzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUg''@;'; put 'put ''NiAxMS4wMSBMIDYuMDA3IDI2LjczMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1''@;'; put 'put ''Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSA2LjAwNyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcgMjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQu''@;'; put 'put ''NzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42NSA2IDExLjAxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIy''@;'; put 'put ''IEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwg''@;'; put 'put ''MzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNIDYuMDA3''@;'; put 'put ''IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAx''@;'; put 'put ''MC4zMSA2IDEwLjY1IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUg''@;'; put 'put ''QyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA2LjAwNyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcgMjUuMTcgQyAyOC4z''@;'; put 'put ''IDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42NSA2IDExLjAxIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEg''@;'; put 'put ''MzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBM''@;'; put 'put ''IDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBMIDYuMDA3IDI2LjczMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYg''@;'; put 'put ''MzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5''@;'; put 'put ''NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjgu''@;'; put 'put ''MyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAz''@;'; put 'put ''My42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+JyksaC5D''@;'; put 'put ''bHJTaGFwZUJhckNoYXJ0PSgwLHMuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00''@;'; put 'put ''LDI5VjdIMzJWMjlaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMCBMIDEzIDEwIEwgMTMgMjYgTCAxMS40IDI2IEwgMTEuNCAxMS42IEwgOC42IDExLjYgTCA4LjYgMjYgTCA3IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxw''@;'; put 'put ''YXRoIGQ9Ik0gMTUgMTkgTCAyMSAxOSBMIDIxIDI2IEwgMTkuNCAyNiBMIDE5LjQgMjAuNiBMIDE2LjYgMjAuNiBMIDE2LjYgMjYgTCAxNSAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIzIDE2IEwgMjkgMTYg''@;'; put 'put ''TCAyOSAyNiBMIDI3LjQgMjYgTCAyNy40IDE3LjYgTCAyNC42IDE3LjYgTCAyNC42IDI2IEwgMjMgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0i''@;'; put 'put ''TSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAx''@;'; put 'put ''MCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYgTCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwg''@;'; put 'put ''MzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIg''@;'; put 'put ''MzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEwIEwgMTMgMTAgTCAxMyAyNiBMIDExLjQgMjYgTCAxMS40IDExLjYgTCA4LjYgMTEuNiBMIDguNiAy''@;'; put 'put ''NiBMIDcgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTkgTCAyMSAxOSBMIDIxIDI2IEwgMTkuNCAyNiBMIDE5LjQgMjAuNiBMIDE2LjYgMjAuNiBMIDE2LjYgMjYgTCAxNSAy''@;'; put 'put ''NiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2IEwgMjkgMjYgTCAyNy40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0i''@;'; put 'put ''NSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcg''@;'; put 'put ''QyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYg''@;'; put 'put ''TCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYgTCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0i''@;'; put 'put ''NSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1''@;'; put 'put ''Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTAgTCAxMyAxMCBMIDEzIDI2IEwgMTEuNCAyNiBMIDExLjQgMTEuNiBMIDguNiAxMS42IEwg''@;'; put 'put ''OC42IDI2IEwgNyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE5IEwgMjEgMTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2''@;'; put 'put ''IEwgMTUgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2IEwgMjkgMjYgTCAyNy40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIz''@;'; put 'put ''IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2''@;'; put 'put ''Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44''@;'; put 'put ''NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcu''@;'; put 'put ''NTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gNyAyNiBMIDEzIDI2IEwgMTMgMTAgTCA3IDEwIFogTSAxNSAyNiBMIDIxIDI2IEwgMjEgMTkgTCAxNSAxOSBaIE0gMjMgMjYgTCAyOSAyNiBM''@;'; put 'put ''IDI5IDE2IEwgMjMgMTYgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45''@;'; put 'put ''MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBM''@;'; put 'put ''IDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLGguQ2xyU2hhcGVCb3hQbG90PSgwLHMuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDVI''@;'; put 'put ''NEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00LDI5VjdIMzJWMjlaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMiBMIDE3IDEyIEwgMTcgMjYgTCA3IDI2IEwgNyAxMiBaIE0gOC42IDI0LjQgTCAxNS40IDI0LjQg''@;'; put 'put ''TCAxNS40IDE4LjggTCA4LjYgMTguOCBMIDguNiAyNC40IFogTSAxNS40IDEzLjYgTCA4LjYgMTMuNiBMIDguNiAxNy4yIEwgMTUuNCAxNy4yIEwgMTUuNCAxMy42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkg''@;'; put 'put ''MjQgTCAyOSAyNCBMIDI5IDEwIEwgMTkgMTAgTCAxOSAyNCBaIE0gMjAuNiAxMS42IEwgMjcuNCAxMS42IEwgMjcuNCAxNy4yIEwgMjAuNiAxNy4yIEwgMjAuNiAxMS42IFogTSAyNy40IDIyLjQgTCAyMC42IDIyLjQgTCAyMC42IDE4LjggTCAyNy40IDE4LjggTCAyNy40IDIyLjQgWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAu''@;'; put 'put ''MTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAxMiBaIE0gOSAxOSBMIDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQg''@;'; put 'put ''WiBNIDE5IDI0IEwgMjkgMjQgTCAyOSAxMCBMIDE5IDEwIFogTSAyMSAxMiBMIDI3IDEyIEwgMjcgMTcgTCAyMSAxNyBaIE0gMjcgMjIgTCAyMSAyMiBMIDIxIDE5IEwgMjcgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAy''@;'; put 'put ''OSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBM''@;'; put 'put ''IDcgMTIgWiBNIDguNiAyNC40IEwgMTUuNCAyNC40IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAxMy42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcuMiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOSAxMCBMIDIzLjcyOCAxMCBDIDI0LjEwNSAxMC41OTYgMjQuNTY0IDExLjEzNSAyNS4wOSAxMS42IEwgMjAuNiAxMS42IEwgMjAuNiAxNy4yIEwgMjcuNCAxNy4yIEwgMjcuNCAxMi45ODcgQyAyNy45MDkgMTMu''@;'; put 'put ''MTc3IDI4LjQ0NSAxMy4zMTMgMjkgMTMuMzg3IEwgMjkgMjQgTCAxOSAyNCBaIE0gMjcuNCAxOC44IEwgMjAuNiAxOC44IEwgMjAuNiAyMi40IEwgMjcuNCAyMi40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCI+PC9wYXRoPlxu''@;'; put 'put ''ICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIyLjMxMiA2LjgxNyAyMi43MzIgOC41NjYgMjMuNjMz''@;'; put 'put ''IDEwIEwgMTkgMTAgTCAxOSAyNCBMIDI5IDI0IEwgMjkgMTMuNDI3IEMgMjkuMTAzIDEzLjQ0IDI5LjIwNiAxMy40NTEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNSAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNyAyNiBMIDE3IDI2IEwgMTcgMTIgTCA3IDEy''@;'; put 'put ''IFogTSA5IDE5IEwgMTUgMTkgTCAxNSAyNCBMIDkgMjQgWiBNIDE1IDE3IEwgOSAxNyBMIDkgMTQgTCAxNSAxNCBaIE0gMjEgMTIgTCAyNS40NzIgMTIgQyAyNS45NCAxMi4zNTIgMjYuNDUyIDEyLjY1IDI3IDEyLjg4NSBMIDI3IDE3IEwgMjEgMTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAx''@;'; put 'put ''OSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0''@;'; put 'put ''IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwgMTUuNCAyNC40IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAx''@;'; put 'put ''My42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcuMiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDI0IEwgMTkgMjQgTCAxOSAxNS4zNDUgQyAx''@;'; put 'put ''OS4wMjEgMTUuMzQ4IDIwLjYgMTUuMzYgMjAuNiAxNS4zNiBMIDIwLjYgMTcuMiBMIDI3LjQgMTcuMiBMIDI3LjQgMTUuMzYgTCAyOSAxNS4zNTcgTCAyOSAyNCBaIE0gMjcuNCAxOC44IEwgMjAuNiAxOC44IEwgMjAuNiAyMi40IEwgMjcuNCAyMi40IEwgMjcuNCAxOC44IFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIx''@;'; put 'put ''LjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQu''@;'; put 'put ''ODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVy''@;'; put 'put ''dGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMTkuMDI4IDEwIEwgMTkgMTAgTCAxOSAxMC4wNDggTCAxNy42MjUgMTIuMzk1IEMg''@;'; put 'put ''MTYuODA3IDEzLjU4MyAxNy41NzEgMTUuMTk3IDE5IDE1LjM0NSBMIDE5IDI0IEwgMjkgMjQgTCAyOSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAxMiBaIE0gOSAxOSBMIDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0''@;'; put 'put ''IEwgMTUgMTQgWiBNIDI3IDE3IEwgMjEgMTcgTCAyMSAxNS4zNTcgTCAyNyAxNS4zNTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1''@;'; put 'put ''LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxoLkNsclNoYXBlQnViYmxlQ2hhcnQ9KDAscy5j''@;'; put 'put ''bHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUg''@;'; put 'put ''MzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjkgMTggQyAyOSAxOS42NTcgMjcuNjU3IDIxIDI2IDIxIEMgMjQuMzQzIDIxIDIzIDE5LjY1NyAyMyAxOCBDIDIzIDE2LjM0''@;'; put 'put ''MyAyNC4zNDMgMTUgMjYgMTUgQyAyNy42NTcgMTUgMjkgMTYuMzQzIDI5IDE4IFogTSAyNiAxNi42IEMgMjUuMjI3IDE2LjYgMjQuNiAxNy4yMjcgMjQuNiAxOCBDIDI0LjYgMTguNzczIDI1LjIyNyAxOS40IDI2IDE5LjQgQyAyNi43NzMgMTkuNCAyNy40IDE4Ljc3MyAyNy40IDE4IEMgMjcu''@;'; put 'put ''NCAxNy4yMjcgMjYuNzczIDE2LjYgMjYgMTYuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxNCBDIDE1IDE2LjIwOSAxMy4yMDkgMTggMTEgMTggQyA4Ljc5MSAxOCA3IDE2LjIwOSA3IDE0IEMg''@;'; put 'put ''NyAxMS43OTEgOC43OTEgMTAgMTEgMTAgQyAxMy4yMDkgMTAgMTUgMTEuNzkxIDE1IDE0IFogTSAxMSAxMS42IEMgOS42NzUgMTEuNiA4LjYgMTIuNjc1IDguNiAxNCBDIDguNiAxNS4zMjUgOS42NzUgMTYuNCAxMSAxNi40IEMgMTIuMzI1IDE2LjQgMTMuNCAxNS4zMjUgMTMuNCAxNCBDIDEz''@;'; put 'put ''LjQgMTIuNjc1IDEyLjMyNSAxMS42IDExIDExLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjEgMjMgQyAyMSAyNC42NTcgMTkuNjU3IDI2IDE4IDI2IEMgMTYuMzQzIDI2IDE1IDI0LjY1NyAxNSAy''@;'; put 'put ''MyBDIDE1IDIxLjM0MyAxNi4zNDMgMjAgMTggMjAgQyAxOS42NTcgMjAgMjEgMjEuMzQzIDIxIDIzIFogTSAxOCAyMS42IEMgMTcuMjI3IDIxLjYgMTYuNiAyMi4yMjcgMTYuNiAyMyBDIDE2LjYgMjMuNzczIDE3LjIyNyAyNC40IDE4IDI0LjQgQyAxOC43NzMgMjQuNCAxOS40IDIzLjc3MyAx''@;'; put 'put ''OS40IDIzIEMgMTkuNCAyMi4yMjcgMTguNzczIDIxLjYgMTggMjEuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQg''@;'; put 'put ''MjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYu''@;'; put 'put ''MjA5IDguNzkxIDE4IDExIDE4IEMgMTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAgMTEgMTAgWiBNIDI2IDE1IEMgMjQuMzQzIDE1IDIzIDE2LjM0MyAyMyAxOCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5''@;'; put 'put ''IDE4IEMgMjkgMTYuMzQzIDI3LjY1NyAxNSAyNiAxNSBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAyNiAxOCAyNiBDIDE5LjY1NyAyNiAyMSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4IDIwIFoiPjwvcGF0aD5c''@;'; put 'put ''biAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIy''@;'; put 'put ''LjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoi''@;'; put 'put ''PjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAxOCBDIDI5IDE5LjY1NyAyNy42NTcgMjEgMjYgMjEgQyAyNC4zNDMgMjEgMjMgMTkuNjU3IDIzIDE4IEMgMjMgMTYuMzQzIDI0LjM0MyAxNSAyNiAxNSBDIDI3LjY1NyAxNSAyOSAxNi4zNDMgMjkgMTggWiBNIDI2IDE2LjYgQyAyNS4yMjcgMTYu''@;'; put 'put ''NiAyNC42IDE3LjIyNyAyNC42IDE4IEMgMjQuNiAxOC43NzMgMjUuMjI3IDE5LjQgMjYgMTkuNCBDIDI2Ljc3MyAxOS40IDI3LjQgMTguNzczIDI3LjQgMTggQyAyNy40IDE3LjIyNyAyNi43NzMgMTYuNiAyNiAxNi42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTItLWJhZGdlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxNCBDIDE1IDE2LjIwOSAxMy4yMDkgMTggMTEgMTggQyA4Ljc5MSAxOCA3IDE2LjIwOSA3IDE0IEMgNyAxMS43OTEgOC43OTEgMTAgMTEgMTAgQyAxMy4yMDkgMTAgMTUgMTEuNzkxIDE1IDE0IFog''@;'; put 'put ''TSAxMSAxMS42IEMgOS42NzUgMTEuNiA4LjYgMTIuNjc1IDguNiAxNCBDIDguNiAxNS4zMjUgOS42NzUgMTYuNCAxMSAxNi40IEMgMTIuMzI1IDE2LjQgMTMuNCAxNS4zMjUgMTMuNCAxNCBDIDEzLjQgMTIuNjc1IDEyLjMyNSAxMS42IDExIDExLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMgMjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAyNiAxNSAyNC42NTcgMTUgMjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3''@;'; put 'put ''IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIzLjc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0LjQgMTkuNCAyMy43NzMgMTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIx''@;'; put 'put ''LjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiByeD0iMyI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9''@;'; put 'put ''IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAu''@;'; put 'put ''MTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43''@;'; put 'put ''OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMgMTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAgMTEgMTAgWiBNIDI2IDE1IEMgMjQuMzQzIDE1IDIzIDE2LjM0MyAyMyAxOCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcg''@;'; put 'put ''MjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuMzQzIDI3LjY1NyAxNSAyNiAxNSBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAyNiAxOCAyNiBDIDE5LjY1NyAyNiAyMSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4''@;'; put 'put ''IDIwIFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwg''@;'; put 'put ''MzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDE4IEMgMjkgMTkuNjU3IDI3LjY1NyAyMSAyNiAyMSBDIDI0LjM0MyAyMSAyMyAxOS42NTcgMjMgMTggQyAyMyAxNi4zNDMgMjQuMzQzIDE1IDI2IDE1IEMgMjcuNjU3IDE1IDI5IDE2LjM0''@;'; put 'put ''MyAyOSAxOCBaIE0gMjYgMTYuNiBDIDI1LjIyNyAxNi42IDI0LjYgMTcuMjI3IDI0LjYgMTggQyAyNC42IDE4Ljc3MyAyNS4yMjcgMTkuNCAyNiAxOS40IEMgMjYuNzczIDE5LjQgMjcuNCAxOC43NzMgMjcuNCAxOCBDIDI3LjQgMTcuMjI3IDI2Ljc3MyAxNi42IDI2IDE2LjYgWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBDIDcgMTEuNzkxIDguNzkxIDEwIDEx''@;'; put 'put ''IDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBaIE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEyLjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAxMy40IDEyLjY3NSAxMi4zMjUgMTEu''@;'; put 'put ''NiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMgMjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAyNiAxNSAyNC42NTcgMTUgMjMg''@;'; put 'put ''QyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIzLjc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0LjQgMTkuNCAyMy43NzMgMTku''@;'; put 'put ''NCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0''@;'; put 'put ''IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIx''@;'; put 'put ''Ljk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDI0LjU3OSAxNS4zNTcgQyAyMy42MzkgMTUuODYzIDIzIDE2Ljg1NyAyMyAxOCBDIDIzIDE5''@;'; put 'put ''LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuODU3IDI4LjM2MSAxNS44NjMgMjcuNDIxIDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gMTEgMTAgQyA4Ljc5MSAxMCA3IDExLjc5MSA3IDE0IEMgNyAxNi4yMDkgOC43OTEgMTggMTEgMTggQyAx''@;'; put 'put ''My4yMDkgMTggMTUgMTYuMjA5IDE1IDE0IEMgMTUgMTEuNzkxIDEzLjIwOSAxMCAxMSAxMCBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAyNiAxOCAyNiBDIDE5LjY1NyAyNiAyMSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3''@;'; put 'put ''IDIwIDE4IDIwIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIy''@;'; put 'put ''LjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4w''@;'; put 'put ''NjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxoLkNsclNoYXBlQ2xvdWRDaGFydD0oMCxzLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1SDRB''@;'; put 'put ''MiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIwLjk3MSAxMS4yNDMgQyAyMy4zMTQgMTMuNTg2IDIyLjM2NCAxOC4zMzUgMTguODQ5IDIxLjg0OSBDIDE1''@;'; put 'put ''LjMzNCAyNS4zNjQgMTAuNTg2IDI2LjMxNCA4LjI0MyAyMy45NyBDIDUuODk5IDIxLjYyNyA2Ljg0OSAxNi44NzggMTAuMzY0IDEzLjM2NCBDIDEzLjg3OSA5Ljg0OSAxOC42MjggOC45IDIwLjk3MSAxMS4yNDMgWiBNIDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4''@;'; put 'put ''IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAyNC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMjAuMzg4IDE3Ljc2NSAyMS4zMzggMTQuMTU2IDE5LjY5NyAxMi41MTYgQyAxOC4wNTcgMTAuODc2IDE0LjQ0OCAxMS44MjUgMTEuNjM2IDE0LjYzNyBaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAyMiAyMy42NTcgMjIgMjIgQyAyMiAyMC4zNDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAy''@;'; put 'put ''MiBaIE0gMjUgMjAuNiBDIDI0LjIyNyAyMC42IDIzLjYgMjEuMjI3IDIzLjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjcgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQgMjYuNCAyMi43NzMgMjYuNCAyMiBDIDI2LjQgMjEuMjI3IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjciPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1''@;'; put 'put ''IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3IDguMjQzIDIzLjk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44''@;'; put 'put ''NDkgQyAyMi4zNjQgMTguMzM1IDIzLjMxNCAxMy41ODYgMjAuOTcxIDExLjI0MyBDIDE4LjYyOCA4LjkgMTMuODc5IDkuODQ5IDEwLjM2NCAxMy4zNjQgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIyIDIwLjM0MyAyMiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMgMjUgMjUgMjUgQyAyNi42NTcgMjUg''@;'; put 'put ''MjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3''@;'; put 'put ''IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNCAz''@;'; put 'put ''NCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjAuOTcxIDExLjI0MyBDIDIzLjMxNCAxMy41ODYgMjIuMzY0IDE4LjMzNSAxOC44NDkgMjEuODQ5IEMgMTUuMzM0IDI1LjM2NCAxMC41ODYgMjYuMzE0''@;'; put 'put ''IDguMjQzIDIzLjk3IEMgNS44OTkgMjEuNjI3IDYuODQ5IDE2Ljg3OCAxMC4zNjQgMTMuMzY0IEMgMTMuODc5IDkuODQ5IDE4LjYyOCA4LjkgMjAuOTcxIDExLjI0MyBaIE0gMTEuNjM2IDE0LjYzNyBDIDguODI0IDE3LjQ0OSA3Ljg3NSAyMS4wNTggOS41MTUgMjIuNjk4IEMgMTEuMTU1IDI0''@;'; put 'put ''LjMzOCAxNC43NjQgMjMuMzg5IDE3LjU3NiAyMC41NzcgQyAyMC4zODggMTcuNzY1IDIxLjMzOCAxNC4xNTYgMTkuNjk3IDEyLjUxNiBDIDE4LjA1NyAxMC44NzYgMTQuNDQ4IDExLjgyNSAxMS42MzYgMTQuNjM3IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAyMiAyMy42NTcgMjIgMjIgQyAyMiAyMC4zNDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUg''@;'; put 'put ''MjAuNiBDIDI0LjIyNiAyMC42IDIzLjYgMjEuMjI2IDIzLjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjYgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQgMjYuNCAyMi43NzMgMjYuNCAyMiBDIDI2LjQgMjEuMjI2IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSI3Ij48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5c''@;'; put 'put ''biAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44''@;'; put 'put ''OTUgNSA0IDUgTCAyMi41NyA1IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNSAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gMTAuMzY0IDEzLjM2NCBDIDYuODQ5IDE2Ljg3OCA1Ljg5OSAyMS42MjcgOC4yNDMgMjMu''@;'; put 'put ''OTcgQyAxMC41ODYgMjYuMzE0IDE1LjMzNCAyNS4zNjQgMTguODQ5IDIxLjg0OSBDIDIyLjM2NCAxOC4zMzUgMjMuMzE0IDEzLjU4NiAyMC45NzEgMTEuMjQzIEMgMTguNjI4IDguOSAxMy44NzkgOS44NDkgMTAuMzY0IDEzLjM2NCBaIE0gMjUgMTkgQyAyMy4zNDMgMTkgMjIgMjAuMzQzIDIy''@;'; put 'put ''IDIyIEMgMjIgMjMuNjU3IDIzLjM0MyAyNSAyNSAyNSBDIDI2LjY1NyAyNSAyOCAyMy42NTcgMjggMjIgQyAyOCAyMC4zNDMgMjYuNjU3IDE5IDI1IDE5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBj''@;'; put 'put ''bHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5''@;'; put 'put ''NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE4Ljg0OSAyMS44NDkgQyAxNS4zMzQgMjUu''@;'; put 'put ''MzY0IDEwLjU4NiAyNi4zMTQgOC4yNDMgMjMuOTcgQyA1Ljg5OSAyMS42MjcgNi44NDkgMTYuODc4IDEwLjM2NCAxMy4zNjQgQyAxMy4wNDkgMTAuNjc5IDE2LjQ1MyA5LjQ5MiAxOC45NTYgMTAuMTI0IEwgMTguMDA4IDExLjc0MSBDIDE2LjE4IDExLjUxOCAxMy42OTUgMTIuNTc4IDExLjYz''@;'; put 'put ''NiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAyNC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMTkuMjI4IDE4LjkyNSAyMC4yMzcgMTYuOTk4IDIwLjQ1NiAxNS4zNTcgTCAyMi4yMiAxNS4zNTcgQyAyMi4wMDYgMTcu''@;'; put 'put ''NDc3IDIwLjgzOCAxOS44NjEgMTguODQ5IDIxLjg0OSBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAy''@;'; put 'put ''MiAyMy42NTcgMjIgMjIgQyAyMiAyMC4zNDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUgMjAuNiBDIDI0LjIyNiAyMC42IDIzLjYgMjEuMjI2IDIzLjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjYgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQg''@;'; put 'put ''MjYuNCAyMi43NzMgMjYuNCAyMiBDIDI2LjQgMjEuMjI2IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjciPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAx''@;'; put 'put ''My4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBa''@;'; put 'put ''Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIu''@;'; put 'put ''ODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAxOC45NTYgMTAuMTI0IEMgMTYuNDUzIDkuNDkyIDEzLjA0OSAxMC42NzkgMTAuMzY0IDEzLjM2NCBDIDYuODQ5IDE2Ljg3OCA1Ljg5OSAyMS42MjcgOC4yNDMgMjMuOTcgQyAxMC41ODYgMjYuMzE0IDE1LjMzNCAyNS4zNjQgMTguODQ5IDIxLjg0OSBD''@;'; put 'put ''IDIwLjgzOCAxOS44NjEgMjIuMDA2IDE3LjQ3NyAyMi4yMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIyIDIwLjM0MyAyMiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMgMjUgMjUgMjUgQyAyNi42NTcgMjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1''@;'; put 'put ''NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAy''@;'; put 'put ''Mi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjku''@;'; put 'put ''MDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksaC5DbHJTaGFwZUN1cnZlQ2hhcnQ9KDAscy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUg''@;'; put 'put ''TCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3Bh''@;'; put 'put ''dGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMS44IEMgNi41NTggMTEuOCA2LjIgMTEuNDQyIDYuMiAxMSBDIDYuMiAxMC41NTggNi41NTggMTAuMiA3IDEwLjIgTCAxMyAxMC4yIEMgMTUuNDA0IDEwLjIgMTYuMzY4IDExLjkwNyAxNy42NTMgMTYuNDc4IEMgMTcuNjk1IDE2LjYyOCAxNy43NDQgMTYu''@;'; put 'put ''ODAzIDE3LjgzNSAxNy4xMjkgQyAxNy45MDkgMTcuMzkyIDE3Ljk2NCAxNy41ODggMTguMDE5IDE3Ljc4IEMgMTkuMzMyIDIyLjM3NSAyMC41NDkgMjQuMiAyMyAyNC4yIEwgMjkgMjQuMiBDIDI5LjQ0MiAyNC4yIDI5LjggMjQuNTU4IDI5LjggMjUgQyAyOS44IDI1LjQ0MiAyOS40NDIgMjUu''@;'; put 'put ''OCAyOSAyNS44IEwgMjMgMjUuOCBDIDE5LjUzNSAyNS44IDE3Ljk4MSAyMy40NjkgMTYuNDgxIDE4LjIyIEMgMTYuNDI1IDE4LjAyNSAxNi4zNjkgMTcuODI2IDE2LjI5NSAxNy41NiBDIDE2LjIwMyAxNy4yMzQgMTYuMTU0IDE3LjA2IDE2LjExMyAxNi45MTEgQyAxNS4wNDMgMTMuMTA1IDE0''@;'; put 'put ''LjMwNSAxMS44IDEzIDExLjggTCA3IDExLjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1''@;'; put 'put ''IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDEzIDEyIEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45''@;'; put 'put ''ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTkuODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5IDI2IEMgMjkuNTUyIDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAyOS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2''@;'; put 'put ''MiAxNy43MjUgQyAxOC4xODggMTUuMDE2IDE3Ljc5OSAxMy44ODIgMTcuMTE4IDEyLjY5MSBDIDE2LjEzIDEwLjk2MiAxNC43OTUgMTAgMTMgMTAgTCA3IDEwIEMgNi40NDggMTAgNiAxMC40NDggNiAxMSBDIDYgMTEuNTUyIDYuNDQ4IDEyIDcgMTIgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIy''@;'; put 'put ''LjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8''@;'; put 'put ''cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4yIDE2LjM2OCAxMS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2LjgwMyAxNy44''@;'; put 'put ''MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAyOS40NDIgMjQuMiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1LjggMjkgMjUu''@;'; put 'put ''OCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4yMDMgMTcuMjM0IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAxNC4zMDUgMTEu''@;'; put 'put ''OCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1i''@;'; put 'put ''YWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2''@;'; put 'put ''IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEzIDEyIEMgMTQuODE3''@;'; put 'put ''IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTkuODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5IDI2IEMgMjkuNTUyIDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAyOS41NTIgMjQg''@;'; put 'put ''MjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC4xODggMTUuMDE2IDE3Ljc5OSAxMy44ODIgMTcuMTE4IDEyLjY5MSBDIDE2LjEzIDEwLjk2MiAxNC43OTUgMTAgMTMgMTAgTCA3IDEwIEMgNi40NDggMTAgNiAxMC40NDggNiAxMSBDIDYg''@;'; put 'put ''MTEuNTUyIDYuNDQ4IDEyIDcgMTIgWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYg''@;'; put 'put ''NyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMS44IEMgNi41NTggMTEuOCA2LjIgMTEuNDQyIDYuMiAxMSBDIDYuMiAxMC41NTggNi41NTggMTAuMiA3IDEwLjIgTCAxMyAxMC4yIEMgMTUuNDA0IDEwLjIg''@;'; put 'put ''MTYuMzY4IDExLjkwNyAxNy42NTMgMTYuNDc4IEMgMTcuNjk1IDE2LjYyOCAxNy43NDQgMTYuODAzIDE3LjgzNSAxNy4xMjkgQyAxNy45MDkgMTcuMzkyIDE3Ljk2NCAxNy41ODggMTguMDE5IDE3Ljc4IEMgMTkuMzMyIDIyLjM3NSAyMC41NDkgMjQuMiAyMyAyNC4yIEwgMjkgMjQuMiBDIDI5''@;'; put 'put ''LjQ0MiAyNC4yIDI5LjggMjQuNTU4IDI5LjggMjUgQyAyOS44IDI1LjQ0MiAyOS40NDIgMjUuOCAyOSAyNS44IEwgMjMgMjUuOCBDIDE5LjUzNSAyNS44IDE3Ljk4MSAyMy40NjkgMTYuNDgxIDE4LjIyIEMgMTYuNDI1IDE4LjAyNSAxNi4zNjkgMTcuODI2IDE2LjI5NSAxNy41NiBDIDE2LjIw''@;'; put 'put ''MyAxNy4yMzQgMTYuMTU0IDE3LjA2IDE2LjExMyAxNi45MTEgQyAxNS4wNDMgMTMuMTA1IDE0LjMwNSAxMS44IDEzIDExLjggTCA3IDExLjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAy''@;'; put 'put ''Mi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4''@;'; put 'put ''IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIg''@;'; put 'put ''MjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTcuNDc2IDEyLjYxMiAxNy4zNzkgMTIuODQzIDE3LjMzIDEzLjA3NyBDIDE3LjI2MiAxMi45NDggMTcuMTkyIDEyLjgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1''@;'; put 'put ''IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2IDExLjU1MiA2LjQ0OCAxMiA3IDEyIEwgMTMgMTIgQyAxNC44MTcgMTIgMTUuNjc0IDEzLjQ5OSAxNy4wMzkgMTguMjc1IEMgMTcuODEzIDIwLjk4NCAxOC4yMDEgMjIuMTE4IDE4Ljg4MiAyMy4zMDkgQyAxOS44''@;'; put 'put ''NyAyNS4wMzggMjEuMjA1IDI2IDIzIDI2IEwgMjkgMjYgQyAyOS41NTIgMjYgMzAgMjUuNTUyIDMwIDI1IEMgMzAgMjQuNDQ4IDI5LjU1MiAyNCAyOSAyNCBMIDIzIDI0IEMgMjEuMTgzIDI0IDIwLjMyNiAyMi41MDEgMTguOTYyIDE3LjcyNSBDIDE4LjY0IDE2LjU5OCAxOC4zODUgMTUuNzQ0''@;'; put 'put ''IDE4LjE0NyAxNS4wNDQgQyAxOC40MDcgMTUuMjE1IDE4LjcxNyAxNS4zMjYgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMu''@;'; put 'put ''Njg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicp''@;'; put 'put ''LGguQ2xyU2hhcGVHcmlkQ2hhcnQ9KDAscy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTUsMTdINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1''@;'; put 'put ''LDE3Wk00LDh2N0gxNVY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE3SDIxYTIsMiwwLDAsMS0yLTJWOGEyLDIsMCwwLDEsMi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMTdaTTIxLDh2N0gzMlY4WiIv''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0zMiwzMEgyMWEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwzMiwzMFpNMjEsMjF2N0gzMlYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAxNSAxNyBMIDQgMTcgQyAyLjg5NSAxNyAyIDE2LjEwNSAyIDE1IEwgMiA4IEMgMiA2Ljg5NSAyLjg5NSA2IDQgNiBMIDE1IDYgQyAxNi4xMDUgNiAxNyA2Ljg5NSAxNyA4IEwgMTcgMTUgQyAxNyAxNi4xMDUgMTYuMTA1IDE3IDE1IDE3IFoiLz5cbiAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMzIgNiBDIDMzLjEwNSA2IDM0IDYuODk1IDM0IDggTCAzNCAxNSBD''@;'; put 'put ''IDM0IDE2LjEwNSAzMy4xMDUgMTcgMzIgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNIDE1IDMwIEwgNCAzMCBDIDIuODk1IDMwIDIgMjkuMTA1IDIgMjggTCAyIDIxIEMgMiAxOS44OTUgMi44OTUgMTkgNCAxOSBMIDE1IDE5IEMg''@;'; put 'put ''MTYuMTA1IDE5IDE3IDE5Ljg5NSAxNyAyMSBMIDE3IDI4IEMgMTcgMjkuMTA1IDE2LjEwNSAzMCAxNSAzMCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkgMjggTCAx''@;'; put 'put ''OSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAzMiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBDIDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xLWFsZXJ0ZWQiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTIt''@;'; put 'put ''YWxlcnRlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMjAuMDE0IDE3IDE5LjE5NSAxNi4yODcgMTkuMDMgMTUuMzQ4IEMgMTkuMDQxIDE1LjM0OSAxOS4wNTMgMTUuMzUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzMy45NjggMTUu''@;'; put 'put ''MzU3IEMgMzMuOCAxNi4yOTIgMzIuOTgzIDE3IDMyIDE3IFogTSAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDIxLjM3MiA2IEwgMTkgMTAuMDQ4IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy1hbGVydGVkIiBk''@;'; put 'put ''PSJNMTUsMzBINGEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwxNSwzMFpNNCwyMXY3SDE1VjIxWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LWFsZXJ0ZWQiIGQ9''@;'; put 'put ''Ik0zMiwzMEgyMWEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwzMiwzMFpNMjEsMjF2N0gzMlYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAz''@;'; put 'put ''NiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMTUgMTcgTCA0IDE3IEMgMi44OTUgMTcgMiAxNi4xMDUgMiAxNSBMIDIgOCBDIDIgNi44OTUgMi44OTUgNiA0IDYgTCAxNSA2IEMgMTYuMTA1IDYgMTcgNi44OTUgMTcgOCBMIDE3IDE1IEMgMTcgMTYuMTA1IDE2LjEwNSAx''@;'; put 'put ''NyAxNSAxNyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDIwLjAxNCAxNyAxOS4xOTUgMTYuMjg3IDE5LjAzIDE1LjM0OCBDIDE5LjA0MSAxNS4zNDkgMTkuMDUzIDE1LjM1''@;'; put 'put ''IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzMuOTY4IDE1LjM1NyBDIDMzLjggMTYuMjkyIDMyLjk4MyAxNyAzMiAxNyBaIE0gMTkgOCBDIDE5IDYuODk1IDE5Ljg5NSA2IDIxIDYgTCAyMS4zNzIgNiBMIDE5IDEwLjA0OCBaIi8+''@;'; put 'put ''XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0gMTUgMzAgTCA0IDMwIEMgMi44OTUgMzAgMiAyOS4xMDUgMiAyOCBMIDIgMjEgQyAyIDE5Ljg5NSAyLjg5NSAxOSA0IDE5IEwgMTUgMTkgQyAxNi4xMDUgMTkgMTcg''@;'; put 'put ''MTkuODk1IDE3IDIxIEwgMTcgMjggQyAxNyAyOS4xMDUgMTYuMTA1IDMwIDE1IDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIgZD0iTSAzMiAzMCBMIDIxIDMwIEMgMTkuODk1IDMwIDE5IDI5LjEwNSAxOSAy''@;'; put 'put ''OCBMIDE5IDIxIEMgMTkgMTkuODk1IDE5Ljg5NSAxOSAyMSAxOSBMIDMyIDE5IEMgMzMuMTA1IDE5IDM0IDE5Ljg5NSAzNCAyMSBMIDM0IDI4IEMgMzQgMjkuMTA1IDMzLjEwNSAzMCAzMiAzMCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0''@;'; put 'put ''IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE1LDE3SDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwxNSwxN1pNNCw4djdIMTVWOFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNIDMyIDE3IEwgMjEgMTcgQyAxOS44OTUgMTcgMTkgMTYuMTA1IDE5IDE1IEwgMTkgOCBDIDE5IDYuODk1IDE5Ljg5NSA2IDIxIDYgTCAyMi41OSA2IEMgMjIuNTkgNi4wMTkgMjIuNTkgNi4wMzcgMjIu''@;'; put 'put ''NTkgNi4wNTYgQyAyMi41OSA2LjcyOSAyMi42OCA3LjM4MSAyMi44NDggOCBMIDIxIDggTCAyMSAxNSBMIDMyIDE1IEwgMzIgMTMuMTc1IEMgMzIuNzE3IDEyLjk3MiAzMy4zODkgMTIuNjY0IDM0IDEyLjI2OSBMIDM0IDE1IEMgMzQgMTYuMTA1IDMzLjEwNSAxNyAzMiAxNyBaIi8+XG4gIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxj''@;'; put 'put ''aXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBk''@;'; put 'put ''PSJNIDE1IDE3IEwgNCAxNyBDIDIuODk1IDE3IDIgMTYuMTA1IDIgMTUgTCAyIDggQyAyIDYuODk1IDIuODk1IDYgNCA2IEwgMTUgNiBDIDE2LjEwNSA2IDE3IDYuODk1IDE3IDggTCAxNyAxNSBDIDE3IDE2LjEwNSAxNi4xMDUgMTcgMTUgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMjIuNTkgNiBDIDIyLjU5IDYuMDE5IDIyLjU5IDYuMDM3IDIyLjU5IDYu''@;'; put 'put ''MDU2IEMgMjIuNTkgMTAuMTQxIDI1LjkwMSAxMy40NTIgMjkuOTg2IDEzLjQ1MiBDIDMxLjQ2NiAxMy40NTIgMzIuODQ0IDEzLjAxOCAzNCAxMi4yNjkgTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4xMDUgMTcgMzIgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgZD0iTSAxNSAzMCBMIDQgMzAgQyAyLjg5NSAzMCAyIDI5LjEwNSAyIDI4IEwgMiAyMSBDIDIgMTkuODk1IDIuODk1IDE5IDQgMTkgTCAxNSAxOSBDIDE2LjEwNSAxOSAxNyAxOS44OTUgMTcgMjEgTCAxNyAyOCBDIDE3IDI5LjEwNSAxNi4xMDUg''@;'; put 'put ''MzAgMTUgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIgZD0iTSAzMiAzMCBMIDIxIDMwIEMgMTkuODk1IDMwIDE5IDI5LjEwNSAxOSAyOCBMIDE5IDIxIEMgMTkgMTkuODk1IDE5Ljg5NSAxOSAyMSAxOSBMIDMy''@;'; put 'put ''IDE5IEMgMzMuMTA1IDE5IDM0IDE5Ljg5NSAzNCAyMSBMIDM0IDI4IEMgMzQgMjkuMTA1IDMzLjEwNSAzMCAzMiAzMCBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYi''@;'; put 'put ''IHI9IjUiLz4nKSxoLkNsclNoYXBlSGVhdE1hcD0oMCxzLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEg''@;'; put 'put ''NCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMjggMTAgTCAyOCAyNiBMIDggMjYgWiBNIDkuNiAy''@;'; put 'put ''NCBMIDE0LjEgMjQgTCAxNC4xIDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAxOC44IEwgMjEuOSAyNCBaIE0gMjYgMTEuNiBMIDIxLjkgMTEuNiBMIDIxLjkgMTcuMiBMIDI2''@;'; put 'put ''IDE3LjIgWiBNIDE1LjcgMTEuNiBMIDE1LjcgMTcuMiBMIDIwLjMgMTcuMiBMIDIwLjMgMTEuNiBaIE0gMTUuNyAyNCBMIDIwLjMgMjQgTCAyMC4zIDE4LjggTCAxNS43IDE4LjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMz''@;'; put 'put ''MSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5c''@;'; put 'put ''biAgPHBhdGggZD0iTSA4IDEwIEwgMjMuNzI4IDEwIEMgMjQuMTA1IDEwLjU5NiAyNC41NjQgMTEuMTM1IDI1LjA5IDExLjYgTCAyMS45IDExLjYgTCAyMS45IDE3LjIgTCAyNiAxNy4yIEwgMjYgMTIuMjg3IEMgMjYuNjExIDEyLjY3OSAyNy4yODQgMTIuOTgzIDI4IDEzLjE4MiBMIDI4IDI2''@;'; put 'put ''IEwgOCAyNiBaIE0gOS42IDI0IEwgMTQuMSAyNCBMIDE0LjEgMTguOCBMIDkuNiAxOC44IFogTSAxNC4xIDExLjYgTCA5LjYgMTEuNiBMIDkuNiAxNy4yIEwgMTQuMSAxNy4yIFogTSAyNiAyNCBMIDI2IDE4LjggTCAyMS45IDE4LjggTCAyMS45IDI0IFogTSAxNS43IDExLjYgTCAxNS43IDE3''@;'; put 'put ''LjIgTCAyMC4zIDE3LjIgTCAyMC4zIDExLjYgWiBNIDE1LjcgMjQgTCAyMC4zIDI0IEwgMjAuMyAxOC44IEwgMTUuNyAxOC44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIyLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0i''@;'; put 'put ''TSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoi''@;'; put 'put ''PjwvcGF0aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMTkuMDI4IDEwIEwgMTguMDkxIDExLjYgTCAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4zIDE3LjIgTCAyMC4zIDE1LjM1NyBMIDIxLjkgMTUuMzU3IEwgMjEuOSAxNy4yIEwgMjYgMTcuMiBMIDI2IDE1LjM1NyBMIDI4IDE1LjM1NyBM''@;'; put 'put ''IDI4IDI2IEwgOCAyNiBaIE0gOS42IDI0IEwgMTQuMSAyNCBMIDE0LjEgMTguOCBMIDkuNiAxOC44IFogTSAxNC4xIDExLjYgTCA5LjYgMTEuNiBMIDkuNiAxNy4yIEwgMTQuMSAxNy4yIFogTSAyNiAyNCBMIDI2IDE4LjggTCAyMS45IDE4LjggTCAyMS45IDI0IFogTSAxNS43IDI0IEwgMjAu''@;'; put 'put ''MyAyNCBMIDIwLjMgMTguOCBMIDE1LjcgMTguOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMjItLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5''@;'; put 'put ''IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3''@;'; put 'put ''IFogTSA4IDI2IEwgMjggMjYgTCAyOCAxMCBMIDggMTAgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkgTCAyNiAyNCBaIE0gMjAgMTkgTCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxMiBMIDI2''@;'; put 'put ''IDEyIFogTSAyMCAxMiBMIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBaIE0gMTQgMTIgTCAxNCAxNyBMIDEwIDE3IEwgMTAgMTIgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0''@;'; put 'put ''IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMi4zMTIgNi44MTcgMjIuNzMyIDguNTY2IDIzLjYzMyAxMCBMIDggMTAgTCA4IDI2IEwgMjggMjYgTCAy''@;'; put 'put ''OCAxMy4yMzIgQyAyOC40MjEgMTMuMzQ1IDI4Ljg1OSAxMy40MjIgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gMTAgMTkgTCAxNCAxOSBMIDE0IDI0IEwgMTAgMjQgWiBNIDIyIDI0IEwgMjIgMTkgTCAyNiAxOSBM''@;'; put 'put ''IDI2IDI0IFogTSAyMCAxOSBMIDIwIDI0IEwgMTYgMjQgTCAxNiAxOSBaIE0gMjYgMTcgTCAyMiAxNyBMIDIyIDEyIEwgMjUuNTg0IDEyIEMgMjUuNzE5IDEyLjEgMjUuODU4IDEyLjE5NiAyNiAxMi4yODcgWiBNIDIwIDEyIEwgMjAgMTcgTCAxNiAxNyBMIDE2IDEyIFogTSAxNCAxMiBMIDE0''@;'; put 'put ''IDE3IEwgMTAgMTcgTCAxMCAxMiBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE5LjAyOCAxMCBM''@;'; put 'put ''IDggMTAgTCA4IDI2IEwgMjggMjYgTCAyOCAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkgTCAyNiAyNCBaIE0gMjAgMTkgTCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcg''@;'; put 'put ''TCAyMiAxNS4zNTcgTCAyNiAxNS4zNTcgWiBNIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBMIDE3Ljg1NiAxMiBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcg''@;'; put 'put ''TCAyMCAxNS4zNTcgWiBNIDE0IDEyIEwgMTQgMTcgTCAxMCAxNyBMIDEwIDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMjItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDEx''@;'; put 'put ''LjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEu''@;'; put 'put ''MDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksaC5DbHJTaGFwZUxpbmVDaGFydD0oMCxzLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFog''@;'; put 'put ''TSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiPjwvcGF0aD5cbiAgPHBvbHlnb24gcG9pbnRzPSIxNS42MiAxNS4yMjIgOS42MDIgMjMuOTY4IDUuNTUgMjAuMzg0IDYuNjEgMTkuMTg2IDkuMzA4IDIxLjU3MiAxNS42MzQgMTIuMzggMjIuMzg0IDIyLjM5NSAyOS4xMzggMTMuNDcgMzAu''@;'; put 'put ''NDE0IDE0LjQzNiAyMi4zMDggMjUuMTQ1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wb2x5Z29uPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NiA1IDIgNS44OTYgMiA3''@;'; put 'put ''IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk2IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTYgMzMuMTA1IDUgMzIgNSBaIE0gMjIuNTYgMjUuOTQgTCAxNS40NiAxNS4zNiBMIDkuMTIgMjQuNjQgTCA0LjYyIDIwLjY0IEwgNiAxOS4w''@;'; put 'put ''NSBMIDguNyAyMS40NCBMIDE1LjQ2IDExLjU2IEwgMjIuNjUgMjIuMjcgTCAyOS42NSAxMyBMIDMxLjM1IDE0LjI4IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIg''@;'; put 'put ''MjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEg''@;'; put 'put ''QyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBvbHlnb24gcG9pbnRzPSIxNS42MiAxNS4yMjIgOS42MDIgMjMuOTY4IDUuNTUgMjAuMzg0IDYuNjEgMTkuMTg2IDkuMzA4IDIx''@;'; put 'put ''LjU3MiAxNS42MzQgMTIuMzggMjIuMzg0IDIyLjM5NSAyOS4xMzggMTMuNDcgMzAuNDE0IDE0LjQzNiAyMi4zMDggMjUuMTQ1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcG9seWdvbj5cbiAgPGNpcmNsZSBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMC4z''@;'; put 'put ''MiAxMy40OCBMIDMxLjM4IDE0LjI4IEwgMjIuNTYgMjUuOTQgTCAxNS40NiAxNS4zNiBMIDkuMTIgMjQuNjQgTCA0LjYyIDIwLjY0IEwgNiAxOS4wNSBMIDguNyAyMS40NCBMIDE1LjQ2IDExLjU2IEwgMjIuNjUgMjIuMjcgTCAyOS4zMSAxMy40NiBDIDI1LjA1IDEzLjEgMjEuOTY5IDkuMjMz''@;'; put 'put ''IDIyLjU3IDUgTCA0IDUgQyAyLjg5NiA1IDIgNS44OTYgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk2IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCAxMi4zNCBDIDMyLjg5NSAxMy4wMzYgMzEuNjI2IDEzLjQyOSAzMC4zMiAxMy40OCBaIj48L3Bh''@;'; put 'put ''dGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIg''@;'; put 'put ''MTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNS42MiAxNS4yMjIgTCA5LjYwMiAyMy45NjggTCA1LjU1IDIwLjM4NCBMIDYuNjEgMTkuMTg2IEwgOS4zMDggMjEuNTcyIEwgMTUuNjM0IDEyLjM4IEwgMjIuMzg0IDIyLjM5NSBMIDI3LjcxNyAxNS4zNDggTCAy''@;'; put 'put ''OS43MjQgMTUuMzQ4IEwgMjIuMzA4IDI1LjE0NSBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42Njkg''@;'; put 'put ''MTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAx''@;'; put 'put ''Mi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNy40NTIgMTUuMzU3IEwgMjIuMzggMjIuMDYgTCAxNS42MyAxMiBMIDkuMjggMjEuMjggTCA2Ljc1IDE5LjA0IEwgNS40''@;'; put 'put ''MiAyMC41MyBMIDkuNjUgMjQuMjggTCAxNS42MSAxNS41NiBMIDIyLjI4IDI1LjUgTCAyOS45NTkgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIg''@;'; put 'put ''ZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45''@;'; put 'put ''OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxoLkNsclNoYXBlUGllQ2hhcnQ9KDAscy5jbHJJY29uU1ZHKSgn''@;'; put 'put ''XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3''@;'; put 'put ''IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTcgMjcgQyAxMi41ODIgMjcgOSAyMy40MTggOSAxOSBDIDkgMTQuNTgyIDEyLjU4MiAxMSAxNyAxMSBMIDE3IDE5IEwgMjUgMTkgQyAyNSAyMy40''@;'; put 'put ''MTggMjEuNDE4IDI3IDE3IDI3IFogTSAyMy4yNDcgMjAuNCBMIDE1LjQgMjAuNCBMIDE1LjQgMTIuODAyIEMgMTIuNjQgMTMuNTEzIDEwLjYwMSAxNi4wMTggMTAuNiAxOSBDIDEwLjYgMjIuNTM1IDEzLjQ2NSAyNS40IDE3IDI1LjQgQyAyMC4wNTQgMjUuNDAxIDIyLjYwOCAyMy4yNjEgMjMu''@;'; put 'put ''MjQ3IDIwLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOSA5IEMgMjMuNDE4IDkgMjcgMTIuNTgyIDI3IDE3IEwgMTkgMTcgWiBNIDI1LjE5OCAxNS40IEMgMjQuNjIgMTMuMTUgMjIuODQ5IDExLjM4IDIwLjYg''@;'; put 'put ''MTAuODAxIEwgMjAuNiAxNS40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAz''@;'; put 'put ''MSBDIDMyIDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBDIDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMg''@;'; put 'put ''MjEuNDE4IDI3IDI1IDIzLjQxOCAyNSAxOSBaIE0gMTkgMTcgTCAyNyAxNyBDIDI3IDEyLjU4MiAyMy40MTggOSAxOSA5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwg''@;'; put 'put ''MzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIg''@;'; put 'put ''MzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNyAyNyBDIDEyLjU4MiAyNyA5IDIzLjQxOCA5IDE5IEMgOSAxNC41ODIgMTIuNTgyIDExIDE3IDExIEwg''@;'; put 'put ''MTcgMTkgTCAyNSAxOSBDIDI1IDIzLjQxOCAyMS40MTggMjcgMTcgMjcgWiBNIDIzLjI0NyAyMC40IEwgMTUuNCAyMC40IEwgMTUuNCAxMi44MDIgQyAxMi42NCAxMy41MTMgMTAuNjAxIDE2LjAxOCAxMC42IDE5IEMgMTAuNiAyMi41MzUgMTMuNDY1IDI1LjQgMTcgMjUuNCBDIDIwLjA1NCAy''@;'; put 'put ''NS40MDEgMjIuNjA4IDIzLjI2MSAyMy4yNDcgMjAuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOSA5IEMgMjMuNDE4IDkgMjcgMTIuNTgyIDI3IDE3IEwgMTkgMTcgWiBNIDI1LjE5''@;'; put 'put ''OCAxNS40IEMgMjQuNjIgMTMuMTUgMjIuODQ5IDExLjM4IDIwLjYgMTAuODAxIEwgMjAuNiAxNS40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAz''@;'; put 'put ''NCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMy''@;'; put 'put ''Ljg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBDIDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3IDI1IDIzLjQxOCAyNSAxOSBaIE0gMTkgMTcgTCAyNyAxNyBDIDI3IDEyLjU4MiAyMy40MTgg''@;'; put 'put ''OSAxOSA5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5''@;'; put 'put ''IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE3IDI3IEMgMTIuNTgyIDI3IDkgMjMuNDE4IDkgMTkgQyA5IDE0LjU4MiAxMi41ODIgMTEgMTcgMTEgTCAxNyAxOSBMIDI1IDE5IEMgMjUgMjMuNDE4IDIxLjQxOCAyNyAxNyAyNyBaIE0g''@;'; put 'put ''MjMuMjQ3IDIwLjQgTCAxNS40IDIwLjQgTCAxNS40IDEyLjgwMiBDIDEyLjY0IDEzLjUxMyAxMC42MDEgMTYuMDE4IDEwLjYgMTkgQyAxMC42IDIyLjUzNSAxMy40NjUgMjUuNCAxNyAyNS40IEMgMjAuMDU0IDI1LjQwMSAyMi42MDggMjMuMjYxIDIzLjI0NyAyMC40IFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjcgMTcgTCAxOSAxNyBMIDE5IDE1LjM0NSBDIDE5LjAyMSAxNS4zNDggMTkuMDQzIDE1LjM0OSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEg''@;'; put 'put ''MTUuMzU5IDE5LjI3IDE1LjM1NyBMIDI2LjgzMSAxNS4zNTcgQyAyNi45NDIgMTUuODg3IDI3IDE2LjQzNyAyNyAxNyBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYg''@;'; put 'put ''MjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0''@;'; put 'put ''IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIg''@;'; put 'put ''NS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi44MDcgMTMuNTgzIDE3LjU3MSAxNS4xOTcgMTkgMTUuMzQ1IEwgMTkgMTcgTCAyNyAxNyBDIDI3IDE2LjQzNyAyNi45NDIgMTUuODg3IDI2LjgzMSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDI1IDE5IEwg''@;'; put 'put ''MTcgMTkgTCAxNyAxMSBDIDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3IDI1IDIzLjQxOCAyNSAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5''@;'; put 'put ''IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksaC5DbHJTaGFwZVNjYXR0ZXJQ''@;'; put 'put ''bG90PSgwLHMuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEg''@;'; put 'put ''MzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTEx''@;'; put 'put ''IDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkx''@;'; put 'put ''IDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMg''@;'; put 'put ''OC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0i''@;'; put 'put ''TSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYgMjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAx''@;'; put 'put ''OS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIwLjk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMgMTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMg''@;'; put 'put ''MTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYgQyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIi8+''@;'; put 'put ''XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3''@;'; put 'put ''LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4''@;'; put 'put ''MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkx''@;'; put 'put ''MiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEg''@;'; put 'put ''MiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2''@;'; put 'put ''NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45''@;'; put 'put ''MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0''@;'; put 'put ''LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFogTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYgMjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1Ljgz''@;'; put 'put ''IDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIwLjk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMgMTgu''@;'; put 'put ''NjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYgQyAx''@;'; put 'put ''NC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIE0gMjIuOTEyIDIwLjM0MyBDIDIzLjIyNCAyMC42NTQgMjMuNzMgMjAuNjU0IDI0LjA0MiAyMC4zNDMgTCAyNS4yMDIgMTkuMTgzIEwgMjYuMzYyIDIwLjM0MyBDIDI2Ljc3NSAyMC43OTkgMjcuNTI4IDIwLjYzNyAy''@;'; put 'put ''Ny43MTYgMjAuMDUgQyAyNy44MTMgMTkuNzUxIDI3LjcyNSAxOS40MjQgMjcuNDkyIDE5LjIxMyBMIDI2LjM0MiAxOC4wODMgTCAyNy41MDIgMTYuOTIzIEMgMjcuOTU4IDE2LjUwOSAyNy43OTYgMTUuNzU3IDI3LjIxIDE1LjU2OCBDIDI2LjkxMSAxNS40NzIgMjYuNTgzIDE1LjU2IDI2LjM3''@;'; put 'put ''MiAxNS43OTMgTCAyNS4yMTIgMTYuOTUzIEwgMjQuMDQyIDE1Ljc2MyBDIDIzLjYyOCAxNS4zMDYgMjIuODc2IDE1LjQ2OSAyMi42ODggMTYuMDU1IEMgMjIuNTkxIDE2LjM1NCAyMi42NzkgMTYuNjgyIDIyLjkxMiAxNi44OTMgTCAyNC4wNzIgMTguMDgzIEwgMjIuOTEyIDE5LjIxMyBDIDIy''@;'; put 'put ''LjYgMTkuNTI1IDIyLjYgMjAuMDMgMjIuOTEyIDIwLjM0MyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42''@;'; put 'put ''NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0''@;'; put 'put ''IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUu''@;'; put 'put ''OCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAx''@;'; put 'put ''My45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5''@;'; put 'put ''IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0gMTUuMTc2''@;'; put 'put ''IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0''@;'; put 'put ''LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAy''@;'; put 'put ''MC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIvPlxuICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0gMjIuOTEyIDIwLjM0MyBDIDIzLjIyNCAyMC42NTQgMjMuNzMgMjAuNjU0IDI0LjA0MiAyMC4zNDMgTCAyNS4yMDIgMTkuMTgzIEwgMjYuMzYyIDIwLjM0MyBDIDI2Ljc3NSAy''@;'; put 'put ''MC43OTkgMjcuNTI4IDIwLjYzNyAyNy43MTYgMjAuMDUgQyAyNy44MTMgMTkuNzUxIDI3LjcyNSAxOS40MjQgMjcuNDkyIDE5LjIxMyBMIDI2LjM0MiAxOC4wODMgTCAyNy41MDIgMTYuOTIzIEMgMjcuOTU4IDE2LjUwOSAyNy43OTYgMTUuNzU3IDI3LjIxIDE1LjU2OCBDIDI2LjkxMSAxNS40''@;'; put 'put ''NzIgMjYuNTgzIDE1LjU2IDI2LjM3MiAxNS43OTMgTCAyNS4yMTIgMTYuOTUzIEwgMjQuMDQyIDE1Ljc2MyBDIDIzLjYyOCAxNS4zMDYgMjIuODc2IDE1LjQ2OSAyMi42ODggMTYuMDU1IEMgMjIuNTkxIDE2LjM1NCAyMi42NzkgMTYuNjgyIDIyLjkxMiAxNi44OTMgTCAyNC4wNzIgMTguMDgz''@;'; put 'put ''IEwgMjIuOTEyIDE5LjIxMyBDIDIyLjYgMTkuNTI1IDIyLjYgMjAuMDMgMjIuOTEyIDIwLjM0MyBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+''@;'; put 'put ''XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIu''@;'; put 'put ''ODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44''@;'; put 'put ''IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEgMTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEz''@;'; put 'put ''Ljk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAuOTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYzIDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkg''@;'; put 'put ''OS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAxNC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIE0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYy''@;'; put 'put ''NiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAu''@;'; put 'put ''NzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4''@;'; put 'put ''NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiBNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAy''@;'; put 'put ''MC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41''@;'; put 'put ''NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkz''@;'; put 'put ''IEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5''@;'; put 'put ''PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1''@;'; put 'put ''Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTSA5''@;'; put 'put ''LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3''@;'; put 'put ''IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2''@;'; put 'put ''NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYgMjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1LjgzIDE5''@;'; put 'put ''Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIwLjk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMgMTguNjM2''@;'; put 'put ''IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYgQyAxNC44''@;'; put 'put ''NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4w''@;'; put 'put ''NDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3''@;'; put 'put ''Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5''@;'; put 'put ''MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4w''@;'; put 'put ''MDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3''@;'; put 'put ''LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44''@;'; put 'put ''IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEgMTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEz''@;'; put 'put ''Ljk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAuOTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYzIDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkg''@;'; put 'put ''OS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAxNC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIE0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYy''@;'; put 'put ''NiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAu''@;'; put 'put ''NzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4''@;'; put 'put ''NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiBNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAy''@;'; put 'put ''MC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41''@;'; put 'put ''NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkz''@;'; put 'put ''IEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1''@;'; put 'put ''NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUg''@;'; put 'put ''MTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cmVjdCB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbGwtb3BhY2l0eT0iMCIvPicpLGgu''@;'; put 'put ''Q2xyU2hhcGVUaWNrQ2hhcnQ9KDAscy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAz''@;'; put 'put ''MSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNIDYgMjUgTCA4IDI1''@;'; put 'put ''IEwgOCAyMiBMIDEwIDIyIEwgMTAgMjUgTCAxMyAyNSBMIDEzIDIyIEwgMTUgMjIgTCAxNSAyNSBMIDE4IDI1IEwgMTggMjIgTCAyMCAyMiBMIDIwIDI1IEwgMjMgMjUgTCAyMyAyMiBMIDI1IDIyIEwgMjUgMjUgTCAyNy43MjMgMjUgQyAyOC4wMjMgMjUuMDIgMjguMjkzIDI1LjE4IDI4LjQ2''@;'; put 'put ''MyAyNS40MyBDIDI4LjkwMyAyNi4wNiAyOC40ODMgMjYuOTMgMjcuNzIzIDI2Ljk5IEwgNiAyNi45OTEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMx''@;'; put 'put ''IEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gNiAyNi45OTEgTCAyNy43MjMgMjYuOTkgQyAyOC40ODMgMjYuOTMgMjguOTAzIDI2LjA2IDI4LjQ2MyAyNS40MyBDIDI4LjI5MyAy''@;'; put 'put ''NS4xOCAyOC4wMjMgMjUuMDIgMjcuNzIzIDI1IEwgMjUgMjUgTCAyNSAyMiBMIDIzIDIyIEwgMjMgMjUgTCAyMCAyNSBMIDIwIDIyIEwgMTggMjIgTCAxOCAyNSBMIDE1IDI1IEwgMTUgMjIgTCAxMyAyMiBMIDEzIDI1IEwgMTAgMjUgTCAxMCAyMiBMIDggMjIgTCA4IDI1IEwgNiAyNSBaIi8+''@;'; put 'put ''XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAy''@;'; put 'put ''Mi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBa''@;'; put 'put ''Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSA2IDI1IEwgOCAyNSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAg''@;'; put 'put ''MjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBMIDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAyOC40NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYgMjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPGNpcmNsZSBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQg''@;'; put 'put ''MTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBD''@;'; put 'put ''IDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNiAyNi45OTEgTCAyNy43MjMgMjYuOTkgQyAyOC40ODMgMjYuOTMgMjguOTAzIDI2LjA2IDI4LjQ2MyAyNS40MyBDIDI4LjI5MyAyNS4xOCAyOC4wMjMgMjUuMDIgMjcuNzIzIDI1IEwgMjUgMjUgTCAyNSAyMiBMIDIz''@;'; put 'put ''IDIyIEwgMjMgMjUgTCAyMCAyNSBMIDIwIDIyIEwgMTggMjIgTCAxOCAyNSBMIDE1IDI1IEwgMTUgMjIgTCAxMyAyMiBMIDEzIDI1IEwgMTAgMjUgTCAxMCAyMiBMIDggMjIgTCA4IDI1IEwgNiAyNSBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwg''@;'; put 'put ''NCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDYgMjUgTCA4IDI1IEwgOCAyMiBMIDEwIDIyIEwgMTAgMjUgTCAxMyAyNSBMIDEzIDIyIEwgMTUgMjIgTCAxNSAyNSBMIDE4IDI1IEwgMTggMjIgTCAyMCAyMiBMIDIwIDI1IEwgMjMgMjUgTCAyMyAyMiBMIDI1IDIyIEwg''@;'; put 'put ''MjUgMjUgTCAyNy43MjMgMjUgQyAyOC4wMjMgMjUuMDIgMjguMjkzIDI1LjE4IDI4LjQ2MyAyNS40MyBDIDI4LjkwMyAyNi4wNiAyOC40ODMgMjYuOTMgMjcuNzIzIDI2Ljk5IEwgNiAyNi45OTEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAx''@;'; put 'put ''My4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBM''@;'; put 'put ''IDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAy''@;'; put 'put ''Ni4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMgMjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAyMyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIyIEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAg''@;'; put 'put ''MjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAx''@;'; put 'put ''Mi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAw''@;'; put 'put ''NCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPicpLGguQ2xyU2hhcGVCZWxsQ3VydmU9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDI5SDNBMSwxLDAsMSwxLDMsMjdIMzNBMSwxLDAsMSwxLDMzLDI5WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI1aC0uNjJhOC4xMSw4LjExLDAsMCwxLTgtNi42N0MyMy42MiwxNC40NCwyMS44OSw3Ljk0LDE4LDcuOTRzLTUuNjksNi41MS02LjM4LDEwLjM5YTguMTEsOC4xMSwwLDAsMS04LDYuNjVIM2ExLDEsMCwx''@;'; put 'put ''LDEsMC0yaC42QTYuMTEsNi4xMSwwLDAsMCw5LjYsMThjMS40MS03Ljg4LDQuMy0xMiw4LjM1LTEyczYuOTMsNC4xNiw4LjMzLDEyYTYuMTEsNi4xMSwwLDAsMCw2LDVIMzNhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGgu''@;'; put 'put ''Q2hhcnRTaGFwZXM9eyJheGlzLWNoYXJ0IjpoLkNsclNoYXBlQXhpc0NoYXJ0LCJiYXItY2hhcnQiOmguQ2xyU2hhcGVCYXJDaGFydCwiYnViYmxlLWNoYXJ0IjpoLkNsclNoYXBlQnViYmxlQ2hhcnQsImNsb3VkLWNoYXJ0IjpoLkNsclNoYXBlQ2xvdWRDaGFydCwiY3VydmUtY2hhcnQiOmgu''@;'; put 'put ''Q2xyU2hhcGVDdXJ2ZUNoYXJ0LCJncmlkLWNoYXJ0IjpoLkNsclNoYXBlR3JpZENoYXJ0LCJsaW5lLWNoYXJ0IjpoLkNsclNoYXBlTGluZUNoYXJ0LCJwaWUtY2hhcnQiOmguQ2xyU2hhcGVQaWVDaGFydCwidGljay1jaGFydCI6aC5DbHJTaGFwZVRpY2tDaGFydCwic2NhdHRlci1wbG90Ijpo''@;'; put 'put ''LkNsclNoYXBlU2NhdHRlclBsb3QsImJveC1wbG90IjpoLkNsclNoYXBlQm94UGxvdCwiaGVhdC1tYXAiOmguQ2xyU2hhcGVIZWF0TWFwLCJiZWxsLWN1cnZlIjpoLkNsclNoYXBlQmVsbEN1cnZlfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaC5DaGFydFNoYXBlcywiYW5hbHl0aWNzIiwoMCxj''@;'; put 'put ''LmRlc2NyaXB0b3JDb25maWcpKGguQ2hhcnRTaGFwZXNbImxpbmUtY2hhcnQiXSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChoLkNoYXJ0U2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMv''@;'; put 'put ''c3JjL3NoYXBlcy9jb21tZXJjZS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvbW1lcmNlLXNoYXBlcy50cyAqKioh''@;'; put 'put ''CiAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihqLGgseSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJfX2VzTW9k''@;'; put 'put ''dWxlIix7dmFsdWU6ITB9KSxoLkNvbW1lcmNlU2hhcGVzPWguQ2xyU2hhcGVGYWN0b3J5PWguQ2xyU2hhcGVFbXBsb3llZT1oLkNsclNoYXBlRW1wbG95ZWVHcm91cD1oLkNsclNoYXBlUnVibGU9aC5DbHJTaGFwZVBlc289aC5DbHJTaGFwZUNvaW5CYWc9aC5DbHJTaGFwZUJpdGNvaW49aC5D''@;'; put 'put ''bHJTaGFwZVllbj1oLkNsclNoYXBlV29uPWguQ2xyU2hhcGVSdXBlZT1oLkNsclNoYXBlUG91bmQ9aC5DbHJTaGFwZUVDaGVjaz1oLkNsclNoYXBlRG9sbGFyQmlsbD1oLkNsclNoYXBlQmFuaz1oLkNsclNoYXBlQ3JlZGl0Q2FyZD1oLkNsclNoYXBlRG9sbGFyPWguQ2xyU2hhcGVFdXJvPWgu''@;'; put 'put ''Q2xyU2hhcGVTdG9yZT1oLkNsclNoYXBlV2FsbGV0PWguQ2xyU2hhcGVTaG9wcGluZ0NhcnQ9aC5DbHJTaGFwZVBpZ2d5QmFuaz1oLkNsclNoYXBlU2hvcHBpbmdCYWc9aC5DbHJTaGFwZUNhbGN1bGF0b3I9dm9pZCAwO3ZhciBjPXkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAq''@;'; put 'put ''LwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxzPXkoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtoLkNsclNoYXBlQ2FsY3VsYXRvcj0o''@;'; put 'put ''MCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk04LDMyVjRIMjhWMzJaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTEyLDhIMjUuNjdWNkgxMWExLDEsMCwwLDAtMSwxdjQuNjdoMloiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0z''@;'; put 'put ''IiBwb2ludHM9IjEyIDE2IDEwIDE2IDEwIDE4IDE0IDE4IDE0IDE0IDEyIDE0IDEyIDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNCAxNiAyMiAxNiAyMiAxOCAyNiAxOCAyNiAxNCAyNCAxNCAy''@;'; put 'put ''NCAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHBvaW50cz0iMTggMTYgMTYgMTYgMTYgMTggMjAgMTggMjAgMTQgMTggMTQgMTggMTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBwb2ludHM9IjEyIDIyIDEwIDIyIDEwIDI0IDE0IDI0IDE0IDIwIDEyIDIwIDEyIDIyIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgcG9pbnRzPSIyNCAyMiAyMiAyMiAy''@;'; put 'put ''MiAyNCAyNiAyNCAyNiAyMCAyNCAyMCAyNCAyMiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHBvaW50cz0iMTggMjIgMTYgMjIgMTYgMjQgMjAgMjQgMjAgMjAgMTggMjAgMTggMjIiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''b2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiBwb2ludHM9IjEyIDI4IDEwIDI4IDEwIDMwIDE0IDMwIDE0IDI2IDEyIDI2IDEyIDI4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MTAiIHBvaW50cz0iMjQgMjggMjIgMjggMjIgMzAgMjYgMzAgMjYgMjYgMjQgMjYgMjQgMjgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIgcG9pbnRzPSIxOCAyOCAxNiAyOCAxNiAzMCAyMCAzMCAyMCAyNiAxOCAy''@;'; put 'put ''NiAxOCAyOCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0xMiwyOEgxMFYyNmgyWm0wLTZI''@;'; put 'put ''MTBWMjBoMlptMC02SDEwVjE0aDJabTcsMTJIMTdWMjZoMlptMC02SDE3VjIwaDJabTAtNkgxN1YxNGgyWm03LDEySDI0VjI2aDJabTAtNkgyNFYyMGgyWm0wLTZIMjRWMTRoMlptMC03SDEwVjVIMjZaIi8+JyksaC5DbHJTaGFwZVNob3BwaW5nQmFnPSgwLHMuY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjUsMTJWOS4wNWE3LDcsMCwxLDAtMTQsMHY3YTEsMSwwLDAsMCwyLDBWMTRoOFYxMkgxM1Y5LjA1YTUsNSwwLDEsMSwxMCwwVjE2YTEsMSwwLDEsMCwyLDBWMTRoNVYzMkg2VjE0SDlWMTJINFYzMi4wOUEx''@;'; put 'put ''LjkxLDEuOTEsMCwwLDAsNS45MSwzNEgzMC4wOUExLjkxLDEuOTEsMCwwLDAsMzIsMzIuMDlWMTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTMsOS4yMmE1LDUsMCwxLDEsMTAsMFYxMmgyVjkuMjJhNyw3LDAsMSww''@;'; put 'put ''LTE0LDBWMTJoMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNSwxMnYzLjFhMSwxLDAsMSwxLTIsMFYxMkgxM3YzLjFhMSwxLDAsMCwxLTIsMFYxMkg0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYx''@;'; put 'put ''MloiLz4nKSxoLkNsclNoYXBlUGlnZ3lCYW5rPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTkuNzIsMTAuNDdhMTEuNjUsMTEuNjUsMCwwLDAtNi4zMS41MkEuOC44LDAsMSwwLDE0LDEyLjQ4LDEwLjExLDEw''@;'; put 'put ''LjExLDAsMCwxLDE5LjQ0LDEyYS44LjgsMCwxLDAsLjI4LTEuNTdaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMjUuMzgiIGN5PSIxNi43MSIgcj0iMS4zNiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zNS41MSwxOC42M2ExLDEsMCwwLDAtLjg0LS40NCwzLjQyLDMuNDIsMCwwLDEtMi4wOS0xLjEyLDE3LjM1LDE3LjM1LDAsMCwxLTIuNjMtMy43OGwyLjg4LTQuNUExLjg5LDEuODksMCwwLDAsMzMsN2ExLjc3LDEuNzcs''@;'; put 'put ''MCwwLDAtMS4zMy0xLDEwLjEyLDEwLjEyLDAsMCwwLTUuMzkuNzUsMTIuNzIsMTIuNzIsMCwwLDAtMi43MiwxLjYzLDE2Ljk0LDE2Ljk0LDAsMCwwLTUuMTYtMS4zOUMxMS4zMSw2LjMsNC44MywxMC45LDQsMTdINGEyLjU2LDIuNTYsMCwwLDEtMS4zOC0xLjUzLDEuODEsMS44MSwwLDAsMSwu''@;'; put 'put ''MTQtMS40LDEuMTksMS4xOSwwLDAsMSwuNDMtLjQzLDEuMDgsMS4wOCwwLDAsMC0xLjEyLTEuODVBMy4zMSwzLjMxLDAsMCwwLC45MSwxM2E0LDQsMCwwLDAtLjMzLDMuMDhBNC43Niw0Ljc2LDAsMCwwLDMsMTguOTVsLjkyLjQ2YTE3LjU4LDE3LjU4LDAsMCwwLDEuODIsN2wuMTcuMzhBMjMs''@;'; put 'put ''MjMsMCwwLDAsOS4yLDMxLjg4YTEsMSwwLDAsMCwuNzUuMzRoNC41MmExLDEsMCwwLDAsLjkyLTEuMzhMMTUsMjkuOTRsMS4xOC4xM2EyMC4zMywyMC4zMywwLDAsMCw0LDBjLjM3LjYuNzcsMS4yLDEuMjEsMS43OWExLDEsMCwwLDAsLjguNDFoNC4zNGExLDEsMCwwLDAsLjkyLTEuMzljLS4x''@;'; put 'put ''Ny0uNC0uMzQtLjgzLS40Ny0xLjItLjE4LS41My0uMzItMS0uNDMtMS40NUExMy4xOCwxMy4xOCwwLDAsMCwyOS41NiwyNmExMi41LDEyLjUsMCwwLDAsMywwLDEsMSwwLDAsMCwuNzgtLjYybDIuMjYtNS44MUExLDEsMCwwLDAsMzUuNTEsMTguNjNabS0zLjc4LDUuNDRhMTEuMzcsMTEuMzcs''@;'; put 'put ''MCwwLDEtMi4zNS0uMTFoMGE4LjIsOC4yLDAsMCwxLTIuNTMtLjg3LDEsMSwwLDAsMC0uOTMsMS43NywxMS43MiwxMS43MiwwLDAsMCwxLjI5LjU4LDgsOCwwLDAsMS0xLjgsMS4xNmwtMS4wNi40OHMuNDksMi4xOS44MiwzLjE2SDIyLjc5Yy0uMjQtLjM0LTEuNDUtMi4zNi0xLjQ1LTIuMzZs''@;'; put 'put ''LS42Ny4wOWExOC41MywxOC41MywwLDAsMS00LjI1LjEyYy0uNjYtLjA2LTEuNzYtLjItMi42Mi0uMzVsLTEuNTUtLjI3cy42MywyLjQzLjc1LDIuNzR2MEgxMC40MkEyMC41NywyMC41NywwLDAsMSw3Ljc2LDI2bC0uMTgtLjM5QTE0LjYyLDE0LjYyLDAsMCwxLDYsMTcuNDhjLjU0LTUuMTks''@;'; put 'put ''Ni4xMi05LjExLDEyLjE5LTguNTRhMTUuNDcsMTUuNDcsMCwwLDEsNS4wOCwxLjQ4bC42Mi4yOS41LS40N0ExMC4yOSwxMC4yOSwwLDAsMSwyNyw4LjU0YTguMjUsOC4yNSwwLDAsMSw0LS42NWwtMy4zOCw1LjI5LjI1LjVoMGEyMS4xNiwyMS4xNiwwLDAsMCwzLjMxLDQuODQsNi40OSw2LjQ5''@;'; put 'put ''LDAsMCwwLDIuMTQsMS4zOVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNSwxOC44N0E1LjgzLDUuODMsMCwwLDEsMzMsMTcuNjFhMjEuNjMsMjEuNjMsMCwwLDEtMy4yOS00Ljg0bDMuMzktNS4yOWEuOS45LDAsMCww''@;'; put 'put ''LS41NC0xLjM4LDkuNjcsOS42NywwLDAsMC01LjEzLjcyLDEyLDEyLDAsMCwwLTMuMTMsMkExNy4zNywxNy4zNywwLDAsMCwxOC42LDcuMTVDMTEuOCw2LjUyLDUuMjcsMTAuOSw0LjU0LDE3bC0uMTQtLjA3QTIuNzYsMi43NiwwLDAsMSwyLjksMTUuMjlhMiwyLDAsMCwxLC4xNS0xLjU1LDEu''@;'; put 'put ''MzIsMS4zMiwwLDAsMSwuNDctLjQ4LDEuMDgsMS4wOCwwLDEsMC0xLjEyLTEuODUsMy40NSwzLjQ1LDAsMCwwLTEuMjMsMS4yNUE0LjE2LDQuMTYsMCwwLDAsLjg0LDE1LjlhNSw1LDAsMCwwLDIuNTcsM2wxLC41NGExOC42MiwxOC42MiwwLDAsMCwyLDcuMywyMywyMywwLDAsMCwzLDQuNzks''@;'; put 'put ''MSwxLDAsMCwwLC44LjM4aDMuNjFhLjUyLjUyLDAsMCwwLC40LS43NUwxNCwzMC4zOGExMSwxMSwwLDAsMS0uMzMtMS4xOGMuOTEuMTYsMi4wOC4zMSwyLjg3LjM4YTIwLjA3LDIwLjA3LDAsMCwwLDMuMTIsMGMuMzkuNy43OSwxLjMzLDEuMTUsMS44NWEuOTMuOTMsMCwwLDAsLjc3LjQxaDMu''@;'; put 'put ''MTFhLjY1LjY1LDAsMCwwLC42MS0uODVjLS4yMy0uNzQtLjUzLTEuNzUtLjcxLTIuMzdhMTUuOSwxNS45LDAsMCwwLDMuNzUtMS43NmMuMTYtLjExLjMyLS4yNi40OC0uMzlhMTMuNzcsMTMuNzcsMCwwLDEtMi40Mi0xLC44LjgsMCwwLDEsLjc0LTEuNDIsMTEuNjQsMTEuNjQsMCwwLDAsMy4x''@;'; put 'put ''OCwxLjEsMTMuMzEsMTMuMzEsMCwwLDAsMi42OC4xMiwxLDEsMCwwLDAsLjktLjY2bDEuNzMtNC40NEExLDEsMCwwLDAsMzUsMTguODdaTTEzLjc5LDExLjU5YS44Ni44NiwwLDAsMS0uMy4wNS44NS44NSwwLDAsMS0uMy0xLjY0LDEyLjQxLDEyLjQxLDAsMCwxLDYuNjktLjU1Ljg1Ljg1LDAs''@;'; put 'put ''MSwxLS4zLDEuNjdBMTAuNzUsMTAuNzUsMCwwLDAsMTMuNzksMTEuNTlabTEyLjUyLDYuMTJhMS40NCwxLjQ0LDAsMSwxLDEuNDQtMS40NEExLjQ0LDEuNDQsMCwwLDEsMjYuMzIsMTcuNzJaIi8+JyksaC5DbHJTaGFwZVNob3BwaW5nQ2FydD0oMCxzLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4''@;'; put 'put ''PSIxMy4zMyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI3IiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjA4LDUuMzdBMSwxLDAsMCwwLDMyLjMxLDVIMTEuNDlsLjY1LDJIMzFMMjguMzMsMTloLTE1TDguNzYsNC41M2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjJhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42NGw0LjU5LDE0LjVMOS45NSwyMS40''@;'; put 'put ''OGwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTNhMSwxLDAsMCwwLDEtLjc4bDMuMTctMTRBMSwxLDAsMCwwLDMzLjA4LDUuMzdaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEzLjMzIiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPGNpcmNsZSBjeD0iMjciIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjIwLjcxIDcgMjEuODcgNSAxMS40OSA1IDEyLjE0''@;'; put 'put ''IDcgMjAuNzEgNyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMTUsMTUuNCwyOC4zMywxOWgtMTVMOC43Niw0LjUzYTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42MmExLDEsMCwx''@;'; put 'put ''LDAtLjU5LDEuOTJMNyw1LjY0bDQuNTksMTQuNUw5Ljk1LDIxLjQ4bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xM2ExLDEsMCwwLDAsMS0u''@;'; put 'put ''NzhsMS4wOS00LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy4zMyIgY3k9''@;'; put 'put ''IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNTcsN2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDExLjQ5bC42NSwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t''@;'; put 'put ''YmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVsLS40MiwwTDI4LjMzLDE5aC0xNUw4Ljc2LDQuNTNhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjYyYTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjRsNC41OSwxNC41TDkuOTUsMjEuNDhsLS4xMy4xM0EyLjY2LDIuNjYsMCww''@;'; put 'put ''LDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEzYTEsMSwwLDAsMCwxLS43OGwxLjU3LTYuOTFBNy41MSw3LjUxLDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGN4PSIxMy41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjYuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xLDYuMzlBMSwxLDAsMCwwLDMyLjMxLDZIOS4yMUw4Ljc2LDQuNTdhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjY2YTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjhsNC41OCwxNC40N0w5Ljk1LDIxLjQ5bC0uMTMuMTNBMi42NiwyLjY2''@;'; put 'put ''LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xMmExLDEsMCwwLDAsMS0uNzZsMy4yLTEzQTEsMSwwLDAsMCwzMy4xLDYuMzlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI2LjUiIGN5PSIyOS41''@;'; put 'put ''IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDkuMjFMOC43Niw0LjU3YTEsMSwwLDAsMC0uNjYt''@;'; put 'put ''LjY1TDQsMi42NmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY4bDQuNTgsMTQuNDdMOS45NSwyMS40OWwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJI''@;'; put 'put ''MjkuMTJhMSwxLDAsMCwwLDEtLjc2bDEuMTktNC44NFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMu''@;'; put 'put ''NjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9''@;'; put 'put ''IjEzLjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjYuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkg5LjIxTDguNzYsNC41N2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjZhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42OGw0LjU4LDE0LjQ3TDkuOTUsMjEuNDls''@;'; put 'put ''LS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEyYTEsMSwwLDAsMCwxLS43NmwxLjcxLTdBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAv''@;'; put 'put ''PicpLGguQ2xyU2hhcGVXYWxsZXQ9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxNUgzMVY5YTEsMSwwLDAsMC0xLTFINmExLDEsMCwwLDEtMS0uODJWNi44MkExLDEsMCwwLDEsNiw2SDI5LjU4YTEsMSww''@;'; put 'put ''LDAsMCwwLTJINkEzLDMsMCwwLDAsMyw3YTMuMDgsMy4wOCwwLDAsMCwwLC4zNlYyNy45M0E0LjEsNC4xLDAsMCwwLDcuMTMsMzJIMzBhMSwxLDAsMCwwLDEtMVYyNWgxYTEsMSwwLDAsMCwxLTFWMTZBMSwxLDAsMCwwLDMyLDE1Wk0yOSwzMEg3LjEzQTIuMTEsMi4xMSwwLDAsMSw1LDI3Ljkz''@;'; put 'put ''VjkuODhBMy4xMSwzLjExLDAsMCwwLDYsMTBIMjl2NUgyMmE1LDUsMCwwLDAsMCwxMGg3Wm0yLTdIMjJhMywzLDAsMCwxLDAtNkgzMVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGN4PSIyMy4wMSIgY3k9IjIwIiBy''@;'; put 'put ''PSIxLjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi45NCwxNEgzMVY5YTEsMSwwLDAsMC0xLTFINkExLDEsMCwwLDEsNSw3SDVWN0ExLDEsMCwwLDEsNiw2SDI5LjZhMSwxLDAsMSwwLDAtMkg2QTIuOTQsMi45NCww''@;'; put 'put ''LDAsMCwzLDYuODh2MjFBNC4xMyw0LjEzLDAsMCwwLDcuMTUsMzJIMzBhMSwxLDAsMCwwLDEtMVYyNmgxLjk0YS45My45MywwLDAsMCwxLS45MXYtMTBBMS4wOCwxLjA4LDAsMCwwLDMyLjk0LDE0Wk0zMiwyNGwtOC41OCwwYTMuODcsMy44NywwLDAsMS0zLjczLTQsMy44NywzLjg3LDAsMCwx''@;'; put 'put ''LDMuNzMtNEwzMiwxNloiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjI0LjA0IiBjeT0iMTkuOTIiIHI9IjEuNSIvPicpLGguQ2xyU2hhcGVTdG9yZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI4LDMwSDE2VjIySDE0djhIOFYyMkg2djhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjIySDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9''@;'; put 'put ''Ik0zMy43OSwxMy4yNywyOS43MSw1LjExQTIsMiwwLDAsMCwyNy45Miw0SDguMDhBMiwyLDAsMCwwLDYuMjksNS4xMUwyLjIxLDEzLjI3YTIsMiwwLDAsMC0uMjEuOXYzLjA4YTIsMiwwLDAsMCwuNDYsMS4yOEE0LjY3LDQuNjcsMCwwLDAsNiwyMC4xM2E0LjcyLDQuNzIsMCwwLDAsMy0xLjA3''@;'; put 'put ''LDQuNzMsNC43MywwLDAsMCw2LDAsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzIsNC43MiwwLDAsMCw2LjUzLS41MkEyLDIsMCwwLDAsMzQsMTcuMjZWMTQuMTdBMiwyLDAsMCwwLDMzLjc5LDEzLjI3Wk0zMCwxOC4xM0EyLjY4LDIuNjgsMCwwLDEsMjcuODIs''@;'; put 'put ''MTdMMjcsMTUuODgsMjYuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwyMSwxNS44OCwyMC4xOSwxN2EyLjcxLDIuNzEsMCwwLDEtNC4zNywwTDE1LDE1Ljg4LDE0LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMOSwxNS44OCw4LjE4LDE3QTIuNjgsMi42OCwwLDAsMSw2LDE4LjEz''@;'; put 'put ''YTIuNjQsMi42NCwwLDAsMS0yLS44OFYxNC4xN0w4LjA4LDZIMjcuOTJMMzIsMTQuMTZ2LjY3bDAsMi4zOUEyLjY3LDIuNjcsMCwwLDEsMzAsMTguMTNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjgsMzBIMTZWMjJI''@;'; put 'put ''MTR2OEg4VjIySDZ2OGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMjJIMjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuNzksMTMuMjcsMjkuNzEsNS4xMUEyLDIsMCwwLDAsMjcuOTIsNEg4LjA4QTIs''@;'; put 'put ''MiwwLDAsMCw2LjI5LDUuMTFMMi4yMSwxMy4yN2EyLDIsMCwwLDAtLjIxLjl2My4wOGEyLDIsMCwwLDAsLjQ2LDEuMjhBNC42Nyw0LjY3LDAsMCwwLDYsMjAuMTNhNC43Miw0LjcyLDAsMCwwLDMtMS4wNyw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAsNC43Myw0Ljcz''@;'; put 'put ''LDAsMCwwLDYsMCw0LjcyLDQuNzIsMCwwLDAsNi41My0uNTJBMiwyLDAsMCwwLDM0LDE3LjI2VjE0LjE3QTIsMiwwLDAsMCwzMy43OSwxMy4yN1pNMTUsMTQuNHYxLjUyTDE0LjE4LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMOSwxNS44OFYxNC40TDExLjU5LDZIMTZabTEyLDEuNDhMMjYu''@;'; put 'put ''MTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwyMSwxNS44OGwwLDBWMTQuNEwyMCw2aDQuNDVMMjcsMTQuNFoiLz4nKSxoLkNsclNoYXBlRXVybz0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLjQ4LDI4''@;'; put 'put ''LjQ5YTEsMSwwLDAsMC0xLjM4LS4zMkExMiwxMiwwLDAsMSwxMi40NSwyMkgyNC4xNmExLDEsMCwwLDAsMC0ySDExLjkzYTExLjE2LDExLjE2LDAsMCwxLDAtNEgyNC4xNmExLDEsMCwwLDAsMC0ySDEyLjQ1QTEyLDEyLDAsMCwxLDMwLjA2LDcuOGExLDEsMCwwLDAsMS4wNi0xLjdBMTQsMTQs''@;'; put 'put ''MCwwLDAsMTAuMzQsMTRIMy41NGExLDEsMCwxLDAsMCwySDkuOTFhMTQsMTQsMCwwLDAtLjE2LDIsMTQsMTQsMCwwLDAsLjE2LDJIMy41NGExLDEsMCwxLDAsMCwyaDYuOGExNCwxNCwwLDAsMCwyMC44Myw3Ljg3QTEsMSwwLDAsMCwzMS40OCwyOC40OVoiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuNDIsMjUuMTZBMTAuODgsMTAuODgsMCwwLDEsOS4yMywyMUg1Ljg0YTEsMSwwLDAsMSwwLTJoM2MwLS4zNS0uMDUtLjcxLS4wNS0xLjA3''@;'; put 'put ''czAtLjYzLDAtLjkzaC0zYTEsMSwwLDAsMSwwLTJIOS4xOUExMC44NiwxMC44NiwwLDAsMSwyNS4zOCw4LjY5YTEuMjUsMS4yNSwwLDAsMS0xLjMyLDIuMTJBOC4zNiw4LjM2LDAsMCwwLDExLjgyLDE1aDkuMzZhMSwxLDAsMCwxLDAsMkgxMS4zM2E3LjcyLDcuNzIsMCwwLDAsMCwyaDkuODJh''@;'; put 'put ''MSwxLDAsMCwxLDAsMkgxMS44N2E4LjM2LDguMzYsMCwwLDAsMTIuMjIsNCwxLjI1LDEuMjUsMCwxLDEsMS4zMywyLjEyWiIvPicpLGguQ2xyU2hhcGVEb2xsYXI9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0y''@;'; put 'put ''NiwyMS4xNWE2LjkxLDYuOTEsMCwwLDAtNC4zOC0zLjMyQTI2LDI2LDAsMCwwLDE5LDE3LjE5VjguMTJBMTAuMDUsMTAuMDUsMCwwLDEsMjMuODYsMTBhMSwxLDAsMCwwLDEuMzMtMS41QTExLjc1LDExLjc1LDAsMCwwLDE5LDYuMVYzYTEsMSwwLDAsMC0yLDBWNmMtNC40LjEtNi44MywyLjI5''@;'; put 'put ''LTcuNTcsNC4xOEE1LjU2LDUuNTYsMCwwLDAsMTEuNjYsMTcsMTMuMiwxMy4yLDAsMCwwLDE3LDE4Ljg0VjI4YTEyLjMsMTIuMywwLDAsMS03LjE0LTIuNzRBMSwxLDAsMSwwLDguNDksMjYuNywxNC4wOSwxNC4wOSwwLDAsMCwxNywzMHYzYTEsMSwwLDAsMCwyLDBWMzBjMi44Mi0uMTksNi4w''@;'; put 'put ''Ny0xLjA5LDcuMy00Ljc2QTUuMzMsNS4zMywwLDAsMCwyNiwyMS4xNVpNMTIuNzksMTUuMzJhMy41NywzLjU3LDAsMCwxLTEuNDktNC4zOUMxMS40MSwxMC42MywxMi41Myw4LjEyLDE3LDh2OC44QTEwLjcsMTAuNywwLDAsMSwxMi43OSwxNS4zMlpNMjQuNCwyNC41NmMtLjcyLDIuMTQtMi4z''@;'; put 'put ''MiwzLjE3LTUuNCwzLjRWMTkuMjNjLjY0LjE0LDEuMy4zLDIsLjUxYTUsNSwwLDAsMSwzLjE5LDIuMzJBMy4zNCwzLjM0LDAsMCwxLDI0LjQsMjQuNTZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuNjUsMjEuNTljLTEsMy0zLjYxLDMuODQtNS45LDR2MmExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjcuNTlBMTEuNDcsMTEuNDcsMCwwLDEsMTEsMjVhMS4yNSwxLjI1LDAsMSwxLDEuNzEtMS44Myw5LjExLDku''@;'; put 'put ''MTEsMCwwLDAsNC41NSwxLjk0VjE4LjgzYTkuNjMsOS42MywwLDAsMS0zLjczLTEuNDEsNC44LDQuOCwwLDAsMS0xLjkxLTUuODRjLjU5LTEuNTEsMi40Mi0zLjIzLDUuNjQtMy41MVY2LjI1YTEuMjUsMS4yNSwwLDAsMSwyLjUsMFY4LjExYTkuNjcsOS42NywwLDAsMSw0LjksMkExLjI1LDEu''@;'; put 'put ''MjUsMCwwLDEsMjMsMTEuOTVhNy4xNCw3LjE0LDAsMCwwLTMuMjQtMS4zMXY2LjEzYy42LjEzLDEuMjQuMjcsMS45MS40OGE1Ljg1LDUuODUsMCwwLDEsMy42OSwyLjgyQTQuNjQsNC42NCwwLDAsMSwyNS42NSwyMy41OVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC45MiwxOS42NGMtLjQtLjEyLS43OS0uMjItMS4xNy0uM3Y1Ljc2YzItLjIsMy4wNy0uOSwzLjUzLTIuM2EyLjE1LDIuMTUsMCwwLDAtLjE1LTEuNThBMy40OSwzLjQ5LDAsMCwwLDIwLjkyLDE5LjY0WiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTEzLjk0LDEyLjQ4YTIuMzEsMi4zMSwwLDAsMCwxLDIuODcsNi41Myw2LjUzLDAsMCwwLDIuMzIuOTJWMTAuNTVDMTUuMTYsMTAuOCwxNC4xOSwxMS44NCwxMy45NCwxMi40OFoiLz4nKSxoLkNsclNoYXBlQ3JlZGl0''@;'; put 'put ''Q2FyZD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMiwwLDEySDRMNCw4Wk00LDI4VjI0SDMydjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjMiIHdpZHRoPSIyMiIgaGVpZ2h0PSIzMCIgcng9IjAuOTYiIHJ5PSIwLjk2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNikgcm90YXRlKDkwKSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGlu''@;'; put 'put ''ZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMy''@;'; put 'put ''LDZabTAsMThINFYyMEgzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksaC5DbHJTaGFwZUJhbms9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMuNSwxMy41NiwxOCw1LjIzbDE0LjUsOC4zM2ExLDEsMCwwLDAsMS0xLjczTDE4LDIuOTIsMi41LDEx''@;'; put 'put ''LjgzYTEsMSwwLDEsMCwxLDEuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjZhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMC0ySDI4VjE3LjYzSDI2VjI1SDE5VjE3LjYzSDE3VjI1SDEwVjE3LjYz''@;'; put 'put ''SDhWMjVINUExLDEsMCwwLDAsNCwyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI1LjAyIiB5PSIxNCIgd2lkdGg9IjI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMjlIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjE1LDExLjU4aDMuMjFMMTguNjUsNy43''@;'; put 'put ''MmEuOC44LDAsMCwwLS44LDBsLTYuNzIsMy44NmgzLjIxbDMuOS0yLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI2YTEsMSwwLDAsMCwxLDFIMzFhMSwxLDAsMCwwLDAtMkgyOFYxNy42M0gyNlYyNUgx''@;'; put 'put ''OVYxNy42M0gxN1YyNUgxMFYxNy42M0g4VjI1SDVBMSwxLDAsMCwwLDQsMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjUuMDIiIHk9IjE0IiB3aWR0aD0iMjYiIGhlaWdodD0iMiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMjlIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4xNSwxMS41OGgzLjIxTDE4LjY1LDcuNzJhLjguOCwwLDAsMC0uOCwwbC02LjcyLDMuODZoMy4yMWwzLjktMi4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt''@;'; put 'put ''LWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmMwLS4xNiwwLS4zMiwwLS40OEwxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczTDE4LDUuMjMsMjIuNzcsOEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTQsMTMuMjRsLjU2LjMyYTEsMSwwLDAsMCwxLjQ0LTEuMTlBNy40NSw3LjQ1LDAsMCwxLDMxLjk0LDEzLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjZhMSwx''@;'; put 'put ''LDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMC0ySDI4VjE3LjYzSDI2VjI1SDE5VjE3LjYzSDE3VjI1SDEwVjE3LjYzSDhWMjVINUExLDEsMCwwLDAsNCwyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMzMsMjlIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsMTVBMy41MSwzLjUxLDAsMCwxLDIw''@;'; put 'put ''LDE0SDV2MkgzMVYxNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNDYsOS43NGwuNjgtMS4xNy0xLjQ5LS44NWEuOC44LDAsMCwwLS44LDBsLTYuNzIsMy44NmgzLjIxbDMu''@;'; put 'put ''OS0yLjI0LDEuMS42M0MxOS4zOSw5Ljg5LDE5LjQyLDkuODEsMTkuNDYsOS43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMDUsNS4yNSwxOCwyLjkyLDIuNSwxMS44M2Ex''@;'; put 'put ''LDEsMCwxLDAsMSwxLjczTDE4LDUuMjMsMjEuMDUsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNI''@;'; put 'put ''MzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMuNSwxMy41Niw1LDEyLjY4VjE2SDMxVjEyLjcxbDEuNDguODVhMSwxLDAsMCwwLDEtMS43M0wxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczWk0xNy44NSw3LjExYS44LjgsMCwwLDEsLjgsMEwyNS4zNywxMUgyMi4xNWwtMy45LTIuMjRMMTQuMzUsMTFIMTEuMTRaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuODUsMjdIMzJ2LS44NUExLjE1LDEuMTUsMCwwLDAsMzAuODUsMjVIMjhWMTcuNjNIMjRWMjVIMjBWMTcuNjNIMTZWMjVIMTJWMTcuNjNIOFYyNUg1LjE1QTEuMTUsMS4xNSww''@;'; put 'put ''LDAsMCw0LDI2LjE1VjI3SDMuMTVBMS4xNSwxLjE1LDAsMCwwLDIsMjguMTVWMzFIMzRWMjguMTVBMS4xNSwxLjE1LDAsMCwwLDMyLjg1LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjg1LDI3SDMydi0uODVB''@;'; put 'put ''MS4xNSwxLjE1LDAsMCwwLDMwLjg1LDI1SDI4VjE3LjYzSDI0VjI1SDIwVjE3LjYzSDE2VjI1SDEyVjE3LjYzSDhWMjVINS4xNUExLjE1LDEuMTUsMCwwLDAsNCwyNi4xNVYyN0gzLjE1QTEuMTUsMS4xNSwwLDAsMCwyLDI4LjE1VjMxSDM0VjI4LjE1QTEuMTUsMS4xNSwwLDAsMCwzMi44NSwy''@;'; put 'put ''N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ3LDcuNDcsMCwwLDEsMjQuMzksMTFIMjIuMTVsLTMuOS0yLjI0TDE0LjM1LDExSDExLjE0bDYuNzItMy44NmEuOC44LDAs''@;'; put 'put ''MCwxLC44LDBsNSwyLjg3QTcuNDUsNy40NSwwLDAsMSwyMi41LDZjMC0uMTYsMC0uMzIsMC0uNDhMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M0w1LDEyLjY4VjE2SDMxVjEzLjQyQTcuNTMsNy41MywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45NCwxMy4yNGwuNTYuMzJhMSwxLDAsMCwwLDEuNDQtMS4xOUE3LjQ1LDcuNDUsMCwwLDEsMzEuOTQsMTMuMjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi44NSwyN0gzMnYtLjg1''@;'; put 'put ''QTEuMTUsMS4xNSwwLDAsMCwzMC44NSwyNUgyOFYxNy42M0gyNFYyNUgyMFYxNy42M0gxNlYyNUgxMlYxNy42M0g4VjI1SDUuMTVBMS4xNSwxLjE1LDAsMCwwLDQsMjYuMTVWMjdIMy4xNUExLjE1LDEuMTUsMCwwLDAsMiwyOC4xNVYzMUgzNFYyOC4xNUExLjE1LDEuMTUsMCwwLDAsMzIuODUs''@;'; put 'put ''MjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSwxNWEzLjUxLDMuNTEsMCwwLDEtMy01LjI2bC4xNC0uMjQtMS4zNS0uNzhMMTQuMzUsMTFIMTEuMTRsNi43Mi0zLjg2YS44Ljgs''@;'; put 'put ''MCwwLDEsLjgsMGwxLjc1LDEsMS42NS0yLjg2TDE4LDIuOTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNMNSwxMi42OFYxNkgzMVYxNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0y''@;'; put 'put ''Ni44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxoLkNsclNoYXBlRG9sbGFyQmlsbD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCww''@;'; put 'put ''LDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCw2YTQuMjUsNC4yNSwwLDAsMS0zLjktNEgzMlptMCwxLjYydjQuODNBNS44Nyw1Ljg3LDAsMCwwLDI2LjQ5LDI2aC0xN0E1Ljg3LDUuODcsMCwwLDAsNCwyMC40NFYxNS42QTUuODcsNS44NywwLDAsMCw5LjUxLDEwaDE3QTUuODcsNS44NywwLDAs''@;'; put 'put ''MCwzMiwxNS42Wk03LjksMTBBNC4yNSw0LjI1LDAsMCwxLDQsMTRWMTBaTTQsMjIuMDZBNC4yNSw0LjI1LDAsMCwxLDcuOSwyNkg0Wk0yOC4xLDI2QTQuMjUsNC4yNSwwLDAsMSwzMiwyMi4wNlYyNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIiBkPSJNMTgsMTAuODVjLTMuNDcsMC02LjMsMy4yMS02LjMsNy4xNXMyLjgzLDcuMTUsNi4zLDcuMTUsNi4zLTMuMjEsNi4zLTcuMTVTMjEuNDcsMTAuODUsMTgsMTAuODVabTAsMTIuNjljLTIuNTksMC00LjctMi40OS00LjctNS41NXMyLjExLTUuNTUsNC43LTUuNTUs''@;'; put 'put ''NC43LDIuNDksNC43LDUuNTVTMjAuNTksMjMuNTUsMTgsMjMuNTVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIs''@;'; put 'put ''MiwwLDAsMCwzMiw4Wk00LDI2VjIxLjE1QTUuMTgsNS4xOCwwLDAsMSw4Ljc5LDI2Wk00LDE0Ljg1VjEwSDguNzlBNS4xOCw1LjE4LDAsMCwxLDQsMTQuODVaTTE4LDI1LjE1Yy0zLjQ3LDAtNi4zLTMuMjEtNi4zLTcuMTVzMi44My03LjE1LDYuMy03LjE1LDYuMywzLjIxLDYuMyw3LjE1UzIx''@;'; put 'put ''LjQ3LDI1LjE1LDE4LDI1LjE1Wk0zMiwyNkgyNy4yNUE1LjE4LDUuMTgsMCwwLDEsMzIsMjEuMTVabTAtMTEuMTVBNS4xOCw1LjE4LDAsMCwxLDI3LjI1LDEwSDMyWiIvPlxuICAgICAgICAgICAgPGVsbGlwc2UgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjE4''@;'; put 'put ''IiBjeT0iMTgiIHJ4PSI0IiByeT0iNC43MiIvPicpLGguQ2xyU2hhcGVFQ2hlY2s9KDAscy5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjE2IiB5PSIxNiIgd2lkdGg9IjE1IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyMCIgeT0iMjEiIHdpZHRoPSIxMSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTM0LDhIMTIuOTNh''@;'; put 'put ''OC4zNSw4LjM1LDAsMCwxLC43OSwySDMzVjI2SDNWMTkuOWE3LjgzLDcuODMsMCwwLDEtMi0xLjM0VjI3YTEsMSwwLDAsMCwxLDFIMzRhMSwxLDAsMCwwLDEtMVY5QTEsMSwwLDAsMCwzNCw4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTQiIGQ9Ik02LjU3LDE4LjY4YTYuMTcsNi4xNywwLDAsMCw0LjMyLTEuNTksMS4yLDEuMiwwLDAsMCwuMzYtLjg0LDEuMDgsMS4wOCwwLDAsMC0xLjA5LTEuMTEsMSwxLDAsMCwwLS43MS4yNSw0LjMyLDQuMzIsMCwwLDEtMi44NCwxLDMuMzUsMy4zNSwwLDAsMS0zLjQ2LTNoNy41''@;'; put 'put ''M0ExLjI5LDEuMjksMCwwLDAsMTIsMTIuMDYsNS42OCw1LjY4LDAsMCwwLDYuMjcsNi4xNCw2LDYsMCwwLDAsLjQsMTIuNHYwQTYsNiwwLDAsMCw2LjU3LDE4LjY4Wk02LjI1LDguMzljMS44MiwwLDIuODcsMS4zOSwzLDMuMTZIMy4xM0MzLjM4LDkuNjksNC41Niw4LjM5LDYuMjUsOC4zOVoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCw4SDEyLjkxYTguNjEsOC42MSwwLDAsMSwxLjIsNC4zOSw4LDgsMCwwLDEtNy43OCw4LjI3QTcuNTEsNy41MSwwLDAsMSwxLDE4LjQxVjI3YTEsMSwwLDAsMCwxLDFIMzRh''@;'; put 'put ''MSwxLDAsMCwwLDEtMVY5QTEsMSwwLDAsMCwzNCw4Wk0zMSwyM0gyMFYyMUgzMVptMC01SDE2VjE2SDMxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYuNTcsMTguNjhBNiw2LDAsMCwxLC40LDEyLjQ0djBBNiw2LDAs''@;'; put 'put ''MCwxLDYuMjcsNi4xNCw1LjY4LDUuNjgsMCwwLDEsMTIsMTIuMDZhMS4yOSwxLjI5LDAsMCwxLTEuMywxLjMySDMuMTVhMy4zNSwzLjM1LDAsMCwwLDMuNDYsMyw0LjMyLDQuMzIsMCwwLDAsMi44NC0xLDEsMSwwLDAsMSwuNzEtLjI1LDEuMDgsMS4wOCwwLDAsMSwxLjA5LDEuMTEsMS4yLDEu''@;'; put 'put ''MiwwLDAsMS0uMzYuODRBNi4xNyw2LjE3LDAsMCwxLDYuNTcsMTguNjhaTTkuMywxMS41NWMtLjE4LTEuNzctMS4yMy0zLjE2LTMtMy4xNnMtMi44NywxLjMtMy4xMiwzLjE2WiIvPicpLGguQ2xyU2hhcGVQb3VuZD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjksMzBIMTMuNEE4LjQ1LDguNDUsMCwwLDAsMTUsMjQuNjVWMjFoNC4zMWExLDEsMCwwLDAsMC0ySDE1VjExLjMxQTUuMjQsNS4yNCwwLDAsMSwyMC4yMSw2LDUuMTksNS4xOSwwLDAsMSwyNCw3LjczYTEsMSwwLDAsMCwxLjQ4LTEuMzVB''@;'; put 'put ''Ny4xOSw3LjE5LDAsMCwwLDEzLDExLjMxVjE5SDguNzJhMSwxLDAsMSwwLDAsMkgxM3YzLjY1QzEzLDI5LjM4LDEwLjEyLDMwLDEwLDMwYTEsMSwwLDAsMCwuMTcsMkgyNy45YTEsMSwwLDEsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LjUsMjUuOTJIMTEuNzRhMS4yNSwxLjI1LDAsMCwxLS4yMi0yLjQ4Yy4xNSwwLDEuNzItLjQ5LDEuNzItMy41NFYxOWgtMi41YTEsMSwwLDAsMSwwLTJoMi41VjExLjg4YTUuODUsNS44NSww''@;'; put 'put ''LDAsMSw1LjcyLTYsNS42Myw1LjYzLDAsMCwxLDQuMjEsMS45NEExLjI1LDEuMjUsMCwxLDEsMjEuMyw5LjUxLDMuMDgsMy4wOCwwLDAsMCwxOSw4LjQyYTMuMzUsMy4zNSwwLDAsMC0zLjIyLDMuNDZWMTdoM2ExLDEsMCwwLDEsMCwyaC0zdjIuOUE3LjY1LDcuNjUsMCwwLDEsMTUsMjUuNDJI''@;'; put 'put ''MjQuNWExLjI1LDEuMjUsMCwwLDEsMCwyLjVaIi8+JyksaC5DbHJTaGFwZVJ1cGVlPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjgsOEgyNC4xNEE3LjUyLDcuNTIsMCwwLDAsMjIuNiw2SDI4YTEsMSwwLDAs''@;'; put 'put ''MCwwLTJIMTBhMSwxLDAsMCwwLDAsMmg3LjU1YTUuNDIsNS40MiwwLDAsMSw0LjIsMkgxMGExLDEsMCwwLDAsMCwySDIyLjc5QTUuNTQsNS41NCwwLDAsMSwyMywxMS41MSw1LjQ4LDUuNDgsMCwwLDEsMTcuNTUsMTdIMTEuMTRhMSwxLDAsMCwwLS43NSwxLjY2TDIyLjA2LDMyYTEsMSwwLDEs''@;'; put 'put ''MCwxLjUtMS4zMkwxMy4zNSwxOWg0LjIxYTcuNTEsNy41MSwwLDAsMCw3LjMtOUgyOGExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAs''@;'; put 'put ''MTgsMlptNS44OCw5SDI2YTEsMSwwLDAsMSwwLDJIMjQuMjZjMCwuMDYsMCwuMTIsMCwuMTlhNi4wOSw2LjA5LDAsMCwxLTYsNi4yaC0ybDYuODIsOC4wNmExLjI1LDEuMjUsMCwwLDEtMS45MSwxLjYyTDEyLjYzLDE4Ljk0YTEuMjUsMS4yNSwwLDAsMSwxLTIuMDZoNC43MWEzLjU5LDMuNTks''@;'; put 'put ''MCwwLDAsMy40OC0zLjY5YzAtLjA3LDAtLjEzLDAtLjJoLTlhMSwxLDAsMCwxLDAtMmg4LjMyYTMuNDEsMy40MSwwLDAsMC0yLjc4LTEuNUgxMi43NWExLjI1LDEuMjUsMCwwLDEsMC0yLjVIMjZhMSwxLDAsMCwxLDAsMkgyMi42OEE2LjIzLDYuMjMsMCwwLDEsMjMuODgsMTFaIi8+JyksaC5D''@;'; put 'put ''bHJTaGFwZVdvbj0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE4SDI4Ljc1bC41LTJIMzNhMSwxLDAsMCwwLDAtMkgyOS43NGwyLjE3LTguNzZBMSwxLDAsMCwwLDMwLDQuNzZMMjcuNjgsMTRIMjEuMzFM''@;'; put 'put ''MTksNC43NmExLDEsMCwwLDAtMS45NCwwTDE0Ljc5LDE0SDguNDJMNi4xMyw0Ljc2YTEsMSwwLDAsMC0xLjk0LjQ4TDYuMzYsMTRIM2ExLDEsMCwwLDAsMCwySDYuODVsLjUsMkgzYTEsMSwwLDAsMCwwLDJINy44NGwyLjc5LDExLjI0YTEsMSwwLDAsMCwxLjk0LDBMMTUuMzYsMjBoNS4zOGwy''@;'; put 'put ''Ljc5LDExLjI0YTEsMSwwLDAsMCwxLjk0LDBMMjguMjUsMjBIMzNhMSwxLDAsMCwwLDAtMlptLTUuODItMi0uNSwySDIyLjNsLS41LTJaTTE4LDkuMTYsMTkuMjUsMTRoLTIuNFpNOC45MSwxNmg1LjM4bC0uNSwySDkuNDFaTTExLjYsMjYuODQsOS45MSwyMEgxMy4zWk0xNS44NSwxOGwuNS0y''@;'; put 'put ''aDMuMzlsLjUsMlptOC42NCw4Ljg0TDIyLjgsMjBoMy4zOVoiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHBvaW50cz0iMTcuNzQgMTYgMTcuMjIgMTggMTguODUgMTggMTguMzIgMTYgMTcuNzQgMTYiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIHBvaW50cz0iMTEuOTQgMTggMTQuNjMgMTggMTUuMTYgMTYgMTEuNDEgMTYgMTEuOTQgMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTMiIHBvaW50cz0iMTMuMjkgMjMuMSAxNC4xIDIwIDEyLjQ3IDIwIDEzLjI5IDIzLjEiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIHBvaW50cz0iMjEuNDQgMTggMjQuMTMgMTggMjQuNjYgMTYgMjAuOTEgMTYgMjEuNDQg''@;'; put 'put ''MTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIHBvaW50cz0iMjIuNzggMjMuMSAyMy42IDIwIDIxLjk3IDIwIDIyLjc4IDIzLjEiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTYiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LDIwSDI2LjE5TDI0LDI4LjMyYTEuMjUsMS4yNSwwLDAsMS0yLjQyLDBMMTkuMzgsMjBIMTYuNjlsLTIuMTksOC4zMmExLjI1LDEuMjUsMCwwLDEtMi40MiwwTDkuODgsMjBIN2ExLDEsMCww''@;'; put 'put ''LDEsMC0ySDkuMzVsLS41My0ySDdhMSwxLDAsMCwxLDAtMkg4LjNsLTEtMy42OGExLjI1LDEuMjUsMCwwLDEsMi40Mi0uNjRMMTAuODgsMTRoNC44bDEuMTQtNC4zMmExLjI1LDEuMjUsMCwwLDEsMi40MiwwTDIwLjM4LDE0aDQuOGwxLjE0LTQuMzJhMS4yNSwxLjI1LDAsMCwxLDIuNDIuNjRs''@;'; put 'put ''LTEsMy42OEgyOWExLDEsMCwwLDEsMCwySDI3LjI0bC0uNTMsMkgyOWExLDEsMCwwLDEsMCwyWiIvPicpLGguQ2xyU2hhcGVZZW49KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS4zNCw0LjU1YTEsMSwwLDEs''@;'; put 'put ''MC0xLjY3LTEuMUwxOCwxOC4yMyw4LjMzLDMuNDVhMSwxLDAsMCwwLTEuNjcsMS4xTDE3LDIwLjM1VjIyLjJIMTJhLjguOCwwLDAsMCwwLDEuNmg1djIuNEgxMmEuOC44LDAsMCwwLDAsMS42aDVWMzJhMSwxLDAsMCwwLDIsMFYyNy44aDVhLjguOCwwLDAsMCwwLTEuNkgxOVYyMy44aDVhLjgu''@;'; put 'put ''OCwwLDAsMCwwLTEuNkgxOVYyMC4zNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTguMDcsNy45MUwxOS43NCwyMEgyMmExLDEsMCwwLDEsMCwy''@;'; put 'put ''SDE5LjI1djJIMjJhMSwxLDAsMCwxLDAsMkgxOS4yNXYyLjc1YTEuMjUsMS4yNSwwLDAsMS0yLjUsMFYyNkgxNGExLDEsMCwxLDEsMC0yaDIuNzVWMjJIMTRhMSwxLDAsMSwxLDAtMmgyLjI2TDkuOTMsOS45MWExLjI1LDEuMjUsMCwxLDEsMi4xMi0xLjMzTDE4LDE4LjA4bDUuOTUtOS40OWEx''@;'; put 'put ''LjI1LDEuMjUsMCwxLDEsMi4xMiwxLjMzWiIvPicpLGguQ2xyU2hhcGVCaXRjb2luPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNC4xMSwxNi44OEE1LjQ5LDUuNDksMCwwLDAsMjEsN1Y0YTEsMSwwLDAsMC0yLDBWN0gxNlY0YTEsMSwwLDAsMC0yLDBWN0gxMWExLDEsMCwwLDAtMSwx''@;'; put 'put ''VjI4YTEsMSwwLDAsMCwxLDFoM3YzYTEsMSwwLDAsMCwyLDBWMjloM3YzYTEsMSwwLDAsMCwyLDBWMjloLjA4QTYuMDcsNi4wNywwLDAsMCwyNywyMi44MXYtLjYyQTYuMjUsNi4yNSwwLDAsMCwyNC4xMSwxNi44OFpNMTIsOWg4LjY5YTMuNTksMy41OSwwLDAsMSwzLjQzLDIuMzZBMy41MSwz''@;'; put 'put ''LjUxLDAsMCwxLDIwLjc5LDE2SDEyWk0yNSwyMi44MUE0LjA4LDQuMDgsMCwwLDEsMjEuMDYsMjdIMTJWMThoOS4wNkE0LjA4LDQuMDgsMCwwLDEsMjUsMjIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0y''@;'; put 'put ''MS4xOCwxOC40N0gxNC41djZoNi42OGEyLjcsMi43LDAsMCwwLDIuNjMtMi43N3YtLjQ4QTIuNzEsMi43MSwwLDAsMCwyMS4xOCwxOC40N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsMTMuNzVhMi4yNCwyLjI0''@;'; put 'put ''LDAsMCwwLTIuMjMtMi4yNUgxNC41VjE2aDYuM0EyLjIyLDIuMjIsMCwwLDAsMjMsMTMuNzVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptOC4z''@;'; put 'put ''MSwxOS43M0E1LjIyLDUuMjIsMCwwLDEsMjEuMTgsMjdIMjF2MS45YTEsMSwwLDAsMS0yLDBWMjdIMTd2MS45YTEsMSwwLDAsMS0yLDBWMjdIMTMuMjVBMS4yNSwxLjI1LDAsMCwxLDEyLDI1Ljc1VjE3LjIzaDB2LTdBMS4yNSwxLjI1LDAsMCwxLDEzLjI1LDlIMTVWNy4wN2ExLDEsMCwwLDEs''@;'; put 'put ''MiwwVjloMlY3LjA3YTEsMSwwLDAsMSwyLDBWOWE0LjcyLDQuNzIsMCwwLDEsMy4yLDgsNS4zMSw1LjMxLDAsMCwxLDIuMTEsNC4yNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksaC5DbHJTaGFwZUNvaW5CYWc9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGgg''@;'; put 'put ''ZD0iTTIxLjYsMjlhMSwxLDAsMCwwLTEtMWgtNmExLDEsMCwwLDAsMCwyaDZBMSwxLDAsMCwwLDIxLjYsMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjIuNTQsMjRoLTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjIsMzJIMTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIuNywzMmgtN2ExLDEs''@;'; put 'put ''MCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMy43LDI4aC03YTEsMSwwLDAsMCwwLDJoN2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTUiIC8+PHBhdGggZD0iTTMzLjc0LDI2YTI4LDI4LDAsMCwwLTIuODItMTAuMTJBMjAuMjQsMjAuMjQsMCwwLDAsMjQuNiw4LjcxTDI3LDMuNDJhMSwxLDAsMCwwLS4wNy0xQTEsMSwwLDAsMCwyNi4xMywySDkuOGExLDEsMCwwLDAtLjkxLDEuNDJsMi40NSw1LjMxYTIwLjMzLDIwLjMzLDAs''@;'; put 'put ''MCwwLTYuMjgsNy4xNWMtMi4xNSw0LTIuODIsOC44OS0zLDEyLjI4YTMuNiwzLjYsMCwwLDAsMSwyLjcxQTMuNzksMy43OSwwLDAsMCw1LjgsMzEuOTRIMTJWMzBINS43MmExLjY4LDEuNjgsMCwwLDEtMS4yMS0uNTIsMS42MiwxLjYyLDAsMCwxLS40NS0xLjIzYy4xNC0yLjYxLjY5LTcuNTgs''@;'; put 'put ''Mi43Ni0xMS40NUExOCwxOCwwLDAsMSwxMy4wOCwxMGgxYTMwLjgxLDMwLjgxLDAsMCwwLTEuODcsMi45MiwyMi43OCwyMi43OCwwLDAsMC0xLjQ3LDMuMzRsMS4zNy45MmEyNCwyNCwwLDAsMSwxLjQ5LTMuNDdBMjkuMSwyOS4xLDAsMCwxLDE2LjA1LDEwaDFhMjEuNDUsMjEuNDUsMCwwLDEs''@;'; put 'put ''MS40MSw1LDIyLjU0LDIyLjU0LDAsMCwxLC4zMiwzLjg2bDEuNTgtMS4xMWEyNC4xNSwyNC4xNSwwLDAsMC0uMzItM0EyNC44MiwyNC44MiwwLDAsMCwxOC43NiwxMGguNzhsLjkxLTJIMTMuMjFMMTEuMzYsNEgyNC41N2wtMi41LDUuNDdhOS45Myw5LjkzLDAsMCwxLDEuMjMuNzgsMTguNjMs''@;'; put 'put ''MTguNjMsMCwwLDEsNS44Niw2LjU3QTI2LjU5LDI2LjU5LDAsMCwxLDMxLjczLDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgPHBhdGggZD0iTTI0Ljg5LDI2aDcuODZjLS42Ni04LjcxLTQuNDEtMTQuMTItOS4yMi0xNy4zMkwyNS43Miwz''@;'; put 'put ''LjlhMSwxLDAsMCwwLS45MS0xLjRIMTEuMWExLDEsMCwwLDAtLjkxLDEuNGwxLjIsMi42SDIxLjUxbC0uOSwySDE4Ljc2QTI0LjksMjQuOSwwLDAsMSwyMCwxMy4xOWEyNC40OSwyNC40OSwwLDAsMSwuMzIsM2wtMS41OCwxLjExYTIyLjU0LDIyLjU0LDAsMCwwLS4zMi0zLjg2QTIxLjc0LDIx''@;'; put 'put ''Ljc0LDAsMCwwLDE3LDguNWgtMWEyOC4yMiwyOC4yMiwwLDAsMC0yLjQ4LDMuNywyMy45MSwyMy45MSwwLDAsMC0xLjQ5LDMuNDZsLTEuMzctLjkxYTIyLjc4LDIyLjc4LDAsMCwxLDEuNDctMy4zNEEzMC44MSwzMC44MSwwLDAsMSwxNC4wNSw4LjVIMTIuM2wuMDguMTdDNy4wOCwxMi4yLDMu''@;'; put 'put ''MDUsMTguNCwzLjA1LDI4Ljc1QTEuNjUsMS42NSwwLDAsMCw0LjYxLDMwLjVoOEEyLjY3LDIuNjcsMCwwLDEsMTQuMjEsMjZhMi42NywyLjY3LDAsMCwxLS4zNy0xLjM0LDIuNywyLjcsMCwwLDEsMi43LTIuN2g2YTIuNywyLjcsMCwwLDEsMi43LDIuN0EyLjYzLDIuNjMsMCwwLDEsMjQuODks''@;'; put 'put ''MjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS42LDI4LjVhMSwxLDAsMCwwLTEtMWgtNmExLDEsMCwwLDAsMCwyaDZBMSwxLDAsMCwwLDIxLjYsMjguNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBh''@;'; put 'put ''dGggZD0iTTIyLjU0LDIzLjVoLTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwzMS41SDE2YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuNywzMS41aC03YTEsMSwwLDAsMCwwLDJoN2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMuNywyNy41aC03YTEsMSwwLDAsMCwwLDJoN2ExLDEsMCww''@;'; put 'put ''LDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNiIgLz4nKSxoLkNsclNoYXBlUGVzbz0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMTMuMkgyNy44OUE2LjgxLDYuODEsMCwwLDAsMjgsMTJhNy44NSw3Ljg1LDAsMCwwLS4xLTEuMTloMi45M2EuOC44''@;'; put 'put ''LDAsMCwwLDAtMS42SDI3LjQ2QTguNDQsOC40NCwwLDAsMCwxOS41Nyw0SDExYTEsMSwwLDAsMC0xLDFWOS4ySDdhLjguOCwwLDAsMCwwLDEuNmgzdjIuNEg3YS44LjgsMCwwLDAsMCwxLjZoM1YzMWExLDEsMCwwLDAsMiwwVjIwaDcuNTdhOC40NSw4LjQ1LDAsMCwwLDcuODktNS4ySDMxYS44''@;'; put 'put ''LjgsMCwwLDAsMC0xLjZaTTEyLDZoNy41N2E2LjUxLDYuNTEsMCwwLDEsNS42OCwzLjJIMTJabTAsNC44SDI1Ljg3YTUuNiw1LjYsMCwwLDEsMCwyLjRIMTJaTTE5LjU3LDE4SDEyVjE0LjhIMjUuMjVBNi41MSw2LjUxLDAsMCwxLDE5LjU3LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE0LjE4LDEzLjhWMTZoOS40NWE1LjI2LDUuMjYsMCwwLDAsLjA4LS44OSw0LjcyLDQuNzIsMCwwLDAtLjItMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE0LjE4LDE5LjdoNS4x''@;'; put 'put ''OWE0LjI4LDQuMjgsMCwwLDAsMy41LTEuOUgxNC4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTE5LjM3LDEwLjUxSDE0LjE4VjEyaDguMzdBNC4yMSw0LjIxLDAsMCwwLDE5LjM3LDEwLjUxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMTcuNjcsMmExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxNy42NywyWm0xMC41LDE1LjhIMjUuN2E2Ljg3LDYuODcsMCwwLDEtNi4zMyw0LjRIMTQuMTh2Ni41NGExLjI1LDEuMjUsMCwxLDEtMi41LDBWMTcuOEg4Ljc2YS45LjksMCwx''@;'; put 'put ''LDEsMC0xLjhoMi45MlYxMy44SDguNzZhLjkuOSwwLDEsMSwwLTEuOGgyLjkyVjkuMjZBMS4yNSwxLjI1LDAsMCwxLDEyLjkzLDhoNi40NGE2Ljg0LDYuODQsMCwwLDEsNi4xNSw0aDIuNjVhLjkuOSwwLDAsMSwwLDEuOEgyNi4wOWE2LjkxLDYuOTEsMCwwLDEsLjEyLDEuMyw2LjgsNi44LDAs''@;'; put 'put ''MCwxLS4wNi45aDJhLjkuOSwwLDAsMSwwLDEuOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksaC5DbHJTaGFwZVJ1YmxlPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC41NywyMEE4LjIzLDguMjMsMCwwLDAsMjksMTJhOC4yMyw4LjIzLDAsMCww''@;'; put 'put ''LTguNDMtOEgxMmExLDEsMCwwLDAtMSwxVjE4SDlhMSwxLDAsMCwwLDAsMmgydjJIOWExLDEsMCwwLDAsMCwyaDJ2N2ExLDEsMCwwLDAsMiwwVjI0aDlhMSwxLDAsMCwwLDAtMkgxM1YyMFpNMTMsNmg3LjU3QTYuMjQsNi4yNCwwLDAsMSwyNywxMmE2LjIzLDYuMjMsMCwwLDEtNi40Myw2SDEz''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIwLjc1LDkuMjVIMTV2OC44MWg1Ljc5YTQuNjYsNC42NiwwLDAsMCw0Ljg2LTQuNEE0LjY1LDQuNjUsMCwwLDAsMjAuNzUsOS4yNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMi43NSwxOC41NkgxNVYyMmg4LjI5YTEsMSwwLDAsMSwwLDJIMTV2NWExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjRIMTEuMjVhMSwxLDAsMCwxLDAtMmgxLjIxVjIwLjU2SDExLjI1''@;'; put 'put ''YTEuMjUsMS4yNSwwLDAsMSwwLTIuNWgxLjIxVjhhMS4yNSwxLjI1LDAsMCwxLDEuMjUtMS4yNWg3YTcuMTQsNy4xNCwwLDAsMSw3LjM2LDYuOUE3LjE1LDcuMTUsMCwwLDEsMjAuNzUsMjAuNTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGguQ2xyU2hh''@;'; put 'put ''cGVFbXBsb3llZUdyb3VwPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC40MiwxNi4zMWE1LjcsNS43LDAsMSwxLDUuNzYtNS43QTUuNzQsNS43NCwwLDAsMSwxOC40MiwxNi4zMVptMC05LjRhMy43LDMuNywwLDEsMCwzLjc2LDMuN0EzLjc0LDMuNzQsMCwwLDAsMTguNDIsNi45MVoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xOC40MiwxNi4zMWE1LjcsNS43LDAsMSwxLDUuNzYtNS43QTUuNzQsNS43NCwwLDAsMSwxOC40MiwxNi4zMVptMC05LjRhMy43LDMuNywwLDEsMCwzLjc2LDMuN0EzLjc0LDMuNzQsMCww''@;'; put 'put ''LDAsMTguNDIsNi45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS45MSwxNy42NWEyMC42LDIwLjYsMCwwLDAtMTMsMkExLjc3LDEuNzcsMCwwLDAsOCwyMS4yNXYzLjU2YTEsMSwwLDAsMCwyLDBWMjEuMzhhMTguOTIsMTgu''@;'; put 'put ''OTIsMCwwLDEsMTItMS42OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMywyMkgyNi4zVjIwLjUyYTEsMSwwLDAsMC0yLDBWMjJIMTdhMSwxLDAsMCwwLTEsMVYzM2ExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWMjNB''@;'; put 'put ''MSwxLDAsMCwwLDMzLDIyWk0zMiwzMkgxOFYyNGg2LjN2LjQxYTEsMSwwLDAsMCwyLDBWMjRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cmVjdCB4PSIyMS44MSIgeT0iMjcuNDIiIHdpZHRoPSI1Ljk2IiBoZWlnaHQ9IjEuNCIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTEwLjg0LDEyLjI0YTE4LDE4LDAsMCwwLTcuOTUsMkExLjY3LDEuNjcsMCwwLDAsMiwxNS43MXYzLjFhMSwxLDAsMCwwLDIsMHYtMi45YTE2LDE2LDAsMCwxLDcuNTgtMS42N0E3LjI4LDcuMjgsMCww''@;'; put 'put ''LDEsMTAuODQsMTIuMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICA8cGF0aCBkPSJNMzMuMTEsMTQuMjNhMTcuOCwxNy44LDAsMCwwLTcuMTItMiw3LjQ2LDcuNDYsMCwwLDEtLjczLDJBMTUuODksMTUuODksMCwwLDEsMzIsMTUuOTF2Mi45YTEs''@;'; put 'put ''MSwwLDEsMCwyLDB2LTMuMUExLjY3LDEuNjcsMCwwLDAsMzMuMTEsMTQuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cGF0aCBkPSJNMTAuNjYsMTAuNjFjMC0uMjMsMC0uNDUsMC0uNjdhMy4wNywzLjA3LDAsMCwxLC41NC02LjExLDMuMTUs''@;'; put 'put ''My4xNSwwLDAsMSwyLjIuODksOC4xNiw4LjE2LDAsMCwxLDEuNy0xLjA4LDUuMTMsNS4xMywwLDAsMC05LDMuMjcsNS4xLDUuMSwwLDAsMCw0LjcsNUE3LjQyLDcuNDIsMCwwLDEsMTAuNjYsMTAuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIvPlxuICA8''@;'; put 'put ''cGF0aCBkPSJNMjQuNzcsMS44M2E1LjE3LDUuMTcsMCwwLDAtMy42OSwxLjU1LDcuODcsNy44NywwLDAsMSwxLjksMSwzLjE0LDMuMTQsMCwwLDEsNC45MywyLjUyLDMuMDksMy4wOSwwLDAsMS0xLjc5LDIuNzcsNy4xNCw3LjE0LDAsMCwxLC4wNi45Myw3Ljg4LDcuODgsMCwwLDEtLjEsMS4y''@;'; put 'put ''LDUuMSw1LjEsMCwwLDAsMy44My00LjlBNS4xMiw1LjEyLDAsMCwwLDI0Ljc3LDEuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICBcbiAgPGVsbGlwc2UgY3g9IjE4IiBjeT0iMTEuMjgiIHJ4PSI0Ljc2IiByeT0iNC43IiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMC43OCwxMS43NWMuMTYsMCwuMzIsMCwuNDgsMCwwLS4xNSwwLS4yOCwwLS40M2E2LjcsNi43LDAsMCwxLDMuNzUtNiw0LjYyLDQuNjIsMCwxLDAtNC4yMSw2LjQ2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjQuNzYsMTEuMjhjMCwuMTUsMCwuMjgsMCwuNDMuMTYsMCwuMzIsMCwuNDgsMEE0LjU4LDQuNTgsMCwxLDAsMjEsNS4yOSw2LjcsNi43LDAsMCwxLDI0Ljc2LDExLjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIv''@;'; put 'put ''PlxuICA8cGF0aCBkPSJNMjIuMjksMTYuNDVhMjEuNDUsMjEuNDUsMCwwLDEsNS43MSwyLDIuNzEsMi43MSwwLDAsMSwuNjguNTNIMzRWMTUuNTZhLjcyLjcyLDAsMCwwLS4zOC0uNjQsMTgsMTgsMCwwLDAtOC40LTIuMDVsLS42NiwwQTYuNjYsNi42NiwwLDAsMSwyMi4yOSwxNi40NVoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTYuNTMsMjAuOTJBMi43NiwyLjc2LDAsMCwxLDgsMTguNDdhMjEuNDUsMjEuNDUsMCwwLDEsNS43MS0yLDYuNjYsNi42NiwwLDAsMS0yLjI3LTMuNTVsLS42NiwwYTE4LDE4LDAsMCwwLTguNCwyLjA1''@;'; put 'put ''LjcyLjcyLDAsMCwwLS4zOC42NFYyMkg2LjUzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIvPlxuICA8cmVjdCB4PSIyMS40NiIgeT0iMjYuNjkiIHdpZHRoPSI1Ljk2IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNiIv''@;'; put 'put ''PlxuICA8cGF0aCBkPSJNMzIuODEsMjEuMjZIMjUuOTR2LTFhMSwxLDAsMCwwLTIsMHYxSDIyVjE4LjQzQTIwLjE3LDIwLjE3LDAsMCwwLDE4LDE4YTE5LjI3LDE5LjI3LDAsMCwwLTkuMDYsMi4yMi43Ni43NiwwLDAsMC0uNDEuNjh2NS42MWg3LjExdjYuMDlhMSwxLDAsMCwwLDEsMUgzMi44''@;'; put 'put ''MWExLDEsMCwwLDAsMS0xVjIyLjI2QTEsMSwwLDAsMCwzMi44MSwyMS4yNlptLTEsMTAuMzZIMTcuNjRWMjMuMjZoNi4zdi45MWExLDEsMCwwLDAsMiwwdi0uOTFoNS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTciLz4nKSxoLkNsclNoYXBlRW1wbG95ZWU9KDAs''@;'; put 'put ''cy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE2LjQzLDE2LjY5YTcsNywwLDEsMSw3LTdBNyw3LDAsMCwxLDE2LjQzLDE2LjY5Wm0wLTExLjkyYTUsNSwwLDEsMCw1LDVBNSw1LDAsMCwwLDE2LjQzLDQuNzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxu''@;'; put 'put ''ICA8cGF0aCBkPSJNMjIsMTcuOUEyNS40MSwyNS40MSwwLDAsMCw1Ljg4LDE5LjU3YTQuMDYsNC4wNiwwLDAsMC0yLjMxLDMuNjhWMjkuMmExLDEsMCwxLDAsMiwwVjIzLjI1YTIsMiwwLDAsMSwxLjE2LTEuODYsMjIuOTEsMjIuOTEsMCwwLDEsOS43LTIuMTEsMjMuNTgsMjMuNTgsMCwwLDEs''@;'; put 'put ''NS41Ny42NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0IHg9IjIyLjE0IiB5PSIyNy40MSIgd2lkdGg9IjYuMTQiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBk''@;'; put 'put ''PSJNMzMuMTcsMjEuNDdIMjh2Mmg0LjE3djguMzdIMThWMjMuNDdoNi4zdi40MmExLDEsMCwwLDAsMiwwVjIwYTEsMSwwLDAsMC0yLDB2MS40N0gxN2ExLDEsMCwwLDAtMSwxVjMyLjg0YTEsMSwwLDAsMCwxLDFIMzMuMTdhMSwxLDAsMCwwLDEtMVYyMi40N0ExLDEsMCwwLDAsMzMuMTcsMjEu''@;'; put 'put ''NDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICBcbiAgPGNpcmNsZSBjeD0iMTYuODYiIGN5PSI5LjczIiByPSI2LjQ2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjIxIiB5PSIyOCIgd2lkdGg9''@;'; put 'put ''IjciIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xNSwzMHYzYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVYyM2ExLDEsMCwwLDAtMS0xSDI2VjIwLjUzYTEsMSwwLDAsMC0yLDBWMjJIMjJWMTguNDJBMzIu''@;'; put 'put ''MTIsMzIuMTIsMCwwLDAsMTYuODYsMThhMjYsMjYsMCwwLDAtMTEsMi4zOSwzLjI4LDMuMjgsMCwwLDAtMS44OCwzVjMwWm0xNywySDE3VjI0aDd2LjQyYTEsMSwwLDAsMCwyLDBWMjRoNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxoLkNsclNoYXBlRmFj''@;'; put 'put ''dG9yeT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNDcsNy4zN2ExLDEsMCwwLDAtMSwuMDZMMjMsMTMuNzdWOC4yNmExLDEsMCwwLDAtMS42NC0uNzdMMTMuNDgsMTRIMTBWNC42MmExLDEsMCwwLDAtLjc4LTFsLTQtLjlhMSwxLDAsMCwwLS44NS4yQTEsMSwwLDAsMCw0LDMuNzNW''@;'; put 'put ''MTRIM2ExLDEsMCwwLDAtMSwxVjMxYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY4LjI2QTEsMSwwLDAsMCwzMy40Nyw3LjM3Wk02LDVsMiwuNDRWMTRINlpNMzIsMzBINFYxNmg5LjgzYTEsMSwwLDAsMCwuNjQtLjIzTDIxLDEwLjM3djUuMjhhMSwxLDAsMCwwLDEuNTYuODNMMzIs''@;'; put 'put ''MTAuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cmVjdCB4PSI2IiB5PSIxNy45OSIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0iNiIgeT0iMjEu''@;'; put 'put ''OTkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjYiIHk9IjI1Ljk5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8''@;'; put 'put ''cmVjdCB4PSIxOSIgeT0iMTguOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxyZWN0IHg9IjE5IiB5PSIyNC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTYiLz5cbiAgPHJlY3QgeD0iMjMiIHk9IjE4Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cmVjdCB4PSIyMyIgeT0iMjQuOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gIDxyZWN0IHg9IjI3IiB5PSIxOC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiLz5cbiAgPHJlY3QgeD0iMjciIHk9IjI0Ljk5IiB3aWR0aD0iMiIgaGVp''@;'; put 'put ''Z2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0zMi40NSw4LjQ0LDIyLDE1LjNWOS41MWExLDEsMCwwLDAtMS42My0uNzhMMTQuMDcsMTRIMTBWNC4wNkw0LDIuNzFWMTRIMlYzMWExLDEsMCwwLDAsMSwxSDMzYTEs''@;'; put 'put ''MSwwLDAsMCwxLTFWOS4yN0ExLDEsMCwwLDAsMzIuNDUsOC40NFpNMTQsMjlINlYyN2g4Wm0wLTRINlYyM2g4Wm0wLTRINlYxOWg4Wm04LDhIMjBWMjZoMlptMC02SDIwVjIwaDJabTQsNkgyNFYyNmgyWm0wLTZIMjRWMjBoMlptNCw2SDI4VjI2aDJabTAtNkgyOFYyMGgyWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGguQ29tbWVyY2VTaGFwZXM9e2NhbGN1bGF0b3I6aC5DbHJTaGFwZUNhbGN1bGF0b3IsInBpZ2d5LWJhbmsiOmguQ2xyU2hhcGVQaWdneUJhbmssInNob3BwaW5nLWJhZyI6aC5DbHJTaGFwZVNob3BwaW5nQmFnLCJzaG9wcGluZy1j''@;'; put 'put ''YXJ0IjpoLkNsclNoYXBlU2hvcHBpbmdDYXJ0LHdhbGxldDpoLkNsclNoYXBlV2FsbGV0LHN0b3JlOmguQ2xyU2hhcGVTdG9yZSxldXJvOmguQ2xyU2hhcGVFdXJvLGRvbGxhcjpoLkNsclNoYXBlRG9sbGFyLHBlc286aC5DbHJTaGFwZVBlc28sImNyZWRpdC1jYXJkIjpoLkNsclNoYXBlQ3Jl''@;'; put 'put ''ZGl0Q2FyZCxiYW5rOmguQ2xyU2hhcGVCYW5rLCJkb2xsYXItYmlsbCI6aC5DbHJTaGFwZURvbGxhckJpbGwsImUtY2hlY2siOmguQ2xyU2hhcGVFQ2hlY2sscG91bmQ6aC5DbHJTaGFwZVBvdW5kLHJ1cGVlOmguQ2xyU2hhcGVSdXBlZSx3b246aC5DbHJTaGFwZVdvbix5ZW46aC5DbHJTaGFw''@;'; put 'put ''ZVllbixiaXRjb2luOmguQ2xyU2hhcGVCaXRjb2luLHJ1YmxlOmguQ2xyU2hhcGVSdWJsZSwiY29pbi1iYWciOmguQ2xyU2hhcGVDb2luQmFnLCJlbXBsb3llZS1ncm91cCI6aC5DbHJTaGFwZUVtcGxveWVlR3JvdXAsZW1wbG95ZWU6aC5DbHJTaGFwZUVtcGxveWVlLGZhY3Rvcnk6aC5DbHJT''@;'; put 'put ''aGFwZUZhY3Rvcnl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLkNvbW1lcmNlU2hhcGVzLCJzYXZpbmdzIiwoMCxjLmRlc2NyaXB0b3JDb25maWcpKGguQ29tbWVyY2VTaGFwZXNbInBpZ2d5LWJhbmsiXSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJp''@;'; put 'put ''dHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChoLkNvbW1lcmNlU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAg''@;'; put 'put ''ICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0''@;'; put 'put ''aW9uKGosaCx5KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGguQ29yZVNoYXBlcz1oLkNsclNoYXBlQXJyb3c9aC5DbHJTaGFwZVN0ZXBGb3J3YXJkMj1oLkNsclNoYXBlRXllSGlkZT1oLkNsclNoYXBlRXllPWguQ2xyU2hh''@;'; put 'put ''cGVFdmVudD1oLkNsclNoYXBlQ2FsZW5kYXI9aC5DbHJTaGFwZUFuZ2xlRG91YmxlPWguQ2xyU2hhcGVWaWV3Q29sdW1ucz1oLkNsclNoYXBlU2VhcmNoPWguQ2xyU2hhcGVWbUJ1Zz1oLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT1oLkNsclNoYXBlRmlsdGVyR3JpZD1oLkNsclNoYXBlRWxs''@;'; put 'put ''aXBzaXNWZXJ0aWNhbD1oLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPWguQ2xyU2hhcGVDbG91ZD1oLkNsclNoYXBlSW1hZ2U9aC5DbHJTaGFwZUJlbGw9aC5DbHJTaGFwZUZvbGRlck9wZW49aC5DbHJTaGFwZUZvbGRlcj1oLkNsclNoYXBlQW5nbGU9aC5DbHJTaGFwZVVzZXI9aC5DbHJT''@;'; put 'put ''aGFwZUJhcnM9aC5DbHJTaGFwZUhlbHBJbmZvPWguQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9aC5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9aC5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZD1oLkNsclNoYXBlSW5mb1N0YW5kYXJkPWguQ2xyU2hhcGVJbmZvQ2lyY2xlPWguQ2xyU2hhcGVDaGVja0Np''@;'; put 'put ''cmNsZT1oLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9aC5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9aC5DbHJTaGFwZVRpbWVzPWguQ2xyU2hhcGVDaGVjaz1oLkNsclNoYXBlQ29nPWguQ2xyU2hhcGVIb21lPWguQ2xyU2hhcGVVbmtub3duU3RhdHVzPXZvaWQgMDt2YXIgYz15KAov''@;'; put 'put ''KiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIikscz15KAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJh''@;'; put 'put ''dG9yLnRzIik7aC5DbHJTaGFwZVVua25vd25TdGF0dXM9KDAscy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE3LjU4IiBjeT0iMjYuMjMiIHI9IjEuNCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjQuNywxM2E1LjE4LDUuMTgsMCwwLDAtMi4xNi0zLjU2LDcuMjYsNy4yNiwwLDAsMC01LjcxLTEuMDlBMTEuMzQsMTEuMzQsMCwwLDAsMTIsMTAuNDQsMSwxLDAsMSwwLDEzLjI2LDEyYTkuMzIsOS4zMiwwLDAsMSwzLjk0''@;'; put 'put ''LTEuNzIsNS4yOSw1LjI5LDAsMCwxLDQuMTYuNzQsMy4yMSwzLjIxLDAsMCwxLDEuMzUsMi4xOWMuMzMsMi42OS0zLjE5LDMuNzUtNS4zMiw0LjE0bC0uODIuMTV2NC4zNmExLDEsMCwwLDAsMiwwVjE5LjE3QzI0LjYxLDE3Ljc5LDI0Ljg4LDE0LjQxLDI0LjcsMTNaIi8+JyksaC5DbHJTaGFw''@;'; put 'put ''ZUhvbWU9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMy43MSwxNy4yOWwtMTUtMTVhMSwxLDAsMCwwLTEuNDEsMGwtMTUsMTVhMSwxLDAsMCwwLDEuNDEsMS40MUwxOCw0LjQxLDMyLjI5LDE4LjcxYTEsMSww''@;'; put 'put ''LDAsMCwxLjQxLTEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOCwzMmgtNVYyMkgxM1YzMkg4VjE4TDYsMjBWMzJhMiwyLDAsMCwwLDIsMmg3VjI0aDZWMzRoN2EyLDIsMCwwLDAsMi0yVjE5Ljc2''@;'; put 'put ''bC0yLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMzLDE5YTEsMSwwLDAsMS0uNzEtLjI5TDE4LDQuNDEsMy43MSwxOC43MWExLDEsMCwwLDEtMS40MS0xLjQxbDE1LTE1YTEsMSwwLDAsMSwxLjQxLDBsMTUs''@;'; put 'put ''MTVBMSwxLDAsMCwxLDMzLDE5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOCw3Ljc5LDYsMTkuODNWMzJhMiwyLDAsMCwwLDIsMmg3VjI0aDZWMzRoN2EyLDIsMCwwLDAsMi0yVjE5Ljc2WiIvPicpLGguQ2xy''@;'; put 'put ''U2hhcGVDb2c9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOC4xLDExYy0zLjksMC03LDMuMS03LDdzMy4xLDcsNyw3YzMuOSwwLDctMy4xLDctN1MyMiwxMSwxOC4xLDExeiBNMTguMSwyM2MtMi44LDAtNS0y''@;'; put 'put ''LjItNS01czIuMi01LDUtNWMyLjgsMCw1LDIuMiw1LDVTMjAuOSwyMywxOC4xLDIzeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuOCwxNC43TDMwLDEzLjhsLTAuNi0xLjVsMS40LTIuNmMwLjMtMC42''@;'; put 'put ''LDAuMi0xLjQtMC4zLTEuOWwtMi40LTIuNGMtMC41LTAuNS0xLjMtMC42LTEuOS0wLjNsLTIuNiwxLjRsLTEuNS0wLjZsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJD''@;'; put 'put ''OS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZj''@;'; put 'put ''LTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEu''@;'; put 'put ''NCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3ogTTMyLDE5LjRsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0w''@;'; put 'put ''LjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTIt''@;'; put 'put ''MmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAu''@;'; put 'put ''NS0wLjJMMTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuNCwwLjUsMi4xLDAuOWwwLjUsMC4zbDMuMy0xLjhsMiwybC0xLjgsMy4zbDAuMywwLjVjMC40LDAuNywwLjcsMS40LDAuOSwyLjFsMC4xLDAuNWwzLjYsMS4xVjE5LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEuMSwxOGMwLDMuOSwzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03cy0zLjEtNy03LTdDMTQuMiwxMSwxMS4xLDE0LjEsMTEuMSwxOHogTTIzLjEsMThjMCwyLjgtMi4yLDUtNSw1''@;'; put 'put ''Yy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01QzIwLjksMTMsMjMuMSwxNS4yLDIzLjEsMTh6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuOCwxNC43TDMwLDEzLjhsLTAu''@;'; put 'put ''MS0wLjNjLTAuOCwwLTEuNi0wLjItMi40LTAuNGMwLjMsMC42LDAuNiwxLjMsMC44LDEuOWwwLjEsMC41bDMuNiwxLjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0x''@;'; put 'put ''LjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhs''@;'; put 'put ''My40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNUwyMSw3LjdjMC43LDAuMiwxLjMsMC41LDEuOSwwLjhjLTAuMy0wLjgt''@;'; put 'put ''MC40LTEuNi0wLjQtMi41bC0wLjQtMC4ybC0wLjktMi44QzIxLDIuNSwyMC40LDIsMTkuNywyaC0zLjRjLTAuNywwLTEuMywwLjUtMS40LDEuMkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUsNy45LDUuNUw1LjUsNy45QzUsOC40LDQuOSw5LjIs''@;'; put 'put ''NS4yLDkuOGwxLjMsMi41Yy0wLjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwxNS42LDIsMTYuM3YzLjRjMCwwLjcsMC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwxLjQsMC4zLDEuOWwyLjQsMi40YzAuNSwwLjUsMS4z''@;'; put 'put ''LDAuNiwxLjksMC4zbDIuNi0xLjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4xaDMuNGMwLjcsMCwxLjMtMC41LDEuNS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNsMi40LTIuNGMwLjUtMC41LDAuNi0xLjMsMC4zLTEu''@;'; put 'put ''OWwtMS40LTIuNmwwLjYtMS41bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwxNS42LDMzLjUsMTQuOSwzMi44LDE0Ljd6Ii8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjcsMTUuNGgtNS4zdjAuMWwzLjYsMS4xdjIuOGwtMy42''@;'; put 'put ''LDEuMUwyOC4zLDIxYy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAu''@;'; put 'put ''OWwtMC41LTAuM2wtMy4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43''@;'; put 'put ''LTAuNCwxLjQtMC43LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjRsMS40LTIuM2wtMC42LTJDMjEsMi40LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3''@;'; put 'put ''LjksNS41TDUuNSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEu''@;'; put 'put ''NCwwLjMsMS45bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wy''@;'; put 'put ''LjQtMi40YzAuNS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE2LDMzLjksMTUuNywzMy43LDE1LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xOC4xLDIzYy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzAuMiwwLDAuNSwwLDAuNywwLjFjLTAuMi0wLjYtMC4zLTEuMy0wLjItMmgtMC41Yy0zLjksMC03LDMuMS03LDdjMCwzLjksMy4xLDcsNyw3YzMuOSwwLDctMy4x''@;'; put 'put ''LDctN2MwLTAuOS0wLjItMS44LTAuNS0yLjZoLTIuMmMwLjUsMC44LDAuNywxLjYsMC43LDIuNUMyMy4xLDIwLjgsMjAuOSwyMywxOC4xLDIzeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44''@;'; put 'put ''LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTExLjY1LDExLjY1LDAsMCwwLS45NS0yLjMzbDEuNjQtMy4wN2EuNjEuNjEsMCww''@;'; put 'put ''LDAtLjExLS43MkwyNy40MSw2LjJhLjYxLjYxLDAsMCwwLS43Mi0uMTFMMjMuNjQsNy43MmExMS42MiwxMS42MiwwLDAsMC0yLjM2LTFsLTEtMy4zMUEuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFs''@;'; put 'put ''LTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAs''@;'; put 'put ''MCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhh''@;'; put 'put ''MTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42''@;'; put 'put ''MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIuNTcs''@;'; put 'put ''MTUuNzJsLTMuMzUtMWExMi4xMiwxMi4xMiwwLDAsMC0uNDctMS4zMiw3LjQ5LDcuNDksMCwwLDEtNi4xNC02LjE2LDExLjgyLDExLjgyLDAsMCwwLTEuMzMtLjQ4bC0xLTMuMzFBLjYxLjYxLDAsMCwwLDE5LjY5LDNIMTYuMzFhLjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEu''@;'; put 'put ''NjMsMCwwLDAtMi4zOCwxbC0zLTEuNjJhLjYxLjYxLDAsMCwwLS43Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAtLjExLjcybDEuNjIsM2ExMS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEsMCwwLDAtLjQzLjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFh''@;'; put 'put ''MTEuNjIsMTEuNjIsMCwwLDAsMSwyLjMzTDYuMDksMjYuNjlhLjYxLjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5LjhhLjYxLjYxLDAsMCwwLC43Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0bDEsMy4zN2EuNjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCww''@;'; put 'put ''LC41OC0uNDNsMS0zLjM4YTExLjYzLDExLjYzLDAsMCwwLDIuMjgtLjk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAsLjcyLS4xMWwyLjM5LTIuMzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYzLDExLjYzLDAsMCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQz''@;'; put 'put ''LS41OFYxNi4zMUEuNjEuNjEsMCwwLDAsMzIuNTcsMTUuNzJaTTE4LDIzLjVBNS41LDUuNSwwLDEsMSwyMy41LDE4LDUuNSw1LjUsMCwwLDEsMTgsMjMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMyLjU3LDE1LjcyLDMxLjUsMTUuNEgyMi44NUE1LjUsNS41LDAs''@;'; put 'put ''MSwxLDE4LDEyLjVhNS41Myw1LjUzLDAsMCwxLC42NSwwQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDIuMDktMy42Mi0uODYtMi44M0EuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEu''@;'; put 'put ''NjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNM''@;'; put 'put ''Ni4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEu''@;'; put 'put ''NjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwz''@;'; put 'put ''Mi41NywxNS43MloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksaC5DbHJTaGFwZUNoZWNrPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTMuNzIsMjcuNjks''@;'; put 'put ''My4yOSwxNy4yN2ExLDEsMCwwLDEsMS40MS0xLjQxbDksOUwzMS4yOSw3LjI5YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+JyksaC5DbHJTaGFwZVRpbWVzPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTkuNDEs''@;'; put 'put ''MThsOC4yOS04LjI5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTgsMTYuNTksOS43MSw4LjI5QTEsMSwwLDAsMCw4LjI5LDkuNzFMMTYuNTksMTgsOC4yOSwyNi4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDguMjksOC4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPicpLGguQ2xyU2hh''@;'; put 'put ''cGVFeGNsYW1hdGlvblRyaWFuZ2xlPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjEuMzJhMS4zLDEuMywwLDAsMCwxLjMtMS4zVjE0YTEuMywxLjMsMCwxLDAtMi42LDB2NkExLjMsMS4zLDAsMCwwLDE4''@;'; put 'put ''LDIxLjMyWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGN4PSIxNy45NSIgY3k9IjI0LjI3IiByPSIxLjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMyIgZD0iTTMwLjMzLDI1LjU0LDIwLjU5LDcuNmEzLDMsMCwwLDAtNS4yNywwTDUuNTcsMjUuNTRBMywzLDAsMCwwLDguMjEsMzBIMjcuNjlhMywzLDAsMCwwLDIuNjQtNC40M1ptLTEuNzgsMS45NGExLDEsMCwwLDEtLjg2LjQ5SDguMjFhMSwxLDAsMCwxLS44OC0xLjQ4TDE3''@;'; put 'put ''LjA3LDguNTVhMSwxLDAsMCwxLDEuNzYsMGw5Ljc0LDE3Ljk0QTEsMSwwLDAsMSwyOC41NSwyNy40OFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3''@;'; put 'put ''LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWk0xNi40NiwxMi43NGExLjQ5LDEuNDksMCwwLDEsMywwdjYuODlhMS40OSwxLjQ5LDAsMSwxLTMsMFpNMTgsMjYuMjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCww''@;'; put 'put ''LDEsMTgsMjYuMjVaIi8+JyksaC5DbHJTaGFwZUV4Y2xhbWF0aW9uQ2lyY2xlPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEw''@;'; put 'put ''LDEwLDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjAuMDdhMS4zLDEuMywwLDAsMS0xLjMtMS4zdi02YTEuMywxLjMsMCwxLDEsMi42LDB2NkEx''@;'; put 'put ''LjMsMS4zLDAsMCwxLDE4LDIwLjA3WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGN4PSIxNy45NSIgY3k9IjIzLjAyIiByPSIxLjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMS40OSw2YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNS41YTEuNzIsMS43MiwwLDEsMSwxLjcyLTEuNzJBMS43MiwxLjcy''@;'; put 'put ''LDAsMCwxLDE4LDI1LjVaIi8+JyksaC5DbHJTaGFwZUNoZWNrQ2lyY2xlPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEwLDEw''@;'; put 'put ''LDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTYuMzQsMjMuNzRsLTUtNWExLDEsMCwwLDEsMS40MS0xLjQxbDMuNTksMy41OSw2Ljc4LTYuNzhhMSwx''@;'; put 'put ''LDAsMCwxLDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsMThBMTIsMTIsMCwxLDEsMTgsNiwxMiwxMiwwLDAsMSwzMCwxOFptLTQuNzctMi4xNmExLjQsMS40LDAsMCwwLTItMmwtNi43Nyw2''@;'; put 'put ''Ljc3TDEzLDE3LjE2YTEuNCwxLjQsMCwwLDAtMiwybDUuNDUsNS40NVoiLz4nKSxoLkNsclNoYXBlSW5mb0NpcmNsZT0oMCxzLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAgY3g9IjE3LjkzIiBjeT0iMTEuOSIgcj0iMS40''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiICBkPSJNMjEsMjNIMTlWMTVIMTZhMSwxLDAsMCwwLDAsMmgxdjZIMTVhMSwxLDAsMSwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiICBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEwLDEwLDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0yLDUuMTVhMiwyLDAsMSwxLDIsMkEyLDIsMCwwLDEsMTUuOSwxMS4xNVpNMjMsMjRhMSwxLDAsMCwxLTEsMUgxNWExLDEsMCwxLDEsMC0yaDJWMTdI''@;'; put 'put ''MTZhMSwxLDAsMCwxLDAtMmg0djhoMkExLDEsMCwwLDEsMjMsMjRaIi8+JyksaC5DbHJTaGFwZUluZm9TdGFuZGFyZD0oMCxzLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuOTciIGN5PSIxMC40NSIgcj0iMS40''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yMSwyNUgxOVYxNC4xSDE2YTEsMSwwLDAsMCwwLDJoMVYyNUgxNWExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwyLjFabS0uMSw1LjI4YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDE3LjksNy4zOFptMy42LDIxLjI1aC03YTEuNCwxLjQsMCwxLDEsMC0yLjhoMi4x''@;'; put 'put ''di05LjJIMTVhMS40LDEuNCwwLDEsMSwwLTIuOGg0LjR2MTJoMi4xYTEuNCwxLjQsMCwxLDEsMCwyLjhaIi8+JyksaC5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4''@;'; put 'put ''LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDEyLjFhMSwx''@;'; put 'put ''LDAsMCwwLTEuNDEsMEwxNS40OSwyMy4xNWwtNi02QTEsMSwwLDAsMCw4LDE4LjUzTDE1LjQ5LDI2LDI4LDEzLjUyQTEsMSwwLDAsMCwyOCwxMi4xWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2''@;'; put 'put ''LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI4LjQ1LDEyLjYzLDE1LjMxLDI1Ljc2LDcuNTUsMThhMS40LDEuNCwwLDAsMSwyLTJsNS43OCw1Ljc4TDI2LjQ3LDEwLjY1YTEuNCwxLjQsMCwxLDEsMiwyWiIvPicpLGguQ2xyU2hhcGVFcnJvclN0YW5kYXJkPSgwLHMuY2xySWNvblNW''@;'; put 'put ''RykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxOCIgY3k9IjI2LjA2IiByPSIxLjMzIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMi42MWEx''@;'; put 'put ''LDEsMCwwLDEtMS0xdi0xMmExLDEsMCwxLDEsMiwwdjEyQTEsMSwwLDAsMSwxOCwyMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4''@;'; put 'put ''LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwyLjFaTTE2LjYs''@;'; put 'put ''OC44YTEuNCwxLjQsMCwwLDEsMi44LDB2MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjguNmExLjgsMS44LDAsMSwxLDEuOC0xLjhBMS44LDEuOCwwLDAsMSwxOCwyOC42WiIvPicpLGguQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9KDAscy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEs''@;'; put 'put ''MSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTUuMDYyMDc4MiwxLjY4MTE5NiBDMTUuNjI5ODgxOSwwLjY0OTI2NjM1NSAxNi43MTA5MDkxLDAu''@;'; put 'put ''MDEwMjIxOTM5NiAxNy44ODUsMC4wMTAyMjE5Mzk2IEMxOS4wNTkwOTA5LDAuMDEwMjIxOTM5NiAyMC4xNDAxMTgxLDAuNjQ5MjY2MzU1IDIwLjcwODY0MzMsMS42ODI1MjEyOSBMMzQuNTk4NjQ0LDI3LjI0MjUyMjUgQzM1LjE0MDc3NDYsMjguMjQwMTM5NyAzNS4xMTc0MzQ1LDI5LjQ0OTUz''@;'; put 'put ''NzMgMzQuNTM3MjE2MSwzMC40MjU0OTQzIEMzMy45NTY5OTc3LDMxLjQwMTQ1MTQgMzIuOTA1NjcxLDMxLjk5OTY5ODQgMzEuNzcsMzIgTDQuMDIyMzkzMjMsMzEuOTk5NzQ5MiBDMi44NzQwOTAwOSwzMi4wMjU0Njk5IDEuNzk5MDI4NDMsMzEuNDM3NTc1MyAxLjIwMTA2MzM1LDMwLjQ1Njkx''@;'; put 'put ''MjYgQzAuNjAzMDk4MjY1LDI5LjQ3NjI0OTkgMC41NzI3Nzc4OTksMjguMjUxMzE3OSAxLjEyMjA3ODE4LDI3LjI0MTE5NiBMMTUuMDYyMDc4MiwxLjY4MTE5NiBaIE0yLjg3ODUwNzY3LDI4LjE5NzcyODIgQzIuNjcwNjA5NjYsMjguNTgwMDM3NiAyLjY4MjA5NzUsMjkuMDQ0MTQyMyAyLjkw''@;'; put 'put ''ODY1NTcsMjkuNDE1Njk3NyBDMy4xMzUyMTM5LDI5Ljc4NzI1MzIgMy41NDI1MzU0LDMwLjAwOTk5NTkgNCwzMCBMMzEuNzY5NzM0NCwzMCBDMzIuMTk5OTE5MSwyOS45OTk4ODU4IDMyLjU5ODI0NzgsMjkuNzczMjIwOCAzMi44MTgwODIxLDI5LjQwMzQ0ODIgQzMzLjAzNzkxNjQsMjkuMDMz''@;'; put 'put ''Njc1NyAzMy4wNDY3NTk1LDI4LjU3NTQ1NjcgMzIuODQxMzU2NywyOC4xOTc0Nzg3IEwxOC45NTM4NzM5LDIuNjQyMDgxOTUgQzE4LjczOTQyMzYsMi4yNTIzNDQzNiAxOC4zMjk4NDE5LDIuMDEwMjIxOTQgMTcuODg1LDIuMDEwMjIxOTQgQzE3LjQ0MDY4ODksMi4wMTAyMjE5NCAxNy4wMzE1''@;'; put 'put ''NTM4LDIuMjUxNzY2OTIgMTYuODE2ODk0NiwyLjY0MDY4NzUzIEwyLjg3ODUwNzY3LDI4LjE5NzcyODIgWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC42LDI5LjIxLDIwLjcxLDMuNjVhMy4yMiwzLjIyLDAs''@;'; put 'put ''MCwwLTUuNjYsMEwxLjE3LDI5LjIxQTMuMjIsMy4yMiwwLDAsMCw0LDM0SDMxLjc3YTMuMjIsMy4yMiwwLDAsMCwyLjgzLTQuNzVaTTE2LjYsMTBhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOS44NWExLjgsMS44LDAsMSwxLDEuOC0xLjhBMS44LDEu''@;'; put 'put ''OCwwLDAsMSwxOCwyOS44NVoiLz4nKSxoLkNsclNoYXBlSGVscEluZm89KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI1LjM5LDI1LjQ1YTEsMSwwLDAsMC0xLjM4LjI5Yy0xLjQxLDIuMTYtNCw0LjgxLTYuMzEsNS43cy00LjEyLjU3LTQuODQsMGMtLjMxLS4yNy0xLjEyLTEtLjQzLTMu''@;'; put 'put ''NDkuNDYtMS42NiwzLjMyLTkuNDgsNC0xMS4zOGwtMi4xOC4yOGMtLjY5LDEuODYtMy4yOSw4Ljg0LTMuNzYsMTAuNTgtLjY4LDIuNDktLjM0LDQuMywxLjA5LDUuNTZBNS41OSw1LjU5LDAsMCwwLDE1LDM0YTkuNTMsOS41MywwLDAsMCwzLjQ1LS43YzIuNzktMS4wOSw1LjcyLTQuMTIsNy4y''@;'; put 'put ''Ni02LjQ3QTEsMSwwLDAsMCwyNS4zOSwyNS40NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjMsMTFhNC41LDQuNSwwLDEsMC00LjUtNC41QTQuNSw0LjUsMCwwLDAsMTkuMywxMVptMC03YTIuNSwyLjUs''@;'; put 'put ''MCwxLDEtMi41LDIuNUEyLjUsMi41LDAsMCwxLDE5LjMsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjgxLDE1Yy4wNiwwLDYuMjctLjgyLDcuNzMtMSwuNjUtLjEsMS4xNCwwLDEuMy4xNXMuMjEuOC0u''@;'; put 'put ''MDcsMS42OGMtLjYxLDEuODYtMy42OSwxMS00LjU5LDEzLjcxYTgsOCwwLDAsMCwxLjI5LS4zOCw3LjMyLDcuMzIsMCwwLDAsMS4xNS0uNkMxOS44NSwyNSwyMi4xNSwxOC4xLDIyLjY3LDE2LjUycy4zOS0yLjc4LS4zLTMuNmEzLjE2LDMuMTYsMCwwLDAtMy4wOC0uODNjLTEuNDMuMTUtNy40''@;'; put 'put ''Ny45NC03LjczLDFhMSwxLDAsMCwwLC4yNiwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyMC43NSIgY3k9IjYiIHI9IjQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjQuODQsMjYuMjNhMSwxLDAsMCwwLTEuNC4yOSwxNi42LDE2LjYsMCwwLDEtMy41MSwzLjc3Yy0uMzMuMjUtMS41NiwxLjItMi4wOCwxLS4zNi0uMTEtLjE1LS44Mi0uMDgtMS4xMmwuNTMtMS41N2MuMjItLjY0LDQuMDUtMTIsNC40Ny0xMy4zLjYyLTEu''@;'; put 'put ''OS4zNS0zLjc3LTIuNDgtMy4zMi0uNzcuMDgtOC41OCwxLjA5LTguNzIsMS4xYTEsMSwwLDAsMCwuMTMsMnMzLS4zOSwzLjMzLS40MmEuODguODgsMCwwLDEsLjg1LjQ0LDIuNDcsMi40NywwLDAsMS0uMDcsMS43MWMtLjI2LDEtNC4zNywxMi41OC00LjUsMTMuMjVhMi43OCwyLjc4LDAsMCww''@;'; put 'put ''LDEuMTgsMyw1LDUsMCwwLDAsMy4wOC44M2gwYTguNTMsOC41MywwLDAsMCwzLjA5LS42MmMyLjQ5LTEsNS4wOS0zLjY2LDYuNDYtNS43NUExLDEsMCwwLDAsMjQuODQsMjYuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGguQ2xyU2hhcGVCYXJzPSgw''@;'; put 'put ''LHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMjlINGExLDEsMCwwLDEsMC0ySDMyYTEsMSwwLDAsMSwwLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTIiIGQ9Ik0zMiwxOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTMyLDlINEExLDEsMCwwLDEsNCw3SDMyYTEsMSwwLDAsMSww''@;'; put 'put ''LDJaIi8+JyksaC5DbHJTaGFwZVVzZXI9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDE3YTcsNywwLDEsMC03LTdBNyw3LDAsMCwwLDE4LDE3Wk0xOCw1YTUsNSwwLDEsMS01LDVBNSw1LDAsMCwxLDE4LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUu''@;'; put 'put ''MTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTE4LDE3YTcsNywwLDAsMCw0LjQ1LTEuNmgtLjIyQTMuNjgsMy42OCwwLDAsMSwyMCwxNC42YTUsNSwwLDEsMSwxLjI0LTguNDJsMS0xLjc2QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVy''@;'; put 'put ''dGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCww''@;'; put 'put ''LDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgs''@;'; put 'put ''MTdhNyw3LDAsMCwwLDYuODUtNS41Niw3LjQsNy40LDAsMCwxLTIuMjQtNi42OUE3LDcsMCwxLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAs''@;'; put 'put ''MC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxMCIgcj0iNyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwx''@;'; put 'put ''LjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcs''@;'; put 'put ''NywwLDAsMCw0LjQ1LTEuNmgtLjIyQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDMuMTYtNS40N0E3LDcsMCwxLDAsMTgsMTdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEu''@;'; put 'put ''MTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEsMjQuNTJhMTcuMTYsMTcuMTYsMCwwLDAtMjUuMjIsMCwxLjUxLDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCww''@;'; put 'put ''LDMwLjYxLDI0LjUyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDYuODUtNS41Niw3LjQsNy40LDAsMCwxLTIuMjQtNi42OUE3LDcsMCwxLDAsMTgsMTdaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdl''@;'; put 'put ''IiAvPicpLGguQ2xyU2hhcGVBbmdsZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI5LjUyLDIyLjUyLDE4LDEwLjYsNi40OCwyMi41MmExLjcsMS43LDAsMCwwLDIuNDUsMi4zNkwxOCwxNS40OWw5LjA4LDku''@;'; put 'put ''MzlhMS43LDEuNywwLDAsMCwyLjQ1LTIuMzZaIi8+JyksaC5DbHJTaGFwZUZvbGRlcj0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIs''@;'; put 'put ''MiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMCw5Wm0wLDIwSDZWMTNoNy4zMWEyLDIsMCwwLDAsMi0ySDZWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxSDMwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVWMjlINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoOC41MWE3LjUsNy41LDAsMCwxLTEuMjktMkgxNi40MkwxNC4x''@;'; put 'put ''MSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMwLDE1LjRWMjlINlYx''@;'; put 'put ''M2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBh''@;'; put 'put ''MiwyLDAsMCwwLDItMlYxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMs''@;'; put 'put ''MTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEy''@;'; put 'put ''LDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMCw5Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIyLjIzLDE1LjRBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFpNNiwx''@;'; put 'put ''MVY3aDYuNDlsMi43Miw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42''@;'; put 'put ''OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcu''@;'; put 'put ''NSwwLDAsMSwyMy4xMyw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVpNNiwxMVY3aDYuNDlsMi43Miw0WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxoLkNsclNoYXBlRm9sZGVyT3Blbj0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMmEyLDIs''@;'; put 'put ''MCwwLDAtMi0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0Wk0yOS41NSwyOUg2Ljls''@;'; put 'put ''My44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNEgzMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNI''@;'; put 'put ''MTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoOC41MmE3LjQ5LDcuNDksMCwwLDEtMS4yOS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3''@;'; put 'put ''VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0Wk0yOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNEgzMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNGgtLjNMMjkuNTUsMjlINi45bDMuODgtMTMuODFhLjY2LjY2LDAsMCwxLC4zOC0uMjRoOS40MkEzLjY3LDMuNjcsMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAsMCwxLS4yNi0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUs''@;'; put 'put ''MS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNyww''@;'; put 'put ''LDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAsMCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEs''@;'; put 'put ''MCwwLDAsLjgxLjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIs''@;'; put 'put ''MTMuNzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDExLjE3''@;'; put 'put ''YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCww''@;'; put 'put ''LDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xYTEuNjgsMS42OCwwLDAsMCwuMDctLjMyQTMuNjcsMy42NywwLDAsMSwzMy42OCwxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4x''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAs''@;'; put 'put ''MCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSwwLDAsMS0xLjMxLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwx''@;'; put 'put ''LDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0i''@;'; put 'put ''NSIvPicpLGguQ2xyU2hhcGVCZWxsPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuNTEsMjcuODNBMTQuNCwxNC40LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEw''@;'; put 'put ''LjgxLDEwLjgxLDAsMCwwLDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYx''@;'; put 'put ''LjM2YTEsMSwwLDAsMCwxLDFoMjcuOGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1pNNS4xMywyOC45NGExNi4xNywxNi4xNywwLDAsMCwyLjQ0LTMsMTQuMjQsMTQuMjQsMCwwLDAsMS42NS01Ljg1VjE1LjE1YTguNzQsOC43NCwwLDEsMSwxNy40NywwdjQuOTRh''@;'; put 'put ''MTQuMjQsMTQuMjQsMCwwLDAsMS42NSw1Ljg1LDE2LjE3LDE2LjE3LDAsMCwwLDIuNDQsM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDM0LjI4QTIuNjcsMi42NywwLDAsMCwyMC41OCwzMkgxNS4z''@;'; put 'put ''MkEyLjY3LDIuNjcsMCwwLDAsMTgsMzQuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42''@;'; put 'put ''NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1''@;'; put 'put ''LTQuODFWMTUuMTVhMTAuOTIsMTAuOTIsMCwwLDAtLjE2LTEuNzksNy40NCw3LjQ0LDAsMCwxLTIuMjQtLjg0LDguODksOC44OSwwLDAsMSwuNCwyLjY0djQuOTRhMTQuMjQsMTQuMjQsMCwwLDAsMS42NSw1Ljg1LDE2LjE3LDE2LjE3LDAsMCwwLDIuNDQsM0g1LjEzYTE2LjE3LDE2LjE3LDAs''@;'; put 'put ''MCwwLDIuNDQtMywxNC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVBOC44LDguOCwwLDAsMSwxOCw2LjMxYTguNjEsOC42MSwwLDAsMSw0Ljc2LDEuNDRBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41OCwxMC41OCwwLDAsMC0zLjMyLTFWMy4xMWEx''@;'; put 'put ''LjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzLDEsMSwwLDAsMC0uMzQuNzV2MS4zNmExLDEsMCwwLDAsMSwxaDI3LjhhMSwxLDAsMCww''@;'; put 'put ''LDEtMVYyOC41OEExLDEsMCwwLDAsMzIuNTEsMjcuODNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuODUsMjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNUExMC44MSwxMC44MSwwLDAsMCwxOS4yMSw0LjRW''@;'; put 'put ''My4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xNS4zMiwzMmEyLjY1LDIuNjUsMCwwLDAsNS4yNSwwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgs''@;'; put 'put ''MzQuMjhBMi42NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjg1LDI4LjEzbC0uMzQt''@;'; put 'put ''LjNBMTQuMzcsMTQuMzcsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVhMTAuOTIsMTAuOTIsMCwwLDAtLjE2LTEuNzlBNy41LDcuNSwwLDAsMSwyMi41LDZjMC0uMjEsMC0uNDIsMC0uNjNhMTAuNTcsMTAuNTcsMCwwLDAtMy4zMi0xVjMuMTFhMS4zMywx''@;'; put 'put ''LjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45M2wtLjM0LjN2Mi44MkgzMi44NVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksaC5DbHJTaGFwZUltYWdlPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCwzMFY2SDMyVjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjkyLDE0YTMsMywwLDEsMC0zLTNBMywzLDAsMCwwLDguOTIsMTRabTAtNC42''@;'; put 'put ''QTEuNiwxLjYsMCwxLDEsNy4zMywxMSwxLjYsMS42LDAsMCwxLDguOTIsOS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNzgsMTUuMzdsLTUuNCw1LjQtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45Miwy''@;'; put 'put ''Mi45djIuODNsNi43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFBMSwxLDAsMCwwLDIyLjc4LDE1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0xMS45MywxMWEzLDMsMCwxLDAtMywzQTMsMywwLDAsMCwxMS45MywxMVptLTQuNiwwYTEuNiwxLjYsMCwxLDEsMS42LDEuNkExLjYsMS42LDAsMCwxLDcuMzMsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0xNy4zOCwyMC43N2wtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFhMSwxLDAsMCwwLTEuNDEsMFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjMwSDRWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEy''@;'; put 'put ''LjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAs''@;'; put 'put ''MCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4''@;'; put 'put ''LjkyLDhaTTYsMjdWMjIuOWw2LTYuMDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwxLjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJh''@;'; put 'put ''ZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGguQ2xyU2hhcGVDbG91ZD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE0LDMzSDEwLjYyQzUuNjcsMzMsMSwyOC4xOSwxLDIzLjFhMTAsMTAsMCwwLDEsOC05Ljc1LDEwLjE5LDEwLjE5LDAsMCwxLDIwLjMzLDEuMDZBMTAuMDcsMTAuMDcsMCwwLDEsMjksMTYuNjZhOC4yOSw4LjI5''@;'; put 'put ''LDAsMCwxLDYsOEMzNSwyOS4xLDMxLjMzLDMzLDI3LjE0LDMzWk0xOS4wOSw2LjIzYTguMjQsOC4yNCwwLDAsMC04LjE5LDhsMCwuODctLjg2LjFBNy45NCw3Ljk0LDAsMCwwLDMsMjMuMWMwLDQsMy43Nyw3LjksNy42Miw3LjlIMjcuMTRDMzAuMjEsMzEsMzMsMjgsMzMsMjQuNjVhNi4zMSw2''@;'; put 'put ''LjMxLDAsMCwwLTUuMzctNi4yNmwtMS4xOC0uMTguMzktMS4xM0E4LjE4LDguMTgsMCwwLDAsMTkuMDksNi4yM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOSwxNi42NmEx''@;'; put 'put ''MC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42NSwwLTFhNy40NSw3LjQ1LDAsMCwxLTIuMS0uNTQsOCw4LDAsMCwxLS4zLDQuMTZsLS4zOSwxLjEzLDEuMTguMThhNi4zMSw2LjMxLDAsMCwxLDUuMzcsNi4yNkMzMi45NSwyOCwzMC4xNiwzMSwyNy4wOSwzMUgxMC41N2MtMy44''@;'; put 'put ''NCwwLTcuNjItMy45MS03LjYyLTcuOWE3Ljk0LDcuOTQsMCwwLDEsNy03Ljg5bC44Ni0uMSwwLS44N2E4LjI0LDguMjQsMCwwLDEsOC4xOS04QTguMTMsOC4xMywwLDAsMSwyMi41OCw3YTcuNTMsNy41MywwLDAsMS0uMDgtMSw3LjUxLDcuNTEsMCwwLDEsLjA5LTEuMTJBMTAuMTMsMTAuMTMs''@;'; put 'put ''MCwwLDAsMTksNC4yMywxMC4yNiwxMC4yNiwwLDAsMCw4LjkxLDEzLjM2YTEwLDEwLDAsMCwwLTgsOS43NWMwLDUuMDksNC42Nyw5LjksOS42Miw5LjlIMjcuMDljNC4xOSwwLDcuODYtMy45LDcuODYtOC4zNUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTI5LDE2LjY2YTEwLjE0LDEwLjE0LDAsMCwwLC4yLTEuM2gtMmE4LjI4LDguMjgsMCwwLDEtLjM3LDEuNzJsLS4zOSwxLjEzLDEuMTguMThhNi4zMSw2LjMxLDAsMCwxLDUuMzcsNi4yNkMzMi45NSwyOCwzMC4xNiwzMSwyNy4wOSwzMUgxMC41N2Mt''@;'; put 'put ''My44NCwwLTcuNjItMy45MS03LjYyLTcuOWE3Ljk0LDcuOTQsMCwwLDEsNy03Ljg5bC44Ni0uMSwwLS44N0E4LjE2LDguMTYsMCwwLDEsMjEsNi40N2wxLTEuOEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2YTEwLDEwLDAsMCwwLTgsOS43NWMwLDUuMDksNC42Nyw5LjksOS42Miw5LjlI''@;'; put 'put ''MjcuMDljNC4xOSwwLDcuODYtMy45LDcuODYtOC4zNUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44''@;'; put 'put ''NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xIiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCwwLDAsLjI1LTIuMjRBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5''@;'; put 'put ''LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCwwLDAsLjI1LTIuMjRjMC0uMzMsMC0uNjUsMC0xYTcuNDQsNy40NCww''@;'; put 'put ''LDAsMS02LjYtOC41OEExMC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAsMSwyMy4xQzEsMjguMTksNS42MiwzMywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwx''@;'; put 'put ''Ni42NloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTI5LDE2LjY2YTEwLjE1LDEwLjE1LDAsMCwwLC4yLTEuMjZoLTdBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy01LjIxQTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAsMSwyMy4xQzEsMjgu''@;'; put 'put ''MTksNS42MiwzMywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksaC5DbHJTaGFwZUVsbGlwc2lzSG9yaXpvbnRhbD0oMCxz''@;'; put 'put ''LmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIzMS4xIiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMS4xIiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksaC5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWw9KDAscy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMTgiIGN5PSI0LjkiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIzMS4xIiByPSIyLjkiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSI0LjkiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNs''@;'; put 'put ''ZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGguQ2xyU2hhcGVGaWx0''@;'; put 'put ''ZXJHcmlkPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTUsMjUuODZsMiwxVjIwLjI3YTEsMSwwLDAsMC0uMjktLjdMMTAuMjMsMTNIMjUuNzlsLTYuNDcsNi41N2ExLDEsMCwwLDAtLjI5LjdMMTksMjhsMiwx''@;'; put 'put ''VjIwLjY4TDI3LjU4LDE0QTEuNDYsMS40NiwwLDAsMCwyOCwxM1YxMmExLDEsMCwwLDAtMS0xSDlhMSwxLDAsMCwwLTEsMXYxYTEuNDYsMS40NiwwLDAsMCwuNDIsMUwxNSwyMC42OFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0xIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCww''@;'; put 'put ''LC4xNS0uMzVWMTFaIi8+JyksaC5DbHJTaGFwZUZpbHRlckdyaWRDaXJjbGU9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43''@;'; put 'put ''OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTgsMTF2MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSwwLDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEy''@;'; put 'put ''LTcuMjVhLjUuNSwwLDAsMCwuMTUtLjM1VjExWiIvPicpLGguQ2xyU2hhcGVWbUJ1Zz0oMCxzLmNsckljb25TVkcpKCc8cmVjdCB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHJ4PSIzIiBmaWxsPSIjZmZmZmZmIiBvcGFjaXR5PSIwLjE1IiBzdHlsZT0iaXNvbGF0aW9uOmlzb2xhdGUiLz48cGF0''@;'; put 'put ''aCBkPSJNMy43OSwxNC44M2ExLjA5LDEuMDksMCwwLDAtMS40Ny0uNTYsMS4wOSwxLjA5LDAsMCwwLS41NCwxLjQ5bDIuNDcsNS40Yy4zOS44NS44LDEuMjksMS41NywxLjI5UzcsMjIsNy4zOSwyMS4xNmwyLjE3LTQuNzdhLjMzLjMzLDAsMCwxLC4zMS0uMi4zNS4zNSwwLDAsMSwuMzUuMzV2''@;'; put 'put ''NC42MWExLjE1LDEuMTUsMCwwLDAsMS4xNCwxLjMsMS4xNywxLjE3LDAsMCwwLDEuMTctMS4zVjE3LjM4YTEuMTUsMS4xNSwwLDAsMSwxLjIyLTEuMiwxLjEzLDEuMTMsMCwwLDEsMS4xOCwxLjJ2My43N2ExLjE3LDEuMTcsMCwxLDAsMi4zMiwwVjE3LjM4YTEuMTUsMS4xNSwwLDAsMSwxLjIy''@;'; put 'put ''LTEuMiwxLjEzLDEuMTMsMCwwLDEsMS4xOCwxLjJ2My43N2ExLjE2LDEuMTYsMCwxLDAsMi4zMSwwVjE2Ljg2YTIuNjksMi42OSwwLDAsMC0yLjc4LTIuNjksMy41NywzLjU3LDAsMCwwLTIuNDcsMS4wNSwyLjc1LDIuNzUsMCwwLDAtMi4zOC0xLjA1QTMuOTMsMy45MywwLDAsMCwxMiwxNS4y''@;'; put 'put ''MmEyLjgyLDIuODIsMCwwLDAtMi4wOC0xLjA1QTIuNTUsMi41NSwwLDAsMCw3LjQsMTUuODlMNS44MiwxOS42M2wtMi00LjgiIGZpbGw9IiNmZmZmZmYiLz48cGF0aCBkPSJNMzMsMTQuMThBMS4xNCwxLjE0LDAsMCwwLDMxLjksMTVsLTEuMTksMy43M0wyOS41LDE1LjA1YTEuMTgsMS4xOCww''@;'; put 'put ''LDAsMC0xLjE1LS44N2gtLjFhMS4yLDEuMiwwLDAsMC0xLjE1Ljg3bC0xLjE5LDMuNzEtMS4xOC0zLjcxYTEuMTUsMS4xNSwwLDAsMC0xLjExLS44NywxLjA4LDEuMDgsMCwwLDAtMS4xMiwxLjA3LDEuNjgsMS42OCwwLDAsMCwuMS41NGwyLDUuN2ExLjI3LDEuMjcsMCwwLDAsMS4yNywxLDEu''@;'; put 'put ''MjQsMS4yNCwwLDAsMCwxLjItLjkzbDEuMi0zLjY0LDEuMiwzLjY0YTEuMjUsMS4yNSwwLDAsMCwxLjI2LjkzQTEuMjcsMS4yNywwLDAsMCwzMiwyMS41TDM0LDE1LjczYTEuNzcsMS43NywwLDAsMCwuMDgtLjQ4QTEuMDcsMS4wNywwLDAsMCwzMywxNC4xOFoiIGZpbGw9IiNmZmZmZmYiLz4n''@;'; put 'put ''KSxoLkNsclNoYXBlU2VhcmNoPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTYuMzMsNS4wNUExMC45NSwxMC45NSwwLDEsMSw1LjM5LDE2LDExLDExLDAsMCwxLDE2LjMzLDUuMDVtMC0yLjA1YTEzLDEzLDAs''@;'; put 'put ''MSwwLDEzLDEzLDEzLDEzLDAsMCwwLTEzLTEzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzUsMzMuMjlsLTcuMzctNy40Mi0xLjQyLDEuNDEsNy4zNyw3LjQyQTEsMSwwLDEsMCwzNSwzMy4yOVoiLz4n''@;'; put 'put ''KSxoLkNsclNoYXBlVmlld0NvbHVtbnM9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMSw1SDVBMiwyLDAsMCwwLDMsN1YyOWEyLDIsMCwwLDAsMiwySDMxYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzEs''@;'; put 'put ''NVpNMTMsMjlINVY3aDhabTEwLDBIMTVWN2g4WiIvPicpLGguQ2xyU2hhcGVBbmdsZURvdWJsZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI5LDE5LjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDguODMsNy43''@;'; put 'put ''MSwxOS4xMmExLDEsMCwwLDEtMS40MS0xLjQxTDE4LDYsMjkuNzEsMTcuNzFBMSwxLDAsMCwxLDI5LDE5LjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjksMzAuNDFhMSwxLDAsMCwxLS43MS0uMjlM''@;'; put 'put ''MTgsMTkuODMsNy43MSwzMC4xMmExLDEsMCwwLDEtMS40MS0xLjQxTDE4LDE3LDI5LjcxLDI4LjcxQTEsMSwwLDAsMSwyOSwzMC40MVoiLz4nKSxoLkNsclNoYXBlQ2FsZW5kYXI9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSI4IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIxNCIg''@;'; put 'put ''eT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjI2IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdo''@;'; put 'put ''dD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtOCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIHg9IjE0IiB5''@;'; put 'put ''PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEzIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNB''@;'; put 'put ''MSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTUiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTYiIHg9IjEzIiB5PSI2IiB3aWR0aD0iMTAiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIHg9IjIwIiB5''@;'; put 'put ''PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTctLWJhZGdlZCIgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQiIHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWJhZGdlZCIg''@;'; put 'put ''eD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWJhZGdlZCIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWJhZGdlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMTQtLWJhZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE1''@;'; put 'put ''LS1iYWRnZWQiIGQ9Ik0yMi41LDZIMTNWOGg5Ljc4QTcuNDksNy40OSwwLDAsMSwyMi41LDZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5''@;'; put 'put ''PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgs''@;'; put 'put ''MS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiB4PSI4IiB5PSIxNCIgd2lkdGg9IjIi''@;'; put 'put ''IGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0t''@;'; put 'put ''YWxlcnRlZCIgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYWxlcnRlZCIgeD0i''@;'; put 'put ''MTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwb2x5Z29uIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4yOSA2Ii8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEzLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2''@;'; put 'put ''LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjI1LDZoLTRWOWEyLjIsMi4yLDAsMSwxLTQuNCwwVjZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlW''@;'; put 'put ''NmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYy''@;'; put 'put ''NGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTAtNUgyMFYxNGgyWm02LDEwSDI2VjI0aDJabTAtNUgyNlYxOWgyWm0wLTVIMjZWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEs''@;'; put 'put ''MCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAs''@;'; put 'put ''MTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCww''@;'; put 'put ''LDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0w''@;'; put 'put ''LTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0z''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTks''@;'; put 'put ''OS44OUwyMS4yOSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVI''@;'; put 'put ''OFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptNiw1SDI2VjI0aDJabTAtNUgyNlYxOWgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksaC5DbHJTaGFwZUV2ZW50PSgwLHMuY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTYuMTcsMjUuODYsMTAuODEsMjAuNWExLDEsMCwwLDEsMS40MS0xLjQxTDE2LjE3LDIzbDguNjQtOC42NGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuMjUsNkgyOVY4aDNWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUEx''@;'; put 'put ''Ljc4LDEuNzgsMCwwLDAsMzIuMjUsNloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTUiIHg9IjEzIiB5PSI2IiB3aWR0aD0iMTAiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTEwLjgxLDIwLjVsNS4zNiw1LjM2TDI2''@;'; put 'put ''LjIyLDE1LjgxYTEsMSwwLDAsMC0xLjQxLTEuNDFMMTYuMTcsMjNsLTMuOTQtMy45NGExLDEsMCwwLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTEwLDEw''@;'; put 'put ''YTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUEx''@;'; put 'put ''Ljc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0yMi41LDZIMTNWOGg5Ljc4QTcuNDksNy40OSwwLDAsMSwyMi41LDZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwx''@;'; put 'put ''LDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLC4yMy0uNDFIMjMuOEwxNi4x''@;'; put 'put ''NywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4y''@;'; put 'put ''OSA2Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCww''@;'; put 'put ''LDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwy''@;'; put 'put ''MS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIs''@;'; put 'put ''MFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwwLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43''@;'; put 'put ''OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMjUuOTQsMTYuNThsLTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4''@;'; put 'put ''LDMuMzhMMjQsMTQuNjZhMS4zNiwxLjM2LDAsMSwxLDEuOTMsMS45M1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNW''@;'; put 'put ''OUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjYuM2ExLjM0LDEuMzQsMCwwLDEtLjM2LDEuMThsLTkuNjcsOS42N0wxMSwyMC45''@;'; put 'put ''NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzgsNy03aC0xQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVB''@;'; put 'put ''MS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0i''@;'; put 'put ''TTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIy''@;'; put 'put ''LjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVabS00LjA2LDMuMDgtOS42''@;'; put 'put ''Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxoLkNsclNoYXBlRXllPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy42MiwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIz''@;'; put 'put ''LDkuMjgsMTAsMTUuODIsMTBzMTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0xNy44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwxOGMzLTUuMjksOC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQz''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOSwxMS4xN0E2Ljg2LDYuODYsMCwxLDAsMjUsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjA5LDExLjE3Wm0wLDExLjcyQTQuODYsNC44NiwwLDEsMSwyMywxOCw0''@;'; put 'put ''Ljg3LDQuODcsMCwwLDEsMTguMDksMjIuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4y''@;'; put 'put ''Ni40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2''@;'; put 'put ''LjQzLDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOC4wOSIgY3k9IjE4LjAzIiByPSI2Ljg2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+JyksaC5DbHJTaGFwZUV5''@;'; put 'put ''ZUhpZGU9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI1LjE5LDIwLjRBNi43OCw2Ljc4LDAsMCwwLDI1LjYyLDE4YTYuODYsNi44NiwwLDAsMC02Ljg2LTYuODYsNi43OSw2Ljc5LDAsMCwwLTIuMzcuNDNMMTgsMTMuMjNhNC43OCw0Ljc4LDAsMCwxLC43NC0uMDZBNC44Nyw0Ljg3LDAs''@;'; put 'put ''MCwxLDIzLjYyLDE4YTQuNzksNC43OSwwLDAsMS0uMDYuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01''@;'; put 'put ''LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQuODcsNS43OGw0LjQ2LDQuNDZhMTkuNTIsMTkuNTIsMCwwLDAtNi42OSw3LjI5TDIuMzgsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwYTE2LjkzLDE2LjkzLDAsMCwwLDcuMzctMS42OWw1LDUs''@;'; put 'put ''MS43NS0xLjUtMjYtMjZabTkuNzUsOS43NSw2LjY1LDYuNjVhNC44MSw0LjgxLDAsMCwxLTIuNS43MkE0Ljg3LDQuODcsMCwwLDEsMTMuOSwxOCw0LjgxLDQuODEsMCwwLDEsMTQuNjIsMTUuNTNabS0xLjQ1LTEuNDVhNi44NSw2Ljg1LDAsMCwwLDkuNTUsOS41NWwxLjYsMS42YTE0LjkxLDE0''@;'; put 'put ''LjkxLDAsMCwxLTUuODYsMS4yYy01LjYzLDAtMTAuNzUtMy4xNC0xMy44LTguNDNhMTcuMjksMTcuMjksMCwwLDEsNi4xMi02LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjM3LDExLjE3QTYuNzksNi43''@;'; put 'put ''OSwwLDAsMCwxNiwxMS42bDguOCw4LjhBNi43OCw2Ljc4LDAsMCwwLDI1LjIzLDE4LDYuODYsNi44NiwwLDAsMCwxOC4zNywxMS4xN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIz''@;'; put 'put ''LTkuMjgtMTAtMTUuODItMTBhMTYuODIsMTYuODIsMCwwLDAtNS4yNC44NUwxNC44NCwxMGExNC43OCwxNC43OCwwLDAsMSwzLjYzLS40N2M1LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40MiwxLjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUt''@;'; put 'put ''NmwuMjYtLjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQuODcsNS43OGw0LjQ2LDQuNDZhMTkuNTIsMTkuNTIsMCwwLDAtNi42OSw3LjI5TDIuMzgsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEw''@;'; put 'put ''YTE2LjkzLDE2LjkzLDAsMCwwLDcuMzctMS42OWw1LDUsMS43NS0xLjUtMjYtMjZabTguMyw4LjNhNi44NSw2Ljg1LDAsMCwwLDkuNTUsOS41NWwxLjYsMS42YTE0LjkxLDE0LjkxLDAsMCwxLTUuODYsMS4yYy01LjYzLDAtMTAuNzUtMy4xNC0xMy44LTguNDNhMTcuMjksMTcuMjksMCwwLDEs''@;'; put 'put ''Ni4xMi02LjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+JyksaC5DbHJTaGFwZVN0ZXBGb3J3YXJkMj0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNy4wOCw2LjUyYTEuNjgsMS42OCwwLDAsMCwwLDIuNEwxNi41MSwxOCw3LjEyLDI3LjA4YTEuNywxLjcs''@;'; put 'put ''MCwwLDAsMi4zNiwyLjQ0aDBMMjEuNCwxOCw5LjQ4LDYuNDdBMS42OSwxLjY5LDAsMCwwLDcuMDgsNi41MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNi40OSw1YTEuNywxLjcsMCwwLDAtMS43LDEuN1YyOS4zYTEuNywxLjcsMCww''@;'; put 'put ''LDAsMy40LDBWNi43QTEuNywxLjcsMCwwLDAsMjYuNDksNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGguQ2xyU2hhcGVBcnJvdz0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcuNjYsMTUuNjEsMTgsNiw4LjM0LDE1LjYxQTEsMSwwLDEs''@;'; put 'put ''MCw5Ljc1LDE3TDE3LDkuODFWMjguOTRhMSwxLDAsMSwwLDIsMFY5LjgxTDI2LjI1LDE3YTEsMSwwLDAsMCwxLjQxLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPicpLGguQ29yZVNoYXBlcz17InVua25vd24tc3RhdHVzIjpoLkNsclNoYXBlVW5r''@;'; put 'put ''bm93blN0YXR1cyxob21lOmguQ2xyU2hhcGVIb21lLGNvZzpoLkNsclNoYXBlQ29nLGNoZWNrOmguQ2xyU2hhcGVDaGVjayx0aW1lczpoLkNsclNoYXBlVGltZXMsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIjpoLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZSwiZXhjbGFtYXRpb24tY2lyY2xl''@;'; put 'put ''IjpoLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGUsImNoZWNrLWNpcmNsZSI6aC5DbHJTaGFwZUNoZWNrQ2lyY2xlLCJpbmZvLWNpcmNsZSI6aC5DbHJTaGFwZUluZm9DaXJjbGUsImluZm8tc3RhbmRhcmQiOmguQ2xyU2hhcGVJbmZvU3RhbmRhcmQsInN1Y2Nlc3Mtc3RhbmRhcmQiOmguQ2xy''@;'; put 'put ''U2hhcGVTdWNjZXNzU3RhbmRhcmQsImVycm9yLXN0YW5kYXJkIjpoLkNsclNoYXBlRXJyb3JTdGFuZGFyZCwid2FybmluZy1zdGFuZGFyZCI6aC5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZCwiaGVscC1pbmZvIjpoLkNsclNoYXBlSGVscEluZm8sYmFyczpoLkNsclNoYXBlQmFycyx1c2VyOmgu''@;'; put 'put ''Q2xyU2hhcGVVc2VyLGFuZ2xlOmguQ2xyU2hhcGVBbmdsZSxmb2xkZXI6aC5DbHJTaGFwZUZvbGRlciwiZm9sZGVyLW9wZW4iOmguQ2xyU2hhcGVGb2xkZXJPcGVuLGJlbGw6aC5DbHJTaGFwZUJlbGwsaW1hZ2U6aC5DbHJTaGFwZUltYWdlLGNsb3VkOmguQ2xyU2hhcGVDbG91ZCwiZWxsaXBz''@;'; put 'put ''aXMtaG9yaXpvbnRhbCI6aC5DbHJTaGFwZUVsbGlwc2lzSG9yaXpvbnRhbCwiZWxsaXBzaXMtdmVydGljYWwiOmguQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsLCJmaWx0ZXItZ3JpZCI6aC5DbHJTaGFwZUZpbHRlckdyaWQsImZpbHRlci1ncmlkLWNpcmNsZSI6aC5DbHJTaGFwZUZpbHRlckdy''@;'; put 'put ''aWRDaXJjbGUsInZtLWJ1ZyI6aC5DbHJTaGFwZVZtQnVnLHNlYXJjaDpoLkNsclNoYXBlU2VhcmNoLCJ2aWV3LWNvbHVtbnMiOmguQ2xyU2hhcGVWaWV3Q29sdW1ucywiYW5nbGUtZG91YmxlIjpoLkNsclNoYXBlQW5nbGVEb3VibGUsY2FsZW5kYXI6aC5DbHJTaGFwZUNhbGVuZGFyLGV2ZW50''@;'; put 'put ''OmguQ2xyU2hhcGVFdmVudCxleWU6aC5DbHJTaGFwZUV5ZSwiZXllLWhpZGUiOmguQ2xyU2hhcGVFeWVIaWRlLCJzdGVwLWZvcndhcmQtMiI6aC5DbHJTaGFwZVN0ZXBGb3J3YXJkMixhcnJvdzpoLkNsclNoYXBlQXJyb3d9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLkNvcmVTaGFwZXMsImhv''@;'; put 'put ''dXNlIiwoMCxjLmRlc2NyaXB0b3JDb25maWcpKGguQ29yZVNoYXBlcy5ob21lKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGguQ29yZVNoYXBlcywic2V0dGluZ3MiLCgwLGMuZGVzY3JpcHRvckNvbmZpZykoaC5Db3JlU2hhcGVzLmNvZykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLkNvcmVT''@;'; put 'put ''aGFwZXMsInN1Y2Nlc3MiLCgwLGMuZGVzY3JpcHRvckNvbmZpZykoaC5Db3JlU2hhcGVzLmNoZWNrKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGguQ29yZVNoYXBlcywiY2xvc2UiLCgwLGMuZGVzY3JpcHRvckNvbmZpZykoaC5Db3JlU2hhcGVzLnRpbWVzKSksT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KGguQ29yZVNoYXBlcywid2FybmluZyIsKDAsYy5kZXNjcmlwdG9yQ29uZmlnKShoLkNvcmVTaGFwZXNbImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaC5Db3JlU2hhcGVzLCJlcnJvciIsKDAsYy5kZXNjcmlwdG9yQ29uZmlnKShoLkNvcmVTaGFw''@;'; put 'put ''ZXNbImV4Y2xhbWF0aW9uLWNpcmNsZSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGguQ29yZVNoYXBlcywiaW5mbyIsKDAsYy5kZXNjcmlwdG9yQ29uZmlnKShoLkNvcmVTaGFwZXNbImluZm8tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaC5Db3JlU2hhcGVzLCJtZW51Iiwo''@;'; put 'put ''MCxjLmRlc2NyaXB0b3JDb25maWcpKGguQ29yZVNoYXBlcy5iYXJzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGguQ29yZVNoYXBlcywiYXZhdGFyIiwoMCxjLmRlc2NyaXB0b3JDb25maWcpKGguQ29yZVNoYXBlcy51c2VyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGguQ29yZVNoYXBlcywi''@;'; put 'put ''Y2FyZXQiLCgwLGMuZGVzY3JpcHRvckNvbmZpZykoaC5Db3JlU2hhcGVzLmFuZ2xlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGguQ29yZVNoYXBlcywiZGlyZWN0b3J5IiwoMCxjLmRlc2NyaXB0b3JDb25maWcpKGguQ29yZVNoYXBlcy5mb2xkZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''aC5Db3JlU2hhcGVzLCJub3RpZmljYXRpb24iLCgwLGMuZGVzY3JpcHRvckNvbmZpZykoaC5Db3JlU2hhcGVzLmJlbGwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaC5Db3JlU2hhcGVzLCJjb2xsYXBzZSIsKDAsYy5kZXNjcmlwdG9yQ29uZmlnKShoLkNvcmVTaGFwZXNbImFuZ2xlLWRvdWJs''@;'; put 'put ''ZSJdKSl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hh''@;'; put 'put ''cGVzL2Vzc2VudGlhbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKGosaCx5KXsidXNlIHN0cmljdCI7T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KGgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGguQ2xyU2hhcGVMb2dvdXQ9aC5DbHJTaGFwZUxvZ2luPWguQ2xyU2hhcGVIZWxwPWguQ2xyU2hhcGVDb3B5PWguQ2xyU2hhcGVDaGlsZEFycm93PWguQ2xyU2hhcGVDaXJjbGVBcnJvdz1oLkNsclNoYXBlQWxh''@;'; put 'put ''cm1DbG9jaz1oLkNsclNoYXBlQ2xvY2s9aC5DbHJTaGFwZUhpc3Rvcnk9aC5DbHJTaGFwZVRhZ3M9aC5DbHJTaGFwZVRhZz1oLkNsclNoYXBlVHJhc2g9aC5DbHJTaGFwZVRpbWVzQ2lyY2xlPWguQ2xyU2hhcGVCYW49aC5DbHJTaGFwZVBsdXNDaXJjbGU9aC5DbHJTaGFwZU1pbnVzQ2lyY2xl''@;'; put 'put ''PWguQ2xyU2hhcGVNaW51cz1oLkNsclNoYXBlUGx1cz1oLkNsclNoYXBlRmlsZT1oLkNsclNoYXBlUGluPWguQ2xyU2hhcGVGaWx0ZXI9aC5DbHJTaGFwZVBvcE91dD1oLkNsclNoYXBlVXNlcnM9aC5DbHJTaGFwZVVubG9jaz1oLkNsclNoYXBlTG9jaz1oLkNsclNoYXBlVXBsb2FkPWguQ2xy''@;'; put 'put ''U2hhcGVEb3dubG9hZD1oLkNsclNoYXBlTGlnaHRidWxiPWguQ2xyU2hhcGVWaWV3Q2FyZHM9aC5DbHJTaGFwZVZpZXdMaXN0PWguQ2xyU2hhcGVTeW5jPWguQ2xyU2hhcGVSZWZyZXNoPWguQ2xyU2hhcGVOb3RlPWguQ2xyU2hhcGVQZW5jaWw9aC5DbHJTaGFwZVRoZXJtb21ldGVyPWguQ2xy''@;'; put 'put ''U2hhcGVCdWc9aC5DbHJTaGFwZVNjaXNzb3JzPWguQ2xyU2hhcGVBc3Rlcmlzaz1oLkNsclNoYXBlQm9vaz1oLkNsclNoYXBlT2JqZWN0cz1oLkNsclNoYXBlUmVzaXplPWguQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2s9aC5DbHJTaGFwZUN1cnNvckhhbmQ9aC5DbHJTaGFwZUN1cnNvckFycm93''@;'; put 'put ''PWguQ2xyU2hhcGVHcmlkVmlldz1oLkNsclNoYXBlQnViYmxlRXhjbGFtYXRpb249aC5DbHJTaGFwZU5ldz1oLkNsclNoYXBlQWxhcm1PZmY9aC5DbHJTaGFwZVBpbmJvYXJkPWguQ2xyU2hhcGVBZGRUZXh0PXZvaWQgMCxoLkNsclNoYXBlQ2xvbmU9aC5DbHJTaGFwZUN1cnNvck1vdmU9aC5D''@;'; put 'put ''bHJTaGFwZVdhbmQ9aC5DbHJTaGFwZVN1bj1oLkNsclNoYXBlTW9vbj1oLkNsclNoYXBlRmlsdGVyMj1oLkNsclNoYXBlRHJhZ0hhbmRsZT1oLkNsclNoYXBlQ29weVRvQ2xpcGJvYXJkPWguQ2xyU2hhcGVDb2xvclBpY2tlcj1oLkNsclNoYXBlQnJpZWZjYXNlPWguQ2xyU2hhcGVFeHBhbmRD''@;'; put 'put ''YXJkPWguQ2xyU2hhcGVDb2xsYXBzZUNhcmQ9aC5DbHJTaGFwZVNvcnRCeT1oLkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9aC5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPWguQ2xyU2hhcGVTaHJpbms9aC5DbHJTaGFwZVBhcGVyY2xpcD1oLkNsclNoYXBlRmlsZUdyb3VwPWguQ2xyU2hhcGVSZXBl''@;'; put 'put ''YXQ9aC5DbHJTaGFwZUlkQmFkZ2U9aC5DbHJTaGFwZUJhbGFuY2U9aC5DbHJTaGFwZU9yZ2FuaXphdGlvbj1oLkNsclNoYXBlTm9BY2Nlc3M9aC5DbHJTaGFwZUhvdXJnbGFzcz1oLkNsclNoYXBlRmxhbWU9aC5DbHJTaGFwZVRhcmdldD1oLkNsclNoYXBlQnVsbHNleWU9aC5DbHJTaGFwZVdy''@;'; put 'put ''ZW5jaD1oLkNsclNoYXBlQm9sdD1oLkNsclNoYXBlTGlicmFyeT1oLkNsclNoYXBlS2V5PWguQ2xyU2hhcGVab29tT3V0PWguQ2xyU2hhcGVab29tSW49aC5DbHJTaGFwZVdpbmRvd1Jlc3RvcmU9aC5DbHJTaGFwZVdpbmRvd01pbj1oLkNsclNoYXBlV2luZG93TWF4PWguQ2xyU2hhcGVXaW5k''@;'; put 'put ''b3dDbG9zZT1oLkNsclNoYXBlVG9vbHM9aC5DbHJTaGFwZVN3aXRjaD1oLkNsclNoYXBlVHdvV2F5QXJyb3dzPWguQ2xyU2hhcGVGaWxlU2V0dGluZ3M9aC5DbHJTaGFwZVNjcm9sbD1oLkNsclNoYXBlVW5kbz1oLkNsclNoYXBlUmVkbz1oLkNsclNoYXBlTGlzdD1oLkNsclNoYXBlRmlyZXdh''@;'; put 'put ''bGw9aC5DbHJTaGFwZUNsaXBib2FyZD1oLkNsclNoYXBlU2xpZGVyPWguQ2xyU2hhcGVXb3JsZD1oLkNsclNoYXBlUHJpbnRlcj12b2lkIDAsaC5Fc3NlbnRpYWxTaGFwZXM9aC5DbHJTaGFwZUNvbG9yUGFsZXR0ZT1oLkNsclNoYXBlRmlyc3RBaWQ9aC5DbHJTaGFwZUJldGE9aC5DbHJTaGFw''@;'; put 'put ''ZURvdENpcmNsZT1oLkNsclNoYXBlQ2lyY2xlPWguQ2xyU2hhcGVDcm9zc2hhaXJzPWguQ2xyU2hhcGVWb2x1bWU9aC5DbHJTaGFwZVRhYmxlPWguQ2xyU2hhcGVTbm93Zmxha2U9aC5DbHJTaGFwZUZ1ZWw9aC5DbHJTaGFwZUZvcm09aC5DbHJTaGFwZUZpc2g9aC5DbHJTaGFwZVRyZWU9aC5D''@;'; put 'put ''bHJTaGFwZVJlY3ljbGU9aC5DbHJTaGFwZUZpbHRlck9mZj1oLkNsclNoYXBlRmlsZVppcD1oLkNsclNoYXBlQ3Vyc29ySGFuZE9wZW49aC5DbHJTaGFwZUN1cnNvckhhbmRHcmFiPWguQ2xyU2hhcGVUcmVlVmlldz1oLkNsclNoYXBlUG9ydHJhaXQ9aC5DbHJTaGFwZVBhc3RlPWguQ2xyU2hh''@;'; put 'put ''cGVMYW5kc2NhcGU9aC5DbHJTaGFwZUVyYXNlcj1oLkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcj1oLkNsclNoYXBlRGV0YWlscz12b2lkIDA7dmFyIGM9eSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNv''@;'; put 'put ''bmZpZy50cyIpLHM9eSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpLEE9eSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBl''@;'; put 'put ''cy50cyIpO2guQ2xyU2hhcGVBZGRUZXh0PSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMjFIMTNhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiwxNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMTNBMSwxLDAsMCwwLDEyLDE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9''@;'; put 'put ''Ik0yNywyN0gxM2ExLDEsMCwwLDAsMCwySDI3YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE1Ljg5LDlhMSwxLDAsMCwwLTEtMUgxMFYzLjIxYTEsMSwwLDAsMC0yLDBWOEgyLjg5YTEs''@;'; put 'put ''MSwwLDAsMCwwLDJIOHY1LjIxYTEsMSwwLDAsMCwyLDBWMTBoNC44OUExLDEsMCwwLDAsMTUuODksOVoiLz4nKSxoLkNsclNoYXBlUGluYm9hcmQ9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMCw2LDMw''@;'; put 'put ''LDYsNkgyMlY0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTRIMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40''@;'; put 'put ''MSwxLjQxbDcsN2ExLDEsMCwxLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMi4xLDExLjE5bC43LjVMMjYuNDYsOCwyNSw2LjU2LDIyLjUxLDkuMTNjLTItLjg3LTQuMzUuMTQtNS45Miwx''@;'; put 'put ''LjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MiwxLjY4LTUuOTNsMi41NC0yLjU3TDI3Ljg4LDkuMzgsMjQuMjEsMTMuMWwuNDkuNjljLjc2LDEsLjI1LDIuMzctLjQxLDMuMzNMMTgu''@;'; put 'put ''NzcsMTEuNkMxOS44NCwxMC44NiwyMS4xNSwxMC41LDIyLjEsMTEuMTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsMzAsNiwzMCw2LDZIMjJWNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEy''@;'; put 'put ''LDIsMCwwLDAsMi0yVjE0SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDEuMzgsMS4zOC00LDRjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIu''@;'; put 'put ''NzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MSwxLjY4LTUuOTJsNC00LDEuMzgsMS4zOGExLDEsMCwxLDAsMS40MS0xLjQxWiIvPicpLGguQ2xyU2hhcGVBbGFybU9mZj0oMCxzLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS4zMywyMS41NGEuOS45LDAsMCwwLS40MS0xLjJsLTMuMi0xLjU2TDI0Ljg5LDIyQS44OS44OSwwLDAsMCwyNS4zMywyMS41NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsOC42YS45LjksMCwwLDAtLjkuOXY0LjZsMS44LDEuODFWOS41QS45LjksMCwwLDAsMTgsOC42WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xMS40Miwz''@;'; put 'put ''LjQzYTUuOCw1LjgsMCwwLDAtNS44MS0uODFMOC4zLDUuMzJBMTYsMTYsMCwwLDEsMTEuNDIsMy40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMTgsNGExMy45MSwxMy45MSwwLDAsMC04LjMsMi43NWwxLjQy''@;'; put 'put ''LDEuNDNBMTIsMTIsMCwwLDEsMjcuODIsMjQuOWwxLjQyLDEuNDNBMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMS41Niw0LjIxLDIuNzMsNS4zOGE1LjcsNS43LDAsMCwwLC42Nyw2''@;'; put 'put ''LjFBMTUuNzgsMTUuNzgsMCwwLDEsNS40Niw4LjEyTDYuODgsOS41NUExMy45NCwxMy45NCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjg5LDEzLjg5LDAsMCwwLDE2LjgsMGw0LjE0LDQuMTVMMzIsMzEuOSwzLDIuOFpNMjUsMjcu''@;'; put 'put ''NzJBMTEuODksMTEuODksMCwwLDEsMTgsMzAsMTIsMTIsMCwwLDEsNiwxOGExMS44OSwxMS44OSwwLDAsMSwyLjI5LTdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4z''@;'; put 'put ''Ny0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTEuNDIsMy40M2E1LjgsNS44LDAsMCwwLTUuNzctLjgyTDguMzMs''@;'; put 'put ''NS4zQTE2LDE2LDAsMCwxLDExLjQyLDMuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjQuOTIsMjEuOTRsNC4zNCw0LjM2QTE0LDE0LDAsMCwwLDkuNzUsNi43M0wxNywxNFY5LjY5YTEsMSwwLDAsMSwyLDBWMTZs''@;'; put 'put ''Mi4zMywyLjM0TDI1LDIwLjFhMSwxLDAsMCwxLC40NywxLjMzQTEsMSwwLDAsMSwyNC45MiwyMS45NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xLjYxLDQuMjEsMi43Myw1LjM0YTUuNzMsNS43MywwLDAsMCwuNjcs''@;'; put 'put ''Ni4xNUExNS44OCwxNS44OCwwLDAsMSw1LjQ4LDguMUw2LjkxLDkuNTJBMTMuOTQsMTMuOTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy44OSwxMy44OSwwLDAsMCwxNi44MywwbDQuMTYsNC4xN0wzMiwzMS45LDMsMi44WiIvPicp''@;'; put 'put ''LGguQ2xyU2hhcGVOZXc9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNC41OSwyM2wtNC4wOC01LDQtNC45YTEuODIsMS44MiwwLDAsMCwuMjMtMS45NEExLjkzLDEuOTMsMCwwLDAsMzIuOTQsMTBoLTMxQTEu''@;'; put 'put ''OTEsMS45MSwwLDAsMCwwLDExLjg4VjI0LjEzQTEuOTEsMS45MSwwLDAsMCwxLjk0LDI2SDMzLjA1YTEuOTMsMS45MywwLDAsMCwxLjc3LTEuMDlBMS44MiwxLjgyLDAsMCwwLDM0LjU5LDIzWk0yLDI0VjEySDMyLjc4bC00Ljg0LDUuOTNMMzIuODUsMjRaIi8+XG4gICAgICAgICAgICA8cG9s''@;'; put 'put ''eWdvbiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHBvaW50cz0iOS4zOSAxOS4zNSA2LjEzIDE1IDUgMTUgNSAyMS4xOCA2LjEzIDIxLjE4IDYuMTMgMTYuODQgOS4zOSAyMS4xOCAxMC41MSAyMS4xOCAxMC41MSAxNSA5LjM5IDE1IDkuMzkgMTkuMzUiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMi4xOCAyMS4xOCAxNi44NCAyMS4xOCAxNi44NCAyMC4xNiAxMy4zMSAyMC4xNiAxMy4zMSAxOC41NSAxNi41IDE4LjU1IDE2LjUgMTcuNTIgMTMuMzEgMTcu''@;'; put 'put ''NTIgMTMuMzEgMTYuMDMgMTYuODQgMTYuMDMgMTYuODQgMTUgMTIuMTggMTUgMTIuMTggMjEuMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNC41MiAxOS40MyAyMy4wNiAxNSAyMS44NCAxNSAy''@;'; put 'put ''MC4zNyAxOS40MyAxOS4wNSAxNSAxNy44MiAxNSAxOS43OCAyMS4xOCAyMC44OSAyMS4xOCAyMi40NSAxNi41OSAyNCAyMS4xOCAyNS4xMyAyMS4xOCAyNy4wOCAxNSAyNS44NSAxNSAyNC41MiAxOS40MyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIgZD0iTTM0LjExLDI0LjQ5bC0zLjkyLTYuNjIsMy44OC02LjM1QTEsMSwwLDAsMCwzMy4yMiwxMEgyYTIsMiwwLDAsMC0yLDJWMjRhMiwyLDAsMCwwLDIsMkgzMy4yNUExLDEsMCwwLDAsMzQuMTEsMjQuNDlabS0yMy42LTMuMzFIOS4zOUw2LjEzLDE2Ljg0djQuMzVINVYx''@;'; put 'put ''NUg2LjEzbDMuMjcsNC4zNVYxNWgxLjEyWk0xNi44NCwxNkgxMy4zMXYxLjQ5aDMuMnYxaC0zLjJ2MS42MWgzLjUzdjFIMTIuMThWMTVoNC42NVptOC4yOSw1LjE2SDI0bC0xLjU1LTQuNTlMMjAuOSwyMS4xOEgxOS43OGwtMi02LjE4SDE5bDEuMzIsNC40M0wyMS44NCwxNWgxLjIybDEuNDYs''@;'; put 'put ''NC40M0wyNS44NSwxNWgxLjIzWiIvPicpLGguQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwx''@;'; put 'put ''NGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0yOC4yOSwyNC42MWExLDEsMCwwLDAtLjMyLjczbDAsNS4zNC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0u''@;'; put 'put ''MTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjA4LDExLjA4LDAsMCwxLDI4LjI5LDI0LjYxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiIGQ9Ik0xOCwyMC42M2ExLDEsMCwwLDAsMS0xVjguNDhhMSwxLDAsMSwwLTIsMFYxOS42MUExLDEsMCwwLDAsMTgsMjAuNjNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBjeD0iMTgiIGN5PSIyNC4wNCIgcj0i''@;'; put 'put ''MS4zMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAt''@;'; put 'put ''Ni43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0xNi45Myw5LjEzYTEuNDEsMS40MSwwLDEsMSwyLjgxLDBWMTguOWExLjQxLDEuNDEsMCwxLDEtMi44MSwwWm0xLjQxLDE3LjM1YTEuODcsMS44NywwLDEsMSwxLjg3LTEuODdBMS44NywxLjg3LDAsMCwx''@;'; put 'put ''LDE4LjM0LDI2LjQ3WiIvPicpLGguQ2xyU2hhcGVHcmlkVmlldz0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LDRINkEyLDIsMCwwLDAsNCw2djhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEy''@;'; put 'put ''LDIsMCwwLDAsMTQsNFpNNiwxNFY2aDh2OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAsNEgyMmEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAs''@;'; put 'put ''NFpNMjIsMTRWNmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0LDIwSDZhMiwyLDAsMCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjIyQTIsMiwwLDAsMCwxNCwyMFpNNiwzMFYy''@;'; put 'put ''Mmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLDIwSDIyYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYyMkEyLDIsMCwwLDAsMzAsMjBaTTIyLDMwVjIyaDh2OFoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjQiIHk9IjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjIiIHJ5PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yIiB4PSIyMCIgeT0iNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIgcnk9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIHg9IjQiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgeD0iMjAiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPicpLGguQ2xyU2hhcGVDdXJzb3JBcnJvdz0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LjU4LDMyLjMxYTEsMSwwLDAsMS0uOTQtLjY1TDQsNS42NUExLDEsMCwwLDEsNS4yNSw0LjM3bDI2LDkuNjhhMSwxLDAsMCwxLS4wNSwxLjg5bC04LjM2LDIuNTcsOC4zLDguM2ExLDEsMCwwLDEsMCwxLjQxbC0z''@;'; put 'put ''LjI2LDMuMjZhMSwxLDAsMCwxLS43MS4yOWgwYTEsMSwwLDAsMS0uNzEtLjI5bC04LjMzLTguMzMtMi42LDguNDVhMSwxLDAsMCwxLS45My43MVptMy4wOS0xMmExLDEsMCwwLDEsLjcxLjI5bDguNzksOC43OUwyOSwyNy41MWwtOC43Ni04Ljc2YTEsMSwwLDAsMSwuNDEtMS42Nmw3LjEzLTIu''@;'; put 'put ''Mkw2LjYsN2w3Ljg5LDIxLjJMMTYuNzEsMjFhMSwxLDAsMCwxLC43MS0uNjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjksMTIuMzYsMy44OCwzQTEsMSwwLDAsMCwyLjU5LDQuMjhMMTIsMjkuNDRhMSwxLDAsMCww''@;'; put 'put ''LDEuODktLjA1bDIuNjktOC43NSw5LjEyLDguOWExLDEsMCwwLDAsMS40MSwwbDIuMzUtMi4zNWExLDEsMCwwLDAsMC0xLjQxbC05LjA5LTguODZMMjksMTQuMjVBMSwxLDAsMCwwLDI5LDEyLjM2WiIvPicpLGguQ2xyU2hhcGVDdXJzb3JIYW5kPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuNzQsMTUuMTlhMTMuNjYsMTMuNjYsMCwwLDAtNi44Ny0zLjgzQTI2LDI2LDAsMCwwLDE4LDEwLjU4VjUuMjhBMy40LDMuNCwwLDAsMCwxNC41LDIsMy40LDMuNCwwLDAsMCwxMSw1LjI4djEwTDkuNCwxMy43''@;'; put 'put ''YTMuNzcsMy43NywwLDAsMC01LjI4LDBBMy42NywzLjY3LDAsMCwwLDMsMTYuMzNhMy42LDMuNiwwLDAsMCwxLDIuNTZsNC42Niw1LjUyYTExLjUzLDExLjUzLDAsMCwwLDEuNDMsNCwxMC4xMiwxMC4xMiwwLDAsMCwyLDIuNTR2MS45MmExLjA3LDEuMDcsMCwwLDAsMSwxLjA4SDI3YTEuMDcs''@;'; put 'put ''MS4wNywwLDAsMCwxLTEuMDh2LTIuN2ExMi44MSwxMi44MSwwLDAsMCwzLTguMzZ2LTZBMSwxLDAsMCwwLDMwLjc0LDE1LjE5Wk0yOSwyMS44NmExMC43MiwxMC43MiwwLDAsMS0yLjYsNy4yNiwxLjExLDEuMTEsMCwwLDAtLjQuNzJWMzJIMTQuMTRWMzAuNTJhMSwxLDAsMCwwLS40NC0uODMs''@;'; put 'put ''Ny4yNiw3LjI2LDAsMCwxLTEuODItMi4yMyw5LjE0LDkuMTQsMCwwLDEtMS4yLTMuNTIsMSwxLDAsMCwwLS4yMy0uNTlMNS41MywxNy41M2ExLjcsMS43LDAsMCwxLDAtMi40MiwxLjc2LDEuNzYsMCwwLDEsMi40NywwbDMsM3YzLjE0bDItMVY1LjI4QTEuNDIsMS40MiwwLDAsMSwxNC41LDQs''@;'; put 'put ''MS40MiwxLjQyLDAsMCwxLDE2LDUuMjh2MTEuOGwyLC40M1YxMi41OWEyNC4yNywyNC4yNywwLDAsMSwyLjUxLjE4VjE4bDEuNi4zNVYxM2MuNDEuMDguODMuMTcsMS4yNi4yOGExNC44OCwxNC44OCwwLDAsMSwxLjUzLjQ5djUuMTVsMS42LjM1VjE0LjVBMTEuMDYsMTEuMDYsMCwwLDEsMjks''@;'; put 'put ''MTYuMjNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjguNjksMTQuMzN2NC44M2wtMi0uNDNWMTMuMjRhMTYuMTksMTYuMTksMCwwLDAtMi4zMy0uODR2NS44MmwtMi0uNDNWMTJjLTEuMS0uMTgtMi4xOC0uMy0zLjA4''@;'; put 'put ''LS4zNnY1LjUxbC0yLS40M1YxMS40OGgwVjQuMzRhMi41MywyLjUzLDAsMCwwLTIuNi0yLjQzLDIuNTMsMi41MywwLDAsMC0yLjYsMi40M1YxNy4yN2gwdjIuNTlsLTIsMVYxNS42TDcuNzUsMTMuMjFhMi44MywyLjgzLDAsMCwwLTQsMCwyLjkzLDIuOTMsMCwwLDAsMCw0LjA5bDYsNy4xYTEw''@;'; put 'put ''LjgyLDEwLjgyLDAsMCwwLDEuMzksNC4yMiw4LjQyLDguNDIsMCwwLDAsMi4yMSwyLjczdjIuNTZIMjcuNzlWMzAuNjJhMTIuNTQsMTIuNTQsMCwwLDAsMy04LjV2LTZBMTAsMTAsMCwwLDAsMjguNjksMTQuMzNaIi8+JyksaC5DbHJTaGFwZUN1cnNvckhhbmRDbGljaz0oMCxzLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLjQsMTcuNmMtMS44LTEuOS00LjItMy4yLTYuNy0zLjdjLTEuMS0wLjMtMi4yLTAuNS0zLjMtMC42YzIuOC0zLjMsMi4zLTguMy0xLTExLjFzLTguMy0yLjMtMTEuMSwxcy0yLjMsOC4z''@;'; put 'put ''LDEsMTEuMVxuICAgICAgICAgICAgICAgICAgICBjMC42LDAuNSwxLjIsMC45LDEuOCwxLjF2Mi4ybC0xLjYtMS41Yy0xLjQtMS40LTMuNy0xLjQtNS4yLDBjLTEuNCwxLjQtMS41LDMuNi0wLjEsNWw0LjYsNS40YzAuMiwxLjQsMC43LDIuNywxLjQsMy45XG4gICAgICAgICAgICAgICAgICAg''@;'; put 'put ''IGMwLjUsMC45LDEuMiwxLjgsMS45LDIuNXYxLjljMCwwLjYsMC40LDEsMSwxaDEzLjZjMC41LDAsMS0wLjUsMS0xdi0yLjZjMS45LTIuMywyLjktNS4yLDIuOS04LjF2LTUuOFxuICAgICAgICAgICAgICAgICAgICBDMzAuNywxNy45LDMwLjYsMTcuNywzMC40LDE3LjZ6IE04LjQsOC4yYzAt''@;'; put 'put ''My4zLDIuNy01LjksNi01LjhjMy4zLDAsNS45LDIuNyw1LjgsNmMwLDEuOC0wLjgsMy40LTIuMiw0LjVWNy45XG4gICAgICAgICAgICAgICAgICAgIGMtMC4xLTEuOC0xLjYtMy4yLTMuNC0zLjJjLTEuOC0wLjEtMy40LDEuNC0zLjQsMy4ydjUuMkM5LjUsMTIuMSw4LjUsMTAuMiw4LjQsOC4y''@;'; put 'put ''TDguNCw4LjJ6IE0yOC43LDI0YzAuMSwyLjYtMC44LDUuMS0yLjUsNy4xXG4gICAgICAgICAgICAgICAgICAgIGMtMC4yLDAuMi0wLjQsMC40LTAuNCwwLjd2Mi4xSDE0LjJ2LTEuNGMwLTAuMy0wLjItMC42LTAuNC0wLjhjLTAuNy0wLjYtMS4zLTEuMy0xLjgtMi4yYy0wLjYtMS0xLTIuMi0x''@;'; put 'put ''LjItMy40XG4gICAgICAgICAgICAgICAgICAgIGMwLTAuMi0wLjEtMC40LTAuMi0wLjZsLTQuOC01LjdjLTAuMy0wLjMtMC41LTAuNy0wLjUtMS4yYzAtMC40LDAuMi0wLjksMC41LTEuMmMwLjctMC42LDEuNy0wLjYsMi40LDBsMi45LDIuOXYzbDEuOS0xVjcuOVxuICAgICAgICAgICAgICAg''@;'; put 'put ''ICAgICBjMC4xLTAuNywwLjctMS4zLDEuNS0xLjJjMC43LDAsMS40LDAuNSwxLjQsMS4ydjExLjVsMiwwLjR2LTQuNmMwLjEtMC4xLDAuMi0wLjEsMC4zLTAuMmMwLjcsMCwxLjQsMC4xLDIuMSwwLjJ2NS4xbDEuNiwwLjN2LTUuMlxuICAgICAgICAgICAgICAgICAgICBsMS4yLDAuM2MwLjUs''@;'; put 'put ''MC4xLDEsMC4zLDEuNSwwLjV2NWwxLjYsMC4zdi00LjZjMC45LDAuNCwxLjcsMSwyLjQsMS43TDI4LjcsMjR6Ii8+JyksaC5DbHJTaGFwZVJlc2l6ZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDRhMSwx''@;'; put 'put ''LDAsMCwwLDAsMmg5LjU5bC05LjI1LDkuMjVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMCw3LjQxVjE3YTEsMSwwLDAsMCwyLDBWNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDEsMiwwdjku''@;'; put 'put ''NTlsOS4yNS05LjI1YTEsMSwwLDEsMSwxLjQxLDEuNDFMNy40MSwzMEgxN2ExLDEsMCwwLDEsMCwySDRaIi8+JyksaC5DbHJTaGFwZU9iamVjdHM9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4wOCwxNC45''@;'; put 'put ''YTEwLjQxLDEwLjQxLDAsMCwxLDEuODctLjcxbC00LTEwLjc3YTIsMiwwLDAsMC0zLjc1LDBMMiwyNS4yNkEyLDIsMCwwLDAsMy45MiwyOGg2Ljk0YTEwLDEwLDAsMCwxLS41Mi0ySDMuOTJMMTIuMDYsNC4xMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsOUgyMmEyLDIsMCwwLDAtMiwydjIuODVjLjIzLDAsLjQ2LDAsLjY5LDBBMTAuNTEsMTAuNTEsMCwwLDEsMjIsMTMuOVYxMUgzMlYyMUgzMC42NWExMC40MiwxMC40MiwwLDAsMSwuNDUsMkgzMmEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwz''@;'; put 'put ''Miw5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMC42OSwxNS44MWE4LjUsOC41LDAsMSwwLDguNSw4LjVBOC41MSw4LjUxLDAsMCwwLDIwLjY5LDE1LjgxWm0wLDE1YTYuNSw2LjUsMCwxLDEsNi41LTYuNUE2''@;'; put 'put ''LjUxLDYuNTEsMCwwLDEsMjAuNjksMzAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAuNjUsMjQuNDRhOS41MSw5LjUxLDAsMCwxLDcuMDYtOS4xN0wxMywzYTEsMSwwLDAsMC0xLjg3LDBMMi4wNywyNi41NkEx''@;'; put 'put ''LDEsMCwwLDAsMywyNy45Mmg4LjMyQTkuNDQsOS40NCwwLDAsMSwxMC42NSwyNC40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMiwxMEgyMGExLDEsMCwwLDAtMSwxdjRhOS40Myw5LjQzLDAsMCwxLDEwLjYzLDlI''@;'; put 'put ''MzJhMSwxLDAsMCwwLDEtMVYxMUExLDEsMCwwLDAsMzIsMTBaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGN4PSIyMC4xNSIgY3k9IjI0LjQ0IiByPSI3LjUiLz4nKSxoLkNsclNoYXBlQm9vaz0oMCxzLmNsckljb25TVkcp''@;'; put 'put ''KCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTAiIHk9IjUuMiIgd2lkdGg9IjE4IiBoZWlnaHQ9IjEuNTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjksOEg5''@;'; put 'put ''Ljg2QTEuODksMS44OSwwLDAsMSw4LDYsMiwyLDAsMCwxLDkuODYsNEgyOWExLDEsMCwwLDAsMC0ySDkuODZBNCw0LDAsMCwwLDYsNmE0LjE0LDQuMTQsMCwwLDAsMCwuNDksMSwxLDAsMCwwLDAsLjI0VjMwYTQsNCwwLDAsMCwzLjg2LDRIMjlhMSwxLDAsMCwwLDEtMVY5LjI1czAtLjA2LDAt''@;'; put 'put ''LjA5LDAtLjA2LDAtLjA5QTEuMDcsMS4wNywwLDAsMCwyOSw4Wk0yOCwzMkg5Ljg2QTIsMiwwLDAsMSw4LDMwVjkuNTVBMy42MywzLjYzLDAsMCwwLDkuODYsMTBIMjhaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSIxMCIg''@;'; put 'put ''eT0iNS4yIiB3aWR0aD0iMTgiIGhlaWdodD0iMS41NSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5LDhIOS44NkExLjg5LDEuODksMCwwLDEsOCw2LDIsMiwwLDAsMSw5Ljg2LDRIMjlhMSwxLDAsMSwwLDAtMkg5Ljg2''@;'; put 'put ''QTQsNCwwLDAsMCw2LDZhNC4xNCw0LjE0LDAsMCwwLDAsLjQ5LDEsMSwwLDAsMCwwLC4yNFYzMGE0LDQsMCwwLDAsMy44Niw0SDI5YTEsMSwwLDAsMCwxLTFWOS4yNXMwLS4wNiwwLS4wOSwwLS4wNiwwLS4wOUExLjA3LDEuMDcsMCwwLDAsMjksOFoiLz4nKSxoLkNsclNoYXBlQXN0ZXJpc2s9''@;'; put 'put ''KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCww''@;'; put 'put ''LDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1''@;'; put 'put ''YTMsMywwLDEsMCwzLTUuMThaTTI4LjI0LDI0YTEsMSwwLDAsMS0xLjM3LjM2TDE5LDE5Ljc1VjI5YTEsMSwwLDAsMS0yLDBWMTkuNzVMOS4xMywyNC4zNmExLDEsMCwwLDEtMS0xLjcyTDE2LDE4bC03LjktNC42NGExLDEsMCwxLDEsMS0xLjcyTDE3LDE2LjI1VjdhMSwxLDAsMCwxLDIsMHY5''@;'; put 'put ''LjI1bDcuODctNC42MmExLDEsMCwwLDEsMSwxLjcyTDIwLDE4bDcuOSw0LjY0QTEsMSwwLDAsMSwyOC4yNCwyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44NmEzLjEx''@;'; put 'put ''LDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1''@;'; put 'put ''LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaIi8+JyksaC5DbHJTaGFwZVNjaXNzb3JzPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIlxuICAgICAgICAgICAgZD0iTTI0LjA2LDE4LjE4bDkuNjEtOC43N2ExLDEsMCwwLDAtLjA5LTEuNTVsLTIuMjQtMS42YTMuNTcsMy41NywwLDAsMC00LjI4LjEyTDE1Ljg4LDE1LjNsLTMuMjYtMi41MmE1LjQ1LDUuNDUsMCwxLDAtMSwxLjc3bDIuNjIsMkwxMCwyMGE1LjQ4LDUuNDgs''@;'; put 'put ''MCwxLDAsMS41OSwxLjI5TDI4LjMsNy45NGExLjU3LDEuNTcsMCwwLDEsMS44OC0uMDVsMS4yMy44OEwyMS4xLDE4LjE5bDEwLjMxLDkuNC0xLjIzLjg4YTEuNTcsMS41NywwLDAsMS0xLjg4LS4wNWwtOS44MS03Ljg1TDE3LDIxLjkzbDEwLjA2LDhhMy41NywzLjU3LDAsMCwwLDQuMjkuMTJs''@;'; put 'put ''Mi4yNC0xLjZhMSwxLDAsMCwwLC4wOS0xLjU1Wk03LjQ1LDE0LjU0YTMuNDYsMy40NiwwLDEsMSwzLjQ1LTMuNDZBMy40NiwzLjQ2LDAsMCwxLDcuNDUsMTQuNTRabTAsMTMuNzJBMy40NiwzLjQ2LDAsMSwxLDEwLjksMjQuOCwzLjQ2LDMuNDYsMCwwLDEsNy40NSwyOC4yNloiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy44MSw4LjEzLDMxLjYzLDYuNDhhMS45MiwxLjkyLDAsMCwwLTIuMzYsMEwxMCwyMi4wNmE1LjQ2LDUuNDYsMCwxLDAsMiwxLjgxbDMuOS0zLjEyTDI5LjI3LDMxLjUyYTEuOTIsMS45Miww''@;'; put 'put ''LDAsMCwyLjM2LDBsMi4xOC0xLjY0TDIwLjk0LDE5Wk03LjQ1LDI5Ljc1YTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NywyLjg3LDAsMCwxLDcuNDUsMjkuNzVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTQu''@;'; put 'put ''MywxNS4yNCwxMiwxMy4zOGE1LjQ2LDUuNDYsMCwxLDAtMiwxLjgxTDEyLjE2LDE3Wm0tNi44NS0yYTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NiwyLjg2LDAsMCwxLDcuNDUsMTMuMjNaIi8+JyksaC5DbHJTaGFwZUJ1Zz0oMCxzLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMjMuNTYiIGN5PSIxNy43NCIgcj0iMS45NSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjIyLjQyIiBjeT0iMjUuODgiIHI9IjEuNTgiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGN4PSIxMi44NiIgY3k9IjE3Ljc0IiByPSIxLjk1Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBjeD0i''@;'; put 'put ''MTMuOTkiIGN5PSIyNS44OCIgcj0iMS41OCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0z''@;'; put 'put ''LDEuNjRBMTcuNjUsMTcuNjUsMCwwLDEsMjcsMjAuNzJDMjcsMjcsMjMuOCwzMS4yMywxOC44LDMxLjYyVjE1SDE3LjJWMzEuNjJDMTIuMjIsMzEuMjEsOSwyNyw5LDIwLjcyYTE3Ljc0LDE3Ljc0LDAsMCwxLDEuNzMtNy4zNEw3LjcsMTEuNzJhMSwxLDAsMCwwLS45NSwxLjc2bDEuNS44QTE5''@;'; put 'put ''LjM4LDE5LjM4LDAsMCwwLDcuMDcsMjBINS4xN2ExLDEsMCwwLDAsMCwySDcuMWExNC42MiwxNC42MiwwLDAsMCwxLjY2LDYuMTdMNi44NywyOS40OUExLDEsMCwxLDAsOCwzMS4xMmwxLjg0LTEuMjlBMTAuMzgsMTAuMzgsMCwwLDAsMTgsMzMuNjZhMTAuMzgsMTAuMzgsMCwwLDAsOC4xNC0z''@;'; put 'put ''LjgxTDI4LDMxLjEyYTEsMSwwLDEsMCwxLjE1LTEuNjRsLTEuODYtMS4zQTE0LjYxLDE0LjYxLDAsMCwwLDI4Ljk0LDIyaDEuODlhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMTEuNTEs''@;'; put 'put ''NS4zNmExLjY3LDEuNjcsMCwwLDAsMS4wNy0uNTFBMy4yMSwzLjIxLDAsMCwxLDEzLjc2LDZhMTYuMzgsMTYuMzgsMCwwLDAtMi42NSwyLjg5LDIsMiwwLDAsMCwxLjYxLDMuMTlIMjMuMzJBMiwyLDAsMCwwLDI1LjEsMTFhMiwyLDAsMCwwLS4xNy0yLjFBMTYuMzQsMTYuMzQsMCwwLDAsMjIu''@;'; put 'put ''MjUsNmEzLjIxLDMuMjEsMCwwLDEsMS4xNy0xLjExQTEuNjgsMS42OCwwLDEsMCwyMywzLjI3LDQuNzcsNC43NywwLDAsMCwyMSw1YTUuODEsNS44MSwwLDAsMC0yLjkzLTEsNS44Myw1LjgzLDAsMCwwLTMsMUE0Ljc3LDQuNzcsMCwwLDAsMTMsMy4yN2ExLjY4LDEuNjgsMCwxLDAtMS40OSwy''@;'; put 'put ''LjA5Wk0xOCw2LjA3YzEuNDUsMCwzLjUzLDEuNTcsNS4zMSw0aDBsLTEwLjYsMEMxNC40OSw3LjYzLDE2LjU2LDYuMDcsMTgsNi4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4y''@;'; put 'put ''OSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuMjhIMTAuNzhMNy43LDExLjcyYTEsMSwwLDAsMC0uOTUsMS43NmwxLjUuOEExOS4zOCwxOS4zOCwwLDAsMCw3LjA3LDIwSDUuMTdhMSwxLDAsMCwwLDAsMkg3LjFhMTQuNjIsMTQuNjIsMCwwLDAsMS42''@;'; put 'put ''Niw2LjE3TDYuODcsMjkuNDlBMSwxLDAsMSwwLDgsMzEuMTJsMS44NC0xLjI5QTEwLjI5LDEwLjI5LDAsMCwwLDE3LDMzLjZWMTVoMlYzMy42YTEwLjI5LDEwLjI5LDAsMCwwLDcuMTYtMy43NUwyOCwzMS4xMmExLDEsMCwxLDAsMS4xNS0xLjY0bC0xLjg2LTEuM0ExNC42MSwxNC42MSwwLDAs''@;'; put 'put ''MCwyOC45NCwyMmgxLjg5YTEsMSwwLDAsMCwwLTJaTTEwLjkxLDE3Ljc0YTEuOTUsMS45NSwwLDEsMSwxLjk1LDEuOTVBMS45NSwxLjk1LDAsMCwxLDEwLjkxLDE3Ljc0Wk0xNCwyNy40NmExLjU4LDEuNTgsMCwxLDEsMS41OC0xLjU4QTEuNTgsMS41OCwwLDAsMSwxNCwyNy40NlptOC40Myww''@;'; put 'put ''QTEuNTgsMS41OCwwLDEsMSwyNCwyNS44OCwxLjU4LDEuNTgsMCwwLDEsMjIuNDIsMjcuNDZabTEuMTMtNy43N2ExLjk1LDEuOTUsMCwxLDEsMS45NS0xLjk1QTEuOTUsMS45NSwwLDAsMSwyMy41NiwxOS42OVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMS4yMyw1LjI2YTEuNjcsMS42NywwLDAsMCwuNTQtLjMyLDUuOSw1LjksMCwwLDEsLjg5LjU4LDcuNDQsNy40NCwwLDAsMSwuOTUuOTRBMTguNDgsMTguNDgsMCwwLDAsMTAuNzksOS43Yy0uNC41Ny4wOSwxLjI4Ljg2LDEuMjhIMjQuNDRjLjc3LDAsMS4y''@;'; put 'put ''Ni0uNzEuODYtMS4yOGExOC4zOCwxOC4zOCwwLDAsMC0yLjg4LTMuMjgsNy4yOCw3LjI4LDAsMCwxLC45MS0uOSw1LjksNS45LDAsMCwxLC44OS0uNTgsMS42OSwxLjY5LDAsMSwwLS41Ni0xLjUxLDcuNDksNy40OSwwLDAsMC0xLjMyLjgzLDkuMDYsOS4wNiwwLDAsMC0xLjE5LDEuMThBNS44''@;'; put 'put ''NSw1Ljg1LDAsMCwwLDE4LDQuM2E1LjkxLDUuOTEsMCwwLDAtMy4xNywxLjE5LDkuMiw5LjIsMCwwLDAtMS4yMi0xLjIxLDcuNDksNy40OSwwLDAsMC0xLjMyLS44MywxLjY4LDEuNjgsMCwxLDAtMS4xMSwxLjgzWiIvPicpLGguQ2xyU2hhcGVUaGVybW9tZXRlcj0oMCxzLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDIzLjE3VjExLjQ2SDE3VjIzLjJhMywzLDAsMSwwLDIsMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYs''@;'; put 'put ''MTVhMSwxLDAsMCwwLDAtMkgyMy45MlYxMUgyNmExLDEsMCwwLDAsMC0ySDIzLjkyVjhhNiw2LDAsMCwwLTEyLDBWMjAuODFhOCw4LDAsMSwwLDEyLS4yVjE5SDI2YTEsMSwwLDAsMCwwLTJIMjMuOTJWMTVaTTI0LDI2YTYsNiwwLDEsMS0xMC4zNi00LjEybC4yNy0uMjlWOGE0LDQsMCwwLDEs''@;'; put 'put ''OCwwVjIxLjQ0bC4zLjI5QTYsNiwwLDAsMSwyNCwyNloiLz4nKSxoLkNsclNoYXBlUGVuY2lsPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuODcsOC4zMiwyOCwyLjQyYTIuMDcsMi4wNywwLDAsMC0yLjky''@;'; put 'put ''LDBMNC4yNywyMy4ybC0xLjksOC4yYTIuMDYsMi4wNiwwLDAsMCwyLDIuNSwyLjE0LDIuMTQsMCwwLDAsLjQzLDBMMTMuMDksMzIsMzMuODcsMTEuMjRBMi4wNywyLjA3LDAsMCwwLDMzLjg3LDguMzJaTTEyLjA5LDMwLjIsNC4zMiwzMS44M2wxLjc3LTcuNjJMMjEuNjYsOC43bDYsNlpNMjks''@;'; put 'put ''MTMuMjVsLTYtNiwzLjQ4LTMuNDYsNS45LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTQuMjIsMjMuMmwtMS45LDguMmEyLjA2LDIuMDYsMCwwLDAsMiwyLjUsMi4xNCwyLjE0LDAsMCwwLC40MywwTDEzLDMy''@;'; put 'put ''LDI4Ljg0LDE2LjIyLDIwLDcuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODIsOC4zMmwtNS45LTUuOWEyLjA3LDIuMDcsMCwwLDAtMi45MiwwTDIxLjcyLDUuN2w4LjgzLDguODMsMy4yOC0zLjI4QTIu''@;'; put 'put ''MDcsMi4wNywwLDAsMCwzMy44Miw4LjMyWiIvPicpLGguQ2xyU2hhcGVOb3RlPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTVsLTIsMloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjUzLDUuODQsMzAuMTYsMi40N2ExLjYxLDEuNjEsMCwwLDAtMi4yOCwwTDE0LjE3LDE2LjI2bC0xLjExLDQuODFBMS42MSwxLjYxLDAsMCwwLDE0LjYzLDIzLDEuNjksMS42OSwwLDAs''@;'; put 'put ''MCwxNSwyM2w0Ljg1LTEuMDdMMzMuNTMsOC4xMkExLjYxLDEuNjEsMCwwLDAsMzMuNTMsNS44NFpNMTguODEsMjAuMDhsLTMuNjYuODFMMTYsMTcuMjYsMjYuMzIsNi44N2wyLjgyLDIuODJaTTMwLjI3LDguNTYsMjcuNDUsNS43NCwyOSw0LjE2LDMxLjg0LDdaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2SDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTEuNzZsMy0zQTEuNjcs''@;'; put 'put ''MS42NywwLDAsMCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwzLjIzLDMuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGguQ2xyU2hhcGVS''@;'; put 'put ''ZWZyZXNoPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjIuNCwxMS42NWExLjA5LDEuMDksMCwwLDAsMS4wOSwxLjA5SDM0LjQzVjEuODFhMS4wOSwxLjA5LDAsMSwwLTIuMTksMFY4Ljk1YTE2LjQxLDE2LjQx''@;'; put 'put ''LDAsMSwwLDEuNDcsMTUuODYsMS4xMiwxLjEyLDAsMCwwLTIuMDUtLjksMTQuMTgsMTQuMTgsMCwxLDEtMS4wNS0xMy4zNkgyMy41QTEuMDksMS4wOSwwLDAsMCwyMi40LDExLjY1WiIvPicpLGguQ2xyU2hhcGVTeW5jPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuODQsMTUuNzJhMSwxLDAsMSwwLTIsLjI5QTEzLjE1LDEzLjE1LDAsMCwxLDMxLDE3Ljk0LDEzLDEzLDAsMCwxLDguNywyN2g1LjM2YTEsMSwwLDAsMCwwLTJoLTl2OWExLDEsMCwxLDAsMiwwVjI4LjJBMTUsMTUsMCwwLDAsMzIuODQs''@;'; put 'put ''MTUuNzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC4wNiwxQTEuMDUsMS4wNSwwLDAsMCwyOSwyVjcuODNBMTQuOTQsMTQuOTQsMCwwLDAsMywxNy45NGExNS4xNiwxNS4xNiwwLDAsMCwuMiwyLjQ4''@;'; put 'put ''LDEsMSwwLDAsMCwxLC44NGguMTZhMSwxLDAsMCwwLC44Mi0xLjE1QTEzLjIzLDEzLjIzLDAsMCwxLDUsMTcuOTRhMTMsMTMsMCwwLDEsMTMtMTNBMTIuODcsMTIuODcsMCwwLDEsMjcuNDQsOUgyMi4wNmExLDEsMCwwLDAsMCwySDMxVjJBMSwxLDAsMCwwLDMwLjA2LDFaIi8+JyksaC5DbHJT''@;'; put 'put ''aGFwZVZpZXdMaXN0PSgwLHMuY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIGQ9Ik03LDEwSDMxYTEsMSwwLDAsMCwwLTJIN2ExLDEsMCwwLDAsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyIiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzEsMTRIN2ExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTUiIHg9IjIiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0zMSwyMEg3YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMiIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIg''@;'; put 'put ''ZD0iTTMxLDI2SDdhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPicpLGguQ2xyU2hhcGVWaWV3Q2FyZHM9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEy''@;'; put 'put ''LDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwxN0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAs''@;'; put 'put ''MCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEs''@;'; put 'put ''Mi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMyLDMwSDIxYTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDIt''@;'; put 'put ''MkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPicpLGguQ2xyU2hhcGVMaWdodGJ1bGI9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDIuMjVhMTEsMTEsMCwwLDAtMTEsMTEsMTAuNjgsMTAuNjgsMCwwLDAsMSw0LjYzLDE2LjM2LDE2''@;'; put 'put ''LjM2LDAsMCwwLDEuMTIsMS43OCwxNywxNywwLDAsMSwyLDMuNDcsMTYuMTksMTYuMTksMCwwLDEsLjU5LDRoMkExOC4xNywxOC4xNywwLDAsMCwxMywyMi40NGExOC40NiwxOC40NiwwLDAsMC0yLjIyLTMuOTIsMTUuNzksMTUuNzksMCwwLDEtMS0xLjU0QTguNjQsOC42NCwwLDAsMSw5LDEz''@;'; put 'put ''LjIzYTksOSwwLDAsMSwxOC4wNywwQTguNjQsOC42NCwwLDAsMSwyNi4yMSwxN2ExNS43OSwxNS43OSwwLDAsMS0xLDEuNTRBMTguNDYsMTguNDYsMCwwLDAsMjMsMjIuNDRhMTguMTcsMTguMTcsMCwwLDAtLjcxLDQuNzFoMmExNi4xOSwxNi4xOSwwLDAsMSwuNTktNCwxNywxNywwLDAsMSwy''@;'; put 'put ''LTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjgsMTAuNjgsMCwwLDAsMS00LjYzQTExLDExLDAsMCwwLDE4LDIuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjYzLDE1LjUxYS44Ljgs''@;'; put 'put ''MCwwLDAtMS4xMywwbC0zLDMsMi44NiwzLjEzdjUuNTRIMTlWMjFsLTIuMjQtMi40NSwxLjg5LTEuODlBLjguOCwwLDAsMCwxOC42MywxNS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODYsMjkuMTVI''@;'; put 'put ''MTIuMTFhLjguOCwwLDEsMCwwLDEuNkgyMy44NmEuOC44LDAsMCwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjMyLDEwLjg5bC0yLjczLDIuNzNhLjguOCwwLDAsMCwxLjEzLDEuMTNMMTguNDUsMTJhLjguOCwwLDEsMC0xLjEzLTEuMTNaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDI3LjE1VjIxbC0yLjI0LTIuNDUsMS44OS0xLjg5YS44LjgsMCwwLDAtMS4xMy0xLjEzbC0zLDMsMi44NiwzLjEzdjUuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS43Miwx''@;'; put 'put ''NC43NSwxOC40NSwxMmEuOC44LDAsMSwwLTEuMTMtMS4xM2wtMi43MywyLjczYS44LjgsMCwwLDAsMS4xMywxLjEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcsMTIuODhjMCwu''@;'; put 'put ''MTIsMCwuMjMsMCwuMzVBOC42NCw4LjY0LDAsMCwxLDI2LjIxLDE3YTE1Ljc5LDE1Ljc5LDAsMCwxLTEsMS41NEExOC40NiwxOC40NiwwLDAsMCwyMywyMi40NGExOC4xNywxOC4xNywwLDAsMC0uNzEsNC43MWgyYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0Ex''@;'; put 'put ''Ni4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy40NSw3LjQ1LDAsMCwxLDI3LDEyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMu''@;'; put 'put ''NzEsMjcuMTVBMTguMTcsMTguMTcsMCwwLDAsMTMsMjIuNDRhMTguNDYsMTguNDYsMCwwLDAtMi4yMi0zLjkyLDE1Ljc5LDE1Ljc5LDAsMCwxLTEtMS41NEE4LjY0LDguNjQsMCwwLDEsOSwxMy4yMyw5LDksMCwwLDEsMjIuNTMsNS40N2E3LjQ1LDcuNDUsMCwwLDEsLjQzLTIsMTEsMTEsMCww''@;'; put 'put ''LDAtMTYsOS44LDEwLjY4LDEwLjY4LDAsMCwwLDEsNC42MywxNi4zNiwxNi4zNiwwLDAsMCwxLjEyLDEuNzgsMTcsMTcsMCwwLDEsMiwzLjQ3LDE2LjE5LDE2LjE5LDAsMCwxLC41OSw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjg2LDI5LjE1SDEyLjExYS44Ljgs''@;'; put 'put ''MCwxLDAsMCwxLjZIMjMuODZhLjguOCwwLDAsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi4yNWExMSwxMSwwLDAsMC0xMSwxMSwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAs''@;'; put 'put ''MSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42OCwxMC42OCww''@;'; put 'put ''LDAsMCwxLTQuNjNBMTEsMTEsMCwwLDAsMTgsMi4yNVpNMTguNDUsMTJsLTIuNzMsMi43M2EuOC44LDAsMSwxLTEuMTMtMS4xM2wyLjczLTIuNzNBLjguOCwwLDEsMSwxOC40NSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDMyLjE1SDE0YS44LjgsMCwx''@;'; put 'put ''LDAsMCwxLjZIMjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2QTcuNDcsNy40NywwLDAsMSwyMywzLjQ0YTExLDExLDAsMCwwLTE2LDkuOCwxMC42''@;'; put 'put ''OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4z''@;'; put 'put ''YTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy41LDcuNSwwLDAsMSwyMi41LDZabS00LDYtMi43MywyLjczYS44LjgsMCwxLDEtMS4xMy0xLjEzbDIuNzMtMi43M0Eu''@;'; put 'put ''OC44LDAsMSwxLDE4LjQ1LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxoLkNsclNoYXBlRG93bmxvYWQ9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDI5LjQ4LDI4LjYxLDE4Ljg3YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMjUuNjVWNWExLDEsMCwwLDAtMiwwVjI1LjY1TDguODEsMTcuNDZhMSwxLDAsMSwwLTEuNDEsMS40''@;'; put 'put ''MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xOCwyOS40OCwyOC42MSwxOC44N2ExLDEsMCwwLDAtMS40MS0xLjQxTDE5LDI1LjY1VjVhMSwxLDAsMCwwLTIsMFYyNS42NUw4LjgxLDE3LjQ2YTEsMSwwLDEsMC0xLjQxLDEuNDFaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVk''@;'; put 'put ''IiBkPSJNMTgsMjkuNDgsMjguNjEsMTguODdhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwyNS42NVY1YTEsMSwwLDAsMC0yLDBWMjUuNjVMOC44MSwxNy40NmExLDEsMCwxLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+''@;'; put 'put ''JyksaC5DbHJTaGFwZVVwbG9hZD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMjZjMC42LDAsMS0wLjQsMS0xUzMxLjYsMzEsMzEsMzF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik04LjgsMTVMMTcsNi44djIwLjZjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMVY2LjhMMjAuMSw4bDEtMS44TDE4LDNMNy40LDEzLjZDNywxNCw2LjksMTQuNiw3LjIsMTVzMSww''@;'; put 'put ''LjUsMS40LDAuMUM4LjcsMTUuMSw4LjgsMTUuMSw4LjgsMTV6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42''@;'; put 'put ''LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzEsMzFINWExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGguQ2xyU2hhcGVMb2NrPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMDksMjAuNTlBMi40MSwyLjQxLDAsMCwwLDE3LDI1LjE0VjI4aDJWMjUuMjNhMi40MSwyLjQxLDAsMCwwLS45MS00LjY0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBk''@;'; put 'put ''PSJNMjYsMTVWMTAuNzJhOC4yLDguMiwwLDAsMC04LTguMzYsOC4yLDguMiwwLDAsMC04LDguMzZWMTVIN1YzMmEyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMTVaTTEyLDEwLjcyYTYuMiw2LjIsMCwwLDEsNi02LjM2LDYuMiw2LjIsMCwwLDEsNiw2LjM2VjE1SDEyWk05LDMyVjE3''@;'; put 'put ''SDI3VjMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwxNVYxMC43MmE4LjIsOC4yLDAsMCwwLTgtOC4zNiw4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUg3VjMyYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCww''@;'; put 'put ''LDItMlYxNVpNMTksMjUuMjNWMjhIMTdWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVpNMjQsMTVIMTJWMTAuNzJhNi4yLDYuMiwwLDAsMSw2LTYuMzYsNi4yLDYuMiwwLDAsMSw2LDYuMzZaIi8+JyksaC5DbHJTaGFwZVVubG9jaz0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLDI1LjE0VjI4aDJWMjUuMjNhMi40MiwyLjQyLDAsMSwwLTItLjA5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMmE4LjIsOC4y''@;'; put 'put ''LDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMjIsMTdWMzJINFYxN1oi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRh''@;'; put 'put ''Ni4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMTQsMjUuMjNWMjhIMTJWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVoiLz4nKSxoLkNsclNoYXBlVXNlcnM9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy45LDE3LjNjMi43LDAsNC44LTIuMiw0LjgtNC45YzAtMi43LTIuMi00LjgtNC45LTQuOGMtMi43LDAtNC44LDIuMi00LjgsNC44QzEzLDE1LjEsMTUuMiwxNy4zLDE3LjksMTcuM3ogTTE3LjgsOS42QzE3LjksOS42LDE3Ljks''@;'; put 'put ''OS42LDE3LjgsOS42YzEuNiwwLDIuOSwxLjMsMi45LDIuOXMtMS4zLDIuOC0yLjksMi44Yy0xLjYsMC0yLjgtMS4zLTIuOC0yLjhDMTUsMTAuOSwxNi4zLDkuNiwxNy44LDkuNnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIgZD0iTTMyLjcsMTYuN2MtMS45LTEuNy00LjQtMi42LTctMi41Yy0wLjMsMC0wLjUsMC0wLjgsMGMtMC4yLDAuOC0wLjUsMS41LTAuOSwyLjFjMC42LTAuMSwxLjEtMC4xLDEuNy0wLjFjMS45LTAuMSwzLjgsMC41LDUuMywxLjZWMjVoMnYtOEwzMi43LDE2Ljd6Ii8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMy40LDcuOGMwLjUtMS4yLDEuOS0xLjgsMy4yLTEuM2MxLjIsMC41LDEuOCwxLjksMS4zLDMuMmMtMC40LDAuOS0xLjMsMS41LTIuMiwxLjVjLTAuMiwwLTAuNSwwLTAuNy0wLjFj''@;'; put 'put ''MC4xLDAuNSwwLjEsMSwwLjEsMS40YzAsMC4yLDAsMC40LDAsMC42YzAuMiwwLDAuNCwwLjEsMC42LDAuMWMyLjUsMCw0LjUtMiw0LjUtNC40YzAtMi41LTItNC41LTQuNC00LjVjLTEuNiwwLTMsMC44LTMuOCwyLjJDMjIuNSw2LjgsMjMsNy4yLDIzLjQsNy44eiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMTIsMTYuNGMtMC40LTAuNi0wLjctMS4zLTAuOS0yLjFjLTAuMywwLTAuNSwwLTAuOCwwYy0yLjYtMC4xLTUuMSwwLjgtNywyLjRMMywxN3Y4aDJ2LTcuMmMxLjYtMS4xLDMuNC0xLjcsNS4z''@;'; put 'put ''LTEuNkMxMC45LDE2LjIsMTEuNSwxNi4zLDEyLDE2LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0xMC4zLDEzLjFjMC4yLDAsMC40LDAsMC42LTAuMWMwLTAuMiwwLTAuNCwwLTAuNmMwLTAuNSwwLTEs''@;'; put 'put ''MC4xLTEuNGMtMC4yLDAuMS0wLjUsMC4xLTAuNywwLjFjLTEuMywwLTIuNC0xLjEtMi40LTIuNGMwLTEuMywxLjEtMi40LDIuNC0yLjRjMSwwLDEuOSwwLjYsMi4zLDEuNWMwLjQtMC41LDEtMSwxLjUtMS40Yy0xLjMtMi4xLTQtMi44LTYuMS0xLjVjLTIuMSwxLjMtMi44LDQtMS41LDYuMUM3''@;'; put 'put ''LjMsMTIuMyw4LjcsMTMuMSwxMC4zLDEzLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0yNi4xLDIyLjdsLTAuMi0wLjNjLTItMi4yLTQuOC0zLjUtNy44LTMuNGMtMy0wLjEtNS45LDEuMi03LjksMy40''@;'; put 'put ''TDEwLDIyLjd2Ny42YzAsMC45LDAuNywxLjcsMS43LDEuN2MwLDAsMCwwLDAsMGgxMi44YzAuOSwwLDEuNy0wLjgsMS43LTEuN2MwLDAsMCwwLDAsMFYyMi43eiBNMjQuMSwzMEgxMnYtNi42YzEuNi0xLjYsMy44LTIuNCw2LjEtMi40YzIuMi0wLjEsNC40LDAuOCw2LDIuNFYzMHoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTExLjA5LDE0LjU3Yy4xLDAsLjIsMCwuMzEsMGE2LjQzLDYuNDMsMCwwLDEsLjA5LTIsMi4wOSwyLjA5LDAsMSwxLDEuNDctMyw2LjU4LDYu''@;'; put 'put ''NTgsMCwwLDEsMS41NS0xLjMxLDQuMDksNC4wOSwwLDEsMC0zLjQyLDYuMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4y''@;'; put 'put ''OC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTMxLjM1LDE4LjQyQTguNTksOC41OSwwLDAsMCwyNSwxNS45MWMtLjMyLDAtLjYsMC0uOS4wNmE2LjUzLDYuNTMsMCwwLDEtMS4zNSwyLjI1QTcuOSw3LjksMCwwLDEsMjUsMTcuOTFhNi45NCw2Ljk0LDAsMCwxLDQuNjQsMS41OHY2LjI3aDJW''@;'; put 'put ''MTguN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTE4LjEsMTkuNzNBOS42OSw5LjY5LDAsMCwwLDExLDIyLjQ3bC0uMjUuMjh2Ny4zM2ExLjU3LDEuNTcsMCwwLDAsMS42''@;'; put 'put ''MSwxLjU0SDIzLjgzYTEuNTcsMS41NywwLDAsMCwxLjYxLTEuNTRWMjIuNzNsLS4yNS0uMjhBOS41OCw5LjU4LDAsMCwwLDE4LjEsMTkuNzNabTUuMzMsOS44OEgxMi43M1YyMy41NWE4LjA4LDguMDgsMCwwLDEsNS4zNy0xLjgyLDgsOCwwLDAsMSw1LjMzLDEuOFoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTIwLjI4LDE0LjI3YTIuNDYsMi40NiwwLDEsMS0yLjQyLTIuODksMi40NCwyLjQ0LDAsMCwxLDEsLjI0LDMuNjcsMy42NywwLDAsMSwuNDMtMiw0LjQxLDQu''@;'; put 'put ''NDEsMCwwLDAtMS40OC0uMjdBNC40Nyw0LjQ3LDAsMSwwLDIyLjE0LDE1LDMuNjksMy42OSwwLDAsMSwyMC4yOCwxNC4yN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1h''@;'; put 'put ''bGVydCIgZD0iTTI3LjE4LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzRhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjM5LjhBMS4yOCwxLjI4LDAsMCwwLDI3LjE4LjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEuMDksMTQuNTdjLjEsMCwuMiwwLC4zMSwwYTYuNDMsNi40MywwLDAsMSwuMDktMiwyLjA5LDIuMDksMCwxLDEsMS40Ny0zLDYuNTgsNi41OCwwLDAsMSwxLjU1LTEuMzEsNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xMywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3''@;'; put 'put ''aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMS4zNSwxOC40MkE4LjU5LDguNTks''@;'; put 'put ''MCwwLDAsMjUsMTUuOTFjLS4zMiwwLS42LDAtLjkuMDZhNi41Myw2LjUzLDAsMCwxLTEuMzUsMi4yNUE3LjksNy45LDAsMCwxLDI1LDE3LjkxYTYuOTQsNi45NCwwLDAsMSw0LjY0LDEuNTh2Ni4yN2gyVjE4LjdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMTcuODYsMTguM2E0LjQ3LDQuNDcsMCwxLDAtNC40Ny00LjQ3QTQuNDcsNC40NywwLDAsMCwxNy44NiwxOC4zWm0wLTYuOTNhMi40NywyLjQ3LDAsMSwxLTIuNDcsMi40N0EyLjQ3LDIuNDcsMCwwLDEsMTcuODYs''@;'; put 'put ''MTEuMzdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMSwxOS43M0E5LjY5LDkuNjksMCwwLDAsMTEsMjIuNDdsLS4yNS4yOHY3LjMzYTEuNTcsMS41NywwLDAsMCwxLjYx''@;'; put 'put ''LDEuNTRIMjMuODNhMS41NywxLjU3LDAsMCwwLDEuNjEtMS41NFYyMi43M2wtLjI1LS4yOEE5LjU4LDkuNTgsMCwwLDAsMTguMSwxOS43M1ptNS4zMyw5Ljg4SDEyLjczVjIzLjU1YTguMDgsOC4wOCwwLDAsMSw1LjM3LTEuODIsOCw4LDAsMCwxLDUuMzMsMS44WiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTI2LjM3LDEyYTIsMiwwLDAsMS0yLjA5LjQyLDYuNTMsNi41MywwLDAsMSwuMTUsMS4zOCw2LjU5LDYuNTksMCwwLDEsMCwuNjgsNCw0LDAsMCwwLC41Ny4wNiw0''@;'; put 'put ''LjA4LDQuMDgsMCwwLDAsMy4zLTEuN0E3LjQ1LDcuNDUsMCwwLDEsMjYuMzcsMTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiBkPSJNMjIuOTUsNi45M2E0LjE2LDQuMTYsMCwwLDAt''@;'; put 'put ''MS40NywxLjQ0QTYuNTksNi41OSwwLDAsMSwyMyw5Ljc3YTIuMSwyLjEsMCwwLDEsLjU5LS44M0E3LjQ0LDcuNDQsMCwwLDEsMjIuOTUsNi45M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwLjMzIiBjeT0iNS42NyIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0''@;'; put 'put ''LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMxLjM0LDE4LjYzYTgu''@;'; put 'put ''NjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTQiIGQ9Ik0yNC40MywxMy40NGE2LjU0LDYuNTQsMCwwLDEsMCwuNjksNC4wOSw0LjA5LDAsMCwwLC41OC4wNWguMTlBNC4wOSw0LjA5LDAsMSwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgY3g9IjE3Ljg3IiBjeT0iMTMuNDUiIHI9IjQuNDciLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4y''@;'; put 'put ''NS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEt''@;'; put 'put ''MiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4y''@;'; put 'put ''LDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xOC4xMSwyMC4zQTkuNjks''@;'; put 'put ''OS42OSwwLDAsMCwxMSwyM2wtLjI1LjI4djYuMzNhMS41NywxLjU3LDAsMCwwLDEuNiwxLjU0SDIzLjg0YTEuNTcsMS41NywwLDAsMCwxLjYtMS41NFYyMy4zTDI1LjIsMjNBOS41OCw5LjU4LDAsMCwwLDE4LjExLDIwLjNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTE3Ljg3LDE3LjkyYTQuNDYsNC40NiwwLDAsMCw0LTIuNTRBMy42NywzLjY3LDAsMCwxLDE5LDkuODlsLjM1LS42MUE0LjQyLDQuNDIsMCwwLDAsMTcuODcsOWE0LjQ3LDQuNDcsMCwxLDAsMCw4LjkzWiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLDE2LjE0cS0uNDMsMC0uODcsMGE4LjY3LDguNjcs''@;'; put 'put ''MCwwLDAtNi40MywyLjUybC0uMjQuMjh2OC4yOEg4LjU0di00LjdsLjU1LS42Mi4yNS0uMjlhMTEsMTEsMCwwLDEsNC43MS0yLjg2QTYuNTgsNi41OCwwLDAsMSwxMiwxNi4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMTEuMSwxNC4xOWMuMTEsMCwuMiwwLC4zMSwwYTYuNDUsNi40NSwwLDAsMSwzLjExLTYuMjksNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiBjeD0iMTcuODciIGN5PSIxMy40NSIgcj0iNC40NyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4x''@;'; put 'put ''MSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNi0tYmFkZ2VkIiBkPSJNMjQuNDMsMTMuNDRhNi41NCw2LjU0LDAsMCwxLDAsLjY5LDQuMDksNC4wOSwwLDAsMCwuNTguMDVoLjE5YTQuMDUsNC4wNSww''@;'; put 'put ''LDAsMCwyLjUyLTEsNy41LDcuNSwwLDAsMS01LjE0LTYuMzJBNC4xMyw0LjEzLDAsMCwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1i''@;'; put 'put ''YWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxoLkNsclNoYXBlUG9wT3V0PSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcsMzNINWEyLDIsMCwwLDEtMi0yVjlBMiwyLDAsMCwx''@;'; put 'put ''LDUsN0gxNVY5SDVWMzFIMjdWMjFoMlYzMUEyLDIsMCwwLDEsMjcsMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwzYTEsMSwwLDAsMCwwLDJIMjkuNTlMMTUuNzQsMTguODVhMSwxLDAsMSwwLDEu''@;'; put 'put ''NDEsMS40MUwzMSw2LjQxVjE4YTEsMSwwLDAsMCwyLDBWM1oiLz4nKSxoLkNsclNoYXBlRmlsdGVyPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMsNEgzQTEsMSwwLDAsMCwyLDVWNi42N2ExLjc5LDEuNzks''@;'; put 'put ''MCwwLDAsLjUzLDEuMjdMMTQsMTkuNTh2MTAuMmwyLC43NlYxOWExLDEsMCwwLDAtLjI5LS43MUw0LDYuNTlWNkgzMnYuNjFMMjAuMzMsMTguMjlBMSwxLDAsMCwwLDIwLDE5bDAsMTMuMjFMMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSwwLDAsMCwzNCw2LjdWNUExLDEsMCwwLDAsMzMs''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSwwLDAsMCwzNCw2LjdWNWExLDEsMCwwLDAtMS0xSDNBMSwxLDAsMCwwLDIsNVY2LjY3YTEuNzksMS43OSwwLDAs''@;'; put 'put ''MCwuNTMsMS4yN0wxNCwxOS41OHYxMC4yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy40OCw0aC0zMUEuNTIuNTIsMCwwLDAsMiw0LjUyVjYuMjRhMS4zMywxLjMzLDAsMCwwLC4zOS45NWwxMiwxMnYxMGw3LjI1LDMuNjFWMTkuMTdsMTItMTJBMS4zNSwxLjM1LDAsMCwwLDM0''@;'; put 'put ''LDYuMjZWNC41MkEuNTIuNTIsMCwwLDAsMzMuNDgsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksaC5DbHJTaGFwZVBpbj0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMz''@;'; put 'put ''LDE2LjU5YTEsMSwwLDAsMS0uNzEtLjI5TDE5LjcsMy43MWExLDEsMCwwLDEsMS40MS0xLjQxTDMzLjcxLDE0Ljg5QTEsMSwwLDAsMSwzMywxNi41OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LjUy''@;'; put 'put ''LDE1LjU2bC0xLjQxLTEuNDEtNy4yLDcuMmExLDEsMCwwLDAtLjI1LDEsOSw5LDAsMCwxLTEuNTMsOC4wOUw1LjU4LDE3Ljg3YTksOSwwLDAsMSw4LjA5LTEuNTMsMSwxLDAsMCwwLDEtLjI1bDcuMi03LjJMMjAuNDQsNy40OGwtNi43OSw2Ljc5QTEwLjk0LDEwLjk0LDAsMCwwLDMuNDEsMTcu''@;'; put 'put ''MTFhMSwxLDAsMCwwLDAsMS40Mmw2LjMzLDYuMzNMMi4yOSwzMi4yOWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTYuNzFhMSwxLDAsMCwxLS43MS0uMjlMMTkuNywzLjgyYTEsMSwwLDAsMSwxLjQxLTEuNDFMMzMuNzEsMTVBMSwxLDAsMCwxLDMzLDE2LjcxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC40NCw3LjU5bC02Ljc5LDYuNzlBMTAuOTQsMTAuOTQsMCwwLDAsMy40MSwxNy4yMmExLDEsMCwwLDAsMCwxLjQyTDkuNzMsMjUsMi4yOSwzMi40MWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwx''@;'; put 'put ''LDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNGw2Ljc5LTYuNzlaIi8+JyksaC5DbHJTaGFwZUZpbGU9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yMS44OSw0''@;'; put 'put ''SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJabS0uMywyLjQ5LDYsNS45aC02Wk04LDMwVjZIMjB2OGg4VjMwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTIxLjU5LDEyLjM5VjYuNDlsMS4wNywxYTcuMzEsNy4zMSwwLDAsMSwwLTIuODJMMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcu''@;'; put 'put ''ODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjEzLjVhNy40NSw3LjQ1LDAsMCwxLTMuOTEtMS4xMVpNMjgsMzBIOFY2SDIwdjhoOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjgsMTUuNFYzMEg4VjZIMjBWOC4yNWwyLjI1LTMuOUwy''@;'; put 'put ''MS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJaTTIx''@;'; put 'put ''LDEzVjUuODRMMjguMywxM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI3LjI1LDEzSDIxVjUuODRsMS42NCwxLjZhNy4yNSw3LjI1LDAsMCwxLDAtMi43NEwyMS44OSw0SDcuODNB''@;'; put 'put ''MS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTMuNUE3LjQ3LDcuNDcsMCwwLDEsMjcuMjUsMTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yMi4yLDE1LjRjLTIs''@;'; put 'put ''MC0zLjctMS42LTMuNy0zLjZjMC0wLjcsMC4yLTEuMywwLjUtMS45bDMuMi01LjVMMjEuOSw0SDcuOEM2LjgsNCw2LDQuOSw2LDUuOXYyNC4yYzAsMSwwLjgsMS45LDEuOCwxLjloMjAuM2MxLDAsMS44LTAuOSwxLjgtMS45VjE1LjRIMjIuMnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJj''@;'; put 'put ''MC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPicpLGguQ2xyU2hhcGVQbHVzPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiBkPSJNMzAsMTdIMTlWNmExLDEsMCwxLDAtMiwwVjE3SDZhMSwxLDAsMCwwLTEsMSwuOTEuOTEsMCwwLDAsMSwuOTRIMTdWMzBhMSwxLDAsMSwwLDIsMFYxOUgzMGExLDEsMCwwLDAsMS0xQTEsMSwwLDAsMCwzMCwxN1oiLz4nKSxoLkNsclNoYXBlTWludXM9KDAscy5jbHJJY29uU1ZHKSgn''@;'; put 'put ''PHBhdGggZD0iTTI2LDE3SDEwYTEsMSwwLDAsMCwwLDJIMjZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGguQ2xyU2hhcGVNaW51c0NpcmNsZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEs''@;'; put 'put ''MCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTdIMTJhMSwxLDAsMCwwLDAsMkgyNGEx''@;'; put 'put ''LDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LDE3LjVIMTJhMS41LDEuNSwwLDAsMSwwLTNIMjRhMS41LDEuNSww''@;'; put 'put ''LDAsMSwwLDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGguQ2xyU2hhcGVQbHVzQ2lyY2xlPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi4xNywxN0gxOVY5LjgzYTEsMSwwLDAsMC0yLDBWMTdIOS44M2ExLDEsMCwwLDAsMCwySDE3djcuMTdh''@;'; put 'put ''MSwxLDAsMCwwLDIsMFYxOWg3LjE3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwz''@;'; put 'put ''MiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMThBMTYsMTYsMCwxLDEsMTgsMiwxNiwxNiwwLDAsMSwzNCwxOFptLTguNDEtMS41SDE5LjVWMTAuNDFhMS41LDEuNSww''@;'; put 'put ''LDAsMC0zLDBWMTYuNUgxMC40MWExLjUsMS41LDAsMCwwLDAsM0gxNi41djYuMDlhMS41LDEuNSwwLDAsMCwzLDBWMTkuNWg2LjA5YTEuNSwxLjUsMCwwLDAsMC0zWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGguQ2xyU2hhcGVCYW49KDAscy5jbHJJY29u''@;'; put 'put ''U1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTQsMThBMTMuOTMsMTMuOTMsMCwwLDEsNy40Myw4Ljg1TDI3LjE1LDI4LjU3QTE0LDE0LDAsMCwxLDQsMThabTI0''@;'; put 'put ''LjU3LDkuMTVMOC44NSw3LjQzQTE0LDE0LDAsMCwxLDI4LjU3LDI3LjE1WiIvPicpLGguQ2xyU2hhcGVUaW1lc0NpcmNsZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjYxLDE4bDQuODYtNC44NmExLDEs''@;'; put 'put ''MCwwLDAtMS40MS0xLjQxTDE4LjIsMTYuNTRsLTQuODktNC44OWExLDEsMCwwLDAtMS40MSwxLjQxTDE2Ljc4LDE4LDEyLDIyLjcyYTEsMSwwLDEsMCwxLjQxLDEuNDFsNC43Ny00Ljc3LDQuNzQsNC43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LDIyLjFhMS40LDEuNCwwLDAsMS0yLDJsLTYtNkwxMiwyNi4xMmExLjQsMS40LDAsMSwxLTItMkwxNiwxOC4wOCw5LjgzLDExLjg2YTEuNCwxLjQsMCwxLDEs''@;'; put 'put ''Mi0yTDE4LDE2LjFsNi4xNy02LjE3YTEuNCwxLjQsMCwxLDEsMiwyTDIwLDE4LjA4WiIvPicpLGguQ2xyU2hhcGVUcmFzaD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE0LDM0SDguODZBMi45MywyLjkz''@;'; put 'put ''LDAsMCwxLDYsMzFWMTEuMjNIOFYzMWEuOTMuOTMsMCwwLDAsLjg2LDFIMjcuMTRBLjkzLjkzLDAsMCwwLDI4LDMxVjExLjIzaDJWMzFBMi45MywyLjkzLDAsMCwxLDI3LjE0LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yIiBkPSJNMzAuNzgsOUg1QTEsMSwwLDAsMSw1LDdIMzAuNzhhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjEiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIxNSIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjE1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTUiIGQ9Ik0yMyw1Ljg2SDIxLjFWNEgxNC45VjUuODZIMTNWNGEyLDIsMCwwLDEsMS45LTJoNi4yQTIsMiwwLDAsMSwyMyw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik02LDlWMzFhMi45MywyLjkzLDAsMCww''@;'; put 'put ''LDIuODYsM0gyNy4wOUEyLjkzLDIuOTMsMCwwLDAsMzAsMzFWOVptOSwyMEgxM1YxNGgyWm04LDBIMjFWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuNzMsNUgyM1Y0QTIsMiwwLDAsMCwyMSwyaC02''@;'; put 'put ''LjJBMiwyLDAsMCwwLDEzLDRWNUg1QTEsMSwwLDEsMCw1LDdIMzAuNzNhMSwxLDAsMCwwLDAtMloiLz4nKSxoLkNsclNoYXBlVGFnPSgwLHMuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwz''@;'; put 'put ''MS45MywxOS4yWk0yMC42MiwzMC41Miw2LDE1LjkxVjZoOS45MmwxNC42LDE0LjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMmwtMy44LTMuOEgyNS4zMWw1LjIyLDUuMjItOS45LDkuOUw2LDE1LjkxVjZoOS45MmwzLjQxLDMuNDEsMS0xLjc4LTMtM0EyLDIsMCwwLDAsMTUuOTIs''@;'; put 'put ''NEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTMxLjkzLDE5LjIsMTcuMzMsNC42QTIsMiwwLDAsMCwxNS45Miw0TDYsNEEyLDIsMCwwLDAsNCw2bDAsOS45MmEyLDIsMCwwLDAsLjU5LDEuNDFsMTQuNiwxNC42YTIsMiwwLDAsMCwyLjgzLDBsOS45LTkuOUEyLDIsMCwwLDAsMzEuOTMsMTkuMlpNMjAu''@;'; put 'put ''NjIsMzAuNTIsNiwxNS45MVY2aDkuOTJsMTQuNiwxNC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45MywxOS4yLDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEy''@;'; put 'put ''LDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaTTkuNjUsMTEuMzFhMS42NiwxLjY2LDAsMSwxLDEuNjYtMS42NkExLjY2LDEuNjYsMCwwLDEsOS42NSwxMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0yOC40NiwxNS43M0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksMTAuMjJsMS40My0yLjQ3TDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDku''@;'; put 'put ''OS05LjlhMiwyLDAsMCwwLDAtMi44M1pNOS42NSwxMS4zMWExLjY2LDEuNjYsMCwxLDEsMS42Ni0xLjY2QTEuNjYsMS42NiwwLDAsMSw5LjY1LDExLjMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTI2Ljg1LDEuNDdsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuNDdBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuNDdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5''@;'; put 'put ''LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk05LjY1LDExLjMxYTEuNjYsMS42NiwwLDEsMSwxLjY2LTEuNjZBMS42NiwxLjY2LDAsMCwxLDkuNjUsMTEuMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjeD0iMzAiIGN5PSI2LjMzIiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGguQ2xyU2hhcGVUYWdzPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1''@;'; put 'put ''LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYx''@;'; put 'put ''QTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTE3LjI2LDI5LjY5LDMuNjksMTYuMTVWN2g5LjFMMjYuMzcs''@;'; put 'put ''MjAuNDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5''@;'; put 'put ''LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk0xNy4yNiwyOS42OSwzLjY5LDE2LjE1VjdoOS4xTDI2LjM3LDIwLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPGNpcmNs''@;'; put 'put ''ZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNBMy42NSwzLjY1LDAsMCwxLDIxLDE1''@;'; put 'put ''LjE5bDUuMzMsNS4yOS05LjExLDkuMjFMMy42OSwxNi4xNVY3aDkuMWw2LDUuOTRhMy42OCwzLjY4LDAsMCwxLC4xLTIuNjlMMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4z''@;'; put 'put ''NkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAu''@;'; put 'put ''ODMsNi44LDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4LjIxLDVIMTYuMTJMMTkuNzksOC42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywyOS40Mywx''@;'; put 'put ''NS40SDI2LjY1bDUuMSw1TDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIx''@;'; put 'put ''YTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuNzgsMTkuMTcsMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45''@;'; put 'put ''M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1pNNi42NywxMS43MkExLjczLDEuNzMsMCwxLDEsOC40LDEwLDEuNzMsMS43MywwLDAsMSw2LjY3LDExLjcy''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAs''@;'; put 'put ''LjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTYuNjcsMTEuNzJBMS43MywxLjczLDAsMSwxLDguNCwxMCwxLjczLDEuNzMsMCwwLDEsNi42NywxMS43MloiIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEt''@;'; put 'put ''OS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMC44Myw2LjgsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwxOS43OSw4LjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMjkuNDMsMTUuNEgyNi42NWw1LjEsNUwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNhMy42NywzLjY3LDAsMCwxLTMuMzYtNS4xNUwxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAs''@;'; put 'put ''MS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk02LjY3LDExLjcyQTEuNzMsMS43MywwLDEsMSw4LjQsMTAsMS43MywxLjczLDAsMCwxLDYu''@;'; put 'put ''NjcsMTEuNzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4''@;'; put 'put ''LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+JyksaC5DbHJTaGFwZUhpc3Rvcnk9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4''@;'; put 'put ''LDkuODNhMSwxLDAsMCwwLTEsMXY4LjcybDUuOSw0QTEsMSwwLDAsMCwyNCwyMS44OGwtNS0zLjM5VjEwLjgzQTEsMSwwLDAsMCwxOCw5LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LjA5LDE2''@;'; put 'put ''LjA5LDAsMCwwLDQsMTAuMjZWNS4yYTEsMSwwLDAsMC0yLDBWMTRoOC44YTEsMSwwLDAsMCwwLTJINS4zNUExNCwxNCwwLDEsMSw4LjU4LDI4LjM1YTEsMSwwLDAsMC0xLjM1LDEuNDhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''Ii8+JyksaC5DbHJTaGFwZUNsb2NrPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDE4LjRWMTAuNzVhMSwxLDAsMCwwLTIsMHY4LjcybDUuOSw0YTEsMSwwLDEsMCwxLjExLTEuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTgsMTcuOTRBOS45NCw5Ljk0LDAsMCwxLDIzLjQxLDkuNTlsLjg1LTEuMzZhMTEuNTUsMTEuNTUsMCwxLDAtOC41MywyMUwxNiwyNy43QTEwLDEwLDAsMCwxLDgsMTcuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTE4LjkyLDEwLjc1YTEsMSwwLDAsMC0yLDB2OC43Mmw1LjksNGExLDEsMCwxLDAsMS4xMS0xLjY2bC01LTMuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwx''@;'; put 'put ''Mi44MWE3LjQ0LDcuNDQsMCwwLDEtMS45MS41OCwxNC4wNSwxNC4wNSwwLDEsMS04LjYtOC42LDcuNDQsNy40NCwwLDAsMSwuNTgtMS45MSwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRn''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw2LjM4YTExLjU2LDExLjU2LDAsMCwwLTIuMjcsMjIuODlMMTYsMjcuN2ExMCwxMCwwLDEsMSw3LjM5LTE4LjFoMGE3LjQ1LDcuNDUsMCwwLDEtLjc4LTIuMjNBMTEuNDUsMTEuNDUsMCwwLDAsMTgsNi4zOFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0xOC45MiwxMC43NWExLDEsMCwwLDAtMiwwdjguNzJsNS45LDRhMSwxLDAsMSwwLDEuMTEtMS42NmwtNS0zLjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zMy43NywxNS4zOWgtMkExNCwxNCwwLDEsMSwyMi4wOSw0LjYxbDEtMS43NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMTgsOGE5LjgxLDkuODEsMCwwLDEsMiwuMjNsLjg1LTEuNDZhMTEuNTUsMTEuNTUsMCwxLDAtNS4xMywyMi41MkwxNiwyNy43QTEwLDEwLDAsMCwxLDE4LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxl''@;'; put 'put ''cnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTYuMiwyMS4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwx''@;'; put 'put ''LDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFpNMjMuODUsOC4yM2ExMS4zOSwxMS4zOSwwLDEsMC04LjU0LDIwLjgzTDE1LDMwLjYzYTEzLDEzLDAsMSwxLDkuNy0yMy43N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MUE3LjQ4LDcuNDgsMCwwLDEsMjIuNjgsNy42MywxMS4yNCwxMS4yNCwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgxLDEyLjgxLDAsMCwxLDQuNTEuODIsNy40''@;'; put 'put ''Niw3LjQ2LDAsMCwxLC42OC0yLjk0LDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1pNMjQuMiwyMy4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMzMuNzcsMTUuMzlIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YzAtLjA5LS4wOS0uMTgtLjEzLS4yN1YxOC40bDUsMy4zOWExLDEsMCwwLDEtMS4xMSwxLjY2bC01LjktNFYxMC43NWExLDEsMCwwLDEsMS45MS0uNDFBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMjAuNzQsN0Ex''@;'; put 'put ''MS4xOSwxMS4xOSwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgsMTIuOCwwLDAsMSwzLjU3LjUxbDEuNTMtMi42NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4''@;'; put 'put ''LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxoLkNsclNoYXBlQWxhcm1DbG9jaz0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDcsMy44NGE1Ljc4LDUu''@;'; put 'put ''NzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAs''@;'; put 'put ''MCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjQsNC4wOUExNCwxNCwwLDAsMCw4LjExLDI3''@;'; put 'put ''Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTYuNCw0LjA5Wk0xOS41OCwyOS45QTEyLDEyLDAsMSwxLDI5LjkyLDE5LjU2''@;'; put 'put ''LDEyLDEyLDAsMCwxLDE5LjU4LDI5LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjkyLDIwLjM0bC02LjA2LTNWOS41YS45LjksMCwwLDAtMS44LDB2OUwyNC4xMiwyMmEuOS45LDAsMSwwLC43OS0xLjYy''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43NywwLDAsMC03LjY0LjQxLDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwxNi4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44Niw5LjVhLjkuOSwwLDAsMC0xLjgsMHY5TDI0LjEyLDIyYS45LjksMCwxLDAsLjc5LTEuNjJsLTYuMDYtM1oiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAsMzEuNzcsMTUuNGgtMmExMi4wNywxMi4wNywwLDEsMS04LjY3LTlsMS0xLjhhMTQsMTQsMCwwLDAtMTQsMjMuMjdM''@;'; put 'put ''NS41NiwzMC40M0ExLDEsMCwxLDAsNywzMS44NGwyLjY2LTIuNjZhMTMuOSwxMy45LDAsMCwwLDE2Ljg4LS4wOGwyLjc0LDIuNzRhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAsMzEuNzcsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZMMTksMTMuNHYzLjc4TDI1LDIwLjFh''@;'; put 'put ''MSwxLDAsMSwxLS44NywxLjhMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwVjEwTDE5LDkuODlsMy01LjI4YTE0LDE0LDAsMCwwLTE0LDIzLjI3TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSww''@;'; put 'put ''LDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCww''@;'; put 'put ''LDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcs''@;'; put 'put ''MCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODks''@;'; put 'put ''MTMuODksMCwwLDAsMy4yMS0xNC4zOUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2YTcuNTIsNy41MiwwLDAsMSwuMTEtMS4yMUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwy''@;'; put 'put ''Ljc0YTEsMSwwLDAsMCwxLjQxLTEuNDFabS0yLjUyLTYuMzVhMSwxLDAsMCwxLTEuMzMuNDdMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwdjcuNUwyNSwyMC4xQTEsMSwwLDAsMSwyNS40OSwyMS40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0t''@;'; put 'put ''YmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcs''@;'; put 'put ''MCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4Ljg2LDkuNWEu''@;'; put 'put ''OS45LDAsMCwwLTEuOCwwdjlMMjQuMTIsMjJhLjkuOSwwLDEsMCwuNzktMS42MmwtNi4wNi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODksMTMuODksMCww''@;'; put 'put ''LDAsMy4yMS0xNC4zOSw3LDcsMCwwLDEtMi4xMS4wNUExMiwxMiwwLDEsMSwyMi41Niw2LjksNy41NCw3LjU0LDAsMCwxLDIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjExLTEuMjFBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmEx''@;'; put 'put ''My45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43Myww''@;'; put 'put ''LDAsMCwzMS40NywzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQy''@;'; put 'put ''LDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsNEExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhs''@;'; put 'put ''Mi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTgsNFptNy40NywxNy40M2ExLDEsMCwwLDEtMS4zMy40N0wxNywxOC40NFY5LjY5YTEsMSwwLDAsMSwyLDB2Ny41TDI1LDIwLjFBMSwxLDAsMCwxLDI1LjQ5LDIxLjQzWiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLGguQ2xyU2hhcGVDaXJjbGVBcnJvdz0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOCw4LjI2bC03LjYxLDcuNjFhMSwxLDAsMSwwLDEuNDEsMS40MUwxNywxMi4xOHYxNWExLDEsMCwwLDAsMiwwVjEybDUuMjgsNS4yOGExLDEsMCwxLDAsMS40MS0xLjQx''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTgsMTUuNTdhMS40MywxLjQzLDAsMCwxLTIsMEwxOS40LDEzVjI3LjE0YTEuNCwxLjQsMCww''@;'; put 'put ''LDEtMi44LDB2LTE0bC00LjQzLDQuNDNhMS40LDEuNCwwLDAsMS0yLTJMMTguMDgsNy43LDI2LDE1LjU5QTEuNCwxLjQsMCwwLDEsMjYsMTcuNTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksaC5DbHJTaGFwZUNoaWxkQXJyb3c9KDAscy5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTI0LjgyLDE1LjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQxTDI3LjIsMjFIOVYzLjc4YTEsMSwwLDEsMC0yLDBWMjFhMiwyLDAsMCwwLDIsMkgyNy4xNWwtMy43NCwzLjc1YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwu''@;'; put 'put ''NzEtLjI5TDMxLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksaC5DbHJTaGFwZUNvcHk9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjUsN2gtMTlBMS41LDEuNSwwLDAsMCw5LDguNXYyNEExLjUsMS41LDAsMCwwLDEwLjUsMzRoMTlB''@;'; put 'put ''MS41LDEuNSwwLDAsMCwzMSwzMi41VjguNUExLjUsMS41LDAsMCwwLDI5LjUsN1pNMjksMzJIMTFWOUgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMy41QTEuNSwxLjUsMCwwLDAsMjQuNSwySDUuNUEx''@;'; put 'put ''LjUsMS41LDAsMCwwLDQsMy41djI0QTEuNSwxLjUsMCwwLDAsNS41LDI5SDZWNEgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcsMy41NkExLjU2LDEuNTYsMCwwLDAsMjUuNDMsMkg1LjU3QTEuNTYsMS41''@;'; put 'put ''NiwwLDAsMCw0LDMuNTZWMjguNDRBMS41NiwxLjU2LDAsMCwwLDUuNTcsMzBoLjUyVjQuMDdIMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI2IiB3aWR0aD0iMjMiIGhlaWdodD0iMjgiIHJ4PSIxLjUiIHJ5''@;'; put 'put ''PSIxLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxoLkNsclNoYXBlSGVscD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAs''@;'; put 'put ''MCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4yOSw4LjkyYTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAs''@;'; put 'put ''MCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1YzMt''@;'; put 'put ''LjQyLDUuNDMtMiw1LjQzLTUuMjh2LS4wNUMyNC4xOCwxMS4xMiwyMS44NCw4LjkyLDE4LjI5LDguOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuNzgiIGN5PSIyNi4yIiByPSIxLjI1IiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjE4LDE0LjE3di0uMDVjMC0zLTIuMzQtNS4yLTUuODgtNS4yYTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4w''@;'; put 'put ''OCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0x''@;'; put 'put ''VjE5LjQ1QzIxLjc1LDE5LDI0LjE4LDE3LjQ1LDI0LjE4LDE0LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxNy43OCIgY3k9IjI2LjIiIHI9IjEuMjUiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDMsNy40MywwLDAsMS0xLjkxLjU4LDE0LjA1LDE0LjA1LDAsMSwxLTguNi04LjYsNy40NCw3LjQ0LDAsMCwxLC41OC0xLjkxLDE2LjA2''@;'; put 'put ''LDE2LjA2LDAsMSwwLDkuOTMsOS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ5LDcuNDksMCwwLDEtOS45My05LjkzLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1ptLTE1LjM0LDE1YTEuNjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42''@;'; put 'put ''NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0xLjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0z''@;'; put 'put ''LjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMsNi4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEs''@;'; put 'put ''MTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0tLjIyLDI1Ljg1YTEuNjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43''@;'; put 'put ''MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0xLjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4z''@;'; put 'put ''MSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMsNi4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiLz4nKSxoLkNsclNoYXBlTG9naW49KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMkgyOFYzMEgxMlYyMC4ySDEwVjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuMTIsMTguNDZhMSwxLDAsMSwwLDEuNDEsMS40MWw1Ljc5LTUuNzlMMTYuNTQsOC4yOWExLDEsMCwwLDAtMS40MSwxLjQxTDE4LjUsMTNINGExLDEsMCwwLDAtMSwxLDEsMSww''@;'; put 'put ''LDAsMCwxLDFIMTguNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMnY3aDguNUwxNS4xMiw5LjcxYTEsMSwwLDAsMSwxLjQxLTEuNDFsNS43OSw1Ljc5LTUuNzksNS43OWEx''@;'; put 'put ''LDEsMCwwLDEtMS40MS0xLjQxTDE4LjUsMTVIMTBWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDEzSDRhMSwxLDAsMCww''@;'; put 'put ''LTEsMSwxLDEsMCwwLDAsMSwxaDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGguQ2xyU2hhcGVMb2dvdXQ9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTcsNkgyM3Y5LjhoMlY2YTIsMiwwLDAsMC0yLTJIN0EyLDIsMCwwLDAsNSw2VjMwYTIsMiww''@;'; put 'put ''LDAsMCwyLDJIMjNhMiwyLDAsMCwwLDItMkg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4xNiwxNy4yOGExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjEzLDIySDE1LjYzYTEsMSwwLDAsMC0xLDEsMSwxLDAs''@;'; put 'put ''MCwwLDEsMWgxNC41bC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsNEg3QTIsMiwwLDAsMCw1LDZWMzBhMiwyLDAsMCwwLDIsMkgyM2Ey''@;'; put 'put ''LDIsMCwwLDAsMi0yVjI0SDE1LjYzYTEsMSwwLDAsMS0xLTEsMSwxLDAsMCwxLDEtMUgyNVY2QTIsMiwwLDAsMCwyMyw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjE2LDE3LjI4YTEsMSwwLDAsMC0xLjQxLDEu''@;'; put 'put ''NDFMMzAuMTMsMjJIMjV2Mmg1LjEzbC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxoLkNsclNoYXBlUHJpbnRlcj0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksOUgyN1Y1SDlW''@;'; put 'put ''OUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1VjEzYTIsMiwwLDAsMSwyLTJIMjlhMiwyLDAsMCwxLDIsMnY5SDI5LjA4VjI0SDMzVjEzQTQsNCwwLDAsMCwyOSw5Wk0yNSw5SDExVjdIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0''@;'; put 'put ''IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDIyLjA5IDI5LjA4IDIyLjA5IDI5LjA4IDI0IDMzIDI0IDMzIDE1LjQgMzEgMTUuNCIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEzYTIsMiwwLDAsMSwyLTJIMTguNjRBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMTkuNTQsOUgxMVY3aDkuNzFsMS4xMy0ySDlWOUg3YTQsNCwwLDAsMC00LDRWMjRI''@;'; put 'put ''Ni45MlYyMi4wOUg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMThIOGExLDEsMCww''@;'; put 'put ''LDAsMCwySDlWMzJIMjdWMjBoMWExLDEsMCwwLDAsMC0yWk0yNSwzMEgxMVYyMEgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0''@;'; put 'put ''PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxMi44OGE3LjQ1LDcuNDUsMCwwLDEtMiwuNTV2OC42NkgyOS4wOFYyNEgzM1YxM0MzMywxMywzMywxMi45MywzMywxMi44OFoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTNhMiwyLDAsMCwxLDItMkgyNC40MmE3LjUsNy41LDAsMCwxLTEuMjctMkgxMVY3SDIyLjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3''@;'; put 'put ''LjU0LDcuNTQsMCwwLDEsLjA3LTFIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg2LjkyVjIyLjA5SDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTNBNCw0LDAsMCwwLDI5LDlaTTI1LDI0djZI''@;'; put 'put ''MTFWMTlIMjVaTTI1LDlIMTFWN0gyNVptNCw2SDI3VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41NCw5SDExVjdoOS43MWwxLjEzLTJIOVY5''@;'; put 'put ''SDdhNCw0LDAsMCwwLTQsNFYyNEg5djhIMjdWMjRoNlYxNS40Wk0yNSwyNHY2SDExVjE5SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTMzLDEyLjg4YTcuMyw3LjMsMCwwLDEtNCwuNTVWMTVIMjdWMTNoLjMyYTcuNTIsNy41MiwwLDAsMS00LjE4LTRIMTFWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41NCw3LjU0LDAsMCwxLC4wNy0xSDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4''@;'; put 'put ''SDI3VjI0aDZWMTNDMzMsMTMsMzMsMTIuOTMsMzMsMTIuODhaTTI1LDI0djZIMTFWMTlIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGguQ2xyU2hhcGVXb3JsZD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNTQsMThhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLTRoMy42YTEyLjMsMTIuMywwLDAsMC0uNjctMS42''@;'; put 'put ''SDI1LjY5QTE5LjcyLDE5LjcyLDAsMCwwLDIyLjgsNi41M2ExMi4zLDEyLjMsMCwwLDAtMi41NS0uNzYsMTcuODMsMTcuODMsMCwwLDEsMy44OSw2LjU5SDE4Ljc1VjUuNmMtLjI1LDAtLjUxLDAtLjc3LDBzLS40OSwwLS43MywwdjYuNzdIMTEuODZhMTcuODMsMTcuODMsMCwwLDEsMy45LTYu''@;'; put 'put ''NiwxMi4yOCwxMi4yOCwwLDAsMC0yLjU0Ljc1LDE5LjcyLDE5LjcyLDAsMCwwLTIuOTEsNS44NUg2Ljk0QTEyLjMsMTIuMywwLDAsMCw2LjI2LDE0SDkuODlhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLDQsMTkuNjcsMTkuNjcsMCwwLDAsLjUsNC4zN0g2LjQyQTEyLjM0LDEyLjM0LDAsMCwwLDcu''@;'; put 'put ''MTYsMjRoMy4yM2ExOS4zMiwxOS4zMiwwLDAsMCwyLjY5LDUuMzYsMTIuMjgsMTIuMjgsMCwwLDAsMi42MS43OUExNy45MSwxNy45MSwwLDAsMSwxMiwyNGg1LjI2djYuMzRjLjI0LDAsLjQ5LDAsLjczLDBzLjUxLDAsLjc3LDBWMjRIMjRhMTcuOSwxNy45LDAsMCwxLTMuNyw2LjE1LDEyLjI4''@;'; put 'put ''LDEyLjI4LDAsMCwwLDIuNjItLjgxQTE5LjMyLDE5LjMyLDAsMCwwLDI1LjYxLDI0aDMuMmExMi4zNCwxMi4zNCwwLDAsMCwuNzQtMS42SDI2QTE5LjY3LDE5LjY3LDAsMCwwLDI2LjU0LDE4Wm0tOS4yOSw0LjM3SDExLjUxYTE3LjY5LDE3LjY5LDAsMCwxLS4wOS04LjRoNS44M1ptNy4yNCww''@;'; put 'put ''SDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMTgsMTguMTIsMTguMTIsMCwwLDEsMjQuNDksMjIuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYs''@;'; put 'put ''MTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFhNy40NCw3LjQ0LDAsMCwxLTEuOTEuNTgsMTQu''@;'; put 'put ''MDUsMTQuMDUsMCwxLDEtOC42LTguNiw3LjQzLDcuNDMsMCwwLDEsLjU4LTEuOTEsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5LjkzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAu''@;'; put 'put ''MjUsNS43N2ExNy44MywxNy44MywwLDAsMSwzLjg5LDYuNTlIMTguNzVWNS42Yy0uMjUsMC0uNTEsMC0uNzcsMHMtLjQ5LDAtLjczLDB2Ni43N0gxMS44NmExNy44MywxNy44MywwLDAsMSwzLjktNi42LDEyLjI4LDEyLjI4LDAsMCwwLTIuNTQuNzUsMTkuNzIsMTkuNzIsMCwwLDAtMi45MSw1''@;'; put 'put ''Ljg1SDYuOTRBMTIuMywxMi4zLDAsMCwwLDYuMjYsMTRIOS44OWExOS4zOCwxOS4zOCwwLDAsMC0uNDMsNCwxOS42NywxOS42NywwLDAsMCwuNSw0LjM3SDYuNDJBMTIuMzQsMTIuMzQsMCwwLDAsNy4xNiwyNGgzLjIzYTE5LjMyLDE5LjMyLDAsMCwwLDIuNjksNS4zNiwxMi4yOCwxMi4yOCww''@;'; put 'put ''LDAsMCwyLjYxLjc5QTE3LjkxLDE3LjkxLDAsMCwxLDEyLDI0aDUuMjZ2Ni4zNGMuMjQsMCwuNDksMCwuNzMsMHMuNTEsMCwuNzcsMFYyNEgyNGExNy45LDE3LjksMCwwLDEtMy43LDYuMTUsMTIuMjgsMTIuMjgsMCwwLDAsMi42Mi0uODFBMTkuMzIsMTkuMzIsMCwwLDAsMjUuNjEsMjRoMy4y''@;'; put 'put ''YTEyLjM0LDEyLjM0LDAsMCwwLC43NC0xLjZIMjZhMTkuNjcsMTkuNjcsMCwwLDAsLjUtNC4zNywxOS4zOCwxOS4zOCwwLDAsMC0uNDMtNGgzLjZjLS4wNi0uMTctLjEyLS4zMy0uMTktLjQ5YTcuNDUsNy40NSwwLDAsMS0zLjQ3LTEuMTFoLS4zNmMwLS4xMS0uMDgtLjIxLS4xMS0uMzJhNy40''@;'; put 'put ''OCw3LjQ4LDAsMCwxLTMuMDYtNS42MkExMi40MSwxMi40MSwwLDAsMCwyMC4yNSw1Ljc3Wm0tMywxNi41OUgxMS41MWExNy42OSwxNy42OSwwLDAsMS0uMDktOC40aDUuODNaTTI1LDE4YTE4LjEyLDE4LjEyLDAsMCwxLS41NSw0LjM3SDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEs''@;'; put 'put ''MjUsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMDUsMThhMjAuNDYsMjAuNDYsMCwwLDAsLjYyLDQuOTNoNi40OFYxMy40NUgxMC41OEEyMC41NSwyMC41NSwwLDAsMCwxMC4wNSwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44NSwxMy40NXY5LjQ4aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgs''@;'; put 'put ''MkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0zMC4yMiwyNC43MUgyNi42YTIxLjgsMjEuOCwwLDAsMS0zLDYsMTMuODYsMTMuODYsMCwwLDEtMywuOTIsMjAuMjEsMjAuMjEsMCwwLDAsNC4xOC02Ljk0SDE4Ljg2djcuMTVjLS4yOSwwLS41NywwLS44Niwwcy0uNTUsMC0u''@;'; put 'put ''ODMsMFYyNC43MUgxMS4yMmEyMC4yMSwyMC4yMSwwLDAsMCw0LjE4LDYuOTUsMTMuODYsMTMuODYsMCwwLDEtMi45NC0uOSwyMS44LDIxLjgsMCwwLDEtMy02LjA1SDUuNzhhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLTEuODFoNEEyMi4yLDIyLjIsMCwwLDEsOC4zNywxOGEyMS44OCwyMS44OCww''@;'; put 'put ''LDAsMSwuNDgtNC41NUg0Ljc2YTEzLjg4LDEzLjg4LDAsMCwxLC43Ni0xLjgxSDkuMzNBMjIuMjYsMjIuMjYsMCwwLDEsMTIuNjEsNWExMy44NiwxMy44NiwwLDAsMSwyLjg3LS44NCwyMC4xMywyMC4xMywwLDAsMC00LjQsNy40NWg2LjA5VjRjLjI4LDAsLjU1LDAsLjgzLDBzLjU4LDAsLjg2''@;'; put 'put ''LDB2Ny42NGg2LjA5YTIwLjEzLDIwLjEzLDAsMCwwLTQuMzktNy40NEExMy44OSwxMy44OSwwLDAsMSwyMy40Myw1YTIyLjI2LDIyLjI2LDAsMCwxLDMuMjcsNi41OWgzLjc3YTEzLjg5LDEzLjg5LDAsMCwxLC43NiwxLjgxSDI3LjE3QTIxLjg4LDIxLjg4LDAsMCwxLDI3LjY2LDE4YTIyLjIs''@;'; put 'put ''MjIuMiwwLDAsMS0uNTcsNC45M2g0QTEzLjk0LDEzLjk0LDAsMCwxLDMwLjIyLDI0LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjA1LDE4YTIwLjQ2LDIwLjQ2LDAsMCwwLC42Miw0LjkzaDYuNDhWMTMuNDVI''@;'; put 'put ''MTAuNThBMjAuNTUsMjAuNTUsMCwwLDAsMTAuMDUsMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4Ljg1LDIyLjk0aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAu''@;'; put 'put ''NTUsMCwwLDAtLjUyLTQuNTVIMTguODVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDQsNy40NCwwLDAsMS0xLjkuNTh2MEgzMWE2Ljc3LDYuNzcsMCwwLDEtMi4w''@;'; put 'put ''NywwaC0xLjhBMjEuODgsMjEuODgsMCwwLDEsMjcuNjYsMThhMjIuMiwyMi4yLDAsMCwxLS41Nyw0LjkzaDRhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLDEuODFIMjYuNmEyMS44LDIxLjgsMCwwLDEtMyw2LDEzLjg2LDEzLjg2LDAsMCwxLTMsLjkyLDIwLjIxLDIwLjIxLDAsMCwwLDQuMTgtNi45''@;'; put 'put ''NEgxOC44NnY3LjE1Yy0uMjksMC0uNTcsMC0uODYsMHMtLjU1LDAtLjgzLDBWMjQuNzFIMTEuMjJhMjAuMjEsMjAuMjEsMCwwLDAsNC4xOCw2Ljk1LDEzLjg2LDEzLjg2LDAsMCwxLTIuOTQtLjksMjEuOCwyMS44LDAsMCwxLTMtNi4wNUg1Ljc4YTEzLjk0LDEzLjk0LDAsMCwxLS44My0xLjgx''@;'; put 'put ''aDRBMjIuMiwyMi4yLDAsMCwxLDguMzcsMThhMjEuODgsMjEuODgsMCwwLDEsLjQ4LTQuNTVINC43NmExMy44OCwxMy44OCwwLDAsMSwuNzYtMS44MUg5LjMzQTIyLjI2LDIyLjI2LDAsMCwxLDEyLjYxLDVhMTMuODYsMTMuODYsMCwwLDEsMi44Ny0uODQsMjAuMTMsMjAuMTMsMCwwLDAtNC40''@;'; put 'put ''LDcuNDVoNi4wOVY0Yy4yOCwwLC41NSwwLC44Mywwcy41OCwwLC44NiwwdjcuNjRoNi4wOWwwLS4xM2E3LjQ3LDcuNDcsMCwwLDEtMi4zNi00Ljc2LDIwLjM3LDIwLjM3LDAsMCwwLTItMi41NSwxNC4yMywxNC4yMywwLDAsMSwyLjA2LjU2LDcuNDQsNy40NCwwLDAsMSwuNTctMS44NiwxNi4w''@;'; put 'put ''NiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGguQ2xyU2hhcGVTbGlkZXI9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEyLjM3QTQsNCwwLDAsMCw5LDguNDhWNUExLDEsMCwxLDAsNyw1VjguNDhhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE2LjI2QTQs''@;'; put 'put ''NCwwLDAsMCwxMiwxMi4zN1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSw4LDE0LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE1LjgzYTQsNCwwLDAsMC0zLTMuODlWNWExLDEsMCwxLDAtMiww''@;'; put 'put ''djYuOTRhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE5LjcyQTQsNCwwLDAsMCwzMiwxNS44M1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyOCwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMjIsMjQuNWE0LDQsMCwwLDAtMy0zLjg5VjVhMSwxLDAsMSwwLTIsMFYyMC42MWE0LDQsMCwwLDAsMCw3Ljc4VjMxYTEsMSwwLDEsMCwyLDBWMjguMzlBNCw0LDAsMCwwLDIyLDI0LjVabS00LDJhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMjYuNTNaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksOS4yOVY1QTEsMSwwLDEsMCw3LDVWOS4zYTMuMjIsMy4yMiwwLDAsMCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxNS40M0EzLjIyLDMuMjIsMCwwLDAsOSw5LjI5WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDIxLjQ1VjVhMSwxLDAsMSwwLTIsMFYyMS40N2EzLjIyLDMuMjIsMCwwLDAsMCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMjcuNmEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LDEyLjc1VjVhMSwxLDAsMSwwLTIsMHY3Ljc2YTMuMjIsMy4yMiwwLDAsMCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxOC44OWEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLGguQ2xyU2hhcGVDbGlwYm9hcmQ9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjI5LDVIMjdWN2gyVjMySDdWN0g5VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4y''@;'; put 'put ''OUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsNy4zM0EyLjM0LDIuMzQsMCwwLDAsMjMuNjcsNUgyMS44N2E0LDQs''@;'; put 'put ''MCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI2Wk0yNCw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMy42N2EuMzMuMzMsMCwwLDEsLjMzLjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTQiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9''@;'; put 'put ''IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIyIiB3aWR0aD0iMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cmVjdCB4PSIxMSIgeT0iMjYiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IHg9IjExIiB5PSIyMiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyNiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3''@;'; put 'put ''LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEsMjMuMTMsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdl''@;'; put 'put ''ZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVYxMy40M0E3LjUyLDcu''@;'; put 'put ''NTIsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yOSw1SDIyLjE3YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwz''@;'; put 'put ''NEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1Wm0tMTgsM2ExLDEsMCwwLDEsMS0xaDMuNDRWNi4zMWEyLjMxLDIuMzEsMCwxLDEsNC42MywwVjdoMy40NGExLDEsMCwwLDEsMSwxdjJIMTEuMzFaTTI1LDI4SDExVjI2SDI1Wm0wLTRIMTFW''@;'; put 'put ''MjJIMjVabTAtNEgxMVYxOEgyNVptMC00SDExVjE0SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMEgxMS4zMVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMx''@;'; put 'put ''YTIuMzEsMi4zMSwwLDEsMSw0LjYzLDBWN2gyLjE5YTcuNTQsNy41NCwwLDAsMS0uMDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFoLS40YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCww''@;'; put 'put ''LDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yNSwyOEgxMVYyNkgyNVptMC00SDExVjIySDI1Wm0wLTRIMTFWMThIMjVabTAtNEgxMVYxNEgyNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksaC5DbHJTaGFwZUZpcmV3YWxsPSgwLHMuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCw4SDMydjUuMDhIMjMuOHYtNEgyMnY0SDE0di00SDEydjRINFptMCw3SDMydjYuMDhIMjguOTJWMTYuMjdIMjd2NC44MUgx''@;'; put 'put ''OC45MlYxNi4yN0gxN3Y0LjgxSDguOVYxNi4yN0g3djQuODFINFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgs''@;'; put 'put ''MTUuNEgzMnY1LjY4SDI4LjkyVjE2LjI3SDI3djQuODFIMTguOTJWMTYuMjdIMTd2NC44MUg4LjlWMTYuMjdIN3Y0LjgxSDRWMTVIMjAuNThhMy41OCwzLjU4LDAsMCwxLTEuNzYtMS45MkgxNHYtNEgxMnY0SDRWOEgyMC4xNGwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwy''@;'; put 'put ''LDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi40NS0uNDJIMjMuOFYxMC4yMmE3LjUsNy41LDAsMCwxLS42My0xLjE0SDIydjRIMTR2LTRIMTJ2NEg0VjhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0y''@;'; put 'put ''SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTQsMTVIMzJ2Ni4wOEgyOC45MlYxNi4yN0gyN3Y0LjgxSDE4LjkyVjE2LjI3SDE3djQuODFIOC45VjE2LjI3SDd2NC44MUg0Wk0yMy44LDI4VjI0''@;'; put 'put ''LjI3SDIyLjJWMjhIMTRWMjQuMjdoLTEuNlYyOEg0VjIzSDMydjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTE0LDI4SDEyVjI0aDJa''@;'; put 'put ''bTEwLDBIMjJWMjRoMlptOC02SDRWMjBIN1YxNkg5djRoOFYxNmgydjRoOFYxNmgydjRoM1ptMC04SDRWMTJoOFY4aDJ2NGg4VjhoMnY0aDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNB''@;'; put 'put ''My42OSwzLjY5LDAsMCwxLDE5LjM1LDE0SDRWMTJoOFY4aDJ2NGg0LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMTQsMjhIMTJWMjRoMlptMTAsMEgyMlYyNGgyWm04LTZI''@;'; put 'put ''NFYyMEg3VjE2SDl2NGg4VjE2aDJ2NGg4VjE2aDJ2NGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gz''@;'; put 'put ''My42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTI0LDEwLjQ5VjEyaDEuNTFBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjQ5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMTRINFYxMmg4VjhoMnY0aDhWOGguNzhhNy40OSw3''@;'; put 'put ''LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWk0xNCwyOEgxMlYyNGgyWm0xMCwwSDIyVjI0aDJabTgtNkg0VjIwSDdWMTZIOXY0aDhWMTZoMnY0aDhWMTZoMnY0aDNa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIiAvPicpLGguQ2xyU2hhcGVMaXN0PSgwLHMuY2xySWNvblNWRykoJzxyZWN0IHg9IjE1IiB5PSI4IiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxMiIgd2lk''@;'; put 'put ''dGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTYiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNCIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIi''@;'; put 'put ''IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE2IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTIiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IHg9IjE1IiB5PSIxNiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjQiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9''@;'; put 'put ''IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQi''@;'; put 'put ''IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSw4djJoOC42NmE3LjQ1LDcuNDUsMCwwLDEtLjg5LTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWNEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg4LTJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcu''@;'; put 'put ''NDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0xMywyNkgxMVYyNGgyWm0wLTRIMTFWMjBoMlpt''@;'; put 'put ''MC00SDExVjE2aDJabTAtNEgxMVYxMmgyWm0wLTRIMTFWOGgyWk0yNSwyNkgxNVYyNEgyNVptMC00SDE1VjIwSDI1Wm0wLTRIMTVWMTZIMjVabTAtNEgxNVYxMkgyNVptMC00SDE1VjhIMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTIzLjY2LDEwSDE1VjhoNy43OGE3LjQyLDcuNDIsMCwwLDEsLjg5LTZIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMFpNMTMsMjZIMTFWMjRoMlptMC00SDExVjIwaDJabTAtNEgx''@;'; put 'put ''MVYxNmgyWm0wLTRIMTFWMTJoMlptMC00SDExVjhoMlpNMjUsMjZIMTVWMjRIMjVabTAtNEgxNVYyMEgyNVptMC00SDE1VjE2SDI1Wm0wLTRIMTVWMTJIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxj''@;'; put 'put ''aXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGguQ2xyU2hhcGVSZWRvPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCw0LjIyYTEsMSwwLDAsMC0xLjQx''@;'; put 'put ''LDEuNDJsNS41Niw1LjQ5aC0xM0ExMSwxMSwwLDAsMCwxMC4wNywzMiwxLDEsMCwwLDAsMTEsMzAuMThhOSw5LDAsMCwxLTUtOCw5LjA4LDkuMDgsMCwwLDEsOS4xMy05aDEzbC01LjU0LDUuNDhBMSwxLDAsMCwwLDI0LDIwbDgtNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPicpLGguQ2xyU2hhcGVVbmRvPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC44NywxMS4xNGgtMTNsNS41Ni01LjQ5QTEsMSwwLDAsMCwxMiw0LjIyTDQsMTIuMTMsMTIsMjBhMSwxLDAsMCwwLDEuNDEtMS40Mkw3Ljg2LDEzLjE0aDEzYTkuMDgsOS4wOCww''@;'; put 'put ''LDAsMSw5LjEzLDksOSw5LDAsMCwxLTUsOEExLDEsMCwwLDAsMjUuOTMsMzJhMTEsMTEsMCwwLDAtNS4wNi0yMC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGguQ2xyU2hhcGVTY3JvbGw9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0''@;'; put 'put ''LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxMy4xM2gtMlYyOS41NGEyLjUs''@;'; put 'put ''Mi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRabS00LjUtN0EyLjUsMi41LDAsMCwxLDMyLDYuNThWOS4xMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMDgsMTUuNFYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoMi42MUEzLjY2LDMuNjYsMCwwLDEs''@;'; put 'put ''MTksOS44OWwuNDQtLjc2SDE4VjYuNThhNC40OCw0LjQ4LDAsMCwwLS43Ni0yLjVIMjIuNGwxLjE1LTJIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAs''@;'; put 'put ''NC41LTQuNVYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5''@;'; put 'put ''LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoOC41NGE3LjUsNy41LDAsMCwxLTEuMzUtMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41aDUu''@;'; put 'put ''NTJhNy40NCw3LjQ0LDAsMCwxLC44Ni0ySDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNTh2MjNhMi41LDIuNSwwLDEsMS01LDBWMjZINy4xOVYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjVWMTMuMTNoLTJWMjkuNTRhMi41LDIuNSwwLDAsMS0y''@;'; put 'put ''LjUsMi41SDEwLjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0LjU0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4wOCwxNS40VjI5LjU0YTIuNSwyLjUsMCwwLDEtMi41''@;'; put 'put ''LDIuNUgxMC4yNGE0LjQ3LDQuNDcsMCwwLDAsLjc2LTIuNXYtMjNhMi41LDIuNSwwLDAsMSw1LDB2NC41NGgyLjYxQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5bDQuNTEtNy44SDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNThWMjRIMnY1LjVBNC41LDQuNSwwLDAsMCw2LjUsMzRIMjUuNThhNC41''@;'; put 'put ''LDQuNSwwLDAsMCw0LjUtNC41VjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3''@;'; put 'put ''LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoOC41NGE3LjQ2LDcuNDYsMCwwLDEtLjkyLTlIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgy''@;'; put 'put ''djUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxoLkNsclNoYXBlRmlsZVNldHRpbmdzPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy44MywyMy40M2ExLjE2LDEuMTYsMCwwLDAtLjcxLTEuMTJsLTEuNjgtLjVj''@;'; put 'put ''LS4wOS0uMjQtLjE4LS40OC0uMjktLjcxbC43OC0xLjQ0YTEuMTYsMS4xNiwwLDAsMC0uMjEtMS4zN2wtMS40Mi0xLjQxYTEuMTYsMS4xNiwwLDAsMC0xLjM3LS4ybC0xLjQ1Ljc2YTcuODQsNy44NCwwLDAsMC0uNzYtLjMybC0uNDgtMS41OGExLjE1LDEuMTUsMCwwLDAtMS4xMS0uNzdoLTJh''@;'; put 'put ''MS4xNiwxLjE2LDAsMCwwLTEuMTEuODJsLS40NywxLjU0YTcuNzYsNy43NiwwLDAsMC0uNzcuMzJsLTEuNDItLjc2YTEuMTYsMS4xNiwwLDAsMC0xLjM2LjJsLTEuNDUsMS40YTEuMTYsMS4xNiwwLDAsMC0uMjEsMS4zOEwxNy4wOCwyMWE3LjY0LDcuNjQsMCwwLDAtLjMxLjc0bC0xLjU4LjQ3''@;'; put 'put ''YTEuMTUsMS4xNSwwLDAsMC0uODMsMS4xMXYyYTEuMTUsMS4xNSwwLDAsMCwuODMsMS4xbDEuNTkuNDdhNy41Myw3LjUzLDAsMCwwLC4zMS43MmwtLjc4LDEuNDZhMS4xNiwxLjE2LDAsMCwwLC4yMSwxLjM3bDEuNDIsMS40YTEuMTYsMS4xNiwwLDAsMCwxLjM3LjIxbDEuNDgtLjc4Yy4yMy4x''@;'; put 'put ''MS40Ny4yLjcyLjI5TDIyLDMzLjE4YTEuMTYsMS4xNiwwLDAsMCwxLjExLjgxaDJhMS4xNiwxLjE2LDAsMCwwLDEuMTEtLjgybC40Ny0xLjU4Yy4yNC0uMDguNDctLjE4LjctLjI5bDEuNS43OWExLjE2LDEuMTYsMCwwLDAsMS4zNi0uMmwxLjQyLTEuNGExLjE2LDEuMTYsMCwwLDAsLjIxLTEu''@;'; put 'put ''MzhsLS43OS0xLjQ1cS4xNi0uMzQuMjktLjY5TDMzLDI2LjVhMS4xNSwxLjE1LDAsMCwwLC44My0xLjExWm0tMS42LDEuNjMtMi4xMS42Mi0uMTIuNDJhNiw2LDAsMCwxLS41LDEuMTlsLS4yMS4zOCwxLDEuOTEtMSwxLTItMS0uMzcuMmE2LjIxLDYuMjEsMCwwLDEtMS4yLjQ5bC0uNDIuMTIt''@;'; put 'put ''LjYzLDIuMDlIMjMuNDJsLS42My0yLjA4LS40Mi0uMTJhNi4yMyw2LjIzLDAsMCwxLTEuMjEtLjQ5bC0uMzctLjItMS45NCwxLTEtMSwxLTEuOTQtLjIyLS4zOEE2LDYsMCwwLDEsMTguMTcsMjZMMTgsMjUuNjMsMTYsMjVWMjMuNjlMMTgsMjMuMDhsLjEzLS40MWE1Ljk0LDUuOTQsMCwwLDEs''@;'; put 'put ''LjUzLTEuMjNMMTguOSwyMWwtMS0xLjg1LDEtLjk0LDEuODksMSwuMzgtLjIxYTYuMjMsNi4yMywwLDAsMSwxLjI2LS41MmwuNDEtLjEyLjYzLTJoMS4zOGwuNjIsMiwuNDEuMTJBNi4yMSw2LjIxLDAsMCwxLDI3LjEsMTlsLjM4LjIxLDEuOTItMSwxLDEtMSwxLjg5LjIxLjM4YTYuMDgsNi4w''@;'; put 'put ''OCwwLDAsMSwuNSwxLjIxbC4xMi40MiwyLjA2LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40''@;'; put 'put ''NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZWNUgyNnY3Ljg5YTMuMiwzLjIsMCwwLDEsMiwx''@;'; put 'put ''LjcyVjVhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjQzYTEuMTYsMS4xNiwwLDAsMC0uNzEtMS4xMmwtMS42OC0uNWMtLjA5LS4yNC0uMTgtLjQ4LS4yOS0uNzFsLjc4LTEuNDRhMS4xNiwxLjE2LDAsMCwwLS4yMS0xLjM3bC0xLjQyLTEuNDFhMS4xNiwx''@;'; put 'put ''LjE2LDAsMCwwLTEuMzctLjJsLTEuNDUuNzZhNy44NCw3Ljg0LDAsMCwwLS43Ni0uMzJsLS40OC0xLjU4YTEuMTUsMS4xNSwwLDAsMC0xLjExLS43N2gtMmExLjE2LDEuMTYsMCwwLDAtMS4xMS44MmwtLjQ3LDEuNTRhNy43Niw3Ljc2LDAsMCwwLS43Ny4zMmwtMS40Mi0uNzZhMS4xNiwxLjE2''@;'; put 'put ''LDAsMCwwLTEuMzYuMmwtMS40NSwxLjRhMS4xNiwxLjE2LDAsMCwwLS4yMSwxLjM4TDE3LjA4LDIxYTcuNjQsNy42NCwwLDAsMC0uMzEuNzRsLTEuNTguNDdhMS4xNSwxLjE1LDAsMCwwLS44MywxLjExdjJhMS4xNSwxLjE1LDAsMCwwLC44MywxLjFsMS41OS40N2E3LjUzLDcuNTMsMCwwLDAs''@;'; put 'put ''LjMxLjcybC0uNzgsMS40NmExLjE2LDEuMTYsMCwwLDAsLjIxLDEuMzdsMS40MiwxLjRhMS4xNiwxLjE2LDAsMCwwLDEuMzcuMjFsMS40OC0uNzhjLjIzLjExLjQ3LjIuNzIuMjlMMjIsMzMuMThhMS4xNiwxLjE2LDAsMCwwLDEuMTEuODFoMmExLjE2LDEuMTYsMCwwLDAsMS4xMS0uODJsLjQ3''@;'; put 'put ''LTEuNThjLjI0LS4wOC40Ny0uMTguNy0uMjlsMS41Ljc5YTEuMTYsMS4xNiwwLDAsMCwxLjM2LS4ybDEuNDItMS40YTEuMTYsMS4xNiwwLDAsMCwuMjEtMS4zOGwtLjc5LTEuNDVxLjE2LS4zNC4yOS0uNjlMMzMsMjYuNWExLjE1LDEuMTUsMCwwLDAsLjgzLTEuMTFabS0xLjYsMS42My0yLjEx''@;'; put 'put ''LjYyLS4xMi40MmE2LDYsMCwwLDEtLjUsMS4xOWwtLjIxLjM4LDEsMS45MS0xLDEtMi0xLS4zNy4yYTYuMjEsNi4yMSwwLDAsMS0xLjIuNDlsLS40Mi4xMi0uNjMsMi4wOUgyMy40MmwtLjYzLTIuMDgtLjQyLS4xMmE2LjIzLDYuMjMsMCwwLDEtMS4yMS0uNDlsLS4zNy0uMi0xLjk0LDEtMS0x''@;'; put 'put ''LDEtMS45NC0uMjItLjM4QTYsNiwwLDAsMSwxOC4xNywyNkwxOCwyNS42MywxNiwyNVYyMy42OUwxOCwyMy4wOGwuMTMtLjQxYTUuOTQsNS45NCwwLDAsMSwuNTMtMS4yM0wxOC45LDIxbC0xLTEuODUsMS0uOTQsMS44OSwxLC4zOC0uMjFhNi4yMyw2LjIzLDAsMCwxLDEuMjYtLjUybC40MS0u''@;'; put 'put ''MTIuNjMtMmgxLjM4bC42MiwyLC40MS4xMkE2LjIxLDYuMjEsMCwwLDEsMjcuMSwxOWwuMzguMjEsMS45Mi0xLDEsMS0xLDEuODkuMjEuMzhhNi4wOCw2LjA4LDAsMCwxLC41LDEuMjFsLjEyLjQyLDIuMDYuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC40OSwzMUg2VjVIMjEuODdMMjMsM0g2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuODMsMjMuNDNhMS4xNiwxLjE2LDAsMCwwLS43MS0xLjEybC0xLjY4LS41Yy0u''@;'; put 'put ''MDktLjI0LS4xOC0uNDgtLjI5LS43MWwuNzgtMS40NGExLjE2LDEuMTYsMCwwLDAtLjIxLTEuMzdsLTEuNDItMS40MWExLjE2LDEuMTYsMCwwLDAtMS4zNy0uMmwtMS40NS43NmE3Ljg0LDcuODQsMCwwLDAtLjc2LS4zMmwtLjQ4LTEuNThhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjc3aC0yYTEu''@;'; put 'put ''MTYsMS4xNiwwLDAsMC0xLjExLjgybC0uNDcsMS41NGE3Ljc2LDcuNzYsMCwwLDAtLjc3LjMybC0xLjQyLS43NmExLjE2LDEuMTYsMCwwLDAtMS4zNi4ybC0xLjQ1LDEuNGExLjE2LDEuMTYsMCwwLDAtLjIxLDEuMzhMMTcuMDgsMjFhNy42NCw3LjY0LDAsMCwwLS4zMS43NGwtMS41OC40N2Ex''@;'; put 'put ''LjE1LDEuMTUsMCwwLDAtLjgzLDEuMTF2MmExLjE1LDEuMTUsMCwwLDAsLjgzLDEuMWwxLjU5LjQ3YTcuNTMsNy41MywwLDAsMCwuMzEuNzJsLS43OCwxLjQ2YTEuMTYsMS4xNiwwLDAsMCwuMjEsMS4zN2wxLjQyLDEuNGExLjE2LDEuMTYsMCwwLDAsMS4zNy4yMWwxLjQ4LS43OGMuMjMuMTEu''@;'; put 'put ''NDcuMi43Mi4yOUwyMiwzMy4xOGExLjE2LDEuMTYsMCwwLDAsMS4xMS44MWgyYTEuMTYsMS4xNiwwLDAsMCwxLjExLS44MmwuNDctMS41OGMuMjQtLjA4LjQ3LS4xOC43LS4yOWwxLjUuNzlhMS4xNiwxLjE2LDAsMCwwLDEuMzYtLjJsMS40Mi0xLjRhMS4xNiwxLjE2LDAsMCwwLC4yMS0xLjM4''@;'; put 'put ''bC0uNzktMS40NXEuMTYtLjM0LjI5LS42OUwzMywyNi41YTEuMTUsMS4xNSwwLDAsMCwuODMtMS4xMVptLTEuNiwxLjYzLTIuMTEuNjItLjEyLjQyYTYsNiwwLDAsMS0uNSwxLjE5bC0uMjEuMzgsMSwxLjkxLTEsMS0yLTEtLjM3LjJhNi4yMSw2LjIxLDAsMCwxLTEuMi40OWwtLjQyLjEyLS42''@;'; put 'put ''MywyLjA5SDIzLjQybC0uNjMtMi4wOC0uNDItLjEyYTYuMjMsNi4yMywwLDAsMS0xLjIxLS40OWwtLjM3LS4yLTEuOTQsMS0xLTEsMS0xLjk0LS4yMi0uMzhBNiw2LDAsMCwxLDE4LjE3LDI2TDE4LDI1LjYzLDE2LDI1VjIzLjY5TDE4LDIzLjA4bC4xMy0uNDFhNS45NCw1Ljk0LDAsMCwxLC41''@;'; put 'put ''My0xLjIzTDE4LjksMjFsLTEtMS44NSwxLS45NCwxLjg5LDEsLjM4LS4yMWE2LjIzLDYuMjMsMCwwLDEsMS4yNi0uNTJsLjQxLS4xMi42My0yaDEuMzhsLjYyLDIsLjQxLjEyQTYuMjEsNi4yMSwwLDAsMSwyNy4xLDE5bC4zOC4yMSwxLjkyLTEsMSwxLTEsMS44OS4yMS4zOGE2LjA4LDYuMDgs''@;'; put 'put ''MCwwLDEsLjUsMS4yMWwuMTIuNDIsMi4wNi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC4xMiwyMC4zNWE0LDQsMCwxLDAsNC4wOCw0QTQuMDYsNC4wNiwwLDAsMCwyNC4x''@;'; put 'put ''MiwyMC4zNVptMCw2LjQ2YTIuNDMsMi40MywwLDEsMSwyLjQ4LTIuNDNBMi40NiwyLjQ2LDAsMCwxLDI0LjEyLDI2LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMx''@;'; put 'put ''SDZWNUgyMy4wOGE2Ljk0LDYuOTQsMCwwLDEsLjYtMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2Vk''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE1LjMzVjEyLjcxYTcsNywwLDAsMS0yLTF2MS44OEEzLjIsMy4yLDAsMCwxLDI4LDE1LjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgyNnY4Ljc4YTIuMzcsMi4zNywwLDAsMSwyLDEu''@;'; put 'put ''NTdWNWEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy41NCwyMy40''@;'; put 'put ''N2wtMi0uNjFhNy4wNiw3LjA2LDAsMCwwLS41OC0xLjQxbDEtMS44NmEuMzcuMzcsMCwwLDAtLjA3LS40NEwzMC40MSwxNy43YS4zNy4zNywwLDAsMC0uNDQtLjA3bC0xLjg1LDFBNyw3LDAsMCwwLDI2LjY5LDE4bC0uNjEtMmEuMzcuMzcsMCwwLDAtLjM2LS4yNWgtMmEuMzcuMzcsMCwwLDAt''@;'; put 'put ''LjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42MWwtMS44Mi0xYS4zNy4zNywwLDAsMC0uNDQuMDdsLTEuNDcsMS40NGEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MmE3LDcsMCwwLDAtLjYxLDEuNDRsLTIsLjYxYS4zNy4zNywwLDAsMC0uMjYuMzV2MmEuMzcuMzcsMCwwLDAsLjI2LjM1''@;'; put 'put ''bDIsLjYxYTcsNywwLDAsMCwuNjEsMS40MWwtMSwxLjlhLjM3LjM3LDAsMCwwLC4wNy40NEwxOSwzMmEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCwwLDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAsLjM1LjI2aDJhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJh''@;'; put 'put ''Nyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OGE3LjA2LDcuMDYsMCwwLDAsLjU4LTEuMzlsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0uMzVWMjMuODNBLjM3LjM3LDAsMCwwLDMzLjU0LDIz''@;'; put 'put ''LjQ3Wk0yNC43LDI4LjE5QTMuMzMsMy4zMywwLDEsMSwyOCwyNC44NiwzLjMzLDMuMzMsMCwwLDEsMjQuNywyOC4xOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiww''@;'; put 'put ''LDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAs''@;'; put 'put ''MCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYx''@;'; put 'put ''LDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wx''@;'; put 'put ''Ljg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMz''@;'; put 'put ''LDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgyMS44N0wyMywzSDZBMiwyLDAs''@;'; put 'put ''MCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYs''@;'; put 'put ''Ny4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJh''@;'; put 'put ''Nyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCww''@;'; put 'put ''LDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4''@;'; put 'put ''LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4x''@;'; put 'put ''OUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS41NSwzMUg2VjVIMjMuMDhhNi45NCw2Ljk0''@;'; put 'put ''LDAsMCwxLC42LTJINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJIMTcuMTZsLTEtMUEyLjM4LDIuMzgsMCwwLDEsMTUuNTUsMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0y''@;'; put 'put ''OCwxNS4zNlYxMi43MWE3LDcsMCwwLDEtMi0xdjJBMi4zNywyLjM3LDAsMCwxLDI4LDE1LjM2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIC8+JyksaC5DbHJTaGFwZVR3b1dheUFycm93cz0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBk''@;'; put 'put ''PSJNMjMuNDMsMTYuODNBMSwxLDAsMCwwLDIyLDE4LjI0TDI1LjcyLDIySDcuODNhMSwxLDAsMCwwLDAsMkgyNS43MkwyMiwyNy43YTEsMSwwLDEsMCwxLjQyLDEuNDFMMjkuNTMsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xMy4yNCwxOC40NWExLDEsMCwwLDAsLjcxLTEuNzFMMTAuMjQsMTNIMjguMTJhMSwxLDAsMCwwLDAtMkgxMC4yNGwzLjcxLTMuNzNhMSwxLDAsMCwwLTEuNDItMS40MUw2LjQyLDEybDYuMTEsNi4xNEExLDEsMCwwLDAsMTMuMjQsMTguNDVaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxoLkNsclNoYXBlU3dpdGNoPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LjcxLDE0SDIwLjkyVjEySDUuNzFMOS40Miw4LjI3QTEsMSwwLDEsMCw4LDYuODZMMS44OSwxMyw4LDE5LjE0YTEsMSwwLDEsMCwxLjQyLTEuNFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjEyIiB3aWR0aD0iMyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9''@;'; put 'put ''IjI4IiB5PSIxMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuOTIsMTcuODZhMSwxLDAsMCwwLTEuNDIsMS40MUwzMC4yMSwyM0gxNXYySDMwLjIxTDI2LjUsMjguNzRh''@;'; put 'put ''MSwxLDAsMSwwLDEuNDIsMS40TDM0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMCIgeT0iMjMiIHdpZHRoPSIzIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLGguQ2xyU2hhcGVUb29scz0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAsMTRIMTZhMSwx''@;'; put 'put ''LDAsMCwwLTEsMXY2YTEsMSwwLDAsMCwxLDFoNGExLDEsMCwwLDAsMS0xVjE1QTEsMSwwLDAsMCwyMCwxNFptLS40LDYuNkgxNi40VjE1LjRoMy4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzEsMTIu''@;'; put 'put ''MzgsMjkuNjIsOC4yOUExLDEsMCwwLDAsMjguOTIsOGgtNVY2LjA1QTIsMiwwLDAsMCwyMiw0SDEzLjg0QTEuOTIsMS45MiwwLDAsMCwxMiw2LjA1VjhINy4wOGExLDEsMCwwLDAtLjcxLjI5TDIuMjksMTIuMzhhMSwxLDAsMCwwLS4yOS43MVYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMTMuMDhBMSwxLDAsMCwwLDMzLjcxLDEyLjM4Wk0xNCw2aDhWOEgxNFpNMzIsMTdIMjJ2MS45M0gzMlYyOEg0VjE4LjkzSDE0VjE3SDRWMTMuNUw3LjUsMTBoMjFMMzIsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgeD0iMTYuNCIgeT0iMTUuNCIgd2lkdGg9IjMuMiIgaGVpZ2h0PSI1LjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsMjFhMSwxLDAsMCwxLTEsMUgxNmExLDEsMCwwLDEtMS0xVjE5SDJ2OWEyLDIs''@;'; put 'put ''MCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTlIMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjcxLDEyLjM4LDI5LjYyLDguMjlBMSwxLDAsMCwwLDI4LjkyLDhoLTVWNi4wNUEyLDIsMCwwLDAsMjIsNEgx''@;'; put 'put ''My44NEExLjkyLDEuOTIsMCwwLDAsMTIsNi4wNVY4SDcuMDhhMSwxLDAsMCwwLS43MS4yOUwyLjI5LDEyLjM4YTEsMSwwLDAsMC0uMjkuNzFWMTdIMTVWMTVhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2MkgzNFYxMy4wOEExLDEsMCwwLDAsMzMuNzEsMTIuMzhaTTIyLDhIMTRWNmg4''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxoLkNsclNoYXBlV2luZG93Q2xvc2U9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LjQxLDE4bDcuMjktNy4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4LDE2LjU5LDEwLjcxLDkuMjlhMSwxLDAsMCww''@;'; put 'put ''LTEuNDEsMS40MUwxNi41OSwxOCw5LjI5LDI1LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsNy4yOSw3LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxoLkNsclNoYXBlV2luZG93TWF4PSgwLHMu''@;'; put 'put ''Y2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy44OSw5aC0yMGEyLDIsMCwwLDAtMiwyVjI1YTIsMiwwLDAsMCwyLDJoMjBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMjcuODksOVptLTIwLDE2VjExaDIwVjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IC8+JyksaC5DbHJTaGFwZVdpbmRvd01pbj0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjdIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxoLkNsclNoYXBlV2luZG93UmVzdG9y''@;'; put 'put ''ZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsOEgxNGEyLDIsMCwwLDAtMiwydjJoMlYxMEgyOFYyMEgyNnYyaDJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMjgsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTIyLDE0SDhhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTZBMiwyLDAsMCwwLDIyLDE0Wk04LDI2VjE2SDIyVjI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksaC5DbHJTaGFwZVpvb21J''@;'; put 'put ''bj0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYsNEExMiwxMiwwLDEsMCwyOCwxNiwxMiwxMiwwLDAsMCwxNiw0Wm0wLDIxLjkxQTEwLDEwLDAsMSwxLDI2LDE2LDEwLDEwLDAsMCwxLDE2LDI1LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzEsMjkuNjlsLTUuMTctNS4xN0ExMy42OCwxMy42OCwwLDAsMSwyNS4xNSwyNmw1LjE1LDUuMTVhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTIxLDE1SDE3VjExYTEsMSwwLDAsMC0yLDB2NEgxMWExLDEsMCwwLDAsMCwyaDR2NGExLDEsMCwwLDAsMiwwVjE3aDRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLGguQ2xyU2hhcGVab29tT3V0PSgwLHMu''@;'; put 'put ''Y2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNiw0QTEyLDEyLDAsMSwwLDI4LDE2LDEyLDEyLDAsMCwwLDE2LDRabTAsMjEuOTFBMTAsMTAsMCwxLDEsMjYsMTYsMTAsMTAsMCwwLDEsMTYsMjUuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0zMS43MSwyOS42OWwtNS4xNy01LjE3QTEzLjY4LDEzLjY4LDAsMCwxLDI1LjE1LDI2bDUuMTUsNS4xNWExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjAsMTVIMTJhMSwxLDAsMCwwLDAsMmg4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxoLkNsclNoYXBlS2V5PSgwLHMuY2xySWNvblNWRykoJzxyZWN0IHg9IjYuMzMiIHk9IjEwLjcxIiB3aWR0aD0iOS43MSIgaGVp''@;'; put 'put ''Z2h0PSIyLjU3IiByeD0iMSIgcnk9IjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01LjIxIDExLjQzKSByb3RhdGUoLTQ1KSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSww''@;'; put 'put ''LDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2''@;'; put 'put ''LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI2LjMzIiB5PSIxMC43MSIgd2lkdGg9IjkuNzEiIGhlaWdodD0iMi41NyIgcng9IjEiIHJ5PSIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNS4yMSAxMS40Mykgcm90YXRlKC00NSkiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM1LDE2LjhsLjYzLS42M2E1LDUsMCwwLDAsLjYzLS43N0gyMi4yM2wtLjI5LDBMMjAuNTIsMTYuOCwzMiwyOC4yOFYzMkgyOC44NmwtMS43Ny0xLjc2di0y''@;'; put 'put ''LjhIMjMuNDF2LTNIMTguOGwtMy0zTDE0LDIzLjMxYTMsMywwLDAsMS00LjI0LDBMNC41LDE4YTMsMywwLDAsMSwwLTQuMjRsOC41Ni04LjU2YTMsMywwLDAsMSw0LjI0LDBMMjAuMSw4LjA2bDEtMS43OUwxOC43MSwzLjg0YTUsNSwwLDAsMC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAs''@;'; put 'put ''MCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40LS40TDE4LDI2LjQ4aDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4zMyIgeT0iMTAuNzEiIHdpZHRoPSI5LjcxIiBoZWlnaHQ9IjIuNTciIHJ4PSIxIiByeT0iMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUuMjEgMTEuNDMpIHJvdGF0ZSgtNDUpIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAs''@;'; put 'put ''Ny4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAs''@;'; put 'put ''MCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBj''@;'; put 'put ''eD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42QTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1''@;'; put 'put ''LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNDUtLjQ1LDIuMSwyLjJoMy40NHYzaDMuNjl2MS42M0wyOCwzNGg2VjI3LjQ1Wm0tOC41Ni02LjU5TDkuMzcsMTUuNjRhMSwxLDAsMCwxLTEuNDEsMGwtLjQtLjRh''@;'; put 'put ''MSwxLDAsMCwxLDAtMS40MUwxMyw4LjM2YTEsMSwwLDAsMSwxLjQxLDBsLjQuNEExLDEsMCwwLDEsMTQuODIsMTAuMThaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0xLjUyLTEuNjFMMjIsMTguMTgsMzIsMjguMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42YTUsNSwwLDAsMCwuNjMtLjc3SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDIuMDktMy42MkwxOC43MSwzLjg0YTUsNSwwLDAsMC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCww''@;'; put 'put ''LDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40NS0uNDUsMi4xLDIuMmgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVabS04LjU2LTYuNTlMOS4zNywxNS42NGExLDEsMCwwLDEtMS40MSwwbC0uNC0uNGExLDEsMCwwLDEsMC0xLjQxTDEzLDguMzZhMSwxLDAsMCwx''@;'; put 'put ''LDEuNDEsMGwuNC40QTEsMSwwLDAsMSwxNC44MiwxMC4xOFpNMzIsMzJIMjguODZsLTEuNzctMS43NnYtMi44SDIzLjQxdi0zSDE4LjhsLTEuNTItMS42MUwyMiwxOC4xOCwzMiwyOC4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4zOCwxNi43N2wuNi0uNkE1LDUsMCwwLDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwzLjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDds''@;'; put 'put ''NS4yNiw1LjI2YTUsNSwwLDAsMCw3LjA3LDBsLjQ1LS40NSwyLjEsMi4yaDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVptLTguNTYtNi41OUw5LjM3LDE1LjY0YTEsMSwwLDAsMS0xLjQxLDBsLS40LS40YTEsMSwwLDAsMSwwLTEuNDFMMTMsOC4zNmExLDEsMCwwLDEsMS40MSwwbC40''@;'; put 'put ''LjRBMSwxLDAsMCwxLDE0LjgyLDEwLjE4Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMS41Mi0xLjYxTDIyLDE4LjE4LDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxoLkNsclNoYXBlTGlicmFyeT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNDgsMjkuNjMs''@;'; put 'put ''MjYuNzQsMTEuODJhMiwyLDAsMCwwLTIuNTgtMS4xNkwyMSwxMS44NVY4LjkyQTEuOTIsMS45MiwwLDAsMCwxOS4wOCw3SDE0VjQuOTJBMS45MiwxLjkyLDAsMCwwLDEyLjA4LDNINUEyLDIsMCwwLDAsMyw1VjMyYTEsMSwwLDAsMCwxLDFIMjBhMSwxLDAsMCwwLDEtMVYxOS4yN2w1LDEzLjIx''@;'; put 'put ''YTEsMSwwLDAsMCwxLjI5LjU4bDUuNjEtMi4xNGExLDEsMCwwLDAsLjU4LTEuMjlaTTEyLDguODNWMzFINVY1aDdaTTE5LDMxSDE0VjloNVptOC41MS0uMjVMMjEuMTMsMTMuOTJsMy43NC0xLjQyLDYuMzksMTYuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi43NSwzSDUuMjVBMS4xNSwxLjE1LDAsMCwwLDQsNFYzM0gxNFY0QTEuMTUsMS4xNSwwLDAsMCwxMi43NSwzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43''@;'; put 'put ''NywzMS4wOWwtNi45NC0xOC4zYTEsMSwwLDAsMC0xLjI5LS41OEwyMiwxMy41OVY5YTEsMSwwLDAsMC0xLTFIMTZWMzNoNlYxNC42OUwyOC45MywzM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksaC5DbHJTaGFwZUJvbHQ9KDAscy5jbHJJY29uU1ZHKSgn''@;'; put 'put ''PHBhdGggZD0iTTEwLjUyLDM0aC0zYTEsMSwwLDAsMS0uODgtMS40NEwxMi41NSwyMUg2YTEsMSwwLDAsMS0uODUtMS41NGwxMC42OC0xN0ExLDEsMCwwLDEsMTYuNjQsMkgzMC4wN2ExLDEsMCwwLDEsLjc3LDEuNjlMMjEuNzgsMTRoNS4zOGExLDEsMCwwLDEsLjczLDEuNjZsLTE2LjYzLDE4''@;'; put 'put ''QTEsMSwwLDAsMSwxMC41MiwzNFpNOS4xOCwzMmguOTFMMjQuODYsMTZIMTkuNTlhMSwxLDAsMCwxLS43Ny0xLjY5TDI3Ljg4LDRIMTcuMTlMNy43NywxOUgxNC4yYTEsMSwwLDAsMSwuODgsMS40NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTMwLjgsMi4yOUEuNDkuNDksMCwwLDAsMzAuMzUsMkgxNi40MmEuNS41LDAsMCwwLS40Mi4yM2wtMTAuNzEsMTdBLjQ5LjQ5LDAsMCwwLDUuNywyMGg3LjY3TDYuNiwzMy4yNWEuNTIuNTIsMCwwLDAsLjQ2Ljc1aDNhLjUuNSwwLDAsMCwuMzctLjE2TDI4LDE0''@;'; put 'put ''Ljg1YS41LjUsMCwwLDAtLjM3LS44NUgyMC44OUwzMC43MiwyLjgyQS40OS40OSwwLDAsMCwzMC44LDIuMjlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGguQ2xyU2hhcGVXcmVuY2g9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjE4LDI2LjEx''@;'; put 'put ''LDIwLjM1LDEzLjI4QTkuMjgsOS4yOCwwLDAsMCw3LjU0LDIuNzlsLTEuMzQuNTksNS4zOCw1LjM4TDguNzYsMTEuNTksMy4zOCw2LjIxLDIuNzksNy41NEE5LjI3LDkuMjcsMCwwLDAsMTMuMjgsMjAuMzVMMjYuMTEsMzMuMThhMiwyLDAsMCwwLDIuODMsMGw0LjI0LTQuMjRBMiwyLDAsMCww''@;'; put 'put ''LDMzLjE4LDI2LjExWm0tNS42Niw1LjY2TDEzLjg4LDE4LjEybC0uNTcuMTZhNy4yNyw3LjI3LDAsMCwxLTkuMzEtNyw3LjIsNy4yLDAsMCwxLC4xNS0xLjQ4bDQuNjEsNC42MSw1LjY2LTUuNjZMOS44MSw0LjE1YTcuMjcsNy4yNywwLDAsMSw4LjQ3LDkuMTZsLS4xNi41N0wzMS43NywyNy41''@;'; put 'put ''M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjcuMTMiIGN5PSIyNy4wOSIgcj0iMS4zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTEuMjEgMjcuMTIpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43MywyNy43MiwxOS42NywxMy42NmE4Ljc5LDguNzksMCwwLDAtMTItMTAuNUwxMyw4LjUzLDguNTMsMTMsMy4xNiw3LjY3YTguNzksOC43OSwwLDAsMCwxMC41LDEyTDI3LjcyLDMzLjczYTEu''@;'; put 'put ''MDcsMS4wNywwLDAsMCwxLjUsMGw0LjUxLTQuNTFBMS4wNywxLjA3LDAsMCwwLDMzLjczLDI3LjcyWk0yOSwyOWExLjM4LDEuMzgsMCwxLDEsMC0yQTEuMzgsMS4zOCwwLDAsMSwyOSwyOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksaC5DbHJTaGFwZUJ1''@;'; put 'put ''bGxzZXllPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsLjc3LDEuODZhMTQuMDcsMTQuMDcsMCwxLDEtMTAsMTBsLTEuODYtLjc4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LjQ1LDE1LjdhMTAuODEsMTAuODEsMCwxLDAsOC4zLTguMjZMMTYuMzcsOUE5LjI0LDkuMjQsMCwxLDEsOSwxNi4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTE4LDIyLjA5YTQuMDgsNC4wOCwwLDAsMS00LTMuNjhsLTEuNjMtLjY4YzAsLjA5LDAsLjE4LDAsLjI3QTUuNjksNS42OSwwLDEsMCwxOCwxMi4zMWgtLjI0TDE4LjQzLDE0QTQuMDcsNC4wNywwLDAsMSwxOCwyMi4wOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguMiwxMy4zNGEuNS41LDAsMCwwLC4zNS4xNUgxMi4ybDUuMzcsNS4zN0ExLDEsMCwwLDAsMTksMTcuNDRMMTMuNTMsMTJWOC41MWEuNS41LDAsMCwwLS4xNS0uMzVMNy43OSwyLjU3YS41LjUsMCwwLDAtLjg1LjM1djRIM2Eu''@;'; put 'put ''NS41LDAsMCwwLS4zNS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDE4Ljg1YTEsMSwwLDAsMS0xLjQxLDBsLTMtM0E0LDQsMCwwLDAsMTMuOTEsMTgsNC4wOSw0LjA5LDAsMSwwLDE4LDEzLjkxYTQs''@;'; put 'put ''NCwwLDAsMC0yLC41NWwzLDNBMSwxLDAsMCwxLDE5LDE4Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsMS42LDMuODlBMTEuODksMTEuODksMCwxLDEsNi40''@;'; put 'put ''OSwxNS4zTDIuNjEsMTMuNjhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxNS45NEExMC4xNywxMC4xNywwLDEsMCwxNiw4bDEuNjksNC4xMS4zMSwwQTUuODgsNS44OCwwLDEsMSwx''@;'; put 'put ''Mi4xMiwxOGMwLS4xMiwwLS4yMywwLS4zNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC4yLDEzLjM0YS41LjUsMCwwLDAsLjM1LjE1SDEyLjJsMi4zNSwyLjM1QTQuMDksNC4wOSwwLDAsMSwxNiwxNC40NkwxMy41''@;'; put 'put ''MywxMlY4LjUxYS41LjUsMCwwLDAtLjE1LS4zNUw3Ljc5LDIuNTdhLjUuNSwwLDAsMC0uODUuMzV2NEgzYS41LjUsMCwwLDAtLjM1Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxoLkNsclNoYXBlVGFyZ2V0PSgwLHMuY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw3LjJB''@;'; put 'put ''MTAuOCwxMC44LDAsMSwwLDI4LjgsMTgsMTAuODEsMTAuODEsMCwwLDAsMTgsNy4yWm0wLDIwQTkuMiw5LjIsMCwxLDEsMjcuMiwxOCw5LjIxLDkuMjEsMCwwLDEsMTgsMjcuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTE4LDEyLjMxQTUuNjksNS42OSwwLDEsMCwyMy42OSwxOCw1LjY5LDUuNjksMCwwLDAsMTgsMTIuMzFabTAsOS43N0E0LjA5LDQuMDksMCwxLDEsMjIuMDksMTgsNC4wOSw0LjA5LDAsMCwxLDE4LDIyLjA5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSI0LjA5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDcuODNBMTAuMTcsMTAuMTcsMCwxLDAsMjguMTcsMTgsMTAuMTgsMTAuMTgs''@;'; put 'put ''MCwwLDAsMTgsNy44M1ptMCwxNkE1Ljg4LDUuODgsMCwxLDEsMjMuODgsMTgsNS44OCw1Ljg4LDAsMCwxLDE4LDIzLjg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2''@;'; put 'put ''LDAsMCwwLDE4LDJabTAsMjcuODNBMTEuODMsMTEuODMsMCwxLDEsMjkuODMsMTgsMTEuODUsMTEuODUsMCwwLDEsMTgsMjkuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLGguQ2xyU2hhcGVGbGFtZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJN''@;'; put 'put ''MzEuMywxNi42NmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy43OCw0LjQyLDE5LjVBOS4zLDkuMywwLDAsMCwzLDI0LjYxQzMsMjkuNzIsNS44NiwzNCwxMS42NywzNEgyMi40''@;'; put 'put ''OEMyOC4yOCwzNCwzMywyOSwzMywyMi43OEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjY2Wk0yMi40OCwzMkgxMS43N0M4LjEzLDMyLDUsMjguNjYsNSwyNC42MWE3LjQzLDcuNDMsMCwwLDEsMS4xNi00LjEzYy43My0xLjI5LDQuMDUtNy4yMSw1LjY1LTEwLjA3bDMsNS4yOGExLDEsMCww''@;'; put 'put ''LDAsLjg3LjUxaDBhMSwxLDAsMCwwLC44Ny0uNTFMMjIuNDksNWMxLjg2LDMuMzMsNi4xNSwxMSw3LjA3LDEyLjZBOS4yNCw5LjI0LDAsMCwxLDMxLDIyLjc4QzMxLDI3Ljg3LDI3LjE4LDMyLDIyLjQ4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUuNzUsMjEuNzNjLS42NS0xLjE2LTQuMzgtNy44MS00LjM4LTcuODFhLjguOCwwLDAsMC0xLjQsMGwtNC4yLDcuNDgtMS41OS0yLjQ5YS44LjgsMCwwLDAtMS4zNSwwTDkuMzcsMjQuMzVhNC4zNSw0LjM1LDAsMCwwLS44MiwyLjYsNC40OSw0LjQ5''@;'; put 'put ''LDAsMCwwLC41LDJIMTFhMywzLDAsMCwxLS44My0yLDIuNzgsMi43OCwwLDAsMSwuNTYtMS43M2wyLjgtNC4zOCwxLjY2LDIuNmEuOC44LDAsMCwwLDEuNDEtLjEyLDcuODIsNy44MiwwLDAsMSwuNC0uOEwyMC42NywxNmwzLjY5LDYuNTdhNC44Myw0LjgzLDAsMCwxLC43NywyLjcxQTUsNSww''@;'; put 'put ''LDAsMSwyMy40NiwyOWgyLjEzYTYuNjgsNi42OCwwLDAsMCwxLjE0LTMuNzQsNi40NSw2LjQ1LDAsMCwwLTEtMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMywxNi4zMmMtMS4xOS0yLjA5LTcuOTQt''@;'; put 'put ''MTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy40Myw0LjQyLDE5LjE1QTkuMyw5LjMsMCwwLDAsMywyNC4yNmMwLDUuMTEsMy44OCw5LjY1LDguNjcsOS43NEgyMi40OEMyOC4yOCwzNCwzMywyOC42MiwzMywy''@;'; put 'put ''Mi40NEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjMyWk0yMS40OCwzMkgxNC41NEE0LjY4LDQuNjgsMCwwLDEsMTAsMjcuNDFhMy45MSwzLjkxLDAsMCwxLC43NS0yLjM0bDMuMzUtNS4yMWEuNS41LDAsMCwxLC44NCwwbDEuNzgsMi43NywwLS4wOGMuNjMtMS4xMSw0LjIzLTcuNDgsNC4y''@;'; put 'put ''My03LjQ4YS41LjUsMCwwLDEsLjg3LDBzMy42LDYuMzgsNC4yMyw3LjQ4QTUuODMsNS44MywwLDAsMSwyNywyNS43NkMyNywzMiwyMi4xLDMyLDIxLjQ4LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxoLkNsclNoYXBlSG91cmdsYXNzPSgwLHMuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMUE2LjY3LDYuNjcsMCwwLDAsMjYsMTEuMDlWNGgzYTEsMSwwLDAsMCwwLTJI''@;'; put 'put ''N0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAs''@;'; put 'put ''MCwwLTJaTTEyLDI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEs''@;'; put 'put ''MTIsMTEuMDlWNEgyNHY3LjA5YTQuNjYsNC42NiwwLDAsMS0xLjg4LDMuNzJsLTEuMjgsMWgwYTQuNjYsNC42NiwwLDAsMS0xLjE4LjYzLDEsMSwwLDAsMC0uNjUuOTR2MS4zNGExLDEsMCwwLDAsLjY1Ljk0LDQuNjcsNC42NywwLDAsMSwxLjE5LjYzbDEuMjgsMUE0LjY2LDQuNjYsMCwwLDEs''@;'; put 'put ''MjQsMjQuOTFWMzJIMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2''@;'; put 'put ''LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY0LDYuNjQsMCwwLDAsMS4wOS0xSDIyLjIzYTMuNjQsMy42NCwwLDAsMS0uNzgtLjA5bC0uNjIuNDZoMGE0LjY2LDQuNjYsMCwwLDEtMS4xOC42MywxLDEsMCwwLDAtLjY1Ljk0djEuMzRhMSwxLDAsMCwwLC42NS45NCw0LjY3LDQuNjcsMCwwLDEs''@;'; put 'put ''MS4xOS42M2wxLjI4LDFBNC42Niw0LjY2LDAsMCwxLDI0LDI0LjkxVjMySDEyVjI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCww''@;'; put 'put ''LDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyMi40NUwyMy42LDJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEu''@;'; put 'put ''MjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0''@;'; put 'put ''LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY4LDYuNjgsMCwwLDAsMi41Ny00''@;'; put 'put ''LjE2QTcuNTMsNy41MywwLDAsMSwyNCwxMC40OXYuNjFhNC42Niw0LjY2LDAsMCwxLTEuODgsMy43MmwtMS4yOCwxaDBhNC42Niw0LjY2LDAsMCwxLTEuMTguNjMsMSwxLDAsMCwwLS42NS45NHYxLjM0YTEsMSwwLDAsMCwuNjUuOTQsNC42Nyw0LjY3LDAsMCwxLDEuMTkuNjNsMS4yOCwxQTQu''@;'; put 'put ''NjYsNC42NiwwLDAsMSwyNCwyNC45MVYzMkgxMlYyNC45MWE0LjY2LDQuNjYsMCwwLDEsMS44OC0zLjcybDEuMjgtMWE0LjY2LDQuNjYsMCwwLDEsMS4xOC0uNjMsMSwxLDAsMCwwLC42NS0uOTRWMTcuMzNhMSwxLDAsMCwwLS42NS0uOTQsNC42Nyw0LjY3LDAsMCwxLTEuMTktLjYzbC0xLjI4''@;'; put 'put ''LTFBNC42Niw0LjY2LDAsMCwxLDEyLDExLjA5VjRIMjIuNzhhNy40NSw3LjQ1LDAsMCwxLC44OS0ySDdBMSwxLDAsMCwwLDcsNGgzdjcuMDlhNi42Nyw2LjY3LDAsMCwwLDIuNjksNS4zM2wxLjI4LDFBNi4zNiw2LjM2LDAsMCwwLDE1LDE4aDBhNi4yNyw2LjI3LDAsMCwwLTEsLjYybC0xLjI4''@;'; put 'put ''LDFBNi42Nyw2LjY3LDAsMCwwLDEwLDI0LjkxVjMySDdhMSwxLDAsMCwwLDAsMkgyOWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiBy''@;'; put 'put ''PSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcsNGgyMmExLDEsMCwwLDAsMC0yaC0yMmExLDEsMCwxLDAsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC42NywzMmgtMjJhMSwxLDAsMCwwLDAsMmgyMmExLDEsMCwxLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwx''@;'; put 'put ''NS42N0E2LjA3LDYuMDcsMCwwLDAsMjUsMTEuMTJWNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZhMTEuNDgsMTEuNDgsMCwwLDAtMi45MSwxLjcyLDYuMDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYy''@;'; put 'put ''NC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOUExMS40OCwxMS40OCwwLDAsMCwyMi41NSwxNS42N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgu''@;'; put 'put ''NjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi42Nyw0SDIyLjQ1TDIzLjYsMkg2LjY3YTEsMSwwLDEsMCwwLDJa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjUxLDIwLjI3YTYuMDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDEx''@;'; put 'put ''LjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOWExMS40OCwxMS40OCwwLDAsMCwyLjkxLTEuNzJsLjMtLjI3aC0uNjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwx''@;'; put 'put ''LjcydjEuMTZBMTEuNDgsMTEuNDgsMCwwLDAsMTIuNTEsMjAuMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIz''@;'; put 'put ''LDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcsNEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg5''@;'; put 'put ''LTJoLTE3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwyMC4yN2ExMS40OCwxMS40OCwwLDAsMC0yLjkxLTEuNzJWMTcuMzlhMTEuNDgsMTEuNDgsMCww''@;'; put 'put ''LDAsMi45MS0xLjcyQTYuMjUsNi4yNSwwLDAsMCwyNSwxMS41NSw3LjQ3LDcuNDcsMCwwLDEsMjIuNSw2SDEwLjA2djUuMTJhNi4wNyw2LjA3LDAsMCwwLDIuNDUsNC41NSwxMS40OCwxMS40OCwwLDAsMCwyLjkxLDEuNzJ2MS4xNmExMS40OCwxMS40OCwwLDAsMC0yLjkxLDEuNzIsNi4wNyw2''@;'; put 'put ''LjA3LDAsMCwwLTIuNDUsNC41NXY1LjEySDI1VjI0LjgyQTYuMDcsNi4wNywwLDAsMCwyMi41NSwyMC4yN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksaC5DbHJTaGFwZU5vQWNjZXNzPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBB''@;'; put 'put ''MTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy4xNSwxNUg4Ljg1QTEuODUsMS44NSwwLDAsMCw3LDE2Ljg1djIuMjlBMS44NSwxLjg1LDAsMCww''@;'; put 'put ''LDguODUsMjFIMjcuMTVBMS44NSwxLjg1LDAsMCwwLDI5LDE5LjE1VjE2Ljg1QTEuODUsMS44NSwwLDAsMCwyNy4xNSwxNVptLjI1LDQuMTVhLjI1LjI1LDAsMCwxLS4yNS4yNUg4Ljg1YS4yNS4yNSwwLDAsMS0uMjUtLjI1VjE2Ljg1YS4yNS4yNSwwLDAsMSwuMjUtLjI1SDI3LjE1YS4yNS4y''@;'; put 'put ''NSwwLDAsMSwuMjUuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LjE1LDIwSDYuODVBLjg1Ljg1LDAsMCwxLDYsMTkuMTVWMTYu''@;'; put 'put ''ODVBLjg1Ljg1LDAsMCwxLDYuODUsMTZIMjkuMTVhLjg1Ljg1LDAsMCwxLC44NS44NXYyLjI5QS44NS44NSwwLDAsMSwyOS4xNSwyMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksaC5DbHJTaGFwZU9yZ2FuaXphdGlvbj0oMCxzLmNsckljb25TVkcpKCc8''@;'; put 'put ''cG9seWdvbiBwb2ludHM9IjkuOCAxOC44IDI2LjIgMTguOCAyNi4yIDIxLjg4IDI3LjggMjEuODggMjcuOCAxNy4yIDE4LjggMTcuMiAxOC44IDE0IDE3LjIgMTQgMTcuMiAxNy4yIDguMiAxNy4yIDguMiAyMS44OCA5LjggMjEuODggOS44IDE4LjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDIzSDRhMiwyLDAsMCwwLTIsMnY2YTIsMiwwLDAsMCwyLDJIMTRhMiwyLDAsMCwwLDItMlYyNUEyLDIsMCwwLDAsMTQsMjNaTTQsMzFWMjVIMTR2NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDIzSDIyYTIsMiwwLDAsMC0yLDJ2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjVBMiwyLDAsMCwwLDMyLDIzWk0yMiwzMVYyNUgzMnY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsMTNIMjNhMiwyLDAsMCwwLDItMlY1YTIsMiwwLDAsMC0yLTJIMTNhMiwyLDAsMCwwLTIsMnY2QTIsMiwwLDAsMCwxMywxM1ptMC04SDIzdjZIMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOS44IDE4LjggMjYuMiAxOC44IDI2LjIgMjEuODggMjcuOCAyMS44OCAyNy44IDE3LjIgMTguOCAxNy4yIDE4LjggMTQgMTcuMiAxNCAxNy4yIDE3LjIgOC4yIDE3LjIgOC4yIDIxLjg4IDkuOCAyMS44OCA5LjggMTguOCIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIiIHk9IjIzIiB3aWR0aD0iMTQiIGhlaWdodD0iMTAiIHJ4PSIyIiByeT0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxy''@;'; put 'put ''ZWN0IHg9IjIwIiB5PSIyMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksaC5DbHJTaGFwZUJhbGFuY2U9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDMzSDEyYTEsMSwwLDAsMSwwLTJIMjRhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIyLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDdIOEExLDEsMCwwLDEsOCw1SDI4YTEs''@;'; put 'put ''MSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi45MywyNC43OWE3LjIzLDcuMjMsMCwwLDEtNS44MS0yLjg5bC0uNi0uOCwxLjU5LTEuMjEuNi44YTUuMjgsNS4yOCwwLDAsMCw4LjQyLDBs''@;'; put 'put ''LjYtLjgsMS41OSwxLjIxLS42LjhBNy4yMyw3LjIzLDAsMCwxLDI2LjkzLDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNTEsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDI2LjkzLDEyLjJsLTIu''@;'; put 'put ''ODUsNi41N2EuOC44LDAsMCwxLTEuNDctLjY0TDI2LjIsOS44N2EuODMuODMsMCwwLDEsMS40NywwbDMuNTgsOC4yNmEuOC44LDAsMCwxLS43MywxLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOS42OCwy''@;'; put 'put ''NC43OUE3LjIzLDcuMjMsMCwwLDEsMy44OCwyMS45bC0uNi0uOEw0Ljg2LDE5LjlsLjYuOGE1LjI4LDUuMjgsMCwwLDAsOC40MiwwbC42LS44LDEuNTksMS4yMS0uNi44QTcuMjMsNy4yMywwLDAsMSw5LjY4LDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjYsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDkuNjgsMTIuMiw2Ljg0LDE4Ljc3YS44LjgsMCwwLDEtMS40Ny0uNjRMOC45NSw5Ljg3YS44My44MywwLDAsMSwxLjQ3LDBMMTQsMTguMTNhLjguOCwwLDAsMS0uNzMsMS4xMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPicpLGguQ2xyU2hhcGVJZEJhZGdlPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyMmE0LjIzLDQuMjMsMCwxLDAtNC4yMy00LjIzQTQuMjMsNC4yMywwLDAsMCwxOCwyMlptMC02Ljg2YTIuNjMsMi42Myww''@;'; put 'put ''LDEsMS0yLjYzLDIuNjNBMi42MywyLjYzLDAsMCwxLDE4LDE1LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNGEyLDIsMCwwLDAtMi0ySDE2YTIsMiwwLDAsMC0yLDJ2N2g4Wk0yMCw5SDE2VjRoNFoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMwVjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3YTEuMTMsMS4xMywwLDAs''@;'; put 'put ''MC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw2SDI0VjhoNFYzMkg4Vjho''@;'; put 'put ''NFY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMjgsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyYTQuMjMsNC4yMywwLDEsMC00''@;'; put 'put ''LjIzLTQuMjNBNC4yMyw0LjIzLDAsMCwwLDE4LDIyWm0wLTYuODZhMi42MywyLjYzLDAsMSwxLTIuNjMsMi42M0EyLjYzLDIuNjMsMCwwLDEsMTgsMTUuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwaDEuNlYyNy44N0E4LjMzLDguMzMsMCwwLDEsMTgsMjUuMjlhOC4zMyw4LjMzLDAsMCwxLDYuNCwyLjU5VjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42''@;'; put 'put ''OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksOS44OSwxOS41Niw5SDE2VjRoNFY4LjI0bDItMy40NlY0YTIsMiwwLDAsMC0yLTJI''@;'; put 'put ''MTZhMiwyLDAsMCwwLTIsMnY3aDQuNjRBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40VjMySDhWOGg0VjZIOEEyLDIsMCww''@;'; put 'put ''LDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgs''@;'; put 'put ''MCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjJhNC4yMyw0LjIzLDAsMSwwLTQuMjMtNC4yM0E0LjIzLDQuMjMsMCwwLDAsMTgsMjJabTAtNi44NmEyLjYzLDIuNjMsMCwxLDEtMi42MywyLjYzQTIuNjMsMi42MywwLDAsMSwxOCwxNS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDhaTTIwLDlIMTZWNGg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFk''@;'; put 'put ''Z2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5Ljks''@;'; put 'put ''OS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJWMzJIOFY4aDRWNkg4QTIsMiwwLDAsMCw2LDhW''@;'; put 'put ''MzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiBy''@;'; put 'put ''PSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMSw0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYu''@;'; put 'put ''NzNWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDZIMjNWOGg1VjMy''@;'; put 'put ''SDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwyOCw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSw5Ljg5LDIxLDYuNVY0YTIsMiww''@;'; put 'put ''LDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEw''@;'; put 'put ''LjI2LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjku''@;'; put 'put ''MDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNGEyLDIsMCwwLDAtMi0ySDE3YTIsMiwwLDAsMC0yLDJ2Nmg2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1i''@;'; put 'put ''YWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjYsMjdhMS4xMywxLjEzLDAsMCwwLS4yNi43M1YzMEgyNlYyNy43YTEuMTIsMS4xMiwwLDAsMC0uMjYtLjczQTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwxMC4yNiwyN1oiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFk''@;'; put 'put ''Z2UiIC8+JyksaC5DbHJTaGFwZVJlcGVhdD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYsMTQuMTVBMy4xNywzLjE3LDAsMCwxLDkuMTcsMTFIMjguNGwtNC4yOCw0LjU0YTEsMSwwLDEsMCwxLjQ2LDEuMzdM''@;'; put 'put ''MzIuMDksMTAsMjUuNTgsMy4wOWExLDEsMCwxLDAtMS40NiwxLjM3TDI4LjQsOUg5LjE3QTUuMTcsNS4xNywwLDAsMCw0LDE0LjE1djYuMWwyLTIuMTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLDIxLjg1''@;'; put 'put ''QTMuMTcsMy4xNywwLDAsMSwyNi44MywyNUg3LjZsNC4yOC00LjU0YTEsMSwwLDEsMC0xLjQ2LTEuMzdMMy45MSwyNmw2LjUxLDYuOTFhMSwxLDAsMSwwLDEuNDYtMS4zN0w3LjYsMjdIMjYuODNBNS4xNyw1LjE3LDAsMCwwLDMyLDIxLjg1di02LjFsLTIsMi4xMloiLz4nKSxoLkNsclNoYXBl''@;'; put 'put ''RmlsZUdyb3VwPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMzRIMTNhMSwxLDAsMCwxLTEtMVYxMWExLDEsMCwwLDEsMS0xSDMxYTEsMSwwLDAsMSwxLDFWMzNBMSwxLDAsMCwxLDMxLDM0Wk0xNCwzMkgz''@;'; put 'put ''MFYxMkgxNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMyIgeD0iMTYiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjE2IiB5PSIyNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNNiwyNFY0SDI0VjNhMSwxLDAsMCwwLTEtMUg1QTEsMSwwLDAsMCw0LDNWMjVhMSwxLDAsMCwwLDEsMUg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTYiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMxLDEwSDEzYTEsMSwwLDAsMC0xLDFW''@;'; put 'put ''MzNhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMS0xVjExQTEsMSwwLDAsMCwzMSwxMFpNMjgsMjZIMTZWMjRIMjhabTAtNEgxNlYyMEgyOFptMC00SDE2VjE2SDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYs''@;'; put 'put ''MjRWNEgyNFYzYTEsMSwwLDAsMC0xLTFINUExLDEsMCwwLDAsNCwzVjI1YTEsMSwwLDAsMCwxLDFINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4''@;'; put 'put ''LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPicpLGguQ2xyU2hhcGVQYXBlcmNsaXA9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik04LjQyLDMyLjZBNi4zLDYuMywwLDAsMSw0LDMwLjc5bC0uMTMtLjEzQTYuMiw2''@;'; put 'put ''LjIsMCwwLDEsMiwyNi4yMiw2Ljc3LDYuNzcsMCwwLDEsNCwyMS40TDE5LjUsNi4wN2E4LjY3LDguNjcsMCwwLDEsMTIuMTUtLjM1QTgsOCwwLDAsMSwzNCwxMS40NGE5LDksMCwwLDEtMi43LDYuMzZMMTcuMzcsMzEuNkExLDEsMCwxLDEsMTYsMzAuMThMMjkuODksMTYuMzhBNyw3LDAsMCww''@;'; put 'put ''LDMyLDExLjQ0YTYsNiwwLDAsMC0xLjc2LTQuMyw2LjY3LDYuNjcsMCwwLDAtOS4zNC4zNUw1LjQ1LDIyLjgyQTQuNzgsNC43OCwwLDAsMCw0LDI2LjIyYTQuMjEsNC4yMSwwLDAsMCwxLjI0LDNsLjEzLjEzYTQuNjQsNC42NCwwLDAsMCw2LjUtLjIxTDI1LjIyLDE1Ljk0QTIuNywyLjcsMCww''@;'; put 'put ''LDAsMjYsMTRhMi4zNSwyLjM1LDAsMCwwLS42OS0xLjY4LDIuNjEsMi42MSwwLDAsMC0zLjY2LjEzbC05LjIsOS4xMmExLDEsMCwxLDEtMS40MS0xLjQyTDIwLjI4LDExYTQuNjIsNC42MiwwLDAsMSw2LjQ4LS4xM0E0LjMzLDQuMzMsMCwwLDEsMjgsMTRhNC42OCw0LjY4LDAsMCwxLTEuNDEs''@;'; put 'put ''My4zNEwxMy4yOCwzMC41OEE2LjkxLDYuOTEsMCwwLDEsOC40MiwzMi42WiIvPicpLGguQ2xyU2hhcGVTaHJpbms9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxNUgyMi40MWw5LjI1LTkuMjVhMSwxLDAs''@;'; put 'put ''MCwwLTEuNDEtMS40MUwyMSwxMy41OVY0YTEsMSwwLDAsMC0yLDBWMTdIMzJhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDAsMCwyaDkuNTlMNC4zMywzMC4yNWEx''@;'; put 'put ''LDEsMCwxLDAsMS40MSwxLjQxTDE1LDIyLjQxVjMyYTEsMSwwLDAsMCwyLDBWMTlaIi8+JyksaC5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC40NCwzMS45NGE3LjMxLDcuMzEsMCwwLDEtNS43LTExLjg4TDcuMzIsMTguNjRhOS4zLDkuMyww''@;'; put 'put ''LDAsMCwxMy4xLDEzLjExTDE5LDMwLjMzQTcuMjksNy4yOSwwLDAsMSwxNC40NCwzMS45NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjM2LDEuNjdhNC4xMiw0LjEyLDAsMSwwLDQuMTEsNC4xMUE0LjEy''@;'; put 'put ''LDQuMTIsMCwwLDAsMjUuMzYsMS42N1ptMCw2LjIzYTIuMTIsMi4xMiwwLDEsMSwyLjExLTIuMTJBMi4xMiwyLjEyLDAsMCwxLDI1LjM2LDcuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU2LDE4LjE4''@;'; put 'put ''aC01YTEsMSwwLDAsMC0uMjQuMDVsMy4wOS0zLjU1YTIuODMsMi44MywwLDAsMC0uNjktNC4zM2wtOC00LjZhMSwxLDAsMCwwLTEuMTIuMDhMOS44Myw5LjU4QTEsMSwwLDAsMCw5LjY2LDExYTEsMSwwLDAsMCwuNzkuMzgsMSwxLDAsMCwwLC42MS0uMjFsNC4yNy0zLjM0LDMuMTEsMS43Ny01''@;'; put 'put ''LjA4LDUuNzhoMGE5LjI4LDkuMjgsMCwwLDAtNC41MywxLjgzbDEuNDMsMS40M0E3LjMsNy4zLDAsMCwxLDIwLjQyLDI4LjgxbDEuNDIsMS40M2E5LjI3LDkuMjcsMCwwLDAsLjc3LTEwLjA2aDIuODJsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODgsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45''@;'; put 'put ''LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjU2LDE4LjE4Wm0tNi4zNy03LjU2LDIuNTIsMS40NmEuNzkuNzksMCwwLDEsLjQuNTkuODEuODEsMCwwLDEtLjIuNjlMMTkuNzUsMTdBOS4xNyw5LjE3LDAsMCwwLDE2LDE1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzcsMzEuOTRhNy4zMSw3LjMxLDAsMCwxLTUuNy0xMS44OEw3LjY1LDE4LjY0YTkuMyw5LjMsMCwwLDAsMTMuMSwxMy4xMWwtMS40Mi0xLjQyQTcuMjksNy4yOSwwLDAsMSwxNC43NywzMS45NFoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNjUsMi4xYTMuMTIsMy4xMiwwLDEsMCwzLjExLDMuMTJBMy4xMiwzLjEyLDAsMCwwLDI2LjY1LDIuMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODEsMTguMThIMjEuNDdxLS4zMS0uMzMtLjY2LS42M2w0LjM4LTQuODZhMi4xNCwyLjE0LDAsMCwwLS41My0zLjI3TDIwLjksNy4yM2wwLDBMMTcuMDUsNS4wN2ExLDEsMCwwLDAtMS4xMS4wOEwxMS4xNSw4LjlhMSwxLDAsMCwwLDEuMjMsMS41''@;'; put 'put ''OGw0LjI3LTMuMzQsMi44NywxLjYzTDEzLjYsMTUuMzlhOS4zMyw5LjMzLDAsMCwwLTQuNDQsMS44MmwxLjQyLDEuNDNBNy4zLDcuMywwLDAsMSwyMC43NSwyOC44MWwxLjQzLDEuNDNBOS4yNyw5LjI3LDAsMCwwLDIzLDIwLjE4aDIuNzRsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODcsMS4xMWgu''@;'; put 'put ''MTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjgxLDE4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxoLkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0i''@;'; put 'put ''TTMwLjA2LDExaC0yNGExLDEsMCwxLDAsMCwySDE0djkuNjVzMCwwLDAsMGwtMy43NSwxMGExLDEsMCwwLDAsLjU4LDEuMjksMS4xMywxLjEzLDAsMCwwLC4zNi4wNiwxLDEsMCwwLDAsLjkzLS42NUwxNS42MiwyNGg0Ljc2bDMuNTIsOS4zNWExLDEsMCwwLDAsLjkzLjY1LDEuMTMsMS4xMyww''@;'; put 'put ''LDAsMCwuMzYtLjA2LDEsMSwwLDAsMCwuNTgtMS4yOUwyMiwyMi42OHMwLDAsMCwwVjEzaDguMDZhMSwxLDAsMSwwLDAtMlpNMjAsMjJIMTZWMTNoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwYTQs''@;'; put 'put ''NCwwLDEsMC00LTRBNCw0LDAsMCwwLDE4LDEwWm0wLTZhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuOTYiIGN5PSI1IiByPSIzIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDZhMSwxLDAsMCwwLDAsMmg4djguMzZzMCwwLDAsMEwxMC4xMSwzMy4xN2ExLDEsMCwwLDAsLjY2LDEuMjUsMS41NSwxLjU1LDAsMCwwLC4yOSwwLDEsMSwwLDAsMCwxLS43MWwzLjI5''@;'; put 'put ''LTEwLjg0aDUuMzhMMjQsMzMuNzVhMSwxLDAsMCwwLDEsLjcxLDEuNTUsMS41NSwwLDAsMCwuMjksMCwxLDEsMCwwLDAsLjY2LTEuMjVMMjIsMjAuNHMwLDAsMCwwVjEyaDhhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksaC5DbHJT''@;'; put 'put ''aGFwZVNvcnRCeT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjguNTQsMTNINy40NmExLDEsMCwwLDEsMC0ySDI4LjU0YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS4xNywx''@;'; put 'put ''OUg3LjQ2YTEsMSwwLDAsMSwwLTJIMjEuMTdhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjc0LDI1SDcuNDZhMSwxLDAsMCwxLDAtMmg2LjI4YTEsMSwwLDAsMSwwLDJaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxoLkNsclNoYXBlQ29sbGFwc2VDYXJkPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywyMUgzYTEsMSwwLDAsMC0xLDF2NmExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWMjJBMSwxLDAsMCwwLDMz''@;'; put 'put ''LDIxWm0tMSw2SDRWMjNIMzJaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC4yMmw1LjY1LTUuNjVhLjgxLjgxLDAsMCwwLDAtMS4xNC44LjgsMCwwLDAtMS4xMywwTDE4LDE4bC00LjUyLTQuNTJhLjgu''@;'; put 'put ''OCwwLDAsMC0xLjEzLDAsLjgxLjgxLDAsMCwwLDAsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjIybDUuNjUtNS42NWEuODEuODEsMCwwLDAsMC0xLjE0LjguOCwwLDAsMC0xLjEzLDBMMTgs''@;'; put 'put ''MTIsMTMuNDgsNy40M2EuOC44LDAsMCwwLTEuMTMsMCwuODEuODEsMCwwLDAsMCwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyIiB5PSIyMiIgd2lkdGg9IjMyIiBoZWlnaHQ9IjgiIHJ4PSIxIiByeT0i''@;'; put 'put ''MSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC43bC01Ljc5LTUuNzlhMSwxLDAsMCwxLDAtMS40MSwxLDEsMCwwLDEsMS40MSwwTDE4LDE3Ljg3bDQuMzgtNC4zN2ExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAs''@;'; put 'put ''MSwwLDEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjUsMTIuMjEsOC43MWExLDEsMCwwLDEsMC0xLjQyLDEsMSwwLDAsMSwxLjQxLDBMMTgsMTEuNjdsNC4zOC00LjM4YTEsMSwwLDAsMSwxLjQxLDAs''@;'; put 'put ''MSwxLDAsMCwxLDAsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksaC5DbHJTaGFwZUV4cGFuZENhcmQ9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDZIM0ExLDEsMCwwLDAsMiw3VjI5YTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEt''@;'; put 'put ''MVY3QTEsMSwwLDAsMCwzMyw2Wk0zMiwyOEg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjQ4LDE1Ljg2LDE4LDExLjM0bDQuNTIsNC41MmEuNzcuNzcsMCwwLDAsLjU2LjI0LjgxLjgxLDAsMCww''@;'; put 'put ''LC41Ny0xLjM3TDE4LDkuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNDgsMjEuODYsMTgsMTcuMzRsNC41Miw0LjUyYS43Ny43NywwLDAsMCwu''@;'; put 'put ''NTYuMjQuODEuODEsMCwwLDAsLjU3LTEuMzdMMTgsMTUuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNkgzQTEsMSwwLDAsMCwyLDdWMjlhMSwx''@;'; put 'put ''LDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDMzLDZaTTIzLjc5LDIxLjQxYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTdsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsMTQuMiwyMy43OSwyMEExLDEsMCwwLDEsMjMuNzksMjEuNDFa''@;'; put 'put ''bTAtNi4yYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTAuODNsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsOGw1Ljc5LDUuNzlBMSwxLDAsMCwxLDIzLjc5LDE1LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxoLkNs''@;'; put 'put ''clNoYXBlQnJpZWZjYXNlPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwyOGEwLDAsMCwwLDEsMCwwSDRWMjEuMzJhNy4xLDcuMSwwLDAsMS0yLTEuNDNWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5Ljg5YTYuNzQsNi43NCwwLDAsMS0yLDEuNDJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yNSwyMi40YTEsMSwwLDAsMCwxLTFWMTUuOTRIMjRWMThIMTR2MkgyNHYxLjRBMSwxLDAsMCwwLDI1LDIyLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxw''@;'; put 'put ''YXRoIGQ9Ik0zMyw2SDI0VjQuMzhBMi40MiwyLjQyLDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQyLDIuNDIsMCwwLDAsMTIsNC4zOFY2SDNBMSwxLDAsMCwwLDIsN3Y4YTUsNSwwLDAsMCw1LDVoM3YxLjRhMSwxLDAsMCwwLDIsMFYxNS45NEgxMFYxOEg3YTMsMywwLDAsMS0zLTNWOEgzMnY3YTMs''@;'; put 'put ''MywwLDAsMS0zLDNIMjh2MmgxYTUsNSwwLDAsMCw1LTVWN0ExLDEsMCwwLDAsMzMsNlpNMjIsNkgxNFY0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMTFhLjQzLjQzLDAsMCwxLC40NC40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGgg''@;'; put 'put ''ZD0iTTMwLDE4QTQuMDYsNC4wNiwwLDAsMCwzNCwxNFY2SDI0VjQuNDNBMi40NCwyLjQ0LDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQ0LDIuNDQsMCwwLDAsMTIsNC40M1Y2SDJ2OEE0LjA2LDQuMDYsMCwwLDAsNi4wNSwxOGg0VjE1LjkyaDJ2NS43YTEsMSwwLDEsMS0yLDBWMjAuMDZINi4wNkE2''@;'; put 'put ''LjA2LDYuMDYsMCwwLDEsMiwxOC40OXY5LjQ1YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOC40OWE2LDYsMCwwLDEtNC4wNiwxLjU3SDI4VjE4Wk0xNCw0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMWEuNDUuNDUsMCwwLDEsLjQ1LjQzVjZIMTRaTTI2LDIxLjYyYTEsMSww''@;'; put 'put ''LDEsMS0yLDBWMjAuMDZIMTRWMThIMjRWMTUuOTJoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksaC5DbHJTaGFwZUNvbG9yUGlja2VyPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMC4wNWE1LjA3LDUuMDcsMCwwLDAsLjEtNy4xN0E1LjA2''@;'; put 'put ''LDUuMDYsMCwwLDAsMjYsM0wyMC43OCw4LjE1YTIuMTMsMi4xMywwLDAsMS0zLDBsLS42Ny0uNjdMMTUuNzIsOC45MiwyNy4wOCwyMC4yOGwxLjQyLTEuNDItLjY3LS42N2EyLjEzLDIuMTMsMCwwLDEsMC0zWk0yNi40NCwxMy44YTQuMDcsNC4wNywwLDAsMC0xLjA4LDEuOTJsLTUuMDgtNS4w''@;'; put 'put ''OEE0LjA3LDQuMDcsMCwwLDAsMjIuMiw5LjU2bDUuMTYtNS4xN2EzLjA5LDMuMDksMCwwLDEsNC4zNS0uMSwzLjA5LDMuMDksMCwwLDEtLjEsNC4zNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTcuMywzMS41MWEyLDIsMCwxLDEt''@;'; put 'put ''Mi44My0yLjgzTDE4LjU4LDE0LjU3bC0xLjQyLTEuNDFMMy4wNSwyNy4yN2E0LDQsMCwwLDAtLjY4LDQuOEwuODksMzMuNTVBMSwxLDAsMCwwLC44OSwzNWExLDEsMCwwLDAsMS40MiwwbDEuNDMtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwy''@;'; put 'put ''Mi44MiwxOC44MSwyMS40MSwxNy40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMzMuNzMsMi4xMWE0LjA5LDQuMDksMCwwLDAtNS43Ni4xTDIyLjgxLDcuMzhhMy4xMywzLjEzLDAsMCwxLTQuMy4xMUwxNy4wOSw4LjkxLDI3LDE4''@;'; put 'put ''Ljc5bDEuNDItMS40MkEzLjE4LDMuMTgsMCwwLDEsMjguNDYsMTNsNS4xNy01LjE3QTQuMDgsNC4wOCwwLDAsMCwzMy43MywyLjExWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yMi4xOCwxNi43OSw3LjQ2LDMxLjUxYTIsMiwwLDEsMS0y''@;'; put 'put ''LjgyLTIuODNMMTkuMzUsMTRsLTEuNDEtMS40MUwzLjIyLDI3LjI3YTQsNCwwLDAsMC0uNjgsNC44TDEuMDYsMzMuNTVhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsMS40MSwwbDEuNDQtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMy42''@;'; put 'put ''LDE4LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxoLkNsclNoYXBlQ29weVRvQ2xpcGJvYXJkPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMi42LDRIMjEuNTVhMy44OSwzLjg5LDAsMCwwLTcuMzEsMEgxMy40QTIuNDEsMi40MSwwLDAsMCwx''@;'; put 'put ''MSw2LjRWMTBIMjVWNi40QTIuNDEsMi40MSwwLDAsMCwyMi42LDRaTTIzLDhIMTNWNi4yNUEuMjUuMjUsMCwwLDEsMTMuMjUsNmgyLjY5bC4xMi0xLjExQTEuMjQsMS4yNCwwLDAsMSwxNi42MSw0YTIsMiwwLDAsMSwzLjE1LDEuMThsLjA5Ljg0aDIuOWEuMjUuMjUsMCwwLDEsLjI1LjI1WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuMjUsMTguMDZIMjEuMzNsMi44NC0yLjgzYTEsMSwwLDEsMC0xLjQyLTEuNDJMMTcuNSwxOS4wNmw1LjI1LDUuMjVhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLTEuN2wtMi44''@;'; put 'put ''NC0yLjg0SDMzLjI1YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0yOSwxNmgyVjYuNjhBMS42NiwxLjY2LDAsMCwwLDI5LjM1LDVIMjcuMDhWN0gyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTI5LDMxSDdWN0g5VjVINi42NEExLjY2LDEuNjYsMCwwLDAsNSw2LjY3VjMxLjMyQTEuNjYsMS42NiwwLDAsMCw2LjY1LDMzSDI5LjM2QTEuNjYsMS42NiwwLDAsMCwzMSwzMS4zM1YyMi4wNkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGguQ2xyU2hhcGVEcmFnSGFuZGxlPSgwLHMuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjE1IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTUiIGN5PSIyNCIg''@;'; put 'put ''cj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIyMSIgY3k9IjEyIiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjIxIiBjeT0iMjQiIHI9IjEuNSIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjEiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIxNSIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLGguQ2xyU2hhcGVGaWx0ZXIyPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMUgzYTEsMSwwLDAsMCwwLDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAv''@;'; put 'put ''PlxuPHBhdGggZD0iTTI4LDE3SDhhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMjMsMjNIMTNhMSwxLDAsMCwwLDAsMkgyM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksaC5DbHJTaGFwZU1vb249KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDI3LjE5YTEsMSwwLDAsMC0xLS41NmMtLjI4LDAtLjU2LDAtLjg1LDBBMTEsMTEsMCwwLDEsMjQuOTIsNS42MWExLDEsMCwwLDAsLjYxLTEsMSwx''@;'; put 'put ''LDAsMCwwLS42Ny0uOTEsMTQuNywxNC43LDAsMCwwLTUtLjg3LDE1LjEyLDE1LjEyLDAsMCwwLDAsMzAuMjQsMTQuNzgsMTQuNzgsMCwwLDAsMTEtNC44MUExLDEsMCwwLDAsMzEsMjcuMTlaTTE5Ljg5LDMxLjEyYTEzLjEyLDEzLjEyLDAsMCwxLDAtMjYuMjQsMTEuODEsMTEuODEsMCwwLDEs''@;'; put 'put ''MiwuMTYsMTMsMTMsMCwwLDAsNS43MiwyMy41M0ExMi43NSwxMi43NSwwLDAsMSwxOS44OSwzMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI5LjIsMjYuNzJBMTIuMDcsMTIuMDcsMCwwLDEsMjIuOSw0LjQ0LDEzLjY4LDEz''@;'; put 'put ''LjY4LDAsMCwwLDE5LjQ5LDRhMTQsMTQsMCwwLDAsMCwyOCwxMy44MiwxMy44MiwwLDAsMCwxMC45LTUuMzRBMTEuNzEsMTEuNzEsMCwwLDEsMjkuMiwyNi43MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksaC5DbHJTaGFwZVN1bj0oMCxzLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBkPSJNMTgsNi4zMWExLDEsMCwwLDAsMS0xVjEuOTFhMSwxLDAsMCwwLTIsMHYzLjRBMSwxLDAsMCwwLDE4LDYuMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0xOCwyOS42OWExLDEsMCwwLDAtMSwxdjMuNGEx''@;'; put 'put ''LDEsMCwwLDAsMiwwdi0zLjRBMSwxLDAsMCwwLDE4LDI5LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNOC4zMiw5Ljc0QTEsMSwwLDAsMCw5LDEwYTEsMSwwLDAsMCwuNzEtLjI5LDEsMSwwLDAsMCwwLTEuNDJMNy4zMyw1Ljky''@;'; put 'put ''QTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjcuNjgsMjYuMjZhMSwxLDAsMSwwLTEuNDIsMS40MmwyLjQxLDIuNGExLDEsMCwwLDAsLjcxLjMsMSwxLDAsMCwwLC43LS4zLDEsMSwwLDAsMCwwLTEu''@;'; put 'put ''NDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNNi4zMSwxOGExLDEsMCwwLDAtMS0xSDEuOTFhMSwxLDAsMCwwLDAsMmgzLjRBMSwxLDAsMCwwLDYuMzEsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NSIgLz48cGF0aCBkPSJNMzQuMDksMTdoLTMuNGExLDEsMCwxLDAsMCwyaDMuNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTguMzIsMjYuMjZsLTIuNCwyLjQxYTEsMSwwLDAsMCwuNywxLjcxLDEsMSwwLDAs''@;'; put 'put ''MCwuNzEtLjNsMi40MS0yLjRhMSwxLDAsMSwwLTEuNDItMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNywxMGExLDEsMCwwLDAsLjcxLS4yOWwyLjQtMi40MWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQxLDBsLTIu''@;'; put 'put ''NDEsMi40YTEsMSwwLDAsMCwwLDEuNDJBMSwxLDAsMCwwLDI3LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHBhdGggZD0iTTE4LjEzLDcuNzVhMTAuMTMsMTAuMTMsMCwxLDAsMTAsMTAuMTNBMTAuMDgsMTAuMDgsMCwwLDAsMTguMTMsNy43NVpt''@;'; put 'put ''MCwxOC4yNWE4LjEzLDguMTMsMCwxLDEsOC04LjEyQTguMDgsOC4wOCwwLDAsMSwxOC4xMywyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAvPjxwYXRoIGQ9Ik0xOCw2LjQyYTEsMSwwLDAsMCwxLTFWMS45MWExLDEsMCwwLDAtMiwwVjUuNDJBMSwxLDAs''@;'; put 'put ''MCwwLDE4LDYuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyOS41OGExLDEsMCwwLDAtMSwxdjMuNTFhMSwxLDAsMCwwLDIsMFYzMC41OEExLDEsMCwwLDAsMTgsMjkuNThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yIiAvPjxwYXRoIGQ9Ik04LjQsOS44MUExLDEsMCwwLDAsOS44MSw4LjRMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNy42LDI2LjE5YTEsMSwwLDAsMC0xLjQxLDEuNDFsMi40''@;'; put 'put ''OCwyLjQ4YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LjQyLDE4YTEsMSwwLDAsMC0xLTFIMS45MWExLDEsMCwwLDAsMCwySDUuNDJBMSwxLDAsMCwwLDYuNDIsMThaIiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zNC4wOSwxN0gzMC41OGExLDEsMCwwLDAsMCwyaDMuNTFhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+PHBhdGggZD0iTTguNCwyNi4xOSw1LjkyLDI4LjY3YTEsMSwwLDAsMCwx''@;'; put 'put ''LjQxLDEuNDFMOS44MSwyNy42QTEsMSwwLDAsMCw4LjQsMjYuMTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNy42LDkuODFsMi40OC0yLjQ4YTEsMSwwLDAsMC0xLjQxLTEuNDFMMjYuMTksOC40QTEsMSwwLDAsMCwyNy42LDkuODFaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC04IiAvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjEwIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC05IiAvPicpLGguQ2xyU2hhcGVXYW5kPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQuMSw0LDMxLjcxLDEuNmExLjgzLDEuODMsMCwwLDAtMS4zMS0uNTRoMGEyLjA1LDIuMDUsMCwwLDAtMS40NS42MkwxLjc2LDI5LjIzQTIsMiwwLDAsMCwxLjY4LDMybDIuNCwyLjQzQTEuODMsMS44MywwLDAsMCw1LjM5LDM1''@;'; put 'put ''aDBhMi4wNSwyLjA1LDAsMCwwLDEuNDUtLjYyTDM0LDYuNzlBMiwyLDAsMCwwLDM0LjEsNFpNNS40MiwzMi45MywzLjE2LDMwLjY1aDBMMjQuMTEsOS40M2wyLjI1LDIuMjhaTTMyLjYxLDUuMzlsLTUuMTIsNS4xOEwyNS4yNCw4LjI5bDUuMTMtNS4yLDIuMjUsMi4yOFoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuNTMsMjAuNDdsMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMy0xLjEzbC0yLjA5LDIuMDktMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMywxLjEzbDIuMDksMi4wOS0yLjA5LDIuMDlhLjgu''@;'; put 'put ''OCwwLDAsMCwxLjEzLDEuMTNsMi4wOS0yLjA5LDIuMDksMi4wOWEuOC44LDAsMCwwLDEuMTMtMS4xM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTQuNzgsNi41MWEuOC44LDAsMCwwLDEuMTMsMEwxNy40LDVs''@;'; put 'put ''MS40OSwxLjQ5QS44LjgsMCwwLDAsMjAsNS4zOEwxOC41NCwzLjg5LDIwLDIuNGEuOC44LDAsMCwwLTEuMTMtMS4xM0wxNy40LDIuNzYsMTUuOTEsMS4yN0EuOC44LDAsMSwwLDE0Ljc4LDIuNGwxLjQ5LDEuNDlMMTQuNzgsNS4zOEEuOC44LDAsMCwwLDE0Ljc4LDYuNTFaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTguMzMsMTUuMjZhLjguOCwwLDAsMCwxLjEzLDBsMS4xNi0xLjE2LDEuMTYsMS4xNmEuOC44LDAsMSwwLDEuMTMtMS4xM0wxMS43NiwxM2wxLjE2LTEuMTZhLjguOCwwLDEsMC0xLjEzLTEu''@;'; put 'put ''MTNsLTEuMTYsMS4xNkw5LjQ2LDEwLjY4YS44LjgsMCwxLDAtMS4xMywxLjEzTDkuNDksMTMsOC4zMywxNC4xM0EuOC44LDAsMCwwLDguMzMsMTUuMjZaIi8+JyksaC5DbHJTaGFwZUN1cnNvck1vdmU9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0x''@;'; put 'put ''LjQyLDAsMSwxLDAsMCwwLDAsMS40MUwzMC4xNCwxN0gxOVY1Ljg2bDIuNjksMi43YTEsMSwwLDAsMCwxLjQxLDAsMSwxLDAsMCwwLDAtMS40MkwxOCwyLDEyLjg5LDcuMTVhMSwxLDAsMCwwLS4yOS43MSwxLDEsMCwwLDAsMS43MS43TDE3LDUuODZWMTdINS44NmwyLjctMi42OWExLDEsMCww''@;'; put 'put ''LDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQyLDBMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjctMS43MUw1Ljg2LDE5SDE3VjMwLjE0bC0yLjY5LTIuN2ExLDEsMCwwLDAtMS43MS43LDEsMSwwLDAsMCwuMjkuNzFMMTgsMzRsNS4xMS01LjE0YTEsMSwwLDAsMCww''@;'; put 'put ''LTEuNDIsMSwxLDAsMCwwLTEuNDEsMEwxOSwzMC4xNFYxOUgzMC4xNGwtMi43LDIuNjlhMSwxLDAsMCwwLC43LDEuNzEsMSwxLDAsMCwwLC43MS0uMjlMMzQsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxoLkNsclNoYXBlQ2xvbmU9KDAscy5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsNkgyMnY0aDJWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMjJINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxMkgxNGEyLDIsMCwwLDAt''@;'; put 'put ''MiwyVjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEEyLDIsMCwwLDAsMzAsMTJabTAsMThIMTRWMTRIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cG9seWdvbiBwb2ludHM9IjIxIDI4IDIzIDI4IDIzIDIzIDI4IDIzIDI4IDIx''@;'; put 'put ''IDIzIDIxIDIzIDE2IDIxIDE2IDIxIDIxIDE2IDIxIDE2IDIzIDIxIDIzIDIxIDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQsMTBWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMTJh''@;'; put 'put ''MiwyLDAsMCwxLDItMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDEySDE0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0QTIsMiwwLDAsMCwzMCwxMlpNMjgsMjNIMjN2NUgyMVYyM0gxNlYy''@;'; put 'put ''MWg1VjE2aDJ2NWg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxoLkNsclNoYXBlRGV0YWlscz0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwy''@;'; put 'put ''LDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTksMTRIMjdhMSwxLDAsMCwwLDAtMkg5YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg''@;'; put 'put ''Lz48cGF0aCBkPSJNOSwxOEgyN2ExLDEsMCwwLDAsMC0ySDlhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik05LDIySDE5YTEsMSwwLDAsMCwwLTJIOWExLDEsMCwwLDAsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xOSwyMkg5YTEsMSwwLDAsMSwwLTJIMTlhMSwxLDAsMCwxLDAsMlptOC00SDlhMSwxLDAsMCwx''@;'; put 'put ''LDAtMkgyN2ExLDEsMCwwLDEsMCwyWm0wLTRIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGguQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPSgwLHMuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEy''@;'; put 'put ''IiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTgiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiBy''@;'; put 'put ''PSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjI0IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjQiIGN5PSIyNCIgcj0iMS41IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIyNCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLGguQ2xyU2hhcGVFcmFzZXI9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0i''@;'; put 'put ''TTM1LjYyLDEyYTIuODIsMi44MiwwLDAsMC0uODQtMkwyNy40OSwyLjY1YTIuOSwyLjksMCwwLDAtNCwwTDIuODMsMjMuMjhhMi44NCwyLjg0LDAsMCwwLDAsNEw3LjUzLDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0ySDE2Ljc0bDE4LTE4QTIuODIsMi44MiwwLDAsMCwzNS42''@;'; put 'put ''MiwxMlpNMTMuOTEsMzJIMTAuMzZMNC4yNSwyNS44OWEuODQuODQsMCwwLDEsMC0xLjE5bDUuNTEtNS41Miw4LjQ5LDguNDhaTTMzLjM3LDEyLjU0LDE5LjY2LDI2LjI1bC04LjQ4LTguNDksMTMuNy0xMy43YS44Ni44NiwwLDAsMSwxLjE5LDBsNy4zLDcuMjlhLjg2Ljg2LDAsMCwxLC4yNS42''@;'; put 'put ''QS44Mi44MiwwLDAsMSwzMy4zNywxMi41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwzMkgxNS4zM0wxOSwyOC4zN2wtOS45LTkuOUwzLjU0LDI0YTEuODMsMS44MywwLDAsMCwwLDIuNkw5LDMySDNhMSwxLDAsMCwwLDAsMkgy''@;'; put 'put ''OGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzQuMDgsMTAuNjVsLTcuMy03LjNhMS44MywxLjgzLDAsMCwwLTIuNiwwTDEwLjQ3LDE3LjA2bDkuOSw5LjlMMzQuMDgsMTMuMjVBMS44NSwxLjg1LDAsMCwwLDM0LjA4''@;'; put 'put ''LDEwLjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxoLkNsclNoYXBlTGFuZHNjYXBlPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCww''@;'; put 'put ''LDAsMzIsNlptMCwyMkg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyMmEuODIuODIsMCwwLDAsLjU1LS4yMS44LjgsMCwwLDAsMC0xLjEzTDcuODMsMTguOEgyOC4xN2wtMS43MiwxLjg2YS44LjgsMCwwLDAsMCwxLjEz''@;'; put 'put ''QS44Mi44MiwwLDAsMCwyNywyMmEuNzguNzgsMCwwLDAsLjU4LS4yNkwzMS4wOSwxOGwtMy40Ny0zLjc0YS43OS43OSwwLDAsMC0xLjEzLDAsLjguOCwwLDAsMCwwLDEuMTNsMS43MiwxLjg2SDcuODNsMS43Mi0xLjg2YS44LjgsMCwwLDAsMC0xLjEzLjc5Ljc5LDAsMCwwLTEuMTMsMEw0Ljkx''@;'; put 'put ''LDE4bDMuNDcsMy43NEEuNzguNzgsMCwwLDAsOSwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMjcu''@;'; put 'put ''NzcsMjEuODhhMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNywxLDEsMCwwLDEtLjA2LTEuNDFMMjcuNzEsMTlIOC4yOUw5LjcsMjAuNTJhMSwxLDAsMCwxLS4wNiwxLjQxQTEsMSwwLDAsMSw5LDIyLjJhMSwxLDAsMCwxLS43My0uMzJMNC42NCwxOGwzLjU5LTMuODhBMSwxLDAs''@;'; put 'put ''MCwxLDkuNywxNS40OEw4LjI5LDE3SDI3LjcxTDI2LjMsMTUuNDhhMSwxLDAsMCwxLDEuNDctMS4zNkwzMS4zNiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksaC5DbHJTaGFwZVBhc3RlPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxMkgy''@;'; put 'put ''NnYyaDR2MmgyVjE0QTIsMiwwLDAsMCwzMCwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBh''@;'; put 'put ''dGggZD0iTTMwLDMwSDI4djJoMmEyLDIsMCwwLDAsMi0yVjI2SDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDIyVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJhMiwyLDAsMCwwLDIsMkgyMkEyLDIsMCwwLDAs''@;'; put 'put ''MjQsMjJaTTYsNkgyMlYyMkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMjAiIHk9IjMwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQs''@;'; put 'put ''MjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMzAsMTJIMjZ2Mmg0djJoMlYxNEEyLDIsMCwwLDAsMzAsMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAv''@;'; put 'put ''PjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsMzBIMjh2MmgyYTIsMiwwLDAsMCwyLTJWMjZIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0z''@;'; put 'put ''IiAvPjxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiAvPicpLGguQ2xyU2hhcGVQb3J0cmFpdD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUuMzQsMjYuNDVh''@;'; put 'put ''LjguOCwwLDAsMC0xLjEzLDAsLjc5Ljc5LDAsMCwwLDAsMS4xM0wxOCwzMS4wOWwzLjc0LTMuNDdhLjc5Ljc5LDAsMCwwLC4wNS0xLjEzLjguOCwwLDAsMC0xLjEzLDBMMTguOCwyOC4xN1Y3LjgzbDEuODYsMS43MmEuOC44LDAsMSwwLDEuMDgtMS4xN0wxOCw0LjkxLDE0LjI2LDguMzhhLjc5''@;'; put 'put ''Ljc5LDAsMCwwLDAsMS4xMy44LjgsMCwwLDAsMS4xMywwTDE3LjIsNy44M1YyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEy''@;'; put 'put ''LDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJaTTIwLjUyLDI2''@;'; put 'put ''LjNhMSwxLDAsMCwxLDEuMzYsMS40N0wxOCwzMS4zNmwtMy44OC0zLjU5YTEsMSwwLDAsMSwxLjM2LTEuNDdMMTcsMjcuNzFWOC4yOUwxNS40OCw5LjdhMSwxLDAsMCwxLTEuMzYtMS40N0wxOCw0LjY0bDMuODgsMy41OWExLDEsMCwwLDEsLjA1LDEuNDEsMSwxLDAsMCwxLS43My4zMiwxLDEs''@;'; put 'put ''MCwwLDEtLjY4LS4yNkwxOSw4LjI5VjI3LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxoLkNsclNoYXBlVHJlZVZpZXc9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDMySDExYTEsMSwwLDAsMS0xLTFWMjdhMSwxLDAsMCwxLDEtMWg0YTEs''@;'; put 'put ''MSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMTUsMzJabS0zLTJoMlYyOEgxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNSwxNkgxMWExLDEsMCwwLDAtMSwxdjEuMkg1LjhWMTJIN2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDcs''@;'; put 'put ''NkgzQTEsMSwwLDAsMCwyLDd2NGExLDEsMCwwLDAsMSwxSDQuMlYyOS44aDYuMzZhLjguOCwwLDAsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaTTQsOEg2djJINFpNMTQsMjBIMTJWMThoMloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNCw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzM0ExLDEsMCwwLDAsMzQsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOEgxOHYySDMzYTEsMSww''@;'; put 'put ''LDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMsMjhIMTh2MkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHJlY3QgeD0iMTAiIHk9IjI2IiB3aWR0''@;'; put 'put ''aD0iNiIgaGVpZ2h0PSI2IiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE2SDExYTEsMSwwLDAsMC0xLDF2MS4ySDUuOFYxMkg3YTEsMSwwLDAsMCwxLTFWN0ExLDEsMCwwLDAsNyw2SDNBMSwxLDAsMCwwLDIsN3Y0''@;'; put 'put ''YTEsMSwwLDAsMCwxLDFINC4yVjI5LjhIMTFhLjguOCwwLDEsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMyw4''@;'; put 'put ''SDEwdjJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLDE4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTMzLDI4SDE4''@;'; put 'put ''djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+JyksaC5DbHJTaGFwZUN1cnNvckhhbmRHcmFiPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOC4wOSw5Ljc0YTQsNCwwLDAsMC0xLjE2LjE5Yy0uMTktMS4yNC0xLjU1LTIu''@;'; put 'put ''MTgtMy4yNy0yLjE4QTQsNCwwLDAsMCwyMi4xMyw4LDMuMzcsMy4zNywwLDAsMCwxOSw2LjNhMy40NSwzLjQ1LDAsMCwwLTIuODcsMS4zMiwzLjY1LDMuNjUsMCwwLDAtMS44OS0uNTFBMy4wNSwzLjA1LDAsMCwwLDExLDkuODl2LjkxYy0xLjA2LjQtNC4xMSwxLjgtNC45MSw0Ljg0cy4zNCw4''@;'; put 'put ''LDIuNjksMTEuNzhhMjUuMjEsMjUuMjEsMCwwLDAsNS45LDYuNDEuOS45LDAsMCwwLC41My4xN0gyNS41NWEuOTIuOTIsMCwwLDAsLjU1LS4xOSwxMy4xMywxMy4xMywwLDAsMCwzLjc1LTYuMTNBMjUuOCwyNS44LDAsMCwwLDMxLjQxLDE4di01LjVBMy4wOCwzLjA4LDAsMCwwLDI4LjA5LDku''@;'; put 'put ''NzRaTTI5LjYxLDE4YTI0LDI0LDAsMCwxLTEuNDcsOS4xNUExMi40NiwxMi40NiwwLDAsMSwyNS4yLDMyLjJIMTUuNDdhMjMuNzUsMjMuNzUsMCwwLDEtNS4yLTUuNzJjLTIuMzctMy44Ni0zLTguMjMtMi40OC0xMC4zOUE1LjcsNS43LDAsMCwxLDExLDEyLjc2djcuNjVhLjkuOSwwLDAsMCwx''@;'; put 'put ''LjgsMFY5Ljg5YzAtLjQ3LjU5LTEsMS40Ni0xczEuNDkuNTIsMS40OSwxdjUuNzJoMS44VjguODFjMC0uMjguNTgtLjcxLDEuNDYtLjcxczEuNTMuNDgsMS41My43NXY2Ljg5aDEuOFYxMGwuMTctLjEyYTIuMSwyLjEsMCwwLDEsMS4xOC0uMzJjLjkzLDAsMS41LjQ0LDEuNS42OGwwLDYuNUgy''@;'; put 'put ''N1YxMS44N2ExLjkxLDEuOTEsMCwwLDEsMS4xMi0uMzNjLjg2LDAsMS41Mi41MSwxLjUyLjk0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksaC5DbHJTaGFwZUN1cnNvckhhbmRPcGVuPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS40Niw4''@;'; put 'put ''LjU3QTMuMTEsMy4xMSwwLDAsMCwyNyw1Ljc1YTMuMTksMy4xOSwwLDAsMC00LjY2LTIuNjQsMy4yOSwzLjI5LDAsMCwwLTYuNDItLjc2LDMuMjMsMy4yMywwLDAsMC0xLjY2LS40NkEzLjI3LDMuMjcsMCwwLDAsMTEsNS4xOFYxNy44NGMtMS4yOC0xLjYtMi41My0zLjE4LTIuNzItMy40NUEz''@;'; put 'put ''LjE5LDMuMTksMCwwLDAsNS41NiwxMi45YTMuMzcsMy4zNywwLDAsMC0zLjQ3LDMuNDhDMi4xOCwxOC4xOCw1LjY2LDI0LjU0LDgsMjhjMy41NCw1LjI0LDYuOTIsNiw3LjA3LDZsLjE4LDBIMjUuNTlhLjkyLjkyLDAsMCwwLC41NS0uMTksMTMuMTMsMTMuMTMsMCwwLDAsMy43NS02LjEzYzEt''@;'; put 'put ''My4wOSwxLjUzLTcuNTMsMS41OC0xMy41NlpNMjguMTgsMjcuMTJhMTIuNDYsMTIuNDYsMCwwLDEtMi45NCw1LjA4SDE1LjMzYy0uNDctLjE0LTMuMDctMS4xLTUuODctNS4yNVMzLjk0LDE3LjI3LDMuODksMTYuMjlhMS41LDEuNSwwLDAsMSwuNDUtMS4xMywxLjUyLDEuNTIsMCwwLDEsMS4x''@;'; put 'put ''NC0uNDYsMS40MywxLjQzLDAsMCwxLDEuMzIuNzFjLjI5LjQzLDIuMzYsMywzLjU3LDQuNTNMMTIuOCwxOC4zVjUuMThhMS40OCwxLjQ4LDAsMSwxLDIuOTUsMFYxNi4zMmgxLjh2LTEzYTEuNTEsMS41MSwwLDAsMSwzLDBWMTYuNDVoMS44VjZhMS40MywxLjQzLDAsMSwxLDIuODUsMFYxNy40''@;'; put 'put ''NEgyN1Y4LjU0YTEuMzMsMS4zMywwLDAsMSwyLjY1LDB2NS41NUMyOS42MiwyMCwyOS4xNCwyNC4yMSwyOC4xOCwyNy4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGguQ2xyU2hhcGVGaWxlWmlwPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0zMCwzMC4yVjEybC04LjEtNy45SDcuOEM2LjgsNC4xLDYsNC45LDYsNmMwLDAsMCwwLDAsMHYyNC4yYzAsMSwwLjcsMS44LDEuNywxLjhjMCwwLDAuMSwwLDAuMSwwaDIwLjNcblx0XHRjMSwwLDEuOC0wLjcsMS44LTEuN0MzMCwzMC4zLDMwLDMwLjIsMzAsMzAuMnogTTIyLDYuNmw1LjYs''@;'; put 'put ''NS40SDIyVjYuNnogTTI4LDMwSDcuOUw4LDZoMTJ2OGg4VjMweiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTEyLDI0YzAsMS43LDEuMywzLDMsM3MzLTEuMywzLTN2LTRoLTZWMjR6IE0xMy40LDI0di0yLjZoMy4yVjI0YzAuMSwwLjkt''@;'; put 'put ''MC42LDEuNy0xLjUsMS43Yy0wLjksMC4xLTEuNy0wLjYtMS43LTEuNVxuXHRcdEMxMy40LDI0LjIsMTMuNCwyNC4xLDEzLjQsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTguMiw5YzAtMC42LTAuNC0xLTEtMUgxNXYyaDIuMkMx''@;'; put 'put ''Ny44LDEwLDE4LjIsOS42LDE4LjIsOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi43LDEwYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxSDE1di0ySDEyLjd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNCIgLz48cGF0aCBkPSJNMTcuMiwxNGMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgxNXYySDE3LjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTEuNywxNWMwLDAuNiwwLjQsMSwxLDFIMTV2LTJoLTIuM0MxMi4yLDE0LDEx''@;'; put 'put ''LjcsMTQuNCwxMS43LDE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE3LjIsMThjMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTFIMTV2MkgxNy4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+''@;'; put 'put ''PHBhdGggZD0iTTE1LDI1LjZjMC45LDAsMS42LTAuNywxLjYtMS42di0yLjZoLTMuMlYyNEMxMy40LDI0LjksMTQuMSwyNS42LDE1LDI1LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45LDRINy44QzYuOCw0LDYsNC45LDYsNS45djI0''@;'; put 'put ''LjJjMCwxLDAuOCwxLjksMS44LDEuOWgyMC4zYzEsMCwxLjgtMC45LDEuOC0xLjlWMTEuOUwyMS45LDR6IE0xOCwyNGMwLDEuNy0xLjMsMy0zLDNcblx0XHRzLTMtMS4zLTMtM3YtNGg2VjI0eiBNMTcuMiwxMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYyaDIuMmMwLjYsMCwxLDAu''@;'; put 'put ''NCwxLDFzLTAuNCwxLTEsMUgxNXYtMmgtMi4yYy0wLjYsMC0xLTAuNC0xLTFcblx0XHRzMC40LTEsMS0xSDE1di0yaC0yLjJjLTAuNiwwLTEtMC40LTEtMXMwLjQtMSwxLTFIMTVWOGgyLjJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2MkgxNy4yeiBNMjEuOSwxMlY2LjVsNS43LDUu''@;'; put 'put ''NUgyMS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxoLkNsclNoYXBlRmlsdGVyT2ZmPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCw2LjRDMzQsNS42LDMzLjMsNSwzMi41LDVIMTAuM2wyLDJIMzJ2MC42bC05LjYsOS42bDEuNCwxLjRMMzMu''@;'; put 'put ''NCw5QzMzLjgsOC42LDM0LDguMSwzNCw3LjZWNi41QzM0LDYuNSwzNCw2LjQsMzQsNi40eiJcblx0XHQgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIuNywzbDIsMmgtMUMyLjksNC45LDIuMSw1LjUsMiw2LjN2MS4xYzAsMC41LDAuMiwx''@;'; put 'put ''LDAuNiwxLjRMMTQsMjAuMnYxMC4zbDEuOSwwLjhWMTkuNEw0LDcuNVY3aDIuN0wyMCwyMC4zdjEyLjlsMiwwLjhcblx0XHRjMCwwLDAsMCwwLTAuMVYyMi4zbDEwLjEsMTAuMWwxLjQtMS40TDQuMSwxLjZMMi43LDN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MiIgLz48cGF0aCBkPSJNMjMuOSwxOC42TDEwLjMsNS4xaDIyLjJDMzMuMyw1LDM0LDUuNiwzNCw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUtMC4yLDEtMC42LDEuNEwyMy45LDE4LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMy41''@;'; put 'put ''LDMxTDQuMSwxLjZMMi42LDNsMi4xLDIuMUgzLjVDMi43LDUsMiw1LjYsMiw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUsMC4yLDEsMC42LDEuNEwxNCwyMC41djEwLjFsOCwzLjRWMjIuNFxuXHRsMTAuMSwxMC4xTDMzLjUsMzF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yIiAvPicpLGguQ2xyU2hhcGVSZWN5Y2xlPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjQsMTcuNGMwLjIsMC4xLDAuMywwLjEsMC41LDAuMWMwLjIsMCwwLjQtMC4xLDAuNS0wLjFsNy00LjFjMC4zLTAuMiwwLjUtMC41LDAuNS0wLjljMC0wLjQtMC4yLTAuNy0wLjUtMC45''@;'; put 'put ''TDExLjksMTBcblx0XHRMMTQsNi4yYzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjNjMCwwLDAsMCwwLjEsMGMwLjQtMC4zLDAuNS0wLjksMC4zLTEuM1xuXHRcdGMtMC42LTEtMS40LTEuOS0yLjQtMi40Yy0zLTEuNi02''@;'; put 'put ''LjctMC42LTguMywyLjRMOS42LDkuOWMtMC4zLDAuNS0wLjEsMS4xLDAuMywxLjRsMiwxLjJsLTQsMi40VjguMmMwLTAuNi0wLjQtMS0xLTFcblx0XHRDNi40LDcuMyw2LDcuNyw2LDguM3Y4LjNDNiwxNi45LDYuMiwxNy4yLDYuNCwxNy40eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjEsMjFsLTMuNS02LjJjLTAuMS0wLjItMC40LTAuNC0wLjYtMC41Yy0wLjMtMC4xLTAuNSwwLTAuOCwwLjFsLTIuMiwxLjNWMTFsNS41LDMuM2MwLjEsMCwwLjEsMC4xLDAuMiwwLjFcblx0XHRjMC41LDAuMiwxLjEsMCwxLjMtMC41YzAu''@;'; put 'put ''Mi0wLjUsMC0xLjEtMC41LTEuM2wtNy00LjJjLTAuMy0wLjItMC43LTAuMi0xLDBDMjMuMSw4LjUsMjMsOC44LDIzLDkuMnY4LjNjMCwwLjQsMC4xLDAuOCwwLjQsMVxuXHRcdGMwLjMsMC4yLDAuNywwLjIsMSwwbDIuOS0xLjdsMyw1LjNjMC43LDEuMywwLjcsMi44LDAsNC4xYy0wLjYsMS4y''@;'; put 'put ''LTEuOSwxLjktMy4yLDEuOWgtMC45Yy0wLjUsMC0xLjIsMC40LTEuMiwxXG5cdFx0YzAuMSwwLjYsMC42LDEsMS4yLDFoMC45YzIuMSwwLDQtMS4xLDUtMi45QzMzLjIsMjUuMiwzMy4yLDIyLjksMzIuMSwyMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik0yMi40LDI4LjJsLTctNC4yYy0wLjMtMC4yLTAuNy0wLjItMSwwYy0wLjMsMC4yLTAuNCwwLjUtMC40LDAuOXYzLjNIOS4xYy0xLjUtMC4xLTIuOS0wLjktMy42LTIuM1xuXHRcdGMtMC44LTEuNC0wLjgtMy4yLDAtNC42YzAuMy0wLjUsMC4xLTEuMS0wLjQtMS40Yy0wLjUt''@;'; put 'put ''MC4zLTEuMS0wLjEtMS40LDAuNGMtMS4yLDIuMS0xLjEsNC42LDAuMSw2LjZDNC45LDI4LjgsNywzMCw5LjIsMzBIMTVcblx0XHRjMC42LDAsMS0wLjQsMS0xdi0yLjRsNCwyLjRsLTUuNiwzLjNjLTAuMywwLjItMC41LDAuNS0wLjUsMC45YzAsMC42LDAuNSwxLDEsMWMwLjIsMCwwLjMtMC4x''@;'; put 'put ''LDAuNS0wLjJsNy00LjJcblx0XHRjMC4yLTAuMSwwLjMtMC4yLDAuNC0wLjRDMjMuMSwyOSwyMi45LDI4LjQsMjIuNCwyOC4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIwLjgsMy4xYy0zLTEuNi02LjctMC42LTguNCwyLjRsLTIu''@;'; put 'put ''MiwzLjhsLTItMS4xQzguMiw4LDgsOCw3LjksOEM3LjQsOCw3LDguNCw3LDguOXY3LjJjMCwwLjMsMC4xLDAuNiwwLjQsMC44XG5cdFx0YzAuMSwwLjEsMC4zLDAuMSwwLjQsMC4xYzAuMiwwLDAuMywwLDAuNC0wLjFsNi4zLTMuNmMwLjMtMC4yLDAuNC0wLjQsMC40LTAuOGMwLTAuMy0wLjIt''@;'; put 'put ''MC42LTAuNC0wLjhMMTIsMTAuM2wyLjItMy44XG5cdFx0YzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjRjMC41LTAuMywwLjYtMC45LDAuNC0xLjRDMjIuNiw0LjUsMjEuOCwzLjYsMjAuOCwzLjF6IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4yLDIxLjFsLTMtNS4zbDIuMy0xLjNjMC4zLTAuMiwwLjQtMC40LDAuNC0wLjhjMC0wLjMtMC4yLTAuNi0wLjQtMC44bC02LjItMy42Yy0wLjEtMC4xLTAuMy0wLjEtMC40LTAuMVxuXHRcdGMtMC41LDAtMC45LDAu''@;'; put 'put ''NC0wLjksMC45djcuMmMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4yLDAsMC4zLTAuMSwwLjQtMC4xbDIuMi0xLjNsMyw1LjNcblx0XHRjMC43LDEuMiwwLjcsMi44LDAsNGMtMC43LDEuMi0xLjksMS45LTMuMiwxLjloLTAuOWMtMC42LDAtMSwwLjQt''@;'; put 'put ''MSwxYzAsMC42LDAuNCwxLDEsMWgwLjljMi4xLDAsNC0xLjEsNS0zXG5cdFx0QzMzLjIsMjUuMywzMy4yLDIzLDMyLjIsMjEuMXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjcsMjguNGwtNi4yLTMuNmMtMC4xLTAuMS0wLjMtMC4xLTAu''@;'; put 'put ''NC0wLjFjLTAuNSwwLTAuOSwwLjQtMC45LDAuOXYyLjZIOS4zYy0xLjUsMC0yLjktMC44LTMuNi0yLjFcblx0XHRjLTAuOC0xLjQtMC44LTMuMSwwLTQuNWMwLjMtMC41LDAuMS0xLjEtMC40LTEuNGMtMC41LTAuMy0xLjEtMC4xLTEuNCwwLjRjLTEuMiwyLTEuMiw0LjUsMCw2LjVjMS4xLDEu''@;'; put 'put ''OSwzLjEsMy4xLDUuNCwzLjFoNC44djIuNlxuXHRcdGMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4xLDAsMC4zLDAsMC40LTAuMWw2LjMtMy42YzAuMy0wLjIsMC40LTAuNCwwLjQtMC44XG5cdFx0QzIyLjEsMjguOCwyMS45LDI4LjUsMjEuNywyOC40''@;'; put 'put ''eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxoLkNsclNoYXBlVHJlZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuNiwxMS43QzI5LjIsNS44LDI0LDEuNywxOCwxLjdjLTcuMiwwLTEzLDUuOC0xMywxM2MwLDYuOCw1LjMsMTIuNCwxMiwxMi45''@;'; put 'put ''djVjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMXYtNXYtMlYyMlxuXHRjMCwwLDAsMCwwLTAuMXYtMy42bDQuNy00LjdjMC40LTAuNCwwLjQtMSwwLTEuNGMtMC40LTAuNC0xLTAuNC0xLjQsMEwxOSwxNS42di0zbC0zLjMtMy4zYy0wLjQtMC40LTEtMC40LTEuNCwwXG5cdGMtMC40LDAuNC0w''@;'; put 'put ''LjQsMSwwLDEuNGwyLjcsMi43djYuMmwtMy44LTMuOGMtMC40LTAuNC0xLTAuNC0xLjQsMGMtMC40LDAuNC0wLjQsMSwwLDEuNGw1LjIsNS4ydjMuMmMtNS42LTAuNS0xMC01LjItMTAtMTAuOVxuXHRjMC02LjEsNC45LTExLDExLTExczExLDQuOSwxMSwxMWMwLDQuOS0zLjMsOS4yLTgsMTAu''@;'; put 'put ''NnYyLjFDMjgsMjUuNywzMi4zLDE4LjcsMzAuNiwxMS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJDMTAuOCwxLjcsNC44LDcuMyw0LjUsMTQuNUM0LjIsMjEuNyw5LjgsMjcuNywxNywyOHYtNS4ybC01LjItNS4yYy0wLjQt''@;'; put 'put ''MC40LTAuNC0xLDAtMS40YzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwbDMuOCwzLjh2LTYuMmwtMi43LTIuN2MtMC40LTAuNC0wLjQtMSwwLTEuNGMwLjQtMC40LDEtMC40LDEuNCwwYzAsMCwwLDAsMCwwbDMuMywzLjN2M2wzLjMtMy4zYzAuNC0wLjQsMS0wLjQsMS40LDBc''@;'; put 'put ''blx0YzAsMCwwLDAsMCwwYzAuNCwwLjQsMC40LDEsMCwxLjRMMTksMTguOFYyOGM3LjItMC4zLDEyLjgtNi4zLDEyLjUtMTMuNVMyNS4yLDEuNywxOCwyeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMjhjLTAuMywwLTAuNiwwLTEsMHY1''@;'; put 'put ''YzAsMC42LDAuNCwxLDEsMXMxLTAuNCwxLTF2LTVDMTguNywyOCwxOC4zLDI4LDE4LDI4eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxoLkNsclNoYXBlRmlzaD0oMCxzLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxMS40OSIgY3k9IjE3LjUiIHI9IjEu''@;'; put 'put ''NSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLjQ4LDkuMjlhMSwxLDAsMCwwLTEsMGMtMy4zNywyLTUuOTEsNS44MS02LjksNy40NUwyNC44NSwxOHMtMSwxLjYyLTEsMS42MmMtMS43NiwyLjQ5LTUuMSw2LjM2LTguNzksNi4zNi00''@;'; put 'put ''LjY1LDAtOC43NS02LjE1LTkuODQtNy45NCwxLjA5LTEuNzksNS4xOC03Ljk0LDkuODQtNy45NCwzLjU0LDAsNi43NywzLjU4LDguNTgsNi4wN2wuMjgtLjQ4cy4zNi0uNTEuOTMtMS4yNUMyMi43MiwxMS42NCwxOS4xOCw4LjA2LDE1LDguMDZjLTYuNTksMC0xMS42Nyw5LjA3LTExLjg4LDku''@;'; put 'put ''NDZMMi44OSwxOGwuMjcuNDhjLjIxLjM5LDUuMjksOS40NiwxMS44OCw5LjQ2LDUuMDYsMCw5LjIyLTUuMzQsMTEtOEMyNiwyMCwyNy4xOCwxOCwyNy4xOCwxOGgwbC4wNy0uMTFhMTguMDYsMTguMDYsMCwwLDEsMS44OC0yLjc1czAsMCwwLDBhMjAuMzEsMjAuMzEsMCwwLDEsMi44Ni0zVjIz''@;'; put 'put ''Ljg4YTIwLjkzLDIwLjkzLDAsMCwxLTMuNjEtNGwtLjE2LjI2aDBsLTEsMS41OWExOC43NCwxOC43NCwwLDAsMCw1LjIxLDQuOTUsMSwxLDAsMCwwLC41LjE0LDEuMTMsMS4xMywwLDAsMCwuNS0uMTMsMSwxLDAsMCwwLC41LS44N1YxMC4xNkExLDEsMCwwLDAsMzMuNDgsOS4yOVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGguQ2xyU2hhcGVGb3JtPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMSwxMkg3YTEsMSwwLDAsMS0xLTFWN0ExLDEsMCwwLDEsNyw2SDIxYTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMjEsMTJaTTgsMTBI''@;'; put 'put ''MjBWNy45NEg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDE0LjA4SDdhMSwxLDAsMCwwLTEsMVYxOWExLDEsMCwwLDAsMSwxSDE4LjM2TDIyLDE2LjNWMTUuMDhBMSwxLDAsMCwwLDIxLDE0LjA4Wk0yMCwxOEg4VjE2SDIwWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTExLjA2LDMxLjUxdi0uMDZsLjMyLTEuMzlINFY0aDIwVjE0LjI1TDI2LDEyLjM2VjNhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDNWMzFhMSwxLDAsMCwwLDEsMWg4QTMuNDQsMy40NCww''@;'; put 'put ''LDAsMSwxMS4wNiwzMS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxOS4xN2wtLjc4Ljc5QTEsMSwwLDAsMCwyMiwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9''@;'; put 'put ''Ik02LDI2Ljk0YTEsMSwwLDAsMCwxLDFoNC44NGwuMy0xLjMuMTMtLjU1LDAtLjA1SDhWMjRoNi4zNGwyLTJIN2ExLDEsMCwwLDAtMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjQ5LDE2LjY3LDMwLjEyLDEzLjNhMS42MSwx''@;'; put 'put ''LjYxLDAsMCwwLTIuMjgsMGgwTDE0LjEzLDI3LjA5LDEzLDMxLjlhMS42MSwxLjYxLDAsMCwwLDEuMjYsMS45LDEuNTUsMS41NSwwLDAsMCwuMzEsMCwxLjE1LDEuMTUsMCwwLDAsLjM3LDBsNC44NS0xLjA3TDMzLjQ5LDE5YTEuNiwxLjYsMCwwLDAsMC0yLjI3Wk0xOC43NywzMC45MWwtMy42''@;'; put 'put ''Ni44MUwxNiwyOC4wOSwyNi4yOCwxNy43bDIuODIsMi44MlpNMzAuMjMsMTkuMzlsLTIuODItMi44MkwyOSwxNWwyLjg0LDIuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxoLkNsclNoYXBlRnVlbD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBk''@;'; put 'put ''PSJNMjAuMTIsMzRINS45QTIuODEsMi44MSwwLDAsMSwzLDMxLjE5VjQuODZBMi45LDIuOSwwLDAsMSw2LDIuMDdIMjAuMjJBMi43MiwyLjcyLDAsMCwxLDIzLDQuODZWMzEuMTlBMi44MiwyLjgyLDAsMCwxLDIwLjEyLDM0Wk01LjksNEEuODcuODcsMCwwLDAsNSw0Ljg2VjMxLjE5YS44Ny44''@;'; put 'put ''NywwLDAsMCwuODcuODdIMjAuMTJhLjk0Ljk0LDAsMCwwLC45NS0uODdWNC44NkEuOTQuOTQsMCwwLDAsMjAuMTIsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOS41MywzNEEzLjUsMy41LDAsMCwxLDI2LDMwLjVWMjNhMiwyLDAs''@;'; put 'put ''MCwwLTItMkgyMi41N2ExLDEsMCwwLDEsMC0ySDI0YTQsNCwwLDAsMSw0LDRWMzAuNWExLjUsMS41LDAsMCwwLDMsMFYxNy4zbC0zLjEzLTdBMi4yOSwyLjI5LDAsMCwwLDI1LjgsOWgtLjczYTEsMSwwLDEsMSwwLTJoLjczYTQuMyw0LjMsMCwwLDEsMy45MywyLjU1bDMuMjEsNy4xNmExLDEs''@;'; put 'put ''MCwwLDEsLjA5LjQxVjMwLjVBMy41LDMuNSwwLDAsMSwyOS41MywzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOCw5SDhBMSwxLDAsMSwxLDgsN0gxOGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDEzSDhBMSwxLDAsMSwxLDgsMTFIMThBMSwxLDAsMSwxLDE4LDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI1LDEyLjA4YTEsMSwwLDAsMS0xLTF2LTZhMSwxLDAsMCwxLDIs''@;'; put 'put ''MHY2QTEsMSwwLDAsMSwyNSwxMi4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPicpLGguQ2xyU2hhcGVTbm93Zmxha2U9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA1LDMzLjYxYTEsMSwwLDAsMS0xLTFWMy4zN2ExLDEsMCwxLDEsMS45''@;'; put 'put ''NSwwVjMyLjYzQTEsMSwwLDAsMSwxOC4wNSwzMy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiwxMC4wNywxNC41Miw2LjU0YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwxLDEuNDEsMGwyLjEzLDIuMTIsMi4xMi0yLjEy''@;'; put 'put ''YTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMC44NSwzMS4xN2ExLDEsMCwwLDEtLjctLjI5TDE4LDI4Ljc2LDE1LjksMzAuODhhMSwxLDAsMCwxLTEuNDEsMCwxLDEsMCww''@;'; put 'put ''LDEsMC0xLjQyTDE4LDI1LjkzbDMuNTQsMy41M2ExLDEsMCwwLDEsMCwxLjQyQTEsMSwwLDAsMSwyMC44NSwzMS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC45MiwyNi41YTEsMSwwLDAsMS0uNS0uMTNsLTI2LTE1QTEsMSww''@;'; put 'put ''LDAsMSw0LjA3LDEwYTEsMSwwLDAsMSwxLjM3LS4zNmwyNiwxNWExLDEsMCwwLDEtLjUsMS44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDE1LjM3YTEsMSwwLDAsMS0uMjYtMmwyLjktLjc4TDcuODQsOS43M2ExLDEsMCwxLDEs''@;'; put 'put ''MS45My0uNTJMMTEuMDcsMTQsNi4yNCwxNS4zM0EuODIuODIsMCwwLDEsNiwxNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNy4wNSwyNy41NGExLDEsMCwwLDEtMS0uNzVMMjQuOCwyMmw0LjgyLTEuM2ExLDEsMCwxLDEsLjUy''@;'; put 'put ''LDEuOTNsLTIuOS43OC43OCwyLjlhMSwxLDAsMCwxLS43MSwxLjIyQS43NS43NSwwLDAsMSwyNy4wNSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik00Ljk0LDI2LjVhMSwxLDAsMCwxLS41LTEuODdsMjYtMTVhMSwxLDAsMCwx''@;'; put 'put ''LDEuMzYuMzYsMSwxLDAsMCwxLS4zNiwxLjM3bC0yNiwxNUExLDEsMCwwLDEsNC45NCwyNi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTguODEsMjcuNTRhLjc1Ljc1LDAsMCwxLS4yNiwwLDEsMSwwLDAsMS0uNzEtMS4yMmwuNzgt''@;'; put 'put ''Mi45LTIuOS0uNzhBMSwxLDAsMCwxLDUsMjEuMzhhMSwxLDAsMCwxLDEuMjMtLjcxTDExLjA3LDIybC0xLjMsNC44MkExLDEsMCwwLDEsOC44MSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxwYXRoIGQ9Ik0yOS44OCwxNS4zN2EuODIuODIs''@;'; put 'put ''MCwwLDEtLjI2LDBMMjQuOCwxNGwxLjI5LTQuODNBMSwxLDAsMSwxLDI4LDkuNzNsLS43OCwyLjg5LDIuOS43OGExLDEsMCwwLDEtLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgLz4nKSxoLkNsclNoYXBlVGFibGU9KDAscy5jbHJJY29uU1ZHKSgn''@;'; put 'put ''PHBhdGggZD0iTTgsMzRhMSwxLDAsMCwxLTEtMVYyLjkyYTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTcsMzMuOTJhMSwxLDAsMCwxLTEtMVY5LjFhMSwxLDAsMSwxLDIsMFYz''@;'; put 'put ''Mi45MkExLDEsMCwwLDEsMTcsMzMuOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjYsMzRhMSwxLDAsMCwxLTEtMVY5YTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDI2LDM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjExLDE4aC0yNWExLDEsMCwxLDEsMC0yaDI1YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuMSwyNi45NEg4LjFBMSwxLDAsMSwxLDguMSwyNWgyNWEx''@;'; put 'put ''LDEsMCwxLDEsMCwxLjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLDguOTJIM0ExLDEsMCwxLDEsMyw3SDMzYTEsMSwwLDEsMSwwLDEuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4n''@;'; put 'put ''KSxoLkNsclNoYXBlVm9sdW1lPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS44OCwzMkgxMmE0LDQsMCwwLDEtNC00VjExLjQ2TDIuMzEsNS43N2ExLDEsMCwwLDEtLjIyLTEuMDlBMSwxLDAsMCwxLDMsNC4wNkgyOC44NmExLDEsMCwwLDEsMSwxVjI4QTQsNCwwLDAsMSwyNS44OCwz''@;'; put 'put ''MlpNNS40Myw2bDQuMjgsNC4zNGEuNzUuNzUsMCwwLDEsLjIxLjYzdjE3QTIuMTMsMi4xMywwLDAsMCwxMiwzMEgyNS44OEEyLjEsMi4xLDAsMCwwLDI4LDI4VjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMTZhMSwxLDAsMCwx''@;'; put 'put ''LTEtMVY2SDI4Ljg2YS45Mi45MiwwLDAsMS0xLS45LDEsMSwwLDAsMSwxLTFIMzNhMSwxLDAsMCwxLDEsMVYxNUExLDEsMCwwLDEsMzMsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQsMTFIMThhMSwxLDAsMSwxLDAtMkgyNGEx''@;'; put 'put ''LDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDE1SDIxYTEsMSwwLDEsMSwwLTJIMjRhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9''@;'; put 'put ''Ik0yNCwxOUgxOGExLDEsMCwxLDEsMC0ySDI0YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjQsMjdIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI0LDIzSDIxQTEsMSwwLDEsMSwyMSwyMUgyNEExLDEsMCwxLDEsMjQsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz4nKSxoLkNsclNoYXBlQ3Jvc3NoYWlycz0oMCxzLmNsckljb25TVkcpKCc8''@;'; put 'put ''cGF0aCBkPSJNMTgsMjlBMTEsMTEsMCwxLDEsMjksMTgsMTEsMTEsMCwwLDEsMTgsMjlaTTE4LDlhOSw5LDAsMSwwLDksOUE5LDksMCwwLDAsMTgsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyM2E1LDUsMCwxLDEsNS01QTUs''@;'; put 'put ''NSwwLDAsMSwxOCwyM1ptMC04YTMsMywwLDEsMCwzLDNBMywzLDAsMCwwLDE4LDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE4LDlhMSwxLDAsMCwxLTEtMVYyLjhhMSwxLDAsMCwxLDIsMFY4QTEsMSwwLDAsMSwxOCw5WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDM0YTEsMSwwLDAsMS0xLTFWMjhhMSwxLDAsMCwxLDIsMHY1QTEsMSwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik04''@;'; put 'put ''LDE5SDMuMTdhMSwxLDAsMCwxLDAtMkg4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMuMSwxOUgyOGExLDEsMCwwLDEsMC0yaDUuMWExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTYiIC8+JyksaC5DbHJTaGFwZUNpcmNsZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksaC5DbHJTaGFwZURvdENpcmNsZT0oMCxzLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBkPSJNMTgsMTFhNyw3LDAsMSwxLTcsNyw3LDcsMCwwLDEsNy03IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAs''@;'; put 'put ''MzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGguQ2xyU2hhcGVCZXRhPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjIxLDE0LjA3aDNhMS42MSwxLjYxLDAsMCwxLDEuODEsMS41LDEuNDQsMS40NCww''@;'; put 'put ''LDAsMS0uODQsMS4zNCwxLjY3LDEuNjcsMCwwLDEsMS4xLDEuNTMsMS43NSwxLjc1LDAsMCwxLTIsMS42M0g3LjIxWm0yLjcxLDIuNDJjLjQ4LDAsLjgyLS4yOC44Mi0uNjdzLS4zNC0uNjUtLjgyLS42NUg4LjQ5djEuMzJabS4yLDIuNDhhLjc1Ljc1LDAsMSwwLDAtMS40N0g4LjQ5VjE5WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE0LjU1LDE1LjIzdjEuMmgzdjEuMTZoLTN2MS4zMmgzLjMzdjEuMTZIMTMuMjZ2LTZoNC42MnYxLjE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5c''@;'; put 'put ''biAgPHBhdGggZD0iTTIwLjQxLDE1LjIzSDE4LjU0VjE0LjA3aDV2MS4xNkgyMS43djQuODRIMjAuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjgsMTkuMTJIMjUuMzJsLS4zOC45NUgyMy41bDIuNDQtNmgxLjQ0bDIuNDUs''@;'; put 'put ''NkgyOC4zOFpNMjcuNTUsMThsLS44OS0yLjE5TDI1Ljc3LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTguMDYsMzBhLjg0Ljg0LDAsMCwxLS4zOC0uMDhBMSwxLDAsMCwxLDcuMDYsMjlWMjVoLTRhMSwxLDAsMCwxLTEtMVYx''@;'; put 'put ''MGExLDEsMCwwLDEsMS0xaDMwYTEsMSwwLDAsMSwxLDFWMjRhMSwxLDAsMCwxLTEsMUgxMy40OEw4Ljc3LDI5LjcxQTEsMSwwLDAsMSw4LjA2LDMwWm0tNC03aDRhMSwxLDAsMCwxLDEsMXYyLjU5bDMuMy0zLjNhMSwxLDAsMCwxLC43LS4yOWgxOVYxMWgtMjhaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuXG4gIDxwb2x5Z29uIHBvaW50cz0iMjUuOCwxOCAyNy41LDE4IDI2LjcsMTUuOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuXHQ8cGF0aCBkPSJNMTAuNCwxNy41Yy0wLjEsMC0wLjIsMC0wLjMsMEg4LjVW''@;'; put 'put ''MTlsMS42LDBjMC40LDAuMSwwLjgtMC4yLDAuOS0wLjZDMTEuMSwxOCwxMC44LDE3LjYsMTAuNCwxNy41eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuXHQ8cGF0aCBkPSJNMTAuNywxNS44YzAtMC40LTAuMy0wLjctMC44LTAuN0g4LjV2MS4zaDEuNEMxMC40''@;'; put 'put ''LDE2LjUsMTAuNywxNi4yLDEwLjcsMTUuOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblx0PHBhdGggZD0iTTMzLjEsOWgtMzBjLTAuNiwwLTEsMC40LTEsMXYxNGMwLDAuNiwwLjQsMSwxLDFoNHY0YzAsMC40LDAuMiwwLjgsMC42LDAuOUM3LjgsMzAsNy45''@;'; put 'put ''LDMwLDguMSwzMGMwLjMsMCwwLjUtMC4xLDAuNy0wLjNcblx0XHRsNC43LTQuN2gxOS42YzAuNiwwLDEtMC40LDEtMVYxMEMzNC4xLDkuNCwzMy42LDksMzMuMSw5eiBNMTAuNCwyMC4xYy0wLjEsMC0wLjEsMC0wLjIsMEg3LjJ2LTZoM2MwLjktMC4xLDEuNywwLjUsMS44LDEuNFxuXHRcdGMw''@;'; put 'put ''LDAsMCwwLjEsMCwwLjFjMCwwLjYtMC4zLDEuMS0wLjgsMS4zYzAuNiwwLjIsMS4xLDAuOCwxLjEsMS41QzEyLjIsMTkuNCwxMS40LDIwLjEsMTAuNCwyMC4xeiBNMTcuOSwxNS4yaC0zLjN2MS4yaDN2MS4yaC0zdjEuM1xuXHRcdGgzLjN2MS4yaC00LjZ2LTZoNC42VjE1LjJ6IE0yMS43LDIw''@;'; put 'put ''LjFoLTEuM3YtNC44aC0xLjl2LTEuMmg1djEuMmgtMS44VjIwLjF6IE0yOC40LDIwLjFsLTAuNC0xaC0yLjdsLTAuNCwxaC0xLjRsMi40LTZoMS40bDIuNSw2XG5cdFx0SDI4LjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4nKSxoLkNsclNoYXBlRmlyc3RB''@;'; put 'put ''aWQ9KDAscy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDIzLjkxVjQuNUEyLjUsMi41LDAsMCwwLDIxLjQxLDJoLTdhMi41LDIuNSwwLDAsMC0yLjUsMi41VjZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2''@;'; put 'put ''Wk0xMy45MSw0LjVhLjUuNSwwLDAsMSwuNS0uNWg3YS41LjUsMCwwLDEsLjUuNVY2aC04Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjAuMTUsMjUuMkgxNi43NGExLjMsMS4zLDAsMCwxLTEuMy0xLjNW''@;'; put 'put ''MjEuMmgtMi43YTEuMywxLjMsMCwwLDEtMS4zLTEuM1YxNi41YTEuMywxLjMsMCwwLDEsMS4zLTEuM2gyLjdWMTIuNWExLjMsMS4zLDAsMCwxLDEuMy0xLjNoMy40MWExLjMsMS4zLDAsMCwxLDEuMjksMS4zdjIuN2gyLjcxYTEuMywxLjMsMCwwLDEsMS4yOSwxLjN2My40YTEuMywxLjMsMCww''@;'; put 'put ''LDEtMS4yOSwxLjNIMjEuNDR2Mi43QTEuMywxLjMsMCwwLDEsMjAuMTUsMjUuMlpNMTcsMjMuNmgyLjgxdi00aDRWMTYuOGgtNHYtNEgxN3Y0SDEzdjIuOGg0Wm03LjExLTYuOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTMy''@;'; put 'put ''LDZIMjMuOTFWNC41QTIuNSwyLjUsMCwwLDAsMjEuNDEsMmgtN2EyLjUsMi41LDAsMCwwLTIuNSwyLjVWNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEzLjkxLDQuNWEuNS41LDAsMCwxLC41LS41aDdhLjUuNSww''@;'; put 'put ''LDAsMSwuNS41VjZoLThaTTI0LjY0LDE5LjlhLjUuNSwwLDAsMS0uNS41aC0zLjV2My41YS41LjUsMCwwLDEtLjUuNWgtMy40YS41LjUsMCwwLDEtLjUtLjVWMjAuNGgtMy41YS41LjUsMCwwLDEtLjUtLjVWMTYuNWEuNS41LDAsMCwxLC41LS41aDMuNVYxMi41YS41LjUsMCwwLDEsLjUtLjVo''@;'; put 'put ''My40YS41LjUsMCwwLDEsLjUuNVYxNmgzLjVhLjUuNSwwLDAsMSwuNS41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAnKSxoLkNsclNoYXBlQ29sb3JQYWxldHRlPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS41NCwyMy4wNWEzLjIyLDMuMjIs''@;'; put 'put ''MCwwLDEtMy0xLjc3QTMuMDUsMy4wNSwwLDAsMSwxOC41LDE5YTMuNzQsMy43NCwwLDAsMSwxLjk1LTIuMDZBMy40LDMuNCwwLDAsMSwyNSwxOC4zYTMsMywwLDAsMSwuMDgsMi4zMiwzLjY5LDMuNjksMCwwLDEtMiwyLjA3QTMuODUsMy44NSwwLDAsMSwyMS41NCwyMy4wNVptLjU0LTQuOTFh''@;'; put 'put ''Mi40MSwyLjQxLDAsMCwwLTEsLjIxaDBBMi4xMywyLjEzLDAsMCwwLDIwLDE5LjUxYTEuMzcsMS4zNywwLDAsMCwwLDEuMDksMS44MSwxLjgxLDAsMCwwLDIuNDUuNjMsMi4xLDIuMSwwLDAsMCwxLjEyLTEuMTUsMS40LDEuNCwwLDAsMCwwLTEuMUExLjU5LDEuNTksMCwwLDAsMjIuMDgsMTgu''@;'; put 'put ''MTRabS0xLjI5LS41MmgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE2LjE5LDMzLjg3QTEzLjcyLDEzLjcyLDAsMCwxLDYuNCwzMCwxMy44NiwxMy44NiwwLDAsMSwyLDIwYzAtNC40LDItOC44NCw1LjY4LTEyLjVhMTguMiwx''@;'; put 'put ''OC4yLDAsMCwxLDEzLjEtNS4zN2guMTJjMy4zMywwLDYuODUsMS40OSw3LjI0LDQuNzMuMjEsMS43Ny0uNTksMy40Ny0xLjI5LDUtLjU1LDEuMTctMS4xMSwyLjM5LS43MiwyLjgxczEsLjEyLDIuMDktLjJhNi4yNyw2LjI3LDAsMCwxLDMuMzgtLjM2LDMsMywwLDAsMSwxLjg3LDEuNTZjLjk0''@;'; put 'put ''LDEuODMuNDcsNC42Ny0uMjMsNi41NGgwQTE3LjM4LDE3LjM4LDAsMCwxLDI5LDI4Ljc0LDE5LjQzLDE5LjQzLDAsMCwxLDE2LjE5LDMzLjg3Wk0yMC43OCw0LjE2QTE2LjIyLDE2LjIyLDAsMCwwLDkuMDksOUM1Ljc5LDEyLjIzLDQsMTYuMTYsNCwyMEExMS45MiwxMS45MiwwLDAsMCw3Ljgs''@;'; put 'put ''MjguNmM1LjM4LDUuMjUsMTQuNjIsMy41NSwxOS44Ny0xLjMzYTE1LjUyLDE1LjUyLDAsMCwwLDMuNy01Ljc1aDBjLjctMS45Ljg0LTMuOTIuMzItNC45MmExLDEsMCwwLDAtLjYxLS41NSw0Ljg2LDQuODYsMCwwLDAtMi4yOS4zNWMtMS4zMS4zOS0zLC44OS00LjEyLS4zNS0xLjMyLTEuNC0u''@;'; put 'put ''NDYtMy4yNS4zNy01YTcuOTMsNy45MywwLDAsMCwxLjExLTMuOWMtLjI0LTItMi44MS0yLjk1LTUuMjYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy44NywyNi42NUEyLjU5LDIuNTksMCwwLDAsMjIuMzUsMjVMMjIsMjQu''@;'; put 'put ''OWwtLjQ2LDEuNTMuMTYsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNy0xLjg4LS42NmwtMS41NC40M2gwYTIuODMsMi44MywwLDAsMCwyLjg0LDEuOTEsNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwyMy44NywyNi42NVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0xNS4wNywyNS41OWgwYTIuNzMsMi43MywwLDAsMC0yLjI0LTEuODRsLS4yNywxLjU4YTEuMTIsMS4xMiwwLDAsMSwxLC43Yy4xNy41OS0uNDEsMS4zLTEuMjYsMS41NEExLjkyLDEuOTIsMCwwLDEsMTEsMjcu''@;'; put 'put ''NTJhMSwxLDAsMCwxLS42LS42MXMwLS4wOSwwLS4xM2wtMS41OC4xNmEyLDIsMCwwLDAsLjA2LjQxQTIuNTksMi41OSwwLDAsMCwxMC4zNywyOWEzLjM2LDMuMzYsMCwwLDAsMS4zMS4yNSwzLjcsMy43LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxNS4wNywyNS41OVoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xMC43OCwxOS4xN2EyLjU5LDIuNTksMCwwLDAtMS41Mi0xLjY1LDIuOTEsMi45MSwwLDAsMC0uNS0uMTZsLS4zNywxLjU2YTEuMjEsMS4yMSwwLDAsMSwuMjUuMDgsMSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEu''@;'; put 'put ''MzEtMS4yNiwxLjU1cy0xLjcxLS4wNi0xLjg4LS42NmEuODYuODYsMCwwLDEsMC0uMzlsLTEuNTYtLjM0YTIuNCwyLjQsMCwwLDAsMCwxLjE2QTIuODMsMi44MywwLDAsMCw3LjQsMjIuODNhNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxMC43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMy40NSwxMS40YTIuNTksMi41OSwwLDAsMC0xLjUyLTEuNjUsMS4xNywxLjE3LDAsMCwwLS4yLS4wNmwtLjUyLDEuNTFhLjM4LjM4LDAsMCwxLC4xLDAsMSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwx''@;'; put 'put ''LjU1YTIuMDYsMi4wNiwwLDAsMS0xLjI4LS4wNSwxLDEsMCwwLDEtLjYtLjYxLjg1Ljg1LDAsMCwxLDAtLjMybC0xLjU4LS4xOWEyLjMsMi4zLDAsMCwwLC4wNi45NEEyLjU2LDIuNTYsMCwwLDAsOC43NSwxNC44YTMuMzcsMy4zNywwLDAsMCwxLjMxLjI2LDQsNCwwLDAsMCwxLS4xNEEzLDMs''@;'; put 'put ''MCwwLDAsMTMuNDUsMTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxwYXRoIGQ9Ik0yMSw2Ljc4YTIuNTYsMi41NiwwLDAsMC0xLjUyLTEuNjVsLS4zLS4xTDE4LjcsNi41NmwuMTUsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMy0x''@;'; put 'put ''LjI2LDEuNTRzLTEuNzEtLjA2LTEuODgtLjY1YS45LjksMCwwLDEsLjA2LS41OEwxNC44OSw2LjlhMi40NywyLjQ3LDAsMCwwLS4xMiwxLjYzLDIuODQsMi44NCwwLDAsMCwyLjg0LDEuOTEsMy41OCwzLjU4LDAsMCwwLDEtLjE1QTMsMywwLDAsMCwyMSw2Ljc4WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cblxuICA8cGF0aCBkPSJNMzIuMjMsMTQuODljLTIuMS0uNTYtNC45MywxLjgtNi4zNC4zLTEuNzEtMS44MiwyLjI3LTUuNTMsMS44Ni04LjkyLS4zMy0yLjc4LTMuNTEtNC4wOC02LjY2LTQuMUExOC41LDE4LjUsMCwwLDAsNy43NCw3LjU5''@;'; put 'put ''Yy02LjY0LDYuNTktOC4wNywxNi0xLjM3LDIyLjQ4LDYuMjEsNiwxNi42MSw0LjIzLDIyLjY3LTEuNGExNy43MywxNy43MywwLDAsMCw0LjIyLTYuNTRDMzQuMzQsMTkuMjMsMzQuNDQsMTUuNDksMzIuMjMsMTQuODlaTTkuNCwxMC41N2EyLjIzLDIuMjMsMCwwLDEsMi44NywxLjIxLDIuMjIs''@;'; put 'put ''Mi4yMiwwLDAsMS0xLjgxLDIuNTNBMi4yMiwyLjIyLDAsMCwxLDcuNTksMTMuMSwyLjIzLDIuMjMsMCwwLDEsOS40LDEwLjU3Wk01LjA3LDIwLjgyYTIuMjIsMi4yMiwwLDAsMSwxLjgyLTIuNTNBMi4yMiwyLjIyLDAsMCwxLDkuNzUsMTkuNSwyLjIzLDIuMjMsMCwwLDEsNy45NCwyMiwyLjI0''@;'; put 'put ''LDIuMjQsMCwwLDEsNS4wNywyMC44MlptNyw4LjMzYTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjFBMi4yMywyLjIzLDAsMCwxLDExLDI1LjQxYTIuMjMsMi4yMywwLDAsMSwyLjg3LDEuMjFBMi4yMiwyLjIyLDAsMCwxLDEyLDI5LjE1Wk0xNSw4LjI2YTIuMjMsMi4yMywwLDAsMSwxLjgxLTIu''@;'; put 'put ''NTMsMi4yNCwyLjI0LDAsMCwxLDIuODcsMS4yMSwyLjIyLDIuMjIsMCwwLDEtMS44MiwyLjUzQTIuMjEsMi4yMSwwLDAsMSwxNSw4LjI2Wm01LjgyLDIyLjE5YTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjEsMi4yMywyLjIzLDAsMCwxLDEuODEtMi41MywyLjI0LDIuMjQsMCwwLDEsMi44Nywx''@;'; put 'put ''LjIxQTIuMjIsMi4yMiwwLDAsMSwyMC43OCwzMC40NVptNS0xMC40NmEzLjIsMy4yLDAsMCwxLTEuNjksMS43NiwzLjUzLDMuNTMsMCwwLDEtMS40LjMsMi43OCwyLjc4LDAsMCwxLTIuNTYtMS41LDIuNDksMi40OSwwLDAsMS0uMDctMiwzLjIsMy4yLDAsMCwxLDEuNjktMS43NiwzLDMsMCww''@;'; put 'put ''LDEsNCwxLjJBMi41NCwyLjU0LDAsMCwxLDI1Ljc5LDIwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGguRXNzZW50aWFsU2hhcGVzPXsiYWRkLXRleHQiOmguQ2xyU2hhcGVBZGRUZXh0LCJhbGFybS1vZmYiOmguQ2xyU2hhcGVBbGFybU9mZixwaW5ib2Fy''@;'; put 'put ''ZDpoLkNsclNoYXBlUGluYm9hcmQsbmV3OmguQ2xyU2hhcGVOZXcsImJ1YmJsZS1leGNsYW1hdGlvbiI6aC5DbHJTaGFwZUJ1YmJsZUV4Y2xhbWF0aW9uLCJncmlkLXZpZXciOmguQ2xyU2hhcGVHcmlkVmlldywiY3Vyc29yLWFycm93IjpoLkNsclNoYXBlQ3Vyc29yQXJyb3csImN1cnNvci1o''@;'; put 'put ''YW5kIjpoLkNsclNoYXBlQ3Vyc29ySGFuZCwiY3Vyc29yLWhhbmQtY2xpY2siOmguQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2ssImN1cnNvci1oYW5kLWdyYWIiOmguQ2xyU2hhcGVDdXJzb3JIYW5kR3JhYiwiY3Vyc29yLWhhbmQtb3BlbiI6aC5DbHJTaGFwZUN1cnNvckhhbmRPcGVuLCJjdXJz''@;'; put 'put ''b3ItbW92ZSI6aC5DbHJTaGFwZUN1cnNvck1vdmUsImZpcnN0LWFpZCI6aC5DbHJTaGFwZUZpcnN0QWlkLHJlc2l6ZTpoLkNsclNoYXBlUmVzaXplLG9iamVjdHM6aC5DbHJTaGFwZU9iamVjdHMsYm9vazpoLkNsclNoYXBlQm9vayxhc3RlcmlzazpoLkNsclNoYXBlQXN0ZXJpc2ssYnVnOmgu''@;'; put 'put ''Q2xyU2hhcGVCdWcsc2Npc3NvcnM6aC5DbHJTaGFwZVNjaXNzb3JzLHRoZXJtb21ldGVyOmguQ2xyU2hhcGVUaGVybW9tZXRlcixwZW5jaWw6aC5DbHJTaGFwZVBlbmNpbCxub3RlOmguQ2xyU2hhcGVOb3RlLHJlZnJlc2g6aC5DbHJTaGFwZVJlZnJlc2gsc3luYzpoLkNsclNoYXBlU3luYywi''@;'; put 'put ''dmlldy1saXN0IjpoLkNsclNoYXBlVmlld0xpc3QsInZpZXctY2FyZHMiOmguQ2xyU2hhcGVWaWV3Q2FyZHMsInRyZWUtdmlldyI6aC5DbHJTaGFwZVRyZWVWaWV3LGxpZ2h0YnVsYjpoLkNsclNoYXBlTGlnaHRidWxiLGRvd25sb2FkOmguQ2xyU2hhcGVEb3dubG9hZCx1cGxvYWQ6aC5DbHJT''@;'; put 'put ''aGFwZVVwbG9hZCxsb2NrOmguQ2xyU2hhcGVMb2NrLHVubG9jazpoLkNsclNoYXBlVW5sb2NrLHVzZXJzOmguQ2xyU2hhcGVVc2VycywicG9wLW91dCI6aC5DbHJTaGFwZVBvcE91dCxmaWx0ZXI6aC5DbHJTaGFwZUZpbHRlcixwaW46aC5DbHJTaGFwZVBpbixmaWxlOmguQ2xyU2hhcGVGaWxl''@;'; put 'put ''LHBsdXM6aC5DbHJTaGFwZVBsdXMsbWludXM6aC5DbHJTaGFwZU1pbnVzLCJtaW51cy1jaXJjbGUiOmguQ2xyU2hhcGVNaW51c0NpcmNsZSwicGx1cy1jaXJjbGUiOmguQ2xyU2hhcGVQbHVzQ2lyY2xlLGJhbjpoLkNsclNoYXBlQmFuLCJ0aW1lcy1jaXJjbGUiOmguQ2xyU2hhcGVUaW1lc0Np''@;'; put 'put ''cmNsZSx0cmFzaDpoLkNsclNoYXBlVHJhc2gsY2lyY2xlOmguQ2xyU2hhcGVDaXJjbGUsdGFnOmguQ2xyU2hhcGVUYWcsdGFnczpoLkNsclNoYXBlVGFncyxoaXN0b3J5OmguQ2xyU2hhcGVIaXN0b3J5LGNsb2NrOmguQ2xyU2hhcGVDbG9jaywiYWxhcm0tY2xvY2siOmguQ2xyU2hhcGVBbGFy''@;'; put 'put ''bUNsb2NrLGFycm93OkEuQ2xyU2hhcGVBcnJvdywiY2lyY2xlLWFycm93IjpoLkNsclNoYXBlQ2lyY2xlQXJyb3csImNoaWxkLWFycm93IjpoLkNsclNoYXBlQ2hpbGRBcnJvdyxjb3B5OmguQ2xyU2hhcGVDb3B5LGhlbHA6aC5DbHJTaGFwZUhlbHAsbG9naW46aC5DbHJTaGFwZUxvZ2luLGxv''@;'; put 'put ''Z291dDpoLkNsclNoYXBlTG9nb3V0LHByaW50ZXI6aC5DbHJTaGFwZVByaW50ZXIsd29ybGQ6aC5DbHJTaGFwZVdvcmxkLHNsaWRlcjpoLkNsclNoYXBlU2xpZGVyLGNsaXBib2FyZDpoLkNsclNoYXBlQ2xpcGJvYXJkLGZpcmV3YWxsOmguQ2xyU2hhcGVGaXJld2FsbCxsaXN0OmguQ2xyU2hh''@;'; put 'put ''cGVMaXN0LHJlZG86aC5DbHJTaGFwZVJlZG8sdW5kbzpoLkNsclNoYXBlVW5kbyxzY3JvbGw6aC5DbHJTaGFwZVNjcm9sbCwiZmlsZS1zZXR0aW5ncyI6aC5DbHJTaGFwZUZpbGVTZXR0aW5ncywidHdvLXdheS1hcnJvd3MiOmguQ2xyU2hhcGVUd29XYXlBcnJvd3Msc3dpdGNoOmguQ2xyU2hh''@;'; put 'put ''cGVTd2l0Y2gsdG9vbHM6aC5DbHJTaGFwZVRvb2xzLCJ3aW5kb3ctY2xvc2UiOmguQ2xyU2hhcGVXaW5kb3dDbG9zZSwid2luZG93LW1heCI6aC5DbHJTaGFwZVdpbmRvd01heCwid2luZG93LW1pbiI6aC5DbHJTaGFwZVdpbmRvd01pbiwid2luZG93LXJlc3RvcmUiOmguQ2xyU2hhcGVXaW5k''@;'; put 'put ''b3dSZXN0b3JlLCJ6b29tLWluIjpoLkNsclNoYXBlWm9vbUluLCJ6b29tLW91dCI6aC5DbHJTaGFwZVpvb21PdXQsa2V5OmguQ2xyU2hhcGVLZXksbGlicmFyeTpoLkNsclNoYXBlTGlicmFyeSxib2x0OmguQ2xyU2hhcGVCb2x0LHdyZW5jaDpoLkNsclNoYXBlV3JlbmNoLGJ1bGxzZXllOmgu''@;'; put 'put ''Q2xyU2hhcGVCdWxsc2V5ZSx0YXJnZXQ6aC5DbHJTaGFwZVRhcmdldCxmbGFtZTpoLkNsclNoYXBlRmxhbWUsaG91cmdsYXNzOmguQ2xyU2hhcGVIb3VyZ2xhc3MsIm5vLWFjY2VzcyI6aC5DbHJTaGFwZU5vQWNjZXNzLG9yZ2FuaXphdGlvbjpoLkNsclNoYXBlT3JnYW5pemF0aW9uLGJhbGFu''@;'; put 'put ''Y2U6aC5DbHJTaGFwZUJhbGFuY2UsImlkLWJhZGdlIjpoLkNsclNoYXBlSWRCYWRnZSxyZXBlYXQ6aC5DbHJTaGFwZVJlcGVhdCwiZmlsZS1ncm91cCI6aC5DbHJTaGFwZUZpbGVHcm91cCxwYXBlcmNsaXA6aC5DbHJTaGFwZVBhcGVyY2xpcCxzaHJpbms6aC5DbHJTaGFwZVNocmluaywiYWNj''@;'; put 'put ''ZXNzaWJpbGl0eS0xIjpoLkNsclNoYXBlQWNjZXNzaWJpbGl0eTEsImFjY2Vzc2liaWxpdHktMiI6aC5DbHJTaGFwZUFjY2Vzc2liaWxpdHkyLCJzb3J0LWJ5IjpoLkNsclNoYXBlU29ydEJ5LCJjb2xsYXBzZS1jYXJkIjpoLkNsclNoYXBlQ29sbGFwc2VDYXJkLCJleHBhbmQtY2FyZCI6aC5D''@;'; put 'put ''bHJTaGFwZUV4cGFuZENhcmQsYnJpZWZjYXNlOmguQ2xyU2hhcGVCcmllZmNhc2UsImNvbG9yLXBpY2tlciI6aC5DbHJTaGFwZUNvbG9yUGlja2VyLCJjb3B5LXRvLWNsaXBib2FyZCI6aC5DbHJTaGFwZUNvcHlUb0NsaXBib2FyZCwiZmlsdGVyLTIiOmguQ2xyU2hhcGVGaWx0ZXIyLCJkcmFn''@;'; put 'put ''LWhhbmRsZSI6aC5DbHJTaGFwZURyYWdIYW5kbGUsbW9vbjpoLkNsclNoYXBlTW9vbixzdW46aC5DbHJTaGFwZVN1bix3YW5kOmguQ2xyU2hhcGVXYW5kLGNsb25lOmguQ2xyU2hhcGVDbG9uZSxkZXRhaWxzOmguQ2xyU2hhcGVEZXRhaWxzLCJkcmFnLWhhbmRsZS1jb3JuZXIiOmguQ2xyU2hh''@;'; put 'put ''cGVEcmFnSGFuZGxlQ29ybmVyLGVyYXNlcjpoLkNsclNoYXBlRXJhc2VyLGxhbmRzY2FwZTpoLkNsclNoYXBlTGFuZHNjYXBlLHBhc3RlOmguQ2xyU2hhcGVQYXN0ZSxwb3J0cmFpdDpoLkNsclNoYXBlUG9ydHJhaXQsImZpbGUtemlwIjpoLkNsclNoYXBlRmlsZVppcCwiZmlsdGVyLW9mZiI6''@;'; put 'put ''aC5DbHJTaGFwZUZpbHRlck9mZixyZWN5Y2xlOmguQ2xyU2hhcGVSZWN5Y2xlLHRyZWU6aC5DbHJTaGFwZVRyZWUsZmlzaDpoLkNsclNoYXBlRmlzaCxmb3JtOmguQ2xyU2hhcGVGb3JtLGZ1ZWw6aC5DbHJTaGFwZUZ1ZWwsc25vd2ZsYWtlOmguQ2xyU2hhcGVTbm93Zmxha2UsdGFibGU6aC5D''@;'; put 'put ''bHJTaGFwZVRhYmxlLCJkb3QtY2lyY2xlIjpoLkNsclNoYXBlRG90Q2lyY2xlLHZvbHVtZTpoLkNsclNoYXBlVm9sdW1lLGNyb3NzaGFpcnM6aC5DbHJTaGFwZUNyb3NzaGFpcnMsYmV0YTpoLkNsclNoYXBlQmV0YSwiY29sb3ItcGFsZXR0ZSI6aC5DbHJTaGFwZUNvbG9yUGFsZXR0ZX0sT2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KGguRXNzZW50aWFsU2hhcGVzLCJlZGl0IiwoMCxjLmRlc2NyaXB0b3JDb25maWcpKGguRXNzZW50aWFsU2hhcGVzLnBlbmNpbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLkVzc2VudGlhbFNoYXBlcywibm90ZS1lZGl0IiwoMCxjLmRlc2NyaXB0b3JDb25m''@;'; put 'put ''aWcpKGguRXNzZW50aWFsU2hhcGVzLm5vdGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaC5Fc3NlbnRpYWxTaGFwZXMsImdyb3VwIiwoMCxjLmRlc2NyaXB0b3JDb25maWcpKGguRXNzZW50aWFsU2hhcGVzLnVzZXJzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGguRXNzZW50aWFsU2hhcGVz''@;'; put 'put ''LCJkb2N1bWVudCIsKDAsYy5kZXNjcmlwdG9yQ29uZmlnKShoLkVzc2VudGlhbFNoYXBlcy5maWxlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGguRXNzZW50aWFsU2hhcGVzLCJhZGQiLCgwLGMuZGVzY3JpcHRvckNvbmZpZykoaC5Fc3NlbnRpYWxTaGFwZXMucGx1cykpLE9iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShoLkVzc2VudGlhbFNoYXBlcywiY2FuY2VsIiwoMCxjLmRlc2NyaXB0b3JDb25maWcpKGguRXNzZW50aWFsU2hhcGVzLmJhbikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLkVzc2VudGlhbFNoYXBlcywicmVtb3ZlIiwoMCxjLmRlc2NyaXB0b3JDb25maWcpKGguRXNzZW50''@;'; put 'put ''aWFsU2hhcGVzWyJ0aW1lcy1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLkVzc2VudGlhbFNoYXBlcywic2lnbi1pbiIsKDAsYy5kZXNjcmlwdG9yQ29uZmlnKShoLkVzc2VudGlhbFNoYXBlcy5sb2dpbikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLkVzc2VudGlhbFNoYXBl''@;'; put 'put ''cywic2lnbi1vdXQiLCgwLGMuZGVzY3JpcHRvckNvbmZpZykoaC5Fc3NlbnRpYWxTaGFwZXMubG9nb3V0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGguRXNzZW50aWFsU2hhcGVzLCJsaWdodG5pbmciLCgwLGMuZGVzY3JpcHRvckNvbmZpZykoaC5Fc3NlbnRpYWxTaGFwZXMuYm9sdCkpLE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShoLkVzc2VudGlhbFNoYXBlcywiZmxvdy1jaGFydCIsKDAsYy5kZXNjcmlwdG9yQ29uZmlnKShoLkVzc2VudGlhbFNoYXBlcy5vcmdhbml6YXRpb24pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaC5Fc3NlbnRpYWxTaGFwZXMsImFsZXJ0IiwoMCxjLmRlc2Ny''@;'; put 'put ''aXB0b3JDb25maWcpKGguRXNzZW50aWFsU2hhcGVzWyJidWJibGUtZXhjbGFtYXRpb24iXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLkVzc2VudGlhbFNoYXBlcywicGlubmVkIiwoMCxjLmRlc2NyaXB0b3JDb25maWcpKGguRXNzZW50aWFsU2hhcGVzLnBpbmJvYXJkKSksT2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KGguRXNzZW50aWFsU2hhcGVzLCJhdHRhY2htZW50IiwoMCxjLmRlc2NyaXB0b3JDb25maWcpKGguRXNzZW50aWFsU2hhcGVzLnBhcGVyY2xpcCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLkVzc2VudGlhbFNoYXBlcywiYXR0YWNobWVudCIsKDAsYy5kZXNjcmlwdG9y''@;'; put 'put ''Q29uZmlnKShoLkVzc2VudGlhbFNoYXBlcy5wYXBlcmNsaXApKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaC5Fc3NlbnRpYWxTaGFwZXMsInJlc2l6ZS1kb3duIiwoMCxjLmRlc2NyaXB0b3JDb25maWcpKGguRXNzZW50aWFsU2hhcGVzLnNocmluaykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSho''@;'; put 'put ''LkVzc2VudGlhbFNoYXBlcywicmVzaXplLXVwIiwoMCxjLmRlc2NyaXB0b3JDb25maWcpKGguRXNzZW50aWFsU2hhcGVzLnJlc2l6ZSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChoLkVz''@;'; put 'put ''c2VudGlhbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvbWVkaWEtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3No''@;'; put 'put ''YXBlcy9tZWRpYS1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oaixoLHkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoaCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksaC5NZWRpYVNoYXBlcz1oLkNsclNoYXBlTWljcm9waG9uZU11dGU9aC5DbHJTaGFwZU1pY3JvcGhvbmU9aC5DbHJTaGFwZVZpZGVvR2FsbGVyeT1oLkNsclNoYXBlUmVwbGF5T25lPWguQ2xyU2hhcGVSZXBsYXlBbGw9aC5D''@;'; put 'put ''bHJTaGFwZUltYWdlR2FsbGVyeT1oLkNsclNoYXBlTXVzaWNOb3RlPWguQ2xyU2hhcGVGaWxtU3RyaXA9aC5DbHJTaGFwZUhlYWRwaG9uZXM9aC5DbHJTaGFwZVZvbHVtZU11dGU9aC5DbHJTaGFwZVZvbHVtZVVwPWguQ2xyU2hhcGVWb2x1bWVEb3duPWguQ2xyU2hhcGVTaHVmZmxlPWguQ2xy''@;'; put 'put ''U2hhcGVWaWRlb0NhbWVyYT1oLkNsclNoYXBlQ2FtZXJhPWguQ2xyU2hhcGVGYXN0Rm9yd2FyZD1oLkNsclNoYXBlUmV3aW5kPWguQ2xyU2hhcGVQb3dlcj1oLkNsclNoYXBlU3RvcD1oLkNsclNoYXBlU3RlcEZvcndhcmQ9aC5DbHJTaGFwZVBhdXNlPWguQ2xyU2hhcGVQbGF5PXZvaWQgMDt2''@;'; put 'put ''YXIgYz15KAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7aC5DbHJTaGFwZVBsYXk9KDAsYy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiIGQ9Ik04LjA3LDMxLjZBMi4wNywyLjA3LDAsMCwxLDYsMjkuNTNWNi4zMkEyLjA3LDIuMDcsMCwwLDEsOSw0LjQ3TDMyLjIxLDE2LjA4YTIuMDcsMi4wNywwLDAsMSwwLDMuN0w5LDMxLjM4QTIuMDYsMi4wNiwwLDAsMSw4LjA3LDMxLjZabTAtMjUuMzRMOCw2LjMyVjI5LjUz''@;'; put 'put ''bC4xLjA2TDMxLjMxLDE4YS4wNi4wNiwwLDAsMCwwLS4wNloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMTYsMTYuMDgsOC45NCw0LjQ3QTIuMDcsMi4wNywwLDAsMCw2LDYuMzJWMjkuNTNhMi4wNiwyLjA2''@;'; put 'put ''LDAsMCwwLDMsMS44NUwzMi4xNiwxOS43N2EyLjA3LDIuMDcsMCwwLDAsMC0zLjdaIi8+JyksaC5DbHJTaGFwZVBhdXNlPSgwLGMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTIuOTMsMzJINi4wN0EyLjA3LDIuMDcs''@;'; put 'put ''MCwwLDEsNCwyOS45M1Y2LjA3QTIuMDcsMi4wNywwLDAsMSw2LjA3LDRoNi44N0EyLjA3LDIuMDcsMCwwLDEsMTUsNi4wN1YyOS45M0EyLjA3LDIuMDcsMCwwLDEsMTIuOTMsMzJaTTEzLDZINlYzMGg3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjkuOTMsMzJIMjMuMDdBMi4wNywyLjA3LDAsMCwxLDIxLDI5LjkzVjYuMDdBMi4wNywyLjA3LDAsMCwxLDIzLjA3LDRoNi44N0EyLjA3LDIuMDcsMCwwLDEsMzIsNi4wN1YyOS45M0EyLjA3LDIuMDcsMCwwLDEsMjkuOTMsMzJaTTMwLDZIMjNWMzBo''@;'; put 'put ''N1oiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSIzLjk1IiB5PSI0IiB3aWR0aD0iMTEiIGhlaWdodD0iMjgiIHJ4PSIyLjA3IiByeT0iMi4wNyIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIHg9IjIwLjk1IiB5PSI0IiB3aWR0aD0iMTEiIGhlaWdodD0iMjgiIHJ4PSIyLjA3IiByeT0iMi4wNyIvPicpLGguQ2xyU2hhcGVTdGVwRm9yd2FyZD0oMCxjLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgZD0iTTUsMzIuMjNhMiwyLDAsMCwxLTItMlY1Ljc3QTIsMiwwLDAsMSw2LjE3LDQuMTRMMjMuMjMsMTYuMzhhMiwyLDAsMCwxLDAsMy4yNWgwTDYuMTcsMzEuODZBMiwyLDAsMCwxLDUsMzIuMjNaTTUsNS43N1YzMC4yM0wyMi4wNywxOFoiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMxLDMySDI4YTIsMiwwLDAsMS0yLTJWNmEyLDIsMCwwLDEsMi0yaDNhMiwyLDAsMCwxLDIsMlYzMEEyLDIsMCwwLDEsMzEsMzJaTTI4LDZWMzBoM1Y2WiIvPlxuICAgICAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik01LDMxLjlhMiwyLDAsMCwxLTItMlY1LjQ0QTIsMiwwLDAsMSw2LjEyLDMuODFMMjMuMTgsMTZhMiwyLDAsMCwxLDAsMy4yNWgwTDYuMTIsMzEuNTJBMiwyLDAsMCwxLDUsMzEuOVoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyNS45NSIgeT0iMy42NyIgd2lkdGg9IjciIGhlaWdodD0iMjgiIHJ4PSIyIiByeT0iMiIvPicpLGguQ2xyU2hhcGVTdG9wPSgwLGMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMzJINmEyLDIsMCwwLDEtMi0yVjZBMiwyLDAsMCwxLDYsNEgzMGEyLDIsMCwwLDEsMiwyVjMwQTIsMiwwLDAsMSwzMCwzMlpNNiw2VjMwSDMwVjZaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgeD0iMy45NiIgeT0iNCIgd2lkdGg9IjI3Ljk5IiBoZWlnaHQ9IjI4IiByeD0iMiIgcnk9IjIiLz4nKSxoLkNsclNoYXBlUG93ZXI9KDAsYy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0x''@;'; put 'put ''OCwyMWExLDEsMCwwLDEtMS0xVjRhMSwxLDAsMCwxLDIsMFYyMEExLDEsMCwwLDEsMTgsMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwzNC4xNWExNSwxNSwwLDAsMS03LjUyLTI4LDEsMSwwLDAs''@;'; put 'put ''MSwxLDEuNzMsMTMsMTMsMCwxLDAsMTMsMCwxLDEsMCwxLDEsMS0xLjczLDE1LDE1LDAsMCwxLTcuNTIsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xOCwyMWExLDEs''@;'; put 'put ''MCwwLDAsMS0xVjRhMSwxLDAsMCwwLTIsMFYyMEExLDEsMCwwLDAsMTgsMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0zMi41MSwxNS40SDMwLjQ0YTEzLDEzLDAsMSwx''@;'; put 'put ''LTE5LTcuNSwxLDEsMCwwLDAtMS0xLjczQTE1LDE1LDAsMSwwLDMzLDE5LjE1LDE0LjksMTQuOSwwLDAsMCwzMi41MSwxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsMjFhMSwxLDAsMCwxLTEtMVY0YTEsMSwwLDAsMSwyLDBWMjBBMSwxLDAsMCwxLDE4LDIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVsLS4zMSwwQTEzLDEzLDAsMSwxLDExLjQ4LDcuOWExLDEsMCwwLDAtMS0xLjczLDE1LDE1LDAsMSwwLDIxLjMxLDcuMUE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2''@;'; put 'put ''LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabS4wNiwxNy42OGExLjI4LDEuMjgsMCwwLDEtMS4yOS0xLjI4VjguNjVhMS4yOSwxLjI5LDAsMCwxLDIuNTgsMFYxOC40QTEuMjgsMS4yOCwwLDAsMSwxOC4wNiwxOS42OFpNMTgsMjcuNzlBOS44OCw5Ljg4LDAsMCwxLDEyLjE3LDkuODVh''@;'; put 'put ''MS40LDEuNCwwLDAsMSwxLjk0LjMxLDEuMzcsMS4zNywwLDAsMS0uMzEsMS45Miw3LjE4LDcuMTgsMCwxLDAsMTEuNDMsNS44LDcuMDcsNy4wNywwLDAsMC0zLTUuNzZBMS4zNywxLjM3LDAsMCwxLDIyLDEwLjJhMS40LDEuNCwwLDAsMSwxLjk0LS4yOUE5Ljg4LDkuODgsMCwwLDEsMTgsMjcu''@;'; put 'put ''NzlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRoLTZBOS43LDkuNywwLDAsMSwyOCwxNy44OWExMCwxMCwwLDEsMS0xNS44My04LDEuNCwxLjQsMCwwLDEsMS45''@;'; put 'put ''NC4zMSwxLjM3LDEuMzcsMCwwLDEtLjMxLDEuOTIsNy4xOCw3LjE4LDAsMSwwLDExLjQzLDUuOCw3LjA4LDcuMDgsMCwwLDAtLjQ1LTIuNDlIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LjM1LDE0djQuNGExLjI5LDEuMjksMCwwLDEtMi41OCwwVjguNjVhMS4yOSwxLjI5LDAsMCwxLDIuNTgs''@;'; put 'put ''MHYuNzFsMy43Ni02LjUxQTE2LDE2LDAsMSwwLDM0LDE4YTE2LDE2LDAsMCwwLS4yMy0yLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0''@;'; put 'put ''LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVhNy40Nyw3LjQ3LDAsMCwxLTMuNTctLjlBOS44Myw5LjgzLDAsMCwxLDI4LDE3Ljg5YTEwLDEwLDAsMSwxLTE1LjgzLTgsMS40LDEuNCwwLDAsMSwxLjk0LjMxLDEuMzcsMS4zNywwLDAsMS0uMzEsMS45Miw3LjE4LDcuMTgsMCwxLDAs''@;'; put 'put ''MTEuNDMsNS44LDcuMDcsNy4wNywwLDAsMC0zLTUuNzZBMS4zNywxLjM3LDAsMCwxLDIyLDEwLjJhMS4zOCwxLjM4LDAsMCwxLDEuNTItLjQ5LDcuNDUsNy40NSwwLDAsMS0uMy02LjgzLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M0E3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNMTYuNzcs''@;'; put 'put ''OC42NWExLjI5LDEuMjksMCwwLDEsMi41OCwwVjE4LjRhMS4yOSwxLjI5LDAsMCwxLTIuNTgsMFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2''@;'; put 'put ''IiByPSI1Ii8+JyksaC5DbHJTaGFwZVJld2luZD0oMCxjLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE3LjA5LDMxLjU4bC0xNS4zMi0xMmEyLDIsMCwwLDEsMC0zLjE1bDE1LjMyLTEyYTEuOTMsMS45MywwLDAsMSwy''@;'; put 'put ''LjA2LS4yMkExLjc3LDEuNzcsMCwwLDEsMjAsNnY2LjdMMzAuODMsNC40MmExLjkzLDEuOTMsMCwwLDEsMi4wNi0uMjJBMiwyLDAsMCwxLDM0LDZWMzBhMiwyLDAsMCwxLTEuMTEsMS43OSwxLjk0LDEuOTQsMCwwLDEtMi4wNi0uMjJMMjAsMjMuMzFWMzBhMS43NywxLjc3LDAsMCwxLS44NSwx''@;'; put 'put ''Ljc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4yMlpNMzIsMzBsLjA2LTI0TDE4LDE2LjhWNkwzLDE4LDE4LDMwVjE5LjJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTYuOTIsMzEuNTgsMS42LDE5LjU3YTIsMiwwLDAs''@;'; put 'put ''MSwwLTMuMTVsMTUuMzItMTJBMS45MywxLjkzLDAsMCwxLDE5LDQuMiwxLjg5LDEuODksMCwwLDEsMjAsNnY2LjdMMzAuNjYsNC40MmExLjkzLDEuOTMsMCwwLDEsMi4wNi0uMjJBMiwyLDAsMCwxLDMzLjgzLDZWMzBhMiwyLDAsMCwxLTEuMTEsMS43OSwxLjk0LDEuOTQsMCwwLDEtMi4wNi0u''@;'; put 'put ''MjJMMjAsMjMuMzFWMzBhMS44OSwxLjg5LDAsMCwxLTEsMS43OSwxLjk0LDEuOTQsMCwwLDEtMi4wNi0uMjJaIi8+JyksaC5DbHJTaGFwZUZhc3RGb3J3YXJkPSgwLGMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTcu''@;'; put 'put ''NzcsMzEuOTJhMiwyLDAsMCwxLS44Ni0uMkExLjgxLDEuODEsMCwwLDEsMTYsMjkuOTN2LTYuN0w1LjI0LDMxLjVhMS45NCwxLjk0LDAsMCwxLTIuMDYuMjIsMiwyLDAsMCwxLTEuMTEtMS43OXYtMjRBMiwyLDAsMCwxLDMuMTgsNC4xMmExLjkzLDEuOTMsMCwwLDEsMi4wNi4yMkwxNiwxMi42''@;'; put 'put ''MVY1LjkxYTEuODEsMS44MSwwLDAsMSwuOTEtMS43OUExLjkzLDEuOTMsMCwwLDEsMTksNC4zNGwxNS4zMiwxMmEyLDIsMCwwLDEsMCwzLjE1TDE5LDMxLjVBMiwyLDAsMCwxLDE3Ljc3LDMxLjkyWm0wLTEyLjhWMjkuOTNsMTUuMjYtMTItMTUuMzItMTIsLjA2LDEwLjgxTDQsNS45MXYyNFoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNy43MSwzMmEyLDIsMCwwLDEtLjg2LS4yQTEuNzcsMS43NywwLDAsMSwxNiwzMHYtNi43TDUuMTcsMzEuNThhMS45NCwxLjk0LDAsMCwxLTIuMDYuMjJBMiwyLDAsMCwxLDIs''@;'; put 'put ''MzBWNkEyLDIsMCwwLDEsMy4xMSw0LjJhMS45MywxLjkzLDAsMCwxLDIuMDYuMjJMMTYsMTIuNjlWNmExLjc3LDEuNzcsMCwwLDEsLjg1LTEuNzksMS45MywxLjkzLDAsMCwxLDIuMDYuMjJsMTUuMzIsMTJhMiwyLDAsMCwxLDAsMy4xNWwtMTUuMzIsMTJBMiwyLDAsMCwxLDE3LjcxLDMyWiIv''@;'; put 'put ''PicpLGguQ2xyU2hhcGVDYW1lcmE9KDAsYy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDhIMjQuN0wyMy42NCw1LjI4QTIsMiwwLDAsMCwyMS43OCw0SDE0LjIyYTIsMiwwLDAsMC0xLjg3LDEuMjhMMTEuMyw4SDRhMiwyLDAsMCwwLTIsMlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhabTAsMjJINFYxMGg4LjY3bDEuNTUtNGg3LjU2bDEuNTUsNEgzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOSwxOWE5LDksMCwxLDAsOS05QTksOSwwLDAsMCw5LDE5''@;'; put 'put ''Wm0xNi40LDBBNy40LDcuNCwwLDEsMSwxOCwxMS42LDcuNDEsNy40MSwwLDAsMSwyNS40LDE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LjM3LDEyLjgzYS44LjgsMCwwLDAtLjgtLjhINi4xN2EuOC44LDAs''@;'; put 'put ''MCwwLDAsMS42aDIuNEEuOC44LDAsMCwwLDkuMzcsMTIuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjM0LDE5YTUuNTcsNS41NywwLDAsMCwzLjI0LDVsLjg1LTEuMzdhNCw0LDAsMSwxLDQuMTEtNi42''@;'; put 'put ''MWwuODYtMS4zOEE1LjU2LDUuNTYsMCwwLDAsMTIuMzQsMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDhIMjQuN0wyMy42NCw1LjI4QTIsMiwwLDAsMCwyMS43OCw0SDE0LjIyYTIsMiwwLDAsMC0xLjg3''@;'; put 'put ''LDEuMjhMMTEuMyw4SDRhMiwyLDAsMCwwLTIsMlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhaTTYuMTcsMTMuNjNhLjguOCwwLDAsMSwwLTEuNmgyLjRhLjguOCwwLDAsMSwwLDEuNlpNMTgsMjhhOSw5LDAsMSwxLDktOUE5LDksMCwwLDEsMTgs''@;'; put 'put ''MjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuMTEsMTkuMDZhNy4wNyw3LjA3LDAsMCwwLDQuMTEsNi40MWwxLjA5LTEuNzRhNSw1LDAsMSwxLDUuMjItOC4zOWwxLjA5LTEuNzZhNy4wNiw3LjA2LDAsMCwwLTEx''@;'; put 'put ''LjUxLDUuNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+JyksaC5DbHJTaGFwZVZpZGVvQ2FtZXJhPSgwLGMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQsMTAuMzRhMi4xMSwyLjEx''@;'; put 'put ''LDAsMCwwLTEuMTYtMS45LDIsMiwwLDAsMC0yLjEzLjE1TDI2LDExLjZWOGEyLDIsMCwwLDAtMi0ySDZhNCw0LDAsMCwwLTQsNFYyNmE0LDQsMCwwLDAsNCw0SDI0YTIsMiwwLDAsMCwyLTJWMjQuNGw0LjY0LDNhMi4wNywyLjA3LDAsMCwwLDIuMi4yQTIuMTEsMi4xMSwwLDAsMCwzNCwyNS42''@;'; put 'put ''NlpNMzEuOTMsMjUuNzdjLS4wNiwwLS4xMSwwLS4xOS0uMDZMMjQsMjAuNzdWMjhINmEyLDIsMCwwLDEtMi0yVjEwQTIsMiwwLDAsMSw2LDhIMjR2Ny4yM2w3LjgtNWEuMTEuMTEsMCwwLDEsLjEzLDAsLjExLjExLDAsMCwxLC4wNy4xMVYyNS42NkEuMTEuMTEsMCwwLDEsMzEuOTMsMjUuNzda''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMyw5LjM1LDI2LDEyLjlWOGEyLDIsMCwwLDAtMi0ySDZhNCw0LDAsMCwwLTQsNFYyNmE0LDQsMCwwLDAsNCw0SDI0YTIsMiwwLDAsMCwyLTJWMjMuMDhsNi4zLDMuNTVB''@;'; put 'put ''MS4xLDEuMSwwLDAsMCwzNCwyNS43N1YxMC4yQTEuMSwxLjEsMCwwLDAsMzIuMyw5LjM1WiIvPicpLGguQ2xyU2hhcGVTaHVmZmxlPSgwLGMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjEuNjEsMTFoOC42MmwtMy4z''@;'; put 'put ''LDMuM2ExLDEsMCwxLDAsMS40MSwxLjQyTDM0LDEwLjA4bC0uNzEtLjcxaDBMMjguMzQsNC40M2ExLDEsMCwwLDAtMS40MSwxLjQyTDMwLjExLDlIMjFhMSwxLDAsMCwwLS44Ni41TDE3LjUsMTQuMDlsMS4xNiwyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMS4wNywyNS4wN0gzYTEsMSwwLDAsMCwwLDJoOC42NWExLDEsMCwwLDAsLjg2LS41TDE1LjE4LDIyLDE0LDIwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yOC4z''@;'; put 'put ''NCwyMC4xN2ExLDEsMCwwLDAtMS40MSwxLjQybDMuNSwzLjVIMjEuNjFMMTIuNTEsOS41M2ExLDEsMCwwLDAtLjg2LS41SDNhMSwxLDAsMSwwLDAsMmg4LjA3bDkuMSwxNS41NWExLDEsMCwwLDAsLjg2LjVIMjkuOWwtMywzYTEsMSwwLDAsMCwxLjQxLDEuNDJsNC45NS00Ljk0aDBsLjcxLS43''@;'; put 'put ''MVoiLz4nKSxoLkNsclNoYXBlVm9sdW1lRG93bj0oMCxjLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIzLjQxLDI1LjExYTEsMSwwLDAsMS0uNTQtMS44NSw2LjIxLDYuMjEsMCwwLDAtLjE5LTEwLjY1LDEsMSwwLDEs''@;'; put 'put ''MSwxLTEuNzNBOC4yMSw4LjIxLDAsMCwxLDIzLjk0LDI1LDEsMSwwLDAsMSwyMy40MSwyNS4xMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzJhMiwyLDAsMCwxLTEuNDItLjU5TDkuMTQsMjRINGEyLDIs''@;'; put 'put ''MCwwLDEtMi0yVjE0YTIsMiwwLDAsMSwyLTJIOS4yMmw3LjMzLTcuNDFBMiwyLDAsMCwxLDIwLDZWMzBhMiwyLDAsMCwxLTEuMjQsMS44NUEyLDIsMCwwLDEsMTgsMzJaTTQsMTR2OEg5LjU2YTEsMSwwLDAsMSwuNzEuMjhMMTgsMzBWNmwtNy42NSw3LjY4YTEsMSwwLDAsMS0uNzEuM1pNMTgs''@;'; put 'put ''NloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMy40MSwyNS4xMWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczQTguMjEsOC4yMSwwLDAsMSwyMy45NCwy''@;'; put 'put ''NSwxLDEsMCwwLDEsMjMuNDEsMjUuMTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTguMzQsMy44Nyw5LDEySDNhMSwxLDAsMCwwLTEsMVYyM2ExLDEsMCwwLDAsMSwxSDguODNsOS41MSw4LjNBMSwxLDAsMCwwLDIw''@;'; put 'put ''LDMxLjU1VjQuNjJBMSwxLDAsMCwwLDE4LjM0LDMuODdaIi8+JyksaC5DbHJTaGFwZVZvbHVtZVVwPSgwLGMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjMuNDEsMjUuMjVhMSwxLDAsMCwxLS41NC0xLjg1LDYuMjEs''@;'; put 'put ''Ni4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43Myw4LjIxLDguMjEsMCwwLDEsLjI0LDE0LjA2QTEsMSwwLDAsMSwyMy40MSwyNS4yNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjUuNjIsMzEu''@;'; put 'put ''MThhMSwxLDAsMCwxLS40NS0xLjg5QTEyLjQ0LDEyLjQ0LDAsMCwwLDI1LDYuODlhMSwxLDAsMSwxLC44Ny0xLjgsMTQuNDQsMTQuNDQsMCwwLDEsLjI0LDI2QTEsMSwwLDAsMSwyNS42MiwzMS4xOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzIuMDZhMiwyLDAsMCwxLTEuNDItLjU5TDkuMTQsMjRINGEyLDIsMCwwLDEtMi0yVjE0YTIsMiwwLDAsMSwyLTJIOS4yMmw3LjMzLTcuMzlBMiwyLDAsMCwxLDIwLDZ2MjRhMiwyLDAsMCwxLTEuMjQsMS44NUEyLDIsMCwwLDEsMTgsMzIuMDZaTTQsMTR2''@;'; put 'put ''OEg5LjU2YTEsMSwwLDAsMSwuNzEuM0wxOCwzMC4wNlY2TDEwLjM1LDEzLjdhMSwxLDAsMCwxLS43MS4zWk0xOCw2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTIzLjQxLDI1LjI1YTEsMSwwLDAsMS0uNTQtMS44NSw2''@;'; put 'put ''LjIxLDYuMjEsMCwwLDAtLjE5LTEwLjY1LDEsMSwwLDEsMSwxLTEuNzMsOC4yMSw4LjIxLDAsMCwxLC4yNCwxNC4wNkExLDEsMCwwLDEsMjMuNDEsMjUuMjVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjUuNjIsMzEu''@;'; put 'put ''MThhMSwxLDAsMCwxLS40NS0xLjg5QTEyLjQ0LDEyLjQ0LDAsMCwwLDI1LDYuODlhMSwxLDAsMSwxLC44Ny0xLjgsMTQuNDQsMTQuNDQsMCwwLDEsLjI0LDI2QTEsMSwwLDAsMSwyNS42MiwzMS4xOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTMiIGQ9Ik0xOC4zMyw0LDkuMDcsMTJoLTZhMSwxLDAsMCwwLTEsMXY5LjkyYTEsMSwwLDAsMCwxLDFIOC44OGw5LjQ2LDguMjRBMSwxLDAsMCwwLDIwLDMxLjQzVjQuNzJBMSwxLDAsMCwwLDE4LjMzLDRaIi8+JyksaC5DbHJTaGFwZVZvbHVtZU11dGU9KDAsYy5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zLjYxLDYuNDEsOS4xOSwxMkg0YTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwySDkuMTRsNy40MSw3LjQ3QTIsMiwwLDAsMCwxOCwzMmEyLDIsMCwwLDAsLjc2LS4xNUEyLDIsMCwwLDAs''@;'; put 'put ''MjAsMzBWMjIuNzdsNS44OSw1Ljg5Yy0uMjUuMTUtLjQ5LjI5LS43NS40MmExLDEsMCwwLDAsLjksMS43OSwxNC40LDE0LjQsMCwwLDAsMS4zMS0uNzVsMi4yOCwyLjI4TDMxLDMxLDUsNVpNMTgsMzBsLTcuNzMtNy43N0ExLDEsMCwwLDAsOS41NiwyMkg0VjE0SDkuNjRhMSwxLDAsMCwwLC43''@;'; put 'put ''MS0uM2wuMjYtLjI2TDE4LDIwLjgxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC44OSw2LjY5QTEyLjQyLDEyLjQyLDAsMCwxLDI5LDI2LjFsMS40MiwxLjQyQTE0LjQyLDE0LjQyLDAsMCwwLDI1Ljc2LDQu''@;'; put 'put ''ODhhMSwxLDAsMSwwLS44NywxLjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTIyLjY5LDEyLjYyQTYuMjcsNi4yNywwLDAsMSwyNS44LDE4YTYuMTcsNi4xNywwLDAsMS0xLjI0LDMuNzFMMjYsMjMuMTNBOC4x''@;'; put 'put ''NSw4LjE1LDAsMCwwLDI3LjgsMThhOC4yOCw4LjI4LDAsMCwwLTQuMS03LjExLDEsMSwwLDEsMC0xLDEuNzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LDZ2OS4xNWwyLDJWNmEyLDIsMCwwLDAtMy40Mi0x''@;'; put 'put ''LjQxTDEyLDkuMTdsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI0Ljg3LDYuNjlBMTIuNDIsMTIuNDIsMCwwLDEsMjguNzUsMjYuM2wxLjQyLDEuNDJBMTQuNDMsMTQuNDMsMCwwLDAsMjUuNzQsNC44''@;'; put 'put ''OGExLDEsMCwwLDAtLjg3LDEuOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNy4zLDI3LjY3aDBsLTMuODQtMy44NC0uNTctLjU3aDBMNC42Myw1LDMuMjEsNi40MSw4LjgsMTJIM2ExLDEsMCwwLDAtMSwxVjIzYTEs''@;'; put 'put ''MSwwLDAsMCwxLDFIOC44M2w5LjUxLDguM0ExLDEsMCwwLDAsMjAsMzEuNTVWMjMuMmw1LjU5LDUuNTljLS4xNy4xLS4zNC4yLS41MS4yOWExLDEsMCwwLDAsLjksMS43OWMuMzctLjE5LjcyLS40LDEuMDgtLjYybDIuMTQsMi4xNEwzMC42MSwzMWwtMy4yNS0zLjI1WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTIyLjY5LDEyLjYyQTYuMjcsNi4yNywwLDAsMSwyNS44LDE4YTYuMTcsNi4xNywwLDAsMS0xLjQyLDMuOTJsMS40MiwxLjQyYTguMTYsOC4xNiwwLDAsMCwyLTUuMzQsOC4yOCw4LjI4LDAsMCwwLTQu''@;'; put 'put ''MS03LjExLDEsMSwwLDEsMC0xLDEuNzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMjAsNC42MmExLDEsMCwwLDAtMS42Ni0uNzVsLTYuNDIsNS42TDIwLDE3LjU0WiIvPicpLGguQ2xyU2hhcGVIZWFkcGhvbmVzPSgw''@;'; put 'put ''LGMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsM0ExNC4yNywxNC4yNywwLDAsMCw0LDE3LjVWMzFIOS4yQTIuNzQsMi43NCwwLDAsMCwxMiwyOC4zM1YyMS42N0EyLjc0LDIuNzQsMCwwLDAsOS4yLDE5SDZWMTcu''@;'; put 'put ''NUExMi4yNywxMi4yNywwLDAsMSwxOCw1LDEyLjI3LDEyLjI3LDAsMCwxLDMwLDE3LjVWMTlIMjYuOEEyLjc0LDIuNzQsMCwwLDAsMjQsMjEuNjd2Ni42N0EyLjc0LDIuNzQsMCwwLDAsMjYuOCwzMUgzMlYxNy41QTE0LjI3LDE0LjI3LDAsMCwwLDE4LDNaTTkuMiwyMWEuNzUuNzUsMCwwLDEs''@;'; put 'put ''LjguNjd2Ni42N2EuNzUuNzUsMCwwLDEtLjguNjdINlYyMVpNMjYsMjguMzNWMjEuNjdhLjc1Ljc1LDAsMCwxLC44LS42N0gzMHY4SDI2LjhBLjc1Ljc1LDAsMCwxLDI2LDI4LjMzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIg''@;'; put 'put ''ZD0iTTE4LDNBMTQuMjcsMTQuMjcsMCwwLDAsNCwxNy41VjMxSDguMkExLjc0LDEuNzQsMCwwLDAsMTAsMjkuMzNWMjIuNjdBMS43NCwxLjc0LDAsMCwwLDguMiwyMUg2VjE3LjVBMTIuMjcsMTIuMjcsMCwwLDEsMTgsNSwxMi4yNywxMi4yNywwLDAsMSwzMCwxNy41VjIxSDI3LjhBMS43NCwx''@;'; put 'put ''Ljc0LDAsMCwwLDI2LDIyLjY3djYuNjdBMS43NCwxLjc0LDAsMCwwLDI3LjgsMzFIMzJWMTcuNUExNC4yNywxNC4yNywwLDAsMCwxOCwzWiIvPicpLGguQ2xyU2hhcGVGaWxtU3RyaXA9KDAsYy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFptMCwyNkg2VjZIMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0i''@;'; put 'put ''TTE0LjYsMjMuMDdhMS4yOSwxLjI5LDAsMCwwLDEuMjQuMDlsOC43My00YTEuMywxLjMsMCwwLDAsMC0yLjM3aDBsLTguNzMtNEExLjMsMS4zLDAsMCwwLDE0LDE0djhBMS4yOSwxLjI5LDAsMCwwLDE0LjYsMjMuMDdabTEtOC42TDIzLjMxLDE4LDE1LjYsMjEuNTFaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iOCIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjE0IiB5PSI3IiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMjAiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC02IiB4PSIyNiIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjgiIHk9IjI2IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVj''@;'; put 'put ''dCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgeD0iMTQiIHk9IjI2IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgeD0iMjAiIHk9IjI2IiB3aWR0aD0i''@;'; put 'put ''MiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIHg9IjI2IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMSIgZD0iTTMwLDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMCw0Wk0yMCw3aDJ2M0gyMFpNMTQsN2gydjNIMTRaTTEwLDI5SDhWMjZoMlptMC0xOUg4VjdoMlptNiwxOUgxNFYyNmgyWm02LDBIMjBWMjZoMlpt''@;'; put 'put ''My4xNi0xMC4xNkwxNS4zOSwyMy4yQTEsMSwwLDAsMSwxNCwyMi4yOFYxMy41N2ExLDEsMCwwLDEsMS40MS0uOTFMMjUuMTYsMTdBMSwxLDAsMCwxLDI1LjE2LDE4Ljg0Wk0yOCwyOUgyNlYyNmgyWm0wLTE5SDI2VjdoMloiLz4nKSxoLkNsclNoYXBlTXVzaWNOb3RlPSgwLGMuY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIlxuICAgICAgICAgICAgICAgIGQ9Ik0zMS42OCw2LjE2Yy0xLjkyLTMuMy0xMC42LTQtMTEuNTgtNC4wOUwxOSwyVjIyLjM0YTUuODksNS44OSwwLDAsMC0uODItLjU2LDguMzMsOC4zMywwLDAsMC02''@;'; put 'put ''LjUzLS40MUM3LjU3LDIyLjcsNC45MiwyNi41LDUuNzgsMjkuODRhNS4zMyw1LjMzLDAsMCwwLDIuNjYsMy4zMiw3LjQ4LDcuNDgsMCwwLDAsMy42MS44OEE5LjU0LDkuNTQsMCwwLDAsMTUsMzMuNTdjMy42Ny0xLjE4LDYuMTctNC4zMyw2LjA2LTcuMzZWOS4zNGEyOS4xNCwyOS4xNCwwLDAs''@;'; put 'put ''MSw2LjU1LDEuNDMsMSwxLDAsMSwwLC43Mi0xLjg3QTMxLjM3LDMxLjM3LDAsMCwwLDIxLDcuMzNWNC4xN2MzLjMzLjM2LDgsMS4zOCw4LjkyLDMsMiwzLjQxLTIuMzMsNy4zNi0yLjM3LDcuNGExLDEsMCwwLDAsMS4zMywxLjQ5QzI5LjE1LDE1Ljg1LDM0LjUsMTEsMzEuNjgsNi4xNlpNMTQu''@;'; put 'put ''MzUsMzEuNjdhNi40Myw2LjQzLDAsMCwxLTUtLjI2LDMuMzEsMy4zMSwwLDAsMS0xLjY5LTIuMDdjLS42LTIuMzMsMS40NS01LjA1LDQuNTgtNi4wNmE3LjUyLDcuNTIsMCwwLDEsMi4zLS4zNyw1LjUyLDUuNTIsMCwwLDEsMi42NS42MiwzLjMxLDMuMzEsMCwwLDEsMS42OSwyLjA3QzE5LjU0''@;'; put 'put ''LDI3Ljk0LDE3LjQ5LDMwLjY2LDE0LjM1LDMxLjY3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSJcbiAgICAgICAgICAgICAgICBkPSJNMzEuNjgsNi4xNmMtMS45Mi0zLjMtMTAuNi00LTExLjU4LTQuMDlMMTksMlYyMi4yOWE1''@;'; put 'put ''Ljg4LDUuODgsMCwwLDAtLjgxLS41NSw4LjMzLDguMzMsMCwwLDAtNi41My0uNDFjLTQuMTIsMS4zMy02Ljc3LDUuMTMtNS45MSw4LjQ3YTUuMzMsNS4zMywwLDAsMCwyLjY2LDMuMzIsNy40OCw3LjQ4LDAsMCwwLDMuNjEuODhBOS41NCw5LjU0LDAsMCwwLDE1LDMzLjUyYzMuNy0xLjE5LDYu''@;'; put 'put ''Mi00LjM3LDYuMDYtNy40MiwwLDAsMCwwLDAsMFY4LjQ5YzEsLjEyLDIuMzcuMzMsMy44Mi42NGExMS4xNywxMS4xNywwLDAsMSw0LjA2LDEuNDZjMSwuNjYuMzgsMS45LjMzLDJhMTEuOCwxMS44LDAsMCwxLTEuNjYsMiwxLDEsMCwwLDAsMS4zMywxLjQ5QzI5LjE1LDE1Ljg1LDM0LjUsMTEs''@;'; put 'put ''MzEuNjgsNi4xNloiLz4nKSxoLkNsclNoYXBlSW1hZ2VHYWxsZXJ5PSgwLGMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4x''@;'; put 'put ''MlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTMyLDMwSDRWMTJIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOC41NiwxOS40NWEzLDMsMCwxLDAtMy0zQTMsMywwLDAsMCw4LjU2LDE5LjQ1Wm0wLTQuNkExLjYsMS42''@;'; put 'put ''LDAsMSwxLDcsMTYuNDUsMS42LDEuNiwwLDAsMSw4LjU2LDE0Ljg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTcuOSwyOGw2LTYsMy4xOCwzLjE4TDE0LjI2LDI4aDJsNy40Ni03LjQ2TDMwLDI2Ljc3di0yTDI0LjIsMTlhLjcxLjcx''@;'; put 'put ''LDAsMCwwLTEsMGwtNS4xNiw1LjE2TDE0LjM3LDIwLjVhLjcxLjcxLDAsMCwwLTEsMEw1LjkyLDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLjE0LDNoMGExLDEsMCwwLDAtMS0xaC0yMmExLDEsMCwwLDAtMSwxaDBWNGgyNFoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwxLDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzAu''@;'; put 'put ''MTQsM2gwYTEsMSwwLDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzIuMTIsN1Y3YTEsMSwwLDAsMC0xLTFoLTI2YTEsMSwwLDAsMC0xLDFoMFY4aDI4WiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzIuMTIsMTBIMy44OEExLjg4LDEuODgsMCwwLDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEw''@;'; put 'put ''Wk04LjU2LDEzLjQ1YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguNTYsMTMuNDVaTTMwLDI4aC0yNGw3LjQ2LTcuNDdhLjcxLjcxLDAsMCwxLDEsMGwzLjY4LDMuNjhMMjMuMjEsMTlhLjcxLjcxLDAsMCwxLDEsMEwzMCwyNC43OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTMiIC8+JyksaC5DbHJTaGFwZVJlcGxheUFsbD0oMCxjLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTcuNDYsMjYuMjJhMS40LDEuNCwwLDAsMCwxLS40Mmw1LjU5LTUuNTZhMS40MywxLjQzLDAsMCwwLC40Mi0xLDEuNDYsMS40NiwwLDAsMC0uNDItMWwtNS41OS01LjU2YTEuNDMsMS40''@;'; put 'put ''MywwLDAsMC0yLjQ0LDFWMjQuNzlhMS40MSwxLjQxLDAsMCwwLC44OCwxLjMyQTEuNTQsMS41NCwwLDAsMCwxNy40NiwyNi4yMlptLjE2LTEyLjE2LDUuMTksNS4xNi01LjE5LDUuMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgu''@;'; put 'put ''MDYsNWgtNi43bDIuOTItMi42NEExLDEsMCwwLDAsMTIuOTQuODhMNy4zMiw2LDEyLjk0LDExYTEsMSwwLDAsMCwuNjcuMjYsMSwxLDAsMCwwLC43NC0uMzMsMSwxLDAsMCwwLS4wNy0xLjQyTDExLjQ2LDdoNi42QTExLjc4LDExLjc4LDAsMSwxLDcuNzEsMjQuNDEsMSwxLDAsMCwwLDYsMjUu''@;'; put 'put ''MzYsMTMuNzgsMTMuNzgsMCwxLDAsMTguMDYsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGguQ2xyU2hhcGVSZXBsYXlPbmU9KDAsYy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LDI3LjI3YTEsMSwwLDAsMCwxLTFWMTRhMSwxLDAsMCwwLTEt''@;'; put 'put ''MUgxOWEzLjgsMy44LDAsMCwwLTEuMS4yM2wtMiwuNjJhLjkyLjkyLDAsMCwwLS43Mi44Ni44OC44OCwwLDAsMCwuODguODYsMS40NiwxLjQ2LDAsMCwwLC40My0uMDhMMTgsMTUuMDd2MTEuMkExLDEsMCwwLDAsMTksMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgLz48cGF0aCBkPSJNMTguMDYsNWgtNi43bDIuOTItMi42NEExLDEsMCwwLDAsMTIuOTQuODhMNy4zMiw2LDEyLjk0LDExYTEsMSwwLDAsMCwuNjcuMjYsMSwxLDAsMCwwLC43NC0uMzMsMSwxLDAsMCwwLS4wNy0xLjQyTDExLjQ2LDdoNi42QTExLjc4LDExLjc4LDAsMSwxLDcu''@;'; put 'put ''NzEsMjQuNDEsMSwxLDAsMCwwLDYsMjUuMzYsMTMuNzgsMTMuNzgsMCwxLDAsMTguMDYsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGguQ2xyU2hhcGVWaWRlb0dhbGxlcnk9KDAsYy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLjEyLDEwSDMu''@;'; put 'put ''ODhBMS44OCwxLjg4LDAsMCwwLDIsMTEuODhWMzAuMTJBMS44OCwxLjg4LDAsMCwwLDMuODgsMzJIMzIuMTJBMS44OCwxLjg4LDAsMCwwLDM0LDMwLjEyVjExLjg4QTEuODgsMS44OCwwLDAsMCwzMi4xMiwxMFpNMzIsMzBINFYxMkgzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzIuMTIsN1Y3YTEsMSwwLDAsMC0xLTFoLTI2YTEsMSww''@;'; put 'put ''LDAsMC0xLDFoMFY4aDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTEyLjgyLDI2Ljc5YTEuNzQsMS43NCwwLDAsMCwuOTMuMjgsMS42OCwxLjY4LDAsMCwwLC42OS0uMTVsOS43Ny00LjM2YTEuNjksMS42OSwwLDAsMCwwLTMuMUwx''@;'; put 'put ''NC40NCwxNS4xYTEuNywxLjcsMCwwLDAtMi4zOSwxLjU1djguNzJBMS43LDEuNywwLDAsMCwxMi44MiwyNi43OVptLjYzLTEwLjE0YS4yOS4yOSwwLDAsMSwuMTQtLjI1LjMuMywwLDAsMSwuMTYsMCwuMjcuMjcsMCwwLDEsLjEyLDBsOS43Nyw0LjM1YS4yOS4yOSwwLDAsMSwuMTguMjguMjgu''@;'; put 'put ''MjgsMCwwLDEtLjE4LjI3bC05Ljc3LDQuMzZhLjI4LjI4LDAsMCwxLS4yOCwwLC4zMS4zMSwwLDAsMS0uMTQtLjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLjEyLDEwSDMuODhBMS44OCwxLjg4LDAsMCwwLDIsMTEuODhWMzAu''@;'; put 'put ''MTJBMS44OCwxLjg4LDAsMCwwLDMuODgsMzJIMzIuMTJBMS44OCwxLjg4LDAsMCwwLDM0LDMwLjEyVjExLjg4QTEuODgsMS44OCwwLDAsMCwzMi4xMiwxMFpNMjQuMTgsMjEuODNsLTkuNzcsNC4zNkExLDEsMCwwLDEsMTMsMjUuMjhWMTYuNTZhMSwxLDAsMCwxLDEuNDEtLjkxTDI0LjE4LDIw''@;'; put 'put ''QTEsMSwwLDAsMSwyNC4xOCwyMS44M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLjE0LDNoMGExLDEsMCwwLDAtMS0xaC0yMmExLDEsMCwwLDAtMSwxaDBWNGgyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIi''@;'; put 'put ''IC8+PHBhdGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksaC5DbHJTaGFwZU1pY3JvcGhvbmU9KDAsYy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDI0YzMu''@;'; put 'put ''OSwwLDctMy4xLDctN1Y5YzAtMy45LTMuMS03LTctN3MtNywzLjEtNyw3djhDMTEsMjAuOSwxNC4xLDI0LDE4LDI0eiBNMTMsOWMwLTIuOCwyLjItNSw1LTVzNSwyLjIsNSw1djhcblx0XHRjMCwyLjgtMi4yLDUtNSw1cy01LTIuMi01LTVWOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDUuNS00LjUsMTAtMTAsMTBTOCwyMi41LDgsMTdINmMwLDYuMyw0LjgsMTEuNCwxMSwxMS45VjMyaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2''@;'; put 'put ''LTMuMUMyNS4yLDI4LjQsMzAsMjMuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOCwyNGMzLjksMCw3LTMuMSw3LTdWOWMwLTMuOS0zLjEtNy03LTdzLTcsMy4xLTcsN3Y4QzExLDIwLjksMTQuMSwyNCwxOCwyNHoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDE3aC0yYzAsNS41LTQuNSwxMC0xMCwxMFM4LDIyLjUsOCwxN0g2YzAsNi4zLDQuOCwxMS40LDExLDExLjlWMzJoLTNjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoOGMwLjYsMCwxLTAuNCwxLTFc''@;'; put 'put ''blx0XHRzLTAuNC0xLTEtMWgtM3YtMy4xQzI1LjIsMjguNCwzMCwyMy4zLDMwLDE3eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxoLkNsclNoYXBlTWljcm9waG9uZU11dGU9KDAsYy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLDE3aC0yYzAsMS44LTAu''@;'; put 'put ''NSwzLjUtMS40LDVsMS41LDEuNUMyOS4zLDIxLjUsMjkuOSwxOS4zLDMwLDE3eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDRjMi44LDAsNSwyLjIsNSw1djhjMCwwLjQtMC4xLDAuOC0wLjIsMS4ybDEuNiwxLjZjMC40LTAuOSww''@;'; put 'put ''LjYtMS44LDAuNi0yLjhWOWMwLTMuOS0zLjItNy03LjEtNi45XG5cdFx0Yy0yLjksMC01LjYsMS45LTYuNSw0LjdMMTMsOC4zQzEzLjUsNS45LDE1LjYsNC4yLDE4LDR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjUuMiwyNi42bDYu''@;'; put 'put ''OSw2LjlsMS40LTEuNEw0LDIuNkwyLjYsNGw4LjQsOC40VjE3YzAsMy45LDMuMSw3LDcsN2MxLjMsMCwyLjUtMC4zLDMuNi0xbDIuMiwyLjJDMjIuMSwyNi40LDIwLjEsMjcsMTgsMjdcblx0XHRjLTUuNCwwLjItOS44LTQuMS0xMC05LjRjMC0wLjIsMC0wLjQsMC0wLjZINmMwLjEsNi4yLDQu''@;'; put 'put ''OCwxMS40LDExLDEydjNoLTNjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoOGMwLjYsMCwxLTAuNCwxLTFcblx0XHRzLTAuNC0xLTEtMWgtM3YtM0MyMS4yLDI4LjgsMjMuNCwyOCwyNS4yLDI2LjZ6IE0xMy44LDE5LjdDMTMuMywxOC45LDEzLDE4LDEzLDE3di0yLjZsNy4xLDcuMUMxNy45''@;'; put 'put ''LDIyLjUsMTUuMiwyMS44LDEzLjgsMTkuN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDEuOC0wLjUsMy41LTEuNCw1bDEuNSwxLjVDMjkuMywyMS41LDI5LjksMTkuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTI1LDE3VjljMC0zLjktMy4yLTctNy4xLTYuOWMtMi45LDAtNS42LDEuOS02LjUsNC43bDEzLDEzQzI0LjgsMTguOSwyNSwxNy45LDI1LDE3eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBk''@;'; put 'put ''PSJNMjUuMiwyNi42bDYuOSw2LjlsMS40LTEuNEw0LDIuNkwyLjYsNGw4LjQsOC40VjE3YzAsMy45LDMuMSw3LDcsN2MxLjMsMCwyLjUtMC4zLDMuNi0xbDIuMiwyLjJDMjIuMSwyNi40LDIwLjEsMjcsMTgsMjdcblx0XHRjLTUuNCwwLjItOS44LTQuMS0xMC05LjRjMC0wLjIsMC0wLjQsMC0w''@;'; put 'put ''LjZINmMwLjEsNi4yLDQuOCwxMS40LDExLDEydjNoLTNjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoOGMwLjYsMCwxLTAuNCwxLTFcblx0XHRzLTAuNC0xLTEtMWgtM3YtM0MyMS4yLDI4LjgsMjMuNCwyOCwyNS4yLDI2LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0zIiAvPicpLGguTWVkaWFTaGFwZXM9e3BsYXk6aC5DbHJTaGFwZVBsYXkscGF1c2U6aC5DbHJTaGFwZVBhdXNlLCJzdGVwLWZvcndhcmQiOmguQ2xyU2hhcGVTdGVwRm9yd2FyZCxzdG9wOmguQ2xyU2hhcGVTdG9wLHBvd2VyOmguQ2xyU2hhcGVQb3dlcixyZXdpbmQ6aC5DbHJTaGFwZVJl''@;'; put 'put ''d2luZCwiZmFzdC1mb3J3YXJkIjpoLkNsclNoYXBlRmFzdEZvcndhcmQsY2FtZXJhOmguQ2xyU2hhcGVDYW1lcmEsInZpZGVvLWNhbWVyYSI6aC5DbHJTaGFwZVZpZGVvQ2FtZXJhLHNodWZmbGU6aC5DbHJTaGFwZVNodWZmbGUsInZvbHVtZS11cCI6aC5DbHJTaGFwZVZvbHVtZVVwLCJ2b2x1''@;'; put 'put ''bWUtZG93biI6aC5DbHJTaGFwZVZvbHVtZURvd24sInZvbHVtZS1tdXRlIjpoLkNsclNoYXBlVm9sdW1lTXV0ZSxoZWFkcGhvbmVzOmguQ2xyU2hhcGVIZWFkcGhvbmVzLCJmaWxtLXN0cmlwIjpoLkNsclNoYXBlRmlsbVN0cmlwLCJtdXNpYy1ub3RlIjpoLkNsclNoYXBlTXVzaWNOb3RlLCJp''@;'; put 'put ''bWFnZS1nYWxsZXJ5IjpoLkNsclNoYXBlSW1hZ2VHYWxsZXJ5LCJyZXBsYXktYWxsIjpoLkNsclNoYXBlUmVwbGF5QWxsLCJyZXBsYXktb25lIjpoLkNsclNoYXBlUmVwbGF5T25lLCJ2aWRlby1nYWxsZXJ5IjpoLkNsclNoYXBlVmlkZW9HYWxsZXJ5LG1pY3JvcGhvbmU6aC5DbHJTaGFwZU1p''@;'; put 'put ''Y3JvcGhvbmUsIm1pY3JvcGhvbmUtbXV0ZSI6aC5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlfSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoaC5NZWRpYVNoYXBlcyl9LCIuL3Byb2plY3RzL2lj''@;'; put 'put ''b25zL3NyYy9zaGFwZXMvc29jaWFsLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMgKioqIQog''@;'; put 'put ''ICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKGosaCx5KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGgsIl9fZXNNb2R1bGUi''@;'; put 'put ''LHt2YWx1ZTohMH0pLGguU29jaWFsU2hhcGVzPWguQ2xyU2hhcGVIYXNodGFnPWguQ2xyU2hhcGVDcm93bj1oLkNsclNoYXBlVGh1bWJzRG93bj1oLkNsclNoYXBlVGh1bWJzVXA9aC5DbHJTaGFwZVNhZEZhY2U9aC5DbHJTaGFwZU5ldXRyYWxGYWNlPWguQ2xyU2hhcGVIYXBweUZhY2U9aC5D''@;'; put 'put ''bHJTaGFwZVBpY3R1cmU9aC5DbHJTaGFwZUNoYXRCdWJibGU9aC5DbHJTaGFwZVRhbGtCdWJibGVzPWguQ2xyU2hhcGVIZWFydEJyb2tlbj1oLkNsclNoYXBlSGVhcnQ9aC5DbHJTaGFwZUluYm94PWguQ2xyU2hhcGVGbGFnPWguQ2xyU2hhcGVUYXNrcz1oLkNsclNoYXBlRW52ZWxvcGU9aC5D''@;'; put 'put ''bHJTaGFwZUJvb2ttYXJrPWguQ2xyU2hhcGVIYWxmU3Rhcj1oLkNsclNoYXBlU3Rhcj1oLkNsclNoYXBlU2hhcmU9dm9pZCAwO3ZhciBjPXkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMi''@;'; put 'put ''KSxzPXkoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKSxBPXkoCi8qISAuL2NvcmUtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiKTto''@;'; put 'put ''LkNsclNoYXBlU2hhcmU9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy41MywyNGE1LDUsMCwwLDAtMy42LDEuNTVMMTEuNzQsMTkuNDVhNC40Nyw0LjQ3LDAsMCwwLDAtMi44bDEyLjIxLTYuMjFhNS4xMiw1''@;'; put 'put ''LjEyLDAsMSwwLTEuMDctMS43TDEwLjc5LDE0Ljg5YTUsNSwwLDEsMCwwLDYuMzNsMTIuMDYsNi4wN0E0LjkzLDQuOTMsMCwwLDAsMjIuNTQsMjlhNSw1LDAsMSwwLDUtNVptMC0yMGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSwyNy41Myw0Wk03LDIxYTMsMywwLDEsMSwzLTNBMywzLDAsMCwx''@;'; put 'put ''LDcsMjFaTTI3LjUzLDMyYTMsMywwLDEsMSwzLTNBMywzLDAsMCwxLDI3LjUzLDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNy41MywyNGE1LDUsMCwwLDAtMy42LDEuNTVMMTEuNzQsMTkuNDVhNC40Nyw0''@;'; put 'put ''LjQ3LDAsMCwwLDAtMi44bDEyLjIxLTYuMjFhNS4xMiw1LjEyLDAsMSwwLTEuMDctMS43TDEwLjc5LDE0Ljg5YTUsNSwwLDEsMCwwLDYuMzNsMTIuMDYsNi4wN0E0LjkzLDQuOTMsMCwwLDAsMjIuNTQsMjlhNSw1LDAsMSwwLDUtNVoiLz4nKSxoLkNsclNoYXBlU3Rhcj0oMCxzLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE5LDM0YTIuMjIsMi4yMiwwLDAsMS0xLjI0LS4zOGwtNy40Ni01YS4yMi4yMiwwLDAsMC0uMjUsMGwtNy40Niw1QTIuMjIsMi4yMiwwLDAsMSw3LjQsMzEuMjFsMi40NS04LjY0YS4y''@;'; put 'put ''My4yMywwLDAsMC0uMDgtLjI0TDIuNzEsMTYuNzhhMi4yMiwyLjIyLDAsMCwxLDEuMjktNGw5LS4zNGEuMjMuMjMsMCwwLDAsLjItLjE1bDMuMS04LjQzYTIuMjIsMi4yMiwwLDAsMSw0LjE3LDBsMy4xLDguNDNhLjIzLjIzLDAsMCwwLC4yLjE1bDksLjM0YTIuMjIsMi4yMiwwLDAsMSwxLjI5''@;'; put 'put ''LDRMMjcsMjIuMzNhLjIyLjIyLDAsMCwwLS4wOC4yNGwyLjQ1LDguNjRBMi4yMywyLjIzLDAsMCwxLDI3LjE5LDM0Wm0tOC44Mi03LjQyQTIuMjEsMi4yMSwwLDAsMSwxOS42LDI3bDcuNDYsNWEuMjIuMjIsMCwwLDAsLjM0LS4yNWwtMi40NS04LjY0YTIuMjEsMi4yMSwwLDAsMSwuNzctMi4z''@;'; put 'put ''NWw3LjA2LTUuNTVhLjIyLjIyLDAsMCwwLS4xMy0uNGwtOS0uMzRhMi4yMiwyLjIyLDAsMCwxLTItMS40NmwtMy4xLTguNDNhLjIyLjIyLDAsMCwwLS40MiwwTDE1LjA2LDEzYTIuMjIsMi4yMiwwLDAsMS0yLDEuNDZsLTksLjM0YS4yMi4yMiwwLDAsMC0uMTMuNEwxMSwyMC43NmEyLjIyLDIu''@;'; put 'put ''MjIsMCwwLDEsLjc3LDIuMzVMOS4zMywzMS43NWEuMjEuMjEsMCwwLDAsLjA4LjI0LjIuMiwwLDAsMCwuMjYsMGw3LjQ2LTVBMi4yMiwyLjIyLDAsMCwxLDE4LjM2LDI2LjYyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0zNCwxNi43OGEyLjIyLDIuMjIsMCwwLDAtMS4yOS00bC05LS4zNGEuMjMuMjMsMCwwLDEtLjItLjE1TDIwLjQsMy44OWEyLjIyLDIuMjIsMCwwLDAtNC4xNywwbC0zLjEsOC40M2EuMjMuMjMsMCwwLDEtLjIuMTVsLTksLjM0YTIuMjIsMi4yMiwwLDAsMC0xLjI5LDRsNy4wNiw1LjU1''@;'; put 'put ''YS4yMy4yMywwLDAsMSwuMDguMjRMNy4zNSwzMS4yMWEyLjIyLDIuMjIsMCwwLDAsMy4zOCwyLjQ1bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMiwyLjIsMCwwLDAsMi41NSwwLDIuMiwyLjIsMCwwLDAsLjgzLTIuNGwtMi40NS04LjY0YS4yMi4yMiwwLDAsMSwuMDgtLjI0''@;'; put 'put ''WiIvPicpLGguQ2xyU2hhcGVIYWxmU3Rhcj0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDE2Ljc4YTIuMjIsMi4yMiwwLDAsMC0xLjI5LTRsLTktLjM0YS4yMy4yMywwLDAsMS0uMi0uMTVMMjAuNCwzLjg5''@;'; put 'put ''YTIuMjIsMi4yMiwwLDAsMC00LjE3LDBsLTMuMSw4LjQzYS4yMy4yMywwLDAsMS0uMi4xNWwtOSwuMzRhMi4yMiwyLjIyLDAsMCwwLTEuMjksNGw3LjA2LDUuNTVhLjIyLjIyLDAsMCwxLC4wOC4yNEw3LjM1LDMxLjIxQTIuMjMsMi4yMywwLDAsMCw5LjQ5LDM0YTIuMjIsMi4yMiwwLDAsMCwx''@;'; put 'put ''LjI0LS4zOGw3LjQ2LTVhLjIyLjIyLDAsMCwxLC4yNSwwbDcuNDYsNWEyLjIyLDIuMjIsMCwwLDAsMy4zOC0yLjQ1bC0yLjQ1LTguNjRhLjIzLjIzLDAsMCwxLC4wOC0uMjRaTTE4LjMzLDI2LjYyaDBhMi4yMSwyLjIxLDAsMCwwLTEuMjQuMzhMOS42MiwzMmEuMjIuMjIsMCwwLDEtLjM0LS4y''@;'; put 'put ''NWwyLjQ1LTguNjRBMi4yMSwyLjIxLDAsMCwwLDExLDIwLjc2TDMuOSwxNS4yMWEuMjIuMjIsMCwwLDEsLjEzLS40bDktLjM0QTIuMjIsMi4yMiwwLDAsMCwxNSwxM2wzLjEtOC40M2EuMi4yLDAsMCwxLC4yMS0uMTVoMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQsMTYuNzhhMi4yMiwyLjIyLDAsMCwwLTEuMjktNGwtOS0uMzRhLjIzLjIzLDAsMCwxLS4yLS4xNUwyMC40LDMuODlhMi4yMiwyLjIyLDAsMCwwLTQuMTcsMGwtMy4xLDguNDNhLjIzLjIzLDAsMCwxLS4yLjE1bC05LC4zNGEyLjIyLDIu''@;'; put 'put ''MjIsMCwwLDAtMS4yOSw0bDcuMDYsNS41NWEuMjMuMjMsMCwwLDEsLjA4LjI0TDcuMzUsMzEuMjFhMi4yMiwyLjIyLDAsMCwwLDMuMzgsMi40NWw3LjQ2LTVhLjIyLjIyLDAsMCwxLC4yNSwwbDcuNDYsNWEyLjIsMi4yLDAsMCwwLDIuNTUsMCwyLjIsMi4yLDAsMCwwLC44My0yLjRsLTIuNDUt''@;'; put 'put ''OC42NGEuMjIuMjIsMCwwLDEsLjA4LS4yNFpNMjQuOSwyMy4xMWwyLjQ1LDguNjRBLjIyLjIyLDAsMCwxLDI3LDMybC03LjQ2LTVhMi4yMSwyLjIxLDAsMCwwLTEuMjQtLjM4aDBWNC40NGgwYS4yLjIsMCwwLDEsLjIxLjE1TDIxLjYyLDEzYTIuMjIsMi4yMiwwLDAsMCwyLDEuNDZsOSwuMzRh''@;'; put 'put ''LjIyLjIyLDAsMCwxLC4xMy40bC03LjA2LDUuNTVBMi4yMSwyLjIxLDAsMCwwLDI0LjksMjMuMTFaIi8+JyksaC5DbHJTaGFwZUJvb2ttYXJrPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjYsMzRhMiwyLDAs''@;'; put 'put ''MCwxLTEuNDEtLjU4TDE4LDI2LjgybC02LjU0LDYuNTJBMiwyLDAsMCwxLDgsMzEuOTNWNGEyLDIsMCwwLDEsMi0ySDI2YTIsMiwwLDAsMSwyLDJWMzJhMiwyLDAsMCwxLTIsMlptMC0yaDBWNEgxMFYzMS45M0wxOCwyNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMkgxMEEyLDIsMCwwLDAsOCw0VjMxLjkzYTIsMiwwLDAsMCwzLjQyLDEuNDFsNi41NC02LjUyLDYuNjMsNi42QTIsMiwwLDAsMCwyOCwzMlY0QTIsMiwwLDAsMCwyNiwyWiIvPicpLGguQ2xyU2hhcGVFbnZlbG9wZT0oMCxzLmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0zMC40NiwyOEg1LjY2bDctNy4yNC0xLjQ0LTEuMzlM''@;'; put 'put ''NCwyNi44NFY5LjUyTDE2LjQzLDIxLjg5YTIsMiwwLDAsMCwyLjgyLDBMMzIsOS4yMXYxNy41bC03LjM2LTcuMzYtMS40MSwxLjQxWk01LjMxLDhIMzAuMzhMMTcuODQsMjAuNDdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMDhWMjYuNzFsLTcuMzYtNy4zNi0xLjQxLDEuNDFMMzAuNDYsMjhINS42Nmw3LTcuMjQtMS40NC0xLjM5TDQsMjYuODRWOS41MkwxNi40MywyMS44OWEyLDIsMCwwLDAsMi44MiwwbDguODMtOC43OGE3LjQ0LDcuNDQsMCwwLDEtMi0u''@;'; put 'put ''ODVsLTguMjYsOC4yMUw1LjMxLDhIMjIuODFhNy40OSw3LjQ5LDAsMCwxLS4zMS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMkE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMDhaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjUuODYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0t''@;'; put 'put ''YWxlcnRlZCIgZD0iTTMzLjY4LDE1LjI2SDMyVjI2LjcxbC03LjM2LTcuMzYtMS40MSwxLjQxTDMwLjQ2LDI4SDUuNjZsNy03LjI0LTEuNDQtMS4zOUw0LDI2Ljg0VjkuNTJMMTYuNDMsMjEuODlhMiwyLDAsMCwwLDIuODIsMGw2LjY2LTYuNjNIMjMuMDhsLTUuMjQsNS4yMUw1LjMxLDhIMjAu''@;'; put 'put ''MDZsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQi''@;'; put 'put ''IGQ9Ik0yNi44NSwxbC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNiwxQTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEiIGQ9Ik0zMi4zMyw2YTIsMiwwLDAsMC0uNDEsMGgtMjhhMiwyLDAsMCwwLS41My4wOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODEsNy4zOSwxOS4yNSwyMS44''@;'; put 'put ''OWEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzMuODEsNy4zOVpNNS4zLDI4SDMuOTFWMjYuNTdsNy4yNy03LjIxLDEuNDEsMS40MVptMjYuNjEsMEgzMC41MWwtNy4yOS03LjIzLDEu''@;'; put 'put ''NDEtMS40MSw3LjI3LDcuMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yNiwxMi4zNEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2SDMuOTJhMiwyLDAsMCwwLS41My4wOEwxNy44NCwy''@;'; put 'put ''MC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTItLjI5bC04LjcxLDguNjhhMiwyLDAsMCwxLTIuODIsMEwyLDcuNWEyLDIsMCwwLDAt''@;'; put 'put ''LjA3LjVWMjhhMiwyLDAsMCwwLDIsMmgyOGEyLDIsMCwwLDAsMi0yVjEyLjM5QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk01LjMsMjhIMy45MVYyNi41N2w3LjI3LTcuMjEsMS40MSwxLjQxWm0yNi42MSwwSDMwLjUxbC03LjI5LTcuMjMsMS40MS0xLjQxLDcuMjcsNy4yMVoiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjUuNzdsLTYuNTIsNi40OWEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiwwLDAsMCwyLTJWMTUuMzhaTTUuMywyOEgzLjkxVjI2LjU3bDcuMjctNy4yMSwx''@;'; put 'put ''LjQxLDEuNDFabTI2LjYxLDBIMzAuNTFsLTcuMjktNy4yMywxLjQxLTEuNDEsNy4yNyw3LjIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yMi45NCwxNS40aC0uN0EzLjY4LDMu''@;'; put 'put ''NjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDMuOTJhMiwyLDAsMCwwLS41My4wOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUs''@;'; put 'put ''MS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksaC5DbHJTaGFwZVRhc2tzPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuMjksMzRINi43MUExLjcsMS43LDAsMCwxLDUsMzIuMzFWNi42OUExLjc1LDEuNzUsMCwwLDEsNyw1SDlWN0g3VjMySDI5VjdIMjdWNWgyLjI1QTEuNywxLjcsMCwwLDEsMzEsNi42OVYzMi4zMUExLjcsMS43LDAsMCwxLDI5''@;'; put 'put ''LjI5LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTYuNjYsMjUuNzYsMTEuMywyMC40QTEsMSwwLDAsMSwxMi43MiwxOWwzLjk0LDMuOTQsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNiwxMUgxMFY3LjMzQTIuMzQsMi4zNCwwLDAsMSwxMi4zMyw1aDEuNzlhNCw0LDAsMCwxLDcuNzUsMGgxLjc5QTIuMzQsMi4zNCwwLDAsMSwyNiw3LjMzWk0xMiw5''@;'; put 'put ''SDI0VjcuMzNBLjMzLjMzLDAsMCwwLDIzLjY3LDdIMjBWNmEyLDIsMCwwLDAtNCwwVjdIMTIuMzNhLjMzLjMzLDAsMCwwLS4zMy4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIg''@;'; put 'put ''ZD0iTTE5LDkuODksMTkuNTYsOUgxMlY3LjMzQS4zMy4zMywwLDAsMSwxMi4zMyw3SDE2VjZhMiwyLDAsMCwxLDQsMFY3aC43MWwxLjE2LTJhNCw0LDAsMCwwLTcuNzQsMEgxMi4zM0EyLjM0LDIuMzQsMCwwLDAsMTAsNy4zM1YxMWg4LjY0QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMjQuMTksMTUuNGwtNy41Myw3LjUzTDEyLjcyLDE5QTEsMSwwLDAsMCwxMS4zLDIwLjRsNS4zNiw1LjM2TDI2LjcxLDE1LjcxYTEsMSww''@;'; put 'put ''LDAsMCwuMi0uMzFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0yOSwxNS40VjMySDdWN0g5VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCww''@;'; put 'put ''LDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEz''@;'; put 'put ''LDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMi43MiwxOUExLDEsMCwwLDAsMTEuMywyMC40bDUuMzYsNS4zNkwyNi43MSwxNS43MWExLDEsMCwwLDAtMS40MS0xLjQxbC04LjY0LDguNjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMjMuMTMsOUgxMlY3LjMzQS4zMy4zMywwLDAsMSwxMi4zMyw3SDE2VjZhMiwyLDAsMCwxLDQsMFY3aDIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMWgtLjdhNCw0LDAsMCwwLTcuNzUsMEgxMi4zM0Ey''@;'; put 'put ''LjM0LDIuMzQsMCwwLDAsMTAsNy4zM1YxMUgyNC40MkE3LjUsNy41LDAsMCwxLDIzLjEzLDlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjUyLDcuNTIsMCww''@;'; put 'put ''LDEtMS0uMDdWMzJIN1Y3SDlWNUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjlWMzIuMzFBMS43LDEuNywwLDAsMCw2LjcxLDM0SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMzFWMTMuNDNBNy41Miw3LjUyLDAsMCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjkuMjksNC45''@;'; put 'put ''NWgtNy4yYTQuMzEsNC4zMSwwLDAsMC04LjE3LDBIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWNi42NEExLjcsMS43LDAsMCwwLDI5LjI5LDQuOTVabS0xOCwzYTEsMSwwLDAsMSwxLTFo''@;'; put 'put ''My40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2gzLjQ0YTEsMSwwLDAsMSwxLDFWOS44SDExLjI1Wm0xNC41Miw5LjIzLTkuMTIsOS4xMi01LjI0LTUuMjRhMS40LDEuNCwwLDAsMSwyLTJsMy4yNiwzLjI2LDcuMTQtNy4xNGExLjQsMS40LDAsMSwxLDIsMloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjUuODgsMTUuNGExLjM4LDEuMzgsMCwwLDEtLjExLDEuODFsLTkuMTIsOS4xMi01LjI0LTUuMjRhMS40LDEuNCwwLDAsMSwyLTJsMy4yNiwzLjI2LDctN0gy''@;'; put 'put ''Mi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwwLS4wOUgxMS4yNVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2guNDJMMjIsNC43NmE0LjMsNC4zLDAsMCwwLTguMDkuMTlIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcs''@;'; put 'put ''MCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4x''@;'; put 'put ''MywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS02LjQ2LTMuN0gxMS4yNVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2gyLjI2YTcuNTMsNy41MywwLDAsMS0uMDctMSw3LjUzLDcuNTMsMCwwLDEsLjA4LTEuMDVoLS41''@;'; put 'put ''YTQuMzEsNC4zMSwwLDAsMC04LjE3LDBIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWMTMuNDNBNy41Miw3LjUyLDAsMCwxLDMwLDEzLjVabS00LjIzLDMuNzEtOS4xMiw5LjEyLTUuMjQt''@;'; put 'put ''NS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy4xNC03LjE0YTEuNCwxLjQsMCwxLDEsMiwyWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIg''@;'; put 'put ''Y3k9IjYiIHI9IjUiLz4nKSxoLkNsclNoYXBlRmxhZz0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYsMzRhMSwxLDAsMCwxLTEtMVYzQTEsMSwwLDAsMSw3LDNWMzNBMSwxLDAsMCwxLDYsMzRaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC41NSwzLjgyYTEsMSwwLDAsMC0xLDAsMTQuOSwxNC45LDAsMCwxLTYuMTMsMS4xNiwxMy4xMSwxMy4xMSwwLDAsMS01LjE4LTEuNDksMTIuNzgsMTIuNzgsMCwwLDAtNS0x''@;'; put 'put ''LjQ1QTEwLjg2LDEwLjg2LDAsMCwwLDksMi44NVY1LjA4QTguOCw4LjgsMCwwLDEsMTMuMjUsNGExMS4yMiwxMS4yMiwwLDAsMSw0LjIsMS4yOCwxNC44NCwxNC44NCwwLDAsMCw2LDEuNjZBMTguNzUsMTguNzUsMCwwLDAsMjksNi4xMlYxOC45NWExNi4xNiwxNi4xNiwwLDAsMS01LjU4Ljkz''@;'; put 'put ''LDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OSwxMi43OCwxMi43OCwwLDAsMC01LTEuNDVBMTAuODYsMTAuODYsMCwwLDAsOSwxNy43OVYyMGE4LjgsOC44LDAsMCwxLDQuMjUtMS4wOCwxMS4yMiwxMS4yMiwwLDAsMSw0LjIsMS4yOCwxNC44NCwxNC44NCwwLDAsMCw2LDEuNjYsMTYuNzks''@;'; put 'put ''MTYuNzksMCwwLDAsNy0xLjM3LDEsMSwwLDAsMCwuNTUtLjg5VjQuNjdBMSwxLDAsMCwwLDMwLjU1LDMuODJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTUuOTIsMmExLDEsMCwwLDAtMSwxVjMzYTEsMSwwLDAs''@;'; put 'put ''MCwyLDBWM0ExLDEsMCwwLDAsNS45MiwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMC41LDMuODJhMSwxLDAsMCwwLTEsMCwxNC45LDE0LjksMCwwLDEtNi4xMywxLjE2LDEzLjExLDEzLjExLDAsMCwxLTUu''@;'; put 'put ''MTgtMS40OUExMi43OCwxMi43OCwwLDAsMCwxMy4yLDIsMTAuODYsMTAuODYsMCwwLDAsOSwyLjg1VjIwYTguOCw4LjgsMCwwLDEsNC4yNS0xLjA4LDExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0Ljg0LDAsMCwwLDYsMS42NiwxNi43OSwxNi43OSwwLDAsMCw3LTEuMzcsMSwx''@;'; put 'put ''LDAsMCwwLC41NS0uODlWNC42N0ExLDEsMCwwLDAsMzAuNSwzLjgyWiIvPicpLGguQ2xyU2hhcGVJbmJveD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIuMjMsMTMuMDlhMSwxLDAsMCwwLDAsMS40MUwxOCwyMC4zbDUuNzktNS43OWExLDEsMCwwLDAtMS40MS0xLjQxTDE5LDE2LjQ3''@;'; put 'put ''VjJBMSwxLDAsMCwwLDE4LDFhMSwxLDAsMCwwLTEsMXYxNC41bC0zLjM4LTMuMzhBMSwxLDAsMCwwLDEyLjIzLDEzLjA5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS41LDVIMjJWN2g3VjIxSDIzLjYxbC0u''@;'; put 'put ''MS44OWE1LjQyLDUuNDIsMCwwLDEtMTAuNzcsMGwtLjEtLjg5SDdWN2g3VjVINi41QTEuNSwxLjUsMCwwLDAsNSw2LjV2MjVBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41VjYuNUExLjUsMS41LDAsMCwwLDI5LjUsNVpNMjksMzFIN1YyM2gzLjkxYTcuNDIs''@;'; put 'put ''Ny40MiwwLDAsMCwxNC40NCwwSDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4yMywxMy4wOWExLDEsMCwwLDAsMCwxLjQxTDE4LDIwLjNsNS43OS01Ljc5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMTYu''@;'; put 'put ''NDdWMkExLDEsMCwwLDAsMTgsMWExLDEsMCwwLDAtMSwxdjE0LjVsLTMuMzgtMy4zOEExLDEsMCwwLDAsMTIuMjMsMTMuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41''@;'; put 'put ''YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YyMUgyMy42MWwtLjEuODlhNS40Miw1LjQyLDAsMCwxLTEwLjc3LDBsLS4xLS44OUg3VjdoN1Y1SDYuNUExLjUsMS41LDAsMCwwLDUsNi41djI1QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNVYxMy40M0E3LjUyLDcu''@;'; put 'put ''NTIsMCwwLDEsMzAsMTMuNVpNMjksMzFIN1YyM2gzLjkxYTcuNDIsNy40MiwwLDAsMCwxNC40NCwwSDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGguQ2xyU2hhcGVIZWFydD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMzIuNDNhMSwxLDAsMCwxLS42MS0uMjFDMTEuODMsMjcuOSw4LDI0LjE4''@;'; put 'put ''LDUuMzIsMjAuNTEsMS45LDE1LjgyLDEuMTIsMTEuNDksMyw3LjY0YzEuMzQtMi43NSw1LjE5LTUsOS42OS0zLjY5QTkuODcsOS44NywwLDAsMSwxOCw3LjcyYTkuODcsOS44NywwLDAsMSw1LjMxLTMuNzdjNC40OS0xLjI5LDguMzUuOTQsOS42OSwzLjY5LDEuODgsMy44NSwxLjEsOC4xOC0y''@;'; put 'put ''LjMyLDEyLjg3QzI4LDI0LjE4LDI0LjE3LDI3LjksMTguNjEsMzIuMjJBMSwxLDAsMCwxLDE4LDMyLjQzWk0xMC4xMyw1LjU4QTUuOSw1LjksMCwwLDAsNC44LDguNTFjLTEuNTUsMy4xOC0uODUsNi43MiwyLjE0LDEwLjgxQTU3LjEzLDU3LjEzLDAsMCwwLDE4LDMwLjE2LDU3LjEzLDU3LjEz''@;'; put 'put ''LDAsMCwwLDI5LjA2LDE5LjMzYzMtNC4xLDMuNjktNy42NCwyLjE0LTEwLjgxLTEtMi00LTMuNTktNy4zNC0yLjY1YTgsOCwwLDAsMC00Ljk0LDQuMiwxLDEsMCwwLDEtMS44NSwwLDcuOTMsNy45MywwLDAsMC00Ljk0LTQuMkE3LjMxLDcuMzEsMCwwLDAsMTAuMTMsNS41OFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMi01LTkuNjktMy42OUE5Ljg3LDkuODcsMCwwLDAsMTgsNy43MmE5Ljg3LDkuODcsMCwwLDAtNS4zMS0zLjc3QzguMTksMi42Niw0LjM0LDQuODks''@;'; put 'put ''Myw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgsMi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxoLkNsclNoYXBlSGVhcnRCcm9rZW49KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDcuNjRjLTEuMzQtMi43NS01LjA5LTUtOS42OS0zLjY5YTkuODcsOS44NywwLDAsMC02LDQuODQsMTguOSwxOC45LDAsMCwwLTIuMjMsNS4zM2w1LjI4''@;'; put 'put ''LDIuMzQtNC42LDQuMzcsMy40OSw0LjEsMS41Mi0xLjNMMTguNTQsMjFsNS40LTUuMTNMMTcuNTgsMTNBMTYuMjMsMTYuMjMsMCwwLDEsMTkuNzUsOC45YTcuNjgsNy42OCwwLDAsMSw0LjExLTNjMy4zNC0uODksNi4zNC42LDcuMzQsMi42NSwxLjU1LDMuMTguODUsNi43Mi0yLjE0LDEwLjgx''@;'; put 'put ''QTU3LjE2LDU3LjE2LDAsMCwxLDE4LDMwLjE2LDU3LjE2LDU3LjE2LDAsMCwxLDYuOTQsMTkuMzNjLTMtNC4xLTMuNjktNy42NC0yLjE0LTEwLjgxYTUuOSw1LjksMCwwLDEsNS4zMy0yLjkzLDcuMzEsNy4zMSwwLDAsMSwyLC4yOSw3LjcsNy43LDAsMCwxLDMuMzgsMmwuMTUtLjNhMTAuNjYs''@;'; put 'put ''MTAuNjYsMCwwLDEsMS0xLjQxLDkuNjQsOS42NCwwLDAsMC0zLjk0LTIuMjJDOC4yLDIuNjYsNC4zNCw0Ljg5LDMsNy42NGMtMS44OCwzLjg1LTEuMSw4LjE4LDIuMzIsMTIuODdDOCwyNC4xOCwxMS44MywyNy45LDE3LjM5LDMyLjIyYTEsMSwwLDAsMCwxLjIzLDBjNS41NS00LjMxLDkuMzkt''@;'; put 'put ''OCwxMi4wNy0xMS43MUMzNC4xLDE1LjgyLDM0Ljg4LDExLjQ5LDMzLDcuNjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDcuNjRjLTEuMzQtMi43NS01LjItNS05LjY5LTMuNjlBMTEuNTUsMTEuNTUsMCww''@;'; put 'put ''LDAsMTguMTksNy41YTE2Ljg5LDE2Ljg5LDAsMCwwLTIuNDgsNC41NkwyMi4yNywxNSwxNi43LDIwLjI2LDE5LDIzbC0xLjU3LDEuMzQtMy42LTQuMjIsNC43NC00LjUxLTUuNDQtMi40MWExOS40OSwxOS40OSwwLDAsMSwyLjMtNS41LDE0Ljc3LDE0Ljc3LDAsMCwxLDEuMDYtMS41NGwuMDYs''@;'; put 'put ''MGE5LjY2LDkuNjYsMCwwLDAtMy44OS0yLjE4QzguMTksMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgsMi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0''@;'; put 'put ''LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxoLkNsclNoYXBlVGFsa0J1YmJsZXM9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIzLDI2YTEsMSwwLDAsMS0xLDFIOGMtLjIyLDAtLjQzLjItLjYxLjMz''@;'; put 'put ''TDQsMzBWMTRhMSwxLDAsMCwxLDEtMUg4Ljg2VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43NywyLjc3LDAsMCwwLDI1LDI2LjEzVjI1SDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw0SDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlWN0EzLDMsMCwwLDAsMzEsNFpNMzIsMjIuOTQsMjguNSwyMC4yMWExLDEsMCww''@;'; put 'put ''LDAtLjYxLS4yMUgxNGExLDEsMCwwLDEtMS0xVjdhMSwxLDAsMCwxLDEtMUgzMUExLjEsMS4xLDAsMCwxLDMyLDcuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLDI2YTEsMSwwLDAsMS0xLDFIOGMtLjIy''@;'; put 'put ''LDAtLjQzLjItLjYxLjMzTDQsMzBWMTRhMSwxLDAsMCwxLDEtMUg4Ljg2VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43NywyLjc3LDAsMCwwLDI1LDI2LjEzVjI1SDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJ2OS43MkwyOC41LDIwLjIxYTEsMSwwLDAsMC0uNjEtLjIxSDE0YTEsMSwwLDAsMS0xLTFWN2ExLDEsMCwwLDEsMS0xSDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0y''@;'; put 'put ''SDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlWMTIuMzdBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''Mi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTgsMTlWMTFINWEzLDMs''@;'; put 'put ''MCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCwwLDEtLjFMOC43MSwyOUgyMi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMTRBNiw2LDAsMCwxLDgsMTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMzEsNEgxNGEzLDMsMCwwLDAtMywzVjE5YTMsMywwLDAsMCwzLDNIMjcuNTVsNC43OCwzLjcxYTEsMSwwLDAsMCwxLC4xMSwxLDEsMCwwLDAsLjU3LS45VjdBMywzLDAsMCwwLDMxLDRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNOCwxOVYxMUg1YTMsMywwLDAsMC0zLDNWMzJhMSwxLDAsMCwwLC41Ni44OSwxLDEsMCwwLDAsMS0uMUw4LjcxLDI5SDIyLjE1QTIuNzcsMi43NywwLDAsMCwyNSwyNi4xM1YyNUgxNEE2LDYsMCwwLDEsOCwxOVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ4LDcuNDgsMCwwLDEsMjIuNzgsNEgxNGEzLDMsMCwwLDAtMywzVjE5YTMsMywwLDAsMCwzLDNIMjcuNTVsNC43OCwzLjcxYTEsMSwwLDAsMCwxLC4xMSwxLDEsMCwwLDAsLjU3LS45VjEy''@;'; put 'put ''LjM3QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxoLkNsclNoYXBlQ2hhdEJ1YmJsZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCww''@;'; put 'put ''LDAsMS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwxOCwyLjVaTTI4LjI5LDI0LjYxYTEsMSwwLDAsMC0uMzIuNzNsMCw1LjM0LTQuMzgtMi43OWExLDEsMCwwLDAtLjgzLS4xMUExNiwxNiwwLDAsMSwxOCwyOC41Yy03LjcyLDAtMTQtNS4zOC0x''@;'; put 'put ''NC0xMnM2LjI4LTEyLDE0LTEyLDE0LDUuMzgsMTQsMTJBMTEuMDgsMTEuMDgsMCwwLDEsMjguMjksMjQuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNSwxNS41SDExYTEsMSwwLDAsMCwwLDJIMjVhMSwx''@;'; put 'put ''LDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLjc1LDIwLjVoLTcuNWExLDEsMCwwLDAsMCwyaDcuNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuMjgsMTIuNUgyNC43MmExLDEsMCwwLDAsMC0ySDExLjI4YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4zOCwx''@;'; put 'put ''Mi42OWE3LjQzLDcuNDMsMCwwLDEtMS44OS42NkExMC4zNSwxMC4zNSwwLDAsMSwzMiwxNi41YTExLjA4LDExLjA4LDAsMCwxLTMuNzEsOC4xMSwxLDEsMCwwLDAtLjMyLjczbDAsNS4zNC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0''@;'; put 'put ''LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMmExNiwxNiwwLDAsMSw0LjU1LjY2QTcuNDQsNy40NCwwLDAsMSwyMywzLjIyYTE4LDE4LDAsMCwwLTUtLjcyYy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAs''@;'; put 'put ''MS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0ExMi4zMiwxMi4zMiwwLDAsMCwzMy4zOCwxMi42OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMSwxNS41YTEsMSww''@;'; put 'put ''LDAsMCwwLDJIMjVhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC4yNSwyMC41YTEsMSwwLDAsMCwwLDJoNy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjgsMTEuNWExLDEsMCwwLDAsMSwxSDI0LjcyYTEsMSwwLDAsMCwuODMtLjQ3QTcuNTMsNy41MywwLDAsMSwyNCwxMC41SDExLjI4QTEsMSwwLDAs''@;'; put 'put ''MCwxMC4yOCwxMS41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0''@;'; put 'put ''LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wm04LDE0YTEsMSwwLDAsMS0xLDFIMTFhMSwxLDAsMCwxLDAtMkgyNUExLDEsMCwwLDEsMjYsMTYuNVptLTMuMjUsNWExLDEsMCwwLDEtMSwxaC03LjVhMSwxLDAsMCwxLDAtMmg3LjVBMSwxLDAsMCwxLDIyLjc1LDIxLjVabS0xMi40Ny0x''@;'; put 'put ''MGExLDEsMCwwLDEsMS0xSDI0LjcyYTEsMSwwLDAsMSwwLDJIMTEuMjhBMSwxLDAsMCwxLDEwLjI4LDExLjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjI1YTcuNDYsNy40NiwwLDAsMS00LjM1LTEuNCwx''@;'; put 'put ''LDEsMCwwLDEtLjkzLjY1SDExLjI4YTEsMSwwLDAsMSwwLTJIMjQuMkE3LjQ2LDcuNDYsMCwwLDEsMjMsMy4yYTE4LDE4LDAsMCwwLTUtLjdjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44''@;'; put 'put ''NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3LDEyLjM0LDEyLjM0LDAsMCwwLS42OC00QTcuNDYsNy40NiwwLDAsMSwzMCwxMy4yNVpNMjEuNzUsMjIuNWgtNy41YTEsMSwwLDAsMSwwLTJoNy41YTEsMSwwLDAsMSwwLDJabTMuMjUtNUgxMWExLDEsMCwwLDEsMC0ySDI1YTEsMSwwLDAsMSww''@;'; put 'put ''LDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNS43NSIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLWJhZGdlIiAvPicpLGguQ2xyU2hhcGVQaWN0dXJlPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCwzMFY2SDMyVjMwWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjkyLDE0YTMsMywwLDEsMC0zLTNBMywzLDAsMCwwLDguOTIsMTRabTAtNC42QTEuNiwxLjYsMCwxLDEsNy4zMywxMSwxLjYsMS42LDAsMCwxLDguOTIsOS40MVoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNzgsMTUuMzdsLTUuNCw1LjQtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01''@;'; put 'put ''LjgxLTUuODFBMSwxLDAsMCwwLDIyLjc4LDE1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45MywxMWEzLDMsMCwxLDAtMywzQTMsMywwLDAsMCwxMS45MywxMVptLTQuNiwwYTEuNiwxLjYsMCwxLDEs''@;'; put 'put ''MS42LDEuNkExLjYsMS42LDAsMCwxLDcuMzMsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy4zOCwyMC43N2wtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNs''@;'; put 'put ''Ni43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFhMSwxLDAsMCwwLTEuNDEsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMyLDEzLjIyVjMwSDRWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0z''@;'; put 'put ''Miw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0''@;'; put 'put ''LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDRBMiwyLDAsMCwwLDIs''@;'; put 'put ''NlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYsMjdWMjIuOWw2LTYuMDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDEx''@;'; put 'put ''LjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwxLjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGguQ2xyU2hhcGVIYXBweUZhY2U9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwx''@;'; put 'put ''OCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMC44OSIgY3k9IjEzLjg5IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPGNpcmNsZSBjeD0iMjUuMDUiIGN5PSIxMy44OSIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4xMywyOC4yMWE4LjY3LDguNjcsMCwwLDAsOC4yNi02SDkuODdBOC42Nyw4LjY3LDAs''@;'; put 'put ''MCwwLDE4LjEzLDI4LjIxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTguODksMTMuODlhMiwyLDAsMSwxLDIsMkEyLDIsMCwwLDEsOC44''@;'; put 'put ''OSwxMy44OVptOS4yNCwxNC4zMmE4LjY3LDguNjcsMCwwLDEtOC4yNi02SDI2LjM4QTguNjcsOC42NywwLDAsMSwxOC4xMywyOC4yMVptNi45My0xMi4zMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyNS4wNSwxNS44OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi''@;'; put 'put ''Lz4nKSxoLkNsclNoYXBlTmV1dHJhbEZhY2U9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjA1LDIyLjA2aC0xMmExLDEsMCwwLDAsMCwyaDEyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4x''@;'; put 'put ''NiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjA1LDIxLjA2YTEsMSwwLDAsMS0xLDFoLTEyYTEsMSwwLDAsMSwwLTJoMTJBMSwxLDAsMCwxLDI1LjA1LDIzLjA2Wk0yNywxNC4yOGExLjgsMS44LDAsMSwxLTEuOC0xLjhBMS44''@;'; put 'put ''LDEuOCwwLDAsMSwyNywxNC4yOFptLTE1LjgsMS44YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDExLjE2LDE2LjA4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGguQ2xyU2hhcGVTYWRGYWNlPSgwLHMuY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjUuMTYi''@;'; put 'put ''IGN5PSIxNC4yOCIgcj0iMS44IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTEuNDEiIGN5PSIxNC4yOCIgcj0iMS44IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTE4LjE2LDIwYTksOSwwLDAsMC03LjMzLDMuNzgsMSwxLDAsMSwwLDEuNjMsMS4xNiw3LDcsMCwwLDEsMTEuMzEtLjEzLDEsMSwwLDAsMCwxLjYtMS4yQTksOSwwLDAsMCwxOC4xNiwyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm05LDEyLjI4YTEuOCwxLjgsMCwxLDEtMS44LTEuOEExLjgsMS44LDAsMCwxLDI3LDE0LjI4Wm0tMTUuNTUsMS44YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44''@;'; put 'put ''LDAsMCwxLDExLjQxLDE2LjA4Wm0xNCw3LjUzYTEsMSwwLDAsMS0xLjYsMS4yLDcsNywwLDAsMC0xMS4zMS4xMywxLDEsMCwxLDEtMS42My0xLjE2LDksOSwwLDAsMSwxNC41NC0uMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksaC5DbHJTaGFwZVRodW1i''@;'; put 'put ''c1VwPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCwyNmMtMi45MiwxLjgyLTcuMyw0LTkuMzcsNGgtNmExNi42OCwxNi42OCwwLDAsMS0zLjMxLTYuMDhBMjYuNzEsMjYuNzEsMCwwLDEsNCwxNmg5VjZhMi4wNSwyLjA1LDAsMCwxLDEuMjYtMS42OWMuNzcsMiwyLjYyLDYuNTcsNC4y''@;'; put 'put ''Myw4LjcyQTExLjM5LDExLjM5LDAsMCwwLDI0LDE2LjkxVjE0Ljc4YTkuMTMsOS4xMywwLDAsMS0zLjkxLTNjLTEuODgtMi41MS00LjI5LTkuMTEtNC4zMS05LjE3QTEsMSwwLDAsMCwxNC41OSwyQzEzLjI1LDIuMzgsMTEsMy42LDExLDZ2OEgzYTEsMSwwLDAsMC0xLDEsMjksMjksMCwwLDAs''@;'; put 'put ''MS40LDkuNjJjMS44OSw1LjQsNC4xLDcuMTQsNC4yLDcuMjJhMSwxLDAsMCwwLC42MS4yMWg2LjQyYzIuNDMsMCw2LjU1LTIsOS4zNy0zLjYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMzFIMjdhMSwx''@;'; put 'put ''LDAsMCwxLTEtMVYxNGExLDEsMCwwLDEsMS0xaDdabS02LTJoNFYxNUgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYzLDEyLjEyQzE3LjUxLDkuMjgsMTQuODgsMiwxNC44OCwyUzEyLDIuODMsMTIs''@;'; put 'put ''NS4yNVYxNUgyLjIzYTI5LjQ2LDI5LjQ2LDAsMCwwLDEuNDQsOS43NEM1LjYxLDMwLjI3LDcuOCwzMiw3LjgsMzJoNi44NkMxNi45LDMyLDIxLDMwLjA2LDI0LDI4LjMxVjE1LjUxQTEwLjg0LDEwLjg0LDAsMCwxLDE5LjYzLDEyLjEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNywxM2ExLDEsMCwwLDAtMSwxVjMwYTEsMSwwLDAsMCwxLDFoN1YxM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksaC5DbHJTaGFwZVRodW1ic0Rvd249KDAscy5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTEyLDEwYzIuOTItMS44Miw3LjMtNCw5LjM3LTRoNmExNi42OCwxNi42OCwwLDAsMSwzLjMxLDYuMDhBMjYuNzEsMjYuNzEsMCwwLDEsMzIsMjBIMjNWMzBhMi4wNSwyLjA1LDAsMCwxLTEuMjYsMS42OWMtLjc3LTItMi42Mi02LjU3LTQuMjMtOC43MkExMS4zOSwxMS4zOSwwLDAs''@;'; put 'put ''MCwxMiwxOS4wOXYyLjEzYTkuMTMsOS4xMywwLDAsMSwzLjkxLDNjMS44OCwyLjUxLDQuMjksOS4xMSw0LjMxLDkuMTdhMSwxLDAsMCwwLDEuMTkuNjNDMjIuNzUsMzMuNjIsMjUsMzIuNCwyNSwzMFYyMmg4YTEsMSwwLDAsMCwxLTEsMjksMjksMCwwLDAtMS40LTkuNjJjLTEuODktNS40LTQu''@;'; put 'put ''MS03LjE0LTQuMi03LjIyQTEsMSwwLDAsMCwyNy43OSw0SDIxLjM3QzE4Ljk0LDQsMTQuODMsNiwxMiw3LjYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMiw1SDlhMSwxLDAsMCwxLDEsMVYyMmExLDEsMCww''@;'; put 'put ''LDEtMSwxSDJaTTgsN0g0VjIxSDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi4zNywyMy44NGMyLjEyLDIuODQsNC43NiwxMC4wNyw0Ljc2LDEwLjA3UzI0LDMzLjEzLDI0LDMwLjcxVjIxaDkuNzdhMjku''@;'; put 'put ''NDYsMjkuNDYsMCwwLDAtMS40NC05Ljc0QzMwLjM5LDUuNjgsMjguMiw0LDI4LjIsNEgyMS4zNUMxOS4xLDQsMTUsNS45LDEyLDcuNjV2MTIuOEExMC44NCwxMC44NCwwLDAsMSwxNi4zNywyMy44NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNOSwyM2ExLDEsMCwwLDAsMS0xVjZBMSwxLDAsMCwwLDksNUgyVjIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxoLkNsclNoYXBlQ3Jvd249KDAscy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik00LDEzLjMzQTEuMzksMS4z''@;'; put 'put ''OSwwLDEsMCwyLjYsMTQuNzIsMS4zOSwxLjM5LDAsMCwwLDQsMTMuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuODEsMTUuODRhMjAuMzUsMjAuMzUsMCwwLDAtNC41OCwxLjQzLDIyLjcsMjIuNywwLDAsMC0zLjQ4LDIu''@;'; put 'put ''MUExNy42OSwxNy42OSwwLDAsMSwyMiwxNi41N2E0Ny42NSw0Ny42NSwwLDAsMS0yLjgtNy42OSwxLDEsMCwwLDAtMS0uNzQsMSwxLDAsMCwwLTEsLjc0LDQ2LjcxLDQ2LjcxLDAsMCwxLTIuOCw3LjY5LDE3LDE3LDAsMCwxLTEuNzYsMi44LDIyLjcsMjIuNywwLDAsMC0zLjQ4LTIuMSwyMC42''@;'; put 'put ''NiwyMC42NiwwLDAsMC00LjU4LTEuNDMsMSwxLDAsMCwwLTEsLjM5LDEsMSwwLDAsMC0uMDksMS4wNUE1MC4xMyw1MC4xMywwLDAsMSw3LjgyLDMxLjE3YTEsMSwwLDAsMCwxLC44M0gyNy42MmExLDEsMCwwLDAsMS0uODMsNTAuMTUsNTAuMTUsMCwwLDEsNC4yNi0xMy44OSwxLDEsMCwwLDAt''@;'; put 'put ''LjA5LTEuMDVBMSwxLDAsMCwwLDMxLjgxLDE1Ljg0Wk0yNi43OSwzMEg5LjY0YTU1LjY2LDU1LjY2LDAsMCwwLTMuNC0xMS43MSwxNS43NSwxNS43NSwwLDAsMSwyLjA5Ljc4LDIwLDIwLDAsMCwxLDMuODUsMi40NSwxLDEsMCwwLDAsMS4zOS0uMDksMTkuMjgsMTkuMjgsMCwwLDAsMi42Ny00''@;'; put 'put ''LDQzLjQ2LDQzLjQ2LDAsMCwwLDItNC44OSw0MS43NCw0MS43NCwwLDAsMCwyLDQuODksMTkuOTIsMTkuOTIsMCwwLDAsMi42Niw0LDEsMSwwLDAsMCwxLjQuMDksMTkuMjEsMTkuMjEsMCwwLDEsMy44NS0yLjQ1LDE0Ljc3LDE0Ljc3LDAsMCwxLDIuMDktLjc4QTU1LjA3LDU1LjA3LDAsMCww''@;'; put 'put ''LDI2Ljc5LDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPGVsbGlwc2UgY3g9IjMzLjgzIiBjeT0iMTMuMzMiIHJ4PSIxLjM5IiByeT0iMS4zOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGgg''@;'; put 'put ''ZD0iTTE4LjIyLDYuMzlBMS4zOSwxLjM5LDAsMSwwLDE2Ljg0LDUsMS4zOSwxLjM5LDAsMCwwLDE4LjIyLDYuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMTguMjMsMjYuMzRhMS4xMSwxLjExLDAsMSwwLDEuMSwxLjFBMS4x''@;'; put 'put ''LDEuMSwwLDAsMCwxOC4yMywyNi4zNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMi41OCwyNi4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUExLjEsMS4xLDAsMCwwLDEyLjU4LDI2LjM0WiIvPjxwYXRoIGQ9Ik0yMy44OSwy''@;'; put 'put ''Ni4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUExLjEsMS4xLDAsMCwwLDIzLjg5LDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cblxuICA8cGF0aCBkPSJNMi42LDExLjkzQTEuNCwxLjQsMCwxLDAsNCwxMy4zMywxLjQsMS40LDAsMCwwLDIu''@;'; put 'put ''NiwxMS45M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgPGVsbGlwc2UgY3g9IjMzLjgzIiBjeT0iMTMuMzMiIHJ4PSIxLjM5IiByeT0iMS4zOSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTguMjIs''@;'; put 'put ''Ni4zOUExLjM5LDEuMzksMCwxLDAsMTYuODQsNSwxLjM5LDEuMzksMCwwLDAsMTguMjIsNi4zOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMxLjYzLDE2LjFBMTguNjEsMTguNjEsMCwwLDAsMjgsMTcuMzRhMjEuNTcsMjEuNTcsMCww''@;'; put 'put ''LDAtNCwyLjQ5LDE5LjIsMTkuMiwwLDAsMS0yLjI2LTMuNDksNDguOTIsNDguOTIsMCwwLDEtMi41Mi02LjU4LDEsMSwwLDAsMC0xLS43MWgwYTEsMSwwLDAsMC0xLC43MSw0OC40Miw0OC40MiwwLDAsMS0yLjUyLDYuNTgsMTguNjksMTguNjksMCwwLDEtMi4yNiwzLjQ4LDIyLjgxLDIyLjgx''@;'; put 'put ''LDAsMCwwLTQtMi40OEExOC44MywxOC44MywwLDAsMCw0LjksMTYuMWExLDEsMCwwLDAtMSwuMzMsMSwxLDAsMCwwLS4xMywxLjA3LDU1LjksNTUuOSwwLDAsMSw0LDEzLjUsMSwxLDAsMCwwLDEsLjgzaDE5YTEsMSwwLDAsMCwxLS44Myw1NS45LDU1LjksMCwwLDEsNC0xMy41LDEsMSwwLDAs''@;'; put 'put ''MC0uMTMtMS4wN0ExLDEsMCwwLDAsMzEuNjMsMTYuMVpNMTEuMDgsMjguNTVhMS4xMSwxLjExLDAsMSwxLDEuMS0xLjExQTEuMTEsMS4xMSwwLDAsMSwxMS4wOCwyOC41NVptNy4xNSwwYTEuMTEsMS4xMSwwLDAsMSwwLTIuMjEsMS4xMSwxLjExLDAsMCwxLDAsMi4yMVptNy4xNiwwYTEuMTEs''@;'; put 'put ''MS4xMSwwLDEsMSwxLjEtMS4xMUExLjExLDEuMTEsMCwwLDEsMjUuMzksMjguNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4gICcpLGguQ2xyU2hhcGVIYXNodGFnPSgwLHMuY2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNMzIsMTJIMjUuMzRsMS41NS03''@;'; put 'put ''Ljc0YTEsMSwwLDAsMC0yLS4zOUwyMy4zLDEySDE1LjExbDEuNTUtNy43NGExLDEsMCwwLDAtMi0uMzlMMTMuMDcsMTJINmExLDEsMCwwLDAsMCwyaDYuNjdsLTEuNiw4SDRhMSwxLDAsMCwwLDAsMmg2LjY2TDkuMTEsMzEuNzRhMSwxLDAsMCwwLC43OSwxLjE3LjY4LjY4LDAsMCwwLC4yLDAs''@;'; put 'put ''MSwxLDAsMCwwLDEtLjhMMTIuNywyNGg4LjE5bC0xLjU1LDcuNzRhMSwxLDAsMCwwLC43OSwxLjE3LjYyLjYyLDAsMCwwLC4xOSwwLDEsMSwwLDAsMCwxLS44TDIyLjkzLDI0SDMwYTEsMSwwLDAsMCwwLTJIMjMuMzNsMS42MS04SDMyYTEsMSwwLDAsMCwwLTJaTTIxLjI5LDIySDEzLjFsMS42''@;'; put 'put ''MS04SDIyLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuXG4gIDxwYXRoIGQ9Ik0zMS44NywxMEgyNi4zMmwxLTQuODNBMSwxLDAsMCwwLDI2LjM1LDRoLTJhMSwxLDAsMCwwLTEsLjc4TDIyLjMzLDEwaC01LjRsMS00LjgzQTEsMSwwLDAsMCwxNyw0''@;'; put 'put ''SDE1YTEsMSwwLDAsMC0xLC43OEwxMywxMEg3YTEsMSwwLDAsMC0xLC44bC0uNDEsMmExLDEsMCwwLDAsMSwxLjJoNS41NUwxMC41LDIyaC02YTEsMSwwLDAsMC0xLC44bC0uNDEsMmExLDEsMCwwLDAsMSwxLjJIOS42OGwtMSw0LjgzYTEsMSwwLDAsMCwxLDEuMTdoMmExLDEsMCwwLDAsLjk1''@;'; put 'put ''LS43OEwxMy42NywyNmg1LjRsLTEsNC44M0ExLDEsMCwwLDAsMTksMzJoMmExLDEsMCwwLDAsMS0uNzhMMjMuMDUsMjZoNmExLDEsMCwwLDAsMS0uOGwuNC0yYTEsMSwwLDAsMC0xLTEuMkgyMy44N2wxLjYzLThoNmExLDEsMCwwLDAsMS0uOGwuNDEtMkExLDEsMCwwLDAsMzEuODcsMTBabS0x''@;'; put 'put ''MiwxMmgtNS40bDEuNjQtOGg1LjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICcpLGguU29jaWFsU2hhcGVzPXtjcm93bjpoLkNsclNoYXBlQ3Jvd24sc2hhcmU6aC5DbHJTaGFwZVNoYXJlLHN0YXI6aC5DbHJTaGFwZVN0YXIsImhhbGYtc3RhciI6aC5D''@;'; put 'put ''bHJTaGFwZUhhbGZTdGFyLGJvb2ttYXJrOmguQ2xyU2hhcGVCb29rbWFyayxlbnZlbG9wZTpoLkNsclNoYXBlRW52ZWxvcGUsY2FsZW5kYXI6QS5DbHJTaGFwZUNhbGVuZGFyLGV2ZW50OkEuQ2xyU2hhcGVFdmVudCx0YXNrczpoLkNsclNoYXBlVGFza3MsZmxhZzpoLkNsclNoYXBlRmxhZyxp''@;'; put 'put ''bmJveDpoLkNsclNoYXBlSW5ib3gsaGFzaHRhZzpoLkNsclNoYXBlSGFzaHRhZyxoZWFydDpoLkNsclNoYXBlSGVhcnQsImhlYXJ0LWJyb2tlbiI6aC5DbHJTaGFwZUhlYXJ0QnJva2VuLCJ0YWxrLWJ1YmJsZXMiOmguQ2xyU2hhcGVUYWxrQnViYmxlcywiY2hhdC1idWJibGUiOmguQ2xyU2hh''@;'; put 'put ''cGVDaGF0QnViYmxlLHBpY3R1cmU6aC5DbHJTaGFwZVBpY3R1cmUsImhhcHB5LWZhY2UiOmguQ2xyU2hhcGVIYXBweUZhY2UsIm5ldXRyYWwtZmFjZSI6aC5DbHJTaGFwZU5ldXRyYWxGYWNlLCJzYWQtZmFjZSI6aC5DbHJTaGFwZVNhZEZhY2UsInRodW1icy11cCI6aC5DbHJTaGFwZVRodW1i''@;'; put 'put ''c1VwLCJ0aHVtYnMtZG93biI6aC5DbHJTaGFwZVRodW1ic0Rvd259LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLlNvY2lhbFNoYXBlcywiZmF2b3JpdGUiLCgwLGMuZGVzY3JpcHRvckNvbmZpZykoaC5Tb2NpYWxTaGFwZXMuc3RhcikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLlNvY2lhbFNo''@;'; put 'put ''YXBlcywiZW1haWwiLCgwLGMuZGVzY3JpcHRvckNvbmZpZykoaC5Tb2NpYWxTaGFwZXMuZW52ZWxvcGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaC5Tb2NpYWxTaGFwZXMsImRhdGUiLCgwLGMuZGVzY3JpcHRvckNvbmZpZykoaC5Tb2NpYWxTaGFwZXMuY2FsZW5kYXIpKSx0eXBlb2Ygd2lu''@;'; put 'put ''ZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoaC5Tb2NpYWxTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RlY2hub2xvZ3ktc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RlY2hub2xvZ3ktc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oaixoLHkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksaC5DbHJTaGFwZVZNV0FwcD1oLkNsclNoYXBlVk09aC5D''@;'; put 'put ''bHJTaGFwZVJvdXRlcj1oLkNsclNoYXBlTmV0d29ya1N3aXRjaD1oLkNsclNoYXBlTmV0d29ya1NldHRpbmdzPWguQ2xyU2hhcGVOZXR3b3JrR2xvYmU9aC5DbHJTaGFwZVRhYmxldD1oLkNsclNoYXBlTW9iaWxlPWguQ2xyU2hhcGVCYXR0ZXJ5PWguQ2xyU2hhcGVBcHBsaWNhdGlvbj1oLkNs''@;'; put 'put ''clNoYXBlQ29kZT1oLkNsclNoYXBlVGVybWluYWw9aC5DbHJTaGFwZURpc3BsYXk9aC5DbHJTaGFwZUNvbXB1dGVyPWguQ2xyU2hhcGVGbG9wcHk9aC5DbHJTaGFwZVBsdWdpbj1oLkNsclNoYXBlRG93bmxvYWRDbG91ZD1oLkNsclNoYXBlVXBsb2FkQ2xvdWQ9aC5DbHJTaGFwZUV4cG9ydD1o''@;'; put 'put ''LkNsclNoYXBlSW1wb3J0PWguQ2xyU2hhcGVTaGllbGRYPWguQ2xyU2hhcGVTaGllbGQ9aC5DbHJTaGFwZVNoaWVsZENoZWNrPWguQ2xyU2hhcGVSZXNvdXJjZVBvb2w9aC5DbHJTaGFwZURhdGFDbHVzdGVyPWguQ2xyU2hhcGVNZW1vcnk9aC5DbHJTaGFwZUNQVT1oLkNsclNoYXBlQnVpbGRp''@;'; put 'put ''bmc9aC5DbHJTaGFwZUFwcGxpY2F0aW9ucz1oLkNsclNoYXBlQ2x1c3Rlcj1oLkNsclNoYXBlU3RvcmFnZT1oLkNsclNoYXBlSG9zdD1oLkNsclNoYXBlRGFzaGJvYXJkPWguQ2xyU2hhcGVNb3VzZT1oLkNsclNoYXBlS2V5Ym9hcmQ9aC5DbHJTaGFwZURldmljZXM9aC5DbHJTaGFwZUJhY2t1''@;'; put 'put ''cD1oLkNsclNoYXBlQmFja3VwUmVzdG9yZT1oLkNsclNoYXBlSGFyZERpc2s9aC5DbHJTaGFwZVJhY2tTZXJ2ZXI9aC5DbHJTaGFwZVdpZmk9aC5DbHJTaGFwZUJ1bmRsZT1oLkNsclNoYXBlQmxvY2tzR3JvdXA9aC5DbHJTaGFwZUJsb2NrPWguQ2xyU2hhcGVMYXllcnM9aC5DbHJTaGFwZVVu''@;'; put 'put ''aW5zdGFsbD1oLkNsclNoYXBlSW5zdGFsbD1oLkNsclNoYXBlTm9XaWZpPWguQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9aC5DbHJTaGFwZVJ1bGVyUGVuY2lsPXZvaWQgMCxoLlRlY2hub2xvZ3lTaGFwZXM9aC5DbHJTaGFwZUZpbGVTaGFyZTI9aC5DbHJTaGFwZUNpQ2Q9aC5DbHJTaGFwZUFuaW1h''@;'; put 'put ''dGlvbj1oLkNsclNoYXBlVGFwZURyaXZlPWguQ2xyU2hhcGVNZWRpYUNoYW5nZXI9aC5DbHJDb250cm9sTHVuPWguQ2xyU2hhcGVQb2Q9aC5DbHJTaGFwZU5vZGU9aC5DbHJTaGFwZU5hbWVzcGFjZT1oLkNsclNoYXBlTm9kZXM9aC5DbHJTaGFwZU5vZGVHcm91cD1oLkNsclNoYXBlU3RvcmFn''@;'; put 'put ''ZUFkYXB0ZXI9aC5DbHJTaGFwZUhvc3RHcm91cD1oLkNsclNoYXBlU3F1aWQ9aC5DbHJTaGFwZUNhcGFjaXRvcj1oLkNsclNoYXBlUmVzaXN0b3I9aC5DbHJTaGFwZUluZHVjdG9yPWguQ2xyU2hhcGVSYWRhcj1oLkNsclNoYXBlVXNiPWguQ2xyU2hhcGVRckNvZGU9aC5DbHJTaGFwZUZpbGVT''@;'; put 'put ''aGFyZT1oLkNsclNoYXBlQ29udGFpbmVyVm9sdW1lPWguQ2xyU2hhcGVDb250YWluZXI9aC5DbHJTaGFwZUNkRHZkPWguQ2xyU2hhcGVCYXJDb2RlPWguQ2xyU2hhcGVBdG9tPWguQ2xyU2hhcGVBc3NpZ25Vc2VyPWguQ2xyU2hhcGVQcm9jZXNzT25WTT1oLkNsclNoYXBlQmx1ZXRvb3RoT2Zm''@;'; put 'put ''PWguQ2xyU2hhcGVCbHVldG9vdGg9aC5DbHJTaGFwZVNTRD1oLkNsclNoYXBlTlZNZT1oLkNsclNoYXBlSGFyZERyaXZlRGlza3M9aC5DbHJTaGFwZUhhcmREcml2ZT1oLkNsclNoYXBlQWRtaW5pc3RyYXRvcj1oLkNsclNoYXBlRmxhc2s9aC5DbHJTaGFwZUhlbGl4PWguQ2xyU2hhcGVEZXBs''@;'; put 'put ''b3k9aC5DbHJTaGFwZUNsb3VkVHJhZmZpYz1oLkNsclNoYXBlQ2xvdWRTY2FsZT1oLkNsclNoYXBlQ2xvdWROZXR3b3JrPWguQ2xyU2hhcGVVbmxpbms9aC5DbHJTaGFwZUxpbms9aC5DbHJTaGFwZURpc2Nvbm5lY3Q9aC5DbHJTaGFwZUNvbm5lY3Q9aC5DbHJTaGFwZVVuYXJjaGl2ZT1oLkNs''@;'; put 'put ''clNoYXBlQXJjaGl2ZT1oLkNsclNoYXBlQ2VydGlmaWNhdGU9dm9pZCAwO3ZhciBjPXkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxzPXkoCi8qISAuLi91dGlscy9zdmctdGFnLWdl''@;'; put 'put ''bmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtoLkNsclNoYXBlUnVsZXJQZW5jaWw9KDAscy5jbHJJY29uU1ZHKSgnPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHBvaW50cz0iOSAx''@;'; put 'put ''Ny40MSA5IDI3IDE4LjU5IDI3IDE2LjU5IDI1IDExIDI1IDExIDE5LjQxIDkgMTcuNDEiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzQuODcsMzIuMjksMzIsMjkuMzhWMzJINFYyNy44NUg2di0xLjZINFYxOS42''@;'; put 'put ''SDZWMThINFYxMS42SDZWMTBINFY0LjQxTDE5Ljk0LDIwLjI2VjE3LjQ0TDMuNzEsMS4yOUExLDEsMCwwLDAsMiwyVjMzYTEsMSwwLDAsMCwxLDFIMzQuMTZhMSwxLDAsMCwwLC43MS0xLjcxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIGQ9Ik0yNCwzMGg0YTIsMiwwLDAsMCwyLTJWOC43TDI3LjcsNC40N2EyLDIsMCwwLDAtMS43Ni0xaDBhMiwyLDAsMCwwLTEuNzYsMS4wOEwyMiw4LjcyVjI4QTIsMiwwLDAsMCwyNCwzMFpNMjQsOS4ybDEuOTQtMy43N0wyOCw5LjIxVjI0SDI0Wm0wLDE2LjQzaDR2Mi40NEgy''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC44NywzMi4yMSwzMCwyNy4zN1Y4Ljc1TDI3LjcsNC41MmEyLDIsMCwwLDAtMy41NCwwTDIyLDguNzZWMTkuNDFMMy43MSwxLjIxQTEsMSwwLDAsMCwyLDEuOTJWMTBI''@;'; put 'put ''NC4xN3YxLjZIMlYxOEg0LjE3djEuNkgydjYuNjVINC4xN3YxLjZIMnY1LjA3YTEsMSwwLDAsMCwxLDFIMzQuMTZhMSwxLDAsMCwwLC43MS0xLjcxWk0xMCwyNlYxNi45NEwxOS4wNywyNlptMTgsMi4xMUgyNFYyNS42OGg0Wm0wLTRIMjRWOS4yNWwxLjk0LTMuNzdMMjgsOS4yNloiLz5cbicp''@;'; put 'put ''LGguQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy43MywzNS40NGE0LjcyLDQuNzIsMCwwLDEtMS0uMTEsMzMuOTEsMzMuOTEsMCwwLDEtMTYuNjItOC43NSwzMi43MSwz''@;'; put 'put ''Mi43MSwwLDAsMS05LTE2LjI1QTQuNTgsNC41OCwwLDAsMSwyLjQ2LDYuMDVsNC0zLjg1QTIsMiwwLDAsMSw4LDEuNjZhMiwyLDAsMCwxLDEuNDUuODdsNSw3LjM5YTEuNiwxLjYsMCwwLDEtLjExLDEuOWwtMi41MSwzYTE4Ljk0LDE4Ljk0LDAsMCwwLDQuMTcsNS44OWgwYTE5LjI2LDE5LjI2''@;'; put 'put ''LDAsMCwwLDYuMDcsNC4wOWwzLjExLTIuNDdhMS42NCwxLjY0LDAsMCwxLDEuODYtLjEybDcuNTUsNC44OEEyLDIsMCwwLDEsMzUsMzAuMmwtMy45LDMuODZBNC43NCw0Ljc0LDAsMCwxLDI3LjczLDM1LjQ0Wk03Ljg0LDMuNjRsLTQsMy44NWEyLjU0LDIuNTQsMCwwLDAtLjc1LDIuNCwzMC43''@;'; put 'put ''LDMwLjcsMCwwLDAsOC40MSwxNS4yNiwzMS45LDMxLjksMCwwLDAsMTUuNjQsOC4yMywyLjc1LDIuNzUsMCwwLDAsMi41LS43NGwzLjktMy44Ni03LjI5LTQuNzEtMy4zNCwyLjY2YTEsMSwwLDAsMS0uOTIuMTcsMjAuMDYsMjAuMDYsMCwwLDEtNy4zNi00Ljc1aDBhMTkuNDksMTkuNDksMCww''@;'; put 'put ''LDEtNC44Ny03LjJBMSwxLDAsMCwxLDEwLDE0bDIuNy0zLjIzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE1LjIyLDIwLjY0YTIwLjM3LDIwLjM3LDAsMCwwLDcuNCw0Ljc5bDMuNzctM2EuNjcuNjcsMCwwLDEsLjc2''@;'; put 'put ''LDBsNyw0LjUxYTIsMiwwLDAsMSwuMzMsMy4xOGwtMy4yOCwzLjI0YTQsNCwwLDAsMS0zLjYzLDEuMDcsMzUuMDksMzUuMDksMCwwLDEtMTcuMTUtOUEzMy43OSwzMy43OSwwLDAsMSwxLjE1LDguNmEzLjc4LDMuNzgsMCwwLDEsMS4xLTMuNTVsMy40LTMuMjhhMiwyLDAsMCwxLDMuMTIuMzJM''@;'; put 'put ''MTMuNDMsOWEuNjMuNjMsMCwwLDEsMCwuNzVsLTMuMDcsMy42OUExOS43NSwxOS43NSwwLDAsMCwxNS4yMiwyMC42NFoiLz5cbicpLGguQ2xyU2hhcGVOb1dpZmk9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0x''@;'; put 'put ''OCwyNC40MmE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwyNC40MlptMCw2YTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDE4LDMwLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNi4yMSwyMS44NWExLDEs''@;'; put 'put ''MCwwLDAtLjIzLTEuNCwxMy41NiwxMy41NiwwLDAsMC01LTIuMjNsMy44NywzLjg3QTEsMSwwLDAsMCwyNi4yMSwyMS44NVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTAuNzJhMjAuODgsMjAuODgs''@;'; put 'put ''MCwwLDAtNC4xNi40M2wxLjc0LDEuNzRhMTksMTksMCwwLDEsMi40Mi0uMTdBMTguNzYsMTguNzYsMCwwLDEsMjguNjQsMTZhMSwxLDAsMCwwLDEuMTItMS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzMuNTUsOC4yQTI4LjExLDI4LjExLDAsMCwwLDguMTEsNS4zNkw5LjY5LDYuOTNBMjYsMjYsMCwwLDEsMzIuNDUsOS44N2ExLDEsMCwwLDAsMS4xLTEuNjdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNSIgZD0iTTEuODQsNC43NSw0LjI3LDcuMThjLS42Mi4zNC0xLjIzLjctMS44MywxLjFBMSwxLDAsMSwwLDMuNTYsOS45NEM0LjI2LDkuNDcsNSw5LDUuNzQsOC42NWwzLjg3LDMuODdBMjAuNTksMjAuNTksMCwwLDAsNi4yMywxNC40LDEsMSwwLDAsMCw3LjM2LDE2''@;'; put 'put ''YTE4LjgyLDE4LjgyLDAsMCwxLDMuNzctMmw0LjE2LDQuMTZBMTMuNTEsMTMuNTEsMCwwLDAsMTAsMjAuNTVhMSwxLDAsMCwwLDEuMTgsMS42MUExMS41MiwxMS41MiwwLDAsMSwxNywyMGwxMC44LDEwLjgsMS40MS0xLjQxLTI2LTI2WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBjeD0iMTgiIGN5PSIyOS41NCIgcj0iMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5LjE4LDE3LjcxbC4xMS0uMTdhMS41MSwxLjUxLDAsMCwwLS40Ny0yLjFB''@;'; put 'put ''MjAuNTcsMjAuNTcsMCwwLDAsMTgsMTIuMzdjLS41NiwwLTEuMTEsMC0xLjY1LjA3bDMuMjEsMy4yMWExNy40MSwxNy40MSwwLDAsMSw3LjYsMi41MkExLjQ5LDEuNDksMCwwLDAsMjkuMTgsMTcuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0zIiBkPSJNMzIuNzYsOS4zOEEyNy45LDI3LjksMCwwLDAsMTAuMTgsNi4yN0wxMi44MSw4LjlBMjQuNjgsMjQuNjgsMCwwLDEsMzEuMSwxMi4xMmExLjQ5LDEuNDksMCwwLDAsMi0uNDZsLjExLS4xN0ExLjUxLDEuNTEsMCwwLDAsMzIuNzYsOS4zOFoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0zLDQuNzVsMy4xLDMuMUEyNy4yOCwyNy4yOCwwLDAsMCwzLjE4LDkuNDJhMS41MSwxLjUxLDAsMCwwLS40OCwyLjExbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMjQuNjksMjQuNjksMCwwLDEs''@;'; put 'put ''My42Ny0xLjlsMy4xNCwzLjE0YTIwLjYzLDIwLjYzLDAsMCwwLTQuNTMsMi4wOSwxLjUxLDEuNTEsMCwwLDAtLjQ2LDIuMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2QTE3LjQ2LDE3LjQ2LDAsMCwxLDE0LjI1LDE2bDMuNiwzLjZhMTMuMzksMTMuMzksMCwwLDAtNi43OSwxLjkzLDEu''@;'; put 'put ''NSwxLjUsMCwwLDAtLjQ2LDIuMDlsLjEuMTZhMS41MiwxLjUyLDAsMCwwLDIuMDYuNDQsMTAuMiwxMC4yLDAsMCwxLDktLjdMMjksMzAuNzVsMS40MS0xLjQxLTI2LTI2WiIvPlxuJyksaC5DbHJTaGFwZUluc3RhbGw9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAsMCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAu''@;'; put 'put ''OTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTAuMywxOC44N2w3LDYuODlhMSwxLDAsMCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1''@;'; put 'put ''bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAs''@;'; put 'put ''MC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAsMC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz48cGF0aCBkPSJNMzEsMTMuNDNWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjky''@;'; put 'put ''QTIsMiwwLDAsMCwzMywzMFYxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAsMC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAs''@;'; put 'put ''MC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1''@;'; put 'put ''LjA4QTIsMiwwLDAsMCwzLDEwVjMwYTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0i''@;'; put 'put ''TTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuJyksaC5DbHJTaGFwZVVuaW5zdGFsbD0oMCxzLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDlsNS4zLDUuMjNBMSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4''@;'; put 'put ''bC01LjMtNS4yM2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAs''@;'; put 'put ''MCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAuOTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDlsNS4zLDUuMjNBMSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4bC01LjMtNS4y''@;'; put 'put ''M2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzEsMTMuNDNWMzBINVYx''@;'; put 'put ''MEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMS4yOSwyNi43MmEx''@;'; put 'put ''LDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43LDI1LjNsLTUuMjgtNS4yMSw0Ljc1LTQuNjlIMjIuMjNhMy42NSwzLjY1LDAsMCwxLS44MS0uMUwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEs''@;'; put 'put ''MSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1LjA4QTIsMiwwLDAsMCwzLDEwVjMw''@;'; put 'put ''YTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuJyksaC5DbHJTaGFwZUxheWVycz0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEsMSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDIwLjI1Wk01LjM0LDEyLjE2''@;'; put 'put ''bDEyLjY2LDYsMTIuNjYtNkwxOCw2LjE4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyNi4xNmExLDEsMCwwLDEtLjQzLS4xTDIuNTcsMTlhMSwxLDAsMSwxLC44NS0xLjgxTDE4LDI0LjA2bDE0LjU3LTYu''@;'; put 'put ''ODlBMSwxLDAsMSwxLDMzLjQzLDE5bC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyNi4xNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzIuMDdhMSwxLDAsMCwxLS40My0uMWwtMTUtNy4wOWExLDEsMCwwLDEs''@;'; put 'put ''Ljg1LTEuODFMMTgsMzBsMTQuNTctNi44OWExLDEsMCwxLDEsLjg1LDEuODFMMTguNDMsMzJBMSwxLDAsMCwxLDE4LDMyLjA3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFs''@;'; put 'put ''LTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEsMSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDIwLjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIg''@;'; put 'put ''ZD0iTTE4LDI2LjE2YTEsMSwwLDAsMS0uNDMtLjFMMi41NywxOWExLDEsMCwxLDEsLjg1LTEuODFMMTgsMjQuMDZsMTQuNTctNi44OUExLDEsMCwxLDEsMzMuNDMsMTlsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDI2LjE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE4LDMyLjA3YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLC44NS0xLjgxTDE4LDMwbDE0LjU3LTYuODlhMSwxLDAsMSwxLC44NSwxLjgxTDE4LjQzLDMyQTEsMSwwLDAsMSwxOCwzMi4wN1oiLz5cbicpLGguQ2xyU2hhcGVCbG9j''@;'; put 'put ''az0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDIsOS4wOWwtMTMtNmExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMEExLDEsMCwwLDAsMzEuNDIs''@;'; put 'put ''OS4wOVpNMTgsNS4xLDI4LjYxLDEwLDE4LDE0LjksNy4zOSwxMFpNNiwxMS41NmwxMSw1LjA4djE0LjhMNiwyNi4zNlpNMTksMzEuNDRWMTYuNjRsMTEtNS4wOHYxNC44WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMzAsMTUuNTNWMjYuMzZMMTksMzEuNDRWMTYuNjRsMi41Ny0xLjE5YTMuNjcsMy42NywwLDAsMS0yLjExLTEuMjJMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWwzLjA4LDEuNDIsMS0xLjc0TDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSww''@;'; put 'put ''LDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTUuNTNaTTE3LDMxLjQ0LDYsMjYuMzZWMTEuNTZsMTEsNS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTI2Ljg3LDEuMjZsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTJIMzMuN2ExLjI4LDEuMjgsMCwwLDAsMS4xLTEuOTJMMjkuMDgsMS4yNkExLjI4LDEuMjgsMCwwLDAsMjYuODcsMS4yNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMjYuMzZMMTksMzEuNDRWMTYuNjRsOC4wOC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWw0LjYxLDIuMTNBNy4x''@;'; put 'put ''Miw3LjEyLDAsMCwxLDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4yMkE3LjM3LDcuMzcsMCww''@;'; put 'put ''LDEsMzAsMTMuNVpNMTcsMzEuNDQsNiwyNi4zNlYxMS41NmwxMSw1LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40Miw5LjA5bC0xMy02YTEsMSwwLDAsMC0uODQsMGwtMTMsNkExLDEsMCwwLDAsNCwxMFYyN2ExLDEsMCwwLDAsLjU4''@;'; put 'put ''LjkxbDEzLDZhMSwxLDAsMCwwLC44NCwwbDEzLTZBMSwxLDAsMCwwLDMyLDI3VjEwQTEsMSwwLDAsMCwzMS40Miw5LjA5Wk0xOCwxNC45LDcuMzksMTAsMTgsNS4xLDI4LjYxLDEwWk0zMCwyNi4zNiwxOSwzMS40NFYxNi42NGwxMS01LjA4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS4zOHYxMUwxOSwzMS40NFYxNi42NGwyLjc5LTEuMjlhMy42OCwzLjY4LDAsMCwxLTIuMjUtMS4xNkwxOCwxNC45LDcuMzksMTAsMTgsNS4xbDMsMS4zOSwxLTEuNzVMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBs''@;'; put 'put ''LTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMjYuODUsMS4xMiwyMS4xMywxMWExLjI3LDEuMjcsMCwwLDAsMS4xLDEuOTFIMzMuNjhBMS4yNywxLjI3LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTJBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMjYuMzZMMTksMzEuNDRWMTYuNjRsOC4wOC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWw0LjYxLDIuMTNBNy4xMiw3LjEyLDAsMCwx''@;'; put 'put ''LDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRn''@;'; put 'put ''ZSIgLz4nKSxoLkNsclNoYXBlQmxvY2tzR3JvdXA9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0ExLDEsMCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRMMi42''@;'; put 'put ''OCwxOC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43''@;'; put 'put ''NlptLTIuODEuOTFMMjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzVaTTE4LjEsNC4wOGw1LjExLDIuMzVMMTguMSw4Ljc4LDEzLDYuNDNaTTEwLjYsMTcuMzFsNS4xMSwyLjM1TDEwLjYsMjIsNS40OSwxOS42N1ptNi41LDExLjQ5LTYuNSwzLTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSww''@;'; put 'put ''LDAsMCwxMSwyNGw2LjA4LTIuOFpNMTEuNiwxNS41N2gwVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCwwTDI0LjYsOHY3LjU4aDBsLTYuNSwzWk0zMi4xMSwyOC44MWwtNi41LDMtNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdoLTJ2MGwtNi41LDMtNi41LTNWOGw2LjA4LDIuOGExLDEsMCwwLDAsLjg0LDBsLjI0LS4xMWE0LjE3LDQuMTcsMCwwLDEsLjI5LS42NWwxLjMzLTIuMzEtMi4yOCwxTDEzLDYu''@;'; put 'put ''NDNsNS4xLTIuMzUsMy40NywxLjYsMS0xLjczTDE4LjUsMi4wOGExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgt''@;'; put 'put ''My4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm0wLDE0LjQ5LTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAs''@;'; put 'put ''MCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptMTUtMTQuNDgsNS4xMSwyLjM1TDI1LjYxLDIyLDIwLjUsMTkuNjdabTAsMTQuNDktNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbjxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTguNzYsMjYuNiwxNS41N1YxMi43YTcuNTgsNy41OCwwLDAsMS0yLTEuNTF2NC4zOWwtNi41LDMtNi41LTNWOGw2LjA4LDIuOGExLDEsMCww''@;'; put 'put ''LDAsLjg0LDBMMjMsOC43MmE3LjA1LDcuMDUsMCwwLDEtLjQ3LTJsLTQuNDcsMkwxMyw2LjQzbDUuMS0yLjM1LDQuNDQsMnMwLS4wNiwwLS4wOWE3LjU1LDcuNTUsMCwwLDEsLjI3LTJsLTQuMy0yYTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0bC02Ljks''@;'; put 'put ''My4xOGExLDEsMCwwLDAtLjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMzLjUzLDE4Ljc2Wk0xMC42''@;'; put 'put ''LDE3LjMxbDUuMTEsMi4zNUwxMC42LDIyLDUuNDksMTkuNjdabTAsMTQuNDktNi41LTNWMjEuMjNMMTAuMTgsMjRBMSwxLDAsMCwwLDExLDI0bDYuMDgtMi44LDAsNy42Wm0xNS0xNC40OCw1LjExLDIuMzVMMjUuNjEsMjIsMjAuNSwxOS42N1ptMCwxNC40OS02LjUxLTNWMjEuMjJMMjUuMTks''@;'; put 'put ''MjRBMSwxLDAsMCwwLDI2LDI0bDYuMDgtMi44LDAsNy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbjxjaXJjbGUgY3g9IjMwLjAzIiBjeT0iNi4wMyIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0ExLDEsMCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRMMi42OCwx''@;'; put 'put ''OC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpN''@;'; put 'put ''MjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzUsNS4xMSwyLjM1Wm0tMS02LjQ0LTYuNDQsM1YxMC44N2ExLDEsMCwwLDAsLjM1LS4wOEwyNC42LDh2Ny41OFpNMTguMSw0LjA4bDUuMTEsMi4zNUwxOC4xLDguNzgsMTMsNi40M1pNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5''@;'; put 'put ''LDE5LjY3Wm02LjUsMTEuNDktNi41LDNoMFYyNC4xMWgwQTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOFptMTUsMC02LjQ2LDNWMjQuMTFBMSwxLDAsMCwwLDI2LDI0bDYuMDgtMi44WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0zMy41Mywx''@;'; put 'put ''OC43NiwyNi42LDE1LjU3djBoLTJ2MGwtNi40MywzVjEwLjg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4bC4xNC0uMDZBMy4yMywzLjIzLDAsMCwxLDE5LDEwbDEuMjgtMi4yMi0yLjE0LDFMMTMsNi40M2w1LjEtMi4zNSwzLjM5LDEuNTYsMS0xLjczLTQtMS44M2ExLDEsMCwwLDAtLjg0LDBs''@;'; put 'put ''LTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgt''@;'; put 'put ''LjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTI4LC45MSw1LjExLTIuMzYsNS4xMSwyLjM1TDEwLjYsMjJaTTEwLjYsMzEuOFYyNC4xMUExLjA4LDEuMDgsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTkuOS0xMi4xMyw1LjExLTIuMzUsNS4xMSwyLjM1TDI1LjYxLDIyWk0y''@;'; put 'put ''NS42NCwzMS44VjI0LjExQS44OS44OSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG48cGF0aCBkPSJNMjYuODksMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4y''@;'; put 'put ''NywxM0gzMy43MmExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMSwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44OSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbjxwYXRoIGQ9Ik0zMy41Mywx''@;'; put 'put ''OC43NiwyNi42LDE1LjU3VjEyLjY5YTcuNjYsNy42NiwwLDAsMS0yLTEuNDd2NC4zNGwtNi40MywzVjEwLjg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4TDIzLDguNzNhNy42NSw3LjY1LDAsMCwxLS40OC0ybC00LjQyLDJMMTMsNi40M2w1LjEtMi4zNSw0LjM4LDJWNmE3LjU1LDcuNTUsMCww''@;'; put 'put ''LDEsLjI3LTJMMTguNSwyLjA4YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0bC02LjksMy4xOGExLDEsMCwwLDAtLjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEs''@;'; put 'put ''MCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMzLjUzLDE4Ljc2Wm0tMjgsLjkxLDUuMTEtMi4zNiw1LjExLDIuMzVMMTAuNiwyMlpNMTAuNiwzMS44VjI0LjExQTEuMDgsMS4wOCwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptOS45LTEy''@;'; put 'put ''LjEzLDUuMTEtMi4zNSw1LjExLDIuMzVMMjUuNjEsMjJaTTI1LjY0LDMxLjhWMjQuMTFBLjg5Ljg5LDAsMCwwLDI2LDI0bDYuMDgtMi44LDAsNy42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG48Y2lyY2xlIGN4PSIyOS45OCIg''@;'; put 'put ''Y3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGguQ2xyU2hhcGVCdW5kbGU9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGExLDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1''@;'; put 'put ''Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFaTTUsMTIuMTMsMTYsMTcuNFYzMS40Nkw1LDI2LjJaTTE4LDMxLjQ1VjE3LjM2bDEzLTYuMjl2MTQuMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGExLDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCww''@;'; put 'put ''LC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFabTEsMTUuOFYxNy4zNmwxMy02LjI5djE0LjFaIi8+XG4nKSxoLkNsclNoYXBlV2lmaT0o''@;'; put 'put ''MCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjU1LDguMmEyOC4xLDI4LjEsMCwwLDAtMzEuMTEuMDhBMSwxLDAsMSwwLDMuNTYsOS45NGEyNi4xMSwyNi4xMSwwLDAsMSwyOC44OS0uMDcsMSwxLDAsMCwwLDEu''@;'; put 'put ''MS0xLjY3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOC4wNSwxMC43MkEyMC43NCwyMC43NCwwLDAsMCw2LjIzLDE0LjQsMSwxLDAsMCwwLDcuMzYsMTYsMTguODUsMTguODUsMCwwLDEsMjguNjQsMTZhMSwx''@;'; put 'put ''LDAsMCwwLDEuMTItMS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTcuOWExMy41MSwxMy41MSwwLDAsMC04LDIuNjQsMSwxLDAsMCwwLDEu''@;'; put 'put ''MTgsMS42MSwxMS41NiwxMS41NiwwLDAsMSwxMy42Mi0uMDhBMSwxLDAsMSwwLDI2LDIwLjQ2LDEzLjUyLDEzLjUyLDAsMCwwLDE4LjA1LDE3LjlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LDI0LjQyYTQs''@;'; put 'put ''NCwwLDEsMCw0LDRBNCw0LDAsMCwwLDE4LDI0LjQyWm0wLDZhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMzAuNDJaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGN4PSIxOCIgY3k9IjI5LjU0IiByPSIzIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIuNzYsOS4zOGEyNy44NywyNy44NywwLDAsMC0yOS41NywwLDEuNTEsMS41MSwwLDAsMC0uNDgsMi4xMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDI0LjY4LDI0LjY4LDAsMCwx''@;'; put 'put ''LDI2LjI2LDAsMS40OSwxLjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDMyLjc2LDkuMzhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjguODIsMTUuNDRhMjAuNTksMjAuNTksMCwwLDAtMjEu''@;'; put 'put ''NywwLDEuNTEsMS41MSwwLDAsMC0uNDYsMi4xbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMTcuNCwxNy40LDAsMCwxLDE4LjM2LDAsMS40OSwxLjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDI4LjgyLDE1LjQ0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTI0Ljg4LDIxLjQ5YTEzLjQxLDEzLjQxLDAsMCwwLTEzLjgyLDAsMS41LDEuNSwwLDAsMC0uNDYsMi4wOWwuMS4xNmExLjUyLDEuNTIsMCwwLDAsMi4wNi40NCwxMC4yNywxMC4yNywwLDAsMSwxMC40MiwwLDEuNTIsMS41''@;'; put 'put ''MiwwLDAsMCwyLjA2LS40NWwuMS0uMTZBMS40OSwxLjQ5LDAsMCwwLDI0Ljg4LDIxLjQ5WiIvPlxuJyksaC5DbHJTaGFwZVJhY2tTZXJ2ZXI9KDAscy5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQi''@;'; put 'put ''IHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMTguNjQsMTFBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxMHYyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIGQ9Ik0zMy42''@;'; put 'put ''OCwxNS40SDMyVjIxSDRWMTVIMjAuNThBMy42NywzLjY3LDAsMCwxLDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDRWN0gyMC43MWwxLjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNNCwyOVYyM0gzMnY2WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu''@;'; put 'put ''NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSI2IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIHg9IjYiIHk9IjI1IiB3aWR0aD0iMiIgaGVp''@;'; put 'put ''Z2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTEwLDExSDI0di0uNTFBNy40OCw3LjQ4LDAsMCwxLDIzLjEzLDlIMTBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQi''@;'; put 'put ''IGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjY4LS41SDRWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMw''@;'; put 'put ''LDEzLjVaTTQsMTVIMzJ2Nkg0Wk00LDI5VjIzSDMydjZaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxMCIgeT0iOSIgd2lkdGg9''@;'; put 'put ''IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI2IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiIHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCww''@;'; put 'put ''LDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsN0gzMnY2SDRabTAsOEgzMnY2SDRaTTQsMjlWMjNIMzJ2NloiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0x''@;'; put 'put ''OSw5Ljg5LDE5LjU2LDlIMTBWN0gyMC43MWwxLjczLTNINEEyLDIsMCwwLDAsMiw2djZIMTguNTdBMy42NywzLjY3LDAsMCwxLDE5LDkuODlaTTgsOUg2VjdIOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFs''@;'; put 'put ''ZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOS4zNSwxNEgydjhIMzRWMTUuMzhaTTgsMTlINlYxN0g4Wm0xNiwwSDEwVjE3SDI0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDE0djhIMzRWMTRabTYsNUg2VjE3SDhabTE2LDBIMTBWMTdIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTIt''@;'; put 'put ''LWJhZGdlZCIgZD0iTTIsMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0SDJabTgtM0gyNHYySDEwWk02LDI3SDh2Mkg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0yMy4x''@;'; put 'put ''Myw5SDEwVjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZ2NkgyNS41MUE3LjUyLDcuNTIsMCwwLDEsMjMuMTMsOVpNOCw5SDZWN0g4WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTIsMjJIMzRWMTRIMlptOC01SDI0djJIMTBaTTYsMTdIOHYy''@;'; put 'put ''SDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZ2NkgzNFY2QTIsMiwwLDAsMCwzMiw0Wk04LDlINlY3SDhaTTI0LDlIMTBWN0gyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbicpLGguQ2xyU2hhcGVIYXJkRGlzaz0oMCxzLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjAiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl''@;'; put 'put ''ZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTM0LDIxLjA4bC0xLjQtNS42OEgzMC41MWwxLjQ5LDZWMjlINFYyMS40''@;'; put 'put ''NEw3LjA2LDloMTIuNWwxLjE1LTJINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiB4PSI2IiB5PSIyMCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0z''@;'; put 'put ''NCwyMS4wOCwzMiwxMy4yMWE3LjQ5LDcuNDksMCwwLDEtMiwuMjlsMiw3Ljk0VjI5SDRWMjEuNDRMNy4wNiw5SDIzLjEzYTcuNDUsNy40NSwwLDAsMS0uNTUtMkg3LjA2QTIsMiwwLDAsMCw1LjEzLDguNDdMMiwyMS4wOGExLDEsMCwwLDAsMCwuMjRWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIs''@;'; put 'put ''MCwwLDAsMi0yVjIxLjMxQTEsMSwwLDAsMCwzNCwyMS4wOFoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDIxLjA4LDMwLjg2LDguNDNBMiwyLDAsMCwwLDI4Ljk0LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwy''@;'; put 'put ''LDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaTTQsMjlWMjEuNDRMNy4wNiw5SDI4LjkzTDMyLDIxLjQ0VjI5WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjYiIHk9IjIwIiB3aWR0aD0iMjQiIGhl''@;'; put 'put ''aWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIsMjJ2N2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjJabTI4LDVIMjZWMjVoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0z''@;'; put 'put ''Mi41OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIwLjcxLDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjJ2N2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjJabTI4LDVIMjZWMjVoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjFBNy40Nyw3LjQ3LDAsMCwxLDIyLjU3LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAuODYsOC40M0EyLDIsMCwwLDAsMjguOTQsN0g3LjA2QTIsMiwwLDAsMCw1LjEzLDguNDdMMi4yOSwy''@;'; put 'put ''MEgzMy43MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yLDIydjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4nKSxoLkNsclNoYXBlQmFja3VwUmVzdG9yZT0oMCxz''@;'; put 'put ''LmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTEzLDkuOTIsMTcs''@;'; put 'put ''NlYxOWExLDEsMCwxLDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzEu''@;'; put 'put ''NTgsMTUuNEgyOS40NmMxLDIuODUsMi4zMSw2LjM3LDIuNTQsNy4wOFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAs''@;'; put 'put ''Mi0yVjIyLjMzQzM0LDIyLjEyLDM0LDIyLDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''IiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMTlhMSwxLDAsMSwwLDIsMFY2bDQsMy45NWExLDEsMCwwLDAsLjcxLjI5bC4xMSwwYTcuNDYsNy40NiwwLDAsMS0xLjI1LTMuNTJMMTgsMi4x''@;'; put 'put ''NiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1QTcuNDYsNy40NiwwLDAs''@;'; put 'put ''MSwyNS41MSwxMkgyMXYyaDcuOTVDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJh''@;'; put 'put ''MiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg3LDEzLjQ1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIy''@;'; put 'put ''NiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTMsOS45MiwxNyw2VjE5YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVBMSwxLDAsMSwwLDI0LjM4LDguNUwxOCwyLjE2''@;'; put 'put ''LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDIxdjJoNy45NUMzMCwxNi45NCwzMS43MiwyMS42''@;'; put 'put ''NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODQs''@;'; put 'put ''MTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNUgyNlYyN2g0WiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOGExLDEsMCwxLDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0zMS41OCwxNS40SDIyLjIzQTMuNjIsMy42MiwwLDAsMSwyMSwxNS4xNlYxOGEzLDMsMCwxLDEtNiwwVjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYs''@;'; put 'put ''MTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDMzLjkzQzMzLjc5LDIxLjQ5LDMzLjI4LDIwLjA3LDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYu''@;'; put 'put ''ODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDVIMjZWMjdoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJN''@;'; put 'put ''MTMsOS45MiwxNyw2VjE4YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVhMSwxLDAsMCwwLC43MS4yOWwuMTEsMGE3LjQ2LDcuNDYsMCwwLDEtMS4yNS0zLjUyTDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1QTcuNDYsNy40NiwwLDAsMSwyNS41MSwxMkgyMXY2YTMsMywwLDEsMS02LDBWMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwy''@;'; put 'put ''LjI0LDIxLjQzLDIuMDcsMjJIMzMuOTNDMzMuNzcsMjEuNDMsMzMuMTUsMTkuNywzMC44NywxMy40NVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYi''@;'; put 'put ''IHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yLDI0djZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw1SDI2VjI3aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDIxdjZhMywzLDAsMSwxLTYsMFYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgzMy45M0MzMy43NywyMS40Mywz''@;'; put 'put ''My4xNCwxOS42OSwzMC44NCwxMy4zN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMyw5LjkyLDE3LDZWMThhMSwxLDAsMSwwLDIsMFY2bDQsMy45NUExLDEsMCwxLDAsMjQuMzgsOC41TDE4LDIuMTYsMTEuNjEsOC41''@;'; put 'put ''QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuJyksaC5DbHJTaGFwZUJhY2t1cD0oMCxzLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTE4LDE5Ljg0bDQuNDctNC40NGgtLjIzYTMuNjcsMy42NywwLDAsMS0yLS42MUwxOSwxNlY0YTEsMSwwLDEsMC0yLDBWMTZsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0zMS41OCwxNS40SDI5LjQ2YzEsMi44NSwyLjMxLDYuMzcsMi41NCw3LjA4VjMwSDRWMjIuNDhDNC4yOCwyMS42NSw3LjA1LDE0LDcuMDUsMTRIOS41OGEzLDMsMCwwLDEtLjE0LTJINy4w''@;'; put 'put ''N2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMiwyMiwyLDIyLjEsMiwyMi4zM1YzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjIuMzNDMzQsMjIuMTIsMzQsMjIsMzEuNTgsMTUuNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4z''@;'; put 'put ''NUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTMwLjg3''@;'; put 'put ''LDEzLjQ1YTcuNTUsNy41NSwwLDAsMS0uODcuMDUsNy40Niw3LjQ2LDAsMCwxLTMuMzUtLjgsMywzLDAsMCwxLS4yNCwxLjNoMi41NEMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0y''@;'; put 'put ''SDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODcsMTMuNDVaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0i''@;'; put 'put ''MiIvPjxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiXG4gICAgICAgICAgICAgICAgZD0iTTMwLjg0LDEzLjM3QTEuOTQsMS45NCwwLDAsMCwyOC45Mywx''@;'; put 'put ''MkgyNi41NWEzLDMsMCwwLDEtLjE0LDJoMi41NEMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIu''@;'; put 'put ''MzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwx''@;'; put 'put ''LDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xNi41OCwyMS4yNiwxMC4y''@;'; put 'put ''LDE0LjkxQTMsMywwLDAsMSw5LjQ0LDEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDE3LjMzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxl''@;'; put 'put ''cnRlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xOC42NiwyMkgzMy45M2Mt''@;'; put 'put ''LjE1LS41MS0uNjUtMS45My0yLjM1LTYuNkgyNS4zbC01Ljg5LDUuODZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIiBkPSJNMTgsMTkuODRsNC40Ny00LjQ0aC0uMjNhMy42NCwzLjY0LDAsMCwx''@;'; put 'put ''LTItLjYxTDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4x''@;'; put 'put ''NCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTYuNTgsMjEuMjYsMTAuMiwxNC45MUEzLDMsMCwwLDEsOS40NCwxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgxNy4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC00LS1iYWRnZWQiIGQ9Ik0xOC42NiwyMkgzMy45M2MtLjE3LS41Ny0uNzktMi4zLTMuMDYtOC41NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1LDcuNDYsNy40NiwwLDAsMS0zLjM1LS44LDMsMywwLDAsMS0uODYsMi4yMWwtNi4zOCw2LjM1WiIvPlxuICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDE5Ljg0''@;'; put 'put ''bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOS40MSwyMS4yNmwtLjc0''@;'; put 'put ''Ljc0SDMzLjkzYy0uMTctLjU3LS43OS0yLjMxLTMuMDktOC42M0ExLjk0LDEuOTQsMCwwLDAsMjguOTMsMTJIMjYuNTVhMywzLDAsMCwxLS43NiwyLjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE2LjU4LDIxLjI2''@;'; put 'put ''LDEwLjIsMTQuOTFBMywzLDAsMCwxLDkuNDQsMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcsMjJIMTcuMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMiwy''@;'; put 'put ''NHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuJyksaC5DbHJTaGFwZURldmljZXM9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxM0gyNGEyLDIsMCww''@;'; put 'put ''LDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjE1QTIsMiwwLDAsMCwzMiwxM1ptMCwyVjI2SDI0VjE1Wk0yNCwzMFYyNy42aDhWMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIwLDIy''@;'; put 'put ''SDRWNkgyOHY1aDJWNmEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwySDIwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMCwyNkg5YTEsMSwwLDAsMCwwLDJIMjBaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsMTNIMjRhMiwyLDAsMCwwLTIsMlYzMGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYxNUEyLDIsMCwwLDAsMzIsMTNabTAsMlYyOEgyNFYxNVoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yOCw0SDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwyaDh2Mkg5LjMyQTEuMiwxLjIsMCwwLDAsOCwyN2ExLjIsMS4yLDAsMCwwLDEuMzIsMUgxOS45MnYtLjM3SDIwVjIySDRWNkgyOHY1aDJW''@;'; put 'put ''NkEyLDIsMCwwLDAsMjgsNFoiLz5cbicpLGguQ2xyU2hhcGVLZXlib2FyZD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCww''@;'; put 'put ''LDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCwxOEg0VjEwSDMyWiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTEiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMTUiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0''@;'; put 'put ''PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTkiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NiIgeD0iMjMiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgeD0iNyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiB4PSIxMSIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9''@;'; put 'put ''IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iMTUiIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MTEiIHg9IjE5IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIgeD0iMjciIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIHg9IjI3IiB5PSIyMiIgd2lkdGg9IjEuOTQi''@;'; put 'put ''IGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiB4PSI3IiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTE2IiB4PSIxMS4xMyIgeT0iMjIiIHdpZHRoPSIxMy43NSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCww''@;'; put 'put ''LDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk0xOSwxM2gydjJIMTlabTAsNGgydjJIMTlabS00LTRoMnYySDE1Wm0wLDRoMnYySDE1Wm0tNC00aDJ2MkgxMVpNOSwyNEg3VjIySDlabTAtNUg3VjE3SDlabTAtNEg3VjEzSDlabTIsMmgydjJIMTFabTEzLjg4LDdIMTEuMTNWMjJIMjQuODhaTTI1''@;'; put 'put ''LDE5SDIzVjE3aDJabTAtNEgyM1YxM2gyWm0zLjk0LDlIMjdWMjJoMS45NFpNMjksMTlIMjdWMTdoMlptMC00SDI3VjEzaDJaIi8+XG4nKSxoLkNsclNoYXBlTW91c2U9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9''@;'; put 'put ''Ik0xOCwzNEExMCwxMCwwLDAsMSw4LDI0VjEyYTEwLDEwLDAsMCwxLDIwLDBWMjRBMTAsMTAsMCwwLDEsMTgsMzRaTTE4LDRhOCw4LDAsMCwwLTgsOFYyNGE4LDgsMCwwLDAsMTYsMFYxMkE4LDgsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMTVhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMiwwdjRBMSwxLDAsMCwxLDE4LDE1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTAsMTAsMCwwLDAs''@;'; put 'put ''OCwxMlYyNGExMCwxMCwwLDAsMCwyMCwwVjEyQTEwLDEwLDAsMCwwLDE4LDJabTEuMywxMS40NGExLjMsMS4zLDAsMCwxLTIuNiwwVjEwYTEuMywxLjMsMCwwLDEsMi42LDBaIi8+XG4nKSxoLkNsclNoYXBlRGFzaGJvYXJkPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjUuMTgsMTIuMzJsLTUuOTEsNS44MWEzLDMsMCwxLDAsMS40MSwxLjQybDUuOTItNS44MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDQu''@;'; put 'put ''MjVBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDksMCwwLDAsMTgsNC4yNVptMTEuMzQsMjUuNUg2LjY2YTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEtNy44NEg3di0ySDMuNTVBMTQuNDEsMTQuNDEsMCwwLDEsNywxMS4yOWwyLjQ1LDIuNDUs''@;'; put 'put ''MS40MS0xLjQxTDguNDMsOS44N0ExNC40MSwxNC40MSwwLDAsMSwxNyw2LjI5djMuNWgyVjYuM2ExNC40NywxNC40NywwLDAsMSwxMy40LDEzLjYxSDI4LjkydjJoMy41M0ExNC40MywxNC40MywwLDAsMSwyOS4zNCwyOS43NVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNS44NSwxOC42OWEzLDMsMCwxLDAsNC44My44NWw1LjkyLTUuODEtMS40MS0xLjQxLTUuOTEsNS44MUEzLDMsMCwwLDAsMTUuODUsMTguNjlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuNTgsMTNhNy40NSw3LjQ1LDAsMCwxLTIuMDYuNDQsMTQuNCwxNC40LDAsMCwxLDEuOTMsNi40M0gyOC45MnYyaDMuNTNhMTQuNDMsMTQuNDMsMCwwLDEtMy4xMSw3Ljg0SDYuNjZh''@;'; put 'put ''MTQuNDMsMTQuNDMsMCwwLDEtMy4xMS03Ljg0SDd2LTJIMy41NUExNC40MSwxNC40MSwwLDAsMSw3LDExLjI5bDIuNDUsMi40NSwxLjQxLTEuNDFMOC40Myw5Ljg3QTE0LjQxLDE0LjQxLDAsMCwxLDE3LDYuMjl2My41aDJWNi4zQTE0LjQxLDE0LjQxLDAsMCwxLDIyLjU4LDdhNy41Miw3LjUy''@;'; put 'put ''LDAsMCwxLS4wOC0xLDcuNTIsNy41MiwwLDAsMSwuMDktMS4wOUExNi40OSwxNi40OSwwLDAsMCw1LjQsMzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40NSwxNi40NSwwLDAsMCwyLTE4LjM2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDQuMjVBMTYuNDksMTYuNDksMCwwLDAsNS40LDMx''@;'; put 'put ''LjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDksMCwwLDAsMTgsNC4yNVptOC42LDkuNDgtNS45Miw1LjgxYTMsMywwLDEsMS0xLjQxLTEuNDJsNS45MS01LjgxWm0tMjMsNi4xN0g3djJIMy41NmMwLS4zOS0uMDUtLjc3LS4wNS0xLjE3UzMuNTMsMjAuMTgsMy41NSwxOS45Wm00Ljg4''@;'; put 'put ''LTEwLDIuNDYsMi40Nkw5LjQ3LDEzLjc0LDcsMTEuMjlBMTQuNTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3Wk0xOSw5Ljc5SDE3VjYuMjljLjMyLDAsLjYzLDAsMSwwcy43LDAsMSwuMDVaTTMyLjQ5LDIwLjc0YzAsLjM5LDAsLjc5LS4wNSwxLjE3SDI4Ljkydi0yaDMuNTNDMzIuNDcsMjAuMTgs''@;'; put 'put ''MzIuNDksMjAuNDYsMzIuNDksMjAuNzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMi41OCwxM2E3LjQ2LDcuNDYsMCwwLDEtMTAtOC4xMkExNi40OSwxNi40OSwwLDAsMCw1LjQs''@;'; put 'put ''MzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40NSwxNi40NSwwLDAsMCwyLTE4LjM2Wk0xNyw2LjI5Yy4zMiwwLC42MywwLDEsMHMuNywwLDEsLjA1djMuNUgxN1pNNywyMS45MUgzLjU2YzAtLjM5LS4wNS0uNzctLjA1LTEuMTdzMC0uNTYsMC0uODNIN1ptMi41MS04LjE2TDcsMTEuMjlBMTQu''@;'; put 'put ''NTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3bDIuNDYsMi40NlptMTAuNjIsOS4xOWEzLDMsMCwxLDEtLjgyLTQuODFsNS45MS01LjgxLDEuNDEsMS40MS01LjkyLDUuODFBMywzLDAsMCwxLDIwLjA5LDIyLjkzWm0xMi4zNS0xSDI4Ljkydi0yaDMuNTNjMCwuMjgsMCwuNTUsMCwuODNTMzIuNDcs''@;'; put 'put ''MjEuNTIsMzIuNDQsMjEuOTFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuJyksaC5DbHJTaGFwZUhvc3Q9KDAscy5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyNC4zYTIuNDgsMi40OCwwLDEsMCwyLjQ4LDIuNDdBMi40OCwyLjQ4LDAsMCwwLDE4LDI0LjNabTAsMy42YTEuMTMsMS4xMywwLDEsMSwxLjEzLTEuMTJBMS4xMywxLjEzLDAs''@;'; put 'put ''MCwxLDE4LDI3LjlaIi8+PHJlY3QgeD0iMTMuNSIgeT0iMjAuNyIgd2lkdGg9IjkiIGhlaWdodD0iMS40NCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjUuNjUsMy42SDEwLjM1QTEuMzUsMS4zNSwwLDAs''@;'; put 'put ''MCw5LDQuOTVWMzIuNEgyN1Y0Ljk1QTEuMzUsMS4zNSwwLDAsMCwyNS42NSwzLjZabS0uNDUsMjdIMTAuOFY1LjRIMjUuMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTIuNiIgeT0iNy4yIiB3aWR0aD0i''@;'; put 'put ''MTAuOCIgaGVpZ2h0PSIxLjQ0Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjEyLjYiIHk9IjEwLjgiIHdpZHRoPSIxMC44IiBoZWlnaHQ9IjEuNDQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE1LjIsMjcuOGMwLDEuNSwxLjIsMi44LDIuOCwyLjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHogTTE5LjIsMjcuOGMwLDAuNy0wLjYsMS4y''@;'; put 'put ''LTEuMiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcuOHoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMTMiIHk9IjIxIiB3''@;'; put 'put ''aWR0aD0iMTAiIGhlaWdodD0iMS42Ii8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHBvaW50cz0iMjEuMyw2IDEyLDYgMTIsNy42IDIwLjQsNy42Ii8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xMiwxMS42aDYuNmMwLTAuNiwwLjItMS4xLDAuNC0xLjZoLTdWMTEuNnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTI2LDE1LjRWMzJIMTBWNGgxMi41bDEuMS0ySDkuNUM4LjcsMiw4LDIuNyw4LDMuNVYzNGgyMFYxNS40SDI2eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01Ljct''@;'; put 'put ''OS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE1LjIsMjcuOGMwLDEuNSwxLjIsMi44''@;'; put 'put ''LDIuOCwyLjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHogTTE5LjIsMjcuOGMwLDAuNy0wLjYsMS4yLTEuMiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcuOHoiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjEzIiB5PSIyMSIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTI0LDEwLjVjLTAuMS0wLjItMC4yLTAuMy0wLjMtMC41SDEydjEuNmgxMlYxMC41eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0i''@;'; put 'put ''TTEyLDZ2MS42aDEwLjdjLTAuMS0wLjUtMC4yLTEuMS0wLjItMS42SDEyeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgZD0iTTI2LDEyLjNWMzJIMTBWNGgxMi44YzAuMi0wLjcsMC41''@;'; put 'put ''LTEuNCwwLjktMkg5LjVDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMTMuMkMyNy4zLDEzLDI2LjYsMTIuNywyNiwxMi4zeiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI2LjUsMmgtMTdDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMy41QzI4LDIuNywyNy4zLDIsMjYuNSwyeiBNMTgsMzAuNWMt''@;'; put 'put ''MS41LDAtMi44LTEuMi0yLjgtMi44UzE2LjUsMjUsMTgsMjVzMi44LDEuMiwyLjgsMi44UzE5LjUsMzAuNSwxOCwzMC41eiBNMjMsMjIuNkgxM1YyMWgxMFYyMi42eiBNMjQsMTEuNkgxMlYxMGgxMlYxMS42eiBNMjQsNy42SDEyVjZoMTJWNy42eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjE4IiBjeT0iMjcuOCIgcj0iMS4yIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIyLjIsMTUuM2Mt''@;'; put 'put ''MiwwLTMuNy0xLjYtMy43LTMuN0gxMlYxMGg2LjljMC0wLjEsMC4xLTAuMiwwLjEtMC4ybDEuMi0yLjJIMTJWNmg5LjJsMi4zLTRoLTE0QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjE1LjNIMjIuMnogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwx''@;'; put 'put ''LjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXogTTIzLDIyLjZIMTNWMjFoMTBWMjIuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDFsLTUuNyw5LjljLTAuMywwLjYtMC4xLDEuNCwwLjUsMS43YzAuMiwwLjEsMC40LDAuMiwwLjYsMC4yaDEx''@;'; put 'put ''LjRjMC43LDAsMS4zLTAuNiwxLjMtMS4zYzAtMC4yLTAuMS0wLjQtMC4yLTAuNkwyOS4xLDFjLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC43LDI3LDAuOCwyNi45LDF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yNCwxMC4zdjEuMkgxMlYxMGgxMS44Yy0wLjUtMC43LTAuOC0xLjUtMS0yLjRIMTJWNmgxMC41YzAsMCwwLTAuMSwwLTAuMWMwLTEuNCwwLjQtMi43LDEuMS0zLjlIOS41QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjEzLjFDMjYuNCwxMi42LDI1LDEx''@;'; put 'put ''LjcsMjQsMTAuM3ogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXpNMjMsMjIuNkgxM1YyMWgxMFYyMi42eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9''@;'; put 'put ''IjUuOSIgcj0iNSIvPlxuJyksaC5DbHJTaGFwZVN0b3JhZ2U9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMyw2LjY5aDBjLS4xOC0zLjQxLTkuNDctNC4zMy0xNS00LjMzUzMsMy4yOSwzLDYuNzhWMjkuMzdj''@;'; put 'put ''MCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjYuNzhzMCwwLDAsMFMzMyw2LjcsMzMsNi42OVptLTIsNy41NmMtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMTUuMzR2Mi4wOEE0My4zMiw0My4zMiwwLDAsMCwxOCwxOC43YzQsMCw5''@;'; put 'put ''LjkzLS40OCwxMy0ydjUuMTdjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDIyLjkyVjI1YTQzLjMyLDQzLjMyLDAsMCwwLDExLDEuMjhjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xYy0uMzUuODYtNS4wOCwyLjQ1LTEzLDIuNDVTNS4zLDMwLjIsNSwyOS4zN1Y2''@;'; put 'put ''LjgyQzUuMyw2LDEwLDQuMzYsMTgsNC4zNmM3Ljc3LDAsMTIuNDYsMS41MywxMywyLjM3LS41Mi44Ny01LjIxLDIuMzktMTMsMi4zOUEzNy42LDM3LjYsMCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2M0LDAsOS45My0uNDgsMTMtMloiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE5LjUxLDkuMDksMTgsOS4xMUEzNy42LDM3LjYsMCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2guNjFBMy42NiwzLjY2LDAs''@;'; put 'put ''MCwxLDE5LDkuODlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yOC44MywxNS40QTM4LjM3LDM4LjM3LDAsMCwxLDE4LDE2LjcsMzcuNDUsMzcuNDUsMCwwLDEsNywxNS4z''@;'; put 'put ''NHYyLjA4QTQzLjMzLDQzLjMzLDAsMCwwLDE4LDE4LjdjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xN2MtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMjIuOTJWMjVhNDMuMzMsNDMuMzMsMCwwLDAsMTEsMS4yOGM0LDAsOS45My0uNDgsMTMtMnY1LjFjLS4zNS44''@;'; put 'put ''Ni01LjA4LDIuNDUtMTMsMi40NVM1LjMsMzAuMiw1LDI5LjM3VjYuODJDNS4zLDYsMTAsNC4zNiwxOCw0LjM2YzEuNSwwLDIuODkuMDYsNC4xNS4xNmwxLjEtMS45Yy0xLjg2LS4xOC0zLjctLjI2LTUuMjUtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4zN2MwLDMuNDksOS40Myw0LjQz''@;'; put 'put ''LDE1LDQuNDNzMTUtLjkzLDE1LTQuNDN2LTE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''IiBkPSJNNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yNyw1NC44Miw1NC44MiwwLDAsMCw2LjItLjM2LDcuNSw3LjUsMCwwLDEtMS4xMy0xLjg4Yy0xLjUuMTUtMy4yLjI0LTUuMDcuMjRBMzcuNiwzNy42LDAsMCwxLDcsNy43NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMSwxMy40M3YuODJjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDE1LjM0djIuMDhBNDMuMzMsNDMuMzMsMCwwLDAsMTgsMTguN2M0LDAs''@;'; put 'put ''OS45My0uNDgsMTMtMnY1LjE3Yy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUsMzcuNDUsMCwwLDEsNywyMi45MlYyNWE0My4zMyw0My4zMywwLDAsMCwxMSwxLjI4YzQsMCw5LjkzLS40OCwxMy0ydjUuMWMtLjM1Ljg2LTUuMDgsMi40NS0xMywyLjQ1UzUuMywzMC4yLDUsMjkuMzdW''@;'; put 'put ''Ni44MkM1LjMsNiwxMCw0LjM2LDE4LDQuMzZjMS43LDAsMy4yNS4wOCw0LjY0LjJhNy40NCw3LjQ0LDAsMCwxLC42Ny0xLjk0Yy0xLjg4LS4xOC0zLjc1LS4yNi01LjMxLS4yNi01LjU3LDAtMTUsLjkzLTE1LDQuNDNWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00''@;'; put 'put ''LjQzVjEyLjg3QTcuNDUsNy40NSwwLDAsMSwzMSwxMy40M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNy45MSwxOC4yOGM4LjA4LDAsMTQuNjYtMS43NCwxNS4wOS0zLjk0VjguNTljLS40MywyLjItNywzLjk0LTE1LjA5LDMuOTRBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTFWOWEzOS40LDM5''@;'; put 'put ''LjQsMCwwLDAsMTEuNjYsMS41MUMyNiwxMC41MywzMi41Miw4Ljc5LDMzLDYuNjFoMEMzMi44LDMuMiwyMy41MiwyLjI4LDE4LDIuMjhTMywzLjIxLDMsNi43MVYyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcu''@;'; put 'put ''OTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yQTM5LjQsMzkuNCwwLDAs''@;'; put 'put ''MCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTcuOTEsMjAuMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTguNzd2LTJhMzkuNCwzOS40LDAsMCwwLDExLjY2''@;'; put 'put ''LDEuNTFjNi45LDAsMTIuNy0xLjI3LDE0LjUxLTNIMjIuMjNhMy42NywzLjY3LDAsMCwxLTMuNTUtMi43NWgtLjc3QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFoLjgyQTMuNjQsMy42NCwwLDAsMSwxOSw5Ljc1bDQuMTctNy4yMmMtMS44NS0u''@;'; put 'put ''MTgtMy42OC0uMjUtNS4yMS0uMjUtNS41NywwLTE1LC45My0xNSw0LjQzVjI5LjI5YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40M1YyNC4wOUMzMi41NywyNi4yOCwyNiwyOCwxNy45MSwyOEEzOS40LDM5LjQsMCwwLDEsNi4yNSwyNi41MnYtMkEzOS40LDM5LjQsMCww''@;'; put 'put ''LDAsMTcuOTEsMjZDMjYsMjYsMzIuNTcsMjQuMjgsMzMsMjIuMDlWMTYuMzRDMzIuNTcsMTguNTMsMjYsMjAuMjgsMTcuOTEsMjAuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1hbGVydCIgZD0iTTI2Ljg1LDFsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDFBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNy45MSwxOC4yOGM4LjA4LDAsMTQuNjYtMS43NCwxNS4wOS0zLjk0di0xLjZhNy40Nyw3LjQ3LDAsMCwxLTcuMzgtLjgsNDguMyw0OC4zLDAsMCwxLTcuNzEuNTlBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTFWOWEzOS40''@;'; put 'put ''LDM5LjQsMCwwLDAsMTEuNjYsMS41MSw1MSw1MSwwLDAsMCw2LS4zNCw3LjQ2LDcuNDYsMCwwLDEtLjU5LTcuNjVjLTEuODctLjE4LTMuNzMtLjI2LTUuMjgtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQu''@;'; put 'put ''MDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1''@;'; put 'put ''LDE4Ljc3di0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI1Ljg2IiByPSI1Ii8+XG4nKSxo''@;'; put 'put ''LkNsclNoYXBlQ2x1c3Rlcj0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMzYsOEgyNy41djJIMzFWMzBIMjcuNXYySDMzVjkuNjdBMS42NSwxLjY1LDAsMCwwLDMxLjM2LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTUsMTBIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz48ZWxsaXBzZSBjeD0iMTguMDEiIGN5PSIyNS45OSIgcng9IjEuOCIgcnk9IjEuNzkiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMzIsNEgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0yNCwzMEgxMlY2SDI0WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzLjUiIHk9IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDgu''@;'; put 'put ''NVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDkuODlsLjM5LS42OEgxMy41djEuNmg1LjE3QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNCwzMEgxMlY2aDkuMjlsMS4xNS0ySDExLjY4QTEuNjgsMS42OCwwLDAsMCwxMCw1LjY4VjMySDI2VjE1LjRIMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDMwIDI3LjUgMzAgMjcuNSAzMiAzMyAzMiAzMyAxNS40IDMxIDE1LjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTBIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzLjUiIHk9''@;'; put 'put ''IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTAuNDlWMzBIMTJWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMS42OEEx''@;'; put 'put ''LjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxMi4zNEE3LjUzLDcuNTMsMCwwLDEsMjQsMTAuNDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSwxMy40M1YzMEgyNy41djJI''@;'; put 'put ''MzNWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjM2LDhIMjcuNVYzMkgzM1Y5LjY3QTEuNjUsMS42NSwwLDAsMCwzMS4zNiw4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMzIsNEgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42''@;'; put 'put ''OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0xOCwyNy43OUExLjc5LDEuNzksMCwxLDEsMTkuODEsMjYsMS44LDEuOCwwLDAsMSwxOCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy41IiB5PSIxNS40IiB3aWR0aD0iNS41''@;'; put 'put ''IiBoZWlnaHQ9IjE2LjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxMy41NmEzLjY4LDMuNjgsMCwwLDEtLjMxLTNIMTNWOWg2LjU2bDIuODktNUgxMS42OEExLjY4LDEuNjgsMCww''@;'; put 'put ''LDAsMTAsNS42OFYzMkgyNlYxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NlpNMTgsMjcuNzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVy''@;'; put 'put ''dGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMyw5LjY3VjMySDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxMi4zNEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2Wk0xOCwyNy43OUExLjc5LDEuNzksMCwxLDEsMTkuODEsMjYs''@;'; put 'put ''MS44LDEuOCwwLDAsMSwxOCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjUtLjQ0VjMySDMzVjEyLjg3''@;'; put 'put ''QTcuNDcsNy40NywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksaC5DbHJTaGFwZUFwcGxpY2F0aW9ucz0oMCxzLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjggOCA0IDggNCAxMCAxMCAxMCAxMCA0IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDggMTUgOCAxNSAxMCAyMSAxMCAyMSA0IDE5IDQgMTkgOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgNCAzMCA4''@;'; put 'put ''IDI2IDggMjYgMTAgMzIgMTAgMzIgNCAzMCA0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1IDE5IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9p''@;'; put 'put ''bnRzPSIzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSAzMCAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAzMCAxNSAzMCAxNSAzMiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggOCA0IDggNCAxMCAxMCAxMCAxMCA0''@;'; put 'put ''IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSA4IDE1IDggMTUgMTAgMjEgMTAgMjEgNCAxOSA0IDE5IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAxNSAxOSAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMw''@;'; put 'put ''IDE5IDI2IDE5IDI2IDIxIDMyIDIxIDMyIDE1IDMwIDE1IDMwIDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4''@;'; put 'put ''IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAzMCAyNiAzMCAyNiAzMiAzMiAzMiAzMiAyNiAzMCAyNiAzMCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQgMTAgMTAg''@;'; put 'put ''MTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1IDE5IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxNSAzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAzMCAxNSAzMCAxNSAz''@;'; put 'put ''MiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksOEgxNXYyaDRMMTksOS44OSwyMSw2LjVWNEgxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC04LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSI0''@;'; put 'put ''IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTgiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtOSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTctLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxMGg0TDE5LDkuODksMjEsNi41VjRIMTVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC04LS1hbGVydGVkIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC05LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSI0IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSI0IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxoLkNsclNoYXBlQnVpbGRpbmc9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIyVjUuMTJBMi4xMiwyLjEyLDAs''@;'; put 'put ''MCwwLDE5Ljg4LDNaTTIwLDMxSDE3VjI4SDl2M0g2VjUuMTJBLjEyLjEyLDAsMCwxLDYuMTIsNUgxOS44OGEuMTIuMTIsMCwwLDEsLjEyLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4''@;'; put 'put ''PSI4IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IHg9IjgiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdl''@;'; put 'put ''ZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMiIgaGVp''@;'; put 'put ''Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMTAtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIy''@;'; put 'put ''MyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1iYWRnZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxyZWN0IHg9IjI3IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE3LS1iYWRn''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIg''@;'; put 'put ''aGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xOS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsMTMuNDNWMzFIMjN2MkgzM1YxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIxLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''My0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdp''@;'; put 'put ''ZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxy''@;'; put 'put ''ZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMjMiIHdpZHRoPSIy''@;'; put 'put ''IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVj''@;'; put 'put ''dCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMCwzMUgxN1YyOEg5djNINlY1LjEyQS4xMi4xMiwwLDAsMSw2LjEyLDVIMTkuODhhLjEyLjEyLDAsMCwxLC4xMi4xMlY4LjI0bDItMy40MUEyLjEyLDIu''@;'; put 'put ''MTIsMCwwLDAsMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIMjJWMTUuMzhhMy42OCwzLjY4LDAsMCwxLTItLjc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE3LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdv''@;'; put 'put ''biBwb2ludHM9IjMxIDE1LjQgMzEgMzEgMjMgMzEgMjMgMzMgMzMgMzMgMzMgMTUuNCAzMSAxNS40IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xOS0tYWxlcnRlZCBjbHItaS1h''@;'; put 'put ''bGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDhIMjJWMzNIMzNWMTBBMiwyLDAsMCwwLDMxLDhaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYxOGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMlptMC01SDI4VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYzMGg2djNoNVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01''@;'; put 'put ''SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMThoMlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYzMGg2djNoNVYxNC42NGEzLjY3LDMuNjcsMCwwLDEtMS00Ljc2bDEtMS42NVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVpt''@;'; put 'put ''MC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMThoMlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1h''@;'; put 'put ''bGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNGwtLjIzLDBWMzNIMzNWMTUuNFpNMjYsMjVIMjRWMjNoMlptMC01SDI0VjE4aDJabTQsNUgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTIt''@;'; put 'put ''LWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy44OCwzSDYuMTJBMi4xMiwyLjEyLDAsMCwwLDQsNS4xMlYzM0g5VjMwaDZ2M2g1VjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE3Ljg4LDNaTTksMjVI''@;'; put 'put ''N1YyM0g5Wm0wLTVIN1YxOEg5Wm0wLTVIN1YxM0g5Wm0wLTVIN1Y4SDlabTQsMTVIMTFWMjNoMlptMC01SDExVjE4aDJabTAtNUgxMVYxM2gyWm0wLTVIMTFWOGgyWm00LDE1SDE1VjIzaDJabTAtNUgxNVYxOGgyWm0wLTVIMTVWMTNoMlptMC01SDE1VjhoMloiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNVYxNUgyOFYxMy4yMkE3LjUsNy41LDAsMCwxLDIyLjc4LDhIMjJWMzNIMzNWMTIuODdBNy40Nyw3LjQ3LDAsMCwxLDMwLDEzLjVaTTI2LDI1SDI0VjIzaDJabTAtNUgy''@;'; put 'put ''NFYxOGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsOEgyM3YyaDhWMzFIMjN2MkgzM1YxMEEyLDIsMCwwLDAsMzEsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIMjJWNS4xMkEyLjEyLDIuMTIsMCwwLDAsMTkuODgsM1pNMjAsMzFIMTdWMjhIOXYzSDZWNS4xMkEuMTIuMTIsMCwwLDEsNi4xMiw1SDE5Ljg4YS4xMi4xMiwwLDAsMSwuMTIuMTJaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEy''@;'; put 'put ''IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9''@;'; put 'put ''IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MTAiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYi''@;'; put 'put ''IHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTE1Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTciLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE4Ii8+XG4gICAgICAgICAgICA8cmVjdCB4''@;'; put 'put ''PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMjAiLz5cbiAgICAgICAgJyksaC5DbHJTaGFwZUNQVT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuMDgsMjMuMDdoLTExdjEuNUgyMy44M2EuNzUuNzUsMCwwLDAsLjc1LS43NVYxMS4zM2gtMS41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDE4LjE1YS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFY4LjFBMi4xLDIuMSwwLDAsMCwyNy45LDZIMjYuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSww''@;'; put 'put ''LTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4x''@;'; put 'put ''LDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40Wk0yOCwyNy45YS4xLjEs''@;'; put 'put ''MCwwLDEtLjEuMUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFBLjEuMSwwLDAsMSw4LjEsOEgyNy45YS4xLjEsMCwwLDEsLjEuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMDYsMjQuNTdIMjMuODNhLjc1''@;'; put 'put ''Ljc1LDAsMCwwLC43NS0uNzVWMTEuMzNoLTEuNVYyMy4wN2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZI''@;'; put 'put ''MzBWMTMuNWE3LjQ5LDcuNDksMCwwLDEtMi0uMjhWMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEsOC4xLDhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCww''@;'; put 'put ''LDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAs''@;'; put 'put ''MS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1''@;'; put 'put ''SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTUuNEgyOFYyNy45YS4xLjEsMCwwLDEtLjEuMUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFBLjEuMSwwLDAsMSw4LjEsOGgxMmwxLjE1LTJIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEu''@;'; put 'put ''NiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYz''@;'; put 'put ''MGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4wNiwyNC41N0gyMy44M2EuNzUuNzUsMCwwLDAsLjc1LS43NVYxNS40aC0xLjV2Ny42N2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjE1LjRIMjV2OC40MUExLjE4LDEuMTgsMCwwLDEsMjQsMjVIMTNWMjNIMjNWMTUuNGgtLjc3QTMu''@;'; put 'put ''NjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2''@;'; put 'put ''djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45''@;'; put 'put ''VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMjMu''@;'; put 'put ''NTVIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFYxMy41YTcuNDYsNy40NiwwLDAsMS01LTEuOTJWMjMuODFBMS4xOCwxLjE4LDAsMCwxLDI0LDI1SDEzVjIzSDIzVjExaDEuNDJBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkgxOS4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRW''@;'; put 'put ''My44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEu''@;'; put 'put ''OC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4xLDAsMCwwLDMwLDI3LjlWMjUuMTVoMi4yYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMTgu''@;'; put 'put ''MTVhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjguMUEyLjEsMi4xLDAsMCwwLDI3LjksNkgyNi4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4x''@;'; put 'put ''QTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4y''@;'; put 'put ''YS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwdi01LjRaTTI1LDIzLjgxQTEuMTgsMS4xOCwwLDAsMSwyNCwyNUgxM1YyM0gyM1YxMWgyWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSxoLkNsclNoYXBlTWVtb3J5PSgwLHMuY2xySWNvblNWRykoJzxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjQiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDI3SDRWMTdIMlYyN2EyLDIsMCwwLDAsMiwySDE2LjYxVjI1LjU1aDIuMjZWMjRIMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMyLDdINEEyLDIsMCwwLDAsMiw5djRINFY5SDMydjRoMlY5QTIsMiwwLDAsMCwzMiw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwyN0gxOXYySDMyYTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''MTdIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTIiIHdpZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMjdINFYxN0gyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVoMi4yNlYyNEgxNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxMy41NkEzLjY2LDMuNjYsMCwwLDEsMTguNTcsMTJIMTZ2OGg0''@;'; put 'put ''VjE0LjY0QTMuNjcsMy42NywwLDAsMSwxOSwxMy41NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNCIgeT0iMTUuNCIgd2lkdGg9IjQiIGhlaWdodD0iNC42IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsOUgxOS41NmwxLjE1LTJINEEyLDIsMCwwLDAsMiw5djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02''@;'; put 'put ''LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTIiIHdpZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwyN0g0VjE3SDJWMjdh''@;'; put 'put ''MiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NWgyLjI2VjI0SDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJBNy40Niw3LjQ2LDAsMCwxLDI1LjUxLDEySDI0djhoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsOUgyMy4xM2E3LjQ1LDcuNDUsMCwwLDEtLjU1LTJINEEyLDIsMCwwLDAsMiw5djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwxM1Y5YTIsMiwwLDAsMC0yLTJINEEyLDIsMCwwLDAsMiw5''@;'; put 'put ''djRINHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0yVjE3SDMyVjEzWk0xMiwyMEg4VjEyaDRabTgsMEgxNlYxMmg0Wm04LDBIMjRWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0zMiwxN1YxNS4wN0gyOFYyMEgyNFYxNS4wN0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMjAsMTQuMzFWMjBIMTZWMTJoMi42MUEzLjY4LDMuNjgsMCwwLDEsMTksOS41NUwyMC41Miw3SDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUu''@;'; put 'put ''NTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN1pNMTIsMjBIOFYxMmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4x''@;'; put 'put ''LDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LjhBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LjhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MzIsMTdWMTMuMjJhNy4zMyw3LjMzLDAsMCwxLTQsMFYyMEgyNFYxMmgxLjUxYTcuNDgsNy40OCwwLDAsMS0yLjk0LTVINEEyLDIsMCwwLDAsMiw5djRINHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0yVjE3Wk0xMiwyMEg4VjEyaDRabTgs''@;'; put 'put ''MEgxNlYxMmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksaC5DbHJTaGFwZURhdGFDbHVzdGVyPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41LDQuMDhDMjIuNzcsNC4wOCwxOSw1LjQsMTksNy45MVY5LjVhMTguNzUsMTguNzUsMCwwLDEsMiwuMlY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUt''@;'; put 'put ''MS44NFMzMiw3LjI3LDMyLDcuOTFWMTguMjRjMCwuNTQtMS40NiwxLjQ0LTMuOSwxLjczdjJjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0LDUuNCwzMC4yMyw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMxNSw3LjI3LDE1LDcuOTFWOS43YTE4Ljc1LDE4Ljc1LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42''@;'; put 'put ''Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQu''@;'; put 'put ''MzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMTUuMjNDMjYuNjUsMTIuNzMsMjIuOTMsMTAuODUsMTgsMTAuODVabTYuNjUsNy42N2MtLjg1LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEy''@;'; put 'put ''Ljc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5LDE0LjQ5LDAsMCwxLTQtLjUzdjEuNDZhMTYuMzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42NSwyLjM4LTYuNjUsMi4zOHMtNi42NS0x''@;'; put 'put ''LjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4czYuNjUsMS40Myw2LjY1LDIuMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQs''@;'; put 'put ''NS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUuNDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC42NSwxOC41MmMtLjg1LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3''@;'; put 'put ''LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5LDE0LjQ5LDAsMCwxLTQtLjUzdjEuNDZhMTYuMzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42NSwyLjM4LTYuNjUsMi4z''@;'; put 'put ''OHMtNi42NS0xLjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4bC43NSwwYTMuNjksMy42OSwwLDAsMS0uMDgtMmwtLjY2LDBjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUt''@;'; put 'put ''NC4zOFYxNS40aC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0LjhjLTEuNzUuNjMtMywxLjY4LTMsMy4xMlY5LjVsLjI1LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJ2Mi44NGMwLC41NC0xLjQ2LDEuNDQtMy45LDEuNzN2MmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMxNSw3LjI3LDE1LDcu''@;'; put 'put ''OTFWOS43YTE4Ljc1LDE4Ljc1LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjE1LjIzQzI2LjY1LDEyLjczLDIy''@;'; put 'put ''LjkzLDEwLjg1LDE4LDEwLjg1Wm02LjY1LDcuNjdjLS44NSwxLTMuNDIsMi02LjY1LDJBMTQuNDksMTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYuNjUsMmExNC40OSwx''@;'; put 'put ''NC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIuNjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUtMi4zOHM2LjY1LDEu''@;'; put 'put ''NDMsNi42NSwyLjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNy45MWMwLS4zMy41NS0uOCwxLjU0LTEuMTgsMC0uMjQsMC0uNDgsMC0uNzNhNy41Miw3LjUyLDAsMCwxLC4x''@;'; put 'put ''NC0xLjQxQzIwLjU1LDUuMTksMTksNi4zLDE5LDcuOTFWOS41YTE4Ljc1LDE4Ljc1LDAsMCwxLDIsLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnY1YzAsLjU0LTEu''@;'; put 'put ''NDYsMS40NC0zLjksMS43M3YyYzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzV2LTUuOUE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMw''@;'; put 'put ''IiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNSw0LjA4QzIyLjc3LDQuMDgsMTksNS40LDE5LDcuOTFWOS40OGM1LjMuMjYsOSwyLjYs''@;'; put 'put ''OSw1Ljc2djYuN2wuMDUuMDZjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0LDUuNCwzMC4yMyw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4VjcuOTFjMC0yLjUyLTMu''@;'; put 'put ''NzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyTDgsMjEuOTN2LTYuN0M4LDEyLjA4LDExLjcsOS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMjUuMzhBMTMuNTgsMTMuNTgsMCwwLDEsMTgsMjhhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjI1LjI3YTE0LjUsMTQuNSwwLDAsMCw2''@;'; put 'put ''LDEuMTdjNC4yMSwwLDcuNjUtMS4yMyw4LjYzLTMuMjNWMjAuNDdDMjQuOCwyMiwyMS43MiwyMywxOCwyM2ExNi43NywxNi43NywwLDAsMS02LTFWMjAuMjNhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjExLDguNjMtMy4xMVYxNS4yM0MyNi42NSwxMi43MywyMi45Mywx''@;'; put 'put ''MC44NSwxOCwxMC44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4VjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyTDgs''@;'; put 'put ''MjEuOTN2LTYuN0M4LDEyLjA4LDExLjcsOS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2YTMuNjgsMy42OCwwLDAsMS0uMzktMi43bC0uNjYsMGMtNC45''@;'; put 'put ''MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjI1LjM4QTEzLjU4LDEzLjU4LDAsMCwxLDE4LDI4YTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyNS4yN2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3''@;'; put 'put ''LjY1LTEuMjMsOC42My0zLjIzVjIwLjQ3QzI0LjgsMjIsMjEuNzIsMjMsMTgsMjNhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjIwLjIzYTE0LjUsMTQuNSwwLDAsMCw2LDEuMTdjNC4yMSwwLDcuNjUtMS4xMSw4LjYzLTMuMTFWMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNC44Yy0xLjc1LjYzLTMsMS42OC0zLDMuMTJWOS40OGwuMjcsMFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDI4djYuNTNsLjA1LjA2YzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzVWMTUuMzhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4w''@;'; put 'put ''OCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTAuODVjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1''@;'; put 'put ''LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYyNS4zOEExMy41OCwxMy41OCwwLDAsMSwxOCwyOGExNi43NywxNi43NywwLDAsMS02LTFWMjUuMjdhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjIzLDguNjMtMy4yM1YyMC40N0MyNC44LDIyLDIxLjcyLDIzLDE4LDIzYTE2''@;'; put 'put ''Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyMC4yM2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMTEsOC42My0zLjExVjE1LjIzQzI2LjY1LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1i''@;'; put 'put ''YWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy41Miw3LjUyLDAsMCwxLC4xNC0xLjRDMjAuNTUsNS4xOSwxOSw2LjMsMTksNy45MVY5LjQ4YTE1LjMzLDE1LjMzLDAsMCwxLDUsMUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy40OUE3LjQ3LDcuNDcsMCwwLDEsMjcuMzUsMTNhNCw0LDAsMCwxLC43LDIuMjN2Ni43bC4wNS4wNmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjEyLjMzQTcuNDYsNy40NiwwLDAs''@;'; put 'put ''MSwzMCwxMy40OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjUuOTkiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGguQ2xyU2hhcGVSZXNvdXJjZVBvb2w9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjY4LDE1LjRIMzEuNzNhMTQsMTQsMCwwLDEsLjIyLDEuNkgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsMjIuMDksNC42MmwxLTEuNzZB''@;'; put 'put ''MTYsMTYsMCwxLDAsMzQsMThhMTYsMTYsMCwwLDAtLjIzLTIuNjFaTTE4LDMyYTEzLjkxLDEzLjkxLDAsMCwxLTguMTYtMi42NUwxOC40MywxOUgzMS45NUExNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVy''@;'; put 'put ''dGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNNCwxOGExNCwxNCwwLDAsMSwyNy45NS0xSDE3LjQ5TDguMywyOC4wN0ExNCwx''@;'; put 'put ''NCwwLDAsMSw0LDE4Wk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjIsMTMuNGExMy45''@;'; put 'put ''MSwxMy45MSwwLDAsMSwuNzUsMy42SDE3LjQ5TDguMywyOC4wN0ExNCwxNCwwLDAsMSwyMi42MSw0LjhhNy40Myw3LjQzLDAsMCwxLC41OC0xLjkyLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M0E3LjQzLDcuNDMsMCwwLDEsMzEuMiwxMy40Wk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04''@;'; put 'put ''LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC41NywzMC45QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMzLjk1LDE3QTE2LDE2LDAsMSwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlIMTguNDNaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3YTE1LjkxLDE1LjkxLDAsMCwwLS44NC00LjE4LDcuNDksNy40OSwwLDAsMS05LjkyLTkuOTRBMTYsMTYsMCwwLDAsNywyOS42TDE3LjQ5LDE3WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2Ui''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlIMTguNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTUsMTdhMTYsMTYsMCww''@;'; put 'put ''LDAtLjE4LTEuNjFIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsNC4wNi03QTE2LDE2LDAsMCwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44''@;'; put 'put ''NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgJyksaC5DbHJTaGFwZVNoaWVsZENoZWNrPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS4yNSw3LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAs''@;'; put 'put ''MS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wk0zMCwxNS45M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTIt''@;'; put 'put ''LjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODIsM0E0Ny41NCw0Ny41NCwwLDAsMCwzMCw5LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC44OCwxNi44N2ExLDEsMCwwLDAtMS40MSwxLjQxbDYsNkwyNi40LDEzLjc3QTEsMSwwLDAsMCwyNSwxMi4zM2wtOS40Nyw5LjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0zMS4yNSw3LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41''@;'; put 'put ''MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wm0tNC41Nyw2LjY1TDE1LjUxLDI0LjksOS4xOSwxOC41N2ExLjQsMS40LDAsMCwxLDItMkwxNS41NCwyMSwyNC43MywxMmExLjQsMS40LDAsMSwxLDIsMloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksaC5DbHJTaGFwZVNoaWVsZD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVh''@;'; put 'put ''NDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0x''@;'; put 'put ''MiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNHYuNTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItM2MxLC42''@;'; put 'put ''NCwyLjIsMS4yNywzLjQzLDEuODlsMS0xLjc0YTQxLjEsNDEuMSwwLDAsMS0zLjg5LTIuMThMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQu''@;'; put 'put ''MTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMwLDEzLjV2Mi40M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTItLjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ2LjE5LDQ2LjE5LDAsMCwwLDQuNTEsMi40MmMwLS4x''@;'; put 'put ''LDAtLjE5LDAtLjI5YTcuNDksNy40OSwwLDAsMSwuMjMtMS44Myw0MS42MSw0MS42MSwwLDAsMS00LjE5LTIuMzNMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42''@;'; put 'put ''NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAs''@;'; put 'put ''MS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41''@;'; put 'put ''OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yMywxNS40QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIyLjQzLDRhNDEuMSw0MS4xLDAsMCwxLTMuODktMi4xOEwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02''@;'; put 'put ''LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40Nyw3LjQ3LDAsMCwxLTcuMjctOS4zMyw0MS42MSw0MS42MSwwLDAsMS00LjE5LTIuMzNMMTgsMS41bC0uNTQu''@;'; put 'put ''MzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEz''@;'; put 'put ''LjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1i''@;'; put 'put ''YWRnZSIvPlxuICAgICAgICAnKSxoLkNsclNoYXBlU2hpZWxkWD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQz''@;'; put 'put ''Ljc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEy''@;'; put 'put ''LTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjIuODEsMTAuNzksMTgsMTUuNjFsLTQuODEtNC44MWExLDEsMCwwLDAtMS40MSwxLjQxTDE2LjU5LDE3bC00LjgxLDQuODFhMSwxLDAsMSwwLDEuNDEsMS40MUwxOCwxOC40M2w0LjgxLDQuODFhMSwxLDAsMCwwLDEuNDEtMS40MUwxOS40MSwxN2w0Ljgx''@;'; put 'put ''LTQuODFhMSwxLDAsMCwwLTEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0u''@;'; put 'put ''NTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMjQuNTEsMjEuNTVhMS40LDEu''@;'; put 'put ''NCwwLDAsMS0yLDJMMTgsMTlsLTQuNTMsNC41M2ExLjQzLDEuNDMsMCwwLDEtMiwwLDEuNCwxLjQsMCwwLDEsMC0yTDE2LDE3bC00LjUzLTQuNTNhMS40LDEuNCwwLDEsMSwyLTJMMTgsMTVsNC41My00LjUzYTEuNCwxLjQsMCwwLDEsMiwyTDIwLDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSxoLkNsclNoYXBlSW1wb3J0PSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCw0SDE0Ljg3TDgsMTAuODZWMTVoMlYxMy42MWg3LjYxVjZIMjhWMzBIOGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAs''@;'; put 'put ''MjgsNFpNMTYsMTJIMTB2LS4zMkwxNS43LDZIMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjk0LDI2LjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTksMjJsLTUuNjgtNS42OGExLDEsMCwwLDAtMS40MSwx''@;'; put 'put ''LjQxTDE1LjIsMjFIM2ExLDEsMCwxLDAsMCwySDE1LjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEu''@;'; put 'put ''NDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTUuNFYzMEg4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCww''@;'; put 'put ''LDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMCwxMy42MWg3LjYxVjZoMy42OGwxLjE1LTJIMTQuODdMOCwxMC44NlYxNWgyWm0wLTEuOTJMMTUuNyw2SDE2djZI''@;'; put 'put ''MTBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwx''@;'; put 'put ''MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40''@;'; put 'put ''MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEz''@;'; put 'put ''LjIyVjMwSDhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTMuNjFo''@;'; put 'put ''Ny42MVY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMTVoMlptMC0xLjkyTDE1LjcsNkgxNnY2SDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIz''@;'; put 'put ''MCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTQuODdMOCwxMC44NlYyMUgxNS4ybC0zLjI1LTMuMjVhMSwxLDAsMCwxLDEuNDEtMS40MUwxOSwyMmwtNS42OCw1LjY4YTEsMSwwLDAsMS0xLjQxLTEuNDFMMTUuMjMsMjNIOHY3YTIsMiwwLDAsMCwyLDJIMjhhMiwy''@;'; put 'put ''LDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0Wk0xNiwxMkgxMHYtLjMyTDE1LjY5LDZIMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMywyMWExLDEsMCwxLDAsMCwySDhWMjFaIiBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40NSw0SDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJs''@;'; put 'put ''LTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0yMi41LDZhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJsLTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiww''@;'; put 'put ''LDAsMCwyLTJWMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNlpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksaC5DbHJTaGFwZUV4cG9ydD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNiwxMy42MWg3LjYxVjZIMjR2OC4zOGgyVjZhMiwyLDAsMCwwLTItMkgx''@;'; put 'put ''MC44N0w0LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0x''@;'; put 'put ''LjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSww''@;'; put 'put ''LDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTYsMTMuNjFoNy42MVY2aDcuNjhsMS4xNS0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0ySDZabTAtMS45MkwxMS42OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVy''@;'; put 'put ''dGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwx''@;'; put 'put ''LjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwxMi4zNGE3LjUzLDcuNTMsMCwwLDEtMi0xLjg1djMuODloMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0ySDZabTAtMS45MkwxMS42''@;'; put 'put ''OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWNmEyLDIsMCwwLDAtMi0ySDEwLjg3TDQsMTAuODZWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYt''@;'; put 'put ''LjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIsMTYuMzVhMSwxLDAsMCwwLTEuNDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM1''@;'; put 'put ''LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwzNSwyMloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40NSw0SDEwLjg3TDQsMTAuODZWMzBhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4x''@;'; put 'put ''NCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIsMTYuMzVhMSwxLDAsMCwwLTEuNDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM1LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDIyLjc4LDRIMTAuODdMNCwxMC44NlYzMGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJWMjNIMThBMSwxLDAsMCwxLDE3LDIyWk0x''@;'; put 'put ''MiwxMkg2di0uMzJMMTEuNjksNkgxMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGguQ2xyU2hhcGVVcGxvYWRDbG91ZD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuMzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYs''@;'; put 'put ''Ni4xQTkuNzQsOS43NCwwLDAsMCwxLjYsMTguNCw5LjYyLDkuNjIsMCwwLDAsMTEuMjUsMjhIMTVWMjZIMTEuMjVBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguMjYsOC4yNiwwLDAsMSw4LjQ1LDgsNy43NSw3Ljc1LDAsMCwx''@;'; put 'put ''LDAsLjhsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDMuOTMtMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDIxLjg1QTEsMSwwLDAsMCwyMywyMC4x''@;'; put 'put ''NGwtNS01LTUsNWExLDEsMCwwLDAsMS40MSwxLjQxTDE3LDE5VjMxLjI1YTEsMSwwLDEsMCwyLDBWMTlsMi41NywyLjU3QTEsMSwwLDAsMCwyMi4yOCwyMS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIu''@;'; put 'put ''MjgsMjEuODVBMSwxLDAsMCwwLDIzLDIwLjE0bC01LTUtNSw1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTcsMTlWMzEuMjVhMSwxLDAsMSwwLDIsMFYxOWwyLjU3LDIuNTdBMSwxLDAsMCwwLDIyLjI4LDIxLjg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjYsMTguMzhBNy43MSw3LjcxLDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguODEsOC44MSwwLDAsMSwyLC4yNWwxLTEuOGExMC44LDEwLjgsMCwwLDAtMy4wNy0uNDUs''@;'; put 'put ''MTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5Ljc0LDkuNzQsMCwwLDAsMS42LDE4LjQsOS42Miw5LjYyLDAsMCwwLDExLjI1LDI4SDE1VjI2SDExLjI1QTcuNjYsNy42NiwwLDAsMSwzLjYsMTguMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''Mi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjksMTUuNEgzMC4yMUE2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4QTgsOCwwLDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyMS44NUExLDEsMCwwLDAsMjMsMjAuMTRsLTUtNS01LDVhMSwxLDAsMCwwLDEuNDEsMS40MUwxNywxOVYzMS4yNWExLDEsMCwxLDAsMiwwVjE5bDIu''@;'; put 'put ''NTcsMi41N0ExLDEsMCwwLDAsMjIuMjgsMjEuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCwwLDEtMi42My0uMTRjMCwuMDgsMCwuMTUs''@;'; put 'put ''MCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDQuNTQtMTQuNTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjYsMTguMzhB''@;'; put 'put ''Ny43MSw3LjcxLDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguNzksOC43OSwwLDAsMSwyLjY4LjQyLDcuNDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAsMCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS43''@;'; put 'put ''NCw5Ljc0LDAsMCwwLDEuNiwxOC40LDkuNjIsOS42MiwwLDAsMCwxMS4yNSwyOEgxNVYyNkgxMS4yNUE3LjY2LDcuNjYsMCwwLDEsMy42LDE4LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxoLkNsclNoYXBlRG93bmxvYWRDbG91ZD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAu''@;'; put 'put ''MzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSwwLDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40Myww''@;'; put 'put ''LDAsMSw4LTUuNCw4LjI2LDguMjYsMCwwLDEsOC40NSw4LDcuNzUsNy43NSwwLDAsMSwwLC44bC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4YTgsOCwwLDAsMCwzLjkzLTE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEsMC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDI2LjA3YTEsMSwwLDAsMC0uNzEuMjlMMTksMjguOTRWMTYuNjhhMSwxLDAsMSwwLTIsMFYyOC45NGwtMi41Ny0yLjU3QTEsMSwwLDAsMCwxMywyNy43OGw1LDUsNS01YTEs''@;'; put 'put ''MSwwLDAsMC0uNzEtMS43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuODcsNC42OWE4LjgxLDguODEsMCwwLDEsMiwuMjVsMS0xLjhhMTAuOCwxMC44LDAsMCwwLTMuMDct''@;'; put 'put ''LjQ1LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMywwLDAsMSwwLTJBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjksMTUuNEgzMC4yMUE2LDYsMCwwLDEsMjYuMzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4QTgsOCwwLDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwy''@;'; put 'put ''Ni44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEsMC0y''@;'; put 'put ''LDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS44Nyw0LjY5YTgu''@;'; put 'put ''NzksOC43OSwwLDAsMSwyLjY4LjQyLDcuNDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAsMCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMywwLDAsMSwwLTJBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42''@;'; put 'put ''NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCwwLDEtMi42My0uMTRjMCwu''@;'; put 'put ''MDgsMCwuMTUsMCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyNS4wOWEzLDMsMCwwLDEsMCwyaDEuMjhhOCw4LDAsMCwwLDQuNTQtMTQuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGguQ2xyU2hhcGVQbHVnaW49KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5''@;'; put 'put ''LjgxLDE2SDI5VjguODNhMiwyLDAsMCwwLTItMkgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwy''@;'; put 'put ''LDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZabTIuNDEsN0EzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNoOVY3''@;'; put 'put ''YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2g4VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEsMTZIMjl2LS42SDI3VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyMywzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwx''@;'; put 'put ''NUg0VjguODNoOVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2guNjZMMjEsNi41OUE1LjEyLDUuMTIsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMs''@;'; put 'put ''MCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwx''@;'; put 'put ''LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVYxMy40M2E3LjQ1LDcuNDUsMCwwLDEtMi0uNTVWMThoMi44MUEzLjEzLDMuMTMsMCww''@;'; put 'put ''LDEsMzMsMjAuNjksMywzLDAsMCwxLDMyLjIyLDIzLDMsMywwLDAsMSwzMCwyNEgyN3Y3LjgzSDRWMjVINWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCw0LjgxLDE1SDRWOC44M2g5VjdhMywzLDAsMCwxLDEtMi4yMkEzLDMsMCwwLDEsMTYuMzEsNCwzLjEzLDMuMTMsMCwwLDEs''@;'; put 'put ''MTksNy4xOVY4LjgzaDQuMDZhNy40NCw3LjQ0LDAsMCwxLS41MS0ySDIxQTUuMTQsNS4xNCwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1LDIz''@;'; put 'put ''SDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVY4LjgzYTIsMiwwLDAsMC0yLTJIMjFBNS4xNCw1LjE0''@;'; put 'put ''LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAs''@;'; put 'put ''MCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjgxLDE2SDI5di0uNkgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMSw2LjU5QTUuMTIsNS4xMiww''@;'; put 'put ''LDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAs''@;'; put 'put ''NS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42''@;'; put 'put ''OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44''@;'; put 'put ''MSwxNkgyOVYxMy40M2E3LjUsNy41LDAsMCwxLTYuNDUtNi41OUgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gy''@;'; put 'put ''djguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBj''@;'; put 'put ''eD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxoLkNsclNoYXBlRmxvcHB5PSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy4zNiw0SDZBMiwyLDAsMCww''@;'; put 'put ''LDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWOC43OFpNMjUsMzBIMTFWMjJIMjVabTUsMEgyN1YyMmEyLDIsMCwwLDAtMi0ySDExYTIsMiwwLDAsMC0yLDJ2OEg2VjZoNHY2YTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkgxMlY2SDI2LjUxTDMwLDkuNTlaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41aDBWMzBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTEuNjhsLS40''@;'; put 'put ''My0uM0gxMlY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTI1LDMwSDExVjIySDI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMwLDE1LjRWMzBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwyaDcuMzVhMy41NCwzLjU0LDAsMCwxLS43Ny0ySDEyVjZoOS4yOWwxLjE1LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCww''@;'; put 'put ''LDItMlYxNS40Wk0yNSwzMEgxMVYyMkgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3''@;'; put 'put ''LjM2LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY4Ljc4Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUsMCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaTTI0LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgydjZIMjZBMiwyLDAsMCwx''@;'; put 'put ''LDI0LDE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40Niw3LjQ2LDAsMCwxLTQtMS4xOEEyLDIsMCwwLDEsMjQsMTRIMTJhMiwyLDAsMCwxLTItMlY2aDJ2NkgyNS41NGE3LjQ1LDcuNDUsMCwwLDEt''@;'; put 'put ''Mi43Ni04SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTI2LDMwSDEwVjIxLjVBMS41LDEuNSwwLDAsMSwxMS41LDIwaDEzQTEuNSwxLjUsMCwwLDEsMjYsMjEuNVoiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTRIMTJhMiwyLDAsMCwxLTItMlY2aDJ2Nmg2LjU4QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIyLjQ1LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0y''@;'; put 'put ''NiwzMEgxMFYyMS41QTEuNSwxLjUsMCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUEx''@;'; put 'put ''LjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+''@;'; put 'put ''XG4gICAgICAgICcpLGguQ2xyU2hhcGVDb21wdXRlcj0oMCxzLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuNiAyMi44OCA5LjYgMTAuNiAyNC40IDEwLjYgMjUuOTggOSA4IDkgOCAyMi44OCA5LjYgMjIuODgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNiw3SDMwVjIzaDJWNi41QTEuNSwxLjUsMCwwLDAsMzAuNSw1SDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0LDEuNjQsMCwwLDAsMS41''@;'; put 'put ''LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2''@;'; put 'put ''YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTkuNiwyMi44OFYxMC42aDkuMTRBMy42NCwzLjY0LDAsMCwxLDE5LDkuODlMMTkuNTYsOUg4VjIyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LDdIMjAuNzFsMS4x''@;'; put 'put ''NS0ySDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMzAiIHk9IjE1LjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjcuNiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEEx''@;'; put 'put ''LjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMSwyNXYzLjRBMi42LDIuNiwwLDAsMCwzLjYsMzFIMzIuMzRhMi42''@;'; put 'put ''LDIuNiwwLDAsMCwyLjYtMi42VjI1Wm0zMiwzLjRhLjYuNiwwLDAsMS0uNi42SDMuNTZhLjYuNiwwLDAsMS0uNi0uNlYyNi41M2g5Ljk1YTEuNjQsMS42NCwwLDAsMCwxLjUsMWg3LjEzYTEuNjQsMS42NCwwLDAsMCwxLjUtMUgzM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjA3LTFINS41QTEuNSwxLjUsMCwwLDAsNCw2LjVWMjNINlY3SDIyLjU3QTcuNTIsNy41MiwwLDAsMSwyMi41LDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjIzaDJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDhWMjIuODhIOS42VjEwLjZIMjQuMDhBNy40OSw3LjQ5LDAsMCwxLDIzLjEzLDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45LS45NCwxLjUtMS42MSwxLjVIMTMuNzRjLS42OCwwLTEu''@;'; put 'put ''MjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYsMzBIMzIuNEEyLjQ1LDIuNDUsMCwwLDAsMzUsMjcuNzVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNywxMEgyOVYyNGgzVjcuNTdBMS41''@;'; put 'put ''NCwxLjU0LDAsMCwwLDMwLjUsNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0x''@;'; put 'put ''LjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjki''@;'; put 'put ''IHk9IjE1LjQiIHdpZHRoPSIzIiBoZWlnaHQ9IjguNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMTlMMTksOS44OSwyMS4yOSw2SDUuNUExLjU0LDEuNTQsMCwwLDAsNCw3LjU3''@;'; put 'put ''VjI0SDdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDEx''@;'; put 'put ''TDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45LS45NCwxLjUtMS42MSwx''@;'; put 'put ''LjVIMTMuNzRjLS42OCwwLTEuMjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYsMzBIMzIuNEEyLjQ1LDIuNDUsMCwwLDAsMzUsMjcuNzVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTcsMTBIMjMuNjZBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwx''@;'; put 'put ''My4yMmE3LjE0LDcuMTQsMCwwLDEtMywuMlYyNGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksaC5DbHJTaGFwZURpc3BsYXk9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCww''@;'; put 'put ''LDM0LDI1LjVWNC41QTEuNSwxLjUsMCwwLDAsMzIuNSwzWk0zMiwyNUg0VjVIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3LjcgOC43NiAyOC4xMyA4Ljc2IDI5Ljk0IDcuMTYgNi4xIDcuMTYg''@;'; put 'put ''Ni4xIDIzIDcuNyAyMyA3LjcgOC43NiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3''@;'; put 'put ''LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYx''@;'; put 'put ''LDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMy42OCwxNS40SDMyVjI1SDRWNUgyMS44N0wyMywzSDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEuNSwxLjUsMCwwLDAsMzQsMjUuNVYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcuNyAyMyA3LjcgOC43NiAxOS43IDguNzYgMjAuNjIgNy4xNiA2LjEgNy4xNiA2LjEgMjMgNy43IDIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIs''@;'; put 'put ''MCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi4xLDIzSDcuN1Y4Ljc2SDIzYTcuNDQsNy40NCwwLDAsMS0uNDMtMS42SDYuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMyLDEzLjIyVjI1SDRWNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWNC41QTEuNSwxLjUsMCwwLDAsMzIuNSwz''@;'; put 'put ''Wk0zMSwyMS44M0g1VjdIMzFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDku''@;'; put 'put ''OTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMxdjYuNDNINVY3SDIw''@;'; put 'put ''LjcxTDIzLDNIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjE1LjM4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMySDI0LjI2YTMuNjEsMy42MSwwLDAsMS0xLjUtMi41MlYyOC4xM0gxMy4yNFYyOS41QTMuNjEsMy42MSwwLDAsMSwxMS43NCwzMkg5Ljk0YTEsMSwwLDEsMCwwLDJIMjYuMDZhLjkyLjkyLDAs''@;'; put 'put ''MCwwLDEtMUExLDEsMCwwLDAsMjYsMzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDEzLjQzdjguNDFINVY3SDIyLjU3YTcuMjksNy4yOSwwLDAsMSwuNTUtNEgzLjVBMS41LDEuNSww''@;'; put 'put ''LDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWMTIuMzRBNy40NCw3LjQ0LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxj''@;'; put 'put ''aXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksaC5DbHJTaGFwZVRlcm1pbmFsPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw1SDRBMiwy''@;'; put 'put ''LDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCw3SDMyVjkuMkg0Wk00LDI5VjEwLjhIMzJWMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3''@;'; put 'put ''IiB5PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMTUuNjggMTMuNzkgMTguOCA3IDIxLjkxIDcgMjQuMTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAx''@;'; put 'put ''My40OCA3IDE1LjY4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMjQuMTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''Mi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjI5SDRWMTAuOEgxOC42OEEzLjY2LDMuNjYsMCwwLDEsMTksOS44OWwuNC0uNjlINFY3SDIwLjcxbDEuMTUtMkg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0y''@;'; put 'put ''VjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2''@;'; put 'put ''IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iNyAyNC4xMSAxNi42IDE5LjcgMTYuNiAxNy44OSA3IDEzLjQ4IDcgMTUuNjggMTMuNzkgMTguOCA3IDIx''@;'; put 'put ''LjkxIDcgMjQuMTEiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMlYyOUg0VjEwLjhIMjQuMjRhNy41MSw3LjUxLDAsMCwxLTEtMS42SDRWN0gyMi41N2E3LjUyLDcuNTIs''@;'; put 'put ''MCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''My0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDVINEEyLDIs''@;'; put 'put ''MCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk02LjgsMTUuODFWMTMuMTdsMTAsNC41OXYyLjA4bC0xMCw0LjU5VjIxLjc4bDYuNTEtM1pNMjMuNCwyNS40SDE3VjIzaDYuNFpNNCw5LjJWN0gzMlY5LjJaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsLjQtLjY5SDRWN0gyMC43MWwxLjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDIt''@;'; put 'put ''MlYxNS4zOFpNMTYuOCwxOS44M2wtMTAsNC41OVYyMS43OGw2LjUxLTMtNi41MS0zVjEzLjE3bDEwLDQuNTlabTYuNiw1LjU3SDE3VjIzaDYuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''Mi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS02Ljc4LTQuM0g0VjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCww''@;'; put 'put ''LDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk0xNi44LDE5LjgzbC0xMCw0LjU5VjIxLjc4bDYuNTEtMy02LjUxLTNWMTMuMTdsMTAsNC41OVptNi42LDUuNTdIMTdWMjNoNi40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksaC5DbHJTaGFwZUNvZGU9KDAs''@;'; put 'put ''cy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4yMSwxNi43OGwtNi41My00LjQ1QTEsMSwwLDEsMCwyMi41NSwxNGw1LjMyLDMuNjMtNS4zMiwzLjYzYTEsMSwwLDAsMCwxLjEzLDEuNjVsNi41My00LjQ1YTEsMSwwLDAsMCww''@;'; put 'put ''LTEuNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCw5LjgzYS45LjksMCwwLDAtMS4wOS42NkwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OGwz''@;'; put 'put ''LjQ0LTEzLjgxQS45LjksMCwwLDAsMTkuOTQsOS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41''@;'; put 'put ''Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC41Niwx''@;'; put 'put ''MS42MiwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OEwxOS43MywxNC40YTMuNTksMy41OSwwLDAsMS0xLjE2LTIuNzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4yMSwxNi43OGwtMi0xLjM4SDI0LjY0bDMuMjQsMi4yMS01LjMyLDMuNjNhMSwxLDAsMCwwLDEuMTMsMS42NWw2LjUzLTQuNDVhMSwxLDAsMCwwLDAtMS42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSww''@;'; put 'put ''LDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTYuNTMtNC40''@;'; put 'put ''NUExLDEsMCwxLDAsMjIuNTUsMTRsNS4zMiwzLjYzLTUuMzIsMy42M2ExLDEsMCwwLDAsMS4xMywxLjY1bDYuNTMtNC40NWExLDEsMCwwLDAsMC0xLjY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTE5Ljk0LDkuODNhLjkuOSwwLDAsMC0xLjA5LjY2TDE1LjQxLDI0LjI5YS45LjksMCwwLDAsLjY2LDEuMDlsLjIyLDBhLjkuOSwwLDAsMCwuODctLjY4bDMuNDQtMTMuODFBLjkuOSwwLDAsMCwxOS45NCw5LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxoLkNsclNo''@;'; put 'put ''YXBlQXBwbGljYXRpb249KDAscy5jbHJJY29uU1ZHKSgnPHJlY3QgeD0iNSIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0''@;'; put 'put ''PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCw2SDMydjQuMkg0Wk00LDMwVjExLjhIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFptMCw2LjJINFY2SDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IHg9IjUiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0z''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTMiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLGguQ2xyU2hhcGVCYXR0ZXJ5PSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC41OSwx''@;'; put 'put ''MS43N2ExLDEsMCwwLDAtMS43MywxbDIuNSw0LjM0LTYuMDctMSw1LjI5LDEwLjU5YTEsMSwwLDAsMCwxLjc5LS44OWwtMy41My03LjA4LDYuMzgsMS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjEy''@;'; put 'put ''LDRIMjNWMy41OEExLjU4LDEuNTgsMCwwLDAsMjEuNDIsMkgxNC41OEExLjU4LDEuNTgsMCwwLDAsMTMsMy41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAsMCw5LDUuODhWMzIuMTJBMS44OCwxLjg4LDAsMCwwLDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwyNywzMi4xMlY1Ljg4QTEu''@;'; put 'put ''ODgsMS44OCwwLDAsMCwyNS4xMiw0Wk0yNSwzMkgxMVY2aDRWNGg2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjU5LDExLjc3YTEsMSwwLDAsMC0xLjczLDFsMi41LDQuMzQtNi4wNy0xLDUuMjks''@;'; put 'put ''MTAuNTlhMSwxLDAsMCwwLDEuNzktLjg5bC0zLjUzLTcuMDgsNi4zOCwxLjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgs''@;'; put 'put ''MCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjUsMTUuNFYzMkgxMVY2aDRWNGg2VjZoLjI4bDEuNjQtMi44NUExLjU3LDEuNTcsMCwwLDAsMjEuNDIsMkgxNC41OEExLjU4LDEuNTgsMCwwLDAsMTMsMy41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAsMCw5LDUuODhWMzIuMTJBMS44OCwxLjg4LDAsMCww''@;'; put 'put ''LDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwyNywzMi4xMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguNTksMTEuNzdhMSwxLDAsMCwwLTEuNzMsMWwyLjUsNC4zNC02LjA3LTEsNS4yOSwxMC41OWExLDEsMCwwLDAsMS43OS0uODlsLTMu''@;'; put 'put ''NTMtNy4wOCw2LjM4LDEuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMTEuNThWMzJIMTFWNmg0VjRoNlY2SDIyLjVBNy40Nyw3LjQ3LDAsMCwxLDIzLDMuMzgsMS41Nywx''@;'; put 'put ''LjU3LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMuNThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEuODgsMS44OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWMTIuODdBNy41LDcuNSwwLDAsMSwyNSwx''@;'; put 'put ''MS41OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0VjIuNjJBLjYuNiwwLDAsMCwyMS40MiwySDE0LjU4YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBBMS4wOSwxLjA5LDAsMCww''@;'; put 'put ''LDksNS4wN3YyOEExLDEsMCwwLDAsMTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0di0yOEExLjA5LDEuMDksMCwwLDAsMjYsNFpNMjAuMjYsMjUuNDRhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybDQuODMsOC4zN0wx''@;'; put 'put ''Ni45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY2LDMuNjYsMCwwLDEsMjAuNTUsMTVsMi43Niw0''@;'; put 'put ''Ljc5TDE2LjksMTguN2wzLjM2LDYuNzNhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybC4wOS4xNUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwyMi40NSw0SDIyVjIuNjJBLjYuNiwwLDAsMCwyMS40MiwySDE0LjU4''@;'; put 'put ''YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBBMS4wOSwxLjA5LDAsMCwwLDksNS4wN3YyOEExLDEsMCwwLDAsMTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0VjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgyMlYyLjYyQS42LjYs''@;'; put 'put ''MCwwLDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2YTEsMSwwLDAsMCwxLS45NFYxMi44N0E3LjUsNy41LDAsMCwxLDIyLjUsNlpNMjAuMjYsMjUuNDRhMS4yLDEuMiwwLDAsMS0yLjE1LDEu''@;'; put 'put ''MDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybDQuODMsOC4zN0wxNi45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgJyksaC5DbHJTaGFwZU1vYmlsZT0oMCxzLmNs''@;'; put 'put ''ckljb25TVkcpKCc8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwyLDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyNSw0Wk0xMSw2SDI1VjI0SDExWm0wLDI0VjI2SDI1djRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwy''@;'; put 'put ''LDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyNSw0Wk0xOSwzMEgxN1YyOGgyWm0tOC00VjZIMjVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAnKSxoLkNsclNoYXBlVGFibGV0PSgwLHMuY2xySWNvblNWRykoJzxyZWN0IHg9''@;'; put 'put ''IjE3IiB5PSIyOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMkg2QTIsMiwwLDAsMCw0LDRWMzJhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAs''@;'; put 'put ''MCwwLDMwLDJabTAsMlYyNi4zOEg2VjRaTTYsMzJWMjhIMzB2NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDJINkEyLDIsMCwwLDAsNCw0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY0''@;'; put 'put ''QTIsMiwwLDAsMCwzMCwyWk0xOSwzMkgxN1YzMGgyWk02LDI4VjRIMzBWMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAnKSxoLkNsclNoYXBlTmV0d29ya0dsb2JlPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41OCwzMmgtMThh''@;'; put 'put ''MSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuNzUsMmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMSww''@;'; put 'put ''LDE3Ljc1LDJabTAsMmExMiwxMiwwLDAsMSw4LjQ0LDMuNDhjMCwuMzMsMCwuNjYsMCwxQTE4LjUxLDE4LjUxLDAsMCwwLDE0LDguNTNhMi4zMywyLjMzLDAsMCwwLTEuMTQtLjYxbC0uMjUsMGMtLjEyLS40Mi0uMjMtLjg0LS4zMi0xLjI3cy0uMTQtLjgxLS4xOS0xLjIyQTExLjkyLDExLjky''@;'; put 'put ''LDAsMCwxLDE3Ljc1LDRabS0zLDUuODdBMTcsMTcsMCwwLDEsMjUuOTIsMTBhMTYuOSwxNi45LDAsMCwxLTMuMTEsNywyLjI4LDIuMjgsMCwwLDAtMi41OC41N2MtLjM1LS4yLS43LS40LTEtLjYzYTE2LDE2LDAsMCwxLTQuOTMtNS4yMywyLjI1LDIuMjUsMCwwLDAsLjQ3LTEuNzdabS00LTMu''@;'; put 'put ''NmMwLC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIuMjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0LjIyLDEyLDEyLDAsMCwxLDEwLjc2LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwtLjY0LDBBMTEuOTQsMTEu''@;'; put 'put ''OTQsMCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYuOSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIuMzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41MywwLDAsMCw1LjM1LDUuNjVjLjQxLjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIwYTE2Ljk0LDE2Ljk0LDAs''@;'; put 'put ''MCwxLTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwxMC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwxLTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4zNCwwLDAsMCwxLjU3LTEuNzksMTguNDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYyLDE3LjQxLDE3LjQxLDAs''@;'; put 'put ''MCwwLDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEsMTcuNzUsMjhabTYuNTEtOC45YTIuMzMsMi4zMywwLDAsMC0uMzMtMS4xOSwxOC40LDE4LjQsMCwwLDAsMy4zOS03LjM3cS43NS4zNSwxLjQ4Ljc4YTEyLDEyLDAsMCwxLC40Miw4LjJBMTYsMTYsMCwwLDEsMjQuMjcsMTkuMTFaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFs''@;'; put 'put ''ZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzMsMTUuNGgtMmMwLC4yLDAsLjQsMCwuNjFhMTIsMTIsMCwwLDEtLjUzLDMuNTIsMTYsMTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4Ljg3LDE4Ljg3LDAsMCwwLDEuNjItMi41MkgyMy44M2ExNy4y''@;'; put 'put ''OSwxNy4yOSwwLDAsMS0xLDEuNTQsMi4yOCwyLjI4LDAsMCwwLTIuNTguNTdjLS4zNS0uMi0uNy0uNC0xLS42M2ExNiwxNiwwLDAsMS00LjkzLTUuMjMsMi4yNSwyLjI1LDAsMCwwLC40Ny0xLjc3QTE3LjA4LDE3LjA4LDAsMCwxLDE5LjU2LDlsLjg3LTEuNTFhMTguNTksMTguNTksMCwwLDAt''@;'; put 'put ''Ni4zOSwxLDIuMzMsMi4zMywwLDAsMC0xLjE0LS42MWwtLjI1LDBjLS4xMi0uNDItLjIzLS44NC0uMzItMS4yN3MtLjE0LS44MS0uMTktMS4yMkExMS44OCwxMS44OCwwLDAsMSwyMiw0Ljc5TDIzLDNBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0''@;'; put 'put ''LDAsMCwwLDMxLjc2LDE2QzMxLjc2LDE1LjgsMzEuNzQsMTUuNiwzMS43MywxNS40Wm0tMjEtOS4xM2MwLC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIuMjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0LjIyLDEyLDEyLDAsMCwxLDEwLjc2''@;'; put 'put ''LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwtLjY0LDBBMTEuOTQsMTEuOTQsMCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYuOSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIuMzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41MywwLDAsMCw1LjM1LDUuNjVjLjQx''@;'; put 'put ''LjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIwYTE2Ljk0LDE2Ljk0LDAsMCwxLTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwxMC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwxLTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4zNCwwLDAsMCwxLjU3LTEuNzksMTgu''@;'; put 'put ''NDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYyLDE3LjQxLDE3LjQxLDAsMCwwLDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEsMTcuNzUsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjUsMTMuMzVhNy41NCw3LjU0LDAsMCwxLTEuNS4xNWwtLjUxLDBhMTEuOTEsMTEuOTEsMCwwLDEtLjI1LDYsMTYsMTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4LjU5LDE4LjU5LDAsMCwwLDIu''@;'; put 'put ''NzgtNS4xOCw3LjQ5LDcuNDksMCwwLDEtMS4zMS0uODIsMTcsMTcsMCwwLDEtMi42MSw1LDIuMjgsMi4yOCwwLDAsMC0yLjU4LjU3Yy0uMzUtLjItLjctLjQtMS0uNjNhMTYsMTYsMCwwLDEtNC45My01LjIzLDIuMjUsMi4yNSwwLDAsMCwuNDctMS43NywxNywxNywwLDAsMSw4LjUzLS42Miw3''@;'; put 'put ''LjQzLDcuNDMsMCwwLDEtLjU2LTEuNTlBMTguNTYsMTguNTYsMCwwLDAsMTQsOC41M2EyLjMzLDIuMzMsMCwwLDAtMS4xNC0uNjFsLS4yNSwwYy0uMTItLjQyLS4yMy0uODQtLjMyLTEuMjdzLS4xNC0uODEtLjE5LTEuMjJBMTEuOTIsMTEuOTIsMCwwLDEsMjIuNTcsNWE3LjQ1LDcuNDUsMCww''@;'; put 'put ''LDEsLjUzLTJBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwYTE0LDE0LDAsMSwwLDI3LjY4LTRaTTEwLjc2LDYuMjdjMCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCwwLTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCww''@;'; put 'put ''LDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODksMi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcu''@;'; put 'put ''NTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4yNy44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAsMS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEy''@;'; put 'put ''LjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQzLDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAsMCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2''@;'; put 'put ''LjU4LDMyaC0xOGExLDEsMCwxLDAsMCwyaDE4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjcyLDkuODdhMi4yNSwyLjI1LDAsMCwxLS40NywxLjc3LDE2LDE2LDAsMCwwLDQuOTMsNS4y''@;'; put 'put ''M2MuMzQuMjMuNjkuNDMsMSwuNjNhMi4yOCwyLjI4LDAsMCwxLDIuNTgtLjU3LDE2LjksMTYuOSwwLDAsMCwzLjExLTdBMTcsMTcsMCwwLDAsMTQuNzIsOS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuNzUs''@;'; put 'put ''MmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMSwwLDE3Ljc1LDJaTTI4LjEsMjEuMDlhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAs''@;'; put 'put ''MS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcu''@;'; put 'put ''NTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQz''@;'; put 'put ''LS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjUxLDE4LjUxLDAsMCwxLDEyLjExLS4wN2MwLS4zMiwwLS42NSwwLTFo''@;'; put 'put ''MGExMiwxMiwwLDAsMSwyLjYyLDMuODVoMHEtLjczLS40My0xLjQ4LS43OGExOC40LDE4LjQsMCwwLDEtMy4zOSw3LjM3LDIuMzMsMi4zMywwLDAsMSwuMzMsMS4xOSwyMiwyMiwwLDAsMCw1LC40NSwxMS44OCwxMS44OCwwLDAsMS0uNjEsMS41M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMzEuNzMsMTUuNEgyNS41NmExOC44NywxOC44NywwLDAsMS0xLjYyLDIuNTIsMi4zMywyLjMzLDAsMCwxLC4zMywxLjE5LDIyLDIyLDAsMCwwLDUsLjQ1LDExLjg4LDExLjg4LDAsMCwxLS42MSwxLjUzSDI4LjFhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAs''@;'; put 'put ''MCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAs''@;'; put 'put ''MCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1''@;'; put 'put ''LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4''@;'; put 'put ''LjUzYTE4LjU5LDE4LjU5LDAsMCwxLDYuMzktMUwyMywzQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDAsMCwzMS43NiwxNkMzMS43NiwxNS44LDMxLjc0LDE1LjYsMzEuNzMsMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuMjYsMTEuNjRhMTYsMTYsMCwwLDAsNC45Myw1LjIzYy4zNC4yMy42OS40MywxLC42M2EyLjI4LDIuMjgsMCwwLDEsMi41OC0uNTcsMTcuMjksMTcuMjksMCwwLDAsMS0xLjU0aC0xLjZBMy42''@;'; put 'put ''OCwzLjY4LDAsMCwxLDE5LDkuODlMMTkuNTYsOWExNy4wOCwxNy4wOCwwLDAsMC00Ljg0Ljg4LDIuMjUsMi4yNSwwLDAsMS0uNDcsMS43N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zMS41LDEzLjM1YTcuNTQsNy41NCwwLDAsMS0xLjUuMTUsNy40Niw3LjQ2LDAsMCwxLTMuMjgtLjc2LDE4LjU5LDE4LjU5LDAsMCwxLTIuNzgsNS4xOCwyLjMzLDIuMzMsMCwwLDEsLjMzLDEuMTksMjIsMjIsMCwwLDAsNSwuNDUsMTEuODgsMTEuODgsMCwwLDEtLjYxLDEuNTNI''@;'; put 'put ''MjguMWExNy40MSwxNy40MSwwLDAsMS00LjMyLS41NiwyLjI5LDIuMjksMCwwLDEtMywuNjIsMTguNDMsMTguNDMsMCwwLDEtNywzLjUsMi4zNCwyLjM0LDAsMCwxLTEuNTcsMS43OWwtLjI5LjA2YTExLjkzLDExLjkzLDAsMCwxLTMuMzktMi44bC42NiwwYTIuMzMsMi4zMywwLDAsMSw0LjM3''@;'; put 'put ''LS41OEExNi45NCwxNi45NCwwLDAsMCwxOS43OCwyMGEyLjMyLDIuMzIsMCwwLDEtLjE4LTEuMTdjLS40Mi0uMjQtLjg0LS40OS0xLjI1LS43NkExNy41MywxNy41MywwLDAsMSwxMywxMi40N2EyLjMxLDIuMzEsMCwwLDEtMi4yOC0uNjMsMjcuMzEsMjcuMzEsMCwwLDAtNSw0Ljc0YzAtLjIs''@;'; put 'put ''MC0uMzksMC0uNTdhMTIsMTIsMCwwLDEsLjE0LTEuNzMsMTguNzUsMTguNzUsMCwwLDEsNC4yLTMuOCwyLjI4LDIuMjgsMCwwLDEsMS4xLTIuMjVjLS4xMi0uNDMtLjI0LS44Ni0uMzMtMS4zLDAtLjE0LDAtLjI5LS4xMS0uNjRhMTIsMTIsMCwwLDEsMS4zNy0uODdjLjEuNTkuMTQuOS4yMSwx''@;'; put 'put ''LjIxcy4yLjg1LjMyLDEuMjdsLjI1LDBBMi4zMywyLjMzLDAsMCwxLDE0LDguNTNhMTguNTYsMTguNTYsMCwwLDEsOC42NS0uODcsNy40NSw3LjQ1LDAsMCwxLC40MS00LjU5QTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMGExNCwxNCwwLDEsMCwyNy42OC00''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC43Miw5Ljg3YTIuMjUsMi4yNSwwLDAsMS0uNDcsMS43NywxNiwxNiwwLDAsMCw0LjkzLDUuMjNjLjM0LjIzLjY5LjQzLDEsLjYzYTIuMjgs''@;'; put 'put ''Mi4yOCwwLDAsMSwyLjU4LS41NywxNywxNywwLDAsMCwyLjYxLTUsNy41Miw3LjUyLDAsMCwxLTIuMTYtMi42N0ExNywxNywwLDAsMCwxNC43Miw5Ljg3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksaC5DbHJTaGFwZU5ldHdvcmtTZXR0aW5ncz0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuODUs''@;'; put 'put ''MjcuNDRhMi4yOSwyLjI5LDAsMCwwLDEuNzQtMS42OGMuNTQtLjE0LDEuMDYtLjMyLDEuNTktLjUxdi0xLjJhMi43NywyLjc3LDAsMCwxLC4wNi0uNTEsMTcuNDQsMTcuNDQsMCwwLDEtMS44Mi42MiwyLjI4LDIuMjgsMCwwLDAtNC4yOC42M2wtLjQ1LDBoMGExMS45MywxMS45MywwLDAsMS0y''@;'; put 'put ''Ljg4LTcuMjcsMTcuNzksMTcuNzksMCwwLDEsNS00LjcyLDIuMjMsMi4yMywwLDAsMCwyLjI5LjU2LDE4LjUyLDE4LjUyLDAsMCwwLDQuNDcsNSwyLjc0LDIuNzQsMCwwLDEsLjIxLS4yNGwuOTUtLjkxYTE2LjksMTYuOSwwLDAsMS00LjM1LTQuNzksMi4yNywyLjI3LDAsMCwwLC4zNS0xLjJj''@;'; put 'put ''MC0uMDcsMC0uMTQsMC0uMjJBMTcuNjksMTcuNjksMCwwLDEsMjUsMTFhMTcuNDksMTcuNDksMCwwLDEtMS4xNSwzLjM0bC4xOSwwaDEuNTZhMTksMTksMCwwLDAsLjkxLTIuNzJjLjQzLjE5Ljg0LjQxLDEuMjYuNjRhMTEuOTQsMTEuOTQsMCwwLDEsMSw0LjA5bDAsMEEyLjc3LDIuNzcsMCww''@;'; put 'put ''LDEsMzAsMTZhMi43MywyLjczLDAsMCwxLC42OC4xQTE0LDE0LDAsMSwwLDE2LjA4LDMxYTIuNzIsMi43MiwwLDAsMSwwLTJBMTEuOTMsMTEuOTMsMCwwLDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIsMCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUxLS4wOC43NmExOS4yMSwxOS4yMSww''@;'; put 'put ''LDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywxNywwLDAsMS0uNjEtMi41M0ExMS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcsMS45M3MwLC4xLDAsLjE1QTE5LjQ1''@;'; put 'put ''LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMjEuMTlBMy44NCwzLjg0LDAsMSwwLDI4Ljg4LDI1LDMuODcsMy44NywwLDAsMCwy''@;'; put 'put ''NSwyMS4xOVptMCw2LjA4QTIuMjQsMi4yNCwwLDEsMSwyNy4yOCwyNSwyLjI2LDIuMjYsMCwwLDEsMjUsMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNC4xNywyNC4xNGExLjE0LDEuMTQsMCwwLDAt''@;'; put 'put ''LjctMS4xbC0xLjU2LS40NnEtLjExLS4zMi0uMjYtLjYzbC43Mi0xLjMzYTEuMTQsMS4xNCwwLDAsMC0uMjEtMS4zNGwtMS4zNC0xLjMyYTEuMTQsMS4xNCwwLDAsMC0xLjM0LS4ybC0xLjM0LjcxYTcuMjgsNy4yOCwwLDAsMC0uNjctLjI4TDI3LDE2LjcxYTEuMTQsMS4xNCwwLDAsMC0xLjA4''@;'; put 'put ''LS43NkgyNGExLjE0LDEuMTQsMCwwLDAtMS4wOC44bC0uNDQsMS40M2E3LjMyLDcuMzIsMCwwLDAtLjY4LjI4bC0xLjMyLS43YTEuMTQsMS4xNCwwLDAsMC0xLjMzLjE5bC0xLjM3LDEuMzFhMS4xNCwxLjE0LDAsMCwwLS4yMSwxLjM1bC43LDEuMjhxLS4xNi4zMi0uMjguNjVMMTYuNTgsMjNh''@;'; put 'put ''MS4xMywxLjEzLDAsMCwwLS44MSwxLjA5djEuODdBMS4xNCwxLjE0LDAsMCwwLDE2LjU5LDI3bDEuNDcuNDRxLjEyLjMyLjI4LjY0bC0uNzIsMS4zNWExLjE0LDEuMTQsMCwwLDAsLjIsMS4zNWwxLjM0LDEuMzJhMS4xNCwxLjE0LDAsMCwwLDEuMzQuMmwxLjM3LS43MnEuMzEuMTQuNjMuMjZs''@;'; put 'put ''LjQ0LDEuNDdhMS4xNCwxLjE0LDAsMCwwLDEuMDkuOGgxLjlBMS4xNCwxLjE0LDAsMCwwLDI3LDMzLjMxbC40NC0xLjQ3Yy4yMS0uMDcuNDItLjE2LjYyLS4yNWwxLjM4LjczYTEuMTQsMS4xNCwwLDAsMCwxLjMzLS4ybDEuMzQtMS4zMmExLjE0LDEuMTQsMCwwLDAsLjIxLTEuMzVsLS43My0x''@;'; put 'put ''LjM0cS4xNC0uMy4yNS0uNmwxLjUtLjQ0QTEuMTMsMS4xMywwLDAsMCwzNC4xNywyNlptLTEuNiwxLjUtMiwuNTgtLjEyLjQyQTUuNTUsNS41NSwwLDAsMSwzMCwyNy43M2wtLjIxLjM4LDEsMS43OS0uODYuODQtMS44Mi0xLS4zNy4yYTUuNzgsNS43OCwwLDAsMS0xLjEyLjQ2bC0uNDIuMTIt''@;'; put 'put ''LjU5LDJIMjQuMzhsLS41OS0xLjk1LS40Mi0uMTJBNS44Niw1Ljg2LDAsMCwxLDIyLjI0LDMwbC0uMzctLjItMS44MSwxLS44Ni0uODUsMS0xLjgyLS4yMi0uMzhhNS42LDUuNiwwLDAsMS0uNDktMS4xM2wtLjEzLS40MS0xLjk1LS41OFYyNC40MmwxLjk0LS41OC4xMi0uNDFhNS41Myw1LjUz''@;'; put 'put ''LDAsMCwxLC40OS0xLjE0bC4yMi0uMzktMS0xLjczLjg3LS44NCwxLjc3Ljk0LjM4LS4yMWE1LjgsNS44LDAsMCwxLDEuMTctLjQ5bC40MS0uMTIuNTktMS45MWgxLjIzbC41OCwxLjkuNDEuMTJhNS43OSw1Ljc5LDAsMCwxLDEuMTYuNDhsLjM4LjIxLDEuOC0uOTUuODYuODUtMSwxLjc3LjIx''@;'; put 'put ''LjM4YTUuNTMsNS41MywwLDAsMSwuNDcsMS4xM2wuMTIuNDIsMS45My41N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDIzLjYzLDMyLDIzYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3''@;'; put 'put ''LjM3LDAsMCwwLS4wNy0uNDRMMzAuOSwxNy44NmEuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxYTcsNywwLDAsMC0xLjQzLS42MWwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFMMjAsMTcuOGEuMzcu''@;'; put 'put ''MzcsMCwwLDAtLjQ0LjA3TDE4LDE5LjMxYS4zNy4zNywwLDAsMC0uMDcuNDRsMSwxLjgyQTcsNywwLDAsMCwxOC4zNSwyM2wtMiwuNjFhLjM3LjM3LDAsMCwwLS4yNi4zNXYyYS4zNy4zNywwLDAsMCwuMjYuMzVsMiwuNjFBNyw3LDAsMCwwLDE5LDI4LjM3bC0xLDEuOWEuMzcuMzcsMCwwLDAs''@;'; put 'put ''LjA3LjQ0bDEuNDUsMS40NWEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCwwLDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAsLjM1LjI2aDJhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0''@;'; put 'put ''LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OEE3LDcsMCwwLDAsMzEuOTUsMjdsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0uMzVWMjRBLjM3LjM3LDAsMCwwLDM0LDIzLjYzWm0tOC44Myw0LjcyQTMuMzMsMy4zMywwLDEsMSwyOC41MywyNSwzLjMzLDMuMzMsMCww''@;'; put 'put ''LDEsMjUuMTksMjguMzRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjg1LDI3LjQ0YTIuMjksMi4yOSwwLDAsMCwxLjc0LTEuNjgsMTkuNzEsMTkuNzEsMCwwLDAsMS44OS0uNlYyMy45NWEyLDIsMCwwLDEsLjA5''@;'; put 'put ''LS41NSwxNy40MiwxNy40MiwwLDAsMS0yLjE3Ljc4LDIuMjgsMi4yOCwwLDAsMC00LjI4LjYzbC0uNDUsMGgwYTExLjkzLDExLjkzLDAsMCwxLTIuODgtNy4yNywxNy43OSwxNy43OSwwLDAsMSw1LTQuNzIsMi4yMywyLjIzLDAsMCwwLDIuMjkuNTYsMTguNTIsMTguNTIsMCwwLDAsNC42NSw1''@;'; put 'put ''LjA5LDEuOTMsMS45MywwLDAsMSwuMjMtLjMybC44OS0uODdhMTYuODksMTYuODksMCwwLDEtNC40OS00Ljg5LDIuMjcsMi4yNywwLDAsMCwuMzUtMS4yYzAtLjA3LDAtLjE0LDAtLjIyQTE3LjY5LDE3LjY5LDAsMCwxLDI1LDExYTE3LjQ5LDE3LjQ5LDAsMCwxLTEuMTUsMy4zNSwxLjk0LDEu''@;'; put 'put ''OTQsMCwwLDEsLjMxLS4wNWgxLjQ1YTE5LjA2LDE5LjA2LDAsMCwwLC45LTIuN2MuNDMuMTkuODQuNDEsMS4yNi42NGExMS45MywxMS45MywwLDAsMSwxLDQuNjNsMS0uNTFhMiwyLDAsMCwxLC45Mi0uMjNoLjA4QTE0LDE0LDAsMSwwLDE2LjQ0LDMxYTEuOTQsMS45NCwwLDAsMSwuMTItMS40''@;'; put 'put ''NmwuMjgtLjUzaC0uMDdBMTEuOTEsMTEuOTEsMCwwLDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIsMCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUxLS4wOC43NmExOS4yMSwxOS4yMSwwLDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywxNywwLDAsMS0uNjEtMi41''@;'; put 'put ''M0ExMS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcsMS45M3MwLC4xLDAsLjE1QTE5LjQ1LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgJyksaC5DbHJTaGFwZU5ldHdvcmtTd2l0Y2g9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjkxLDE4LjQ3LDMwLjc4LDguNDFBMiwyLDAsMCwwLDI4Ljg3LDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDks''@;'; put 'put ''MTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3Wk0zMiwyN0g0VjE5LjA2TDcuMTMsOUgyOC44N0wzMiwxOS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0i''@;'; put 'put ''MyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3LjEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4x''@;'; put 'put ''MiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt''@;'; put 'put ''LWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3LjEiIHk9''@;'; put 'put ''IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3LDMzLDE1LjRIMzAuODZMMzIsMTkuMDZWMjdINFYxOS4wNkw3LjEzLDlIMTkuNTZsMS4xNS0ySDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40''@;'; put 'put ''MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2QTIsMiwwLDAsMCwzMy45MSwxOC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3LjExIiB5PSIyMiIgd2lkdGg9IjEu''@;'; put 'put ''OCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cmVjdCB4PSI2LjIzIiB5PSIxOCIgd2lkdGg9IjIzLjY5IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3bC0xLjY1LTUuMzJhNy40OSw3LjQ5''@;'; put 'put ''LDAsMCwxLTIsLjMzTDMyLDE5LjA2VjI3SDRWMTkuMDZMNy4xMyw5aDE2YTcuNDUsNy40NSwwLDAsMS0uNTUtMkg3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCww''@;'; put 'put ''LDAsMzMuOTEsMTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC04LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTEsMTguNDcsMzAuNzgsOC40MUEyLDIsMCwwLDAsMjguODcsN0g3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJI''@;'; put 'put ''MzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaTTguOTIsMjVINy4xMlYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwaC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMxWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIwLjcxLDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAs''@;'; put 'put ''MiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZhMiwyLDAsMCwwLS4wOS0uNTlaTTguOTIsMjVINy4xMlYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwaC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMxWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEu''@;'; put 'put ''MjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEzLjE1QTcuNDksNy40OSwwLDAsMSwyMi41Nyw3SDcuMTNBMiwyLDAs''@;'; put 'put ''MCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2YTIsMiwwLDAsMC0uMDktLjU5Wk04LjkyLDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFW''@;'; put 'put ''MjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLGguQ2xyU2hhcGVSb3V0ZXI9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDE0Ljg3bDUuMTEtNS4xNGExLDEsMCwxLDAtMS40Mi0xLjQxTDE5LDExVjMuMzNhMSwxLDAsMCww''@;'; put 'put ''LTIsMFYxMUwxNC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMS4xM2wtNS4xMSw1LjE0YTEsMSwwLDAsMCwxLjQyLDEuNDFMMTcsMjV2Ny42OWExLDEs''@;'; put 'put ''MCwwLDAsMiwwVjI1bDIuNjksMi43MWExLDEsMCwwLDAsMS40Mi0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xNSwxN0gyMi40NmExLDEs''@;'; put 'put ''MCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwxLjQyTDM0LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNS44NSwxOWg3LjY5YTEsMSwwLDAsMCwwLTJINS44NWwyLjcxLTIuNjlh''@;'; put 'put ''MSwxLDAsMSwwLTEuNDEtMS40MkwyLDE4bDUuMTQsNS4xMWExLDEsMCwxLDAsMS40MS0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjEuMTNsLTUuMTEsNS4xNGExLDEsMCwwLDAsMS40MiwxLjQx''@;'; put 'put ''TDE3LDI1djcuNjlhMSwxLDAsMCwwLDIsMFYyNWwyLjY5LDIuNzFhMSwxLDAsMCwwLDEuNDItMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEs''@;'; put 'put ''MCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMxLjM4LDE1LjRIMjguNTRMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40MkwzNCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTE4LDE0Ljg3bDEuMTUtMS4xNi0uMS0uMTVBMy42OCwzLjY4LDAsMCwxLDE5LDEwVjMuMzNhMSwxLDAsMCwwLTIsMFYxMUwxNC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxNC44N2w1LjExLTUuMTRhMSwxLDAsMSwwLTEuNDItMS40MUwxOSwxMVYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEs''@;'; put 'put ''OC4zMmExLDEsMCwxLDAtMS40MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIxLjEzbC01LjExLDUuMTRhMSwxLDAsMCwwLDEuNDIsMS40MUwxNywyNXY3LjY5YTEs''@;'; put 'put ''MSwwLDAsMCwyLDBWMjVsMi42OSwyLjcxYTEsMSwwLDAsMCwxLjQyLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAsMCwwLTEuNDEsMS40Mkwz''@;'; put 'put ''MC4xNSwxN0gyMi40NmExLDEsMCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwxLjQyTDM0LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuODUsMTlo''@;'; put 'put ''Ny42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxLjY3YTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCww''@;'; put 'put ''LDE4LDEuNjdaTTEzLjg2LDkuOTJhLjguOCwwLDAsMSwxLjEzLDBsMi4yMSwyLjE5VjUuOTNhLjguOCwwLDAsMSwxLjYsMHY2LjE4TDIxLDkuOTJhLjguOCwwLDEsMSwxLjEzLDEuMTRMMTgsMTUuMTVsLTQuMTQtNC4xQS44LjgsMCwwLDEsMTMuODYsOS45MlpNMTAuMzIsMjEuNzRhLjguOCww''@;'; put 'put ''LDAsMS0xLjEzLDBMNSwxNy42N2w0LjE5LTQuMDlhLjguOCwwLDEsMSwxLjEyLDEuMTRsLTIuMiwyLjE0aDYuMjdhLjguOCwwLDAsMSwwLDEuNkg4LjExbDIuMiwyLjE1QS44LjgsMCwwLDEsMTAuMzIsMjEuNzRabTExLjgyLDMuNjdhLjguOCwwLDAsMS0xLjEzLDBMMTguOCwyMy4yM1YyOS40''@;'; put 'put ''YS44LjgsMCwwLDEtMS42LDBWMjMuMjNMMTUsMjUuNDJhLjguOCwwLDEsMS0xLjEzLTEuMTRMMTgsMjAuMThsNC4xNCw0LjFBLjguOCwwLDAsMSwyMi4xNCwyNS40MVptNC42Ny0zLjY2YS44LjgsMCwxLDEtMS4xMi0xLjE0bDIuMi0yLjE1SDIxLjYzYS44LjgsMCwwLDEsMC0xLjZoNi4yN2wt''@;'; put 'put ''Mi4yLTIuMTRhLjguOCwwLDEsMSwxLjEyLTEuMTRMMzEsMTcuNjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgyLDE1LjM5SDI4LjY4TDMxLDE3LjY3bC00LjE5LDQuMDlhLjguOCwwLDEsMS0xLjEyLTEuMTRs''@;'; put 'put ''Mi4yLTIuMTVIMjEuNjNhLjguOCwwLDAsMSwwLTEuNmg2LjI3bC0xLjUtMS40N0gyMi4yM2EzLjY4LDMuNjgsMCwwLDEtMy0xLjUxTDE4LDE1LjE1bC00LjE0LTQuMUEuOC44LDAsMSwxLDE1LDkuOTJsMi4yMSwyLjE5VjUuOTNhLjguOCwwLDAsMSwxLjYsMHY0LjQ5QTMuNjUsMy42NSwwLDAs''@;'; put 'put ''MSwxOSw5Ljg5bDQuMjItNy4zMUExNiwxNiwwLDEsMCwzNCwxNy42NywxNiwxNiwwLDAsMCwzMy44MiwxNS4zOVptLTIzLjUsNi4zNWEuOC44LDAsMCwxLTEuMTMsMEw1LDE3LjY3bDQuMTktNC4wOWEuOC44LDAsMSwxLDEuMTIsMS4xNGwtMi4yLDIuMTRoNi4yN2EuOC44LDAsMCwxLDAsMS42''@;'; put 'put ''SDguMTFsMi4yLDIuMTVBLjguOCwwLDAsMSwxMC4zMiwyMS43NFptMTEuODIsMy42N2EuOC44LDAsMCwxLTEuMTMsMEwxOC44LDIzLjIzVjI5LjRhLjguOCwwLDAsMS0xLjYsMFYyMy4yM0wxNSwyNS40MmEuOC44LDAsMSwxLTEuMTMtMS4xNEwxOCwyMC4xOGw0LjE0LDQuMUEuOC44LDAsMCwx''@;'; put 'put ''LDIyLjE0LDI1LjQxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjIyLDEyLjc2QTcuNDksNy40''@;'; put 'put ''OSwwLDAsMSwyMy4zMiwyLjZhMTYsMTYsMCwxLDAsOS45LDEwLjE3Wk0xMy44Niw5LjkyYS44LjgsMCwwLDEsMS4xMywwbDIuMjEsMi4xOVY1LjkzYS44LjgsMCwwLDEsMS42LDB2Ni4xOEwyMSw5LjkyYS44LjgsMCwxLDEsMS4xMywxLjE0TDE4LDE1LjE1bC00LjE0LTQuMUEuOC44LDAsMCwx''@;'; put 'put ''LDEzLjg2LDkuOTJaTTEwLjMyLDIxLjc0YS44LjgsMCwwLDEtMS4xMywwTDUsMTcuNjdsNC4xOS00LjA5YS44LjgsMCwxLDEsMS4xMiwxLjE0bC0yLjIsMi4xNGg2LjI3YS44LjgsMCwwLDEsMCwxLjZIOC4xMWwyLjIsMi4xNUEuOC44LDAsMCwxLDEwLjMyLDIxLjc0Wm0xMS44MiwzLjY3YS44''@;'; put 'put ''LjgsMCwwLDEtMS4xMywwTDE4LjgsMjMuMjNWMjkuNGEuOC44LDAsMCwxLTEuNiwwVjIzLjIzTDE1LDI1LjQyYS44LjgsMCwxLDEtMS4xMy0xLjE0TDE4LDIwLjE4bDQuMTQsNC4xQS44LjgsMCwwLDEsMjIuMTQsMjUuNDFabTQuNjctMy42NmEuOC44LDAsMSwxLTEuMTItMS4xNGwyLjItMi4x''@;'; put 'put ''NUgyMS42M2EuOC44LDAsMCwxLDAtMS42aDYuMjdsLTIuMi0yLjE0YS44LjgsMCwxLDEsMS4xMi0xLjE0TDMxLDE3LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYi''@;'; put 'put ''IHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksaC5DbHJTaGFwZVZNPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMSw1SDI1VjhoMlY1YTIsMiwwLDAsMC0yLTJIMTFBMiwy''@;'; put 'put ''LDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMEgxN3YyaDh2NmgyVjEyaDNWMjZIMjJWMTdhMiwyLDAsMCwwLTItMkg2YTIsMiwwLDAsMC0yLDJWMzFhMiwyLDAsMCwwLDIs''@;'; put 'put ''MkgyMGEyLDIsMCwwLDAsMi0yVjI4aDhhMiwyLDAsMCwwLDItMlYxMkEyLDIsMCwwLDAsMzAsMTBaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMTEsNUgyMS44N0wyMywzSDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNS4wMSIgeT0iMTUuNCIgd2lkdGg9IjEuOTkiIGhl''@;'; put 'put ''aWdodD0iMi42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS40VjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBh''@;'; put 'put ''MiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTUuNFpNNiwzMVYxN0gyMHY5SDE2VjIwSDE0djZhMiwyLDAsMCwwLDIsMmg0djNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xNywxMHYyaDEuNTdBMy42NywzLjY3LDAsMCwxLDE5LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTEsNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMTFBMiwyLDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMu''@;'; put 'put ''NWgwVjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJo''@;'; put 'put ''NHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDEyaDh2NmgyVjEyLjg3QTcuNTIsNy41MiwwLDAsMSwyMy42NiwxMEgxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZIMjdWNWEyLDIsMCwwLDAtMi0ySDExQTIsMiwwLDAsMCw5LDV2OC40aDQuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDE3LjE5''@;'; put 'put ''YTIsMiwwLDAsMC0yLDJ2MS40SDIwQTMuNiwzLjYsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCww''@;'; put 'put ''LDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTJBMiwyLDAsMCwwLDMwLDEwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZoMi43MkwyMywzSDExQTIsMiwwLDAsMCw5''@;'; put 'put ''LDV2OC40aDQuNTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjE5LDEwYTIsMiwwLDAsMC0yLDJ2MS40SDE5QTMuNjgsMy42OCwwLDAsMSwxOSwxMFoiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMjEsMTUuNEEzLjU1LDMuNTUsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwy''@;'; put 'put ''LDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZIMjIuOUE3LjQ1LDcuNDUsMCwwLDEsMjMuMTMsM0gxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ5LDcuNDksMCwwLDEsMjMuNjYsMTBIMTcuMTlhMiwyLDAsMCwwLTIsMnYxLjRIMjBBMy42LDMuNiwwLDAsMSwyMy42LDE3djhIMjJWMTdhMiwyLDAsMCwwLTItMkg2''@;'; put 'put ''YTIsMiwwLDAsMC0yLDJWMzFhMiwyLDAsMCwwLDIsMkgyMGEyLDIsMCwwLDAsMi0yVjI5LjZIMTcuMTlhMy42LDMuNiwwLDAsMS0zLjYtMy42VjIwaDEuNnY2YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAg''@;'; put 'put ''ICAgICcpLGguQ2xyU2hhcGVWTVdBcHA9KDAscy5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAyOCAyMCAyOCAyMCAzMiAzMiAzMiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE0IDMwIDYgMzAgNiAyMiA4IDIyIDggMjAgNCAyMCA0IDMyIDE2IDMyIDE2IDI4IDE0IDI4IDE0IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29u''@;'; put 'put ''IHBvaW50cz0iOCAxNCA2IDE0IDYgNiAxNCA2IDE0IDggMTYgOCAxNiA0IDQgNCA0IDE2IDggMTYgOCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjIwIDQgMjAgOCAyMiA4IDIyIDYgMzAgNiAz''@;'; put 'put ''MCAxNCAyOCAxNCAyOCAxNiAzMiAxNiAzMiA0IDIwIDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxMSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9''@;'; put 'put ''IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''b2x5Z29uIHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIgMjAgMjggMjAgMjggMjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHln''@;'; put 'put ''b24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9''@;'; put 'put ''IjggMTQgNiAxNCA2IDYgMTQgNiAxNCA4IDE2IDggMTYgNCA0IDQgNCAxNiA4IDE2IDggMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVp''@;'; put 'put ''Z2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxOSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTI1LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2bDAtLjFWMTdoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMi40NSA0IDIwIDQgMjAgOCAy''@;'; put 'put ''MC4xNCA4IDIyLjQ1IDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjgiIHk9IjE1LjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjAuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2''@;'; put 'put ''Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAyOCAyMCAyOCAyMCAzMiAzMiAz''@;'; put 'put ''MiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAy''@;'; put 'put ''OCAxNCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE0IDYgMTQgNiA2IDE0IDYgMTQgOCAxNiA4IDE2IDQgNCA0IDQgMTYgOCAxNiA4IDE0IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTEiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iNiIgaGVp''@;'; put 'put ''Z2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNmguNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMjBWOGgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMTRIMjh2Mmg0VjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTI1LDExLjU4YTcuNTMsNy41MywwLDAsMS0uNTgtLjU4SDE5djZoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0i''@;'; put 'put ''NSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLGguQ2xyU2hhcGVDZXJ0aWZpY2F0ZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhh''@;'; put 'put ''MiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOEg0VjhIMzJsMCw4LjU2YTguNDEsOC40MSwwLDAsMSwyLDEuODFWOEEyLDIsMCwwLDAsMzIsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0i''@;'; put 'put ''NyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiww''@;'; put 'put ''LDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwy''@;'; put 'put ''Ny40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3''@;'; put 'put ''LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQu''@;'; put 'put ''MzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2QTMuNjYsMy42NiwwLDAsMSwxOC41NywxMkg3djEuNkgxOS4wN1oiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJ2MS4xNmE4LjQxLDguNDEsMCwwLDEsMiwxLjgxdi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwyOFY4SDIwLjE0bDEuMTUtMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44''@;'; put 'put ''NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2IiB3aWR0aD0iMTEiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCB4PSI3IiB5PSIyMyIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQs''@;'; put 'put ''MTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45''@;'; put 'put ''MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnYzLjM0YTguNDEsOC40MSwwLDAsMSwyLDEuODF2LTZBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjhWOEgyMi43OGE3LjQ5LDcuNDksMCwwLDEtLjI4LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRMMjAu''@;'; put 'put ''NDEsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1i''@;'; put 'put ''YWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksMzBINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgzMmEyLDIsMCwwLDEsMiwyVjE4LjM3YTguMzQsOC4zNCwwLDAsMC0xMy40OSw5Ljc5bC0uOTMsMS4xNFpNNywxMnYxLjZIMjRWMTJabTAsNS42''@;'; put 'put ''SDE4VjE2SDdabTAsN0gxN1YyM0g3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy44MywyMy41OWE2LjM3LDYuMzcsMCwxLDAtMTAuNzcsNC41OWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2''@;'; put 'put ''LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN0E2LjM0LDYuMzQsMCwwLDAsMzMuODMsMjMuNTlabS0xMC43NCwwYTQuMzcsNC4zNywwLDEsMSw0LjM3LDQuMzFBNC4zNSw0LjM1LDAsMCwxLDIzLjEsMjMuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjU5YTYuMzcsNi4zNywwLDEsMC0xMC43Nyw0LjU5bC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3QTYuMzQsNi4zNCwwLDAs''@;'; put 'put ''MCwzMy44MywyMy41OVptLTEwLjc0LDBhNC4zNyw0LjM3LDAsMSwxLDQuMzcsNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjMuMSwyMy41OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMu''@;'; put 'put ''NjgsMTUuNEgyOS4yNWE4LjM2LDguMzYsMCwwLDEsNC43NSwzdi0zWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS4wNywxMy42SDdWMTJIMTguNTdBMy42NywzLjY3LDAsMCwxLDE5''@;'; put 'put ''LDkuODlMMjEuMjksNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEE4LjM0LDguMzQsMCwwLDEsMjUuNjYsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTkuMDcsMTMuNlpNMTcsMjQuNkg3VjIzSDE3Wm0xLTdIN1YxNkgxOFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIu''@;'; put 'put ''MzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00LjQtMTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDE5bC41Ny0uNy45My0xLjE0QTguMzQsOC4zNCww''@;'; put 'put ''LDAsMSwzNCwxOC4zN3YtNkE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNMTcsMjQuNkg3VjIzSDE3Wm0xLTdIN1YxNkgxOFptNi00SDdWMTJIMjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxoLkNsclNoYXBlQXJjaGl2ZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksMzJIN1YyMkg1VjMy''@;'; put 'put ''YTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDI0YTEsMSwwLDAsMCwxLDFoNmExLDEsMCwwLDAsMC0ySDE1QTEsMSwwLDAsMCwxNCwyNFoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDE4SDZWMTRoNGEzLDMsMCwwLDEtLjY4LTEuODdzMC0uMDksMC0uMTNINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE2WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42NnMwLC4wOSwwLC4xM0EzLDMsMCwwLDEsMjYsMTRoNHY0SDIybC0yLDJIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxOS4xOGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDExLjQxbC00LDMuOTVWM2ExLDEsMCwxLDAtMiwwdjEyLjRsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNDEsMjAuNiwxOCwyMmwtMS40MS0xLjRMMTYsMjBINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjBIMjBaTTIyLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMCwxLDAtMmg2QTEsMSwwLDAs''@;'; put 'put ''MSwyMiwyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42NnMwLC4wOSwwLC4xM2EzLDMsMCwwLDEtLjg4LDIuMTJMMjIsMThIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjIsMTQuMjVhMywzLDAsMCwxLS44OC0yLjEyczAtLjA5LDAtLjEzSDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYxOEgxNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTkuMThsNi4zOC02LjM1QTEsMSwwLDEsMCwyMywxMS40MWwtNCwzLjk1VjNhMSwxLDAsMSwwLTIsMHYxMi40bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTQiIC8+XG4gICAgICAgICcpLGguQ2xyU2hhcGVVbmFyY2hpdmU9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDMySDdWMjJINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjJIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwyNGExLDEsMCwwLDAsMSwxaDZhMSwxLDAsMCwwLDAtMkgxNUExLDEsMCwwLDAsMTQsMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxOEg2VjE0aDlW''@;'; put 'put ''MTJINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE1Ljc4QTMsMywwLDAsMSwxNSwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjF2Mmg5djRIMjFhMywzLDAsMCwxLS43OCwySDMyVjEz''@;'; put 'put ''LjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsOS41NSwxNyw1LjZWMThhMSwxLDAsMSwwLDIsMFY1LjZsNCwzLjk1YTEsMSwwLDEsMCwxLjQxLTEuNDJMMTgsMS43''@;'; put 'put ''OCwxMS42MSw4LjEzQTEsMSwwLDAsMCwxMyw5LjU1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjFhMywzLDAsMCwxLTIuMjItMUg1VjMyYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMEgy''@;'; put 'put ''MC4yMUEzLDMsMCwwLDEsMTgsMjFabTQsM2ExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDAsMSwwLTJoNkExLDEsMCwwLDEsMjIsMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDEySDUuNUExLjUsMS41LDAsMCww''@;'; put 'put ''LDQsMTMuNVYxOEgxNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyMXY2SDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMyw5LjU1LDE3LDUuNlYxOGExLDEsMCwxLDAsMiwwVjUuNmw0LDMuOTVhMSwxLDAsMSwwLDEuNDEtMS40MkwxOCwxLjc4LDExLjYxLDguMTNBMSwxLDAsMCwwLDEzLDkuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00''@;'; put 'put ''IiAvPlxuICAgICAgICAnKSxoLkNsclNoYXBlQ29ubmVjdD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMTdIMjguMjNBNi4yNSw2LjI1LDAsMCwwLDIyLDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIxLDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgyMmE2LjIy''@;'; put 'put ''LDYuMjIsMCwwLDAsNi4yMi01SDM0Wk0xNy4wOCwyMkgxNC4xNWE0LjE3LDQuMTcsMCwwLDEtNC4zMS00LDQuMTcsNC4xNywwLDAsMSw0LjMxLTRoMi45NFpNMjIsMjJIMTlWMTRoM2E0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4xNywwLDAsMSwyMiwyMloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIxLDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMjMsMTdBNi4yNSw2LjI1LDAsMCwwLDIyLDEySDE5VjI0aDNhNi4yMiw2LjIyLDAsMCwwLDYuMjItNUgzNFYxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLGguQ2xyU2hhcGVEaXNj''@;'; put 'put ''b25uZWN0PSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4xNyw2QTYuMjEsNi4yMSwwLDAsMCw2LDExSDIuMTN2Mkg2YTYuMjMsNi4yMywwLDAsMCw2LjIxLDVIMTdWNlpNMTUuMSwxNkgxMi4xN2E0LjIsNC4yLDAsMCwxLTQuMzEtNCw0LjE3LDQuMTcsMCwwLDEsNC4zMS00SDE1LjFa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MiwyM0gzMC4xNGE2LjI1LDYuMjUsMCwwLDAtNi4yMS01SDE5djJIMTRhMSwxLDAsMSwwLDAsMmg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwx''@;'; put 'put ''aDV2Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy43NlptLTEwLDVIMjFWMjBoMi45NGE0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4xNywwLDAsMSwyMy45NCwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTEyLDZhNi4yMSw2LjIxLDAsMCwwLTYuMjEsNUgydjJINS44M0E2LjIzLDYuMjMsMCwwLDAsMTIsMThIMTdWNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzksMjNIMzAuMTRhNi4yNSw2LjI1''@;'; put 'put ''LDAsMCwwLTYuMjEtNUgxOXYySDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDV2Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+''@;'; put 'put ''XG4gICAgICAgICcpLGguQ2xyU2hhcGVMaW5rPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNy42LDI0LjMybC0yLjQ2LDIuNDRhNCw0LDAsMCwxLTUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMC01LjU1bDQuNjktNC42NWE0LDQsMCwwLDEsNS42MiwwLDMuODYsMy44NiwwLDAsMSwxLDEu''@;'; put 'put ''NzFBMiwyLDAsMCwwLDIxLjEsMThsMS4yOS0xLjI4YTUuODksNS44OSwwLDAsMC0xLjE1LTEuNjIsNiw2LDAsMCwwLTguNDQsMEw4LjEsMTkuNzlhNS45MSw1LjkxLDAsMCwwLDAsOC4zOSw2LDYsMCwwLDAsOC40NCwwbDMuNjUtMy42MmMtLjE3LDAtLjMzLDAtLjUsMEE4LDgsMCwwLDEsMTcu''@;'; put 'put ''NiwyNC4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjYxLDcuODJhNiw2LDAsMCwwLTguNDQsMGwtMy42NSwzLjYyYy4xNywwLC4zMywwLC40OSwwaDBhOCw4LDAsMCwxLDIuMS4yOGwyLjQ2LTIuNDRh''@;'; put 'put ''NCw0LDAsMCwxLDUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMCw1LjU1bC00LjY5LDQuNjVhNCw0LDAsMCwxLTUuNjIsMCwzLjg2LDMuODYsMCwwLDEtMS0xLjcxLDIsMiwwLDAsMC0uMjguMjNsLTEuMjksMS4yOGE1Ljg5LDUuODksMCwwLDAsMS4xNSwxLjYyLDYsNiwwLDAsMCw4LjQ0LDBsNC42''@;'; put 'put ''OS00LjY1YTUuOTIsNS45MiwwLDAsMCwwLTguMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgJyksaC5DbHJTaGFwZVVubGluaz0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSw1LDMuNTksNi40MWw5LDlMOC4xLDE5Ljc5YTUu''@;'; put 'put ''OTEsNS45MSwwLDAsMCwwLDguMzksNiw2LDAsMCwwLDguNDQsMEwyMSwyMy43OGw4LjYzLDguNjNMMzEsMzFaTTE1LjEzLDI2Ljc2YTQsNCwwLDAsMS01LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAtNS41NUwxNCwxNi43OWw1LjU4LDUuNThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS41Myw5LjIyYTQsNCwwLDAsMSw1LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAsNS41NWwtNC43OSw0Ljc2TDIzLjc4LDIxbDQuNzktNC43NmE1LjkyLDUuOTIsMCwwLDAsMC04LjM5LDYsNiwwLDAsMC04LjQ0LDBsLTQu''@;'; put 'put ''NzYsNC43NEwxNi43OCwxNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAnKSxoLkNsclNoYXBlQ2xvdWROZXR3b3JrPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMC43MSwxNS4xOHYtMUExMS4yOCwxMS4yOCwwLDAsMCwxOS41''@;'; put 'put ''NiwyLjgzaC0uMTFhMTEuMjgsMTEuMjgsMCwwLDAtMTEsOC45Myw3LjQ3LDcuNDcsMCwwLDAsMCwxNC45NEgyOS4xM2E1Ljg2LDUuODYsMCwwLDAsMS41OC0xMS41MlpNMjkuMTMsMjQuN0g4LjQ2YTUuNDcsNS40NywwLDEsMSwwLTEwLjk0aDEuNjlsLjExLS44N2E5LjI3LDkuMjcsMCwwLDEs''@;'; put 'put ''MTguNDUsMS4zdjEuMjhjMCwuMDksMCwuMTgsMCwuMjdsLS4wNywxLjE1Ljk0LjExYTMuODYsMy44NiwwLDAsMS0uNDMsNy43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjU4LDMxLjE4SDE4Ljg1di0y''@;'; put 'put ''LjRoLTJ2Mi40SDYuMDhhMSwxLDAsMCwwLDAsMmgyMy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgJyksaC5DbHJTaGFwZUNsb3VkU2NhbGU9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYuMzIsMTEu''@;'; put 'put ''MTFINy44NEw4LDEwLjI0QTcuMTksNy4xOSwwLDAsMSwxNS4wNyw0aC4wN2E3LjE1LDcuMTUsMCwwLDEsNC43MSwxLjgzLDExLjEsMTEuMSwwLDAsMSwzLjA5LjY0QTkuMTgsOS4xOCwwLDAsMCwxNS4xNiwyaC0uMDlBOS4yLDkuMiwwLDAsMCw2LjEzLDkuMTEsNi4xNSw2LjE1LDAsMCwwLDIu''@;'; put 'put ''MzMsMTkuOTUsOC4wOSw4LjA5LDAsMCwxLDMsMTcuNzFhNC4xMiw0LjEyLDAsMCwxLS44MS0yLjQ0QTQuMTYsNC4xNiwwLDAsMSw2LjMyLDExLjExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuNCwxNi45''@;'; put 'put ''MWgxLjUyTDEyLDE2YTcuMTksNy4xOSwwLDAsMSw3LjEyLTYuMjVoLjA3YTcuMTcsNy4xNywwLDAsMSw1LjcsMi45MiwxMS4wNSwxMS4wNSwwLDAsMSwyLjcyLjc3LDkuMiw5LjIsMCwwLDAtOC40LTUuNjloLS4wOWE5LjIsOS4yLDAsMCwwLTguOTQsNy4xMiw2LjE1LDYuMTUsMCwwLDAtMy42''@;'; put 'put ''NCwxMSw4LjExLDguMTEsMCwwLDEsLjc5LTIsNC4xNCw0LjE0LDAsMCwxLDMtN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjQyLDI0LjQ3di0uNjJhOS4xOCw5LjE4LDAsMCwwLTE4LjEzLTIuMTZBNi4x''@;'; put 'put ''Niw2LjE2LDAsMCwwLDE0LjQ4LDM0SDMxYTQuODgsNC44OCwwLDAsMCwxLjQ2LTkuNTNaTTMxLDMySDE0LjQ4YTQuMTYsNC4xNiwwLDEsMSwwLTguMzJIMTZsLjExLS44N2E3LjE5LDcuMTksMCwwLDEsNy4xMi02LjI1aC4wN2E3LjIxLDcuMjEsMCwwLDEsNy4xMiw3LjI1djFjMCwuMDcsMCwu''@;'; put 'put ''MTMsMCwuMmwtLjA3LDEuMTEuOTQuMTFBMi44OCwyLjg4LDAsMCwxLDMxLDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICcpLGguQ2xyU2hhcGVDbG91ZFRyYWZmaWM9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjU0LDIw''@;'; put 'put ''LjgyYS44OC44OCwwLDAsMC0uODgtLjg4SDIwLjc1bDEuMS0xLjFBLjg4Ljg4LDAsMCwwLDIwLjYsMTcuNmwtMy4yMSwzLjIyTDIwLjYsMjRhLjg4Ljg4LDAsMSwwLDEuMjUtMS4yNEwyMC43NiwyMS43aDQuOUEuODguODgsMCwwLDAsMjYuNTQsMjAuODJaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yNywyMS43YS44OC44OCwwLDEsMCwwLTEuNzZoLS41OGEuODguODgsMCwxLDAsMCwxLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMzIuMjEsMjBoLS4wNmEuODUuODUsMCwwLDAtLjg1Ljg4LjkxLjkxLDAsMCwwLC45MS44OC44OC44OCwwLDEsMCwwLTEuNzZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi41OSwxMWEu''@;'; put 'put ''ODguODgsMCwwLDAtMS4yNSwxLjI0bDEuMSwxLjFIMjcuNTNhLjg4Ljg4LDAsMSwwLDAsMS43Nmg0LjlsLTEuMDksMS4wOWEuODguODgsMCwwLDAsMS4yNSwxLjI0bDMuMjEtMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTI0LjUsMTUuMDdhLjg4Ljg4LDAsMSwwLDAtMS43NmgtLjU4YS44OC44OCwwLDEsMCwwLDEuNzZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS45LDE0LjI3YS44NS44NSwwLDAsMC0uODUt''@;'; put 'put ''Ljg4SDIxYS44OC44OCwwLDEsMCwwLDEuNzZBLjkxLjkxLDAsMCwwLDIxLjksMTQuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4zNiwyMy42NWMwLC4xMywwLC4yNiwwLC4zOWEzLjc3LDMuNzcsMCww''@;'; put 'put ''LDEtMy42MiwzLjg5SDcuMjhhNS4zMiw1LjMyLDAsMCwxLTUuMTMtNS40OEE1LjMyLDUuMzIsMCwwLDEsNy4yOCwxN0g4LjkxTDksMTYuMTJhOC45Miw4LjkyLDAsMCwxLDguNjItOGguMDhhOC40OSw4LjQ5LDAsMCwxLDYuNTYsMy4yOWgyLjM3YTEwLjU1LDEwLjU1LDAsMCwwLTguOTEtNS4y''@;'; put 'put ''NWgtLjExQTEwLjgyLDEwLjgyLDAsMCwwLDcuMjIsMTVhNy4yOCw3LjI4LDAsMCwwLTcsNy40Myw3LjI3LDcuMjcsMCwwLDAsNy4wOCw3LjQzSDI2Ljc3QTUuNzIsNS43MiwwLDAsMCwzMi4zNSwyNGEzLjc3LDMuNzcsMCwwLDAsMC0uMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJyksaC5DbHJTaGFwZURlcGxveT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAs''@;'; put 'put ''MS40MywxLjRMMzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuNTQsMTAuNzNsLTksNS4xN2ExLDEsMCwwLDAtLjUuODd2MTFhMSwx''@;'; put 'put ''LDAsMCwwLC41Ljg3bDksNS4xNWExLDEsMCwwLDAsMSwwbDktNS4xNWExLDEsMCwwLDAsLjUtLjg3di0xMWExLDEsMCwwLDAtLjUtLjg3bC05LTUuMTdBMSwxLDAsMCwwLDExLjU0LDEwLjczWk0xMSwzMS4wOGwtNy00VjE4LjQ0bDcsNFpNMTIsMjEsNC44MSwxNi44NywxMiwxMi43OGw3LjIx''@;'; put 'put ''LDQuMTJabTgsNi4wOS03LDRWMjIuNDRsNy00WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAsMS40MywxLjRMMzIsNS40NlYxMy45YTEs''@;'; put 'put ''MSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMi40NiwxMC43M2ExLDEsMCwwLDAtMSwwbC04LjY4LDVMMTIsMjFsOS4xOS01LjI2WiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTIsMjcuNzNhMSwxLDAsMCwwLC41Ljg3TDExLDMzLjQ2di0xMUwyLDE3LjI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTEzLDMzLjQ2''@;'; put 'put ''bDguNS00Ljg2YTEsMSwwLDAsMCwuNS0uODdWMTcuMjlsLTksNS4xNVoiLz5cbiAgICAgICAgJyksaC5DbHJTaGFwZUhlbGl4PSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44OCwxMy4wN2EuOS45LDAsMCwx''@;'; put 'put ''LS40OS0xLjY2bDguOTMtNS43M2EuOS45LDAsMSwxLDEsMS41Mkw5LjM3LDEyLjkyQS45LjksMCwwLDEsOC44OCwxMy4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTMuMjUsMTUuMTFhLjkuOSwwLDAsMS0u''@;'; put 'put ''NDktMS42NkwxOCwxMC4wOGEuOS45LDAsMSwxLDEsMS41MkwxMy43NCwxNUEuOS45LDAsMCwxLDEzLjI1LDE1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOS43MiwzMC4yM2EuOS45LDAsMCwxLS40OS0x''@;'; put 'put ''LjY2bDguOTMtNS43M2EuOS45LDAsMCwxLDEsMS41MkwyMC4yLDMwLjA5QS45LjksMCwwLDEsMTkuNzIsMzAuMjNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LjkyLDI1Ljk0YS45LjksMCwwLDEtLjQ5LTEu''@;'; put 'put ''NjZsNS4yNS0zLjM3YS45LjksMCwxLDEsMSwxLjUxTDE5LjQsMjUuOEEuODkuODksMCwwLDEsMTguOTIsMjUuOTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTIxLjU2LDUuNjlhMy41OSwzLjU5LDAsMCwxLC4x''@;'; put 'put ''NSwzLjUzTDE4LjgzLDE1aDIuMjVsMi40My00Ljg3YTUuNjEsNS42MSwwLDAsMC01LTguMTRIMTMuMjZsLTEsMmg2LjIyQTMuNjEsMy42MSwwLDAsMSwyMS41Niw1LjY5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9''@;'; put 'put ''Ik0zMi45MSwyMC43OEE1LjUzLDUuNTMsMCwwLDAsMjcuNjYsMTdIOS4zMWEzLjU0LDMuNTQsMCwwLDEtMy41Ni0zLjY3LDMuNjEsMy42MSwwLDAsMSwuNDItMS41NGw0LjI2LTguNDlhMSwxLDAsMSwwLTEuNzktLjlMNC40LDEwLjg0QTUuNjcsNS42NywwLDAsMCw0LDE1LjIyLDUuNTMsNS41''@;'; put 'put ''MywwLDAsMCw5LjI4LDE5aDcuNmwtMy40NCw2Ljg3YTUuNjQsNS42NCwwLDAsMCwxLjUsNi45MkE1LjM4LDUuMzgsMCwwLDAsMTguNDEsMzRoNS4yNWwxLTJIMTguNDNhMy41OCwzLjU4LDAsMCwxLTMuMjItNS4yMUwxOS4xMSwxOWg4LjU0YTMuNDIsMy40MiwwLDAsMSwyLjE1LjcxLDMuNTcs''@;'; put 'put ''My41NywwLDAsMSwxLDQuNDNsLTQuMTIsOC4yMmExLDEsMCwxLDAsMS43OS45bDQuMDYtOC4xQTUuNjcsNS42NywwLDAsMCwzMi45MSwyMC43OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4xNiwxOS42M0E1LjU1''@;'; put 'put ''LDUuNTUsMCwwLDAsMjcuNDIsMTdIMTAuMDZhNC4zNiw0LjM2LDAsMCwxLTMuNjctMiw0LjA3LDQuMDcsMCwwLDEtLjE5LTQuMTNsMy42Mi03LDEuNDIsMS42My0yLjc0LDUuMyw4Ljg0LTUuNjZhLjkxLjkxLDAsMCwxLDEsMS41M0w3Ljg0LDEzLjM4YTIuMTMsMi4xMywwLDAsMCwuMjQuNTIs''@;'; put 'put ''Mi4yOCwyLjI4LDAsMCwwLDEuNjUsMUwxOC4xMSw5LjVhLjkxLjkxLDAsMCwxLDEsMS41MkwxMywxNC45NEgyMC44bDIuNDEtNC44MmE1LjYsNS42LDAsMCwwLTUtOC4xMkg5YTEsMSwwLDAsMC0uOS41NkwzLjg4LDEwLjg5YTUuNiw1LjYsMCwwLDAsNSw4LjEyaDcuNjVsLTMuNDMsNi44N2E1''@;'; put 'put ''LjYsNS42LDAsMCwwLDUsOC4xMmg5LjI4YTEsMSwwLDAsMCwuOTMtLjY1bDQuMTQtOC4yNEE1LjU4LDUuNTgsMCwwLDAsMzIuMTYsMTkuNjNaTTE3Ljc1LDI1LjU3QS45MS45MSwwLDAsMSwxOCwyNC4zMWw2LTMuODhBLjkxLjkxLDAsMSwxLDI1LDIybC02LDMuODhhLjkxLjkxLDAsMCwxLTEu''@;'; put 'put ''MjYtLjI3Wk0yOSwyNC4zNGwtOSw1Ljc4YS45MS45MSwwLDEsMS0xLTEuNTNsOS01Ljc4YS45MS45MSwwLDEsMSwxLDEuNTNaIi8+XG4gICAgICAgICcpLGguQ2xyU2hhcGVGbGFzaz0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMjcuMjgsMjMsMTQuODRWNGgxYTEsMSwwLDAs''@;'; put 'put ''MCwwLTJIMTJhMSwxLDAsMCwwLDAsMmgxVjE0Ljg0TDQuNTEsMjcuMzZBNC4yOSw0LjI5LDAsMCwwLDUsMzIuOCw0LjM4LDQuMzgsMCwwLDAsOC4xNSwzNEgyOGE0LjI0LDQuMjQsMCwwLDAsMy40Mi02LjcyWk0yOS44NSwzMWEyLjYyLDIuNjIsMCwwLDEtMiwxSDhhMi4yLDIuMiwwLDAsMS0y''@;'; put 'put ''LjA2LTEuNDEsMi42OCwyLjY4LDAsMCwxLC4yOS0yLjE3bDMtNC40NCwxNCwwLTEuMzEtMkgxMC41N0wxNSwxNS40NlY0aDZWMTUuNDZsOC44NCwxMy4wNUEyLjIzLDIuMjMsMCwwLDEsMjkuODUsMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40OSwyNy40LDIzLDE0Ljk0VjRoMWExLDEsMCwwLDAsMC0ySDEyLjA4YTEsMSwwLDAsMCwwLDJIMTNWMTQuOTRMNC41OCwyNy4zMWE0LjMxLDQuMzEsMCwwLDAtLjc4LDNBNC4yMyw0LjIzLDAsMCwwLDgsMzRIMjcuODZBNC4zNiw0LjM2LDAsMCwwLDMx''@;'; put 'put ''LDMyLjgsNC4yMyw0LjIzLDAsMCwwLDMxLjQ5LDI3LjRaTTE1LDE1LjQ5VjRoNlYxNS40OUwyNi4xNSwyM0g5Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgJyksaC5DbHJTaGFwZUFkbWluaXN0cmF0b3I9KDAscy5jbHJJY29uU1ZHKSgn''@;'; put 'put ''PHBhdGggZD0iTTE0LjY4LDE0LjgxYTYuNzYsNi43NiwwLDEsMSw2Ljc2LTYuNzVBNi43Nyw2Ljc3LDAsMCwxLDE0LjY4LDE0LjgxWm0wLTExLjUxYTQuNzYsNC43NiwwLDEsMCw0Ljc2LDQuNzZBNC43Niw0Ljc2LDAsMCwwLDE0LjY4LDMuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjQyLDMxLjY4QTIuMTQsMi4xNCwwLDAsMSwxNS44LDMwSDRWMjQuMjJhMTQuODEsMTQuODEsMCwwLDEsMTEuMDktNC42OGwuNzIsMGEyLjIsMi4yLDAsMCwxLC42Mi0xLjg1bC4xMi0uMTFjLS40NywwLTEtLjA2''@;'; put 'put ''LTEuNDYtLjA2QTE2LjQ3LDE2LjQ3LDAsMCwwLDIuMiwyMy4yNmExLDEsMCwwLDAtLjIuNlYzMGEyLDIsMCwwLDAsMiwySDE2LjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NywxNi4yOWEuMzcuMzcs''@;'; put 'put ''MCwwLDEsLjE1LDAsLjQyLjQyLDAsMCwwLS4xNSwwWiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDIzLjMybC0yLS42MWE3LjIxLDcuMjEsMCwwLDAtLjU4LTEuNDFsMS0xLjg2QS4zOC4zOCwwLDAs''@;'; put 'put ''MCwzMiwxOWwtMS40NS0xLjQ1YS4zNi4zNiwwLDAsMC0uNDQtLjA3bC0xLjg0LDFhNy4xNSw3LjE1LDAsMCwwLTEuNDMtLjYxbC0uNjEtMmEuMzYuMzYsMCwwLDAtLjM2LS4yNEgyMy44MmEuMzYuMzYsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42bC0xLjgyLTFhLjM1LjM1''@;'; put 'put ''LDAsMCwwLS40My4wN0wxNy42OSwxOWEuMzguMzgsMCwwLDAtLjA2LjQ0bDEsMS44MkE2Ljc3LDYuNzcsMCwwLDAsMTgsMjIuNjlsLTIsLjZhLjM2LjM2LDAsMCwwLS4yNi4zNXYyLjA1QS4zNS4zNSwwLDAsMCwxNiwyNmwyLC42MWE3LDcsMCwwLDAsLjYsMS40MWwtMSwxLjkxYS4zNi4zNiww''@;'; put 'put ''LDAsMCwuMDYuNDNsMS40NSwxLjQ1YS4zOC4zOCwwLDAsMCwuNDQuMDdsMS44Ny0xYTcuMDksNy4wOSwwLDAsMCwxLjQuNTdsLjYsMmEuMzguMzgsMCwwLDAsLjM1LjI2aDIuMDVhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTIuMDVhNi45Miw2LjkyLDAsMCwwLDEuMzgtLjU3bDEuODksMWEu''@;'; put 'put ''MzYuMzYsMCwwLDAsLjQzLS4wN0wzMiwzMC40QS4zNS4zNSwwLDAsMCwzMiwzMGwtMS0xLjg4YTcsNywwLDAsMCwuNTgtMS4zOWwyLS42MWEuMzYuMzYsMCwwLDAsLjI2LS4zNVYyMy42N0EuMzYuMzYsMCwwLDAsMzMuNjgsMjMuMzJaTTI0Ljg1LDI4YTMuMzQsMy4zNCwwLDEsMSwzLjMzLTMu''@;'; put 'put ''MzNBMy4zNCwzLjM0LDAsMCwxLDI0Ljg1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxNC42NyIgY3k9IjguMyIgcj0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi40NCwzMS44MmEyLjE1LDIuMTUsMCwwLDEtLjM4LTIuNTVsLjUzLTEtMS4wOS0uMzNBMi4xNCwyLjE0LDAsMCwxLDE0LDI1Ljg0VjIzLjc5YTIuMTYsMi4xNiwwLDAsMSwxLjUzLTIuMDdsMS4wOS0uMzMtLjUyLTFhMi4xNywyLjE3LDAsMCwxLC4z''@;'; put 'put ''NS0yLjUyLDE4LjkyLDE4LjkyLDAsMCwwLTIuMzItLjE2QTE1LjU4LDE1LjU4LDAsMCwwLDIsMjMuMDd2Ny43NWExLDEsMCwwLDAsMSwxSDE2LjQ0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43LDIzLjQ2bC0y''@;'; put 'put ''LS42YTYuNzMsNi43MywwLDAsMC0uNTgtMS40MmwxLTEuODZhLjM1LjM1LDAsMCwwLS4wNy0uNDNsLTEuNDUtMS40NmEuMzguMzgsMCwwLDAtLjQzLS4wN2wtMS44NSwxYTcuNzQsNy43NCwwLDAsMC0xLjQzLS42bC0uNjEtMmEuMzguMzgsMCwwLDAtLjM2LS4yNUgyMy44NGEuMzguMzgsMCww''@;'; put 'put ''LDAtLjM1LjI2bC0uNiwyYTYuODUsNi44NSwwLDAsMC0xLjQ1LjYxbC0xLjgxLTFhLjM4LjM4LDAsMCwwLS40NC4wNmwtMS40NywxLjQ0YS4zNy4zNywwLDAsMC0uMDcuNDRsMSwxLjgyQTcuMjQsNy4yNCwwLDAsMCwxOCwyMi44M2wtMiwuNjFhLjM2LjM2LDAsMCwwLS4yNi4zNXYyLjA1YS4z''@;'; put 'put ''Ni4zNiwwLDAsMCwuMjYuMzVsMiwuNjFhNy4yOSw3LjI5LDAsMCwwLC42LDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTkuMTYsMzJhLjM4LjM4LDAsMCwwLC40NC4wNmwxLjg3LTFhNy4wOSw3LjA5LDAsMCwwLDEuNC41N2wuNiwyLjA1YS4zOC4zOCwwLDAsMCwuMzYuMjZoMi4w''@;'; put 'put ''NWEuMzguMzgsMCwwLDAsLjM1LS4yNmwuNi0yLjA1YTYuNjgsNi42OCwwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM4LjM4LDAsMCwwLC40NC0uMDZMMzIsMzAuNTVhLjM4LjM4LDAsMCwwLC4wNi0uNDRsLTEtMS44OGE2LjkyLDYuOTIsMCwwLDAsLjU3LTEuMzhsMi0uNjFhLjM5LjM5LDAsMCww''@;'; put 'put ''LC4yNy0uMzVWMjMuODJBLjQuNCwwLDAsMCwzMy43LDIzLjQ2Wm0tOC44Myw0LjcyYTMuMzQsMy4zNCwwLDEsMSwzLjMzLTMuMzRBMy4zNCwzLjM0LDAsMCwxLDI0Ljg3LDI4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgJyksaC5DbHJT''@;'; put 'put ''aGFwZUhhcmREcml2ZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsOGEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJaTTMyLDI4SDRWOEgzMlYyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMTAuMjUiIHI9IjEuMjUiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjI1LjQyIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5''@;'; put 'put ''LjgxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjg4LDE4LjA4YTMuNTksMy41OSwwLDEsMCwzLjU5LTMuNTksMy44NCwzLjg0LDAsMCwwLS45MS4xM0wxNSwxNi4xNmEy''@;'; put 'put ''LjA4LDIuMDgsMCwwLDEsLjUtLjA3LDIsMiwwLDEsMS0yLDIsMS42NCwxLjY0LDAsMCwxLC4wOC0uNUwxMiwxNy4xNkEzLjUzLDMuNTMsMCwwLDAsMTEuODgsMTguMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0xNS40NywyNS43M2E3LjY2LDcuNjYsMCwwLDEtNy42NS03LjY1LDcuNTUsNy41NSwwLDAsMSwuMjctMkw2LjU0LDE1LjdhOS4yNCw5LjI0LDAsMCwwLDE3LjgsNC45NUgyMi42NkE3LjY0LDcuNjQsMCwwLDEsMTUuNDcsMjUuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4yMiwxNy44M2EuOC44LDAsMCwwLS44LS44SDI0LjY2YTkuMjYsOS4yNiwwLDAsMC05LjE5LTguMiw5LjM2LDkuMzYsMCwwLDAtMi4zOC4zMmwuNDIsMS41NGE3Ljg2LDcuODYsMCwwLDEsMi0uMjZBNy42Niw3LjY2LDAs''@;'; put 'put ''MCwxLDIzLDE3SDIwLjkyYS44LjgsMCwwLDAsMCwxLjZoNi41QS44LjgsMCwwLDAsMjguMjIsMTcuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAs''@;'; put 'put ''MiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMTIsMTcuMTZsMS41NC40MmExLjY0LDEuNjQsMCwwLDAtLjA4LjUsMiwyLDAsMSwwLDItMiwyLjA4LDIuMDgsMCwwLDAtLjUuMDdsLS40MS0xLjU0YTMuODQsMy44NCwwLDAsMSwuOTEtLjEzLDMuNTksMy41OSwwLDEsMS0z''@;'; put 'put ''LjU5LDMuNTlBMy41MywzLjUzLDAsMCwxLDEyLDE3LjE2Wk01LjMxLDhBMS4yNSwxLjI1LDAsMSwxLDQuMDYsOS4yNSwxLjI1LDEuMjUsMCwwLDEsNS4zMSw4Wm0wLDIwLjA2YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDUuMzEsMjguMDZabTEwLjE2LS43M0E5''@;'; put 'put ''LjIyLDkuMjIsMCwwLDEsNi41NCwxNS43bDEuNTUuNDFhNy41NSw3LjU1LDAsMCwwLS4yNywyLDcuNjQsNy42NCwwLDAsMCwxNC44NCwyLjU3aDEuNjhBOS4yNSw5LjI1LDAsMCwxLDE1LjQ3LDI3LjMzWm0xMi04LjdoLTYuNWEuOC44LDAsMCwxLDAtMS42SDIzYTcuNjYsNy42NiwwLDAsMC03''@;'; put 'put ''LjU3LTYuNiw3Ljg2LDcuODYsMCwwLDAtMiwuMjZsLS40Mi0xLjU0YTkuMzYsOS4zNiwwLDAsMSwyLjM4LS4zMkE5LjI2LDkuMjYsMCwwLDEsMjQuNjYsMTdoMi43NmEuOC44LDAsMCwxLDAsMS42Wm0zLjM5LDkuNDNhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEs''@;'; put 'put ''MzAuODEsMjguMDZabTAtMTcuNTZhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuODEsMTAuNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICcpLGguQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcz0oMCxzLmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBkPSJNMjYsNS43NEExLjc0LDEuNzQsMCwwLDAsMjQuMjYsNEgzLjc0QTEuNzQsMS43NCwwLDAsMCwyLDUuNzRWMjAuMjZBMS43NCwxLjc0LDAsMCwwLDMuNzQsMjJINFY2SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMzAsOS43NEExLjc0LDEuNzQsMCwwLDAsMjguMjYsOEg3Ljc0QTEuNzQsMS43NCwwLDAsMCw2LDkuNzRWMjQuMjZBMS43NCwxLjc0LDAsMCwwLDcuNzQsMjZIOFYxMEgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEySDExLjc0QTEuNzQsMS43NCwwLDAsMCwxMCwxMy43NFYyOC4yNkExLjc0LDEuNzQsMCwwLDAsMTEuNzQsMzBIMzIuMjZBMS43NCwxLjc0LDAsMCwwLDM0LDI4LjI2VjEzLjc0QTEuNzQsMS43NCwwLDAsMCwzMi4yNiwxMlpNMzIsMjhI''@;'; put 'put ''MTJWMTRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwyMy42OGEyLjY0LDIuNjQsMCwxLDAtMi43LTIuNjNBMi42NywyLjY3LDAsMCwwLDE5Ljk0LDIzLjY4Wm0wLTMuODdhMS4yNCwxLjI0LDAs''@;'; put 'put ''MSwxLTEuMjksMS4yNEExLjI3LDEuMjcsMCwwLDEsMTkuOTQsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwxNi4yMmE0LjkzLDQuOTMsMCwwLDEsNC45NSw0LjM1SDIzLjcxVjIyaDQuNDFh''@;'; put 'put ''LjcuNywwLDAsMCwwLTEuNEgyNi4zMWE2LjMzLDYuMzMsMCwwLDAtNi4zNy01Ljc1LDYuNTgsNi41OCwwLDAsMC0xLjQ4LjE3bC4zNSwxLjM3QTQuNzMsNC43MywwLDAsMSwxOS45NCwxNi4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTE5Ljk0LDI3LjI3YTYuNDIsNi40MiwwLDAsMCw1LjY3LTMuMzVIMjMuOTNhNSw1LDAsMCwxLTQsMS45NSw0LjkxLDQuOTEsMCwwLDEtNS00LjgyLDUuMTYsNS4xNiwwLDAsMSwuMDgtLjc5TDEzLjYzLDIwYTcsNywwLDAsMC0uMDksMUE2LjMyLDYuMzIsMCwwLDAs''@;'; put 'put ''MTkuOTQsMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiw1Ljc0QTEuNzQsMS43NCwwLDAsMCwyNC4yNiw0SDMuNzRBMS43NCwxLjc0LDAsMCwwLDIsNS43NFYyMC4yNkExLjc0LDEuNzQsMCwwLDAs''@;'; put 'put ''My43NCwyMkg0VjZIMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDkuNzRBMS43NCwxLjc0LDAsMCwwLDI4LjI2LDhINy43NEExLjc0LDEuNzQsMCwwLDAsNiw5Ljc0VjI0LjI2QTEuNzQsMS43NCwwLDAsMCw3''@;'; put 'put ''Ljc0LDI2SDhWMTBIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYyLDIyLjZBMS41NSwxLjU1LDAsMSwwLDE4LDIxLjA1LDEuNiwxLjYsMCwwLDAsMTkuNjIsMjIuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMjYsMTJIMTEuNzRBMS43NCwxLjc0LDAsMCwwLDEwLDEzLjc0VjI4LjI2QTEuNzQsMS43NCwwLDAsMCwxMS43NCwzMEgzMi4yNkExLjc0LDEuNzQsMCwwLDAsMzQsMjguMjZWMTMuNzRBMS43NCwxLjc0LDAs''@;'; put 'put ''MCwwLDMyLjI2LDEyWk0xOS42MiwxNy43NGEzLjMxLDMuMzEsMCwxLDEtMy4zOCwzLjMxQTMuMzUsMy4zNSwwLDAsMSwxOS42MiwxNy43NFptMCwxMS4xM2E3Ljk0LDcuOTQsMCwwLDEtOC03LjgyLDcuODMsNy44MywwLDAsMSwuMTEtMS4yOWwxLjc1LjNhNS4zNiw1LjM2LDAsMCwwLS4xMSwx''@;'; put 'put ''LDYuMTgsNi4xOCwwLDAsMCw2LjI4LDYuMDYsNi4zNSw2LjM1LDAsMCwwLDUtMi40NmgyLjFBOC4wNiw4LjA2LDAsMCwxLDE5LjYyLDI4Ljg3Wk0yOS44OSwyMi4ySDI0LjM2VjIwLjQ0aDEuNDhBNi4xOSw2LjE5LDAsMCwwLDE5LjYyLDE1YTYuNDgsNi40OCwwLDAsMC0xLjQxLjE2bC0uNDUt''@;'; put 'put ''MS43YTguMTYsOC4xNiwwLDAsMSwxLjg2LS4yMiw4LDgsMCwwLDEsOCw3LjIxaDIuMjZhLjg4Ljg4LDAsMCwxLDAsMS43NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLGguQ2xyU2hhcGVOVk1lPSgwLHMuY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0yNywyMlYxNGEyLDIsMCwwLDAtMi0ySDExYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwySDI1QTIsMiwwLDAsMCwyNywyMlpNMTEsMTRIMjV2OEgxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0i''@;'; put 'put ''MTkiIHk9IjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjUuMDEiIHk9IjYiIHdpZHRoPSIxLjk3IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuOCw4SDE2Ljg3VjZoLTExTDcuNzgsNC4wOGExLDEsMCwwLDAsMC0xLjQyLDEsMSwwLDAsMC0xLjQxLDBMMiw3LDYuMzcsMTEuNGExLDEsMCwwLDAsMS40MSwwLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS42MSwyNC42OGExLDEsMCwwLDAtMS40MSwwLDEsMSwwLDAsMCwwLDEuNDJMMzAuMSwyOEgxOXYySDMwLjJsLTIsMmExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAsMCwuNy4yOSwxLDEsMCww''@;'; put 'put ''LDAsLjcxLS4yOUwzNCwyOS4wNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTMiIHk9IjI4IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjkiIHk9IjI4IiB3aWR0aD0iMS45NyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJyksaC5DbHJTaGFwZVNTRD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0''@;'; put 'put ''QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI2LjIxIiBjeT0iMTAu''@;'; put 'put ''MjUiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjkuODEiIGN5PSIxMC4yNSIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGN4PSI2LjIxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjkuODEiIGN5PSIyNS40MiIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTguNjJjMS4zMi4zMSwxLjkxLjU0LDEuOTEsMS4yMnMtLjUzLDEuMDktMS41NSwxLjA5YTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRjMiwwLDMuMS0xLDMuMS0y''@;'; put 'put ''LjUycy0xLjE1LTIuMDUtMi44Ny0yLjQ0Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEuMjUsMCwwLDEsMTAsMTVhMy42OCwzLjY4LDAsMCwxLDIuMzcsMWwuODEtMS4xQTQuNTgsNC41OCwwLDAsMCwxMCwxMy42OWMtMS43NCwwLTMsMS4wNS0zLDIuNDlTOC4yNiwxOC4yMiwx''@;'; put 'put ''MCwxOC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjgzLDIwLjkzYTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRjMiwwLDMuMS0xLDMuMS0yLjUyUzE5Ljcz''@;'; put 'put ''LDE3LjY1LDE4LDE3LjI2Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEuMjUsMCwwLDEsMTcuNDgsMTVhMy42OCwzLjY4LDAsMCwxLDIuMzcsMWwuODEtMS4xYTQuNTYsNC41NiwwLDAsMC0zLjEyLTEuMTVjLTEuNzMsMC0zLDEuMDUtMywyLjQ5czEuMTksMiwyLjg5LDIuNDRj''@;'; put 'put ''MS4zMi4zMSwxLjkxLjU0LDEuOTEsMS4yMlMxOC44NSwyMC45MywxNy44MywyMC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjksMThjMC0yLjQxLTEuOTItNC4xMi00LjY0LTQuMTJoLTIuOXY4LjI0''@;'; put 'put ''aDIuOUMyOCwyMi4wOCwyOS45LDIwLjM3LDI5LjksMThabS02LTIuNzZoMS41NmEyLjc3LDIuNzcsMCwxLDEsMCw1LjUzSDIzLjg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwy''@;'; put 'put ''LDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTUuMjEsOEExLjI1LDEuMjUsMCwxLDEsNCw5LjI1LDEuMjUsMS4yNSwwLDAsMSw1LjIxLDhabTAsMjBhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsNS4yMSwyOFpt''@;'; put 'put ''NS4wNi01Ljc4YTUsNSwwLDAsMS0zLjUyLTEuMzRsLjg2LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMxLDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0uOTEtMS45MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44OS0yLjQ0czEuMjItMi40OSwzLTIuNDlhNC41OCw0LjU4LDAsMCwxLDMuMTIs''@;'; put 'put ''MS4xNWwtLjgxLDEuMUEzLjY4LDMuNjgsMCwwLDAsMTAsMTVhMS4yNSwxLjI1LDAsMCwwLTEuMzksMS4wOGMwLC42Ny42MS45MSwxLjkyLDEuMjEsMS43Mi4zOSwyLjg3Ljk0LDIuODcsMi40NFMxMi4yNCwyMi4yMiwxMC4yNywyMi4yMlptNy41MSwwYTUsNSwwLDAsMS0zLjUyLTEuMzRsLjg2''@;'; put 'put ''LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMxLDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0uOTEtMS45MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44OS0yLjQ0czEuMjMtMi40OSwzLTIuNDlhNC41Niw0LjU2LDAsMCwxLDMuMTIsMS4xNWwtLjgxLDEuMWEzLjY4LDMuNjgsMCwwLDAtMi4z''@;'; put 'put ''Ny0xLDEuMjUsMS4yNSwwLDAsMC0xLjM5LDEuMDhjMCwuNjcuNjEuOTEsMS45MiwxLjIxLDEuNzIuMzksMi44Ny45NCwyLjg3LDIuNDRTMTkuNzUsMjIuMjIsMTcuNzgsMjIuMjJabTQuNTgtLjE0VjEzLjg0aDIuOWMyLjcyLDAsNC42NCwxLjcxLDQuNjQsNC4xMlMyOCwyMi4wOCwyNS4yNiwy''@;'; put 'put ''Mi4wOFpNMzAuNjksMjhhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuNjksMjhabTAtMTcuNWExLjI1LDEuMjUsMCwxLDEsMS4yNS0xLjI1QTEuMjUsMS4yNSwwLDAsMSwzMC42OSwxMC41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwxNS4yaDEuNTZhMi43NywyLjc3LDAsMSwxLDAsNS41M0gyMy44NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLGguQ2xyU2hhcGVCbHVldG9vdGg9KDAscy5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTI2LjY0LDI1LjI3LDE5LDE3LjUzLDE5LDMsMjUuMjEsOS40bC01LjY1LDUuNzlMMjEsMTYuNjJsNS42OC01LjgyYTIsMiwwLDAsMCwwLTIuNzhMMjAuNDgsMS43QTIuMDgsMi4wOCwwLDAsMCwxOC44NSwxLDIsMiwwLDAsMCwxNywzVjE1LjM4TDEwLjA1LDguMjdBMSwx''@;'; put 'put ''LDAsMCwwLDguNjIsOS42NkwxNi43OSwxOCw5LjA2LDI2YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzItLjMxTDE3LDIwLjY4VjMzYTIuMDcsMi4wNywwLDAsMCwuNzEsMS42MkEyLDIsMCwwLDAsMTksMzVhMS45NCwxLjk0LDAsMCwwLDEuNDItLjZsNi4y''@;'; put 'put ''My02LjM4QTIsMiwwLDAsMCwyNi42NCwyNS4yN1pNMTksMzMuMDVWMjAuMjlsNi4yMSw2LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gIDxwYXRoIGQ9Ik0yNi41MiwyNC41MmwtNS42NS01LjgzLTEuNDYtMS41di0xMkwyMy43OSw5LjdsLTMu''@;'; put 'put ''NiwzLjcxLDIuMjQsMi4yOSw0LjA5LTQuMjJhMi41NCwyLjU0LDAsMCwwLDAtMy41NkwyMC41NywxLjc4QTIuNTQsMi41NCwwLDAsMCwxNi4yLDMuNTVWMTMuODZsLTUuNTMtNS43YTEuNiwxLjYsMCwxLDAtMi4zLDIuMjNMMTUuNzUsMThsLTcsNy4xOWExLjYsMS42LDAsMCwwLDAsMi4yNiwx''@;'; put 'put ''LjYzLDEuNjMsMCwwLDAsMS4xMi40NSwxLjU4LDEuNTgsMCwwLDAsMS4xNS0uNDlsNS4xMS01LjI3VjMyLjQ1YTIuNTMsMi41MywwLDAsMCwxLjU5LDIuMzYsMi40NCwyLjQ0LDAsMCwwLC45NS4xOSwyLjU2LDIuNTYsMCwwLDAsMS44My0uNzdsNS45NS02LjE1QTIuNTQsMi41NCwwLDAsMCwy''@;'; put 'put ''Ni41MiwyNC41MlpNMTkuNCwzMC44M1YyMS43N2w0LjM5LDQuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGguQ2xyU2hhcGVCbHVldG9vdGhPZmY9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LDMsMjUuMjIsOS40bC01LjY2LDUuOEwyMSwx''@;'; put 'put ''Ni42M2w1LjY4LTUuODNhMiwyLDAsMCwwLDAtMi43OEwyMC40OCwxLjdBMiwyLDAsMCwwLDE4Ljg1LDEsMiwyLDAsMCwwLDE3LDN2MTEuNGwyLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNC43Nyw1LDMuMzYsNi40MiwxNS44OSwx''@;'; put 'put ''OSw5LjA2LDI2YTEsMSwwLDAsMCwuNzEsMS43LDEsMSwwLDAsMCwuNzItLjMxTDE3LDIwLjY4VjMyLjk0YTIuMDgsMi4wOCwwLDAsMCwuNzEsMS42M0EyLDIsMCwwLDAsMTksMzVhMiwyLDAsMCwwLDEuNDItLjZsNS40MS01LjU0LDMuNTQsMy41M0wzMC43NywzMVpNMTksMzMuMDV2LTExbDUu''@;'; put 'put ''NDEsNS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOS4zMSw1LjE3LDIzLjcsOS43bC0zLjU5LDMuNzEsMi4yNCwyLjI5LDQuMDktNC4yMmEyLjU2LDIuNTYsMCwwLDAsMC0zLjU2bC02LTYuMTRhMi41MSwyLjUxLDAsMCwwLTIu''@;'; put 'put ''NzctLjU5LDIuNTQsMi41NCwwLDAsMC0xLjYsMi4zNnYxMGwzLjIxLDMuMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LjUsNSwzLjA5LDYuNDIsMTUuMTcsMTguNTEsOC43LDI1LjE5QTEuNiwxLjYsMCwwLDAsOS44NSwyNy45LDEuNTcs''@;'; put 'put ''MS41NywwLDAsMCwxMSwyNy40MWw1LjExLTUuMjdWMzIuNDVhMi41NCwyLjU0LDAsMCwwLDEuNiwyLjM2LDIuNDQsMi40NCwwLDAsMCwuOTUuMTksMi41NSwyLjU1LDAsMCwwLDEuODItLjc3bDUuMTItNS4yOSwzLjQ5LDMuNDhMMzAuNSwzMVpNMTkuODEsMzAuODNWMjIuNjVsNCw0WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxoLkNsclNoYXBlUHJvY2Vzc09uVk09KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjQ5LDI2LjI4YTEsMSwwLDAsMC0xLjItLjdsLTIuNDkuNjdhMTQuMjMsMTQuMjMsMCwwLDAsMi40LTYuNzVBMTQuNDgsMTQu''@;'; put 'put ''NDgsMCwwLDAsMjcuMzcsNy4zNSwxLDEsMCwwLDAsMjYsNy40NGExLDEsMCwwLDAsLjA5LDEuNDEsMTIuNDUsMTIuNDUsMCwwLDEsNC4xNiwxMC40NiwxMi4xOSwxMi4xOSwwLDAsMS0yLDUuNzRMMjgsMjIuNTRhMSwxLDAsMSwwLTEuOTUuMTZsLjUsNi40NCw2LjI1LTEuNjZBMSwxLDAsMCww''@;'; put 'put ''LDMzLjQ5LDI2LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQuMzEsMTcuMDhhMS4wNiwxLjA2LDAsMCwwLC40NC4xNiwxLDEsMCwwLDAsMS4xMi0uODVBMTIuMjEsMTIuMjEsMCwwLDEsMTguNjksNS44NEwxNi40NSw3LjM3YTEs''@;'; put 'put ''MSwwLDAsMCwuNDcsMS43OUExLDEsMCwwLDAsMTcuNTYsOWw1LjMzLTMuNjZMMTguMzMuNzZhMSwxLDAsMSwwLTEuMzksMS4zOGwxLjcsMS43QTE0LjIsMTQuMiwwLDAsMCwzLjg5LDE2LjEyLDEsMSwwLDAsMCw0LjMxLDE3LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjczLDI5LjkzYTEyLDEyLDAsMCwxLTQuODQuNTEsMTIuMywxMi4zLDAsMCwxLTkuNTctNi4zbDIuNDkuOTNhMSwxLDAsMCwwLC42OS0xLjg0bC00LjU5LTEuN2gwTDQuNDQsMjEsMy4zMywyNy4zNWExLDEsMCwwLDAsLjc5LDEuMTNsLjE3LDBhMSwx''@;'; put 'put ''LDAsMCwwLDEtLjgxbC40Mi0yLjRhMTQuMywxNC4zLDAsMCwwLDExLDcuMTQsMTMuOTEsMTMuOTEsMCwwLDAsNS42My0uNiwxLDEsMCwwLDAtLjYtMS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIyLDEzSDE0YTEsMSwwLDAsMC0x''@;'; put 'put ''LDF2OGExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxNEExLDEsMCwwLDAsMjIsMTNabS0xLDhIMTVWMTVoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGguQ2xyU2hhcGVBc3NpZ25Vc2VyPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0xOCwxN2E3LjQ2LDcuNDYsMCwxLDAtNy40NS03LjQ2QTcuNDYsNy40NiwwLDAsMCwxOCwxN1pNMTgsNC4wN2E1LjQ2LDUuNDYsMCwxLDEtNS40NSw1LjQ1QTUuNDYsNS40NiwwLDAsMSwxOCw0LjA3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBh''@;'; put 'put ''dGggZD0iTTYsMzEuODlWMjUuNzdhMTYuMTMsMTYuMTMsMCwwLDEsMTItNSwxNi42MSwxNi42MSwwLDAsMSw4LjcxLDIuMzNsMS4zNS0xLjUxQTE4LjUzLDE4LjUzLDAsMCwwLDE4LDE4Ljc0LDE3LjcsMTcuNywwLDAsMCw0LjIxLDI0LjhhMSwxLDAsMCwwLS4yMS42djYuNDlBMi4wNiwyLjA2''@;'; put 'put ''LDAsMCwwLDYsMzRIMTguMzlsLTEuOS0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMxLjg5LDMwLDMySDI2Ljg1bC0xLjgsMkgzMGEyLjA2LDIuMDYsMCwwLDAsMi0yLjA3VjI2LjJsLTIsMi4yM1oiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zNC43NiwxOC42MmExLDEsMCwwLDAtMS40MS4wOGwtMTEuNjIsMTMtNS4yLTUuNTlBMSwxLDAsMCwwLDE1LjEyLDI2YTEsMSwwLDAsMC0uMDYsMS40Mmw2LjY5LDcuMkwzNC44NCwyMEExLDEsMCwwLDAsMzQuNzYsMTgu''@;'; put 'put ''NjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48Y2lyY2xlIGN4PSIxNy45OSIgY3k9IjEwLjM2IiByPSI2LjgxIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xMiwyNi42NWEyLjgsMi44LDAsMCwxLDQu''@;'; put 'put ''ODUtMS44TDIwLjcxLDI5bDYuODQtNy42M0ExNi44MSwxNi44MSwwLDAsMCwxOCwxOC41NSwxNi4xMywxNi4xMywwLDAsMCw1LjUsMjRhMSwxLDAsMCwwLS4yLjYxVjMwYTIsMiwwLDAsMCwxLjk0LDJoOC41N2wtMy4wNy0zLjNBMi44MSwyLjgxLDAsMCwxLDEyLDI2LjY1WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjguNzYsMzJhMiwyLDAsMCwwLDEuOTQtMlYyNi4yNEwyNS41NywzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjc3LDE4LjYyYTEsMSwwLDAsMC0xLjQyLjA4''@;'; put 'put ''bC0xMS42MiwxMy01LjItNS41OUExLDEsMCwwLDAsMTQuMTIsMjZhMSwxLDAsMCwwLDAsMS40Mmw2LjY4LDcuMkwzMy44NCwyMEExLDEsMCwwLDAsMzMuNzcsMTguNjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLGguQ2xyU2hhcGVBdG9tPSgwLHMuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxNC4wNWE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwxNC4wNVptMCw2LjQ0YTIuNDIsMi40MiwwLDEsMSwyLjQyLTIuNDJBMi40MiwyLjQyLDAsMCwxLDE4LDIwLjQ5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IC8+PHBhdGggZD0iTTI0LjIzLDExLjcxYTM5LjE0LDM5LjE0LDAsMCwwLTQuNTctMy45MiwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LTEuNzJjLjMyLS4xMi42Mi0uMjEuOTItLjNhMi4yOCwyLjI4LDAsMCwwLDMuODEtLjQ2LDMuMzEsMy4zMSwwLDAsMSwxLjkyLjg0YzEuMTksMS4xOSwxLjIy''@;'; put 'put ''LDMuNTkuMSw2LjU4LjQ5LjY1Ljk0LDEuMzEsMS4zNSwyLC4xNy0uNC4zNS0uNzkuNDktMS4xOCwxLjQ3LTMuODUsMS4yOC03LS41My04Ljc4YTUuMjksNS4yOSwwLDAsMC0zLjMzLTEuNDQsMi4yOSwyLjI5LDAsMCwwLTQuMzEuNTRjLS4zNy4xMS0uNzQuMjItMS4xMy4zN2EyNS43OSwyNS43''@;'; put 'put ''OSwwLDAsMC00LjU3LDIuMzVBMjYuMjEsMjYuMjEsMCwwLDAsMTMuMjgsNC4yYy0zLjg1LTEuNDYtNy0xLjI4LTguNzcuNTNDMi44NSw2LjQsMi41OCw5LjE3LDMuNjgsMTIuNTlhMi4yOCwyLjI4LDAsMCwwLDEuNTksMy42N2MuMzIuNjEuNjcsMS4yMiwxLjA2LDEuODJBMjUuNTQsMjUuNTQs''@;'; put 'put ''MCwwLDAsNCwyMi42NmMtMS40NywzLjg0LTEuMjgsNywuNTMsOC43N2E1LjYzLDUuNjMsMCwwLDAsNC4xMiwxLjUxLDEzLjM0LDEzLjM0LDAsMCwwLDQuNjUtMSwyNi4yMSwyNi4yMSwwLDAsMCw0LjU4LTIuMzVBMjUuNzksMjUuNzksMCwwLDAsMjIuNDMsMzJhMTQuMTYsMTQuMTYsMCwwLDAs''@;'; put 'put ''My42NS45QTIuMywyLjMsMCwwLDAsMzAuNDYsMzJhNC41NSw0LjU1LDAsMCwwLC43NC0uNTdjMS44MS0xLjgxLDItNC45My41My04Ljc3QTMyLjY4LDMyLjY4LDAsMCwwLDI0LjIzLDExLjcxWk0xMi41NywzMC4wOWMtMywxLjE1LTUuNDUsMS4xMy02LjY1LS4wOHMtMS4yMy0zLjYyLS4wNy02''@;'; put 'put ''LjY0YTIyLjc3LDIyLjc3LDAsMCwxLDEuNzEtMy40OCw0MC4xOSw0MC4xOSwwLDAsMCwzLjkyLDQuNTZjLjQzLjQzLjg3Ljg1LDEuMzEsMS4yNXEuOS0uNDYsMS44My0xLjA1Yy0uNTgtLjUyLTEuMTYtMS0xLjcyLTEuNjFhMzQsMzQsMCwwLDEtNS43NC03LjQ3QTIuMjksMi4yOSwwLDAsMCw1''@;'; put 'put ''LjUsMTEuNjloMGMtLjc1LTIuNS0uNjItNC40OS40My01LjU0YTMuNzIsMy43MiwwLDAsMSwyLjcyLS45MiwxMS40LDExLjQsMCwwLDEsMy45My44NCwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LDEuNzIsMzkuMTQsMzkuMTQsMCwwLDAtNC41NywzLjkyYy0uNDQuNDQtLjg3LjktMS4yOSwxLjM2''@;'; put 'put ''YTIwLjI3LDIwLjI3LDAsMCwwLDEsMS44NWMuNTQtLjYxLDEuMDktMS4yMSwxLjY4LTEuOGEzNi4zMywzNi4zMywwLDAsMSw1LTQuMTcsMzYuODgsMzYuODgsMCwwLDEsNC45NSw0LjE3LDM2LjI2LDM2LjI2LDAsMCwxLDQuMTcsNSwzNywzNywwLDAsMS00LjE3LDVBMzAuNjgsMzAuNjgsMCww''@;'; put 'put ''LDEsMTIuNTcsMzAuMDlaTTI5Ljc5LDMwbC0uMTYuMTNhMi4yNywyLjI3LDAsMCwwLTMuNS43MiwxMi41NywxMi41NywwLDAsMS0zLS43NywyMiwyMiwwLDAsMS0zLjQ4LTEuNzIsMzkuMTQsMzkuMTQsMCwwLDAsNC41Ny0zLjkyLDM4LjI2LDM4LjI2LDAsMCwwLDMuOTItNC41NiwyMi44OCwy''@;'; put 'put ''Mi44OCwwLDAsMSwxLjcyLDMuNDhDMzEsMjYuMzksMzEsMjguODEsMjkuNzksMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQuMjMsMTEuNzFhMzkuMTQsMzkuMTQsMCwwLDAtNC41Ny0zLjkyLDIyLjg2LDIyLjg2LDAsMCwxLDMu''@;'; put 'put ''NDgtMS43MmMuMzItLjEyLjYyLS4yMS45Mi0uM2EyLjI4LDIuMjgsMCwwLDAsMy44MS0uNDYsMy4zMSwzLjMxLDAsMCwxLDEuOTIuODRjMS4xOSwxLjE5LDEuMjIsMy41OS4xLDYuNTguNDkuNjUuOTQsMS4zMSwxLjM1LDIsLjE3LS40LjM1LS43OS40OS0xLjE4LDEuNDctMy44NSwxLjI4LTct''@;'; put 'put ''LjUzLTguNzhhNS4yOSw1LjI5LDAsMCwwLTMuMzMtMS40NCwyLjI5LDIuMjksMCwwLDAtNC4zMS41NGMtLjM3LjExLS43NC4yMi0xLjEzLjM3YTI1Ljc5LDI1Ljc5LDAsMCwwLTQuNTcsMi4zNUEyNi4yMSwyNi4yMSwwLDAsMCwxMy4yOCw0LjJjLTMuODUtMS40Ni03LTEuMjgtOC43Ny41M0My''@;'; put 'put ''Ljg1LDYuNCwyLjU4LDkuMTcsMy42OCwxMi41OWEyLjI4LDIuMjgsMCwwLDAsMS41OSwzLjY3Yy4zMi42MS42NywxLjIyLDEuMDYsMS44MkEyNS41NCwyNS41NCwwLDAsMCw0LDIyLjY2Yy0xLjQ3LDMuODQtMS4yOCw3LC41Myw4Ljc3YTUuNjMsNS42MywwLDAsMCw0LjEyLDEuNTEsMTMuMzQs''@;'; put 'put ''MTMuMzQsMCwwLDAsNC42NS0xLDI2LjIxLDI2LjIxLDAsMCwwLDQuNTgtMi4zNUEyNS43OSwyNS43OSwwLDAsMCwyMi40MywzMmExNC4xNiwxNC4xNiwwLDAsMCwzLjY1LjlBMi4zLDIuMywwLDAsMCwzMC40NiwzMmE0LjU1LDQuNTUsMCwwLDAsLjc0LS41N2MxLjgxLTEuODEsMi00LjkzLjUz''@;'; put 'put ''LTguNzdBMzIuNjgsMzIuNjgsMCwwLDAsMjQuMjMsMTEuNzFaTTEyLjU3LDMwLjA5Yy0zLDEuMTUtNS40NSwxLjEzLTYuNjUtLjA4cy0xLjIzLTMuNjItLjA3LTYuNjRhMjIuNzcsMjIuNzcsMCwwLDEsMS43MS0zLjQ4LDQwLjE5LDQwLjE5LDAsMCwwLDMuOTIsNC41NmMuNDMuNDMuODcuODUs''@;'; put 'put ''MS4zMSwxLjI1cS45LS40NiwxLjgzLTEuMDVjLS41OC0uNTItMS4xNi0xLTEuNzItMS42MWEzNCwzNCwwLDAsMS01Ljc0LTcuNDdBMi4yOSwyLjI5LDAsMCwwLDUuNSwxMS42OWgwYy0uNzUtMi41LS42Mi00LjQ5LjQzLTUuNTRhMy43MiwzLjcyLDAsMCwxLDIuNzItLjkyLDExLjQsMTEuNCww''@;'; put 'put ''LDAsMSwzLjkzLjg0LDIyLjg2LDIyLjg2LDAsMCwxLDMuNDgsMS43MiwzOS4xNCwzOS4xNCwwLDAsMC00LjU3LDMuOTJjLS40NC40NC0uODcuOS0xLjI5LDEuMzZhMjAuMjcsMjAuMjcsMCwwLDAsMSwxLjg1Yy41NC0uNjEsMS4wOS0xLjIxLDEuNjgtMS44YTM2LjMzLDM2LjMzLDAsMCwxLDUt''@;'; put 'put ''NC4xNywzNi44OCwzNi44OCwwLDAsMSw0Ljk1LDQuMTcsMzYuMjYsMzYuMjYsMCwwLDEsNC4xNyw1LDM3LDM3LDAsMCwxLTQuMTcsNUEzMC42OCwzMC42OCwwLDAsMSwxMi41NywzMC4wOVpNMjkuNzksMzBsLS4xNi4xM2EyLjI3LDIuMjcsMCwwLDAtMy41LjcyLDEyLjU3LDEyLjU3LDAsMCwx''@;'; put 'put ''LTMtLjc3LDIyLDIyLDAsMCwxLTMuNDgtMS43MiwzOS4xNCwzOS4xNCwwLDAsMCw0LjU3LTMuOTIsMzguMjYsMzguMjYsMCwwLDAsMy45Mi00LjU2LDIyLjg4LDIyLjg4LDAsMCwxLDEuNzIsMy40OEMzMSwyNi4zOSwzMSwyOC44MSwyOS43OSwzMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTcuOTkiIGN5PSIxOC4wNyIgcj0iMy4zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMi42NiAzLjExKSByb3RhdGUoLTkuMjIpIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGguQ2xyU2hhcGVCYXJDb2Rl''@;'; put 'put ''PSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LDdBMSwxLDAsMCwwLDQsOFYzMGExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDUsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDdBMSwxLDAsMCwwLDgsOFYyNmExLDEsMCww''@;'; put 'put ''LDAsMiwwVjhBMSwxLDAsMCwwLDksN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMyw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwxMyw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDE3LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjEsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAs''@;'; put 'put ''MCwyLDBWOEExLDEsMCwwLDAsMjEsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNSw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwyNSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDI5LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMzMsN2ExLDEsMCwwLDAtMSwxVjMwYTEsMSwwLDAs''@;'; put 'put ''MCwyLDBWOEExLDEsMCwwLDAsMzMsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPicpLGguQ2xyU2hhcGVDZER2ZD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0''@;'; put 'put ''LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIyLjMzLDE4YTQuNDYsNC40NiwwLDEsMC00LjQ1LDQuNDZBNC40Niw0LjQ2LDAsMCwwLDIyLjMzLDE4Wk0xNy44OCwyMC45QTIu''@;'; put 'put ''ODYsMi44NiwwLDEsMSwyMC43MywxOCwyLjg2LDIuODYsMCwwLDEsMTcuODgsMjAuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNy44OCw3LjQzSDE4VjUuODRoLS4xMkExMi4yMSwxMi4yMSwwLDAsMCw1LjY4LDE3Ljc1aDEuNkEx''@;'; put 'put ''MC42MSwxMC42MSwwLDAsMSwxNy44OCw3LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLjA4LDE4SDI4LjQ5djBBMTAuNjEsMTAuNjEsMCwwLDEsMTguMjUsMjguNjN2MS42QTEyLjIyLDEyLjIyLDAsMCwwLDMwLjA5LDE4UzMw''@;'; put 'put ''LjA4LDE4LDMwLjA4LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDExVjkuNDRoLS4xMmE4LjYyLDguNjIsMCwwLDAtOC42LDguMzJoMS42YTcsNywwLDAsMSw3LTYuNzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTguMjUsMjV2MS42QTguNjEsOC42MSwwLDAsMCwyNi40OCwxOHYwaC0xLjZ2MEE3LDcsMCwwLDEsMTguMjUsMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMTguMTcsMS45MmExNiwx''@;'; put 'put ''NiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOC4xNywxLjkyWk0yNi4yMywxOGgxLjU0YTkuNjEsOS42MSwwLDAsMS05LjYsOS41M0gxOFYyNmguMTdBOC4wNyw4LjA3LDAsMCwwLDI2LjIzLDE4Wk02LjA1LDE4SDQuNDV2LS4wOEExMy43MiwxMy43MiwwLDAsMSwxOCw0LjIxdjEuNkExMi4x''@;'; put 'put ''MywxMi4xMywwLDAsMCw2LjA1LDE3LjkyWm00LjA1LDBIOC41NnYtLjA4QTkuNjEsOS42MSwwLDAsMSwxOCw4LjMyVjkuODZhOC4wNyw4LjA3LDAsMCwwLTcuOSw4LjA2Wm00LjMyLS4wOGEzLjc1LDMuNzUsMCwxLDEsMy43NSwzLjc1QTMuNzUsMy43NSwwLDAsMSwxNC40MiwxNy45MlptMy43''@;'; put 'put ''NSwxMy43MUgxOFYzMGguMTdBMTIuMTMsMTIuMTMsMCwwLDAsMzAuMjgsMThoMS42QTEzLjczLDEzLjczLDAsMCwxLDE4LjE3LDMxLjYzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxoLkNsclNoYXBlQ29udGFpbmVyPSgwLHMuY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGQ9Ik0zMiwzMEg0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDMyYTIsMiwwLDAsMSwyLDJWMjhBMiwyLDAsMCwxLDMyLDMwWk00LDhWMjhIMzJWOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDI1LjNhLjguOCww''@;'; put 'put ''LDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDksMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC45MiwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44LjgsMCwwLDEsMS42LDB2MTNBLjgu''@;'; put 'put ''OCwwLDAsMSwxNC45MiwyNS4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIxLDI1LjNhLjguOCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDIxLDI1LjNaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjcsMjUuM2EuOC44LDAsMCwxLS44LS44di0xM2EuOC44LDAsMCwxLDEuNiwwdjEzQS44LjgsMCwwLDEsMjcsMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMiw2''@;'; put 'put ''SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNOS42MywyNC4yM2EuNzkuNzksMCwwLDEtLjgxLjc3QS43OS43OSwwLDAsMSw4LDI0LjIzVjExLjc3QS43OS43OSwwLDAsMSw4LjgyLDExYS43OS43OSwwLDAsMSwuODEu''@;'; put 'put ''NzdabTYsMGEuNzkuNzksMCwwLDEtLjgyLjc3Ljc5Ljc5LDAsMCwxLS44MS0uNzdWMTEuNzdhLjc5Ljc5LDAsMCwxLC44MS0uNzcuNzkuNzksMCwwLDEsLjgyLjc3Wm02LjIxLDBhLjc5Ljc5LDAsMCwxLS44Mi43Ny43OS43OSwwLDAsMS0uODEtLjc3VjExLjc3YS43OS43OSwwLDAsMSwuODEt''@;'; put 'put ''Ljc3Ljc5Ljc5LDAsMCwxLC44Mi43N1ptNi4xMiwwYS43OS43OSwwLDAsMS0uODIuNzcuNzkuNzksMCwwLDEtLjgxLS43N1YxMS43N2EuNzkuNzksMCwwLDEsLjgxLS43Ny43OS43OSwwLDAsMSwuODIuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGgu''@;'; put 'put ''Q2xyU2hhcGVDb250YWluZXJWb2x1bWU9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMTcuNThhMzIuMzUsMzIuMzUsMCwwLDAsNi4zLjkyLDQuMTMsNC4xMywwLDAsMSwuOTItMS4zNywzMC45NCwzMC45NCwwLDAsMS03LjIyLTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNiwyOFY4LjE5Yy4zNC0uNzYsNC4zMS0yLjExLDExLTIuMTFzMTAuNjcsMS4zNSwxMSwydi4zYy0uODIuNzktNC41OCwyLjA1LTExLjExLDIuMDVBMzMuNDgsMzMuNDgsMCwwLDEsOCw5LjQ0djEuNDRhMzUuNiwzNS42LDAsMCwwLDguODksMWM0''@;'; put 'put ''LjI5LDAsOC44LS41OCwxMS4xMS0xLjgydjUuMDdhNS4zLDUuMywwLDAsMS0xLjgxLjg4SDMwVjguMTJjMC0zLjE5LTguMTctNC0xMy00cy0xMywuODUtMTMsNFYyOEM0LDMwLjYzLDkuMzksMzEuNjgsMTQsMzJWMzBDOS4xMywyOS42Niw2LjI4LDI4LjYyLDYsMjhaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOCwyNC4yOGEzMS4zLDMxLjMsMCwwLDAsNiwuODl2LTEuNGEyOC45MywyOC45MywwLDAsMS02LS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMiwxOEgx''@;'; put 'put ''OGEyLDIsMCwwLDAtMiwyVjMyYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMEEyLDIsMCwwLDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTIxLDIxLjdhLjcuNywwLDAsMC0uNy43''@;'; put 'put ''djcuNDlhLjcuNywwLDAsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjEsMjEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNSwyMS44MmEuNy43LDAsMCwwLS43LjdWMzBhLjcuNywwLDEsMCwxLjQsMFYyMi41MkEuNy43LDAsMCww''@;'; put 'put ''LDI1LDIxLjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjksMjEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0zMiwxOEgxOGEyLDIsMCwwLDAtMiwyVjMyYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMEEyLDIsMCwwLDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48''@;'; put 'put ''cGF0aCBkPSJNMjEsMjEuN2EuNy43LDAsMCwwLS43Ljd2Ny40OWEuNy43LDAsMCwwLDEuNCwwVjIyLjRBLjcuNywwLDAsMCwyMSwyMS43WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjUsMjEuODJhLjcuNywwLDAsMC0uNy43VjMwYS43Ljcs''@;'; put 'put ''MCwxLDAsMS40LDBWMjIuNTJBLjcuNywwLDAsMCwyNSwyMS44MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjksMjEuN1oiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDE2SDI4VjguMTJjMC0xLjY4LTUuMzgtMy0xMi0zUzQsNi40NCw0LDguMTJWMjhjMCwxLjUsNC4zMywyLjc1LDEwLDNWMjUuMjJhMjkuMTcsMjkuMTcsMCwwLDEtOC0xLjI5VjIyLjQ0bC4yNC4xQTI2''@;'; put 'put ''LjYzLDI2LjYzLDAsMCwwLDE0LDIzLjgyVjIwYTQsNCwwLDAsMSwuMjktMS40N0EyOS4xOSwyOS4xOSwwLDAsMSw2LDE3LjIzVjE1Ljc1bC4yNC4wOWEyOSwyOSwwLDAsMCw5LDEuMzJoMEE0LDQsMCwwLDEsMTgsMTZaTTYsMTAuNTRWOS4wNWwuMjQuMDlBMzAuMTIsMzAuMTIsMCwwLDAsMTYs''@;'; put 'put ''MTAuNDcsMjguMzMsMjguMzMsMCwwLDAsMjYsOS4wNXYxLjVhMzIuNTMsMzIuNTMsMCwwLDEtMTAsMS4zMkEzMi40NCwzMi40NCwwLDAsMSw2LDEwLjU0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz4nKSxoLkNsclNoYXBlRmlsZVNoYXJlPSgwLHMuY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVptMCwyMEg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwy''@;'; put 'put ''LjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45MSwyMi40OGEyLjA2LDIuMDYsMCwwLDAtMS40NC42MmwtNS43Mi0yLjY2VjIwbDUuNjYtMi42NWEyLjA4LDIuMDgsMCwxLDAsLjA2''@;'; put 'put ''LTIuOTQsMi4xMiwyLjEyLDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIuMDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42NnYuM2EyLjA5LDIuMDksMCwxLDAsMi4wOC0yLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48''@;'; put 'put ''cGF0aCBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsN2g2LjQ5bDIuNzIsNEg2Wk0yMS45NCwyNi42NGEyLjA5LDIuMDksMCwwLDEt''@;'; put 'put ''Mi4xMS0yLjA2bDAtLjMtNS42Ny0yLjY2LS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4wOCwyLjA4LDAsMSwxLC41OCwxLjQ2TDE0Ljc1LDIwdi40N2w1LjcyLDIuNjZhMi4wNywyLjA3LDAsMSwxLDEuNDcsMy41NFoiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksaC5DbHJTaGFwZVFyQ29kZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNS42LDRBMS42LDEuNiwwLDAsMCw0LDUuNlYxMmg4VjRaTTEwLDEwSDZWNmg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+''@;'; put 'put ''PHBhdGggZD0iTTQsMzAuNEExLjYsMS42LDAsMCwwLDUuNiwzMkgxMlYyNEg0Wk02LDI2aDR2NEg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LDMyaDYuNEExLjYsMS42LDAsMCwwLDMyLDMwLjRWMjRIMjRabTItNmg0djRIMjZa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuNCw0SDI0djhoOFY1LjZBMS42LDEuNiwwLDAsMCwzMC40LDRaTTMwLDEwSDI2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwb2x5Z29u''@;'; put 'put ''IHBvaW50cz0iMjAgMTAgMjAgOCAxNiA4IDE2IDEyIDE4IDEyIDE4IDEwIDIwIDEwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cmVjdCB4PSIxMiIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC02IiAvPjxyZWN0IHg9IjE0IiB5PSIxNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBvbHlnb24gcG9pbnRzPSIyMCA2IDIwIDggMjIgOCAyMiA0IDE0IDQgMTQgOCAxNiA4IDE2IDYgMjAgNiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHJlY3QgeD0iNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAvPjxwb2x5Z29uIHBvaW50cz0iMTIgMTYgMTIgMTggMTAgMTgg''@;'; put 'put ''MTAgMTQgOCAxNCA4IDE4IDYgMTggNiAyMCA0IDIwIDQgMjIgOCAyMiA4IDIwIDEwIDIwIDEwIDIyIDEyIDIyIDEyIDIwIDE0IDIwIDE0IDE2IDEyIDE2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIC8+PHBvbHlnb24gcG9pbnRzPSIyMCAxNiAyMiAxNiAy''@;'; put 'put ''MiAxOCAyNCAxOCAyNCAxNiAyNiAxNiAyNiAxNCAyMiAxNCAyMiAxMCAyMCAxMCAyMCAxMiAxOCAxMiAxOCAxNCAyMCAxNCAyMCAxNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiAvPjxwb2x5Z29uIHBvaW50cz0iMTggMzAgMTQgMzAgMTQgMzIgMjIgMzIg''@;'; put 'put ''MjIgMzAgMjAgMzAgMjAgMjggMTggMjggMTggMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgLz48cG9seWdvbiBwb2ludHM9IjIyIDIwIDIyIDE4IDIwIDE4IDIwIDE2IDE4IDE2IDE4IDE4IDE2IDE4IDE2IDIwIDE4IDIwIDE4IDIyIDIwIDIyIDIwIDIw''@;'; put 'put ''IDIyIDIwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIC8+PHJlY3QgeD0iMzAiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIC8+PHJlY3QgeD0iMjIiIHk9IjIwIiB3aWR0''@;'; put 'put ''aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTUiIC8+PHBvbHlnb24gcG9pbnRzPSIzMCAxNCAyOCAxNCAyOCAxNiAyNiAxNiAyNiAxOCAyOCAxOCAyOCAyMCAzMCAyMCAzMCAxOCAzMiAxOCAzMiAxNiAzMCAxNiAzMCAxNCIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiAvPjxyZWN0IHg9IjIwIiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE3IiAvPjxwb2x5Z29uIHBvaW50cz0iMTQgMjggMTYgMjggMTYgMjYgMTgg''@;'; put 'put ''MjYgMTggMjQgMTYgMjQgMTYgMjAgMTQgMjAgMTQgMjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOCIgLz4nKSxoLkNsclNoYXBlVXNiPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC4yOSwxMS40YTEuNDksMS40OSwwLDAsMSwxLjI4LS43MmgxYTIu''@;'; put 'put ''ODksMi44OSwwLDAsMCwyLjc1LDIuMDksMywzLDAsMCwwLDAtNS45MSwyLjksMi45LDAsMCwwLTIuNjcsMS44MkgxNS41N2EzLjQ5LDMuNDksMCwwLDAtMywxLjY2bC0zLDQuODNoMi4zNlptNS0yLjk0QTEuMzYsMS4zNiwwLDEsMSwxOCw5LjgxLDEuMzIsMS4zMiwwLDAsMSwxOS4zMyw4LjQ2''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTM0LjMsMTcuMzdsLTYuMTEtMy42NmEuNy43LDAsMCwwLS43LDAsLjcxLjcxLDAsMCwwLS4zNi42MVYxN0g2LjkyYTIuMzMsMi4zMywwLDAsMSwuMzIsMS4xNywyLjQ3LDIuNDcsMCwxLDEt''@;'; put 'put ''Mi40Ny0yLjQ2LDIuMzcsMi4zNywwLDAsMSwxLjE1LjNsLjkzLTEuNzZBNC40NCw0LjQ0LDAsMSwwLDkuMTUsMTloMy41OGw0LjE3LDYuNjVhMy40OSwzLjQ5LDAsMCwwLDMsMS42NmgxLjY2djEuMjhhLjc5Ljc5LDAsMCwwLC44Ljc5aDQuNDlhLjc5Ljc5LDAsMCwwLC44LS43OXYtNC40YS43''@;'; put 'put ''OS43OSwwLDAsMC0uOC0uOEgyMi4zNGEuOC44LDAsMCwwLS44Ljh2MS4xMkgxOS44OGExLjUxLDEuNTEsMCwwLDEtMS4yOC0uNzJMMTUuMDksMTloMTJ2Mi42NmEuNjkuNjksMCwwLDAsLjM2LjYxLjY3LjY3LDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNi4xMS0zLjY2YS42OS42''@;'; put 'put ''OSwwLDAsMCwuMzQtLjZBLjcxLjcxLDAsMCwwLDM0LjMsMTcuMzdaTTIzLjE0LDI1SDI2djIuOEgyMy4xNFptNS4zOS00LjU2VjE1LjU1bDQsMi40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNC43MiwxNy4zN2wtNS41MS0zLjMx''@;'; put 'put ''YS43MS43MSwwLDAsMC0xLjA3LjZWMTdIMTEuNzdsMy41Mi01LjZhMS40OSwxLjQ5LDAsMCwxLDEuMjgtLjcyaDEuNjRhMi40MSwyLjQxLDAsMCwwLDIuMjUsMS42MSwyLjQ4LDIuNDgsMCwwLDAsMC00Ljk1LDIuMzgsMi4zOCwwLDAsMC0yLjEzLDEuMzRIMTYuNTdhMy40OSwzLjQ5LDAsMCww''@;'; put 'put ''LTMsMS42Nkw5LjQxLDE3SDhhMy40NiwzLjQ2LDAsMSwwLC4wOCwyaDUuNjRsNC4xNSw2LjYyYTMuNDksMy40OSwwLDAsMCwzLDEuNjZoMi41OXYuOTJoNC40VjIzLjhoLTQuNHYxLjQ4SDIwLjg4YTEuNTEsMS41MSwwLDAsMS0xLjI4LS43MkwxNi4xMSwxOWgxMnYyLjI4YS43LjcsMCwwLDAs''@;'; put 'put ''LjM2LjYxLjcyLjcyLDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNS41Mi0zLjMxYS43LjcsMCwwLDAsMC0xLjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGguQ2xyU2hhcGVSYWRhcj0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIs''@;'; put 'put ''MThjMCw3LjctNi4zLDE0LTE0LDE0Yy03LjcsMC0xNC02LjMtMTQtMTRDNCwxMC42LDkuNyw0LjUsMTcuMSw0djMuN2MtNS43LDAuNS05LjksNS41LTkuNCwxMS4yczUuNSw5LjksMTEuMiw5LjRcblx0YzUuMy0wLjUsOS40LTQuOSw5LjQtMTAuM2gtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNz''@;'; put 'put ''LTguMy0zLjctOC4zLTguM2MwLTQuMiwzLjEtNy44LDcuMy04LjN2NC40Yy0xLjgsMC40LTMuMSwyLTMuMSwzLjlcblx0YzAsMi4yLDEuOCw0LDQsNHM0LTEuOCw0LTRjMC0xLjgtMS4zLTMuNC0zLTMuOFYyLjFDMTguNiwyLDE4LjMsMiwxOCwyQzkuMiwyLDIsOS4yLDIsMThzNy4yLDE2LDE2''@;'; put 'put ''LDE2czE2LTcuMiwxNi0xNkgzMnogTTIwLDE4XG5cdGMwLDEuMS0wLjksMi0yLDJzLTItMC45LTItMnMwLjktMiwyLTJTMjAsMTYuOSwyMCwxOHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMiwxOGMwLDcuNy02LjIsMTQtMTQsMTRT''@;'; put 'put ''NCwyNS44LDQsMThjMC03LjQsNS43LTEzLjUsMTMuMS0xNHYzLjdjLTUuNywwLjUtOS44LDUuNS05LjMsMTEuMnM1LjUsOS44LDExLjIsOS4zXG5cdFx0YzUuMy0wLjUsOS4zLTQuOSw5LjMtMTAuMmgtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNTOS43LDIyLjYsOS43LDE4YzAtNC4yLDMuMi03''@;'; put 'put ''LjgsNy4zLTguMnY0LjRjLTIuMSwwLjYtMy40LDIuNy0yLjksNC45XG5cdFx0YzAuNiwyLjEsMi43LDMuNCw0LjksMi45YzIuMS0wLjYsMy40LTIuNywyLjktNC45Yy0wLjQtMS40LTEuNS0yLjUtMi45LTIuOVYyYy0wLjQsMC0wLjcsMC0xLjEsMGMtOC44LDAtMTYsNy4yLTE2LDE2XG5cdFx0''@;'; put 'put ''YzAsOC44LDcuMiwxNiwxNiwxNnMxNi03LjIsMTYtMTZjMCwwLDAsMCwwLDBIMzJ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGguQ2xyU2hhcGVJbmR1Y3Rvcj0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMzEsMjUuODFjLTEuNzUsMC0zLTIu''@;'; put 'put ''NDktMy02YTEyLjc5LDEyLjc5LDAsMCwxLDEuNzItNi43LDIuNTcsMi41NywwLDAsMC0zLjc5LDBBMTIuNzksMTIuNzksMCwwLDEsMjEsMTkuNzZjMCwzLjU2LTEuMjMsNi0zLDZzLTMtMi40OS0zLTZhMTIuNzksMTIuNzksMCwwLDEsMS43Mi02LjcsMi41NywyLjU3LDAsMCwwLTMuNzksMCwx''@;'; put 'put ''Mi43OSwxMi43OSwwLDAsMSwxLjcyLDYuN2MwLDMuNTYtMS4yMyw2LTMsNnMtMy0yLjQ5LTMtNmExMi44OCwxMi44OCwwLDAsMSwxLjcxLTYuNywyLjcsMi43LDAsMCwwLTEuODktLjg3QzcuMSwxMi4xOSw1LjY5LDEzLjcsNSwxNmwtLjIzLjdIMmExLDEsMCwwLDEsMC0ySDMuMjljMS4xLTIu''@;'; put 'put ''ODMsMy4wNi00LjU1LDUuMjQtNC41NWE0LjY3LDQuNjcsMCwwLDEsMy4xNiwxLjMyLDQuNjIsNC42MiwwLDAsMSwzLjE1LTEuMzJBNC42NSw0LjY1LDAsMCwxLDE4LDExLjUxYTQuNDMsNC40MywwLDAsMSw2LjMxLDAsNC42Nyw0LjY3LDAsMCwxLDMuMTYtMS4zMmMyLjE4LDAsNC4xNCwxLjcy''@;'; put 'put ''LDUuMjQsNC41NUgzNGExLDEsMCwwLDEsMCwySDMxLjI4bC0uMjMtLjdjLS43NC0yLjM0LTIuMTUtMy44NS0zLjU4LTMuODVhMi43LDIuNywwLDAsMC0xLjg5Ljg3LDEyLjg4LDEyLjg4LDAsMCwxLDEuNzEsNi43QzI3LjI5LDIzLjMyLDI2LjA3LDI1LjgxLDI0LjMxLDI1LjgxWk0xOCwxNC45''@;'; put 'put ''M2ExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxOCwxNC45M1ptNi4zMSwwYTExLjcxLDExLjcxLDAsMCwwLTEsNC44M2MwLDIuNTQuNjYsMy43NSwxLDQsLjMyLS4yNywxLTEuNDgsMS00QTEx''@;'; put 'put ''LjcxLDExLjcxLDAsMCwwLDI0LjMxLDE0LjkzWm0tMTIuNjIsMGExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxMS42OSwxNC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIiAvPicpLGguQ2xyU2hhcGVSZXNpc3Rvcj0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjkuNDMsMjYuMzRoMEExLjQ3LDEuNDcsMCwwLDEsMjgsMjUuMjJMMjQuODYsMTMuMTUsMjEuNzQsMjUuMjJhMS40OSwxLjQ5LDAsMCwxLTEuNDUsMS4xMmgwYTEuNDksMS40OSww''@;'; put 'put ''LDAsMS0xLjQ2LTEuMTJMMTUuNzEsMTMuMTUsMTIuNiwyNS4yMmExLjUxLDEuNTEsMCwwLDEtMi45MSwwTDYuNTcsMTMuMTUsNS4yMiwxOC4zN0gyYTEsMSwwLDAsMSwwLTJIMy42N2wxLjQ1LTUuNTlBMS40OCwxLjQ4LDAsMCwxLDYuNTcsOS42NmgwQTEuNDcsMS40NywwLDAsMSw4LDEwLjc4''@;'; put 'put ''bDMuMTIsMTIuMDcsMy4xMi0xMi4wN2ExLjQ5LDEuNDksMCwwLDEsMS40NS0xLjEyaDBhMS40OSwxLjQ5LDAsMCwxLDEuNDYsMS4xMmwzLjEyLDEyLjA3LDMuMTItMTIuMDdhMS41LDEuNSwwLDAsMSwyLjksMGwzLjEyLDEyLjA3LDEuMzUtNS4yMkgzNGExLDEsMCwwLDEsMCwySDMyLjMzbC0x''@;'; put 'put ''LjQ1LDUuNTlBMS40OCwxLjQ4LDAsMCwxLDI5LjQzLDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksaC5DbHJTaGFwZUNhcGFjaXRvcj0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUsMzQuMDZhMSwxLDAsMCwxLTEtMVYzLjE1YTEs''@;'; put 'put ''MSwwLDEsMSwyLDBWMzMuMDZBMSwxLDAsMCwxLDE1LDM0LjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDM0LjA2YTEsMSwwLDAsMS0xLTFWMy4xNWExLDEsMCwxLDEsMiwwVjMzLjA2QTEsMSwwLDAsMSwyMSwzNC4wNloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC40NiwxOUgzYTEsMSwwLDAsMSwwLTJIMTQuNDZhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOUgyMS41''@;'; put 'put ''NGExLDEsMCwwLDEsMC0ySDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxoLkNsclNoYXBlU3F1aWQ9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDdhMSwxLDAsMCwxLTEtMVYzLjE5YTEsMSwwLDAsMSwyLDBW''@;'; put 'put ''NkExLDEsMCwwLDEsMTgsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNGExLDEsMCwwLDEtMS0xVjMwYTEsMSwwLDAsMSwyLDB2M0ExLDEsMCwwLDEsMTgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMiIgLz48cGF0aCBkPSJNNy40MSwxOGwxLjc4LTEuNzdhMSwxLDAsMSwwLTEuNDItMS40Mkw2LDE2LjU5LDQuMjMsMTQuODFhMSwxLDAsMSwwLTEuNDIsMS40Mkw0LjU5LDE4LDIuODEsMTkuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEt''@;'; put 'put ''LjI5TDYsMTkuNDFsMS43NywxLjc4YTEsMSwwLDAsMCwxLjQyLDAsMSwxLDAsMCwwLDAtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik02LDEzLjc2bC4zNi0uMzZhMywzLDAsMCwxLDIuMTEtLjg4LDExLDExLDAsMCwxLDE5LDAs''@;'; put 'put ''MywzLDAsMCwxLDIuMTIuODhsLjM2LjM2LjItLjJhMTMsMTMsMCwwLDAtMjQuNCwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMwLDIyLjI0bC0uMzYuMzZhMywzLDAsMCwxLTIuMTIuODgsMTEsMTEsMCwwLDEtMTksMCwzLDMsMCww''@;'; put 'put ''LDEtMi4xMi0uODhMNiwyMi4yNGwtLjIuMmExMywxMywwLDAsMCwyNC40LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzEuNDEsMThsMS43OC0xLjc3YTEsMSwwLDAsMC0xLjQyLTEuNDJMMzAsMTYuNTlsLTEuNzctMS43OGExLDEs''@;'; put 'put ''MCwxLDAtMS40MiwxLjQyTDI4LjU5LDE4bC0xLjc4LDEuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEtLjI5TDMwLDE5LjQxbDEuNzcsMS43OGExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCwwLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxoLkNsclNoYXBlSG9zdEdyb3VwPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS4wOCwzNGgtMTRBMS4wOCwxLjA4LDAsMCwxLDYsMzNWMTJhMS4wOCwxLjA4LDAsMCwxLDEuMDgtMS4wOGgxNEExLjA4LDEuMDgsMCwwLDEsMjIuMTYsMTJW''@;'; put 'put ''MzNBMS4wOCwxLjA4LDAsMCwxLDIxLjA4LDM0Wk04LjE2LDMxLjg4SDIwVjEzSDguMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxyZWN0IHg9IjEwLjA4IiB5PSIxNC45NiIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI2LjEsMjcuODFoLTJWOWgtMTJWN2gxM2ExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG48cGF0aCBkPSJNMzAuMDgsMjNoLTJWNWgtMTFWM2gxMmExLDEsMCww''@;'; put 'put ''LDEsMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMTMuMDgiIHk9IjI3Ljg4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyLjE2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cblxuPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE1LjA4LDMxIEwxLjA4LDMxIEMwLjUxMzQyNzE5NywzMS4wMDE1NTY0IDAuMDQxOTY2Mzc2NSwzMC41NjUwMTg2IDAsMzAgTDAsOSBDMCw4LjQwMzUzMjQ3IDAuNDgzNTMyNDcsNy45MiAxLjA4LDcuOTIgTDE1LjA4LDcuOTIg''@;'; put 'put ''QzE1LjY3NjQ2NzUsNy45MiAxNi4xNiw4LjQwMzUzMjQ3IDE2LjE2LDkgTDE2LjE2LDMwIEMxNi4xMTgwMzM2LDMwLjU2NTAxODYgMTUuNjQ2NTcyOCwzMS4wMDE1NTY0IDE1LjA4LDMxIFogTTQuMDgsMTEuOTYgTDQuMDgsMTMuOTYgTDEyLjA4LDEzLjk2IEwxMi4wOCwxMS45NiBMNC4wOCwx''@;'; put 'put ''MS45NiBaIE03LjA4LDI0Ljg4IEw3LjA4LDI3LjA0IEw5LjA4LDI3LjA0IEw5LjA4LDI0Ljg4IEw3LjA4LDI0Ljg4IFoiIC8+XG48cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuMSwyNC44MSBMMTguMSwyNC44MSBMMTguMSw2IEw2LjEsNiBMNi4x''@;'; put 'put ''LDQgTDE5LjEsNCBDMTkuNjUyMjg0Nyw0IDIwLjEsNC40NDc3MTUyNSAyMC4xLDUgTDIwLjEsMjQuODEgWiIgLz5cbjxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yNC4wOCwyMCBMMjIuMDgsMjAgTDIyLjA4LDIgTDExLjA4LDIgTDExLjA4LDAgTDIz''@;'; put 'put ''LjA4LDAgQzIzLjYzMjI4NDcsMCAyNC4wOCwwLjQ0NzcxNTI1IDI0LjA4LDEgTDI0LjA4LDIwIFoiIC8+JyksaC5DbHJTaGFwZVN0b3JhZ2VBZGFwdGVyPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjA2LDMwYTEsMSwwLDAsMS0xLTFWOGgtMmExLDEsMCwwLDEsMC0yaDRWMjlBMSwx''@;'; put 'put ''LDAsMCwxLDYuMDYsMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzAuMDYsMjdoLTI1VjloMjVhMywzLDAsMCwxLDMsM1YyNEEzLDMsMCwwLDEsMzAuMDYsMjdabS0yMy0yaDIzYTEsMSwwLDAsMCwxLTFWMTJhMSwxLDAsMCww''@;'; put 'put ''LTEtMWgtMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSIyMi4wNiIgeT0iMjAiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjIyLjA2''@;'; put 'put ''IiB5PSIxNCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTE5LjA2LDIyaC04VjIwaDdWMTRoMnY3QTEsMSwwLDAsMSwxOS4wNiwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC01Ii8+JyksaC5DbHJTaGFwZU5vZGVHcm91cD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNTMsMjEuNThsLTQuOTQtMi44M1YxMy4wOWExLDEsMCwwLDAtLjUxLS44N0wyMi42NCw5LjFhMSwxLDAsMCwwLTEsMEwxNi4yLDEyLjIyYTEsMSwwLDAsMC0uNTEuODd2NS42''@;'; put 'put ''NmwtNC45NCwyLjgzYTEsMSwwLDAsMC0uNS44N3Y2LjI0YTEsMSwwLDAsMCwuNS44Nmw1LjQ1LDMuMTJhMSwxLDAsMCwwLDEsMGw0Ljk1LTIuODMsNC45NSwyLjgzYTEsMSwwLDAsMCwuNS4xNCwxLDEsMCwwLDAsLjQ5LS4xNGw1LjQ1LTMuMTJhMSwxLDAsMCwwLC41LS44NlYyMi40NUExLDEs''@;'; put 'put ''MCwwLDAsMzMuNTMsMjEuNThaTTIyLjE0LDExLjEybDQuNDUsMi41NVYxOWwtNC40NiwyLjU2LTQuNDQtMi42VjEzLjY3Wk0xNi42OSwzMC42NWwtNC40NC0yLjU0VjIzbDQuNjgtMi42OCw0LjQsMi41N1YyOFpNMzIsMjguMTFsLTQuNDQsMi41NEwyMi45MywyOFYyMi45M2w0LjQ2LTIuNTdM''@;'; put 'put ''MzIsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNywyNy40M2ExLDEsMCwwLDEtMS0xVjE5LjlBMSwxLDAsMCwxLDYuNSwxOWw0Ljk1LTIuODNWMTAuNTRhMSwxLDAsMCwxLC41LS44N2w1LjIxLTNhMSwxLDAsMCwxLDEuMzcu''@;'; put 'put ''MzcsMSwxLDAsMCwxLS4zOCwxLjM3bC00LjcsMi42OHY1LjY2YTEsMSwwLDAsMS0uNTEuODdMOCwyMC40OHY1Ljk1QTEsMSwwLDAsMSw3LDI3LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMsMjUuMDVhMSwxLDAsMCwxLTEt''@;'; put 'put ''MVYxNy41M2ExLDEsMCwwLDEsLjUtLjg2bDUtMi44NFY4LjE3QTEsMSwwLDAsMSw4LDcuMzFsNS4yNS0zYTEsMSwwLDAsMSwxLDEuNzRMOS40NSw4Ljc1djUuNjZhMSwxLDAsMCwxLS41MS44N0w0LDE4LjExdjUuOTRBMSwxLDAsMCwxLDMsMjUuMDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLGguQ2xyU2hhcGVOb2Rlcz0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuNSwzNC4yOSwyLDI5LjM5VjE5LjU4bDguNS00LjksOC41LDQuOXY5LjgxWk00LDI4LjIzLDEwLjUsMzIsMTcsMjguMjNWMjAuNzRMMTAuNSwxNyw0LDIwLjc0WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTI1LjUsMzQuMjksMTcsMjkuMzlWMTkuNThsOC41LTQuOSw4LjUsNC45djkuODFaTTE5LDI4LjIzLDI1LjUsMzIsMzIsMjguMjNWMjAuNzRMMjUuNSwxNywxOSwyMC43NFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xOCwyMS4zMmwtOC41LTQuOVY2LjYxTDE4LDEuNzFsOC41LDQuOXY5LjgxWm0tNi41LTYuMDZMMTgsMTlsNi41LTMuNzVWNy43N0wxOCw0LDExLjUsNy43N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zIi8+JyksaC5DbHJTaGFwZU5hbWVzcGFjZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsNC4xOGExLDEsMCwxLDAtMSwxLjczbDYsMy40N1YyNi42MmwtNiwzLjQ3YTEsMSwwLDAsMC0uMzcsMS4zNiwxLDEsMCwwLDAsMS4zNy4zN2w3LTQuMDVWOC4y''@;'; put 'put ''M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik05LjY4LDI5LjksNCwyNi42MlY5LjM4TDkuNjgsNi4xYTEsMSwwLDEsMC0xLTEuNzNMMiw4LjIzVjI3Ljc3bDYuNjgsMy44NmExLDEsMCwwLDAsMS4zNy0uMzdBMSwxLDAsMCwwLDku''@;'; put 'put ''NjgsMjkuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xMCwxMlYyNGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJWMTJhMiwyLDAsMCwwLTItMkgxMkEyLDIsMCwwLDAsMTAsMTJabTcsMHY1SDEyVjEyWm0tNSw3aDV2''@;'; put 'put ''NUgxMlptNyw1VjE5aDV2NVptNS03SDE5VjEyaDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLGguQ2xyU2hhcGVOb2RlPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMC42Niw3LDI0LjMzVjExLjY3TDE4LDUuMzRsMTEsNi4zM1YyNC4z''@;'; put 'put ''M1pNOSwyMy4xOGw5LDUuMTcsOS01LjE3VjEyLjgyTDE4LDcuNjUsOSwxMi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+JyksaC5DbHJTaGFwZVBvZD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsMzJIMTBhNiw2LDAsMCwxLTYtNlYxMGE2''@;'; put 'put ''LDYsMCwwLDEsNi02SDI2YTYsNiwwLDAsMSw2LDZWMjZBNiw2LDAsMCwxLDI2LDMyWk0xMCw2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNmE0LDQsMCwwLDAsNC00VjEwYTQsNCwwLDAsMC00LTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv''@;'; put 'put ''PlxuICA8cGF0aCBkPSJNMjYuNTYsMTVIMTUuNDRBMS40MywxLjQzLDAsMCwwLDE0LDE2LjQ0djguMTJBMS40MywxLjQzLDAsMCwwLDE1LjQ0LDI2SDI2LjU2QTEuNDMsMS40MywwLDAsMCwyOCwyNC41NlYxNi40NEExLjQzLDEuNDMsMCwwLDAsMjYuNTYsMTVaTTI2LDI0SDE2VjE3SDI2WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTEyLjQsMTlIMTBWMTJIMjB2MS40aDJ2LTJBMS40MywxLjQzLDAsMCwwLDIwLjU2LDEwSDkuNDRBMS40MywxLjQzLDAsMCwwLDgsMTEuNDR2OC4xMkExLjQzLDEuNDMsMCwwLDAsOS40NCwy''@;'; put 'put ''MWgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxoLkNsckNvbnRyb2xMdW49KDAscy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUsMjUuNSwwLDAsMCwyLjc1LjU5bDEuMjEtMS40MWEyNC4xMywyNC4xMywwLDAsMS00LS44''@;'; put 'put ''M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik02LDI3LjUzVjEwLjNjMi45LDEuNDMsOC4zNCwxLjg4LDEyLDEuODhzOS4xLS40NSwxMi0xLjg4djUuMTFjLS45MS44Mi01LDIuMTMtMTIsMi4xM0EzNC44MSwzNC44MSwwLDAsMSw4''@;'; put 'put ''LDE2LjMzVjE4YTQwLjg2LDQwLjg2LDAsMCwwLDEwLDEuMTZjMy40NiwwLDkuMTMtLjQ1LDEyLTEuOTF2My4yM2gyVjhoMHMwLDAsMC0uMDdjMC0zLjM1LTguOC00LjI1LTE0LTQuMjVTNCw0LjU4LDQsNy45M3YxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4y''@;'; put 'put ''OCw2LjEzLDI3Ljg0LDYsMjcuNTNaTTE4LDUuNjhjNy4xNSwwLDExLjUzLDEuNDQsMTIsMi4yNS0uNDYuODEtNC44NCwyLjI1LTEyLDIuMjVTNi4zMSw4LjY5LDYsOEM2LjMxLDcuMTgsMTAuNzEsNS42OCwxOCw1LjY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuXG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUsMjUuNSwwLDAsMCwyLjc1''@;'; put 'put ''LjU5bDEuMjEtMS40MWEyNC4xMywyNC4xMywwLDAsMS00LS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzIuMDksMjJIMTUuNDZsLTUuNDEsNi4zMUwxNS40OSwzNGgxNi42YTIsMiwwLDAsMCwy''@;'; put 'put ''LTJWMjMuOTNBMiwyLDAsMCwwLDMyLjA5LDIyWm0wLDEwSDE2LjM0bC0zLjU5LTMuNzdMMTYuMzgsMjRIMzIuMDl2OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEs''@;'; put 'put ''MUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTE4LDE3LjU0QTM0LjgxLDM0LjgxLDAsMCwxLDgsMTYuMzNWMThhNDAuODYsNDAuODYsMCwwLDAsMTAsMS4xNmMzLjQ2''@;'; put 'put ''LDAsOS4xMy0uNDUsMTItMS45MXYzLjIzaDJWMTMuMjJhNy4zMiw3LjMyLDAsMCwxLTIsLjI4djEuOTFDMjkuMDksMTYuMjMsMjUsMTcuNTQsMTgsMTcuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPHBhdGggZD0i''@;'; put 'put ''TTYsMjcuNTNWMTAuM2MyLjksMS40Myw4LjM0LDEuODgsMTIsMS44OGE0Ny42Niw0Ny42NiwwLDAsMCw3LjA5LS41Miw3LjQ1LDcuNDUsMCwwLDEtMS41MS0xLjgsNDcuNCw0Ny40LDAsMCwxLTUuNTguMzJDMTAuNzEsMTAuMTgsNi4zMSw4LjY5LDYsOGMuMzItLjgsNC43Mi0yLjMsMTItMi4z''@;'; put 'put ''LDEuNjYsMCwzLjE2LjA4LDQuNTEuMjFhNy41Niw3LjU2LDAsMCwxLC4yOS0yYy0xLjctLjE3LTMuMzgtLjI0LTQuOC0uMjQtNS4yLDAtMTQsLjktMTQsNC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxu''@;'; put 'put ''ICA8cGF0aCBkPSJNOCwyNC41OWEyNS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIi8+PHBhdGggZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4w''@;'; put 'put ''OSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjda''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNNiwyNy41M1YxMC4zYzIuOSwxLjQzLDguMzQsMS44OCwxMiwxLjg4aC41OWEzLjU5LDMuNTksMCwwLDEsLjMyLTJIMThDMTAuNzEsMTAuMTgsNi4zMSw4''@;'; put 'put ''LjY5LDYsOGMuMzItLjgsNC43Mi0yLjMsMTItMi4zLDEuMjIsMCwyLjM1LjA1LDMuNDEuMTJsMS4xLTEuOTFjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0uMjEtNS4yLDAtMTQsLjktMTQsNC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3''@;'; put 'put ''Ljg0LDYsMjcuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNOCwxNi4zM1YxOGE0MC44Niw0MC44NiwwLDAsMCwxMCwxLjE2YzMuNDYsMCw5LjEzLS40NSwxMi0xLjkxdjMuMjNoMlYxNS40SDMw''@;'; put 'put ''Yy0uOTEuODItNSwyLjEzLTEyLDIuMTNBMzQuODEsMzQuODEsMCwwLDEsOCwxNi4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCww''@;'; put 'put ''LDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cblxuICA8cGF0''@;'; put 'put ''aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0Mi40Myw0Mi40MywwLDAs''@;'; put 'put ''MSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4LDE5YzUsMCwxMy4yLS44MiwxNC0zLjgyVjEwLjcyYy0yLjIxLDMuMzYtMTAuNDksMy40Ni0xNCwzLjQ2QTQyLjEyLDQyLjEyLDAsMCwxLDgsMTMuMTFWMTFhNDAuNTksNDAuNTksMCwwLDAsMTAsMS4xNGM1LDAsMTMuMjgtLjgz''@;'; put 'put ''LDE0LTMuODhWNy44M2gwYy0uMTktMy4yNy04Ljg0LTQuMTUtMTQtNC4xNVM0LjIxLDQuNTYsNCw3LjgzSDR2MTkuN2MwLDIuMTYsMy42NCwzLjMsNy42MywzLjg0bDIuODQsMywuNTkuNjJoMTdhMywzLDAsMCwwLDMtM1YyMy45M0EzLDMsMCwwLDAsMzIuMDksMjFaTTgsMjYuMDhWMjQuNGEy''@;'; put 'put ''NS43OSwyNS43OSwwLDAsMCwzLjQ2LjdsLTEuMjQsMS40NEM5LjQ2LDI2LjQyLDguNzEsMjYuMjcsOCwyNi4wOFpNMzMuMDksMzJhMSwxLDAsMCwxLTEsMUgxNS45MkwxMS40LDI4LjIzLDE1LjkyLDIzSDMyLjA5YTEsMSwwLDAsMSwxLDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIxSDMyVjE3LjMyYy0xLjks''@;'; put 'put ''Mi45My0xMC40NiwzLjMtMTQsMy4zQTQyLjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcuODhBNDAuNTksNDAuNTksMCwwLDAsMTgsMTljNSwwLDEzLjItLjgyLDE0LTMuODJ2LTJhNy4zNCw3LjM0LDAsMCwxLTQuMTIsMCwzOS40NywzOS40NywwLDAsMS05Ljg4LDFBNDIuMTIsNDIuMTIsMCww''@;'; put 'put ''LDEsOCwxMy4xMVYxMWE0MC41OSw0MC41OSwwLDAsMCwxMCwxLjE0LDQ3Ljc2LDQ3Ljc2LDAsMCwwLDcuMDktLjUyQTcuNDUsNy40NSwwLDAsMSwyMi44LDMuOTJjLTEuNy0uMTctMy4zOC0uMjQtNC44LS4yNC01LjE0LDAtMTMuNzkuODgtMTQsNC4xNUg0djE5LjdjMCwyLjE2LDMuNjQsMy4z''@;'; put 'put ''LDcuNjMsMy44NGwyLjg0LDMsLjU5LjYyaDE3YTMsMywwLDAsMCwzLTNWMjMuOTNBMywzLDAsMCwwLDMyLjA5LDIxWk04LDI2LjA4VjI0LjRhMjUuNzksMjUuNzksMCwwLDAsMy40Ni43bC0xLjI0LDEuNDRDOS40NiwyNi40Miw4LjcxLDI2LjI3LDgsMjYuMDhaTTMzLjA5LDMyYTEsMSwwLDAs''@;'; put 'put ''MS0xLDFIMTUuOTJMMTEuNCwyOC4yMywxNS45MiwyM0gzMi4wOWExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik0xNi4xMSwyN2ExLDEsMCwxLDAsMSwxQTEsMSwwLDAsMCwxNi4xMSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5c''@;'; put 'put ''biAgPHBhdGggZD0iTTMyLjA5LDIxSDMyVjE3LjMyYy0xLjksMi45My0xMC40NiwzLjMtMTQsMy4zQTQyLjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcuODhBNDAuNTksNDAuNTksMCwwLDAsMTgsMTljNC44NSwwLDEyLjgtLjc5LDEzLjkxLTMuNjJIMjIuMjNhMy42OCwzLjY4LDAsMCwxLTIu''@;'; put 'put ''NzMtMS4yM0gxOEE0Mi4xMiw0Mi4xMiwwLDAsMSw4LDEzLjExVjExYTQwLjU5LDQwLjU5LDAsMCwwLDEwLDEuMTRoLjU5YTMuNjEsMy42MSwwLDAsMSwuNDYtMi4yOWwzLjQ2LTZjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0uMjEtNS4xNCwwLTEzLjc5Ljg4LTE0LDQuMTVINHYxOS43YzAsMi4x''@;'; put 'put ''NiwzLjY0LDMuMyw3LjYzLDMuODRsMi44NCwzLC41OS42MmgxN2EzLDMsMCwwLDAsMy0zVjIzLjkzQTMsMywwLDAsMCwzMi4wOSwyMVpNOCwyNi4wOFYyNC40YTI1Ljc5LDI1Ljc5LDAsMCwwLDMuNDYuN2wtMS4yNCwxLjQ0QzkuNDYsMjYuNDIsOC43MSwyNi4yNyw4LDI2LjA4Wk0zMy4wOSwz''@;'; put 'put ''MmExLDEsMCwwLDEtMSwxSDE1LjkyTDExLjQsMjguMjMsMTUuOTIsMjNIMzIuMDlhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEu''@;'; put 'put ''MjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcp''@;'; put 'put ''LGguQ2xyU2hhcGVNZWRpYUNoYW5nZXI9KDAscy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjZB''@;'; put 'put ''MiwyLDAsMCwwLDMwLDRaTTYsMzBWNkgzMFYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjIwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBo''@;'; put 'put ''ZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0yNy4yMiwxMEgyMHY0YS44LjgsMCwxLDAsMS41OSwwVjExLjZoNS42M2EuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTUiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTAiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxOCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjIiIHdpZHRoPSI4LjE0IiBo''@;'; put 'put ''ZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cblxuICA8cmVjdCB4PSIy''@;'; put 'put ''MCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyMCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRo''@;'; put 'put ''PSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxMCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4''@;'; put 'put ''LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyMiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtOC0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTIwLDE0YS44LjgsMCwxLDAsMS41''@;'; put 'put ''OSwwVjExLjZIMjVBNy43NCw3Ljc0LDAsMCwxLDIzLjY2LDEwSDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzAsMTMuNWgwVjMwSDZWNkgyMi41VjZhNy4zNyw3LjM3LDAsMCwxLC4yOC0ySDZB''@;'; put 'put ''MiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuMzcsNy4zNywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMTEtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRo''@;'; put 'put ''PSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjEwIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNS0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4LjE0''@;'; put 'put ''IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjIyIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtOC0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMwLDE1LjRWMzBINlY2SDIx''@;'; put 'put ''LjI3bDEuMTgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEwLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTMwLDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMy''@;'; put 'put ''SDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMTcsMjhIOC44MVYyNkgxN1ptMC00SDguODFWMjJIMTdabTAtNEg4LjgxVjE4SDE3Wm0wLTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIwVjIyaDJabTAtNEgyMFYxOGgyWm00LDRIMjRWMjJoMlptMC00SDI0''@;'; put 'put ''VjE4aDJabTAtNkgyMFYxMGg2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuXG4gIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS00LTEuMTZWMTRIMjBWMTBoMy42NkE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YTcuMzcsNy4zNywwLDAsMSwuMjgt''@;'; put 'put ''Mkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVpNMTcsMjhIOC44MVYyNkgxN1ptMC00SDguODFWMjJI''@;'; put 'put ''MTdabTAtNEg4LjgxVjE4SDE3Wm0wLTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIwVjIyaDJabTAtNEgyMFYxOGgyWm00LDRIMjRWMjJoMlptMC00SDI0VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxu''@;'; put 'put ''ICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTIyLjIzLDE1LjRhMy42OCwzLjY4LDAsMCwxLTMuMTgtNS41MUwyMi40NSw0SDZBMiwy''@;'; put 'put ''LDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRI''@;'; put 'put ''MTdabTAtNEg4LjgxVjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5''@;'; put 'put ''LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxl''@;'; put 'put ''cnQiLz5cbiAgJyksaC5DbHJTaGFwZVRhcGVEcml2ZT0oMCxzLmNsckljb25TVkcpKCdcbiAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTMuMzMsMTMuMzVhNC41Miw0LjUyLDAsMSwwLDQuNTMsNC41MkE0LjUzLDQuNTMsMCwwLDAsMTMuMzMsMTMuMzVabTAsNy40NGEyLjkyLDIuOTIsMCwxLDEsMi45My0yLjkyQTIuOTIsMi45MiwwLDAsMSwxMy4z''@;'; put 'put ''MywyMC43OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy42MiwxMy4zNWE0LjUyLDQuNTIsMCwxLDAsNC41Miw0LjUyQTQuNTMsNC41MywwLDAsMCwyMy42MiwxMy4zNVptMCw3LjQ0YTIuOTIsMi45MiwwLDEsMSwyLjkyLTIu''@;'; put 'put ''OTJBMi45MiwyLjkyLDAsMCwxLDIzLjYyLDIwLjc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTYsMTFWMjMuNTVIOFYxMkgyOS4zNFYxMEg3QTEsMSwwLDAsMCw2LDExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiLz5cblxuICA8cGF0aCBkPSJNOC44MSwxNy44N2E0LjUzLDQuNTMsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCw4LjgxLDE3Ljg3Wm03LjQ1LDBBMi45MywyLjkzLDAsMSwxLDEzLjMzLDE1LDIuOTMsMi45MywwLDAsMSwxNi4yNiwxNy44N1oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMTkuMSwxNy44N2E0LjUyLDQuNTIsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCwxOS4xLDE3Ljg3Wm03LjQ0LDBBMi45MiwyLjkyLDAsMSwxLDIzLjYyLDE1LDIu''@;'; put 'put ''OTIsMi45MiwwLDAsMSwyNi41NCwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzIsMTMuMjJWMjhINFY4SDIyLjc4YTcuMzcsNy4zNywwLDAsMS0uMjgtMkg0QTIsMiwwLDAsMCwyLDhWMjhh''@;'; put 'put ''MiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNjUsNy42NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNNiwxMVYyMy41NUg4VjEySDI1LjUxYTcuNjYs''@;'; put 'put ''Ny42NiwwLDAsMS0xLjg1LTJIN0ExLDEsMCwwLDAsNiwxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik04LjgxLDE3Ljg3YTQuNTMsNC41MywwLDEsMCw0LjUyLTQuNTJBNC41Myw0LjUzLDAsMCwwLDguODEsMTcuODdabTcuNDUsMEEyLjkzLDIuOTMsMCwxLDEsMTMuMzMsMTUsMi45MywyLjkzLDAsMCwx''@;'; put 'put ''LDE2LjI2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTcsMTBhMSwxLDAsMCwwLTEsMVYyMy41NUg4VjEySDE4LjU3QTMuNywzLjcsMCwwLDEsMTksMTBaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYyOEg0VjhIMjAuMTRsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjIuMDksMTUuMzlhMy42NSwzLjY1LDAsMCwxLTEuOC0uNTUsNC41MSw0LjUxLDAsMSwwLDcuMTEuNTZIMjUuMTdhMi45MiwyLjkyLDAsMSwxLTMuMDgsMFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cblxuICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhB''@;'; put 'put ''MiwyLDAsMCwwLDMyLDZaTTMwLDI0SDZWMTJIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMi4yMSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwxMi4yMSwyM1ptMC03YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDEyLjIxLDE2''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjMuNzksMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMjMuNzksMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwyMy43OSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTMiLz5cblxuICA8cGF0aCBkPSJNMTIuMjEsMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMTIuMjEsMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwxMi4yMSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gIDxwYXRoIGQ9Ik0yMy43OSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwyMy43OSwyM1ptMC03YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDIzLjc5LDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGgg''@;'; put 'put ''ZD0iTTMwLDEzLjVWMjRINlYxMkgyNS41MWE3LjQ5LDcuNDksMCwwLDEtMy02SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTMtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTcuMiwxOGE1LDUsMCwxLDAsNS01QTUsNSwwLDAs''@;'; put 'put ''MCw3LjIsMThabTcsMGEyLDIsMCwxLDEtMi0yQTIsMiwwLDAsMSwxNC4yMiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTE4Ljc4LDE4YTUsNSwwLDEsMCw5LjI3LTIuNkgyMi4yM2EzLjcxLDMuNzEs''@;'; put 'put ''MCwwLDEtMi4xNy0uNzFBNSw1LDAsMCwwLDE4Ljc4LDE4Wm01LTJhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMjMuNzksMTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMwVjI0SDZW''@;'; put 'put ''MTJIMTguNTdhMy42NSwzLjY1LDAsMCwxLC40OC0yLjExTDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHBh''@;'; put 'put ''dGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLGguQ2xyU2hhcGVBbmltYXRpb249KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjE2LDMxLjcxYTQuNCw0LjQsMCwwLDEtNC42NC0xQTQuMzQsNC4zNCwwLDAsMSw0LjIzLDI3LjZhNC40MSw0LjQxLDAsMCwxLC4xOC0x''@;'; put 'put ''LjIsMTEuNjEsMTEuNjEsMCwwLDEtMS0yLjU2LDYuNCw2LjQsMCwwLDAsOS4zMyw4LjYzQTExLjU1LDExLjU1LDAsMCwxLDEwLjE2LDMxLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4LjQxLDI3LjY4YTcuNjEsNy42MSww''@;'; put 'put ''LDAsMS05LjA4LTEuMjYsNy41OCw3LjU4LDAsMCwxLTEuMjctOS4wNiwxNC4yNiwxNC4yNiwwLDAsMS0uMzctMi44NSw5LjU4LDkuNTgsMCwwLDAsLjIyLDEzLjMzLDkuNjMsOS42MywwLDAsMCwxMy4zNS4yMkExNC40NiwxNC40NiwwLDAsMSwxOC40MSwyNy42OFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS42NiwyNi4yMWExMi4xLDEyLjEsMCwxLDEsOC41Ny0zLjU0aDBBMTIuMTEsMTIuMTEsMCwwLDEsMjEuNjYsMjYuMjFaTTIxLjY2LDRBMTAuMTEsMTAuMTEsMCwwLDAsMTEuNTQsMTQuMTFhMTAsMTAsMCwwLDAs''@;'; put 'put ''Myw3LjE0LDEwLjEyLDEwLjEyLDAsMCwwLDE0LjMxLDBBMTAuMTEsMTAuMTEsMCwwLDAsMjEuNjYsNFptNy44NiwxOGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0zLjUsMjMuNzdhNi40MSw2LjQxLDAsMCwwLDkuMzMs''@;'; put 'put ''OC42N0ExMS42NSwxMS42NSwwLDAsMSwzLjUsMjMuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik03LjY4LDE0LjUzYTkuNiw5LjYsMCwwLDAsMTMuNCwxMy43QTE0LjExLDE0LjExLDAsMCwxLDcuNjgsMTQuNTNaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS43OCwyQTEyLjEyLDEyLjEyLDAsMSwxLDkuNjYsMTQuMTUsMTIuMTIsMTIuMTIsMCwwLDEsMjEuNzgsMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAnKSxoLkNsclNoYXBl''@;'; put 'put ''Q2lDZD0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNTMsMTkuODFhNy40NSw3LjQ1LDAsMCwxLTEuNjUtLjE4LDEwLjQ4LDEwLjQ4LDAsMCwxLC43MiwyLjEzYy4zLDAsLjYxLDAsLjkzLDBhOS41Miw5LjUyLDAsMCwwLDMtLjQ5bC0uOTMtMS44MUE3LjY3LDcuNjcsMCwwLDEsMjMu''@;'; put 'put ''NTMsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTguMzYsMTcuODcsMTgsMTcuNDlhNy40LDcuNCwwLDAsMS0yLjItNS45Miw3LjMxLDcuMzEsMCwwLDEsMS41NC00TDE3LjI2LDlBMSwxLDAsMCwwLDE4LjE3LDEwaC4w''@;'; put 'put ''OWExLDEsMCwwLDAsMS0uOTFMMTkuNiw1YTEsMSwwLDAsMC0uMjktLjc5QTEsMSwwLDAsMCwxOC41Miw0bC00LjA5LjM1YTEsMSwwLDAsMCwuMTcsMmwxLjI5LS4xMWE5LjQ1LDkuNDUsMCwwLDAtMi4wNSw1LjMyLDkuMjgsOS4yOCwwLDAsMCwyLjY3LDcuMjZsLjMxLjM3YTcuMzMsNy4zMyww''@;'; put 'put ''LDAsMSwyLjA2LDQuOTEsNy4zOSw3LjM5LDAsMCwxLS4yNiwyLjQ3bDEuOC45MWE4Ljc2LDguNzYsMCwwLDAsLjQ1LTMuNTFBOS4yOCw5LjI4LDAsMCwwLDE4LjM2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMyLjQs''@;'; put 'put ''MTcuOTEsMzEuMTksMThBOS42NSw5LjY1LDAsMCwwLDIzLjUzLDIuNDVhOS4zMyw5LjMzLDAsMCwwLTMsLjQ5bC45MSwxLjhhNy42Nyw3LjY3LDAsMCwxLDkuNzYsNy4zOSw3LjU4LDcuNTgsMCwwLDEtMS42NSw0LjcybC4xLTEuNTRhMSwxLDAsMSwwLTItLjEzbC0uMjgsNC4wOGExLDEsMCww''@;'; put 'put ''LDAsLjMxLjc4Ljk0Ljk0LDAsMCwwLC42OS4yOGguMWw0LjA4LS40MmExLDEsMCwwLDAsLjktMS4xQTEsMSwwLDAsMCwzMi40LDE3LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTQuMDcsMjAuNDRoLjA4bDQuMDktLjM1YTEs''@;'; put 'put ''MSwwLDEsMC0uMTctMmwtMS4zOS4xMmE3LjYzLDcuNjMsMCwwLDEsNC41Mi0xLjQ5LDcuOSw3LjksMCwwLDEsMS42My4xOCwxMC4yMywxMC4yMywwLDAsMS0uNzEtMi4xM2MtLjMsMC0uNjEsMC0uOTIsMGE5LjY2LDkuNjYsMCwwLDAtNS45LDJsLjEyLTEuMzFhMSwxLDAsMCwwLS45Mi0xLjA4''@;'; put 'put ''LDEsMSwwLDAsMC0xLjA4LjkxbC0uMzUsNC4wOGExLDEsMCwwLDAsMSwxLjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTE4LjQyLDI4LjIzbC00LjA5LjI3YTEsMSwwLDAsMCwuMTMsMkwxNiwzMC4zOWE3LjcxLDcuNzEsMCww''@;'; put 'put ''LDEtMTIuNTQtNiw3LjYsNy42LDAsMCwxLC4yOS0yTDIsMjEuNDZhOS41OSw5LjU5LDAsMCwwLS40NywyLjk1QTkuNyw5LjcsMCwwLDAsMTcuMTksMzJsLS4xMiwxLjE4YTEsMSwwLDAsMCwuODksMS4xaC4xMWExLDEsMCwwLDAsMS0uOWwuNDItNC4wNmExLDEsMCwwLDAtMS4wNi0xLjFaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLGguQ2xyU2hhcGVGaWxlU2hhcmUyPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNSw0SDcuODNBMS44OSwxLjg5LDAsMCwwLDYsNS45MVYzMC4wOUExLjg5LDEuODksMCwwLDAsNy44MywzMkgyOC4xN0Ex''@;'; put 'put ''Ljg3LDEuODcsMCwwLDAsMzAsMzAuMDlWOVpNMjQsNS43OCwyOC4yLDEwSDI0Wk04LDMwVjZIMjJ2Nmg2VjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDIxLjgxYTIuMTEsMi4xMSwwLDAsMC0xLjQ0LjYybC01LjcyLTIu''@;'; put 'put ''NjZ2LS40NGw1LjY2LTIuNjVhMi4wOCwyLjA4LDAsMSwwLC4wNi0yLjk0aDBhMi4xNCwyLjE0LDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIuMDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42NnYuM0EyLjA5LDIuMDksMCwxLDAsMjIsMjEuODRaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICBcbiAgPHBhdGggZD0iTTI1LDQuMDZINy44M0ExLjg5LDEuODksMCwwLDAsNiw2VjMwLjE1YTEuODksMS44OSwwLDAsMCwxLjgzLDEuOTFIMjguMTdBMS44NywxLjg3LDAsMCwwLDMwLDMwLjE1VjlaTTIyLDI2YTIuMDks''@;'; put 'put ''Mi4wOSwwLDAsMS0yLjEtMi4wOHYtLjNMMTQuMjcsMjFsLS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4xNCwyLjE0LDAsMCwxLC42NC0xLjQ4aDBhMi4wOCwyLjA4LDAsMSwxLS4wNiwyLjk0bC01LjY2LDIuNjV2LjQ0bDUuNzIsMi42NkEyLjExLDIu''@;'; put 'put ''MTEsMCwwLDEsMjIsMjEuODFsMCwwQTIuMDksMi4wOSwwLDAsMSwyMiwyNlptMi0xNlY1Ljg0bDQuMiw0LjIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGguVGVjaG5vbG9neVNoYXBlcz17InJ1bGVyLXBlbmNpbCI6aC5DbHJTaGFwZVJ1bGVyUGVuY2ls''@;'; put 'put ''LCJwaG9uZS1oYW5kc2V0IjpoLkNsclNoYXBlUGhvbmVIYW5kc2V0LCJuby13aWZpIjpoLkNsclNoYXBlTm9XaWZpLGluc3RhbGw6aC5DbHJTaGFwZUluc3RhbGwsdW5pbnN0YWxsOmguQ2xyU2hhcGVVbmluc3RhbGwsbGF5ZXJzOmguQ2xyU2hhcGVMYXllcnMsYmxvY2s6aC5DbHJTaGFwZUJs''@;'; put 'put ''b2NrLCJibG9ja3MtZ3JvdXAiOmguQ2xyU2hhcGVCbG9ja3NHcm91cCxidW5kbGU6aC5DbHJTaGFwZUJ1bmRsZSx3aWZpOmguQ2xyU2hhcGVXaWZpLCJyYWNrLXNlcnZlciI6aC5DbHJTaGFwZVJhY2tTZXJ2ZXIsImhhcmQtZGlzayI6aC5DbHJTaGFwZUhhcmREaXNrLCJiYWNrdXAtcmVzdG9y''@;'; put 'put ''ZSI6aC5DbHJTaGFwZUJhY2t1cFJlc3RvcmUsYmFja3VwOmguQ2xyU2hhcGVCYWNrdXAsZGV2aWNlczpoLkNsclNoYXBlRGV2aWNlcyxrZXlib2FyZDpoLkNsclNoYXBlS2V5Ym9hcmQsbW91c2U6aC5DbHJTaGFwZU1vdXNlLGRhc2hib2FyZDpoLkNsclNoYXBlRGFzaGJvYXJkLGhvc3Q6aC5D''@;'; put 'put ''bHJTaGFwZUhvc3Qsc3RvcmFnZTpoLkNsclNoYXBlU3RvcmFnZSxjbHVzdGVyOmguQ2xyU2hhcGVDbHVzdGVyLGFwcGxpY2F0aW9uczpoLkNsclNoYXBlQXBwbGljYXRpb25zLGJ1aWxkaW5nOmguQ2xyU2hhcGVCdWlsZGluZyxjcHU6aC5DbHJTaGFwZUNQVSxtZW1vcnk6aC5DbHJTaGFwZU1l''@;'; put 'put ''bW9yeSwiZGF0YS1jbHVzdGVyIjpoLkNsclNoYXBlRGF0YUNsdXN0ZXIsInJlc291cmNlLXBvb2wiOmguQ2xyU2hhcGVSZXNvdXJjZVBvb2wsc2hpZWxkOmguQ2xyU2hhcGVTaGllbGQsInNoaWVsZC1jaGVjayI6aC5DbHJTaGFwZVNoaWVsZENoZWNrLCJzaGllbGQteCI6aC5DbHJTaGFwZVNo''@;'; put 'put ''aWVsZFgsaW1wb3J0OmguQ2xyU2hhcGVJbXBvcnQsZXhwb3J0OmguQ2xyU2hhcGVFeHBvcnQsInVwbG9hZC1jbG91ZCI6aC5DbHJTaGFwZVVwbG9hZENsb3VkLCJkb3dubG9hZC1jbG91ZCI6aC5DbHJTaGFwZURvd25sb2FkQ2xvdWQscGx1Z2luOmguQ2xyU2hhcGVQbHVnaW4sZmxvcHB5Omgu''@;'; put 'put ''Q2xyU2hhcGVGbG9wcHksY29tcHV0ZXI6aC5DbHJTaGFwZUNvbXB1dGVyLGRpc3BsYXk6aC5DbHJTaGFwZURpc3BsYXksdGVybWluYWw6aC5DbHJTaGFwZVRlcm1pbmFsLGNvZGU6aC5DbHJTaGFwZUNvZGUsYXBwbGljYXRpb246aC5DbHJTaGFwZUFwcGxpY2F0aW9uLGJhdHRlcnk6aC5DbHJT''@;'; put 'put ''aGFwZUJhdHRlcnksbW9iaWxlOmguQ2xyU2hhcGVNb2JpbGUsdGFibGV0OmguQ2xyU2hhcGVUYWJsZXQsIm5ldHdvcmstZ2xvYmUiOmguQ2xyU2hhcGVOZXR3b3JrR2xvYmUsIm5ldHdvcmstc2V0dGluZ3MiOmguQ2xyU2hhcGVOZXR3b3JrU2V0dGluZ3MsIm5ldHdvcmstc3dpdGNoIjpoLkNs''@;'; put 'put ''clNoYXBlTmV0d29ya1N3aXRjaCxyb3V0ZXI6aC5DbHJTaGFwZVJvdXRlcix2bTpoLkNsclNoYXBlVk0sInZtdy1hcHAiOmguQ2xyU2hhcGVWTVdBcHAsY2VydGlmaWNhdGU6aC5DbHJTaGFwZUNlcnRpZmljYXRlLGFyY2hpdmU6aC5DbHJTaGFwZUFyY2hpdmUsdW5hcmNoaXZlOmguQ2xyU2hh''@;'; put 'put ''cGVVbmFyY2hpdmUsY29ubmVjdDpoLkNsclNoYXBlQ29ubmVjdCxkaXNjb25uZWN0OmguQ2xyU2hhcGVEaXNjb25uZWN0LGxpbms6aC5DbHJTaGFwZUxpbmssdW5saW5rOmguQ2xyU2hhcGVVbmxpbmssImNsb3VkLW5ldHdvcmsiOmguQ2xyU2hhcGVDbG91ZE5ldHdvcmssImNsb3VkLXNjYWxl''@;'; put 'put ''IjpoLkNsclNoYXBlQ2xvdWRTY2FsZSwiY2xvdWQtdHJhZmZpYyI6aC5DbHJTaGFwZUNsb3VkVHJhZmZpYywiY29udHJvbC1sdW4iOmguQ2xyQ29udHJvbEx1bixkZXBsb3k6aC5DbHJTaGFwZURlcGxveSxoZWxpeDpoLkNsclNoYXBlSGVsaXgsZmxhc2s6aC5DbHJTaGFwZUZsYXNrLGFkbWlu''@;'; put 'put ''aXN0cmF0b3I6aC5DbHJTaGFwZUFkbWluaXN0cmF0b3IsImhhcmQtZHJpdmUiOmguQ2xyU2hhcGVIYXJkRHJpdmUsImhhcmQtZHJpdmUtZGlza3MiOmguQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcyxudm1lOmguQ2xyU2hhcGVOVk1lLHNzZDpoLkNsclNoYXBlU1NELGJsdWV0b290aDpoLkNsclNo''@;'; put 'put ''YXBlQmx1ZXRvb3RoLCJibHVldG9vdGgtb2ZmIjpoLkNsclNoYXBlQmx1ZXRvb3RoT2ZmLCJwcm9jZXNzLW9uLXZtIjpoLkNsclNoYXBlUHJvY2Vzc09uVk0sImFzc2lnbi11c2VyIjpoLkNsclNoYXBlQXNzaWduVXNlcixhdG9tOmguQ2xyU2hhcGVBdG9tLCJiYXItY29kZSI6aC5DbHJTaGFw''@;'; put 'put ''ZUJhckNvZGUsImNkLWR2ZCI6aC5DbHJTaGFwZUNkRHZkLGNvbnRhaW5lcjpoLkNsclNoYXBlQ29udGFpbmVyLCJjb250YWluZXItdm9sdW1lIjpoLkNsclNoYXBlQ29udGFpbmVyVm9sdW1lLCJmaWxlLXNoYXJlIjpoLkNsclNoYXBlRmlsZVNoYXJlLCJxci1jb2RlIjpoLkNsclNoYXBlUXJD''@;'; put 'put ''b2RlLHVzYjpoLkNsclNoYXBlVXNiLHJhZGFyOmguQ2xyU2hhcGVSYWRhcixjYXBhY2l0b3I6aC5DbHJTaGFwZUNhcGFjaXRvcixzcXVpZDpoLkNsclNoYXBlU3F1aWQsaW5kdWN0b3I6aC5DbHJTaGFwZUluZHVjdG9yLHJlc2lzdG9yOmguQ2xyU2hhcGVSZXNpc3RvciwiaG9zdC1ncm91cCI6''@;'; put 'put ''aC5DbHJTaGFwZUhvc3RHcm91cCwic3RvcmFnZS1hZGFwdGVyIjpoLkNsclNoYXBlU3RvcmFnZUFkYXB0ZXIsIm5vZGUtZ3JvdXAiOmguQ2xyU2hhcGVOb2RlR3JvdXAsbm9kZXM6aC5DbHJTaGFwZU5vZGVzLG5hbWVzcGFjZTpoLkNsclNoYXBlTmFtZXNwYWNlLG5vZGU6aC5DbHJTaGFwZU5v''@;'; put 'put ''ZGUscG9kOmguQ2xyU2hhcGVQb2QsIm1lZGlhLWNoYW5nZXIiOmguQ2xyU2hhcGVNZWRpYUNoYW5nZXIsInRhcGUtZHJpdmUiOmguQ2xyU2hhcGVUYXBlRHJpdmUsYW5pbWF0aW9uOmguQ2xyU2hhcGVBbmltYXRpb24sImNpLWNkIjpoLkNsclNoYXBlQ2lDZCwiZmlsZS1zaGFyZS0yIjpoLkNs''@;'; put 'put ''clNoYXBlRmlsZVNoYXJlMn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGguVGVjaG5vbG9neVNoYXBlcywic2VydmVyIiwoMCxjLmRlc2NyaXB0b3JDb25maWcpKGguVGVjaG5vbG9neVNoYXBlcy5ob3N0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGguVGVjaG5vbG9neVNoYXBlcywiY29tbWFu''@;'; put 'put ''ZCIsKDAsYy5kZXNjcmlwdG9yQ29uZmlnKShoLlRlY2hub2xvZ3lTaGFwZXMudGVybWluYWwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaC5UZWNobm9sb2d5U2hhcGVzLCJtb2JpbGUtcGhvbmUiLCgwLGMuZGVzY3JpcHRvckNvbmZpZykoaC5UZWNobm9sb2d5U2hhcGVzLm1vYmlsZSkpLE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShoLlRlY2hub2xvZ3lTaGFwZXMsImxpY2Vuc2UiLCgwLGMuZGVzY3JpcHRvckNvbmZpZykoaC5UZWNobm9sb2d5U2hhcGVzLmNlcnRpZmljYXRlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGguVGVjaG5vbG9neVNoYXBlcywiZGlzY29ubmVjdGVkIiwoMCxj''@;'; put 'put ''LmRlc2NyaXB0b3JDb25maWcpKGguVGVjaG5vbG9neVNoYXBlc1sibm8td2lmaSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGguVGVjaG5vbG9neVNoYXBlcywicmVjZWl2ZXIiLCgwLGMuZGVzY3JpcHRvckNvbmZpZykoaC5UZWNobm9sb2d5U2hhcGVzWyJwaG9uZS1oYW5kc2V0Il0pKSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoaC5UZWNobm9sb2d5U2hhcGVzLCJkZXNpZ24iLCgwLGMuZGVzY3JpcHRvckNvbmZpZykoaC5UZWNobm9sb2d5U2hhcGVzWyJydWxlci1wZW5jaWwiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLlRlY2hub2xvZ3lTaGFwZXMsImRuYSIsKDAsYy5kZXNj''@;'; put 'put ''cmlwdG9yQ29uZmlnKShoLlRlY2hub2xvZ3lTaGFwZXMuaGVsaXgpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaC5UZWNobm9sb2d5U2hhcGVzLCJmb2xkZXItc2hhcmUiLCgwLGMuZGVzY3JpcHRvckNvbmZpZykoaC5UZWNobm9sb2d5U2hhcGVzWyJmaWxlLXNoYXJlIl0pKSx0eXBlb2Ygd2lu''@;'; put 'put ''ZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoaC5UZWNobm9sb2d5U2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGV4dC1lZGl0LXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oaixoLHkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksaC5UZXh0RWRpdFNoYXBlcz1oLkNsclNoYXBlU3VwZXJz''@;'; put 'put ''Y3JpcHQ9aC5DbHJTaGFwZVN1YnNjcmlwdD1oLkNsclNoYXBlU3RyaWtldGhyb3VnaD1oLkNsclNoYXBlSW5kZW50PWguQ2xyU2hhcGVPdXRkZW50PWguQ2xyU2hhcGVIaWdobGlnaHRlcj1oLkNsclNoYXBlVGV4dENvbG9yPWguQ2xyU2hhcGVMYW5ndWFnZT1oLkNsclNoYXBlQWxpZ25Ub3A9''@;'; put 'put ''aC5DbHJTaGFwZUFsaWduTWlkZGxlPWguQ2xyU2hhcGVBbGlnbkJvdHRvbT1oLkNsclNoYXBlVW5kZXJsaW5lPWguQ2xyU2hhcGVUZXh0PWguQ2xyU2hhcGVBbGlnblJpZ2h0VGV4dD1oLkNsclNoYXBlQmxvY2tRdW90ZT1oLkNsclNoYXBlUGFpbnRSb2xsZXI9aC5DbHJTaGFwZU51bWJlckxp''@;'; put 'put ''c3Q9aC5DbHJTaGFwZUFsaWduTGVmdFRleHQ9aC5DbHJTaGFwZUp1c3RpZnlUZXh0PWguQ2xyU2hhcGVJdGFsaWM9aC5DbHJTaGFwZUFsaWduUmlnaHQ9aC5DbHJTaGFwZUFsaWduTGVmdD1oLkNsclNoYXBlQWxpZ25DZW50ZXI9aC5DbHJTaGFwZUZvbnRTaXplPWguQ2xyU2hhcGVDaGVja2Jv''@;'; put 'put ''eExpc3Q9aC5DbHJTaGFwZUNlbnRlclRleHQ9aC5DbHJTaGFwZUJ1bGxldExpc3Q9aC5DbHJTaGFwZUJvbGQ9dm9pZCAwO3ZhciBjPXkoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTto''@;'; put 'put ''LkNsclNoYXBlQm9sZD0oMCxjLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjIuNDMsMTcuNTRhNC42Nyw0LjY3LDAsMCwwLDIuOC00LjM3di0uMDZhNC40Myw0LjQzLDAsMCwwLTEuMzEtMy4yNSw3LjA5LDcuMDksMCwwLDAtNS4xMy0xLjczaC03QTEuNzEsMS43MSwwLDAsMCwxMCw5Ljg2VjI2''@;'; put 'put ''YTEuNzIsMS43MiwwLDAsMCwxLjc0LDEuNzRoNy4zM2M0LjM3LDAsNy4yNS0xLjg4LDcuMjUtNS4zOFYyMi4zQzI2LjMyLDE5LjY0LDI0LjczLDE4LjMyLDIyLjQzLDE3LjU0Wk0xMy42OCwxMS40aDQuNTRjMiwwLDMuMTUuODksMy4xNSwyLjMzdi4wNmMwLDEuNjgtMS4zNiwyLjQ5LTMuMzgs''@;'; put 'put ''Mi40OUgxMy42OFpNMjIuMzcsMjJjMCwxLjU5LTEuMzEsMi40My0zLjQ2LDIuNDNIMTMuNjhWMTkuNjJoNWMyLjQ5LDAsMy42OS44OCwzLjY5LDIuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxoLkNsclNoYXBlQnVsbGV0TGlzdD0oMCxjLmNs''@;'; put 'put ''ckljb25TVkcpKCc8Y2lyY2xlIGN4PSI1LjIxIiBjeT0iOS4xNyIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iNS4yMSIgY3k9IjE3LjE3IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MiIgLz48Y2lyY2xlIGN4PSI1LjIxIiBjeT0iMjUuMTciIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMi40Miw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzMS40MkExLDEsMCwwLDAsMzIuNDIsOVoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMS40MiwxNkgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzEuNDIsMjRIMTB2MkgzMS40MmExLDEsMCwwLDAsMC0yWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksaC5DbHJTaGFwZUNlbnRlclRleHQ9KDAsYy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjg4LDhINS4xMmExLjEsMS4xLDAsMCwwLDAsMi4ySDMwLjg4YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjUuNSwxNi4yYTEuMSwxLjEsMCwxLDAsMC0yLjJoLTE1YTEuMSwxLjEsMCwxLDAsMCwyLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAuMjUs''@;'; put 'put ''MjBINS43NWExLjEsMS4xLDAsMCwwLDAsMi4yaDI0LjVhMS4xLDEuMSwwLDAsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNC44OCwyNkgxMS4xMmExLjEsMS4xLDAsMSwwLDAsMi4ySDI0Ljg4YTEuMSwxLjEsMCwxLDAs''@;'; put 'put ''MC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxoLkNsclNoYXBlQ2hlY2tib3hMaXN0PSgwLGMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS40MywxNkgxMHYySDMxLjQzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzEuNDMsMjRIMTB2MkgzMS40M2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE1LjQ1LDEwaDE2YTEsMSwwLDAsMCwwLTJoLTE0WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LjUsMy40MmExLjA5LDEuMDksMCwwLDAtMS41NSwwTDcuODksMTEuNDgsNC41MSw3Ljg0QTEuMSwxLjEsMCwxLDAsMi45LDkuMzRsNC45NCw1LjNMMTcuNSw1QTEuMSwxLjEsMCwwLDAsMTcuNSwzLjQyWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksaC5DbHJTaGFwZUZvbnRTaXplPSgwLGMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMSw5LjA4QTEuMTMsMS4xMywwLDAsMCwxOS44Niw4SDQuNjJhMS4xLDEuMSwwLDEsMCwwLDIuMTlIMTFWMjdhMS4wOSwx''@;'; put 'put ''LjA5LDAsMCwwLDIuMTcsMFYxMC4xOWg2LjY5QTEuMTQsMS4xNCwwLDAsMCwyMSw5LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLjY3LDE1SDIxLjE1YTEuMSwxLjEsMCwxLDAsMCwyLjE5SDI1VjI2LjVhMS4wOSwxLjA5LDAs''@;'; put 'put ''MCwwLDIuMTcsMFYxNy4yM2gzLjU0YTEuMSwxLjEsMCwxLDAsMC0yLjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksaC5DbHJTaGFwZUFsaWduQ2VudGVyPSgwLGMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMSwyMEgxOVYxNmg2YTEsMSwwLDAs''@;'; put 'put ''MCwxLTFWN2ExLDEsMCwwLDAtMS0xSDE5VjJhMSwxLDAsMCwwLTIsMFY2SDExYTEsMSwwLDAsMC0xLDF2OGExLDEsMCwwLDAsMSwxaDZ2NEg1YTEsMSwwLDAsMC0xLDF2OGExLDEsMCwwLDAsMSwxSDE3djRhMSwxLDAsMCwwLDIsMFYzMEgzMWExLDEsMCwwLDAsMS0xVjIxQTEsMSwwLDAsMCwz''@;'; put 'put ''MSwyMFpNMTIsMTRWOEgyNHY2Wk0zMCwyOEg2VjIySDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksaC5DbHJTaGFwZUFsaWduTGVmdD0oMCxjLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSwxQTEsMSwwLDAsMCw0LDJWMzRhMSwxLDAsMCwwLDIs''@;'; put 'put ''MFYyQTEsMSwwLDAsMCw1LDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzEsMjBIOFYzMEgzMWExLDEsMCwwLDAsMS0xVjIxQTEsMSwwLDAsMCwzMSwyMFptLTEsOEgxMFYyMkgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNCwxNVY3YTEsMSwwLDAsMC0xLTFIOFYxNkgyM0ExLDEsMCwwLDAsMjQsMTVabS0yLTFIMTBWOEgyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLGguQ2xyU2hhcGVBbGlnblJpZ2h0PSgwLGMu''@;'; put 'put ''Y2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMSwxYTEsMSwwLDAsMC0xLDFWMzRhMSwxLDAsMCwwLDIsMFYyQTEsMSwwLDAsMCwzMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQsMjF2OGExLDEsMCwwLDAsMSwxSDI4VjIwSDVBMSwx''@;'; put 'put ''LDAsMCwwLDQsMjFabTIsMUgyNnY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTIsN3Y4YTEsMSwwLDAsMCwxLDFIMjhWNkgxM0ExLDEsMCwwLDAsMTIsN1ptMiwxSDI2djZIMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxoLkNsclNoYXBlSXRhbGljPSgwLGMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNC40Miw4SDE3LjFhMS4xLDEuMSwwLDEsMCwwLDIuMTloMi4xM0wxMy4xMSwyNS41NUgxMC40N2ExLjEsMS4xLDAsMSwwLDAsMi4xOUgxNy44YTEuMSwxLjEsMCwxLDAs''@;'; put 'put ''MC0yLjE5SDE1LjUxbDYuMTMtMTUuMzZoMi43OGExLjEsMS4xLDAsMSwwLDAtMi4xOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGguQ2xyU2hhcGVKdXN0aWZ5VGV4dD0oMCxjLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNiwxMC4ySDMxLjc1YTEu''@;'; put 'put ''MSwxLjEsMCwxLDAsMC0yLjJINmExLjEsMS4xLDAsMSwwLDAsMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLjc1LDE0SDZhMS4xLDEuMSwwLDEsMCwwLDIuMkgzMS43NWExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMxLjEyLDIwSDYuNjJhMS4xLDEuMSwwLDEsMCwwLDIuMmgyNC41YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAu''@;'; put 'put ''NDUsMjUuODNINi42YTEuMSwxLjEsMCwwLDAsMCwyLjJIMzAuNDVhMS4xLDEuMSwwLDAsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGguQ2xyU2hhcGVBbGlnbkxlZnRUZXh0PSgwLGMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC4y''@;'; put 'put ''NSwyNkg2djIuMkgyMC4yNWExLjEsMS4xLDAsMCwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI4LDIwSDZ2Mi4ySDI4QTEuMSwxLjEsMCwwLDAsMjgsMjBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMiIgLz48cGF0aCBkPSJNMjIuNiwxNS4xQTEuMSwxLjEsMCwwLDAsMjEuNSwxNEg2djIuMkgyMS41QTEuMSwxLjEsMCwwLDAsMjIuNiwxNS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI5LjI1LDhINnYyLjJIMjkuMjVh''@;'; put 'put ''MS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGguQ2xyU2hhcGVOdW1iZXJMaXN0PSgwLGMuY2xySWNvblNWRykoJzxwb2x5Z29uIHBvaW50cz0iNS40NiA3LjQxIDUuNDYgMTEuNTYgNi42NSAxMS41NiA2LjY1IDYu''@;'; put 'put ''MDUgNS43IDYuMDUgNC4wNSA3LjE2IDQuNTIgOCA1LjQ2IDcuNDEiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik01LjU3LDE0LjgyYS43Ni43NiwwLDAsMSwuODMuNzNjMCwuMzgtLjIxLjc0LS44NywxLjI3bC0yLDEuNTd2MUg3LjY3VjE4''@;'; put 'put ''LjI4SDUuMzNsMS0uNzdjMS0uNywxLjI4LTEuMjcsMS4yOC0yYTEuODMsMS44MywwLDAsMC0yLTEuNzYsMi42MywyLjYzLDAsMCwwLTIuMTQsMS4wOGwuNzYuNzNBMS43NSwxLjc1LDAsMCwxLDUuNTcsMTQuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg''@;'; put 'put ''Lz48cGF0aCBkPSJNNi41NiwyNC42NGExLjMyLDEuMzIsMCwwLDAsMS0xLjI3YzAtLjg3LS43OC0xLjUxLTItMS41MWEyLjYxLDIuNjEsMCwwLDAtMi4xLDFsLjY5LjcyYTEuNzgsMS43OCwwLDAsMSwxLjMtLjY0Yy41NCwwLC45Mi4yNi45Mi42NnMtLjM2LjYyLTEsLjYySDQuNzl2MWguNjRj''@;'; put 'put ''Ljc0LDAsMS4wNy4yMSwxLjA3LjYzcy0uMzUuNjgtMSwuNjhhMiwyLDAsMCwxLTEuNDYtLjY1bC0uNy43OGEyLjg1LDIuODUsMCwwLDAsMi4yMS45M2MxLjI5LDAsMi4xMy0uNjksMi4xMy0xLjY0QTEuMzMsMS4zMywwLDAsMCw2LjU2LDI0LjY0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMyLjQyLDlhMSwxLDAsMCwwLTEtMUgxMHYySDMxLjQyQTEsMSwwLDAsMCwzMi40Miw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMxLjQyLDE2SDEwdjJIMzEuNDJhMSwxLDAs''@;'; put 'put ''MCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMS40MiwyNEgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxoLkNsclNoYXBlUGFpbnRS''@;'; put 'put ''b2xsZXI9KDAsYy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDEwVjRhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDR2NmEyLDIsMCwwLDAsMiwySDI5QTIsMiwwLDAsMCwzMSwxMFpNNiw0SDI5djZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik0zMyw2SDMydjYuMjlMMTguNywxNi41NGExLDEsMCwwLDAtLjcsMVYxOUgxNlYzM2EyLDIsMCwwLDAsMiwyaDJhMiwyLDAsMCwwLDItMlYxOUgyMHYtLjczTDMzLjMsMTRhMSwxLDAsMCwwLC43LTFWN0ExLDEsMCwwLDAsMzMsNlpNMjAsMzNIMThWMjFoMloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxyZWN0IHg9IjQiIHk9IjIiIHdpZHRoPSIyNyIgaGVpZ2h0PSIxMCIgcng9IjEiIHJ5PSIxIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMyw2SDMydjYuMjRMMTguNzEsMTYu''@;'; put 'put ''NDVhMSwxLDAsMCwwLS43MSwxVjE5SDE2VjM0YTEsMSwwLDAsMCwxLDFoNGExLDEsMCwwLDAsMS0xVjE5SDIwdi0uODJMMzMuMjksMTRBMSwxLDAsMCwwLDM0LDEzVjdBMSwxLDAsMCwwLDMzLDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGguQ2xyU2hh''@;'; put 'put ''cGVCbG9ja1F1b3RlPSgwLGMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMS44NiwxNi41NWE0LjMxLDQuMzEsMCwwLDAtMi4xMS41NiwxNC40NCwxNC40NCwwLDAsMSw0LjM2LTYsMS4xLDEuMSwwLDAsMC0xLjQtMS43Yy00LDMuMjUtNS43OCw3Ljc1LTUuNzgsMTAuNTRBNS4wOCw1LjA4LDAs''@;'; put 'put ''MCwwLDEwLDI0LjU4YTQuNCw0LjQsMCwwLDAsMS44OC40NCw0LjI0LDQuMjQsMCwxLDAsMC04LjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIzLDE2LjU1YTQuMjksNC4yOSwwLDAsMC0yLjExLjU2LDE0LjUsMTQuNSwwLDAsMSw0''@;'; put 'put ''LjM1LTYsMS4xLDEuMSwwLDEsMC0xLjM5LTEuN2MtNCwzLjI1LTUuNzgsNy43NS01Ljc4LDEwLjU0YTUuMDgsNS4wOCwwLDAsMCwzLDQuNjFBNC4zNyw0LjM3LDAsMCwwLDIzLDI1YTQuMjQsNC4yNCwwLDEsMCwwLTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIgLz4nKSxoLkNsclNoYXBlQWxpZ25SaWdodFRleHQ9KDAsYy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjY1LDI3LjFhMS4xLDEuMSwwLDAsMCwxLjEsMS4xSDMwVjI2SDE1Ljc1QTEuMSwxLjEsMCwwLDAsMTQuNjUsMjcuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LjksMjEuMUExLjEsMS4xLDAsMCwwLDgsMjIuMkgzMFYyMEg4QTEuMSwxLjEsMCwwLDAsNi45LDIxLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTMuNCwxNS4xYTEuMSwxLjEsMCww''@;'; put 'put ''LDAsMS4xLDEuMUgzMFYxNEgxNC41QTEuMSwxLjEsMCwwLDAsMTMuNCwxNS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTYuNzUsOGExLjEsMS4xLDAsMSwwLDAsMi4ySDMwVjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNCIgLz4nKSxoLkNsclNoYXBlVGV4dD0oMCxjLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIuMTksOC44NGExLjQ1LDEuNDUsMCwwLDAtMS40LTFoLS4xMmExLjQ2LDEuNDYsMCwwLDAtMS40MiwxTDEuMTQsMjYuNTZhMS4yOSwxLjI5LDAsMCwwLS4xNC41OSwxLDEsMCww''@;'; put 'put ''LDAsMSwxLDEuMTIsMS4xMiwwLDAsMCwxLjA4LS43N2wyLjA4LTQuNjVoMTFsMi4wOCw0LjU5YTEuMjQsMS4yNCwwLDAsMCwxLjEyLjgzLDEuMDgsMS4wOCwwLDAsMCwxLjA4LTEuMDgsMS42NCwxLjY0LDAsMCwwLS4xNC0uNTdaTTYuMDgsMjAuNzFsNC41OS0xMC4yMiw0LjYsMTAuMjJaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzIuMjQsMTQuNzhBNi4zNSw2LjM1LDAsMCwwLDI3LjYsMTMuMmExMS4zNiwxMS4zNiwwLDAsMC00LjcsMSwxLDEsMCwwLDAtLjU4Ljg5LDEsMSwwLDAsMCwuOTQuOTIsMS4yMywxLjIzLDAsMCww''@;'; put 'put ''LC4zOS0uMDgsOC44Nyw4Ljg3LDAsMCwxLDMuNzItLjgxYzIuNywwLDQuMjgsMS4zMyw0LjI4LDMuOTJ2LjVhMTUuMjksMTUuMjksMCwwLDAtNC40Mi0uNjFjLTMuNjQsMC02LjE0LDEuNjEtNi4xNCw0LjY0di4wNWMwLDIuOTUsMi43LDQuNDgsNS4zNyw0LjQ4YTYuMjksNi4yOSwwLDAsMCw1''@;'; put 'put ''LjE5LTIuNDhWMjYuOWExLDEsMCwwLDAsMSwxLDEsMSwwLDAsMCwxLTEuMDZWMTlBNS43MSw1LjcxLDAsMCwwLDMyLjI0LDE0Ljc4Wm0tLjU2LDcuN2MwLDIuMjgtMi4xNywzLjg5LTQuODEsMy44OS0xLjk0LDAtMy42MS0xLjA2LTMuNjEtMi44NnYtLjA2YzAtMS44LDEuNS0zLDQuMi0zYTE1''@;'; put 'put ''LjIsMTUuMiwwLDAsMSw0LjIyLjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksaC5DbHJTaGFwZVVuZGVybGluZT0oMCxjLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjguMTdjNS4wOCwwLDguNDgtMy4wOCw4LjQ4LTlWOC41NGExLjE1LDEu''@;'; put 'put ''MTUsMCwxLDAtMi4zLDB2MTAuOGMwLDQuNDQtMi4zOCw2LjcxLTYuMTMsNi43MXMtNi4yMS0yLjQ3LTYuMjEtNi44NVY4LjU0YTEuMTUsMS4xNSwwLDEsMC0yLjMsMHYxMC44QzkuNTMsMjUuMDksMTMsMjguMTcsMTgsMjguMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgLz48cGF0aCBkPSJNMzEsMzBINWExLjExLDEuMTEsMCwwLDAsMCwyLjIxSDMxQTEuMTEsMS4xMSwwLDAsMCwzMSwzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGguQ2xyU2hhcGVBbGlnbkJvdHRvbT0oMCxjLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMzQsMzBIMmExLDEsMCwwLDAsMCwySDM0YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTYsNWExLDEsMCwwLDAtMS0xSDdBMSwxLDAsMCwwLDYsNVYyOEgxNlpNMTQsMjZIOFY2aDZaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsMTNhMSwxLDAsMCwwLTEtMUgyMWExLDEsMCwwLDAtMSwxVjI4SDMwWk0yOCwyNkgyMlYxNGg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksaC5D''@;'; put 'put ''bHJTaGFwZUFsaWduTWlkZGxlPSgwLGMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCwxN0gzMFYxMWExLDEsMCwwLDAtMS0xSDIxYTEsMSwwLDAsMC0xLDF2NkgxNlY1YTEsMSwwLDAsMC0xLTFIN0ExLDEsMCwwLDAsNiw1VjE3SDJhMSwxLDAsMCwwLDAsMkg2VjMxYTEsMSwwLDAsMCwxLDFo''@;'; put 'put ''OGExLDEsMCwwLDAsMS0xVjE5aDR2NmExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxOWg0YTEsMSwwLDAsMCwwLTJaTTE0LDMwSDhWNmg2Wm0xNC02SDIyVjEyaDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxoLkNsclNoYXBlQWxpZ25U''@;'; put 'put ''b3A9KDAsYy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDRIMkExLDEsMCwwLDAsMiw2SDM0YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNiwzMWExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVY4SDZa''@;'; put 'put ''TTgsMTBoNlYzMEg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIwLDIzYTEsMSwwLDAsMCwxLDFoOGExLDEsMCwwLDAsMS0xVjhIMjBabTItMTNoNlYyMkgyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0zIiAvPicpLGguQ2xyU2hhcGVMYW5ndWFnZT0oMCxjLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAsM0gxNHY1aDJWNWgxNGMwLjYsMCwxLDAuNCwxLDF2MTFjMCwwLjYtMC40LDEtMSwxSDE3djdoLTUuM0w4LDI3LjlWMjVINWMtMC42LDAtMS0wLjQtMS0xVjEzYzAtMC42LDAuNC0xLDEt''@;'; put 'put ''MWgxM3YtMkg1XG5cdFx0Yy0xLjcsMC0zLDEuMy0zLDN2MTFjMCwxLjcsMS4zLDMsMywzaDF2NS4xbDYuMy01LjFIMTl2LTdoMTFjMS43LDAsMy0xLjMsMy0zVjZDMzMsNC4zLDMxLjcsMywzMCwzeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGgg''@;'; put 'put ''ZD0iTTYuMiwyMi45aDIuNGwwLjYtMS42aDMuMWwwLjYsMS42aDIuNEwxMS45LDE0SDkuNUw2LjIsMjIuOXogTTEwLjcsMTYuNWwxLDMuMWgtMkwxMC43LDE2LjV6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjAsMTdjMS4xLDAsMi42''@;'; put 'put ''LTAuMyw0LTFjMS40LDAuNywzLDEsNCwxdi0yYzAsMC0xLDAtMi4xLTAuNGMxLjItMS4yLDIuMS0zLDIuMS01LjZWOGgtM1Y2aC0ydjJoLTN2Mmg1Ljlcblx0XHRjLTAuMiwxLjgtMSwyLjktMS45LDMuNmMtMC42LTAuNS0xLjItMS4yLTEuNi0yLjFoLTIuMWMwLjQsMS4zLDEsMi4zLDEuOCwz''@;'; put 'put ''LjFDMjEuMSwxNSwyMC4yLDE1LDIwLDE1VjE3eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBvbHlnb24gcG9pbnRzPSIxMSwxNi41IDEwLDE5LjYgMTIsMTkuNiAxMSwxNi41IFx0IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0zMC4zLDNoLTE2djVoNHYyaC0xM2MtMS43LDAtMywxLjMtMywzdjExYzAsMS43LDEuMywzLDMsM2gxdjUuMWw2LjMtNS4xaDYuN3YtN2gxMWMxLjcsMCwzLTEuMywzLTNWNlxuXHRcdEMzMy4zLDQuMywzMiwzLDMwLjMsM3ogTTEzLjEsMjIuOWwtMC41LTEuNkg5LjVs''@;'; put 'put ''LTAuNiwxLjZINi41TDkuOCwxNGgyLjRsMy4zLDguOUwxMy4xLDIyLjl6IE0yOC4zLDE1djJjLTEuMywwLTIuNy0wLjQtMy45LTFcblx0XHRjLTEuMiwwLjYtMi42LDAuOS00LDFsLTAuMS0yYzAuNywwLDEuNC0wLjEsMi4xLTAuM2MtMC45LTAuOS0xLjUtMi0xLjgtMy4yaDIuMWMwLjMsMC45''@;'; put 'put ''LDAuOSwxLjYsMS42LDIuMmMxLjEtMC45LDEuOC0yLjIsMS45LTMuN1xuXHRcdGgtNlY4aDNWNmgydjJoMy4zbDAuMSwxYzAuMSwyLjEtMC43LDQuMi0yLjIsNS43QzI3LjEsMTQuOSwyNy43LDE1LDI4LjMsMTV6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicp''@;'; put 'put ''LGguQ2xyU2hhcGVUZXh0Q29sb3I9KDAsYy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LjQ3LDMuODRhMS40NSwxLjQ1LDAsMCwwLTEuNC0xSDE4YTEuNDUsMS40NSwwLDAsMC0xLjQyLDFMOC40MiwyMS41NmExLjM1LDEuMzUsMCwwLDAtLjE0LjU5LDEsMSwwLDAsMCwxLDEsMS4xMSwxLjEx''@;'; put 'put ''LDAsMCwwLDEuMDgtLjc3bDIuMDgtNC42NWgxMWwyLjA4LDQuNTlhMS4yNCwxLjI0LDAsMCwwLDEuMTIuODMsMS4wOCwxLjA4LDAsMCwwLDEuMDgtMS4wOCwxLjU5LDEuNTksMCwwLDAtLjE0LS41N1pNMTMuMzYsMTUuNzEsMTgsNS40OWw0LjYsMTAuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cmVjdCB4PSI0LjA2IiB5PSIyNSIgd2lkdGg9IjI4IiBoZWlnaHQ9IjgiIHJ4PSIyIiByeT0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz4nKSxoLkNsclNoYXBlSGlnaGxpZ2h0ZXI9KDAsYy5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggZD0iTTE1LjgyLDI2LjA2YTEsMSwwLDAsMS0uNzEtLjI5TDguNjcsMTkuMzNhMSwxLDAsMCwxLS4yOS0uNzEsMSwxLDAsMCwxLC4yOS0uNzFMMjMsMy41NGE1LjU1LDUuNTUsMCwxLDEsNy44NSw3Ljg2TDE2LjUzLDI1Ljc3QTEsMSwwLDAsMSwxNS44MiwyNi4wNlpt''@;'; put 'put ''LTUtNy40NCw1LDVMMjkuNDgsMTBhMy41NCwzLjU0LDAsMCwwLDAtNSwzLjYzLDMuNjMsMCwwLDAtNSwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTEwLjM4LDI4LjI4QTEsMSwwLDAsMSw5LjY3LDI4TDYuNDUsMjQuNzdhMSwx''@;'; put 'put ''LDAsMCwxLS4yMi0xLjA5bDIuMjItNS40NGExLDEsMCwwLDEsMS42My0uMzNsNi40NSw2LjQ0QTEsMSwwLDAsMSwxNi4yLDI2bC01LjQ0LDIuMjJBMS4zMywxLjMzLDAsMCwxLDEwLjM4LDI4LjI4Wk04LjMzLDIzLjgybDIuMjksMi4yOCwzLjQzLTEuNEw5Ljc0LDIwLjM5WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTguOTQsMzBoLTVhMSwxLDAsMCwxLS44NC0xLjU1bDMuMjItNC45NGExLDEsMCwwLDEsMS41NS0uMTZsMy4yMSwzLjIyYTEsMSwwLDAsMSwuMDYsMS4zNUw5LjcsMjkuNjRBMSwxLDAsMCwxLDguOTQsMzBa''@;'; put 'put ''TTUuNzgsMjhIOC40N0w5LDI3LjM0bC0xLjctMS43WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHJlY3QgeD0iMy4wNiIgeT0iMzEiIHdpZHRoPSIzMCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NCIvPicpLGguQ2xyU2hhcGVPdXRkZW50PSgwLGMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS4wNiw5aC0yNmExLDEsMCwxLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMTRo''@;'; put 'put ''LTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxOWgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDI0aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMjloLTI2YTEsMSwwLDAsMSwwLTJo''@;'; put 'put ''MjZhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik05LjU2LDIyLjU0YTEsMSwwLDAsMS0uNy0uM0w0LjYxLDE4bDQuMjUtNC4yNGExLDEsMCwwLDEsMS40MSwxLjQxTDcuNDQsMThsMi44MywyLjgzYTEsMSww''@;'; put 'put ''LDAsMS0uNzEsMS43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+JyksaC5DbHJTaGFwZUluZGVudD0oMCxjLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMDYsOWgtMjZhMSwxLDAsMSwxLDAtMmgyNmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE0aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMTloLTE3YTEs''@;'; put 'put ''MSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDI5aC0yNmExLDEsMCwwLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cGF0aCBkPSJNNS41NiwyMi41NGExLDEsMCwwLDEtLjctMS43MUw3LjY4''@;'; put 'put ''LDE4LDQuODYsMTUuMTdhMSwxLDAsMCwxLDAtMS40MSwxLDEsMCwwLDEsMS40MSwwTDEwLjUxLDE4LDYuMjcsMjIuMjRBMSwxLDAsMCwxLDUuNTYsMjIuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPicpLGguQ2xyU2hhcGVTdHJpa2V0aHJvdWdoPSgw''@;'; put 'put ''LGMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi44OCwxOS45MmgtMzBhMSwxLDAsMSwxLDAtMmgzMGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTcuMjcsMTUuODZhMTIuOSwxMi45LDAsMCwxLDEuMjkt''@;'; put 'put ''LjUyQTUuNjksNS42OSwwLDAsMSwxMC4zOSwxNWEzLjE4LDMuMTgsMCwwLDEsMi43NSwxLjExQTQuNDQsNC40NCwwLDAsMSwxNCwxOC44NXYuNDlhMTMuODMsMTMuODMsMCwwLDAtNC4yOS0uNzQsNi4xOSw2LjE5LDAsMCwwLTIuNTkuNTRBNSw1LDAsMCwwLDUuODEsMjBIMTUuODhWMTguODVh''@;'; put 'put ''NS42Nyw1LjY3LDAsMCwwLTEuMzctNCw1LjE2LDUuMTYsMCwwLDAtNC0xLjQ5LDEwLDEwLDAsMCwwLTMuOTEuODguODcuODcsMCwwLDAtLjQ0LDEuMThBLjg0Ljg0LDAsMCwwLDcuMjcsMTUuODZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0''@;'; put 'put ''aCBkPSJNMjEsMjBhNS45NCw1Ljk0LDAsMCwxLC41NC0yLjMxLDQuMzUsNC4zNSwwLDAsMSwxLjU4LTEuODMsNC4yNyw0LjI3LDAsMCwxLDQuNTksMCw0LjQ3LDQuNDcsMCwwLDEsMS41NywxLjgzQTYuMTIsNi4xMiwwLDAsMSwyOS44NSwyMGgyYTcuNzMsNy43MywwLDAsMC0uNzgtMy4xOSw2''@;'; put 'put ''LDYsMCwwLDAtMi4xOC0yLjQ1LDUuNzQsNS43NCwwLDAsMC0zLjEtLjg4LDUuMzksNS4zOSwwLDAsMC0yLjguNzMsNS41NSw1LjU1LDAsMCwwLTIsMi4wNVYxMGEuODcuODcsMCwwLDAtLjg2LS44NkgyMGEuODcuODcsMCwwLDAtLjg2Ljg2VjIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTI5LjY3LDIyYTUuNjEsNS42MSwwLDAsMS0uMzYsMS4wNyw0LjQ3LDQuNDcsMCwwLDEtMS41NywxLjg1LDQuMzIsNC4zMiwwLDAsMS00LjU5LDAsNC4zNSw0LjM1LDAsMCwxLTEuNTgtMS44NUE1LjY0LDUuNjQsMCwwLDEsMjEuMiwy''@;'; put 'put ''MkgxOS4wOXY0LjEzQS44Ny44NywwLDAsMCwyMCwyN2guMmEuODcuODcsMCwwLDAsLjg2LS44NlYyNC41MWE1LjU4LDUuNTgsMCwwLDAsMiwyLjA2LDUuNDgsNS40OCwwLDAsMCwyLjguNzIsNS42Niw1LjY2LDAsMCwwLDMuMS0uODhBNS44OCw1Ljg4LDAsMCwwLDMxLjA5LDI0LDcuMDksNy4w''@;'; put 'put ''OSwwLDAsMCwzMS43MywyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xNCwyMnYuNzZhMy4zNCwzLjM0LDAsMCwxLTEuNjIsMiw1LjM0LDUuMzQsMCwwLDEtMi42OS43MiwzLjc4LDMuNzgsMCwwLDEtMi4zNi0uNywyLjI0LDIu''@;'; put 'put ''MjQsMCwwLDEtLjk0LTEuOSwyLjI5LDIuMjksMCwwLDEsLjItLjkxSDQuNjJhNCw0LDAsMCwwLS4xMywxLDMuODMsMy44MywwLDAsMCwxLjM1LDMuMDZBNS4xNSw1LjE1LDAsMCwwLDkuMzEsMjcuMiw2LDYsMCwwLDAsMTIsMjYuNTdhNC42Miw0LjYyLDAsMCwwLDItMS43NFYyNmEuODYuODYs''@;'; put 'put ''MCwwLDAsLjg2Ljg2SDE1YS44Ni44NiwwLDAsMCwuODYtLjg2VjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz4nKSxoLkNsclNoYXBlU3Vic2NyaXB0PSgwLGMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC41NSwxOGw2LjgsOC42YTEuMTcsMS4xNyww''@;'; put 'put ''LDAsMS0uOTIsMS45aDBhMS4xNywxLjE3LDAsMCwxLS45Mi0uNDRMMTMsMTkuOTEsNi42LDI4YTEuMTcsMS4xNywwLDAsMS0uOTIuNDRoMGExLjE3LDEuMTcsMCwwLDEtLjkyLTEuOUwxMS41NSwxOGwtNi44LTguNmExLjE3LDEuMTcsMCwwLDEsLjkyLTEuOWgwQTEuMTcsMS4xNywwLDAsMSw2''@;'; put 'put ''LjYzLDhsNi40NCw4LjEzTDE5LjUsOGExLjE3LDEuMTcsMCwwLDEsLjkyLS40NGgwYTEuMTcsMS4xNywwLDAsMSwuOTIsMS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIzLDMxLjgsMjcuNDksMjhhOS45LDkuOSwwLDAsMCwx''@;'; put 'put ''Ljg4LTIuMDVBMy40NCwzLjQ0LDAsMCwwLDMwLDI0YTIuMzUsMi4zNSwwLDAsMC0uMzUtMS4yNywyLjQ0LDIuNDQsMCwwLDAtMS0uODQsMi45LDIuOSwwLDAsMC0xLjI2LS4yOCwzLjM2LDMuMzYsMCwwLDAtMS44My41LDUuNjQsNS42NCwwLDAsMC0xLjQ4LDEuNDJsLTEtLjgxYTUuMTEsNS4x''@;'; put 'put ''MSwwLDAsMSw0LjM2LTIuMzcsNC4zNSw0LjM1LDAsMCwxLDIsLjQ1LDMuNDMsMy40MywwLDAsMSwyLDMuMTgsNC40NSw0LjQ1LDAsMCwxLS42OCwyLjM1LDEwLjksMTAuOSwwLDAsMS0yLjI0LDIuNDZsLTMuMjQsMi44MUgzMS41VjMzSDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiLz4nKSxoLkNsclNoYXBlU3VwZXJzY3JpcHQ9KDAsYy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjQzLDE4bDYuNzksOC42YTEuMTcsMS4xNywwLDAsMS0uOTIsMS45aDBhMS4xNywxLjE3LDAsMCwxLS45Mi0uNDRsLTYuNDQtOC4xM0w2LjQ3LDI4YTEuMTcsMS4x''@;'; put 'put ''NywwLDAsMS0uOTIuNDRoMGExLjE3LDEuMTcsMCwwLDEtLjkyLTEuOUwxMS40MywxOGwtNi44LTguNmExLjE3LDEuMTcsMCwwLDEsLjkyLTEuOWgwQTEuMiwxLjIsMCwwLDEsNi41MSw4bDYuNDMsOC4xM0wxOS4zOCw4YTEuMTcsMS4xNywwLDAsMSwuOTItLjQ0aDBhMS4xNywxLjE3LDAsMCwx''@;'; put 'put ''LC45MiwxLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjIuODUsMTQuNDdsNC41MS0zLjg1YTkuMzcsOS4zNywwLDAsMCwxLjg4LTIsMy40MywzLjQzLDAsMCwwLC41OS0xLjg2LDIuMjcsMi4yNywwLDAsMC0uMzYtMS4yNywy''@;'; put 'put ''LjM4LDIuMzgsMCwwLDAtLjk1LS44MywyLjc3LDIuNzcsMCwwLDAtMS4yNi0uMjksMy4zOSwzLjM5LDAsMCwwLTEuODMuNSw1LjgzLDUuODMsMCwwLDAtMS40OSwxLjQybC0xLS44MWE1LjEyLDUuMTIsMCwwLDEsNC4zNi0yLjM3LDQuMzYsNC4zNiwwLDAsMSwyLC40NSwzLjQ3LDMuNDcsMCww''@;'; put 'put ''LDEsMiwzLjE4QTQuNDQsNC40NCwwLDAsMSwzMC41OCw5YTExLjE0LDExLjE0LDAsMCwxLTIuMjQsMi40NkwyNS4xLDE0LjMxaDYuMjh2MS4zM0gyMi44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksaC5UZXh0RWRpdFNoYXBlcz17Ym9sZDpoLkNs''@;'; put 'put ''clNoYXBlQm9sZCwiYnVsbGV0LWxpc3QiOmguQ2xyU2hhcGVCdWxsZXRMaXN0LCJjaGVja2JveC1saXN0IjpoLkNsclNoYXBlQ2hlY2tib3hMaXN0LCJudW1iZXItbGlzdCI6aC5DbHJTaGFwZU51bWJlckxpc3QsImZvbnQtc2l6ZSI6aC5DbHJTaGFwZUZvbnRTaXplLGl0YWxpYzpoLkNsclNo''@;'; put 'put ''YXBlSXRhbGljLCJqdXN0aWZ5LXRleHQiOmguQ2xyU2hhcGVKdXN0aWZ5VGV4dCwiY2VudGVyLXRleHQiOmguQ2xyU2hhcGVDZW50ZXJUZXh0LCJhbGlnbi1sZWZ0LXRleHQiOmguQ2xyU2hhcGVBbGlnbkxlZnRUZXh0LCJhbGlnbi1yaWdodC10ZXh0IjpoLkNsclNoYXBlQWxpZ25SaWdodFRl''@;'; put 'put ''eHQsInBhaW50LXJvbGxlciI6aC5DbHJTaGFwZVBhaW50Um9sbGVyLCJibG9jay1xdW90ZSI6aC5DbHJTaGFwZUJsb2NrUXVvdGUsdGV4dDpoLkNsclNoYXBlVGV4dCx1bmRlcmxpbmU6aC5DbHJTaGFwZVVuZGVybGluZSwiYWxpZ24tY2VudGVyIjpoLkNsclNoYXBlQWxpZ25DZW50ZXIsImFs''@;'; put 'put ''aWduLWxlZnQiOmguQ2xyU2hhcGVBbGlnbkxlZnQsImFsaWduLXJpZ2h0IjpoLkNsclNoYXBlQWxpZ25SaWdodCwiYWxpZ24tYm90dG9tIjpoLkNsclNoYXBlQWxpZ25Cb3R0b20sImFsaWduLW1pZGRsZSI6aC5DbHJTaGFwZUFsaWduTWlkZGxlLCJhbGlnbi10b3AiOmguQ2xyU2hhcGVBbGln''@;'; put 'put ''blRvcCxsYW5ndWFnZTpoLkNsclNoYXBlTGFuZ3VhZ2UsInRleHQtY29sb3IiOmguQ2xyU2hhcGVUZXh0Q29sb3IsaGlnaGxpZ2h0ZXI6aC5DbHJTaGFwZUhpZ2hsaWdodGVyLGluZGVudDpoLkNsclNoYXBlSW5kZW50LG91dGRlbnQ6aC5DbHJTaGFwZU91dGRlbnQsc3RyaWtldGhyb3VnaDpo''@;'; put 'put ''LkNsclNoYXBlU3RyaWtldGhyb3VnaCxzdWJzY3JpcHQ6aC5DbHJTaGFwZVN1YnNjcmlwdCxzdXBlcnNjcmlwdDpoLkNsclNoYXBlU3VwZXJzY3JpcHR9LHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25z''@;'; put 'put ''LmFkZChoLlRleHRFZGl0U2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90cmF2ZWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2lj''@;'; put 'put ''b25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oaixoLHkpeyJ1c2Ugc3RyaWN0''@;'; put 'put ''IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksaC5UcmF2ZWxTaGFwZXM9aC5DbHJTaGFwZU9uSG9saWRheT1oLkNsclNoYXBlVHJhaWxlcj1oLkNsclNoYXBlRmVycnk9aC5DbHJTaGFwZUNhcmF2YW49aC5DbHJTaGFwZUNhbXBlcnZhbj1oLkNsclNo''@;'; put 'put ''YXBlQm9hdD1oLkNsclNoYXBlQmljeWNsZT1oLkNsclNoYXBlTWFwTWFya2VyPWguQ2xyU2hhcGVDb21wYXNzPWguQ2xyU2hhcGVNYXA9aC5DbHJTaGFwZUNhcj1oLkNsclNoYXBlQWlycGxhbmU9aC5DbHJTaGFwZVRydWNrPXZvaWQgMDt2YXIgYz15KAovKiEgLi4vdXRpbHMvZGVzY3JpcHRv''@;'; put 'put ''ci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIikscz15KAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7aC5DbHJTaGFwZVRy''@;'; put 'put ''dWNrPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMTJIMjZWN2ExLDEsMCwwLDAtMS0xSDNBMSwxLDAsMCwwLDIsN1YyNWExLDEsMCwwLDAsMSwxSDRWOEgyNFYxOS43YTYuNDUsNi40NSwwLDAsMSwxLjU2''@;'; put 'put ''LS4yYy4xNSwwLC4yOSwwLC40NCwwVjE0aDRhMiwyLDAsMCwxLDIsMnYxSDI4djJoNHY1SDI5LjZhNC41NCw0LjU0LDAsMCwwLTguMzQsMEgxNC40M2E0LjUsNC41LDAsMCwwLTQuMTctMi43NkE0LjM4LDQuMzgsMCwxLDAsMTQuNzIsMjZIMjFhNC40OSw0LjQ5LDAsMCwwLDguOTIsMEgzM2Ex''@;'; put 'put ''LDEsMCwwLDAsMS0xVjE2QTQsNCwwLDAsMCwzMCwxMlpNMTAuMjYsMjhhMi4zOCwyLjM4LDAsMSwxLDAtNC43NSwyLjM4LDIuMzgsMCwxLDEsMCw0Ljc1Wm0xNS4xNywwYTIuMzgsMi4zOCwwLDEsMSwyLjUtMi4zN0EyLjQ0LDIuNDQsMCwwLDEsMjUuNDMsMjhaIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsMTJIMjZWN2ExLDEsMCwwLDAtMS0xSDNBMSwxLDAsMCwwLDIsN1YyNWExLDEsMCwwLDAsMSwxSDRWOEgyNFYyMS40OUE0LjQ1LDQuNDUsMCwwLDAsMjEuMjUsMjRIMTQuNDNhNC41LDQuNSwwLDAsMC00''@;'; put 'put ''LjE3LTIuNzZBNC4zOCw0LjM4LDAsMSwwLDE0LjcyLDI2SDIxYTQuNDgsNC40OCwwLDAsMCw4LjkxLDBIMzRWMTZBNCw0LDAsMCwwLDMwLDEyWk0xMC4yNiwyOGEyLjM4LDIuMzgsMCwxLDEsMC00Ljc1LDIuMzgsMi4zOCwwLDEsMSwwLDQuNzVabTE1LjE3LDBhMi4zOCwyLjM4LDAsMSwxLDIu''@;'; put 'put ''NS0yLjM3QTIuNDQsMi40NCwwLDAsMSwyNS40MiwyOFpNMzIsMTdIMjZWMTRoNGEyLDIsMCwwLDEsMiwyWiIvPicpLGguQ2xyU2hhcGVBaXJwbGFuZT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM1Ljc3LDgu''@;'; put 'put ''MTZhMi40MywyLjQzLDAsMCwwLTEuOS0yTDI4LDQuODdhNC41LDQuNSwwLDAsMC0zLjY1Ljc5TDcsMTguMywyLjE0LDE4LjFBMS44NiwxLjg2LDAsMCwwLC45MSwyMS40MWw1LDMuOTNjLjYuNzMsMSwuNTksMTAuOTMtNC44MmwuOTMsOS40MmExLjM2LDEuMzYsMCwwLDAsLjg1LDEuMTgsMS40''@;'; put 'put ''MywxLjQzLDAsMCwwLC41NC4xLDEuNTQsMS41NCwwLDAsMCwxLS40MWwyLjM5LTIuMThhMS41MiwxLjUyLDAsMCwwLC40Ni0uODNMMjUuMiwxNS45YzMuNTctMiw2Ljk1LTMuODgsOS4zNi01LjI1QTIuNDMsMi40MywwLDAsMCwzNS43Nyw4LjE2Wm0tMi4yLjc1Yy0yLjUsMS40Mi02LDMuNDEt''@;'; put 'put ''OS43Niw1LjQ3bC0uNDEuMjNMMjEuMDcsMjcuMjhsLTEuNDcsMS4zNEwxOC41LDE3LjMyLDE3LjE3LDE4QzEwLDIyLDcuNjEsMjMuMTYsNi43OSwyMy41MmwtNC4zLTMuNDEsNS4wOC4yMiwxOC0xMy4wNmEyLjUxLDIuNTEsMCwwLDEsMi0uNDVsNS44NSwxLjI2YS40My40MywwLDAsMSwuMzUu''@;'; put 'put ''MzdBLjQyLjQyLDAsMCwxLDMzLjU3LDguOTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTcsMTIuNTRsMy41NiwxLDEuNjQtMS4xOS00LTEuMTZMMTAsMTAuMDlsNS40Ny0uMTYsMi4zLTEuNjdMMTAsOC41YTEu''@;'; put 'put ''MjUsMS4yNSwwLDAsMC0uNy4xN0w2LjY3LDEwLjJBMS4yOCwxLjI4LDAsMCwwLDcsMTIuNTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNi4yNSwxMS41LDEyLDEzLjE2bDYuMzItNC41OS05LjA3LjI2QS41Mi41Miww''@;'; put 'put ''LDAsMCw5LDguOTFMNi4xMywxMC41NkEuNTEuNTEsMCwwLDAsNi4yNSwxMS41WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTM0LjUyLDYuMzYsMjguMjIsNWEzLjc4LDMuNzgsMCwwLDAtMy4wNy42N0w2LjEyLDE5LjVs''@;'; put 'put ''LTQuNTctLjJhMS4yNSwxLjI1LDAsMCwwLS44MywyLjIybDQuNDUsMy41M2EuNTUuNTUsMCwwLDAsLjUzLjA5YzEuMjctLjQ5LDYtMywxMS41OS02LjA3bDEuMTIsMTEuNTFhLjU1LjU1LDAsMCwwLC45LjM3bDIuNS0yLjA4YS43Ni43NiwwLDAsMCwuMjYtLjQ1bDIuMzctMTMuMjljNC0yLjIy''@;'; put 'put ''LDcuODItNC4zNywxMC41MS01Ljg5QTEuNTUsMS41NSwwLDAsMCwzNC41Miw2LjM2WiIvPicpLGguQ2xyU2hhcGVDYXI9KDAscy5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjE1IiB5PSIxNyIgd2lkdGg9IjMiIGhlaWdo''@;'; put 'put ''dD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYuNDUsMTQuMTdBMjIuMSwyMi4xLDAsMCwwLDE5LjM4LDdhOS42NCw5LjY0LDAsMCwwLTktLjcsOC42LDguNiwwLDAsMC00LjgyLDYuNGMtLjA4LjQ3''@;'; put 'put ''LS4xNC45Mi0uMiwxLjM2QTQsNCwwLDAsMCwyLDE4djYuMTNhMiwyLDAsMCwwLDIsMlYyMEg0VjE4YTIsMiwwLDAsMSwyLTJIMjQuNzNBNy4yOCw3LjI4LDAsMCwxLDMyLDIzLjI3VjI0aC0yYTQuNTMsNC41MywwLDEsMCwuMzMsMkgzMmEyLDIsMCwwLDAsMi0ydi0uNzNBOS4yOCw5LjI4LDAs''@;'; put 'put ''MCwwLDI2LjQ1LDE0LjE3Wk0xMSwxNEg2LjkzYzAtLjMxLjA5LS42My4xNS0xQTYuNTIsNi41MiwwLDAsMSwxMSw4aDBabTIsMFY3LjU4YTguMTcsOC4xNywwLDAsMSw1LjM2LDEuMTZBMTksMTksMCwwLDEsMjMuOSwxNFpNMjUuOCwyOC4zOGEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIu''@;'; put 'put ''NSwwLDAsMSwyNS44LDI4LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTQuMTcsMjRhNC41Myw0LjUzLDAsMSwwLC4zMywyaDUuM2MwLS4wOCwwLS4xNywwLS4yNUE2LDYsMCwwLDEsMjAsMjRaTTEw''@;'; put 'put ''LDI4LjM4YTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjUsMi41LDAsMCwxLDEwLDI4LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNi44NywxNC4yOEEyMi4zNiwyMi4zNiwwLDAsMCwxOS42NSw2LjlhOS42''@;'; put 'put ''NCw5LjY0LDAsMCwwLTktLjcsOC42LDguNiwwLDAsMC00LjgyLDYuNGMtLjA4LjQ5LS4xNSwxLS4yMSwxLjRoLTFBMi41OSwyLjU5LDAsMCwwLDIsMTYuNTl2OC41NWEuODYuODYsMCwwLDAsLjg2Ljg2SDQuNTljMC0uMTMsMC0uMjYsMC0uMzlhNS43Nyw1Ljc3LDAsMCwxLDcuNzEtNS40NWwt''@;'; put 'put ''MSwxYTQuNTYsNC41NiwwLDAsMC00LjM0LDEuNTgsMywzLDAsMCwwLS42My45M0E0LjUsNC41LDAsMSwwLDE0LjgyLDI2aDUuNDhjMC0uMTMsMC0uMjYsMC0uMzlBNS43Nyw1Ljc3LDAsMCwxLDI4LDIwLjE2bC0xLDFhNC41Niw0LjU2LDAsMCwwLTQuMzQsMS41OCwzLDMsMCwwLDAtLjYzLjkz''@;'; put 'put ''QTQuNSw0LjUsMCwxLDAsMzAuNTMsMjZoMi42MWEuODYuODYsMCwwLDAsLjg2LS44NlYyMy4zNkE5LjM5LDkuMzksMCwwLDAsMjYuODcsMTQuMjhaTTEyLDE0SDhjMC0uMzUuMS0uNzEuMTYtMS4wN2E2LjUyLDYuNTIsMCwwLDEsMy44Ny01aDBaTTEwLjM2LDI4LjM2YTIuNSwyLjUsMCwxLDEs''@;'; put 'put ''Mi41LTIuNUEyLjUsMi41LDAsMCwxLDEwLjM2LDI4LjM2Wk0xOSwxOUgxNlYxN2gzWm0tNi01VjcuNDdhOC4xNiw4LjE2LDAsMCwxLDUuNCwxLjE1QTE5LjE1LDE5LjE1LDAsMCwxLDI0LDE0Wk0yNi4wNiwyOC4zNmEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIuNSwwLDAsMSwyNi4wNiwy''@;'; put 'put ''OC4zNloiLz4nKSxoLkNsclNoYXBlTWFwPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuNTksNi4xOUExLDEsMCwwLDAsMzIuNyw2TDIzLjA5LDksMTMuNDYsNC4xMWExLDEsMCwwLDAtLjg0LDBMMi42Miw4''@;'; put 'put ''LjJBMSwxLDAsMCwwLDIsOS4xM1YyOS42MWExLDEsMCwwLDAsMS4zOC45MkwxMywyNi41OGw5LjU5LDQuOTJhMSwxLDAsMCwwLC40Ni4xMSwxLDEsMCwwLDAsLjMsMGwxMC0zLjEyYTEsMSwwLDAsMCwuNy0xVjdBMSwxLDAsMCwwLDMzLjU5LDYuMTlaTTMyLDI2Ljc1bC04LjMyLDIuNlYyNy4w''@;'; put 'put ''NmgtMS42djJsLTguNC00LjMxVjIzLjA2aC0xLjZ2MS43Mkw0LDI4LjExVjkuNzlsOC4wOC0zLjMzVjguODFoMS42VjYuNDdsOC40LDQuM3YyLjFoMS42VjExTDMyLDguMzZaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiIHg9IjIyLjA4IiB5PSIxNS4wNiIgd2lkdGg9IjEuNiIgaGVpZ2h0PSIzLjgxIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjIyLjA4IiB5PSIyMS4wNiIgd2lkdGg9IjEuNiIgaGVpZ2h0PSIzLjgxIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjEyLjA4IiB5PSIxMS4wNiIgd2lkdGg9IjEuNiIgaGVpZ2h0PSIzLjgxIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUiIHg9IjEyLjA4IiB5PSIxNy4xMyIgd2lkdGg9IjEuNiIgaGVpZ2h0PSIzLjc1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMzLjMxLDcuMzUsMjUsOS45NFYxNEgyM1YxMC4yOUwxNCw1''@;'; put 'put ''LjY4VjlIMTJWNS4yN2wtOS42Nyw0QS41My41MywwLDAsMCwyLDkuNzVWMzAuNDVhLjUzLjUzLDAsMCwwLC43NC40OUwxMiwyNy4xMlYyM2gydjQuNTNsOSw0LjYxVjI4aDJ2My43OWw4LjYzLTIuN2EuNTMuNTMsMCwwLDAsLjM3LS41MVY3Ljg2QS41My41MywwLDAsMCwzMy4zMSw3LjM1Wk0x''@;'; put 'put ''NCwyMUgxMlYxN2gyWm0wLTZIMTJWMTFoMlpNMjUsMjZIMjNWMjJoMlptMC02SDIzVjE2aDJaIi8+JyksaC5DbHJTaGFwZUNvbXBhc3M9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIwLjgyLDE1LjMxaDBMMTAuNDYsOWMtLjQ2LS4yNi0xLjExLjM3LS44Ni44NGw2LjE1LDEwLjU2LDEw''@;'; put 'put ''LjU2LDYuMTVhLjY2LjY2LDAsMCwwLC44NC0uODZabS00LDQsMy0zLDQuNTUsNy40NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMSwy''@;'; put 'put ''OS45NVYyOS41M0gxN3YyLjQyQTE0LDE0LDAsMCwxLDQuMDUsMTlINi40N1YxN0g0LjA1QTE0LDE0LDAsMCwxLDE3LDQuMDVWNi40N2gyVjQuMDVBMTQsMTQsMCwwLDEsMzEuOTUsMTdIMjkuNTN2MmgyLjQyQTE0LDE0LDAsMCwxLDE5LDMxLjk1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk02LjQ3LDE5SDQuMDVjMC0uMzMtLjA1LS42Ni0uMDUtMXMwLS42Ny4wNS0xSDYuNDdaTTE3LDQuMDVjLjMzLDAsLjY2LS4wNSwxLS4wNXMu''@;'; put 'put ''NjcsMCwxLC4wNVY2LjQ3SDE3Wm0yLDI3LjljLS4zMywwLS42Ni4wNS0xLC4wNXMtLjY3LDAtMS0uMDVWMjkuNTNoMlptOC01LjU4YS41OS41OSwwLDAsMS0uNjkuMTZMMTUuNzUsMjAuMzgsOS42LDkuODJjLS4yNS0uNDcuMzktMS4xLjg2LS44NGwxMC4zNyw2LjMzaDBsNi4zMywxMC4zN0Eu''@;'; put 'put ''NTkuNTksMCwwLDEsMjcsMjYuMzdaTTI5LjUzLDE5VjE3aDIuNDJjMCwuMzMuMDUuNjYuMDUsMXMwLC42Ny0uMDUsMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE2Ljc3IDE5LjM1IDI0LjM1IDIzLjc3''@;'; put 'put ''IDE5LjggMTYuMzMgMTYuNzcgMTkuMzUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksaC5DbHJTaGFwZU1hcE1hcmtlcj0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDYu''@;'; put 'put ''NzJhNS43Myw1LjczLDAsMSwwLDUuNzMsNS43M0E1LjczLDUuNzMsMCwwLDAsMTgsNi43MlptMCw5LjQ2YTMuNzMsMy43MywwLDEsMSwzLjczLTMuNzNBMy43MywzLjczLDAsMCwxLDE4LDE2LjE3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMkExMS43OSwxMS43OSwwLDAsMCw2LjIyLDEzLjczYzAsNC42NywyLjYyLDguNTgsNC41NCwxMS40M2wuMzUuNTJhOTkuNjEsOTkuNjEsMCwwLDAsNi4xNCw4bC43Ni44OS43Ni0uODlhOTkuODIsOTkuODIsMCwwLDAsNi4xNC04bC4zNS0uNTNjMS45''@;'; put 'put ''MS0yLjg1LDQuNTMtNi43NSw0LjUzLTExLjQyQTExLjc5LDExLjc5LDAsMCwwLDE4LDJaTTIzLjU5LDI0bC0uMzYuNTNjLTEuNzIsMi41OC00LDUuNDctNS4yMyw2LjktMS4xOC0xLjQzLTMuNTEtNC4zMi01LjIzLTYuOUwxMi40MiwyNGMtMS43Ny0yLjY0LTQuMi02LjI1LTQuMi0xMC4zMWE5''@;'; put 'put ''Ljc4LDkuNzgsMCwxLDEsMTkuNTYsMEMyNy43OCwxNy43OSwyNS4zNiwyMS40LDIzLjU5LDI0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDYuNzJhNS43Myw1LjczLDAs''@;'; put 'put ''MSwwLDUuNzMsNS43M0E1LjczLDUuNzMsMCwwLDAsMTgsNi43MlptMCw5LjQ2YTMuNzMsMy43MywwLDEsMSwzLjczLTMuNzNBMy43MywzLjczLDAsMCwxLDE4LDE2LjE3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTItLWJhZGdlZCIgZD0iTTI5Ljc3LDEzLjQ5YTcuNDksNy40OSwwLDAsMS0yLS4zM2MwLC4xOSwwLC4zOCwwLC41NywwLDQuMDYtMi40Miw3LjY3LTQuMTksMTAuMzFsLS4zNi41M2MtMS43MiwyLjU4LTQsNS40Ny01LjIzLDYuOS0xLjE4LTEuNDMtMy41MS00LjMyLTUuMjMtNi45''@;'; put 'put ''TDEyLjQyLDI0Yy0xLjc3LTIuNjQtNC4yLTYuMjUtNC4yLTEwLjMxQTkuNzcsOS43NywwLDAsMSwyMi41Niw1LjA5YTcuNDUsNy40NSwwLDAsMSwuNTItMkExMS43NSwxMS43NSwwLDAsMCw2LjIyLDEzLjczYzAsNC42NywyLjYyLDguNTgsNC41NCwxMS40M2wuMzUuNTJhOTkuNjEsOTkuNjEs''@;'; put 'put ''MCwwLDAsNi4xNCw4bC43Ni44OS43Ni0uODlhOTkuODIsOTkuODIsMCwwLDAsNi4xNC04bC4zNS0uNTNjMS45MS0yLjg1LDQuNTMtNi43NSw0LjUzLTExLjQyQzI5Ljc4LDEzLjY1LDI5Ljc3LDEzLjU3LDI5Ljc3LDEzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTEuNzksMTEu''@;'; put 'put ''NzksMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYxLDk5LjYxLDAsMCwwLDYuMTQsOGwuNzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkExMS43OSwx''@;'; put 'put ''MS43OSwwLDAsMCwxOCwyWm0wLDE3YTYuNTYsNi41NiwwLDEsMSw2LjU2LTYuNTZBNi41Niw2LjU2LDAsMCwxLDE4LDE5WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjE4IiBjeT0iMTIuNDQiIHI9IjMuNzMi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI5Ljc3LDEzLjQ5QTcuNDcsNy40NywwLDAsMSwyNC4zOCwxMWE2LjU4LDYuNTgsMCwxLDEtMS42MS0zLDcuNDIsNy40MiwwLDAsMSwuMzEt''@;'; put 'put ''NC44NEExMS43NSwxMS43NSwwLDAsMCw2LjIyLDEzLjczYzAsNC42NywyLjYyLDguNTgsNC41NCwxMS40M2wuMzUuNTJhOTkuNjEsOTkuNjEsMCwwLDAsNi4xNCw4bC43Ni44OS43Ni0uODlhOTkuODIsOTkuODIsMCwwLDAsNi4xNC04bC4zNS0uNTNjMS45MS0yLjg1LDQuNTMtNi43NSw0LjUz''@;'; put 'put ''LTExLjQyQzI5Ljc4LDEzLjY1LDI5Ljc3LDEzLjU3LDI5Ljc3LDEzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGN4PSIxOCIgY3k9IjEyLjQ0IiByPSIzLjczIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGguQ2xyU2hhcGVCaWN5Y2xlPSgwLHMuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik04LjUsMjkuNjVB''@;'; put 'put ''Ni41MSw2LjUxLDAsMCwxLDIsMjMuMTVhNi4zOSw2LjM5LDAsMCwxLDYuNS02LjM2QTYuMzksNi4zOSwwLDAsMSwxNSwyMy4xNSw2LjUxLDYuNTEsMCwwLDEsOC41LDI5LjY1Wm0wLTExYTQuNSw0LjUsMCwxLDAsNC41LDQuNUE0LjUxLDQuNTEsMCwwLDAsOC41LDE4LjY1WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI3LjUsMjkuNjVhNi41MSw2LjUxLDAsMCwxLTYuNS02LjUsNi41LDYuNSwwLDAsMSwxMywwQTYuNTEsNi41MSwwLDAsMSwyNy41LDI5LjY1Wm0wLTExYTQuNSw0LjUsMCwxLDAsNC41LDQuNUE0LjUxLDQuNTEs''@;'; put 'put ''MCwwLDAsMjcuNSwxOC42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOSwyNC42Nkg4YTEsMSwwLDAsMS0uODktMS40NWw1LTEwLDEuNzguOUw5LjYyLDIyLjczSDE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIC8+PHJlY3QgeD0iMTMiIHk9IjEyLjY4IiB3aWR0aD0iMTEiIGhlaWdodD0iMS45MSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI4LDI0LjY2YTEsMSwwLDAsMS0uOTQtLjY2TDIyLjI5LDEwLjY2SDIwYTEsMSwwLDAs''@;'; put 'put ''MS0xLTEsMSwxLDAsMCwxLDEtLjkzaDNhLjk0Ljk0LDAsMCwxLC45NC42bDUsMTRhMSwxLDAsMCwxLS42LDEuMjdBMSwxLDAsMCwxLDI4LDI0LjY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTEzLDE0LjY2YTEsMSwwLDAsMS0uNzEt''@;'; put 'put ''LjI5bC0xLjctMS43MUg4YTEsMSwwLDAsMS0xLTEsLjk0Ljk0LDAsMCwxLDEtMWgzYTEuMDgsMS4wOCwwLDAsMSwuNzUuMjdsMiwyYTEsMSwwLDAsMSwwLDEuNDFBMSwxLDAsMCwxLDEzLDE0LjY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGgg''@;'; put 'put ''ZD0iTTE1LDIxLjljLTAuMi0yLTEuMi0zLjgtMi45LTQuOWwtMi41LDQuOUgxNXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTcuMiwyMy40Yy0wLjItMC4zLTAuMi0wLjcsMC0xbDMuMi02LjNjLTAuNi0wLjItMS4yLTAuMi0xLjgtMC4yQzUs''@;'; put 'put ''MTUuOSwyLDE4LjgsMiwyMi40YzAsMy42LDIuOSw2LjUsNi41LDYuNVxuXHRjMywwLDUuNi0yLjEsNi4zLTVIOEM3LjcsMjMuOSw3LjMsMjMuNyw3LjIsMjMuNHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTE5LDIxLjloLTRjMCwwLjIsMCww''@;'; put 'put ''LjMsMCwwLjVjMCwwLjUtMC4xLDEtMC4yLDEuNUgxOVYyMS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMjcuNSwxNS45Yy0wLjMsMC0wLjYsMC0wLjksMC4xbDIuNCw2LjZjMC4yLDAuNS0wLjEsMS4xLTAuNiwxLjNjLTAuMSwwLTAuMiww''@;'; put 'put ''LjEtMC4zLDAuMWMtMC40LDAtMC44LTAuMy0wLjktMC43bC0yLjQtNi43XG5cdGMtMy4yLDEuNi00LjUsNS41LTMsOC43YzEuNiwzLjIsNS41LDQuNSw4LjcsM2MzLjItMS42LDQuNS01LjUsMy04LjdDMzIuMiwxNy4zLDMwLDE1LjksMjcuNSwxNS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtNCIgLz48cGF0aCBkPSJNMjQuNywxNi43YzAuNi0wLjMsMS4zLTAuNSwxLjktMC42bC0yLjctNy40QzIzLjgsOC4yLDIzLjQsOCwyMyw3LjloLTNjLTAuNiwwLTEsMC41LTEsMS4xYzAsMC41LDAuNCwwLjksMSwwLjlcblx0YzAsMCwwLDAsMCwwaDIuM2wwLjcsMmgt''@;'; put 'put ''OS42bC0xLjctMS43QzExLjUsMTAuMSwxMS4zLDEwLDExLDEwSDhjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMi42bDEuMiwxLjJsLTEuNSwzXG5cdGMwLjYsMC4yLDEuMywwLjUsMS44LDAuOGwxLjYtMy4yaDEwTDI0LjcsMTYuN3oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTUiIC8+JyksaC5DbHJTaGFwZUJvYXQ9KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjEsMjcuMUMyOCwyNywyNi45LDI3LjQsMjYsMjguMmMtMS4xLDEuMS0yLjksMS4xLTQuMSwwYy0xLTAuNy0yLjEtMS4xLTMuMy0xLjFjLTEuMi0wLjEtMi40LDAuMy0zLjMsMS4xXG5c''@;'; put 'put ''dFx0QzE0LjcsMjguNywxNCwyOSwxMy4yLDI5cy0xLjUtMC4zLTIuMS0wLjhjLTEtMC44LTIuMi0xLjItMy40LTEuMnMtMi40LDAuNC0zLjQsMS4yQzMuNywyOC43LDIuOCwyOSwyLDI5djJcblx0XHRjMS4zLDAuMSwyLjYtMC4zLDMuNi0xLjJDNi4yLDI5LjMsNy4xLDI5LDcuOSwyOWMwLjcs''@;'; put 'put ''MCwxLjUsMC4zLDIuMSwwLjhjMS44LDEuNiw0LjYsMS42LDYuNSwwYzAuNi0wLjUsMS4zLTAuOCwyLjEtMC44XG5cdFx0YzAuNywwLDEuNCwwLjMsMiwwLjhjMS45LDEuNiw0LjYsMS42LDYuNSwwYzAuNS0wLjUsMS4zLTAuOCwyLTAuOGMwLjcsMCwxLjQsMC4zLDEuOSwwLjhjMC45LDAuNywx''@;'; put 'put ''LjksMS4xLDMsMS4ydi0yXG5cdFx0Yy0xLDAtMS4yLTAuNC0xLjctMC44QzMxLjQsMjcuNSwzMC4zLDI3LjEsMjkuMSwyNy4xeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMjNjMC0wLjYsMC41LTEsMS4xLTFIMzJsLTMuNSwzLjFo''@;'; put 'put ''MC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMi0wLjJjMC43LTAuOCwwLjYtMi4xLTAuMi0yLjhcblx0XHRDMzMsMjAuMiwzMi42LDIwLDMyLjEsMjBoLTI1Yy0xLjcsMC0zLDEuMy0zLDN2My4yYzAuNS0wLjUsMS4yLTAuOCwxLjktMS4xVjIzeiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTguOSwxOUgxNXYtNy44YzAtMC42LTAuMy0xLjItMC44LTEuNkMxMy4zLDguOSwxMiw5LjEsMTEuNCwxMGwtNC4xLDUuOWMtMC40LDAuNi0wLjQsMS40LTAuMSwyLjFDNy41LDE4LjYsOC4yLDE5LDguOSwxOVxuXHRcdHog''@;'; put 'put ''TTEzLjEsMTEuMkwxMywxN0g4LjlMMTMuMSwxMS4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI2LDE4YzAuNC0wLjYsMC40LTEuNCwwLTJMMTkuNyw1LjZjLTAuNC0wLjYtMS0xLTEuNy0xYy0xLjEsMC0yLDAuOS0yLDJWMTloOC4z''@;'; put 'put ''QzI1LDE5LDI1LjcsMTguNiwyNiwxOHogTTE3LjksNi42XG5cdFx0bDYuNCwxMC41aC02LjRWNi42eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTM0LDMxYy0xLjEtMC4xLTIuMS0wLjUtMy0xLjJjLTAuNS0wLjUtMS4yLTAuOC0yLTAu''@;'; put 'put ''OGMtMC43LDAtMS41LDAuMy0yLDAuOGMtMC45LDAuOC0yLDEuMS0zLjEsMS4xYy0xLjIsMC0yLjQtMC40LTMuMy0xLjFcblx0Yy0xLjItMS4xLTMtMS4xLTQuMSwwYy0wLjksMC44LTIuMSwxLjItMy40LDEuMmMtMS4yLDAtMi4zLTAuNC0zLjItMS4yYy0wLjYtMC41LTEuMy0wLjgtMi0wLjhj''@;'; put 'put ''LTAuOCwwLTEuNywwLjMtMi4zLDAuOFxuXHRjLTEsMC44LTIuMywxLjItMy41LDEuMVYyOWMwLjgsMCwxLjctMC4zLDIuMy0wLjljMS0wLjgsMi4yLTEuMiwzLjQtMS4xYzEuMiwwLDIuNCwwLjQsMy4zLDEuMmMxLjIsMS4xLDMsMS4xLDQuMiwwXG5cdGMxLjktMS42LDQuNy0xLjYsNi41LDBj''@;'; put 'put ''MS4yLDEuMSwzLDEuMSw0LjEsMGMwLjktMC44LDIuMS0xLjIsMy4zLTEuMmMxLjEsMCwyLjIsMC40LDMsMS4yQzMyLjgsMjguNywzMywyOSwzNCwyOUwzNCwzMXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTQuMSwyNi4yYzAuNi0wLjUsMS4y''@;'; put 'put ''LTAuOCwxLjktMVYyM2MwLTAuNiwwLjQtMS4xLDEtMS4xaDI1TDI4LjQsMjVoMC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMi0wLjJcblx0YzAuNy0wLjksMC41LTIuMS0wLjQtMi44QzMyLjksMjAuMSwzMi40LDIwLDMyLDIwSDdjLTEuNywwLTMsMS4zLTMsM0w0LjEsMjYu''@;'; put 'put ''Mkw0LjEsMjYuMnoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTE0LjksMTguOUg4LjljLTEuMSwwLTItMC45LTItMmMwLTAuNCwwLjEtMC44LDAuNC0xLjJsNC4xLTUuOGMwLjYtMC45LDEuOS0xLjEsMi44LTAuNWMwLjUsMC40LDAuOCwxLDAu''@;'; put 'put ''OCwxLjZWMTguOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LjMsMTguOUgxNlY2LjRjMC0xLjEsMC45LTIsMi0yYzAuNywwLDEuMywwLjQsMS43LDFMMjYsMTUuOGMwLjYsMSwwLjIsMi4yLTAuNywyLjdDMjUsMTguNywyNC42LDE4Ljgs''@;'; put 'put ''MjQuMywxOC45XG5cdEwyNC4zLDE4Ljl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLGguQ2xyU2hhcGVDYW1wZXJ2YW49KDAscy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTkuNSwyNEM5LjUsMjQsOS41LDI0LDkuNSwyNEM3LjYsMjQsNiwyNS42LDYsMjcu''@;'; put 'put ''NWMwLDAsMCwwLDAsMEM2LDI5LjQsNy42LDMxLDkuNSwzMWMxLjksMCwzLjUtMS42LDMuNS0zLjVcblx0XHRTMTEuNCwyNCw5LjUsMjR6IE05LjUsMjlDOC43LDI5LDgsMjguMyw4LDI3LjVTOC43LDI2LDkuNSwyNnMxLjUsMC43LDEuNSwxLjVTMTAuMywyOSw5LjUsMjl6IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjMuNSwyNEMyMy41LDI0LDIzLjUsMjQsMjMuNSwyNGMtMS45LDAtMy41LDEuNi0zLjUsMy41YzAsMCwwLDAsMCwwYzAsMS45LDEuNSwzLjUsMy41LDMuNWMxLjksMCwzLjUtMS42LDMuNS0zLjVcblx0XHRTMjUu''@;'; put 'put ''NCwyNCwyMy41LDI0eiBNMjMuNSwyOWMtMC44LDAtMS41LTAuNy0xLjUtMS41czAuNy0xLjUsMS41LTEuNXMxLjUsMC43LDEuNSwxLjVTMjQuMywyOSwyMy41LDI5eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMzLDIwLjFWMjBoLTAu''@;'; put 'put ''MWwtMy41LTUuNUMzMSwxMy42LDMyLDEyLDMyLDEwLjNWOS43QzMyLDcuMSwyOS45LDUsMjcuMyw1aC04LjVjLTEuOSwwLTMuNywxLjItNC40LDNINWMtMS43LDAtMywxLjMtMywzXG5cdFx0djE3aDJWMTFjMC0wLjYsMC40LTEsMS0xaDEwLjlMMTYsOS4yQzE2LjMsNy45LDE3LjQsNywxOC43''@;'; put 'put ''LDdoOC41QzI4LjgsNywzMCw4LjIsMzAsOS43djAuNWMwLDEuNS0xLjIsMi43LTIuNywyLjdIMjR2OWg3Ljhcblx0XHRsMC4yLDAuM1YyNWMwLDAuNi0wLjQsMS0xLDFoLTJ2MmgyYzEuNywwLDMtMS4zLDMtM3YtMy4zTDMzLDIwLjF6IE0yNiwyMHYtNWgxLjVsMy4xLDVIMjZ6IiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cmVjdCB4PSIxOSIgeT0iOSIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBvbHlnb24gcG9pbnRzPSIyMCwyMiAyMiwyMiAyMiwxMyAxNSwxMyAx''@;'; put 'put ''NSwyOCAxNywyOCAxNywxNSAyMCwxNSBcdCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTYsMjBoN3YtN0g2VjIweiBNOCwxNWgzdjNIOFYxNXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRo''@;'; put 'put ''IGQ9Ik05LjUsMjRDNy42LDI0LDYsMjUuNiw2LDI3LjVTNy42LDMxLDkuNSwzMWMwLDAsMCwwLDAsMGMxLjksMCwzLjUtMS42LDMuNS0zLjVjMCwwLDAtMC4xLDAtMC4xQzEzLDI1LjUsMTEuNCwyNCw5LjUsMjR6IlxuXHRcdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiAvPjxjaXJjbGUgY3g9IjIzLjUiIGN5PSIyNy41IiByPSIzLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI5LjUsMTQuNUMzMSwxMy42LDMyLDEyLDMyLDEwLjJWOS43YzAsMCwwLDAsMC0wLjFDMzIsNywyOS45LDUsMjcuMyw1aC04LjVj''@;'; put 'put ''LTEuOSwwLTMuNywxLjItNC40LDNINWMtMS43LDAtMywxLjMtMywzdjE3XG5cdFx0aDJWMTFjMC0wLjYsMC40LTEsMS0xaDEwLjlMMTYsOS4yQzE2LjMsNy45LDE3LjQsNywxOC43LDdoOC41QzI4LjgsNywzMCw4LjIsMzAsOS43djAuNWMwLDEuNS0xLjIsMi43LTIuNywyLjdIMjdoLTN2OWg3''@;'; put 'put ''Ljhcblx0XHRsMC4yLDAuM1YyNWMwLDAuNi0wLjQsMS0xLDFoLTJ2MmgyYzEuNywwLDMtMS4zLDMtM3YtMy4zTDI5LjUsMTQuNXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHJlY3QgeD0iMTkiIHk9IjkiIHdpZHRoPSI3LjkiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz48cG9seWdvbiBwb2ludHM9IjIwLDIyIDIxLjksMjIgMjEuOSwxMyAxNSwxMyAxNSwyOCAxNi45LDI4IDE2LjksMTUgMjAsMTUgXHQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+PHJlY3QgeD0iNiIg''@;'; put 'put ''eT0iMTMiIHdpZHRoPSI2LjkiIGhlaWdodD0iNyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNiIgLz4nKSxoLkNsclNoYXBlQ2FyYXZhbj0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTMuNSwyMUMxMSwyMSw5LDIzLDksMjUuNXMyLDQuNSw0LjUsNC41YzIuNSww''@;'; put 'put ''LDQuNS0yLDQuNS00LjVDMTgsMjMsMTYsMjEsMTMuNSwyMXogTTEzLjUsMjhjLTEuNCwwLTIuNS0xLjEtMi41LTIuNVxuXHRcdHMxLjEtMi41LDIuNS0yLjVzMi41LDEuMSwyLjUsMi41UzE0LjksMjgsMTMuNSwyOHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0zMywyNGgtMnYtNy41YzAtMC41LTAuMS0xLTAuNC0xLjVsLTQuMi03LjVjLTAuNS0xLTEuNS0xLjUtMi42LTEuNUg1QzMuMyw2LDIsNy4zLDIsOXYxNGMwLDEuNywxLjMsMywzLDNoMnYtMkg1XG5cdFx0Yy0wLjYsMC0xLTAuNC0xLTFWOWMwLTAuNiwwLjQtMSwxLTFo''@;'; put 'put ''MTguOGMwLjQsMCwwLjcsMC4yLDAuOSwwLjVsNC4yLDcuNWMwLjEsMC4xLDAuMSwwLjMsMC4xLDAuNVYyNGgtNFYxMmgtN3Y4aDJ2LTZoM3YxMGgtM3YyaDEzXG5cdFx0YzAuNiwwLDEtMC40LDEtMVMzMy42LDI0LDMzLDI0eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTIiIC8+PHBhdGggZD0iTTE2LDEySDd2Nmg5VjEyeiBNMTQsMTZIOXYtMmg1VjE2eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTEzLjUsMzBDMTEsMzAsOSwyOCw5LDI1LjVzMi00LjUsNC41LTQuNXM0LjUsMiw0LjUsNC41QzE4''@;'; put 'put ''LDI4LDE2LDMwLDEzLjUsMzB6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMywyNGgtMnYtNy41YzAtMC41LTAuMS0xLTAuNC0xLjVsLTQuMi03LjVjLTAuNS0xLTEuNS0xLjUtMi42LTEuNUg1QzMuMyw2LDIsNy4zLDIsOXYxNGMwLDEuNywx''@;'; put 'put ''LjMsMywzLDNoMnYtMkg1XG5cdGMtMC42LDAtMS0wLjQtMS0xVjljMC0wLjYsMC40LTEsMS0xaDE4LjhjMC40LDAsMC43LDAuMiwwLjksMC41bDQuMiw3LjVjMC4xLDAuMSwwLjEsMC4zLDAuMSwwLjVWMjRoLTRWMTJoLTd2OGgydi02aDN2MTBoLTN2MmgxM1xuXHRjMC42LDAsMS0wLjQsMS0x''@;'; put 'put ''UzMzLjYsMjQsMzMsMjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNiwxOEg3di02aDlWMTh6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLGguQ2xyU2hhcGVGZXJyeT0oMCxzLmNsckljb25TVkcpKCc8''@;'; put 'put ''cGF0aCBkPSJNMjksMjUuMWMtMS4yLDAtMi4zLDAuNC0zLjMsMS4xYzAsMCwwLDAsMCwwYy0xLjEsMS4xLTMsMS4xLTQuMSwwYy0wLjktMC44LTIuMS0xLjItMy4zLTEuMmMtMS4yLDAtMi4zLDAuNC0zLjIsMS4yXG5cdFx0Yy0xLjIsMS4xLTMsMS4xLTQuMiwwQzEwLDI1LjQsOC44LDI1LDcu''@;'; put 'put ''NiwyNWMtMS4yLDAtMi40LDAuNC0zLjQsMS4xQzMuNiwyNi43LDIuOCwyNywyLDI3djJjMS4zLDAuMSwyLjUtMC40LDMuNC0xLjJcblx0XHRDNi4xLDI3LjMsNi45LDI3LDcuNywyN2MwLjgsMCwxLjUsMC4zLDIuMSwwLjhjMS45LDEuNiw0LjcsMS42LDYuNSwwYzAuNi0wLjUsMS4zLTAuOCwy''@;'; put 'put ''LjEtMC44YzAuOCwwLDEuNSwwLjMsMi4xLDAuOFxuXHRcdGMxLjksMS42LDQuNiwxLjYsNi41LDBjMC41LTAuNSwxLjMtMC44LDItMC44YzAuNywwLDEuNSwwLjMsMiwwLjhjMC45LDAuNywyLDEuMSwzLjEsMS4ydi0xLjljLTAuNywwLTEuNC0wLjMtMS45LTAuOVxuXHRcdEMzMS4zLDI1LjQs''@;'; put 'put ''MzAuMSwyNSwyOSwyNS4xeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTUuOSwyMy4yVjIwSDMybC0zLjUsM2gwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJsMC4yLTAuMmMwLjUtMC42LDAuNS0xLjQsMC4yLTIuMWMtMC40''@;'; put 'put ''LTAuNy0xLTEtMS44LTFoLTQuNFxuXHRcdEwyMi41LDExSDE3Yy0xLjcsMC0zLDEuMy0zLDNoLTJWOC4xSDZ2Ni4xYy0xLjIsMC40LTIsMS41LTIsMi44djEuMVYyMHY0LjNsMC4xLTAuMUM0LjYsMjMuNyw1LjIsMjMuNCw1LjksMjMuMnogTTgsMTBoMnY0SDhWMTB6XG5cdFx0IE02LDE3YzAt''@;'; put 'put ''MC42LDAuNC0xLDEtMWg5di0yYzAtMC42LDAuNC0xLDEtMWg1bDAuNiwxSDE4djJoNS44bDEuMiwyLjFINlYxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yOC4yLDI1Yy0xLjIsMC0yLjQsMC40LTMuMywxLjJjLTEuMiwxLjEtMywx''@;'; put 'put ''LjEtNC4xLDBjLTEuOS0xLjYtNC42LTEuNi02LjUsMGMtMS4yLDEuMS0yLjksMS4xLTQuMSwwXG5cdFx0Yy0wLjktMC44LTItMS4yLTMuMi0xLjJjLTEuMiwwLTIuMywwLjQtMy4yLDEuMkMzLjQsMjYuNywyLjcsMjcsMiwyN3YyYzEuMS0wLjEsMi4yLTAuNSwzLjEtMS4yQzUuNiwyNy4zLDYu''@;'; put 'put ''MywyNyw3LDI3XG5cdFx0YzAuNywwLDEuNSwwLjMsMiwwLjhjMS45LDEuNiw0LjcsMS42LDYuNiwwYzAuNi0wLjUsMS4zLTAuOCwyLjEtMC44YzAuOCwwLDEuNSwwLjMsMi4xLDAuOGMxLjksMS42LDQuNywxLjYsNi41LDBcblx0XHRjMC42LTAuNSwxLjMtMC44LDIuMS0wLjhjMC44LDAsMS42''@;'; put 'put ''LDAuMywyLjEsMC44YzAuOSwwLjgsMi4yLDEuMywzLjQsMS4ydi0yYy0wLjgsMC0xLjYtMC4zLTIuMi0wLjhDMzAuNywyNS40LDI5LjUsMjUsMjguMiwyNXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTUuOCwyMy4ydi0zLjNoMjYuMUwyOC40''@;'; put 'put ''LDIzaDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjEtMC4yYzAuNy0wLjksMC41LTIuMS0wLjQtMi44Yy0wLjMtMC4zLTAuOC0wLjQtMS4yLTAuNFxuXHRcdGgtNC4xbC01LjQtN2gtNS41Yy0xLjcsMC0zLDEuMy0zLDNoLTJWOEg2djYuMmMtMS4yLDAuNC0yLjEsMS41LTIu''@;'; put 'put ''MSwyLjhsMCw3LjJsMC4xLDBDNC41LDIzLjcsNS4xLDIzLjQsNS44LDIzLjJ6IE0xNy45LDE0aDQuMlxuXHRcdGwxLjQsMmgtNS43VjE0eiBNNy45LDEwaDJ2NGgtMlYxMHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksaC5DbHJTaGFwZVRyYWlsZXI9KDAs''@;'; put 'put ''cy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDE5LjJjLTMuMiwwLTUuOCwyLjYtNS44LDUuOHMyLjYsNS44LDUuOCw1LjhzNS44LTIuNiw1LjgtNS44UzE4LjIsMTkuMiwxNSwxOS4yeiBNMTUsMjkuMmMtMi4zLDAtNC4yLTEuOS00LjItNC4yXG5cdFx0czEuOS00LjIsNC4yLTQuMnM0LjIs''@;'; put 'put ''MS45LDQuMiw0LjJTMTcuMywyOS4yLDE1LDI5LjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cmVjdCB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0zMyw5SDJ2MTMuMWMwLDAsMCwwLDAsMEMyLDI0LjMsMy43LDI2LDUuOSwyNkg3di0ySDUuOWMtMSwwLTEuOC0wLjgtMS45LTEuOVYxNWgyMnY3LjFjMCwxLTAuOCwxLjgtMS45LDEuOUgyM3YyaDEuMVxuXHRcdGMwLDAsMCwwLDAsMGMyLjEsMCwzLjgtMS43LDMuOC0zLjlWMTFo''@;'; put 'put ''NWMwLjYsMCwxLTAuNCwxLTFTMzMuNiw5LDMzLDl6IE0yNiwxM0g0di0yaDIyVjEzeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLDlIMnYxMy4xYzAsMCwwLDAsMCwwQzIsMjQuMywzLjcsMjYsNS45LDI2SDd2LTJINS45Yy0xLDAt''@;'; put 'put ''MS44LTAuOC0xLjktMS45VjE1aDIydjcuMWMwLDEtMC44LDEuOC0xLjksMS45SDIzdjJoMS4xXG5cdGMwLDAsMCwwLDAsMGMyLjEsMCwzLjgtMS43LDMuOC0zLjlWMTFoNWMwLjYsMCwxLTAuNCwxLTFTMzMuNiw5LDMzLDl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0xNSwxOS4yYy0zLjIsMC01LjgsMi42LTUuOCw1LjhzMi42LDUuOCw1LjgsNS44czUuOC0yLjYsNS44LTUuOGwwLDBDMjAuOCwyMS44LDE4LjIsMTkuMiwxNSwxOS4yeiBNMTYsMjZoLTJ2LTJoMlYyNnoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTIiIC8+JyksaC5DbHJTaGFwZU9uSG9saWRheT0oMCxzLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTguMDgsMi4zNGMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNEExNy45MSwxNy45MSwwLDAsMCwyMywyOS42Nmw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuMzgtLjMsMSwxLDAs''@;'; put 'put ''MCwwLC4xNi0uNTRWMjUuNjFhMTMsMTMsMCwwLDAsNC05LjI3QzM0LjA4LDguNjIsMjYuOSwyLjM0LDE4LjA4LDIuMzRaTTI4LjM3LDI0LjQ1YTEsMSwwLDAsMC0uMzIuNzN2NS4zNGwtNC4zOC0yLjc5YTEsMSwwLDAsMC0uODMtLjExLDE2LDE2LDAsMCwxLTQuNzYuNzJjLTcuNzIsMC0xNC01''@;'; put 'put ''LjM4LTE0LTEyczYuMjgtMTIsMTQtMTIsMTQsNS4zOCwxNCwxMkExMS4xLDExLjEsMCwwLDEsMjguMzcsMjQuNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuMSwxNS44MiwzMSwxNS42NywyOC41LDEzLjQ0YTMuMjUsMy4y''@;'; put 'put ''NSwwLDAsMC0yLjM5LS44NGwtNS4zOC4zNC0zLjU5LTNhLjgxLjgxLDAsMCwwLS41Mi0uMTlIMTMuNTZhLjc4Ljc4LDAsMCwwLS42OS40Ljc3Ljc3LDAsMCwwLDAsLjc5bDEuMzYsMi40NC00LjcxLjI5LDEuMzEsMS41MiwxNS4zOS0xYTEuNjUsMS42NSwwLDAsMSwxLjIyLjQzbDIuMzYsMi4x''@;'; put 'put ''M2EuMTEuMTEsMCwwLDEsMCwuMDdjMCwuMDYtLjA5LjA1LS4xLjA2SDIxLjgybC0uMzUuMzctNS4xOSw1LjUzSDE0LjY0bDIuNzMtNS45SDguNTRMNy4xMywxNC4xNiw2LjUxLDEzYS44LjgsMCwwLDAtMS0uMkEuODEuODEsMCwwLDAsNS4yLDEzLjlsMiwzLjk0YTEuMjEsMS4yMSwwLDAsMCwx''@;'; put 'put ''LjA4LjY1aDYuNTdsLTEuOTQsNC4xOEExLjIsMS4yLDAsMCwwLDEzLDIzLjgzYTEuMjIsMS4yMiwwLDAsMCwxLC41NmgyLjQzYTEuMTcsMS4xNywwLDAsMCwuODgtLjM5bDUuMTgtNS41MWg3LjE2YTEuNjUsMS42NSwwLDAsMCwxLjUyLS45MUExLjc0LDEuNzQsMCwwLDAsMzEuMSwxNS44MlpN''@;'; put 'put ''MTQuOTIsMTEuMzFoMS40MWwyLjA5LDEuNzdMMTYsMTMuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICBcbiAgPHBhdGggZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExNy45MSwxNy45MSwwLDAsMCw0Ljg4''@;'; put 'put ''LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuMzgtLjNBMSwxLDAsMCwwLDMwLDMyLjVWMjUuNzdhMTMsMTMsMCwwLDAsNC05LjI3QzM0LDguNzgsMjYuODIsMi41LDE4LDIuNVpNMjkuODQsMThIMjEuNTFhLjQyLjQyLDAsMCwwLS4zLjEzbC01LjMsNS42NGEuMzkuMzksMCwwLDEtLjI5LjEz''@;'; put 'put ''SDEzLjE5YS40MS40MSwwLDAsMS0uMzctLjU4bDIuNDctNS4zMkg3LjQ2YS40Mi40MiwwLDAsMS0uMzYtLjIybC0yLjctNUg2LjI0YS41My41MywwLDAsMSwuMzkuMThsMS41NiwxLjY5YS4zOC4zOCwwLDAsMCwuMzMuMTRsNi4xOC0uMzgtMi0zLjU1aDIuODlhLjQ3LjQ3LDAsMCwxLC4zMS4x''@;'; put 'put ''MUwxOS42MywxNGw2LjY5LS4zNWEyLjQ0LDIuNDQsMCwwLDEsMS44MS42M2wyLjQ3LDIuMjNBLjkyLjkyLDAsMCwxLDI5Ljg0LDE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAnKSxoLlRyYXZlbFNoYXBlcz17dHJ1Y2s6aC5DbHJTaGFwZVRydWNrLGFp''@;'; put 'put ''cnBsYW5lOmguQ2xyU2hhcGVBaXJwbGFuZSxjYXI6aC5DbHJTaGFwZUNhcixtYXA6aC5DbHJTaGFwZU1hcCxjb21wYXNzOmguQ2xyU2hhcGVDb21wYXNzLCJtYXAtbWFya2VyIjpoLkNsclNoYXBlTWFwTWFya2VyLGJpY3ljbGU6aC5DbHJTaGFwZUJpY3ljbGUsYm9hdDpoLkNsclNoYXBlQm9h''@;'; put 'put ''dCxjYW1wZXJ2YW46aC5DbHJTaGFwZUNhbXBlcnZhbixjYXJhdmFuOmguQ2xyU2hhcGVDYXJhdmFuLGZlcnJ5OmguQ2xyU2hhcGVGZXJyeSx0cmFpbGVyOmguQ2xyU2hhcGVUcmFpbGVyLCJvbi1ob2xpZGF5IjpoLkNsclNoYXBlT25Ib2xpZGF5fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaC5U''@;'; put 'put ''cmF2ZWxTaGFwZXMsInBsYW5lIiwoMCxjLmRlc2NyaXB0b3JDb25maWcpKGguVHJhdmVsU2hhcGVzLmFpcnBsYW5lKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGguVHJhdmVsU2hhcGVzLCJhdXRvIiwoMCxjLmRlc2NyaXB0b3JDb25maWcpKGguVHJhdmVsU2hhcGVzLmNhcikpLHR5cGVvZiB3''@;'; put 'put ''aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChoLlRyYXZlbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMgKioqIQogICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKGosaCx5KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGguZGVzY3JpcHRvckNvbmZpZz12b2lkIDAsaC5kZXNjcmlw''@;'; put 'put ''dG9yQ29uZmlnPWZ1bmN0aW9uIGMocyl7cmV0dXJue2VudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwLHZhbHVlOnN9fX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyAqKiohCiAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oaixoLHkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksaC5jbHJJY29uU1ZHPXZvaWQgMDtoLmNsckljb25TVkc9ZnVuY3Rpb24g''@;'; put 'put ''dihDKXt2YXIgdz0iIjtyZXR1cm4gQy5pbmRleE9mKCItLWJhZGdlZCIpPi0xJiYodys9ImNhbi1iYWRnZSAiKSxDLmluZGV4T2YoIi0tYWxlcnRlZCIpPi0xJiYodys9ImNhbi1hbGVydCAiKSxDLmluZGV4T2YoImNsci1pLXNvbGlkIik+LTEmJih3Kz0iaGFzLXNvbGlkICIpLCh3Pyc8c3Zn''@;'; put 'put ''IHZlcnNpb249IjEuMSIgY2xhc3M9IicrdysnIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlu''@;'; put 'put ''ayIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nOic8c3ZnIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0''@;'; put 'put ''dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JykrQysiPC9zdmc+In19fSl9LDI4MjY3KGZlLGosaCl7InVzZSBzdHJpY3QiO2gucihqKSxoLmQoaix7Y3JlYXRlQ2lwaGVyaXY6KCk9PnYuVHQsY3JlYXRlRGVjaXBoZXJpdjooKT0+di5f''@;'; put 'put ''NyxjcmVhdGVIYXNoOigpPT5jLmEsY3JlYXRlSG1hYzooKT0+QS5hLGdldEhhc2hlczooKT0+TCxyYW5kb21CeXRlczooKT0+dy5hfSk7dmFyIHk9aCg2NzIxMSksYz1oLm4oeSkscz1oKDU2NDMyKSxBPWgubihzKSx2PWgoODg4NjIpLEM9aCgzMzQyKSx3PWgubihDKTtjb25zdCBTPVsibWQ0''@;'; put 'put ''IiwibWQ1IiwicmlwZW1kMTYwIiwic2hhMSIsInNoYTIyNCIsInNoYTI1NiIsInNoYTM4NCIsInNoYTUxMiJdO2Z1bmN0aW9uIEwoKXtyZXR1cm5bLi4uU119fSw3NTAyOChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT17fTtoLnIoeSksaC5kKHkse2FycmF5QXZnOigpPT5CTXQsYXJyYXlF''@;'; put 'put ''YWNoOigpPT5YbixhcnJheUZpbHRlcjooKT0+SHYsYXJyYXlGbGF0dGVuOigpPT5TeGUsYXJyYXlNYXA6KCk9Pl9jLGFycmF5TWF4OigpPT5ITXQsYXJyYXlNaW46KCk9PlZNdCxhcnJheVJlZHVjZTooKT0+bTEsYXJyYXlTdW06KCk9PkN4ZSxhcnJheVRvU3RyaW5nOigpPT5NeGUsYXJyYXlV''@;'; put 'put ''bmlxdWU6KCk9PmdzZSxleHRlbmRBcnJheTooKT0+cHNlLGdldERpZmZlcmVuY2VPZkFycmF5czooKT0+ckwsZ2V0SW50ZXJzZWN0aW9uT2ZBcnJheXM6KCk9PkV4ZSxnZXRVbmlvbk9mQXJyYXlzOigpPT5qTXQscGl2b3Q6KCk9Pm5MLHN0cmluZ1RvQXJyYXk6KCk9Pm1zZSx0bzJkQXJyYXk6''@;'; put 'put ''KCk9Pnd4ZX0pO3ZhciBjPXt9O2gucihjKSxoLmQoYyx7X2luamVjdFByb2R1Y3RJbmZvOigpPT5JeGUsaXNEZWZpbmVkOigpPT5abyxpc0VtcHR5OigpPT5BbCxpc1JlZ0V4cDooKT0+VHhlLGlzVW5kZWZpbmVkOigpPT5YdSxzdHJpbmdpZnk6KCk9PlBsfSk7dmFyIHM9e307aC5yKHMpLGgu''@;'; put 'put ''ZChzLHt0aHJvd1dpdGhDYXVzZTooKT0+SnJ9KTt2YXIgQT17fTtoLnIoQSksaC5kKEEse2Fzc2lnbk9iamVjdERlZmF1bHRzOigpPT5jTCxjbG9uZTooKT0+cTUsY3JlYXRlT2JqZWN0UHJvcExpc3RlbmVyOigpPT5WZixkZWVwQ2xvbmU6KCk9PkFkLGRlZXBFeHRlbmQ6KCk9PkxXLGRlZXBN''@;'; put 'put ''ZXJnZTooKT0+TlcsZGVlcE9iamVjdFNpemU6KCk9Pk9XLGRlZmluZUdldHRlcjooKT0+SzUsZHVja1NjaGVtYTooKT0+T00sZXh0ZW5kOigpPT5ZZCxnZXRQcm9wZXJ0eTooKT0+c0wsaGFzT3duUHJvcGVydHk6KCk9PlJkLGluaGVyaXQ6KCk9PkR4ZSxpc0tleVZhbHVlT2JqZWN0OigpPT5i''@;'; put 'put ''MCxpc09iamVjdDooKT0+Q2EsaXNPYmplY3RFcXVhbDooKT0+ZzcsaXNQbGFpbk9iamVjdDooKT0+a2QsbWl4aW46KCk9PllsLG9iamVjdEVhY2g6KCk9PmFjLHNldFByb3BlcnR5OigpPT5sTH0pO3ZhciB2PXt9O2gucih2KSxoLmQodix7Y2FuY2VsQW5pbWF0aW9uRnJhbWU6KCk9PmRMLGdl''@;'; put 'put ''dENvbXBhcmlzb25GdW5jdGlvbjooKT0+T3hlLGlzQ1NSOigpPT5MeGUsaXNUb3VjaFN1cHBvcnRlZDooKT0+X3NlLHJlcXVlc3RBbmltYXRpb25GcmFtZTooKT0+dUx9KTt2YXIgQz17fTtoLnIoQyksaC5kKEMse2lzQ2hyb21lOigpPT5QeGUsaXNDaHJvbWVXZWJLaXQ6KCk9Pkh4ZSxpc0Vk''@;'; put 'put ''Z2U6KCk9Pmp4ZSxpc0VkZ2VXZWJLaXQ6KCk9PiRNdCxpc0ZpcmVmb3g6KCk9PkZXLGlzRmlyZWZveFdlYktpdDooKT0+VnhlLGlzSU9TOigpPT55c2UsaXNJcGFkT1M6KCk9PlBXLGlzTGludXhPUzooKT0+cU10LGlzTWFjT1M6KCk9Pmx3LGlzTW9iaWxlQnJvd3NlcjooKT0+UTUsaXNTYWZh''@;'; put 'put ''cmk6KCk9PmhMLGlzU2FmYXJpQmVmb3JlMjYxOigpPT5CeGUsaXNXaW5kb3dzT1M6KCk9PkhXLHNldEJyb3dzZXJNZXRhOigpPT5OeGUsc2V0UGxhdGZvcm1NZXRhOigpPT5GeGV9KTt2YXIgdz17fTtoLnIodyksaC5kKHcse2VxdWFsc0lnbm9yZUNhc2U6KCk9PktNdCxpc0pTT046KCk9PmJz''@;'; put 'put ''ZSxpc1BlcmNlbnRWYWx1ZTooKT0+d3NlLGxvY2FsZUxvd2VyQ2FzZTooKT0+djEscmFuZG9tU3RyaW5nOigpPT5WVyxzYW5pdGl6ZTooKT0+WE10LHN0cmlwVGFnczooKT0+c20sc3Vic3RpdHV0ZTooKT0+ZkwsdG9IeXBoZW46KCk9PlBNLHRvVXBwZXJDYXNlRmlyc3Q6KCk9PkswfSk7dmFy''@;'; put 'put ''IFM9e307aC5yKFMpLGguZChTLHtIVE1MX0NIQVJBQ1RFUlM6KCk9Plh4ZSxTQU5JVElaRVJfV0FSTl9LRVk6KCk9PkVzZSxhZGRDbGFzczooKT0+WXIsYWRkRXZlbnQ6KCk9PmFUdCxjbGVhclRleHRTZWxlY3Rpb246KCk9PkFzZSxjbG9zZXN0OigpPT5WdixjbG9zZXN0RG93bjooKT0+Z0ws''@;'; put 'put ''ZW1wdHk6KCk9PkM0LGV2ZW50VGFyZ2V0RWw6KCk9PkFhLGZhc3RJbm5lckhUTUw6KCk9Pl83LGZhc3RJbm5lclRleHQ6KCk9Pnk3LGZpbmRGaXJzdFBhcmVudFdpdGhDbGFzczooKT0+R3hlLGdldENhcmV0UG9zaXRpb246KCk9PnhzZSxnZXRDaGlsZEVsOigpPT5mVHQsZ2V0Q3NzVHJhbnNm''@;'; put 'put ''b3JtOigpPT51VHQsZ2V0RnJhY3Rpb25hbFNjYWxpbmdDb21wZW5zYXRpb246KCk9PmlBZSxnZXRGcmFtZUVsZW1lbnQ6KCk9Plp4ZSxnZXRNYXhpbXVtU2Nyb2xsTGVmdDooKT0+bkFlLGdldE1heGltdW1TY3JvbGxUb3A6KCk9PnRBZSxnZXRQYXJlbnQ6KCk9Pll4ZSxnZXRQYXJlbnRXaW5k''@;'; put 'put ''b3c6KCk9PnY3LGdldFNjcm9sbExlZnQ6KCk9Pk1zZSxnZXRTY3JvbGxUb3A6KCk9PmpXLGdldFNjcm9sbGFibGVFbGVtZW50OigpPT5tTCxnZXRTY3JvbGxiYXJXaWR0aDooKT0+R2QsZ2V0U2VsZWN0aW9uRW5kUG9zaXRpb246KCk9PnJBZSxnZXRTZWxlY3Rpb25UZXh0OigpPT5sVHQsZ2V0''@;'; put 'put ''U3R5bGU6KCk9PnV3LGdldFRyaW1taW5nQ29udGFpbmVyOigpPT5ITSxnZXRXaW5kb3dTY3JvbGxMZWZ0OigpPT5lQWUsZ2V0V2luZG93U2Nyb2xsVG9wOigpPT5KeGUsaGFzQWNjZXNzVG9QYXJlbnRXaW5kb3c6KCk9PnJUdCxoYXNDbGFzczooKT0+TGEsaGFzSG9yaXpvbnRhbFNjcm9sbGJh''@;'; put 'put ''cjooKT0+SXNlLGhhc1ZlcnRpY2FsU2Nyb2xsYmFyOigpPT5Sc2UsaGFzWmVyb0hlaWdodDooKT0+UXhlLGluZGV4OigpPT4keGUsaW5uZXJIZWlnaHQ6KCk9PmR3LGlubmVyV2lkdGg6KCk9PlRzZSxpc0JvdHRvbU1vc3RDb2x1bW5IZWFkZXI6KCk9PmN3LGlzQ2hpbGRPZjooKT0+QnYsaXNE''@;'; put 'put ''ZXRhY2hlZDooKT0+RHNlLGlzSFRNTEVsZW1lbnQ6KCk9PmhzLGlzSFRNTElucHV0RWxlbWVudDooKT0+aFR0LGlzSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6KCk9Pk5zZSxpc0lucHV0OigpPT55TCxpc0ludGVybmFsRWxlbWVudDooKT0+cEwsaXNPdXRzaWRlSW5wdXQ6KCk9PlZNLGlzU2hhZG93''@;'; put 'put ''Um9vdDooKT0+YkwsaXNWaXNpYmxlOigpPT5VdixtYWtlRWxlbWVudENvbnRlbnRFZGl0YWJsZUFuZFNlbGVjdEl0c0NvbnRlbnQ6KCk9PkxzZSxtYXRjaGVzQ1NTUnVsZXM6KCk9Pm9UdCxvYnNlcnZlVmlzaWJpbGl0eUNoYW5nZU9uY2U6KCk9Pm9BZSxvZmZzZXQ6KCk9PlgwLG91dGVySGVp''@;'; put 'put ''Z2h0OigpPT5IaCxvdXRlcldpZHRoOigpPT5aZCxvdmVybGF5Q29udGFpbnNFbGVtZW50OigpPT5qdixyZW1vdmVBdHRyaWJ1dGU6KCk9Pnc0LHJlbW92ZUNsYXNzOigpPT5rbyxyZW1vdmVDb250ZW50RWRpdGFibGVGcm9tRWxlbWVudEFuZERlc2VsZWN0OigpPT5Pc2UscmVtb3ZlRXZlbnQ6''@;'; put 'put ''KCk9PnNUdCxyZW1vdmVUZXh0Tm9kZXM6KCk9PlNzZSxyZXNldENzc1RyYW5zZm9ybTooKT0+X0wscnVuV2l0aFNlbGVjdGVkQ29udGVuZEVkaXRhYmxlRWxlbWVudDooKT0+YUFlLHNlbGVjdEVsZW1lbnRJZkFsbG93ZWQ6KCk9PmRUdCxzZXRBdHRyaWJ1dGU6KCk9PktvLHNldENhcmV0UG9z''@;'; put 'put ''aXRpb246KCk9PnZMLHNldE92ZXJsYXlQb3NpdGlvbjooKT0+VVd9KTt2YXIgTD17fTtoLnIoTCksaC5kKEwse2N1cnJ5OigpPT5sQWUsY3VycnlSaWdodDooKT0+dlR0LGRlYm91bmNlOigpPT5CTSxmYXN0Q2FsbDooKT0+RnNlLGlzRnVuY3Rpb246KCk9Pl9hLHBhcnRpYWw6KCk9Pm1UdCxw''@;'; put 'put ''aXBlOigpPT5nVHQsdGhyb3R0bGU6KCk9PnNBZSx0aHJvdHRsZUFmdGVySGl0czooKT0+cFR0fSk7dmFyIFI9e307aC5yKFIpLGguZChSLHtLRVlfQ09ERVM6KCk9PkVhLGlzQ3RybEtleTooKT0+eVR0LGlzQ3RybE1ldGFLZXk6KCk9PnVBZSxpc0Z1bmN0aW9uS2V5OigpPT5jQWUsaXNLZXk6''@;'; put 'put ''KCk9Pmh3LGlzUHJpbnRhYmxlQ2hhcjooKT0+UHNlfSk7dmFyIHg9e307aC5yKHgpLGguZCh4LHtpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDooKT0+SjUsaXNMZWZ0Q2xpY2s6KCk9PnpXLGlzTWlkZGxlQ2xpY2s6KCk9PmRBZSxpc1JpZ2h0Q2xpY2s6KCk9Pnp2LGlzVG91Y2hFdmVu''@;'; put 'put ''dDooKT0+aEFlLG9mZnNldFJlbGF0aXZlVG86KCk9PmZBZSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246KCk9PkYzfSk7dmFyIFU9e307aC5yKFUpLGguZChVLHtfZGF0YVRvSFRNTDooKT0+S3NlLGh0bWxUb0dyaWRTZXR0aW5nczooKT0+WHNlLGluc3RhbmNlVG9IVE1MOigpPT5xc2UscmVw''@;'; put 'put ''bGFjZVRkQ2VsbHNXaXRoVGV4dENvbnRlbnQ6KCk9PkxBZX0pO3ZhciBIPXt9O2gucihIKSxoLmQoSCx7Y2xhbXA6KCk9PlZzLGdldFBhcnNlZE51bWJlcjooKT0+TkFlLGlzQ29tbWFUaG91c2FuZHNHcm91cGVkSW50ZWdlcjooKT0+UXNlLGlzRG90VGhvdXNhbmRzR3JvdXBlZEZsb2F0Oigp''@;'; put 'put ''PT5lbGUsaXNEb3RUaG91c2FuZHNHcm91cGVkSW50ZWdlcjooKT0+SnNlLGlzTnVtZXJpYzooKT0+dzAsaXNOdW1lcmljTGlrZTooKT0+T0FlLGlzVW5zaWduZWROdW1iZXI6KCk9PnB3LHJhbmdlRWFjaDooKT0+VmEscmFuZ2VFYWNoUmV2ZXJzZTooKT0+dGxlLHZhbHVlQWNjb3JkaW5nUGVy''@;'; put 'put ''Y2VudDooKT0+bmxlfSk7dmFyIFY9e307aC5yKFYpLGguZChWLHtjbG9uZVJvdzooKT0+dFJlLGNvdW50Rmlyc3RSb3dLZXlzOigpPT5qbGUsY3JlYXRlRW1wdHlTcHJlYWRzaGVldERhdGE6KCk9PmZrdCxjcmVhdGVTcHJlYWRzaGVldERhdGE6KCk9PmRrdCxjcmVhdGVTcHJlYWRzaGVldE9i''@;'; put 'put ''amVjdERhdGE6KCk9PmhrdCxkYXRhUm93VG9DaGFuZ2VzQXJyYXk6KCk9PkJsZSxoYXNDaGFuZ2VGb3JDZWxsOigpPT5Ka2UsaXNBcnJheU9mQXJyYXlzOigpPT5VbGUsaXNBcnJheU9mT2JqZWN0czooKT0+ZVJlLHNwcmVhZHNoZWV0Q29sdW1uSW5kZXg6KCk9PnVrdCxzcHJlYWRzaGVldENv''@;'; put 'put ''bHVtbkxhYmVsOigpPT5DWX0pO3ZhciBOPXt9O2gucihOKSxoLmQoTix7Q0FOQ0VMOigpPT5RbGUsQ0hFQ0tCT1hfQ0hFQ0tFRDooKT0+U3VlLENIRUNLQk9YX1JFTkRFUkVSX05BTUVTUEFDRTooKT0+Q3VlLENIRUNLQk9YX1VOQ0hFQ0tFRDooKT0+RXVlLENPTU1PTl9OQU1FU1BBQ0U6KCk9''@;'; put 'put ''PlhsZSxDT05URVhUTUVOVV9JVEVNU19BRERfQ09NTUVOVDooKT0+d2NlLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVDooKT0+TWNlLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9CT1RUT006KCk9PkRjZSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfQ0VOVEVSOigpPT54Y2Us''@;'; put 'put ''Q09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0pVU1RJRlk6KCk9PmtjZSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfTEVGVDooKT0+VGNlLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9NSURETEU6KCk9PkljZSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfUklHSFQ6KCk9''@;'; put 'put ''PkFjZSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfVE9QOigpPT5SY2UsQ09OVEVYVE1FTlVfSVRFTVNfQk9SREVSUzooKT0+TGNlLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfQk9UVE9NOigpPT5GY2UsQ09OVEVYVE1FTlVfSVRFTVNfQk9SREVSU19MRUZUOigpPT5QY2UsQ09OVEVY''@;'; put 'put ''VE1FTlVfSVRFTVNfQk9SREVSU19SSUdIVDooKT0+TmNlLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfVE9QOigpPT5PY2UsQ09OVEVYVE1FTlVfSVRFTVNfQ0xFQVJfQ09MVU1OOigpPT5sY2UsQ09OVEVYVE1FTlVfSVRFTVNfQ09QWTooKT0+Y2NlLENPTlRFWFRNRU5VX0lURU1TX0NPUFlf''@;'; put 'put ''Q09MVU1OX0hFQURFUlNfT05MWTooKT0+aGNlLENPTlRFWFRNRU5VX0lURU1TX0NPUFlfV0lUSF9DT0xVTU5fR1JPVVBfSEVBREVSUzooKT0+ZGNlLENPTlRFWFRNRU5VX0lURU1TX0NPUFlfV0lUSF9DT0xVTU5fSEVBREVSUzooKT0+dWNlLENPTlRFWFRNRU5VX0lURU1TX0NVVDooKT0+ZmNl''@;'; put 'put ''LENPTlRFWFRNRU5VX0lURU1TX0VESVRfQ09NTUVOVDooKT0+Q2NlLENPTlRFWFRNRU5VX0lURU1TX0VYUE9SVDooKT0+cGNlLENPTlRFWFRNRU5VX0lURU1TX0VYUE9SVF9GSUxFX0NTVjooKT0+Z2NlLENPTlRFWFRNRU5VX0lURU1TX0VYUE9SVF9GSUxFX1hMU1g6KCk9Pm1jZSxDT05URVhU''@;'; put 'put ''TUVOVV9JVEVNU19GUkVFWkVfQ09MVU1OOigpPT52Y2UsQ09OVEVYVE1FTlVfSVRFTVNfSElERV9DT0xVTU46KCk9PmpjZSxDT05URVhUTUVOVV9JVEVNU19ISURFX1JPVzooKT0+emNlLENPTlRFWFRNRU5VX0lURU1TX0lOU0VSVF9MRUZUOigpPT5uY2UsQ09OVEVYVE1FTlVfSVRFTVNfSU5T''@;'; put 'put ''RVJUX1JJR0hUOigpPT5yY2UsQ09OVEVYVE1FTlVfSVRFTVNfTUVSR0VfQ0VMTFM6KCk9PnljZSxDT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19ERVRBQ0hfQ0hJTEQ6KCk9PkJjZSxDT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19JTlNFUlRfQ0hJTEQ6KCk9PlZjZSxDT05URVhU''@;'; put 'put ''TUVOVV9JVEVNU19OT19JVEVNUzooKT0+SmxlLENPTlRFWFRNRU5VX0lURU1TX1JFQURfT05MWTooKT0+UlksQ09OVEVYVE1FTlVfSVRFTVNfUkVBRF9PTkxZX0NPTU1FTlQ6KCk9PkVjZSxDT05URVhUTUVOVV9JVEVNU19SRURPOigpPT5zY2UsQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX0JP''@;'; put 'put ''UkRFUlM6KCk9PkhjZSxDT05URVhUTUVOVV9JVEVNU19SRU1PVkVfQ09MVU1OOigpPT5vY2UsQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX0NPTU1FTlQ6KCk9PlNjZSxDT05URVhUTUVOVV9JVEVNU19SRU1PVkVfUk9XOigpPT5pY2UsQ09OVEVYVE1FTlVfSVRFTVNfUk9XX0FCT1ZFOigpPT5l''@;'; put 'put ''Y2UsQ09OVEVYVE1FTlVfSVRFTVNfUk9XX0JFTE9XOigpPT50Y2UsQ09OVEVYVE1FTlVfSVRFTVNfU0hPV19DT0xVTU46KCk9PlVjZSxDT05URVhUTUVOVV9JVEVNU19TSE9XX1JPVzooKT0+V2NlLENPTlRFWFRNRU5VX0lURU1TX1VORE86KCk9PmFjZSxDT05URVhUTUVOVV9JVEVNU19VTkZS''@;'; put 'put ''RUVaRV9DT0xVTU46KCk9Pl9jZSxDT05URVhUTUVOVV9JVEVNU19VTk1FUkdFX0NFTExTOigpPT5iY2UsQ09OVEVYVF9NRU5VX0lURU1TX05BTUVTUEFDRTooKT0+Q1JlLERBVEFfUFJPVklERVJfQlVUVE9OU19SRUZFVENIOigpPT5CdWUsREFUQV9QUk9WSURFUl9FUlJPUlNfQ1JFQVRFOigp''@;'; put 'put ''PT5GdWUsREFUQV9QUk9WSURFUl9FUlJPUlNfRkVUQ0g6KCk9Pk51ZSxEQVRBX1BST1ZJREVSX0VSUk9SU19SRU1PVkU6KCk9Pkh1ZSxEQVRBX1BST1ZJREVSX0VSUk9SU19SRVFVRVNUX0ZBSUxFRDooKT0+VnVlLERBVEFfUFJPVklERVJfRVJST1JTX1VQREFURTooKT0+UHVlLERBVEFfUFJP''@;'; put 'put ''VklERVJfTkFNRVNQQUNFOigpPT5UdyxFTVBUWV9EQVRBX1NUQVRFX0JVVFRPTlNfRklMVEVSU19SRVNFVDooKT0+RHVlLEVNUFRZX0RBVEFfU1RBVEVfREVTQ1JJUFRJT046KCk9Pmt1ZSxFTVBUWV9EQVRBX1NUQVRFX0RFU0NSSVBUSU9OX0ZJTFRFUlM6KCk9Pkl1ZSxFTVBUWV9EQVRBX1NU''@;'; put 'put ''QVRFX0RFU0NSSVBUSU9OX0xPQURJTkc6KCk9Pk91ZSxFTVBUWV9EQVRBX1NUQVRFX05BTUVTUEFDRTooKT0+cl8sRU1QVFlfREFUQV9TVEFURV9USVRMRTooKT0+QXVlLEVNUFRZX0RBVEFfU1RBVEVfVElUTEVfRklMVEVSUzooKT0+UnVlLEVNUFRZX0RBVEFfU1RBVEVfVElUTEVfTE9BRElO''@;'; put 'put ''RzooKT0+THVlLEVYUE9SVF9GSUxFX0RJQUxPR19USVRMRTooKT0+eHVlLEVYUE9SVF9GSUxFX05BTUVTUEFDRTooKT0+TVJlLEZJTFRFUlNfQlVUVE9OU19DQU5DRUw6KCk9PnV1ZSxGSUxURVJTX0JVVFRPTlNfQ0xFQVI6KCk9Pmx1ZSxGSUxURVJTX0JVVFRPTlNfT0s6KCk9PmN1ZSxGSUxU''@;'; put 'put ''RVJTX0JVVFRPTlNfUExBQ0VIT0xERVJfU0VBUkNIOigpPT5kdWUsRklMVEVSU19CVVRUT05TX1BMQUNFSE9MREVSX1NFQ09ORF9WQUxVRTooKT0+ZnVlLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9WQUxVRTooKT0+aHVlLEZJTFRFUlNfQlVUVE9OU19TRUxFQ1RfQUxMOigpPT5zdWUs''@;'; put 'put ''RklMVEVSU19DT05ESVRJT05TX0FGVEVSOigpPT5aTCxGSUxURVJTX0NPTkRJVElPTlNfQUZURVJfT1JfRVFVQUw6KCk9PkdMLEZJTFRFUlNfQ09ORElUSU9OU19CRUZPUkU6KCk9PiRMLEZJTFRFUlNfQ09ORElUSU9OU19CRUZPUkVfT1JfRVFVQUw6KCk9PnFMLEZJTFRFUlNfQ09ORElUSU9O''@;'; put 'put ''U19CRUdJTlNfV0lUSDooKT0+cWNlLEZJTFRFUlNfQ09ORElUSU9OU19CRVRXRUVOOigpPT5ZTCxGSUxURVJTX0NPTkRJVElPTlNfQllfVkFMVUU6KCk9Pk5rdCxGSUxURVJTX0NPTkRJVElPTlNfQ09OVEFJTlM6KCk9PlhjZSxGSUxURVJTX0NPTkRJVElPTlNfRU1QVFk6KCk9PlljZSxGSUxU''@;'; put 'put ''RVJTX0NPTkRJVElPTlNfRU5EU19XSVRIOigpPT5LY2UsRklMVEVSU19DT05ESVRJT05TX0VRVUFMOigpPT5HY2UsRklMVEVSU19DT05ESVRJT05TX0dSRUFURVJfVEhBTjooKT0+SmNlLEZJTFRFUlNfQ09ORElUSU9OU19HUkVBVEVSX1RIQU5fT1JfRVFVQUw6KCk9PmV1ZSxGSUxURVJTX0NP''@;'; put 'put ''TkRJVElPTlNfTEVTU19USEFOOigpPT50dWUsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTl9PUl9FUVVBTDooKT0+bnVlLEZJTFRFUlNfQ09ORElUSU9OU19OQU1FU1BBQ0U6KCk9PmZkLEZJTFRFUlNfQ09ORElUSU9OU19OT05FOigpPT5JWSxGSUxURVJTX0NPTkRJVElPTlNfTk9UX0JF''@;'; put 'put ''VFdFRU46KCk9PnJ1ZSxGSUxURVJTX0NPTkRJVElPTlNfTk9UX0NPTlRBSU46KCk9PlFjZSxGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VNUFRZOigpPT5aY2UsRklMVEVSU19DT05ESVRJT05TX05PVF9FUVVBTDooKT0+JGNlLEZJTFRFUlNfQ09ORElUSU9OU19UT0RBWTooKT0+RFksRklMVEVS''@;'; put 'put ''U19DT05ESVRJT05TX1RPTU9SUk9XOigpPT5MWSxGSUxURVJTX0NPTkRJVElPTlNfWUVTVEVSREFZOigpPT5PWSxGSUxURVJTX0RJVlNfRklMVEVSX0JZX0NPTkRJVElPTjooKT0+aXVlLEZJTFRFUlNfRElWU19GSUxURVJfQllfVkFMVUU6KCk9Pm91ZSxGSUxURVJTX0xBQkVMU19DT05KVU5D''@;'; put 'put ''VElPTjooKT0+YXVlLEZJTFRFUlNfTEFCRUxTX0RJU0pVTkNUSU9OOigpPT5OWSxGSUxURVJTX05BTUVTUEFDRTooKT0+amYsRklMVEVSU19WQUxVRVNfQkxBTktfQ0VMTFM6KCk9PkZZLExPQURJTkdfTkFNRVNQQUNFOigpPT5TUmUsTE9BRElOR19USVRMRTooKT0+TXVlLE5PVElGSUNBVElP''@;'; put 'put ''Tl9CVVRUT05TX0NMT1NFOigpPT5UdWUsTk9USUZJQ0FUSU9OX05BTUVTUEFDRTooKT0+RVJlLE9LOigpPT5rWSxQQUdJTkFUSU9OX0NPVU5URVJfU0VDVElPTjooKT0+bXVlLFBBR0lOQVRJT05fRklSU1RfUEFHRTooKT0+X3VlLFBBR0lOQVRJT05fTEFTVF9QQUdFOigpPT53dWUsUEFHSU5B''@;'; put 'put ''VElPTl9OQU1FU1BBQ0U6KCk9PnM2LFBBR0lOQVRJT05fTkFWX1NFQ1RJT046KCk9PnZ1ZSxQQUdJTkFUSU9OX05FWFRfUEFHRTooKT0+YnVlLFBBR0lOQVRJT05fUEFHRV9TSVpFX0FVVE86KCk9Pmd1ZSxQQUdJTkFUSU9OX1BBR0VfU0laRV9TRUNUSU9OOigpPT5QWSxQQUdJTkFUSU9OX1BS''@;'; put 'put ''RVZfUEFHRTooKT0+eXVlLFBBR0lOQVRJT05fU0VDVElPTjooKT0+cHVlfSk7dmFyIHo9e307aC5yKHopLGguZCh6LHtJU09fREFURV9SRUdFWDooKT0+VmRlLFRJTUVfUkVHRVg6KCk9PkJkZSxnZXROb3JtYWxpemVkRGF0ZTooKT0+Yk90LGdldFJlbGF0aXZlTG9jYWxEYXRlOigpPT5VZGUs''@;'; put 'put ''Z2V0VG9kYXlMb2NhbERhdGU6KCk9PmpkZSxpc1NhbWVMb2NhbERheTooKT0+dlosaXNWYWxpZElTT0RhdGU6KCk9PnhPLGlzVmFsaWRUaW1lOigpPT5tWixwYXJzZVRvTG9jYWxEYXRlOigpPT5zYyxwYXJzZVRvTG9jYWxUaW1lOigpPT56Zn0pO3ZhciBZPXt9O2xldCBGO2Z1bmN0aW9uIFco''@;'; put 'put ''KXtyZXR1cm4gRn1mdW5jdGlvbiBxKG4pe2NvbnN0IGU9RjtyZXR1cm4gRj1uLGV9aC5yKFkpLGguZChZLHtBYnNQbHVnaW46KCk9PlFXZSxBZGRyZXNzUGx1Z2luOigpPT5LV2UsQXJyYXlQbHVnaW46KCk9PlhXZSxCaXRTaGlmdFBsdWdpbjooKT0+dFllLEJpdHdpc2VMb2dpY09wZXJhdGlv''@;'; put 'put ''bnNQbHVnaW46KCk9Pm9ZZSxCb29sZWFuUGx1Z2luOigpPT5hWWUsQ2hhclBsdWdpbjooKT0+c1llLENvZGVQbHVnaW46KCk9PmxZZSxDb21wbGV4UGx1Z2luOigpPT5nWmUsQ29uZGl0aW9uYWxBZ2dyZWdhdGlvblBsdWdpbjooKT0+WlllLENvdW50QmxhbmtQbHVnaW46KCk9PmNZZSxDb3Vu''@;'; put 'put ''dFVuaXF1ZVBsdWdpbjooKT0+dVllLERhdGVUaW1lUGx1Z2luOigpPT5kWWUsRGVncmVlc1BsdWdpbjooKT0+Z1llLERlbHRhUGx1Z2luOigpPT5tWWUsRXhwUGx1Z2luOigpPT52WWUsRmluYW5jaWFsUGx1Z2luOigpPT5fWWUsRm9ybXVsYVRleHRQbHVnaW46KCk9PmJZZSxIeXBlcmxpbmtQ''@;'; put 'put ''bHVnaW46KCk9PndZZSxJbmZvcm1hdGlvblBsdWdpbjooKT0+Q1llLElzRXZlblBsdWdpbjooKT0+U1llLElzT2RkUGx1Z2luOigpPT5FWWUsTG9nYXJpdGhtUGx1Z2luOigpPT5NWWUsTG9va3VwUGx1Z2luOigpPT5LWWUsTWF0aENvbnN0YW50c1BsdWdpbjooKT0+VFllLE1hdGhQbHVnaW46''@;'; put 'put ''KCk9PmhaZSxNYXRyaXhQbHVnaW46KCk9PkFZZSxNZWRpYW5QbHVnaW46KCk9PmtZZSxNb2R1bG9QbHVnaW46KCk9PlJZZSxOdW1lcmljQWdncmVnYXRpb25QbHVnaW46KCk9PlNtZSxQb3dlclBsdWdpbjooKT0+SVllLFJhZGlhbnNQbHVnaW46KCk9PkRZZSxSYWRpeENvbnZlcnNpb25QbHVn''@;'; put 'put ''aW46KCk9PkZZZSxSYW5kb21QbHVnaW46KCk9PlZZZSxSb21hblBsdWdpbjooKT0+WFllLFJvdW5kaW5nUGx1Z2luOigpPT5FbWUsU2ltcGxlQXJpdGhtZXJ0aWNQbHVnaW46KCk9PlFZZSxTcXJ0UGx1Z2luOigpPT5VWWUsU3RhdGlzdGljYWxBZ2dyZWdhdGlvblBsdWdpbjooKT0+UG1lLFN0''@;'; put 'put ''YXRpc3RpY2FsUGx1Z2luOigpPT5GbWUsU3VtcHJvZFBsdWdpbjooKT0+R1llLFRleHRQbHVnaW46KCk9PiRZZSxUcmlnb25vbWV0cnlQbHVnaW46KCk9PnFZZX0pO2NvbnN0IG1lPVN5bWJvbCgiTm90Rm91bmQiKTtmdW5jdGlvbiBJZShuKXtyZXR1cm4gbj09PW1lfHwiXHUwMjc1Tm90Rm91''@;'; put 'put ''bmQiPT09bj8ubmFtZX1FcnJvcjtsZXQga2U9bnVsbCxxZT0hMSxYPTE7Y29uc3QgYj1TeW1ib2woIlNJR05BTCIpO2Z1bmN0aW9uIGsobil7Y29uc3QgZT1rZTtyZXR1cm4ga2U9bixlfWNvbnN0IEc9e3ZlcnNpb246MCxsYXN0Q2xlYW5FcG9jaDowLGRpcnR5OiExLHByb2R1Y2Vyczp2b2lk''@;'; put 'put ''IDAscHJvZHVjZXJzVGFpbDp2b2lkIDAsY29uc3VtZXJzOnZvaWQgMCxjb25zdW1lcnNUYWlsOnZvaWQgMCxyZWNvbXB1dGluZzohMSxjb25zdW1lckFsbG93U2lnbmFsV3JpdGVzOiExLGNvbnN1bWVySXNBbHdheXNMaXZlOiExLGtpbmQ6InVua25vd24iLHByb2R1Y2VyTXVzdFJlY29tcHV0''@;'; put 'put ''ZTooKT0+ITEscHJvZHVjZXJSZWNvbXB1dGVWYWx1ZTooKT0+e30sY29uc3VtZXJNYXJrZWREaXJ0eTooKT0+e30sY29uc3VtZXJPblNpZ25hbFJlYWQ6KCk9Pnt9fTtmdW5jdGlvbiBEKG4pe2lmKHFlKXRocm93IG5ldyBFcnJvcigiIik7aWYobnVsbD09PWtlKXJldHVybjtrZS5jb25zdW1l''@;'; put 'put ''ck9uU2lnbmFsUmVhZChuKTtjb25zdCBlPWtlLnByb2R1Y2Vyc1RhaWw7aWYodm9pZCAwIT09ZSYmZS5wcm9kdWNlcj09PW4pcmV0dXJuO2xldCB0O2NvbnN0IHI9a2UucmVjb21wdXRpbmc7aWYociYmKHQ9dm9pZCAwIT09ZT9lLm5leHRQcm9kdWNlcjprZS5wcm9kdWNlcnMsdm9pZCAwIT09''@;'; put 'put ''dCYmdC5wcm9kdWNlcj09PW4pKXJldHVybiBrZS5wcm9kdWNlcnNUYWlsPXQsdm9pZCh0Lmxhc3RSZWFkVmVyc2lvbj1uLnZlcnNpb24pO2NvbnN0IGk9bi5jb25zdW1lcnNUYWlsO2lmKHZvaWQgMCE9PWkmJmkuY29uc3VtZXI9PT1rZSYmKCFyfHxmdW5jdGlvbiBjZShuLGUpe2NvbnN0IHQ9''@;'; put 'put ''ZS5wcm9kdWNlcnNUYWlsO2lmKHZvaWQgMCE9PXQpe2xldCByPWUucHJvZHVjZXJzO2Rve2lmKHI9PT1uKXJldHVybiEwO2lmKHI9PT10KWJyZWFrO3I9ci5uZXh0UHJvZHVjZXJ9d2hpbGUodm9pZCAwIT09cil9cmV0dXJuITF9KGksa2UpKSlyZXR1cm47Y29uc3Qgbz1EZShrZSksYT17cHJv''@;'; put 'put ''ZHVjZXI6bixjb25zdW1lcjprZSxuZXh0UHJvZHVjZXI6dCxwcmV2Q29uc3VtZXI6aSxsYXN0UmVhZFZlcnNpb246bi52ZXJzaW9uLG5leHRDb25zdW1lcjp2b2lkIDB9O2tlLnByb2R1Y2Vyc1RhaWw9YSx2b2lkIDAhPT1lP2UubmV4dFByb2R1Y2VyPWE6a2UucHJvZHVjZXJzPWEsbyYmamUo''@;'; put 'put ''bixhKX1mdW5jdGlvbiBJKG4pe2lmKCghRGUobil8fG4uZGlydHkpJiYobi5kaXJ0eXx8bi5sYXN0Q2xlYW5FcG9jaCE9PVgpKXtpZighbi5wcm9kdWNlck11c3RSZWNvbXB1dGUobikmJiFhZShuKSlyZXR1cm4gdm9pZCBQZShuKTtuLnByb2R1Y2VyUmVjb21wdXRlVmFsdWUobiksUGUobil9''@;'; put 'put ''fWZ1bmN0aW9uIHVlKG4pe2lmKHZvaWQgMD09PW4uY29uc3VtZXJzKXJldHVybjtjb25zdCBlPXFlO3FlPSEwO3RyeXtmb3IobGV0IHQ9bi5jb25zdW1lcnM7dm9pZCAwIT09dDt0PXQubmV4dENvbnN1bWVyKXtjb25zdCByPXQuY29uc3VtZXI7ci5kaXJ0eXx8X2Uocil9fWZpbmFsbHl7cWU9''@;'; put 'put ''ZX19ZnVuY3Rpb24gbmUoKXtyZXR1cm4hMSE9PWtlPy5jb25zdW1lckFsbG93U2lnbmFsV3JpdGVzfWZ1bmN0aW9uIF9lKG4pe24uZGlydHk9ITAsdWUobiksbi5jb25zdW1lck1hcmtlZERpcnR5Py4obil9ZnVuY3Rpb24gUGUobil7bi5kaXJ0eT0hMSxuLmxhc3RDbGVhbkVwb2NoPVh9ZnVu''@;'; put 'put ''Y3Rpb24gb3Qobil7cmV0dXJuIG4mJmZ1bmN0aW9uIGx0KG4pe24ucHJvZHVjZXJzVGFpbD12b2lkIDAsbi5yZWNvbXB1dGluZz0hMH0obiksayhuKX1mdW5jdGlvbiBkdChuLGUpe2soZSksbiYmZnVuY3Rpb24gUmUobil7bi5yZWNvbXB1dGluZz0hMTtjb25zdCBlPW4ucHJvZHVjZXJzVGFp''@;'; put 'put ''bDtsZXQgdD12b2lkIDAhPT1lP2UubmV4dFByb2R1Y2VyOm4ucHJvZHVjZXJzO2lmKHZvaWQgMCE9PXQpe2lmKERlKG4pKWRve3Q9QWUodCl9d2hpbGUodm9pZCAwIT09dCk7dm9pZCAwIT09ZT9lLm5leHRQcm9kdWNlcj12b2lkIDA6bi5wcm9kdWNlcnM9dm9pZCAwfX0obil9ZnVuY3Rpb24g''@;'; put 'put ''YWUobil7Zm9yKGxldCBlPW4ucHJvZHVjZXJzO3ZvaWQgMCE9PWU7ZT1lLm5leHRQcm9kdWNlcil7Y29uc3QgdD1lLnByb2R1Y2VyLHI9ZS5sYXN0UmVhZFZlcnNpb247aWYociE9PXQudmVyc2lvbnx8KEkodCksciE9PXQudmVyc2lvbikpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24geGUo''@;'; put 'put ''bil7aWYoRGUobikpe2xldCBlPW4ucHJvZHVjZXJzO2Zvcig7dm9pZCAwIT09ZTspZT1BZShlKX1uLnByb2R1Y2Vycz12b2lkIDAsbi5wcm9kdWNlcnNUYWlsPXZvaWQgMCxuLmNvbnN1bWVycz12b2lkIDAsbi5jb25zdW1lcnNUYWlsPXZvaWQgMH1mdW5jdGlvbiBqZShuLGUpe2NvbnN0IHQ9''@;'; put 'put ''bi5jb25zdW1lcnNUYWlsLHI9RGUobik7aWYodm9pZCAwIT09dD8oZS5uZXh0Q29uc3VtZXI9dC5uZXh0Q29uc3VtZXIsdC5uZXh0Q29uc3VtZXI9ZSk6KGUubmV4dENvbnN1bWVyPXZvaWQgMCxuLmNvbnN1bWVycz1lKSxlLnByZXZDb25zdW1lcj10LG4uY29uc3VtZXJzVGFpbD1lLCFyKWZv''@;'; put 'put ''cihsZXQgaT1uLnByb2R1Y2Vyczt2b2lkIDAhPT1pO2k9aS5uZXh0UHJvZHVjZXIpamUoaS5wcm9kdWNlcixpKX1mdW5jdGlvbiBBZShuKXtjb25zdCBlPW4ucHJvZHVjZXIsdD1uLm5leHRQcm9kdWNlcixyPW4ubmV4dENvbnN1bWVyLGk9bi5wcmV2Q29uc3VtZXI7aWYobi5uZXh0Q29uc3Vt''@;'; put 'put ''ZXI9dm9pZCAwLG4ucHJldkNvbnN1bWVyPXZvaWQgMCx2b2lkIDAhPT1yP3IucHJldkNvbnN1bWVyPWk6ZS5jb25zdW1lcnNUYWlsPWksdm9pZCAwIT09aSlpLm5leHRDb25zdW1lcj1yO2Vsc2UgaWYoZS5jb25zdW1lcnM9ciwhRGUoZSkpe2xldCBvPWUucHJvZHVjZXJzO2Zvcig7dm9pZCAw''@;'; put 'put ''IT09bzspbz1BZShvKX1yZXR1cm4gdH1mdW5jdGlvbiBEZShuKXtyZXR1cm4gbi5jb25zdW1lcklzQWx3YXlzTGl2ZXx8dm9pZCAwIT09bi5jb25zdW1lcnN9ZnVuY3Rpb24gaGUobixlKXtyZXR1cm4gT2JqZWN0LmlzKG4sZSl9Y29uc3QgSmU9U3ltYm9sKCJVTlNFVCIpLHR0PVN5bWJvbCgi''@;'; put 'put ''Q09NUFVUSU5HIiksS2U9U3ltYm9sKCJFUlJPUkVEIiksJHQ9ey4uLkcsdmFsdWU6SmUsZGlydHk6ITAsZXJyb3I6bnVsbCxlcXVhbDpoZSxraW5kOiJjb21wdXRlZCIscHJvZHVjZXJNdXN0UmVjb21wdXRlOm49Pm4udmFsdWU9PT1KZXx8bi52YWx1ZT09PXR0LHByb2R1Y2VyUmVjb21wdXRl''@;'; put 'put ''VmFsdWUobil7aWYobi52YWx1ZT09PXR0KXRocm93IG5ldyBFcnJvcigiIik7Y29uc3QgZT1uLnZhbHVlO24udmFsdWU9dHQ7Y29uc3QgdD1vdChuKTtsZXQgcixpPSExO3RyeXtyPW4uY29tcHV0YXRpb24oKSxrKG51bGwpLGk9ZSE9PUplJiZlIT09S2UmJnIhPT1LZSYmbi5lcXVhbChlLHIp''@;'; put 'put ''fWNhdGNoKG8pe3I9S2Usbi5lcnJvcj1vfWZpbmFsbHl7ZHQobix0KX1pP24udmFsdWU9ZToobi52YWx1ZT1yLG4udmVyc2lvbisrKX19O2xldCBMdD1mdW5jdGlvbiBSdCgpe3Rocm93IG5ldyBFcnJvcn07ZnVuY3Rpb24gR3Qobil7THQobil9ZnVuY3Rpb24gTHIobixlKXtjb25zdCB0PU9i''@;'; put 'put ''amVjdC5jcmVhdGUoT28pO3QudmFsdWU9bix2b2lkIDAhPT1lJiYodC5lcXVhbD1lKTtjb25zdCByPSgpPT5mdW5jdGlvbiBPbihuKXtyZXR1cm4gRChuKSxuLnZhbHVlfSh0KTtyZXR1cm4gcltiXT10LFtyLGE9PlFyKHQsYSksYT0+ZnVuY3Rpb24gdHIobixlKXtuZSgpfHxHdChuKSxRcihu''@;'; put 'put ''LGUobi52YWx1ZSkpfSh0LGEpXX1mdW5jdGlvbiBRcihuLGUpe25lKCl8fEd0KG4pLG4uZXF1YWwobi52YWx1ZSxlKXx8KG4udmFsdWU9ZSxmdW5jdGlvbiB1cihuKXtuLnZlcnNpb24rKyxmdW5jdGlvbiBwKCl7WCsrfSgpLHVlKG4pfShuKSl9Y29uc3QgT289ey4uLkcsZXF1YWw6aGUsdmFs''@;'; put 'put ''dWU6dm9pZCAwLGtpbmQ6InNpZ25hbCJ9O2Z1bmN0aW9uIFpuKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBufWZ1bmN0aW9uIFNuKG4pe2NvbnN0IHQ9bihyPT57RXJyb3IuY2FsbChyKSxyLnN0YWNrPShuZXcgRXJyb3IpLnN0YWNrfSk7cmV0dXJuIHQucHJvdG90eXBlPU9iamVjdC5j''@;'; put 'put ''cmVhdGUoRXJyb3IucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHR9Y29uc3QgeHI9U24obj0+ZnVuY3Rpb24odCl7bih0aGlzKSx0aGlzLm1lc3NhZ2U9dD9gJHt0Lmxlbmd0aH0gZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbiR7dC5tYXAoKHIs''@;'; put 'put ''aSk9PmAke2krMX0pICR7ci50b1N0cmluZygpfWApLmpvaW4oIlxuICAiKX1gOiIiLHRoaXMubmFtZT0iVW5zdWJzY3JpcHRpb25FcnJvciIsdGhpcy5lcnJvcnM9dH0pO2Z1bmN0aW9uIFR0KG4sZSl7aWYobil7Y29uc3QgdD1uLmluZGV4T2YoZSk7MDw9dCYmbi5zcGxpY2UodCwxKX19Y2xh''@;'; put 'put ''c3MgQXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5pbml0aWFsVGVhcmRvd249ZSx0aGlzLmNsb3NlZD0hMSx0aGlzLl9wYXJlbnRhZ2U9bnVsbCx0aGlzLl9maW5hbGl6ZXJzPW51bGx9dW5zdWJzY3JpYmUoKXtsZXQgZTtpZighdGhpcy5jbG9zZWQpe3RoaXMuY2xvc2VkPSEwO2NvbnN0e19wYXJl''@;'; put 'put ''bnRhZ2U6dH09dGhpcztpZih0KWlmKHRoaXMuX3BhcmVudGFnZT1udWxsLEFycmF5LmlzQXJyYXkodCkpZm9yKGNvbnN0IG8gb2YgdClvLnJlbW92ZSh0aGlzKTtlbHNlIHQucmVtb3ZlKHRoaXMpO2NvbnN0e2luaXRpYWxUZWFyZG93bjpyfT10aGlzO2lmKFpuKHIpKXRyeXtyKCl9Y2F0Y2go''@;'; put 'put ''byl7ZT1vIGluc3RhbmNlb2YgeHI/by5lcnJvcnM6W29dfWNvbnN0e19maW5hbGl6ZXJzOml9PXRoaXM7aWYoaSl7dGhpcy5fZmluYWxpemVycz1udWxsO2Zvcihjb25zdCBvIG9mIGkpdHJ5e05uKG8pfWNhdGNoKGEpe2U9ZT8/W10sYSBpbnN0YW5jZW9mIHhyP2U9Wy4uLmUsLi4uYS5lcnJv''@;'; put 'put ''cnNdOmUucHVzaChhKX19aWYoZSl0aHJvdyBuZXcgeHIoZSl9fWFkZChlKXt2YXIgdDtpZihlJiZlIT09dGhpcylpZih0aGlzLmNsb3NlZClObihlKTtlbHNle2lmKGUgaW5zdGFuY2VvZiBBcil7aWYoZS5jbG9zZWR8fGUuX2hhc1BhcmVudCh0aGlzKSlyZXR1cm47ZS5fYWRkUGFyZW50KHRo''@;'; put 'put ''aXMpfSh0aGlzLl9maW5hbGl6ZXJzPW51bGwhPT0odD10aGlzLl9maW5hbGl6ZXJzKSYmdm9pZCAwIT09dD90OltdKS5wdXNoKGUpfX1faGFzUGFyZW50KGUpe2NvbnN0e19wYXJlbnRhZ2U6dH09dGhpcztyZXR1cm4gdD09PWV8fEFycmF5LmlzQXJyYXkodCkmJnQuaW5jbHVkZXMoZSl9X2Fk''@;'; put 'put ''ZFBhcmVudChlKXtjb25zdHtfcGFyZW50YWdlOnR9PXRoaXM7dGhpcy5fcGFyZW50YWdlPUFycmF5LmlzQXJyYXkodCk/KHQucHVzaChlKSx0KTp0P1t0LGVdOmV9X3JlbW92ZVBhcmVudChlKXtjb25zdHtfcGFyZW50YWdlOnR9PXRoaXM7dD09PWU/dGhpcy5fcGFyZW50YWdlPW51bGw6QXJy''@;'; put 'put ''YXkuaXNBcnJheSh0KSYmVHQodCxlKX1yZW1vdmUoZSl7Y29uc3R7X2ZpbmFsaXplcnM6dH09dGhpczt0JiZUdCh0LGUpLGUgaW5zdGFuY2VvZiBBciYmZS5fcmVtb3ZlUGFyZW50KHRoaXMpfX1Bci5FTVBUWT0oKCk9Pntjb25zdCBuPW5ldyBBcjtyZXR1cm4gbi5jbG9zZWQ9ITAsbn0pKCk7''@;'; put 'put ''Y29uc3QgX249QXIuRU1QVFk7ZnVuY3Rpb24gWnQobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBBcnx8biYmImNsb3NlZCJpbiBuJiZabihuLnJlbW92ZSkmJlpuKG4uYWRkKSYmWm4obi51bnN1YnNjcmliZSl9ZnVuY3Rpb24gTm4obil7Wm4obik/bigpOm4udW5zdWJzY3JpYmUoKX1jb25zdCBw''@;'; put 'put ''dD17b25VbmhhbmRsZWRFcnJvcjpudWxsLG9uU3RvcHBlZE5vdGlmaWNhdGlvbjpudWxsLFByb21pc2U6dm9pZCAwLHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ITEsdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiExfSxwbj17c2V0VGltZW91dChuLGUsLi4udCl7Y29u''@;'; put 'put ''c3R7ZGVsZWdhdGU6cn09cG47cmV0dXJuIHI/LnNldFRpbWVvdXQ/ci5zZXRUaW1lb3V0KG4sZSwuLi50KTpzZXRUaW1lb3V0KG4sZSwuLi50KX0sY2xlYXJUaW1lb3V0KG4pe2NvbnN0e2RlbGVnYXRlOmV9PXBuO3JldHVybihlPy5jbGVhclRpbWVvdXR8fGNsZWFyVGltZW91dCkobil9LGRl''@;'; put 'put ''bGVnYXRlOnZvaWQgMH07ZnVuY3Rpb24gTWkobil7cG4uc2V0VGltZW91dCgoKT0+e2NvbnN0e29uVW5oYW5kbGVkRXJyb3I6ZX09cHQ7aWYoIWUpdGhyb3cgbjtlKG4pfSl9ZnVuY3Rpb24gR2UoKXt9Y29uc3QgVXQ9QnQoIkMiLHZvaWQgMCx2b2lkIDApO2Z1bmN0aW9uIEJ0KG4sZSx0KXty''@;'; put 'put ''ZXR1cm57a2luZDpuLHZhbHVlOmUsZXJyb3I6dH19bGV0IHpuPW51bGw7ZnVuY3Rpb24gR24obil7aWYocHQudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl7Y29uc3QgZT0hem47aWYoZSYmKHpuPXtlcnJvclRocm93bjohMSxlcnJvcjpudWxsfSksbigpLGUpe2NvbnN0''@;'; put 'put ''e2Vycm9yVGhyb3duOnQsZXJyb3I6cn09em47aWYoem49bnVsbCx0KXRocm93IHJ9fWVsc2UgbigpfWNsYXNzIHZpIGV4dGVuZHMgQXJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLmlzU3RvcHBlZD0hMSxlPyh0aGlzLmRlc3RpbmF0aW9uPWUsWnQoZSkmJmUuYWRkKHRoaXMpKTp0aGlz''@;'; put 'put ''LmRlc3RpbmF0aW9uPVhyfXN0YXRpYyBjcmVhdGUoZSx0LHIpe3JldHVybiBuZXcgdm4oZSx0LHIpfW5leHQoZSl7dGhpcy5pc1N0b3BwZWQ/am8oZnVuY3Rpb24geHQobil7cmV0dXJuIEJ0KCJOIixuLHZvaWQgMCl9KGUpLHRoaXMpOnRoaXMuX25leHQoZSl9ZXJyb3IoZSl7dGhpcy5pc1N0''@;'; put 'put ''b3BwZWQ/am8oZnVuY3Rpb24gdnIobil7cmV0dXJuIEJ0KCJFIix2b2lkIDAsbil9KGUpLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9lcnJvcihlKSl9Y29tcGxldGUoKXt0aGlzLmlzU3RvcHBlZD9qbyhVdCx0aGlzKToodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fY29tcGxldGUo''@;'; put 'put ''KSl9dW5zdWJzY3JpYmUoKXt0aGlzLmNsb3NlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHN1cGVyLnVuc3Vic2NyaWJlKCksdGhpcy5kZXN0aW5hdGlvbj1udWxsKX1fbmV4dChlKXt0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9X2Vycm9yKGUpe3RyeXt0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGUp''@;'; put 'put ''fWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX1fY29tcGxldGUoKXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX19Y29uc3QgcnI9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7ZnVuY3Rpb24gaHIobixlKXtyZXR1cm4gcnIuY2Fs''@;'; put 'put ''bChuLGUpfWNsYXNzIHBve2NvbnN0cnVjdG9yKGUpe3RoaXMucGFydGlhbE9ic2VydmVyPWV9bmV4dChlKXtjb25zdHtwYXJ0aWFsT2JzZXJ2ZXI6dH09dGhpcztpZih0Lm5leHQpdHJ5e3QubmV4dChlKX1jYXRjaChyKXtCbihyKX19ZXJyb3IoZSl7Y29uc3R7cGFydGlhbE9ic2VydmVyOnR9''@;'; put 'put ''PXRoaXM7aWYodC5lcnJvcil0cnl7dC5lcnJvcihlKX1jYXRjaChyKXtCbihyKX1lbHNlIEJuKGUpfWNvbXBsZXRlKCl7Y29uc3R7cGFydGlhbE9ic2VydmVyOmV9PXRoaXM7aWYoZS5jb21wbGV0ZSl0cnl7ZS5jb21wbGV0ZSgpfWNhdGNoKHQpe0JuKHQpfX19Y2xhc3Mgdm4gZXh0ZW5kcyB2''@;'; put 'put ''aXtjb25zdHJ1Y3RvcihlLHQscil7bGV0IGk7aWYoc3VwZXIoKSxabihlKXx8IWUpaT17bmV4dDplPz92b2lkIDAsZXJyb3I6dD8/dm9pZCAwLGNvbXBsZXRlOnI/P3ZvaWQgMH07ZWxzZXtsZXQgbzt0aGlzJiZwdC51c2VEZXByZWNhdGVkTmV4dENvbnRleHQ/KG89T2JqZWN0LmNyZWF0ZShl''@;'; put 'put ''KSxvLnVuc3Vic2NyaWJlPSgpPT50aGlzLnVuc3Vic2NyaWJlKCksaT17bmV4dDplLm5leHQmJmhyKGUubmV4dCxvKSxlcnJvcjplLmVycm9yJiZocihlLmVycm9yLG8pLGNvbXBsZXRlOmUuY29tcGxldGUmJmhyKGUuY29tcGxldGUsbyl9KTppPWV9dGhpcy5kZXN0aW5hdGlvbj1uZXcgcG8o''@;'; put 'put ''aSl9fWZ1bmN0aW9uIEJuKG4pe3B0LnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc/ZnVuY3Rpb24geW4obil7cHQudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmem4mJih6bi5lcnJvclRocm93bj0hMCx6bi5lcnJvcj1uKX0obik6TWkobil9ZnVu''@;'; put 'put ''Y3Rpb24gam8obixlKXtjb25zdHtvblN0b3BwZWROb3RpZmljYXRpb246dH09cHQ7dCYmcG4uc2V0VGltZW91dCgoKT0+dChuLGUpKX1jb25zdCBYcj17Y2xvc2VkOiEwLG5leHQ6R2UsZXJyb3I6ZnVuY3Rpb24gamEobil7dGhyb3cgbn0sY29tcGxldGU6R2V9LGVhPSJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBTeW1ib2wmJlN5bWJvbC5vYnNlcnZhYmxlfHwiQEBvYnNlcnZhYmxlIjtmdW5jdGlvbiByYShuKXtyZXR1cm4gbn1mdW5jdGlvbiBDaShuKXtyZXR1cm4gMD09PW4ubGVuZ3RoP3JhOjE9PT1uLmxlbmd0aD9uWzBdOmZ1bmN0aW9uKHQpe3JldHVybiBuLnJlZHVjZSgocixpKT0+aShy''@;'; put 'put ''KSx0KX19bGV0IGhvPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCl7dCYmKHRoaXMuX3N1YnNjcmliZT10KX1saWZ0KHQpe2NvbnN0IHI9bmV3IG47cmV0dXJuIHIuc291cmNlPXRoaXMsci5vcGVyYXRvcj10LHJ9c3Vic2NyaWJlKHQscixpKXtjb25zdCBvPWZ1bmN0aW9uIEJpKG4pe3Jl''@;'; put 'put ''dHVybiBuJiZuIGluc3RhbmNlb2Ygdml8fGZ1bmN0aW9uIGtzKG4pe3JldHVybiBuJiZabihuLm5leHQpJiZabihuLmVycm9yKSYmWm4obi5jb21wbGV0ZSl9KG4pJiZadChuKX0odCk/dDpuZXcgdm4odCxyLGkpO3JldHVybiBHbigoKT0+e2NvbnN0e29wZXJhdG9yOmEsc291cmNlOmx9PXRo''@;'; put 'put ''aXM7by5hZGQoYT9hLmNhbGwobyxsKTpsP3RoaXMuX3N1YnNjcmliZShvKTp0aGlzLl90cnlTdWJzY3JpYmUobykpfSksb31fdHJ5U3Vic2NyaWJlKHQpe3RyeXtyZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHQpfWNhdGNoKHIpe3QuZXJyb3Iocil9fWZvckVhY2godCxyKXtyZXR1cm4gbmV3KHI9''@;'; put 'put ''TWEocikpKChpLG8pPT57Y29uc3QgYT1uZXcgdm4oe25leHQ6bD0+e3RyeXt0KGwpfWNhdGNoKHUpe28odSksYS51bnN1YnNjcmliZSgpfX0sZXJyb3I6byxjb21wbGV0ZTppfSk7dGhpcy5zdWJzY3JpYmUoYSl9KX1fc3Vic2NyaWJlKHQpe3ZhciByO3JldHVybiBudWxsPT09KHI9dGhpcy5z''@;'; put 'put ''b3VyY2UpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnN1YnNjcmliZSh0KX1bZWFdKCl7cmV0dXJuIHRoaXN9cGlwZSguLi50KXtyZXR1cm4gQ2kodCkodGhpcyl9dG9Qcm9taXNlKHQpe3JldHVybiBuZXcodD1NYSh0KSkoKHIsaSk9PntsZXQgbzt0aGlzLnN1YnNjcmliZShhPT5vPWEsYT0+aShh''@;'; put 'put ''KSwoKT0+cihvKSl9KX19cmV0dXJuIG4uY3JlYXRlPWU9Pm5ldyBuKGUpLG59KSgpO2Z1bmN0aW9uIE1hKG4pe3ZhciBlO3JldHVybiBudWxsIT09KGU9bj8/cHQuUHJvbWlzZSkmJnZvaWQgMCE9PWU/ZTpQcm9taXNlfWNvbnN0IHRhPVNuKG49PmZ1bmN0aW9uKCl7bih0aGlzKSx0aGlzLm5h''@;'; put 'put ''bWU9Ik9iamVjdFVuc3Vic2NyaWJlZEVycm9yIix0aGlzLm1lc3NhZ2U9Im9iamVjdCB1bnN1YnNjcmliZWQifSk7bGV0IE1yPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBob3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5jbG9zZWQ9ITEsdGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGwsdGhp''@;'; put 'put ''cy5vYnNlcnZlcnM9W10sdGhpcy5pc1N0b3BwZWQ9ITEsdGhpcy5oYXNFcnJvcj0hMSx0aGlzLnRocm93bkVycm9yPW51bGx9bGlmdCh0KXtjb25zdCByPW5ldyBGcyh0aGlzLHRoaXMpO3JldHVybiByLm9wZXJhdG9yPXQscn1fdGhyb3dJZkNsb3NlZCgpe2lmKHRoaXMuY2xvc2VkKXRocm93''@;'; put 'put ''IG5ldyB0YX1uZXh0KHQpe0duKCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5jdXJyZW50T2JzZXJ2ZXJzfHwodGhpcy5jdXJyZW50T2JzZXJ2ZXJzPUFycmF5LmZyb20odGhpcy5vYnNlcnZlcnMpKTtmb3IoY29uc3QgciBvZiB0aGlzLmN1cnJl''@;'; put 'put ''bnRPYnNlcnZlcnMpci5uZXh0KHQpfX0pfWVycm9yKHQpe0duKCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5oYXNFcnJvcj10aGlzLmlzU3RvcHBlZD0hMCx0aGlzLnRocm93bkVycm9yPXQ7Y29uc3R7b2JzZXJ2ZXJzOnJ9PXRoaXM7Zm9yKDty''@;'; put 'put ''Lmxlbmd0aDspci5zaGlmdCgpLmVycm9yKHQpfX0pfWNvbXBsZXRlKCl7R24oKCk9PntpZih0aGlzLl90aHJvd0lmQ2xvc2VkKCksIXRoaXMuaXNTdG9wcGVkKXt0aGlzLmlzU3RvcHBlZD0hMDtjb25zdHtvYnNlcnZlcnM6dH09dGhpcztmb3IoO3QubGVuZ3RoOyl0LnNoaWZ0KCkuY29tcGxl''@;'; put 'put ''dGUoKX19KX11bnN1YnNjcmliZSgpe3RoaXMuaXNTdG9wcGVkPXRoaXMuY2xvc2VkPSEwLHRoaXMub2JzZXJ2ZXJzPXRoaXMuY3VycmVudE9ic2VydmVycz1udWxsfWdldCBvYnNlcnZlZCgpe3ZhciB0O3JldHVybihudWxsPT09KHQ9dGhpcy5vYnNlcnZlcnMpfHx2b2lkIDA9PT10P3ZvaWQg''@;'; put 'put ''MDp0Lmxlbmd0aCk+MH1fdHJ5U3Vic2NyaWJlKHQpe3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksc3VwZXIuX3RyeVN1YnNjcmliZSh0KX1fc3Vic2NyaWJlKHQpe3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyh0KSx0aGlzLl9p''@;'; put 'put ''bm5lclN1YnNjcmliZSh0KX1faW5uZXJTdWJzY3JpYmUodCl7Y29uc3R7aGFzRXJyb3I6cixpc1N0b3BwZWQ6aSxvYnNlcnZlcnM6b309dGhpcztyZXR1cm4gcnx8aT9fbjoodGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGwsby5wdXNoKHQpLG5ldyBBcigoKT0+e3RoaXMuY3VycmVudE9ic2Vy''@;'; put 'put ''dmVycz1udWxsLFR0KG8sdCl9KSl9X2NoZWNrRmluYWxpemVkU3RhdHVzZXModCl7Y29uc3R7aGFzRXJyb3I6cix0aHJvd25FcnJvcjppLGlzU3RvcHBlZDpvfT10aGlzO3I/dC5lcnJvcihpKTpvJiZ0LmNvbXBsZXRlKCl9YXNPYnNlcnZhYmxlKCl7Y29uc3QgdD1uZXcgaG87cmV0dXJuIHQu''@;'; put 'put ''c291cmNlPXRoaXMsdH19cmV0dXJuIG4uY3JlYXRlPShlLHQpPT5uZXcgRnMoZSx0KSxufSkoKTtjbGFzcyBGcyBleHRlbmRzIE1ye2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSx0aGlzLmRlc3RpbmF0aW9uPWUsdGhpcy5zb3VyY2U9dH1uZXh0KGUpe3ZhciB0LHI7bnVsbD09PShyPW51bGw9''@;'; put 'put ''PT0odD10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09dD92b2lkIDA6dC5uZXh0KXx8dm9pZCAwPT09cnx8ci5jYWxsKHQsZSl9ZXJyb3IoZSl7dmFyIHQscjtudWxsPT09KHI9bnVsbD09PSh0PXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmVycm9yKXx8dm9pZCAw''@;'; put 'put ''PT09cnx8ci5jYWxsKHQsZSl9Y29tcGxldGUoKXt2YXIgZSx0O251bGw9PT0odD1udWxsPT09KGU9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWU/dm9pZCAwOmUuY29tcGxldGUpfHx2b2lkIDA9PT10fHx0LmNhbGwoZSl9X3N1YnNjcmliZShlKXt2YXIgdCxyO3JldHVybiBudWxsIT09''@;'; put 'put ''KHI9bnVsbD09PSh0PXRoaXMuc291cmNlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5zdWJzY3JpYmUoZSkpJiZ2b2lkIDAhPT1yP3I6X259fWNsYXNzICRpIGV4dGVuZHMgTXJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl92YWx1ZT1lfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmdldFZh''@;'; put 'put ''bHVlKCl9X3N1YnNjcmliZShlKXtjb25zdCB0PXN1cGVyLl9zdWJzY3JpYmUoZSk7cmV0dXJuIXQuY2xvc2VkJiZlLm5leHQodGhpcy5fdmFsdWUpLHR9Z2V0VmFsdWUoKXtjb25zdHtoYXNFcnJvcjplLHRocm93bkVycm9yOnQsX3ZhbHVlOnJ9PXRoaXM7aWYoZSl0aHJvdyB0O3JldHVybiB0''@;'; put 'put ''aGlzLl90aHJvd0lmQ2xvc2VkKCkscn1uZXh0KGUpe3N1cGVyLm5leHQodGhpcy5fdmFsdWU9ZSl9fWNsYXNzIF9ze2Z1bGw7bWFqb3I7bWlub3I7cGF0Y2g7Y29uc3RydWN0b3IoZSl7dGhpcy5mdWxsPWU7Y29uc3QgdD1lLnNwbGl0KCIuIik7dGhpcy5tYWpvcj10WzBdLHRoaXMubWlub3I9''@;'; put 'put ''dFsxXSx0aGlzLnBhdGNoPXQuc2xpY2UoMikuam9pbigiLiIpfX1jb25zdCBqcz1uZXcgX3MoIjIwLjMuMzAiKSxUaT0iaHR0cHM6Ly9hbmd1bGFyLmRldi9iZXN0LXByYWN0aWNlcy9zZWN1cml0eSNwcmV2ZW50aW5nLWNyb3NzLXNpdGUtc2NyaXB0aW5nLXhzcyI7Y2xhc3MgV24gZXh0ZW5k''@;'; put 'put ''cyBFcnJvcntjb2RlO2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZGMoZSx0KSksdGhpcy5jb2RlPWV9fWZ1bmN0aW9uIGRjKG4sZSl7cmV0dXJuYCR7ZnVuY3Rpb24gUWgobil7cmV0dXJuYE5HMCR7TWF0aC5hYnMobil9YH0obil9JHtlPyI6ICIrZToiIn1gfWNvbnN0IElsPWdsb2JhbFRoaXM7''@;'; put 'put ''ZnVuY3Rpb24gVXMobil7Zm9yKGxldCBlIGluIG4paWYobltlXT09PVVzKXJldHVybiBlO3Rocm93IEVycm9yKCIiKX1mdW5jdGlvbiBzcChuLGUpe2Zvcihjb25zdCB0IGluIGUpZS5oYXNPd25Qcm9wZXJ0eSh0KSYmIW4uaGFzT3duUHJvcGVydHkodCkmJihuW3RdPWVbdF0pfWZ1bmN0aW9u''@;'; put 'put ''IFJzKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbjtpZihBcnJheS5pc0FycmF5KG4pKXJldHVybmBbJHtuLm1hcChScykuam9pbigiLCAiKX1dYDtpZihudWxsPT1uKXJldHVybiIiK247Y29uc3QgZT1uLm92ZXJyaWRkZW5OYW1lfHxuLm5hbWU7aWYoZSlyZXR1cm5gJHtlfWA7''@;'; put 'put ''Y29uc3QgdD1uLnRvU3RyaW5nKCk7aWYobnVsbD09dClyZXR1cm4iIit0O2NvbnN0IHI9dC5pbmRleE9mKCJcbiIpO3JldHVybiByPj0wP3Quc2xpY2UoMCxyKTp0fWZ1bmN0aW9uIEwwKG4sZSl7cmV0dXJuIG4/ZT9gJHtufSAke2V9YDpuOmV8fCIifWNvbnN0IHlkPVVzKHtfX2ZvcndhcmRf''@;'; put 'put ''cmVmX186VXN9KTtmdW5jdGlvbiBVbyhuKXtyZXR1cm4gbi5fX2ZvcndhcmRfcmVmX189VW8sbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBScyh0aGlzKCkpfSxufWZ1bmN0aW9uIGZhKG4pe3JldHVybiBWcihuKT9uKCk6bn1mdW5jdGlvbiBWcihuKXtyZXR1cm4iZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgbiYmbi5oYXNPd25Qcm9wZXJ0eSh5ZCkmJm4uX19mb3J3YXJkX3JlZl9fPT09VW99ZnVuY3Rpb24gSm4obil7cmV0dXJue3Rva2VuOm4udG9rZW4scHJvdmlkZWRJbjpuLnByb3ZpZGVkSW58fG51bGwsZmFjdG9yeTpuLmZhY3RvcnksdmFsdWU6dm9pZCAwfX1mdW5jdGlvbiBtaShu''@;'; put 'put ''KXtyZXR1cm57cHJvdmlkZXJzOm4ucHJvdmlkZXJzfHxbXSxpbXBvcnRzOm4uaW1wb3J0c3x8W119fWZ1bmN0aW9uIGV1KG4pe3JldHVybiBmdW5jdGlvbiBjbihuLGUpe3JldHVybiBuLmhhc093blByb3BlcnR5KGUpJiZuW2VdfHxudWxsfShuLHdvKX1mdW5jdGlvbiBnaShuKXtyZXR1cm4g''@;'; put 'put ''biYmbi5oYXNPd25Qcm9wZXJ0eShscyk/bltsc106bnVsbH1jb25zdCB3bz1Vcyh7XHUwMjc1cHJvdjpVc30pLGxzPVVzKHtcdTAyNzVpbmo6VXN9KTtjbGFzcyBFcntfZGVzYztuZ01ldGFkYXRhTmFtZT0iSW5qZWN0aW9uVG9rZW4iO1x1MDI3NXByb3Y7Y29uc3RydWN0b3IoZSx0KXt0aGlz''@;'; put 'put ''Ll9kZXNjPWUsdGhpcy5cdTAyNzVwcm92PXZvaWQgMCwibnVtYmVyIj09dHlwZW9mIHQ/dGhpcy5fX05HX0VMRU1FTlRfSURfXz10OnZvaWQgMCE9PXQmJih0aGlzLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOnRoaXMscHJvdmlkZWRJbjp0LnByb3ZpZGVkSW58fCJyb290IixmYWN0b3J5OnQuZmFj''@;'; put 'put ''dG9yeX0pKX1nZXQgbXVsdGkoKXtyZXR1cm4gdGhpc310b1N0cmluZygpe3JldHVybmBJbmplY3Rpb25Ub2tlbiAke3RoaXMuX2Rlc2N9YH19ZnVuY3Rpb24gTWMobil7cmV0dXJuIG4mJiEhbi5cdTAyNzVwcm92aWRlcnN9Y29uc3QgSWk9VXMoe1x1MDI3NWNtcDpVc30pLHJoPVVzKHtcdTAy''@;'; put 'put ''NzVkaXI6VXN9KSxuNT1Vcyh7XHUwMjc1cGlwZTpVc30pLHYyPVVzKHtcdTAyNzVtb2Q6VXN9KSx0ZD1Vcyh7XHUwMjc1ZmFjOlVzfSksTzA9VXMoe19fTkdfRUxFTUVOVF9JRF9fOlVzfSksT209VXMoe19fTkdfRU5WX0lEX186VXN9KTtmdW5jdGlvbiBpYShuKXtyZXR1cm4ic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIG4/bjpudWxsPT1uPyIiOlN0cmluZyhuKX1jb25zdCBUYz1Vcyh7bmdFcnJvckNvZGU6VXN9KSxtcz1Vcyh7bmdFcnJvck1lc3NhZ2U6VXN9KSxGMT1Vcyh7bmdUb2tlblBhdGg6VXN9KTtmdW5jdGlvbiBObShuLGUpe3JldHVybiBqdCgiIiwtMjAwLGUpfWZ1bmN0aW9uIHphKG4s''@;'; put 'put ''ZSl7dGhyb3cgbmV3IFduKC0yMDEsITEpfWZ1bmN0aW9uIGp0KG4sZSx0KXtjb25zdCByPW5ldyBXbihlLG4pO3JldHVybiByW1RjXT1lLHJbbXNdPW4sdCYmKHJbRjFdPXQpLHJ9bGV0IEZuO2Z1bmN0aW9uIFFuKCl7cmV0dXJuIEZufWZ1bmN0aW9uIGxyKG4pe2NvbnN0IGU9Rm47cmV0dXJu''@;'; put 'put ''IEZuPW4sZX1mdW5jdGlvbiBpaShuLGUsdCl7Y29uc3Qgcj1ldShuKTtyZXR1cm4gciYmInJvb3QiPT1yLnByb3ZpZGVkSW4/dm9pZCAwPT09ci52YWx1ZT9yLnZhbHVlPXIuZmFjdG9yeSgpOnIudmFsdWU6OCZ0P251bGw6dm9pZCAwIT09ZT9lOnZvaWQgemEoKX1jb25zdCBLaT17fSxOYT0i''@;'; put 'put ''X19OR19ESV9GTEFHX18iO2NsYXNzIFJve2luamVjdG9yO2NvbnN0cnVjdG9yKGUpe3RoaXMuaW5qZWN0b3I9ZX1yZXRyaWV2ZShlLHQpe2NvbnN0IHI9aW8odCl8fDA7dHJ5e3JldHVybiB0aGlzLmluamVjdG9yLmdldChlLDgmcj9udWxsOktpLHIpfWNhdGNoKGkpe2lmKEllKGkpKXJldHVy''@;'; put 'put ''biBpO3Rocm93IGl9fX1mdW5jdGlvbiBkbChuLGU9MCl7Y29uc3QgdD1XKCk7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgV24oLTIwMywhMSk7aWYobnVsbD09PXQpcmV0dXJuIGlpKG4sdm9pZCAwLGUpO3tjb25zdCByPWZ1bmN0aW9uIERhKG4pe3JldHVybntvcHRpb25hbDohISg4Jm4pLGhv''@;'; put 'put ''c3Q6ISEoMSZuKSxzZWxmOiEhKDImbiksc2tpcFNlbGY6ISEoNCZuKX19KGUpLGk9dC5yZXRyaWV2ZShuLHIpO2lmKEllKGkpKXtpZihyLm9wdGlvbmFsKXJldHVybiBudWxsO3Rocm93IGl9cmV0dXJuIGl9fWZ1bmN0aW9uIG9yKG4sZT0wKXtyZXR1cm4oUW4oKXx8ZGwpKGZhKG4pLGUpfWZ1''@;'; put 'put ''bmN0aW9uIHNuKG4sZSl7cmV0dXJuIG9yKG4saW8oZSkpfWZ1bmN0aW9uIGlvKG4pe3JldHVybiB0eXBlb2Ygbj4idSJ8fCJudW1iZXIiPT10eXBlb2Ygbj9uOjB8KG4ub3B0aW9uYWwmJjgpfChuLmhvc3QmJjEpfChuLnNlbGYmJjIpfChuLnNraXBTZWxmJiY0KX1mdW5jdGlvbiBucyhuKXtj''@;'; put 'put ''b25zdCBlPVtdO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXtjb25zdCByPWZhKG5bdF0pO2lmKEFycmF5LmlzQXJyYXkocikpe2lmKDA9PT1yLmxlbmd0aCl0aHJvdyBuZXcgV24oOTAwLCExKTtsZXQgaSxvPTA7Zm9yKGxldCBhPTA7YTxyLmxlbmd0aDthKyspe2NvbnN0IGw9clthXSx1''@;'; put 'put ''PVdjKGwpOyJudW1iZXIiPT10eXBlb2YgdT8tMT09PXU/aT1sLnRva2VuOm98PXU6aT1sfWUucHVzaChvcihpLG8pKX1lbHNlIGUucHVzaChvcihyKSl9cmV0dXJuIGV9ZnVuY3Rpb24gRWwobixlKXtyZXR1cm4gbltOYV09ZSxuLnByb3RvdHlwZVtOYV09ZSxufWZ1bmN0aW9uIFdjKG4pe3Jl''@;'; put 'put ''dHVybiBuW05hXX1mdW5jdGlvbiBuYyhuLGUpe3JldHVybiBuLmhhc093blByb3BlcnR5KHRkKT9uW3RkXTpudWxsfWZ1bmN0aW9uIGUxKG4sZSl7bi5mb3JFYWNoKHQ9PkFycmF5LmlzQXJyYXkodCk/ZTEodCxlKTplKHQpKX1mdW5jdGlvbiB0MShuLGUsdCl7ZT49bi5sZW5ndGg/bi5wdXNo''@;'; put 'put ''KHQpOm4uc3BsaWNlKGUsMCx0KX1mdW5jdGlvbiBiZChuLGUpe3JldHVybiBlPj1uLmxlbmd0aC0xP24ucG9wKCk6bi5zcGxpY2UoZSwxKVswXX1mdW5jdGlvbiBqdShuLGUsdCl7bGV0IHI9dzIobixlKTtyZXR1cm4gcj49MD9uWzF8cl09dDoocj1+cixmdW5jdGlvbiBraChuLGUsdCxyKXts''@;'; put 'put ''ZXQgaT1uLmxlbmd0aDtpZihpPT1lKW4ucHVzaCh0LHIpO2Vsc2UgaWYoMT09PWkpbi5wdXNoKHIsblswXSksblswXT10O2Vsc2V7Zm9yKGktLSxuLnB1c2gobltpLTFdLG5baV0pO2k+ZTspbltpXT1uW2ktMl0saS0tO25bZV09dCxuW2UrMV09cn19KG4scixlLHQpKSxyfWZ1bmN0aW9uIEJk''@;'; put 'put ''KG4sZSl7Y29uc3QgdD13MihuLGUpO2lmKHQ+PTApcmV0dXJuIG5bMXx0XX1mdW5jdGlvbiB3MihuLGUpe3JldHVybiBmdW5jdGlvbiByOChuLGUsdCl7bGV0IHI9MCxpPW4ubGVuZ3RoPj50O2Zvcig7aSE9PXI7KXtjb25zdCBvPXIrKGktcj4+MSksYT1uW288PHRdO2lmKGU9PT1hKXJldHVy''@;'; put 'put ''biBvPDx0O2E+ZT9pPW86cj1vKzF9cmV0dXJufihpPDx0KX0obixlLDEpfWNvbnN0IHFzPXt9LEphPVtdLE5sPW5ldyBFcigiIiksbjE9bmV3IEVyKCIiLC0xKSxqZD1uZXcgRXIoIiIpO2NsYXNzIE4we2dldChlLHQ9S2kpe2lmKHQ9PT1LaSl7Y29uc3QgaT1qdCgiIiwtMjAxKTt0aHJvdyBp''@;'; put 'put ''Lm5hbWU9Ilx1MDI3NU5vdEZvdW5kIixpfXJldHVybiB0fX1mdW5jdGlvbiByMShuKXtyZXR1cm4gblt2Ml18fG51bGx9ZnVuY3Rpb24gY3Mobil7cmV0dXJuIG5bSWldfHxudWxsfWZ1bmN0aW9uIENzKG4pe3JldHVybiBuW3JoXXx8bnVsbH1mdW5jdGlvbiBudShuKXtyZXR1cm4gbltuNV18''@;'; put 'put ''fG51bGx9ZnVuY3Rpb24gbmQobil7cmV0dXJue1x1MDI3NXByb3ZpZGVyczpufX1mdW5jdGlvbiBtZiguLi5uKXtyZXR1cm57XHUwMjc1cHJvdmlkZXJzOlAxKDAsbiksXHUwMjc1ZnJvbU5nTW9kdWxlOiEwfX1mdW5jdGlvbiBQMShuLC4uLmUpe2NvbnN0IHQ9W10scj1uZXcgU2V0O2xldCBp''@;'; put 'put ''O2NvbnN0IG89YT0+e3QucHVzaChhKX07cmV0dXJuIGUxKGUsYT0+e2NvbnN0IGw9YTtVdShsLG8sW10scikmJihpfHw9W10saS5wdXNoKGwpKX0pLHZvaWQgMCE9PWkmJnVzKGksbyksdH1mdW5jdGlvbiB1cyhuLGUpe2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKXtjb25zdHtuZ01vZHVs''@;'; put 'put ''ZTpyLHByb3ZpZGVyczppfT1uW3RdO2wwKGksbz0+e2UobyxyKX0pfX1mdW5jdGlvbiBVdShuLGUsdCxyKXtpZighKG49ZmEobikpKXJldHVybiExO2xldCBpPW51bGwsbz1naShuKTtjb25zdCBhPSFvJiZjcyhuKTtpZihvfHxhKXtpZihhJiYhYS5zdGFuZGFsb25lKXJldHVybiExO2k9bn1l''@;'; put 'put ''bHNle2NvbnN0IHU9bi5uZ01vZHVsZTtpZihvPWdpKHUpLCFvKXJldHVybiExO2k9dX1jb25zdCBsPXIuaGFzKGkpO2lmKGEpe2lmKGwpcmV0dXJuITE7aWYoci5hZGQoaSksYS5kZXBlbmRlbmNpZXMpe2NvbnN0IHU9ImZ1bmN0aW9uIj09dHlwZW9mIGEuZGVwZW5kZW5jaWVzP2EuZGVwZW5k''@;'; put 'put ''ZW5jaWVzKCk6YS5kZXBlbmRlbmNpZXM7Zm9yKGNvbnN0IGcgb2YgdSlVdShnLGUsdCxyKX19ZWxzZXtpZighbylyZXR1cm4hMTt7aWYobnVsbCE9by5pbXBvcnRzJiYhbCl7bGV0IGc7ci5hZGQoaSksZTEoby5pbXBvcnRzLEU9PntVdShFLGUsdCxyKSYmKGd8fD1bXSxnLnB1c2goRSkpfSks''@;'; put 'put ''dm9pZCAwIT09ZyYmdXMoZyxlKX1pZighbCl7Y29uc3QgZz1uYyhpKXx8KCgpPT5uZXcgaSk7ZSh7cHJvdmlkZTppLHVzZUZhY3Rvcnk6ZyxkZXBzOkphfSxpKSxlKHtwcm92aWRlOmpkLHVzZVZhbHVlOmksbXVsdGk6ITB9LGkpLGUoe3Byb3ZpZGU6TmwsdXNlVmFsdWU6KCk9Pm9yKGkpLG11''@;'; put 'put ''bHRpOiEwfSxpKX1jb25zdCB1PW8ucHJvdmlkZXJzO2lmKG51bGwhPXUmJiFsKXtjb25zdCBnPW47bDAodSxFPT57ZShFLGcpfSl9fX1yZXR1cm4gaSE9PW4mJnZvaWQgMCE9PW4ucHJvdmlkZXJzfWZ1bmN0aW9uIGwwKG4sZSl7Zm9yKGxldCB0IG9mIG4pTWModCkmJih0PXQuXHUwMjc1cHJv''@;'; put 'put ''dmlkZXJzKSxBcnJheS5pc0FycmF5KHQpP2wwKHQsZSk6ZSh0KX1jb25zdCByNT1Vcyh7cHJvdmlkZTpTdHJpbmcsdXNlVmFsdWU6VXN9KTtmdW5jdGlvbiB1cChuKXtyZXR1cm4gbnVsbCE9PW4mJiJvYmplY3QiPT10eXBlb2YgbiYmcjUgaW4gbn1mdW5jdGlvbiBpMShuKXtyZXR1cm4iZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2Ygbn1jb25zdCBvOD1uZXcgRXIoIiIpLFNnPXt9LEhtPXt9O2xldCB3ZDtmdW5jdGlvbiBpNSgpe3JldHVybiB2b2lkIDA9PT13ZCYmKHdkPW5ldyBOMCksd2R9Y2xhc3Mgbmx7fWNsYXNzIEgxIGV4dGVuZHMgbmx7cGFyZW50O3NvdXJjZTtzY29wZXM7cmVjb3Jkcz1u''@;'; put 'put ''ZXcgTWFwO19uZ09uRGVzdHJveUhvb2tzPW5ldyBTZXQ7X29uRGVzdHJveUhvb2tzPVtdO2dldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfV9kZXN0cm95ZWQ9ITE7aW5qZWN0b3JEZWZUeXBlcztjb25zdHJ1Y3RvcihlLHQscixpKXtzdXBlcigpLHRoaXMucGFyZW50PXQs''@;'; put 'put ''dGhpcy5zb3VyY2U9cix0aGlzLnNjb3Blcz1pLHZmKGUsYT0+dGhpcy5wcm9jZXNzUHJvdmlkZXIoYSkpLHRoaXMucmVjb3Jkcy5zZXQobjEsaDModm9pZCAwLHRoaXMpKSxpLmhhcygiZW52aXJvbm1lbnQiKSYmdGhpcy5yZWNvcmRzLnNldChubCxoMyh2b2lkIDAsdGhpcykpO2NvbnN0IG89''@;'; put 'put ''dGhpcy5yZWNvcmRzLmdldChvOCk7bnVsbCE9byYmInN0cmluZyI9PXR5cGVvZiBvLnZhbHVlJiZ0aGlzLnNjb3Blcy5hZGQoby52YWx1ZSksdGhpcy5pbmplY3RvckRlZlR5cGVzPW5ldyBTZXQodGhpcy5nZXQoamQsSmEse3NlbGY6ITB9KSl9cmV0cmlldmUoZSx0KXtjb25zdCByPWlvKHQp''@;'; put 'put ''fHwwO3RyeXtyZXR1cm4gdGhpcy5nZXQoZSxLaSxyKX1jYXRjaChpKXtpZihJZShpKSlyZXR1cm4gaTt0aHJvdyBpfX1kZXN0cm95KCl7ZDModGhpcyksdGhpcy5fZGVzdHJveWVkPSEwO2NvbnN0IGU9ayhudWxsKTt0cnl7Zm9yKGNvbnN0IHIgb2YgdGhpcy5fbmdPbkRlc3Ryb3lIb29rcyly''@;'; put 'put ''Lm5nT25EZXN0cm95KCk7Y29uc3QgdD10aGlzLl9vbkRlc3Ryb3lIb29rczt0aGlzLl9vbkRlc3Ryb3lIb29rcz1bXTtmb3IoY29uc3QgciBvZiB0KXIoKX1maW5hbGx5e3RoaXMucmVjb3Jkcy5jbGVhcigpLHRoaXMuX25nT25EZXN0cm95SG9va3MuY2xlYXIoKSx0aGlzLmluamVjdG9yRGVm''@;'; put 'put ''VHlwZXMuY2xlYXIoKSxrKGUpfX1vbkRlc3Ryb3koZSl7cmV0dXJuIGQzKHRoaXMpLHRoaXMuX29uRGVzdHJveUhvb2tzLnB1c2goZSksKCk9PnRoaXMucmVtb3ZlT25EZXN0cm95KGUpfXJ1bkluQ29udGV4dChlKXtkMyh0aGlzKTtjb25zdCB0PXEodGhpcykscj1scih2b2lkIDApO3RyeXty''@;'; put 'put ''ZXR1cm4gZSgpfWZpbmFsbHl7cSh0KSxscihyKX19Z2V0KGUsdD1LaSxyKXtpZihkMyh0aGlzKSxlLmhhc093blByb3BlcnR5KE9tKSlyZXR1cm4gZVtPbV0odGhpcyk7Y29uc3QgaT1pbyhyKSxhPXEodGhpcyksbD1scih2b2lkIDApO3RyeXtpZighKDQmaSkpe2xldCBnPXRoaXMucmVjb3Jk''@;'; put 'put ''cy5nZXQoZSk7aWYodm9pZCAwPT09Zyl7Y29uc3QgRT1mdW5jdGlvbiB1YShuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbnx8Im9iamVjdCI9PXR5cGVvZiBuJiYiSW5qZWN0aW9uVG9rZW4iPT09bi5uZ01ldGFkYXRhTmFtZX0oZSkmJmV1KGUpO2c9RSYmdGhpcy5pbmplY3RhYmxlRGVm''@;'; put 'put ''SW5TY29wZShFKT9oMyhkcChlKSxTZyk6bnVsbCx0aGlzLnJlY29yZHMuc2V0KGUsZyl9aWYobnVsbCE9ZylyZXR1cm4gdGhpcy5oeWRyYXRlKGUsZyxpKX1yZXR1cm4oMiZpP2k1KCk6dGhpcy5wYXJlbnQpLmdldChlLHQ9OCZpJiZ0PT09S2k/bnVsbDp0KX1jYXRjaCh1KXtjb25zdCBnPWZ1''@;'; put 'put ''bmN0aW9uIHp0KG4pe3JldHVybiBuW1RjXX0odSk7dGhyb3ctMjAwPT09Z3x8LTIwMT09PWc/bmV3IFduKGcsbnVsbCk6dX1maW5hbGx5e2xyKGwpLHEoYSl9fXJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpe2NvbnN0IGU9ayhudWxsKSx0PXEodGhpcykscj1scih2b2lkIDApO3RyeXtj''@;'; put 'put ''b25zdCBvPXRoaXMuZ2V0KE5sLEphLHtzZWxmOiEwfSk7Zm9yKGNvbnN0IGEgb2YgbylhKCl9ZmluYWxseXtxKHQpLGxyKHIpLGsoZSl9fXRvU3RyaW5nKCl7Y29uc3QgZT1bXSx0PXRoaXMucmVjb3Jkcztmb3IoY29uc3QgciBvZiB0LmtleXMoKSllLnB1c2goUnMocikpO3JldHVybmBSM0lu''@;'; put 'put ''amVjdG9yWyR7ZS5qb2luKCIsICIpfV1gfXByb2Nlc3NQcm92aWRlcihlKXtsZXQgdD1pMShlPWZhKGUpKT9lOmZhKGUmJmUucHJvdmlkZSk7Y29uc3Qgcj1mdW5jdGlvbiBzOChuKXtyZXR1cm4gdXAobik/aDModm9pZCAwLG4udXNlVmFsdWUpOmgzKGhwKG4pLFNnKX0oZSk7aWYoIWkxKGUp''@;'; put 'put ''JiYhMD09PWUubXVsdGkpe2xldCBpPXRoaXMucmVjb3Jkcy5nZXQodCk7aXx8KGk9aDModm9pZCAwLFNnLCEwKSxpLmZhY3Rvcnk9KCk9Pm5zKGkubXVsdGkpLHRoaXMucmVjb3Jkcy5zZXQodCxpKSksdD1lLGkubXVsdGkucHVzaChlKX10aGlzLnJlY29yZHMuc2V0KHQscil9aHlkcmF0ZShl''@;'; put 'put ''LHQscil7Y29uc3QgaT1rKG51bGwpO3RyeXtpZih0LnZhbHVlPT09SG0pdGhyb3cgTm0oUnMoZSkpO3JldHVybiB0LnZhbHVlPT09U2cmJih0LnZhbHVlPUhtLHQudmFsdWU9dC5mYWN0b3J5KHZvaWQgMCxyKSksIm9iamVjdCI9PXR5cGVvZiB0LnZhbHVlJiZ0LnZhbHVlJiZmdW5jdGlvbiBj''@;'; put 'put ''OChuKXtyZXR1cm4gbnVsbCE9PW4mJiJvYmplY3QiPT10eXBlb2YgbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4ubmdPbkRlc3Ryb3l9KHQudmFsdWUpJiZ0aGlzLl9uZ09uRGVzdHJveUhvb2tzLmFkZCh0LnZhbHVlKSx0LnZhbHVlfWZpbmFsbHl7ayhpKX19aW5qZWN0YWJsZURlZkluU2NvcGUo''@;'; put 'put ''ZSl7aWYoIWUucHJvdmlkZWRJbilyZXR1cm4hMTtjb25zdCB0PWZhKGUucHJvdmlkZWRJbik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0PyJhbnkiPT09dHx8dGhpcy5zY29wZXMuaGFzKHQpOnRoaXMuaW5qZWN0b3JEZWZUeXBlcy5oYXModCl9cmVtb3ZlT25EZXN0cm95KGUpe2NvbnN0IHQ9''@;'; put 'put ''dGhpcy5fb25EZXN0cm95SG9va3MuaW5kZXhPZihlKTstMSE9PXQmJnRoaXMuX29uRGVzdHJveUhvb2tzLnNwbGljZSh0LDEpfX1mdW5jdGlvbiBkcChuKXtjb25zdCBlPWV1KG4pLHQ9bnVsbCE9PWU/ZS5mYWN0b3J5Om5jKG4pO2lmKG51bGwhPT10KXJldHVybiB0O2lmKG4gaW5zdGFuY2Vv''@;'; put 'put ''ZiBFcil0aHJvdyBuZXcgV24oMjA0LCExKTtpZihuIGluc3RhbmNlb2YgRnVuY3Rpb24pcmV0dXJuIGZ1bmN0aW9uIGE4KG4pe2lmKG4ubGVuZ3RoPjApdGhyb3cgbmV3IFduKDIwNCwhMSk7Y29uc3QgdD1mdW5jdGlvbiBpcihuKXtyZXR1cm4obj8uW3dvXT8/bnVsbCl8fG51bGx9KG4pO3Jl''@;'; put 'put ''dHVybiBudWxsIT09dD8oKT0+dC5mYWN0b3J5KG4pOigpPT5uZXcgbn0obik7dGhyb3cgbmV3IFduKDIwNCwhMSl9ZnVuY3Rpb24gaHAobixlLHQpe2xldCByO2lmKGkxKG4pKXtjb25zdCBpPWZhKG4pO3JldHVybiBuYyhpKXx8ZHAoaSl9aWYodXAobikpcj0oKT0+ZmEobi51c2VWYWx1ZSk7''@;'; put 'put ''ZWxzZSBpZihmdW5jdGlvbiBQbShuKXtyZXR1cm4hKCFufHwhbi51c2VGYWN0b3J5KX0obikpcj0oKT0+bi51c2VGYWN0b3J5KC4uLm5zKG4uZGVwc3x8W10pKTtlbHNlIGlmKGZ1bmN0aW9uIGMwKG4pe3JldHVybiEoIW58fCFuLnVzZUV4aXN0aW5nKX0obikpcj0oaSxvKT0+b3IoZmEobi51''@;'; put 'put ''c2VFeGlzdGluZyksdm9pZCAwIT09byYmOCZvPzg6dm9pZCAwKTtlbHNle2NvbnN0IGk9ZmEobiYmKG4udXNlQ2xhc3N8fG4ucHJvdmlkZSkpO2lmKCFmdW5jdGlvbiBsOChuKXtyZXR1cm4hIW4uZGVwc30obikpcmV0dXJuIG5jKGkpfHxkcChpKTtyPSgpPT5uZXcgaSguLi5ucyhuLmRlcHMp''@;'; put 'put ''KX1yZXR1cm4gcn1mdW5jdGlvbiBkMyhuKXtpZihuLmRlc3Ryb3llZCl0aHJvdyBuZXcgV24oMjA1LCExKX1mdW5jdGlvbiBoMyhuLGUsdD0hMSl7cmV0dXJue2ZhY3Rvcnk6bix2YWx1ZTplLG11bHRpOnQ/W106dm9pZCAwfX1mdW5jdGlvbiB2ZihuLGUpe2Zvcihjb25zdCB0IG9mIG4pQXJy''@;'; put 'put ''YXkuaXNBcnJheSh0KT92Zih0LGUpOnQmJk1jKHQpP3ZmKHQuXHUwMjc1cHJvdmlkZXJzLGUpOmUodCl9ZnVuY3Rpb24gTHUobixlKXtsZXQgdDtuIGluc3RhbmNlb2YgSDE/KGQzKG4pLHQ9bik6dD1uZXcgUm8obik7Y29uc3QgaT1xKHQpLG89bHIodm9pZCAwKTt0cnl7cmV0dXJuIGUoKX1m''@;'; put 'put ''aW5hbGx5e3EoaSksbHIobyl9fWZ1bmN0aW9uIEVnKCl7cmV0dXJuIHZvaWQgMCE9PVFuKCl8fG51bGwhPVcoKX1mdW5jdGlvbiB6cyhuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKSYmIm9iamVjdCI9PXR5cGVvZiBuWzFdfWZ1bmN0aW9uIFl1KG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4p''@;'; put 'put ''JiYhMD09PW5bMV19ZnVuY3Rpb24gcmQobil7cmV0dXJuISEoNCZuLmZsYWdzKX1mdW5jdGlvbiB3ZihuKXtyZXR1cm4gbi5jb21wb25lbnRPZmZzZXQ+LTF9ZnVuY3Rpb24gQ2Yobil7cmV0dXJuISgxJn5uLmZsYWdzKX1mdW5jdGlvbiBzMShuKXtyZXR1cm4hIW4udGVtcGxhdGV9ZnVuY3Rp''@;'; put 'put ''b24gdjMobil7cmV0dXJuISEoNTEyJm5bMl0pfWZ1bmN0aW9uIFNmKG4pe3JldHVybiEoMjU2Jn5uWzJdKX12YXIgJGU9ZnVuY3Rpb24obil7cmV0dXJuIG5bbi5OT05FPTBdPSJOT05FIixuW24uSFRNTD0xXT0iSFRNTCIsbltuLlNUWUxFPTJdPSJTVFlMRSIsbltuLlNDUklQVD0zXT0iU0NS''@;'; put 'put ''SVBUIixuW24uVVJMPTRdPSJVUkwiLG5bbi5SRVNPVVJDRV9VUkw9NV09IlJFU09VUkNFX1VSTCIsbltuLkFUVFJJQlVURV9OT19CSU5ESU5HPTZdPSJBVFRSSUJVVEVfTk9fQklORElORyIsbn0oJGV8fHt9KTtsZXQgU3Q7ZnVuY3Rpb24gVXIobixlLHQpe2Zvcihjb25zdFtyLGldb2YgdCl7''@;'; put 'put ''bGV0IG89ZSYmInVua25vd24iIT09cj9gOiR7ZX06JHtyfWA6cjtvPW8udG9Mb3dlckNhc2UoKTtmb3IoY29uc3QgYSBvZiBpKVN0W2Ake299fCR7YS50b0xvd2VyQ2FzZSgpfWBdPW59fWZ1bmN0aW9uIHBpKG4sZSx0KXtjb25zdCByPWZ1bmN0aW9uIGNyKCl7cmV0dXJuIFN0fHwoU3Q9e30s''@;'; put 'put ''VXIoJGUuSFRNTCx2b2lkIDAsW1siaWZyYW1lIixbInNyY2RvYyJdXSxbIioiLFsiaW5uZXJIVE1MIiwib3V0ZXJIVE1MIl1dXSksVXIoJGUuU1RZTEUsdm9pZCAwLFtbIioiLFsic3R5bGUiXV1dKSxVcigkZS5VUkwsdm9pZCAwLFtbIioiLFsiZm9ybUFjdGlvbiJdXSxbImFyZWEiLFsiaHJl''@;'; put 'put ''ZiJdXSxbImEiLFsiaHJlZiIsInhsaW5rOmhyZWYiXV0sWyJmb3JtIixbImFjdGlvbiJdXSxbImltZyIsWyJzcmMiXV0sWyJ2aWRlbyIsWyJzcmMiXV1dKSxVcigkZS5VUkwsIm1hdGgiLFtbIioiLFsiaHJlZiIsInhsaW5rOmhyZWYiXV0sWyJhbm5vdGF0aW9uIixbImhyZWYiLCJ4bGluazpo''@;'; put 'put ''cmVmIl1dLFsiYW5ub3RhdGlvbi14bWwiLFsiaHJlZiIsInhsaW5rOmhyZWYiXV0sWyJtYWN0aW9uIixbImhyZWYiLCJ4bGluazpocmVmIl1dLFsibWFsaWdubWFyayIsWyJocmVmIiwieGxpbms6aHJlZiJdXSxbIm1hdGgiLFsiaHJlZiIsInhsaW5rOmhyZWYiXV0sWyJtcm9vdCIsWyJocmVm''@;'; put 'put ''IiwieGxpbms6aHJlZiJdXSxbIm1zcXJ0IixbImhyZWYiLCJ4bGluazpocmVmIl1dLFsibWVycm9yIixbImhyZWYiLCJ4bGluazpocmVmIl1dLFsibWZyYWMiLFsiaHJlZiIsInhsaW5rOmhyZWYiXV0sWyJtZ2x5cGgiLFsiaHJlZiIsInhsaW5rOmhyZWYiXV0sWyJtc3ViIixbImhyZWYiLCJ4''@;'; put 'put ''bGluazpocmVmIl1dLFsibXN1cCIsWyJocmVmIiwieGxpbms6aHJlZiJdXSxbIm1zdWJzdXAiLFsiaHJlZiIsInhsaW5rOmhyZWYiXV0sWyJtbXVsdGlzY3JpcHRzIixbImhyZWYiLCJ4bGluazpocmVmIl1dLFsibXByZXNjcmlwdHMiLFsiaHJlZiIsInhsaW5rOmhyZWYiXV0sWyJtaSIsWyJo''@;'; put 'put ''cmVmIiwieGxpbms6aHJlZiJdXSxbIm1uIixbImhyZWYiLCJ4bGluazpocmVmIl1dLFsibW8iLFsiaHJlZiIsInhsaW5rOmhyZWYiXV0sWyJtcGFkZGVkIixbImhyZWYiLCJ4bGluazpocmVmIl1dLFsibXBoYW50b20iLFsiaHJlZiIsInhsaW5rOmhyZWYiXV0sWyJtcm93IixbImhyZWYiLCJ4''@;'; put 'put ''bGluazpocmVmIl1dLFsibXMiLFsiaHJlZiIsInhsaW5rOmhyZWYiXV0sWyJtc3BhY2UiLFsiaHJlZiIsInhsaW5rOmhyZWYiXV0sWyJtc3R5bGUiLFsiaHJlZiIsInhsaW5rOmhyZWYiXV0sWyJtdGFibGUiLFsiaHJlZiIsInhsaW5rOmhyZWYiXV0sWyJtdGQiLFsiaHJlZiIsInhsaW5rOmhy''@;'; put 'put ''ZWYiXV0sWyJtdHIiLFsiaHJlZiIsInhsaW5rOmhyZWYiXV0sWyJtdGV4dCIsWyJocmVmIiwieGxpbms6aHJlZiJdXSxbIm1vdmVyIixbImhyZWYiLCJ4bGluazpocmVmIl1dLFsibXVuZGVyIixbImhyZWYiLCJ4bGluazpocmVmIl1dLFsibXVuZGVyb3ZlciIsWyJocmVmIiwieGxpbms6aHJl''@;'; put 'put ''ZiJdXSxbInNlbWFudGljcyIsWyJocmVmIiwieGxpbms6aHJlZiJdXSxbIm5vbmUiLFsiaHJlZiIsInhsaW5rOmhyZWYiXV1dKSxVcigkZS5SRVNPVVJDRV9VUkwsdm9pZCAwLFtbImJhc2UiLFsiaHJlZiJdXSxbImVtYmVkIixbInNyYyJdXSxbImZyYW1lIixbInNyYyJdXSxbImlmcmFtZSIs''@;'; put 'put ''WyJzcmMiXV0sWyJsaW5rIixbImhyZWYiXV0sWyJvYmplY3QiLFsiY29kZWJhc2UiLCJkYXRhIl1dXSksVXIoJGUuVVJMLCJzdmciLFtbImEiLFsiaHJlZiIsInhsaW5rOmhyZWYiXV1dKSxVcigkZS5BVFRSSUJVVEVfTk9fQklORElORywic3ZnIixbWyJhbmltYXRlIixbImF0dHJpYnV0ZU5h''@;'; put 'put ''bWUiLCJ2YWx1ZXMiLCJ0byIsImZyb20iXV0sWyJzZXQiLFsidG8iLCJhdHRyaWJ1dGVOYW1lIl1dLFsiYW5pbWF0ZU1vdGlvbiIsWyJhdHRyaWJ1dGVOYW1lIl1dLFsiYW5pbWF0ZVRyYW5zZm9ybSIsWyJhdHRyaWJ1dGVOYW1lIl1dXSksVXIoJGUuQVRUUklCVVRFX05PX0JJTkRJTkcsdm9p''@;'; put 'put ''ZCAwLFtbInVua25vd24iLFsiYXR0cmlidXRlTmFtZSIsInZhbHVlcyIsInRvIiwiZnJvbSIsInNhbmRib3giLCJhbGxvdyIsImFsbG93RnVsbHNjcmVlbiIsInJlZmVycmVyUG9saWN5IiwiY3NwIiwiZmV0Y2hQcmlvcml0eSJdXSxbImlmcmFtZSIsWyJzYW5kYm94IiwiYWxsb3ciLCJhbGxv''@;'; put 'put ''d0Z1bGxzY3JlZW4iLCJyZWZlcnJlclBvbGljeSIsImNzcCIsImZldGNoUHJpb3JpdHkiXV1dKSksU3R9KCksaT1uLnRvTG93ZXJDYXNlKCksbz1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKHQmJiIqIiE9PWkmJiJ1bmtub3duIiE9PWk/cltgOiR7dH06JHtpfXwke299YF06dm9pZCAwKT8/KHQ/''@;'; put 'put ''cltgOiR7dH06Knwke299YF06dm9pZCAwKT8/cltgJHtpfXwke299YF0/P3JbYCp8JHtvfWBdPz8kZS5OT05FfWZ1bmN0aW9uIERyKG4pe2Zvcig7QXJyYXkuaXNBcnJheShuKTspbj1uWzBdO3JldHVybiBufWZ1bmN0aW9uIHhvKG4sZSl7cmV0dXJuIERyKGVbbl0pfWZ1bmN0aW9uIFlpKG4s''@;'; put 'put ''ZSl7cmV0dXJuIERyKGVbbi5pbmRleF0pfWZ1bmN0aW9uIFBzKG4sZSl7cmV0dXJuIG4uZGF0YVtlXX1mdW5jdGlvbiBhYShuLGUpe3JldHVybiBuW2VdfWZ1bmN0aW9uIFppKG4sZSl7Y29uc3QgdD1lW25dO3JldHVybiB6cyh0KT90OnRbMF19ZnVuY3Rpb24gamwobil7cmV0dXJuISgxMjgm''@;'; put 'put ''fm5bMl0pfWZ1bmN0aW9uIHBjKG4sZSl7cmV0dXJuIG51bGw9PWU/bnVsbDpuW2VdfWZ1bmN0aW9uIFVkKG4pe25bMTddPTB9ZnVuY3Rpb24gbDEobil7MTAyNCZuWzJdfHwoblsyXXw9MTAyNCxqbChuKSYmUzIobikpfWZ1bmN0aW9uIFpjKG4pe3JldHVybiEhKDkyMTYmblsyXXx8blsyNF0/''@;'; put 'put ''LmRpcnR5KX1mdW5jdGlvbiBoMChuKXtuWzEwXS5jaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXI/Lm5vdGlmeSg4KSw2NCZuWzJdJiYoblsyXXw9MTAyNCksWmMobikmJlMyKG4pfWZ1bmN0aW9uIFMyKG4pe25bMTBdLmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KDApO2xldCBlPWlo''@;'; put 'put ''KG4pO2Zvcig7bnVsbCE9PWUmJiEoODE5MiZlWzJdKSYmKGVbMl18PTgxOTIsamwoZSkpOyllPWloKGUpfWZ1bmN0aW9uIF8zKG4sZSl7aWYoU2YobikpdGhyb3cgbmV3IFduKDkxMSwhMSk7bnVsbD09PW5bMjFdJiYoblsyMV09W10pLG5bMjFdLnB1c2goZSl9ZnVuY3Rpb24gaWgobil7Y29u''@;'; put 'put ''c3QgZT1uWzNdO3JldHVybiBZdShlKT9lWzNdOmV9ZnVuY3Rpb24ga2cobil7cmV0dXJuIG5bN10/Pz1bXX1mdW5jdGlvbiBadShuKXtyZXR1cm4gbi5jbGVhbnVwPz89W119Y29uc3QgcGE9e2xGcmFtZTpaUChudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITAsc2tpcEh5ZHJhdGlvblJvb3RUTm9k''@;'; put 'put ''ZTpudWxsfTtsZXQgZjg9ITE7ZnVuY3Rpb24gcDgoKXtwYS5sRnJhbWUuZWxlbWVudERlcHRoQ291bnQtLX1mdW5jdGlvbiBJZygpe3JldHVybiBwYS5iaW5kaW5nc0VuYWJsZWR9ZnVuY3Rpb24gdnAoKXtyZXR1cm4gbnVsbCE9PXBhLnNraXBIeWRyYXRpb25Sb290VE5vZGV9ZnVuY3Rpb24g''@;'; put 'put ''ZjAobil7cmV0dXJuIHBhLnNraXBIeWRyYXRpb25Sb290VE5vZGU9PT1ufWZ1bmN0aW9uIGN0KCl7cGEuc2tpcEh5ZHJhdGlvblJvb3RUTm9kZT1udWxsfWZ1bmN0aW9uIGl0KCl7cmV0dXJuIHBhLmxGcmFtZS5sVmlld31mdW5jdGlvbiBGdCgpe3JldHVybiBwYS5sRnJhbWUudFZpZXd9ZnVu''@;'; put 'put ''Y3Rpb24gWWUobil7cmV0dXJuIHBhLmxGcmFtZS5jb250ZXh0TFZpZXc9bixuWzhdfWZ1bmN0aW9uIFhlKG4pe3JldHVybiBwYS5sRnJhbWUuY29udGV4dExWaWV3PW51bGwsbn1mdW5jdGlvbiB5aSgpe2xldCBuPVdhKCk7Zm9yKDtudWxsIT09biYmNjQ9PT1uLnR5cGU7KW49bi5wYXJlbnQ7''@;'; put 'put ''cmV0dXJuIG59ZnVuY3Rpb24gV2EoKXtyZXR1cm4gcGEubEZyYW1lLmN1cnJlbnRUTm9kZX1mdW5jdGlvbiBXcyhuLGUpe2NvbnN0IHQ9cGEubEZyYW1lO3QuY3VycmVudFROb2RlPW4sdC5pc1BhcmVudD1lfWZ1bmN0aW9uIGMxKCl7cmV0dXJuIHBhLmxGcmFtZS5pc1BhcmVudH1mdW5jdGlv''@;'; put 'put ''biBEaCgpe3BhLmxGcmFtZS5pc1BhcmVudD0hMX1mdW5jdGlvbiBVUCgpe3JldHVybiBmOH1mdW5jdGlvbiB0UyhuKXtjb25zdCBlPWY4O3JldHVybiBmOD1uLGV9ZnVuY3Rpb24gSDAoKXtjb25zdCBuPXBhLmxGcmFtZTtsZXQgZT1uLmJpbmRpbmdSb290SW5kZXg7cmV0dXJuLTE9PT1lJiYo''@;'; put 'put ''ZT1uLmJpbmRpbmdSb290SW5kZXg9bi50Vmlldy5iaW5kaW5nU3RhcnRJbmRleCksZX1mdW5jdGlvbiB6bSgpe3JldHVybiBwYS5sRnJhbWUuYmluZGluZ0luZGV4fWZ1bmN0aW9uIEUyKCl7cmV0dXJuIHBhLmxGcmFtZS5iaW5kaW5nSW5kZXgrK31mdW5jdGlvbiBXbShuKXtjb25zdCBlPXBh''@;'; put 'put ''LmxGcmFtZSx0PWUuYmluZGluZ0luZGV4O3JldHVybiBlLmJpbmRpbmdJbmRleD1lLmJpbmRpbmdJbmRleCtuLHR9ZnVuY3Rpb24gcFgobixlKXtjb25zdCB0PXBhLmxGcmFtZTt0LmJpbmRpbmdJbmRleD10LmJpbmRpbmdSb290SW5kZXg9bixuUyhlKX1mdW5jdGlvbiBuUyhuKXtwYS5sRnJh''@;'; put 'put ''bWUuY3VycmVudERpcmVjdGl2ZUluZGV4PW59ZnVuY3Rpb24geEEobil7Y29uc3QgZT1wYS5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4O3JldHVybi0xPT09ZT9udWxsOm5bZV19ZnVuY3Rpb24gQUEoKXtyZXR1cm4gcGEubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4fWZ1bmN0aW9uIHJT''@;'; put 'put ''KG4pe3BhLmxGcmFtZS5jdXJyZW50UXVlcnlJbmRleD1ufWZ1bmN0aW9uIG1YKG4pe2NvbnN0IGU9blsxXTtyZXR1cm4gMj09PWUudHlwZT9lLmRlY2xUTm9kZToxPT09ZS50eXBlP25bNV06bnVsbH1mdW5jdGlvbiBZUChuLGUsdCl7aWYoNCZ0KXtsZXQgaT1lLG89bjtmb3IoOyEoaT1pLnBh''@;'; put 'put ''cmVudCxudWxsIT09aXx8MSZ0fHwoaT1tWChvKSxudWxsPT09aXx8KG89b1sxNF0sMTAmaS50eXBlKSkpOyk7aWYobnVsbD09PWkpcmV0dXJuITE7ZT1pLG49b31jb25zdCByPXBhLmxGcmFtZT1SQSgpO3JldHVybiByLmN1cnJlbnRUTm9kZT1lLHIubFZpZXc9biwhMH1mdW5jdGlvbiBrQShu''@;'; put 'put ''KXtjb25zdCBlPVJBKCksdD1uWzFdO3BhLmxGcmFtZT1lLGUuY3VycmVudFROb2RlPXQuZmlyc3RDaGlsZCxlLmxWaWV3PW4sZS50Vmlldz10LGUuY29udGV4dExWaWV3PW4sZS5iaW5kaW5nSW5kZXg9dC5iaW5kaW5nU3RhcnRJbmRleCxlLmluSTE4bj0hMX1mdW5jdGlvbiBSQSgpe2NvbnN0''@;'; put 'put ''IG49cGEubEZyYW1lLGU9bnVsbD09PW4/bnVsbDpuLmNoaWxkO3JldHVybiBudWxsPT09ZT9aUChuKTplfWZ1bmN0aW9uIFpQKG4pe2NvbnN0IGU9e2N1cnJlbnRUTm9kZTpudWxsLGlzUGFyZW50OiEwLGxWaWV3Om51bGwsdFZpZXc6bnVsbCxzZWxlY3RlZEluZGV4Oi0xLGNvbnRleHRMVmll''@;'; put 'put ''dzpudWxsLGVsZW1lbnREZXB0aENvdW50OjAsY3VycmVudE5hbWVzcGFjZTpudWxsLGN1cnJlbnREaXJlY3RpdmVJbmRleDotMSxiaW5kaW5nUm9vdEluZGV4Oi0xLGJpbmRpbmdJbmRleDotMSxjdXJyZW50UXVlcnlJbmRleDowLHBhcmVudDpuLGNoaWxkOm51bGwsaW5JMThuOiExfTtyZXR1''@;'; put 'put ''cm4gbnVsbCE9PW4mJihuLmNoaWxkPWUpLGV9ZnVuY3Rpb24gR1AoKXtjb25zdCBuPXBhLmxGcmFtZTtyZXR1cm4gcGEubEZyYW1lPW4ucGFyZW50LG4uY3VycmVudFROb2RlPW51bGwsbi5sVmlldz1udWxsLG59Y29uc3QgJFA9R1A7ZnVuY3Rpb24gaVMoKXtjb25zdCBuPUdQKCk7bi5pc1Bh''@;'; put 'put ''cmVudD0hMCxuLnRWaWV3PW51bGwsbi5zZWxlY3RlZEluZGV4PS0xLG4uY29udGV4dExWaWV3PW51bGwsbi5lbGVtZW50RGVwdGhDb3VudD0wLG4uY3VycmVudERpcmVjdGl2ZUluZGV4PS0xLG4uY3VycmVudE5hbWVzcGFjZT1udWxsLG4uYmluZGluZ1Jvb3RJbmRleD0tMSxuLmJpbmRpbmdJ''@;'; put 'put ''bmRleD0tMSxuLmN1cnJlbnRRdWVyeUluZGV4PTB9ZnVuY3Rpb24gb2goKXtyZXR1cm4gcGEubEZyYW1lLnNlbGVjdGVkSW5kZXh9ZnVuY3Rpb24gWW0obil7cGEubEZyYW1lLnNlbGVjdGVkSW5kZXg9bn1mdW5jdGlvbiB5Mygpe2NvbnN0IG49cGEubEZyYW1lO3JldHVybiBQcyhuLnRWaWV3''@;'; put 'put ''LG4uc2VsZWN0ZWRJbmRleCl9ZnVuY3Rpb24gSUEoKXtyZXR1cm4gcGEubEZyYW1lLmN1cnJlbnROYW1lc3BhY2V9bGV0IFhQPSEwO2Z1bmN0aW9uIG9TKCl7cmV0dXJuIFhQfWZ1bmN0aW9uIHB5KG4pe1hQPW59ZnVuY3Rpb24gREEobixlPW51bGwsdD1udWxsLHIpe2NvbnN0IGk9UVAobixl''@;'; put 'put ''LHQscik7cmV0dXJuIGkucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCksaX1mdW5jdGlvbiBRUChuLGU9bnVsbCx0PW51bGwscixpPW5ldyBTZXQpe2NvbnN0IG89W3R8fEphLG1mKG4pXTtyZXR1cm4gcj1yfHwoIm9iamVjdCI9PXR5cGVvZiBuP3ZvaWQgMDpScyhuKSksbmV3IEgxKG8s''@;'; put 'put ''ZXx8aTUoKSxyfHxudWxsLGkpfWNsYXNzIE1se3N0YXRpYyBUSFJPV19JRl9OT1RfRk9VTkQ9S2k7c3RhdGljIE5VTEw9bmV3IE4wO3N0YXRpYyBjcmVhdGUoZSx0KXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBEQSh7bmFtZToiIn0sdCxlLCIiKTt7Y29uc3Qgcj1lLm5hbWU/PyIiO3Jl''@;'; put 'put ''dHVybiBEQSh7bmFtZTpyfSxlLnBhcmVudCxlLnByb3ZpZGVycyxyKX19c3RhdGljIFx1MDI3NXByb3Y9Sm4oe3Rva2VuOk1sLHByb3ZpZGVkSW46ImFueSIsZmFjdG9yeTooKT0+b3IobjEpfSk7c3RhdGljIF9fTkdfRUxFTUVOVF9JRF9fPS0xfWNvbnN0IFRsPW5ldyBFcigiIik7bGV0IE0y''@;'; put 'put ''PSgoKT0+Y2xhc3MgbntzdGF0aWMgX19OR19FTEVNRU5UX0lEX189Ylg7c3RhdGljIF9fTkdfRU5WX0lEX189dD0+dH0pKCk7Y2xhc3MgSlAgZXh0ZW5kcyBNMntfbFZpZXc7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9sVmlldz1lfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gU2YodGhp''@;'; put 'put ''cy5fbFZpZXcpfW9uRGVzdHJveShlKXtjb25zdCB0PXRoaXMuX2xWaWV3O3JldHVybiBfMyh0LGUpLCgpPT5mdW5jdGlvbiBNZihuLGUpe2lmKG51bGw9PT1uWzIxXSlyZXR1cm47Y29uc3QgdD1uWzIxXS5pbmRleE9mKGUpOy0xIT09dCYmblsyMV0uc3BsaWNlKHQsMSl9KHQsZSl9fWZ1bmN0''@;'; put 'put ''aW9uIGJYKCl7cmV0dXJuIG5ldyBKUChpdCgpKX1jbGFzcyBnOHtfY29uc29sZT1jb25zb2xlO2hhbmRsZUVycm9yKGUpe3RoaXMuX2NvbnNvbGUuZXJyb3IoIkVSUk9SIixlKX19Y29uc3QgX3A9bmV3IEVyKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT57Y29uc3Qgbj1zbihu''@;'; put 'put ''bCk7bGV0IGU7cmV0dXJuIHQ9PntuLmRlc3Ryb3llZCYmIWU/c2V0VGltZW91dCgoKT0+e3Rocm93IHR9KTooZT8/PW4uZ2V0KGc4KSxlLmhhbmRsZUVycm9yKHQpKX19fSksd1g9e3Byb3ZpZGU6TmwsdXNlVmFsdWU6KCk9PntzbihnOCl9LG11bHRpOiEwfTtmdW5jdGlvbiBCMShuLGUpe2Nv''@;'; put 'put ''bnN0W3QscixpXT1McihuLGU/LmVxdWFsKSxvPXQ7cmV0dXJuIG8uc2V0PXIsby51cGRhdGU9aSxvLmFzUmVhZG9ubHk9TEEuYmluZChvKSxvfWZ1bmN0aW9uIExBKCl7Y29uc3Qgbj10aGlzW2JdO2lmKHZvaWQgMD09PW4ucmVhZG9ubHlGbil7Y29uc3QgZT0oKT0+dGhpcygpO2VbYl09bixu''@;'; put 'put ''LnJlYWRvbmx5Rm49ZX1yZXR1cm4gbi5yZWFkb25seUZufWZ1bmN0aW9uIHRIKG4pe3JldHVybiBmdW5jdGlvbiBlSChuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbiYmdm9pZCAwIT09bltiXX0obikmJiJmdW5jdGlvbiI9PXR5cGVvZiBuLnNldH1sZXQgT0E9KCgpPT5jbGFzcyBue3Zp''@;'; put 'put ''ZXc7bm9kZTtjb25zdHJ1Y3Rvcih0LHIpe3RoaXMudmlldz10LHRoaXMubm9kZT1yfXN0YXRpYyBfX05HX0VMRU1FTlRfSURfXz1TWH0pKCk7ZnVuY3Rpb24gU1goKXtyZXR1cm4gbmV3IE9BKGl0KCkseWkoKSl9Y2xhc3MgbTh7fWNvbnN0IG5IPW5ldyBFcigiIix7cHJvdmlkZWRJbjoicm9v''@;'; put 'put ''dCIsZmFjdG9yeTooKT0+ITF9KSxySD1uZXcgRXIoIiIpLGlIPW5ldyBFcigiIik7bGV0IHM1PSgoKT0+e2NsYXNzIG57dGFza0lkPTA7cGVuZGluZ1Rhc2tzPW5ldyBTZXQ7ZGVzdHJveWVkPSExO3BlbmRpbmdUYXNrPW5ldyAkaSghMSk7Z2V0IGhhc1BlbmRpbmdUYXNrcygpe3JldHVybiF0''@;'; put 'put ''aGlzLmRlc3Ryb3llZCYmdGhpcy5wZW5kaW5nVGFzay52YWx1ZX1nZXQgaGFzUGVuZGluZ1Rhc2tzT2JzZXJ2YWJsZSgpe3JldHVybiB0aGlzLmRlc3Ryb3llZD9uZXcgaG8odD0+e3QubmV4dCghMSksdC5jb21wbGV0ZSgpfSk6dGhpcy5wZW5kaW5nVGFza31hZGQoKXshdGhpcy5oYXNQZW5k''@;'; put 'put ''aW5nVGFza3MmJiF0aGlzLmRlc3Ryb3llZCYmdGhpcy5wZW5kaW5nVGFzay5uZXh0KCEwKTtjb25zdCB0PXRoaXMudGFza0lkKys7cmV0dXJuIHRoaXMucGVuZGluZ1Rhc2tzLmFkZCh0KSx0fWhhcyh0KXtyZXR1cm4gdGhpcy5wZW5kaW5nVGFza3MuaGFzKHQpfXJlbW92ZSh0KXt0aGlzLnBl''@;'; put 'put ''bmRpbmdUYXNrcy5kZWxldGUodCksMD09PXRoaXMucGVuZGluZ1Rhc2tzLnNpemUmJnRoaXMuaGFzUGVuZGluZ1Rhc2tzJiZ0aGlzLnBlbmRpbmdUYXNrLm5leHQoITEpfW5nT25EZXN0cm95KCl7dGhpcy5wZW5kaW5nVGFza3MuY2xlYXIoKSx0aGlzLmhhc1BlbmRpbmdUYXNrcyYmdGhpcy5w''@;'; put 'put ''ZW5kaW5nVGFzay5uZXh0KCExKSx0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLnBlbmRpbmdUYXNrLnVuc3Vic2NyaWJlKCl9c3RhdGljIFx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bmV3IG59KX1yZXR1cm4gbn0pKCksYVM9KCgpPT57Y2xhc3Mg''@;'; put 'put ''bntpbnRlcm5hbFBlbmRpbmdUYXNrcz1zbihzNSk7c2NoZWR1bGVyPXNuKG04KTtlcnJvckhhbmRsZXI9c24oX3ApO2FkZCgpe2NvbnN0IHQ9dGhpcy5pbnRlcm5hbFBlbmRpbmdUYXNrcy5hZGQoKTtyZXR1cm4oKT0+e3RoaXMuaW50ZXJuYWxQZW5kaW5nVGFza3MuaGFzKHQpJiYodGhpcy5z''@;'; put 'put ''Y2hlZHVsZXIubm90aWZ5KDExKSx0aGlzLmludGVybmFsUGVuZGluZ1Rhc2tzLnJlbW92ZSh0KSl9fXJ1bih0KXtjb25zdCByPXRoaXMuYWRkKCk7dCgpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyKS5maW5hbGx5KHIpfXN0YXRpYyBcdTAyNzVwcm92PUpuKHt0b2tlbjpuLHByb3ZpZGVkSW46''@;'; put 'put ''InJvb3QiLGZhY3Rvcnk6KCk9Pm5ldyBufSl9cmV0dXJuIG59KSgpO2Z1bmN0aW9uIGd5KC4uLm4pe31sZXQgb0g9KCgpPT57Y2xhc3MgbntzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5uZXcgRVh9KX1yZXR1cm4gbn0pKCk7Y2xh''@;'; put 'put ''c3MgRVh7ZGlydHlFZmZlY3RDb3VudD0wO3F1ZXVlcz1uZXcgTWFwO2FkZChlKXt0aGlzLmVucXVldWUoZSksdGhpcy5zY2hlZHVsZShlKX1zY2hlZHVsZShlKXtlLmRpcnR5JiZ0aGlzLmRpcnR5RWZmZWN0Q291bnQrK31yZW1vdmUoZSl7Y29uc3Qgcj10aGlzLnF1ZXVlcy5nZXQoZS56b25l''@;'; put 'put ''KTtyLmhhcyhlKSYmKHIuZGVsZXRlKGUpLGUuZGlydHkmJnRoaXMuZGlydHlFZmZlY3RDb3VudC0tKX1lbnF1ZXVlKGUpe2NvbnN0IHQ9ZS56b25lO3RoaXMucXVldWVzLmhhcyh0KXx8dGhpcy5xdWV1ZXMuc2V0KHQsbmV3IFNldCk7Y29uc3Qgcj10aGlzLnF1ZXVlcy5nZXQodCk7ci5oYXMo''@;'; put 'put ''ZSl8fHIuYWRkKGUpfWZsdXNoKCl7Zm9yKDt0aGlzLmRpcnR5RWZmZWN0Q291bnQ+MDspe2xldCBlPSExO2Zvcihjb25zdFt0LHJdb2YgdGhpcy5xdWV1ZXMpZXx8PW51bGw9PT10P3RoaXMuZmx1c2hRdWV1ZShyKTp0LnJ1bigoKT0+dGhpcy5mbHVzaFF1ZXVlKHIpKTtlfHwodGhpcy5kaXJ0''@;'; put 'put ''eUVmZmVjdENvdW50PTApfX1mbHVzaFF1ZXVlKGUpe2xldCB0PSExO2Zvcihjb25zdCByIG9mIGUpci5kaXJ0eSYmKHRoaXMuZGlydHlFZmZlY3RDb3VudC0tLHQ9ITAsci5ydW4oKSk7cmV0dXJuIHR9fWxldCBhSD1udWxsO2Z1bmN0aW9uIGw1KCl7cmV0dXJuIGFIfWNsYXNzIFRYe31sZXQg''@;'; put 'put ''TkE9KCgpPT57Y2xhc3MgbntoaXN0b3J5R28odCl7dGhyb3cgbmV3IEVycm9yKCIiKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6KCk9PnNuKEFYKSxwcm92aWRlZEluOiJwbGF0Zm9y''@;'; put 'put ''bSJ9KX1yZXR1cm4gbn0pKCk7Y29uc3QgeFg9bmV3IEVyKCIiKTtsZXQgQVg9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE5Be19sb2NhdGlvbjtfaGlzdG9yeTtfZG9jPXNuKFRsKTtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fbG9jYXRpb249d2luZG93LmxvY2F0aW9uLHRoaXMuX2hpc3Rv''@;'; put 'put ''cnk9d2luZG93Lmhpc3Rvcnl9Z2V0QmFzZUhyZWZGcm9tRE9NKCl7cmV0dXJuIGw1KCkuZ2V0QmFzZUhyZWYodGhpcy5fZG9jKX1vblBvcFN0YXRlKHQpe2NvbnN0IHI9bDUoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpO3JldHVybiByLmFkZEV2ZW50TGlzdGVu''@;'; put 'put ''ZXIoInBvcHN0YXRlIix0LCExKSwoKT0+ci5yZW1vdmVFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsdCl9b25IYXNoQ2hhbmdlKHQpe2NvbnN0IHI9bDUoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpO3JldHVybiByLmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFu''@;'; put 'put ''Z2UiLHQsITEpLCgpPT5yLnJlbW92ZUV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLHQpfWdldCBocmVmKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLmhyZWZ9Z2V0IHByb3RvY29sKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLnByb3RvY29sfWdldCBob3N0bmFtZSgpe3JldHVybiB0aGlzLl9s''@;'; put 'put ''b2NhdGlvbi5ob3N0bmFtZX1nZXQgcG9ydCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5wb3J0fWdldCBwYXRobmFtZSgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5wYXRobmFtZX1nZXQgc2VhcmNoKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLnNlYXJjaH1nZXQgaGFzaCgpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9sb2NhdGlvbi5oYXNofXNldCBwYXRobmFtZSh0KXt0aGlzLl9sb2NhdGlvbi5wYXRobmFtZT10fXB1c2hTdGF0ZSh0LHIsaSl7dGhpcy5faGlzdG9yeS5wdXNoU3RhdGUodCxyLGkpfXJlcGxhY2VTdGF0ZSh0LHIsaSl7dGhpcy5faGlzdG9yeS5yZXBsYWNlU3RhdGUodCxyLGkpfWZvcndh''@;'; put 'put ''cmQoKXt0aGlzLl9oaXN0b3J5LmZvcndhcmQoKX1iYWNrKCl7dGhpcy5faGlzdG9yeS5iYWNrKCl9aGlzdG9yeUdvKHQ9MCl7dGhpcy5faGlzdG9yeS5nbyh0KX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9oaXN0b3J5LnN0YXRlfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJu''@;'; put 'put ''IG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTooKT0+bmV3IG4scHJvdmlkZWRJbjoicGxhdGZvcm0ifSl9cmV0dXJuIG59KSgpO2Z1bmN0aW9uIEZBKG4sZSl7cmV0dXJuIG4/ZT9uLmVuZHNXaXRoKCIvIik/ZS5zdGFydHNXaXRoKCIvIik/bitlLnNs''@;'; put 'put ''aWNlKDEpOm4rZTplLnN0YXJ0c1dpdGgoIi8iKT9uK2U6YCR7bn0vJHtlfWA6bjplfWZ1bmN0aW9uIHNIKG4pe2NvbnN0IGU9bi5zZWFyY2goLyN8XD98JC8pO3JldHVybiIvIj09PW5bZS0xXT9uLnNsaWNlKDAsZS0xKStuLnNsaWNlKGUpOm59ZnVuY3Rpb24gWm0obil7cmV0dXJuIG4mJiI/''@;'; put 'put ''IiE9PW5bMF0/YD8ke259YDpufWxldCB5cD0oKCk9PntjbGFzcyBue2hpc3RvcnlHbyh0KXt0aHJvdyBuZXcgRXJyb3IoIiIpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTooKT0+c24o''@;'; put 'put ''bFMpLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59KSgpO2NvbnN0IHNTPW5ldyBFcigiIik7bGV0IGxTPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB5cHtfcGxhdGZvcm1Mb2NhdGlvbjtfYmFzZUhyZWY7X3JlbW92ZUxpc3RlbmVyRm5zPVtdO2NvbnN0cnVjdG9yKHQscil7c3VwZXIoKSx0''@;'; put 'put ''aGlzLl9wbGF0Zm9ybUxvY2F0aW9uPXQsdGhpcy5fYmFzZUhyZWY9cj8/dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKT8/c24oVGwpLmxvY2F0aW9uPy5vcmlnaW4/PyIifW5nT25EZXN0cm95KCl7Zm9yKDt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5sZW5ndGg7''@;'; put 'put ''KXRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnBvcCgpKCl9b25Qb3BTdGF0ZSh0KXt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wdXNoKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZSh0KSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFzaENoYW5nZSh0KSl9Z2V0QmFzZUhyZWYo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9cHJlcGFyZUV4dGVybmFsVXJsKHQpe3JldHVybiBGQSh0aGlzLl9iYXNlSHJlZix0KX1wYXRoKHQ9ITEpe2NvbnN0IHI9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZStabSh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnNlYXJjaCksaT10aGlz''@;'; put 'put ''Ll9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g7cmV0dXJuIGkmJnQ/YCR7cn0ke2l9YDpyfXB1c2hTdGF0ZSh0LHIsaSxvKXtjb25zdCBhPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGkrWm0obykpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKHQscixhKX1yZXBsYWNlU3RhdGUodCxy''@;'; put 'put ''LGksbyl7Y29uc3QgYT10aGlzLnByZXBhcmVFeHRlcm5hbFVybChpK1ptKG8pKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0LHIsYSl9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJh''@;'; put 'put ''Y2soKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldFN0YXRlKCl9aGlzdG9yeUdvKHQ9MCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oaXN0b3J5R28/Lih0KX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikob3IoTkEpLG9y''@;'; put 'put ''KHNTLDgpKX07c3RhdGljIFx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKSxWMD0oKCk9PntjbGFzcyBue19zdWJqZWN0PW5ldyBNcjtfYmFzZVBhdGg7X2xvY2F0aW9uU3RyYXRlZ3k7X3VybENoYW5nZUxp''@;'; put 'put ''c3RlbmVycz1bXTtfdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPW51bGw7Y29uc3RydWN0b3IodCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneT10O2NvbnN0IHI9dGhpcy5fbG9jYXRpb25TdHJhdGVneS5nZXRCYXNlSHJlZigpO3RoaXMuX2Jhc2VQYXRoPWZ1bmN0aW9uIFJYKG4pe2lmKG5ldyBSZWdF''@;'; put 'put ''eHAoIl4oaHR0cHM/Oik/Ly8iKS50ZXN0KG4pKXtjb25zdFssdF09bi5zcGxpdCgvXC9cL1teXC9dKy8pO3JldHVybiB0fXJldHVybiBufShzSChjUyhyKSkpLHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kub25Qb3BTdGF0ZShpPT57dGhpcy5fc3ViamVjdC5uZXh0KHt1cmw6dGhpcy5wYXRoKCEw''@;'; put 'put ''KSxwb3A6ITAsc3RhdGU6aS5zdGF0ZSx0eXBlOmkudHlwZX0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCksdGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzPVtdfXBhdGgodD0hMSl7cmV0dXJuIHRoaXMubm9ybWFsaXplKHRoaXMuX2xv''@;'; put 'put ''Y2F0aW9uU3RyYXRlZ3kucGF0aCh0KSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb25TdHJhdGVneS5nZXRTdGF0ZSgpfWlzQ3VycmVudFBhdGhFcXVhbFRvKHQscj0iIil7cmV0dXJuIHRoaXMucGF0aCgpPT10aGlzLm5vcm1hbGl6ZSh0K1ptKHIpKX1ub3JtYWxpemUodCl7cmV0''@;'; put 'put ''dXJuIG4uc3RyaXBUcmFpbGluZ1NsYXNoKGZ1bmN0aW9uIGtYKG4sZSl7aWYoIW58fCFlLnN0YXJ0c1dpdGgobikpcmV0dXJuIGU7Y29uc3QgdD1lLnN1YnN0cmluZyhuLmxlbmd0aCk7cmV0dXJuIiI9PT10fHxbIi8iLCI7IiwiPyIsIiMiXS5pbmNsdWRlcyh0WzBdKT90OmV9KHRoaXMuX2Jh''@;'; put 'put ''c2VQYXRoLGNTKHQpKSl9cHJlcGFyZUV4dGVybmFsVXJsKHQpe3JldHVybiB0JiYiLyIhPT10WzBdJiYodD0iLyIrdCksdGhpcy5fbG9jYXRpb25TdHJhdGVneS5wcmVwYXJlRXh0ZXJuYWxVcmwodCl9Z28odCxyPSIiLGk9bnVsbCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5wdXNoU3RhdGUo''@;'; put 'put ''aSwiIix0LHIpLHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybCh0K1ptKHIpKSxpKX1yZXBsYWNlU3RhdGUodCxyPSIiLGk9bnVsbCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5yZXBsYWNlU3RhdGUoaSwiIix0LHIpLHRoaXMuX25vdGlmeVVy''@;'; put 'put ''bENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybCh0K1ptKHIpKSxpKX1mb3J3YXJkKCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuYmFjaygpfWhpc3RvcnlHbyh0PTApe3RoaXMuX2xvY2F0aW9uU3Ry''@;'; put 'put ''YXRlZ3kuaGlzdG9yeUdvPy4odCl9b25VcmxDaGFuZ2UodCl7cmV0dXJuIHRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5wdXNoKHQpLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8/PXRoaXMuc3Vic2NyaWJlKHI9Pnt0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoci51cmwsci5z''@;'; put 'put ''dGF0ZSl9KSwoKT0+e2NvbnN0IHI9dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmluZGV4T2YodCk7dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLnNwbGljZShyLDEpLDA9PT10aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMubGVuZ3RoJiYodGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPy51bnN1''@;'; put 'put ''YnNjcmliZSgpLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj1udWxsKX19X25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0PSIiLHIpe3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5mb3JFYWNoKGk9PmkodCxyKSl9c3Vic2NyaWJlKHQscixpKXtyZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJz''@;'; put 'put ''Y3JpYmUoe25leHQ6dCxlcnJvcjpyPz92b2lkIDAsY29tcGxldGU6aT8/dm9pZCAwfSl9c3RhdGljIG5vcm1hbGl6ZVF1ZXJ5UGFyYW1zPVptO3N0YXRpYyBqb2luV2l0aFNsYXNoPUZBO3N0YXRpYyBzdHJpcFRyYWlsaW5nU2xhc2g9c0g7c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXty''@;'; put 'put ''ZXR1cm4gbmV3KHJ8fG4pKG9yKHlwKSl9O3N0YXRpYyBcdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6KCk9PmZ1bmN0aW9uIHY4KCl7cmV0dXJuIG5ldyBWMChvcih5cCkpfSgpLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59KSgpO2Z1bmN0aW9uIGNTKG4pe3JldHVybiBuLnJl''@;'; put 'put ''cGxhY2UoL1wvaW5kZXguaHRtbCQvLCIiKX1mdW5jdGlvbiBteShuLGUpe2U9ZW5jb2RlVVJJQ29tcG9uZW50KGUpO2Zvcihjb25zdCB0IG9mIG4uc3BsaXQoIjsiKSl7Y29uc3Qgcj10LmluZGV4T2YoIj0iKSxbaSxvXT0tMT09cj9bdCwiIl06W3Quc2xpY2UoMCxyKSx0LnNsaWNlKHIrMSld''@;'; put 'put ''O2lmKGkudHJpbSgpPT09ZSlyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KG8pfXJldHVybiBudWxsfWNsYXNzIGxIe31mdW5jdGlvbiB1UyhuLGUsdCxyLGksbyxhKXt0cnl7dmFyIGw9bltvXShhKSx1PWwudmFsdWV9Y2F0Y2goZyl7cmV0dXJuIHZvaWQgdChnKX1sLmRvbmU/ZSh1KTpQcm9t''@;'; put 'put ''aXNlLnJlc29sdmUodSkudGhlbihyLGkpfWZ1bmN0aW9uIENyKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsaSl7dmFyIG89bi5hcHBseShlLHQpO2Z1bmN0aW9uIGEodSl7dVMobyxyLGksYSxsLCJuZXh0''@;'; put 'put ''Iix1KX1mdW5jdGlvbiBsKHUpe3VTKG8scixpLGEsbCwidGhyb3ciLHUpfWEodm9pZCAwKX0pfX1mdW5jdGlvbiBNOShuKXtyZXR1cm4gWm4obj8ubGlmdCl9ZnVuY3Rpb24gYWQobil7cmV0dXJuIGU9PntpZihNOShlKSlyZXR1cm4gZS5saWZ0KGZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gbih0''@;'; put 'put ''LHRoaXMpfWNhdGNoKHIpe3RoaXMuZXJyb3Iocil9fSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUiKX19ZnVuY3Rpb24gdnUobixlLHQscixpKXtyZXR1cm4gbmV3IElYKG4sZSx0LHIsaSl9Y2xhc3MgSVggZXh0ZW5kcyB2aXtj''@;'; put 'put ''b25zdHJ1Y3RvcihlLHQscixpLG8sYSl7c3VwZXIoZSksdGhpcy5vbkZpbmFsaXplPW8sdGhpcy5zaG91bGRVbnN1YnNjcmliZT1hLHRoaXMuX25leHQ9dD9mdW5jdGlvbihsKXt0cnl7dChsKX1jYXRjaCh1KXtlLmVycm9yKHUpfX06c3VwZXIuX25leHQsdGhpcy5fZXJyb3I9aT9mdW5jdGlv''@;'; put 'put ''bihsKXt0cnl7aShsKX1jYXRjaCh1KXtlLmVycm9yKHUpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2Vycm9yLHRoaXMuX2NvbXBsZXRlPXI/ZnVuY3Rpb24oKXt0cnl7cigpfWNhdGNoKGwpe2UuZXJyb3IobCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpzdXBl''@;'; put 'put ''ci5fY29tcGxldGV9dW5zdWJzY3JpYmUoKXt2YXIgZTtpZighdGhpcy5zaG91bGRVbnN1YnNjcmliZXx8dGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKXtjb25zdHtjbG9zZWQ6dH09dGhpcztzdXBlci51bnN1YnNjcmliZSgpLCF0JiYobnVsbD09PShlPXRoaXMub25GaW5hbGl6ZSl8fHZvaWQg''@;'; put 'put ''MD09PWV8fGUuY2FsbCh0aGlzKSl9fX1mdW5jdGlvbiBFcyhuLGUpe3JldHVybiBhZCgodCxyKT0+e2xldCBpPTA7dC5zdWJzY3JpYmUodnUocixvPT57ci5uZXh0KG4uY2FsbChlLG8saSsrKSl9KSl9KX1mdW5jdGlvbiBUZihuKXtyZXR1cm57dG9TdHJpbmc6bn0udG9TdHJpbmcoKX1jb25z''@;'; put 'put ''dCBHbT0iX19wYXJhbWV0ZXJzX18iO2Z1bmN0aW9uIEE5KG4sZSx0KXtyZXR1cm4gVGYoKCk9Pntjb25zdCByPWZ1bmN0aW9uICRtKG4pe3JldHVybiBmdW5jdGlvbiguLi50KXtpZihuKXtjb25zdCByPW4oLi4udCk7Zm9yKGNvbnN0IGkgaW4gcil0aGlzW2ldPXJbaV19fX0oZSk7ZnVuY3Rp''@;'; put 'put ''b24gaSguLi5vKXtpZih0aGlzIGluc3RhbmNlb2YgaSlyZXR1cm4gci5hcHBseSh0aGlzLG8pLHRoaXM7Y29uc3QgYT1uZXcgaSguLi5vKTtyZXR1cm4gbC5hbm5vdGF0aW9uPWEsbDtmdW5jdGlvbiBsKHUsZyxFKXtjb25zdCBPPXUuaGFzT3duUHJvcGVydHkoR20pP3VbR21dOk9iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eSh1LEdtLHt2YWx1ZTpbXX0pW0dtXTtmb3IoO08ubGVuZ3RoPD1FOylPLnB1c2gobnVsbCk7cmV0dXJuKE9bRV09T1tFXXx8W10pLnB1c2goYSksdX19cmV0dXJuIGkucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPW4saS5hbm5vdGF0aW9uQ2xzPWksaX0pfWNvbnN0IHZ5''@;'; put 'put ''PUVsKEE5KCJJbmplY3QiLG49Pih7dG9rZW46bn0pKSwtMSksdzg9RWwoQTkoIk9wdGlvbmFsIiksOCkscW09RWwoQTkoIlNraXBTZWxmIiksNCksWkE9RnVuY3Rpb247Y2xhc3MgS1h7cHJldmlvdXNWYWx1ZTtjdXJyZW50VmFsdWU7Zmlyc3RDaGFuZ2U7Y29uc3RydWN0b3IoZSx0LHIpe3Ro''@;'; put 'put ''aXMucHJldmlvdXNWYWx1ZT1lLHRoaXMuY3VycmVudFZhbHVlPXQsdGhpcy5maXJzdENoYW5nZT1yfWlzRmlyc3RDaGFuZ2UoKXtyZXR1cm4gdGhpcy5maXJzdENoYW5nZX19ZnVuY3Rpb24gYkgobixlLHQscil7bnVsbCE9PWU/ZS5hcHBseVZhbHVlVG9JbnB1dFNpZ25hbChlLHIpOm5bdF09''@;'; put 'put ''cn1jb25zdCBpdT0oKCk9Pntjb25zdCBuPSgpPT53SDtyZXR1cm4gbi5uZ0luaGVyaXQ9ITAsbn0pKCk7ZnVuY3Rpb24gd0gobil7cmV0dXJuIG4udHlwZS5wcm90b3R5cGUubmdPbkNoYW5nZXMmJihuLnNldElucHV0PVhYKSxDSH1mdW5jdGlvbiBDSCgpe2NvbnN0IG49RUgodGhpcyksZT1u''@;'; put 'put ''Py5jdXJyZW50O2lmKGUpe2NvbnN0IHQ9bi5wcmV2aW91cztpZih0PT09cXMpbi5wcmV2aW91cz1lO2Vsc2UgZm9yKGxldCByIGluIGUpdFtyXT1lW3JdO24uY3VycmVudD1udWxsLHRoaXMubmdPbkNoYW5nZXMoZSl9fWZ1bmN0aW9uIFhYKG4sZSx0LHIsaSl7Y29uc3Qgbz10aGlzLmRlY2xh''@;'; put 'put ''cmVkSW5wdXRzW3JdLGE9RUgobil8fGZ1bmN0aW9uIFFYKG4sZSl7cmV0dXJuIG5bU0hdPWV9KG4se3ByZXZpb3VzOnFzLGN1cnJlbnQ6bnVsbH0pLGw9YS5jdXJyZW50fHwoYS5jdXJyZW50PXt9KSx1PWEucHJldmlvdXMsZz11W29dO2xbb109bmV3IEtYKGcmJmcuY3VycmVudFZhbHVlLHQs''@;'; put 'put ''dT09PXFzKSxiSChuLGUsaSx0KX1jb25zdCBTSD0iX19uZ1NpbXBsZUNoYW5nZXNfXyI7ZnVuY3Rpb24gRUgobil7cmV0dXJuIG5bU0hdfHxudWxsfWNvbnN0IEM4PVtdLEdjPWZ1bmN0aW9uKG4sZT1udWxsLHQpe2ZvcihsZXQgcj0wO3I8QzgubGVuZ3RoO3IrKykoMCxDOFtyXSkobixlLHQp''@;'; put 'put ''fTtmdW5jdGlvbiBNSChuLGUpe2ZvcihsZXQgdD1lLmRpcmVjdGl2ZVN0YXJ0LHI9ZS5kaXJlY3RpdmVFbmQ7dDxyO3QrKyl7Y29uc3Qgbz1uLmRhdGFbdF0udHlwZS5wcm90b3R5cGUse25nQWZ0ZXJDb250ZW50SW5pdDphLG5nQWZ0ZXJDb250ZW50Q2hlY2tlZDpsLG5nQWZ0ZXJWaWV3SW5p''@;'; put 'put ''dDp1LG5nQWZ0ZXJWaWV3Q2hlY2tlZDpnLG5nT25EZXN0cm95OkV9PW87YSYmKG4uY29udGVudEhvb2tzPz89W10pLnB1c2goLXQsYSksbCYmKChuLmNvbnRlbnRIb29rcz8/PVtdKS5wdXNoKHQsbCksKG4uY29udGVudENoZWNrSG9va3M/Pz1bXSkucHVzaCh0LGwpKSx1JiYobi52aWV3SG9v''@;'; put 'put ''a3M/Pz1bXSkucHVzaCgtdCx1KSxnJiYoKG4udmlld0hvb2tzPz89W10pLnB1c2godCxnKSwobi52aWV3Q2hlY2tIb29rcz8/PVtdKS5wdXNoKHQsZykpLG51bGwhPUUmJihuLmRlc3Ryb3lIb29rcz8/PVtdKS5wdXNoKHQsRSl9fWZ1bmN0aW9uIF9TKG4sZSx0KXtUSChuLGUsMyx0KX1mdW5j''@;'; put 'put ''dGlvbiB5UyhuLGUsdCxyKXsoMyZuWzJdKT09PXQmJlRIKG4sZSx0LHIpfWZ1bmN0aW9uICRBKG4sZSl7bGV0IHQ9blsyXTsoMyZ0KT09PWUmJih0Jj0xNjM4Myx0Kz0xLG5bMl09dCl9ZnVuY3Rpb24gVEgobixlLHQscil7Y29uc3Qgbz1yPz8tMSxhPWUubGVuZ3RoLTE7bGV0IGw9MDtmb3Io''@;'; put 'put ''bGV0IHU9dm9pZCAwIT09cj82NTUzNSZuWzE3XTowO3U8YTt1KyspaWYoIm51bWJlciI9PXR5cGVvZiBlW3UrMV0pe2lmKGw9ZVt1XSxudWxsIT1yJiZsPj1yKWJyZWFrfWVsc2UgZVt1XTwwJiYoblsxN10rPTY1NTM2KSwobDxvfHwtMT09bykmJihyUShuLHQsZSx1KSxuWzE3XT0oNDI5NDkw''@;'; put 'put ''MTc2MCZuWzE3XSkrdSsyKSx1Kyt9ZnVuY3Rpb24geEgobixlKXtHYyg0LG4sZSk7Y29uc3QgdD1rKG51bGwpO3RyeXtlLmNhbGwobil9ZmluYWxseXtrKHQpLEdjKDUsbixlKX19ZnVuY3Rpb24gclEobixlLHQscil7Y29uc3QgaT10W3JdPDAsbz10W3IrMV0sbD1uW2k/LXRbcl06dFtyXV07''@;'; put 'put ''aT9uWzJdPj4xNDxuWzE3XT4+MTYmJigzJm5bMl0pPT09ZSYmKG5bMl0rPTE2Mzg0LHhIKGwsbykpOnhIKGwsbyl9Y2xhc3MgX3l7ZmFjdG9yeTtuYW1lO2luamVjdEltcGw7cmVzb2x2aW5nPSExO2NhblNlZVZpZXdQcm92aWRlcnM7bXVsdGk7Y29tcG9uZW50UHJvdmlkZXJzO2luZGV4O3By''@;'; put 'put ''b3ZpZGVyRmFjdG9yeTtjb25zdHJ1Y3RvcihlLHQscixpKXt0aGlzLmZhY3Rvcnk9ZSx0aGlzLm5hbWU9aSx0aGlzLmNhblNlZVZpZXdQcm92aWRlcnM9dCx0aGlzLmluamVjdEltcGw9cn19ZnVuY3Rpb24gazkobil7cmV0dXJuIDM9PT1ufHw0PT09bnx8Nj09PW59ZnVuY3Rpb24gUkgobil7''@;'; put 'put ''cmV0dXJuIDY0PT09bi5jaGFyQ29kZUF0KDApfWZ1bmN0aW9uIFI5KG4sZSl7aWYobnVsbCE9PWUmJjAhPT1lLmxlbmd0aClpZihudWxsPT09bnx8MD09PW4ubGVuZ3RoKW49ZS5zbGljZSgpO2Vsc2V7bGV0IHQ9LTE7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2NvbnN0IGk9ZVtyXTsi''@;'; put 'put ''bnVtYmVyIj09dHlwZW9mIGk/dD1pOjA9PT10fHxYQShuLHQsaSwwLC0xPT09dHx8Mj09PXQ/ZVsrK3JdOm51bGwpfX1yZXR1cm4gbn1mdW5jdGlvbiBYQShuLGUsdCxyLGkpe2xldCBvPTAsYT1uLmxlbmd0aDtpZigtMT09PWUpYT0tMTtlbHNlIGZvcig7bzxuLmxlbmd0aDspe2NvbnN0IGw9''@;'; put 'put ''bltvKytdO2lmKCJudW1iZXIiPT10eXBlb2YgbCl7aWYobD09PWUpe2E9LTE7YnJlYWt9aWYobD5lKXthPW8tMTticmVha319fWZvcig7bzxuLmxlbmd0aDspe2NvbnN0IGw9bltvXTtpZigibnVtYmVyIj09dHlwZW9mIGwpYnJlYWs7aWYobD09PXQpcmV0dXJuIHZvaWQobnVsbCE9PWkmJihu''@;'; put 'put ''W28rMV09aSkpO28rKyxudWxsIT09aSYmbysrfS0xIT09YSYmKG4uc3BsaWNlKGEsMCxlKSxvPWErMSksbi5zcGxpY2UobysrLDAsdCksbnVsbCE9PWkmJm4uc3BsaWNlKG8rKywwLGkpfWZ1bmN0aW9uIFFBKG4pe3JldHVybi0xIT09bn1mdW5jdGlvbiB5NShuKXtyZXR1cm4gMzI3Njcmbn1m''@;'; put 'put ''dW5jdGlvbiBieShuLGUpe2xldCB0PWZ1bmN0aW9uIG9RKG4pe3JldHVybiBuPj4xNn0obikscj1lO2Zvcig7dD4wOylyPXJbMTRdLHQtLTtyZXR1cm4gcn1sZXQgSkE9ITA7ZnVuY3Rpb24gd1Mobil7Y29uc3QgZT1KQTtyZXR1cm4gSkE9bixlfWxldCBhUT0wO2NvbnN0IEZnPXt9O2Z1bmN0''@;'; put 'put ''aW9uIGVrKG4sZSl7Y29uc3QgdD1MSChuLGUpO2lmKC0xIT09dClyZXR1cm4gdDtjb25zdCByPWVbMV07ci5maXJzdENyZWF0ZVBhc3MmJihuLmluamVjdG9ySW5kZXg9ZS5sZW5ndGgsdGsoci5kYXRhLG4pLHRrKGUsbnVsbCksdGsoci5ibHVlcHJpbnQsbnVsbCkpO2NvbnN0IGk9Q1Mobixl''@;'; put 'put ''KSxvPW4uaW5qZWN0b3JJbmRleDtpZihRQShpKSl7Y29uc3QgYT15NShpKSxsPWJ5KGksZSksdT1sWzFdLmRhdGE7Zm9yKGxldCBnPTA7Zzw4O2crKyllW28rZ109bFthK2ddfHVbYStnXX1yZXR1cm4gZVtvKzhdPWksb31mdW5jdGlvbiB0ayhuLGUpe24ucHVzaCgwLDAsMCwwLDAsMCwwLDAs''@;'; put 'put ''ZSl9ZnVuY3Rpb24gTEgobixlKXtyZXR1cm4tMT09PW4uaW5qZWN0b3JJbmRleHx8bi5wYXJlbnQmJm4ucGFyZW50LmluamVjdG9ySW5kZXg9PT1uLmluamVjdG9ySW5kZXh8fG51bGw9PT1lW24uaW5qZWN0b3JJbmRleCs4XT8tMTpuLmluamVjdG9ySW5kZXh9ZnVuY3Rpb24gQ1MobixlKXtp''@;'; put 'put ''ZihuLnBhcmVudCYmLTEhPT1uLnBhcmVudC5pbmplY3RvckluZGV4KXJldHVybiBuLnBhcmVudC5pbmplY3RvckluZGV4O2xldCB0PTAscj1udWxsLGk9ZTtmb3IoO251bGwhPT1pOyl7aWYocj1EOShpKSxudWxsPT09cilyZXR1cm4tMTtpZih0KyssaT1pWzE0XSwtMSE9PXIuaW5qZWN0b3JJ''@;'; put 'put ''bmRleClyZXR1cm4gci5pbmplY3RvckluZGV4fHQ8PDE2fXJldHVybi0xfWZ1bmN0aW9uIG5rKG4sZSx0KXshZnVuY3Rpb24gc1EobixlLHQpe2xldCByOyJzdHJpbmciPT10eXBlb2YgdD9yPXQuY2hhckNvZGVBdCgwKXx8MDp0Lmhhc093blByb3BlcnR5KE8wKSYmKHI9dFtPMF0pLG51bGw9''@;'; put 'put ''PXImJihyPXRbTzBdPWFRKyspO2NvbnN0IGk9MjU1JnI7ZS5kYXRhW24rKGk+PjUpXXw9MTw8aX0obixlLHQpfWZ1bmN0aW9uIE9IKG4sZSx0KXtpZig4JnR8fHZvaWQgMCE9PW4pcmV0dXJuIG47emEoKX1mdW5jdGlvbiBOSChuLGUsdCxyKXtpZig4JnQmJnZvaWQgMD09PXImJihyPW51bGwp''@;'; put 'put ''LCEoMyZ0KSl7Y29uc3QgaT1uWzldLG89bHIodm9pZCAwKTt0cnl7cmV0dXJuIGk/aS5nZXQoZSxyLDgmdCk6aWkoZSxyLDgmdCl9ZmluYWxseXtscihvKX19cmV0dXJuIE9IKHIsMCx0KX1mdW5jdGlvbiBGSChuLGUsdCxyPTAsaSl7aWYobnVsbCE9PW4pe2lmKDIwNDgmZVsyXSYmISgyJnIp''@;'; put 'put ''KXtjb25zdCBhPWZ1bmN0aW9uIGZRKG4sZSx0LHIsaSl7bGV0IG89bixhPWU7Zm9yKDtudWxsIT09byYmbnVsbCE9PWEmJjIwNDgmYVsyXSYmIXYzKGEpOyl7Y29uc3QgbD1QSChvLGEsdCwyfHIsRmcpO2lmKGwhPT1GZylyZXR1cm4gbDtsZXQgdT1vLnBhcmVudDtpZighdSl7Y29uc3QgZz1h''@;'; put 'put ''WzIwXTtpZihnKXtjb25zdCBFPWcuZ2V0KHQsRmcscik7aWYoRSE9PUZnKXJldHVybiBFfXU9RDkoYSksYT1hWzE0XX1vPXV9cmV0dXJuIGl9KG4sZSx0LHIsRmcpO2lmKGEhPT1GZylyZXR1cm4gYX1jb25zdCBvPVBIKG4sZSx0LHIsRmcpO2lmKG8hPT1GZylyZXR1cm4gb31yZXR1cm4gTkgo''@;'; put 'put ''ZSx0LHIsaSl9ZnVuY3Rpb24gUEgobixlLHQscixpKXtjb25zdCBvPWZ1bmN0aW9uIGRRKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbi5jaGFyQ29kZUF0KDApfHwwO2NvbnN0IGU9bi5oYXNPd25Qcm9wZXJ0eShPMCk/bltPMF06dm9pZCAwO3JldHVybiJudW1iZXIiPT10eXBl''@;'; put 'put ''b2YgZT9lPj0wPzI1NSZlOmhROmV9KHQpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBvKXtpZighWVAoZSxuLHIpKXJldHVybiAxJnI/T0goaSwwLHIpOk5IKGUsdCxyLGkpO3RyeXtsZXQgYTtpZihhPW8ociksbnVsbCE9YXx8OCZyKXJldHVybiBhO3phKCl9ZmluYWxseXskUCgpfX1lbHNlIGlm''@;'; put 'put ''KCJudW1iZXIiPT10eXBlb2Ygbyl7bGV0IGE9bnVsbCxsPUxIKG4sZSksdT0tMSxnPTEmcj9lWzE1XVs1XTpudWxsO2ZvcigoLTE9PT1sfHw0JnIpJiYodT0tMT09PWw/Q1MobixlKTplW2wrOF0sLTEhPT11JiZWSChyLCExKT8oYT1lWzFdLGw9eTUodSksZT1ieSh1LGUpKTpsPS0xKTstMSE9''@;'; put 'put ''PWw7KXtjb25zdCBFPWVbMV07aWYoSEgobyxsLEUuZGF0YSkpe2NvbnN0IE89Y1EobCxlLHQsYSxyLGcpO2lmKE8hPT1GZylyZXR1cm4gT311PWVbbCs4XSwtMSE9PXUmJlZIKHIsZVsxXS5kYXRhW2wrOF09PT1nKSYmSEgobyxsLGUpPyhhPUUsbD15NSh1KSxlPWJ5KHUsZSkpOmw9LTF9fXJl''@;'; put 'put ''dHVybiBpfWZ1bmN0aW9uIGNRKG4sZSx0LHIsaSxvKXtjb25zdCBhPWVbMV0sbD1hLmRhdGFbbis4XSxFPUk5KGwsYSx0LG51bGw9PXI/d2YobCkmJkpBOnIhPWEmJiEhKDMmbC50eXBlKSwxJmkmJm89PT1sKTtyZXR1cm4gbnVsbCE9PUU/d3koZSxhLEUsbCxpKTpGZ31mdW5jdGlvbiBJOShu''@;'; put 'put ''LGUsdCxyLGkpe2NvbnN0IG89bi5wcm92aWRlckluZGV4ZXMsYT1lLmRhdGEsbD0xMDQ4NTc1Jm8sdT1uLmRpcmVjdGl2ZVN0YXJ0LEU9bz4+MjAsWj1pP2wrRTpuLmRpcmVjdGl2ZUVuZDtmb3IobGV0IGVlPXI/bDpsK0U7ZWU8WjtlZSsrKXtjb25zdCB2ZT1hW2VlXTtpZihlZTx1JiZ0PT09''@;'; put 'put ''dmV8fGVlPj11JiZ2ZS50eXBlPT09dClyZXR1cm4gZWV9aWYoaSl7Y29uc3QgZWU9YVt1XTtpZihlZSYmczEoZWUpJiZlZS50eXBlPT09dClyZXR1cm4gdX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB3eShuLGUsdCxyLGkpe2xldCBvPW5bdF07Y29uc3QgYT1lLmRhdGE7aWYobyBpbnN0YW5jZW9m''@;'; put 'put ''IF95KXtjb25zdCBsPW87aWYobC5yZXNvbHZpbmcpdGhyb3cgZnVuY3Rpb24gem8obil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5uYW1lfHxuLnRvU3RyaW5nKCk6Im9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT1uJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi50eXBlP24udHlwZS5uYW1l''@;'; put 'put ''fHxuLnR5cGUudG9TdHJpbmcoKTppYShuKX0oYVt0XSksTm0oKTtjb25zdCB1PXdTKGwuY2FuU2VlVmlld1Byb3ZpZGVycyk7bC5yZXNvbHZpbmc9ITA7Y29uc3QgTz1sLmluamVjdEltcGw/bHIobC5pbmplY3RJbXBsKTpudWxsO1lQKG4sciwwKTt0cnl7bz1uW3RdPWwuZmFjdG9yeSh2b2lk''@;'; put 'put ''IDAsaSxhLG4sciksZS5maXJzdENyZWF0ZVBhc3MmJnQ+PXIuZGlyZWN0aXZlU3RhcnQmJmZ1bmN0aW9uIG5RKG4sZSx0KXtjb25zdHtuZ09uQ2hhbmdlczpyLG5nT25Jbml0OmksbmdEb0NoZWNrOm99PWUudHlwZS5wcm90b3R5cGU7aWYocil7Y29uc3QgYT13SChlKTsodC5wcmVPcmRlckhv''@;'; put 'put ''b2tzPz89W10pLnB1c2gobixhKSwodC5wcmVPcmRlckNoZWNrSG9va3M/Pz1bXSkucHVzaChuLGEpfWkmJih0LnByZU9yZGVySG9va3M/Pz1bXSkucHVzaCgwLW4saSksbyYmKCh0LnByZU9yZGVySG9va3M/Pz1bXSkucHVzaChuLG8pLCh0LnByZU9yZGVyQ2hlY2tIb29rcz8/PVtdKS5wdXNo''@;'; put 'put ''KG4sbykpfSh0LGFbdF0sZSl9ZmluYWxseXtudWxsIT09TyYmbHIoTyksd1ModSksbC5yZXNvbHZpbmc9ITEsJFAoKX19cmV0dXJuIG99ZnVuY3Rpb24gSEgobixlLHQpe3JldHVybiEhKHRbZSsobj4+NSldJjE8PG4pfWZ1bmN0aW9uIFZIKG4sZSl7cmV0dXJuISgyJm58fDEmbiYmZSl9Y2xh''@;'; put 'put ''c3MgQ2R7X3ROb2RlO19sVmlldztjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX3ROb2RlPWUsdGhpcy5fbFZpZXc9dH1nZXQoZSx0LHIpe3JldHVybiBGSCh0aGlzLl90Tm9kZSx0aGlzLl9sVmlldyxlLGlvKHIpLHQpfX1mdW5jdGlvbiBoUSgpe3JldHVybiBuZXcgQ2QoeWkoKSxpdCgpKX1mdW5j''@;'; put 'put ''dGlvbiB3YShuKXtyZXR1cm4gVGYoKCk9Pntjb25zdCBlPW4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLHQ9ZVt0ZF18fEJIKGUpLHI9T2JqZWN0LnByb3RvdHlwZTtsZXQgaT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobi5wcm90b3R5cGUpLmNvbnN0cnVjdG9yO2Zvcig7aSYmaSE9PXI7KXtjb25z''@;'; put 'put ''dCBvPWlbdGRdfHxCSChpKTtpZihvJiZvIT09dClyZXR1cm4gbztpPU9iamVjdC5nZXRQcm90b3R5cGVPZihpKX1yZXR1cm4gbz0+bmV3IG99KX1mdW5jdGlvbiBCSChuKXtyZXR1cm4gVnIobik/KCk9Pntjb25zdCBlPUJIKGZhKG4pKTtyZXR1cm4gZSYmZSgpfTpuYyhuKX1mdW5jdGlvbiBE''@;'; put 'put ''OShuKXtjb25zdCBlPW5bMV0sdD1lLnR5cGU7cmV0dXJuIDI9PT10P2UuZGVjbFROb2RlOjE9PT10P25bNV06bnVsbH1mdW5jdGlvbiB3NShuKXtyZXR1cm4gZnVuY3Rpb24gbFEobixlKXtpZigiY2xhc3MiPT09ZSlyZXR1cm4gbi5jbGFzc2VzO2lmKCJzdHlsZSI9PT1lKXJldHVybiBuLnN0''@;'; put 'put ''eWxlcztjb25zdCB0PW4uYXR0cnM7aWYodCl7Y29uc3Qgcj10Lmxlbmd0aDtsZXQgaT0wO2Zvcig7aTxyOyl7Y29uc3Qgbz10W2ldO2lmKGs5KG8pKWJyZWFrO2lmKDA9PT1vKWkrPTI7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIG8pZm9yKGkrKztpPHImJiJzdHJpbmciPT10eXBlb2YgdFtp''@;'; put 'put ''XTspaSsrO2Vsc2V7aWYobz09PWUpcmV0dXJuIHRbaSsxXTtpKz0yfX19cmV0dXJuIG51bGx9KHlpKCksbil9ZnVuY3Rpb24gZ1EoKXtyZXR1cm4gQTgoeWkoKSxpdCgpKX1mdW5jdGlvbiBBOChuLGUpe3JldHVybiBuZXcgbm8oWWkobixlKSl9bGV0IG5vPSgoKT0+Y2xhc3MgbntuYXRpdmVF''@;'; put 'put ''bGVtZW50O2NvbnN0cnVjdG9yKHQpe3RoaXMubmF0aXZlRWxlbWVudD10fXN0YXRpYyBfX05HX0VMRU1FTlRfSURfXz1nUX0pKCk7ZnVuY3Rpb24gVUgobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBubz9uLm5hdGl2ZUVsZW1lbnQ6bn1mdW5jdGlvbiBtUSgpe3JldHVybiB0aGlzLl9yZXN1bHRz''@;'; put 'put ''W1N5bWJvbC5pdGVyYXRvcl0oKX1jbGFzcyBrOHtfZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk7ZGlydHk9ITA7X29uRGlydHk9dm9pZCAwO19yZXN1bHRzPVtdO19jaGFuZ2VzRGV0ZWN0ZWQ9ITE7X2NoYW5nZXM9dm9pZCAwO2xlbmd0aD0wO2ZpcnN0PXZvaWQgMDtsYXN0PXZvaWQgMDtnZXQg''@;'; put 'put ''Y2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzPz89bmV3IE1yfWNvbnN0cnVjdG9yKGU9ITEpe3RoaXMuX2VtaXREaXN0aW5jdENoYW5nZXNPbmx5PWV9Z2V0KGUpe3JldHVybiB0aGlzLl9yZXN1bHRzW2VdfW1hcChlKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5tYXAoZSl9ZmlsdGVyKGUp''@;'; put 'put ''e3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbHRlcihlKX1maW5kKGUpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbmQoZSl9cmVkdWNlKGUsdCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMucmVkdWNlKGUsdCl9Zm9yRWFjaChlKXt0aGlzLl9yZXN1bHRzLmZvckVhY2goZSl9c29tZShlKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fcmVzdWx0cy5zb21lKGUpfXRvQXJyYXkoKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zbGljZSgpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMudG9TdHJpbmcoKX1yZXNldChlLHQpe3RoaXMuZGlydHk9ITE7Y29uc3Qgcj1mdW5jdGlvbiBEdShuKXtyZXR1cm4gbi5mbGF0''@;'; put 'put ''KE51bWJlci5QT1NJVElWRV9JTkZJTklUWSl9KGUpOyh0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9IWZ1bmN0aW9uIHkyKG4sZSx0KXtpZihuLmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcj0wO3I8bi5sZW5ndGg7cisrKXtsZXQgaT1uW3JdLG89ZVtyXTtpZih0JiYoaT10KGkp''@;'; put 'put ''LG89dChvKSksbyE9PWkpcmV0dXJuITF9cmV0dXJuITB9KHRoaXMuX3Jlc3VsdHMscix0KSkmJih0aGlzLl9yZXN1bHRzPXIsdGhpcy5sZW5ndGg9ci5sZW5ndGgsdGhpcy5sYXN0PXJbdGhpcy5sZW5ndGgtMV0sdGhpcy5maXJzdD1yWzBdKX1ub3RpZnlPbkNoYW5nZXMoKXt2b2lkIDAhPT10''@;'; put 'put ''aGlzLl9jaGFuZ2VzJiYodGhpcy5fY2hhbmdlc0RldGVjdGVkfHwhdGhpcy5fZW1pdERpc3RpbmN0Q2hhbmdlc09ubHkpJiZ0aGlzLl9jaGFuZ2VzLm5leHQodGhpcyl9b25EaXJ0eShlKXt0aGlzLl9vbkRpcnR5PWV9c2V0RGlydHkoKXt0aGlzLmRpcnR5PSEwLHRoaXMuX29uRGlydHk/Ligp''@;'; put 'put ''fWRlc3Ryb3koKXt2b2lkIDAhPT10aGlzLl9jaGFuZ2VzJiYodGhpcy5fY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuX2NoYW5nZXMudW5zdWJzY3JpYmUoKSl9W1N5bWJvbC5pdGVyYXRvcl09bVF9ZnVuY3Rpb24gU3kobil7cmV0dXJuISgxMjgmfm4uZmxhZ3MpfXZhciBFeT1mdW5jdGlvbihu''@;'; put 'put ''KXtyZXR1cm4gbltuLk9uUHVzaD0wXT0iT25QdXNoIixuW24uRGVmYXVsdD0xXT0iRGVmYXVsdCIsbn0oRXl8fHt9KTtjb25zdCBhaz1uZXcgTWFwO2xldCBiUT0wO2Z1bmN0aW9uIE15KG4pe2FrLmRlbGV0ZShuWzE5XSl9Y29uc3QgdWs9Il9fbmdDb250ZXh0X18iO2Z1bmN0aW9uIGowKG4s''@;'; put 'put ''ZSl7enMoZSk/KG5bdWtdPWVbMTldLGZ1bmN0aW9uIENRKG4pe2FrLnNldChuWzE5XSxuKX0oZSkpOm5bdWtdPWV9ZnVuY3Rpb24gS0gobil7cmV0dXJuIFFIKG5bMTJdKX1mdW5jdGlvbiBYSChuKXtyZXR1cm4gUUgobls0XSl9ZnVuY3Rpb24gUUgobil7Zm9yKDtudWxsIT09biYmIVl1KG4p''@;'; put 'put ''OyluPW5bNF07cmV0dXJuIG59bGV0IHBrO2Z1bmN0aW9uIFM1KCl7aWYodm9pZCAwIT09cGspcmV0dXJuIHBrO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpcmV0dXJuIGRvY3VtZW50O3Rocm93IG5ldyBXbigyMTAsITEpfWNvbnN0IEw5PW5ldyBFcigiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFj''@;'; put 'put ''dG9yeTooKT0+RlF9KSxGUT0ibmciLHNWPW5ldyBFcigiIiksbGQ9bmV3IEVyKCIiLHtwcm92aWRlZEluOiJwbGF0Zm9ybSIsZmFjdG9yeTooKT0+InVua25vd24ifSksbFY9bmV3IEVyKCIiKSxjVj1uZXcgRXIoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PlM1KCkuYm9keT8u''@;'; put 'put ''cXVlcnlTZWxlY3RvcigiW25nQ3NwTm9uY2VdIik/LmdldEF0dHJpYnV0ZSgibmdDc3BOb25jZSIpfHxudWxsfSksV1E9bmV3IEVyKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4hMX0pLCRRPW5ldyBFcigiIik7ZnVuY3Rpb24gSVMobil7cmV0dXJuISgzMiZ+bi5mbGFncyl9''@;'; put 'put ''ZnVuY3Rpb24gVmsobixlKXtjb25zdCB0PW4uY29udGVudFF1ZXJpZXM7aWYobnVsbCE9PXQpe2NvbnN0IHI9ayhudWxsKTt0cnl7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKz0yKXtjb25zdCBhPXRbaSsxXTtpZigtMSE9PWEpe2NvbnN0IGw9bi5kYXRhW2FdO3JTKHRbaV0pLGwuY29udGVu''@;'; put 'put ''dFF1ZXJpZXMoMixlW2FdLGEpfX19ZmluYWxseXtrKHIpfX19ZnVuY3Rpb24gTFMobixlLHQpe3JTKDApO2NvbnN0IHI9ayhudWxsKTt0cnl7ZShuLHQpfWZpbmFsbHl7ayhyKX19ZnVuY3Rpb24gQmsobixlLHQpe2lmKHJkKGUpKXtjb25zdCByPWsobnVsbCk7dHJ5e2NvbnN0IG89ZS5kaXJl''@;'; put 'put ''Y3RpdmVFbmQ7Zm9yKGxldCBhPWUuZGlyZWN0aXZlU3RhcnQ7YTxvO2ErKyl7Y29uc3QgbD1uLmRhdGFbYV07bC5jb250ZW50UXVlcmllcyYmbC5jb250ZW50UXVlcmllcygxLHRbYV0sYSl9fWZpbmFsbHl7ayhyKX19fXZhciBRbT1mdW5jdGlvbihuKXtyZXR1cm4gbltuLkVtdWxhdGVkPTBd''@;'; put 'put ''PSJFbXVsYXRlZCIsbltuLk5vbmU9Ml09Ik5vbmUiLG5bbi5TaGFkb3dEb209M109IlNoYWRvd0RvbSIsbn0oUW18fHt9KTtjb25zdCBPVj17Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjoic3ZnIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCI6Im1hdGgifTtsZXQg''@;'; put 'put ''SFMsTHk7ZnVuY3Rpb24gTzgobil7cmV0dXJuIGZ1bmN0aW9uIFVrKCl7aWYodm9pZCAwPT09SFMmJihIUz1udWxsLElsLnRydXN0ZWRUeXBlcykpdHJ5e0hTPUlsLnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImFuZ3VsYXIiLHtjcmVhdGVIVE1MOm49Pm4sY3JlYXRlU2NyaXB0Om49Pm4s''@;'; put 'put ''Y3JlYXRlU2NyaXB0VVJMOm49Pm59KX1jYXRjaHt9cmV0dXJuIEhTfSgpPy5jcmVhdGVIVE1MKG4pfHxufWZ1bmN0aW9uIHprKCl7aWYodm9pZCAwPT09THkmJihMeT1udWxsLElsLnRydXN0ZWRUeXBlcykpdHJ5e0x5PUlsLnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImFuZ3VsYXIjdW5z''@;'; put 'put ''YWZlLWJ5cGFzcyIse2NyZWF0ZUhUTUw6bj0+bixjcmVhdGVTY3JpcHQ6bj0+bixjcmVhdGVTY3JpcHRVUkw6bj0+bn0pfWNhdGNoe31yZXR1cm4gTHl9ZnVuY3Rpb24gRlYobil7cmV0dXJuIHprKCk/LmNyZWF0ZUhUTUwobil8fG59ZnVuY3Rpb24gSFYobil7cmV0dXJuIHprKCk/LmNyZWF0''@;'; put 'put ''ZVNjcmlwdFVSTChuKXx8bn1jbGFzcyBUNXtjaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5O2NvbnN0cnVjdG9yKGUpe3RoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eT1lfXRvU3RyaW5nKCl7cmV0dXJuYFNhZmVWYWx1ZSBtdXN0IHVzZSBbcHJv''@;'; put 'put ''cGVydHldPWJpbmRpbmc6ICR7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5fSAoc2VlICR7VGl9KWB9fWNsYXNzIHBKIGV4dGVuZHMgVDV7Z2V0VHlwZU5hbWUoKXtyZXR1cm4iSFRNTCJ9fWNsYXNzIGdKIGV4dGVuZHMgVDV7Z2V0VHlwZU5hbWUoKXtyZXR1cm4i''@;'; put 'put ''U3R5bGUifX1jbGFzcyBtSiBleHRlbmRzIFQ1e2dldFR5cGVOYW1lKCl7cmV0dXJuIlNjcmlwdCJ9fWNsYXNzIHZKIGV4dGVuZHMgVDV7Z2V0VHlwZU5hbWUoKXtyZXR1cm4iVVJMIn19Y2xhc3MgVlYgZXh0ZW5kcyBUNXtnZXRUeXBlTmFtZSgpe3JldHVybiJSZXNvdXJjZVVSTCJ9fWZ1bmN0''@;'; put 'put ''aW9uIGsyKG4pe3JldHVybiBuIGluc3RhbmNlb2YgVDU/bi5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5Om59ZnVuY3Rpb24gSGcobixlKXtjb25zdCB0PWZ1bmN0aW9uIF9KKG4pe3JldHVybiBuIGluc3RhbmNlb2YgVDUmJm4uZ2V0VHlwZU5hbWUoKXx8bnVsbH0obik7''@;'; put 'put ''aWYobnVsbCE9dCYmdCE9PWUpe2lmKCJSZXNvdXJjZVVSTCI9PT10JiYiVVJMIj09PWUpcmV0dXJuITA7dGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBhIHNhZmUgJHtlfSwgZ290IGEgJHt0fSAoc2VlICR7VGl9KWApfXJldHVybiB0PT09ZX1jbGFzcyBTSntpbmVydERvY3VtZW50SGVscGVy''@;'; put 'put ''O2NvbnN0cnVjdG9yKGUpe3RoaXMuaW5lcnREb2N1bWVudEhlbHBlcj1lfWdldEluZXJ0Qm9keUVsZW1lbnQoZSl7ZT0iPGJvZHk+PHJlbW92ZT48L3JlbW92ZT4iK2U7dHJ5e2NvbnN0IHQ9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoTzgoZSksInRleHQvaHRtbCIp''@;'; put 'put ''LmJvZHk7cmV0dXJuIG51bGw9PT10P3RoaXMuaW5lcnREb2N1bWVudEhlbHBlci5nZXRJbmVydEJvZHlFbGVtZW50KGUpOih0LmZpcnN0Q2hpbGQ/LnJlbW92ZSgpLHQpfWNhdGNoe3JldHVybiBudWxsfX19Y2xhc3MgRUp7ZGVmYXVsdERvYztpbmVydERvY3VtZW50O2NvbnN0cnVjdG9yKGUp''@;'; put 'put ''e3RoaXMuZGVmYXVsdERvYz1lLHRoaXMuaW5lcnREb2N1bWVudD10aGlzLmRlZmF1bHREb2MuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJzYW5pdGl6YXRpb24taW5lcnQiKX1nZXRJbmVydEJvZHlFbGVtZW50KGUpe2NvbnN0IHQ9dGhpcy5pbmVydERvY3VtZW50LmNyZWF0''@;'; put 'put ''ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIHQuaW5uZXJIVE1MPU84KGUpLHR9fWNvbnN0IFVWPS9eKD8hamF2YXNjcmlwdDopKD86W2EtejAtOSsuLV0rOnxbXiY6XC8/I10qKD86W1wvPyNdfCQpKS9pO2Z1bmN0aW9uIFZTKG4pe3JldHVybihuPVN0cmluZyhuKSkubWF0Y2goVVYpP246''@;'; put 'put ''InVuc2FmZToiK259ZnVuY3Rpb24gdzMobil7Y29uc3QgZT17fTtmb3IoY29uc3QgdCBvZiBuLnNwbGl0KCIsIikpZVt0XT0hMDtyZXR1cm4gZX1mdW5jdGlvbiBWOSguLi5uKXtjb25zdCBlPXt9O2Zvcihjb25zdCB0IG9mIG4pZm9yKGNvbnN0IHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIp''@;'; put 'put ''JiYoZVtyXT0hMCk7cmV0dXJuIGV9Y29uc3QgV2s9dzMoImFyZWEsYnIsY29sLGhyLGltZyx3YnIiKSx6Vj13MygiY29sZ3JvdXAsZGQsZHQsbGkscCx0Ym9keSx0ZCx0Zm9vdCx0aCx0aGVhZCx0ciIpLFlrPXczKCJycCxydCIpLEI5PVY5KFdrLFY5KHpWLHczKCJhZGRyZXNzLGFydGljbGUs''@;'; put 'put ''YXNpZGUsYmxvY2txdW90ZSxjYXB0aW9uLGNlbnRlcixkZWwsZGV0YWlscyxkaWFsb2csZGlyLGRpdixkbCxmaWd1cmUsZmlnY2FwdGlvbixmb290ZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGVhZGVyLGhncm91cCxocixpbnMsbWFpbixtYXAsbWVudSxuYXYsb2wscHJlLHNlY3Rpb24sc3VtbWFy''@;'; put 'put ''eSx0YWJsZSx1bCIpKSxWOShZayx3MygiYSxhYmJyLGFjcm9ueW0sYXVkaW8sYixiZGksYmRvLGJpZyxicixjaXRlLGNvZGUsZGVsLGRmbixlbSxmb250LGksaW1nLGlucyxrYmQsbGFiZWwsbWFwLG1hcmsscGljdHVyZSxxLHJ1YnkscnAscnQscyxzYW1wLHNtYWxsLHNvdXJjZSxzcGFuLHN0''@;'; put 'put ''cmlrZSxzdHJvbmcsc3ViLHN1cCx0aW1lLHRyYWNrLHR0LHUsdmFyLHZpZGVvIikpLFY5KFlrLHpWKSksTjg9dzMoImJhY2tncm91bmQsY2l0ZSxocmVmLGl0ZW10eXBlLGxvbmdkZXNjLHBvc3RlcixzcmMseGxpbms6aHJlZiIpLEJTPVY5KE44LHczKCJhYmJyLGFjY2Vzc2tleSxhbGlnbixh''@;'; put 'put ''bHQsYXV0b3BsYXksYXhpcyxiZ2NvbG9yLGJvcmRlcixjZWxscGFkZGluZyxjZWxsc3BhY2luZyxjbGFzcyxjbGVhcixjb2xvcixjb2xzLGNvbHNwYW4sY29tcGFjdCxjb250cm9scyxjb29yZHMsZGF0ZXRpbWUsZGVmYXVsdCxkaXIsZG93bmxvYWQsZmFjZSxoZWFkZXJzLGhlaWdodCxoaWRk''@;'; put 'put ''ZW4saHJlZmxhbmcsaHNwYWNlLGlzbWFwLGl0ZW1zY29wZSxpdGVtcHJvcCxraW5kLGxhYmVsLGxhbmcsbGFuZ3VhZ2UsbG9vcCxtZWRpYSxtdXRlZCxub2hyZWYsbm93cmFwLG9wZW4scHJlbG9hZCxyZWwscmV2LHJvbGUscm93cyxyb3dzcGFuLHJ1bGVzLHNjb3BlLHNjcm9sbGluZyxzaGFw''@;'; put 'put ''ZSxzaXplLHNpemVzLHNwYW4sc3JjbGFuZyxzcmNzZXQsc3RhcnQsc3VtbWFyeSx0YWJpbmRleCx0YXJnZXQsdGl0bGUsdHJhbnNsYXRlLHR5cGUsdXNlbWFwLHZhbGlnbix2YWx1ZSx2c3BhY2Usd2lkdGgiKSx3MygiYXJpYS1hY3RpdmVkZXNjZW5kYW50LGFyaWEtYXRvbWljLGFyaWEtYXV0''@;'; put 'put ''b2NvbXBsZXRlLGFyaWEtYnVzeSxhcmlhLWNoZWNrZWQsYXJpYS1jb2xjb3VudCxhcmlhLWNvbGluZGV4LGFyaWEtY29sc3BhbixhcmlhLWNvbnRyb2xzLGFyaWEtY3VycmVudCxhcmlhLWRlc2NyaWJlZGJ5LGFyaWEtZGV0YWlscyxhcmlhLWRpc2FibGVkLGFyaWEtZHJvcGVmZmVjdCxhcmlh''@;'; put 'put ''LWVycm9ybWVzc2FnZSxhcmlhLWV4cGFuZGVkLGFyaWEtZmxvd3RvLGFyaWEtZ3JhYmJlZCxhcmlhLWhhc3BvcHVwLGFyaWEtaGlkZGVuLGFyaWEtaW52YWxpZCxhcmlhLWtleXNob3J0Y3V0cyxhcmlhLWxhYmVsLGFyaWEtbGFiZWxsZWRieSxhcmlhLWxldmVsLGFyaWEtbGl2ZSxhcmlhLW1v''@;'; put 'put ''ZGFsLGFyaWEtbXVsdGlsaW5lLGFyaWEtbXVsdGlzZWxlY3RhYmxlLGFyaWEtb3JpZW50YXRpb24sYXJpYS1vd25zLGFyaWEtcGxhY2Vob2xkZXIsYXJpYS1wb3NpbnNldCxhcmlhLXByZXNzZWQsYXJpYS1yZWFkb25seSxhcmlhLXJlbGV2YW50LGFyaWEtcmVxdWlyZWQsYXJpYS1yb2xlZGVz''@;'; put 'put ''Y3JpcHRpb24sYXJpYS1yb3djb3VudCxhcmlhLXJvd2luZGV4LGFyaWEtcm93c3BhbixhcmlhLXNlbGVjdGVkLGFyaWEtc2V0c2l6ZSxhcmlhLXNvcnQsYXJpYS12YWx1ZW1heCxhcmlhLXZhbHVlbWluLGFyaWEtdmFsdWVub3csYXJpYS12YWx1ZXRleHQiKSksQUo9dzMoInNjcmlwdCxzdHls''@;'; put 'put ''ZSx0ZW1wbGF0ZSIpO2NsYXNzIGtKe3Nhbml0aXplZFNvbWV0aGluZz0hMTtidWY9W107c2FuaXRpemVDaGlsZHJlbihlKXtsZXQgdD1lLmZpcnN0Q2hpbGQscj0hMCxpPVtdO2Zvcig7dDspaWYodC5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFP3I9dGhpcy5zdGFydEVsZW1lbnQodCk6''@;'; put 'put ''dC5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFP3RoaXMuY2hhcnModC5ub2RlVmFsdWUpOnRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLHImJnQuZmlyc3RDaGlsZClpLnB1c2godCksdD1ESih0KTtlbHNlIGZvcig7dDspe3Qubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmdGhpcy5l''@;'; put 'put ''bmRFbGVtZW50KHQpO2xldCBvPUlKKHQpO2lmKG8pe3Q9bzticmVha310PWkucG9wKCl9cmV0dXJuIHRoaXMuYnVmLmpvaW4oIiIpfXN0YXJ0RWxlbWVudChlKXtjb25zdCB0PU95KGUpLnRvTG93ZXJDYXNlKCk7aWYoIUI5Lmhhc093blByb3BlcnR5KHQpKXJldHVybiB0aGlzLnNhbml0aXpl''@;'; put 'put ''ZFNvbWV0aGluZz0hMCwhQUouaGFzT3duUHJvcGVydHkodCk7dGhpcy5idWYucHVzaCgiPCIpLHRoaXMuYnVmLnB1c2godCk7Y29uc3Qgcj1lLmF0dHJpYnV0ZXM7Zm9yKGxldCBpPTA7aTxyLmxlbmd0aDtpKyspe2NvbnN0IG89ci5pdGVtKGkpLGE9by5uYW1lLGw9YS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''O2lmKCFCUy5oYXNPd25Qcm9wZXJ0eShsKSl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITA7Y29udGludWV9bGV0IHU9by52YWx1ZTtOOFtsXSYmKHU9VlModSkpLHRoaXMuYnVmLnB1c2goIiAiLGEsJz0iJyxaVih1KSwnIicpfXJldHVybiB0aGlzLmJ1Zi5wdXNoKCI+IiksITB9ZW5kRWxl''@;'; put 'put ''bWVudChlKXtjb25zdCB0PU95KGUpLnRvTG93ZXJDYXNlKCk7QjkuaGFzT3duUHJvcGVydHkodCkmJiFXay5oYXNPd25Qcm9wZXJ0eSh0KSYmKHRoaXMuYnVmLnB1c2goIjwvIiksdGhpcy5idWYucHVzaCh0KSx0aGlzLmJ1Zi5wdXNoKCI+IikpfWNoYXJzKGUpe3RoaXMuYnVmLnB1c2goWlYo''@;'; put 'put ''ZSkpfX1mdW5jdGlvbiBJSihuKXtjb25zdCBlPW4ubmV4dFNpYmxpbmc7aWYoZSYmbiE9PWUucHJldmlvdXNTaWJsaW5nKXRocm93IFlWKGUpO3JldHVybiBlfWZ1bmN0aW9uIERKKG4pe2NvbnN0IGU9bi5maXJzdENoaWxkO2lmKGUmJmZ1bmN0aW9uIFJKKG4sZSl7cmV0dXJuKG4uY29tcGFy''@;'; put 'put ''ZURvY3VtZW50UG9zaXRpb24oZSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpIT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQll9KG4sZSkpdGhyb3cgWVYoZSk7cmV0dXJuIGV9ZnVuY3Rpb24gT3kobil7Y29uc3QgZT1uLm5vZGVOYW1lO3JldHVybiJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgZT9lOiJGT1JNIn1mdW5jdGlvbiBZVihuKXtyZXR1cm4gbmV3IEVycm9yKGBGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIGNsb2JiZXJlZDogJHtuLm91dGVySFRNTH1gKX1jb25zdCBMSj0vW1x1RDgwMC1cdURCRkZdW1x1REMw''@;'; put 'put ''MC1cdURGRkZdL2csT0o9LyhbXlwjLX4gfCFdKS9nO2Z1bmN0aW9uIFpWKG4pe3JldHVybiBuLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKExKLGZ1bmN0aW9uKGUpe3JldHVybiImIyIrKDEwMjQqKGUuY2hhckNvZGVBdCgwKS01NTI5NikrKGUuY2hhckNvZGVBdCgxKS01NjMyMCkr''@;'; put 'put ''NjU1MzYpKyI7In0pLnJlcGxhY2UoT0osZnVuY3Rpb24oZSl7cmV0dXJuIiYjIitlLmNoYXJDb2RlQXQoMCkrIjsifSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iil9bGV0IGpTO2Z1bmN0aW9uIEdWKG4sZSl7bGV0IHQ9bnVsbDt0cnl7alM9alN8fGZ1bmN0aW9u''@;'; put 'put ''IGpWKG4pe2NvbnN0IGU9bmV3IEVKKG4pO3JldHVybiBmdW5jdGlvbiBNSigpe3RyeXtyZXR1cm4hIShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKE84KCIiKSwidGV4dC9odG1sIil9Y2F0Y2h7cmV0dXJuITF9fSgpP25ldyBTSihlKTplfShuKTtsZXQgcj1lP1N0cmlu''@;'; put 'put ''ZyhlKToiIjt0PWpTLmdldEluZXJ0Qm9keUVsZW1lbnQocik7bGV0IGk9NSxvPXI7ZG97aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBpbnB1dCBpcyB1bnN0YWJsZSIpO2ktLSxyPW8sbz10LmlubmVySFRNTCx0PWpTLmdldElu''@;'; put 'put ''ZXJ0Qm9keUVsZW1lbnQocil9d2hpbGUociE9PW8pO3JldHVybiBPOCgobmV3IGtKKS5zYW5pdGl6ZUNoaWxkcmVuKFprKHQpfHx0KSl9ZmluYWxseXtpZih0KXtjb25zdCByPVprKHQpfHx0O2Zvcig7ci5maXJzdENoaWxkOylyLmZpcnN0Q2hpbGQucmVtb3ZlKCl9fX1mdW5jdGlvbiBaayhu''@;'; put 'put ''KXtyZXR1cm4iY29udGVudCJpbiBuJiZmdW5jdGlvbiBOSihuKXtyZXR1cm4gbi5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiYiVEVNUExBVEUiPT09bi5ub2RlTmFtZX0obik/bi5jb250ZW50Om51bGx9Y29uc3QgRko9L14+fF4tPnw8IS0tfC0tPnwtLSE+fDwhLSQvZyxQSj0vKDx8''@;'; put 'put ''PikvZztmdW5jdGlvbiAkayhuLGUpe3JldHVybiBuLmNyZWF0ZUNvbW1lbnQoZnVuY3Rpb24gJFYobil7cmV0dXJuIG4ucmVwbGFjZShGSixlPT5lLnJlcGxhY2UoUEosIlx1MjAwYiQxXHUyMDBiIikpfShlKSl9ZnVuY3Rpb24gVVMobixlLHQpe3JldHVybiBuLmNyZWF0ZUVsZW1lbnQoZSx0''@;'; put 'put ''KX1mdW5jdGlvbiBGOChuLGUsdCxyLGkpe24uaW5zZXJ0QmVmb3JlKGUsdCxyLGkpfWZ1bmN0aW9uIEtWKG4sZSx0KXtuLmFwcGVuZENoaWxkKGUsdCl9ZnVuY3Rpb24gWFYobixlLHQscixpKXtudWxsIT09cj9GOChuLGUsdCxyLGkpOktWKG4sZSx0KX1mdW5jdGlvbiBOeShuLGUsdCxyKXtu''@;'; put 'put ''LnJlbW92ZUNoaWxkKG51bGwsZSx0LHIpfWZ1bmN0aW9uIEpWKG4sZSx0KXtjb25zdHttZXJnZWRBdHRyczpyLGNsYXNzZXM6aSxzdHlsZXM6b309dDtudWxsIT09ciYmZnVuY3Rpb24geXkobixlLHQpe2xldCByPTA7Zm9yKDtyPHQubGVuZ3RoOyl7Y29uc3QgaT10W3JdO2lmKCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgaSl7aWYoMCE9PWkpYnJlYWs7cisrO2NvbnN0IG89dFtyKytdLGE9dFtyKytdLGw9dFtyKytdO24uc2V0QXR0cmlidXRlKGUsYSxsLG8pfWVsc2V7Y29uc3Qgbz1pLGE9dFsrK3JdO1JIKG8pP24uc2V0UHJvcGVydHkoZSxvLGEpOm4uc2V0QXR0cmlidXRlKGUsbyxhKSxyKyt9''@;'; put 'put ''fX0obixlLHIpLG51bGwhPT1pJiZmdW5jdGlvbiBCSihuLGUsdCl7IiI9PT10P24ucmVtb3ZlQXR0cmlidXRlKGUsImNsYXNzIik6bi5zZXRBdHRyaWJ1dGUoZSwiY2xhc3MiLHQpfShuLGUsaSksbnVsbCE9PW8mJmZ1bmN0aW9uIFZKKG4sZSx0KXtuLnNldEF0dHJpYnV0ZShlLCJzdHlsZSIs''@;'; put 'put ''dCl9KG4sZSxvKX1mdW5jdGlvbiB4NShuLGUsdCl7aWYodm9pZCAwIT09ZSYmdm9pZCAwIT09dCYmaUIoZSx0KSE9PSRlLkhUTUwpcmV0dXJuIG47Y29uc3Qgcj1GeSgpO3JldHVybiByP0ZWKHIuc2FuaXRpemUoJGUuSFRNTCxuKXx8IiIpOkhnKG4sIkhUTUwiKT9GVihrMihuKSk6R1YoUzUo''@;'; put 'put ''KSxpYShuKSl9ZnVuY3Rpb24gS2sobil7Y29uc3QgZT1GeSgpO3JldHVybiBlP2Uuc2FuaXRpemUoJGUuVVJMLG4pfHwiIjpIZyhuLCJVUkwiKT9rMihuKTpWUyhpYShuKSl9ZnVuY3Rpb24gWGsobil7Y29uc3QgZT1GeSgpO2lmKGUpcmV0dXJuIEhWKGUuc2FuaXRpemUoJGUuUkVTT1VSQ0Vf''@;'; put 'put ''VVJMLG4pfHwiIik7aWYoSGcobiwiUmVzb3VyY2VVUkwiKSlyZXR1cm4gSFYoazIobikpO3Rocm93IG5ldyBXbig5MDQsITEpfWZ1bmN0aW9uIHJCKG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gekoobixlKXtzd2l0Y2goaUIobixlKSl7Y2FzZSAkZS5SRVNPVVJDRV9VUkw6cmV0dXJuIFhrO2Nh''@;'; put 'put ''c2UgJGUuVVJMOnJldHVybiBLaztkZWZhdWx0OnJldHVybiBudWxsfX0oZSx0KT8uKG4pPz9ufWZ1bmN0aW9uIEZ5KCl7Y29uc3Qgbj1pdCgpO3JldHVybiBuJiZuWzEwXS5zYW5pdGl6ZXJ9ZnVuY3Rpb24gaUIobixlKXtjb25zdFt0LHJdPWZ1bmN0aW9uIG9CKG4pe2NvbnN0IGU9ZnVuY3Rp''@;'; put 'put ''b24gcWsobixlPSEwKXtpZigiOiIhPW5bMF0pcmV0dXJuW251bGwsbl07Y29uc3QgdD1uLmluZGV4T2YoIjoiLDEpO2lmKC0xPT09dCl7aWYoZSl0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGZvcm1hdCAiJHtufSIgZXhwZWN0aW5nICI6bmFtZXNwYWNlOm5hbWUiYCk7cmV0dXJuW251''@;'; put 'put ''bGwsbl19cmV0dXJuW24uc2xpY2UoMSx0KSxuLnNsaWNlKHQrMSldfShuPW4udG9Mb3dlckNhc2UoKSwhMSk7aWYoZVswXSlyZXR1cm4gZTtjb25zdCByPS0xPT09b2goKT9udWxsOnkzKCk7bGV0IGk9cj8ubmFtZXNwYWNlO2lmKCIjaG9zdCI9PT1uJiYyPT09cj8udHlwZSl7Y29uc3Qgbz1Z''@;'; put 'put ''aShyLGl0KCkpO2lmKG8udGFnTmFtZSYmKG49by50YWdOYW1lLnRvTG93ZXJDYXNlKCkpLG51bGw9PWkpe2NvbnN0IGE9by5uYW1lc3BhY2VVUkk7aT1hJiZPVlthXX19cmV0dXJuW2ksbl19KG4pO3JldHVybiBwaShyLGUsdCl9ZnVuY3Rpb24gUWsobil7cmV0dXJuIG4ub3duZXJEb2N1bWVu''@;'; put 'put ''dC5kZWZhdWx0Vmlld31mdW5jdGlvbiBQOChuKXtyZXR1cm4gbi5vd25lckRvY3VtZW50fWZ1bmN0aW9uIFZnKG4pe3JldHVybiBuIGluc3RhbmNlb2YgRnVuY3Rpb24/bigpOm59ZnVuY3Rpb24gWEoobixlLHQpe2xldCByPW4ubGVuZ3RoO2Zvcig7Oyl7Y29uc3QgaT1uLmluZGV4T2YoZSx0''@;'; put 'put ''KTtpZigtMT09PWkpcmV0dXJuIGk7aWYoMD09PWl8fG4uY2hhckNvZGVBdChpLTEpPD0zMil7Y29uc3Qgbz1lLmxlbmd0aDtpZihpK289PT1yfHxuLmNoYXJDb2RlQXQoaStvKTw9MzIpcmV0dXJuIGl9dD1pKzF9fWNvbnN0IGhCPSJuZy10ZW1wbGF0ZSI7ZnVuY3Rpb24gSmsobixlLHQscil7''@;'; put 'put ''bGV0IGk9MDtpZihyKXtmb3IoO2k8ZS5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgZVtpXTtpKz0yKWlmKCJjbGFzcyI9PT1lW2ldJiYtMSE9PVhKKGVbaSsxXS50b0xvd2VyQ2FzZSgpLHQsMCkpcmV0dXJuITB9ZWxzZSBpZihQeShuKSlyZXR1cm4hMTtpZihpPWUuaW5kZXhPZigxLGkpLGk+''@;'; put 'put ''LTEpe2xldCBvO2Zvcig7KytpPGUubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mKG89ZVtpXSk7KWlmKG8udG9Mb3dlckNhc2UoKT09PXQpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gUHkobil7cmV0dXJuIDQ9PT1uLnR5cGUmJm4udmFsdWUhPT1oQn1mdW5jdGlvbiBRSihuLGUsdCl7cmV0''@;'; put 'put ''dXJuIGU9PT0oNCE9PW4udHlwZXx8dD9uLnZhbHVlOmhCKX1mdW5jdGlvbiBKSihuLGUsdCl7bGV0IHI9NDtjb25zdCBpPW4uYXR0cnMsbz1udWxsIT09aT9mdW5jdGlvbiBuZWUobil7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspaWYoazkobltlXSkpcmV0dXJuIGU7cmV0dXJuIG4ubGVu''@;'; put 'put ''Z3RofShpKTowO2xldCBhPSExO2ZvcihsZXQgbD0wO2w8ZS5sZW5ndGg7bCsrKXtjb25zdCB1PWVbbF07aWYoIm51bWJlciIhPXR5cGVvZiB1KXtpZighYSlpZig0JnIpe2lmKHI9MnwxJnIsIiIhPT11JiYhUUoobix1LHQpfHwiIj09PXUmJjE9PT1lLmxlbmd0aCl7aWYod3AocikpcmV0dXJu''@;'; put 'put ''ITE7YT0hMH19ZWxzZSBpZig4JnIpe2lmKG51bGw9PT1pfHwhSmsobixpLHUsdCkpe2lmKHdwKHIpKXJldHVybiExO2E9ITB9fWVsc2V7Y29uc3QgZz1lWysrbF0sRT1lZWUodSxpLFB5KG4pLHQpO2lmKC0xPT09RSl7aWYod3AocikpcmV0dXJuITE7YT0hMDtjb250aW51ZX1pZigiIiE9PWcp''@;'; put 'put ''e2xldCBPO2lmKE89RT5vPyIiOmlbRSsxXS50b0xvd2VyQ2FzZSgpLDImciYmZyE9PU8pe2lmKHdwKHIpKXJldHVybiExO2E9ITB9fX19ZWxzZXtpZighYSYmIXdwKHIpJiYhd3AodSkpcmV0dXJuITE7aWYoYSYmd3AodSkpY29udGludWU7YT0hMSxyPXV8MSZyfX1yZXR1cm4gd3Aocil8fGF9''@;'; put 'put ''ZnVuY3Rpb24gd3Aobil7cmV0dXJuISgxJm4pfWZ1bmN0aW9uIGVlZShuLGUsdCxyKXtpZihudWxsPT09ZSlyZXR1cm4tMTtsZXQgaT0wO2lmKHJ8fCF0KXtsZXQgbz0hMTtmb3IoO2k8ZS5sZW5ndGg7KXtjb25zdCBhPWVbaV07aWYoYT09PW4pcmV0dXJuIGk7aWYoMz09PWF8fDY9PT1hKW89''@;'; put 'put ''ITA7ZWxzZXtpZigxPT09YXx8Mj09PWEpe2xldCBsPWVbKytpXTtmb3IoOyJzdHJpbmciPT10eXBlb2YgbDspbD1lWysraV07Y29udGludWV9aWYoND09PWEpYnJlYWs7aWYoMD09PWEpe2krPTQ7Y29udGludWV9fWkrPW8/MToyfXJldHVybi0xfXJldHVybiBmdW5jdGlvbiByZWUobixlKXts''@;'; put 'put ''ZXQgdD1uLmluZGV4T2YoNCk7aWYodD4tMSlmb3IodCsrO3Q8bi5sZW5ndGg7KXtjb25zdCByPW5bdF07aWYoIm51bWJlciI9PXR5cGVvZiByKXJldHVybi0xO2lmKHI9PT1lKXJldHVybiB0O3QrK31yZXR1cm4tMX0oZSxuKX1mdW5jdGlvbiBmQihuLGUsdD0hMSl7Zm9yKGxldCByPTA7cjxl''@;'; put 'put ''Lmxlbmd0aDtyKyspaWYoSkoobixlW3JdLHQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGllZShuLGUpe2U6Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2NvbnN0IHI9ZVt0XTtpZihuLmxlbmd0aD09PXIubGVuZ3RoKXtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKylpZihuW2ld''@;'; put 'put ''IT09cltpXSljb250aW51ZSBlO3JldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBwQihuLGUpe3JldHVybiBuPyI6bm90KCIrZS50cmltKCkrIikiOmV9ZnVuY3Rpb24gb2VlKG4pe2xldCBlPW5bMF0sdD0xLHI9MixpPSIiLG89ITE7Zm9yKDt0PG4ubGVuZ3RoOyl7bGV0IGE9blt0XTtpZigi''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIGEpaWYoMiZyKXtjb25zdCBsPW5bKyt0XTtpKz0iWyIrYSsobC5sZW5ndGg+MD8nPSInK2wrJyInOiIiKSsiXSJ9ZWxzZSA4JnI/aSs9Ii4iK2E6NCZyJiYoaSs9IiAiK2EpO2Vsc2UiIiE9PWkmJiF3cChhKSYmKGUrPXBCKG8saSksaT0iIikscj1hLG89b3x8IXdw''@;'; put 'put ''KHIpO3QrK31yZXR1cm4iIiE9PWkmJihlKz1wQihvLGkpKSxlfWNvbnN0IE5jPXt9O2Z1bmN0aW9uIGdCKG4sZSx0LHIsaSxvLGEsbCx1LGcsRSl7Y29uc3QgTz0yNytyLFo9TytpLGVlPWZ1bmN0aW9uIGxlZShuLGUpe2NvbnN0IHQ9W107Zm9yKGxldCByPTA7cjxlO3IrKyl0LnB1c2gocjxu''@;'; put 'put ''P251bGw6TmMpO3JldHVybiB0fShPLFopLHZlPSJmdW5jdGlvbiI9PXR5cGVvZiBnP2coKTpnO3JldHVybiBlZVsxXT17dHlwZTpuLGJsdWVwcmludDplZSx0ZW1wbGF0ZTp0LHF1ZXJpZXM6bnVsbCx2aWV3UXVlcnk6bCxkZWNsVE5vZGU6ZSxkYXRhOmVlLnNsaWNlKCkuZmlsbChudWxsLE8p''@;'; put 'put ''LGJpbmRpbmdTdGFydEluZGV4Ok8sZXhwYW5kb1N0YXJ0SW5kZXg6Wixob3N0QmluZGluZ09wQ29kZXM6bnVsbCxmaXJzdENyZWF0ZVBhc3M6ITAsZmlyc3RVcGRhdGVQYXNzOiEwLHN0YXRpY1ZpZXdRdWVyaWVzOiExLHN0YXRpY0NvbnRlbnRRdWVyaWVzOiExLHByZU9yZGVySG9va3M6bnVs''@;'; put 'put ''bCxwcmVPcmRlckNoZWNrSG9va3M6bnVsbCxjb250ZW50SG9va3M6bnVsbCxjb250ZW50Q2hlY2tIb29rczpudWxsLHZpZXdIb29rczpudWxsLHZpZXdDaGVja0hvb2tzOm51bGwsZGVzdHJveUhvb2tzOm51bGwsY2xlYW51cDpudWxsLGNvbnRlbnRRdWVyaWVzOm51bGwsY29tcG9uZW50czpu''@;'; put 'put ''dWxsLGRpcmVjdGl2ZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiBvP28oKTpvLHBpcGVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2YgYT9hKCk6YSxmaXJzdENoaWxkOm51bGwsc2NoZW1hczp1LGNvbnN0czp2ZSxpbmNvbXBsZXRlRmlyc3RQYXNzOiExLHNzcklkOkV9fWZ1bmN0aW9u''@;'; put 'put ''IFdTKG4sZSx0LHIsaSxvLGEsbCx1LGcsRSl7Y29uc3QgTz1lLmJsdWVwcmludC5zbGljZSgpO3JldHVybiBPWzBdPWksT1syXT0xMjI4fHIsKG51bGwhPT1nfHxuJiYyMDQ4Jm5bMl0pJiYoT1syXXw9MjA0OCksVWQoTyksT1szXT1PWzE0XT1uLE9bOF09dCxPWzEwXT1hfHxuJiZuWzEwXSxP''@;'; put 'put ''WzExXT1sfHxuJiZuWzExXSxPWzldPXV8fG4mJm5bOV18fG51bGwsT1s1XT1vLE9bMTldPWZ1bmN0aW9uIHdRKCl7cmV0dXJuIGJRKyt9KCksT1s2XT1FLE9bMjBdPWcsT1sxNV09Mj09ZS50eXBlP25bMTVdOk8sT31mdW5jdGlvbiBlUihuKXtsZXQgZT0xNjtyZXR1cm4gbi5zaWduYWxzP2U9''@;'; put 'put ''NDA5NjpuLm9uUHVzaCYmKGU9NjQpLGV9ZnVuY3Rpb24gSHkobixlLHQscil7aWYoMD09PXQpcmV0dXJuLTE7Y29uc3QgaT1lLmxlbmd0aDtmb3IobGV0IG89MDtvPHQ7bysrKWUucHVzaChyKSxuLmJsdWVwcmludC5wdXNoKHIpLG4uZGF0YS5wdXNoKG51bGwpO3JldHVybiBpfWZ1bmN0aW9u''@;'; put 'put ''IHRSKG4sZSl7cmV0dXJuIG5bMTJdP25bMTNdWzRdPWU6blsxMl09ZSxuWzEzXT1lLGV9ZnVuY3Rpb24gaWUobj0xKXtfQihGdCgpLGl0KCksb2goKStuLCExKX1mdW5jdGlvbiBfQihuLGUsdCxyKXtpZighcilpZigzJn5lWzJdKXtjb25zdCBvPW4ucHJlT3JkZXJIb29rcztudWxsIT09byYm''@;'; put 'put ''eVMoZSxvLDAsdCl9ZWxzZXtjb25zdCBvPW4ucHJlT3JkZXJDaGVja0hvb2tzO251bGwhPT1vJiZfUyhlLG8sdCl9WW0odCl9dmFyIFlTPWZ1bmN0aW9uKG4pe3JldHVybiBuW24uTm9uZT0wXT0iTm9uZSIsbltuLlNpZ25hbEJhc2VkPTFdPSJTaWduYWxCYXNlZCIsbltuLkhhc0RlY29yYXRv''@;'; put 'put ''cklucHV0VHJhbnNmb3JtPTJdPSJIYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSIsbn0oWVN8fHt9KTtmdW5jdGlvbiBWeShuLGUsdCxyKXtjb25zdCBpPWsobnVsbCk7dHJ5e2NvbnN0W28sYSxsXT1uLmlucHV0c1t0XTtsZXQgdT1udWxsOzAhPT0oYSZZUy5TaWduYWxCYXNlZCkmJih1PWVb''@;'; put 'put ''b11bYl0pLG51bGwhPT11JiZ2b2lkIDAhPT11LnRyYW5zZm9ybUZuP3I9dS50cmFuc2Zvcm1GbihyKTpudWxsIT09bCYmKHI9bC5jYWxsKGUscikpLG51bGwhPT1uLnNldElucHV0P24uc2V0SW5wdXQoZSx1LHIsdCxvKTpiSChlLHUsbyxyKX1maW5hbGx5e2soaSl9fXZhciBBNT1mdW5jdGlv''@;'; put 'put ''bihuKXtyZXR1cm4gbltuLkltcG9ydGFudD0xXT0iSW1wb3J0YW50IixuW24uRGFzaENhc2U9Ml09IkRhc2hDYXNlIixufShBNXx8e30pO2Z1bmN0aW9uIHJSKG4sZSl7cmV0dXJuIHVuZGVmaW5lZChuLGUpfWNvbnN0IGs1PW5ldyBTZXQ7dmFyICRTPWZ1bmN0aW9uKG4pe3JldHVybiBuW24u''@;'; put 'put ''Q0hBTkdFX0RFVEVDVElPTj0wXT0iQ0hBTkdFX0RFVEVDVElPTiIsbltuLkFGVEVSX05FWFRfUkVOREVSPTFdPSJBRlRFUl9ORVhUX1JFTkRFUiIsbn0oJFN8fHt9KTtjb25zdCB6OT1uZXcgRXIoIiIpLHdCPW5ldyBTZXQ7ZnVuY3Rpb24gajEobil7d0IuaGFzKG4pfHwod0IuYWRkKG4pLHBl''@;'; put 'put ''cmZvcm1hbmNlPy5tYXJrPy4oIm1hcmtfZmVhdHVyZV91c2FnZSIse2RldGFpbDp7ZmVhdHVyZTpufX0pKX1jb25zdCBpUj0hMSxLcj1jbGFzcyBwZWUgZXh0ZW5kcyBNcntfX2lzQXN5bmM7ZGVzdHJveVJlZj12b2lkIDA7cGVuZGluZ1Rhc2tzPXZvaWQgMDtjb25zdHJ1Y3RvcihlPSExKXtz''@;'; put 'put ''dXBlcigpLHRoaXMuX19pc0FzeW5jPWUsRWcoKSYmKHRoaXMuZGVzdHJveVJlZj1zbihNMix7b3B0aW9uYWw6ITB9KT8/dm9pZCAwLHRoaXMucGVuZGluZ1Rhc2tzPXNuKHM1LHtvcHRpb25hbDohMH0pPz92b2lkIDApfWVtaXQoZSl7Y29uc3QgdD1rKG51bGwpO3RyeXtzdXBlci5uZXh0KGUp''@;'; put 'put ''fWZpbmFsbHl7ayh0KX19c3Vic2NyaWJlKGUsdCxyKXtsZXQgaT1lLG89dHx8KCgpPT5udWxsKSxhPXI7aWYoZSYmIm9iamVjdCI9PXR5cGVvZiBlKXtjb25zdCB1PWU7aT11Lm5leHQ/LmJpbmQodSksbz11LmVycm9yPy5iaW5kKHUpLGE9dS5jb21wbGV0ZT8uYmluZCh1KX10aGlzLl9faXNB''@;'; put 'put ''c3luYyYmKG89dGhpcy53cmFwSW5UaW1lb3V0KG8pLGkmJihpPXRoaXMud3JhcEluVGltZW91dChpKSksYSYmKGE9dGhpcy53cmFwSW5UaW1lb3V0KGEpKSk7Y29uc3QgbD1zdXBlci5zdWJzY3JpYmUoe25leHQ6aSxlcnJvcjpvLGNvbXBsZXRlOmF9KTtyZXR1cm4gZSBpbnN0YW5jZW9mIEFy''@;'; put 'put ''JiZlLmFkZChsKSxsfXdyYXBJblRpbWVvdXQoZSl7cmV0dXJuIHQ9Pntjb25zdCByPXRoaXMucGVuZGluZ1Rhc2tzPy5hZGQoKTtzZXRUaW1lb3V0KCgpPT57dHJ5e2UodCl9ZmluYWxseXt2b2lkIDAhPT1yJiZ0aGlzLnBlbmRpbmdUYXNrcz8ucmVtb3ZlKHIpfX0pfX19O2Z1bmN0aW9uIENC''@;'; put 'put ''KG4pe2xldCBlLHQ7ZnVuY3Rpb24gcigpe249Z3k7dHJ5e3ZvaWQgMCE9PXQmJiJmdW5jdGlvbiI9PXR5cGVvZiBjYW5jZWxBbmltYXRpb25GcmFtZSYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodCksdm9pZCAwIT09ZSYmY2xlYXJUaW1lb3V0KGUpfWNhdGNoe319cmV0dXJuIGU9c2V0VGltZW91''@;'; put 'put ''dCgoKT0+e24oKSxyKCl9KSwiZnVuY3Rpb24iPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lJiYodD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntuKCkscigpfSkpLCgpPT5yKCl9ZnVuY3Rpb24gU0Iobil7cmV0dXJuIHF1ZXVlTWljcm90YXNrKCgpPT5uKCkpLCgpPT57bj1neX19''@;'; put 'put ''Y29uc3Qgb1I9ImlzQW5ndWxhclpvbmUiLHFTPW9SKyJfSUQiO2xldCBnZWU9MDtjbGFzcyBnYXtoYXNQZW5kaW5nTWFjcm90YXNrcz0hMTtoYXNQZW5kaW5nTWljcm90YXNrcz0hMTtpc1N0YWJsZT0hMDtvblVuc3RhYmxlPW5ldyBLcighMSk7b25NaWNyb3Rhc2tFbXB0eT1uZXcgS3IoITEp''@;'; put 'put ''O29uU3RhYmxlPW5ldyBLcighMSk7b25FcnJvcj1uZXcgS3IoITEpO2NvbnN0cnVjdG9yKGUpe2NvbnN0e2VuYWJsZUxvbmdTdGFja1RyYWNlOnQ9ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjpyPSExLHNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uOmk9ITEs''@;'; put 'put ''c2NoZWR1bGVJblJvb3Rab25lOm89aVJ9PWU7aWYodHlwZW9mIFpvbmU+InUiKXRocm93IG5ldyBXbig5MDgsITEpO1pvbmUuYXNzZXJ0Wm9uZVBhdGNoZWQoKTtjb25zdCBhPXRoaXM7YS5fbmVzdGluZz0wLGEuX291dGVyPWEuX2lubmVyPVpvbmUuY3VycmVudCxab25lLlRhc2tUcmFja2lu''@;'; put 'put ''Z1pvbmVTcGVjJiYoYS5faW5uZXI9YS5faW5uZXIuZm9yayhuZXcgWm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYykpLHQmJlpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYyYmKGEuX2lubmVyPWEuX2lubmVyLmZvcmsoWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVjKSksYS5zaG91bGRDb2Fs''@;'; put 'put ''ZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uPSFpJiZyLGEuc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb249aSxhLmNhbGxiYWNrU2NoZWR1bGVkPSExLGEuc2NoZWR1bGVJblJvb3Rab25lPW8sZnVuY3Rpb24gX2VlKG4pe2NvbnN0IGU9KCk9PnshZnVuY3Rpb24gdmVlKG4pe2Z1bmN0''@;'; put 'put ''aW9uIGUoKXtDQigoKT0+e24uY2FsbGJhY2tTY2hlZHVsZWQ9ITEsc1Iobiksbi5pc0NoZWNrU3RhYmxlUnVubmluZz0hMCxhUihuKSxuLmlzQ2hlY2tTdGFibGVSdW5uaW5nPSExfSl9bi5pc0NoZWNrU3RhYmxlUnVubmluZ3x8bi5jYWxsYmFja1NjaGVkdWxlZHx8KG4uY2FsbGJhY2tTY2hl''@;'; put 'put ''ZHVsZWQ9ITAsbi5zY2hlZHVsZUluUm9vdFpvbmU/Wm9uZS5yb290LnJ1bigoKT0+e2UoKX0pOm4uX291dGVyLnJ1bigoKT0+e2UoKX0pLHNSKG4pKX0obil9LHQ9Z2VlKys7bi5faW5uZXI9bi5faW5uZXIuZm9yayh7bmFtZToiYW5ndWxhciIscHJvcGVydGllczp7W29SXTohMCxbcVNdOnQs''@;'; put 'put ''W3FTK3RdOiEwfSxvbkludm9rZVRhc2s6KHIsaSxvLGEsbCx1KT0+e2lmKGZ1bmN0aW9uIHllZShuKXtyZXR1cm4gVEIobiwiX19pZ25vcmVfbmdfem9uZV9fIil9KHUpKXJldHVybiByLmludm9rZVRhc2sobyxhLGwsdSk7dHJ5e3JldHVybiBFQihuKSxyLmludm9rZVRhc2sobyxhLGwsdSl9''@;'; put 'put ''ZmluYWxseXsobi5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uJiYiZXZlbnRUYXNrIj09PWEudHlwZXx8bi5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbikmJmUoKSxNQihuKX19LG9uSW52b2tlOihyLGksbyxhLGwsdSxnKT0+e3RyeXtyZXR1cm4gRUIobiksci5p''@;'; put 'put ''bnZva2UobyxhLGwsdSxnKX1maW5hbGx5e24uc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24mJiFuLmNhbGxiYWNrU2NoZWR1bGVkJiYhZnVuY3Rpb24gYmVlKG4pe3JldHVybiBUQihuLCJfX3NjaGVkdWxlcl90aWNrX18iKX0odSkmJmUoKSxNQihuKX19LG9uSGFzVGFzazoocixp''@;'; put 'put ''LG8sYSk9PntyLmhhc1Rhc2sobyxhKSxpPT09byYmKCJtaWNyb1Rhc2siPT1hLmNoYW5nZT8obi5faGFzUGVuZGluZ01pY3JvdGFza3M9YS5taWNyb1Rhc2ssc1IobiksYVIobikpOiJtYWNyb1Rhc2siPT1hLmNoYW5nZSYmKG4uaGFzUGVuZGluZ01hY3JvdGFza3M9YS5tYWNyb1Rhc2spKX0s''@;'; put 'put ''b25IYW5kbGVFcnJvcjoocixpLG8sYSk9PihyLmhhbmRsZUVycm9yKG8sYSksbi5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bi5vbkVycm9yLmVtaXQoYSkpLCExKX0pfShhKX1zdGF0aWMgaXNJbkFuZ3VsYXJab25lKCl7cmV0dXJuIHR5cGVvZiBab25lPCJ1IiYmITA9PT1ab25lLmN1cnJlbnQu''@;'; put 'put ''Z2V0KG9SKX1zdGF0aWMgYXNzZXJ0SW5Bbmd1bGFyWm9uZSgpe2lmKCFnYS5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgV24oOTA5LCExKX1zdGF0aWMgYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpe2lmKGdhLmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBXbig5MDksITEpfXJ1bihl''@;'; put 'put ''LHQscil7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bihlLHQscil9cnVuVGFzayhlLHQscixpKXtjb25zdCBvPXRoaXMuX2lubmVyLGE9by5zY2hlZHVsZUV2ZW50VGFzaygiTmdab25lRXZlbnQ6ICIraSxlLG1lZSxneSxneSk7dHJ5e3JldHVybiBvLnJ1blRhc2soYSx0LHIpfWZpbmFsbHl7by5j''@;'; put 'put ''YW5jZWxUYXNrKGEpfX1ydW5HdWFyZGVkKGUsdCxyKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuR3VhcmRlZChlLHQscil9cnVuT3V0c2lkZUFuZ3VsYXIoZSl7cmV0dXJuIHRoaXMuX291dGVyLnJ1bihlKX19Y29uc3QgbWVlPXt9O2Z1bmN0aW9uIGFSKG4pe2lmKDA9PW4uX25lc3RpbmcmJiFu''@;'; put 'put ''Lmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYhbi5pc1N0YWJsZSl0cnl7bi5fbmVzdGluZysrLG4ub25NaWNyb3Rhc2tFbXB0eS5lbWl0KG51bGwpfWZpbmFsbHl7aWYobi5fbmVzdGluZy0tLCFuLmhhc1BlbmRpbmdNaWNyb3Rhc2tzKXRyeXtuLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uLm9uU3Rh''@;'; put 'put ''YmxlLmVtaXQobnVsbCkpfWZpbmFsbHl7bi5pc1N0YWJsZT0hMH19fWZ1bmN0aW9uIHNSKG4pe24uaGFzUGVuZGluZ01pY3JvdGFza3M9ISEobi5faGFzUGVuZGluZ01pY3JvdGFza3N8fChuLnNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb258fG4uc2hvdWxkQ29hbGVzY2VSdW5D''@;'; put 'put ''aGFuZ2VEZXRlY3Rpb24pJiYhMD09PW4uY2FsbGJhY2tTY2hlZHVsZWQpfWZ1bmN0aW9uIEVCKG4pe24uX25lc3RpbmcrKyxuLmlzU3RhYmxlJiYobi5pc1N0YWJsZT0hMSxuLm9uVW5zdGFibGUuZW1pdChudWxsKSl9ZnVuY3Rpb24gTUIobil7bi5fbmVzdGluZy0tLGFSKG4pfWNsYXNzIGxS''@;'; put 'put ''e2hhc1BlbmRpbmdNaWNyb3Rhc2tzPSExO2hhc1BlbmRpbmdNYWNyb3Rhc2tzPSExO2lzU3RhYmxlPSEwO29uVW5zdGFibGU9bmV3IEtyO29uTWljcm90YXNrRW1wdHk9bmV3IEtyO29uU3RhYmxlPW5ldyBLcjtvbkVycm9yPW5ldyBLcjtydW4oZSx0LHIpe3JldHVybiBlLmFwcGx5KHQscil9''@;'; put 'put ''cnVuR3VhcmRlZChlLHQscil7cmV0dXJuIGUuYXBwbHkodCxyKX1ydW5PdXRzaWRlQW5ndWxhcihlKXtyZXR1cm4gZSgpfXJ1blRhc2soZSx0LHIsaSl7cmV0dXJuIGUuYXBwbHkodCxyKX19ZnVuY3Rpb24gVEIobixlKXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KG4pfHwxIT09bi5sZW5ndGgp''@;'; put 'put ''JiYhMD09PW5bMF0/LmRhdGE/LltlXX1sZXQgeEI9KCgpPT57Y2xhc3MgbntpbXBsPW51bGw7ZXhlY3V0ZSgpe3RoaXMuaW1wbD8uZXhlY3V0ZSgpfXN0YXRpYyBcdTAyNzVwcm92PUpuKHt0b2tlbjpuLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pm5ldyBufSl9cmV0dXJuIG59KSgp''@;'; put 'put ''O2NvbnN0IEFCPVswLDEsMiwzXTtsZXQgQ2VlPSgoKT0+e2NsYXNzIG57bmdab25lPXNuKGdhKTtzY2hlZHVsZXI9c24obTgpO2Vycm9ySGFuZGxlcj1zbihnOCx7b3B0aW9uYWw6ITB9KTtzZXF1ZW5jZXM9bmV3IFNldDtkZWZlcnJlZFJlZ2lzdHJhdGlvbnM9bmV3IFNldDtleGVjdXRpbmc9''@;'; put 'put ''ITE7Y29uc3RydWN0b3IoKXtzbih6OSx7b3B0aW9uYWw6ITB9KX1leGVjdXRlKCl7Y29uc3QgdD10aGlzLnNlcXVlbmNlcy5zaXplPjA7dCYmR2MoMTYpLHRoaXMuZXhlY3V0aW5nPSEwO2Zvcihjb25zdCByIG9mIEFCKWZvcihjb25zdCBpIG9mIHRoaXMuc2VxdWVuY2VzKWlmKCFpLmVycm9y''@;'; put 'put ''ZWRPckRlc3Ryb3llZCYmaS5ob29rc1tyXSl0cnl7aS5waXBlbGluZWRWYWx1ZT10aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5tYXliZVRyYWNlKCgpPT4oMCxpLmhvb2tzW3JdKShpLnBpcGVsaW5lZFZhbHVlKSxpLnNuYXBzaG90KSl9Y2F0Y2gobyl7aS5lcnJvcmVk''@;'; put 'put ''T3JEZXN0cm95ZWQ9ITAsdGhpcy5lcnJvckhhbmRsZXI/LmhhbmRsZUVycm9yKG8pfXRoaXMuZXhlY3V0aW5nPSExO2Zvcihjb25zdCByIG9mIHRoaXMuc2VxdWVuY2VzKXIuYWZ0ZXJSdW4oKSxyLm9uY2UmJih0aGlzLnNlcXVlbmNlcy5kZWxldGUociksci5kZXN0cm95KCkpO2Zvcihjb25z''@;'; put 'put ''dCByIG9mIHRoaXMuZGVmZXJyZWRSZWdpc3RyYXRpb25zKXRoaXMuc2VxdWVuY2VzLmFkZChyKTt0aGlzLmRlZmVycmVkUmVnaXN0cmF0aW9ucy5zaXplPjAmJnRoaXMuc2NoZWR1bGVyLm5vdGlmeSg3KSx0aGlzLmRlZmVycmVkUmVnaXN0cmF0aW9ucy5jbGVhcigpLHQmJkdjKDE3KX1yZWdp''@;'; put 'put ''c3Rlcih0KXtjb25zdHt2aWV3OnJ9PXQ7dm9pZCAwIT09cj8oKHJbMjVdPz89W10pLnB1c2godCksUzIociksclsyXXw9ODE5Mik6dGhpcy5leGVjdXRpbmc/dGhpcy5kZWZlcnJlZFJlZ2lzdHJhdGlvbnMuYWRkKHQpOnRoaXMuYWRkU2VxdWVuY2UodCl9YWRkU2VxdWVuY2UodCl7dGhpcy5z''@;'; put 'put ''ZXF1ZW5jZXMuYWRkKHQpLHRoaXMuc2NoZWR1bGVyLm5vdGlmeSg3KX11bnJlZ2lzdGVyKHQpe3RoaXMuZXhlY3V0aW5nJiZ0aGlzLnNlcXVlbmNlcy5oYXModCk/KHQuZXJyb3JlZE9yRGVzdHJveWVkPSEwLHQucGlwZWxpbmVkVmFsdWU9dm9pZCAwLHQub25jZT0hMCk6KHRoaXMuc2VxdWVu''@;'; put 'put ''Y2VzLmRlbGV0ZSh0KSx0aGlzLmRlZmVycmVkUmVnaXN0cmF0aW9ucy5kZWxldGUodCkpfW1heWJlVHJhY2UodCxyKXtyZXR1cm4gcj9yLnJ1bigkUy5BRlRFUl9ORVhUX1JFTkRFUix0KTp0KCl9c3RhdGljIFx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9y''@;'; put 'put ''eTooKT0+bmV3IG59KX1yZXR1cm4gbn0pKCk7Y2xhc3Mga0J7aW1wbDtob29rczt2aWV3O29uY2U7c25hcHNob3Q7ZXJyb3JlZE9yRGVzdHJveWVkPSExO3BpcGVsaW5lZFZhbHVlPXZvaWQgMDt1bnJlZ2lzdGVyT25EZXN0cm95O2NvbnN0cnVjdG9yKGUsdCxyLGksbyxhPW51bGwpe3RoaXMu''@;'; put 'put ''aW1wbD1lLHRoaXMuaG9va3M9dCx0aGlzLnZpZXc9cix0aGlzLm9uY2U9aSx0aGlzLnNuYXBzaG90PWEsdGhpcy51bnJlZ2lzdGVyT25EZXN0cm95PW8/Lm9uRGVzdHJveSgoKT0+dGhpcy5kZXN0cm95KCkpfWFmdGVyUnVuKCl7dGhpcy5lcnJvcmVkT3JEZXN0cm95ZWQ9ITEsdGhpcy5waXBl''@;'; put 'put ''bGluZWRWYWx1ZT12b2lkIDAsdGhpcy5zbmFwc2hvdD8uZGlzcG9zZSgpLHRoaXMuc25hcHNob3Q9bnVsbH1kZXN0cm95KCl7dGhpcy5pbXBsLnVucmVnaXN0ZXIodGhpcyksdGhpcy51bnJlZ2lzdGVyT25EZXN0cm95Py4oKTtjb25zdCBlPXRoaXMudmlldz8uWzI1XTtlJiYodGhpcy52aWV3''@;'; put 'put ''WzI1XT1lLmZpbHRlcih0PT50IT09dGhpcykpfX1mdW5jdGlvbiBIOChuLGUpe2NvbnN0IHQ9ZT8uaW5qZWN0b3I/P3NuKE1sKTtyZXR1cm4gajEoIk5nQWZ0ZXJOZXh0UmVuZGVyIiksZnVuY3Rpb24gUkIobixlLHQscil7Y29uc3QgaT1lLmdldCh4Qik7aS5pbXBsPz89ZS5nZXQoQ2VlKTtj''@;'; put 'put ''b25zdCBvPWUuZ2V0KHo5LG51bGwse29wdGlvbmFsOiEwfSksYT0hMCE9PXQ/Lm1hbnVhbENsZWFudXA/ZS5nZXQoTTIpOm51bGwsbD1lLmdldChPQSxudWxsLHtvcHRpb25hbDohMH0pLHU9bmV3IGtCKGkuaW1wbCxmdW5jdGlvbiBFZWUobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBGdW5jdGlv''@;'; put 'put ''bj9bdm9pZCAwLHZvaWQgMCxuLHZvaWQgMF06W24uZWFybHlSZWFkLG4ud3JpdGUsbi5taXhlZFJlYWRXcml0ZSxuLnJlYWRdfShuKSxsPy52aWV3LHIsYSxvPy5zbmFwc2hvdChudWxsKSk7cmV0dXJuIGkuaW1wbC5yZWdpc3Rlcih1KSx1fShuLHQsZSwhMCl9Y29uc3QgS1M9bmV3IEVyKCIi''@;'; put 'put ''LHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4oe3F1ZXVlOm5ldyBTZXQsaXNTY2hlZHVsZWQ6ITEsc2NoZWR1bGVyOm51bGx9KX0pO2Z1bmN0aW9uIElCKG4sZSx0KXtjb25zdCByPW4uZ2V0KEtTKTtpZihBcnJheS5pc0FycmF5KGUpKWZvcihjb25zdCBpIG9mIGUpci5xdWV1ZS5h''@;'; put 'put ''ZGQoaSksdD8uZGV0YWNoZWRMZWF2ZUFuaW1hdGlvbkZucz8ucHVzaChpKTtlbHNlIHIucXVldWUuYWRkKGUpLHQ/LmRldGFjaGVkTGVhdmVBbmltYXRpb25GbnM/LnB1c2goZSk7ci5zY2hlZHVsZXImJnIuc2NoZWR1bGVyKG4pfWZ1bmN0aW9uIERCKG4sZSx0LHIpe2NvbnN0IGk9bj8uWzI2''@;'; put 'put ''XT8uZW50ZXI7bnVsbCE9PWUmJmkmJmkuaGFzKHQuaW5kZXgpJiZmdW5jdGlvbiBjUihuLGUpe2Zvcihjb25zdFt0LHJdb2YgZSlJQihuLHIuYW5pbWF0ZUZucyl9KHIsaSl9ZnVuY3Rpb24gVjgobixlLHQscixpLG8sYSxsKXtpZihudWxsIT1pKXtsZXQgdSxnPSExO1l1KGkpP3U9aTp6cyhp''@;'; put 'put ''KSYmKGc9ITAsaT1pWzBdKTtjb25zdCBFPURyKGkpOzA9PT1uJiZudWxsIT09cj8oREIobCxyLG8sdCksbnVsbD09YT9LVihlLHIsRSk6RjgoZSxyLEUsYXx8bnVsbCwhMCkpOjE9PT1uJiZudWxsIT09cj8oREIobCxyLG8sdCksRjgoZSxyLEUsYXx8bnVsbCwhMCkpOjI9PT1uP3BSKGwsbyx0''@;'; put 'put ''LE89PntOeShlLEUsZyxPKX0pOjM9PT1uJiZwUihsLG8sdCwoKT0+e2UuZGVzdHJveU5vZGUoRSl9KSxudWxsIT11JiZmdW5jdGlvbiBEZWUobixlLHQscixpLG8sYSl7Y29uc3QgbD1yWzddO2whPT1EcihyKSYmVjgoZSxuLHQsbyxsLGksYSk7Zm9yKGxldCBnPTEwO2c8ci5sZW5ndGg7Zysr''@;'; put 'put ''KXtjb25zdCBFPXJbZ107ZUUoRVsxXSxFLG4sZSxvLGwpfX0oZSxuLHQsdSxvLHIsYSl9fWZ1bmN0aW9uIGRSKG4sZSl7ZVsxMF0uY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyPy5ub3RpZnkoOSksZUUobixlLGVbMTFdLDIsbnVsbCxudWxsKX1mdW5jdGlvbiBoUihuLGUpe2NvbnN0IHQ9bls5''@;'; put 'put ''XSxyPXQuaW5kZXhPZihlKTt0LnNwbGljZShyLDEpfWZ1bmN0aW9uIEJ5KG4sZSl7aWYoU2YoZSkpcmV0dXJuO2NvbnN0IHQ9ZVsxMV07dC5kZXN0cm95Tm9kZSYmZUUobixlLHQsMyxudWxsLG51bGwpLGZ1bmN0aW9uIHhlZShuKXtsZXQgZT1uWzEyXTtpZighZSlyZXR1cm4gZlIoblsxXSxu''@;'; put 'put ''KTtmb3IoO2U7KXtsZXQgdD1udWxsO2lmKHpzKGUpKXQ9ZVsxMl07ZWxzZXtjb25zdCByPWVbMTBdO3ImJih0PXIpfWlmKCF0KXtmb3IoO2UmJiFlWzRdJiZlIT09bjspenMoZSkmJmZSKGVbMV0sZSksZT1lWzNdO251bGw9PT1lJiYoZT1uKSx6cyhlKSYmZlIoZVsxXSxlKSx0PWUmJmVbNF19''@;'; put 'put ''ZT10fX0oZSl9ZnVuY3Rpb24gZlIobixlKXtpZihTZihlKSlyZXR1cm47Y29uc3QgdD1rKG51bGwpO3RyeXtlWzJdJj0tMTI5LGVbMl18PTI1NixlWzI0XSYmeGUoZVsyNF0pLGZ1bmN0aW9uIFJlZShuLGUpe2xldCB0O2lmKG51bGwhPW4mJm51bGwhPSh0PW4uZGVzdHJveUhvb2tzKSlmb3Io''@;'; put 'put ''bGV0IHI9MDtyPHQubGVuZ3RoO3IrPTIpe2NvbnN0IGk9ZVt0W3JdXTtpZighKGkgaW5zdGFuY2VvZiBfeSkpe2NvbnN0IG89dFtyKzFdO2lmKEFycmF5LmlzQXJyYXkobykpZm9yKGxldCBhPTA7YTxvLmxlbmd0aDthKz0yKXtjb25zdCBsPWlbb1thXV0sdT1vW2ErMV07R2MoNCxsLHUpO3Ry''@;'; put 'put ''eXt1LmNhbGwobCl9ZmluYWxseXtHYyg1LGwsdSl9fWVsc2V7R2MoNCxpLG8pO3RyeXtvLmNhbGwoaSl9ZmluYWxseXtHYyg1LGksbyl9fX19fShuLGUpLGZ1bmN0aW9uIGtlZShuLGUpe2NvbnN0IHQ9bi5jbGVhbnVwLHI9ZVs3XTtpZihudWxsIT09dClmb3IobGV0IGE9MDthPHQubGVuZ3Ro''@;'; put 'put ''LTE7YSs9MilpZigic3RyaW5nIj09dHlwZW9mIHRbYV0pe2NvbnN0IGw9dFthKzNdO2w+PTA/cltsXSgpOnJbLWxdLnVuc3Vic2NyaWJlKCksYSs9Mn1lbHNlIHRbYV0uY2FsbChyW3RbYSsxXV0pO251bGwhPT1yJiYoZVs3XT1udWxsKTtjb25zdCBpPWVbMjFdO2lmKG51bGwhPT1pKXtlWzIx''@;'; put 'put ''XT1udWxsO2ZvcihsZXQgYT0wO2E8aS5sZW5ndGg7YSsrKSgwLGlbYV0pKCl9Y29uc3Qgbz1lWzIzXTtpZihudWxsIT09byl7ZVsyM109bnVsbDtmb3IoY29uc3QgYSBvZiBvKWEuZGVzdHJveSgpfX0obixlKSwxPT09ZVsxXS50eXBlJiZlWzExXS5kZXN0cm95KCk7Y29uc3Qgcj1lWzE2XTtp''@;'; put 'put ''ZihudWxsIT09ciYmWXUoZVszXSkpe3IhPT1lWzNdJiZoUihyLGUpO2NvbnN0IGk9ZVsxOF07bnVsbCE9PWkmJmkuZGV0YWNoVmlldyhuKX1NeShlKX1maW5hbGx5e2sodCl9fWZ1bmN0aW9uIHBSKG4sZSx0LHIpe2NvbnN0IGk9bj8uWzI2XTtpZihudWxsPT1pfHxudWxsPT1pLmxlYXZlfHwh''@;'; put 'put ''aS5sZWF2ZS5oYXMoZS5pbmRleCkpcmV0dXJuIHIoITEpO24mJms1LmFkZChuKSxJQih0LCgpPT57aWYoaS5sZWF2ZSYmaS5sZWF2ZS5oYXMoZS5pbmRleCkpe2NvbnN0IGE9aS5sZWF2ZS5nZXQoZS5pbmRleCksbD1bXTtpZihhKXtmb3IobGV0IHU9MDt1PGEuYW5pbWF0ZUZucy5sZW5ndGg7''@;'; put 'put ''dSsrKXtjb25zdCBnPWEuYW5pbWF0ZUZuc1t1XSx7cHJvbWlzZTpFfT1nKCk7bC5wdXNoKEUpfWkuZGV0YWNoZWRMZWF2ZUFuaW1hdGlvbkZucz12b2lkIDB9aS5ydW5uaW5nPVByb21pc2UuYWxsU2V0dGxlZChsKSxmdW5jdGlvbiBBZWUobixlKXtjb25zdCB0PW5bMjZdPy5ydW5uaW5nO3Q/''@;'; put 'put ''dC50aGVuKCgpPT57blsyNl0ucnVubmluZz12b2lkIDAsazUuZGVsZXRlKG4pLGUoITApfSk6ZSghMSl9KG4scil9ZWxzZSBuJiZrNS5kZWxldGUobikscighMSl9LGkpfWZ1bmN0aW9uIGdSKG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gbVIobixlLHQpe2xldCByPWU7Zm9yKDtudWxsIT09ciYm''@;'; put 'put ''MTY4JnIudHlwZTspcj0oZT1yKS5wYXJlbnQ7aWYobnVsbD09PXIpcmV0dXJuIHRbMF07aWYod2Yocikpe2NvbnN0e2VuY2Fwc3VsYXRpb246aX09bi5kYXRhW3IuZGlyZWN0aXZlU3RhcnQrci5jb21wb25lbnRPZmZzZXRdO2lmKGk9PT1RbS5Ob25lfHxpPT09UW0uRW11bGF0ZWQpcmV0dXJu''@;'; put 'put ''IG51bGx9cmV0dXJuIFlpKHIsdCl9KG4sZS5wYXJlbnQsdCl9ZnVuY3Rpb24gTEIobixlLHQpe3JldHVybiBXOShuLGUsdCl9bGV0IFc5PWZ1bmN0aW9uIFFTKG4sZSx0KXtyZXR1cm4gNDAmbi50eXBlP1lpKG4sdCk6bnVsbH07ZnVuY3Rpb24gdlIobixlLHQscil7Y29uc3QgaT1nUihuLHIs''@;'; put 'put ''ZSksbz1lWzExXSxsPUxCKHIucGFyZW50fHxlWzVdLHIsZSk7aWYobnVsbCE9aSlpZihBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgdT0wO3U8dC5sZW5ndGg7dSsrKVhWKG8saSx0W3VdLGwsITEpO2Vsc2UgWFYobyxpLHQsbCwhMSl9ZnVuY3Rpb24gQjgobixlKXtpZihudWxsIT09ZSl7Y29u''@;'; put 'put ''c3QgdD1lLnR5cGU7aWYoMyZ0KXJldHVybiBZaShlLG4pO2lmKDQmdClyZXR1cm4gVXkoLTEsbltlLmluZGV4XSk7aWYoOCZ0KXtjb25zdCByPWUuY2hpbGQ7aWYobnVsbCE9PXIpcmV0dXJuIEI4KG4scik7e2NvbnN0IGk9bltlLmluZGV4XTtyZXR1cm4gWXUoaSk/VXkoLTEsaSk6RHIoaSl9''@;'; put 'put ''fWlmKDEyOCZ0KXJldHVybiBCOChuLGUubmV4dCk7aWYoMzImdClyZXR1cm4gclIoZSxuKSgpfHxEcihuW2UuaW5kZXhdKTt7Y29uc3Qgcj1PQihuLGUpO3JldHVybiBudWxsIT09cj9BcnJheS5pc0FycmF5KHIpP3JbMF06QjgoaWgoblsxNV0pLHIpOkI4KG4sZS5uZXh0KX19cmV0dXJuIG51''@;'; put 'put ''bGx9ZnVuY3Rpb24gT0IobixlKXtyZXR1cm4gbnVsbCE9PWU/blsxNV1bNV0ucHJvamVjdGlvbltlLnByb2plY3Rpb25dOm51bGx9ZnVuY3Rpb24gVXkobixlKXtjb25zdCB0PTEwK24rMTtpZih0PGUubGVuZ3RoKXtjb25zdCByPWVbdF0saT1yWzFdLmZpcnN0Q2hpbGQ7aWYobnVsbCE9PWkp''@;'; put 'put ''cmV0dXJuIEI4KHIsaSl9cmV0dXJuIGVbN119ZnVuY3Rpb24gX1IobixlLHQscixpLG8sYSl7Zm9yKDtudWxsIT10Oyl7Y29uc3QgbD1yWzldO2lmKDEyOD09PXQudHlwZSl7dD10Lm5leHQ7Y29udGludWV9Y29uc3QgdT1yW3QuaW5kZXhdLGc9dC50eXBlO2lmKGEmJjA9PT1lJiYodSYmajAo''@;'; put 'put ''RHIodSksciksdC5mbGFnc3w9MiksIUlTKHQpKWlmKDgmZylfUihuLGUsdC5jaGlsZCxyLGksbywhMSksVjgoZSxuLGwsaSx1LHQsbyxyKTtlbHNlIGlmKDMyJmcpe2NvbnN0IEU9clIodCxyKTtsZXQgTztmb3IoO089RSgpOylWOChlLG4sbCxpLE8sdCxvLHIpO1Y4KGUsbixsLGksdSx0LG8s''@;'; put 'put ''cil9ZWxzZSAxNiZnP05CKG4sZSxyLHQsaSxvKTpWOChlLG4sbCxpLHUsdCxvLHIpO3Q9YT90LnByb2plY3Rpb25OZXh0OnQubmV4dH19ZnVuY3Rpb24gZUUobixlLHQscixpLG8pe19SKHQscixuLmZpcnN0Q2hpbGQsZSxpLG8sITEpfWZ1bmN0aW9uIE5CKG4sZSx0LHIsaSxvKXtjb25zdCBh''@;'; put 'put ''PXRbMTVdLHU9YVs1XS5wcm9qZWN0aW9uW3IucHJvamVjdGlvbl07aWYoQXJyYXkuaXNBcnJheSh1KSlmb3IobGV0IGc9MDtnPHUubGVuZ3RoO2crKylWOChlLG4sdFs5XSxpLHVbZ10scixvLHQpO2Vsc2V7bGV0IGc9dTtjb25zdCBFPWFbM107U3kocikmJihnLmZsYWdzfD0xMjgpLF9SKG4s''@;'; put 'put ''ZSxnLEUsaSxvLCEwKX19ZnVuY3Rpb24gRkIobixlLHQscixpKXtjb25zdCBvPW9oKCksYT0yJnI7dHJ5e1ltKC0xKSxhJiZlLmxlbmd0aD4yNyYmX0IobixlLDI3LCExKSxHYyhhPzI6MCxpLHQpLHQocixpKX1maW5hbGx5e1ltKG8pLEdjKGE/MzoxLGksdCl9fWZ1bmN0aW9uIHRFKG4sZSx0''@;'; put 'put ''KXsoZnVuY3Rpb24gUGVlKG4sZSx0KXtjb25zdCByPXQuZGlyZWN0aXZlU3RhcnQsaT10LmRpcmVjdGl2ZUVuZDt3Zih0KSYmZnVuY3Rpb24gdkIobixlLHQpe2NvbnN0IHI9WWkoZSxuKSxpPWZ1bmN0aW9uIG1CKG4pe2NvbnN0IGU9bi50VmlldztyZXR1cm4gbnVsbD09PWV8fGUuaW5jb21w''@;'; put 'put ''bGV0ZUZpcnN0UGFzcz9uLnRWaWV3PWdCKDEsbnVsbCxuLnRlbXBsYXRlLG4uZGVjbHMsbi52YXJzLG4uZGlyZWN0aXZlRGVmcyxuLnBpcGVEZWZzLG4udmlld1F1ZXJ5LG4uc2NoZW1hcyxuLmNvbnN0cyxuLmlkKTplfSh0KSxvPW5bMTBdLnJlbmRlcmVyRmFjdG9yeSxhPXRSKG4sV1Mobixp''@;'; put 'put ''LG51bGwsZVIodCkscixlLG51bGwsby5jcmVhdGVSZW5kZXJlcihyLHQpLG51bGwsbnVsbCxudWxsKSk7bltlLmluZGV4XT1hfShlLHQsbi5kYXRhW3IrdC5jb21wb25lbnRPZmZzZXRdKSxuLmZpcnN0Q3JlYXRlUGFzc3x8ZWsodCxlKTtjb25zdCBvPXQuaW5pdGlhbElucHV0cztmb3IobGV0''@;'; put 'put ''IGE9cjthPGk7YSsrKXtjb25zdCBsPW4uZGF0YVthXSx1PXd5KGUsbixhLHQpO2owKHUsZSksbnVsbCE9PW8mJkhlZSgwLGEtcix1LGwsMCxvKSxzMShsKSYmKFppKHQuaW5kZXgsZSlbOF09d3koZSxuLGEsdCkpfX0pKG4sZSx0KSwhKDY0Jn50LmZsYWdzKSYmZnVuY3Rpb24gWjkobixlLHQp''@;'; put 'put ''e2NvbnN0IHI9dC5kaXJlY3RpdmVTdGFydCxpPXQuZGlyZWN0aXZlRW5kLG89dC5pbmRleCxhPWZ1bmN0aW9uIGdYKCl7cmV0dXJuIHBhLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXh9KCk7dHJ5e1ltKG8pO2ZvcihsZXQgbD1yO2w8aTtsKyspe2NvbnN0IHU9bi5kYXRhW2xdLGc9ZVts''@;'; put 'put ''XTtuUyhsKSwobnVsbCE9PXUuaG9zdEJpbmRpbmdzfHwwIT09dS5ob3N0VmFyc3x8bnVsbCE9PXUuaG9zdEF0dHJzKSYmQkIodSxnKX19ZmluYWxseXtZbSgtMSksblMoYSl9fShuLGUsdCl9ZnVuY3Rpb24gWTkobixlLHQ9WWkpe2NvbnN0IHI9ZS5sb2NhbE5hbWVzO2lmKG51bGwhPT1yKXts''@;'; put 'put ''ZXQgaT1lLmluZGV4KzE7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKz0yKXtjb25zdCBhPXJbbysxXSxsPS0xPT09YT90KGUsbik6blthXTtuW2krK109bH19fWxldCBQQj0oKT0+bnVsbDtmdW5jdGlvbiBiUihuLGUsdCxyLGksbyl7ckUobixlWzFdLGUsdCxyKT93ZihuKSYmZnVuY3Rpb24g''@;'; put 'put ''SEIobixlKXtjb25zdCB0PVppKGUsbik7MTYmdFsyXXx8KHRbMl18PTY0KX0oZSxuLmluZGV4KTooMyZuLnR5cGUmJih0PWZ1bmN0aW9uIEZlZShuKXtyZXR1cm4iY2xhc3MiPT09bj8iY2xhc3NOYW1lIjoiZm9yIj09PW4/Imh0bWxGb3IiOiJmb3JtYWN0aW9uIj09PW4/ImZvcm1BY3Rpb24i''@;'; put 'put ''OiJpbm5lckh0bWwiPT09bj8iaW5uZXJIVE1MIjoicmVhZG9ubHkiPT09bj8icmVhZE9ubHkiOiJ0YWJpbmRleCI9PT1uPyJ0YWJJbmRleCI6bn0odCkpLGo4KG4sZSx0LHIsaSxvKSl9ZnVuY3Rpb24gajgobixlLHQscixpLG8pe2lmKDMmbi50eXBlKXtjb25zdCBhPVlpKG4sZSk7cj1udWxs''@;'; put 'put ''IT1vP28ocixuLnZhbHVlfHwiIix0KTpyLGkuc2V0UHJvcGVydHkoYSx0LHIpfX1mdW5jdGlvbiBCQihuLGUpe251bGwhPT1uLmhvc3RCaW5kaW5ncyYmbi5ob3N0QmluZGluZ3MoMSxlKX1mdW5jdGlvbiBHOShuLGUpe2NvbnN0IHQ9bi5kaXJlY3RpdmVSZWdpc3RyeTtsZXQgcj1udWxsO2lm''@;'; put 'put ''KHQpZm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2NvbnN0IG89dFtpXTtmQihlLG8uc2VsZWN0b3JzLCExKSYmKHI/Pz1bXSxzMShvKT9yLnVuc2hpZnQobyk6ci5wdXNoKG8pKX1yZXR1cm4gcn1mdW5jdGlvbiBIZWUobixlLHQscixpLG8pe2NvbnN0IGE9b1tlXTtpZihudWxsIT09YSlm''@;'; put 'put ''b3IobGV0IGw9MDtsPGEubGVuZ3RoO2wrPTIpVnkocix0LGFbbF0sYVtsKzFdKX1mdW5jdGlvbiBSNShuLGUsdCxyLGkpe2NvbnN0IG89MjcrdCxhPWVbMV0sbD1pKGEsZSxuLHIsdCk7ZVtvXT1sLFdzKG4sITApO2NvbnN0IHU9Mj09PW4udHlwZTtyZXR1cm4gdT8oSlYoZVsxMV0sbCxuKSwo''@;'; put 'put ''MD09PWZ1bmN0aW9uIEU5KCl7cmV0dXJuIHBhLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudH0oKXx8Q2YobikpJiZqMChsLGUpLGZ1bmN0aW9uIFAwKCl7cGEubEZyYW1lLmVsZW1lbnREZXB0aENvdW50Kyt9KCkpOmowKGwsZSksb1MoKSYmKCF1fHwhSVMobikpJiZ2UihhLGUsbCxuKSxufWZ1''@;'; put 'put ''bmN0aW9uIG5FKG4pe2xldCBlPW47cmV0dXJuIGMxKCk/RGgoKTooZT1lLnBhcmVudCxXcyhlLCExKSksZX1mdW5jdGlvbiBVQihuLGUsdCl7cmV0dXJuKG51bGw9PT1ufHxzMShuKSkmJih0PWZ1bmN0aW9uIEppKG4pe2Zvcig7QXJyYXkuaXNBcnJheShuKTspe2lmKCJvYmplY3QiPT10eXBl''@;'; put 'put ''b2YgblsxXSlyZXR1cm4gbjtuPW5bMF19cmV0dXJuIG51bGx9KHRbZS5pbmRleF0pKSx0WzExXX1mdW5jdGlvbiByRShuLGUsdCxyLGkpe2NvbnN0IG89bi5pbnB1dHM/LltyXSxhPW4uaG9zdERpcmVjdGl2ZUlucHV0cz8uW3JdO2xldCBsPSExO2lmKGEpZm9yKGxldCB1PTA7dTxhLmxlbmd0''@;'; put 'put ''aDt1Kz0yKXtjb25zdCBnPWFbdV07VnkoZS5kYXRhW2ddLHRbZ10sYVt1KzFdLGkpLGw9ITB9aWYobylmb3IoY29uc3QgdSBvZiBvKVZ5KGUuZGF0YVt1XSx0W3VdLHIsaSksbD0hMDtyZXR1cm4gbH1mdW5jdGlvbiBCZWUobixlKXtjb25zdCB0PVppKGUsbikscj10WzFdOyFmdW5jdGlvbiBq''@;'; put 'put ''ZWUobixlKXtmb3IobGV0IHQ9ZS5sZW5ndGg7dDxuLmJsdWVwcmludC5sZW5ndGg7dCsrKWUucHVzaChuLmJsdWVwcmludFt0XSl9KHIsdCk7Y29uc3QgaT10WzBdO251bGwhPT1pJiZudWxsPT09dFs2XSYmKHRbNl09bnVsbCksR2MoMTgpLGlFKHIsdCx0WzhdKSxHYygxOSx0WzhdKX1mdW5j''@;'; put 'put ''dGlvbiBpRShuLGUsdCl7a0EoZSk7dHJ5e2NvbnN0IHI9bi52aWV3UXVlcnk7bnVsbCE9PXImJkxTKDEscix0KTtjb25zdCBpPW4udGVtcGxhdGU7bnVsbCE9PWkmJkZCKG4sZSxpLDEsdCksbi5maXJzdENyZWF0ZVBhc3MmJihuLmZpcnN0Q3JlYXRlUGFzcz0hMSksZVsxOF0/LmZpbmlzaFZp''@;'; put 'put ''ZXdDcmVhdGlvbihuKSxuLnN0YXRpY0NvbnRlbnRRdWVyaWVzJiZWayhuLGUpLG4uc3RhdGljVmlld1F1ZXJpZXMmJkxTKDIsbi52aWV3UXVlcnksdCk7Y29uc3Qgbz1uLmNvbXBvbmVudHM7bnVsbCE9PW8mJmZ1bmN0aW9uIFVlZShuLGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKUJl''@;'; put 'put ''ZShuLGVbdF0pfShlLG8pfWNhdGNoKHIpe3Rocm93IG4uZmlyc3RDcmVhdGVQYXNzJiYobi5pbmNvbXBsZXRlRmlyc3RQYXNzPSEwLG4uZmlyc3RDcmVhdGVQYXNzPSExKSxyfWZpbmFsbHl7ZVsyXSY9LTUsaVMoKX19ZnVuY3Rpb24gJDkobixlLHQscil7Y29uc3QgaT1rKG51bGwpO3RyeXtj''@;'; put 'put ''b25zdCBvPWUudFZpZXcsdT1XUyhuLG8sdCw0MDk2Jm5bMl0/NDA5NjoxNixudWxsLGUsbnVsbCxudWxsLHI/LmluamVjdG9yPz9udWxsLHI/LmVtYmVkZGVkVmlld0luamVjdG9yPz9udWxsLHI/LmRlaHlkcmF0ZWRWaWV3Pz9udWxsKTt1WzE2XT1uW2UuaW5kZXhdO2NvbnN0IEU9blsxOF07''@;'; put 'put ''cmV0dXJuIG51bGwhPT1FJiYodVsxOF09RS5jcmVhdGVFbWJlZGRlZFZpZXcobykpLGlFKG8sdSx0KSx1fWZpbmFsbHl7ayhpKX19ZnVuY3Rpb24gVTgobixlKXtyZXR1cm4hZXx8bnVsbD09PWUuZmlyc3RDaGlsZHx8U3kobil9ZnVuY3Rpb24genkobixlLHQscixpPSExKXtmb3IoO251bGwh''@;'; put 'put ''PT10Oyl7aWYoMTI4PT09dC50eXBlKXt0PWk/dC5wcm9qZWN0aW9uTmV4dDp0Lm5leHQ7Y29udGludWV9Y29uc3Qgbz1lW3QuaW5kZXhdO251bGwhPT1vJiZyLnB1c2goRHIobykpLFl1KG8pJiZ6QihvLHIpO2NvbnN0IGE9dC50eXBlO2lmKDgmYSl6eShuLGUsdC5jaGlsZCxyKTtlbHNlIGlm''@;'; put 'put ''KDMyJmEpe2NvbnN0IGw9clIodCxlKTtsZXQgdTtmb3IoO3U9bCgpOylyLnB1c2godSl9ZWxzZSBpZigxNiZhKXtjb25zdCBsPU9CKGUsdCk7aWYoQXJyYXkuaXNBcnJheShsKSlyLnB1c2goLi4ubCk7ZWxzZXtjb25zdCB1PWloKGVbMTVdKTt6eSh1WzFdLHUsbCxyLCEwKX19dD1pP3QucHJv''@;'; put 'put ''amVjdGlvbk5leHQ6dC5uZXh0fXJldHVybiByfWZ1bmN0aW9uIHpCKG4sZSl7Zm9yKGxldCB0PTEwO3Q8bi5sZW5ndGg7dCsrKXtjb25zdCByPW5bdF0saT1yWzFdLmZpcnN0Q2hpbGQ7bnVsbCE9PWkmJnp5KHJbMV0scixpLGUpfW5bN10hPT1uWzBdJiZlLnB1c2gobls3XSl9ZnVuY3Rpb24g''@;'; put 'put ''a2Yobil7aWYobnVsbCE9PW5bMjVdKXtmb3IoY29uc3QgZSBvZiBuWzI1XSllLmltcGwuYWRkU2VxdWVuY2UoZSk7blsyNV0ubGVuZ3RoPTB9fWxldCBTUj1bXTtjb25zdCBFUj17Li4uRyxjb25zdW1lcklzQWx3YXlzTGl2ZTohMCxraW5kOiJ0ZW1wbGF0ZSIsY29uc3VtZXJNYXJrZWREaXJ0''@;'; put 'put ''eTpuPT57UzIobi5sVmlldyl9LGNvbnN1bWVyT25TaWduYWxSZWFkKCl7dGhpcy5sVmlld1syNF09dGhpc319LE1SPXsuLi5HLGNvbnN1bWVySXNBbHdheXNMaXZlOiEwLGtpbmQ6InRlbXBsYXRlIixjb25zdW1lck1hcmtlZERpcnR5Om49PntsZXQgZT1paChuLmxWaWV3KTtmb3IoO2UmJiFU''@;'; put 'put ''UihlWzFdKTspZT1paChlKTtlJiZsMShlKX0sY29uc3VtZXJPblNpZ25hbFJlYWQoKXt0aGlzLmxWaWV3WzI0XT10aGlzfX07ZnVuY3Rpb24gVFIobil7cmV0dXJuIDIhPT1uLnR5cGV9ZnVuY3Rpb24geFIobil7aWYobnVsbD09PW5bMjNdKXJldHVybjtsZXQgZT0hMDtmb3IoO2U7KXtsZXQg''@;'; put 'put ''dD0hMTtmb3IoY29uc3QgciBvZiBuWzIzXSlyLmRpcnR5JiYodD0hMCxudWxsPT09ci56b25lfHxab25lLmN1cnJlbnQ9PT1yLnpvbmU/ci5ydW4oKTpyLnpvbmUucnVuKCgpPT5yLnJ1bigpKSk7ZT10JiYhISg4MTkyJm5bMl0pfX1mdW5jdGlvbiBXeShuLGU9MCl7Y29uc3Qgcj1uWzEwXS5y''@;'; put 'put ''ZW5kZXJlckZhY3Rvcnk7ci5iZWdpbj8uKCk7dHJ5eyFmdW5jdGlvbiBaZWUobixlKXtjb25zdCB0PVVQKCk7dHJ5e3RTKCEwKSxrUihuLGUpO2xldCByPTA7Zm9yKDtaYyhuKTspe2lmKDEwMD09PXIpdGhyb3cgbmV3IFduKDEwMywhMSk7cisrLGtSKG4sMSl9fWZpbmFsbHl7dFModCl9fShu''@;'; put 'put ''LGUpfWZpbmFsbHl7ci5lbmQ/LigpfX1mdW5jdGlvbiBBUihuLGUsdCxyKXtpZihTZihlKSlyZXR1cm47Y29uc3QgaT1lWzJdO2tBKGUpO2xldCBsPSEwLHU9bnVsbCxnPW51bGw7VFIobik/KGc9ZnVuY3Rpb24gemVlKG4pe3JldHVybiBuWzI0XT8/ZnVuY3Rpb24gV2VlKG4pe2NvbnN0IGU9''@;'; put 'put ''U1IucG9wKCk/P09iamVjdC5jcmVhdGUoRVIpO3JldHVybiBlLmxWaWV3PW4sZX0obil9KGUpLHU9b3QoZykpOm51bGw9PT1mdW5jdGlvbiBNKCl7cmV0dXJuIGtlfSgpPyhsPSExLGc9ZnVuY3Rpb24gWWVlKG4pe2NvbnN0IGU9blsyNF0/P09iamVjdC5jcmVhdGUoTVIpO3JldHVybiBlLmxW''@;'; put 'put ''aWV3PW4sZX0oZSksdT1vdChnKSk6ZVsyNF0mJih4ZShlWzI0XSksZVsyNF09bnVsbCk7dHJ5e1VkKGUpLGZ1bmN0aW9uIHpQKG4pe3JldHVybiBwYS5sRnJhbWUuYmluZGluZ0luZGV4PW59KG4uYmluZGluZ1N0YXJ0SW5kZXgpLG51bGwhPT10JiZGQihuLGUsdCwyLHIpO2NvbnN0IEU9ISgz''@;'; put 'put ''Jn5pKTtpZihFKXtjb25zdCBlZT1uLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09ZWUmJl9TKGUsZWUsbnVsbCl9ZWxzZXtjb25zdCBlZT1uLnByZU9yZGVySG9va3M7bnVsbCE9PWVlJiZ5UyhlLGVlLDAsbnVsbCksJEEoZSwwKX1pZihmdW5jdGlvbiBKbShuKXtmb3IobGV0IGU9S0gobik7''@;'; put 'put ''bnVsbCE9PWU7ZT1YSChlKSl7aWYoISgyJmVbMl0pKWNvbnRpbnVlO2NvbnN0IHQ9ZVs5XTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKylsMSh0W3JdKX19KGUpLHhSKGUpLFpCKGUsMCksbnVsbCE9PW4uY29udGVudFF1ZXJpZXMmJlZrKG4sZSksRSl7Y29uc3QgZWU9bi5jb250ZW50Q2hl''@;'; put 'put ''Y2tIb29rcztudWxsIT09ZWUmJl9TKGUsZWUpfWVsc2V7Y29uc3QgZWU9bi5jb250ZW50SG9va3M7bnVsbCE9PWVlJiZ5UyhlLGVlLDEpLCRBKGUsMSl9IWZ1bmN0aW9uIHFlZShuLGUpe2NvbnN0IHQ9bi5ob3N0QmluZGluZ09wQ29kZXM7aWYobnVsbCE9PXQpdHJ5e2ZvcihsZXQgcj0wO3I8''@;'; put 'put ''dC5sZW5ndGg7cisrKXtjb25zdCBpPXRbcl07aWYoaTwwKVltKH5pKTtlbHNle2NvbnN0IG89aSxhPXRbKytyXSxsPXRbKytyXTtwWChhLG8pO2NvbnN0IHU9ZVtvXTtHYygyNCx1KSxsKDIsdSksR2MoMjUsdSl9fX1maW5hbGx5e1ltKC0xKX19KG4sZSk7Y29uc3QgTz1uLmNvbXBvbmVudHM7''@;'; put 'put ''bnVsbCE9PU8mJiRCKGUsTywwKTtjb25zdCBaPW4udmlld1F1ZXJ5O2lmKG51bGwhPT1aJiZMUygyLFosciksRSl7Y29uc3QgZWU9bi52aWV3Q2hlY2tIb29rcztudWxsIT09ZWUmJl9TKGUsZWUpfWVsc2V7Y29uc3QgZWU9bi52aWV3SG9va3M7bnVsbCE9PWVlJiZ5UyhlLGVlLDIpLCRBKGUs''@;'; put 'put ''Mil9aWYoITA9PT1uLmZpcnN0VXBkYXRlUGFzcyYmKG4uZmlyc3RVcGRhdGVQYXNzPSExKSxlWzIyXSl7Zm9yKGNvbnN0IGVlIG9mIGVbMjJdKWVlKCk7ZVsyMl09bnVsbH1rZihlKSxlWzJdJj0tNzN9Y2F0Y2goRSl7dGhyb3cgUzIoZSksRX1maW5hbGx5e251bGwhPT1nJiYoZHQoZyx1KSxs''@;'; put 'put ''JiZmdW5jdGlvbiBXQihuKXtuLmxWaWV3WzI0XSE9PW4mJihuLmxWaWV3PW51bGwsU1IucHVzaChuKSl9KGcpKSxpUygpfX1mdW5jdGlvbiBaQihuLGUpe2ZvcihsZXQgdD1LSChuKTtudWxsIT09dDt0PVhIKHQpKWZvcihsZXQgcj0xMDtyPHQubGVuZ3RoO3IrKylHQih0W3JdLGUpfWZ1bmN0''@;'; put 'put ''aW9uICRlZShuLGUsdCl7R2MoMTgpO2NvbnN0IHI9WmkoZSxuKTtHQihyLHQpLEdjKDE5LHJbOF0pfWZ1bmN0aW9uIEdCKG4sZSl7amwobikmJmtSKG4sZSl9ZnVuY3Rpb24ga1IobixlKXtjb25zdCByPW5bMV0saT1uWzJdLG89blsyNF07bGV0IGE9ISEoMD09PWUmJjE2JmkpO2lmKGF8fD0h''@;'; put 'put ''ISg2NCZpJiYwPT09ZSksYXx8PSEhKDEwMjQmaSksYXx8PSEoIW8/LmRpcnR5fHwhYWUobykpLGF8fD0hMSxvJiYoby5kaXJ0eT0hMSksblsyXSY9LTkyMTcsYSlBUihyLG4sci50ZW1wbGF0ZSxuWzhdKTtlbHNlIGlmKDgxOTImaSl7Y29uc3QgbD1rKG51bGwpO3RyeXt4UihuKSxaQihuLDEp''@;'; put 'put ''O2NvbnN0IHU9ci5jb21wb25lbnRzO251bGwhPT11JiYkQihuLHUsMSksa2Yobil9ZmluYWxseXtrKGwpfX19ZnVuY3Rpb24gJEIobixlLHQpe2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKSRlZShuLGVbcl0sdCl9ZnVuY3Rpb24gcTkobixlKXtjb25zdCB0PVVQKCk/NjQ6MTA4ODtmb3Io''@;'; put 'put ''blsxMF0uY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyPy5ub3RpZnkoZSk7bjspe25bMl18PXQ7Y29uc3Qgcj1paChuKTtpZih2MyhuKSYmIXIpcmV0dXJuIG47bj1yfXJldHVybiBudWxsfWZ1bmN0aW9uIHFCKG4sZSx0LHIpe3JldHVybltuLCEwLDAsZSxudWxsLHIsbnVsbCx0LG51bGwsbnVs''@;'; put 'put ''bF19ZnVuY3Rpb24gS0IobixlKXtjb25zdCB0PTEwK2U7aWYodDxuLmxlbmd0aClyZXR1cm4gblt0XX1mdW5jdGlvbiBLOShuLGUsdCxyPSEwKXtjb25zdCBpPWVbMV07aWYoZnVuY3Rpb24gU2QobixlLHQscil7Y29uc3QgaT0xMCtyLG89dC5sZW5ndGg7cj4wJiYodFtpLTFdWzRdPWUpLHI8''@;'; put 'put ''by0xMD8oZVs0XT10W2ldLHQxKHQsMTArcixlKSk6KHQucHVzaChlKSxlWzRdPW51bGwpLGVbM109dDtjb25zdCBhPWVbMTZdO251bGwhPT1hJiZ0IT09YSYmSTUoYSxlKTtjb25zdCBsPWVbMThdO251bGwhPT1sJiZsLmluc2VydFZpZXcobiksaDAoZSksZVsyXXw9MTI4fShpLGUsbix0KSxy''@;'; put 'put ''KXtjb25zdCBhPVV5KHQsbiksbD1lWzExXSx1PWwucGFyZW50Tm9kZShuWzddKTtudWxsIT09dSYmZnVuY3Rpb24gUjIobixlLHQscixpLG8pe3JbMF09aSxyWzVdPWUsZUUobixyLHQsMSxpLG8pfShpLG5bNV0sbCxlLHUsYSl9Y29uc3Qgbz1lWzZdO251bGwhPT1vJiZudWxsIT09by5maXJz''@;'; put 'put ''dENoaWxkJiYoby5maXJzdENoaWxkPW51bGwpfWZ1bmN0aW9uIHNoKG4sZSl7Y29uc3QgdD1YOShuLGUpO3JldHVybiB2b2lkIDAhPT10JiZCeSh0WzFdLHQpLHR9ZnVuY3Rpb24gWDkobixlKXtpZihuLmxlbmd0aDw9MTApcmV0dXJuO2NvbnN0IHQ9MTArZSxyPW5bdF07aWYocil7Y29uc3Qg''@;'; put 'put ''aT1yWzE2XTtudWxsIT09aSYmaSE9PW4mJmhSKGksciksZT4wJiYoblt0LTFdWzRdPXJbNF0pO2NvbnN0IG89YmQobiwxMCtlKTshZnVuY3Rpb24gdVIobixlKXtkUihuLGUpLGVbMF09bnVsbCxlWzVdPW51bGx9KHJbMV0scik7Y29uc3QgYT1vWzE4XTtudWxsIT09YSYmYS5kZXRhY2hWaWV3''@;'; put 'put ''KG9bMV0pLHJbM109bnVsbCxyWzRdPW51bGwsclsyXSY9LTEyOX1yZXR1cm4gcn1mdW5jdGlvbiBJNShuLGUpe2NvbnN0IHQ9bls5XSxyPWVbM107KHpzKHIpfHxlWzE1XSE9PXJbM11bMTVdKSYmKG5bMl18PTIpLG51bGw9PT10P25bOV09W2VdOnQucHVzaChlKX1jbGFzcyBROXtfbFZpZXc7''@;'; put 'put ''X2NkUmVmSW5qZWN0aW5nVmlldztfYXBwUmVmPW51bGw7X2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExO2V4aGF1c3RpdmU7Z2V0IHJvb3ROb2Rlcygpe2NvbnN0IGU9dGhpcy5fbFZpZXcsdD1lWzFdO3JldHVybiB6eSh0LGUsdC5maXJzdENoaWxkLFtdKX1jb25zdHJ1Y3RvcihlLHQpe3Ro''@;'; put 'put ''aXMuX2xWaWV3PWUsdGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3PXR9Z2V0IGNvbnRleHQoKXtyZXR1cm4gdGhpcy5fbFZpZXdbOF19c2V0IGNvbnRleHQoZSl7dGhpcy5fbFZpZXdbOF09ZX1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIFNmKHRoaXMuX2xWaWV3KX1kZXN0cm95KCl7aWYodGhpcy5f''@;'; put 'put ''YXBwUmVmKXRoaXMuX2FwcFJlZi5kZXRhY2hWaWV3KHRoaXMpO2Vsc2UgaWYodGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXIpe2NvbnN0IGU9dGhpcy5fbFZpZXdbM107aWYoWXUoZSkpe2NvbnN0IHQ9ZVs4XSxyPXQ/dC5pbmRleE9mKHRoaXMpOi0xO3I+LTEmJihYOShlLHIpLGJkKHQs''@;'; put 'put ''cikpfXRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfUJ5KHRoaXMuX2xWaWV3WzFdLHRoaXMuX2xWaWV3KX1vbkRlc3Ryb3koZSl7XzModGhpcy5fbFZpZXcsZSl9bWFya0ZvckNoZWNrKCl7cTkodGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3fHx0aGlzLl9sVmlldyw0KX1kZXRhY2go''@;'; put 'put ''KXt0aGlzLl9sVmlld1syXSY9LTEyOX1yZWF0dGFjaCgpe2gwKHRoaXMuX2xWaWV3KSx0aGlzLl9sVmlld1syXXw9MTI4fWRldGVjdENoYW5nZXMoKXt0aGlzLl9sVmlld1syXXw9MTAyNCxXeSh0aGlzLl9sVmlldyl9Y2hlY2tOb0NoYW5nZXMoKXt9YXR0YWNoVG9WaWV3Q29udGFpbmVyUmVm''@;'; put 'put ''KCl7aWYodGhpcy5fYXBwUmVmKXRocm93IG5ldyBXbig5MDIsITEpO3RoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSEwfWRldGFjaEZyb21BcHBSZWYoKXt0aGlzLl9hcHBSZWY9bnVsbDtjb25zdCBlPXYzKHRoaXMuX2xWaWV3KSx0PXRoaXMuX2xWaWV3WzE2XTtudWxsIT09dCYmIWUm''@;'; put 'put ''JmhSKHQsdGhpcy5fbFZpZXcpLGRSKHRoaXMuX2xWaWV3WzFdLHRoaXMuX2xWaWV3KX1hdHRhY2hUb0FwcFJlZihlKXtpZih0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcil0aHJvdyBuZXcgV24oOTAyLCExKTt0aGlzLl9hcHBSZWY9ZTtjb25zdCB0PXYzKHRoaXMuX2xWaWV3KSxyPXRo''@;'; put 'put ''aXMuX2xWaWV3WzE2XTtudWxsIT09ciYmIXQmJkk1KHIsdGhpcy5fbFZpZXcpLGgwKHRoaXMuX2xWaWV3KX19bGV0IEZjPSgoKT0+Y2xhc3MgbntfZGVjbGFyYXRpb25MVmlldztfZGVjbGFyYXRpb25UQ29udGFpbmVyO2VsZW1lbnRSZWY7c3RhdGljIF9fTkdfRUxFTUVOVF9JRF9fPW9FO2Nv''@;'; put 'put ''bnN0cnVjdG9yKHQscixpKXt0aGlzLl9kZWNsYXJhdGlvbkxWaWV3PXQsdGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyPXIsdGhpcy5lbGVtZW50UmVmPWl9Z2V0IHNzcklkKCl7cmV0dXJuIHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50Vmlldz8uc3NySWR8fG51bGx9Y3JlYXRlRW1i''@;'; put 'put ''ZWRkZWRWaWV3KHQscil7cmV0dXJuIHRoaXMuY3JlYXRlRW1iZWRkZWRWaWV3SW1wbCh0LHIpfWNyZWF0ZUVtYmVkZGVkVmlld0ltcGwodCxyLGkpe2NvbnN0IG89JDkodGhpcy5fZGVjbGFyYXRpb25MVmlldyx0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXIsdCx7ZW1iZWRkZWRWaWV3SW5q''@;'; put 'put ''ZWN0b3I6cixkZWh5ZHJhdGVkVmlldzppfSk7cmV0dXJuIG5ldyBROShvKX19KSgpO2Z1bmN0aW9uIG9FKCl7cmV0dXJuIHo4KHlpKCksaXQoKSl9ZnVuY3Rpb24gejgobixlKXtyZXR1cm4gNCZuLnR5cGU/bmV3IEZjKGUsbixBOChuLGUpKTpudWxsfWZ1bmN0aW9uIEQ1KG4sZSx0LHIsaSl7''@;'; put 'put ''bGV0IG89bi5kYXRhW2VdO2lmKG51bGw9PT1vKW89ZnVuY3Rpb24gTFIobixlLHQscixpKXtjb25zdCBvPVdhKCksYT1jMSgpLHU9bi5kYXRhW2VdPWZ1bmN0aW9uIG90ZShuLGUsdCxyLGksbyl7bGV0IGE9ZT9lLmluamVjdG9ySW5kZXg6LTEsbD0wO3JldHVybiB2cCgpJiYobHw9MTI4KSx7''@;'; put 'put ''dHlwZTp0LGluZGV4OnIsaW5zZXJ0QmVmb3JlSW5kZXg6bnVsbCxpbmplY3RvckluZGV4OmEsZGlyZWN0aXZlU3RhcnQ6LTEsZGlyZWN0aXZlRW5kOi0xLGRpcmVjdGl2ZVN0eWxpbmdMYXN0Oi0xLGNvbXBvbmVudE9mZnNldDotMSxwcm9wZXJ0eUJpbmRpbmdzOm51bGwsZmxhZ3M6bCxwcm92''@;'; put 'put ''aWRlckluZGV4ZXM6MCx2YWx1ZTppLG5hbWVzcGFjZTpJQSgpLGF0dHJzOm8sbWVyZ2VkQXR0cnM6bnVsbCxsb2NhbE5hbWVzOm51bGwsaW5pdGlhbElucHV0czpudWxsLGlucHV0czpudWxsLGhvc3REaXJlY3RpdmVJbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsaG9zdERpcmVjdGl2ZU91dHB1''@;'; put 'put ''dHM6bnVsbCxkaXJlY3RpdmVUb0luZGV4Om51bGwsdFZpZXc6bnVsbCxuZXh0Om51bGwscHJldjpudWxsLHByb2plY3Rpb25OZXh0Om51bGwsY2hpbGQ6bnVsbCxwYXJlbnQ6ZSxwcm9qZWN0aW9uOm51bGwsc3R5bGVzOm51bGwsc3R5bGVzV2l0aG91dEhvc3Q6bnVsbCxyZXNpZHVhbFN0eWxl''@;'; put 'put ''czp2b2lkIDAsY2xhc3NlczpudWxsLGNsYXNzZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsQ2xhc3Nlczp2b2lkIDAsY2xhc3NCaW5kaW5nczowLHN0eWxlQmluZGluZ3M6MH19KDAsYT9vOm8mJm8ucGFyZW50LHQsZSxyLGkpO3JldHVybiBmdW5jdGlvbiBpdGUobixlLHQscil7bnVsbD09''@;'; put 'put ''PW4uZmlyc3RDaGlsZCYmKG4uZmlyc3RDaGlsZD1lKSxudWxsIT09dCYmKHI/bnVsbD09dC5jaGlsZCYmbnVsbCE9PWUucGFyZW50JiYodC5jaGlsZD1lKTpudWxsPT09dC5uZXh0JiYodC5uZXh0PWUsZS5wcmV2PXQpKX0obix1LG8sYSksdX0obixlLHQscixpKSxmdW5jdGlvbiBmWCgpe3Jl''@;'; put 'put ''dHVybiBwYS5sRnJhbWUuaW5JMThufSgpJiYoby5mbGFnc3w9MzIpO2Vsc2UgaWYoNjQmby50eXBlKXtvLnR5cGU9dCxvLnZhbHVlPXIsby5hdHRycz1pO2NvbnN0IGE9ZnVuY3Rpb24gU3MoKXtjb25zdCBuPXBhLmxGcmFtZSxlPW4uY3VycmVudFROb2RlO3JldHVybiBuLmlzUGFyZW50P2U6''@;'; put 'put ''ZS5wYXJlbnR9KCk7by5pbmplY3RvckluZGV4PW51bGw9PT1hPy0xOmEuaW5qZWN0b3JJbmRleH1yZXR1cm4gV3MobywhMCksb31mdW5jdGlvbiBNbihuLGUpe2xldCB0PTAscj1uLmZpcnN0Q2hpbGQ7aWYocil7Y29uc3QgaT1uLmRhdGEucjtmb3IoO3Q8aTspe2NvbnN0IG89ci5uZXh0U2li''@;'; put 'put ''bGluZztOeShlLHIsITEpLHI9byx0Kyt9fX1sZXQgY2g9Y2xhc3N7fSxFZD1jbGFzc3t9O2NsYXNzIHpke3Jlc29sdmVDb21wb25lbnRGYWN0b3J5KGUpe3Rocm93IG5ldyBXbig5MTcsITEpfX1sZXQgTGg9Y2xhc3N7c3RhdGljIE5VTEw9bmV3IHpkfTtjbGFzcyBnY3t9bGV0IE50PSgoKT0+''@;'; put 'put ''Y2xhc3MgbntkZXN0cm95Tm9kZT1udWxsO3N0YXRpYyBfX05HX0VMRU1FTlRfSURfXz0oKT0+ZnVuY3Rpb24gaG4oKXtjb25zdCBuPWl0KCksdD1aaSh5aSgpLmluZGV4LG4pO3JldHVybih6cyh0KT90Om4pWzExXX0oKX0pKCksUG49KCgpPT57Y2xhc3MgbntzdGF0aWMgXHUwMjc1cHJvdj1K''@;'; put 'put ''bih7dG9rZW46bixwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5udWxsfSl9cmV0dXJuIG59KSgpO2NvbnN0IFFzPXt9O2NsYXNzIF91e2luamVjdG9yO3BhcmVudEluamVjdG9yO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5pbmplY3Rvcj1lLHRoaXMucGFyZW50SW5qZWN0b3I9dH1nZXQo''@;'; put 'put ''ZSx0LHIpe2NvbnN0IGk9dGhpcy5pbmplY3Rvci5nZXQoZSxRcyxyKTtyZXR1cm4gaSE9PVFzfHx0PT09UXM/aTp0aGlzLnBhcmVudEluamVjdG9yLmdldChlLHQscil9fWZ1bmN0aW9uIE1kKG4sZSx0KXtsZXQgcj10P24uc3R5bGVzOm51bGwsaT10P24uY2xhc3NlczpudWxsLG89MDtpZihu''@;'; put 'put ''dWxsIT09ZSlmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl7Y29uc3QgbD1lW2FdOyJudW1iZXIiPT10eXBlb2YgbD9vPWw6MT09bz9pPUwwKGksbCk6Mj09byYmKHI9TDAocixsKyI6ICIrZVsrK2FdKyI7IikpfXQ/bi5zdHlsZXM9cjpuLnN0eWxlc1dpdGhvdXRIb3N0PXIsdD9uLmNsYXNz''@;'; put 'put ''ZXM9aTpuLmNsYXNzZXNXaXRob3V0SG9zdD1pfWZ1bmN0aW9uIHplKG4sZT0wKXtjb25zdCB0PWl0KCk7cmV0dXJuIG51bGw9PT10P29yKG4sZSk6RkgoeWkoKSx0LGZhKG4pLGUpfWZ1bmN0aW9uIEc4KG4sZSx0LHIsaSl7Y29uc3Qgbz1udWxsPT09cj9udWxsOnsiIjotMX0sYT1pKG4sdCk7''@;'; put 'put ''aWYobnVsbCE9PWEpe2xldCBsPWEsdT1udWxsLGc9bnVsbDtmb3IoY29uc3QgRSBvZiBhKWlmKG51bGwhPT1FLnJlc29sdmVIb3N0RGlyZWN0aXZlcyl7W2wsdSxnXT1FLnJlc29sdmVIb3N0RGlyZWN0aXZlcyhhKTticmVha30hZnVuY3Rpb24gZW4obixlLHQscixpLG8sYSl7Y29uc3QgbD1y''@;'; put 'put ''Lmxlbmd0aDtsZXQgdT0hMTtmb3IobGV0IFo9MDtaPGw7WisrKXtjb25zdCBlZT1yW1pdOyF1JiZzMShlZSkmJih1PSEwLGJuKG4sdCxaKSksbmsoZWsodCxlKSxuLGVlLnR5cGUpfSFmdW5jdGlvbiBIaShuLGUsdCl7bi5mbGFnc3w9MSxuLmRpcmVjdGl2ZVN0YXJ0PWUsbi5kaXJlY3RpdmVF''@;'; put 'put ''bmQ9ZSt0LG4ucHJvdmlkZXJJbmRleGVzPWV9KHQsbi5kYXRhLmxlbmd0aCxsKTtmb3IobGV0IFo9MDtaPGw7WisrKXtjb25zdCBlZT1yW1pdO2VlLnByb3ZpZGVyc1Jlc29sdmVyJiZlZS5wcm92aWRlcnNSZXNvbHZlcihlZSl9bGV0IGc9ITEsRT0hMSxPPUh5KG4sZSxsLG51bGwpO2w+MCYm''@;'; put 'put ''KHQuZGlyZWN0aXZlVG9JbmRleD1uZXcgTWFwKTtmb3IobGV0IFo9MDtaPGw7WisrKXtjb25zdCBlZT1yW1pdO2lmKHQubWVyZ2VkQXR0cnM9UjkodC5tZXJnZWRBdHRycyxlZS5ob3N0QXR0cnMpLEJyKG4sdCxlLE8sZWUpLGVvKE8sZWUsaSksbnVsbCE9PWEmJmEuaGFzKGVlKSl7Y29uc3Rb''@;'; put 'put ''TWUsSGVdPWEuZ2V0KGVlKTt0LmRpcmVjdGl2ZVRvSW5kZXguc2V0KGVlLnR5cGUsW08sTWUrdC5kaXJlY3RpdmVTdGFydCxIZSt0LmRpcmVjdGl2ZVN0YXJ0XSl9ZWxzZShudWxsPT09b3x8IW8uaGFzKGVlKSkmJnQuZGlyZWN0aXZlVG9JbmRleC5zZXQoZWUudHlwZSxPKTtudWxsIT09ZWUu''@;'; put 'put ''Y29udGVudFF1ZXJpZXMmJih0LmZsYWdzfD00KSwobnVsbCE9PWVlLmhvc3RCaW5kaW5nc3x8bnVsbCE9PWVlLmhvc3RBdHRyc3x8MCE9PWVlLmhvc3RWYXJzKSYmKHQuZmxhZ3N8PTY0KTtjb25zdCB2ZT1lZS50eXBlLnByb3RvdHlwZTshZyYmKHZlLm5nT25DaGFuZ2VzfHx2ZS5uZ09uSW5p''@;'; put 'put ''dHx8dmUubmdEb0NoZWNrKSYmKChuLnByZU9yZGVySG9va3M/Pz1bXSkucHVzaCh0LmluZGV4KSxnPSEwKSwhRSYmKHZlLm5nT25DaGFuZ2VzfHx2ZS5uZ0RvQ2hlY2spJiYoKG4ucHJlT3JkZXJDaGVja0hvb2tzPz89W10pLnB1c2godC5pbmRleCksRT0hMCksTysrfSFmdW5jdGlvbiBEdChu''@;'; put 'put ''LGUsdCl7Zm9yKGxldCByPWUuZGlyZWN0aXZlU3RhcnQ7cjxlLmRpcmVjdGl2ZUVuZDtyKyspe2NvbnN0IGk9bi5kYXRhW3JdO2lmKG51bGwhPT10JiZ0LmhhcyhpKSl7Y29uc3Qgbz10LmdldChpKTtvbigwLGUsbyxyKSxvbigxLGUsbyxyKSxtcihlLHIsITApfWVsc2UgV3QoMCxlLGksciks''@;'; put 'put ''V3QoMSxlLGksciksbXIoZSxyLCExKX19KG4sdCxvKX0obixlLHQsbCxvLHUsZyl9bnVsbCE9PW8mJm51bGwhPT1yJiZmdW5jdGlvbiBKdChuLGUsdCl7Y29uc3Qgcj1uLmxvY2FsTmFtZXM9W107Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKz0yKXtjb25zdCBvPXRbZVtpKzFdXTtpZihudWxs''@;'; put 'put ''PT1vKXRocm93IG5ldyBXbigtMzAxLCExKTtyLnB1c2goZVtpXSxvKX19KHQscixvKX1mdW5jdGlvbiBibihuLGUsdCl7ZS5jb21wb25lbnRPZmZzZXQ9dCwobi5jb21wb25lbnRzPz89W10pLnB1c2goZS5pbmRleCl9ZnVuY3Rpb24gV3QobixlLHQscil7Y29uc3QgaT0wPT09bj90LmlucHV0''@;'; put 'put ''czp0Lm91dHB1dHM7Zm9yKGNvbnN0IG8gaW4gaSlpZihpLmhhc093blByb3BlcnR5KG8pKXtsZXQgYTthPTA9PT1uP2UuaW5wdXRzPz89e306ZS5vdXRwdXRzPz89e30sYVtvXT8/PVtdLGFbb10ucHVzaChyKSxMbihlLG8pfX1mdW5jdGlvbiBvbihuLGUsdCxyKXtjb25zdCBpPTA9PT1uP3Qu''@;'; put 'put ''aW5wdXRzOnQub3V0cHV0cztmb3IoY29uc3QgbyBpbiBpKWlmKGkuaGFzT3duUHJvcGVydHkobykpe2NvbnN0IGE9aVtvXTtsZXQgbDtsPTA9PT1uP2UuaG9zdERpcmVjdGl2ZUlucHV0cz8/PXt9OmUuaG9zdERpcmVjdGl2ZU91dHB1dHM/Pz17fSxsW2FdPz89W10sbFthXS5wdXNoKHIsbyks''@;'; put 'put ''TG4oZSxhKX19ZnVuY3Rpb24gTG4obixlKXsiY2xhc3MiPT09ZT9uLmZsYWdzfD04OiJzdHlsZSI9PT1lJiYobi5mbGFnc3w9MTYpfWZ1bmN0aW9uIG1yKG4sZSx0KXtjb25zdHthdHRyczpyLGlucHV0czppLGhvc3REaXJlY3RpdmVJbnB1dHM6b309bjtpZihudWxsPT09cnx8IXQmJm51bGw9''@;'; put 'put ''PT1pfHx0JiZudWxsPT09b3x8UHkobikpcmV0dXJuIG4uaW5pdGlhbElucHV0cz8/PVtdLHZvaWQgbi5pbml0aWFsSW5wdXRzLnB1c2gobnVsbCk7bGV0IGE9bnVsbCxsPTA7Zm9yKDtsPHIubGVuZ3RoOyl7Y29uc3QgdT1yW2xdO2lmKDAhPT11KWlmKDUhPT11KXtpZigibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIHUpYnJlYWs7aWYoIXQmJmkuaGFzT3duUHJvcGVydHkodSkpe2NvbnN0IGc9aVt1XTtmb3IoY29uc3QgRSBvZiBnKWlmKEU9PT1lKXthPz89W10sYS5wdXNoKHUscltsKzFdKTticmVha319ZWxzZSBpZih0JiZvLmhhc093blByb3BlcnR5KHUpKXtjb25zdCBnPW9bdV07Zm9yKGxldCBF''@;'; put 'put ''PTA7RTxnLmxlbmd0aDtFKz0yKWlmKGdbRV09PT1lKXthPz89W10sYS5wdXNoKGdbRSsxXSxyW2wrMV0pO2JyZWFrfX1sKz0yfWVsc2UgbCs9MjtlbHNlIGwrPTR9bi5pbml0aWFsSW5wdXRzPz89W10sbi5pbml0aWFsSW5wdXRzLnB1c2goYSl9ZnVuY3Rpb24gQnIobixlLHQscixpKXtuLmRh''@;'; put 'put ''dGFbcl09aTtjb25zdCBvPWkuZmFjdG9yeXx8KGkuZmFjdG9yeT1uYyhpLnR5cGUpKSxhPW5ldyBfeShvLHMxKGkpLHplLG51bGwpO24uYmx1ZXByaW50W3JdPWEsdFtyXT1hLGZ1bmN0aW9uIEVpKG4sZSx0LHIsaSl7Y29uc3Qgbz1pLmhvc3RCaW5kaW5ncztpZihvKXtsZXQgYT1uLmhvc3RC''@;'; put 'put ''aW5kaW5nT3BDb2RlcztudWxsPT09YSYmKGE9bi5ob3N0QmluZGluZ09wQ29kZXM9W10pO2NvbnN0IGw9fmUuaW5kZXg7KGZ1bmN0aW9uIG9pKG4pe2xldCBlPW4ubGVuZ3RoO2Zvcig7ZT4wOyl7Y29uc3QgdD1uWy0tZV07aWYoIm51bWJlciI9PXR5cGVvZiB0JiZ0PDApcmV0dXJuIHR9cmV0''@;'; put 'put ''dXJuIDB9KShhKSE9bCYmYS5wdXNoKGwpLGEucHVzaCh0LHIsbyl9fShuLGUscixIeShuLHQsaS5ob3N0VmFycyxOYyksaSl9ZnVuY3Rpb24gZW8obixlLHQpe2lmKHQpe2lmKGUuZXhwb3J0QXMpZm9yKGxldCByPTA7cjxlLmV4cG9ydEFzLmxlbmd0aDtyKyspdFtlLmV4cG9ydEFzW3JdXT1u''@;'; put 'put ''O3MxKGUpJiYodFsiIl09bil9fWZ1bmN0aW9uIHNhKG4sZSx0LHIsaSxvLGEsbCl7Y29uc3QgdT1lWzFdLGc9dS5jb25zdHMsTz1ENSh1LG4sdCxyLHBjKGcsYSkpO3JldHVybiBvJiZHOCh1LGUsTyxwYyhnLGwpLGkpLE8ubWVyZ2VkQXR0cnM9UjkoTy5tZXJnZWRBdHRycyxPLmF0dHJzKSxu''@;'; put 'put ''dWxsIT09Ty5hdHRycyYmTWQoTyxPLmF0dHJzLCExKSxudWxsIT09Ty5tZXJnZWRBdHRycyYmTWQoTyxPLm1lcmdlZEF0dHJzLCEwKSxudWxsIT09dS5xdWVyaWVzJiZ1LnF1ZXJpZXMuZWxlbWVudFN0YXJ0KHUsTyksT31mdW5jdGlvbiBBbyhuLGUpe01IKG4sZSkscmQoZSkmJm4ucXVlcmll''@;'; put 'put ''cy5lbGVtZW50RW5kKGUpfWZ1bmN0aW9uIHJjKG4pe3JldHVybiEhVTAobikmJihBcnJheS5pc0FycmF5KG4pfHwhKG4gaW5zdGFuY2VvZiBNYXApJiZTeW1ib2wuaXRlcmF0b3IgaW4gbil9ZnVuY3Rpb24gVTAobil7cmV0dXJuIG51bGwhPT1uJiYoImZ1bmN0aW9uIj09dHlwZW9mIG58fCJv''@;'; put 'put ''YmplY3QiPT10eXBlb2Ygbil9ZnVuY3Rpb24gRDIobixlLHQpe3JldHVybiBuW2VdPXR9ZnVuY3Rpb24gb3UobixlLHQpe3JldHVybiB0IT09TmMmJighT2JqZWN0LmlzKG5bZV0sdCkmJihuW2VdPXQsITApKX1mdW5jdGlvbiB6MChuLGUsdCxyKXtjb25zdCBpPW91KG4sZSx0KTtyZXR1cm4g''@;'; put 'put ''b3UobixlKzEscil8fGl9ZnVuY3Rpb24gdWoobixlLHQscixpKXtjb25zdCBvPXowKG4sZSx0LHIpO3JldHVybiBvdShuLGUrMixpKXx8b31mdW5jdGlvbiBVZyhuLGUsdCxyLGksbyl7Y29uc3QgYT16MChuLGUsdCxyKTtyZXR1cm4gejAobixlKzIsaSxvKXx8YX1mdW5jdGlvbiBWUihuLGUs''@;'; put 'put ''dCl7cmV0dXJuIGZ1bmN0aW9uIHIoaSl7cTkod2Yobik/Wmkobi5pbmRleCxlKTplLDUpO2NvbnN0IGE9ZVs4XTtsZXQgbD1yNmUoZSxhLHQsaSksdT1yLl9fbmdOZXh0TGlzdGVuZXJGbl9fO2Zvcig7dTspbD1yNmUoZSxhLHUsaSkmJmwsdT11Ll9fbmdOZXh0TGlzdGVuZXJGbl9fO3JldHVy''@;'; put 'put ''biBsfX1mdW5jdGlvbiByNmUobixlLHQscil7Y29uc3QgaT1rKG51bGwpO3RyeXtyZXR1cm4gR2MoNixlLHQpLCExIT09dChyKX1jYXRjaChvKXtyZXR1cm4gZnVuY3Rpb24gQ1IobixlKXtjb25zdCB0PW5bOV07aWYoIXQpcmV0dXJuO2xldCByO3RyeXtyPXQuZ2V0KF9wLG51bGwpfWNhdGNo''@;'; put 'put ''e3I9bnVsbH1yPy4oZSl9KG4sbyksITF9ZmluYWxseXtHYyg3LGUsdCksayhpKX19ZnVuY3Rpb24gbzZlKG4sZSx0LHIsaSxvLGEpe2NvbnN0IGw9ZS5maXJzdENyZWF0ZVBhc3M/WnUoZSk6bnVsbCx1PWtnKHQpLGc9dS5sZW5ndGg7dS5wdXNoKGksbyksbCYmbC5wdXNoKHIsbixnLChnKzEp''@;'; put 'put ''KihhPy0xOjEpKX1mdW5jdGlvbiBkaihuLGUsdCxyLGksbyl7Y29uc3QgbD1lWzFdLE89ZVt0XVtsLmRhdGFbdF0ub3V0cHV0c1tyXV0uc3Vic2NyaWJlKG8pO282ZShuLmluZGV4LGwsZSxpLG8sTywhMCl9Y29uc3QgdHY9U3ltYm9sKCJCSU5ESU5HIik7Y2xhc3MgYTZlIGV4dGVuZHMgTGh7''@;'; put 'put ''bmdNb2R1bGU7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLm5nTW9kdWxlPWV9cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoZSl7Y29uc3QgdD1jcyhlKTtyZXR1cm4gbmV3IEJSKHQsdGhpcy5uZ01vZHVsZSl9fWNsYXNzIEJSIGV4dGVuZHMgRWR7Y29tcG9uZW50RGVmO25nTW9kdWxlO3Nl''@;'; put 'put ''bGVjdG9yO2NvbXBvbmVudFR5cGU7bmdDb250ZW50U2VsZWN0b3JzO2lzQm91bmRUb01vZHVsZTtjYWNoZWRJbnB1dHM9bnVsbDtjYWNoZWRPdXRwdXRzPW51bGw7Z2V0IGlucHV0cygpe3JldHVybiB0aGlzLmNhY2hlZElucHV0cz8/PWZ1bmN0aW9uIHlxZShuKXtyZXR1cm4gT2JqZWN0Lmtl''@;'; put 'put ''eXMobikubWFwKGU9Pntjb25zdFt0LHIsaV09bltlXSxvPXtwcm9wTmFtZTp0LHRlbXBsYXRlTmFtZTplLGlzU2lnbmFsOjAhPT0ociZZUy5TaWduYWxCYXNlZCl9O3JldHVybiBpJiYoby50cmFuc2Zvcm09aSksb30pfSh0aGlzLmNvbXBvbmVudERlZi5pbnB1dHMpLHRoaXMuY2FjaGVkSW5w''@;'; put 'put ''dXRzfWdldCBvdXRwdXRzKCl7cmV0dXJuIHRoaXMuY2FjaGVkT3V0cHV0cz8/PWZ1bmN0aW9uIGJxZShuKXtyZXR1cm4gT2JqZWN0LmtleXMobikubWFwKGU9Pih7cHJvcE5hbWU6bltlXSx0ZW1wbGF0ZU5hbWU6ZX0pKX0odGhpcy5jb21wb25lbnREZWYub3V0cHV0cyksdGhpcy5jYWNoZWRP''@;'; put 'put ''dXRwdXRzfWNvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSx0aGlzLmNvbXBvbmVudERlZj1lLHRoaXMubmdNb2R1bGU9dCx0aGlzLmNvbXBvbmVudFR5cGU9ZS50eXBlLHRoaXMuc2VsZWN0b3I9ZnVuY3Rpb24gYWVlKG4pe3JldHVybiBuLm1hcChvZWUpLmpvaW4oIiwiKX0oZS5zZWxlY3RvcnMp''@;'; put 'put ''LHRoaXMubmdDb250ZW50U2VsZWN0b3JzPWUubmdDb250ZW50U2VsZWN0b3JzPz9bXSx0aGlzLmlzQm91bmRUb01vZHVsZT0hIXR9Y3JlYXRlKGUsdCxyLGksbyxhKXtHYygyMik7Y29uc3QgbD1rKG51bGwpO3RyeXtjb25zdCB1PXRoaXMuY29tcG9uZW50RGVmLGc9ZnVuY3Rpb24gVHFlKG4s''@;'; put 'put ''ZSx0LHIpe2NvbnN0IGk9bj9bIm5nLXZlcnNpb24iLCIyMC4zLjMwIl06ZnVuY3Rpb24gc2VlKG4pe2NvbnN0IGU9W10sdD1bXTtsZXQgcj0xLGk9Mjtmb3IoO3I8bi5sZW5ndGg7KXtsZXQgbz1uW3JdO2lmKCJzdHJpbmciPT10eXBlb2YgbykyPT09aT8iIiE9PW8mJmUucHVzaChvLG5bKyty''@;'; put 'put ''XSk6OD09PWkmJnQucHVzaChvKTtlbHNle2lmKCF3cChpKSlicmVhaztpPW99cisrfXJldHVybiB0Lmxlbmd0aCYmZS5wdXNoKDEsLi4udCksZX0oZS5zZWxlY3RvcnNbMF0pO2xldCBvPW51bGwsYT1udWxsLGw9MDtpZih0KWZvcihjb25zdCBFIG9mIHQpbCs9RVt0dl0ucmVxdWlyZWRWYXJz''@;'; put 'put ''LEUuY3JlYXRlJiYoRS50YXJnZXRJZHg9MCwobz8/PVtdKS5wdXNoKEUpKSxFLnVwZGF0ZSYmKEUudGFyZ2V0SWR4PTAsKGE/Pz1bXSkucHVzaChFKSk7aWYocilmb3IobGV0IEU9MDtFPHIubGVuZ3RoO0UrKyl7Y29uc3QgTz1yW0VdO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBPKWZvcihjb25z''@;'; put 'put ''dCBaIG9mIE8uYmluZGluZ3Mpe2wrPVpbdHZdLnJlcXVpcmVkVmFycztjb25zdCBlZT1FKzE7Wi5jcmVhdGUmJihaLnRhcmdldElkeD1lZSwobz8/PVtdKS5wdXNoKFopKSxaLnVwZGF0ZSYmKFoudGFyZ2V0SWR4PWVlLChhPz89W10pLnB1c2goWikpfX1jb25zdCB1PVtlXTtpZihyKWZvcihj''@;'; put 'put ''b25zdCBFIG9mIHIpe2NvbnN0IFo9Q3MoImZ1bmN0aW9uIj09dHlwZW9mIEU/RTpFLnR5cGUpO3UucHVzaChaKX1yZXR1cm4gZ0IoMCxudWxsLGZ1bmN0aW9uIHhxZShuLGUpe3JldHVybiBufHxlP3Q9PntpZigxJnQmJm4pZm9yKGNvbnN0IHIgb2YgbilyLmNyZWF0ZSgpO2lmKDImdCYmZSlm''@;'; put 'put ''b3IoY29uc3QgciBvZiBlKXIudXBkYXRlKCl9Om51bGx9KG8sYSksMSxsLHUsbnVsbCxudWxsLG51bGwsW2ldLG51bGwpfShyLHUsYSxvKSxFPWZ1bmN0aW9uIHdxZShuLGUsdCl7bGV0IHI9ZSBpbnN0YW5jZW9mIG5sP2U6ZT8uaW5qZWN0b3I7cmV0dXJuIHImJm51bGwhPT1uLmdldFN0YW5k''@;'; put 'put ''YWxvbmVJbmplY3RvciYmKHI9bi5nZXRTdGFuZGFsb25lSW5qZWN0b3Iocil8fHIpLHI/bmV3IF91KHQscik6dH0odSxpfHx0aGlzLm5nTW9kdWxlLGUpLE89ZnVuY3Rpb24gQ3FlKG4pe2NvbnN0IGU9bi5nZXQoZ2MsbnVsbCk7aWYobnVsbD09PWUpdGhyb3cgbmV3IFduKDQwNywhMSk7cmV0''@;'; put 'put ''dXJue3JlbmRlcmVyRmFjdG9yeTplLHNhbml0aXplcjpuLmdldChQbixudWxsKSxjaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXI6bi5nZXQobTgsbnVsbCksbmdSZWZsZWN0OiExfX0oRSksWj1PLnJlbmRlcmVyRmFjdG9yeS5jcmVhdGVSZW5kZXJlcihudWxsLHUpLGVlPXI/ZnVuY3Rpb24gT2Vl''@;'; put 'put ''KG4sZSx0LHIpe2NvbnN0IG89ci5nZXQoV1EsITEpfHx0PT09UW0uU2hhZG93RG9tLGE9bi5zZWxlY3RSb290RWxlbWVudChlLG8pO3JldHVybiBmdW5jdGlvbiBOZWUobil7UEIobil9KGEpLGF9KFoscix1LmVuY2Fwc3VsYXRpb24sRSk6ZnVuY3Rpb24gU3FlKG4sZSl7Y29uc3QgdD1mdW5j''@;'; put 'put ''dGlvbiBNcWUobil7cmV0dXJuKG4uc2VsZWN0b3JzWzBdWzBdfHwiZGl2IikudG9Mb3dlckNhc2UoKX0obik7cmV0dXJuIFVTKGUsdCwic3ZnIj09PXQ/InN2ZyI6Im1hdGgiPT09dD8ibWF0aCI6bnVsbCl9KHUsWik7IWZ1bmN0aW9uIEVxZShuKXtpZigic2NyaXB0Ij09PW4/LnRvTG93ZXJD''@;'; put 'put ''YXNlKCkpdGhyb3cgbmV3IFduKDkwNSwhMSl9KGVlPy50YWdOYW1lKTtjb25zdCB2ZT1hPy5zb21lKHM2ZSl8fG8/LnNvbWUoV2U9PiJmdW5jdGlvbiIhPXR5cGVvZiBXZSYmV2UuYmluZGluZ3Muc29tZShzNmUpKSxNZT1XUyhudWxsLGcsbnVsbCw1MTJ8ZVIodSksbnVsbCxudWxsLE8sWixF''@;'; put 'put ''LG51bGwsbnVsbCk7TWVbMjddPWVlLGtBKE1lKTtsZXQgSGU9bnVsbDt0cnl7Y29uc3QgV2U9c2EoMjcsTWUsMiwiI2hvc3QiLCgpPT5nLmRpcmVjdGl2ZVJlZ2lzdHJ5LCEwLDApO0pWKFosZWUsV2UpLGowKGVlLE1lKSx0RShnLE1lLFdlKSxCayhnLFdlLE1lKSxBbyhnLFdlKSx2b2lkIDAh''@;'; put 'put ''PT10JiZmdW5jdGlvbiBrcWUobixlLHQpe2NvbnN0IHI9bi5wcm9qZWN0aW9uPVtdO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtjb25zdCBvPXRbaV07ci5wdXNoKG51bGwhPW8mJm8ubGVuZ3RoP0FycmF5LmZyb20obyk6bnVsbCl9fShXZSx0aGlzLm5nQ29udGVudFNlbGVjdG9ycyx0''@;'; put 'put ''KSxIZT1aaShXZS5pbmRleCxNZSksTWVbOF09SGVbOF0saUUoZyxNZSxudWxsKX1jYXRjaChXZSl7dGhyb3cgbnVsbCE9PUhlJiZNeShIZSksTXkoTWUpLFdlfWZpbmFsbHl7R2MoMjMpLGlTKCl9cmV0dXJuIG5ldyBBcWUodGhpcy5jb21wb25lbnRUeXBlLE1lLCEhdmUpfWZpbmFsbHl7ayhs''@;'; put 'put ''KX19fWZ1bmN0aW9uIHM2ZShuKXtjb25zdCBlPW5bdHZdLmtpbmQ7cmV0dXJuImlucHV0Ij09PWV8fCJ0d29XYXkiPT09ZX1jbGFzcyBBcWUgZXh0ZW5kcyBjaHtfcm9vdExWaWV3O19oYXNJbnB1dEJpbmRpbmdzO2luc3RhbmNlO2hvc3RWaWV3O2NoYW5nZURldGVjdG9yUmVmO2NvbXBvbmVu''@;'; put 'put ''dFR5cGU7bG9jYXRpb247cHJldmlvdXNJbnB1dFZhbHVlcz1udWxsO190Tm9kZTtjb25zdHJ1Y3RvcihlLHQscil7c3VwZXIoKSx0aGlzLl9yb290TFZpZXc9dCx0aGlzLl9oYXNJbnB1dEJpbmRpbmdzPXIsdGhpcy5fdE5vZGU9UHModFsxXSwyNyksdGhpcy5sb2NhdGlvbj1BOCh0aGlzLl90''@;'; put 'put ''Tm9kZSx0KSx0aGlzLmluc3RhbmNlPVppKHRoaXMuX3ROb2RlLmluZGV4LHQpWzhdLHRoaXMuaG9zdFZpZXc9dGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1uZXcgUTkodCx2b2lkIDApLHRoaXMuY29tcG9uZW50VHlwZT1lfXNldElucHV0KGUsdCl7Y29uc3Qgcj10aGlzLl90Tm9kZTtpZih0aGlz''@;'; put 'put ''LnByZXZpb3VzSW5wdXRWYWx1ZXM/Pz1uZXcgTWFwLHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcy5oYXMoZSkmJk9iamVjdC5pcyh0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXMuZ2V0KGUpLHQpKXJldHVybjtjb25zdCBpPXRoaXMuX3Jvb3RMVmlldztyRShyLGlbMV0saSxlLHQpLHRoaXMucHJl''@;'; put 'put ''dmlvdXNJbnB1dFZhbHVlcy5zZXQoZSx0KSxxOShaaShyLmluZGV4LGkpLDEpfWdldCBpbmplY3Rvcigpe3JldHVybiBuZXcgQ2QodGhpcy5fdE5vZGUsdGhpcy5fcm9vdExWaWV3KX1kZXN0cm95KCl7dGhpcy5ob3N0Vmlldy5kZXN0cm95KCl9b25EZXN0cm95KGUpe3RoaXMuaG9zdFZpZXcu''@;'; put 'put ''b25EZXN0cm95KGUpfX1sZXQgRHM9KCgpPT5jbGFzcyBue3N0YXRpYyBfX05HX0VMRU1FTlRfSURfXz1ScWV9KSgpO2Z1bmN0aW9uIFJxZSgpe3JldHVybiB1NmUoeWkoKSxpdCgpKX1jb25zdCBJcWU9RHMsbDZlPWNsYXNzIGV4dGVuZHMgSXFle19sQ29udGFpbmVyO19ob3N0VE5vZGU7X2hv''@;'; put 'put ''c3RMVmlldztjb25zdHJ1Y3RvcihlLHQscil7c3VwZXIoKSx0aGlzLl9sQ29udGFpbmVyPWUsdGhpcy5faG9zdFROb2RlPXQsdGhpcy5faG9zdExWaWV3PXJ9Z2V0IGVsZW1lbnQoKXtyZXR1cm4gQTgodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyl9Z2V0IGluamVjdG9yKCl7cmV0''@;'; put 'put ''dXJuIG5ldyBDZCh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1nZXQgcGFyZW50SW5qZWN0b3IoKXtjb25zdCBlPUNTKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpO2lmKFFBKGUpKXtjb25zdCB0PWJ5KGUsdGhpcy5faG9zdExWaWV3KSxyPXk1KGUpO3JldHVybiBu''@;'; put 'put ''ZXcgQ2QodFsxXS5kYXRhW3IrOF0sdCl9cmV0dXJuIG5ldyBDZChudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldChlKXtjb25zdCB0PWM2ZSh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9''@;'; put 'put ''PXQmJnRbZV18fG51bGx9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sQ29udGFpbmVyLmxlbmd0aC0xMH1jcmVhdGVFbWJlZGRlZFZpZXcoZSx0LHIpe2xldCBpLG87Im51bWJlciI9PXR5cGVvZiByP2k9cjpudWxsIT1yJiYoaT1yLmluZGV4LG89ci5pbmplY3Rvcik7Y29uc3QgbD1lLmNy''@;'; put 'put ''ZWF0ZUVtYmVkZGVkVmlld0ltcGwodHx8e30sbyxudWxsKTtyZXR1cm4gdGhpcy5pbnNlcnRJbXBsKGwsaSxVOCh0aGlzLl9ob3N0VE5vZGUsbnVsbCkpLGx9Y3JlYXRlQ29tcG9uZW50KGUsdCxyLGksbyxhLGwpe2NvbnN0IHU9ZSYmIWZ1bmN0aW9uIG01KG4pe3JldHVybiJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBufShlKTtsZXQgZztpZih1KWc9dDtlbHNle2NvbnN0IEhlPXR8fHt9O2c9SGUuaW5kZXgscj1IZS5pbmplY3RvcixpPUhlLnByb2plY3RhYmxlTm9kZXMsbz1IZS5lbnZpcm9ubWVudEluamVjdG9yfHxIZS5uZ01vZHVsZVJlZixhPUhlLmRpcmVjdGl2ZXMsbD1IZS5iaW5kaW5n''@;'; put 'put ''c31jb25zdCBFPXU/ZTpuZXcgQlIoY3MoZSkpLE89cnx8dGhpcy5wYXJlbnRJbmplY3RvcjtpZighbyYmbnVsbD09RS5uZ01vZHVsZSl7Y29uc3QgV2U9KHU/Tzp0aGlzLnBhcmVudEluamVjdG9yKS5nZXQobmwsbnVsbCk7V2UmJihvPVdlKX1jcyhFLmNvbXBvbmVudFR5cGU/P3t9KTtjb25z''@;'; put 'put ''dCBNZT1FLmNyZWF0ZShPLGksbnVsbCxvLGEsbCk7cmV0dXJuIHRoaXMuaW5zZXJ0SW1wbChNZS5ob3N0VmlldyxnLFU4KHRoaXMuX2hvc3RUTm9kZSxudWxsKSksTWV9aW5zZXJ0KGUsdCl7cmV0dXJuIHRoaXMuaW5zZXJ0SW1wbChlLHQsITApfWluc2VydEltcGwoZSx0LHIpe2NvbnN0IGk9''@;'; put 'put ''ZS5fbFZpZXc7aWYoZnVuY3Rpb24gVjEobil7cmV0dXJuIFl1KG5bM10pfShpKSl7Y29uc3QgbD10aGlzLmluZGV4T2YoZSk7aWYoLTEhPT1sKXRoaXMuZGV0YWNoKGwpO2Vsc2V7Y29uc3QgdT1pWzNdLGc9bmV3IGw2ZSh1LHVbNV0sdVszXSk7Zy5kZXRhY2goZy5pbmRleE9mKGUpKX19Y29u''@;'; put 'put ''c3Qgbz10aGlzLl9hZGp1c3RJbmRleCh0KSxhPXRoaXMuX2xDb250YWluZXI7cmV0dXJuIEs5KGEsaSxvLHIpLGUuYXR0YWNoVG9WaWV3Q29udGFpbmVyUmVmKCksdDEodXRlKGEpLG8sZSksZX1tb3ZlKGUsdCl7cmV0dXJuIHRoaXMuaW5zZXJ0KGUsdCl9aW5kZXhPZihlKXtjb25zdCB0PWM2''@;'; put 'put ''ZSh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PXQ/dC5pbmRleE9mKGUpOi0xfXJlbW92ZShlKXtjb25zdCB0PXRoaXMuX2FkanVzdEluZGV4KGUsLTEpLHI9WDkodGhpcy5fbENvbnRhaW5lcix0KTtyJiYoYmQodXRlKHRoaXMuX2xDb250YWluZXIpLHQpLEJ5KHJbMV0scikpfWRl''@;'; put 'put ''dGFjaChlKXtjb25zdCB0PXRoaXMuX2FkanVzdEluZGV4KGUsLTEpLHI9WDkodGhpcy5fbENvbnRhaW5lcix0KTtyZXR1cm4gciYmbnVsbCE9YmQodXRlKHRoaXMuX2xDb250YWluZXIpLHQpP25ldyBROShyKTpudWxsfV9hZGp1c3RJbmRleChlLHQ9MCl7cmV0dXJuIGU/P3RoaXMubGVuZ3Ro''@;'; put 'put ''K3R9fTtmdW5jdGlvbiBjNmUobil7cmV0dXJuIG5bOF19ZnVuY3Rpb24gdXRlKG4pe3JldHVybiBuWzhdfHwobls4XT1bXSl9ZnVuY3Rpb24gdTZlKG4sZSl7bGV0IHQ7Y29uc3Qgcj1lW24uaW5kZXhdO3JldHVybiBZdShyKT90PXI6KHQ9cUIocixlLG51bGwsbiksZVtuLmluZGV4XT10LHRS''@;'; put 'put ''KGUsdCkpLGQ2ZSh0LGUsbixyKSxuZXcgbDZlKHQsbixlKX1sZXQgZDZlPWZ1bmN0aW9uIGY2ZShuLGUsdCxyKXtpZihuWzddKXJldHVybjtsZXQgaTtpPTgmdC50eXBlP0RyKHIpOmZ1bmN0aW9uIERxZShuLGUpe2NvbnN0IHQ9blsxMV0scj10LmNyZWF0ZUNvbW1lbnQoIiIpLGk9WWkoZSxu''@;'; put 'put ''KSxvPXQucGFyZW50Tm9kZShpKTtyZXR1cm4gRjgodCxvLHIsdC5uZXh0U2libGluZyhpKSwhMSkscn0oZSx0KSxuWzddPWl9O2NsYXNzIGh0ZXtxdWVyeUxpc3Q7bWF0Y2hlcz1udWxsO2NvbnN0cnVjdG9yKGUpe3RoaXMucXVlcnlMaXN0PWV9Y2xvbmUoKXtyZXR1cm4gbmV3IGh0ZSh0aGlz''@;'; put 'put ''LnF1ZXJ5TGlzdCl9c2V0RGlydHkoKXt0aGlzLnF1ZXJ5TGlzdC5zZXREaXJ0eSgpfX1jbGFzcyBmdGV7cXVlcmllcztjb25zdHJ1Y3RvcihlPVtdKXt0aGlzLnF1ZXJpZXM9ZX1jcmVhdGVFbWJlZGRlZFZpZXcoZSl7Y29uc3QgdD1lLnF1ZXJpZXM7aWYobnVsbCE9PXQpe2NvbnN0IHI9bnVs''@;'; put 'put ''bCE9PWUuY29udGVudFF1ZXJpZXM/ZS5jb250ZW50UXVlcmllc1swXTp0Lmxlbmd0aCxpPVtdO2ZvcihsZXQgbz0wO288cjtvKyspe2NvbnN0IGE9dC5nZXRCeUluZGV4KG8pO2kucHVzaCh0aGlzLnF1ZXJpZXNbYS5pbmRleEluRGVjbGFyYXRpb25WaWV3XS5jbG9uZSgpKX1yZXR1cm4gbmV3''@;'; put 'put ''IGZ0ZShpKX1yZXR1cm4gbnVsbH1pbnNlcnRWaWV3KGUpe3RoaXMuZGlydHlRdWVyaWVzV2l0aE1hdGNoZXMoZSl9ZGV0YWNoVmlldyhlKXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGUpfWZpbmlzaFZpZXdDcmVhdGlvbihlKXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGUp''@;'; put 'put ''fWRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGUpe2ZvcihsZXQgdD0wO3Q8dGhpcy5xdWVyaWVzLmxlbmd0aDt0KyspbnVsbCE9PV90ZShlLHQpLm1hdGNoZXMmJnRoaXMucXVlcmllc1t0XS5zZXREaXJ0eSgpfX1jbGFzcyBwNmV7ZmxhZ3M7cmVhZDtwcmVkaWNhdGU7Y29uc3RydWN0b3IoZSx0''@;'; put 'put ''LHI9bnVsbCl7dGhpcy5mbGFncz10LHRoaXMucmVhZD1yLHRoaXMucHJlZGljYXRlPSJzdHJpbmciPT10eXBlb2YgZT9mdW5jdGlvbiBWcWUobil7cmV0dXJuIG4uc3BsaXQoIiwiKS5tYXAoZT0+ZS50cmltKCkpfShlKTplfX1jbGFzcyBwdGV7cXVlcmllcztjb25zdHJ1Y3RvcihlPVtdKXt0''@;'; put 'put ''aGlzLnF1ZXJpZXM9ZX1lbGVtZW50U3RhcnQoZSx0KXtmb3IobGV0IHI9MDtyPHRoaXMucXVlcmllcy5sZW5ndGg7cisrKXRoaXMucXVlcmllc1tyXS5lbGVtZW50U3RhcnQoZSx0KX1lbGVtZW50RW5kKGUpe2ZvcihsZXQgdD0wO3Q8dGhpcy5xdWVyaWVzLmxlbmd0aDt0KyspdGhpcy5xdWVy''@;'; put 'put ''aWVzW3RdLmVsZW1lbnRFbmQoZSl9ZW1iZWRkZWRUVmlldyhlKXtsZXQgdD1udWxsO2ZvcihsZXQgcj0wO3I8dGhpcy5sZW5ndGg7cisrKXtjb25zdCBpPW51bGwhPT10P3QubGVuZ3RoOjAsbz10aGlzLmdldEJ5SW5kZXgocikuZW1iZWRkZWRUVmlldyhlLGkpO28mJihvLmluZGV4SW5EZWNs''@;'; put 'put ''YXJhdGlvblZpZXc9cixudWxsIT09dD90LnB1c2gobyk6dD1bb10pfXJldHVybiBudWxsIT09dD9uZXcgcHRlKHQpOm51bGx9dGVtcGxhdGUoZSx0KXtmb3IobGV0IHI9MDtyPHRoaXMucXVlcmllcy5sZW5ndGg7cisrKXRoaXMucXVlcmllc1tyXS50ZW1wbGF0ZShlLHQpfWdldEJ5SW5kZXgo''@;'; put 'put ''ZSl7cmV0dXJuIHRoaXMucXVlcmllc1tlXX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMucXVlcmllcy5sZW5ndGh9dHJhY2soZSl7dGhpcy5xdWVyaWVzLnB1c2goZSl9fWNsYXNzIGd0ZXttZXRhZGF0YTttYXRjaGVzPW51bGw7aW5kZXhJbkRlY2xhcmF0aW9uVmlldz0tMTtjcm9zc2VzTmdU''@;'; put 'put ''ZW1wbGF0ZT0hMTtfZGVjbGFyYXRpb25Ob2RlSW5kZXg7X2FwcGxpZXNUb05leHROb2RlPSEwO2NvbnN0cnVjdG9yKGUsdD0tMSl7dGhpcy5tZXRhZGF0YT1lLHRoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4PXR9ZWxlbWVudFN0YXJ0KGUsdCl7dGhpcy5pc0FwcGx5aW5nVG9Ob2RlKHQpJiZ0''@;'; put 'put ''aGlzLm1hdGNoVE5vZGUoZSx0KX1lbGVtZW50RW5kKGUpe3RoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4PT09ZS5pbmRleCYmKHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSExKX10ZW1wbGF0ZShlLHQpe3RoaXMuZWxlbWVudFN0YXJ0KGUsdCl9ZW1iZWRkZWRUVmlldyhlLHQpe3JldHVybiB0''@;'; put 'put ''aGlzLmlzQXBwbHlpbmdUb05vZGUoZSk/KHRoaXMuY3Jvc3Nlc05nVGVtcGxhdGU9ITAsdGhpcy5hZGRNYXRjaCgtZS5pbmRleCx0KSxuZXcgZ3RlKHRoaXMubWV0YWRhdGEpKTpudWxsfWlzQXBwbHlpbmdUb05vZGUoZSl7aWYodGhpcy5fYXBwbGllc1RvTmV4dE5vZGUmJjEmfnRoaXMubWV0''@;'; put 'put ''YWRhdGEuZmxhZ3Mpe2NvbnN0IHQ9dGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg7bGV0IHI9ZS5wYXJlbnQ7Zm9yKDtudWxsIT09ciYmOCZyLnR5cGUmJnIuaW5kZXghPT10OylyPXIucGFyZW50O3JldHVybiB0PT09KG51bGwhPT1yP3IuaW5kZXg6LTEpfXJldHVybiB0aGlzLl9hcHBsaWVz''@;'; put 'put ''VG9OZXh0Tm9kZX1tYXRjaFROb2RlKGUsdCl7Y29uc3Qgcj10aGlzLm1ldGFkYXRhLnByZWRpY2F0ZTtpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtjb25zdCBvPXJbaV07dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24oZSx0LE5xZSh0LG8pKSx0''@;'; put 'put ''aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihlLHQsSTkodCxlLG8sITEsITEpKX1lbHNlIHI9PT1GYz80JnQudHlwZSYmdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24oZSx0LC0xKTp0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihlLHQsSTkodCxlLHIsITEsITEpKX1tYXRj''@;'; put 'put ''aFROb2RlV2l0aFJlYWRPcHRpb24oZSx0LHIpe2lmKG51bGwhPT1yKXtjb25zdCBpPXRoaXMubWV0YWRhdGEucmVhZDtpZihudWxsIT09aSlpZihpPT09bm98fGk9PT1Ec3x8aT09PUZjJiY0JnQudHlwZSl0aGlzLmFkZE1hdGNoKHQuaW5kZXgsLTIpO2Vsc2V7Y29uc3Qgbz1JOSh0LGUsaSwh''@;'; put 'put ''MSwhMSk7bnVsbCE9PW8mJnRoaXMuYWRkTWF0Y2godC5pbmRleCxvKX1lbHNlIHRoaXMuYWRkTWF0Y2godC5pbmRleCxyKX19YWRkTWF0Y2goZSx0KXtudWxsPT09dGhpcy5tYXRjaGVzP3RoaXMubWF0Y2hlcz1bZSx0XTp0aGlzLm1hdGNoZXMucHVzaChlLHQpfX1mdW5jdGlvbiBOcWUobixl''@;'; put 'put ''KXtjb25zdCB0PW4ubG9jYWxOYW1lcztpZihudWxsIT09dClmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrPTIpaWYodFtyXT09PWUpcmV0dXJuIHRbcisxXTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBQcWUobixlLHQscil7cmV0dXJuLTE9PT10P2Z1bmN0aW9uIEZxZShuLGUpe3JldHVybiAxMSZu''@;'; put 'put ''LnR5cGU/QTgobixlKTo0Jm4udHlwZT96OChuLGUpOm51bGx9KGUsbik6LTI9PT10P2Z1bmN0aW9uIEhxZShuLGUsdCl7cmV0dXJuIHQ9PT1ubz9BOChlLG4pOnQ9PT1GYz96OChlLG4pOnQ9PT1Ecz91NmUoZSxuKTp2b2lkIDB9KG4sZSxyKTp3eShuLG5bMV0sdCxlKX1mdW5jdGlvbiBnNmUo''@;'; put 'put ''bixlLHQscil7Y29uc3QgaT1lWzE4XS5xdWVyaWVzW3JdO2lmKG51bGw9PT1pLm1hdGNoZXMpe2NvbnN0IG89bi5kYXRhLGE9dC5tYXRjaGVzLGw9W107Zm9yKGxldCB1PTA7bnVsbCE9PWEmJnU8YS5sZW5ndGg7dSs9Mil7Y29uc3QgZz1hW3VdO2wucHVzaChnPDA/bnVsbDpQcWUoZSxvW2dd''@;'; put 'put ''LGFbdSsxXSx0Lm1ldGFkYXRhLnJlYWQpKX1pLm1hdGNoZXM9bH1yZXR1cm4gaS5tYXRjaGVzfWZ1bmN0aW9uIG10ZShuLGUsdCxyKXtjb25zdCBpPW4ucXVlcmllcy5nZXRCeUluZGV4KHQpLG89aS5tYXRjaGVzO2lmKG51bGwhPT1vKXtjb25zdCBhPWc2ZShuLGUsaSx0KTtmb3IobGV0IGw9''@;'; put 'put ''MDtsPG8ubGVuZ3RoO2wrPTIpe2NvbnN0IHU9b1tsXTtpZih1PjApci5wdXNoKGFbbC8yXSk7ZWxzZXtjb25zdCBnPW9bbCsxXSxFPWVbLXVdO2ZvcihsZXQgTz0xMDtPPEUubGVuZ3RoO08rKyl7Y29uc3QgWj1FW09dO1pbMTZdPT09WlszXSYmbXRlKFpbMV0sWixnLHIpfWlmKG51bGwhPT1F''@;'; put 'put ''WzldKXtjb25zdCBPPUVbOV07Zm9yKGxldCBaPTA7WjxPLmxlbmd0aDtaKyspe2NvbnN0IGVlPU9bWl07bXRlKGVlWzFdLGVlLGcscil9fX19fXJldHVybiByfWZ1bmN0aW9uIG02ZShuLGUsdCl7Y29uc3Qgcj1uZXcgazgoISg0Jn50KSk7cmV0dXJuIGZ1bmN0aW9uIFM5KG4sZSx0LHIpe2Nv''@;'; put 'put ''bnN0IGk9a2coZSk7aS5wdXNoKHQpLG4uZmlyc3RDcmVhdGVQYXNzJiZadShuKS5wdXNoKHIsaS5sZW5ndGgtMSl9KG4sZSxyLHIuZGVzdHJveSksKGVbMThdPz89bmV3IGZ0ZSkucXVlcmllcy5wdXNoKG5ldyBodGUocikpLTF9ZnVuY3Rpb24geTZlKG4sZSx0KXtudWxsPT09bi5xdWVyaWVz''@;'; put 'put ''JiYobi5xdWVyaWVzPW5ldyBwdGUpLG4ucXVlcmllcy50cmFjayhuZXcgZ3RlKGUsdCkpfWZ1bmN0aW9uIF90ZShuLGUpe3JldHVybiBuLnF1ZXJpZXMuZ2V0QnlJbmRleChlKX1mdW5jdGlvbiBiNmUobixlKXtjb25zdCB0PW5bMV0scj1fdGUodCxlKTtyZXR1cm4gci5jcm9zc2VzTmdUZW1w''@;'; put 'put ''bGF0ZT9tdGUodCxuLGUsW10pOmc2ZSh0LG4scixlKX1sZXQgWHk9Y2xhc3N7fSxNNmU9Y2xhc3N7fTtjbGFzcyB3dGUgZXh0ZW5kcyBYeXtuZ01vZHVsZVR5cGU7X3BhcmVudDtfYm9vdHN0cmFwQ29tcG9uZW50cz1bXTtfcjNJbmplY3RvcjtpbnN0YW5jZTtkZXN0cm95Q2JzPVtdO2NvbXBv''@;'; put 'put ''bmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgYTZlKHRoaXMpO2NvbnN0cnVjdG9yKGUsdCxyLGk9ITApe3N1cGVyKCksdGhpcy5uZ01vZHVsZVR5cGU9ZSx0aGlzLl9wYXJlbnQ9dDtjb25zdCBvPXIxKGUpO3RoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9Vmcoby5ib290c3RyYXApLHRoaXMuX3Iz''@;'; put 'put ''SW5qZWN0b3I9UVAoZSx0LFt7cHJvdmlkZTpYeSx1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTpMaCx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn0sLi4ucl0sUnMoZSksbmV3IFNldChbImVudmlyb25tZW50Il0pKSxpJiZ0aGlzLnJlc29sdmVJbmplY3RvckluaXRpYWxp''@;'; put 'put ''emVycygpfXJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpe3RoaXMuX3IzSW5qZWN0b3IucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCksdGhpcy5pbnN0YW5jZT10aGlzLl9yM0luamVjdG9yLmdldCh0aGlzLm5nTW9kdWxlVHlwZSl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X3IzSW5qZWN0b3J9ZGVzdHJveSgpe2NvbnN0IGU9dGhpcy5fcjNJbmplY3RvcjshZS5kZXN0cm95ZWQmJmUuZGVzdHJveSgpLHRoaXMuZGVzdHJveUNicy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5kZXN0cm95Q2JzPW51bGx9b25EZXN0cm95KGUpe3RoaXMuZGVzdHJveUNicy5wdXNoKGUpfX1j''@;'; put 'put ''bGFzcyBUNmUgZXh0ZW5kcyBNNmV7bW9kdWxlVHlwZTtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMubW9kdWxlVHlwZT1lfWNyZWF0ZShlKXtyZXR1cm4gbmV3IHd0ZSh0aGlzLm1vZHVsZVR5cGUsZSxbXSl9fWNsYXNzIFhxZSBleHRlbmRzIFh5e2luamVjdG9yO2NvbXBvbmVudEZhY3Rv''@;'; put 'put ''cnlSZXNvbHZlcj1uZXcgYTZlKHRoaXMpO2luc3RhbmNlPW51bGw7Y29uc3RydWN0b3IoZSl7c3VwZXIoKTtjb25zdCB0PW5ldyBIMShbLi4uZS5wcm92aWRlcnMse3Byb3ZpZGU6WHksdXNlVmFsdWU6dGhpc30se3Byb3ZpZGU6TGgsdXNlVmFsdWU6dGhpcy5jb21wb25lbnRGYWN0b3J5UmVz''@;'; put 'put ''b2x2ZXJ9XSxlLnBhcmVudHx8aTUoKSxlLmRlYnVnTmFtZSxuZXcgU2V0KFsiZW52aXJvbm1lbnQiXSkpO3RoaXMuaW5qZWN0b3I9dCxlLnJ1bkVudmlyb25tZW50SW5pdGlhbGl6ZXJzJiZ0LnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpfWRlc3Ryb3koKXt0aGlzLmluamVjdG9yLmRl''@;'; put 'put ''c3Ryb3koKX1vbkRlc3Ryb3koZSl7dGhpcy5pbmplY3Rvci5vbkRlc3Ryb3koZSl9fWZ1bmN0aW9uIGhqKG4sZSx0PW51bGwpe3JldHVybiBuZXcgWHFlKHtwcm92aWRlcnM6bixwYXJlbnQ6ZSxkZWJ1Z05hbWU6dCxydW5FbnZpcm9ubWVudEluaXRpYWxpemVyczohMH0pLmluamVjdG9yfWxl''@;'; put 'put ''dCBRcWU9KCgpPT57Y2xhc3MgbntfaW5qZWN0b3I7Y2FjaGVkSW5qZWN0b3JzPW5ldyBNYXA7Y29uc3RydWN0b3IodCl7dGhpcy5faW5qZWN0b3I9dH1nZXRPckNyZWF0ZVN0YW5kYWxvbmVJbmplY3Rvcih0KXtpZighdC5zdGFuZGFsb25lKXJldHVybiBudWxsO2lmKCF0aGlzLmNhY2hlZElu''@;'; put 'put ''amVjdG9ycy5oYXModCkpe2NvbnN0IHI9UDEoMCx0LnR5cGUpLGk9ci5sZW5ndGg+MD9oaihbcl0sdGhpcy5faW5qZWN0b3IsYFN0YW5kYWxvbmVbJHt0LnR5cGUubmFtZX1dYCk6bnVsbDt0aGlzLmNhY2hlZEluamVjdG9ycy5zZXQodCxpKX1yZXR1cm4gdGhpcy5jYWNoZWRJbmplY3RvcnMu''@;'; put 'put ''Z2V0KHQpfW5nT25EZXN0cm95KCl7dHJ5e2Zvcihjb25zdCB0IG9mIHRoaXMuY2FjaGVkSW5qZWN0b3JzLnZhbHVlcygpKW51bGwhPT10JiZ0LmRlc3Ryb3koKX1maW5hbGx5e3RoaXMuY2FjaGVkSW5qZWN0b3JzLmNsZWFyKCl9fXN0YXRpYyBcdTAyNzVwcm92PUpuKHt0b2tlbjpuLHByb3Zp''@;'; put 'put ''ZGVkSW46ImVudmlyb25tZW50IixmYWN0b3J5OigpPT5uZXcgbihvcihubCkpfSl9cmV0dXJuIG59KSgpO2Z1bmN0aW9uIFByKG4pe3JldHVybiBUZigoKT0+e2NvbnN0IGU9QTZlKG4pLHQ9ey4uLmUsZGVjbHM6bi5kZWNscyx2YXJzOm4udmFycyx0ZW1wbGF0ZTpuLnRlbXBsYXRlLGNvbnN0''@;'; put 'put ''czpuLmNvbnN0c3x8bnVsbCxuZ0NvbnRlbnRTZWxlY3RvcnM6bi5uZ0NvbnRlbnRTZWxlY3RvcnMsb25QdXNoOm4uY2hhbmdlRGV0ZWN0aW9uPT09RXkuT25QdXNoLGRpcmVjdGl2ZURlZnM6bnVsbCxwaXBlRGVmczpudWxsLGRlcGVuZGVuY2llczplLnN0YW5kYWxvbmUmJm4uZGVwZW5kZW5j''@;'; put 'put ''aWVzfHxudWxsLGdldFN0YW5kYWxvbmVJbmplY3RvcjplLnN0YW5kYWxvbmU/aT0+aS5nZXQoUXFlKS5nZXRPckNyZWF0ZVN0YW5kYWxvbmVJbmplY3Rvcih0KTpudWxsLGdldEV4dGVybmFsU3R5bGVzOm51bGwsc2lnbmFsczpuLnNpZ25hbHM/PyExLGRhdGE6bi5kYXRhfHx7fSxlbmNhcHN1''@;'; put 'put ''bGF0aW9uOm4uZW5jYXBzdWxhdGlvbnx8UW0uRW11bGF0ZWQsc3R5bGVzOm4uc3R5bGVzfHxKYSxfOm51bGwsc2NoZW1hczpuLnNjaGVtYXN8fG51bGwsdFZpZXc6bnVsbCxpZDoiIn07ZS5zdGFuZGFsb25lJiZqMSgiTmdTdGFuZGFsb25lIiksazZlKHQpO2NvbnN0IHI9bi5kZXBlbmRlbmNp''@;'; put 'put ''ZXM7cmV0dXJuIHQuZGlyZWN0aXZlRGVmcz1maihyLHg2ZSksdC5waXBlRGVmcz1maihyLG51KSx0LmlkPWZ1bmN0aW9uIG5LZShuKXtsZXQgZT0wO2NvbnN0IHI9W24uc2VsZWN0b3JzLG4ubmdDb250ZW50U2VsZWN0b3JzLG4uaG9zdFZhcnMsbi5ob3N0QXR0cnMsImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIG4uY29uc3RzPyIiOm4uY29uc3RzLG4udmFycyxuLmRlY2xzLG4uZW5jYXBzdWxhdGlvbixuLnN0YW5kYWxvbmUsbi5zaWduYWxzLG4uZXhwb3J0QXMsSlNPTi5zdHJpbmdpZnkobi5pbnB1dHMpLEpTT04uc3RyaW5naWZ5KG4ub3V0cHV0cyksT2JqZWN0LmdldE93blByb3BlcnR5TmFt''@;'; put 'put ''ZXMobi50eXBlLnByb3RvdHlwZSksISFuLmNvbnRlbnRRdWVyaWVzLCEhbi52aWV3UXVlcnldO2Zvcihjb25zdCBvIG9mIHIuam9pbigifCIpKWU9TWF0aC5pbXVsKDMxLGUpK28uY2hhckNvZGVBdCgwKXwwO3JldHVybiBlKz0yMTQ3NDgzNjQ4LCJjIitlfSh0KSx0fSl9ZnVuY3Rpb24geDZl''@;'; put 'put ''KG4pe3JldHVybiBjcyhuKXx8Q3Mobil9ZnVuY3Rpb24gR2kobil7cmV0dXJuIFRmKCgpPT4oe3R5cGU6bi50eXBlLGJvb3RzdHJhcDpuLmJvb3RzdHJhcHx8SmEsZGVjbGFyYXRpb25zOm4uZGVjbGFyYXRpb25zfHxKYSxpbXBvcnRzOm4uaW1wb3J0c3x8SmEsZXhwb3J0czpuLmV4cG9ydHN8''@;'; put 'put ''fEphLHRyYW5zaXRpdmVDb21waWxlU2NvcGVzOm51bGwsc2NoZW1hczpuLnNjaGVtYXN8fG51bGwsaWQ6bi5pZHx8bnVsbH0pKX1mdW5jdGlvbiBKcWUobixlKXtpZihudWxsPT1uKXJldHVybiBxcztjb25zdCB0PXt9O2Zvcihjb25zdCByIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShyKSl7''@;'; put 'put ''Y29uc3QgaT1uW3JdO2xldCBvLGEsbCx1O0FycmF5LmlzQXJyYXkoaSk/KGw9aVswXSxvPWlbMV0sYT1pWzJdPz9vLHU9aVszXXx8bnVsbCk6KG89aSxhPWksbD1ZUy5Ob25lLHU9bnVsbCksdFtvXT1bcixsLHVdLGVbb109YX1yZXR1cm4gdH1mdW5jdGlvbiBlS2Uobil7aWYobnVsbD09bily''@;'; put 'put ''ZXR1cm4gcXM7Y29uc3QgZT17fTtmb3IoY29uc3QgdCBpbiBuKW4uaGFzT3duUHJvcGVydHkodCkmJihlW25bdF1dPXQpO3JldHVybiBlfWZ1bmN0aW9uICRyKG4pe3JldHVybiBUZigoKT0+e2NvbnN0IGU9QTZlKG4pO3JldHVybiBrNmUoZSksZX0pfWZ1bmN0aW9uIHVoKG4pe3JldHVybnt0''@;'; put 'put ''eXBlOm4udHlwZSxuYW1lOm4ubmFtZSxmYWN0b3J5Om51bGwscHVyZTohMSE9PW4ucHVyZSxzdGFuZGFsb25lOm4uc3RhbmRhbG9uZT8/ITAsb25EZXN0cm95Om4udHlwZS5wcm90b3R5cGUubmdPbkRlc3Ryb3l8fG51bGx9fWZ1bmN0aW9uIEE2ZShuKXtjb25zdCBlPXt9O3JldHVybnt0eXBl''@;'; put 'put ''Om4udHlwZSxwcm92aWRlcnNSZXNvbHZlcjpudWxsLGZhY3Rvcnk6bnVsbCxob3N0QmluZGluZ3M6bi5ob3N0QmluZGluZ3N8fG51bGwsaG9zdFZhcnM6bi5ob3N0VmFyc3x8MCxob3N0QXR0cnM6bi5ob3N0QXR0cnN8fG51bGwsY29udGVudFF1ZXJpZXM6bi5jb250ZW50UXVlcmllc3x8bnVs''@;'; put 'put ''bCxkZWNsYXJlZElucHV0czplLGlucHV0Q29uZmlnOm4uaW5wdXRzfHxxcyxleHBvcnRBczpuLmV4cG9ydEFzfHxudWxsLHN0YW5kYWxvbmU6bi5zdGFuZGFsb25lPz8hMCxzaWduYWxzOiEwPT09bi5zaWduYWxzLHNlbGVjdG9yczpuLnNlbGVjdG9yc3x8SmEsdmlld1F1ZXJ5Om4udmlld1F1''@;'; put 'put ''ZXJ5fHxudWxsLGZlYXR1cmVzOm4uZmVhdHVyZXN8fG51bGwsc2V0SW5wdXQ6bnVsbCxyZXNvbHZlSG9zdERpcmVjdGl2ZXM6bnVsbCxob3N0RGlyZWN0aXZlczpudWxsLGlucHV0czpKcWUobi5pbnB1dHMsZSksb3V0cHV0czplS2Uobi5vdXRwdXRzKSxkZWJ1Z0luZm86bnVsbH19ZnVuY3Rp''@;'; put 'put ''b24gazZlKG4pe24uZmVhdHVyZXM/LmZvckVhY2goZT0+ZShuKSl9ZnVuY3Rpb24gZmoobixlKXtyZXR1cm4gbj8oKT0+e2NvbnN0IHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bigpOm4scj1bXTtmb3IoY29uc3QgaSBvZiB0KXtjb25zdCBvPWUoaSk7bnVsbCE9PW8mJnIucHVzaChvKX1yZXR1''@;'; put 'put ''cm4gcn06bnVsbH1mdW5jdGlvbiBGbyhuKXtsZXQgZT1mdW5jdGlvbiBSNmUobil7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuLnByb3RvdHlwZSkuY29uc3RydWN0b3J9KG4udHlwZSksdD0hMDtjb25zdCByPVtuXTtmb3IoO2U7KXtsZXQgaTtpZihzMShuKSlpPWUuXHUwMjc1Y21w''@;'; put 'put ''fHxlLlx1MDI3NWRpcjtlbHNle2lmKGUuXHUwMjc1Y21wKXRocm93IG5ldyBXbig5MDMsITEpO2k9ZS5cdTAyNzVkaXJ9aWYoaSl7aWYodCl7ci5wdXNoKGkpO2NvbnN0IGE9bjthLmlucHV0cz1DdGUobi5pbnB1dHMpLGEuZGVjbGFyZWRJbnB1dHM9Q3RlKG4uZGVjbGFyZWRJbnB1dHMpLGEu''@;'; put 'put ''b3V0cHV0cz1DdGUobi5vdXRwdXRzKTtjb25zdCBsPWkuaG9zdEJpbmRpbmdzO2wmJnNLZShuLGwpO2NvbnN0IHU9aS52aWV3UXVlcnksZz1pLmNvbnRlbnRRdWVyaWVzO2lmKHUmJm9LZShuLHUpLGcmJmFLZShuLGcpLHJLZShuLGkpLHNwKG4ub3V0cHV0cyxpLm91dHB1dHMpLHMxKGkpJiZp''@;'; put 'put ''LmRhdGEuYW5pbWF0aW9uKXtjb25zdCBFPW4uZGF0YTtFLmFuaW1hdGlvbj0oRS5hbmltYXRpb258fFtdKS5jb25jYXQoaS5kYXRhLmFuaW1hdGlvbil9fWNvbnN0IG89aS5mZWF0dXJlcztpZihvKWZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKXtjb25zdCBsPW9bYV07bCYmbC5uZ0luaGVy''@;'; put 'put ''aXQmJmwobiksbD09PUZvJiYodD0hMSl9fWU9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSFmdW5jdGlvbiBpS2Uobil7bGV0IGU9MCx0PW51bGw7Zm9yKGxldCByPW4ubGVuZ3RoLTE7cj49MDtyLS0pe2NvbnN0IGk9bltyXTtpLmhvc3RWYXJzPWUrPWkuaG9zdFZhcnMsaS5ob3N0QXR0cnM9''@;'; put 'put ''UjkoaS5ob3N0QXR0cnMsdD1SOSh0LGkuaG9zdEF0dHJzKSl9fShyKX1mdW5jdGlvbiByS2UobixlKXtmb3IoY29uc3QgdCBpbiBlLmlucHV0cyl7aWYoIWUuaW5wdXRzLmhhc093blByb3BlcnR5KHQpfHxuLmlucHV0cy5oYXNPd25Qcm9wZXJ0eSh0KSljb250aW51ZTtjb25zdCByPWUuaW5w''@;'; put 'put ''dXRzW3RdO3ZvaWQgMCE9PXImJihuLmlucHV0c1t0XT1yLG4uZGVjbGFyZWRJbnB1dHNbdF09ZS5kZWNsYXJlZElucHV0c1t0XSl9fWZ1bmN0aW9uIEN0ZShuKXtyZXR1cm4gbj09PXFzP3t9Om49PT1KYT9bXTpufWZ1bmN0aW9uIG9LZShuLGUpe2NvbnN0IHQ9bi52aWV3UXVlcnk7bi52aWV3''@;'; put 'put ''UXVlcnk9dD8ocixpKT0+e2UocixpKSx0KHIsaSl9OmV9ZnVuY3Rpb24gYUtlKG4sZSl7Y29uc3QgdD1uLmNvbnRlbnRRdWVyaWVzO24uY29udGVudFF1ZXJpZXM9dD8ocixpLG8pPT57ZShyLGksbyksdChyLGksbyl9OmV9ZnVuY3Rpb24gc0tlKG4sZSl7Y29uc3QgdD1uLmhvc3RCaW5kaW5n''@;'; put 'put ''cztuLmhvc3RCaW5kaW5ncz10PyhyLGkpPT57ZShyLGkpLHQocixpKX06ZX1mdW5jdGlvbiB6ZyhuKXtjb25zdCBlPXQ9Pntjb25zdCByPUFycmF5LmlzQXJyYXkobik7bnVsbD09PXQuaG9zdERpcmVjdGl2ZXM/KHQucmVzb2x2ZUhvc3REaXJlY3RpdmVzPWRLZSx0Lmhvc3REaXJlY3RpdmVz''@;'; put 'put ''PXI/bi5tYXAoU3RlKTpbbl0pOnI/dC5ob3N0RGlyZWN0aXZlcy51bnNoaWZ0KC4uLm4ubWFwKFN0ZSkpOnQuaG9zdERpcmVjdGl2ZXMudW5zaGlmdChuKX07cmV0dXJuIGUubmdJbmhlcml0PSEwLGV9ZnVuY3Rpb24gZEtlKG4pe2NvbnN0IGU9W107bGV0IHQ9ITEscj1udWxsLGk9bnVsbDtm''@;'; put 'put ''b3IobGV0IG89MDtvPG4ubGVuZ3RoO28rKyl7Y29uc3QgYT1uW29dO2lmKG51bGwhPT1hLmhvc3REaXJlY3RpdmVzKXtjb25zdCBsPWUubGVuZ3RoO3I/Pz1uZXcgTWFwLGk/Pz1uZXcgTWFwLEk2ZShhLGUsciksaS5zZXQoYSxbbCxlLmxlbmd0aC0xXSl9MD09PW8mJnMxKGEpJiYodD0hMCxl''@;'; put 'put ''LnB1c2goYSkpfWZvcihsZXQgbz10PzE6MDtvPG4ubGVuZ3RoO28rKyllLnB1c2gobltvXSk7cmV0dXJuW2UscixpXX1mdW5jdGlvbiBJNmUobixlLHQpe2lmKG51bGwhPT1uLmhvc3REaXJlY3RpdmVzKWZvcihjb25zdCByIG9mIG4uaG9zdERpcmVjdGl2ZXMpaWYoImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIHIpe2NvbnN0IGk9cigpO2Zvcihjb25zdCBvIG9mIGkpRDZlKFN0ZShvKSxlLHQpfWVsc2UgRDZlKHIsZSx0KX1mdW5jdGlvbiBENmUobixlLHQpe2NvbnN0IHI9Q3Mobi5kaXJlY3RpdmUpOyhmdW5jdGlvbiBoS2UobixlKXtmb3IoY29uc3QgdCBpbiBlKWUuaGFzT3duUHJvcGVydHko''@;'; put 'put ''dCkmJihuW2VbdF1dPW5bdF0pfSkoci5kZWNsYXJlZElucHV0cyxuLmlucHV0cyksSTZlKHIsZSx0KSx0LnNldChyLG4pLGUucHVzaChyKX1mdW5jdGlvbiBTdGUobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4/e2RpcmVjdGl2ZTpmYShuKSxpbnB1dHM6cXMsb3V0cHV0czpxc306e2Rp''@;'; put 'put ''cmVjdGl2ZTpmYShuLmRpcmVjdGl2ZSksaW5wdXRzOkw2ZShuLmlucHV0cyksb3V0cHV0czpMNmUobi5vdXRwdXRzKX19ZnVuY3Rpb24gTDZlKG4pe2lmKHZvaWQgMD09PW58fDA9PT1uLmxlbmd0aClyZXR1cm4gcXM7Y29uc3QgZT17fTtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrPTIpZVtu''@;'; put 'put ''W3RdXT1uW3QrMV07cmV0dXJuIGV9ZnVuY3Rpb24gTjZlKG4sZSx0LHIsaSxvLGEsbCl7aWYodC5maXJzdENyZWF0ZVBhc3Mpe24ubWVyZ2VkQXR0cnM9Ujkobi5tZXJnZWRBdHRycyxuLmF0dHJzKTtjb25zdCBFPW4udFZpZXc9Z0IoMixuLGksbyxhLHQuZGlyZWN0aXZlUmVnaXN0cnksdC5w''@;'; put 'put ''aXBlUmVnaXN0cnksbnVsbCx0LnNjaGVtYXMsdC5jb25zdHMsbnVsbCk7bnVsbCE9PXQucXVlcmllcyYmKHQucXVlcmllcy50ZW1wbGF0ZSh0LG4pLEUucXVlcmllcz10LnF1ZXJpZXMuZW1iZWRkZWRUVmlldyhuKSl9bCYmKG4uZmxhZ3N8PWwpLFdzKG4sITEpO2NvbnN0IHU9RjZlKHQsZSxu''@;'; put 'put ''LHIpO29TKCkmJnZSKHQsZSx1LG4pLGowKHUsZSk7Y29uc3QgZz1xQih1LGUsdSxuKTtlW3IrMjddPWcsdFIoZSxnKX1mdW5jdGlvbiBReShuLGUsdCxyLGksbyxhLGwsdSxnLEUpe2NvbnN0IE89dCsyNztsZXQgWjtpZihlLmZpcnN0Q3JlYXRlUGFzcyl7aWYoWj1ENShlLE8sNCxhfHxudWxs''@;'; put 'put ''LGx8fG51bGwpLG51bGwhPWcpe2NvbnN0IGVlPXBjKGUuY29uc3RzLGcpO1oubG9jYWxOYW1lcz1bXTtmb3IobGV0IHZlPTA7dmU8ZWUubGVuZ3RoO3ZlKz0yKVoubG9jYWxOYW1lcy5wdXNoKGVlW3ZlXSwtMSl9fWVsc2UgWj1lLmRhdGFbT107cmV0dXJuIE42ZShaLG4sZSx0LHIsaSxvLHUp''@;'; put 'put ''LG51bGwhPWcmJlk5KG4sWixFKSxafWZ1bmN0aW9uIFluKG4sZSx0LHIsaSxvLGEsbCl7Y29uc3QgdT1pdCgpLGc9RnQoKTtyZXR1cm4gZnVuY3Rpb24gZktlKG4sZSx0LHIsaSxvLGEsbCx1LGcsRSl7Y29uc3QgTz10KzI3O2xldCBaO2UuZmlyc3RDcmVhdGVQYXNzPyhaPUQ1KGUsTyw0LGF8''@;'; put 'put ''fG51bGwsbHx8bnVsbCksSWcoKSYmRzgoZSxuLFoscGMoZS5jb25zdHMsZyksRzkpLE1IKGUsWikpOlo9ZS5kYXRhW09dLE42ZShaLG4sZSx0LHIsaSxvLHUpLENmKFopJiZ0RShlLG4sWiksbnVsbCE9ZyYmWTkobixaLEUpfSh1LGcsbixlLHQscixpLHBjKGcuY29uc3RzLG8pLHZvaWQgMCxh''@;'; put 'put ''LGwpLFlufWZ1bmN0aW9uIEV0ZShuLGUsdCxyLGksbyxhLGwpe2NvbnN0IHU9aXQoKSxnPUZ0KCk7cmV0dXJuIFF5KHUsZyxuLGUsdCxyLGkscGMoZy5jb25zdHMsbyksdm9pZCAwLGEsbCksRXRlfWxldCBGNmU9ZnVuY3Rpb24gUDZlKG4sZSx0LHIpe3JldHVybiBweSghMCksZVsxMV0uY3Jl''@;'; put 'put ''YXRlQ29tbWVudCgiIil9O2xldCBLNmU9KCgpPT57Y2xhc3Mgbntsb2codCl7Y29uc29sZS5sb2codCl9d2Fybih0KXtjb25zb2xlLndhcm4odCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0''@;'; put 'put ''b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pfXJldHVybiBufSkoKTtjb25zdCBkOGU9bmV3IEVyKCIiKSx3aj1uZXcgRXIoIiIpO2xldCBMdGUsSXRlPSgoKT0+e2NsYXNzIG57X25nWm9uZTtyZWdpc3RyeTtfaXNab25lU3RhYmxlPSEwO19jYWxsYmFja3M9W107X3Rh''@;'; put 'put ''c2tUcmFja2luZ1pvbmU9bnVsbDtfZGVzdHJveVJlZjtjb25zdHJ1Y3Rvcih0LHIsaSl7dGhpcy5fbmdab25lPXQsdGhpcy5yZWdpc3RyeT1yLEVnKCkmJih0aGlzLl9kZXN0cm95UmVmPXNuKE0yLHtvcHRpb25hbDohMH0pPz92b2lkIDApLEx0ZXx8KGZ1bmN0aW9uIHdYZShuKXtMdGU9bn0o''@;'; put 'put ''aSksaS5hZGRUb1dpbmRvdyhyKSksdGhpcy5fd2F0Y2hBbmd1bGFyRXZlbnRzKCksdC5ydW4oKCk9Pnt0aGlzLl90YXNrVHJhY2tpbmdab25lPXR5cGVvZiBab25lPiJ1Ij9udWxsOlpvbmUuY3VycmVudC5nZXQoIlRhc2tUcmFja2luZ1pvbmUiKX0pfV93YXRjaEFuZ3VsYXJFdmVudHMoKXtj''@;'; put 'put ''b25zdCB0PXRoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX2lzWm9uZVN0YWJsZT0hMX19KSxyPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5fbmdab25lLm9uU3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e2dhLmFzc2Vy''@;'; put 'put ''dE5vdEluQW5ndWxhclpvbmUoKSxxdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMuX2lzWm9uZVN0YWJsZT0hMCx0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9KX19KSk7dGhpcy5fZGVzdHJveVJlZj8ub25EZXN0cm95KCgpPT57dC51bnN1YnNjcmliZSgpLHIudW5zdWJzY3JpYmUoKX0pfWlz''@;'; put 'put ''U3RhYmxlKCl7cmV0dXJuIHRoaXMuX2lzWm9uZVN0YWJsZSYmIXRoaXMuX25nWm9uZS5oYXNQZW5kaW5nTWFjcm90YXNrc31fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpe2lmKHRoaXMuaXNTdGFibGUoKSlxdWV1ZU1pY3JvdGFzaygoKT0+e2Zvcig7MCE9PXRoaXMuX2NhbGxiYWNrcy5sZW5ndGg7''@;'; put 'put ''KXtsZXQgdD10aGlzLl9jYWxsYmFja3MucG9wKCk7Y2xlYXJUaW1lb3V0KHQudGltZW91dElkKSx0LmRvbmVDYigpfX0pO2Vsc2V7bGV0IHQ9dGhpcy5nZXRQZW5kaW5nVGFza3MoKTt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzLmZpbHRlcihyPT4hci51cGRhdGVDYnx8IXIudXBk''@;'; put 'put ''YXRlQ2IodCl8fChjbGVhclRpbWVvdXQoci50aW1lb3V0SWQpLCExKSl9fWdldFBlbmRpbmdUYXNrcygpe3JldHVybiB0aGlzLl90YXNrVHJhY2tpbmdab25lP3RoaXMuX3Rhc2tUcmFja2luZ1pvbmUubWFjcm9UYXNrcy5tYXAodD0+KHtzb3VyY2U6dC5zb3VyY2UsY3JlYXRpb25Mb2NhdGlv''@;'; put 'put ''bjp0LmNyZWF0aW9uTG9jYXRpb24sZGF0YTp0LmRhdGF9KSk6W119YWRkQ2FsbGJhY2sodCxyLGkpe2xldCBvPS0xO3ImJnI+MCYmKG89c2V0VGltZW91dCgoKT0+e3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKGE9PmEudGltZW91dElkIT09byksdCgpfSxyKSksdGhp''@;'; put 'put ''cy5fY2FsbGJhY2tzLnB1c2goe2RvbmVDYjp0LHRpbWVvdXRJZDpvLHVwZGF0ZUNiOml9KX13aGVuU3RhYmxlKHQscixpKXtpZihpJiYhdGhpcy5fdGFza1RyYWNraW5nWm9uZSl0aHJvdyBuZXcgRXJyb3IoJ1Rhc2sgdHJhY2tpbmcgem9uZSBpcyByZXF1aXJlZCB3aGVuIHBhc3NpbmcgYW4g''@;'; put 'put ''dXBkYXRlIGNhbGxiYWNrIHRvIHdoZW5TdGFibGUoKS4gSXMgInpvbmUuanMvcGx1Z2lucy90YXNrLXRyYWNraW5nIiBsb2FkZWQ/Jyk7dGhpcy5hZGRDYWxsYmFjayh0LHIsaSksdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfXJlZ2lzdGVyQXBwbGljYXRpb24odCl7dGhpcy5yZWdpc3Ry''@;'; put 'put ''eS5yZWdpc3RlckFwcGxpY2F0aW9uKHQsdGhpcyl9dW5yZWdpc3RlckFwcGxpY2F0aW9uKHQpe3RoaXMucmVnaXN0cnkudW5yZWdpc3RlckFwcGxpY2F0aW9uKHQpfWZpbmRQcm92aWRlcnModCxyLGkpe3JldHVybltdfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhy''@;'; put 'put ''fHxuKShvcihnYSksb3IoRHRlKSxvcih3aikpfTtzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSl9cmV0dXJuIG59KSgpLER0ZT0oKCk9PntjbGFzcyBue19hcHBsaWNhdGlvbnM9bmV3IE1hcDtyZWdpc3RlckFwcGxpY2F0aW9uKHQscil7dGhpcy5f''@;'; put 'put ''YXBwbGljYXRpb25zLnNldCh0LHIpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbih0KXt0aGlzLl9hcHBsaWNhdGlvbnMuZGVsZXRlKHQpfXVucmVnaXN0ZXJBbGxBcHBsaWNhdGlvbnMoKXt0aGlzLl9hcHBsaWNhdGlvbnMuY2xlYXIoKX1nZXRUZXN0YWJpbGl0eSh0KXtyZXR1cm4gdGhpcy5fYXBw''@;'; put 'put ''bGljYXRpb25zLmdldCh0KXx8bnVsbH1nZXRBbGxUZXN0YWJpbGl0aWVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLnZhbHVlcygpKX1nZXRBbGxSb290RWxlbWVudHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMua2V5cygpKX1maW5kVGVz''@;'; put 'put ''dGFiaWxpdHlJblRyZWUodCxyPSEwKXtyZXR1cm4gTHRlPy5maW5kVGVzdGFiaWxpdHlJblRyZWUodGhpcyx0LHIpPz9udWxsfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3''@;'; put 'put ''NWZhYyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gWlIobil7cmV0dXJuISFuJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi50aGVufWZ1bmN0aW9uIGg4ZShuKXtyZXR1cm4hIW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLnN1YnNjcmliZX1jb25zdCBmOGU9bmV3''@;'; put 'put ''IEVyKCIiKTtmdW5jdGlvbiBwOGUobil7cmV0dXJuIG5kKFt7cHJvdmlkZTpmOGUsbXVsdGk6ITAsdXNlVmFsdWU6bn1dKX1sZXQgZzhlPSgoKT0+e2NsYXNzIG57cmVzb2x2ZTtyZWplY3Q7aW5pdGlhbGl6ZWQ9ITE7ZG9uZT0hMTtkb25lUHJvbWlzZT1uZXcgUHJvbWlzZSgodCxyKT0+e3Ro''@;'; put 'put ''aXMucmVzb2x2ZT10LHRoaXMucmVqZWN0PXJ9KTthcHBJbml0cz1zbihmOGUse29wdGlvbmFsOiEwfSk/P1tdO2luamVjdG9yPXNuKE1sKTtjb25zdHJ1Y3Rvcigpe31ydW5Jbml0aWFsaXplcnMoKXtpZih0aGlzLmluaXRpYWxpemVkKXJldHVybjtjb25zdCB0PVtdO2Zvcihjb25zdCBpIG9m''@;'; put 'put ''IHRoaXMuYXBwSW5pdHMpe2NvbnN0IG89THUodGhpcy5pbmplY3RvcixpKTtpZihaUihvKSl0LnB1c2gobyk7ZWxzZSBpZihoOGUobykpe2NvbnN0IGE9bmV3IFByb21pc2UoKGwsdSk9PntvLnN1YnNjcmliZSh7Y29tcGxldGU6bCxlcnJvcjp1fSl9KTt0LnB1c2goYSl9fWNvbnN0IHI9KCk9''@;'; put 'put ''Pnt0aGlzLmRvbmU9ITAsdGhpcy5yZXNvbHZlKCl9O1Byb21pc2UuYWxsKHQpLnRoZW4oKCk9PntyKCl9KS5jYXRjaChpPT57dGhpcy5yZWplY3QoaSl9KSwwPT09dC5sZW5ndGgmJnIoKSx0aGlzLmluaXRpYWxpemVkPSEwfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5l''@;'; put 'put ''dyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKTtjb25zdCBtOGU9bmV3IEVyKCIiKTtmdW5jdGlvbiB2OGUobixlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLnJlZHVjZSh2''@;'; put 'put ''OGUsbik6ey4uLm4sLi4uZX19bGV0IFdnPSgoKT0+e2NsYXNzIG57X3J1bm5pbmdUaWNrPSExO19kZXN0cm95ZWQ9ITE7X2Rlc3Ryb3lMaXN0ZW5lcnM9W107X3ZpZXdzPVtdO2ludGVybmFsRXJyb3JIYW5kbGVyPXNuKF9wKTthZnRlclJlbmRlck1hbmFnZXI9c24oeEIpO3pvbmVsZXNzRW5h''@;'; put 'put ''YmxlZD1zbihuSCk7cm9vdEVmZmVjdFNjaGVkdWxlcj1zbihvSCk7ZGlydHlGbGFncz0wO3RyYWNpbmdTbmFwc2hvdD1udWxsO2FsbFRlc3RWaWV3cz1uZXcgU2V0O2F1dG9EZXRlY3RUZXN0Vmlld3M9bmV3IFNldDtpbmNsdWRlQWxsVGVzdFZpZXdzPSExO2FmdGVyVGljaz1uZXcgTXI7Z2V0''@;'; put 'put ''IGFsbFZpZXdzKCl7cmV0dXJuWy4uLih0aGlzLmluY2x1ZGVBbGxUZXN0Vmlld3M/dGhpcy5hbGxUZXN0Vmlld3M6dGhpcy5hdXRvRGV0ZWN0VGVzdFZpZXdzKS5rZXlzKCksLi4udGhpcy5fdmlld3NdfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfWNvbXBvbmVudFR5''@;'; put 'put ''cGVzPVtdO2NvbXBvbmVudHM9W107aW50ZXJuYWxQZW5kaW5nVGFzaz1zbihzNSk7Z2V0IGlzU3RhYmxlKCl7cmV0dXJuIHRoaXMuaW50ZXJuYWxQZW5kaW5nVGFzay5oYXNQZW5kaW5nVGFza3NPYnNlcnZhYmxlLnBpcGUoRXModD0+IXQpKX1jb25zdHJ1Y3Rvcigpe3NuKHo5LHtvcHRpb25h''@;'; put 'put ''bDohMH0pfXdoZW5TdGFibGUoKXtsZXQgdDtyZXR1cm4gbmV3IFByb21pc2Uocj0+e3Q9dGhpcy5pc1N0YWJsZS5zdWJzY3JpYmUoe25leHQ6aT0+e2kmJnIoKX19KX0pLmZpbmFsbHkoKCk9Pnt0LnVuc3Vic2NyaWJlKCl9KX1faW5qZWN0b3I9c24obmwpO19yZW5kZXJlckZhY3Rvcnk9bnVs''@;'; put 'put ''bDtnZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9Ym9vdHN0cmFwKHQscil7cmV0dXJuIHRoaXMuYm9vdHN0cmFwSW1wbCh0LHIpfWJvb3RzdHJhcEltcGwodCxyLGk9TWwuTlVMTCl7cmV0dXJuIHRoaXMuX2luamVjdG9yLmdldChnYSkucnVuKCgpPT57R2MoMTApO2NvbnN0''@;'; put 'put ''IGE9dCBpbnN0YW5jZW9mIEVkO2lmKCF0aGlzLl9pbmplY3Rvci5nZXQoZzhlKS5kb25lKXRocm93IG5ldyBXbig0MDUsIiIpO2xldCB1O3U9YT90OnRoaXMuX2luamVjdG9yLmdldChMaCkucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodCksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKHUuY29t''@;'; put 'put ''cG9uZW50VHlwZSk7Y29uc3QgZz1mdW5jdGlvbiBTWGUobil7cmV0dXJuIG4uaXNCb3VuZFRvTW9kdWxlfSh1KT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0KFh5KSxPPXUuY3JlYXRlKGksW10scnx8dS5zZWxlY3RvcixnKSxaPU8ubG9jYXRpb24ubmF0aXZlRWxlbWVudCxlZT1PLmluamVj''@;'; put 'put ''dG9yLmdldChkOGUsbnVsbCk7cmV0dXJuIGVlPy5yZWdpc3RlckFwcGxpY2F0aW9uKFopLE8ub25EZXN0cm95KCgpPT57dGhpcy5kZXRhY2hWaWV3KE8uaG9zdFZpZXcpLENqKHRoaXMuY29tcG9uZW50cyxPKSxlZT8udW5yZWdpc3RlckFwcGxpY2F0aW9uKFopfSksdGhpcy5fbG9hZENvbXBv''@;'; put 'put ''bmVudChPKSxHYygxMSxPKSxPfSl9dGljaygpe3RoaXMuem9uZWxlc3NFbmFibGVkfHwodGhpcy5kaXJ0eUZsYWdzfD0xKSx0aGlzLl90aWNrKCl9X3RpY2soKXtHYygxMiksbnVsbCE9PXRoaXMudHJhY2luZ1NuYXBzaG90P3RoaXMudHJhY2luZ1NuYXBzaG90LnJ1bigkUy5DSEFOR0VfREVU''@;'; put 'put ''RUNUSU9OLHRoaXMudGlja0ltcGwpOnRoaXMudGlja0ltcGwoKX10aWNrSW1wbD0oKT0+e2lmKHRoaXMuX3J1bm5pbmdUaWNrKXRocm93IG5ldyBXbigxMDEsITEpO2NvbnN0IHQ9ayhudWxsKTt0cnl7dGhpcy5fcnVubmluZ1RpY2s9ITAsdGhpcy5zeW5jaHJvbml6ZSgpfWZpbmFsbHl7dGhp''@;'; put 'put ''cy5fcnVubmluZ1RpY2s9ITEsdGhpcy50cmFjaW5nU25hcHNob3Q/LmRpc3Bvc2UoKSx0aGlzLnRyYWNpbmdTbmFwc2hvdD1udWxsLGsodCksdGhpcy5hZnRlclRpY2submV4dCgpLEdjKDEzKX19O3N5bmNocm9uaXplKCl7bnVsbD09PXRoaXMuX3JlbmRlcmVyRmFjdG9yeSYmIXRoaXMuX2lu''@;'; put 'put ''amVjdG9yLmRlc3Ryb3llZCYmKHRoaXMuX3JlbmRlcmVyRmFjdG9yeT10aGlzLl9pbmplY3Rvci5nZXQoZ2MsbnVsbCx7b3B0aW9uYWw6ITB9KSk7bGV0IHQ9MDtmb3IoOzAhPT10aGlzLmRpcnR5RmxhZ3MmJnQrKzwxMDspR2MoMTQpLHRoaXMuc3luY2hyb25pemVPbmNlKCksR2MoMTUpfXN5''@;'; put 'put ''bmNocm9uaXplT25jZSgpezE2JnRoaXMuZGlydHlGbGFncyYmKHRoaXMuZGlydHlGbGFncyY9LTE3LHRoaXMucm9vdEVmZmVjdFNjaGVkdWxlci5mbHVzaCgpKTtsZXQgdD0hMTtpZig3JnRoaXMuZGlydHlGbGFncyl7Y29uc3Qgcj0hISgxJnRoaXMuZGlydHlGbGFncyk7dGhpcy5kaXJ0eUZs''@;'; put 'put ''YWdzJj0tOCx0aGlzLmRpcnR5RmxhZ3N8PTg7Zm9yKGxldHtfbFZpZXc6aX1vZiB0aGlzLmFsbFZpZXdzKShyfHxaYyhpKSkmJihXeShpLHImJiF0aGlzLnpvbmVsZXNzRW5hYmxlZD8wOjEpLHQ9ITApO2lmKHRoaXMuZGlydHlGbGFncyY9LTUsdGhpcy5zeW5jRGlydHlGbGFnc1dpdGhWaWV3''@;'; put 'put ''cygpLDIzJnRoaXMuZGlydHlGbGFncylyZXR1cm59dHx8KHRoaXMuX3JlbmRlcmVyRmFjdG9yeT8uYmVnaW4/LigpLHRoaXMuX3JlbmRlcmVyRmFjdG9yeT8uZW5kPy4oKSksOCZ0aGlzLmRpcnR5RmxhZ3MmJih0aGlzLmRpcnR5RmxhZ3MmPS05LHRoaXMuYWZ0ZXJSZW5kZXJNYW5hZ2VyLmV4''@;'; put 'put ''ZWN1dGUoKSksdGhpcy5zeW5jRGlydHlGbGFnc1dpdGhWaWV3cygpfXN5bmNEaXJ0eUZsYWdzV2l0aFZpZXdzKCl7dGhpcy5hbGxWaWV3cy5zb21lKCh7X2xWaWV3OnR9KT0+WmModCkpP3RoaXMuZGlydHlGbGFnc3w9Mjp0aGlzLmRpcnR5RmxhZ3MmPS04fWF0dGFjaFZpZXcodCl7Y29uc3Qg''@;'; put 'put ''cj10O3RoaXMuX3ZpZXdzLnB1c2gociksci5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRhY2hWaWV3KHQpe2NvbnN0IHI9dDtDaih0aGlzLl92aWV3cyxyKSxyLmRldGFjaEZyb21BcHBSZWYoKX1fbG9hZENvbXBvbmVudCh0KXt0aGlzLmF0dGFjaFZpZXcodC5ob3N0Vmlldyk7dHJ5e3RoaXMu''@;'; put 'put ''dGljaygpfWNhdGNoKGkpe3RoaXMuaW50ZXJuYWxFcnJvckhhbmRsZXIoaSl9dGhpcy5jb21wb25lbnRzLnB1c2godCksdGhpcy5faW5qZWN0b3IuZ2V0KG04ZSxbXSkuZm9yRWFjaChpPT5pKHQpKX1uZ09uRGVzdHJveSgpe2lmKCF0aGlzLl9kZXN0cm95ZWQpdHJ5e3RoaXMuX2Rlc3Ryb3lM''@;'; put 'put ''aXN0ZW5lcnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX3ZpZXdzLnNsaWNlKCkuZm9yRWFjaCh0PT50LmRlc3Ryb3koKSl9ZmluYWxseXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fdmlld3M9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXX19b25EZXN0cm95KHQpe3JldHVybiB0aGlzLl9k''@;'; put 'put ''ZXN0cm95TGlzdGVuZXJzLnB1c2godCksKCk9PkNqKHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMsdCl9ZGVzdHJveSgpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgV24oNDA2LCExKTtjb25zdCB0PXRoaXMuX2luamVjdG9yO3QuZGVzdHJveSYmIXQuZGVzdHJveWVkJiZ0LmRlc3Ryb3ko''@;'; put 'put ''KX1nZXQgdmlld0NvdW50KCl7cmV0dXJuIHRoaXMuX3ZpZXdzLmxlbmd0aH1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1''@;'; put 'put ''cm4gbn0pKCk7ZnVuY3Rpb24gQ2oobixlKXtjb25zdCB0PW4uaW5kZXhPZihlKTt0Pi0xJiZuLnNwbGljZSh0LDEpfWZ1bmN0aW9uIFJyKG4sZSx0LHIpe2NvbnN0IGk9aXQoKTtyZXR1cm4gb3UoaSxFMigpLGUpJiYoRnQoKSxmdW5jdGlvbiBqQihuLGUsdCxyLGksbyl7Y29uc3QgYT1ZaShu''@;'; put 'put ''LGUpOyFmdW5jdGlvbiB6aShuLGUsdCxyLGksbyxhKXtpZihudWxsPT1vKW4ucmVtb3ZlQXR0cmlidXRlKGUsaSx0KTtlbHNle2NvbnN0IGw9bnVsbD09YT9pYShvKTphKG8scnx8IiIsaSk7bi5zZXRBdHRyaWJ1dGUoZSxpLGwsdCl9fShlWzExXSxhLG8sbi52YWx1ZSx0LHIsaSl9KHkzKCks''@;'; put 'put ''aSxuLGUsdCxyKSksUnJ9dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQ7Y2xhc3MgYlFle2Rlc3Ryb3koZSl7fXVwZGF0ZVZhbHVlKGUsdCl7fXN3YXAoZSx0KXtjb25zdCByPU1hdGgubWluKGUsdCksaT1NYXRoLm1heChlLHQpLG89dGhpcy5kZXRhY2goaSk7aWYoaS1yPjEpe2NvbnN0''@;'; put 'put ''IGE9dGhpcy5kZXRhY2gocik7dGhpcy5hdHRhY2gocixvKSx0aGlzLmF0dGFjaChpLGEpfWVsc2UgdGhpcy5hdHRhY2gocixvKX1tb3ZlKGUsdCl7dGhpcy5hdHRhY2godCx0aGlzLmRldGFjaChlKSl9fWZ1bmN0aW9uIFd0ZShuLGUsdCxyLGkpe3JldHVybiBuPT09dCYmT2JqZWN0LmlzKGUs''@;'; put 'put ''cik/MTpPYmplY3QuaXMoaShuLGUpLGkodCxyKSk/LTE6MH1mdW5jdGlvbiBZdGUobixlLHQscil7cmV0dXJuISh2b2lkIDA9PT1lfHwhZS5oYXMocil8fChuLmF0dGFjaCh0LGUuZ2V0KHIpKSxlLmRlbGV0ZShyKSwwKSl9ZnVuY3Rpb24gUjhlKG4sZSx0LHIsaSl7aWYoWXRlKG4sZSxyLHQo''@;'; put 'put ''cixpKSkpbi51cGRhdGVWYWx1ZShyLGkpO2Vsc2V7Y29uc3Qgbz1uLmNyZWF0ZShyLGkpO24uYXR0YWNoKHIsbyl9fWZ1bmN0aW9uIEk4ZShuLGUsdCxyKXtjb25zdCBpPW5ldyBTZXQ7Zm9yKGxldCBvPWU7bzw9dDtvKyspaS5hZGQocihvLG4uYXQobykpKTtyZXR1cm4gaX1jbGFzcyBEOGV7''@;'; put 'put ''a3ZNYXA9bmV3IE1hcDtfdk1hcD12b2lkIDA7aGFzKGUpe3JldHVybiB0aGlzLmt2TWFwLmhhcyhlKX1kZWxldGUoZSl7aWYoIXRoaXMuaGFzKGUpKXJldHVybiExO2NvbnN0IHQ9dGhpcy5rdk1hcC5nZXQoZSk7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3ZNYXAmJnRoaXMuX3ZNYXAuaGFzKHQp''@;'; put 'put ''Pyh0aGlzLmt2TWFwLnNldChlLHRoaXMuX3ZNYXAuZ2V0KHQpKSx0aGlzLl92TWFwLmRlbGV0ZSh0KSk6dGhpcy5rdk1hcC5kZWxldGUoZSksITB9Z2V0KGUpe3JldHVybiB0aGlzLmt2TWFwLmdldChlKX1zZXQoZSx0KXtpZih0aGlzLmt2TWFwLmhhcyhlKSl7bGV0IHI9dGhpcy5rdk1hcC5n''@;'; put 'put ''ZXQoZSk7dm9pZCAwPT09dGhpcy5fdk1hcCYmKHRoaXMuX3ZNYXA9bmV3IE1hcCk7Y29uc3QgaT10aGlzLl92TWFwO2Zvcig7aS5oYXMocik7KXI9aS5nZXQocik7aS5zZXQocix0KX1lbHNlIHRoaXMua3ZNYXAuc2V0KGUsdCl9Zm9yRWFjaChlKXtmb3IobGV0W3Qscl1vZiB0aGlzLmt2TWFw''@;'; put 'put ''KWlmKGUocix0KSx2b2lkIDAhPT10aGlzLl92TWFwKXtjb25zdCBpPXRoaXMuX3ZNYXA7Zm9yKDtpLmhhcyhyKTspcj1pLmdldChyKSxlKHIsdCl9fX1mdW5jdGlvbiB2dChuLGUsdCxyLGksbyxhLGwpe2oxKCJOZ0NvbnRyb2xGbG93Iik7Y29uc3QgdT1pdCgpLGc9RnQoKTtyZXR1cm4gUXko''@;'; put 'put ''dSxnLG4sZSx0LHIsaSxwYyhnLmNvbnN0cyxvKSwyNTYsYSxsKSxadGV9ZnVuY3Rpb24gWnRlKG4sZSx0LHIsaSxvLGEsbCl7ajEoIk5nQ29udHJvbEZsb3ciKTtjb25zdCB1PWl0KCksZz1GdCgpO3JldHVybiBReSh1LGcsbixlLHQscixpLHBjKGcuY29uc3RzLG8pLDUxMixhLGwpLFp0ZX1m''@;'; put 'put ''dW5jdGlvbiBfdChuLGUpe2oxKCJOZ0NvbnRyb2xGbG93Iik7Y29uc3QgdD1pdCgpLHI9RTIoKSxpPXRbcl0hPT1OYz90W3JdOi0xLG89LTEhPT1pP0lqKHQsMjcraSk6dm9pZCAwO2lmKG91KHQscixuKSl7Y29uc3QgbD1rKG51bGwpO3RyeXtpZih2b2lkIDAhPT1vJiZzaChvLDApLC0xIT09''@;'; put 'put ''bil7Y29uc3QgdT0yNytuLGc9SWoodCx1KSxFPUd0ZSh0WzFdLHUpLE89bnVsbDtLOShnLCQ5KHQsRSxlLHtkZWh5ZHJhdGVkVmlldzpPfSksMCxVOChFLE8pKX19ZmluYWxseXtrKGwpfX1lbHNlIGlmKHZvaWQgMCE9PW8pe2NvbnN0IGw9S0IobywwKTt2b2lkIDAhPT1sJiYobFs4XT1lKX19''@;'; put 'put ''Y2xhc3MgQ1Fle2xDb250YWluZXI7JGltcGxpY2l0OyRpbmRleDtjb25zdHJ1Y3RvcihlLHQscil7dGhpcy5sQ29udGFpbmVyPWUsdGhpcy4kaW1wbGljaXQ9dCx0aGlzLiRpbmRleD1yfWdldCAkY291bnQoKXtyZXR1cm4gdGhpcy5sQ29udGFpbmVyLmxlbmd0aC0xMH19ZnVuY3Rpb24gQ28o''@;'; put 'put ''bixlKXtyZXR1cm4gZX1jbGFzcyBFUWV7aGFzRW1wdHlCbG9jazt0cmFja0J5Rm47bGl2ZUNvbGxlY3Rpb247Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMuaGFzRW1wdHlCbG9jaz1lLHRoaXMudHJhY2tCeUZuPXQsdGhpcy5saXZlQ29sbGVjdGlvbj1yfX1mdW5jdGlvbiBfbyhuLGUsdCxyLGks''@;'; put 'put ''byxhLGwsdSxnLEUsTyxaKXtqMSgiTmdDb250cm9sRmxvdyIpO2NvbnN0IGVlPWl0KCksdmU9RnQoKSxNZT12b2lkIDAhPT11LEhlPWl0KCksV2U9bD9hLmJpbmQoSGVbMTVdWzhdKTphLGF0PW5ldyBFUWUoTWUsV2UpO0hlWzI3K25dPWF0LFF5KGVlLHZlLG4rMSxlLHQscixpLHBjKHZlLmNv''@;'; put 'put ''bnN0cyxvKSwyNTYpLE1lJiZReShlZSx2ZSxuKzIsdSxnLEUsTyxwYyh2ZS5jb25zdHMsWiksNTEyKX1jbGFzcyBNUWUgZXh0ZW5kcyBiUWV7bENvbnRhaW5lcjtob3N0TFZpZXc7dGVtcGxhdGVUTm9kZTtvcGVyYXRpb25zQ291bnRlcj12b2lkIDA7bmVlZHNJbmRleFVwZGF0ZT0hMTtjb25z''@;'; put 'put ''dHJ1Y3RvcihlLHQscil7c3VwZXIoKSx0aGlzLmxDb250YWluZXI9ZSx0aGlzLmhvc3RMVmlldz10LHRoaXMudGVtcGxhdGVUTm9kZT1yfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5sQ29udGFpbmVyLmxlbmd0aC0xMH1hdChlKXtyZXR1cm4gdGhpcy5nZXRMVmlldyhlKVs4XS4kaW1wbGlj''@;'; put 'put ''aXR9YXR0YWNoKGUsdCl7Y29uc3Qgcj10WzZdO3RoaXMubmVlZHNJbmRleFVwZGF0ZXx8PWUhPT10aGlzLmxlbmd0aCxLOSh0aGlzLmxDb250YWluZXIsdCxlLFU4KHRoaXMudGVtcGxhdGVUTm9kZSxyKSksZnVuY3Rpb24gVFFlKG4sZSl7aWYobi5sZW5ndGg8PTEwKXJldHVybjtjb25zdCBy''@;'; put 'put ''PW5bMTArZV0saT1yP3JbMjZdOnZvaWQgMDtyJiZpJiZpLmRldGFjaGVkTGVhdmVBbmltYXRpb25GbnMmJmkuZGV0YWNoZWRMZWF2ZUFuaW1hdGlvbkZucy5sZW5ndGg+MCYmKGZ1bmN0aW9uIE1lZShuLGUpe2NvbnN0IHQ9bi5nZXQoS1MpO2lmKGUuZGV0YWNoZWRMZWF2ZUFuaW1hdGlvbkZu''@;'; put 'put ''cyl7Zm9yKGNvbnN0IHIgb2YgZS5kZXRhY2hlZExlYXZlQW5pbWF0aW9uRm5zKXQucXVldWUuZGVsZXRlKHIpO2UuZGV0YWNoZWRMZWF2ZUFuaW1hdGlvbkZucz12b2lkIDB9fShyWzldLGkpLGs1LmRlbGV0ZShyKSxpLmRldGFjaGVkTGVhdmVBbmltYXRpb25GbnM9dm9pZCAwKX0odGhpcy5s''@;'; put 'put ''Q29udGFpbmVyLGUpfWRldGFjaChlKXtyZXR1cm4gdGhpcy5uZWVkc0luZGV4VXBkYXRlfHw9ZSE9PXRoaXMubGVuZ3RoLTEsZnVuY3Rpb24geFFlKG4sZSl7aWYobi5sZW5ndGg8PTEwKXJldHVybjtjb25zdCByPW5bMTArZV0saT1yP3JbMjZdOnZvaWQgMDtpJiZpLmxlYXZlJiZpLmxlYXZl''@;'; put 'put ''LnNpemU+MCYmKGkuZGV0YWNoZWRMZWF2ZUFuaW1hdGlvbkZucz1bXSl9KHRoaXMubENvbnRhaW5lcixlKSxmdW5jdGlvbiBBUWUobixlKXtyZXR1cm4gWDkobixlKX0odGhpcy5sQ29udGFpbmVyLGUpfWNyZWF0ZShlLHQpe2NvbnN0IGk9JDkodGhpcy5ob3N0TFZpZXcsdGhpcy50ZW1wbGF0''@;'; put 'put ''ZVROb2RlLG5ldyBDUWUodGhpcy5sQ29udGFpbmVyLHQsZSkse2RlaHlkcmF0ZWRWaWV3Om51bGx9KTtyZXR1cm4gdGhpcy5vcGVyYXRpb25zQ291bnRlcj8ucmVjb3JkQ3JlYXRlKCksaX1kZXN0cm95KGUpe0J5KGVbMV0sZSksdGhpcy5vcGVyYXRpb25zQ291bnRlcj8ucmVjb3JkRGVzdHJv''@;'; put 'put ''eSgpfXVwZGF0ZVZhbHVlKGUsdCl7dGhpcy5nZXRMVmlldyhlKVs4XS4kaW1wbGljaXQ9dH1yZXNldCgpe3RoaXMubmVlZHNJbmRleFVwZGF0ZT0hMSx0aGlzLm9wZXJhdGlvbnNDb3VudGVyPy5yZXNldCgpfXVwZGF0ZUluZGV4ZXMoKXtpZih0aGlzLm5lZWRzSW5kZXhVcGRhdGUpZm9yKGxl''@;'; put 'put ''dCBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspdGhpcy5nZXRMVmlldyhlKVs4XS4kaW5kZXg9ZX1nZXRMVmlldyhlKXtyZXR1cm4gZnVuY3Rpb24ga1FlKG4sZSl7cmV0dXJuIEtCKG4sZSl9KHRoaXMubENvbnRhaW5lcixlKX19ZnVuY3Rpb24geW8obil7Y29uc3QgZT1rKG51bGwpLHQ9b2goKTt0''@;'; put 'put ''cnl7Y29uc3Qgcj1pdCgpLGk9clsxXSxvPXJbdF0sYT10KzEsbD1JaihyLGEpO2lmKHZvaWQgMD09PW8ubGl2ZUNvbGxlY3Rpb24pe2NvbnN0IGc9R3RlKGksYSk7by5saXZlQ29sbGVjdGlvbj1uZXcgTVFlKGwscixnKX1lbHNlIG8ubGl2ZUNvbGxlY3Rpb24ucmVzZXQoKTtjb25zdCB1PW8u''@;'; put 'put ''bGl2ZUNvbGxlY3Rpb247aWYoZnVuY3Rpb24gd1FlKG4sZSx0KXtsZXQgcixpLG89MCxhPW4ubGVuZ3RoLTE7aWYoQXJyYXkuaXNBcnJheShlKSl7bGV0IHU9ZS5sZW5ndGgtMTtmb3IoO288PWEmJm88PXU7KXtjb25zdCBnPW4uYXQobyksRT1lW29dLE89V3RlKG8sZyxvLEUsdCk7aWYoMCE9''@;'; put 'put ''PU8pe088MCYmbi51cGRhdGVWYWx1ZShvLEUpLG8rKztjb250aW51ZX1jb25zdCBaPW4uYXQoYSksZWU9ZVt1XSx2ZT1XdGUoYSxaLHUsZWUsdCk7aWYoMCE9PXZlKXt2ZTwwJiZuLnVwZGF0ZVZhbHVlKGEsZWUpLGEtLSx1LS07Y29udGludWV9Y29uc3QgTWU9dChvLGcpLEhlPXQoYSxaKSxX''@;'; put 'put ''ZT10KG8sRSk7aWYoT2JqZWN0LmlzKFdlLEhlKSl7Y29uc3QgYXQ9dCh1LGVlKTtPYmplY3QuaXMoYXQsTWUpPyhuLnN3YXAobyxhKSxuLnVwZGF0ZVZhbHVlKGEsZWUpLHUtLSxhLS0pOm4ubW92ZShhLG8pLG4udXBkYXRlVmFsdWUobyxFKSxvKys7Y29udGludWV9aWYocj8/PW5ldyBEOGUs''@;'; put 'put ''aT8/PUk4ZShuLG8sYSx0KSxZdGUobixyLG8sV2UpKW4udXBkYXRlVmFsdWUobyxFKSxvKyssYSsrO2Vsc2UgaWYoaS5oYXMoV2UpKXIuc2V0KE1lLG4uZGV0YWNoKG8pKSxhLS07ZWxzZXtjb25zdCBhdD1uLmNyZWF0ZShvLGVbb10pO24uYXR0YWNoKG8sYXQpLG8rKyxhKyt9fWZvcig7bzw9''@;'; put 'put ''dTspUjhlKG4scix0LG8sZVtvXSksbysrfWVsc2UgaWYobnVsbCE9ZSl7Y29uc3QgdT1lW1N5bWJvbC5pdGVyYXRvcl0oKTtsZXQgZz11Lm5leHQoKTtmb3IoOyFnLmRvbmUmJm88PWE7KXtjb25zdCBFPW4uYXQobyksTz1nLnZhbHVlLFo9V3RlKG8sRSxvLE8sdCk7aWYoMCE9PVopWjwwJiZu''@;'; put 'put ''LnVwZGF0ZVZhbHVlKG8sTyksbysrLGc9dS5uZXh0KCk7ZWxzZXtyPz89bmV3IEQ4ZSxpPz89SThlKG4sbyxhLHQpO2NvbnN0IGVlPXQobyxPKTtpZihZdGUobixyLG8sZWUpKW4udXBkYXRlVmFsdWUobyxPKSxvKyssYSsrLGc9dS5uZXh0KCk7ZWxzZSBpZihpLmhhcyhlZSkpe2NvbnN0IHZl''@;'; put 'put ''PXQobyxFKTtyLnNldCh2ZSxuLmRldGFjaChvKSksYS0tfWVsc2Ugbi5hdHRhY2gobyxuLmNyZWF0ZShvLE8pKSxvKyssYSsrLGc9dS5uZXh0KCl9fWZvcig7IWcuZG9uZTspUjhlKG4scix0LG4ubGVuZ3RoLGcudmFsdWUpLGc9dS5uZXh0KCl9Zm9yKDtvPD1hOyluLmRlc3Ryb3kobi5kZXRh''@;'; put 'put ''Y2goYS0tKSk7cj8uZm9yRWFjaCh1PT57bi5kZXN0cm95KHUpfSl9KHUsbixvLnRyYWNrQnlGbiksdS51cGRhdGVJbmRleGVzKCksby5oYXNFbXB0eUJsb2NrKXtjb25zdCBnPUUyKCksRT0wPT09dS5sZW5ndGg7aWYob3UocixnLEUpKXtjb25zdCBPPXQrMixaPUlqKHIsTyk7aWYoRSl7Y29u''@;'; put 'put ''c3QgZWU9R3RlKGksTyksdmU9bnVsbDtLOShaLCQ5KHIsZWUsdm9pZCAwLHtkZWh5ZHJhdGVkVmlldzp2ZX0pLDAsVTgoZWUsdmUpKX1lbHNlIGkuZmlyc3RVcGRhdGVQYXNzJiZmdW5jdGlvbiBPcihuKXtjb25zdCBlPW5bNl0/P1tdLHI9blszXVsxMV0saT1bXTtmb3IoY29uc3QgbyBvZiBl''@;'; put 'put ''KXZvaWQgMCE9PW8uZGF0YS5kaT9pLnB1c2gobyk6TW4obyxyKTtuWzZdPWl9KFopLHNoKFosMCl9fX1maW5hbGx5e2soZSl9fWZ1bmN0aW9uIElqKG4sZSl7cmV0dXJuIG5bZV19ZnVuY3Rpb24gR3RlKG4sZSl7cmV0dXJuIFBzKG4sZSl9ZnVuY3Rpb24gcnQobixlLHQpe2NvbnN0IHI9aXQo''@;'; put 'put ''KTtyZXR1cm4gb3UocixFMigpLGUpJiYoRnQoKSxiUih5MygpLHIsbixlLHJbMTFdLHQpKSxydH1mdW5jdGlvbiAkdGUobixlLHQscixpKXtyRShlLG4sdCxpPyJjbGFzcyI6InN0eWxlIixyKX1mdW5jdGlvbiBKKG4sZSx0LHIpe2NvbnN0IGk9aXQoKSxvPWlbMV0sYT1uKzI3LGw9by5maXJz''@;'; put 'put ''dENyZWF0ZVBhc3M/c2EoYSxpLDIsZSxHOSxJZygpLHQscik6by5kYXRhW2FdO2lmKFI1KGwsaSxuLGUscXRlKSxDZihsKSl7Y29uc3QgdT1pWzFdO3RFKHUsaSxsKSxCayh1LGwsaSl9cmV0dXJuIG51bGwhPXImJlk5KGksbCksSn1mdW5jdGlvbiB0ZSgpe2NvbnN0IG49RnQoKSx0PW5FKHlp''@;'; put 'put ''KCkpO3JldHVybiBuLmZpcnN0Q3JlYXRlUGFzcyYmQW8obix0KSxmMCh0KSYmY3QoKSxwOCgpLG51bGwhPXQuY2xhc3Nlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbiBiUyhuKXtyZXR1cm4hISg4Jm4uZmxhZ3MpfSh0KSYmJHRlKG4sdCxpdCgpLHQuY2xhc3Nlc1dpdGhvdXRIb3N0LCEwKSxudWxs''@;'; put 'put ''IT10LnN0eWxlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbiBpUShuKXtyZXR1cm4hISgxNiZuLmZsYWdzKX0odCkmJiR0ZShuLHQsaXQoKSx0LnN0eWxlc1dpdGhvdXRIb3N0LCExKSx0ZX1mdW5jdGlvbiBJdChuLGUsdCxyKXtyZXR1cm4gSihuLGUsdCxyKSx0ZSgpLEl0fWZ1bmN0aW9uICRSKG4s''@;'; put 'put ''ZSx0LHIpe2NvbnN0IGk9aXQoKSxvPWlbMV0sYT1uKzI3LGw9by5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24geXMobixlLHQscixpLG8pe2NvbnN0IGE9ZS5jb25zdHMsdT1ENShlLG4sdCxyLHBjKGEsaSkpO2lmKHUubWVyZ2VkQXR0cnM9UjkodS5tZXJnZWRBdHRycyx1LmF0dHJzKSxudWxs''@;'; put 'put ''IT1vKXtjb25zdCBnPXBjKGEsbyk7dS5sb2NhbE5hbWVzPVtdO2ZvcihsZXQgRT0wO0U8Zy5sZW5ndGg7RSs9Mil1LmxvY2FsTmFtZXMucHVzaChnW0VdLC0xKX1yZXR1cm4gbnVsbCE9PXUuYXR0cnMmJk1kKHUsdS5hdHRycywhMSksbnVsbCE9PXUubWVyZ2VkQXR0cnMmJk1kKHUsdS5tZXJn''@;'; put 'put ''ZWRBdHRycywhMCksbnVsbCE9PWUucXVlcmllcyYmZS5xdWVyaWVzLmVsZW1lbnRTdGFydChlLHUpLHV9KGEsbywyLGUsdCxyKTpvLmRhdGFbYV07cmV0dXJuIFI1KGwsaSxuLGUscXRlKSxudWxsIT1yJiZZOShpLGwpLCRSfWZ1bmN0aW9uIHFSKCl7cmV0dXJuIGYwKG5FKHlpKCkpKSYmY3Qo''@;'; put 'put ''KSxwOCgpLHFSfWZ1bmN0aW9uIERqKG4sZSx0LHIpe3JldHVybiAkUihuLGUsdCxyKSxxUigpLERqfWxldCBxdGU9KG4sZSx0LHIsaSk9PihweSghMCksVVMoZVsxMV0scixJQSgpKSk7ZnVuY3Rpb24gbWwobixlLHQpe2NvbnN0IHI9aXQoKSxpPXJbMV0sbz1uKzI3LGE9aS5maXJzdENyZWF0''@;'; put 'put ''ZVBhc3M/c2EobyxyLDgsIm5nLWNvbnRhaW5lciIsRzksSWcoKSxlLHQpOmkuZGF0YVtvXTtpZihSNShhLHIsbiwibmctY29udGFpbmVyIixYdGUpLENmKGEpKXtjb25zdCBsPXJbMV07dEUobCxyLGEpLEJrKGwsYSxyKX1yZXR1cm4gbnVsbCE9dCYmWTkocixhKSxtbH1mdW5jdGlvbiBybCgp''@;'; put 'put ''e2NvbnN0IG49RnQoKSx0PW5FKHlpKCkpO3JldHVybiBuLmZpcnN0Q3JlYXRlUGFzcyYmQW8obix0KSxybH1mdW5jdGlvbiBhdShuLGUsdCl7cmV0dXJuIG1sKG4sZSx0KSxybCgpLGF1fWxldCBYdGU9KG4sZSx0LHIsaSk9PihweSghMCksJGsoZVsxMV0sIiIpKTtmdW5jdGlvbiB3bigpe3Jl''@;'; put 'put ''dHVybiBpdCgpfWZ1bmN0aW9uIE81KG4sZSx0KXtjb25zdCByPWl0KCk7cmV0dXJuIG91KHIsRTIoKSxlKSYmKEZ0KCksajgoeTMoKSxyLG4sZSxyWzExXSx0KSksTzV9ZnVuY3Rpb24gUXRlKG4sZSx0KXtjb25zdCByPWl0KCk7aWYob3UocixFMigpLGUpKXtjb25zdCBvPUZ0KCksYT15Mygp''@;'; put 'put ''O2o4KGEscixuLGUsVUIoeEEoby5kYXRhKSxhLHIpLHQpfXJldHVybiBRdGV9Y29uc3QgTGo9dm9pZCAwO3ZhciBMUWU9WyJlbiIsW1siYSIsInAiXSxbIkFNIiwiUE0iXV0sW1siQU0iLCJQTSJdXSxbWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sWyJTdW4iLCJNb24iLCJUdWUiLCJX''@;'; put 'put ''ZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdXSxMaixbWyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJK''@;'; put 'put ''IiwiQSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0Iiwi''@;'; put 'put ''U2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXV0sTGosW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdXSwwLFs2LDBdLFsiTS9kL3l5IiwiTU1NIGQsIHkiLCJNTU1NIGQsIHkiLCJFRUVFLCBNTU1NIGQsIHkiXSxb''@;'; put 'put ''Img6bW0gYSIsImg6bW06c3MgYSIsImg6bW06c3MgYSB6IiwiaDptbTpzcyBhIHp6enoiXSxbInsxfSwgezB9IixMaiwiezF9ICdhdCcgezB9IixMal0sWyIuIiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwiXHhkNyIsIlx1MjAzMCIsIlx1MjIxZSIsIk5hTiIsIjoiXSxbIiMsIyMwLiMjIyIs''@;'; put 'put ''IiMsIyMwJSIsIlx4YTQjLCMjMC4wMCIsIiNFMCJdLCJVU0QiLCIkIiwiVVMgRG9sbGFyIix7fSwibHRyIixmdW5jdGlvbiBEUWUobil7Y29uc3QgZT1NYXRoLmZsb29yKE1hdGguYWJzKG4pKSx0PW4udG9TdHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9''@;'; put 'put ''PT1lJiYwPT09dD8xOjV9XTtsZXQgeUU9e307ZnVuY3Rpb24gTDIobil7Y29uc3QgZT1mdW5jdGlvbiBOUWUobil7cmV0dXJuIG4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0obik7bGV0IHQ9RjhlKGUpO2lmKHQpcmV0dXJuIHQ7Y29uc3Qgcj1lLnNwbGl0KCItIilbMF07aWYo''@;'; put 'put ''dD1GOGUociksdClyZXR1cm4gdDtpZigiZW4iPT09cilyZXR1cm4gTFFlO3Rocm93IG5ldyBXbig3MDEsITEpfWZ1bmN0aW9uIEY4ZShuKXtpZighKG4gaW4geUUpKXtjb25zdCBlPUlsLm5nJiZJbC5uZy5jb21tb24mJklsLm5nLmNvbW1vbi5sb2NhbGVzJiZJbC5uZy5jb21tb24ubG9jYWxl''@;'; put 'put ''c1tuXTtyZXR1cm4gdm9pZCAwIT09ZSYmKHlFW25dPWUpLGV9cmV0dXJuIHlFW25dfXZhciBHdT1mdW5jdGlvbihuKXtyZXR1cm4gbltuLkxvY2FsZUlkPTBdPSJMb2NhbGVJZCIsbltuLkRheVBlcmlvZHNGb3JtYXQ9MV09IkRheVBlcmlvZHNGb3JtYXQiLG5bbi5EYXlQZXJpb2RzU3RhbmRh''@;'; put 'put ''bG9uZT0yXT0iRGF5UGVyaW9kc1N0YW5kYWxvbmUiLG5bbi5EYXlzRm9ybWF0PTNdPSJEYXlzRm9ybWF0IixuW24uRGF5c1N0YW5kYWxvbmU9NF09IkRheXNTdGFuZGFsb25lIixuW24uTW9udGhzRm9ybWF0PTVdPSJNb250aHNGb3JtYXQiLG5bbi5Nb250aHNTdGFuZGFsb25lPTZdPSJNb250''@;'; put 'put ''aHNTdGFuZGFsb25lIixuW24uRXJhcz03XT0iRXJhcyIsbltuLkZpcnN0RGF5T2ZXZWVrPThdPSJGaXJzdERheU9mV2VlayIsbltuLldlZWtlbmRSYW5nZT05XT0iV2Vla2VuZFJhbmdlIixuW24uRGF0ZUZvcm1hdD0xMF09IkRhdGVGb3JtYXQiLG5bbi5UaW1lRm9ybWF0PTExXT0iVGltZUZv''@;'; put 'put ''cm1hdCIsbltuLkRhdGVUaW1lRm9ybWF0PTEyXT0iRGF0ZVRpbWVGb3JtYXQiLG5bbi5OdW1iZXJTeW1ib2xzPTEzXT0iTnVtYmVyU3ltYm9scyIsbltuLk51bWJlckZvcm1hdHM9MTRdPSJOdW1iZXJGb3JtYXRzIixuW24uQ3VycmVuY3lDb2RlPTE1XT0iQ3VycmVuY3lDb2RlIixuW24uQ3Vy''@;'; put 'put ''cmVuY3lTeW1ib2w9MTZdPSJDdXJyZW5jeVN5bWJvbCIsbltuLkN1cnJlbmN5TmFtZT0xN109IkN1cnJlbmN5TmFtZSIsbltuLkN1cnJlbmNpZXM9MThdPSJDdXJyZW5jaWVzIixuW24uRGlyZWN0aW9uYWxpdHk9MTldPSJEaXJlY3Rpb25hbGl0eSIsbltuLlBsdXJhbENhc2U9MjBdPSJQbHVy''@;'; put 'put ''YWxDYXNlIixuW24uRXh0cmFEYXRhPTIxXT0iRXh0cmFEYXRhIixufShHdXx8e30pO2NvbnN0IE9qPSJlbi1VUyI7bGV0IFA4ZT1PajtmdW5jdGlvbiB3dChuLGUsdCl7Y29uc3Qgcj1pdCgpLGk9RnQoKSxvPXlpKCk7cmV0dXJuIHJuZShpLHIsclsxMV0sbyxuLGUsdCksd3R9ZnVuY3Rpb24g''@;'; put 'put ''bm5lKG4sZSl7Y29uc3QgdD15aSgpLHI9aXQoKSxpPUZ0KCk7cmV0dXJuIHJuZShpLHIsVUIoeEEoaS5kYXRhKSx0LHIpLHQsbixlKSxubmV9ZnVuY3Rpb24gcm5lKG4sZSx0LHIsaSxvLGEpe2xldCBsPSEwLHU9bnVsbDtpZigoMyZyLnR5cGV8fGEpJiYodT8/PVZSKHIsZSxvKSxmdW5jdGlv''@;'; put 'put ''biBpNmUobixlLHQscixpLG8sYSxsKXtjb25zdCB1PUNmKG4pO2xldCBnPSExLEU9bnVsbDtpZighciYmdSYmKEU9ZnVuY3Rpb24gZHFlKG4sZSx0LHIpe2NvbnN0IGk9bi5jbGVhbnVwO2lmKG51bGwhPWkpZm9yKGxldCBvPTA7bzxpLmxlbmd0aC0xO28rPTIpe2NvbnN0IGE9aVtvXTtpZihh''@;'; put 'put ''PT09dCYmaVtvKzFdPT09cil7Y29uc3QgbD1lWzddLHU9aVtvKzJdO3JldHVybiBsJiZsLmxlbmd0aD51P2xbdV06bnVsbH0ic3RyaW5nIj09dHlwZW9mIGEmJihvKz0yKX1yZXR1cm4gbnVsbH0oZSx0LG8sbi5pbmRleCkpLG51bGwhPT1FKShFLl9fbmdMYXN0TGlzdGVuZXJGbl9ffHxFKS5f''@;'; put 'put ''X25nTmV4dExpc3RlbmVyRm5fXz1hLEUuX19uZ0xhc3RMaXN0ZW5lckZuX189YSxnPSEwO2Vsc2V7Y29uc3QgTz1ZaShuLHQpLFo9cj9yKE8pOk8sZWU9aS5saXN0ZW4oWixvLGwpOyhmdW5jdGlvbiB1cWUobil7cmV0dXJuIG4uc3RhcnRzV2l0aCgiYW5pbWF0aW9uIil8fG4uc3RhcnRzV2l0''@;'; put 'put ''aCgidHJhbnNpdGlvbiIpfSkobyl8fG82ZShyP01lPT5yKERyKE1lW24uaW5kZXhdKSk6bi5pbmRleCxlLHQsbyxsLGVlLCExKX1yZXR1cm4gZ30ocixuLGUsYSx0LGksbyx1KSYmKGw9ITEpKSxsKXtjb25zdCBnPXIub3V0cHV0cz8uW2ldLEU9ci5ob3N0RGlyZWN0aXZlT3V0cHV0cz8uW2ld''@;'; put 'put ''O2lmKEUmJkUubGVuZ3RoKWZvcihsZXQgTz0wO088RS5sZW5ndGg7Tys9Mil7Y29uc3QgWj1FW09dLGVlPUVbTysxXTt1Pz89VlIocixlLG8pLGRqKHIsZSxaLGVlLGksdSl9aWYoZyYmZy5sZW5ndGgpZm9yKGNvbnN0IE8gb2YgZyl1Pz89VlIocixlLG8pLGRqKHIsZSxPLGksaSx1KX19ZnVu''@;'; put 'put ''Y3Rpb24gVGUobj0xKXtyZXR1cm4gZnVuY3Rpb24gdlgobil7cmV0dXJuKHBhLmxGcmFtZS5jb250ZXh0TFZpZXc9ZnVuY3Rpb24gb2QobixlKXtmb3IoO24+MDspZT1lWzE0XSxuLS07cmV0dXJuIGV9KG4scGEubEZyYW1lLmNvbnRleHRMVmlldykpWzhdfShuKX1mdW5jdGlvbiBDSmUobixl''@;'; put 'put ''KXtsZXQgdD1udWxsO2NvbnN0IHI9ZnVuY3Rpb24gdGVlKG4pe2NvbnN0IGU9bi5hdHRycztpZihudWxsIT1lKXtjb25zdCB0PWUuaW5kZXhPZig1KTtpZighKDEmdCkpcmV0dXJuIGVbdCsxXX1yZXR1cm4gbnVsbH0obik7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2NvbnN0IG89ZVtp''@;'; put 'put ''XTtpZigiKiIhPT1vKXtpZihudWxsPT09cj9mQihuLG8sITApOmllZShyLG8pKXJldHVybiBpfWVsc2UgdD1pfXJldHVybiB0fWZ1bmN0aW9uIGZvKG4pe2NvbnN0IGU9aXQoKVsxNV1bNV07aWYoIWUucHJvamVjdGlvbil7Y29uc3Qgcj1lLnByb2plY3Rpb249ZnVuY3Rpb24gczAobixlKXtj''@;'; put 'put ''b25zdCB0PVtdO2ZvcihsZXQgcj0wO3I8bjtyKyspdC5wdXNoKGUpO3JldHVybiB0fShuP24ubGVuZ3RoOjEsbnVsbCksaT1yLnNsaWNlKCk7bGV0IG89ZS5jaGlsZDtmb3IoO251bGwhPT1vOyl7aWYoMTI4IT09by50eXBlKXtjb25zdCBhPW4/Q0plKG8sbik6MDtudWxsIT09YSYmKGlbYV0/''@;'; put 'put ''aVthXS5wcm9qZWN0aW9uTmV4dD1vOnJbYV09byxpW2FdPW8pfW89by5uZXh0fX19ZnVuY3Rpb24gV3IobixlPTAsdCxyLGksbyl7Y29uc3QgYT1pdCgpLGw9RnQoKSx1PXI/bisxOm51bGw7bnVsbCE9PXUmJlF5KGEsbCx1LHIsaSxvLG51bGwsdCk7Y29uc3QgZz1ENShsLDI3K24sMTYsbnVs''@;'; put 'put ''bCx0fHxudWxsKTtudWxsPT09Zy5wcm9qZWN0aW9uJiYoZy5wcm9qZWN0aW9uPWUpLERoKCk7Y29uc3QgTz0hYVs2XXx8dnAoKTtudWxsPT09YVsxNV1bNV0ucHJvamVjdGlvbltnLnByb2plY3Rpb25dJiZudWxsIT09dT9mdW5jdGlvbiBTSmUobixlLHQpe2NvbnN0IHI9MjcrdCxpPWUuZGF0''@;'; put 'put ''YVtyXSxvPW5bcl07SzkobywkOShuLGksdm9pZCAwLHtkZWh5ZHJhdGVkVmlldzpudWxsfSksMCxVOChpLG51bGwpKX0oYSxsLHUpOk8mJiFJUyhnKSYmZnVuY3Rpb24gSWVlKG4sZSx0KXtOQihlWzExXSwwLGUsdCxnUihuLHQsZSksTEIodC5wYXJlbnR8fGVbNV0sdCxlKSl9KGwsYSxnKX1m''@;'; put 'put ''dW5jdGlvbiBGYShuLGUsdCxyKXshZnVuY3Rpb24gXzZlKG4sZSx0LHIpe2NvbnN0IGk9RnQoKTtpZihpLmZpcnN0Q3JlYXRlUGFzcyl7Y29uc3Qgbz15aSgpO3k2ZShpLG5ldyBwNmUoZSx0LHIpLG8uaW5kZXgpLGZ1bmN0aW9uIEJxZShuLGUpe2NvbnN0IHQ9bi5jb250ZW50UXVlcmllc3x8''@;'; put 'put ''KG4uY29udGVudFF1ZXJpZXM9W10pO2UhPT0odC5sZW5ndGg/dFt0Lmxlbmd0aC0xXTotMSkmJnQucHVzaChuLnF1ZXJpZXMubGVuZ3RoLTEsZSl9KGksbiksISgyJn50KSYmKGkuc3RhdGljQ29udGVudFF1ZXJpZXM9ITApfXJldHVybiBtNmUoaSxpdCgpLHQpfShuLGUsdCxyKX1mdW5jdGlv''@;'; put 'put ''biBXbyhuLGUsdCl7IWZ1bmN0aW9uIHY2ZShuLGUsdCl7Y29uc3Qgcj1GdCgpO3JldHVybiByLmZpcnN0Q3JlYXRlUGFzcyYmKHk2ZShyLG5ldyBwNmUobixlLHQpLC0xKSwhKDImfmUpJiYoci5zdGF0aWNWaWV3UXVlcmllcz0hMCkpLG02ZShyLGl0KCksZSl9KG4sZSx0KX1mdW5jdGlvbiBj''@;'; put 'put ''aShuKXtjb25zdCBlPWl0KCksdD1GdCgpLHI9QUEoKTtyUyhyKzEpO2NvbnN0IGk9X3RlKHQscik7aWYobi5kaXJ0eSYmZnVuY3Rpb24gZ2wobil7cmV0dXJuISg0Jn5uWzJdKX0oZSk9PT0hKDImfmkubWV0YWRhdGEuZmxhZ3MpKXtpZihudWxsPT09aS5tYXRjaGVzKW4ucmVzZXQoW10pO2Vs''@;'; put 'put ''c2V7Y29uc3Qgbz1iNmUoZSxyKTtuLnJlc2V0KG8sVUgpLG4ubm90aWZ5T25DaGFuZ2VzKCl9cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gdWkoKXtyZXR1cm4gZnVuY3Rpb24gdnRlKG4sZSl7cmV0dXJuIG5bMThdLnF1ZXJpZXNbZV0ucXVlcnlMaXN0fShpdCgpLEFBKCkpfWZ1bmN0aW9u''@;'; put 'put ''IG9vKG4pe3JldHVybiBhYShmdW5jdGlvbiBlUygpe3JldHVybiBwYS5sRnJhbWUuY29udGV4dExWaWV3fSgpLDI3K24pfWZ1bmN0aW9uIFZqKG4sZSl7cmV0dXJuIG48PDE3fGU8PDJ9ZnVuY3Rpb24gYWIobil7cmV0dXJuIG4+PjE3JjMyNzY3fWZ1bmN0aW9uIGluZShuKXtyZXR1cm4gMnxu''@;'; put 'put ''fWZ1bmN0aW9uIGJFKG4pe3JldHVybigxMzEwNjgmbik+PjJ9ZnVuY3Rpb24gb25lKG4sZSl7cmV0dXJuLTEzMTA2OSZufGU8PDJ9ZnVuY3Rpb24gYW5lKG4pe3JldHVybiAxfG59ZnVuY3Rpb24gcjdlKG4sZSx0LHIpe2NvbnN0IGk9blt0KzFdLG89bnVsbD09PWU7bGV0IGE9cj9hYihpKTpi''@;'; put 'put ''RShpKSxsPSExO2Zvcig7MCE9PWEmJighMT09PWx8fG8pOyl7Y29uc3QgZz1uW2ErMV07REplKG5bYV0sZSkmJihsPSEwLG5bYSsxXT1yP2FuZShnKTppbmUoZykpLGE9cj9hYihnKTpiRShnKX1sJiYoblt0KzFdPXI/aW5lKGkpOmFuZShpKSl9ZnVuY3Rpb24gREplKG4sZSl7cmV0dXJuIG51''@;'; put 'put ''bGw9PT1ufHxudWxsPT1lfHwoQXJyYXkuaXNBcnJheShuKT9uWzFdOm4pPT09ZXx8ISghQXJyYXkuaXNBcnJheShuKXx8InN0cmluZyIhPXR5cGVvZiBlKSYmdzIobixlKT49MH1jb25zdCBXMT17dGV4dEVuZDowLGtleTowLGtleUVuZDowLHZhbHVlOjAsdmFsdWVFbmQ6MH07ZnVuY3Rpb24g''@;'; put 'put ''aTdlKG4pe3JldHVybiBuLnN1YnN0cmluZyhXMS5rZXksVzEua2V5RW5kKX1mdW5jdGlvbiBvN2UobixlKXtjb25zdCB0PVcxLnRleHRFbmQ7cmV0dXJuIHQ9PT1lPy0xOihlPVcxLmtleUVuZD1mdW5jdGlvbiBGSmUobixlLHQpe2Zvcig7ZTx0JiZuLmNoYXJDb2RlQXQoZSk+MzI7KWUrKzty''@;'; put 'put ''ZXR1cm4gZX0obixXMS5rZXk9ZSx0KSx3RShuLGUsdCkpfWZ1bmN0aW9uIHdFKG4sZSx0KXtmb3IoO2U8dCYmbi5jaGFyQ29kZUF0KGUpPD0zMjspZSsrO3JldHVybiBlfWZ1bmN0aW9uIE8yKG4sZSx0KXtyZXR1cm4gdTdlKG4sZSx0LCExKSxPMn1mdW5jdGlvbiB3cihuLGUpe3JldHVybiB1''@;'; put 'put ''N2UobixlLG51bGwsITApLHdyfWZ1bmN0aW9uIEJqKG4peyFmdW5jdGlvbiBkN2UobixlLHQscil7Y29uc3QgaT1GdCgpLG89V20oMik7aS5maXJzdFVwZGF0ZVBhc3MmJmY3ZShpLG51bGwsbyxyKTtjb25zdCBhPWl0KCk7aWYodCE9PU5jJiZvdShhLG8sdCkpe2NvbnN0IGw9aS5kYXRhW29o''@;'; put 'put ''KCldO2lmKHY3ZShsLHIpJiYhaDdlKGksbykpe2xldCB1PXI/bC5jbGFzc2VzV2l0aG91dEhvc3Q6bC5zdHlsZXNXaXRob3V0SG9zdDtudWxsIT09dSYmKHQ9TDAodSx0fHwiIikpLCR0ZShpLGwsYSx0LHIpfWVsc2UhZnVuY3Rpb24gJEplKG4sZSx0LHIsaSxvLGEsbCl7aT09PU5jJiYoaT1K''@;'; put 'put ''YSk7bGV0IHU9MCxnPTAsRT0wPGkubGVuZ3RoP2lbMF06bnVsbCxPPTA8by5sZW5ndGg/b1swXTpudWxsO2Zvcig7bnVsbCE9PUV8fG51bGwhPT1POyl7Y29uc3QgWj11PGkubGVuZ3RoP2lbdSsxXTp2b2lkIDAsZWU9ZzxvLmxlbmd0aD9vW2crMV06dm9pZCAwO2xldCBNZSx2ZT1udWxsO0U9''@;'; put 'put ''PT1PPyh1Kz0yLGcrPTIsWiE9PWVlJiYodmU9TyxNZT1lZSkpOm51bGw9PT1PfHxudWxsIT09RSYmRTxPPyh1Kz0yLHZlPUUpOihnKz0yLHZlPU8sTWU9ZWUpLG51bGwhPT12ZSYmZzdlKG4sZSx0LHIsdmUsTWUsYSxsKSxFPXU8aS5sZW5ndGg/aVt1XTpudWxsLE89ZzxvLmxlbmd0aD9vW2dd''@;'; put 'put ''Om51bGx9fShpLGwsYSxhWzExXSxhW28rMV0sYVtvKzFdPWZ1bmN0aW9uIFpKZShuLGUsdCl7aWYobnVsbD09dHx8IiI9PT10KXJldHVybiBKYTtjb25zdCByPVtdLGk9azIodCk7aWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKyluKHIsaVtvXSwhMCk7ZWxz''@;'; put 'put ''ZSBpZigib2JqZWN0Ij09dHlwZW9mIGkpZm9yKGNvbnN0IG8gaW4gaSlpLmhhc093blByb3BlcnR5KG8pJiZuKHIsbyxpW29dKTtlbHNlInN0cmluZyI9PXR5cGVvZiBpJiZlKHIsaSk7cmV0dXJuIHJ9KG4sZSx0KSxyLG8pfX0oR0plLGpKZSxuLCEwKX1mdW5jdGlvbiBqSmUobixlKXtmb3Io''@;'; put 'put ''bGV0IHQ9ZnVuY3Rpb24gT0plKG4pe3JldHVybiBmdW5jdGlvbiBzN2Uobil7VzEua2V5PTAsVzEua2V5RW5kPTAsVzEudmFsdWU9MCxXMS52YWx1ZUVuZD0wLFcxLnRleHRFbmQ9bi5sZW5ndGh9KG4pLG83ZShuLHdFKG4sMCxXMS50ZXh0RW5kKSl9KGUpO3Q+PTA7dD1vN2UoZSx0KSlqdShu''@;'; put 'put ''LGk3ZShlKSwhMCl9ZnVuY3Rpb24gdTdlKG4sZSx0LHIpe2NvbnN0IGk9aXQoKSxvPUZ0KCksYT1XbSgyKTtvLmZpcnN0VXBkYXRlUGFzcyYmZjdlKG8sbixhLHIpLGUhPT1OYyYmb3UoaSxhLGUpJiZnN2UobyxvLmRhdGFbb2goKV0saSxpWzExXSxuLGlbYSsxXT1mdW5jdGlvbiBxSmUobixl''@;'; put 'put ''KXtyZXR1cm4gbnVsbD09bnx8IiI9PT1ufHwoInN0cmluZyI9PXR5cGVvZiBlP24rPWU6Im9iamVjdCI9PXR5cGVvZiBuJiYobj1ScyhrMihuKSkpKSxufShlLHQpLHIsYSl9ZnVuY3Rpb24gaDdlKG4sZSl7cmV0dXJuIGU+PW4uZXhwYW5kb1N0YXJ0SW5kZXh9ZnVuY3Rpb24gZjdlKG4sZSx0''@;'; put 'put ''LHIpe2NvbnN0IGk9bi5kYXRhO2lmKG51bGw9PT1pW3QrMV0pe2NvbnN0IG89aVtvaCgpXSxhPWg3ZShuLHQpO3Y3ZShvLHIpJiZudWxsPT09ZSYmIWEmJihlPSExKSxlPWZ1bmN0aW9uIFVKZShuLGUsdCxyKXtjb25zdCBpPXhBKG4pO2xldCBvPXI/ZS5yZXNpZHVhbENsYXNzZXM6ZS5yZXNp''@;'; put 'put ''ZHVhbFN0eWxlcztpZihudWxsPT09aSkwPT09KHI/ZS5jbGFzc0JpbmRpbmdzOmUuc3R5bGVCaW5kaW5ncykmJih0PWVJKHQ9c25lKG51bGwsbixlLHQsciksZS5hdHRycyxyKSxvPW51bGwpO2Vsc2V7Y29uc3QgYT1lLmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2lmKC0xPT09YXx8blthXSE9PWkp''@;'; put 'put ''aWYodD1zbmUoaSxuLGUsdCxyKSxudWxsPT09byl7bGV0IHU9ZnVuY3Rpb24gekplKG4sZSx0KXtjb25zdCByPXQ/ZS5jbGFzc0JpbmRpbmdzOmUuc3R5bGVCaW5kaW5ncztpZigwIT09YkUocikpcmV0dXJuIG5bYWIocildfShuLGUscik7dm9pZCAwIT09dSYmQXJyYXkuaXNBcnJheSh1KSYm''@;'; put 'put ''KHU9c25lKG51bGwsbixlLHVbMV0sciksdT1lSSh1LGUuYXR0cnMsciksZnVuY3Rpb24gV0plKG4sZSx0LHIpe25bYWIodD9lLmNsYXNzQmluZGluZ3M6ZS5zdHlsZUJpbmRpbmdzKV09cn0obixlLHIsdSkpfWVsc2Ugbz1mdW5jdGlvbiBZSmUobixlLHQpe2xldCByO2NvbnN0IGk9ZS5kaXJl''@;'; put 'put ''Y3RpdmVFbmQ7Zm9yKGxldCBvPTErZS5kaXJlY3RpdmVTdHlsaW5nTGFzdDtvPGk7bysrKXI9ZUkocixuW29dLmhvc3RBdHRycyx0KTtyZXR1cm4gZUkocixlLmF0dHJzLHQpfShuLGUscil9cmV0dXJuIHZvaWQgMCE9PW8mJihyP2UucmVzaWR1YWxDbGFzc2VzPW86ZS5yZXNpZHVhbFN0eWxl''@;'; put 'put ''cz1vKSx0fShpLG8sZSxyKSxmdW5jdGlvbiBSSmUobixlLHQscixpLG8pe2xldCBhPW8/ZS5jbGFzc0JpbmRpbmdzOmUuc3R5bGVCaW5kaW5ncyxsPWFiKGEpLHU9YkUoYSk7bltyXT10O2xldCBFLGc9ITE7aWYoQXJyYXkuaXNBcnJheSh0KT8oRT10WzFdLChudWxsPT09RXx8dzIodCxFKT4w''@;'; put 'put ''KSYmKGc9ITApKTpFPXQsaSlpZigwIT09dSl7Y29uc3QgWj1hYihuW2wrMV0pO25bcisxXT1WaihaLGwpLDAhPT1aJiYobltaKzFdPW9uZShuW1orMV0scikpLG5bbCsxXT1mdW5jdGlvbiBBSmUobixlKXtyZXR1cm4gMTMxMDcxJm58ZTw8MTd9KG5bbCsxXSxyKX1lbHNlIG5bcisxXT1Waihs''@;'; put 'put ''LDApLDAhPT1sJiYobltsKzFdPW9uZShuW2wrMV0scikpLGw9cjtlbHNlIG5bcisxXT1Waih1LDApLDA9PT1sP2w9cjpuW3UrMV09b25lKG5bdSsxXSxyKSx1PXI7ZyYmKG5bcisxXT1pbmUobltyKzFdKSkscjdlKG4sRSxyLCEwKSxyN2UobixFLHIsITEpLGZ1bmN0aW9uIElKZShuLGUsdCxy''@;'; put 'put ''LGkpe2NvbnN0IG89aT9uLnJlc2lkdWFsQ2xhc3NlczpuLnJlc2lkdWFsU3R5bGVzO251bGwhPW8mJiJzdHJpbmciPT10eXBlb2YgZSYmdzIobyxlKT49MCYmKHRbcisxXT1hbmUodFtyKzFdKSl9KGUsRSxuLHIsbyksYT1WaihsLHUpLG8/ZS5jbGFzc0JpbmRpbmdzPWE6ZS5zdHlsZUJpbmRp''@;'; put 'put ''bmdzPWF9KGksbyxlLHQsYSxyKX19ZnVuY3Rpb24gc25lKG4sZSx0LHIsaSl7bGV0IG89bnVsbDtjb25zdCBhPXQuZGlyZWN0aXZlRW5kO2xldCBsPXQuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7Zm9yKC0xPT09bD9sPXQuZGlyZWN0aXZlU3RhcnQ6bCsrO2w8YSYmKG89ZVtsXSxyPWVJKHIsby5o''@;'; put 'put ''b3N0QXR0cnMsaSksbyE9PW4pOylsKys7cmV0dXJuIG51bGwhPT1uJiYodC5kaXJlY3RpdmVTdHlsaW5nTGFzdD1sKSxyfWZ1bmN0aW9uIGVJKG4sZSx0KXtjb25zdCByPXQ/MToyO2xldCBpPS0xO2lmKG51bGwhPT1lKWZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKXtjb25zdCBhPWVbb107''@;'; put 'put ''Im51bWJlciI9PXR5cGVvZiBhP2k9YTppPT09ciYmKEFycmF5LmlzQXJyYXkobil8fChuPXZvaWQgMD09PW4/W106WyIiLG5dKSxqdShuLGEsISF0fHxlWysrb10pKX1yZXR1cm4gdm9pZCAwPT09bj9udWxsOm59ZnVuY3Rpb24gR0plKG4sZSx0KXtjb25zdCByPVN0cmluZyhlKTsiIiE9PXIm''@;'; put 'put ''JiFyLmluY2x1ZGVzKCIgIikmJmp1KG4scix0KX1mdW5jdGlvbiBnN2UobixlLHQscixpLG8sYSxsKXtpZighKDMmZS50eXBlKSlyZXR1cm47Y29uc3QgdT1uLmRhdGEsZz11W2wrMV0sRT1mdW5jdGlvbiBrSmUobil7cmV0dXJuISgxJn5uKX0oZyk/bTdlKHUsZSx0LGksYkUoZyksYSk6dm9p''@;'; put 'put ''ZCAwO2pqKEUpfHwoamoobyl8fGZ1bmN0aW9uIHhKZShuKXtyZXR1cm4hKDImfm4pfShnKSYmKG89bTdlKHUsbnVsbCx0LGksbCxhKSksZnVuY3Rpb24gTGVlKG4sZSx0LHIsaSl7aWYoZSlpP24uYWRkQ2xhc3ModCxyKTpuLnJlbW92ZUNsYXNzKHQscik7ZWxzZXtsZXQgbz0tMT09PXIuaW5k''@;'; put 'put ''ZXhPZigiLSIpP3ZvaWQgMDpBNS5EYXNoQ2FzZTtudWxsPT1pP24ucmVtb3ZlU3R5bGUodCxyLG8pOigic3RyaW5nIj09dHlwZW9mIGkmJmkuZW5kc1dpdGgoIiFpbXBvcnRhbnQiKSYmKGk9aS5zbGljZSgwLC0xMCksb3w9QTUuSW1wb3J0YW50KSxuLnNldFN0eWxlKHQscixpLG8pKX19KHIs''@;'; put 'put ''YSx4byhvaCgpLHQpLGksbykpfWZ1bmN0aW9uIG03ZShuLGUsdCxyLGksbyl7Y29uc3QgYT1udWxsPT09ZTtsZXQgbDtmb3IoO2k+MDspe2NvbnN0IHU9bltpXSxnPUFycmF5LmlzQXJyYXkodSksRT1nP3VbMV06dSxPPW51bGw9PT1FO2xldCBaPXRbaSsxXTtaPT09TmMmJihaPU8/SmE6dm9p''@;'; put 'put ''ZCAwKTtsZXQgZWU9Tz9CZChaLHIpOkU9PT1yP1o6dm9pZCAwO2lmKGcmJiFqaihlZSkmJihlZT1CZCh1LHIpKSxqaihlZSkmJihsPWVlLGEpKXJldHVybiBsO2NvbnN0IHZlPW5baSsxXTtpPWE/YWIodmUpOmJFKHZlKX1pZihudWxsIT09ZSl7bGV0IHU9bz9lLnJlc2lkdWFsQ2xhc3Nlczpl''@;'; put 'put ''LnJlc2lkdWFsU3R5bGVzO251bGwhPXUmJihsPUJkKHUscikpfXJldHVybiBsfWZ1bmN0aW9uIGpqKG4pe3JldHVybiB2b2lkIDAhPT1ufWZ1bmN0aW9uIHY3ZShuLGUpe3JldHVybiEhKG4uZmxhZ3MmKGU/ODoxNikpfWZ1bmN0aW9uIFNlKG4sZT0iIil7Y29uc3QgdD1pdCgpLHI9RnQoKSxp''@;'; put 'put ''PW4rMjcsbz1yLmZpcnN0Q3JlYXRlUGFzcz9ENShyLGksMSxlLG51bGwpOnIuZGF0YVtpXSxhPV83ZShyLHQsbyxlLG4pO3RbaV09YSxvUygpJiZ2UihyLHQsYSxvKSxXcyhvLCExKX1sZXQgXzdlPShuLGUsdCxyLGkpPT4ocHkoITApLGZ1bmN0aW9uIEdrKG4sZSl7cmV0dXJuIG4uY3JlYXRl''@;'; put 'put ''VGV4dChlKX0oZVsxMV0scikpO2Z1bmN0aW9uIGI3ZShuLGUsdCxyPSIiKXtyZXR1cm4gb3UobixFMigpLHQpP2UraWEodCkrcjpOY31mdW5jdGlvbiBwcihuKXtyZXR1cm4gU3IoIiIsbikscHJ9ZnVuY3Rpb24gU3IobixlLHQpe2NvbnN0IHI9aXQoKSxpPWI3ZShyLG4sZSx0KTtyZXR1cm4g''@;'; put 'put ''aSE9PU5jJiYkOChyLG9oKCksaSksU3J9ZnVuY3Rpb24gTmgobixlLHQscixpKXtjb25zdCBvPWl0KCksYT1mdW5jdGlvbiB3N2UobixlLHQscixpLG89IiIpe2NvbnN0IGw9ejAobix6bSgpLHQsaSk7cmV0dXJuIFdtKDIpLGw/ZStpYSh0KStyK2lhKGkpK286TmN9KG8sbixlLHQscixpKTty''@;'; put 'put ''ZXR1cm4gYSE9PU5jJiYkOChvLG9oKCksYSksTmh9ZnVuY3Rpb24gZTQobixlLHQscixpLG8sYSl7Y29uc3QgbD1pdCgpLHU9ZnVuY3Rpb24gQzdlKG4sZSx0LHIsaSxvLGEsbD0iIil7Y29uc3QgZz11aihuLHptKCksdCxpLGEpO3JldHVybiBXbSgzKSxnP2UraWEodCkrcitpYShpKStvK2lh''@;'; put 'put ''KGEpK2w6TmN9KGwsbixlLHQscixpLG8sYSk7cmV0dXJuIHUhPT1OYyYmJDgobCxvaCgpLHUpLGU0fWZ1bmN0aW9uIFVqKG4sZSx0LHIsaSxvLGEsbCx1KXtjb25zdCBnPWl0KCksRT1mdW5jdGlvbiBTN2UobixlLHQscixpLG8sYSxsLHUsZz0iIil7Y29uc3QgTz1VZyhuLHptKCksdCxpLGEs''@;'; put 'put ''dSk7cmV0dXJuIFdtKDQpLE8/ZStpYSh0KStyK2lhKGkpK28raWEoYSkrbCtpYSh1KStnOk5jfShnLG4sZSx0LHIsaSxvLGEsbCx1KTtyZXR1cm4gRSE9PU5jJiYkOChnLG9oKCksRSksVWp9ZnVuY3Rpb24gJDgobixlLHQpe2NvbnN0IHI9eG8oZSxuKTshZnVuY3Rpb24gcVYobixlLHQpe24u''@;'; put 'put ''c2V0VmFsdWUoZSx0KX0oblsxMV0scix0KX1mdW5jdGlvbiBkaShuLGUsdCl7dEgoZSkmJihlPWUoKSk7Y29uc3Qgcj1pdCgpO3JldHVybiBvdShyLEUyKCksZSkmJihGdCgpLGJSKHkzKCkscixuLGUsclsxMV0sdCkpLGRpfWZ1bmN0aW9uIGZpKG4sZSl7Y29uc3QgdD10SChuKTtyZXR1cm4g''@;'; put 'put ''dCYmbi5zZXQoZSksdH1mdW5jdGlvbiBoaShuLGUpe2NvbnN0IHQ9aXQoKSxyPUZ0KCksaT15aSgpO3JldHVybiBybmUocix0LHRbMTFdLGksbixlKSxoaX1mdW5jdGlvbiB6aihuKXtyZXR1cm4gb3UoaXQoKSxFMigpLG4pP2lhKG4pOk5jfWZ1bmN0aW9uIGxuZShuLGUsdCxyLGkpe2lmKG49''@;'; put 'put ''ZmEobiksQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IG89MDtvPG4ubGVuZ3RoO28rKylsbmUobltvXSxlLHQscixpKTtlbHNle2NvbnN0IG89RnQoKSxhPWl0KCksbD15aSgpO2xldCB1PWkxKG4pP246ZmEobi5wcm92aWRlKTtjb25zdCBnPWhwKG4pLEU9MTA0ODU3NSZsLnByb3ZpZGVySW5k''@;'; put 'put ''ZXhlcyxPPWwuZGlyZWN0aXZlU3RhcnQsWj1sLnByb3ZpZGVySW5kZXhlcz4+MjA7aWYoaTEobil8fCFuLm11bHRpKXtjb25zdCBlZT1uZXcgX3koZyxpLHplLG51bGwpLHZlPXVuZSh1LGUsaT9FOkUrWixPKTstMT09PXZlPyhuayhlayhsLGEpLG8sdSksY25lKG8sbixlLmxlbmd0aCksZS5w''@;'; put 'put ''dXNoKHUpLGwuZGlyZWN0aXZlU3RhcnQrKyxsLmRpcmVjdGl2ZUVuZCsrLGkmJihsLnByb3ZpZGVySW5kZXhlcys9MTA0ODU3NiksdC5wdXNoKGVlKSxhLnB1c2goZWUpKToodFt2ZV09ZWUsYVt2ZV09ZWUpfWVsc2V7Y29uc3QgZWU9dW5lKHUsZSxFK1osTyksdmU9dW5lKHUsZSxFLEUrWiks''@;'; put 'put ''SGU9dmU+PTAmJnRbdmVdO2lmKGkmJiFIZXx8IWkmJiEoZWU+PTAmJnRbZWVdKSl7bmsoZWsobCxhKSxvLHUpO2NvbnN0IFdlPWZ1bmN0aW9uIGhldChuLGUsdCxyLGkpe2NvbnN0IGE9bmV3IF95KG4sdCx6ZSxudWxsKTtyZXR1cm4gYS5tdWx0aT1bXSxhLmluZGV4PWUsYS5jb21wb25lbnRQ''@;'; put 'put ''cm92aWRlcnM9MCxGN2UoYSxpLHImJiF0KSxhfShpP2RldDp1ZXQsdC5sZW5ndGgsaSxyLGcpOyFpJiZIZSYmKHRbdmVdLnByb3ZpZGVyRmFjdG9yeT1XZSksY25lKG8sbixlLmxlbmd0aCwwKSxlLnB1c2godSksbC5kaXJlY3RpdmVTdGFydCsrLGwuZGlyZWN0aXZlRW5kKyssaSYmKGwucHJv''@;'; put 'put ''dmlkZXJJbmRleGVzKz0xMDQ4NTc2KSx0LnB1c2goV2UpLGEucHVzaChXZSl9ZWxzZSBjbmUobyxuLGVlPi0xP2VlOnZlLEY3ZSh0W2k/dmU6ZWVdLGcsIWkmJnIpKTshaSYmciYmSGUmJnRbdmVdLmNvbXBvbmVudFByb3ZpZGVycysrfX19ZnVuY3Rpb24gY25lKG4sZSx0LHIpe2NvbnN0IGk9''@;'; put 'put ''aTEoZSksbz1mdW5jdGlvbiBpOChuKXtyZXR1cm4hIW4udXNlQ2xhc3N9KGUpO2lmKGl8fG8pe2NvbnN0IHU9KG8/ZmEoZS51c2VDbGFzcyk6ZSkucHJvdG90eXBlLm5nT25EZXN0cm95O2lmKHUpe2NvbnN0IGc9bi5kZXN0cm95SG9va3N8fChuLmRlc3Ryb3lIb29rcz1bXSk7aWYoIWkmJmUu''@;'; put 'put ''bXVsdGkpe2NvbnN0IEU9Zy5pbmRleE9mKHQpOy0xPT09RT9nLnB1c2godCxbcix1XSk6Z1tFKzFdLnB1c2gocix1KX1lbHNlIGcucHVzaCh0LHUpfX19ZnVuY3Rpb24gRjdlKG4sZSx0KXtyZXR1cm4gdCYmbi5jb21wb25lbnRQcm92aWRlcnMrKyxuLm11bHRpLnB1c2goZSktMX1mdW5jdGlv''@;'; put 'put ''biB1bmUobixlLHQscil7Zm9yKGxldCBpPXQ7aTxyO2krKylpZihlW2ldPT09bilyZXR1cm4gaTtyZXR1cm4tMX1mdW5jdGlvbiB1ZXQobixlLHQscixpKXtyZXR1cm4gZG5lKHRoaXMubXVsdGksW10pfWZ1bmN0aW9uIGRldChuLGUsdCxyLGkpe2NvbnN0IG89dGhpcy5tdWx0aTtsZXQgYTtp''@;'; put 'put ''Zih0aGlzLnByb3ZpZGVyRmFjdG9yeSl7Y29uc3QgbD10aGlzLnByb3ZpZGVyRmFjdG9yeS5jb21wb25lbnRQcm92aWRlcnMsdT13eShyLHJbMV0sdGhpcy5wcm92aWRlckZhY3RvcnkuaW5kZXgsaSk7YT11LnNsaWNlKDAsbCksZG5lKG8sYSk7Zm9yKGxldCBnPWw7Zzx1Lmxlbmd0aDtnKysp''@;'; put 'put ''YS5wdXNoKHVbZ10pfWVsc2UgYT1bXSxkbmUobyxhKTtyZXR1cm4gYX1mdW5jdGlvbiBkbmUobixlKXtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyllLnB1c2goKDAsblt0XSkoKSk7cmV0dXJuIGV9ZnVuY3Rpb24gYm8obixlPVtdKXtyZXR1cm4gdD0+e3QucHJvdmlkZXJzUmVzb2x2ZXI9''@;'; put 'put ''KHIsaSk9PmZ1bmN0aW9uIGNldChuLGUsdCl7Y29uc3Qgcj1GdCgpO2lmKHIuZmlyc3RDcmVhdGVQYXNzKXtjb25zdCBpPXMxKG4pO2xuZSh0LHIuZGF0YSxyLmJsdWVwcmludCxpLCEwKSxsbmUoZSxyLmRhdGEsci5ibHVlcHJpbnQsaSwhMSl9fShyLGk/aShuKTpuLGUpfX1mdW5jdGlvbiBt''@;'; put 'put ''YyhuLGUsdCl7Y29uc3Qgcj1IMCgpK24saT1pdCgpO3JldHVybiBpW3JdPT09TmM/RDIoaSxyLHQ/ZS5jYWxsKHQpOmUoKSk6ZnVuY3Rpb24gQ3AobixlKXtyZXR1cm4gbltlXX0oaSxyKX1mdW5jdGlvbiB0NChuLGUsdCxyKXtyZXR1cm4gSDdlKGl0KCksSDAoKSxuLGUsdCxyKX1mdW5jdGlv''@;'; put 'put ''biBONShuLGUsdCxyLGkpe3JldHVybiBWN2UoaXQoKSxIMCgpLG4sZSx0LHIsaSl9ZnVuY3Rpb24gdEkobixlLHQscixpLG8pe3JldHVybiBCN2UoaXQoKSxIMCgpLG4sZSx0LHIsaSxvKX1mdW5jdGlvbiBZaihuLGUsdCxyLGksbyxhKXtyZXR1cm4gZnVuY3Rpb24gajdlKG4sZSx0LHIsaSxv''@;'; put 'put ''LGEsbCx1KXtjb25zdCBnPWUrdDtyZXR1cm4gVWcobixnLGksbyxhLGwpP0QyKG4sZys0LHU/ci5jYWxsKHUsaSxvLGEsbCk6cihpLG8sYSxsKSk6bkkobixnKzQpfShpdCgpLEgwKCksbixlLHQscixpLG8sYSl9ZnVuY3Rpb24gbkkobixlKXtjb25zdCB0PW5bZV07cmV0dXJuIHQ9PT1OYz92''@;'; put 'put ''b2lkIDA6dH1mdW5jdGlvbiBIN2UobixlLHQscixpLG8pe2NvbnN0IGE9ZSt0O3JldHVybiBvdShuLGEsaSk/RDIobixhKzEsbz9yLmNhbGwobyxpKTpyKGkpKTpuSShuLGErMSl9ZnVuY3Rpb24gVjdlKG4sZSx0LHIsaSxvLGEpe2NvbnN0IGw9ZSt0O3JldHVybiB6MChuLGwsaSxvKT9EMihu''@;'; put 'put ''LGwrMixhP3IuY2FsbChhLGksbyk6cihpLG8pKTpuSShuLGwrMil9ZnVuY3Rpb24gQjdlKG4sZSx0LHIsaSxvLGEsbCl7Y29uc3QgdT1lK3Q7cmV0dXJuIHVqKG4sdSxpLG8sYSk/RDIobix1KzMsbD9yLmNhbGwobCxpLG8sYSk6cihpLG8sYSkpOm5JKG4sdSszKX1mdW5jdGlvbiBBYyhuLGUp''@;'; put 'put ''e2NvbnN0IHQ9RnQoKTtsZXQgcjtjb25zdCBpPW4rMjc7dC5maXJzdENyZWF0ZVBhc3M/KHI9ZnVuY3Rpb24gd2V0KG4sZSl7aWYoZSlmb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0wO3QtLSl7Y29uc3Qgcj1lW3RdO2lmKG49PT1yLm5hbWUpcmV0dXJuIHJ9fShlLHQucGlwZVJlZ2lzdHJ5KSx0''@;'; put 'put ''LmRhdGFbaV09cixyLm9uRGVzdHJveSYmKHQuZGVzdHJveUhvb2tzPz89W10pLnB1c2goaSxyLm9uRGVzdHJveSkpOnI9dC5kYXRhW2ldO2NvbnN0IG89ci5mYWN0b3J5fHwoci5mYWN0b3J5PW5jKHIudHlwZSkpLGw9bHIoemUpO3RyeXtjb25zdCB1PXdTKCExKSxnPW8oKTtyZXR1cm4gd1Mo''@;'; put 'put ''dSksZnVuY3Rpb24gSW8obixlLHQscil7dD49bi5kYXRhLmxlbmd0aCYmKG4uZGF0YVt0XT1udWxsLG4uYmx1ZXByaW50W3RdPW51bGwpLGVbdF09cn0odCxpdCgpLGksZyksZ31maW5hbGx5e2xyKGwpfX1mdW5jdGlvbiBUZChuLGUsdCl7Y29uc3Qgcj1uKzI3LGk9aXQoKSxvPWFhKGkscik7''@;'; put 'put ''cmV0dXJuIHJJKGkscik/SDdlKGksSDAoKSxlLG8udHJhbnNmb3JtLHQsbyk6by50cmFuc2Zvcm0odCl9ZnVuY3Rpb24gc2IobixlLHQscil7Y29uc3QgaT1uKzI3LG89aXQoKSxhPWFhKG8saSk7cmV0dXJuIHJJKG8saSk/VjdlKG8sSDAoKSxlLGEudHJhbnNmb3JtLHQscixhKTphLnRyYW5z''@;'; put 'put ''Zm9ybSh0LHIpfWZ1bmN0aW9uIGhuZShuLGUsdCxyLGkpe2NvbnN0IG89bisyNyxhPWl0KCksbD1hYShhLG8pO3JldHVybiBySShhLG8pP0I3ZShhLEgwKCksZSxsLnRyYW5zZm9ybSx0LHIsaSxsKTpsLnRyYW5zZm9ybSh0LHIsaSl9ZnVuY3Rpb24gckkobixlKXtyZXR1cm4gblsxXS5kYXRh''@;'; put 'put ''W2VdLnB1cmV9ZnVuY3Rpb24gY2QobixlKXtyZXR1cm4gejgobixlKX1jbGFzcyBRZXR7bmdNb2R1bGVGYWN0b3J5O2NvbXBvbmVudEZhY3Rvcmllcztjb25zdHJ1Y3RvcihlLHQpe3RoaXMubmdNb2R1bGVGYWN0b3J5PWUsdGhpcy5jb21wb25lbnRGYWN0b3JpZXM9dH19bGV0IEpldD0oKCk9''@;'; put 'put ''PntjbGFzcyBue2NvbXBpbGVNb2R1bGVTeW5jKHQpe3JldHVybiBuZXcgVDZlKHQpfWNvbXBpbGVNb2R1bGVBc3luYyh0KXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuY29tcGlsZU1vZHVsZVN5bmModCkpfWNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzU3luYyh0KXtjb25zdCBy''@;'; put 'put ''PXRoaXMuY29tcGlsZU1vZHVsZVN5bmModCksbz1WZyhyMSh0KS5kZWNsYXJhdGlvbnMpLnJlZHVjZSgoYSxsKT0+e2NvbnN0IHU9Y3MobCk7cmV0dXJuIHUmJmEucHVzaChuZXcgQlIodSkpLGF9LFtdKTtyZXR1cm4gbmV3IFFldChyLG8pfWNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRz''@;'; put 'put ''QXN5bmModCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzU3luYyh0KSl9Y2xlYXJDYWNoZSgpe31jbGVhckNhY2hlRm9yKHQpe31nZXRNb2R1bGVJZCh0KXt9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8''@;'; put 'put ''fG4pfTtzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59KSgpLHR0dD0oKCk9PntjbGFzcyBue3pvbmU9c24oZ2EpO2NoYW5nZURldGVjdGlvblNjaGVkdWxlcj1zbihtOCk7YXBwbGljYXRpb25SZWY9''@;'; put 'put ''c24oV2cpO2FwcGxpY2F0aW9uRXJyb3JIYW5kbGVyPXNuKF9wKTtfb25NaWNyb3Rhc2tFbXB0eVN1YnNjcmlwdGlvbjtpbml0aWFsaXplKCl7dGhpcy5fb25NaWNyb3Rhc2tFbXB0eVN1YnNjcmlwdGlvbnx8KHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb249dGhpcy56b25lLm9u''@;'; put 'put ''TWljcm90YXNrRW1wdHkuc3Vic2NyaWJlKHtuZXh0OigpPT57dGhpcy5jaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXIucnVubmluZ1RpY2t8fHRoaXMuem9uZS5ydW4oKCk9Pnt0cnl7dGhpcy5hcHBsaWNhdGlvblJlZi5kaXJ0eUZsYWdzfD0xLHRoaXMuYXBwbGljYXRpb25SZWYuX3RpY2soKX1j''@;'; put 'put ''YXRjaCh0KXt0aGlzLmFwcGxpY2F0aW9uRXJyb3JIYW5kbGVyKHQpfX0pfX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMg''@;'; put 'put ''XHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59KSgpO2Z1bmN0aW9uIGE5ZSh7bmdab25lRmFjdG9yeTpuLGlnbm9yZUNoYW5nZXNPdXRzaWRlWm9uZTplLHNjaGVkdWxlSW5Sb290Wm9uZTp0fSl7cmV0dXJuIG4/''@;'; put 'put ''Pz0oKT0+bmV3IGdhKHsuLi52bmUoKSxzY2hlZHVsZUluUm9vdFpvbmU6dH0pLFt7cHJvdmlkZTpnYSx1c2VGYWN0b3J5Om59LHtwcm92aWRlOk5sLG11bHRpOiEwLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCByPXNuKHR0dCx7b3B0aW9uYWw6ITB9KTtyZXR1cm4oKT0+ci5pbml0aWFsaXplKCl9''@;'; put 'put ''fSx7cHJvdmlkZTpObCxtdWx0aTohMCx1c2VGYWN0b3J5OigpPT57Y29uc3Qgcj1zbihydHQpO3JldHVybigpPT57ci5pbml0aWFsaXplKCl9fX0sITA9PT1lP3twcm92aWRlOnJILHVzZVZhbHVlOiEwfTpbXSx7cHJvdmlkZTppSCx1c2VWYWx1ZTp0Pz9pUn0se3Byb3ZpZGU6X3AsdXNlRmFj''@;'; put 'put ''dG9yeTooKT0+e2NvbnN0IHI9c24oZ2EpLGk9c24obmwpO2xldCBvO3JldHVybiBhPT57ci5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2kuZGVzdHJveWVkJiYhbz9zZXRUaW1lb3V0KCgpPT57dGhyb3cgYX0pOihvPz89aS5nZXQoZzgpLG8uaGFuZGxlRXJyb3IoYSkpfSl9fX1dfWZ1bmN0aW9u''@;'; put 'put ''IHZuZShuKXtyZXR1cm57ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjpuPy5ldmVudENvYWxlc2Npbmc/PyExLHNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uOm4/LnJ1bkNvYWxlc2Npbmc/PyExfX1sZXQgcnR0PSgoKT0+''@;'; put 'put ''e2NsYXNzIG57c3Vic2NyaXB0aW9uPW5ldyBBcjtpbml0aWFsaXplZD0hMTt6b25lPXNuKGdhKTtwZW5kaW5nVGFza3M9c24oczUpO2luaXRpYWxpemUoKXtpZih0aGlzLmluaXRpYWxpemVkKXJldHVybjt0aGlzLmluaXRpYWxpemVkPSEwO2xldCB0PW51bGw7IXRoaXMuem9uZS5pc1N0YWJs''@;'; put 'put ''ZSYmIXRoaXMuem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIXRoaXMuem9uZS5oYXNQZW5kaW5nTWljcm90YXNrcyYmKHQ9dGhpcy5wZW5kaW5nVGFza3MuYWRkKCkpLHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnpvbmUub25T''@;'; put 'put ''dGFibGUuc3Vic2NyaWJlKCgpPT57Z2EuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLHF1ZXVlTWljcm90YXNrKCgpPT57bnVsbCE9PXQmJiF0aGlzLnpvbmUuaGFzUGVuZGluZ01hY3JvdGFza3MmJiF0aGlzLnpvbmUuaGFzUGVuZGluZ01pY3JvdGFza3MmJih0aGlzLnBlbmRpbmdUYXNrcy5y''@;'; put 'put ''ZW1vdmUodCksdD1udWxsKX0pfSkpfSksdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuem9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSgoKT0+e2dhLmFzc2VydEluQW5ndWxhclpvbmUoKSx0Pz89dGhpcy5wZW5kaW5nVGFza3MuYWRkKCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlw''@;'; put 'put ''dGlvbi51bnN1YnNjcmliZSgpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKSxjOWU9KCgpPT57Y2xhc3Mg''@;'; put 'put ''bnthcHBsaWNhdGlvbkVycm9ySGFuZGxlcj1zbihfcCk7YXBwUmVmPXNuKFdnKTt0YXNrU2VydmljZT1zbihzNSk7bmdab25lPXNuKGdhKTt6b25lbGVzc0VuYWJsZWQ9c24obkgpO3RyYWNpbmc9c24oejkse29wdGlvbmFsOiEwfSk7ZGlzYWJsZVNjaGVkdWxpbmc9c24ockgse29wdGlvbmFs''@;'; put 'put ''OiEwfSk/PyExO3pvbmVJc0RlZmluZWQ9dHlwZW9mIFpvbmU8InUiJiYhIVpvbmUucm9vdC5ydW47c2NoZWR1bGVyVGlja0FwcGx5QXJncz1be2RhdGE6e19fc2NoZWR1bGVyX3RpY2tfXzohMH19XTtzdWJzY3JpcHRpb25zPW5ldyBBcjthbmd1bGFyWm9uZUlkPXRoaXMuem9uZUlzRGVmaW5l''@;'; put 'put ''ZD90aGlzLm5nWm9uZS5faW5uZXI/LmdldChxUyk6bnVsbDtzY2hlZHVsZUluUm9vdFpvbmU9IXRoaXMuem9uZWxlc3NFbmFibGVkJiZ0aGlzLnpvbmVJc0RlZmluZWQmJihzbihpSCx7b3B0aW9uYWw6ITB9KT8/ITEpO2NhbmNlbFNjaGVkdWxlZENhbGxiYWNrPW51bGw7dXNlTWljcm90YXNr''@;'; put 'put ''U2NoZWR1bGVyPSExO3J1bm5pbmdUaWNrPSExO3BlbmRpbmdSZW5kZXJUYXNrSWQ9bnVsbDtjb25zdHJ1Y3Rvcigpe3RoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5hcHBSZWYuYWZ0ZXJUaWNrLnN1YnNjcmliZSgoKT0+e3RoaXMucnVubmluZ1RpY2t8fHRoaXMuY2xlYW51cCgpfSkpLHRo''@;'; put 'put ''aXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5uZ1pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnJ1bm5pbmdUaWNrfHx0aGlzLmNsZWFudXAoKX0pKSx0aGlzLmRpc2FibGVTY2hlZHVsaW5nfHw9IXRoaXMuem9uZWxlc3NFbmFibGVkJiYodGhpcy5uZ1pvbmUgaW5zdGFuY2Vv''@;'; put 'put ''ZiBsUnx8IXRoaXMuem9uZUlzRGVmaW5lZCl9bm90aWZ5KHQpe2lmKCF0aGlzLnpvbmVsZXNzRW5hYmxlZCYmNT09PXQpcmV0dXJuO2xldCByPSExO3N3aXRjaCh0KXtjYXNlIDA6dGhpcy5hcHBSZWYuZGlydHlGbGFnc3w9MjticmVhaztjYXNlIDM6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6Y2Fz''@;'; put 'put ''ZSAxOnRoaXMuYXBwUmVmLmRpcnR5RmxhZ3N8PTQ7YnJlYWs7Y2FzZSA2OmNhc2UgMTM6dGhpcy5hcHBSZWYuZGlydHlGbGFnc3w9MixyPSEwO2JyZWFrO2Nhc2UgMTI6dGhpcy5hcHBSZWYuZGlydHlGbGFnc3w9MTYscj0hMDticmVhaztjYXNlIDExOnI9ITA7YnJlYWs7ZGVmYXVsdDp0aGlz''@;'; put 'put ''LmFwcFJlZi5kaXJ0eUZsYWdzfD04fWlmKHRoaXMuYXBwUmVmLnRyYWNpbmdTbmFwc2hvdD10aGlzLnRyYWNpbmc/LnNuYXBzaG90KHRoaXMuYXBwUmVmLnRyYWNpbmdTbmFwc2hvdCk/P251bGwsIXRoaXMuc2hvdWxkU2NoZWR1bGVUaWNrKHIpKXJldHVybjtjb25zdCBpPXRoaXMudXNlTWlj''@;'; put 'put ''cm90YXNrU2NoZWR1bGVyP1NCOkNCO3RoaXMucGVuZGluZ1JlbmRlclRhc2tJZD10aGlzLnRhc2tTZXJ2aWNlLmFkZCgpLHRoaXMuY2FuY2VsU2NoZWR1bGVkQ2FsbGJhY2s9dGhpcy5zY2hlZHVsZUluUm9vdFpvbmU/Wm9uZS5yb290LnJ1bigoKT0+aSgoKT0+dGhpcy50aWNrKCkpKTp0aGlz''@;'; put 'put ''Lm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+aSgoKT0+dGhpcy50aWNrKCkpKX1zaG91bGRTY2hlZHVsZVRpY2sodCl7cmV0dXJuISh0aGlzLmRpc2FibGVTY2hlZHVsaW5nJiYhdHx8dGhpcy5hcHBSZWYuZGVzdHJveWVkfHxudWxsIT09dGhpcy5wZW5kaW5nUmVuZGVyVGFza0lkfHx0''@;'; put 'put ''aGlzLnJ1bm5pbmdUaWNrfHx0aGlzLmFwcFJlZi5fcnVubmluZ1RpY2t8fCF0aGlzLnpvbmVsZXNzRW5hYmxlZCYmdGhpcy56b25lSXNEZWZpbmVkJiZab25lLmN1cnJlbnQuZ2V0KHFTK3RoaXMuYW5ndWxhclpvbmVJZCkpfXRpY2soKXtpZih0aGlzLnJ1bm5pbmdUaWNrfHx0aGlzLmFwcFJl''@;'; put 'put ''Zi5kZXN0cm95ZWQpcmV0dXJuO2lmKDA9PT10aGlzLmFwcFJlZi5kaXJ0eUZsYWdzKXJldHVybiB2b2lkIHRoaXMuY2xlYW51cCgpOyF0aGlzLnpvbmVsZXNzRW5hYmxlZCYmNyZ0aGlzLmFwcFJlZi5kaXJ0eUZsYWdzJiYodGhpcy5hcHBSZWYuZGlydHlGbGFnc3w9MSk7Y29uc3QgdD10aGlz''@;'; put 'put ''LnRhc2tTZXJ2aWNlLmFkZCgpO3RyeXt0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLnJ1bm5pbmdUaWNrPSEwLHRoaXMuYXBwUmVmLl90aWNrKCl9LHZvaWQgMCx0aGlzLnNjaGVkdWxlclRpY2tBcHBseUFyZ3MpfWNhdGNoKHIpe3RoaXMudGFza1NlcnZpY2UucmVtb3ZlKHQpLHRoaXMuYXBw''@;'; put 'put ''bGljYXRpb25FcnJvckhhbmRsZXIocil9ZmluYWxseXt0aGlzLmNsZWFudXAoKX10aGlzLnVzZU1pY3JvdGFza1NjaGVkdWxlcj0hMCxTQigoKT0+e3RoaXMudXNlTWljcm90YXNrU2NoZWR1bGVyPSExLHRoaXMudGFza1NlcnZpY2UucmVtb3ZlKHQpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1''@;'; put 'put ''YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKSx0aGlzLmNsZWFudXAoKX1jbGVhbnVwKCl7aWYodGhpcy5ydW5uaW5nVGljaz0hMSx0aGlzLmNhbmNlbFNjaGVkdWxlZENhbGxiYWNrPy4oKSx0aGlzLmNhbmNlbFNjaGVkdWxlZENhbGxiYWNrPW51bGwsbnVsbCE9PXRoaXMucGVuZGluZ1JlbmRl''@;'; put 'put ''clRhc2tJZCl7Y29uc3QgdD10aGlzLnBlbmRpbmdSZW5kZXJUYXNrSWQ7dGhpcy5wZW5kaW5nUmVuZGVyVGFza0lkPW51bGwsdGhpcy50YXNrU2VydmljZS5yZW1vdmUodCl9fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9''@;'; put 'put ''Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKTtjb25zdCBGNT1uZXcgRXIoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PnNuKEY1LHtvcHRpb25hbDohMCxza2lwU2VsZjohMH0pfHxmdW5jdGlvbiBpdHQoKXty''@;'; put 'put ''ZXR1cm4gdHlwZW9mICRsb2NhbGl6ZTwidSImJiRsb2NhbGl6ZS5sb2NhbGV8fE9qfSgpfSk7ZnVuY3Rpb24gSGMobil7cmV0dXJuImJyb3dzZXIiPT09bn1sZXQgbXR0PSgoKT0+e2NsYXNzIG57c3RhdGljIFx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9y''@;'; put 'put ''eTooKT0+bmV3IHZ0dChzbihUbCksd2luZG93KX0pfXJldHVybiBufSkoKTtjbGFzcyB2dHR7ZG9jdW1lbnQ7d2luZG93O29mZnNldD0oKT0+WzAsMF07Y29uc3RydWN0b3IoZSx0KXt0aGlzLmRvY3VtZW50PWUsdGhpcy53aW5kb3c9dH1zZXRPZmZzZXQoZSl7dGhpcy5vZmZzZXQ9QXJyYXku''@;'; put 'put ''aXNBcnJheShlKT8oKT0+ZTplfWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuW3RoaXMud2luZG93LnNjcm9sbFgsdGhpcy53aW5kb3cuc2Nyb2xsWV19c2Nyb2xsVG9Qb3NpdGlvbihlLHQpe3RoaXMud2luZG93LnNjcm9sbFRvKHsuLi50LGxlZnQ6ZVswXSx0b3A6ZVsxXX0pfXNjcm9sbFRv''@;'; put 'put ''QW5jaG9yKGUsdCl7Y29uc3Qgcj1mdW5jdGlvbiBfdHQobixlKXtjb25zdCB0PW4uZ2V0RWxlbWVudEJ5SWQoZSl8fG4uZ2V0RWxlbWVudHNCeU5hbWUoZSlbMF07aWYodClyZXR1cm4gdDtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbi5jcmVhdGVUcmVlV2Fsa2VyJiZuLmJvZHkmJiJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBuLmJvZHkuYXR0YWNoU2hhZG93KXtjb25zdCByPW4uY3JlYXRlVHJlZVdhbGtlcihuLmJvZHksTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQpO2xldCBpPXIuY3VycmVudE5vZGU7Zm9yKDtpOyl7Y29uc3Qgbz1pLnNoYWRvd1Jvb3Q7aWYobyl7Y29uc3QgYT1vLmdldEVsZW1l''@;'; put 'put ''bnRCeUlkKGUpfHxvLnF1ZXJ5U2VsZWN0b3IoYFtuYW1lPSIke2V9Il1gKTtpZihhKXJldHVybiBhfWk9ci5uZXh0Tm9kZSgpfX1yZXR1cm4gbnVsbH0odGhpcy5kb2N1bWVudCxlKTtyJiYodGhpcy5zY3JvbGxUb0VsZW1lbnQocix0KSxyLmZvY3VzKCkpfXNldEhpc3RvcnlTY3JvbGxSZXN0''@;'; put 'put ''b3JhdGlvbihlKXt0cnl7dGhpcy53aW5kb3cuaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbj1lfWNhdGNoe2NvbnNvbGUud2FybihkYygyNDAwLCExKSl9fXNjcm9sbFRvRWxlbWVudChlLHQpe2NvbnN0IHI9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPXIubGVmdCt0aGlzLndpbmRvdy5w''@;'; put 'put ''YWdlWE9mZnNldCxvPXIudG9wK3RoaXMud2luZG93LnBhZ2VZT2Zmc2V0LGE9dGhpcy5vZmZzZXQoKTt0aGlzLndpbmRvdy5zY3JvbGxUbyh7Li4udCxsZWZ0OmktYVswXSx0b3A6by1hWzFdfSl9fWNvbnN0IGlVPVN5bWJvbCgiSW5wdXRTaWduYWxOb2RlI1VOU0VUIiksaXZlPXsuLi5Pbyx0''@;'; put 'put ''cmFuc2Zvcm1Gbjp2b2lkIDAsYXBwbHlWYWx1ZVRvSW5wdXRTaWduYWwobixlKXtRcihuLGUpfX07ZnVuY3Rpb24gb3ZlKG4sZSl7Y29uc3QgdD1PYmplY3QuY3JlYXRlKGl2ZSk7ZnVuY3Rpb24gcigpe2lmKEQodCksdC52YWx1ZT09PWlVKXRocm93IG5ldyBXbigtOTUwLG51bGwpO3JldHVy''@;'; put 'put ''biB0LnZhbHVlfXJldHVybiB0LnZhbHVlPW4sdC50cmFuc2Zvcm1Gbj1lPy50cmFuc2Zvcm0scltiXT10LHJ9Y2xhc3MgRHJ0e2F0dHJpYnV0ZU5hbWU7Y29uc3RydWN0b3IoZSl7dGhpcy5hdHRyaWJ1dGVOYW1lPWV9X19OR19FTEVNRU5UX0lEX189KCk9Pnc1KHRoaXMuYXR0cmlidXRlTmFt''@;'; put 'put ''ZSk7dG9TdHJpbmcoKXtyZXR1cm5gSG9zdEF0dHJpYnV0ZVRva2VuICR7dGhpcy5hdHRyaWJ1dGVOYW1lfWB9fWZ1bmN0aW9uIGF2ZShuLGUpe3JldHVybiBvdmUobixlKX1uZXcgRXIoIiIpLl9fTkdfRUxFTUVOVF9JRF9fPW49Pntjb25zdCBlPXlpKCk7aWYobnVsbD09PWUpdGhyb3cgbmV3''@;'; put 'put ''IFduKDIwNCwhMSk7aWYoMiZlLnR5cGUpcmV0dXJuIGUudmFsdWU7aWYoOCZuKXJldHVybiBudWxsO3Rocm93IG5ldyBXbigyMDQsITEpfTtjb25zdCBOcnQ9KGF2ZS5yZXF1aXJlZD1mdW5jdGlvbiBPcnQobil7cmV0dXJuIG92ZShpVSxuKX0sYXZlKSxvVT1uZXcgRXIoIiIpLEJydD1uZXcg''@;'; put 'put ''RXIoIiIpO2Z1bmN0aW9uIHVJKG4pe3JldHVybiFuLm1vZHVsZVJlZn1sZXQgaHZlO2Z1bmN0aW9uIGZ2ZSgpe2h2ZT1qcnR9ZnVuY3Rpb24ganJ0KG4sZSl7Y29uc3QgdD1uLmluamVjdG9yLmdldChXZyk7aWYobi5fYm9vdHN0cmFwQ29tcG9uZW50cy5sZW5ndGg+MCluLl9ib290c3RyYXBD''@;'; put 'put ''b21wb25lbnRzLmZvckVhY2gocj0+dC5ib290c3RyYXAocikpO2Vsc2V7aWYoIW4uaW5zdGFuY2UubmdEb0Jvb3RzdHJhcCl0aHJvdyBuZXcgV24oLTQwMywhMSk7bi5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKHQpfWUucHVzaChuKX1sZXQgcHZlPSgoKT0+e2NsYXNzIG57X2luamVjdG9yO19t''@;'; put 'put ''b2R1bGVzPVtdO19kZXN0cm95TGlzdGVuZXJzPVtdO19kZXN0cm95ZWQ9ITE7Y29uc3RydWN0b3IodCl7dGhpcy5faW5qZWN0b3I9dH1ib290c3RyYXBNb2R1bGVGYWN0b3J5KHQscil7Y29uc3QgaT1yPy5zY2hlZHVsZUluUm9vdFpvbmUsYT1yPy5pZ25vcmVDaGFuZ2VzT3V0c2lkZVpvbmUs''@;'; put 'put ''bD1bYTllKHtuZ1pvbmVGYWN0b3J5OigpPT5mdW5jdGlvbiB3ZWUobj0iem9uZS5qcyIsZSl7cmV0dXJuIm5vb3AiPT09bj9uZXcgbFI6InpvbmUuanMiPT09bj9uZXcgZ2EoZSk6bn0ocj8ubmdab25lLHsuLi52bmUoe2V2ZW50Q29hbGVzY2luZzpyPy5uZ1pvbmVFdmVudENvYWxlc2Npbmcs''@;'; put 'put ''cnVuQ29hbGVzY2luZzpyPy5uZ1pvbmVSdW5Db2FsZXNjaW5nfSksc2NoZWR1bGVJblJvb3Rab25lOml9KSxpZ25vcmVDaGFuZ2VzT3V0c2lkZVpvbmU6YX0pLHtwcm92aWRlOm04LHVzZUV4aXN0aW5nOmM5ZX0sd1hdLHU9ZnVuY3Rpb24gS3FlKG4sZSx0KXtyZXR1cm4gbmV3IHd0ZShuLGUs''@;'; put 'put ''dCwhMSl9KHQubW9kdWxlVHlwZSx0aGlzLmluamVjdG9yLGwpO3JldHVybiBmdmUoKSxmdW5jdGlvbiBkdmUobil7Y29uc3QgZT11SShuKT9uLnIzSW5qZWN0b3I6bi5tb2R1bGVSZWYuaW5qZWN0b3IsdD1lLmdldChnYSk7cmV0dXJuIHQucnVuKCgpPT57dUkobik/bi5yM0luamVjdG9yLnJl''@;'; put 'put ''c29sdmVJbmplY3RvckluaXRpYWxpemVycygpOm4ubW9kdWxlUmVmLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpO2NvbnN0IHI9ZS5nZXQoX3ApO2xldCBpO2lmKHQucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpPXQub25FcnJvci5zdWJzY3JpYmUoe25leHQ6cn0pfSksdUkobikpe2Nv''@;'; put 'put ''bnN0IG89KCk9PmUuZGVzdHJveSgpLGE9bi5wbGF0Zm9ybUluamVjdG9yLmdldChvVSk7YS5hZGQobyksZS5vbkRlc3Ryb3koKCk9PntpLnVuc3Vic2NyaWJlKCksYS5kZWxldGUobyl9KX1lbHNle2NvbnN0IG89KCk9Pm4ubW9kdWxlUmVmLmRlc3Ryb3koKSxhPW4ucGxhdGZvcm1JbmplY3Rv''@;'; put 'put ''ci5nZXQob1UpO2EuYWRkKG8pLG4ubW9kdWxlUmVmLm9uRGVzdHJveSgoKT0+e0NqKG4uYWxsUGxhdGZvcm1Nb2R1bGVzLG4ubW9kdWxlUmVmKSxpLnVuc3Vic2NyaWJlKCksYS5kZWxldGUobyl9KX1yZXR1cm4gZnVuY3Rpb24gVXJ0KG4sZSx0KXt0cnl7Y29uc3Qgcj10KCk7cmV0dXJuIFpS''@;'; put 'put ''KHIpP3IuY2F0Y2goaT0+e3Rocm93IGUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm4oaSkpLGl9KTpyfWNhdGNoKHIpe3Rocm93IGUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm4ocikpLHJ9fShyLHQsKCk9Pntjb25zdCBvPWUuZ2V0KHM1KSxhPW8uYWRkKCksbD1lLmdldChnOGUpO3JldHVybiBs''@;'; put 'put ''LnJ1bkluaXRpYWxpemVycygpLGwuZG9uZVByb21pc2UudGhlbigoKT0+e2lmKGZ1bmN0aW9uIFZRZShuKXsic3RyaW5nIj09dHlwZW9mIG4mJihQOGU9bi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpKX0oZS5nZXQoRjUsT2opfHxPaiksIWUuZ2V0KEJydCwhMCkpcmV0dXJuIHVJ''@;'; put 'put ''KG4pP2UuZ2V0KFdnKToobi5hbGxQbGF0Zm9ybU1vZHVsZXMucHVzaChuLm1vZHVsZVJlZiksbi5tb2R1bGVSZWYpO2lmKHVJKG4pKXtjb25zdCBFPWUuZ2V0KFdnKTtyZXR1cm4gdm9pZCAwIT09bi5yb290Q29tcG9uZW50JiZFLmJvb3RzdHJhcChuLnJvb3RDb21wb25lbnQpLEV9cmV0dXJu''@;'; put 'put ''IGh2ZT8uKG4ubW9kdWxlUmVmLG4uYWxsUGxhdGZvcm1Nb2R1bGVzKSxuLm1vZHVsZVJlZn0pLmZpbmFsbHkoKCk9PntvLnJlbW92ZShhKX0pfSl9KX0oe21vZHVsZVJlZjp1LGFsbFBsYXRmb3JtTW9kdWxlczp0aGlzLl9tb2R1bGVzLHBsYXRmb3JtSW5qZWN0b3I6dGhpcy5pbmplY3Rvcn0p''@;'; put 'put ''fWJvb3RzdHJhcE1vZHVsZSh0LHI9W10pe2NvbnN0IGk9djhlKHt9LHIpO3JldHVybiBmdmUoKSxmdW5jdGlvbiBGcnQobixlLHQpe2NvbnN0IHI9bmV3IFQ2ZSh0KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpfSgwLDAsdCkudGhlbihvPT50aGlzLmJvb3RzdHJhcE1vZHVsZUZhY3Rvcnko''@;'; put 'put ''byxpKSl9b25EZXN0cm95KHQpe3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMucHVzaCh0KX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9ZGVzdHJveSgpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgV24oNDA0LCExKTt0aGlzLl9tb2R1bGVzLnNsaWNlKCkuZm9yRWFj''@;'; put 'put ''aChyPT5yLmRlc3Ryb3koKSksdGhpcy5fZGVzdHJveUxpc3RlbmVycy5mb3JFYWNoKHI9PnIoKSk7Y29uc3QgdD10aGlzLl9pbmplY3Rvci5nZXQob1UsbnVsbCk7dCYmKHQuZm9yRWFjaChyPT5yKCkpLHQuY2xlYXIoKSksdGhpcy5fZGVzdHJveWVkPSEwfWdldCBkZXN0cm95ZWQoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fZGVzdHJveWVkfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShvcihNbCkpfTtzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pfXJldHVybiBufSkoKSxURT1u''@;'; put 'put ''dWxsO2Z1bmN0aW9uIGd2ZShuLGUsdD1bXSl7Y29uc3Qgcj1gUGxhdGZvcm06ICR7ZX1gLGk9bmV3IEVyKHIpO3JldHVybihvPVtdKT0+e2xldCBhPWFVKCk7aWYoIWEpe2NvbnN0IGw9Wy4uLnQsLi4ubyx7cHJvdmlkZTppLHVzZVZhbHVlOiEwfV07YT1uPy4obCk/P2Z1bmN0aW9uIHpydChu''@;'; put 'put ''KXtpZihhVSgpKXRocm93IG5ldyBXbig0MDAsITEpOyhmdW5jdGlvbiBDWGUoKXshZnVuY3Rpb24gZ3Qobil7THQ9bn0oKCk9Pnt0aHJvdyBuZXcgV24oNjAwLCIiKX0pfSkoKSxURT1uO2NvbnN0IGU9bi5nZXQocHZlKTtyZXR1cm4gZnVuY3Rpb24gdnZlKG4pe2NvbnN0IGU9bi5nZXQoc1Ys''@;'; put 'put ''bnVsbCk7THUobiwoKT0+e2U/LmZvckVhY2godD0+dCgpKX0pfShuKSxlfShmdW5jdGlvbiBtdmUobj1bXSxlKXtyZXR1cm4gTWwuY3JlYXRlKHtuYW1lOmUscHJvdmlkZXJzOlt7cHJvdmlkZTpvOCx1c2VWYWx1ZToicGxhdGZvcm0ifSx7cHJvdmlkZTpvVSx1c2VWYWx1ZTpuZXcgU2V0KFso''@;'; put 'put ''KT0+VEU9bnVsbF0pfSwuLi5uXX0pfShsLHIpKX1yZXR1cm4gZnVuY3Rpb24gV3J0KCl7Y29uc3QgZT1hVSgpO2lmKCFlKXRocm93IG5ldyBXbigtNDAxLCExKTtyZXR1cm4gZX0oKX19ZnVuY3Rpb24gYVUoKXtyZXR1cm4gVEU/LmdldChwdmUpPz9udWxsfWxldCBVbD0oKCk9PmNsYXNzIG57''@;'; put 'put ''c3RhdGljIF9fTkdfRUxFTUVOVF9JRF9fPVpydH0pKCk7ZnVuY3Rpb24gWnJ0KG4pe3JldHVybiBmdW5jdGlvbiBHcnQobixlLHQpe2lmKHdmKG4pJiYhdCl7Y29uc3Qgcj1aaShuLmluZGV4LGUpO3JldHVybiBuZXcgUTkocixyKX1yZXR1cm4gMTc1Jm4udHlwZT9uZXcgUTkoZVsxNV0sZSk6''@;'; put 'put ''bnVsbH0oeWkoKSxpdCgpLCEoMTYmfm4pKX1jbGFzcyB5dmV7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHMoZSl7cmV0dXJuIHJjKGUpfWNyZWF0ZShlKXtyZXR1cm4gbmV3IHFydChlKX19Y29uc3QgJHJ0PShuLGUpPT5lO2NsYXNzIHFydHtsZW5ndGg9MDtjb2xsZWN0aW9uO19saW5rZWRSZWNv''@;'; put 'put ''cmRzPW51bGw7X3VubGlua2VkUmVjb3Jkcz1udWxsO19wcmV2aW91c0l0SGVhZD1udWxsO19pdEhlYWQ9bnVsbDtfaXRUYWlsPW51bGw7X2FkZGl0aW9uc0hlYWQ9bnVsbDtfYWRkaXRpb25zVGFpbD1udWxsO19tb3Zlc0hlYWQ9bnVsbDtfbW92ZXNUYWlsPW51bGw7X3JlbW92YWxzSGVhZD1u''@;'; put 'put ''dWxsO19yZW1vdmFsc1RhaWw9bnVsbDtfaWRlbnRpdHlDaGFuZ2VzSGVhZD1udWxsO19pZGVudGl0eUNoYW5nZXNUYWlsPW51bGw7X3RyYWNrQnlGbjtjb25zdHJ1Y3RvcihlKXt0aGlzLl90cmFja0J5Rm49ZXx8JHJ0fWZvckVhY2hJdGVtKGUpe2xldCB0O2Zvcih0PXRoaXMuX2l0SGVhZDtu''@;'; put 'put ''dWxsIT09dDt0PXQuX25leHQpZSh0KX1mb3JFYWNoT3BlcmF0aW9uKGUpe2xldCB0PXRoaXMuX2l0SGVhZCxyPXRoaXMuX3JlbW92YWxzSGVhZCxpPTAsbz1udWxsO2Zvcig7dHx8cjspe2NvbnN0IGE9IXJ8fHQmJnQuY3VycmVudEluZGV4PHd2ZShyLGksbyk/dDpyLGw9d3ZlKGEsaSxvKSx1''@;'; put 'put ''PWEuY3VycmVudEluZGV4O2lmKGE9PT1yKWktLSxyPXIuX25leHRSZW1vdmVkO2Vsc2UgaWYodD10Ll9uZXh0LG51bGw9PWEucHJldmlvdXNJbmRleClpKys7ZWxzZXtvfHwobz1bXSk7Y29uc3QgZz1sLWksRT11LWk7aWYoZyE9RSl7Zm9yKGxldCBaPTA7WjxnO1orKyl7Y29uc3QgZWU9Wjxv''@;'; put 'put ''Lmxlbmd0aD9vW1pdOm9bWl09MCx2ZT1lZStaO0U8PXZlJiZ2ZTxnJiYob1taXT1lZSsxKX1vW2EucHJldmlvdXNJbmRleF09RS1nfX1sIT09dSYmZShhLGwsdSl9fWZvckVhY2hQcmV2aW91c0l0ZW0oZSl7bGV0IHQ7Zm9yKHQ9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PXQ7dD10Ll9u''@;'; put 'put ''ZXh0UHJldmlvdXMpZSh0KX1mb3JFYWNoQWRkZWRJdGVtKGUpe2xldCB0O2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0QWRkZWQpZSh0KX1mb3JFYWNoTW92ZWRJdGVtKGUpe2xldCB0O2Zvcih0PXRoaXMuX21vdmVzSGVhZDtudWxsIT09dDt0PXQuX25leHRN''@;'; put 'put ''b3ZlZCllKHQpfWZvckVhY2hSZW1vdmVkSXRlbShlKXtsZXQgdDtmb3IodD10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0UmVtb3ZlZCllKHQpfWZvckVhY2hJZGVudGl0eUNoYW5nZShlKXtsZXQgdDtmb3IodD10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT10''@;'; put 'put ''O3Q9dC5fbmV4dElkZW50aXR5Q2hhbmdlKWUodCl9ZGlmZihlKXtpZihudWxsPT1lJiYoZT1bXSksIXJjKGUpKXRocm93IG5ldyBXbig5MDAsITEpO3JldHVybiB0aGlzLmNoZWNrKGUpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2soZSl7dGhpcy5fcmVzZXQoKTtsZXQgaSxvLGEsdD10''@;'; put 'put ''aGlzLl9pdEhlYWQscj0hMTtpZihBcnJheS5pc0FycmF5KGUpKXt0aGlzLmxlbmd0aD1lLmxlbmd0aDtmb3IobGV0IGw9MDtsPHRoaXMubGVuZ3RoO2wrKylvPWVbbF0sYT10aGlzLl90cmFja0J5Rm4obCxvKSxudWxsIT09dCYmT2JqZWN0LmlzKHQudHJhY2tCeUlkLGEpPyhyJiYodD10aGlz''@;'; put 'put ''Ll92ZXJpZnlSZWluc2VydGlvbih0LG8sYSxsKSksT2JqZWN0LmlzKHQuaXRlbSxvKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UodCxvKSk6KHQ9dGhpcy5fbWlzbWF0Y2godCxvLGEsbCkscj0hMCksdD10Ll9uZXh0fWVsc2UgaT0wLGZ1bmN0aW9uIHoxKG4sZSl7aWYoQXJyYXkuaXNBcnJh''@;'; put 'put ''eShuKSlmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyllKG5bdF0pO2Vsc2V7Y29uc3QgdD1uW1N5bWJvbC5pdGVyYXRvcl0oKTtsZXQgcjtmb3IoOyEocj10Lm5leHQoKSkuZG9uZTspZShyLnZhbHVlKX19KGUsbD0+e2E9dGhpcy5fdHJhY2tCeUZuKGksbCksbnVsbCE9PXQmJk9iamVjdC5p''@;'; put 'put ''cyh0LnRyYWNrQnlJZCxhKT8ociYmKHQ9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24odCxsLGEsaSkpLE9iamVjdC5pcyh0Lml0ZW0sbCl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKHQsbCkpOih0PXRoaXMuX21pc21hdGNoKHQsbCxhLGkpLHI9ITApLHQ9dC5fbmV4dCxpKyt9KSx0aGlzLmxl''@;'; put 'put ''bmd0aD1pO3JldHVybiB0aGlzLl90cnVuY2F0ZSh0KSx0aGlzLmNvbGxlY3Rpb249ZSx0aGlzLmlzRGlydHl9Z2V0IGlzRGlydHkoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9uc0hlYWR8fG51bGwhPT10aGlzLl9tb3Zlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR8fG51''@;'; put 'put ''bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkfV9yZXNldCgpe2lmKHRoaXMuaXNEaXJ0eSl7bGV0IGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNJdEhlYWQ9dGhpcy5faXRIZWFkO251bGwhPT1lO2U9ZS5fbmV4dCllLl9uZXh0UHJldmlvdXM9ZS5fbmV4dDtmb3IoZT10aGlzLl9hZGRpdGlv''@;'; put 'put ''bnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKWUucHJldmlvdXNJbmRleD1lLmN1cnJlbnRJbmRleDtmb3IodGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsZT10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0TW92ZWQpZS5wcmV2aW91c0lu''@;'; put 'put ''ZGV4PWUuY3VycmVudEluZGV4O3RoaXMuX21vdmVzSGVhZD10aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9dGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGx9fV9taXNtYXRj''@;'; put 'put ''aChlLHQscixpKXtsZXQgbztyZXR1cm4gbnVsbD09PWU/bz10aGlzLl9pdFRhaWw6KG89ZS5fcHJldix0aGlzLl9yZW1vdmUoZSkpLG51bGwhPT0oZT1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChyLG51bGwpKT8oT2JqZWN0Lmlz''@;'; put 'put ''KGUuaXRlbSx0KXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoZSx0KSx0aGlzLl9yZWluc2VydEFmdGVyKGUsbyxpKSk6bnVsbCE9PShlPW51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fbGlua2VkUmVjb3Jkcy5nZXQocixpKSk/KE9iamVjdC5pcyhlLml0ZW0sdCl8fHRo''@;'; put 'put ''aXMuX2FkZElkZW50aXR5Q2hhbmdlKGUsdCksdGhpcy5fbW92ZUFmdGVyKGUsbyxpKSk6ZT10aGlzLl9hZGRBZnRlcihuZXcgS3J0KHQsciksbyxpKSxlfV92ZXJpZnlSZWluc2VydGlvbihlLHQscixpKXtsZXQgbz1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5s''@;'; put 'put ''aW5rZWRSZWNvcmRzLmdldChyLG51bGwpO3JldHVybiBudWxsIT09bz9lPXRoaXMuX3JlaW5zZXJ0QWZ0ZXIobyxlLl9wcmV2LGkpOmUuY3VycmVudEluZGV4IT1pJiYoZS5jdXJyZW50SW5kZXg9aSx0aGlzLl9hZGRUb01vdmVzKGUsaSkpLGV9X3RydW5jYXRlKGUpe2Zvcig7bnVsbCE9PWU7''@;'; put 'put ''KXtjb25zdCB0PWUuX25leHQ7dGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsoZSkpLGU9dH1udWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJlY29yZHMuY2xlYXIoKSxudWxsIT09dGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1Rh''@;'; put 'put ''aWwuX25leHRBZGRlZD1udWxsKSxudWxsIT09dGhpcy5fbW92ZXNUYWlsJiYodGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2l0VGFpbCYmKHRoaXMuX2l0VGFpbC5fbmV4dD1udWxsKSxudWxsIT09dGhpcy5fcmVtb3ZhbHNUYWlsJiYodGhpcy5fcmVtb3Zh''@;'; put 'put ''bHNUYWlsLl9uZXh0UmVtb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbCYmKHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5nZT1udWxsKX1fcmVpbnNlcnRBZnRlcihlLHQscil7bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYm''@;'; put 'put ''dGhpcy5fdW5saW5rZWRSZWNvcmRzLnJlbW92ZShlKTtjb25zdCBpPWUuX3ByZXZSZW1vdmVkLG89ZS5fbmV4dFJlbW92ZWQ7cmV0dXJuIG51bGw9PT1pP3RoaXMuX3JlbW92YWxzSGVhZD1vOmkuX25leHRSZW1vdmVkPW8sbnVsbD09PW8/dGhpcy5fcmVtb3ZhbHNUYWlsPWk6by5fcHJldlJl''@;'; put 'put ''bW92ZWQ9aSx0aGlzLl9pbnNlcnRBZnRlcihlLHQsciksdGhpcy5fYWRkVG9Nb3ZlcyhlLHIpLGV9X21vdmVBZnRlcihlLHQscil7cmV0dXJuIHRoaXMuX3VubGluayhlKSx0aGlzLl9pbnNlcnRBZnRlcihlLHQsciksdGhpcy5fYWRkVG9Nb3ZlcyhlLHIpLGV9X2FkZEFmdGVyKGUsdCxyKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5faW5zZXJ0QWZ0ZXIoZSx0LHIpLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbD09PXRoaXMuX2FkZGl0aW9uc1RhaWw/dGhpcy5fYWRkaXRpb25zSGVhZD1lOnRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1lLGV9X2luc2VydEFmdGVyKGUsdCxyKXtjb25zdCBpPW51''@;'; put 'put ''bGw9PT10P3RoaXMuX2l0SGVhZDp0Ll9uZXh0O3JldHVybiBlLl9uZXh0PWksZS5fcHJldj10LG51bGw9PT1pP3RoaXMuX2l0VGFpbD1lOmkuX3ByZXY9ZSxudWxsPT09dD90aGlzLl9pdEhlYWQ9ZTp0Ll9uZXh0PWUsbnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHMmJih0aGlzLl9saW5rZWRS''@;'; put 'put ''ZWNvcmRzPW5ldyBidmUpLHRoaXMuX2xpbmtlZFJlY29yZHMucHV0KGUpLGUuY3VycmVudEluZGV4PXIsZX1fcmVtb3ZlKGUpe3JldHVybiB0aGlzLl9hZGRUb1JlbW92YWxzKHRoaXMuX3VubGluayhlKSl9X3VubGluayhlKXtudWxsIT09dGhpcy5fbGlua2VkUmVjb3JkcyYmdGhpcy5fbGlu''@;'; put 'put ''a2VkUmVjb3Jkcy5yZW1vdmUoZSk7Y29uc3QgdD1lLl9wcmV2LHI9ZS5fbmV4dDtyZXR1cm4gbnVsbD09PXQ/dGhpcy5faXRIZWFkPXI6dC5fbmV4dD1yLG51bGw9PT1yP3RoaXMuX2l0VGFpbD10OnIuX3ByZXY9dCxlfV9hZGRUb01vdmVzKGUsdCl7cmV0dXJuIGUucHJldmlvdXNJbmRleD09''@;'; put 'put ''PXR8fCh0aGlzLl9tb3Zlc1RhaWw9bnVsbD09PXRoaXMuX21vdmVzVGFpbD90aGlzLl9tb3Zlc0hlYWQ9ZTp0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD1lKSxlfV9hZGRUb1JlbW92YWxzKGUpe3JldHVybiBudWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiYodGhpcy5fdW5saW5rZWRS''@;'; put 'put ''ZWNvcmRzPW5ldyBidmUpLHRoaXMuX3VubGlua2VkUmVjb3Jkcy5wdXQoZSksZS5jdXJyZW50SW5kZXg9bnVsbCxlLl9uZXh0UmVtb3ZlZD1udWxsLG51bGw9PT10aGlzLl9yZW1vdmFsc1RhaWw/KHRoaXMuX3JlbW92YWxzVGFpbD10aGlzLl9yZW1vdmFsc0hlYWQ9ZSxlLl9wcmV2UmVtb3Zl''@;'; put 'put ''ZD1udWxsKTooZS5fcHJldlJlbW92ZWQ9dGhpcy5fcmVtb3ZhbHNUYWlsLHRoaXMuX3JlbW92YWxzVGFpbD10aGlzLl9yZW1vdmFsc1RhaWwuX25leHRSZW1vdmVkPWUpLGV9X2FkZElkZW50aXR5Q2hhbmdlKGUsdCl7cmV0dXJuIGUuaXRlbT10LHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9''@;'; put 'put ''bnVsbD09PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw/dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD1lOnRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5nZT1lLGV9fWNsYXNzIEtydHtpdGVtO3RyYWNrQnlJZDtjdXJyZW50SW5kZXg9bnVsbDtwcmV2aW91c0lu''@;'; put 'put ''ZGV4PW51bGw7X25leHRQcmV2aW91cz1udWxsO19wcmV2PW51bGw7X25leHQ9bnVsbDtfcHJldkR1cD1udWxsO19uZXh0RHVwPW51bGw7X3ByZXZSZW1vdmVkPW51bGw7X25leHRSZW1vdmVkPW51bGw7X25leHRBZGRlZD1udWxsO19uZXh0TW92ZWQ9bnVsbDtfbmV4dElkZW50aXR5Q2hhbmdl''@;'; put 'put ''PW51bGw7Y29uc3RydWN0b3IoZSx0KXt0aGlzLml0ZW09ZSx0aGlzLnRyYWNrQnlJZD10fX1jbGFzcyBYcnR7X2hlYWQ9bnVsbDtfdGFpbD1udWxsO2FkZChlKXtudWxsPT09dGhpcy5faGVhZD8odGhpcy5faGVhZD10aGlzLl90YWlsPWUsZS5fbmV4dER1cD1udWxsLGUuX3ByZXZEdXA9bnVs''@;'; put 'put ''bCk6KHRoaXMuX3RhaWwuX25leHREdXA9ZSxlLl9wcmV2RHVwPXRoaXMuX3RhaWwsZS5fbmV4dER1cD1udWxsLHRoaXMuX3RhaWw9ZSl9Z2V0KGUsdCl7bGV0IHI7Zm9yKHI9dGhpcy5faGVhZDtudWxsIT09cjtyPXIuX25leHREdXApaWYoKG51bGw9PT10fHx0PD1yLmN1cnJlbnRJbmRleCkm''@;'; put 'put ''Jk9iamVjdC5pcyhyLnRyYWNrQnlJZCxlKSlyZXR1cm4gcjtyZXR1cm4gbnVsbH1yZW1vdmUoZSl7Y29uc3QgdD1lLl9wcmV2RHVwLHI9ZS5fbmV4dER1cDtyZXR1cm4gbnVsbD09PXQ/dGhpcy5faGVhZD1yOnQuX25leHREdXA9cixudWxsPT09cj90aGlzLl90YWlsPXQ6ci5fcHJldkR1cD10''@;'; put 'put ''LG51bGw9PT10aGlzLl9oZWFkfX1jbGFzcyBidmV7bWFwPW5ldyBNYXA7cHV0KGUpe2NvbnN0IHQ9ZS50cmFja0J5SWQ7bGV0IHI9dGhpcy5tYXAuZ2V0KHQpO3J8fChyPW5ldyBYcnQsdGhpcy5tYXAuc2V0KHQscikpLHIuYWRkKGUpfWdldChlLHQpe2NvbnN0IGk9dGhpcy5tYXAuZ2V0KGUp''@;'; put 'put ''O3JldHVybiBpP2kuZ2V0KGUsdCk6bnVsbH1yZW1vdmUoZSl7Y29uc3QgdD1lLnRyYWNrQnlJZDtyZXR1cm4gdGhpcy5tYXAuZ2V0KHQpLnJlbW92ZShlKSYmdGhpcy5tYXAuZGVsZXRlKHQpLGV9Z2V0IGlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMubWFwLnNpemV9Y2xlYXIoKXt0aGlzLm1h''@;'; put 'put ''cC5jbGVhcigpfX1mdW5jdGlvbiB3dmUobixlLHQpe2NvbnN0IHI9bi5wcmV2aW91c0luZGV4O2lmKG51bGw9PT1yKXJldHVybiByO2xldCBpPTA7cmV0dXJuIHQmJnI8dC5sZW5ndGgmJihpPXRbcl0pLHIrZStpfWNsYXNzIEN2ZXtjb25zdHJ1Y3Rvcigpe31zdXBwb3J0cyhlKXtyZXR1cm4g''@;'; put 'put ''ZSBpbnN0YW5jZW9mIE1hcHx8VTAoZSl9Y3JlYXRlKCl7cmV0dXJuIG5ldyBRcnR9fWNsYXNzIFFydHtfcmVjb3Jkcz1uZXcgTWFwO19tYXBIZWFkPW51bGw7X2FwcGVuZEFmdGVyPW51bGw7X3ByZXZpb3VzTWFwSGVhZD1udWxsO19jaGFuZ2VzSGVhZD1udWxsO19jaGFuZ2VzVGFpbD1udWxs''@;'; put 'put ''O19hZGRpdGlvbnNIZWFkPW51bGw7X2FkZGl0aW9uc1RhaWw9bnVsbDtfcmVtb3ZhbHNIZWFkPW51bGw7X3JlbW92YWxzVGFpbD1udWxsO2dldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlz''@;'; put 'put ''Ll9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0oZSl7bGV0IHQ7Zm9yKHQ9dGhpcy5fbWFwSGVhZDtudWxsIT09dDt0PXQuX25leHQpZSh0KX1mb3JFYWNoUHJldmlvdXNJdGVtKGUpe2xldCB0O2Zvcih0PXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09dDt0PXQuX25leHRQcmV2aW91cyll''@;'; put 'put ''KHQpfWZvckVhY2hDaGFuZ2VkSXRlbShlKXtsZXQgdDtmb3IodD10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09dDt0PXQuX25leHRDaGFuZ2VkKWUodCl9Zm9yRWFjaEFkZGVkSXRlbShlKXtsZXQgdDtmb3IodD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT10O3Q9dC5fbmV4dEFkZGVkKWUo''@;'; put 'put ''dCl9Zm9yRWFjaFJlbW92ZWRJdGVtKGUpe2xldCB0O2Zvcih0PXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09dDt0PXQuX25leHRSZW1vdmVkKWUodCl9ZGlmZihlKXtpZihlKXtpZighKGUgaW5zdGFuY2VvZiBNYXB8fFUwKGUpKSl0aHJvdyBuZXcgV24oOTAwLCExKX1lbHNlIGU9bmV3IE1h''@;'; put 'put ''cDtyZXR1cm4gdGhpcy5jaGVjayhlKT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKGUpe3RoaXMuX3Jlc2V0KCk7bGV0IHQ9dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2ZvckVhY2goZSwocixpKT0+e2lmKHQmJnQua2V5PT09aSl0aGlzLl9tYXli''@;'; put 'put ''ZUFkZFRvQ2hhbmdlcyh0LHIpLHRoaXMuX2FwcGVuZEFmdGVyPXQsdD10Ll9uZXh0O2Vsc2V7Y29uc3Qgbz10aGlzLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleShpLHIpO3Q9dGhpcy5faW5zZXJ0QmVmb3JlT3JBcHBlbmQodCxvKX19KSx0KXt0Ll9wcmV2JiYodC5fcHJldi5fbmV4dD1udWxs''@;'; put 'put ''KSx0aGlzLl9yZW1vdmFsc0hlYWQ9dDtmb3IobGV0IHI9dDtudWxsIT09cjtyPXIuX25leHRSZW1vdmVkKXI9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1udWxsKSx0aGlzLl9yZWNvcmRzLmRlbGV0ZShyLmtleSksci5fbmV4dFJlbW92ZWQ9ci5fbmV4dCxyLnByZXZpb3VzVmFs''@;'; put 'put ''dWU9ci5jdXJyZW50VmFsdWUsci5jdXJyZW50VmFsdWU9bnVsbCxyLl9wcmV2PW51bGwsci5fbmV4dD1udWxsfXJldHVybiB0aGlzLl9jaGFuZ2VzVGFpbCYmKHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD1udWxsKSx0aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25z''@;'; put 'put ''VGFpbC5fbmV4dEFkZGVkPW51bGwpLHRoaXMuaXNEaXJ0eX1faW5zZXJ0QmVmb3JlT3JBcHBlbmQoZSx0KXtpZihlKXtjb25zdCByPWUuX3ByZXY7cmV0dXJuIHQuX25leHQ9ZSx0Ll9wcmV2PXIsZS5fcHJldj10LHImJihyLl9uZXh0PXQpLGU9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFw''@;'; put 'put ''SGVhZD10KSx0aGlzLl9hcHBlbmRBZnRlcj1lLGV9cmV0dXJuIHRoaXMuX2FwcGVuZEFmdGVyPyh0aGlzLl9hcHBlbmRBZnRlci5fbmV4dD10LHQuX3ByZXY9dGhpcy5fYXBwZW5kQWZ0ZXIpOnRoaXMuX21hcEhlYWQ9dCx0aGlzLl9hcHBlbmRBZnRlcj10LG51bGx9X2dldE9yQ3JlYXRlUmVj''@;'; put 'put ''b3JkRm9yS2V5KGUsdCl7aWYodGhpcy5fcmVjb3Jkcy5oYXMoZSkpe2NvbnN0IGk9dGhpcy5fcmVjb3Jkcy5nZXQoZSk7dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMoaSx0KTtjb25zdCBvPWkuX3ByZXYsYT1pLl9uZXh0O3JldHVybiBvJiYoby5fbmV4dD1hKSxhJiYoYS5fcHJldj1vKSxpLl9u''@;'; put 'put ''ZXh0PW51bGwsaS5fcHJldj1udWxsLGl9Y29uc3Qgcj1uZXcgSnJ0KGUpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldChlLHIpLHIuY3VycmVudFZhbHVlPXQsdGhpcy5fYWRkVG9BZGRpdGlvbnMocikscn1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCBlO2Zvcih0aGlzLl9wcmV2aW91''@;'; put 'put ''c01hcEhlYWQ9dGhpcy5fbWFwSGVhZCxlPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHQpZS5fbmV4dFByZXZpb3VzPWUuX25leHQ7Zm9yKGU9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0Q2hhbmdlZCllLnByZXZpb3VzVmFsdWU9ZS5jdXJyZW50''@;'; put 'put ''VmFsdWU7Zm9yKGU9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT1lO2U9ZS5fbmV4dEFkZGVkKWUucHJldmlvdXNWYWx1ZT1lLmN1cnJlbnRWYWx1ZTt0aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFp''@;'; put 'put ''bD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsfX1fbWF5YmVBZGRUb0NoYW5nZXMoZSx0KXtPYmplY3QuaXModCxlLmN1cnJlbnRWYWx1ZSl8fChlLnByZXZpb3VzVmFsdWU9ZS5jdXJyZW50VmFsdWUsZS5jdXJyZW50VmFsdWU9dCx0aGlzLl9hZGRUb0NoYW5nZXMoZSkpfV9hZGRUb0Fk''@;'; put 'put ''ZGl0aW9ucyhlKXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9ZToodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPWUsdGhpcy5fYWRkaXRpb25zVGFpbD1lKX1fYWRkVG9DaGFuZ2VzKGUpe251bGw9PT10aGlz''@;'; put 'put ''Ll9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1lOih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9ZSx0aGlzLl9jaGFuZ2VzVGFpbD1lKX1fZm9yRWFjaChlLHQpe2UgaW5zdGFuY2VvZiBNYXA/ZS5mb3JFYWNoKHQpOk9iamVjdC5rZXlzKGUp''@;'; put 'put ''LmZvckVhY2gocj0+dChlW3JdLHIpKX19Y2xhc3MgSnJ0e2tleTtwcmV2aW91c1ZhbHVlPW51bGw7Y3VycmVudFZhbHVlPW51bGw7X25leHRQcmV2aW91cz1udWxsO19uZXh0PW51bGw7X3ByZXY9bnVsbDtfbmV4dEFkZGVkPW51bGw7X25leHRSZW1vdmVkPW51bGw7X25leHRDaGFuZ2VkPW51''@;'; put 'put ''bGw7Y29uc3RydWN0b3IoZSl7dGhpcy5rZXk9ZX19ZnVuY3Rpb24gU3ZlKCl7cmV0dXJuIG5ldyBhdihbbmV3IHl2ZV0pfWxldCBhdj0oKCk9PntjbGFzcyBue2ZhY3RvcmllcztzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixwcm92aWRlZEluOiJyb290IixmYWN0b3J5OlN2ZX0pO2Nv''@;'; put 'put ''bnN0cnVjdG9yKHQpe3RoaXMuZmFjdG9yaWVzPXR9c3RhdGljIGNyZWF0ZSh0LHIpe2lmKG51bGwhPXIpe2NvbnN0IGk9ci5mYWN0b3JpZXMuc2xpY2UoKTt0PXQuY29uY2F0KGkpfXJldHVybiBuZXcgbih0KX1zdGF0aWMgZXh0ZW5kKHQpe3JldHVybntwcm92aWRlOm4sdXNlRmFjdG9yeToo''@;'; put 'put ''KT0+e2NvbnN0IHI9c24obix7b3B0aW9uYWw6ITAsc2tpcFNlbGY6ITB9KTtyZXR1cm4gbi5jcmVhdGUodCxyfHxTdmUoKSl9fX1maW5kKHQpe2NvbnN0IHI9dGhpcy5mYWN0b3JpZXMuZmluZChpPT5pLnN1cHBvcnRzKHQpKTtpZihudWxsIT1yKXJldHVybiByO3Rocm93IG5ldyBXbig5MDEs''@;'; put 'put ''ITEpfX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gRXZlKCl7cmV0dXJuIG5ldyBkSShbbmV3IEN2ZV0pfWxldCBkST0oKCk9PntjbGFzcyBue3N0YXRpYyBcdTAyNzVwcm92PUpuKHt0b2tlbjpuLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6RXZlfSk7ZmFjdG9yaWVzO2NvbnN0cnVjdG9yKHQp''@;'; put 'put ''e3RoaXMuZmFjdG9yaWVzPXR9c3RhdGljIGNyZWF0ZSh0LHIpe2lmKHIpe2NvbnN0IGk9ci5mYWN0b3JpZXMuc2xpY2UoKTt0PXQuY29uY2F0KGkpfXJldHVybiBuZXcgbih0KX1zdGF0aWMgZXh0ZW5kKHQpe3JldHVybntwcm92aWRlOm4sdXNlRmFjdG9yeTooKT0+e2NvbnN0IHI9c24obix7''@;'; put 'put ''b3B0aW9uYWw6ITAsc2tpcFNlbGY6ITB9KTtyZXR1cm4gbi5jcmVhdGUodCxyfHxFdmUoKSl9fX1maW5kKHQpe2NvbnN0IHI9dGhpcy5mYWN0b3JpZXMuZmluZChpPT5pLnN1cHBvcnRzKHQpKTtpZihyKXJldHVybiByO3Rocm93IG5ldyBXbig5MDEsITEpfX1yZXR1cm4gbn0pKCk7Y29uc3Qg''@;'; put 'put ''bml0PWd2ZShudWxsLCJjb3JlIixbXSk7bGV0IHJpdD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQpe31zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikob3IoV2cpKX07c3RhdGljIFx1MDI3NW1vZD1HaSh7dHlwZTpufSk7c3RhdGljIFx1MDI3NWluaj1t''@;'; put 'put ''aSh7fSl9cmV0dXJuIG59KSgpO2Z1bmN0aW9uIFowKG4pe3JldHVybiJib29sZWFuIj09dHlwZW9mIG4/bjpudWxsIT1uJiYiZmFsc2UiIT09bn1mdW5jdGlvbiBNaXQobixlPU5hTil7cmV0dXJuIGlzTmFOKHBhcnNlRmxvYXQobikpfHxpc05hTihOdW1iZXIobikpP2U6TnVtYmVyKG4pfWZ1''@;'; put 'put ''bmN0aW9uIGZJKG4sZSl7Y29uc3QgdD1jcyhuKSxyPWUuZWxlbWVudEluamVjdG9yfHxpNSgpO3JldHVybiBuZXcgQlIodCkuY3JlYXRlKHIsZS5wcm9qZWN0YWJsZU5vZGVzLGUuaG9zdEVsZW1lbnQsZS5lbnZpcm9ubWVudEluamVjdG9yLGUuZGlyZWN0aXZlcyxlLmJpbmRpbmdzKX1jb25z''@;'; put 'put ''dCBGaXQ9ey4uLkcsY29uc3VtZXJJc0Fsd2F5c0xpdmU6ITAsY29uc3VtZXJBbGxvd1NpZ25hbFdyaXRlczohMCxkaXJ0eTohMCxraW5kOiJlZmZlY3QifTtmdW5jdGlvbiBOdShuKXtyZXR1cm4gZnVuY3Rpb24gTml0KG4pe2NvbnN0IGU9ayhudWxsKTt0cnl7cmV0dXJuIG4oKX1maW5hbGx5''@;'; put 'put ''e2soZSl9fShuKX1mdW5jdGlvbiBuNChuLGUpe3JldHVybiBmdW5jdGlvbiB3ZShuLGUpe2NvbnN0IHQ9T2JqZWN0LmNyZWF0ZSgkdCk7dC5jb21wdXRhdGlvbj1uLHZvaWQgMCE9PWUmJih0LmVxdWFsPWUpO2NvbnN0IHI9KCk9PntpZihJKHQpLEQodCksdC52YWx1ZT09PUtlKXRocm93IHQu''@;'; put 'put ''ZXJyb3I7cmV0dXJuIHQudmFsdWV9O3JldHVybiByW2JdPXQscn0obixlPy5lcXVhbCl9Y2xhc3MgV2l0e1tiXTtjb25zdHJ1Y3RvcihlKXt0aGlzW2JdPWV9ZGVzdHJveSgpe3RoaXNbYl0uZGVzdHJveSgpfX1jb25zdCB6dmU9ey4uLkZpdCxjbGVhbnVwRm5zOnZvaWQgMCx6b25lOm51bGws''@;'; put 'put ''b25EZXN0cm95Rm46Z3kscnVuKCl7Y29uc3Qgbj10UyghMSk7dHJ5eyFmdW5jdGlvbiBQaXQobil7aWYobi5kaXJ0eT0hMSxuLnZlcnNpb24+MCYmIWFlKG4pKXJldHVybjtuLnZlcnNpb24rKztjb25zdCBlPW90KG4pO3RyeXtuLmNsZWFudXAoKSxuLmZuKCl9ZmluYWxseXtkdChuLGUpfX0o''@;'; put 'put ''dGhpcyl9ZmluYWxseXt0UyhuKX19LGNsZWFudXAoKXtpZighdGhpcy5jbGVhbnVwRm5zPy5sZW5ndGgpcmV0dXJuO2NvbnN0IG49ayhudWxsKTt0cnl7Zm9yKDt0aGlzLmNsZWFudXBGbnMubGVuZ3RoOyl0aGlzLmNsZWFudXBGbnMucG9wKCkoKX1maW5hbGx5e3RoaXMuY2xlYW51cEZucz1b''@;'; put 'put ''XSxrKG4pfX19LFlpdD17Li4uenZlLGNvbnN1bWVyTWFya2VkRGlydHkoKXt0aGlzLnNjaGVkdWxlci5zY2hlZHVsZSh0aGlzKSx0aGlzLm5vdGlmaWVyLm5vdGlmeSgxMil9LGRlc3Ryb3koKXt4ZSh0aGlzKSx0aGlzLm9uRGVzdHJveUZuKCksdGhpcy5jbGVhbnVwKCksdGhpcy5zY2hlZHVs''@;'; put 'put ''ZXIucmVtb3ZlKHRoaXMpfX0sWml0PXsuLi56dmUsY29uc3VtZXJNYXJrZWREaXJ0eSgpe3RoaXMudmlld1syXXw9ODE5MixTMih0aGlzLnZpZXcpLHRoaXMubm90aWZpZXIubm90aWZ5KDEzKX0sZGVzdHJveSgpe3hlKHRoaXMpLHRoaXMub25EZXN0cm95Rm4oKSx0aGlzLmNsZWFudXAoKSx0''@;'; put 'put ''aGlzLnZpZXdbMjNdPy5kZWxldGUodGhpcyl9fTtmdW5jdGlvbiBXdmUobixlKXtyZXR1cm4oKT0+e2UodD0+KG4uY2xlYW51cEZucz8/PVtdKS5wdXNoKHQpKX19RXJyb3IsRXJyb3I7bGV0IGlvdD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgeXB7X3BsYXRmb3JtTG9jYXRpb247X2Jhc2VIcmVm''@;'; put 'put ''PSIiO19yZW1vdmVMaXN0ZW5lckZucz1bXTtjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj10LG51bGwhPXImJih0aGlzLl9iYXNlSHJlZj1yKX1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1v''@;'; put 'put ''dmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUodCl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVzaCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUodCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UodCkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2Jhc2VIcmVmfXBhdGgodD0hMSl7Y29uc3Qgcj10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g/PyIjIjtyZXR1cm4gci5sZW5ndGg+MD9yLnN1YnN0cmluZygxKTpyfXByZXBhcmVFeHRlcm5hbFVybCh0KXtjb25zdCByPUZBKHRoaXMuX2Jhc2VIcmVmLHQpO3JldHVybiByLmxlbmd0''@;'; put 'put ''aD4wPyIjIityOnJ9cHVzaFN0YXRlKHQscixpLG8pe2NvbnN0IGE9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoaStabShvKSl8fHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWU7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUodCxyLGEpfXJlcGxhY2VTdGF0ZSh0LHIsaSxv''@;'; put 'put ''KXtjb25zdCBhPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGkrWm0obykpfHx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucmVwbGFjZVN0YXRlKHQscixhKX1mb3J3YXJkKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5mb3J3YXJkKCl9YmFj''@;'; put 'put ''aygpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uYmFjaygpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0U3RhdGUoKX1oaXN0b3J5R28odD0wKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhpc3RvcnlHbz8uKHQpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''cil7cmV0dXJuIG5ldyhyfHxuKShvcihOQSksb3Ioc1MsOCkpfTtzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSl9cmV0dXJuIG59KSgpO3ZhciBZMT1mdW5jdGlvbihuKXtyZXR1cm4gbltuLkZvcm1hdD0wXT0iRm9ybWF0IixuW24uU3RhbmRhbG9u''@;'; put 'put ''ZT0xXT0iU3RhbmRhbG9uZSIsbn0oWTF8fHt9KSxWYz1mdW5jdGlvbihuKXtyZXR1cm4gbltuLk5hcnJvdz0wXT0iTmFycm93IixuW24uQWJicmV2aWF0ZWQ9MV09IkFiYnJldmlhdGVkIixuW24uV2lkZT0yXT0iV2lkZSIsbltuLlNob3J0PTNdPSJTaG9ydCIsbn0oVmN8fHt9KSxNMz1mdW5j''@;'; put 'put ''dGlvbihuKXtyZXR1cm4gbltuLlNob3J0PTBdPSJTaG9ydCIsbltuLk1lZGl1bT0xXT0iTWVkaXVtIixuW24uTG9uZz0yXT0iTG9uZyIsbltuLkZ1bGw9M109IkZ1bGwiLG59KE0zfHx7fSk7ZnVuY3Rpb24gUG5lKG4sZSx0KXtjb25zdCByPUwyKG4pLG89R2coW3JbR3UuRGF5c0Zvcm1hdF0s''@;'; put 'put ''cltHdS5EYXlzU3RhbmRhbG9uZV1dLGUpO3JldHVybiBHZyhvLHQpfWZ1bmN0aW9uIEhuZShuLGUsdCl7Y29uc3Qgcj1MMihuKSxvPUdnKFtyW0d1Lk1vbnRoc0Zvcm1hdF0scltHdS5Nb250aHNTdGFuZGFsb25lXV0sZSk7cmV0dXJuIEdnKG8sdCl9ZnVuY3Rpb24gR2cobixlKXtmb3IobGV0''@;'; put 'put ''IHQ9ZTt0Pi0xO3QtLSlpZih0eXBlb2Ygblt0XTwidSIpcmV0dXJuIG5bdF07dGhyb3cgbmV3IFduKDIzMDQsITEpfWNvbnN0ICRuZT0vXHMrLyxyX2U9W107bGV0IEZoPSgoKT0+e2NsYXNzIG57X25nRWw7X3JlbmRlcmVyO2luaXRpYWxDbGFzc2VzPXJfZTtyYXdDbGFzcztzdGF0ZU1hcD1u''@;'; put 'put ''ZXcgTWFwO2NvbnN0cnVjdG9yKHQscil7dGhpcy5fbmdFbD10LHRoaXMuX3JlbmRlcmVyPXJ9c2V0IGtsYXNzKHQpe3RoaXMuaW5pdGlhbENsYXNzZXM9bnVsbCE9dD90LnRyaW0oKS5zcGxpdCgkbmUpOnJfZX1zZXQgbmdDbGFzcyh0KXt0aGlzLnJhd0NsYXNzPSJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''dD90LnRyaW0oKS5zcGxpdCgkbmUpOnR9bmdEb0NoZWNrKCl7Zm9yKGNvbnN0IHIgb2YgdGhpcy5pbml0aWFsQ2xhc3Nlcyl0aGlzLl91cGRhdGVTdGF0ZShyLCEwKTtjb25zdCB0PXRoaXMucmF3Q2xhc3M7aWYoQXJyYXkuaXNBcnJheSh0KXx8dCBpbnN0YW5jZW9mIFNldClmb3IoY29uc3Qg''@;'; put 'put ''ciBvZiB0KXRoaXMuX3VwZGF0ZVN0YXRlKHIsITApO2Vsc2UgaWYobnVsbCE9dClmb3IoY29uc3QgciBvZiBPYmplY3Qua2V5cyh0KSl0aGlzLl91cGRhdGVTdGF0ZShyLCEhdFtyXSk7dGhpcy5fYXBwbHlTdGF0ZURpZmYoKX1fdXBkYXRlU3RhdGUodCxyKXtjb25zdCBpPXRoaXMuc3RhdGVN''@;'; put 'put ''YXAuZ2V0KHQpO3ZvaWQgMCE9PWk/KGkuZW5hYmxlZCE9PXImJihpLmNoYW5nZWQ9ITAsaS5lbmFibGVkPXIpLGkudG91Y2hlZD0hMCk6dGhpcy5zdGF0ZU1hcC5zZXQodCx7ZW5hYmxlZDpyLGNoYW5nZWQ6ITAsdG91Y2hlZDohMH0pfV9hcHBseVN0YXRlRGlmZigpe2Zvcihjb25zdCB0IG9m''@;'; put 'put ''IHRoaXMuc3RhdGVNYXApe2NvbnN0IHI9dFswXSxpPXRbMV07aS5jaGFuZ2VkPyh0aGlzLl90b2dnbGVDbGFzcyhyLGkuZW5hYmxlZCksaS5jaGFuZ2VkPSExKTppLnRvdWNoZWR8fChpLmVuYWJsZWQmJnRoaXMuX3RvZ2dsZUNsYXNzKHIsITEpLHRoaXMuc3RhdGVNYXAuZGVsZXRlKHIpKSxp''@;'; put 'put ''LnRvdWNoZWQ9ITF9fV90b2dnbGVDbGFzcyh0LHIpeyh0PXQudHJpbSgpKS5sZW5ndGg+MCYmdC5zcGxpdCgkbmUpLmZvckVhY2goaT0+e3I/dGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGkpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMu''@;'; put 'put ''X25nRWwubmF0aXZlRWxlbWVudCxpKX0pfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKSh6ZShubyksemUoTnQpKX07c3RhdGljIFx1MDI3NWRpcj0kcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ0NsYXNzIiwiIl1dLGlucHV0czp7a2xhc3M6WzAsImNs''@;'; put 'put ''YXNzIiwia2xhc3MiXSxuZ0NsYXNzOiJuZ0NsYXNzIn19KX1yZXR1cm4gbn0pKCk7Y2xhc3MgV290eyRpbXBsaWNpdDtuZ0Zvck9mO2luZGV4O2NvdW50O2NvbnN0cnVjdG9yKGUsdCxyLGkpe3RoaXMuJGltcGxpY2l0PWUsdGhpcy5uZ0Zvck9mPXQsdGhpcy5pbmRleD1yLHRoaXMuY291bnQ9''@;'; put 'put ''aX1nZXQgZmlyc3QoKXtyZXR1cm4gMD09PXRoaXMuaW5kZXh9Z2V0IGxhc3QoKXtyZXR1cm4gdGhpcy5pbmRleD09PXRoaXMuY291bnQtMX1nZXQgZXZlbigpe3JldHVybiB0aGlzLmluZGV4JTI9PTB9Z2V0IG9kZCgpe3JldHVybiF0aGlzLmV2ZW59fWxldCBSZj0oKCk9PntjbGFzcyBue192''@;'; put 'put ''aWV3Q29udGFpbmVyO190ZW1wbGF0ZTtfZGlmZmVycztzZXQgbmdGb3JPZih0KXt0aGlzLl9uZ0Zvck9mPXQsdGhpcy5fbmdGb3JPZkRpcnR5PSEwfXNldCBuZ0ZvclRyYWNrQnkodCl7dGhpcy5fdHJhY2tCeUZuPXR9Z2V0IG5nRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLl90cmFja0J5Rm59''@;'; put 'put ''X25nRm9yT2Y9bnVsbDtfbmdGb3JPZkRpcnR5PSEwO19kaWZmZXI9bnVsbDtfdHJhY2tCeUZuO2NvbnN0cnVjdG9yKHQscixpKXt0aGlzLl92aWV3Q29udGFpbmVyPXQsdGhpcy5fdGVtcGxhdGU9cix0aGlzLl9kaWZmZXJzPWl9c2V0IG5nRm9yVGVtcGxhdGUodCl7dCYmKHRoaXMuX3RlbXBs''@;'; put 'put ''YXRlPXQpfW5nRG9DaGVjaygpe2lmKHRoaXMuX25nRm9yT2ZEaXJ0eSl7dGhpcy5fbmdGb3JPZkRpcnR5PSExO2NvbnN0IHQ9dGhpcy5fbmdGb3JPZjshdGhpcy5fZGlmZmVyJiZ0JiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZCh0KS5jcmVhdGUodGhpcy5uZ0ZvclRyYWNrQnkp''@;'; put 'put ''KX1pZih0aGlzLl9kaWZmZXIpe2NvbnN0IHQ9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fbmdGb3JPZik7dCYmdGhpcy5fYXBwbHlDaGFuZ2VzKHQpfX1fYXBwbHlDaGFuZ2VzKHQpe2NvbnN0IHI9dGhpcy5fdmlld0NvbnRhaW5lcjt0LmZvckVhY2hPcGVyYXRpb24oKGksbyxhKT0+e2lmKG51''@;'; put 'put ''bGw9PWkucHJldmlvdXNJbmRleClyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZSxuZXcgV290KGkuaXRlbSx0aGlzLl9uZ0Zvck9mLC0xLC0xKSxudWxsPT09YT92b2lkIDA6YSk7ZWxzZSBpZihudWxsPT1hKXIucmVtb3ZlKG51bGw9PT1vP3ZvaWQgMDpvKTtlbHNlIGlmKG51''@;'; put 'put ''bGwhPT1vKXtjb25zdCBsPXIuZ2V0KG8pO3IubW92ZShsLGEpLG9fZShsLGkpfX0pO2ZvcihsZXQgaT0wLG89ci5sZW5ndGg7aTxvO2krKyl7Y29uc3QgbD1yLmdldChpKS5jb250ZXh0O2wuaW5kZXg9aSxsLmNvdW50PW8sbC5uZ0Zvck9mPXRoaXMuX25nRm9yT2Z9dC5mb3JFYWNoSWRlbnRp''@;'; put 'put ''dHlDaGFuZ2UoaT0+e29fZShyLmdldChpLmN1cnJlbnRJbmRleCksaSl9KX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZCh0LHIpe3JldHVybiEwfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKSh6ZShEcyksemUoRmMpLHplKGF2KSl9O3N0YXRpYyBc''@;'; put 'put ''dTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdGb3IiLCIiLCJuZ0Zvck9mIiwiIl1dLGlucHV0czp7bmdGb3JPZjoibmdGb3JPZiIsbmdGb3JUcmFja0J5OiJuZ0ZvclRyYWNrQnkiLG5nRm9yVGVtcGxhdGU6Im5nRm9yVGVtcGxhdGUifX0pfXJldHVybiBufSkoKTtmdW5j''@;'; put 'put ''dGlvbiBvX2UobixlKXtuLmNvbnRleHQuJGltcGxpY2l0PWUuaXRlbX1sZXQgWXM9KCgpPT57Y2xhc3Mgbntfdmlld0NvbnRhaW5lcjtfY29udGV4dD1uZXcgWW90O190aGVuVGVtcGxhdGVSZWY9bnVsbDtfZWxzZVRlbXBsYXRlUmVmPW51bGw7X3RoZW5WaWV3UmVmPW51bGw7X2Vsc2VWaWV3''@;'; put 'put ''UmVmPW51bGw7Y29uc3RydWN0b3IodCxyKXt0aGlzLl92aWV3Q29udGFpbmVyPXQsdGhpcy5fdGhlblRlbXBsYXRlUmVmPXJ9c2V0IG5nSWYodCl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ9dGhpcy5fY29udGV4dC5uZ0lmPXQsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmVGhlbih0KXth''@;'; put 'put ''X2UodCksdGhpcy5fdGhlblRlbXBsYXRlUmVmPXQsdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl91cGRhdGVWaWV3KCl9c2V0IG5nSWZFbHNlKHQpe2FfZSh0KSx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9dCx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1fdXBk''@;'; put 'put ''YXRlVmlldygpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0P3RoaXMuX3RoZW5WaWV3UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmJiYodGhpcy5fdGhlblZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5l''@;'; put 'put ''ci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGhlblRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSk6dGhpcy5fZWxzZVZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWYmJih0aGlzLl9lbHNl''@;'; put 'put ''Vmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9lbHNlVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKX1zdGF0aWMgbmdJZlVzZUlmVHlwZUd1YXJkO3N0YXRpYyBuZ1RlbXBsYXRlR3VhcmRfbmdJZjtzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRH''@;'; put 'put ''dWFyZCh0LHIpe3JldHVybiEwfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKSh6ZShEcyksemUoRmMpKX07c3RhdGljIFx1MDI3NWRpcj0kcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ0lmIiwiIl1dLGlucHV0czp7bmdJZjoibmdJZiIsbmdJZlRoZW46''@;'; put 'put ''Im5nSWZUaGVuIixuZ0lmRWxzZToibmdJZkVsc2UifX0pfXJldHVybiBufSkoKTtjbGFzcyBZb3R7JGltcGxpY2l0PW51bGw7bmdJZj1udWxsfWZ1bmN0aW9uIGFfZShuLGUpe2lmKG4mJiFuLmNyZWF0ZUVtYmVkZGVkVmlldyl0aHJvdyBuZXcgV24oMjAyMCwhMSl9Y2xhc3MgcW5le192aWV3''@;'; put 'put ''Q29udGFpbmVyUmVmO190ZW1wbGF0ZVJlZjtfY3JlYXRlZD0hMTtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9ZSx0aGlzLl90ZW1wbGF0ZVJlZj10fWNyZWF0ZSgpe3RoaXMuX2NyZWF0ZWQ9ITAsdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZp''@;'; put 'put ''ZXcodGhpcy5fdGVtcGxhdGVSZWYpfWRlc3Ryb3koKXt0aGlzLl9jcmVhdGVkPSExLHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKX1lbmZvcmNlU3RhdGUoZSl7ZSYmIXRoaXMuX2NyZWF0ZWQ/dGhpcy5jcmVhdGUoKTohZSYmdGhpcy5fY3JlYXRlZCYmdGhpcy5kZXN0cm95KCl9fWxl''@;'; put 'put ''dCBBRT0oKCk9PntjbGFzcyBue19kZWZhdWx0Vmlld3M9W107X2RlZmF1bHRVc2VkPSExO19jYXNlQ291bnQ9MDtfbGFzdENhc2VDaGVja0luZGV4PTA7X2xhc3RDYXNlc01hdGNoZWQ9ITE7X25nU3dpdGNoO3NldCBuZ1N3aXRjaCh0KXt0aGlzLl9uZ1N3aXRjaD10LDA9PT10aGlzLl9jYXNl''@;'; put 'put ''Q291bnQmJnRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcyghMCl9X2FkZENhc2UoKXtyZXR1cm4gdGhpcy5fY2FzZUNvdW50Kyt9X2FkZERlZmF1bHQodCl7dGhpcy5fZGVmYXVsdFZpZXdzLnB1c2godCl9X21hdGNoQ2FzZSh0KXtjb25zdCByPXQ9PT10aGlzLl9uZ1N3aXRjaDtyZXR1cm4gdGhp''@;'; put 'put ''cy5fbGFzdENhc2VzTWF0Y2hlZHx8PXIsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4KyssdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PT09dGhpcy5fY2FzZUNvdW50JiYodGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCF0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkKSx0aGlzLl9sYXN0Q2FzZUNoZWNr''@;'; put 'put ''SW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExKSxyfV91cGRhdGVEZWZhdWx0Q2FzZXModCl7aWYodGhpcy5fZGVmYXVsdFZpZXdzLmxlbmd0aD4wJiZ0IT09dGhpcy5fZGVmYXVsdFVzZWQpe3RoaXMuX2RlZmF1bHRVc2VkPXQ7Zm9yKGNvbnN0IHIgb2YgdGhpcy5fZGVmYXVsdFZp''@;'; put 'put ''ZXdzKXIuZW5mb3JjZVN0YXRlKHQpfX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2giLCIiXV0saW5wdXRzOntuZ1N3aXRjaDoibmdTd2l0Y2gifX0pfXJldHVy''@;'; put 'put ''biBufSkoKSxTVT0oKCk9PntjbGFzcyBue25nU3dpdGNoO192aWV3O25nU3dpdGNoQ2FzZTtjb25zdHJ1Y3Rvcih0LHIsaSl7dGhpcy5uZ1N3aXRjaD1pLGkuX2FkZENhc2UoKSx0aGlzLl92aWV3PW5ldyBxbmUodCxyKX1uZ0RvQ2hlY2soKXt0aGlzLl92aWV3LmVuZm9yY2VTdGF0ZSh0aGlz''@;'; put 'put ''Lm5nU3dpdGNoLl9tYXRjaENhc2UodGhpcy5uZ1N3aXRjaENhc2UpKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoemUoRHMpLHplKEZjKSx6ZShBRSw5KSl9O3N0YXRpYyBcdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2hD''@;'; put 'put ''YXNlIiwiIl1dLGlucHV0czp7bmdTd2l0Y2hDYXNlOiJuZ1N3aXRjaENhc2UifX0pfXJldHVybiBufSkoKSxsX2U9KCgpPT57Y2xhc3MgbntfbmdFbDtfZGlmZmVycztfcmVuZGVyZXI7X25nU3R5bGU9bnVsbDtfZGlmZmVyPW51bGw7Y29uc3RydWN0b3IodCxyLGkpe3RoaXMuX25nRWw9dCx0''@;'; put 'put ''aGlzLl9kaWZmZXJzPXIsdGhpcy5fcmVuZGVyZXI9aX1zZXQgbmdTdHlsZSh0KXt0aGlzLl9uZ1N0eWxlPXQsIXRoaXMuX2RpZmZlciYmdCYmKHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQodCkuY3JlYXRlKCkpfW5nRG9DaGVjaygpe2lmKHRoaXMuX2RpZmZlcil7Y29uc3QgdD10''@;'; put 'put ''aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ1N0eWxlKTt0JiZ0aGlzLl9hcHBseUNoYW5nZXModCl9fV9zZXRTdHlsZSh0LHIpe2NvbnN0W2ksb109dC5zcGxpdCgiLiIpLGE9LTE9PT1pLmluZGV4T2YoIi0iKT92b2lkIDA6QTUuRGFzaENhc2U7bnVsbCE9cj90aGlzLl9yZW5kZXJlci5zZXRT''@;'; put 'put ''dHlsZSh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsaSxvP2Ake3J9JHtvfWA6cixhKTp0aGlzLl9yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsaSxhKX1fYXBwbHlDaGFuZ2VzKHQpe3QuZm9yRWFjaFJlbW92ZWRJdGVtKHI9PnRoaXMuX3NldFN0eWxlKHIu''@;'; put 'put ''a2V5LG51bGwpKSx0LmZvckVhY2hBZGRlZEl0ZW0ocj0+dGhpcy5fc2V0U3R5bGUoci5rZXksci5jdXJyZW50VmFsdWUpKSx0LmZvckVhY2hDaGFuZ2VkSXRlbShyPT50aGlzLl9zZXRTdHlsZShyLmtleSxyLmN1cnJlbnRWYWx1ZSkpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0''@;'; put 'put ''dXJuIG5ldyhyfHxuKSh6ZShubyksemUoZEkpLHplKE50KSl9O3N0YXRpYyBcdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdTdHlsZSIsIiJdXSxpbnB1dHM6e25nU3R5bGU6Im5nU3R5bGUifX0pfXJldHVybiBufSkoKSxJZj0oKCk9PntjbGFzcyBue192aWV3Q29udGFp''@;'; put 'put ''bmVyUmVmO192aWV3UmVmPW51bGw7bmdUZW1wbGF0ZU91dGxldENvbnRleHQ9bnVsbDtuZ1RlbXBsYXRlT3V0bGV0PW51bGw7bmdUZW1wbGF0ZU91dGxldEluamVjdG9yPW51bGw7Y29uc3RydWN0b3IodCl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj10fW5nT25DaGFuZ2VzKHQpe2lmKHRoaXMu''@;'; put 'put ''X3Nob3VsZFJlY3JlYXRlVmlldyh0KSl7Y29uc3Qgcj10aGlzLl92aWV3Q29udGFpbmVyUmVmO2lmKHRoaXMuX3ZpZXdSZWYmJnIucmVtb3ZlKHIuaW5kZXhPZih0aGlzLl92aWV3UmVmKSksIXRoaXMubmdUZW1wbGF0ZU91dGxldClyZXR1cm4gdm9pZCh0aGlzLl92aWV3UmVmPW51bGwpO2Nv''@;'; put 'put ''bnN0IGk9dGhpcy5fY3JlYXRlQ29udGV4dEZvcndhcmRQcm94eSgpO3RoaXMuX3ZpZXdSZWY9ci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5uZ1RlbXBsYXRlT3V0bGV0LGkse2luamVjdG9yOnRoaXMubmdUZW1wbGF0ZU91dGxldEluamVjdG9yPz92b2lkIDB9KX19X3Nob3VsZFJlY3JlYXRl''@;'; put 'put ''Vmlldyh0KXtyZXR1cm4hIXQubmdUZW1wbGF0ZU91dGxldHx8ISF0Lm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcn1fY3JlYXRlQ29udGV4dEZvcndhcmRQcm94eSgpe3JldHVybiBuZXcgUHJveHkoe30se3NldDoodCxyLGkpPT4hIXRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQmJlJlZmxl''@;'; put 'put ''Y3Quc2V0KHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQscixpKSxnZXQ6KHQscixpKT0+e2lmKHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQpcmV0dXJuIFJlZmxlY3QuZ2V0KHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQscixpKX19KX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKHIpe3JldHVybiBuZXcocnx8bikoemUoRHMpKX07c3RhdGljIFx1MDI3NWRpcj0kcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ1RlbXBsYXRlT3V0bGV0IiwiIl1dLGlucHV0czp7bmdUZW1wbGF0ZU91dGxldENvbnRleHQ6Im5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixuZ1RlbXBs''@;'; put 'put ''YXRlT3V0bGV0OiJuZ1RlbXBsYXRlT3V0bGV0IixuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3I6Im5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJ9LGZlYXR1cmVzOltpdV19KX1yZXR1cm4gbn0pKCk7Y2xhc3MgJG90e2NyZWF0ZVN1YnNjcmlwdGlvbihlLHQscil7cmV0dXJuIE51KCgpPT5lLnN1''@;'; put 'put ''YnNjcmliZSh7bmV4dDp0LGVycm9yOnJ9KSl9ZGlzcG9zZShlKXtOdSgoKT0+ZS51bnN1YnNjcmliZSgpKX19Y2xhc3MgcW90e2NyZWF0ZVN1YnNjcmlwdGlvbihlLHQscil7cmV0dXJuIGUudGhlbihpPT50Py4oaSksaT0+cj8uKGkpKSx7dW5zdWJzY3JpYmU6KCk9Pnt0PW51bGwscj1udWxs''@;'; put 'put ''fX19ZGlzcG9zZShlKXtlLnVuc3Vic2NyaWJlKCl9fWNvbnN0IEtvdD1uZXcgcW90LFhvdD1uZXcgJG90O2xldCBtST0oKCk9PntjbGFzcyBue19yZWY7X2xhdGVzdFZhbHVlPW51bGw7bWFya0ZvckNoZWNrT25WYWx1ZVVwZGF0ZT0hMDtfc3Vic2NyaXB0aW9uPW51bGw7X29iaj1udWxsO19z''@;'; put 'put ''dHJhdGVneT1udWxsO2FwcGxpY2F0aW9uRXJyb3JIYW5kbGVyPXNuKF9wKTtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9yZWY9dH1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbiYmdGhpcy5fZGlzcG9zZSgpLHRoaXMuX3JlZj1udWxsfXRyYW5zZm9ybSh0KXtpZighdGhpcy5fb2JqKXtp''@;'; put 'put ''Zih0KXRyeXt0aGlzLm1hcmtGb3JDaGVja09uVmFsdWVVcGRhdGU9ITEsdGhpcy5fc3Vic2NyaWJlKHQpfWZpbmFsbHl7dGhpcy5tYXJrRm9yQ2hlY2tPblZhbHVlVXBkYXRlPSEwfXJldHVybiB0aGlzLl9sYXRlc3RWYWx1ZX1yZXR1cm4gdCE9PXRoaXMuX29iaj8odGhpcy5fZGlzcG9zZSgp''@;'; put 'put ''LHRoaXMudHJhbnNmb3JtKHQpKTp0aGlzLl9sYXRlc3RWYWx1ZX1fc3Vic2NyaWJlKHQpe3RoaXMuX29iaj10LHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KHQpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24odCxyPT50aGlz''@;'; put 'put ''Ll91cGRhdGVMYXRlc3RWYWx1ZSh0LHIpLHI9PnRoaXMuYXBwbGljYXRpb25FcnJvckhhbmRsZXIocikpfV9zZWxlY3RTdHJhdGVneSh0KXtpZihaUih0KSlyZXR1cm4gS290O2lmKGg4ZSh0KSlyZXR1cm4gWG90O3Rocm93IGZ1bmN0aW9uIGk0KG4sZSl7cmV0dXJuIG5ldyBXbigyMTAwLCEx''@;'; put 'put ''KX0oKX1fZGlzcG9zZSgpe3RoaXMuX3N0cmF0ZWd5LmRpc3Bvc2UodGhpcy5fc3Vic2NyaXB0aW9uKSx0aGlzLl9sYXRlc3RWYWx1ZT1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbj1udWxsLHRoaXMuX29iaj1udWxsfV91cGRhdGVMYXRlc3RWYWx1ZSh0LHIpe3Q9PT10aGlzLl9vYmomJih0aGlz''@;'; put 'put ''Ll9sYXRlc3RWYWx1ZT1yLHRoaXMubWFya0ZvckNoZWNrT25WYWx1ZVVwZGF0ZSYmdGhpcy5fcmVmPy5tYXJrRm9yQ2hlY2soKSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKHplKFVsLDE2KSl9O3N0YXRpYyBcdTAyNzVwaXBlPXVoKHtuYW1lOiJhc3lu''@;'; put 'put ''YyIsdHlwZTpuLHB1cmU6ITF9KX1yZXR1cm4gbn0pKCksS25lPSgoKT0+e2NsYXNzIG57dHJhbnNmb3JtKHQpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0LG51bGwsMil9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1cGlwZT11aCh7''@;'; put 'put ''bmFtZToianNvbiIsdHlwZTpuLHB1cmU6ITF9KX1yZXR1cm4gbn0pKCksRVU9KCgpPT57Y2xhc3MgbntkaWZmZXJzO2NvbnN0cnVjdG9yKHQpe3RoaXMuZGlmZmVycz10fWRpZmZlcjtrZXlWYWx1ZXM9W107Y29tcGFyZUZuPWNfZTt0cmFuc2Zvcm0odCxyPWNfZSl7aWYoIXR8fCEodCBpbnN0''@;'; put 'put ''YW5jZW9mIE1hcCkmJiJvYmplY3QiIT10eXBlb2YgdClyZXR1cm4gbnVsbDt0aGlzLmRpZmZlcj8/PXRoaXMuZGlmZmVycy5maW5kKHQpLmNyZWF0ZSgpO2NvbnN0IGk9dGhpcy5kaWZmZXIuZGlmZih0KSxvPXIhPT10aGlzLmNvbXBhcmVGbjtyZXR1cm4gaSYmKHRoaXMua2V5VmFsdWVzPVtd''@;'; put 'put ''LGkuZm9yRWFjaEl0ZW0oYT0+e3RoaXMua2V5VmFsdWVzLnB1c2goZnVuY3Rpb24gY2F0KG4sZSl7cmV0dXJue2tleTpuLHZhbHVlOmV9fShhLmtleSxhLmN1cnJlbnRWYWx1ZSkpfSkpLChpfHxvKSYmKHImJnRoaXMua2V5VmFsdWVzLnNvcnQociksdGhpcy5jb21wYXJlRm49ciksdGhpcy5r''@;'; put 'put ''ZXlWYWx1ZXN9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKHplKGRJLDE2KSl9O3N0YXRpYyBcdTAyNzVwaXBlPXVoKHtuYW1lOiJrZXl2YWx1ZSIsdHlwZTpuLHB1cmU6ITF9KX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gY19lKG4sZSl7Y29uc3QgdD1uLmtl''@;'; put 'put ''eSxyPWUua2V5O2lmKHQ9PT1yKXJldHVybiAwO2lmKG51bGw9PXQpcmV0dXJuIDE7aWYobnVsbD09cilyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIHQmJiJzdHJpbmciPT10eXBlb2YgcilyZXR1cm4gdDxyPy0xOjE7aWYoIm51bWJlciI9PXR5cGVvZiB0JiYibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IHIpcmV0dXJuIHQtcjtpZigiYm9vbGVhbiI9PXR5cGVvZiB0JiYiYm9vbGVhbiI9PXR5cGVvZiByKXJldHVybiB0PHI/LTE6MTtjb25zdCBpPVN0cmluZyh0KSxvPVN0cmluZyhyKTtyZXR1cm4gaT09bz8wOmk8bz8tMToxfWxldCBxbz0oKCk9PntjbGFzcyBue3N0YXRpYyBcdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NW1vZD1HaSh7dHlwZTpufSk7c3RhdGljIFx1MDI3NWluaj1taSh7fSl9cmV0dXJuIG59KSgpO2NsYXNzIHVfZXtfZG9jO2NvbnN0cnVjdG9yKGUpe3RoaXMuX2RvYz1lfW1hbmFnZXJ9bGV0IEpuZT0oKCk9PntjbGFz''@;'; put 'put ''cyBuIGV4dGVuZHMgdV9le2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfXN1cHBvcnRzKHQpe3JldHVybiEwfWFkZEV2ZW50TGlzdGVuZXIodCxyLGksbyl7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihyLGksbyksKCk9PnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LHIsaSxvKX1yZW1vdmVF''@;'; put 'put ''dmVudExpc3RlbmVyKHQscixpLG8pe3JldHVybiB0LnJlbW92ZUV2ZW50TGlzdGVuZXIocixpLG8pfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShvcihUbCkpfTtzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSl9''@;'; put 'put ''cmV0dXJuIG59KSgpO2NvbnN0IGVyZT1uZXcgRXIoIiIpO2xldCBkX2U9KCgpPT57Y2xhc3Mgbntfem9uZTtfcGx1Z2lucztfZXZlbnROYW1lVG9QbHVnaW49bmV3IE1hcDtjb25zdHJ1Y3Rvcih0LHIpe3RoaXMuX3pvbmU9cix0LmZvckVhY2goYT0+e2EubWFuYWdlcj10aGlzfSk7Y29uc3Qg''@;'; put 'put ''aT10LmZpbHRlcihhPT4hKGEgaW5zdGFuY2VvZiBKbmUpKTt0aGlzLl9wbHVnaW5zPWkuc2xpY2UoKS5yZXZlcnNlKCk7Y29uc3Qgbz10LmZpbmQoYT0+YSBpbnN0YW5jZW9mIEpuZSk7byYmdGhpcy5fcGx1Z2lucy5wdXNoKG8pfWFkZEV2ZW50TGlzdGVuZXIodCxyLGksbyl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2ZpbmRQbHVnaW5Gb3IocikuYWRkRXZlbnRMaXN0ZW5lcih0LHIsaSxvKX1nZXRab25lKCl7cmV0dXJuIHRoaXMuX3pvbmV9X2ZpbmRQbHVnaW5Gb3IodCl7bGV0IHI9dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uZ2V0KHQpO2lmKHIpcmV0dXJuIHI7aWYocj10aGlzLl9wbHVnaW5zLmZp''@;'; put 'put ''bmQobz0+by5zdXBwb3J0cyh0KSksIXIpdGhyb3cgbmV3IFduKDUxMDEsITEpO3JldHVybiB0aGlzLl9ldmVudE5hbWVUb1BsdWdpbi5zZXQodCxyKSxyfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShvcihlcmUpLG9yKGdhKSl9O3N0YXRpYyBcdTAyNzVw''@;'; put 'put ''cm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KX1yZXR1cm4gbn0pKCk7Y29uc3QgdHJlPSJuZy1hcHAtaWQiO2Z1bmN0aW9uIGhfZShuKXtmb3IoY29uc3QgZSBvZiBuKWUucmVtb3ZlKCl9ZnVuY3Rpb24gZl9lKG4sZSl7Y29uc3QgdD1lLmNyZWF0ZUVsZW1lbnQoInN0eWxl''@;'; put 'put ''Iik7cmV0dXJuIHQudGV4dENvbnRlbnQ9bix0fWZ1bmN0aW9uIG5yZShuLGUpe2NvbnN0IHQ9ZS5jcmVhdGVFbGVtZW50KCJsaW5rIik7cmV0dXJuIHQuc2V0QXR0cmlidXRlKCJyZWwiLCJzdHlsZXNoZWV0IiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLG4pLHR9bGV0IHBfZT0oKCk9PntjbGFz''@;'; put 'put ''cyBue2RvYzthcHBJZDtub25jZTtpbmxpbmU9bmV3IE1hcDtleHRlcm5hbD1uZXcgTWFwO2hvc3RzPW5ldyBTZXQ7Y29uc3RydWN0b3IodCxyLGksbz17fSl7dGhpcy5kb2M9dCx0aGlzLmFwcElkPXIsdGhpcy5ub25jZT1pLGZ1bmN0aW9uIGZhdChuLGUsdCxyKXtjb25zdCBpPW4uaGVhZD8u''@;'; put 'put ''cXVlcnlTZWxlY3RvckFsbChgc3R5bGVbJHt0cmV9PSIke2V9Il0sbGlua1ske3RyZX09IiR7ZX0iXWApO2lmKGkpZm9yKGNvbnN0IG8gb2YgaSlvLnJlbW92ZUF0dHJpYnV0ZSh0cmUpLG8gaW5zdGFuY2VvZiBIVE1MTGlua0VsZW1lbnQ/ci5zZXQoby5ocmVmLnNsaWNlKG8uaHJlZi5sYXN0''@;'; put 'put ''SW5kZXhPZigiLyIpKzEpLHt1c2FnZTowLGVsZW1lbnRzOltvXX0pOm8udGV4dENvbnRlbnQmJnQuc2V0KG8udGV4dENvbnRlbnQse3VzYWdlOjAsZWxlbWVudHM6W29dfSl9KHQscix0aGlzLmlubGluZSx0aGlzLmV4dGVybmFsKSx0aGlzLmhvc3RzLmFkZCh0LmhlYWQpfWFkZFN0eWxlcyh0''@;'; put 'put ''LHIpe2Zvcihjb25zdCBpIG9mIHQpdGhpcy5hZGRVc2FnZShpLHRoaXMuaW5saW5lLGZfZSk7cj8uZm9yRWFjaChpPT50aGlzLmFkZFVzYWdlKGksdGhpcy5leHRlcm5hbCxucmUpKX1yZW1vdmVTdHlsZXModCxyKXtmb3IoY29uc3QgaSBvZiB0KXRoaXMucmVtb3ZlVXNhZ2UoaSx0aGlzLmlu''@;'; put 'put ''bGluZSk7cj8uZm9yRWFjaChpPT50aGlzLnJlbW92ZVVzYWdlKGksdGhpcy5leHRlcm5hbCkpfWFkZFVzYWdlKHQscixpKXtjb25zdCBvPXIuZ2V0KHQpO28/by51c2FnZSsrOnIuc2V0KHQse3VzYWdlOjEsZWxlbWVudHM6Wy4uLnRoaXMuaG9zdHNdLm1hcChhPT50aGlzLmFkZEVsZW1lbnQo''@;'; put 'put ''YSxpKHQsdGhpcy5kb2MpKSl9KX1yZW1vdmVVc2FnZSh0LHIpe2NvbnN0IGk9ci5nZXQodCk7aSYmKGkudXNhZ2UtLSxpLnVzYWdlPD0wJiYoaF9lKGkuZWxlbWVudHMpLHIuZGVsZXRlKHQpKSl9bmdPbkRlc3Ryb3koKXtmb3IoY29uc3RbLHtlbGVtZW50czp0fV1vZlsuLi50aGlzLmlubGlu''@;'; put 'put ''ZSwuLi50aGlzLmV4dGVybmFsXSloX2UodCk7dGhpcy5ob3N0cy5jbGVhcigpfWFkZEhvc3QodCl7dGhpcy5ob3N0cy5hZGQodCk7Zm9yKGNvbnN0W3Ise2VsZW1lbnRzOml9XW9mIHRoaXMuaW5saW5lKWkucHVzaCh0aGlzLmFkZEVsZW1lbnQodCxmX2Uocix0aGlzLmRvYykpKTtmb3IoY29u''@;'; put 'put ''c3Rbcix7ZWxlbWVudHM6aX1db2YgdGhpcy5leHRlcm5hbClpLnB1c2godGhpcy5hZGRFbGVtZW50KHQsbnJlKHIsdGhpcy5kb2MpKSl9cmVtb3ZlSG9zdCh0KXt0aGlzLmhvc3RzLmRlbGV0ZSh0KX1hZGRFbGVtZW50KHQscil7cmV0dXJuIHRoaXMubm9uY2UmJnIuc2V0QXR0cmlidXRlKCJu''@;'; put 'put ''b25jZSIsdGhpcy5ub25jZSksdC5hcHBlbmRDaGlsZChyKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikob3IoVGwpLG9yKEw5KSxvcihjViw4KSxvcihsZCkpfTtzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSl9''@;'; put 'put ''cmV0dXJuIG59KSgpO2NvbnN0IHJyZT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25h''@;'; put 'put ''bWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIixtYXRoOiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIn0saXJlPS8lQ09NUCUvZyx5YXQ9bmV3IEVyKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4hMH0pO2Z1bmN0aW9uIG1f''@;'; put 'put ''ZShuLGUpe3JldHVybiBlLm1hcCh0PT50LnJlcGxhY2UoaXJlLG4pKX1sZXQgb3JlPSgoKT0+e2NsYXNzIG57ZXZlbnRNYW5hZ2VyO3NoYXJlZFN0eWxlc0hvc3Q7YXBwSWQ7cmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveTtkb2M7bmdab25lO25vbmNlO3RyYWNpbmdTZXJ2aWNlO3JlbmRlcmVy''@;'; put 'put ''QnlDb21wSWQ9bmV3IE1hcDtkZWZhdWx0UmVuZGVyZXI7cGxhdGZvcm1Jc1NlcnZlcjtjb25zdHJ1Y3Rvcih0LHIsaSxvLGEsbCx1PW51bGwsZz1udWxsKXt0aGlzLmV2ZW50TWFuYWdlcj10LHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1yLHRoaXMuYXBwSWQ9aSx0aGlzLnJlbW92ZVN0eWxlc09u''@;'; put 'put ''Q29tcERlc3Ryb3k9byx0aGlzLmRvYz1hLHRoaXMubmdab25lPWwsdGhpcy5ub25jZT11LHRoaXMudHJhY2luZ1NlcnZpY2U9Zyx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXI9ITEsdGhpcy5kZWZhdWx0UmVuZGVyZXI9bmV3IGFyZSh0LGEsbCx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXIsdGhpcy50cmFj''@;'; put 'put ''aW5nU2VydmljZSl9Y3JlYXRlUmVuZGVyZXIodCxyKXtpZighdHx8IXIpcmV0dXJuIHRoaXMuZGVmYXVsdFJlbmRlcmVyO2NvbnN0IGk9dGhpcy5nZXRPckNyZWF0ZVJlbmRlcmVyKHQscik7cmV0dXJuIGkgaW5zdGFuY2VvZiBfX2U/aS5hcHBseVRvSG9zdCh0KTppIGluc3RhbmNlb2Ygc3Jl''@;'; put 'put ''JiZpLmFwcGx5U3R5bGVzKCksaX1nZXRPckNyZWF0ZVJlbmRlcmVyKHQscil7Y29uc3QgaT10aGlzLnJlbmRlcmVyQnlDb21wSWQ7bGV0IG89aS5nZXQoci5pZCk7aWYoIW8pe2NvbnN0IGE9dGhpcy5kb2MsbD10aGlzLm5nWm9uZSx1PXRoaXMuZXZlbnRNYW5hZ2VyLGc9dGhpcy5zaGFyZWRT''@;'; put 'put ''dHlsZXNIb3N0LEU9dGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95LE89dGhpcy5wbGF0Zm9ybUlzU2VydmVyLFo9dGhpcy50cmFjaW5nU2VydmljZTtzd2l0Y2goci5lbmNhcHN1bGF0aW9uKXtjYXNlIFFtLkVtdWxhdGVkOm89bmV3IF9fZSh1LGcscix0aGlzLmFwcElkLEUsYSxsLE8s''@;'; put 'put ''Wik7YnJlYWs7Y2FzZSBRbS5TaGFkb3dEb206cmV0dXJuIG5ldyBTYXQodSxnLHQscixhLGwsdGhpcy5ub25jZSxPLFopO2RlZmF1bHQ6bz1uZXcgc3JlKHUsZyxyLEUsYSxsLE8sWil9aS5zZXQoci5pZCxvKX1yZXR1cm4gb31uZ09uRGVzdHJveSgpe3RoaXMucmVuZGVyZXJCeUNvbXBJZC5j''@;'; put 'put ''bGVhcigpfWNvbXBvbmVudFJlcGxhY2VkKHQpe3RoaXMucmVuZGVyZXJCeUNvbXBJZC5kZWxldGUodCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKG9yKGRfZSksb3IocF9lKSxvcihMOSksb3IoeWF0KSxvcihUbCksb3IoZ2EpLG9yKGNWKSxvcih6OSw4''@;'; put 'put ''KSl9O3N0YXRpYyBcdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KX1yZXR1cm4gbn0pKCk7Y2xhc3MgYXJle2V2ZW50TWFuYWdlcjtkb2M7bmdab25lO3BsYXRmb3JtSXNTZXJ2ZXI7dHJhY2luZ1NlcnZpY2U7ZGF0YT1PYmplY3QuY3JlYXRlKG51bGwpO3Rocm93''@;'; put 'put ''T25TeW50aGV0aWNQcm9wcz0hMDtjb25zdHJ1Y3RvcihlLHQscixpLG8pe3RoaXMuZXZlbnRNYW5hZ2VyPWUsdGhpcy5kb2M9dCx0aGlzLm5nWm9uZT1yLHRoaXMucGxhdGZvcm1Jc1NlcnZlcj1pLHRoaXMudHJhY2luZ1NlcnZpY2U9b31kZXN0cm95KCl7fWRlc3Ryb3lOb2RlPW51bGw7Y3Jl''@;'; put 'put ''YXRlRWxlbWVudChlLHQpe3JldHVybiB0P3RoaXMuZG9jLmNyZWF0ZUVsZW1lbnROUyhycmVbdF18fHQsZSk6dGhpcy5kb2MuY3JlYXRlRWxlbWVudChlKX1jcmVhdGVDb21tZW50KGUpe3JldHVybiB0aGlzLmRvYy5jcmVhdGVDb21tZW50KGUpfWNyZWF0ZVRleHQoZSl7cmV0dXJuIHRoaXMu''@;'; put 'put ''ZG9jLmNyZWF0ZVRleHROb2RlKGUpfWFwcGVuZENoaWxkKGUsdCl7KHZfZShlKT9lLmNvbnRlbnQ6ZSkuYXBwZW5kQ2hpbGQodCl9aW5zZXJ0QmVmb3JlKGUsdCxyKXtlJiYodl9lKGUpP2UuY29udGVudDplKS5pbnNlcnRCZWZvcmUodCxyKX1yZW1vdmVDaGlsZChlLHQpe3QucmVtb3ZlKCl9''@;'; put 'put ''c2VsZWN0Um9vdEVsZW1lbnQoZSx0KXtsZXQgcj0ic3RyaW5nIj09dHlwZW9mIGU/dGhpcy5kb2MucXVlcnlTZWxlY3RvcihlKTplO2lmKCFyKXRocm93IG5ldyBXbigtNTEwNCwhMSk7cmV0dXJuIHR8fChyLnRleHRDb250ZW50PSIiKSxyfXBhcmVudE5vZGUoZSl7cmV0dXJuIGUucGFyZW50''@;'; put 'put ''Tm9kZX1uZXh0U2libGluZyhlKXtyZXR1cm4gZS5uZXh0U2libGluZ31zZXRBdHRyaWJ1dGUoZSx0LHIsaSl7aWYoaSl7dD1pKyI6Iit0O2NvbnN0IG89cnJlW2ldO28/ZS5zZXRBdHRyaWJ1dGVOUyhvLHQscik6ZS5zZXRBdHRyaWJ1dGUodCxyKX1lbHNlIGUuc2V0QXR0cmlidXRlKHQscil9''@;'; put 'put ''cmVtb3ZlQXR0cmlidXRlKGUsdCxyKXtpZihyKXtjb25zdCBpPXJyZVtyXTtpP2UucmVtb3ZlQXR0cmlidXRlTlMoaSx0KTplLnJlbW92ZUF0dHJpYnV0ZShgJHtyfToke3R9YCl9ZWxzZSBlLnJlbW92ZUF0dHJpYnV0ZSh0KX1hZGRDbGFzcyhlLHQpe2UuY2xhc3NMaXN0LmFkZCh0KX1yZW1v''@;'; put 'put ''dmVDbGFzcyhlLHQpe2UuY2xhc3NMaXN0LnJlbW92ZSh0KX1zZXRTdHlsZShlLHQscixpKXtpJihBNS5EYXNoQ2FzZXxBNS5JbXBvcnRhbnQpP2Uuc3R5bGUuc2V0UHJvcGVydHkodCxyLGkmQTUuSW1wb3J0YW50PyJpbXBvcnRhbnQiOiIiKTplLnN0eWxlW3RdPXJ9cmVtb3ZlU3R5bGUoZSx0''@;'; put 'put ''LHIpe3ImQTUuRGFzaENhc2U/ZS5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTplLnN0eWxlW3RdPSIifXNldFByb3BlcnR5KGUsdCxyKXtudWxsIT1lJiYoZVt0XT1yKX1zZXRWYWx1ZShlLHQpe2Uubm9kZVZhbHVlPXR9bGlzdGVuKGUsdCxyLGkpe2lmKCJzdHJpbmciPT10eXBlb2YgZSYmIShl''@;'; put 'put ''PWw1KCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5kb2MsZSkpKXRocm93IG5ldyBXbig1MTAyLCExKTtsZXQgbz10aGlzLmRlY29yYXRlUHJldmVudERlZmF1bHQocik7cmV0dXJuIHRoaXMudHJhY2luZ1NlcnZpY2U/LndyYXBFdmVudExpc3RlbmVyJiYobz10aGlzLnRyYWNpbmdTZXJ2''@;'; put 'put ''aWNlLndyYXBFdmVudExpc3RlbmVyKGUsdCxvKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihlLHQsbyxpKX1kZWNvcmF0ZVByZXZlbnREZWZhdWx0KGUpe3JldHVybiB0PT57aWYoIl9fbmdVbndyYXBfXyI9PT10KXJldHVybiBlOyExPT09ZSh0KSYmdC5wcmV2ZW50RGVm''@;'; put 'put ''YXVsdCgpfX19ZnVuY3Rpb24gdl9lKG4pe3JldHVybiJURU1QTEFURSI9PT1uLnRhZ05hbWUmJnZvaWQgMCE9PW4uY29udGVudH1jbGFzcyBTYXQgZXh0ZW5kcyBhcmV7c2hhcmVkU3R5bGVzSG9zdDtob3N0RWw7c2hhZG93Um9vdDtjb25zdHJ1Y3RvcihlLHQscixpLG8sYSxsLHUsZyl7c3Vw''@;'; put 'put ''ZXIoZSxvLGEsdSxnKSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9dCx0aGlzLmhvc3RFbD1yLHRoaXMuc2hhZG93Um9vdD1yLmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiJ9KSx0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkSG9zdCh0aGlzLnNoYWRvd1Jvb3QpO2xldCBFPWkuc3R5bGVzO0U9bV9l''@;'; put 'put ''KGkuaWQsRSk7Zm9yKGNvbnN0IFogb2YgRSl7Y29uc3QgZWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtsJiZlZS5zZXRBdHRyaWJ1dGUoIm5vbmNlIixsKSxlZS50ZXh0Q29udGVudD1aLHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChlZSl9Y29uc3QgTz1pLmdldEV4dGVy''@;'; put 'put ''bmFsU3R5bGVzPy4oKTtpZihPKWZvcihjb25zdCBaIG9mIE8pe2NvbnN0IGVlPW5yZShaLG8pO2wmJmVlLnNldEF0dHJpYnV0ZSgibm9uY2UiLGwpLHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChlZSl9fW5vZGVPclNoYWRvd1Jvb3QoZSl7cmV0dXJuIGU9PT10aGlzLmhvc3RFbD90aGlz''@;'; put 'put ''LnNoYWRvd1Jvb3Q6ZX1hcHBlbmRDaGlsZChlLHQpe3JldHVybiBzdXBlci5hcHBlbmRDaGlsZCh0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSksdCl9aW5zZXJ0QmVmb3JlKGUsdCxyKXtyZXR1cm4gc3VwZXIuaW5zZXJ0QmVmb3JlKHRoaXMubm9kZU9yU2hhZG93Um9vdChlKSx0LHIpfXJlbW92''@;'; put 'put ''ZUNoaWxkKGUsdCl7cmV0dXJuIHN1cGVyLnJlbW92ZUNoaWxkKG51bGwsdCl9cGFyZW50Tm9kZShlKXtyZXR1cm4gdGhpcy5ub2RlT3JTaGFkb3dSb290KHN1cGVyLnBhcmVudE5vZGUodGhpcy5ub2RlT3JTaGFkb3dSb290KGUpKSl9ZGVzdHJveSgpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5y''@;'; put 'put ''ZW1vdmVIb3N0KHRoaXMuc2hhZG93Um9vdCl9fWNsYXNzIHNyZSBleHRlbmRzIGFyZXtzaGFyZWRTdHlsZXNIb3N0O3JlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3k7c3R5bGVzO3N0eWxlVXJscztjb25zdHJ1Y3RvcihlLHQscixpLG8sYSxsLHUsZyl7c3VwZXIoZSxvLGEsbCx1KSx0aGlzLnNo''@;'; put 'put ''YXJlZFN0eWxlc0hvc3Q9dCx0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3k9aTtsZXQgRT1yLnN0eWxlczt0aGlzLnN0eWxlcz1nP21fZShnLEUpOkUsdGhpcy5zdHlsZVVybHM9ci5nZXRFeHRlcm5hbFN0eWxlcz8uKGcpfWFwcGx5U3R5bGVzKCl7dGhpcy5zaGFyZWRTdHlsZXNIb3N0''@;'; put 'put ''LmFkZFN0eWxlcyh0aGlzLnN0eWxlcyx0aGlzLnN0eWxlVXJscyl9ZGVzdHJveSgpe3RoaXMucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveSYmMD09PWs1LnNpemUmJnRoaXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVTdHlsZXModGhpcy5zdHlsZXMsdGhpcy5zdHlsZVVybHMpfX1jbGFzcyBf''@;'; put 'put ''X2UgZXh0ZW5kcyBzcmV7Y29udGVudEF0dHI7aG9zdEF0dHI7Y29uc3RydWN0b3IoZSx0LHIsaSxvLGEsbCx1LGcpe2NvbnN0IEU9aSsiLSIrci5pZDtzdXBlcihlLHQscixvLGEsbCx1LGcsRSksdGhpcy5jb250ZW50QXR0cj1mdW5jdGlvbiBiYXQobil7cmV0dXJuIl9uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlIi5yZXBsYWNlKGlyZSxuKX0oRSksdGhpcy5ob3N0QXR0cj1mdW5jdGlvbiB3YXQobil7cmV0dXJuIl9uZ2hvc3QtJUNPTVAlIi5yZXBsYWNlKGlyZSxuKX0oRSl9YXBwbHlUb0hvc3QoZSl7dGhpcy5hcHBseVN0eWxlcygpLHRoaXMuc2V0QXR0cmlidXRlKGUsdGhpcy5ob3N0QXR0ciwi''@;'; put 'put ''Iil9Y3JlYXRlRWxlbWVudChlLHQpe2NvbnN0IHI9c3VwZXIuY3JlYXRlRWxlbWVudChlLHQpO3JldHVybiBzdXBlci5zZXRBdHRyaWJ1dGUocix0aGlzLmNvbnRlbnRBdHRyLCIiKSxyfX1jbGFzcyBscmUgZXh0ZW5kcyBUWHtzdXBwb3J0c0RPTUV2ZW50cz0hMDtzdGF0aWMgbWFrZUN1cnJl''@;'; put 'put ''bnQoKXshZnVuY3Rpb24gTVgobil7YUg/Pz1ufShuZXcgbHJlKX1vbkFuZENhbmNlbChlLHQscixpKXtyZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyKHQscixpKSwoKT0+e2UucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LHIsaSl9fWRpc3BhdGNoRXZlbnQoZSx0KXtlLmRpc3BhdGNoRXZlbnQodCl9''@;'; put 'put ''cmVtb3ZlKGUpe2UucmVtb3ZlKCl9Y3JlYXRlRWxlbWVudChlLHQpe3JldHVybih0PXR8fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnQoZSl9Y3JlYXRlSHRtbERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVu''@;'; put 'put ''dCgiZmFrZVRpdGxlIil9Z2V0RGVmYXVsdERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50fWlzRWxlbWVudE5vZGUoZSl7cmV0dXJuIGUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX1pc1NoYWRvd1Jvb3QoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50fWdldEds''@;'; put 'put ''b2JhbEV2ZW50VGFyZ2V0KGUsdCl7cmV0dXJuIndpbmRvdyI9PT10P3dpbmRvdzoiZG9jdW1lbnQiPT09dD9lOiJib2R5Ij09PXQ/ZS5ib2R5Om51bGx9Z2V0QmFzZUhyZWYoZSl7Y29uc3QgdD1mdW5jdGlvbiBFYXQoKXtyZXR1cm4gdkk9dkl8fGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3Rv''@;'; put 'put ''cigiYmFzZSIpLHZJP3ZJLmdldEF0dHJpYnV0ZSgiaHJlZiIpOm51bGx9KCk7cmV0dXJuIG51bGw9PXQ/bnVsbDpmdW5jdGlvbiBNYXQobil7cmV0dXJuIG5ldyBVUkwobixkb2N1bWVudC5iYXNlVVJJKS5wYXRobmFtZX0odCl9cmVzZXRCYXNlRWxlbWVudCgpe3ZJPW51bGx9Z2V0VXNlckFn''@;'; put 'put ''ZW50KCl7cmV0dXJuIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50fWdldENvb2tpZShlKXtyZXR1cm4gbXkoZG9jdW1lbnQuY29va2llLGUpfX1sZXQgdkk9bnVsbCx4YXQ9KCgpPT57Y2xhc3MgbntidWlsZCgpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9c3RhdGljIFx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSl9cmV0dXJuIG59KSgpO2NvbnN0IGJfZT1bImFsdCIsImNvbnRyb2wiLCJtZXRhIiwic2hpZnQiXSxBYXQ9eyJcYiI6IkJhY2tzcGFjZSIsIlx0Ijoi''@;'; put 'put ''VGFiIiwiXHg3ZiI6IkRlbGV0ZSIsIlx4MWIiOiJFc2NhcGUiLERlbDoiRGVsZXRlIixFc2M6IkVzY2FwZSIsTGVmdDoiQXJyb3dMZWZ0IixSaWdodDoiQXJyb3dSaWdodCIsVXA6IkFycm93VXAiLERvd246IkFycm93RG93biIsTWVudToiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9j''@;'; put 'put ''ayIsV2luOiJPUyJ9LGthdD17YWx0Om49Pm4uYWx0S2V5LGNvbnRyb2w6bj0+bi5jdHJsS2V5LG1ldGE6bj0+bi5tZXRhS2V5LHNoaWZ0Om49Pm4uc2hpZnRLZXl9O2xldCBSYXQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHVfZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1zdXBwb3J0cyh0KXty''@;'; put 'put ''ZXR1cm4gbnVsbCE9bi5wYXJzZUV2ZW50TmFtZSh0KX1hZGRFdmVudExpc3RlbmVyKHQscixpLG8pe2NvbnN0IGE9bi5wYXJzZUV2ZW50TmFtZShyKSxsPW4uZXZlbnRDYWxsYmFjayhhLmZ1bGxLZXksaSx0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpKTtyZXR1cm4gdGhpcy5tYW5hZ2VyLmdldFpv''@;'; put 'put ''bmUoKS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bDUoKS5vbkFuZENhbmNlbCh0LGEuZG9tRXZlbnROYW1lLGwsbykpfXN0YXRpYyBwYXJzZUV2ZW50TmFtZSh0KXtjb25zdCByPXQudG9Mb3dlckNhc2UoKS5zcGxpdCgiLiIpLGk9ci5zaGlmdCgpO2lmKDA9PT1yLmxlbmd0aHx8ImtleWRvd24i''@;'; put 'put ''IT09aSYmImtleXVwIiE9PWkpcmV0dXJuIG51bGw7Y29uc3Qgbz1uLl9ub3JtYWxpemVLZXkoci5wb3AoKSk7bGV0IGE9IiIsbD1yLmluZGV4T2YoImNvZGUiKTtpZihsPi0xJiYoci5zcGxpY2UobCwxKSxhPSJjb2RlLiIpLGJfZS5mb3JFYWNoKGc9Pntjb25zdCBFPXIuaW5kZXhPZihnKTtF''@;'; put 'put ''Pi0xJiYoci5zcGxpY2UoRSwxKSxhKz1nKyIuIil9KSxhKz1vLDAhPXIubGVuZ3RofHwwPT09by5sZW5ndGgpcmV0dXJuIG51bGw7Y29uc3QgdT17fTtyZXR1cm4gdS5kb21FdmVudE5hbWU9aSx1LmZ1bGxLZXk9YSx1fXN0YXRpYyBtYXRjaEV2ZW50RnVsbEtleUNvZGUodCxyKXtsZXQgaT1B''@;'; put 'put ''YXRbdC5rZXldfHx0LmtleSxvPSIiO3JldHVybiByLmluZGV4T2YoImNvZGUuIik+LTEmJihpPXQuY29kZSxvPSJjb2RlLiIpLCEobnVsbD09aXx8IWkpJiYoaT1pLnRvTG93ZXJDYXNlKCksIiAiPT09aT9pPSJzcGFjZSI6Ii4iPT09aSYmKGk9ImRvdCIpLGJfZS5mb3JFYWNoKGE9PnthIT09''@;'; put 'put ''aSYmKDAsa2F0W2FdKSh0KSYmKG8rPWErIi4iKX0pLG8rPWksbz09PXIpfXN0YXRpYyBldmVudENhbGxiYWNrKHQscixpKXtyZXR1cm4gbz0+e24ubWF0Y2hFdmVudEZ1bGxLZXlDb2RlKG8sdCkmJmkucnVuR3VhcmRlZCgoKT0+cihvKSl9fXN0YXRpYyBfbm9ybWFsaXplS2V5KHQpe3JldHVy''@;'; put 'put ''biJlc2MiPT09dD8iZXNjYXBlIjp0fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShvcihUbCkpfTtzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSl9cmV0dXJuIG59KSgpO2NvbnN0IENfZT1be3Byb3ZpZGU6bGQs''@;'; put 'put ''dXNlVmFsdWU6ImJyb3dzZXIifSx7cHJvdmlkZTpzVix1c2VWYWx1ZTpmdW5jdGlvbiBJYXQoKXtscmUubWFrZUN1cnJlbnQoKX0sbXVsdGk6ITB9LHtwcm92aWRlOlRsLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gTGF0KCl7cmV0dXJuIGZ1bmN0aW9uIE5RKG4pe3BrPW59KGRvY3VtZW50KSxkb2N1''@;'; put 'put ''bWVudH19XSxPYXQ9Z3ZlKG5pdCwiYnJvd3NlciIsQ19lKSxTX2U9W3twcm92aWRlOndqLHVzZUNsYXNzOmNsYXNzIFRhdHthZGRUb1dpbmRvdyhlKXtJbC5nZXRBbmd1bGFyVGVzdGFiaWxpdHk9KHIsaT0hMCk9Pntjb25zdCBvPWUuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHIsaSk7aWYobnVs''@;'; put 'put ''bD09byl0aHJvdyBuZXcgV24oNTEwMywhMSk7cmV0dXJuIG99LElsLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPSgpPT5lLmdldEFsbFRlc3RhYmlsaXRpZXMoKSxJbC5nZXRBbGxBbmd1bGFyUm9vdEVsZW1lbnRzPSgpPT5lLmdldEFsbFJvb3RFbGVtZW50cygpLElsLmZyYW1ld29ya1N0''@;'; put 'put ''YWJpbGl6ZXJzfHwoSWwuZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLElsLmZyYW1ld29ya1N0YWJpbGl6ZXJzLnB1c2gocj0+e2NvbnN0IGk9SWwuZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXMoKTtsZXQgbz1pLmxlbmd0aDtjb25zdCBhPWZ1bmN0aW9uKCl7by0tLDA9PW8mJnIoKX07aS5m''@;'; put 'put ''b3JFYWNoKGw9PntsLndoZW5TdGFibGUoYSl9KX0pfWZpbmRUZXN0YWJpbGl0eUluVHJlZShlLHQscil7cmV0dXJuIG51bGw9PXQ/bnVsbDplLmdldFRlc3RhYmlsaXR5KHQpPz8ocj9sNSgpLmlzU2hhZG93Um9vdCh0KT90aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZShlLHQuaG9zdCwhMCk6''@;'; put 'put ''dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUoZSx0LnBhcmVudEVsZW1lbnQsITApOm51bGwpfX19LHtwcm92aWRlOmQ4ZSx1c2VDbGFzczpJdGUsZGVwczpbZ2EsRHRlLHdqXX0se3Byb3ZpZGU6SXRlLHVzZUNsYXNzOkl0ZSxkZXBzOltnYSxEdGUsd2pdfV0sRV9lPVt7cHJvdmlkZTpvOCx1''@;'; put 'put ''c2VWYWx1ZToicm9vdCJ9LHtwcm92aWRlOmc4LHVzZUZhY3Rvcnk6ZnVuY3Rpb24gRGF0KCl7cmV0dXJuIG5ldyBnOH19LHtwcm92aWRlOmVyZSx1c2VDbGFzczpKbmUsbXVsdGk6ITAsZGVwczpbVGxdfSx7cHJvdmlkZTplcmUsdXNlQ2xhc3M6UmF0LG11bHRpOiEwLGRlcHM6W1RsXX0sb3Jl''@;'; put 'put ''LHBfZSxkX2Use3Byb3ZpZGU6Z2MsdXNlRXhpc3Rpbmc6b3JlfSx7cHJvdmlkZTpsSCx1c2VDbGFzczp4YXR9LFtdXTtsZXQgTV9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1''@;'; put 'put ''bW9kPUdpKHt0eXBlOm59KTtzdGF0aWMgXHUwMjc1aW5qPW1pKHtwcm92aWRlcnM6Wy4uLkVfZSwuLi5TX2VdLGltcG9ydHM6W3FvLHJpdF19KX1yZXR1cm4gbn0pKCk7aCgzNzQ4MiksaCg4MDY4NSk7Y29uc3QgY3JlPXtmaWx0ZXI6e2NvbHM6W10sdmFsczpbXSxncm91cExvZ2ljOiIiLHdo''@;'; put 'put ''ZXJlQ2xhdXNlOiIiLGxpYmRzOiIiLGNsYXVzZXM6W10scXVlcnk6W119fSxVbj17ZW1iZWQ6ITEsdmFBcHBseU1vZGU6ImxpdmUiLHJvb3RQYXJhbToiIixkY0xpYjoiIix4bG1hcHM6W10sZWRpdG9yOntzdGFydHVwU2V0OiExLHRyZWVOb2RlTGlicmFyaWVzOltdLGxpYnNBbmRUYWJsZXM6''@;'; put 'put ''W10sbGlicmFyaWVzOltdLGxpYnJhcnk6IiIsdGFibGU6IiIsZmlsdGVyOntjb2xzOltdLHZhbHM6W10sZ3JvdXBMb2dpYzoiIix3aGVyZUNsYXVzZToiIixsaWJkczoiIixjbGF1c2VzOltdLHF1ZXJ5OltdfX0sdmlld2VyOntzdGFydHVwU2V0OiExLHRhYmxlc1NldDohMSxsaWJyYXJpZXM6''@;'; put 'put ''W10sdGFibGVzOm51bGwsbGlicmFyeToiIix0YWJsZToiIixsaWJpbmZvOltdLGxpYnJhcmllc1NlYXJjaDoiIixmaWx0ZXI6e2NvbHM6W10sdmFsczpbXSxncm91cExvZ2ljOiIiLHdoZXJlQ2xhdXNlOiIiLGxpYmRzOiIiLGNsYXVzZXM6W10scXVlcnk6W119LGN1cnJlbnRTZWxlY3Rpb246''@;'; put 'put ''IiJ9LHZpZXdib3hlczp7fSxsaW5lYWdlOntsaWJyYXJ5TGlzdDpbXSx0YWJsZXNMaXN0OltdLGNvbHVtbnNMaXN0OltdLGxpYnJhcmllc1NlYXJjaDoiIixsaWI6IiIsdGFibGU6IiIsY29sdW1uOiIiLGN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlOiIiLGN1cnJlbnRMaW5lYWdlUGF0aENv''@;'; put 'put ''bHVtbjoiIn0sbWV0YWRhdGE6e21ldGFEYXRhTGlzdDp2b2lkIDAsbWV0YURhdGFTZWFyY2g6IiIsbWV0YU9iamVjdExpc3Q6W10sbWV0YU9iamVjdFNlYXJjaDoiIixtZXRhUmVwb3NpdG9yaWVzOnZvaWQgMCxzZWxlY3RlZFJlcG9zaXRvcnk6IiJ9LHZpeWFBcGk6e2NvbGxlY3Rpb25zTGlz''@;'; put 'put ''dDp2b2lkIDAsY29sbGVjdGlvbnNTZWFyY2g6IiIsc2VsZWN0ZWRSZXBvc2l0b3J5OiIifSx1c2VybmF2Ont1c2VyTGlzdDp2b2lkIDAsdXNlclNlYXJjaDoiIixncm91cExpc3Q6dm9pZCAwLGdyb3VwU2VhcmNoOiIiLHJvbGVMaXN0OnZvaWQgMCxyb2xlU2VhcmNoOiIifSxvcGVyYXRvcnM6''@;'; put 'put ''e251bU9wZXJhdG9yczpbIj0iLCI8IiwiPiIsIjw9IiwiPj0iLCJCRVRXRUVOIiwiSU4iLCJOT1QgSU4iLCJORSJdLGNoYXJPcGVyYXRvcnM6WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQ09OVEFJTlMiLCJJTiIsIk5PVCBJTiIsIk5FIl19LGhhbmRzb250YWJsZTp7ZGFya1RhYmxlSGVhZGVy''@;'; put 'put ''Q2xhc3M6ImRhcmtUSCJ9LHVzZXJEcm9wZG93bkNvbmZpZzp7Y2xvc2VPbkRlYnVnQ2xpY2s6ITF9fTt2YXIgRmF0PWgoOTc1ODYpLFNwPWgubihGYXQpO2Z1bmN0aW9uIFRfZShuLGUpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1''@;'; put 'put ''bWVudHMpfTtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbih0LHIsaSl7cmV0dXJuIGUu''@;'; put 'put ''YXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDQ6cmV0dXJuIGZ1bmN0aW9uKHQscixpLG8pe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA1OnJldHVybiBmdW5jdGlvbih0LHIsaSxvLGEpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA2OnJldHVy''@;'; put 'put ''biBmdW5jdGlvbih0LHIsaSxvLGEsbCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDc6cmV0dXJuIGZ1bmN0aW9uKHQscixpLG8sYSxsLHUpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA4OnJldHVybiBmdW5jdGlvbih0LHIsaSxvLGEsbCx1LGcp''@;'; put 'put ''e3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA5OnJldHVybiBmdW5jdGlvbih0LHIsaSxvLGEsbCx1LGcsRSl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDEwOnJldHVybiBmdW5jdGlvbih0LHIsaSxvLGEsbCx1LGcsRSxPKXtyZXR1cm4gZS5hcHBs''@;'; put 'put ''eSh0aGlzLGFyZ3VtZW50cyl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJGaXJzdCBhcmd1bWVudCB0byBfYXJpdHkgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIG5vIGdyZWF0ZXIgdGhhbiB0ZW4iKX19ZnVuY3Rpb24gc3Yobil7cmV0dXJuIG51bGwhPW4mJiJvYmplY3QiPT10''@;'; put 'put ''eXBlb2YgbiYmITA9PT1uWyJAQGZ1bmN0aW9uYWwvcGxhY2Vob2xkZXIiXX1mdW5jdGlvbiBLOChuKXtyZXR1cm4gZnVuY3Rpb24gZSh0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGh8fHN2KHQpP2U6bi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGtFKG4pe3JldHVybiBm''@;'; put 'put ''dW5jdGlvbiBlKHQscil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gZTtjYXNlIDE6cmV0dXJuIHN2KHQpP2U6SzgoZnVuY3Rpb24oaSl7cmV0dXJuIG4odCxpKX0pO2RlZmF1bHQ6cmV0dXJuIHN2KHQpJiZzdihyKT9lOnN2KHQpP0s4KGZ1bmN0aW9uKGkpe3JldHVy''@;'; put 'put ''biBuKGkscil9KTpzdihyKT9LOChmdW5jdGlvbihpKXtyZXR1cm4gbih0LGkpfSk6bih0LHIpfX19ZnVuY3Rpb24geF9lKG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHI9W10saT0wLG89bixhPTAsbD0hMTthPGUubGVuZ3RofHxpPGFyZ3VtZW50cy5sZW5ndGg7KXt2YXIgdTth''@;'; put 'put ''PGUubGVuZ3RoJiYoIXN2KGVbYV0pfHxpPj1hcmd1bWVudHMubGVuZ3RoKT91PWVbYV06KHU9YXJndW1lbnRzW2ldLGkrPTEpLHJbYV09dSxzdih1KT9sPSEwOm8tPTEsYSs9MX1yZXR1cm4hbCYmbzw9MD90LmFwcGx5KHRoaXMscik6VF9lKE1hdGgubWF4KDAsbykseF9lKG4scix0KSl9fWNv''@;'; put 'put ''bnN0IEFfZT1rRShmdW5jdGlvbihlLHQpe3JldHVybiAxPT09ZT9LOCh0KTpUX2UoZSx4X2UoZSxbXSx0KSl9KSxrX2U9a0UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGV8fG51bGwhPXQmJih0LmNvbnN0cnVjdG9yPT09ZXx8Ik9iamVjdCI9PT1lLm5hbWUmJiJvYmplY3Qi''@;'; put 'put ''PT10eXBlb2YgdCl9KTtmdW5jdGlvbiBNVShuLGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKX12YXIgUl9lPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsVmF0PWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgQXJndW1lbnRzXSI9PT1SX2UuY2Fs''@;'; put 'put ''bChhcmd1bWVudHMpP2Z1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10iPT09Ul9lLmNhbGwoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBNVSgiY2FsbGVlIixlKX19KCk7Y29uc3QgSV9lPVZhdCxCYXQ9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUm''@;'; put 'put ''JmUubGVuZ3RoPj0wJiYiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfTtmdW5jdGlvbiBEX2Uobil7cmV0dXJuIltvYmplY3QgU3RyaW5nXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobil9dmFyIHphdD1LOChmdW5jdGlvbihl''@;'; put 'put ''KXtyZXR1cm4gbnVsbCE9ZSYmImZ1bmN0aW9uIj09dHlwZW9mIGVbImZhbnRhc3ktbGFuZC9lbXB0eSJdP2VbImZhbnRhc3ktbGFuZC9lbXB0eSJdKCk6bnVsbCE9ZSYmbnVsbCE9ZS5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0b3JbImZhbnRhc3ktbGFuZC9l''@;'; put 'put ''bXB0eSJdP2UuY29uc3RydWN0b3JbImZhbnRhc3ktbGFuZC9lbXB0eSJdKCk6bnVsbCE9ZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuZW1wdHk/ZS5lbXB0eSgpOm51bGwhPWUmJm51bGwhPWUuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmVtcHR5P2UuY29u''@;'; put 'put ''c3RydWN0b3IuZW1wdHkoKTpCYXQoZSk/W106RF9lKGUpPyIiOmZ1bmN0aW9uIGphdChuKXtyZXR1cm4iW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKX0oZSk/e306SV9lKGUpP2Z1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKTpmdW5jdGlv''@;'; put 'put ''biBVYXQobil7dmFyIGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pO3JldHVybiJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI9PT1lfHwiW29iamVjdCBJbnQ4QXJyYXldIj09PWV8fCJbb2JqZWN0IFVpbnQ4QXJyYXldIj09PWV8fCJbb2JqZWN0IEludDE2QXJyYXldIj09''@;'; put 'put ''PWV8fCJbb2JqZWN0IFVpbnQxNkFycmF5XSI9PT1lfHwiW29iamVjdCBJbnQzMkFycmF5XSI9PT1lfHwiW29iamVjdCBVaW50MzJBcnJheV0iPT09ZXx8IltvYmplY3QgRmxvYXQzMkFycmF5XSI9PT1lfHwiW29iamVjdCBGbG9hdDY0QXJyYXldIj09PWV8fCJbb2JqZWN0IEJpZ0ludDY0QXJy''@;'; put 'put ''YXldIj09PWV8fCJbb2JqZWN0IEJpZ1VpbnQ2NEFycmF5XSI9PT1lfShlKT9lLmNvbnN0cnVjdG9yLmZyb20oIiIpOnZvaWQgMH0pO2NvbnN0IFdhdD16YXQ7ZnVuY3Rpb24gTF9lKG4pe2Zvcih2YXIgdCxlPVtdOyEodD1uLm5leHQoKSkuZG9uZTspZS5wdXNoKHQudmFsdWUpO3JldHVybiBl''@;'; put 'put ''fWZ1bmN0aW9uIE9fZShuLGUsdCl7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7KXtpZihuKGUsdFtyXSkpcmV0dXJuITA7cis9MX1yZXR1cm4hMX1jb25zdCB1cmU9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6ZnVuY3Rpb24gWmF0KG4sZSl7cmV0dXJuIG49PT1l''@;'; put 'put ''PzAhPT1ufHwxL249PTEvZTpuIT1uJiZlIT1lfTt2YXIgR2F0PSF7dG9TdHJpbmc6bnVsbH0ucHJvcGVydHlJc0VudW1lcmFibGUoInRvU3RyaW5nIiksTl9lPVsiY29uc3RydWN0b3IiLCJ2YWx1ZU9mIiwiaXNQcm90b3R5cGVPZiIsInRvU3RyaW5nIiwicHJvcGVydHlJc0VudW1lcmFibGUi''@;'; put 'put ''LCJoYXNPd25Qcm9wZXJ0eSIsInRvTG9jYWxlU3RyaW5nIl0sRl9lPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5wcm9wZXJ0eUlzRW51bWVyYWJsZSgibGVuZ3RoIil9KCksJGF0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDspe2lmKGVbcl09PT10KXJldHVybiEw''@;'; put 'put ''O3IrPTF9cmV0dXJuITF9O2NvbnN0IFBfZT1LOCgiZnVuY3Rpb24iIT10eXBlb2YgT2JqZWN0LmtleXN8fEZfZT9mdW5jdGlvbihlKXtpZihPYmplY3QoZSkhPT1lKXJldHVybltdO3ZhciB0LHIsaT1bXSxvPUZfZSYmSV9lKGUpO2Zvcih0IGluIGUpTVUodCxlKSYmKCFvfHwibGVuZ3RoIiE9''@;'; put 'put ''PXQpJiYoaVtpLmxlbmd0aF09dCk7aWYoR2F0KWZvcihyPU5fZS5sZW5ndGgtMTtyPj0wOylNVSh0PU5fZVtyXSxlKSYmISRhdChpLHQpJiYoaVtpLmxlbmd0aF09dCksci09MTtyZXR1cm4gaX06ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChlKSE9PWU/W106T2JqZWN0LmtleXMoZSl9KSxI''@;'; put 'put ''X2U9SzgoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lPyJOdWxsIjp2b2lkIDA9PT1lPyJVbmRlZmluZWQiOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKX0pO2Z1bmN0aW9uIFZfZShuLGUsdCxyKXt2YXIgaT1MX2Uobik7ZnVuY3Rpb24gYShsLHUpe3Jl''@;'; put 'put ''dHVybiBkcmUobCx1LHQuc2xpY2UoKSxyLnNsaWNlKCkpfXJldHVybiFPX2UoZnVuY3Rpb24obCx1KXtyZXR1cm4hT19lKGEsdSxsKX0sTF9lKGUpLGkpfWZ1bmN0aW9uIGRyZShuLGUsdCxyKXtpZih1cmUobixlKSlyZXR1cm4hMDt2YXIgaT1IX2Uobik7aWYoaSE9PUhfZShlKSlyZXR1cm4h''@;'; put 'put ''MTtpZigiZnVuY3Rpb24iPT10eXBlb2YgblsiZmFudGFzeS1sYW5kL2VxdWFscyJdfHwiZnVuY3Rpb24iPT10eXBlb2YgZVsiZmFudGFzeS1sYW5kL2VxdWFscyJdKXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuWyJmYW50YXN5LWxhbmQvZXF1YWxzIl0mJm5bImZhbnRhc3ktbGFuZC9lcXVh''@;'; put 'put ''bHMiXShlKSYmImZ1bmN0aW9uIj09dHlwZW9mIGVbImZhbnRhc3ktbGFuZC9lcXVhbHMiXSYmZVsiZmFudGFzeS1sYW5kL2VxdWFscyJdKG4pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuLmVxdWFsc3x8ImZ1bmN0aW9uIj09dHlwZW9mIGUuZXF1YWxzKXJldHVybiJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBuLmVxdWFscyYmbi5lcXVhbHMoZSkmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmVxdWFscyYmZS5lcXVhbHMobik7c3dpdGNoKGkpe2Nhc2UiQXJndW1lbnRzIjpjYXNlIkFycmF5IjpjYXNlIk9iamVjdCI6aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4uY29uc3RydWN0b3ImJiJQcm9taXNlIj09''@;'; put 'put ''PWZ1bmN0aW9uIFlhdChuKXt2YXIgZT1TdHJpbmcobikubWF0Y2goL15mdW5jdGlvbiAoXHcqKS8pO3JldHVybiBudWxsPT1lPyIiOmVbMV19KG4uY29uc3RydWN0b3IpKXJldHVybiBuPT09ZTticmVhaztjYXNlIkJvb2xlYW4iOmNhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6aWYodHlwZW9m''@;'; put 'put ''IG4hPXR5cGVvZiBlfHwhdXJlKG4udmFsdWVPZigpLGUudmFsdWVPZigpKSlyZXR1cm4hMTticmVhaztjYXNlIkRhdGUiOmlmKCF1cmUobi52YWx1ZU9mKCksZS52YWx1ZU9mKCkpKXJldHVybiExO2JyZWFrO2Nhc2UiRXJyb3IiOnJldHVybiBuLm5hbWU9PT1lLm5hbWUmJm4ubWVzc2FnZT09''@;'; put 'put ''PWUubWVzc2FnZTtjYXNlIlJlZ0V4cCI6aWYobi5zb3VyY2UhPT1lLnNvdXJjZXx8bi5nbG9iYWwhPT1lLmdsb2JhbHx8bi5pZ25vcmVDYXNlIT09ZS5pZ25vcmVDYXNlfHxuLm11bHRpbGluZSE9PWUubXVsdGlsaW5lfHxuLnN0aWNreSE9PWUuc3RpY2t5fHxuLnVuaWNvZGUhPT1lLnVuaWNv''@;'; put 'put ''ZGUpcmV0dXJuITF9Zm9yKHZhciBvPXQubGVuZ3RoLTE7bz49MDspe2lmKHRbb109PT1uKXJldHVybiByW29dPT09ZTtvLT0xfXN3aXRjaChpKXtjYXNlIk1hcCI6cmV0dXJuIG4uc2l6ZT09PWUuc2l6ZSYmVl9lKG4uZW50cmllcygpLGUuZW50cmllcygpLHQuY29uY2F0KFtuXSksci5jb25j''@;'; put 'put ''YXQoW2VdKSk7Y2FzZSJTZXQiOnJldHVybiBuLnNpemU9PT1lLnNpemUmJlZfZShuLnZhbHVlcygpLGUudmFsdWVzKCksdC5jb25jYXQoW25dKSxyLmNvbmNhdChbZV0pKTtjYXNlIkFyZ3VtZW50cyI6Y2FzZSJBcnJheSI6Y2FzZSJPYmplY3QiOmNhc2UiQm9vbGVhbiI6Y2FzZSJOdW1iZXIi''@;'; put 'put ''OmNhc2UiU3RyaW5nIjpjYXNlIkRhdGUiOmNhc2UiRXJyb3IiOmNhc2UiUmVnRXhwIjpjYXNlIkludDhBcnJheSI6Y2FzZSJVaW50OEFycmF5IjpjYXNlIlVpbnQ4Q2xhbXBlZEFycmF5IjpjYXNlIkludDE2QXJyYXkiOmNhc2UiVWludDE2QXJyYXkiOmNhc2UiSW50MzJBcnJheSI6Y2FzZSJV''@;'; put 'put ''aW50MzJBcnJheSI6Y2FzZSJGbG9hdDMyQXJyYXkiOmNhc2UiRmxvYXQ2NEFycmF5IjpjYXNlIkFycmF5QnVmZmVyIjpicmVhaztkZWZhdWx0OnJldHVybiExfXZhciBhPVBfZShuKTtpZihhLmxlbmd0aCE9PVBfZShlKS5sZW5ndGgpcmV0dXJuITE7dmFyIGw9dC5jb25jYXQoW25dKSx1PXIu''@;'; put 'put ''Y29uY2F0KFtlXSk7Zm9yKG89YS5sZW5ndGgtMTtvPj0wOyl7dmFyIGc9YVtvXTtpZighTVUoZyxlKXx8IWRyZShlW2ddLG5bZ10sbCx1KSlyZXR1cm4hMTtvLT0xfXJldHVybiEwfWNvbnN0IFFhdD1rRShmdW5jdGlvbihlLHQpe3JldHVybiBkcmUoZSx0LFtdLFtdKX0pLEJfZT1LOChmdW5j''@;'; put 'put ''dGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmUWF0KGUsV2F0KGUpKX0pO2Z1bmN0aW9uIF9JKG4pe3JldHVybiBudWxsPT1ufWZ1bmN0aW9uIHlJKG4pe3JldHVybiBfSShuKXx8Ql9lKG4pfWZ1bmN0aW9uIGhyZShuKXtyZXR1cm4ga19lKFN0cmluZyxuKX1mdW5jdGlvbiBXX2UobixlKXtyZXR1''@;'; put 'put ''cm4gbiE9PWV9ZnVuY3Rpb24gJF9lKG49d2luZG93KXtyZXR1cm4hX0kobil9Y29uc3QgY3N0PU51bWJlci5pc0ludGVnZXJ8fGZ1bmN0aW9uKGUpe3JldHVybigwfGUpPT09ZX0sZHN0PWtFKGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZTwwP3QubGVuZ3RoK2U6ZTtyZXR1cm4gRF9lKHQpP3QuY2hh''@;'; put 'put ''ckF0KHIpOnRbcl19KSxmc3Q9a0UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24ocil7Zm9yKHZhciBhLGk9dCxvPTA7bzxyLmxlbmd0aDspe2lmKG51bGw9PWkpcmV0dXJuO2k9Y3N0KGE9cltvXSk/ZHN0KGEsaSk6aVthXSxvKz0xfXJldHVybiBpfSl9KSxnc3Q9a0UoZnVu''@;'; put 'put ''Y3Rpb24oZSx0KXtyZXR1cm4gZnN0KFtlXSx0KVswXX0pLHZzdD1BX2UoMiwobixlKT0+dm9pZCAwIT09Z3N0KG4sZSkpLHFfZT12c3QoeyJAQGZ1bmN0aW9uYWwvcGxhY2Vob2xkZXIiOiEwfSx3aW5kb3cpO2xldCB4VSxLX2UsZnJlLHByZTtmdW5jdGlvbiBYX2Uobj0hMCl7aWYoIW58fCF4''@;'; put 'put ''VSl7Y29uc3QgZT1kb2N1bWVudCYmZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiW25nLXZlcnNpb25dIik7eFU9ZT8iIitlLmdldEF0dHJpYnV0ZSgibmctdmVyc2lvbiIpOnZvaWQgMH1yZXR1cm4geFV9ZnVuY3Rpb24geXN0KG49ITApe3JldHVybiBuJiZ4VXx8KEtfZT13aW5kb3c/LmFuZ3Vs''@;'; put 'put ''YXI/LnZlcnNpb24/LmZ1bGwpLEtfZX1mdW5jdGlvbiBRX2Uobj0hMCl7cmV0dXJuIG4mJmZyZXx8KGZyZT13aW5kb3c/LkNEUz8uX3JlYWN0Py52ZXJzaW9uP3dpbmRvdy5DRFMuX3JlYWN0LnZlcnNpb246ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiW2RhdGEtcmVhY3Ryb290XSwgW2RhdGEt''@;'; put 'put ''cmVhY3RpZF0iKT8idW5rbm93biB2ZXJzaW9uIjp2b2lkIDApLGZyZX1mdW5jdGlvbiBKX2Uobj0hMCl7aWYoIW58fCFwcmUpe2NvbnN0IGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiKiIpO2xldCB0O2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKGVbcl0uX192dWVfXyl7dD1l''@;'; put 'put ''W3JdO2JyZWFrfXByZT10PyJ1bmtub3duIHZlcnNpb24iOnZvaWQgMH1yZXR1cm4gcHJlfWZ1bmN0aW9uIGZiKG4pe3JldHVybiBuLnJlcGxhY2UoL1tBLVpdL2csZT0+Ii0iK2UudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gbnllKG4pe3JldHVybiBuLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgp''@;'; put 'put ''K24uc2xpY2UoMSl9Y29uc3QgeHN0PW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe2lmKHRoaXMuc3VwcG9ydHM9e2pzOiEwfSwhZG9jdW1lbnQuYm9keS5oYXNBdHRyaWJ1dGUoImNkcy1zdXBwb3J0cyIpfHwibm8tanMiPT09ZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoImNkcy1zdXBwb3J0''@;'; put 'put ''cyIpKXtjb25zdCBuPWZiKE9iamVjdC5rZXlzKHRoaXMuc3VwcG9ydHMpLnJlZHVjZSgoZSx0KT0+YCR7ZX0gJHt0aGlzLnN1cHBvcnRzW3RdP3Q6Im5vLSIrdH1gLCIiKSkudHJpbSgpO2RvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCJjZHMtc3VwcG9ydHMiLG4pfX19O2NsYXNzIGJJe3N0''@;'; put 'put ''YXRpYyBsb2coLi4uZSl7dnJlKCkmJm1yZSgpJiZjb25zb2xlLmxvZyguLi5lKX1zdGF0aWMgd2FybiguLi5lKXt2cmUoKSYmbXJlKCkmJmNvbnNvbGUud2FybiguLi5lKX1zdGF0aWMgZXJyb3IoLi4uZSl7dnJlKCkmJm1yZSgpJiZjb25zb2xlLmVycm9yKC4uLmUpfX1mdW5jdGlvbiBtcmUo''@;'; put 'put ''KXtyZXR1cm4hcV9lKFsiamFzbWluZSJdKX1mdW5jdGlvbiB2cmUoKXtyZXR1cm4hd2luZG93LkNEUy5lbnZpcm9ubWVudC5wcm9kdWN0aW9ufWZ1bmN0aW9uIG95ZSgpeyRfZSgpJiYod2luZG93LkNEUz13aW5kb3cuQ0RTfHx7X3ZlcnNpb246W10sX3JlYWN0Ont2ZXJzaW9uOnZvaWQgMH0s''@;'; put 'put ''X3N1cHBvcnRzOnhzdC5zdXBwb3J0cyxfaXNTdGF0ZVByb3hpZWQ6ITEsX3N0YXRlOntmb2N1c1RyYXBJdGVtczpbXSxsYXllckVsZW1lbnRzOltdLGkxOG5SZWdpc3RyeTp7fSxlbGVtZW50UmVnaXN0cnk6e30saWNvblJlZ2lzdHJ5Ont9LG1vdGlvblJlZ2lzdHJ5Ont9fSxlbnZpcm9ubWVu''@;'; put 'put ''dDp7cHJvZHVjdGlvbjohMX0sZ2V0RGV0YWlsczpheWUsbG9nRGV0YWlsczpBc3R9LGZ1bmN0aW9uKCl7Y29uc3Qgbj0iNi4xNy4wIjt3aW5kb3cuQ0RTLl92ZXJzaW9uLmluZGV4T2Yobik8MCYmKHdpbmRvdy5DRFMuX3ZlcnNpb24ucHVzaChuKSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJi''@;'; put 'put ''b2R5Iik/LnNldEF0dHJpYnV0ZSgiY2RzLXZlcnNpb24iLHdpbmRvdy5DRFMuX3ZlcnNpb24uam9pbigiICIpKSksd2luZG93LkNEUy5fdmVyc2lvbi5sZW5ndGg+MSYmYkkud2FybigiUnVubmluZyBtb3JlIHRoYW4gb25lIHZlcnNpb24gb2YgQ2xhcml0eSBjYW4gY2F1c2UgdW5leHBlY3Rl''@;'; put 'put ''ZCBpc3N1ZXMuIFBsZWFzZSBlbnN1cmUgb25seSBvbmUgdmVyc2lvbiBpcyBsb2FkZWQuIil9KCksd2luZG93LkNEUy5faXNTdGF0ZVByb3hpZWR8fCh3aW5kb3cuQ0RTLl9pc1N0YXRlUHJveGllZD0hMCx3aW5kb3cuQ0RTLl9zdGF0ZT1uZXcgUHJveHkod2luZG93LkNEUy5fc3RhdGUse3Nl''@;'; put 'put ''dDoobixlLHQpPT57Y29uc3Qgcj17a2V5OmUscHJldjp3aW5kb3cuQ0RTLl9zdGF0ZVtlXSxjdXJyZW50OnR9O3JldHVybiBuW2VdPXQsZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIkNEU19TVEFURV9VUERBVEUiLHtkZXRhaWw6cn0pKSwhMH19KSkpfWZ1bmN0aW9u''@;'; put 'put ''IGF5ZSgpe3JldHVybnt2ZXJzaW9uczp3aW5kb3cuQ0RTLl92ZXJzaW9uLGVudmlyb25tZW50OndpbmRvdy5DRFMuZW52aXJvbm1lbnQsdXNlckFnZW50Om5hdmlnYXRvci51c2VyQWdlbnQsc3VwcG9ydHM6d2luZG93LkNEUy5fc3VwcG9ydHMsYW5ndWxhclZlcnNpb246WF9lKCExKSxhbmd1''@;'; put 'put ''bGFySlNWZXJzaW9uOnlzdCghMSkscmVhY3RWZXJzaW9uOlFfZSghMSksdnVlVmVyc2lvbjpKX2UoITEpLHN0YXRlOnsuLi53aW5kb3cuQ0RTLl9zdGF0ZSxpY29uUmVnaXN0cnk6T2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuaWNvblJlZ2lzdHJ5KSxtb3Rpb25SZWdpc3RyeTpPYmpl''@;'; put 'put ''Y3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0ZS5tb3Rpb25SZWdpc3RyeSksZm9jdXNUcmFwUmVnaXN0cnk6T2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuZm9jdXNUcmFwSXRlbXMubWFwKG49Pm4uZm9jdXNUcmFwSWQpKX19fWZ1bmN0aW9uIEFzdCgpe2JJLmxvZyhKU09OLnN0cmluZ2lm''@;'; put 'put ''eShheWUoKSxudWxsLDIpKX1jb25zdCBrc3Q9QV9lKDMsKG4sZSx0KT0+eyFmdW5jdGlvbiBfc3QobixlKXtyZXR1cm4gZXx8KGU9d2luZG93JiZ3aW5kb3cuY3VzdG9tRWxlbWVudHMpLCFlfHwhIWUuZ2V0KG4pfShuKXx8ZnVuY3Rpb24gYnN0KCl7cmV0dXJuIHdpbmRvdz8ubG9jYXRpb24/''@;'; put 'put ''LmhyZWY/LmluY2x1ZGVzKCJsb2NhbGhvc3Q6NjAwNiIpfSgpPyh0LmRlZmluZShuLGUpLG95ZSgpLHdpbmRvdyYmIU9iamVjdC5rZXlzKHdpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeSkuc29tZShyPT5yPT09bikmJih3aW5kb3cuQ0RTLl9zdGF0ZS5lbGVtZW50UmVnaXN0cnk9''@;'; put 'put ''ey4uLndpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeSxbbl06e319KSk6Ykkud2FybihuKyIgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIil9KTtmdW5jdGlvbiBvNChuLGUsdCxyKXt2YXIgYSxpPWFyZ3VtZW50cy5sZW5ndGgsbz1pPDM/ZTpudWxsPT09cj9yPU9iamVjdC5n''@;'; put 'put ''ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KTpyO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpbz1SZWZsZWN0LmRlY29yYXRlKG4sZSx0LHIpO2Vsc2UgZm9yKHZhciBsPW4ubGVuZ3RoLTE7bD49MDtsLS0pKGE9blts''@;'; put 'put ''XSkmJihvPShpPDM/YShvKTppPjM/YShlLHQsbyk6YShlLHQpKXx8byk7cmV0dXJuIGk+MyYmbyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxvKSxvfWZ1bmN0aW9uIGx2KG4pe3JldHVybiB0aGlzIGluc3RhbmNlb2YgbHY/KHRoaXMudj1uLHRoaXMpOm5ldyBsdihuKX1mdW5jdGlvbiB1''@;'; put 'put ''eWUobil7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciB0LGU9bltTeW1ib2wuYXN5bmNJdGVyYXRvcl07cmV0dXJuIGU/ZS5jYWxsKG4pOihuPWZ1bmN0aW9uIHdyZShuKXt2YXIg''@;'; put 'put ''ZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3IsdD1lJiZuW2VdLHI9MDtpZih0KXJldHVybiB0LmNhbGwobik7aWYobiYmIm51bWJlciI9PXR5cGVvZiBuLmxlbmd0aClyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybiBuJiZyPj1uLmxlbmd0aCYmKG49dm9p''@;'; put 'put ''ZCAwKSx7dmFsdWU6biYmbltyKytdLGRvbmU6IW59fX07dGhyb3cgbmV3IFR5cGVFcnJvcihlPyJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLiI6IlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKX0obiksdD17fSxyKCJuZXh0IikscigidGhyb3ciKSxyKCJyZXR1cm4iKSx0W1N5bWJv''@;'; put 'put ''bC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx0KTtmdW5jdGlvbiByKG8pe3Rbb109bltvXSYmZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGwsdSl7IWZ1bmN0aW9uIGkobyxhLGwsdSl7UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4oZnVuY3Rp''@;'; put 'put ''b24oZyl7byh7dmFsdWU6Zyxkb25lOmx9KX0sYSl9KGwsdSwoYT1uW29dKGEpKS5kb25lLGEudmFsdWUpfSl9fX0iZnVuY3Rpb24iPT10eXBlb2YgU3VwcHJlc3NlZEVycm9yJiZTdXBwcmVzc2VkRXJyb3I7bGV0IGR5ZT0hMTtmdW5jdGlvbiBubHQobil7aWYoKG49TWF0aC50cnVuYyhuKXx8''@;'; put 'put ''MCk8MCYmKG4rPXRoaXMubGVuZ3RoKSwhKG48MHx8bj49dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzW25dfWlmKCFkeWUpe2R5ZT0hMDtjb25zdCBuPVJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoSW50OEFycmF5KTtmb3IoY29uc3QgZSBvZltBcnJheSxTdHJpbmcsbl0pT2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KGUucHJvdG90eXBlLCJhdCIse3ZhbHVlOm5sdCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pfWxldCBoeWU9ITEsZnllPSExO2Z1bmN0aW9uIHB5ZShuLGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7Y29uZmlndXJhYmxlOiEwLGVudW1l''@;'; put 'put ''cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKGUpP3RoaXMuZ2V0QXR0cmlidXRlKGUpOm51bGx9LHNldDpmdW5jdGlvbihyKXtudWxsIT09cj90aGlzLnNldEF0dHJpYnV0ZShlLHIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX0pfWh5ZXx8RWxlbWVu''@;'; put 'put ''dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoInJvbGUiKXx8KHB5ZShFbGVtZW50LnByb3RvdHlwZSwicm9sZSIsInJvbGUiKSxoeWU9ITApLGZ5ZXx8RWxlbWVudC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoImFyaWFMYWJlbCIpfHwoZnllPSEwLFsiQWN0aXZlRGVzY2VuZGFudCIsIkF0''@;'; put 'put ''b21pYyIsIkF1dG9Db21wbGV0ZSIsIkJ1c3kiLCJDaGVja2VkIiwiQ29sQ291bnQiLCJDb2xJbmRleCIsIkNvbFNwYW4iLCJDb250cm9scyIsIkN1cnJlbnQiLCJEZXNjcmliZWRCeSIsIkRldGFpbHMiLCJEaXNhYmxlZCIsIkVycm9yTWVzc2FnZSIsIkV4cGFuZGVkIiwiRmxvd1RvIiwiSGFz''@;'; put 'put ''UG9wdXAiLCJIaWRkZW4iLCJJbnZhbGlkIiwiS2V5U2hvcnRjdXRzIiwiTGFiZWwiLCJMYWJlbGxlZEJ5IiwiTGV2ZWwiLCJMaXZlIiwiTW9kYWwiLCJNdWx0aUxpbmUiLCJNdWx0aVNlbGVjdGFibGUiLCJPcmllbnRhdGlvbiIsIk93bnMiLCJQbGFjZWhvbGRlciIsIlBvc0luU2V0IiwiUHJl''@;'; put 'put ''c3NlZCIsIlJlYWRPbmx5IiwiUmVsZXZhbnQiLCJSZXF1aXJlZCIsIlJvbGVEZXNjcmlwdGlvbiIsIlJvd0NvdW50IiwiUm93SW5kZXgiLCJSb3dTcGFuIiwiU2VsZWN0ZWQiLCJTZXRTaXplIiwiU29ydCIsIlZhbHVlTWF4IiwiVmFsdWVNaW4iLCJWYWx1ZU5vdyIsIlZhbHVlVGV4dCJdLmZv''@;'; put 'put ''ckVhY2gobj0+cHllKEVsZW1lbnQucHJvdG90eXBlLCJhcmlhLSIrbi50b0xvd2VyQ2FzZSgpLCJhcmlhIituKSkpO2NvbnN0IGtVPXdpbmRvdyxTcmU9a1UuU2hhZG93Um9vdCYmKHZvaWQgMD09PWtVLlNoYWR5Q1NTfHxrVS5TaGFkeUNTUy5uYXRpdmVTaGFkb3cpJiYiYWRvcHRlZFN0eWxl''@;'; put 'put ''U2hlZXRzImluIERvY3VtZW50LnByb3RvdHlwZSYmInJlcGxhY2UiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUsRXJlPVN5bWJvbCgpLGd5ZT1uZXcgV2Vha01hcDtjbGFzcyBteWV7Y29uc3RydWN0b3IoZSx0LHIpe2lmKHRoaXMuXyRjc3NSZXN1bHQkPSEwLHIhPT1FcmUpdGhyb3cgRXJy''@;'; put 'put ''b3IoIkNTU1Jlc3VsdCBpcyBub3QgY29uc3RydWN0YWJsZS4gVXNlIGB1bnNhZmVDU1NgIG9yIGBjc3NgIGluc3RlYWQuIik7dGhpcy5jc3NUZXh0PWUsdGhpcy50PXR9Z2V0IHN0eWxlU2hlZXQoKXtsZXQgZT10aGlzLm87Y29uc3QgdD10aGlzLnQ7aWYoU3JlJiZ2b2lkIDA9PT1lKXtjb25z''@;'; put 'put ''dCByPXZvaWQgMCE9PXQmJjE9PT10Lmxlbmd0aDtyJiYoZT1neWUuZ2V0KHQpKSx2b2lkIDA9PT1lJiYoKHRoaXMubz1lPW5ldyBDU1NTdHlsZVNoZWV0KS5yZXBsYWNlU3luYyh0aGlzLmNzc1RleHQpLHImJmd5ZS5zZXQodCxlKSl9cmV0dXJuIGV9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''c3NUZXh0fX1jb25zdCB2eWU9KG4sLi4uZSk9Pntjb25zdCB0PTE9PT1uLmxlbmd0aD9uWzBdOmUucmVkdWNlKChyLGksbyk9PnIrKGE9PntpZighMD09PWEuXyRjc3NSZXN1bHQkKXJldHVybiBhLmNzc1RleHQ7aWYoIm51bWJlciI9PXR5cGVvZiBhKXJldHVybiBhO3Rocm93IEVycm9yKCJW''@;'; put 'put ''YWx1ZSBwYXNzZWQgdG8gJ2NzcycgZnVuY3Rpb24gbXVzdCBiZSBhICdjc3MnIGZ1bmN0aW9uIHJlc3VsdDogIithKyIuIFVzZSAndW5zYWZlQ1NTJyB0byBwYXNzIG5vbi1saXRlcmFsIHZhbHVlcywgYnV0IHRha2UgY2FyZSB0byBlbnN1cmUgcGFnZSBzZWN1cml0eS4iKX0pKGkpK25bbysx''@;'; put 'put ''XSxuWzBdKTtyZXR1cm4gbmV3IG15ZSh0LG4sRXJlKX0sX3llPVNyZT9uPT5uOm49Pm4gaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0PyhlPT57bGV0IHQ9IiI7Zm9yKGNvbnN0IHIgb2YgZS5jc3NSdWxlcyl0Kz1yLmNzc1RleHQ7cmV0dXJuKG49Pm5ldyBteWUoInN0cmluZyI9PXR5cGVvZiBu''@;'; put 'put ''P246bisiIix2b2lkIDAsRXJlKSkodCl9KShuKTpuO3ZhciBNcmU7Y29uc3QgUlU9d2luZG93LHl5ZT1SVS50cnVzdGVkVHlwZXMsb2x0PXl5ZT95eWUuZW1wdHlTY3JpcHQ6IiIsYnllPVJVLnJlYWN0aXZlRWxlbWVudFBvbHlmaWxsU3VwcG9ydCxUcmU9e3RvQXR0cmlidXRlKG4sZSl7c3dp''@;'; put 'put ''dGNoKGUpe2Nhc2UgQm9vbGVhbjpuPW4/b2x0Om51bGw7YnJlYWs7Y2FzZSBPYmplY3Q6Y2FzZSBBcnJheTpuPW51bGw9PW4/bjpKU09OLnN0cmluZ2lmeShuKX1yZXR1cm4gbn0sZnJvbUF0dHJpYnV0ZShuLGUpe2xldCB0PW47c3dpdGNoKGUpe2Nhc2UgQm9vbGVhbjp0PW51bGwhPT1uO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgTnVtYmVyOnQ9bnVsbD09PW4/bnVsbDpOdW1iZXIobik7YnJlYWs7Y2FzZSBPYmplY3Q6Y2FzZSBBcnJheTp0cnl7dD1KU09OLnBhcnNlKG4pfWNhdGNoe3Q9bnVsbH19cmV0dXJuIHR9fSx3eWU9KG4sZSk9PmUhPT1uJiYoZT09ZXx8bj09bikseHJlPXthdHRyaWJ1dGU6ITAs''@;'; put 'put ''dHlwZTpTdHJpbmcsY29udmVydGVyOlRyZSxyZWZsZWN0OiExLGhhc0NoYW5nZWQ6d3llfSxBcmU9ImZpbmFsaXplZCI7Y2xhc3MgUkUgZXh0ZW5kcyBIVE1MRWxlbWVudHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fJEVpPW5ldyBNYXAsdGhpcy5pc1VwZGF0ZVBlbmRpbmc9ITEsdGhp''@;'; put 'put ''cy5oYXNVcGRhdGVkPSExLHRoaXMuXyRFbD1udWxsLHRoaXMuXyRFdSgpfXN0YXRpYyBhZGRJbml0aWFsaXplcihlKXt2YXIgdDt0aGlzLmZpbmFsaXplKCksKG51bGwhPT0odD10aGlzLmgpJiZ2b2lkIDAhPT10P3Q6dGhpcy5oPVtdKS5wdXNoKGUpfXN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRy''@;'; put 'put ''aWJ1dGVzKCl7dGhpcy5maW5hbGl6ZSgpO2NvbnN0IGU9W107cmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXMuZm9yRWFjaCgodCxyKT0+e2NvbnN0IGk9dGhpcy5fJEVwKHIsdCk7dm9pZCAwIT09aSYmKHRoaXMuXyRFdi5zZXQoaSxyKSxlLnB1c2goaSkpfSksZX1zdGF0aWMgY3JlYXRl''@;'; put 'put ''UHJvcGVydHkoZSx0PXhyZSl7aWYodC5zdGF0ZSYmKHQuYXR0cmlidXRlPSExKSx0aGlzLmZpbmFsaXplKCksdGhpcy5lbGVtZW50UHJvcGVydGllcy5zZXQoZSx0KSwhdC5ub0FjY2Vzc29yJiYhdGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoZSkpe2NvbnN0IGk9dGhpcy5nZXRQcm9w''@;'; put 'put ''ZXJ0eURlc2NyaXB0b3IoZSwic3ltYm9sIj09dHlwZW9mIGU/U3ltYm9sKCk6Il9fIitlLHQpO3ZvaWQgMCE9PWkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnByb3RvdHlwZSxlLGkpfX1zdGF0aWMgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKGUsdCxyKXtyZXR1cm57Z2V0KCl7cmV0dXJu''@;'; put 'put ''IHRoaXNbdF19LHNldChpKXtjb25zdCBvPXRoaXNbZV07dGhpc1t0XT1pLHRoaXMucmVxdWVzdFVwZGF0ZShlLG8scil9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX1zdGF0aWMgZ2V0UHJvcGVydHlPcHRpb25zKGUpe3JldHVybiB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLmdldChl''@;'; put 'put ''KXx8eHJlfXN0YXRpYyBmaW5hbGl6ZSgpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoQXJlKSlyZXR1cm4hMTt0aGlzW0FyZV09ITA7Y29uc3QgZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7aWYoZS5maW5hbGl6ZSgpLHZvaWQgMCE9PWUuaCYmKHRoaXMuaD1bLi4uZS5oXSksdGhpcy5l''@;'; put 'put ''bGVtZW50UHJvcGVydGllcz1uZXcgTWFwKGUuZWxlbWVudFByb3BlcnRpZXMpLHRoaXMuXyRFdj1uZXcgTWFwLHRoaXMuaGFzT3duUHJvcGVydHkoInByb3BlcnRpZXMiKSl7Y29uc3QgdD10aGlzLnByb3BlcnRpZXMscj1bLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCksLi4uT2Jq''@;'; put 'put ''ZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KV07Zm9yKGNvbnN0IGkgb2Ygcil0aGlzLmNyZWF0ZVByb3BlcnR5KGksdFtpXSl9cmV0dXJuIHRoaXMuZWxlbWVudFN0eWxlcz10aGlzLmZpbmFsaXplU3R5bGVzKHRoaXMuc3R5bGVzKSwhMH1zdGF0aWMgZmluYWxpemVTdHlsZXMoZSl7Y29u''@;'; put 'put ''c3QgdD1bXTtpZihBcnJheS5pc0FycmF5KGUpKXtjb25zdCByPW5ldyBTZXQoZS5mbGF0KDEvMCkucmV2ZXJzZSgpKTtmb3IoY29uc3QgaSBvZiByKXQudW5zaGlmdChfeWUoaSkpfWVsc2Ugdm9pZCAwIT09ZSYmdC5wdXNoKF95ZShlKSk7cmV0dXJuIHR9c3RhdGljIF8kRXAoZSx0KXtjb25z''@;'; put 'put ''dCByPXQuYXR0cmlidXRlO3JldHVybiExPT09cj92b2lkIDA6InN0cmluZyI9PXR5cGVvZiByP3I6InN0cmluZyI9PXR5cGVvZiBlP2UudG9Mb3dlckNhc2UoKTp2b2lkIDB9XyRFdSgpe3ZhciBlO3RoaXMuXyRFXz1uZXcgUHJvbWlzZSh0PT50aGlzLmVuYWJsZVVwZGF0aW5nPXQpLHRoaXMu''@;'; put 'put ''XyRBTD1uZXcgTWFwLHRoaXMuXyRFZygpLHRoaXMucmVxdWVzdFVwZGF0ZSgpLG51bGw9PT0oZT10aGlzLmNvbnN0cnVjdG9yLmgpfHx2b2lkIDA9PT1lfHxlLmZvckVhY2godD0+dCh0aGlzKSl9YWRkQ29udHJvbGxlcihlKXt2YXIgdCxyOyhudWxsIT09KHQ9dGhpcy5fJEVTKSYmdm9pZCAw''@;'; put 'put ''IT09dD90OnRoaXMuXyRFUz1bXSkucHVzaChlKSx2b2lkIDAhPT10aGlzLnJlbmRlclJvb3QmJnRoaXMuaXNDb25uZWN0ZWQmJihudWxsPT09KHI9ZS5ob3N0Q29ubmVjdGVkKXx8dm9pZCAwPT09cnx8ci5jYWxsKGUpKX1yZW1vdmVDb250cm9sbGVyKGUpe3ZhciB0O251bGw9PT0odD10aGlz''@;'; put 'put ''Ll8kRVMpfHx2b2lkIDA9PT10fHx0LnNwbGljZSh0aGlzLl8kRVMuaW5kZXhPZihlKT4+PjAsMSl9XyRFZygpe3RoaXMuY29uc3RydWN0b3IuZWxlbWVudFByb3BlcnRpZXMuZm9yRWFjaCgoZSx0KT0+e3RoaXMuaGFzT3duUHJvcGVydHkodCkmJih0aGlzLl8kRWkuc2V0KHQsdGhpc1t0XSks''@;'; put 'put ''ZGVsZXRlIHRoaXNbdF0pfSl9Y3JlYXRlUmVuZGVyUm9vdCgpe3ZhciBlO2NvbnN0IHQ9bnVsbCE9PShlPXRoaXMuc2hhZG93Um9vdCkmJnZvaWQgMCE9PWU/ZTp0aGlzLmF0dGFjaFNoYWRvdyh0aGlzLmNvbnN0cnVjdG9yLnNoYWRvd1Jvb3RPcHRpb25zKTtyZXR1cm4oKG4sZSk9PntTcmU/''@;'; put 'put ''bi5hZG9wdGVkU3R5bGVTaGVldHM9ZS5tYXAodD0+dCBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQ/dDp0LnN0eWxlU2hlZXQpOmUuZm9yRWFjaCh0PT57Y29uc3Qgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLGk9a1UubGl0Tm9uY2U7dm9pZCAwIT09aSYmci5zZXRBdHRyaWJ1''@;'; put 'put ''dGUoIm5vbmNlIixpKSxyLnRleHRDb250ZW50PXQuY3NzVGV4dCxuLmFwcGVuZENoaWxkKHIpfSl9KSh0LHRoaXMuY29uc3RydWN0b3IuZWxlbWVudFN0eWxlcyksdH1jb25uZWN0ZWRDYWxsYmFjaygpe3ZhciBlO3ZvaWQgMD09PXRoaXMucmVuZGVyUm9vdCYmKHRoaXMucmVuZGVyUm9vdD10''@;'; put 'put ''aGlzLmNyZWF0ZVJlbmRlclJvb3QoKSksdGhpcy5lbmFibGVVcGRhdGluZyghMCksbnVsbD09PShlPXRoaXMuXyRFUyl8fHZvaWQgMD09PWV8fGUuZm9yRWFjaCh0PT57dmFyIHI7cmV0dXJuIG51bGw9PT0ocj10Lmhvc3RDb25uZWN0ZWQpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmNhbGwodCl9''@;'; put 'put ''KX1lbmFibGVVcGRhdGluZyhlKXt9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgZTtudWxsPT09KGU9dGhpcy5fJEVTKXx8dm9pZCAwPT09ZXx8ZS5mb3JFYWNoKHQ9Pnt2YXIgcjtyZXR1cm4gbnVsbD09PShyPXQuaG9zdERpc2Nvbm5lY3RlZCl8fHZvaWQgMD09PXI/dm9pZCAwOnIuY2Fs''@;'; put 'put ''bCh0KX0pfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhlLHQscil7dGhpcy5fJEFLKGUscil9XyRFTyhlLHQscj14cmUpe3ZhciBpO2NvbnN0IG89dGhpcy5jb25zdHJ1Y3Rvci5fJEVwKGUscik7aWYodm9pZCAwIT09byYmITA9PT1yLnJlZmxlY3Qpe2NvbnN0IGE9KHZvaWQgMCE9PShudWxs''@;'; put 'put ''PT09KGk9ci5jb252ZXJ0ZXIpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnRvQXR0cmlidXRlKT9yLmNvbnZlcnRlcjpUcmUpLnRvQXR0cmlidXRlKHQsci50eXBlKTt0aGlzLl8kRWw9ZSxudWxsPT1hP3RoaXMucmVtb3ZlQXR0cmlidXRlKG8pOnRoaXMuc2V0QXR0cmlidXRlKG8sYSksdGhpcy5f''@;'; put 'put ''JEVsPW51bGx9fV8kQUsoZSx0KXt2YXIgcjtjb25zdCBpPXRoaXMuY29uc3RydWN0b3Isbz1pLl8kRXYuZ2V0KGUpO2lmKHZvaWQgMCE9PW8mJnRoaXMuXyRFbCE9PW8pe2NvbnN0IGE9aS5nZXRQcm9wZXJ0eU9wdGlvbnMobyksbD0iZnVuY3Rpb24iPT10eXBlb2YgYS5jb252ZXJ0ZXI/e2Zy''@;'; put 'put ''b21BdHRyaWJ1dGU6YS5jb252ZXJ0ZXJ9OnZvaWQgMCE9PShudWxsPT09KHI9YS5jb252ZXJ0ZXIpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmZyb21BdHRyaWJ1dGUpP2EuY29udmVydGVyOlRyZTt0aGlzLl8kRWw9byx0aGlzW29dPWwuZnJvbUF0dHJpYnV0ZSh0LGEudHlwZSksdGhpcy5fJEVs''@;'; put 'put ''PW51bGx9fXJlcXVlc3RVcGRhdGUoZSx0LHIpe2xldCBpPSEwO3ZvaWQgMCE9PWUmJigoKHI9cnx8dGhpcy5jb25zdHJ1Y3Rvci5nZXRQcm9wZXJ0eU9wdGlvbnMoZSkpLmhhc0NoYW5nZWR8fHd5ZSkodGhpc1tlXSx0KT8odGhpcy5fJEFMLmhhcyhlKXx8dGhpcy5fJEFMLnNldChlLHQpLCEw''@;'; put 'put ''PT09ci5yZWZsZWN0JiZ0aGlzLl8kRWwhPT1lJiYodm9pZCAwPT09dGhpcy5fJEVDJiYodGhpcy5fJEVDPW5ldyBNYXApLHRoaXMuXyRFQy5zZXQoZSxyKSkpOmk9ITEpLCF0aGlzLmlzVXBkYXRlUGVuZGluZyYmaSYmKHRoaXMuXyRFXz10aGlzLl8kRWooKSl9XyRFaigpe3ZhciBlPXRoaXM7''@;'; put 'put ''cmV0dXJuIENyKGZ1bmN0aW9uKigpe2UuaXNVcGRhdGVQZW5kaW5nPSEwO3RyeXt5aWVsZCBlLl8kRV99Y2F0Y2gocil7UHJvbWlzZS5yZWplY3Qocil9Y29uc3QgdD1lLnNjaGVkdWxlVXBkYXRlKCk7cmV0dXJuIG51bGwhPXQmJih5aWVsZCB0KSwhZS5pc1VwZGF0ZVBlbmRpbmd9KSgpfXNj''@;'; put 'put ''aGVkdWxlVXBkYXRlKCl7cmV0dXJuIHRoaXMucGVyZm9ybVVwZGF0ZSgpfXBlcmZvcm1VcGRhdGUoKXt2YXIgZTtpZighdGhpcy5pc1VwZGF0ZVBlbmRpbmcpcmV0dXJuO3RoaXMuXyRFaSYmKHRoaXMuXyRFaS5mb3JFYWNoKChpLG8pPT50aGlzW29dPWkpLHRoaXMuXyRFaT12b2lkIDApO2xl''@;'; put 'put ''dCB0PSExO2NvbnN0IHI9dGhpcy5fJEFMO3RyeXt0PXRoaXMuc2hvdWxkVXBkYXRlKHIpLHQ/KHRoaXMud2lsbFVwZGF0ZShyKSxudWxsPT09KGU9dGhpcy5fJEVTKXx8dm9pZCAwPT09ZXx8ZS5mb3JFYWNoKGk9Pnt2YXIgbztyZXR1cm4gbnVsbD09PShvPWkuaG9zdFVwZGF0ZSl8fHZvaWQg''@;'; put 'put ''MD09PW8/dm9pZCAwOm8uY2FsbChpKX0pLHRoaXMudXBkYXRlKHIpKTp0aGlzLl8kRWsoKX1jYXRjaChpKXt0aHJvdyB0PSExLHRoaXMuXyRFaygpLGl9dCYmdGhpcy5fJEFFKHIpfXdpbGxVcGRhdGUoZSl7fV8kQUUoZSl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuXyRFUyl8fHZvaWQgMD09PXR8''@;'; put 'put ''fHQuZm9yRWFjaChyPT57dmFyIGk7cmV0dXJuIG51bGw9PT0oaT1yLmhvc3RVcGRhdGVkKXx8dm9pZCAwPT09aT92b2lkIDA6aS5jYWxsKHIpfSksdGhpcy5oYXNVcGRhdGVkfHwodGhpcy5oYXNVcGRhdGVkPSEwLHRoaXMuZmlyc3RVcGRhdGVkKGUpKSx0aGlzLnVwZGF0ZWQoZSl9XyRFaygp''@;'; put 'put ''e3RoaXMuXyRBTD1uZXcgTWFwLHRoaXMuaXNVcGRhdGVQZW5kaW5nPSExfWdldCB1cGRhdGVDb21wbGV0ZSgpe3JldHVybiB0aGlzLmdldFVwZGF0ZUNvbXBsZXRlKCl9Z2V0VXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5fJEVffXNob3VsZFVwZGF0ZShlKXtyZXR1cm4hMH11cGRhdGUo''@;'; put 'put ''ZSl7dm9pZCAwIT09dGhpcy5fJEVDJiYodGhpcy5fJEVDLmZvckVhY2goKHQscik9PnRoaXMuXyRFTyhyLHRoaXNbcl0sdCkpLHRoaXMuXyRFQz12b2lkIDApLHRoaXMuXyRFaygpfXVwZGF0ZWQoZSl7fWZpcnN0VXBkYXRlZChlKXt9fXZhciBrcmU7UkVbQXJlXT0hMCxSRS5lbGVtZW50UHJv''@;'; put 'put ''cGVydGllcz1uZXcgTWFwLFJFLmVsZW1lbnRTdHlsZXM9W10sUkUuc2hhZG93Um9vdE9wdGlvbnM9e21vZGU6Im9wZW4ifSxieWU/Lih7UmVhY3RpdmVFbGVtZW50OlJFfSksKG51bGwhPT0oTXJlPVJVLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zKSYmdm9pZCAwIT09TXJlP01yZTpSVS5yZWFj''@;'; put 'put ''dGl2ZUVsZW1lbnRWZXJzaW9ucz1bXSkucHVzaCgiMS42LjMiKTtjb25zdCBJVT13aW5kb3csSUU9SVUudHJ1c3RlZFR5cGVzLEN5ZT1JRT9JRS5jcmVhdGVQb2xpY3koImxpdC1odG1sIix7Y3JlYXRlSFRNTDpuPT5ufSk6dm9pZCAwLERVPSIkbGl0JCIsWDg9YGxpdCQkeyhNYXRoLnJhbmRv''@;'; put 'put ''bSgpKyIiKS5zbGljZSg5KX0kYCxScmU9Ij8iK1g4LGFsdD1gPCR7UnJlfT5gLHBiPWRvY3VtZW50LHdJPSgpPT5wYi5jcmVhdGVDb21tZW50KCIiKSxDST1uPT5udWxsPT09bnx8Im9iamVjdCIhPXR5cGVvZiBuJiYiZnVuY3Rpb24iIT10eXBlb2YgbixTeWU9QXJyYXkuaXNBcnJheSxJcmU9''@;'; put 'put ''IlsgXHRcblxmXHJdIixTST0vPCg/OighLS18XC9bXmEtekEtWl0pfChcLz9bYS16QS1aXVtePlxzXSopfChcLz8kKSkvZyxNeWU9Ly0tPi9nLFR5ZT0vPi9nLGdiPVJlZ0V4cChgPnwke0lyZX0oPzooW15cXHMiJz49L10rKSgke0lyZX0qPSR7SXJlfSooPzpbXiBcdFxuXGZcciInXGA8Pj1d''@;'; put 'put ''fCgifCcpfCkpfCQpYCwiZyIpLHh5ZT0vJy9nLEF5ZT0vIi9nLGt5ZT0vXig/OnNjcmlwdHxzdHlsZXx0ZXh0YXJlYXx0aXRsZSkkL2ksUnllPW49PihlLC4uLnQpPT4oe18kbGl0VHlwZSQ6bixzdHJpbmdzOmUsdmFsdWVzOnR9KSxzbHQ9UnllKDEpLGxsdD1SeWUoMiksREU9U3ltYm9sLmZv''@;'; put 'put ''cigibGl0LW5vQ2hhbmdlIiksZzA9U3ltYm9sLmZvcigibGl0LW5vdGhpbmciKSxJeWU9bmV3IFdlYWtNYXAsbWI9cGIuY3JlYXRlVHJlZVdhbGtlcihwYiwxMjksbnVsbCwhMSk7ZnVuY3Rpb24gRHllKG4sZSl7aWYoIUFycmF5LmlzQXJyYXkobil8fCFuLmhhc093blByb3BlcnR5KCJyYXci''@;'; put 'put ''KSl0aHJvdyBFcnJvcigiaW52YWxpZCB0ZW1wbGF0ZSBzdHJpbmdzIGFycmF5Iik7cmV0dXJuIHZvaWQgMCE9PUN5ZT9DeWUuY3JlYXRlSFRNTChlKTplfWNsYXNzIEVJe2NvbnN0cnVjdG9yKHtzdHJpbmdzOmUsXyRsaXRUeXBlJDp0fSxyKXtsZXQgaTt0aGlzLnBhcnRzPVtdO2xldCBvPTAs''@;'; put 'put ''YT0wO2NvbnN0IGw9ZS5sZW5ndGgtMSx1PXRoaXMucGFydHMsW2csRV09KChuLGUpPT57Y29uc3QgdD1uLmxlbmd0aC0xLHI9W107bGV0IGksbz0yPT09ZT8iPHN2Zz4iOiIiLGE9U0k7Zm9yKGxldCBsPTA7bDx0O2wrKyl7Y29uc3QgdT1uW2xdO2xldCBnLEUsTz0tMSxaPTA7Zm9yKDtaPHUu''@;'; put 'put ''bGVuZ3RoJiYoYS5sYXN0SW5kZXg9WixFPWEuZXhlYyh1KSxudWxsIT09RSk7KVo9YS5sYXN0SW5kZXgsYT09PVNJPyIhLS0iPT09RVsxXT9hPU15ZTp2b2lkIDAhPT1FWzFdP2E9VHllOnZvaWQgMCE9PUVbMl0/KGt5ZS50ZXN0KEVbMl0pJiYoaT1SZWdFeHAoIjwvIitFWzJdLCJnIikpLGE9''@;'; put 'put ''Z2IpOnZvaWQgMCE9PUVbM10mJihhPWdiKTphPT09Z2I/Ij4iPT09RVswXT8oYT1pPz9TSSxPPS0xKTp2b2lkIDA9PT1FWzFdP089LTI6KE89YS5sYXN0SW5kZXgtRVsyXS5sZW5ndGgsZz1FWzFdLGE9dm9pZCAwPT09RVszXT9nYjonIic9PT1FWzNdP0F5ZTp4eWUpOmE9PT1BeWV8fGE9PT14''@;'; put 'put ''eWU/YT1nYjphPT09TXllfHxhPT09VHllP2E9U0k6KGE9Z2IsaT12b2lkIDApO2NvbnN0IGVlPWE9PT1nYiYmbltsKzFdLnN0YXJ0c1dpdGgoIi8+Iik/IiAiOiIiO28rPWE9PT1TST91K2FsdDpPPj0wPyhyLnB1c2goZyksdS5zbGljZSgwLE8pK0RVK3Uuc2xpY2UoTykrWDgrZWUpOnUrWDgr''@;'; put 'put ''KC0yPT09Tz8oci5wdXNoKHZvaWQgMCksbCk6ZWUpfXJldHVybltEeWUobixvKyhuW3RdfHwiPD8+IikrKDI9PT1lPyI8L3N2Zz4iOiIiKSkscl19KShlLHQpO2lmKHRoaXMuZWw9RUkuY3JlYXRlRWxlbWVudChnLHIpLG1iLmN1cnJlbnROb2RlPXRoaXMuZWwuY29udGVudCwyPT09dCl7Y29u''@;'; put 'put ''c3QgTz10aGlzLmVsLmNvbnRlbnQsWj1PLmZpcnN0Q2hpbGQ7Wi5yZW1vdmUoKSxPLmFwcGVuZCguLi5aLmNoaWxkTm9kZXMpfWZvcig7bnVsbCE9PShpPW1iLm5leHROb2RlKCkpJiZ1Lmxlbmd0aDxsOyl7aWYoMT09PWkubm9kZVR5cGUpe2lmKGkuaGFzQXR0cmlidXRlcygpKXtjb25zdCBP''@;'; put 'put ''PVtdO2Zvcihjb25zdCBaIG9mIGkuZ2V0QXR0cmlidXRlTmFtZXMoKSlpZihaLmVuZHNXaXRoKERVKXx8Wi5zdGFydHNXaXRoKFg4KSl7Y29uc3QgZWU9RVthKytdO2lmKE8ucHVzaChaKSx2b2lkIDAhPT1lZSl7Y29uc3QgdmU9aS5nZXRBdHRyaWJ1dGUoZWUudG9Mb3dlckNhc2UoKStEVSku''@;'; put 'put ''c3BsaXQoWDgpLE1lPS8oWy4/QF0pPyguKikvLmV4ZWMoZWUpO3UucHVzaCh7dHlwZToxLGluZGV4Om8sbmFtZTpNZVsyXSxzdHJpbmdzOnZlLGN0b3I6Ii4iPT09TWVbMV0/TnllOiI/Ij09PU1lWzFdP0Z5ZToiQCI9PT1NZVsxXT9QeWU6TUl9KX1lbHNlIHUucHVzaCh7dHlwZTo2LGluZGV4''@;'; put 'put ''Om99KX1mb3IoY29uc3QgWiBvZiBPKWkucmVtb3ZlQXR0cmlidXRlKFopfWlmKGt5ZS50ZXN0KGkudGFnTmFtZSkpe2NvbnN0IE89aS50ZXh0Q29udGVudC5zcGxpdChYOCksWj1PLmxlbmd0aC0xO2lmKFo+MCl7aS50ZXh0Q29udGVudD1JRT9JRS5lbXB0eVNjcmlwdDoiIjtmb3IobGV0IGVl''@;'; put 'put ''PTA7ZWU8WjtlZSsrKWkuYXBwZW5kKE9bZWVdLHdJKCkpLG1iLm5leHROb2RlKCksdS5wdXNoKHt0eXBlOjIsaW5kZXg6KytvfSk7aS5hcHBlbmQoT1taXSx3SSgpKX19fWVsc2UgaWYoOD09PWkubm9kZVR5cGUpaWYoaS5kYXRhPT09UnJlKXUucHVzaCh7dHlwZToyLGluZGV4Om99KTtlbHNl''@;'; put 'put ''e2xldCBPPS0xO2Zvcig7LTEhPT0oTz1pLmRhdGEuaW5kZXhPZihYOCxPKzEpKTspdS5wdXNoKHt0eXBlOjcsaW5kZXg6b30pLE8rPVg4Lmxlbmd0aC0xfW8rK319c3RhdGljIGNyZWF0ZUVsZW1lbnQoZSx0KXtjb25zdCByPXBiLmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIHIu''@;'; put 'put ''aW5uZXJIVE1MPWUscn19ZnVuY3Rpb24gdmIobixlLHQ9bixyKXt2YXIgaSxvLGEsbDtpZihlPT09REUpcmV0dXJuIGU7bGV0IHU9dm9pZCAwIT09cj9udWxsPT09KGk9dC5fJENvKXx8dm9pZCAwPT09aT92b2lkIDA6aVtyXTp0Ll8kQ2w7Y29uc3QgZz1DSShlKT92b2lkIDA6ZS5fJGxpdERp''@;'; put 'put ''cmVjdGl2ZSQ7cmV0dXJuIHU/LmNvbnN0cnVjdG9yIT09ZyYmKG51bGw9PT0obz11Py5fJEFPKXx8dm9pZCAwPT09b3x8by5jYWxsKHUsITEpLHZvaWQgMD09PWc/dT12b2lkIDA6KHU9bmV3IGcobiksdS5fJEFUKG4sdCxyKSksdm9pZCAwIT09cj8obnVsbCE9PShhPShsPXQpLl8kQ28pJiZ2''@;'; put 'put ''b2lkIDAhPT1hP2E6bC5fJENvPVtdKVtyXT11OnQuXyRDbD11KSx2b2lkIDAhPT11JiYoZT12YihuLHUuXyRBUyhuLGUudmFsdWVzKSx1LHIpKSxlfWNsYXNzIE95ZXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuXyRBVj1bXSx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBRD1lLHRoaXMuXyRBTT10''@;'; put 'put ''fWdldCBwYXJlbnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBTS5wYXJlbnROb2RlfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfXUoZSl7dmFyIHQ7Y29uc3R7ZWw6e2NvbnRlbnQ6cn0scGFydHM6aX09dGhpcy5fJEFELG89KG51bGwhPT0odD1lPy5jcmVhdGlvblNjb3BlKSYmdm9p''@;'; put 'put ''ZCAwIT09dD90OnBiKS5pbXBvcnROb2RlKHIsITApO21iLmN1cnJlbnROb2RlPW87bGV0IGE9bWIubmV4dE5vZGUoKSxsPTAsdT0wLGc9aVswXTtmb3IoO3ZvaWQgMCE9PWc7KXtpZihsPT09Zy5pbmRleCl7bGV0IEU7Mj09PWcudHlwZT9FPW5ldyBMRShhLGEubmV4dFNpYmxpbmcsdGhpcyxl''@;'; put 'put ''KToxPT09Zy50eXBlP0U9bmV3IGcuY3RvcihhLGcubmFtZSxnLnN0cmluZ3MsdGhpcyxlKTo2PT09Zy50eXBlJiYoRT1uZXcgSHllKGEsdGhpcyxlKSksdGhpcy5fJEFWLnB1c2goRSksZz1pWysrdV19bCE9PWc/LmluZGV4JiYoYT1tYi5uZXh0Tm9kZSgpLGwrKyl9cmV0dXJuIG1iLmN1cnJl''@;'; put 'put ''bnROb2RlPXBiLG99dihlKXtsZXQgdD0wO2Zvcihjb25zdCByIG9mIHRoaXMuXyRBVil2b2lkIDAhPT1yJiYodm9pZCAwIT09ci5zdHJpbmdzPyhyLl8kQUkoZSxyLHQpLHQrPXIuc3RyaW5ncy5sZW5ndGgtMik6ci5fJEFJKGVbdF0pKSx0Kyt9fWNsYXNzIExFe2NvbnN0cnVjdG9yKGUsdCxy''@;'; put 'put ''LGkpe3ZhciBvO3RoaXMudHlwZT0yLHRoaXMuXyRBSD1nMCx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBQT1lLHRoaXMuXyRBQj10LHRoaXMuXyRBTT1yLHRoaXMub3B0aW9ucz1pLHRoaXMuXyRDcD1udWxsPT09KG89aT8uaXNDb25uZWN0ZWQpfHx2b2lkIDA9PT1vfHxvfWdldCBfJEFVKCl7''@;'; put 'put ''dmFyIGUsdDtyZXR1cm4gbnVsbCE9PSh0PW51bGw9PT0oZT10aGlzLl8kQU0pfHx2b2lkIDA9PT1lP3ZvaWQgMDplLl8kQVUpJiZ2b2lkIDAhPT10P3Q6dGhpcy5fJENwfWdldCBwYXJlbnROb2RlKCl7bGV0IGU9dGhpcy5fJEFBLnBhcmVudE5vZGU7Y29uc3QgdD10aGlzLl8kQU07cmV0dXJu''@;'; put 'put ''IHZvaWQgMCE9PXQmJjExPT09ZT8ubm9kZVR5cGUmJihlPXQucGFyZW50Tm9kZSksZX1nZXQgc3RhcnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBQX1nZXQgZW5kTm9kZSgpe3JldHVybiB0aGlzLl8kQUJ9XyRBSShlLHQ9dGhpcyl7ZT12Yih0aGlzLGUsdCksQ0koZSk/ZT09PWcwfHxudWxsPT1l''@;'; put 'put ''fHwiIj09PWU/KHRoaXMuXyRBSCE9PWcwJiZ0aGlzLl8kQVIoKSx0aGlzLl8kQUg9ZzApOmUhPT10aGlzLl8kQUgmJmUhPT1ERSYmdGhpcy5fKGUpOnZvaWQgMCE9PWUuXyRsaXRUeXBlJD90aGlzLmcoZSk6dm9pZCAwIT09ZS5ub2RlVHlwZT90aGlzLiQoZSk6KG49PlN5ZShuKXx8ImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIG4/LltTeW1ib2wuaXRlcmF0b3JdKShlKT90aGlzLlQoZSk6dGhpcy5fKGUpfWsoZSl7cmV0dXJuIHRoaXMuXyRBQS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMuXyRBQil9JChlKXt0aGlzLl8kQUghPT1lJiYodGhpcy5fJEFSKCksdGhpcy5fJEFIPXRoaXMu''@;'; put 'put ''ayhlKSl9XyhlKXt0aGlzLl8kQUghPT1nMCYmQ0kodGhpcy5fJEFIKT90aGlzLl8kQUEubmV4dFNpYmxpbmcuZGF0YT1lOnRoaXMuJChwYi5jcmVhdGVUZXh0Tm9kZShlKSksdGhpcy5fJEFIPWV9ZyhlKXt2YXIgdDtjb25zdHt2YWx1ZXM6cixfJGxpdFR5cGUkOml9PWUsbz0ibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIGk/dGhpcy5fJEFDKGUpOih2b2lkIDA9PT1pLmVsJiYoaS5lbD1FSS5jcmVhdGVFbGVtZW50KER5ZShpLmgsaS5oWzBdKSx0aGlzLm9wdGlvbnMpKSxpKTtpZigobnVsbD09PSh0PXRoaXMuXyRBSCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuXyRBRCk9PT1vKXRoaXMuXyRBSC52KHIp''@;'; put 'put ''O2Vsc2V7Y29uc3QgYT1uZXcgT3llKG8sdGhpcyksbD1hLnUodGhpcy5vcHRpb25zKTthLnYociksdGhpcy4kKGwpLHRoaXMuXyRBSD1hfX1fJEFDKGUpe2xldCB0PUl5ZS5nZXQoZS5zdHJpbmdzKTtyZXR1cm4gdm9pZCAwPT09dCYmSXllLnNldChlLnN0cmluZ3MsdD1uZXcgRUkoZSkpLHR9''@;'; put 'put ''VChlKXtTeWUodGhpcy5fJEFIKXx8KHRoaXMuXyRBSD1bXSx0aGlzLl8kQVIoKSk7Y29uc3QgdD10aGlzLl8kQUg7bGV0IHIsaT0wO2Zvcihjb25zdCBvIG9mIGUpaT09PXQubGVuZ3RoP3QucHVzaChyPW5ldyBMRSh0aGlzLmsod0koKSksdGhpcy5rKHdJKCkpLHRoaXMsdGhpcy5vcHRpb25z''@;'; put 'put ''KSk6cj10W2ldLHIuXyRBSShvKSxpKys7aTx0Lmxlbmd0aCYmKHRoaXMuXyRBUihyJiZyLl8kQUIubmV4dFNpYmxpbmcsaSksdC5sZW5ndGg9aSl9XyRBUihlPXRoaXMuXyRBQS5uZXh0U2libGluZyx0KXt2YXIgcjtmb3IobnVsbD09PShyPXRoaXMuXyRBUCl8fHZvaWQgMD09PXJ8fHIuY2Fs''@;'; put 'put ''bCh0aGlzLCExLCEwLHQpO2UmJmUhPT10aGlzLl8kQUI7KXtjb25zdCBpPWUubmV4dFNpYmxpbmc7ZS5yZW1vdmUoKSxlPWl9fXNldENvbm5lY3RlZChlKXt2YXIgdDt2b2lkIDA9PT10aGlzLl8kQU0mJih0aGlzLl8kQ3A9ZSxudWxsPT09KHQ9dGhpcy5fJEFQKXx8dm9pZCAwPT09dHx8dC5j''@;'; put 'put ''YWxsKHRoaXMsZSkpfX1jbGFzcyBNSXtjb25zdHJ1Y3RvcihlLHQscixpLG8pe3RoaXMudHlwZT0xLHRoaXMuXyRBSD1nMCx0aGlzLl8kQU49dm9pZCAwLHRoaXMuZWxlbWVudD1lLHRoaXMubmFtZT10LHRoaXMuXyRBTT1pLHRoaXMub3B0aW9ucz1vLHIubGVuZ3RoPjJ8fCIiIT09clswXXx8''@;'; put 'put ''IiIhPT1yWzFdPyh0aGlzLl8kQUg9QXJyYXkoci5sZW5ndGgtMSkuZmlsbChuZXcgU3RyaW5nKSx0aGlzLnN0cmluZ3M9cik6dGhpcy5fJEFIPWcwfWdldCB0YWdOYW1lKCl7cmV0dXJuIHRoaXMuZWxlbWVudC50YWdOYW1lfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfV8kQUko''@;'; put 'put ''ZSx0PXRoaXMscixpKXtjb25zdCBvPXRoaXMuc3RyaW5ncztsZXQgYT0hMTtpZih2b2lkIDA9PT1vKWU9dmIodGhpcyxlLHQsMCksYT0hQ0koZSl8fGUhPT10aGlzLl8kQUgmJmUhPT1ERSxhJiYodGhpcy5fJEFIPWUpO2Vsc2V7Y29uc3QgbD1lO2xldCB1LGc7Zm9yKGU9b1swXSx1PTA7dTxv''@;'; put 'put ''Lmxlbmd0aC0xO3UrKylnPXZiKHRoaXMsbFtyK3VdLHQsdSksZz09PURFJiYoZz10aGlzLl8kQUhbdV0pLGF8fChhPSFDSShnKXx8ZyE9PXRoaXMuXyRBSFt1XSksZz09PWcwP2U9ZzA6ZSE9PWcwJiYoZSs9KGc/PyIiKStvW3UrMV0pLHRoaXMuXyRBSFt1XT1nfWEmJiFpJiZ0aGlzLmooZSl9''@;'; put 'put ''aihlKXtlPT09ZzA/dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpOnRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5uYW1lLGU/PyIiKX19Y2xhc3MgTnllIGV4dGVuZHMgTUl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT0zfWoo''@;'; put 'put ''ZSl7dGhpcy5lbGVtZW50W3RoaXMubmFtZV09ZT09PWcwP3ZvaWQgMDplfX1jb25zdCBjbHQ9SUU/SUUuZW1wdHlTY3JpcHQ6IiI7Y2xhc3MgRnllIGV4dGVuZHMgTUl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT00fWooZSl7ZSYmZSE9PWcwP3RoaXMuZWxl''@;'; put 'put ''bWVudC5zZXRBdHRyaWJ1dGUodGhpcy5uYW1lLGNsdCk6dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpfX1jbGFzcyBQeWUgZXh0ZW5kcyBNSXtjb25zdHJ1Y3RvcihlLHQscixpLG8pe3N1cGVyKGUsdCxyLGksbyksdGhpcy50eXBlPTV9XyRBSShlLHQ9dGhpcyl7dmFy''@;'; put 'put ''IHI7aWYoKGU9bnVsbCE9PShyPXZiKHRoaXMsZSx0LDApKSYmdm9pZCAwIT09cj9yOmcwKT09PURFKXJldHVybjtjb25zdCBpPXRoaXMuXyRBSCxvPWU9PT1nMCYmaSE9PWcwfHxlLmNhcHR1cmUhPT1pLmNhcHR1cmV8fGUub25jZSE9PWkub25jZXx8ZS5wYXNzaXZlIT09aS5wYXNzaXZlLGE9''@;'; put 'put ''ZSE9PWcwJiYoaT09PWcwfHxvKTtvJiZ0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUsdGhpcyxpKSxhJiZ0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUsdGhpcyxlKSx0aGlzLl8kQUg9ZX1oYW5kbGVFdmVudChlKXt2YXIgdCxyOyJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiB0aGlzLl8kQUg/dGhpcy5fJEFILmNhbGwobnVsbCE9PShyPW51bGw9PT0odD10aGlzLm9wdGlvbnMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lmhvc3QpJiZ2b2lkIDAhPT1yP3I6dGhpcy5lbGVtZW50LGUpOnRoaXMuXyRBSC5oYW5kbGVFdmVudChlKX19Y2xhc3MgSHll''@;'; put 'put ''e2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLnR5cGU9Nix0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBTT10LHRoaXMub3B0aW9ucz1yfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfV8kQUkoZSl7dmIodGhpcyxlKX19Y29uc3QgVnllPUlVLmxpdEh0bWxQ''@;'; put 'put ''b2x5ZmlsbFN1cHBvcnQ7dmFyIERyZSxMcmU7VnllPy4oRUksTEUpLChudWxsIT09KGtyZT1JVS5saXRIdG1sVmVyc2lvbnMpJiZ2b2lkIDAhPT1rcmU/a3JlOklVLmxpdEh0bWxWZXJzaW9ucz1bXSkucHVzaCgiMi44LjAiKTtjbGFzcyBUSSBleHRlbmRzIFJFe2NvbnN0cnVjdG9yKCl7c3Vw''@;'; put 'put ''ZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbmRlck9wdGlvbnM9e2hvc3Q6dGhpc30sdGhpcy5fJERvPXZvaWQgMH1jcmVhdGVSZW5kZXJSb290KCl7dmFyIGUsdDtjb25zdCByPXN1cGVyLmNyZWF0ZVJlbmRlclJvb3QoKTtyZXR1cm4gbnVsbCE9PShlPSh0PXRoaXMucmVuZGVyT3B0aW9ucyku''@;'; put 'put ''cmVuZGVyQmVmb3JlKSYmdm9pZCAwIT09ZXx8KHQucmVuZGVyQmVmb3JlPXIuZmlyc3RDaGlsZCkscn11cGRhdGUoZSl7Y29uc3QgdD10aGlzLnJlbmRlcigpO3RoaXMuaGFzVXBkYXRlZHx8KHRoaXMucmVuZGVyT3B0aW9ucy5pc0Nvbm5lY3RlZD10aGlzLmlzQ29ubmVjdGVkKSxzdXBlci51''@;'; put 'put ''cGRhdGUoZSksdGhpcy5fJERvPSgobixlLHQpPT57dmFyIHIsaTtjb25zdCBvPW51bGwhPT0ocj10Py5yZW5kZXJCZWZvcmUpJiZ2b2lkIDAhPT1yP3I6ZTtsZXQgYT1vLl8kbGl0UGFydCQ7aWYodm9pZCAwPT09YSl7Y29uc3QgbD1udWxsIT09KGk9dD8ucmVuZGVyQmVmb3JlKSYmdm9pZCAw''@;'; put 'put ''IT09aT9pOm51bGw7by5fJGxpdFBhcnQkPWE9bmV3IExFKGUuaW5zZXJ0QmVmb3JlKHdJKCksbCksbCx2b2lkIDAsdD8/e30pfXJldHVybiBhLl8kQUkobiksYX0pKHQsdGhpcy5yZW5kZXJSb290LHRoaXMucmVuZGVyT3B0aW9ucyl9Y29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgZTtzdXBlci5j''@;'; put 'put ''b25uZWN0ZWRDYWxsYmFjaygpLG51bGw9PT0oZT10aGlzLl8kRG8pfHx2b2lkIDA9PT1lfHxlLnNldENvbm5lY3RlZCghMCl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgZTtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLG51bGw9PT0oZT10aGlzLl8kRG8pfHx2b2lkIDA9PT1lfHxl''@;'; put 'put ''LnNldENvbm5lY3RlZCghMSl9cmVuZGVyKCl7cmV0dXJuIERFfX1USS5maW5hbGl6ZWQ9ITAsVEkuXyRsaXRFbGVtZW50JD0hMCxudWxsPT09KERyZT1nbG9iYWxUaGlzLmxpdEVsZW1lbnRIeWRyYXRlU3VwcG9ydCl8fHZvaWQgMD09PURyZXx8RHJlLmNhbGwoZ2xvYmFsVGhpcyx7TGl0RWxl''@;'; put 'put ''bWVudDpUSX0pO2NvbnN0IEJ5ZT1nbG9iYWxUaGlzLmxpdEVsZW1lbnRQb2x5ZmlsbFN1cHBvcnQ7QnllPy4oe0xpdEVsZW1lbnQ6VEl9KSwobnVsbCE9PShMcmU9Z2xvYmFsVGhpcy5saXRFbGVtZW50VmVyc2lvbnMpJiZ2b2lkIDAhPT1McmU/THJlOmdsb2JhbFRoaXMubGl0RWxlbWVudFZl''@;'; put 'put ''cnNpb25zPVtdKS5wdXNoKCIzLjMuMyIpO2NvbnN0IGhsdD12eWVgQGNoYXJzZXQgIlVURi04Ijs6aG9zdCw6cm9vdHstLc60Mjp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHMsIGNhbGMoNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQzOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhzLCBjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60NDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1zbSwgY2FsYygxMiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQ1''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLW1kLCBjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDY6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbGcsIGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkp''@;'; put 'put ''KTstLc60Nzp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14bCwgY2FsYygzMiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpfVtjZHMtbGF5b3V0fj0id3JhcDpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJl''@;'; put 'put ''dGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ246c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1ncm93OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgt''@;'; put 'put ''d3JhcDp3cmFwO2p1c3RpZnktaXRlbXM6ZmxleC1zdGFydDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3dpZHRoOjEwMCU7bWFyZ2luOjA7bWluLWhlaWdodDowfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49aG9yaXpvbnRhbF0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxd''@;'; put 'put ''PltjZHMtbGF5b3V0fj12ZXJ0aWNhbF0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtdGV4dF17d2lkdGg6aW5pdGlhbCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5''@;'; put 'put ''b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6''@;'; put 'put ''b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpj''@;'; put 'put ''ZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVy''@;'; put 'put ''OnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2Rz''@;'; put 'put ''LWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnZl''@;'; put 'put ''cnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17bWFyZ2luLWxlZnQ6''@;'; put 'put ''YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdo''@;'; put 'put ''dCJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXXt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRp''@;'; put 'put ''cmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwt''@;'; put 'put ''Y2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXth''@;'; put 'put ''bGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlcjpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246''@;'; put 'put ''aG9yaXpvbnRhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde21hcmdpbi10b3A6YXV0''@;'; put 'put ''bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0''@;'; put 'put ''fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0b31bY2RzLWxheW91dH49Z3JpZF17ZGlzcGxheTpncmlkO2FsaWduLWl0ZW1zOnN0YXJ0O2FsaWduLWNvbnRlbnQ6c3RhcnQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCh2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1ncmlk''@;'; put 'put ''LWNvbHMsMTIpLDFmcik7d2lkdGg6MTAwJX1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9cm93c117Z3JpZC10ZW1wbGF0ZS1yb3dzOnJlcGVhdCgxMixhdXRvKX1bY2RzLWxheW91dH49Z3JpZF0+W2Nkcy1sYXlvdXQqPXJvd117YWxpZ24tc2VsZjpzdHJldGNofVtjZHMtbGF5b3V0''@;'; put 'put ''fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24tY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtq''@;'; put 'put ''dXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpz''@;'; put 'put ''dHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6''@;'; put 'put ''Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxp''@;'; put 'put ''Z246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9OjpzbG90dGVkKFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXSksW2Nkcy1sYXlvdXR+PSJk''@;'; put 'put ''aXNwbGF5OnNjcmVlbi1yZWFkZXItb25seSJde3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDtjbGlwOnJlY3QoMXB4LDFweCwxcHgsMXB4KTtjbGlwLXBhdGg6aW5zZXQoNTAlKTtwYWRkaW5nOjA7Ym9yZGVyOjA7aGVpZ2h0OjFweDt3aWR0aDoxcHg7b3ZlcmZsb3c6aGlkZGVuO3doaXRl''@;'; put 'put ''LXNwYWNlOm5vd3JhcDt0b3A6MDtsZWZ0OjA7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJnYXA6bm9uZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwOnh4cyJde2dhcDp2YXIoLS3OtDIpfVtjZHMtbGF5b3V0Kj0iZ2FwOnhzIl17Z2FwOnZhcigtLc60Myl9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJnYXA6c20iXXtnYXA6dmFyKC0tzrQ0KX1bY2RzLWxheW91dCo9ImdhcDptZCJde2dhcDp2YXIoLS3OtDUpfVtjZHMtbGF5b3V0Kj0iZ2FwOmxnIl17Z2FwOnZhcigtLc60Nil9W2Nkcy1sYXlvdXR+PSJwOm5vbmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cDp4eHMiXXtwYWRkaW5nOnZhcigtLc60MikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDp4cyJde3BhZGRpbmc6dmFyKC0tzrQzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnNtIl17cGFkZGluZzp2YXIoLS3OtDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bWQiXXtwYWRkaW5n''@;'; put 'put ''OnZhcigtLc60NSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTptZCJde21hcmdpbjp2YXIoLS3OtDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bGciXXtwYWRkaW5nOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15OnhzIl17cGFkZGluZy10b3A6dmFyKC0tzrQz''@;'; put 'put ''KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tzrQzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tzrQ2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTpsZyJde3Bh''@;'; put 'put ''ZGRpbmctdG9wOnZhcigtLc60NikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLc60NSkhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dCo9Imdh''@;'; put 'put ''cEBtZDpsZyJde2dhcDp2YXIoLS3OtDYpfVtjZHMtbGF5b3V0fj0icEBtZDpsZyJde3BhZGRpbmc6dmFyKC0tzrQ2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnhsIl17bWFyZ2luOnZhcigtLc60NykhaW1wb3J0YW50fX1bY2RzLWxheW91dH49ZmlsbF17d2lkdGg6MTAwJSFpbXBv''@;'; put 'put ''cnRhbnR9Kiw6YWZ0ZXIsOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3h9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXT46OnNsb3R0ZWQoKiksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bjpzdHJldGNoIl0+OjpzbG90dGVkKCopLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT46OnNsb3R0ZWQoKil7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSks''@;'; put 'put ''W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRl''@;'; put 'put ''ciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl0pe21hcmdpbi1i''@;'; put 'put ''b3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnJp''@;'; put 'put ''Z2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99QG1lZGlhIChtaW4t''@;'; put 'put ''d2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6''@;'; put 'put ''YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLWNlbnRlciJd''@;'; put 'put ''KXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25A''@;'; put 'put ''eHM6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25AeHM6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6''@;'; put 'put ''OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJdKXttYXJnaW4tbGVm''@;'; put 'put ''dDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxp''@;'; put 'put ''Z25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduQG1kOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6''@;'; put 'put ''OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4''@;'; put 'put ''KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2lu''@;'; put 'put ''LWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2Vs''@;'; put 'put ''ZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJd''@;'; put 'put ''KXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxn''@;'; put 'put ''OmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChb''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvfX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9u''@;'; put 'put ''dGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpz''@;'; put 'put ''bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXSl7''@;'; put 'put ''YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246cmln''@;'; put 'put ''aHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49aG9y''@;'; put 'put ''aXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6''@;'; put 'put ''b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJp''@;'; put 'put ''Z2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpi''@;'; put 'put ''b3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduQHhzOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpv''@;'; put 'put ''bnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250''@;'; put 'put ''YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxp''@;'; put 'put ''Z25Ac206dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduQHNtOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6''@;'; put 'put ''OTkycHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNl''@;'; put 'put ''bnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDph''@;'; put 'put ''dXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChb''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduQG1kOmJvdHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpv''@;'; put 'put ''bnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRl''@;'; put 'put ''ciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIi''@;'; put 'put ''XSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpz''@;'; put 'put ''bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6''@;'; put 'put ''b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9y''@;'; put 'put ''dGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNh''@;'; put 'put ''bC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRh''@;'; put 'put ''bC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0''@;'; put 'put ''fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1bY2RzLXRleHRde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseSwg''@;'; put 'put ''IkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjB9W2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ncmlkXTo6YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ncmlkXTo6YmVmb3JlLFtjZHMtdGV4dF1bY2RzLWxheW91''@;'; put 'put ''dH49aG9yaXpvbnRhbF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49aG9yaXpvbnRhbF06OmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXTo6YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF06OmJlZm9yZXtkaXNwbGF5Om5vbmV9W2Nkcy10''@;'; put 'put ''ZXh0Kj1kaXNwbGF5XSxbY2RzLXRleHQqPXNlY3Rpb25dLFtjZHMtdGV4dCo9c3Vic2VjdGlvbl0sW2Nkcy10ZXh0Kj10aXRsZV17Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIs''@;'; put 'put ''IHNhbnMtc2VyaWYpO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwLCMyMTMzM2IpKX1bY2RzLXRleHQqPWJvZHldLFtjZHMtdGV4dCo9bWVzc2FnZV0sW2Nkcy10ZXh0Kj1zZWNvbmRhcnld''@;'; put 'put ''e2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01MDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjaywjMDAwKSl9W2Nkcy10ZXh0Kj1pbmxpbmVde3dpZHRoOmF1dG8haW1wb3J0YW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH1bY2RzLXRleHQqPWRp''@;'; put 'put ''c3BsYXlde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXNpemUsY2FsYyg0MCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWln''@;'; put 'put ''aHQsNTAwKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmcsLS4wMTI1ZW0pfVtjZHMtdGV4dCo9ZGlz''@;'; put 'put ''cGxheV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''ZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWRpc3BsYXldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10''@;'; put 'put ''eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlw''@;'; put 'put ''b2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0LDEuMWVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9dGl0bGVde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC1zaXplLGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKTtsZXR0ZXItc3BhY2luZzp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGV0dGVyLXNwYWNpbmcsLS4wMDgzMzMzM2VtKX1bY2RzLXRleHQqPXRpdGxlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9dGl0bGVdOjphZnRlcntjb250ZW50OiIiO2Rp''@;'; put 'put ''c3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl17Zm9udC1zaXpl''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZSxjYWxjKDIwICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCw1MDApO2xpbmUtaGVp''@;'; put 'put ''Z2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0LDEuMmVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZywtLjAxZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl06OmJlZm9yZXtjb250''@;'; put 'put ''ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdo''@;'; put 'put ''dCwxLjJlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXNlY3Rpb25dOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAt''@;'; put 'put ''aGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxp''@;'; put 'put ''bmUtaGVpZ2h0LDEuMmVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZSxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwy''@;'; put 'put ''MCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEuNWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEuNWVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl06OmFmdGVye2NvbnRl''@;'; put 'put ''bnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAz''@;'; put 'put ''ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQsMS41ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1ib2R5XXtmb250''@;'; put 'put ''LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCw0MDApO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUsY2FsYygxNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bGV0dGVyLXNw''@;'; put 'put ''YWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcsLS4wMDcxNDI4NmVtKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3MTRlbSl9W2Nkcy10ZXh0Kj1ib2R5XTo6YmVmb3Jle2Nv''@;'; put 'put ''bnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0''@;'; put 'put ''LDEuNDI4NTcxNGVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMWVtKX1bY2RzLXRleHQqPWJvZHldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAt''@;'; put 'put ''aGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUt''@;'; put 'put ''aGVpZ2h0LDEuNDI4NTcxNGVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfWJvZHlbY2RzLXRleHQqPWJvZHldOjphZnRlcixib2R5W2Nkcy10ZXh0Kj1ib2R5XTo6YmVmb3Jle2NvbnRlbnQ6bm9uZX1bY2RzLXRleHQqPW1lc3NhZ2Vde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktbWVzc2FnZS1mb250LXNpemUsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC13ZWlnaHQsY2FsYyg0MDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1iYXNlLDIwKSkpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuNWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1sZXR0ZXItc3BhY2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0''@;'; put 'put ''Kj1tZXNzYWdlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuNWVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9bWVzc2FnZV06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGluZS1oZWlnaHQsMS41ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnlde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSxjYWxjKDEzICogMXJlbSAvIHZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0p''@;'; put 'put ''O2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcsLS4wMDc2OTJlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRv''@;'; put 'put ''bTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0''@;'; put 'put ''Kj1zZWNvbmRhcnldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQsMS4yMzA3N2VtKSAtIDFlbSkvIDIpKSotMSkgLSAu''@;'; put 'put ''MDQ0ZW0pfVtjZHMtdGV4dH49bGlua117Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3IsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwjMDA3OWFkKSkhaW1wb3J0YW50O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUhaW1wb3J0YW50O2xpbmUtaGVp''@;'; put 'put ''Z2h0OmluaGVyaXQhaW1wb3J0YW50O2ZvbnQtc2l6ZTppbmhlcml0IWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLEhpZ2hsaWdodCBzb2xpZCAycHgpO291dGxpbmUtb2Zmc2V0OnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQsMXB4KX1bY2RzLXRleHR+PWxpbmtdOmhvdmVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDAsIzAwNjA4YSkp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOnZpc2l0ZWQ6bm90KFtjZHMtdGV4dH49c3RhdGljXSl7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZCx2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC03MDAsIzdjMTJhNSkpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLXRleHR+PWxpbmtdOnZpc2l0ZWQ6bm90KFtjZHMtdGV4dH49c3RhdGljXSk6aG92ZXJ7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZC1ob3Zlcix2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0xMDAwLCMzMjAwNDcpKSFpbXBv''@;'; put 'put ''cnRhbnR9QG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7W2Nkcy10ZXh0PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLXdlYmtpdCw1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3IpfX1b''@;'; put 'put ''Y2RzLXRleHR+PWNvZGVde2NvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwjZTAyMjAwKSk7Zm9udC1mYW1pbHk6bW9ub3NwYWNlfVtjZHMtZGl2aWRlcl17ZGlzcGxheTpibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1ib3JkZXItd2lkdGgtMTAwLGNhbGMoMSAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7b3ZlcmZsb3c6aGlkZGVuO2JveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rp''@;'; put 'put ''b24tMjAwLCNjYmQ0ZDgpKSAwIDAgMCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDAsY2FsYygxICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSBpbnNldH1bY2RzLXRleHR+PWxpZ2h0XXtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9n''@;'; put 'put ''cmFwaHktZm9udC13ZWlnaHQtbGlnaHQsMzAwKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1qdXN0aWZ5XXt0ZXh0LWFsaWduOmp1c3RpZnkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGVmdF17dGV4dC1hbGlnbjpsZWZ0IWltcG9ydGFudH1bY2RzLXRleHR+PXJpZ2h0XXt0ZXh0LWFsaWduOnJpZ2h0''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLXRleHR+PWNlbnRlcl17dGV4dC1hbGlnbjpjZW50ZXIhaW1wb3J0YW50fVtjZHMtdGV4dH49bGhlXXtwYWRkaW5nOi4wNXB4IDB9W2Nkcy10ZXh0fj1saGVdOjpiZWZvcmV7Y29udGVudDoiIjttYXJnaW4tdG9wOi0uMTI0ZW07ZGlzcGxheTpibG9jaztoZWlnaHQ6''@;'; put 'put ''MH1bY2RzLXRleHR+PWxoZV06OmFmdGVye2NvbnRlbnQ6IiI7bWFyZ2luLWJvdHRvbTotLjIyMWVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy10ZXh0Kj1oMl0sW2Nkcy10ZXh0Kj1oM117Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZh''@;'; put 'put ''bWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6MjAwO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDApO2xpbmUtaGVpZ2h0OjEuNzE0M2VtO2xldHRlci1zcGFjaW5nOi0u''@;'; put 'put ''MDE3ODU3ZW19W2Nkcy10ZXh0Kj1oMl06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCgxLjcxNDNlbSAt''@;'; put 'put ''IDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aDJdOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0p''@;'; put 'put ''IC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKDEuNzE0M2VtIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1oM117Zm9u''@;'; put 'put ''dC1zaXplOjEuMXJlbTtsaW5lLWhlaWdodDoxLjA5MDllbTtsZXR0ZXItc3BhY2luZzotLjAxMzYzNmVtfVtjZHMtdGV4dCo9aDNdOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10''@;'; put 'put ''eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygoMS4wOTA5ZW0gLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgzXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAt''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCgx''@;'; put 'put ''LjA5MDllbSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfTpob3N0e2FsbDppbml0aWFsO2Rpc3BsYXk6YmxvY2s7dmlzaWJpbGl0eTppbmhlcml0O2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4''@;'; put 'put ''dCIsIHNhbnMtc2VyaWYpO2NvbnRhaW46bGF5b3V0O2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmUhaW1wb3J0YW50fSosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzppbmhlcml0IWltcG9ydGFudH1zbG90e2ZvbnQtZmFtaWx5OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2Rpc3BsYXk6Y29udGVudHMhaW1wb3J0YW50fTo6c2xvdHRlZCgqKXtmb250LWZhbWlseTppbmhlcml0O2JveC1zaXppbmc6aW5oZXJpdH06OnNsb3R0''@;'; put 'put ''ZWQoKik6OnBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0yMDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwLCM0ZjYxNjkpKX06aG9zdChbX2lzLWFuY2hvcl0pLDpob3N0KFtyb2xlPWJ1dHRvbl0pe2N1cnNvcjpwb2lu''@;'; put 'put ''dGVyIWltcG9ydGFudH06aG9zdChbX2lzLWFuY2hvcl0pIDo6c2xvdHRlZCgqKSw6aG9zdChbcm9sZT1idXR0b25dKSA6OnNsb3R0ZWQoKil7Y3Vyc29yOnBvaW50ZXIhaW1wb3J0YW50fTpob3N0KFtyb2xlPWJ1dHRvbl1bZGlzYWJsZWRdKXtjdXJzb3I6bm90LWFsbG93ZWQhaW1wb3J0YW50''@;'; put 'put ''fTpob3N0KFtyb2xlPWJ1dHRvbl1bZGlzYWJsZWRdKSA6OnNsb3R0ZWQoKil7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudDtwb2ludGVyLWV2ZW50czpub25lfTpob3N0KFtoaWRkZW5dKSxbaGlkZGVuXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fTpob3N0KFtoaWRkZW4qPWZhbHNlXSl7''@;'; put 'put ''ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9Omhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW5dKSw6aG9zdChbcm9sZT1kaWFsb2ddW2hpZGRlbl0pIDo6c2xvdHRlZCgqKXtkaXNwbGF5OmJsb2NrIWltcG9ydGFudDt2aXNpYmlsaXR5OmhpZGRlbiFpbXBvcnRhbnR9Omhvc3QoW3JvbGU9ZGlhbG9n''@;'; put 'put ''XVtoaWRkZW4qPWZhbHNlXSksOmhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW4qPWZhbHNlXSkgOjpzbG90dGVkKCope3Zpc2liaWxpdHk6dmlzaWJsZSFpbXBvcnRhbnR9Omhvc3QoW19mb2N1c2VkXSkgLmlucHV0LDpob3N0KFtfZm9jdXNlZF0pIFtmb2N1c2FibGVdLDpob3N0KFt0YWJpbmRl''@;'; put 'put ''eD0iMCJdOmZvY3VzKSw6aG9zdChbdGFiaW5kZXg9IjAiXTpmb2N1cykgW2ZvY3VzYWJsZV0sW3RhYmluZGV4PSIwIl1bZm9jdXNhYmxlXTpmb2N1c3tvdXRsaW5lOkhpZ2hsaWdodCBzb2xpZCAycHg7b3V0bGluZTo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1v''@;'; put 'put ''ZmZzZXQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLW9mZnNldCwxcHgpfWA7ZnVuY3Rpb24gT3JlKG4pe3JldHVybmBjYWxjKCgke259IC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkgKiAxcmVtKWB9Y2xhc3Mgdmx0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5m''@;'; put 'put ''bj1lLHRoaXMuc3Vic2NyaXB0aW9ucz10fXVuc3Vic2NyaWJlKCl7Y29uc3QgZT10aGlzLnN1YnNjcmlwdGlvbnMuaW5kZXhPZih0aGlzKTstMSE9PWUmJnRoaXMuc3Vic2NyaXB0aW9ucy5zcGxpY2UoZSwxKX19Y29uc3QgTnJlPW5ldyBjbGFzcyBfbHR7Y29uc3RydWN0b3IoKXt0aGlzLnN1''@;'; put 'put ''YnNjcmlwdGlvbnM9W119c3Vic2NyaWJlKGUpe2NvbnN0IHQ9bmV3IHZsdChlLHRoaXMuc3Vic2NyaXB0aW9ucyk7cmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHQpLHR9ZW1pdChlKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCh0PT50LmZuKGUpKX10b0V2ZW50T2JzZXJ2YWJs''@;'; put 'put ''ZSgpe3JldHVybiB0aGlzfX07TnJlLmxpc3RlbmVyPWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkNEU19TVEFURV9VUERBVEUiLG49Pk5yZS5lbWl0KG4uZGV0YWlsKSk7Y2xhc3MgYTR7c3RhdGljIGdldCBzdGF0ZSgpe3JldHVybiBveWUoKSx3aW5kb3cuQ0RTLl9zdGF0ZX1zdGF0aWMg''@;'; put 'put ''Z2V0VmFsdWUoZSl7cmV0dXJuIGE0LnN0YXRlW2VdfXN0YXRpYyBzZXRWYWx1ZShlLHQpe2E0LnN0YXRlW2VdPXR9c3RhdGljIGxvZygpe2JJLmxvZyhKU09OLnN0cmluZ2lmeShhNC5zdGF0ZSxudWxsLDIpKX19YTQuc3RhdGVVcGRhdGVzPU5yZS50b0V2ZW50T2JzZXJ2YWJsZSgpO2NvbnN0''@;'; put 'put ''IHlsdD0obixlKT0+Im1ldGhvZCI9PT1lLmtpbmQmJmUuZGVzY3JpcHRvciYmISgidmFsdWUiaW4gZS5kZXNjcmlwdG9yKT97Li4uZSxmaW5pc2hlcih0KXt0LmNyZWF0ZVByb3BlcnR5KGUua2V5LG4pfX06e2tpbmQ6ImZpZWxkIixrZXk6U3ltYm9sKCkscGxhY2VtZW50OiJvd24iLGRlc2Ny''@;'; put 'put ''aXB0b3I6e30sb3JpZ2luYWxLZXk6ZS5rZXksaW5pdGlhbGl6ZXIoKXsiZnVuY3Rpb24iPT10eXBlb2YgZS5pbml0aWFsaXplciYmKHRoaXNbZS5rZXldPWUuaW5pdGlhbGl6ZXIuY2FsbCh0aGlzKSl9LGZpbmlzaGVyKHQpe3QuY3JlYXRlUHJvcGVydHkoZS5rZXksbil9fTtmdW5jdGlvbiBV''@;'; put 'put ''eWUobil7cmV0dXJuKGUsdCk9PnZvaWQgMCE9PXQ/KChuLGUsdCk9PntlLmNvbnN0cnVjdG9yLmNyZWF0ZVByb3BlcnR5KHQsbil9KShuLGUsdCk6eWx0KG4sZSl9ZnVuY3Rpb24gWXllKG4sZSl7c3dpdGNoKGUmJmUudHlwZSl7Y2FzZSBBcnJheTpjYXNlIE9iamVjdDpyZXR1cm57cmVmbGVj''@;'; put 'put ''dDohMSwuLi5lfTtjYXNlIFN0cmluZzpyZXR1cm57cmVmbGVjdDohMCxhdHRyaWJ1dGU6ZmIobiksY29udmVydGVyOnt0b0F0dHJpYnV0ZTp0PT50fHxudWxsfSwuLi5lfTtjYXNlIE51bWJlcjpyZXR1cm57cmVmbGVjdDohMCxhdHRyaWJ1dGU6ZmIobiksLi4uZX07Y2FzZSBCb29sZWFuOnJl''@;'; put 'put ''dHVybntyZWZsZWN0OiEwLGF0dHJpYnV0ZTpmYihuKSxjb252ZXJ0ZXI6e3RvQXR0cmlidXRlOnQ9PnQ/IiI6bnVsbCxmcm9tQXR0cmlidXRlOnQ9PmZ1bmN0aW9uIERsdChuKXtyZXR1cm4gbnVsbCE9biYmIiIrbiE9ImZhbHNlIn0odCl9LC4uLmV9O2Nhc2UgRGF0ZTpyZXR1cm57cmVmbGVj''@;'; put 'put ''dDohMSxjb252ZXJ0ZXI6e2Zyb21BdHRyaWJ1dGU6dD0+bmV3IERhdGUodCl9LC4uLmV9O2RlZmF1bHQ6cmV0dXJuey4uLmV9fX1mdW5jdGlvbiBjdihuKXtyZXR1cm4oZSx0KT0+KG4/LnJlcXVpcmVkJiZmdW5jdGlvbiBMbHQobixlLHQpe2NvbnN0IHI9bi5maXJzdFVwZGF0ZWQ7bi5maXJz''@;'; put 'put ''dFVwZGF0ZWQ9ZnVuY3Rpb24oaSl7aWYodCYmdC5yZXF1aXJlZCYmeUkodGhpc1tlXSkpe2NvbnN0IG89dC5yZXF1aXJlZE1lc3NhZ2V8fGZ1bmN0aW9uKGE9Indhcm5pbmciLGwsdSl7Y29uc3QgZz11LnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuYCR7bnllKGEpfTogJHtsfSBpcyByZXF1''@;'; put 'put ''aXJlZCB0byB1c2UgJHtnfSBjb21wb25lbnQuIFNldCB0aGUgSlMgUHJvcGVydHkgb3IgSFRNTCBBdHRyaWJ1dGUuXG5cbmArKFhfZSgpP2BBbmd1bGFyOiA8JHtnfSBbJHtsfV09Ii4uLiI+PC8ke2d9PlxuYDoiIikrKEpfZSgpP2BWdWU6IDwke2d9IDoke2x9PSIuLi4iPjwvJHtnfT5cbmA6''@;'; put 'put ''IiIpKyhRX2UoKT9gUmVhY3Q6IDwke2Z1bmN0aW9uIEVzdChuKXtyZXR1cm4gbnllKGZ1bmN0aW9uIFNzdChuKXtyZXR1cm4gbi5zcGxpdCgiLSIpLm1hcCgoZSx0KT0+dD9lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSkudG9Mb3dlckNhc2UoKTplKS5qb2luKCIiKX0obikp''@;'; put 'put ''fShnKX0gJHtFPWwsRS5zdGFydHNXaXRoKCJhcmlhIik/ZmIoRSk6RX09ey4uLn0gLz5cbmA6IiIpK2BIVE1MOiA8JHtnfSAke2ZiKGwpfT0iLi4uIj48LyR7Z30+XG5KYXZhU2NyaXB0OiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcke2d9JykuJHtsfSA9ICcuLi4nO1xuXG5gO3ZhciBFfSh0''@;'; put 'put ''LnJlcXVpcmVkLGUsdGhpcy50YWdOYW1lKTtpZigiZXJyb3IiPT09dC5yZXF1aXJlZCl0aHJvdyBFcnJvcihvKTtiSS53YXJuKG8sdGhpcyl9ciYmci5jYWxsKHRoaXMsaSl9fShlLHQsbiksVXllKFl5ZSh0LG4pKShlLHQpKX12YXIgUGx0PXZ5ZWBAa2V5ZnJhbWVzIGZhZGVJbkFuZE91dHsw''@;'; put 'put ''JSx0b3tvcGFjaXR5OjB9NzUle29wYWNpdHk6MX19Omhvc3R7LS1jb2xvcjpjdXJyZW50Q29sb3I7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttYXJnaW46MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZmlsbDp2YXIoLS1jb2xvcik7Y29sb3I6dmFyKC0tY29sb3IpO2NvbnRhaW46c3RyaWN0O2N1cnNvcjppbmhlcml0fXN2Z3tk''@;'; put 'put ''aXNwbGF5OmJsb2NrfTpob3N0KFtzaXplKj14c10pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''YmFzZSwyMCkpKX06aG9zdChbc2l6ZSo9c21dKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj1tZF0pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTksY2FsYygyNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTksY2FsYygyNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPWxnXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSxjYWxjKDM2ICogMXJlbSAvIHZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPXhsXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMixjYWxjKDQ4ICogMXJlbSAv''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPXh4bF0pe2hlaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMsY2FsYyg2NCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICog''@;'; put 'put ''MXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSk7d2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpO21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWJhc2UsMjApKSkpO21pbi13aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMsY2FsYyg2NCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''YmFzZSwyMCkpKSl9Omhvc3QoW3NpemUqPWZpdF0pe2hlaWdodDphdXRvO3dpZHRoOmF1dG87Y29udGFpbjpsYXlvdXR9Omhvc3QoW3N0YXR1cz1zdWNjZXNzXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAw''@;'; put 'put ''LCAjNDI4MTBlKSl9Omhvc3QoW3N0YXR1cz1kYW5nZXJdKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsICNlMDIyMDApKX06aG9zdChbc3RhdHVzPXdhcm5pbmddKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1z''@;'; put 'put ''dGF0dXMtd2FybmluZy1kYXJrLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0KFtzdGF0dXM9aW5mb10pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9''@;'; put 'put ''Omhvc3QoW3N0YXR1cz1uZXV0cmFsXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCwgIzRmNjE2OSkpfTpob3N0KFtpbnZlcnNlXSl7LS1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNv''@;'; put 'put ''bnN0cnVjdGlvbi0yMDAsICNjYmQ0ZDgpfTpob3N0KFtkaXJlY3Rpb249dXBdKXt0cmFuc2Zvcm06cm90YXRlKDApfTpob3N0KFtkaXJlY3Rpb249ZG93bl0pe3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX06aG9zdChbZGlyZWN0aW9uPXJpZ2h0XSl7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9''@;'; put 'put ''Omhvc3QoW2RpcmVjdGlvbj1sZWZ0XSl7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfTpob3N0KFtmbGlwPWhvcml6b250YWxdKXt0cmFuc2Zvcm06c2NhbGUoLTEpIHJvdGF0ZVgoMTgwZGVnKX06aG9zdChbZmxpcD12ZXJ0aWNhbF0pe3RyYW5zZm9ybTpzY2FsZSgtMSkgcm90YXRlWSgxODBk''@;'; put 'put ''ZWcpfS5hbGVydCwuYmFkZ2V7ZmlsbDp2YXIoLS1iYWRnZS1jb2xvcix2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcix2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsI2UwMjIwMCkpKX06aG9zdChbYmFkZ2U9c3VjY2Vzc10pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXN0YXR1cy1zdWNjZXNzLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCwgIzQyODEwZSkpfTpob3N0KFtiYWRnZT1kYW5nZXJdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsICNlMDIy''@;'; put 'put ''MDApKX06aG9zdChbYmFkZ2UqPXdhcm5pbmddKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0KFtiYWRnZT1pbmhlcml0XSl7LS1iYWRnZS1jb2xvcjpjdXJy''@;'; put 'put ''ZW50Q29sb3J9Omhvc3QoW2JhZGdlPWluZm9dKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwgIzAwNzlhZCkpfTpob3N0KFtiYWRnZT1uZXV0cmFsXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtc3RhdHVzLW5ldXRyYWwsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCwgIzRmNjE2OSkpfTpob3N0KFtiYWRnZT1pbmhlcml0LXRyaWFuZ2xlXSl7LS1iYWRnZS1jb2xvcjpjdXJyZW50Q29sb3J9Omhvc3QoW2JhZGdlXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlciwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAyMjAwKSl9Omhvc3QoW2JhZGdlPXN1Y2Nlc3NdW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2VzcywgdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1ncmVlbi03MDAsICM0MjgxMGUpKX06aG9zdChbYmFkZ2UqPXdhcm5pbmddW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0''@;'; put 'put ''KFtiYWRnZSo9aW5oZXJpdF1baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZT1pbmZvXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8sIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAsICMwMDc5''@;'; put 'put ''YWQpKX0uY2RzLWludGVybmFsLWRvdC0xe2FuaW1hdGlvbjpmYWRlSW5BbmRPdXQgMS44cyBlYXNlLWluIDBzIGluZmluaXRlfS5jZHMtaW50ZXJuYWwtZG90LTJ7YW5pbWF0aW9uOmZhZGVJbkFuZE91dCAxLjhzIGVhc2Utb3V0IC40MjJzIGluZmluaXRlfS5jZHMtaW50ZXJuYWwtZG90LTN7''@;'; put 'put ''YW5pbWF0aW9uOmZhZGVJbkFuZE91dCAxLjhzIGVhc2Utb3V0IC42NzVzIGluZmluaXRlfUBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbil7LmNkcy1pbnRlcm5hbC1kb3QtMSwuY2RzLWludGVybmFsLWRvdC0yLC5jZHMtaW50ZXJuYWwtZG90LTN7YW5pbWF0aW9uOm5vbmV9fWA7Y29u''@;'; put 'put ''c3QgSGx0PVsidW5rbm93biIse291dGxpbmU6JzxjaXJjbGUgY2xhc3M9ImNkcy1pbnRlcm5hbC1kb3QtMyIgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0iY2RzLWludGVybmFsLWRvdC0yIiBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0i''@;'; put 'put ''Y2RzLWludGVybmFsLWRvdC0xIiBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIvPid9XTtjbGFzcyB6bHtzdGF0aWMgZ2V0IHJlZ2lzdHJ5KCl7cmV0dXJue3Vua25vd246SGx0WzFdLC4uLmE0LnN0YXRlLmljb25SZWdpc3RyeX19c3RhdGljIGFkZEljb25zKC4uLmUpe2E0LnN0YXRlLmljb25S''@;'; put 'put ''ZWdpc3RyeT17Li4uYTQuc3RhdGUuaWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhlLmZpbHRlcigoW3RdKT0+IXpsLnJlZ2lzdHJ5W3RdKSl9fXN0YXRpYyBhZGRBbGlhc2VzKC4uLmUpe2NvbnN0IHQ9ZS5maWx0ZXIoKFtyXSk9PnpsLnJlZ2lzdHJ5W3JdKS5mbGF0TWFwKChb''@;'; put 'put ''cixpXSk9PmkubWFwKG89PltvLHpsLnJlZ2lzdHJ5W3JdXSkpO2E0LnN0YXRlLmljb25SZWdpc3RyeT17Li4uYTQuc3RhdGUuaWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyh0KX19c3RhdGljIGdldEljb25OYW1lRnJvbVNoYXBlKGUpe3JldHVybiBlWzBdfX12YXIgUDUsbjtm''@;'; put 'put ''dW5jdGlvbiBabHQobixlKXtsZXQgdD0iIjtzd2l0Y2goZnVuY3Rpb24gemx0KG4pe3N3aXRjaCghMCl7Y2FzZSB5SShuKTpyZXR1cm4gUDUuTmlsU2l6ZVZhbHVlO2Nhc2UgZnVuY3Rpb24gR3llKG4pe3JldHVyblsieHhzIiwieHMiLCJzbSIsIm1kIiwibGciLCJ4bCIsInh4bCJdLmluZGV4''@;'; put 'put ''T2Yobik+LTF9KG4pOnJldHVybiBQNS5WYWxpZFNpemVTdHJpbmc7Y2FzZSBmdW5jdGlvbiBVX2Uobil7cmV0dXJuIGhyZShuKSYmIUJfZShuLnRyaW0oKSkmJituPT0rbn0obik6cmV0dXJuIFA1LlZhbGlkTnVtZXJpY1N0cmluZztkZWZhdWx0OnJldHVybiBQNS5CYWRTaXplVmFsdWV9fShm''@;'; put 'put ''dW5jdGlvbiBXbHQobil7cmV0dXJuIHlJKG4pPyIiOmZ1bmN0aW9uIE1zdChuLGUsdD0iIil7Y29uc3Qgcj1uLnNwbGl0KCIgIiksaT0iIj09PXQ/ci5maWx0ZXIobz0+byE9PWUpOnIubWFwKG89Pm89PT1lP3Q6byk7cmV0dXJuIGkubGVuZ3RoPjA/aS5qb2luKCIgIik6IiJ9KG4sImZpdCIp''@;'; put 'put ''fShlKSkpe2Nhc2UgUDUuVmFsaWROdW1lcmljU3RyaW5nOnJldHVybiB0PU9yZShwYXJzZUludChlKSksdm9pZCBmdW5jdGlvbiBnbHQobiwuLi5lKXtlLmZvckVhY2goKFt0LHJdKT0+e24uc3R5bGVbdF09cn0pfShuLC4uLmZ1bmN0aW9uIFlsdChuLGUpe3JldHVybiFfSShuKSYmbi5pbmRl''@;'; put 'put ''eE9mKCJmaXQiKT4tMT9bWyJ3aWR0aCIsImF1dG8iXSxbImhlaWdodCIsImF1dG8iXSxbIm1pbi13aWR0aCIsZV0sWyJtaW4taGVpZ2h0IixlXV06W1sid2lkdGgiLGVdLFsiaGVpZ2h0IixlXSxbIm1pbi13aWR0aCIsZV0sWyJtaW4taGVpZ2h0IixlXV19KGUsdCkpO2Nhc2UgUDUuVmFsaWRT''@;'; put 'put ''aXplU3RyaW5nOmNhc2UgUDUuTmlsU2l6ZVZhbHVlOnJldHVybiB2b2lkIGZ1bmN0aW9uIG1sdChuLC4uLmUpe2UuZm9yRWFjaCh0PT57bi5zdHlsZVt0XT0iIn0pfShuLCJ3aWR0aCIsImhlaWdodCIsIm1pbi13aWR0aCIsIm1pbi1oZWlnaHQiKTtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24g''@;'; put 'put ''RnJlKG4pe3JldHVybiBuLmJhZGdlJiYoImluaGVyaXQtdHJpYW5nbGUiPT09bi5iYWRnZXx8Indhcm5pbmctdHJpYW5nbGUiPT09bi5iYWRnZSl9KG49UDV8fChQNT17fSkpLkJhZFNpemVWYWx1ZT0iYmFkLXZhbHVlIixuLlZhbGlkU2l6ZVN0cmluZz0idmFsdWUtaXMtc3RyaW5nIixuLlZh''@;'; put 'put ''bGlkTnVtZXJpY1N0cmluZz0idmFsdWUtaXMtbnVtZXJpYyIsbi5OaWxTaXplVmFsdWU9InZhbHVlLWlzLW5pbCI7Y2xhc3MgczQgZXh0ZW5kcyBUSXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fc2hhcGU9InVua25vd24iLHRoaXMuc29saWQ9ITEsdGhpcy5pbnZl''@;'; put 'put ''cnNlPSExfXN0YXRpYyBnZXQgc3R5bGVzKCl7cmV0dXJuW2hsdCxQbHRdfWdldCBzaGFwZSgpe3JldHVybiB0aGlzLl9zaGFwZX1zZXQgc2hhcGUoZSl7aWYoZnVuY3Rpb24gcnN0KG4sZSl7cmV0dXJuIXlJKG4pJiZXX2UobixlKX0oZSx0aGlzLl9zaGFwZSkpe2NvbnN0IHQ9dGhpcy5fc2hh''@;'; put 'put ''cGU7dGhpcy5fc2hhcGU9ZSx0aGlzLnJlcXVlc3RVcGRhdGUoInNoYXBlIix0KX19Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1zZXQgc2l6ZShlKXtpZihmdW5jdGlvbiBuc3QobixlKXtyZXR1cm4gZnVuY3Rpb24gdHN0KG4pe3JldHVybiBrX2UoU3RyaW5nLG4pfHxfSShuKX0obikm''@;'; put 'put ''JldfZShuLGUpfShlLHRoaXMuX3NpemUpKXtjb25zdCB0PXRoaXMuX3NpemU7dGhpcy5fc2l6ZT1lLFpsdCh0aGlzLGUpLHRoaXMucmVxdWVzdFVwZGF0ZSgic2l6ZSIsdCl9fXVwZGF0ZWQoZSl7aWYoZS5oYXMoImlubmVyT2Zmc2V0IikmJnRoaXMuaW5uZXJPZmZzZXQ+MCl7Y29uc3QgdD1P''@;'; put 'put ''cmUoLTEqdGhpcy5pbm5lck9mZnNldCkscj1gY2FsYygxMDAlICsgJHtPcmUoMip0aGlzLmlubmVyT2Zmc2V0KX0pYDt0aGlzLnN2Zy5zdHlsZS53aWR0aD1yLHRoaXMuc3ZnLnN0eWxlLmhlaWdodD1yLHRoaXMuc3ZnLnN0eWxlLm1hcmdpbj1gJHt0fSAwIDAgJHt0fWB9fWZpcnN0VXBkYXRl''@;'; put 'put ''ZChlKXtpZihzdXBlci5maXJzdFVwZGF0ZWQoZSksdGhpcy5pc0Nvbm5lY3RlZCl7bGV0IHQ9InVua25vd24iO3RoaXMuc3Vic2NyaXB0aW9uPWE0LnN0YXRlVXBkYXRlcy5zdWJzY3JpYmUocj0+eyJpY29uUmVnaXN0cnkiPT09ci5rZXkmJnpsLnJlZ2lzdHJ5W3RoaXMuc2hhcGVdJiZ0IT09''@;'; put 'put ''dGhpcy5zaGFwZSYmKHQ9dGhpcy5zaGFwZSx0aGlzLnJlcXVlc3RVcGRhdGUoInNoYXBlIikpfSl9fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1yZW5kZXIoKXtyZXR1cm4gaHJlKHps''@;'; put 'put ''LnJlZ2lzdHJ5W3RoaXMuc2hhcGVdKT9zbHRgPHNwYW4gLmlubmVySFRNTD0iJHt6bC5yZWdpc3RyeVt0aGlzLnNoYXBlXX0iPjwvc3Bhbj5gOmxsdGA8c3ZnIC5pbm5lckhUTUw9IiR7ZnVuY3Rpb24gJGx0KG4pe2NvbnN0IGU9emwucmVnaXN0cnlbbi5zaGFwZV0/P3psLnJlZ2lzdHJ5LnVu''@;'; put 'put ''a25vd247bGV0IHQ9bi5zb2xpZCYmZS5zb2xpZD9lLnNvbGlkOmUub3V0bGluZTtyZXR1cm4gbi5iYWRnZSYmIUZyZShuKSYmKHQ9bi5zb2xpZD9lLnNvbGlkQmFkZ2VkPz90OmUub3V0bGluZUJhZGdlZD8/dCksRnJlKG4pJiYodD1uLnNvbGlkP2Uuc29saWRBbGVydGVkPz90OmUub3V0bGlu''@;'; put 'put ''ZUFsZXJ0ZWQ/P3QpLHR9KHRoaXMpK2Z1bmN0aW9uIEdsdChuKXtsZXQgZT0iIjtyZXR1cm4gbi5iYWRnZSYmRnJlKG4pP2U9JzxwYXRoIGQ9Ik0yNi44NSAxLjE0TDIxLjEzIDExYTEuMjggMS4yOCAwIDAwMS4xIDJoMTEuNDVhMS4yOCAxLjI4IDAgMDAxLjEtMmwtNS43Mi05Ljg2YTEuMjgg''@;'; put 'put ''MS4yOCAwIDAwLTIuMjEgMHoiIGNsYXNzPSJhbGVydCIgLz4nOm4uYmFkZ2UmJihlPSc8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJiYWRnZSIgLz4nKSxlfSh0aGlzKX0iIHZpZXdCb3g9IjAgMCAzNiAzNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBh''@;'; put 'put ''cmlhLWhpZGRlbj0idHJ1ZSI+PC9zdmc+YH19ZnVuY3Rpb24geEkobil7cmV0dXJuISFuJiYobiBpbnN0YW5jZW9mIGhvfHxabihuLmxpZnQpJiZabihuLnN1YnNjcmliZSkpfW80KFtjdih7dHlwZTpTdHJpbmd9KV0sczQucHJvdG90eXBlLCJzaGFwZSIsbnVsbCksbzQoW2N2KHt0eXBlOlN0''@;'; put 'put ''cmluZ30pXSxzNC5wcm90b3R5cGUsInNpemUiLG51bGwpLG80KFtjdih7dHlwZTpTdHJpbmd9KV0sczQucHJvdG90eXBlLCJkaXJlY3Rpb24iLHZvaWQgMCksbzQoW2N2KHt0eXBlOlN0cmluZ30pXSxzNC5wcm90b3R5cGUsImZsaXAiLHZvaWQgMCksbzQoW2N2KHt0eXBlOkJvb2xlYW59KV0s''@;'; put 'put ''czQucHJvdG90eXBlLCJzb2xpZCIsdm9pZCAwKSxvNChbY3Yoe3R5cGU6U3RyaW5nfSldLHM0LnByb3RvdHlwZSwic3RhdHVzIix2b2lkIDApLG80KFtjdih7dHlwZTpCb29sZWFufSldLHM0LnByb3RvdHlwZSwiaW52ZXJzZSIsdm9pZCAwKSxvNChbY3Yoe3R5cGU6U3RyaW5nfSldLHM0LnBy''@;'; put 'put ''b3RvdHlwZSwiYmFkZ2UiLHZvaWQgMCksbzQoW2Z1bmN0aW9uIE9sdChuKXtyZXR1cm4oZSx0KT0+e2NvbnN0IHI9WXllKHQsbik7cmV0dXJuIHImJihyLnJlZmxlY3Q9ISFuPy5yZWZsZWN0JiZuLnJlZmxlY3Qsci5yZWZsZWN0JiYhbj8uYXR0cmlidXRlJiYoci5hdHRyaWJ1dGU9Il8iK2Zi''@;'; put 'put ''KHQpKSksVXllKHIpKGUsdCl9fSh7dHlwZTpOdW1iZXJ9KV0sczQucHJvdG90eXBlLCJpbm5lck9mZnNldCIsdm9pZCAwKSxvNChbZnVuY3Rpb24gRmx0KG4sZSl7cmV0dXJuKCh7ZmluaXNoZXI6bixkZXNjcmlwdG9yOmV9KT0+KHQscik9Pnt2YXIgaTtpZih2b2lkIDA9PT1yKXtjb25zdCBv''@;'; put 'put ''PW51bGwhPT0oaT10Lm9yaWdpbmFsS2V5KSYmdm9pZCAwIT09aT9pOnQua2V5LGE9bnVsbCE9ZT97a2luZDoibWV0aG9kIixwbGFjZW1lbnQ6InByb3RvdHlwZSIsa2V5Om8sZGVzY3JpcHRvcjplKHQua2V5KX06ey4uLnQsa2V5Om99O3JldHVybiBudWxsIT1uJiYoYS5maW5pc2hlcj1mdW5j''@;'; put 'put ''dGlvbihsKXtuKGwsbyl9KSxhfXtjb25zdCBvPXQuY29uc3RydWN0b3I7dm9pZCAwIT09ZSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixlKHIpKSxuPy4obyxyKX19KSh7ZGVzY3JpcHRvcjp0PT57Y29uc3Qgcj17Z2V0KCl7dmFyIGksbztyZXR1cm4gbnVsbCE9PShvPW51bGw9PT0oaT10''@;'; put 'put ''aGlzLnJlbmRlclJvb3QpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnF1ZXJ5U2VsZWN0b3IobikpJiZ2b2lkIDAhPT1vP286bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9O2lmKGUpe2NvbnN0IGk9InN5bWJvbCI9PXR5cGVvZiB0P1N5bWJvbCgpOiJfXyIrdDtyLmdldD1mdW5j''@;'; put 'put ''dGlvbigpe3ZhciBvLGE7cmV0dXJuIHZvaWQgMD09PXRoaXNbaV0mJih0aGlzW2ldPW51bGwhPT0oYT1udWxsPT09KG89dGhpcy5yZW5kZXJSb290KXx8dm9pZCAwPT09bz92b2lkIDA6by5xdWVyeVNlbGVjdG9yKG4pKSYmdm9pZCAwIT09YT9hOm51bGwpLHRoaXNbaV19fXJldHVybiByfX0p''@;'; put 'put ''fSgic3ZnIildLHM0LnByb3RvdHlwZSwic3ZnIix2b2lkIDApLGZ1bmN0aW9uIFJzdChuLGUpeyRfZSgpJiZxX2UoWyJjdXN0b21FbGVtZW50cyJdKSYma3N0KG4sZSx3aW5kb3cuY3VzdG9tRWxlbWVudHMpfSgiY2RzLWljb24iLHM0KTtjb25zdCBQcmU9bj0+biYmIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBuLmxlbmd0aCYmImZ1bmN0aW9uIiE9dHlwZW9mIG47ZnVuY3Rpb24gJHllKG4pe3JldHVybiBabihuPy50aGVuKX1mdW5jdGlvbiBxeWUobil7cmV0dXJuIFpuKG5bZWFdKX1mdW5jdGlvbiBLeWUobil7cmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yJiZabihuPy5bU3ltYm9sLmFzeW5j''@;'; put 'put ''SXRlcmF0b3JdKX1mdW5jdGlvbiBYeWUobil7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYFlvdSBwcm92aWRlZCAke251bGwhPT1uJiYib2JqZWN0Ij09dHlwZW9mIG4/ImFuIGludmFsaWQgb2JqZWN0IjpgJyR7bn0nYH0gd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3Zp''@;'; put 'put ''ZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5gKX1jb25zdCBReWU9ZnVuY3Rpb24gdGN0KCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVy''@;'; put 'put ''YXRvcjoiQEBpdGVyYXRvciJ9KCk7ZnVuY3Rpb24gSnllKG4pe3JldHVybiBabihuPy5bUXllXSl9ZnVuY3Rpb24gZWJlKG4pe3JldHVybiBmdW5jdGlvbiBjeWUobixlLHQpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRv''@;'; put 'put ''ciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgaSxyPXQuYXBwbHkobixlfHxbXSksbz1bXTtyZXR1cm4gaT1PYmplY3QuY3JlYXRlKCgiZnVuY3Rpb24iPT10eXBlb2YgQXN5bmNJdGVyYXRvcj9Bc3luY0l0ZXJhdG9yOk9iamVjdCkucHJvdG90eXBlKSxsKCJuZXh0IiksbCgidGhyb3ciKSxsKCJy''@;'; put 'put ''ZXR1cm4iLGZ1bmN0aW9uIGEoZWUpe3JldHVybiBmdW5jdGlvbih2ZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh2ZSkudGhlbihlZSxPKX19KSxpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxpO2Z1bmN0aW9uIGwoZWUsdmUpe3JbZWVdJiYoaVtlZV09''@;'; put 'put ''ZnVuY3Rpb24oTWUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihIZSxXZSl7by5wdXNoKFtlZSxNZSxIZSxXZV0pPjF8fHUoZWUsTWUpfSl9LHZlJiYoaVtlZV09dmUoaVtlZV0pKSl9ZnVuY3Rpb24gdShlZSx2ZSl7dHJ5eyFmdW5jdGlvbiBnKGVlKXtlZS52YWx1ZSBpbnN0YW5jZW9m''@;'; put 'put ''IGx2P1Byb21pc2UucmVzb2x2ZShlZS52YWx1ZS52KS50aGVuKEUsTyk6WihvWzBdWzJdLGVlKX0ocltlZV0odmUpKX1jYXRjaChNZSl7WihvWzBdWzNdLE1lKX19ZnVuY3Rpb24gRShlZSl7dSgibmV4dCIsZWUpfWZ1bmN0aW9uIE8oZWUpe3UoInRocm93IixlZSl9ZnVuY3Rpb24gWihlZSx2''@;'; put 'put ''ZSl7ZWUodmUpLG8uc2hpZnQoKSxvLmxlbmd0aCYmdShvWzBdWzBdLG9bMF1bMV0pfX0odGhpcyxhcmd1bWVudHMsZnVuY3Rpb24qKCl7Y29uc3QgdD1uLmdldFJlYWRlcigpO3RyeXtmb3IoOzspe2NvbnN0e3ZhbHVlOnIsZG9uZTppfT15aWVsZCBsdih0LnJlYWQoKSk7aWYoaSlyZXR1cm4g''@;'; put 'put ''eWllbGQgbHYodm9pZCAwKTt5aWVsZCB5aWVsZCBsdihyKX19ZmluYWxseXt0LnJlbGVhc2VMb2NrKCl9fSl9ZnVuY3Rpb24gdGJlKG4pe3JldHVybiBabihuPy5nZXRSZWFkZXIpfWZ1bmN0aW9uIE4yKG4pe2lmKG4gaW5zdGFuY2VvZiBobylyZXR1cm4gbjtpZihudWxsIT1uKXtpZihxeWUo''@;'; put 'put ''bikpcmV0dXJuIGZ1bmN0aW9uIG5jdChuKXtyZXR1cm4gbmV3IGhvKGU9Pntjb25zdCB0PW5bZWFdKCk7aWYoWm4odC5zdWJzY3JpYmUpKXJldHVybiB0LnN1YnNjcmliZShlKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVu''@;'; put 'put ''dCBTeW1ib2wub2JzZXJ2YWJsZSIpfSl9KG4pO2lmKFByZShuKSlyZXR1cm4gZnVuY3Rpb24gcmN0KG4pe3JldHVybiBuZXcgaG8oZT0+e2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGgmJiFlLmNsb3NlZDt0KyspZS5uZXh0KG5bdF0pO2UuY29tcGxldGUoKX0pfShuKTtpZigkeWUobikpcmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uIGljdChuKXtyZXR1cm4gbmV3IGhvKGU9PntuLnRoZW4odD0+e2UuY2xvc2VkfHwoZS5uZXh0KHQpLGUuY29tcGxldGUoKSl9LHQ9PmUuZXJyb3IodCkpLnRoZW4obnVsbCxNaSl9KX0obik7aWYoS3llKG4pKXJldHVybiBuYmUobik7aWYoSnllKG4pKXJldHVybiBmdW5jdGlv''@;'; put 'put ''biBvY3Qobil7cmV0dXJuIG5ldyBobyhlPT57Zm9yKGNvbnN0IHQgb2YgbilpZihlLm5leHQodCksZS5jbG9zZWQpcmV0dXJuO2UuY29tcGxldGUoKX0pfShuKTtpZih0YmUobikpcmV0dXJuIGZ1bmN0aW9uIGFjdChuKXtyZXR1cm4gbmJlKGViZShuKSl9KG4pfXRocm93IFh5ZShuKX1mdW5j''@;'; put 'put ''dGlvbiBuYmUobil7cmV0dXJuIG5ldyBobyhlPT57KGZ1bmN0aW9uIHNjdChuLGUpe3ZhciB0LHIsaSxvO3JldHVybiBmdW5jdGlvbiBzeWUobixlLHQscil7cmV0dXJuIG5ldyh0fHwodD1Qcm9taXNlKSkoZnVuY3Rpb24obyxhKXtmdW5jdGlvbiBsKEUpe3RyeXtnKHIubmV4dChFKSl9Y2F0''@;'; put 'put ''Y2goTyl7YShPKX19ZnVuY3Rpb24gdShFKXt0cnl7ZyhyLnRocm93KEUpKX1jYXRjaChPKXthKE8pfX1mdW5jdGlvbiBnKEUpe0UuZG9uZT9vKEUudmFsdWUpOmZ1bmN0aW9uIGkobyl7cmV0dXJuIG8gaW5zdGFuY2VvZiB0P286bmV3IHQoZnVuY3Rpb24oYSl7YShvKX0pfShFLnZhbHVlKS50''@;'; put 'put ''aGVuKGwsdSl9Zygocj1yLmFwcGx5KG4sZXx8W10pKS5uZXh0KCkpfSl9KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0cnl7Zm9yKHQ9dXllKG4pOyEocj15aWVsZCB0Lm5leHQoKSkuZG9uZTspaWYoZS5uZXh0KHIudmFsdWUpLGUuY2xvc2VkKXJldHVybn1jYXRjaChhKXtpPXtl''@;'; put 'put ''cnJvcjphfX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYobz10LnJldHVybikmJih5aWVsZCBvLmNhbGwodCkpfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX1lLmNvbXBsZXRlKCl9KX0pKG4sZSkuY2F0Y2godD0+ZS5lcnJvcih0KSl9KX1mdW5jdGlvbiBROChuLGUsdCxyPTAsaT0hMSl7''@;'; put 'put ''Y29uc3Qgbz1lLnNjaGVkdWxlKGZ1bmN0aW9uKCl7dCgpLGk/bi5hZGQodGhpcy5zY2hlZHVsZShudWxsLHIpKTp0aGlzLnVuc3Vic2NyaWJlKCl9LHIpO2lmKG4uYWRkKG8pLCFpKXJldHVybiBvfWZ1bmN0aW9uIHJiZShuLGU9MCl7cmV0dXJuIGFkKCh0LHIpPT57dC5zdWJzY3JpYmUodnUo''@;'; put 'put ''cixpPT5ROChyLG4sKCk9PnIubmV4dChpKSxlKSwoKT0+UTgocixuLCgpPT5yLmNvbXBsZXRlKCksZSksaT0+UTgocixuLCgpPT5yLmVycm9yKGkpLGUpKSl9KX1mdW5jdGlvbiBpYmUobixlPTApe3JldHVybiBhZCgodCxyKT0+e3IuYWRkKG4uc2NoZWR1bGUoKCk9PnQuc3Vic2NyaWJlKHIp''@;'; put 'put ''LGUpKX0pfWZ1bmN0aW9uIG9iZShuLGUpe2lmKCFuKXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IGhvKHQ9PntROCh0LGUsKCk9Pntjb25zdCByPW5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7UTgodCxlLCgpPT57ci5uZXh0KCkudGhlbihp''@;'; put 'put ''PT57aS5kb25lP3QuY29tcGxldGUoKTp0Lm5leHQoaS52YWx1ZSl9KX0sMCwhMCl9KX0pfWZ1bmN0aW9uIFoxKG4sZSl7cmV0dXJuIGU/ZnVuY3Rpb24gZmN0KG4sZSl7aWYobnVsbCE9bil7aWYocXllKG4pKXJldHVybiBmdW5jdGlvbiBsY3QobixlKXtyZXR1cm4gTjIobikucGlwZShpYmUo''@;'; put 'put ''ZSkscmJlKGUpKX0obixlKTtpZihQcmUobikpcmV0dXJuIGZ1bmN0aW9uIHVjdChuLGUpe3JldHVybiBuZXcgaG8odD0+e2xldCByPTA7cmV0dXJuIGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyPT09bi5sZW5ndGg/dC5jb21wbGV0ZSgpOih0Lm5leHQobltyKytdKSx0LmNsb3NlZHx8dGhpcy5z''@;'; put 'put ''Y2hlZHVsZSgpKX0pfSl9KG4sZSk7aWYoJHllKG4pKXJldHVybiBmdW5jdGlvbiBjY3QobixlKXtyZXR1cm4gTjIobikucGlwZShpYmUoZSkscmJlKGUpKX0obixlKTtpZihLeWUobikpcmV0dXJuIG9iZShuLGUpO2lmKEp5ZShuKSlyZXR1cm4gZnVuY3Rpb24gZGN0KG4sZSl7cmV0dXJuIG5l''@;'; put 'put ''dyBobyh0PT57bGV0IHI7cmV0dXJuIFE4KHQsZSwoKT0+e3I9bltReWVdKCksUTgodCxlLCgpPT57bGV0IGksbzt0cnl7KHt2YWx1ZTppLGRvbmU6b309ci5uZXh0KCkpfWNhdGNoKGEpe3JldHVybiB2b2lkIHQuZXJyb3IoYSl9bz90LmNvbXBsZXRlKCk6dC5uZXh0KGkpfSwwLCEwKX0pLCgp''@;'; put 'put ''PT5abihyPy5yZXR1cm4pJiZyLnJldHVybigpfSl9KG4sZSk7aWYodGJlKG4pKXJldHVybiBmdW5jdGlvbiBoY3QobixlKXtyZXR1cm4gb2JlKGViZShuKSxlKX0obixlKX10aHJvdyBYeWUobil9KG4sZSk6TjIobil9ZnVuY3Rpb24gYWJlKG4pe3JldHVybiBuJiZabihuLnNjaGVkdWxlKX1m''@;'; put 'put ''dW5jdGlvbiBIcmUobil7cmV0dXJuIG5bbi5sZW5ndGgtMV19ZnVuY3Rpb24gc2JlKG4pe3JldHVybiBabihIcmUobikpP24ucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIEFJKG4pe3JldHVybiBhYmUoSHJlKG4pKT9uLnBvcCgpOnZvaWQgMH1mdW5jdGlvbiBQYSguLi5uKXtyZXR1cm4gWjEobixB''@;'; put 'put ''SShuKSl9Y29uc3R7aXNBcnJheTpnY3R9PUFycmF5LHtnZXRQcm90b3R5cGVPZjptY3QscHJvdG90eXBlOnZjdCxrZXlzOl9jdH09T2JqZWN0O2Z1bmN0aW9uIGxiZShuKXtpZigxPT09bi5sZW5ndGgpe2NvbnN0IGU9blswXTtpZihnY3QoZSkpcmV0dXJue2FyZ3M6ZSxrZXlzOm51bGx9O2lm''@;'; put 'put ''KGZ1bmN0aW9uIHljdChuKXtyZXR1cm4gbiYmIm9iamVjdCI9PXR5cGVvZiBuJiZtY3Qobik9PT12Y3R9KGUpKXtjb25zdCB0PV9jdChlKTtyZXR1cm57YXJnczp0Lm1hcChyPT5lW3JdKSxrZXlzOnR9fX1yZXR1cm57YXJnczpuLGtleXM6bnVsbH19Y29uc3R7aXNBcnJheTpiY3R9PUFycmF5''@;'; put 'put ''O2Z1bmN0aW9uIFZyZShuKXtyZXR1cm4gRXMoZT0+ZnVuY3Rpb24gd2N0KG4sZSl7cmV0dXJuIGJjdChlKT9uKC4uLmUpOm4oZSl9KG4sZSkpfWZ1bmN0aW9uIGNiZShuLGUpe3JldHVybiBuLnJlZHVjZSgodCxyLGkpPT4odFtyXT1lW2ldLHQpLHt9KX1mdW5jdGlvbiBfYiguLi5uKXtjb25z''@;'; put 'put ''dCBlPUFJKG4pLHQ9c2JlKG4pLHthcmdzOnIsa2V5czppfT1sYmUobik7aWYoMD09PXIubGVuZ3RoKXJldHVybiBaMShbXSxlKTtjb25zdCBvPW5ldyBobyhmdW5jdGlvbiBDY3QobixlLHQ9cmEpe3JldHVybiByPT57dWJlKGUsKCk9Pntjb25zdHtsZW5ndGg6aX09bixvPW5ldyBBcnJheShp''@;'; put 'put ''KTtsZXQgYT1pLGw9aTtmb3IobGV0IHU9MDt1PGk7dSsrKXViZShlLCgpPT57Y29uc3QgZz1aMShuW3VdLGUpO2xldCBFPSExO2cuc3Vic2NyaWJlKHZ1KHIsTz0+e29bdV09TyxFfHwoRT0hMCxsLS0pLGx8fHIubmV4dCh0KG8uc2xpY2UoKSkpfSwoKT0+ey0tYXx8ci5jb21wbGV0ZSgpfSkp''@;'; put 'put ''fSxyKX0scil9fShyLGUsaT9hPT5jYmUoaSxhKTpyYSkpO3JldHVybiB0P28ucGlwZShWcmUodCkpOm99ZnVuY3Rpb24gdWJlKG4sZSx0KXtuP1E4KHQsbixlKTplKCl9Y29uc3QgTFU9U24obj0+ZnVuY3Rpb24oKXtuKHRoaXMpLHRoaXMubmFtZT0iRW1wdHlFcnJvciIsdGhpcy5tZXNzYWdl''@;'; put 'put ''PSJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSJ9KTtmdW5jdGlvbiBHMChuLGUsdD0xLzApe3JldHVybiBabihlKT9HMCgocixpKT0+RXMoKG8sYSk9PmUocixvLGksYSkpKE4yKG4ocixpKSkpLHQpOigibnVtYmVyIj09dHlwZW9mIGUmJih0PWUpLGFkKChyLGkpPT5mdW5jdGlvbiBTY3Qobixl''@;'; put 'put ''LHQscixpLG8sYSxsKXtjb25zdCB1PVtdO2xldCBnPTAsRT0wLE89ITE7Y29uc3QgWj0oKT0+e08mJiF1Lmxlbmd0aCYmIWcmJmUuY29tcGxldGUoKX0sZWU9TWU9Pmc8cj92ZShNZSk6dS5wdXNoKE1lKSx2ZT1NZT0+e28mJmUubmV4dChNZSksZysrO2xldCBIZT0hMTtOMih0KE1lLEUrKykp''@;'; put 'put ''LnN1YnNjcmliZSh2dShlLFdlPT57aT8uKFdlKSxvP2VlKFdlKTplLm5leHQoV2UpfSwoKT0+e0hlPSEwfSx2b2lkIDAsKCk9PntpZihIZSl0cnl7Zm9yKGctLTt1Lmxlbmd0aCYmZzxyOyl7Y29uc3QgV2U9dS5zaGlmdCgpO2E/UTgoZSxhLCgpPT52ZShXZSkpOnZlKFdlKX1aKCl9Y2F0Y2go''@;'; put 'put ''V2Upe2UuZXJyb3IoV2UpfX0pKX07cmV0dXJuIG4uc3Vic2NyaWJlKHZ1KGUsZWUsKCk9PntPPSEwLFooKX0pKSwoKT0+e2w/LigpfX0ocixpLG4sdCkpKX1mdW5jdGlvbiBPRShuPTEvMCl7cmV0dXJuIEcwKHJhLG4pfWZ1bmN0aW9uIEJyZSguLi5uKXtyZXR1cm4gZnVuY3Rpb24gRWN0KCl7''@;'; put 'put ''cmV0dXJuIE9FKDEpfSgpKFoxKG4sQUkobikpKX1mdW5jdGlvbiBqcmUobil7cmV0dXJuIG5ldyBobyhlPT57TjIobigpKS5zdWJzY3JpYmUoZSl9KX1mdW5jdGlvbiBrSShuLGUpe2NvbnN0IHQ9Wm4obik/bjooKT0+bixyPWk9PmkuZXJyb3IodCgpKTtyZXR1cm4gbmV3IGhvKGU/aT0+ZS5z''@;'; put 'put ''Y2hlZHVsZShyLDAsaSk6cil9Y29uc3QgRXA9bmV3IGhvKG49Pm4uY29tcGxldGUoKSk7ZnVuY3Rpb24gVXJlKCl7cmV0dXJuIGFkKChuLGUpPT57bGV0IHQ9bnVsbDtuLl9yZWZDb3VudCsrO2NvbnN0IHI9dnUoZSx2b2lkIDAsdm9pZCAwLHZvaWQgMCwoKT0+e2lmKCFufHxuLl9yZWZDb3Vu''@;'; put 'put ''dDw9MHx8MDwtLW4uX3JlZkNvdW50KXJldHVybiB2b2lkKHQ9bnVsbCk7Y29uc3QgaT1uLl9jb25uZWN0aW9uLG89dDt0PW51bGwsaSYmKCFvfHxpPT09bykmJmkudW5zdWJzY3JpYmUoKSxlLnVuc3Vic2NyaWJlKCl9KTtuLnN1YnNjcmliZShyKSxyLmNsb3NlZHx8KHQ9bi5jb25uZWN0KCkp''@;'; put 'put ''fSl9Y2xhc3MgenJlIGV4dGVuZHMgaG97Y29uc3RydWN0b3IoZSx0KXtzdXBlcigpLHRoaXMuc291cmNlPWUsdGhpcy5zdWJqZWN0RmFjdG9yeT10LHRoaXMuX3N1YmplY3Q9bnVsbCx0aGlzLl9yZWZDb3VudD0wLHRoaXMuX2Nvbm5lY3Rpb249bnVsbCxNOShlKSYmKHRoaXMubGlmdD1lLmxp''@;'; put 'put ''ZnQpfV9zdWJzY3JpYmUoZSl7cmV0dXJuIHRoaXMuZ2V0U3ViamVjdCgpLnN1YnNjcmliZShlKX1nZXRTdWJqZWN0KCl7Y29uc3QgZT10aGlzLl9zdWJqZWN0O3JldHVybighZXx8ZS5pc1N0b3BwZWQpJiYodGhpcy5fc3ViamVjdD10aGlzLnN1YmplY3RGYWN0b3J5KCkpLHRoaXMuX3N1Ympl''@;'; put 'put ''Y3R9X3RlYXJkb3duKCl7dGhpcy5fcmVmQ291bnQ9MDtjb25zdHtfY29ubmVjdGlvbjplfT10aGlzO3RoaXMuX3N1YmplY3Q9dGhpcy5fY29ubmVjdGlvbj1udWxsLGU/LnVuc3Vic2NyaWJlKCl9Y29ubmVjdCgpe2xldCBlPXRoaXMuX2Nvbm5lY3Rpb247aWYoIWUpe2U9dGhpcy5fY29ubmVj''@;'; put 'put ''dGlvbj1uZXcgQXI7Y29uc3QgdD10aGlzLmdldFN1YmplY3QoKTtlLmFkZCh0aGlzLnNvdXJjZS5zdWJzY3JpYmUodnUodCx2b2lkIDAsKCk9Pnt0aGlzLl90ZWFyZG93bigpLHQuY29tcGxldGUoKX0scj0+e3RoaXMuX3RlYXJkb3duKCksdC5lcnJvcihyKX0sKCk9PnRoaXMuX3RlYXJkb3du''@;'; put 'put ''KCkpKSksZS5jbG9zZWQmJih0aGlzLl9jb25uZWN0aW9uPW51bGwsZT1Bci5FTVBUWSl9cmV0dXJuIGV9cmVmQ291bnQoKXtyZXR1cm4gVXJlKCkodGhpcyl9fWZ1bmN0aW9uIG0wKG4sZSl7cmV0dXJuIGFkKCh0LHIpPT57bGV0IGk9bnVsbCxvPTAsYT0hMTtjb25zdCBsPSgpPT5hJiYhaSYm''@;'; put 'put ''ci5jb21wbGV0ZSgpO3Quc3Vic2NyaWJlKHZ1KHIsdT0+e2k/LnVuc3Vic2NyaWJlKCk7bGV0IGc9MDtjb25zdCBFPW8rKztOMihuKHUsRSkpLnN1YnNjcmliZShpPXZ1KHIsTz0+ci5uZXh0KGU/ZSh1LE8sRSxnKyspOk8pLCgpPT57aT1udWxsLGwoKX0pKX0sKCk9PnthPSEwLGwoKX0pKX0p''@;'; put 'put ''fWZ1bmN0aW9uIE1wKG4pe3JldHVybiBuPD0wPygpPT5FcDphZCgoZSx0KT0+e2xldCByPTA7ZS5zdWJzY3JpYmUodnUodCxpPT57KytyPD1uJiYodC5uZXh0KGkpLG48PXImJnQuY29tcGxldGUoKSl9KSl9KX1mdW5jdGlvbiBxZyguLi5uKXtjb25zdCBlPUFJKG4pO3JldHVybiBhZCgodCxy''@;'; put 'put ''KT0+eyhlP0JyZShuLHQsZSk6QnJlKG4sdCkpLnN1YnNjcmliZShyKX0pfWZ1bmN0aW9uIHN1KG4sZSl7cmV0dXJuIGFkKCh0LHIpPT57bGV0IGk9MDt0LnN1YnNjcmliZSh2dShyLG89Pm4uY2FsbChlLG8saSsrKSYmci5uZXh0KG8pKSl9KX1mdW5jdGlvbiBPVShuKXtyZXR1cm4gYWQoKGUs''@;'; put 'put ''dCk9PntsZXQgcj0hMTtlLnN1YnNjcmliZSh2dSh0LGk9PntyPSEwLHQubmV4dChpKX0sKCk9PntyfHx0Lm5leHQobiksdC5jb21wbGV0ZSgpfSkpfSl9ZnVuY3Rpb24gZGJlKG49eGN0KXtyZXR1cm4gYWQoKGUsdCk9PntsZXQgcj0hMTtlLnN1YnNjcmliZSh2dSh0LGk9PntyPSEwLHQubmV4''@;'; put 'put ''dChpKX0sKCk9PnI/dC5jb21wbGV0ZSgpOnQuZXJyb3IobigpKSkpfSl9ZnVuY3Rpb24geGN0KCl7cmV0dXJuIG5ldyBMVX1mdW5jdGlvbiB1dihuLGUpe2NvbnN0IHQ9YXJndW1lbnRzLmxlbmd0aD49MjtyZXR1cm4gcj0+ci5waXBlKG4/c3UoKGksbyk9Pm4oaSxvLHIpKTpyYSxNcCgxKSx0''@;'; put 'put ''P09VKGUpOmRiZSgoKT0+bmV3IExVKSl9ZnVuY3Rpb24gTkUobixlKXtyZXR1cm4gWm4oZSk/RzAobixlLDEpOkcwKG4sMSl9ZnVuY3Rpb24gZjEobixlLHQpe2NvbnN0IHI9Wm4obil8fGV8fHQ/e25leHQ6bixlcnJvcjplLGNvbXBsZXRlOnR9Om47cmV0dXJuIHI/YWQoKGksbyk9Pnt2YXIg''@;'; put 'put ''YTtudWxsPT09KGE9ci5zdWJzY3JpYmUpfHx2b2lkIDA9PT1hfHxhLmNhbGwocik7bGV0IGw9ITA7aS5zdWJzY3JpYmUodnUobyx1PT57dmFyIGc7bnVsbD09PShnPXIubmV4dCl8fHZvaWQgMD09PWd8fGcuY2FsbChyLHUpLG8ubmV4dCh1KX0sKCk9Pnt2YXIgdTtsPSExLG51bGw9PT0odT1y''@;'; put 'put ''LmNvbXBsZXRlKXx8dm9pZCAwPT09dXx8dS5jYWxsKHIpLG8uY29tcGxldGUoKX0sdT0+e3ZhciBnO2w9ITEsbnVsbD09PShnPXIuZXJyb3IpfHx2b2lkIDA9PT1nfHxnLmNhbGwocix1KSxvLmVycm9yKHUpfSwoKT0+e3ZhciB1LGc7bCYmKG51bGw9PT0odT1yLnVuc3Vic2NyaWJlKXx8dm9p''@;'; put 'put ''ZCAwPT09dXx8dS5jYWxsKHIpKSxudWxsPT09KGc9ci5maW5hbGl6ZSl8fHZvaWQgMD09PWd8fGcuY2FsbChyKX0pKX0pOnJhfWZ1bmN0aW9uIHliKG4pe3JldHVybiBhZCgoZSx0KT0+e2xldCBvLHI9bnVsbCxpPSExO3I9ZS5zdWJzY3JpYmUodnUodCx2b2lkIDAsdm9pZCAwLGE9PntvPU4y''@;'; put 'put ''KG4oYSx5YihuKShlKSkpLHI/KHIudW5zdWJzY3JpYmUoKSxyPW51bGwsby5zdWJzY3JpYmUodCkpOmk9ITB9KSksaSYmKHIudW5zdWJzY3JpYmUoKSxyPW51bGwsby5zdWJzY3JpYmUodCkpfSl9ZnVuY3Rpb24gV3JlKG4pe3JldHVybiBuPD0wPygpPT5FcDphZCgoZSx0KT0+e2xldCByPVtd''@;'; put 'put ''O2Uuc3Vic2NyaWJlKHZ1KHQsaT0+e3IucHVzaChpKSxuPHIubGVuZ3RoJiZyLnNoaWZ0KCl9LCgpPT57Zm9yKGNvbnN0IGkgb2Ygcil0Lm5leHQoaSk7dC5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntyPW51bGx9KSl9KX1mdW5jdGlvbiBSSShuKXtyZXR1cm4gYWQoKGUsdCk9Pnt0cnl7ZS5z''@;'; put 'put ''dWJzY3JpYmUodCl9ZmluYWxseXt0LmFkZChuKX19KX1mdW5jdGlvbiB2MChuKXtyZXR1cm4gYWQoKGUsdCk9PntOMihuKS5zdWJzY3JpYmUodnUodCwoKT0+dC5jb21wbGV0ZSgpLEdlKSksIXQuY2xvc2VkJiZlLnN1YnNjcmliZSh0KX0pfWxldCBCY3Q9KCgpPT57Y2xhc3MgbntfZG9jO2Nv''@;'; put 'put ''bnN0cnVjdG9yKHQpe3RoaXMuX2RvYz10fWdldFRpdGxlKCl7cmV0dXJuIHRoaXMuX2RvYy50aXRsZX1zZXRUaXRsZSh0KXt0aGlzLl9kb2MudGl0bGU9dHx8IiJ9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKG9yKFRsKSl9O3N0YXRpYyBcdTAyNzVwcm92''@;'; put 'put ''PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0pKCksYmJlPSgoKT0+e2NsYXNzIG57c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0''@;'; put 'put ''b3J5OmZ1bmN0aW9uKHIpe2xldCBpPW51bGw7cmV0dXJuIGk9cj9uZXcocnx8bik6b3IoV2N0KSxpfSxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKSxXY3Q9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGJiZXtfZG9jO2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fZG9jPXR9c2Fu''@;'; put 'put ''aXRpemUodCxyKXtpZihudWxsPT1yKXJldHVybiBudWxsO3N3aXRjaCh0KXtjYXNlICRlLk5PTkU6cmV0dXJuIHI7Y2FzZSAkZS5IVE1MOnJldHVybiBIZyhyLCJIVE1MIik/azIocik6R1YodGhpcy5fZG9jLFN0cmluZyhyKSkudG9TdHJpbmcoKTtjYXNlICRlLlNUWUxFOnJldHVybiBIZyhy''@;'; put 'put ''LCJTdHlsZSIpP2syKHIpOnI7Y2FzZSAkZS5TQ1JJUFQ6aWYoSGcociwiU2NyaXB0IikpcmV0dXJuIGsyKHIpO3Rocm93IG5ldyBXbig1MjAwLCExKTtjYXNlICRlLlVSTDpyZXR1cm4gSGcociwiVVJMIik/azIocik6VlMoU3RyaW5nKHIpKTtjYXNlICRlLlJFU09VUkNFX1VSTDppZihIZyhy''@;'; put 'put ''LCJSZXNvdXJjZVVSTCIpKXJldHVybiBrMihyKTt0aHJvdyBuZXcgV24oNTIwMSwhMSk7ZGVmYXVsdDp0aHJvdyBuZXcgV24oNTIwMiwhMSl9fWJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHQpe3JldHVybiBmdW5jdGlvbiB5SihuKXtyZXR1cm4gbmV3IHBKKG4pfSh0KX1ieXBhc3NTZWN1cml0''@;'; put 'put ''eVRydXN0U3R5bGUodCl7cmV0dXJuIGZ1bmN0aW9uIEJWKG4pe3JldHVybiBuZXcgZ0oobil9KHQpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RTY3JpcHQodCl7cmV0dXJuIGZ1bmN0aW9uIGJKKG4pe3JldHVybiBuZXcgbUoobil9KHQpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwodCl7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uIHdKKG4pe3JldHVybiBuZXcgdkoobil9KHQpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh0KXtyZXR1cm4gZnVuY3Rpb24gQ0oobil7cmV0dXJuIG5ldyBWVihuKX0odCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKG9yKFRsKSl9''@;'; put 'put ''O3N0YXRpYyBcdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0pKCk7Y29uc3QgWnM9InByaW1hcnkiLExJPVN5bWJvbCgiUm91dGVUaXRsZSIpO2NsYXNzIFljdHtwYXJhbXM7Y29uc3RydWN0b3IoZSl7dGhpcy5w''@;'; put 'put ''YXJhbXM9ZXx8e319aGFzKGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5wYXJhbXMsZSl9Z2V0KGUpe2lmKHRoaXMuaGFzKGUpKXtjb25zdCB0PXRoaXMucGFyYW1zW2VdO3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RbMF06dH1yZXR1cm4gbnVs''@;'; put 'put ''bH1nZXRBbGwoZSl7aWYodGhpcy5oYXMoZSkpe2NvbnN0IHQ9dGhpcy5wYXJhbXNbZV07cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dDpbdF19cmV0dXJuW119Z2V0IGtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5wYXJhbXMpfX1mdW5jdGlvbiBGRShuKXtyZXR1cm4gbmV3IFljdChu''@;'; put 'put ''KX1mdW5jdGlvbiBaY3QobixlLHQpe2NvbnN0IHI9dC5wYXRoLnNwbGl0KCIvIik7aWYoci5sZW5ndGg+bi5sZW5ndGh8fCJmdWxsIj09PXQucGF0aE1hdGNoJiYoZS5oYXNDaGlsZHJlbigpfHxyLmxlbmd0aDxuLmxlbmd0aCkpcmV0dXJuIG51bGw7Y29uc3QgaT17fTtmb3IobGV0IG89MDtv''@;'; put 'put ''PHIubGVuZ3RoO28rKyl7Y29uc3QgYT1yW29dLGw9bltvXTtpZigiOiI9PT1hWzBdKWlbYS5zdWJzdHJpbmcoMSldPWw7ZWxzZSBpZihhIT09bC5wYXRoKXJldHVybiBudWxsfXJldHVybntjb25zdW1lZDpuLnNsaWNlKDAsci5sZW5ndGgpLHBvc1BhcmFtczppfX1mdW5jdGlvbiBINShuLGUp''@;'; put 'put ''e2NvbnN0IHQ9bj9ZcmUobik6dm9pZCAwLHI9ZT9ZcmUoZSk6dm9pZCAwO2lmKCF0fHwhcnx8dC5sZW5ndGghPXIubGVuZ3RoKXJldHVybiExO2xldCBpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKWlmKGk9dFtvXSwhd2JlKG5baV0sZVtpXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rp''@;'; put 'put ''b24gWXJlKG4pe3JldHVyblsuLi5PYmplY3Qua2V5cyhuKSwuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG4pXX1mdW5jdGlvbiB3YmUobixlKXtpZihBcnJheS5pc0FycmF5KG4pJiZBcnJheS5pc0FycmF5KGUpKXtpZihuLmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2NvbnN0''@;'; put 'put ''IHQ9Wy4uLm5dLnNvcnQoKSxyPVsuLi5lXS5zb3J0KCk7cmV0dXJuIHQuZXZlcnkoKGksbyk9PnJbb109PT1pKX1yZXR1cm4gbj09PWV9ZnVuY3Rpb24gQ2JlKG4pe3JldHVybiBuLmxlbmd0aD4wP25bbi5sZW5ndGgtMV06bnVsbH1mdW5jdGlvbiBKOChuKXtyZXR1cm4geEkobik/bjpaUihu''@;'; put 'put ''KT9aMShQcm9taXNlLnJlc29sdmUobikpOlBhKG4pfWNvbnN0ICRjdD17ZXhhY3Q6ZnVuY3Rpb24gTWJlKG4sZSx0KXtpZighd2Iobi5zZWdtZW50cyxlLnNlZ21lbnRzKXx8IU5VKG4uc2VnbWVudHMsZS5zZWdtZW50cyx0KXx8bi5udW1iZXJPZkNoaWxkcmVuIT09ZS5udW1iZXJPZkNoaWxk''@;'; put 'put ''cmVuKXJldHVybiExO2Zvcihjb25zdCByIGluIGUuY2hpbGRyZW4paWYoIW4uY2hpbGRyZW5bcl18fCFNYmUobi5jaGlsZHJlbltyXSxlLmNoaWxkcmVuW3JdLHQpKXJldHVybiExO3JldHVybiEwfSxzdWJzZXQ6VGJlfSxTYmU9e2V4YWN0OmZ1bmN0aW9uIHFjdChuLGUpe3JldHVybiBINShu''@;'; put 'put ''LGUpfSxzdWJzZXQ6ZnVuY3Rpb24gS2N0KG4sZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmxlbmd0aDw9T2JqZWN0LmtleXMobikubGVuZ3RoJiZPYmplY3Qua2V5cyhlKS5ldmVyeSh0PT53YmUoblt0XSxlW3RdKSl9LGlnbm9yZWQ6KCk9PiEwfTtmdW5jdGlvbiBFYmUobixlLHQpe3JldHVy''@;'; put 'put ''biAkY3RbdC5wYXRoc10obi5yb290LGUucm9vdCx0Lm1hdHJpeFBhcmFtcykmJlNiZVt0LnF1ZXJ5UGFyYW1zXShuLnF1ZXJ5UGFyYW1zLGUucXVlcnlQYXJhbXMpJiYhKCJleGFjdCI9PT10LmZyYWdtZW50JiZuLmZyYWdtZW50IT09ZS5mcmFnbWVudCl9ZnVuY3Rpb24gVGJlKG4sZSx0KXty''@;'; put 'put ''ZXR1cm4geGJlKG4sZSxlLnNlZ21lbnRzLHQpfWZ1bmN0aW9uIHhiZShuLGUsdCxyKXtpZihuLnNlZ21lbnRzLmxlbmd0aD50Lmxlbmd0aCl7Y29uc3QgaT1uLnNlZ21lbnRzLnNsaWNlKDAsdC5sZW5ndGgpO3JldHVybiEoIXdiKGksdCl8fGUuaGFzQ2hpbGRyZW4oKXx8IU5VKGksdCxyKSl9''@;'; put 'put ''aWYobi5zZWdtZW50cy5sZW5ndGg9PT10Lmxlbmd0aCl7aWYoIXdiKG4uc2VnbWVudHMsdCl8fCFOVShuLnNlZ21lbnRzLHQscikpcmV0dXJuITE7Zm9yKGNvbnN0IGkgaW4gZS5jaGlsZHJlbilpZighbi5jaGlsZHJlbltpXXx8IVRiZShuLmNoaWxkcmVuW2ldLGUuY2hpbGRyZW5baV0scikp''@;'; put 'put ''cmV0dXJuITE7cmV0dXJuITB9e2NvbnN0IGk9dC5zbGljZSgwLG4uc2VnbWVudHMubGVuZ3RoKSxvPXQuc2xpY2Uobi5zZWdtZW50cy5sZW5ndGgpO3JldHVybiEhKHdiKG4uc2VnbWVudHMsaSkmJk5VKG4uc2VnbWVudHMsaSxyKSYmbi5jaGlsZHJlbltac10pJiZ4YmUobi5jaGlsZHJlblta''@;'; put 'put ''c10sZSxvLHIpfX1mdW5jdGlvbiBOVShuLGUsdCl7cmV0dXJuIGUuZXZlcnkoKHIsaSk9PlNiZVt0XShuW2ldLnBhcmFtZXRlcnMsci5wYXJhbWV0ZXJzKSl9Y2xhc3MgYmJ7cm9vdDtxdWVyeVBhcmFtcztmcmFnbWVudDtfcXVlcnlQYXJhbU1hcDtjb25zdHJ1Y3RvcihlPW5ldyB3dShbXSx7''@;'; put 'put ''fSksdD17fSxyPW51bGwpe3RoaXMucm9vdD1lLHRoaXMucXVlcnlQYXJhbXM9dCx0aGlzLmZyYWdtZW50PXJ9Z2V0IHF1ZXJ5UGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcD8/PUZFKHRoaXMucXVlcnlQYXJhbXMpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9dG9TdHJpbmcoKXty''@;'; put 'put ''ZXR1cm4gSmN0LnNlcmlhbGl6ZSh0aGlzKX19Y2xhc3Mgd3V7c2VnbWVudHM7Y2hpbGRyZW47cGFyZW50PW51bGw7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnNlZ21lbnRzPWUsdGhpcy5jaGlsZHJlbj10LE9iamVjdC52YWx1ZXModCkuZm9yRWFjaChyPT5yLnBhcmVudD10aGlzKX1oYXNDaGls''@;'; put 'put ''ZHJlbigpe3JldHVybiB0aGlzLm51bWJlck9mQ2hpbGRyZW4+MH1nZXQgbnVtYmVyT2ZDaGlsZHJlbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNoaWxkcmVuKS5sZW5ndGh9dG9TdHJpbmcoKXtyZXR1cm4gUFUodGhpcyl9fWNsYXNzIE9Je3BhdGg7cGFyYW1ldGVycztfcGFyYW1ldGVy''@;'; put 'put ''TWFwO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5wYXRoPWUsdGhpcy5wYXJhbWV0ZXJzPXR9Z2V0IHBhcmFtZXRlck1hcCgpe3JldHVybiB0aGlzLl9wYXJhbWV0ZXJNYXA/Pz1GRSh0aGlzLnBhcmFtZXRlcnMpLHRoaXMuX3BhcmFtZXRlck1hcH10b1N0cmluZygpe3JldHVybiBSYmUodGhpcyl9''@;'; put 'put ''fWZ1bmN0aW9uIHdiKG4sZSl7cmV0dXJuIG4ubGVuZ3RoPT09ZS5sZW5ndGgmJm4uZXZlcnkoKHQscik9PnQucGF0aD09PWVbcl0ucGF0aCl9bGV0IE5JPSgoKT0+e2NsYXNzIG57c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1cHJv''@;'; put 'put ''dj1Kbih7dG9rZW46bixmYWN0b3J5OigpPT5uZXcgRlUscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0pKCk7Y2xhc3MgRlV7cGFyc2UoZSl7Y29uc3QgdD1uZXcgdXV0KGUpO3JldHVybiBuZXcgYmIodC5wYXJzZVJvb3RTZWdtZW50KCksdC5wYXJzZVF1ZXJ5UGFyYW1zKCksdC5wYXJz''@;'; put 'put ''ZUZyYWdtZW50KCkpfXNlcmlhbGl6ZShlKXtjb25zdCB0PWAvJHtGSShlLnJvb3QsITApfWAscj1mdW5jdGlvbiBudXQobil7Y29uc3QgZT1PYmplY3QuZW50cmllcyhuKS5tYXAoKFt0LHJdKT0+QXJyYXkuaXNBcnJheShyKT9yLm1hcChpPT5gJHtIVSh0KX09JHtIVShpKX1gKS5qb2luKCIm''@;'; put 'put ''Iik6YCR7SFUodCl9PSR7SFUocil9YCkuZmlsdGVyKHQ9PnQpO3JldHVybiBlLmxlbmd0aD9gPyR7ZS5qb2luKCImIil9YDoiIn0oZS5xdWVyeVBhcmFtcyksaT0ic3RyaW5nIj09dHlwZW9mIGUuZnJhZ21lbnQ/YCMke2Z1bmN0aW9uIGV1dChuKXtyZXR1cm4gZW5jb2RlVVJJKG4pfShlLmZy''@;'; put 'put ''YWdtZW50KX1gOiIiO3JldHVybmAke3R9JHtyfSR7aX1gfX1jb25zdCBKY3Q9bmV3IEZVO2Z1bmN0aW9uIFBVKG4pe3JldHVybiBuLnNlZ21lbnRzLm1hcChlPT5SYmUoZSkpLmpvaW4oIi8iKX1mdW5jdGlvbiBGSShuLGUpe2lmKCFuLmhhc0NoaWxkcmVuKCkpcmV0dXJuIFBVKG4pO2lmKGUp''@;'; put 'put ''e2NvbnN0IHQ9bi5jaGlsZHJlbltac10/Rkkobi5jaGlsZHJlbltac10sITEpOiIiLHI9W107cmV0dXJuIE9iamVjdC5lbnRyaWVzKG4uY2hpbGRyZW4pLmZvckVhY2goKFtpLG9dKT0+e2khPT1acyYmci5wdXNoKGAke2l9OiR7RkkobywhMSl9YCl9KSxyLmxlbmd0aD4wP2Ake3R9KCR7ci5q''@;'; put 'put ''b2luKCIvLyIpfSlgOnR9e2NvbnN0IHQ9ZnVuY3Rpb24gUWN0KG4sZSl7bGV0IHQ9W107cmV0dXJuIE9iamVjdC5lbnRyaWVzKG4uY2hpbGRyZW4pLmZvckVhY2goKFtyLGldKT0+e3I9PT1acyYmKHQ9dC5jb25jYXQoZShpLHIpKSl9KSxPYmplY3QuZW50cmllcyhuLmNoaWxkcmVuKS5mb3JF''@;'; put 'put ''YWNoKChbcixpXSk9PntyIT09WnMmJih0PXQuY29uY2F0KGUoaSxyKSkpfSksdH0obiwocixpKT0+aT09PVpzP1tGSShuLmNoaWxkcmVuW1pzXSwhMSldOltgJHtpfToke0ZJKHIsITEpfWBdKTtyZXR1cm4gMT09PU9iamVjdC5rZXlzKG4uY2hpbGRyZW4pLmxlbmd0aCYmbnVsbCE9bi5jaGls''@;'; put 'put ''ZHJlbltac10/YCR7UFUobil9LyR7dFswXX1gOmAke1BVKG4pfS8oJHt0LmpvaW4oIi8vIil9KWB9fWZ1bmN0aW9uIEFiZShuKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KG4pLnJlcGxhY2UoLyU0MC9nLCJAIikucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5y''@;'; put 'put ''ZXBsYWNlKC8lMkMvZ2ksIiwiKX1mdW5jdGlvbiBIVShuKXtyZXR1cm4gQWJlKG4pLnJlcGxhY2UoLyUzQi9naSwiOyIpfWZ1bmN0aW9uIFpyZShuKXtyZXR1cm4gQWJlKG4pLnJlcGxhY2UoL1woL2csIiUyOCIpLnJlcGxhY2UoL1wpL2csIiUyOSIpLnJlcGxhY2UoLyUyNi9naSwiJiIpfWZ1''@;'; put 'put ''bmN0aW9uIFZVKG4pe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQobil9ZnVuY3Rpb24ga2JlKG4pe3JldHVybiBWVShuLnJlcGxhY2UoL1wrL2csIiUyMCIpKX1mdW5jdGlvbiBSYmUobil7cmV0dXJuYCR7WnJlKG4ucGF0aCl9JHtmdW5jdGlvbiB0dXQobil7cmV0dXJuIE9iamVjdC5lbnRy''@;'; put 'put ''aWVzKG4pLm1hcCgoW2UsdF0pPT5gOyR7WnJlKGUpfT0ke1pyZSh0KX1gKS5qb2luKCIiKX0obi5wYXJhbWV0ZXJzKX1gfWNvbnN0IHJ1dD0vXlteXC8oKT87I10rLztmdW5jdGlvbiBHcmUobil7Y29uc3QgZT1uLm1hdGNoKHJ1dCk7cmV0dXJuIGU/ZVswXToiIn1jb25zdCBpdXQ9L15bXlwv''@;'; put 'put ''KCk/Oz0jXSsvLGF1dD0vXltePT8mI10rLyxsdXQ9L15bXiYjXSsvO2NsYXNzIHV1dHt1cmw7cmVtYWluaW5nO2NvbnN0cnVjdG9yKGUpe3RoaXMudXJsPWUsdGhpcy5yZW1haW5pbmc9ZX1wYXJzZVJvb3RTZWdtZW50KCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIvIiksIiI9PT10''@;'; put 'put ''aGlzLnJlbWFpbmluZ3x8dGhpcy5wZWVrU3RhcnRzV2l0aCgiPyIpfHx0aGlzLnBlZWtTdGFydHNXaXRoKCIjIik/bmV3IHd1KFtdLHt9KTpuZXcgd3UoW10sdGhpcy5wYXJzZUNoaWxkcmVuKCkpfXBhcnNlUXVlcnlQYXJhbXMoKXtjb25zdCBlPXt9O2lmKHRoaXMuY29uc3VtZU9wdGlvbmFs''@;'; put 'put ''KCI/IikpZG97dGhpcy5wYXJzZVF1ZXJ5UGFyYW0oZSl9d2hpbGUodGhpcy5jb25zdW1lT3B0aW9uYWwoIiYiKSk7cmV0dXJuIGV9cGFyc2VGcmFnbWVudCgpe3JldHVybiB0aGlzLmNvbnN1bWVPcHRpb25hbCgiIyIpP2RlY29kZVVSSUNvbXBvbmVudCh0aGlzLnJlbWFpbmluZyk6bnVsbH1w''@;'; put 'put ''YXJzZUNoaWxkcmVuKCl7aWYoIiI9PT10aGlzLnJlbWFpbmluZylyZXR1cm57fTt0aGlzLmNvbnN1bWVPcHRpb25hbCgiLyIpO2NvbnN0IGU9W107Zm9yKHRoaXMucGVla1N0YXJ0c1dpdGgoIigiKXx8ZS5wdXNoKHRoaXMucGFyc2VTZWdtZW50KCkpO3RoaXMucGVla1N0YXJ0c1dpdGgoIi8i''@;'; put 'put ''KSYmIXRoaXMucGVla1N0YXJ0c1dpdGgoIi8vIikmJiF0aGlzLnBlZWtTdGFydHNXaXRoKCIvKCIpOyl0aGlzLmNhcHR1cmUoIi8iKSxlLnB1c2godGhpcy5wYXJzZVNlZ21lbnQoKSk7bGV0IHQ9e307dGhpcy5wZWVrU3RhcnRzV2l0aCgiLygiKSYmKHRoaXMuY2FwdHVyZSgiLyIpLHQ9dGhp''@;'; put 'put ''cy5wYXJzZVBhcmVucyghMCkpO2xldCByPXt9O3JldHVybiB0aGlzLnBlZWtTdGFydHNXaXRoKCIoIikmJihyPXRoaXMucGFyc2VQYXJlbnMoITEpKSwoZS5sZW5ndGg+MHx8T2JqZWN0LmtleXModCkubGVuZ3RoPjApJiYocltac109bmV3IHd1KGUsdCkpLHJ9cGFyc2VTZWdtZW50KCl7Y29u''@;'; put 'put ''c3QgZT1HcmUodGhpcy5yZW1haW5pbmcpO2lmKCIiPT09ZSYmdGhpcy5wZWVrU3RhcnRzV2l0aCgiOyIpKXRocm93IG5ldyBXbig0MDA5LCExKTtyZXR1cm4gdGhpcy5jYXB0dXJlKGUpLG5ldyBPSShWVShlKSx0aGlzLnBhcnNlTWF0cml4UGFyYW1zKCkpfXBhcnNlTWF0cml4UGFyYW1zKCl7''@;'; put 'put ''Y29uc3QgZT17fTtmb3IoO3RoaXMuY29uc3VtZU9wdGlvbmFsKCI7Iik7KXRoaXMucGFyc2VQYXJhbShlKTtyZXR1cm4gZX1wYXJzZVBhcmFtKGUpe2NvbnN0IHQ9ZnVuY3Rpb24gb3V0KG4pe2NvbnN0IGU9bi5tYXRjaChpdXQpO3JldHVybiBlP2VbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtp''@;'; put 'put ''ZighdClyZXR1cm47dGhpcy5jYXB0dXJlKHQpO2xldCByPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9Iikpe2NvbnN0IGk9R3JlKHRoaXMucmVtYWluaW5nKTtpJiYocj1pLHRoaXMuY2FwdHVyZShyKSl9ZVtWVSh0KV09VlUocil9cGFyc2VRdWVyeVBhcmFtKGUpe2NvbnN0IHQ9ZnVu''@;'; put 'put ''Y3Rpb24gc3V0KG4pe2NvbnN0IGU9bi5tYXRjaChhdXQpO3JldHVybiBlP2VbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtpZighdClyZXR1cm47dGhpcy5jYXB0dXJlKHQpO2xldCByPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9Iikpe2NvbnN0IGE9ZnVuY3Rpb24gY3V0KG4pe2NvbnN0''@;'; put 'put ''IGU9bi5tYXRjaChsdXQpO3JldHVybiBlP2VbMF06IiJ9KHRoaXMucmVtYWluaW5nKTthJiYocj1hLHRoaXMuY2FwdHVyZShyKSl9Y29uc3QgaT1rYmUodCksbz1rYmUocik7aWYoZS5oYXNPd25Qcm9wZXJ0eShpKSl7bGV0IGE9ZVtpXTtBcnJheS5pc0FycmF5KGEpfHwoYT1bYV0sZVtpXT1h''@;'; put 'put ''KSxhLnB1c2gobyl9ZWxzZSBlW2ldPW99cGFyc2VQYXJlbnMoZSl7Y29uc3QgdD17fTtmb3IodGhpcy5jYXB0dXJlKCIoIik7IXRoaXMuY29uc3VtZU9wdGlvbmFsKCIpIikmJnRoaXMucmVtYWluaW5nLmxlbmd0aD4wOyl7Y29uc3Qgcj1HcmUodGhpcy5yZW1haW5pbmcpLGk9dGhpcy5yZW1h''@;'; put 'put ''aW5pbmdbci5sZW5ndGhdO2lmKCIvIiE9PWkmJiIpIiE9PWkmJiI7IiE9PWkpdGhyb3cgbmV3IFduKDQwMTAsITEpO2xldCBvO3IuaW5kZXhPZigiOiIpPi0xPyhvPXIuc2xpY2UoMCxyLmluZGV4T2YoIjoiKSksdGhpcy5jYXB0dXJlKG8pLHRoaXMuY2FwdHVyZSgiOiIpKTplJiYobz1acyk7''@;'; put 'put ''Y29uc3QgYT10aGlzLnBhcnNlQ2hpbGRyZW4oKTt0W28/P1pzXT0xPT09T2JqZWN0LmtleXMoYSkubGVuZ3RoJiZhW1pzXT9hW1pzXTpuZXcgd3UoW10sYSksdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8vIil9cmV0dXJuIHR9cGVla1N0YXJ0c1dpdGgoZSl7cmV0dXJuIHRoaXMucmVtYWluaW5n''@;'; put 'put ''LnN0YXJ0c1dpdGgoZSl9Y29uc3VtZU9wdGlvbmFsKGUpe3JldHVybiEhdGhpcy5wZWVrU3RhcnRzV2l0aChlKSYmKHRoaXMucmVtYWluaW5nPXRoaXMucmVtYWluaW5nLnN1YnN0cmluZyhlLmxlbmd0aCksITApfWNhcHR1cmUoZSl7aWYoIXRoaXMuY29uc3VtZU9wdGlvbmFsKGUpKXRocm93''@;'; put 'put ''IG5ldyBXbig0MDExLCExKX19ZnVuY3Rpb24gSWJlKG4pe3JldHVybiBuLnNlZ21lbnRzLmxlbmd0aD4wP25ldyB3dShbXSx7W1pzXTpufSk6bn1mdW5jdGlvbiBEYmUobil7Y29uc3QgZT17fTtmb3IoY29uc3RbcixpXW9mIE9iamVjdC5lbnRyaWVzKG4uY2hpbGRyZW4pKXtjb25zdCBvPURi''@;'; put 'put ''ZShpKTtpZihyPT09WnMmJjA9PT1vLnNlZ21lbnRzLmxlbmd0aCYmby5oYXNDaGlsZHJlbigpKWZvcihjb25zdFthLGxdb2YgT2JqZWN0LmVudHJpZXMoby5jaGlsZHJlbikpZVthXT1sO2Vsc2Uoby5zZWdtZW50cy5sZW5ndGg+MHx8by5oYXNDaGlsZHJlbigpKSYmKGVbcl09byl9cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uIGR1dChuKXtpZigxPT09bi5udW1iZXJPZkNoaWxkcmVuJiZuLmNoaWxkcmVuW1pzXSl7Y29uc3QgZT1uLmNoaWxkcmVuW1pzXTtyZXR1cm4gbmV3IHd1KG4uc2VnbWVudHMuY29uY2F0KGUuc2VnbWVudHMpLGUuY2hpbGRyZW4pfXJldHVybiBufShuZXcgd3Uobi5zZWdtZW50''@;'; put 'put ''cyxlKSl9ZnVuY3Rpb24gQ2Iobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBiYn1mdW5jdGlvbiBMYmUobil7bGV0IGU7Y29uc3QgaT1JYmUoZnVuY3Rpb24gdChvKXtjb25zdCBhPXt9O2Zvcihjb25zdCB1IG9mIG8uY2hpbGRyZW4pe2NvbnN0IGc9dCh1KTthW3Uub3V0bGV0XT1nfWNvbnN0IGw9''@;'; put 'put ''bmV3IHd1KG8udXJsLGEpO3JldHVybiBvPT09biYmKGU9bCksbH0obi5yb290KSk7cmV0dXJuIGU/P2l9ZnVuY3Rpb24gT2JlKG4sZSx0LHIpe2xldCBpPW47Zm9yKDtpLnBhcmVudDspaT1pLnBhcmVudDtpZigwPT09ZS5sZW5ndGgpcmV0dXJuICRyZShpLGksaSx0LHIpO2NvbnN0IG89ZnVu''@;'; put 'put ''Y3Rpb24gZnV0KG4pe2lmKCJzdHJpbmciPT10eXBlb2YgblswXSYmMT09PW4ubGVuZ3RoJiYiLyI9PT1uWzBdKXJldHVybiBuZXcgRmJlKCEwLDAsbik7bGV0IGU9MCx0PSExO2NvbnN0IHI9bi5yZWR1Y2UoKGksbyxhKT0+e2lmKCJvYmplY3QiPT10eXBlb2YgbyYmbnVsbCE9byl7aWYoby5v''@;'; put 'put ''dXRsZXRzKXtjb25zdCBsPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhvLm91dGxldHMpLmZvckVhY2goKFt1LGddKT0+e2xbdV09InN0cmluZyI9PXR5cGVvZiBnP2cuc3BsaXQoIi8iKTpnfSksWy4uLmkse291dGxldHM6bH1dfWlmKG8uc2VnbWVudFBhdGgpcmV0dXJuWy4uLmksby5zZWdt''@;'; put 'put ''ZW50UGF0aF19cmV0dXJuInN0cmluZyIhPXR5cGVvZiBvP1suLi5pLG9dOjA9PT1hPyhvLnNwbGl0KCIvIikuZm9yRWFjaCgobCx1KT0+ezA9PXUmJiIuIj09PWx8fCgwPT11JiYiIj09PWw/dD0hMDoiLi4iPT09bD9lKys6IiIhPWwmJmkucHVzaChsKSl9KSxpKTpbLi4uaSxvXX0sW10pO3Jl''@;'; put 'put ''dHVybiBuZXcgRmJlKHQsZSxyKX0oZSk7aWYoby50b1Jvb3QoKSlyZXR1cm4gJHJlKGksaSxuZXcgd3UoW10se30pLHQscik7Y29uc3QgYT1mdW5jdGlvbiBwdXQobixlLHQpe2lmKG4uaXNBYnNvbHV0ZSlyZXR1cm4gbmV3IGpVKGUsITAsMCk7aWYoIXQpcmV0dXJuIG5ldyBqVShlLCExLE5h''@;'; put 'put ''Tik7aWYobnVsbD09PXQucGFyZW50KXJldHVybiBuZXcgalUodCwhMCwwKTtjb25zdCByPUJVKG4uY29tbWFuZHNbMF0pPzA6MTtyZXR1cm4gZnVuY3Rpb24gZ3V0KG4sZSx0KXtsZXQgcj1uLGk9ZSxvPXQ7Zm9yKDtvPmk7KXtpZihvLT1pLHI9ci5wYXJlbnQsIXIpdGhyb3cgbmV3IFduKDQw''@;'; put 'put ''MDUsITEpO2k9ci5zZWdtZW50cy5sZW5ndGh9cmV0dXJuIG5ldyBqVShyLCExLGktbyl9KHQsdC5zZWdtZW50cy5sZW5ndGgtMStyLG4ubnVtYmVyT2ZEb3VibGVEb3RzKX0obyxpLG4pLGw9YS5wcm9jZXNzQ2hpbGRyZW4/SEkoYS5zZWdtZW50R3JvdXAsYS5pbmRleCxvLmNvbW1hbmRzKTpQ''@;'; put 'put ''YmUoYS5zZWdtZW50R3JvdXAsYS5pbmRleCxvLmNvbW1hbmRzKTtyZXR1cm4gJHJlKGksYS5zZWdtZW50R3JvdXAsbCx0LHIpfWZ1bmN0aW9uIEJVKG4pe3JldHVybiJvYmplY3QiPT10eXBlb2YgbiYmbnVsbCE9biYmIW4ub3V0bGV0cyYmIW4uc2VnbWVudFBhdGh9ZnVuY3Rpb24gUEkobil7''@;'; put 'put ''cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT1uJiZuLm91dGxldHN9ZnVuY3Rpb24gJHJlKG4sZSx0LHIsaSl7bGV0IGEsbz17fTtyJiZPYmplY3QuZW50cmllcyhyKS5mb3JFYWNoKChbdSxnXSk9PntvW3VdPUFycmF5LmlzQXJyYXkoZyk/Zy5tYXAoRT0+YCR7RX1gKTpgJHtnfWB9''@;'; put 'put ''KSxhPW49PT1lP3Q6TmJlKG4sZSx0KTtjb25zdCBsPUliZShEYmUoYSkpO3JldHVybiBuZXcgYmIobCxvLGkpfWZ1bmN0aW9uIE5iZShuLGUsdCl7Y29uc3Qgcj17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMobi5jaGlsZHJlbikuZm9yRWFjaCgoW2ksb10pPT57cltpXT1vPT09ZT90Ok5iZShv''@;'; put 'put ''LGUsdCl9KSxuZXcgd3Uobi5zZWdtZW50cyxyKX1jbGFzcyBGYmV7aXNBYnNvbHV0ZTtudW1iZXJPZkRvdWJsZURvdHM7Y29tbWFuZHM7Y29uc3RydWN0b3IoZSx0LHIpe2lmKHRoaXMuaXNBYnNvbHV0ZT1lLHRoaXMubnVtYmVyT2ZEb3VibGVEb3RzPXQsdGhpcy5jb21tYW5kcz1yLGUmJnIu''@;'; put 'put ''bGVuZ3RoPjAmJkJVKHJbMF0pKXRocm93IG5ldyBXbig0MDAzLCExKTtjb25zdCBpPXIuZmluZChQSSk7aWYoaSYmaSE9PUNiZShyKSl0aHJvdyBuZXcgV24oNDAwNCwhMSl9dG9Sb290KCl7cmV0dXJuIHRoaXMuaXNBYnNvbHV0ZSYmMT09PXRoaXMuY29tbWFuZHMubGVuZ3RoJiYiLyI9PXRo''@;'; put 'put ''aXMuY29tbWFuZHNbMF19fWNsYXNzIGpVe3NlZ21lbnRHcm91cDtwcm9jZXNzQ2hpbGRyZW47aW5kZXg7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMuc2VnbWVudEdyb3VwPWUsdGhpcy5wcm9jZXNzQ2hpbGRyZW49dCx0aGlzLmluZGV4PXJ9fWZ1bmN0aW9uIFBiZShuLGUsdCl7aWYobj8/PW5l''@;'; put 'put ''dyB3dShbXSx7fSksMD09PW4uc2VnbWVudHMubGVuZ3RoJiZuLmhhc0NoaWxkcmVuKCkpcmV0dXJuIEhJKG4sZSx0KTtjb25zdCByPWZ1bmN0aW9uIHZ1dChuLGUsdCl7bGV0IHI9MCxpPWU7Y29uc3Qgbz17bWF0Y2g6ITEscGF0aEluZGV4OjAsY29tbWFuZEluZGV4OjB9O2Zvcig7aTxuLnNl''@;'; put 'put ''Z21lbnRzLmxlbmd0aDspe2lmKHI+PXQubGVuZ3RoKXJldHVybiBvO2NvbnN0IGE9bi5zZWdtZW50c1tpXSxsPXRbcl07aWYoUEkobCkpYnJlYWs7Y29uc3QgdT1gJHtsfWAsZz1yPHQubGVuZ3RoLTE/dFtyKzFdOm51bGw7aWYoaT4wJiZ2b2lkIDA9PT11KWJyZWFrO2lmKHUmJmcmJiJvYmpl''@;'; put 'put ''Y3QiPT10eXBlb2YgZyYmdm9pZCAwPT09Zy5vdXRsZXRzKXtpZighVmJlKHUsZyxhKSlyZXR1cm4gbztyKz0yfWVsc2V7aWYoIVZiZSh1LHt9LGEpKXJldHVybiBvO3IrK31pKyt9cmV0dXJue21hdGNoOiEwLHBhdGhJbmRleDppLGNvbW1hbmRJbmRleDpyfX0obixlLHQpLGk9dC5zbGljZShy''@;'; put 'put ''LmNvbW1hbmRJbmRleCk7aWYoci5tYXRjaCYmci5wYXRoSW5kZXg8bi5zZWdtZW50cy5sZW5ndGgpe2NvbnN0IG89bmV3IHd1KG4uc2VnbWVudHMuc2xpY2UoMCxyLnBhdGhJbmRleCkse30pO3JldHVybiBvLmNoaWxkcmVuW1pzXT1uZXcgd3Uobi5zZWdtZW50cy5zbGljZShyLnBhdGhJbmRl''@;'; put 'put ''eCksbi5jaGlsZHJlbiksSEkobywwLGkpfXJldHVybiByLm1hdGNoJiYwPT09aS5sZW5ndGg/bmV3IHd1KG4uc2VnbWVudHMse30pOnIubWF0Y2gmJiFuLmhhc0NoaWxkcmVuKCk/cXJlKG4sZSx0KTpyLm1hdGNoP0hJKG4sMCxpKTpxcmUobixlLHQpfWZ1bmN0aW9uIEhJKG4sZSx0KXtpZigw''@;'; put 'put ''PT09dC5sZW5ndGgpcmV0dXJuIG5ldyB3dShuLnNlZ21lbnRzLHt9KTt7Y29uc3Qgcj1mdW5jdGlvbiBtdXQobil7cmV0dXJuIFBJKG5bMF0pP25bMF0ub3V0bGV0czp7W1pzXTpufX0odCksaT17fTtpZihPYmplY3Qua2V5cyhyKS5zb21lKG89Pm8hPT1acykmJm4uY2hpbGRyZW5bWnNdJiYx''@;'; put 'put ''PT09bi5udW1iZXJPZkNoaWxkcmVuJiYwPT09bi5jaGlsZHJlbltac10uc2VnbWVudHMubGVuZ3RoKXtjb25zdCBvPUhJKG4uY2hpbGRyZW5bWnNdLGUsdCk7cmV0dXJuIG5ldyB3dShuLnNlZ21lbnRzLG8uY2hpbGRyZW4pfXJldHVybiBPYmplY3QuZW50cmllcyhyKS5mb3JFYWNoKChbbyxh''@;'; put 'put ''XSk9Pnsic3RyaW5nIj09dHlwZW9mIGEmJihhPVthXSksbnVsbCE9PWEmJihpW29dPVBiZShuLmNoaWxkcmVuW29dLGUsYSkpfSksT2JqZWN0LmVudHJpZXMobi5jaGlsZHJlbikuZm9yRWFjaCgoW28sYV0pPT57dm9pZCAwPT09cltvXSYmKGlbb109YSl9KSxuZXcgd3Uobi5zZWdtZW50cyxp''@;'; put 'put ''KX19ZnVuY3Rpb24gcXJlKG4sZSx0KXtjb25zdCByPW4uc2VnbWVudHMuc2xpY2UoMCxlKTtsZXQgaT0wO2Zvcig7aTx0Lmxlbmd0aDspe2NvbnN0IG89dFtpXTtpZihQSShvKSl7Y29uc3QgdT1fdXQoby5vdXRsZXRzKTtyZXR1cm4gbmV3IHd1KHIsdSl9aWYoMD09PWkmJkJVKHRbMF0pKXty''@;'; put 'put ''LnB1c2gobmV3IE9JKG4uc2VnbWVudHNbZV0ucGF0aCxIYmUodFswXSkpKSxpKys7Y29udGludWV9Y29uc3QgYT1QSShvKT9vLm91dGxldHNbWnNdOmAke299YCxsPWk8dC5sZW5ndGgtMT90W2krMV06bnVsbDthJiZsJiZCVShsKT8oci5wdXNoKG5ldyBPSShhLEhiZShsKSkpLGkrPTIpOihy''@;'; put 'put ''LnB1c2gobmV3IE9JKGEse30pKSxpKyspfXJldHVybiBuZXcgd3Uocix7fSl9ZnVuY3Rpb24gX3V0KG4pe2NvbnN0IGU9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKG4pLmZvckVhY2goKFt0LHJdKT0+eyJzdHJpbmciPT10eXBlb2YgciYmKHI9W3JdKSxudWxsIT09ciYmKGVbdF09cXJlKG5l''@;'; put 'put ''dyB3dShbXSx7fSksMCxyKSl9KSxlfWZ1bmN0aW9uIEhiZShuKXtjb25zdCBlPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhuKS5mb3JFYWNoKChbdCxyXSk9PmVbdF09YCR7cn1gKSxlfWZ1bmN0aW9uIFZiZShuLGUsdCl7cmV0dXJuIG49PXQucGF0aCYmSDUoZSx0LnBhcmFtZXRlcnMpfWNv''@;'; put 'put ''bnN0IFZJPSJpbXBlcmF0aXZlIjt2YXIgS2w9ZnVuY3Rpb24obil7cmV0dXJuIG5bbi5OYXZpZ2F0aW9uU3RhcnQ9MF09Ik5hdmlnYXRpb25TdGFydCIsbltuLk5hdmlnYXRpb25FbmQ9MV09Ik5hdmlnYXRpb25FbmQiLG5bbi5OYXZpZ2F0aW9uQ2FuY2VsPTJdPSJOYXZpZ2F0aW9uQ2FuY2Vs''@;'; put 'put ''IixuW24uTmF2aWdhdGlvbkVycm9yPTNdPSJOYXZpZ2F0aW9uRXJyb3IiLG5bbi5Sb3V0ZXNSZWNvZ25pemVkPTRdPSJSb3V0ZXNSZWNvZ25pemVkIixuW24uUmVzb2x2ZVN0YXJ0PTVdPSJSZXNvbHZlU3RhcnQiLG5bbi5SZXNvbHZlRW5kPTZdPSJSZXNvbHZlRW5kIixuW24uR3VhcmRzQ2hl''@;'; put 'put ''Y2tTdGFydD03XT0iR3VhcmRzQ2hlY2tTdGFydCIsbltuLkd1YXJkc0NoZWNrRW5kPThdPSJHdWFyZHNDaGVja0VuZCIsbltuLlJvdXRlQ29uZmlnTG9hZFN0YXJ0PTldPSJSb3V0ZUNvbmZpZ0xvYWRTdGFydCIsbltuLlJvdXRlQ29uZmlnTG9hZEVuZD0xMF09IlJvdXRlQ29uZmlnTG9hZEVu''@;'; put 'put ''ZCIsbltuLkNoaWxkQWN0aXZhdGlvblN0YXJ0PTExXT0iQ2hpbGRBY3RpdmF0aW9uU3RhcnQiLG5bbi5DaGlsZEFjdGl2YXRpb25FbmQ9MTJdPSJDaGlsZEFjdGl2YXRpb25FbmQiLG5bbi5BY3RpdmF0aW9uU3RhcnQ9MTNdPSJBY3RpdmF0aW9uU3RhcnQiLG5bbi5BY3RpdmF0aW9uRW5kPTE0''@;'; put 'put ''XT0iQWN0aXZhdGlvbkVuZCIsbltuLlNjcm9sbD0xNV09IlNjcm9sbCIsbltuLk5hdmlnYXRpb25Ta2lwcGVkPTE2XT0iTmF2aWdhdGlvblNraXBwZWQiLG59KEtsfHx7fSk7Y2xhc3MgVjV7aWQ7dXJsO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5pZD1lLHRoaXMudXJsPXR9fWNsYXNzIFVVIGV4''@;'; put 'put ''dGVuZHMgVjV7dHlwZT1LbC5OYXZpZ2F0aW9uU3RhcnQ7bmF2aWdhdGlvblRyaWdnZXI7cmVzdG9yZWRTdGF0ZTtjb25zdHJ1Y3RvcihlLHQscj0iaW1wZXJhdGl2ZSIsaT1udWxsKXtzdXBlcihlLHQpLHRoaXMubmF2aWdhdGlvblRyaWdnZXI9cix0aGlzLnJlc3RvcmVkU3RhdGU9aX10b1N0''@;'; put 'put ''cmluZygpe3JldHVybmBOYXZpZ2F0aW9uU3RhcnQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JylgfX1jbGFzcyBCNSBleHRlbmRzIFY1e3VybEFmdGVyUmVkaXJlY3RzO3R5cGU9S2wuTmF2aWdhdGlvbkVuZDtjb25zdHJ1Y3RvcihlLHQscil7c3VwZXIoZSx0KSx0aGlzLnVy''@;'; put 'put ''bEFmdGVyUmVkaXJlY3RzPXJ9dG9TdHJpbmcoKXtyZXR1cm5gTmF2aWdhdGlvbkVuZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nKWB9fXZhciBUMz1mdW5jdGlvbihuKXtyZXR1cm4gbltu''@;'; put 'put ''LlJlZGlyZWN0PTBdPSJSZWRpcmVjdCIsbltuLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb249MV09IlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24iLG5bbi5Ob0RhdGFGcm9tUmVzb2x2ZXI9Ml09Ik5vRGF0YUZyb21SZXNvbHZlciIsbltuLkd1YXJkUmVqZWN0ZWQ9M109Ikd1YXJkUmVqZWN0''@;'; put 'put ''ZWQiLG5bbi5BYm9ydGVkPTRdPSJBYm9ydGVkIixufShUM3x8e30pLHpVPWZ1bmN0aW9uKG4pe3JldHVybiBuW24uSWdub3JlZFNhbWVVcmxOYXZpZ2F0aW9uPTBdPSJJZ25vcmVkU2FtZVVybE5hdmlnYXRpb24iLG5bbi5JZ25vcmVkQnlVcmxIYW5kbGluZ1N0cmF0ZWd5PTFdPSJJZ25vcmVk''@;'; put 'put ''QnlVcmxIYW5kbGluZ1N0cmF0ZWd5IixufSh6VXx8e30pO2NsYXNzIFNiIGV4dGVuZHMgVjV7cmVhc29uO2NvZGU7dHlwZT1LbC5OYXZpZ2F0aW9uQ2FuY2VsO2NvbnN0cnVjdG9yKGUsdCxyLGkpe3N1cGVyKGUsdCksdGhpcy5yZWFzb249cix0aGlzLmNvZGU9aX10b1N0cmluZygpe3JldHVy''@;'; put 'put ''bmBOYXZpZ2F0aW9uQ2FuY2VsKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScpYH19Y2xhc3MgUEUgZXh0ZW5kcyBWNXtyZWFzb247Y29kZTt0eXBlPUtsLk5hdmlnYXRpb25Ta2lwcGVkO2NvbnN0cnVjdG9yKGUsdCxyLGkpe3N1cGVyKGUsdCksdGhpcy5yZWFzb249cix0aGlz''@;'; put 'put ''LmNvZGU9aX19Y2xhc3MgS3JlIGV4dGVuZHMgVjV7ZXJyb3I7dGFyZ2V0O3R5cGU9S2wuTmF2aWdhdGlvbkVycm9yO2NvbnN0cnVjdG9yKGUsdCxyLGkpe3N1cGVyKGUsdCksdGhpcy5lcnJvcj1yLHRoaXMudGFyZ2V0PWl9dG9TdHJpbmcoKXtyZXR1cm5gTmF2aWdhdGlvbkVycm9yKGlkOiAk''@;'; put 'put ''e3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIGVycm9yOiAke3RoaXMuZXJyb3J9KWB9fWNsYXNzIEJiZSBleHRlbmRzIFY1e3VybEFmdGVyUmVkaXJlY3RzO3N0YXRlO3R5cGU9S2wuUm91dGVzUmVjb2duaXplZDtjb25zdHJ1Y3RvcihlLHQscixpKXtzdXBlcihlLHQpLHRoaXMudXJs''@;'; put 'put ''QWZ0ZXJSZWRpcmVjdHM9cix0aGlzLnN0YXRlPWl9dG9TdHJpbmcoKXtyZXR1cm5gUm91dGVzUmVjb2duaXplZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0''@;'; put 'put ''YXRlfSlgfX1jbGFzcyB5dXQgZXh0ZW5kcyBWNXt1cmxBZnRlclJlZGlyZWN0cztzdGF0ZTt0eXBlPUtsLkd1YXJkc0NoZWNrU3RhcnQ7Y29uc3RydWN0b3IoZSx0LHIsaSl7c3VwZXIoZSx0KSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPXIsdGhpcy5zdGF0ZT1pfXRvU3RyaW5nKCl7cmV0dXJu''@;'; put 'put ''YEd1YXJkc0NoZWNrU3RhcnQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0pYH19Y2xhc3MgYnV0IGV4dGVuZHMgVjV7dXJsQWZ0ZXJSZWRpcmVjdHM7''@;'; put 'put ''c3RhdGU7c2hvdWxkQWN0aXZhdGU7dHlwZT1LbC5HdWFyZHNDaGVja0VuZDtjb25zdHJ1Y3RvcihlLHQscixpLG8pe3N1cGVyKGUsdCksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1yLHRoaXMuc3RhdGU9aSx0aGlzLnNob3VsZEFjdGl2YXRlPW99dG9TdHJpbmcoKXtyZXR1cm5gR3VhcmRzQ2hl''@;'; put 'put ''Y2tFbmQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0sIHNob3VsZEFjdGl2YXRlOiAke3RoaXMuc2hvdWxkQWN0aXZhdGV9KWB9fWNsYXNzIHd1dCBl''@;'; put 'put ''eHRlbmRzIFY1e3VybEFmdGVyUmVkaXJlY3RzO3N0YXRlO3R5cGU9S2wuUmVzb2x2ZVN0YXJ0O2NvbnN0cnVjdG9yKGUsdCxyLGkpe3N1cGVyKGUsdCksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1yLHRoaXMuc3RhdGU9aX10b1N0cmluZygpe3JldHVybmBSZXNvbHZlU3RhcnQoaWQ6ICR7dGhp''@;'; put 'put ''cy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0pYH19Y2xhc3MgQ3V0IGV4dGVuZHMgVjV7dXJsQWZ0ZXJSZWRpcmVjdHM7c3RhdGU7dHlwZT1LbC5SZXNvbHZlRW5kO2Nv''@;'; put 'put ''bnN0cnVjdG9yKGUsdCxyLGkpe3N1cGVyKGUsdCksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1yLHRoaXMuc3RhdGU9aX10b1N0cmluZygpe3JldHVybmBSZXNvbHZlRW5kKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFm''@;'; put 'put ''dGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9fWNsYXNzIFN1dHtyb3V0ZTt0eXBlPUtsLlJvdXRlQ29uZmlnTG9hZFN0YXJ0O2NvbnN0cnVjdG9yKGUpe3RoaXMucm91dGU9ZX10b1N0cmluZygpe3JldHVybmBSb3V0ZUNvbmZpZ0xvYWRTdGFydChwYXRoOiAke3RoaXMu''@;'; put 'put ''cm91dGUucGF0aH0pYH19Y2xhc3MgRXV0e3JvdXRlO3R5cGU9S2wuUm91dGVDb25maWdMb2FkRW5kO2NvbnN0cnVjdG9yKGUpe3RoaXMucm91dGU9ZX10b1N0cmluZygpe3JldHVybmBSb3V0ZUNvbmZpZ0xvYWRFbmQocGF0aDogJHt0aGlzLnJvdXRlLnBhdGh9KWB9fWNsYXNzIE11dHtzbmFw''@;'; put 'put ''c2hvdDt0eXBlPUtsLkNoaWxkQWN0aXZhdGlvblN0YXJ0O2NvbnN0cnVjdG9yKGUpe3RoaXMuc25hcHNob3Q9ZX10b1N0cmluZygpe3JldHVybmBDaGlsZEFjdGl2YXRpb25TdGFydChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmln''@;'; put 'put ''LnBhdGh8fCIifScpYH19Y2xhc3MgVHV0e3NuYXBzaG90O3R5cGU9S2wuQ2hpbGRBY3RpdmF0aW9uRW5kO2NvbnN0cnVjdG9yKGUpe3RoaXMuc25hcHNob3Q9ZX10b1N0cmluZygpe3JldHVybmBDaGlsZEFjdGl2YXRpb25FbmQocGF0aDogJyR7dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYm''@;'; put 'put ''dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIn0nKWB9fWNsYXNzIHh1dHtzbmFwc2hvdDt0eXBlPUtsLkFjdGl2YXRpb25TdGFydDtjb25zdHJ1Y3RvcihlKXt0aGlzLnNuYXBzaG90PWV9dG9TdHJpbmcoKXtyZXR1cm5gQWN0aXZhdGlvblN0YXJ0KHBhdGg6ICcke3RoaXMuc25h''@;'; put 'put ''cHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiJ9JylgfX1jbGFzcyBBdXR7c25hcHNob3Q7dHlwZT1LbC5BY3RpdmF0aW9uRW5kO2NvbnN0cnVjdG9yKGUpe3RoaXMuc25hcHNob3Q9ZX10b1N0cmluZygpe3JldHVybmBBY3RpdmF0aW9uRW5kKHBh''@;'; put 'put ''dGg6ICcke3RoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiJ9JylgfX1jbGFzcyBqYmV7cm91dGVyRXZlbnQ7cG9zaXRpb247YW5jaG9yO3R5cGU9S2wuU2Nyb2xsO2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLnJvdXRlckV2ZW50PWUs''@;'; put 'put ''dGhpcy5wb3NpdGlvbj10LHRoaXMuYW5jaG9yPXJ9dG9TdHJpbmcoKXtyZXR1cm5gU2Nyb2xsKGFuY2hvcjogJyR7dGhpcy5hbmNob3J9JywgcG9zaXRpb246ICcke3RoaXMucG9zaXRpb24/YCR7dGhpcy5wb3NpdGlvblswXX0sICR7dGhpcy5wb3NpdGlvblsxXX1gOm51bGx9JylgfX1jbGFz''@;'; put 'put ''cyBYcmV7fWNsYXNzIFdVe3VybDtuYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy51cmw9ZSx0aGlzLm5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM9dH19ZnVuY3Rpb24gbDQobil7cmV0dXJuIG4ub3V0bGV0fHxac31mdW5jdGlvbiBIRShuKXtpZighbily''@;'; put 'put ''ZXR1cm4gbnVsbDtpZihuLnJvdXRlQ29uZmlnPy5faW5qZWN0b3IpcmV0dXJuIG4ucm91dGVDb25maWcuX2luamVjdG9yO2ZvcihsZXQgZT1uLnBhcmVudDtlO2U9ZS5wYXJlbnQpe2NvbnN0IHQ9ZS5yb3V0ZUNvbmZpZztpZih0Py5fbG9hZGVkSW5qZWN0b3IpcmV0dXJuIHQuX2xvYWRlZElu''@;'; put 'put ''amVjdG9yO2lmKHQ/Ll9pbmplY3RvcilyZXR1cm4gdC5faW5qZWN0b3J9cmV0dXJuIG51bGx9Y2xhc3MgTnV0e3Jvb3RJbmplY3RvcjtvdXRsZXQ9bnVsbDtyb3V0ZT1udWxsO2NoaWxkcmVuO2F0dGFjaFJlZj1udWxsO2dldCBpbmplY3Rvcigpe3JldHVybiBIRSh0aGlzLnJvdXRlPy5zbmFw''@;'; put 'put ''c2hvdCk/P3RoaXMucm9vdEluamVjdG9yfWNvbnN0cnVjdG9yKGUpe3RoaXMucm9vdEluamVjdG9yPWUsdGhpcy5jaGlsZHJlbj1uZXcgQkkodGhpcy5yb290SW5qZWN0b3IpfX1sZXQgQkk9KCgpPT57Y2xhc3Mgbntyb290SW5qZWN0b3I7Y29udGV4dHM9bmV3IE1hcDtjb25zdHJ1Y3Rvcih0''@;'; put 'put ''KXt0aGlzLnJvb3RJbmplY3Rvcj10fW9uQ2hpbGRPdXRsZXRDcmVhdGVkKHQscil7Y29uc3QgaT10aGlzLmdldE9yQ3JlYXRlQ29udGV4dCh0KTtpLm91dGxldD1yLHRoaXMuY29udGV4dHMuc2V0KHQsaSl9b25DaGlsZE91dGxldERlc3Ryb3llZCh0KXtjb25zdCByPXRoaXMuZ2V0Q29udGV4''@;'; put 'put ''dCh0KTtyJiYoci5vdXRsZXQ9bnVsbCxyLmF0dGFjaFJlZj1udWxsKX1vbk91dGxldERlYWN0aXZhdGVkKCl7Y29uc3QgdD10aGlzLmNvbnRleHRzO3JldHVybiB0aGlzLmNvbnRleHRzPW5ldyBNYXAsdH1vbk91dGxldFJlQXR0YWNoZWQodCl7dGhpcy5jb250ZXh0cz10fWdldE9yQ3JlYXRl''@;'; put 'put ''Q29udGV4dCh0KXtsZXQgcj10aGlzLmdldENvbnRleHQodCk7cmV0dXJuIHJ8fChyPW5ldyBOdXQodGhpcy5yb290SW5qZWN0b3IpLHRoaXMuY29udGV4dHMuc2V0KHQscikpLHJ9Z2V0Q29udGV4dCh0KXtyZXR1cm4gdGhpcy5jb250ZXh0cy5nZXQodCl8fG51bGx9c3RhdGljIFx1MDI3NWZh''@;'; put 'put ''Yz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKG9yKG5sKSl9O3N0YXRpYyBcdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0pKCk7Y2xhc3MgVWJle19yb290O2NvbnN0cnVjdG9yKGUpe3RoaXMuX3Jvb3Q9''@;'; put 'put ''ZX1nZXQgcm9vdCgpe3JldHVybiB0aGlzLl9yb290LnZhbHVlfXBhcmVudChlKXtjb25zdCB0PXRoaXMucGF0aEZyb21Sb290KGUpO3JldHVybiB0Lmxlbmd0aD4xP3RbdC5sZW5ndGgtMl06bnVsbH1jaGlsZHJlbihlKXtjb25zdCB0PVFyZShlLHRoaXMuX3Jvb3QpO3JldHVybiB0P3QuY2hp''@;'; put 'put ''bGRyZW4ubWFwKHI9PnIudmFsdWUpOltdfWZpcnN0Q2hpbGQoZSl7Y29uc3QgdD1RcmUoZSx0aGlzLl9yb290KTtyZXR1cm4gdCYmdC5jaGlsZHJlbi5sZW5ndGg+MD90LmNoaWxkcmVuWzBdLnZhbHVlOm51bGx9c2libGluZ3MoZSl7Y29uc3QgdD1KcmUoZSx0aGlzLl9yb290KTtyZXR1cm4g''@;'; put 'put ''dC5sZW5ndGg8Mj9bXTp0W3QubGVuZ3RoLTJdLmNoaWxkcmVuLm1hcChpPT5pLnZhbHVlKS5maWx0ZXIoaT0+aSE9PWUpfXBhdGhGcm9tUm9vdChlKXtyZXR1cm4gSnJlKGUsdGhpcy5fcm9vdCkubWFwKHQ9PnQudmFsdWUpfX1mdW5jdGlvbiBRcmUobixlKXtpZihuPT09ZS52YWx1ZSlyZXR1''@;'; put 'put ''cm4gZTtmb3IoY29uc3QgdCBvZiBlLmNoaWxkcmVuKXtjb25zdCByPVFyZShuLHQpO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gSnJlKG4sZSl7aWYobj09PWUudmFsdWUpcmV0dXJuW2VdO2Zvcihjb25zdCB0IG9mIGUuY2hpbGRyZW4pe2NvbnN0IHI9SnJlKG4sdCk7aWYo''@;'; put 'put ''ci5sZW5ndGgpcmV0dXJuIHIudW5zaGlmdChlKSxyfXJldHVybltdfWNsYXNzIGM0e3ZhbHVlO2NoaWxkcmVuO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy52YWx1ZT1lLHRoaXMuY2hpbGRyZW49dH10b1N0cmluZygpe3JldHVybmBUcmVlTm9kZSgke3RoaXMudmFsdWV9KWB9fWZ1bmN0aW9uIFZF''@;'; put 'put ''KG4pe2NvbnN0IGU9e307cmV0dXJuIG4mJm4uY2hpbGRyZW4uZm9yRWFjaCh0PT5lW3QudmFsdWUub3V0bGV0XT10KSxlfWNsYXNzIHpiZSBleHRlbmRzIFViZXtzbmFwc2hvdDtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUpLHRoaXMuc25hcHNob3Q9dCxlaWUodGhpcyxlKX10b1N0cmluZygp''@;'; put 'put ''e3JldHVybiB0aGlzLnNuYXBzaG90LnRvU3RyaW5nKCl9fWZ1bmN0aW9uIFdiZShuKXtjb25zdCBlPWZ1bmN0aW9uIEZ1dChuKXtjb25zdCBvPW5ldyBaVShbXSx7fSx7fSwiIix7fSxacyxuLG51bGwse30pO3JldHVybiBuZXcgWWJlKCIiLG5ldyBjNChvLFtdKSl9KG4pLHQ9bmV3ICRpKFtu''@;'; put 'put ''ZXcgT0koIiIse30pXSkscj1uZXcgJGkoe30pLGk9bmV3ICRpKHt9KSxvPW5ldyAkaSh7fSksYT1uZXcgJGkoIiIpLGw9bmV3IHAxKHQscixvLGEsaSxacyxuLGUucm9vdCk7cmV0dXJuIGwuc25hcHNob3Q9ZS5yb290LG5ldyB6YmUobmV3IGM0KGwsW10pLGUpfWNsYXNzIHAxe3VybFN1Ympl''@;'; put 'put ''Y3Q7cGFyYW1zU3ViamVjdDtxdWVyeVBhcmFtc1N1YmplY3Q7ZnJhZ21lbnRTdWJqZWN0O2RhdGFTdWJqZWN0O291dGxldDtjb21wb25lbnQ7c25hcHNob3Q7X2Z1dHVyZVNuYXBzaG90O19yb3V0ZXJTdGF0ZTtfcGFyYW1NYXA7X3F1ZXJ5UGFyYW1NYXA7dGl0bGU7dXJsO3BhcmFtcztxdWVy''@;'; put 'put ''eVBhcmFtcztmcmFnbWVudDtkYXRhO2NvbnN0cnVjdG9yKGUsdCxyLGksbyxhLGwsdSl7dGhpcy51cmxTdWJqZWN0PWUsdGhpcy5wYXJhbXNTdWJqZWN0PXQsdGhpcy5xdWVyeVBhcmFtc1N1YmplY3Q9cix0aGlzLmZyYWdtZW50U3ViamVjdD1pLHRoaXMuZGF0YVN1YmplY3Q9byx0aGlzLm91''@;'; put 'put ''dGxldD1hLHRoaXMuY29tcG9uZW50PWwsdGhpcy5fZnV0dXJlU25hcHNob3Q9dSx0aGlzLnRpdGxlPXRoaXMuZGF0YVN1YmplY3Q/LnBpcGUoRXMoZz0+Z1tMSV0pKT8/UGEodm9pZCAwKSx0aGlzLnVybD1lLHRoaXMucGFyYW1zPXQsdGhpcy5xdWVyeVBhcmFtcz1yLHRoaXMuZnJhZ21lbnQ9''@;'; put 'put ''aSx0aGlzLmRhdGE9b31nZXQgcm91dGVDb25maWcoKXtyZXR1cm4gdGhpcy5fZnV0dXJlU25hcHNob3Qucm91dGVDb25maWd9Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9vdH1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX1n''@;'; put 'put ''ZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlzKX1nZXQgcGF0aEZyb21Sb290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9t''@;'; put 'put ''Um9vdCh0aGlzKX1nZXQgcGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1NYXA/Pz10aGlzLnBhcmFtcy5waXBlKEVzKGU9PkZFKGUpKSksdGhpcy5fcGFyYW1NYXB9Z2V0IHF1ZXJ5UGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcD8/PXRoaXMucXVlcnlQYXJhbXMucGlw''@;'; put 'put ''ZShFcyhlPT5GRShlKSkpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5zbmFwc2hvdD90aGlzLnNuYXBzaG90LnRvU3RyaW5nKCk6YEZ1dHVyZSgke3RoaXMuX2Z1dHVyZVNuYXBzaG90fSlgfX1mdW5jdGlvbiBZVShuLGUsdD0iZW1wdHlPbmx5Iil7bGV0IHI7''@;'; put 'put ''Y29uc3R7cm91dGVDb25maWc6aX09bjtyZXR1cm4gcj1udWxsPT09ZXx8ImFsd2F5cyIhPT10JiYiIiE9PWk/LnBhdGgmJihlLmNvbXBvbmVudHx8ZS5yb3V0ZUNvbmZpZz8ubG9hZENvbXBvbmVudCk/e3BhcmFtczp7Li4ubi5wYXJhbXN9LGRhdGE6ey4uLm4uZGF0YX0scmVzb2x2ZTp7Li4u''@;'; put 'put ''bi5kYXRhLC4uLm4uX3Jlc29sdmVkRGF0YT8/e319fTp7cGFyYW1zOnsuLi5lLnBhcmFtcywuLi5uLnBhcmFtc30sZGF0YTp7Li4uZS5kYXRhLC4uLm4uZGF0YX0scmVzb2x2ZTp7Li4ubi5kYXRhLC4uLmUuZGF0YSwuLi5pPy5kYXRhLC4uLm4uX3Jlc29sdmVkRGF0YX19LGkmJkdiZShpKSYm''@;'; put 'put ''KHIucmVzb2x2ZVtMSV09aS50aXRsZSkscn1jbGFzcyBaVXt1cmw7cGFyYW1zO3F1ZXJ5UGFyYW1zO2ZyYWdtZW50O2RhdGE7b3V0bGV0O2NvbXBvbmVudDtyb3V0ZUNvbmZpZztfcmVzb2x2ZTtfcmVzb2x2ZWREYXRhO19yb3V0ZXJTdGF0ZTtfcGFyYW1NYXA7X3F1ZXJ5UGFyYW1NYXA7Z2V0''@;'; put 'put ''IHRpdGxlKCl7cmV0dXJuIHRoaXMuZGF0YT8uW0xJXX1jb25zdHJ1Y3RvcihlLHQscixpLG8sYSxsLHUsZyl7dGhpcy51cmw9ZSx0aGlzLnBhcmFtcz10LHRoaXMucXVlcnlQYXJhbXM9cix0aGlzLmZyYWdtZW50PWksdGhpcy5kYXRhPW8sdGhpcy5vdXRsZXQ9YSx0aGlzLmNvbXBvbmVudD1s''@;'; put 'put ''LHRoaXMucm91dGVDb25maWc9dSx0aGlzLl9yZXNvbHZlPWd9Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9vdH1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLl9yb3V0ZXJT''@;'; put 'put ''dGF0ZS5maXJzdENoaWxkKHRoaXMpfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlzKX1nZXQgcGF0aEZyb21Sb290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9vdCh0aGlzKX1nZXQgcGFyYW1NYXAoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fcGFyYW1NYXA/Pz1GRSh0aGlzLnBhcmFtcyksdGhpcy5fcGFyYW1NYXB9Z2V0IHF1ZXJ5UGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcD8/PUZFKHRoaXMucXVlcnlQYXJhbXMpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9dG9TdHJpbmcoKXtyZXR1cm5gUm91dGUodXJsOick''@;'; put 'put ''e3RoaXMudXJsLm1hcChyPT5yLnRvU3RyaW5nKCkpLmpvaW4oIi8iKX0nLCBwYXRoOicke3RoaXMucm91dGVDb25maWc/dGhpcy5yb3V0ZUNvbmZpZy5wYXRoOiIifScpYH19Y2xhc3MgWWJlIGV4dGVuZHMgVWJle3VybDtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKHQpLHRoaXMudXJsPWUsZWll''@;'; put 'put ''KHRoaXMsdCl9dG9TdHJpbmcoKXtyZXR1cm4gWmJlKHRoaXMuX3Jvb3QpfX1mdW5jdGlvbiBlaWUobixlKXtlLnZhbHVlLl9yb3V0ZXJTdGF0ZT1uLGUuY2hpbGRyZW4uZm9yRWFjaCh0PT5laWUobix0KSl9ZnVuY3Rpb24gWmJlKG4pe2NvbnN0IGU9bi5jaGlsZHJlbi5sZW5ndGg+MD9gIHsg''@;'; put 'put ''JHtuLmNoaWxkcmVuLm1hcChaYmUpLmpvaW4oIiwgIil9IH0gYDoiIjtyZXR1cm5gJHtuLnZhbHVlfSR7ZX1gfWZ1bmN0aW9uIHRpZShuKXtpZihuLnNuYXBzaG90KXtjb25zdCBlPW4uc25hcHNob3QsdD1uLl9mdXR1cmVTbmFwc2hvdDtuLnNuYXBzaG90PXQsSDUoZS5xdWVyeVBhcmFtcyx0''@;'; put 'put ''LnF1ZXJ5UGFyYW1zKXx8bi5xdWVyeVBhcmFtc1N1YmplY3QubmV4dCh0LnF1ZXJ5UGFyYW1zKSxlLmZyYWdtZW50IT09dC5mcmFnbWVudCYmbi5mcmFnbWVudFN1YmplY3QubmV4dCh0LmZyYWdtZW50KSxINShlLnBhcmFtcyx0LnBhcmFtcyl8fG4ucGFyYW1zU3ViamVjdC5uZXh0KHQucGFy''@;'; put 'put ''YW1zKSxmdW5jdGlvbiBHY3QobixlKXtpZihuLmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7Kyt0KWlmKCFINShuW3RdLGVbdF0pKXJldHVybiExO3JldHVybiEwfShlLnVybCx0LnVybCl8fG4udXJsU3ViamVjdC5uZXh0KHQudXJsKSxINShlLmRh''@;'; put 'put ''dGEsdC5kYXRhKXx8bi5kYXRhU3ViamVjdC5uZXh0KHQuZGF0YSl9ZWxzZSBuLnNuYXBzaG90PW4uX2Z1dHVyZVNuYXBzaG90LG4uZGF0YVN1YmplY3QubmV4dChuLl9mdXR1cmVTbmFwc2hvdC5kYXRhKX1mdW5jdGlvbiBuaWUobixlKXtjb25zdCB0PUg1KG4ucGFyYW1zLGUucGFyYW1zKSYm''@;'; put 'put ''ZnVuY3Rpb24gWGN0KG4sZSl7cmV0dXJuIHdiKG4sZSkmJm4uZXZlcnkoKHQscik9Pkg1KHQucGFyYW1ldGVycyxlW3JdLnBhcmFtZXRlcnMpKX0obi51cmwsZS51cmwpO3JldHVybiB0JiYhKCFuLnBhcmVudCE9IWUucGFyZW50KSYmKCFuLnBhcmVudHx8bmllKG4ucGFyZW50LGUucGFyZW50''@;'; put 'put ''KSl9ZnVuY3Rpb24gR2JlKG4pe3JldHVybiJzdHJpbmciPT10eXBlb2Ygbi50aXRsZXx8bnVsbD09PW4udGl0bGV9Y29uc3QgUHV0PW5ldyBFcigiIik7bGV0IGU3PSgoKT0+e2NsYXNzIG57YWN0aXZhdGVkPW51bGw7Z2V0IGFjdGl2YXRlZENvbXBvbmVudFJlZigpe3JldHVybiB0aGlzLmFj''@;'; put 'put ''dGl2YXRlZH1fYWN0aXZhdGVkUm91dGU9bnVsbDtuYW1lPVpzO2FjdGl2YXRlRXZlbnRzPW5ldyBLcjtkZWFjdGl2YXRlRXZlbnRzPW5ldyBLcjthdHRhY2hFdmVudHM9bmV3IEtyO2RldGFjaEV2ZW50cz1uZXcgS3I7cm91dGVyT3V0bGV0RGF0YT1OcnQoKTtwYXJlbnRDb250ZXh0cz1zbihC''@;'; put 'put ''SSk7bG9jYXRpb249c24oRHMpO2NoYW5nZURldGVjdG9yPXNuKFVsKTtpbnB1dEJpbmRlcj1zbihHVSx7b3B0aW9uYWw6ITB9KTtzdXBwb3J0c0JpbmRpbmdUb0NvbXBvbmVudElucHV0cz0hMDtuZ09uQ2hhbmdlcyh0KXtpZih0Lm5hbWUpe2NvbnN0e2ZpcnN0Q2hhbmdlOnIscHJldmlvdXNW''@;'; put 'put ''YWx1ZTppfT10Lm5hbWU7aWYocilyZXR1cm47dGhpcy5pc1RyYWNrZWRJblBhcmVudENvbnRleHRzKGkpJiYodGhpcy5kZWFjdGl2YXRlKCksdGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0RGVzdHJveWVkKGkpKSx0aGlzLmluaXRpYWxpemVPdXRsZXRXaXRoTmFtZSgpfX1uZ09u''@;'; put 'put ''RGVzdHJveSgpe3RoaXMuaXNUcmFja2VkSW5QYXJlbnRDb250ZXh0cyh0aGlzLm5hbWUpJiZ0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQodGhpcy5uYW1lKSx0aGlzLmlucHV0QmluZGVyPy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEodGhpcyl9aXNUcmFja2Vk''@;'; put 'put ''SW5QYXJlbnRDb250ZXh0cyh0KXtyZXR1cm4gdGhpcy5wYXJlbnRDb250ZXh0cy5nZXRDb250ZXh0KHQpPy5vdXRsZXQ9PT10aGlzfW5nT25Jbml0KCl7dGhpcy5pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKX1pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKXtpZih0aGlzLnBhcmVudENvbnRl''@;'; put 'put ''eHRzLm9uQ2hpbGRPdXRsZXRDcmVhdGVkKHRoaXMubmFtZSx0aGlzKSx0aGlzLmFjdGl2YXRlZClyZXR1cm47Y29uc3QgdD10aGlzLnBhcmVudENvbnRleHRzLmdldENvbnRleHQodGhpcy5uYW1lKTt0Py5yb3V0ZSYmKHQuYXR0YWNoUmVmP3RoaXMuYXR0YWNoKHQuYXR0YWNoUmVmLHQucm91''@;'; put 'put ''dGUpOnRoaXMuYWN0aXZhdGVXaXRoKHQucm91dGUsdC5pbmplY3RvcikpfWdldCBpc0FjdGl2YXRlZCgpe3JldHVybiEhdGhpcy5hY3RpdmF0ZWR9Z2V0IGNvbXBvbmVudCgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgV24oNDAxMiwhMSk7cmV0dXJuIHRoaXMuYWN0aXZhdGVkLmlu''@;'; put 'put ''c3RhbmNlfWdldCBhY3RpdmF0ZWRSb3V0ZSgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgV24oNDAxMiwhMSk7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlfWdldCBhY3RpdmF0ZWRSb3V0ZURhdGEoKXtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGU/dGhpcy5fYWN0aXZhdGVk''@;'; put 'put ''Um91dGUuc25hcHNob3QuZGF0YTp7fX1kZXRhY2goKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IFduKDQwMTIsITEpO3RoaXMubG9jYXRpb24uZGV0YWNoKCk7Y29uc3QgdD10aGlzLmFjdGl2YXRlZDtyZXR1cm4gdGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0''@;'; put 'put ''ZT1udWxsLHRoaXMuZGV0YWNoRXZlbnRzLmVtaXQodC5pbnN0YW5jZSksdH1hdHRhY2godCxyKXt0aGlzLmFjdGl2YXRlZD10LHRoaXMuX2FjdGl2YXRlZFJvdXRlPXIsdGhpcy5sb2NhdGlvbi5pbnNlcnQodC5ob3N0VmlldyksdGhpcy5pbnB1dEJpbmRlcj8uYmluZEFjdGl2YXRlZFJvdXRl''@;'; put 'put ''VG9PdXRsZXRDb21wb25lbnQodGhpcyksdGhpcy5hdHRhY2hFdmVudHMuZW1pdCh0Lmluc3RhbmNlKX1kZWFjdGl2YXRlKCl7aWYodGhpcy5hY3RpdmF0ZWQpe2NvbnN0IHQ9dGhpcy5jb21wb25lbnQ7dGhpcy5hY3RpdmF0ZWQuZGVzdHJveSgpLHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5f''@;'; put 'put ''YWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmRlYWN0aXZhdGVFdmVudHMuZW1pdCh0KX19YWN0aXZhdGVXaXRoKHQscil7aWYodGhpcy5pc0FjdGl2YXRlZCl0aHJvdyBuZXcgV24oNDAxMywhMSk7dGhpcy5fYWN0aXZhdGVkUm91dGU9dDtjb25zdCBpPXRoaXMubG9jYXRpb24sYT10LnNuYXBz''@;'; put 'put ''aG90LmNvbXBvbmVudCxsPXRoaXMucGFyZW50Q29udGV4dHMuZ2V0T3JDcmVhdGVDb250ZXh0KHRoaXMubmFtZSkuY2hpbGRyZW4sdT1uZXcgSHV0KHQsbCxpLmluamVjdG9yLHRoaXMucm91dGVyT3V0bGV0RGF0YSk7dGhpcy5hY3RpdmF0ZWQ9aS5jcmVhdGVDb21wb25lbnQoYSx7aW5kZXg6''@;'; put 'put ''aS5sZW5ndGgsaW5qZWN0b3I6dSxlbnZpcm9ubWVudEluamVjdG9yOnJ9KSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpLHRoaXMuaW5wdXRCaW5kZXI/LmJpbmRBY3RpdmF0ZWRSb3V0ZVRvT3V0bGV0Q29tcG9uZW50KHRoaXMpLHRoaXMuYWN0aXZhdGVFdmVudHMuZW1pdCh0''@;'; put 'put ''aGlzLmFjdGl2YXRlZC5pbnN0YW5jZSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbInJvdXRlci1vdXRsZXQiXV0saW5wdXRzOntuYW1lOiJuYW1lIixyb3V0ZXJPdXRsZXREYXRh''@;'; put 'put ''OlsxLCJyb3V0ZXJPdXRsZXREYXRhIl19LG91dHB1dHM6e2FjdGl2YXRlRXZlbnRzOiJhY3RpdmF0ZSIsZGVhY3RpdmF0ZUV2ZW50czoiZGVhY3RpdmF0ZSIsYXR0YWNoRXZlbnRzOiJhdHRhY2giLGRldGFjaEV2ZW50czoiZGV0YWNoIn0sZXhwb3J0QXM6WyJvdXRsZXQiXSxmZWF0dXJlczpb''@;'; put 'put ''aXVdfSl9cmV0dXJuIG59KSgpO2NsYXNzIEh1dHtyb3V0ZTtjaGlsZENvbnRleHRzO3BhcmVudDtvdXRsZXREYXRhO2NvbnN0cnVjdG9yKGUsdCxyLGkpe3RoaXMucm91dGU9ZSx0aGlzLmNoaWxkQ29udGV4dHM9dCx0aGlzLnBhcmVudD1yLHRoaXMub3V0bGV0RGF0YT1pfWdldChlLHQpe3Jl''@;'; put 'put ''dHVybiBlPT09cDE/dGhpcy5yb3V0ZTplPT09Qkk/dGhpcy5jaGlsZENvbnRleHRzOmU9PT1QdXQ/dGhpcy5vdXRsZXREYXRhOnRoaXMucGFyZW50LmdldChlLHQpfX1jb25zdCBHVT1uZXcgRXIoIiIpO2xldCAkYmU9KCgpPT57Y2xhc3MgbntvdXRsZXREYXRhU3Vic2NyaXB0aW9ucz1uZXcg''@;'; put 'put ''TWFwO2JpbmRBY3RpdmF0ZWRSb3V0ZVRvT3V0bGV0Q29tcG9uZW50KHQpe3RoaXMudW5zdWJzY3JpYmVGcm9tUm91dGVEYXRhKHQpLHRoaXMuc3Vic2NyaWJlVG9Sb3V0ZURhdGEodCl9dW5zdWJzY3JpYmVGcm9tUm91dGVEYXRhKHQpe3RoaXMub3V0bGV0RGF0YVN1YnNjcmlwdGlvbnMuZ2V0''@;'; put 'put ''KHQpPy51bnN1YnNjcmliZSgpLHRoaXMub3V0bGV0RGF0YVN1YnNjcmlwdGlvbnMuZGVsZXRlKHQpfXN1YnNjcmliZVRvUm91dGVEYXRhKHQpe2NvbnN0e2FjdGl2YXRlZFJvdXRlOnJ9PXQsaT1fYihbci5xdWVyeVBhcmFtcyxyLnBhcmFtcyxyLmRhdGFdKS5waXBlKG0wKChbbyxhLGxdLHUp''@;'; put 'put ''PT4obD17Li4ubywuLi5hLC4uLmx9LDA9PT11P1BhKGwpOlByb21pc2UucmVzb2x2ZShsKSkpKS5zdWJzY3JpYmUobz0+e2lmKCF0LmlzQWN0aXZhdGVkfHwhdC5hY3RpdmF0ZWRDb21wb25lbnRSZWZ8fHQuYWN0aXZhdGVkUm91dGUhPT1yfHxudWxsPT09ci5jb21wb25lbnQpcmV0dXJuIHZv''@;'; put 'put ''aWQgdGhpcy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEodCk7Y29uc3QgYT1mdW5jdGlvbiBJaXQobil7Y29uc3QgZT1jcyhuKTtpZighZSlyZXR1cm4gbnVsbDtjb25zdCB0PW5ldyBCUihlKTtyZXR1cm57Z2V0IHNlbGVjdG9yKCl7cmV0dXJuIHQuc2VsZWN0b3J9LGdldCB0eXBlKCl7cmV0''@;'; put 'put ''dXJuIHQuY29tcG9uZW50VHlwZX0sZ2V0IGlucHV0cygpe3JldHVybiB0LmlucHV0c30sZ2V0IG91dHB1dHMoKXtyZXR1cm4gdC5vdXRwdXRzfSxnZXQgbmdDb250ZW50U2VsZWN0b3JzKCl7cmV0dXJuIHQubmdDb250ZW50U2VsZWN0b3JzfSxnZXQgaXNTdGFuZGFsb25lKCl7cmV0dXJuIGUu''@;'; put 'put ''c3RhbmRhbG9uZX0sZ2V0IGlzU2lnbmFsKCl7cmV0dXJuIGUuc2lnbmFsc319fShyLmNvbXBvbmVudCk7aWYoYSlmb3IoY29uc3R7dGVtcGxhdGVOYW1lOmx9b2YgYS5pbnB1dHMpdC5hY3RpdmF0ZWRDb21wb25lbnRSZWYuc2V0SW5wdXQobCxvW2xdKTtlbHNlIHRoaXMudW5zdWJzY3JpYmVG''@;'; put 'put ''cm9tUm91dGVEYXRhKHQpfSk7dGhpcy5vdXRsZXREYXRhU3Vic2NyaXB0aW9ucy5zZXQodCxpKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KX1yZXR1cm4gbn0p''@;'; put 'put ''KCkscWJlPSgoKT0+e2NsYXNzIG57c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1Y21wPVByKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSxleHBvcnRBczpbImVtcHR5Um91dGVyT3V0bGV0Il0sZGVjbHM6MSx2''@;'; put 'put ''YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXsxJnImJkl0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltlN10sZW5jYXBzdWxhdGlvbjoyfSl9cmV0dXJuIG59KSgpO2Z1bmN0aW9uIHJpZShuKXtjb25zdCBlPW4uY2hpbGRyZW4mJm4uY2hpbGRyZW4ubWFwKHJpZSksdD1l''@;'; put 'put ''P3suLi5uLGNoaWxkcmVuOmV9OnsuLi5ufTtyZXR1cm4hdC5jb21wb25lbnQmJiF0LmxvYWRDb21wb25lbnQmJihlfHx0LmxvYWRDaGlsZHJlbikmJnQub3V0bGV0JiZ0Lm91dGxldCE9PVpzJiYodC5jb21wb25lbnQ9cWJlKSx0fWZ1bmN0aW9uIGpJKG4sZSx0KXtpZih0JiZuLnNob3VsZFJl''@;'; put 'put ''dXNlUm91dGUoZS52YWx1ZSx0LnZhbHVlLnNuYXBzaG90KSl7Y29uc3Qgcj10LnZhbHVlO3IuX2Z1dHVyZVNuYXBzaG90PWUudmFsdWU7Y29uc3QgaT1mdW5jdGlvbiBCdXQobixlLHQpe3JldHVybiBlLmNoaWxkcmVuLm1hcChyPT57Zm9yKGNvbnN0IGkgb2YgdC5jaGlsZHJlbilpZihuLnNo''@;'; put 'put ''b3VsZFJldXNlUm91dGUoci52YWx1ZSxpLnZhbHVlLnNuYXBzaG90KSlyZXR1cm4gakkobixyLGkpO3JldHVybiBqSShuLHIpfSl9KG4sZSx0KTtyZXR1cm4gbmV3IGM0KHIsaSl9e2lmKG4uc2hvdWxkQXR0YWNoKGUudmFsdWUpKXtjb25zdCBvPW4ucmV0cmlldmUoZS52YWx1ZSk7aWYobnVs''@;'; put 'put ''bCE9PW8pe2NvbnN0IGE9by5yb3V0ZTtyZXR1cm4gYS52YWx1ZS5fZnV0dXJlU25hcHNob3Q9ZS52YWx1ZSxhLmNoaWxkcmVuPWUuY2hpbGRyZW4ubWFwKGw9PmpJKG4sbCkpLGF9fWNvbnN0IHI9ZnVuY3Rpb24ganV0KG4pe3JldHVybiBuZXcgcDEobmV3ICRpKG4udXJsKSxuZXcgJGkobi5w''@;'; put 'put ''YXJhbXMpLG5ldyAkaShuLnF1ZXJ5UGFyYW1zKSxuZXcgJGkobi5mcmFnbWVudCksbmV3ICRpKG4uZGF0YSksbi5vdXRsZXQsbi5jb21wb25lbnQsbil9KGUudmFsdWUpLGk9ZS5jaGlsZHJlbi5tYXAobz0+akkobixvKSk7cmV0dXJuIG5ldyBjNChyLGkpfX1jbGFzcyBpaWV7cmVkaXJlY3RU''@;'; put 'put ''bztuYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5yZWRpcmVjdFRvPWUsdGhpcy5uYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zPXR9fWNvbnN0IEtiZT0ibmdOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3IiO2Z1bmN0aW9uICRVKG4sZSl7Y29uc3R7cmVkaXJl''@;'; put 'put ''Y3RUbzp0LG5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM6cn09Q2IoZSk/e3JlZGlyZWN0VG86ZSxuYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zOnZvaWQgMH06ZSxpPVhiZSghMSxUMy5SZWRpcmVjdCk7cmV0dXJuIGkudXJsPXQsaS5uYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zPXIsaX1mdW5j''@;'; put 'put ''dGlvbiBYYmUobixlKXtjb25zdCB0PW5ldyBFcnJvcihgTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yOiAke258fCIifWApO3JldHVybiB0W0tiZV09ITAsdC5jYW5jZWxsYXRpb25Db2RlPWUsdH1mdW5jdGlvbiBRYmUobil7cmV0dXJuISFuJiZuW0tiZV19Y2xhc3MgV3V0e3JvdXRlUmV1c2VT''@;'; put 'put ''dHJhdGVneTtmdXR1cmVTdGF0ZTtjdXJyU3RhdGU7Zm9yd2FyZEV2ZW50O2lucHV0QmluZGluZ0VuYWJsZWQ7Y29uc3RydWN0b3IoZSx0LHIsaSxvKXt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneT1lLHRoaXMuZnV0dXJlU3RhdGU9dCx0aGlzLmN1cnJTdGF0ZT1yLHRoaXMuZm9yd2FyZEV2ZW50''@;'; put 'put ''PWksdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkPW99YWN0aXZhdGUoZSl7Y29uc3QgdD10aGlzLmZ1dHVyZVN0YXRlLl9yb290LHI9dGhpcy5jdXJyU3RhdGU/dGhpcy5jdXJyU3RhdGUuX3Jvb3Q6bnVsbDt0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyh0LHIsZSksdGllKHRoaXMuZnV0dXJl''@;'; put 'put ''U3RhdGUucm9vdCksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKHQscixlKX1kZWFjdGl2YXRlQ2hpbGRSb3V0ZXMoZSx0LHIpe2NvbnN0IGk9VkUodCk7ZS5jaGlsZHJlbi5mb3JFYWNoKG89Pntjb25zdCBhPW8udmFsdWUub3V0bGV0O3RoaXMuZGVhY3RpdmF0ZVJvdXRlcyhvLGlbYV0sciks''@;'; put 'put ''ZGVsZXRlIGlbYV19KSxPYmplY3QudmFsdWVzKGkpLmZvckVhY2gobz0+e3RoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4obyxyKX0pfWRlYWN0aXZhdGVSb3V0ZXMoZSx0LHIpe2NvbnN0IGk9ZS52YWx1ZSxvPXQ/dC52YWx1ZTpudWxsO2lmKGk9PT1vKWlmKGkuY29tcG9uZW50''@;'; put 'put ''KXtjb25zdCBhPXIuZ2V0Q29udGV4dChpLm91dGxldCk7YSYmdGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXMoZSx0LGEuY2hpbGRyZW4pfWVsc2UgdGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXMoZSx0LHIpO2Vsc2UgbyYmdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih0LHIp''@;'; put 'put ''fWRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKGUsdCl7ZS52YWx1ZS5jb21wb25lbnQmJnRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZERldGFjaChlLnZhbHVlLnNuYXBzaG90KT90aGlzLmRldGFjaEFuZFN0b3JlUm91dGVTdWJ0cmVlKGUsdCk6dGhpcy5kZWFjdGl2YXRlUm91''@;'; put 'put ''dGVBbmRPdXRsZXQoZSx0KX1kZXRhY2hBbmRTdG9yZVJvdXRlU3VidHJlZShlLHQpe2NvbnN0IHI9dC5nZXRDb250ZXh0KGUudmFsdWUub3V0bGV0KSxpPXImJmUudmFsdWUuY29tcG9uZW50P3IuY2hpbGRyZW46dCxvPVZFKGUpO2Zvcihjb25zdCBhIG9mIE9iamVjdC52YWx1ZXMobykpdGhp''@;'; put 'put ''cy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihhLGkpO2lmKHImJnIub3V0bGV0KXtjb25zdCBhPXIub3V0bGV0LmRldGFjaCgpLGw9ci5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCk7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc3RvcmUoZS52YWx1ZS5zbmFwc2hvdCx7Y29t''@;'; put 'put ''cG9uZW50UmVmOmEscm91dGU6ZSxjb250ZXh0czpsfSl9fWRlYWN0aXZhdGVSb3V0ZUFuZE91dGxldChlLHQpe2NvbnN0IHI9dC5nZXRDb250ZXh0KGUudmFsdWUub3V0bGV0KSxpPXImJmUudmFsdWUuY29tcG9uZW50P3IuY2hpbGRyZW46dCxvPVZFKGUpO2Zvcihjb25zdCBhIG9mIE9iamVj''@;'; put 'put ''dC52YWx1ZXMobykpdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihhLGkpO3ImJihyLm91dGxldCYmKHIub3V0bGV0LmRlYWN0aXZhdGUoKSxyLmNoaWxkcmVuLm9uT3V0bGV0RGVhY3RpdmF0ZWQoKSksci5hdHRhY2hSZWY9bnVsbCxyLnJvdXRlPW51bGwpfWFjdGl2YXRlQ2hp''@;'; put 'put ''bGRSb3V0ZXMoZSx0LHIpe2NvbnN0IGk9VkUodCk7ZS5jaGlsZHJlbi5mb3JFYWNoKG89Pnt0aGlzLmFjdGl2YXRlUm91dGVzKG8saVtvLnZhbHVlLm91dGxldF0sciksdGhpcy5mb3J3YXJkRXZlbnQobmV3IEF1dChvLnZhbHVlLnNuYXBzaG90KSl9KSxlLmNoaWxkcmVuLmxlbmd0aCYmdGhp''@;'; put 'put ''cy5mb3J3YXJkRXZlbnQobmV3IFR1dChlLnZhbHVlLnNuYXBzaG90KSl9YWN0aXZhdGVSb3V0ZXMoZSx0LHIpe2NvbnN0IGk9ZS52YWx1ZSxvPXQ/dC52YWx1ZTpudWxsO2lmKHRpZShpKSxpPT09bylpZihpLmNvbXBvbmVudCl7Y29uc3QgYT1yLmdldE9yQ3JlYXRlQ29udGV4dChpLm91dGxl''@;'; put 'put ''dCk7dGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGUsdCxhLmNoaWxkcmVuKX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhlLHQscik7ZWxzZSBpZihpLmNvbXBvbmVudCl7Y29uc3QgYT1yLmdldE9yQ3JlYXRlQ29udGV4dChpLm91dGxldCk7aWYodGhpcy5yb3V0ZVJldXNlU3RyYXRl''@;'; put 'put ''Z3kuc2hvdWxkQXR0YWNoKGkuc25hcHNob3QpKXtjb25zdCBsPXRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnJldHJpZXZlKGkuc25hcHNob3QpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKGkuc25hcHNob3QsbnVsbCksYS5jaGlsZHJlbi5vbk91dGxldFJlQXR0YWNoZWQobC5jb250''@;'; put 'put ''ZXh0cyksYS5hdHRhY2hSZWY9bC5jb21wb25lbnRSZWYsYS5yb3V0ZT1sLnJvdXRlLnZhbHVlLGEub3V0bGV0JiZhLm91dGxldC5hdHRhY2gobC5jb21wb25lbnRSZWYsbC5yb3V0ZS52YWx1ZSksdGllKGwucm91dGUudmFsdWUpLHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhlLG51bGwsYS5j''@;'; put 'put ''aGlsZHJlbil9ZWxzZSBhLmF0dGFjaFJlZj1udWxsLGEucm91dGU9aSxhLm91dGxldCYmYS5vdXRsZXQuYWN0aXZhdGVXaXRoKGksYS5pbmplY3RvciksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGUsbnVsbCxhLmNoaWxkcmVuKX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhlLG51''@;'; put 'put ''bGwscil9fWNsYXNzIEpiZXtwYXRoO3JvdXRlO2NvbnN0cnVjdG9yKGUpe3RoaXMucGF0aD1lLHRoaXMucm91dGU9dGhpcy5wYXRoW3RoaXMucGF0aC5sZW5ndGgtMV19fWNsYXNzIHFVe2NvbXBvbmVudDtyb3V0ZTtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuY29tcG9uZW50PWUsdGhpcy5yb3V0''@;'; put 'put ''ZT10fX1mdW5jdGlvbiBZdXQobixlLHQpe2NvbnN0IHI9bi5fcm9vdDtyZXR1cm4gVUkocixlP2UuX3Jvb3Q6bnVsbCx0LFtyLnZhbHVlXSl9ZnVuY3Rpb24gQkUobixlKXtjb25zdCB0PVN5bWJvbCgpLHI9ZS5nZXQobix0KTtyZXR1cm4gcj09PXQ/ImZ1bmN0aW9uIiE9dHlwZW9mIG58fGZ1''@;'; put 'put ''bmN0aW9uIFNsKG4pe3JldHVybiBudWxsIT09ZXUobil9KG4pP2UuZ2V0KG4pOm46cn1mdW5jdGlvbiBVSShuLGUsdCxyLGk9e2NhbkRlYWN0aXZhdGVDaGVja3M6W10sY2FuQWN0aXZhdGVDaGVja3M6W119KXtjb25zdCBvPVZFKGUpO3JldHVybiBuLmNoaWxkcmVuLmZvckVhY2goYT0+eyhm''@;'; put 'put ''dW5jdGlvbiBHdXQobixlLHQscixpPXtjYW5EZWFjdGl2YXRlQ2hlY2tzOltdLGNhbkFjdGl2YXRlQ2hlY2tzOltdfSl7Y29uc3Qgbz1uLnZhbHVlLGE9ZT9lLnZhbHVlOm51bGwsbD10P3QuZ2V0Q29udGV4dChuLnZhbHVlLm91dGxldCk6bnVsbDtpZihhJiZvLnJvdXRlQ29uZmlnPT09YS5y''@;'; put 'put ''b3V0ZUNvbmZpZyl7Y29uc3QgdT1mdW5jdGlvbiAkdXQobixlLHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiB0KG4sZSk7c3dpdGNoKHQpe2Nhc2UicGF0aFBhcmFtc0NoYW5nZSI6cmV0dXJuIXdiKG4udXJsLGUudXJsKTtjYXNlInBhdGhQYXJhbXNPclF1ZXJ5UGFyYW1zQ2hh''@;'; put 'put ''bmdlIjpyZXR1cm4hd2Iobi51cmwsZS51cmwpfHwhSDUobi5xdWVyeVBhcmFtcyxlLnF1ZXJ5UGFyYW1zKTtjYXNlImFsd2F5cyI6cmV0dXJuITA7Y2FzZSJwYXJhbXNPclF1ZXJ5UGFyYW1zQ2hhbmdlIjpyZXR1cm4hbmllKG4sZSl8fCFINShuLnF1ZXJ5UGFyYW1zLGUucXVlcnlQYXJhbXMp''@;'; put 'put ''O2RlZmF1bHQ6cmV0dXJuIW5pZShuLGUpfX0oYSxvLG8ucm91dGVDb25maWcucnVuR3VhcmRzQW5kUmVzb2x2ZXJzKTt1P2kuY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgSmJlKHIpKTooby5kYXRhPWEuZGF0YSxvLl9yZXNvbHZlZERhdGE9YS5fcmVzb2x2ZWREYXRhKSxVSShuLGUsby5j''@;'; put 'put ''b21wb25lbnQ/bD9sLmNoaWxkcmVuOm51bGw6dCxyLGkpLHUmJmwmJmwub3V0bGV0JiZsLm91dGxldC5pc0FjdGl2YXRlZCYmaS5jYW5EZWFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IHFVKGwub3V0bGV0LmNvbXBvbmVudCxhKSl9ZWxzZSBhJiZ6SShlLGwsaSksaS5jYW5BY3RpdmF0ZUNoZWNr''@;'; put 'put ''cy5wdXNoKG5ldyBKYmUocikpLFVJKG4sbnVsbCxvLmNvbXBvbmVudD9sP2wuY2hpbGRyZW46bnVsbDp0LHIsaSl9KShhLG9bYS52YWx1ZS5vdXRsZXRdLHQsci5jb25jYXQoW2EudmFsdWVdKSxpKSxkZWxldGUgb1thLnZhbHVlLm91dGxldF19KSxPYmplY3QuZW50cmllcyhvKS5mb3JFYWNo''@;'; put 'put ''KChbYSxsXSk9PnpJKGwsdC5nZXRDb250ZXh0KGEpLGkpKSxpfWZ1bmN0aW9uIHpJKG4sZSx0KXtjb25zdCByPVZFKG4pLGk9bi52YWx1ZTtPYmplY3QuZW50cmllcyhyKS5mb3JFYWNoKChbbyxhXSk9Pnt6SShhLGkuY29tcG9uZW50P2U/ZS5jaGlsZHJlbi5nZXRDb250ZXh0KG8pOm51bGw6''@;'; put 'put ''ZSx0KX0pLHQuY2FuRGVhY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBxVShpLmNvbXBvbmVudCYmZSYmZS5vdXRsZXQmJmUub3V0bGV0LmlzQWN0aXZhdGVkP2Uub3V0bGV0LmNvbXBvbmVudDpudWxsLGkpKX1mdW5jdGlvbiBXSShuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn1mdW5jdGlv''@;'; put 'put ''biBld2Uobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBMVXx8IkVtcHR5RXJyb3IiPT09bj8ubmFtZX1jb25zdCBLVT1TeW1ib2woIklOSVRJQUxfVkFMVUUiKTtmdW5jdGlvbiBqRSgpe3JldHVybiBtMChuPT5fYihuLm1hcChlPT5lLnBpcGUoTXAoMSkscWcoS1UpKSkpLnBpcGUoRXMoZT0+e2Zv''@;'; put 'put ''cihjb25zdCB0IG9mIGUpaWYoITAhPT10KXtpZih0PT09S1UpcmV0dXJuIEtVO2lmKCExPT09dHx8dGR0KHQpKXJldHVybiB0fXJldHVybiEwfSksc3UoZT0+ZSE9PUtVKSxNcCgxKSkpfWZ1bmN0aW9uIHRkdChuKXtyZXR1cm4gQ2Iobil8fG4gaW5zdGFuY2VvZiBpaWV9ZnVuY3Rpb24gdHdl''@;'; put 'put ''KG4pe3JldHVybiBmdW5jdGlvbiBjYSguLi5uKXtyZXR1cm4gQ2kobil9KGYxKGU9PntpZigiYm9vbGVhbiIhPXR5cGVvZiBlKXRocm93ICRVKDAsZSl9KSxFcyhlPT4hMD09PWUpKX1jbGFzcyBvaWV7c2VnbWVudEdyb3VwO2NvbnN0cnVjdG9yKGUpe3RoaXMuc2VnbWVudEdyb3VwPWV8fG51''@;'; put 'put ''bGx9fWNsYXNzIGFpZSBleHRlbmRzIEVycm9ye3VybFRyZWU7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnVybFRyZWU9ZX19ZnVuY3Rpb24gVUUobil7cmV0dXJuIGtJKG5ldyBvaWUobikpfWZ1bmN0aW9uIGhkdChuKXtyZXR1cm4ga0kobmV3IFduKDRlMywhMSkpfWNsYXNzIHBkdHt1''@;'; put 'put ''cmxTZXJpYWxpemVyO3VybFRyZWU7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnVybFNlcmlhbGl6ZXI9ZSx0aGlzLnVybFRyZWU9dH1saW5lcmFsaXplU2VnbWVudHMoZSx0KXtsZXQgcj1bXSxpPXQucm9vdDtmb3IoOzspe2lmKHI9ci5jb25jYXQoaS5zZWdtZW50cyksMD09PWkubnVtYmVyT2ZD''@;'; put 'put ''aGlsZHJlbilyZXR1cm4gUGEocik7aWYoaS5udW1iZXJPZkNoaWxkcmVuPjF8fCFpLmNoaWxkcmVuW1pzXSlyZXR1cm4gaGR0KCk7aT1pLmNoaWxkcmVuW1pzXX19YXBwbHlSZWRpcmVjdENvbW1hbmRzKGUsdCxyLGksbyl7cmV0dXJuIGZ1bmN0aW9uIGdkdChuLGUsdCl7aWYoInN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBuKXJldHVybiBQYShuKTtjb25zdCByPW4se3F1ZXJ5UGFyYW1zOmksZnJhZ21lbnQ6byxyb3V0ZUNvbmZpZzphLHVybDpsLG91dGxldDp1LHBhcmFtczpnLGRhdGE6RSx0aXRsZTpPfT1lO3JldHVybiBKOChMdSh0LCgpPT5yKHtwYXJhbXM6ZyxkYXRhOkUscXVlcnlQYXJhbXM6''@;'; put 'put ''aSxmcmFnbWVudDpvLHJvdXRlQ29uZmlnOmEsdXJsOmwsb3V0bGV0OnUsdGl0bGU6T30pKSl9KHQsaSxvKS5waXBlKEVzKGE9PntpZihhIGluc3RhbmNlb2YgYmIpdGhyb3cgbmV3IGFpZShhKTtjb25zdCBsPXRoaXMuYXBwbHlSZWRpcmVjdENyZWF0ZVVybFRyZWUoYSx0aGlzLnVybFNlcmlh''@;'; put 'put ''bGl6ZXIucGFyc2UoYSksZSxyKTtpZigiLyI9PT1hWzBdKXRocm93IG5ldyBhaWUobCk7cmV0dXJuIGx9KSl9YXBwbHlSZWRpcmVjdENyZWF0ZVVybFRyZWUoZSx0LHIsaSl7Y29uc3Qgbz10aGlzLmNyZWF0ZVNlZ21lbnRHcm91cChlLHQucm9vdCxyLGkpO3JldHVybiBuZXcgYmIobyx0aGlz''@;'; put 'put ''LmNyZWF0ZVF1ZXJ5UGFyYW1zKHQucXVlcnlQYXJhbXMsdGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zKSx0LmZyYWdtZW50KX1jcmVhdGVRdWVyeVBhcmFtcyhlLHQpe2NvbnN0IHI9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZvckVhY2goKFtpLG9dKT0+e2lmKCJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgbyYmIjoiPT09b1swXSl7Y29uc3QgbD1vLnN1YnN0cmluZygxKTtyW2ldPXRbbF19ZWxzZSByW2ldPW99KSxyfWNyZWF0ZVNlZ21lbnRHcm91cChlLHQscixpKXtjb25zdCBvPXRoaXMuY3JlYXRlU2VnbWVudHMoZSx0LnNlZ21lbnRzLHIsaSk7bGV0IGE9e307cmV0dXJuIE9iamVjdC5l''@;'; put 'put ''bnRyaWVzKHQuY2hpbGRyZW4pLmZvckVhY2goKFtsLHVdKT0+e2FbbF09dGhpcy5jcmVhdGVTZWdtZW50R3JvdXAoZSx1LHIsaSl9KSxuZXcgd3UobyxhKX1jcmVhdGVTZWdtZW50cyhlLHQscixpKXtyZXR1cm4gdC5tYXAobz0+IjoiPT09by5wYXRoWzBdP3RoaXMuZmluZFBvc1BhcmFtKGUs''@;'; put 'put ''byxpKTp0aGlzLmZpbmRPclJldHVybihvLHIpKX1maW5kUG9zUGFyYW0oZSx0LHIpe2NvbnN0IGk9clt0LnBhdGguc3Vic3RyaW5nKDEpXTtpZighaSl0aHJvdyBuZXcgV24oNDAwMSwhMSk7cmV0dXJuIGl9ZmluZE9yUmV0dXJuKGUsdCl7bGV0IHI9MDtmb3IoY29uc3QgaSBvZiB0KXtpZihp''@;'; put 'put ''LnBhdGg9PT1lLnBhdGgpcmV0dXJuIHQuc3BsaWNlKHIpLGk7cisrfXJldHVybiBlfX1jb25zdCBzaWU9e21hdGNoZWQ6ITEsY29uc3VtZWRTZWdtZW50czpbXSxyZW1haW5pbmdTZWdtZW50czpbXSxwYXJhbWV0ZXJzOnt9LHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fTtmdW5jdGlvbiBt''@;'; put 'put ''ZHQobixlLHQscixpKXtjb25zdCBvPW53ZShuLGUsdCk7cmV0dXJuIG8ubWF0Y2hlZD8ocj1mdW5jdGlvbiBSdXQobixlKXtyZXR1cm4gbi5wcm92aWRlcnMmJiFuLl9pbmplY3RvciYmKG4uX2luamVjdG9yPWhqKG4ucHJvdmlkZXJzLGUsYFJvdXRlOiAke24ucGF0aH1gKSksbi5faW5qZWN0''@;'; put 'put ''b3I/P2V9KGUsciksZnVuY3Rpb24gZGR0KG4sZSx0LHIpe2NvbnN0IGk9ZS5jYW5NYXRjaDtyZXR1cm4gaSYmMCE9PWkubGVuZ3RoP1BhKGkubWFwKGE9Pntjb25zdCBsPUJFKGEsbik7cmV0dXJuIEo4KGZ1bmN0aW9uIGVkdChuKXtyZXR1cm4gbiYmV0kobi5jYW5NYXRjaCl9KGwpP2wuY2Fu''@;'; put 'put ''TWF0Y2goZSx0KTpMdShuLCgpPT5sKGUsdCkpKX0pKS5waXBlKGpFKCksdHdlKCkpOlBhKCEwKX0ocixlLHQpLnBpcGUoRXMoYT0+ITA9PT1hP286ey4uLnNpZX0pKSk6UGEobyl9ZnVuY3Rpb24gbndlKG4sZSx0KXtpZigiKioiPT09ZS5wYXRoKXJldHVybiBmdW5jdGlvbiB2ZHQobil7cmV0''@;'; put 'put ''dXJue21hdGNoZWQ6ITAscGFyYW1ldGVyczpuLmxlbmd0aD4wP0NiZShuKS5wYXJhbWV0ZXJzOnt9LGNvbnN1bWVkU2VnbWVudHM6bixyZW1haW5pbmdTZWdtZW50czpbXSxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czp7fX19KHQpO2lmKCIiPT09ZS5wYXRoKXJldHVybiJmdWxsIj09PWUucGF0''@;'; put 'put ''aE1hdGNoJiYobi5oYXNDaGlsZHJlbigpfHx0Lmxlbmd0aD4wKT97Li4uc2llfTp7bWF0Y2hlZDohMCxjb25zdW1lZFNlZ21lbnRzOltdLHJlbWFpbmluZ1NlZ21lbnRzOnQscGFyYW1ldGVyczp7fSxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czp7fX07Y29uc3QgaT0oZS5tYXRjaGVyfHxaY3Qp''@;'; put 'put ''KHQsbixlKTtpZighaSlyZXR1cm57Li4uc2llfTtjb25zdCBvPXt9O09iamVjdC5lbnRyaWVzKGkucG9zUGFyYW1zPz97fSkuZm9yRWFjaCgoW2wsdV0pPT57b1tsXT11LnBhdGh9KTtjb25zdCBhPWkuY29uc3VtZWQubGVuZ3RoPjA/ey4uLm8sLi4uaS5jb25zdW1lZFtpLmNvbnN1bWVkLmxl''@;'; put 'put ''bmd0aC0xXS5wYXJhbWV0ZXJzfTpvO3JldHVybnttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6aS5jb25zdW1lZCxyZW1haW5pbmdTZWdtZW50czp0LnNsaWNlKGkuY29uc3VtZWQubGVuZ3RoKSxwYXJhbWV0ZXJzOmEscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6aS5wb3NQYXJhbXM/P3t9''@;'; put 'put ''fX1mdW5jdGlvbiByd2UobixlLHQscil7cmV0dXJuIHQubGVuZ3RoPjAmJmZ1bmN0aW9uIGJkdChuLGUsdCl7cmV0dXJuIHQuc29tZShyPT5YVShuLGUscikmJmw0KHIpIT09WnMpfShuLHQscik/e3NlZ21lbnRHcm91cDpuZXcgd3UoZSx5ZHQocixuZXcgd3UodCxuLmNoaWxkcmVuKSkpLHNs''@;'; put 'put ''aWNlZFNlZ21lbnRzOltdfTowPT09dC5sZW5ndGgmJmZ1bmN0aW9uIHdkdChuLGUsdCl7cmV0dXJuIHQuc29tZShyPT5YVShuLGUscikpfShuLHQscik/e3NlZ21lbnRHcm91cDpuZXcgd3Uobi5zZWdtZW50cyxfZHQobix0LHIsbi5jaGlsZHJlbikpLHNsaWNlZFNlZ21lbnRzOnR9OntzZWdt''@;'; put 'put ''ZW50R3JvdXA6bmV3IHd1KG4uc2VnbWVudHMsbi5jaGlsZHJlbiksc2xpY2VkU2VnbWVudHM6dH19ZnVuY3Rpb24gX2R0KG4sZSx0LHIpe2NvbnN0IGk9e307Zm9yKGNvbnN0IG8gb2YgdClpZihYVShuLGUsbykmJiFyW2w0KG8pXSl7Y29uc3QgYT1uZXcgd3UoW10se30pO2lbbDQobyldPWF9''@;'; put 'put ''cmV0dXJuey4uLnIsLi4uaX19ZnVuY3Rpb24geWR0KG4sZSl7Y29uc3QgdD17fTt0W1pzXT1lO2Zvcihjb25zdCByIG9mIG4paWYoIiI9PT1yLnBhdGgmJmw0KHIpIT09WnMpe2NvbnN0IGk9bmV3IHd1KFtdLHt9KTt0W2w0KHIpXT1pfXJldHVybiB0fWZ1bmN0aW9uIFhVKG4sZSx0KXtyZXR1''@;'; put 'put ''cm4oIShuLmhhc0NoaWxkcmVuKCl8fGUubGVuZ3RoPjApfHwiZnVsbCIhPT10LnBhdGhNYXRjaCkmJiIiPT09dC5wYXRofWNsYXNzIFNkdHt9Y2xhc3MgVGR0e2luamVjdG9yO2NvbmZpZ0xvYWRlcjtyb290Q29tcG9uZW50VHlwZTtjb25maWc7dXJsVHJlZTtwYXJhbXNJbmhlcml0YW5jZVN0''@;'; put 'put ''cmF0ZWd5O3VybFNlcmlhbGl6ZXI7YXBwbHlSZWRpcmVjdHM7YWJzb2x1dGVSZWRpcmVjdENvdW50PTA7YWxsb3dSZWRpcmVjdHM9ITA7Y29uc3RydWN0b3IoZSx0LHIsaSxvLGEsbCl7dGhpcy5pbmplY3Rvcj1lLHRoaXMuY29uZmlnTG9hZGVyPXQsdGhpcy5yb290Q29tcG9uZW50VHlwZT1y''@;'; put 'put ''LHRoaXMuY29uZmlnPWksdGhpcy51cmxUcmVlPW8sdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PWEsdGhpcy51cmxTZXJpYWxpemVyPWwsdGhpcy5hcHBseVJlZGlyZWN0cz1uZXcgcGR0KHRoaXMudXJsU2VyaWFsaXplcix0aGlzLnVybFRyZWUpfW5vTWF0Y2hFcnJvcihlKXtyZXR1''@;'; put 'put ''cm4gbmV3IFduKDQwMDIsYCcke2Uuc2VnbWVudEdyb3VwfSdgKX1yZWNvZ25pemUoKXtjb25zdCBlPXJ3ZSh0aGlzLnVybFRyZWUucm9vdCxbXSxbXSx0aGlzLmNvbmZpZykuc2VnbWVudEdyb3VwO3JldHVybiB0aGlzLm1hdGNoKGUpLnBpcGUoRXMoKHtjaGlsZHJlbjp0LHJvb3RTbmFwc2hv''@;'; put 'put ''dDpyfSk9Pntjb25zdCBpPW5ldyBjNChyLHQpLG89bmV3IFliZSgiIixpKSxhPWZ1bmN0aW9uIGh1dChuLGUsdD1udWxsLHI9bnVsbCl7cmV0dXJuIE9iZShMYmUobiksZSx0LHIpfShyLFtdLHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcyx0aGlzLnVybFRyZWUuZnJhZ21lbnQpO3JldHVybiBh''@;'; put 'put ''LnF1ZXJ5UGFyYW1zPXRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcyxvLnVybD10aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGEpLHtzdGF0ZTpvLHRyZWU6YX19KSl9bWF0Y2goZSl7Y29uc3QgdD1uZXcgWlUoW10sT2JqZWN0LmZyZWV6ZSh7fSksT2JqZWN0LmZyZWV6ZSh7Li4udGhpcy51''@;'; put 'put ''cmxUcmVlLnF1ZXJ5UGFyYW1zfSksdGhpcy51cmxUcmVlLmZyYWdtZW50LE9iamVjdC5mcmVlemUoe30pLFpzLHRoaXMucm9vdENvbXBvbmVudFR5cGUsbnVsbCx7fSk7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnRHcm91cCh0aGlzLmluamVjdG9yLHRoaXMuY29uZmlnLGUsWnMsdCkucGlw''@;'; put 'put ''ZShFcyhyPT4oe2NoaWxkcmVuOnIscm9vdFNuYXBzaG90OnR9KSkseWIocj0+e2lmKHIgaW5zdGFuY2VvZiBhaWUpcmV0dXJuIHRoaXMudXJsVHJlZT1yLnVybFRyZWUsdGhpcy5tYXRjaChyLnVybFRyZWUucm9vdCk7dGhyb3cgciBpbnN0YW5jZW9mIG9pZT90aGlzLm5vTWF0Y2hFcnJvcihy''@;'; put 'put ''KTpyfSkpfXByb2Nlc3NTZWdtZW50R3JvdXAoZSx0LHIsaSxvKXtyZXR1cm4gMD09PXIuc2VnbWVudHMubGVuZ3RoJiZyLmhhc0NoaWxkcmVuKCk/dGhpcy5wcm9jZXNzQ2hpbGRyZW4oZSx0LHIsbyk6dGhpcy5wcm9jZXNzU2VnbWVudChlLHQscixyLnNlZ21lbnRzLGksITAsbykucGlwZShF''@;'; put 'put ''cyhhPT5hIGluc3RhbmNlb2YgYzQ/W2FdOltdKSl9cHJvY2Vzc0NoaWxkcmVuKGUsdCxyLGkpe2NvbnN0IG89W107Zm9yKGNvbnN0IGEgb2YgT2JqZWN0LmtleXMoci5jaGlsZHJlbikpInByaW1hcnkiPT09YT9vLnVuc2hpZnQoYSk6by5wdXNoKGEpO3JldHVybiBaMShvKS5waXBlKE5FKGE9''@;'; put 'put ''Pntjb25zdCBsPXIuY2hpbGRyZW5bYV0sdT1mdW5jdGlvbiBPdXQobixlKXtjb25zdCB0PW4uZmlsdGVyKHI9Pmw0KHIpPT09ZSk7cmV0dXJuIHQucHVzaCguLi5uLmZpbHRlcihyPT5sNChyKSE9PWUpKSx0fSh0LGEpO3JldHVybiB0aGlzLnByb2Nlc3NTZWdtZW50R3JvdXAoZSx1LGwsYSxp''@;'; put 'put ''KX0pLGZ1bmN0aW9uIGtjdChuLGUpe3JldHVybiBhZChmdW5jdGlvbiBBY3QobixlLHQscixpKXtyZXR1cm4obyxhKT0+e2xldCBsPXQsdT1lLGc9MDtvLnN1YnNjcmliZSh2dShhLEU9Pntjb25zdCBPPWcrKzt1PWw/bih1LEUsTyk6KGw9ITAsRSksciYmYS5uZXh0KHUpfSxpJiYoKCk9Pnts''@;'; put 'put ''JiZhLm5leHQodSksYS5jb21wbGV0ZSgpfSkpKX19KG4sZSxhcmd1bWVudHMubGVuZ3RoPj0yLCEwKSl9KChhLGwpPT4oYS5wdXNoKC4uLmwpLGEpKSxPVShudWxsKSxmdW5jdGlvbiBSY3QobixlKXtjb25zdCB0PWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIHI9PnIucGlwZShuP3N1KChp''@;'; put 'put ''LG8pPT5uKGksbyxyKSk6cmEsV3JlKDEpLHQ/T1UoZSk6ZGJlKCgpPT5uZXcgTFUpKX0oKSxHMChhPT57aWYobnVsbD09PWEpcmV0dXJuIFVFKHIpO2NvbnN0IGw9aXdlKGEpO3JldHVybiBmdW5jdGlvbiB4ZHQobil7bi5zb3J0KChlLHQpPT5lLnZhbHVlLm91dGxldD09PVpzPy0xOnQudmFs''@;'; put 'put ''dWUub3V0bGV0PT09WnM/MTplLnZhbHVlLm91dGxldC5sb2NhbGVDb21wYXJlKHQudmFsdWUub3V0bGV0KSl9KGwpLFBhKGwpfSkpfXByb2Nlc3NTZWdtZW50KGUsdCxyLGksbyxhLGwpe3JldHVybiBaMSh0KS5waXBlKE5FKHU9PnRoaXMucHJvY2Vzc1NlZ21lbnRBZ2FpbnN0Um91dGUodS5f''@;'; put 'put ''aW5qZWN0b3I/P2UsdCx1LHIsaSxvLGEsbCkucGlwZSh5YihnPT57aWYoZyBpbnN0YW5jZW9mIG9pZSlyZXR1cm4gUGEobnVsbCk7dGhyb3cgZ30pKSksdXYodT0+ISF1KSx5Yih1PT57aWYoZXdlKHUpKXJldHVybiBmdW5jdGlvbiBDZHQobixlLHQpe3JldHVybiAwPT09ZS5sZW5ndGgmJiFu''@;'; put 'put ''LmNoaWxkcmVuW3RdfShyLGksbyk/UGEobmV3IFNkdCk6VUUocik7dGhyb3cgdX0pKX1wcm9jZXNzU2VnbWVudEFnYWluc3RSb3V0ZShlLHQscixpLG8sYSxsLHUpe3JldHVybiBsNChyKT09PWF8fGEhPT1acyYmWFUoaSxvLHIpP3ZvaWQgMD09PXIucmVkaXJlY3RUbz90aGlzLm1hdGNoU2Vn''@;'; put 'put ''bWVudEFnYWluc3RSb3V0ZShlLGkscixvLGEsdSk6dGhpcy5hbGxvd1JlZGlyZWN0cyYmbD90aGlzLmV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KGUsaSx0LHIsbyxhLHUpOlVFKGkpOlVFKGkpfWV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KGUs''@;'; put 'put ''dCxyLGksbyxhLGwpe2NvbnN0e21hdGNoZWQ6dSxwYXJhbWV0ZXJzOmcsY29uc3VtZWRTZWdtZW50czpFLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOk8scmVtYWluaW5nU2VnbWVudHM6Wn09bndlKHQsaSxvKTtpZighdSlyZXR1cm4gVUUodCk7InN0cmluZyI9PXR5cGVvZiBpLnJlZGlyZWN0''@;'; put 'put ''VG8mJiIvIj09PWkucmVkaXJlY3RUb1swXSYmKHRoaXMuYWJzb2x1dGVSZWRpcmVjdENvdW50KyssdGhpcy5hYnNvbHV0ZVJlZGlyZWN0Q291bnQ+MzEmJih0aGlzLmFsbG93UmVkaXJlY3RzPSExKSk7Y29uc3QgZWU9bmV3IFpVKG8sZyxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUu''@;'; put 'put ''cXVlcnlQYXJhbXN9KSx0aGlzLnVybFRyZWUuZnJhZ21lbnQsb3dlKGkpLGw0KGkpLGkuY29tcG9uZW50Pz9pLl9sb2FkZWRDb21wb25lbnQ/P251bGwsaSxhd2UoaSkpLHZlPVlVKGVlLGwsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KTtyZXR1cm4gZWUucGFyYW1zPU9iamVjdC5m''@;'; put 'put ''cmVlemUodmUucGFyYW1zKSxlZS5kYXRhPU9iamVjdC5mcmVlemUodmUuZGF0YSksdGhpcy5hcHBseVJlZGlyZWN0cy5hcHBseVJlZGlyZWN0Q29tbWFuZHMoRSxpLnJlZGlyZWN0VG8sTyxlZSxlKS5waXBlKG0wKEhlPT50aGlzLmFwcGx5UmVkaXJlY3RzLmxpbmVyYWxpemVTZWdtZW50cyhp''@;'; put 'put ''LEhlKSksRzAoSGU9PnRoaXMucHJvY2Vzc1NlZ21lbnQoZSxyLHQsSGUuY29uY2F0KFopLGEsITEsbCkpKX1tYXRjaFNlZ21lbnRBZ2FpbnN0Um91dGUoZSx0LHIsaSxvLGEpe2NvbnN0IGw9bWR0KHQscixpLGUpO3JldHVybiIqKiI9PT1yLnBhdGgmJih0LmNoaWxkcmVuPXt9KSxsLnBpcGUo''@;'; put 'put ''bTAodT0+dS5tYXRjaGVkP3RoaXMuZ2V0Q2hpbGRDb25maWcoZT1yLl9pbmplY3Rvcj8/ZSxyLGkpLnBpcGUobTAoKHtyb3V0ZXM6Z30pPT57Y29uc3QgRT1yLl9sb2FkZWRJbmplY3Rvcj8/ZSx7cGFyYW1ldGVyczpPLGNvbnN1bWVkU2VnbWVudHM6WixyZW1haW5pbmdTZWdtZW50czplZX09''@;'; put 'put ''dSx2ZT1uZXcgWlUoWixPLE9iamVjdC5mcmVlemUoey4uLnRoaXMudXJsVHJlZS5xdWVyeVBhcmFtc30pLHRoaXMudXJsVHJlZS5mcmFnbWVudCxvd2UociksbDQociksci5jb21wb25lbnQ/P3IuX2xvYWRlZENvbXBvbmVudD8/bnVsbCxyLGF3ZShyKSksTWU9WVUodmUsYSx0aGlzLnBhcmFt''@;'; put 'put ''c0luaGVyaXRhbmNlU3RyYXRlZ3kpO3ZlLnBhcmFtcz1PYmplY3QuZnJlZXplKE1lLnBhcmFtcyksdmUuZGF0YT1PYmplY3QuZnJlZXplKE1lLmRhdGEpO2NvbnN0e3NlZ21lbnRHcm91cDpIZSxzbGljZWRTZWdtZW50czpXZX09cndlKHQsWixlZSxnKTtpZigwPT09V2UubGVuZ3RoJiZIZS5o''@;'; put 'put ''YXNDaGlsZHJlbigpKXJldHVybiB0aGlzLnByb2Nlc3NDaGlsZHJlbihFLGcsSGUsdmUpLnBpcGUoRXMoQ3Q9Pm5ldyBjNCh2ZSxDdCkpKTtpZigwPT09Zy5sZW5ndGgmJjA9PT1XZS5sZW5ndGgpcmV0dXJuIFBhKG5ldyBjNCh2ZSxbXSkpO2NvbnN0IGF0PWw0KHIpPT09bztyZXR1cm4gdGhp''@;'; put 'put ''cy5wcm9jZXNzU2VnbWVudChFLGcsSGUsV2UsYXQ/WnM6bywhMCx2ZSkucGlwZShFcyhDdD0+bmV3IGM0KHZlLEN0IGluc3RhbmNlb2YgYzQ/W0N0XTpbXSkpKX0pKTpVRSh0KSkpfWdldENoaWxkQ29uZmlnKGUsdCxyKXtyZXR1cm4gdC5jaGlsZHJlbj9QYSh7cm91dGVzOnQuY2hpbGRyZW4s''@;'; put 'put ''aW5qZWN0b3I6ZX0pOnQubG9hZENoaWxkcmVuP3ZvaWQgMCE9PXQuX2xvYWRlZFJvdXRlcz9QYSh7cm91dGVzOnQuX2xvYWRlZFJvdXRlcyxpbmplY3Rvcjp0Ll9sb2FkZWRJbmplY3Rvcn0pOmZ1bmN0aW9uIHVkdChuLGUsdCxyKXtjb25zdCBpPWUuY2FuTG9hZDtyZXR1cm4gdm9pZCAwPT09''@;'; put 'put ''aXx8MD09PWkubGVuZ3RoP1BhKCEwKTpQYShpLm1hcChhPT57Y29uc3QgbD1CRShhLG4pO3JldHVybiBKOChmdW5jdGlvbiBLdXQobil7cmV0dXJuIG4mJldJKG4uY2FuTG9hZCl9KGwpP2wuY2FuTG9hZChlLHQpOkx1KG4sKCk9PmwoZSx0KSkpfSkpLnBpcGUoakUoKSx0d2UoKSl9KGUsdCxy''@;'; put 'put ''KS5waXBlKEcwKGk9Pmk/dGhpcy5jb25maWdMb2FkZXIubG9hZENoaWxkcmVuKGUsdCkucGlwZShmMShvPT57dC5fbG9hZGVkUm91dGVzPW8ucm91dGVzLHQuX2xvYWRlZEluamVjdG9yPW8uaW5qZWN0b3J9KSk6ZnVuY3Rpb24gZmR0KCl7cmV0dXJuIGtJKFhiZSghMSxUMy5HdWFyZFJlamVj''@;'; put 'put ''dGVkKSl9KCkpKTpQYSh7cm91dGVzOltdLGluamVjdG9yOmV9KX19ZnVuY3Rpb24gQWR0KG4pe2NvbnN0IGU9bi52YWx1ZS5yb3V0ZUNvbmZpZztyZXR1cm4gZSYmIiI9PT1lLnBhdGh9ZnVuY3Rpb24gaXdlKG4pe2NvbnN0IGU9W10sdD1uZXcgU2V0O2Zvcihjb25zdCByIG9mIG4pe2lmKCFB''@;'; put 'put ''ZHQocikpe2UucHVzaChyKTtjb250aW51ZX1jb25zdCBpPWUuZmluZChvPT5yLnZhbHVlLnJvdXRlQ29uZmlnPT09by52YWx1ZS5yb3V0ZUNvbmZpZyk7dm9pZCAwIT09aT8oaS5jaGlsZHJlbi5wdXNoKC4uLnIuY2hpbGRyZW4pLHQuYWRkKGkpKTplLnB1c2gocil9Zm9yKGNvbnN0IHIgb2Yg''@;'; put 'put ''dCl7Y29uc3QgaT1pd2Uoci5jaGlsZHJlbik7ZS5wdXNoKG5ldyBjNChyLnZhbHVlLGkpKX1yZXR1cm4gZS5maWx0ZXIocj0+IXQuaGFzKHIpKX1mdW5jdGlvbiBvd2Uobil7cmV0dXJuIG4uZGF0YXx8e319ZnVuY3Rpb24gYXdlKG4pe3JldHVybiBuLnJlc29sdmV8fHt9fWZ1bmN0aW9uIHN3''@;'; put 'put ''ZShuKXtjb25zdCBlPW4uY2hpbGRyZW4ubWFwKHQ9PnN3ZSh0KSkuZmxhdCgpO3JldHVybltuLC4uLmVdfWZ1bmN0aW9uIGxpZShuKXtyZXR1cm4gbTAoZT0+e2NvbnN0IHQ9bihlKTtyZXR1cm4gdD9aMSh0KS5waXBlKEVzKCgpPT5lKSk6UGEoZSl9KX1sZXQgbHdlPSgoKT0+e2NsYXNzIG57''@;'; put 'put ''YnVpbGRUaXRsZSh0KXtsZXQgcixpPXQucm9vdDtmb3IoO3ZvaWQgMCE9PWk7KXI9dGhpcy5nZXRSZXNvbHZlZFRpdGxlRm9yUm91dGUoaSk/P3IsaT1pLmNoaWxkcmVuLmZpbmQobz0+by5vdXRsZXQ9PT1acyk7cmV0dXJuIHJ9Z2V0UmVzb2x2ZWRUaXRsZUZvclJvdXRlKHQpe3JldHVybiB0''@;'; put 'put ''LmRhdGFbTEldfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTooKT0+c24oT2R0KSxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKSxPZHQ9KCgpPT57Y2xhc3MgbiBleHRlbmRz''@;'; put 'put ''IGx3ZXt0aXRsZTtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudGl0bGU9dH11cGRhdGVUaXRsZSh0KXtjb25zdCByPXRoaXMuYnVpbGRUaXRsZSh0KTt2b2lkIDAhPT1yJiZ0aGlzLnRpdGxlLnNldFRpdGxlKHIpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhy''@;'; put 'put ''fHxuKShvcihCY3QpKX07c3RhdGljIFx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKTtjb25zdCB6RT1uZXcgRXIoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pih7fSl9KSxRVT1uZXcgRXIo''@;'; put 'put ''IiIpO2xldCBjaWU9KCgpPT57Y2xhc3Mgbntjb21wb25lbnRMb2FkZXJzPW5ldyBXZWFrTWFwO2NoaWxkcmVuTG9hZGVycz1uZXcgV2Vha01hcDtvbkxvYWRTdGFydExpc3RlbmVyO29uTG9hZEVuZExpc3RlbmVyO2NvbXBpbGVyPXNuKEpldCk7bG9hZENvbXBvbmVudCh0LHIpe2lmKHRoaXMu''@;'; put 'put ''Y29tcG9uZW50TG9hZGVycy5nZXQocikpcmV0dXJuIHRoaXMuY29tcG9uZW50TG9hZGVycy5nZXQocik7aWYoci5fbG9hZGVkQ29tcG9uZW50KXJldHVybiBQYShyLl9sb2FkZWRDb21wb25lbnQpO3RoaXMub25Mb2FkU3RhcnRMaXN0ZW5lciYmdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyKHIp''@;'; put 'put ''O2NvbnN0IGk9SjgoTHUodCwoKT0+ci5sb2FkQ29tcG9uZW50KCkpKS5waXBlKEVzKGN3ZSksbTAodXdlKSxmMShhPT57dGhpcy5vbkxvYWRFbmRMaXN0ZW5lciYmdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcihyKSxyLl9sb2FkZWRDb21wb25lbnQ9YX0pLFJJKCgpPT57dGhpcy5jb21wb25lbnRM''@;'; put 'put ''b2FkZXJzLmRlbGV0ZShyKX0pKSxvPW5ldyB6cmUoaSwoKT0+bmV3IE1yKS5waXBlKFVyZSgpKTtyZXR1cm4gdGhpcy5jb21wb25lbnRMb2FkZXJzLnNldChyLG8pLG99bG9hZENoaWxkcmVuKHQscil7aWYodGhpcy5jaGlsZHJlbkxvYWRlcnMuZ2V0KHIpKXJldHVybiB0aGlzLmNoaWxkcmVu''@;'; put 'put ''TG9hZGVycy5nZXQocik7aWYoci5fbG9hZGVkUm91dGVzKXJldHVybiBQYSh7cm91dGVzOnIuX2xvYWRlZFJvdXRlcyxpbmplY3RvcjpyLl9sb2FkZWRJbmplY3Rvcn0pO3RoaXMub25Mb2FkU3RhcnRMaXN0ZW5lciYmdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyKHIpO2NvbnN0IG89ZnVuY3Rp''@;'; put 'put ''b24gTmR0KG4sZSx0LHIpe3JldHVybiBKOChMdSh0LCgpPT5uLmxvYWRDaGlsZHJlbigpKSkucGlwZShFcyhjd2UpLG0wKHV3ZSksRzAoaT0+aSBpbnN0YW5jZW9mIE02ZXx8QXJyYXkuaXNBcnJheShpKT9QYShpKTpaMShlLmNvbXBpbGVNb2R1bGVBc3luYyhpKSkpLEVzKGk9PntyJiZyKG4p''@;'; put 'put ''O2xldCBvLGEsbD0hMTtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT8oYT1pLCEwKToobz1pLmNyZWF0ZSh0KS5pbmplY3RvcixhPW8uZ2V0KFFVLFtdLHtvcHRpb25hbDohMCxzZWxmOiEwfSkuZmxhdCgpKSx7cm91dGVzOmEubWFwKHJpZSksaW5qZWN0b3I6b319KSl9KHIsdGhpcy5jb21waWxl''@;'; put 'put ''cix0LHRoaXMub25Mb2FkRW5kTGlzdGVuZXIpLnBpcGUoUkkoKCk9Pnt0aGlzLmNoaWxkcmVuTG9hZGVycy5kZWxldGUocil9KSksYT1uZXcgenJlKG8sKCk9Pm5ldyBNcikucGlwZShVcmUoKSk7cmV0dXJuIHRoaXMuY2hpbGRyZW5Mb2FkZXJzLnNldChyLGEpLGF9c3RhdGljIFx1MDI3NWZh''@;'; put 'put ''Yz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59KSgpO2Z1bmN0aW9uIGN3ZShuKXtyZXR1cm4gZnVuY3Rpb24gRmR0KG4pe3JldHVybiBuJiYi''@;'; put 'put ''b2JqZWN0Ij09dHlwZW9mIG4mJiJkZWZhdWx0ImluIG59KG4pP24uZGVmYXVsdDpufWZ1bmN0aW9uIHV3ZShuKXtyZXR1cm4gUGEobil9bGV0IHVpZT0oKCk9PntjbGFzcyBue3N0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9''@;'; put 'put ''Sm4oe3Rva2VuOm4sZmFjdG9yeTooKT0+c24oUGR0KSxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKSxQZHQ9KCgpPT57Y2xhc3MgbntzaG91bGRQcm9jZXNzVXJsKHQpe3JldHVybiEwfWV4dHJhY3QodCl7cmV0dXJuIHR9bWVyZ2UodCxyKXtyZXR1cm4gdH1zdGF0aWMgXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0pKCk7Y29uc3QgZHdlPW5ldyBFcigiIiksaHdlPW5ldyBFcigiIik7ZnVuY3Rpb24gSGR0''@;'; put 'put ''KG4sZSx0KXtjb25zdCByPW4uZ2V0KGh3ZSksaT1uLmdldChUbCk7aWYoIWkuc3RhcnRWaWV3VHJhbnNpdGlvbnx8ci5za2lwTmV4dFRyYW5zaXRpb24pcmV0dXJuIHIuc2tpcE5leHRUcmFuc2l0aW9uPSExLG5ldyBQcm9taXNlKGc9PnNldFRpbWVvdXQoZykpO2xldCBvO2NvbnN0IGE9bmV3''@;'; put 'put ''IFByb21pc2UoZz0+e289Z30pLGw9aS5zdGFydFZpZXdUcmFuc2l0aW9uKCgpPT4obygpLGZ1bmN0aW9uIFZkdChuKXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e0g4KHtyZWFkOigpPT5zZXRUaW1lb3V0KGUpfSx7aW5qZWN0b3I6bn0pfSl9KG4pKSk7bC5yZWFkeS5jYXRjaChnPT57fSk7Y29u''@;'; put 'put ''c3R7b25WaWV3VHJhbnNpdGlvbkNyZWF0ZWQ6dX09cjtyZXR1cm4gdSYmTHUobiwoKT0+dSh7dHJhbnNpdGlvbjpsLGZyb206ZSx0bzp0fSkpLGF9Y29uc3QgZndlPW5ldyBFcigiIik7bGV0IGRpZT0oKCk9PntjbGFzcyBue2N1cnJlbnROYXZpZ2F0aW9uPUIxKG51bGwse2VxdWFsOigpPT4h''@;'; put 'put ''MX0pO2N1cnJlbnRUcmFuc2l0aW9uPW51bGw7bGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9uPW51bGw7ZXZlbnRzPW5ldyBNcjt0cmFuc2l0aW9uQWJvcnRXaXRoRXJyb3JTdWJqZWN0PW5ldyBNcjtjb25maWdMb2FkZXI9c24oY2llKTtlbnZpcm9ubWVudEluamVjdG9yPXNuKG5sKTtkZXN0cm95''@;'; put 'put ''UmVmPXNuKE0yKTt1cmxTZXJpYWxpemVyPXNuKE5JKTtyb290Q29udGV4dHM9c24oQkkpO2xvY2F0aW9uPXNuKFYwKTtpbnB1dEJpbmRpbmdFbmFibGVkPW51bGwhPT1zbihHVSx7b3B0aW9uYWw6ITB9KTt0aXRsZVN0cmF0ZWd5PXNuKGx3ZSk7b3B0aW9ucz1zbih6RSx7b3B0aW9uYWw6ITB9''@;'; put 'put ''KXx8e307cGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT10aGlzLm9wdGlvbnMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneXx8ImVtcHR5T25seSI7dXJsSGFuZGxpbmdTdHJhdGVneT1zbih1aWUpO2NyZWF0ZVZpZXdUcmFuc2l0aW9uPXNuKGR3ZSx7b3B0aW9uYWw6ITB9KTtuYXZpZ2F0aW9u''@;'; put 'put ''RXJyb3JIYW5kbGVyPXNuKGZ3ZSx7b3B0aW9uYWw6ITB9KTtuYXZpZ2F0aW9uSWQ9MDtnZXQgaGFzUmVxdWVzdGVkTmF2aWdhdGlvbigpe3JldHVybiAwIT09dGhpcy5uYXZpZ2F0aW9uSWR9dHJhbnNpdGlvbnM7YWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT5QYSh2b2lkIDApO3Jvb3RDb21wb25l''@;'; put 'put ''bnRUeXBlPW51bGw7ZGVzdHJveWVkPSExO2NvbnN0cnVjdG9yKCl7dGhpcy5jb25maWdMb2FkZXIub25Mb2FkRW5kTGlzdGVuZXI9aT0+dGhpcy5ldmVudHMubmV4dChuZXcgRXV0KGkpKSx0aGlzLmNvbmZpZ0xvYWRlci5vbkxvYWRTdGFydExpc3RlbmVyPWk9PnRoaXMuZXZlbnRzLm5leHQo''@;'; put 'put ''bmV3IFN1dChpKSksdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKT0+e3RoaXMuZGVzdHJveWVkPSEwfSl9Y29tcGxldGUoKXt0aGlzLnRyYW5zaXRpb25zPy5jb21wbGV0ZSgpfWhhbmRsZU5hdmlnYXRpb25SZXF1ZXN0KHQpe2NvbnN0IHI9Kyt0aGlzLm5hdmlnYXRpb25JZDtOdSgoKT0+''@;'; put 'put ''e3RoaXMudHJhbnNpdGlvbnM/Lm5leHQoey4uLnQsZXh0cmFjdGVkVXJsOnRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KHQucmF3VXJsKSx0YXJnZXRTbmFwc2hvdDpudWxsLHRhcmdldFJvdXRlclN0YXRlOm51bGwsZ3VhcmRzOntjYW5BY3RpdmF0ZUNoZWNrczpbXSxjYW5EZWFj''@;'; put 'put ''dGl2YXRlQ2hlY2tzOltdfSxndWFyZHNSZXN1bHQ6bnVsbCxhYm9ydENvbnRyb2xsZXI6bmV3IEFib3J0Q29udHJvbGxlcixpZDpyfSl9KX1zZXR1cE5hdmlnYXRpb25zKHQpe3JldHVybiB0aGlzLnRyYW5zaXRpb25zPW5ldyAkaShudWxsKSx0aGlzLnRyYW5zaXRpb25zLnBpcGUoc3Uocj0+''@;'; put 'put ''bnVsbCE9PXIpLG0wKHI9PntsZXQgaT0hMTtyZXR1cm4gUGEocikucGlwZShtMChvPT57aWYodGhpcy5uYXZpZ2F0aW9uSWQ+ci5pZClyZXR1cm4gdGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihyLCIiLFQzLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pLEVwO3RoaXMuY3VycmVu''@;'; put 'put ''dFRyYW5zaXRpb249cix0aGlzLmN1cnJlbnROYXZpZ2F0aW9uLnNldCh7aWQ6by5pZCxpbml0aWFsVXJsOm8ucmF3VXJsLGV4dHJhY3RlZFVybDpvLmV4dHJhY3RlZFVybCx0YXJnZXRCcm93c2VyVXJsOiJzdHJpbmciPT10eXBlb2Ygby5leHRyYXMuYnJvd3NlclVybD90aGlzLnVybFNlcmlh''@;'; put 'put ''bGl6ZXIucGFyc2Uoby5leHRyYXMuYnJvd3NlclVybCk6by5leHRyYXMuYnJvd3NlclVybCx0cmlnZ2VyOm8uc291cmNlLGV4dHJhczpvLmV4dHJhcyxwcmV2aW91c05hdmlnYXRpb246dGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb24/ey4uLnRoaXMubGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0''@;'; put 'put ''aW9uLHByZXZpb3VzTmF2aWdhdGlvbjpudWxsfTpudWxsLGFib3J0OigpPT5vLmFib3J0Q29udHJvbGxlci5hYm9ydCgpfSk7Y29uc3QgYT0hdC5uYXZpZ2F0ZWR8fHRoaXMuaXNVcGRhdGluZ0ludGVybmFsU3RhdGUoKXx8dGhpcy5pc1VwZGF0ZWRCcm93c2VyVXJsKCk7aWYoIWEmJiJyZWxv''@;'; put 'put ''YWQiIT09KG8uZXh0cmFzLm9uU2FtZVVybE5hdmlnYXRpb24/P3Qub25TYW1lVXJsTmF2aWdhdGlvbikpcmV0dXJuIHRoaXMuZXZlbnRzLm5leHQobmV3IFBFKG8uaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShvLnJhd1VybCksIiIselUuSWdub3JlZFNhbWVVcmxOYXZpZ2F0aW9u''@;'; put 'put ''KSksby5yZXNvbHZlKCExKSxFcDtpZih0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuc2hvdWxkUHJvY2Vzc1VybChvLnJhd1VybCkpcmV0dXJuIFBhKG8pLnBpcGUobTAodT0+KHRoaXMuZXZlbnRzLm5leHQobmV3IFVVKHUuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh1LmV4dHJh''@;'; put 'put ''Y3RlZFVybCksdS5zb3VyY2UsdS5yZXN0b3JlZFN0YXRlKSksdS5pZCE9PXRoaXMubmF2aWdhdGlvbklkP0VwOlByb21pc2UucmVzb2x2ZSh1KSkpLGZ1bmN0aW9uIGtkdChuLGUsdCxyLGksbyl7cmV0dXJuIEcwKGE9PmZ1bmN0aW9uIEVkdChuLGUsdCxyLGksbyxhPSJlbXB0eU9ubHkiKXty''@;'; put 'put ''ZXR1cm4gbmV3IFRkdChuLGUsdCxyLGksYSxvKS5yZWNvZ25pemUoKX0obixlLHQscixhLmV4dHJhY3RlZFVybCxpLG8pLnBpcGUoRXMoKHtzdGF0ZTpsLHRyZWU6dX0pPT4oey4uLmEsdGFyZ2V0U25hcHNob3Q6bCx1cmxBZnRlclJlZGlyZWN0czp1fSkpKSl9KHRoaXMuZW52aXJvbm1lbnRJ''@;'; put 'put ''bmplY3Rvcix0aGlzLmNvbmZpZ0xvYWRlcix0aGlzLnJvb3RDb21wb25lbnRUeXBlLHQuY29uZmlnLHRoaXMudXJsU2VyaWFsaXplcix0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kpLGYxKHU9PntyLnRhcmdldFNuYXBzaG90PXUudGFyZ2V0U25hcHNob3Qsci51cmxBZnRlclJlZGly''@;'; put 'put ''ZWN0cz11LnVybEFmdGVyUmVkaXJlY3RzLHRoaXMuY3VycmVudE5hdmlnYXRpb24udXBkYXRlKEU9PihFLmZpbmFsVXJsPXUudXJsQWZ0ZXJSZWRpcmVjdHMsRSkpO2NvbnN0IGc9bmV3IEJiZSh1LmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodS5leHRyYWN0ZWRVcmwpLHRoaXMu''@;'; put 'put ''dXJsU2VyaWFsaXplci5zZXJpYWxpemUodS51cmxBZnRlclJlZGlyZWN0cyksdS50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dChnKX0pKTtpZihhJiZ0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuc2hvdWxkUHJvY2Vzc1VybChvLmN1cnJlbnRSYXdVcmwpKXtjb25zdHtpZDp1LGV4''@;'; put 'put ''dHJhY3RlZFVybDpnLHNvdXJjZTpFLHJlc3RvcmVkU3RhdGU6TyxleHRyYXM6Wn09byxlZT1uZXcgVVUodSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGcpLEUsTyk7dGhpcy5ldmVudHMubmV4dChlZSk7Y29uc3QgdmU9V2JlKHRoaXMucm9vdENvbXBvbmVudFR5cGUpLnNuYXBzaG90''@;'; put 'put ''O3JldHVybiB0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPXI9ey4uLm8sdGFyZ2V0U25hcHNob3Q6dmUsdXJsQWZ0ZXJSZWRpcmVjdHM6ZyxleHRyYXM6ey4uLlosc2tpcExvY2F0aW9uQ2hhbmdlOiExLHJlcGxhY2VVcmw6ITF9fSx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uLnVwZGF0ZShNZT0+KE1l''@;'; put 'put ''LmZpbmFsVXJsPWcsTWUpKSxQYShyKX1yZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgUEUoby5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKG8uZXh0cmFjdGVkVXJsKSwiIix6VS5JZ25vcmVkQnlVcmxIYW5kbGluZ1N0cmF0ZWd5KSksby5yZXNvbHZlKCExKSxFcH0pLGYxKG89''@;'; put 'put ''Pntjb25zdCBhPW5ldyB5dXQoby5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKG8uZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKG8udXJsQWZ0ZXJSZWRpcmVjdHMpLG8udGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQoYSl9KSxFcyhvPT4o''@;'; put 'put ''dGhpcy5jdXJyZW50VHJhbnNpdGlvbj1yPXsuLi5vLGd1YXJkczpZdXQoby50YXJnZXRTbmFwc2hvdCxvLmN1cnJlbnRTbmFwc2hvdCx0aGlzLnJvb3RDb250ZXh0cyl9LHIpKSxmdW5jdGlvbiBuZHQobixlKXtyZXR1cm4gRzAodD0+e2NvbnN0e3RhcmdldFNuYXBzaG90OnIsY3VycmVudFNu''@;'; put 'put ''YXBzaG90OmksZ3VhcmRzOntjYW5BY3RpdmF0ZUNoZWNrczpvLGNhbkRlYWN0aXZhdGVDaGVja3M6YX19PXQ7cmV0dXJuIDA9PT1hLmxlbmd0aCYmMD09PW8ubGVuZ3RoP1BhKHsuLi50LGd1YXJkc1Jlc3VsdDohMH0pOmZ1bmN0aW9uIHJkdChuLGUsdCxyKXtyZXR1cm4gWjEobikucGlwZShH''@;'; put 'put ''MChpPT5mdW5jdGlvbiBjZHQobixlLHQscixpKXtjb25zdCBvPWUmJmUucm91dGVDb25maWc/ZS5yb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlOm51bGw7cmV0dXJuIG8mJjAhPT1vLmxlbmd0aD9QYShvLm1hcChsPT57Y29uc3QgdT1IRShlKT8/aSxnPUJFKGwsdSk7cmV0dXJuIEo4KGZ1bmN0''@;'; put 'put ''aW9uIEp1dChuKXtyZXR1cm4gbiYmV0kobi5jYW5EZWFjdGl2YXRlKX0oZyk/Zy5jYW5EZWFjdGl2YXRlKG4sZSx0LHIpOkx1KHUsKCk9PmcobixlLHQscikpKS5waXBlKHV2KCkpfSkpLnBpcGUoakUoKSk6UGEoITApfShpLmNvbXBvbmVudCxpLnJvdXRlLHQsZSxyKSksdXYoaT0+ITAhPT1p''@;'; put 'put ''LCEwKSl9KGEscixpLG4pLnBpcGUoRzAobD0+bCYmZnVuY3Rpb24gcXV0KG4pe3JldHVybiJib29sZWFuIj09dHlwZW9mIG59KGwpP2Z1bmN0aW9uIGlkdChuLGUsdCxyKXtyZXR1cm4gWjEoZSkucGlwZShORShpPT5CcmUoZnVuY3Rpb24gYWR0KG4sZSl7cmV0dXJuIG51bGwhPT1uJiZlJiZl''@;'; put 'put ''KG5ldyBNdXQobikpLFBhKCEwKX0oaS5yb3V0ZS5wYXJlbnQsciksZnVuY3Rpb24gb2R0KG4sZSl7cmV0dXJuIG51bGwhPT1uJiZlJiZlKG5ldyB4dXQobikpLFBhKCEwKX0oaS5yb3V0ZSxyKSxmdW5jdGlvbiBsZHQobixlLHQpe2NvbnN0IHI9ZVtlLmxlbmd0aC0xXSxvPWUuc2xpY2UoMCxl''@;'; put 'put ''Lmxlbmd0aC0xKS5yZXZlcnNlKCkubWFwKGE9PmZ1bmN0aW9uIFp1dChuKXtjb25zdCBlPW4ucm91dGVDb25maWc/bi5yb3V0ZUNvbmZpZy5jYW5BY3RpdmF0ZUNoaWxkOm51bGw7cmV0dXJuIGUmJjAhPT1lLmxlbmd0aD97bm9kZTpuLGd1YXJkczplfTpudWxsfShhKSkuZmlsdGVyKGE9Pm51''@;'; put 'put ''bGwhPT1hKS5tYXAoYT0+anJlKCgpPT5QYShhLmd1YXJkcy5tYXAodT0+e2NvbnN0IGc9SEUoYS5ub2RlKT8/dCxFPUJFKHUsZyk7cmV0dXJuIEo4KGZ1bmN0aW9uIFF1dChuKXtyZXR1cm4gbiYmV0kobi5jYW5BY3RpdmF0ZUNoaWxkKX0oRSk/RS5jYW5BY3RpdmF0ZUNoaWxkKHIsbik6THUo''@;'; put 'put ''ZywoKT0+RShyLG4pKSkucGlwZSh1digpKX0pKS5waXBlKGpFKCkpKSk7cmV0dXJuIFBhKG8pLnBpcGUoakUoKSl9KG4saS5wYXRoLHQpLGZ1bmN0aW9uIHNkdChuLGUsdCl7Y29uc3Qgcj1lLnJvdXRlQ29uZmlnP2Uucm91dGVDb25maWcuY2FuQWN0aXZhdGU6bnVsbDtpZighcnx8MD09PXIu''@;'; put 'put ''bGVuZ3RoKXJldHVybiBQYSghMCk7Y29uc3QgaT1yLm1hcChvPT5qcmUoKCk9Pntjb25zdCBhPUhFKGUpPz90LGw9QkUobyxhKTtyZXR1cm4gSjgoZnVuY3Rpb24gWHV0KG4pe3JldHVybiBuJiZXSShuLmNhbkFjdGl2YXRlKX0obCk/bC5jYW5BY3RpdmF0ZShlLG4pOkx1KGEsKCk9PmwoZSxu''@;'; put 'put ''KSkpLnBpcGUodXYoKSl9KSk7cmV0dXJuIFBhKGkpLnBpcGUoakUoKSl9KG4saS5yb3V0ZSx0KSkpLHV2KGk9PiEwIT09aSwhMCkpfShyLG8sbixlKTpQYShsKSksRXMobD0+KHsuLi50LGd1YXJkc1Jlc3VsdDpsfSkpKX0pfSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3Isbz0+dGhpcy5ldmVu''@;'; put 'put ''dHMubmV4dChvKSksZjEobz0+e2lmKHIuZ3VhcmRzUmVzdWx0PW8uZ3VhcmRzUmVzdWx0LG8uZ3VhcmRzUmVzdWx0JiYiYm9vbGVhbiIhPXR5cGVvZiBvLmd1YXJkc1Jlc3VsdCl0aHJvdyAkVSgwLG8uZ3VhcmRzUmVzdWx0KTtjb25zdCBhPW5ldyBidXQoby5pZCx0aGlzLnVybFNlcmlhbGl6''@;'; put 'put ''ZXIuc2VyaWFsaXplKG8uZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKG8udXJsQWZ0ZXJSZWRpcmVjdHMpLG8udGFyZ2V0U25hcHNob3QsISFvLmd1YXJkc1Jlc3VsdCk7dGhpcy5ldmVudHMubmV4dChhKX0pLHN1KG89PiEhby5ndWFyZHNSZXN1bHR8fCh0aGlz''@;'; put 'put ''LmNhbmNlbE5hdmlnYXRpb25UcmFuc2l0aW9uKG8sIiIsVDMuR3VhcmRSZWplY3RlZCksITEpKSxsaWUobz0+e2lmKDAhPT1vLmd1YXJkcy5jYW5BY3RpdmF0ZUNoZWNrcy5sZW5ndGgpcmV0dXJuIFBhKG8pLnBpcGUoZjEoYT0+e2NvbnN0IGw9bmV3IHd1dChhLmlkLHRoaXMudXJsU2VyaWFs''@;'; put 'put ''aXplci5zZXJpYWxpemUoYS5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYS51cmxBZnRlclJlZGlyZWN0cyksYS50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dChsKX0pLG0wKGE9PntsZXQgbD0hMTtyZXR1cm4gUGEoYSkucGlwZShmdW5jdGlvbiBS''@;'; put 'put ''ZHQobixlKXtyZXR1cm4gRzAodD0+e2NvbnN0e3RhcmdldFNuYXBzaG90OnIsZ3VhcmRzOntjYW5BY3RpdmF0ZUNoZWNrczppfX09dDtpZighaS5sZW5ndGgpcmV0dXJuIFBhKHQpO2NvbnN0IG89bmV3IFNldChpLm1hcCh1PT51LnJvdXRlKSksYT1uZXcgU2V0O2Zvcihjb25zdCB1IG9mIG8p''@;'; put 'put ''aWYoIWEuaGFzKHUpKWZvcihjb25zdCBnIG9mIHN3ZSh1KSlhLmFkZChnKTtsZXQgbD0wO3JldHVybiBaMShhKS5waXBlKE5FKHU9Pm8uaGFzKHUpP2Z1bmN0aW9uIElkdChuLGUsdCxyKXtjb25zdCBpPW4ucm91dGVDb25maWcsbz1uLl9yZXNvbHZlO3JldHVybiB2b2lkIDAhPT1pPy50aXRs''@;'; put 'put ''ZSYmIUdiZShpKSYmKG9bTEldPWkudGl0bGUpLGpyZSgoKT0+KG4uZGF0YT1ZVShuLG4ucGFyZW50LHQpLnJlc29sdmUsZnVuY3Rpb24gRGR0KG4sZSx0LHIpe2NvbnN0IGk9WXJlKG4pO2lmKDA9PT1pLmxlbmd0aClyZXR1cm4gUGEoe30pO2NvbnN0IG89e307cmV0dXJuIFoxKGkpLnBpcGUo''@;'; put 'put ''RzAoYT0+ZnVuY3Rpb24gTGR0KG4sZSx0LHIpe2NvbnN0IGk9SEUoZSk/P3Isbz1CRShuLGkpO3JldHVybiBKOChvLnJlc29sdmU/by5yZXNvbHZlKGUsdCk6THUoaSwoKT0+byhlLHQpKSl9KG5bYV0sZSx0LHIpLnBpcGUodXYoKSxmMShsPT57aWYobCBpbnN0YW5jZW9mIGlpZSl0aHJvdyAk''@;'; put 'put ''VShuZXcgRlUsbCk7b1thXT1sfSkpKSxXcmUoMSksRXMoKCk9Pm8pLHliKGE9PmV3ZShhKT9FcDprSShhKSkpfShvLG4sZSxyKS5waXBlKEVzKGE9PihuLl9yZXNvbHZlZERhdGE9YSxuLmRhdGE9ey4uLm4uZGF0YSwuLi5hfSxudWxsKSkpKSl9KHUscixuLGUpOih1LmRhdGE9WVUodSx1LnBh''@;'; put 'put ''cmVudCxuKS5yZXNvbHZlLFBhKHZvaWQgMCkpKSxmMSgoKT0+bCsrKSxXcmUoMSksRzAodT0+bD09PWEuc2l6ZT9QYSh0KTpFcCkpfSl9KHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSx0aGlzLmVudmlyb25tZW50SW5qZWN0b3IpLGYxKHtuZXh0OigpPT5sPSEwLGNvbXBsZXRlOigp''@;'; put 'put ''PT57bHx8dGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihhLCIiLFQzLk5vRGF0YUZyb21SZXNvbHZlcil9fSkpfSksZjEoYT0+e2NvbnN0IGw9bmV3IEN1dChhLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYS5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5z''@;'; put 'put ''ZXJpYWxpemUoYS51cmxBZnRlclJlZGlyZWN0cyksYS50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dChsKX0pKX0pLGxpZShvPT57Y29uc3QgYT1sPT57Y29uc3QgdT1bXTtpZihsLnJvdXRlQ29uZmlnPy5sb2FkQ29tcG9uZW50KXtjb25zdCBnPUhFKGwpPz90aGlzLmVudmlyb25t''@;'; put 'put ''ZW50SW5qZWN0b3I7dS5wdXNoKHRoaXMuY29uZmlnTG9hZGVyLmxvYWRDb21wb25lbnQoZyxsLnJvdXRlQ29uZmlnKS5waXBlKGYxKEU9PntsLmNvbXBvbmVudD1FfSksRXMoKCk9Pnt9KSkpfWZvcihjb25zdCBnIG9mIGwuY2hpbGRyZW4pdS5wdXNoKC4uLmEoZykpO3JldHVybiB1fTtyZXR1''@;'; put 'put ''cm4gX2IoYShvLnRhcmdldFNuYXBzaG90LnJvb3QpKS5waXBlKE9VKG51bGwpLE1wKDEpKX0pLGxpZSgoKT0+dGhpcy5hZnRlclByZWFjdGl2YXRpb24oKSksbTAoKCk9Pntjb25zdHtjdXJyZW50U25hcHNob3Q6byx0YXJnZXRTbmFwc2hvdDphfT1yLGw9dGhpcy5jcmVhdGVWaWV3VHJhbnNp''@;'; put 'put ''dGlvbj8uKHRoaXMuZW52aXJvbm1lbnRJbmplY3RvcixvLnJvb3QsYS5yb290KTtyZXR1cm4gbD9aMShsKS5waXBlKEVzKCgpPT5yKSk6UGEocil9KSxFcyhvPT57Y29uc3QgYT1mdW5jdGlvbiBWdXQobixlLHQpe2NvbnN0IHI9akkobixlLl9yb290LHQ/dC5fcm9vdDp2b2lkIDApO3JldHVy''@;'; put 'put ''biBuZXcgemJlKHIsZSl9KHQucm91dGVSZXVzZVN0cmF0ZWd5LG8udGFyZ2V0U25hcHNob3Qsby5jdXJyZW50Um91dGVyU3RhdGUpO3JldHVybiB0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPXI9ey4uLm8sdGFyZ2V0Um91dGVyU3RhdGU6YX0sdGhpcy5jdXJyZW50TmF2aWdhdGlvbi51cGRhdGUo''@;'; put 'put ''bD0+KGwudGFyZ2V0Um91dGVyU3RhdGU9YSxsKSkscn0pLGYxKCgpPT57dGhpcy5ldmVudHMubmV4dChuZXcgWHJlKX0pLCgobixlLHQscik9PkVzKGk9PihuZXcgV3V0KGUsaS50YXJnZXRSb3V0ZXJTdGF0ZSxpLmN1cnJlbnRSb3V0ZXJTdGF0ZSx0LHIpLmFjdGl2YXRlKG4pLGkpKSkodGhp''@;'; put 'put ''cy5yb290Q29udGV4dHMsdC5yb3V0ZVJldXNlU3RyYXRlZ3ksbz0+dGhpcy5ldmVudHMubmV4dChvKSx0aGlzLmlucHV0QmluZGluZ0VuYWJsZWQpLE1wKDEpLHYwKG5ldyBobyhvPT57Y29uc3QgYT1yLmFib3J0Q29udHJvbGxlci5zaWduYWwsbD0oKT0+by5uZXh0KCk7cmV0dXJuIGEuYWRk''@;'; put 'put ''RXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpLCgpPT5hLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixsKX0pLnBpcGUoc3UoKCk9PiFpJiYhci50YXJnZXRSb3V0ZXJTdGF0ZSksZjEoKCk9Pnt0aGlzLmNhbmNlbE5hdmlnYXRpb25UcmFuc2l0aW9uKHIsci5hYm9ydENvbnRyb2xsZXIuc2ln''@;'; put 'put ''bmFsLnJlYXNvbisiIixUMy5BYm9ydGVkKX0pKSksZjEoe25leHQ6bz0+e2k9ITAsdGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb249TnUodGhpcy5jdXJyZW50TmF2aWdhdGlvbiksdGhpcy5ldmVudHMubmV4dChuZXcgQjUoby5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKG8u''@;'; put 'put ''ZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKG8udXJsQWZ0ZXJSZWRpcmVjdHMpKSksdGhpcy50aXRsZVN0cmF0ZWd5Py51cGRhdGVUaXRsZShvLnRhcmdldFJvdXRlclN0YXRlLnNuYXBzaG90KSxvLnJlc29sdmUoITApfSxjb21wbGV0ZTooKT0+e2k9ITB9fSks''@;'; put 'put ''djAodGhpcy50cmFuc2l0aW9uQWJvcnRXaXRoRXJyb3JTdWJqZWN0LnBpcGUoZjEobz0+e3Rocm93IG99KSkpLFJJKCgpPT57aXx8dGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihyLCIiLFQzLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pLHRoaXMuY3VycmVudFRyYW5zaXRpb24/''@;'; put 'put ''LmlkPT09ci5pZCYmKHRoaXMuY3VycmVudE5hdmlnYXRpb24uc2V0KG51bGwpLHRoaXMuY3VycmVudFRyYW5zaXRpb249bnVsbCl9KSx5YihvPT57aWYodGhpcy5kZXN0cm95ZWQpcmV0dXJuIHIucmVzb2x2ZSghMSksRXA7aWYoaT0hMCxRYmUobykpdGhpcy5ldmVudHMubmV4dChuZXcgU2Io''@;'; put 'put ''ci5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHIuZXh0cmFjdGVkVXJsKSxvLm1lc3NhZ2Usby5jYW5jZWxsYXRpb25Db2RlKSksZnVuY3Rpb24gVXV0KG4pe3JldHVybiBRYmUobikmJkNiKG4udXJsKX0obyk/dGhpcy5ldmVudHMubmV4dChuZXcgV1Uoby51cmwsby5uYXZpZ2F0''@;'; put 'put ''aW9uQmVoYXZpb3JPcHRpb25zKSk6ci5yZXNvbHZlKCExKTtlbHNle2NvbnN0IGE9bmV3IEtyZShyLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoci5leHRyYWN0ZWRVcmwpLG8sci50YXJnZXRTbmFwc2hvdD8/dm9pZCAwKTt0cnl7Y29uc3QgbD1MdSh0aGlzLmVudmlyb25tZW50''@;'; put 'put ''SW5qZWN0b3IsKCk9PnRoaXMubmF2aWdhdGlvbkVycm9ySGFuZGxlcj8uKGEpKTtpZighKGwgaW5zdGFuY2VvZiBpaWUpKXRocm93IHRoaXMuZXZlbnRzLm5leHQoYSksbzt7Y29uc3R7bWVzc2FnZTp1LGNhbmNlbGxhdGlvbkNvZGU6Z309JFUoMCxsKTt0aGlzLmV2ZW50cy5uZXh0KG5ldyBT''@;'; put 'put ''YihyLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoci5leHRyYWN0ZWRVcmwpLHUsZykpLHRoaXMuZXZlbnRzLm5leHQobmV3IFdVKGwucmVkaXJlY3RUbyxsLm5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnMpKX19Y2F0Y2gobCl7dGhpcy5vcHRpb25zLnJlc29sdmVOYXZpZ2F0aW9u''@;'; put 'put ''UHJvbWlzZU9uRXJyb3I/ci5yZXNvbHZlKCExKTpyLnJlamVjdChsKX19cmV0dXJuIEVwfSkpfSkpfWNhbmNlbE5hdmlnYXRpb25UcmFuc2l0aW9uKHQscixpKXtjb25zdCBvPW5ldyBTYih0LmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodC5leHRyYWN0ZWRVcmwpLHIsaSk7dGhp''@;'; put 'put ''cy5ldmVudHMubmV4dChvKSx0LnJlc29sdmUoITEpfWlzVXBkYXRpbmdJbnRlcm5hbFN0YXRlKCl7cmV0dXJuIHRoaXMuY3VycmVudFRyYW5zaXRpb24/LmV4dHJhY3RlZFVybC50b1N0cmluZygpIT09dGhpcy5jdXJyZW50VHJhbnNpdGlvbj8uY3VycmVudFVybFRyZWUudG9TdHJpbmcoKX1p''@;'; put 'put ''c1VwZGF0ZWRCcm93c2VyVXJsKCl7Y29uc3QgdD10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdCh0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UodGhpcy5sb2NhdGlvbi5wYXRoKCEwKSkpLHI9TnUodGhpcy5jdXJyZW50TmF2aWdhdGlvbiksaT1yPy50YXJnZXRCcm93c2VyVXJsPz9y''@;'; put 'put ''Py5leHRyYWN0ZWRVcmw7cmV0dXJuIHQudG9TdHJpbmcoKSE9PWk/LnRvU3RyaW5nKCkmJiFyPy5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9y''@;'; put 'put ''eTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKTtmdW5jdGlvbiBCZHQobil7cmV0dXJuIG4hPT1WSX1sZXQgamR0PSgoKT0+e2NsYXNzIG57c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1cHJvdj1K''@;'; put 'put ''bih7dG9rZW46bixmYWN0b3J5OigpPT5zbih6ZHQpLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59KSgpO2NsYXNzIFVkdHtzaG91bGREZXRhY2goZSl7cmV0dXJuITF9c3RvcmUoZSx0KXt9c2hvdWxkQXR0YWNoKGUpe3JldHVybiExfXJldHJpZXZlKGUpe3JldHVybiBudWxsfXNob3Vs''@;'; put 'put ''ZFJldXNlUm91dGUoZSx0KXtyZXR1cm4gZS5yb3V0ZUNvbmZpZz09PXQucm91dGVDb25maWd9fWxldCB6ZHQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFVkdHtzdGF0aWMgXHUwMjc1ZmFjPSgoKT0+e2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9d2EobikpKShpfHxuKX19''@;'; put 'put ''KSgpO3N0YXRpYyBcdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0pKCkscHdlPSgoKT0+e2NsYXNzIG57dXJsU2VyaWFsaXplcj1zbihOSSk7b3B0aW9ucz1zbih6RSx7b3B0aW9uYWw6ITB9KXx8e307Y2FuY2Vs''@;'; put 'put ''ZWROYXZpZ2F0aW9uUmVzb2x1dGlvbj10aGlzLm9wdGlvbnMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbnx8InJlcGxhY2UiO2xvY2F0aW9uPXNuKFYwKTt1cmxIYW5kbGluZ1N0cmF0ZWd5PXNuKHVpZSk7dXJsVXBkYXRlU3RyYXRlZ3k9dGhpcy5vcHRpb25zLnVybFVwZGF0ZVN0cmF0''@;'; put 'put ''ZWd5fHwiZGVmZXJyZWQiO2N1cnJlbnRVcmxUcmVlPW5ldyBiYjtnZXRDdXJyZW50VXJsVHJlZSgpe3JldHVybiB0aGlzLmN1cnJlbnRVcmxUcmVlfXJhd1VybFRyZWU9dGhpcy5jdXJyZW50VXJsVHJlZTtnZXRSYXdVcmxUcmVlKCl7cmV0dXJuIHRoaXMucmF3VXJsVHJlZX1jcmVhdGVCcm93''@;'; put 'put ''c2VyUGF0aCh7ZmluYWxVcmw6dCxpbml0aWFsVXJsOnIsdGFyZ2V0QnJvd3NlclVybDppfSl7Y29uc3Qgbz12b2lkIDAhPT10P3RoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZSh0LHIpOnIsYT1pPz9vO3JldHVybiBhIGluc3RhbmNlb2YgYmI/dGhpcy51cmxTZXJpYWxpemVyLnNlcmlh''@;'; put 'put ''bGl6ZShhKTphfWNvbW1pdFRyYW5zaXRpb24oe3RhcmdldFJvdXRlclN0YXRlOnQsZmluYWxVcmw6cixpbml0aWFsVXJsOml9KXtyJiZ0Pyh0aGlzLmN1cnJlbnRVcmxUcmVlPXIsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShyLGkpLHRoaXMucm91dGVy''@;'; put 'put ''U3RhdGU9dCk6dGhpcy5yYXdVcmxUcmVlPWl9cm91dGVyU3RhdGU9V2JlKG51bGwpO2dldFJvdXRlclN0YXRlKCl7cmV0dXJuIHRoaXMucm91dGVyU3RhdGV9c3RhdGVNZW1lbnRvPXRoaXMuY3JlYXRlU3RhdGVNZW1lbnRvKCk7dXBkYXRlU3RhdGVNZW1lbnRvKCl7dGhpcy5zdGF0ZU1lbWVu''@;'; put 'put ''dG89dGhpcy5jcmVhdGVTdGF0ZU1lbWVudG8oKX1jcmVhdGVTdGF0ZU1lbWVudG8oKXtyZXR1cm57cmF3VXJsVHJlZTp0aGlzLnJhd1VybFRyZWUsY3VycmVudFVybFRyZWU6dGhpcy5jdXJyZW50VXJsVHJlZSxyb3V0ZXJTdGF0ZTp0aGlzLnJvdXRlclN0YXRlfX1yZXNldEludGVybmFsU3Rh''@;'; put 'put ''dGUoe2ZpbmFsVXJsOnR9KXt0aGlzLnJvdXRlclN0YXRlPXRoaXMuc3RhdGVNZW1lbnRvLnJvdXRlclN0YXRlLHRoaXMuY3VycmVudFVybFRyZWU9dGhpcy5zdGF0ZU1lbWVudG8uY3VycmVudFVybFRyZWUsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZSh0''@;'; put 'put ''aGlzLmN1cnJlbnRVcmxUcmVlLHQ/P3RoaXMucmF3VXJsVHJlZSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5OigpPT5zbihXZHQpLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59''@;'; put 'put ''KSgpLFdkdD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcHdle2N1cnJlbnRQYWdlSWQ9MDtsYXN0U3VjY2Vzc2Z1bElkPS0xO3Jlc3RvcmVkU3RhdGUoKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5nZXRTdGF0ZSgpfWdldCBicm93c2VyUGFnZUlkKCl7cmV0dXJuImNvbXB1dGVkIiE9PXRoaXMuY2Fu''@;'; put 'put ''Y2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbj90aGlzLmN1cnJlbnRQYWdlSWQ6dGhpcy5yZXN0b3JlZFN0YXRlKCk/Llx1MDI3NXJvdXRlclBhZ2VJZD8/dGhpcy5jdXJyZW50UGFnZUlkfXJlZ2lzdGVyTm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlTGlzdGVuZXIodCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''bG9jYXRpb24uc3Vic2NyaWJlKHI9PnsicG9wc3RhdGUiPT09ci50eXBlJiZzZXRUaW1lb3V0KCgpPT57dChyLnVybCxyLnN0YXRlLCJwb3BzdGF0ZSIpfSl9KX1oYW5kbGVSb3V0ZXJFdmVudCh0LHIpe3QgaW5zdGFuY2VvZiBVVT90aGlzLnVwZGF0ZVN0YXRlTWVtZW50bygpOnQgaW5zdGFu''@;'; put 'put ''Y2VvZiBQRT90aGlzLmNvbW1pdFRyYW5zaXRpb24ocik6dCBpbnN0YW5jZW9mIEJiZT8iZWFnZXIiPT09dGhpcy51cmxVcGRhdGVTdHJhdGVneSYmKHIuZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZXx8dGhpcy5zZXRCcm93c2VyVXJsKHRoaXMuY3JlYXRlQnJvd3NlclBhdGgocikscikpOnQg''@;'; put 'put ''aW5zdGFuY2VvZiBYcmU/KHRoaXMuY29tbWl0VHJhbnNpdGlvbihyKSwiZGVmZXJyZWQiPT09dGhpcy51cmxVcGRhdGVTdHJhdGVneSYmIXIuZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZSYmdGhpcy5zZXRCcm93c2VyVXJsKHRoaXMuY3JlYXRlQnJvd3NlclBhdGgocikscikpOnQgaW5zdGFu''@;'; put 'put ''Y2VvZiBTYiYmdC5jb2RlIT09VDMuU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbiYmdC5jb2RlIT09VDMuUmVkaXJlY3Q/dGhpcy5yZXN0b3JlSGlzdG9yeShyKTp0IGluc3RhbmNlb2YgS3JlP3RoaXMucmVzdG9yZUhpc3RvcnkociwhMCk6dCBpbnN0YW5jZW9mIEI1JiYodGhpcy5sYXN0U3Vj''@;'; put 'put ''Y2Vzc2Z1bElkPXQuaWQsdGhpcy5jdXJyZW50UGFnZUlkPXRoaXMuYnJvd3NlclBhZ2VJZCl9c2V0QnJvd3NlclVybCh0LHtleHRyYXM6cixpZDppfSl7Y29uc3R7cmVwbGFjZVVybDpvLHN0YXRlOmF9PXI7aWYodGhpcy5sb2NhdGlvbi5pc0N1cnJlbnRQYXRoRXF1YWxUbyh0KXx8byl7Y29u''@;'; put 'put ''c3QgbD10aGlzLmJyb3dzZXJQYWdlSWQsdT17Li4uYSwuLi50aGlzLmdlbmVyYXRlTmdSb3V0ZXJTdGF0ZShpLGwpfTt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0LCIiLHUpfWVsc2V7Y29uc3QgbD17Li4uYSwuLi50aGlzLmdlbmVyYXRlTmdSb3V0ZXJTdGF0ZShpLHRoaXMuYnJvd3Nl''@;'; put 'put ''clBhZ2VJZCsxKX07dGhpcy5sb2NhdGlvbi5nbyh0LCIiLGwpfX1yZXN0b3JlSGlzdG9yeSh0LHI9ITEpe2lmKCJjb21wdXRlZCI9PT10aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24pe2NvbnN0IG89dGhpcy5jdXJyZW50UGFnZUlkLXRoaXMuYnJvd3NlclBhZ2VJZDswIT09bz90''@;'; put 'put ''aGlzLmxvY2F0aW9uLmhpc3RvcnlHbyhvKTp0aGlzLmdldEN1cnJlbnRVcmxUcmVlKCk9PT10LmZpbmFsVXJsJiYwPT09byYmKHRoaXMucmVzZXRJbnRlcm5hbFN0YXRlKHQpLHRoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCkpfWVsc2UicmVwbGFjZSI9PT10aGlzLmNhbmNlbGVkTmF2''@;'; put 'put ''aWdhdGlvblJlc29sdXRpb24mJihyJiZ0aGlzLnJlc2V0SW50ZXJuYWxTdGF0ZSh0KSx0aGlzLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpKX1yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKXt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXpl''@;'; put 'put ''KHRoaXMuZ2V0UmF3VXJsVHJlZSgpKSwiIix0aGlzLmdlbmVyYXRlTmdSb3V0ZXJTdGF0ZSh0aGlzLmxhc3RTdWNjZXNzZnVsSWQsdGhpcy5jdXJyZW50UGFnZUlkKSl9Z2VuZXJhdGVOZ1JvdXRlclN0YXRlKHQscil7cmV0dXJuImNvbXB1dGVkIj09PXRoaXMuY2FuY2VsZWROYXZpZ2F0aW9u''@;'; put 'put ''UmVzb2x1dGlvbj97bmF2aWdhdGlvbklkOnQsXHUwMjc1cm91dGVyUGFnZUlkOnJ9OntuYXZpZ2F0aW9uSWQ6dH19c3RhdGljIFx1MDI3NWZhYz0oKCk9PntsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXdhKG4pKSkoaXx8bil9fSkoKTtzdGF0aWMgXHUwMjc1cHJvdj1K''@;'; put 'put ''bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59KSgpO2Z1bmN0aW9uIGd3ZShuLGUpe24uZXZlbnRzLnBpcGUoc3UodD0+dCBpbnN0YW5jZW9mIEI1fHx0IGluc3RhbmNlb2YgU2J8fHQgaW5zdGFuY2VvZiBLcmV8fHQgaW5zdGFuY2Vv''@;'; put 'put ''ZiBQRSksRXModD0+dCBpbnN0YW5jZW9mIEI1fHx0IGluc3RhbmNlb2YgUEU/MDp0IGluc3RhbmNlb2YgU2ImJih0LmNvZGU9PT1UMy5SZWRpcmVjdHx8dC5jb2RlPT09VDMuU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbik/MjoxKSxzdSh0PT4yIT09dCksTXAoMSkpLnN1YnNjcmliZSgoKT0+''@;'; put 'put ''e2UoKX0pfWNvbnN0IFlkdD17cGF0aHM6ImV4YWN0IixmcmFnbWVudDoiaWdub3JlZCIsbWF0cml4UGFyYW1zOiJpZ25vcmVkIixxdWVyeVBhcmFtczoiZXhhY3QifSxaZHQ9e3BhdGhzOiJzdWJzZXQiLGZyYWdtZW50OiJpZ25vcmVkIixtYXRyaXhQYXJhbXM6Imlnbm9yZWQiLHF1ZXJ5UGFy''@;'; put 'put ''YW1zOiJzdWJzZXQifTtsZXQgdmM9KCgpPT57Y2xhc3MgbntnZXQgY3VycmVudFVybFRyZWUoKXtyZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIuZ2V0Q3VycmVudFVybFRyZWUoKX1nZXQgcmF3VXJsVHJlZSgpe3JldHVybiB0aGlzLnN0YXRlTWFuYWdlci5nZXRSYXdVcmxUcmVlKCl9ZGlzcG9z''@;'; put 'put ''ZWQ9ITE7bm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlU3Vic2NyaXB0aW9uO2NvbnNvbGU9c24oSzZlKTtzdGF0ZU1hbmFnZXI9c24ocHdlKTtvcHRpb25zPXNuKHpFLHtvcHRpb25hbDohMH0pfHx7fTtwZW5kaW5nVGFza3M9c24oczUpO3VybFVwZGF0ZVN0cmF0ZWd5PXRoaXMub3B0aW9u''@;'; put 'put ''cy51cmxVcGRhdGVTdHJhdGVneXx8ImRlZmVycmVkIjtuYXZpZ2F0aW9uVHJhbnNpdGlvbnM9c24oZGllKTt1cmxTZXJpYWxpemVyPXNuKE5JKTtsb2NhdGlvbj1zbihWMCk7dXJsSGFuZGxpbmdTdHJhdGVneT1zbih1aWUpO2luamVjdG9yPXNuKG5sKTtfZXZlbnRzPW5ldyBNcjtnZXQgZXZl''@;'; put 'put ''bnRzKCl7cmV0dXJuIHRoaXMuX2V2ZW50c31nZXQgcm91dGVyU3RhdGUoKXtyZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIuZ2V0Um91dGVyU3RhdGUoKX1uYXZpZ2F0ZWQ9ITE7cm91dGVSZXVzZVN0cmF0ZWd5PXNuKGpkdCk7b25TYW1lVXJsTmF2aWdhdGlvbj10aGlzLm9wdGlvbnMub25TYW1l''@;'; put 'put ''VXJsTmF2aWdhdGlvbnx8Imlnbm9yZSI7Y29uZmlnPXNuKFFVLHtvcHRpb25hbDohMH0pPy5mbGF0KCk/P1tdO2NvbXBvbmVudElucHV0QmluZGluZ0VuYWJsZWQ9ISFzbihHVSx7b3B0aW9uYWw6ITB9KTtjdXJyZW50TmF2aWdhdGlvbj10aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5jdXJy''@;'; put 'put ''ZW50TmF2aWdhdGlvbi5hc1JlYWRvbmx5KCk7Y29uc3RydWN0b3IoKXt0aGlzLnJlc2V0Q29uZmlnKHRoaXMuY29uZmlnKSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5zZXR1cE5hdmlnYXRpb25zKHRoaXMpLnN1YnNjcmliZSh7ZXJyb3I6dD0+e3RoaXMuY29uc29sZS53YXJuKHQpfX0p''@;'; put 'put ''LHRoaXMuc3Vic2NyaWJlVG9OYXZpZ2F0aW9uRXZlbnRzKCl9ZXZlbnRzU3Vic2NyaXB0aW9uPW5ldyBBcjtzdWJzY3JpYmVUb05hdmlnYXRpb25FdmVudHMoKXtjb25zdCB0PXRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmV2ZW50cy5zdWJzY3JpYmUocj0+e3RyeXtjb25zdCBpPXRoaXMu''@;'; put 'put ''bmF2aWdhdGlvblRyYW5zaXRpb25zLmN1cnJlbnRUcmFuc2l0aW9uLG89TnUodGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuY3VycmVudE5hdmlnYXRpb24pO2lmKG51bGwhPT1pJiZudWxsIT09bylpZih0aGlzLnN0YXRlTWFuYWdlci5oYW5kbGVSb3V0ZXJFdmVudChyLG8pLHIgaW5zdGFu''@;'; put 'put ''Y2VvZiBTYiYmci5jb2RlIT09VDMuUmVkaXJlY3QmJnIuY29kZSE9PVQzLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pdGhpcy5uYXZpZ2F0ZWQ9ITA7ZWxzZSBpZihyIGluc3RhbmNlb2YgQjUpdGhpcy5uYXZpZ2F0ZWQ9ITA7ZWxzZSBpZihyIGluc3RhbmNlb2YgV1Upe2NvbnN0IGE9ci5u''@;'; put 'put ''YXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zLGw9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKHIudXJsLGkuY3VycmVudFJhd1VybCksdT17YnJvd3NlclVybDppLmV4dHJhcy5icm93c2VyVXJsLGluZm86aS5leHRyYXMuaW5mbyxza2lwTG9jYXRpb25DaGFuZ2U6aS5leHRyYXMuc2tp''@;'; put 'put ''cExvY2F0aW9uQ2hhbmdlLHJlcGxhY2VVcmw6aS5leHRyYXMucmVwbGFjZVVybHx8ImVhZ2VyIj09PXRoaXMudXJsVXBkYXRlU3RyYXRlZ3l8fEJkdChpLnNvdXJjZSksLi4uYX07dGhpcy5zY2hlZHVsZU5hdmlnYXRpb24obCxWSSxudWxsLHUse3Jlc29sdmU6aS5yZXNvbHZlLHJlamVjdDpp''@;'; put 'put ''LnJlamVjdCxwcm9taXNlOmkucHJvbWlzZX0pfShmdW5jdGlvbiBrdXQobil7cmV0dXJuIShuIGluc3RhbmNlb2YgWHJlfHxuIGluc3RhbmNlb2YgV1UpfSkocikmJnRoaXMuX2V2ZW50cy5uZXh0KHIpfWNhdGNoKGkpe3RoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLnRyYW5zaXRpb25BYm9y''@;'; put 'put ''dFdpdGhFcnJvclN1YmplY3QubmV4dChpKX19KTt0aGlzLmV2ZW50c1N1YnNjcmlwdGlvbi5hZGQodCl9cmVzZXRSb290Q29tcG9uZW50VHlwZSh0KXt0aGlzLnJvdXRlclN0YXRlLnJvb3QuY29tcG9uZW50PXQsdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMucm9vdENvbXBvbmVudFR5cGU9''@;'; put 'put ''dH1pbml0aWFsTmF2aWdhdGlvbigpe3RoaXMuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCksdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuaGFzUmVxdWVzdGVkTmF2aWdhdGlvbnx8dGhpcy5uYXZpZ2F0ZVRvU3luY1dpdGhCcm93c2VyKHRoaXMubG9jYXRpb24ucGF0aCghMCksVkks''@;'; put 'put ''dGhpcy5zdGF0ZU1hbmFnZXIucmVzdG9yZWRTdGF0ZSgpKX1zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKXt0aGlzLm5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZVN1YnNjcmlwdGlvbj8/PXRoaXMuc3RhdGVNYW5hZ2VyLnJlZ2lzdGVyTm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdl''@;'; put 'put ''TGlzdGVuZXIoKHQscixpKT0+e3RoaXMubmF2aWdhdGVUb1N5bmNXaXRoQnJvd3Nlcih0LGkscil9KX1uYXZpZ2F0ZVRvU3luY1dpdGhCcm93c2VyKHQscixpKXtjb25zdCBvPXtyZXBsYWNlVXJsOiEwfSxhPWk/Lm5hdmlnYXRpb25JZD9pOm51bGw7aWYoaSl7Y29uc3QgdT17Li4uaX07ZGVs''@;'; put 'put ''ZXRlIHUubmF2aWdhdGlvbklkLGRlbGV0ZSB1Llx1MDI3NXJvdXRlclBhZ2VJZCwwIT09T2JqZWN0LmtleXModSkubGVuZ3RoJiYoby5zdGF0ZT11KX1jb25zdCBsPXRoaXMucGFyc2VVcmwodCk7dGhpcy5zY2hlZHVsZU5hdmlnYXRpb24obCxyLGEsbykuY2F0Y2godT0+e3RoaXMuZGlzcG9z''@;'; put 'put ''ZWR8fHRoaXMuaW5qZWN0b3IuZ2V0KF9wKSh1KX0pfWdldCB1cmwoKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVVcmwodGhpcy5jdXJyZW50VXJsVHJlZSl9Z2V0Q3VycmVudE5hdmlnYXRpb24oKXtyZXR1cm4gTnUodGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuY3VycmVudE5hdmlnYXRpb24p''@;'; put 'put ''fWdldCBsYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb24oKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMubGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9ufXJlc2V0Q29uZmlnKHQpe3RoaXMuY29uZmlnPXQubWFwKHJpZSksdGhpcy5uYXZpZ2F0ZWQ9ITF9bmdPbkRlc3Ryb3koKXt0aGlz''@;'; put 'put ''LmRpc3Bvc2UoKX1kaXNwb3NlKCl7dGhpcy5fZXZlbnRzLnVuc3Vic2NyaWJlKCksdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuY29tcGxldGUoKSx0aGlzLm5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZVN1YnNjcmlwdGlvbiYmKHRoaXMubm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdl''@;'; put 'put ''U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5ub25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJzY3JpcHRpb249dm9pZCAwKSx0aGlzLmRpc3Bvc2VkPSEwLHRoaXMuZXZlbnRzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9Y3JlYXRlVXJsVHJlZSh0LHI9e30pe2NvbnN0e3Jl''@;'; put 'put ''bGF0aXZlVG86aSxxdWVyeVBhcmFtczpvLGZyYWdtZW50OmEscXVlcnlQYXJhbXNIYW5kbGluZzpsLHByZXNlcnZlRnJhZ21lbnQ6dX09cixnPXU/dGhpcy5jdXJyZW50VXJsVHJlZS5mcmFnbWVudDphO2xldCBPLEU9bnVsbDtzd2l0Y2gobD8/dGhpcy5vcHRpb25zLmRlZmF1bHRRdWVyeVBh''@;'; put 'put ''cmFtc0hhbmRsaW5nKXtjYXNlIm1lcmdlIjpFPXsuLi50aGlzLmN1cnJlbnRVcmxUcmVlLnF1ZXJ5UGFyYW1zLC4uLm99O2JyZWFrO2Nhc2UicHJlc2VydmUiOkU9dGhpcy5jdXJyZW50VXJsVHJlZS5xdWVyeVBhcmFtczticmVhaztkZWZhdWx0OkU9b3x8bnVsbH1udWxsIT09RSYmKEU9dGhp''@;'; put 'put ''cy5yZW1vdmVFbXB0eVByb3BzKEUpKTt0cnl7Tz1MYmUoaT9pLnNuYXBzaG90OnRoaXMucm91dGVyU3RhdGUuc25hcHNob3Qucm9vdCl9Y2F0Y2h7KCJzdHJpbmciIT10eXBlb2YgdFswXXx8Ii8iIT09dFswXVswXSkmJih0PVtdKSxPPXRoaXMuY3VycmVudFVybFRyZWUucm9vdH1yZXR1cm4g''@;'; put 'put ''T2JlKE8sdCxFLGc/P251bGwpfW5hdmlnYXRlQnlVcmwodCxyPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KXtjb25zdCBpPUNiKHQpP3Q6dGhpcy5wYXJzZVVybCh0KSxvPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShpLHRoaXMucmF3VXJsVHJlZSk7cmV0dXJuIHRoaXMuc2NoZWR1''@;'; put 'put ''bGVOYXZpZ2F0aW9uKG8sVkksbnVsbCxyKX1uYXZpZ2F0ZSh0LHI9e3NraXBMb2NhdGlvbkNoYW5nZTohMX0pe3JldHVybiBmdW5jdGlvbiBHZHQobil7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspaWYobnVsbD09bltlXSl0aHJvdyBuZXcgV24oNDAwOCwhMSl9KHQpLHRoaXMubmF2aWdh''@;'; put 'put ''dGVCeVVybCh0aGlzLmNyZWF0ZVVybFRyZWUodCxyKSxyKX1zZXJpYWxpemVVcmwodCl7cmV0dXJuIHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodCl9cGFyc2VVcmwodCl7dHJ5e3JldHVybiB0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UodCl9Y2F0Y2h7cmV0dXJuIHRoaXMuY29uc29s''@;'; put 'put ''ZS53YXJuKGRjKDQwMTgsITEpKSx0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoIi8iKX19aXNBY3RpdmUodCxyKXtsZXQgaTtpZihpPSEwPT09cj97Li4uWWR0fTohMT09PXI/ey4uLlpkdH06cixDYih0KSlyZXR1cm4gRWJlKHRoaXMuY3VycmVudFVybFRyZWUsdCxpKTtjb25zdCBvPXRoaXMu''@;'; put 'put ''cGFyc2VVcmwodCk7cmV0dXJuIEViZSh0aGlzLmN1cnJlbnRVcmxUcmVlLG8saSl9cmVtb3ZlRW1wdHlQcm9wcyh0KXtyZXR1cm4gT2JqZWN0LmVudHJpZXModCkucmVkdWNlKChyLFtpLG9dKT0+KG51bGwhPW8mJihyW2ldPW8pLHIpLHt9KX1zY2hlZHVsZU5hdmlnYXRpb24odCxyLGksbyxh''@;'; put 'put ''KXtpZih0aGlzLmRpc3Bvc2VkKXJldHVybiBQcm9taXNlLnJlc29sdmUoITEpO2xldCBsLHUsZzthPyhsPWEucmVzb2x2ZSx1PWEucmVqZWN0LGc9YS5wcm9taXNlKTpnPW5ldyBQcm9taXNlKChPLFopPT57bD1PLHU9Wn0pO2NvbnN0IEU9dGhpcy5wZW5kaW5nVGFza3MuYWRkKCk7cmV0dXJu''@;'; put 'put ''IGd3ZSh0aGlzLCgpPT57cXVldWVNaWNyb3Rhc2soKCk9PnRoaXMucGVuZGluZ1Rhc2tzLnJlbW92ZShFKSl9KSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5oYW5kbGVOYXZpZ2F0aW9uUmVxdWVzdCh7c291cmNlOnIscmVzdG9yZWRTdGF0ZTppLGN1cnJlbnRVcmxUcmVlOnRoaXMuY3Vy''@;'; put 'put ''cmVudFVybFRyZWUsY3VycmVudFJhd1VybDp0aGlzLmN1cnJlbnRVcmxUcmVlLHJhd1VybDp0LGV4dHJhczpvLHJlc29sdmU6bCxyZWplY3Q6dSxwcm9taXNlOmcsY3VycmVudFNuYXBzaG90OnRoaXMucm91dGVyU3RhdGUuc25hcHNob3QsY3VycmVudFJvdXRlclN0YXRlOnRoaXMucm91dGVy''@;'; put 'put ''U3RhdGV9KSxnLmNhdGNoKE89PlByb21pc2UucmVqZWN0KE8pKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0p''@;'; put 'put ''KCk7dmFyIFdFPWZ1bmN0aW9uKG4pe3JldHVybiBuLmxpZ2h0PSJsaWdodCIsbi5kYXJrPSJkYXJrIixufShXRXx8e30pO2NvbnN0ICRkdD1uPT5uZXcgUHJvbWlzZShlPT5zZXRUaW1lb3V0KGUsbikpLHFkdD1mdW5jdGlvbigpe3ZhciBuPUNyKGZ1bmN0aW9uKihlLHQpe2NvbnN0IHI9dD8u''@;'; put 'put ''bWF4RGVsYXlNcz8/M2UzLGk9dD8ucmFuZG9tPz9NYXRoLnJhbmRvbSxvPXQ/LndhaXQ/PyRkdDt0cnl7cmV0dXJuIHlpZWxkIGUoKX1jYXRjaHtyZXR1cm4geWllbGQgbyhpKCkqciksZSgpfX0pO3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19''@;'; put 'put ''KCksbXdlPW49Pm51bGwhPT1uJiYib2JqZWN0Ij09dHlwZW9mIG4/bnVsbDpgVGhlIHN0YXJ0dXBzZXJ2aWNlIHJlc3BvbnNlIHdhcyBub3QgaW4gdGhlIGV4cGVjdGVkIGZvcm1hdCAtIGl0IHNob3VsZCBiZSBhIEpTT04gb2JqZWN0LCBidXQgdGhlIGZvbGxvd2luZyB3YXMgcmVjZWl2ZWQg''@;'; put 'put ''aW5zdGVhZDpcblxuJHtTdHJpbmcobil9YDt2YXIgaGllPWgoNTUxODgpLEtkdD1oKDc4NzU1KTtjb25zdCBmaWU9e3VzZXJzX2FsbG93ZWQ6MSx2aWV3ZXJfcm93c19hbGxvd2VkOjE1LGVkaXRvcl9yb3dzX2FsbG93ZWQ6MTUsc3RhZ2Vfcm93c19hbGxvd2VkOjEvMCxoaXN0b3J5X3Jvd3Nf''@;'; put 'put ''YWxsb3dlZDoxNSxzdWJtaXRfcm93c19saW1pdDo1LHZpZXdib3hfbGltaXQ6MSxsaW5lYWdlX2RhaWx5X2xpbWl0OjMsdGFibGVzX2luX2xpYnJhcnlfbGltaXQ6MzUsdmlld2JveDohMCxmaWxlVXBsb2FkOiExLGVkaXRSZWNvcmQ6ITAsYWRkUmVjb3JkOiEwfTt2YXIgVHA9ZnVuY3Rpb24o''@;'; put 'put ''bil7cmV0dXJuIG5bbi52aWV3ZXJfcm93c19hbGxvd2VkPTBdPSJ2aWV3ZXJfcm93c19hbGxvd2VkIixuW24uZWRpdG9yX3Jvd3NfYWxsb3dlZD0xXT0iZWRpdG9yX3Jvd3NfYWxsb3dlZCIsbltuLnN0YWdlX3Jvd3NfYWxsb3dlZD0yXT0ic3RhZ2Vfcm93c19hbGxvd2VkIixuW24uaGlzdG9y''@;'; put 'put ''eV9yb3dzX2FsbG93ZWQ9M109Imhpc3Rvcnlfcm93c19hbGxvd2VkIixuW24uc3VibWl0X3Jvd3NfbGltaXQ9NF09InN1Ym1pdF9yb3dzX2xpbWl0IixuW24udGFibGVzX2luX2xpYnJhcnlfbGltaXQ9NV09InRhYmxlc19pbl9saWJyYXJ5X2xpbWl0IixuW24udmlld2JveD02XT0idmlld2Jv''@;'; put 'put ''eCIsbltuLnZpZXdib3hfbGltaXQ9N109InZpZXdib3hfbGltaXQiLG5bbi5saW5lYWdlX2RhaWx5X2xpbWl0PThdPSJsaW5lYWdlX2RhaWx5X2xpbWl0IixuW24uZmlsZVVwbG9hZD05XT0iZmlsZVVwbG9hZCIsbltuLmVkaXRSZWNvcmQ9MTBdPSJlZGl0UmVjb3JkIixuW24uYWRkUmVjb3Jk''@;'; put 'put ''PTExXT0iYWRkUmVjb3JkIixufShUcHx8e30pO2NvbnN0IHZ3ZT1uPT4ib2JqZWN0Ij09dHlwZW9mIG4/WGR0KG4pOlFkdChuKSxYZHQ9bj0+KHt2aWV3ZXJfcm93c19hbGxvd2VkOm4udnJhPz8xLzAsZWRpdG9yX3Jvd3NfYWxsb3dlZDpuLmVyYT8/MS8wLHN0YWdlX3Jvd3NfYWxsb3dlZDpu''@;'; put 'put ''LnNyYT8/MS8wLGhpc3Rvcnlfcm93c19hbGxvd2VkOm4uaHJhPz8xLzAsc3VibWl0X3Jvd3NfbGltaXQ6bi5zcmw/PzEvMCx0YWJsZXNfaW5fbGlicmFyeV9saW1pdDpuLnRpbGw/PzEvMCx2aWV3Ym94Om4udmIsdmlld2JveF9saW1pdDpuLnZibD8/MS8wLGxpbmVhZ2VfZGFpbHlfbGltaXQ6''@;'; put 'put ''bi5sZGw/PzEvMCxmaWxlVXBsb2FkOm4uZnUsZWRpdFJlY29yZDpuLmVyLGFkZFJlY29yZDpuLmFyfSksUWR0PW49Pntjb25zdCBlPW4uc3BsaXQoIiwiKSx0PWk9PiItIj09PWk/MS8wOnBhcnNlSW50KGkpLHI9aT0+ISFwYXJzZUludChpKTtyZXR1cm57dmlld2VyX3Jvd3NfYWxsb3dlZDp0''@;'; put 'put ''KGVbVHAudmlld2VyX3Jvd3NfYWxsb3dlZF0pLGVkaXRvcl9yb3dzX2FsbG93ZWQ6dChlW1RwLmVkaXRvcl9yb3dzX2FsbG93ZWRdKSxzdGFnZV9yb3dzX2FsbG93ZWQ6dChlW1RwLnN0YWdlX3Jvd3NfYWxsb3dlZF0pLGhpc3Rvcnlfcm93c19hbGxvd2VkOnQoZVtUcC5oaXN0b3J5X3Jvd3Nf''@;'; put 'put ''YWxsb3dlZF0pLHN1Ym1pdF9yb3dzX2xpbWl0OnQoZVtUcC5zdWJtaXRfcm93c19saW1pdF0pLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OnQoZVtUcC50YWJsZXNfaW5fbGlicmFyeV9saW1pdF0pLHZpZXdib3hfbGltaXQ6dChlW1RwLnZpZXdib3hfbGltaXRdKSxsaW5lYWdlX2RhaWx5X2xp''@;'; put 'put ''bWl0OnQoZVtUcC5saW5lYWdlX2RhaWx5X2xpbWl0XSksdmlld2JveDpyKGVbVHAudmlld2JveF0pLGZpbGVVcGxvYWQ6cihlW1RwLmZpbGVVcGxvYWRdKSxlZGl0UmVjb3JkOnIoZVtUcC5lZGl0UmVjb3JkXSksYWRkUmVjb3JkOnIoZVtUcC5hZGRSZWNvcmRdKX19O3ZhciB4cD1oKDM3MzQp''@;'; put 'put ''LF93ZT1oLm4oeHApLF8wPWgoMTMyNDcpO2NvbnN0IEpkdD1be25hbWU6IkVkZ2UiLHRva2VuOi8oPzpFZGdpT1N8RWRnW0EtWl0/fEVkZ2UpXC8vLHZlcnNpb246Lyg/OkVkZ2lPU3xFZGdbQS1aXT98RWRnZSlcLyhbXGQuXSspL30se25hbWU6Ik9wZXJhIix0b2tlbjovKD86T1BpT1N8T1BS''@;'; put 'put ''KVwvLyx2ZXJzaW9uOi8oPzpPUGlPU3xPUFIpXC8oW1xkLl0rKS99LHtuYW1lOiJGaXJlZm94Iix0b2tlbjovKD86RnhpT1N8RmlyZWZveClcLy8sdmVyc2lvbjovKD86RnhpT1N8RmlyZWZveClcLyhbXGQuXSspL30se25hbWU6IkNocm9tZSIsdG9rZW46Lyg/OkNyaU9TfENocm9tZSlcLy8s''@;'; put 'put ''dmVyc2lvbjovKD86Q3JpT1N8Q2hyb21lKVwvKFtcZC5dKykvfSx7bmFtZToiU2FmYXJpIix0b2tlbjovU2FmYXJpXC8vLHZlcnNpb246L1ZlcnNpb25cLyhbXGQuXSspL31dO2xldCBFYj0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKCl7fXNldERjQWRhcHRlclNldHRpbmdzKHIp''@;'; put 'put ''e3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M9cn1nZXREY0FkYXB0ZXJTZXR0aW5ncygpe3JldHVybiB0aGlzLmRjQWRhcHRlclNldHRpbmdzfXN0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpfSx0aGlzLlx1MDI3NXByb3Y9Sm4oe3Rva2Vu''@;'; put 'put ''OmUsZmFjdG9yeTplLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pKX1yZXR1cm4gbigpLGV9KSgpLHBpZT0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKCl7dGhpcy51c2VyQ2hhbmdlPW5ldyBNcn1zZXQgdXNlcihyKXt0aGlzLl91c2VyPXIsdGhpcy51c2VyQ2hhbmdlLm5l''@;'; put 'put ''eHQocil9Z2V0IHVzZXIoKXtyZXR1cm4gdGhpcy5fdXNlcn1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKX0sdGhpcy5cdTAyNzVwcm92PUpuKHt0b2tlbjplLGZhY3Rvcnk6ZS5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSl9''@;'; put 'put ''cmV0dXJuIG4oKSxlfSkoKTtjbGFzcyBKVXtjb25zdHJ1Y3Rvcigpe3RoaXMuZGVmYXVsdFNldHRpbmdzPXtwZXJzaXN0U2VsZWN0ZWRUaGVtZTohMCxzZWxlY3RlZFRoZW1lOldFLmxpZ2h0fSx0aGlzLnNldHRpbmdzPW5ldyAkaSh0aGlzLmRlZmF1bHRTZXR0aW5ncyksdGhpcy5yZXN0b3Jl''@;'; put 'put ''QXBwU2V0dGluZ3MoKX1yZXN0b3JlQXBwU2V0dGluZ3MoKXt0cnl7Y29uc3QgZT1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiYXBwLXNldHRpbmdzIik7aWYoZSl7Y29uc3QgdD1KU09OLnBhcnNlKGUpO3RoaXMuc2V0QXBwU2V0dGluZ3ModCl9ZWxzZSBjb25zb2xlLmluZm8oIk5vIGFwcCBzZXR0''@;'; put 'put ''aW5ncyBzdG9yZWQgaW4gdGhlIGxvY2FsU3RvcmFnZSwgd2Ugd2lsbCBzZXQgdG8gZGVmYXVsdCB2YWx1ZXMuIil9Y2F0Y2goZSl7Y29uc29sZS53YXJuKCJFcnJvciByZXN0b3Jpbmcgc2V0dGluZ3MgZnJvbSBsb2NhbCBzdG9yZ2FlLiIsZSl9fXN0b3JlQXBwU2V0dGluZ3MoKXtsb2NhbFN0''@;'; put 'put ''b3JhZ2Uuc2V0SXRlbSgiYXBwLXNldHRpbmdzIixKU09OLnN0cmluZ2lmeSh0aGlzLnNldHRpbmdzLnZhbHVlKSl9c2V0QXBwU2V0dGluZ3MoZSl7dGhpcy5zZXR0aW5ncy5uZXh0KHsuLi50aGlzLnNldHRpbmdzLnZhbHVlLC4uLmV9KSx0aGlzLnN0b3JlQXBwU2V0dGluZ3MoKX19bGV0IHVk''@;'; put 'put ''PSgoKT0+e3ZhciBuO2NsYXNzIGV7Y29uc3RydWN0b3Iocil7dGhpcy5hcHBTZXR0aW5nc1NlcnZpY2U9cix0aGlzLm9uU2lkZWJhclRvZ2dsZT1uZXcgS3IsdGhpcy5vblN0YXJ0dXBEYXRhTG9hZGVkPW5ldyBLcix0aGlzLm9uU2hvd0Fib3J0TW9kYWw9bmV3IEtyLHRoaXMub25SZXF1ZXN0''@;'; put 'put ''c01vZGFsT3Blbj1uZXcgS3IsdGhpcy5vbkRlbW9MaW1pdE1vZGFsU2hvdz1uZXcgS3IsdGhpcy52aWV3TGFzdFVybD1udWxsLHRoaXMuc2lkZWJhckNsb3NlTGltaXQ9MTI4MCx0aGlzLmRhcmtNb2RlPW5ldyAkaSghMSl9dG9nZ2xlRGFya01vZGUocil7dGhpcy5kYXJrTW9kZS5uZXh0KHIp''@;'; put 'put ''LHI/ZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoImNkcy10aGVtZSIsImRhcmsiKTpkb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZSgiY2RzLXRoZW1lIiwibGlnaHQiKSx0aGlzLmFwcFNldHRpbmdzU2VydmljZS5zZXRBcHBTZXR0aW5ncyh7c2VsZWN0ZWRUaGVtZTpyP1dFLmRhcms6V0Uu''@;'; put 'put ''bGlnaHR9KX1zaG93RGVtb0xpbWl0TW9kYWwocil7dGhpcy5vbkRlbW9MaW1pdE1vZGFsU2hvdy5lbWl0KHIpfXNob3dJbmZvTW9kYWwocj0iSW5mbyIsaSl7dGhpcy5vblNob3dBYm9ydE1vZGFsLmVtaXQoe21vZGFsVGl0bGU6cixtZXNzYWdlOmksc2FzU2VydmljZToiIixkZXRhaWxzOm51''@;'; put 'put ''bGx9KX1zaG93QWJvcnRNb2RhbChyLGksbyxhPXZvaWQgMCl7b3x8KG89bnVsbCk7bGV0IGw9e3Nhc1NlcnZpY2U6cixtZXNzYWdlOmksZGV0YWlsczpvfTthJiYobC5tb2RhbFRpdGxlPWEpLHRoaXMub25TaG93QWJvcnRNb2RhbC5lbWl0KGwpfW9wZW5SZXF1ZXN0c01vZGFsKCl7dGhpcy5v''@;'; put 'put ''blJlcXVlc3RzTW9kYWxPcGVuLmVtaXQoITApfWNhdGNoUmVzcG9uc2VFcnJvcihyLGkpe2xldCBvPSJTQVMgU2VydmljZSBlcnJvciBvY3VycmVkIjtpZihpLmVycm9yKXtsZXQgYTtvPWkuZXJyb3IubWVzc2FnZSxpLmVycm9yLmRldGFpbHMmJmkuZXJyb3IuZGV0YWlscy5sb2cmJihhPWku''@;'; put 'put ''ZXJyb3IuZGV0YWlscy5sb2cpLCghb3x8by50cmltKCkubGVuZ3RoPDEpJiYobz0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCIpLHRoaXMuc2hvd0Fib3J0TW9kYWwocixvLHtMT0c6YX0sIlJlcXVlc3QgZXJyb3IiKX1lbHNlIHRoaXMuc2hvd0Fib3J0TW9kYWwocixvKX10b2dnbGVTaWRl''@;'; put 'put ''YmFyKCl7dGhpcy5vblNpZGViYXJUb2dnbGUuZW1pdCgpfWNsb3NlU2lkZWJhcigpe3dpbmRvdy5pbm5lcldpZHRoPHRoaXMuc2lkZWJhckNsb3NlTGltaXQmJnRoaXMub25TaWRlYmFyVG9nZ2xlLmVtaXQoe29wZW46ITF9KX1vcGVuU2lkZWJhcigpe3RoaXMub25TaWRlYmFyVG9nZ2xlLmVt''@;'; put 'put ''aXQoe29wZW46ITB9KX1zdGFydHVwRGF0YUxvYWRlZCgpe3RoaXMub25TdGFydHVwRGF0YUxvYWRlZC5lbWl0KCl9ZGlzcGF0Y2hFdmVudChyKXtsZXQgaTsiZnVuY3Rpb24iPT10eXBlb2YgRXZlbnQ/aT1uZXcgRXZlbnQocik6KGk9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksaS5p''@;'; put 'put ''bml0RXZlbnQociwhMCwhMCkpLHdpbmRvdy5kaXNwYXRjaEV2ZW50KGkpfXN0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpKG9yKEpVKSl9LHRoaXMuXHUwMjc1cHJvdj1Kbih7dG9rZW46ZSxmYWN0b3J5OmUuXHUwMjc1ZmFjLHByb3Zp''@;'; put 'put ''ZGVkSW46InJvb3QifSkpfXJldHVybiBuKCksZX0pKCk7Y2xhc3MgWUl7fWNsYXNzIGV6e31jbGFzcyB1NHtoZWFkZXJzO25vcm1hbGl6ZWROYW1lcz1uZXcgTWFwO2xhenlJbml0O2xhenlVcGRhdGU9bnVsbDtjb25zdHJ1Y3RvcihlKXtlPyJzdHJpbmciPT10eXBlb2YgZT90aGlzLmxhenlJ''@;'; put 'put ''bml0PSgpPT57dGhpcy5oZWFkZXJzPW5ldyBNYXAsZS5zcGxpdCgiXG4iKS5mb3JFYWNoKHQ9Pntjb25zdCByPXQuaW5kZXhPZigiOiIpO2lmKHI+MCl7Y29uc3QgaT10LnNsaWNlKDAsciksbz10LnNsaWNlKHIrMSkudHJpbSgpO3RoaXMuYWRkSGVhZGVyRW50cnkoaSxvKX19KX06dHlwZW9m''@;'; put 'put ''IEhlYWRlcnM8InUiJiZlIGluc3RhbmNlb2YgSGVhZGVycz8odGhpcy5oZWFkZXJzPW5ldyBNYXAsZS5mb3JFYWNoKCh0LHIpPT57dGhpcy5hZGRIZWFkZXJFbnRyeShyLHQpfSkpOnRoaXMubGF6eUluaXQ9KCk9Pnt0aGlzLmhlYWRlcnM9bmV3IE1hcCxPYmplY3QuZW50cmllcyhlKS5mb3JF''@;'; put 'put ''YWNoKChbdCxyXSk9Pnt0aGlzLnNldEhlYWRlckVudHJpZXModCxyKX0pfTp0aGlzLmhlYWRlcnM9bmV3IE1hcH1oYXMoZSl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMuaGVhZGVycy5oYXMoZS50b0xvd2VyQ2FzZSgpKX1nZXQoZSl7dGhpcy5pbml0KCk7Y29uc3QgdD10aGlzLmhlYWRlcnMu''@;'; put 'put ''Z2V0KGUudG9Mb3dlckNhc2UoKSk7cmV0dXJuIHQmJnQubGVuZ3RoPjA/dFswXTpudWxsfWtleXMoKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy52YWx1ZXMoKSl9Z2V0QWxsKGUpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmhlYWRlcnMuZ2V0''@;'; put 'put ''KGUudG9Mb3dlckNhc2UoKSl8fG51bGx9YXBwZW5kKGUsdCl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6ZSx2YWx1ZTp0LG9wOiJhIn0pfXNldChlLHQpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOmUsdmFsdWU6dCxvcDoicyJ9KX1kZWxldGUoZSx0KXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFt''@;'; put 'put ''ZTplLHZhbHVlOnQsb3A6ImQifSl9bWF5YmVTZXROb3JtYWxpemVkTmFtZShlLHQpe3RoaXMubm9ybWFsaXplZE5hbWVzLmhhcyh0KXx8dGhpcy5ub3JtYWxpemVkTmFtZXMuc2V0KHQsZSl9aW5pdCgpe3RoaXMubGF6eUluaXQmJih0aGlzLmxhenlJbml0IGluc3RhbmNlb2YgdTQ/dGhpcy5j''@;'; put 'put ''b3B5RnJvbSh0aGlzLmxhenlJbml0KTp0aGlzLmxhenlJbml0KCksdGhpcy5sYXp5SW5pdD1udWxsLHRoaXMubGF6eVVwZGF0ZSYmKHRoaXMubGF6eVVwZGF0ZS5mb3JFYWNoKGU9PnRoaXMuYXBwbHlVcGRhdGUoZSkpLHRoaXMubGF6eVVwZGF0ZT1udWxsKSl9Y29weUZyb20oZSl7ZS5pbml0''@;'; put 'put ''KCk7Zm9yKGNvbnN0W3Qscl1vZiBlLmhlYWRlcnMuZW50cmllcygpKXRoaXMuaGVhZGVycy5zZXQodCxyKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQodCxlLm5vcm1hbGl6ZWROYW1lcy5nZXQodCkpfWNsb25lKGUpe2NvbnN0IHQ9bmV3IHU0O3JldHVybiB0LmxhenlJbml0PXRoaXMubGF6''@;'; put 'put ''eUluaXQmJnRoaXMubGF6eUluaXQgaW5zdGFuY2VvZiB1ND90aGlzLmxhenlJbml0OnRoaXMsdC5sYXp5VXBkYXRlPSh0aGlzLmxhenlVcGRhdGV8fFtdKS5jb25jYXQoW2VdKSx0fWFwcGx5VXBkYXRlKGUpe2NvbnN0IHQ9ZS5uYW1lLnRvTG93ZXJDYXNlKCk7c3dpdGNoKGUub3Ape2Nhc2Ui''@;'; put 'put ''YSI6Y2FzZSJzIjpsZXQgcj1lLnZhbHVlO2lmKCJzdHJpbmciPT10eXBlb2YgciYmKHI9W3JdKSwwPT09ci5sZW5ndGgpcmV0dXJuO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShlLm5hbWUsdCk7Y29uc3QgaT0iYSI9PT1lLm9wPyh0aGlzLmhlYWRlcnMuZ2V0KHQpfHxbXSkuc2xpY2Uo''@;'; put 'put ''KTpbXTtpLnB1c2goLi4uciksdGhpcy5oZWFkZXJzLnNldCh0LGkpO2JyZWFrO2Nhc2UiZCI6Y29uc3Qgbz1lLnZhbHVlO2lmKHZvaWQgMD09PW8pdGhpcy5oZWFkZXJzLmRlbGV0ZSh0KSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUodCk7ZWxzZXtjb25zdCBhPUFycmF5LmlzQXJyYXko''@;'; put 'put ''byk/bzpbb107bGV0IGw9dGhpcy5oZWFkZXJzLmdldCh0KTtpZighbClyZXR1cm47bD1sLmZpbHRlcih1PT4tMT09PWEuaW5kZXhPZih1KSksMD09PWwubGVuZ3RoPyh0aGlzLmhlYWRlcnMuZGVsZXRlKHQpLHRoaXMubm9ybWFsaXplZE5hbWVzLmRlbGV0ZSh0KSk6dGhpcy5oZWFkZXJzLnNl''@;'; put 'put ''dCh0LGwpfX19YWRkSGVhZGVyRW50cnkoZSx0KXtjb25zdCByPWUudG9Mb3dlckNhc2UoKTt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUoZSxyKSx0aGlzLmhlYWRlcnMuaGFzKHIpP3RoaXMuaGVhZGVycy5nZXQocikucHVzaCh0KTp0aGlzLmhlYWRlcnMuc2V0KHIsW3RdKX1zZXRIZWFk''@;'; put 'put ''ZXJFbnRyaWVzKGUsdCl7Y29uc3Qgcj0oQXJyYXkuaXNBcnJheSh0KT90Olt0XSkubWFwKG89Pm8udG9TdHJpbmcoKSksaT1lLnRvTG93ZXJDYXNlKCk7dGhpcy5oZWFkZXJzLnNldChpLHIpLHRoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShlLGkpfWZvckVhY2goZSl7dGhpcy5pbml0KCks''@;'; put 'put ''QXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy5rZXlzKCkpLmZvckVhY2godD0+ZSh0aGlzLm5vcm1hbGl6ZWROYW1lcy5nZXQodCksdGhpcy5oZWFkZXJzLmdldCh0KSkpfX1jbGFzcyB0aHR7ZW5jb2RlS2V5KGUpe3JldHVybiBid2UoZSl9ZW5jb2RlVmFsdWUoZSl7cmV0dXJuIGJ3''@;'; put 'put ''ZShlKX1kZWNvZGVLZXkoZSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1kZWNvZGVWYWx1ZShlKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfX1jb25zdCByaHQ9LyUoXGRbYS1mMC05XSkvZ2ksaWh0PXs0MDoiQCIsIjNBIjoiOiIsMjQ6IiQiLCIyQyI6IiwiLCIzQiI6Ijsi''@;'; put 'put ''LCIzRCI6Ij0iLCIzRiI6Ij8iLCIyRiI6Ii8ifTtmdW5jdGlvbiBid2Uobil7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChuKS5yZXBsYWNlKHJodCwoZSx0KT0+aWh0W3RdPz9lKX1mdW5jdGlvbiB0eihuKXtyZXR1cm5gJHtufWB9Y2xhc3MgaHZ7bWFwO2VuY29kZXI7dXBkYXRlcz1udWxs''@;'; put 'put ''O2Nsb25lRnJvbT1udWxsO2NvbnN0cnVjdG9yKGU9e30pe2lmKHRoaXMuZW5jb2Rlcj1lLmVuY29kZXJ8fG5ldyB0aHQsZS5mcm9tU3RyaW5nKXtpZihlLmZyb21PYmplY3QpdGhyb3cgbmV3IFduKDI4MDUsITEpO3RoaXMubWFwPWZ1bmN0aW9uIG5odChuLGUpe2NvbnN0IHQ9bmV3IE1hcDty''@;'; put 'put ''ZXR1cm4gbi5sZW5ndGg+MCYmbi5yZXBsYWNlKC9eXD8vLCIiKS5zcGxpdCgiJiIpLmZvckVhY2goaT0+e2NvbnN0IG89aS5pbmRleE9mKCI9IiksW2EsbF09LTE9PW8/W2UuZGVjb2RlS2V5KGkpLCIiXTpbZS5kZWNvZGVLZXkoaS5zbGljZSgwLG8pKSxlLmRlY29kZVZhbHVlKGkuc2xpY2Uo''@;'; put 'put ''bysxKSldLHU9dC5nZXQoYSl8fFtdO3UucHVzaChsKSx0LnNldChhLHUpfSksdH0oZS5mcm9tU3RyaW5nLHRoaXMuZW5jb2Rlcil9ZWxzZSBlLmZyb21PYmplY3Q/KHRoaXMubWFwPW5ldyBNYXAsT2JqZWN0LmtleXMoZS5mcm9tT2JqZWN0KS5mb3JFYWNoKHQ9Pntjb25zdCByPWUuZnJvbU9i''@;'; put 'put ''amVjdFt0XSxpPUFycmF5LmlzQXJyYXkocik/ci5tYXAodHopOlt0eihyKV07dGhpcy5tYXAuc2V0KHQsaSl9KSk6dGhpcy5tYXA9bnVsbH1oYXMoZSl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmhhcyhlKX1nZXQoZSl7dGhpcy5pbml0KCk7Y29uc3QgdD10aGlzLm1hcC5nZXQoZSk7''@;'; put 'put ''cmV0dXJuIHQ/dFswXTpudWxsfWdldEFsbChlKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuZ2V0KGUpfHxudWxsfWtleXMoKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm1hcC5rZXlzKCkpfWFwcGVuZChlLHQpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTplLHZh''@;'; put 'put ''bHVlOnQsb3A6ImEifSl9YXBwZW5kQWxsKGUpe2NvbnN0IHQ9W107cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2gocj0+e2NvbnN0IGk9ZVtyXTtBcnJheS5pc0FycmF5KGkpP2kuZm9yRWFjaChvPT57dC5wdXNoKHtwYXJhbTpyLHZhbHVlOm8sb3A6ImEifSl9KTp0LnB1c2goe3BhcmFt''@;'; put 'put ''OnIsdmFsdWU6aSxvcDoiYSJ9KX0pLHRoaXMuY2xvbmUodCl9c2V0KGUsdCl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOmUsdmFsdWU6dCxvcDoicyJ9KX1kZWxldGUoZSx0KXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06ZSx2YWx1ZTp0LG9wOiJkIn0pfXRvU3RyaW5nKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuaW5pdCgpLHRoaXMua2V5cygpLm1hcChlPT57Y29uc3QgdD10aGlzLmVuY29kZXIuZW5jb2RlS2V5KGUpO3JldHVybiB0aGlzLm1hcC5nZXQoZSkubWFwKHI9PnQrIj0iK3RoaXMuZW5jb2Rlci5lbmNvZGVWYWx1ZShyKSkuam9pbigiJiIpfSkuZmlsdGVyKGU9PiIiIT09ZSkuam9pbigi''@;'; put 'put ''JiIpfWNsb25lKGUpe2NvbnN0IHQ9bmV3IGh2KHtlbmNvZGVyOnRoaXMuZW5jb2Rlcn0pO3JldHVybiB0LmNsb25lRnJvbT10aGlzLmNsb25lRnJvbXx8dGhpcyx0LnVwZGF0ZXM9KHRoaXMudXBkYXRlc3x8W10pLmNvbmNhdChlKSx0fWluaXQoKXtpZihudWxsPT09dGhpcy5tYXAmJih0aGlz''@;'; put 'put ''Lm1hcD1uZXcgTWFwKSxudWxsIT09dGhpcy5jbG9uZUZyb20pe3RoaXMuY2xvbmVGcm9tLmluaXQoKTtmb3IoY29uc3RbZSx0XW9mIHRoaXMuY2xvbmVGcm9tLm1hcC5lbnRyaWVzKCkpdGhpcy5tYXAuc2V0KGUsdCk7dGhpcy51cGRhdGVzLmZvckVhY2goZT0+e3N3aXRjaChlLm9wKXtjYXNl''@;'; put 'put ''ImEiOmNhc2UicyI6Y29uc3QgdD0iYSI9PT1lLm9wPyh0aGlzLm1hcC5nZXQoZS5wYXJhbSl8fFtdKS5zbGljZSgpOltdO3QucHVzaCh0eihlLnZhbHVlKSksdGhpcy5tYXAuc2V0KGUucGFyYW0sdCk7YnJlYWs7Y2FzZSJkIjppZih2b2lkIDA9PT1lLnZhbHVlKXt0aGlzLm1hcC5kZWxldGUo''@;'; put 'put ''ZS5wYXJhbSk7YnJlYWt9e2NvbnN0IHI9KHRoaXMubWFwLmdldChlLnBhcmFtKXx8W10pLnNsaWNlKCksaT1yLmluZGV4T2YodHooZS52YWx1ZSkpOy0xIT09aSYmci5zcGxpY2UoaSwxKSxyLmxlbmd0aD4wP3RoaXMubWFwLnNldChlLnBhcmFtLHIpOnRoaXMubWFwLmRlbGV0ZShlLnBhcmFt''@;'; put 'put ''KX19fSksdGhpcy5jbG9uZUZyb209dGhpcy51cGRhdGVzPW51bGx9fX1jbGFzcyBvaHR7bWFwPW5ldyBNYXA7c2V0KGUsdCl7cmV0dXJuIHRoaXMubWFwLnNldChlLHQpLHRoaXN9Z2V0KGUpe3JldHVybiB0aGlzLm1hcC5oYXMoZSl8fHRoaXMubWFwLnNldChlLGUuZGVmYXVsdFZhbHVlKCkp''@;'; put 'put ''LHRoaXMubWFwLmdldChlKX1kZWxldGUoZSl7cmV0dXJuIHRoaXMubWFwLmRlbGV0ZShlKSx0aGlzfWhhcyhlKXtyZXR1cm4gdGhpcy5tYXAuaGFzKGUpfWtleXMoKXtyZXR1cm4gdGhpcy5tYXAua2V5cygpfX1mdW5jdGlvbiB3d2Uobil7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSIm''@;'; put 'put ''Jm4gaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn1mdW5jdGlvbiBDd2Uobil7cmV0dXJuIHR5cGVvZiBCbG9iPCJ1IiYmbiBpbnN0YW5jZW9mIEJsb2J9ZnVuY3Rpb24gU3dlKG4pe3JldHVybiB0eXBlb2YgRm9ybURhdGE8InUiJiZuIGluc3RhbmNlb2YgRm9ybURhdGF9Y29uc3QgWkk9IkNvbnRl''@;'; put 'put ''bnQtVHlwZSIsZ2llPSJYLVJlcXVlc3QtVVJMIixFd2U9InRleHQvcGxhaW4iLE13ZT0iYXBwbGljYXRpb24vanNvbiIsVHdlPWAke013ZX0sICR7RXdlfSwgKi8qYDtjbGFzcyBHSXt1cmw7Ym9keT1udWxsO2hlYWRlcnM7Y29udGV4dDtyZXBvcnRQcm9ncmVzcz0hMTt3aXRoQ3JlZGVudGlh''@;'; put 'put ''bHM9ITE7Y3JlZGVudGlhbHM7a2VlcGFsaXZlPSExO2NhY2hlO3ByaW9yaXR5O21vZGU7cmVkaXJlY3Q7cmVmZXJyZXI7aW50ZWdyaXR5O3Jlc3BvbnNlVHlwZT0ianNvbiI7bWV0aG9kO3BhcmFtczt1cmxXaXRoUGFyYW1zO3RyYW5zZmVyQ2FjaGU7dGltZW91dDtjb25zdHJ1Y3RvcihlLHQs''@;'; put 'put ''cixpKXtsZXQgbztpZih0aGlzLnVybD10LHRoaXMubWV0aG9kPWUudG9VcHBlckNhc2UoKSxmdW5jdGlvbiBhaHQobil7c3dpdGNoKG4pe2Nhc2UiREVMRVRFIjpjYXNlIkdFVCI6Y2FzZSJIRUFEIjpjYXNlIk9QVElPTlMiOmNhc2UiSlNPTlAiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9''@;'; put 'put ''fSh0aGlzLm1ldGhvZCl8fGk/KHRoaXMuYm9keT12b2lkIDAhPT1yP3I6bnVsbCxvPWkpOm89cixvKXtpZih0aGlzLnJlcG9ydFByb2dyZXNzPSEhby5yZXBvcnRQcm9ncmVzcyx0aGlzLndpdGhDcmVkZW50aWFscz0hIW8ud2l0aENyZWRlbnRpYWxzLHRoaXMua2VlcGFsaXZlPSEhby5rZWVw''@;'; put 'put ''YWxpdmUsby5yZXNwb25zZVR5cGUmJih0aGlzLnJlc3BvbnNlVHlwZT1vLnJlc3BvbnNlVHlwZSksby5oZWFkZXJzJiYodGhpcy5oZWFkZXJzPW8uaGVhZGVycyksby5jb250ZXh0JiYodGhpcy5jb250ZXh0PW8uY29udGV4dCksby5wYXJhbXMmJih0aGlzLnBhcmFtcz1vLnBhcmFtcyksby5w''@;'; put 'put ''cmlvcml0eSYmKHRoaXMucHJpb3JpdHk9by5wcmlvcml0eSksby5jYWNoZSYmKHRoaXMuY2FjaGU9by5jYWNoZSksby5jcmVkZW50aWFscyYmKHRoaXMuY3JlZGVudGlhbHM9by5jcmVkZW50aWFscyksIm51bWJlciI9PXR5cGVvZiBvLnRpbWVvdXQpe2lmKG8udGltZW91dDwxfHwhTnVtYmVy''@;'; put 'put ''LmlzSW50ZWdlcihvLnRpbWVvdXQpKXRocm93IG5ldyBXbigyODIyLCIiKTt0aGlzLnRpbWVvdXQ9by50aW1lb3V0fW8ubW9kZSYmKHRoaXMubW9kZT1vLm1vZGUpLG8ucmVkaXJlY3QmJih0aGlzLnJlZGlyZWN0PW8ucmVkaXJlY3QpLG8uaW50ZWdyaXR5JiYodGhpcy5pbnRlZ3JpdHk9by5p''@;'; put 'put ''bnRlZ3JpdHkpLHZvaWQgMCE9PW8ucmVmZXJyZXImJih0aGlzLnJlZmVycmVyPW8ucmVmZXJyZXIpLHRoaXMudHJhbnNmZXJDYWNoZT1vLnRyYW5zZmVyQ2FjaGV9aWYodGhpcy5oZWFkZXJzPz89bmV3IHU0LHRoaXMuY29udGV4dD8/PW5ldyBvaHQsdGhpcy5wYXJhbXMpe2NvbnN0IGE9dGhp''@;'; put 'put ''cy5wYXJhbXMudG9TdHJpbmcoKTtpZigwPT09YS5sZW5ndGgpdGhpcy51cmxXaXRoUGFyYW1zPXQ7ZWxzZXtjb25zdCBsPXQuaW5kZXhPZigiPyIpO3RoaXMudXJsV2l0aFBhcmFtcz10KygtMT09PWw/Ij8iOmw8dC5sZW5ndGgtMT8iJiI6IiIpK2F9fWVsc2UgdGhpcy5wYXJhbXM9bmV3IGh2''@;'; put 'put ''LHRoaXMudXJsV2l0aFBhcmFtcz10fXNlcmlhbGl6ZUJvZHkoKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOiJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5fHx3d2UodGhpcy5ib2R5KXx8Q3dlKHRoaXMuYm9keSl8fFN3ZSh0aGlzLmJvZHkpfHxmdW5jdGlvbiBzaHQobil7cmV0dXJu''@;'; put 'put ''IHR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiJiZuIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zfSh0aGlzLmJvZHkpP3RoaXMuYm9keTp0aGlzLmJvZHkgaW5zdGFuY2VvZiBodj90aGlzLmJvZHkudG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10''@;'; put 'put ''eXBlb2YgdGhpcy5ib2R5fHxBcnJheS5pc0FycmF5KHRoaXMuYm9keSk/SlNPTi5zdHJpbmdpZnkodGhpcy5ib2R5KTp0aGlzLmJvZHkudG9TdHJpbmcoKX1kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpe3JldHVybiBudWxsPT09dGhpcy5ib2R5fHxTd2UodGhpcy5ib2R5KT9udWxsOkN3ZSh0''@;'; put 'put ''aGlzLmJvZHkpP3RoaXMuYm9keS50eXBlfHxudWxsOnd3ZSh0aGlzLmJvZHkpP251bGw6InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/RXdlOnRoaXMuYm9keSBpbnN0YW5jZW9mIGh2PyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCI6Im9iamVjdCI9''@;'; put 'put ''PXR5cGVvZiB0aGlzLmJvZHl8fCJudW1iZXIiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHk/TXdlOm51bGx9Y2xvbmUoZT17fSl7Y29uc3QgdD1lLm1ldGhvZHx8dGhpcy5tZXRob2Qscj1lLnVybHx8dGhpcy51cmwsaT1lLnJlc3BvbnNlVHlwZXx8dGhp''@;'; put 'put ''cy5yZXNwb25zZVR5cGUsbz1lLmtlZXBhbGl2ZT8/dGhpcy5rZWVwYWxpdmUsYT1lLnByaW9yaXR5fHx0aGlzLnByaW9yaXR5LGw9ZS5jYWNoZXx8dGhpcy5jYWNoZSx1PWUubW9kZXx8dGhpcy5tb2RlLGc9ZS5yZWRpcmVjdHx8dGhpcy5yZWRpcmVjdCxFPWUuY3JlZGVudGlhbHN8fHRoaXMu''@;'; put 'put ''Y3JlZGVudGlhbHMsTz1lLnJlZmVycmVyPz90aGlzLnJlZmVycmVyLFo9ZS5pbnRlZ3JpdHl8fHRoaXMuaW50ZWdyaXR5LGVlPWUudHJhbnNmZXJDYWNoZT8/dGhpcy50cmFuc2ZlckNhY2hlLHZlPWUudGltZW91dD8/dGhpcy50aW1lb3V0LE1lPXZvaWQgMCE9PWUuYm9keT9lLmJvZHk6dGhp''@;'; put 'put ''cy5ib2R5LEhlPWUud2l0aENyZWRlbnRpYWxzPz90aGlzLndpdGhDcmVkZW50aWFscyxXZT1lLnJlcG9ydFByb2dyZXNzPz90aGlzLnJlcG9ydFByb2dyZXNzO2xldCBhdD1lLmhlYWRlcnN8fHRoaXMuaGVhZGVycyxDdD1lLnBhcmFtc3x8dGhpcy5wYXJhbXM7Y29uc3QgQXQ9ZS5jb250ZXh0''@;'; put 'put ''Pz90aGlzLmNvbnRleHQ7cmV0dXJuIHZvaWQgMCE9PWUuc2V0SGVhZGVycyYmKGF0PU9iamVjdC5rZXlzKGUuc2V0SGVhZGVycykucmVkdWNlKChLdCxxdCk9Pkt0LnNldChxdCxlLnNldEhlYWRlcnNbcXRdKSxhdCkpLGUuc2V0UGFyYW1zJiYoQ3Q9T2JqZWN0LmtleXMoZS5zZXRQYXJhbXMp''@;'; put 'put ''LnJlZHVjZSgoS3QscXQpPT5LdC5zZXQocXQsZS5zZXRQYXJhbXNbcXRdKSxDdCkpLG5ldyBHSSh0LHIsTWUse3BhcmFtczpDdCxoZWFkZXJzOmF0LGNvbnRleHQ6QXQscmVwb3J0UHJvZ3Jlc3M6V2UscmVzcG9uc2VUeXBlOmksd2l0aENyZWRlbnRpYWxzOkhlLHRyYW5zZmVyQ2FjaGU6ZWUs''@;'; put 'put ''a2VlcGFsaXZlOm8sY2FjaGU6bCxwcmlvcml0eTphLHRpbWVvdXQ6dmUsbW9kZTp1LHJlZGlyZWN0OmcsY3JlZGVudGlhbHM6RSxyZWZlcnJlcjpPLGludGVncml0eTpafSl9fXZhciBmdj1mdW5jdGlvbihuKXtyZXR1cm4gbltuLlNlbnQ9MF09IlNlbnQiLG5bbi5VcGxvYWRQcm9ncmVzcz0x''@;'; put 'put ''XT0iVXBsb2FkUHJvZ3Jlc3MiLG5bbi5SZXNwb25zZUhlYWRlcj0yXT0iUmVzcG9uc2VIZWFkZXIiLG5bbi5Eb3dubG9hZFByb2dyZXNzPTNdPSJEb3dubG9hZFByb2dyZXNzIixuW24uUmVzcG9uc2U9NF09IlJlc3BvbnNlIixuW24uVXNlcj01XT0iVXNlciIsbn0oZnZ8fHt9KTtjbGFzcyBt''@;'; put 'put ''aWV7aGVhZGVycztzdGF0dXM7c3RhdHVzVGV4dDt1cmw7b2s7dHlwZTtyZWRpcmVjdGVkO2NvbnN0cnVjdG9yKGUsdD0yMDAscj0iT0siKXt0aGlzLmhlYWRlcnM9ZS5oZWFkZXJzfHxuZXcgdTQsdGhpcy5zdGF0dXM9dm9pZCAwIT09ZS5zdGF0dXM/ZS5zdGF0dXM6dCx0aGlzLnN0YXR1c1Rl''@;'; put 'put ''eHQ9ZS5zdGF0dXNUZXh0fHxyLHRoaXMudXJsPWUudXJsfHxudWxsLHRoaXMucmVkaXJlY3RlZD1lLnJlZGlyZWN0ZWQsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDB9fWNsYXNzIHJ6IGV4dGVuZHMgbWlle2NvbnN0cnVjdG9yKGU9e30pe3N1cGVyKGUpfXR5cGU9''@;'; put 'put ''ZnYuUmVzcG9uc2VIZWFkZXI7Y2xvbmUoZT17fSl7cmV0dXJuIG5ldyByeih7aGVhZGVyczplLmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09ZS5zdGF0dXM/ZS5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDplLnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1''@;'; put 'put ''cmw6ZS51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX19Y2xhc3MgJEkgZXh0ZW5kcyBtaWV7Ym9keTtjb25zdHJ1Y3RvcihlPXt9KXtzdXBlcihlKSx0aGlzLmJvZHk9dm9pZCAwIT09ZS5ib2R5P2UuYm9keTpudWxsfXR5cGU9ZnYuUmVzcG9uc2U7Y2xvbmUoZT17fSl7cmV0dXJuIG5ldyAkSSh7''@;'; put 'put ''Ym9keTp2b2lkIDAhPT1lLmJvZHk/ZS5ib2R5OnRoaXMuYm9keSxoZWFkZXJzOmUuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT1lLnN0YXR1cz9lLnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OmUuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDplLnVy''@;'; put 'put ''bHx8dGhpcy51cmx8fHZvaWQgMCxyZWRpcmVjdGVkOmUucmVkaXJlY3RlZD8/dGhpcy5yZWRpcmVjdGVkfSl9fWNsYXNzIE1iIGV4dGVuZHMgbWlle25hbWU9Ikh0dHBFcnJvclJlc3BvbnNlIjttZXNzYWdlO2Vycm9yO29rPSExO2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsMCwiVW5rbm93biBF''@;'; put 'put ''cnJvciIpLHRoaXMubWVzc2FnZT10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDA/YEh0dHAgZmFpbHVyZSBkdXJpbmcgcGFyc2luZyBmb3IgJHtlLnVybHx8Iih1bmtub3duIHVybCkifWA6YEh0dHAgZmFpbHVyZSByZXNwb25zZSBmb3IgJHtlLnVybHx8Iih1bmtub3duIHVybCki''@;'; put 'put ''fTogJHtlLnN0YXR1c30gJHtlLnN0YXR1c1RleHR9YCx0aGlzLmVycm9yPWUuZXJyb3J8fG51bGx9fWZ1bmN0aW9uIHZpZShuLGUpe3JldHVybntib2R5OmUsaGVhZGVyczpuLmhlYWRlcnMsY29udGV4dDpuLmNvbnRleHQsb2JzZXJ2ZTpuLm9ic2VydmUscGFyYW1zOm4ucGFyYW1zLHJlcG9y''@;'; put 'put ''dFByb2dyZXNzOm4ucmVwb3J0UHJvZ3Jlc3MscmVzcG9uc2VUeXBlOm4ucmVzcG9uc2VUeXBlLHdpdGhDcmVkZW50aWFsczpuLndpdGhDcmVkZW50aWFscyxjcmVkZW50aWFsczpuLmNyZWRlbnRpYWxzLHRyYW5zZmVyQ2FjaGU6bi50cmFuc2ZlckNhY2hlLHRpbWVvdXQ6bi50aW1lb3V0LGtl''@;'; put 'put ''ZXBhbGl2ZTpuLmtlZXBhbGl2ZSxwcmlvcml0eTpuLnByaW9yaXR5LGNhY2hlOm4uY2FjaGUsbW9kZTpuLm1vZGUscmVkaXJlY3Q6bi5yZWRpcmVjdCxpbnRlZ3JpdHk6bi5pbnRlZ3JpdHkscmVmZXJyZXI6bi5yZWZlcnJlcn19bGV0IF9pZT0oKCk9PntjbGFzcyBue2hhbmRsZXI7Y29uc3Ry''@;'; put 'put ''dWN0b3IodCl7dGhpcy5oYW5kbGVyPXR9cmVxdWVzdCh0LHIsaT17fSl7bGV0IG87aWYodCBpbnN0YW5jZW9mIEdJKW89dDtlbHNle2xldCB1LGc7dT1pLmhlYWRlcnMgaW5zdGFuY2VvZiB1ND9pLmhlYWRlcnM6bmV3IHU0KGkuaGVhZGVycyksaS5wYXJhbXMmJihnPWkucGFyYW1zIGluc3Rh''@;'; put 'put ''bmNlb2YgaHY/aS5wYXJhbXM6bmV3IGh2KHtmcm9tT2JqZWN0OmkucGFyYW1zfSkpLG89bmV3IEdJKHQscix2b2lkIDAhPT1pLmJvZHk/aS5ib2R5Om51bGwse2hlYWRlcnM6dSxjb250ZXh0OmkuY29udGV4dCxwYXJhbXM6ZyxyZXBvcnRQcm9ncmVzczppLnJlcG9ydFByb2dyZXNzLHJlc3Bv''@;'; put 'put ''bnNlVHlwZTppLnJlc3BvbnNlVHlwZXx8Impzb24iLHdpdGhDcmVkZW50aWFsczppLndpdGhDcmVkZW50aWFscyx0cmFuc2ZlckNhY2hlOmkudHJhbnNmZXJDYWNoZSxrZWVwYWxpdmU6aS5rZWVwYWxpdmUscHJpb3JpdHk6aS5wcmlvcml0eSxjYWNoZTppLmNhY2hlLG1vZGU6aS5tb2RlLHJl''@;'; put 'put ''ZGlyZWN0OmkucmVkaXJlY3QsY3JlZGVudGlhbHM6aS5jcmVkZW50aWFscyxyZWZlcnJlcjppLnJlZmVycmVyLGludGVncml0eTppLmludGVncml0eSx0aW1lb3V0OmkudGltZW91dH0pfWNvbnN0IGE9UGEobykucGlwZShORSh1PT50aGlzLmhhbmRsZXIuaGFuZGxlKHUpKSk7aWYodCBpbnN0''@;'; put 'put ''YW5jZW9mIEdJfHwiZXZlbnRzIj09PWkub2JzZXJ2ZSlyZXR1cm4gYTtjb25zdCBsPWEucGlwZShzdSh1PT51IGluc3RhbmNlb2YgJEkpKTtzd2l0Y2goaS5vYnNlcnZlfHwiYm9keSIpe2Nhc2UiYm9keSI6c3dpdGNoKG8ucmVzcG9uc2VUeXBlKXtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4g''@;'; put 'put ''bC5waXBlKEVzKHU9PntpZihudWxsIT09dS5ib2R5JiYhKHUuYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSl0aHJvdyBuZXcgV24oMjgwNiwhMSk7cmV0dXJuIHUuYm9keX0pKTtjYXNlImJsb2IiOnJldHVybiBsLnBpcGUoRXModT0+e2lmKG51bGwhPT11LmJvZHkmJiEodS5ib2R5IGlu''@;'; put 'put ''c3RhbmNlb2YgQmxvYikpdGhyb3cgbmV3IFduKDI4MDcsITEpO3JldHVybiB1LmJvZHl9KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gbC5waXBlKEVzKHU9PntpZihudWxsIT09dS5ib2R5JiYic3RyaW5nIiE9dHlwZW9mIHUuYm9keSl0aHJvdyBuZXcgV24oMjgwOCwhMSk7cmV0dXJuIHUuYm9keX0p''@;'; put 'put ''KTtkZWZhdWx0OnJldHVybiBsLnBpcGUoRXModT0+dS5ib2R5KSl9Y2FzZSJyZXNwb25zZSI6cmV0dXJuIGw7ZGVmYXVsdDp0aHJvdyBuZXcgV24oMjgwOSwhMSl9fWRlbGV0ZSh0LHI9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIkRFTEVURSIsdCxyKX1nZXQodCxyPXt9KXtyZXR1cm4gdGhp''@;'; put 'put ''cy5yZXF1ZXN0KCJHRVQiLHQscil9aGVhZCh0LHI9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIkhFQUQiLHQscil9anNvbnAodCxyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJKU09OUCIsdCx7cGFyYW1zOihuZXcgaHYpLmFwcGVuZChyLCJKU09OUF9DQUxMQkFDSyIpLG9ic2VydmU6ImJvZHki''@;'; put 'put ''LHJlc3BvbnNlVHlwZToianNvbiJ9KX1vcHRpb25zKHQscj17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiT1BUSU9OUyIsdCxyKX1wYXRjaCh0LHIsaT17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiUEFUQ0giLHQsdmllKGkscikpfXBvc3QodCxyLGk9e30pe3JldHVybiB0aGlzLnJlcXVlc3Qo''@;'; put 'put ''IlBPU1QiLHQsdmllKGkscikpfXB1dCh0LHIsaT17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiUFVUIix0LHZpZShpLHIpKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikob3IoWUkpKX07c3RhdGljIFx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpu''@;'; put 'put ''Llx1MDI3NWZhY30pfXJldHVybiBufSkoKTtjb25zdCBrd2U9bmV3IEVyKCIiKTtmdW5jdGlvbiBSd2UobixlKXtyZXR1cm4gZShuKX1mdW5jdGlvbiBmaHQobixlKXtyZXR1cm4odCxyKT0+ZS5pbnRlcmNlcHQodCx7aGFuZGxlOmk9Pm4oaSxyKX0pfWNvbnN0IGdodD1uZXcgRXIoIiIpLHFJ''@;'; put 'put ''PW5ldyBFcigiIiksbWh0PW5ldyBFcigiIiksSXdlPW5ldyBFcigiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITB9KTtmdW5jdGlvbiB2aHQoKXtsZXQgbj1udWxsO3JldHVybihlLHQpPT57bnVsbD09PW4mJihuPShzbihnaHQse29wdGlvbmFsOiEwfSk/P1tdKS5yZWR1Y2VS''@;'; put 'put ''aWdodChmaHQsUndlKSk7Y29uc3Qgcj1zbihhUyk7aWYoc24oSXdlKSl7Y29uc3Qgbz1yLmFkZCgpO3JldHVybiBuKGUsdCkucGlwZShSSShvKSl9cmV0dXJuIG4oZSx0KX19bGV0IER3ZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWUl7YmFja2VuZDtpbmplY3RvcjtjaGFpbj1udWxsO3BlbmRp''@;'; put 'put ''bmdUYXNrcz1zbihhUyk7Y29udHJpYnV0ZVRvU3RhYmlsaXR5PXNuKEl3ZSk7Y29uc3RydWN0b3IodCxyKXtzdXBlcigpLHRoaXMuYmFja2VuZD10LHRoaXMuaW5qZWN0b3I9cn1oYW5kbGUodCl7aWYobnVsbD09PXRoaXMuY2hhaW4pe2NvbnN0IHI9dGhpcy5pbmplY3Rvci5nZXQoWUksbnVs''@;'; put 'put ''bCx7c2tpcFNlbGY6ITB9KSxvPXRoaXMuaW5qZWN0b3IuZ2V0KG1odCxbXSxudWxsIT09ciYmdGhpcy5iYWNrZW5kPT09cj97c2VsZjohMH06dm9pZCAwKSxhPUFycmF5LmZyb20obmV3IFNldChbLi4udGhpcy5pbmplY3Rvci5nZXQocUkpLC4uLm9dKSk7dGhpcy5jaGFpbj1hLnJlZHVjZVJp''@;'; put 'put ''Z2h0KChsLHUpPT5mdW5jdGlvbiBwaHQobixlLHQpe3JldHVybihyLGkpPT5MdSh0LCgpPT5lKHIsbz0+bihvLGkpKSl9KGwsdSx0aGlzLmluamVjdG9yKSxSd2UpfWlmKHRoaXMuY29udHJpYnV0ZVRvU3RhYmlsaXR5KXtjb25zdCByPXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpO3JldHVybiB0''@;'; put 'put ''aGlzLmNoYWluKHQsaT0+dGhpcy5iYWNrZW5kLmhhbmRsZShpKSkucGlwZShSSShyKSl9cmV0dXJuIHRoaXMuY2hhaW4odCxyPT50aGlzLmJhY2tlbmQuaGFuZGxlKHIpKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikob3IoZXopLG9yKG5sKSl9O3N0YXRp''@;'; put 'put ''YyBcdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KX1yZXR1cm4gbn0pKCk7Y29uc3Qgd2h0PS9eXClcXVx9Jyw/XG4vLENodD1SZWdFeHAoYF4ke2dpZX06YCwibSIpO2xldCBPd2U9KCgpPT57Y2xhc3Mgbnt4aHJGYWN0b3J5O2NvbnN0cnVjdG9yKHQpe3RoaXMu''@;'; put 'put ''eGhyRmFjdG9yeT10fWhhbmRsZSh0KXtpZigiSlNPTlAiPT09dC5tZXRob2QpdGhyb3cgbmV3IFduKC0yODAwLCExKTtjb25zdCByPXRoaXMueGhyRmFjdG9yeTtyZXR1cm4gUGEobnVsbCkucGlwZShtMCgoKT0+bmV3IGhvKG89Pntjb25zdCBhPXIuYnVpbGQoKTtpZihhLm9wZW4odC5tZXRo''@;'; put 'put ''b2QsdC51cmxXaXRoUGFyYW1zKSx0LndpdGhDcmVkZW50aWFscyYmKGEud2l0aENyZWRlbnRpYWxzPSEwKSx0LmhlYWRlcnMuZm9yRWFjaCgoSGUsV2UpPT5hLnNldFJlcXVlc3RIZWFkZXIoSGUsV2Uuam9pbigiLCIpKSksdC5oZWFkZXJzLmhhcygiQWNjZXB0Iil8fGEuc2V0UmVxdWVzdEhl''@;'; put 'put ''YWRlcigiQWNjZXB0IixUd2UpLCF0LmhlYWRlcnMuaGFzKFpJKSl7Y29uc3QgSGU9dC5kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpO251bGwhPT1IZSYmYS5zZXRSZXF1ZXN0SGVhZGVyKFpJLEhlKX1pZih0LnRpbWVvdXQmJihhLnRpbWVvdXQ9dC50aW1lb3V0KSx0LnJlc3BvbnNlVHlwZSl7''@;'; put 'put ''Y29uc3QgSGU9dC5yZXNwb25zZVR5cGUudG9Mb3dlckNhc2UoKTthLnJlc3BvbnNlVHlwZT0ianNvbiIhPT1IZT9IZToidGV4dCJ9Y29uc3QgbD10LnNlcmlhbGl6ZUJvZHkoKTtsZXQgdT1udWxsO2NvbnN0IGc9KCk9PntpZihudWxsIT09dSlyZXR1cm4gdTtjb25zdCBIZT1hLnN0YXR1c1Rl''@;'; put 'put ''eHR8fCJPSyIsV2U9bmV3IHU0KGEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLGF0PWZ1bmN0aW9uIFNodChuKXtyZXR1cm4icmVzcG9uc2VVUkwiaW4gbiYmbi5yZXNwb25zZVVSTD9uLnJlc3BvbnNlVVJMOkNodC50ZXN0KG4uZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpP24uZ2V0UmVzcG9u''@;'; put 'put ''c2VIZWFkZXIoZ2llKTpudWxsfShhKXx8dC51cmw7cmV0dXJuIHU9bmV3IHJ6KHtoZWFkZXJzOldlLHN0YXR1czphLnN0YXR1cyxzdGF0dXNUZXh0OkhlLHVybDphdH0pLHV9LEU9KCk9PntsZXR7aGVhZGVyczpIZSxzdGF0dXM6V2Usc3RhdHVzVGV4dDphdCx1cmw6Q3R9PWcoKSxBdD1udWxs''@;'; put 'put ''OzIwNCE9PVdlJiYoQXQ9dHlwZW9mIGEucmVzcG9uc2U+InUiP2EucmVzcG9uc2VUZXh0OmEucmVzcG9uc2UpLDA9PT1XZSYmKFdlPUF0PzIwMDowKTtsZXQgS3Q9V2U+PTIwMCYmV2U8MzAwO2lmKCJqc29uIj09PXQucmVzcG9uc2VUeXBlJiYic3RyaW5nIj09dHlwZW9mIEF0KXtjb25zdCBx''@;'; put 'put ''dD1BdDtBdD1BdC5yZXBsYWNlKHdodCwiIik7dHJ5e0F0PSIiIT09QXQ/SlNPTi5wYXJzZShBdCk6bnVsbH1jYXRjaChnbil7QXQ9cXQsS3QmJihLdD0hMSxBdD17ZXJyb3I6Z24sdGV4dDpBdH0pfX1LdD8oby5uZXh0KG5ldyAkSSh7Ym9keTpBdCxoZWFkZXJzOkhlLHN0YXR1czpXZSxzdGF0''@;'; put 'put ''dXNUZXh0OmF0LHVybDpDdHx8dm9pZCAwfSkpLG8uY29tcGxldGUoKSk6by5lcnJvcihuZXcgTWIoe2Vycm9yOkF0LGhlYWRlcnM6SGUsc3RhdHVzOldlLHN0YXR1c1RleHQ6YXQsdXJsOkN0fHx2b2lkIDB9KSl9LE89SGU9Pntjb25zdHt1cmw6V2V9PWcoKSxhdD1uZXcgTWIoe2Vycm9yOkhl''@;'; put 'put ''LHN0YXR1czphLnN0YXR1c3x8MCxzdGF0dXNUZXh0OmEuc3RhdHVzVGV4dHx8IlVua25vd24gRXJyb3IiLHVybDpXZXx8dm9pZCAwfSk7by5lcnJvcihhdCl9O2xldCBaPU87dC50aW1lb3V0JiYoWj1IZT0+e2NvbnN0e3VybDpXZX09ZygpLGF0PW5ldyBNYih7ZXJyb3I6bmV3IERPTUV4Y2Vw''@;'; put 'put ''dGlvbigiUmVxdWVzdCB0aW1lZCBvdXQiLCJUaW1lb3V0RXJyb3IiKSxzdGF0dXM6YS5zdGF0dXN8fDAsc3RhdHVzVGV4dDphLnN0YXR1c1RleHR8fCJSZXF1ZXN0IHRpbWVvdXQiLHVybDpXZXx8dm9pZCAwfSk7by5lcnJvcihhdCl9KTtsZXQgZWU9ITE7Y29uc3QgdmU9SGU9PntlZXx8KG8u''@;'; put 'put ''bmV4dChnKCkpLGVlPSEwKTtsZXQgV2U9e3R5cGU6ZnYuRG93bmxvYWRQcm9ncmVzcyxsb2FkZWQ6SGUubG9hZGVkfTtIZS5sZW5ndGhDb21wdXRhYmxlJiYoV2UudG90YWw9SGUudG90YWwpLCJ0ZXh0Ij09PXQucmVzcG9uc2VUeXBlJiZhLnJlc3BvbnNlVGV4dCYmKFdlLnBhcnRpYWxUZXh0''@;'; put 'put ''PWEucmVzcG9uc2VUZXh0KSxvLm5leHQoV2UpfSxNZT1IZT0+e2xldCBXZT17dHlwZTpmdi5VcGxvYWRQcm9ncmVzcyxsb2FkZWQ6SGUubG9hZGVkfTtIZS5sZW5ndGhDb21wdXRhYmxlJiYoV2UudG90YWw9SGUudG90YWwpLG8ubmV4dChXZSl9O3JldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIo''@;'; put 'put ''ImxvYWQiLEUpLGEuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLE8pLGEuYWRkRXZlbnRMaXN0ZW5lcigidGltZW91dCIsWiksYS5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsTyksdC5yZXBvcnRQcm9ncmVzcyYmKGEuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHZlKSxudWxsIT09bCYm''@;'; put 'put ''YS51cGxvYWQmJmEudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixNZSkpLGEuc2VuZChsKSxvLm5leHQoe3R5cGU6ZnYuU2VudH0pLCgpPT57YS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsTyksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsTyksYS5yZW1vdmVF''@;'; put 'put ''dmVudExpc3RlbmVyKCJsb2FkIixFKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLFopLHQucmVwb3J0UHJvZ3Jlc3MmJihhLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix2ZSksbnVsbCE9PWwmJmEudXBsb2FkJiZhLnVwbG9hZC5yZW1vdmVFdmVudExpc3RlbmVyKCJw''@;'; put 'put ''cm9ncmVzcyIsTWUpKSxhLnJlYWR5U3RhdGUhPT1hLkRPTkUmJmEuYWJvcnQoKX19KSkpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShvcihsSCkpfTtzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSl9cmV0dXJu''@;'; put 'put ''IG59KSgpO2NvbnN0IHdpZT1uZXcgRXIoIiIpLE53ZT1uZXcgRXIoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PiJYU1JGLVRPS0VOIn0pLEZ3ZT1uZXcgRXIoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PiJYLVhTUkYtVE9LRU4ifSk7Y2xhc3MgUHdle31sZXQg''@;'; put 'put ''VGh0PSgoKT0+e2NsYXNzIG57ZG9jO2Nvb2tpZU5hbWU7bGFzdENvb2tpZVN0cmluZz0iIjtsYXN0VG9rZW49bnVsbDtwYXJzZUNvdW50PTA7Y29uc3RydWN0b3IodCxyKXt0aGlzLmRvYz10LHRoaXMuY29va2llTmFtZT1yfWdldFRva2VuKCl7Y29uc3QgdD10aGlzLmRvYy5jb29raWV8fCIi''@;'; put 'put ''O3JldHVybiB0IT09dGhpcy5sYXN0Q29va2llU3RyaW5nJiYodGhpcy5wYXJzZUNvdW50KyssdGhpcy5sYXN0VG9rZW49bXkodCx0aGlzLmNvb2tpZU5hbWUpLHRoaXMubGFzdENvb2tpZVN0cmluZz10KSx0aGlzLmxhc3RUb2tlbn1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVy''@;'; put 'put ''biBuZXcocnx8bikob3IoVGwpLG9yKE53ZSkpfTtzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSl9cmV0dXJuIG59KSgpO2NvbnN0IHhodD0vXig/Omh0dHBzPzopP1wvXC8vaTtmdW5jdGlvbiBBaHQobixlKXtpZighc24od2llKXx8IkdFVCI9PT1u''@;'; put 'put ''Lm1ldGhvZHx8IkhFQUQiPT09bi5tZXRob2R8fHhodC50ZXN0KG4udXJsKSlyZXR1cm4gZShuKTtjb25zdCB0PXNuKFB3ZSkuZ2V0VG9rZW4oKSxyPXNuKEZ3ZSk7cmV0dXJuIG51bGwhPXQmJiFuLmhlYWRlcnMuaGFzKHIpJiYobj1uLmNsb25lKHtoZWFkZXJzOm4uaGVhZGVycy5zZXQocix0''@;'; put 'put ''KX0pKSxlKG4pfXZhciBwdj1mdW5jdGlvbihuKXtyZXR1cm4gbltuLkludGVyY2VwdG9ycz0wXT0iSW50ZXJjZXB0b3JzIixuW24uTGVnYWN5SW50ZXJjZXB0b3JzPTFdPSJMZWdhY3lJbnRlcmNlcHRvcnMiLG5bbi5DdXN0b21Yc3JmQ29uZmlndXJhdGlvbj0yXT0iQ3VzdG9tWHNyZkNvbmZp''@;'; put 'put ''Z3VyYXRpb24iLG5bbi5Ob1hzcmZQcm90ZWN0aW9uPTNdPSJOb1hzcmZQcm90ZWN0aW9uIixuW24uSnNvbnBTdXBwb3J0PTRdPSJKc29ucFN1cHBvcnQiLG5bbi5SZXF1ZXN0c01hZGVWaWFQYXJlbnQ9NV09IlJlcXVlc3RzTWFkZVZpYVBhcmVudCIsbltuLkZldGNoPTZdPSJGZXRjaCIsbn0o''@;'; put 'put ''cHZ8fHt9KTtmdW5jdGlvbiBUYihuLGUpe3JldHVybntcdTAyNzVraW5kOm4sXHUwMjc1cHJvdmlkZXJzOmV9fWZ1bmN0aW9uIGtodCguLi5uKXtjb25zdCBlPVtfaWUsT3dlLER3ZSx7cHJvdmlkZTpZSSx1c2VFeGlzdGluZzpEd2V9LHtwcm92aWRlOmV6LHVzZUZhY3Rvcnk6KCk9PnNuKGt3''@;'; put 'put ''ZSx7b3B0aW9uYWw6ITB9KT8/c24oT3dlKX0se3Byb3ZpZGU6cUksdXNlVmFsdWU6QWh0LG11bHRpOiEwfSx7cHJvdmlkZTp3aWUsdXNlVmFsdWU6ITB9LHtwcm92aWRlOlB3ZSx1c2VDbGFzczpUaHR9XTtmb3IoY29uc3QgdCBvZiBuKWUucHVzaCguLi50Llx1MDI3NXByb3ZpZGVycyk7cmV0''@;'; put 'put ''dXJuIG5kKGUpfWNvbnN0IEh3ZT1uZXcgRXIoIiIpO2xldCBWd2U9KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3RvcihyLGkpe3RoaXMuaHR0cD1yLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPWksdGhpcy51cmw9IiIsdGhpcy5kcml2ZVVybD0iIix0aGlzLmh0dHBPcHRpb25zPXt3aXRoQ3Jl''@;'; put 'put ''ZGVudGlhbHM6ITB9fXNldHVwKCl7Y29uc3Qgcj10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpO3RoaXMudXJsPWAke3I/LnNlcnZlclVybHx8IiJ9L1NBU2pzQXBpYCx0aGlzLmRyaXZlVXJsPWAke3RoaXMudXJsfS9kcml2ZWB9Z2V0U2VydmVySW5mbygpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMudXJsfS9pbmZvYCl9Z2V0RmlsZUZyb21Ecml2ZShyKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9maWxlLz9fZmlsZVBhdGg9JHtyfWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0Rm9sZGVyQ29udGVudHNGcm9tRHJpdmUo''@;'; put 'put ''cil7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5kcml2ZVVybH0vZm9sZGVyP19mb2xkZXJQYXRoPSR7cn1gLHRoaXMuaHR0cE9wdGlvbnMpfWdldEZpbGVUcmVlRnJvbURyaXZlKCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5kcml2ZVVybH0vZmlsZXRyZWVgLHRoaXMuaHR0''@;'; put 'put ''cE9wdGlvbnMpfWdldEZpbGVGcm9tRmlsZVRyZWUocil7cmV0dXJuIG5ldyBQcm9taXNlKChpLG8pPT57dGhpcy5nZXRGaWxlVHJlZUZyb21Ecml2ZSgpLnN1YnNjcmliZShhPT57Y29uc3QgdT10aGlzLmZpbmRJblRyZWUoYS50cmVlLHIpO2kodSl9KX0pfWZpbmRJblRyZWUocixpKXtpZihy''@;'; put 'put ''LnJlbGF0aXZlUGF0aD09PWkpcmV0dXJuIHI7Zm9yKGxldCBvIG9mIHIuY2hpbGRyZW4pe2NvbnN0IGE9dGhpcy5maW5kSW5UcmVlKG8saSk7aWYoYSlyZXR1cm4gYX19c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSkob3IoX2llKSxv''@;'; put 'put ''cihFYikpfSx0aGlzLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOmUsZmFjdG9yeTplLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pKX1yZXR1cm4gbigpLGV9KSgpLENpZT0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKHIsaSl7dGhpcy5odHRwPXIsdGhpcy5hcHBTdG9yZVNlcnZp''@;'; put 'put ''Y2U9aSx0aGlzLnZpeWFBcGlzPXtBbmFseXRpY3NfSW5zaWdodHM6e2luc2lnaHRzOiIvaW5zaWdodHMifSxWaXN1YWxpc2F0aW9uOntyZXBvcnRzOiIvcmVwb3J0cyIscmVwb3J0SW1hZ2VzOiIvcmVwb3J0SW1hZ2VzIixyZXBvcnRUcmFuc2Zvcm1zOiIvcmVwb3J0VHJhbnNmb3JtcyIsdmlz''@;'; put 'put ''dWFsQW5hbHl0aWNzOiIvdmlzdWFsQW5hbHl0aWNzIn0sQ29tcHV0ZTp7am9iczoiL2pvYkRlZmluaXRpb25zIixqb2JFeGVjdXRpb246Ii9qb2JFeGVjdXRpb24iLGNvbnRleHRzOiIvY29tcHV0ZS9jb250ZXh0cyJ9LERlY2lzaW9uX01hbmFnZW1lbnQ6e21vZGVsTWFuYWdlbWVudDoiL21v''@;'; put 'put ''ZGVsTWFuYWdlbWVudCIsbW9kZWxSZXBvc2l0b3J5OiIvbW9kZWxSZXBvc2l0b3J5Iixtb2RlbFB1Ymxpc2g6Ii9tb2RlbFB1Ymxpc2giLG1pY3JvYW5hbHl0aWNTY29yZToiL21pY3JvYW5hbHl0aWNTY29yZSIsZGF0YU1pbmluZzoiL2RhdGFNaW5pbmciLGJ1c2luZXNzUnVsZXM6Ii9idXNp''@;'; put 'put ''bmVzc1J1bGVzIixyZWZlcmVuY2VEYXRhOiIvcmVmZXJlbmNlRGF0YSIsdHJlYXRtZW50RGVmaW5pdGlvbnM6Ii90cmVhdG1lbnREZWZpbml0aW9ucyIsc3ViamVjdENvbnRhY3RzOiIvc3ViamVjdENvbnRhY3RzIixkZWNpc2lvbnNSdW50aW1lQnVpbGRlcjoiL2RlY2lzaW9uc1J1bnRpbWVC''@;'; put 'put ''dWlsZGVyIn0sQ29yZV9TZXJ2aWNlczp7Zm9sZGVyczoiL2ZvbGRlcnMiLGZpbGVzOiIvZmlsZXMiLGFubm90YXRpb25zOiIvYW5ub3RhdGlvbnMiLGF1dGhvcml6YXRpb246Ii9hdXRob3JpemF0aW9uIixyZWxhdGlvbnNoaXBzOiIvcmVsYXRpb25zaGlwcyIsU0FTTG9nb246Ii9TQVNMb2dv''@;'; put 'put ''biJ9LEF1dG9tYXRlZF9NYWNoaW5lX0xlYXJuaW5nOnttbFBpcGVsaW5lQXV0b21hdGlvbjoiL21sUGlwZWxpbmVBdXRvbWF0aW9uIn0sT3RoZXI6e2lkZW50aXRpZXM6Ii9pZGVudGl0aWVzIn19LHRoaXMuc2VydmVyVXJsPSIifXNldHVwKCl7Y29uc3Qgcj10aGlzLmFwcFN0b3JlU2Vydmlj''@;'; put 'put ''ZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpO3RoaXMuc2VydmVyVXJsPXI/LnNlcnZlclVybHx8IiJ9Z2V0QWxsQ29sbGVjdGlvbnMoKXtyZXR1cm4gdGhpcy52aXlhQXBpc31nZXRCeVVybChyKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtyfWAse3dpdGhDcmVkZW50aWFs''@;'; put 'put ''czohMH0pfWdldEJ5Q29sbGVjdGlvbihyKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtyfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cz9saW1p''@;'; put 'put ''dD0xMDAwYCx7d2l0aENyZWRlbnRpYWxzOiEwfSl9Z2V0Q29tcHV0ZUNvbnRleHRCeUlkKHIpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cy8ke3J9YCx7d2l0aENyZWRlbnRpYWxzOiEwfSl9Z2V0Rm9sZGVyQnlQYXRoKHIpe3JldHVybiB0aGlz''@;'; put 'put ''LmdldChgJHt0aGlzLnNlcnZlclVybH0vZm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9JHtyfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldEZvbGRlck1lbWJlcnMocixpPTUwMCl7cmV0dXJuIHRoaXMuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9mb2xkZXJzL2ZvbGRlcnMvJHtyfS9tZW1i''@;'; put 'put ''ZXJzP2xpbWl0PSR7aX1gLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXRBZG1pbkdyb3VwcyhyPTVlMyl7cmV0dXJuIHRoaXMuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9pZGVudGl0aWVzL2dyb3Vwcz9zb3J0Qnk9bmFtZSZsaW1pdD0ke3J9YCx7d2l0aENyZWRlbnRpYWxzOiEwfSl9Z2V0Q3Vy''@;'; put 'put ''cmVudFVzZXJHcm91cE1lbWJlcnNoaXBzKHI9MWU0KXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2lkZW50aXRpZXMvdXNlcnMvQGN1cnJlbnRVc2VyL21lbWJlcnNoaXBzP2xpbWl0PSR7cn1gLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXRDdXJyZW50VXNlcigpe3JldHVy''@;'; put 'put ''biB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vaWRlbnRpdGllcy91c2Vycy9AY3VycmVudFVzZXJgLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXQocixpKXtyZXR1cm4gdGhpcy5odHRwLmdldChyLGkpLnBpcGUoeWIobz0+KGNvbnNvbGUubG9nKCJ1cmwiLHIpLGNvbnNvbGUubG9nKCJl''@;'; put 'put ''cnIuc3RhdHVzIixvLnN0YXR1cyksNDQ5PT09by5zdGF0dXN8fDQwMT09PW8uc3RhdHVzP3RoaXMuaHR0cC5nZXQocixpKTprSSgoKT0+bykpKSl9c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSkob3IoX2llKSxvcihFYikpfSx0aGlz''@;'; put 'put ''Llx1MDI3NXByb3Y9Sm4oe3Rva2VuOmUsZmFjdG9yeTplLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pKX1yZXR1cm4gbigpLGV9KSgpLFNpZT0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKCl7dGhpcy5zdGVwcz1be2xhYmVsOiJDaGVja2luZyBhcHAgbG9jYXRpb24iLHN0''@;'; put 'put ''YXR1czoicGVuZGluZyJ9LHtsYWJlbDoiQ2hlY2tpbmcgVml5YSBkZXBsb3kiLHN0YXR1czoicGVuZGluZyJ9LHtsYWJlbDoiTG9hZGluZyBzdGFydHVwIHNlcnZpY2UiLHN0YXR1czoicGVuZGluZyJ9XSx0aGlzLnN0ZXBzJD1uZXcgJGkoWy4uLnRoaXMuc3RlcHNdKX11cGRhdGVTdGVwKHIs''@;'; put 'put ''aSxvKXtyPj0wJiZyPHRoaXMuc3RlcHMubGVuZ3RoJiYodGhpcy5zdGVwc1tyXT17Li4udGhpcy5zdGVwc1tyXSxzdGF0dXM6aSxkZXRhaWw6bz8/dGhpcy5zdGVwc1tyXS5kZXRhaWx9LHRoaXMuc3RlcHMkLm5leHQoWy4uLnRoaXMuc3RlcHNdKSl9c2V0U3RlcHMocil7dGhpcy5zdGVwcz1y''@;'; put 'put ''LHRoaXMuc3RlcHMkLm5leHQoWy4uLnRoaXMuc3RlcHNdKX1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKX0sdGhpcy5cdTAyNzVwcm92PUpuKHt0b2tlbjplLGZhY3Rvcnk6ZS5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSl9''@;'; put 'put ''cmV0dXJuIG4oKSxlfSkoKTtjb25zdCBCd2U9WyJzZXJ2aWNlcy9wdWJsaWMvc3RhcnR1cHNlcnZpY2UiLCJzZXJ2aWNlcy9lZGl0b3JzL2dldGRhdGEiLCJzZXJ2aWNlcy9lZGl0b3JzL2dldGR5bmFtaWNjb2x2YWxzIiwic2VydmljZXMvZWRpdG9ycy9zdGFnZWRhdGEiLCJzZXJ2aWNlcy9l''@;'; put 'put ''ZGl0b3JzL2xvYWRmaWxlIiwic2VydmljZXMvZWRpdG9ycy9yZXN0b3JlIiwic2VydmljZXMvYXVkaXRvcnMvcG9zdGRhdGEiXTtsZXQgaWM9KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3RvcihyLGksbyxhLGwsdSxnLEUpe3RoaXMuYXBwU3RvcmVTZXJ2aWNlPXIsdGhpcy51c2VyU2Vy''@;'; put 'put ''dmljZT1pLHRoaXMuZXZlbnRTZXJ2aWNlPW8sdGhpcy5zYXNqc1NlcnZpY2U9YSx0aGlzLnNhc1ZpeWFTZXJ2aWNlPWwsdGhpcy5sb2dnZXJTZXJ2aWNlPXUsdGhpcy5zdGFydHVwQ2hlY2tTZXJ2aWNlPWcsdGhpcy5yb3V0ZXI9RSx0aGlzLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXI9bmV3''@;'; put 'put ''IEtyLHRoaXMuaW5jb3JyZWN0U2l0ZUlkRW1pdHRlcj1uZXcgS3IsdGhpcy5yZXF1ZXN0U2l0ZUlkRW1pdHRlcj1uZXcgS3IsdGhpcy5zYXNqc0FkYXB0ZXI9bmV3KF93ZSgpKSx0aGlzLmFwcExvY0NoZWNrUGVuZGluZz0hMSx0aGlzLnNob3VsZExvZ2luPW5ldyAkaSghMSksdGhpcy5saWNl''@;'; put 'put ''bnNlX3NpdGVfaWQ9bmV3ICRpKG51bGwpfXNhc1NlcnZpY2VJbml0KCl7aWYodGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpLHRoaXMuc2FzanNTZXJ2aWNlLnNldHVwKCksdGhpcy5zYXNWaXlhU2VydmljZS5zZXR1cCgp''@;'; put 'put ''LHRoaXMuZGNBZGFwdGVyU2V0dGluZ3Mpe3N3aXRjaCh0aGlzLnNhc2pzQWRhcHRlcj1uZXcoX3dlKCkpKHRoaXMuZGNBZGFwdGVyU2V0dGluZ3MpLHRoaXMuZGNBZGFwdGVyU2V0dGluZ3Muc2VydmVyVHlwZSl7Y2FzZSBfMC5ZLlNhc1ZpeWE6dGhpcy5jaGVja1ZpeWFEZXBsb3kodGhpcy5k''@;'; put 'put ''Y0FkYXB0ZXJTZXR0aW5ncy5hcHBMb2N8fCIiKTticmVhaztjYXNlIF8wLlkuU2FzOTp0aGlzLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuZW1pdCgpO2JyZWFrO2Nhc2UgXzAuWS5TYXNqczp0aGlzLmNoZWNrU2FzanNEZXBsb3koKX0iUmVkaXJlY3RlZCI9PT10aGlzLmdldFNhc2pzQ29u''@;'; put 'put ''ZmlnKCkubG9naW5NZWNoYW5pc20mJnRoaXMuc2hvdWxkTG9naW4uc3Vic2NyaWJlKHI9PntyJiZ0aGlzLnNhc2pzQWRhcHRlci5sb2dJbigpLnRoZW4oaT0+e2NvbnNvbGUubG9nKCJyZXMiLGkpfSl9KX1lbHNlIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwiQWRh''@;'; put 'put ''cHRlciBzZXR0aW5ncyAoaW5kZXguaHRtbCkgYXJlIG5vdCBwcmVzZW50LiIpfXJlcXVlc3QocixpLG8sYSl7aWYoYXx8KGE9e30pLEJ3ZS5pbmNsdWRlcyhyPSJzZXJ2aWNlcy8iK3IpJiZudWxsPT1pJiYoaT17fSksaSYmIm9iamVjdCI9PXR5cGVvZiBpJiYhaS5icm93c2VyX2luZm8mJkJ3''@;'; put 'put ''ZS5pbmNsdWRlcyhyKSl7Y29uc3QgbD1JbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmUsdT1mdW5jdGlvbiBlaHQobil7Y29uc3QgZT1ufHwiIix0PWE9PihlLm1hdGNoKGEpfHxbXSlbMV18fCIiO2xldCByPSJVbmtub3duIixpPSIiO2Zvcihjb25zdCBh''@;'; put 'put ''IG9mIEpkdClpZihhLnRva2VuLnRlc3QoZSkpe3I9YS5uYW1lLGk9dChhLnZlcnNpb24pO2JyZWFrfWxldCBvPSJVbmtub3duIjtyZXR1cm4vQW5kcm9pZC8udGVzdChlKT9vPSJBbmRyb2lkIjovaVBob25lfGlQYWR8aVBvZC8udGVzdChlKT9vPSJpT1MiOi9XaW5kb3dzLy50ZXN0KGUpP289''@;'; put 'put ''IldpbmRvd3MiOi9NYWMgT1MgWC8udGVzdChlKT9vPSJtYWNPUyI6L0xpbnV4Ly50ZXN0KGUpJiYobz0iTGludXgiKSx7YnJvd3NlcjpyLGJyb3dzZXJWZXJzaW9uOmkscGxhdGZvcm06b319KG5hdmlnYXRvci51c2VyQWdlbnQpO2kuYnJvd3Nlcl9pbmZvPVt7dXJsOndpbmRvdy5sb2NhdGlv''@;'; put 'put ''bi5ocmVmLHJlZmVycmVyOmRvY3VtZW50LnJlZmVycmVyLHRpbWV6b25lOmx8fCIiLHR6X29mZnNldDoobmV3IERhdGUpLmdldFRpbWV6b25lT2Zmc2V0KCksbG9jYWxlOm5hdmlnYXRvci5sYW5ndWFnZXx8IiIsZGNfdmVyc2lvbjoiNy4xNi4wIixhZGFwdGVyX3ZlcnNpb246IjQuMTkuMCIs''@;'; put 'put ''YnJvd3Nlcjp1LmJyb3dzZXIsYnJvd3Nlcl92ZXJzaW9uOnUuYnJvd3NlclZlcnNpb24scGxhdGZvcm06dS5wbGF0Zm9ybSx1c2VyX2FnZW50Om5hdmlnYXRvci51c2VyQWdlbnR8fCIifV07Y29uc3QgZz10aGlzLmNvbGxlY3RCcm93c2VyVXJsVmFycygpO2cubGVuZ3RoJiYoaS5icm93c2Vy''@;'; put 'put ''X3VybF92YXJzPWcpfXJldHVybiB0aGlzLmxvZ2dlclNlcnZpY2UubG9nUmVxdWVzdERhdGEocixpKSxuZXcgUHJvbWlzZSgobCx1KT0+e3RoaXMuc2FzanNBZGFwdGVyLnJlcXVlc3QocixpLG8sKCk9Pnt0aGlzLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbihnPT57Y29uc3QgRT10aGlz''@;'; put 'put ''LnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1ZXN0cygpLmZpbmQoTz0+Ty5zZXJ2aWNlTGluaz09PXIpO2lmKCExPT09Zy5sb2dpbiYmKHRoaXMuc2hvdWxkTG9naW4ubmV4dCghMCksdSh7YWRhcHRlclJlc3BvbnNlOiExLGxvZzpFPy5sb2dGaWxlfSkpLCF0aGlzLnVzZXJTZXJ2aWNlLnVzZXIm''@;'; put 'put ''JmcuTUZfR0VUVVNFUiYmKHRoaXMudXNlclNlcnZpY2UudXNlcj17dXNlcm5hbWU6Zy5NRl9HRVRVU0VSfSksZy5TWVNTSVRFJiYodGhpcy5yZXF1ZXN0U2l0ZUlkRW1pdHRlci5lbWl0KGcuU1lTU0lURSksdGhpcy5nZXRMaWNlbnNlU2l0ZUlkKCkubGVuZ3RoPjAmJih0aGlzLmdldExpY2Vu''@;'; put 'put ''c2VTaXRlSWQoKS5pbmNsdWRlcyhnLlNZU1NJVEUpfHx0aGlzLmluY29ycmVjdFNpdGVJZEVtaXR0ZXIuZW1pdChnLlNZU1NJVEUpKSksNDA0PT09Zy5zdGF0dXMmJnUoe2FkYXB0ZXJSZXNwb25zZTp7TUVTU0FHRTpnLmJvZHl8fCJTQVMgUmVzcG9uZGVkIHdpdGggZXJyb3IifSxsb2c6RT8u''@;'; put 'put ''bG9nRmlsZX0pLHR5cGVvZiBnLnNhc2pzQWJvcnQ8InUiKXtjb25zdCBPPWcsWj1PLnNhc2pzQWJvcnRbMF0uTVNHLGVlPU8uc2FzanNBYm9ydFswXS5NQUM7aWYoWi5pbmNsdWRlcygiRGF0YV9Db250cm9sbGVyX1NldHRpbmdzKFN0b3JlZFByb2Nlc3MpIG5vdCBmb3VuZCIpKXJldHVybiB0''@;'; put 'put ''aGlzLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSx2b2lkIHUoe2FkYXB0ZXJSZXNwb25zZTp7ZXJyb3I6Wn0sbG9nOkU/LmxvZ0ZpbGV9KTthPy5zdXBwcmVzc1N1Y2Nlc3NBYm9ydE1vZGFsfHx0aGlzLmV2ZW50''@;'; put 'put ''U2VydmljZS5zaG93QWJvcnRNb2RhbChyLnJlcGxhY2UoInNlcnZpY2VzLyIsIiIpLFose1NZU1dBUk5JTkdURVhUOk8uU1lTV0FSTklOR1RFWFQsU1lTRVJST1JURVhUOk8uU1lTRVJST1JURVhULE1BQzplZSxfUFJPR1JBTTpPLl9QUk9HUkFNfSksdSh7YWRhcHRlclJlc3BvbnNlOntlcnJv''@;'; put 'put ''cjpafSxsb2c6RT8ubG9nRmlsZX0pfWwoe2FkYXB0ZXJSZXNwb25zZTpnLGxvZzpFPy5sb2dGaWxlfSl9LGc9Pntjb25zb2xlLmVycm9yKGcpO2NvbnN0IEU9dGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzUmVxdWVzdHMoKS5maW5kKE89Pk8uc2VydmljZUxpbms9PT1yKTtpZihnLmVycm9yKXts''@;'; put 'put ''ZXQgWixPPWcuZXJyb3IubWVzc2FnZTtnLmVycm9yLmRldGFpbHMmJmcuZXJyb3IuZGV0YWlscy5sb2cmJihaPWcuZXJyb3IuZGV0YWlscy5sb2cpLCghT3x8Ty50cmltKCkubGVuZ3RoPDEpJiYoTz0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCIpLGE/LnN1cHByZXNzRXJyb3JBYm9ydE1v''@;'; put 'put ''ZGFsfHx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChyLE8se0xPRzpafSwiUmVxdWVzdCBlcnJvciIpLHUoe2FkYXB0ZXJSZXNwb25zZTp7ZXJyb3I6T30sbG9nOkU/LmxvZ0ZpbGV9KX11KHthZGFwdGVyUmVzcG9uc2U6Zyxsb2c6RT8ubG9nRmlsZX0pfSl9KX1jb2xsZWN0QnJv''@;'; put 'put ''d3NlclVybFZhcnMoKXtjb25zdCByPVtdLGk9bmV3IFNldCxvPWw9PntuZXcgVVJMU2VhcmNoUGFyYW1zKGwpLmZvckVhY2goKHUsZyk9PntpLmhhcyhnKXx8KGkuYWRkKGcpLHIucHVzaCh7bmFtZTpnLHZhbHVlOnV9KSl9KX07d2luZG93LmxvY2F0aW9uLnNlYXJjaCYmbyh3aW5kb3cubG9j''@;'; put 'put ''YXRpb24uc2VhcmNoLnNsaWNlKDEpKTtjb25zdCBhPXdpbmRvdy5sb2NhdGlvbi5oYXNoLnNwbGl0KCI/IilbMV07cmV0dXJuIGEmJm8oYSkscn11cGxvYWRGaWxlKHIsaSxvKXtyZXR1cm4gbmV3IFByb21pc2UoKGEsbCk9Pnt0aGlzLnNhc2pzQWRhcHRlci51cGxvYWRGaWxlKHIsaSxvKS50''@;'; put 'put ''aGVuKHU9Pntjb25zdCBnPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc1JlcXVlc3RzKCkuZmluZChFPT4ic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSI9PT1FLnNlcnZpY2VMaW5rKTthKHthZGFwdGVyUmVzcG9uc2U6dSxsb2c6Zz8ubG9nRmlsZX0pfSx1PT57Y29uc3QgZz10aGlzLnNhc2pz''@;'; put 'put ''QWRhcHRlci5nZXRTYXNSZXF1ZXN0cygpLmZpbmQoRT0+InNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiPT09RS5zZXJ2aWNlTGluayk7bCh7cmVzcG9uc2U6dSxsb2c6Zz8ubG9nRmlsZX0pfSl9KX1sb2dpbihyLGkpe3ZhciBvPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe2NvbnN0IGE9''@;'; put 'put ''by5nZXRTZXJ2ZXJUeXBlKCk9PT1fMC5ZLlNhc2pzPyJjbGllbnRJRDEiOnZvaWQgMDtyZXR1cm4gby5zYXNqc0FkYXB0ZXIubG9nSW4ocixpLGEpLnRoZW4obD0+KGwuaXNMb2dnZWRJbiYmKG8udXNlclNlcnZpY2UudXNlcj17dXNlcm5hbWU6bC51c2VyTmFtZX0sby5hcHBMb2NDaGVja1Bl''@;'; put 'put ''bmRpbmcmJihvLmNoZWNrVml5YURlcGxveShvLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIiKSxvLmFwcExvY0NoZWNrUGVuZGluZz0hMSkpLG8uc2hvdWxkTG9naW4ubmV4dCghbC5pc0xvZ2dlZEluKSxsLmlzTG9nZ2VkSW4pLGw9Pihjb25zb2xlLmVycm9yKGwpLG8uc2hvdWxkTG9n''@;'; put 'put ''aW4ubmV4dCghMCksITEpKS5jYXRjaChsPT4oNDAzPT09bCYmY29uc29sZS5lcnJvcigiSW52YWxpZCBob3N0IiksITEpKX0pKCl9cmVsb2FkU3RhcnR1cERhdGEoKXt0aGlzLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuZW1pdCgpfWdldExpY2Vuc2VTaXRlSWQoKXtyZXR1cm4gdGhpcy5s''@;'; put 'put ''aWNlbnNlX3NpdGVfaWQudmFsdWV8fFtdfXNldExpY2Vuc2VTaXRlSWQocil7dGhpcy5saWNlbnNlX3NpdGVfaWQubmV4dCgib2JqZWN0Ij09dHlwZW9mIHI/cjpbcl0pfWNoZWNrU2FzanNEZXBsb3koKXt2YXIgcj10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtjb25zdCBvPWAke3IuZ2V0''@;'; put 'put ''U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDtyLnNhc2pzU2VydmljZS5nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShvKS5zdWJzY3JpYmUoYT0+e2EuZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpfHxhLmZpbGVzLmluY2x1ZGVzKCJtYWtlZGF0YS5qcyIpPyhy''@;'; put 'put ''LmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLHIucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSk6KHIubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRlci5lbWl0KCksci5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSYmci5yb3V0ZXIubmF2aWdhdGVCeVVybCgiLyIp''@;'; put 'put ''KX0sYT0+e2NvbnN0IGw9InN0cmluZyI9PXR5cGVvZiBhLmVycm9yP2EuZXJyb3I6SlNPTi5zdHJpbmdpZnkoYS5lcnJvcnx8YSk7bC5pbmNsdWRlcygiVW5hdXRob3JpemVkIik/KHIuc2hvdWxkTG9naW4ubmV4dCghMCksci5zaG91bGRMb2dpbi5zdWJzY3JpYmUodT0+eyExPT09dSYmbG9j''@;'; put 'put ''YXRpb24ucmVsb2FkKCl9KSk6bC5pbmNsdWRlcygiRm9sZGVyIGRvZXNuJ3QgZXhpc3QuIikmJihjb25zb2xlLndhcm4oIlNBU2pzIFNBUyBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLHIuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCks''@;'; put 'put ''ci5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpKX0pfSkoKX1zYXNqc01ha2VkYXRhQ2hlY2tpbmcoKXt2YXIgcj10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgaT1DcihmdW5jdGlvbioobyxhKXtyLmNoZWNraW5nSW50''@;'; put 'put ''ZXJ2YWw9c2V0SW50ZXJ2YWwoQ3IoZnVuY3Rpb24qKCl7ci5zYXNqc01ha2VkYXRhU3VjY2Vzc2Z1bGwoKS50aGVuKGw9PntsJiYoY2xlYXJJbnRlcnZhbChyLmNoZWNraW5nSW50ZXJ2YWwpLG8obCkpfSkuY2F0Y2gobD0+e2NsZWFySW50ZXJ2YWwoci5jaGVja2luZ0ludGVydmFsKSxhKGwp''@;'; put 'put ''fSl9KSwxZTMpfSk7cmV0dXJuIGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9KSgpfXNhc2pzTWFrZWRhdGFTdWNjZXNzZnVsbCgpe3ZhciByPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoaSxvKT0+e2NvbnN0''@;'; put 'put ''IGw9YCR7ci5nZXRTYXNqc0NvbmZpZygpLmFwcExvY30vc2VydmljZXMvYWRtaW5gO3Iuc2FzanNTZXJ2aWNlLmdldEZvbGRlckNvbnRlbnRzRnJvbURyaXZlKGwpLnN1YnNjcmliZSh1PT57dS5maWxlcy5pbmNsdWRlcygibWFrZWRhdGEuc2FzIil8fHUuZmlsZXMuaW5jbHVkZXMoIm1ha2Vk''@;'; put 'put ''YXRhLmpzIik/aSghMSk6aSghMCl9LHU9PnsoInN0cmluZyI9PXR5cGVvZiB1LmVycm9yP3UuZXJyb3I6SlNPTi5zdHJpbmdpZnkodS5lcnJvcnx8dSkpLmluY2x1ZGVzKCJGb2xkZXIgZG9lc24ndCBleGlzdC4iKSYmbygpfSl9KX0pKCl9Y2hlY2tWaXlhRGVwbG95KHIpe3ZhciBpPXRoaXM7''@;'; put 'put ''cmV0dXJuIENyKGZ1bmN0aW9uKigpe2NvbnNvbGUubG9nKCJjaGVja1ZpeWFEZXBsb3k6IGNoZWNraW5nIGFwcExvYyIsciksaS5zdGFydHVwQ2hlY2tTZXJ2aWNlLnVwZGF0ZVN0ZXAoMCwiaW5fcHJvZ3Jlc3MiKTtsZXQgbCxhPSExO2lmKHR5cGVvZiBpLnNhc2pzQWRhcHRlci5nZXRGb2xk''@;'; put 'put ''ZXI8InUiKXtjb25zdCB1PXlpZWxkIGkuYXBwTG9jQ2hlY2socik7YT11LmZvdW5kLGw9dS5lcnJvck1lc3NhZ2V9ZWxzZSBhPXlpZWxkIGkuYXBwTG9jQ2hlY2tQcmVBeGlvc2RBZGFwdGVyKHIpO2NvbnNvbGUubG9nKCJjaGVja1ZpeWFEZXBsb3k6IGFwcExvYyBleGlzdHM/IixhLCJlcnJv''@;'; put 'put ''cj8iLGwpLGE/KGkuc3RhcnR1cENoZWNrU2VydmljZS51cGRhdGVTdGVwKDAsImRvbmUiLHIpLGkuc3RhcnR1cENoZWNrU2VydmljZS51cGRhdGVTdGVwKDEsImluX3Byb2dyZXNzIiksaS52aXlhTWFrZWRhdGFTdWNjZXNzZnVsbCgpLnRoZW4odT0+e2NvbnNvbGUubG9nKCJjaGVja1ZpeWFE''@;'; put 'put ''ZXBsb3k6IG1ha2VkYXRhIGpvYiBhbHJlYWR5IHJ1bj8iLHUsdT8iLT4gbG9hZGluZyBzdGFydHVwc2VydmljZSI6Ii0+IHJlZGlyZWN0aW5nIHRvIC9kZXBsb3kgKHNldHVwIHNjcmVlbikiKSx1PyhpLnN0YXJ0dXBDaGVja1NlcnZpY2UudXBkYXRlU3RlcCgxLCJkb25lIiwibWFrZWRhdGEg''@;'; put 'put ''Y29tcGxldGUiKSxpLnN0YXJ0dXBDaGVja1NlcnZpY2UudXBkYXRlU3RlcCgyLCJpbl9wcm9ncmVzcyIpLGkubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRlci5lbWl0KCkpOihpLnN0YXJ0dXBDaGVja1NlcnZpY2UudXBkYXRlU3RlcCgxLCJkb25lIiwibWFrZWRhdGEgam9iIGZvdW5kIC0gc2V0''@;'; put 'put ''dXAgbmVlZGVkIiksaS5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSxpLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IikpfSx1PT57Y29uc29sZS5lcnJvcigiY2hlY2tWaXlhRGVwbG95OiBlcnJvciB3aGlsZSBsb29raW5nIGZvciBtYWtlZGF0YSBqb2IiLHUpLGkuc3Rh''@;'; put 'put ''cnR1cENoZWNrU2VydmljZS51cGRhdGVTdGVwKDEsImVycm9yIixTdHJpbmcodSkpfSkpOihpLnN0YXJ0dXBDaGVja1NlcnZpY2UudXBkYXRlU3RlcCgwLCJlcnJvciIsbHx8Im5vdCBmb3VuZCIpLGkuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwobHx8IlZpeWEgc2Vydmlj''@;'; put 'put ''ZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYywgb3IgQVBJIG5vdCByZWFjaGFibGUuIENoZWNrIHRoZSBBREFQVEVSIGNvbmZpZ3VyYXRpb24uIikrYFxuQXBwTG9jOiAke3J9YCkpfSkoKX12aXlhTWFrZWRhdGFTdWNjZXNzZnVsbCgpe3ZhciByPXRoaXM7cmV0dXJu''@;'; put 'put ''IENyKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoaSxvKT0+e2NvbnN0IGE9ci5nZXRTYXNqc0NvbmZpZygpLGw9YCR7YS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDtjb25zb2xlLmxvZygidml5YU1ha2VkYXRhU3VjY2Vzc2Z1bGw6IGNoZWNraW5nIGZvbGRlciIsbCksci5zYXNW''@;'; put 'put ''aXlhU2VydmljZS5nZXRGb2xkZXJCeVBhdGgobCkuc3Vic2NyaWJlKHU9Pntjb25zdCBnPXUuaWQ7aWYoIWcpcmV0dXJuIGNvbnNvbGUuZXJyb3IoYHZpeWFNYWtlZGF0YVN1Y2Nlc3NmdWxsOiBmb2xkZXIgSUQgbm90IHByZXNlbnQgZm9yICR7bH1gLGEpLHZvaWQgaSghMSk7ci5zYXNWaXlh''@;'; put 'put ''U2VydmljZS5nZXRGb2xkZXJNZW1iZXJzKGcpLnN1YnNjcmliZShFPT57Y29uc3QgTz1FLml0ZW1zLm1hcChlZT0+ZWUubmFtZSksWj1FLml0ZW1zLnNvbWUoZWU9PiJtYWtlZGF0YSI9PT1lZS5uYW1lKTtjb25zb2xlLmxvZygidml5YU1ha2VkYXRhU3VjY2Vzc2Z1bGw6IGZvbGRlciBtZW1i''@;'; put 'put ''ZXJzOiIsTy5qb2luKCIsICIpfHwiKG5vbmUpIiksY29uc29sZS5sb2coInZpeWFNYWtlZGF0YVN1Y2Nlc3NmdWxsOiBtYWtlZGF0YSBqb2IgcHJlc2VudD8iLFosWj8iLT4gc2V0dXAgbmVlZGVkIChyZWRpcmVjdCB0byAvZGVwbG95KSI6Ii0+IHNldHVwIGFscmVhZHkgZG9uZSAobG9hZCBz''@;'; put 'put ''dGFydHVwc2VydmljZSkiKSxpKCFaKX0sRT0+e2NvbnNvbGUuZXJyb3IoInZpeWFNYWtlZGF0YVN1Y2Nlc3NmdWxsOiBlcnJvciBnZXR0aW5nIGZvbGRlciBtZW1iZXJzIGZvciIsbCxFKSxpKCExKX0pfSx1PT57Y29uc29sZS53YXJuKCJ2aXlhTWFrZWRhdGFTdWNjZXNzZnVsbDogZXJyb3Ig''@;'; put 'put ''Z2V0dGluZyBmb2xkZXIgaW5mbyBmb3IiLGwsdSksbyh1KX0pfSl9KSgpfWFwcExvY0NoZWNrKHIpe3ZhciBpPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIG89Q3IoZnVuY3Rpb24qKGEsbCl7bGV0IGcsdT0iIjt0cnl7Zz15aWVsZCBpLnNhc2pzQWRhcHRlci5nZXRG''@;'; put 'put ''b2xkZXIocil9Y2F0Y2goRSl7IkxvZ2luUmVxdWlyZWRFcnJvciI9PT1FLm5hbWU/KGkuYXBwTG9jQ2hlY2tQZW5kaW5nPSEwLGkuc2hvdWxkTG9naW4ubmV4dCghMCksYSh7Zm91bmQ6ITF9KSk6dT0iTm90Rm91bmRlRXJyb3IiPT09RS5uYW1lP0UubWVzc2FnZToiVml5YSBzZXJ2aWNlcyBh''@;'; put 'put ''cmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLCBvciBBUEkgbm90IHJlYWNoYWJsZS4gQ2hlY2sgdGhlIEFEQVBURVIgY29uZmlndXJhdGlvbi4ifWlmKHUubGVuZ3RoKXJldHVybiBjb25zb2xlLndhcm4odSksYSh7Zm91bmQ6ITEsZXJyb3JNZXNzYWdlOnV9KTthKHtmb3Vu''@;'; put 'put ''ZDohMH0pfSk7cmV0dXJuIGZ1bmN0aW9uKGEsbCl7cmV0dXJuIG8uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9YXBwTG9jQ2hlY2tQcmVBeGlvc2RBZGFwdGVyKHIpe3JldHVybiBuZXcgUHJvbWlzZSgoaSxvKT0+e2xldCBsPSExO3JldHVybiBmZXRjaChgL2ZvbGRlcnMvZm9sZGVycy9A''@;'; put 'put ''aXRlbT9wYXRoPSR7cn1gKS50aGVuKHU9Pig0MDQ9PT11LnN0YXR1cyYmKGw9ITApLHUudGV4dCgpKSkudGhlbih1PT57aWYodGhpcy5pc0xvZ2luUmVxdWlyZWQodSkpdGhpcy5hcHBMb2NDaGVja1BlbmRpbmc9ITAsdGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKTtlbHNle2lmKGwpcmV0dXJu''@;'; put 'put ''IGNvbnNvbGUud2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLHRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGkoITEpO2xldCBnPW51bGw7dHJ5''@;'; put 'put ''e2c9SlNPTi5wYXJzZSh1KX1jYXRjaHt9aWYoZyYmZy5odHRwU3RhdHVzQ29kZSYmNDA0PT09Zy5odHRwU3RhdHVzQ29kZSlyZXR1cm4gY29uc29sZS53YXJuKCJWaXlhIHNlcnZpY2VzIGFyZSBub3QgcHJlc2VudCBvbiB0aGUgY3VycmVudCBhcHBMb2MuIiksdGhpcy5ldmVudFNlcnZpY2Uu''@;'; put 'put ''c3RhcnR1cERhdGFMb2FkZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IiksaSghMSk7aSghMCl9fSkuY2F0Y2godT0+e2koITEpfSl9KX1pc0xvZ2luUmVxdWlyZWQocil7cmV0dXJuLzxmb3JtLithY3Rpb249IiguKkxvZ29uW14iXSopLio+L2dtLnRlc3Qocil9bG9n''@;'; put 'put ''b3V0KCl7dGhpcy5zYXNqc0FkYXB0ZXIubG9nT3V0KCkudGhlbigoKT0+e2xvY2F0aW9uLnJlbG9hZCgpfSl9Z2V0U2FzanNDb25maWcoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzanNDb25maWcoKX1nZXRTYXNSZXF1ZXN0cygpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlci5n''@;'; put 'put ''ZXRTYXNSZXF1ZXN0cygpfXNldERlYnVnU3RhdGUocil7dGhpcy5zYXNqc0FkYXB0ZXIuc2V0RGVidWdTdGF0ZShyKX1nZXREZWJ1Z1VybFBhcmFtKCl7Y29uc3Qgcj10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNqc0NvbmZpZygpO3JldHVybiByLmRlYnVnPyImX2RlYnVnPSIrKHIuc2VydmVy''@;'; put 'put ''VHlwZT09PV8wLlkuU2FzVml5YSYmbnVsbD09PXIudXNlQ29tcHV0ZUFwaSYmITA9PT1yLnJ1bkFzVGFzaz8xMjg6MTMxKToiIn1nZXRTYXNqc0luc3RhbmNlKCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyfWdldFNlcnZlclR5cGUoKXtjb25zdCByPXRoaXMuc2FzanNBZGFwdGVyLmdldFNh''@;'; put 'put ''c2pzQ29uZmlnKCk7cmV0dXJuIHIuc2VydmVyVHlwZT9yLnNlcnZlclR5cGU6IlNBU1ZJWUEifWdldEV4ZWN1dGlvblBhdGgoKXtjb25zdCByPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCk7c3dpdGNoKHIuc2VydmVyVHlwZSl7Y2FzZSBfMC5ZLlNhc1ZpeWE6cmV0dXJuIHIu''@;'; put 'put ''cGF0aFNBU1ZpeWE7Y2FzZSBfMC5ZLlNhczk6cmV0dXJuIHIucGF0aFNBUzk7Y2FzZSBfMC5ZLlNhc2pzOnJldHVybiByLnBhdGhTQVNKU319Z2V0RmlsZUNvbnRlbnQocixpKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIuZ2V0RmlsZUNvbnRlbnQocixpKX11cGRhdGVGaWxlQ29udGVudChy''@;'; put 'put ''LGksbyl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyLnVwZGF0ZUZpbGVDb250ZW50KHIsaSxvKX1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKShvcihFYiksb3IocGllKSxvcih1ZCksb3IoVndlKSxvcihDaWUpLG9yKHgzKSxvcihT''@;'; put 'put ''aWUpLG9yKHZjKSl9LHRoaXMuXHUwMjc1cHJvdj1Kbih7dG9rZW46ZSxmYWN0b3J5OmUuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSkpfXJldHVybiBuKCksZX0pKCkseDM9KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3RvcihyKXt0aGlzLmluamVjdG9yPXJ9bG9nKHIsaSl7dGhp''@;'; put 'put ''cy5pbmplY3RTYXNTZXJ2aWNlKCksdGhpcy5zYXNqc0NvbmZpZz8uZGVidWcmJihpP2NvbnNvbGUubG9nKHIsaSk6Y29uc29sZS5sb2cocikpfWVycm9yKHIsaSl7Y29uc29sZS5lcnJvcihyLGkpfWxvZ1JlcXVlc3REYXRhKHIsaSl7aWYodGhpcy5sb2coIi0tLSBBZGFwdGVyIFJlcXVlc3Qg''@;'; put 'put ''SW5wdXQgLS0tIiksdGhpcy5sb2cociksaSl7Zm9yKGxldCBvIG9mIE9iamVjdC5rZXlzKGkpKXRoaXMubG9nKG8saVtvXSk7dGhpcy5sb2coIi0tLS0tLSIpfWVsc2UgdGhpcy5sb2coIm5vIGRhdGEgc2VudCIpfWluamVjdFNhc1NlcnZpY2UoKXtpZighdGhpcy5zYXNqc0NvbmZpZyl7Y29u''@;'; put 'put ''c3Qgcj10aGlzLmluamVjdG9yLmdldChpYyk7dGhpcy5zYXNqc0NvbmZpZz1yLmdldFNhc2pzQ29uZmlnKCl9fXN0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpKG9yKE1sKSl9LHRoaXMuXHUwMjc1cHJvdj1Kbih7dG9rZW46ZSxmYWN0''@;'; put 'put ''b3J5OmUuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSkpfXJldHVybiBuKCksZX0pKCk7Y29uc3QgandlPWZ1bmN0aW9uIExodChuLGUpe3JldHVybiBuPT09ZXx8biE9biYmZSE9ZX0saXo9ZnVuY3Rpb24gT2h0KG4sZSl7Zm9yKHZhciB0PW4ubGVuZ3RoO3QtLTspaWYoandlKG5bdF1b''@;'; put 'put ''MF0sZSkpcmV0dXJuIHQ7cmV0dXJuLTF9O3ZhciBGaHQ9QXJyYXkucHJvdG90eXBlLnNwbGljZTtmdW5jdGlvbiBZRShuKXt2YXIgZT0tMSx0PW51bGw9PW4/MDpuLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTx0Oyl7dmFyIHI9bltlXTt0aGlzLnNldChyWzBdLHJbMV0pfX1ZRS5wcm90''@;'; put 'put ''b3R5cGUuY2xlYXI9ZnVuY3Rpb24gSWh0KCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sWUUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBQaHQobil7dmFyIGU9dGhpcy5fX2RhdGFfXyx0PWl6KGUsbik7cmV0dXJuISh0PDB8fCh0PT1lLmxlbmd0aC0xP2UucG9wKCk6Rmh0LmNh''@;'; put 'put ''bGwoZSx0LDEpLC0tdGhpcy5zaXplLDApKX0sWUUucHJvdG90eXBlLmdldD1mdW5jdGlvbiBWaHQobil7dmFyIGU9dGhpcy5fX2RhdGFfXyx0PWl6KGUsbik7cmV0dXJuIHQ8MD92b2lkIDA6ZVt0XVsxXX0sWUUucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBqaHQobil7cmV0dXJuIGl6KHRoaXMu''@;'; put 'put ''X19kYXRhX18sbik+LTF9LFlFLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gemh0KG4sZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxyPWl6KHQsbik7cmV0dXJuIHI8MD8oKyt0aGlzLnNpemUsdC5wdXNoKFtuLGVdKSk6dFtyXVsxXT1lLHRoaXN9O2NvbnN0IG96PVlFLFV3ZT0ib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIGdsb2JhbCYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7dmFyIGUxdD0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmO2NvbnN0IGo1PVV3ZXx8ZTF0fHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLGd2PWo1''@;'; put 'put ''LlN5bWJvbDt2YXIgendlPU9iamVjdC5wcm90b3R5cGUscjF0PXp3ZS5oYXNPd25Qcm9wZXJ0eSxpMXQ9endlLnRvU3RyaW5nLEtJPWd2P2d2LnRvU3RyaW5nVGFnOnZvaWQgMDt2YXIgbDF0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dmFyIFd3ZT1ndj9ndi50b1N0cmluZ1RhZzp2b2lk''@;'; put 'put ''IDA7Y29uc3QgWkU9ZnVuY3Rpb24gZjF0KG4pe3JldHVybiBudWxsPT1uP3ZvaWQgMD09PW4/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0iOld3ZSYmV3dlIGluIE9iamVjdChuKT9mdW5jdGlvbiBvMXQobil7dmFyIGU9cjF0LmNhbGwobixLSSksdD1uW0tJXTt0cnl7bltL''@;'; put 'put ''SV09dm9pZCAwO3ZhciByPSEwfWNhdGNoe312YXIgaT1pMXQuY2FsbChuKTtyZXR1cm4gciYmKGU/bltLSV09dDpkZWxldGUgbltLSV0pLGl9KG4pOmZ1bmN0aW9uIGMxdChuKXtyZXR1cm4gbDF0LmNhbGwobil9KG4pfSxYST1mdW5jdGlvbiBwMXQobil7dmFyIGU9dHlwZW9mIG47cmV0dXJu''@;'; put 'put ''IG51bGwhPW4mJigib2JqZWN0Ij09ZXx8ImZ1bmN0aW9uIj09ZSl9LFl3ZT1mdW5jdGlvbiB5MXQobil7aWYoIVhJKG4pKXJldHVybiExO3ZhciBlPVpFKG4pO3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PWV8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PWV8fCJbb2JqZWN0IEFz''@;'; put 'put ''eW5jRnVuY3Rpb25dIj09ZXx8IltvYmplY3QgUHJveHldIj09ZX0sRWllPWo1WyJfX2NvcmUtanNfc2hhcmVkX18iXTt2YXIgWndlPWZ1bmN0aW9uKCl7dmFyIG49L1teLl0rJC8uZXhlYyhFaWUmJkVpZS5rZXlzJiZFaWUua2V5cy5JRV9QUk9UT3x8IiIpO3JldHVybiBuPyJTeW1ib2woc3Jj''@;'; put 'put ''KV8xLiIrbjoiIn0oKTt2YXIgRTF0PUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztjb25zdCB4Yj1mdW5jdGlvbiBNMXQobil7aWYobnVsbCE9bil7dHJ5e3JldHVybiBFMXQuY2FsbChuKX1jYXRjaHt9dHJ5e3JldHVybiBuKyIifWNhdGNoe319cmV0dXJuIiJ9O3ZhciB4MXQ9L15cW29i''@;'; put 'put ''amVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sRDF0PVJlZ0V4cCgiXiIrRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSkucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0''@;'; put 'put ''eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7Y29uc3QgTzF0PWZ1bmN0aW9uIEwxdChuKXtyZXR1cm4hKCFYSShuKXx8ZnVuY3Rpb24gdzF0KG4pe3JldHVybiEhWndlJiZad2UgaW4gbn0obikpJiYoWXdlKG4pP0QxdDp4MXQpLnRlc3Qo''@;'; put 'put ''eGIobikpfSxBYj1mdW5jdGlvbiBQMXQobixlKXt2YXIgdD1mdW5jdGlvbiBOMXQobixlKXtyZXR1cm4gbj8uW2VdfShuLGUpO3JldHVybiBPMXQodCk/dDp2b2lkIDB9LFFJPUFiKGo1LCJNYXAiKSxKST1BYihPYmplY3QsImNyZWF0ZSIpO3ZhciBaMXQ9T2JqZWN0LnByb3RvdHlwZS5oYXNP''@;'; put 'put ''d25Qcm9wZXJ0eTt2YXIgSzF0PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gR0Uobil7dmFyIGU9LTEsdD1udWxsPT1uPzA6bi5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8dDspe3ZhciByPW5bZV07dGhpcy5zZXQoclswXSxyWzFdKX19R0UucHJvdG90eXBl''@;'; put 'put ''LmNsZWFyPWZ1bmN0aW9uIEIxdCgpe3RoaXMuX19kYXRhX189Skk/SkkobnVsbCk6e30sdGhpcy5zaXplPTB9LEdFLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gVTF0KG4pe3ZhciBlPXRoaXMuaGFzKG4pJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tuXTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6''@;'; put 'put ''MCxlfSxHRS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIEcxdChuKXt2YXIgZT10aGlzLl9fZGF0YV9fO2lmKEpJKXt2YXIgdD1lW25dO3JldHVybiJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIj09PXQ/dm9pZCAwOnR9cmV0dXJuIFoxdC5jYWxsKGUsbik/ZVtuXTp2b2lkIDB9LEdFLnByb3Rv''@;'; put 'put ''dHlwZS5oYXM9ZnVuY3Rpb24gWDF0KG4pe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIEpJP3ZvaWQgMCE9PWVbbl06SzF0LmNhbGwoZSxuKX0sR0UucHJvdG90eXBlLnNldD1mdW5jdGlvbiBlMHQobixlKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFz''@;'; put 'put ''KG4pPzA6MSx0W25dPUpJJiZ2b2lkIDA9PT1lPyJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjplLHRoaXN9O2NvbnN0IEd3ZT1HRSxhej1mdW5jdGlvbiBhMHQobixlKXt2YXIgdD1uLl9fZGF0YV9fO3JldHVybiBmdW5jdGlvbiBpMHQobil7dmFyIGU9dHlwZW9mIG47cmV0dXJuInN0cmlu''@;'; put 'put ''ZyI9PWV8fCJudW1iZXIiPT1lfHwic3ltYm9sIj09ZXx8ImJvb2xlYW4iPT1lPyJfX3Byb3RvX18iIT09bjpudWxsPT09bn0oZSk/dFsic3RyaW5nIj09dHlwZW9mIGU/InN0cmluZyI6Imhhc2giXTp0Lm1hcH07ZnVuY3Rpb24gJEUobil7dmFyIGU9LTEsdD1udWxsPT1uPzA6bi5sZW5ndGg7''@;'; put 'put ''Zm9yKHRoaXMuY2xlYXIoKTsrK2U8dDspe3ZhciByPW5bZV07dGhpcy5zZXQoclswXSxyWzFdKX19JEUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIG4wdCgpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IEd3ZSxtYXA6bmV3KFFJfHxveiksc3RyaW5nOm5ldyBHd2V9fSwk''@;'; put 'put ''RS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIHMwdChuKXt2YXIgZT1heih0aGlzLG4pLmRlbGV0ZShuKTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfSwkRS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIGMwdChuKXtyZXR1cm4gYXoodGhpcyxuKS5nZXQobil9LCRFLnByb3RvdHlwZS5oYXM9''@;'; put 'put ''ZnVuY3Rpb24gZDB0KG4pe3JldHVybiBheih0aGlzLG4pLmhhcyhuKX0sJEUucHJvdG90eXBlLnNldD1mdW5jdGlvbiBmMHQobixlKXt2YXIgdD1heih0aGlzLG4pLHI9dC5zaXplO3JldHVybiB0LnNldChuLGUpLHRoaXMuc2l6ZSs9dC5zaXplPT1yPzA6MSx0aGlzfTtjb25zdCBNaWU9JEU7''@;'; put 'put ''ZnVuY3Rpb24gcUUobil7dmFyIGU9dGhpcy5fX2RhdGFfXz1uZXcgb3oobik7dGhpcy5zaXplPWUuc2l6ZX1xRS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gWWh0KCl7dGhpcy5fX2RhdGFfXz1uZXcgb3osdGhpcy5zaXplPTB9LHFFLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gR2h0KG4p''@;'; put 'put ''e3ZhciBlPXRoaXMuX19kYXRhX18sdD1lLmRlbGV0ZShuKTtyZXR1cm4gdGhpcy5zaXplPWUuc2l6ZSx0fSxxRS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIHFodChuKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQobil9LHFFLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gWGh0KG4pe3JldHVybiB0''@;'; put 'put ''aGlzLl9fZGF0YV9fLmhhcyhuKX0scUUucHJvdG90eXBlLnNldD1mdW5jdGlvbiBtMHQobixlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKHQgaW5zdGFuY2VvZiBveil7dmFyIHI9dC5fX2RhdGFfXztpZighUUl8fHIubGVuZ3RoPDE5OSlyZXR1cm4gci5wdXNoKFtuLGVdKSx0aGlzLnNpemU9''@;'; put 'put ''Kyt0LnNpemUsdGhpczt0PXRoaXMuX19kYXRhX189bmV3IE1pZShyKX1yZXR1cm4gdC5zZXQobixlKSx0aGlzLnNpemU9dC5zaXplLHRoaXN9O2NvbnN0IF8wdD1xRTt2YXIgdzB0PWZ1bmN0aW9uKCl7dHJ5e3ZhciBuPUFiKE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gbih7fSwi''@;'; put 'put ''Iix7fSksbn1jYXRjaHt9fSgpO2NvbnN0ICR3ZT13MHQscXdlPWZ1bmN0aW9uIEMwdChuLGUsdCl7Il9fcHJvdG9fXyI9PWUmJiR3ZT8kd2UobixlLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTp0LHdyaXRhYmxlOiEwfSk6bltlXT10fTt2YXIgRTB0PU9iamVjdC5wcm90''@;'; put 'put ''b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgS3dlPWZ1bmN0aW9uIE0wdChuLGUsdCl7dmFyIHI9bltlXTsoIUUwdC5jYWxsKG4sZSl8fCFqd2Uocix0KXx8dm9pZCAwPT09dCYmIShlIGluIG4pKSYmcXdlKG4sZSx0KX0sc3o9ZnVuY3Rpb24gVDB0KG4sZSx0LHIpe3ZhciBpPSF0O3R8fCh0''@;'; put 'put ''PXt9KTtmb3IodmFyIG89LTEsYT1lLmxlbmd0aDsrK288YTspe3ZhciBsPWVbb10sdT1yP3IodFtsXSxuW2xdLGwsdCxuKTp2b2lkIDA7dm9pZCAwPT09dSYmKHU9bltsXSksaT9xd2UodCxsLHUpOkt3ZSh0LGwsdSl9cmV0dXJuIHR9LEtFPWZ1bmN0aW9uIGswdChuKXtyZXR1cm4gbnVsbCE9''@;'; put 'put ''biYmIm9iamVjdCI9PXR5cGVvZiBufSxYd2U9ZnVuY3Rpb24gSTB0KG4pe3JldHVybiBLRShuKSYmIltvYmplY3QgQXJndW1lbnRzXSI9PVpFKG4pfTt2YXIgUXdlPU9iamVjdC5wcm90b3R5cGUsRDB0PVF3ZS5oYXNPd25Qcm9wZXJ0eSxMMHQ9UXdlLnByb3BlcnR5SXNFbnVtZXJhYmxlLE8w''@;'; put 'put ''dD1Yd2UoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9Yd2U6ZnVuY3Rpb24obil7cmV0dXJuIEtFKG4pJiZEMHQuY2FsbChuLCJjYWxsZWUiKSYmIUwwdC5jYWxsKG4sImNhbGxlZSIpfTtjb25zdCBOMHQ9TzB0LFhFPUFycmF5LmlzQXJyYXk7dmFyIEp3ZT0ib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLGVDZT1Kd2UmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSx0Q2U9ZUNlJiZlQ2UuZXhwb3J0cz09PUp3ZT9qNS5CdWZmZXI6dm9pZCAwO2NvbnN0''@;'; put 'put ''IG5DZT0odENlP3RDZS5pc0J1ZmZlcjp2b2lkIDApfHxmdW5jdGlvbiBQMHQoKXtyZXR1cm4hMX07dmFyIHowdD0vXig/OjB8WzEtOV1cZCopJC87Y29uc3QgWTB0PWZ1bmN0aW9uIFcwdChuLGUpe3ZhciB0PXR5cGVvZiBuO3JldHVybiEhKGU9ZT8/OTAwNzE5OTI1NDc0MDk5MSkmJigibnVt''@;'; put 'put ''YmVyIj09dHx8InN5bWJvbCIhPXQmJnowdC50ZXN0KG4pKSYmbj4tMSYmbiUxPT0wJiZuPGV9LHJDZT1mdW5jdGlvbiBHMHQobil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBuJiZuPi0xJiZuJTE9PTAmJm48PTkwMDcxOTkyNTQ3NDA5OTF9O3ZhciBkZD17fTtkZFsiW29iamVjdCBGbG9hdDMy''@;'; put 'put ''QXJyYXldIl09ZGRbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPWRkWyJbb2JqZWN0IEludDhBcnJheV0iXT1kZFsiW29iamVjdCBJbnQxNkFycmF5XSJdPWRkWyJbb2JqZWN0IEludDMyQXJyYXldIl09ZGRbIltvYmplY3QgVWludDhBcnJheV0iXT1kZFsiW29iamVjdCBVaW50OENsYW1wZWRB''@;'; put 'put ''cnJheV0iXT1kZFsiW29iamVjdCBVaW50MTZBcnJheV0iXT1kZFsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxkZFsiW29iamVjdCBBcmd1bWVudHNdIl09ZGRbIltvYmplY3QgQXJyYXldIl09ZGRbIltvYmplY3QgQXJyYXlCdWZmZXJdIl09ZGRbIltvYmplY3QgQm9vbGVhbl0iXT1kZFsi''@;'; put 'put ''W29iamVjdCBEYXRhVmlld10iXT1kZFsiW29iamVjdCBEYXRlXSJdPWRkWyJbb2JqZWN0IEVycm9yXSJdPWRkWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPWRkWyJbb2JqZWN0IE1hcF0iXT1kZFsiW29iamVjdCBOdW1iZXJdIl09ZGRbIltvYmplY3QgT2JqZWN0XSJdPWRkWyJbb2JqZWN0IFJlZ0V4''@;'; put 'put ''cF0iXT1kZFsiW29iamVjdCBTZXRdIl09ZGRbIltvYmplY3QgU3RyaW5nXSJdPWRkWyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7Y29uc3QgVGllPWZ1bmN0aW9uIGIydChuKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSl9fTt2YXIgaUNlPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYm''@;'; put 'put ''ZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsZUQ9aUNlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUseGllPWVEJiZlRC5leHBvcnRzPT09aUNlJiZVd2UucHJvY2Vzcztjb25zdCBRRT1mdW5jdGlvbigpe3RyeXty''@;'; put 'put ''ZXR1cm4gZUQmJmVELnJlcXVpcmUmJmVELnJlcXVpcmUoInV0aWwiKS50eXBlc3x8eGllJiZ4aWUuYmluZGluZyYmeGllLmJpbmRpbmcoInV0aWwiKX1jYXRjaHt9fSgpO3ZhciBvQ2U9UUUmJlFFLmlzVHlwZWRBcnJheTtjb25zdCBFMnQ9b0NlP1RpZShvQ2UpOmZ1bmN0aW9uIF8ydChuKXty''@;'; put 'put ''ZXR1cm4gS0UobikmJnJDZShuLmxlbmd0aCkmJiEhZGRbWkUobildfTt2YXIgVDJ0PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgYUNlPWZ1bmN0aW9uIHgydChuLGUpe3ZhciB0PVhFKG4pLHI9IXQmJk4wdChuKSxpPSF0JiYhciYmbkNlKG4pLG89IXQmJiFyJiYhaSYm''@;'; put 'put ''RTJ0KG4pLGE9dHx8cnx8aXx8byxsPWE/ZnVuY3Rpb24geDB0KG4sZSl7Zm9yKHZhciB0PS0xLHI9QXJyYXkobik7Kyt0PG47KXJbdF09ZSh0KTtyZXR1cm4gcn0obi5sZW5ndGgsU3RyaW5nKTpbXSx1PWwubGVuZ3RoO2Zvcih2YXIgZyBpbiBuKShlfHxUMnQuY2FsbChuLGcpKSYmKCFhfHwh''@;'; put 'put ''KCJsZW5ndGgiPT1nfHxpJiYoIm9mZnNldCI9PWd8fCJwYXJlbnQiPT1nKXx8byYmKCJidWZmZXIiPT1nfHwiYnl0ZUxlbmd0aCI9PWd8fCJieXRlT2Zmc2V0Ij09Zyl8fFkwdChnLHUpKSkmJmwucHVzaChnKTtyZXR1cm4gbH07dmFyIEEydD1PYmplY3QucHJvdG90eXBlO2NvbnN0IEFpZT1m''@;'; put 'put ''dW5jdGlvbiBrMnQobil7dmFyIGU9biYmbi5jb25zdHJ1Y3RvcjtyZXR1cm4gbj09PSgiZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5wcm90b3R5cGV8fEEydCl9LHNDZT1mdW5jdGlvbiBSMnQobixlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4oZSh0KSl9fSxEMnQ9c0NlKE9iamVjdC5r''@;'; put 'put ''ZXlzLE9iamVjdCk7dmFyIE8ydD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IGxDZT1mdW5jdGlvbiBQMnQobil7cmV0dXJuIG51bGwhPW4mJnJDZShuLmxlbmd0aCkmJiFZd2Uobil9LGtpZT1mdW5jdGlvbiBIMnQobil7cmV0dXJuIGxDZShuKT9hQ2Uobik6ZnVuY3Rp''@;'; put 'put ''b24gTjJ0KG4pe2lmKCFBaWUobikpcmV0dXJuIEQydChuKTt2YXIgZT1bXTtmb3IodmFyIHQgaW4gT2JqZWN0KG4pKU8ydC5jYWxsKG4sdCkmJiJjb25zdHJ1Y3RvciIhPXQmJmUucHVzaCh0KTtyZXR1cm4gZX0obil9O3ZhciBXMnQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtj''@;'; put 'put ''b25zdCBaMnQ9ZnVuY3Rpb24gWTJ0KG4pe2lmKCFYSShuKSlyZXR1cm4gZnVuY3Rpb24gajJ0KG4pe3ZhciBlPVtdO2lmKG51bGwhPW4pZm9yKHZhciB0IGluIE9iamVjdChuKSllLnB1c2godCk7cmV0dXJuIGV9KG4pO3ZhciBlPUFpZShuKSx0PVtdO2Zvcih2YXIgciBpbiBuKSJjb25zdHJ1''@;'; put 'put ''Y3RvciI9PXImJihlfHwhVzJ0LmNhbGwobixyKSl8fHQucHVzaChyKTtyZXR1cm4gdH0sUmllPWZ1bmN0aW9uIEcydChuKXtyZXR1cm4gbENlKG4pP2FDZShuLCEwKTpaMnQobil9O3ZhciBjQ2U9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYm''@;'; put 'put ''ZXhwb3J0cyx1Q2U9Y0NlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsZENlPXVDZSYmdUNlLmV4cG9ydHM9PT1jQ2U/ajUuQnVmZmVyOnZvaWQgMCxoQ2U9ZENlP2RDZS5hbGxvY1Vuc2FmZTp2b2lkIDA7Y29uc3QgZkNlPWZ1bmN0''@;'; put 'put ''aW9uIHJmdCgpe3JldHVybltdfTt2YXIgb2Z0PU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUscENlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsYWZ0PXBDZT9mdW5jdGlvbihuKXtyZXR1cm4gbnVsbD09bj9bXToobj1PYmplY3QobiksZnVuY3Rpb24gdGZ0KG4s''@;'; put 'put ''ZSl7Zm9yKHZhciB0PS0xLHI9bnVsbD09bj8wOm4ubGVuZ3RoLGk9MCxvPVtdOysrdDxyOyl7dmFyIGE9blt0XTtlKGEsdCxuKSYmKG9baSsrXT1hKX1yZXR1cm4gb30ocENlKG4pLGZ1bmN0aW9uKGUpe3JldHVybiBvZnQuY2FsbChuLGUpfSkpfTpmQ2U7Y29uc3QgSWllPWFmdCxnQ2U9ZnVu''@;'; put 'put ''Y3Rpb24gY2Z0KG4sZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsaT1uLmxlbmd0aDsrK3Q8cjspbltpK3RdPWVbdF07cmV0dXJuIG59LG1DZT1zQ2UoT2JqZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCk7dmFyIGhmdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKG4p''@;'; put 'put ''e2Zvcih2YXIgZT1bXTtuOylnQ2UoZSxJaWUobikpLG49bUNlKG4pO3JldHVybiBlfTpmQ2U7Y29uc3QgdkNlPWhmdCxfQ2U9ZnVuY3Rpb24gZ2Z0KG4sZSx0KXt2YXIgcj1lKG4pO3JldHVybiBYRShuKT9yOmdDZShyLHQobikpfSx2ZnQ9ZnVuY3Rpb24gbWZ0KG4pe3JldHVybiBfQ2Uobixr''@;'; put 'put ''aWUsSWllKX0seWZ0PWZ1bmN0aW9uIF9mdChuKXtyZXR1cm4gX0NlKG4sUmllLHZDZSl9LERpZT1BYihqNSwiRGF0YVZpZXciKSxMaWU9QWIoajUsIlByb21pc2UiKSxPaWU9QWIoajUsIlNldCIpLE5pZT1BYihqNSwiV2Vha01hcCIpO3ZhciB5Q2U9IltvYmplY3QgTWFwXSIsYkNlPSJbb2Jq''@;'; put 'put ''ZWN0IFByb21pc2VdIix3Q2U9IltvYmplY3QgU2V0XSIsQ0NlPSJbb2JqZWN0IFdlYWtNYXBdIixTQ2U9IltvYmplY3QgRGF0YVZpZXddIixNZnQ9eGIoRGllKSxUZnQ9eGIoUUkpLHhmdD14YihMaWUpLEFmdD14YihPaWUpLGtmdD14YihOaWUpLGtiPVpFOyhEaWUmJmtiKG5ldyBEaWUobmV3''@;'; put 'put ''IEFycmF5QnVmZmVyKDEpKSkhPVNDZXx8UUkmJmtiKG5ldyBRSSkhPXlDZXx8TGllJiZrYihMaWUucmVzb2x2ZSgpKSE9YkNlfHxPaWUmJmtiKG5ldyBPaWUpIT13Q2V8fE5pZSYma2IobmV3IE5pZSkhPUNDZSkmJihrYj1mdW5jdGlvbihuKXt2YXIgZT1aRShuKSx0PSJbb2JqZWN0IE9iamVj''@;'; put 'put ''dF0iPT1lP24uY29uc3RydWN0b3I6dm9pZCAwLHI9dD94Yih0KToiIjtpZihyKXN3aXRjaChyKXtjYXNlIE1mdDpyZXR1cm4gU0NlO2Nhc2UgVGZ0OnJldHVybiB5Q2U7Y2FzZSB4ZnQ6cmV0dXJuIGJDZTtjYXNlIEFmdDpyZXR1cm4gd0NlO2Nhc2Uga2Z0OnJldHVybiBDQ2V9cmV0dXJuIGV9''@;'; put 'put ''KTtjb25zdCBGaWU9a2I7dmFyIElmdD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IEVDZT1qNS5VaW50OEFycmF5LFBpZT1mdW5jdGlvbiBOZnQobil7dmFyIGU9bmV3IG4uY29uc3RydWN0b3Iobi5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IEVDZShlKS5zZXQobmV3IEVD''@;'; put 'put ''ZShuKSksZX07dmFyIEhmdD0vXHcqJC87dmFyIE1DZT1ndj9ndi5wcm90b3R5cGU6dm9pZCAwLFRDZT1NQ2U/TUNlLnZhbHVlT2Y6dm9pZCAwO2NvbnN0IGQzdD1mdW5jdGlvbiB1M3QobixlLHQpe3ZhciByPW4uY29uc3RydWN0b3I7c3dpdGNoKGUpe2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZl''@;'; put 'put ''cl0iOnJldHVybiBQaWUobik7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOnJldHVybiBuZXcgcigrbik7Y2FzZSJbb2JqZWN0IERhdGFWaWV3XSI6cmV0dXJuIGZ1bmN0aW9uIEZmdChuLGUpe3ZhciB0PWU/UGllKG4uYnVmZmVyKTpuLmJ1ZmZlcjtyZXR1cm4g''@;'; put 'put ''bmV3IG4uY29uc3RydWN0b3IodCxuLmJ5dGVPZmZzZXQsbi5ieXRlTGVuZ3RoKX0obix0KTtjYXNlIltvYmplY3QgRmxvYXQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iOmNhc2UiW29iamVjdCBJbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgSW50MTZBcnJheV0iOmNhc2Ui''@;'; put 'put ''W29iamVjdCBJbnQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjpjYXNlIltvYmplY3QgVWludDE2QXJyYXldIjpjYXNlIltvYmplY3QgVWludDMyQXJyYXldIjpyZXR1cm4gZnVuY3Rpb24gemZ0KG4sZSl7dmFyIHQ9''@;'; put 'put ''ZT9QaWUobi5idWZmZXIpOm4uYnVmZmVyO3JldHVybiBuZXcgbi5jb25zdHJ1Y3Rvcih0LG4uYnl0ZU9mZnNldCxuLmxlbmd0aCl9KG4sdCk7Y2FzZSJbb2JqZWN0IE1hcF0iOmNhc2UiW29iamVjdCBTZXRdIjpyZXR1cm4gbmV3IHI7Y2FzZSJbb2JqZWN0IE51bWJlcl0iOmNhc2UiW29iamVj''@;'; put 'put ''dCBTdHJpbmddIjpyZXR1cm4gbmV3IHIobik7Y2FzZSJbb2JqZWN0IFJlZ0V4cF0iOnJldHVybiBmdW5jdGlvbiBWZnQobil7dmFyIGU9bmV3IG4uY29uc3RydWN0b3Iobi5zb3VyY2UsSGZ0LmV4ZWMobikpO3JldHVybiBlLmxhc3RJbmRleD1uLmxhc3RJbmRleCxlfShuKTtjYXNlIltvYmpl''@;'; put 'put ''Y3QgU3ltYm9sXSI6cmV0dXJuIGZ1bmN0aW9uIGpmdChuKXtyZXR1cm4gVENlP09iamVjdChUQ2UuY2FsbChuKSk6e319KG4pfX07dmFyIHhDZT1PYmplY3QuY3JlYXRlLGgzdD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt9cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFYSShlKSlyZXR1cm57fTtp''@;'; put 'put ''Zih4Q2UpcmV0dXJuIHhDZShlKTtuLnByb3RvdHlwZT1lO3ZhciB0PW5ldyBuO3JldHVybiBuLnByb3RvdHlwZT12b2lkIDAsdH19KCk7Y29uc3QgZjN0PWgzdDt2YXIgQUNlPVFFJiZRRS5pc01hcDtjb25zdCBiM3Q9QUNlP1RpZShBQ2UpOmZ1bmN0aW9uIHYzdChuKXtyZXR1cm4gS0Uobikm''@;'; put 'put ''JiJbb2JqZWN0IE1hcF0iPT1GaWUobil9O3ZhciBrQ2U9UUUmJlFFLmlzU2V0O2NvbnN0IE0zdD1rQ2U/VGllKGtDZSk6ZnVuY3Rpb24gQzN0KG4pe3JldHVybiBLRShuKSYmIltvYmplY3QgU2V0XSI9PUZpZShuKX07dmFyIFJDZT0iW29iamVjdCBBcmd1bWVudHNdIixJQ2U9IltvYmplY3Qg''@;'; put 'put ''RnVuY3Rpb25dIixEQ2U9IltvYmplY3QgT2JqZWN0XSIscXU9e307cXVbUkNlXT1xdVsiW29iamVjdCBBcnJheV0iXT1xdVsiW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1xdVsiW29iamVjdCBEYXRhVmlld10iXT1xdVsiW29iamVjdCBCb29sZWFuXSJdPXF1WyJbb2JqZWN0IERhdGVdIl09cXVb''@;'; put 'put ''IltvYmplY3QgRmxvYXQzMkFycmF5XSJdPXF1WyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1xdVsiW29iamVjdCBJbnQ4QXJyYXldIl09cXVbIltvYmplY3QgSW50MTZBcnJheV0iXT1xdVsiW29iamVjdCBJbnQzMkFycmF5XSJdPXF1WyJbb2JqZWN0IE1hcF0iXT1xdVsiW29iamVjdCBOdW1i''@;'; put 'put ''ZXJdIl09cXVbRENlXT1xdVsiW29iamVjdCBSZWdFeHBdIl09cXVbIltvYmplY3QgU2V0XSJdPXF1WyJbb2JqZWN0IFN0cmluZ10iXT1xdVsiW29iamVjdCBTeW1ib2xdIl09cXVbIltvYmplY3QgVWludDhBcnJheV0iXT1xdVsiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1xdVsiW29i''@;'; put 'put ''amVjdCBVaW50MTZBcnJheV0iXT1xdVsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxxdVsiW29iamVjdCBFcnJvcl0iXT1xdVtJQ2VdPXF1WyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7Y29uc3QgUTN0PWZ1bmN0aW9uIGx6KG4sZSx0LHIsaSxvKXt2YXIgYSxsPTEmZSx1PTImZSxnPTQmZTtp''@;'; put 'put ''Zih0JiYoYT1pP3QobixyLGksbyk6dChuKSksdm9pZCAwIT09YSlyZXR1cm4gYTtpZighWEkobikpcmV0dXJuIG47dmFyIEU9WEUobik7aWYoRSl7aWYoYT1mdW5jdGlvbiBEZnQobil7dmFyIGU9bi5sZW5ndGgsdD1uZXcgbi5jb25zdHJ1Y3RvcihlKTtyZXR1cm4gZSYmInN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBuWzBdJiZJZnQuY2FsbChuLCJpbmRleCIpJiYodC5pbmRleD1uLmluZGV4LHQuaW5wdXQ9bi5pbnB1dCksdH0obiksIWwpcmV0dXJuIGZ1bmN0aW9uIEoydChuLGUpe3ZhciB0PS0xLHI9bi5sZW5ndGg7Zm9yKGV8fChlPUFycmF5KHIpKTsrK3Q8cjspZVt0XT1uW3RdO3JldHVybiBl''@;'; put 'put ''fShuLGEpfWVsc2V7dmFyIE89RmllKG4pLFo9Tz09SUNlfHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT1PO2lmKG5DZShuKSlyZXR1cm4gZnVuY3Rpb24gWDJ0KG4sZSl7aWYoZSlyZXR1cm4gbi5zbGljZSgpO3ZhciB0PW4ubGVuZ3RoLHI9aENlP2hDZSh0KTpuZXcgbi5jb25zdHJ1''@;'; put 'put ''Y3Rvcih0KTtyZXR1cm4gbi5jb3B5KHIpLHJ9KG4sbCk7aWYoTz09RENlfHxPPT1SQ2V8fFomJiFpKXtpZihhPXV8fFo/e306ZnVuY3Rpb24gcDN0KG4pe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBuLmNvbnN0cnVjdG9yfHxBaWUobik/e306ZjN0KG1DZShuKSl9KG4pLCFsKXJldHVybiB1''@;'; put 'put ''P2Z1bmN0aW9uIGZmdChuLGUpe3JldHVybiBzeihuLHZDZShuKSxlKX0obixmdW5jdGlvbiAkMnQobixlKXtyZXR1cm4gbiYmc3ooZSxSaWUoZSksbil9KGEsbikpOmZ1bmN0aW9uIHNmdChuLGUpe3JldHVybiBzeihuLElpZShuKSxlKX0obixmdW5jdGlvbiBWMnQobixlKXtyZXR1cm4gbiYm''@;'; put 'put ''c3ooZSxraWUoZSksbil9KGEsbikpfWVsc2V7aWYoIXF1W09dKXJldHVybiBpP246e307YT1kM3QobixPLGwpfX1vfHwobz1uZXcgXzB0KTt2YXIgZWU9by5nZXQobik7aWYoZWUpcmV0dXJuIGVlO28uc2V0KG4sYSksTTN0KG4pP24uZm9yRWFjaChmdW5jdGlvbihIZSl7YS5hZGQobHooSGUs''@;'; put 'put ''ZSx0LEhlLG4sbykpfSk6YjN0KG4pJiZuLmZvckVhY2goZnVuY3Rpb24oSGUsV2Upe2Euc2V0KFdlLGx6KEhlLGUsdCxXZSxuLG8pKX0pO3ZhciBNZT1FP3ZvaWQgMDooZz91P3lmdDp2ZnQ6dT9SaWU6a2llKShuKTtyZXR1cm4gZnVuY3Rpb24geTB0KG4sZSl7Zm9yKHZhciB0PS0xLHI9bnVs''@;'; put 'put ''bD09bj8wOm4ubGVuZ3RoOysrdDxyJiYhMSE9PWUoblt0XSx0LG4pOyk7fShNZXx8bixmdW5jdGlvbihIZSxXZSl7TWUmJihIZT1uW1dlPUhlXSksS3dlKGEsV2UsbHooSGUsZSx0LFdlLG4sbykpfSksYX0sY3o9ZnVuY3Rpb24gdHB0KG4pe3JldHVybiBRM3Qobiw1KX07dmFyIG5wdD1oKDc4''@;'; put 'put ''ODU1KSxycHQ9aC5uKG5wdCk7bGV0IGZoPSgoKT0+e3ZhciBuO2NsYXNzIGV7Y29uc3RydWN0b3Iocil7dGhpcy5zYXNTZXJ2aWNlPXIsdGhpcy5zaG93bkxpYnJhcmllcz01MCx0aGlzLmxvYWRNb3JlQ291bnQ9NTB9Y29udmVydEpzRGF0ZVRvU2FzRGF0ZShyLGk9ImRheXMiKXtsZXQgbyxh''@;'; put 'put ''PTA7bz1yIGluc3RhbmNlb2YgRGF0ZT9yOm5ldyBEYXRlKHIpLGE9bmV3IERhdGUoRGF0ZS5VVEMoby5nZXRGdWxsWWVhcigpLG8uZ2V0TW9udGgoKSxvLmdldERhdGUoKSxvLmdldEhvdXJzKCksby5nZXRNaW51dGVzKCksby5nZXRTZWNvbmRzKCkpKS52YWx1ZU9mKCk7Y29uc3QgZz1hKzMx''@;'; put 'put ''NTYxOTJlNTtzd2l0Y2goaSl7Y2FzZSJkYXlzIjp7bGV0IEU9Zy84NjRlNTtyZXR1cm4gRT1NYXRoLmFicyhFKSxFPU1hdGguZmxvb3IoRSksRX1jYXNlInNlY29uZHMiOnJldHVybiBnLzFlM31yZXR1cm4gMH1jb252ZXJ0U2FzRGF5c1RvSnNEYXRlKHIsaT0iZGF5cyIpe2lmKCJudW1iZXIi''@;'; put 'put ''IT10eXBlb2YgciYmKHI9cGFyc2VGbG9hdChyKSksInNlY29uZHMiPT09aSl7bGV0IHU9MWUzKnItMzE1NjE5MmU1O3JldHVybiB1Kz02MCpuZXcgRGF0ZSh1KS5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyxuZXcgRGF0ZSh1KX1yZXR1cm4gbmV3IERhdGUoODY0ZTUqci0zMTU2MTkyZTUpfXRy''@;'; put 'put ''ZWVPbkZpbHRlcihyLGkpe2xldCBvPXIuc2VhcmNoU3RyaW5nP3Iuc2VhcmNoU3RyaW5nOiIiLGE9aS5zcGxpdCgiLiIpWzBdLGw9aS5zcGxpdCgiLiIpWzFdLHU9YSsiQWxsIjtyW2FdJiYoclt1XXx8KHJbdV09dGhpcy5kZWVwQ2xvbmUoclthXSkpLHJbYV09dGhpcy5kZWVwQ2xvbmUoclt1''@;'; put 'put ''XSksby5sZW5ndGg+MCYmKHJbYV09clthXS5maWx0ZXIobD9nPT5nW2xdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoby50b0xvd2VyQ2FzZSgpKTpnPT5nLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoby50b0xvd2VyQ2FzZSgpKSkpKX1saWJyYXJ5T25GaWx0ZXIocixpLG8pe2kubGVuZ3RoPjA/''@;'; put 'put ''ci5mb3JFYWNoKGE9PnthW29dLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoaS50b0xvd2VyQ2FzZSgpKT8oYS5oaWRkZW49ITEsYS5pbkZvcmVncm91bmQ9ITApOihhLmhpZGRlbj0hMCxhLmluRm9yZWdyb3VuZD0hMSl9KToodGhpcy5yZXNldEFycmF5RmlsdGVyKHIpLHRoaXMuZGlzcGxheUxp''@;'; put 'put ''YnJhcmllcyhyKSl9ZGlzcGxheUxpYnJhcmllcyhyLGkpe2k/dGhpcy5zaG93bkxpYnJhcmllcys9dGhpcy5sb2FkTW9yZUNvdW50Oih0aGlzLnNob3duTGlicmFyaWVzPTUwLHRoaXMucmVzZXRMaWJyYXJ5Rm9yZWdyb3VuZChyKSk7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aCYmbyE9PXRoaXMu''@;'; put 'put ''c2hvd25MaWJyYXJpZXM7bysrKXJbb10uaW5Gb3JlZ3JvdW5kPSEwfXJlc2V0TGlicmFyeUZvcmVncm91bmQocil7Zm9yKGxldCBpPTA7aTxyLmxlbmd0aDtpKyspcltpXS5pbkZvcmVncm91bmQ9ITF9bWV0YU9iamVjdE9uRmlsdGVyKHIsaSxvKXtpLmxlbmd0aD4wPyh0aGlzLnJlc2V0QXJy''@;'; put 'put ''YXlGaWx0ZXIociksci5mb3JFYWNoKGE9PnthW29dLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoaS50b0xvd2VyQ2FzZSgpKXx8KGEuaGlkZGVuPSEwKX0pKTp0aGlzLnJlc2V0QXJyYXlGaWx0ZXIocil9cmVzZXRBcnJheUZpbHRlcihyKXtyLmZvckVhY2goaT0+e2kuaGlkZGVuPSExLGkuaW5G''@;'; put 'put ''b3JlZ3JvdW5kJiZkZWxldGUgaS5pbkZvcmVncm91bmR9KX1jb252ZXJ0T2JqZWN0c1RvQXJyYXkocixpPSExKXtyZXR1cm4gaSYmKHI9dGhpcy5kZWVwQ2xvbmUocikpLHIubWFwKG89Pk9iamVjdC5rZXlzKG8pLm1hcChhPT5vW2FdKSl9YWRkTGVhZGluZ1plcm8ocil7cmV0dXJuInN0cmlu''@;'; put 'put ''ZyIhPXR5cGVvZiByJiYocj1yLnRvU3RyaW5nKCkpLHIubGVuZ3RoPDI/IjAiK3I6cn1kZWxldGVLZXlzQW5kSGFzaChyLGksbz0hMCl7Y29uc3QgYT1vP3RoaXMuZGVlcENsb25lKHIpOnI7Zm9yKGxldCBsIG9mIGkpZGVsZXRlIGFbbF07cmV0dXJuIHJwdCgpKEpTT04uc3RyaW5naWZ5KGEp''@;'; put 'put ''KS50b1N0cmluZygpfWRvd25sb2FkVGV4dEZpbGUocixpKXtjb25zdCBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtvLnNldEF0dHJpYnV0ZSgiaHJlZiIsImRhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04LCIrZW5jb2RlVVJJQ29tcG9uZW50KGkpKSxvLnNldEF0dHJpYnV0ZSgi''@;'; put 'put ''ZG93bmxvYWQiLHIrIi50eHQiKSxvLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobyksby5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobyl9Y29udmVydEFycmF5VmFsdWVzKHIsaSl7aWYoci5sZW5ndGg8MSlyZXR1cm5bXTtzd2l0Y2go''@;'; put 'put ''aSl7Y2FzZSJudW1iZXIiOnJldHVybiByLm1hcChvPT4xKm8pO2Nhc2Uic3RyaW5nIjpyZXR1cm4gci5tYXAobz0+YCR7b31gKX19aXNTdHJlYW1pbmdWaXlhKCl7cmV0dXJuIlNBU1ZJWUEiPT09dGhpcy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKSYmISghbG9jYXRpb24uc2VhcmNoLnRv''@;'; put 'put ''TG93ZXJDYXNlKCkuaW5jbHVkZXMoIj9fZmlsZT0iKXx8IWxvY2F0aW9uLnBhdGhuYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoIi9zYXNqb2JleGVjdXRpb24iKSl9ZGVib3VuY2VDYWxsKHIsaSl7Y2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VUaW1lb3V0KSx0aGlzLmRlYm91bmNlVGlt''@;'; put 'put ''ZW91dD1zZXRUaW1lb3V0KGkscil9ZGVlcENsb25lKHIpe3JldHVybiBjeihyKX1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKShvcihpYykpfSx0aGlzLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOmUsZmFjdG9yeTplLlx1MDI3NWZhYyxw''@;'; put 'put ''cm92aWRlZEluOiJyb290In0pKX1yZXR1cm4gbigpLGV9KSgpLEYyPSgoKT0+e3ZhciBuO2NsYXNzIGV7Y29uc3RydWN0b3IocixpLG8sYSxsLHUpe3RoaXMubG9nZ2VyU2VydmljZT1yLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPWksdGhpcy5ldmVudFNlcnZpY2U9byx0aGlzLnNhc1NlcnZpY2U9''@;'; put 'put ''YSx0aGlzLmhlbHBlclNlcnZpY2U9bCx0aGlzLnJvdXRlcj11LHRoaXMudXNlckNvdW50TGltaXRhdGlvbj0hMSx0aGlzLmxpY2Vuc2VLZXlEYXRhPW51bGwsdGhpcy5fbGljZW5jZVN0YXRlPWZpZSx0aGlzLmFsbEZlYXR1cmVzT249e3ZpZXdlcl9yb3dzX2FsbG93ZWQ6MS8wLGVkaXRvcl9y''@;'; put 'put ''b3dzX2FsbG93ZWQ6MS8wLHN0YWdlX3Jvd3NfYWxsb3dlZDoxLzAsaGlzdG9yeV9yb3dzX2FsbG93ZWQ6MS8wLHN1Ym1pdF9yb3dzX2xpbWl0OjEvMCx0YWJsZXNfaW5fbGlicmFyeV9saW1pdDoxLzAsdmlld2JveF9saW1pdDoxLzAsbGluZWFnZV9kYWlseV9saW1pdDoxLzAsdmlld2JveDoh''@;'; put 'put ''MCxmaWxlVXBsb2FkOiEwLGVkaXRSZWNvcmQ6ITAsYWRkUmVjb3JkOiEwfSx0aGlzLmZyZWVUaWVyTGljZW5jZURhdGE9e2RlbW86ITAsaG90X2xpY2Vuc2Vfa2V5OnRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk/LmhvdExpY2VuY2VLZXksdXNlcnNfYWxsb3dl''@;'; put 'put ''ZDp0aGlzLl9saWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZHx8MSx2YWxpZF91bnRpbDpTcCgpKCkuYWRkKDEsInllYXIiKS5mb3JtYXQoIllZWVktTU0tREQiKSxzaXRlX2lkOiIiLHNpdGVfaWRfbXVsdGlwbGU6W119LHRoaXMuaXNBcHBBY3RpdmF0ZWQ9bmV3ICRpKG51bGwpLHRoaXMuaXNB''@;'; put 'put ''cHBPdmVyQ2FwYWNpdHk9bmV3ICRpKCExKSx0aGlzLmN1cnJlbnRVc2VyQ2FuUmVnaXN0ZXI9bmV3ICRpKCExKSx0aGlzLmFwcExvY2tlZD1uZXcgJGkoITEpLHRoaXMubGljZW5zZUV4cGlyZXNJbkRheXM9bmV3ICRpKG51bGwpLHRoaXMuaXNBcHBGcmVlVGllcj1uZXcgJGkoITEpLHRoaXMu''@;'; put 'put ''bGljZW5jZVByb2JsZW09bmV3ICRpKG51bGwpLHRoaXMuaG90X2xpY2Vuc2Vfa2V5PW5ldyAkaSh2b2lkIDApLHRoaXMubGljZW5jZVN0YXRlPW5ldyAkaSh0aGlzLl9saWNlbmNlU3RhdGUpLHRoaXMuc2FzU2VydmljZS5pbmNvcnJlY3RTaXRlSWRFbWl0dGVyLnN1YnNjcmliZShnPT57aWYo''@;'; put 'put ''bnVsbCE9PXRoaXMuaXNBcHBBY3RpdmF0ZWQudmFsdWUmJiF0aGlzLmlzQXBwRnJlZVRpZXIudmFsdWUpe2NvbnN0IEU9YC9saWNlbnNpbmcva2V5P2Vycm9yPW1pc3NtYXRjaCZtaXNzbWF0Y2hJZD0ke2d9JmZvcmNlPXRydWVgO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dChFKSx0aGlzLmRl''@;'; put 'put ''YWN0aXZhdGVBcHAoRSl9fSl9YWN0aXZhdGlvbihyKXt2YXIgaT10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtpLmZyZWVUaWVyTGljZW5jZURhdGEuaG90X2xpY2Vuc2Vfa2V5PWkuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk/LmhvdExpY2VuY2VLZXkseWllbGQg''@;'; put 'put ''aS5zZXRTdGFydHVwc2VydmljZVJ1bGVzKHIpLHlpZWxkIGkubGljZW5zaW5nKHIuZ2xvYnZhcnMsci5TWVNTSVRFKX0pKCl9c2V0U3RhcnR1cHNlcnZpY2VSdWxlcyhyKXt0aGlzLl9saWNlbmNlU3RhdGUuZWRpdFJlY29yZD0iWUVTIiE9PXIuZ2xvYnZhcnNbMF0uRENfUkVTVFJJQ1RfRURJ''@;'; put 'put ''VFJFQ09SRH1saWNlbnNpbmcocixpKXt2YXIgbz10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtpZighcnx8IXJbMF0pe2NvbnN0IGw9J0Vycm9yIGdldHRpbmcgIkdsb2J2YXJzIiBmcm9tIHN0YXJ0dXBzZXJ2aWNlIHJlc3BvbnNlLic7cmV0dXJuIGNvbnNvbGUuZXJyb3IobCksby5pc0Fw''@;'; put 'put ''cEFjdGl2YXRlZC5uZXh0KCExKSx2b2lkIG8ucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9saWNlbnNpbmcva2V5P2Vycm9yPWludmFsaWQmZGV0YWlscz0ke2J0b2EobCl9YCl9bGV0IGE9clswXTtyZXR1cm4gYS5MSUNFTkNFX0tFWSYmKGEuTElDRU5DRV9LRVk9YS5MSUNFTkNFX0tFWS50cmlt''@;'; put 'put ''KCkpLGEuQUNUSVZBVElPTl9LRVkmJihhLkFDVElWQVRJT05fS0VZPWEuQUNUSVZBVElPTl9LRVkudHJpbSgpKSx2b2lkIDA9PT1hLkxJQ0VOQ0VfS0VZfHx2b2lkIDA9PT1hLkFDVElWQVRJT05fS0VZfHxudWxsPT1hLlJFR0lTVEVSQ09VTlR8fG51bGw9PWEuSVNSRUdJU1RFUkVEPyhjb25z''@;'; put 'put ''b2xlLmVycm9yKCJTb21lIG9mIGdsb2J2YXJzIGFyZSBub3QgcHJlc2VudCIpLG8uaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZCBvLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIlNvbWUgb2YgdGhlIGdsb2J2YXJzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgc3RhcnR1''@;'; put 'put ''cHNlcnZpY2UiKSk6YS5MSUNFTkNFX0tFWSYmYS5BQ1RJVkFUSU9OX0tFWT8oby5saWNlbmNlS2V5PWEuTElDRU5DRV9LRVksby5hY3RpdmF0aW9uS2V5PWEuQUNUSVZBVElPTl9LRVksdm9pZCh5aWVsZCBvLmRlY3J5cHRMaWNlbnNlS2V5KGEuTElDRU5DRV9LRVksYS5BQ1RJVkFUSU9OX0tF''@;'; put 'put ''WSkudGhlbihmdW5jdGlvbigpe3ZhciBsPUNyKGZ1bmN0aW9uKih1KXt5aWVsZCBvLmFwcGxpY2F0aW9uQWN0aXZhdGlvbih1LGEsaSl9KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxmdW5jdGlvbigpe3ZhciBsPUNyKGZ1bmN0aW9uKih1''@;'; put 'put ''KXtjb25zdCBnPWBFcnJvciBkZWNyeXB0aW5nIGxpY2Vuc2Uga2V5LiAke3V9YDtjb25zb2xlLmVycm9yKGcpO2NvbnN0IEU9YC9saWNlbnNpbmcva2V5P2Vycm9yPWludmFsaWQmZGV0YWlscz0ke2J0b2EoZyl9JmZvcmNlPXRydWVgO28ubGljZW5jZVByb2JsZW0ubmV4dChFKSxzZXRUaW1l''@;'; put 'put ''b3V0KCgpPT57by5hcHBsaWNhdGlvbkFjdGl2YXRpb24oby5mcmVlVGllckxpY2VuY2VEYXRhLGEsaSwhMCksby5yb3V0ZXIubmF2aWdhdGVCeVVybChFKX0pfSk7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKSk6eWllbGQgby5hcHBsaWNh''@;'; put 'put ''dGlvbkFjdGl2YXRpb24oby5mcmVlVGllckxpY2VuY2VEYXRhLGEsaSl9KSgpfWFwcGxpY2F0aW9uQWN0aXZhdGlvbihyLGksbyxhKXthfHwoYT0hMSksdGhpcy5zZXRTaXRlSWQociksIXIuZGVtbyYmaSYmbyYmdGhpcy5oYW5kbGVTaXRlSWRNaXNzbWF0Y2gocixpLG8sYSk7bGV0IGw9dm9p''@;'; put 'put ''ZCAwIT09ci5ob3RfbGljZW5zZV9rZXk/ci5ob3RfbGljZW5zZV9rZXk6dGhpcy5ob3RfbGljZW5zZV9rZXkudmFsdWU7bHx8KGw9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKT8uaG90TGljZW5jZUtleSksdGhpcy5ob3RfbGljZW5zZV9rZXkubmV4dChsKSx0''@;'; put 'put ''aGlzLnVzZXJDb3VudExpbWl0YXRpb24mJnRoaXMuaGFuZGxlVXNlcnNBbGxvd2VkKHIpLHRoaXMubGljZW5zZUtleURhdGE9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShyKSx3aW5kb3cuYXBwaW5mbygpO2NvbnN0e2V4cGlyeV9kYXRlOnUsZGF5c1RvRXhwaXJ5Omd9PXRoaXMuY2Fs''@;'; put 'put ''Y3VsYXRlRXhwaXJ5KHIpO2lmKHdpbmRvdy5saWNlbnNlRXhwaXJlc0luPWcsdGhpcy5saWNlbnNlRXhwaXJlc0luRGF5cy5uZXh0KGcpLGc8PTApcmV0dXJuIGNvbnNvbGUuZXJyb3IoIkxpY2Vuc2Uga2V5IGhhcyBleHBpcmVkIiksdm9pZChpJiZvJiZ0aGlzLmhhbmRsZUV4cGlyeSh1LGks''@;'; put 'put ''byxhKSk7dGhpcy5pc0FwcEZyZWVUaWVyLm5leHQoISFyLmRlbW8pLGkmJnRoaXMuaGFuZGxlVXNlclJlZ2lzdHJhdGlvbihyLGksYSksdGhpcy5kZWNvZGVMaWNlbmNlRmVhdHVyZXMociksdGhpcy5saWNlbmNlU3RhdGUubmV4dCh0aGlzLl9saWNlbmNlU3RhdGUpfWRlY29kZUxpY2VuY2VG''@;'; put 'put ''ZWF0dXJlcyhyKXtpZihyLmZlYXR1cmVzKXRoaXMuX2xpY2VuY2VTdGF0ZT17Li4udGhpcy5fbGljZW5jZVN0YXRlLC4uLnZ3ZShyLmZlYXR1cmVzKX0sdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygiTGljZW5jZSBzdGF0ZToiLHRoaXMuX2xpY2VuY2VTdGF0ZSk7ZWxzZXtpZihyLmRlbW8pcmV0''@;'; put 'put ''dXJuO3RoaXMuX2xpY2VuY2VTdGF0ZT10aGlzLmFsbEZlYXR1cmVzT259fWRlY3J5cHRMaWNlbnNlS2V5KHIsaSl7dmFyIG89dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgYT1DcihmdW5jdGlvbioobCx1KXtpZighd2luZG93LmNyeXB0b3x8IXdpbmRvdy5jcnlwdG8u''@;'; put 'put ''c3VidGxlKXRyeXtsZXQgZWU9YXRvYihyLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIikpO2woSlNPTi5wYXJzZShlZSkpfWNhdGNoKGVlKXt1KCJFcnJvciBwYXJzaW5nIGh0dHAgbGljZW5zZSBrZXkgZGF0YS4gIitlZSl9bGV0IEUsZz15aWVsZCBvLmJhc2U2NFRvQXJyYXlCdWZmZXIo''@;'; put 'put ''cikuY2F0Y2goZWU9Pnt1KGVlKX0pO2NvbnN0IE89eWllbGQgby5iYXNlNjRUb0FycmF5QnVmZmVyKGkpLmNhdGNoKGVlPT57dShlZSl9KTtpZighTylyZXR1cm4gdm9pZCB1KCJNaXNzaW5nIGFjdGl2YXRpb24ga2V5Iik7bGV0IFo7RT1PO3RyeXtaPXlpZWxkIHdpbmRvdy5jcnlwdG8uc3Vi''@;'; put 'put ''dGxlLmltcG9ydEtleSgicGtjczgiLEUse25hbWU6IlJTQS1PQUVQIixoYXNoOiJTSEEtMjU2In0sITAsWyJkZWNyeXB0Il0pfWNhdGNoKGVlKXt1KCJVbmFibGUgdG8gaW1wb3J0IGRlY3J5cHRpb24ga2V5OiAiK2VlKX1pZihaKWlmKGcpdHJ5e3dpbmRvdy5jcnlwdG8uc3VidGxlLmRlY3J5''@;'; put 'put ''cHQoe25hbWU6IlJTQS1PQUVQIixoYXNoOntuYW1lOiJTSEEtMjU2In19LFosZykudGhlbihlZT0+e2xldCB2ZT0obmV3IEtkdC5UZXh0RGVjb2RlcikuZGVjb2RlKGVlKTt0cnl7bChKU09OLnBhcnNlKHZlKSl9Y2F0Y2goTWUpe3UoIkVycm9yIHBhcnNpbmcgbGljZW5zZSBrZXkgZGF0YS4g''@;'; put 'put ''IitNZSl9fSxlZT0+e3UoZWUpfSl9Y2F0Y2goZWUpe3UoZWUpfWVsc2UgdSgiTGljZW5zZSBrZXkgYnl0ZXMgbWlzc2luZyIpO2Vsc2UgdSgiVW5hYmxlIHRvIGltcG9ydCBkZWNyeXB0aW9uIGtleSIpfSk7cmV0dXJuIGZ1bmN0aW9uKGwsdSl7cmV0dXJuIGEuYXBwbHkodGhpcyxhcmd1bWVu''@;'; put 'put ''dHMpfX0oKSl9Z2V0SG90TGljZW5zZUtleSgpe3JldHVybiB0aGlzLmhvdF9saWNlbnNlX2tleS52YWx1ZX1nZXRMaWNlbnNlS2V5RGF0YSgpe3JldHVybiB0aGlzLmxpY2Vuc2VLZXlEYXRhfWRlYWN0aXZhdGVBcHAocil7dGhpcy5fbGljZW5jZVN0YXRlPWZpZSx0aGlzLmFwcGxpY2F0aW9u''@;'; put 'put ''QWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEpLHImJnRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwocil9Y2hlY2tMaW5lYWdlTGltaXQocil7aWYodGhpcy5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdD09PTEvMClyZXR1cm4hMTtjb25zdCBpPWxvY2Fs''@;'; put 'put ''U3RvcmFnZS5nZXRJdGVtKCJsaW5lYWdlX3JlbmRlcnMiKSxvPVNwKCkoKS52YWx1ZU9mKCk7aWYoIWkpcmV0dXJuIHJ8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihvLDEpLCExO2NvbnN0IGE9cGFyc2VJbnQoaS5zcGxpdCgiLCIpWzBdKSxsPXBhcnNlSW50KGkuc3BsaXQoIiwiKVsxXSk7cmV0''@;'; put 'put ''dXJuIFNwKCkoYSkuaXNTYW1lKFNwKCkoKSwiZGF5Iik/bD49dGhpcy5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdHx8KHJ8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihvLGwrMSksITEpOihyfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIobywxKSwhMSl9c2V0TGluZWFnZVJl''@;'; put 'put ''bmRlcihyLGkpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJsaW5lYWdlX3JlbmRlcnMiLGAke3J9LCR7aX1gKX1iYXNlNjRUb0FycmF5QnVmZmVyKHIpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBpPUNyKGZ1bmN0aW9uKihvLGEpe28oaGllLkQocikpfSk7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKG8sYSl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9YXJyYXlCdWZmZXJUb0Jhc2U2NChyKXtyZXR1cm4gbmV3IFByb21pc2UoKGksbyk9PntpKGhpZS5sKHIpKX0pfXNldFNpdGVJZChyKXtyLnNpdGVfaWRfbXVsdGlwbGU/dGhpcy5zYXNTZXJ2aWNlLnNldExpY2Vu''@;'; put 'put ''c2VTaXRlSWQoci5zaXRlX2lkX211bHRpcGxlKTpyLnNpdGVfaWQmJnRoaXMuc2FzU2VydmljZS5zZXRMaWNlbnNlU2l0ZUlkKHIuc2l0ZV9pZCl9aGFuZGxlU2l0ZUlkTWlzc21hdGNoKHIsaSxvLGEpe2xldCBsPSExLHU9ITE7aWYoKCFyLnNpdGVfaWR8fHIuc2l0ZV9pZCE9PW8pJiYobD0h''@;'; put 'put ''MCksKCFyLnNpdGVfaWRfbXVsdGlwbGV8fCFyLnNpdGVfaWRfbXVsdGlwbGUuaW5jbHVkZXMobykpJiYodT0hMCksbCYmdSlyZXR1cm4gY29uc29sZS5lcnJvcigiVGhlIGtleSBwcm92aWRlZCBpcyBmb3IgZGlmZmVyZW50IG9yZ2FuaXphdGlvbi4iKSx2b2lkIHNldFRpbWVvdXQoKCk9Pntj''@;'; put 'put ''b25zdCBnPSIvbGljZW5zaW5nL2tleT9lcnJvcj1taXNzbWF0Y2gmZm9yY2U9dHJ1ZSI7dGhpcy5saWNlbmNlUHJvYmxlbS5uZXh0KGcpLHRoaXMuX2xpY2VuY2VTdGF0ZT1maWUsdGhpcy5hcHBsaWNhdGlvbkFjdGl2YXRpb24odGhpcy5mcmVlVGllckxpY2VuY2VEYXRhLGksbywhMCksYXx8''@;'; put 'put ''dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChnKX0pfWNhbGN1bGF0ZUV4cGlyeShyKXtsZXQgaT1TcCgpKHIudmFsaWRfdW50aWwsIllZWVktTU0tREQiKS5zdGFydE9mKCJkYXkiKSxvPVNwKCkoKS5zdGFydE9mKCJkYXkiKSxhPWkuZGlmZihvLCJkYXlzIik7cmV0dXJue2V4cGlyeV9kYXRl''@;'; put 'put ''OmksZGF5c1RvRXhwaXJ5OmF9fWhhbmRsZUV4cGlyeShyLGksbyxhKXtzZXRUaW1lb3V0KCgpPT57Y29uc3QgbD1gL2xpY2Vuc2luZy9rZXk/Zm9yY2U9dHJ1ZSZlcnJvcj1leHBpcmVkJmRldGFpbHM9JHtidG9hKCJFeHBpcnkgZGF0ZTogIityLmZvcm1hdCgiREQvTU0vWVlZWSIpKX1gO3Ro''@;'; put 'put ''aXMubGljZW5jZVByb2JsZW0ubmV4dChsKSx0aGlzLmFwcGxpY2F0aW9uQWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEsaSxvLCEwKSxhfHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGwpfSl9aGFuZGxlVXNlcnNBbGxvd2VkKHIpe3IuZGVtbyYmdm9pZCAwIT09dGhpcy5f''@;'; put 'put ''bGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWQmJihyLnVzZXJzX2FsbG93ZWQ9ci51c2Vyc19hbGxvd2VkPjA/ci51c2Vyc19hbGxvd2VkOnRoaXMuX2xpY2VuY2VTdGF0ZS51c2Vyc19hbGxvd2VkKSx0aGlzLl9saWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZD1yLnVzZXJzX2FsbG93ZWR9aGFu''@;'; put 'put ''ZGxlVXNlclJlZ2lzdHJhdGlvbihyLGksbyl7aWYodGhpcy51c2VyQ291bnRMaW1pdGF0aW9uJiYoaS5SRUdJU1RFUkNPVU5UPnIudXNlcnNfYWxsb3dlZD8oY29uc29sZS53YXJuKCJBcHAgaGFzIG1vcmUgdXNlcnMgcmVnaXN0ZXJlZCB0aGVuIGxpY2Vuc2VkLiIpLHRoaXMuaXNBcHBPdmVy''@;'; put 'put ''Q2FwYWNpdHkubmV4dCghMCkpOmkuUkVHSVNURVJDT1VOVD09PXIudXNlcnNfYWxsb3dlZCYmY29uc29sZS53YXJuKCJBcHAgaGFzIGhpdCBsaW1pdCBvZiB1c2VycyByZWdpc3RlcmVkLiIpKSwxIT09aS5JU1JFR0lTVEVSRUQpcmV0dXJuIGkuUkVHSVNURVJDT1VOVDxyLnVzZXJzX2FsbG93''@;'; put 'put ''ZWR8fCF0aGlzLnVzZXJDb3VudExpbWl0YXRpb24/KGNvbnNvbGUubG9nKCJVc2VyIGNhbiByZWdpc3RlciIpLHRoaXMuY3VycmVudFVzZXJDYW5SZWdpc3Rlci5uZXh0KCEwKSx0aGlzLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQob3x8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgi''@;'; put 'put ''L2xpY2Vuc2luZy9yZWdpc3RlciIpKSk6KHRoaXMuY3VycmVudFVzZXJDYW5SZWdpc3Rlci5uZXh0KCExKSx0aGlzLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQob3x8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy9saW1pdCIpKSk7dGhpcy5pc0FwcEFjdGl2YXRl''@;'; put 'put ''ZC5uZXh0KCEwKX1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKShvcih4Myksb3IoRWIpLG9yKHVkKSxvcihpYyksb3IoZmgpLG9yKHZjKSl9LHRoaXMuXHUwMjc1cHJvdj1Kbih7dG9rZW46ZSxmYWN0b3J5OmUuXHUwMjc1ZmFjLHBy''@;'; put 'put ''b3ZpZGVkSW46InJvb3QifSkpfXJldHVybiBuKCksZX0pKCksdXo9KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3RvcihyLGksbyxhLGwsdSxnLEUpe3RoaXMubGljZW5jZVNlcnZpY2U9cix0aGlzLmV2ZW50U2VydmljZT1pLHRoaXMuc2FzU2VydmljZT1vLHRoaXMubG9nZ2VyU2Vydmlj''@;'; put 'put ''ZT1hLHRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlPWwsdGhpcy5yb3V0ZXI9dSx0aGlzLmFwcFN0b3JlU2VydmljZT1nLHRoaXMuc3RhcnR1cENoZWNrU2VydmljZT1FLHRoaXMuc3lzc2l0ZT1uZXcgJGkobnVsbCksdGhpcy5lbnZpcm9ubWVudEluZm89e30sdGhpcy5yZXRyeU9wdGlvbnM9e30s''@;'; put 'put ''dGhpcy5zdWJzY3JpYmUoKSx0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKFo9PntaIGluc3RhbmNlb2YgQjUmJiIvZGVwbG95Ij09PVoudXJsJiZ0aGlzLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpfSk7Y29uc3QgTz10aGlzLmFwcFNldHRpbmdzU2VydmljZS5zZXR0aW5n''@;'; put 'put ''cy52YWx1ZTtPLnBlcnNpc3RTZWxlY3RlZFRoZW1lJiZ0aGlzLmV2ZW50U2VydmljZS50b2dnbGVEYXJrTW9kZShPLnNlbGVjdGVkVGhlbWUhPT1XRS5saWdodCYmTy5zZWxlY3RlZFRoZW1lPT09V0UuZGFyayl9c2FzU2VydmljZUluaXQoKXt0aGlzLnNhc1NlcnZpY2Uuc2FzU2VydmljZUlu''@;'; put 'put ''aXQoKX1zdWJzY3JpYmUoKXt0aGlzLnNhc1NlcnZpY2UubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRlci5zdWJzY3JpYmUoKCk9Pnt0aGlzLnN0YXJ0VXBEYXRhKCl9KSx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdFNpdGVJZEVtaXR0ZXIuc3Vic2NyaWJlKHI9Pnt0aGlzLnBhdGNoU3lzc2l0ZShy''@;'; put 'put ''KX0pfWdldEVudmlyb25tZW50SW5mbygpe3JldHVybiB0aGlzLmVudmlyb25tZW50SW5mb31wYXRjaFN5c3NpdGUocil7bGV0IGk9dGhpcy5zeXNzaXRlLmdldFZhbHVlKCk7aSYmKGkuaW5jbHVkZXMocil8fChpLnB1c2gociksdGhpcy5zeXNzaXRlLm5leHQoaSkpKX1zdGFydFVwRGF0YSgp''@;'; put 'put ''e3ZhciByPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe2xldCBpPSExO3lpZWxkIHFkdCgoKT0+ci5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9zdGFydHVwc2VydmljZSIsbnVsbCksci5yZXRyeU9wdGlvbnMpLnRoZW4oZnVuY3Rpb24oKXt2YXIgbz1DcihmdW5jdGlvbiooYSl7Y29u''@;'; put 'put ''c3QgbD1td2UoYS5hZGFwdGVyUmVzcG9uc2UpO2lmKGwpcmV0dXJuIGk9ITAsY29uc29sZS5lcnJvcigic3RhcnRVcERhdGE6IHN0YXJ0dXBzZXJ2aWNlIHJldHVybmVkIG1hbGZvcm1lZCByZXNwb25zZToiLGwpLHIuc3RhcnR1cENoZWNrU2VydmljZS51cGRhdGVTdGVwKDIsImVycm9yIiwi''@;'; put 'put ''TWFsZm9ybWVkIHJlc3BvbnNlIiksci5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLGwpLHZvaWQgci5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKTtyLnN5c3NpdGUubmV4dChbYS5hZGFwdGVyUmVzcG9uc2UuU1lTU0lURV0pO2xldCB1PVtdO2lmKCgh''@;'; put 'put ''YS5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnN8fGEuYWRhcHRlclJlc3BvbnNlLmdsb2J2YXJzJiYhYS5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnNbMF0pJiZ1LnB1c2goIkdsb2J2YXJzIiksYS5hZGFwdGVyUmVzcG9uc2Uuc2FzZGF0YXNldHN8fHUucHVzaCgiU2FzZGF0YXNldHMiKSxhLmFk''@;'; put 'put ''YXB0ZXJSZXNwb25zZS5zYXNsaWJzfHx1LnB1c2goIlNhc2xpYnMiKSxhLmFkYXB0ZXJSZXNwb25zZS54bG1hcHN8fHUucHVzaCgiWExNYXBzIiksdS5sZW5ndGg+MClyZXR1cm4gaT0hMCxjb25zb2xlLmVycm9yKCJzdGFydFVwRGF0YTogc3RhcnR1cHNlcnZpY2UgbWlzc2luZyBwcm9wZXJ0''@;'; put 'put ''aWVzOiIsdS5qb2luKCIsICIpKSxyLnN0YXJ0dXBDaGVja1NlcnZpY2UudXBkYXRlU3RlcCgyLCJlcnJvciIsYE1pc3Npbmc6ICR7dS5qb2luKCIsICIpfWApLHIuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIixgJHt1LmpvaW4oIiwgIil9IGFyZSBub3QgcHJlc2VudCBpbiB0''@;'; put 'put ''aGUgc3RhcnR1cHNlcnZpY2VgKSx2b2lkIHIubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSk7Y29uc3QgZz1yLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpO3IuZW52aXJvbm1lbnRJbmZvPXtTWVNTSVRFOmEuYWRhcHRlclJlc3BvbnNlLlNZU1NJ''@;'; put 'put ''VEUsU1lTU0NQTDphLmFkYXB0ZXJSZXNwb25zZS5TWVNTQ1BMLFNZU1RDUElQSE9TVE5BTUU6YS5hZGFwdGVyUmVzcG9uc2UuU1lTVENQSVBIT1NUTkFNRSxTWVNWTE9ORzphLmFkYXB0ZXJSZXNwb25zZS5TWVNWTE9ORyxNRU1TSVpFOmEuYWRhcHRlclJlc3BvbnNlLk1FTVNJWkUsU1lTUFJP''@;'; put 'put ''Q0VTU01PREU6YS5hZGFwdGVyUmVzcG9uc2UuU1lTUFJPQ0VTU01PREUsU1lTSE9TVE5BTUU6YS5hZGFwdGVyUmVzcG9uc2UuU1lTSE9TVE5BTUUsU1lTVVNFUklEOmEuYWRhcHRlclJlc3BvbnNlLlNZU1VTRVJJRCxTWVNIT1NUSU5GT0xPTkc6YS5hZGFwdGVyUmVzcG9uc2UuU1lTSE9TVElO''@;'; put 'put ''Rk9MT05HLFNZU0VOQ09ESU5HOmEuYWRhcHRlclJlc3BvbnNlLlNZU0VOQ09ESU5HLEFVVE9FWEVDOmEuYWRhcHRlclJlc3BvbnNlLkFVVE9FWEVDLFRJTUVaT05FOmEuYWRhcHRlclJlc3BvbnNlLmdsb2J2YXJzWzBdLlRJTUVaT05FLFNZU1RJTUVaT05FSURFTlQ6YS5hZGFwdGVyUmVzcG9u''@;'; put 'put ''c2UuZ2xvYnZhcnNbMF0uU1lTVElNRVpPTkVJREVOVCxTWVNUSU1FWk9ORU9GRlNFVDphLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc1swXS5TWVNUSU1FWk9ORU9GRlNFVCxJU0FETUlOOmEuYWRhcHRlclJlc3BvbnNlLmdsb2J2YXJzWzBdLklTQURNSU4sRENfQURNSU5fR1JPVVA6YS5hZGFw''@;'; put 'put ''dGVyUmVzcG9uc2UuZ2xvYnZhcnNbMF0uRENfQURNSU5fR1JPVVAsQVBQX0xPQzpnPy5hcHBMb2N9O2xldCBaLGVlLEU9YS5hZGFwdGVyUmVzcG9uc2Uuc2FzZGF0YXNldHMsTz17fTtmb3IobGV0IFdlIG9mIEUpT1tXZS5MSUJSRUZdfHwoT1tXZS5MSUJSRUZdPVtdKSxPW1dlLkxJQlJFRl0u''@;'; put 'put ''cHVzaChXZS5EU04pO2xldCB2ZT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KE8pKSxNZT1bXTtmb3IobGV0IFdlIG9mIE9iamVjdC5rZXlzKHZlKSlNZS5wdXNoKHtMSUJSQVJZUkVGOldlLHRhYmxlczp2ZVtXZV19KTtsZXQgSGU9TWU7Wj1PLGVlPU9iamVjdC5rZXlzKE8pLHZvaWQgMCE9''@;'; put 'put ''PVomJihVbi5lZGl0b3IubGlic0FuZFRhYmxlcz1aKSxVbi54bG1hcHM9YS5hZGFwdGVyUmVzcG9uc2UueGxtYXBzLm1hcChXZT0+KHtpZDpXZVswXSxkZXNjcmlwdGlvbjpXZVsxXSx0YXJnZXREUzpXZVsyXX0pKSxVbi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXM9SGUsVW4uZWRpdG9yLmxp''@;'; put 'put ''YnJhcmllcz1lZSxVbi5lZGl0b3Iuc3RhcnR1cFNldD0hMCxVbi5kY0xpYj1hLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc1swXS5EQ0xJQix5aWVsZCByLmxpY2VuY2VTZXJ2aWNlLmFjdGl2YXRpb24oYS5hZGFwdGVyUmVzcG9uc2UpfSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBvLmFw''@;'; put 'put ''cGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKG89PntpPSEwLGNvbnNvbGUuZXJyb3IoInN0YXJ0VXBEYXRhOiBzdGFydHVwc2VydmljZSByZXF1ZXN0IGZhaWxlZDoiLG8pLHIuc3RhcnR1cENoZWNrU2VydmljZS51cGRhdGVTdGVwKDIsImVycm9yIiwiUmVxdWVzdCBmYWlsZWQiKSxy''@;'; put 'put ''LmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIlRoZXJlIGlzIGFuIGlzc3VlIHdpdGggc3RhcnR1cHNlcnZpY2UgcmVzcG9uc2UiKSxyLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpfSksci5sb2dnZXJTZXJ2aWNlLmxvZygiQWN0aXZhdGVkOiIsci5s''@;'; put 'put ''aWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZSksaXx8KHIuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksci5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZT9yLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpJiZyLnJvdXRlci5uYXZpZ2F0''@;'; put 'put ''ZUJ5VXJsKCIvaG9tZSIpOiFyLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpJiYhci5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSYmci5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc2luZyZmb3JjZT10cnVlIikpfSkoKX1zdGF0aWMj''@;'; put 'put ''ZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKShvcihGMiksb3IodWQpLG9yKGljKSxvcih4Myksb3IoSlUpLG9yKHZjKSxvcihFYiksb3IoU2llKSl9LHRoaXMuXHUwMjc1cHJvdj1Kbih7dG9rZW46ZSxmYWN0b3J5OmUuXHUwMjc1ZmFjfSkpfXJl''@;'; put 'put ''dHVybiBuKCksZX0pKCksUDI9KCgpPT57Y2xhc3Mgbntyb3V0ZXI7cm91dGU7dGFiSW5kZXhBdHRyaWJ1dGU7cmVuZGVyZXI7ZWw7bG9jYXRpb25TdHJhdGVneTtyZWFjdGl2ZUhyZWY9QjEobnVsbCk7Z2V0IGhyZWYoKXtyZXR1cm4gTnUodGhpcy5yZWFjdGl2ZUhyZWYpfXNldCBocmVmKHQp''@;'; put 'put ''e3RoaXMucmVhY3RpdmVIcmVmLnNldCh0KX10YXJnZXQ7cXVlcnlQYXJhbXM7ZnJhZ21lbnQ7cXVlcnlQYXJhbXNIYW5kbGluZztzdGF0ZTtpbmZvO3JlbGF0aXZlVG87aXNBbmNob3JFbGVtZW50O3N1YnNjcmlwdGlvbjtvbkNoYW5nZXM9bmV3IE1yO2FwcGxpY2F0aW9uRXJyb3JIYW5kbGVy''@;'; put 'put ''PXNuKF9wKTtvcHRpb25zPXNuKHpFLHtvcHRpb25hbDohMH0pO2NvbnN0cnVjdG9yKHQscixpLG8sYSxsKXt0aGlzLnJvdXRlcj10LHRoaXMucm91dGU9cix0aGlzLnRhYkluZGV4QXR0cmlidXRlPWksdGhpcy5yZW5kZXJlcj1vLHRoaXMuZWw9YSx0aGlzLmxvY2F0aW9uU3RyYXRlZ3k9bCx0''@;'; put 'put ''aGlzLnJlYWN0aXZlSHJlZi5zZXQoc24obmV3IERydCgiaHJlZiIpLHtvcHRpb25hbDohMH0pKTtjb25zdCB1PWEubmF0aXZlRWxlbWVudC50YWdOYW1lPy50b0xvd2VyQ2FzZSgpO3RoaXMuaXNBbmNob3JFbGVtZW50PSJhIj09PXV8fCJhcmVhIj09PXV8fCEoIm9iamVjdCIhPXR5cGVvZiBj''@;'; put 'put ''dXN0b21FbGVtZW50c3x8IWN1c3RvbUVsZW1lbnRzLmdldCh1KT8ub2JzZXJ2ZWRBdHRyaWJ1dGVzPy5pbmNsdWRlcz8uKCJocmVmIikpLHRoaXMuaXNBbmNob3JFbGVtZW50P3RoaXMuc2V0VGFiSW5kZXhJZk5vdE9uTmF0aXZlRWwoIjAiKTp0aGlzLnN1YnNjcmliZVRvTmF2aWdhdGlvbkV2''@;'; put 'put ''ZW50c0lmTmVjZXNzYXJ5KCl9c3Vic2NyaWJlVG9OYXZpZ2F0aW9uRXZlbnRzSWZOZWNlc3NhcnkoKXtpZih2b2lkIDAhPT10aGlzLnN1YnNjcmlwdGlvbnx8IXRoaXMuaXNBbmNob3JFbGVtZW50KXJldHVybjtsZXQgdD10aGlzLnByZXNlcnZlRnJhZ21lbnQ7Y29uc3Qgcj1pPT4ibWVyZ2Ui''@;'; put 'put ''PT09aXx8InByZXNlcnZlIj09PWk7dHx8PXIodGhpcy5xdWVyeVBhcmFtc0hhbmRsaW5nKSx0fHw9IXRoaXMucXVlcnlQYXJhbXNIYW5kbGluZyYmIXIodGhpcy5vcHRpb25zPy5kZWZhdWx0UXVlcnlQYXJhbXNIYW5kbGluZyksdCYmKHRoaXMuc3Vic2NyaXB0aW9uPXRoaXMucm91dGVyLmV2''@;'; put 'put ''ZW50cy5zdWJzY3JpYmUoaT0+e2kgaW5zdGFuY2VvZiBCNSYmdGhpcy51cGRhdGVIcmVmKCl9KSl9cHJlc2VydmVGcmFnbWVudD0hMTtza2lwTG9jYXRpb25DaGFuZ2U9ITE7cmVwbGFjZVVybD0hMTtzZXRUYWJJbmRleElmTm90T25OYXRpdmVFbCh0KXtudWxsIT10aGlzLnRhYkluZGV4QXR0''@;'; put 'put ''cmlidXRlfHx0aGlzLmlzQW5jaG9yRWxlbWVudHx8dGhpcy5hcHBseUF0dHJpYnV0ZVZhbHVlKCJ0YWJpbmRleCIsdCl9bmdPbkNoYW5nZXModCl7dGhpcy5pc0FuY2hvckVsZW1lbnQmJih0aGlzLnVwZGF0ZUhyZWYoKSx0aGlzLnN1YnNjcmliZVRvTmF2aWdhdGlvbkV2ZW50c0lmTmVjZXNz''@;'; put 'put ''YXJ5KCkpLHRoaXMub25DaGFuZ2VzLm5leHQodGhpcyl9cm91dGVyTGlua0lucHV0PW51bGw7c2V0IHJvdXRlckxpbmsodCl7bnVsbD09dD8odGhpcy5yb3V0ZXJMaW5rSW5wdXQ9bnVsbCx0aGlzLnNldFRhYkluZGV4SWZOb3RPbk5hdGl2ZUVsKG51bGwpKToodGhpcy5yb3V0ZXJMaW5rSW5w''@;'; put 'put ''dXQ9Q2IodCl8fEFycmF5LmlzQXJyYXkodCk/dDpbdF0sdGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbCgiMCIpKX1vbkNsaWNrKHQscixpLG8sYSl7Y29uc3QgbD10aGlzLnVybFRyZWU7aWYobnVsbD09PWx8fHRoaXMuaXNBbmNob3JFbGVtZW50JiYoMCE9PXR8fHJ8fGl8fG98fGF8''@;'; put 'put ''fCJzdHJpbmciPT10eXBlb2YgdGhpcy50YXJnZXQmJiJfc2VsZiIhPXRoaXMudGFyZ2V0KSlyZXR1cm4hMDtjb25zdCB1PXtza2lwTG9jYXRpb25DaGFuZ2U6dGhpcy5za2lwTG9jYXRpb25DaGFuZ2UscmVwbGFjZVVybDp0aGlzLnJlcGxhY2VVcmwsc3RhdGU6dGhpcy5zdGF0ZSxpbmZvOnRo''@;'; put 'put ''aXMuaW5mb307cmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwobCx1KT8uY2F0Y2goZz0+e3RoaXMuYXBwbGljYXRpb25FcnJvckhhbmRsZXIoZyl9KSwhdGhpcy5pc0FuY2hvckVsZW1lbnR9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX11cGRh''@;'; put 'put ''dGVIcmVmKCl7Y29uc3QgdD10aGlzLnVybFRyZWU7dGhpcy5yZWFjdGl2ZUhyZWYuc2V0KG51bGwhPT10JiZ0aGlzLmxvY2F0aW9uU3RyYXRlZ3k/dGhpcy5sb2NhdGlvblN0cmF0ZWd5Py5wcmVwYXJlRXh0ZXJuYWxVcmwodGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKHQpKT8/IiI6bnVsbCl9''@;'; put 'put ''YXBwbHlBdHRyaWJ1dGVWYWx1ZSh0LHIpe2NvbnN0IGk9dGhpcy5yZW5kZXJlcixvPXRoaXMuZWwubmF0aXZlRWxlbWVudDtudWxsIT09cj9pLnNldEF0dHJpYnV0ZShvLHQscik6aS5yZW1vdmVBdHRyaWJ1dGUobyx0KX1nZXQgdXJsVHJlZSgpe3JldHVybiBudWxsPT09dGhpcy5yb3V0ZXJM''@;'; put 'put ''aW5rSW5wdXQ/bnVsbDpDYih0aGlzLnJvdXRlckxpbmtJbnB1dCk/dGhpcy5yb3V0ZXJMaW5rSW5wdXQ6dGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZSh0aGlzLnJvdXRlckxpbmtJbnB1dCx7cmVsYXRpdmVUbzp2b2lkIDAhPT10aGlzLnJlbGF0aXZlVG8/dGhpcy5yZWxhdGl2ZVRvOnRoaXMu''@;'; put 'put ''cm91dGUscXVlcnlQYXJhbXM6dGhpcy5xdWVyeVBhcmFtcyxmcmFnbWVudDp0aGlzLmZyYWdtZW50LHF1ZXJ5UGFyYW1zSGFuZGxpbmc6dGhpcy5xdWVyeVBhcmFtc0hhbmRsaW5nLHByZXNlcnZlRnJhZ21lbnQ6dGhpcy5wcmVzZXJ2ZUZyYWdtZW50fSl9c3RhdGljIFx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKHplKHZjKSx6ZShwMSksdzUoInRhYmluZGV4IiksemUoTnQpLHplKG5vKSx6ZSh5cCkpfTtzdGF0aWMgXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsInJvdXRlckxpbmsiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVu''@;'; put 'put ''Y3Rpb24ocixpKXsxJnImJnd0KCJjbGljayIsZnVuY3Rpb24oYSl7cmV0dXJuIGkub25DbGljayhhLmJ1dHRvbixhLmN0cmxLZXksYS5zaGlmdEtleSxhLmFsdEtleSxhLm1ldGFLZXkpfSksMiZyJiZScigiaHJlZiIsaS5yZWFjdGl2ZUhyZWYoKSxyQikoInRhcmdldCIsaS50YXJnZXQpfSxp''@;'; put 'put ''bnB1dHM6e3RhcmdldDoidGFyZ2V0IixxdWVyeVBhcmFtczoicXVlcnlQYXJhbXMiLGZyYWdtZW50OiJmcmFnbWVudCIscXVlcnlQYXJhbXNIYW5kbGluZzoicXVlcnlQYXJhbXNIYW5kbGluZyIsc3RhdGU6InN0YXRlIixpbmZvOiJpbmZvIixyZWxhdGl2ZVRvOiJyZWxhdGl2ZVRvIixwcmVz''@;'; put 'put ''ZXJ2ZUZyYWdtZW50OlsyLCJwcmVzZXJ2ZUZyYWdtZW50IiwicHJlc2VydmVGcmFnbWVudCIsWjBdLHNraXBMb2NhdGlvbkNoYW5nZTpbMiwic2tpcExvY2F0aW9uQ2hhbmdlIiwic2tpcExvY2F0aW9uQ2hhbmdlIixaMF0scmVwbGFjZVVybDpbMiwicmVwbGFjZVVybCIsInJlcGxhY2VVcmwi''@;'; put 'put ''LFowXSxyb3V0ZXJMaW5rOiJyb3V0ZXJMaW5rIn0sZmVhdHVyZXM6W2l1XX0pfXJldHVybiBufSkoKSxKRT0oKCk9PntjbGFzcyBue3JvdXRlcjtlbGVtZW50O3JlbmRlcmVyO2NkcjtsaW5rO2xpbmtzO2NsYXNzZXM9W107cm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uO2xpbmtJbnB1dENoYW5n''@;'; put 'put ''ZXNTdWJzY3JpcHRpb247X2lzQWN0aXZlPSExO2dldCBpc0FjdGl2ZSgpe3JldHVybiB0aGlzLl9pc0FjdGl2ZX1yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucz17ZXhhY3Q6ITF9O2FyaWFDdXJyZW50V2hlbkFjdGl2ZTtpc0FjdGl2ZUNoYW5nZT1uZXcgS3I7Y29uc3RydWN0b3IodCxyLGksbyxh''@;'; put 'put ''KXt0aGlzLnJvdXRlcj10LHRoaXMuZWxlbWVudD1yLHRoaXMucmVuZGVyZXI9aSx0aGlzLmNkcj1vLHRoaXMubGluaz1hLHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPXQuZXZlbnRzLnN1YnNjcmliZShsPT57bCBpbnN0YW5jZW9mIEI1JiZ0aGlzLnVwZGF0ZSgpfSl9bmdBZnRlckNv''@;'; put 'put ''bnRlbnRJbml0KCl7UGEodGhpcy5saW5rcy5jaGFuZ2VzLFBhKG51bGwpKS5waXBlKE9FKCkpLnN1YnNjcmliZSh0PT57dGhpcy51cGRhdGUoKSx0aGlzLnN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKX0pfXN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKXt0aGlzLmxpbmtJbnB1''@;'; put 'put ''dENoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7Y29uc3QgdD1bLi4udGhpcy5saW5rcy50b0FycmF5KCksdGhpcy5saW5rXS5maWx0ZXIocj0+ISFyKS5tYXAocj0+ci5vbkNoYW5nZXMpO3RoaXMubGlua0lucHV0Q2hhbmdlc1N1YnNjcmlwdGlvbj1aMSh0KS5waXBlKE9FKCkp''@;'; put 'put ''LnN1YnNjcmliZShyPT57dGhpcy5faXNBY3RpdmUhPT10aGlzLmlzTGlua0FjdGl2ZSh0aGlzLnJvdXRlcikocikmJnRoaXMudXBkYXRlKCl9KX1zZXQgcm91dGVyTGlua0FjdGl2ZSh0KXtjb25zdCByPUFycmF5LmlzQXJyYXkodCk/dDp0LnNwbGl0KCIgIik7dGhpcy5jbGFzc2VzPXIuZmls''@;'; put 'put ''dGVyKGk9PiEhaSl9bmdPbkNoYW5nZXModCl7dGhpcy51cGRhdGUoKX1uZ09uRGVzdHJveSgpe3RoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5saW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXVwZGF0ZSgpeyF0aGlzLmxp''@;'; put 'put ''bmtzfHwhdGhpcy5yb3V0ZXIubmF2aWdhdGVkfHxxdWV1ZU1pY3JvdGFzaygoKT0+e2NvbnN0IHQ9dGhpcy5oYXNBY3RpdmVMaW5rcygpO3RoaXMuY2xhc3Nlcy5mb3JFYWNoKHI9Pnt0P3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQscik6dGhpcy5y''@;'; put 'put ''ZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxyKX0pLHQmJnZvaWQgMCE9PXRoaXMuYXJpYUN1cnJlbnRXaGVuQWN0aXZlP3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCJhcmlhLWN1cnJlbnQiLHRoaXMu''@;'; put 'put ''YXJpYUN1cnJlbnRXaGVuQWN0aXZlLnRvU3RyaW5nKCkpOnRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCJhcmlhLWN1cnJlbnQiKSx0aGlzLl9pc0FjdGl2ZSE9PXQmJih0aGlzLl9pc0FjdGl2ZT10LHRoaXMuY2RyLm1hcmtGb3JDaGVj''@;'; put 'put ''aygpLHRoaXMuaXNBY3RpdmVDaGFuZ2UuZW1pdCh0KSl9KX1pc0xpbmtBY3RpdmUodCl7Y29uc3Qgcj1mdW5jdGlvbiBncHQobil7cmV0dXJuISFuLnBhdGhzfSh0aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zKT90aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zOnRoaXMucm91dGVyTGlu''@;'; put 'put ''a0FjdGl2ZU9wdGlvbnMuZXhhY3R8fCExO3JldHVybiBpPT57Y29uc3Qgbz1pLnVybFRyZWU7cmV0dXJuISFvJiZ0LmlzQWN0aXZlKG8scil9fWhhc0FjdGl2ZUxpbmtzKCl7Y29uc3QgdD10aGlzLmlzTGlua0FjdGl2ZSh0aGlzLnJvdXRlcik7cmV0dXJuIHRoaXMubGluayYmdCh0aGlzLmxp''@;'; put 'put ''bmspfHx0aGlzLmxpbmtzLnNvbWUodCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKHplKHZjKSx6ZShubyksemUoTnQpLHplKFVsKSx6ZShQMiw4KSl9O3N0YXRpYyBcdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwicm91dGVyTGlua0Fj''@;'; put 'put ''dGl2ZSIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihyLGksbyl7aWYoMSZyJiZGYShvLFAyLDUpLDImcil7bGV0IGE7Y2koYT11aSgpKSYmKGkubGlua3M9YSl9fSxpbnB1dHM6e3JvdXRlckxpbmtBY3RpdmVPcHRpb25zOiJyb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucyIsYXJpYUN1cnJl''@;'; put 'put ''bnRXaGVuQWN0aXZlOiJhcmlhQ3VycmVudFdoZW5BY3RpdmUiLHJvdXRlckxpbmtBY3RpdmU6InJvdXRlckxpbmtBY3RpdmUifSxvdXRwdXRzOntpc0FjdGl2ZUNoYW5nZToiaXNBY3RpdmVDaGFuZ2UifSxleHBvcnRBczpbInJvdXRlckxpbmtBY3RpdmUiXSxmZWF0dXJlczpbaXVdfSl9cmV0''@;'; put 'put ''dXJuIG59KSgpO2NsYXNzIE9DZXt9bGV0IG1wdD0oKCk9PntjbGFzcyBue3JvdXRlcjtpbmplY3RvcjtwcmVsb2FkaW5nU3RyYXRlZ3k7bG9hZGVyO3N1YnNjcmlwdGlvbjtjb25zdHJ1Y3Rvcih0LHIsaSxvKXt0aGlzLnJvdXRlcj10LHRoaXMuaW5qZWN0b3I9cix0aGlzLnByZWxvYWRpbmdT''@;'; put 'put ''dHJhdGVneT1pLHRoaXMubG9hZGVyPW99c2V0VXBQcmVsb2FkaW5nKCl7dGhpcy5zdWJzY3JpcHRpb249dGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoc3UodD0+dCBpbnN0YW5jZW9mIEI1KSxORSgoKT0+dGhpcy5wcmVsb2FkKCkpKS5zdWJzY3JpYmUoKCk9Pnt9KX1wcmVsb2FkKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMucHJvY2Vzc1JvdXRlcyh0aGlzLmluamVjdG9yLHRoaXMucm91dGVyLmNvbmZpZyl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1wcm9jZXNzUm91dGVzKHQscil7Y29uc3QgaT1bXTtmb3IoY29uc3QgbyBvZiBy''@;'; put 'put ''KXtvLnByb3ZpZGVycyYmIW8uX2luamVjdG9yJiYoby5faW5qZWN0b3I9aGooby5wcm92aWRlcnMsdCxgUm91dGU6ICR7by5wYXRofWApKTtjb25zdCBhPW8uX2luamVjdG9yPz90LGw9by5fbG9hZGVkSW5qZWN0b3I/P2E7KG8ubG9hZENoaWxkcmVuJiYhby5fbG9hZGVkUm91dGVzJiZ2b2lk''@;'; put 'put ''IDA9PT1vLmNhbkxvYWR8fG8ubG9hZENvbXBvbmVudCYmIW8uX2xvYWRlZENvbXBvbmVudCkmJmkucHVzaCh0aGlzLnByZWxvYWRDb25maWcoYSxvKSksKG8uY2hpbGRyZW58fG8uX2xvYWRlZFJvdXRlcykmJmkucHVzaCh0aGlzLnByb2Nlc3NSb3V0ZXMobCxvLmNoaWxkcmVuPz9vLl9sb2Fk''@;'; put 'put ''ZWRSb3V0ZXMpKX1yZXR1cm4gWjEoaSkucGlwZShPRSgpKX1wcmVsb2FkQ29uZmlnKHQscil7cmV0dXJuIHRoaXMucHJlbG9hZGluZ1N0cmF0ZWd5LnByZWxvYWQociwoKT0+e2xldCBpO2k9ci5sb2FkQ2hpbGRyZW4mJnZvaWQgMD09PXIuY2FuTG9hZD90aGlzLmxvYWRlci5sb2FkQ2hpbGRy''@;'; put 'put ''ZW4odCxyKTpQYShudWxsKTtjb25zdCBvPWkucGlwZShHMChhPT5udWxsPT09YT9QYSh2b2lkIDApOihyLl9sb2FkZWRSb3V0ZXM9YS5yb3V0ZXMsci5fbG9hZGVkSW5qZWN0b3I9YS5pbmplY3Rvcix0aGlzLnByb2Nlc3NSb3V0ZXMoYS5pbmplY3Rvcj8/dCxhLnJvdXRlcykpKSk7cmV0dXJu''@;'; put 'put ''IHIubG9hZENvbXBvbmVudCYmIXIuX2xvYWRlZENvbXBvbmVudD9aMShbbyx0aGlzLmxvYWRlci5sb2FkQ29tcG9uZW50KHQscildKS5waXBlKE9FKCkpOm99KX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikob3IodmMpLG9yKG5sKSxvcihPQ2UpLG9yKGNp''@;'; put 'put ''ZSkpfTtzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59KSgpO2NvbnN0IEJpZT1uZXcgRXIoIiIpO2xldCBOQ2U9KCgpPT57Y2xhc3Mgbnt1cmxTZXJpYWxpemVyO3RyYW5zaXRpb25zO3ZpZXdwb3J0''@;'; put 'put ''U2Nyb2xsZXI7em9uZTtvcHRpb25zO3JvdXRlckV2ZW50c1N1YnNjcmlwdGlvbjtzY3JvbGxFdmVudHNTdWJzY3JpcHRpb247bGFzdElkPTA7bGFzdFNvdXJjZT1WSTtyZXN0b3JlZElkPTA7c3RvcmU9e307Y29uc3RydWN0b3IodCxyLGksbyxhPXt9KXt0aGlzLnVybFNlcmlhbGl6ZXI9dCx0''@;'; put 'put ''aGlzLnRyYW5zaXRpb25zPXIsdGhpcy52aWV3cG9ydFNjcm9sbGVyPWksdGhpcy56b25lPW8sdGhpcy5vcHRpb25zPWEsYS5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9ufHw9ImRpc2FibGVkIixhLmFuY2hvclNjcm9sbGluZ3x8PSJkaXNhYmxlZCJ9aW5pdCgpeyJkaXNhYmxlZCIhPT10aGlz''@;'; put 'put ''Lm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNldEhpc3RvcnlTY3JvbGxSZXN0b3JhdGlvbigibWFudWFsIiksdGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb249dGhpcy5jcmVhdGVTY3JvbGxFdmVudHMoKSx0aGlzLnNjcm9sbEV2''@;'; put 'put ''ZW50c1N1YnNjcmlwdGlvbj10aGlzLmNvbnN1bWVTY3JvbGxFdmVudHMoKX1jcmVhdGVTY3JvbGxFdmVudHMoKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9ucy5ldmVudHMuc3Vic2NyaWJlKHQ9Pnt0IGluc3RhbmNlb2YgVVU/KHRoaXMuc3RvcmVbdGhpcy5sYXN0SWRdPXRoaXMudmlld3BvcnRT''@;'; put 'put ''Y3JvbGxlci5nZXRTY3JvbGxQb3NpdGlvbigpLHRoaXMubGFzdFNvdXJjZT10Lm5hdmlnYXRpb25UcmlnZ2VyLHRoaXMucmVzdG9yZWRJZD10LnJlc3RvcmVkU3RhdGU/dC5yZXN0b3JlZFN0YXRlLm5hdmlnYXRpb25JZDowKTp0IGluc3RhbmNlb2YgQjU/KHRoaXMubGFzdElkPXQuaWQsdGhp''@;'; put 'put ''cy5zY2hlZHVsZVNjcm9sbEV2ZW50KHQsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKHQudXJsQWZ0ZXJSZWRpcmVjdHMpLmZyYWdtZW50KSk6dCBpbnN0YW5jZW9mIFBFJiZ0LmNvZGU9PT16VS5JZ25vcmVkU2FtZVVybE5hdmlnYXRpb24mJih0aGlzLmxhc3RTb3VyY2U9dm9pZCAwLHRoaXMu''@;'; put 'put ''cmVzdG9yZWRJZD0wLHRoaXMuc2NoZWR1bGVTY3JvbGxFdmVudCh0LHRoaXMudXJsU2VyaWFsaXplci5wYXJzZSh0LnVybCkuZnJhZ21lbnQpKX0pfWNvbnN1bWVTY3JvbGxFdmVudHMoKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9ucy5ldmVudHMuc3Vic2NyaWJlKHQ9PntpZighKHQgaW5zdGFu''@;'; put 'put ''Y2VvZiBqYmUpKXJldHVybjtjb25zdCByPXtiZWhhdmlvcjoiaW5zdGFudCJ9O3QucG9zaXRpb24/InRvcCI9PT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbj90aGlzLnZpZXdwb3J0U2Nyb2xsZXIuc2Nyb2xsVG9Qb3NpdGlvbihbMCwwXSxyKToiZW5hYmxlZCI9PT10''@;'; put 'put ''aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvUG9zaXRpb24odC5wb3NpdGlvbixyKTp0LmFuY2hvciYmImVuYWJsZWQiPT09dGhpcy5vcHRpb25zLmFuY2hvclNjcm9sbGluZz90aGlzLnZpZXdwb3J0U2Nyb2xsZXIu''@;'; put 'put ''c2Nyb2xsVG9BbmNob3IodC5hbmNob3IpOiJkaXNhYmxlZCIhPT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvUG9zaXRpb24oWzAsMF0pfSl9c2NoZWR1bGVTY3JvbGxFdmVudCh0LHIpe3ZhciBpPXRoaXM7dGhp''@;'; put 'put ''cy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKENyKGZ1bmN0aW9uKigpe3lpZWxkIG5ldyBQcm9taXNlKG89PntzZXRUaW1lb3V0KG8pLHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU8InUiJiZyZXF1ZXN0QW5pbWF0aW9uRnJhbWUobyl9KSxpLnpvbmUucnVuKCgpPT57aS50cmFuc2l0aW9u''@;'; put 'put ''cy5ldmVudHMubmV4dChuZXcgamJlKHQsInBvcHN0YXRlIj09PWkubGFzdFNvdXJjZT9pLnN0b3JlW2kucmVzdG9yZWRJZF06bnVsbCxyKSl9KX0pKX1uZ09uRGVzdHJveSgpe3RoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuc2Nyb2xsRXZlbnRzU3Vi''@;'; put 'put ''c2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7IWZ1bmN0aW9uIEw1KCl7dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIil9KCl9O3N0YXRpYyBcdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KX1yZXR1cm4gbn0pKCk7''@;'; put 'put ''ZnVuY3Rpb24gVTUobixlKXtyZXR1cm57XHUwMjc1a2luZDpuLFx1MDI3NXByb3ZpZGVyczplfX1mdW5jdGlvbiBQQ2UoKXtjb25zdCBuPXNuKE1sKTtyZXR1cm4gZT0+e2NvbnN0IHQ9bi5nZXQoV2cpO2lmKGUhPT10LmNvbXBvbmVudHNbMF0pcmV0dXJuO2NvbnN0IHI9bi5nZXQodmMpLGk9''@;'; put 'put ''bi5nZXQoSENlKTsxPT09bi5nZXQoamllKSYmci5pbml0aWFsTmF2aWdhdGlvbigpLG4uZ2V0KFZDZSxudWxsLHtvcHRpb25hbDohMH0pPy5zZXRVcFByZWxvYWRpbmcoKSxuLmdldChCaWUsbnVsbCx7b3B0aW9uYWw6ITB9KT8uaW5pdCgpLHIucmVzZXRSb290Q29tcG9uZW50VHlwZSh0LmNv''@;'; put 'put ''bXBvbmVudFR5cGVzWzBdKSxpLmNsb3NlZHx8KGkubmV4dCgpLGkuY29tcGxldGUoKSxpLnVuc3Vic2NyaWJlKCkpfX1jb25zdCBIQ2U9bmV3IEVyKCIiLHtmYWN0b3J5OigpPT5uZXcgTXJ9KSxqaWU9bmV3IEVyKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4xfSksVkNlPW5l''@;'; put 'put ''dyBFcigiIik7ZnVuY3Rpb24gYnB0KG4pe3JldHVybiBVNSgwLFt7cHJvdmlkZTpWQ2UsdXNlRXhpc3Rpbmc6bXB0fSx7cHJvdmlkZTpPQ2UsdXNlRXhpc3Rpbmc6bn1dKX1mdW5jdGlvbiBDcHQobil7cmV0dXJuIGoxKCJOZ1JvdXRlclZpZXdUcmFuc2l0aW9ucyIpLFU1KDksW3twcm92aWRl''@;'; put 'put ''OmR3ZSx1c2VWYWx1ZTpIZHR9LHtwcm92aWRlOmh3ZSx1c2VWYWx1ZTp7c2tpcE5leHRUcmFuc2l0aW9uOiEhbj8uc2tpcEluaXRpYWxUcmFuc2l0aW9uLC4uLm59fV0pfWNvbnN0IFNwdD1bVjAse3Byb3ZpZGU6TkksdXNlQ2xhc3M6RlV9LHZjLEJJLHtwcm92aWRlOnAxLHVzZUZhY3Rvcnk6''@;'; put 'put ''ZnVuY3Rpb24gRkNlKG4pe3JldHVybiBuLnJvdXRlclN0YXRlLnJvb3R9LGRlcHM6W3ZjXX0sY2llLFtdXTtsZXQgV2Q9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZm9yUm9vdCh0LHIpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbU3B0LFtdLHtwcm92aWRlOlFV''@;'; put 'put ''LG11bHRpOiEwLHVzZVZhbHVlOnR9LFtdLHI/LmVycm9ySGFuZGxlcj97cHJvdmlkZTpmd2UsdXNlVmFsdWU6ci5lcnJvckhhbmRsZXJ9OltdLHtwcm92aWRlOnpFLHVzZVZhbHVlOnJ8fHt9fSxyPy51c2VIYXNoP3twcm92aWRlOnlwLHVzZUNsYXNzOmlvdH06e3Byb3ZpZGU6eXAsdXNlQ2xh''@;'; put 'put ''c3M6bFN9LHtwcm92aWRlOkJpZSx1c2VGYWN0b3J5OigpPT57Y29uc3Qgbj1zbihtdHQpLGU9c24oZ2EpLHQ9c24oekUpLHI9c24oZGllKSxpPXNuKE5JKTtyZXR1cm4gdC5zY3JvbGxPZmZzZXQmJm4uc2V0T2Zmc2V0KHQuc2Nyb2xsT2Zmc2V0KSxuZXcgTkNlKGkscixuLGUsdCl9fSxyPy5w''@;'; put 'put ''cmVsb2FkaW5nU3RyYXRlZ3k/YnB0KHIucHJlbG9hZGluZ1N0cmF0ZWd5KS5cdTAyNzVwcm92aWRlcnM6W10scj8uaW5pdGlhbE5hdmlnYXRpb24/eHB0KHIpOltdLHI/LmJpbmRUb0NvbXBvbmVudElucHV0cz9VNSg4LFskYmUse3Byb3ZpZGU6R1UsdXNlRXhpc3Rpbmc6JGJlfV0pLlx1MDI3''@;'; put 'put ''NXByb3ZpZGVyczpbXSxyPy5lbmFibGVWaWV3VHJhbnNpdGlvbnM/Q3B0KCkuXHUwMjc1cHJvdmlkZXJzOltdLFt7cHJvdmlkZTpCQ2UsdXNlRmFjdG9yeTpQQ2V9LHtwcm92aWRlOm04ZSxtdWx0aTohMCx1c2VFeGlzdGluZzpCQ2V9XV19fXN0YXRpYyBmb3JDaGlsZCh0KXtyZXR1cm57bmdN''@;'; put 'put ''b2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOlFVLG11bHRpOiEwLHVzZVZhbHVlOnR9XX19c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1bW9kPUdpKHt0eXBlOm59KTtzdGF0aWMgXHUwMjc1aW5qPW1pKHt9KX1yZXR1cm4gbn0p''@;'; put 'put ''KCk7ZnVuY3Rpb24geHB0KG4pe3JldHVyblsiZGlzYWJsZWQiPT09bi5pbml0aWFsTmF2aWdhdGlvbj9VNSgzLFtwOGUoKCk9Pntzbih2Yykuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCl9KSx7cHJvdmlkZTpqaWUsdXNlVmFsdWU6Mn1dKS5cdTAyNzVwcm92aWRlcnM6W10sImVuYWJs''@;'; put 'put ''ZWRCbG9ja2luZyI9PT1uLmluaXRpYWxOYXZpZ2F0aW9uP1U1KDIsW3twcm92aWRlOiRRLHVzZVZhbHVlOiEwfSx7cHJvdmlkZTpqaWUsdXNlVmFsdWU6MH0scDhlKCgpPT57Y29uc3QgZT1zbihNbCk7cmV0dXJuIGUuZ2V0KHhYLFByb21pc2UucmVzb2x2ZSgpKS50aGVuKCgpPT5uZXcgUHJv''@;'; put 'put ''bWlzZShyPT57Y29uc3QgaT1lLmdldCh2Yyksbz1lLmdldChIQ2UpO2d3ZShpLCgpPT57cighMCl9KSxlLmdldChkaWUpLmFmdGVyUHJlYWN0aXZhdGlvbj0oKT0+KHIoITApLG8uY2xvc2VkP1BhKHZvaWQgMCk6byksaS5pbml0aWFsTmF2aWdhdGlvbigpfSkpfSldKS5cdTAyNzVwcm92aWRl''@;'; put 'put ''cnM6W11dfWNvbnN0IEJDZT1uZXcgRXIoIiIpO2xldCBqQ2U9KCgpPT57Y2xhc3MgbntfcmVuZGVyZXI7X2VsZW1lbnRSZWY7b25DaGFuZ2U9dD0+e307b25Ub3VjaGVkPSgpPT57fTtjb25zdHJ1Y3Rvcih0LHIpe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fZWxlbWVudFJlZj1yfXNldFByb3Bl''@;'; put 'put ''cnR5KHQscil7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHQscil9cmVnaXN0ZXJPblRvdWNoZWQodCl7dGhpcy5vblRvdWNoZWQ9dH1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMub25DaGFuZ2U9dH1zZXREaXNhYmxlZFN0YXRlKHQp''@;'; put 'put ''e3RoaXMuc2V0UHJvcGVydHkoImRpc2FibGVkIix0KX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoemUoTnQpLHplKG5vKSl9O3N0YXRpYyBcdTAyNzVkaXI9JHIoe3R5cGU6bn0pfXJldHVybiBufSkoKSxSYj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgakNl''@;'; put 'put ''e3N0YXRpYyBcdTAyNzVmYWM9KCgpPT57bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD13YShuKSkpKGl8fG4pfX0pKCk7c3RhdGljIFx1MDI3NWRpcj0kcih7dHlwZTpuLGZlYXR1cmVzOltGb119KX1yZXR1cm4gbn0pKCk7Y29uc3QgejU9bmV3IEVyKCIiKSxScHQ9e3By''@;'; put 'put ''b3ZpZGU6ejUsdXNlRXhpc3Rpbmc6VW8oKCk9PkgyKSxtdWx0aTohMH07bGV0IEgyPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBSYnt3cml0ZVZhbHVlKHQpe3RoaXMuc2V0UHJvcGVydHkoImNoZWNrZWQiLHQpfXN0YXRpYyBcdTAyNzVmYWM9KCgpPT57bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkp''@;'; put 'put ''e3JldHVybih0fHwodD13YShuKSkpKGl8fG4pfX0pKCk7c3RhdGljIFx1MDI3NWRpcj0kcih7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbCIsIiJd''@;'; put 'put ''LFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihyLGkpezEmciYmd3QoImNoYW5nZSIsZnVuY3Rpb24oYSl7cmV0dXJuIGkub25DaGFuZ2UoYS50YXJnZXQuY2hlY2tlZCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5v''@;'; put 'put ''blRvdWNoZWQoKX0pfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltibyhbUnB0XSksRm9dfSl9cmV0dXJuIG59KSgpO2NvbnN0IElwdD17cHJvdmlkZTp6NSx1c2VFeGlzdGluZzpVbygoKT0+bHUpLG11bHRpOiEwfSxMcHQ9bmV3IEVyKCIiKTtsZXQgbHU9KCgpPT57Y2xhc3MgbiBleHRlbmRz''@;'; put 'put ''IGpDZXtfY29tcG9zaXRpb25Nb2RlO19jb21wb3Npbmc9ITE7Y29uc3RydWN0b3IodCxyLGkpe3N1cGVyKHQsciksdGhpcy5fY29tcG9zaXRpb25Nb2RlPWksbnVsbD09dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYodGhpcy5fY29tcG9zaXRpb25Nb2RlPSFmdW5jdGlvbiBEcHQoKXtjb25zdCBu''@;'; put 'put ''PWw1KCk/bDUoKS5nZXRVc2VyQWdlbnQoKToiIjtyZXR1cm4vYW5kcm9pZCAoXGQrKS8udGVzdChuLnRvTG93ZXJDYXNlKCkpfSgpKX13cml0ZVZhbHVlKHQpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIix0Pz8iIil9X2hhbmRsZUlucHV0KHQpeyghdGhpcy5fY29tcG9zaXRpb25Nb2RlfHx0''@;'; put 'put ''aGlzLl9jb21wb3NpdGlvbk1vZGUmJiF0aGlzLl9jb21wb3NpbmcpJiZ0aGlzLm9uQ2hhbmdlKHQpfV9jb21wb3NpdGlvblN0YXJ0KCl7dGhpcy5fY29tcG9zaW5nPSEwfV9jb21wb3NpdGlvbkVuZCh0KXt0aGlzLl9jb21wb3Npbmc9ITEsdGhpcy5fY29tcG9zaXRpb25Nb2RlJiZ0aGlzLm9u''@;'; put 'put ''Q2hhbmdlKHQpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKSh6ZShOdCksemUobm8pLHplKExwdCw4KSl9O3N0YXRpYyBcdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsInR5cGUiLCJjaGVj''@;'; put 'put ''a2JveCJdLFsidGV4dGFyZWEiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwiZm9ybUNvbnRyb2wiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJuZ01vZGVsIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRl''@;'; put 'put ''eHRhcmVhIiwibmdNb2RlbCIsIiJdLFsiIiwibmdEZWZhdWx0Q29udHJvbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24ocixpKXsxJnImJnd0KCJpbnB1dCIsZnVuY3Rpb24oYSl7cmV0dXJuIGkuX2hhbmRsZUlucHV0KGEudGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBpLm9uVG91Y2hlZCgpfSkoImNvbXBvc2l0aW9uc3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2NvbXBvc2l0aW9uU3RhcnQoKX0pKCJjb21wb3NpdGlvbmVuZCIsZnVuY3Rpb24oYSl7cmV0dXJuIGkuX2NvbXBvc2l0aW9uRW5kKGEudGFyZ2V0LnZhbHVlKX0pfSxzdGFuZGFsb25l''@;'; put 'put ''OiExLGZlYXR1cmVzOltibyhbSXB0XSksRm9dfSl9cmV0dXJuIG59KSgpO2Z1bmN0aW9uIHppZShuKXtyZXR1cm4gbnVsbD09bj9udWxsOkFycmF5LmlzQXJyYXkobil8fCJzdHJpbmciPT10eXBlb2Ygbj9uLmxlbmd0aDpuIGluc3RhbmNlb2YgU2V0P24uc2l6ZTpudWxsfWNvbnN0IEcxPW5l''@;'; put 'put ''dyBFcigiIiksbXY9bmV3IEVyKCIiKTtmdW5jdGlvbiBXQ2Uobil7cmV0dXJuIGZ1bmN0aW9uIFVpZShuKXtyZXR1cm4gbnVsbD09bnx8MD09PXppZShuKX0obi52YWx1ZSk/e3JlcXVpcmVkOiEwfTpudWxsfWZ1bmN0aW9uIFlDZShuKXtyZXR1cm4hMD09PW4udmFsdWU/bnVsbDp7cmVxdWly''@;'; put 'put ''ZWQ6ITB9fWZ1bmN0aW9uIGh6KG4pe3JldHVybiBudWxsfWZ1bmN0aW9uIEtDZShuKXtyZXR1cm4gbnVsbCE9bn1mdW5jdGlvbiBYQ2Uobil7cmV0dXJuIFpSKG4pP1oxKG4pOm59ZnVuY3Rpb24gUUNlKG4pe2xldCBlPXt9O3JldHVybiBuLmZvckVhY2godD0+e2U9bnVsbCE9dD97Li4uZSwu''@;'; put 'put ''Li50fTplfSksMD09PU9iamVjdC5rZXlzKGUpLmxlbmd0aD9udWxsOmV9ZnVuY3Rpb24gSkNlKG4sZSl7cmV0dXJuIGUubWFwKHQ9PnQobikpfWZ1bmN0aW9uIGVTZShuKXtyZXR1cm4gbi5tYXAoZT0+ZnVuY3Rpb24gTnB0KG4pe3JldHVybiFuLnZhbGlkYXRlfShlKT9lOnQ9PmUudmFsaWRh''@;'; put 'put ''dGUodCkpfWZ1bmN0aW9uIFdpZShuKXtyZXR1cm4gbnVsbCE9bj9mdW5jdGlvbiB0U2Uobil7aWYoIW4pcmV0dXJuIG51bGw7Y29uc3QgZT1uLmZpbHRlcihLQ2UpO3JldHVybiAwPT1lLmxlbmd0aD9udWxsOmZ1bmN0aW9uKHQpe3JldHVybiBRQ2UoSkNlKHQsZSkpfX0oZVNlKG4pKTpudWxs''@;'; put 'put ''fWZ1bmN0aW9uIFlpZShuKXtyZXR1cm4gbnVsbCE9bj9mdW5jdGlvbiBuU2Uobil7aWYoIW4pcmV0dXJuIG51bGw7Y29uc3QgZT1uLmZpbHRlcihLQ2UpO3JldHVybiAwPT1lLmxlbmd0aD9udWxsOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiBrcHQoLi4ubil7Y29uc3QgZT1zYmUobiks''@;'; put 'put ''e2FyZ3M6dCxrZXlzOnJ9PWxiZShuKSxpPW5ldyBobyhvPT57Y29uc3R7bGVuZ3RoOmF9PXQ7aWYoIWEpcmV0dXJuIHZvaWQgby5jb21wbGV0ZSgpO2NvbnN0IGw9bmV3IEFycmF5KGEpO2xldCB1PWEsZz1hO2ZvcihsZXQgRT0wO0U8YTtFKyspe2xldCBPPSExO04yKHRbRV0pLnN1YnNjcmli''@;'; put 'put ''ZSh2dShvLFo9PntPfHwoTz0hMCxnLS0pLGxbRV09Wn0sKCk9PnUtLSx2b2lkIDAsKCk9PnsoIXV8fCFPKSYmKGd8fG8ubmV4dChyP2NiZShyLGwpOmwpLG8uY29tcGxldGUoKSl9KSl9fSk7cmV0dXJuIGU/aS5waXBlKFZyZShlKSk6aX0oSkNlKHQsZSkubWFwKFhDZSkpLnBpcGUoRXMoUUNl''@;'; put 'put ''KSl9fShlU2UobikpOm51bGx9ZnVuY3Rpb24gclNlKG4sZSl7cmV0dXJuIG51bGw9PT1uP1tlXTpBcnJheS5pc0FycmF5KG4pP1suLi5uLGVdOltuLGVdfWZ1bmN0aW9uIFppZShuKXtyZXR1cm4gbj9BcnJheS5pc0FycmF5KG4pP246W25dOltdfWZ1bmN0aW9uIGZ6KG4sZSl7cmV0dXJuIEFy''@;'; put 'put ''cmF5LmlzQXJyYXkobik/bi5pbmNsdWRlcyhlKTpuPT09ZX1mdW5jdGlvbiBhU2UobixlKXtjb25zdCB0PVppZShlKTtyZXR1cm4gWmllKG4pLmZvckVhY2goaT0+e2Z6KHQsaSl8fHQucHVzaChpKX0pLHR9ZnVuY3Rpb24gc1NlKG4sZSl7cmV0dXJuIFppZShlKS5maWx0ZXIodD0+IWZ6KG4s''@;'; put 'put ''dCkpfWNsYXNzIGxTZXtnZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWx1ZTpudWxsfWdldCB2YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbGlkOm51bGx9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMu''@;'; put 'put ''Y29udHJvbC5pbnZhbGlkOm51bGx9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wZW5kaW5nOm51bGx9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlzYWJsZWQ6bnVsbH1nZXQgZW5hYmxlZCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVuYWJsZWQ6bnVsbH1nZXQgZXJyb3JzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZXJyb3JzOm51bGx9Z2V0IHByaXN0aW5lKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucHJpc3RpbmU6bnVsbH1nZXQgZGly''@;'; put 'put ''dHkoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5kaXJ0eTpudWxsfWdldCB0b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudG91Y2hlZDpudWxsfWdldCBzdGF0dXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXM6bnVs''@;'; put 'put ''bH1nZXQgdW50b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudW50b3VjaGVkOm51bGx9Z2V0IHN0YXR1c0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzOm51bGx9Z2V0IHZhbHVlQ2hhbmdlcygpe3JldHVybiB0''@;'; put 'put ''aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlczpudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9X2NvbXBvc2VkVmFsaWRhdG9yRm47X2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbjtfcmF3VmFsaWRhdG9ycz1bXTtfcmF3QXN5bmNWYWxpZGF0b3JzPVtdO19zZXRWYWxpZGF0''@;'; put 'put ''b3JzKGUpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9ZXx8W10sdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1XaWUodGhpcy5fcmF3VmFsaWRhdG9ycyl9X3NldEFzeW5jVmFsaWRhdG9ycyhlKXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9ZXx8W10sdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRv''@;'; put 'put ''ckZuPVlpZSh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbnx8bnVsbH1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZufHxudWxsfV9vbkRlc3Ryb3lD''@;'; put 'put ''YWxsYmFja3M9W107X3JlZ2lzdGVyT25EZXN0cm95KGUpe3RoaXMuX29uRGVzdHJveUNhbGxiYWNrcy5wdXNoKGUpfV9pbnZva2VPbkRlc3Ryb3lDYWxsYmFja3MoKXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MuZm9yRWFjaChlPT5lKCkpLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1y''@;'; put 'put ''ZXNldChlPXZvaWQgMCl7dGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wucmVzZXQoZSl9aGFzRXJyb3IoZSx0KXtyZXR1cm4hIXRoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLmhhc0Vycm9yKGUsdCl9Z2V0RXJyb3IoZSx0KXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5nZXRF''@;'; put 'put ''cnJvcihlLHQpOm51bGx9fWNsYXNzIERmIGV4dGVuZHMgbFNle25hbWU7Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gbnVsbH1nZXQgcGF0aCgpe3JldHVybiBudWxsfX1jbGFzcyBWMiBleHRlbmRzIGxTZXtfcGFyZW50PW51bGw7bmFtZT1udWxsO3ZhbHVlQWNjZXNzb3I9bnVsbH1jbGFz''@;'; put 'put ''cyBjU2V7X2NkO2NvbnN0cnVjdG9yKGUpe3RoaXMuX2NkPWV9Z2V0IGlzVG91Y2hlZCgpe3JldHVybiB0aGlzLl9jZD8uY29udHJvbD8uX3RvdWNoZWQ/LigpLCEhdGhpcy5fY2Q/LmNvbnRyb2w/LnRvdWNoZWR9Z2V0IGlzVW50b3VjaGVkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8u''@;'; put 'put ''dW50b3VjaGVkfWdldCBpc1ByaXN0aW5lKCl7cmV0dXJuIHRoaXMuX2NkPy5jb250cm9sPy5fcHJpc3RpbmU/LigpLCEhdGhpcy5fY2Q/LmNvbnRyb2w/LnByaXN0aW5lfWdldCBpc0RpcnR5KCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uZGlydHl9Z2V0IGlzVmFsaWQoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fY2Q/LmNvbnRyb2w/Ll9zdGF0dXM/LigpLCEhdGhpcy5fY2Q/LmNvbnRyb2w/LnZhbGlkfWdldCBpc0ludmFsaWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5pbnZhbGlkfWdldCBpc1BlbmRpbmcoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5wZW5kaW5nfWdldCBp''@;'; put 'put ''c1N1Ym1pdHRlZCgpe3JldHVybiB0aGlzLl9jZD8uX3N1Ym1pdHRlZD8uKCksISF0aGlzLl9jZD8uc3VibWl0dGVkfX1sZXQgb2M9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGNTZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXco''@;'; put 'put ''cnx8bikoemUoVjIsMikpfTtzdGF0aWMgXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwibmdNb2RlbCIsIiJdLFsiIiwiZm9ybUNvbnRyb2wiLCIiXV0saG9zdFZhcnM6MTQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHIsaSl7MiZy''@;'; put 'put ''JiZ3cigibmctdW50b3VjaGVkIixpLmlzVW50b3VjaGVkKSgibmctdG91Y2hlZCIsaS5pc1RvdWNoZWQpKCJuZy1wcmlzdGluZSIsaS5pc1ByaXN0aW5lKSgibmctZGlydHkiLGkuaXNEaXJ0eSkoIm5nLXZhbGlkIixpLmlzVmFsaWQpKCJuZy1pbnZhbGlkIixpLmlzSW52YWxpZCkoIm5nLXBl''@;'; put 'put ''bmRpbmciLGkuaXNQZW5kaW5nKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbRm9dfSl9cmV0dXJuIG59KSgpLEliPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBjU2V7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKHpl''@;'; put 'put ''KERmLDEwKSl9O3N0YXRpYyBcdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiZm9ybUdyb3VwTmFtZSIsIiJdLFsiIiwiZm9ybUFycmF5TmFtZSIsIiJdLFsiIiwibmdNb2RlbEdyb3VwIiwiIl0sWyIiLCJmb3JtR3JvdXAiLCIiXSxbImZvcm0iLDMsIm5nTm9Gb3JtIiwiIl0s''@;'; put 'put ''WyIiLCJuZ0Zvcm0iLCIiXV0saG9zdFZhcnM6MTYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHIsaSl7MiZyJiZ3cigibmctdW50b3VjaGVkIixpLmlzVW50b3VjaGVkKSgibmctdG91Y2hlZCIsaS5pc1RvdWNoZWQpKCJuZy1wcmlzdGluZSIsaS5pc1ByaXN0aW5lKSgibmctZGlydHkiLGkuaXNE''@;'; put 'put ''aXJ0eSkoIm5nLXZhbGlkIixpLmlzVmFsaWQpKCJuZy1pbnZhbGlkIixpLmlzSW52YWxpZCkoIm5nLXBlbmRpbmciLGkuaXNQZW5kaW5nKSgibmctc3VibWl0dGVkIixpLmlzU3VibWl0dGVkKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbRm9dfSl9cmV0dXJuIG59KSgpO2NvbnN0IHREPSJW''@;'; put 'put ''QUxJRCIsZ3o9IklOVkFMSUQiLGVNPSJQRU5ESU5HIixuRD0iRElTQUJMRUQiO2NsYXNzIHRNe31jbGFzcyBkU2UgZXh0ZW5kcyB0TXt2YWx1ZTtzb3VyY2U7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigpLHRoaXMudmFsdWU9ZSx0aGlzLnNvdXJjZT10fX1jbGFzcyBxaWUgZXh0ZW5kcyB0TXtw''@;'; put 'put ''cmlzdGluZTtzb3VyY2U7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigpLHRoaXMucHJpc3RpbmU9ZSx0aGlzLnNvdXJjZT10fX1jbGFzcyBLaWUgZXh0ZW5kcyB0TXt0b3VjaGVkO3NvdXJjZTtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCksdGhpcy50b3VjaGVkPWUsdGhpcy5zb3VyY2U9dH19Y2xh''@;'; put 'put ''c3MgbXogZXh0ZW5kcyB0TXtzdGF0dXM7c291cmNlO2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSx0aGlzLnN0YXR1cz1lLHRoaXMuc291cmNlPXR9fWNsYXNzIGhTZSBleHRlbmRzIHRNe3NvdXJjZTtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuc291cmNlPWV9fWNsYXNzIFhpZSBleHRl''@;'; put 'put ''bmRzIHRNe3NvdXJjZTtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuc291cmNlPWV9fWZ1bmN0aW9uIFFpZShuKXtyZXR1cm4odnoobik/bi52YWxpZGF0b3JzOm4pfHxudWxsfWZ1bmN0aW9uIEppZShuLGUpe3JldHVybih2eihlKT9lLmFzeW5jVmFsaWRhdG9yczpuKXx8bnVsbH1mdW5j''@;'; put 'put ''dGlvbiB2eihuKXtyZXR1cm4gbnVsbCE9biYmIUFycmF5LmlzQXJyYXkobikmJiJvYmplY3QiPT10eXBlb2Ygbn1jbGFzcyBlb2V7X3BlbmRpbmdEaXJ0eT0hMTtfaGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPW51bGw7X3BlbmRpbmdUb3VjaGVkPSExO19vbkNvbGxlY3Rpb25DaGFuZ2U9''@;'; put 'put ''KCk9Pnt9O191cGRhdGVPbjtfcGFyZW50PW51bGw7X2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbjtfY29tcG9zZWRWYWxpZGF0b3JGbjtfY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuO19yYXdWYWxpZGF0b3JzO19yYXdBc3luY1ZhbGlkYXRvcnM7dmFsdWU7Y29uc3RydWN0b3IoZSx0KXt0''@;'; put 'put ''aGlzLl9hc3NpZ25WYWxpZGF0b3JzKGUpLHRoaXMuX2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyh0KX1nZXQgdmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm59c2V0IHZhbGlkYXRvcihlKXt0aGlzLl9yYXdWYWxpZGF0b3JzPXRoaXMuX2NvbXBvc2VkVmFsaWRhdG9y''@;'; put 'put ''Rm49ZX1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZufXNldCBhc3luY1ZhbGlkYXRvcihlKXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9dGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPWV9Z2V0IHBhcmVudCgpe3JldHVybiB0''@;'; put 'put ''aGlzLl9wYXJlbnR9Z2V0IHN0YXR1cygpe3JldHVybiBOdSh0aGlzLnN0YXR1c1JlYWN0aXZlKX1zZXQgc3RhdHVzKGUpe051KCgpPT50aGlzLnN0YXR1c1JlYWN0aXZlLnNldChlKSl9X3N0YXR1cz1uNCgoKT0+dGhpcy5zdGF0dXNSZWFjdGl2ZSgpKTtzdGF0dXNSZWFjdGl2ZT1CMSh2b2lk''@;'; put 'put ''IDApO2dldCB2YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PXREfWdldCBpbnZhbGlkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09Z3p9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PWVNfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PW5EfWdldCBlbmFibGVk''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuc3RhdHVzIT09bkR9ZXJyb3JzO2dldCBwcmlzdGluZSgpe3JldHVybiBOdSh0aGlzLnByaXN0aW5lUmVhY3RpdmUpfXNldCBwcmlzdGluZShlKXtOdSgoKT0+dGhpcy5wcmlzdGluZVJlYWN0aXZlLnNldChlKSl9X3ByaXN0aW5lPW40KCgpPT50aGlzLnByaXN0aW5l''@;'; put 'put ''UmVhY3RpdmUoKSk7cHJpc3RpbmVSZWFjdGl2ZT1CMSghMCk7Z2V0IGRpcnR5KCl7cmV0dXJuIXRoaXMucHJpc3RpbmV9Z2V0IHRvdWNoZWQoKXtyZXR1cm4gTnUodGhpcy50b3VjaGVkUmVhY3RpdmUpfXNldCB0b3VjaGVkKGUpe051KCgpPT50aGlzLnRvdWNoZWRSZWFjdGl2ZS5zZXQoZSkp''@;'; put 'put ''fV90b3VjaGVkPW40KCgpPT50aGlzLnRvdWNoZWRSZWFjdGl2ZSgpKTt0b3VjaGVkUmVhY3RpdmU9QjEoITEpO2dldCB1bnRvdWNoZWQoKXtyZXR1cm4hdGhpcy50b3VjaGVkfV9ldmVudHM9bmV3IE1yO2V2ZW50cz10aGlzLl9ldmVudHMuYXNPYnNlcnZhYmxlKCk7dmFsdWVDaGFuZ2VzO3N0''@;'; put 'put ''YXR1c0NoYW5nZXM7Z2V0IHVwZGF0ZU9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZU9uP3RoaXMuX3VwZGF0ZU9uOnRoaXMucGFyZW50P3RoaXMucGFyZW50LnVwZGF0ZU9uOiJjaGFuZ2UifXNldFZhbGlkYXRvcnMoZSl7dGhpcy5fYXNzaWduVmFsaWRhdG9ycyhlKX1zZXRBc3luY1ZhbGlkYXRv''@;'; put 'put ''cnMoZSl7dGhpcy5fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGUpfWFkZFZhbGlkYXRvcnMoZSl7dGhpcy5zZXRWYWxpZGF0b3JzKGFTZShlLHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1hZGRBc3luY1ZhbGlkYXRvcnMoZSl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoYVNlKGUsdGhpcy5fcmF3QXN5''@;'; put 'put ''bmNWYWxpZGF0b3JzKSl9cmVtb3ZlVmFsaWRhdG9ycyhlKXt0aGlzLnNldFZhbGlkYXRvcnMoc1NlKGUsdGhpcy5fcmF3VmFsaWRhdG9ycykpfXJlbW92ZUFzeW5jVmFsaWRhdG9ycyhlKXt0aGlzLnNldEFzeW5jVmFsaWRhdG9ycyhzU2UoZSx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1o''@;'; put 'put ''YXNWYWxpZGF0b3IoZSl7cmV0dXJuIGZ6KHRoaXMuX3Jhd1ZhbGlkYXRvcnMsZSl9aGFzQXN5bmNWYWxpZGF0b3IoZSl7cmV0dXJuIGZ6KHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyxlKX1jbGVhclZhbGlkYXRvcnMoKXt0aGlzLnZhbGlkYXRvcj1udWxsfWNsZWFyQXN5bmNWYWxpZGF0b3Jz''@;'; put 'put ''KCl7dGhpcy5hc3luY1ZhbGlkYXRvcj1udWxsfW1hcmtBc1RvdWNoZWQoZT17fSl7Y29uc3QgdD0hMT09PXRoaXMudG91Y2hlZDt0aGlzLnRvdWNoZWQ9ITA7Y29uc3Qgcj1lLnNvdXJjZUNvbnRyb2w/P3RoaXM7dGhpcy5fcGFyZW50JiYhZS5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtB''@;'; put 'put ''c1RvdWNoZWQoey4uLmUsc291cmNlQ29udHJvbDpyfSksdCYmITEhPT1lLmVtaXRFdmVudCYmdGhpcy5fZXZlbnRzLm5leHQobmV3IEtpZSghMCxyKSl9bWFya0FsbEFzRGlydHkoZT17fSl7dGhpcy5tYXJrQXNEaXJ0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50LHNvdXJj''@;'; put 'put ''ZUNvbnRyb2w6dGhpc30pLHRoaXMuX2ZvckVhY2hDaGlsZCh0PT50Lm1hcmtBbGxBc0RpcnR5KGUpKX1tYXJrQWxsQXNUb3VjaGVkKGU9e30pe3RoaXMubWFya0FzVG91Y2hlZCh7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50LHNvdXJjZUNvbnRyb2w6dGhpc30pLHRoaXMuX2Zv''@;'; put 'put ''ckVhY2hDaGlsZCh0PT50Lm1hcmtBbGxBc1RvdWNoZWQoZSkpfW1hcmtBc1VudG91Y2hlZChlPXt9KXtjb25zdCB0PSEwPT09dGhpcy50b3VjaGVkO3RoaXMudG91Y2hlZD0hMSx0aGlzLl9wZW5kaW5nVG91Y2hlZD0hMTtjb25zdCByPWUuc291cmNlQ29udHJvbD8/dGhpczt0aGlzLl9mb3JF''@;'; put 'put ''YWNoQ2hpbGQoaT0+e2kubWFya0FzVW50b3VjaGVkKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnQsc291cmNlQ29udHJvbDpyfSl9KSx0aGlzLl9wYXJlbnQmJiFlLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQoZSxyKSx0JiYhMSE9PWUuZW1pdEV2ZW50''@;'; put 'put ''JiZ0aGlzLl9ldmVudHMubmV4dChuZXcgS2llKCExLHIpKX1tYXJrQXNEaXJ0eShlPXt9KXtjb25zdCB0PSEwPT09dGhpcy5wcmlzdGluZTt0aGlzLnByaXN0aW5lPSExO2NvbnN0IHI9ZS5zb3VyY2VDb250cm9sPz90aGlzO3RoaXMuX3BhcmVudCYmIWUub25seVNlbGYmJnRoaXMuX3BhcmVu''@;'; put 'put ''dC5tYXJrQXNEaXJ0eSh7Li4uZSxzb3VyY2VDb250cm9sOnJ9KSx0JiYhMSE9PWUuZW1pdEV2ZW50JiZ0aGlzLl9ldmVudHMubmV4dChuZXcgcWllKCExLHIpKX1tYXJrQXNQcmlzdGluZShlPXt9KXtjb25zdCB0PSExPT09dGhpcy5wcmlzdGluZTt0aGlzLnByaXN0aW5lPSEwLHRoaXMuX3Bl''@;'; put 'put ''bmRpbmdEaXJ0eT0hMTtjb25zdCByPWUuc291cmNlQ29udHJvbD8/dGhpczt0aGlzLl9mb3JFYWNoQ2hpbGQoaT0+e2kubWFya0FzUHJpc3RpbmUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSksdGhpcy5fcGFyZW50JiYhZS5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91''@;'; put 'put ''cGRhdGVQcmlzdGluZShlLHIpLHQmJiExIT09ZS5lbWl0RXZlbnQmJnRoaXMuX2V2ZW50cy5uZXh0KG5ldyBxaWUoITAscikpfW1hcmtBc1BlbmRpbmcoZT17fSl7dGhpcy5zdGF0dXM9ZU07Y29uc3QgdD1lLnNvdXJjZUNvbnRyb2w/P3RoaXM7ITEhPT1lLmVtaXRFdmVudCYmKHRoaXMuX2V2''@;'; put 'put ''ZW50cy5uZXh0KG5ldyBteih0aGlzLnN0YXR1cyx0KSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0aGlzLl9wYXJlbnQmJiFlLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzUGVuZGluZyh7Li4uZSxzb3VyY2VDb250cm9sOnR9KX1kaXNhYmxlKGU9e30pe2Nv''@;'; put 'put ''bnN0IHQ9dGhpcy5fcGFyZW50TWFya2VkRGlydHkoZS5vbmx5U2VsZik7dGhpcy5zdGF0dXM9bkQsdGhpcy5lcnJvcnM9bnVsbCx0aGlzLl9mb3JFYWNoQ2hpbGQoaT0+e2kuZGlzYWJsZSh7Li4uZSxvbmx5U2VsZjohMH0pfSksdGhpcy5fdXBkYXRlVmFsdWUoKTtjb25zdCByPWUuc291cmNl''@;'; put 'put ''Q29udHJvbD8/dGhpczshMSE9PWUuZW1pdEV2ZW50JiYodGhpcy5fZXZlbnRzLm5leHQobmV3IGRTZSh0aGlzLnZhbHVlLHIpKSx0aGlzLl9ldmVudHMubmV4dChuZXcgbXoodGhpcy5zdGF0dXMscikpLHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFu''@;'; put 'put ''Z2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0aGlzLl91cGRhdGVBbmNlc3RvcnMoey4uLmUsc2tpcFByaXN0aW5lQ2hlY2s6dH0sdGhpcyksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGk9PmkoITApKX1lbmFibGUoZT17fSl7Y29uc3QgdD10aGlzLl9wYXJlbnRNYXJrZWREaXJ0eShl''@;'; put 'put ''Lm9ubHlTZWxmKTt0aGlzLnN0YXR1cz10RCx0aGlzLl9mb3JFYWNoQ2hpbGQocj0+e3IuZW5hYmxlKHsuLi5lLG9ubHlTZWxmOiEwfSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pLHRoaXMuX3VwZGF0ZUFuY2VzdG9y''@;'; put 'put ''cyh7Li4uZSxza2lwUHJpc3RpbmVDaGVjazp0fSx0aGlzKSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2gocj0+cighMSkpfV91cGRhdGVBbmNlc3RvcnMoZSx0KXt0aGlzLl9wYXJlbnQmJiFlLm9ubHlTZWxmJiYodGhpcy5fcGFyZW50LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSks''@;'; put 'put ''ZS5za2lwUHJpc3RpbmVDaGVja3x8dGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh7fSx0KSx0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQoe30sdCkpfXNldFBhcmVudChlKXt0aGlzLl9wYXJlbnQ9ZX1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXVwZGF0ZVZhbHVlQW5k''@;'; put 'put ''VmFsaWRpdHkoZT17fSl7aWYodGhpcy5fc2V0SW5pdGlhbFN0YXR1cygpLHRoaXMuX3VwZGF0ZVZhbHVlKCksdGhpcy5lbmFibGVkKXtjb25zdCByPXRoaXMuX2NhbmNlbEV4aXN0aW5nU3Vic2NyaXB0aW9uKCk7dGhpcy5lcnJvcnM9dGhpcy5fcnVuVmFsaWRhdG9yKCksdGhpcy5zdGF0dXM9''@;'; put 'put ''dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksKHRoaXMuc3RhdHVzPT09dER8fHRoaXMuc3RhdHVzPT09ZU0pJiZ0aGlzLl9ydW5Bc3luY1ZhbGlkYXRvcihyLGUuZW1pdEV2ZW50KX1jb25zdCB0PWUuc291cmNlQ29udHJvbD8/dGhpczshMSE9PWUuZW1pdEV2ZW50JiYodGhpcy5fZXZlbnRzLm5l''@;'; put 'put ''eHQobmV3IGRTZSh0aGlzLnZhbHVlLHQpKSx0aGlzLl9ldmVudHMubmV4dChuZXcgbXoodGhpcy5zdGF0dXMsdCkpLHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0aGlzLl9wYXJlbnQmJiFlLm9ubHlTZWxm''@;'; put 'put ''JiZ0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7Li4uZSxzb3VyY2VDb250cm9sOnR9KX1fdXBkYXRlVHJlZVZhbGlkaXR5KGU9e2VtaXRFdmVudDohMH0pe3RoaXMuX2ZvckVhY2hDaGlsZCh0PT50Ll91cGRhdGVUcmVlVmFsaWRpdHkoZSkpLHRoaXMudXBkYXRlVmFsdWVB''@;'; put 'put ''bmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9X3NldEluaXRpYWxTdGF0dXMoKXt0aGlzLnN0YXR1cz10aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/bkQ6dER9X3J1blZhbGlkYXRvcigpe3JldHVybiB0aGlzLnZhbGlkYXRvcj90aGlzLnZhbGlkYXRv''@;'; put 'put ''cih0aGlzKTpudWxsfV9ydW5Bc3luY1ZhbGlkYXRvcihlLHQpe2lmKHRoaXMuYXN5bmNWYWxpZGF0b3Ipe3RoaXMuc3RhdHVzPWVNLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj17ZW1pdEV2ZW50OiExIT09dCxzaG91bGRIYXZlRW1pdHRlZDohMSE9PWV9O2NvbnN0IHI9WENl''@;'; put 'put ''KHRoaXMuYXN5bmNWYWxpZGF0b3IodGhpcykpO3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbj1yLnN1YnNjcmliZShpPT57dGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPW51bGwsdGhpcy5zZXRFcnJvcnMoaSx7ZW1pdEV2ZW50OnQsc2hvdWxkSGF2ZUVtaXR0ZWQ6''@;'; put 'put ''ZX0pfSl9fV9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpe2lmKHRoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbil7dGhpcy5fYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7Y29uc3QgZT0odGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9y''@;'; put 'put ''Py5lbWl0RXZlbnR8fHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj8uc2hvdWxkSGF2ZUVtaXR0ZWQpPz8hMTtyZXR1cm4gdGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPW51bGwsZX1yZXR1cm4hMX1zZXRFcnJvcnMoZSx0PXt9KXt0aGlzLmVycm9ycz1lLHRoaXMu''@;'; put 'put ''X3VwZGF0ZUNvbnRyb2xzRXJyb3JzKCExIT09dC5lbWl0RXZlbnQsdGhpcyx0LnNob3VsZEhhdmVFbWl0dGVkKX1nZXQoZSl7bGV0IHQ9ZTtyZXR1cm4gbnVsbD09dHx8KEFycmF5LmlzQXJyYXkodCl8fCh0PXQuc3BsaXQoIi4iKSksMD09PXQubGVuZ3RoKT9udWxsOnQucmVkdWNlKChyLGkp''@;'; put 'put ''PT5yJiZyLl9maW5kKGkpLHRoaXMpfWdldEVycm9yKGUsdCl7Y29uc3Qgcj10P3RoaXMuZ2V0KHQpOnRoaXM7cmV0dXJuIHImJnIuZXJyb3JzP3IuZXJyb3JzW2VdOm51bGx9aGFzRXJyb3IoZSx0KXtyZXR1cm4hIXRoaXMuZ2V0RXJyb3IoZSx0KX1nZXQgcm9vdCgpe2xldCBlPXRoaXM7Zm9y''@;'; put 'put ''KDtlLl9wYXJlbnQ7KWU9ZS5fcGFyZW50O3JldHVybiBlfV91cGRhdGVDb250cm9sc0Vycm9ycyhlLHQscil7dGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksZSYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLChlfHxyKSYmdGhpcy5fZXZlbnRzLm5leHQo''@;'; put 'put ''bmV3IG16KHRoaXMuc3RhdHVzLHQpKSx0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5fdXBkYXRlQ29udHJvbHNFcnJvcnMoZSx0LHIpfV9pbml0T2JzZXJ2YWJsZXMoKXt0aGlzLnZhbHVlQ2hhbmdlcz1uZXcgS3IsdGhpcy5zdGF0dXNDaGFuZ2VzPW5ldyBLcn1fY2FsY3VsYXRlU3RhdHVz''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT9uRDp0aGlzLmVycm9ycz9nejp0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3J8fHRoaXMuX2FueUNvbnRyb2xzSGF2ZVN0YXR1cyhlTSk/ZU06dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKGd6KT9nejp0RH1f''@;'; put 'put ''YW55Q29udHJvbHNIYXZlU3RhdHVzKGUpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyh0PT50LnN0YXR1cz09PWUpfV9hbnlDb250cm9sc0RpcnR5KCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGU9PmUuZGlydHkpfV9hbnlDb250cm9sc1RvdWNoZWQoKXtyZXR1cm4gdGhpcy5fYW55Q29u''@;'; put 'put ''dHJvbHMoZT0+ZS50b3VjaGVkKX1fdXBkYXRlUHJpc3RpbmUoZSx0KXtjb25zdCByPSF0aGlzLl9hbnlDb250cm9sc0RpcnR5KCksaT10aGlzLnByaXN0aW5lIT09cjt0aGlzLnByaXN0aW5lPXIsdGhpcy5fcGFyZW50JiYhZS5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGlu''@;'; put 'put ''ZShlLHQpLGkmJnRoaXMuX2V2ZW50cy5uZXh0KG5ldyBxaWUodGhpcy5wcmlzdGluZSx0KSl9X3VwZGF0ZVRvdWNoZWQoZT17fSx0KXt0aGlzLnRvdWNoZWQ9dGhpcy5fYW55Q29udHJvbHNUb3VjaGVkKCksdGhpcy5fZXZlbnRzLm5leHQobmV3IEtpZSh0aGlzLnRvdWNoZWQsdCkpLHRoaXMu''@;'; put 'put ''X3BhcmVudCYmIWUub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZChlLHQpfV9vbkRpc2FibGVkQ2hhbmdlPVtdO19yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZShlKXt0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9ZX1fc2V0VXBkYXRlU3RyYXRlZ3koZSl7dnooZSkmJm51''@;'; put 'put ''bGwhPWUudXBkYXRlT24mJih0aGlzLl91cGRhdGVPbj1lLnVwZGF0ZU9uKX1fcGFyZW50TWFya2VkRGlydHkoZSl7cmV0dXJuIWUmJiEoIXRoaXMuX3BhcmVudHx8IXRoaXMuX3BhcmVudC5kaXJ0eSkmJiF0aGlzLl9wYXJlbnQuX2FueUNvbnRyb2xzRGlydHkoKX1fZmluZChlKXtyZXR1cm4g''@;'; put 'put ''bnVsbH1fYXNzaWduVmFsaWRhdG9ycyhlKXt0aGlzLl9yYXdWYWxpZGF0b3JzPUFycmF5LmlzQXJyYXkoZSk/ZS5zbGljZSgpOmUsdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1mdW5jdGlvbiBVcHQobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/V2llKG4pOm58fG51bGx9KHRoaXMuX3Jh''@;'; put 'put ''d1ZhbGlkYXRvcnMpfV9hc3NpZ25Bc3luY1ZhbGlkYXRvcnMoZSl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPUFycmF5LmlzQXJyYXkoZSk/ZS5zbGljZSgpOmUsdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPWZ1bmN0aW9uIHpwdChuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9Z''@;'; put 'put ''aWUobik6bnx8bnVsbH0odGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX19Y2xhc3MgX3ogZXh0ZW5kcyBlb2V7Y29uc3RydWN0b3IoZSx0LHIpe3N1cGVyKFFpZSh0KSxKaWUocix0KSksdGhpcy5jb250cm9scz1lLHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMuX3NldFVwZGF0ZVN0cmF0''@;'; put 'put ''ZWd5KHQpLHRoaXMuX3NldFVwQ29udHJvbHMoKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohIXRoaXMuYXN5bmNWYWxpZGF0b3J9KX1jb250cm9scztyZWdpc3RlckNvbnRyb2woZSx0KXtyZXR1cm4gdGhpcy5jb250cm9sc1tlXT90aGlzLmNv''@;'; put 'put ''bnRyb2xzW2VdOih0aGlzLmNvbnRyb2xzW2VdPXQsdC5zZXRQYXJlbnQodGhpcyksdC5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKSx0KX1hZGRDb250cm9sKGUsdCxyPXt9KXt0aGlzLnJlZ2lzdGVyQ29udHJvbChlLHQpLHRoaXMudXBkYXRl''@;'; put 'put ''VmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OnIuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9cmVtb3ZlQ29udHJvbChlLHQ9e30pe3RoaXMuY29udHJvbHNbZV0mJnRoaXMuY29udHJvbHNbZV0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSksZGVs''@;'; put 'put ''ZXRlIHRoaXMuY29udHJvbHNbZV0sdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6dC5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1zZXRDb250cm9sKGUsdCxyPXt9KXt0aGlzLmNvbnRyb2xzW2VdJiZ0aGlzLmNvbnRyb2xzW2VdLl9yZWdpc3Rl''@;'; put 'put ''ck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW2VdLHQmJnRoaXMucmVnaXN0ZXJDb250cm9sKGUsdCksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ci5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1jb250''@;'; put 'put ''YWlucyhlKXtyZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eShlKSYmdGhpcy5jb250cm9sc1tlXS5lbmFibGVkfXNldFZhbHVlKGUsdD17fSl7KGZ1bmN0aW9uIHBTZShuLGUsdCl7bi5fZm9yRWFjaENoaWxkKChyLGkpPT57aWYodm9pZCAwPT09dFtpXSl0aHJvdyBuZXcgV24o''@;'; put 'put ''MTAwMiwiIil9KX0pKHRoaXMsMCxlKSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHI9PnsoZnVuY3Rpb24gZlNlKG4sZSx0KXtjb25zdCByPW4uY29udHJvbHM7aWYoIShlP09iamVjdC5rZXlzKHIpOnIpLmxlbmd0aCl0aHJvdyBuZXcgV24oMWUzLCIiKTtpZighclt0XSl0aHJvdyBuZXcgV24o''@;'; put 'put ''MTAwMSwiIil9KSh0aGlzLCEwLHIpLHRoaXMuY29udHJvbHNbcl0uc2V0VmFsdWUoZVtyXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OnQuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkodCl9cGF0Y2hWYWx1ZShlLHQ9e30pe251bGwhPWUmJihPYmplY3Qua2V5cyhl''@;'; put 'put ''KS5mb3JFYWNoKHI9Pntjb25zdCBpPXRoaXMuY29udHJvbHNbcl07aSYmaS5wYXRjaFZhbHVlKGVbcl0se29ubHlTZWxmOiEwLGVtaXRFdmVudDp0LmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQpKX1yZXNldChlPXt9LHQ9e30pe3RoaXMuX2ZvckVhY2hDaGls''@;'; put 'put ''ZCgocixpKT0+e3IucmVzZXQoZT9lW2ldOm51bGwse29ubHlTZWxmOiEwLGVtaXRFdmVudDp0LmVtaXRFdmVudH0pfSksdGhpcy5fdXBkYXRlUHJpc3RpbmUodCx0aGlzKSx0aGlzLl91cGRhdGVUb3VjaGVkKHQsdGhpcyksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQpLCExIT09dD8u''@;'; put 'put ''ZW1pdEV2ZW50JiZ0aGlzLl9ldmVudHMubmV4dChuZXcgWGllKHRoaXMpKX1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwoZSx0LHIpPT4oZVtyXT10LmdldFJhd1ZhbHVlKCksZSkpfV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7bGV0IGU9dGhpcy5fcmVkdWNl''@;'; put 'put ''Q2hpbGRyZW4oITEsKHQscik9PiEhci5fc3luY1BlbmRpbmdDb250cm9scygpfHx0KTtyZXR1cm4gZSYmdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMH0pLGV9X2ZvckVhY2hDaGlsZChlKXtPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5mb3JFYWNoKHQ9Pntjb25z''@;'; put 'put ''dCByPXRoaXMuY29udHJvbHNbdF07ciYmZShyLHQpfSl9X3NldFVwQ29udHJvbHMoKXt0aGlzLl9mb3JFYWNoQ2hpbGQoZT0+e2Uuc2V0UGFyZW50KHRoaXMpLGUuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSl9KX1fdXBkYXRlVmFsdWUoKXt0''@;'; put 'put ''aGlzLnZhbHVlPXRoaXMuX3JlZHVjZVZhbHVlKCl9X2FueUNvbnRyb2xzKGUpe2Zvcihjb25zdFt0LHJdb2YgT2JqZWN0LmVudHJpZXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250YWlucyh0KSYmZShyKSlyZXR1cm4hMDtyZXR1cm4hMX1fcmVkdWNlVmFsdWUoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''cmVkdWNlQ2hpbGRyZW4oe30sKHQscixpKT0+KChyLmVuYWJsZWR8fHRoaXMuZGlzYWJsZWQpJiYodFtpXT1yLnZhbHVlKSx0KSl9X3JlZHVjZUNoaWxkcmVuKGUsdCl7bGV0IHI9ZTtyZXR1cm4gdGhpcy5fZm9yRWFjaENoaWxkKChpLG8pPT57cj10KHIsaSxvKX0pLHJ9X2FsbENvbnRyb2xz''@;'; put 'put ''RGlzYWJsZWQoKXtmb3IoY29uc3QgZSBvZiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKSlpZih0aGlzLmNvbnRyb2xzW2VdLmVuYWJsZWQpcmV0dXJuITE7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aD4wfHx0aGlzLmRpc2FibGVkfV9maW5kKGUpe3JldHVybiB0''@;'; put 'put ''aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KGUpP3RoaXMuY29udHJvbHNbZV06bnVsbH19Y29uc3QgRGI9bmV3IEVyKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5yRH0pLHJEPSJhbHdheXMiO2Z1bmN0aW9uIGlEKG4sZSx0PXJEKXt0b2UobixlKSxlLnZhbHVlQWNjZXNz''@;'; put 'put ''b3Iud3JpdGVWYWx1ZShuLnZhbHVlKSwobi5kaXNhYmxlZHx8ImFsd2F5cyI9PT10KSYmZS52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGU/LihuLmRpc2FibGVkKSxmdW5jdGlvbiBacHQobixlKXtlLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPbkNoYW5nZSh0PT57bi5fcGVuZGluZ1Zh''@;'; put 'put ''bHVlPXQsbi5fcGVuZGluZ0NoYW5nZT0hMCxuLl9wZW5kaW5nRGlydHk9ITAsImNoYW5nZSI9PT1uLnVwZGF0ZU9uJiZnU2UobixlKX0pfShuLGUpLGZ1bmN0aW9uICRwdChuLGUpe2NvbnN0IHQ9KHIsaSk9PntlLnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZShyKSxpJiZlLnZpZXdUb01vZGVs''@;'; put 'put ''VXBkYXRlKHIpfTtuLnJlZ2lzdGVyT25DaGFuZ2UodCksZS5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntuLl91bnJlZ2lzdGVyT25DaGFuZ2UodCl9KX0obixlKSxmdW5jdGlvbiBHcHQobixlKXtlLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPblRvdWNoZWQoKCk9PntuLl9wZW5kaW5nVG91Y2hl''@;'; put 'put ''ZD0hMCwiYmx1ciI9PT1uLnVwZGF0ZU9uJiZuLl9wZW5kaW5nQ2hhbmdlJiZnU2UobixlKSwic3VibWl0IiE9PW4udXBkYXRlT24mJm4ubWFya0FzVG91Y2hlZCgpfSl9KG4sZSksZnVuY3Rpb24gWXB0KG4sZSl7aWYoZS52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUpe2NvbnN0IHQ9''@;'; put 'put ''cj0+e2UudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKHIpfTtuLnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZSh0KSxlLl9yZWdpc3Rlck9uRGVzdHJveSgoKT0+e24uX3VucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKHQpfSl9fShuLGUpfWZ1bmN0aW9uIHd6KG4sZSl7bi5mb3JFYWNo''@;'; put 'put ''KHQ9Pnt0LnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UmJnQucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShlKX0pfWZ1bmN0aW9uIHRvZShuLGUpe2NvbnN0IHQ9ZnVuY3Rpb24gaVNlKG4pe3JldHVybiBuLl9yYXdWYWxpZGF0b3JzfShuKTtudWxsIT09ZS52YWxpZGF0b3I/bi5zZXRWYWxp''@;'; put 'put ''ZGF0b3JzKHJTZSh0LGUudmFsaWRhdG9yKSk6ImZ1bmN0aW9uIj09dHlwZW9mIHQmJm4uc2V0VmFsaWRhdG9ycyhbdF0pO2NvbnN0IHI9ZnVuY3Rpb24gb1NlKG4pe3JldHVybiBuLl9yYXdBc3luY1ZhbGlkYXRvcnN9KG4pO251bGwhPT1lLmFzeW5jVmFsaWRhdG9yP24uc2V0QXN5bmNWYWxp''@;'; put 'put ''ZGF0b3JzKHJTZShyLGUuYXN5bmNWYWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgciYmbi5zZXRBc3luY1ZhbGlkYXRvcnMoW3JdKTtjb25zdCBpPSgpPT5uLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTt3eihlLl9yYXdWYWxpZGF0b3JzLGkpLHd6KGUuX3Jhd0FzeW5jVmFsaWRhdG9y''@;'; put 'put ''cyxpKX1mdW5jdGlvbiBnU2UobixlKXtuLl9wZW5kaW5nRGlydHkmJm4ubWFya0FzRGlydHkoKSxuLnNldFZhbHVlKG4uX3BlbmRpbmdWYWx1ZSx7ZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiExfSksZS52aWV3VG9Nb2RlbFVwZGF0ZShuLl9wZW5kaW5nVmFsdWUpLG4uX3BlbmRpbmdDaGFuZ2U9''@;'; put 'put ''ITF9Y29uc3QgSnB0PXtwcm92aWRlOkRmLHVzZUV4aXN0aW5nOlVvKCgpPT5kNCl9LG9EPVByb21pc2UucmVzb2x2ZSgpO2xldCBkND0oKCk9PntjbGFzcyBuIGV4dGVuZHMgRGZ7Y2FsbFNldERpc2FibGVkU3RhdGU7Z2V0IHN1Ym1pdHRlZCgpe3JldHVybiBOdSh0aGlzLnN1Ym1pdHRlZFJl''@;'; put 'put ''YWN0aXZlKX1fc3VibWl0dGVkPW40KCgpPT50aGlzLnN1Ym1pdHRlZFJlYWN0aXZlKCkpO3N1Ym1pdHRlZFJlYWN0aXZlPUIxKCExKTtfZGlyZWN0aXZlcz1uZXcgU2V0O2Zvcm07bmdTdWJtaXQ9bmV3IEtyO29wdGlvbnM7Y29uc3RydWN0b3IodCxyLGkpe3N1cGVyKCksdGhpcy5jYWxsU2V0''@;'; put 'put ''RGlzYWJsZWRTdGF0ZT1pLHRoaXMuZm9ybT1uZXcgX3ooe30sV2llKHQpLFlpZShyKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0''@;'; put 'put ''aCgpe3JldHVybltdfWdldCBjb250cm9scygpe3JldHVybiB0aGlzLmZvcm0uY29udHJvbHN9YWRkQ29udHJvbCh0KXtvRC50aGVuKCgpPT57Y29uc3Qgcj10aGlzLl9maW5kQ29udGFpbmVyKHQucGF0aCk7dC5jb250cm9sPXIucmVnaXN0ZXJDb250cm9sKHQubmFtZSx0LmNvbnRyb2wpLGlE''@;'; put 'put ''KHQuY29udHJvbCx0LHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpLHQuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLl9kaXJlY3RpdmVzLmFkZCh0KX0pfWdldENvbnRyb2wodCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX1yZW1vdmVD''@;'; put 'put ''b250cm9sKHQpe29ELnRoZW4oKCk9Pntjb25zdCByPXRoaXMuX2ZpbmRDb250YWluZXIodC5wYXRoKTtyJiZyLnJlbW92ZUNvbnRyb2wodC5uYW1lKSx0aGlzLl9kaXJlY3RpdmVzLmRlbGV0ZSh0KX0pfWFkZEZvcm1Hcm91cCh0KXtvRC50aGVuKCgpPT57Y29uc3Qgcj10aGlzLl9maW5kQ29u''@;'; put 'put ''dGFpbmVyKHQucGF0aCksaT1uZXcgX3ooe30pOyhmdW5jdGlvbiBtU2UobixlKXt0b2UobixlKX0pKGksdCksci5yZWdpc3RlckNvbnRyb2wodC5uYW1lLGkpLGkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9KX1yZW1vdmVGb3JtR3JvdXAodCl7b0QudGhlbigoKT0+''@;'; put 'put ''e2NvbnN0IHI9dGhpcy5fZmluZENvbnRhaW5lcih0LnBhdGgpO3ImJnIucmVtb3ZlQ29udHJvbCh0Lm5hbWUpfSl9Z2V0Rm9ybUdyb3VwKHQpe3JldHVybiB0aGlzLmZvcm0uZ2V0KHQucGF0aCl9dXBkYXRlTW9kZWwodCxyKXtvRC50aGVuKCgpPT57dGhpcy5mb3JtLmdldCh0LnBhdGgpLnNl''@;'; put 'put ''dFZhbHVlKHIpfSl9c2V0VmFsdWUodCl7dGhpcy5jb250cm9sLnNldFZhbHVlKHQpfW9uU3VibWl0KHQpe3JldHVybiB0aGlzLnN1Ym1pdHRlZFJlYWN0aXZlLnNldCghMCksZnVuY3Rpb24gdlNlKG4sZSl7bi5fc3luY1BlbmRpbmdDb250cm9scygpLGUuZm9yRWFjaCh0PT57Y29uc3Qgcj10''@;'; put 'put ''LmNvbnRyb2w7InN1Ym1pdCI9PT1yLnVwZGF0ZU9uJiZyLl9wZW5kaW5nQ2hhbmdlJiYodC52aWV3VG9Nb2RlbFVwZGF0ZShyLl9wZW5kaW5nVmFsdWUpLHIuX3BlbmRpbmdDaGFuZ2U9ITEpfSl9KHRoaXMuZm9ybSx0aGlzLl9kaXJlY3RpdmVzKSx0aGlzLm5nU3VibWl0LmVtaXQodCksdGhp''@;'; put 'put ''cy5mb3JtLl9ldmVudHMubmV4dChuZXcgaFNlKHRoaXMuY29udHJvbCkpLCJkaWFsb2ciPT09dD8udGFyZ2V0Py5tZXRob2R9b25SZXNldCgpe3RoaXMucmVzZXRGb3JtKCl9cmVzZXRGb3JtKHQ9dm9pZCAwKXt0aGlzLmZvcm0ucmVzZXQodCksdGhpcy5zdWJtaXR0ZWRSZWFjdGl2ZS5zZXQo''@;'; put 'put ''ITEpfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5mb3JtLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9maW5kQ29udGFpbmVyKHQpe3JldHVybiB0LnBvcCgpLHQubGVuZ3RoP3RoaXMuZm9ybS5n''@;'; put 'put ''ZXQodCk6dGhpcy5mb3JtfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKSh6ZShHMSwxMCksemUobXYsMTApLHplKERiLDgpKX07c3RhdGljIFx1MDI3NWRpcj0kcih7dHlwZTpuLHNlbGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywiZm9ybUdy''@;'; put 'put ''b3VwIiwiIl0sWyJuZy1mb3JtIl0sWyIiLCJuZ0Zvcm0iLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHIsaSl7MSZyJiZ3dCgic3VibWl0IixmdW5jdGlvbihhKXtyZXR1cm4gaS5vblN1Ym1pdChhKX0pKCJyZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblJlc2V0KCl9KX0saW5wdXRz''@;'; put 'put ''OntvcHRpb25zOlswLCJuZ0Zvcm1PcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxleHBvcnRBczpbIm5nRm9ybSJdLHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2JvKFtKcHRdKSxGb119KX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gX1NlKG4sZSl7Y29u''@;'; put 'put ''c3QgdD1uLmluZGV4T2YoZSk7dD4tMSYmbi5zcGxpY2UodCwxKX1mdW5jdGlvbiB5U2Uobil7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT09biYmMj09PU9iamVjdC5rZXlzKG4pLmxlbmd0aCYmInZhbHVlImluIG4mJiJkaXNhYmxlZCJpbiBufWNvbnN0IG9vZT1jbGFzcyBleHRl''@;'; put 'put ''bmRzIGVvZXtkZWZhdWx0VmFsdWU9bnVsbDtfb25DaGFuZ2U9W107X3BlbmRpbmdWYWx1ZTtfcGVuZGluZ0NoYW5nZT0hMTtjb25zdHJ1Y3RvcihlPW51bGwsdCxyKXtzdXBlcihRaWUodCksSmllKHIsdCkpLHRoaXMuX2FwcGx5Rm9ybVN0YXRlKGUpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5''@;'; put 'put ''KHQpLHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pLHZ6KHQpJiYodC5ub25OdWxsYWJsZXx8dC5pbml0aWFsVmFsdWVJc0RlZmF1bHQpJiYodGhpcy5kZWZhdWx0''@;'; put 'put ''VmFsdWU9eVNlKGUpP2UudmFsdWU6ZSl9c2V0VmFsdWUoZSx0PXt9KXt0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT1lLHRoaXMuX29uQ2hhbmdlLmxlbmd0aCYmITEhPT10LmVtaXRNb2RlbFRvVmlld0NoYW5nZSYmdGhpcy5fb25DaGFuZ2UuZm9yRWFjaChyPT5yKHRoaXMudmFsdWUs''@;'; put 'put ''ITEhPT10LmVtaXRWaWV3VG9Nb2RlbENoYW5nZSkpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh0KX1wYXRjaFZhbHVlKGUsdD17fSl7dGhpcy5zZXRWYWx1ZShlLHQpfXJlc2V0KGU9dGhpcy5kZWZhdWx0VmFsdWUsdD17fSl7dGhpcy5fYXBwbHlGb3JtU3RhdGUoZSksdGhpcy5tYXJr''@;'; put 'put ''QXNQcmlzdGluZSh0KSx0aGlzLm1hcmtBc1VudG91Y2hlZCh0KSx0aGlzLnNldFZhbHVlKHRoaXMudmFsdWUsdCksdGhpcy5fcGVuZGluZ0NoYW5nZT0hMSwhMSE9PXQ/LmVtaXRFdmVudCYmdGhpcy5fZXZlbnRzLm5leHQobmV3IFhpZSh0aGlzKSl9X3VwZGF0ZVZhbHVlKCl7fV9hbnlDb250''@;'; put 'put ''cm9scyhlKXtyZXR1cm4hMX1fYWxsQ29udHJvbHNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fb25DaGFuZ2UucHVzaChlKX1fdW5yZWdpc3Rlck9uQ2hhbmdlKGUpe19TZSh0aGlzLl9vbkNoYW5nZSxlKX1yZWdpc3Rlck9uRGlzYWJs''@;'; put 'put ''ZWRDaGFuZ2UoZSl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKGUpfV91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShlKXtfU2UodGhpcy5fb25EaXNhYmxlZENoYW5nZSxlKX1fZm9yRWFjaENoaWxkKGUpe31fc3luY1BlbmRpbmdDb250cm9scygpe3JldHVybiEoInN1Ym1pdCIhPT10''@;'; put 'put ''aGlzLnVwZGF0ZU9ufHwodGhpcy5fcGVuZGluZ0RpcnR5JiZ0aGlzLm1hcmtBc0RpcnR5KCksdGhpcy5fcGVuZGluZ1RvdWNoZWQmJnRoaXMubWFya0FzVG91Y2hlZCgpLCF0aGlzLl9wZW5kaW5nQ2hhbmdlKXx8KHRoaXMuc2V0VmFsdWUodGhpcy5fcGVuZGluZ1ZhbHVlLHtvbmx5U2VsZjoh''@;'; put 'put ''MCxlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSwwKSl9X2FwcGx5Rm9ybVN0YXRlKGUpe3lTZShlKT8odGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9ZS52YWx1ZSxlLmRpc2FibGVkP3RoaXMuZGlzYWJsZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSk6dGhpcy5lbmFibGUoe29u''@;'; put 'put ''bHlTZWxmOiEwLGVtaXRFdmVudDohMX0pKTp0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT1lfX0saWd0PXtwcm92aWRlOlYyLHVzZUV4aXN0aW5nOlVvKCgpPT5YbCl9LGJTZT1Qcm9taXNlLnJlc29sdmUoKTtsZXQgWGw9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFYye19jaGFuZ2VEZXRl''@;'; put 'put ''Y3RvclJlZjtjYWxsU2V0RGlzYWJsZWRTdGF0ZTtjb250cm9sPW5ldyBvb2U7c3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2lzRGlzYWJsZWQ7X3JlZ2lzdGVyZWQ9ITE7dmlld01vZGVsO25hbWU9IiI7aXNEaXNhYmxlZDttb2RlbDtvcHRpb25zO3VwZGF0ZT1uZXcgS3I7Y29uc3RydWN0b3Io''@;'; put 'put ''dCxyLGksbyxhLGwpe3N1cGVyKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9YSx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlPWwsdGhpcy5fcGFyZW50PXQsdGhpcy5fc2V0VmFsaWRhdG9ycyhyKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoaSksdGhpcy52YWx1ZUFjY2Vzc29yPWZ1bmN0''@;'; put 'put ''aW9uIGlvZShuLGUpe2lmKCFlKXJldHVybiBudWxsO2xldCB0LHIsaTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSxlLmZvckVhY2gobz0+e28uY29uc3RydWN0b3I9PT1sdT90PW86ZnVuY3Rpb24gWHB0KG4pe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobi5jb25zdHJ1Y3Rvcik9PT1S''@;'; put 'put ''Yn0obyk/cj1vOmk9b30pLGl8fHJ8fHR8fG51bGx9KDAsbyl9bmdPbkNoYW5nZXModCl7aWYodGhpcy5fY2hlY2tGb3JFcnJvcnMoKSwhdGhpcy5fcmVnaXN0ZXJlZHx8Im5hbWUiaW4gdCl7aWYodGhpcy5fcmVnaXN0ZXJlZCYmKHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuZm9ybURpcmVjdGl2''@;'; put 'put ''ZSkpe2NvbnN0IHI9dC5uYW1lLnByZXZpb3VzVmFsdWU7dGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2woe25hbWU6cixwYXRoOnRoaXMuX2dldFBhdGgocil9KX10aGlzLl9zZXRVcENvbnRyb2woKX0iaXNEaXNhYmxlZCJpbiB0JiZ0aGlzLl91cGRhdGVEaXNhYmxlZCh0KSxmdW5j''@;'; put 'put ''dGlvbiByb2UobixlKXtpZighbi5oYXNPd25Qcm9wZXJ0eSgibW9kZWwiKSlyZXR1cm4hMTtjb25zdCB0PW4ubW9kZWw7cmV0dXJuISF0LmlzRmlyc3RDaGFuZ2UoKXx8IU9iamVjdC5pcyhlLHQuY3VycmVudFZhbHVlKX0odCx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLl91cGRhdGVWYWx1ZSh0''@;'; put 'put ''aGlzLm1vZGVsKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9Z2V0IHBhdGgoKXtyZXR1cm4gdGhpcy5fZ2V0UGF0aCh0aGlzLm5hbWUpfWdldCBmb3JtRGly''@;'; put 'put ''ZWN0aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfXZpZXdUb01vZGVsVXBkYXRlKHQpe3RoaXMudmlld01vZGVsPXQsdGhpcy51cGRhdGUuZW1pdCh0KX1fc2V0VXBDb250cm9sKCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKSx0aGlz''@;'; put 'put ''Ll9pc1N0YW5kYWxvbmUoKT90aGlzLl9zZXRVcFN0YW5kYWxvbmUoKTp0aGlzLmZvcm1EaXJlY3RpdmUuYWRkQ29udHJvbCh0aGlzKSx0aGlzLl9yZWdpc3RlcmVkPSEwfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhp''@;'; put 'put ''cy5jb250cm9sLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9pc1N0YW5kYWxvbmUoKXtyZXR1cm4hdGhpcy5fcGFyZW50fHwhKCF0aGlzLm9wdGlvbnN8fCF0aGlzLm9wdGlvbnMuc3RhbmRhbG9uZSl9X3NldFVwU3RhbmRhbG9uZSgpe2lEKHRoaXMuY29udHJvbCx0aGlzLHRo''@;'; put 'put ''aXMuY2FsbFNldERpc2FibGVkU3RhdGUpLHRoaXMuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1fY2hlY2tGb3JFcnJvcnMoKXt0aGlzLl9jaGVja05hbWUoKX1fY2hlY2tOYW1lKCl7dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMubmFtZSYmKHRoaXMu''@;'; put 'put ''bmFtZT10aGlzLm9wdGlvbnMubmFtZSksdGhpcy5faXNTdGFuZGFsb25lKCl9X3VwZGF0ZVZhbHVlKHQpe2JTZS50aGVuKCgpPT57dGhpcy5jb250cm9sLnNldFZhbHVlKHQse2VtaXRWaWV3VG9Nb2RlbENoYW5nZTohMX0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2so''@;'; put 'put ''KX0pfV91cGRhdGVEaXNhYmxlZCh0KXtjb25zdCByPXQuaXNEaXNhYmxlZC5jdXJyZW50VmFsdWUsaT0wIT09ciYmWjAocik7YlNlLnRoZW4oKCk9PntpJiYhdGhpcy5jb250cm9sLmRpc2FibGVkP3RoaXMuY29udHJvbC5kaXNhYmxlKCk6IWkmJnRoaXMuY29udHJvbC5kaXNhYmxlZCYmdGhp''@;'; put 'put ''cy5jb250cm9sLmVuYWJsZSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKX0pfV9nZXRQYXRoKHQpe3JldHVybiB0aGlzLl9wYXJlbnQ/ZnVuY3Rpb24geXoobixlKXtyZXR1cm5bLi4uZS5wYXRoLG5dfSh0LHRoaXMuX3BhcmVudCk6W3RdfXN0YXRpYyBcdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKSh6ZShEZiw5KSx6ZShHMSwxMCksemUobXYsMTApLHplKHo1LDEwKSx6ZShVbCw4KSx6ZShEYiw4KSl9O3N0YXRpYyBcdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdNb2RlbCIsIiIsMywiZm9ybUNvbnRyb2xOYW1l''@;'; put 'put ''IiwiIiwzLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGlzRGlzYWJsZWQ6WzAsImRpc2FibGVkIiwiaXNEaXNhYmxlZCJdLG1vZGVsOlswLCJuZ01vZGVsIiwibW9kZWwiXSxvcHRpb25zOlswLCJuZ01vZGVsT3B0aW9ucyIsIm9wdGlvbnMiXX0sb3V0cHV0czp7dXBk''@;'; put 'put ''YXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ01vZGVsIl0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbYm8oW2lndF0pLEZvLGl1XX0pfXJldHVybiBufSkoKSxMYj0oKCk9PntjbGFzcyBue3N0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3Rh''@;'; put 'put ''dGljIFx1MDI3NWRpcj0kcih7dHlwZTpuLHNlbGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywibmdOYXRpdmVWYWxpZGF0ZSIsIiJdXSxob3N0QXR0cnM6WyJub3ZhbGlkYXRlIiwiIl0sc3RhbmRhbG9uZTohMX0pfXJldHVybiBufSkoKTtjb25zdCBvZ3Q9e3Byb3ZpZGU6ejUs''@;'; put 'put ''dXNlRXhpc3Rpbmc6VW8oKCk9PkV6KSxtdWx0aTohMH07bGV0IEV6PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBSYnt3cml0ZVZhbHVlKHQpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIix0Pz8iIil9cmVnaXN0ZXJPbkNoYW5nZSh0KXt0aGlzLm9uQ2hhbmdlPXI9Pnt0KCIiPT1yP251bGw6cGFy''@;'; put 'put ''c2VGbG9hdChyKSl9fXN0YXRpYyBcdTAyNzVmYWM9KCgpPT57bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD13YShuKSkpKGl8fG4pfX0pKCk7c3RhdGljIFx1MDI3NWRpcj0kcih7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJmb3JtQ29u''@;'; put 'put ''dHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihyLGkpezEmciYmd3QoImlucHV0IixmdW5jdGlvbihhKXtyZXR1cm4gaS5vbkNo''@;'; put 'put ''YW5nZShhLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltibyhbb2d0XSksRm9dfSl9cmV0dXJuIG59KSgpO2NvbnN0IGFndD17cHJvdmlkZTp6NSx1c2VFeGlzdGluZzpVbygoKT0+TXopLG11''@;'; put 'put ''bHRpOiEwfTtsZXQgc2d0PSgoKT0+e2NsYXNzIG57X2FjY2Vzc29ycz1bXTthZGQodCxyKXt0aGlzLl9hY2Nlc3NvcnMucHVzaChbdCxyXSl9cmVtb3ZlKHQpe2ZvcihsZXQgcj10aGlzLl9hY2Nlc3NvcnMubGVuZ3RoLTE7cj49MDstLXIpaWYodGhpcy5fYWNjZXNzb3JzW3JdWzFdPT09dCly''@;'; put 'put ''ZXR1cm4gdm9pZCB0aGlzLl9hY2Nlc3NvcnMuc3BsaWNlKHIsMSl9c2VsZWN0KHQpe3RoaXMuX2FjY2Vzc29ycy5mb3JFYWNoKHI9Pnt0aGlzLl9pc1NhbWVHcm91cChyLHQpJiZyWzFdIT09dCYmclsxXS5maXJlVW5jaGVjayh0LnZhbHVlKX0pfV9pc1NhbWVHcm91cCh0LHIpe3JldHVybiEh''@;'; put 'put ''dFswXS5jb250cm9sJiZ0WzBdLl9wYXJlbnQ9PT1yLl9jb250cm9sLl9wYXJlbnQmJnRbMV0ubmFtZT09PXIubmFtZX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMs''@;'; put 'put ''cHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0pKCksTXo9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFJie19yZWdpc3RyeTtfaW5qZWN0b3I7X3N0YXRlO19jb250cm9sO19mbjtzZXREaXNhYmxlZFN0YXRlRmlyZWQ9ITE7b25DaGFuZ2U9KCk9Pnt9O25hbWU7Zm9ybUNvbnRyb2xOYW1lO3Zh''@;'; put 'put ''bHVlO2NhbGxTZXREaXNhYmxlZFN0YXRlPXNuKERiLHtvcHRpb25hbDohMH0pPz9yRDtjb25zdHJ1Y3Rvcih0LHIsaSxvKXtzdXBlcih0LHIpLHRoaXMuX3JlZ2lzdHJ5PWksdGhpcy5faW5qZWN0b3I9b31uZ09uSW5pdCgpe3RoaXMuX2NvbnRyb2w9dGhpcy5faW5qZWN0b3IuZ2V0KFYyKSx0''@;'; put 'put ''aGlzLl9jaGVja05hbWUoKSx0aGlzLl9yZWdpc3RyeS5hZGQodGhpcy5fY29udHJvbCx0aGlzKX1uZ09uRGVzdHJveSgpe3RoaXMuX3JlZ2lzdHJ5LnJlbW92ZSh0aGlzKX13cml0ZVZhbHVlKHQpe3RoaXMuX3N0YXRlPXQ9PT10aGlzLnZhbHVlLHRoaXMuc2V0UHJvcGVydHkoImNoZWNrZWQi''@;'; put 'put ''LHRoaXMuX3N0YXRlKX1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMuX2ZuPXQsdGhpcy5vbkNoYW5nZT0oKT0+e3QodGhpcy52YWx1ZSksdGhpcy5fcmVnaXN0cnkuc2VsZWN0KHRoaXMpfX1zZXREaXNhYmxlZFN0YXRlKHQpeyh0aGlzLnNldERpc2FibGVkU3RhdGVGaXJlZHx8dHx8IndoZW5E''@;'; put 'put ''aXNhYmxlZEZvckxlZ2FjeUNvZGUiPT09dGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSkmJnRoaXMuc2V0UHJvcGVydHkoImRpc2FibGVkIix0KSx0aGlzLnNldERpc2FibGVkU3RhdGVGaXJlZD0hMH1maXJlVW5jaGVjayh0KXt0aGlzLndyaXRlVmFsdWUodCl9X2NoZWNrTmFtZSgpeyF0aGlz''@;'; put 'put ''Lm5hbWUmJnRoaXMuZm9ybUNvbnRyb2xOYW1lJiYodGhpcy5uYW1lPXRoaXMuZm9ybUNvbnRyb2xOYW1lKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoemUoTnQpLHplKG5vKSx6ZShzZ3QpLHplKE1sKSl9O3N0YXRpYyBcdTAyNzVkaXI9JHIoe3R5cGU6''@;'; put 'put ''bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlvIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlvIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24ocixp''@;'; put 'put ''KXsxJnImJnd0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25DaGFuZ2UoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7bmFtZToibmFtZSIsZm9ybUNvbnRyb2xOYW1lOiJmb3JtQ29udHJvbE5hbWUiLHZhbHVlOiJ2YWx1ZSJ9LHN0''@;'; put 'put ''YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2JvKFthZ3RdKSxGb119KX1yZXR1cm4gbn0pKCk7Y29uc3QgYW9lPW5ldyBFcigiIikscGd0PXtwcm92aWRlOno1LHVzZUV4aXN0aW5nOlVvKCgpPT5LZyksbXVsdGk6ITB9O2Z1bmN0aW9uIE1TZShuLGUpe3JldHVybiBudWxsPT1uP2Ake2V9YDooZSYm''@;'; put 'put ''Im9iamVjdCI9PXR5cGVvZiBlJiYoZT0iT2JqZWN0IiksYCR7bn06ICR7ZX1gLnNsaWNlKDAsNTApKX1sZXQgS2c9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFJie3ZhbHVlO19vcHRpb25NYXA9bmV3IE1hcDtfaWRDb3VudGVyPTA7c2V0IGNvbXBhcmVXaXRoKHQpe3RoaXMuX2NvbXBhcmVXaXRo''@;'; put 'put ''PXR9X2NvbXBhcmVXaXRoPU9iamVjdC5pczthcHBSZWZJbmplY3Rvcj1zbihXZykuaW5qZWN0b3I7ZGVzdHJveVJlZj1zbihNMik7Y2RyPXNuKFVsKTtfcXVldWVkV3JpdGU9ITE7X3dyaXRlVmFsdWVBZnRlclJlbmRlcigpe3RoaXMuX3F1ZXVlZFdyaXRlfHx0aGlzLmFwcFJlZkluamVjdG9y''@;'; put 'put ''LmRlc3Ryb3llZHx8KHRoaXMuX3F1ZXVlZFdyaXRlPSEwLEg4KHt3cml0ZTooKT0+e3RoaXMuZGVzdHJveVJlZi5kZXN0cm95ZWR8fCh0aGlzLl9xdWV1ZWRXcml0ZT0hMSx0aGlzLndyaXRlVmFsdWUodGhpcy52YWx1ZSkpfX0se2luamVjdG9yOnRoaXMuYXBwUmVmSW5qZWN0b3J9KSl9d3Jp''@;'; put 'put ''dGVWYWx1ZSh0KXt0aGlzLmNkci5tYXJrRm9yQ2hlY2soKSx0aGlzLnZhbHVlPXQ7Y29uc3QgaT1NU2UodGhpcy5fZ2V0T3B0aW9uSWQodCksdCk7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGkpfXJlZ2lzdGVyT25DaGFuZ2UodCl7dGhpcy5vbkNoYW5nZT1yPT57dGhpcy52YWx1ZT10aGlz''@;'; put 'put ''Ll9nZXRPcHRpb25WYWx1ZShyKSx0KHRoaXMudmFsdWUpfX1fcmVnaXN0ZXJPcHRpb24oKXtyZXR1cm4odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCl9X2dldE9wdGlvbklkKHQpe2Zvcihjb25zdCByIG9mIHRoaXMuX29wdGlvbk1hcC5rZXlzKCkpaWYodGhpcy5fY29tcGFyZVdpdGgo''@;'; put 'put ''dGhpcy5fb3B0aW9uTWFwLmdldChyKSx0KSlyZXR1cm4gcjtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUodCl7Y29uc3Qgcj1mdW5jdGlvbiBnZ3Qobil7cmV0dXJuIG4uc3BsaXQoIjoiKVswXX0odCk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMocik/dGhpcy5fb3B0aW9uTWFwLmdl''@;'; put 'put ''dChyKTp0fXN0YXRpYyBcdTAyNzVmYWM9KCgpPT57bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD13YShuKSkpKGl8fG4pfX0pKCk7c3RhdGljIFx1MDI3NWRpcj0kcih7dHlwZTpuLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsIm11bHRp''@;'; put 'put ''cGxlIiwiIl0sWyJzZWxlY3QiLCJmb3JtQ29udHJvbCIsIiIsMywibXVsdGlwbGUiLCIiXSxbInNlbGVjdCIsIm5nTW9kZWwiLCIiLDMsIm11bHRpcGxlIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihyLGkpezEmciYmd3QoImNoYW5nZSIsZnVuY3Rpb24oYSl7cmV0dXJuIGkub25DaGFu''@;'; put 'put ''Z2UoYS50YXJnZXQudmFsdWUpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub3VjaGVkKCl9KX0saW5wdXRzOntjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltibyhbcGd0XSksRm9dfSl9cmV0dXJuIG59KSgpLFhnPSgoKT0+e2NsYXNz''@;'; put 'put ''IG57X2VsZW1lbnQ7X3JlbmRlcmVyO19zZWxlY3Q7aWQ7Y29uc3RydWN0b3IodCxyLGkpe3RoaXMuX2VsZW1lbnQ9dCx0aGlzLl9yZW5kZXJlcj1yLHRoaXMuX3NlbGVjdD1pLHRoaXMuX3NlbGVjdCYmKHRoaXMuaWQ9dGhpcy5fc2VsZWN0Ll9yZWdpc3Rlck9wdGlvbigpKX1zZXQgbmdWYWx1''@;'; put 'put ''ZSh0KXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5zZXQodGhpcy5pZCx0KSx0aGlzLl9zZXRFbGVtZW50VmFsdWUoTVNlKHRoaXMuaWQsdCkpLHRoaXMuX3NlbGVjdC5fd3JpdGVWYWx1ZUFmdGVyUmVuZGVyKCkpfXNldCB2YWx1ZSh0KXt0aGlzLl9zZXRF''@;'; put 'put ''bGVtZW50VmFsdWUodCksdGhpcy5fc2VsZWN0JiZ0aGlzLl9zZWxlY3QuX3dyaXRlVmFsdWVBZnRlclJlbmRlcigpfV9zZXRFbGVtZW50VmFsdWUodCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsdCl9bmdPbkRlc3Ryb3ko''@;'; put 'put ''KXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0Ll93cml0ZVZhbHVlQWZ0ZXJSZW5kZXIoKSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKHplKG5vKSx6ZShOdCksemUoS2csOSkp''@;'; put 'put ''fTtzdGF0aWMgXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbIm9wdGlvbiJdXSxpbnB1dHM6e25nVmFsdWU6Im5nVmFsdWUiLHZhbHVlOiJ2YWx1ZSJ9LHN0YW5kYWxvbmU6ITF9KX1yZXR1cm4gbn0pKCk7Y29uc3QgbWd0PXtwcm92aWRlOno1LHVzZUV4aXN0aW5nOlVvKCgpPT5s''@;'; put 'put ''RCksbXVsdGk6ITB9O2Z1bmN0aW9uIFRTZShuLGUpe3JldHVybiBudWxsPT1uP2Ake2V9YDooInN0cmluZyI9PXR5cGVvZiBlJiYoZT1gJyR7ZX0nYCksZSYmIm9iamVjdCI9PXR5cGVvZiBlJiYoZT0iT2JqZWN0IiksYCR7bn06ICR7ZX1gLnNsaWNlKDAsNTApKX1sZXQgbEQ9KCgpPT57Y2xh''@;'; put 'put ''c3MgbiBleHRlbmRzIFJie3ZhbHVlO19vcHRpb25NYXA9bmV3IE1hcDtfaWRDb3VudGVyPTA7c2V0IGNvbXBhcmVXaXRoKHQpe3RoaXMuX2NvbXBhcmVXaXRoPXR9X2NvbXBhcmVXaXRoPU9iamVjdC5pczt3cml0ZVZhbHVlKHQpe2xldCByO2lmKHRoaXMudmFsdWU9dCxBcnJheS5pc0FycmF5''@;'; put 'put ''KHQpKXtjb25zdCBpPXQubWFwKG89PnRoaXMuX2dldE9wdGlvbklkKG8pKTtyPShvLGEpPT57by5fc2V0U2VsZWN0ZWQoaS5pbmRleE9mKGEudG9TdHJpbmcoKSk+LTEpfX1lbHNlIHI9KGksbyk9PntpLl9zZXRTZWxlY3RlZCghMSl9O3RoaXMuX29wdGlvbk1hcC5mb3JFYWNoKHIpfXJlZ2lz''@;'; put 'put ''dGVyT25DaGFuZ2UodCl7dGhpcy5vbkNoYW5nZT1yPT57Y29uc3QgaT1bXSxvPXIuc2VsZWN0ZWRPcHRpb25zO2lmKHZvaWQgMCE9PW8pe2NvbnN0IGE9bztmb3IobGV0IGw9MDtsPGEubGVuZ3RoO2wrKyl7Y29uc3QgZz10aGlzLl9nZXRPcHRpb25WYWx1ZShhW2xdLnZhbHVlKTtpLnB1c2go''@;'; put 'put ''Zyl9fWVsc2V7Y29uc3QgYT1yLm9wdGlvbnM7Zm9yKGxldCBsPTA7bDxhLmxlbmd0aDtsKyspe2NvbnN0IHU9YVtsXTtpZih1LnNlbGVjdGVkKXtjb25zdCBnPXRoaXMuX2dldE9wdGlvblZhbHVlKHUudmFsdWUpO2kucHVzaChnKX19fXRoaXMudmFsdWU9aSx0KGkpfX1fcmVnaXN0ZXJPcHRp''@;'; put 'put ''b24odCl7Y29uc3Qgcj0odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5zZXQocix0KSxyfV9nZXRPcHRpb25JZCh0KXtmb3IoY29uc3QgciBvZiB0aGlzLl9vcHRpb25NYXAua2V5cygpKWlmKHRoaXMuX2NvbXBhcmVXaXRoKHRoaXMuX29wdGlv''@;'; put 'put ''bk1hcC5nZXQocikuX3ZhbHVlLHQpKXJldHVybiByO3JldHVybiBudWxsfV9nZXRPcHRpb25WYWx1ZSh0KXtjb25zdCByPWZ1bmN0aW9uIHZndChuKXtyZXR1cm4gbi5zcGxpdCgiOiIpWzBdfSh0KTtyZXR1cm4gdGhpcy5fb3B0aW9uTWFwLmhhcyhyKT90aGlzLl9vcHRpb25NYXAuZ2V0KHIp''@;'; put 'put ''Ll92YWx1ZTp0fXN0YXRpYyBcdTAyNzVmYWM9KCgpPT57bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD13YShuKSkpKGl8fG4pfX0pKCk7c3RhdGljIFx1MDI3NWRpcj0kcih7dHlwZTpuLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsImZvcm1Db250cm9s''@;'; put 'put ''TmFtZSIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihyLGkpezEmciYmd3QoImNoYW5nZSIsZnVuY3Rpb24oYSl7cmV0dXJuIGkub25DaGFuZ2Uo''@;'; put 'put ''YS50YXJnZXQpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub3VjaGVkKCl9KX0saW5wdXRzOntjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltibyhbbWd0XSksRm9dfSl9cmV0dXJuIG59KSgpLFFnPSgoKT0+e2NsYXNzIG57X2VsZW1l''@;'; put 'put ''bnQ7X3JlbmRlcmVyO19zZWxlY3Q7aWQ7X3ZhbHVlO2NvbnN0cnVjdG9yKHQscixpKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fcmVuZGVyZXI9cix0aGlzLl9zZWxlY3Q9aSx0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24odGhpcykpfXNldCBuZ1Zh''@;'; put 'put ''bHVlKHQpe251bGwhPXRoaXMuX3NlbGVjdCYmKHRoaXMuX3ZhbHVlPXQsdGhpcy5fc2V0RWxlbWVudFZhbHVlKFRTZSh0aGlzLmlkLHQpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUodCl7dGhpcy5fc2VsZWN0Pyh0aGlzLl92YWx1ZT10''@;'; put 'put ''LHRoaXMuX3NldEVsZW1lbnRWYWx1ZShUU2UodGhpcy5pZCx0KSksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSk6dGhpcy5fc2V0RWxlbWVudFZhbHVlKHQpfV9zZXRFbGVtZW50VmFsdWUodCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxl''@;'; put 'put ''bWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsdCl9X3NldFNlbGVjdGVkKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwic2VsZWN0ZWQiLHQpfW5nT25EZXN0cm95KCl7dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25N''@;'; put 'put ''YXAuZGVsZXRlKHRoaXMuaWQpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKSh6ZShubyksemUoTnQpLHplKGxELDkpKX07c3RhdGljIFx1MDI3NWRpcj0kcih7dHlwZTpuLHNl''@;'; put 'put ''bGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifSxzdGFuZGFsb25lOiExfSl9cmV0dXJuIG59KSgpO2xldCBPYj0oKCk9PntjbGFzcyBue192YWxpZGF0b3I9aHo7X29uQ2hhbmdlO19lbmFibGVkO25nT25DaGFuZ2VzKHQpe2lmKHRo''@;'; put 'put ''aXMuaW5wdXROYW1lIGluIHQpe2NvbnN0IHI9dGhpcy5ub3JtYWxpemVJbnB1dCh0W3RoaXMuaW5wdXROYW1lXS5jdXJyZW50VmFsdWUpO3RoaXMuX2VuYWJsZWQ9dGhpcy5lbmFibGVkKHIpLHRoaXMuX3ZhbGlkYXRvcj10aGlzLl9lbmFibGVkP3RoaXMuY3JlYXRlVmFsaWRhdG9yKHIpOmh6''@;'; put 'put ''LHRoaXMuX29uQ2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpfX12YWxpZGF0ZSh0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yKHQpfXJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UodCl7dGhpcy5fb25DaGFuZ2U9dH1lbmFibGVkKHQpe3JldHVybiBudWxsIT10fXN0YXRpYyBcdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NWRpcj0kcih7dHlwZTpuLGZlYXR1cmVzOltpdV19KX1yZXR1cm4gbn0pKCk7Y29uc3QgYmd0PXtwcm92aWRlOkcxLHVzZUV4aXN0aW5nOlVvKCgpPT5zb2UpLG11bHRpOiEwfSx3Z3Q9e3Byb3ZpZGU6RzEsdXNlRXhpc3Rp''@;'; put 'put ''bmc6VW8oKCk9PmxvZSksbXVsdGk6ITB9O2xldCBzb2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE9ie3JlcXVpcmVkO2lucHV0TmFtZT0icmVxdWlyZWQiO25vcm1hbGl6ZUlucHV0PVowO2NyZWF0ZVZhbGlkYXRvcj10PT5XQ2U7ZW5hYmxlZCh0KXtyZXR1cm4gdH1zdGF0aWMgXHUwMjc1ZmFj''@;'; put 'put ''PSgoKT0+e2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9d2EobikpKShpfHxuKX19KSgpO3N0YXRpYyBcdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsi''@;'; put 'put ''IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyIiLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihyLGkpezImciYmUnIoInJlcXVpcmVkIixp''@;'; put 'put ''Ll9lbmFibGVkPyIiOm51bGwpfSxpbnB1dHM6e3JlcXVpcmVkOiJyZXF1aXJlZCJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2JvKFtiZ3RdKSxGb119KX1yZXR1cm4gbn0pKCksbG9lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBzb2V7Y3JlYXRlVmFsaWRhdG9yPXQ9PllDZTtzdGF0aWMgXHUw''@;'; put 'put ''Mjc1ZmFjPSgoKT0+e2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9d2EobikpKShpfHxuKX19KSgpO3N0YXRpYyBcdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sTmFt''@;'; put 'put ''ZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihyLGkpezImciYm''@;'; put 'put ''UnIoInJlcXVpcmVkIixpLl9lbmFibGVkPyIiOm51bGwpfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltibyhbd2d0XSksRm9dfSl9cmV0dXJuIG59KSgpO2NvbnN0IEVndD17cHJvdmlkZTpHMSx1c2VFeGlzdGluZzpVbygoKT0+Y29lKSxtdWx0aTohMH07bGV0IGNvZT0oKCk9PntjbGFzcyBu''@;'; put 'put ''IGV4dGVuZHMgT2J7bWF4bGVuZ3RoO2lucHV0TmFtZT0ibWF4bGVuZ3RoIjtub3JtYWxpemVJbnB1dD10PT5mdW5jdGlvbiB4U2Uobil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBuP246cGFyc2VJbnQobiwxMCl9KHQpO2NyZWF0ZVZhbGlkYXRvcj10PT5mdW5jdGlvbiAkQ2Uobil7cmV0dXJu''@;'; put 'put ''IGU9Pntjb25zdCB0PWUudmFsdWU/Lmxlbmd0aD8/emllKGUudmFsdWUpO3JldHVybiBudWxsIT09dCYmdD5uP3ttYXhsZW5ndGg6e3JlcXVpcmVkTGVuZ3RoOm4sYWN0dWFsTGVuZ3RoOnR9fTpudWxsfX0odCk7c3RhdGljIFx1MDI3NWZhYz0oKCk9PntsZXQgdDtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''aSl7cmV0dXJuKHR8fCh0PXdhKG4pKSkoaXx8bil9fSkoKTtzdGF0aWMgXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1heGxlbmd0aCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwibWF4bGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsIm1heGxlbmd0''@;'; put 'put ''aCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24ocixpKXsyJnImJlJyKCJtYXhsZW5ndGgiLGkuX2VuYWJsZWQ/aS5tYXhsZW5ndGg6bnVsbCl9LGlucHV0czp7bWF4bGVuZ3RoOiJtYXhsZW5ndGgifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOlti''@;'; put 'put ''byhbRWd0XSksRm9dfSl9cmV0dXJuIG59KSgpLE9TZT0oKCk9PntjbGFzcyBue3N0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NW1vZD1HaSh7dHlwZTpufSk7c3RhdGljIFx1MDI3NWluaj1taSh7fSl9cmV0dXJuIG59KSgpLGhkPSgo''@;'; put 'put ''KT0+e2NsYXNzIG57c3RhdGljIHdpdGhDb25maWcodCl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOlt7cHJvdmlkZTpEYix1c2VWYWx1ZTp0LmNhbGxTZXREaXNhYmxlZFN0YXRlPz9yRH1dfX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRp''@;'; put 'put ''YyBcdTAyNzVtb2Q9R2koe3R5cGU6bn0pO3N0YXRpYyBcdTAyNzVpbmo9bWkoe2ltcG9ydHM6W09TZV19KX1yZXR1cm4gbn0pKCkseGd0PSgoKT0+e2NsYXNzIG57c3RhdGljIHdpdGhDb25maWcodCl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOlt7cHJvdmlkZTphb2UsdXNlVmFsdWU6''@;'; put 'put ''dC53YXJuT25OZ01vZGVsV2l0aEZvcm1Db250cm9sPz8iYWx3YXlzIn0se3Byb3ZpZGU6RGIsdXNlVmFsdWU6dC5jYWxsU2V0RGlzYWJsZWRTdGF0ZT8/ckR9XX19c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1bW9kPUdpKHt0eXBl''@;'; put 'put ''Om59KTtzdGF0aWMgXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltPU2VdfSl9cmV0dXJuIG59KSgpO2NvbnN0IHJNPVsiYW5nbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjkuNTIsMjIuNTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1LjQ5bDkuMDgsOS4z''@;'; put 'put ''OWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nfV0sQXA9WyJleGNsYW1hdGlvbi1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTggMTkuOEMxOC41NSAxOS44IDE5IDE5LjM1IDE5IDE4LjhWMTNDMTkgMTIuNDUgMTguNTUgMTIgMTggMTJDMTcuNDUgMTIgMTcgMTIuNDUgMTcgMTNW''@;'; put 'put ''MTguOEMxNyAxOS4zNSAxNy40NSAxOS44IDE4IDE5LjhaTTE4Ljg1IDIxLjk1QzE4LjczIDIxLjg0IDE4LjYgMjEuNzUgMTguNDYgMjEuNjlDMTguMTcgMjEuNTcgMTcuODMgMjEuNTcgMTcuNTQgMjEuNjlDMTcuNCAyMS43NSAxNy4yNyAyMS44NCAxNy4xNSAyMS45NUMxNi45MyAyMi4xOCAx''@;'; put 'put ''Ni44IDIyLjQ4IDE2LjggMjIuOEMxNi44IDIzLjEyIDE2LjkzIDIzLjQyIDE3LjE1IDIzLjY1QzE3LjI3IDIzLjc2IDE3LjQgMjMuODUgMTcuNTQgMjMuOTFDMTcuNjkgMjMuOTcgMTcuODQgMjQgMTggMjRDMTguMTYgMjQgMTguMzEgMjMuOTcgMTguNDYgMjMuOTFDMTguNiAyMy44NSAxOC43''@;'; put 'put ''MyAyMy43NiAxOC44NSAyMy42NUMxOS4wNyAyMy40MiAxOS4yIDIzLjEyIDE5LjIgMjIuOEMxOS4yIDIyLjY0IDE5LjE3IDIyLjQ5IDE5LjExIDIyLjM0QzE5LjA1IDIyLjIgMTguOTYgMjIuMDYgMTguODUgMjEuOTVaTTE4IDZDMTEuMzggNiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAz''@;'; put 'put ''MCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTE4IDI4QzEyLjQ5IDI4IDggMjMuNTEgOCAxOEM4IDEyLjQ5IDEyLjQ5IDggMTggOEMyMy41MSA4IDI4IDEyLjQ5IDI4IDE4QzI4IDIzLjUxIDIzLjUxIDI4IDE4IDI4WiIvPicsc29saWQ6Jzxw''@;'; put 'put ''YXRoIGQ9Ik0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xNi44IDEyLjY1QzE2LjggMTEuOTkgMTcuMzQgMTEuNDUgMTggMTEuNDVDMTguNjYgMTEuNDUgMTkuMiAx''@;'; put 'put ''MS45OSAxOS4yIDEyLjY1VjE4LjQ1QzE5LjIgMTkuMTEgMTguNjYgMTkuNjUgMTggMTkuNjVDMTcuMzQgMTkuNjUgMTYuOCAxOS4xMSAxNi44IDE4LjQ1VjEyLjY1Wk0xOC45OCAyNC4xNUMxOC44NCAyNC4yOCAxOC42OSAyNC4zOCAxOC41MyAyNC40NUMxOC4zNSAyNC41MiAxOC4xOCAyNC41''@;'; put 'put ''NiAxOCAyNC41NkMxNy44MiAyNC41NiAxNy42NCAyNC41MyAxNy40NiAyNC40NUMxNy4zMSAyNC4zOCAxNy4xNiAyNC4yOSAxNyAyNC4xNEMxNi43NCAyMy44NyAxNi41OSAyMy41MiAxNi41OSAyMy4xNUMxNi41OSAyMi43OCAxNi43MyAyMi40NCAxNyAyMi4xNUMxNy4xNCAyMi4wMiAxNy4y''@;'; put 'put ''OSAyMS45MiAxNy40NSAyMS44NUMxNy42MiAyMS43OCAxNy44IDIxLjc0IDE3Ljk5IDIxLjc0QzE4LjE4IDIxLjc0IDE4LjM2IDIxLjc4IDE4LjUzIDIxLjg1QzE4LjY4IDIxLjkyIDE4LjgzIDIyLjAyIDE4Ljk4IDIyLjE1QzE5LjEgMjIuMjcgMTkuMjEgMjIuNDMgMTkuMjggMjIuNjFDMTku''@;'; put 'put ''MzUgMjIuNzkgMTkuMzkgMjIuOTYgMTkuMzkgMjMuMTRDMTkuMzkgMjMuNSAxOS4yNSAyMy44NSAxOC45NyAyNC4xNEwxOC45OCAyNC4xNVoiLz4nfV0sa3A9WyJjaGVjay1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjIuNjEgMTQuMjJMMTYuMjUgMjAuNThMMTIuNzEgMTcuMDRDMTIu''@;'; put 'put ''MzIgMTYuNjUgMTEuNjkgMTYuNjUgMTEuMyAxNy4wNEMxMC45MSAxNy40MyAxMC45MSAxOC4wNiAxMS4zIDE4LjQ1TDE2LjI1IDIzLjRMMjQuMDMgMTUuNjJDMjQuNDIgMTUuMjMgMjQuNDIgMTQuNiAyNC4wMyAxNC4yMUMyMy42NCAxMy44MiAyMy4wMSAxMy44MiAyMi42MiAxNC4yMUwyMi42''@;'; put 'put ''MSAxNC4yMlpNMTggNkMxMS4zOCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0LjYyIDMwIDE4QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMTggMjhDMTIuNDkgMjggOCAyMy41MSA4IDE4QzggMTIuNDkgMTIuNDkgOCAxOCA4QzIzLjUxIDggMjgg''@;'; put 'put ''MTIuNDkgMjggMThDMjggMjMuNTEgMjMuNTEgMjggMTggMjhaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDZDMTEuMzggNiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTI0LjE2IDE1Ljc4''@;'; put 'put ''TDE2LjI0IDIzLjdMMTEuMTUgMTguNjFDMTAuNjggMTguMTQgMTAuNjggMTcuMzggMTEuMTUgMTYuOTFDMTEuNjIgMTYuNDQgMTIuMzggMTYuNDQgMTIuODUgMTYuOTFMMTYuMjQgMjAuM0wyMi40NiAxNC4wOEMyMi45MyAxMy42MSAyMy42OSAxMy42MSAyNC4xNiAxNC4wOEMyNC42MyAxNC41''@;'; put 'put ''NSAyNC42MyAxNS4zMSAyNC4xNiAxNS43OFoiLz4nfV0sTlNlPVsiZWxsaXBzaXMtaG9yaXpvbnRhbCIse291dGxpbmU6JzxwYXRoIGQ9Ik03LjggMTguMUM3LjggMTkuNzU2OCA2LjUwMTYzIDIxLjEgNC45IDIxLjFDMy4yOTgzNyAyMS4xIDIgMTkuNzU2OCAyIDE4LjFDMiAxNi40NDMxIDMu''@;'; put 'put ''Mjk4MzcgMTUuMSA0LjkgMTUuMUM2LjUwMTYzIDE1LjEgNy44IDE2LjQ0MzEgNy44IDE4LjFaIi8+PHBhdGggZD0iTTE4IDIxLjFDMTkuNjAxNiAyMS4xIDIwLjkgMTkuNzU2OCAyMC45IDE4LjFDMjAuOSAxNi40NDMxIDE5LjYwMTYgMTUuMSAxOCAxNS4xQzE2LjM5ODQgMTUuMSAxNS4xIDE2''@;'; put 'put ''LjQ0MzEgMTUuMSAxOC4xQzE1LjEgMTkuNzU2OCAxNi4zOTg0IDIxLjEgMTggMjEuMVoiLz48cGF0aCBkPSJNMzEuMSAyMS4xQzMyLjcwMTYgMjEuMSAzNCAxOS43NTY4IDM0IDE4LjFDMzQgMTYuNDQzMSAzMi43MDE2IDE1LjEgMzEuMSAxNS4xQzI5LjQ5ODQgMTUuMSAyOC4yIDE2LjQ0MzEg''@;'; put 'put ''MjguMiAxOC4xQzI4LjIgMTkuNzU2OCAyOS40OTg0IDIxLjEgMzEuMSAyMS4xWiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTQuOSAyMS4xQzYuNTAxNjMgMjEuMSA3LjggMTkuNzU2OCA3LjggMTguMUM3LjggMTYuNDQzMSA2LjUwMTYzIDE1LjEgNC45IDE1LjFDMy4yOTgzNyAxNS4x''@;'; put 'put ''IDIgMTYuNDQzMSAyIDE4LjFDMiAxOS43NTY4IDMuMjk4MzcgMjEuMSA0LjkgMjEuMVoiLz48cGF0aCBkPSJNMTggMjEuMUMxOS42MDE2IDIxLjEgMjAuOSAxOS43NTY4IDIwLjkgMTguMUMyMC45IDE2LjQ0MzEgMTkuNjAxNiAxNS4xIDE4IDE1LjFDMTYuMzk4NCAxNS4xIDE1LjEgMTYuNDQz''@;'; put 'put ''MSAxNS4xIDE4LjFDMTUuMSAxOS43NTY4IDE2LjM5ODQgMjEuMSAxOCAyMS4xWiIvPjxwYXRoIGQ9Ik0zNCAxOC4xQzM0IDE5Ljc1NjggMzIuNzAxNiAyMS4xIDMxLjEgMjEuMUMyOS40OTg0IDIxLjEgMjguMiAxOS43NTY4IDI4LjIgMTguMUMyOC4yIDE2LjQ0MzEgMjkuNDk4NCAxNS4xIDMx''@;'; put 'put ''LjEgMTUuMUMzMi43MDE2IDE1LjEgMzQgMTYuNDQzMSAzNCAxOC4xWiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDEx''@;'; put 'put ''WiIvPid9XSxjRD1bIndpbmRvdy1jbG9zZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOS40MSAxOC4wMDAzTDI2LjcgMTAuNzEwM0MyNy4wMzk4IDEwLjMxMzUgMjcuMDE2OSA5LjcyMjA3IDI2LjY0NzYgOS4zNTI3QzI2LjI3ODIgOC45ODMzMyAyNS42ODY4IDguOTYwNDkgMjUuMjkgOS4zMDAy''@;'; put 'put ''NkwxOCAxNi41OTAzTDEwLjcxIDkuMjkwMjZDMTAuMzEzMiA4Ljk1MDQ5IDkuNzIxODEgOC45NzMzMyA5LjM1MjQ0IDkuMzQyN0M4Ljk4MzA3IDkuNzEyMDcgOC45NjAyMyAxMC4zMDM1IDkuMzAwMDEgMTAuNzAwM0wxNi41OSAxOC4wMDAzTDkuMjkwMDEgMjUuMjkwM0M5LjAwNDYzIDI1LjUz''@;'; put 'put ''NDcgOC44ODAzMiAyNS45MTg0IDguOTY4MTkgMjYuMjgzN0M5LjA1NjA3IDI2LjY0OSA5LjM0MTI5IDI2LjkzNDIgOS43MDY1OSAyNy4wMjIxQzEwLjA3MTkgMjcuMTA5OSAxMC40NTU2IDI2Ljk4NTYgMTAuNyAyNi43MDAzTDE4IDE5LjQxMDNMMjUuMjkgMjYuNzAwM0MyNS42ODY4IDI3LjA0''@;'; put 'put ''IDI2LjI3ODIgMjcuMDE3MiAyNi42NDc2IDI2LjY0NzhDMjcuMDE2OSAyNi4yNzg1IDI3LjAzOTggMjUuNjg3IDI2LjcgMjUuMjkwM0wxOS40MSAxOC4wMDAzWiIvPid9XSxBZ3Q9WyJpbmZvLWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yMSAyM0gxOVYxNUgxNkMxNS40NSAxNSAxNSAx''@;'; put 'put ''NS40NSAxNSAxNkMxNSAxNi41NSAxNS40NSAxNyAxNiAxN0gxN1YyM0gxNUMxNC40NSAyMyAxNCAyMy40NSAxNCAyNEMxNCAyNC41NSAxNC40NSAyNSAxNSAyNUgyMUMyMS41NSAyNSAyMiAyNC41NSAyMiAyNEMyMiAyMy40NSAyMS41NSAyMyAyMSAyM1pNMTcuOTMgMTMuM0MxOC43IDEzLjMg''@;'; put 'put ''MTkuMzMgMTIuNjcgMTkuMzMgMTEuOUMxOS4zMyAxMS4xMyAxOC43IDEwLjUgMTcuOTMgMTAuNUMxNy4xNiAxMC41IDE2LjUzIDExLjEzIDE2LjUzIDExLjlDMTYuNTMgMTIuNjcgMTcuMTYgMTMuMyAxNy45MyAxMy4zWk0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzgg''@;'; put 'put ''MzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xOCAyOEMxMi40OSAyOCA4IDIzLjUxIDggMThDOCAxMi40OSAxMi40OSA4IDE4IDhDMjMuNTEgOCAyOCAxMi40OSAyOCAxOEMyOCAyMy41MSAyMy41MSAyOCAxOCAyOFoiLz4nLHNvbGlkOic8''@;'; put 'put ''cGF0aCBkPSJNMTggNkMxMS4zOCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0LjYyIDMwIDE4QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMTcuOTMgMTAuM0MxOC44MSAxMC4zIDE5LjUzIDExLjAyIDE5LjUzIDExLjlDMTkuNTMgMTIuNzggMTgu''@;'; put 'put ''ODEgMTMuNSAxNy45MyAxMy41QzE3LjA1IDEzLjUgMTYuMzMgMTIuNzggMTYuMzMgMTEuOUMxNi4zMyAxMS4wMiAxNy4wNSAxMC4zIDE3LjkzIDEwLjNaTTIxIDI1LjJIMTVDMTQuMzQgMjUuMiAxMy44IDI0LjY2IDEzLjggMjRDMTMuOCAyMy4zNCAxNC4zNCAyMi44IDE1IDIyLjhIMTYuOFYx''@;'; put 'put ''Ny4ySDE2QzE1LjM0IDE3LjIgMTQuOCAxNi42NiAxNC44IDE2QzE0LjggMTUuMzQgMTUuMzQgMTQuOCAxNiAxNC44SDE5LjJWMjIuOEgyMUMyMS42NiAyMi44IDIyLjIgMjMuMzQgMjIuMiAyNEMyMi4yIDI0LjY2IDIxLjY2IDI1LjIgMjEgMjUuMloiLz4nfV0sRlNlPVsidGltZXMiLHtvdXRs''@;'; put 'put ''aW5lOic8cGF0aCBkPSJNMTkuNDY5NiAxNy45NzMyTDI3Ljc1OTYgOS43MDU0MkMyOC4wOTk0IDkuMzA5NzIgMjguMDc2NSA4LjcxOTg3IDI3LjcwNzEgOC4zNTE0OEMyNy4zMzc4IDcuOTgzMSAyNi43NDYzIDcuOTYwMzIgMjYuMzQ5NiA4LjI5OTE5TDE4LjA1OTYgMTYuNTY3TDkuNzY5NTgg''@;'; put 'put ''OC4yODkyMkM5LjM3NzQ1IDcuODk4MTQgOC43NDE3IDcuODk4MTQgOC4zNDk1OCA4LjI4OTIyQzcuOTU3NDUgOC42ODAyOSA3Ljk1NzQ1IDkuMzE0MzQgOC4zNDk1OCA5LjcwNTQyTDE2LjY0OTYgMTcuOTczMkw4LjM0OTU4IDI2LjI0MUM4LjA2NDIgMjYuNDg0OCA3LjkzOTg5IDI2Ljg2NzUg''@;'; put 'put ''OC4wMjc3NyAyNy4yMzE4QzguMTE1NjQgMjcuNTk2MSA4LjQwMDg2IDI3Ljg4MDYgOC43NjYxNiAyNy45NjgyQzkuMTMxNDYgMjguMDU1OSA5LjUxNTE5IDI3LjkzMTkgOS43NTk1OCAyNy42NDczTDE4LjA1OTYgMTkuMzc5NUwyNi4zNDk2IDI3LjY0NzNDMjYuNzQ2MyAyNy45ODYxIDI3LjMz''@;'; put 'put ''NzggMjcuOTYzNCAyNy43MDcxIDI3LjU5NUMyOC4wNzY1IDI3LjIyNjYgMjguMDk5NCAyNi42MzY3IDI3Ljc1OTYgMjYuMjQxTDE5LjQ2OTYgMTcuOTczMloiLz4nfV0sUFNlPVsiYW5nbGUtZG91YmxlIix7b3V0bGluZTonPHBhdGggZD0iTTI4LjM0OTEgMTcuODk5NkMyOC41Mzg0IDE4LjA4''@;'; put 'put ''MzcgMjguNzk0NSAxOC4xODYzIDI5LjA2MSAxOC4xODQ4QzI5LjQ2NCAxOC4xODMxIDI5LjgyNjggMTcuOTQ1MSAyOS45ODIxIDE3LjU4MDVDMzAuMTM3NCAxNy4yMTU4IDMwLjA1NSAxNi43OTU1IDI5Ljc3MjkgMTYuNTEzM0wxOC4wMzE4IDVMNi4zMDA2NyAxNi41MTMzQzUuOTU5OTkgMTYu''@;'; put 'put ''OTAzNCA1Ljk4Mjg5IDE3LjQ4NDkgNi4zNTMyNSAxNy44NDgxQzYuNzIzNiAxOC4yMTEyIDcuMzE2NiAxOC4yMzM3IDcuNzE0NDIgMTcuODk5NkwxOC4wMzE4IDcuNzgyNDZMMjguMzQ5MSAxNy44OTk2WiIvPjxwYXRoIGQ9Ik0yOC4zNDkxIDI4LjcxNDlDMjguNTM4NCAyOC44OTg5IDI4Ljc5''@;'; put 'put ''NDUgMjkuMDAxNSAyOS4wNjEgMjlDMjkuNDY0IDI4Ljk5ODQgMjkuODI2OCAyOC43NjAzIDI5Ljk4MjEgMjguMzk1N0MzMC4xMzc0IDI4LjAzMTEgMzAuMDU1IDI3LjYxMDcgMjkuNzcyOSAyNy4zMjg1TDE4LjAzMTggMTUuODE1Mkw2LjMwMDY3IDI3LjMyODVDNS45NTk5OSAyNy43MTg2IDUu''@;'; put 'put ''OTgyODkgMjguMzAwMSA2LjM1MzI1IDI4LjY2MzNDNi43MjM2IDI5LjAyNjUgNy4zMTY2IDI5LjA0ODkgNy43MTQ0MiAyOC43MTQ5TDE4LjAzMTggMTguNTk3N0wyOC4zNDkxIDI4LjcxNDlaIi8+J31dLGtndD1bImV2ZW50Iix7b3V0bGluZTonPHBhdGggZD0iTTE2LjE3IDI1Ljg2TDEwLjgx''@;'; put 'put ''IDIwLjVDMTAuNjQ2MiAyMC4zMDg3IDEwLjU2MDYgMjAuMDYyNiAxMC41NzAzIDE5LjgxMDlDMTAuNTggMTkuNTU5MyAxMC42ODQ0IDE5LjMyMDUgMTAuODYyNCAxOS4xNDI0QzExLjA0MDUgMTguOTY0MyAxMS4yNzkzIDE4Ljg2IDExLjUzMSAxOC44NTAzQzExLjc4MjYgMTguODQwNiAxMi4w''@;'; put 'put ''Mjg3IDE4LjkyNjIgMTIuMjIgMTkuMDlMMTYuMTcgMjNMMjQuODEgMTQuMzZDMjUuMDAxMyAxNC4xOTYyIDI1LjI0NzQgMTQuMTEwNiAyNS40OTkxIDE0LjEyMDNDMjUuNzUwNyAxNC4xMyAyNS45ODk1IDE0LjIzNDMgMjYuMTY3NiAxNC40MTI0QzI2LjM0NTcgMTQuNTkwNSAyNi40NSAxNC44''@;'; put 'put ''MjkzIDI2LjQ1OTcgMTUuMDgwOUMyNi40Njk0IDE1LjMzMjYgMjYuMzgzOCAxNS41Nzg3IDI2LjIyIDE1Ljc3TDE2LjE3IDI1Ljg2WiIvPjxwYXRoIGQ9Ik0zMi4yNSA2SDI5VjhIMzJWMzBINC4wMDAwMVY4SDcuMDAwMDFWNkgzLjc1MDAxQzMuNTE2MjUgNi4wMDM5MSAzLjI4NTU1IDYuMDUz''@;'; put 'put ''ODMgMy4wNzEwOCA2LjE0NjkxQzIuODU2NjEgNi4yMzk5OSAyLjY2MjU4IDYuMzc0NDEgMi41MDAwNyA2LjU0MjQ5QzIuMzM3NTcgNi43MTA1NyAyLjIwOTc2IDYuOTA5MDIgMi4xMjM5NiA3LjEyNjVDMi4wMzgxNiA3LjM0Mzk4IDEuOTk2MDQgNy41NzYyNCAyLjAwMDAxIDcuODFWMzAuMTlD''@;'; put 'put ''MS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAz''@;'; put 'put ''MS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMu''@;'; put 'put ''OTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzggMzQgMzAuMTlWNy44MUMzNC4wMDQgNy41NzYyNCAzMy45NjE5IDcuMzQzOTggMzMuODc2MSA3LjEyNjVDMzMuNzkwMyA2LjkwOTAyIDMzLjY2MjUgNi43MTA1NyAzMy41IDYuNTQyNDlDMzMuMzM3NCA2LjM3NDQxIDMzLjE0MzQgNi4yMzk5OSAz''@;'; put 'put ''Mi45Mjg5IDYuMTQ2OTFDMzIuNzE0NSA2LjA1MzgzIDMyLjQ4MzggNi4wMDM5MSAzMi4yNSA2WiIvPjxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAu''@;'; put 'put ''ODk0NyAyLjQ4MDQzIDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEw''@;'; put 'put ''NTM3IDkuNTE5NTcgOS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+PHBhdGggZD0iTTI2IDEwQzI2LjI2NTIgMTAgMjYuNTE5NiA5Ljg5NDY0IDI2LjcwNzEgOS43MDcxMUMyNi44OTQ3IDkuNTE5NTcgMjcgOS4yNjUyMiAyNyA5VjNDMjcgMi43MzQ3''@;'; put 'put ''OCAyNi44OTQ3IDIuNDgwNDMgMjYuNzA3MSAyLjI5Mjg5QzI2LjUxOTYgMi4xMDUzNiAyNi4yNjUyIDIgMjYgMkMyNS43MzQ4IDIgMjUuNDgwNCAyLjEwNTM2IDI1LjI5MjkgMi4yOTI4OUMyNS4xMDU0IDIuNDgwNDMgMjUgMi43MzQ3OCAyNSAzVjlDMjUgOS4yNjUyMiAyNS4xMDU0IDkuNTE5''@;'; put 'put ''NTcgMjUuMjkyOSA5LjcwNzExQzI1LjQ4MDQgOS44OTQ2NCAyNS43MzQ4IDEwIDI2IDEwWiIvPjxwYXRoIGQ9Ik0yMyA2SDEzVjhIMjNWNloiLz4nLG91dGxpbmVBbGVydGVkOic8cGF0aCBkPSJNMjYuOTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4''@;'; put 'put ''MSAxMS45OTQ5IDIxLjE1ODggMTIuNDAwNUMyMS4zODk2IDEyLjgwNiAyMS44MzYzIDEzLjA1MTkgMjIuMzE0OCAxMy4wMzY3SDMzLjY4ODFDMzQuMTY2NiAxMy4wNTE5IDM0LjYxMzQgMTIuODA2IDM0Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4''@;'; put 'put ''MDggMTEuMTE1OUwyOS4wOTkxIDEuNjQ2MjFDMjguODcxMSAxLjI2OTEzIDI4LjQ1MzIgMS4wMzczNSAyOC4wMDE1IDEuMDM3MzVDMjcuNTQ5NyAxLjAzNzM1IDI3LjEzMTkgMS4yNjkxMyAyNi45MDM5IDEuNjQ2MjFaIi8+PHBhdGggZD0iTTMyIDE1LjAzNjdIMzMuNjYzN0MzMy43NzY0IDE1''@;'; put 'put ''LjAzODkgMzMuODg4NiAxNS4wMzU0IDM0IDE1LjAyNjNWMzAuMTlDMzQuMDA0IDMwLjQyMzggMzMuOTYxOSAzMC42NTYgMzMuODc2MSAzMC44NzM1QzMzLjc5MDMgMzEuMDkxIDMzLjY2MjUgMzEuMjg5NCAzMy41IDMxLjQ1NzVDMzMuMzM3NCAzMS42MjU2IDMzLjE0MzQgMzEuNzYgMzIuOTI4''@;'; put 'put ''OSAzMS44NTMxQzMyLjcxNDUgMzEuOTQ2MiAzMi40ODM4IDMxLjk5NjEgMzIuMjUgMzJIMy43NTAwMUMzLjUxNjI1IDMxLjk5NjEgMy4yODU1NSAzMS45NDYyIDMuMDcxMDggMzEuODUzMUMyLjg1NjYxIDMxLjc2IDIuNjYyNTggMzEuNjI1NiAyLjUwMDA3IDMxLjQ1NzVDMi4zMzc1NyAzMS4y''@;'; put 'put ''ODk0IDIuMjA5NzYgMzEuMDkxIDIuMTIzOTYgMzAuODczNUMyLjAzODE2IDMwLjY1NiAxLjk5NjA0IDMwLjQyMzggMi4wMDAwMSAzMC4xOVY3LjgxQzEuOTk2MDQgNy41NzYyNCAyLjAzODE2IDcuMzQzOTggMi4xMjM5NiA3LjEyNjVDMi4yMDk3NiA2LjkwOTAyIDIuMzM3NTcgNi43MTA1NyAy''@;'; put 'put ''LjUwMDA3IDYuNTQyNDlDMi42NjI1OCA2LjM3NDQxIDIuODU2NjEgNi4yMzk5OSAzLjA3MTA4IDYuMTQ2OTFDMy4yODU1NSA2LjA1MzgzIDMuNTE2MjUgNi4wMDM5MSAzLjc1MDAxIDZINy4wMDAwMVY4SDQuMDAwMDFWMzBIMzJWMTUuMDM2N1oiLz48cGF0aCBkPSJNMjQuMTMzMyAxNS4wMzY3''@;'; put 'put ''SDI2LjQ1N0MyNi40NTgzIDE1LjA1MTQgMjYuNDU5MiAxNS4wNjYxIDI2LjQ1OTcgMTUuMDgwOUMyNi40Njk0IDE1LjMzMjYgMjYuMzgzOCAxNS41Nzg3IDI2LjIyIDE1Ljc3TDE2LjE3IDI1Ljg2TDEwLjgxIDIwLjVDMTAuNjQ2MiAyMC4zMDg3IDEwLjU2MDYgMjAuMDYyNiAxMC41NzAzIDE5''@;'; put 'put ''LjgxMDlDMTAuNTggMTkuNTU5MyAxMC42ODQ0IDE5LjMyMDUgMTAuODYyNCAxOS4xNDI0QzExLjA0MDUgMTguOTY0MyAxMS4yNzkzIDE4Ljg2IDExLjUzMSAxOC44NTAzQzExLjc4MjYgMTguODQwNiAxMi4wMjg3IDE4LjkyNjIgMTIuMjIgMTkuMDlMMTYuMTcgMjNMMjQuMTMzMyAxNS4wMzY3''@;'; put 'put ''WiIvPjxwYXRoIGQ9Ik0yMS45NTk0IDZMMjAuNzU5NCA4SDEzVjZIMjEuOTU5NFoiLz48cGF0aCBkPSJNMTAuNzA3MSA5LjcwNzExQzEwLjUxOTYgOS44OTQ2NCAxMC4yNjUyIDEwIDEwIDEwQzkuNzM0OCAxMCA5LjQ4MDQ0IDkuODk0NjQgOS4yOTI5MSA5LjcwNzExQzkuMTA1MzcgOS41MTk1''@;'; put 'put ''NyA5LjAwMDAxIDkuMjY1MjIgOS4wMDAwMSA5VjNDOS4wMDAwMSAyLjczNDc4IDkuMTA1MzcgMi40ODA0MyA5LjI5MjkxIDIuMjkyODlDOS40ODA0NCAyLjEwNTM2IDkuNzM0OCAyIDEwIDJDMTAuMjY1MiAyIDEwLjUxOTYgMi4xMDUzNiAxMC43MDcxIDIuMjkyODlDMTAuODk0NyAyLjQ4MDQz''@;'; put 'put ''IDExIDIuNzM0NzggMTEgM1Y5QzExIDkuMjY1MjIgMTAuODk0NyA5LjUxOTU3IDEwLjcwNzEgOS43MDcxMVoiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik0xMC44MSAyMC41TDE2LjE3IDI1Ljg2TDI2LjIyIDE1LjgxQzI2LjM4MzggMTUuNjE4NyAyNi40Njk0IDE1LjM3MjYgMjYuNDU5''@;'; put 'put ''NyAxNS4xMjA5QzI2LjQ1IDE0Ljg2OTMgMjYuMzQ1NyAxNC42MzA1IDI2LjE2NzYgMTQuNDUyNEMyNS45ODk1IDE0LjI3NDMgMjUuNzUwNyAxNC4xNyAyNS40OTkxIDE0LjE2MDNDMjUuMjQ3NCAxNC4xNTA2IDI1LjAwMTMgMTQuMjM2MiAyNC44MSAxNC40TDE2LjE3IDIzTDEyLjIzIDE5LjA2''@;'; put 'put ''QzEyLjAzODcgMTguODk2MiAxMS43OTI2IDE4LjgxMDYgMTEuNTQxIDE4LjgyMDNDMTEuMjg5MyAxOC44MyAxMS4wNTA1IDE4LjkzNDMgMTAuODcyNCAxOS4xMTI0QzEwLjY5NDQgMTkuMjkwNSAxMC41OSAxOS41MjkzIDEwLjU4MDMgMTkuNzgwOUMxMC41NzA2IDIwLjAzMjYgMTAuNjU2MiAy''@;'; put 'put ''MC4yNzg3IDEwLjgyIDIwLjQ3TDEwLjgxIDIwLjVaIi8+PHBhdGggZD0iTTEwIDEwQzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5NDY0IDEwLjcwNzEgOS43MDcxMUMxMC44OTQ3IDkuNTE5NTcgMTEgOS4yNjUyMiAxMSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAyLjI5''@;'; put 'put ''Mjg5QzEwLjUxOTYgMi4xMDUzNiAxMC4yNjUyIDIgMTAgMkM5LjczNDggMiA5LjQ4MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5Mjg5QzkuMTA1MzcgMi40ODA0MyA5LjAwMDAxIDIuNzM0NzggOS4wMDAwMSAzVjlDOS4wMDAwMSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDkuNzA3''@;'; put 'put ''MTFDOS40ODA0NCA5Ljg5NDY0IDkuNzM0OCAxMCAxMCAxMFoiLz48cGF0aCBkPSJNMzIgMTMuMjJWMzBINC4wMDAwMVY4SDcuMDAwMDFWNkgzLjc1MDAxQzMuNTE2MjUgNi4wMDM5MSAzLjI4NTU1IDYuMDUzODMgMy4wNzEwOCA2LjE0NjkxQzIuODU2NjEgNi4yMzk5OSAyLjY2MjU4IDYuMzc0''@;'; put 'put ''NDEgMi41MDAwNyA2LjU0MjQ5QzIuMzM3NTcgNi43MTA1NyAyLjIwOTc2IDYuOTA5MDIgMi4xMjM5NiA3LjEyNjVDMi4wMzgxNiA3LjM0Mzk4IDEuOTk2MDQgNy41NzYyNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMy''@;'; put 'put ''LjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUg''@;'; put 'put ''MzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzggMzQgMzAuMTlWMTIuMzRDMzMuMzgw''@;'; put 'put ''MiAxMi43MyAzMi43MDYzIDEzLjAyNjYgMzIgMTMuMjJaIi8+PHBhdGggZD0iTTIyLjUgNkgxM1Y4SDIyLjc4QzIyLjU5NjggNy4zNDkwMyAyMi41MDI2IDYuNjc2MjUgMjIuNSA2WiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2''@;'; put 'put ''MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEg''@;'; put 'put ''OVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQzIDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5Qzku''@;'; put 'put ''MDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcgOS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+PHBhdGggZD0iTTI2IDEwQzI2LjI2NTIgMTAgMjYuNTE5NiA5Ljg5NDY0IDI2LjcwNzEgOS43MDcxMUMyNi44OTQ3IDkuNTE5NTcgMjcgOS4yNjUy''@;'; put 'put ''MiAyNyA5VjNDMjcgMi43MzQ3OCAyNi44OTQ3IDIuNDgwNDMgMjYuNzA3MSAyLjI5Mjg5QzI2LjUxOTYgMi4xMDUzNiAyNi4yNjUyIDIgMjYgMkMyNS43MzQ4IDIgMjUuNDgwNCAyLjEwNTM2IDI1LjI5MjkgMi4yOTI4OUMyNS4xMDU0IDIuNDgwNDMgMjUgMi43MzQ3OCAyNSAzVjlDMjUgOS4y''@;'; put 'put ''NjUyMiAyNS4xMDU0IDkuNTE5NTcgMjUuMjkyOSA5LjcwNzExQzI1LjQ4MDQgOS44OTQ2NCAyNS43MzQ4IDEwIDI2IDEwWiIvPjxwYXRoIGQ9Ik0zMi4yNSA2SDI4LjI1VjlDMjguMjUgOS41ODM0OCAyOC4wMTgyIDEwLjE0MzEgMjcuNjA1NiAxMC41NTU2QzI3LjE5MzEgMTAuOTY4MiAyNi42''@;'; put 'put ''MzM1IDExLjIgMjYuMDUgMTEuMkMyNS40NjY1IDExLjIgMjQuOTA3IDEwLjk2ODIgMjQuNDk0NCAxMC41NTU2QzI0LjA4MTggMTAuMTQzMSAyMy44NSA5LjU4MzQ4IDIzLjg1IDlWNkgxMi4yVjlDMTIuMiA5LjU4MzQ4IDExLjk2ODIgMTAuMTQzMSAxMS41NTU2IDEwLjU1NTZDMTEuMTQzMSAx''@;'; put 'put ''MC45NjgyIDEwLjU4MzUgMTEuMiAxMCAxMS4yQzkuNDE2NTQgMTEuMiA4Ljg1Njk2IDEwLjk2ODIgOC40NDQzOCAxMC41NTU2QzguMDMxOCAxMC4xNDMxIDcuODAwMDEgOS41ODM0OCA3LjgwMDAxIDlWNkgzLjgwMDAxQzMuNTYyMDQgNS45OTcyOSAzLjMyNTkzIDYuMDQyMzMgMy4xMDU2NyA2''@;'; put 'put ''LjEzMjQ2QzIuODg1NCA2LjIyMjU5IDIuNjg1NDUgNi4zNTU5NyAyLjUxNzYzIDYuNTI0NzNDMi4zNDk4MSA2LjY5MzQ4IDIuMjE3NTMgNi44OTQxNyAyLjEyODYzIDcuMTE0OTNDMi4wMzk3MiA3LjMzNTY5IDEuOTk1OTkgNy41NzIwNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40''@;'; put 'put ''MjM4IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUw''@;'; put 'put ''MDEgMzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYg''@;'; put 'put ''MzQuMDA0IDMwLjQyMzggMzQgMzAuMTlWNy44MUMzNC4wMDQgNy41NzYyNCAzMy45NjE5IDcuMzQzOTggMzMuODc2MSA3LjEyNjVDMzMuNzkwMyA2LjkwOTAyIDMzLjY2MjUgNi43MTA1NyAzMy41IDYuNTQyNDlDMzMuMzM3NCA2LjM3NDQxIDMzLjE0MzQgNi4yMzk5OSAzMi45Mjg5IDYuMTQ2''@;'; put 'put ''OTFDMzIuNzE0NSA2LjA1MzgzIDMyLjQ4MzggNi4wMDM5MSAzMi4yNSA2Wk0yNS45NCAxNi41OEwxNi4yNyAyNi4yNUwxMSAyMC45NEMxMC43NjY1IDIwLjY4MzIgMTAuNjQwMSAyMC4zNDY5IDEwLjY0NjUgMTkuOTk5OUMxMC42NTI5IDE5LjY1MjkgMTAuNzkxOCAxOS4zMjE1IDExLjAzNDYg''@;'; put 'put ''MTkuMDczNUMxMS4yNzc1IDE4LjgyNTUgMTEuNjA1OSAxOC42Nzk4IDExLjk1MjcgMTguNjY2MUMxMi4yOTk1IDE4LjY1MjUgMTIuNjM4NCAxOC43NzE5IDEyLjkgMTlMMTYuMjggMjIuMzhMMjQgMTQuNjZDMjQuMTI2NyAxNC41MzMzIDI0LjI3NzIgMTQuNDMyNyAyNC40NDI4IDE0LjM2NDJD''@;'; put 'put ''MjQuNjA4MyAxNC4yOTU2IDI0Ljc4NTggMTQuMjYwMyAyNC45NjUgMTQuMjYwM0MyNS4xNDQyIDE0LjI2MDMgMjUuMzIxNyAxNC4yOTU2IDI1LjQ4NzMgMTQuMzY0MkMyNS42NTI4IDE0LjQzMjcgMjUuODAzMyAxNC41MzMzIDI1LjkzIDE0LjY2QzI2LjA1NjcgMTQuNzg2NyAyNi4xNTczIDE0''@;'; put 'put ''LjkzNzIgMjYuMjI1OCAxNS4xMDI3QzI2LjI5NDQgMTUuMjY4MyAyNi4zMjk3IDE1LjQ0NTggMjYuMzI5NyAxNS42MjVDMjYuMzI5NyAxNS44MDQyIDI2LjI5NDQgMTUuOTgxNyAyNi4yMjU4IDE2LjE0NzNDMjYuMTU3MyAxNi4zMTI4IDI2LjA1NjcgMTYuNDYzMyAyNS45MyAxNi41OUwyNS45''@;'; put 'put ''NCAxNi41OFoiLz4nLHNvbGlkQWxlcnRlZDonPHBhdGggZD0iTTI2LjkwMzkgMS42NDYyMUwyMS4yMjIyIDExLjExNTlDMjAuOTUyNiAxMS40OTg0IDIwLjkyODEgMTEuOTk0OSAyMS4xNTg4IDEyLjQwMDVDMjEuMzg5NiAxMi44MDYgMjEuODM2MyAxMy4wNTE5IDIyLjMxNDggMTMuMDM2N0gz''@;'; put 'put ''My42ODgxQzM0LjE2NjYgMTMuMDUxOSAzNC42MTM0IDEyLjgwNiAzNC44NDQxIDEyLjQwMDVDMzUuMDc0OCAxMS45OTQ5IDM1LjA1MDMgMTEuNDk4NCAzNC43ODA4IDExLjExNTlMMjkuMDk5MSAxLjY0NjIxQzI4Ljg3MTEgMS4yNjkxMyAyOC40NTMyIDEuMDM3MzUgMjguMDAxNSAxLjAzNzM1''@;'; put 'put ''QzI3LjU0OTcgMS4wMzczNSAyNy4xMzE5IDEuMjY5MTMgMjYuOTAzOSAxLjY0NjIxWiIvPjxwYXRoIGQ9Ik0yMS45NTk0IDZIMTIuMlY5QzEyLjIgOS41ODM0OCAxMS45NjgyIDEwLjE0MzEgMTEuNTU1NiAxMC41NTU2QzExLjE0MzEgMTAuOTY4MiAxMC41ODM1IDExLjIgMTAgMTEuMkM5LjQx''@;'; put 'put ''NjU0IDExLjIgOC44NTY5NiAxMC45NjgyIDguNDQ0MzggMTAuNTU1NkM4LjAzMTggMTAuMTQzMSA3LjgwMDAxIDkuNTgzNDggNy44MDAwMSA5VjZIMy44MDAwMUMzLjU2MjA0IDUuOTk3MjkgMy4zMjU5MyA2LjA0MjMzIDMuMTA1NjcgNi4xMzI0NkMyLjg4NTQgNi4yMjI1OSAyLjY4NTQ1IDYu''@;'; put 'put ''MzU1OTcgMi41MTc2MyA2LjUyNDczQzIuMzQ5ODEgNi42OTM0OCAyLjIxNzUzIDYuODk0MTcgMi4xMjg2MyA3LjExNDkzQzIuMDM5NzIgNy4zMzU2OSAxLjk5NTk5IDcuNTcyMDQgMi4wMDAwMSA3LjgxVjMwLjE5QzEuOTk2MDQgMzAuNDIzOCAyLjAzODE2IDMwLjY1NiAyLjEyMzk2IDMwLjg3''@;'; put 'put ''MzVDMi4yMDk3NiAzMS4wOTEgMi4zMzc1NyAzMS4yODk0IDIuNTAwMDcgMzEuNDU3NUMyLjY2MjU4IDMxLjYyNTYgMi44NTY2MSAzMS43NiAzLjA3MTA4IDMxLjg1MzFDMy4yODU1NSAzMS45NDYyIDMuNTE2MjUgMzEuOTk2MSAzLjc1MDAxIDMySDMyLjI1QzMyLjQ4MzggMzEuOTk2MSAzMi43''@;'; put 'put ''MTQ1IDMxLjk0NjIgMzIuOTI4OSAzMS44NTMxQzMzLjE0MzQgMzEuNzYgMzMuMzM3NCAzMS42MjU2IDMzLjUgMzEuNDU3NUMzMy42NjI1IDMxLjI4OTQgMzMuNzkwMyAzMS4wOTEgMzMuODc2MSAzMC44NzM1QzMzLjk2MTkgMzAuNjU2IDM0LjAwNCAzMC40MjM4IDM0IDMwLjE5VjE1LjAyNjND''@;'; put 'put ''MzMuODg4NiAxNS4wMzU0IDMzLjc3NjQgMTUuMDM4OSAzMy42NjM3IDE1LjAzNjdIMjYuMTk2NEMyNi4yMDY4IDE1LjA1ODQgMjYuMjE2NiAxNS4wODA0IDI2LjIyNTggMTUuMTAyN0MyNi4yOTQ0IDE1LjI2ODMgMjYuMzI5NyAxNS40NDU4IDI2LjMyOTcgMTUuNjI1QzI2LjMyOTcgMTUuODA0''@;'; put 'put ''MiAyNi4yOTQ0IDE1Ljk4MTcgMjYuMjI1OCAxNi4xNDczQzI2LjE1NzMgMTYuMzEyOCAyNi4wNTY3IDE2LjQ2MzMgMjUuOTMgMTYuNTlMMTYuMjcgMjYuMjVMMTEgMjAuOTRDMTAuNzY2NSAyMC42ODMyIDEwLjY0MDEgMjAuMzQ2OSAxMC42NDY1IDE5Ljk5OTlDMTAuNjUyOSAxOS42NTI5IDEw''@;'; put 'put ''Ljc5MTggMTkuMzIxNSAxMS4wMzQ2IDE5LjA3MzVDMTEuMjc3NSAxOC44MjU1IDExLjYwNTkgMTguNjc5OCAxMS45NTI3IDE4LjY2NjFDMTIuMjk5NSAxOC42NTI1IDEyLjYzODQgMTguNzcxOSAxMi45IDE5TDE2LjI4IDIyLjM4TDIzLjYyMzMgMTUuMDM2N0gyMi4zMzk1QzIxLjE1NzcgMTUu''@;'; put 'put ''MDYwNCAyMC4wMjMzIDE0LjQ0ODkgMTkuNDIwNiAxMy4zODkzQzE4LjgyMDQgMTIuMzM0MiAxOC44NzAzIDExLjA0MjMgMTkuNTM2MiAxMC4wMzg3TDIxLjk1OTQgNloiLz48cGF0aCBkPSJNMTAgMTBDMTAuMjY1MiAxMCAxMC41MTk2IDkuODk0NjQgMTAuNzA3MSA5LjcwNzExQzEwLjg5NDcg''@;'; put 'put ''OS41MTk1NyAxMSA5LjI2NTIyIDExIDlWM0MxMSAyLjczNDc4IDEwLjg5NDcgMi40ODA0MyAxMC43MDcxIDIuMjkyODlDMTAuNTE5NiAyLjEwNTM2IDEwLjI2NTIgMiAxMCAyQzkuNzM0OCAyIDkuNDgwNDQgMi4xMDUzNiA5LjI5MjkxIDIuMjkyODlDOS4xMDUzNyAyLjQ4MDQzIDkuMDAwMDEg''@;'; put 'put ''Mi43MzQ3OCA5LjAwMDAxIDNWOUM5LjAwMDAxIDkuMjY1MjIgOS4xMDUzNyA5LjUxOTU3IDkuMjkyOTEgOS43MDcxMUM5LjQ4MDQ0IDkuODk0NjQgOS43MzQ4IDEwIDEwIDEwWiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44OTQ2NCAxMC43''@;'; put 'put ''MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQzIDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4yOTI4OUM5LjEw''@;'; put 'put ''NTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcgOS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+PHBhdGggZD0iTTMwIDEzLjVDMjguMDEwOSAxMy41IDI2LjEwMzIgMTIu''@;'; put 'put ''NzA5OCAyNC42OTY3IDExLjMwMzNDMjMuMjkwMiA5Ljg5Njc4IDIyLjUgNy45ODkxMiAyMi41IDZIMTIuMlY5QzEyLjIgOS41ODM0OCAxMS45NjgyIDEwLjE0MzEgMTEuNTU1NiAxMC41NTU2QzExLjE0MzEgMTAuOTY4MiAxMC41ODM1IDExLjIgMTAgMTEuMkM5LjQxNjU0IDExLjIgOC44NTY5''@;'; put 'put ''NiAxMC45NjgyIDguNDQ0MzggMTAuNTU1NkM4LjAzMTggMTAuMTQzMSA3LjgwMDAxIDkuNTgzNDggNy44MDAwMSA5VjZIMy44MDAwMUMzLjU2MjA0IDUuOTk3MjkgMy4zMjU5MyA2LjA0MjMzIDMuMTA1NjcgNi4xMzI0NkMyLjg4NTQgNi4yMjI1OSAyLjY4NTQ1IDYuMzU1OTcgMi41MTc2MyA2''@;'; put 'put ''LjUyNDczQzIuMzQ5ODEgNi42OTM0OCAyLjIxNzUzIDYuODk0MTcgMi4xMjg2MyA3LjExNDkzQzIuMDM5NzIgNy4zMzU2OSAxLjk5NTk5IDcuNTcyMDQgMi4wMDAwMSA3LjgxVjMwLjE5QzEuOTk2MDQgMzAuNDIzOCAyLjAzODE2IDMwLjY1NiAyLjEyMzk2IDMwLjg3MzVDMi4yMDk3NiAzMS4w''@;'; put 'put ''OTEgMi4zMzc1NyAzMS4yODk0IDIuNTAwMDcgMzEuNDU3NUMyLjY2MjU4IDMxLjYyNTYgMi44NTY2MSAzMS43NiAzLjA3MTA4IDMxLjg1MzFDMy4yODU1NSAzMS45NDYyIDMuNTE2MjUgMzEuOTk2MSAzLjc1MDAxIDMySDMyLjI1QzMyLjQ4MzggMzEuOTk2MSAzMi43MTQ1IDMxLjk0NjIgMzIu''@;'; put 'put ''OTI4OSAzMS44NTMxQzMzLjE0MzQgMzEuNzYgMzMuMzM3NCAzMS42MjU2IDMzLjUgMzEuNDU3NUMzMy42NjI1IDMxLjI4OTQgMzMuNzkwMyAzMS4wOTEgMzMuODc2MSAzMC44NzM1QzMzLjk2MTkgMzAuNjU2IDM0LjAwNCAzMC40MjM4IDM0IDMwLjE5VjEyLjM0QzMyLjgwNDEgMTMuMDk5MSAz''@;'; put 'put ''MS40MTY1IDEzLjUwMTUgMzAgMTMuNVpNMjUuOTQgMTYuNThMMTYuMjcgMjYuMjVMMTEgMjAuOTRDMTAuNzY2NSAyMC42ODMyIDEwLjY0MDEgMjAuMzQ2OSAxMC42NDY1IDE5Ljk5OTlDMTAuNjUyOSAxOS42NTI5IDEwLjc5MTggMTkuMzIxNSAxMS4wMzQ2IDE5LjA3MzVDMTEuMjc3NSAxOC44''@;'; put 'put ''MjU1IDExLjYwNTkgMTguNjc5OCAxMS45NTI3IDE4LjY2NjFDMTIuMjk5NSAxOC42NTI1IDEyLjYzODQgMTguNzcxOSAxMi45IDE5TDE2LjI4IDIyLjM4TDI0IDE0LjY2QzI0LjEyNjcgMTQuNTMzMyAyNC4yNzcyIDE0LjQzMjcgMjQuNDQyOCAxNC4zNjQyQzI0LjYwODMgMTQuMjk1NiAyNC43''@;'; put 'put ''ODU4IDE0LjI2MDMgMjQuOTY1IDE0LjI2MDNDMjUuMTQ0MiAxNC4yNjAzIDI1LjMyMTcgMTQuMjk1NiAyNS40ODczIDE0LjM2NDJDMjUuNjUyOCAxNC40MzI3IDI1LjgwMzMgMTQuNTMzMyAyNS45MyAxNC42NkMyNi4wNTY3IDE0Ljc4NjcgMjYuMTU3MyAxNC45MzcyIDI2LjIyNTggMTUuMTAy''@;'; put 'put ''N0MyNi4yOTQ0IDE1LjI2ODMgMjYuMzI5NyAxNS40NDU4IDI2LjMyOTcgMTUuNjI1QzI2LjMyOTcgMTUuODA0MiAyNi4yOTQ0IDE1Ljk4MTcgMjYuMjI1OCAxNi4xNDczQzI2LjE1NzMgMTYuMzEyOCAyNi4wNTY3IDE2LjQ2MzMgMjUuOTMgMTYuNTlMMjUuOTQgMTYuNThaIi8+PHBhdGggZD0i''@;'; put 'put ''TTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+J31dLFJndD1bImNhbGVuZGFyIix7b3V0bGluZTonPHBhdGggZD0iTTIyIDIwSDIw''@;'; put 'put ''VjIySDIyVjIwWk0yMCAyNkgyMlYyNEgyMFYyNlpNMjggMjRIMjZWMjZIMjhWMjRaTTI4IDIwSDI2VjIySDI4VjIwWk0yNyAxMkMyNy41NSAxMiAyOCAxMS41NSAyOCAxMVY1QzI4IDQuNDUgMjcuNTUgNCAyNyA0QzI2LjQ1IDQgMjYgNC40NSAyNiA1VjExQzI2IDExLjU1IDI2LjQ1IDEyIDI3''@;'; put 'put ''IDEyWk0yMiAxNkgyMFYxOEgyMlYxNlpNMjggMTZIMjZWMThIMjhWMTZaTTI0IDhIMTJWMTBIMjRWOFpNMTAgMTZIOFYxOEgxMFYxNlpNMTAgMjBIOFYyMkgxMFYyMFpNMTAgMjRIOFYyNkgxMFYyNFpNMzMuNSA4LjU0QzMzLjE3IDguMiAzMi43MiA4LjAxIDMyLjI1IDhIMzBWMTBIMzJWMzBI''@;'; put 'put ''NFYxMEg2VjhIMy43NUMzLjI4IDggMi44MyA4LjIgMi41IDguNTRDMi4xNyA4Ljg4IDIgOS4zNCAyIDkuODFWMzAuMTlDMiAzMC42NiAyLjE3IDMxLjEyIDIuNSAzMS40NkMyLjgzIDMxLjggMy4yOCAzMS45OSAzLjc1IDMySDMyLjI1QzMyLjcyIDMyIDMzLjE3IDMxLjggMzMuNSAzMS40NkMz''@;'; put 'put ''My44MyAzMS4xMiAzNC4wMSAzMC42NiAzNCAzMC4xOVY5LjgxQzM0IDkuMzQgMzMuODMgOC44OCAzMy41IDguNTRaTTE0IDI2SDE2VjI0SDE0VjI2Wk0xNiAyMEgxNFYyMkgxNlYyMFpNMTYgMTZIMTRWMThIMTZWMTZaTTkgMTJDOS41NSAxMiAxMCAxMS41NSAxMCAxMVY1QzEwIDQuNDUgOS41''@;'; put 'put ''NSA0IDkgNEM4LjQ1IDQgOCA0LjQ1IDggNVYxMUM4IDExLjU1IDguNDUgMTIgOSAxMloiLz4nLG91dGxpbmVBbGVydGVkOic8cGF0aCBkPSJNMjYuOTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4MSAxMS45OTQ5IDIxLjE1ODggMTIuNDAwNUMyMS4z''@;'; put 'put ''ODk2IDEyLjgwNiAyMS44MzYzIDEzLjA1MTkgMjIuMzE0OCAxMy4wMzY3SDMzLjY4ODFDMzQuMTY2NiAxMy4wNTE5IDM0LjYxMzQgMTIuODA2IDM0Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4MDggMTEuMTE1OUwyOS4wOTkxIDEuNjQ2MjFDMjgu''@;'; put 'put ''ODcxMSAxLjI2OTEzIDI4LjQ1MzIgMS4wMzczNSAyOC4wMDE1IDEuMDM3MzVDMjcuNTQ5NyAxLjAzNzM1IDI3LjEzMTkgMS4yNjkxMyAyNi45MDM5IDEuNjQ2MjFaIi8+PHBhdGggZD0iTTMyIDE1LjAzNjdIMzMuNjYzN0MzMy43NzYzIDE1LjAzODkgMzMuODg4NiAxNS4wMzU0IDM0IDE1LjAy''@;'; put 'put ''NjNWMzAuMTlDMzQuMDEgMzAuNjYgMzMuODMgMzEuMTIgMzMuNSAzMS40NkMzMy4xNyAzMS44IDMyLjcyIDMyIDMyLjI1IDMySDMuNzVDMy4yOCAzMS45OSAyLjgzIDMxLjggMi41IDMxLjQ2QzIuMTcgMzEuMTIgMiAzMC42NiAyIDMwLjE5VjkuODFDMiA5LjM0IDIuMTcgOC44OCAyLjUgOC41''@;'; put 'put ''NEMyLjgzIDguMiAzLjI4IDggMy43NSA4SDZWMTBINFYzMEgzMlYxNS4wMzY3WiIvPjxwYXRoIGQ9Ik0yMC43NTk0IDhMMTkuNTU5NCAxMEgxMlY4SDIwLjc1OTRaIi8+PHBhdGggZD0iTTIwIDIwSDIyVjIySDIwVjIwWiIvPjxwYXRoIGQ9Ik0yMiAyNkgyMFYyNEgyMlYyNloiLz48cGF0aCBk''@;'; put 'put ''PSJNMjYgMjZWMjRIMjhWMjZIMjZaIi8+PHBhdGggZD0iTTI2IDIyVjIwSDI4VjIySDI2WiIvPjxwYXRoIGQ9Ik0yMCAxNkgyMlYxOEgyMFYxNloiLz48cGF0aCBkPSJNMjYgMThWMTZIMjhWMThIMjZaIi8+PHBhdGggZD0iTTggMTZIMTBWMThIOFYxNloiLz48cGF0aCBkPSJNOCAyMEgxMFYy''@;'; put 'put ''Mkg4VjIwWiIvPjxwYXRoIGQ9Ik04IDI0SDEwVjI2SDhWMjRaIi8+PHBhdGggZD0iTTE2IDI2SDE0VjI0SDE2VjI2WiIvPjxwYXRoIGQ9Ik0xNCAyMEgxNlYyMkgxNFYyMFoiLz48cGF0aCBkPSJNMTQgMTZIMTZWMThIMTRWMTZaIi8+PHBhdGggZD0iTTEwIDExQzEwIDExLjU1IDkuNTUgMTIg''@;'; put 'put ''OSAxMkM4LjQ1IDEyIDggMTEuNTUgOCAxMVY1QzggNC40NSA4LjQ1IDQgOSA0QzkuNTUgNCAxMCA0LjQ1IDEwIDVWMTFaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2''@;'; put 'put ''IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz48cGF0aCBkPSJNMjMuMjg5OSA4QzIzLjQ1OTQgOC41Njk2MyAyMy42OTk1IDkuMTA4ODcgMjQgOS42MDc1OVYxMEgxMlY4SDIzLjI4OTlaIi8+PHBhdGggZD0iTTM0IDExLjc0NTNDMzMuMzk2IDEyLjE2''@;'; put 'put ''NjYgMzIuNzIyNCAxMi40OTUxIDMyIDEyLjcxMDFWMzBINFYxMEg2VjhIMy43NUMzLjI4IDggMi44MyA4LjIgMi41IDguNTRDMi4xNyA4Ljg4IDIgOS4zNCAyIDkuODFWMzAuMTlDMiAzMC42NiAyLjE3IDMxLjEyIDIuNSAzMS40NkMyLjgzIDMxLjggMy4yOCAzMS45OSAzLjc1IDMySDMyLjI1''@;'; put 'put ''QzMyLjcyIDMyIDMzLjE3IDMxLjggMzMuNSAzMS40NkMzMy44MyAzMS4xMiAzNC4wMSAzMC42NiAzNCAzMC4xOVYxMS43NDUzWiIvPjxwYXRoIGQ9Ik0yMCAyMEgyMlYyMkgyMFYyMFoiLz48cGF0aCBkPSJNMjIgMjZIMjBWMjRIMjJWMjZaIi8+PHBhdGggZD0iTTI2IDI2VjI0SDI4VjI2SDI2''@;'; put 'put ''WiIvPjxwYXRoIGQ9Ik0yNiAyMlYyMEgyOFYyMkgyNloiLz48cGF0aCBkPSJNMjAgMTZIMjJWMThIMjBWMTZaIi8+PHBhdGggZD0iTTI2IDE4VjE2SDI4VjE4SDI2WiIvPjxwYXRoIGQ9Ik04IDE2SDEwVjE4SDhWMTZaIi8+PHBhdGggZD0iTTggMjBIMTBWMjJIOFYyMFoiLz48cGF0aCBkPSJN''@;'; put 'put ''OCAyNEgxMFYyNkg4VjI0WiIvPjxwYXRoIGQ9Ik0xNiAyNkgxNFYyNEgxNlYyNloiLz48cGF0aCBkPSJNMTQgMjBIMTZWMjJIMTRWMjBaIi8+PHBhdGggZD0iTTE0IDE2SDE2VjE4SDE0VjE2WiIvPjxwYXRoIGQ9Ik0xMCAxMUMxMCAxMS41NSA5LjU1IDEyIDkgMTJDOC40NSAxMiA4IDExLjU1''@;'; put 'put ''IDggMTFWNUM4IDQuNDUgOC40NSA0IDkgNEM5LjU1IDQgMTAgNC40NSAxMCA1VjExWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0yNyAxMkMyNy41NSAxMiAyOCAxMS41NSAyOCAxMVY1QzI4IDQuNDUgMjcuNTUgNCAyNyA0QzI2LjQ1IDQgMjYgNC40NSAyNiA1VjExQzI2IDExLjU1IDI2LjQ1IDEy''@;'; put 'put ''IDI3IDEyWk0zMy41IDguNTRDMzMuMTcgOC4yIDMyLjcyIDguMDEgMzIuMjUgOEgyOS4yVjExQzI5LjIgMTIuMjEgMjguMjEgMTMuMiAyNyAxMy4yQzI1Ljc5IDEzLjIgMjQuOCAxMi4yMSAyNC44IDExVjhIMTEuMlYxMUMxMS4yIDEyLjIxIDEwLjIxIDEzLjIgOSAxMy4yQzcuNzkgMTMuMiA2''@;'; put 'put ''LjggMTIuMjEgNi44IDExVjhIMy43NUMzLjI4IDggMi44MyA4LjIgMi41IDguNTRDMi4xNyA4Ljg4IDIgOS4zNCAyIDkuODFWMzAuMTlDMiAzMC42NiAyLjE3IDMxLjEyIDIuNSAzMS40NkMyLjgzIDMxLjggMy4yOCAzMS45OSAzLjc1IDMySDMyLjI1QzMyLjcyIDMyIDMzLjE3IDMxLjggMzMu''@;'; put 'put ''NSAzMS40NkMzMy44MyAzMS4xMiAzNC4wMSAzMC42NiAzNCAzMC4xOVY5LjgxQzM0IDkuMzQgMzMuODMgOC44OCAzMy41IDguNTRaTTEwLjEgMjYuMUg3LjlWMjMuOUgxMC4xVjI2LjFaTTEwLjEgMjIuMUg3LjlWMTkuOUgxMC4xVjIyLjFaTTEwLjEgMTguMUg3LjlWMTUuOUgxMC4xVjE4LjFa''@;'; put 'put ''TTE2LjEgMjYuMUgxMy45VjIzLjlIMTYuMVYyNi4xWk0xNi4xIDIyLjFIMTMuOVYxOS45SDE2LjFWMjIuMVpNMTYuMSAxOC4xSDEzLjlWMTUuOUgxNi4xVjE4LjFaTTIyLjEgMjYuMUgxOS45VjIzLjlIMjIuMVYyNi4xWk0yMi4xIDIyLjFIMTkuOVYxOS45SDIyLjFWMjIuMVpNMjIuMSAxOC4x''@;'; put 'put ''SDE5LjlWMTUuOUgyMi4xVjE4LjFaTTI4LjEgMjYuMUgyNS45VjIzLjlIMjguMVYyNi4xWk0yOC4xIDIyLjFIMjUuOVYxOS45SDI4LjFWMjIuMVpNMjguMSAxOC4xSDI1LjlWMTUuOUgyOC4xVjE4LjFaTTkgMTJDOS41NSAxMiAxMCAxMS41NSAxMCAxMVY1QzEwIDQuNDUgOS41NSA0IDkgNEM4''@;'; put 'put ''LjQ1IDQgOCA0LjQ1IDggNVYxMUM4IDExLjU1IDguNDUgMTIgOSAxMloiLz4nLHNvbGlkQWxlcnRlZDonPHBhdGggZD0iTTI2LjkwMzkgMS42NDYyMUwyMS4yMjIyIDExLjExNTlDMjAuOTUyNiAxMS40OTg0IDIwLjkyODEgMTEuOTk0OSAyMS4xNTg4IDEyLjQwMDVDMjEuMzg5NiAxMi44MDYg''@;'; put 'put ''MjEuODM2MyAxMy4wNTE5IDIyLjMxNDggMTMuMDM2N0gzMy42ODgxQzM0LjE2NjYgMTMuMDUxOSAzNC42MTM0IDEyLjgwNiAzNC44NDQxIDEyLjQwMDVDMzUuMDc0OCAxMS45OTQ5IDM1LjA1MDMgMTEuNDk4NCAzNC43ODA4IDExLjExNTlMMjkuMDk5MSAxLjY0NjIxQzI4Ljg3MTEgMS4yNjkx''@;'; put 'put ''MyAyOC40NTMyIDEuMDM3MzUgMjguMDAxNSAxLjAzNzM1QzI3LjU0OTcgMS4wMzczNSAyNy4xMzE5IDEuMjY5MTMgMjYuOTAzOSAxLjY0NjIxWiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjAuNzU5NCA4TDE5LjUzNjIgMTAuMDM4N0MxOC44''@;'; put 'put ''NzAzIDExLjA0MjMgMTguODIwNCAxMi4zMzQyIDE5LjQyMDYgMTMuMzg5M0MyMC4wMjMzIDE0LjQ0ODkgMjEuMTU3NyAxNS4wNjA0IDIyLjMzOTUgMTUuMDM2N0gzMy42NjM3QzMzLjc3NjMgMTUuMDM4OSAzMy44ODg2IDE1LjAzNTQgMzQgMTUuMDI2M1YzMC4xOUMzNC4wMSAzMC42NiAzMy44''@;'; put 'put ''MyAzMS4xMiAzMy41IDMxLjQ2QzMzLjE3IDMxLjggMzIuNzIgMzIgMzIuMjUgMzJIMy43NUMzLjI4IDMxLjk5IDIuODMgMzEuOCAyLjUgMzEuNDZDMi4xNyAzMS4xMiAyIDMwLjY2IDIgMzAuMTlWOS44MUMyIDkuMzQgMi4xNyA4Ljg4IDIuNSA4LjU0QzIuODMgOC4yIDMuMjggOCAzLjc1IDhI''@;'; put 'put ''Ni44VjExQzYuOCAxMi4yMSA3Ljc5IDEzLjIgOSAxMy4yQzEwLjIxIDEzLjIgMTEuMiAxMi4yMSAxMS4yIDExVjhIMjAuNzU5NFpNNy45IDIzLjlWMjYuMUgxMC4xVjIzLjlINy45Wk03LjkgMTkuOVYyMi4xSDEwLjFWMTkuOUg3LjlaTTcuOSAxNS45VjE4LjFIMTAuMVYxNS45SDcuOVpNMTMu''@;'; put 'put ''OSAyNi4xSDE2LjFWMjMuOUgxMy45VjI2LjFaTTEzLjkgMjIuMUgxNi4xVjE5LjlIMTMuOVYyMi4xWk0xMy45IDE4LjFIMTYuMVYxNS45SDEzLjlWMTguMVpNMTkuOSAyNi4xSDIyLjFWMjMuOUgxOS45VjI2LjFaTTE5LjkgMjIuMUgyMi4xVjE5LjlIMTkuOVYyMi4xWk0xOS45IDE4LjFIMjIu''@;'; put 'put ''MVYxNS45SDE5LjlWMTguMVpNMjUuOSAyMy45VjI2LjFIMjguMVYyMy45SDI1LjlaTTI1LjkgMTkuOVYyMi4xSDI4LjFWMTkuOUgyNS45Wk0yNS45IDE1LjlWMTguMUgyOC4xVjE1LjlIMjUuOVoiLz48cGF0aCBkPSJNMTAgMTFDMTAgMTEuNTUgOS41NSAxMiA5IDEyQzguNDUgMTIgOCAxMS41''@;'; put 'put ''NSA4IDExVjVDOCA0LjQ1IDguNDUgNCA5IDRDOS41NSA0IDEwIDQuNDUgMTAgNVYxMVoiLz4nLHNvbGlkQmFkZ2VkOic8cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1''@;'; put 'put ''IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTM0IDExLjc0NTNDMzIuODY2MiAxMi41MzYyIDMxLjQ4NzIgMTMgMzAgMTNDMjkuNDA2MyAxMyAyOC44Mjk5IDEyLjkyNjEgMjguMjc5NCAxMi43ODdD''@;'; put 'put ''MjcuOTE4MyAxMy4wNDY3IDI3LjQ3NjIgMTMuMiAyNyAxMy4yQzI1Ljc5IDEzLjIgMjQuOCAxMi4yMSAyNC44IDExVjEwLjY4NjJDMjQuMTEyNiA5LjkyMzkzIDIzLjU5MDQgOS4wMDk3IDIzLjI4OTkgOEgxMS4yVjExQzExLjIgMTIuMjEgMTAuMjEgMTMuMiA5IDEzLjJDNy43OSAxMy4yIDYu''@;'; put 'put ''OCAxMi4yMSA2LjggMTFWOEgzLjc1QzMuMjggOCAyLjgzIDguMiAyLjUgOC41NEMyLjE3IDguODggMiA5LjM0IDIgOS44MVYzMC4xOUMyIDMwLjY2IDIuMTcgMzEuMTIgMi41IDMxLjQ2QzIuODMgMzEuOCAzLjI4IDMxLjk5IDMuNzUgMzJIMzIuMjVDMzIuNzIgMzIgMzMuMTcgMzEuOCAzMy41''@;'; put 'put ''IDMxLjQ2QzMzLjgzIDMxLjEyIDM0LjAxIDMwLjY2IDM0IDMwLjE5VjExLjc0NTNaTTcuOSAyMy45VjI2LjFIMTAuMVYyMy45SDcuOVpNNy45IDE5LjlWMjIuMUgxMC4xVjE5LjlINy45Wk03LjkgMTUuOVYxOC4xSDEwLjFWMTUuOUg3LjlaTTEzLjkgMjYuMUgxNi4xVjIzLjlIMTMuOVYyNi4x''@;'; put 'put ''Wk0xMy45IDIyLjFIMTYuMVYxOS45SDEzLjlWMjIuMVpNMTMuOSAxOC4xSDE2LjFWMTUuOUgxMy45VjE4LjFaTTE5LjkgMjYuMUgyMi4xVjIzLjlIMTkuOVYyNi4xWk0xOS45IDIyLjFIMjIuMVYxOS45SDE5LjlWMjIuMVpNMTkuOSAxOC4xSDIyLjFWMTUuOUgxOS45VjE4LjFaTTI1LjkgMjMu''@;'; put 'put ''OVYyNi4xSDI4LjFWMjMuOUgyNS45Wk0yNS45IDE5LjlWMjIuMUgyOC4xVjE5LjlIMjUuOVpNMjUuOSAxNS45VjE4LjFIMjguMVYxNS45SDI1LjlaIi8+PHBhdGggZD0iTTEwIDExQzEwIDExLjU1IDkuNTUgMTIgOSAxMkM4LjQ1IDEyIDggMTEuNTUgOCAxMVY1QzggNC40NSA4LjQ1IDQgOSA0''@;'; put 'put ''QzkuNTUgNCAxMCA0LjQ1IDEwIDVWMTFaIi8+J31dLElndD1bImZvbGRlci1vcGVuIix7b3V0bGluZTonPHBhdGggZD0iTTMzLjI2IDEzQzMzLjg0IDEyLjk5IDM0LjM4IDEzLjI2IDM0LjcxIDEzLjc0QzM1IDE0LjE2IDM1LjA4IDE0LjY5IDM0LjkyIDE1LjE4TDMwLjczIDMwLjI4QzMwLjYg''@;'; put 'put ''MzAuNzIgMzAuMTkgMzEuMDIgMjkuNzMgMzFINC40MUMzLjY2IDMxLjAyIDMuMDMgMzAuNDQgMyAyOS42OVY3QzMgNS45IDMuOSA1IDUgNUgxMS40OUMxMi4xMyA1IDEyLjczIDUuMyAxMy4xMSA1LjgyTDE1LjQyIDlIMjkuMzlDMzAuNDkgOSAzMS4zOSA5LjkgMzEuMzkgMTFIMTQuOTFDMTQu''@;'; put 'put ''NTkgMTEgMTQuMjkgMTAuODUgMTQuMSAxMC41OUwxMS40OSA3SDVWMjVMNy45MiAxNC42NkM3LjkyIDE0LjY2IDcuOTIgMTQuNTcgNy45MiAxNC41MkM4LjMyIDEzLjYzIDkuMTkgMTMuMDQgMTAuMTcgMTNIMzMuMjZaTTUuOSAyOUgyOC45NEwzMi44OCAxNC45NUgxMC4xNkMxMC4wMSAxNC45''@;'; put 'put ''OCA5Ljg3IDE1LjA3IDkuNzggMTUuMTlMNS45IDI5WiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNy45MDQxIDEuNjQ2MjFMMjIuMjIyNCAxMS4xMTU5QzIxLjk1MjkgMTEuNDk4NCAyMS45Mjg0IDExLjk5NDkgMjIuMTU5MSAxMi40MDA1QzIyLjM4OTggMTIuODA2IDIyLjgzNjYg''@;'; put 'put ''MTMuMDUxOSAyMy4zMTUgMTMuMDM2N0gzNC42ODg0QzM1LjE2NjkgMTMuMDUxOSAzNS42MTM2IDEyLjgwNiAzNS44NDQzIDEyLjQwMDVDMzYuMDc1IDExLjk5NDkgMzYuMDUwNiAxMS40OTg0IDM1Ljc4MSAxMS4xMTU5TDMwLjA5OTMgMS42NDYyMUMyOS44NzEzIDEuMjY5MTMgMjkuNDUzNSAx''@;'; put 'put ''LjAzNzM1IDI5LjAwMTcgMS4wMzczNUMyOC41NSAxLjAzNzM1IDI4LjEzMjEgMS4yNjkxMyAyNy45MDQxIDEuNjQ2MjFaIi8+PHBhdGggZD0iTTIwLjEwNTggMTFIMTQuOTEwMkMxNC41OTAyIDExIDE0LjI5MDIgMTAuODUgMTQuMTAwMiAxMC41OUwxMS40OTAyIDdINS4wMDAyNFYyNUw3Ljky''@;'; put 'put ''MDI0IDE0LjY2VjE0LjUyQzguMzIwMjQgMTMuNjMgOS4xOTAyNCAxMy4wNCAxMC4xNzAyIDEzSDIwLjIzMjdDMjAuMjg2MSAxMy4xMzI2IDIwLjM0ODggMTMuMjYyNyAyMC40MjA4IDEzLjM4OTNDMjAuODgxNSAxNC4xOTkxIDIxLjY1MjcgMTQuNzQ3MiAyMi41MTgzIDE0Ljk1SDEwLjE2MDJD''@;'; put 'put ''MTAuMDEwMiAxNC45OCA5Ljg3MDI0IDE1LjA3IDkuNzgwMjQgMTUuMTlMNS45MDAyNCAyOUgyOC45NDAyTDMyLjg1NTkgMTUuMDM2N0gzNC42NjM5QzM0Ljc2MzYgMTUuMDM4NyAzNC44NjMgMTUuMDM2MiAzNC45NjE3IDE1LjAyOTJDMzQuOTUwMyAxNS4wNzk4IDM0LjkzNjUgMTUuMTMwMSAz''@;'; put 'put ''NC45MjAyIDE1LjE4TDMwLjczMDIgMzAuMjhDMzAuNjAwMiAzMC43MiAzMC4xOTAyIDMxLjAyIDI5LjczMDIgMzFINC40MTAyNEMzLjY2MDI0IDMxLjAyIDMuMDMwMjQgMzAuNDQgMy4wMDAyNCAyOS42OVY3QzMuMDAwMjQgNS45IDMuOTAwMjQgNSA1LjAwMDI0IDVIMTEuNDkwMkMxMi4xMzAy''@;'; put 'put ''IDUgMTIuNzMwMiA1LjMgMTMuMTEwMiA1LjgyTDE1LjQyMDIgOUgyMS4xNTk3TDIwLjUzNjQgMTAuMDM4N0MyMC4zMzc4IDEwLjMzODEgMjAuMTkzOSAxMC42NjMyIDIwLjEwNTggMTFaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMzEgMTFDMzMuNzYxNCAxMSAzNiA4Ljc2MTQyIDM2''@;'; put 'put ''IDZDMzYgMy4yMzg1OCAzMy43NjE0IDEgMzEgMUMyOC4yMzg2IDEgMjYgMy4yMzg1OCAyNiA2QzI2IDguNzYxNDIgMjguMjM4NiAxMSAzMSAxMVoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTI2LjEwMSAxMUgxNC45MUMxNC41OSAxMSAxNC4y''@;'; put 'put ''OSAxMC44NSAxNC4xIDEwLjU5TDExLjQ5IDdINVYyNUw3LjkyIDE0LjY2VjE0LjUyQzguMzIgMTMuNjMgOS4xOSAxMy4wNCAxMC4xNyAxM0gzMy4yNkMzMy44NCAxMi45OSAzNC4zOCAxMy4yNiAzNC43MSAxMy43NEMzNSAxNC4xNiAzNS4wOCAxNC42OSAzNC45MiAxNS4xOEwzMC43MyAzMC4y''@;'; put 'put ''OEMzMC42IDMwLjcyIDMwLjE5IDMxLjAyIDI5LjczIDMxSDQuNDFDMy42NiAzMS4wMiAzLjAzIDMwLjQ0IDMgMjkuNjlWN0MzIDUuOSAzLjkgNSA1IDVIMTEuNDlDMTIuMTMgNSAxMi43MyA1LjMgMTMuMTEgNS44MkwxNS40MiA5SDI0LjY3MzZDMjUuMDI5NyA5Ljc0OTYgMjUuNTE1MSAxMC40''@;'; put 'put ''MjU5IDI2LjEwMSAxMVpNMjguOTQgMjlINS45TDkuNzggMTUuMTlDOS44NyAxNS4wNyAxMC4wMSAxNC45OCAxMC4xNiAxNC45NUgzMi44OEwyOC45NCAyOVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzQuNzA1OCAxMy43NEMzNC4zNzQ0IDEzLjI2NDMgMzMuODIyMyAxMi45ODYgMzMuMjM3OSAx''@;'; put 'put ''M0gxMC4yNTgzQzkuMjY5NTIgMTMuMDQxNCA4LjM4ODU4IDEzLjYyOTMgNy45ODA2IDE0LjUyQzcuOTc3MjkgMTQuNTY2NiA3Ljk3NzI5IDE0LjYxMzQgNy45ODA2IDE0LjY2TDUuMDI0NjMgMjVWNy4wMDAwMUgxMS41OTQ2TDE0LjIzNjcgMTAuNTlDMTQuNDI3OSAxMC44NDg0IDE0LjczMjcg''@;'; put 'put ''MTEuMDAwOCAxNS4wNTY3IDExSDMxLjM0NDlDMzEuMzQ0OSA5Ljg5NTQ0IDMwLjQzODQgOS4wMDAwMSAyOS4zMjAzIDkuMDAwMDFIMTUuNTczTDEzLjIzNDUgNS44MjAwMUMxMi44NTIyIDUuMzAzMTggMTIuMjQyNiA0Ljk5ODM1IDExLjU5NDYgNS4wMDAwMUg1LjAyNDYzQzMuOTA2NDYgNS4w''@;'; put 'put ''MDAwMSAzIDUuODk1NDQgMyA3LjAwMDAxVjI5LjY5QzMuMDMyODkgMzAuNDM4OSAzLjY2ODkxIDMxLjAyMjYgNC40MjczNyAzMUgyOS42NjQ0QzMwLjEyOTMgMzEuMDE4MyAzMC41NDY5IDMwLjcyMTMgMzAuNjc2OCAzMC4yOEwzNC45MTg0IDE1LjE4QzM1LjA3ODggMTQuNjkzNSAzNS4wMDAx''@;'; put 'put ''IDE0LjE2MSAzNC43MDU4IDEzLjc0WiIvPicsc29saWRBbGVydGVkOic8cGF0aCBkPSJNMjcuOTA0MSAxLjY0NjIxTDIyLjIyMjQgMTEuMTE1OUMyMS45NTI5IDExLjQ5ODQgMjEuOTI4NCAxMS45OTQ5IDIyLjE1OTEgMTIuNDAwNUMyMi4zODk4IDEyLjgwNiAyMi44MzY2IDEzLjA1MTkgMjMu''@;'; put 'put ''MzE1IDEzLjAzNjdIMzQuNjg4NEMzNS4xNjY5IDEzLjA1MTkgMzUuNjEzNiAxMi44MDYgMzUuODQ0MyAxMi40MDA1QzM2LjA3NSAxMS45OTQ5IDM2LjA1MDYgMTEuNDk4NCAzNS43ODEgMTEuMTE1OUwzMC4wOTkzIDEuNjQ2MjFDMjkuODcxMyAxLjI2OTEzIDI5LjQ1MzUgMS4wMzczNSAyOS4w''@;'; put 'put ''MDE3IDEuMDM3MzVDMjguNTUgMS4wMzczNSAyOC4xMzIxIDEuMjY5MTMgMjcuOTA0MSAxLjY0NjIxWiIvPjxwYXRoIGQ9Ik0yMC4yMzI1IDEzQzIwLjI4NTggMTMuMTMyNiAyMC4zNDg1IDEzLjI2MjcgMjAuNDIwNiAxMy4zODkzQzIxLjAyMzMgMTQuNDQ4OSAyMi4xNTc3IDE1LjA2MDQgMjMu''@;'; put 'put ''MzM5NSAxNS4wMzY3SDM0LjY2MzdDMzQuNzYyOSAxNS4wMzg3IDM0Ljg2MTggMTUuMDM2MiAzNC45NjAxIDE1LjAyOTNDMzQuOTQ4NyAxNS4wNzk5IDM0LjkzNDggMTUuMTMwMiAzNC45MTg0IDE1LjE4TDMwLjY3NjggMzAuMjhDMzAuNTQ2OSAzMC43MjEzIDMwLjEyOTMgMzEuMDE4MyAyOS42''@;'; put 'put ''NjQ0IDMxSDQuNDI3MzdDMy42Njg5MSAzMS4wMjI2IDMuMDMyODkgMzAuNDM4OSAzIDI5LjY5VjcuMDAwMDFDMyA1Ljg5NTQ0IDMuOTA2NDYgNS4wMDAwMSA1LjAyNDYzIDUuMDAwMDFIMTEuNTk0NkMxMi4yNDI2IDQuOTk4MzUgMTIuODUyMiA1LjMwMzE4IDEzLjIzNDUgNS44MjAwMUwxNS41''@;'; put 'put ''NzMgOS4wMDAwMUgyMS4xNTk0TDIwLjUzNjIgMTAuMDM4N0MyMC4zMzc1IDEwLjMzODEgMjAuMTkzNyAxMC42NjMyIDIwLjEwNTYgMTFIMTUuMDU2N0MxNC43MzI3IDExLjAwMDggMTQuNDI3OSAxMC44NDg0IDE0LjIzNjcgMTAuNTlMMTEuNTk0NiA3LjAwMDAxSDUuMDI0NjNWMjVMNy45ODA2''@;'; put 'put ''IDE0LjY2QzcuOTc3MjkgMTQuNjEzNCA3Ljk3NzI5IDE0LjU2NjYgNy45ODA2IDE0LjUyQzguMzg4NTggMTMuNjI5MyA5LjI2OTUyIDEzLjA0MTQgMTAuMjU4MyAxM0gyMC4yMzI1WiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0zMSAxMUMzMy43NjE0IDExIDM2IDguNzYxNDIgMzYgNkMz''@;'; put 'put ''NiAzLjIzODU4IDMzLjc2MTQgMSAzMSAxQzI4LjIzODYgMSAyNiAzLjIzODU4IDI2IDZDMjYgOC43NjE0MiAyOC4yMzg2IDExIDMxIDExWiIvPjxwYXRoIGQ9Ik0yNC42NzM2IDkuMDAwMDFDMjUuMDI5NyA5Ljc0OTYxIDI1LjUxNTEgMTAuNDI1OSAyNi4xMDEgMTFIMTUuMDU2N0MxNC43MzI3''@;'; put 'put ''IDExLjAwMDggMTQuNDI3OSAxMC44NDg0IDE0LjIzNjcgMTAuNTlMMTEuNTk0NiA3LjAwMDAxSDUuMDI0NjNWMjVMNy45ODA2IDE0LjY2QzcuOTc3MjkgMTQuNjEzNCA3Ljk3NzI5IDE0LjU2NjYgNy45ODA2IDE0LjUyQzguMzg4NTggMTMuNjI5MyA5LjI2OTUyIDEzLjA0MTQgMTAuMjU4MyAx''@;'; put 'put ''M0gzMy4yMzc5QzMzLjgyMjMgMTIuOTg2IDM0LjM3NDQgMTMuMjY0MyAzNC43MDU4IDEzLjc0QzM1LjAwMDEgMTQuMTYxIDM1LjA3ODggMTQuNjkzNSAzNC45MTg0IDE1LjE4TDMwLjY3NjggMzAuMjhDMzAuNTQ2OSAzMC43MjEzIDMwLjEyOTMgMzEuMDE4MyAyOS42NjQ0IDMxSDQuNDI3MzdD''@;'; put 'put ''My42Njg5MSAzMS4wMjI2IDMuMDMyODkgMzAuNDM4OSAzIDI5LjY5VjcuMDAwMDFDMyA1Ljg5NTQ0IDMuOTA2NDYgNS4wMDAwMSA1LjAyNDYzIDUuMDAwMDFIMTEuNTk0NkMxMi4yNDI2IDQuOTk4MzUgMTIuODUyMiA1LjMwMzE4IDEzLjIzNDUgNS44MjAwMUwxNS41NzMgOS4wMDAwMUgyNC42''@;'; put 'put ''NzM2WiIvPid9XSxEZ3Q9WyJtaW51cyIse291dGxpbmU6JzxwYXRoIGQ9Ik0yNiAxN0gxMEM5LjQ0NzcyIDE3IDkgMTcuNDQ3NyA5IDE4QzkgMTguNTUyMyA5LjQ0NzcyIDE5IDEwIDE5SDI2QzI2LjU1MjMgMTkgMjcgMTguNTUyMyAyNyAxOEMyNyAxNy40NDc3IDI2LjU1MjMgMTcgMjYgMTda''@;'; put 'put ''Ii8+J31dLExndD1bInBsdXMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjkuOTk5OSAxN0gxOC45OTk5VjZDMTguOTk5OSA1LjQ0NzcyIDE4LjU1MjIgNSAxNy45OTk5IDVDMTcuNDQ3NiA1IDE2Ljk5OTkgNS40NDc3MiAxNi45OTk5IDZWMTdINS45OTk5MkM1LjQ0NzY0IDE3IDQuOTk5OTIgMTcu''@;'; put 'put ''NDQ3NyA0Ljk5OTkyIDE4QzQuOTg5OTQgMTguMjYzIDUuMDk0MjcgMTguNTE3NCA1LjI4NiAxOC42OTc2QzUuNDc3NzMgMTguODc3OCA1LjczODA5IDE4Ljk2NjIgNS45OTk5MiAxOC45NEgxNi45OTk5VjMwQzE2Ljk5OTkgMzAuNTUyMyAxNy40NDc2IDMxIDE3Ljk5OTkgMzFDMTguNTUyMiAz''@;'; put 'put ''MSAxOC45OTk5IDMwLjU1MjMgMTguOTk5OSAzMFYxOUgyOS45OTk5QzMwLjU1MjIgMTkgMzAuOTk5OSAxOC41NTIzIDMwLjk5OTkgMThDMzAuOTk5OSAxNy40NDc3IDMwLjU1MjIgMTcgMjkuOTk5OSAxN1oiLz4nfV0sT2d0PVsiZXllLWhpZGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjQuNTQ5''@;'; put 'put ''NSAyMC40MzAxQzI0LjgyOTQgMTkuNjcwMSAyNC45ODkzIDE4Ljg2MDEgMjQuOTg5MyAxOC4wMDAxQzI0Ljk4OTMgMTQuMTQwMSAyMS44NTA4IDExLjAwMDEgMTcuOTkyNiAxMS4wMDAxQzE3LjEzMyAxMS4wMDAxIDE2LjMyMzMgMTEuMTYwMSAxNS41NjM3IDExLjQ0MDFMMTcuMjAyOSAxMy4w''@;'; put 'put ''ODAxQzE3LjQ2MjggMTMuMDQwMSAxNy43MjI3IDEzLjAwMDEgMTcuOTkyNiAxMy4wMDAxQzIwLjc1MTMgMTMuMDAwMSAyMi45OTAyIDE1LjI0MDEgMjIuOTkwMiAxOC4wMDAxQzIyLjk5MDIgMTguMjcwMSAyMi45NTAyIDE4LjUzMDEgMjIuOTEwMyAxOC43OTAxTDI0LjU0OTUgMjAuNDMwMVpN''@;'; put 'put ''MTcuOTkyNiA5LjAwMDA2QzIzLjk4OTggOS4wMDAwNiAyOS4zOTcyIDEyLjUyMDEgMzEuODk2IDE4LjAwMDFDMzAuODk2NSAyMC4xOTAxIDI5LjQyNzIgMjIuMDYwMSAyNy42NDggMjMuNTMwMUwyOS4wNjc0IDI0Ljk1MDFDMzEuMTI2NCAyMy4yMjAxIDMyLjgwNTYgMjAuOTkwMSAzMy45MTUx''@;'; put 'put ''IDE4LjM5MDFDMzQuMDI1IDE4LjE0MDEgMzQuMDI1IDE3Ljg2MDEgMzMuOTE1MSAxNy42MTAxQzMxLjE4NjQgMTEuMTYwMSAyNC45MzkzIDcuMDAwMDYgMTguMDAyNiA3LjAwMDA2QzE1Ljk3MzUgNy4wMDAwNiAxNC4wMDQ0IDcuMzcwMDYgMTIuMTY1MyA4LjAzMDA2TDEzLjc0NDYgOS42MTAw''@;'; put 'put ''NkMxNS4xMDM5IDkuMjEwMDYgMTYuNTMzMiA5LjAwMDA2IDE4LjAwMjYgOS4wMDAwNkgxNy45OTI2Wk0zLjcwOTI2IDIuMjkwMDZDMy4zMTk0NCAxLjkwMDA2IDIuNjc5NzQgMS45MDAwNiAyLjI4OTkyIDIuMjkwMDZDMS45MDAxIDIuNjgwMDYgMS45MDAxIDMuMzIwMDYgMi4yODk5MiAzLjcx''@;'; put 'put ''MDA2TDguNDc3MDIgOS45MDAwNkM1LjcwODMyIDExLjc0MDEgMy40NDkzOCAxNC4zODAxIDIuMDgwMDIgMTcuNjEwMUMxLjk3MDA3IDE3Ljg2MDEgMS45NzAwNyAxOC4xNDAxIDIuMDgwMDIgMTguMzkwMUM0LjgwODc0IDI0Ljg0MDEgMTEuMDU1OCAyOS4wMDAxIDE3Ljk5MjYgMjkuMDAwMUMy''@;'; put 'put ''MC43NDEzIDI5LjAwMDEgMjMuMzcgMjguMzQwMSAyNS43MTg5IDI3LjE1MDFMMzIuMjc1OSAzMy43MTAxQzMyLjQ3NTggMzMuOTEwMSAzMi43MjU3IDM0LjAwMDEgMzIuOTg1NSAzNC4wMDAxQzMzLjI0NTQgMzQuMDAwMSAzMy40OTUzIDMzLjkwMDEgMzMuNjk1MiAzMy43MTAxQzM0LjA4NSAz''@;'; put 'put ''My4zMjAxIDM0LjA4NSAzMi42OTAxIDMzLjY5NTIgMzIuMzAwMUwzLjcwOTI2IDIuMjkwMDZaTTEzLjgzNDUgMTUuMjUwMUwyMC43NDEzIDIyLjE2MDFDMTkuOTUxNiAyMi42ODAxIDE5LjAxMjEgMjMuMDAwMSAxNy45OTI2IDIzLjAwMDFDMTUuMjMzOSAyMy4wMDAxIDEyLjk5NDkgMjAuNzYw''@;'; put 'put ''MSAxMi45OTQ5IDE4LjAwMDFDMTIuOTk0OSAxNi45ODAxIDEzLjMwNDggMTYuMDQwMSAxMy44MzQ1IDE1LjI1MDFaTTE3Ljk5MjYgMjcuMDAwMUMxMS45OTU0IDI3LjAwMDEgNi41ODc5MSAyMy40ODAxIDQuMDg5MDggMTguMDAwMUM1LjM2ODQ4IDE1LjE5MDEgNy40Mjc1MSAxMi45MTAxIDku''@;'; put 'put ''OTI2MzQgMTEuMzQwMUwxMi40MDUyIDEzLjgyMDFDMTEuNTI1NiAxNC45OTAxIDEwLjk5NTggMTYuNDMwMSAxMC45OTU4IDE4LjAwMDFDMTAuOTk1OCAyMS44NjAxIDE0LjEzNDQgMjUuMDAwMSAxNy45OTI2IDI1LjAwMDFDMTkuNTYxOCAyNS4wMDAxIDIxLjAwMTIgMjQuNDcwMSAyMi4xNzA2''@;'; put 'put ''IDIzLjU5MDFMMjQuMjI5NiAyNS42NTAxQzIyLjMxMDUgMjYuNTIwMSAyMC4xOTE1IDI3LjAwMDEgMTcuOTkyNiAyNy4wMDAxWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xNy45OTI2IDkuMDAwMDZDMjMuOTg5OCA5LjAwMDA2IDI5LjM5NzIgMTIuNTIwMSAzMS44OTYgMTguMDAwMUMzMC44OTY1''@;'; put 'put ''IDIwLjE5MDEgMjkuNDI3MiAyMi4wNjAxIDI3LjY0OCAyMy41MzAxTDI5LjA2NzQgMjQuOTUwMUMzMS4xMjY0IDIzLjIyMDEgMzIuODA1NiAyMC45OTAxIDMzLjkxNTEgMTguMzkwMUMzNC4wMjUgMTguMTQwMSAzNC4wMjUgMTcuODYwMSAzMy45MTUxIDE3LjYxMDFDMzEuMTg2NCAxMS4xNjAx''@;'; put 'put ''IDI0LjkzOTMgNy4wMDAwNiAxOC4wMDI2IDcuMDAwMDZDMTUuOTczNSA3LjAwMDA2IDE0LjAwNDQgNy4zNzAwNiAxMi4xNjUzIDguMDMwMDZMMTMuNzQ0NiA5LjYxMDA2QzE1LjEwMzkgOS4yMTAwNiAxNi41MzMyIDkuMDAwMDYgMTguMDAyNiA5LjAwMDA2SDE3Ljk5MjZaTTMuNzA5MjYgMi4y''@;'; put 'put ''OTAwNkMzLjMxOTQ0IDEuOTAwMDYgMi42Nzk3NCAxLjkwMDA2IDIuMjg5OTIgMi4yOTAwNkMxLjkwMDEgMi42ODAwNiAxLjkwMDEgMy4zMjAwNiAyLjI4OTkyIDMuNzEwMDZMOC40NzcwMiA5LjkwMDA2QzUuNzA4MzIgMTEuNzQwMSAzLjQ0OTM4IDE0LjM4MDEgMi4wODAwMiAxNy42MTAxQzEu''@;'; put 'put ''OTcwMDcgMTcuODYwMSAxLjk3MDA3IDE4LjE0MDEgMi4wODAwMiAxOC4zOTAxQzQuODA4NzQgMjQuODQwMSAxMS4wNTU4IDI5LjAwMDEgMTcuOTkyNiAyOS4wMDAxQzIwLjc0MTMgMjkuMDAwMSAyMy4zNyAyOC4zNDAxIDI1LjcxODkgMjcuMTUwMUwzMi4yNzU5IDMzLjcxMDFDMzIuNDc1OCAz''@;'; put 'put ''My45MTAxIDMyLjcyNTcgMzQuMDAwMSAzMi45ODU1IDM0LjAwMDFDMzMuMjQ1NCAzNC4wMDAxIDMzLjQ5NTMgMzMuOTAwMSAzMy42OTUyIDMzLjcxMDFDMzQuMDg1IDMzLjMyMDEgMzQuMDg1IDMyLjY5MDEgMzMuNjk1MiAzMi4zMDAxTDMuNzA5MjYgMi4yOTAwNlpNMTcuOTkyNiAyNy4wMDAx''@;'; put 'put ''QzExLjk5NTQgMjcuMDAwMSA2LjU4NzkxIDIzLjQ4MDEgNC4wODkwOCAxOC4wMDAxQzUuMzY4NDggMTUuMTkwMSA3LjQyNzUxIDEyLjkxMDEgOS45MjYzNCAxMS4zNDAxTDEyLjQwNTIgMTMuODIwMUMxMS41MjU2IDE0Ljk5MDEgMTAuOTk1OCAxNi40MzAxIDEwLjk5NTggMTguMDAwMUMxMC45''@;'; put 'put ''OTU4IDIxLjg2MDEgMTQuMTM0NCAyNS4wMDAxIDE3Ljk5MjYgMjUuMDAwMUMxOS41NjE4IDI1LjAwMDEgMjEuMDAxMiAyNC40NzAxIDIyLjE3MDYgMjMuNTkwMUwyNC4yMjk2IDI1LjY1MDFDMjIuMzEwNSAyNi41MjAxIDIwLjE5MTUgMjcuMDAwMSAxNy45OTI2IDI3LjAwMDFaTTE1LjU2Mzcg''@;'; put 'put ''MTEuNDQwMUwyNC41NDk1IDIwLjQzMDFDMjQuODI5NCAxOS42NzAxIDI0Ljk4OTMgMTguODYwMSAyNC45ODkzIDE4LjAwMDFDMjQuOTg5MyAxNC4xNDAxIDIxLjg1MDggMTEuMDAwMSAxNy45OTI2IDExLjAwMDFDMTcuMTMzIDExLjAwMDEgMTYuMzIzMyAxMS4xNjAxIDE1LjU2MzcgMTEuNDQw''@;'; put 'put ''MVoiLz4nfV0sTmd0PVsiZXllIix7b3V0bGluZTonPHBhdGggZD0iTTE3Ljk5NzYgMTFDMTQuMTM4MiAxMSAxMC45OTg3IDE0LjE0IDEwLjk5ODcgMThDMTAuOTk4NyAyMS44NiAxNC4xMzgyIDI1IDE3Ljk5NzYgMjVDMjEuODU3IDI1IDI0Ljk5NjUgMjEuODYgMjQuOTk2NSAxOEMyNC45OTY1''@;'; put 'put ''IDE0LjE0IDIxLjg1NyAxMSAxNy45OTc2IDExWk0xNy45OTc2IDIzQzE1LjIzOCAyMyAxMi45OTgzIDIwLjc2IDEyLjk5ODMgMThDMTIuOTk4MyAxNS4yNCAxNS4yMzggMTMgMTcuOTk3NiAxM0MyMC43NTcxIDEzIDIyLjk5NjggMTUuMjQgMjIuOTk2OCAxOEMyMi45OTY4IDIwLjc2IDIwLjc1''@;'; put 'put ''NzEgMjMgMTcuOTk3NiAyM1pNMzMuOTE1MSAxNy42MUMzMS4xODU1IDExLjE3IDI0LjkzNjUgNyAxNy45OTc2IDdDMTEuMDU4NiA3IDQuODA5NjIgMTEuMTcgMi4wODAwNSAxNy42MUMxLjk3MDA2IDE3Ljg2IDEuOTcwMDYgMTguMTQgMi4wODAwNSAxOC4zOUM0LjgwOTYyIDI0Ljg0IDExLjA1''@;'; put 'put ''ODYgMjkgMTcuOTk3NiAyOUMyNC45MzY1IDI5IDMxLjE4NTUgMjQuODMgMzMuOTE1MSAxOC4zOUMzNC4wMjUxIDE4LjE0IDM0LjAyNTEgMTcuODYgMzMuOTE1MSAxNy42MVpNMTcuOTk3NiAyN0MxMS45OTg1IDI3IDYuNTg5MzQgMjMuNDggNC4wODk3MyAxOEM2LjU4OTM0IDEyLjUyIDExLjk5''@;'; put 'put ''ODUgOSAxNy45OTc2IDlDMjMuOTk2NiA5IDI5LjQwNTggMTIuNTIgMzEuOTA1NCAxOEMyOS40MDU4IDIzLjQ4IDIzLjk5NjYgMjcgMTcuOTk3NiAyN1oiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTcuOTk3NiAxMUMxNC4xMzgyIDExIDEwLjk5ODcgMTQuMTQgMTAuOTk4NyAxOEMxMC45OTg3IDIx''@;'; put 'put ''Ljg2IDE0LjEzODIgMjUgMTcuOTk3NiAyNUMyMS44NTcgMjUgMjQuOTk2NSAyMS44NiAyNC45OTY1IDE4QzI0Ljk5NjUgMTQuMTQgMjEuODU3IDExIDE3Ljk5NzYgMTFaTTMzLjkxNTEgMTcuNjFDMzEuMTg1NSAxMS4xNyAyNC45MzY1IDcgMTcuOTk3NiA3QzExLjA1ODYgNyA0LjgwOTYyIDEx''@;'; put 'put ''LjE3IDIuMDgwMDUgMTcuNjFDMS45NzAwNiAxNy44NiAxLjk3MDA2IDE4LjE0IDIuMDgwMDUgMTguMzlDNC44MDk2MiAyNC44NCAxMS4wNTg2IDI5IDE3Ljk5NzYgMjlDMjQuOTM2NSAyOSAzMS4xODU1IDI0LjgzIDMzLjkxNTEgMTguMzlDMzQuMDI1MSAxOC4xNCAzNC4wMjUxIDE3Ljg2IDMz''@;'; put 'put ''LjkxNTEgMTcuNjFaTTE3Ljk5NzYgMjdDMTEuOTk4NSAyNyA2LjU4OTM0IDIzLjQ4IDQuMDg5NzMgMThDNi41ODkzNCAxMi41MiAxMS45OTg1IDkgMTcuOTk3NiA5QzIzLjk5NjYgOSAyOS40MDU4IDEyLjUyIDMxLjkwNTQgMThDMjkuNDA1OCAyMy40OCAyMy45OTY2IDI3IDE3Ljk5NzYgMjda''@;'; put 'put ''Ii8+J31dLEZndD1bImVsbGlwc2lzLXZlcnRpY2FsIix7b3V0bGluZTonPHBhdGggZD0iTTIxLjEwMDEgNC45QzIxLjEwMDEgNi41MDE2MyAxOS43NTcgNy44IDE4LjEwMDEgNy44QzE2LjQ0MzIgNy44IDE1LjEwMDEgNi41MDE2MyAxNS4xMDAxIDQuOUMxNS4xMDAxIDMuMjk4MzcgMTYuNDQz''@;'; put 'put ''MiAyIDE4LjEwMDEgMkMxOS43NTcgMiAyMS4xMDAxIDMuMjk4MzcgMjEuMTAwMSA0LjlaIi8+PHBhdGggZD0iTTE4LjEwMDEgMjAuOUMxOS43NTcgMjAuOSAyMS4xMDAxIDE5LjYwMTYgMjEuMTAwMSAxOEMyMS4xMDAxIDE2LjM5ODQgMTkuNzU3IDE1LjEgMTguMTAwMSAxNS4xQzE2LjQ0MzIg''@;'; put 'put ''MTUuMSAxNS4xMDAxIDE2LjM5ODQgMTUuMTAwMSAxOEMxNS4xMDAxIDE5LjYwMTYgMTYuNDQzMiAyMC45IDE4LjEwMDEgMjAuOVoiLz48cGF0aCBkPSJNMTguMTAwMSAzNEMxOS43NTcgMzQgMjEuMTAwMSAzMi43MDE2IDIxLjEwMDEgMzEuMUMyMS4xMDAxIDI5LjQ5ODQgMTkuNzU3IDI4LjIg''@;'; put 'put ''MTguMTAwMSAyOC4yQzE2LjQ0MzIgMjguMiAxNS4xMDAxIDI5LjQ5ODQgMTUuMTAwMSAzMS4xQzE1LjEwMDEgMzIuNzAxNiAxNi40NDMyIDM0IDE4LjEwMDEgMzRaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMjEuMTAwMSA0LjlDMjEuMTAwMSA2LjUwMTYzIDE5Ljc1NyA3LjggMTgu''@;'; put 'put ''MTAwMSA3LjhDMTYuNDQzMiA3LjggMTUuMTAwMSA2LjUwMTYzIDE1LjEwMDEgNC45QzE1LjEwMDEgMy4yOTgzNyAxNi40NDMyIDIgMTguMTAwMSAyQzE5Ljc1NyAyIDIxLjEwMDEgMy4yOTgzNyAyMS4xMDAxIDQuOVoiLz48cGF0aCBkPSJNMTguMTAwMSAyMC45QzE5Ljc1NyAyMC45IDIxLjEw''@;'; put 'put ''MDEgMTkuNjAxNiAyMS4xMDAxIDE4QzIxLjEwMDEgMTYuMzk4NCAxOS43NTcgMTUuMSAxOC4xMDAxIDE1LjFDMTYuNDQzMiAxNS4xIDE1LjEwMDEgMTYuMzk4NCAxNS4xMDAxIDE4QzE1LjEwMDEgMTkuNjAxNiAxNi40NDMyIDIwLjkgMTguMTAwMSAyMC45WiIvPjxwYXRoIGQ9Ik0xOC4xMDAx''@;'; put 'put ''IDM0QzE5Ljc1NyAzNCAyMS4xMDAxIDMyLjcwMTYgMjEuMTAwMSAzMS4xQzIxLjEwMDEgMjkuNDk4NCAxOS43NTcgMjguMiAxOC4xMDAxIDI4LjJDMTYuNDQzMiAyOC4yIDE1LjEwMDEgMjkuNDk4NCAxNS4xMDAxIDMxLjFDMTUuMTAwMSAzMi43MDE2IDE2LjQ0MzIgMzQgMTguMTAwMSAzNFoi''@;'; put 'put ''Lz48cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nfV0sUGd0PVsidmlldy1jb2x1bW5zIix7b3V0bGluZTonPHBh''@;'; put 'put ''dGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zMSA1SDVDMy44OTU0MyA1IDMgNS44OTU0MyAzIDdWMjlDMyAzMC4xMDQ2IDMuODk1NDMgMzEgNSAzMUgzMUMzMi4xMDQ2IDMxIDMzIDMwLjEwNDYgMzMgMjlWN0MzMyA1Ljg5NTQzIDMyLjEwNDYgNSAzMSA1''@;'; put 'put ''Wk0xMyAyOUg1VjdIMTNWMjlaTTE1IDI5SDIzVjdIMTVWMjlaIi8+J31dLEhndD1bImFycm93Iix7b3V0bGluZTonPHBhdGggZD0iTTI3LjY1MDQgMTUuNjM0MUwxNy45OTUxIDZMOC4zMzk4MSAxNS42MzQxQzguMDI4NjkgMTUuODcxNyA3Ljg4NDMyIDE2LjI2OTUgNy45NzAzIDE2LjY1MjFD''@;'; put 'put ''OC4wNTYyOSAxNy4wMzQ3IDguMzU2ODUgMTcuMzMxOSA4LjczOTUyIDE3LjQxMjdDOS4xMjIxOSAxNy40OTM1IDkuNTE2NjcgMTcuMzQzIDkuNzQ5MTIgMTcuMDI3NkwxNi45OTU2IDkuODE5NTVWMjguOTk3NUMxNi45OTU2IDI5LjU1MTIgMTcuNDQzMSAzMCAxNy45OTUxIDMwQzE4LjU0NzEg''@;'; put 'put ''MzAgMTguOTk0NiAyOS41NTEyIDE4Ljk5NDYgMjguOTk3NVY5LjgxOTU1TDI2LjI0MTEgMTcuMDI3NkMyNi42MzMgMTcuNDE3OSAyNy4yNjYyIDE3LjQxNTcgMjcuNjU1NCAxNy4wMjI2QzI4LjA0NDUgMTYuNjI5NSAyOC4wNDIzIDE1Ljk5NDMgMjcuNjUwNCAxNS42MDRWMTUuNjM0MVoiLz4n''@;'; put 'put ''fV0sVmd0PVsic3RlcC1mb3J3YXJkLTIiLHtvdXRsaW5lOic8cGF0aCBkPSJNNy4wODg5MyA2LjUyMDAzQzYuOTI2NDMgNi42NzY0NSA2Ljc5NzM0IDYuODYzMTUgNi43MDkyMSA3LjA2OTIxQzYuNjIxMDggNy4yNzUyNiA2LjU3NTY4IDcuNDk2NTIgNi41NzU2OCA3LjcyMDAzQzYuNTc1Njgg''@;'; put 'put ''Ny45NDM1MyA2LjYyMTA4IDguMTY0NzkgNi43MDkyMSA4LjM3MDg1QzYuNzk3MzQgOC41NzY5IDYuOTI2NDMgOC43NjM2MSA3LjA4ODkzIDguOTIwMDNMMTYuNjg3MiAxOEw3LjEyOTY0IDI3LjA4QzYuODI5NzcgMjcuMzk5MSA2LjY2NTU0IDI3LjgxODggNi42NzA2NSAyOC4yNTNDNi42NzU3''@;'; put 'put ''NiAyOC42ODcyIDYuODQ5ODIgMjkuMTAzMSA3LjE1NzEyIDI5LjQxNTJDNy40NjQ0MiAyOS43Mjc0IDcuODgxNjYgMjkuOTEyMSA4LjMyMzIzIDI5LjkzMTZDOC43NjQ4IDI5Ljk1MTEgOS4xOTcyMSAyOS44MDM4IDkuNTMxNzYgMjkuNTJMMjEuNjY0NSAxOEw5LjUzMTc2IDYuNDcwMDNDOS4z''@;'; put 'put ''Njg1MSA2LjMxNDgyIDkuMTc1NTkgNi4xOTI5MyA4Ljk2NDEzIDYuMTExMzdDOC43NTI2NyA2LjAyOTgyIDguNTI2ODYgNS45OTAyMiA4LjI5OTc0IDUuOTk0ODdDOC4wNzI2MiA1Ljk5OTUyIDcuODQ4NjkgNi4wNDgzMiA3LjY0MDg3IDYuMTM4NDZDNy40MzMwNSA2LjIyODU5IDcuMjQ1NDYg''@;'; put 'put ''Ni4zNTgyOCA3LjA4ODkzIDYuNTIwMDNaIi8+PHBhdGggZD0iTTI2Ljg0NTMgNUMyNi4zODY0IDUgMjUuOTQ2MyA1LjE3OTExIDI1LjYyMTggNS40OTc5MkMyNS4yOTczIDUuODE2NzMgMjUuMTE1IDYuMjQ5MTMgMjUuMTE1IDYuN1YyOS4zQzI1LjExNSAyOS43NTA5IDI1LjI5NzMgMzAuMTgz''@;'; put 'put ''MyAyNS42MjE4IDMwLjUwMjFDMjUuOTQ2MyAzMC44MjA5IDI2LjM4NjQgMzEgMjYuODQ1MyAzMUMyNy4zMDQzIDMxIDI3Ljc0NDQgMzAuODIwOSAyOC4wNjg5IDMwLjUwMjFDMjguMzkzNCAzMC4xODMzIDI4LjU3NTcgMjkuNzUwOSAyOC41NzU3IDI5LjNWNi43QzI4LjU3NTcgNi4yNDkxMyAy''@;'; put 'put ''OC4zOTM0IDUuODE2NzMgMjguMDY4OSA1LjQ5NzkyQzI3Ljc0NDQgNS4xNzkxMSAyNy4zMDQzIDUgMjYuODQ1MyA1WiIvPid9XSxCZ3Q9WyJmaWx0ZXItZ3JpZC1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE4IDJD''@;'; put 'put ''OS4xNjM0NCAyIDIgOS4xNjM0NCAyIDE4QzIgMjYuODM2NiA5LjE2MzQ0IDM0IDE4IDM0QzI2LjgzNjYgMzQgMzQgMjYuODM2NiAzNCAxOEMzNCAxMy43NTY1IDMyLjMxNDMgOS42ODY4NyAyOS4zMTM3IDYuNjg2MjlDMjYuMzEzMSAzLjY4NTcxIDIyLjI0MzUgMiAxOCAyWk0xOCAzMkMxMC4y''@;'; put 'put ''NjggMzIgNCAyNS43MzIgNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAyMS43MTMgMzAuNTI1IDI1LjI3NCAyNy44OTk1IDI3Ljg5OTVDMjUuMjc0IDMwLjUyNSAyMS43MTMgMzIgMTggMzJaTTE3IDI2Ljg2TDE1IDI1Ljg2VjIwLjY4TDgu''@;'; put 'put ''NDIgMTRDOC4xNTY3OSAxMy43MzMgOC4wMDY0IDEzLjM3NDkgOCAxM1YxMkM4IDExLjQ0NzcgOC40NDc3MiAxMSA5IDExSDI3QzI3LjU1MjMgMTEgMjggMTEuNDQ3NyAyOCAxMlYxM0MyNy45OTM2IDEzLjM3NDkgMjcuODQzMiAxMy43MzMgMjcuNTggMTRMMjEgMjAuNjhWMjlMMTkgMjhMMTku''@;'; put 'put ''MDMgMjAuMjdDMTkuMDMxMSAyMC4wMDc3IDE5LjEzNTMgMTkuNzU2MyAxOS4zMiAxOS41N0wyNS43OSAxM0gxMC4yM0wxNi43MSAxOS41N0MxNi44OTQ3IDE5Ljc1NjMgMTYuOTk4OSAyMC4wMDc3IDE3IDIwLjI3VjI2Ljg2WiIvPicsc29saWQ6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIg''@;'; put 'put ''Y2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggMkM5LjE2MzQ0IDIgMiA5LjE2MzQ0IDIgMThDMiAyNi44MzY2IDkuMTYzNDQgMzQgMTggMzRDMjYuODM2NiAzNCAzNCAyNi44MzY2IDM0IDE4QzM0IDEzLjc1NjUgMzIuMzE0MyA5LjY4Njg3IDI5LjMxMzcgNi42ODYyOUMyNi4zMTMxIDMuNjg1''@;'; put 'put ''NzEgMjIuMjQzNSAyIDE4IDJaTTE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0IDE4QzQgMTAuMjY4IDEwLjI2OCA0IDE4IDRDMjUuNzMyIDQgMzIgMTAuMjY4IDMyIDE4QzMyIDIxLjcxMyAzMC41MjUgMjUuMjc0IDI3Ljg5OTUgMjcuODk5NUMyNS4yNzQgMzAuNTI1IDIxLjcxMyAzMiAxOCAz''@;'; put 'put ''MlpNOCAxMi4xMlYxMUgyNy45OFYxMi4xNEMyNy45NzgxIDEyLjI3MTkgMjcuOTI0MiAxMi4zOTc3IDI3LjgzIDEyLjQ5TDIwLjcxIDE5Ljc0QzIwLjYwODEgMTkuODI5OSAyMC41NDM4IDE5Ljk1NDggMjAuNTMgMjAuMDlWMjguNDhDMjAuNTMwMyAyOC42NTI4IDIwLjQ0MTUgMjguODEzNCAy''@;'; put 'put ''MC4yOTUgMjguOTA1QzIwLjE0ODUgMjguOTk2NiAxOS45NjUxIDI5LjAwNiAxOS44MSAyOC45M0wxNS44NiAyNy41MkMxNS42ODgzIDI3LjQzNTkgMTUuNTc5NiAyNy4yNjEyIDE1LjU4IDI3LjA3VjIwLjE4QzE1LjU3ODEgMjAuMDQ4MSAxNS41MjQyIDE5LjkyMjMgMTUuNDMgMTkuODNMOC4x''@;'; put 'put ''NSAxMi40N0M4LjA1NTc5IDEyLjM3NzcgOC4wMDE4OCAxMi4yNTE5IDggMTIuMTJaIi8+J31dLGpndD1bImZpbHRlci1ncmlkIix7b3V0bGluZTonPHBhdGggZD0iTTE1IDIzLjg2TDE3IDI0Ljg2VjE4LjI3QzE2Ljk5ODkgMTguMDA3NyAxNi44OTQ3IDE3Ljc1NjMgMTYuNzEgMTcuNTdMMTAu''@;'; put 'put ''MjMgMTFIMjUuNzlMMTkuMzIgMTcuNTdDMTkuMTM1MyAxNy43NTYzIDE5LjAzMTEgMTguMDA3NyAxOS4wMyAxOC4yN0wxOSAyNkwyMSAyN1YxOC42OEwyNy41OCAxMkMyNy44NDMyIDExLjczMyAyNy45OTM2IDExLjM3NDkgMjggMTFWMTBDMjggOS40NDc3MiAyNy41NTIzIDkgMjcgOUg5Qzgu''@;'; put 'put ''NDQ3NzIgOSA4IDkuNDQ3NzIgOCAxMFYxMUM4LjAwNjQgMTEuMzc0OSA4LjE1Njc5IDExLjczMyA4LjQyIDEyTDE1IDE4LjY4VjIzLjg2WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik04IDlWMTAuMTIxMkM4LjAwMTg4IDEwLjI1MzIgOC4wNTU4NSAxMC4zNzkxIDguMTUwMTUgMTAuNDcxNkwxNS40''@;'; put 'put ''Mzc0IDE3LjgzOTNDMTUuNTMxNyAxNy45MzE3IDE1LjU4NTcgMTguMDU3NyAxNS41ODc2IDE4LjE4OTdWMjUuMDg3QzE1LjU4NzIgMjUuMjc4NCAxNS42OTYgMjUuNDUzMiAxNS44Njc5IDI1LjUzNzVMMTkuODIxOCAyNi45NDg5QzE5Ljk3NzEgMjcuMDI1IDIwLjE2MDcgMjcuMDE1NiAyMC4z''@;'; put 'put ''MDczIDI2LjkyMzlDMjAuNDUzOSAyNi44MzIzIDIwLjU0MjkgMjYuNjcxNCAyMC41NDI1IDI2LjQ5ODVWMTguMDk5NkMyMC41NTY0IDE3Ljk2NDMgMjAuNjIwNyAxNy44MzkyIDIwLjcyMjcgMTcuNzQ5MkwyNy44NDk4IDEwLjQ5MTZDMjcuOTQ0MiAxMC4zOTkyIDI3Ljk5ODEgMTAuMjczMiAy''@;'; put 'put ''OCAxMC4xNDEyVjlIOFoiLz4nfV0sdW9lPVsiZXJyb3Itc3RhbmRhcmQiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTggMjIuNjFDMTcuNDQ3NyAyMi42MSAxNyAyMi4xNjIzIDE3IDIxLjYxVjkuNjFDMTcgOS4wNTc3MiAxNy40NDc3IDguNjEgMTggOC42MUMxOC41NTIzIDguNjEgMTkgOS4wNTc3''@;'; put 'put ''MiAxOSA5LjYxVjIxLjYxQzE5IDIyLjE2MjMgMTguNTUyMyAyMi42MSAxOCAyMi42MVoiLz48cGF0aCBkPSJNMTkuMzMgMjYuMDZDMTkuMzMgMjYuNzk0NSAxOC43MzQ1IDI3LjM5IDE4IDI3LjM5QzE3LjI2NTUgMjcuMzkgMTYuNjcgMjYuNzk0NSAxNi42NyAyNi4wNkMxNi42NyAyNS4zMjU1''@;'; put 'put ''IDE3LjI2NTUgMjQuNzMgMTggMjQuNzNDMTguNzM0NSAyNC43MyAxOS4zMyAyNS4zMjU1IDE5LjMzIDI2LjA2WiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMiAxOEMyIDI2LjgzNjYgOS4xNjM0NCAzNCAxOCAzNEMyMi4yNDM1IDM0IDI2LjMx''@;'; put 'put ''MzEgMzIuMzE0MyAyOS4zMTM3IDI5LjMxMzdDMzIuMzE0MyAyNi4zMTMxIDM0IDIyLjI0MzUgMzQgMThDMzQgOS4xNjM0NCAyNi44MzY2IDIgMTggMkM5LjE2MzQ0IDIgMiA5LjE2MzQ0IDIgMThaTTQgMThDNCAxMC4yNjggMTAuMjY4IDQgMTggNEMyNS43MzIgNCAzMiAxMC4yNjggMzIgMThD''@;'; put 'put ''MzIgMjUuNzMyIDI1LjczMiAzMiAxOCAzMkMxMC4yNjggMzIgNCAyNS43MzIgNCAxOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTggMkM5LjE2IDIgMiA5LjE2IDIgMThDMiAyNi44NCA5LjE2IDM0IDE4IDM0QzIyLjI0IDM0IDI2LjMxIDMyLjMxIDI5LjMxIDI5LjMxQzMyLjMxIDI2LjMxIDM0''@;'; put 'put ''IDIyLjI0IDM0IDE4QzM0IDkuMTYgMjYuODQgMiAxOCAyWk0xNyA5LjYxQzE3IDkuMDYgMTcuNDUgOC42MSAxOCA4LjYxQzE4LjU1IDguNjEgMTkgOS4wNiAxOSA5LjYxVjIxLjYxQzE5IDIyLjE2IDE4LjU1IDIyLjYxIDE4IDIyLjYxQzE3LjQ1IDIyLjYxIDE3IDIyLjE2IDE3IDIxLjYxVjku''@;'; put 'put ''NjFaTTE4IDI3LjI2QzE3LjM0IDI3LjI2IDE2LjggMjYuNzIgMTYuOCAyNi4wNkMxNi44IDI1LjQgMTcuMzQgMjQuODYgMTggMjQuODZDMTguNjYgMjQuODYgMTkuMiAyNS40IDE5LjIgMjYuMDZDMTkuMiAyNi43MiAxOC42NiAyNy4yNiAxOCAyNy4yNloiLz4nfV0sVWd0PVsiaGVscCIse291''@;'; put 'put ''dGxpbmU6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMiAxOEMyIDkuMTYzNDQgOS4xNjM0NCAyIDE4IDJDMjIuMjQzNSAyIDI2LjMxMzEgMy42ODU3MSAyOS4zMTM3IDYuNjg2MjlDMzIuMzE0MyA5LjY4Njg3IDM0IDEzLjc1NjUgMzQgMThDMzQg''@;'; put 'put ''MjYuODM2NiAyNi44MzY2IDM0IDE4IDM0QzkuMTYzNDQgMzQgMiAyNi44MzY2IDIgMThaTTQgMThDNCAyNS43MzIgMTAuMjY4IDMyIDE4IDMyQzIxLjcxMyAzMiAyNS4yNzQgMzAuNTI1IDI3Ljg5OTUgMjcuODk5NUMzMC41MjUgMjUuMjc0IDMyIDIxLjcxMyAzMiAxOEMzMiAxMC4yNjggMjUu''@;'; put 'put ''NzMyIDQgMTggNEMxMC4yNjggNCA0IDEwLjI2OCA0IDE4Wk0xOC4yOSA4LjkyQzE2LjA5NjEgOC44ODM3NCAxMy45OTk4IDkuODI1NiAxMi41NyAxMS40OUMxMi4zNzE4IDExLjY3MzcgMTIuMjU2MyAxMS45Mjk4IDEyLjI1IDEyLjJDMTIuMjQ5OSAxMi40NDkzIDEyLjM1MDkgMTIuNjg4IDEy''@;'; put 'put ''LjUzIDEyLjg2MTRDMTIuNzA5MSAxMy4wMzQ4IDEyLjk1MDggMTMuMTI4MSAxMy4yIDEzLjEyQzEzLjQ2NDIgMTMuMTEzNSAxMy43MTY4IDEzLjAxMDMgMTMuOTEgMTIuODNDMTQuOTkxNiAxMS41NjI1IDE2LjU3MzcgMTAuODMxNyAxOC4yNCAxMC44M0MyMC42IDEwLjgzIDIyLjA3IDEyLjM1''@;'; put 'put ''IDIyLjA3IDE0LjI0VjE0LjI5QzIyLjA3IDE2LjUgMjAuMzEgMTcuNzMgMTcuNTMgMTcuOTRDMTcuMzAyMyAxNy45NDg4IDE3LjA4OTIgMTguMDU0MiAxNi45NDQxIDE4LjIyOTlDMTYuNzk5IDE4LjQwNTYgMTYuNzM1NyAxOC42MzQ4IDE2Ljc3IDE4Ljg2VjIxLjYxQzE2LjgyMTUgMjIuMTIy''@;'; put 'put ''OSAxNy4yNTQ1IDIyLjUxMjYgMTcuNzcgMjIuNTFIMTcuODhDMTguMzkyOSAyMi40NTg1IDE4Ljc4MjYgMjIuMDI1NSAxOC43OCAyMS41MVYxOS40NUMyMS43OCAxOS4wMyAyNC4yMSAxNy40NSAyNC4yMSAxNC4xN1YxNC4xMkMyNC4xOCAxMS4xMiAyMS44NCA4LjkyIDE4LjI5IDguOTJaTTE5''@;'; put 'put ''LjAzIDI2LjJDMTkuMDMgMjYuODkwNCAxOC40NzA0IDI3LjQ1IDE3Ljc4IDI3LjQ1QzE3LjA4OTYgMjcuNDUgMTYuNTMgMjYuODkwNCAxNi41MyAyNi4yQzE2LjUzIDI1LjUwOTYgMTcuMDg5NiAyNC45NSAxNy43OCAyNC45NUMxOC40NzA0IDI0Ljk1IDE5LjAzIDI1LjUwOTYgMTkuMDMgMjYu''@;'; put 'put ''MloiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik0zMy4wMDEzIDEyLjc2ODlDMzIuMzk1OSAxMy4wNDYyIDMxLjc1NTkgMTMuMjQwNiAzMS4wOTg2IDEzLjM0NjdDMzMuMjYzNiAxOS41MTA4IDMwLjg3NjMgMjYuMzUyOCAyNS4zNDY1IDI5LjgzMkMxOS44MTY3IDMzLjMxMTIgMTIuNjE1''@;'; put 'put ''NCAzMi41MDIgNy45OTU2OSAyNy44ODIyQzMuMzc1OTcgMjMuMjYyNSAyLjU2Njc0IDE2LjA2MTMgNi4wNDU5MiAxMC41MzE1QzkuNTI1MDkgNS4wMDE2MiAxNi4zNjcxIDIuNjE0MjkgMjIuNTMxMiA0Ljc3OTM4QzIyLjYzNzUgNC4xMjIwNSAyMi44MzE4IDMuNDgyMDQgMjMuMTA5IDIuODc2''@;'; put 'put ''NjNDMTYuMDY0OSAwLjQ0MDk0NiA4LjI3MTk5IDMuMTkyMDUgNC4zMTgyMyA5LjUxMDI5QzAuMzY0NDc2IDE1LjgyODUgMS4yOTczNiAyNC4wMzk5IDYuNTY3NjcgMjkuMzEwM0MxMS44MzggMzQuNTgwNiAyMC4wNDk0IDM1LjUxMzUgMjYuMzY3NiAzMS41NTk3QzMyLjY4NTkgMjcuNjA1OSAz''@;'; put 'put ''NS40MzcgMTkuODEzMSAzMy4wMDEzIDEyLjc2ODlaIi8+PHBhdGggZD0iTTE3LjcxOTYgMjcuMzUzM0MxOC40MDczIDI3LjM1MzMgMTguOTY0OCAyNi43OTU4IDE4Ljk2NDggMjYuMTA4MUMxOC45NjQ4IDI1LjQyMDMgMTguNDA3MyAyNC44NjI4IDE3LjcxOTYgMjQuODYyOEMxNy4wMzE4IDI0''@;'; put 'put ''Ljg2MjggMTYuNDc0MyAyNS40MjAzIDE2LjQ3NDMgMjYuMTA4MUMxNi40NzQzIDI2Ljc5NTggMTcuMDMxOCAyNy4zNTMzIDE3LjcxOTYgMjcuMzUzM1oiLz48cGF0aCBkPSJNMjQuMDk1MyAxNC4wNzM5VjE0LjEyMzhDMjQuMDk1MyAxNy4zOTEzIDIxLjY3NDUgMTguOTM1NCAxOC43MjU3IDE5''@;'; put 'put ''LjM4MzdWMjEuNDM1OUMxOC43MjgzIDIxLjk0OTQgMTguMzQwMSAyMi4zODA3IDE3LjgyOTEgMjIuNDMyMUgxNy43MTk2QzE3LjIwNiAyMi40MzQ3IDE2Ljc3NDcgMjIuMDQ2NSAxNi43MjMzIDIxLjUzNTVWMTguNzk1OUMxNi42ODkxIDE4LjU3MTYgMTYuNzUyMiAxOC4zNDMyIDE2Ljg5Njgg''@;'; put 'put ''MTguMTY4MkMxNy4wNDEzIDE3Ljk5MzIgMTcuMjUzNyAxNy44ODgyIDE3LjQ4MDUgMTcuODc5NEMyMC4yNDk5IDE3LjY3MDIgMjIuMDAzMiAxNi40NDQ5IDIyLjAwMzIgMTQuMjQzM1YxNC4xOTM1QzIyLjAwMzIgMTIuMzEwNyAyMC41Mzg4IDEwLjc5NjQgMTguMTg3OCAxMC43OTY0QzE2LjUy''@;'; put 'put ''NzggMTAuNzk4MiAxNC45NTE3IDExLjUyNjEgMTMuODc0MiAxMi43ODg4QzEzLjY4MTcgMTIuOTY4NCAxMy40MzAxIDEzLjA3MTIgMTMuMTY2OSAxMy4wNzc3QzEyLjkxODcgMTMuMDg1OCAxMi42Nzc4IDEyLjk5MjkgMTIuNDk5NCAxMi44MjAxQzEyLjMyMSAxMi42NDczIDEyLjIyMDQgMTIu''@;'; put 'put ''NDA5NiAxMi4yMjA1IDEyLjE2MTJDMTIuMjI2OCAxMS44OTIxIDEyLjM0MTggMTEuNjM2OSAxMi41MzkzIDExLjQ1MzlDMTMuOTYzNyA5Ljc5NTg1IDE2LjA1MiA4Ljg1NzU3IDE4LjIzNzYgOC44OTM2OUMyMS43NjQxIDguODkzNjkgMjQuMDk1MyAxMS4wODUzIDI0LjA5NTMgMTQuMDczOVoi''@;'; put 'put ''Lz48cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nLHNvbGlkOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNs''@;'; put 'put ''aXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE4IDJDOS4xNjM0NCAyIDIgOS4xNjM0NCAyIDE4QzIgMjYuODM2NiA5LjE2MzQ0IDM0IDE4IDM0QzI2LjgzNjYgMzQgMzQgMjYuODM2NiAzNCAxOEMzNCAxMy43NTY1IDMyLjMxNDMgOS42ODY4NyAyOS4zMTM3IDYuNjg2MjlDMjYuMzEzMSAzLjY4NTcx''@;'; put 'put ''IDIyLjI0MzUgMiAxOCAyWk0xNy43OCAyNy44NUMxNy4xMTI2IDI3Ljg1IDE2LjUxMSAyNy40NDggMTYuMjU1NiAyNi44MzE0QzE2LjAwMDIgMjYuMjE0OSAxNi4xNDE0IDI1LjUwNTIgMTYuNjEzMyAyNS4wMzMzQzE3LjA4NTIgMjQuNTYxNCAxNy43OTQ5IDI0LjQyMDIgMTguNDExNCAyNC42''@;'; put 'put ''NzU2QzE5LjAyOCAyNC45MzEgMTkuNDMgMjUuNTMyNiAxOS40MyAyNi4yQzE5LjQzIDI3LjExMTMgMTguNjkxMyAyNy44NSAxNy43OCAyNy44NVpNMTkuMTUgMjEuNTFWMTkuNzlDMjIuNjEgMTkuMiAyNC41OCAxNy4xNiAyNC41OCAxNC4xMUMyNC41OCAxMC44MSAyMiA4LjUxIDE4LjMgOC41''@;'; put 'put ''MUMxNi4wMDA1IDguNDc0NTIgMTMuODAzMyA5LjQ1OTU2IDEyLjMgMTEuMkMxMi4wMzA0IDExLjQ2MzYgMTEuODc1OSAxMS44MjMgMTEuODcgMTIuMkMxMS44ODMgMTIuNzUxNiAxMi4yMjggMTMuMjQwNiAxMi43NDMyIDEzLjQzOEMxMy4yNTg1IDEzLjYzNTMgMTMuODQxOSAxMy41MDE4IDE0''@;'; put 'put ''LjIyIDEzLjFDMTUuMjA5MiAxMS45MDY5IDE2LjY3MDQgMTEuMjA1NiAxOC4yMiAxMS4xOEMyMC4yNCAxMS4xOCAyMS42NSAxMi40MiAyMS42NSAxNC4yNUMyMS42NSAxNi44IDE5LjA0IDE3LjM4IDE3LjQ3IDE3LjVDMTcuMTQ0OCAxNy41MTc1IDE2Ljg0MDkgMTcuNjY3NCAxNi42MjkzIDE3''@;'; put 'put ''LjkxNUMxNi40MTc2IDE4LjE2MjUgMTYuMzE2NyAxOC40ODYgMTYuMzUgMTguODFWMjEuNTdDMTYuMzYwNCAyMS45MjcyIDE2LjUxMzEgMjIuMjY1NSAxNi43NzQxIDIyLjUwOTZDMTcuMDM1MSAyMi43NTM3IDE3LjM4MjkgMjIuODgzNSAxNy43NCAyMi44N0gxNy44NUMxOC41NzUzIDIyLjgz''@;'; put 'put ''MjkgMTkuMTQ1NiAyMi4yMzYyIDE5LjE1IDIxLjUxWiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzMuMDAxMyAxMi43Njg5QzMwLjE2NTkgMTQuMDY4OCAyNi44MjEyIDEzLjQ2NzkgMjQuNjE1NiAxMS4yNjIzQzIy''@;'; put 'put ''LjQxMDEgOS4wNTY3NCAyMS44MDkxIDUuNzEyIDIzLjEwOSAyLjg3NjYzQzE2LjA2NDkgMC40NDA5NDYgOC4yNzE5OSAzLjE5MjA1IDQuMzE4MjMgOS41MTAyOUMwLjM2NDQ3NiAxNS44Mjg1IDEuMjk3MzYgMjQuMDM5OSA2LjU2NzY3IDI5LjMxMDNDMTEuODM4IDM0LjU4MDYgMjAuMDQ5NCAz''@;'; put 'put ''NS41MTM1IDI2LjM2NzYgMzEuNTU5N0MzMi42ODU5IDI3LjYwNTkgMzUuNDM3IDE5LjgxMzEgMzMuMDAxMyAxMi43Njg5Wk0xNy43MTk2IDI3LjcxMkMxNy4wNTQ3IDI3LjcxMiAxNi40NTU0IDI3LjMxMTUgMTYuMjAwOSAyNi42OTczQzE1Ljk0NjUgMjYuMDgzIDE2LjA4NzIgMjUuMzc2IDE2''@;'; put 'put ''LjU1NzMgMjQuOTA1OUMxNy4wMjc0IDI0LjQzNTggMTcuNzM0NCAyNC4yOTUyIDE4LjM0ODYgMjQuNTQ5NkMxOC45NjI4IDI0LjgwNCAxOS4zNjMzIDI1LjQwMzQgMTkuMzYzMyAyNi4wNjgyQzE5LjM3NCAyNi41MTEgMTkuMjA1NiAyNi45Mzk0IDE4Ljg5NjIgMjcuMjU2NEMxOC41ODY3IDI3''@;'; put 'put ''LjU3MzMgMTguMTYyNSAyNy43NTE5IDE3LjcxOTYgMjcuNzUxOFYyNy43MTJaTTE5LjA4NDQgMjEuMzk2VjE5LjcyMjRDMjIuNTMxMiAxOS4xMzQ3IDI0LjQ5MzcgMTcuMTAyNCAyNC40OTM3IDE0LjAyNDFDMjQuNDkzNyAxMC43MzY3IDIxLjkyMzUgOC40NDU0IDE4LjIzNzYgOC40NDU0QzE1''@;'; put 'put ''Ljk0NjggOC40MTAwNiAxMy43NTggOS4zOTEzNiAxMi4yNjA0IDExLjEyNTJDMTEuOTkxOCAxMS4zODc4IDExLjgzNzkgMTEuNzQ1OCAxMS44MzIgMTIuMTIxNEMxMS44NDUgMTIuNjcwOSAxMi4xODg2IDEzLjE1ODEgMTIuNzAxOSAxMy4zNTQ3QzEzLjIxNTIgMTMuNTUxMiAxMy43OTY0IDEz''@;'; put 'put ''LjQxODIgMTQuMTczMSAxMy4wMThDMTUuMTU4NiAxMS44Mjk0IDE2LjYxNDEgMTEuMTMwNyAxOC4xNTc5IDExLjEwNTNDMjAuMTcwMiAxMS4xMDUzIDIxLjU3NDkgMTIuMzQwNiAyMS41NzQ5IDE0LjE2MzZDMjEuNTc0OSAxNi43MDM5IDE4Ljk3NDggMTcuMjgxNyAxNy40MTA3IDE3LjQwMTND''@;'; put 'put ''MTcuMDg2NyAxNy40MTg2IDE2Ljc4NCAxNy41NjgxIDE2LjU3MzIgMTcuODE0N0MxNi4zNjIzIDE4LjA2MTMgMTYuMjYxOCAxOC4zODM1IDE2LjI5NSAxOC43MDYzVjIxLjQ1NThDMTYuMzA1NCAyMS44MTE3IDE2LjQ1NzUgMjIuMTQ4NyAxNi43MTc1IDIyLjM5MTlDMTYuOTc3NSAyMi42MzUx''@;'; put 'put ''IDE3LjMyMzkgMjIuNzY0MyAxNy42Nzk3IDIyLjc1MDlIMTcuNzg5M0MxOC41MTE4IDIyLjcxMzkgMTkuMDggMjIuMTE5NSAxOS4wODQ0IDIxLjM5NloiLz48cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2''@;'; put 'put ''IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nfV0semd0PVsiaW5mby1zdGFuZGFyZCIse291dGxpbmU6JzxwYXRoIGQ9Ik0yIDE4QzIgMjYuODQgOS4xNiAzNCAxOCAzNEMyMi4yNCAzNCAyNi4zMSAzMi4zMSAyOS4zMSAyOS4zMUMzMi4zMSAyNi4z''@;'; put 'put ''MSAzNCAyMi4yNCAzNCAxOEMzNCA5LjE2IDI2Ljg0IDIgMTggMkM5LjE2IDIgMiA5LjE2IDIgMThaTTQgMThDNCAxMC4yNyAxMC4yNyA0IDE4IDRDMjUuNzMgNCAzMiAxMC4yNyAzMiAxOEMzMiAyNS43MyAyNS43MyAzMiAxOCAzMkMxMC4yNyAzMiA0IDI1LjczIDQgMThaTTIxIDI1SDE5VjE0''@;'; put 'put ''SDE2QzE1LjQ1IDE0IDE1IDE0LjQ1IDE1IDE1QzE1IDE1LjU1IDE1LjQ1IDE2IDE2IDE2SDE3VjI1SDE1QzE0LjQ1IDI1IDE0IDI1LjQ1IDE0IDI2QzE0IDI2LjU1IDE0LjQ1IDI3IDE1IDI3SDIxQzIxLjU1IDI3IDIyIDI2LjU1IDIyIDI2QzIyIDI1LjQ1IDIxLjU1IDI1IDIxIDI1Wk0xOS4z''@;'; put 'put ''NyAxMC40NUMxOS4zNyAxMS4yMiAxOC43NCAxMS44NSAxNy45NyAxMS44NUMxNy4yIDExLjg1IDE2LjU3IDExLjIyIDE2LjU3IDEwLjQ1QzE2LjU3IDkuNjggMTcuMiA5LjA1IDE3Ljk3IDkuMDVDMTguNzQgOS4wNSAxOS4zNyA5LjY4IDE5LjM3IDEwLjQ1WiIvPicsc29saWQ6JzxwYXRoIGQ9''@;'; put 'put ''Ik0xOCAyQzkuMTYgMiAyIDkuMTYgMiAxOEMyIDI2Ljg0IDkuMTYgMzQgMTggMzRDMjIuMjQgMzQgMjYuMzEgMzIuMzEgMjkuMzEgMjkuMzFDMzIuMzEgMjYuMzEgMzQgMjIuMjQgMzQgMThDMzQgOS4xNiAyNi44NCAyIDE4IDJaTTE3Ljk3IDguODVDMTguODUgOC44NSAxOS41NyA5LjU3IDE5''@;'; put 'put ''LjU3IDEwLjQ1QzE5LjU3IDExLjMzIDE4Ljg1IDEyLjA1IDE3Ljk3IDEyLjA1QzE3LjA5IDEyLjA1IDE2LjM3IDExLjMzIDE2LjM3IDEwLjQ1QzE2LjM3IDkuNTcgMTcuMDkgOC44NSAxNy45NyA4Ljg1Wk0yMSAyNy4ySDE1QzE0LjM0IDI3LjIgMTMuOCAyNi42NiAxMy44IDI2QzEzLjggMjUu''@;'; put 'put ''MzQgMTQuMzQgMjQuOCAxNSAyNC44SDE2LjhWMTYuMkgxNkMxNS4zNCAxNi4yIDE0LjggMTUuNjYgMTQuOCAxNUMxNC44IDE0LjM0IDE1LjM0IDEzLjggMTYgMTMuOEgxOS4yVjI0LjhIMjFDMjEuNjYgMjQuOCAyMi4yIDI1LjM0IDIyLjIgMjZDMjIuMiAyNi42NiAyMS42NiAyNy4yIDIxIDI3''@;'; put 'put ''LjJaIi8+J31dLFdndD1bIm5vdGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjgsMzBINlY4SDE5LjIybDItMkg2QTIsMiwwLDAsMCw0LDhWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjE1bC0yLDJaIi8+PHBhdGggZD0iTTMzLjUzLDUuODQsMzAuMTYsMi40N2ExLjYxLDEuNjEs''@;'; put 'put ''MCwwLDAtMi4yOCwwTDE0LjE3LDE2LjI2bC0xLjExLDQuODFBMS42MSwxLjYxLDAsMCwwLDE0LjYzLDIzLDEuNjksMS42OSwwLDAsMCwxNSwyM2w0Ljg1LTEuMDdMMzMuNTMsOC4xMkExLjYxLDEuNjEsMCwwLDAsMzMuNTMsNS44NFpNMTguODEsMjAuMDhsLTMuNjYuODFMMTYsMTcuMjYsMjYu''@;'; put 'put ''MzIsNi44N2wyLjgyLDIuODJaTTMwLjI3LDguNTYsMjcuNDUsNS43NCwyOSw0LjE2LDMxLjg0LDdaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTMzLDYuNCwyOS4zLDIuN2ExLjcxLDEuNzEsMCwwLDAtMi4zNiwwTDIzLjY1LDZINkEyLDIsMCwwLDAsNCw4VjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwy''@;'; put 'put ''LDAsMCwwLDItMlYxMS43NmwzLTNBMS42NywxLjY3LDAsMCwwLDMzLDYuNFpNMTguODMsMjAuMTNsLTQuMTkuOTMsMS00LjE1LDkuNTUtOS41NywzLjIzLDMuMjNaTTI5LjUsOS40MywyNi4yNyw2LjJsMS44NS0xLjg1LDMuMjMsMy4yM1oiLz4nfV0sZG9lPVsic3VjY2Vzcy1zdGFuZGFyZCIs''@;'; put 'put ''e291dGxpbmU6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggMkM5LjE2MzQ0IDIgMiA5LjE2MzQ0IDIgMThDMiAyNi44MzY2IDkuMTYzNDQgMzQgMTggMzRDMjYuODM2NiAzNCAzNCAyNi44MzY2IDM0IDE4QzM0IDEzLjc1NjUgMzIuMzE0MyA5''@;'; put 'put ''LjY4Njg3IDI5LjMxMzcgNi42ODYyOUMyNi4zMTMxIDMuNjg1NzEgMjIuMjQzNSAyIDE4IDJaTTE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0IDE4QzQgMTAuMjY4IDEwLjI2OCA0IDE4IDRDMjUuNzMyIDQgMzIgMTAuMjY4IDMyIDE4QzMyIDIxLjcxMyAzMC41MjUgMjUuMjc0IDI3Ljg5OTUg''@;'; put 'put ''MjcuODk5NUMyNS4yNzQgMzAuNTI1IDIxLjcxMyAzMiAxOCAzMlpNMjYuNTkgMTIuMUMyNi45OCAxMS43MTIzIDI3LjYxIDExLjcxMjMgMjggMTIuMUMyOC4xODkzIDEyLjI4NzggMjguMjk1OCAxMi41NDM0IDI4LjI5NTggMTIuODFDMjguMjk1OCAxMy4wNzY2IDI4LjE4OTMgMTMuMzMyMiAy''@;'; put 'put ''OCAxMy41MkwxNS40OSAyNkw4IDE4LjUzQzcuNjE4OTIgMTguMTE4NSA3LjY0MzU1IDE3LjQ3NjEgOC4wNTUgMTcuMDk1QzguNDY2NDUgMTYuNzEzOSA5LjEwODkyIDE2LjczODUgOS40OSAxNy4xNUwxNS40OSAyMy4xNUwyNi41OSAxMi4xWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0yOS4zMSA2''@;'; put 'put ''LjY5QzI2LjMxIDMuNjkgMjIuMjQgMiAxOCAyQzkuMTYgMiAyIDkuMTYgMiAxOEMyIDI2Ljg0IDkuMTYgMzQgMTggMzRDMjYuODQgMzQgMzQgMjYuODQgMzQgMThDMzQgMTMuNzYgMzIuMzEgOS42OSAyOS4zMSA2LjY5Wk0yOC4xNCAxMy42NEwxNS42MyAyNi4xMkwxNS40OSAyNi4yNkwxNS4z''@;'; put 'put ''NSAyNi4xMkw3Ljg1IDE4LjY0QzcuMzkgMTguMTUgNy40MiAxNy4zOCA3LjkyIDE2LjkyQzguMTUgMTYuNzEgOC40NCAxNi42IDguNzUgMTYuNkM5LjA5IDE2LjYgOS40MSAxNi43NCA5LjY0IDE2Ljk4TDE1LjUgMjIuODRMMjYuNDYgMTEuOTNDMjYuNjkgMTEuNyAyNi45OSAxMS41OCAyNy4z''@;'; put 'put ''MSAxMS41OEMyNy42MyAxMS41OCAyNy45MyAxMS43IDI4LjE2IDExLjkzQzI4LjM5IDEyLjE1IDI4LjUxIDEyLjQ2IDI4LjUxIDEyLjc4QzI4LjUxIDEzLjEgMjguMzggMTMuNDEgMjguMTYgMTMuNjNMMjguMTQgMTMuNjRaIi8+J31dLFlndD1bIndhcm5pbmctc3RhbmRhcmQiLHtvdXRsaW5l''@;'; put 'put ''Oic8cGF0aCBkPSJNMTguMDAwMSAyMi45OTMyQzE4LjU1MDEgMjIuOTkzMiAxOS4wMDAxIDIyLjU0MzQgMTkuMDAwMSAyMS45OTM2VjEwLjk5NzVDMTkuMDAwMSAxMC40NDc3IDE4LjU1MDEgOS45OTc4NiAxOC4wMDAxIDkuOTk3ODZDMTcuNDUwMSA5Ljk5Nzg2IDE3LjAwMDEgMTAuNDQ3NyAx''@;'; put 'put ''Ny4wMDAxIDEwLjk5NzVWMjEuOTkzNkMxNy4wMDAxIDIyLjU0MzQgMTcuNDUwMSAyMi45OTMyIDE4LjAwMDEgMjIuOTkzMlpNMzMuNTYwMSAyNy4yMTE3TDIwLjc4MDEgNS41Nzk0NEMyMC4yMDAxIDQuNTg5NzkgMTkuMTYwMSA0IDE4LjAwMDEgNEMxNi44NDAxIDQgMTUuODAwMSA0LjU4OTc5''@;'; put 'put ''IDE1LjIyMDEgNS41Nzk0NEwyLjQ0MDEgMjcuMjExN0MxLjg1MDEgMjguMjExNCAxLjg1MDEgMjkuNDAwOSAyLjQzMDEgMzAuNDAwNkMzLjAxMDEgMzEuNDAwMiA0LjA2MDEgMzIgNS4yMjAxIDMySDMwLjc3MDFDMzEuOTQwMSAzMiAzMi45ODAxIDMxLjQwMDIgMzMuNTYwMSAzMC40MDA2QzM0''@;'; put 'put ''LjE0MDEgMjkuNDAwOSAzNC4xNDAxIDI4LjIxMTQgMzMuNTUwMSAyNy4yMTE3SDMzLjU2MDFaTTMxLjgxMDEgMjkuNDAwOUMzMS43MTAxIDI5LjU4MDkgMzEuNDAwMSAyOS45OTA3IDMwLjc4MDEgMjkuOTkwN0g1LjIzMDFDNC42MTAxIDI5Ljk5MDcgNC4zMDAxIDI5LjU4MDkgNC4yMDAxIDI5''@;'; put 'put ''LjQwMDlDNC4xMDAxIDI5LjIyMSAzLjg5MDEgMjguNzUxMiA0LjIwMDEgMjguMjMxM0wxNi45ODAxIDYuNTg5MDhDMTcuMjkwMSA2LjA2OTI2IDE3LjgwMDEgNi4wMDkyOCAxOC4wMDAxIDYuMDA5MjhDMTguMjAwMSA2LjAwOTI4IDE4LjcxMDEgNi4wNjkyNiAxOS4wMjAxIDYuNTg5MDhMMzEu''@;'; put 'put ''NzkwMSAyOC4yMjEzQzMyLjEwMDEgMjguNzUxMiAzMS45MDAxIDI5LjIyMSAzMS43OTAxIDI5LjM5MDlMMzEuODEwMSAyOS40MDA5Wk0xOC4wMTAxIDI1LjAwMjVDMTcuMjgwMSAyNS4wMDI1IDE2LjY4MDEgMjUuNjAyMyAxNi42ODAxIDI2LjMzMkMxNi42ODAxIDI3LjA2MTggMTcuMjgwMSAy''@;'; put 'put ''Ny42NjE1IDE4LjAxMDEgMjcuNjYxNUMxOC43NDAxIDI3LjY2MTUgMTkuMzQwMSAyNy4wNjE4IDE5LjM0MDEgMjYuMzMyQzE5LjM0MDEgMjUuNjAyMyAxOC43NDAxIDI1LjAwMjUgMTguMDEwMSAyNS4wMDI1WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMy41NjAxIDI3LjIyTDIwLjc4MDEgNS41''@;'; put 'put ''OEMyMC4yMDAxIDQuNTkgMTkuMTYwMSA0IDE4LjAwMDEgNEMxNi44NDAxIDQgMTUuODAwMSA0LjU5IDE1LjIyMDEgNS41OEwyLjQ0MDA2IDI3LjIyQzEuODUwMDYgMjguMjIgMS44NTAwNiAyOS40MSAyLjQ0MDA2IDMwLjQxQzMuMDIwMDYgMzEuNDEgNC4wNzAwNiAzMi4wMSA1LjIzMDA2IDMy''@;'; put 'put ''LjAxSDMwLjc4MDFDMzEuOTUwMSAzMi4wMSAzMi45OTAxIDMxLjQxIDMzLjU3MDEgMzAuNDFDMzQuMTUwMSAyOS40MSAzNC4xNTAxIDI4LjIyIDMzLjU2MDEgMjcuMjJaTTE2LjkwMDEgMTFDMTYuOTAwMSAxMC4zOSAxNy4zOTAxIDkuOSAxOC4wMDAxIDkuOUMxOC42MTAxIDkuOSAxOS4xMDAx''@;'; put 'put ''IDEwLjM5IDE5LjEwMDEgMTFWMjJDMTkuMTAwMSAyMi42MSAxOC42MTAxIDIzLjEgMTguMDAwMSAyMy4xQzE3LjM5MDEgMjMuMSAxNi45MDAxIDIyLjYxIDE2LjkwMDEgMjJWMTFaTTE4LjAwMDEgMjcuNzZDMTcuMjEwMSAyNy43NiAxNi41NzAxIDI3LjEyIDE2LjU3MDEgMjYuMzNDMTYuNTcw''@;'; put 'put ''MSAyNS41NCAxNy4yMTAxIDI0LjkgMTguMDAwMSAyNC45QzE4Ljc5MDEgMjQuOSAxOS40MzAxIDI1LjU0IDE5LjQzMDEgMjYuMzNDMTkuNDMwMSAyNy4xMiAxOC43OTAxIDI3Ljc2IDE4LjAwMDEgMjcuNzZaIi8+J31dLFpndD1bImNpcmNsZSIse291dGxpbmU6JzxwYXRoIGZpbGwtcnVsZT0i''@;'; put 'put ''ZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAyNS43MzIgMjUuNzMyIDMyIDE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0IDE4Wk02IDE4QzYgMjQuNjI3NCAxMS4zNzI2IDMwIDE4''@;'; put 'put ''IDMwQzIxLjE4MjYgMzAgMjQuMjM0OCAyOC43MzU3IDI2LjQ4NTMgMjYuNDg1M0MyOC43MzU3IDI0LjIzNDggMzAgMjEuMTgyNiAzMCAxOEMzMCAxMS4zNzI2IDI0LjYyNzQgNiAxOCA2QzExLjM3MjYgNiA2IDExLjM3MjYgNiAxOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTggNEMxMC4yNjgg''@;'; put 'put ''NCA0IDEwLjI2OCA0IDE4QzQgMjUuNzMyIDEwLjI2OCAzMiAxOCAzMkMyNS43MzIgMzIgMzIgMjUuNzMyIDMyIDE4QzMyIDEwLjI2OCAyNS43MzIgNCAxOCA0WiIvPid9XSxHZ3Q9WyJkb3QtY2lyY2xlIix7b3V0bGluZTonPHBhdGggZD0iTTE4IDExQzE5LjM4NDUgMTEgMjAuNzM3OSAxMS40''@;'; put 'put ''MTA1IDIxLjg4OSAxMi4xNzk3QzIzLjA0MDEgMTIuOTQ4OSAyMy45Mzc0IDE0LjA0MjEgMjQuNDY3MiAxNS4zMjEyQzI0Ljk5NyAxNi42MDAzIDI1LjEzNTYgMTguMDA3OCAyNC44NjU1IDE5LjM2NTZDMjQuNTk1NCAyMC43MjM1IDIzLjkyODcgMjEuOTcwOCAyMi45NDk4IDIyLjk0OThDMjEu''@;'; put 'put ''OTcwOCAyMy45Mjg3IDIwLjcyMzUgMjQuNTk1NCAxOS4zNjU2IDI0Ljg2NTVDMTguMDA3OCAyNS4xMzU2IDE2LjYwMDMgMjQuOTk3IDE1LjMyMTIgMjQuNDY3MkMxNC4wNDIxIDIzLjkzNzQgMTIuOTQ4OSAyMy4wNDAxIDEyLjE3OTcgMjEuODg5QzExLjQxMDUgMjAuNzM3OSAxMSAxOS4zODQ1''@;'; put 'put ''IDExIDE4QzExIDE2LjE0MzUgMTEuNzM3NSAxNC4zNjMgMTMuMDUwMyAxMy4wNTAzQzE0LjM2MyAxMS43Mzc1IDE2LjE0MzUgMTEgMTggMTFaIi8+PHBhdGggZD0iTTE4IDM0QzE0LjgzNTUgMzQgMTEuNzQyMSAzMy4wNjE2IDkuMTEwODggMzEuMzAzNUM2LjQ3OTcgMjkuNTQ1NCA0LjQyODk0''@;'; put 'put ''IDI3LjA0NjYgMy4yMTc5MyAyNC4xMjI5QzIuMDA2OTMgMjEuMTk5MyAxLjY5MDA4IDE3Ljk4MjMgMi4zMDc0NCAxNC44Nzg2QzIuOTI0ODEgMTEuNzc0OSA0LjQ0ODY2IDguOTIzOTQgNi42ODYzIDYuNjg2M0M4LjkyMzk0IDQuNDQ4NjYgMTEuNzc0OSAyLjkyNDgxIDE0Ljg3ODYgMi4zMDc0''@;'; put 'put ''NEMxNy45ODIzIDEuNjkwMDggMjEuMTk5MyAyLjAwNjkzIDI0LjEyMjkgMy4yMTc5M0MyNy4wNDY2IDQuNDI4OTQgMjkuNTQ1NCA2LjQ3OTcgMzEuMzAzNSA5LjExMDg4QzMzLjA2MTYgMTEuNzQyMSAzNCAxNC44MzU1IDM0IDE4QzM0IDIyLjI0MzUgMzIuMzE0MyAyNi4zMTMxIDI5LjMxMzcg''@;'; put 'put ''MjkuMzEzN0MyNi4zMTMxIDMyLjMxNDMgMjIuMjQzNSAzNCAxOCAzNFpNMTggNC4wMDAwMUMxNS4yMzExIDQuMDAwMDEgMTIuNTI0MyA0LjgyMTA5IDEwLjIyMiA2LjM1OTQzQzcuOTE5NzQgNy44OTc3NyA2LjEyNTMyIDEwLjA4NDMgNS4wNjU2OSAxMi42NDI0QzQuMDA2MDcgMTUuMjAwNiAz''@;'; put 'put ''LjcyODgyIDE4LjAxNTUgNC4yNjkwMSAyMC43MzEzQzQuODA5MjEgMjMuNDQ3IDYuMTQyNTggMjUuOTQxNiA4LjEwMDUxIDI3Ljg5OTVDMTAuMDU4NCAyOS44NTc0IDEyLjU1MyAzMS4xOTA4IDE1LjI2ODcgMzEuNzMxQzE3Ljk4NDUgMzIuMjcxMiAyMC43OTk0IDMxLjk5MzkgMjMuMzU3NiAz''@;'; put 'put ''MC45MzQzQzI1LjkxNTcgMjkuODc0NyAyOC4xMDIyIDI4LjA4MDMgMjkuNjQwNiAyNS43NzhDMzEuMTc4OSAyMy40NzU3IDMyIDIwLjc2ODkgMzIgMThDMzIgMTQuMjg3IDMwLjUyNSAxMC43MjYgMjcuODk5NSA4LjEwMDUxQzI1LjI3NCA1LjQ3NSAyMS43MTMgNC4wMDAwMSAxOCA0LjAwMDAx''@;'; put 'put ''WiIvPid9XTtmdW5jdGlvbiBob2UobixlPXJhKXtyZXR1cm4gbj1uPz8kZ3QsYWQoKHQscik9PntsZXQgaSxvPSEwO3Quc3Vic2NyaWJlKHZ1KHIsYT0+e2NvbnN0IGw9ZShhKTsob3x8IW4oaSxsKSkmJihvPSExLGk9bCxyLm5leHQoYSkpfSkpfSl9ZnVuY3Rpb24gJGd0KG4sZSl7cmV0dXJu''@;'; put 'put ''IG49PT1lfWNsYXNzIEtndCBleHRlbmRzIEFye2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKX1zY2hlZHVsZShlLHQ9MCl7cmV0dXJuIHRoaXN9fWNvbnN0IHh6PXtzZXRJbnRlcnZhbChuLGUsLi4udCl7Y29uc3R7ZGVsZWdhdGU6cn09eHo7cmV0dXJuIHI/LnNldEludGVydmFsP3Iuc2V0SW50''@;'; put 'put ''ZXJ2YWwobixlLC4uLnQpOnNldEludGVydmFsKG4sZSwuLi50KX0sY2xlYXJJbnRlcnZhbChuKXtjb25zdHtkZWxlZ2F0ZTplfT14ejtyZXR1cm4oZT8uY2xlYXJJbnRlcnZhbHx8Y2xlYXJJbnRlcnZhbCkobil9LGRlbGVnYXRlOnZvaWQgMH07Y2xhc3MgZm9lIGV4dGVuZHMgS2d0e2NvbnN0''@;'; put 'put ''cnVjdG9yKGUsdCl7c3VwZXIoZSx0KSx0aGlzLnNjaGVkdWxlcj1lLHRoaXMud29yaz10LHRoaXMucGVuZGluZz0hMX1zY2hlZHVsZShlLHQ9MCl7dmFyIHI7aWYodGhpcy5jbG9zZWQpcmV0dXJuIHRoaXM7dGhpcy5zdGF0ZT1lO2NvbnN0IGk9dGhpcy5pZCxvPXRoaXMuc2NoZWR1bGVyO3Jl''@;'; put 'put ''dHVybiBudWxsIT1pJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKG8saSx0KSksdGhpcy5wZW5kaW5nPSEwLHRoaXMuZGVsYXk9dCx0aGlzLmlkPW51bGwhPT0ocj10aGlzLmlkKSYmdm9pZCAwIT09cj9yOnRoaXMucmVxdWVzdEFzeW5jSWQobyx0aGlzLmlkLHQpLHRoaXN9cmVxdWVz''@;'; put 'put ''dEFzeW5jSWQoZSx0LHI9MCl7cmV0dXJuIHh6LnNldEludGVydmFsKGUuZmx1c2guYmluZChlLHRoaXMpLHIpfXJlY3ljbGVBc3luY0lkKGUsdCxyPTApe2lmKG51bGwhPXImJnRoaXMuZGVsYXk9PT1yJiYhMT09PXRoaXMucGVuZGluZylyZXR1cm4gdDtudWxsIT10JiZ4ei5jbGVhckludGVy''@;'; put 'put ''dmFsKHQpfWV4ZWN1dGUoZSx0KXtpZih0aGlzLmNsb3NlZClyZXR1cm4gbmV3IEVycm9yKCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uIik7dGhpcy5wZW5kaW5nPSExO2NvbnN0IHI9dGhpcy5fZXhlY3V0ZShlLHQpO2lmKHIpcmV0dXJuIHI7ITE9PT10aGlzLnBlbmRpbmcmJm51bGwh''@;'; put 'put ''PXRoaXMuaWQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsdGhpcy5pZCxudWxsKSl9X2V4ZWN1dGUoZSx0KXtsZXQgaSxyPSExO3RyeXt0aGlzLndvcmsoZSl9Y2F0Y2gobyl7cj0hMCxpPW98fG5ldyBFcnJvcigiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBm''@;'; put 'put ''YWxzeSBlcnJvciIpfWlmKHIpcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSxpfXVuc3Vic2NyaWJlKCl7aWYoIXRoaXMuY2xvc2VkKXtjb25zdHtpZDplLHNjaGVkdWxlcjp0fT10aGlzLHthY3Rpb25zOnJ9PXQ7dGhpcy53b3JrPXRoaXMuc3RhdGU9dGhpcy5zY2hlZHVsZXI9bnVsbCx0aGlz''@;'; put 'put ''LnBlbmRpbmc9ITEsVHQocix0aGlzKSxudWxsIT1lJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKHQsZSxudWxsKSksdGhpcy5kZWxheT1udWxsLHN1cGVyLnVuc3Vic2NyaWJlKCl9fX1jb25zdCBwb2U9e25vdzooKT0+KHBvZS5kZWxlZ2F0ZXx8RGF0ZSkubm93KCksZGVsZWdhdGU6''@;'; put 'put ''dm9pZCAwfTtjbGFzcyB1RHtjb25zdHJ1Y3RvcihlLHQ9dUQubm93KXt0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3I9ZSx0aGlzLm5vdz10fXNjaGVkdWxlKGUsdD0wLHIpe3JldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsZSkuc2NoZWR1bGUocix0KX19dUQubm93PXBv''@;'; put 'put ''ZS5ub3c7Y2xhc3MgZ29lIGV4dGVuZHMgdUR7Y29uc3RydWN0b3IoZSx0PXVELm5vdyl7c3VwZXIoZSx0KSx0aGlzLmFjdGlvbnM9W10sdGhpcy5fYWN0aXZlPSExfWZsdXNoKGUpe2NvbnN0e2FjdGlvbnM6dH09dGhpcztpZih0aGlzLl9hY3RpdmUpcmV0dXJuIHZvaWQgdC5wdXNoKGUpO2xl''@;'; put 'put ''dCByO3RoaXMuX2FjdGl2ZT0hMDtkb3tpZihyPWUuZXhlY3V0ZShlLnN0YXRlLGUuZGVsYXkpKWJyZWFrfXdoaWxlKGU9dC5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEscil7Zm9yKDtlPXQuc2hpZnQoKTspZS51bnN1YnNjcmliZSgpO3Rocm93IHJ9fX1jb25zdCBBej1uZXcgZ29lKGZv''@;'; put 'put ''ZSksWGd0PUF6O2Z1bmN0aW9uIE5iKG4sZT1Beil7cmV0dXJuIGFkKCh0LHIpPT57bGV0IGk9bnVsbCxvPW51bGwsYT1udWxsO2NvbnN0IGw9KCk9PntpZihpKXtpLnVuc3Vic2NyaWJlKCksaT1udWxsO2NvbnN0IGc9bztvPW51bGwsci5uZXh0KGcpfX07ZnVuY3Rpb24gdSgpe2NvbnN0IGc9''@;'; put 'put ''YStuLEU9ZS5ub3coKTtpZihFPGcpcmV0dXJuIGk9dGhpcy5zY2hlZHVsZSh2b2lkIDAsZy1FKSx2b2lkIHIuYWRkKGkpO2woKX10LnN1YnNjcmliZSh2dShyLGc9PntvPWcsYT1lLm5vdygpLGl8fChpPWUuc2NoZWR1bGUodSxuKSxyLmFkZChpKSl9LCgpPT57bCgpLHIuY29tcGxldGUoKX0s''@;'; put 'put ''dm9pZCAwLCgpPT57bz1pPW51bGx9KSl9KX1jb25zdCBRZ3Q9WyJhZGRMaXN0ZW5lciIsInJlbW92ZUxpc3RlbmVyIl0sSmd0PVsiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiXSxlbXQ9WyJvbiIsIm9mZiJdO2Z1bmN0aW9uIEpnKG4sZSx0LHIpe2lmKFpuKHQpJiYo''@;'; put 'put ''cj10LHQ9dm9pZCAwKSxyKXJldHVybiBKZyhuLGUsdCkucGlwZShWcmUocikpO2NvbnN0W2ksb109ZnVuY3Rpb24gcm10KG4pe3JldHVybiBabihuLmFkZEV2ZW50TGlzdGVuZXIpJiZabihuLnJlbW92ZUV2ZW50TGlzdGVuZXIpfShuKT9KZ3QubWFwKGE9Pmw9Pm5bYV0oZSxsLHQpKTpmdW5j''@;'; put 'put ''dGlvbiB0bXQobil7cmV0dXJuIFpuKG4uYWRkTGlzdGVuZXIpJiZabihuLnJlbW92ZUxpc3RlbmVyKX0obik/UWd0Lm1hcChIU2UobixlKSk6ZnVuY3Rpb24gbm10KG4pe3JldHVybiBabihuLm9uKSYmWm4obi5vZmYpfShuKT9lbXQubWFwKEhTZShuLGUpKTpbXTtpZighaSYmUHJlKG4pKXJl''@;'; put 'put ''dHVybiBHMChhPT5KZyhhLGUsdCkpKE4yKG4pKTtpZighaSl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGV2ZW50IHRhcmdldCIpO3JldHVybiBuZXcgaG8oYT0+e2NvbnN0IGw9KC4uLnUpPT5hLm5leHQoMTx1Lmxlbmd0aD91OnVbMF0pO3JldHVybiBpKGwpLCgpPT5vKGwpfSl9ZnVu''@;'; put 'put ''Y3Rpb24gSFNlKG4sZSl7cmV0dXJuIHQ9PnI9Pm5bdF0oZSxyKX1jbGFzcyBkRCBleHRlbmRzIE1ye2NvbnN0cnVjdG9yKGU9MS8wLHQ9MS8wLHI9cG9lKXtzdXBlcigpLHRoaXMuX2J1ZmZlclNpemU9ZSx0aGlzLl93aW5kb3dUaW1lPXQsdGhpcy5fdGltZXN0YW1wUHJvdmlkZXI9cix0aGlz''@;'; put 'put ''Ll9idWZmZXI9W10sdGhpcy5faW5maW5pdGVUaW1lV2luZG93PSEwLHRoaXMuX2luZmluaXRlVGltZVdpbmRvdz10PT09MS8wLHRoaXMuX2J1ZmZlclNpemU9TWF0aC5tYXgoMSxlKSx0aGlzLl93aW5kb3dUaW1lPU1hdGgubWF4KDEsdCl9bmV4dChlKXtjb25zdHtpc1N0b3BwZWQ6dCxfYnVm''@;'; put 'put ''ZmVyOnIsX2luZmluaXRlVGltZVdpbmRvdzppLF90aW1lc3RhbXBQcm92aWRlcjpvLF93aW5kb3dUaW1lOmF9PXRoaXM7dHx8KHIucHVzaChlKSwhaSYmci5wdXNoKG8ubm93KCkrYSkpLHRoaXMuX3RyaW1CdWZmZXIoKSxzdXBlci5uZXh0KGUpfV9zdWJzY3JpYmUoZSl7dGhpcy5fdGhyb3dJ''@;'; put 'put ''ZkNsb3NlZCgpLHRoaXMuX3RyaW1CdWZmZXIoKTtjb25zdCB0PXRoaXMuX2lubmVyU3Vic2NyaWJlKGUpLHtfaW5maW5pdGVUaW1lV2luZG93OnIsX2J1ZmZlcjppfT10aGlzLG89aS5zbGljZSgpO2ZvcihsZXQgYT0wO2E8by5sZW5ndGgmJiFlLmNsb3NlZDthKz1yPzE6MillLm5leHQob1th''@;'; put 'put ''XSk7cmV0dXJuIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoZSksdH1fdHJpbUJ1ZmZlcigpe2NvbnN0e19idWZmZXJTaXplOmUsX3RpbWVzdGFtcFByb3ZpZGVyOnQsX2J1ZmZlcjpyLF9pbmZpbml0ZVRpbWVXaW5kb3c6aX09dGhpcyxvPShpPzE6MikqZTtpZihlPDEvMCYmbzxyLmxl''@;'; put 'put ''bmd0aCYmci5zcGxpY2UoMCxyLmxlbmd0aC1vKSwhaSl7Y29uc3QgYT10Lm5vdygpO2xldCBsPTA7Zm9yKGxldCB1PTE7dTxyLmxlbmd0aCYmclt1XTw9YTt1Kz0yKWw9dTtsJiZyLnNwbGljZSgwLGwrMSl9fX1mdW5jdGlvbiBtb2UobixlLC4uLnQpe2lmKCEwPT09ZSlyZXR1cm4gdm9pZCBu''@;'; put 'put ''KCk7aWYoITE9PT1lKXJldHVybjtjb25zdCByPW5ldyB2bih7bmV4dDooKT0+e3IudW5zdWJzY3JpYmUoKSxuKCl9fSk7cmV0dXJuIE4yKGUoLi4udCkpLnN1YnNjcmliZShyKX1mdW5jdGlvbiBWU2UobixlLHQpe2xldCByLGk9ITE7cmV0dXJuIG4mJiJvYmplY3QiPT10eXBlb2Ygbj8oe2J1''@;'; put 'put ''ZmZlclNpemU6cj0xLzAsd2luZG93VGltZTplPTEvMCxyZWZDb3VudDppPSExLHNjaGVkdWxlcjp0fT1uKTpyPW4/PzEvMCxmdW5jdGlvbiBpbXQobj17fSl7Y29uc3R7Y29ubmVjdG9yOmU9KCk9Pm5ldyBNcixyZXNldE9uRXJyb3I6dD0hMCxyZXNldE9uQ29tcGxldGU6cj0hMCxyZXNldE9u''@;'; put 'put ''UmVmQ291bnRaZXJvOmk9ITB9PW47cmV0dXJuIG89PntsZXQgYSxsLHUsZz0wLEU9ITEsTz0hMTtjb25zdCBaPSgpPT57bD8udW5zdWJzY3JpYmUoKSxsPXZvaWQgMH0sZWU9KCk9PntaKCksYT11PXZvaWQgMCxFPU89ITF9LHZlPSgpPT57Y29uc3QgTWU9YTtlZSgpLE1lPy51bnN1YnNjcmli''@;'; put 'put ''ZSgpfTtyZXR1cm4gYWQoKE1lLEhlKT0+e2crKywhTyYmIUUmJlooKTtjb25zdCBXZT11PXU/P2UoKTtIZS5hZGQoKCk9PntnLS0sMD09PWcmJiFPJiYhRSYmKGw9bW9lKHZlLGkpKX0pLFdlLnN1YnNjcmliZShIZSksIWEmJmc+MCYmKGE9bmV3IHZuKHtuZXh0OmF0PT5XZS5uZXh0KGF0KSxl''@;'; put 'put ''cnJvcjphdD0+e089ITAsWigpLGw9bW9lKGVlLHQsYXQpLFdlLmVycm9yKGF0KX0sY29tcGxldGU6KCk9PntFPSEwLFooKSxsPW1vZShlZSxyKSxXZS5jb21wbGV0ZSgpfX0pLE4yKE1lKS5zdWJzY3JpYmUoYSkpfSkobyl9fSh7Y29ubmVjdG9yOigpPT5uZXcgZEQocixlLHQpLHJlc2V0T25F''@;'; put 'put ''cnJvcjohMCxyZXNldE9uQ29tcGxldGU6ITEscmVzZXRPblJlZkNvdW50WmVybzppfSl9ZnVuY3Rpb24gaEQoLi4ubil7Y29uc3QgZT1BSShuKSx0PWZ1bmN0aW9uIHBjdChuLGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgSHJlKG4pP24ucG9wKCk6ZX0obiwxLzApLHI9bjtyZXR1cm4gci5s''@;'; put 'put ''ZW5ndGg/MT09PXIubGVuZ3RoP04yKHJbMF0pOk9FKHQpKFoxKHIsZSkpOkVwfXZhciBicz1mdW5jdGlvbihuKXtyZXR1cm4gbltuLlN0YXRlPTBdPSJTdGF0ZSIsbltuLlRyYW5zaXRpb249MV09IlRyYW5zaXRpb24iLG5bbi5TZXF1ZW5jZT0yXT0iU2VxdWVuY2UiLG5bbi5Hcm91cD0zXT0i''@;'; put 'put ''R3JvdXAiLG5bbi5BbmltYXRlPTRdPSJBbmltYXRlIixuW24uS2V5ZnJhbWVzPTVdPSJLZXlmcmFtZXMiLG5bbi5TdHlsZT02XT0iU3R5bGUiLG5bbi5UcmlnZ2VyPTddPSJUcmlnZ2VyIixuW24uUmVmZXJlbmNlPThdPSJSZWZlcmVuY2UiLG5bbi5BbmltYXRlQ2hpbGQ9OV09IkFuaW1hdGVD''@;'; put 'put ''aGlsZCIsbltuLkFuaW1hdGVSZWY9MTBdPSJBbmltYXRlUmVmIixuW24uUXVlcnk9MTFdPSJRdWVyeSIsbltuLlN0YWdnZXI9MTJdPSJTdGFnZ2VyIixufShic3x8e30pO2NvbnN0IHQ3PSIqIjtmdW5jdGlvbiBScChuLGUpe3JldHVybnt0eXBlOmJzLlRyaWdnZXIsbmFtZTpuLGRlZmluaXRp''@;'; put 'put ''b25zOmUsb3B0aW9uczp7fX19ZnVuY3Rpb24geTAobixlPW51bGwpe3JldHVybnt0eXBlOmJzLkFuaW1hdGUsc3R5bGVzOmUsdGltaW5nczpufX1mdW5jdGlvbiB2bChuKXtyZXR1cm57dHlwZTpicy5TdHlsZSxzdHlsZXM6bixvZmZzZXQ6bnVsbH19ZnVuY3Rpb24ga3oobixlLHQpe3JldHVy''@;'; put 'put ''bnt0eXBlOmJzLlN0YXRlLG5hbWU6bixzdHlsZXM6ZSxvcHRpb25zOnR9fWZ1bmN0aW9uIGFtdChuKXtyZXR1cm57dHlwZTpicy5LZXlmcmFtZXMsc3RlcHM6bn19ZnVuY3Rpb24gcGgobixlLHQ9bnVsbCl7cmV0dXJue3R5cGU6YnMuVHJhbnNpdGlvbixleHByOm4sYW5pbWF0aW9uOmUsb3B0''@;'; put 'put ''aW9uczp0fX1jbGFzcyBmRHtfb25Eb25lRm5zPVtdO19vblN0YXJ0Rm5zPVtdO19vbkRlc3Ryb3lGbnM9W107X29yaWdpbmFsT25Eb25lRm5zPVtdO19vcmlnaW5hbE9uU3RhcnRGbnM9W107X3N0YXJ0ZWQ9ITE7X2Rlc3Ryb3llZD0hMTtfZmluaXNoZWQ9ITE7X3Bvc2l0aW9uPTA7cGFyZW50''@;'; put 'put ''UGxheWVyPW51bGw7dG90YWxUaW1lO2NvbnN0cnVjdG9yKGU9MCx0PTApe3RoaXMudG90YWxUaW1lPWUrdH1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGU9PmUoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1vblN0''@;'; put 'put ''YXJ0KGUpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKGUpLHRoaXMuX29uU3RhcnRGbnMucHVzaChlKX1vbkRvbmUoZSl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaChlKSx0aGlzLl9vbkRvbmVGbnMucHVzaChlKX1vbkRlc3Ryb3koZSl7dGhpcy5fb25EZXN0cm95Rm5zLnB1''@;'; put 'put ''c2goZSl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWluaXQoKXt9cGxheSgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydCgpLHRoaXMudHJpZ2dlck1pY3JvdGFzaygpKSx0aGlzLl9zdGFydGVkPSEwfXRyaWdnZXJNaWNyb3Rhc2soKXtxdWV1ZU1pY3JvdGFz''@;'; put 'put ''aygoKT0+dGhpcy5fb25GaW5pc2goKSl9X29uU3RhcnQoKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goZT0+ZSgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdfXBhdXNlKCl7fXJlc3RhcnQoKXt9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKX1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhp''@;'; put 'put ''cy5fZGVzdHJveWVkPSEwLHRoaXMuaGFzU3RhcnRlZCgpfHx0aGlzLl9vblN0YXJ0KCksdGhpcy5maW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChlPT5lKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLl9zdGFydGVkPSExLHRoaXMuX2ZpbmlzaGVkPSEx''@;'; put 'put ''LHRoaXMuX29uU3RhcnRGbnM9dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLHRoaXMuX29uRG9uZUZucz10aGlzLl9vcmlnaW5hbE9uRG9uZUZuc31zZXRQb3NpdGlvbihlKXt0aGlzLl9wb3NpdGlvbj10aGlzLnRvdGFsVGltZT9lKnRoaXMudG90YWxUaW1lOjF9Z2V0UG9zaXRpb24oKXtyZXR1''@;'; put 'put ''cm4gdGhpcy50b3RhbFRpbWU/dGhpcy5fcG9zaXRpb24vdGhpcy50b3RhbFRpbWU6MX10cmlnZ2VyQ2FsbGJhY2soZSl7Y29uc3QgdD0ic3RhcnQiPT1lP3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO3QuZm9yRWFjaChyPT5yKCkpLHQubGVuZ3RoPTB9fWNsYXNzIEJTZXtfb25E''@;'; put 'put ''b25lRm5zPVtdO19vblN0YXJ0Rm5zPVtdO19maW5pc2hlZD0hMTtfc3RhcnRlZD0hMTtfZGVzdHJveWVkPSExO19vbkRlc3Ryb3lGbnM9W107cGFyZW50UGxheWVyPW51bGw7dG90YWxUaW1lPTA7cGxheWVycztjb25zdHJ1Y3RvcihlKXt0aGlzLnBsYXllcnM9ZTtsZXQgdD0wLHI9MCxpPTA7''@;'; put 'put ''Y29uc3Qgbz10aGlzLnBsYXllcnMubGVuZ3RoOzA9PW8/cXVldWVNaWNyb3Rhc2soKCk9PnRoaXMuX29uRmluaXNoKCkpOnRoaXMucGxheWVycy5mb3JFYWNoKGE9PnthLm9uRG9uZSgoKT0+eysrdD09byYmdGhpcy5fb25GaW5pc2goKX0pLGEub25EZXN0cm95KCgpPT57KytyPT1vJiZ0aGlz''@;'; put 'put ''Ll9vbkRlc3Ryb3koKX0pLGEub25TdGFydCgoKT0+eysraT09byYmdGhpcy5fb25TdGFydCgpfSl9KSx0aGlzLnRvdGFsVGltZT10aGlzLnBsYXllcnMucmVkdWNlKChhLGwpPT5NYXRoLm1heChhLGwudG90YWxUaW1lKSwwKX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2Zp''@;'; put 'put ''bmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGU9PmUoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1pbml0KCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZT0+ZS5pbml0KCkpfW9uU3RhcnQoZSl7dGhpcy5fb25TdGFydEZucy5wdXNoKGUpfV9vblN0YXJ0KCl7dGhpcy5oYXNTdGFydGVk''@;'; put 'put ''KCl8fCh0aGlzLl9zdGFydGVkPSEwLHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChlPT5lKCkpLHRoaXMuX29uU3RhcnRGbnM9W10pfW9uRG9uZShlKXt0aGlzLl9vbkRvbmVGbnMucHVzaChlKX1vbkRlc3Ryb3koZSl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2goZSl9aGFzU3RhcnRlZCgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9zdGFydGVkfXBsYXkoKXt0aGlzLnBhcmVudFBsYXllcnx8dGhpcy5pbml0KCksdGhpcy5fb25TdGFydCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGU9PmUucGxheSgpKX1wYXVzZSgpe3RoaXMucGxheWVycy5mb3JFYWNoKGU9PmUucGF1c2UoKSl9cmVzdGFydCgpe3RoaXMu''@;'; put 'put ''cGxheWVycy5mb3JFYWNoKGU9PmUucmVzdGFydCgpKX1maW5pc2goKXt0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGU9PmUuZmluaXNoKCkpfWRlc3Ryb3koKXt0aGlzLl9vbkRlc3Ryb3koKX1fb25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJv''@;'; put 'put ''eWVkPSEwLHRoaXMuX29uRmluaXNoKCksdGhpcy5wbGF5ZXJzLmZvckVhY2goZT0+ZS5kZXN0cm95KCkpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGU9PmUoKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1yZXNldCgpe3RoaXMucGxheWVycy5mb3JFYWNoKGU9PmUucmVzZXQoKSksdGhp''@;'; put 'put ''cy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITF9c2V0UG9zaXRpb24oZSl7Y29uc3QgdD1lKnRoaXMudG90YWxUaW1lO3RoaXMucGxheWVycy5mb3JFYWNoKHI9Pntjb25zdCBpPXIudG90YWxUaW1lP01hdGgubWluKDEsdC9yLnRvdGFsVGltZSk6MTty''@;'; put 'put ''LnNldFBvc2l0aW9uKGkpfSl9Z2V0UG9zaXRpb24oKXtjb25zdCBlPXRoaXMucGxheWVycy5yZWR1Y2UoKHQscik9Pm51bGw9PT10fHxyLnRvdGFsVGltZT50LnRvdGFsVGltZT9yOnQsbnVsbCk7cmV0dXJuIG51bGwhPWU/ZS5nZXRQb3NpdGlvbigpOjB9YmVmb3JlRGVzdHJveSgpe3RoaXMu''@;'; put 'put ''cGxheWVycy5mb3JFYWNoKGU9PntlLmJlZm9yZURlc3Ryb3kmJmUuYmVmb3JlRGVzdHJveSgpfSl9dHJpZ2dlckNhbGxiYWNrKGUpe2NvbnN0IHQ9InN0YXJ0Ij09ZT90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZuczt0LmZvckVhY2gocj0+cigpKSx0Lmxlbmd0aD0wfX1sZXQgX29l''@;'; put 'put ''O3RyeXtfb2U9dHlwZW9mIEludGw8InUiJiZJbnRsLnY4QnJlYWtJdGVyYXRvcn1jYXRjaHtfb2U9ITF9bGV0IHlvZSxwRD0oKCk9PntjbGFzcyBue19wbGF0Zm9ybUlkPXNuKGxkKTtpc0Jyb3dzZXI9dGhpcy5fcGxhdGZvcm1JZD9IYyh0aGlzLl9wbGF0Zm9ybUlkKToib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIGRvY3VtZW50JiYhIWRvY3VtZW50O0VER0U9dGhpcy5pc0Jyb3dzZXImJi8oZWRnZSkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1RSSURFTlQ9dGhpcy5pc0Jyb3dzZXImJi8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7QkxJTks9dGhpcy5pc0Jy''@;'; put 'put ''b3dzZXImJiEoIXdpbmRvdy5jaHJvbWUmJiFfb2UpJiZ0eXBlb2YgQ1NTPCJ1IiYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVDtXRUJLSVQ9dGhpcy5pc0Jyb3dzZXImJi9BcHBsZVdlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLkJMSU5LJiYhdGhpcy5FREdFJiYh''@;'; put 'put ''dGhpcy5UUklERU5UO0lPUz10aGlzLmlzQnJvd3NlciYmL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiEoIk1TU3RyZWFtImluIHdpbmRvdyk7RklSRUZPWD10aGlzLmlzQnJvd3NlciYmLyhmaXJlZm94fG1pbmVmaWVsZCkvaS50ZXN0KG5hdmlnYXRvci51''@;'; put 'put ''c2VyQWdlbnQpO0FORFJPSUQ9dGhpcy5pc0Jyb3dzZXImJi9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuVFJJREVOVDtTQUZBUkk9dGhpcy5pc0Jyb3dzZXImJi9zYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiZ0aGlzLldFQktJVDtjb25zdHJ1''@;'; put 'put ''Y3Rvcigpe31zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gYm9lKG4pe2lmKGZ1bmN0aW9u''@;'; put 'put ''IHNtdCgpe2lmKG51bGw9PXlvZSl7Y29uc3Qgbj10eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50LmhlYWQ6bnVsbDt5b2U9ISghbnx8IW4uY3JlYXRlU2hhZG93Um9vdCYmIW4uYXR0YWNoU2hhZG93KX1yZXR1cm4geW9lfSgpKXtjb25zdCBlPW4uZ2V0Um9vdE5vZGU/bi5nZXRSb290Tm9k''@;'; put 'put ''ZSgpOm51bGw7aWYodHlwZW9mIFNoYWRvd1Jvb3Q8InUiJiZTaGFkb3dSb290JiZlIGluc3RhbmNlb2YgU2hhZG93Um9vdClyZXR1cm4gZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBSeihuKXtyZXR1cm4gbi5jb21wb3NlZFBhdGg/bi5jb21wb3NlZFBhdGgoKVswXTpuLnRhcmdldH1jb25zdCBJ''@;'; put 'put ''ej1uZXcgV2Vha01hcDtsZXQgalNlPSgoKT0+e2NsYXNzIG57X2FwcFJlZjtfaW5qZWN0b3I9c24oTWwpO19lbnZpcm9ubWVudEluamVjdG9yPXNuKG5sKTtsb2FkKHQpe2NvbnN0IHI9dGhpcy5fYXBwUmVmPXRoaXMuX2FwcFJlZnx8dGhpcy5faW5qZWN0b3IuZ2V0KFdnKTtsZXQgaT1Jei5n''@;'; put 'put ''ZXQocik7aXx8KGk9e2xvYWRlcnM6bmV3IFNldCxyZWZzOltdfSxJei5zZXQocixpKSxyLm9uRGVzdHJveSgoKT0+e0l6LmdldChyKT8ucmVmcy5mb3JFYWNoKG89Pm8uZGVzdHJveSgpKSxJei5kZWxldGUocil9KSksaS5sb2FkZXJzLmhhcyh0KXx8KGkubG9hZGVycy5hZGQodCksaS5yZWZz''@;'; put 'put ''LnB1c2goZkkodCx7ZW52aXJvbm1lbnRJbmplY3Rvcjp0aGlzLl9lbnZpcm9ubWVudEluamVjdG9yfSkpKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlk''@;'; put 'put ''ZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0pKCksY210PSgoKT0+e2NsYXNzIG57c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1Y21wPVByKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSxleHBvcnRBczpbImNka1Zp''@;'; put 'put ''c3VhbGx5SGlkZGVuIl0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXt9LHN0eWxlczpbIi5jZGstdmlzdWFsbHktaGlkZGVue2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9z''@;'; put 'put ''aXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7bGVmdDowfVtkaXI9cnRsXSAuY2RrLXZpc3VhbGx5LWhpZGRlbntsZWZ0OmF1dG87cmlnaHQ6MH1cbiJdLGVuY2Fw''@;'; put 'put ''c3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pfXJldHVybiBufSkoKSx1bXQ9KCgpPT57Y2xhc3MgbntfcGxhdGZvcm09c24ocEQpO2NvbnN0cnVjdG9yKCl7fWlzRGlzYWJsZWQodCl7cmV0dXJuIHQuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfWlzVmlzaWJsZSh0KXtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24gaG10KG4pe3JldHVybiEhKG4ub2Zmc2V0V2lkdGh8fG4ub2Zmc2V0SGVpZ2h0fHwiZnVuY3Rpb24iPT10eXBlb2Ygbi5nZXRDbGllbnRSZWN0cyYmbi5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9KHQpJiYidmlzaWJsZSI9PT1nZXRDb21wdXRlZFN0eWxlKHQpLnZpc2liaWxpdHl9''@;'; put 'put ''aXNUYWJiYWJsZSh0KXtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybiExO2NvbnN0IHI9ZnVuY3Rpb24gZG10KG4pe3RyeXtyZXR1cm4gbi5mcmFtZUVsZW1lbnR9Y2F0Y2h7cmV0dXJuIG51bGx9fShmdW5jdGlvbiBibXQobil7cmV0dXJuIG4ub3duZXJEb2N1bWVudCYmbi5v''@;'; put 'put ''d25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9KHQpKTtpZihyJiYoLTE9PT16U2Uocil8fCF0aGlzLmlzVmlzaWJsZShyKSkpcmV0dXJuITE7bGV0IGk9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLG89elNlKHQpO3JldHVybiB0Lmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxl''@;'; put 'put ''Iik/LTEhPT1vOiEoImlmcmFtZSI9PT1pfHwib2JqZWN0Ij09PWl8fHRoaXMuX3BsYXRmb3JtLldFQktJVCYmdGhpcy5fcGxhdGZvcm0uSU9TJiYhZnVuY3Rpb24gX210KG4pe2xldCBlPW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSx0PSJpbnB1dCI9PT1lJiZuLnR5cGU7cmV0dXJuInRleHQi''@;'; put 'put ''PT09dHx8InBhc3N3b3JkIj09PXR8fCJzZWxlY3QiPT09ZXx8InRleHRhcmVhIj09PWV9KHQpKSYmKCJhdWRpbyI9PT1pPyEhdC5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikmJi0xIT09bzoidmlkZW8iPT09aT8tMSE9PW8mJihudWxsIT09b3x8dGhpcy5fcGxhdGZvcm0uRklSRUZPWHx8dC5o''@;'; put 'put ''YXNBdHRyaWJ1dGUoImNvbnRyb2xzIikpOnQudGFiSW5kZXg+PTApfWlzRm9jdXNhYmxlKHQscil7cmV0dXJuIGZ1bmN0aW9uIHltdChuKXtyZXR1cm4hZnVuY3Rpb24gcG10KG4pe3JldHVybiBmdW5jdGlvbiBtbXQobil7cmV0dXJuImlucHV0Ij09bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''fShuKSYmImhpZGRlbiI9PW4udHlwZX0obikmJihmdW5jdGlvbiBmbXQobil7bGV0IGU9bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1lfHwic2VsZWN0Ij09PWV8fCJidXR0b24iPT09ZXx8InRleHRhcmVhIj09PWV9KG4pfHxmdW5jdGlvbiBnbXQobil7cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uIHZtdChuKXtyZXR1cm4iYSI9PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0obikmJm4uaGFzQXR0cmlidXRlKCJocmVmIil9KG4pfHxuLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fFVTZShuKSl9KHQpJiYhdGhpcy5pc0Rpc2FibGVkKHQpJiYocj8uaWdub3Jl''@;'; put 'put ''VmlzaWJpbGl0eXx8dGhpcy5pc1Zpc2libGUodCkpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKTtmdW5j''@;'; put 'put ''dGlvbiBVU2Uobil7aWYoIW4uaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHx2b2lkIDA9PT1uLnRhYkluZGV4KXJldHVybiExO2xldCBlPW4uZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpO3JldHVybiEoIWV8fGlzTmFOKHBhcnNlSW50KGUsMTApKSl9ZnVuY3Rpb24gelNlKG4pe2lmKCFVU2Uo''@;'; put 'put ''bikpcmV0dXJuIG51bGw7Y29uc3QgZT1wYXJzZUludChuLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKXx8IiIsMTApO3JldHVybiBpc05hTihlKT8tMTplfWNsYXNzIHdtdHtfZWxlbWVudDtfY2hlY2tlcjtfbmdab25lO19kb2N1bWVudDtfaW5qZWN0b3I7X3N0YXJ0QW5jaG9yO19lbmRBbmNo''@;'; put 'put ''b3I7X2hhc0F0dGFjaGVkPSExO3N0YXJ0QW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KCk7ZW5kQW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpO2dldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9''@;'; put 'put ''c2V0IGVuYWJsZWQoZSl7dGhpcy5fZW5hYmxlZD1lLHRoaXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9lbmRBbmNob3ImJih0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleChlLHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleChlLHRoaXMuX2VuZEFuY2hvcikpfV9l''@;'; put 'put ''bmFibGVkPSEwO2NvbnN0cnVjdG9yKGUsdCxyLGksbz0hMSxhKXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fY2hlY2tlcj10LHRoaXMuX25nWm9uZT1yLHRoaXMuX2RvY3VtZW50PWksdGhpcy5faW5qZWN0b3I9YSxvfHx0aGlzLmF0dGFjaEFuY2hvcnMoKX1kZXN0cm95KCl7Y29uc3QgZT10aGlz''@;'; put 'put ''Ll9zdGFydEFuY2hvcix0PXRoaXMuX2VuZEFuY2hvcjtlJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyKSxlLnJlbW92ZSgpKSx0JiYodC5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5lbmRBbmNob3JMaXN0ZW5lciksdC5y''@;'; put 'put ''ZW1vdmUoKSksdGhpcy5fc3RhcnRBbmNob3I9dGhpcy5fZW5kQW5jaG9yPW51bGwsdGhpcy5faGFzQXR0YWNoZWQ9ITF9YXR0YWNoQW5jaG9ycygpe3JldHVybiEhdGhpcy5faGFzQXR0YWNoZWR8fCh0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9zdGFydEFuY2hv''@;'; put 'put ''cnx8KHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2NyZWF0ZUFuY2hvcigpLHRoaXMuX3N0YXJ0QW5jaG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXIpKSx0aGlzLl9lbmRBbmNob3J8fCh0aGlzLl9lbmRBbmNob3I9dGhpcy5fY3JlYXRlQW5jaG9y''@;'; put 'put ''KCksdGhpcy5fZW5kQW5jaG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLmVuZEFuY2hvckxpc3RlbmVyKSl9KSx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUmJih0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuX3N0YXJ0QW5jaG9yLHRoaXMuX2VsZW1l''@;'; put 'put ''bnQpLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fZW5kQW5jaG9yLHRoaXMuX2VsZW1lbnQubmV4dFNpYmxpbmcpLHRoaXMuX2hhc0F0dGFjaGVkPSEwKSx0aGlzLl9oYXNBdHRhY2hlZCl9Zm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeShlKXtyZXR1cm4g''@;'; put 'put ''bmV3IFByb21pc2UodD0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+dCh0aGlzLmZvY3VzSW5pdGlhbEVsZW1lbnQoZSkpKX0pfWZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnRXaGVuUmVhZHkoZSl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9Pnt0aGlzLl9leGVjdXRlT25TdGFibGUoKCk9PnQo''@;'; put 'put ''dGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KGUpKSl9KX1mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnRXaGVuUmVhZHkoZSl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9Pnt0aGlzLl9leGVjdXRlT25TdGFibGUoKCk9PnQodGhpcy5mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQoZSkpKX0pfV9n''@;'; put 'put ''ZXRSZWdpb25Cb3VuZGFyeShlKXtjb25zdCB0PXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2Nkay1mb2N1cy1yZWdpb24tJHtlfV0sIFtjZGtGb2N1c1JlZ2lvbiR7ZX1dLCBbY2RrLWZvY3VzLSR7ZX1dYCk7cmV0dXJuInN0YXJ0Ij09ZT90Lmxlbmd0aD90WzBdOnRoaXMuX2dl''@;'; put 'put ''dEZpcnN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpOnQubGVuZ3RoP3RbdC5sZW5ndGgtMV06dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KX1mb2N1c0luaXRpYWxFbGVtZW50KGUpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKCJb''@;'; put 'put ''Y2RrLWZvY3VzLWluaXRpYWxdLCBbY2RrRm9jdXNJbml0aWFsXSIpO2lmKHQpe2lmKCF0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKHQpKXtjb25zdCByPXRoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHQpO3JldHVybiByPy5mb2N1cyhlKSwhIXJ9cmV0dXJuIHQuZm9jdXMoZSksITB9''@;'; put 'put ''cmV0dXJuIHRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudChlKX1mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KGUpe2NvbnN0IHQ9dGhpcy5fZ2V0UmVnaW9uQm91bmRhcnkoInN0YXJ0Iik7cmV0dXJuIHQmJnQuZm9jdXMoZSksISF0fWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudChlKXtj''@;'; put 'put ''b25zdCB0PXRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJlbmQiKTtyZXR1cm4gdCYmdC5mb2N1cyhlKSwhIXR9aGFzQXR0YWNoZWQoKXtyZXR1cm4gdGhpcy5faGFzQXR0YWNoZWR9X2dldEZpcnN0VGFiYmFibGVFbGVtZW50KGUpe2lmKHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUoZSkmJnRo''@;'; put 'put ''aXMuX2NoZWNrZXIuaXNUYWJiYWJsZShlKSlyZXR1cm4gZTtjb25zdCB0PWUuY2hpbGRyZW47Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2NvbnN0IGk9dFtyXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudCh0''@;'; put 'put ''W3JdKTpudWxsO2lmKGkpcmV0dXJuIGl9cmV0dXJuIG51bGx9X2dldExhc3RUYWJiYWJsZUVsZW1lbnQoZSl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZShlKSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKGUpKXJldHVybiBlO2NvbnN0IHQ9ZS5jaGlsZHJlbjtmb3IobGV0IHI9dC5s''@;'; put 'put ''ZW5ndGgtMTtyPj0wO3ItLSl7Y29uc3QgaT10W3JdLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFP3RoaXMuX2dldExhc3RUYWJiYWJsZUVsZW1lbnQodFtyXSk6bnVsbDtpZihpKXJldHVybiBpfXJldHVybiBudWxsfV9jcmVhdGVBbmNob3IoKXtjb25zdCBlPXRoaXMu''@;'; put 'put ''X2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0aGlzLl9lbmFibGVkLGUpLGUuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLGUuY2xhc3NMaXN0LmFkZCgiY2RrLWZvY3VzLXRyYXAtYW5jaG9yIiksZS5z''@;'; put 'put ''ZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLGV9X3RvZ2dsZUFuY2hvclRhYkluZGV4KGUsdCl7ZT90LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIik6dC5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4Iil9dG9nZ2xlQW5jaG9ycyhlKXt0aGlzLl9zdGFydEFuY2hvciYmdGhp''@;'; put 'put ''cy5fZW5kQW5jaG9yJiYodGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgoZSx0aGlzLl9zdGFydEFuY2hvciksdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgoZSx0aGlzLl9lbmRBbmNob3IpKX1fZXhlY3V0ZU9uU3RhYmxlKGUpe3RoaXMuX2luamVjdG9yP0g4KGUse2luamVjdG9yOnRoaXMu''@;'; put 'put ''X2luamVjdG9yfSk6c2V0VGltZW91dChlKX19bGV0IHdvZT0oKCk9PntjbGFzcyBue19jaGVja2VyPXNuKHVtdCk7X25nWm9uZT1zbihnYSk7X2RvY3VtZW50PXNuKFRsKTtfaW5qZWN0b3I9c24oTWwpO2NvbnN0cnVjdG9yKCl7c24oalNlKS5sb2FkKGNtdCl9Y3JlYXRlKHQscj0hMSl7cmV0''@;'; put 'put ''dXJuIG5ldyB3bXQodCx0aGlzLl9jaGVja2VyLHRoaXMuX25nWm9uZSx0aGlzLl9kb2N1bWVudCxyLHRoaXMuX2luamVjdG9yKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAy''@;'; put 'put ''NzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0pKCksV1NlPSgoKT0+e2NsYXNzIG57X2VsZW1lbnRSZWY9c24obm8pO19mb2N1c1RyYXBGYWN0b3J5PXNuKHdvZSk7Zm9jdXNUcmFwO19wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ9bnVsbDtnZXQgZW5hYmxlZCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmZvY3VzVHJhcD8uZW5hYmxlZHx8ITF9c2V0IGVuYWJsZWQodCl7dGhpcy5mb2N1c1RyYXAmJih0aGlzLmZvY3VzVHJhcC5lbmFibGVkPXQpfWF1dG9DYXB0dXJlO2NvbnN0cnVjdG9yKCl7c24ocEQpLmlzQnJvd3NlciYmKHRoaXMuZm9jdXNUcmFwPXRoaXMuX2ZvY3VzVHJhcEZhY3Rv''@;'; put 'put ''cnkuY3JlYXRlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwhMCkpfW5nT25EZXN0cm95KCl7dGhpcy5mb2N1c1RyYXA/LmRlc3Ryb3koKSx0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQmJih0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQuZm9jdXMoKSx0aGlzLl9w''@;'; put 'put ''cmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ9bnVsbCl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5mb2N1c1RyYXA/LmF0dGFjaEFuY2hvcnMoKSx0aGlzLmF1dG9DYXB0dXJlJiZ0aGlzLl9jYXB0dXJlRm9jdXMoKX1uZ0RvQ2hlY2soKXt0aGlzLmZvY3VzVHJhcCYmIXRoaXMuZm9jdXNUcmFw''@;'; put 'put ''Lmhhc0F0dGFjaGVkKCkmJnRoaXMuZm9jdXNUcmFwLmF0dGFjaEFuY2hvcnMoKX1uZ09uQ2hhbmdlcyh0KXtjb25zdCByPXQuYXV0b0NhcHR1cmU7ciYmIXIuZmlyc3RDaGFuZ2UmJnRoaXMuYXV0b0NhcHR1cmUmJnRoaXMuZm9jdXNUcmFwPy5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9jYXB0dXJl''@;'; put 'put ''Rm9jdXMoKX1fY2FwdHVyZUZvY3VzKCl7dGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50PWZ1bmN0aW9uIGxtdCgpe2xldCBuPXR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50P2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ6bnVsbDtmb3IoO24mJm4uc2hhZG93Um9vdDspe2NvbnN0IGU9''@;'; put 'put ''bi5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQ7aWYoZT09PW4pYnJlYWs7bj1lfXJldHVybiBufSgpLHRoaXMuZm9jdXNUcmFwPy5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1''@;'; put 'put ''ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNka1RyYXBGb2N1cyIsIiJdXSxpbnB1dHM6e2VuYWJsZWQ6WzIsImNka1RyYXBGb2N1cyIsImVuYWJsZWQiLFowXSxhdXRvQ2FwdHVyZTpbMiwiY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUiLCJhdXRvQ2FwdHVyZSIsWjBdfSxleHBvcnRB''@;'; put 'put ''czpbImNka1RyYXBGb2N1cyJdLGZlYXR1cmVzOltpdV19KX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gWVNlKG49MCxlLHQ9WGd0KXtsZXQgcj0tMTtyZXR1cm4gbnVsbCE9ZSYmKGFiZShlKT90PWU6cj1lKSxuZXcgaG8oaT0+e2xldCBvPWZ1bmN0aW9uIEVtdChuKXtyZXR1cm4gbiBpbnN0YW5j''@;'; put 'put ''ZW9mIERhdGUmJiFpc05hTihuKX0obik/K24tdC5ub3coKTpuO288MCYmKG89MCk7bGV0IGE9MDtyZXR1cm4gdC5zY2hlZHVsZShmdW5jdGlvbigpe2kuY2xvc2VkfHwoaS5uZXh0KGErKyksMDw9cj90aGlzLnNjaGVkdWxlKHZvaWQgMCxyKTppLmNvbXBsZXRlKCkpfSxvKX0pfWNvbnN0IGdE''@;'; put 'put ''PXtzY2hlZHVsZShuKXtsZXQgZT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsdD1jYW5jZWxBbmltYXRpb25GcmFtZTtjb25zdHtkZWxlZ2F0ZTpyfT1nRDtyJiYoZT1yLnJlcXVlc3RBbmltYXRpb25GcmFtZSx0PXIuY2FuY2VsQW5pbWF0aW9uRnJhbWUpO2NvbnN0IGk9ZShvPT57dD12b2lkIDAs''@;'; put 'put ''bihvKX0pO3JldHVybiBuZXcgQXIoKCk9PnQ/LihpKSl9LHJlcXVlc3RBbmltYXRpb25GcmFtZSguLi5uKXtjb25zdHtkZWxlZ2F0ZTplfT1nRDtyZXR1cm4oZT8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUpKC4uLm4pfSxjYW5jZWxBbmltYXRpb25GcmFt''@;'; put 'put ''ZSguLi5uKXtjb25zdHtkZWxlZ2F0ZTplfT1nRDtyZXR1cm4oZT8uY2FuY2VsQW5pbWF0aW9uRnJhbWV8fGNhbmNlbEFuaW1hdGlvbkZyYW1lKSguLi5uKX0sZGVsZWdhdGU6dm9pZCAwfSxaU2U9bmV3IGNsYXNzIHhtdCBleHRlbmRzIGdvZXtmbHVzaChlKXtsZXQgdDt0aGlzLl9hY3RpdmU9''@;'; put 'put ''ITAsZT90PWUuaWQ6KHQ9dGhpcy5fc2NoZWR1bGVkLHRoaXMuX3NjaGVkdWxlZD12b2lkIDApO2NvbnN0e2FjdGlvbnM6cn09dGhpcztsZXQgaTtlPWV8fHIuc2hpZnQoKTtkb3tpZihpPWUuZXhlY3V0ZShlLnN0YXRlLGUuZGVsYXkpKWJyZWFrfXdoaWxlKChlPXJbMF0pJiZlLmlkPT09dCYm''@;'; put 'put ''ci5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsaSl7Zm9yKDsoZT1yWzBdKSYmZS5pZD09PXQmJnIuc2hpZnQoKTspZS51bnN1YnNjcmliZSgpO3Rocm93IGl9fX0oY2xhc3MgVG10IGV4dGVuZHMgZm9le2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0KSx0aGlzLnNjaGVkdWxlcj1lLHRo''@;'; put 'put ''aXMud29yaz10fXJlcXVlc3RBc3luY0lkKGUsdCxyPTApe3JldHVybiBudWxsIT09ciYmcj4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKGUsdCxyKTooZS5hY3Rpb25zLnB1c2godGhpcyksZS5fc2NoZWR1bGVkfHwoZS5fc2NoZWR1bGVkPWdELnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+ZS5m''@;'; put 'put ''bHVzaCh2b2lkIDApKSkpfXJlY3ljbGVBc3luY0lkKGUsdCxyPTApe3ZhciBpO2lmKG51bGwhPXI/cj4wOnRoaXMuZGVsYXk+MClyZXR1cm4gc3VwZXIucmVjeWNsZUFzeW5jSWQoZSx0LHIpO2NvbnN0e2FjdGlvbnM6b309ZTtudWxsIT10JiZ0PT09ZS5fc2NoZWR1bGVkJiYobnVsbD09PShp''@;'; put 'put ''PW9bby5sZW5ndGgtMV0pfHx2b2lkIDA9PT1pP3ZvaWQgMDppLmlkKSE9PXQmJihnRC5jYW5jZWxBbmltYXRpb25GcmFtZSh0KSxlLl9zY2hlZHVsZWQ9dm9pZCAwKX19KTtmdW5jdGlvbiBGYihuLGU9MCl7cmV0dXJuIGZ1bmN0aW9uIFJtdChuKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChu''@;'; put 'put ''KSkmJiFpc05hTihOdW1iZXIobikpfShuKT9OdW1iZXIobik6Mj09PWFyZ3VtZW50cy5sZW5ndGg/ZTowfWZ1bmN0aW9uIG43KG4pe3JldHVybiBuIGluc3RhbmNlb2Ygbm8/bi5uYXRpdmVFbGVtZW50Om59bGV0IENvZSxJbXQ9MTtjb25zdCBEej17fTtmdW5jdGlvbiBHU2Uobil7cmV0dXJu''@;'; put 'put ''IG4gaW4gRHomJihkZWxldGUgRHpbbl0sITApfWNvbnN0IERtdD17c2V0SW1tZWRpYXRlKG4pe2NvbnN0IGU9SW10Kys7cmV0dXJuIER6W2VdPSEwLENvZXx8KENvZT1Qcm9taXNlLnJlc29sdmUoKSksQ29lLnRoZW4oKCk9PkdTZShlKSYmbigpKSxlfSxjbGVhckltbWVkaWF0ZShuKXtHU2Uo''@;'; put 'put ''bil9fSx7c2V0SW1tZWRpYXRlOkxtdCxjbGVhckltbWVkaWF0ZTpPbXR9PURtdCxMej17c2V0SW1tZWRpYXRlKC4uLm4pe2NvbnN0e2RlbGVnYXRlOmV9PUx6O3JldHVybihlPy5zZXRJbW1lZGlhdGV8fExtdCkoLi4ubil9LGNsZWFySW1tZWRpYXRlKG4pe2NvbnN0e2RlbGVnYXRlOmV9PUx6''@;'; put 'put ''O3JldHVybihlPy5jbGVhckltbWVkaWF0ZXx8T210KShuKX0sZGVsZWdhdGU6dm9pZCAwfSxQbXQ9bmV3IGNsYXNzIEZtdCBleHRlbmRzIGdvZXtmbHVzaChlKXt0aGlzLl9hY3RpdmU9ITA7Y29uc3QgdD10aGlzLl9zY2hlZHVsZWQ7dGhpcy5fc2NoZWR1bGVkPXZvaWQgMDtjb25zdHthY3Rp''@;'; put 'put ''b25zOnJ9PXRoaXM7bGV0IGk7ZT1lfHxyLnNoaWZ0KCk7ZG97aWYoaT1lLmV4ZWN1dGUoZS5zdGF0ZSxlLmRlbGF5KSlicmVha313aGlsZSgoZT1yWzBdKSYmZS5pZD09PXQmJnIuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGkpe2Zvcig7KGU9clswXSkmJmUuaWQ9PT10JiZyLnNoaWZ0''@;'; put 'put ''KCk7KWUudW5zdWJzY3JpYmUoKTt0aHJvdyBpfX19KGNsYXNzIE5tdCBleHRlbmRzIGZvZXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCksdGhpcy5zY2hlZHVsZXI9ZSx0aGlzLndvcms9dH1yZXF1ZXN0QXN5bmNJZChlLHQscj0wKXtyZXR1cm4gbnVsbCE9PXImJnI+MD9zdXBlci5yZXF1''@;'; put 'put ''ZXN0QXN5bmNJZChlLHQscik6KGUuYWN0aW9ucy5wdXNoKHRoaXMpLGUuX3NjaGVkdWxlZHx8KGUuX3NjaGVkdWxlZD1Mei5zZXRJbW1lZGlhdGUoZS5mbHVzaC5iaW5kKGUsdm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZChlLHQscj0wKXt2YXIgaTtpZihudWxsIT1yP3I+MDp0aGlzLmRlbGF5''@;'; put 'put ''PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKGUsdCxyKTtjb25zdHthY3Rpb25zOm99PWU7bnVsbCE9dCYmKG51bGw9PT0oaT1vW28ubGVuZ3RoLTFdKXx8dm9pZCAwPT09aT92b2lkIDA6aS5pZCkhPT10JiYoTHouY2xlYXJJbW1lZGlhdGUodCksZS5fc2NoZWR1bGVkPT09dCYmKGUu''@;'; put 'put ''X3NjaGVkdWxlZD12b2lkIDApKX19KTtmdW5jdGlvbiBTb2UobixlPUF6KXtyZXR1cm4gZnVuY3Rpb24gSG10KG4pe3JldHVybiBhZCgoZSx0KT0+e2xldCByPSExLGk9bnVsbCxvPW51bGwsYT0hMTtjb25zdCBsPSgpPT57aWYobz8udW5zdWJzY3JpYmUoKSxvPW51bGwscil7cj0hMTtjb25z''@;'; put 'put ''dCBnPWk7aT1udWxsLHQubmV4dChnKX1hJiZ0LmNvbXBsZXRlKCl9LHU9KCk9PntvPW51bGwsYSYmdC5jb21wbGV0ZSgpfTtlLnN1YnNjcmliZSh2dSh0LGc9PntyPSEwLGk9ZyxvfHxOMihuKGcpKS5zdWJzY3JpYmUobz12dSh0LGwsdSkpfSwoKT0+e2E9ITAsKCFyfHwhb3x8by5jbG9zZWQp''@;'; put 'put ''JiZ0LmNvbXBsZXRlKCl9KSl9KX0oKCk9PllTZShuLGUpKX1jb25zdCBCbXQ9bmV3IEVyKCJjZGstZGlyLWRvYyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24gam10KCl7cmV0dXJuIHNuKFRsKX19KSxVbXQ9L14oYXJ8Y2tifGR2fGhlfGl3fGZhfG5xb3xwc3xzZHx1Z3x1''@;'; put 'put ''cnx5aXwuKlstX10oQWRsbXxBcmFifEhlYnJ8Tmtvb3xSb2hnfFRoYWEpKSg/IS4qWy1fXShMYXRufEN5cmwpKCR8LXxfKSkoJHwtfF8pL2k7bGV0IGlNPSgoKT0+e2NsYXNzIG57Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWVTaWduYWwoKX12YWx1ZVNpZ25hbD1CMSgibHRyIik7Y2hh''@;'; put 'put ''bmdlPW5ldyBLcjtjb25zdHJ1Y3Rvcigpe2NvbnN0IHQ9c24oQm10LHtvcHRpb25hbDohMH0pO3QmJnRoaXMudmFsdWVTaWduYWwuc2V0KGZ1bmN0aW9uIHptdChuKXtjb25zdCBlPW4/LnRvTG93ZXJDYXNlKCl8fCIiO3JldHVybiJhdXRvIj09PWUmJnR5cGVvZiBuYXZpZ2F0b3I8InUiJiZu''@;'; put 'put ''YXZpZ2F0b3I/Lmxhbmd1YWdlP1VtdC50ZXN0KG5hdmlnYXRvci5sYW5ndWFnZSk/InJ0bCI6Imx0ciI6InJ0bCI9PT1lPyJydGwiOiJsdHIifSgodC5ib2R5P3QuYm9keS5kaXI6bnVsbCl8fCh0LmRvY3VtZW50RWxlbWVudD90LmRvY3VtZW50RWxlbWVudC5kaXI6bnVsbCl8fCJsdHIiKSl9''@;'; put 'put ''bmdPbkRlc3Ryb3koKXt0aGlzLmNoYW5nZS5jb21wbGV0ZSgpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSko''@;'; put 'put ''KTt2YXIgVzU9ZnVuY3Rpb24obil7cmV0dXJuIG5bbi5OT1JNQUw9MF09Ik5PUk1BTCIsbltuLk5FR0FURUQ9MV09Ik5FR0FURUQiLG5bbi5JTlZFUlRFRD0yXT0iSU5WRVJURUQiLG59KFc1fHx7fSk7bGV0IE96LFBiO2Z1bmN0aW9uIG1EKCl7aWYoIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVu''@;'; put 'put ''dHx8IWRvY3VtZW50KXJldHVybiBXNS5OT1JNQUw7aWYobnVsbD09T3ope2NvbnN0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZT1uLnN0eWxlO24uZGlyPSJydGwiLGUud2lkdGg9IjFweCIsZS5vdmVyZmxvdz0iYXV0byIsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGUucG9pbnRl''@;'; put 'put ''ckV2ZW50cz0ibm9uZSIsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikscj10LnN0eWxlO3Iud2lkdGg9IjJweCIsci5oZWlnaHQ9IjFweCIsbi5hcHBlbmRDaGlsZCh0KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG4pLE96PVc1''@;'; put 'put ''Lk5PUk1BTCwwPT09bi5zY3JvbGxMZWZ0JiYobi5zY3JvbGxMZWZ0PTEsT3o9MD09PW4uc2Nyb2xsTGVmdD9XNS5ORUdBVEVEOlc1LklOVkVSVEVEKSxuLnJlbW92ZSgpfXJldHVybiBPen1jbGFzcyBZbXR7fWNsYXNzIEdtdCBleHRlbmRzIFltdHtfZGF0YTtjb25zdHJ1Y3RvcihlKXtzdXBl''@;'; put 'put ''cigpLHRoaXMuX2RhdGE9ZX1jb25uZWN0KCl7cmV0dXJuIHhJKHRoaXMuX2RhdGEpP3RoaXMuX2RhdGE6UGEodGhpcy5fZGF0YSl9ZGlzY29ubmVjdCgpe319dmFyIHZEPWZ1bmN0aW9uKG4pe3JldHVybiBuW24uUkVQTEFDRUQ9MF09IlJFUExBQ0VEIixuW24uSU5TRVJURUQ9MV09IklOU0VS''@;'; put 'put ''VEVEIixuW24uTU9WRUQ9Ml09Ik1PVkVEIixuW24uUkVNT1ZFRD0zXT0iUkVNT1ZFRCIsbn0odkR8fHt9KTtjb25zdCBFb2U9bmV3IEVyKCJfVmlld1JlcGVhdGVyIik7Y2xhc3MgJFNle3ZpZXdDYWNoZVNpemU9MjA7X3ZpZXdDYWNoZT1bXTthcHBseUNoYW5nZXMoZSx0LHIsaSxvKXtlLmZv''@;'; put 'put ''ckVhY2hPcGVyYXRpb24oKGEsbCx1KT0+e2xldCBnLEU7bnVsbD09YS5wcmV2aW91c0luZGV4PyhnPXRoaXMuX2luc2VydFZpZXcoKCk9PnIoYSxsLHUpLHUsdCxpKGEpKSxFPWc/dkQuSU5TRVJURUQ6dkQuUkVQTEFDRUQpOm51bGw9PXU/KHRoaXMuX2RldGFjaEFuZENhY2hlVmlldyhsLHQp''@;'; put 'put ''LEU9dkQuUkVNT1ZFRCk6KGc9dGhpcy5fbW92ZVZpZXcobCx1LHQsaShhKSksRT12RC5NT1ZFRCksbyYmbyh7Y29udGV4dDpnPy5jb250ZXh0LG9wZXJhdGlvbjpFLHJlY29yZDphfSl9KX1kZXRhY2goKXtmb3IoY29uc3QgZSBvZiB0aGlzLl92aWV3Q2FjaGUpZS5kZXN0cm95KCk7dGhpcy5f''@;'; put 'put ''dmlld0NhY2hlPVtdfV9pbnNlcnRWaWV3KGUsdCxyLGkpe2NvbnN0IG89dGhpcy5faW5zZXJ0Vmlld0Zyb21DYWNoZSh0LHIpO2lmKG8pcmV0dXJuIHZvaWQoby5jb250ZXh0LiRpbXBsaWNpdD1pKTtjb25zdCBhPWUoKTtyZXR1cm4gci5jcmVhdGVFbWJlZGRlZFZpZXcoYS50ZW1wbGF0ZVJl''@;'; put 'put ''ZixhLmNvbnRleHQsYS5pbmRleCl9X2RldGFjaEFuZENhY2hlVmlldyhlLHQpe2NvbnN0IHI9dC5kZXRhY2goZSk7dGhpcy5fbWF5YmVDYWNoZVZpZXcocix0KX1fbW92ZVZpZXcoZSx0LHIsaSl7Y29uc3Qgbz1yLmdldChlKTtyZXR1cm4gci5tb3ZlKG8sdCksby5jb250ZXh0LiRpbXBsaWNp''@;'; put 'put ''dD1pLG99X21heWJlQ2FjaGVWaWV3KGUsdCl7aWYodGhpcy5fdmlld0NhY2hlLmxlbmd0aDx0aGlzLnZpZXdDYWNoZVNpemUpdGhpcy5fdmlld0NhY2hlLnB1c2goZSk7ZWxzZXtjb25zdCByPXQuaW5kZXhPZihlKTstMT09PXI/ZS5kZXN0cm95KCk6dC5yZW1vdmUocil9fV9pbnNlcnRWaWV3''@;'; put 'put ''RnJvbUNhY2hlKGUsdCl7Y29uc3Qgcj10aGlzLl92aWV3Q2FjaGUucG9wKCk7cmV0dXJuIHImJnQuaW5zZXJ0KHIsZSkscnx8bnVsbH19Y29uc3QgJG10PVsiY29udGVudFdyYXBwZXIiXSxxbXQ9WyIqIl0scVNlPW5ldyBFcigiVklSVFVBTF9TQ1JPTExfU1RSQVRFR1kiKTtjbGFzcyBLbXR7''@;'; put 'put ''X3Njcm9sbGVkSW5kZXhDaGFuZ2U9bmV3IE1yO3Njcm9sbGVkSW5kZXhDaGFuZ2U9dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5waXBlKGhvZSgpKTtfdmlld3BvcnQ9bnVsbDtfaXRlbVNpemU7X21pbkJ1ZmZlclB4O19tYXhCdWZmZXJQeDtjb25zdHJ1Y3RvcihlLHQscil7dGhpcy5faXRl''@;'; put 'put ''bVNpemU9ZSx0aGlzLl9taW5CdWZmZXJQeD10LHRoaXMuX21heEJ1ZmZlclB4PXJ9YXR0YWNoKGUpe3RoaXMuX3ZpZXdwb3J0PWUsdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1kZXRhY2goKXt0aGlzLl9zY3JvbGxlZEluZGV4Q2hh''@;'; put 'put ''bmdlLmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnQ9bnVsbH11cGRhdGVJdGVtQW5kQnVmZmVyU2l6ZShlLHQscil7dGhpcy5faXRlbVNpemU9ZSx0aGlzLl9taW5CdWZmZXJQeD10LHRoaXMuX21heEJ1ZmZlclB4PXIsdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0''@;'; put 'put ''ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRTY3JvbGxlZCgpe3RoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkRhdGFMZW5ndGhDaGFuZ2VkKCl7dGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRSZW5kZXJlZCgp''@;'; put 'put ''e31vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpe31zY3JvbGxUb0luZGV4KGUsdCl7dGhpcy5fdmlld3BvcnQmJnRoaXMuX3ZpZXdwb3J0LnNjcm9sbFRvT2Zmc2V0KGUqdGhpcy5faXRlbVNpemUsdCl9X3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKXt0aGlzLl92aWV3cG9ydCYmdGhpcy5fdmll''@;'; put 'put ''d3BvcnQuc2V0VG90YWxDb250ZW50U2l6ZSh0aGlzLl92aWV3cG9ydC5nZXREYXRhTGVuZ3RoKCkqdGhpcy5faXRlbVNpemUpfV91cGRhdGVSZW5kZXJlZFJhbmdlKCl7aWYoIXRoaXMuX3ZpZXdwb3J0KXJldHVybjtjb25zdCBlPXRoaXMuX3ZpZXdwb3J0LmdldFJlbmRlcmVkUmFuZ2UoKSx0''@;'; put 'put ''PXtzdGFydDplLnN0YXJ0LGVuZDplLmVuZH0scj10aGlzLl92aWV3cG9ydC5nZXRWaWV3cG9ydFNpemUoKSxpPXRoaXMuX3ZpZXdwb3J0LmdldERhdGFMZW5ndGgoKTtsZXQgbz10aGlzLl92aWV3cG9ydC5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCksYT10aGlzLl9pdGVtU2l6ZT4wP28vdGhpcy5f''@;'; put 'put ''aXRlbVNpemU6MDtpZih0LmVuZD5pKXtjb25zdCB1PU1hdGguY2VpbChyL3RoaXMuX2l0ZW1TaXplKSxnPU1hdGgubWF4KDAsTWF0aC5taW4oYSxpLXUpKTthIT1nJiYoYT1nLG89Zyp0aGlzLl9pdGVtU2l6ZSx0LnN0YXJ0PU1hdGguZmxvb3IoYSkpLHQuZW5kPU1hdGgubWF4KDAsTWF0aC5t''@;'; put 'put ''aW4oaSx0LnN0YXJ0K3UpKX1jb25zdCBsPW8tdC5zdGFydCp0aGlzLl9pdGVtU2l6ZTtpZihsPHRoaXMuX21pbkJ1ZmZlclB4JiYwIT10LnN0YXJ0KXtjb25zdCB1PU1hdGguY2VpbCgodGhpcy5fbWF4QnVmZmVyUHgtbCkvdGhpcy5faXRlbVNpemUpO3Quc3RhcnQ9TWF0aC5tYXgoMCx0LnN0''@;'; put 'put ''YXJ0LXUpLHQuZW5kPU1hdGgubWluKGksTWF0aC5jZWlsKGErKHIrdGhpcy5fbWluQnVmZmVyUHgpL3RoaXMuX2l0ZW1TaXplKSl9ZWxzZXtjb25zdCB1PXQuZW5kKnRoaXMuX2l0ZW1TaXplLShvK3IpO2lmKHU8dGhpcy5fbWluQnVmZmVyUHgmJnQuZW5kIT1pKXtjb25zdCBnPU1hdGguY2Vp''@;'; put 'put ''bCgodGhpcy5fbWF4QnVmZmVyUHgtdSkvdGhpcy5faXRlbVNpemUpO2c+MCYmKHQuZW5kPU1hdGgubWluKGksdC5lbmQrZyksdC5zdGFydD1NYXRoLm1heCgwLE1hdGguZmxvb3IoYS10aGlzLl9taW5CdWZmZXJQeC90aGlzLl9pdGVtU2l6ZSkpKX19dGhpcy5fdmlld3BvcnQuc2V0UmVuZGVy''@;'; put 'put ''ZWRSYW5nZSh0KSx0aGlzLl92aWV3cG9ydC5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQoTWF0aC5yb3VuZCh0aGlzLl9pdGVtU2l6ZSp0LnN0YXJ0KSksdGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5uZXh0KE1hdGguZmxvb3IoYSkpfX1sZXQgTno9KCgpPT57Y2xhc3Mgbntfbmdab25lPXNu''@;'; put 'put ''KGdhKTtfcGxhdGZvcm09c24ocEQpO19yZW5kZXJlcj1zbihnYykuY3JlYXRlUmVuZGVyZXIobnVsbCxudWxsKTtfY2xlYW51cEdsb2JhbExpc3RlbmVyO2NvbnN0cnVjdG9yKCl7fV9zY3JvbGxlZD1uZXcgTXI7X3Njcm9sbGVkQ291bnQ9MDtzY3JvbGxDb250YWluZXJzPW5ldyBNYXA7cmVn''@;'; put 'put ''aXN0ZXIodCl7dGhpcy5zY3JvbGxDb250YWluZXJzLmhhcyh0KXx8dGhpcy5zY3JvbGxDb250YWluZXJzLnNldCh0LHQuZWxlbWVudFNjcm9sbGVkKCkuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxlZC5uZXh0KHQpKSl9ZGVyZWdpc3Rlcih0KXtjb25zdCByPXRoaXMuc2Nyb2xsQ29udGFp''@;'; put 'put ''bmVycy5nZXQodCk7ciYmKHIudW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZGVsZXRlKHQpKX1zY3JvbGxlZCh0PTIwKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP25ldyBobyhyPT57dGhpcy5fY2xlYW51cEdsb2JhbExpc3RlbmVyfHwodGhpcy5fY2xlYW51''@;'; put 'put ''cEdsb2JhbExpc3RlbmVyPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5fcmVuZGVyZXIubGlzdGVuKCJkb2N1bWVudCIsInNjcm9sbCIsKCk9PnRoaXMuX3Njcm9sbGVkLm5leHQoKSkpKTtjb25zdCBpPXQ+MD90aGlzLl9zY3JvbGxlZC5waXBlKFNvZSh0KSkuc3Vi''@;'; put 'put ''c2NyaWJlKHIpOnRoaXMuX3Njcm9sbGVkLnN1YnNjcmliZShyKTtyZXR1cm4gdGhpcy5fc2Nyb2xsZWRDb3VudCsrLCgpPT57aS51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbGVkQ291bnQtLSx0aGlzLl9zY3JvbGxlZENvdW50fHwodGhpcy5fY2xlYW51cEdsb2JhbExpc3RlbmVyPy4oKSx0''@;'; put 'put ''aGlzLl9jbGVhbnVwR2xvYmFsTGlzdGVuZXI9dm9pZCAwKX19KTpQYSgpfW5nT25EZXN0cm95KCl7dGhpcy5fY2xlYW51cEdsb2JhbExpc3RlbmVyPy4oKSx0aGlzLl9jbGVhbnVwR2xvYmFsTGlzdGVuZXI9dm9pZCAwLHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKCh0LHIpPT50aGlz''@;'; put 'put ''LmRlcmVnaXN0ZXIocikpLHRoaXMuX3Njcm9sbGVkLmNvbXBsZXRlKCl9YW5jZXN0b3JTY3JvbGxlZCh0LHIpe2NvbnN0IGk9dGhpcy5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnModCk7cmV0dXJuIHRoaXMuc2Nyb2xsZWQocikucGlwZShzdShvPT4hb3x8aS5pbmRleE9mKG8pPi0xKSl9''@;'; put 'put ''Z2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHQpe2NvbnN0IHI9W107cmV0dXJuIHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKChpLG8pPT57dGhpcy5fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudChvLHQpJiZyLnB1c2gobyl9KSxyfV9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50''@;'; put 'put ''KHQscil7bGV0IGk9bjcociksbz10LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O2Rve2lmKGk9PW8pcmV0dXJuITB9d2hpbGUoaT1pLnBhcmVudEVsZW1lbnQpO3JldHVybiExfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3''@;'; put 'put ''NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKSxLU2U9KCgpPT57Y2xhc3MgbntlbGVtZW50UmVmPXNuKG5vKTtzY3JvbGxEaXNwYXRjaGVyPXNuKE56KTtuZ1pvbmU9c24oZ2EpO2Rpcj1zbihpTSx7b3B0aW9uYWw6''@;'; put 'put ''ITB9KTtfc2Nyb2xsRWxlbWVudD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtfZGVzdHJveWVkPW5ldyBNcjtfcmVuZGVyZXI9c24oTnQpO19jbGVhbnVwU2Nyb2xsO19lbGVtZW50U2Nyb2xsZWQ9bmV3IE1yO2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7dGhpcy5fY2xlYW51cFNj''@;'; put 'put ''cm9sbD10aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5fcmVuZGVyZXIubGlzdGVuKHRoaXMuX3Njcm9sbEVsZW1lbnQsInNjcm9sbCIsdD0+dGhpcy5fZWxlbWVudFNjcm9sbGVkLm5leHQodCkpKSx0aGlzLnNjcm9sbERpc3BhdGNoZXIucmVnaXN0ZXIodGhpcyl9bmdP''@;'; put 'put ''bkRlc3Ryb3koKXt0aGlzLl9jbGVhbnVwU2Nyb2xsPy4oKSx0aGlzLl9lbGVtZW50U2Nyb2xsZWQuY29tcGxldGUoKSx0aGlzLnNjcm9sbERpc3BhdGNoZXIuZGVyZWdpc3Rlcih0aGlzKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfWVsZW1lbnRT''@;'; put 'put ''Y3JvbGxlZCgpe3JldHVybiB0aGlzLl9lbGVtZW50U2Nyb2xsZWR9Z2V0RWxlbWVudFJlZigpe3JldHVybiB0aGlzLmVsZW1lbnRSZWZ9c2Nyb2xsVG8odCl7Y29uc3Qgcj10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPXRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU7bnVs''@;'; put 'put ''bD09dC5sZWZ0JiYodC5sZWZ0PWk/dC5lbmQ6dC5zdGFydCksbnVsbD09dC5yaWdodCYmKHQucmlnaHQ9aT90LnN0YXJ0OnQuZW5kKSxudWxsIT10LmJvdHRvbSYmKHQudG9wPXIuc2Nyb2xsSGVpZ2h0LXIuY2xpZW50SGVpZ2h0LXQuYm90dG9tKSxpJiZtRCgpIT1XNS5OT1JNQUw/KG51bGwh''@;'; put 'put ''PXQubGVmdCYmKHQucmlnaHQ9ci5zY3JvbGxXaWR0aC1yLmNsaWVudFdpZHRoLXQubGVmdCksbUQoKT09VzUuSU5WRVJURUQ/dC5sZWZ0PXQucmlnaHQ6bUQoKT09VzUuTkVHQVRFRCYmKHQubGVmdD10LnJpZ2h0Py10LnJpZ2h0OnQucmlnaHQpKTpudWxsIT10LnJpZ2h0JiYodC5sZWZ0PXIu''@;'; put 'put ''c2Nyb2xsV2lkdGgtci5jbGllbnRXaWR0aC10LnJpZ2h0KSx0aGlzLl9hcHBseVNjcm9sbFRvT3B0aW9ucyh0KX1fYXBwbHlTY3JvbGxUb09wdGlvbnModCl7Y29uc3Qgcj10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDshZnVuY3Rpb24gV210KCl7aWYobnVsbD09UGIpe2lmKCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudHx8ImZ1bmN0aW9uIiE9dHlwZW9mIEVsZW1lbnR8fCFFbGVtZW50KXJldHVybiBQYj0hMSxQYjtpZihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/LnN0eWxlJiYic2Nyb2xsQmVoYXZpb3IiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50''@;'; put 'put ''LnN0eWxlKVBiPSEwO2Vsc2V7Y29uc3Qgbj1FbGVtZW50LnByb3RvdHlwZS5zY3JvbGxUbztQYj0hIW4mJiEvXHtccypcW25hdGl2ZSBjb2RlXF1ccypcfS8udGVzdChuLnRvU3RyaW5nKCkpfX1yZXR1cm4gUGJ9KCk/KG51bGwhPXQudG9wJiYoci5zY3JvbGxUb3A9dC50b3ApLG51bGwhPXQu''@;'; put 'put ''bGVmdCYmKHIuc2Nyb2xsTGVmdD10LmxlZnQpKTpyLnNjcm9sbFRvKHQpfW1lYXN1cmVTY3JvbGxPZmZzZXQodCl7Y29uc3Qgcj0ibGVmdCIsaT0icmlnaHQiLG89dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7aWYoInRvcCI9PXQpcmV0dXJuIG8uc2Nyb2xsVG9wO2lmKCJib3R0b20i''@;'; put 'put ''PT10KXJldHVybiBvLnNjcm9sbEhlaWdodC1vLmNsaWVudEhlaWdodC1vLnNjcm9sbFRvcDtjb25zdCBhPXRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU7cmV0dXJuInN0YXJ0Ij09dD90PWE/aTpyOiJlbmQiPT10JiYodD1hP3I6aSksYSYmbUQoKT09VzUuSU5WRVJURUQ/dD09cj9v''@;'; put 'put ''LnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgtby5zY3JvbGxMZWZ0Om8uc2Nyb2xsTGVmdDphJiZtRCgpPT1XNS5ORUdBVEVEP3Q9PXI/by5zY3JvbGxMZWZ0K28uc2Nyb2xsV2lkdGgtby5jbGllbnRXaWR0aDotby5zY3JvbGxMZWZ0OnQ9PXI/by5zY3JvbGxMZWZ0Om8uc2Nyb2xsV2lkdGgt''@;'; put 'put ''by5jbGllbnRXaWR0aC1vLnNjcm9sbExlZnR9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNkay1zY3JvbGxhYmxlIiwiIl0sWyIiLCJjZGtTY3JvbGxhYmxlIiwiIl1dfSl9''@;'; put 'put ''cmV0dXJuIG59KSgpLEZ6PSgoKT0+e2NsYXNzIG57X3BsYXRmb3JtPXNuKHBEKTtfbGlzdGVuZXJzO192aWV3cG9ydFNpemU7X2NoYW5nZT1uZXcgTXI7X2RvY3VtZW50PXNuKFRsKTtjb25zdHJ1Y3Rvcigpe2NvbnN0IHQ9c24oZ2EpLHI9c24oZ2MpLmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVs''@;'; put 'put ''bCk7dC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcil7Y29uc3QgaT1vPT50aGlzLl9jaGFuZ2UubmV4dChvKTt0aGlzLl9saXN0ZW5lcnM9W3IubGlzdGVuKCJ3aW5kb3ciLCJyZXNpemUiLGkpLHIubGlzdGVuKCJ3aW5kb3ciLCJvcmllbnRhdGlv''@;'; put 'put ''bmNoYW5nZSIsaSldfXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3cG9ydFNpemU9bnVsbCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX2xpc3RlbmVycz8uZm9yRWFjaCh0PT50KCkpLHRoaXMuX2NoYW5nZS5jb21wbGV0ZSgpfWdldFZpZXdwb3J0U2l6ZSgpe3RoaXMuX3Zp''@;'; put 'put ''ZXdwb3J0U2l6ZXx8dGhpcy5fdXBkYXRlVmlld3BvcnRTaXplKCk7Y29uc3QgdD17d2lkdGg6dGhpcy5fdmlld3BvcnRTaXplLndpZHRoLGhlaWdodDp0aGlzLl92aWV3cG9ydFNpemUuaGVpZ2h0fTtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwodGhpcy5fdmlld3BvcnRTaXpl''@;'; put 'put ''PW51bGwpLHR9Z2V0Vmlld3BvcnRSZWN0KCl7Y29uc3QgdD10aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSx7d2lkdGg6cixoZWlnaHQ6aX09dGhpcy5nZXRWaWV3cG9ydFNpemUoKTtyZXR1cm57dG9wOnQudG9wLGxlZnQ6dC5sZWZ0LGJvdHRvbTp0LnRvcCtpLHJpZ2h0OnQubGVm''@;'; put 'put ''dCtyLGhlaWdodDppLHdpZHRoOnJ9fWdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKXtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybnt0b3A6MCxsZWZ0OjB9O2NvbnN0IHQ9dGhpcy5fZG9jdW1lbnQscj10aGlzLl9nZXRXaW5kb3coKSxpPXQuZG9jdW1lbnRFbGVtZW50LG89''@;'; put 'put ''aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOi1vLnRvcHx8dC5ib2R5LnNjcm9sbFRvcHx8ci5zY3JvbGxZfHxpLnNjcm9sbFRvcHx8MCxsZWZ0Oi1vLmxlZnR8fHQuYm9keS5zY3JvbGxMZWZ0fHxyLnNjcm9sbFh8fGkuc2Nyb2xsTGVmdHx8MH19Y2hhbmdlKHQ9MjApe3Jl''@;'; put 'put ''dHVybiB0PjA/dGhpcy5fY2hhbmdlLnBpcGUoU29lKHQpKTp0aGlzLl9jaGFuZ2V9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fV91cGRhdGVWaWV3cG9ydFNpemUoKXtjb25zdCB0PXRoaXMuX2dldFdpbmRvdygpO3RoaXMuX3ZpZXdwb3J0''@;'; put 'put ''U2l6ZT10aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/e3dpZHRoOnQuaW5uZXJXaWR0aCxoZWlnaHQ6dC5pbm5lckhlaWdodH06e3dpZHRoOjAsaGVpZ2h0OjB9fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9Sm4oe3Rva2Vu''@;'; put 'put ''Om4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKTtjb25zdCBYU2U9bmV3IEVyKCJWSVJUVUFMX1NDUk9MTEFCTEUiKTtsZXQgUVNlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBLU2V7Y29uc3RydWN0b3IoKXtzdXBlcigpfW1lYXN1cmVWaWV3cG9y''@;'; put 'put ''dFNpemUodCl7Y29uc3Qgcj10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtyZXR1cm4iaG9yaXpvbnRhbCI9PT10P3IuY2xpZW50V2lkdGg6ci5jbGllbnRIZWlnaHR9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1ZGlyPSRy''@;'; put 'put ''KHt0eXBlOm4sZmVhdHVyZXM6W0ZvXX0pfXJldHVybiBufSkoKTtjb25zdCBlNHQ9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZTwidSI/WlNlOlBtdDtsZXQgb009KCgpPT57Y2xhc3MgbiBleHRlbmRzIFFTZXtlbGVtZW50UmVmPXNuKG5vKTtfY2hhbmdlRGV0ZWN0b3JSZWY9c24oVWwp''@;'; put 'put ''O19zY3JvbGxTdHJhdGVneT1zbihxU2Use29wdGlvbmFsOiEwfSk7c2Nyb2xsYWJsZT1zbihYU2Use29wdGlvbmFsOiEwfSk7X3BsYXRmb3JtPXNuKHBEKTtfZGV0YWNoZWRTdWJqZWN0PW5ldyBNcjtfcmVuZGVyZWRSYW5nZVN1YmplY3Q9bmV3IE1yO2dldCBvcmllbnRhdGlvbigpe3JldHVy''@;'; put 'put ''biB0aGlzLl9vcmllbnRhdGlvbn1zZXQgb3JpZW50YXRpb24odCl7dGhpcy5fb3JpZW50YXRpb24hPT10JiYodGhpcy5fb3JpZW50YXRpb249dCx0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCkpfV9vcmllbnRhdGlvbj0idmVydGljYWwiO2FwcGVuZE9ubHk9ITE7c2Nyb2xsZWRJbmRleENo''@;'; put 'put ''YW5nZT1uZXcgaG8odD0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kuc2Nyb2xsZWRJbmRleENoYW5nZS5zdWJzY3JpYmUocj0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5uZ1pvbmUucnVuKCgpPT50Lm5leHQocikpKSkpO19jb250ZW50V3JhcHBlcjtyZW5kZXJlZFJhbmdlU3RyZWFt''@;'; put 'put ''PXRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0O190b3RhbENvbnRlbnRTaXplPTA7X3RvdGFsQ29udGVudFdpZHRoPUIxKCIiKTtfdG90YWxDb250ZW50SGVpZ2h0PUIxKCIiKTtfcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtO19yZW5kZXJlZFJhbmdlPXtzdGFydDowLGVuZDowfTtfZGF0YUxl''@;'; put 'put ''bmd0aD0wO192aWV3cG9ydFNpemU9MDtfZm9yT2Y7X3JlbmRlcmVkQ29udGVudE9mZnNldD0wO19yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITE7X2NoYW5nZURldGVjdGlvbk5lZWRlZD1CMSghMSk7X3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uPVtdO192aWV3cG9ydENoYW5n''@;'; put 'put ''ZXM9QXIuRU1QVFk7X2luamVjdG9yPXNuKE1sKTtfaXNEZXN0cm95ZWQ9ITE7Y29uc3RydWN0b3IoKXtzdXBlcigpO2NvbnN0IHQ9c24oRnopO3RoaXMuX3ZpZXdwb3J0Q2hhbmdlcz10LmNoYW5nZSgpLnN1YnNjcmliZSgoKT0+e3RoaXMuY2hlY2tWaWV3cG9ydFNpemUoKX0pLHRoaXMuc2Ny''@;'; put 'put ''b2xsYWJsZXx8KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay12aXJ0dWFsLXNjcm9sbGFibGUiKSx0aGlzLnNjcm9sbGFibGU9dGhpcyk7Y29uc3Qgcj1mdW5jdGlvbiBVdmUobixlKXtjb25zdCB0PWU/LmluamVjdG9yPz9zbihNbCk7bGV0IGkscj0h''@;'; put 'put ''MCE9PWU/Lm1hbnVhbENsZWFudXA/dC5nZXQoTTIpOm51bGw7Y29uc3Qgbz10LmdldChPQSxudWxsLHtvcHRpb25hbDohMH0pLGE9dC5nZXQobTgpO3JldHVybiBudWxsIT09bz8oaT1mdW5jdGlvbiBHaXQobixlLHQpe2NvbnN0IHI9T2JqZWN0LmNyZWF0ZShaaXQpO3JldHVybiByLnZpZXc9''@;'; put 'put ''bixyLnpvbmU9dHlwZW9mIFpvbmU8InUiP1pvbmUuY3VycmVudDpudWxsLHIubm90aWZpZXI9ZSxyLmZuPVd2ZShyLHQpLG5bMjNdPz89bmV3IFNldCxuWzIzXS5hZGQociksci5jb25zdW1lck1hcmtlZERpcnR5KHIpLHJ9KG8udmlldyxhLG4pLHIgaW5zdGFuY2VvZiBKUCYmci5fbFZpZXc9''@;'; put 'put ''PT1vLnZpZXcmJihyPW51bGwpKTppPWZ1bmN0aW9uICRpdChuLGUsdCl7Y29uc3Qgcj1PYmplY3QuY3JlYXRlKFlpdCk7cmV0dXJuIHIuZm49V3ZlKHIsbiksci5zY2hlZHVsZXI9ZSxyLm5vdGlmaWVyPXQsci56b25lPXR5cGVvZiBab25lPCJ1Ij9ab25lLmN1cnJlbnQ6bnVsbCxyLnNjaGVk''@;'; put 'put ''dWxlci5hZGQociksci5ub3RpZmllci5ub3RpZnkoMTIpLHJ9KG4sdC5nZXQob0gpLGEpLGkuaW5qZWN0b3I9dCxudWxsIT09ciYmKGkub25EZXN0cm95Rm49ci5vbkRlc3Ryb3koKCk9PmkuZGVzdHJveSgpKSksbmV3IFdpdChpKX0oKCk9Pnt0aGlzLl9jaGFuZ2VEZXRlY3Rpb25OZWVkZWQo''@;'; put 'put ''KSYmdGhpcy5fZG9DaGFuZ2VEZXRlY3Rpb24oKX0se2luamVjdG9yOnNuKFdnKS5pbmplY3Rvcn0pO3NuKE0yKS5vbkRlc3Ryb3koKCk9PntyLmRlc3Ryb3koKX0pfW5nT25Jbml0KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYodGhpcy5zY3JvbGxhYmxlPT09dGhpcyYmc3VwZXIubmdP''@;'; put 'put ''bkluaXQoKSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX21lYXN1cmVWaWV3cG9ydFNpemUoKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5hdHRhY2godGhpcyksdGhpcy5zY3JvbGxhYmxlLmVsZW1lbnRTY3JvbGxlZCgp''@;'; put 'put ''LnBpcGUocWcobnVsbCksU29lKDAsZTR0KSx2MCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uQ29udGVudFNjcm9sbGVkKCkpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKX0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRldGFj''@;'; put 'put ''aCgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmRldGFjaCgpLHRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fZGV0YWNoZWRTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnRDaGFuZ2VzLnVuc3Vic2NyaWJlKCksdGhpcy5faXNEZXN0cm95ZWQ9ITAsc3Vw''@;'; put 'put ''ZXIubmdPbkRlc3Ryb3koKX1hdHRhY2godCl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9mb3JPZj10LHRoaXMuX2Zvck9mLmRhdGFTdHJlYW0ucGlwZSh2MCh0aGlzLl9kZXRhY2hlZFN1YmplY3QpKS5zdWJzY3JpYmUocj0+e2NvbnN0IGk9ci5sZW5ndGg7aSE9''@;'; put 'put ''PXRoaXMuX2RhdGFMZW5ndGgmJih0aGlzLl9kYXRhTGVuZ3RoPWksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25EYXRhTGVuZ3RoQ2hhbmdlZCgpKSx0aGlzLl9kb0NoYW5nZURldGVjdGlvbigpfSl9KX1kZXRhY2goKXt0aGlzLl9mb3JPZj1udWxsLHRoaXMuX2RldGFjaGVkU3ViamVjdC5uZXh0''@;'; put 'put ''KCl9Z2V0RGF0YUxlbmd0aCgpe3JldHVybiB0aGlzLl9kYXRhTGVuZ3RofWdldFZpZXdwb3J0U2l6ZSgpe3JldHVybiB0aGlzLl92aWV3cG9ydFNpemV9Z2V0UmVuZGVyZWRSYW5nZSgpe3JldHVybiB0aGlzLl9yZW5kZXJlZFJhbmdlfW1lYXN1cmVCb3VuZGluZ0NsaWVudFJlY3RXaXRoU2Ny''@;'; put 'put ''b2xsT2Zmc2V0KHQpe3JldHVybiB0aGlzLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RdfXNldFRvdGFsQ29udGVudFNpemUodCl7dGhpcy5fdG90YWxDb250ZW50U2l6ZSE9PXQmJih0aGlzLl90b3RhbENvbnRlbnRTaXplPXQsdGhpcy5f''@;'; put 'put ''Y2FsY3VsYXRlU3BhY2VyU2l6ZSgpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKSl9c2V0UmVuZGVyZWRSYW5nZSh0KXsoZnVuY3Rpb24gSm10KG4sZSl7cmV0dXJuIG4uc3RhcnQ9PWUuc3RhcnQmJm4uZW5kPT1lLmVuZH0pKHRoaXMuX3JlbmRlcmVkUmFuZ2UsdCl8fCh0aGlz''@;'; put 'put ''LmFwcGVuZE9ubHkmJih0PXtzdGFydDowLGVuZDpNYXRoLm1heCh0aGlzLl9yZW5kZXJlZFJhbmdlLmVuZCx0LmVuZCl9KSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdC5uZXh0KHRoaXMuX3JlbmRlcmVkUmFuZ2U9dCksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgoKT0+dGhp''@;'; put 'put ''cy5fc2Nyb2xsU3RyYXRlZ3kub25Db250ZW50UmVuZGVyZWQoKSkpfWdldE9mZnNldFRvUmVuZGVyZWRDb250ZW50U3RhcnQoKXtyZXR1cm4gdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlP251bGw6dGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0fXNldFJlbmRlcmVk''@;'; put 'put ''Q29udGVudE9mZnNldCh0LHI9InRvLXN0YXJ0Iil7dD10aGlzLmFwcGVuZE9ubHkmJiJ0by1zdGFydCI9PT1yPzA6dDtjb25zdCBvPSJob3Jpem9udGFsIj09dGhpcy5vcmllbnRhdGlvbixhPW8/IlgiOiJZIjtsZXQgdT1gdHJhbnNsYXRlJHthfSgke051bWJlcigobyYmdGhpcy5kaXImJiJy''@;'; put 'put ''dGwiPT10aGlzLmRpci52YWx1ZT8tMToxKSp0KX1weClgO3RoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldD10LCJ0by1lbmQiPT09ciYmKHUrPWAgdHJhbnNsYXRlJHthfSgtMTAwJSlgLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMCksdGhpcy5fcmVuZGVyZWRD''@;'; put 'put ''b250ZW50VHJhbnNmb3JtIT11JiYodGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtPXUsdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgoKT0+e3RoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT8odGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0LT10aGlz''@;'; put 'put ''Lm1lYXN1cmVSZW5kZXJlZENvbnRlbnRTaXplKCksdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPSExLHRoaXMuc2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0KHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldCkpOnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uUmVuZGVyZWRP''@;'; put 'put ''ZmZzZXRDaGFuZ2VkKCl9KSl9c2Nyb2xsVG9PZmZzZXQodCxyPSJhdXRvIil7Y29uc3QgaT17YmVoYXZpb3I6cn07Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj9pLnN0YXJ0PXQ6aS50b3A9dCx0aGlzLnNjcm9sbGFibGUuc2Nyb2xsVG8oaSl9c2Nyb2xsVG9JbmRleCh0LHI9ImF1''@;'; put 'put ''dG8iKXt0aGlzLl9zY3JvbGxTdHJhdGVneS5zY3JvbGxUb0luZGV4KHQscil9bWVhc3VyZVNjcm9sbE9mZnNldCh0KXtsZXQgcjtyZXR1cm4gcj10aGlzLnNjcm9sbGFibGU9PXRoaXM/aT0+c3VwZXIubWVhc3VyZVNjcm9sbE9mZnNldChpKTppPT50aGlzLnNjcm9sbGFibGUubWVhc3VyZVNj''@;'; put 'put ''cm9sbE9mZnNldChpKSxNYXRoLm1heCgwLHIodD8/KCJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/InN0YXJ0IjoidG9wIikpLXRoaXMubWVhc3VyZVZpZXdwb3J0T2Zmc2V0KCkpfW1lYXN1cmVWaWV3cG9ydE9mZnNldCh0KXtsZXQgcjtjb25zdCBpPSJsZWZ0IixvPSJyaWdodCIs''@;'; put 'put ''YT0icnRsIj09dGhpcy5kaXI/LnZhbHVlO3I9InN0YXJ0Ij09dD9hP286aToiZW5kIj09dD9hP2k6bzp0fHwoImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ibGVmdCI6InRvcCIpO2NvbnN0IGw9dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVCb3VuZGluZ0NsaWVudFJlY3RXaXRoU2Ny''@;'; put 'put ''b2xsT2Zmc2V0KHIpO3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtyXS1sfW1lYXN1cmVSZW5kZXJlZENvbnRlbnRTaXplKCl7Y29uc3QgdD10aGlzLl9jb250ZW50V3JhcHBlci5uYXRpdmVFbGVtZW50O3JldHVybiJob3Jpem9u''@;'; put 'put ''dGFsIj09PXRoaXMub3JpZW50YXRpb24/dC5vZmZzZXRXaWR0aDp0Lm9mZnNldEhlaWdodH1tZWFzdXJlUmFuZ2VTaXplKHQpe3JldHVybiB0aGlzLl9mb3JPZj90aGlzLl9mb3JPZi5tZWFzdXJlUmFuZ2VTaXplKHQsdGhpcy5vcmllbnRhdGlvbik6MH1jaGVja1ZpZXdwb3J0U2l6ZSgpe3Ro''@;'; put 'put ''aXMuX21lYXN1cmVWaWV3cG9ydFNpemUoKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkRhdGFMZW5ndGhDaGFuZ2VkKCl9X21lYXN1cmVWaWV3cG9ydFNpemUoKXt0aGlzLl92aWV3cG9ydFNpemU9dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVWaWV3cG9ydFNpemUodGhpcy5vcmllbnRhdGlvbil9''@;'; put 'put ''X21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQodCl7dCYmdGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb24ucHVzaCh0KSwhTnUodGhpcy5fY2hhbmdlRGV0ZWN0aW9uTmVlZGVkKSYmdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgp''@;'; put 'put ''PT57dGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5fY2hhbmdlRGV0ZWN0aW9uTmVlZGVkLnNldCghMCl9KX0pfSl9X2RvQ2hhbmdlRGV0ZWN0aW9uKCl7dGhpcy5faXNEZXN0cm95ZWR8fHRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygp''@;'; put 'put ''LHRoaXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPXRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSxIOCgoKT0+e3RoaXMuX2NoYW5nZURldGVjdGlvbk5lZWRlZC5zZXQoITEpO2NvbnN0IHQ9dGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb247''@;'; put 'put ''dGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb249W107Zm9yKGNvbnN0IHIgb2YgdClyKCl9LHtpbmplY3Rvcjp0aGlzLl9pbmplY3Rvcn0pfSl9X2NhbGN1bGF0ZVNwYWNlclNpemUoKXt0aGlzLl90b3RhbENvbnRlbnRIZWlnaHQuc2V0KCJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRp''@;'; put 'put ''b24/IiI6YCR7dGhpcy5fdG90YWxDb250ZW50U2l6ZX1weGApLHRoaXMuX3RvdGFsQ29udGVudFdpZHRoLnNldCgiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Ake3RoaXMuX3RvdGFsQ29udGVudFNpemV9cHhgOiIiKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVy''@;'; put 'put ''biBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihyLGkpe2lmKDEmciYmV28oJG10LDcpLDImcil7bGV0IG87Y2kobz11aSgpKSYmKGkuX2NvbnRlbnRXcmFw''@;'; put 'put ''cGVyPW8uZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihyLGkpezImciYmd3IoImNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIiwiaG9yaXpvbnRhbCI9PT1p''@;'; put 'put ''Lm9yaWVudGF0aW9uKSgiY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIiwiaG9yaXpvbnRhbCIhPT1pLm9yaWVudGF0aW9uKX0saW5wdXRzOntvcmllbnRhdGlvbjoib3JpZW50YXRpb24iLGFwcGVuZE9ubHk6WzIsImFwcGVuZE9ubHkiLCJhcHBlbmRPbmx5IixaMF19''@;'; put 'put ''LG91dHB1dHM6e3Njcm9sbGVkSW5kZXhDaGFuZ2U6InNjcm9sbGVkSW5kZXhDaGFuZ2UifSxmZWF0dXJlczpbYm8oW3twcm92aWRlOktTZSx1c2VGYWN0b3J5Oih0LHIpPT50fHxyLGRlcHM6W1tuZXcgdzgsbmV3IHZ5KFhTZSldLG5dfV0pLEZvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6cW10LGRl''@;'; put 'put ''Y2xzOjQsdmFyczo0LGNvbnN0czpbWyJjb250ZW50V3JhcHBlciIsIiJdLFsxLCJjZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyIl0sWzEsImNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXsxJnImJihmbygpLCRSKDAsImRpdiIsMSww''@;'; put 'put ''KSxXcigyKSxxUigpLERqKDMsImRpdiIsMikpLDImciYmKGllKDMpLE8yKCJ3aWR0aCIsaS5fdG90YWxDb250ZW50V2lkdGgoKSkoImhlaWdodCIsaS5fdG90YWxDb250ZW50SGVpZ2h0KCkpKX0sc3R5bGVzOlsiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0e2Rpc3BsYXk6YmxvY2s7cG9z''@;'; put 'put ''aXRpb246cmVsYXRpdmU7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9LmNkay12aXJ0dWFsLXNjcm9sbGFibGV7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTpzY3JvbGwtcG9zaXRpb247Y29udGFpbjpzdHJpY3R9LmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7cG9zaXRpb246''@;'; put 'put ''YWJzb2x1dGU7dG9wOjA7bGVmdDowO2NvbnRhaW46Y29udGVudH1bZGlyPXJ0bF0gLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7cmlnaHQ6MDtsZWZ0OmF1dG99LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwt''@;'; put 'put ''Y29udGVudC13cmFwcGVye21pbi1oZWlnaHQ6MTAwJX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+ZGw6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlv''@;'; put 'put ''bi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPm9sOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj50YWJsZTpub3QoW2Nk''@;'; put 'put ''a1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dWw6bm90KFtjZGtWaXJ0dWFsRm9yXSl7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowO21hcmdpbi1sZWZ0OjA7bWFy''@;'; put 'put ''Z2luLXJpZ2h0OjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MDtvdXRsaW5lOm5vbmV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcnttaW4td2lkdGg6MTAwJX0uY2RrLXZp''@;'; put 'put ''cnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPmRsOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdy''@;'; put 'put ''YXBwZXI+b2w6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj50YWJsZTpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9u''@;'; put 'put ''LXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnVsOm5vdChbY2RrVmlydHVhbEZvcl0pe3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItYm90dG9tLXdp''@;'; put 'put ''ZHRoOjA7b3V0bGluZTpub25lfS5jZGstdmlydHVhbC1zY3JvbGwtc3BhY2Vye2hlaWdodDoxcHg7dHJhbnNmb3JtLW9yaWdpbjowIDA7ZmxleDowIDAgYXV0b31bZGlyPXJ0bF0gLmNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXJ7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDB9XG4iXSxlbmNhcHN1''@;'; put 'put ''bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gSlNlKG4sZSx0KXtpZighdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QpcmV0dXJuIDA7Y29uc3QgaT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiJob3Jpem9udGFsIj09PW4/InN0YXJ0Ij09''@;'; put 'put ''PWU/aS5sZWZ0OmkucmlnaHQ6InN0YXJ0Ij09PWU/aS50b3A6aS5ib3R0b219bGV0IFB6PSgoKT0+e2NsYXNzIG57X3ZpZXdDb250YWluZXJSZWY9c24oRHMpO190ZW1wbGF0ZT1zbihGYyk7X2RpZmZlcnM9c24oYXYpO192aWV3UmVwZWF0ZXI9c24oRW9lKTtfdmlld3BvcnQ9c24ob00se3Nr''@;'; put 'put ''aXBTZWxmOiEwfSk7dmlld0NoYW5nZT1uZXcgTXI7X2RhdGFTb3VyY2VDaGFuZ2VzPW5ldyBNcjtnZXQgY2RrVmlydHVhbEZvck9mKCl7cmV0dXJuIHRoaXMuX2Nka1ZpcnR1YWxGb3JPZn1zZXQgY2RrVmlydHVhbEZvck9mKHQpe3RoaXMuX2Nka1ZpcnR1YWxGb3JPZj10LGZ1bmN0aW9uIFpt''@;'; put 'put ''dChuKXtyZXR1cm4gbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4uY29ubmVjdCYmIShuIGluc3RhbmNlb2YgenJlKX0odCk/dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dCh0KTp0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KG5ldyBHbXQoeEkodCk/dDpBcnJheS5mcm9tKHR8fFtdKSkp''@;'; put 'put ''fV9jZGtWaXJ0dWFsRm9yT2Y7Z2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KCl7cmV0dXJuIHRoaXMuX2Nka1ZpcnR1YWxGb3JUcmFja0J5fXNldCBjZGtWaXJ0dWFsRm9yVHJhY2tCeSh0KXt0aGlzLl9uZWVkc1VwZGF0ZT0hMCx0aGlzLl9jZGtWaXJ0dWFsRm9yVHJhY2tCeT10PyhyLGkpPT50''@;'; put 'put ''KHIrKHRoaXMuX3JlbmRlcmVkUmFuZ2U/dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydDowKSxpKTp2b2lkIDB9X2Nka1ZpcnR1YWxGb3JUcmFja0J5O3NldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGUodCl7dCYmKHRoaXMuX25lZWRzVXBkYXRlPSEwLHRoaXMuX3RlbXBsYXRlPXQpfWdldCBjZGtW''@;'; put 'put ''aXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoKXtyZXR1cm4gdGhpcy5fdmlld1JlcGVhdGVyLnZpZXdDYWNoZVNpemV9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSh0KXt0aGlzLl92aWV3UmVwZWF0ZXIudmlld0NhY2hlU2l6ZT1GYih0KX1kYXRhU3RyZWFtPXRoaXMuX2Rh''@;'; put 'put ''dGFTb3VyY2VDaGFuZ2VzLnBpcGUocWcobnVsbCksZnVuY3Rpb24gVm10KCl7cmV0dXJuIGFkKChuLGUpPT57bGV0IHQscj0hMTtuLnN1YnNjcmliZSh2dShlLGk9Pntjb25zdCBvPXQ7dD1pLHImJmUubmV4dChbbyxpXSkscj0hMH0pKX0pfSgpLG0wKChbdCxyXSk9PnRoaXMuX2NoYW5nZURh''@;'; put 'put ''dGFTb3VyY2UodCxyKSksVlNlKDEpKTtfZGlmZmVyPW51bGw7X2RhdGE7X3JlbmRlcmVkSXRlbXM7X3JlbmRlcmVkUmFuZ2U7X25lZWRzVXBkYXRlPSExO19kZXN0cm95ZWQ9bmV3IE1yO2NvbnN0cnVjdG9yKCl7Y29uc3QgdD1zbihnYSk7dGhpcy5kYXRhU3RyZWFtLnN1YnNjcmliZShyPT57''@;'; put 'put ''dGhpcy5fZGF0YT1yLHRoaXMuX29uUmVuZGVyZWREYXRhQ2hhbmdlKCl9KSx0aGlzLl92aWV3cG9ydC5yZW5kZXJlZFJhbmdlU3RyZWFtLnBpcGUodjAodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKHI9Pnt0aGlzLl9yZW5kZXJlZFJhbmdlPXIsdGhpcy52aWV3Q2hhbmdlLm9ic2VydmVy''@;'; put 'put ''cy5sZW5ndGgmJnQucnVuKCgpPT50aGlzLnZpZXdDaGFuZ2UubmV4dCh0aGlzLl9yZW5kZXJlZFJhbmdlKSksdGhpcy5fb25SZW5kZXJlZERhdGFDaGFuZ2UoKX0pLHRoaXMuX3ZpZXdwb3J0LmF0dGFjaCh0aGlzKX1tZWFzdXJlUmFuZ2VTaXplKHQscil7aWYodC5zdGFydD49dC5lbmQpcmV0''@;'; put 'put ''dXJuIDA7Y29uc3QgaT10LnN0YXJ0LXRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQsbz10LmVuZC10LnN0YXJ0O2xldCBhLGw7Zm9yKGxldCB1PTA7dTxvO3UrKyl7Y29uc3QgZz10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldCh1K2kpO2lmKGcmJmcucm9vdE5vZGVzLmxlbmd0aCl7YT1sPWcu''@;'; put 'put ''cm9vdE5vZGVzWzBdO2JyZWFrfX1mb3IobGV0IHU9by0xO3U+LTE7dS0tKXtjb25zdCBnPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KHUraSk7aWYoZyYmZy5yb290Tm9kZXMubGVuZ3RoKXtsPWcucm9vdE5vZGVzW2cucm9vdE5vZGVzLmxlbmd0aC0xXTticmVha319cmV0dXJuIGEmJmw/''@;'; put 'put ''SlNlKHIsImVuZCIsbCktSlNlKHIsInN0YXJ0IixhKTowfW5nRG9DaGVjaygpe2lmKHRoaXMuX2RpZmZlciYmdGhpcy5fbmVlZHNVcGRhdGUpe2NvbnN0IHQ9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fcmVuZGVyZWRJdGVtcyk7dD90aGlzLl9hcHBseUNoYW5nZXModCk6dGhpcy5fdXBkYXRl''@;'; put 'put ''Q29udGV4dCgpLHRoaXMuX25lZWRzVXBkYXRlPSExfX1uZ09uRGVzdHJveSgpe3RoaXMuX3ZpZXdwb3J0LmRldGFjaCgpLHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQodm9pZCAwKSx0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMudmlld0NoYW5nZS5jb21wbGV0''@;'; put 'put ''ZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fdmlld1JlcGVhdGVyLmRldGFjaCgpfV9vblJlbmRlcmVkRGF0YUNoYW5nZSgpe3RoaXMuX3JlbmRlcmVkUmFuZ2UmJih0aGlzLl9yZW5kZXJlZEl0ZW1zPXRoaXMuX2RhdGEuc2xpY2Uo''@;'; put 'put ''dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCx0aGlzLl9yZW5kZXJlZFJhbmdlLmVuZCksdGhpcy5fZGlmZmVyfHwodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZCh0aGlzLl9yZW5kZXJlZEl0ZW1zKS5jcmVhdGUoKHQscik9PnRoaXMuY2RrVmlydHVhbEZvclRyYWNrQnk/dGhpcy5j''@;'; put 'put ''ZGtWaXJ0dWFsRm9yVHJhY2tCeSh0LHIpOnIpKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMCl9X2NoYW5nZURhdGFTb3VyY2UodCxyKXtyZXR1cm4gdCYmdC5kaXNjb25uZWN0KHRoaXMpLHRoaXMuX25lZWRzVXBkYXRlPSEwLHI/ci5jb25uZWN0KHRoaXMpOlBhKCl9X3VwZGF0ZUNvbnRleHQoKXtj''@;'; put 'put ''b25zdCB0PXRoaXMuX2RhdGEubGVuZ3RoO2xldCByPXRoaXMuX3ZpZXdDb250YWluZXJSZWYubGVuZ3RoO2Zvcig7ci0tOyl7Y29uc3QgaT10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChyKTtpLmNvbnRleHQuaW5kZXg9dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCtyLGkuY29udGV4dC5j''@;'; put 'put ''b3VudD10LHRoaXMuX3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoaS5jb250ZXh0KSxpLmRldGVjdENoYW5nZXMoKX19X2FwcGx5Q2hhbmdlcyh0KXt0aGlzLl92aWV3UmVwZWF0ZXIuYXBwbHlDaGFuZ2VzKHQsdGhpcy5fdmlld0NvbnRhaW5lclJlZiwobyxhLGwpPT50aGlzLl9n''@;'; put 'put ''ZXRFbWJlZGRlZFZpZXdBcmdzKG8sbCksbz0+by5pdGVtKSx0LmZvckVhY2hJZGVudGl0eUNoYW5nZShvPT57dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoby5jdXJyZW50SW5kZXgpLmNvbnRleHQuJGltcGxpY2l0PW8uaXRlbX0pO2NvbnN0IHI9dGhpcy5fZGF0YS5sZW5ndGg7bGV0IGk9''@;'; put 'put ''dGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGg7Zm9yKDtpLS07KXtjb25zdCBvPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KGkpO28uY29udGV4dC5pbmRleD10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0K2ksby5jb250ZXh0LmNvdW50PXIsdGhpcy5fdXBkYXRlQ29tcHV0ZWRDb250''@;'; put 'put ''ZXh0UHJvcGVydGllcyhvLmNvbnRleHQpfX1fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyh0KXt0LmZpcnN0PTA9PT10LmluZGV4LHQubGFzdD10LmluZGV4PT09dC5jb3VudC0xLHQuZXZlbj10LmluZGV4JTI9PTAsdC5vZGQ9IXQuZXZlbn1fZ2V0RW1iZWRkZWRWaWV3QXJncyh0''@;'; put 'put ''LHIpe3JldHVybnt0ZW1wbGF0ZVJlZjp0aGlzLl90ZW1wbGF0ZSxjb250ZXh0OnskaW1wbGljaXQ6dC5pdGVtLGNka1ZpcnR1YWxGb3JPZjp0aGlzLl9jZGtWaXJ0dWFsRm9yT2YsaW5kZXg6LTEsY291bnQ6LTEsZmlyc3Q6ITEsbGFzdDohMSxvZGQ6ITEsZXZlbjohMX0saW5kZXg6cn19c3Rh''@;'; put 'put ''dGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQodCxyKXtyZXR1cm4hMH1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrVmlydHVhbEZvciIsIiIsImNka1ZpcnR1YWxGb3JP''@;'; put 'put ''ZiIsIiJdXSxpbnB1dHM6e2Nka1ZpcnR1YWxGb3JPZjoiY2RrVmlydHVhbEZvck9mIixjZGtWaXJ0dWFsRm9yVHJhY2tCeToiY2RrVmlydHVhbEZvclRyYWNrQnkiLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZToiY2RrVmlydHVhbEZvclRlbXBsYXRlIixjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNo''@;'; put 'put ''ZVNpemU6ImNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSJ9LGZlYXR1cmVzOltibyhbe3Byb3ZpZGU6RW9lLHVzZUNsYXNzOiRTZX1dKV19KX1yZXR1cm4gbn0pKCksdDR0PSgoKT0+e2NsYXNzIG57c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtz''@;'; put 'put ''dGF0aWMgXHUwMjc1bW9kPUdpKHt0eXBlOm59KTtzdGF0aWMgXHUwMjc1aW5qPW1pKHt9KX1yZXR1cm4gbn0pKCk7Y29uc3QgTW9lPXt9O2xldCBuNHQ9KCgpPT57Y2xhc3MgbntfYXBwSWQ9c24oTDkpO2dldElkKHQpe3JldHVybiJuZyIhPT10aGlzLl9hcHBJZCYmKHQrPXRoaXMuX2FwcElk''@;'; put 'put ''KSxNb2UuaGFzT3duUHJvcGVydHkodCl8fChNb2VbdF09MCksYCR7dH0ke01vZVt0XSsrfWB9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJv''@;'; put 'put ''b3QifSl9cmV0dXJuIG59KSgpO2Z1bmN0aW9uIFRvZShuKXtjb25zdCBlPW4uY2xvbmVOb2RlKCEwKSx0PWUucXVlcnlTZWxlY3RvckFsbCgiW2lkXSIpLHI9bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2UucmVtb3ZlQXR0cmlidXRlKCJpZCIpO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsr''@;'; put 'put ''KXRbaV0ucmVtb3ZlQXR0cmlidXRlKCJpZCIpO3JldHVybiJjYW52YXMiPT09cj9uRWUobixlKTooImlucHV0Ij09PXJ8fCJzZWxlY3QiPT09cnx8InRleHRhcmVhIj09PXIpJiZ0RWUobixlKSxlRWUoImNhbnZhcyIsbixlLG5FZSksZUVlKCJpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCIsbixl''@;'; put 'put ''LHRFZSksZX1mdW5jdGlvbiBlRWUobixlLHQscil7Y29uc3QgaT1lLnF1ZXJ5U2VsZWN0b3JBbGwobik7aWYoaS5sZW5ndGgpe2NvbnN0IG89dC5xdWVyeVNlbGVjdG9yQWxsKG4pO2ZvcihsZXQgYT0wO2E8aS5sZW5ndGg7YSsrKXIoaVthXSxvW2FdKX19bGV0IGk0dD0wO2Z1bmN0aW9uIHRF''@;'; put 'put ''ZShuLGUpeyJmaWxlIiE9PWUudHlwZSYmKGUudmFsdWU9bi52YWx1ZSksInJhZGlvIj09PWUudHlwZSYmZS5uYW1lJiYoZS5uYW1lPWBtYXQtY2xvbmUtJHtlLm5hbWV9LSR7aTR0Kyt9YCl9ZnVuY3Rpb24gbkVlKG4sZSl7Y29uc3QgdD1lLmdldENvbnRleHQoIjJkIik7aWYodCl0cnl7dC5k''@;'; put 'put ''cmF3SW1hZ2UobiwwLDApfWNhdGNoe319ZnVuY3Rpb24geG9lKG4pe2NvbnN0IGU9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOmUudG9wLHJpZ2h0OmUucmlnaHQsYm90dG9tOmUuYm90dG9tLGxlZnQ6ZS5sZWZ0LHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0LHg6''@;'; put 'put ''ZS54LHk6ZS55fX1mdW5jdGlvbiBBb2UobixlLHQpe2NvbnN0e3RvcDpyLGJvdHRvbTppLGxlZnQ6byxyaWdodDphfT1uO3JldHVybiB0Pj1yJiZ0PD1pJiZlPj1vJiZlPD1hfWZ1bmN0aW9uIF9EKG4sZSx0KXtuLnRvcCs9ZSxuLmJvdHRvbT1uLnRvcCtuLmhlaWdodCxuLmxlZnQrPXQsbi5y''@;'; put 'put ''aWdodD1uLmxlZnQrbi53aWR0aH1mdW5jdGlvbiByRWUobixlLHQscil7Y29uc3R7dG9wOmkscmlnaHQ6byxib3R0b206YSxsZWZ0Omwsd2lkdGg6dSxoZWlnaHQ6Z309bixFPXUqZSxPPWcqZTtyZXR1cm4gcj5pLU8mJnI8YStPJiZ0PmwtRSYmdDxvK0V9Y2xhc3MgaUVle19kb2N1bWVudDtw''@;'; put 'put ''b3NpdGlvbnM9bmV3IE1hcDtjb25zdHJ1Y3RvcihlKXt0aGlzLl9kb2N1bWVudD1lfWNsZWFyKCl7dGhpcy5wb3NpdGlvbnMuY2xlYXIoKX1jYWNoZShlKXt0aGlzLmNsZWFyKCksdGhpcy5wb3NpdGlvbnMuc2V0KHRoaXMuX2RvY3VtZW50LHtzY3JvbGxQb3NpdGlvbjp0aGlzLmdldFZpZXdw''@;'; put 'put ''b3J0U2Nyb2xsUG9zaXRpb24oKX0pLGUuZm9yRWFjaCh0PT57dGhpcy5wb3NpdGlvbnMuc2V0KHQse3Njcm9sbFBvc2l0aW9uOnt0b3A6dC5zY3JvbGxUb3AsbGVmdDp0LnNjcm9sbExlZnR9LGNsaWVudFJlY3Q6eG9lKHQpfSl9KX1oYW5kbGVTY3JvbGwoZSl7Y29uc3QgdD1SeihlKSxyPXRo''@;'; put 'put ''aXMucG9zaXRpb25zLmdldCh0KTtpZighcilyZXR1cm4gbnVsbDtjb25zdCBpPXIuc2Nyb2xsUG9zaXRpb247bGV0IG8sYTtpZih0PT09dGhpcy5fZG9jdW1lbnQpe2NvbnN0IGc9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCk7bz1nLnRvcCxhPWcubGVmdH1lbHNlIG89dC5zY3Jv''@;'; put 'put ''bGxUb3AsYT10LnNjcm9sbExlZnQ7Y29uc3QgbD1pLnRvcC1vLHU9aS5sZWZ0LWE7cmV0dXJuIHRoaXMucG9zaXRpb25zLmZvckVhY2goKGcsRSk9PntnLmNsaWVudFJlY3QmJnQhPT1FJiZ0LmNvbnRhaW5zKEUpJiZfRChnLmNsaWVudFJlY3QsbCx1KX0pLGkudG9wPW8saS5sZWZ0PWEse3Rv''@;'; put 'put ''cDpsLGxlZnQ6dX19Z2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpe3JldHVybnt0b3A6d2luZG93LnNjcm9sbFksbGVmdDp3aW5kb3cuc2Nyb2xsWH19fWZ1bmN0aW9uIG9FZShuLGUpe2NvbnN0IHQ9bi5yb290Tm9kZXM7aWYoMT09PXQubGVuZ3RoJiZ0WzBdLm5vZGVUeXBlPT09ZS5FTEVN''@;'; put 'put ''RU5UX05PREUpcmV0dXJuIHRbMF07Y29uc3Qgcj1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LmZvckVhY2goaT0+ci5hcHBlbmRDaGlsZChpKSkscn1mdW5jdGlvbiBrb2UobixlLHQpe2ZvcihsZXQgciBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkocikpe2NvbnN0IGk9ZVtyXTtp''@;'; put 'put ''P24uc2V0UHJvcGVydHkocixpLHQ/LmhhcyhyKT8iaW1wb3J0YW50IjoiIik6bi5yZW1vdmVQcm9wZXJ0eShyKX1yZXR1cm4gbn1mdW5jdGlvbiBhTShuLGUpe2NvbnN0IHQ9ZT8iIjoibm9uZSI7a29lKG4uc3R5bGUseyJ0b3VjaC1hY3Rpb24iOmU/IiI6Im5vbmUiLCItd2Via2l0LXVzZXIt''@;'; put 'put ''ZHJhZyI6ZT8iIjoibm9uZSIsIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciI6ZT8iIjoidHJhbnNwYXJlbnQiLCJ1c2VyLXNlbGVjdCI6dCwiLW1zLXVzZXItc2VsZWN0Ijp0LCItd2Via2l0LXVzZXItc2VsZWN0Ijp0LCItbW96LXVzZXItc2VsZWN0Ijp0fSl9ZnVuY3Rpb24gYUVlKG4s''@;'; put 'put ''ZSx0KXtrb2Uobi5zdHlsZSx7cG9zaXRpb246ZT8iIjoiZml4ZWQiLHRvcDplPyIiOiIwIixvcGFjaXR5OmU/IiI6IjAiLGxlZnQ6ZT8iIjoiLTk5OWVtIn0sdCl9ZnVuY3Rpb24gSHoobixlKXtyZXR1cm4gZSYmIm5vbmUiIT1lP24rIiAiK2U6bn1mdW5jdGlvbiBzRWUobixlKXtuLnN0eWxl''@;'; put 'put ''LndpZHRoPWAke2Uud2lkdGh9cHhgLG4uc3R5bGUuaGVpZ2h0PWAke2UuaGVpZ2h0fXB4YCxuLnN0eWxlLnRyYW5zZm9ybT15RChlLmxlZnQsZS50b3ApfWZ1bmN0aW9uIHlEKG4sZSl7cmV0dXJuYHRyYW5zbGF0ZTNkKCR7TWF0aC5yb3VuZChuKX1weCwgJHtNYXRoLnJvdW5kKGUpfXB4LCAw''@;'; put 'put ''KWB9ZnVuY3Rpb24gbEVlKG4pe2NvbnN0IGU9bi50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIm1zIik+LTE/MToxZTM7cmV0dXJuIHBhcnNlRmxvYXQobikqZX1mdW5jdGlvbiBSb2UobixlKXtyZXR1cm4gbi5nZXRQcm9wZXJ0eVZhbHVlKGUpLnNwbGl0KCIsIikubWFwKHI9PnIudHJpbSgpKX1j''@;'; put 'put ''b25zdCBzNHQ9bmV3IFNldChbInBvc2l0aW9uIl0pO2NsYXNzIGw0dHtfZG9jdW1lbnQ7X3Jvb3RFbGVtZW50O19kaXJlY3Rpb247X2luaXRpYWxEb21SZWN0O19wcmV2aWV3VGVtcGxhdGU7X3ByZXZpZXdDbGFzcztfcGlja3VwUG9zaXRpb25PblBhZ2U7X2luaXRpYWxUcmFuc2Zvcm07X3pJ''@;'; put 'put ''bmRleDtfcmVuZGVyZXI7X3ByZXZpZXdFbWJlZGRlZFZpZXc7X3ByZXZpZXc7Z2V0IGVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fcHJldmlld31jb25zdHJ1Y3RvcihlLHQscixpLG8sYSxsLHUsZyxFKXt0aGlzLl9kb2N1bWVudD1lLHRoaXMuX3Jvb3RFbGVtZW50PXQsdGhpcy5fZGlyZWN0aW9u''@;'; put 'put ''PXIsdGhpcy5faW5pdGlhbERvbVJlY3Q9aSx0aGlzLl9wcmV2aWV3VGVtcGxhdGU9byx0aGlzLl9wcmV2aWV3Q2xhc3M9YSx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZT1sLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09dSx0aGlzLl96SW5kZXg9Zyx0aGlzLl9yZW5kZXJlcj1FfWF0dGFjaChl''@;'; put 'put ''KXt0aGlzLl9wcmV2aWV3PXRoaXMuX2NyZWF0ZVByZXZpZXcoKSxlLmFwcGVuZENoaWxkKHRoaXMuX3ByZXZpZXcpLGNFZSh0aGlzLl9wcmV2aWV3KSYmdGhpcy5fcHJldmlldy5zaG93UG9wb3ZlcigpfWRlc3Ryb3koKXt0aGlzLl9wcmV2aWV3LnJlbW92ZSgpLHRoaXMuX3ByZXZpZXdFbWJl''@;'; put 'put ''ZGRlZFZpZXc/LmRlc3Ryb3koKSx0aGlzLl9wcmV2aWV3PXRoaXMuX3ByZXZpZXdFbWJlZGRlZFZpZXc9bnVsbH1zZXRUcmFuc2Zvcm0oZSl7dGhpcy5fcHJldmlldy5zdHlsZS50cmFuc2Zvcm09ZX1nZXRCb3VuZGluZ0NsaWVudFJlY3QoKXtyZXR1cm4gdGhpcy5fcHJldmlldy5nZXRCb3Vu''@;'; put 'put ''ZGluZ0NsaWVudFJlY3QoKX1hZGRDbGFzcyhlKXt0aGlzLl9wcmV2aWV3LmNsYXNzTGlzdC5hZGQoZSl9Z2V0VHJhbnNpdGlvbkR1cmF0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGE0dChuKXtjb25zdCBlPWdldENvbXB1dGVkU3R5bGUobiksdD1Sb2UoZSwidHJhbnNpdGlvbi1wcm9wZXJ0eSIp''@;'; put 'put ''LHI9dC5maW5kKGw9PiJ0cmFuc2Zvcm0iPT09bHx8ImFsbCI9PT1sKTtpZighcilyZXR1cm4gMDtjb25zdCBpPXQuaW5kZXhPZihyKSxvPVJvZShlLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIiksYT1Sb2UoZSwidHJhbnNpdGlvbi1kZWxheSIpO3JldHVybiBsRWUob1tpXSkrbEVlKGFbaV0pfSh0''@;'; put 'put ''aGlzLl9wcmV2aWV3KX1hZGRFdmVudExpc3RlbmVyKGUsdCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLl9wcmV2aWV3LGUsdCl9X2NyZWF0ZVByZXZpZXcoKXtjb25zdCBlPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZSx0PXRoaXMuX3ByZXZpZXdDbGFzcyxyPWU/ZS50ZW1wbGF0''@;'; put 'put ''ZTpudWxsO2xldCBpO2lmKHImJmUpe2NvbnN0IG89ZS5tYXRjaFNpemU/dGhpcy5faW5pdGlhbERvbVJlY3Q6bnVsbCxhPWUudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcocixlLmNvbnRleHQpO2EuZGV0ZWN0Q2hhbmdlcygpLGk9b0VlKGEsdGhpcy5fZG9jdW1lbnQpLHRoaXMu''@;'; put 'put ''X3ByZXZpZXdFbWJlZGRlZFZpZXc9YSxlLm1hdGNoU2l6ZT9zRWUoaSxvKTppLnN0eWxlLnRyYW5zZm9ybT15RCh0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS54LHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnkpfWVsc2UgaT1Ub2UodGhpcy5fcm9vdEVsZW1lbnQpLHNFZShpLHRoaXMu''@;'; put 'put ''X2luaXRpYWxEb21SZWN0KSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtJiYoaS5zdHlsZS50cmFuc2Zvcm09dGhpcy5faW5pdGlhbFRyYW5zZm9ybSk7cmV0dXJuIGtvZShpLnN0eWxlLHsicG9pbnRlci1ldmVudHMiOiJub25lIixtYXJnaW46Y0VlKGkpPyIwIGF1dG8gMCAwIjoiMCIscG9zaXRp''@;'; put 'put ''b246ImZpeGVkIix0b3A6IjAiLGxlZnQ6IjAiLCJ6LWluZGV4Ijp0aGlzLl96SW5kZXgrIiJ9LHM0dCksYU0oaSwhMSksaS5jbGFzc0xpc3QuYWRkKCJjZGstZHJhZy1wcmV2aWV3IiksaS5zZXRBdHRyaWJ1dGUoInBvcG92ZXIiLCJtYW51YWwiKSxpLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlz''@;'; put 'put ''Ll9kaXJlY3Rpb24pLHQmJihBcnJheS5pc0FycmF5KHQpP3QuZm9yRWFjaChvPT5pLmNsYXNzTGlzdC5hZGQobykpOmkuY2xhc3NMaXN0LmFkZCh0KSksaX19ZnVuY3Rpb24gY0VlKG4pe3JldHVybiJzaG93UG9wb3ZlciJpbiBufWNvbnN0IGM0dD17cGFzc2l2ZTohMH0sdUVlPXtwYXNzaXZl''@;'; put 'put ''OiExfSx1NHQ9e3Bhc3NpdmU6ITEsY2FwdHVyZTohMH0sZEVlPSJjZGstZHJhZy1wbGFjZWhvbGRlciIsaEVlPW5ldyBTZXQoWyJwb3NpdGlvbiJdKTtjbGFzcyBoNHR7X2NvbmZpZztfZG9jdW1lbnQ7X25nWm9uZTtfdmlld3BvcnRSdWxlcjtfZHJhZ0Ryb3BSZWdpc3RyeTtfcmVuZGVyZXI7''@;'; put 'put ''X3Jvb3RFbGVtZW50Q2xlYW51cHM7X2NsZWFudXBTaGFkb3dSb290U2VsZWN0U3RhcnQ7X3ByZXZpZXc7X3ByZXZpZXdDb250YWluZXI7X3BsYWNlaG9sZGVyUmVmO19wbGFjZWhvbGRlcjtfcGlja3VwUG9zaXRpb25JbkVsZW1lbnQ7X3BpY2t1cFBvc2l0aW9uT25QYWdlO19tYXJrZXI7X2Fu''@;'; put 'put ''Y2hvcj1udWxsO19wYXNzaXZlVHJhbnNmb3JtPXt4OjAseTowfTtfYWN0aXZlVHJhbnNmb3JtPXt4OjAseTowfTtfaW5pdGlhbFRyYW5zZm9ybTtfaGFzU3RhcnRlZERyYWdnaW5nPUIxKCExKTtfaGFzTW92ZWQ7X2luaXRpYWxDb250YWluZXI7X2luaXRpYWxJbmRleDtfcGFyZW50UG9zaXRp''@;'; put 'put ''b25zO19tb3ZlRXZlbnRzPW5ldyBNcjtfcG9pbnRlckRpcmVjdGlvbkRlbHRhO19wb2ludGVyUG9zaXRpb25BdExhc3REaXJlY3Rpb25DaGFuZ2U7X2xhc3RLbm93blBvaW50ZXJQb3NpdGlvbjtfcm9vdEVsZW1lbnQ7X293bmVyU1ZHRWxlbWVudDtfcm9vdEVsZW1lbnRUYXBIaWdobGlnaHQ7''@;'; put 'put ''X3BvaW50ZXJNb3ZlU3Vic2NyaXB0aW9uPUFyLkVNUFRZO19wb2ludGVyVXBTdWJzY3JpcHRpb249QXIuRU1QVFk7X3Njcm9sbFN1YnNjcmlwdGlvbj1Bci5FTVBUWTtfcmVzaXplU3Vic2NyaXB0aW9uPUFyLkVNUFRZO19sYXN0VG91Y2hFdmVudFRpbWU7X2RyYWdTdGFydFRpbWU7X2JvdW5k''@;'; put 'put ''YXJ5RWxlbWVudD1udWxsO19uYXRpdmVJbnRlcmFjdGlvbnNFbmFibGVkPSEwO19pbml0aWFsRG9tUmVjdDtfcHJldmlld1JlY3Q7X2JvdW5kYXJ5UmVjdDtfcHJldmlld1RlbXBsYXRlO19wbGFjZWhvbGRlclRlbXBsYXRlO19oYW5kbGVzPVtdO19kaXNhYmxlZEhhbmRsZXM9bmV3IFNldDtf''@;'; put 'put ''ZHJvcENvbnRhaW5lcjtfZGlyZWN0aW9uPSJsdHIiO19wYXJlbnREcmFnUmVmO19jYWNoZWRTaGFkb3dSb290O2xvY2tBeGlzPW51bGw7ZHJhZ1N0YXJ0RGVsYXk9MDtwcmV2aWV3Q2xhc3M7c2NhbGU9MTtnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fCEoIXRoaXMuX2Ry''@;'; put 'put ''b3BDb250YWluZXJ8fCF0aGlzLl9kcm9wQ29udGFpbmVyLmRpc2FibGVkKX1zZXQgZGlzYWJsZWQoZSl7ZSE9PXRoaXMuX2Rpc2FibGVkJiYodGhpcy5fZGlzYWJsZWQ9ZSx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCksdGhpcy5faGFuZGxlcy5mb3JFYWNoKHQ9PmFNKHQs''@;'; put 'put ''ZSkpKX1fZGlzYWJsZWQ9ITE7YmVmb3JlU3RhcnRlZD1uZXcgTXI7c3RhcnRlZD1uZXcgTXI7cmVsZWFzZWQ9bmV3IE1yO2VuZGVkPW5ldyBNcjtlbnRlcmVkPW5ldyBNcjtleGl0ZWQ9bmV3IE1yO2Ryb3BwZWQ9bmV3IE1yO21vdmVkPXRoaXMuX21vdmVFdmVudHM7ZGF0YTtjb25zdHJhaW5Q''@;'; put 'put ''b3NpdGlvbjtjb25zdHJ1Y3RvcihlLHQscixpLG8sYSxsKXt0aGlzLl9jb25maWc9dCx0aGlzLl9kb2N1bWVudD1yLHRoaXMuX25nWm9uZT1pLHRoaXMuX3ZpZXdwb3J0UnVsZXI9byx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5PWEsdGhpcy5fcmVuZGVyZXI9bCx0aGlzLndpdGhSb290RWxlbWVu''@;'; put 'put ''dChlKS53aXRoUGFyZW50KHQucGFyZW50RHJhZ1JlZnx8bnVsbCksdGhpcy5fcGFyZW50UG9zaXRpb25zPW5ldyBpRWUociksYS5yZWdpc3RlckRyYWdJdGVtKHRoaXMpfWdldFBsYWNlaG9sZGVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9wbGFjZWhvbGRlcn1nZXRSb290RWxlbWVudCgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9yb290RWxlbWVudH1nZXRWaXNpYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlzRHJhZ2dpbmcoKT90aGlzLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpOnRoaXMuZ2V0Um9vdEVsZW1lbnQoKX13aXRoSGFuZGxlcyhlKXt0aGlzLl9oYW5kbGVzPWUubWFwKHI9Pm43KHIpKSx0''@;'; put 'put ''aGlzLl9oYW5kbGVzLmZvckVhY2gocj0+YU0ocix0aGlzLmRpc2FibGVkKSksdGhpcy5fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpO2NvbnN0IHQ9bmV3IFNldDtyZXR1cm4gdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmZvckVhY2gocj0+e3RoaXMuX2hhbmRsZXMuaW5kZXhPZihyKT4t''@;'; put 'put ''MSYmdC5hZGQocil9KSx0aGlzLl9kaXNhYmxlZEhhbmRsZXM9dCx0aGlzfXdpdGhQcmV2aWV3VGVtcGxhdGUoZSl7cmV0dXJuIHRoaXMuX3ByZXZpZXdUZW1wbGF0ZT1lLHRoaXN9d2l0aFBsYWNlaG9sZGVyVGVtcGxhdGUoZSl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU9ZSx0''@;'; put 'put ''aGlzfXdpdGhSb290RWxlbWVudChlKXtjb25zdCB0PW43KGUpO2lmKHQhPT10aGlzLl9yb290RWxlbWVudCl7dGhpcy5fcmVtb3ZlUm9vdEVsZW1lbnRMaXN0ZW5lcnMoKTtjb25zdCByPXRoaXMuX3JlbmRlcmVyO3RoaXMuX3Jvb3RFbGVtZW50Q2xlYW51cHM9dGhpcy5fbmdab25lLnJ1bk91''@;'; put 'put ''dHNpZGVBbmd1bGFyKCgpPT5bci5saXN0ZW4odCwibW91c2Vkb3duIix0aGlzLl9wb2ludGVyRG93bix1RWUpLHIubGlzdGVuKHQsInRvdWNoc3RhcnQiLHRoaXMuX3BvaW50ZXJEb3duLGM0dCksci5saXN0ZW4odCwiZHJhZ3N0YXJ0Iix0aGlzLl9uYXRpdmVEcmFnU3RhcnQsdUVlKV0pLHRo''@;'; put 'put ''aXMuX2luaXRpYWxUcmFuc2Zvcm09dm9pZCAwLHRoaXMuX3Jvb3RFbGVtZW50PXR9cmV0dXJuIHR5cGVvZiBTVkdFbGVtZW50PCJ1IiYmdGhpcy5fcm9vdEVsZW1lbnQgaW5zdGFuY2VvZiBTVkdFbGVtZW50JiYodGhpcy5fb3duZXJTVkdFbGVtZW50PXRoaXMuX3Jvb3RFbGVtZW50Lm93bmVy''@;'; put 'put ''U1ZHRWxlbWVudCksdGhpc313aXRoQm91bmRhcnlFbGVtZW50KGUpe3JldHVybiB0aGlzLl9ib3VuZGFyeUVsZW1lbnQ9ZT9uNyhlKTpudWxsLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLGUmJih0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249dGhpcy5fdmlld3BvcnRS''@;'; put 'put ''dWxlci5jaGFuZ2UoMTApLnN1YnNjcmliZSgoKT0+dGhpcy5fY29udGFpbkluc2lkZUJvdW5kYXJ5T25SZXNpemUoKSkpLHRoaXN9d2l0aFBhcmVudChlKXtyZXR1cm4gdGhpcy5fcGFyZW50RHJhZ1JlZj1lLHRoaXN9ZGlzcG9zZSgpe3RoaXMuX3JlbW92ZVJvb3RFbGVtZW50TGlzdGVuZXJz''@;'; put 'put ''KCksdGhpcy5pc0RyYWdnaW5nKCkmJnRoaXMuX3Jvb3RFbGVtZW50Py5yZW1vdmUoKSx0aGlzLl9tYXJrZXI/LnJlbW92ZSgpLHRoaXMuX2Rlc3Ryb3lQcmV2aWV3KCksdGhpcy5fZGVzdHJveVBsYWNlaG9sZGVyKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5yZW1vdmVEcmFnSXRlbSh0aGlz''@;'; put 'put ''KSx0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKSx0aGlzLmJlZm9yZVN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnJlbGVhc2VkLmNvbXBsZXRlKCksdGhpcy5lbmRlZC5jb21wbGV0ZSgpLHRoaXMuZW50ZXJlZC5jb21wbGV0ZSgpLHRoaXMuZXhpdGVkLmNv''@;'; put 'put ''bXBsZXRlKCksdGhpcy5kcm9wcGVkLmNvbXBsZXRlKCksdGhpcy5fbW92ZUV2ZW50cy5jb21wbGV0ZSgpLHRoaXMuX2hhbmRsZXM9W10sdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmNsZWFyKCksdGhpcy5fZHJvcENvbnRhaW5lcj12b2lkIDAsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vi''@;'; put 'put ''c2NyaWJlKCksdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFyKCksdGhpcy5fYm91bmRhcnlFbGVtZW50PXRoaXMuX3Jvb3RFbGVtZW50PXRoaXMuX293bmVyU1ZHRWxlbWVudD10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZT10aGlzLl9tYXJrZXI9dGhp''@;'; put 'put ''cy5fcGFyZW50RHJhZ1JlZj1udWxsfWlzRHJhZ2dpbmcoKXtyZXR1cm4gdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nKCkmJnRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyh0aGlzKX1yZXNldCgpe3RoaXMuX3Jvb3RFbGVtZW50LnN0eWxlLnRyYW5zZm9ybT10aGlzLl9pbml0aWFs''@;'; put 'put ''VHJhbnNmb3JtfHwiIix0aGlzLl9hY3RpdmVUcmFuc2Zvcm09e3g6MCx5OjB9LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm09e3g6MCx5OjB9fXJlc2V0VG9Cb3VuZGFyeSgpe2lmKHRoaXMuX2JvdW5kYXJ5RWxlbWVudCYmdGhpcy5fcm9vdEVsZW1lbnQmJmZ1bmN0aW9uIG80dChuLGUpe3JldHVy''@;'; put 'put ''biBlLmxlZnQ8bi5sZWZ0fHxlLmxlZnQrZS53aWR0aD5uLnJpZ2h0fHxlLnRvcDxuLnRvcHx8ZS50b3ArZS5oZWlnaHQ+bi5ib3R0b219KHRoaXMuX2JvdW5kYXJ5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qo''@;'; put 'put ''KSkpe2NvbnN0IGU9dGhpcy5fYm91bmRhcnlFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHQ9dGhpcy5fcm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IHI9MCxpPTA7dC5sZWZ0PGUubGVmdD9yPWUubGVmdC10LmxlZnQ6dC5yaWdodD5lLnJpZ2h0JiYocj1l''@;'; put 'put ''LnJpZ2h0LXQucmlnaHQpLHQudG9wPGUudG9wP2k9ZS50b3AtdC50b3A6dC5ib3R0b20+ZS5ib3R0b20mJihpPWUuYm90dG9tLXQuYm90dG9tKTtsZXQgbD10aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueCtyLHU9dGhpcy5fYWN0aXZlVHJhbnNmb3JtLnkraTt0aGlzLl9yb290RWxlbWVudC5zdHls''@;'; put 'put ''ZS50cmFuc2Zvcm09eUQobCx1KSx0aGlzLl9hY3RpdmVUcmFuc2Zvcm09e3g6bCx5OnV9LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm09e3g6bCx5OnV9fX1kaXNhYmxlSGFuZGxlKGUpeyF0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKGUpJiZ0aGlzLl9oYW5kbGVzLmluZGV4T2YoZSk+LTEmJih0''@;'; put 'put ''aGlzLl9kaXNhYmxlZEhhbmRsZXMuYWRkKGUpLGFNKGUsITApKX1lbmFibGVIYW5kbGUoZSl7dGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhlKSYmKHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5kZWxldGUoZSksYU0oZSx0aGlzLmRpc2FibGVkKSl9d2l0aERpcmVjdGlvbihlKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fZGlyZWN0aW9uPWUsdGhpc31fd2l0aERyb3BDb250YWluZXIoZSl7dGhpcy5fZHJvcENvbnRhaW5lcj1lfWdldEZyZWVEcmFnUG9zaXRpb24oKXtjb25zdCBlPXRoaXMuaXNEcmFnZ2luZygpP3RoaXMuX2FjdGl2ZVRyYW5zZm9ybTp0aGlzLl9wYXNzaXZlVHJhbnNmb3JtO3JldHVybnt4''@;'; put 'put ''OmUueCx5OmUueX19c2V0RnJlZURyYWdQb3NpdGlvbihlKXtyZXR1cm4gdGhpcy5fYWN0aXZlVHJhbnNmb3JtPXt4OjAseTowfSx0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLng9ZS54LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueT1lLnksdGhpcy5fZHJvcENvbnRhaW5lcnx8dGhpcy5fYXBwbHlS''@;'; put 'put ''b290RWxlbWVudFRyYW5zZm9ybShlLngsZS55KSx0aGlzfXdpdGhQcmV2aWV3Q29udGFpbmVyKGUpe3JldHVybiB0aGlzLl9wcmV2aWV3Q29udGFpbmVyPWUsdGhpc31fc29ydEZyb21MYXN0UG9pbnRlclBvc2l0aW9uKCl7Y29uc3QgZT10aGlzLl9sYXN0S25vd25Qb2ludGVyUG9zaXRpb247''@;'; put 'put ''ZSYmdGhpcy5fZHJvcENvbnRhaW5lciYmdGhpcy5fdXBkYXRlQWN0aXZlRHJvcENvbnRhaW5lcih0aGlzLl9nZXRDb25zdHJhaW5lZFBvaW50ZXJQb3NpdGlvbihlKSxlKX1fcmVtb3ZlTGlzdGVuZXJzKCl7dGhpcy5fcG9pbnRlck1vdmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlz''@;'; put 'put ''Ll9wb2ludGVyVXBTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9jbGVhbnVwU2hhZG93Um9vdFNlbGVjdFN0YXJ0Py4oKSx0aGlzLl9jbGVhbnVwU2hhZG93Um9vdFNlbGVjdFN0YXJ0PXZvaWQgMH1fZGVzdHJv''@;'; put 'put ''eVByZXZpZXcoKXt0aGlzLl9wcmV2aWV3Py5kZXN0cm95KCksdGhpcy5fcHJldmlldz1udWxsfV9kZXN0cm95UGxhY2Vob2xkZXIoKXt0aGlzLl9hbmNob3I/LnJlbW92ZSgpLHRoaXMuX3BsYWNlaG9sZGVyPy5yZW1vdmUoKSx0aGlzLl9wbGFjZWhvbGRlclJlZj8uZGVzdHJveSgpLHRoaXMu''@;'; put 'put ''X3BsYWNlaG9sZGVyPXRoaXMuX2FuY2hvcj10aGlzLl9wbGFjZWhvbGRlclJlZj1udWxsfV9wb2ludGVyRG93bj1lPT57aWYodGhpcy5iZWZvcmVTdGFydGVkLm5leHQoKSx0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3QgdD10aGlzLl9nZXRUYXJnZXRIYW5kbGUoZSk7dCYmIXRoaXMuX2Rp''@;'; put 'put ''c2FibGVkSGFuZGxlcy5oYXModCkmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLl9pbml0aWFsaXplRHJhZ1NlcXVlbmNlKHQsZSl9ZWxzZSB0aGlzLmRpc2FibGVkfHx0aGlzLl9pbml0aWFsaXplRHJhZ1NlcXVlbmNlKHRoaXMuX3Jvb3RFbGVtZW50LGUpfTtfcG9pbnRlck1vdmU9ZT0+e2NvbnN0''@;'; put 'put ''IHQ9dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGUpO2lmKCF0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmcoKSl7aWYoTWF0aC5hYnModC54LXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngpK01hdGguYWJzKHQueS10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55KT49dGhpcy5f''@;'; put 'put ''Y29uZmlnLmRyYWdTdGFydFRocmVzaG9sZCl7Y29uc3QgbD1EYXRlLm5vdygpPj10aGlzLl9kcmFnU3RhcnRUaW1lK3RoaXMuX2dldERyYWdTdGFydERlbGF5KGUpLHU9dGhpcy5fZHJvcENvbnRhaW5lcjtpZighbClyZXR1cm4gdm9pZCB0aGlzLl9lbmREcmFnU2VxdWVuY2UoZSk7KCF1fHwh''@;'; put 'put ''dS5pc0RyYWdnaW5nKCkmJiF1LmlzUmVjZWl2aW5nKCkpJiYoZS5jYW5jZWxhYmxlJiZlLnByZXZlbnREZWZhdWx0KCksdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nLnNldCghMCksdGhpcy5fbmdab25lLnJ1bigoKT0+dGhpcy5fc3RhcnREcmFnU2VxdWVuY2UoZSkpKX1yZXR1cm59ZS5jYW5j''@;'; put 'put ''ZWxhYmxlJiZlLnByZXZlbnREZWZhdWx0KCk7Y29uc3Qgcj10aGlzLl9nZXRDb25zdHJhaW5lZFBvaW50ZXJQb3NpdGlvbih0KTtpZih0aGlzLl9oYXNNb3ZlZD0hMCx0aGlzLl9sYXN0S25vd25Qb2ludGVyUG9zaXRpb249dCx0aGlzLl91cGRhdGVQb2ludGVyRGlyZWN0aW9uRGVsdGEociks''@;'; put 'put ''dGhpcy5fZHJvcENvbnRhaW5lcil0aGlzLl91cGRhdGVBY3RpdmVEcm9wQ29udGFpbmVyKHIsdCk7ZWxzZXtjb25zdCBpPXRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5faW5pdGlhbERvbVJlY3Q6dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2Usbz10aGlzLl9hY3RpdmVUcmFuc2Zvcm07''@;'; put 'put ''by54PXIueC1pLngrdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54LG8ueT1yLnktaS55K3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueSx0aGlzLl9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKG8ueCxvLnkpfXRoaXMuX21vdmVFdmVudHMub2JzZXJ2ZXJzLmxlbmd0aCYmdGhpcy5fbmdab25lLnJ1''@;'; put 'put ''bigoKT0+e3RoaXMuX21vdmVFdmVudHMubmV4dCh7c291cmNlOnRoaXMscG9pbnRlclBvc2l0aW9uOnIsZXZlbnQ6ZSxkaXN0YW5jZTp0aGlzLl9nZXREcmFnRGlzdGFuY2UociksZGVsdGE6dGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRhfSl9KX07X3BvaW50ZXJVcD1lPT57dGhpcy5fZW5k''@;'; put 'put ''RHJhZ1NlcXVlbmNlKGUpfTtfZW5kRHJhZ1NlcXVlbmNlKGUpe2lmKHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyh0aGlzKSYmKHRoaXMuX3JlbW92ZUxpc3RlbmVycygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RvcERyYWdnaW5nKHRoaXMpLHRoaXMuX3RvZ2dsZU5hdGl2''@;'; put 'put ''ZURyYWdJbnRlcmFjdGlvbnMoKSx0aGlzLl9oYW5kbGVzJiYodGhpcy5fcm9vdEVsZW1lbnQuc3R5bGUud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I9dGhpcy5fcm9vdEVsZW1lbnRUYXBIaWdobGlnaHQpLHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZygpKSlpZih0aGlzLnJlbGVhc2VkLm5leHQo''@;'; put 'put ''e3NvdXJjZTp0aGlzLGV2ZW50OmV9KSx0aGlzLl9kcm9wQ29udGFpbmVyKXRoaXMuX2Ryb3BDb250YWluZXIuX3N0b3BTY3JvbGxpbmcoKSx0aGlzLl9hbmltYXRlUHJldmlld1RvUGxhY2Vob2xkZXIoKS50aGVuKCgpPT57dGhpcy5fY2xlYW51cERyYWdBcnRpZmFjdHMoZSksdGhpcy5fY2xl''@;'; put 'put ''YW51cENhY2hlZERpbWVuc2lvbnMoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0b3BEcmFnZ2luZyh0aGlzKX0pO2Vsc2V7dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54PXRoaXMuX2FjdGl2ZVRyYW5zZm9ybS54O2NvbnN0IHQ9dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGUpO3Ro''@;'; put 'put ''aXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueT10aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueSx0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5lbmRlZC5uZXh0KHtzb3VyY2U6dGhpcyxkaXN0YW5jZTp0aGlzLl9nZXREcmFnRGlzdGFuY2UodCksZHJvcFBvaW50OnQsZXZlbnQ6ZX0pfSksdGhpcy5fY2xl''@;'; put 'put ''YW51cENhY2hlZERpbWVuc2lvbnMoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0b3BEcmFnZ2luZyh0aGlzKX19X3N0YXJ0RHJhZ1NlcXVlbmNlKGUpe2JEKGUpJiYodGhpcy5fbGFzdFRvdWNoRXZlbnRUaW1lPURhdGUubm93KCkpLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlv''@;'; put 'put ''bnMoKTtjb25zdCB0PXRoaXMuX2dldFNoYWRvd1Jvb3QoKSxyPXRoaXMuX2Ryb3BDb250YWluZXI7aWYodCYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fY2xlYW51cFNoYWRvd1Jvb3RTZWxlY3RTdGFydD10aGlzLl9yZW5kZXJlci5saXN0ZW4odCwic2VsZWN0''@;'; put 'put ''c3RhcnQiLGY0dCx1NHQpfSkscil7Y29uc3QgaT10aGlzLl9yb290RWxlbWVudCxvPWkucGFyZW50Tm9kZSxhPXRoaXMuX3BsYWNlaG9sZGVyPXRoaXMuX2NyZWF0ZVBsYWNlaG9sZGVyRWxlbWVudCgpLGw9dGhpcy5fbWFya2VyPXRoaXMuX21hcmtlcnx8dGhpcy5fZG9jdW1lbnQuY3JlYXRl''@;'; put 'put ''Q29tbWVudCgiIik7by5pbnNlcnRCZWZvcmUobCxpKSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtPWkuc3R5bGUudHJhbnNmb3JtfHwiIix0aGlzLl9wcmV2aWV3PW5ldyBsNHQodGhpcy5fZG9jdW1lbnQsdGhpcy5fcm9vdEVsZW1lbnQsdGhpcy5fZGlyZWN0aW9uLHRoaXMuX2luaXRpYWxEb21S''@;'; put 'put ''ZWN0LHRoaXMuX3ByZXZpZXdUZW1wbGF0ZXx8bnVsbCx0aGlzLnByZXZpZXdDbGFzc3x8bnVsbCx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtLHRoaXMuX2NvbmZpZy56SW5kZXh8fDFlMyx0aGlzLl9yZW5kZXJlciksdGhpcy5fcHJldmlldy5hdHRh''@;'; put 'put ''Y2godGhpcy5fZ2V0UHJldmlld0luc2VydGlvblBvaW50KG8sdCkpLGFFZShpLCExLGhFZSksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvLnJlcGxhY2VDaGlsZChhLGkpKSx0aGlzLnN0YXJ0ZWQubmV4dCh7c291cmNlOnRoaXMsZXZlbnQ6ZX0pLHIuc3RhcnQoKSx0aGlzLl9p''@;'; put 'put ''bml0aWFsQ29udGFpbmVyPXIsdGhpcy5faW5pdGlhbEluZGV4PXIuZ2V0SXRlbUluZGV4KHRoaXMpfWVsc2UgdGhpcy5zdGFydGVkLm5leHQoe3NvdXJjZTp0aGlzLGV2ZW50OmV9KSx0aGlzLl9pbml0aWFsQ29udGFpbmVyPXRoaXMuX2luaXRpYWxJbmRleD12b2lkIDA7dGhpcy5fcGFyZW50''@;'; put 'put ''UG9zaXRpb25zLmNhY2hlKHI/ci5nZXRTY3JvbGxhYmxlUGFyZW50cygpOltdKX1faW5pdGlhbGl6ZURyYWdTZXF1ZW5jZShlLHQpe3RoaXMuX3BhcmVudERyYWdSZWYmJnQuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3Qgcj10aGlzLmlzRHJhZ2dpbmcoKSxpPWJEKHQpLG89IWkmJjAhPT10LmJ1''@;'; put 'put ''dHRvbixhPXRoaXMuX3Jvb3RFbGVtZW50LGw9UnoodCksdT0haSYmdGhpcy5fbGFzdFRvdWNoRXZlbnRUaW1lJiZ0aGlzLl9sYXN0VG91Y2hFdmVudFRpbWUrODAwPkRhdGUubm93KCksZz1pP2Z1bmN0aW9uIGttdChuKXtjb25zdCBlPW4udG91Y2hlcyYmbi50b3VjaGVzWzBdfHxuLmNoYW5n''@;'; put 'put ''ZWRUb3VjaGVzJiZuLmNoYW5nZWRUb3VjaGVzWzBdO3JldHVybiEoIWV8fC0xIT09ZS5pZGVudGlmaWVyfHxudWxsIT1lLnJhZGl1c1gmJjEhPT1lLnJhZGl1c1h8fG51bGwhPWUucmFkaXVzWSYmMSE9PWUucmFkaXVzWSl9KHQpOmZ1bmN0aW9uIEFtdChuKXtyZXR1cm4gMD09PW4uYnV0dG9u''@;'; put 'put ''c3x8MD09PW4uZGV0YWlsfSh0KTtpZihsJiZsLmRyYWdnYWJsZSYmIm1vdXNlZG93biI9PT10LnR5cGUmJnQucHJldmVudERlZmF1bHQoKSxyfHxvfHx1fHxnKXJldHVybjtpZih0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3QgWj1hLnN0eWxlO3RoaXMuX3Jvb3RFbGVtZW50VGFwSGlnaGxp''@;'; put 'put ''Z2h0PVoud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3J8fCIiLFoud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I9InRyYW5zcGFyZW50In10aGlzLl9oYXNNb3ZlZD0hMSx0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmcuc2V0KHRoaXMuX2hhc01vdmVkKSx0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKSx0aGlz''@;'; put 'put ''Ll9pbml0aWFsRG9tUmVjdD10aGlzLl9yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9wb2ludGVyTW92ZVN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnBvaW50ZXJNb3ZlLnN1YnNjcmliZSh0aGlzLl9wb2ludGVyTW92ZSksdGhpcy5fcG9pbnRl''@;'; put 'put ''clVwU3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucG9pbnRlclVwLnN1YnNjcmliZSh0aGlzLl9wb2ludGVyVXApLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnNjcm9sbGVkKHRoaXMuX2dldFNoYWRvd1Jvb3QoKSkuc3Vic2NyaWJl''@;'; put 'put ''KFo9PnRoaXMuX3VwZGF0ZU9uU2Nyb2xsKFopKSx0aGlzLl9ib3VuZGFyeUVsZW1lbnQmJih0aGlzLl9ib3VuZGFyeVJlY3Q9eG9lKHRoaXMuX2JvdW5kYXJ5RWxlbWVudCkpO2NvbnN0IEU9dGhpcy5fcHJldmlld1RlbXBsYXRlO3RoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50PUUmJkUu''@;'; put 'put ''dGVtcGxhdGUmJiFFLm1hdGNoU2l6ZT97eDowLHk6MH06dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uSW5FbGVtZW50KHRoaXMuX2luaXRpYWxEb21SZWN0LGUsdCk7Y29uc3QgTz10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZT10aGlzLl9sYXN0S25vd25Qb2ludGVyUG9zaXRpb249dGhpcy5f''@;'; put 'put ''Z2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKHQpO3RoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0YT17eDowLHk6MH0sdGhpcy5fcG9pbnRlclBvc2l0aW9uQXRMYXN0RGlyZWN0aW9uQ2hhbmdlPXt4Ok8ueCx5Ok8ueX0sdGhpcy5fZHJhZ1N0YXJ0VGltZT1EYXRlLm5vdygpLHRoaXMuX2RyYWdE''@;'; put 'put ''cm9wUmVnaXN0cnkuc3RhcnREcmFnZ2luZyh0aGlzLHQpfV9jbGVhbnVwRHJhZ0FydGlmYWN0cyhlKXthRWUodGhpcy5fcm9vdEVsZW1lbnQsITAsaEVlKSx0aGlzLl9tYXJrZXIucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcy5fcm9vdEVsZW1lbnQsdGhpcy5fbWFya2VyKSx0aGlzLl9k''@;'; put 'put ''ZXN0cm95UHJldmlldygpLHRoaXMuX2Rlc3Ryb3lQbGFjZWhvbGRlcigpLHRoaXMuX2luaXRpYWxEb21SZWN0PXRoaXMuX2JvdW5kYXJ5UmVjdD10aGlzLl9wcmV2aWV3UmVjdD10aGlzLl9pbml0aWFsVHJhbnNmb3JtPXZvaWQgMCx0aGlzLl9uZ1pvbmUucnVuKCgpPT57Y29uc3QgdD10aGlz''@;'; put 'put ''Ll9kcm9wQ29udGFpbmVyLHI9dC5nZXRJdGVtSW5kZXgodGhpcyksaT10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UoZSksbz10aGlzLl9nZXREcmFnRGlzdGFuY2UoaSksYT10Ll9pc092ZXJDb250YWluZXIoaS54LGkueSk7dGhpcy5lbmRlZC5uZXh0KHtzb3VyY2U6dGhpcyxkaXN0''@;'; put 'put ''YW5jZTpvLGRyb3BQb2ludDppLGV2ZW50OmV9KSx0aGlzLmRyb3BwZWQubmV4dCh7aXRlbTp0aGlzLGN1cnJlbnRJbmRleDpyLHByZXZpb3VzSW5kZXg6dGhpcy5faW5pdGlhbEluZGV4LGNvbnRhaW5lcjp0LHByZXZpb3VzQ29udGFpbmVyOnRoaXMuX2luaXRpYWxDb250YWluZXIsaXNQb2lu''@;'; put 'put ''dGVyT3ZlckNvbnRhaW5lcjphLGRpc3RhbmNlOm8sZHJvcFBvaW50OmksZXZlbnQ6ZX0pLHQuZHJvcCh0aGlzLHIsdGhpcy5faW5pdGlhbEluZGV4LHRoaXMuX2luaXRpYWxDb250YWluZXIsYSxvLGksZSksdGhpcy5fZHJvcENvbnRhaW5lcj10aGlzLl9pbml0aWFsQ29udGFpbmVyfSl9X3Vw''@;'; put 'put ''ZGF0ZUFjdGl2ZURyb3BDb250YWluZXIoe3g6ZSx5OnR9LHt4OnIseTppfSl7bGV0IG89dGhpcy5faW5pdGlhbENvbnRhaW5lci5fZ2V0U2libGluZ0NvbnRhaW5lckZyb21Qb3NpdGlvbih0aGlzLGUsdCk7IW8mJnRoaXMuX2Ryb3BDb250YWluZXIhPT10aGlzLl9pbml0aWFsQ29udGFpbmVy''@;'; put 'put ''JiZ0aGlzLl9pbml0aWFsQ29udGFpbmVyLl9pc092ZXJDb250YWluZXIoZSx0KSYmKG89dGhpcy5faW5pdGlhbENvbnRhaW5lciksbyYmbyE9PXRoaXMuX2Ryb3BDb250YWluZXImJnRoaXMuX25nWm9uZS5ydW4oKCk9Pntjb25zdCBhPXRoaXMuX2Ryb3BDb250YWluZXIuZ2V0SXRlbUluZGV4''@;'; put 'put ''KHRoaXMpLGw9dGhpcy5fZHJvcENvbnRhaW5lci5nZXRJdGVtQXRJbmRleChhKzEpPy5nZXRWaXNpYmxlRWxlbWVudCgpfHxudWxsO3RoaXMuZXhpdGVkLm5leHQoe2l0ZW06dGhpcyxjb250YWluZXI6dGhpcy5fZHJvcENvbnRhaW5lcn0pLHRoaXMuX2Ryb3BDb250YWluZXIuZXhpdCh0aGlz''@;'; put 'put ''KSx0aGlzLl9jb25kaXRpb25hbGx5SW5zZXJ0QW5jaG9yKG8sdGhpcy5fZHJvcENvbnRhaW5lcixsKSx0aGlzLl9kcm9wQ29udGFpbmVyPW8sdGhpcy5fZHJvcENvbnRhaW5lci5lbnRlcih0aGlzLGUsdCxvPT09dGhpcy5faW5pdGlhbENvbnRhaW5lciYmby5zb3J0aW5nRGlzYWJsZWQ/dGhp''@;'; put 'put ''cy5faW5pdGlhbEluZGV4OnZvaWQgMCksdGhpcy5lbnRlcmVkLm5leHQoe2l0ZW06dGhpcyxjb250YWluZXI6byxjdXJyZW50SW5kZXg6by5nZXRJdGVtSW5kZXgodGhpcyl9KX0pLHRoaXMuaXNEcmFnZ2luZygpJiYodGhpcy5fZHJvcENvbnRhaW5lci5fc3RhcnRTY3JvbGxpbmdJZk5lY2Vz''@;'; put 'put ''c2FyeShyLGkpLHRoaXMuX2Ryb3BDb250YWluZXIuX3NvcnRJdGVtKHRoaXMsZSx0LHRoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0YSksdGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLl9hcHBseVByZXZpZXdUcmFuc2Zvcm0oZSx0KTp0aGlzLl9hcHBseVByZXZpZXdUcmFuc2Zvcm0oZS10''@;'; put 'put ''aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudC54LHQtdGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueSkpfV9hbmltYXRlUHJldmlld1RvUGxhY2Vob2xkZXIoKXtpZighdGhpcy5faGFzTW92ZWQpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO2NvbnN0IGU9dGhpcy5fcGxhY2Vob2xk''@;'; put 'put ''ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5fcHJldmlldy5hZGRDbGFzcygiY2RrLWRyYWctYW5pbWF0aW5nIiksdGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGUubGVmdCxlLnRvcCk7Y29uc3QgdD10aGlzLl9wcmV2aWV3LmdldFRyYW5zaXRpb25EdXJhdGlvbigpO3JldHVy''@;'; put 'put ''biAwPT09dD9Qcm9taXNlLnJlc29sdmUoKTp0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm5ldyBQcm9taXNlKHI9Pntjb25zdCBpPWw9PnsoIWx8fHRoaXMuX3ByZXZpZXcmJlJ6KGwpPT09dGhpcy5fcHJldmlldy5lbGVtZW50JiYidHJhbnNmb3JtIj09PWwucHJvcGVydHlO''@;'; put 'put ''YW1lKSYmKGEoKSxyKCksY2xlYXJUaW1lb3V0KG8pKX0sbz1zZXRUaW1lb3V0KGksMS41KnQpLGE9dGhpcy5fcHJldmlldy5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixpKX0pKX1fY3JlYXRlUGxhY2Vob2xkZXJFbGVtZW50KCl7Y29uc3QgZT10aGlzLl9wbGFjZWhvbGRlclRl''@;'; put 'put ''bXBsYXRlLHQ9ZT9lLnRlbXBsYXRlOm51bGw7bGV0IHI7cmV0dXJuIHQ/KHRoaXMuX3BsYWNlaG9sZGVyUmVmPWUudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodCxlLmNvbnRleHQpLHRoaXMuX3BsYWNlaG9sZGVyUmVmLmRldGVjdENoYW5nZXMoKSxyPW9FZSh0aGlzLl9wbGFj''@;'; put 'put ''ZWhvbGRlclJlZix0aGlzLl9kb2N1bWVudCkpOnI9VG9lKHRoaXMuX3Jvb3RFbGVtZW50KSxyLnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLHIuY2xhc3NMaXN0LmFkZChkRWUpLHJ9X2dldFBvaW50ZXJQb3NpdGlvbkluRWxlbWVudChlLHQscil7Y29uc3QgaT10PT09dGhpcy5fcm9vdEVs''@;'; put 'put ''ZW1lbnQ/bnVsbDp0LG89aT9pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOmUsYT1iRChyKT9yLnRhcmdldFRvdWNoZXNbMF06cixsPXRoaXMuX2dldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtyZXR1cm57eDpvLmxlZnQtZS5sZWZ0KyhhLnBhZ2VYLW8ubGVmdC1sLmxlZnQpLHk6by50b3At''@;'; put 'put ''ZS50b3ArKGEucGFnZVktby50b3AtbC50b3ApfX1fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGUpe2NvbnN0IHQ9dGhpcy5fZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLHI9YkQoZSk/ZS50b3VjaGVzWzBdfHxlLmNoYW5nZWRUb3VjaGVzWzBdfHx7cGFnZVg6MCxwYWdlWTowfTplLGk9''@;'; put 'put ''ci5wYWdlWC10LmxlZnQsbz1yLnBhZ2VZLXQudG9wO2lmKHRoaXMuX293bmVyU1ZHRWxlbWVudCl7Y29uc3QgYT10aGlzLl9vd25lclNWR0VsZW1lbnQuZ2V0U2NyZWVuQ1RNKCk7aWYoYSl7Y29uc3QgbD10aGlzLl9vd25lclNWR0VsZW1lbnQuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gbC54''@;'; put 'put ''PWksbC55PW8sbC5tYXRyaXhUcmFuc2Zvcm0oYS5pbnZlcnNlKCkpfX1yZXR1cm57eDppLHk6b319X2dldENvbnN0cmFpbmVkUG9pbnRlclBvc2l0aW9uKGUpe2NvbnN0IHQ9dGhpcy5fZHJvcENvbnRhaW5lcj90aGlzLl9kcm9wQ29udGFpbmVyLmxvY2tBeGlzOm51bGw7bGV0e3g6cix5Oml9''@;'; put 'put ''PXRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5jb25zdHJhaW5Qb3NpdGlvbihlLHRoaXMsdGhpcy5faW5pdGlhbERvbVJlY3QsdGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQpOmU7aWYoIngiPT09dGhpcy5sb2NrQXhpc3x8IngiPT09dD9pPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25Q''@;'; put 'put ''YWdlLnktKHRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueTowKTooInkiPT09dGhpcy5sb2NrQXhpc3x8InkiPT09dCkmJihyPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngtKHRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5fcGlja3Vw''@;'; put 'put ''UG9zaXRpb25JbkVsZW1lbnQueDowKSksdGhpcy5fYm91bmRhcnlSZWN0KXtjb25zdHt4Om8seTphfT10aGlzLmNvbnN0cmFpblBvc2l0aW9uP3t4OjAseTowfTp0aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudCxsPXRoaXMuX2JvdW5kYXJ5UmVjdCx7d2lkdGg6dSxoZWlnaHQ6Z309dGhp''@;'; put 'put ''cy5fZ2V0UHJldmlld1JlY3QoKSxFPWwudG9wK2EsTz1sLmJvdHRvbS0oZy1hKTtyPWZFZShyLGwubGVmdCtvLGwucmlnaHQtKHUtbykpLGk9ZkVlKGksRSxPKX1yZXR1cm57eDpyLHk6aX19X3VwZGF0ZVBvaW50ZXJEaXJlY3Rpb25EZWx0YShlKXtjb25zdHt4OnQseTpyfT1lLGk9dGhpcy5f''@;'; put 'put ''cG9pbnRlckRpcmVjdGlvbkRlbHRhLG89dGhpcy5fcG9pbnRlclBvc2l0aW9uQXRMYXN0RGlyZWN0aW9uQ2hhbmdlLGE9TWF0aC5hYnModC1vLngpLGw9TWF0aC5hYnMoci1vLnkpO3JldHVybiBhPnRoaXMuX2NvbmZpZy5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkJiYoaS54PXQ+''@;'; put 'put ''by54PzE6LTEsby54PXQpLGw+dGhpcy5fY29uZmlnLnBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQmJihpLnk9cj5vLnk/MTotMSxvLnk9ciksaX1fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpe2lmKCF0aGlzLl9yb290RWxlbWVudHx8IXRoaXMuX2hhbmRsZXMpcmV0dXJu''@;'; put 'put ''O2NvbnN0IGU9dGhpcy5faGFuZGxlcy5sZW5ndGg+MHx8IXRoaXMuaXNEcmFnZ2luZygpO2UhPT10aGlzLl9uYXRpdmVJbnRlcmFjdGlvbnNFbmFibGVkJiYodGhpcy5fbmF0aXZlSW50ZXJhY3Rpb25zRW5hYmxlZD1lLGFNKHRoaXMuX3Jvb3RFbGVtZW50LGUpKX1fcmVtb3ZlUm9vdEVsZW1l''@;'; put 'put ''bnRMaXN0ZW5lcnMoKXt0aGlzLl9yb290RWxlbWVudENsZWFudXBzPy5mb3JFYWNoKGU9PmUoKSksdGhpcy5fcm9vdEVsZW1lbnRDbGVhbnVwcz12b2lkIDB9X2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0oZSx0KXtjb25zdCByPTEvdGhpcy5zY2FsZSxpPXlEKGUqcix0KnIpLG89dGhpcy5f''@;'; put 'put ''cm9vdEVsZW1lbnQuc3R5bGU7bnVsbD09dGhpcy5faW5pdGlhbFRyYW5zZm9ybSYmKHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09by50cmFuc2Zvcm0mJiJub25lIiE9by50cmFuc2Zvcm0/by50cmFuc2Zvcm06IiIpLG8udHJhbnNmb3JtPUh6KGksdGhpcy5faW5pdGlhbFRyYW5zZm9ybSl9X2Fw''@;'; put 'put ''cGx5UHJldmlld1RyYW5zZm9ybShlLHQpe2NvbnN0IHI9dGhpcy5fcHJldmlld1RlbXBsYXRlPy50ZW1wbGF0ZT92b2lkIDA6dGhpcy5faW5pdGlhbFRyYW5zZm9ybSxpPXlEKGUsdCk7dGhpcy5fcHJldmlldy5zZXRUcmFuc2Zvcm0oSHooaSxyKSl9X2dldERyYWdEaXN0YW5jZShlKXtjb25z''@;'; put 'put ''dCB0PXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlO3JldHVybiB0P3t4OmUueC10LngseTplLnktdC55fTp7eDowLHk6MH19X2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCl7dGhpcy5fYm91bmRhcnlSZWN0PXRoaXMuX3ByZXZpZXdSZWN0PXZvaWQgMCx0aGlzLl9wYXJlbnRQb3NpdGlvbnMu''@;'; put 'put ''Y2xlYXIoKX1fY29udGFpbkluc2lkZUJvdW5kYXJ5T25SZXNpemUoKXtsZXR7eDplLHk6dH09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybTtpZigwPT09ZSYmMD09PXR8fHRoaXMuaXNEcmFnZ2luZygpfHwhdGhpcy5fYm91bmRhcnlFbGVtZW50KXJldHVybjtjb25zdCByPXRoaXMuX3Jvb3RFbGVt''@;'; put 'put ''ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9dGhpcy5fYm91bmRhcnlFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKDA9PT1pLndpZHRoJiYwPT09aS5oZWlnaHR8fDA9PT1yLndpZHRoJiYwPT09ci5oZWlnaHQpcmV0dXJuO2NvbnN0IG89aS5sZWZ0LXIubGVmdCxhPXIu''@;'; put 'put ''cmlnaHQtaS5yaWdodCxsPWkudG9wLXIudG9wLHU9ci5ib3R0b20taS5ib3R0b207aS53aWR0aD5yLndpZHRoPyhvPjAmJihlKz1vKSxhPjAmJihlLT1hKSk6ZT0wLGkuaGVpZ2h0PnIuaGVpZ2h0PyhsPjAmJih0Kz1sKSx1PjAmJih0LT11KSk6dD0wLChlIT09dGhpcy5fcGFzc2l2ZVRyYW5z''@;'; put 'put ''Zm9ybS54fHx0IT09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55KSYmdGhpcy5zZXRGcmVlRHJhZ1Bvc2l0aW9uKHt5OnQseDplfSl9X2dldERyYWdTdGFydERlbGF5KGUpe2NvbnN0IHQ9dGhpcy5kcmFnU3RhcnREZWxheTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/dDpiRChlKT90LnRvdWNo''@;'; put 'put ''OnQ/dC5tb3VzZTowfV91cGRhdGVPblNjcm9sbChlKXtjb25zdCB0PXRoaXMuX3BhcmVudFBvc2l0aW9ucy5oYW5kbGVTY3JvbGwoZSk7aWYodCl7Y29uc3Qgcj1SeihlKTt0aGlzLl9ib3VuZGFyeVJlY3QmJnIhPT10aGlzLl9ib3VuZGFyeUVsZW1lbnQmJnIuY29udGFpbnModGhpcy5fYm91''@;'; put 'put ''bmRhcnlFbGVtZW50KSYmX0QodGhpcy5fYm91bmRhcnlSZWN0LHQudG9wLHQubGVmdCksdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCs9dC5sZWZ0LHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnkrPXQudG9wLHRoaXMuX2Ryb3BDb250YWluZXJ8fCh0aGlzLl9hY3RpdmVUcmFuc2Zv''@;'; put 'put ''cm0ueC09dC5sZWZ0LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55LT10LnRvcCx0aGlzLl9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS54LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55KSl9fV9nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZ2V0KHRoaXMuX2RvY3VtZW50KT8uc2Nyb2xsUG9zaXRpb258fHRoaXMuX3BhcmVudFBvc2l0aW9ucy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl9X2dldFNoYWRvd1Jvb3QoKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fY2FjaGVkU2hh''@;'; put 'put ''ZG93Um9vdCYmKHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9Ym9lKHRoaXMuX3Jvb3RFbGVtZW50KSksdGhpcy5fY2FjaGVkU2hhZG93Um9vdH1fZ2V0UHJldmlld0luc2VydGlvblBvaW50KGUsdCl7Y29uc3Qgcj10aGlzLl9wcmV2aWV3Q29udGFpbmVyfHwiZ2xvYmFsIjtpZigicGFyZW50Ij09''@;'; put 'put ''PXIpcmV0dXJuIGU7aWYoImdsb2JhbCI9PT1yKXtjb25zdCBpPXRoaXMuX2RvY3VtZW50O3JldHVybiB0fHxpLmZ1bGxzY3JlZW5FbGVtZW50fHxpLndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHxpLm1vekZ1bGxTY3JlZW5FbGVtZW50fHxpLm1zRnVsbHNjcmVlbkVsZW1lbnR8fGkuYm9keX1y''@;'; put 'put ''ZXR1cm4gbjcocil9X2dldFByZXZpZXdSZWN0KCl7cmV0dXJuKCF0aGlzLl9wcmV2aWV3UmVjdHx8IXRoaXMuX3ByZXZpZXdSZWN0LndpZHRoJiYhdGhpcy5fcHJldmlld1JlY3QuaGVpZ2h0KSYmKHRoaXMuX3ByZXZpZXdSZWN0PXRoaXMuX3ByZXZpZXc/dGhpcy5fcHJldmlldy5nZXRCb3Vu''@;'; put 'put ''ZGluZ0NsaWVudFJlY3QoKTp0aGlzLl9pbml0aWFsRG9tUmVjdCksdGhpcy5fcHJldmlld1JlY3R9X25hdGl2ZURyYWdTdGFydD1lPT57aWYodGhpcy5faGFuZGxlcy5sZW5ndGgpe2NvbnN0IHQ9dGhpcy5fZ2V0VGFyZ2V0SGFuZGxlKGUpO3QmJiF0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFz''@;'; put 'put ''KHQpJiYhdGhpcy5kaXNhYmxlZCYmZS5wcmV2ZW50RGVmYXVsdCgpfWVsc2UgdGhpcy5kaXNhYmxlZHx8ZS5wcmV2ZW50RGVmYXVsdCgpfTtfZ2V0VGFyZ2V0SGFuZGxlKGUpe3JldHVybiB0aGlzLl9oYW5kbGVzLmZpbmQodD0+ZS50YXJnZXQmJihlLnRhcmdldD09PXR8fHQuY29udGFpbnMo''@;'; put 'put ''ZS50YXJnZXQpKSl9X2NvbmRpdGlvbmFsbHlJbnNlcnRBbmNob3IoZSx0LHIpe2lmKGU9PT10aGlzLl9pbml0aWFsQ29udGFpbmVyKXRoaXMuX2FuY2hvcj8ucmVtb3ZlKCksdGhpcy5fYW5jaG9yPW51bGw7ZWxzZSBpZih0PT09dGhpcy5faW5pdGlhbENvbnRhaW5lciYmdC5oYXNBbmNob3Ip''@;'; put 'put ''e2NvbnN0IGk9dGhpcy5fYW5jaG9yPz89VG9lKHRoaXMuX3BsYWNlaG9sZGVyKTtpLmNsYXNzTGlzdC5yZW1vdmUoZEVlKSxpLmNsYXNzTGlzdC5hZGQoImNkay1kcmFnLWFuY2hvciIpLGkuc3R5bGUudHJhbnNmb3JtPSIiLHI/ci5iZWZvcmUoaSk6bjcodC5lbGVtZW50KS5hcHBlbmRDaGls''@;'; put 'put ''ZChpKX19fWZ1bmN0aW9uIGZFZShuLGUsdCl7cmV0dXJuIE1hdGgubWF4KGUsTWF0aC5taW4odCxuKSl9ZnVuY3Rpb24gYkQobil7cmV0dXJuInQiPT09bi50eXBlWzBdfWZ1bmN0aW9uIGY0dChuKXtuLnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gSW9lKG4sZSx0KXtjb25zdCByPXdEKGUs''@;'; put 'put ''bi5sZW5ndGgtMSksaT13RCh0LG4ubGVuZ3RoLTEpO2lmKHI9PT1pKXJldHVybjtjb25zdCBvPW5bcl0sYT1pPHI/LTE6MTtmb3IobGV0IGw9cjtsIT09aTtsKz1hKW5bbF09bltsK2FdO25baV09b31mdW5jdGlvbiB3RChuLGUpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKGUsbikpfWNs''@;'; put 'put ''YXNzIHBFZXtfZHJhZ0Ryb3BSZWdpc3RyeTtfZWxlbWVudDtfc29ydFByZWRpY2F0ZTtfaXRlbVBvc2l0aW9ucz1bXTtfYWN0aXZlRHJhZ2dhYmxlcztvcmllbnRhdGlvbj0idmVydGljYWwiO2RpcmVjdGlvbjtjb25zdHJ1Y3RvcihlKXt0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5PWV9X3ByZXZp''@;'; put 'put ''b3VzU3dhcD17ZHJhZzpudWxsLGRlbHRhOjAsb3ZlcmxhcHM6ITF9O3N0YXJ0KGUpe3RoaXMud2l0aEl0ZW1zKGUpfXNvcnQoZSx0LHIsaSl7Y29uc3Qgbz10aGlzLl9pdGVtUG9zaXRpb25zLGE9dGhpcy5fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihlLHQscixpKTtpZigtMT09''@;'; put 'put ''PWEmJm8ubGVuZ3RoPjApcmV0dXJuIG51bGw7Y29uc3QgbD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uLHU9by5maW5kSW5kZXgoSGU9PkhlLmRyYWc9PT1lKSxnPW9bYV0sTz1nLmNsaWVudFJlY3QsWj11PmE/MTotMSxlZT10aGlzLl9nZXRJdGVtT2Zmc2V0UHgob1t1XS5jbGll''@;'; put 'put ''bnRSZWN0LE8sWiksdmU9dGhpcy5fZ2V0U2libGluZ09mZnNldFB4KHUsbyxaKSxNZT1vLnNsaWNlKCk7cmV0dXJuIElvZShvLHUsYSksby5mb3JFYWNoKChIZSxXZSk9PntpZihNZVtXZV09PT1IZSlyZXR1cm47Y29uc3QgYXQ9SGUuZHJhZz09PWUsQ3Q9YXQ/ZWU6dmUsQXQ9YXQ/ZS5nZXRQ''@;'; put 'put ''bGFjZWhvbGRlckVsZW1lbnQoKTpIZS5kcmFnLmdldFJvb3RFbGVtZW50KCk7SGUub2Zmc2V0Kz1DdDtjb25zdCBLdD1NYXRoLnJvdW5kKEhlLm9mZnNldCooMS9IZS5kcmFnLnNjYWxlKSk7bD8oQXQuc3R5bGUudHJhbnNmb3JtPUh6KGB0cmFuc2xhdGUzZCgke0t0fXB4LCAwLCAwKWAsSGUu''@;'; put 'put ''aW5pdGlhbFRyYW5zZm9ybSksX0QoSGUuY2xpZW50UmVjdCwwLEN0KSk6KEF0LnN0eWxlLnRyYW5zZm9ybT1IeihgdHJhbnNsYXRlM2QoMCwgJHtLdH1weCwgMClgLEhlLmluaXRpYWxUcmFuc2Zvcm0pLF9EKEhlLmNsaWVudFJlY3QsQ3QsMCkpfSksdGhpcy5fcHJldmlvdXNTd2FwLm92ZXJs''@;'; put 'put ''YXBzPUFvZShPLHQsciksdGhpcy5fcHJldmlvdXNTd2FwLmRyYWc9Zy5kcmFnLHRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YT1sP2kueDppLnkse3ByZXZpb3VzSW5kZXg6dSxjdXJyZW50SW5kZXg6YX19ZW50ZXIoZSx0LHIsaSl7Y29uc3Qgbz1udWxsPT1pfHxpPDA/dGhpcy5fZ2V0SXRlbUlu''@;'; put 'put ''ZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihlLHQscik6aSxhPXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMsbD1hLmluZGV4T2YoZSksdT1lLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpO2xldCBnPWFbb107aWYoZz09PWUmJihnPWFbbysxXSksIWcmJihudWxsPT1vfHwtMT09PW98fG88YS5sZW5ndGgt''@;'; put 'put ''MSkmJnRoaXMuX3Nob3VsZEVudGVyQXNGaXJzdENoaWxkKHQscikmJihnPWFbMF0pLGw+LTEmJmEuc3BsaWNlKGwsMSksZyYmIXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyhnKSl7Y29uc3QgRT1nLmdldFJvb3RFbGVtZW50KCk7RS5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9y''@;'; put 'put ''ZSh1LEUpLGEuc3BsaWNlKG8sMCxlKX1lbHNlIHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQodSksYS5wdXNoKGUpO3Uuc3R5bGUudHJhbnNmb3JtPSIiLHRoaXMuX2NhY2hlSXRlbVBvc2l0aW9ucygpfXdpdGhJdGVtcyhlKXt0aGlzLl9hY3RpdmVEcmFnZ2FibGVzPWUuc2xpY2UoKSx0aGlz''@;'; put 'put ''Ll9jYWNoZUl0ZW1Qb3NpdGlvbnMoKX13aXRoU29ydFByZWRpY2F0ZShlKXt0aGlzLl9zb3J0UHJlZGljYXRlPWV9cmVzZXQoKXt0aGlzLl9hY3RpdmVEcmFnZ2FibGVzPy5mb3JFYWNoKGU9Pntjb25zdCB0PWUuZ2V0Um9vdEVsZW1lbnQoKTtpZih0KXtjb25zdCByPXRoaXMuX2l0ZW1Qb3Np''@;'; put 'put ''dGlvbnMuZmluZChpPT5pLmRyYWc9PT1lKT8uaW5pdGlhbFRyYW5zZm9ybTt0LnN0eWxlLnRyYW5zZm9ybT1yfHwiIn19KSx0aGlzLl9pdGVtUG9zaXRpb25zPVtdLHRoaXMuX2FjdGl2ZURyYWdnYWJsZXM9W10sdGhpcy5fcHJldmlvdXNTd2FwLmRyYWc9bnVsbCx0aGlzLl9wcmV2aW91c1N3''@;'; put 'put ''YXAuZGVsdGE9MCx0aGlzLl9wcmV2aW91c1N3YXAub3ZlcmxhcHM9ITF9Z2V0QWN0aXZlSXRlbXNTbmFwc2hvdCgpe3JldHVybiB0aGlzLl9hY3RpdmVEcmFnZ2FibGVzfWdldEl0ZW1JbmRleChlKXtyZXR1cm4gdGhpcy5fZ2V0VmlzdWFsSXRlbVBvc2l0aW9ucygpLmZpbmRJbmRleCh0PT50''@;'; put 'put ''LmRyYWc9PT1lKX1nZXRJdGVtQXRJbmRleChlKXtyZXR1cm4gdGhpcy5fZ2V0VmlzdWFsSXRlbVBvc2l0aW9ucygpW2VdPy5kcmFnfHxudWxsfXVwZGF0ZU9uU2Nyb2xsKGUsdCl7dGhpcy5faXRlbVBvc2l0aW9ucy5mb3JFYWNoKCh7Y2xpZW50UmVjdDpyfSk9PntfRChyLGUsdCl9KSx0aGlz''@;'; put 'put ''Ll9pdGVtUG9zaXRpb25zLmZvckVhY2goKHtkcmFnOnJ9KT0+e3RoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyhyKSYmci5fc29ydEZyb21MYXN0UG9pbnRlclBvc2l0aW9uKCl9KX13aXRoRWxlbWVudENvbnRhaW5lcihlKXt0aGlzLl9lbGVtZW50PWV9X2NhY2hlSXRlbVBvc2l0''@;'; put 'put ''aW9ucygpe2NvbnN0IGU9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbjt0aGlzLl9pdGVtUG9zaXRpb25zPXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMubWFwKHQ9Pntjb25zdCByPXQuZ2V0VmlzaWJsZUVsZW1lbnQoKTtyZXR1cm57ZHJhZzp0LG9mZnNldDowLGluaXRpYWxUcmFuc2Zv''@;'; put 'put ''cm06ci5zdHlsZS50cmFuc2Zvcm18fCIiLGNsaWVudFJlY3Q6eG9lKHIpfX0pLnNvcnQoKHQscik9PmU/dC5jbGllbnRSZWN0LmxlZnQtci5jbGllbnRSZWN0LmxlZnQ6dC5jbGllbnRSZWN0LnRvcC1yLmNsaWVudFJlY3QudG9wKX1fZ2V0VmlzdWFsSXRlbVBvc2l0aW9ucygpe3JldHVybiJo''@;'; put 'put ''b3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24mJiJydGwiPT09dGhpcy5kaXJlY3Rpb24/dGhpcy5faXRlbVBvc2l0aW9ucy5zbGljZSgpLnJldmVyc2UoKTp0aGlzLl9pdGVtUG9zaXRpb25zfV9nZXRJdGVtT2Zmc2V0UHgoZSx0LHIpe2NvbnN0IGk9Imhvcml6b250YWwiPT09dGhpcy5v''@;'; put 'put ''cmllbnRhdGlvbjtsZXQgbz1pP3QubGVmdC1lLmxlZnQ6dC50b3AtZS50b3A7cmV0dXJuLTE9PT1yJiYobys9aT90LndpZHRoLWUud2lkdGg6dC5oZWlnaHQtZS5oZWlnaHQpLG99X2dldFNpYmxpbmdPZmZzZXRQeChlLHQscil7Y29uc3QgaT0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0''@;'; put 'put ''aW9uLG89dFtlXS5jbGllbnRSZWN0LGE9dFtlKy0xKnJdO2xldCBsPW9baT8id2lkdGgiOiJoZWlnaHQiXSpyO2lmKGEpe2NvbnN0IHU9aT8ibGVmdCI6InRvcCIsZz1pPyJyaWdodCI6ImJvdHRvbSI7LTE9PT1yP2wtPWEuY2xpZW50UmVjdFt1XS1vW2ddOmwrPW9bdV0tYS5jbGllbnRSZWN0''@;'; put 'put ''W2ddfXJldHVybiBsfV9zaG91bGRFbnRlckFzRmlyc3RDaGlsZChlLHQpe2lmKCF0aGlzLl9hY3RpdmVEcmFnZ2FibGVzLmxlbmd0aClyZXR1cm4hMTtjb25zdCByPXRoaXMuX2l0ZW1Qb3NpdGlvbnMsaT0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uO2lmKHJbMF0uZHJhZyE9PXRo''@;'; put 'put ''aXMuX2FjdGl2ZURyYWdnYWJsZXNbMF0pe2NvbnN0IGE9cltyLmxlbmd0aC0xXS5jbGllbnRSZWN0O3JldHVybiBpP2U+PWEucmlnaHQ6dD49YS5ib3R0b219e2NvbnN0IGE9clswXS5jbGllbnRSZWN0O3JldHVybiBpP2U8PWEubGVmdDp0PD1hLnRvcH19X2dldEl0ZW1JbmRleEZyb21Qb2lu''@;'; put 'put ''dGVyUG9zaXRpb24oZSx0LHIsaSl7Y29uc3Qgbz0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uLGE9dGhpcy5faXRlbVBvc2l0aW9ucy5maW5kSW5kZXgoKHtkcmFnOmwsY2xpZW50UmVjdDp1fSk9PmwhPT1lJiYoKCFpfHxsIT09dGhpcy5fcHJldmlvdXNTd2FwLmRyYWd8fCF0aGlz''@;'; put 'put ''Ll9wcmV2aW91c1N3YXAub3ZlcmxhcHN8fChvP2kueDppLnkpIT09dGhpcy5fcHJldmlvdXNTd2FwLmRlbHRhKSYmKG8/dD49TWF0aC5mbG9vcih1LmxlZnQpJiZ0PE1hdGguZmxvb3IodS5yaWdodCk6cj49TWF0aC5mbG9vcih1LnRvcCkmJnI8TWF0aC5mbG9vcih1LmJvdHRvbSkpKSk7cmV0''@;'; put 'put ''dXJuLTEhPT1hJiZ0aGlzLl9zb3J0UHJlZGljYXRlKGEsZSk/YTotMX19Y2xhc3MgZzR0e19kb2N1bWVudDtfZHJhZ0Ryb3BSZWdpc3RyeTtfZWxlbWVudDtfc29ydFByZWRpY2F0ZTtfcm9vdE5vZGU7X2FjdGl2ZUl0ZW1zO19wcmV2aW91c1N3YXA9e2RyYWc6bnVsbCxkZWx0YVg6MCxkZWx0''@;'; put 'put ''YVk6MCxvdmVybGFwczohMX07X3JlbGF0ZWROb2Rlcz1bXTtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2RvY3VtZW50PWUsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT10fXN0YXJ0KGUpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudC5jaGlsZE5vZGVzO3RoaXMuX3JlbGF0ZWROb2Rlcz1bXTtmb3IobGV0''@;'; put 'put ''IHI9MDtyPHQubGVuZ3RoO3IrKyl7Y29uc3QgaT10W3JdO3RoaXMuX3JlbGF0ZWROb2Rlcy5wdXNoKFtpLGkubmV4dFNpYmxpbmddKX10aGlzLndpdGhJdGVtcyhlKX1zb3J0KGUsdCxyLGkpe2NvbnN0IG89dGhpcy5fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihlLHQsciksYT10''@;'; put 'put ''aGlzLl9wcmV2aW91c1N3YXA7aWYoLTE9PT1vfHx0aGlzLl9hY3RpdmVJdGVtc1tvXT09PWUpcmV0dXJuIG51bGw7Y29uc3QgbD10aGlzLl9hY3RpdmVJdGVtc1tvXTtpZihhLmRyYWc9PT1sJiZhLm92ZXJsYXBzJiZhLmRlbHRhWD09PWkueCYmYS5kZWx0YVk9PT1pLnkpcmV0dXJuIG51bGw7''@;'; put 'put ''Y29uc3QgdT10aGlzLmdldEl0ZW1JbmRleChlKSxnPWUuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCksRT1sLmdldFJvb3RFbGVtZW50KCk7bz51P0UuYWZ0ZXIoZyk6RS5iZWZvcmUoZyksSW9lKHRoaXMuX2FjdGl2ZUl0ZW1zLHUsbyk7Y29uc3QgTz10aGlzLl9nZXRSb290Tm9kZSgpLmVsZW1l''@;'; put 'put ''bnRGcm9tUG9pbnQodCxyKTtyZXR1cm4gYS5kZWx0YVg9aS54LGEuZGVsdGFZPWkueSxhLmRyYWc9bCxhLm92ZXJsYXBzPUU9PT1PfHxFLmNvbnRhaW5zKE8pLHtwcmV2aW91c0luZGV4OnUsY3VycmVudEluZGV4Om99fWVudGVyKGUsdCxyLGkpe2NvbnN0IG89dGhpcy5fYWN0aXZlSXRlbXMu''@;'; put 'put ''aW5kZXhPZihlKTtvPi0xJiZ0aGlzLl9hY3RpdmVJdGVtcy5zcGxpY2UobywxKTtsZXQgYT1udWxsPT1pfHxpPDA/dGhpcy5fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihlLHQscik6aTstMT09PWEmJihhPXRoaXMuX2dldENsb3Nlc3RJdGVtSW5kZXhUb1BvaW50ZXIoZSx0LHIp''@;'; put 'put ''KTtjb25zdCBsPXRoaXMuX2FjdGl2ZUl0ZW1zW2FdO2wmJiF0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcobCk/KHRoaXMuX2FjdGl2ZUl0ZW1zLnNwbGljZShhLDAsZSksbC5nZXRSb290RWxlbWVudCgpLmJlZm9yZShlLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpKSk6KHRoaXMu''@;'; put 'put ''X2FjdGl2ZUl0ZW1zLnB1c2goZSksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChlLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpKSl9d2l0aEl0ZW1zKGUpe3RoaXMuX2FjdGl2ZUl0ZW1zPWUuc2xpY2UoKX13aXRoU29ydFByZWRpY2F0ZShlKXt0aGlzLl9zb3J0UHJlZGljYXRlPWV9cmVzZXQo''@;'; put 'put ''KXtjb25zdCBlPXRoaXMuX2VsZW1lbnQsdD10aGlzLl9wcmV2aW91c1N3YXA7Zm9yKGxldCByPXRoaXMuX3JlbGF0ZWROb2Rlcy5sZW5ndGgtMTtyPi0xO3ItLSl7Y29uc3RbaSxvXT10aGlzLl9yZWxhdGVkTm9kZXNbcl07aS5wYXJlbnROb2RlPT09ZSYmaS5uZXh0U2libGluZyE9PW8mJihu''@;'; put 'put ''dWxsPT09bz9lLmFwcGVuZENoaWxkKGkpOm8ucGFyZW50Tm9kZT09PWUmJmUuaW5zZXJ0QmVmb3JlKGksbykpfXRoaXMuX3JlbGF0ZWROb2Rlcz1bXSx0aGlzLl9hY3RpdmVJdGVtcz1bXSx0LmRyYWc9bnVsbCx0LmRlbHRhWD10LmRlbHRhWT0wLHQub3ZlcmxhcHM9ITF9Z2V0QWN0aXZlSXRl''@;'; put 'put ''bXNTbmFwc2hvdCgpe3JldHVybiB0aGlzLl9hY3RpdmVJdGVtc31nZXRJdGVtSW5kZXgoZSl7cmV0dXJuIHRoaXMuX2FjdGl2ZUl0ZW1zLmluZGV4T2YoZSl9Z2V0SXRlbUF0SW5kZXgoZSl7cmV0dXJuIHRoaXMuX2FjdGl2ZUl0ZW1zW2VdfHxudWxsfXVwZGF0ZU9uU2Nyb2xsKCl7dGhpcy5f''@;'; put 'put ''YWN0aXZlSXRlbXMuZm9yRWFjaChlPT57dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKGUpJiZlLl9zb3J0RnJvbUxhc3RQb2ludGVyUG9zaXRpb24oKX0pfXdpdGhFbGVtZW50Q29udGFpbmVyKGUpe2UhPT10aGlzLl9lbGVtZW50JiYodGhpcy5fZWxlbWVudD1lLHRoaXMuX3Jv''@;'; put 'put ''b3ROb2RlPXZvaWQgMCl9X2dldEl0ZW1JbmRleEZyb21Qb2ludGVyUG9zaXRpb24oZSx0LHIpe2NvbnN0IGk9dGhpcy5fZ2V0Um9vdE5vZGUoKS5lbGVtZW50RnJvbVBvaW50KE1hdGguZmxvb3IodCksTWF0aC5mbG9vcihyKSksbz1pP3RoaXMuX2FjdGl2ZUl0ZW1zLmZpbmRJbmRleChhPT57''@;'; put 'put ''Y29uc3QgbD1hLmdldFJvb3RFbGVtZW50KCk7cmV0dXJuIGk9PT1sfHxsLmNvbnRhaW5zKGkpfSk6LTE7cmV0dXJuLTEhPT1vJiZ0aGlzLl9zb3J0UHJlZGljYXRlKG8sZSk/bzotMX1fZ2V0Um9vdE5vZGUoKXtyZXR1cm4gdGhpcy5fcm9vdE5vZGV8fCh0aGlzLl9yb290Tm9kZT1ib2UodGhp''@;'; put 'put ''cy5fZWxlbWVudCl8fHRoaXMuX2RvY3VtZW50KSx0aGlzLl9yb290Tm9kZX1fZ2V0Q2xvc2VzdEl0ZW1JbmRleFRvUG9pbnRlcihlLHQscil7aWYoMD09PXRoaXMuX2FjdGl2ZUl0ZW1zLmxlbmd0aClyZXR1cm4tMTtpZigxPT09dGhpcy5fYWN0aXZlSXRlbXMubGVuZ3RoKXJldHVybiAwO2xl''@;'; put 'put ''dCBpPTEvMCxvPS0xO2ZvcihsZXQgYT0wO2E8dGhpcy5fYWN0aXZlSXRlbXMubGVuZ3RoO2ErKyl7Y29uc3QgbD10aGlzLl9hY3RpdmVJdGVtc1thXTtpZihsIT09ZSl7Y29uc3R7eDp1LHk6Z309bC5nZXRSb290RWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEU9TWF0aC5oeXBv''@;'; put 'put ''dCh0LXUsci1nKTtFPGkmJihpPUUsbz1hKX19cmV0dXJuIG99fXZhciBlbT1mdW5jdGlvbihuKXtyZXR1cm4gbltuLk5PTkU9MF09Ik5PTkUiLG5bbi5VUD0xXT0iVVAiLG5bbi5ET1dOPTJdPSJET1dOIixufShlbXx8e30pLExmPWZ1bmN0aW9uKG4pe3JldHVybiBuW24uTk9ORT0wXT0iTk9O''@;'; put 'put ''RSIsbltuLkxFRlQ9MV09IkxFRlQiLG5bbi5SSUdIVD0yXT0iUklHSFQiLG59KExmfHx7fSk7Y2xhc3MgbTR0e19kcmFnRHJvcFJlZ2lzdHJ5O19uZ1pvbmU7X3ZpZXdwb3J0UnVsZXI7ZWxlbWVudDtkaXNhYmxlZD0hMTtzb3J0aW5nRGlzYWJsZWQ9ITE7bG9ja0F4aXM9bnVsbDthdXRvU2Ny''@;'; put 'put ''b2xsRGlzYWJsZWQ9ITE7YXV0b1Njcm9sbFN0ZXA9MjtoYXNBbmNob3I9ITE7ZW50ZXJQcmVkaWNhdGU9KCk9PiEwO3NvcnRQcmVkaWNhdGU9KCk9PiEwO2JlZm9yZVN0YXJ0ZWQ9bmV3IE1yO2VudGVyZWQ9bmV3IE1yO2V4aXRlZD1uZXcgTXI7ZHJvcHBlZD1uZXcgTXI7c29ydGVkPW5ldyBN''@;'; put 'put ''cjtyZWNlaXZpbmdTdGFydGVkPW5ldyBNcjtyZWNlaXZpbmdTdG9wcGVkPW5ldyBNcjtkYXRhO19jb250YWluZXI7X2lzRHJhZ2dpbmc9ITE7X3BhcmVudFBvc2l0aW9ucztfc29ydFN0cmF0ZWd5O19kb21SZWN0O19kcmFnZ2FibGVzPVtdO19zaWJsaW5ncz1bXTtfYWN0aXZlU2libGluZ3M9''@;'; put 'put ''bmV3IFNldDtfdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb249QXIuRU1QVFk7X3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uPWVtLk5PTkU7X2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb249TGYuTk9ORTtfc2Nyb2xsTm9kZTtfc3RvcFNjcm9sbFRpbWVycz1uZXcgTXI7X2NhY2hlZFNoYWRvd1Jv''@;'; put 'put ''b3Q9bnVsbDtfZG9jdW1lbnQ7X3Njcm9sbGFibGVFbGVtZW50cz1bXTtfaW5pdGlhbFNjcm9sbFNuYXA7X2RpcmVjdGlvbj0ibHRyIjtjb25zdHJ1Y3RvcihlLHQscixpLG8pe3RoaXMuX2RyYWdEcm9wUmVnaXN0cnk9dCx0aGlzLl9uZ1pvbmU9aSx0aGlzLl92aWV3cG9ydFJ1bGVyPW87Y29u''@;'; put 'put ''c3QgYT10aGlzLmVsZW1lbnQ9bjcoZSk7dGhpcy5fZG9jdW1lbnQ9cix0aGlzLndpdGhPcmllbnRhdGlvbigidmVydGljYWwiKS53aXRoRWxlbWVudENvbnRhaW5lcihhKSx0LnJlZ2lzdGVyRHJvcENvbnRhaW5lcih0aGlzKSx0aGlzLl9wYXJlbnRQb3NpdGlvbnM9bmV3IGlFZShyKX1kaXNw''@;'; put 'put ''b3NlKCl7dGhpcy5fc3RvcFNjcm9sbGluZygpLHRoaXMuX3N0b3BTY3JvbGxUaW1lcnMuY29tcGxldGUoKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuYmVmb3JlU3RhcnRlZC5jb21wbGV0ZSgpLHRoaXMuZW50ZXJlZC5jb21wbGV0ZSgpLHRo''@;'; put 'put ''aXMuZXhpdGVkLmNvbXBsZXRlKCksdGhpcy5kcm9wcGVkLmNvbXBsZXRlKCksdGhpcy5zb3J0ZWQuY29tcGxldGUoKSx0aGlzLnJlY2VpdmluZ1N0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnJlY2VpdmluZ1N0b3BwZWQuY29tcGxldGUoKSx0aGlzLl9hY3RpdmVTaWJsaW5ncy5jbGVhcigpLHRo''@;'; put 'put ''aXMuX3Njcm9sbE5vZGU9bnVsbCx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnJlbW92ZURyb3BDb250YWluZXIodGhpcyl9aXNEcmFnZ2luZygpe3JldHVybiB0aGlzLl9pc0RyYWdnaW5nfXN0YXJ0KCl7dGhpcy5fZHJhZ2dpbmdTdGFydGVk''@;'; put 'put ''KCksdGhpcy5fbm90aWZ5UmVjZWl2aW5nU2libGluZ3MoKX1lbnRlcihlLHQscixpKXt0aGlzLl9kcmFnZ2luZ1N0YXJ0ZWQoKSxudWxsPT1pJiZ0aGlzLnNvcnRpbmdEaXNhYmxlZCYmKGk9dGhpcy5fZHJhZ2dhYmxlcy5pbmRleE9mKGUpKSx0aGlzLl9zb3J0U3RyYXRlZ3kuZW50ZXIoZSx0''@;'; put 'put ''LHIsaSksdGhpcy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKSx0aGlzLl9ub3RpZnlSZWNlaXZpbmdTaWJsaW5ncygpLHRoaXMuZW50ZXJlZC5uZXh0KHtpdGVtOmUsY29udGFpbmVyOnRoaXMsY3VycmVudEluZGV4OnRoaXMuZ2V0SXRlbUluZGV4KGUpfSl9ZXhpdChlKXt0aGlzLl9yZXNldCgp''@;'; put 'put ''LHRoaXMuZXhpdGVkLm5leHQoe2l0ZW06ZSxjb250YWluZXI6dGhpc30pfWRyb3AoZSx0LHIsaSxvLGEsbCx1PXt9KXt0aGlzLl9yZXNldCgpLHRoaXMuZHJvcHBlZC5uZXh0KHtpdGVtOmUsY3VycmVudEluZGV4OnQscHJldmlvdXNJbmRleDpyLGNvbnRhaW5lcjp0aGlzLHByZXZpb3VzQ29u''@;'; put 'put ''dGFpbmVyOmksaXNQb2ludGVyT3ZlckNvbnRhaW5lcjpvLGRpc3RhbmNlOmEsZHJvcFBvaW50OmwsZXZlbnQ6dX0pfXdpdGhJdGVtcyhlKXtjb25zdCB0PXRoaXMuX2RyYWdnYWJsZXM7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZXM9ZSxlLmZvckVhY2gocj0+ci5fd2l0aERyb3BDb250YWluZXIo''@;'; put 'put ''dGhpcykpLHRoaXMuaXNEcmFnZ2luZygpJiYodC5maWx0ZXIoaT0+aS5pc0RyYWdnaW5nKCkpLmV2ZXJ5KGk9Pi0xPT09ZS5pbmRleE9mKGkpKT90aGlzLl9yZXNldCgpOnRoaXMuX3NvcnRTdHJhdGVneS53aXRoSXRlbXModGhpcy5fZHJhZ2dhYmxlcykpLHRoaXN9d2l0aERpcmVjdGlvbihl''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fZGlyZWN0aW9uPWUsdGhpcy5fc29ydFN0cmF0ZWd5IGluc3RhbmNlb2YgcEVlJiYodGhpcy5fc29ydFN0cmF0ZWd5LmRpcmVjdGlvbj1lKSx0aGlzfWNvbm5lY3RlZFRvKGUpe3JldHVybiB0aGlzLl9zaWJsaW5ncz1lLnNsaWNlKCksdGhpc313aXRoT3JpZW50YXRp''@;'; put 'put ''b24oZSl7aWYoIm1peGVkIj09PWUpdGhpcy5fc29ydFN0cmF0ZWd5PW5ldyBnNHQodGhpcy5fZG9jdW1lbnQsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeSk7ZWxzZXtjb25zdCB0PW5ldyBwRWUodGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeSk7dC5kaXJlY3Rpb249dGhpcy5fZGlyZWN0aW9uLHQub3Jp''@;'; put 'put ''ZW50YXRpb249ZSx0aGlzLl9zb3J0U3RyYXRlZ3k9dH1yZXR1cm4gdGhpcy5fc29ydFN0cmF0ZWd5LndpdGhFbGVtZW50Q29udGFpbmVyKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fc29ydFN0cmF0ZWd5LndpdGhTb3J0UHJlZGljYXRlKCh0LHIpPT50aGlzLnNvcnRQcmVkaWNhdGUodCxyLHRo''@;'; put 'put ''aXMpKSx0aGlzfXdpdGhTY3JvbGxhYmxlUGFyZW50cyhlKXtjb25zdCB0PXRoaXMuX2NvbnRhaW5lcjtyZXR1cm4gdGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzPS0xPT09ZS5pbmRleE9mKHQpP1t0LC4uLmVdOmUuc2xpY2UoKSx0aGlzfXdpdGhFbGVtZW50Q29udGFpbmVyKGUpe2lmKGU9PT10''@;'; put 'put ''aGlzLl9jb250YWluZXIpcmV0dXJuIHRoaXM7bjcodGhpcy5lbGVtZW50KTtjb25zdCByPXRoaXMuX3Njcm9sbGFibGVFbGVtZW50cy5pbmRleE9mKHRoaXMuX2NvbnRhaW5lciksaT10aGlzLl9zY3JvbGxhYmxlRWxlbWVudHMuaW5kZXhPZihlKTtyZXR1cm4gcj4tMSYmdGhpcy5fc2Nyb2xs''@;'; put 'put ''YWJsZUVsZW1lbnRzLnNwbGljZShyLDEpLGk+LTEmJnRoaXMuX3Njcm9sbGFibGVFbGVtZW50cy5zcGxpY2UoaSwxKSx0aGlzLl9zb3J0U3RyYXRlZ3kmJnRoaXMuX3NvcnRTdHJhdGVneS53aXRoRWxlbWVudENvbnRhaW5lcihlKSx0aGlzLl9jYWNoZWRTaGFkb3dSb290PW51bGwsdGhpcy5f''@;'; put 'put ''c2Nyb2xsYWJsZUVsZW1lbnRzLnVuc2hpZnQoZSksdGhpcy5fY29udGFpbmVyPWUsdGhpc31nZXRTY3JvbGxhYmxlUGFyZW50cygpe3JldHVybiB0aGlzLl9zY3JvbGxhYmxlRWxlbWVudHN9Z2V0SXRlbUluZGV4KGUpe3JldHVybiB0aGlzLl9pc0RyYWdnaW5nP3RoaXMuX3NvcnRTdHJhdGVn''@;'; put 'put ''eS5nZXRJdGVtSW5kZXgoZSk6dGhpcy5fZHJhZ2dhYmxlcy5pbmRleE9mKGUpfWdldEl0ZW1BdEluZGV4KGUpe3JldHVybiB0aGlzLl9pc0RyYWdnaW5nP3RoaXMuX3NvcnRTdHJhdGVneS5nZXRJdGVtQXRJbmRleChlKTp0aGlzLl9kcmFnZ2FibGVzW2VdfHxudWxsfWlzUmVjZWl2aW5nKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX2FjdGl2ZVNpYmxpbmdzLnNpemU+MH1fc29ydEl0ZW0oZSx0LHIsaSl7aWYodGhpcy5zb3J0aW5nRGlzYWJsZWR8fCF0aGlzLl9kb21SZWN0fHwhckVlKHRoaXMuX2RvbVJlY3QsLjA1LHQscikpcmV0dXJuO2NvbnN0IG89dGhpcy5fc29ydFN0cmF0ZWd5LnNvcnQoZSx0''@;'; put 'put ''LHIsaSk7byYmdGhpcy5zb3J0ZWQubmV4dCh7cHJldmlvdXNJbmRleDpvLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4Om8uY3VycmVudEluZGV4LGNvbnRhaW5lcjp0aGlzLGl0ZW06ZX0pfV9zdGFydFNjcm9sbGluZ0lmTmVjZXNzYXJ5KGUsdCl7aWYodGhpcy5hdXRvU2Nyb2xsRGlzYWJs''@;'; put 'put ''ZWQpcmV0dXJuO2xldCByLGk9ZW0uTk9ORSxvPUxmLk5PTkU7aWYodGhpcy5fcGFyZW50UG9zaXRpb25zLnBvc2l0aW9ucy5mb3JFYWNoKChhLGwpPT57bD09PXRoaXMuX2RvY3VtZW50fHwhYS5jbGllbnRSZWN0fHxyfHxyRWUoYS5jbGllbnRSZWN0LC4wNSxlLHQpJiYoW2ksb109ZnVuY3Rp''@;'; put 'put ''b24gdjR0KG4sZSx0LHIsaSl7Y29uc3Qgbz12RWUoZSxpKSxhPV9FZShlLHIpO2xldCBsPWVtLk5PTkUsdT1MZi5OT05FO2lmKG8pe2NvbnN0IGc9bi5zY3JvbGxUb3A7bz09PWVtLlVQP2c+MCYmKGw9ZW0uVVApOm4uc2Nyb2xsSGVpZ2h0LWc+bi5jbGllbnRIZWlnaHQmJihsPWVtLkRPV04p''@;'; put 'put ''fWlmKGEpe2NvbnN0IGc9bi5zY3JvbGxMZWZ0OyJydGwiPT09dD9hPT09TGYuUklHSFQ/ZzwwJiYodT1MZi5SSUdIVCk6bi5zY3JvbGxXaWR0aCtnPm4uY2xpZW50V2lkdGgmJih1PUxmLkxFRlQpOmE9PT1MZi5MRUZUP2c+MCYmKHU9TGYuTEVGVCk6bi5zY3JvbGxXaWR0aC1nPm4uY2xpZW50''@;'; put 'put ''V2lkdGgmJih1PUxmLlJJR0hUKX1yZXR1cm5bbCx1XX0obCxhLmNsaWVudFJlY3QsdGhpcy5fZGlyZWN0aW9uLGUsdCksKGl8fG8pJiYocj1sKSl9KSwhaSYmIW8pe2NvbnN0e3dpZHRoOmEsaGVpZ2h0Omx9PXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCksdT17d2lkdGg6''@;'; put 'put ''YSxoZWlnaHQ6bCx0b3A6MCxyaWdodDphLGJvdHRvbTpsLGxlZnQ6MH07aT12RWUodSx0KSxvPV9FZSh1LGUpLHI9d2luZG93fXImJihpIT09dGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb258fG8hPT10aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9ufHxyIT09dGhpcy5fc2Nyb2xs''@;'; put 'put ''Tm9kZSkmJih0aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj1pLHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb249byx0aGlzLl9zY3JvbGxOb2RlPXIsKGl8fG8pJiZyP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcih0aGlzLl9zdGFydFNjcm9sbEludGVydmFsKTp0aGlz''@;'; put 'put ''Ll9zdG9wU2Nyb2xsaW5nKCkpfV9zdG9wU2Nyb2xsaW5nKCl7dGhpcy5fc3RvcFNjcm9sbFRpbWVycy5uZXh0KCl9X2RyYWdnaW5nU3RhcnRlZCgpe2NvbnN0IGU9dGhpcy5fY29udGFpbmVyLnN0eWxlO3RoaXMuYmVmb3JlU3RhcnRlZC5uZXh0KCksdGhpcy5faXNEcmFnZ2luZz0hMCx0aGlz''@;'; put 'put ''Ll9pbml0aWFsU2Nyb2xsU25hcD1lLm1zU2Nyb2xsU25hcFR5cGV8fGUuc2Nyb2xsU25hcFR5cGV8fCIiLGUuc2Nyb2xsU25hcFR5cGU9ZS5tc1Njcm9sbFNuYXBUeXBlPSJub25lIix0aGlzLl9zb3J0U3RyYXRlZ3kuc3RhcnQodGhpcy5fZHJhZ2dhYmxlcyksdGhpcy5fY2FjaGVQYXJlbnRQ''@;'; put 'put ''b3NpdGlvbnMoKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2xpc3RlblRvU2Nyb2xsRXZlbnRzKCl9X2NhY2hlUGFyZW50UG9zaXRpb25zKCl7dGhpcy5fcGFyZW50UG9zaXRpb25zLmNhY2hlKHRoaXMuX3Njcm9sbGFibGVFbGVtZW50cyks''@;'; put 'put ''dGhpcy5fZG9tUmVjdD10aGlzLl9wYXJlbnRQb3NpdGlvbnMucG9zaXRpb25zLmdldCh0aGlzLl9jb250YWluZXIpLmNsaWVudFJlY3R9X3Jlc2V0KCl7dGhpcy5faXNEcmFnZ2luZz0hMTtjb25zdCBlPXRoaXMuX2NvbnRhaW5lci5zdHlsZTtlLnNjcm9sbFNuYXBUeXBlPWUubXNTY3JvbGxT''@;'; put 'put ''bmFwVHlwZT10aGlzLl9pbml0aWFsU2Nyb2xsU25hcCx0aGlzLl9zaWJsaW5ncy5mb3JFYWNoKHQ9PnQuX3N0b3BSZWNlaXZpbmcodGhpcykpLHRoaXMuX3NvcnRTdHJhdGVneS5yZXNldCgpLHRoaXMuX3N0b3BTY3JvbGxpbmcoKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51''@;'; put 'put ''bnN1YnNjcmliZSgpLHRoaXMuX3BhcmVudFBvc2l0aW9ucy5jbGVhcigpfV9zdGFydFNjcm9sbEludGVydmFsPSgpPT57dGhpcy5fc3RvcFNjcm9sbGluZygpLGZ1bmN0aW9uIE1tdChuPTAsZT1Beil7cmV0dXJuIG48MCYmKG49MCksWVNlKG4sbixlKX0oMCxaU2UpLnBpcGUodjAodGhpcy5f''@;'; put 'put ''c3RvcFNjcm9sbFRpbWVycykpLnN1YnNjcmliZSgoKT0+e2NvbnN0IGU9dGhpcy5fc2Nyb2xsTm9kZSx0PXRoaXMuYXV0b1Njcm9sbFN0ZXA7dGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb249PT1lbS5VUD9lLnNjcm9sbEJ5KDAsLXQpOnRoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9u''@;'; put 'put ''PT09ZW0uRE9XTiYmZS5zY3JvbGxCeSgwLHQpLHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb249PT1MZi5MRUZUP2Uuc2Nyb2xsQnkoLXQsMCk6dGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbj09PUxmLlJJR0hUJiZlLnNjcm9sbEJ5KHQsMCl9KX07X2lzT3ZlckNvbnRhaW5l''@;'; put 'put ''cihlLHQpe3JldHVybiBudWxsIT10aGlzLl9kb21SZWN0JiZBb2UodGhpcy5fZG9tUmVjdCxlLHQpfV9nZXRTaWJsaW5nQ29udGFpbmVyRnJvbVBvc2l0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5fc2libGluZ3MuZmluZChpPT5pLl9jYW5SZWNlaXZlKGUsdCxyKSl9X2NhblJlY2VpdmUoZSx0''@;'; put 'put ''LHIpe2lmKCF0aGlzLl9kb21SZWN0fHwhQW9lKHRoaXMuX2RvbVJlY3QsdCxyKXx8IXRoaXMuZW50ZXJQcmVkaWNhdGUoZSx0aGlzKSlyZXR1cm4hMTtjb25zdCBpPXRoaXMuX2dldFNoYWRvd1Jvb3QoKS5lbGVtZW50RnJvbVBvaW50KHQscik7cmV0dXJuISFpJiYoaT09PXRoaXMuX2NvbnRh''@;'; put 'put ''aW5lcnx8dGhpcy5fY29udGFpbmVyLmNvbnRhaW5zKGkpKX1fc3RhcnRSZWNlaXZpbmcoZSx0KXtjb25zdCByPXRoaXMuX2FjdGl2ZVNpYmxpbmdzOyFyLmhhcyhlKSYmdC5ldmVyeShpPT50aGlzLmVudGVyUHJlZGljYXRlKGksdGhpcyl8fHRoaXMuX2RyYWdnYWJsZXMuaW5kZXhPZihpKT4t''@;'; put 'put ''MSkmJihyLmFkZChlKSx0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpLHRoaXMuX2xpc3RlblRvU2Nyb2xsRXZlbnRzKCksdGhpcy5yZWNlaXZpbmdTdGFydGVkLm5leHQoe2luaXRpYXRvcjplLHJlY2VpdmVyOnRoaXMsaXRlbXM6dH0pKX1fc3RvcFJlY2VpdmluZyhlKXt0aGlzLl9hY3Rp''@;'; put 'put ''dmVTaWJsaW5ncy5kZWxldGUoZSksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLnJlY2VpdmluZ1N0b3BwZWQubmV4dCh7aW5pdGlhdG9yOmUscmVjZWl2ZXI6dGhpc30pfV9saXN0ZW5Ub1Njcm9sbEV2ZW50cygpe3RoaXMuX3ZpZXdwb3J0U2Ny''@;'; put 'put ''b2xsU3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc2Nyb2xsZWQodGhpcy5fZ2V0U2hhZG93Um9vdCgpKS5zdWJzY3JpYmUoZT0+e2lmKHRoaXMuaXNEcmFnZ2luZygpKXtjb25zdCB0PXRoaXMuX3BhcmVudFBvc2l0aW9ucy5oYW5kbGVTY3JvbGwoZSk7dCYmdGhpcy5fc29y''@;'; put 'put ''dFN0cmF0ZWd5LnVwZGF0ZU9uU2Nyb2xsKHQudG9wLHQubGVmdCl9ZWxzZSB0aGlzLmlzUmVjZWl2aW5nKCkmJnRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCl9KX1fZ2V0U2hhZG93Um9vdCgpe2lmKCF0aGlzLl9jYWNoZWRTaGFkb3dSb290KXtjb25zdCBlPWJvZSh0aGlzLl9jb250YWlu''@;'; put 'put ''ZXIpO3RoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9ZXx8dGhpcy5fZG9jdW1lbnR9cmV0dXJuIHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3R9X25vdGlmeVJlY2VpdmluZ1NpYmxpbmdzKCl7Y29uc3QgZT10aGlzLl9zb3J0U3RyYXRlZ3kuZ2V0QWN0aXZlSXRlbXNTbmFwc2hvdCgpLmZpbHRlcih0PT50''@;'; put 'put ''LmlzRHJhZ2dpbmcoKSk7dGhpcy5fc2libGluZ3MuZm9yRWFjaCh0PT50Ll9zdGFydFJlY2VpdmluZyh0aGlzLGUpKX19ZnVuY3Rpb24gdkVlKG4sZSl7Y29uc3R7dG9wOnQsYm90dG9tOnIsaGVpZ2h0Oml9PW4sbz0uMDUqaTtyZXR1cm4gZT49dC1vJiZlPD10K28/ZW0uVVA6ZT49ci1vJiZl''@;'; put 'put ''PD1yK28/ZW0uRE9XTjplbS5OT05FfWZ1bmN0aW9uIF9FZShuLGUpe2NvbnN0e2xlZnQ6dCxyaWdodDpyLHdpZHRoOml9PW4sbz0uMDUqaTtyZXR1cm4gZT49dC1vJiZlPD10K28/TGYuTEVGVDplPj1yLW8mJmU8PXIrbz9MZi5SSUdIVDpMZi5OT05FfWNvbnN0IENEPXtjYXB0dXJlOiEwfSxE''@;'; put 'put ''b2U9e3Bhc3NpdmU6ITEsY2FwdHVyZTohMH07bGV0IF80dD0oKCk9PntjbGFzcyBue3N0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NWNtcD1Qcih7dHlwZTpuLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0saG9zdEF0dHJzOlsi''@;'; put 'put ''Y2RrLWRyYWctcmVzZXRzLWNvbnRhaW5lciIsIiJdLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKHIsaSl7fSxzdHlsZXM6WyJAbGF5ZXIgY2RrLXJlc2V0c3suY2RrLWRyYWctcHJldmlld3tiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7cGFkZGluZzowO2NvbG9yOmluaGVy''@;'; put 'put ''aXQ7aW5zZXQ6YXV0b319LmNkay1kcmFnLXBsYWNlaG9sZGVyICosLmNkay1kcmFnLXByZXZpZXcgKntwb2ludGVyLWV2ZW50czpub25lICFpbXBvcnRhbnR9XG4iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KX1yZXR1cm4gbn0pKCksTG9lPSgoKT0+e2NsYXNzIG57X25n''@;'; put 'put ''Wm9uZT1zbihnYSk7X2RvY3VtZW50PXNuKFRsKTtfc3R5bGVMb2FkZXI9c24oalNlKTtfcmVuZGVyZXI9c24oZ2MpLmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVsbCk7X2NsZWFudXBEb2N1bWVudFRvdWNobW92ZTtfc2Nyb2xsPW5ldyBNcjtfZHJvcEluc3RhbmNlcz1uZXcgU2V0O19kcmFnSW5z''@;'; put 'put ''dGFuY2VzPW5ldyBTZXQ7X2FjdGl2ZURyYWdJbnN0YW5jZXM9QjEoW10pO19nbG9iYWxMaXN0ZW5lcnM7X2RyYWdnaW5nUHJlZGljYXRlPXQ9PnQuaXNEcmFnZ2luZygpO19kb21Ob2Rlc1RvRGlyZWN0aXZlcz1udWxsO3BvaW50ZXJNb3ZlPW5ldyBNcjtwb2ludGVyVXA9bmV3IE1yO2NvbnN0''@;'; put 'put ''cnVjdG9yKCl7fXJlZ2lzdGVyRHJvcENvbnRhaW5lcih0KXt0aGlzLl9kcm9wSW5zdGFuY2VzLmhhcyh0KXx8dGhpcy5fZHJvcEluc3RhbmNlcy5hZGQodCl9cmVnaXN0ZXJEcmFnSXRlbSh0KXt0aGlzLl9kcmFnSW5zdGFuY2VzLmFkZCh0KSwxPT09dGhpcy5fZHJhZ0luc3RhbmNlcy5zaXpl''@;'; put 'put ''JiZ0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9jbGVhbnVwRG9jdW1lbnRUb3VjaG1vdmU/LigpLHRoaXMuX2NsZWFudXBEb2N1bWVudFRvdWNobW92ZT10aGlzLl9yZW5kZXJlci5saXN0ZW4odGhpcy5fZG9jdW1lbnQsInRvdWNobW92ZSIsdGhpcy5fcGVyc2lz''@;'; put 'put ''dGVudFRvdWNobW92ZUxpc3RlbmVyLERvZSl9KX1yZW1vdmVEcm9wQ29udGFpbmVyKHQpe3RoaXMuX2Ryb3BJbnN0YW5jZXMuZGVsZXRlKHQpfXJlbW92ZURyYWdJdGVtKHQpe3RoaXMuX2RyYWdJbnN0YW5jZXMuZGVsZXRlKHQpLHRoaXMuc3RvcERyYWdnaW5nKHQpLDA9PT10aGlzLl9kcmFn''@;'; put 'put ''SW5zdGFuY2VzLnNpemUmJnRoaXMuX2NsZWFudXBEb2N1bWVudFRvdWNobW92ZT8uKCl9c3RhcnREcmFnZ2luZyh0LHIpe2lmKCEodGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcygpLmluZGV4T2YodCk+LTEpJiYodGhpcy5fc3R5bGVMb2FkZXIubG9hZChfNHQpLHRoaXMuX2FjdGl2ZURyYWdJ''@;'; put 'put ''bnN0YW5jZXMudXBkYXRlKGk9PlsuLi5pLHRdKSwxPT09dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcygpLmxlbmd0aCkpe2NvbnN0IGk9ci50eXBlLnN0YXJ0c1dpdGgoInRvdWNoIiksbz1sPT50aGlzLnBvaW50ZXJVcC5uZXh0KGwpLGE9W1sic2Nyb2xsIixsPT50aGlzLl9zY3JvbGwubmV4''@;'; put 'put ''dChsKSxDRF0sWyJzZWxlY3RzdGFydCIsdGhpcy5fcHJldmVudERlZmF1bHRXaGlsZURyYWdnaW5nLERvZV1dO2k/YS5wdXNoKFsidG91Y2hlbmQiLG8sQ0RdLFsidG91Y2hjYW5jZWwiLG8sQ0RdKTphLnB1c2goWyJtb3VzZXVwIixvLENEXSksaXx8YS5wdXNoKFsibW91c2Vtb3ZlIixsPT50''@;'; put 'put ''aGlzLnBvaW50ZXJNb3ZlLm5leHQobCksRG9lXSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZ2xvYmFsTGlzdGVuZXJzPWEubWFwKChbbCx1LGddKT0+dGhpcy5fcmVuZGVyZXIubGlzdGVuKHRoaXMuX2RvY3VtZW50LGwsdSxnKSl9KX19c3RvcERyYWdnaW5n''@;'; put 'put ''KHQpe3RoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMudXBkYXRlKHI9Pntjb25zdCBpPXIuaW5kZXhPZih0KTtyZXR1cm4gaT4tMT8oci5zcGxpY2UoaSwxKSxbLi4ucl0pOnJ9KSwwPT09dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcygpLmxlbmd0aCYmdGhpcy5fY2xlYXJHbG9iYWxMaXN0ZW5l''@;'; put 'put ''cnMoKX1pc0RyYWdnaW5nKHQpe3JldHVybiB0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzKCkuaW5kZXhPZih0KT4tMX1zY3JvbGxlZCh0KXtjb25zdCByPVt0aGlzLl9zY3JvbGxdO3JldHVybiB0JiZ0IT09dGhpcy5fZG9jdW1lbnQmJnIucHVzaChuZXcgaG8oaT0+dGhpcy5fbmdab25lLnJ1''@;'; put 'put ''bk91dHNpZGVBbmd1bGFyKCgpPT57Y29uc3Qgbz10aGlzLl9yZW5kZXJlci5saXN0ZW4odCwic2Nyb2xsIixhPT57dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcygpLmxlbmd0aCYmaS5uZXh0KGEpfSxDRCk7cmV0dXJuKCk9PntvKCl9fSkpKSxoRCguLi5yKX1yZWdpc3RlckRpcmVjdGl2ZU5v''@;'; put 'put ''ZGUodCxyKXt0aGlzLl9kb21Ob2Rlc1RvRGlyZWN0aXZlcz8/PW5ldyBXZWFrTWFwLHRoaXMuX2RvbU5vZGVzVG9EaXJlY3RpdmVzLnNldCh0LHIpfXJlbW92ZURpcmVjdGl2ZU5vZGUodCl7dGhpcy5fZG9tTm9kZXNUb0RpcmVjdGl2ZXM/LmRlbGV0ZSh0KX1nZXREcmFnRGlyZWN0aXZlRm9y''@;'; put 'put ''Tm9kZSh0KXtyZXR1cm4gdGhpcy5fZG9tTm9kZXNUb0RpcmVjdGl2ZXM/LmdldCh0KXx8bnVsbH1uZ09uRGVzdHJveSgpe3RoaXMuX2RyYWdJbnN0YW5jZXMuZm9yRWFjaCh0PT50aGlzLnJlbW92ZURyYWdJdGVtKHQpKSx0aGlzLl9kcm9wSW5zdGFuY2VzLmZvckVhY2godD0+dGhpcy5yZW1v''@;'; put 'put ''dmVEcm9wQ29udGFpbmVyKHQpKSx0aGlzLl9kb21Ob2Rlc1RvRGlyZWN0aXZlcz1udWxsLHRoaXMuX2NsZWFyR2xvYmFsTGlzdGVuZXJzKCksdGhpcy5wb2ludGVyTW92ZS5jb21wbGV0ZSgpLHRoaXMucG9pbnRlclVwLmNvbXBsZXRlKCl9X3ByZXZlbnREZWZhdWx0V2hpbGVEcmFnZ2luZz10''@;'; put 'put ''PT57dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcygpLmxlbmd0aD4wJiZ0LnByZXZlbnREZWZhdWx0KCl9O19wZXJzaXN0ZW50VG91Y2htb3ZlTGlzdGVuZXI9dD0+e3RoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMoKS5sZW5ndGg+MCYmKHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMoKS5zb21l''@;'; put 'put ''KHRoaXMuX2RyYWdnaW5nUHJlZGljYXRlKSYmdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMucG9pbnRlck1vdmUubmV4dCh0KSl9O19jbGVhckdsb2JhbExpc3RlbmVycygpe3RoaXMuX2dsb2JhbExpc3RlbmVycz8uZm9yRWFjaCh0PT50KCkpLHRoaXMuX2dsb2JhbExpc3RlbmVycz12b2lkIDB9''@;'; put 'put ''c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59KSgpO2NvbnN0IHk0dD17ZHJhZ1N0YXJ0VGhyZXNob2xkOjUscG9p''@;'; put 'put ''bnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZDo1fTtsZXQgVno9KCgpPT57Y2xhc3MgbntfZG9jdW1lbnQ9c24oVGwpO19uZ1pvbmU9c24oZ2EpO192aWV3cG9ydFJ1bGVyPXNuKEZ6KTtfZHJhZ0Ryb3BSZWdpc3RyeT1zbihMb2UpO19yZW5kZXJlcj1zbihnYykuY3JlYXRlUmVuZGVyZXIo''@;'; put 'put ''bnVsbCxudWxsKTtjb25zdHJ1Y3Rvcigpe31jcmVhdGVEcmFnKHQscj15NHQpe3JldHVybiBuZXcgaDR0KHQscix0aGlzLl9kb2N1bWVudCx0aGlzLl9uZ1pvbmUsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LHRoaXMuX3JlbmRlcmVyKX1jcmVhdGVEcm9wTGlz''@;'; put 'put ''dCh0KXtyZXR1cm4gbmV3IG00dCh0LHRoaXMuX2RyYWdEcm9wUmVnaXN0cnksdGhpcy5fZG9jdW1lbnQsdGhpcy5fbmdab25lLHRoaXMuX3ZpZXdwb3J0UnVsZXIpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9Sm4oe3Rv''@;'; put 'put ''a2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKTtjb25zdCBTRD1uZXcgRXIoIkNES19EUkFHX1BBUkVOVCIpLHlFZT1uZXcgRXIoIkNka0RyYWdIYW5kbGUiKTtsZXQgYkVlPSgoKT0+e2NsYXNzIG57ZWxlbWVudD1zbihubyk7X3BhcmVu''@;'; put 'put ''dERyYWc9c24oU0Qse29wdGlvbmFsOiEwLHNraXBTZWxmOiEwfSk7X2RyYWdEcm9wUmVnaXN0cnk9c24oTG9lKTtfc3RhdGVDaGFuZ2VzPW5ldyBNcjtnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKHQpe3RoaXMuX2Rpc2FibGVkPXQsdGhpcy5fc3Rh''@;'; put 'put ''dGVDaGFuZ2VzLm5leHQodGhpcyl9X2Rpc2FibGVkPSExO2NvbnN0cnVjdG9yKCl7dGhpcy5fcGFyZW50RHJhZz8uX2FkZEhhbmRsZSh0aGlzKX1uZ0FmdGVyVmlld0luaXQoKXtpZighdGhpcy5fcGFyZW50RHJhZyl7bGV0IHQ9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxl''@;'; put 'put ''bWVudDtmb3IoO3Q7KXtjb25zdCByPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuZ2V0RHJhZ0RpcmVjdGl2ZUZvck5vZGUodCk7aWYocil7dGhpcy5fcGFyZW50RHJhZz1yLHIuX2FkZEhhbmRsZSh0aGlzKTticmVha310PXQucGFyZW50RWxlbWVudH19fW5nT25EZXN0cm95KCl7dGhpcy5fcGFy''@;'; put 'put ''ZW50RHJhZz8uX3JlbW92ZUhhbmRsZSh0aGlzKSx0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrRHJhZ0hhbmRsZSIs''@;'; put 'put ''IiJdXSxob3N0QXR0cnM6WzEsImNkay1kcmFnLWhhbmRsZSJdLGlucHV0czp7ZGlzYWJsZWQ6WzIsImNka0RyYWdIYW5kbGVEaXNhYmxlZCIsImRpc2FibGVkIixaMF19LGZlYXR1cmVzOltibyhbe3Byb3ZpZGU6eUVlLHVzZUV4aXN0aW5nOm59XSldfSl9cmV0dXJuIG59KSgpO2NvbnN0IE9v''@;'; put 'put ''ZT1uZXcgRXIoIkNES19EUkFHX0NPTkZJRyIpLE5vZT1uZXcgRXIoIkNka0Ryb3BMaXN0Iik7bGV0IEZvZT0oKCk9PntjbGFzcyBue2VsZW1lbnQ9c24obm8pO2Ryb3BDb250YWluZXI9c24oTm9lLHtvcHRpb25hbDohMCxza2lwU2VsZjohMH0pO19uZ1pvbmU9c24oZ2EpO192aWV3Q29udGFp''@;'; put 'put ''bmVyUmVmPXNuKERzKTtfZGlyPXNuKGlNLHtvcHRpb25hbDohMH0pO19jaGFuZ2VEZXRlY3RvclJlZj1zbihVbCk7X3NlbGZIYW5kbGU9c24oeUVlLHtvcHRpb25hbDohMCxzZWxmOiEwfSk7X3BhcmVudERyYWc9c24oU0Qse29wdGlvbmFsOiEwLHNraXBTZWxmOiEwfSk7X2RyYWdEcm9wUmVn''@;'; put 'put ''aXN0cnk9c24oTG9lKTtfZGVzdHJveWVkPW5ldyBNcjtfaGFuZGxlcz1uZXcgJGkoW10pO19wcmV2aWV3VGVtcGxhdGU7X3BsYWNlaG9sZGVyVGVtcGxhdGU7X2RyYWdSZWY7ZGF0YTtsb2NrQXhpcz1udWxsO3Jvb3RFbGVtZW50U2VsZWN0b3I7Ym91bmRhcnlFbGVtZW50O2RyYWdTdGFydERl''@;'; put 'put ''bGF5O2ZyZWVEcmFnUG9zaXRpb247Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHwhKCF0aGlzLmRyb3BDb250YWluZXJ8fCF0aGlzLmRyb3BDb250YWluZXIuZGlzYWJsZWQpfXNldCBkaXNhYmxlZCh0KXt0aGlzLl9kaXNhYmxlZD10LHRoaXMuX2RyYWdSZWYuZGlzYWJs''@;'; put 'put ''ZWQ9dGhpcy5fZGlzYWJsZWR9X2Rpc2FibGVkO2NvbnN0cmFpblBvc2l0aW9uO3ByZXZpZXdDbGFzcztwcmV2aWV3Q29udGFpbmVyO3NjYWxlPTE7c3RhcnRlZD1uZXcgS3I7cmVsZWFzZWQ9bmV3IEtyO2VuZGVkPW5ldyBLcjtlbnRlcmVkPW5ldyBLcjtleGl0ZWQ9bmV3IEtyO2Ryb3BwZWQ9''@;'; put 'put ''bmV3IEtyO21vdmVkPW5ldyBobyh0PT57Y29uc3Qgcj10aGlzLl9kcmFnUmVmLm1vdmVkLnBpcGUoRXMoaT0+KHtzb3VyY2U6dGhpcyxwb2ludGVyUG9zaXRpb246aS5wb2ludGVyUG9zaXRpb24sZXZlbnQ6aS5ldmVudCxkZWx0YTppLmRlbHRhLGRpc3RhbmNlOmkuZGlzdGFuY2V9KSkpLnN1''@;'; put 'put ''YnNjcmliZSh0KTtyZXR1cm4oKT0+e3IudW5zdWJzY3JpYmUoKX19KTtfaW5qZWN0b3I9c24oTWwpO2NvbnN0cnVjdG9yKCl7Y29uc3QgdD10aGlzLmRyb3BDb250YWluZXIscj1zbihPb2Use29wdGlvbmFsOiEwfSksaT1zbihWeik7dGhpcy5fZHJhZ1JlZj1pLmNyZWF0ZURyYWcodGhpcy5l''@;'; put 'put ''bGVtZW50LHtkcmFnU3RhcnRUaHJlc2hvbGQ6ciYmbnVsbCE9ci5kcmFnU3RhcnRUaHJlc2hvbGQ/ci5kcmFnU3RhcnRUaHJlc2hvbGQ6NSxwb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkOnImJm51bGwhPXIucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZD9yLnBvaW50ZXJE''@;'; put 'put ''aXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ6NSx6SW5kZXg6cj8uekluZGV4fSksdGhpcy5fZHJhZ1JlZi5kYXRhPXRoaXMsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5yZWdpc3RlckRpcmVjdGl2ZU5vZGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsdGhpcyksciYmdGhpcy5fYXNzaWduRGVm''@;'; put 'put ''YXVsdHMociksdCYmKHQuYWRkSXRlbSh0aGlzKSx0Ll9kcm9wTGlzdFJlZi5iZWZvcmVTdGFydGVkLnBpcGUodjAodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fZHJhZ1JlZi5zY2FsZT10aGlzLnNjYWxlfSkpLHRoaXMuX3N5bmNJbnB1dHModGhpcy5fZHJhZ1JlZiks''@;'; put 'put ''dGhpcy5faGFuZGxlRXZlbnRzKHRoaXMuX2RyYWdSZWYpfWdldFBsYWNlaG9sZGVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpfWdldFJvb3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2RyYWdSZWYuZ2V0Um9vdEVsZW1lbnQoKX1yZXNldCgp''@;'; put 'put ''e3RoaXMuX2RyYWdSZWYucmVzZXQoKX1yZXNldFRvQm91bmRhcnkoKXt0aGlzLl9kcmFnUmVmLnJlc2V0VG9Cb3VuZGFyeSgpfWdldEZyZWVEcmFnUG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ1JlZi5nZXRGcmVlRHJhZ1Bvc2l0aW9uKCl9c2V0RnJlZURyYWdQb3NpdGlvbih0KXt0aGlz''@;'; put 'put ''Ll9kcmFnUmVmLnNldEZyZWVEcmFnUG9zaXRpb24odCl9bmdBZnRlclZpZXdJbml0KCl7SDgoKCk9Pnt0aGlzLl91cGRhdGVSb290RWxlbWVudCgpLHRoaXMuX3NldHVwSGFuZGxlc0xpc3RlbmVyKCksdGhpcy5fZHJhZ1JlZi5zY2FsZT10aGlzLnNjYWxlLHRoaXMuZnJlZURyYWdQb3NpdGlv''@;'; put 'put ''biYmdGhpcy5fZHJhZ1JlZi5zZXRGcmVlRHJhZ1Bvc2l0aW9uKHRoaXMuZnJlZURyYWdQb3NpdGlvbil9LHtpbmplY3Rvcjp0aGlzLl9pbmplY3Rvcn0pfW5nT25DaGFuZ2VzKHQpe2NvbnN0IHI9dC5yb290RWxlbWVudFNlbGVjdG9yLGk9dC5mcmVlRHJhZ1Bvc2l0aW9uO3ImJiFyLmZpcnN0''@;'; put 'put ''Q2hhbmdlJiZ0aGlzLl91cGRhdGVSb290RWxlbWVudCgpLHRoaXMuX2RyYWdSZWYuc2NhbGU9dGhpcy5zY2FsZSxpJiYhaS5maXJzdENoYW5nZSYmdGhpcy5mcmVlRHJhZ1Bvc2l0aW9uJiZ0aGlzLl9kcmFnUmVmLnNldEZyZWVEcmFnUG9zaXRpb24odGhpcy5mcmVlRHJhZ1Bvc2l0aW9uKX1u''@;'; put 'put ''Z09uRGVzdHJveSgpe3RoaXMuZHJvcENvbnRhaW5lciYmdGhpcy5kcm9wQ29udGFpbmVyLnJlbW92ZUl0ZW0odGhpcyksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5yZW1vdmVEaXJlY3RpdmVOb2RlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFu''@;'; put 'put ''Z3VsYXIoKCk9Pnt0aGlzLl9oYW5kbGVzLmNvbXBsZXRlKCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl9kcmFnUmVmLmRpc3Bvc2UoKX0pfV9hZGRIYW5kbGUodCl7Y29uc3Qgcj10aGlzLl9oYW5kbGVzLmdldFZhbHVlKCk7ci5wdXNo''@;'; put 'put ''KHQpLHRoaXMuX2hhbmRsZXMubmV4dChyKX1fcmVtb3ZlSGFuZGxlKHQpe2NvbnN0IHI9dGhpcy5faGFuZGxlcy5nZXRWYWx1ZSgpLGk9ci5pbmRleE9mKHQpO2k+LTEmJihyLnNwbGljZShpLDEpLHRoaXMuX2hhbmRsZXMubmV4dChyKSl9X3NldFByZXZpZXdUZW1wbGF0ZSh0KXt0aGlzLl9w''@;'; put 'put ''cmV2aWV3VGVtcGxhdGU9dH1fcmVzZXRQcmV2aWV3VGVtcGxhdGUodCl7dD09PXRoaXMuX3ByZXZpZXdUZW1wbGF0ZSYmKHRoaXMuX3ByZXZpZXdUZW1wbGF0ZT1udWxsKX1fc2V0UGxhY2Vob2xkZXJUZW1wbGF0ZSh0KXt0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPXR9X3Jlc2V0UGxhY2Vo''@;'; put 'put ''b2xkZXJUZW1wbGF0ZSh0KXt0PT09dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZSYmKHRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU9bnVsbCl9X3VwZGF0ZVJvb3RFbGVtZW50KCl7Y29uc3QgdD10aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtsZXQgcj10O3RoaXMucm9vdEVsZW1lbnRTZWxl''@;'; put 'put ''Y3RvciYmKHI9dm9pZCAwIT09dC5jbG9zZXN0P3QuY2xvc2VzdCh0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3IpOnQucGFyZW50RWxlbWVudD8uY2xvc2VzdCh0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3IpKSx0aGlzLl9kcmFnUmVmLndpdGhSb290RWxlbWVudChyfHx0KX1fZ2V0Qm91bmRhcnlF''@;'; put 'put ''bGVtZW50KCl7Y29uc3QgdD10aGlzLmJvdW5kYXJ5RWxlbWVudDtyZXR1cm4gdD8ic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xvc2VzdCh0KTpuNyh0KTpudWxsfV9zeW5jSW5wdXRzKHQpe3QuYmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCk9PntpZigh''@;'; put 'put ''dC5pc0RyYWdnaW5nKCkpe2NvbnN0IHI9dGhpcy5fZGlyLGk9dGhpcy5kcmFnU3RhcnREZWxheSxvPXRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU/e3RlbXBsYXRlOnRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGUudGVtcGxhdGVSZWYsY29udGV4dDp0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRl''@;'; put 'put ''LmRhdGEsdmlld0NvbnRhaW5lcjp0aGlzLl92aWV3Q29udGFpbmVyUmVmfTpudWxsLGE9dGhpcy5fcHJldmlld1RlbXBsYXRlP3t0ZW1wbGF0ZTp0aGlzLl9wcmV2aWV3VGVtcGxhdGUudGVtcGxhdGVSZWYsY29udGV4dDp0aGlzLl9wcmV2aWV3VGVtcGxhdGUuZGF0YSxtYXRjaFNpemU6dGhp''@;'; put 'put ''cy5fcHJldmlld1RlbXBsYXRlLm1hdGNoU2l6ZSx2aWV3Q29udGFpbmVyOnRoaXMuX3ZpZXdDb250YWluZXJSZWZ9Om51bGw7dC5kaXNhYmxlZD10aGlzLmRpc2FibGVkLHQubG9ja0F4aXM9dGhpcy5sb2NrQXhpcyx0LnNjYWxlPXRoaXMuc2NhbGUsdC5kcmFnU3RhcnREZWxheT0ib2JqZWN0''@;'; put 'put ''Ij09dHlwZW9mIGkmJmk/aTpGYihpKSx0LmNvbnN0cmFpblBvc2l0aW9uPXRoaXMuY29uc3RyYWluUG9zaXRpb24sdC5wcmV2aWV3Q2xhc3M9dGhpcy5wcmV2aWV3Q2xhc3MsdC53aXRoQm91bmRhcnlFbGVtZW50KHRoaXMuX2dldEJvdW5kYXJ5RWxlbWVudCgpKS53aXRoUGxhY2Vob2xkZXJU''@;'; put 'put ''ZW1wbGF0ZShvKS53aXRoUHJldmlld1RlbXBsYXRlKGEpLndpdGhQcmV2aWV3Q29udGFpbmVyKHRoaXMucHJldmlld0NvbnRhaW5lcnx8Imdsb2JhbCIpLHImJnQud2l0aERpcmVjdGlvbihyLnZhbHVlKX19KSx0LmJlZm9yZVN0YXJ0ZWQucGlwZShNcCgxKSkuc3Vic2NyaWJlKCgpPT57aWYo''@;'; put 'put ''dGhpcy5fcGFyZW50RHJhZylyZXR1cm4gdm9pZCB0LndpdGhQYXJlbnQodGhpcy5fcGFyZW50RHJhZy5fZHJhZ1JlZik7bGV0IHI9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtmb3IoO3I7KXtjb25zdCBpPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuZ2V0RHJhZ0Rp''@;'; put 'put ''cmVjdGl2ZUZvck5vZGUocik7aWYoaSl7dC53aXRoUGFyZW50KGkuX2RyYWdSZWYpO2JyZWFrfXI9ci5wYXJlbnRFbGVtZW50fX0pfV9oYW5kbGVFdmVudHModCl7dC5zdGFydGVkLnN1YnNjcmliZShyPT57dGhpcy5zdGFydGVkLmVtaXQoe3NvdXJjZTp0aGlzLGV2ZW50OnIuZXZlbnR9KSx0''@;'; put 'put ''aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHQucmVsZWFzZWQuc3Vic2NyaWJlKHI9Pnt0aGlzLnJlbGVhc2VkLmVtaXQoe3NvdXJjZTp0aGlzLGV2ZW50OnIuZXZlbnR9KX0pLHQuZW5kZWQuc3Vic2NyaWJlKHI9Pnt0aGlzLmVuZGVkLmVtaXQoe3NvdXJjZTp0aGlz''@;'; put 'put ''LGRpc3RhbmNlOnIuZGlzdGFuY2UsZHJvcFBvaW50OnIuZHJvcFBvaW50LGV2ZW50OnIuZXZlbnR9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHQuZW50ZXJlZC5zdWJzY3JpYmUocj0+e3RoaXMuZW50ZXJlZC5lbWl0KHtjb250YWluZXI6ci5jb250YWluZXIu''@;'; put 'put ''ZGF0YSxpdGVtOnRoaXMsY3VycmVudEluZGV4OnIuY3VycmVudEluZGV4fSl9KSx0LmV4aXRlZC5zdWJzY3JpYmUocj0+e3RoaXMuZXhpdGVkLmVtaXQoe2NvbnRhaW5lcjpyLmNvbnRhaW5lci5kYXRhLGl0ZW06dGhpc30pfSksdC5kcm9wcGVkLnN1YnNjcmliZShyPT57dGhpcy5kcm9wcGVk''@;'; put 'put ''LmVtaXQoe3ByZXZpb3VzSW5kZXg6ci5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpyLmN1cnJlbnRJbmRleCxwcmV2aW91c0NvbnRhaW5lcjpyLnByZXZpb3VzQ29udGFpbmVyLmRhdGEsY29udGFpbmVyOnIuY29udGFpbmVyLmRhdGEsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjpyLmlzUG9p''@;'; put 'put ''bnRlck92ZXJDb250YWluZXIsaXRlbTp0aGlzLGRpc3RhbmNlOnIuZGlzdGFuY2UsZHJvcFBvaW50OnIuZHJvcFBvaW50LGV2ZW50OnIuZXZlbnR9KX0pfV9hc3NpZ25EZWZhdWx0cyh0KXtjb25zdHtsb2NrQXhpczpyLGRyYWdTdGFydERlbGF5OmksY29uc3RyYWluUG9zaXRpb246byxwcmV2''@;'; put 'put ''aWV3Q2xhc3M6YSxib3VuZGFyeUVsZW1lbnQ6bCxkcmFnZ2luZ0Rpc2FibGVkOnUscm9vdEVsZW1lbnRTZWxlY3RvcjpnLHByZXZpZXdDb250YWluZXI6RX09dDt0aGlzLmRpc2FibGVkPXU/PyExLHRoaXMuZHJhZ1N0YXJ0RGVsYXk9aXx8MCx0aGlzLmxvY2tBeGlzPXJ8fG51bGwsbyYmKHRo''@;'; put 'put ''aXMuY29uc3RyYWluUG9zaXRpb249byksYSYmKHRoaXMucHJldmlld0NsYXNzPWEpLGwmJih0aGlzLmJvdW5kYXJ5RWxlbWVudD1sKSxnJiYodGhpcy5yb290RWxlbWVudFNlbGVjdG9yPWcpLEUmJih0aGlzLnByZXZpZXdDb250YWluZXI9RSl9X3NldHVwSGFuZGxlc0xpc3RlbmVyKCl7dGhp''@;'; put 'put ''cy5faGFuZGxlcy5waXBlKGYxKHQ9Pntjb25zdCByPXQubWFwKGk9PmkuZWxlbWVudCk7dGhpcy5fc2VsZkhhbmRsZSYmdGhpcy5yb290RWxlbWVudFNlbGVjdG9yJiZyLnB1c2godGhpcy5lbGVtZW50KSx0aGlzLl9kcmFnUmVmLndpdGhIYW5kbGVzKHIpfSksbTAodD0+aEQoLi4udC5tYXAo''@;'; put 'put ''cj0+ci5fc3RhdGVDaGFuZ2VzLnBpcGUocWcocikpKSkpLHYwKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSh0PT57Y29uc3Qgcj10aGlzLl9kcmFnUmVmLGk9dC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7dC5kaXNhYmxlZD9yLmRpc2FibGVIYW5kbGUoaSk6ci5lbmFibGVIYW5kbGUoaSl9''@;'; put 'put ''KX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrRHJhZyIsIiJdXSxob3N0QXR0cnM6WzEsImNkay1kcmFnIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24o''@;'; put 'put ''cixpKXsyJnImJndyKCJjZGstZHJhZy1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoImNkay1kcmFnLWRyYWdnaW5nIixpLl9kcmFnUmVmLmlzRHJhZ2dpbmcoKSl9LGlucHV0czp7ZGF0YTpbMCwiY2RrRHJhZ0RhdGEiLCJkYXRhIl0sbG9ja0F4aXM6WzAsImNka0RyYWdMb2NrQXhpcyIsImxvY2tB''@;'; put 'put ''eGlzIl0scm9vdEVsZW1lbnRTZWxlY3RvcjpbMCwiY2RrRHJhZ1Jvb3RFbGVtZW50Iiwicm9vdEVsZW1lbnRTZWxlY3RvciJdLGJvdW5kYXJ5RWxlbWVudDpbMCwiY2RrRHJhZ0JvdW5kYXJ5IiwiYm91bmRhcnlFbGVtZW50Il0sZHJhZ1N0YXJ0RGVsYXk6WzAsImNka0RyYWdTdGFydERlbGF5''@;'; put 'put ''IiwiZHJhZ1N0YXJ0RGVsYXkiXSxmcmVlRHJhZ1Bvc2l0aW9uOlswLCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsImZyZWVEcmFnUG9zaXRpb24iXSxkaXNhYmxlZDpbMiwiY2RrRHJhZ0Rpc2FibGVkIiwiZGlzYWJsZWQiLFowXSxjb25zdHJhaW5Qb3NpdGlvbjpbMCwiY2RrRHJhZ0NvbnN0''@;'; put 'put ''cmFpblBvc2l0aW9uIiwiY29uc3RyYWluUG9zaXRpb24iXSxwcmV2aWV3Q2xhc3M6WzAsImNka0RyYWdQcmV2aWV3Q2xhc3MiLCJwcmV2aWV3Q2xhc3MiXSxwcmV2aWV3Q29udGFpbmVyOlswLCJjZGtEcmFnUHJldmlld0NvbnRhaW5lciIsInByZXZpZXdDb250YWluZXIiXSxzY2FsZTpbMiwi''@;'; put 'put ''Y2RrRHJhZ1NjYWxlIiwic2NhbGUiLE1pdF19LG91dHB1dHM6e3N0YXJ0ZWQ6ImNka0RyYWdTdGFydGVkIixyZWxlYXNlZDoiY2RrRHJhZ1JlbGVhc2VkIixlbmRlZDoiY2RrRHJhZ0VuZGVkIixlbnRlcmVkOiJjZGtEcmFnRW50ZXJlZCIsZXhpdGVkOiJjZGtEcmFnRXhpdGVkIixkcm9wcGVk''@;'; put 'put ''OiJjZGtEcmFnRHJvcHBlZCIsbW92ZWQ6ImNka0RyYWdNb3ZlZCJ9LGV4cG9ydEFzOlsiY2RrRHJhZyJdLGZlYXR1cmVzOltibyhbe3Byb3ZpZGU6U0QsdXNlRXhpc3Rpbmc6bn1dKSxpdV19KX1yZXR1cm4gbn0pKCk7Y29uc3QgUG9lPW5ldyBFcigiQ2RrRHJvcExpc3RHcm91cCIpO2xldCB3''@;'; put 'put ''RWU9KCgpPT57Y2xhc3MgbntfaXRlbXM9bmV3IFNldDtkaXNhYmxlZD0hMTtuZ09uRGVzdHJveSgpe3RoaXMuX2l0ZW1zLmNsZWFyKCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltb''@;'; put 'put ''IiIsImNka0Ryb3BMaXN0R3JvdXAiLCIiXV0saW5wdXRzOntkaXNhYmxlZDpbMiwiY2RrRHJvcExpc3RHcm91cERpc2FibGVkIiwiZGlzYWJsZWQiLFowXX0sZXhwb3J0QXM6WyJjZGtEcm9wTGlzdEdyb3VwIl0sZmVhdHVyZXM6W2JvKFt7cHJvdmlkZTpQb2UsdXNlRXhpc3Rpbmc6bn1dKV19''@;'; put 'put ''KX1yZXR1cm4gbn0pKCksQ0VlPSgoKT0+e2NsYXNzIG57ZWxlbWVudD1zbihubyk7X2NoYW5nZURldGVjdG9yUmVmPXNuKFVsKTtfc2Nyb2xsRGlzcGF0Y2hlcj1zbihOeik7X2Rpcj1zbihpTSx7b3B0aW9uYWw6ITB9KTtfZ3JvdXA9c24oUG9lLHtvcHRpb25hbDohMCxza2lwU2VsZjohMH0p''@;'; put 'put ''O19sYXRlc3RTb3J0ZWRSZWZzO19kZXN0cm95ZWQ9bmV3IE1yO19zY3JvbGxhYmxlUGFyZW50c1Jlc29sdmVkO3N0YXRpYyBfZHJvcExpc3RzPVtdO19kcm9wTGlzdFJlZjtjb25uZWN0ZWRUbz1bXTtkYXRhO29yaWVudGF0aW9uO2lkPXNuKG40dCkuZ2V0SWQoImNkay1kcm9wLWxpc3QtIik7''@;'; put 'put ''bG9ja0F4aXM9bnVsbDtnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fCEhdGhpcy5fZ3JvdXAmJnRoaXMuX2dyb3VwLmRpc2FibGVkfXNldCBkaXNhYmxlZCh0KXt0aGlzLl9kcm9wTGlzdFJlZi5kaXNhYmxlZD10aGlzLl9kaXNhYmxlZD10fV9kaXNhYmxlZDtzb3J0aW5n''@;'; put 'put ''RGlzYWJsZWQ7ZW50ZXJQcmVkaWNhdGU9KCk9PiEwO3NvcnRQcmVkaWNhdGU9KCk9PiEwO2F1dG9TY3JvbGxEaXNhYmxlZDthdXRvU2Nyb2xsU3RlcDtlbGVtZW50Q29udGFpbmVyU2VsZWN0b3I7aGFzQW5jaG9yO2Ryb3BwZWQ9bmV3IEtyO2VudGVyZWQ9bmV3IEtyO2V4aXRlZD1uZXcgS3I7''@;'; put 'put ''c29ydGVkPW5ldyBLcjtfdW5zb3J0ZWRJdGVtcz1uZXcgU2V0O2NvbnN0cnVjdG9yKCl7Y29uc3QgdD1zbihWeikscj1zbihPb2Use29wdGlvbmFsOiEwfSk7dGhpcy5fZHJvcExpc3RSZWY9dC5jcmVhdGVEcm9wTGlzdCh0aGlzLmVsZW1lbnQpLHRoaXMuX2Ryb3BMaXN0UmVmLmRhdGE9dGhp''@;'; put 'put ''cyxyJiZ0aGlzLl9hc3NpZ25EZWZhdWx0cyhyKSx0aGlzLl9kcm9wTGlzdFJlZi5lbnRlclByZWRpY2F0ZT0oaSxvKT0+dGhpcy5lbnRlclByZWRpY2F0ZShpLmRhdGEsby5kYXRhKSx0aGlzLl9kcm9wTGlzdFJlZi5zb3J0UHJlZGljYXRlPShpLG8sYSk9PnRoaXMuc29ydFByZWRpY2F0ZShp''@;'; put 'put ''LG8uZGF0YSxhLmRhdGEpLHRoaXMuX3NldHVwSW5wdXRTeW5jU3Vic2NyaXB0aW9uKHRoaXMuX2Ryb3BMaXN0UmVmKSx0aGlzLl9oYW5kbGVFdmVudHModGhpcy5fZHJvcExpc3RSZWYpLG4uX2Ryb3BMaXN0cy5wdXNoKHRoaXMpLHRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5faXRlbXMuYWRk''@;'; put 'put ''KHRoaXMpfWFkZEl0ZW0odCl7dGhpcy5fdW5zb3J0ZWRJdGVtcy5hZGQodCksdC5fZHJhZ1JlZi5fd2l0aERyb3BDb250YWluZXIodGhpcy5fZHJvcExpc3RSZWYpLHRoaXMuX2Ryb3BMaXN0UmVmLmlzRHJhZ2dpbmcoKSYmdGhpcy5fc3luY0l0ZW1zV2l0aFJlZih0aGlzLmdldFNvcnRlZEl0''@;'; put 'put ''ZW1zKCkubWFwKHI9PnIuX2RyYWdSZWYpKX1yZW1vdmVJdGVtKHQpe2lmKHRoaXMuX3Vuc29ydGVkSXRlbXMuZGVsZXRlKHQpLHRoaXMuX2xhdGVzdFNvcnRlZFJlZnMpe2NvbnN0IHI9dGhpcy5fbGF0ZXN0U29ydGVkUmVmcy5pbmRleE9mKHQuX2RyYWdSZWYpO3I+LTEmJih0aGlzLl9sYXRl''@;'; put 'put ''c3RTb3J0ZWRSZWZzLnNwbGljZShyLDEpLHRoaXMuX3N5bmNJdGVtc1dpdGhSZWYodGhpcy5fbGF0ZXN0U29ydGVkUmVmcykpfX1nZXRTb3J0ZWRJdGVtcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX3Vuc29ydGVkSXRlbXMpLnNvcnQoKHQscik9PnQuX2RyYWdSZWYuZ2V0VmlzaWJsZUVs''@;'; put 'put ''ZW1lbnQoKS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyLl9kcmFnUmVmLmdldFZpc2libGVFbGVtZW50KCkpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HPy0xOjEpfW5nT25EZXN0cm95KCl7Y29uc3QgdD1uLl9kcm9wTGlzdHMuaW5kZXhPZih0aGlzKTt0Pi0xJiZuLl9kcm9w''@;'; put 'put ''TGlzdHMuc3BsaWNlKHQsMSksdGhpcy5fZ3JvdXAmJnRoaXMuX2dyb3VwLl9pdGVtcy5kZWxldGUodGhpcyksdGhpcy5fbGF0ZXN0U29ydGVkUmVmcz12b2lkIDAsdGhpcy5fdW5zb3J0ZWRJdGVtcy5jbGVhcigpLHRoaXMuX2Ryb3BMaXN0UmVmLmRpc3Bvc2UoKSx0aGlzLl9kZXN0cm95ZWQu''@;'; put 'put ''bmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfV9zZXR1cElucHV0U3luY1N1YnNjcmlwdGlvbih0KXt0aGlzLl9kaXImJnRoaXMuX2Rpci5jaGFuZ2UucGlwZShxZyh0aGlzLl9kaXIudmFsdWUpLHYwKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShyPT50LndpdGhEaXJlY3Rp''@;'; put 'put ''b24ocikpLHQuYmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCk9Pntjb25zdCByPWZ1bmN0aW9uIHI0dChuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uOltuXX0odGhpcy5jb25uZWN0ZWRUbykubWFwKGk9PiJzdHJpbmciPT10eXBlb2YgaT9uLl9kcm9wTGlzdHMuZmluZChhPT5hLmlkPT09''@;'; put 'put ''aSk6aSk7aWYodGhpcy5fZ3JvdXAmJnRoaXMuX2dyb3VwLl9pdGVtcy5mb3JFYWNoKGk9PnstMT09PXIuaW5kZXhPZihpKSYmci5wdXNoKGkpfSksIXRoaXMuX3Njcm9sbGFibGVQYXJlbnRzUmVzb2x2ZWQpe2NvbnN0IGk9dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlci5nZXRBbmNlc3RvclNjcm9s''@;'; put 'put ''bENvbnRhaW5lcnModGhpcy5lbGVtZW50KS5tYXAobz0+by5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudCk7dGhpcy5fZHJvcExpc3RSZWYud2l0aFNjcm9sbGFibGVQYXJlbnRzKGkpLHRoaXMuX3Njcm9sbGFibGVQYXJlbnRzUmVzb2x2ZWQ9ITB9aWYodGhpcy5lbGVtZW50Q29udGFp''@;'; put 'put ''bmVyU2VsZWN0b3Ipe2NvbnN0IGk9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmVsZW1lbnRDb250YWluZXJTZWxlY3Rvcik7dC53aXRoRWxlbWVudENvbnRhaW5lcihpKX10LmRpc2FibGVkPXRoaXMuZGlzYWJsZWQsdC5sb2NrQXhpcz10aGlzLmxvY2tB''@;'; put 'put ''eGlzLHQuc29ydGluZ0Rpc2FibGVkPXRoaXMuc29ydGluZ0Rpc2FibGVkLHQuYXV0b1Njcm9sbERpc2FibGVkPXRoaXMuYXV0b1Njcm9sbERpc2FibGVkLHQuYXV0b1Njcm9sbFN0ZXA9RmIodGhpcy5hdXRvU2Nyb2xsU3RlcCwyKSx0Lmhhc0FuY2hvcj10aGlzLmhhc0FuY2hvcix0LmNvbm5l''@;'; put 'put ''Y3RlZFRvKHIuZmlsdGVyKGk9PmkmJmkhPT10aGlzKS5tYXAoaT0+aS5fZHJvcExpc3RSZWYpKS53aXRoT3JpZW50YXRpb24odGhpcy5vcmllbnRhdGlvbil9KX1faGFuZGxlRXZlbnRzKHQpe3QuYmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zeW5jSXRlbXNXaXRoUmVmKHRo''@;'; put 'put ''aXMuZ2V0U29ydGVkSXRlbXMoKS5tYXAocj0+ci5fZHJhZ1JlZikpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksdC5lbnRlcmVkLnN1YnNjcmliZShyPT57dGhpcy5lbnRlcmVkLmVtaXQoe2NvbnRhaW5lcjp0aGlzLGl0ZW06ci5pdGVtLmRhdGEsY3VycmVudElu''@;'; put 'put ''ZGV4OnIuY3VycmVudEluZGV4fSl9KSx0LmV4aXRlZC5zdWJzY3JpYmUocj0+e3RoaXMuZXhpdGVkLmVtaXQoe2NvbnRhaW5lcjp0aGlzLGl0ZW06ci5pdGVtLmRhdGF9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHQuc29ydGVkLnN1YnNjcmliZShyPT57dGhp''@;'; put 'put ''cy5zb3J0ZWQuZW1pdCh7cHJldmlvdXNJbmRleDpyLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OnIuY3VycmVudEluZGV4LGNvbnRhaW5lcjp0aGlzLGl0ZW06ci5pdGVtLmRhdGF9KX0pLHQuZHJvcHBlZC5zdWJzY3JpYmUocj0+e3RoaXMuZHJvcHBlZC5lbWl0KHtwcmV2aW91c0luZGV4''@;'; put 'put ''OnIucHJldmlvdXNJbmRleCxjdXJyZW50SW5kZXg6ci5jdXJyZW50SW5kZXgscHJldmlvdXNDb250YWluZXI6ci5wcmV2aW91c0NvbnRhaW5lci5kYXRhLGNvbnRhaW5lcjpyLmNvbnRhaW5lci5kYXRhLGl0ZW06ci5pdGVtLmRhdGEsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjpyLmlzUG9pbnRl''@;'; put 'put ''ck92ZXJDb250YWluZXIsZGlzdGFuY2U6ci5kaXN0YW5jZSxkcm9wUG9pbnQ6ci5kcm9wUG9pbnQsZXZlbnQ6ci5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksaEQodC5yZWNlaXZpbmdTdGFydGVkLHQucmVjZWl2aW5nU3RvcHBlZCkuc3Vic2NyaWJl''@;'; put 'put ''KCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9X2Fzc2lnbkRlZmF1bHRzKHQpe2NvbnN0e2xvY2tBeGlzOnIsZHJhZ2dpbmdEaXNhYmxlZDppLHNvcnRpbmdEaXNhYmxlZDpvLGxpc3RBdXRvU2Nyb2xsRGlzYWJsZWQ6YSxsaXN0T3JpZW50YXRpb246bH09dDt0''@;'; put 'put ''aGlzLmRpc2FibGVkPWk/PyExLHRoaXMuc29ydGluZ0Rpc2FibGVkPW8/PyExLHRoaXMuYXV0b1Njcm9sbERpc2FibGVkPWE/PyExLHRoaXMub3JpZW50YXRpb249bHx8InZlcnRpY2FsIix0aGlzLmxvY2tBeGlzPXJ8fG51bGx9X3N5bmNJdGVtc1dpdGhSZWYodCl7dGhpcy5fbGF0ZXN0U29y''@;'; put 'put ''dGVkUmVmcz10LHRoaXMuX2Ryb3BMaXN0UmVmLndpdGhJdGVtcyh0KX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrRHJvcExpc3QiLCIiXSxbImNkay1kcm9wLWxpc3Qi''@;'; put 'put ''XV0saG9zdEF0dHJzOlsxLCJjZGstZHJvcC1saXN0Il0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24ocixpKXsyJnImJihScigiaWQiLGkuaWQpLHdyKCJjZGstZHJvcC1saXN0LWRpc2FibGVkIixpLmRpc2FibGVkKSgiY2RrLWRyb3AtbGlzdC1kcmFnZ2luZyIsaS5fZHJvcExp''@;'; put 'put ''c3RSZWYuaXNEcmFnZ2luZygpKSgiY2RrLWRyb3AtbGlzdC1yZWNlaXZpbmciLGkuX2Ryb3BMaXN0UmVmLmlzUmVjZWl2aW5nKCkpKX0saW5wdXRzOntjb25uZWN0ZWRUbzpbMCwiY2RrRHJvcExpc3RDb25uZWN0ZWRUbyIsImNvbm5lY3RlZFRvIl0sZGF0YTpbMCwiY2RrRHJvcExpc3REYXRh''@;'; put 'put ''IiwiZGF0YSJdLG9yaWVudGF0aW9uOlswLCJjZGtEcm9wTGlzdE9yaWVudGF0aW9uIiwib3JpZW50YXRpb24iXSxpZDoiaWQiLGxvY2tBeGlzOlswLCJjZGtEcm9wTGlzdExvY2tBeGlzIiwibG9ja0F4aXMiXSxkaXNhYmxlZDpbMiwiY2RrRHJvcExpc3REaXNhYmxlZCIsImRpc2FibGVkIixa''@;'; put 'put ''MF0sc29ydGluZ0Rpc2FibGVkOlsyLCJjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZCIsInNvcnRpbmdEaXNhYmxlZCIsWjBdLGVudGVyUHJlZGljYXRlOlswLCJjZGtEcm9wTGlzdEVudGVyUHJlZGljYXRlIiwiZW50ZXJQcmVkaWNhdGUiXSxzb3J0UHJlZGljYXRlOlswLCJjZGtEcm9wTGlz''@;'; put 'put ''dFNvcnRQcmVkaWNhdGUiLCJzb3J0UHJlZGljYXRlIl0sYXV0b1Njcm9sbERpc2FibGVkOlsyLCJjZGtEcm9wTGlzdEF1dG9TY3JvbGxEaXNhYmxlZCIsImF1dG9TY3JvbGxEaXNhYmxlZCIsWjBdLGF1dG9TY3JvbGxTdGVwOlswLCJjZGtEcm9wTGlzdEF1dG9TY3JvbGxTdGVwIiwiYXV0b1Nj''@;'; put 'put ''cm9sbFN0ZXAiXSxlbGVtZW50Q29udGFpbmVyU2VsZWN0b3I6WzAsImNka0Ryb3BMaXN0RWxlbWVudENvbnRhaW5lciIsImVsZW1lbnRDb250YWluZXJTZWxlY3RvciJdLGhhc0FuY2hvcjpbMiwiY2RrRHJvcExpc3RIYXNBbmNob3IiLCJoYXNBbmNob3IiLFowXX0sb3V0cHV0czp7ZHJvcHBl''@;'; put 'put ''ZDoiY2RrRHJvcExpc3REcm9wcGVkIixlbnRlcmVkOiJjZGtEcm9wTGlzdEVudGVyZWQiLGV4aXRlZDoiY2RrRHJvcExpc3RFeGl0ZWQiLHNvcnRlZDoiY2RrRHJvcExpc3RTb3J0ZWQifSxleHBvcnRBczpbImNka0Ryb3BMaXN0Il0sZmVhdHVyZXM6W2JvKFt7cHJvdmlkZTpQb2UsdXNlVmFs''@;'; put 'put ''dWU6dm9pZCAwfSx7cHJvdmlkZTpOb2UsdXNlRXhpc3Rpbmc6bn1dKV19KX1yZXR1cm4gbn0pKCksU0VlPSgoKT0+e2NsYXNzIG57c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1bW9kPUdpKHt0eXBlOm59KTtzdGF0aWMgXHUwMjc1''@;'; put 'put ''aW5qPW1pKHtwcm92aWRlcnM6W1Z6XSxpbXBvcnRzOlt0NHRdfSl9cmV0dXJuIG59KSgpO2NvbnN0IGVzPVsiKiJdLEU0dD1bW1siY2xyLWFjY29yZGlvbi10aXRsZSJdLFsiY2xyLXN0ZXAtdGl0bGUiXV0sW1siY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiJdLFsiY2xyLXN0ZXAtZGVzY3Jp''@;'; put 'put ''cHRpb24iXV0sIioiXSxNNHQ9WyJjbHItYWNjb3JkaW9uLXRpdGxlLCBjbHItc3RlcC10aXRsZSIsImNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24sIGNsci1zdGVwLWRlc2NyaXB0aW9uIiwiKiJdO2Z1bmN0aW9uIFQ0dChuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiZGl2Iiw5KSx3''@;'; put 'put ''dCgiQHRvZ2dsZS5kb25lIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoKS4kaW1wbGljaXQ7cmV0dXJuIFhlKFRlKCkuY29sbGFwc2VQYW5lbE9uQW5pbWF0aW9uRG9uZShpKSl9KSxKKDEsImRpdiIsMTApLFdyKDIsMiksdGUoKSgpfTImbiYmcnQoIkB0b2dnbGUiLHZvaWQgMCl9ZnVu''@;'; put 'put ''Y3Rpb24geDR0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7bWwoMCksSigxLCJkaXYiLDIpKDIsImRpdiIsMykoMywiYnV0dG9uIiw0LDApLEFjKDUsImFzeW5jIiksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLnRvZ2dsZVBhbmVsKCkpfSksSig2LCJzcGFu''@;'; put 'put ''Iiw1KSxJdCg3LCJjZHMtaWNvbiIsNiksdGUoKSxXcig4KSxXcig5LDEpLHRlKCkoKSxKKDEwLCJkaXYiLDcpLFluKDExLFQ0dCwzLDEsImRpdiIsOCksdGUoKSgpLHJsKCl9aWYoMiZuKXtsZXQgdDtjb25zdCByPWUuJGltcGxpY2l0LGk9VGUoKTtpZSgpLHJ0KCJuZ0NsYXNzIixpLmdldFBh''@;'; put 'put ''bmVsU3RhdGVDbGFzc2VzKHIpKSxpZSgpLFJyKCJyb2xlIixpLmhlYWRpbmdFbmFibGVkfHxpLmV4cGxpY2l0SGVhZGluZ0xldmVsPyJoZWFkaW5nIjpudWxsKSgiYXJpYS1sZXZlbCIsaS5oZWFkaW5nRW5hYmxlZHx8aS5leHBsaWNpdEhlYWRpbmdMZXZlbD9pLmhlYWRpbmdMZXZlbDpudWxs''@;'; put 'put ''KSxpZSgpLHdyKCJjbHItYWNjb3JkaW9uLWhlYWRlci1oYXMtZGVzY3JpcHRpb24iLChudWxsPT0odD1UZCg1LDE0LGkuYWNjb3JkaW9uRGVzY3JpcHRpb24uY2hhbmdlcykpP251bGw6dC5sZW5ndGgpfHxpLmFjY29yZGlvbkRlc2NyaXB0aW9uLmxlbmd0aCkscnQoImlkIixpLmdldEFjY29y''@;'; put 'put ''ZGlvbkhlYWRlcklkKHIudGVtcGxhdGVJZCkpKCJkaXNhYmxlZCIsci5kaXNhYmxlZCksUnIoImFyaWEtY29udHJvbHMiLCFyLmRpc2FibGVkJiZyLm9wZW4/aS5nZXRBY2NvcmRpb25Db250ZW50SWQoci50ZW1wbGF0ZUlkKTpudWxsKSgiYXJpYS1leHBhbmRlZCIsci5vcGVuKSxpZSg3KSxy''@;'; put 'put ''dCgiQHNraXBJbml0aWFsUmVuZGVyIix2b2lkIDApKCJpZCIsaS5nZXRBY2NvcmRpb25Db250ZW50SWQoci50ZW1wbGF0ZUlkKSksUnIoImFyaWEtaGlkZGVuIiwhci5vcGVuKSgiYXJpYS1sYWJlbGxlZGJ5IixpLmdldEFjY29yZGlvbkhlYWRlcklkKHIudGVtcGxhdGVJZCkpLGllKCkscnQo''@;'; put 'put ''Im5nSWYiLHIub3Blbil9fWNvbnN0IHE0dD1bImNsckxvYWRpbmciLCIiXTtmdW5jdGlvbiBLNHQobixlKXsxJm4mJihtbCgwKSxJdCgxLCJzcGFuIiwzKSxybCgpKSwyJm4mJihpZSgpLHJ0KCJAc3Bpbm5lciIsdm9pZCAwKSl9ZnVuY3Rpb24gWDR0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXdu''@;'; put 'put ''KCk7bWwoMCksSigxLCJzcGFuIiw0KSx3dCgiQHZhbGlkYXRlZC5kb25lIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoKTtyZXR1cm4gWGUoaS5sb2FkaW5nU3RhdGVDaGFuZ2UoaS5idXR0b25TdGF0ZS5ERUZBVUxUKSl9KSx0ZSgpLHJsKCl9MiZuJiYoaWUoKSxydCgiQHZhbGlkYXRl''@;'; put 'put ''ZCIsdm9pZCAwKSl9ZnVuY3Rpb24gUTR0KG4sZSl7MSZuJiYoSigwLCJzcGFuIiw1KSxXcigxKSx0ZSgpKSwyJm4mJnJ0KCJAZGVmYXVsdEJ1dHRvbiIsdm9pZCAwKX1mdW5jdGlvbiBKNHQobixlKXtpZigxJm4mJihtbCgwKSxKKDEsImJ1dHRvbiIsMSksSXQoMiwiY2RzLWljb24iLDIpLHRl''@;'; put 'put ''KCkscmwoKSksMiZuKXtjb25zdCB0PVRlKCk7aWUoKSxScigiYXJpYS1sYWJlbCIsdC5zaWducG9zdFRyaWdnZXJBcmlhTGFiZWx8fHQuY29tbW9uU3RyaW5ncy5rZXlzLnNpZ25wb3N0VG9nZ2xlKSxpZSgpLFJyKCJ0aXRsZSIsdC5jb21tb25TdHJpbmdzLmtleXMuaW5mbyl9fWNvbnN0IGU1''@;'; put 'put ''dD1bW1siY2xyLXNpZ25wb3N0LXRpdGxlIl1dLCIqIl0sdDV0PVsiY2xyLXNpZ25wb3N0LXRpdGxlIiwiKiJdLG41dD1bW1siIiwiY2xyQ2hlY2tib3giLCIiXSxbIiIsImNsclRvZ2dsZSIsIiJdXSxbWyJsYWJlbCJdXV0scjV0PVsiW2NsckNoZWNrYm94XSxbY2xyVG9nZ2xlXSIsImxhYmVs''@;'; put 'put ''Il07ZnVuY3Rpb24gaTV0KG4sZSl7MSZuJiZJdCgwLCJsYWJlbCIpfWNvbnN0IG81dD1bW1sibGFiZWwiXV0sW1siY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbImNsci10b2dnbGUtd3JhcHBlciJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1si''@;'; put 'put ''Y2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sYTV0PVsibGFiZWwiLCJjbHItY2hlY2tib3gtd3JhcHBlcixjbHItdG9nZ2xlLXdyYXBwZXIiLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBzNXQobixlKXsxJm4m''@;'; put 'put ''Jkl0KDAsImxhYmVsIil9ZnVuY3Rpb24gbDV0KG4sZSl7MSZuJiYoSigwLCJkaXYiLDMpLFdyKDEsMiksdGUoKSl9ZnVuY3Rpb24gYzV0KG4sZSl7MSZuJiZJdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gdTV0KG4sZSl7MSZuJiZJdCgwLCJjZHMtaWNvbiIsNyl9ZnVuY3Rpb24gZDV0KG4s''@;'; put 'put ''ZSl7MSZuJiZXcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIGg1dChuLGUpezEmbiYmV3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9ZnVuY3Rpb24gZjV0KG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiLDMpLFluKDEsYzV0LDEsMCwiY2RzLWljb24iLDQpKDIsdTV0''@;'; put 'put ''LDEsMCwiY2RzLWljb24iLDUpKDMsZDV0LDEsMCwibmctY29udGVudCIsMCkoNCxoNXQsMSwwLCJuZy1jb250ZW50IiwwKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSgpLHJ0KCJuZ0lmIix0LnNob3dJbnZhbGlkKSxpZSgpLHJ0KCJuZ0lmIix0LnNob3dWYWxpZCksaWUoKSxydCgibmdJ''@;'; put 'put ''ZiIsdC5zaG93SW52YWxpZCksaWUoKSxydCgibmdJZiIsdC5zaG93VmFsaWQpfX1jb25zdCBwNXQ9WyJjbHJLZXlGb2N1cyIsIiJdLHk1dD1bW1sibGFiZWwiXV0sW1siIiwiY2xySW5wdXRQcmVmaXgiLCIiXV0sW1siIiwiY2xySW5wdXQiLCIiXV0sW1siIiwiY2xySW5wdXRTdWZmaXgiLCIi''@;'; put 'put ''XV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLGI1dD1bImxhYmVsIiwiW2NscklucHV0UHJlZml4XSIsIltjbHJJbnB1dF0iLCJbY2xySW5wdXRTdWZmaXhdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwi''@;'; put 'put ''Y2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gdzV0KG4sZSl7MSZuJiZJdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIEM1dChuLGUpezEmbiYmSXQoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIFM1dChuLGUpezEmbiYmSXQoMCwiY2RzLWljb24iLDcpfWZ1''@;'; put 'put ''bmN0aW9uIEU1dChuLGUpezEmbiYmV3IoMCw0LFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIE01dChuLGUpezEmbiYmV3IoMCw1LFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBUNXQobixlKXsxJm4mJldyKDAsNixbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWZ1bmN0''@;'; put 'put ''aW9uIE41dChuLGUpezEmbiYmV3IoMCl9Y29uc3QgRjV0PVsidGFiQ29udGVudFByb2plY3RlZFJlZiJdO2Z1bmN0aW9uIFA1dChuLGUpe2lmKDEmbiYmKEooMCwic2VjdGlvbiIsMSksV3IoMSksdGUoKSksMiZuKXtjb25zdCB0PVRlKCk7d3IoImFjdGl2ZSIsdC5hY3RpdmUpLHJ0KCJpZCIs''@;'; put 'put ''dC50YWJDb250ZW50SWQpKCJoaWRkZW4iLCF0LmFjdGl2ZSksUnIoImFyaWEtbGFiZWxsZWRieSIsdC5hcmlhTGFiZWxsZWRCeSkoImFyaWEtaGlkZGVuIiwhdC5hY3RpdmUpfX1jb25zdCBINXQ9WyJ0YWJDb250ZW50Vmlld0NvbnRhaW5lciJdLFY1dD1bW1siY2xyLXRhYnMtYWN0aW9ucyJd''@;'; put 'put ''XV0sQjV0PVsiY2xyLXRhYnMtYWN0aW9ucyJdO2Z1bmN0aW9uIGo1dChuLGUpe2lmKDEmbiYmKG1sKDApLEooMSwibGkiLDUpLGF1KDIsNiksdGUoKSxybCgpKSwyJm4pe2NvbnN0IHQ9VGUoKS4kaW1wbGljaXQ7aWUoMikscnQoIm5nVGVtcGxhdGVPdXRsZXQiLHQudGVtcGxhdGVSZWZDb250''@;'; put 'put ''YWluZXIudGVtcGxhdGUpfX1mdW5jdGlvbiBVNXQobixlKXtpZigxJm4mJihtbCgwKSxZbigxLGo1dCwzLDEsIm5nLWNvbnRhaW5lciIsNCkscmwoKSksMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0LHI9VGUoKTtpZSgpLHJ0KCJuZ0lmIix0LnRhYnNJZD09PXIudGFic0lkJiYhdC5pbk92ZXJm''@;'; put 'put ''bG93KX19ZnVuY3Rpb24gejV0KG4sZSl7MSZuJiZhdSgwLDYpLDImbiYmcnQoIm5nVGVtcGxhdGVPdXRsZXQiLFRlKCkuJGltcGxpY2l0LnRlbXBsYXRlUmVmQ29udGFpbmVyLnRlbXBsYXRlKX1mdW5jdGlvbiBXNXQobixlKXtpZigxJm4mJihtbCgwKSxZbigxLHo1dCwxLDEsIm5nLWNvbnRh''@;'; put 'put ''aW5lciIsMTMpLHJsKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdCxyPVRlKDMpO2llKCkscnQoIm5nSWYiLHQudGFic0lkPT09ci50YWJzSWQmJnQuaW5PdmVyZmxvdyl9fWZ1bmN0aW9uIFk1dChuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLXRhYi1vdmVyZmxvdy1jb250''@;'; put 'put ''ZW50IiwxMiksd3QoImtleWRvd24uZXNjYXBlIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgyKS5jbG9zZU9uRXNjYXBlS2V5KCkpfSxQOCkoImNsaWNrIixmdW5jdGlvbihpKXtZZSh0KSxUZSgpO2NvbnN0IG89b28oNCk7cmV0dXJuIFhlKFRlKCkuY2xvc2VPbk91dHNpZGVDbGlj''@;'; put 'put ''ayhpLG8pKX0sUDgpKCJmb2N1c291dCIsZnVuY3Rpb24oaSl7cmV0dXJuIFllKHQpLFhlKFRlKDIpLmNsb3NlT25Gb2N1c091dChpKSl9KSxZbigxLFc1dCwyLDEsIm5nLWNvbnRhaW5lciIsMyksdGUoKX1pZigyJm4pe2NvbnN0IHQ9VGUoMik7aWUoKSxydCgibmdGb3JPZiIsdC50YWJMaW5r''@;'; put 'put ''RGlyZWN0aXZlcyl9fWZ1bmN0aW9uIFo1dChuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO21sKDApLEooMSwiZGl2Iiw3KSgyLCJsaSIsOCkoMywiYnV0dG9uIiw5LDEpLHd0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCkuX21vdXNlZG93bj0hMCl9KSgiZm9j''@;'; put 'put ''dXMiLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCkub3Blbk92ZXJmbG93T25Gb2N1cygpKX0pKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoKS50b2dnbGVPdmVyZmxvd09uQ2xpY2soKSl9KSxJdCg1LCJjZHMtaWNvbiIsMTApLHRlKCkoKSxZbig2LFk1dCwy''@;'; put 'put ''LDEsImNsci10YWItb3ZlcmZsb3ctY29udGVudCIsMTEpLHRlKCkscmwoKX1pZigyJm4pe2NvbnN0IHQ9VGUoKTtpZSgpLHdyKCJvcGVuIix0LnRvZ2dsZVNlcnZpY2Uub3BlbiksaWUoMiksd3IoImFjdGl2ZSIsdC5hY3RpdmVUYWJJbk92ZXJmbG93KSgib3BlbiIsdC50b2dnbGVTZXJ2aWNl''@;'; put 'put ''Lm9wZW4pLFJyKCJ0YWJpbmRleCIsdC5hY3RpdmVUYWJJbk92ZXJmbG93JiYhdC50b2dnbGVTZXJ2aWNlLm9wZW4/MDotMSkoInRpdGxlIix0LmNvbW1vblN0cmluZ3Mua2V5cy5tb3JlKSxpZSgyKSxScigic3RhdHVzIix0LnRvZ2dsZVNlcnZpY2Uub3Blbj8iaW5mbyI6bnVsbCkoInRpdGxl''@;'; put 'put ''Iix0LmNvbW1vblN0cmluZ3Mua2V5cy5tb3JlKSxpZSgpLHJ0KCJuZ0lmIix0LnRvZ2dsZVNlcnZpY2Uub3Blbil9fWZ1bmN0aW9uIEc1dChuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiYnV0dG9uIiwzKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCku''@;'; put 'put ''dG9nZ2xlQnlCdXR0b24oKSl9KSxJdCgxLCJjZHMtaWNvbiIsNCksdGUoKX1pZigyJm4pe2NvbnN0IHQ9VGUoKTt3cigib24tY29sbGFwc2UiLHQuY29sbGFwc2VkKSxScigiYXJpYS1jb250cm9scyIsdC5jb250ZW50SWQpKCJhcmlhLWV4cGFuZGVkIix0LmFyaWFFeHBhbmRlZCkoImFyaWEt''@;'; put 'put ''bGFiZWwiLHQudG9nZ2xlTGFiZWx8fHQuY29tbW9uU3RyaW5ncy5rZXlzLnZlcnRpY2FsTmF2VG9nZ2xlKSxpZSgpLFJyKCJkaXJlY3Rpb24iLHQuY29sbGFwc2VkPyJyaWdodCI6ImxlZnQiKX19ZnVuY3Rpb24gJDV0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJidXR0b24iLDUp''@;'; put 'put ''LHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoKS5jb2xsYXBzZWQ9ITEpfSksdGUoKX1pZigyJm4pe2NvbnN0IHQ9VGUoKTtScigiYXJpYS1jb250cm9scyIsdC5jb250ZW50SWQpKCJhcmlhLWxhYmVsIix0LnRvZ2dsZUxhYmVsfHx0LmNvbW1vblN0cmluZ3Mua2V5''@;'; put 'put ''cy52ZXJ0aWNhbE5hdlRvZ2dsZSl9fWNvbnN0IFg1dD1bImNsclZlcnRpY2FsTmF2TGluayIsIiJdLFE1dD1bW1siIiwiY2xyVmVydGljYWxOYXZJY29uIiwiIl1dLCIqIl0sSjV0PVsiW2NsclZlcnRpY2FsTmF2SWNvbl0iLCIqIl07ZnVuY3Rpb24gZTZ0KG4sZSl7aWYoMSZuJiYoSigwLCJ0''@;'; put 'put ''aCIsNCkoMSwic3BhbiIpLFNlKDIpLHRlKCkoKSksMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0O2llKCksUnIoImFyaWEtbGFiZWwiLHQuZGF5KSxpZSgpLHByKHQubmFycm93KX19ZnVuY3Rpb24gdDZ0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJ0ZCIsNykoMSwiY2xyLWRheSIs''@;'; put 'put ''OCksd3QoInNlbGVjdERheSIsZnVuY3Rpb24oaSl7cmV0dXJuIFllKHQpLFhlKFRlKDIpLnNldFNlbGVjdGVkRGF5KGkpKX0pLHRlKCkoKX1pZigyJm4pe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7aWUoKSxydCgiY2xyRGF5VmlldyIsdCl9fWZ1bmN0aW9uIG42dChuLGUpe2lmKDEmbiYmKEooMCwi''@;'; put 'put ''dHIiLDUpLFluKDEsdDZ0LDIsMSwidGQiLDYpLHRlKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdDtpZSgpLHJ0KCJuZ0Zvck9mIix0KX19ZnVuY3Rpb24gcjZ0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJidXR0b24iLDEwKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3Qg''@;'; put 'put ''aT1ZZSh0KS5pbmRleDtyZXR1cm4gWGUoVGUoKS5jaGFuZ2VNb250aChpKSl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtjb25zdCBpPVllKHQpLmluZGV4O3JldHVybiBYZShUZSgpLm9uSG92ZXIoaSkpfSksU2UoMSksdGUoKX1pZigyJm4pe2NvbnN0IHQ9ZS4kaW1wbGljaXQscj1lLmlu''@;'; put 'put ''ZGV4LGk9VGUoKTt3cigiaXMtc2VsZWN0ZWQiLGkuaXNTZWxlY3RlZChyKSkoImlzLXN0YXJ0LXJhbmdlIixpLmdldElzUmFuZ2VTdGFydE1vbnRoKHIpKSgiaXMtZW5kLXJhbmdlIixpLmdldElzUmFuZ2VFbmRNb250aChyKSkoImluLXJhbmdlIixpLmlzSW5SYW5nZShyKSkoImlzLXRvZGF5''@;'; put 'put ''IixpLmNhbGVuZGFyWWVhcj09PWkuY3VycmVudENhbGVuZGFyWWVhciYmcj09PWkuY3VycmVudENhbGVuZGFyTW9udGgpLFJyKCJ0YWJpbmRleCIsaS5nZXRUYWJJbmRleChyKSksaWUoKSxTcigiICIsdCwiICIpfX1mdW5jdGlvbiBpNnQobixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAs''@;'; put 'put ''ImJ1dHRvbiIsMTApLHd0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBpPVllKHQpLiRpbXBsaWNpdDtyZXR1cm4gWGUoVGUoKS5jaGFuZ2VZZWFyKGkpKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe2NvbnN0IGk9WWUodCkuJGltcGxpY2l0O3JldHVybiBYZShUZSgpLm9uSG92ZXIoaSkp''@;'; put 'put ''fSksU2UoMSksdGUoKX1pZigyJm4pe2NvbnN0IHQ9ZS4kaW1wbGljaXQscj1UZSgpO3dyKCJpcy1zZWxlY3RlZCIsdD09PXIuc2VsZWN0ZWRTdGFydFllYXJ8fHQ9PT1yLnNlbGVjdGVkRW5kWWVhcikoImlzLXN0YXJ0LXJhbmdlIixyLmdldElzUmFuZ2VTdGFydFllYXIodCkpKCJpcy1lbmQt''@;'; put 'put ''cmFuZ2UiLHIuZ2V0SXNSYW5nZUVuZFllYXIodCkpKCJpbi1yYW5nZSIsci5pc0luUmFuZ2UodCkpKCJpcy10b2RheSIsci5pc0N1cnJlbnRDYWxlbmRhclllYXIodCkpLFJyKCJ0YWJpbmRleCIsci5nZXRUYWJJbmRleCh0KSksaWUoKSxTcigiICIsdCwiICIpfX1mdW5jdGlvbiBvNnQobixl''@;'; put 'put ''KXtpZigxJm4pe2NvbnN0IHQ9d24oKTttbCgwKSxKKDEsImEiLDYpLHd0KCJrZXl1cC5lbnRlciIsZnVuY3Rpb24oKXtjb25zdCBpPVllKHQpLiRpbXBsaWNpdDtyZXR1cm4gWGUoVGUoMikub25SYW5nZU9wdGlvblNlbGVjdChpKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaT1ZZSh0''@;'; put 'put ''KS4kaW1wbGljaXQ7cmV0dXJuIFhlKFRlKDIpLm9uUmFuZ2VPcHRpb25TZWxlY3QoaSkpfSksU2UoMiksdGUoKSxybCgpfWlmKDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdDtpZSgpLFJyKCJhcmlhLWxhYmVsIixudWxsPT10P251bGw6dC5sYWJlbCksaWUoKSxTcigiICIsdC5sYWJlbCwiICIp''@;'; put 'put ''fX1mdW5jdGlvbiBhNnQobixlKXsxJm4mJmF1KDApfWZ1bmN0aW9uIHM2dChuLGUpe2lmKDEmbiYmKG1sKDApLEooMSwiY2xyLXZlcnRpY2FsLW5hdiIsMiksWW4oMixvNnQsMywyLCJuZy1jb250YWluZXIiLDMpLHRlKCksSigzLCJkaXYiLDQpLFluKDQsYTZ0LDEsMCwibmctY29udGFpbmVy''@;'; put 'put ''Iiw1KSx0ZSgpLHJsKCkpLDImbil7Y29uc3QgdD1UZSgpLHI9b28oMik7aWUoMikscnQoIm5nRm9yT2YiLHQuZGF0ZVJhbmdlT3B0aW9ucyksaWUoMikscnQoIm5nVGVtcGxhdGVPdXRsZXQiLHIpfX1mdW5jdGlvbiBsNnQobixlKXsxJm4mJkl0KDAsImNsci1tb250aHBpY2tlciIpfWZ1bmN0''@;'; put 'put ''aW9uIGM2dChuLGUpezEmbiYmSXQoMCwiY2xyLXllYXJwaWNrZXIiKX1mdW5jdGlvbiB1NnQobixlKXsxJm4mJkl0KDAsImNsci1kYXlwaWNrZXIiKX1mdW5jdGlvbiBkNnQobixlKXsxJm4mJkl0KDAsImNsci1kYXRlcGlja2VyLWFjdGlvbnMiKX1mdW5jdGlvbiBoNnQobixlKXtpZigxJm4m''@;'; put 'put ''JlluKDAsbDZ0LDEsMCwiY2xyLW1vbnRocGlja2VyIiw3KSgxLGM2dCwxLDAsImNsci15ZWFycGlja2VyIiw3KSgyLHU2dCwxLDAsImNsci1kYXlwaWNrZXIiLDcpKDMsZDZ0LDEsMCwiY2xyLWRhdGVwaWNrZXItYWN0aW9ucyIsNyksMiZuKXtjb25zdCB0PVRlKCk7cnQoIm5nSWYiLHQuaXNN''@;'; put 'put ''b250aFZpZXcpLGllKCkscnQoIm5nSWYiLHQuaXNZZWFyVmlldyksaWUoKSxydCgibmdJZiIsdC5pc0RheVZpZXcpLGllKCkscnQoIm5nSWYiLHQuaGFzQWN0aW9uQnV0dG9ucyl9fWNvbnN0IGY2dD1bImFjdGlvbkJ1dHRvbiJdLHA2dD1bW1sibGFiZWwiXV0sW1siIiwiY2xyRGF0ZSIsIiJd''@;'; put 'put ''XSxbWyIiLCJjbHJTdGFydERhdGUiLCIiXV0sW1siIiwiY2xyRW5kRGF0ZSIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sZzZ0PVsibGFiZWwiLCJbY2xyRGF0ZV0iLCJbY2xyU3RhcnREYXRl''@;'; put 'put ''XSIsIltjbHJFbmREYXRlXSIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIG02dChuLGUpezEmbiYmSXQoMCwibGFiZWwiKX1mdW5jdGlvbiB2NnQobixlKXsxJm4mJihtbCgwKSxXcigxLDIpLEooMiwic3Bh''@;'; put 'put ''biIsOSksU2UoMywiLSIpLHRlKCksV3IoNCwzKSxybCgpKX1mdW5jdGlvbiBfNnQobixlKXsxJm4mJihKKDAsImJ1dHRvbiIsMTAsMCksSXQoMiwiY2RzLWljb24iLDExKSx0ZSgpKSwyJm4mJnJ0KCJkaXNhYmxlZCIsVGUoKS5pc0lucHV0RGF0ZURpc2FibGVkKX1mdW5jdGlvbiB5NnQobixl''@;'; put 'put ''KXsxJm4mJkl0KDAsImNsci1kYXRlcGlja2VyLXZpZXctbWFuYWdlciIsMTIpfWZ1bmN0aW9uIGI2dChuLGUpezEmbiYmSXQoMCwiY2RzLWljb24iLDEzKX1mdW5jdGlvbiB3NnQobixlKXsxJm4mJkl0KDAsImNkcy1pY29uIiwxNCl9ZnVuY3Rpb24gQzZ0KG4sZSl7MSZuJiZXcigwLDQsWyIq''@;'; put 'put ''bmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gUzZ0KG4sZSl7MSZuJiZXcigwLDUsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIEU2dChuLGUpezEmbiYmV3IoMCw2LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3QgQTZ0PVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJOdW1i''@;'; put 'put ''ZXJJbnB1dCIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sazZ0PVsibGFiZWwiLCJbY2xyTnVtYmVySW5wdXRdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJj''@;'; put 'put ''bHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gUjZ0KG4sZSl7MSZuJiZJdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIEk2dChuLGUpezEmbiYmSXQoMCwiY2RzLWljb24iLDExKX1mdW5jdGlvbiBENnQobixlKXsxJm4mJkl0KDAsImNkcy1pY29uIiwxMil9ZnVuY3Rpb24gTDZ0KG4sZSl7MSZu''@;'; put 'put ''JiZXcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gTzZ0KG4sZSl7MSZuJiZXcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIE42dChuLGUpezEmbiYmV3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3QgRjZ0PVtbWyIiLCJjbHJSYWRp''@;'; put 'put ''byIsIiJdXSxbWyJsYWJlbCJdXV0sUDZ0PVsiW2NsclJhZGlvXSIsImxhYmVsIl07ZnVuY3Rpb24gSDZ0KG4sZSl7MSZuJiZJdCgwLCJsYWJlbCIpfWNvbnN0IFY2dD1bW1sibGFiZWwiXV0sW1siY2xyLXJhZGlvLXdyYXBwZXIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1j''@;'; put 'put ''b250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLEI2dD1bImxhYmVsIiwiY2xyLXJhZGlvLXdyYXBwZXIiLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBqNnQobixlKXsxJm4mJkl0''@;'; put 'put ''KDAsImxhYmVsIil9ZnVuY3Rpb24gVTZ0KG4sZSl7MSZuJiYoSigwLCJkaXYiLDMpLFdyKDEsMiksdGUoKSl9ZnVuY3Rpb24gejZ0KG4sZSl7MSZuJiZJdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gVzZ0KG4sZSl7MSZuJiZJdCgwLCJjZHMtaWNvbiIsNyl9ZnVuY3Rpb24gWTZ0KG4sZSl7''@;'; put 'put ''MSZuJiZXcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIFo2dChuLGUpezEmbiYmV3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9ZnVuY3Rpb24gRzZ0KG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiLDMpLFluKDEsejZ0LDEsMCwiY2RzLWljb24iLDQpKDIsVzZ0LDEs''@;'; put 'put ''MCwiY2RzLWljb24iLDUpKDMsWTZ0LDEsMCwibmctY29udGVudCIsMCkoNCxaNnQsMSwwLCJuZy1jb250ZW50IiwwKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSgpLHJ0KCJuZ0lmIix0LnNob3dJbnZhbGlkKSxpZSgpLHJ0KCJuZ0lmIix0LnNob3dWYWxpZCksaWUoKSxydCgibmdJZiIs''@;'; put 'put ''dC5zaG93SW52YWxpZCksaWUoKSxydCgibmdJZiIsdC5zaG93VmFsaWQpfX1jb25zdCAkNnQ9W1tbImxhYmVsIl1dLFtbIiIsImNsclNlbGVjdCIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0s''@;'; put 'put ''cTZ0PVsibGFiZWwiLCJbY2xyU2VsZWN0XSIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIEs2dChuLGUpezEmbiYmSXQoMCwibGFiZWwiKX1mdW5jdGlvbiBYNnQobixlKXsxJm4mJkl0KDAsImNkcy1pY29u''@;'; put 'put ''Iiw1KX1mdW5jdGlvbiBRNnQobixlKXsxJm4mJkl0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiBKNnQobixlKXsxJm4mJldyKDAsMixbIipuZ0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlvbiBlOHQobixlKXsxJm4mJldyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24g''@;'; put 'put ''dDh0KG4sZSl7MSZuJiZXcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBuOHQ9W1tbImxhYmVsIl1dLFtbIiIsImNsclRleHRhcmVhIiwiIl1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxbWyJjbHItY29udHJvbC1zdWNjZXNzIl1d''@;'; put 'put ''XSxyOHQ9WyJsYWJlbCIsIltjbHJUZXh0YXJlYV0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBpOHQobixlKXsxJm4mJkl0KDAsImxhYmVsIil9ZnVuY3Rpb24gbzh0KG4sZSl7MSZuJiZJdCgwLCJjZHMt''@;'; put 'put ''aWNvbiIsNSl9ZnVuY3Rpb24gYTh0KG4sZSl7MSZuJiZJdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gczh0KG4sZSl7MSZuJiZXcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gbDh0KG4sZSl7MSZuJiZXcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0''@;'; put 'put ''aW9uIGM4dChuLGUpezEmbiYmV3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3QgdTh0PVsiYW5jaG9yIl07ZnVuY3Rpb24gZDh0KG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiLDQpKDEsImRpdiIsNSkoMiwiYnV0dG9uIiw2KSxJdCgzLCJjZHMtaWNvbiIsNyksdGUoKSgpLFdyKDQp''@;'; put 'put ''LHRlKCkpLDImbil7Y29uc3QgdD1UZSgpO3J0KCJpZCIsdC5wb3BvdmVySWQpLFJyKCJhcmlhLWxhYmVsIix0LmNvbW1vblN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckRpYWxvZ0FyaWFMYWJlbCksaWUoMyksUnIoInRpdGxlIix0LmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSl9fWNvbnN0''@;'; put 'put ''IGg4dD1bImlucHV0X2xvdyJdLGY4dD1bImlucHV0Il0scDh0PVsiY29sdW1uUG9ydGFsIl07ZnVuY3Rpb24gZzh0KG4sZSl7MSZuJiZXcigwKX1jb25zdCBtOHQ9WyJyZXNpemVUcmFja2VyIl0sdjh0PVsiY29sdW1uSGFuZGxlIl0sXzh0PVtbWyJjbHItZGctZmlsdGVyIl0sWyJjbHItZGct''@;'; put 'put ''c3RyaW5nLWZpbHRlciJdLFsiY2xyLWRnLW51bWVyaWMtZmlsdGVyIl1dLCIqIl0seTh0PVsiY2xyLWRnLWZpbHRlciwgY2xyLWRnLXN0cmluZy1maWx0ZXIsIGNsci1kZy1udW1lcmljLWZpbHRlciIsIioiXTtmdW5jdGlvbiBiOHQobixlKXsxJm4mJmF1KDApfWZ1bmN0aW9uIHc4dChuLGUp''@;'; put 'put ''ezEmbiYmSXQoMCwiY2RzLWljb24iLDEwKSwyJm4mJlJyKCJkaXJlY3Rpb24iLFRlKDIpLnNvcnREaXJlY3Rpb24pfWZ1bmN0aW9uIEM4dChuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiYnV0dG9uIiw3KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCku''@;'; put 'put ''c29ydCgpKX0pLFluKDEsYjh0LDEsMCwibmctY29udGFpbmVyIiw4KSgyLHc4dCwxLDEsImNkcy1pY29uIiw5KSx0ZSgpfWlmKDImbil7Y29uc3QgdD1UZSgpLHI9b28oNik7aWUoKSxydCgibmdUZW1wbGF0ZU91dGxldCIsciksaWUoKSxydCgibmdJZiIsdC5zb3J0RGlyZWN0aW9uKX19ZnVu''@;'; put 'put ''Y3Rpb24gUzh0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMTEpLGhpKCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgpO3JldHVybiBmaShvLmZpbHRlclZhbHVlLGkpfHwoby5maWx0ZXJWYWx1''@;'; put 'put ''ZT1pKSxYZShpKX0pLHRlKCl9aWYoMiZuKXtjb25zdCB0PVRlKCk7cnQoImNsckZpbHRlclBsYWNlaG9sZGVyIix0LmZpbHRlclN0cmluZ1BsYWNlaG9sZGVyKSgiY2xyRGdTdHJpbmdGaWx0ZXIiLHQucmVnaXN0ZXJlZCksZGkoImNsckZpbHRlclZhbHVlIix0LmZpbHRlclZhbHVlKX19ZnVu''@;'; put 'put ''Y3Rpb24gRTh0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItZGctbnVtZXJpYy1maWx0ZXIiLDEyKSxoaSgiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoKTtyZXR1cm4gZmkoby5maWx0ZXJWYWx1ZSxpKXx8KG8uZmlsdGVyVmFs''@;'; put 'put ''dWU9aSksWGUoaSl9KSx0ZSgpfWlmKDImbil7Y29uc3QgdD1UZSgpO3J0KCJjbHJGaWx0ZXJNYXhQbGFjZWhvbGRlciIsdC5maWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlcikoImNsckZpbHRlck1pblBsYWNlaG9sZGVyIix0LmZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyKSgiY2xyRGdOdW1l''@;'; put 'put ''cmljRmlsdGVyIix0LnJlZ2lzdGVyZWQpLGRpKCJjbHJGaWx0ZXJWYWx1ZSIsdC5maWx0ZXJWYWx1ZSl9fWZ1bmN0aW9uIE04dChuLGUpezEmbiYmV3IoMCwxKX1mdW5jdGlvbiBUOHQobixlKXsxJm4mJmF1KDApfWZ1bmN0aW9uIHg4dChuLGUpe2lmKDEmbiYmKEooMCwic3BhbiIsMTMpLFlu''@;'; put 'put ''KDEsVDh0LDEsMCwibmctY29udGFpbmVyIiw4KSx0ZSgpKSwyJm4pe1RlKCk7Y29uc3QgdD1vbyg2KTtpZSgpLHJ0KCJuZ1RlbXBsYXRlT3V0bGV0Iix0KX19ZnVuY3Rpb24gQTh0KG4sZSl7MSZuJiZJdCgwLCJjbHItZGctY29sdW1uLXNlcGFyYXRvciIpfWZ1bmN0aW9uIGs4dChuLGUpezEm''@;'; put 'put ''biYmSXQoMCwiZGl2Iiw0KX1mdW5jdGlvbiBSOHQobixlKXsxJm4mJldyKDAsMCxbIipuZ0lmIiwiZW1wdHlEYXRhZ3JpZCJdKX1jb25zdCBJOHQ9WyJjZWxsUG9ydGFsIl07ZnVuY3Rpb24gRDh0KG4sZSl7MSZuJiZXcigwKX1jb25zdCBMOHQ9WyJyb3dQb3J0YWwiXTtmdW5jdGlvbiBPOHQo''@;'; put 'put ''bixlKXsxJm4mJldyKDApfWNvbnN0IE44dD1bImRldGFpbEJ1dHRvbiJdLEY4dD1bInN0aWNreUNlbGxzIl0sUDh0PVsic2Nyb2xsYWJsZUNlbGxzIl0sSDh0PVsiY2FsY3VsYXRlZENlbGxzIl0sVjh0PVtbWyJjbHItZGctcm93LWRldGFpbCJdXSxbWyJjbHItZGctY2VsbCJdXSxbWyJjbHIt''@;'; put 'put ''ZGctYWN0aW9uLW92ZXJmbG93Il1dXSxCOHQ9WyJjbHItZGctcm93LWRldGFpbCIsImNsci1kZy1jZWxsIiwiY2xyLWRnLWFjdGlvbi1vdmVyZmxvdyJdLGo4dD1uPT4oeyJpcy1yZXBsYWNlZCI6bn0pLEVFZT1uPT4oeyJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIjpufSk7ZnVuY3Rpb24g''@;'; put 'put ''VTh0KG4sZSl7fWZ1bmN0aW9uIHo4dChuLGUpe2lmKDEmbiYmKEooMCwiY2xyLWV4cGFuZGFibGUtYW5pbWF0aW9uIiwxMCksWW4oMSxVOHQsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgyKSxyPW9vKDYpO3J0KCJjbHJFeHBhbmRUcmlnZ2VyIix0LmV4cGFu''@;'; put 'put ''ZEFuaW1hdGlvblRyaWdnZXIpLGllKCkscnQoIm5nVGVtcGxhdGVPdXRsZXQiLHIpfX1mdW5jdGlvbiBXOHQobixlKXt9ZnVuY3Rpb24gWTh0KG4sZSl7MSZuJiZZbigwLFc4dCwwLDAsIm5nLXRlbXBsYXRlIiwxMSksMiZuJiYoVGUoMikscnQoIm5nVGVtcGxhdGVPdXRsZXQiLG9vKDYpKSl9''@;'; put 'put ''ZnVuY3Rpb24gWjh0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJkaXYiLDkpLHd0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKGkpe3JldHVybiBZZSh0KSxYZShUZSgpLmNsZWFyUmFuZ2VzKGkpKX0pKCJjbGljayIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgpO3JldHVybiBY''@;'; put 'put ''ZShvLnNlbGVjdFJvdyghby5zZWxlY3RlZCxpKSl9KSxZbigxLHo4dCwyLDIsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNykoMixZOHQsMSwxLG51bGwsOCksdGUoKX1pZigyJm4pe2NvbnN0IHQ9VGUoKTtpZSgpLHJ0KCJuZ0lmIix0LmV4cGFuZC5leHBhbmRhYmxlKSxpZSgpLHJ0KCJu''@;'; put 'put ''Z0lmIiwhdC5leHBhbmQuZXhwYW5kYWJsZSl9fWZ1bmN0aW9uIEc4dChuLGUpe31mdW5jdGlvbiAkOHQobixlKXtpZigxJm4mJihKKDAsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsMTApLFluKDEsRzh0LDAsMCwibmctdGVtcGxhdGUiLDExKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoKSxy''@;'; put 'put ''PW9vKDYpO3J0KCJjbHJFeHBhbmRUcmlnZ2VyIix0LmV4cGFuZEFuaW1hdGlvblRyaWdnZXIpLGllKCkscnQoIm5nVGVtcGxhdGVPdXRsZXQiLHIpfX1mdW5jdGlvbiBxOHQobixlKXt9ZnVuY3Rpb24gSzh0KG4sZSl7MSZuJiZZbigwLHE4dCwwLDAsIm5nLXRlbXBsYXRlIiwxMSksMiZuJiYo''@;'; put 'put ''VGUoKSxydCgibmdUZW1wbGF0ZU91dGxldCIsb28oNikpKX1mdW5jdGlvbiBYOHQobixlKXsxJm4mJldyKDApfWZ1bmN0aW9uIFE4dChuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiZGl2IiwyMSkoMSwiZGl2IiwyMikoMiwiaW5wdXQiLDIzKSx3dCgibmdNb2RlbENoYW5nZSIsZnVu''@;'; put 'put ''Y3Rpb24oaSl7cmV0dXJuIFllKHQpLFhlKFRlKDIpLnRvZ2dsZShpKSl9KSx0ZSgpLEooMywibGFiZWwiLDI0KSx3dCgiY2xpY2siLGZ1bmN0aW9uKGkpe3JldHVybiBZZSh0KSxYZShUZSgyKS5jbGVhclJhbmdlcyhpKSl9KSxKKDQsInNwYW4iLDI1KSxTZSg1KSx0ZSgpKCkoKSgpfWlmKDIm''@;'; put 'put ''bil7Y29uc3QgdD1UZSgyKTtydCgibmdDbGFzcyIsdDQoNyxFRWUsIXQuY2xyRGdTZWxlY3RhYmxlKSksaWUoMikscnQoIm5nTW9kZWwiLHQuc2VsZWN0ZWQpKCJpZCIsdC5jaGVja2JveElkKSgiZGlzYWJsZWQiLCF0LmNsckRnU2VsZWN0YWJsZXx8bnVsbCksUnIoImFyaWEtZGlzYWJsZWQi''@;'; put 'put ''LCF0LmNsckRnU2VsZWN0YWJsZXx8bnVsbCksaWUoKSxydCgiZm9yIix0LmNoZWNrYm94SWQpLGllKDIpLHByKHQuY2xyRGdSb3dTZWxlY3Rpb25MYWJlbHx8dC5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0KX19ZnVuY3Rpb24gSjh0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJk''@;'; put 'put ''aXYiLDIxKSgxLCJjbHItcmFkaW8td3JhcHBlciIpKDIsImlucHV0IiwyNiksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoMik7cmV0dXJuIGZpKG8uc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGUsaSl8fChvLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPWkp''@;'; put 'put ''LFhlKGkpfSksdGUoKSxKKDMsImxhYmVsIiwyNykoNCwic3BhbiIsMjUpLFNlKDUpLHRlKCkoKSgpKCl9aWYoMiZuKXtjb25zdCB0PVRlKDIpO3J0KCJuZ0NsYXNzIix0NCgxMCxFRWUsIXQuY2xyRGdTZWxlY3RhYmxlKSksaWUoMikscnQoImlkIix0LnJhZGlvSWQpKCJuYW1lIix0LnNlbGVj''@;'; put 'put ''dGlvbi5pZCsiLXJhZGlvIikoInZhbHVlIix0Lml0ZW0pLGRpKCJuZ01vZGVsIix0LnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlKSxydCgiY2hlY2tlZCIsdC5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT09PXQuaXRlbSkoImRpc2FibGVkIiwhdC5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLFJyKCJh''@;'; put 'put ''cmlhLWRpc2FibGVkIiwhdC5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLGllKCkscnQoImZvciIsdC5yYWRpb0lkKSxpZSgyKSxwcih0LmNsckRnUm93U2VsZWN0aW9uTGFiZWx8fHQuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdCl9fWZ1bmN0aW9uIGU3dChuLGUpezEmbiYmKEooMCwiZGl2Iiwy''@;'; put 'put ''OCksV3IoMSwyKSx0ZSgpKX1mdW5jdGlvbiB0N3QobixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImJ1dHRvbiIsMzIpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoNCkudG9nZ2xlRXhwYW5kKCkpfSksSXQoMSwiY2RzLWljb24iLDMzKSx0ZSgpfWlmKDIm''@;'; put 'put ''bil7Y29uc3QgdD1UZSg0KTtScigiYXJpYS1leHBhbmRlZCIsdC5leHBhbmQuZXhwYW5kZWQpKCJhcmlhLWxhYmVsIix0LmV4cGFuZC5leHBhbmRlZD90LmNsckRnRGV0YWlsQ2xvc2VMYWJlbDp0LmNsckRnRGV0YWlsT3BlbkxhYmVsKSgiYXJpYS1jb250cm9scyIsdC5leHBhbmQuaGFzRXhw''@;'; put 'put ''YW5kVGVtcGxhdGUmJiF0LmV4cGFuZC5leHBhbmRlZD9udWxsOnQuZXhwYW5kYWJsZUlkKSxpZSgpLFJyKCJkaXJlY3Rpb24iLHQuZXhwYW5kLmV4cGFuZGVkPyJkb3duIjoicmlnaHQiKSgidGl0bGUiLHQuZXhwYW5kLmV4cGFuZGVkP3QuY29tbW9uU3RyaW5ncy5rZXlzLmNvbGxhcHNlOnQu''@;'; put 'put ''Y29tbW9uU3RyaW5ncy5rZXlzLmV4cGFuZCl9fWZ1bmN0aW9uIG43dChuLGUpe2lmKDEmbiYmKEooMCwiY2xyLXNwaW5uZXIiLDM0KSxTZSgxKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoNCk7aWUoKSxwcih0LmNvbW1vblN0cmluZ3Mua2V5cy5sb2FkaW5nKX19ZnVuY3Rpb24gcjd0KG4sZSl7''@;'; put 'put ''aWYoMSZuJiYobWwoMCksWW4oMSx0N3QsMiw1LCJidXR0b24iLDMwKSgyLG43dCwyLDEsImNsci1zcGlubmVyIiwzMSkscmwoKSksMiZuKXtjb25zdCB0PVRlKDMpO2llKCkscnQoIm5nSWYiLCF0LmV4cGFuZC5sb2FkaW5nKSxpZSgpLHJ0KCJuZ0lmIix0LmV4cGFuZC5sb2FkaW5nKX19ZnVu''@;'; put 'put ''Y3Rpb24gaTd0KG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiLDI5KSxZbigxLHI3dCwzLDIsIm5nLWNvbnRhaW5lciIsOCksdGUoKSksMiZuKXtjb25zdCB0PVRlKDIpO2llKCkscnQoIm5nSWYiLHQuZXhwYW5kLmV4cGFuZGFibGUpfX1mdW5jdGlvbiBvN3QobixlKXtpZigxJm4pe2NvbnN0IHQ9''@;'; put 'put ''d24oKTtKKDAsImJ1dHRvbiIsMzcsNSksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9b28oMSksbz1UZSgzKTtyZXR1cm4gWGUoby5kZXRhaWxTZXJ2aWNlLnRvZ2dsZShvLml0ZW0saSkpfSksSXQoMiwiY2RzLWljb24iLDM4KSx0ZSgpfWlmKDImbil7Y29uc3QgdD1UZSgz''@;'; put 'put ''KTt3cigiaXMtb3BlbiIsdC5kZXRhaWxTZXJ2aWNlLmlzUm93T3Blbih0Lml0ZW0pKSxydCgiZGlzYWJsZWQiLHQuZGV0YWlsRGlzYWJsZWQpLFJyKCJhcmlhLWxhYmVsIix0LmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKHQuaXRlbSk/dC5jbHJEZ0RldGFpbENsb3NlTGFiZWw6dC5jbHJEZ0Rl''@;'; put 'put ''dGFpbE9wZW5MYWJlbCkoImFyaWEtZXhwYW5kZWQiLHQuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4odC5pdGVtKSkoImFyaWEtY29udHJvbHMiLHQuZGV0YWlsU2VydmljZS5pZCksaWUoMiksUnIoImRpcmVjdGlvbiIsdC5kZXRhaWxTZXJ2aWNlLmlzUm93T3Blbih0Lml0ZW0pPyJsZWZ0Ijoi''@;'; put 'put ''cmlnaHQiKSgidGl0bGUiLHQuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4odC5pdGVtKT90LmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZTp0LmNvbW1vblN0cmluZ3Mua2V5cy5vcGVuKX19ZnVuY3Rpb24gYTd0KG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiLDM1KSxZbigxLG83dCwzLDgsImJ1dHRv''@;'; put 'put ''biIsMzYpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgyKTtpZSgpLHJ0KCJuZ0lmIiwhdC5kZXRhaWxIaWRkZW4pfX1mdW5jdGlvbiBzN3QobixlKXt9ZnVuY3Rpb24gbDd0KG4sZSl7MSZuJiZZbigwLHM3dCwwLDAsIm5nLXRlbXBsYXRlIiwxMSksMiZuJiYoVGUoMikscnQoIm5nVGVtcGxhdGVP''@;'; put 'put ''dXRsZXQiLG9vKDQpKSl9ZnVuY3Rpb24gYzd0KG4sZSl7fWZ1bmN0aW9uIHU3dChuLGUpezEmbiYmWW4oMCxjN3QsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLDImbiYmKFRlKDIpLHJ0KCJuZ1RlbXBsYXRlT3V0bGV0Iixvbyg0KSkpfWZ1bmN0aW9uIGQ3dChuLGUpezEmbiYmSXQoMCwiY2xyLWRn''@;'; put 'put ''LWNlbGwiLDM5KX1mdW5jdGlvbiBoN3QobixlKXtpZigxJm4mJihKKDAsImRpdiIsMTIpKDEsImRpdiIsMTMpLG1sKDIsbnVsbCwzKSxZbig0LFE4dCw2LDksImRpdiIsMTQpKDUsSjh0LDYsMTIsImRpdiIsMTQpKDYsZTd0LDIsMCwiZGl2IiwxNSkoNyxpN3QsMiwxLCJkaXYiLDE2KSg4LGE3''@;'; put 'put ''dCwyLDEsImRpdiIsMTcpLHJsKCksdGUoKSxKKDksImRpdiIsMTgpKDEwLCJkaXYiLDE5KSxXcigxMSwxKSxhdSgxMixudWxsLDQpLHRlKCksWW4oMTQsbDd0LDEsMSxudWxsLDgpKDE1LHU3dCwxLDEsbnVsbCw4KSx0ZSgpLFluKDE2LGQ3dCwxLDAsImNsci1kZy1jZWxsIiwyMCksdGUoKSks''@;'; put 'put ''MiZuKXtjb25zdCB0PVRlKCk7d3IoImRhdGFncmlkLXJvdy1kZXRhaWwtb3BlbiIsdC5kZXRhaWxTZXJ2aWNlLmlzUm93T3Blbih0Lml0ZW0pKSxydCgiaWQiLHQuaWQpLGllKDQpLHJ0KCJuZ0lmIix0LnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09dC5TRUxFQ1RJT05fVFlQRS5NdWx0aSks''@;'; put 'put ''aWUoKSxydCgibmdJZiIsdC5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXQuU0VMRUNUSU9OX1RZUEUuU2luZ2xlKSxpZSgpLHJ0KCJuZ0lmIix0LnJvd0FjdGlvblNlcnZpY2UuaGFzQWN0aW9uYWJsZVJvdyksaWUoKSxydCgibmdJZiIsdC5nbG9iYWxFeHBhbmRhYmxlLmhhc0V4cGFuZGFi''@;'; put 'put ''bGVSb3cpLGllKCkscnQoIm5nSWYiLHQuZGV0YWlsU2VydmljZS5lbmFibGVkKSxpZSgpLHJ0KCJuZ0NsYXNzIix0NCgxMixqOHQsdC5yZXBsYWNlZCYmdC5leHBhbmRlZCkpLGllKDUpLHJ0KCJuZ0lmIix0LnJlcGxhY2VkJiYhdC5leHBhbmQubG9hZGluZyksaWUoKSxydCgibmdJZiIsIXQu''@;'; put 'put ''cmVwbGFjZWQmJiF0LmV4cGFuZC5sb2FkaW5nKSxpZSgpLHJ0KCJuZ0lmIix0LnNrZWxldG9uTG9hZGluZyl9fWNvbnN0IGY3dD1bImRhdGFncmlkIl0scDd0PVsiZGF0YWdyaWRUYWJsZSJdLGc3dD1bInNjcm9sbGFibGVDb2x1bW5zIl0sbTd0PVsicHJvamVjdGVkRGlzcGxheUNvbHVtbnMi''@;'; put 'put ''XSx2N3Q9WyJwcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMiXSxfN3Q9WyJkaXNwbGF5ZWRSb3dzIl0seTd0PVsiY2FsY3VsYXRpb25Sb3dzIl0sYjd0PVsic2VsZWN0QWxsQ2hlY2tib3giXSx3N3Q9W1tbImNsci1kZy1hY3Rpb24tYmFyIl1dLFtbImNsci1kZy1wbGFjZWhvbGRlciJdXSxb''@;'; put 'put ''WyJjbHItZGctZm9vdGVyIl1dLFtbIiIsImNscklmRGV0YWlsIiwiIl0sWyJjbHItZGctZGV0YWlsIl1dXSxDN3Q9WyJjbHItZGctYWN0aW9uLWJhciIsImNsci1kZy1wbGFjZWhvbGRlciIsImNsci1kZy1mb290ZXIiLCJbY2xySWZEZXRhaWxdLGNsci1kZy1kZXRhaWwiXTtmdW5jdGlvbiBT''@;'; put 'put ''N3QobixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRpdiIsMzApKDEsImlucHV0IiwzMSw2KSxoaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgyKTtyZXR1cm4gZmkoby5hbGxTZWxlY3RlZCxpKXx8KG8uYWxsU2VsZWN0ZWQ9aSksWGUoaSl9KSx0''@;'; put 'put ''ZSgpLEooMywibGFiZWwiLDMyKSg0LCJzcGFuIiwzMyksU2UoNSksdGUoKSgpKCl9aWYoMiZuKXtjb25zdCB0PVRlKDIpO2llKCkscnQoImlkIix0LnNlbGVjdEFsbElkKSxkaSgibmdNb2RlbCIsdC5hbGxTZWxlY3RlZCksUnIoImFyaWEtbGFiZWwiLHQuY29tbW9uU3RyaW5ncy5rZXlzLnNl''@;'; put 'put ''bGVjdEFsbCksaWUoMikscnQoImZvciIsdC5zZWxlY3RBbGxJZCksaWUoMikscHIodC5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0QWxsKX19ZnVuY3Rpb24gRTd0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJkaXYiLDI3KSx3dCgia2V5ZG93bi5zcGFjZSIsZnVuY3Rpb24oaSl7''@;'; put 'put ''cmV0dXJuIFllKHQpLFhlKFRlKCkudG9nZ2xlQWxsU2VsZWN0ZWQoaSkpfSksWW4oMSxTN3QsNiw1LCJkaXYiLDI4KSxJdCgyLCJkaXYiLDI5KSx0ZSgpfWlmKDImbil7Y29uc3QgdD1UZSgpO2llKCkscnQoIm5nSWYiLCF0LnZpcnR1YWxTY3JvbGx8fHQuY3VzdG9tU2VsZWN0QWxsRW5hYmxl''@;'; put 'put ''ZCl9fWZ1bmN0aW9uIE03dChuLGUpe2lmKDEmbiYmKEooMCwiZGl2IiwzNCkoMSwiZGl2IiwzMyksU2UoMiksdGUoKSxJdCgzLCJkaXYiLDI5KSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSgyKSxwcih0LmNsckRnU2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsKX19ZnVuY3Rpb24gVDd0KG4s''@;'; put 'put ''ZSl7aWYoMSZuJiYoSigwLCJkaXYiLDM1KSgxLCJkaXYiLDMzKSxTZSgyKSx0ZSgpLEl0KDMsImRpdiIsMjkpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgpO2llKDIpLHByKHQuY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsKX19ZnVuY3Rpb24geDd0KG4sZSl7aWYoMSZuJiYoSigwLCJk''@;'; put 'put ''aXYiLDM2KSgxLCJkaXYiLDMzKSxTZSgyKSx0ZSgpLEl0KDMsImRpdiIsMjkpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgpO2llKDIpLHByKHQuY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbCl9fWZ1bmN0aW9uIEE3dChuLGUpe2lmKDEmbiYmKEooMCwiY2xyLWRnLXJvdyIsMzcpKDEsImNs''@;'; put 'put ''ci1kZy1jZWxsIiksSXQoMiwiY2xyLXNwaW5uZXIiLDM4KSxKKDMsInNwYW4iKSxTZSg0KSx0ZSgpKCkoKSksMiZuKXtjb25zdCB0PVRlKCk7aWUoNCkscHIodC5jb21tb25TdHJpbmdzLmtleXMubG9hZGluZyl9fWZ1bmN0aW9uIGs3dChuLGUpe2lmKDEmbiYmKEooMCwiY2xyLWRnLXJvdyIs''@;'; put 'put ''MzcpKDEsImNsci1kZy1jZWxsIiksSXQoMiwiY2xyLXNwaW5uZXIiLDM4KSxKKDMsInNwYW4iKSxTZSg0KSx0ZSgpKCkoKSksMiZuKXtjb25zdCB0PVRlKCk7aWUoNCkscHIodC5jb21tb25TdHJpbmdzLmtleXMubG9hZGluZyl9fWZ1bmN0aW9uIFI3dChuLGUpezEmbiYmSXQoMCwiY2xyLWRn''@;'; put 'put ''LXBsYWNlaG9sZGVyIil9ZnVuY3Rpb24gSTd0KG4sZSl7MSZuJiYoSigwLCJkaXYiLDM5KSgxLCJjbHItc3Bpbm5lciIsMzgpLFNlKDIsIkxvYWRpbmciKSx0ZSgpKCkpfWNvbnN0IEw3dD1bImFsbFNlbGVjdGVkIl07ZnVuY3Rpb24gTzd0KG4sZSl7fWZ1bmN0aW9uIE43dChuLGUpe2lmKDEm''@;'; put 'put ''bil7Y29uc3QgdD13bigpO0ooMCwibGkiKSgxLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDIsImlucHV0IiwxMyksd3QoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe2NvbnN0IG89WWUodCkuJGltcGxpY2l0O3JldHVybiBYZShUZSgyKS50b2dnbGVDb2x1bW5TdGF0ZShvLCFpKSl9KSx0''@;'; put 'put ''ZSgpLEooMywibGFiZWwiKSxZbig0LE83dCwwLDAsIm5nLXRlbXBsYXRlIiwxNCksdGUoKSgpKCl9aWYoMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0LHI9VGUoMik7aWUoMikscnQoImRpc2FibGVkIixyLmhhc09ubHlPbmVWaXNpYmxlQ29sdW1uJiYhdC5oaWRkZW4pKCJuZ01vZGVsIiwhdC5o''@;'; put 'put ''aWRkZW4pLGllKDIpLHJ0KCJuZ1RlbXBsYXRlT3V0bGV0Iix0LnRpdGxlVGVtcGxhdGVSZWYpfX1mdW5jdGlvbiBGN3QobixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRpdiIsMykoMSwiZGl2Iiw0KSgyLCJkaXYiLDUsMCksU2UoNCksdGUoKSxKKDUsImgyIiksU2UoNiksdGUoKSxK''@;'; put 'put ''KDcsImJ1dHRvbiIsNiksSXQoOCwiY2RzLWljb24iLDcpLEooOSwic3BhbiIsOCksU2UoMTApLHRlKCkoKSgpLEooMTEsInVsIiw5KSxZbigxMixON3QsNSwzLCJsaSIsMTApLHRlKCksSigxMywiZGl2IiwxMSkoMTQsImNsci1kZy1jb2x1bW4tdG9nZ2xlLWJ1dHRvbiIsMTIpLHd0KCJjbHJB''@;'; put 'put ''bGxTZWxlY3RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoKS5hbGxDb2x1bW5zU2VsZWN0ZWQoKSl9KSx0ZSgpKCkoKX1pZigyJm4pe2NvbnN0IHQ9VGUoKTtydCgiaWQiLHQucG9wb3ZlcklkKSxScigiYXJpYS1sYWJlbCIsdC5jb21tb25TdHJpbmdzLmtleXMuc2hvd0NvbHVt''@;'; put 'put ''bnNNZW51RGVzY3JpcHRpb24pLGllKDQpLHByKHQuY29tbW9uU3RyaW5ncy5rZXlzLmFsbENvbHVtbnNTZWxlY3RlZCksaWUoMikscHIodC5jb21tb25TdHJpbmdzLmtleXMuc2hvd0NvbHVtbnMpLGllKCksUnIoImFyaWEtbGFiZWwiLHQuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKSxpZSgp''@;'; put 'put ''LFJyKCJ0aXRsZSIsdC5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLGllKDIpLHByKHQuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKSxpZSgyKSxydCgibmdGb3JPZiIsdC5oaWRlYWJsZUNvbHVtblN0YXRlcykoIm5nRm9yVHJhY2tCeSIsdC50cmFja0J5Rm4pfX1jb25zdCBNRWU9WyJ0aXRs''@;'; put 'put ''ZSJdLEg3dD1bW1siY2xyLWRnLXBhZ2luYXRpb24iXV0sIioiXSxWN3Q9WyJjbHItZGctcGFnaW5hdGlvbiIsIioiXTtmdW5jdGlvbiBCN3QobixlKXtpZigxJm4mJihtbCgwKSxKKDEsImRpdiIsMSkoMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDIpLEl0KDMsImlucHV0IiwzKSxKKDQsImxh''@;'; put 'put ''YmVsIiksU2UoNSksdGUoKSxKKDYsInNwYW4iLDQpLFNlKDcpLHRlKCkoKSgpLHJsKCkpLDImbil7Y29uc3QgdD1UZSgpO2llKDUpLHByKHQuc2VsZWN0aW9uLmN1cnJlbnQubGVuZ3RoKSxpZSgyKSxwcih0LmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RlZFJvd3MpfX1mdW5jdGlvbiBqN3Qo''@;'; put 'put ''bixlKXsxJm4mJkl0KDAsImNsci1kZy1jb2x1bW4tdG9nZ2xlIil9ZnVuY3Rpb24gVTd0KG4sZSl7aWYoMSZuJiYobWwoMCksWW4oMSxqN3QsMSwwLCJjbHItZGctY29sdW1uLXRvZ2dsZSIsMCksSigyLCJkaXYiLDUpLFdyKDMsMSksdGUoKSxybCgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSgp''@;'; put 'put ''LHJ0KCJuZ0lmIix0Lmhhc0hpZGVhYmxlQ29sdW1ucyl9fWZ1bmN0aW9uIHo3dChuLGUpe2lmKDEmbiYmKEooMCwib3B0aW9uIiw0KSxTZSgxKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7cnQoIm5nVmFsdWUiLHQpLGllKCkscHIodCl9fWNvbnN0IFc3dD1bImN1cnJlbnRQYWdl''@;'; put 'put ''SW5wdXQiXSxZN3Q9WyIqIixbWyJjbHItZGctcGFnZS1zaXplIl1dXSxaN3Q9WyIqIiwiY2xyLWRnLXBhZ2Utc2l6ZSJdO2Z1bmN0aW9uIEc3dChuLGUpezEmbiYmKEooMCwiZGl2Iiw2KSxXcigxLDEpLHRlKCkpfWZ1bmN0aW9uICQ3dChuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwi''@;'; put 'put ''aW5wdXQiLDE4LDEpLHd0KCJrZXlkb3duLmVudGVyIixmdW5jdGlvbihpKXtyZXR1cm4gWWUodCksWGUoVGUoMykudXBkYXRlQ3VycmVudFBhZ2UoaSkpfSkoImJsdXIiLGZ1bmN0aW9uKGkpe3JldHVybiBZZSh0KSxYZShUZSgzKS52ZXJpZnlDdXJyZW50UGFnZShpKSl9KSx0ZSgpfWlmKDIm''@;'; put 'put ''bil7Y29uc3QgdD1UZSgzKTtydCgic2l6ZSIsdC5wYWdlLmxhc3QudG9TdHJpbmcoKS5sZW5ndGgpKCJ2YWx1ZSIsdC5wYWdlLmN1cnJlbnQpLFJyKCJhcmlhLWxhYmVsIix0LmNvbW1vblN0cmluZ3Mua2V5cy5jdXJyZW50UGFnZSl9fWZ1bmN0aW9uIHE3dChuLGUpe2lmKDEmbiYmKEooMCwi''@;'; put 'put ''c3BhbiIpLFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgzKTtpZSgpLHByKHQucGFnZS5jdXJyZW50KX19ZnVuY3Rpb24gSzd0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJkaXYiLDcpKDEsImJ1dHRvbiIsOCksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxY''@;'; put 'put ''ZShUZSgyKS5wYWdlLmN1cnJlbnQ9MSl9KSxKKDIsInNwYW4iLDkpLFNlKDMpLHRlKCksSXQoNCwiY2RzLWljb24iLDEwKSx0ZSgpLEooNSwiYnV0dG9uIiwxMSksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoMik7cmV0dXJuIFhlKGkucGFnZS5jdXJyZW50PWkucGFn''@;'; put 'put ''ZS5jdXJyZW50LTEpfSksSig2LCJzcGFuIiw5KSxTZSg3KSx0ZSgpLEl0KDgsImNkcy1pY29uIiwxMiksdGUoKSxZbig5LCQ3dCwyLDMsImlucHV0IiwxMykoMTAscTd0LDIsMSwibmctdGVtcGxhdGUiLG51bGwsMCxjZCksU2UoMTIsIiBceGEwL1x4YTAiKSxKKDEzLCJzcGFuIiksU2UoMTQp''@;'; put 'put ''LHRlKCksSigxNSwiYnV0dG9uIiwxNCksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoMik7cmV0dXJuIFhlKGkucGFnZS5jdXJyZW50PWkucGFnZS5jdXJyZW50KzEpfSksSigxNiwic3BhbiIsOSksU2UoMTcpLHRlKCksSXQoMTgsImNkcy1pY29uIiwxNSksdGUoKSxK''@;'; put 'put ''KDE5LCJidXR0b24iLDE2KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3QgaT1UZSgyKTtyZXR1cm4gWGUoaS5wYWdlLmN1cnJlbnQ9aS5wYWdlLmxhc3QpfSksSigyMCwic3BhbiIsOSksU2UoMjEpLHRlKCksSXQoMjIsImNkcy1pY29uIiwxNyksdGUoKSgpfWlmKDImbil7Y29u''@;'; put 'put ''c3QgdD1vbygxMSkscj1UZSgyKTtpZSgpLHJ0KCJkaXNhYmxlZCIsci5wYWdlLmN1cnJlbnQ8PTEpLFJyKCJhcmlhLWxhYmVsIixyLmNvbW1vblN0cmluZ3Mua2V5cy5maXJzdFBhZ2UpLGllKDIpLHByKHIuY29tbW9uU3RyaW5ncy5rZXlzLmZpcnN0UGFnZSksaWUoMikscnQoImRpc2FibGVk''@;'; put 'put ''IixyLnBhZ2UuY3VycmVudDw9MSksUnIoImFyaWEtbGFiZWwiLHIuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksaWUoMikscHIoci5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxpZSgyKSxydCgibmdJZiIsIXIuZGlzYWJsZUN1cnJlbnRQYWdlSW5wdXQpKCJuZ0lm''@;'; put 'put ''RWxzZSIsdCksaWUoNCksUnIoImFyaWEtbGFiZWwiLHIuY29tbW9uU3RyaW5ncy5rZXlzLnRvdGFsUGFnZXMpLGllKCkscHIoci5wYWdlLmxhc3QpLGllKCkscnQoImRpc2FibGVkIixyLnBhZ2UuY3VycmVudD49ci5wYWdlLmxhc3QpLFJyKCJhcmlhLWxhYmVsIixyLmNvbW1vblN0cmluZ3Mu''@;'; put 'put ''a2V5cy5uZXh0UGFnZSksaWUoMikscHIoci5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpLGllKDIpLHJ0KCJkaXNhYmxlZCIsci5wYWdlLmN1cnJlbnQ+PXIucGFnZS5sYXN0KSxScigiYXJpYS1sYWJlbCIsci5jb21tb25TdHJpbmdzLmtleXMubGFzdFBhZ2UpLGllKDIpLHByKHIuY29t''@;'; put 'put ''bW9uU3RyaW5ncy5rZXlzLmxhc3RQYWdlKX19ZnVuY3Rpb24gWDd0KG4sZSl7aWYoMSZuJiYobWwoMCksWW4oMSxHN3QsMiwwLCJkaXYiLDMpLEooMiwiZGl2Iiw0KSxXcigzKSx0ZSgpLFluKDQsSzd0LDIzLDE2LCJkaXYiLDUpLHJsKCkpLDImbil7Y29uc3QgdD1UZSgpO2llKCkscnQoIm5n''@;'; put 'put ''SWYiLHQuX3BhZ2VTaXplQ29tcG9uZW50KSxpZSgzKSxydCgibmdJZiIsdC5wYWdlLmxhc3Q+MSl9fWZ1bmN0aW9uIFE3dChuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO21sKDApLEooMSwiZGl2IiwxOSksU2UoMiksdGUoKSxKKDMsImRpdiIsNykoNCwiYnV0dG9uIiwxMSksd3QoImNsaWNr''@;'; put 'put ''IixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoKTtyZXR1cm4gWGUoaS5wYWdlLmN1cnJlbnQ9aS5wYWdlLmN1cnJlbnQtMSl9KSxKKDUsInNwYW4iLDkpLFNlKDYpLHRlKCksSXQoNywiY2RzLWljb24iLDEyKSx0ZSgpLEooOCwic3BhbiIpLFNlKDkpLHRlKCksSigxMCwiYnV0dG9uIiwx''@;'; put 'put ''NCksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoKTtyZXR1cm4gWGUoaS5wYWdlLmN1cnJlbnQ9aS5wYWdlLmN1cnJlbnQrMSl9KSxKKDExLCJzcGFuIiw5KSxTZSgxMiksdGUoKSxJdCgxMywiY2RzLWljb24iLDE1KSx0ZSgpKCkscmwoKX1pZigyJm4pe2NvbnN0IHQ9''@;'; put 'put ''VGUoKTtpZSgyKSxlNCgiICIsdC5wYWdlLmZpcnN0SXRlbSsxLCItIix0LnBhZ2UubGFzdEl0ZW0rMSwiIC8gIix0LnBhZ2UudG90YWxJdGVtcywiICIpLGllKDIpLHJ0KCJkaXNhYmxlZCIsdC5wYWdlLmN1cnJlbnQ8PTEpLFJyKCJhcmlhLWxhYmVsIix0LmNvbW1vblN0cmluZ3Mua2V5cy5w''@;'; put 'put ''cmV2aW91c1BhZ2UpLGllKDIpLHByKHQuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksaWUoMykscHIodC5wYWdlLmN1cnJlbnQpLGllKCkscnQoImRpc2FibGVkIix0LnBhZ2UuY3VycmVudD49dC5wYWdlLmxhc3QpLFJyKCJhcmlhLWxhYmVsIix0LmNvbW1vblN0cmluZ3Mua2V5''@;'; put 'put ''cy5uZXh0UGFnZSksaWUoMikscHIodC5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpfX1jb25zdCBuOXQ9W1tbImNsci1zdGFjay1sYWJlbCJdXSwiKiIsW1siY2xyLXN0YWNrLWJsb2NrIl1dXSxyOXQ9WyJjbHItc3RhY2stbGFiZWwiLCIqIiwiY2xyLXN0YWNrLWJsb2NrIl07ZnVuY3Rp''@;'; put 'put ''b24gaTl0KG4sZSl7MSZuJiZJdCgwLCJjZHMtaWNvbiIsNyksMiZuJiZScigiZGlyZWN0aW9uIixUZSgpLmNhcmV0RGlyZWN0aW9uKX1mdW5jdGlvbiBvOXQobixlKXtpZigxJm4mJihKKDAsInNwYW4iLDgpLFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgpO2llKCkscHIodC5jb21tb25T''@;'; put 'put ''dHJpbmdzLmtleXMuc3RhY2tWaWV3Q2hhbmdlZCl9fWZ1bmN0aW9uIGE5dChuLGUpe2lmKDEmbiYmKEooMCwiZGl2Iiw5KSxXcigxLDIpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgpO08yKCJoZWlnaHQiLHQuZXhwYW5kZWQ/ImF1dG8iOjApLFJyKCJpZCIsdC5nZXRTdGFja0NoaWxkcmVuSWQo''@;'; put 'put ''KSkoImFyaWEtbGFiZWxsZWRieSIsdC5sYWJlbGxlZEJ5SWQpfX1jb25zdCBzOXQ9W1tbImNsci1zdGFjay1oZWFkZXIiXV0sIioiXSxsOXQ9WyJjbHItc3RhY2staGVhZGVyIiwiKiJdO2Z1bmN0aW9uIGQ5dChuLGUpezEmbiYmYXUoMCl9ZnVuY3Rpb24gaDl0KG4sZSl7aWYoMSZuJiYobWwo''@;'; put 'put ''MCksWW4oMSxkOXQsMSwwLCJuZy1jb250YWluZXIiLDIpLHJsKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdCxyPVRlKDIpO2llKCkscnQoIm5nVGVtcGxhdGVPdXRsZXQiLHIuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbi50ZW1wbGF0ZSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Iixy''@;'; put 'put ''LmdldENvbnRleHQodCkpfX1mdW5jdGlvbiBmOXQobixlKXtpZigxJm4mJihtbCgwKSxZbigxLGg5dCwyLDIsIm5nLWNvbnRhaW5lciIsMSkscmwoKSksMiZuKXtjb25zdCB0PVRlKCk7aWUoKSxydCgibmdGb3JPZiIsKG51bGw9PXQucGFyZW50P251bGw6dC5wYXJlbnQuY2hpbGRyZW4pfHx0''@;'; put 'put ''LmNoaWxkcmVuKX19Y29uc3QgcDl0PVsiY29udGVudENvbnRhaW5lciJdLGc5dD1bW1siY2xyLXRyZWUtbm9kZSJdXSxbWyIiLCJjbHJJZkV4cGFuZGVkIiwiIl1dLCIqIl0sbTl0PVsiY2xyLXRyZWUtbm9kZSIsIltjbHJJZkV4cGFuZGVkXSIsIioiXTtmdW5jdGlvbiB2OXQobixlKXtpZigx''@;'; put 'put ''Jm4pe2NvbnN0IHQ9d24oKTtKKDAsImJ1dHRvbiIsOSksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLmV4cGFuZFNlcnZpY2UudG9nZ2xlKCkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSxJdCgx''@;'; put 'put ''LCJjZHMtaWNvbiIsMTApLHRlKCl9aWYoMiZuKXtjb25zdCB0PVRlKCk7cnQoImRpc2FibGVkIix0LmRpc2FibGVkKSxpZSgpLFJyKCJkaXJlY3Rpb24iLHQuZXhwYW5kU2VydmljZS5leHBhbmRlZD8iZG93biI6InJpZ2h0Iil9fWZ1bmN0aW9uIF85dChuLGUpezEmbiYmKEooMCwiZGl2Iiwx''@;'; put 'put ''MSksSXQoMSwic3BhbiIsMTIpLHRlKCkpfWZ1bmN0aW9uIHk5dChuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiZGl2IiwxMykoMSwiaW5wdXQiLDE0KSx3dCgiY2hhbmdlIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoKTtyZXR1cm4gWGUoaS5fbW9kZWwudG9nZ2xlU2VsZWN0''@;'; put 'put ''aW9uKGkuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCkuZm9jdXNUcmVlTm9kZSgpKX0pLHRlKCksSigyLCJsYWJlbCIsMTUpLGF1KDMsMTYpLHRlKCkoKX1pZigyJm4pe2NvbnN0IHQ9VGUoKSxyPW9vKDcpO2llKCkscnQo''@;'; put 'put ''ImlkIix0Lm5vZGVJZCsiLWNoZWNrIikoImRpc2FibGVkIix0LmRpc2FibGVkKSgiY2hlY2tlZCIsdC5fbW9kZWwuc2VsZWN0ZWQudmFsdWU9PT10LlNUQVRFUy5TRUxFQ1RFRCkoImluZGV0ZXJtaW5hdGUiLHQuX21vZGVsLnNlbGVjdGVkLnZhbHVlPT09dC5TVEFURVMuSU5ERVRFUk1JTkFU''@;'; put 'put ''RSksaWUoKSxydCgiZm9yIix0Lm5vZGVJZCsiLWNoZWNrIiksaWUoKSxydCgibmdUZW1wbGF0ZU91dGxldCIscil9fWZ1bmN0aW9uIGI5dChuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiZGl2IiwxNyksd3QoIm1vdXNldXAiLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCku''@;'; put 'put ''Zm9jdXNUcmVlTm9kZSgpKX0pLGF1KDEsMTYpLHRlKCl9aWYoMiZuKXtUZSgpO2NvbnN0IHQ9b28oNyk7aWUoKSxydCgibmdUZW1wbGF0ZU91dGxldCIsdCl9fWZ1bmN0aW9uIHc5dChuLGUpe2lmKDEmbiYmKEooMCwiZGl2IiwxOSkoMSwic3BhbiIpLFNlKDIpLHRlKCkoKSksMiZuKXtjb25z''@;'; put 'put ''dCB0PVRlKDIpO2llKDIpLFNyKCIgIix0LmFyaWFTZWxlY3RlZD90LmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RlZFRyZWVOb2RlOnQuY29tbW9uU3RyaW5ncy5rZXlzLnVuc2VsZWN0ZWRUcmVlTm9kZSl9fWZ1bmN0aW9uIEM5dChuLGUpe2lmKDEmbiYmKFdyKDAsMiksWW4oMSx3OXQsMywx''@;'; put 'put ''LCJkaXYiLDE4KSksMiZuKXtjb25zdCB0PVRlKCk7aWUoKSxydCgibmdJZiIsdC5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZXx8dC5hcmlhU2VsZWN0ZWQpfX1mdW5jdGlvbiBTOXQobixlKXsxJm4mJkl0KDAsImNsci1yZWN1cnNpdmUtY2hpbGRyZW4iLDEpLDImbiYmcnQoImNoaWxkcmVu''@;'; put 'put ''IixUZSgpLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24ucm9vdCl9ZnVuY3Rpb24gRTl0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJidXR0b24iLDQpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoMikuY2xvc2UoKSl9KSxJdCgxLCJjZHMtaWNvbiIs''@;'; put 'put ''NSksdGUoKX0yJm4mJlJyKCJhcmlhLWxhYmVsIixUZSgyKS5jbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbCl9ZnVuY3Rpb24gTTl0KG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiLDEpKDEsImRpdiIsMiksV3IoMiksdGUoKSxZbigzLEU5dCwyLDEsImJ1dHRvbiIsMyksdGUoKSksMiZuKXtjb25zdCB0''@;'; put 'put ''PVRlKCk7d3IoImFsZXJ0LXNtIix0LmlzU21hbGwpKCJhbGVydC1saWdodHdlaWdodCIsdC5pc0xpZ2h0d2VpZ2h0KSgiYWxlcnQtYXBwLWxldmVsIix0LmlzQXBwTGV2ZWwpLHJ0KCJuZ0NsYXNzIix0LmFsZXJ0Q2xhc3MpLGllKDMpLHJ0KCJuZ0lmIix0LmNsb3NhYmxlKX19ZnVuY3Rpb24g''@;'; put 'put ''VDl0KG4sZSl7MSZuJiZJdCgwLCJjbHItc3Bpbm5lciIsMyl9ZnVuY3Rpb24geDl0KG4sZSl7aWYoMSZuJiZJdCgwLCJjZHMtaWNvbiIsNCksMiZuKXtjb25zdCB0PVRlKCk7UnIoInNoYXBlIix0Lmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlKSgiYXJpYS1sYWJlbCIsdC5pY29uU2Vydmlj''@;'; put 'put ''ZS5hbGVydEljb25UaXRsZSl9fWNvbnN0IEE5dD1bW1siY2xyLWFsZXJ0Il1dXSxrOXQ9WyJjbHItYWxlcnQiXTtmdW5jdGlvbiBSOXQobixlKXsxJm4mJkl0KDAsImNsci1hbGVydHMtcGFnZXIiLDIpLDImbiYmcnQoImNsckN1cnJlbnRBbGVydEluZGV4IixUZSgpLmN1cnJlbnRBbGVydElu''@;'; put 'put ''ZGV4KX1jb25zdCBJOXQ9WyJjbHJJbnRlcm5hbE1vZGFsQ29udGVudFRlbXBsYXRlIl0sVEVlPVsiYm9keSJdLEQ5dD1bW1siIiw4LCJsZWFkaW5nLWJ1dHRvbiJdXSxbWyIiLDgsIm1vZGFsLXRpdGxlIl1dLFtbIiIsOCwibW9kYWwtYm9keSJdXSxbWyIiLDgsIm1vZGFsLWZvb3RlciJdXV0s''@;'; put 'put ''TDl0PVsiLmxlYWRpbmctYnV0dG9uIiwiLm1vZGFsLXRpdGxlIiwiLm1vZGFsLWJvZHkiLCIubW9kYWwtZm9vdGVyIl07ZnVuY3Rpb24gTzl0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJidXR0b24iLDE0KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRl''@;'; put 'put ''KDMpLmNsb3NlKCkpfSksSXQoMSwiY2RzLWljb24iLDE1KSx0ZSgpfWlmKDImbil7Y29uc3QgdD1UZSgzKTtScigiYXJpYS1sYWJlbCIsdC5jbG9zZUJ1dHRvbkFyaWFMYWJlbHx8dC5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpfX1mdW5jdGlvbiBOOXQobixlKXtpZigxJm4mJihKKDAsImRp''@;'; put 'put ''diIsOCkoMSwiZGl2Iiw5KSgyLCJkaXYiLDEwKSxXcigzKSxKKDQsImRpdiIsMTEsMCksV3IoNiwxKSx0ZSgpLFluKDcsTzl0LDIsMSwiYnV0dG9uIiwxMiksdGUoKSxKKDgsImRpdiIsMTMsMSksV3IoMTAsMiksdGUoKSxXcigxMSwzKSx0ZSgpKCkpLDImbil7Y29uc3QgdD1UZSgyKTtpZSg0''@;'; put 'put ''KSxydCgiaWQiLHQubW9kYWxJZCksaWUoMykscnQoIm5nSWYiLHQuY2xvc2FibGUpfX1mdW5jdGlvbiBGOXQobixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRpdiIsNCkoMSwiZGl2Iiw1KSx3dCgiQGZhZGVNb3ZlLmRvbmUiLGZ1bmN0aW9uKGkpe3JldHVybiBZZSh0KSxYZShUZSgp''@;'; put 'put ''LmZhZGVEb25lKGkpKX0pLEooMiwiZGl2Iiw2KSxTZSgzKSx0ZSgpLFluKDQsTjl0LDEyLDIsImRpdiIsNyksSig1LCJkaXYiLDYpLFNlKDYpLHRlKCkoKSgpfWlmKDImbil7Y29uc3QgdD1UZSgpO3dyKCJtb2RhbC1mdWxsLXNjcmVlbiIsImZ1bGwtc2NyZWVuIj09dC5zaXplKSxpZSgpLHdy''@;'; put 'put ''KCJtb2RhbC1zbSIsInNtIj09dC5zaXplKSgibW9kYWwtbGciLCJsZyI9PXQuc2l6ZSkoIm1vZGFsLXhsIiwieGwiPT10LnNpemUpLHJ0KCJjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZSIsITApKCJAZmFkZU1vdmUiLHQuZmFkZU1vdmUpLFJyKCJhcmlhLWhpZGRlbiIsIXQuX29wZW4pKCJhcmlh''@;'; put 'put ''LWxhYmVsbGVkYnkiLHQubGFiZWxsZWRCeXx8dC5tb2RhbElkKSxpZSgyKSxwcih0LmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRTdGFydCksaWUoKSxydCgibmdJZiIsIXQubW9kYWxDb250ZW50VGVtcGxhdGUpKCJuZ0lmRWxzZSIsdC5tb2RhbENvbnRlbnRUZW1wbGF0ZSksaWUo''@;'; put 'put ''MikscHIodC5jb21tb25TdHJpbmdzLmtleXMubW9kYWxDb250ZW50RW5kKX19ZnVuY3Rpb24gUDl0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJkaXYiLDE2KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCkuYmFja2Ryb3BDbGljaygpKX0pLHRlKCl9''@;'; put 'put ''MiZuJiZydCgiQGZhZGUiLHZvaWQgMCl9ZnVuY3Rpb24gajl0KG4sZSl7aWYoMSZuJiYoSigwLCJzcGFuIiksU2UoMSksdGUoKSksMiZuKXtjb25zdCB0PVRlKCk7aWUoKSxwcih0LmRpc3BsYXlWYWx1ZSl9fWxldCBjdT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWljb24iXV0sc3RhbmRhbG9uZTohMX0pLG59KSgpLEpzPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1''@;'; put 'put ''MDI3NWRpcj0kcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjZHMtaWNvbiJdXSxzdGFuZGFsb25lOiExfSksbn0pKCksV2w9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3''@;'; put 'put ''NWluaj1taSh7aW1wb3J0czpbcW9dfSksbn0pKCk7Y2xhc3MgRUR7fXZhciBPZj1mdW5jdGlvbihuKXtyZXR1cm4gbltuLkRFRkFVTFQ9MF09IkRFRkFVTFQiLG5bbi5MT0FESU5HPTFdPSJMT0FESU5HIixuW24uU1VDQ0VTUz0yXT0iU1VDQ0VTUyIsbltuLkVSUk9SPTNdPSJFUlJPUiIsbn0o''@;'; put 'put ''T2Z8fHt9KTtsZXQgJDA9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0KXt0aGlzLmxpc3RlbmVyPXQsdGhpcy5fbG9hZGluZ1N0YXRlPU9mLkRFRkFVTFR9Z2V0IGxvYWRpbmdTdGF0ZSgpe3JldHVybiB0aGlzLl9sb2FkaW5nU3RhdGV9c2V0IGxvYWRpbmdTdGF0ZSh0KXshMD09PXQ/dD1P''@;'; put 'put ''Zi5MT0FESU5HOnR8fCh0PU9mLkRFRkFVTFQpLHQhPT10aGlzLl9sb2FkaW5nU3RhdGUmJih0aGlzLl9sb2FkaW5nU3RhdGU9dCx0aGlzLmxpc3RlbmVyJiZ0aGlzLmxpc3RlbmVyLmxvYWRpbmdTdGF0ZUNoYW5nZSh0KSl9bmdPbkRlc3Ryb3koKXt0aGlzLmxvYWRpbmdTdGF0ZT1PZi5ERUZB''@;'; put 'put ''VUxUfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShFRCw4KSl9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNsckxvYWRpbmciLCIiXV0saW5wdXRzOntsb2FkaW5nU3RhdGU6WzAsImNsckxvYWRpbmciLCJsb2FkaW5n''@;'; put 'put ''U3RhdGUiXX0sc3RhbmRhbG9uZTohMX0pLG59KSgpLE5mPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmV4cGFuZGFibGU9MCx0aGlzLmhhc0V4cGFuZFRlbXBsYXRlPSExLHRoaXMuX2xvYWRpbmc9ITEsdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fZXhwYW5kQ2hhbmdlPW5ldyBN''@;'; put 'put ''cn1nZXQgbG9hZGluZygpe3JldHVybiB0aGlzLl9sb2FkaW5nfXNldCBsb2FkaW5nKHQpeyh0PSEhdCkhPT10aGlzLl9sb2FkaW5nJiYodGhpcy5fbG9hZGluZz10KX1nZXQgZXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5fZXhwYW5kZWR9c2V0IGV4cGFuZGVkKHQpeyh0PSEhdCkhPT10aGlzLl9l''@;'; put 'put ''eHBhbmRlZCYmKHRoaXMuX2V4cGFuZGVkPXQsdGhpcy5fZXhwYW5kQ2hhbmdlLm5leHQodCkpfWdldCBleHBhbmRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZXhwYW5kQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfXRvZ2dsZSgpe3RoaXMuZXhwYW5kZWQ9IXRoaXMuX2V4cGFuZGVkfWxvYWRpbmdTdGF0''@;'; put 'put ''ZUNoYW5nZSh0KXt0aGlzLmxvYWRpbmc9dD09PU9mLkxPQURJTkd9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGZ2dD0wO2Z1bmN0aW9uIFBoKCl7cmV0''@;'; put 'put ''dXJuImNsci1pZC0iK2Z2dCsrfWxldCB4RWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1Y21wPVByKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24iXSxbImNsci1zdGVw''@;'; put 'put ''LWRlc2NyaXB0aW9uIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHQscil7MiZ0JiZ3cigiY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiIsITApfSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9yczplcyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbih0''@;'; put 'put ''LHIpezEmdCYmKGZvKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtjb25zdCBoND0iMC4ycyBlYXNlLWluLW91dCIscHZ0PVtScCgic2tpcEluaXRpYWxSZW5kZXIiLFtwaCgiOmVudGVyIixbXSldKSxScCgidG9nZ2xlIixbcGgoInZvaWQgPT4g''@;'; put 'put ''KiIsW3ZsKHtkaXNwbGF5OiJibG9jayIsaGVpZ2h0OjB9KSx5MChoNCx2bCh7aGVpZ2h0OiIqIn0pKV0pXSldLEhvZT0oUnAoInNraXBJbml0aWFsUmVuZGVyIixbcGgoIjplbnRlciIsW10pXSksUnAoInRvZ2dsZSIsW3BoKCJ2b2lkID0+ICoiLFt2bCh7ZGlzcGxheToiYmxvY2siLGhlaWdo''@;'; put 'put ''dDowfSkseTAoaDQsdmwoe2hlaWdodDoiKiJ9KSldKSxwaCgiKiA9PiB2b2lkIixbdmwoe2Rpc3BsYXk6ImJsb2NrIn0pLHkwKGg0LHZsKHtoZWlnaHQ6MCxkaXNwbGF5OiJub25lIn0pKV0pXSkse29wZW46Ik9wZW4iLGNsb3NlOiJDbG9zZSIsc2hvdzoiU2hvdyIsaGlkZToiSGlkZSIsYXBw''@;'; put 'put ''bHk6IkFwcGx5IixjYW5jZWw6IkNhbmNlbCIsZXhwYW5kOiJFeHBhbmQiLGNvbGxhcHNlOiJDb2xsYXBzZSIsbW9yZToiTW9yZSIsc2VsZWN0OiJTZWxlY3QiLHNlbGVjdEFsbDoiU2VsZWN0IEFsbCIscHJldmlvdXM6IlByZXZpb3VzIixuZXh0OiJOZXh0IixjdXJyZW50OiJKdW1wIHRvIGN1''@;'; put 'put ''cnJlbnQiLGluZm86IkluZm8iLHN1Y2Nlc3M6IlN1Y2Nlc3MiLHdhcm5pbmc6Ildhcm5pbmciLGRhbmdlcjoiRXJyb3IiLG5ldXRyYWw6Ik5ldXRyYWwiLHVua25vd246IlVua25vd24iLHJvd0FjdGlvbnM6IkF2YWlsYWJsZSBhY3Rpb25zIixwaWNrQ29sdW1uczoiTWFuYWdlIENvbHVtbnMi''@;'; put 'put ''LHNob3dDb2x1bW5zOiJTaG93IENvbHVtbnMiLHNvcnRDb2x1bW46IlNvcnQgQ29sdW1uIixmaXJzdFBhZ2U6IkZpcnN0IFBhZ2UiLGxhc3RQYWdlOiJMYXN0IFBhZ2UiLG5leHRQYWdlOiJOZXh0IFBhZ2UiLHByZXZpb3VzUGFnZToiUHJldmlvdXMgUGFnZSIsY3VycmVudFBhZ2U6IkN1cnJl''@;'; put 'put ''bnQgUGFnZSIsdG90YWxQYWdlczoiVG90YWwgUGFnZXMiLGZpbHRlckl0ZW1zOiJGaWx0ZXIgaXRlbXMiLG1pblZhbHVlOiJNaW4gdmFsdWUiLG1heFZhbHVlOiJNYXggdmFsdWUiLG1vZGFsQ29udGVudFN0YXJ0OiJCZWdpbm5pbmcgb2YgTW9kYWwgQ29udGVudCIsbW9kYWxDb250ZW50RW5k''@;'; put 'put ''OiJFbmQgb2YgTW9kYWwgQ29udGVudCIsc2lkZVBhbmVsUGluOiJQaW4gU2lkZSBQYW5lbCIsc2hvd0NvbHVtbnNNZW51RGVzY3JpcHRpb246IlNob3cgb3IgaGlkZSBjb2x1bW5zIG1lbnUiLGFsbENvbHVtbnNTZWxlY3RlZDoiQWxsIGNvbHVtbnMgc2VsZWN0ZWQiLHNpZ25wb3N0VG9nZ2xl''@;'; put 'put ''OiJTaWducG9zdCBUb2dnbGUiLHNpZ25wb3N0Q2xvc2U6IkNsb3NlIixsb2FkaW5nOiJMb2FkaW5nIixkZXRhaWxQYW5lU3RhcnQ6IlN0YXJ0IG9mIHJvdyBkZXRhaWxzIixkZXRhaWxQYW5lRW5kOiJFbmQgb2Ygcm93IGRldGFpbHMiLHNpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbDoiU2luZ2xl''@;'; put 'put ''IHNlbGVjdGlvbiBoZWFkZXIiLHNpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWw6IlNpbmdsZSBhY3Rpb25hYmxlIGhlYWRlciIsZGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbDoiVG9nZ2xlIG1vcmUgcm93IGNvbnRlbnQiLGRhdGFncmlkRmlsdGVyQXJpYUxhYmVsOiJ7Q09MVU1OfSBmaWx0ZXIi''@;'; put 'put ''LGRhdGFncmlkRmlsdGVyTGFiZWw6IntDT0xVTU59IGZpbHRlciIsZGF0YWdyaWRGaWx0ZXJEaWFsb2dBcmlhTGFiZWw6IkZpbHRlciBkaWFsb2ciLGNvbHVtblNlcGFyYXRvckFyaWFMYWJlbDoiQ29sdW1uIHJlc2l6ZSBoYW5kbGUiLGNvbHVtblNlcGFyYXRvckRlc2NyaXB0aW9uOiJVc2Ug''@;'; put 'put ''bGVmdCBvciByaWdodCBrZXkgdG8gcmVzaXplIHRoZSBjb2x1bW4iLGZyb21MYWJlbDoiRnJvbSIsdG9MYWJlbDoiVG8iLGFsZXJ0Q2xvc2VCdXR0b25BcmlhTGFiZWw6IkNsb3NlIGFsZXJ0IixhbGVydE5leHRBbGVydEFyaWFMYWJlbDoiTmV4dCBhbGVydCBtZXNzYWdlLCB7Q1VSUkVOVH0g''@;'; put 'put ''b2Yge0NPVU5UfSIsYWxlcnRQcmV2aW91c0FsZXJ0QXJpYUxhYmVsOiJQcmV2aW91cyBhbGVydCBtZXNzYWdlLCB7Q1VSUkVOVH0gb2Yge0NPVU5UfSIsZGF0ZXBpY2tlckRpYWxvZ0xhYmVsOiJDaG9vc2UgZGF0ZSIsZGF0ZXBpY2tlclRvZ2dsZUNob29zZURhdGVMYWJlbDoiQ2hvb3NlIGRh''@;'; put 'put ''dGUiLGRhdGVwaWNrZXJUb2dnbGVDaGFuZ2VEYXRlTGFiZWw6IkNoYW5nZSBkYXRlLCB7U0VMRUNURURfREFURX0iLGRhdGVwaWNrZXJQcmV2aW91c01vbnRoOiJQcmV2aW91cyBtb250aCIsZGF0ZXBpY2tlckN1cnJlbnRNb250aDoiQ3VycmVudCBtb250aCIsZGF0ZXBpY2tlck5leHRNb250''@;'; put 'put ''aDoiTmV4dCBtb250aCIsZGF0ZXBpY2tlclByZXZpb3VzRGVjYWRlOiJQcmV2aW91cyBkZWNhZGUiLGRhdGVwaWNrZXJOZXh0RGVjYWRlOiJOZXh0IGRlY2FkZSIsZGF0ZXBpY2tlckN1cnJlbnREZWNhZGU6IkN1cnJlbnQgZGVjYWRlIixkYXRlcGlja2VyU2VsZWN0TW9udGhUZXh0OiJTZWxl''@;'; put 'put ''Y3QgbW9udGgsIHRoZSBjdXJyZW50IG1vbnRoIGlzIHtDQUxFTkRBUl9NT05USH0iLGRhdGVwaWNrZXJTZWxlY3RZZWFyVGV4dDoiU2VsZWN0IHllYXIsIHRoZSBjdXJyZW50IHllYXIgaXMge0NBTEVOREFSX1lFQVJ9IixkYXRlcGlja2VyU2VsZWN0ZWRMYWJlbDoie0ZVTExfREFURX0gLSBT''@;'; put 'put ''ZWxlY3RlZCIsc3RhY2tWaWV3Q2hhbmdlZDoiVmFsdWUgY2hhbmdlZC4iLHJlc3BvbnNpdmVOYXZUb2dnbGVPcGVuOiJPcGVuIG5hdmlnYXRpb24gbWVudSIscmVzcG9uc2l2ZU5hdlRvZ2dsZUNsb3NlOiJDbG9zZSBuYXZpZ2F0aW9uIG1lbnUiLHJlc3BvbnNpdmVOYXZPdmVyZmxvd09wZW46''@;'; put 'put ''Ik9wZW4gbmF2aWdhdGlvbiBvdmVyZmxvdyBtZW51IixyZXNwb25zaXZlTmF2T3ZlcmZsb3dDbG9zZToiQ2xvc2UgbmF2aWdhdGlvbiBvdmVyZmxvdyBtZW51Iix2ZXJ0aWNhbE5hdlRvZ2dsZToiVG9nZ2xlIHZlcnRpY2FsIG5hdmlnYXRpb24iLHRpbWVsaW5lU3RlcE5vdFN0YXJ0ZWQ6Ik5v''@;'; put 'put ''dCBzdGFydGVkIix0aW1lbGluZVN0ZXBDdXJyZW50OiJDdXJyZW50Iix0aW1lbGluZVN0ZXBTdWNjZXNzOiJDb21wbGV0ZWQiLHRpbWVsaW5lU3RlcEVycm9yOiJFcnJvciIsdGltZWxpbmVTdGVwUHJvY2Vzc2luZzoiSW4gcHJvZ3Jlc3MiLGNvbWJvYm94RGVsZXRlOiJEZWxldGUgc2VsZWN0''@;'; put 'put ''ZWQgb3B0aW9uIixjb21ib2JveFNlYXJjaGluZzonU2VhcmNoaW5nIGZvciBtYXRjaGVzIGZvciAie0lOUFVUfSInLGNvbWJvYm94U2VsZWN0aW9uOiJTZWxlY3Rpb24iLGNvbWJvYm94U2VsZWN0ZWQ6IlNlbGVjdGVkIixjb21ib2JveE5vUmVzdWx0czoiTm8gcmVzdWx0cyIsY29tYm9ib3hP''@;'; put 'put ''cGVuOiJTaG93IG9wdGlvbnMiLGRhdGFncmlkRXhwYW5kYWJsZUJlZ2lubmluZ09mOiJCZWdpbm5pbmcgb2YiLGRhdGFncmlkRXhwYW5kYWJsZUVuZE9mOiJFbmQgb2YiLGRhdGFncmlkRXhwYW5kYWJsZVJvd0NvbnRlbnQ6IkV4cGFuZGFibGUgcm93IGNvbnRlbnQiLGRhdGFncmlkRXhwYW5k''@;'; put 'put ''YWJsZVJvd3NIZWxwZXJUZXh0OiJTY3JlZW4gcmVhZGVyIHRhYmxlIGNvbW1hbmRzIG1heSBub3Qgd29yayBmb3Igdmlld2luZyBleHBhbmRlZCBjb250ZW50LCBwbGVhc2UgdXNlIHlvdXIgc2NyZWVuIHJlYWRlcidzIGJyb3dzZSBtb2RlIHRvIHJlYWQgdGhlIGNvbnRlbnQgZXhwb3NlZCBi''@;'; put 'put ''eSB0aGlzIGJ1dHRvbiIsd2l6YXJkU3RlcDoiU3RlcCIsd2l6YXJkU3RlcFN1Y2Nlc3M6IkNvbXBsZXRlZCIsd2l6YXJkU3RlcEVycm9yOiJFcnJvciIsd2l6YXJkU3RlcG5hdkFyaWFMYWJlbDoiV2l6YXJkIHN0ZXBzIixwYXNzd29yZEhpZGU6IkhpZGUgcGFzc3dvcmQgZm9yIHtMQUJFTH0i''@;'; put 'put ''LHBhc3N3b3JkU2hvdzoiU2hvdyBwYXNzd29yZCBmb3Ige0xBQkVMfSIsc2VsZWN0ZWRSb3dzOiJTZWxlY3RlZCByb3dzIixzdGVwQ29tcGxldGU6IlN0ZXAge1NURVB9IGNvbXBsZXRlIixzdGVwRXJyb3I6IkVycm9yIGluIHN0ZXAge1NURVB9Iixicm93c2U6IkJyb3dzZSIsZmlsZUNvdW50''@;'; put 'put ''OiJ7Q09VTlR9IGZpbGVzIixjbGVhckZpbGU6IkNsZWFyIHtGSUxFfSIsY2xlYXJGaWxlczoiQ2xlYXIge0NPVU5UfSBmaWxlcyIsc2VsZWN0ZWRUcmVlTm9kZToic2VsZWN0ZWQiLHVuc2VsZWN0ZWRUcmVlTm9kZToidW5zZWxlY3RlZCIsYnJlYWRjcnVtYnNMYWJlbDoiYnJlYWRjcnVtYnMi''@;'; put 'put ''LGV4cGFuZEJyZWFkY3J1bWJzTGFiZWw6IkV4cGFuZCBicmVhZGNydW1icyJ9KTtsZXQgaWw9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0cmluZ3M9SG9lfWdldCBrZXlzKCl7cmV0dXJuIHRoaXMuX3N0cmluZ3N9bG9jYWxpemUodCl7dGhpcy5fc3RyaW5ncz17Li4udGhp''@;'; put 'put ''cy5fc3RyaW5ncywuLi50fX1wYXJzZSh0LHI9e30pe2NvbnN0IGk9T2JqZWN0LmtleXMocik7bGV0IG89dDtyZXR1cm4gaS5sZW5ndGgmJmkuZm9yRWFjaChhPT57bz1vLnJlcGxhY2UoYHske2F9fWAsclthXSl9KSxvfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5l''@;'; put 'put ''dyh0fHxuKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTt2YXIgZjQ9ZnVuY3Rpb24obil7cmV0dXJuIG4uSW5hY3RpdmU9ImluYWN0aXZlIixuLkVycm9yPSJlcnJvciIsbi5Db21wbGV0ZT0iY29tcGxldGUi''@;'; put 'put ''LG59KGY0fHx7fSksTUQ9ZnVuY3Rpb24obil7cmV0dXJuIG4uRGVmYXVsdD0iZGVmYXVsdCIsbi5NdWx0aT0ibXVsdGkiLG59KE1EfHx7fSk7bGV0IG12dD0wO2NsYXNzIHZ2dHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuaWQ9ZSx0aGlzLmFjY29yZGlvbklkPXQsdGhpcy5zdGF0dXM9ZjQuSW5h''@;'; put 'put ''Y3RpdmUsdGhpcy5pbmRleD1udWxsLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5vcGVuPSExLHRoaXMudGVtcGxhdGVJZD1gJHt0aGlzLmlkfS0ke3RoaXMuYWNjb3JkaW9uSWR9YH19Y2xhc3MgQUVle2NvbnN0cnVjdG9yKCl7dGhpcy5zdHJhdGVneT1NRC5EZWZhdWx0LHRoaXMuYWNjb3JkaW9u''@;'; put 'put ''Q291bnQ9bXZ0KyssdGhpcy5fcGFuZWxzPXt9fWdldCBwYW5lbHMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fcGFuZWxzKS5tYXAoZT0+dGhpcy5fcGFuZWxzW2VdKX1zZXRTdHJhdGVneShlKXt0aGlzLnN0cmF0ZWd5PWV9dXBkYXRlUGFuZWxPcmRlcihlKXtlLmZvckVhY2goKHQscik9''@;'; put 'put ''PnRoaXMuX3BhbmVsc1t0XS5pbmRleD1yKSx0aGlzLnJlbW92ZU9sZFBhbmVscyhlKX1hZGRQYW5lbChlLHQ9ITEpe3RoaXMuX3BhbmVsc1tlXT1uZXcgdnZ0KGUsdGhpcy5hY2NvcmRpb25Db3VudCksdGhpcy5fcGFuZWxzW2VdLm9wZW49dH10b2dnbGVQYW5lbChlLHQpe2NvbnN0IGk9dm9p''@;'; put 'put ''ZCAwIT09dD90OiF0aGlzLl9wYW5lbHNbZV0ub3BlbjtpJiZ0aGlzLnN0cmF0ZWd5PT09TUQuRGVmYXVsdCYmdGhpcy5jbG9zZUFsbFBhbmVscygpLHRoaXMuX3BhbmVsc1tlXS5vcGVuPWl9ZGlzYWJsZVBhbmVsKGUsdCl7dGhpcy5fcGFuZWxzW2VdLmRpc2FibGVkPXR9Y2xvc2VBbGxQYW5l''@;'; put 'put ''bHMoKXt0aGlzLnBhbmVscy5mb3JFYWNoKGU9PnRoaXMuX3BhbmVsc1tlLmlkXS5vcGVuPSExKX1yZW1vdmVPbGRQYW5lbHMoZSl7dGhpcy5wYW5lbHMuZmlsdGVyKHQ9PnZvaWQgMD09PWUuZmluZChyPT5yPT09dC5pZCkpLmZvckVhY2godD0+ZGVsZXRlIHRoaXMuX3BhbmVsc1t0LmlkXSl9''@;'; put 'put ''fWxldCBURD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5hY2NvcmRpb249bmV3IEFFZSx0aGlzLl9wYW5lbHNDaGFuZ2VzPW5ldyAkaSh0aGlzLmFjY29yZGlvbi5wYW5lbHMpfWdldFBhbmVsQ2hhbmdlcyh0KXtyZXR1cm4gdGhpcy5fcGFuZWxzQ2hhbmdlcy5waXBlKEVzKHI9''@;'; put 'put ''PnIuZmluZChpPT5pLmlkPT09dCkpKX1zZXRTdHJhdGVneSh0KXt0aGlzLmFjY29yZGlvbi5zZXRTdHJhdGVneSh0KX1hZGRQYW5lbCh0LHI9ITEpe3RoaXMuYWNjb3JkaW9uLmFkZFBhbmVsKHQsciksdGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfXRvZ2dsZVBhbmVsKHQscil7dGhpcy5hY2Nv''@;'; put 'put ''cmRpb24udG9nZ2xlUGFuZWwodCxyKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZGlzYWJsZVBhbmVsKHQscil7dGhpcy5hY2NvcmRpb24uZGlzYWJsZVBhbmVsKHQsciksdGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfXVwZGF0ZVBhbmVsT3JkZXIodCl7dGhpcy5hY2NvcmRpb24udXBkYXRl''@;'; put 'put ''UGFuZWxPcmRlcih0KSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZW1pdFVwZGF0ZWRQYW5lbHMoKXt0aGlzLl9wYW5lbHNDaGFuZ2VzLm5leHQodGhpcy5hY2NvcmRpb24ucGFuZWxzKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1''@;'; put 'put ''cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksQno9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0LHIsaSxvLGEpe3RoaXMucGFyZW50PXQsdGhpcy5jb21tb25TdHJpbmdzPXIsdGhpcy5hY2NvcmRpb25TZXJ2aWNlPWksdGhpcy5pZkV4cGFuZFNlcnZpY2U9''@;'; put 'put ''byx0aGlzLmNkcj1hLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5wYW5lbE9wZW49ITEsdGhpcy5oZWFkaW5nRW5hYmxlZD0hMSx0aGlzLnBhbmVsT3BlbkNoYW5nZT1uZXcgS3IsdGhpcy5faWQ9UGgoKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKHQpe3RoaXMuX2lkPXR9Z2V0IHBh''@;'; put 'put ''bmVsTnVtYmVyKCl7cmV0dXJuIHRoaXMuX3BhbmVsSW5kZXgrMX1nZXQgaGVhZGluZ0xldmVsKCl7cmV0dXJuIHRoaXMuZXhwbGljaXRIZWFkaW5nTGV2ZWw/dGhpcy5leHBsaWNpdEhlYWRpbmdMZXZlbDp0aGlzLnBhcmVudD80OjN9bmdPbkluaXQoKXt0aGlzLnBhbmVsPXRoaXMuYWNjb3Jk''@;'; put 'put ''aW9uU2VydmljZS5nZXRQYW5lbENoYW5nZXModGhpcy5pZCkucGlwZShmMSh0PT50aGlzLmVtaXRQYW5lbENoYW5nZSh0KSkpLHRoaXMuYWNjb3JkaW9uU2VydmljZS5hZGRQYW5lbCh0aGlzLmlkLHRoaXMucGFuZWxPcGVuKSx0aGlzLmFjY29yZGlvblNlcnZpY2UudG9nZ2xlUGFuZWwodGhp''@;'; put 'put ''cy5pZCx0aGlzLnBhbmVsT3BlbiksdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmRpc2FibGVQYW5lbCh0aGlzLmlkLHRoaXMuZGlzYWJsZWQpfW5nT25DaGFuZ2VzKHQpe3RoaXMucGFuZWwmJnQucGFuZWxPcGVuJiZ0LnBhbmVsT3Blbi5jdXJyZW50VmFsdWUhPT10LnBhbmVsT3Blbi5wcmV2aW91''@;'; put 'put ''c1ZhbHVlJiZ0aGlzLmFjY29yZGlvblNlcnZpY2UudG9nZ2xlUGFuZWwodGhpcy5pZCx0LnBhbmVsT3Blbi5jdXJyZW50VmFsdWUpLHRoaXMucGFuZWwmJnQuZGlzYWJsZWQmJnQuZGlzYWJsZWQuY3VycmVudFZhbHVlIT09dC5kaXNhYmxlZC5wcmV2aW91c1ZhbHVlJiZ0aGlzLmFjY29yZGlv''@;'; put 'put ''blNlcnZpY2UuZGlzYWJsZVBhbmVsKHRoaXMuaWQsdC5kaXNhYmxlZC5jdXJyZW50VmFsdWUpfXRvZ2dsZVBhbmVsKCl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQpfWNvbGxhcHNlUGFuZWxPbkFuaW1hdGlvbkRvbmUodCl7dC5vcGVufHwodGhpcy5pZkV4cGFu''@;'; put 'put ''ZFNlcnZpY2UuZXhwYW5kZWQ9ITEpfWdldFBhbmVsU3RhdGVDbGFzc2VzKHQpe3JldHVybmBjbHItYWNjb3JkaW9uLXBhbmVsLSR7dC5zdGF0dXN9ICR7dC5vcGVuPyJjbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4iOiIifWB9Z2V0QWNjb3JkaW9uQ29udGVudElkKHQpe3JldHVybmBjbHItYWNj''@;'; put 'put ''b3JkaW9uLWNvbnRlbnQtJHt0fSdgfWdldEFjY29yZGlvbkhlYWRlcklkKHQpe3JldHVybmBjbHItYWNjb3JkaW9uLWhlYWRlci0ke3R9YH1zdGVwQ29tcGxldGVUZXh0KHQpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuc3RlcENvbXBs''@;'; put 'put ''ZXRlLHtTVEVQOnQudG9TdHJpbmcoKX0pfXN0ZXBFcnJvclRleHQodCl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zdGVwRXJyb3Ise1NURVA6dC50b1N0cmluZygpfSl9ZW1pdFBhbmVsQ2hhbmdlKHQpe3QuaW5kZXghPT10aGlzLl9w''@;'; put 'put ''YW5lbEluZGV4JiYodGhpcy5fcGFuZWxJbmRleD10LmluZGV4LHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSksdC5vcGVuIT09dGhpcy5wYW5lbE9wZW4mJih0aGlzLnBhbmVsT3BlbkNoYW5nZS5lbWl0KHQub3BlbiksdGhpcy5wYW5lbE9wZW49dC5vcGVuKSx0Lm9wZW4mJih0aGlzLmlmRXhw''@;'; put 'put ''YW5kU2VydmljZS5leHBhbmRlZD0hMCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKG4sMTIpLHplKGlsKSx6ZShURCksemUoTmYpLHplKFVsKSl9LG4uXHUwMjc1Y21wPVByKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tcGFu''@;'; put 'put ''ZWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24odCxyLGkpe2lmKDEmdCYmRmEoaSx4RWUsNCksMiZ0KXtsZXQgbztjaShvPXVpKCkpJiYoci5hY2NvcmRpb25EZXNjcmlwdGlvbj1vKX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHQscil7MiZ0JiZ3cigiY2xyLWFjY29y''@;'; put 'put ''ZGlvbi1wYW5lbCIsITApKCJjbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkIixyLmRpc2FibGVkKX0saW5wdXRzOntkaXNhYmxlZDpbMCwiY2xyQWNjb3JkaW9uUGFuZWxEaXNhYmxlZCIsImRpc2FibGVkIl0scGFuZWxPcGVuOlswLCJjbHJBY2NvcmRpb25QYW5lbE9wZW4iLCJwYW5lbE9w''@;'; put 'put ''ZW4iXSxoZWFkaW5nRW5hYmxlZDpbMCwiY2xyQWNjb3JkaW9uUGFuZWxIZWFkaW5nRW5hYmxlZCIsImhlYWRpbmdFbmFibGVkIl0sZXhwbGljaXRIZWFkaW5nTGV2ZWw6WzAsImNsckFjY29yZGlvblBhbmVsSGVhZGluZ0xldmVsIiwiZXhwbGljaXRIZWFkaW5nTGV2ZWwiXX0sb3V0cHV0czp7''@;'; put 'put ''cGFuZWxPcGVuQ2hhbmdlOiJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltibyhbTmZdKSxpdV0sbmdDb250ZW50U2VsZWN0b3JzOk00dCxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1siaGVhZGVyQnV0dG9uIiwiIl0sWzQsIm5nSWYiXSxbMywi''@;'; put 'put ''bmdDbGFzcyJdLFsxLCJjbHItYWNjb3JkaW9uLWhlYWRlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uIiwzLCJjbGljayIsImlkIiwiZGlzYWJsZWQiXSxbMSwiY2xyLWFjY29yZGlvbi1zdGF0dXMiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rp''@;'; put 'put ''b24iLCJyaWdodCIsMSwiY2xyLWFjY29yZGlvbi1hbmdsZSJdLFsicm9sZSIsInJlZ2lvbiIsMSwiY2xyLWFjY29yZGlvbi1jb250ZW50LXJlZ2lvbiIsMywiaWQiXSxbImNsYXNzIiwiY2xyLWFjY29yZGlvbi1jb250ZW50Iiw0LCJuZ0lmIl0sWzEsImNsci1hY2NvcmRpb24tY29udGVudCJd''@;'; put 'put ''LFsxLCJjbHItYWNjb3JkaW9uLWlubmVyLWNvbnRlbnQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24odCxyKXsxJnQmJihmbyhFNHQpLFluKDAseDR0LDEyLDE2LCJuZy1jb250YWluZXIiLDEpLEFjKDEsImFzeW5jIikpLDImdCYmcnQoIm5nSWYiLFRkKDEsMSxyLnBhbmVsKSl9LGRlcGVuZGVuY2ll''@;'; put 'put ''czpbRmgsWXMsSnMsbUldLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246cHZ0fSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGtFZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQpe3RoaXMuYWNjb3JkaW9uU2VydmljZT10LHRoaXMubXVsdGlQYW5lbD0hMSx0aGlzLnN1YnNj''@;'; put 'put ''cmlwdGlvbnM9W119bmdPbkluaXQoKXt0aGlzLnNldEFjY29yZGlvblN0cmF0ZWd5KCl9bmdPbkNoYW5nZXModCl7dC5tdWx0aVBhbmVsLmN1cnJlbnRWYWx1ZSE9PXQubXVsdGlQYW5lbC5wcmV2aW91c1ZhbHVlJiZ0aGlzLnNldEFjY29yZGlvblN0cmF0ZWd5KCl9bmdBZnRlclZpZXdJbml0''@;'; put 'put ''KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JET01DaGFuZ2VzKCkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2godD0+dC51bnN1YnNjcmliZSgpKX1zZXRBY2NvcmRpb25TdHJhdGVneSgpe3RoaXMuYWNjb3JkaW9uU2VydmljZS5zZXRT''@;'; put 'put ''dHJhdGVneSh0aGlzLm11bHRpUGFuZWw/TUQuTXVsdGk6TUQuRGVmYXVsdCl9bGlzdGVuRm9yRE9NQ2hhbmdlcygpe3JldHVybiB0aGlzLnBhbmVscy5jaGFuZ2VzLnBpcGUocWcodGhpcy5wYW5lbHMpKS5zdWJzY3JpYmUodD0+dGhpcy5hY2NvcmRpb25TZXJ2aWNlLnVwZGF0ZVBhbmVsT3Jk''@;'; put 'put ''ZXIodC50b0FycmF5KCkubWFwKHI9PnIuaWQpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKFREKSl9LG4uXHUwMjc1Y21wPVByKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24iXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24o''@;'; put 'put ''dCxyLGkpe2lmKDEmdCYmRmEoaSxCeiw0KSwyJnQpe2xldCBvO2NpKG89dWkoKSkmJihyLnBhbmVscz1vKX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHQscil7MiZ0JiZ3cigiY2xyLWFjY29yZGlvbiIsITApfSxpbnB1dHM6e211bHRpUGFuZWw6WzAsImNsckFjY29yZGlv''@;'; put 'put ''bk11bHRpUGFuZWwiLCJtdWx0aVBhbmVsIl19LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2JvKFtURF0pLGl1XSxuZ0NvbnRlbnRTZWxlY3RvcnM6ZXMsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24odCxyKXsxJnQmJihmbygpLFdyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5n''@;'; put 'put ''ZURldGVjdGlvbjowfSksbn0pKCksUkVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NWNtcD1Qcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLWNvbnRlbnQiXSxbImNsci1zdGVwLWNvbnRl''@;'; put 'put ''bnQiXV0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6ZXMsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24odCxyKXsxJnQmJihmbygpLFdyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSUVlPSgoKT0+e2NsYXNzIG57fXJldHVy''@;'; put 'put ''biBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NWNtcD1Qcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXRpdGxlIl0sWyJjbHItc3RlcC10aXRsZSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezImdCYm''@;'; put 'put ''d3IoImNsci1hY2NvcmRpb24tdGl0bGUiLCEwKX0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6ZXMsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24odCxyKXsxJnQmJihmbygpLFdyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCks''@;'; put 'put ''c009KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuZGlzYWJsZUNob2NvbGF0ZUNoZWNrPSExLHRoaXMuX2Nob2NvbGF0ZT1uZXcgTXJ9Z2V0IGNob2NvbGF0ZSgpe3JldHVybiB0aGlzLl9jaG9jb2xhdGUuYXNPYnNlcnZhYmxlKCl9bmdBZnRlclZpZXdDaGVja2VkKCl7dGhpcy5k''@;'; put 'put ''aXNhYmxlQ2hvY29sYXRlQ2hlY2t8fHRoaXMuX2Nob2NvbGF0ZS5uZXh0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NWRpcj0kcih7dHlwZTpuLHN0YW5kYWxvbmU6ITF9KSxufSkoKSxsTT0oKCk9PntjbGFzcyBue2NvbnN0cnVj''@;'; put 'put ''dG9yKHQscil7dGhpcy5zdWJzY3JpcHRpb249ci5jaG9jb2xhdGUuc3Vic2NyaWJlKCgpPT57dGhpcy5sYXRlc3RGbGF2b3IhPT10aGlzLmZsYXZvciYmKHIuZGlzYWJsZUNob2NvbGF0ZUNoZWNrPSEwLHQuZGV0ZWN0Q2hhbmdlcygpLHIuZGlzYWJsZUNob2NvbGF0ZUNoZWNrPSExKX0pfW5n''@;'; put 'put ''QWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMubGF0ZXN0Rmxhdm9yPXRoaXMuZmxhdm9yfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoVWwpLHplKHNNKSl9LG4u''@;'; put 'put ''XHUwMjc1ZGlyPSRyKHt0eXBlOm4sc3RhbmRhbG9uZTohMX0pLG59KSgpLFZvZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgc017fXJldHVybiBuLlx1MDI3NWZhYz0oKCk9PntsZXQgZTtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuKGV8fChlPXdhKG4pKSkocnx8bil9fSkoKSxuLlx1MDI3NWRp''@;'; put 'put ''cj0kcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uIl1dLHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0ZvXX0pLG59KSgpLERFZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgbE17Y29uc3RydWN0b3IodCxyLGkpe2lmKCFyKXRocm93IG5ldyBFcnJvcigiY2xyLWFjY29yZGlvbi1w''@;'; put 'put ''YW5lbCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBjbHItYWNjb3JkaW9uIik7c3VwZXIodCxyKSx0aGlzLmV4cGFuZD1pfWdldCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5leHBhbmQuZXhwYW5kZWR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4p''@;'; put 'put ''KHplKFVsKSx6ZShWb2UsOCksemUoTmYpKX0sbi5cdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi1wYW5lbCJdXSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltGb119KSxufSkoKSxMRWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3psLmFkZEljb25z''@;'; put 'put ''KHJNLEFwLGtwKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj1taSh7aW1wb3J0czpbcW8sV2xdfSksbn0pKCksQ3Z0PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3FvLFdsLExFZSxMRWVdfSksbn0pKCk7dmFyIE1vPWZ1bmN0aW9uKG4pe3JldHVybiBuLkFycm93TGVmdD0iQXJyb3dMZWZ0IixuLkFycm93VXA9IkFy''@;'; put 'put ''cm93VXAiLG4uQXJyb3dSaWdodD0iQXJyb3dSaWdodCIsbi5BcnJvd0Rvd249IkFycm93RG93biIsbi5CYWNrc3BhY2U9IkJhY2tzcGFjZSIsbi5UYWI9IlRhYiIsbi5FbnRlcj0iRW50ZXIiLG4uRXNjYXBlPSJFc2NhcGUiLG4uU3BhY2U9IlNwYWNlIixuLlNwYWNlYmFyPSIgIixuLkhvbWU9''@;'; put 'put ''IkhvbWUiLG4uRW5kPSJFbmQiLG4uUGFnZURvd249IlBhZ2VEb3duIixuLlBhZ2VVcD0iUGFnZVVwIixufShNb3x8e30pLEhiPWZ1bmN0aW9uKG4pe3JldHVybiBuLkFycm93VXA9IlVwIixuLkFycm93RG93bj0iRG93biIsbi5BcnJvd1JpZ2h0PSJSaWdodCIsbi5BcnJvd0xlZnQ9IkxlZnQi''@;'; put 'put ''LG4uU3BhY2U9IlNwYWNlYmFyIixuLkVzY2FwZT0iRXNjIixufShIYnx8e30pO2Z1bmN0aW9uIHRtKG4pe3JldHVybiBuPT09TW8uQXJyb3dVcHx8bj09PUhiLkFycm93VXA/TW8uQXJyb3dVcDpuPT09TW8uQXJyb3dEb3dufHxuPT09SGIuQXJyb3dEb3duP01vLkFycm93RG93bjpuPT09TW8u''@;'; put 'put ''QXJyb3dSaWdodHx8bj09PUhiLkFycm93UmlnaHQ/TW8uQXJyb3dSaWdodDpuPT09TW8uQXJyb3dMZWZ0fHxuPT09SGIuQXJyb3dMZWZ0P01vLkFycm93TGVmdDpuPT09TW8uU3BhY2V8fG49PT1IYi5TcGFjZT9Nby5TcGFjZTpuPT09TW8uRXNjYXBlfHxuPT09SGIuRXNjYXBlP01vLkVzY2Fw''@;'; put 'put ''ZTpufWZ1bmN0aW9uIGpvZShuKXtjb25zdCBlPXRtKG4ua2V5KTsoZT09PU1vLkFycm93VXB8fGU9PT1Nby5BcnJvd0Rvd258fGU9PT1Nby5BcnJvd0xlZnR8fGU9PT1Nby5BcnJvd1JpZ2h0KSYmbi5wcmV2ZW50RGVmYXVsdCgpfWxldCBLdT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7''@;'; put 'put ''dGhpcy5fb3Blbj0hMSx0aGlzLl9vcGVuQ2hhbmdlPW5ldyBNcix0aGlzLl9vcGVuRXZlbnRDaGFuZ2U9bmV3IE1yLHRoaXMuX3BvcG92ZXJBbGlnbmVkPW5ldyBNcix0aGlzLl9wb3BvdmVyVmlzaWJsZT1uZXcgTXJ9Z2V0IG9wZW5DaGFuZ2UoKXtyZXR1cm4gdGhpcy5fb3BlbkNoYW5nZS5h''@;'; put 'put ''c09ic2VydmFibGUoKX1nZXQgcG9wb3ZlclZpc2libGUoKXtyZXR1cm4gdGhpcy5fcG9wb3ZlclZpc2libGUuYXNPYnNlcnZhYmxlKCl9Z2V0IG9wZW5FdmVudCgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnR9c2V0IG9wZW5FdmVudCh0KXt0aGlzLl9vcGVuRXZlbnQ9dCx0aGlzLl9vcGVuRXZl''@;'; put 'put ''bnRDaGFuZ2UubmV4dCh0KX1nZXQgb3Blbigpe3JldHVybiB0aGlzLl9vcGVufXNldCBvcGVuKHQpe3RoaXMuX29wZW4hPT0odD0hIXQpJiYodGhpcy5fb3Blbj10LHRoaXMuX29wZW5DaGFuZ2UubmV4dCh0KSl9Z2V0IG9yaWdpbmFsRXZlbnQoKXtyZXR1cm4gdGhpcy5fb3BlbkV2ZW50fWdl''@;'; put 'put ''dCBwb3BvdmVyQWxpZ25lZCgpe3JldHVybiB0aGlzLl9wb3BvdmVyQWxpZ25lZC5hc09ic2VydmFibGUoKX1nZXRFdmVudENoYW5nZSgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlV2l0aEV2ZW50KHQpe2pvZSh0KSx0aGlzLm9wZW5FdmVudD10''@;'; put 'put ''LHRoaXMub3Blbj0hdGhpcy5vcGVufXBvcG92ZXJWaXNpYmxlRW1pdCh0KXt0aGlzLl9wb3BvdmVyVmlzaWJsZS5uZXh0KHQpfXBvcG92ZXJBbGlnbmVkRW1pdCh0KXt0aGlzLl9wb3BvdmVyQWxpZ25lZC5uZXh0KHQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5l''@;'; put 'put ''dyh0fHxuKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxBRD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscixpKXt0aGlzLnJlbmRlcmVyPXQsdGhpcy5zbWFydE9wZW5TZXJ2aWNlPXIsdGhpcy5kb2N1bWVudD1pLHRoaXMub3V0c2lk''@;'; put 'put ''ZUNsaWNrQ2xvc2U9ITAsdGhpcy5zY3JvbGxUb0Nsb3NlPSEwLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChyLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKG89PntvPyh0aGlzLmFkZEVzY2FwZUxpc3RlbmVyKCksdGhpcy5hZGRDbGlja0xpc3RlbmVyKCksdGhp''@;'; put 'put ''cy5hZGRTY3JvbGxMaXN0ZW5lcigpKTp0aGlzLnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCl9KSxyLmdldEV2ZW50Q2hhbmdlKCkuc3Vic2NyaWJlKG89Pnt0aGlzLmlnbm9yZWRFdmVudD1vfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2godD0+dC51bnN1YnNj''@;'; put 'put ''cmliZSgpKSx0aGlzLnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCl9YWRkU2Nyb2xsTGlzdGVuZXIoKXt0aGlzLnNjcm9sbFRvQ2xvc2UmJih0aGlzLmRvY3VtZW50U2Nyb2xsZXI9SmcodGhpcy5kb2N1bWVudCwic2Nyb2xsIix7Y2FwdHVyZTohMH0pLHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9u''@;'; put 'put ''PXRoaXMuZG9jdW1lbnRTY3JvbGxlci5waXBlKHN1KHRoaXMudGVzdEZvclNtYXJ0UG9wb3ZlckNvbnRlbnRDb250YWluZXIpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3Blbj0hMSx0aGlzLnNldEFuY2hvckZvY3VzKCl9KSl9cmVtb3ZlU2Nyb2xsTGlzdGVuZXIo''@;'; put 'put ''KXt0aGlzLmRvY3VtZW50U2Nyb2xsZXImJih0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLGRlbGV0ZSB0aGlzLmRvY3VtZW50U2Nyb2xsZXIpfWFkZENsaWNrTGlzdGVuZXIoKXt0aGlzLm91dHNpZGVDbGlja0Nsb3NlJiYodGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXI9''@;'; put 'put ''dGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5kb2N1bWVudCwiY2xpY2siLHQ9Pnt0PT09dGhpcy5pZ25vcmVkRXZlbnQ/ZGVsZXRlIHRoaXMuaWdub3JlZEV2ZW50Oih0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3Blbj0hMSx0LnRhcmdldC5mb2N1cygpKX0pKX1yZW1vdmVDbGlja0xpc3RlbmVy''@;'; put 'put ''KCl7dGhpcy5vdXRzaWRlQ2xpY2tDbG9zZSYmKGRlbGV0ZSB0aGlzLmlnbm9yZWRFdmVudCx0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lciYmKHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyKCksZGVsZXRlIHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyKSl9YWRkRXNjYXBlTGlzdGVuZXIo''@;'; put 'put ''KXt0aGlzLmVzY2FwZUxpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZG9jdW1lbnQsImtleWRvd24uZXNjYXBlIiwoKT0+e3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuPSExLHRoaXMuc2V0QW5jaG9yRm9jdXMoKX0pfXJlbW92ZUVzY2FwZUxpc3RlbmVyKCl7dGhpcy5lc2Nh''@;'; put 'put ''cGVMaXN0ZW5lciYmKHRoaXMuZXNjYXBlTGlzdGVuZXIoKSxkZWxldGUgdGhpcy5lc2NhcGVMaXN0ZW5lcil9c2V0Q2xvc2VGb2N1cygpe3RoaXMuY2xvc2VCdXR0b25SZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfXNldEFuY2hvckZvY3VzKCl7dGhpcy5hbmNob3JCdXR0b25SZWYubmF0aXZl''@;'; put 'put ''RWxlbWVudC5mb2N1cygpfXRlc3RGb3JTbWFydFBvcG92ZXJDb250ZW50Q29udGFpbmVyKHQpe2xldCByPXQudGFyZ2V0O2Zvcig7ci5jbGFzc0xpc3QmJiJib2R5IiE9PXIucGFyZW50RWxlbWVudC5sb2NhbE5hbWU7KXI9ci5wYXJlbnRFbGVtZW50O3JldHVybiEhci5jbGFzc0xpc3QmJiFy''@;'; put 'put ''LmNsYXNzTGlzdC5jb250YWlucygiY2xyLXBvcG92ZXItY29udGVudCIpfXJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCl7dGhpcy5yZW1vdmVTY3JvbGxMaXN0ZW5lcigpLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lcigpLHRoaXMucmVtb3ZlRXNjYXBlTGlzdGVuZXIoKX19cmV0dXJuIG4uXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikob3IoTnQpLG9yKEt1KSxvcihUbCkpfSxuLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGtEPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxyKXt0LmFuY2hvckJ1dHRvblJlZj1y''@;'; put 'put ''fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShBRCksemUobm8pKX0sbi5cdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2xyUG9wb3ZlckFuY2hvciIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIp''@;'; put 'put ''ezImdCYmd3IoImNsci1hbmNob3IiLCEwKX0sc3RhbmRhbG9uZTohMX0pLG59KSgpLEZFZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscixpKXt0aGlzLmVsZW1lbnRSZWY9dCx0aGlzLnNtYXJ0RXZlbnRzU2VydmljZT1yLHRoaXMuc21hcnRPcGVuU2VydmljZT1pLHRoaXMuY2xvc2VD''@;'; put 'put ''aGFuZ2U9bmV3IEtyLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChpLm9wZW5DaGFuZ2UucGlwZShzdShvPT4hbykpLnN1YnNjcmliZSgoKT0+e3RoaXMuY2xvc2VDaGFuZ2UubmV4dCgpfSkpfWhhbmRsZUNsaWNrKHQpe3RoaXMuc21hcnRPcGVuU2Vydmlj''@;'; put 'put ''ZS50b2dnbGVXaXRoRXZlbnQodCksdGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uuc2V0QW5jaG9yRm9jdXMoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5jbG9zZUJ1dHRvblJlZj10aGlzLmVsZW1lbnRSZWYsdGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uuc2V0Q2xv''@;'; put 'put ''c2VGb2N1cygpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2godD0+dC51bnN1YnNjcmliZSgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUobm8pLHplKEFEKSx6ZShLdSkpfSxuLlx1MDI3NWRpcj0kcih7dHlwZTpu''@;'; put 'put ''LHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyQ2xvc2VCdXR0b24iLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsxJnQmJnd0KCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIHIuaGFuZGxlQ2xpY2sobyl9KSwyJnQmJndyKCJjbHItc21hcnQtY2xvc2UtYnV0''@;'; put 'put ''dG9uIiwhMCl9LG91dHB1dHM6e2Nsb3NlQ2hhbmdlOiJjbHJQb3BvdmVyT25DbG9zZUNoYW5nZSJ9LHN0YW5kYWxvbmU6ITF9KSxufSkoKTt2YXIgQjI9ZnVuY3Rpb24obil7cmV0dXJuIG5bbi5WRVJUSUNBTD0wXT0iVkVSVElDQUwiLG5bbi5IT1JJWk9OVEFMPTFdPSJIT1JJWk9OVEFMIixu''@;'; put 'put ''fShCMnx8e30pLFFsPWZ1bmN0aW9uKG4pe3JldHVybiBuW24uU1RBUlQ9MF09IlNUQVJUIixuW24uQ0VOVEVSPS41XT0iQ0VOVEVSIixuW24uRU5EPTFdPSJFTkQiLG59KFFsfHx7fSksUkQ9ZnVuY3Rpb24obil7cmV0dXJuIG5bbi5CT1RUT009MF09IkJPVFRPTSIsbltuLkxFRlQ9MV09IkxF''@;'; put 'put ''RlQiLG5bbi5SSUdIVD0yXT0iUklHSFQiLG5bbi5UT1A9M109IlRPUCIsbn0oUkR8fHt9KTtjb25zdCB5dj1uPT4oey4uLm4sc2lkZTotMSpuLnNpZGV9KSxyNz0obixlKT0+e2NvbnN0IHQ9bi5jb250ZW50KyhlPy41Oi0uNSk7cmV0dXJuIHQ8MHx8dD4xP246ey4uLm4sY29udGVudDp0fX07''@;'; put 'put ''ZnVuY3Rpb24gY00obixlLHQpe3JldHVybiByPT5lKG4ociksdCl9ZnVuY3Rpb24gSXAobixlLHQpe2xldCByPWUubGVmdCxpPWUudG9wO3N3aXRjaChuLmF4aXMrbi5zaWRlKXtjYXNlLTE6cis9UEVlKG4sZSx0KSxpLT10LmhlaWdodDticmVhaztjYXNlIDE6cis9UEVlKG4sZSx0KSxpKz1l''@;'; put 'put ''LmhlaWdodDticmVhaztjYXNlIDA6ci09dC53aWR0aCxpKz1IRWUobixlLHQpO2JyZWFrO2Nhc2UgMjpyKz1lLndpZHRoLGkrPUhFZShuLGUsdCl9cmV0dXJue3hPZmZzZXQ6cix5T2Zmc2V0Oml9fWZ1bmN0aW9uIFBFZShuLGUsdCl7bGV0IHI9MDtzd2l0Y2gobi5hbmNob3Ipe2Nhc2UgUWwu''@;'; put 'put ''U1RBUlQ6YnJlYWs7Y2FzZSBRbC5DRU5URVI6cis9ZS53aWR0aC8yO2JyZWFrO2Nhc2UgUWwuRU5EOnIrPWUud2lkdGh9c3dpdGNoKG4uY29udGVudCl7Y2FzZSBRbC5TVEFSVDpicmVhaztjYXNlIFFsLkNFTlRFUjpyLT10LndpZHRoLzI7YnJlYWs7Y2FzZSBRbC5FTkQ6ci09dC53aWR0aH1y''@;'; put 'put ''ZXR1cm4gcn1mdW5jdGlvbiBIRWUobixlLHQpe2xldCByPTA7c3dpdGNoKG4uYW5jaG9yKXtjYXNlIFFsLlNUQVJUOmJyZWFrO2Nhc2UgUWwuQ0VOVEVSOnIrPWUuaGVpZ2h0LzI7YnJlYWs7Y2FzZSBRbC5FTkQ6cis9ZS5oZWlnaHR9c3dpdGNoKG4uY29udGVudCl7Y2FzZSBRbC5TVEFSVDpi''@;'; put 'put ''cmVhaztjYXNlIFFsLkNFTlRFUjpyLT10LmhlaWdodC8yO2JyZWFrO2Nhc2UgUWwuRU5EOnItPXQuaGVpZ2h0fXJldHVybiByfWxldCBWRWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0LHIpe3RoaXMuZXZlbnRTZXJ2aWNlPXQsdGhpcy5wbGF0Zm9ybUlkPXIsdGhpcy5fc2hvdWxkUmVh''@;'; put 'put ''bGlnbj1uZXcgTXIsdGhpcy5zaG91bGRSZWFsaWduPXRoaXMuX3Nob3VsZFJlYWxpZ24uYXNPYnNlcnZhYmxlKCl9cmVhbGlnbigpe3RoaXMuX3Nob3VsZFJlYWxpZ24ubmV4dCgpfWFsaWduQ29udGVudCh0KXtpZighSGModGhpcy5wbGF0Zm9ybUlkKSlyZXR1cm57eE9mZnNldDowLHlPZmZz''@;'; put 'put ''ZXQ6MH07dGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzPXRoaXMuZXZlbnRTZXJ2aWNlLmFuY2hvckJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHM9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLmNvbnRl''@;'; put 'put ''bnRPZmZzZXRzPUlwKHRoaXMucG9zaXRpb24sdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2NvbnN0IHI9ZnVuY3Rpb24gRXZ0KG4sZSl7Y29uc3QgdD1bXSxyX2JvdHRvbT1uLnlPZmZzZXQrZS5oZWlnaHQscl9sZWZ0PW4ueE9mZnNldCxyX3Jp''@;'; put 'put ''Z2h0PW4ueE9mZnNldCtlLndpZHRoO3JldHVybiBuLnlPZmZzZXQ+PTB8fHQucHVzaChSRC5UT1ApLHJfbGVmdD49MHx8dC5wdXNoKFJELkxFRlQpLHJfYm90dG9tPD0od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KXx8dC5wdXNoKFJE''@;'; put 'put ''LkJPVFRPTSkscl9yaWdodDw9KHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpfHx0LnB1c2goUkQuUklHSFQpLHR9KHRoaXMuY29udGVudE9mZnNldHMsdGhpcy5jdXJyZW50Q29udGVudENvb3JkcyksaT1yLnJlZHVjZSgobyxhKT0+byth''@;'; put 'put ''LDApO3JldHVybiAxPT09ci5sZW5ndGgmJnRoaXMucG9zaXRpb24uYXhpcz09PUIyLlZFUlRJQ0FMP3RoaXMuaGFuZGxlVmVydGljYWxBeGlzT25lVmlvbGF0aW9uKGkpOjE9PT1yLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09QjIuSE9SSVpPTlRBTD90aGlzLmhhbmRsZUhvcml6b250''@;'; put 'put ''YWxBeGlzT25lVmlvbGF0aW9uKGkpOjI9PT1yLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09QjIuVkVSVElDQUw/dGhpcy5oYW5kbGVWZXJ0aWNhbEF4aXNUd29WaW9sYXRpb25zKGkpOjI9PT1yLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09QjIuSE9SSVpPTlRBTCYmdGhpcy5o''@;'; put 'put ''YW5kbGVIb3Jpem9udGFsQXhpc1R3b1Zpb2xhdGlvbnMoaSksdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcy50b3A8MCYmKHRoaXMuY29udGVudE9mZnNldHMueU9mZnNldCs9TWF0aC5hYnModGhpcy5jdXJyZW50Q29udGVudENvb3Jkcy50b3ApKSx0aGlzLmNvbnRlbnRPZmZzZXRzLnlPZmZz''@;'; put 'put ''ZXQrdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLnk8MCYmKHRoaXMuY29udGVudE9mZnNldHMueU9mZnNldD0wLXRoaXMuY3VycmVudENvbnRlbnRDb29yZHMudG9wKSx0aGlzLmNvbnRlbnRPZmZzZXRzfWhhbmRsZVZlcnRpY2FsQXhpc09uZVZpb2xhdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAw''@;'; put 'put ''OmNhc2UgMzp0aGlzLmNvbnRlbnRPZmZzZXRzPUlwKHl2KHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDE6dGhpcy5jb250ZW50T2Zmc2V0cz1JcCh0aGlzLnBvc2l0aW9uLHRoaXMuY3VycmVudEFu''@;'; put 'put ''Y2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKSx0aGlzLmNvbnRlbnRPZmZzZXRzLnhPZmZzZXQ8MCYmKHRoaXMuY29udGVudE9mZnNldHMueE9mZnNldD0xMCk7YnJlYWs7Y2FzZSAyOnRoaXMuY29udGVudE9mZnNldHM9SXAocjcodGhpcy5wb3NpdGlvbiwhMCksdGhpcy5j''@;'; put 'put ''dXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpfX1oYW5kbGVWZXJ0aWNhbEF4aXNUd29WaW9sYXRpb25zKHQpe3N3aXRjaCh0KXtjYXNlIDU6e2NvbnN0IHI9Y00oeXYscjcsITApO3RoaXMuY29udGVudE9mZnNldHM9SXAocih0aGlzLnBvc2l0aW9uKSx0aGlz''@;'; put 'put ''LmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9Y2FzZSA0Ontjb25zdCByPWNNKHl2LHI3LCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPUlwKHIodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRl''@;'; put 'put ''bnRDb29yZHMpO2JyZWFrfWNhc2UgMzpkZWZhdWx0OmJyZWFrO2Nhc2UgMjp7Y29uc3Qgcj1jTSh5dixyNywhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz1JcChyKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha31j''@;'; put 'put ''YXNlIDE6e2NvbnN0IHI9Y00oeXYscjcsITEpO3RoaXMuY29udGVudE9mZnNldHM9SXAocih0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9fX1oYW5kbGVIb3Jpem9udGFsQXhpc09uZVZpb2xhdGlvbih0KXtz''@;'; put 'put ''d2l0Y2godCl7Y2FzZSAxOmNhc2UgMjp0aGlzLmNvbnRlbnRPZmZzZXRzPUlwKHl2KHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDA6dGhpcy5jb250ZW50T2Zmc2V0cz1JcChyNyh0aGlzLnBvc2l0''@;'; put 'put ''aW9uLCEwKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAzOnRoaXMuY29udGVudE9mZnNldHM9SXAocjcodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMp''@;'; put 'put ''fX1oYW5kbGVIb3Jpem9udGFsQXhpc1R3b1Zpb2xhdGlvbnModCl7c3dpdGNoKHQpe2Nhc2UgNTpjYXNlIDQ6e2NvbnN0IHI9Y00oeXYscjcsITEpO3RoaXMuY29udGVudE9mZnNldHM9SXAocih0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29u''@;'; put 'put ''dGVudENvb3Jkcyk7YnJlYWt9Y2FzZSAzOmRlZmF1bHQ6YnJlYWs7Y2FzZSAyOmNhc2UgMTp7Y29uc3Qgcj1jTSh5dixyNywhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz1JcChyKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRz''@;'; put 'put ''KTticmVha319fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKShvcihBRCksb3IobGQpKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxJRD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscixpLG8s''@;'; put 'put ''YSxsLHUpe3RoaXMuZG9jdW1lbnQ9dCx0aGlzLmNvbnRhaW5lcj1yLHRoaXMudGVtcGxhdGU9aSx0aGlzLnJlbmRlcmVyPW8sdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZT1hLHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlPWwsdGhpcy5zbWFydE9wZW5TZXJ2aWNlPXUsdGhpcy5zdWJzY3JpcHRp''@;'; put 'put ''b25zPVtdLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwsdGhpcy5zaG91bGRSZWFsaWduPSExLHRoaXMucHJldmlvdXNDb250ZW50SGVpZ2h0PW51bGwsdGhpcy5jaGVja0NvbGxlY3Rvcj1uZXcgS3J9c2V0IG9wZW4odCl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ISF0fXNl''@;'; put 'put ''dCBjb250ZW50QXQodCl7dGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5wb3NpdGlvbj10fXNldCBvdXRzaWRlQ2xpY2tDbG9zZSh0KXt0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5vdXRzaWRlQ2xpY2tDbG9zZT0hIXR9c2V0IHNjcm9sbFRvQ2xvc2UodCl7dGhpcy5zbWFydEV2ZW50c1NlcnZp''@;'; put 'put ''Y2Uuc2Nyb2xsVG9DbG9zZT0hIXR9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7aWYodGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW4mJnRoaXMudmlldyl7Y29uc3QgdD10aGlzLnZpZXcucm9vdE5vZGVzWzBdLm9mZnNldEhlaWdodDsodGhpcy5zaG91bGRSZWFsaWdufHxudWxsIT09dGhpcy5w''@;'; put 'put ''cmV2aW91c0NvbnRlbnRIZWlnaHQmJnRoaXMucHJldmlvdXNDb250ZW50SGVpZ2h0IT09dCkmJih0aGlzLnByZXZpb3VzQ29udGVudEhlaWdodD10LHRoaXMuY2hlY2tDb2xsZWN0b3IuZW1pdCgpKX19bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zbWFy''@;'; put 'put ''dE9wZW5TZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKHQ9Pnt0P3RoaXMuYWRkQ29udGVudCgpOnRoaXMucmVtb3ZlQ29udGVudCgpfSksdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5zaG91bGRSZWFsaWduLnN1YnNjcmliZSgoKT0+e3RoaXMuc2hvdWxkUmVhbGlnbj0hMH0pLHRoaXMu''@;'; put 'put ''Y2hlY2tDb2xsZWN0b3IucGlwZShOYigwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5hbGlnbkNvbnRlbnQoKSx0aGlzLnNob3VsZFJlYWxpZ249ITEsdGhpcy52aWV3JiYodGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnZpZXcucm9vdE5vZGVzWzBdLCJvcGFjaXR5IiwiMSIpLHRoaXMuc21h''@;'; put 'put ''cnRPcGVuU2VydmljZS5wb3BvdmVyVmlzaWJsZUVtaXQoITApKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMucmVtb3ZlQ29udGVudCgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHQ9PnQudW5zdWJzY3JpYmUoKSl9YWRkQ29udGVudCgpe3RoaXMudmlldz10aGlzLmNvbnRhaW5lci5jcmVh''@;'; put 'put ''dGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk7Y29uc3RbdF09dGhpcy52aWV3LnJvb3ROb2Rlczt0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5jb250ZW50UmVmPXQsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0LCJjbHItcG9wb3Zlci1jb250ZW50IiksdGhpcy5yZW5kZXJlci5zZXRTdHls''@;'; put 'put ''ZSh0LCJ0b3AiLCIwcHgiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHQsImxlZnQiLCIwcHgiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHQsIm9wYWNpdHkiLCIwIiksdGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm49dGhpcy5yZW5kZXJlci5saXN0ZW4odCwiY2xpY2siLHI9Pnt0aGlzLnNt''@;'; put 'put ''YXJ0T3BlblNlcnZpY2Uub3BlbkV2ZW50PXJ9KSx0aGlzLnZpZXcucm9vdE5vZGVzLmZvckVhY2gocj0+e3RoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LHIpfSksdGhpcy5zaG91bGRSZWFsaWduPSEwfXJlbW92ZUNvbnRlbnQoKXt0aGlzLnZpZXcmJih0aGlz''@;'; put 'put ''LnJlbW92ZUNsaWNrTGlzdGVuZXJGbiYmKHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuKCksdGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm49bnVsbCksdGhpcy52aWV3LnJvb3ROb2Rlcy5mb3JFYWNoKHQ9PnRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LHQp''@;'; put 'put ''KSx0aGlzLmNvbnRhaW5lci5jbGVhcigpLGRlbGV0ZSB0aGlzLnZpZXcsdGhpcy5zbWFydE9wZW5TZXJ2aWNlLnBvcG92ZXJWaXNpYmxlRW1pdCghMSkpfWFsaWduQ29udGVudCgpe2lmKCF0aGlzLnZpZXcpcmV0dXJuO2NvbnN0IHQ9dGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5hbGlnbkNv''@;'; put 'put ''bnRlbnQodGhpcy52aWV3LnJvb3ROb2Rlc1swXSk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnZpZXcucm9vdE5vZGVzWzBdLCJ0b3AiLGAke3QueU9mZnNldH1weGApLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwibGVmdCIsYCR7dC54T2Zmc2V0''@;'; put 'put ''fXB4YCksdGhpcy5zbWFydE9wZW5TZXJ2aWNlLnBvcG92ZXJBbGlnbmVkRW1pdCh0aGlzLnZpZXcucm9vdE5vZGVzWzBdKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoVGwpLHplKERzKSx6ZShGYyksemUoTnQpLHplKFZFZSksemUoQUQpLHpl''@;'; put 'put ''KEt1KSl9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJDb250ZW50IiwiIl1dLGlucHV0czp7b3BlbjpbMCwiY2xyUG9wb3ZlckNvbnRlbnQiLCJvcGVuIl0sY29udGVudEF0OlswLCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY29udGVudEF0Il0sb3V0''@;'; put 'put ''c2lkZUNsaWNrQ2xvc2U6WzAsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsIm91dHNpZGVDbGlja0Nsb3NlIl0sc2Nyb2xsVG9DbG9zZTpbMCwiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwic2Nyb2xsVG9DbG9zZSJdfSxzdGFuZGFsb25lOiExfSksbn0p''@;'; put 'put ''KCksREQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0KXt0aGlzLnNtYXJ0T3BlblNlcnZpY2U9dCx0aGlzLm9wZW5DbG9zZUNoYW5nZT1uZXcgS3IsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHQub3BlbkNoYW5nZS5zdWJzY3JpYmUocj0+e3RoaXMu''@;'; put 'put ''b3BlbkNsb3NlQ2hhbmdlLm5leHQocil9KSl9aGFuZGxlQ2xpY2sodCl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudCh0KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHQ9PnQudW5zdWJzY3JpYmUoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKEt1KSl9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsxJnQmJnd0KCJjbGljayIsZnVu''@;'; put 'put ''Y3Rpb24obyl7cmV0dXJuIHIuaGFuZGxlQ2xpY2sobyl9KSwyJnQmJndyKCJjbHItc21hcnQtb3Blbi1jbG9zZSIsITApfSxvdXRwdXRzOntvcGVuQ2xvc2VDaGFuZ2U6ImNsclBvcG92ZXJPcGVuQ2xvc2VDaGFuZ2UifSxzdGFuZGFsb25lOiExfSksbn0pKCksTEQ9KCgpPT57Y2xhc3Mgbnt9''@;'; put 'put ''cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj1taSh7fSksbn0pKCk7dmFyIERwPWZ1bmN0aW9uKG4pe3JldHVybiBuLlVQPSJ1cCIsbi5ET1dOPSJkb3duIixuLkxFRlQ9ImxlZnQiLG4u''@;'; put 'put ''UklHSFQ9InJpZ2h0IixufShEcHx8e30pO2xldCBPRD0oKCk9PntsZXQgbj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnJlbmRlcmVyPXQsdGhpcy5fdW5saXN0ZW5GdW5jcz1bXX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXJlc2V0KHQpe3RoaXMuX2N1cnJlbnQ9dH1s''@;'; put 'put ''aXN0ZW5Ub0Fycm93S2V5cyh0KXt0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odCwia2V5ZG93bi5hcnJvd3VwIiwoKT0+IXRoaXMubW92ZShEcC5VUCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odCwia2V5ZG93''@;'; put 'put ''bi5hcnJvd2Rvd24iLCgpPT4hdGhpcy5tb3ZlKERwLkRPV04pKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHQsImtleWRvd24uYXJyb3dsZWZ0IiwoKT0+IXRoaXMubW92ZShEcC5MRUZUKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJl''@;'; put 'put ''bmRlcmVyLmxpc3Rlbih0LCJrZXlkb3duLmFycm93cmlnaHQiLCgpPT4hdGhpcy5tb3ZlKERwLlJJR0hUKSkpfXJlZ2lzdGVyQ29udGFpbmVyKHQscj0iMCIpe3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHQsInRhYmluZGV4IixyKSx0aGlzLmxpc3RlblRvQXJyb3dLZXlzKHQpLHRoaXMu''@;'; put 'put ''X3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3Rlbih0LCJrZXlkb3duLnNwYWNlIiwoKT0+IXRoaXMuYWN0aXZhdGVDdXJyZW50KCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odCwia2V5ZG93bi5lbnRlciIsKCk9PiF0aGlzLmFj''@;'; put 'put ''dGl2YXRlQ3VycmVudCgpKSl9bW92ZVRvKHQpe3ZvaWQgMCE9PXQmJih0aGlzLmN1cnJlbnQmJnRoaXMuY3VycmVudC5ibHVyKCksdC5mb2N1cygpLHRoaXMuX2N1cnJlbnQ9dCl9bW92ZSh0KXtsZXQgcj0hMTtpZih0aGlzLmN1cnJlbnQpe2NvbnN0IGk9dGhpcy5jdXJyZW50W3RdO2kmJih4''@;'; put 'put ''SShpKT9pOlBhKGkpKS5zdWJzY3JpYmUoYT0+e2EmJih0aGlzLm1vdmVUbyhhKSxyPSEwKX0pfXJldHVybiByfWFjdGl2YXRlQ3VycmVudCgpe3JldHVybiEoIXRoaXMuY3VycmVudHx8IXRoaXMuY3VycmVudC5hY3RpdmF0ZXx8KHRoaXMuY3VycmVudC5hY3RpdmF0ZSgpLDApKX1kZXRhY2hM''@;'; put 'put ''aXN0ZW5lcnMoKXt0aGlzLl91bmxpc3RlbkZ1bmNzLmZvckVhY2godD0+dCgpKX19O3JldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKG9yKE50KSl9LG4uXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7Y29uc3Qg''@;'; put 'put ''VUVlPXtwcm92aWRlOk9ELHVzZUZhY3Rvcnk6ZnVuY3Rpb24gTXZ0KG4sZSl7cmV0dXJuIG58fG5ldyBPRChlKX0sZGVwczpbW25ldyB3OCxuZXcgcW0sT0RdLE50XX07dmFyIG5tPWZ1bmN0aW9uKG4pe3JldHVybiBuW24uQkVGT1JFPS0xXT0iQkVGT1JFIixuW24uQUZURVI9MV09IkFGVEVS''@;'; put 'put ''IixufShubXx8e30pO2NsYXNzIEEze31BM1sidG9wLXJpZ2h0Il09e2F4aXM6QjIuVkVSVElDQUwsc2lkZTpubS5CRUZPUkUsYW5jaG9yOlFsLkVORCxjb250ZW50OlFsLkVORH0sQTNbInRvcC1sZWZ0Il09e2F4aXM6QjIuVkVSVElDQUwsc2lkZTpubS5CRUZPUkUsYW5jaG9yOlFsLlNUQVJU''@;'; put 'put ''LGNvbnRlbnQ6UWwuU1RBUlR9LEEzWyJib3R0b20tcmlnaHQiXT17YXhpczpCMi5WRVJUSUNBTCxzaWRlOm5tLkFGVEVSLGFuY2hvcjpRbC5FTkQsY29udGVudDpRbC5FTkR9LEEzWyJib3R0b20tbGVmdCJdPXtheGlzOkIyLlZFUlRJQ0FMLHNpZGU6bm0uQUZURVIsYW5jaG9yOlFsLlNUQVJU''@;'; put 'put ''LGNvbnRlbnQ6UWwuU1RBUlR9LEEzWyJyaWdodC10b3AiXT17YXhpczpCMi5IT1JJWk9OVEFMLHNpZGU6bm0uQUZURVIsYW5jaG9yOlFsLkNFTlRFUixjb250ZW50OlFsLkVORH0sQTNbInJpZ2h0LWJvdHRvbSJdPXtheGlzOkIyLkhPUklaT05UQUwsc2lkZTpubS5BRlRFUixhbmNob3I6UWwu''@;'; put 'put ''U1RBUlQsY29udGVudDpRbC5TVEFSVH0sQTNbImxlZnQtdG9wIl09e2F4aXM6QjIuSE9SSVpPTlRBTCxzaWRlOm5tLkJFRk9SRSxhbmNob3I6UWwuQ0VOVEVSLGNvbnRlbnQ6UWwuRU5EfSxBM1sibGVmdC1ib3R0b20iXT17YXhpczpCMi5IT1JJWk9OVEFMLHNpZGU6bm0uQkVGT1JFLGFuY2hv''@;'; put 'put ''cjpRbC5TVEFSVCxjb250ZW50OlFsLlNUQVJUfTtjb25zdCBVej1uZXcgRXIoIlBPUE9WRVJfSE9TVF9BTkNIT1IiKTtsZXQgVHZ0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCl7dGhpcy50b2dnbGVTZXJ2aWNlPXQsdGhpcy5sYXN0T3BlbkNoYW5nZT1udWxsfW5nT25Jbml0KCl7dGhp''@;'; put 'put ''cy5zdWJzY3JpcHRpb249dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKHQ9Pnt0aGlzLmxhc3RPcGVuQ2hhbmdlPXR9KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfW9uRXNjYXBlS2V5KHQpe251bGwhPT10aGlzLmxhc3RPcGVu''@;'; put 'put ''Q2hhbmdlJiYoITE9PT10aGlzLmxhc3RPcGVuQ2hhbmdlJiZ0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMubGFzdE9wZW5DaGFuZ2U9bnVsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKEt1KSl9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4saG9z''@;'; put 'put ''dEJpbmRpbmdzOmZ1bmN0aW9uKHQscil7MSZ0JiZ3dCgia2V5dXAuZXNjYXBlIixmdW5jdGlvbihvKXtyZXR1cm4gci5vbkVzY2FwZUtleShvKX0pfX0pLG59KSgpLGk3PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1''@;'; put 'put ''MDI3NWRpcj0kcih7dHlwZTpuLGZlYXR1cmVzOltibyhbS3UsQUQsVkVlLHtwcm92aWRlOlV6LHVzZUV4aXN0aW5nOm5vfV0pLHpnKFtUdnRdKV19KSxufSkoKTtjbGFzcyB6b2V7c3RhdGljIGxpbmtQYXJlbnQoZSx0LHIpe2UuZm9yRWFjaChpPT5pW3JdPXQpfXN0YXRpYyBsaW5rVmVydGlj''@;'; put 'put ''YWwoZSx0PSEwKXtlLmZvckVhY2goKHIsaSk9PntpPjAmJihyLnVwPWVbaS0xXSksaTxlLmxlbmd0aC0xJiYoci5kb3duPWVbaSsxXSl9KSx0JiZlLmxlbmd0aD4xJiYoZVswXS51cD1lW2UubGVuZ3RoLTFdLGVbZS5sZW5ndGgtMV0uZG93bj1lWzBdKX19bGV0IGJ2PSgoKT0+e2NsYXNzIG57''@;'; put 'put ''dXNlckRlZmluZWRXaWR0aCh0KXtjb25zdCByPXQuY2xvbmVOb2RlKCEwKTtyLmlkJiYoci5pZD1yLmlkKyItY2xvbmUiKSxyLmNsYXNzTGlzdC5hZGQoImRhdGFncmlkLWNlbGwtd2lkdGgtemVybyIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocik7Y29uc3QgaT10aGlzLmNsaWVudFJl''@;'; put 'put ''Y3Qocikud2lkdGg7cmV0dXJuIHIucmVtb3ZlKCksaX1zY3JvbGxCYXJXaWR0aCh0KXtyZXR1cm4gdC5vZmZzZXRXaWR0aC10LmNsaWVudFdpZHRofXNjcm9sbFdpZHRoKHQpe3JldHVybiB0LnNjcm9sbFdpZHRofHwwfWNvbXB1dGVkSGVpZ2h0KHQpe3JldHVybiBwYXJzZUludChnZXRDb21w''@;'; put 'put ''dXRlZFN0eWxlKHQpLmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIpLDEwKX1jbGllbnRSZWN0KHQpe2NvbnN0IHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOnBhcnNlSW50KHIudG9wLDEwKSxib3R0b206cGFyc2VJbnQoci5ib3R0b20sMTApLGxlZnQ6cGFyc2VJbnQo''@;'; put 'put ''ci5sZWZ0LDEwKSxyaWdodDpwYXJzZUludChyLnJpZ2h0LDEwKSx3aWR0aDpwYXJzZUludChyLndpZHRoLDEwKSxoZWlnaHQ6cGFyc2VJbnQoci5oZWlnaHQsMTApfX1taW5XaWR0aCh0KXtyZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKCJtaW4t''@;'; put 'put ''d2lkdGgiKSwxMCl9Zm9jdXModCl7dC5mb2N1cygpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx6ej0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQs''@;'; put 'put ''cixpKXt0aGlzLmVsZW1lbnQ9dCx0aGlzLmRvbUFkYXB0ZXI9cix0aGlzLnJlbmRlcmVyPWksdGhpcy5jbHJFeHBhbmRUcmlnZ2VyPSExLHRoaXMuc3RhcnRIZWlnaHQ9MH1nZXQgZXhwYW5kQW5pbWF0aW9uKCl7cmV0dXJue3ZhbHVlOnRoaXMuY2xyRXhwYW5kVHJpZ2dlcixwYXJhbXM6e3N0''@;'; put 'put ''YXJ0SGVpZ2h0OnRoaXMuc3RhcnRIZWlnaHR9fX1hbmltYXRpb25TdGFydCh0KXsidm9pZCIhPT10LmZyb21TdGF0ZSYmdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwib3ZlcmZsb3ciLCJoaWRkZW4iKX1hbmltYXRpb25Eb25lKHQpeyJ2b2lkIiE9''@;'; put 'put ''PXQuZnJvbVN0YXRlJiYodGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwib3ZlcmZsb3ciKSx0aGlzLnVwZGF0ZVN0YXJ0SGVpZ2h0KCkpfXVwZGF0ZVN0YXJ0SGVpZ2h0KCl7dGhpcy5zdGFydEhlaWdodD10aGlzLmRvbUFkYXB0ZXIuY29tcHV0''@;'; put 'put ''ZWRIZWlnaHQodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpfHwwfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShubyksemUoYnYpLHplKE50KSl9LG4uXHUwMjc1Y21wPVByKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1leHBhbmRhYmxlLWFu''@;'; put 'put ''aW1hdGlvbiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezEmdCYmbm5lKCJAZXhwYW5kQW5pbWF0aW9uLnN0YXJ0IixmdW5jdGlvbihvKXtyZXR1cm4gci5hbmltYXRpb25TdGFydChvKX0pKCJAZXhwYW5kQW5pbWF0aW9uLmRvbmUiLGZ1bmN0aW9uKG8pe3JldHVy''@;'; put 'put ''biByLmFuaW1hdGlvbkRvbmUobyl9KSwyJnQmJlF0ZSgiQGV4cGFuZEFuaW1hdGlvbiIsci5leHBhbmRBbmltYXRpb24pfSxpbnB1dHM6e2NsckV4cGFuZFRyaWdnZXI6ImNsckV4cGFuZFRyaWdnZXIifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltibyhbYnZdKV0sbmdDb250ZW50U2VsZWN0''@;'; put 'put ''b3JzOmVzLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKHQscil7MSZ0JiYoZm8oKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W1JwKCJleHBhbmRBbmltYXRpb24iLFtwaCgidHJ1ZSA8PT4gZmFsc2UiLFt2bCh7aGVpZ2h0OiJ7e3N0YXJ0SGVpZ2h0''@;'; put 'put ''fX1weCJ9KSx5MCgiMC4ycyBlYXNlLWluLW91dCIsdmwoe2hlaWdodDoiKiJ9KSldKV0pXX19KSxufSkoKSxXb2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWlu''@;'; put 'put ''aj1taSh7aW1wb3J0czpbcW9dfSksbn0pKCkseHZ0PTA7Y29uc3QgZE09bmV3IEVyKCJJRl9BQ1RJVkVfSUQiKSxrdnQ9e3Byb3ZpZGU6ZE0sdXNlRmFjdG9yeTpmdW5jdGlvbiBBdnQoKXtyZXR1cm4rK3h2dH19O2xldCBWYj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5fY3Vy''@;'; put 'put ''cmVudENoYW5nZT1uZXcgTXJ9Z2V0IGN1cnJlbnRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY3VycmVudENoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KHQpe3RoaXMuX2N1cnJlbnQhPT10JiYodGhpcy5fY3VycmVudD10''@;'; put 'put ''LHRoaXMuX2N1cnJlbnRDaGFuZ2UubmV4dCh0KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGhNPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxy''@;'; put 'put ''LGksbyl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9dCx0aGlzLmlkPXIsdGhpcy50ZW1wbGF0ZT1pLHRoaXMuY29udGFpbmVyPW8sdGhpcy5hY3RpdmVDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLndhc0FjdGl2ZT0hMSx0aGlzLmNoZWNrQW5kVXBkYXRlVmlldyh0LmN1cnJlbnQpLHRoaXMuc3Vic2Ny''@;'; put 'put ''aXB0aW9uPXQuY3VycmVudENoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2hlY2tBbmRVcGRhdGVWaWV3KGEpfSl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1zZXQgYWN0aXZlKHQpe3QmJih0aGlzLmlmQWN0aXZlU2VydmljZS5j''@;'; put 'put ''dXJyZW50PXRoaXMuaWQpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX11cGRhdGVWaWV3KHQpe3Q/dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpOnRoaXMuY29udGFpbmVyLmNsZWFyKCl9Y2hlY2tBbmRVcGRhdGVW''@;'; put 'put ''aWV3KHQpe2NvbnN0IHI9dD09PXRoaXMuaWQ7ciE9PXRoaXMud2FzQWN0aXZlJiYodGhpcy51cGRhdGVWaWV3KHIpLHRoaXMuYWN0aXZlQ2hhbmdlLmVtaXQociksdGhpcy53YXNBY3RpdmU9cil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKFZi''@;'; put 'put ''KSx6ZShkTSksemUoRmMpLHplKERzKSl9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNscklmQWN0aXZlIiwiIl1dLGlucHV0czp7YWN0aXZlOlswLCJjbHJJZkFjdGl2ZSIsImFjdGl2ZSJdfSxvdXRwdXRzOnthY3RpdmVDaGFuZ2U6ImNscklmQWN0aXZlQ2hhbmdl''@;'; put 'put ''In0sc3RhbmRhbG9uZTohMX0pLG59KSgpLExwPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxyLGkpe3RoaXMudG9nZ2xlU2VydmljZT10LHRoaXMudGVtcGxhdGU9cix0aGlzLmNvbnRhaW5lcj1pLHRoaXMub3BlbkNoYW5nZT1uZXcgS3IoITEpLHRoaXMuc3Vic2NyaXB0aW9uPXQub3Bl''@;'; put 'put ''bkNoYW5nZS5zdWJzY3JpYmUobz0+e3RoaXMudXBkYXRlVmlldyhvKSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChvKX0pfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMudG9nZ2xlU2VydmljZS5vcGVufXNldCBvcGVuKHQpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPXR9bmdPbkRlc3Ryb3koKXt0aGlz''@;'; put 'put ''LnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXVwZGF0ZVZpZXcodCl7dD90aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk6dGhpcy5jb250YWluZXIuY2xlYXIoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8biko''@;'; put 'put ''emUoS3UpLHplKEZjKSx6ZShEcykpfSxuLlx1MDI3NWRpcj0kcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjbHJJZk9wZW4iLCIiXV0saW5wdXRzOntvcGVuOlswLCJjbHJJZk9wZW4iLCJvcGVuIl19LG91dHB1dHM6e29wZW5DaGFuZ2U6ImNscklmT3BlbkNoYW5nZSJ9LHN0YW5kYWxvbmU6''@;'; put 'put ''ITF9KSxufSkoKSx6RWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0LHIsaSxvLGEpe3RoaXMudGVtcGxhdGU9dCx0aGlzLmNvbnRhaW5lcj1yLHRoaXMuZWw9aSx0aGlzLnJlbmRlcmVyPW8sdGhpcy5leHBhbmQ9YSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBLcighMCksdGhpcy5fZXhw''@;'; put 'put ''YW5kZWQ9ITEsdGhpcy5fc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2goYS5leHBhbmRDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy51cGRhdGVWaWV3KCksdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KGEuZXhwYW5kZWQpfSkpLGEuaGFzRXhwYW5kVGVtcGxhdGU9''@;'; put 'put ''ISF0fWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQodCl7ImJvb2xlYW4iPT10eXBlb2YgdCYmKHRoaXMuZXhwYW5kLmV4cGFuZGVkPXQsdGhpcy5fZXhwYW5kZWQ9dCl9bmdPbkluaXQoKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlKyssdGhpcy51cGRh''@;'; put 'put ''dGVWaWV3KCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlLS0sdGhpcy5fc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHQ9PnQudW5zdWJzY3JpYmUoKSl9dXBkYXRlVmlldygpe2lmKCF0aGlzLmV4cGFuZC5leHBhbmRlZHx8MD09PXRoaXMuY29udGFpbmVyLmxlbmd0aClpZih0''@;'; put 'put ''aGlzLnRlbXBsYXRlKXRoaXMuZXhwYW5kLmV4cGFuZGVkP3RoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVhcigpO2Vsc2UgdHJ5e3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNw''@;'; put 'put ''bGF5Iix0aGlzLmV4cGFuZC5leHBhbmRlZD9udWxsOiJub25lIil9Y2F0Y2h7fX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoRmMsOCksemUoRHMpLHplKG5vKSx6ZShOdCksemUoTmYpKX0sbi5cdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3Rv''@;'; put 'put ''cnM6W1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXSxpbnB1dHM6e2V4cGFuZGVkOlswLCJjbHJJZkV4cGFuZGVkIiwiZXhwYW5kZWQiXX0sb3V0cHV0czp7ZXhwYW5kZWRDaGFuZ2U6ImNscklmRXhwYW5kZWRDaGFuZ2UifSxzdGFuZGFsb25lOiExfSksbn0pKCkscm09KCgpPT57Y2xhc3Mgbnt9''@;'; put 'put ''cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj1taSh7aW1wb3J0czpbcW9dfSksbn0pKCk7Y29uc3QgUnZ0PXtwcm92aWRlOm5ldyBFcigiRk9DVVNfT05fVklFV19JTklUIiksdXNlVmFs''@;'; put 'put ''dWU6ITB9O2xldCBXej0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPW1pKHtwcm92aWRlcnM6W1J2dF0saW1wb3J0czpbcW9dfSksbn0pKCksRHZ0PSgoKT0+''@;'; put 'put ''e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3FvLFdsLExEXX0pLG59KSgpLGltPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxyKXt0aGlz''@;'; put 'put ''LmVsPXQsdGhpcy5yZW5kZXJlcj1yLHRoaXMuY2xyTG9hZGluZ0NoYW5nZT1uZXcgS3IoITEpLHRoaXMuYnV0dG9uU3RhdGU9T2YsdGhpcy5zdGF0ZT1PZi5ERUZBVUxUfWxvYWRpbmdTdGF0ZUNoYW5nZSh0KXtpZih0IT09dGhpcy5zdGF0ZSl7c3dpdGNoKHRoaXMuc3RhdGU9dCx0KXtjYXNl''@;'; put 'put ''IE9mLkRFRkFVTFQ6dGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIiksdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInRyYW5zZm9ybSIpLHRoaXMuZGlzYWJsZWR8fHRoaXMucmVuZGVyZXIucmVtb3Zl''@;'; put 'put ''QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiKTticmVhaztjYXNlIE9mLkxPQURJTkc6dGhpcy5zZXRFeHBsaWNpdEJ1dHRvbldpZHRoKCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInRyYW5zZm9ybSIsInRyYW5zbGF0ZXoo''@;'; put 'put ''MCkiKSx0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRpc2FibGVkIiwiIik7YnJlYWs7Y2FzZSBPZi5TVUNDRVNTOnRoaXMuc2V0RXhwbGljaXRCdXR0b25XaWR0aCgpO2JyZWFrO2Nhc2UgT2YuRVJST1I6dGhpcy5sb2FkaW5nU3RhdGVDaGFuZ2Uo''@;'; put 'put ''T2YuREVGQVVMVCl9dGhpcy5jbHJMb2FkaW5nQ2hhbmdlLmVtaXQodCl9fXNldEV4cGxpY2l0QnV0dG9uV2lkdGgoKXtpZih0aGlzLmVsLm5hdGl2ZUVsZW1lbnQmJnRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qpe2NvbnN0IHQ9dGhpcy5lbC5uYXRpdmVFbGVt''@;'; put 'put ''ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9TWF0aC5tYXgoNDIsdC53aWR0aCk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixgJHtyfXB4YCl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6''@;'; put 'put ''ZShubyksemUoTnQpKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siYnV0dG9uIiwiY2xyTG9hZGluZyIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezImdCYmUnIoImRpc2FibGVkIixyLmRpc2FibGVkPyIiOm51bGwpfSxpbnB1dHM6e2Rp''@;'; put 'put ''c2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e2NsckxvYWRpbmdDaGFuZ2U6ImNsckxvYWRpbmdDaGFuZ2UifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltibyhbe3Byb3ZpZGU6RUQsdXNlRXhpc3Rpbmc6bn1dKV0sYXR0cnM6cTR0LG5nQ29udGVudFNlbGVjdG9yczplcyxkZWNsczo0LHZh''@;'; put 'put ''cnM6NSxjb25zdHM6W1szLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiY2xyLWxvYWRpbmctYnRuLWNvbnRlbnQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwic3Bp''@;'; put 'put ''bm5lci1jaGVjayJdLFsxLCJjbHItbG9hZGluZy1idG4tY29udGVudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpezEmdCYmKGZvKCksSigwLCJzcGFuIiwwKSxZbigxLEs0dCwyLDEsIm5nLWNvbnRhaW5lciIsMSkoMixYNHQsMiwxLCJuZy1jb250YWluZXIiLDEpKDMsUTR0LDIsMSwic3Bh''@;'; put 'put ''biIsMiksdGUoKSksMiZ0JiYocnQoIkBwYXJlbnQiLHZvaWQgMCkoIm5nU3dpdGNoIixyLnN0YXRlKSxpZSgpLHJ0KCJuZ1N3aXRjaENhc2UiLHIuYnV0dG9uU3RhdGUuTE9BRElORyksaWUoKSxydCgibmdTd2l0Y2hDYXNlIixyLmJ1dHRvblN0YXRlLlNVQ0NFU1MpLGllKCkscnQoIm5nU3dp''@;'; put 'put ''dGNoQ2FzZSIsci5idXR0b25TdGF0ZS5ERUZBVUxUKSl9LGRlcGVuZGVuY2llczpbQUUsU1VdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W1JwKCJwYXJlbnQiLFtwaCgiOmVudGVyIixbXSldKSxScCgiZGVmYXVsdEJ1dHRvbiIsW3BoKCI6ZW50ZXIiLFt2bCh7b3BhY2l0eTow''@;'; put 'put ''fSkseTAoIjIwMG1zIDEwMG1zIGVhc2UtaW4iLHZsKHtvcGFjaXR5OjF9KSldKSxwaCgiOmxlYXZlIixbdmwoe29wYWNpdHk6MH0pXSldKSxScCgic3Bpbm5lciIsW3BoKCI6ZW50ZXIiLFt2bCh7b3BhY2l0eTowfSkseTAoIjIwMG1zIDEwMG1zIGVhc2UtaW4iLHZsKHtvcGFjaXR5OjF9KSld''@;'; put 'put ''KSxwaCgiOmxlYXZlIixbdmwoe29wYWNpdHk6MX0pLHkwKCIxMDBtcyBlYXNlLW91dCIsdmwoe29wYWNpdHk6MH0pKV0pXSksUnAoInZhbGlkYXRlZCIsW3BoKCI6ZW50ZXIiLFt5MCgiNjAwbXMiLGFtdChbdmwoe3RyYW5zZm9ybToic2NhbGUoMCwwKSIsb2Zmc2V0OjB9KSx2bCh7b3BhY2l0''@;'; put 'put ''eToxLG9mZnNldDouMn0pLHZsKHt0cmFuc2Zvcm06InNjYWxlKDEuMiwxLjIpIixvZmZzZXQ6LjR9KSx2bCh7dHJhbnNmb3JtOiJzY2FsZSguOSwuOSkiLG9mZnNldDouNn0pLHZsKHt0cmFuc2Zvcm06InNjYWxlKDEsMSkiLG9mZnNldDoxfSldKSldKSxwaCgiOmxlYXZlIixbdmwoe29wYWNp''@;'; put 'put ''dHk6MX0pLHkwKCIxMDBtcyBlYXNlLW91dCIsdmwoe29wYWNpdHk6MH0pKV0pXSldfX0pLG59KSgpLE92dD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPW1p''@;'; put 'put ''KHtpbXBvcnRzOltxb119KSxufSkoKSxOdnQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3psLmFkZEljb25zKE5TZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9bWkoe2lt''@;'; put 'put ''cG9ydHM6W092dCxEdnRdfSksbn0pKCksRnZ0PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NWNtcD1Qcih7dHlwZTpuLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0sc3RhbmRhbG9uZTohMSxkZWNsczow''@;'; put 'put ''LHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpe30sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksTkQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj1taSh7''@;'; put 'put ''fSksbn0pKCksUHZ0PTAsT3A9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2lkPSJjbHItZm9ybS1jb250cm9sLSIrICsrUHZ0LHRoaXMuX2lkQ2hhbmdlPW5ldyAkaSh0aGlzLl9pZCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZCh0KXt0aGlzLl9pZD10LHRoaXMu''@;'; put 'put ''X2lkQ2hhbmdlLm5leHQodCl9Z2V0IGlkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2lkQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9''@;'; put 'put ''KSxufSkoKSxIdnQ9MCxCYj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9ImNsci1mb3JtLWNvbnRhaW5lci0iKyArK0h2dCx0aGlzLl9pZENoYW5nZT1uZXcgJGkodGhpcy5faWQpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQodCl7dGhpcy5faWQ9dCx0aGlz''@;'; put 'put ''Ll9pZENoYW5nZS5uZXh0KHQpfWdldCBpZENoYW5nZSgpe3JldHVybiB0aGlzLl9pZENoYW5nZS5hc09ic2VydmFibGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFj''@;'; put 'put ''fSksbn0pKCk7bGV0IFlvZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscil7dGhpcy5jb250cm9sSWRTZXJ2aWNlPXQsdGhpcy5jb250YWluZXJJZFNlcnZpY2U9cix0aGlzLmNvbnRyb2xJZFN1ZmZpeD0iYWJzdHJhY3QifWdldCBpZCgpe3JldHVybiB0aGlzLmNvbnRhaW5lcklkU2Vy''@;'; put 'put ''dmljZT9gJHt0aGlzLmNvbnRhaW5lcklkU2VydmljZS5pZH0tJHt0aGlzLmNvbnRyb2xJZFN1ZmZpeH1gOnRoaXMuY29udHJvbElkU2VydmljZT9gJHt0aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWR9LSR7dGhpcy5jb250cm9sSWRTdWZmaXh9YDpudWxsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShPcCw4KSx6ZShCYiw4KSl9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc3RhbmRhbG9uZTohMX0pLG59KSgpLFZ2dD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWW9le2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCxyKSx0aGlzLmNvbnRyb2xJZFNl''@;'; put 'put ''cnZpY2U9dCx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1yLHRoaXMuY29udHJvbElkU3VmZml4PSJlcnJvciJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKE9wLDgpLHplKEJiLDgpKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6''@;'; put 'put ''W1siY2xyLWNvbnRyb2wtZXJyb3IiXV0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsyJnQmJihScigiaWQiLHIuaWQpLHdyKCJjbHItc3VidGV4dCIsITApKCJlcnJvciIsITApKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbRm9dLG5nQ29udGVudFNlbGVjdG9yczpl''@;'; put 'put ''cyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpezEmdCYmKGZvKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxZej0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWW9le2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCxyKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9dCx0''@;'; put 'put ''aGlzLmNvbnRhaW5lcklkU2VydmljZT1yLHRoaXMuY29udHJvbElkU3VmZml4PSJoZWxwZXIifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShPcCw4KSx6ZShCYiw4KSl9LG4uXHUwMjc1Y21wPVByKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1j''@;'; put 'put ''b250cm9sLWhlbHBlciJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezImdCYmKFJyKCJpZCIsci5pZCksd3IoImNsci1zdWJ0ZXh0IiwhMCkpfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltGb10sbmdDb250ZW50U2VsZWN0b3JzOmVzLGRlY2xzOjEsdmFyczowLHRl''@;'; put 'put ''bXBsYXRlOmZ1bmN0aW9uKHQscil7MSZ0JiYoZm8oKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLGoyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHM9W10sdGhpcy5fY29udHJvbENoYW5nZXM9bmV3IE1yLHRoaXMuX2FkZGl0aW9u''@;'; put 'put ''YWxDb250cm9sc0NoYW5nZXM9bmV3IE1yLHRoaXMuX2hlbHBlcnM9bmV3IE1yfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuX2NvbnRyb2x9Z2V0IGNvbnRyb2xDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NvbnRyb2xDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCBhZGRpdGlvbmFsQ29udHJv''@;'; put 'put ''bHMoKXtyZXR1cm4gdGhpcy5fYWRkaXRpb25hbENvbnRyb2xzfWdldCBhZGRpdGlvbmFsQ29udHJvbHNDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2FkZGl0aW9uYWxDb250cm9sc0NoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IGhhc0FkZGl0aW9uYWxDb250cm9scygpe3JldHVybiEhdGhpcy5f''@;'; put 'put ''YWRkaXRpb25hbENvbnRyb2xzPy5sZW5ndGh9Z2V0IGhlbHBlcnNDaGFuZ2UoKXtyZXR1cm4gdGhpcy5faGVscGVycy5hc09ic2VydmFibGUoKX1zZXRDb250cm9sKHQpe3RoaXMuX2NvbnRyb2w9dCx0aGlzLl9jb250cm9sQ2hhbmdlcy5uZXh0KHQpfWFkZEFkZGl0aW9uYWxDb250cm9sKHQp''@;'; put 'put ''e3RoaXMuX2FkZGl0aW9uYWxDb250cm9scy5wdXNoKHQpLHRoaXMuX2FkZGl0aW9uYWxDb250cm9sc0NoYW5nZXMubmV4dCh0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHMpfXNldEhlbHBlcnModCl7dGhpcy5faGVscGVycy5uZXh0KHQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7''@;'; put 'put ''cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTt2YXIgazM9ZnVuY3Rpb24obil7cmV0dXJuIG4uTk9ORT0iTk9ORSIsbi5WQUxJRD0iVkFMSUQiLG4uSU5WQUxJRD0iSU5WQUxJRCIsbn0oazN8fHt9KTtsZXQgUjM9''@;'; put 'put ''KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0KXt0aGlzLnRyaWdnZXJTdGF0dXNDaGFuZ2VTdWJqZWN0PW5ldyBNcix0aGlzLnN0YXR1c0NoYW5nZXM9dGhpcy5nZXRTdGF0dXNDaGFuZ2VzKHQpLnBpcGUoVlNlKDEpKX10cmlnZ2VyU3RhdHVzQ2hhbmdlKCl7dGhpcy50cmlnZ2VyU3RhdHVz''@;'; put 'put ''Q2hhbmdlU3ViamVjdC5uZXh0KCl9Z2V0U3RhdHVzQ2hhbmdlcyh0KXtyZXR1cm4gX2IoW3QuY29udHJvbENoYW5nZXMsdC5hZGRpdGlvbmFsQ29udHJvbHNDaGFuZ2VzLnBpcGUocWcoW10pKV0pLnBpcGUobTAoKFtyLGldKT0+e2lmKHIpe2NvbnN0IG89W3IsLi4uaV07cmV0dXJuIGhEKF9i''@;'; put 'put ''KG8ubWFwKGE9PmEuc3RhdHVzQ2hhbmdlcykpLHRoaXMudHJpZ2dlclN0YXR1c0NoYW5nZVN1YmplY3QucGlwZShFcygoKT0+by5tYXAoYT0+YS5zdGF0dXMpKSkpfXJldHVybiBFcH0pLEVzKHI9PnIuaW5jbHVkZXMoazMuSU5WQUxJRCk/azMuSU5WQUxJRDpyLmluY2x1ZGVzKGszLlZBTElE''@;'; put 'put ''KT9rMy5WQUxJRDprMy5OT05FKSxxZyhrMy5OT05FKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKG9yKGoyKSl9LG4uXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7Y2xhc3MgWnp7fWZ1bmN0aW9uIEdF''@;'; put 'put ''ZShuKXtyZXR1cm5bbix7cHJvdmlkZTpaeix1c2VFeGlzdGluZzpufV19ZnVuY3Rpb24gJEVlKG4sZSx0KXtyZXR1cm4gaG8uY3JlYXRlKHI9PntlKHIpO2NvbnN0IGk9bi5zdWJzY3JpYmUocik7cmV0dXJuKCk9PntpLnVuc3Vic2NyaWJlKCksdCYmdChyKX19KX1sZXQgR3o9KCgpPT57Y2xh''@;'; put 'put ''c3Mgbntjb25zdHJ1Y3Rvcih0LHIsaSxvLGEpe3RoaXMucmVuZGVyZXI9dCx0aGlzLnBhcmVudD1yLHRoaXMudG9nZ2xlU2VydmljZT1pLHRoaXMuZm9jdXNTZXJ2aWNlPW8sdGhpcy5wbGF0Zm9ybUlkPWEsdGhpcy5pZD1QaCgpLHRoaXMuZm9jdXNCYWNrT25UcmlnZ2VyV2hlbkNsb3NlZD0h''@;'; put 'put ''MSx0aGlzLl91bmxpc3RlbkZ1bmNzPVtdLHRoaXMucmVzZXRDaGlsZHJlbigpLHRoaXMubW92ZVRvRmlyc3RJdGVtV2hlbk9wZW4oKSxyfHx0aGlzLmhhbmRsZVJvb3RGb2N1cygpfWdldCB0cmlnZ2VyKCl7cmV0dXJuIHRoaXMuX3RyaWdnZXJ9c2V0IHRyaWdnZXIodCl7dGhpcy5fdHJpZ2dl''@;'; put 'put ''cj10LHRoaXMucGFyZW50P3RoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3Rlbih0LCJrZXlkb3duLmFycm93cmlnaHQiLHI9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQocikpKToodGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVy''@;'; put 'put ''ZXIubGlzdGVuKHQsImtleWRvd24uYXJyb3d1cCIscj0+dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChyKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3Rlbih0LCJrZXlkb3duLmFycm93ZG93biIscj0+dGhpcy50b2dnbGVTZXJ2aWNlLnRv''@;'; put 'put ''Z2dsZVdpdGhFdmVudChyKSkpLHRoaXMuZm9jdXNTZXJ2aWNlLmxpc3RlblRvQXJyb3dLZXlzKHQpKX1nZXQgY29udGFpbmVyKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn1zZXQgY29udGFpbmVyKHQpe3RoaXMuX2NvbnRhaW5lcj10LHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJl''@;'; put 'put ''bmRlcmVyLmxpc3Rlbih0LCJrZXlkb3duLnRhYiIscj0+dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChyKSkpLHRoaXMucGFyZW50P3RoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3Rlbih0LCJrZXlkb3duLmVzY2FwZSIscj0+e3RoaXMuZm9jdXNT''@;'; put 'put ''ZXJ2aWNlLm1vdmUoRHAuTEVGVCksci5zdG9wUHJvcGFnYXRpb24oKX0pKToodGhpcy5mb2N1c1NlcnZpY2UucmVnaXN0ZXJDb250YWluZXIodCksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHQsImtleWRvd24uZXNjYXBlIixyPT50aGlzLnRvZ2dsZVNl''@;'; put 'put ''cnZpY2UudG9nZ2xlV2l0aEV2ZW50KHIpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHQsImJsdXIiLHI9Pnt0aGlzLmNoaWxkcmVuLnBpcGUoTXAoMSkpLnN1YnNjcmliZShvPT5vLmZvckVhY2goYT0+YS5ibHVyKCkpKTtjb25zdCBpPXIucmVsYXRl''@;'; put 'put ''ZFRhcmdldHx8ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtpJiZIYyh0aGlzLnBsYXRmb3JtSWQpJiYodC5jb250YWlucyhpKXx8aT09PXRoaXMudHJpZ2dlcil8fCh0aGlzLmZvY3VzQmFja09uVHJpZ2dlcldoZW5DbG9zZWQ9ITEsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfSkpKX1uZ09u''@;'; put 'put ''RGVzdHJveSgpe3RoaXMuX3VubGlzdGVuRnVuY3MuZm9yRWFjaCh0PT50KCkpLHRoaXMuZm9jdXNTZXJ2aWNlLmRldGFjaExpc3RlbmVycygpfW1vdmVUb0ZpcnN0SXRlbVdoZW5PcGVuKCl7Y29uc3QgdD10aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUocj0+e3ImJnRo''@;'; put 'put ''aXMudG9nZ2xlU2VydmljZS5vcmlnaW5hbEV2ZW50JiZzZXRUaW1lb3V0KCgpPT57dGhpcy5mb2N1c1NlcnZpY2UubW92ZVRvKHRoaXMpLHRoaXMuZm9jdXNTZXJ2aWNlLm1vdmUodGhpcy5wYXJlbnQ/RHAuUklHSFQ6RHAuRE9XTil9KX0pO3RoaXMuX3VubGlzdGVuRnVuY3MucHVzaCgoKT0+''@;'; put 'put ''dC51bnN1YnNjcmliZSgpKX1oYW5kbGVSb290Rm9jdXMoKXtjb25zdCB0PXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShyPT57cnx8KHRoaXMuZm9jdXNTZXJ2aWNlLnJlc2V0KHRoaXMpLHRoaXMuZm9jdXNCYWNrT25UcmlnZ2VyV2hlbkNsb3NlZCYmdGhpcy5mb2N1''@;'; put 'put ''cygpKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlcldoZW5DbG9zZWQ9cn0pO3RoaXMuX3VubGlzdGVuRnVuY3MucHVzaCgoKT0+dC51bnN1YnNjcmliZSgpKX1mb2N1cygpe3RoaXMudHJpZ2dlciYmSGModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50cmlnZ2VyLmZvY3VzKCl9Ymx1cigpe3RoaXMu''@;'; put 'put ''dHJpZ2dlciYmSGModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50cmlnZ2VyLmJsdXIoKX1hY3RpdmF0ZSgpe0hjKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudHJpZ2dlci5jbGljaygpfXJlc2V0Q2hpbGRyZW4oKXt0aGlzLmNoaWxkcmVuPW5ldyBkRCgxKSx0aGlzLnBhcmVudD90aGlzLnJpZ2h0''@;'; put 'put ''PXRoaXMub3BlbkFuZEdldENoaWxkcmVuKCkucGlwZShFcyh0PT50WzBdKSk6KHRoaXMuZG93bj10aGlzLm9wZW5BbmRHZXRDaGlsZHJlbigpLnBpcGUoRXModD0+dFswXSkpLHRoaXMudXA9dGhpcy5vcGVuQW5kR2V0Q2hpbGRyZW4oKS5waXBlKEVzKHQ9PnRbdC5sZW5ndGgtMV0pKSl9YWRk''@;'; put 'put ''Q2hpbGRyZW4odCl7em9lLmxpbmtWZXJ0aWNhbCh0KSx0aGlzLnBhcmVudCYmem9lLmxpbmtQYXJlbnQodCx0aGlzLmNsb3NlQW5kR2V0VGhpcygpLERwLkxFRlQpLHRoaXMuY2hpbGRyZW4ubmV4dCh0KX1vcGVuQW5kR2V0Q2hpbGRyZW4oKXtyZXR1cm4gJEVlKHRoaXMuY2hpbGRyZW4sKCk9''@;'; put 'put ''PnRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwKX1jbG9zZUFuZEdldFRoaXMoKXtyZXR1cm4gJEVlKFBhKHRoaXMpLCgpPT50aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKG9yKE50KSxvcihuLDEyKSxv''@;'; put 'put ''cihLdSksb3IoT0QpLG9yKGxkKSl9LG4uXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7Y29uc3QgQnZ0PUdFZShHeik7bGV0IEZEPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9jaGFuZ2VzPW5ldyBNcn1nZXQgY2hhbmdlcygpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWNsb3NlTWVudXMoKXt0aGlzLl9jaGFuZ2VzLm5leHQoITEpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9''@;'; put 'put ''KSxufSkoKTtjb25zdCBVdnQ9e3Byb3ZpZGU6RkQsdXNlRmFjdG9yeTpmdW5jdGlvbiBqdnQobil7cmV0dXJuIG58fG5ldyBGRH0sZGVwczpbW25ldyB3OCxuZXcgcW0sRkRdXX07bGV0IG83PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxyLGksbyxhKXt0aGlzLnBhcmVudD10LHRoaXMu''@;'; put 'put ''dG9nZ2xlU2VydmljZT1yLHRoaXMuZm9jdXNIYW5kbGVyPWksdGhpcy5pc01lbnVDbG9zYWJsZT0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5jaGFuZ2VzLnN1YnNjcmliZShsPT5yLm9wZW49bCkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHIu''@;'; put 'put ''b3BlbkNoYW5nZS5zdWJzY3JpYmUoKCk9Pm8ubWFya0ZvckNoZWNrKCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHQ9PnQudW5zdWJzY3JpYmUoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKG4sMTIpLHpl''@;'; put 'put ''KEt1KSx6ZShHeiksemUoVWwpLHplKEZEKSl9LG4uXHUwMjc1Y21wPVByKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1kcm9wZG93biJdXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezImdCYmd3IoImRyb3Bkb3duIiwhMCkoIm9wZW4iLHIudG9nZ2xlU2VydmljZS5v''@;'; put 'put ''cGVuKX0saW5wdXRzOntpc01lbnVDbG9zYWJsZTpbMCwiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLCJpc01lbnVDbG9zYWJsZSJdfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltibyhbVXZ0LFVFZSxCdnRdKSx6ZyhbaTddKV0sbmdDb250ZW50U2VsZWN0b3JzOmVzLGRlY2xzOjEsdmFyczow''@;'; put 'put ''LHRlbXBsYXRlOmZ1bmN0aW9uKHQscil7MSZ0JiYoZm8oKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpO3ZhciBBaT1mdW5jdGlvbihuKXtyZXR1cm4gbltuLlJJR0hUX0NFTlRFUj0wXT0iUklHSFRfQ0VOVEVSIixuW24uUklHSFRfVE9QPTFdPSJSSUdIVF9UT1AiLG5bbi5SSUdI''@;'; put 'put ''VF9CT1RUT009Ml09IlJJR0hUX0JPVFRPTSIsbltuLlRPUF9DRU5URVI9M109IlRPUF9DRU5URVIiLG5bbi5UT1BfUklHSFQ9NF09IlRPUF9SSUdIVCIsbltuLlRPUF9MRUZUPTVdPSJUT1BfTEVGVCIsbltuLkJPVFRPTV9DRU5URVI9Nl09IkJPVFRPTV9DRU5URVIiLG5bbi5CT1RUT01fUklH''@;'; put 'put ''SFQ9N109IkJPVFRPTV9SSUdIVCIsbltuLkJPVFRPTV9MRUZUPThdPSJCT1RUT01fTEVGVCIsbltuLkxFRlRfQ0VOVEVSPTldPSJMRUZUX0NFTlRFUiIsbltuLkxFRlRfVE9QPTEwXT0iTEVGVF9UT1AiLG5bbi5MRUZUX0JPVFRPTT0xMV09IkxFRlRfQk9UVE9NIixufShBaXx8e30pO2NsYXNz''@;'; put 'put ''IFl2dHtjb25zdHJ1Y3RvcihlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLmJvdW5kT25TY3JvbGxMaXN0ZW5lcj10aGlzLmVtaXRTY3JvbGxFdmVudC5iaW5kKHRoaXMpLHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRzPVtdLGUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixlLnN0eWxlLnRvcD0wLGUu''@;'; put 'put ''c3R5bGUuYm90dG9tPSJhdXRvIixlLnN0eWxlLmxlZnQ9MCxlLnN0eWxlLnJpZ2h0PSJhdXRvIn1hbmNob3IoZSx0LHIse29mZnNldFg6aT0wLG9mZnNldFk6bz0wLHVzZUFuY2hvclBhcmVudDphPSExfT17fSl7dGhpcy5hZGRTY3JvbGxFdmVudExpc3RlbmVycyhlKSxhJiYoZT1lLnBhcmVu''@;'; put 'put ''dE5vZGUpLGUuc3R5bGUucG9zaXRpb249InN0YXRpYyI7Y29uc3QgbD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHU9dGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBnPWwubGVmdC11LmxlZnQraSxFPWwudG9wLXUudG9wK287c3dpdGNoKHQpe2Nhc2UgQWkuTEVG''@;'; put 'put ''VF9UT1A6Y2FzZSBBaS5UT1BfTEVGVDpicmVhaztjYXNlIEFpLlRPUF9DRU5URVI6Zys9bC53aWR0aC8yO2JyZWFrO2Nhc2UgQWkuVE9QX1JJR0hUOmNhc2UgQWkuUklHSFRfVE9QOmcrPWwud2lkdGg7YnJlYWs7Y2FzZSBBaS5MRUZUX0JPVFRPTTpjYXNlIEFpLkJPVFRPTV9MRUZUOkUrPWwu''@;'; put 'put ''aGVpZ2h0O2JyZWFrO2Nhc2UgQWkuQk9UVE9NX0NFTlRFUjpFKz1sLmhlaWdodCxnKz1sLndpZHRoLzI7YnJlYWs7Y2FzZSBBaS5CT1RUT01fUklHSFQ6Y2FzZSBBaS5SSUdIVF9CT1RUT006RSs9bC5oZWlnaHQsZys9bC53aWR0aDticmVhaztjYXNlIEFpLkxFRlRfQ0VOVEVSOkUrPWwuaGVp''@;'; put 'put ''Z2h0LzI7YnJlYWs7Y2FzZSBBaS5SSUdIVF9DRU5URVI6RSs9bC5oZWlnaHQvMixnKz1sLndpZHRofXN3aXRjaChyKXtjYXNlIEFpLkxFRlRfVE9QOmNhc2UgQWkuVE9QX0xFRlQ6YnJlYWs7Y2FzZSBBaS5UT1BfQ0VOVEVSOmctPXUud2lkdGgvMjticmVhaztjYXNlIEFpLlRPUF9SSUdIVDpj''@;'; put 'put ''YXNlIEFpLlJJR0hUX1RPUDpnLT11LndpZHRoO2JyZWFrO2Nhc2UgQWkuTEVGVF9CT1RUT006Y2FzZSBBaS5CT1RUT01fTEVGVDpFLT11LmhlaWdodDticmVhaztjYXNlIEFpLkJPVFRPTV9DRU5URVI6RS09dS5oZWlnaHQsZy09dS53aWR0aC8yO2JyZWFrO2Nhc2UgQWkuQk9UVE9NX1JJR0hU''@;'; put 'put ''OmNhc2UgQWkuUklHSFRfQk9UVE9NOkUtPXUuaGVpZ2h0LGctPXUud2lkdGg7YnJlYWs7Y2FzZSBBaS5MRUZUX0NFTlRFUjpFLT11LmhlaWdodC8yO2JyZWFrO2Nhc2UgQWkuUklHSFRfQ0VOVEVSOkUtPXUuaGVpZ2h0LzIsZy09dS53aWR0aH1jb25zdCBPPWdldENvbXB1dGVkU3R5bGUodGhp''@;'; put 'put ''cy5lbGVtZW50KSxaPXBhcnNlSW50KE8ubWFyZ2luTGVmdCwxMCksZWU9cGFyc2VJbnQoTy5tYXJnaW5SaWdodCwxMCksdmU9cGFyc2VJbnQoTy5tYXJnaW5Ub3AsMTApLE1lPXBhcnNlSW50KE8ubWFyZ2luQm90dG9tLDEwKTtzd2l0Y2godCl7Y2FzZSBBaS5MRUZUX1RPUDpjYXNlIEFpLlRP''@;'; put 'put ''UF9MRUZUOmNhc2UgQWkuVE9QX1JJR0hUOmNhc2UgQWkuUklHSFRfVE9QOihyPT09QWkuQk9UVE9NX1JJR0hUfHxyPT09QWkuUklHSFRfQk9UVE9NKSYmKEUtPU1lLGctPWVlKSwocj09PUFpLkJPVFRPTV9MRUZUfHxyPT09QWkuTEVGVF9CT1RUT00pJiYoRS09dmUsZys9WiksKHI9PT1BaS5U''@;'; put 'put ''T1BfTEVGVHx8cj09PUFpLkxFRlRfVE9QKSYmKEUrPXZlLGcrPVopLChyPT09QWkuVE9QX1JJR0hUfHxyPT09QWkuUklHSFRfVE9QKSYmKEUrPXZlLGctPWVlKTticmVhaztjYXNlIEFpLkxFRlRfQk9UVE9NOmNhc2UgQWkuQk9UVE9NX0xFRlQ6Y2FzZSBBaS5CT1RUT01fUklHSFQ6Y2FzZSBB''@;'; put 'put ''aS5SSUdIVF9CT1RUT006KHI9PT1BaS5CT1RUT01fTEVGVHx8cj09PUFpLkxFRlRfQk9UVE9NKSYmKEUtPU1lLGcrPVopLChyPT09QWkuQk9UVE9NX1JJR0hUfHxyPT09QWkuUklHSFRfQk9UVE9NKSYmKEUtPU1lLGctPWVlKSwocj09PUFpLlRPUF9MRUZUfHxyPT09QWkuTEVGVF9UT1ApJiYo''@;'; put 'put ''RSs9dmUsZys9WiksKHI9PT1BaS5UT1BfUklHSFR8fHI9PT1BaS5SSUdIVF9UT1ApJiYoRSs9dmUsZy09ZWUpO2JyZWFrO2Nhc2UgQWkuVE9QX0NFTlRFUjpFLT1NZSxnKz1aLGctPWVlO2JyZWFrO2Nhc2UgQWkuQk9UVE9NX0NFTlRFUjpFKz12ZSxnKz1aLGctPWVlO2JyZWFrO2Nhc2UgQWku''@;'; put 'put ''TEVGVF9DRU5URVI6RSs9dmUsRS09TWUsZy09ZWU7YnJlYWs7Y2FzZSBBaS5SSUdIVF9DRU5URVI6RSs9dmUsRS09TWUsZys9Wn1yZXR1cm4gdGhpcy5lbGVtZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWCgke01hdGgucm91bmQoZyl9cHgpIHRyYW5zbGF0ZVkoJHtNYXRoLnJvdW5k''@;'; put 'put ''KEUpfXB4KWAsdGhpcy5fc2Nyb2xsLmFzT2JzZXJ2YWJsZSgpfXJlbGVhc2UoKXt0aGlzLmVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPSIiLHRoaXMucmVtb3ZlU2Nyb2xsRXZlbnRMaXN0ZW5lcnMoKX1pc1Bvc2l0aW9uZWQoZSl7Y29uc3QgdD1nZXRDb21wdXRlZFN0eWxlKGUpLnBvc2l0aW9u''@;'; put 'put ''O3JldHVybiJyZWxhdGl2ZSI9PT10fHwiYWJzb2x1dGUiPT09dHx8ImZpeGVkIj09PXR9ZW1pdFNjcm9sbEV2ZW50KCl7dGhpcy5fc2Nyb2xsLm5leHQoKX1hZGRTY3JvbGxFdmVudExpc3RlbmVycyhlKXt0aGlzLl9zY3JvbGw9bmV3IE1yO2NvbnN0IHQ9ZTtsZXQgcj1lO2Zvcig7ciYmciE9''@;'; put 'put ''PWRvY3VtZW50JiYodGhpcy5zY3JvbGxzKHIpJiYoci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuYm91bmRPblNjcm9sbExpc3RlbmVyKSx0aGlzLnNjcm9sbGFibGVFbGVtZW50cy5wdXNoKHIpKSxyPT09dHx8IXRoaXMuaXNQb3NpdGlvbmVkKHIpKTspcj1yLnBhcmVudE5vZGV9''@;'; put 'put ''cmVtb3ZlU2Nyb2xsRXZlbnRMaXN0ZW5lcnMoKXtmb3IoY29uc3QgZSBvZiB0aGlzLnNjcm9sbGFibGVFbGVtZW50cyllLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5ib3VuZE9uU2Nyb2xsTGlzdGVuZXIpO3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnRzLmxlbmd0aD0wLHRoaXMu''@;'; put 'put ''X3Njcm9sbCYmKHRoaXMuX3Njcm9sbC5jb21wbGV0ZSgpLGRlbGV0ZSB0aGlzLl9zY3JvbGwpfXNjcm9sbHMoZSl7Y29uc3QgdD1nZXRDb21wdXRlZFN0eWxlKGUpO3JldHVybiJzY3JvbGwiPT09dC5vdmVyZmxvd1h8fCJhdXRvIj09PXQub3ZlcmZsb3dYfHwic2Nyb2xsIj09PXQub3ZlcmZs''@;'; put 'put ''b3dZfHwiYXV0byI9PT10Lm92ZXJmbG93WX19Y29uc3QgUUVlPSJpcy1vZmYtc2NyZWVuIjtsZXQgWm9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxyKXt0aGlzLnBhcmVudEhvc3Q9cix0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2s9ITEsdGhpcy5wb3BvdmVyT3B0aW9ucz17fSx0aGlz''@;'; put 'put ''LnVwZGF0ZUFuY2hvcj0hMSx0aGlzLmRvY3VtZW50RVNDTGlzdGVuZXI9bnVsbCx0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2tDYWxsYmFjaz1pPT57dGhpcy5hbmNob3JFbGVtLmNvbnRhaW5zKGkudGFyZ2V0KXx8KHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX0sdGhpcy5lbD10LmdldChu''@;'; put 'put ''byksdGhpcy50b2dnbGVTZXJ2aWNlPXQuZ2V0KEt1KSx0aGlzLnJlbmRlcmVyPXQuZ2V0KE50KSx0aGlzLm5nWm9uZT10LmdldChnYSksdGhpcy5yZWY9dC5nZXQoVWwpLHRoaXMuYW5jaG9yRWxlbT1yLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3BvdmVySW5zdGFuY2U9bmV3IFl2dCh0aGlzLmVs''@;'; put 'put ''Lm5hdGl2ZUVsZW1lbnQpLHRoaXMuc3Vic2NyaXB0aW9uPXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnBpcGUocWcodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4pKS5zdWJzY3JpYmUoaT0+e2k/KHRoaXMuYW5jaG9yKCksdGhpcy5hdHRhY2hFU0NMaXN0ZW5lcigpLHRoaXMucmVuZGVy''@;'; put 'put ''ZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LFFFZSkpOih0aGlzLnJlbGVhc2UoKSx0aGlzLmRldGFjaEVTQ0xpc3RlbmVyKCksdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsUUVlKSl9KSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmKHRo''@;'; put 'put ''aXMuYW5jaG9yKCksdGhpcy5hdHRhY2hFU0NMaXN0ZW5lcigpKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnVwZGF0ZUFuY2hvciYmKHRoaXMudXBkYXRlQW5jaG9yPSExLHRoaXMucG9wb3Zlckluc3RhbmNlLmFuY2hvcih0aGlzLmFuY2hvckVsZW0sdGhpcy5hbmNob3JQb2ludCx0aGlz''@;'; put 'put ''LnBvcG92ZXJQb2ludCx0aGlzLnBvcG92ZXJPcHRpb25zKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX0pLHRoaXMuYXR0YWNoT3V0c2lkZUNsaWNrTGlzdGVuZXIoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbGVhc2UoKSx0aGlzLmRldGFjaEVTQ0xpc3RlbmVy''@;'; put 'put ''KCksdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1hbmNob3IoKXt0aGlzLnVwZGF0ZUFuY2hvcj0hMH1yZWxlYXNlKCl7dGhpcy5kZXRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpLHRoaXMucG9wb3Zlckluc3RhbmNlLnJlbGVhc2UoKX1hdHRhY2hFU0NMaXN0ZW5lcigpe3RoaXMu''@;'; put 'put ''cG9wb3Zlck9wdGlvbnMuaWdub3JlR2xvYmFsRVNDTGlzdGVuZXJ8fHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKCJkb2N1bWVudCIsImtleWRvd24iLHQ9Pnt0JiZ0LmtleSYmdG0odC5rZXkp''@;'; put 'put ''PT09TW8uRXNjYXBlJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKX0pfSl9KX1kZXRhY2hFU0NMaXN0ZW5lcigpe3RoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lciYmKHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcigp''@;'; put 'put ''LHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcj1udWxsKX1hdHRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpe3RoaXMuY2xvc2VPbk91dHNpZGVDbGljayYmdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJmRvY3VtZW50JiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyJiZkb2N1bWVudC5hZGRFdmVu''@;'; put 'put ''dExpc3RlbmVyKCJjbGljayIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2ssITApfWRldGFjaE91dHNpZGVDbGlja0xpc3RlbmVyKCl7dGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrJiZkb2N1bWVudCYmZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZG9jdW1lbnQucmVtb3Zl''@;'; put 'put ''RXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuY2xvc2VPbk91dHNpZGVDbGlja0NhbGxiYWNrLCEwKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoTWwpLHplKG5vLDQpKX0sbi5cdTAyNzVkaXI9JHIoe3R5cGU6bixzdGFuZGFsb25lOiExfSks''@;'; put 'put ''bn0pKCksamI9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFpvZXtjb25zdHJ1Y3Rvcih0LHIsaSxvKXtpZighcil0aHJvdyBuZXcgRXJyb3IoImNsci1kcm9wZG93bi1tZW51IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRyb3Bkb3duIik7c3VwZXIodCxyKSxpPyh0aGlzLmFu''@;'; put 'put ''Y2hvclBvaW50PUFpLlJJR0hUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX1RPUCk6KHRoaXMuYW5jaG9yUG9pbnQ9QWkuQk9UVE9NX0xFRlQsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuTEVGVF9UT1ApLHRoaXMucG9wb3Zlck9wdGlvbnMuYWxsb3dNdWx0aXBsZU9wZW49ITAsdGhpcy5w''@;'; put 'put ''b3BvdmVyT3B0aW9ucy5pZ25vcmVHbG9iYWxFU0NMaXN0ZW5lcj0hMCx0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2s9ITAsdGhpcy5mb2N1c0hhbmRsZXI9b31zZXQgcG9zaXRpb24odCl7c3dpdGNoKHQpe2Nhc2UidG9wLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUFpLlRPUF9SSUdIVCx0aGlz''@;'; put 'put ''LnBvcG92ZXJQb2ludD1BaS5SSUdIVF9CT1RUT007YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6dGhpcy5hbmNob3JQb2ludD1BaS5UT1BfTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX0JPVFRPTTticmVhaztjYXNlImJvdHRvbS1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1BaS5CT1RUT01f''@;'; put 'put ''UklHSFQsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfVE9QO2JyZWFrO2Nhc2UiYm90dG9tLWxlZnQiOmRlZmF1bHQ6dGhpcy5hbmNob3JQb2ludD1BaS5CT1RUT01fTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX1RPUDticmVhaztjYXNlInJpZ2h0LXRvcCI6dGhpcy5hbmNob3JQ''@;'; put 'put ''b2ludD1BaS5SSUdIVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuTEVGVF9UT1A7YnJlYWs7Y2FzZSJyaWdodC1ib3R0b20iOnRoaXMuYW5jaG9yUG9pbnQ9QWkuUklHSFRfQk9UVE9NLHRoaXMucG9wb3ZlclBvaW50PUFpLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UibGVmdC10b3AiOnRoaXMu''@;'; put 'put ''YW5jaG9yUG9pbnQ9QWkuTEVGVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfVE9QO2JyZWFrO2Nhc2UibGVmdC1ib3R0b20iOnRoaXMuYW5jaG9yUG9pbnQ9QWkuTEVGVF9CT1RUT00sdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfQk9UVE9NfX1uZ0FmdGVyQ29udGVudEluaXQo''@;'; put 'put ''KXt0aGlzLmZvY3VzSGFuZGxlci5jb250YWluZXI9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMuaXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMuZm9jdXNIYW5kbGVyLmFkZENoaWxkcmVuKHRoaXMuaXRlbXMudG9BcnJheSgpKSksdGhpcy5pdGVtcy5ub3RpZnlPbkNoYW5nZXMo''@;'; put 'put ''KX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5mb2N1c0hhbmRsZXIucmVzZXRDaGlsZHJlbigpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShNbCksemUoVXosOCksemUobiwxMiksemUoR3opKX0sbi5cdTAyNzVjbXA9''@;'; put 'put ''UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWRyb3Bkb3duLW1lbnUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24odCxyLGkpe2lmKDEmdCYmRmEoaSxaeiw0KSwyJnQpe2xldCBvO2NpKG89dWkoKSkmJihyLml0ZW1zPW8pfX0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24o''@;'; put 'put ''dCxyKXsyJnQmJihScigicm9sZSIsIm1lbnUiKSx3cigiZHJvcGRvd24tbWVudSIsITApKX0saW5wdXRzOntwb3NpdGlvbjpbMCwiY2xyUG9zaXRpb24iLCJwb3NpdGlvbiJdfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltGb10sbmdDb250ZW50U2VsZWN0b3JzOmVzLGRlY2xzOjEsdmFyczow''@;'; put 'put ''LHRlbXBsYXRlOmZ1bmN0aW9uKHQscil7MSZ0JiYoZm8oKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFViPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxyLGksbyl7dGhpcy50b2dnbGVTZXJ2aWNlPXIsdGhpcy5pc1Jvb3RMZXZlbFRvZ2dsZT0hMCx0LnBhcmVudCYmKHRo''@;'; put 'put ''aXMuaXNSb290TGV2ZWxUb2dnbGU9ITEpLG8udHJpZ2dlcj1pLm5hdGl2ZUVsZW1lbnR9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1vbkRyb3Bkb3duVHJpZ2dlckNsaWNrKHQpe3RoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQodCl9fXJldHVy''@;'; put 'put ''biBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKG83KSx6ZShLdSksemUobm8pLHplKEd6KSl9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNsckRyb3Bkb3duVHJpZ2dlciIsIiJdLFsiIiwiY2xyRHJvcGRvd25Ub2dnbGUiLCIiXV0s''@;'; put 'put ''aG9zdFZhcnM6MTAsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHQscil7MSZ0JiZ3dCgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiByLm9uRHJvcGRvd25UcmlnZ2VyQ2xpY2sobyl9KSwyJnQmJihScigiYXJpYS1oYXNwb3B1cCIsIm1lbnUiKSgiYXJpYS1leHBhbmRlZCIsci5hY3RpdmUpLHdy''@;'; put 'put ''KCJkcm9wZG93bi10b2dnbGUiLHIuaXNSb290TGV2ZWxUb2dnbGUpKCJkcm9wZG93bi1pdGVtIiwhci5pc1Jvb3RMZXZlbFRvZ2dsZSkoImV4cGFuZGFibGUiLCFyLmlzUm9vdExldmVsVG9nZ2xlKSgiYWN0aXZlIixyLmFjdGl2ZSkpfSxzdGFuZGFsb25lOiExfSksbn0pKCk7Y29uc3QgWnZ0''@;'; put 'put ''PVt7cHJvdmlkZTpaeix1c2VDbGFzczooKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscixpKXt0aGlzLmVsPXQsdGhpcy5yZW5kZXJlcj1yLHRoaXMucGxhdGZvcm1JZD1pLHRoaXMuaWQ9UGgoKSx0aGlzLmRpc2FibGVkPSExLHIuc2V0QXR0cmlidXRlKHQubmF0aXZlRWxlbWVudCwiaWQi''@;'; put 'put ''LHRoaXMuaWQpLHIuc2V0QXR0cmlidXRlKHQubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCItMSIpfWZvY3VzKCl7SGModGhpcy5wbGF0Zm9ybUlkKSYmKHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCIwIiksdGhpcy5lbC5uYXRp''@;'; put 'put ''dmVFbGVtZW50LmZvY3VzKCksdGhpcy5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjoic21vb3RoIixibG9jazoibmVhcmVzdCIsaW5saW5lOiJuZWFyZXN0In0pKX1ibHVyKCl7SGModGhpcy5wbGF0Zm9ybUlkKSYmKHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRl''@;'; put 'put ''KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCItMSIpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5ibHVyKCkpfWFjdGl2YXRlKCl7SGModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsaWNrKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXty''@;'; put 'put ''ZXR1cm4gbmV3KHR8fG4pKG9yKG5vKSxvcihOdCksb3IobGQpKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKX1dO2xldCBwTT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscixpKXt0aGlzLmRyb3Bkb3duPXQsdGhpcy5fZHJvcGRvd25T''@;'; put 'put ''ZXJ2aWNlPXIsdGhpcy5mb2N1c2FibGVJdGVtPWl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZH1zZXQgZGlzYWJsZWQodCl7dGhpcy5mb2N1c2FibGVJdGVtLmRpc2FibGVkPSEhdHx8IiI9PT10fWdldCBkcm9wZG93bkl0ZW1JZCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmZvY3VzYWJsZUl0ZW0uaWR9c2V0IGRyb3Bkb3duSXRlbUlkKHQpe3RoaXMuZm9jdXNhYmxlSXRlbS5pZD10fW9uRHJvcGRvd25JdGVtQ2xpY2soKXtpZih0aGlzLmRyb3Bkb3duLmlzTWVudUNsb3NhYmxlJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5kcm9wZG93bi50b2dnbGVTZXJ2aWNl''@;'; put 'put ''Lm9wZW4pe2NvbnN0IHQ9dGhpcy5maW5kUm9vdERyb3Bkb3duKCk7dC5mb2N1c0hhbmRsZXIuZm9jdXMoKSx0LmZvY3VzSGFuZGxlci5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkPSExfXNldFRpbWVvdXQoKCk9Pnt0aGlzLmRyb3Bkb3duLmlzTWVudUNsb3NhYmxlJiYhdGhpcy5kaXNh''@;'; put 'put ''YmxlZCYmdGhpcy5fZHJvcGRvd25TZXJ2aWNlLmNsb3NlTWVudXMoKX0pfW9uU3BhY2VLZXlkb3duKHQpe3RoaXMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uSWZEaXNhYmxlZCh0KX1vbkVudGVyS2V5ZG93bih0KXt0aGlzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQodCl9''@;'; put 'put ''c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uSWZEaXNhYmxlZCh0KXt0aGlzLmRpc2FibGVkJiYodC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfWZpbmRSb290RHJvcGRvd24oKXtsZXQgdD10aGlzLmRyb3Bkb3duO2Zvcig7dC5wYXJlbnQ7KXQ9dC5wYXJl''@;'; put 'put ''bnQ7cmV0dXJuIHR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKG83KSx6ZShGRCksemUoWnopKX0sbi5cdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2xyRHJvcGRvd25JdGVtIiwiIl1dLGhvc3RWYXJzOjcsaG9zdEJpbmRp''@;'; put 'put ''bmdzOmZ1bmN0aW9uKHQscil7MSZ0JiZ3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHIub25Ecm9wZG93bkl0ZW1DbGljaygpfSkoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKG8pe3JldHVybiByLm9uU3BhY2VLZXlkb3duKG8pfSkoImtleWRvd24uZW50ZXIiLGZ1bmN0aW9uKG8pe3Jl''@;'; put 'put ''dHVybiByLm9uRW50ZXJLZXlkb3duKG8pfSksMiZ0JiYoUnIoInJvbGUiLCJtZW51aXRlbSIpKCJhcmlhLWRpc2FibGVkIixyLmRpc2FibGVkKSgiaWQiLHIuZHJvcGRvd25JdGVtSWQpLHdyKCJkaXNhYmxlZCIsci5kaXNhYmxlZCkoImRyb3Bkb3duLWl0ZW0iLCEwKSl9LGlucHV0czp7ZGlz''@;'; put 'put ''YWJsZWQ6WzAsImNsckRpc2FibGVkIiwiZGlzYWJsZWQiXSxkcm9wZG93bkl0ZW1JZDpbMCwiaWQiLCJkcm9wZG93bkl0ZW1JZCJdfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltibyhbWnZ0XSldfSksbn0pKCksR29lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3FvLHJtLFdsXX0pLG59KSgpLCRvZT0oKCk9PntjbGFzcyBue3NldCB0cmlnZ2VyRWwodCl7dGhpcy5fdHJpZ2dlckVsPXR9Zm9jdXNUcmlnZ2VyKCl7dGhpcy5f''@;'; put 'put ''dHJpZ2dlckVsJiZ0aGlzLl90cmlnZ2VyRWwuZm9jdXMoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCkscW9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0''@;'; put 'put ''b3IoKXt0aGlzLl9pZD1uZXcgTXJ9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkLmFzT2JzZXJ2YWJsZSgpfXNldElkKHQpe3RoaXMuX2lkLm5leHQodCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFj''@;'; put 'put ''dG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLCR6PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxyLGksbyxhLGwpe3RoaXMudG9nZ2xlU2VydmljZT10LHRoaXMuZWw9cix0aGlzLnNpZ25wb3N0SWRTZXJ2aWNlPWksdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlcj1vLHRoaXMucGxhdGZvcm1J''@;'; put 'put ''ZD1sLHRoaXMuYXJpYUV4cGFuZGVkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmRvY3VtZW50PWF9bmdPbkluaXQoKXt0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyLnRyaWdnZXJFbD10aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50b2dn''@;'; put 'put ''bGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKHQ9Pnt0aGlzLmFyaWFFeHBhbmRlZD10O2NvbnN0IHI9dGhpcy5pc09wZW47dGhpcy5pc09wZW49dCwhdGhpcy5pc09wZW4mJnImJnRoaXMuZm9jdXNPbkNsb3NlKCl9KSx0aGlzLnNpZ25wb3N0SWRTZXJ2aWNlLmlkLnN1YnNjcmliZSh0''@;'; put 'put ''PT50aGlzLmFyaWFDb250cm9sPXQpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHQ9PnQudW5zdWJzY3JpYmUoKSl9b25TaWducG9zdFRyaWdnZXJDbGljayh0KXt0aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KHQpfWZvY3VzT25DbG9zZSgpe0hj''@;'; put 'put ''KHRoaXMucGxhdGZvcm1JZCkmJiF0aGlzLmlzT3BlbiYmdGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5kb2N1bWVudC5ib2R5JiZ0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyLmZvY3VzVHJpZ2dlcigpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5l''@;'; put 'put ''dyh0fHxuKSh6ZShLdSksemUobm8pLHplKHFvZSksemUoJG9lKSx6ZShUbCksemUobGQpKX0sbi5cdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIl1dLGhvc3RBdHRyczpbMSwic2lnbnBvc3QtdHJpZ2dlciJdLGhvc3RWYXJzOjQsaG9z''@;'; put 'put ''dEJpbmRpbmdzOmZ1bmN0aW9uKHQscil7MSZ0JiZ3dCgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiByLm9uU2lnbnBvc3RUcmlnZ2VyQ2xpY2sobyl9KSwyJnQmJihScigiYXJpYS1leHBhbmRlZCIsci5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixyLmFyaWFDb250cm9sKSx3cigi''@;'; put 'put ''YWN0aXZlIixyLmlzT3BlbikpfSxzdGFuZGFsb25lOiExfSksbn0pKCkscXo9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0KXt0aGlzLmNvbW1vblN0cmluZ3M9dCx0aGlzLnVzZUN1c3RvbVRyaWdnZXI9ITF9c2V0IGN1c3RvbVRyaWdnZXIodCl7dGhpcy51c2VDdXN0b21UcmlnZ2VyPSEh''@;'; put 'put ''dH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoaWwpKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLXNpZ25wb3N0Il1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKHQscixpKXtpZigxJnQmJkZhKGksJHosNSksMiZ0''@;'; put 'put ''KXtsZXQgbztjaShvPXVpKCkpJiYoci5jdXN0b21UcmlnZ2VyPW8uZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsyJnQmJndyKCJzaWducG9zdCIsITApfSxpbnB1dHM6e3NpZ25wb3N0VHJpZ2dlckFyaWFMYWJlbDpbMCwiY2xyU2lnbnBvc3RUcmlnZ2Vy''@;'; put 'put ''QXJpYUxhYmVsIiwic2lnbnBvc3RUcmlnZ2VyQXJpYUxhYmVsIl19LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2JvKFskb2UscW9lXSksemcoW2k3XSldLG5nQ29udGVudFNlbGVjdG9yczplcyxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xy''@;'; put 'put ''U2lnbnBvc3RUcmlnZ2VyIiwiIiwxLCJzaWducG9zdC1hY3Rpb24iLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1saW5rIl0sWyJzaGFwZSIsImluZm8tY2lyY2xlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHQscil7MSZ0JiYoZm8oKSxZbigwLEo0dCwzLDIsIm5nLWNvbnRhaW5lciIs''@;'; put 'put ''MCksV3IoMSkpLDImdCYmcnQoIm5nSWYiLCFyLnVzZUN1c3RvbVRyaWdnZXIpfSxkZXBlbmRlbmNpZXM6W1lzLEpzLCR6XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKTtjb25zdCBHdnQ9eyJ0b3AtbGVmdCI6e2FuY2hvclBvaW50OkFpLlRPUF9DRU5URVIscG9wb3ZlclBvaW50OkFpLkJPVFRP''@;'; put 'put ''TV9SSUdIVCxvZmZzZXRZOi0xNixvZmZzZXRYOjB9LCJ0b3AtbWlkZGxlIjp7YW5jaG9yUG9pbnQ6QWkuVE9QX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuQk9UVE9NX0NFTlRFUixvZmZzZXRZOi0xNixvZmZzZXRYOjB9LCJ0b3AtcmlnaHQiOnthbmNob3JQb2ludDpBaS5UT1BfQ0VOVEVSLHBv''@;'; put 'put ''cG92ZXJQb2ludDpBaS5CT1RUT01fTEVGVCxvZmZzZXRZOi0xNixvZmZzZXRYOjB9LCJyaWdodC10b3AiOnthbmNob3JQb2ludDpBaS5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50OkFpLkxFRlRfQk9UVE9NLG9mZnNldFk6MCxvZmZzZXRYOjE2fSwicmlnaHQtbWlkZGxlIjp7YW5jaG9yUG9p''@;'; put 'put ''bnQ6QWkuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5MRUZUX0NFTlRFUixvZmZzZXRZOjAsb2Zmc2V0WDoxNn0sInJpZ2h0LWJvdHRvbSI6e2FuY2hvclBvaW50OkFpLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuTEVGVF9UT1Asb2Zmc2V0WTowLG9mZnNldFg6MTZ9LCJib3R0''@;'; put 'put ''b20tcmlnaHQiOnthbmNob3JQb2ludDpBaS5CT1RUT01fQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5UT1BfTEVGVCxvZmZzZXRZOjE2LG9mZnNldFg6MH0sImJvdHRvbS1taWRkbGUiOnthbmNob3JQb2ludDpBaS5CT1RUT01fQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5UT1BfQ0VOVEVSLG9mZnNl''@;'; put 'put ''dFk6MTYsb2Zmc2V0WDowfSwiYm90dG9tLWxlZnQiOnthbmNob3JQb2ludDpBaS5CT1RUT01fQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5UT1BfUklHSFQsb2Zmc2V0WToxNixvZmZzZXRYOjB9LCJsZWZ0LWJvdHRvbSI6e2FuY2hvclBvaW50OkFpLkxFRlRfQ0VOVEVSLHBvcG92ZXJQb2ludDpB''@;'; put 'put ''aS5SSUdIVF9UT1Asb2Zmc2V0WTowLG9mZnNldFg6LTE2fSwibGVmdC1taWRkbGUiOnthbmNob3JQb2ludDpBaS5MRUZUX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuUklHSFRfQ0VOVEVSLG9mZnNldFk6MCxvZmZzZXRYOi0xNn0sImxlZnQtdG9wIjp7YW5jaG9yUG9pbnQ6QWkuTEVGVF9DRU5U''@;'; put 'put ''RVIscG9wb3ZlclBvaW50OkFpLlJJR0hUX0JPVFRPTSxvZmZzZXRZOjAsb2Zmc2V0WDotMTZ9LGRlZmF1bHQ6e2FuY2hvclBvaW50OkFpLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuTEVGVF9DRU5URVIsb2Zmc2V0WTowLG9mZnNldFg6MTZ9fSwkdnQ9WyJ0b3AtbGVmdCIsInRvcC1t''@;'; put 'put ''aWRkbGUiLCJ0b3AtcmlnaHQiLCJyaWdodC10b3AiLCJyaWdodC1taWRkbGUiLCJyaWdodC1ib3R0b20iLCJib3R0b20tcmlnaHQiLCJib3R0b20tbWlkZGxlIiwiYm90dG9tLWxlZnQiLCJsZWZ0LWJvdHRvbSIsImxlZnQtbWlkZGxlIiwibGVmdC10b3AiXTtsZXQgSkVlPSgoKT0+e2NsYXNz''@;'; put 'put ''IG4gZXh0ZW5kcyBab2V7Y29uc3RydWN0b3IodCxyLGksbyxhLGwsdSl7aWYoc3VwZXIodCxyKSx0aGlzLmNvbW1vblN0cmluZ3M9aSx0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyPWEsdGhpcy5wbGF0Zm9ybUlkPWwsdGhpcy5zaWducG9zdENvbnRlbnRJZD1QaCgpLCFyKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiY2xyLXNpZ25wb3N0LWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItc2lnbnBvc3QiKTt0aGlzLnBvc2l0aW9uPSJyaWdodC1taWRkbGUiLHRoaXMuY2xvc2VPbk91dHNpZGVDbGljaz0hMCxvLnNldElkKHRoaXMuc2lnbnBvc3RDb250ZW50SWQpLHRo''@;'; put 'put ''aXMuZG9jdW1lbnQ9dX1nZXQgcG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259c2V0IHBvc2l0aW9uKHQpe3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMucG9zaXRpb24pLHRoaXMuX3Bvc2l0aW9uPXQmJiR2dC5pbmRleE9mKHQpPi0x''@;'; put 'put ''P3Q6InJpZ2h0LW1pZGRsZSIsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3NpdGlvbik7Y29uc3Qgcj1HdnRbdGhpcy5wb3NpdGlvbl07dGhpcy5hbmNob3JQb2ludD1yLmFuY2hvclBvaW50LHRoaXMucG9wb3ZlclBvaW50PXIucG9wb3ZlclBv''@;'; put 'put ''aW50LHRoaXMucG9wb3Zlck9wdGlvbnMub2Zmc2V0WT1yLm9mZnNldFksdGhpcy5wb3BvdmVyT3B0aW9ucy5vZmZzZXRYPXIub2Zmc2V0WH1jbG9zZSgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSxIYyh0aGlzLnBsYXRmb3Jt''@;'; put 'put ''SWQpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KSYmdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlci5mb2N1c1RyaWdnZXIoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoTWwpLHpl''@;'; put 'put ''KFV6LDgpLHplKGlsKSx6ZShxb2UpLHplKCRvZSksemUobGQpLHplKFRsKSl9LG4uXHUwMjc1Y21wPVByKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1zaWducG9zdC1jb250ZW50Il1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHQscil7MiZ0JiYoTzUoImlkIixyLnNpZ25w''@;'; put 'put ''b3N0Q29udGVudElkKSx3cigic2lnbnBvc3QtY29udGVudCIsITApKX0saW5wdXRzOntzaWducG9zdENsb3NlQXJpYUxhYmVsOlswLCJjbHJTaWducG9zdENsb3NlQXJpYUxhYmVsIiwic2lnbnBvc3RDbG9zZUFyaWFMYWJlbCJdLHBvc2l0aW9uOlswLCJjbHJQb3NpdGlvbiIsInBvc2l0aW9u''@;'; put 'put ''Il19LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0ZvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6dDV0LGRlY2xzOjgsdmFyczozLGNvbnN0czpbWzEsInNpZ25wb3N0LXdyYXAiXSxbMSwicG9wb3Zlci1wb2ludGVyIl0sWzEsInNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIl0sWyJ0eXBlIiwiYnV0dG9u''@;'; put 'put ''IiwxLCJzaWducG9zdC1hY3Rpb24iLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl0sWyJ0YWJpbmRleCIsIjAiLDEsInNpZ25wb3N0LWNvbnRlbnQtYm9keSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpezEmdCYmKGZvKGU1dCksSigwLCJkaXYiLDApLEl0KDEs''@;'; put 'put ''ImRpdiIsMSksSigyLCJkaXYiLDIpLFdyKDMpLEooNCwiYnV0dG9uIiwzKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHIuY2xvc2UoKX0pLEl0KDUsImNkcy1pY29uIiw0KSx0ZSgpKCksSig2LCJkaXYiLDUpLFdyKDcsMSksdGUoKSgpKSwyJnQmJihpZSg0KSxScigiYXJpYS1sYWJl''@;'; put 'put ''bCIsci5zaWducG9zdENsb3NlQXJpYUxhYmVsfHxyLmNvbW1vblN0cmluZ3Mua2V5cy5zaWducG9zdENsb3NlKSgiYXJpYS1jb250cm9scyIsci5zaWducG9zdENvbnRlbnRJZCksaWUoKSxScigidGl0bGUiLHIuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKSl9LGRlcGVuZGVuY2llczpbSnNd''@;'; put 'put ''LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHF2dD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7emwuYWRkSWNvbnMoY0QsQWd0KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj1t''@;'; put 'put ''aSh7aW1wb3J0czpbcW8sV2wsV3oscm1dfSksbn0pKCksS29lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9pZD1uZXcgTXJ9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkLmFzT2JzZXJ2YWJsZSgpfXVwZGF0ZUlkKHQpe3RoaXMuX2lkLm5leHQodCl9fXJldHVybiBuLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFhvZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQpe3RoaXMudG9nZ2xlU2VydmljZT10fW9uTW91c2VFbnRlclRyaWdnZXIoKXt0''@;'; put 'put ''aGlzLm1vdXNlT3ZlclRyaWdnZXI9ITAsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITB9b25Nb3VzZUxlYXZlVHJpZ2dlcigpe3RoaXMubW91c2VPdmVyVHJpZ2dlcj0hMSx0aGlzLmhpZGVJZk1vdXNlT3V0KCl9b25Nb3VzZUVudGVyQ29udGVudCgpe3RoaXMubW91c2VPdmVyQ29udGVudD0h''@;'; put 'put ''MH1vbk1vdXNlTGVhdmVDb250ZW50KCl7dGhpcy5tb3VzZU92ZXJDb250ZW50PSExLHRoaXMuaGlkZUlmTW91c2VPdXQoKX1oaWRlSWZNb3VzZU91dCgpe3NldFRpbWVvdXQoKCk9PnshdGhpcy5tb3VzZU92ZXJUcmlnZ2VyJiYhdGhpcy5tb3VzZU92ZXJDb250ZW50JiYodGhpcy50b2dnbGVT''@;'; put 'put ''ZXJ2aWNlLm9wZW49ITEpfSwwKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikob3IoS3UpKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx3dj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLXRvb2x0aXAiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsyJnQmJndyKCJ0b29sdGlwIiwhMCl9LHN0YW5kYWxvbmU6ITEsZmVhdHVy''@;'; put 'put ''ZXM6W2JvKFtLb2UsWG9lXSksemcoW2k3XSldLG5nQ29udGVudFNlbGVjdG9yczplcyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpezEmdCYmKGZvKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKTtjb25zdCBYdnQ9WyJib3R0b20tbGVmdCIsImJvdHRvbS1y''@;'; put 'put ''aWdodCIsInRvcC1sZWZ0IiwidG9wLXJpZ2h0IiwicmlnaHQiLCJsZWZ0Il0sUXZ0PVsieHMiLCJzbSIsIm1kIiwibGciXTtsZXQgQ3Y9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFpvZXtjb25zdHJ1Y3Rvcih0LHIsaSxvKXtpZihzdXBlcih0LHIpLHRoaXMudG9vbHRpcElkU2VydmljZT1pLHRo''@;'; put 'put ''aXMudG9vbHRpcE1vdXNlU2VydmljZT1vLCFyKXRocm93IG5ldyBFcnJvcigiY2xyLXRvb2x0aXAtY29udGVudCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci10b29sdGlwIik7dGhpcy5pZD1QaCgpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQodCl7Y29uc3Qg''@;'; put 'put ''cj10fHwiIjt0aGlzLl9pZD1yLHRoaXMudG9vbHRpcElkU2VydmljZS51cGRhdGVJZChyKX1nZXQgcG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259c2V0IHBvc2l0aW9uKHQpe2NvbnN0IHI9dGhpcy5fcG9zaXRpb24saT1YdnQuaW5jbHVkZXModCk/dDoicmlnaHQiO3N3aXRjaCh0''@;'; put 'put ''aGlzLl9wb3NpdGlvbj1pLHRoaXMudXBkYXRlQ3NzQ2xhc3Moe29sZENsYXNzOmB0b29sdGlwLSR7cn1gLG5ld0NsYXNzOmB0b29sdGlwLSR7aX1gfSksaSl7Y2FzZSJ0b3AtcmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuVE9QX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX0JP''@;'; put 'put ''VFRPTTticmVhaztjYXNlInRvcC1sZWZ0Ijp0aGlzLmFuY2hvclBvaW50PUFpLlRPUF9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfQk9UVE9NO2JyZWFrO2Nhc2UiYm90dG9tLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUFpLkJPVFRPTV9DRU5URVIsdGhpcy5wb3BvdmVyUG9p''@;'; put 'put ''bnQ9QWkuTEVGVF9UT1A7YnJlYWs7Y2FzZSJib3R0b20tbGVmdCI6dGhpcy5hbmNob3JQb2ludD1BaS5CT1RUT01fQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUFpLlJJR0hUX1RPUDticmVhaztjYXNlInJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUFpLlJJR0hUX0NFTlRFUix0aGlzLnBvcG92''@;'; put 'put ''ZXJQb2ludD1BaS5MRUZUX1RPUDticmVhaztjYXNlImxlZnQiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuTEVGVF9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfVE9QO2JyZWFrO2RlZmF1bHQ6IWZ1bmN0aW9uIEt2dChuKXt0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCB2YWx1ZTog''@;'; put 'put ''JHtufWApfShpKX19Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1zZXQgc2l6ZSh0KXtjb25zdCByPXRoaXMuX3NpemUsaT1RdnQuaW5jbHVkZXModCk/dDoic20iO3RoaXMuX3NpemU9aSx0aGlzLnVwZGF0ZUNzc0NsYXNzKHtvbGRDbGFzczpgdG9vbHRpcC0ke3J9YCxuZXdDbGFzczpg''@;'; put 'put ''dG9vbHRpcC0ke2l9YH0pfW5nT25Jbml0KCl7dGhpcy5zaXplPXRoaXMuc2l6ZXx8InNtIix0aGlzLnBvc2l0aW9uPXRoaXMucG9zaXRpb258fCJyaWdodCJ9b25Nb3VzZUVudGVyKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VFbnRlckNvbnRlbnQoKX1vbk1vdXNlTGVhdmUo''@;'; put 'put ''KXt0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUxlYXZlQ29udGVudCgpfXVwZGF0ZUNzc0NsYXNzKHtvbGRDbGFzczp0LG5ld0NsYXNzOnJ9KXt0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCx0KSx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRo''@;'; put 'put ''aXMuZWwubmF0aXZlRWxlbWVudCxyKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoTWwpLHplKFV6LDgpLHplKEtvZSksemUoWG9lKSl9LG4uXHUwMjc1Y21wPVByKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci10b29sdGlwLWNvbnRlbnQiXV0s''@;'; put 'put ''aG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsxJnQmJnd0KCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiByLm9uTW91c2VFbnRlcigpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHIub25Nb3VzZUxlYXZlKCl9KSwyJnQmJihPNSgiaWQiLHIuaWQp''@;'; put 'put ''LFJyKCJyb2xlIiwidG9vbHRpcCIpLE8yKCJvcGFjaXR5IiwxKSx3cigidG9vbHRpcC1jb250ZW50IiwhMCkpfSxpbnB1dHM6e2lkOiJpZCIscG9zaXRpb246WzAsImNsclBvc2l0aW9uIiwicG9zaXRpb24iXSxzaXplOlswLCJjbHJTaXplIiwic2l6ZSJdfSxzdGFuZGFsb25lOiExLGZlYXR1''@;'; put 'put ''cmVzOltGb10sbmdDb250ZW50U2VsZWN0b3JzOmVzLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKHQscil7MSZ0JiYoZm8oKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFN2PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxyLGkpe3RoaXMudG9nZ2xlU2Vydmlj''@;'; put 'put ''ZT10LHRoaXMudG9vbHRpcE1vdXNlU2VydmljZT1pLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaChyLmlkLnN1YnNjcmliZShvPT50aGlzLmFyaWFEZXNjcmliZWRCeT1vKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnMuZm9yRWFjaCh0PT50LnVuc3Vic2NyaWJlKCkpfXNob3dUb29sdGlw''@;'; put 'put ''KCl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITB9aGlkZVRvb2x0aXAoKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX1vbk1vdXNlRW50ZXIoKXt0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUVudGVyVHJpZ2dlcigpfW9uTW91c2VMZWF2ZSgpe3RoaXMudG9vbHRpcE1vdXNl''@;'; put 'put ''U2VydmljZS5vbk1vdXNlTGVhdmVUcmlnZ2VyKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKEt1KSx6ZShLb2UpLHplKFhvZSkpfSxuLlx1MDI3NWRpcj0kcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjbHJUb29sdGlwVHJpZ2dlciIsIiJd''@;'; put 'put ''XSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezEmdCYmd3QoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiByLnNob3dUb29sdGlwKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gci5oaWRlVG9vbHRpcCgpfSkoIm1v''@;'; put 'put ''dXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHIub25Nb3VzZUVudGVyKCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gci5vbk1vdXNlTGVhdmUoKX0pLDImdCYmKFJyKCJhcmlhLWRlc2NyaWJlZGJ5IixyLmFyaWFEZXNjcmliZWRCeSkoInJvbGUiLCJidXR0b24iKSx3cigi''@;'; put 'put ''dG9vbHRpcC10cmlnZ2VyIiwhMCkpfSxzdGFuZGFsb25lOiExfSksbn0pKCksSnZ0PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3Fv''@;'; put 'put ''LHJtLFdsXX0pLG59KSgpLGVfdD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltHb2UscXZ0LEp2dF19KSxufSkoKTt2YXIgemI9ZnVu''@;'; put 'put ''Y3Rpb24obil7cmV0dXJuIG4uVkVSVElDQUw9InZlcnRpY2FsIixuLkhPUklaT05UQUw9Imhvcml6b250YWwiLG4uQ09NUEFDVD0iY29tcGFjdCIsbn0oemJ8fHt9KTtsZXQgWjU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMubWluTGFiZWxTaXplPTEsdGhpcy5tYXhMYWJlbFNp''@;'; put 'put ''emU9MTIsdGhpcy5sYXlvdXQ9emIuSE9SSVpPTlRBTCx0aGlzLmxheW91dFZhbHVlcz1PYmplY3Qua2V5cyh6YikubWFwKHQ9PnpiW3RdKSx0aGlzLl9sYWJlbFNpemU9Mn1nZXQgbGFiZWxTaXplKCl7cmV0dXJuIHRoaXMuX2xhYmVsU2l6ZX1zZXQgbGFiZWxTaXplKHQpe3RoaXMubGFiZWxT''@;'; put 'put ''aXplSXNWYWxpZCh0KSYmKHRoaXMuX2xhYmVsU2l6ZT10KX1nZXQgbGF5b3V0Q2xhc3MoKXtyZXR1cm5gY2xyLWZvcm0tJHt0aGlzLmxheW91dH1gfWlzVmVydGljYWwoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT16Yi5WRVJUSUNBTH1pc0hvcml6b250YWwoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9''@;'; put 'put ''PT16Yi5IT1JJWk9OVEFMfWlzQ29tcGFjdCgpe3JldHVybiB0aGlzLmxheW91dD09PXpiLkNPTVBBQ1R9aXNWYWxpZCh0KXtyZXR1cm4gdGhpcy5sYXlvdXRWYWx1ZXMuaW5kZXhPZih0KT4tMX1sYWJlbFNpemVJc1ZhbGlkKHQpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHQpJiZ0Pj10aGlz''@;'; put 'put ''Lm1pbkxhYmVsU2l6ZSYmdDw9dGhpcy5tYXhMYWJlbFNpemV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGVsPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0''@;'; put 'put ''b3IodCxyLGksbyxhKXt0aGlzLmNvbnRyb2xJZFNlcnZpY2U9dCx0aGlzLmxheW91dFNlcnZpY2U9cix0aGlzLm5nQ29udHJvbFNlcnZpY2U9aSx0aGlzLnJlbmRlcmVyPW8sdGhpcy5lbD1hLHRoaXMuZW5hYmxlR3JpZD0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W119Z2V0IGxhYmVsVGV4dCgp''@;'; put 'put ''e3JldHVybiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQmJnRoaXMuZWwubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudH1uZ09uSW5pdCgpe3RoaXMuaWRBdHRyPXRoaXMuaWRJbnB1dCwodGhpcy5jb250cm9sSWRTZXJ2aWNlfHx0aGlzLm5nQ29udHJvbFNlcnZpY2UpJiZ0aGlzLnJlbmRlcmVyLmFk''@;'; put 'put ''ZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiY2xyLWNvbnRyb2wtbGFiZWwiKSx0aGlzLmVuYWJsZUdyaWQmJnRoaXMubGF5b3V0U2VydmljZSYmIXRoaXMubGF5b3V0U2VydmljZS5pc1ZlcnRpY2FsKCkmJnRoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50''@;'; put 'put ''LmNsYXNzTmFtZS5pbmRleE9mKCJjbHItY29sIik8MCYmKHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCJjbHItY29sLTEyIiksdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsYGNsci1jb2wtbWQtJHt0aGlzLmxheW91dFNl''@;'; put 'put ''cnZpY2UubGFiZWxTaXplfWApKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2UmJiF0aGlzLmZvckF0dHImJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuY29udHJvbElkU2VydmljZS5pZENoYW5nZS5zdWJzY3JpYmUodD0+e3RoaXMuZm9yQXR0cj10LHRoaXMuaWRBdHRyPXRoaXMuaWRJbnB1''@;'; put 'put ''dHx8YCR7dH0tbGFiZWxgfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2godD0+dC51bnN1YnNjcmliZSgpKX1kaXNhYmxlR3JpZCgpe3RoaXMuZW5hYmxlR3JpZD0hMX1vbkNsaWNrKHQpe3RoaXMucHJldmVudERlZmF1bHRPblNpZ25wb3N0VGFyZ2V0KHQpfXBy''@;'; put 'put ''ZXZlbnREZWZhdWx0T25TaWducG9zdFRhcmdldCh0KXt0aGlzLnNpZ25wb3N0JiZ0aGlzLnNpZ25wb3N0Lm5hdGl2ZUVsZW1lbnQmJnRoaXMuc2lnbnBvc3QubmF0aXZlRWxlbWVudC5jb250YWlucyh0LnRhcmdldCkmJnQucHJldmVudERlZmF1bHQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoT3AsOCksemUoWjUsOCksemUoajIsOCksemUoTnQpLHplKG5vKSl9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbImxhYmVsIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKHQscixpKXtpZigxJnQmJkZhKGkscXosNSxu''@;'; put 'put ''byksMiZ0KXtsZXQgbztjaShvPXVpKCkpJiYoci5zaWducG9zdD1vLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHQscil7MSZ0JiZ3dCgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiByLm9uQ2xpY2sobyl9KSwyJnQmJlJyKCJpZCIsci5pZEF0dHIpKCJmb3Ii''@;'; put 'put ''LHIuZm9yQXR0cil9LGlucHV0czp7aWRJbnB1dDpbMCwiaWQiLCJpZElucHV0Il0sZm9yQXR0cjpbMCwiZm9yIiwiZm9yQXR0ciJdfSxzdGFuZGFsb25lOiExfSksbn0pKCksdF90PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBZb2V7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMuY29u''@;'; put 'put ''dHJvbElkU2VydmljZT10LHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPXIsdGhpcy5jb250cm9sSWRTdWZmaXg9InN1Y2Nlc3MifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShPcCw4KSx6ZShCYiw4KSl9LG4uXHUwMjc1Y21wPVByKHt0eXBlOm4s''@;'; put 'put ''c2VsZWN0b3JzOltbImNsci1jb250cm9sLXN1Y2Nlc3MiXV0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsyJnQmJihScigiaWQiLHIuaWQpLHdyKCJjbHItc3VidGV4dCIsITApKCJzdWNjZXNzIiwhMCkpfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltGb10sbmdDb250''@;'; put 'put ''ZW50U2VsZWN0b3JzOmVzLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKHQscil7MSZ0JiYoZm8oKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLEkzPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCl7dGhpcy5sYXlvdXRTZXJ2aWNlPXQsdGhpcy5jbGFzc05hbWU9''@;'; put 'put ''IiJ9Y29udHJvbENsYXNzKHQ9azMuTk9ORSxyPSExLGk9IiIpe2NvbnN0IG89W3RoaXMuY2xhc3NOYW1lLGldO3N3aXRjaCh0KXtjYXNlIGszLlZBTElEOm8ucHVzaCgiY2xyLXN1Y2Nlc3MiKTticmVhaztjYXNlIGszLklOVkFMSUQ6by5wdXNoKCJjbHItZXJyb3IiKX1yZXR1cm4gciYmdGhp''@;'; put 'put ''cy5sYXlvdXRTZXJ2aWNlJiYtMT09PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoImNsci1jb2wiKSYmby5wdXNoKGBjbHItY29sLW1kLSR7dGhpcy5sYXlvdXRTZXJ2aWNlLm1heExhYmVsU2l6ZS10aGlzLmxheW91dFNlcnZpY2UubGFiZWxTaXplfSBjbHItY29sLTEyYCksby5qb2luKCIgIiku''@;'; put 'put ''dHJpbSgpfWluaXRDb250cm9sQ2xhc3ModCxyKXtyJiZyLmNsYXNzTmFtZSYmKHRoaXMuY2xhc3NOYW1lPXIuY2xhc3NOYW1lLHIuY2xhc3NOYW1lLnNwbGl0KCIgIikuZm9yRWFjaChvPT57by5zdGFydHNXaXRoKCJjbHItY29sIikmJnQucmVtb3ZlQ2xhc3MocixvKX0pKX19cmV0dXJuIG4u''@;'; put 'put ''XHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikob3IoWjUsOCkpfSxuLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFdiPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxyLGksbyl7dGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZp''@;'; put 'put ''Y2U9dCx0aGlzLmxheW91dFNlcnZpY2U9cix0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9aSx0aGlzLm5nQ29udHJvbFNlcnZpY2U9byx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZShhPT57dGhpcy5zdGF0ZT1h''@;'; put 'put ''LHNldFRpbWVvdXQoKCk9Pnt0aGlzLnVwZGF0ZUhlbHBlcnMoKX0pfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKG8uY29udHJvbENoYW5nZXMuc3Vic2NyaWJlKGE9Pnt0aGlzLmNvbnRyb2w9YX0pLG8uYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcy5zdWJzY3JpYmUoYT0+e3RoaXMuYWRk''@;'; put 'put ''aXRpb25hbENvbnRyb2xzPWF9KSl9Z2V0IHNob3dIZWxwZXIoKXtyZXR1cm4hIXRoaXMuY29udHJvbEhlbHBlckNvbXBvbmVudH1nZXQgc2hvd1ZhbGlkKCl7cmV0dXJuIHRoaXMudG91Y2hlZCYmdGhpcy5zdGF0ZT09PWszLlZBTElEJiZ0aGlzLnN1Y2Nlc3NNZXNzYWdlUHJlc2VudH1nZXQg''@;'; put 'put ''c2hvd0ludmFsaWQoKXtyZXR1cm4gdGhpcy50b3VjaGVkJiZ0aGlzLnN0YXRlPT09azMuSU5WQUxJRCYmdGhpcy5lcnJvck1lc3NhZ2VQcmVzZW50fWdldCBzdWNjZXNzTWVzc2FnZVByZXNlbnQoKXtyZXR1cm4hIXRoaXMuY29udHJvbFN1Y2Nlc3NDb21wb25lbnR9Z2V0IGVycm9yTWVzc2Fn''@;'; put 'put ''ZVByZXNlbnQoKXtyZXR1cm4hIXRoaXMuY29udHJvbEVycm9yQ29tcG9uZW50fWdldCB0b3VjaGVkKCl7cmV0dXJuISghdGhpcy5jb250cm9sPy50b3VjaGVkJiYhdGhpcy5hZGRpdGlvbmFsQ29udHJvbHM/LnNvbWUodD0+dC50b3VjaGVkKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy51''@;'; put 'put ''cGRhdGVIZWxwZXJzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCh0PT50LnVuc3Vic2NyaWJlKCkpfWNvbnRyb2xDbGFzcygpe3JldHVybiB0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2UuY29udHJvbENsYXNzKCF0aGlzLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50''@;'; put 'put ''JiZ0aGlzLnN0YXRlPT09azMuVkFMSUR8fCF0aGlzLnRvdWNoZWQ/azMuTk9ORTp0aGlzLnN0YXRlLHRoaXMuYWRkR3JpZCgpKX1hZGRHcmlkKCl7cmV0dXJuIHRoaXMubGF5b3V0U2VydmljZSYmIXRoaXMubGF5b3V0U2VydmljZS5pc1ZlcnRpY2FsKCl9dXBkYXRlSGVscGVycygpe3RoaXMu''@;'; put 'put ''bmdDb250cm9sU2VydmljZSYmdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLnNldEhlbHBlcnMoe3Nob3c6dGhpcy5zaG93SW52YWxpZHx8dGhpcy5zaG93SGVscGVyfHx0aGlzLnNob3dWYWxpZCxzaG93SW52YWxpZDp0aGlzLnNob3dJbnZhbGlkLHNob3dIZWxwZXI6dGhpcy5zaG93SGVscGVyLHNo''@;'; put 'put ''b3dWYWxpZDp0aGlzLnNob3dWYWxpZH0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShSMyksemUoWjUsOCksemUoSTMpLHplKGoyKSl9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24odCxyLGkpe2lmKDEm''@;'; put 'put ''dCYmKEZhKGksZWwsNSksRmEoaSx0X3QsNSksRmEoaSxWdnQsNSksRmEoaSxZeiw1KSksMiZ0KXtsZXQgbztjaShvPXVpKCkpJiYoci5sYWJlbD1vLmZpcnN0KSxjaShvPXVpKCkpJiYoci5jb250cm9sU3VjY2Vzc0NvbXBvbmVudD1vLmZpcnN0KSxjaShvPXVpKCkpJiYoci5jb250cm9sRXJy''@;'; put 'put ''b3JDb21wb25lbnQ9by5maXJzdCksY2kobz11aSgpKSYmKHIuY29udHJvbEhlbHBlckNvbXBvbmVudD1vLmZpcnN0KX19LHN0YW5kYWxvbmU6ITF9KSxufSkoKTtjbGFzcyBLentjb25zdHJ1Y3RvcihlLHQscj0wKXtpZih0aGlzLmluamVjdG9yPXQuaW5qZWN0b3IsIXRoaXMuaW5qZWN0b3Iu''@;'; put 'put ''Z2V0KGUsbnVsbCkpe2NvbnN0IGk9dGhpcy5pbmplY3Rvci5nZXQoTGgpLG89dGhpcy5pbmplY3Rvci5nZXQobm8pO3QuY3JlYXRlQ29tcG9uZW50KGkucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoRnZ0KSk7Y29uc3QgYT1pLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGUpLGw9W107bFtyXT1b''@;'; put 'put ''by5uYXRpdmVFbGVtZW50XTtjb25zdCB1PXQuY3JlYXRlQ29tcG9uZW50KGEsdm9pZCAwLHZvaWQgMCxsKTt0LnJlbW92ZSgwKSx0aGlzLmluamVjdG9yPXUuaW5qZWN0b3J9fWdldChlLHQpe3JldHVybiB0aGlzLmluamVjdG9yLmdldChlLHQpfX1sZXQgUW9lPSgoKT0+e2NsYXNzIG57Y29u''@;'; put 'put ''c3RydWN0b3IoKXt0aGlzLl90b3VjaGVkPW5ldyBNcn1nZXQgdG91Y2hlZENoYW5nZSgpe3JldHVybiB0aGlzLl90b3VjaGVkLmFzT2JzZXJ2YWJsZSgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLl90b3VjaGVkLm5leHQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBu''@;'; put 'put ''ZXcodHx8bil9LG4uXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7dmFyIEpvZT1mdW5jdGlvbihuKXtyZXR1cm4gbi5GT1JNPSJmb3JtIixuLk1PREVMPSJtb2RlbCIsbn0oSm9lfHx7fSk7bGV0IFliPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3Io''@;'; put 'put ''dCxyLGksbyxhLGwpe3RoaXMudmNyPXQsdGhpcy53cmFwcGVyVHlwZT1yLHRoaXMuX25nQ29udHJvbD1vLHRoaXMucmVuZGVyZXI9YSx0aGlzLmVsPWwsdGhpcy5pbmRleD0wLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmFkZGl0aW9uYWxEaWZmZXI9bmV3IE1hcCxpJiYodGhpcy5uZ0Nv''@;'; put 'put ''bnRyb2xTZXJ2aWNlPWkuZ2V0KGoyLG51bGwpLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWkuZ2V0KFIzLG51bGwpLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1pLmdldChJMyxudWxsKSx0aGlzLm1hcmtDb250cm9sU2VydmljZT1pLmdldChRb2UsbnVsbCksdGhpcy5kaWZmZXJzPWku''@;'; put 'put ''Z2V0KGRJLG51bGwpKSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2UmJnRoaXMuY29udHJvbENsYXNzU2VydmljZS5pbml0Q29udHJvbENsYXNzKGEsbC5uYXRpdmVFbGVtZW50KSx0aGlzLm1hcmtDb250cm9sU2VydmljZSYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tYXJrQ29udHJv''@;'; put 'put ''bFNlcnZpY2UudG91Y2hlZENoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLm1hcmtBc1RvdWNoZWQoKX0pKSx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdDb250cm9sU2VydmljZS5oZWxwZXJzQ2hhbmdlLnN1YnNjcmliZSh1PT57dGhpcy5z''@;'; put 'put ''ZXRBcmlhRGVzY3JpYmVkQnkodSl9KSl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZCh0KXt0aGlzLl9pZD10LHRoaXMuY29udHJvbElkU2VydmljZSYmKHRoaXMuY29udHJvbElkU2VydmljZS5pZD10KX1nZXQgaGFzQWRkaXRpb25hbENvbnRyb2xzKCl7cmV0dXJuIHRoaXMuYWRk''@;'; put 'put ''aXRpb25hbERpZmZlci5zaXplPjB9bmdPbkluaXQoKXt0aGlzLl9jb250YWluZXJJbmplY3Rvcj1uZXcgS3oodGhpcy53cmFwcGVyVHlwZSx0aGlzLnZjcix0aGlzLmluZGV4KSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9dGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KE9wKSx0aGlzLmNvbnRh''@;'; put 'put ''aW5lcklkU2VydmljZT10aGlzLl9jb250YWluZXJJbmplY3Rvci5nZXQoQmIsbnVsbCksdGhpcy5faWQ/dGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkPXRoaXMuX2lkOnRoaXMuX2lkPXRoaXMuY29udHJvbElkU2VydmljZS5pZCx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMuX25nQ29udHJv''@;'; put 'put ''bCYmKHRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9sPyh0aGlzLm5nQ29udHJvbD10aGlzLm5nQ29udHJvbFNlcnZpY2UuY29udHJvbCx0aGlzLm5nQ29udHJvbFNlcnZpY2UuYWRkQWRkaXRpb25hbENvbnRyb2wodGhpcy5fbmdDb250cm9sKSx0aGlzLmFkZGl0aW9uYWxEaWZmZXIuc2V0''@;'; put 'put ''KHRoaXMuX25nQ29udHJvbCx0aGlzLmRpZmZlcnMuZmluZCh0aGlzLl9uZ0NvbnRyb2wpLmNyZWF0ZSgpKSk6KHRoaXMubmdDb250cm9sPXRoaXMuX25nQ29udHJvbCx0aGlzLm5nQ29udHJvbFNlcnZpY2Uuc2V0Q29udHJvbCh0aGlzLm5nQ29udHJvbCksdGhpcy5kaWZmZXI9dGhpcy5kaWZm''@;'; put 'put ''ZXJzLmZpbmQodGhpcy5fbmdDb250cm9sKS5jcmVhdGUoKSkpfW5nRG9DaGVjaygpe2lmKHRoaXMudHJpZ2dlckRvQ2hlY2sodGhpcy5kaWZmZXIsdGhpcy5uZ0NvbnRyb2wpLHRoaXMuaGFzQWRkaXRpb25hbENvbnRyb2xzKWZvcihjb25zdFt0LHJdb2YgdGhpcy5hZGRpdGlvbmFsRGlmZmVy''@;'; put 'put ''KXRoaXMudHJpZ2dlckRvQ2hlY2socix0KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHQ9PnQ/LnVuc3Vic2NyaWJlKCkpfXRyaWdnZXJWYWxpZGF0aW9uKCl7dGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2UmJnRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlLnRy''@;'; put 'put ''aWdnZXJTdGF0dXNDaGFuZ2UoKX1nZXRQcm92aWRlckZyb21Db250YWluZXIodCxyKXt0cnl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lckluamVjdG9yLmdldCh0LHIpfWNhdGNoe3JldHVybiByfX10cmlnZ2VyRG9DaGVjayh0LHIpe2lmKHQpe2NvbnN0IGk9dC5kaWZmKHIpO2kmJmkuZm9yRWFj''@;'; put 'put ''aENoYW5nZWRJdGVtKG89Pnsoby5rZXk9PT1Kb2UuRk9STXx8by5rZXk9PT1Kb2UuTU9ERUwpJiZvLmN1cnJlbnRWYWx1ZSE9PW8ucHJldmlvdXNWYWx1ZSYmdGhpcy50cmlnZ2VyVmFsaWRhdGlvbigpfSl9fW1hcmtBc1RvdWNoZWQoKXt0aGlzLm5nQ29udHJvbCYmKHRoaXMubmdDb250cm9s''@;'; put 'put ''LmNvbnRyb2wubWFya0FzVG91Y2hlZCgpLHRoaXMubmdDb250cm9sLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKSx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMubmdDb250cm9sU2VydmljZS5oYXNBZGRpdGlvbmFsQ29udHJvbHMmJnRoaXMubmdDb250cm9sU2VydmljZS5h''@;'; put 'put ''ZGRpdGlvbmFsQ29udHJvbHM/LmZvckVhY2godD0+e3QuY29udHJvbC5tYXJrQXNUb3VjaGVkKCksdC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pfXNldEFyaWFEZXNjcmliZWRCeSh0KXtpZih0LnNob3cpe2NvbnN0IHI9dGhpcy5nZXRBcmlhRGVzY3JpYmVkQnlJZCh0KTtp''@;'; put 'put ''ZihudWxsIT09cilyZXR1cm4gdm9pZCB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImFyaWEtZGVzY3JpYmVkYnkiLHIpfXRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiYXJpYS1kZXNjcmliZWRieSIp''@;'; put 'put ''fWdldEFyaWFEZXNjcmliZWRCeUlkKHQpe2NvbnN0IHI9dGhpcy5jb250YWluZXJJZFNlcnZpY2U/LmlkfHx0aGlzLmNvbnRyb2xJZFNlcnZpY2U/LmlkO2lmKCFyKXJldHVybiBudWxsO2NvbnN0IGk9W2Ake3J9LWhlbHBlcmBdO3JldHVybiB0LnNob3dJbnZhbGlkP2kucHVzaChgJHtyfS1l''@;'; put 'put ''cnJvcmApOnQuc2hvd1ZhbGlkJiZpLnB1c2goYCR7cn0tc3VjY2Vzc2ApLGkuam9pbigiICIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShEcyksemUoWkEpLHplKE1sKSx6ZShWMiksemUoTnQpLHplKG5vKSl9LG4uXHUwMjc1ZGlyPSRyKHt0''@;'; put 'put ''eXBlOm4saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsxJnQmJnd0KCJibHVyIixmdW5jdGlvbigpe3JldHVybiByLnRyaWdnZXJWYWxpZGF0aW9uKCl9KSwyJnQmJk81KCJpZCIsci5pZCl9LGlucHV0czp7aWQ6ImlkIn0sc3RhbmRhbG9uZTohMX0pLG59KSgpLG5NZT0o''@;'; put 'put ''KCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscil7dGhpcy5sYXlvdXRTZXJ2aWNlPXQsdGhpcy5tYXJrQ29udHJvbFNlcnZpY2U9cn1zZXQgbGFiZWxTaXplKHQpe2NvbnN0IHI9cGFyc2VJbnQodCwxMCl8fDI7dGhpcy5sYXlvdXRTZXJ2aWNlLmxhYmVsU2l6ZT1yfW9uRm9ybVN1Ym1pdCgp''@;'; put 'put ''e3RoaXMubWFya0FzVG91Y2hlZCgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLm1hcmtDb250cm9sU2VydmljZS5tYXJrQXNUb3VjaGVkKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKFo1KSx6ZShRb2UpKX0sbi5cdTAyNzVkaXI9JHIoe3R5cGU6''@;'; put 'put ''bixzZWxlY3RvcnM6W1siIiwiY2xyRm9ybSIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbih0LHIsaSl7aWYoMSZ0JiZGYShpLGVsLDUpLDImdCl7bGV0IG87Y2kobz11aSgpKSYmKHIubGFiZWxzPW8pfX0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsxJnQmJnd0''@;'; put 'put ''KCJzdWJtaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHIub25Gb3JtU3VibWl0KCl9KSwyJnQmJndyKCJjbHItZm9ybSIsITApKCJjbHItZm9ybS1ob3Jpem9udGFsIixyLmxheW91dFNlcnZpY2UuaXNIb3Jpem9udGFsKCkpKCJjbHItZm9ybS1jb21wYWN0IixyLmxheW91dFNlcnZpY2UuaXNDb21w''@;'; put 'put ''YWN0KCkpfSxpbnB1dHM6e2xhYmVsU2l6ZTpbMCwiY2xyTGFiZWxTaXplIiwibGFiZWxTaXplIl19LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2JvKFtaNSxRb2VdKV19KSxufSkoKSxnaD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7emwuYWRkSWNvbnMoQXAsa3ApfX1yZXR1cm4gbi5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltxbyxXbF19KSxufSkoKTtjb25zdCBlYWU9bmV3IEVyKCJJU19UT0dHTEUiKSxvX3Q9e3Byb3ZpZGU6ZWFlLHVzZUZhY3Rvcnk6ZnVu''@;'; put 'put ''Y3Rpb24gaV90KCl7cmV0dXJuIG5ldyAkaSghMSl9fTtsZXQgRmY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0KXt0aGlzLnRvZ2dsZT0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godC5zdWJzY3JpYmUocj0+e3RoaXMudG9nZ2xlPXJ9KSl9bmdP''@;'; put 'put ''bkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCh0PT50LnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShlYWUpKX0s''@;'; put 'put ''bi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbImNsci10b2dnbGUtd3JhcHBlciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbih0LHIsaSl7aWYoMSZ0JiYoRmEoaSxlbCw3KSxGYShpLFUyLDcpKSwyJnQpe2xldCBvO2NpKG89dWko''@;'; put 'put ''KSkmJihyLmxhYmVsPW8uZmlyc3QpLGNpKG89dWkoKSkmJihyLmNoZWNrYm94PW8uZmlyc3QpfX0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsyJnQmJndyKCJjbHItY2hlY2tib3gtd3JhcHBlciIsIXIudG9nZ2xlKSgiY2xyLWNoZWNrYm94LXdyYXBwZXItZGlzYWJs''@;'; put 'put ''ZWQiLG51bGw9PXIuY2hlY2tib3g/bnVsbDpyLmNoZWNrYm94LmNvbnRyb2xEaXNhYmxlZCkoImNsci10b2dnbGUtd3JhcHBlciIsci50b2dnbGUpfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltibyhbT3Asb190XSldLG5nQ29udGVudFNlbGVjdG9yczpyNXQsZGVjbHM6Myx2YXJzOjEsY29u''@;'; put 'put ''c3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpezEmdCYmKGZvKG41dCksV3IoMCksV3IoMSwxKSxZbigyLGk1dCwxLDAsImxhYmVsIiwwKSksMiZ0JiYoaWUoMikscnQoIm5nSWYiLCFyLmxhYmVsKSl9LGRlcGVuZGVuY2llczpbWXMsZWxdLGVuY2Fwc3VsYXRpb246Mn0p''@;'; put 'put ''LG59KSgpLFUyPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBZYntjb25zdHJ1Y3Rvcih0LHIsaSxvLGEsbCl7c3VwZXIodCxGZixyLGksbyxhKSx0aGlzLmNvbnRyb2w9aSx0aGlzLnRvZ2dsZT1sfWdldCBjb250cm9sRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sPy5kaXNhYmxlZH1uZ09u''@;'; put 'put ''SW5pdCgpe3N1cGVyLm5nT25Jbml0KCk7Y29uc3QgdD10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihlYWUsbnVsbCk7dCYmbnVsbCE9PXRoaXMudG9nZ2xlJiZ0Lm5leHQoITApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShEcyksemUo''@;'; put 'put ''TWwpLHplKFYyLDEwKSx6ZShOdCksemUobm8pLHc1KCJjbHJUb2dnbGUiKSl9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNsckNoZWNrYm94IiwiIl0sWyIiLCJjbHJUb2dnbGUiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsyJnQm''@;'; put 'put ''JlJyKCJyb2xlIixudWxsIT09ci50b2dnbGU/InN3aXRjaCI6bnVsbCl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0ZvXX0pLG59KSgpLEV2PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBXYntjb25zdHJ1Y3Rvcih0LHIsaSxvKXtzdXBlcihvLHQscixpKSx0aGlzLmxheW91dFNlcnZpY2U9dCx0''@;'; put 'put ''aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9cix0aGlzLm5nQ29udHJvbFNlcnZpY2U9aSx0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1vLHRoaXMuaW5saW5lPSExfWdldCBjbHJJbmxpbmUoKXtyZXR1cm4gdGhpcy5pbmxpbmV9c2V0IGNscklubGluZSh0KXt0aGlzLmlubGluZT0ic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIHQ/ImZhbHNlIiE9PXQ6ISF0fWdldCBhbGxDaGVja2JveGVzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sPy5kaXNhYmxlZCYmKCF0aGlzLmFkZGl0aW9uYWxDb250cm9scz8ubGVuZ3RofHx0aGlzLmFkZGl0aW9uYWxDb250cm9scy5ldmVyeSh0PT50LmRpc2FibGVk''@;'; put 'put ''KSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRBcmlhUm9sZXMoKX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5jaGVja2JveGVzLmxlbmd0aD8iZ3JvdXAiOm51bGx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKFo1LDgpLHpl''@;'; put 'put ''KEkzKSx6ZShqMiksemUoUjMpKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWNoZWNrYm94LWNvbnRhaW5lciJdLFsiY2xyLXRvZ2dsZS1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24odCxyLGkpe2lmKDEmdCYmRmEoaSxVMiw1KSwyJnQpe2xl''@;'; put 'put ''dCBvO2NpKG89dWkoKSkmJihyLmNoZWNrYm94ZXM9byl9fSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezImdCYmKFJyKCJyb2xlIixyLnJvbGUpLHdyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLHIuYWxsQ2hlY2tib3hl''@;'; put 'put ''c0Rpc2FibGVkKSgiY2xyLXJvdyIsci5hZGRHcmlkKCkpKX0saW5wdXRzOntjbHJJbmxpbmU6ImNscklubGluZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2JvKFtSMyxqMixJMyxCYl0pLEZvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6YTV0LGRlY2xzOjYsdmFyczo2LGNvbnN0czpbWzQsIm5n''@;'; put 'put ''SWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNsci1zdWJ0ZXh0LXdyYXBwZXIiLDQsIm5nSWYiXSxbMSwiY2xyLXN1YnRleHQtd3JhcHBlciJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2ly''@;'; put 'put ''Y2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIs''@;'; put 'put ''ImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWlj''@;'; put 'put ''b24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24odCxyKXsxJnQmJihmbyhvNXQpLFdyKDApLFluKDEsczV0LDEsMCwibGFiZWwiLDApLEooMiwiZGl2IiwxKSxXcigzLDEpLFluKDQsbDV0LDIsMCwiZGl2IiwyKSg1LGY1dCw1LDQsImRpdiIsMiksdGUoKSksMiZ0JiYoaWUoKSxydCgibmdJZiIsIXIu''@;'; put 'put ''bGFiZWwmJnIuYWRkR3JpZCgpKSxpZSgpLHdyKCJjbHItY29udHJvbC1pbmxpbmUiLHIuY2xySW5saW5lKSxydCgibmdDbGFzcyIsci5jb250cm9sQ2xhc3MoKSksaWUoMikscnQoIm5nSWYiLHIuc2hvd0hlbHBlciksaWUoKSxydCgibmdJZiIsci5zaG93SW52YWxpZHx8ci5zaG93VmFsaWQp''@;'; put 'put ''KX0sZGVwZW5kZW5jaWVzOltGaCxZcyxKcyxlbF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksYV90PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt6bC5hZGRJY29ucyhBcCxrcCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NW1v''@;'; put 'put ''ZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3FvLFdsLGdoLE5ELGdoXX0pLG59KSgpO2Z1bmN0aW9uIHA0KG4pe3JldHVybiBudWxsIT09biYmKCJzdHJpbmciPT10eXBlb2Ygbj9uLmxlbmd0aD49MDoiYm9vbGVhbiI9PXR5cGVvZiBuJiZuKX1sZXQgejI9KCgpPT57''@;'; put 'put ''Y2xhc3MgbntnZXQgc3Bpbm5lckNsYXNzKCl7cmV0dXJuITB9Z2V0IGlubGluZUNsYXNzKCl7cmV0dXJuIHRoaXMuX2lubGluZX1zZXQgY2xySW5saW5lKHQpe3RoaXMuX2lubGluZT1wNCh0KX1nZXQgaW52ZXJzZUNsYXNzKCl7cmV0dXJuIHRoaXMuX2ludmVyc2V9c2V0IGNsckludmVyc2Uo''@;'; put 'put ''dCl7dGhpcy5faW52ZXJzZT1wNCh0KX1nZXQgc21hbGxDbGFzcygpe3JldHVybiB0aGlzLl9zbWFsbH1zZXQgY2xyU21hbGwodCl7dGhpcy5fc21hbGw9cDQodCl9Z2V0IG1lZGl1bUNsYXNzKCl7cmV0dXJuIXRoaXMuX3NtYWxsJiZ0aGlzLl9tZWRpdW19c2V0IGNsck1lZGl1bSh0KXt0aGlz''@;'; put 'put ''Ll9tZWRpdW09cDQodCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NWNtcD1Qcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItc3Bpbm5lciJdXSxob3N0VmFyczoxMSxob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsyJnQmJihScigi''@;'; put 'put ''YXJpYS1idXN5IiwhMCksd3IoInNwaW5uZXIiLHIuc3Bpbm5lckNsYXNzKSgic3Bpbm5lci1pbmxpbmUiLHIuaW5saW5lQ2xhc3MpKCJzcGlubmVyLWludmVyc2UiLHIuaW52ZXJzZUNsYXNzKSgic3Bpbm5lci1zbSIsci5zbWFsbENsYXNzKSgic3Bpbm5lci1tZCIsci5tZWRpdW1DbGFzcykp''@;'; put 'put ''fSxpbnB1dHM6e2NscklubGluZToiY2xySW5saW5lIixjbHJJbnZlcnNlOiJjbHJJbnZlcnNlIixjbHJTbWFsbDoiY2xyU21hbGwiLGNsck1lZGl1bToiY2xyTWVkaXVtIn0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6ZXMsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rp''@;'; put 'put ''b24odCxyKXsxJnQmJihmbygpLFdyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksZ009KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj1taSh7aW1wb3J0''@;'; put 'put ''czpbcW9dfSksbn0pKCk7dmFyIE12PWZ1bmN0aW9uKG4pe3JldHVybiBuLlZFUlRJQ0FMPSJ2ZXJ0aWNhbCIsbi5IT1JJWk9OVEFMPSJob3Jpem9udGFsIixuLkJPVEg9ImJvdGgiLG59KE12fHx7fSk7bGV0IHJNZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscil7dGhpcy5lbGVtZW50''@;'; put 'put ''UmVmPXQsdGhpcy5wbGF0Zm9ybUlkPXJ9Z2V0IG5hdGl2ZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9Zm9jdXMoKXtIYyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfX1yZXR1cm4gbi5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShubyksemUobGQpKX0sbi5cdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2xyS2V5Rm9jdXNJdGVtIiwiIl1dLHN0YW5kYWxvbmU6ITF9KSxufSkoKSxtTT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQpe3Ro''@;'; put 'put ''aXMuZWxlbWVudFJlZj10LHRoaXMuZGlyZWN0aW9uPU12LlZFUlRJQ0FMLHRoaXMuZm9jdXNPbkxvYWQ9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuZm9jdXNDaGFuZ2U9bmV3IEtyLHRoaXMuX2N1cnJlbnQ9MH1nZXQgZm9jdXNhYmxlSXRlbXMoKXtyZXR1cm4gdGhpcy5fZm9jdXNh''@;'; put 'put ''YmxlSXRlbXM/dGhpcy5fZm9jdXNhYmxlSXRlbXM6dGhpcy5jbHJLZXlGb2N1c0l0ZW1zP3RoaXMuY2xyS2V5Rm9jdXNJdGVtcy50b0FycmF5KCk6W119c2V0IGZvY3VzYWJsZUl0ZW1zKHQpe0FycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoJiYodGhpcy5fZm9jdXNhYmxlSXRlbXM9dCx0aGlz''@;'; put 'put ''LmluaXRpYWxpemVGb2N1cygpKX1nZXQgbmF0aXZlRWxlbWVudCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KHQpe3RoaXMuX2N1cnJlbnQhPT10JiYodGhpcy5fY3VycmVudD10KX1n''@;'; put 'put ''ZXQgY3VycmVudEl0ZW0oKXtyZXR1cm4gdGhpcy5mb2N1c2FibGVJdGVtc1t0aGlzLl9jdXJyZW50XX1nZXQgY3VycmVudEl0ZW1FbGVtZW50KCl7cmV0dXJuIHRoaXMuY3VycmVudEl0ZW0ubmF0aXZlRWxlbWVudD90aGlzLmN1cnJlbnRJdGVtLm5hdGl2ZUVsZW1lbnQ6dGhpcy5jdXJyZW50''@;'; put 'put ''SXRlbX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckl0ZW1VcGRhdGVzKCkpLHRoaXMuaW5pdGlhbGl6ZUZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCh0PT50LnVuc3Vic2NyaWJlKCkpfWhh''@;'; put 'put ''bmRsZUtleWJvYXJkRXZlbnQodCl7aWYodGhpcy5jdXJyZW50SXRlbUVsZW1lbnQhPT10LnRhcmdldCl7Y29uc3Qgcj10aGlzLmdldEl0ZW1Qb3NpdGlvbih0LnRhcmdldCk7dGhpcy5wb3NpdGlvbkluUmFuZ2UocikmJih0aGlzLmN1cnJlbnQ9cil9dGhpcy5wcmV2S2V5UHJlc3NlZCh0KSYm''@;'; put 'put ''dGhpcy5jdXJyZW50Rm9jdXNJc05vdEZpcnN0SXRlbSgpP3RoaXMubW92ZVRvKHRoaXMuY3VycmVudC0xKTp0aGlzLm5leHRLZXlQcmVzc2VkKHQpJiZ0aGlzLmN1cnJlbnRGb2N1c0lzTm90TGFzdEl0ZW0oKT90aGlzLm1vdmVUbyh0aGlzLmN1cnJlbnQrMSk6dC5jb2RlPT09TW8uSG9tZT90''@;'; put 'put ''aGlzLm1vdmVUbygwKTp0LmNvZGU9PT1Nby5FbmQmJnRoaXMubW92ZVRvKHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoLTEpLGpvZSh0KX1zZXRDbGlja2VkSXRlbUN1cnJlbnQodCl7Y29uc3Qgcj10aGlzLmdldEl0ZW1Qb3NpdGlvbih0LnRhcmdldCk7cj4tMSYmdGhpcy5tb3ZlVG8ocil9''@;'; put 'put ''Zm9jdXNDdXJyZW50KCl7dGhpcy5jdXJyZW50SXRlbS5mb2N1cygpLHRoaXMuZm9jdXNDaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KX1tb3ZlVG8odCl7dGhpcy5wb3NpdGlvbkluUmFuZ2UodCkmJih0aGlzLmN1cnJlbnQ9dCx0aGlzLmZvY3VzQ3VycmVudCgpKX1wb3NpdGlvbkluUmFuZ2Uo''@;'; put 'put ''dCl7cmV0dXJuIHQ+PTAmJnQ8dGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGh9Y3VycmVudEZvY3VzSXNOb3RGaXJzdEl0ZW0oKXtyZXR1cm4gdGhpcy5fY3VycmVudC0xPj0wfWN1cnJlbnRGb2N1c0lzTm90TGFzdEl0ZW0oKXtyZXR1cm4gdGhpcy5fY3VycmVudCsxPHRoaXMuZm9jdXNhYmxl''@;'; put 'put ''SXRlbXMubGVuZ3RofWluaXRpYWxpemVGb2N1cygpe3RoaXMuZm9jdXNhYmxlSXRlbXMmJnRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoJiYodGhpcy5fY3VycmVudD49dGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGgmJih0aGlzLl9jdXJyZW50PXRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3Ro''@;'; put 'put ''LTEpLHRoaXMuZm9jdXNPbkxvYWQmJih0aGlzLmN1cnJlbnRJdGVtLmZvY3VzKCksdGhpcy5mb2N1c0NoYW5nZS5lbWl0KCkpKX1uZXh0S2V5UHJlc3NlZCh0KXtjb25zdCByPXRtKHQua2V5KTtzd2l0Y2godGhpcy5kaXJlY3Rpb24pe2Nhc2UgTXYuVkVSVElDQUw6cmV0dXJuIHI9PT1Nby5B''@;'; put 'put ''cnJvd0Rvd247Y2FzZSBNdi5IT1JJWk9OVEFMOnJldHVybiByPT09TW8uQXJyb3dSaWdodDtjYXNlIE12LkJPVEg6cmV0dXJuIHI9PT1Nby5BcnJvd0Rvd258fHI9PT1Nby5BcnJvd1JpZ2h0O2RlZmF1bHQ6cmV0dXJuITF9fXByZXZLZXlQcmVzc2VkKHQpe2NvbnN0IHI9dG0odC5rZXkpO3N3''@;'; put 'put ''aXRjaCh0aGlzLmRpcmVjdGlvbil7Y2FzZSBNdi5WRVJUSUNBTDpyZXR1cm4gcj09PU1vLkFycm93VXA7Y2FzZSBNdi5IT1JJWk9OVEFMOnJldHVybiByPT09TW8uQXJyb3dMZWZ0O2Nhc2UgTXYuQk9USDpyZXR1cm4gcj09PU1vLkFycm93VXB8fHI9PT1Nby5BcnJvd0xlZnQ7ZGVmYXVsdDpy''@;'; put 'put ''ZXR1cm4hMX19Z2V0SXRlbVBvc2l0aW9uKHQpe3JldHVybiB0aGlzLl9mb2N1c2FibGVJdGVtcz90aGlzLmZvY3VzYWJsZUl0ZW1zLmluZGV4T2YodCk6dGhpcy5mb2N1c2FibGVJdGVtcy5tYXAocj0+ci5uYXRpdmVFbGVtZW50KS5pbmRleE9mKHQpfWxpc3RlbkZvckl0ZW1VcGRhdGVzKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY2xyS2V5Rm9jdXNJdGVtcy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuaW5pdGlhbGl6ZUZvY3VzKCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUobm8pKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3Rv''@;'; put 'put ''cnM6W1siIiwiY2xyS2V5Rm9jdXMiLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24odCxyLGkpe2lmKDEmdCYmRmEoaSxyTWUsNSksMiZ0KXtsZXQgbztjaShvPXVpKCkpJiYoci5jbHJLZXlGb2N1c0l0ZW1zPW8pfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHQscil7MSZ0JiZ3dCgia2V5''@;'; put 'put ''ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIHIuaGFuZGxlS2V5Ym9hcmRFdmVudChvKX0pKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIHIuc2V0Q2xpY2tlZEl0ZW1DdXJyZW50KG8pfSl9LGlucHV0czp7ZGlyZWN0aW9uOlswLCJjbHJEaXJlY3Rpb24iLCJkaXJlY3Rpb24iXSxmb2N1c09u''@;'; put 'put ''TG9hZDpbMCwiY2xyRm9jdXNPbkxvYWQiLCJmb2N1c09uTG9hZCJdLGZvY3VzYWJsZUl0ZW1zOlswLCJjbHJLZXlGb2N1cyIsImZvY3VzYWJsZUl0ZW1zIl19LG91dHB1dHM6e2ZvY3VzQ2hhbmdlOiJjbHJGb2N1c0NoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsYXR0cnM6cDV0LG5nQ29udGVudFNl''@;'; put 'put ''bGVjdG9yczplcyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpezEmdCYmKGZvKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSx0YWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUw''@;'; put 'put ''Mjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj1taSh7aW1wb3J0czpbcW9dfSksbn0pKCk7Y2xhc3Mgc190e2NvbnRhaW5zSXRlbShlKXtyZXR1cm4hIXRoaXMubW9kZWwmJnRoaXMubW9kZWwuaW5jbHVkZXMoZSl9c2VsZWN0KGUpe3RoaXMuYWRkSXRlbShlKX11bnNlbGVjdChlKXt0''@;'; put 'put ''aGlzLnJlbW92ZUl0ZW0oZSl9aXNFbXB0eSgpe3JldHVybiEodGhpcy5tb2RlbCYmdGhpcy5tb2RlbC5sZW5ndGg+MCl9cG9wKCl7bGV0IGU7cmV0dXJuIHRoaXMubW9kZWwmJnRoaXMubW9kZWwubGVuZ3RoPjAmJihlPXRoaXMubW9kZWxbdGhpcy5tb2RlbC5sZW5ndGgtMV0sdGhpcy5yZW1v''@;'; put 'put ''dmVJdGVtKGUpKSxlfXRvU3RyaW5nKGUsdD0tMSl7bGV0IHI9IiI7cmV0dXJuIHRoaXMubW9kZWwmJih0Pi0xP3RoaXMubW9kZWxbdF0mJihyKz1lJiZ0aGlzLm1vZGVsW3RdW2VdP3RoaXMubW9kZWxbdF1bZV06dGhpcy5tb2RlbFt0XS50b1N0cmluZygpKTp0aGlzLm1vZGVsLmZvckVhY2go''@;'; put 'put ''aT0+e3IrPWUmJmlbZV0/aVtlXTppLnRvU3RyaW5nKCkscis9IiAifSkpLHIudHJpbSgpfWFkZEl0ZW0oZSl7dGhpcy5jb250YWluc0l0ZW0oZSl8fCh0aGlzLm1vZGVsPXRoaXMubW9kZWx8fFtdLHRoaXMubW9kZWwucHVzaChlKSl9cmVtb3ZlSXRlbShlKXtpZihudWxsPT10aGlzLm1vZGVs''@;'; put 'put ''KXJldHVybjtjb25zdCB0PXRoaXMubW9kZWwuaW5kZXhPZihlKTt0Pi0xJiZ0aGlzLm1vZGVsLnNwbGljZSh0LDEpLDA9PT10aGlzLm1vZGVsLmxlbmd0aCYmKHRoaXMubW9kZWw9bnVsbCl9fWNsYXNzIGxfdHtjb250YWluc0l0ZW0oZSl7cmV0dXJuIHRoaXMubW9kZWw9PT1lfXNlbGVjdChl''@;'; put 'put ''KXt0aGlzLm1vZGVsPWV9dW5zZWxlY3QoZSl7dGhpcy5jb250YWluc0l0ZW0oZSkmJih0aGlzLm1vZGVsPW51bGwpfWlzRW1wdHkoKXtyZXR1cm4hdGhpcy5tb2RlbH1wb3AoKXtjb25zdCBlPXRoaXMubW9kZWw7cmV0dXJuIHRoaXMubW9kZWw9bnVsbCxlfXRvU3RyaW5nKGUpe3JldHVybiB0''@;'; put 'put ''aGlzLm1vZGVsP2UmJnRoaXMubW9kZWxbZV0/dGhpcy5tb2RlbFtlXTp0aGlzLm1vZGVsLnRvU3RyaW5nKCk6IiJ9fWNsYXNzIGNfdCBleHRlbmRzIGxfdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZm9jdXNDaGFuZ2VkPW5ldyAkaShudWxsKX1nZXQgZm9jdXND''@;'; put 'put ''aGFuZ2VkKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQ2hhbmdlZC5hc09ic2VydmFibGUoKX1zZWxlY3QoZSl7dGhpcy5tb2RlbCE9PWUmJih0aGlzLm1vZGVsPWUsdGhpcy5fZm9jdXNDaGFuZ2VkLm5leHQoZSkpfX1sZXQgdV90PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmxvYWRp''@;'; put 'put ''bmc9ITEsdGhpcy5zaG93QWxsT3B0aW9ucz0hMCx0aGlzLl9jdXJyZW50SW5wdXQ9IiIsdGhpcy5faW5wdXRDaGFuZ2VkPW5ldyAkaSgiIiksdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZD1uZXcgZEQoMSksdGhpcy5pbnB1dENoYW5nZWQ9dGhpcy5faW5wdXRDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgp''@;'; put 'put ''fWdldCBjdXJyZW50SW5wdXQoKXtyZXR1cm4gdGhpcy5fY3VycmVudElucHV0fXNldCBjdXJyZW50SW5wdXQodCl7IiI9PT10JiYhdGhpcy5tdWx0aXNlbGVjdGFibGUmJnRoaXMuc2V0U2VsZWN0aW9uVmFsdWUobnVsbCksdGhpcy5fY3VycmVudElucHV0PXQsdGhpcy5faW5wdXRDaGFuZ2Vk''@;'; put 'put ''Lm5leHQodCl9Z2V0IHNlbGVjdGlvbkNoYW5nZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5hc09ic2VydmFibGUoKX1nZXQgbXVsdGlzZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZWwgaW5zdGFuY2VvZiBzX3R9c2VsZWN0KHQpe251bGw9PXR8fHRoaXMu''@;'; put 'put ''c2VsZWN0aW9uTW9kZWwuY29udGFpbnNJdGVtKHQpfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QodCksdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuc2VsZWN0aW9uTW9kZWwpKX10b2dnbGUodCl7bnVsbCE9dCYmKHRoaXMuc2VsZWN0aW9uTW9kZWwuY29udGFpbnNJdGVt''@;'; put 'put ''KHQpP3RoaXMuc2VsZWN0aW9uTW9kZWwudW5zZWxlY3QodCk6dGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QodCksdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuc2VsZWN0aW9uTW9kZWwpKX11bnNlbGVjdCh0KXtudWxsPT10fHwhdGhpcy5zZWxlY3Rpb25Nb2RlbC5jb250YWlu''@;'; put 'put ''c0l0ZW0odCl8fCh0aGlzLnNlbGVjdGlvbk1vZGVsLnVuc2VsZWN0KHQpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9c2V0U2VsZWN0aW9uVmFsdWUodCl7IXRoaXMuc2VsZWN0aW9uTW9kZWx8fHRoaXMuc2VsZWN0aW9uTW9kZWwubW9kZWw9PT10''@;'; put 'put ''fHwhdGhpcy5zZWxlY3Rpb25Nb2RlbC5tb2RlbCYmIXR8fCh0aGlzLnNlbGVjdGlvbk1vZGVsLm1vZGVsPXQsdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuc2VsZWN0aW9uTW9kZWwpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4u''@;'; put 'put ''XHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7R0VlKCgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxyLGksbyl7dGhpcy50b2dnbGVTZXJ2aWNlPXIsdGhpcy5zZWxlY3Rpb25TZXJ2aWNlPWksdGhpcy5wbGF0Zm9ybUlkPW8sdGhpcy5wc2V1ZG9G''@;'; put 'put ''b2N1cz1uZXcgY190LHRoaXMub3B0aW9uRGF0YT1bXSx0aGlzLmhhbmRsZUZvY3VzU3Vic2NyaXB0aW9uKCksdGhpcy5yZW5kZXJlcj10LmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVsbCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcn1zZXQgdHJpZ2dlcih0KXt0aGlzLl90cmln''@;'; put 'put ''Z2VyPXQsdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKHQpfWdldCBsaXN0Ym94KCl7cmV0dXJuIHRoaXMuX2xpc3Rib3h9c2V0IGxpc3Rib3godCl7dGhpcy5fbGlzdGJveD10LHRoaXMuYWRkRm9jdXNPbkJsdXJMaXN0ZW5lcih0KX1nZXQgdGV4dElucHV0KCl7cmV0dXJuIHRoaXMuX3Rl''@;'; put 'put ''eHRJbnB1dH1zZXQgdGV4dElucHV0KHQpe3RoaXMuX3RleHRJbnB1dD10LHRoaXMucmVuZGVyZXIubGlzdGVuKHQsImtleWRvd24iLHI9PiF0aGlzLmhhbmRsZVRleHRJbnB1dChyKSksdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKHQpfWZvY3VzSW5wdXQoKXt0aGlzLnRleHRJbnB1dCYm''@;'; put 'put ''SGModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50ZXh0SW5wdXQuZm9jdXMoKX1mb2N1c0ZpcnN0QWN0aXZlKCl7aWYodGhpcy5vcHRpb25EYXRhLmxlbmd0aD4wKWlmKHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5pc0VtcHR5KCkpdGhpcy5wc2V1ZG9Gb2N1cy5zZWxlY3Qo''@;'; put 'put ''dGhpcy5vcHRpb25EYXRhWzBdKTtlbHNle2xldCB0O3Q9dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZT90aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwubW9kZWxbMF06dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLm1vZGVsO2NvbnN0''@;'; put 'put ''IHI9dGhpcy5vcHRpb25EYXRhLmZpbmQoaT0+aS52YWx1ZT09PXQpO3RoaXMucHNldWRvRm9jdXMuc2VsZWN0KHJ8fHRoaXMub3B0aW9uRGF0YVswXSksdGhpcy5zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbCgiYXV0byIpfX1hZGRPcHRpb25WYWx1ZXModCl7dGhpcy5vcHRpb25EYXRhPXR9aGFu''@;'; put 'put ''ZGxlRm9jdXNTdWJzY3JpcHRpb24oKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUodD0+e3R8fCh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsPW51bGwpfSl9bW92ZUZvY3VzVG8odCl7bGV0IHI9dGhpcy5vcHRpb25EYXRhLmZpbmRJbmRleChpPT5pLmVxdWFscyh0aGlz''@;'; put 'put ''LnBzZXVkb0ZvY3VzLm1vZGVsKSk7dD09PURwLlVQPy0xPT09cnx8MD09PXI/cj10aGlzLm9wdGlvbkRhdGEubGVuZ3RoLTE6ci0tOnQ9PT1EcC5ET1dOJiYoLTE9PT1yfHxyPT09dGhpcy5vcHRpb25EYXRhLmxlbmd0aC0xP3I9MDpyKyspLHRoaXMucHNldWRvRm9jdXMuc2VsZWN0KHRoaXMu''@;'; put 'put ''b3B0aW9uRGF0YVtyXSksdGhpcy5zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbCgpfW9wZW5BbmRNb3ZlVG8odCl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4/dGhpcy5tb3ZlRm9jdXNUbyh0KToodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2UucGlwZShNcCgxKSkuc3Vic2NyaWJlKHI9Pnty''@;'; put 'put ''JiZ0aGlzLm1vdmVGb2N1c1RvKHQpfSksdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfWhhbmRsZVRleHRJbnB1dCh0KXtsZXQgcj0hMTtjb25zdCBpPXRtKHQua2V5KTtpZih0KXN3aXRjaChpKXtjYXNlIE1vLkVudGVyOnRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiZ0aGlzLnBzZXVkb0Zv''@;'; put 'put ''Y3VzLm1vZGVsJiYodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZT90aGlzLnNlbGVjdGlvblNlcnZpY2UudG9nZ2xlKHRoaXMucHNldWRvRm9jdXMubW9kZWwudmFsdWUpOnRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3QodGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC52YWx1''@;'; put 'put ''ZSkscj0hMCk7YnJlYWs7Y2FzZSBNby5TcGFjZTp0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbnx8KHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwLHI9ITApO2JyZWFrO2Nhc2UgTW8uQXJyb3dVcDp0aGlzLnByZXZlbnRWaWV3cG9ydFNjcm9sbGluZyh0KSx0aGlzLm9wZW5BbmRNb3ZlVG8oRHAu''@;'; put 'put ''VVApLHI9ITA7YnJlYWs7Y2FzZSBNby5BcnJvd0Rvd246dGhpcy5wcmV2ZW50Vmlld3BvcnRTY3JvbGxpbmcodCksdGhpcy5vcGVuQW5kTW92ZVRvKERwLkRPV04pLHI9ITA7YnJlYWs7ZGVmYXVsdDp0LmtleSE9PU1vLlRhYiYmKCF0aGlzLnNlbGVjdGlvblNlcnZpY2UubXVsdGlzZWxlY3Rh''@;'; put 'put ''YmxlfHx0LmtleSE9PU1vLkJhY2tzcGFjZSkmJnQua2V5IT09TW8uRXNjYXBlJiYhdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCl9cmV0dXJuIHJ9c2Nyb2xsSW50b1NlbGVjdGVkTW9kZWwodD0ic21vb3RoIil7dGhpcy5wc2V1ZG9Gb2N1cy5t''@;'; put 'put ''b2RlbCYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC5lbCYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC5lbC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6dCxibG9jazoiY2VudGVyIixpbmxpbmU6Im5lYXJlc3QifSl9cHJldmVudFZpZXdwb3J0U2Nyb2xsaW5nKHQpe3QucHJldmVudERlZmF1bHQo''@;'; put 'put ''KSx0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWFkZEZvY3VzT25CbHVyTGlzdGVuZXIodCl7SGModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5yZW5kZXJlci5saXN0ZW4odCwiYmx1ciIscj0+e3RoaXMuZm9jdXNPdXRPZkNvbXBvbmVudChyKSYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVu''@;'; put 'put ''PSExLHRoaXMuY29tcG9uZW50Q2RSZWYmJnRoaXMuY29tcG9uZW50Q2RSZWYuZGV0ZWN0Q2hhbmdlcygpKX0pfWZvY3VzT3V0T2ZDb21wb25lbnQodCl7Y29uc3Qgcj10LnJlbGF0ZWRUYXJnZXR8fGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7cmV0dXJuISh0aGlzLnRleHRJbnB1dC5jb250YWlu''@;'; put 'put ''cyhyKXx8dGhpcy50cmlnZ2VyLmNvbnRhaW5zKHIpfHx0aGlzLmxpc3Rib3guY29udGFpbnMocikpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKShvcihnYyksb3IoS3UpLG9yKHVfdCksb3IobGQpKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZh''@;'; put 'put ''Y3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSk7bGV0IGRfdD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7emwuYWRkSWNvbnMoQXAsa3Asck0sY0QpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4u''@;'; put 'put ''XHUwMjc1aW5qPW1pKHtpbXBvcnRzOltxbyxoZCxXbCx0YWUsZ2gscm0sTEQsZ00sZ2gscm1dfSksbn0pKCksWHo9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFdie31yZXR1cm4gbi5cdTAyNzVmYWM9KCgpPT57bGV0IGU7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybihlfHwoZT13YShuKSkpKHJ8''@;'; put 'put ''fG4pfX0pKCksbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWlucHV0LWNvbnRhaW5lciJdXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezImdCYmd3IoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIs''@;'; put 'put ''bnVsbD09ci5jb250cm9sP251bGw6ci5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsci5hZGRHcmlkKCkpfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltibyhbUjMsajIsT3AsSTNdKSxGb10sbmdDb250ZW50U2VsZWN0b3JzOmI1dCxkZWNsczoxMyx2YXJzOjcsY29uc3RzOltbNCwibmdJ''@;'; put 'put ''ZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbMSwiY2xyLWlucHV0LWdyb3VwIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIi''@;'; put 'put ''LCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwi''@;'; put 'put ''c3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlv''@;'; put 'put ''bih0LHIpezEmdCYmKGZvKHk1dCksV3IoMCksWW4oMSx3NXQsMSwwLCJsYWJlbCIsMCksSigyLCJkaXYiLDEpKDMsImRpdiIsMikoNCwiZGl2IiwzKSxXcig1LDEpLFdyKDYsMiksV3IoNywzKSx0ZSgpLFluKDgsQzV0LDEsMCwiY2RzLWljb24iLDQpKDksUzV0LDEsMCwiY2RzLWljb24iLDUp''@;'; put 'put ''LHRlKCksWW4oMTAsRTV0LDEsMCwibmctY29udGVudCIsMCkoMTEsTTV0LDEsMCwibmctY29udGVudCIsMCkoMTIsVDV0LDEsMCwibmctY29udGVudCIsMCksdGUoKSksMiZ0JiYoaWUoKSxydCgibmdJZiIsIXIubGFiZWwmJnIuYWRkR3JpZCgpKSxpZSgpLHJ0KCJuZ0NsYXNzIixyLmNvbnRy''@;'; put 'put ''b2xDbGFzcygpKSxpZSg2KSxydCgibmdJZiIsci5zaG93SW52YWxpZCksaWUoKSxydCgibmdJZiIsci5zaG93VmFsaWQpLGllKCkscnQoIm5nSWYiLHIuc2hvd0hlbHBlciksaWUoKSxydCgibmdJZiIsci5zaG93SW52YWxpZCksaWUoKSxydCgibmdJZiIsci5zaG93VmFsaWQpKX0sZGVwZW5k''@;'; put 'put ''ZW5jaWVzOltGaCxZcyxKcyxlbF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksUGY9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFlie2NvbnN0cnVjdG9yKHQscixpLG8sYSl7c3VwZXIodCxYeixyLGksbyxhKSx0aGlzLmluZGV4PTEsIm51bWJlciI9PT10aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0''@;'; put 'put ''QXR0cmlidXRlKCJ0eXBlIikmJmNvbnNvbGUud2FybignV2FybmluZzogSW5wdXRzIG9mIHR5cGUgIm51bWJlciIgc2hvdWxkIHV0aWxpemUgdGhlIG51bWJlci1pbnB1dCBjb21wb25lbnQgZm9yIHByb3BlciBoYW5kbGluZy5cblxuICBFeGFtcGxlIHVzYWdlOlxuICA8Y2xyLW51bWJlci1p''@;'; put 'put ''bnB1dC1jb250YWluZXI+XG4gICAgPGxhYmVsPk51bWJlciBJbnB1dDwvbGFiZWw+XG4gICAgPGlucHV0IGNsck51bWJlcklucHV0IHR5cGU9Im51bWJlciIvPlxuICA8L2Nsci1udW1iZXItaW5wdXQtY29udGFpbmVyPlxuICAgICAgJyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0''@;'; put 'put ''KXtyZXR1cm4gbmV3KHR8fG4pKHplKERzKSx6ZShNbCksemUoVjIsMTApLHplKE50KSx6ZShubykpfSxuLlx1MDI3NWRpcj0kcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjbHJJbnB1dCIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezImdCYmd3IoImNsci1p''@;'; put 'put ''bnB1dCIsITApfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltGb119KSxufSkoKSxpTWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3psLmFkZEljb25zKEFwLGtwKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1bW9kPUdpKHt0''@;'; put 'put ''eXBlOm59KSxuLlx1MDI3NWluaj1taSh7aW1wb3J0czpbcW8saGQsV2wsZ2gsZ2hdfSksbn0pKCksdk09KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzZWQ9bmV3ICRpKCExKX1nZXQgZm9jdXNDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZC5hc09ic2VydmFibGUo''@;'; put 'put ''KX1zZXQgZm9jdXNlZCh0KXt0aGlzLl9mb2N1c2VkLm5leHQodCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGhfdD0oKCk9PntjbGFzcyBue2NvbnN0''@;'; put 'put ''cnVjdG9yKCl7emwuYWRkSWNvbnMoQXAsa3ApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltxbyxpTWUsV2xdfSksbn0pKCksZl90PSgoKT0+e2NsYXNzIG57''@;'; put 'put ''fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3FvLFdsLE5ELFdkXX0pLG59KSgpLHBfdD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltxbyxXbF19KSxufSkoKSxiX3Q9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1''@;'; put 'put ''bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj1taSh7aW1wb3J0czpbcW8sV2wsR29lXX0pLG59KSgpLHNNZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1si''@;'; put 'put ''bmctY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbih0LHIpe2lmKDEmdCYmV28oRmMsNSksMiZ0KXtsZXQgaTtjaShpPXVpKCkpJiYoci50ZW1wbGF0ZT1pLmZpcnN0KX19LHN0YW5kYWxvbmU6ITEsbmdDb250ZW50U2VsZWN0b3JzOmVzLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1''@;'; put 'put ''bmN0aW9uKHQscil7MSZ0JiYoZm8oKSxZbigwLE41dCwxLDAsIm5nLXRlbXBsYXRlIikpfSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSx3X3Q9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBl''@;'; put 'put ''Om59KSxuLlx1MDI3NWluaj1taSh7aW1wb3J0czpbcW9dfSksbn0pKCksVHY9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHNNe31yZXR1cm4gbi5cdTAyNzVmYWM9KCgpPT57bGV0IGU7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybihlfHwoZT13YShuKSkpKHJ8fG4pfX0pKCksbi5cdTAyNzVkaXI9''@;'; put 'put ''JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLXRhYnMiXV0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbRm9dfSksbn0pKCksWmI9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGxNe2NvbnN0cnVjdG9yKHQscixpLG8pe2lmKCFyKXRocm93IG5ldyBFcnJvcigiY2xyVGFiTGluayBhbmQgY2xyLXRh''@;'; put 'put ''Yi1jb250ZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXRhYnMiKTtzdXBlcih0LHIpLHRoaXMuaWZBY3RpdmU9byx0aGlzLmlkPWl9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLmlmQWN0aXZlLmN1cnJlbnQ9PT10aGlzLmlkfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShVbCksemUoVHYsOCksemUoZE0pLHplKFZiKSl9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNsclRhYkxpbmsiLCIiXSxbImNsci10YWItY29udGVudCJdXSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltGb119KSxu''@;'; put 'put ''fSkoKTt2YXIgR2I9ZnVuY3Rpb24obil7cmV0dXJuIG4uSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsbi5WRVJUSUNBTD0idmVydGljYWwiLG59KEdifHx7fSk7bGV0IFBEPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmxheW91dD1HYi5IT1JJWk9OVEFMLHRoaXMuX2NoaWxkcmVu''@;'; put 'put ''PVtdfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9jaGlsZHJlbn1nZXQgYWN0aXZlVGFiKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4uZmluZCh0PT50LmFjdGl2ZSl9Z2V0IG92ZXJmbG93VGFicygpe3JldHVybiB0aGlzLmxheW91dD09PUdiLlZFUlRJQ0FMP1tdOnRoaXMuY2hpbGRyZW4u''@;'; put 'put ''ZmlsdGVyKHQ9PiEwPT09dC50YWJMaW5rLmluT3ZlcmZsb3cpfXJlZ2lzdGVyKHQpe3RoaXMuX2NoaWxkcmVuLnB1c2godCl9dW5yZWdpc3Rlcih0KXtjb25zdCByPXRoaXMuY2hpbGRyZW4uaW5kZXhPZih0KTtyPi0xJiZ0aGlzLmNoaWxkcmVuLnNwbGljZShyLDEpfX1yZXR1cm4gbi5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxDX3Q9MCx4dj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscixpKXt0aGlzLmlmQWN0aXZlU2VydmljZT10LHRoaXMuaWQ9cix0''@;'; put 'put ''aGlzLnRhYnNTZXJ2aWNlPWksdGhpcy50YWJDb250ZW50SWR8fCh0aGlzLnRhYkNvbnRlbnRJZD0iY2xyLXRhYi1jb250ZW50LSIrQ190KyspfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD09PXRoaXMuaWR9Z2V0IGFyaWFMYWJlbGxlZEJ5KCl7cmV0''@;'; put 'put ''dXJuIHRoaXMudGFic1NlcnZpY2UuY2hpbGRyZW4uZmluZCh0PT50LnRhYkxpbmsuaWQ9PT10aGlzLmlkKT8udGFiTGluaz8udGFiTGlua0lkfXNldCB0ZW1wbGF0ZVJlZih0KXt0aGlzLnZpZXdSZWY9dGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lci5jcmVhdGVFbWJl''@;'; put 'put ''ZGRlZFZpZXcodCl9bmdPbkRlc3Ryb3koKXtjb25zdCB0PXRoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXIuaW5kZXhPZih0aGlzLnZpZXdSZWYpO3Q+LTEmJnRoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXIucmVtb3ZlKHQpfX1yZXR1cm4gbi5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShWYiksemUoZE0pLHplKFBEKSl9LG4uXHUwMjc1Y21wPVByKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci10YWItY29udGVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24odCxyKXtpZigxJnQmJldvKEY1dCw3KSwyJnQpe2xl''@;'; put 'put ''dCBpO2NpKGk9dWkoKSkmJihyLnRlbXBsYXRlUmVmPWkuZmlyc3QpfX0saW5wdXRzOnt0YWJDb250ZW50SWQ6WzAsImlkIiwidGFiQ29udGVudElkIl19LHN0YW5kYWxvbmU6ITEsbmdDb250ZW50U2VsZWN0b3JzOmVzLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJ0YWJDb250ZW50UHJvamVj''@;'; put 'put ''dGVkUmVmIiwiIl0sWyJyb2xlIiwidGFicGFuZWwiLDEsInRhYi1jb250ZW50IiwzLCJpZCIsImhpZGRlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpezEmdCYmKGZvKCksWW4oMCxQNXQsMiw2LCJuZy10ZW1wbGF0ZSIsbnVsbCwwLGNkKSl9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFNf''@;'; put 'put ''dD0wO2NvbnN0IHJhZT1uZXcgRXIoIlRBQlNfSUQiKSxNX3Q9e3Byb3ZpZGU6cmFlLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gRV90KCl7cmV0dXJuImNsci10YWJzLSIrU190Kyt9fTtsZXQgVF90PTAsQXY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0LHIsaSxvLGEsbCx1KXt0aGlzLmlmQWN0''@;'; put 'put ''aXZlU2VydmljZT10LHRoaXMuaWQ9cix0aGlzLmVsPWksdGhpcy50YWJzU2VydmljZT1sLHRoaXMudGFic0lkPXUsdGhpcy50YWJMaW5rSWR8fCh0aGlzLnRhYkxpbmtJZD0iY2xyLXRhYi1saW5rLSIrVF90KyspO2NvbnN0IGc9by5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShzTWUpO3RoaXMu''@;'; put 'put ''dGVtcGxhdGVSZWZDb250YWluZXI9YS5jcmVhdGVDb21wb25lbnQoZyx2b2lkIDAsdm9pZCAwLFtbaS5uYXRpdmVFbGVtZW50XV0pLmluc3RhbmNlfWdldCBpbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMuX2luT3ZlcmZsb3cmJnRoaXMudGFic1NlcnZpY2UubGF5b3V0IT09R2IuVkVSVElDQUx9''@;'; put 'put ''c2V0IGluT3ZlcmZsb3codCl7dGhpcy5faW5PdmVyZmxvdz10fWdldCBhZGRMaW5rQ2xhc3Nlcygpe3JldHVybiF0aGlzLmluT3ZlcmZsb3d9Z2V0IGFyaWFDb250cm9scygpe3JldHVybiB0aGlzLnRhYnNTZXJ2aWNlLmNoaWxkcmVuLmZpbmQodD0+dC50YWJMaW5rPT09dGhpcyk/LnRhYkNv''@;'; put 'put ''bnRlbnQ/LnRhYkNvbnRlbnRJZH1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfWdldCB0YWJpbmRleCgpe3JldHVybiB0aGlzLmFjdGl2ZT8wOi0xfWFjdGl2YXRlKCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD10aGlzLmlk''@;'; put 'put ''fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShWYiksemUoZE0pLHplKG5vKSx6ZShMaCksemUoRHMpLHplKFBEKSx6ZShyYWUpKX0sbi5cdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2xyVGFiTGluayIsIiJdXSxob3N0QXR0''@;'; put 'put ''cnM6WyJyb2xlIiwidGFiIiwidHlwZSIsImJ1dHRvbiJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezEmdCYmd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLmFjdGl2YXRlKCl9KSwyJnQmJihPNSgiaWQiLHIudGFiTGlua0lkKSxScigiYXJpYS1jb250cm9s''@;'; put 'put ''cyIsci5hcmlhQ29udHJvbHMpKCJhcmlhLXNlbGVjdGVkIixyLmFjdGl2ZSkoInRhYmluZGV4IixyLnRhYmluZGV4KSx3cigiYnRuIiwhMCkoImJ0bi1saW5rIixyLmFkZExpbmtDbGFzc2VzKSgibmF2LWxpbmsiLHIuYWRkTGlua0NsYXNzZXMpKCJhY3RpdmUiLHIuYWN0aXZlKSl9LGlucHV0''@;'; put 'put ''czp7dGFiTGlua0lkOlswLCJpZCIsInRhYkxpbmtJZCJdLGluT3ZlcmZsb3c6WzAsImNsclRhYkxpbmtJbk92ZXJmbG93IiwiaW5PdmVyZmxvdyJdfSxzdGFuZGFsb25lOiExfSksbn0pKCksa3Y9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0LHIsaSl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9''@;'; put 'put ''dCx0aGlzLmlkPXIsdGhpcy50YWJzU2VydmljZT1pLGkucmVnaXN0ZXIodGhpcyl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1uZ09uRGVzdHJveSgpe3RoaXMudGFic1NlcnZpY2UudW5yZWdpc3Rlcih0aGlzKX19cmV0dXJuIG4u''@;'; put 'put ''XHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoVmIpLHplKGRNKSx6ZShQRCkpfSxuLlx1MDI3NWNtcD1Qcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItdGFiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKHQscixpKXtpZigxJnQmJihGYShpLEF2LDcpLEZhKGks''@;'; put 'put ''eHYsNykpLDImdCl7bGV0IG87Y2kobz11aSgpKSYmKHIudGFiTGluaz1vLmZpcnN0KSxjaShvPXVpKCkpJiYoci50YWJDb250ZW50PW8uZmlyc3QpfX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbYm8oW2t2dF0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6ZXMsZGVjbHM6MSx2YXJzOjAsdGVtcGxh''@;'; put 'put ''dGU6ZnVuY3Rpb24odCxyKXsxJnQmJihmbygpLFdyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksbE1lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NWRpcj0kcih7dHlwZTpuLHNlbGVjdG9yczpbWyIi''@;'; put 'put ''LCJjbHJUYWJBY3Rpb24iLCIiXV0saG9zdEF0dHJzOlsidGFiaW5kZXgiLCIwIl0sc3RhbmRhbG9uZTohMX0pLG59KSgpLGlhZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxl''@;'; put 'put ''Y3RvcnM6W1siY2xyLXRhYi1vdmVyZmxvdy1jb250ZW50Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHQscil7MiZ0JiZ3cigiZHJvcGRvd24tbWVudSIsITApfSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9yczplcyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpm''@;'; put 'put ''dW5jdGlvbih0LHIpezEmdCYmKGZvKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSwkYj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscixpLG8sYSl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9dCx0aGlzLnRvZ2dsZVNlcnZpY2U9cix0aGlzLnRhYnNTZXJ2aWNlPWksdGhpcy50''@;'; put 'put ''YWJzSWQ9byx0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLnRhYkxpbmtFbGVtZW50cz1bXSx0aGlzLl9tb3VzZWRvd249ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzPVtdfWdldCBsYXlvdXQoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5sYXlvdXR9''@;'; put 'put ''c2V0IGxheW91dCh0KXtPYmplY3Qua2V5cyhHYikubWFwKHI9PkdiW3JdKS5pbmRleE9mKHQpPj0wJiYodGhpcy50YWJzU2VydmljZS5sYXlvdXQ9dCl9Z2V0IHRhYkxpbmtEaXJlY3RpdmVzKCl7cmV0dXJuIHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzfWdldCBhY3RpdmVUYWJJbk92ZXJmbG93''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2Uub3ZlcmZsb3dUYWJzLmluZGV4T2YodGhpcy50YWJzU2VydmljZS5hY3RpdmVUYWIpPi0xfWdldCBhY3RpdmVUYWJQb3NpdGlvbigpe3JldHVybiB0aGlzLl90YWJMaW5rRGlyZWN0aXZlcy5maW5kSW5kZXgodD0+dC5hY3RpdmUpfWdldCBpc0N1''@;'; put 'put ''cnJlbnRJbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMua2V5Rm9jdXMuY3VycmVudD49dGhpcy5vdmVyZmxvd1Bvc2l0aW9ufWdldCBpc1ZlcnRpY2FsKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09R2IuVkVSVElDQUx9c2V0IHRhYk92ZXJmbG93RWwodCl7dGhpcy5fdGFiT3ZlcmZsb3dFbD10JiZ0''@;'; put 'put ''Lm5hdGl2ZUVsZW1lbnQsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJnQmJnRoaXMua2V5Rm9jdXMuZm9jdXNDdXJyZW50KCl9Z2V0IG92ZXJmbG93UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMuZmlsdGVyKHQ9PiF0LmluT3ZlcmZsb3cpLmxlbmd0aH1zZXQgdGFi''@;'; put 'put ''Q29udGVudFZpZXdDb250YWluZXIodCl7dGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lcj10fW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yVGFiTGlua0NoYW5nZXMoKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1''@;'; put 'put ''c2godGhpcy5saXN0ZWRGb3JUYWJzQWN0aW9uc0NoYW5nZXMoKSksdHlwZW9mIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ+InUiJiZ0aGlzLnRhYkxpbmtEaXJlY3RpdmVzWzBdJiZ0aGlzLnRhYkxpbmtEaXJlY3RpdmVzWzBdLmFjdGl2YXRlKCksdGhpcy5rZXlGb2N1cy5jdXJyZW50''@;'; put 'put ''PXRoaXMuYWN0aXZlVGFiUG9zaXRpb259bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCh0PT57dC51bnN1YnNjcmliZSgpfSl9dG9nZ2xlT3ZlcmZsb3dPblBvc2l0aW9uKHQpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPXQ+PXRoaXMub3ZlcmZsb3dQb3NpdGlvbn1y''@;'; put 'put ''ZXNldEtleUZvY3VzQ3VycmVudFRvQWN0aXZlKHQpeyF0aGlzLmtleUZvY3VzLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModC5yZWxhdGVkVGFyZ2V0KSYmdGhpcy5rZXlGb2N1cy5jdXJyZW50IT09dGhpcy5hY3RpdmVUYWJQb3NpdGlvbiYmKHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFj''@;'; put 'put ''dGl2ZVRhYlBvc2l0aW9uKX10b2dnbGVPdmVyZmxvd09uQ2xpY2soKXt0aGlzLmtleUZvY3VzLm1vdmVUbyh0aGlzLmlzQ3VycmVudEluT3ZlcmZsb3cmJnRoaXMudG9nZ2xlU2VydmljZS5vcGVuP3RoaXMub3ZlcmZsb3dQb3NpdGlvbi0xOnRoaXMub3ZlcmZsb3dQb3NpdGlvbiksdGhpcy5f''@;'; put 'put ''bW91c2Vkb3duPSExfW9wZW5PdmVyZmxvd09uRm9jdXMoKXshdGhpcy5fbW91c2Vkb3duJiYhdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJnRoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMuYWN0aXZlVGFiUG9zaXRpb24pfWNsb3NlT25Gb2N1c091dCh0KXshdGhpcy5fdGFiT3ZlcmZsb3dFbC5j''@;'; put 'put ''b250YWlucyh0LnJlbGF0ZWRUYXJnZXQpJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmIXRoaXMuX21vdXNlZG93biYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMudGFiTGlua0VsZW1lbnRzW3RoaXMuYWN0aXZlVGFiUG9zaXRpb25dPT09dC5yZWxhdGVkVGFyZ2V0JiYodGhp''@;'; put 'put ''cy5rZXlGb2N1cy5jdXJyZW50PXRoaXMuYWN0aXZlVGFiUG9zaXRpb24pKX1jbG9zZU9uRXNjYXBlS2V5KCl7dGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfWNsb3NlT25PdXRzaWRlQ2xpY2sodCxyKXtjb25zdCBpPXRoaXMudGFic0FjdGlvbnMuc29tZShv''@;'; put 'put ''PT5vLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModC50YXJnZXQpKTt0LnRhcmdldD09PXJ8fHIuY29udGFpbnModC50YXJnZXQpfHxpfHwhdGhpcy5fdGFiT3ZlcmZsb3dFbC5jb250YWlucyh0LnRhcmdldCkmJnRoaXMuaXNDdXJyZW50SW5PdmVyZmxvdyYmdGhpcy5rZXlGb2N1cy5tb3ZlVG8o''@;'; put 'put ''dGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfXNldFRhYkxpbmtFbGVtZW50cygpe3RoaXMuX3RhYkxpbmtEaXJlY3RpdmVzPXRoaXMudGFicy5tYXAodD0+dC50YWJMaW5rKSx0aGlzLnRhYkxpbmtFbGVtZW50cz10aGlzLl90YWJMaW5rRGlyZWN0aXZlcy5tYXAodD0+dC5lbC5uYXRpdmVFbGVt''@;'; put 'put ''ZW50KSx0aGlzLnRhYnNBY3Rpb25zJiZ0aGlzLnRhYnNBY3Rpb25zJiZ0aGlzLnRhYkxpbmtFbGVtZW50cy5wdXNoKC4uLnRoaXMudGFic0FjdGlvbnMubWFwKHQ9PnQubmF0aXZlRWxlbWVudCkpfWxpc3RlbkZvclRhYkxpbmtDaGFuZ2VzKCl7cmV0dXJuIHRoaXMudGFicy5jaGFuZ2VzLnBp''@;'; put 'put ''cGUocWcodGhpcy50YWJzLm1hcCh0PT50LnRhYkxpbmspKSkuc3Vic2NyaWJlKCgpPT50aGlzLnNldFRhYkxpbmtFbGVtZW50cygpKX1saXN0ZWRGb3JUYWJzQWN0aW9uc0NoYW5nZXMoKXtyZXR1cm4gdGhpcy50YWJzQWN0aW9ucy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+dGhpcy5zZXRUYWJM''@;'; put 'put ''aW5rRWxlbWVudHMoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKFZiKSx6ZShLdSksemUoUEQpLHplKHJhZSksemUoaWwpKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLXRhYnMiXV0sY29udGVudFF1ZXJpZXM6''@;'; put 'put ''ZnVuY3Rpb24odCxyLGkpe2lmKDEmdCYmKEZhKGksbE1lLDUsbm8pLEZhKGksa3YsNCkpLDImdCl7bGV0IG87Y2kobz11aSgpKSYmKHIudGFic0FjdGlvbnM9byksY2kobz11aSgpKSYmKHIudGFicz1vKX19LHZpZXdRdWVyeTpmdW5jdGlvbih0LHIpe2lmKDEmdCYmKFdvKG1NLDcpLFdvKGlh''@;'; put 'put ''ZSw1LG5vKSxXbyhINXQsNyxEcykpLDImdCl7bGV0IGk7Y2koaT11aSgpKSYmKHIua2V5Rm9jdXM9aS5maXJzdCksY2koaT11aSgpKSYmKHIudGFiT3ZlcmZsb3dFbD1pLmZpcnN0KSxjaShpPXVpKCkpJiYoci50YWJDb250ZW50Vmlld0NvbnRhaW5lcj1pLmZpcnN0KX19LGhvc3RWYXJzOjIs''@;'; put 'put ''aG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHQscil7MiZ0JiZ3cigidGFicy12ZXJ0aWNhbCIsci5pc1ZlcnRpY2FsKX0saW5wdXRzOntsYXlvdXQ6WzAsImNsckxheW91dCIsImxheW91dCJdfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltibyhbVmIsUEQsTV90XSksemcoW2k3XSldLG5nQ29udGVu''@;'; put 'put ''dFNlbGVjdG9yczpCNXQsZGVjbHM6Nix2YXJzOjMsY29uc3RzOltbInRhYkNvbnRlbnRWaWV3Q29udGFpbmVyIiwiIl0sWyJ0YWJPdmVyZmxvd1RyaWdnZXIiLCIiXSxbInJvbGUiLCJ0YWJsaXN0IiwiY2xyRGlyZWN0aW9uIiwiYm90aCIsMSwibmF2IiwzLCJjbHJGb2N1c0NoYW5nZSIsImZv''@;'; put 'put ''Y3Vzb3V0IiwiY2xyS2V5Rm9jdXMiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzQsIm5nSWYiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsIm5hdi1pdGVtIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsInRhYnMtb3ZlcmZsb3ciLCJib3R0b20t''@;'; put 'put ''cmlnaHQiXSxbInJvbGUiLCJhcHBsaWNhdGlvbiIsMSwibmF2LWl0ZW0iXSxbInR5cGUiLCJidXR0b24iLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImJ0biIsImJ0bi1saW5rIiwibmF2LWxpbmsiLCJkcm9wZG93bi10b2dnbGUiLDMsIm1vdXNlZG93biIsImZvY3VzIiwiY2xpY2siXSxbInNo''@;'; put 'put ''YXBlIiwiZWxsaXBzaXMtaG9yaXpvbnRhbCJdLFszLCJrZXlkb3duLmVzY2FwZSIsImNsaWNrIiwiZm9jdXNvdXQiLDQsIm5nSWYiXSxbMywia2V5ZG93bi5lc2NhcGUiLCJjbGljayIsImZvY3Vzb3V0Il0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLDQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rp''@;'; put 'put ''b24odCxyKXtpZigxJnQpe2NvbnN0IGk9d24oKTtmbyhWNXQpLEooMCwidWwiLDIpLHd0KCJjbHJGb2N1c0NoYW5nZSIsZnVuY3Rpb24oYSl7cmV0dXJuIFllKGkpLFhlKHIudG9nZ2xlT3ZlcmZsb3dPblBvc2l0aW9uKGEpKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oYSl7cmV0dXJuIFllKGkp''@;'; put 'put ''LFhlKHIucmVzZXRLZXlGb2N1c0N1cnJlbnRUb0FjdGl2ZShhKSl9KSxZbigxLFU1dCwyLDEsIm5nLWNvbnRhaW5lciIsMykoMixaNXQsNywxMSwibmctY29udGFpbmVyIiw0KSxXcigzKSx0ZSgpLGF1KDQsbnVsbCwwKX0yJnQmJihydCgiY2xyS2V5Rm9jdXMiLHIudGFiTGlua0VsZW1lbnRz''@;'; put 'put ''KSxpZSgpLHJ0KCJuZ0Zvck9mIixyLnRhYkxpbmtEaXJlY3RpdmVzKSxpZSgpLHJ0KCJuZ0lmIixyLnRhYnNTZXJ2aWNlLm92ZXJmbG93VGFicy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W1JmLFlzLElmLEpzLG1NLGlhZV0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCkseF90PSgoKT0+e2Ns''@;'; put 'put ''YXNzIG57Y29uc3RydWN0b3IoKXt6bC5hZGRJY29ucyhOU2UpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltxbyxybSxXbCx3X3QsdGFlLHJtXX0pLG59KSgp''@;'; put 'put ''LG9hZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5uYXZHcm91cENvdW50PTB9cmVnaXN0ZXJOYXZHcm91cCgpe3RoaXMubmF2R3JvdXBDb3VudCsrfXVucmVnaXN0ZXJOYXZHcm91cCgpe3RoaXMubmF2R3JvdXBDb3VudC0tfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''dCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxhYWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2ljb25zPTB9Z2V0IGhhc0ljb25zKCl7cmV0dXJuIHRoaXMuX2ljb25zPjB9cmVnaXN0ZXJJ''@;'; put 'put ''Y29uKCl7dGhpcy5faWNvbnMrK311bnJlZ2lzdGVySWNvbigpe3RoaXMuX2ljb25zLS19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHNhZT0oKCk9Pntj''@;'; put 'put ''bGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5fYW5pbWF0ZU9uQ29sbGFwc2VkPW5ldyBNcix0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkPW5ldyBNcix0aGlzLl9jb2xsYXBzZWQ9ITEsdGhpcy5fY29sbGFwc2libGU9ITF9Z2V0IGFuaW1hdGVPbkNvbGxhcHNlZCgpe3JldHVybiB0aGlzLl9hbmlt''@;'; put 'put ''YXRlT25Db2xsYXBzZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IGNvbGxhcHNlZENoYW5nZWQoKXtyZXR1cm4gdGhpcy5fY29sbGFwc2VkQ2hhbmdlZC5hc09ic2VydmFibGUoKX1nZXQgY29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuX2NvbGxhcHNlZH1zZXQgY29sbGFwc2VkKHQpe3Q9ISF0LHRoaXMu''@;'; put 'put ''Y29sbGFwc2libGUmJnRoaXMuX2NvbGxhcHNlZCE9PXQmJnRoaXMudXBkYXRlQ29sbGFwc2VCZWhhdmlvcih0KX1nZXQgY29sbGFwc2libGUoKXtyZXR1cm4gdGhpcy5fY29sbGFwc2libGV9c2V0IGNvbGxhcHNpYmxlKHQpe3RoaXMuX2NvbGxhcHNpYmxlIT09KHQ9ISF0KSYmKCF0JiZ0aGlz''@;'; put 'put ''LmNvbGxhcHNlZCYmdGhpcy51cGRhdGVDb2xsYXBzZUJlaGF2aW9yKCExKSx0aGlzLl9jb2xsYXBzaWJsZT10KX11cGRhdGVDb2xsYXBzZUJlaGF2aW9yKHQpe3RoaXMuX2FuaW1hdGVPbkNvbGxhcHNlZC5uZXh0KHQpLHRoaXMuX2NvbGxhcHNlZD10LHRoaXMuX2NvbGxhcHNlZENoYW5nZWQu''@;'; put 'put ''bmV4dCh0KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksbGFlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxyLGksbyl7dGhpcy5fbmF2U2Vydmlj''@;'; put 'put ''ZT10LHRoaXMuX25hdkljb25TZXJ2aWNlPXIsdGhpcy5fbmF2R3JvdXBSZWdpc3RyYXRpb25TZXJ2aWNlPWksdGhpcy5jb21tb25TdHJpbmdzPW8sdGhpcy5jb250ZW50SWQ9UGgoKSx0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkPW5ldyBLcighMCksdGhpcy5fc3ViPXQuY29sbGFwc2VkQ2hhbmdl''@;'; put 'put ''ZC5zdWJzY3JpYmUoYT0+e3RoaXMuX2NvbGxhcHNlZENoYW5nZWQuZW1pdChhKX0pfWdldCBjb2xsYXBzaWJsZSgpe3JldHVybiB0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNpYmxlfXNldCBjb2xsYXBzaWJsZSh0KXt0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNpYmxlPXR9Z2V0IGNvbGxhcHNl''@;'; put 'put ''ZCgpe3JldHVybiB0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNlZH1zZXQgY29sbGFwc2VkKHQpe3RoaXMuX25hdlNlcnZpY2UuY29sbGFwc2VkPXR9Z2V0IGhhc05hdkdyb3Vwcygpe3JldHVybiB0aGlzLl9uYXZHcm91cFJlZ2lzdHJhdGlvblNlcnZpY2UubmF2R3JvdXBDb3VudD4wfWdldCBo''@;'; put 'put ''YXNJY29ucygpe3JldHVybiB0aGlzLl9uYXZJY29uU2VydmljZS5oYXNJY29uc31nZXQgYXJpYUV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuY29sbGFwc2libGU/dGhpcy5jb2xsYXBzZWQ/ImZhbHNlIjoidHJ1ZSI6bnVsbH1uZ09uRGVzdHJveSgpe3RoaXMuX3N1Yi51bnN1YnNjcmliZSgpfXRv''@;'; put 'put ''Z2dsZUJ5QnV0dG9uKCl7dGhpcy5jb2xsYXBzZWQ9IXRoaXMuY29sbGFwc2VkfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShzYWUpLHplKGFhZSksemUob2FlKSx6ZShpbCkpfSxuLlx1MDI3NWNtcD1Qcih7dHlwZTpuLHNlbGVjdG9yczpbWyJj''@;'; put 'put ''bHItdmVydGljYWwtbmF2Il1dLGhvc3RBdHRyczpbMSwiY2xyLXZlcnRpY2FsLW5hdiJdLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHQscil7MiZ0JiZ3cigiaXMtY29sbGFwc2VkIixyLmNvbGxhcHNlZCkoImhhcy1uYXYtZ3JvdXBzIixyLmhhc05hdkdyb3VwcykoImhhcy1p''@;'; put 'put ''Y29ucyIsci5oYXNJY29ucyl9LGlucHV0czp7dG9nZ2xlTGFiZWw6WzAsImNsclZlcnRpY2FsTmF2VG9nZ2xlTGFiZWwiLCJ0b2dnbGVMYWJlbCJdLGNvbGxhcHNpYmxlOlswLCJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNpYmxlIiwiY29sbGFwc2libGUiXSxjb2xsYXBzZWQ6WzAsImNsclZlcnRp''@;'; put 'put ''Y2FsTmF2Q29sbGFwc2VkIiwiY29sbGFwc2VkIl19LG91dHB1dHM6e19jb2xsYXBzZWRDaGFuZ2VkOiJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNlZENoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2JvKFtzYWUsYWFlLG9hZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6ZXMsZGVjbHM6NCx2''@;'; put 'put ''YXJzOjMsY29uc3RzOltbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsIm5hdi10cmlnZ2VyIiwzLCJvbi1jb2xsYXBzZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsIm5hdi1jb250ZW50IiwzLCJpZCJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwibmF2LWJ0biIsImFyaWEtaGlkZGVuIiwidHJ1''@;'; put 'put ''ZSIsInRhYmluZGV4IiwiLTEiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJuYXYtdHJpZ2dlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUtZG91YmxlIiwxLCJuYXYtdHJpZ2dlci1pY29uIl0sWyJ0eXBlIiwiYnV0dG9uIiwiYXJpYS1oaWRkZW4iLCJ0cnVl''@;'; put 'put ''IiwidGFiaW5kZXgiLCItMSIsMSwibmF2LWJ0biIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24odCxyKXsxJnQmJihmbygpLFluKDAsRzV0LDIsNiwiYnV0dG9uIiwwKSxKKDEsImRpdiIsMSksV3IoMiksWW4oMywkNXQsMSwyLCJidXR0b24iLDIpLHRlKCkpLDImdCYmKHJ0KCJuZ0lm''@;'; put 'put ''IixyLmNvbGxhcHNpYmxlKSxpZSgpLHJ0KCJpZCIsci5jb250ZW50SWQpLGllKDIpLHJ0KCJuZ0lmIixyLmNvbGxhcHNpYmxlJiZyLmNvbGxhcHNlZCkpfSxkZXBlbmRlbmNpZXM6W1lzLEpzXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxjYWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigp''@;'; put 'put ''e3RoaXMuX2V4cGFuZENoYW5nZT1uZXcgTXJ9Z2V0IGV4cGFuZENoYW5nZSgpe3JldHVybiB0aGlzLl9leHBhbmRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9ZXhwYW5kKCl7dGhpcy5fZXhwYW5kQ2hhbmdlLm5leHQoITApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5l''@;'; put 'put ''dyh0fHxuKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx1YWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0LHIsaSl7dGhpcy5kZXN0cm95JD1uZXcgTXIsaSYmSmcodC5uYXRpdmVFbGVtZW50LCJjbGljayIpLnBpcGUodjAodGhpcy5k''@;'; put 'put ''ZXN0cm95JCkpLnN1YnNjcmliZSgoKT0+e2kuZXhwYW5kKCksci5tYXJrRm9yQ2hlY2soKX0pfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKG5vKSx6ZShVbCksemUoY2FlLDgpKX0s''@;'; put 'put ''bi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2xyVmVydGljYWxOYXZMaW5rIiwiIl1dLGhvc3RBdHRyczpbMSwibmF2LWxpbmsiXSxzdGFuZGFsb25lOiExLGF0dHJzOlg1dCxuZ0NvbnRlbnRTZWxlY3RvcnM6SjV0LGRlY2xzOjMsdmFyczowLGNvbnN0czpbWzEsIm5h''@;'; put 'put ''di10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKHQscil7MSZ0JiYoZm8oUTV0KSxXcigwKSxKKDEsInNwYW4iLDApLFdyKDIsMSksdGUoKSl9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLGNNZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7emwuYWRkSWNvbnMock0sUFNlKX19cmV0dXJu''@;'; put 'put ''IG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj1taSh7aW1wb3J0czpbcW8sV2wscm0sV3oscm0sV2wsV3pdfSksbn0pKCksSV90PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3BfdCxiX3QseF90LGNNZSxmX3RdfSksbn0pKCksX009KCgpPT57Y2xhc3MgbiBleHRlbmRzIFdTZXtjb25zdHJ1Y3Rvcih0LHIsaSl7c3VwZXIodCxyLGkp''@;'; put 'put ''fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShubyksemUod29lKSx6ZShUbCw4KSl9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNka1RyYXBGb2N1cyIsIiJdXSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltGb119KSxu''@;'; put 'put ''fSkoKSxKej0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPW1pKHt9KSxufSkoKTtjb25zdCBMX3Q9L2QrLittKy4reSsvaSxPX3Q9L20rLitkKy4reSsvaSxO''@;'; put 'put ''X3Q9L2QrfG0rfHkrL2ksRl90PS9cZCsvZyxQX3Q9L01vYmkvaSxIX3Q9L1x1MjAwZi9nLGVXPXtuYW1lOiJMSVRUTEVfRU5ESUFOIixmb3JtYXQ6WyJERCIsIk1NIiwiWVlZWSJdfSxwYWU9e25hbWU6Ik1JRERMRV9FTkRJQU4iLGZvcm1hdDpbIk1NIiwiREQiLCJZWVlZIl19LFZfdD17bmFt''@;'; put 'put ''ZToiQklHX0VORElBTiIsZm9ybWF0OlsiWVlZWSIsIk1NIiwiREQiXX07ZnVuY3Rpb24gZE1lKG4sZSl7cmV0dXJuIG5ldyBEYXRlKG4sZSsxLDApLmdldERhdGUoKX1jbGFzcyBXX3R7Y29uc3RydWN0b3IoZSx0PSExLHI9ITEsaT0hMSxvPSExLGE9ITEsbD0hMSx1PSExKXt0aGlzLmRheU1v''@;'; put 'put ''ZGVsPWUsdGhpcy5pc1RvZGF5c0RhdGU9dCx0aGlzLmlzRXhjbHVkZWQ9cix0aGlzLmlzRGlzYWJsZWQ9aSx0aGlzLmlzU2VsZWN0ZWQ9byx0aGlzLmlzRm9jdXNhYmxlPWEsdGhpcy5pc1JhbmdlU3RhcnREYXk9bCx0aGlzLmlzUmFuZ2VFbmREYXk9dX1nZXQgdGFiSW5kZXgoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5pc0ZvY3VzYWJsZT8wOi0xfX1jbGFzcyBEM3tjb25zdHJ1Y3RvcihlLHQscil7dGhpcy55ZWFyPWUsdGhpcy5tb250aD10LHRoaXMuZGF0ZT1yfWlzRXF1YWwoZSl7cmV0dXJuISFlJiZ0aGlzLnllYXI9PT1lLnllYXImJnRoaXMubW9udGg9PT1lLm1vbnRoJiZ0aGlzLmRhdGU9PT1l''@;'; put 'put ''LmRhdGV9dG9EYXRlKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF0ZSl9aW5jcmVtZW50QnkoZSl7Y29uc3QgdD1uZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRhdGUrZSk7cmV0dXJuIG5ldyBEMyh0LmdldEZ1bGxZZWFyKCksdC5nZXRN''@;'; put 'put ''b250aCgpLHQuZ2V0RGF0ZSgpKX1jbG9uZSgpe3JldHVybiBuZXcgRDModGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXRlKX10b0NvbXBhcmlzb25TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLnllYXJ9JHt0aGlzLnBhZCh0aGlzLm1vbnRoKX0ke3RoaXMucGFkKHRoaXMuZGF0ZSl9YH10b0Rh''@;'; put 'put ''dGVTdHJpbmcoKXtyZXR1cm4gdGhpcy50b0RhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcodm9pZCAwLHt3ZWVrZGF5OiJsb25nIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIix5ZWFyOiJudW1lcmljIn0pfWlzQmVmb3JlKGUsdD0hMSl7cmV0dXJuIHQ/dGhpcy50b0RhdGUoKS5nZXRUaW1l''@;'; put 'put ''KCk8PWU/LnRvRGF0ZSgpLmdldFRpbWUoKTp0aGlzLnRvRGF0ZSgpLmdldFRpbWUoKTxlPy50b0RhdGUoKS5nZXRUaW1lKCl9aXNBZnRlcihlLHQ9ITEpe3JldHVybiB0P3RoaXMudG9EYXRlKCkuZ2V0VGltZSgpPj1lPy50b0RhdGUoKS5nZXRUaW1lKCk6dGhpcy50b0RhdGUoKS5nZXRUaW1l''@;'; put 'put ''KCk+ZT8udG9EYXRlKCkuZ2V0VGltZSgpfXBhZChlKXtyZXR1cm4gZTwxMD9gMCR7ZX1gOmAke2V9YH19Y2xhc3MgWV90e2NvbnN0cnVjdG9yKGUsdCxyLGksbyxhLGwpe3RoaXMuY2FsZW5kYXI9ZSx0aGlzLnNlbGVjdGVkRGF5PXQsdGhpcy5zZWxlY3RlZEVuZERheT1yLHRoaXMuZm9jdXNh''@;'; put 'put ''YmxlRGF5PWksdGhpcy50b2RheT1vLHRoaXMuZmlyc3REYXlPZldlZWs9YSx0aGlzLmV4Y2x1ZGVkRGF0ZXM9bCx0aGlzLmN1cnJNb250aERheVZpZXdzPVtdLHRoaXMuaW5pdGlhbGl6ZUNhbGVuZGFyVmlldygpfWdldCBjYWxlbmRhclZpZXcoKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXJWaWV3''@;'; put 'put ''fXVwZGF0ZUZvY3VzYWJsZURheShlKXt0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5mb2N1c2FibGVEYXksITEpLHRoaXMuc2V0Rm9jdXNhYmxlRmxhZyhlLCEwKSx0aGlzLmZvY3VzYWJsZURheT1lfXVwZGF0ZVNlbGVjdGVkRGF5KGUpe3RoaXMuc2V0U2VsZWN0ZWREYXkodGhpcy5zZWxl''@;'; put 'put ''Y3RlZERheSwhMSksdGhpcy5zZWxlY3RlZERheT1lLHRoaXMuc2V0U2VsZWN0ZWREYXkoZSwhMCl9dXBkYXRlU2VsZWN0ZWRFbmREYXkoZSl7dGhpcy5zZXRTZWxlY3RlZERheSh0aGlzLnNlbGVjdGVkRW5kRGF5LCExKSx0aGlzLnNlbGVjdGVkRW5kRGF5PWUsdGhpcy5zZXRTZWxlY3RlZERh''@;'; put 'put ''eShlLCEwKX1pbml0aWFsaXplQ2FsZW5kYXJWaWV3KCl7Y29uc3QgZT10aGlzLmNhbGVuZGFyLnByZXZpb3VzTW9udGgoKSx0PXRoaXMuY2FsZW5kYXIubmV4dE1vbnRoKCkscj10aGlzLm51bURheXNGcm9tUHJldk1vbnRoSW5DYWxWaWV3KHRoaXMuY2FsZW5kYXIueWVhcix0aGlzLmNhbGVu''@;'; put 'put ''ZGFyLm1vbnRoKSxpPTQyLSh0aGlzLmNhbGVuZGFyLmRheXMubGVuZ3RoK3IpO2xldCBvPVtdLGE9W107cj4wJiYobz10aGlzLmdlbmVyYXRlRGF5Vmlld01vZGVscyhlLmRheXMuc2xpY2UoLTEqciksITAsITEpKSx0aGlzLmN1cnJNb250aERheVZpZXdzPXRoaXMuZ2VuZXJhdGVEYXlWaWV3''@;'; put 'put ''TW9kZWxzKHRoaXMuY2FsZW5kYXIuZGF5cywhMSwhMCksaT4wJiYoYT10aGlzLmdlbmVyYXRlRGF5Vmlld01vZGVscyh0LmRheXMuc2xpY2UoMCxpKSwhMCwhMSkpLHRoaXMuX2NhbGVuZGFyVmlldz10aGlzLmdlbmVyYXRlQ2FsZW5kYXJWaWV3KG8sdGhpcy5jdXJyTW9udGhEYXlWaWV3cyxh''@;'; put 'put ''KSx0aGlzLmluaXRpYWxpemVTZWxlY3RlZERheSgpLHRoaXMuaW5pdGlhbGl6ZUZvY3VzYWJsZURheSgpfWlzRGF0ZUV4Y2x1ZGVkKGUpe2NvbnN0e21pbkRhdGU6dCxtYXhEYXRlOnJ9PXRoaXMuZXhjbHVkZWREYXRlcyxpPXQudG9Db21wYXJpc29uU3RyaW5nKCksbz1yLnRvQ29tcGFyaXNv''@;'; put 'put ''blN0cmluZygpLGE9ZS50b0NvbXBhcmlzb25TdHJpbmcoKTtyZXR1cm4hKGE+PWkmJmE8PW8pfWdlbmVyYXRlRGF5Vmlld01vZGVscyhlLHQscil7Y29uc3QgaT1lLm1hcChvPT5uZXcgV190KG8sITEsdCx0aGlzLmlzRGF0ZUV4Y2x1ZGVkKG8pLCExLCExKSk7cmV0dXJuIHImJnRoaXMuY2Fs''@;'; put 'put ''ZW5kYXIuaXNEYXlJbkNhbGVuZGFyKHRoaXMudG9kYXkpJiYoaVt0aGlzLnRvZGF5LmRhdGUtMV0uaXNUb2RheXNEYXRlPSEwKSxpfW51bURheXNGcm9tUHJldk1vbnRoSW5DYWxWaWV3KGUsdCl7Y29uc3Qgcj1mdW5jdGlvbiBqX3QobixlLHQpe3JldHVybiBuZXcgRGF0ZShuLGUsdCkuZ2V0''@;'; put 'put ''RGF5KCl9KGUsdCwxKTtyZXR1cm4gcj49dGhpcy5maXJzdERheU9mV2Vlaz9yLXRoaXMuZmlyc3REYXlPZldlZWs6NytyLXRoaXMuZmlyc3REYXlPZldlZWt9aXNEYXlJbkNhbGVuZGFyVmlldyhlKXtyZXR1cm4hIXRoaXMuY2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFyKGUpfWdlbmVyYXRlQ2Fs''@;'; put 'put ''ZW5kYXJWaWV3KGUsdCxyKXtjb25zdCBpPVsuLi5lLC4uLnQsLi4ucl0sbz1bXTtmb3IobGV0IGE9MDthPDY7YSsrKW9bYV09aS5zbGljZSg3KmEsNyooYSsxKSk7cmV0dXJuIG99aW5pdGlhbGl6ZVNlbGVjdGVkRGF5KCl7dGhpcy5zZXRTZWxlY3RlZERheSh0aGlzLnNlbGVjdGVkRGF5LCEw''@;'; put 'put ''KSx0aGlzLnNldFNlbGVjdGVkRGF5KHRoaXMuc2VsZWN0ZWRFbmREYXksITApfWluaXRpYWxpemVGb2N1c2FibGVEYXkoKXt0aGlzLmZvY3VzYWJsZURheSYmdGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMuZm9jdXNhYmxlRGF5KT90aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5mb2N1''@;'; put 'put ''c2FibGVEYXksITApOnRoaXMuc2VsZWN0ZWREYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnNlbGVjdGVkRGF5KT8odGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuc2VsZWN0ZWREYXksITApLHRoaXMuZm9jdXNhYmxlRGF5PXRoaXMuc2VsZWN0ZWREYXkuY2xvbmUoKSk6dGhp''@;'; put 'put ''cy5zZWxlY3RlZEVuZERheSYmdGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMuc2VsZWN0ZWRFbmREYXkpPyh0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5zZWxlY3RlZEVuZERheSwhMCksdGhpcy5mb2N1c2FibGVEYXk9dGhpcy5zZWxlY3RlZEVuZERheS5jbG9uZSgpKTp0aGlzLmlz''@;'; put 'put ''RGF5SW5DYWxlbmRhclZpZXcodGhpcy50b2RheSk/KHRoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLnRvZGF5LCEwKSx0aGlzLmZvY3VzYWJsZURheT10aGlzLnRvZGF5LmNsb25lKCkpOih0aGlzLmZvY3VzYWJsZURheT1uZXcgRDModGhpcy5jYWxlbmRhci55ZWFyLHRoaXMuY2FsZW5kYXIu''@;'; put 'put ''bW9udGgsMTUpLHRoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLmZvY3VzYWJsZURheSwhMCkpfXNldEZvY3VzYWJsZUZsYWcoZSx0KXtlJiYodGhpcy5jdXJyTW9udGhEYXlWaWV3c1tlLmRhdGUtMV0uaXNGb2N1c2FibGU9dCl9c2V0U2VsZWN0ZWREYXkoZSx0KXtlJiZ0aGlzLmlzRGF5SW5D''@;'; put 'put ''YWxlbmRhclZpZXcoZSkmJih0aGlzLmN1cnJNb250aERheVZpZXdzW2U/LmRhdGUtMV0uaXNTZWxlY3RlZD10KX19bGV0IFZEPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCl7dGhpcy5sb2NhbGU9dCx0aGlzLl9maXJzdERheU9mV2Vlaz0wLHRoaXMuaW5pdGlhbGl6ZUxvY2FsZURhdGEo''@;'; put 'put ''KX1nZXQgZmlyc3REYXlPZldlZWsoKXtyZXR1cm4gdGhpcy5fZmlyc3REYXlPZldlZWt9Z2V0IGxvY2FsZURheXMoKXtyZXR1cm4gdGhpcy5fbG9jYWxlRGF5c31nZXQgbG9jYWxlRGF5c05hcnJvdygpe3JldHVybiB0aGlzLl9sb2NhbGVEYXlzLm1hcCh0PT50Lm5hcnJvdyl9Z2V0IGxvY2Fs''@;'; put 'put ''ZU1vbnRoc0FiYnJldmlhdGVkKCl7cmV0dXJuIHRoaXMuX2xvY2FsZU1vbnRoc0FiYnJldmlhdGVkfWdldCBsb2NhbGVNb250aHNXaWRlKCl7cmV0dXJuIHRoaXMuX2xvY2FsZU1vbnRoc1dpZGV9Z2V0IGxvY2FsZURhdGVGb3JtYXQoKXtyZXR1cm4gdGhpcy5fbG9jYWxlRGF0ZUZvcm1hdH1p''@;'; put 'put ''bml0aWFsaXplTG9jYWxlRGF0YSgpe3RoaXMuaW5pdGlhbGl6ZUZpcnN0RGF5T2ZXZWVrKCksdGhpcy5pbml0aWFsaXplTG9jYWxlRGF0ZUZvcm1hdCgpLHRoaXMuaW5pdGlhbGl6ZUxvY2FsZU1vbnRoc0FiYnJldmlhdGVkKCksdGhpcy5pbml0aWFsaXplTG9jYWxlTW9udGhzV2lkZSgpLHRo''@;'; put 'put ''aXMuaW5pdGlhbGl6ZUxvY2FsZURheXMoKX1pbml0aWFsaXplTG9jYWxlRGF5cygpe2NvbnN0IHQ9W10scj1QbmUodGhpcy5sb2NhbGUsWTEuU3RhbmRhbG9uZSxWYy5XaWRlKS5zbGljZSgpLGk9UG5lKHRoaXMubG9jYWxlLFkxLlN0YW5kYWxvbmUsVmMuTmFycm93KS5zbGljZSgpLG89dGhp''@;'; put 'put ''cy5maXJzdERheU9mV2Vlaztmb3IobGV0IGE9MDthPDc7YSsrKXQucHVzaCh7ZGF5OnJbYV0sbmFycm93OmlbYV19KTtpZihvPjApe2NvbnN0IGE9dC5zcGxpY2UoMCxvKTt0LnB1c2goLi4uYSl9dGhpcy5fbG9jYWxlRGF5cz10fWluaXRpYWxpemVMb2NhbGVNb250aHNBYmJyZXZpYXRlZCgp''@;'; put 'put ''e3RoaXMuX2xvY2FsZU1vbnRoc0FiYnJldmlhdGVkPUhuZSh0aGlzLmxvY2FsZSxZMS5TdGFuZGFsb25lLFZjLkFiYnJldmlhdGVkKS5zbGljZSgpfWluaXRpYWxpemVMb2NhbGVNb250aHNXaWRlKCl7dGhpcy5fbG9jYWxlTW9udGhzV2lkZT1IbmUodGhpcy5sb2NhbGUsWTEuU3RhbmRhbG9u''@;'; put 'put ''ZSxWYy5XaWRlKS5zbGljZSgpfWluaXRpYWxpemVGaXJzdERheU9mV2Vlaygpe3RoaXMuX2ZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uIGNvdChuKXtyZXR1cm4gTDIobilbR3UuRmlyc3REYXlPZldlZWtdfSh0aGlzLmxvY2FsZSl9aW5pdGlhbGl6ZUxvY2FsZURhdGVGb3JtYXQoKXt0aGlzLl9s''@;'; put 'put ''b2NhbGVEYXRlRm9ybWF0PWZ1bmN0aW9uIHBJKG4sZSl7cmV0dXJuIEdnKEwyKG4pW0d1LkRhdGVGb3JtYXRdLGUpfSh0aGlzLmxvY2FsZSxNMy5TaG9ydCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKG9yKEY1KSl9LG4uXHUwMjc1cHJvdj1Kbih7''@;'; put 'put ''dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7Y2xhc3MgTDN7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnllYXI9ZSx0aGlzLm1vbnRoPXQsdGhpcy5pbml0aWFsaXplRGF5c0luQ2FsZW5kYXIoKX1pc0VxdWFsKGUpe3JldHVybiEhZSYmdGhpcy55ZWFyPT09ZS55ZWFyJiZ0aGlz''@;'; put 'put ''Lm1vbnRoPT09ZS5tb250aH1pc0RheUluQ2FsZW5kYXIoZSl7cmV0dXJuISFlJiZ0aGlzLnllYXI9PT1lLnllYXImJnRoaXMubW9udGg9PT1lLm1vbnRofXByZXZpb3VzTW9udGgoKXtyZXR1cm4gMD09PXRoaXMubW9udGg/bmV3IEwzKHRoaXMueWVhci0xLDExKTpuZXcgTDModGhpcy55ZWFy''@;'; put 'put ''LHRoaXMubW9udGgtMSl9bmV4dE1vbnRoKCl7cmV0dXJuIDExPT09dGhpcy5tb250aD9uZXcgTDModGhpcy55ZWFyKzEsMCk6bmV3IEwzKHRoaXMueWVhcix0aGlzLm1vbnRoKzEpfXByZXZpb3VzWWVhcigpe3JldHVybiBuZXcgTDModGhpcy55ZWFyLTEsdGhpcy5tb250aCl9bmV4dFllYXIo''@;'; put 'put ''KXtyZXR1cm4gbmV3IEwzKHRoaXMueWVhcisxLHRoaXMubW9udGgpfWluaXRpYWxpemVEYXlzSW5DYWxlbmRhcigpe2NvbnN0IGU9ZE1lKHRoaXMueWVhcix0aGlzLm1vbnRoKTt0aGlzLmRheXM9QXJyYXkoZSkuZmlsbChudWxsKS5tYXAoKHQscik9Pm5ldyBEMyh0aGlzLnllYXIsdGhpcy5t''@;'; put 'put ''b250aCxyKzEpKX19bGV0IE5wPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmlzUmFuZ2VQaWNrZXI9ITEsdGhpcy5oYXNBY3Rpb25CdXR0b25zPSExLHRoaXMuX3RvZGF5c0Z1bGxEYXRlPW5ldyBEYXRlLHRoaXMuX3NlbGVjdGVkRGF5Q2hhbmdlPW5ldyBNcix0aGlzLl9zZWxl''@;'; put 'put ''Y3RlZEVuZERheUNoYW5nZT1uZXcgTXIsdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2U9bmV3IE1yLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZT1uZXcgTXIsdGhpcy5fcmVmcmVzaENhbGVuZGFyVmlldz1uZXcgTXIsdGhpcy5fZm9jdXNlZERheUNoYW5nZT1uZXcgTXJ9Z2V0IHRv''@;'; put 'put ''ZGF5KCl7cmV0dXJuIHRoaXMuX3RvZGF5fWdldCBkaXNwbGF5ZWRDYWxlbmRhcigpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcn1nZXQgc2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IHNlbGVjdGVkRW5k''@;'; put 'put ''RGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkRW5kRGF5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBkaXNwbGF5ZWRDYWxlbmRhckNoYW5nZSgpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhckNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgZm9jdXNPbkNhbGVuZGFyQ2hh''@;'; put 'put ''bmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgZm9jdXNlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c2VkRGF5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoZjEodD0+dGhpcy5mb2N1c2VkRGF5PXQpKX1nZXQgcmVmcmVz''@;'; put 'put ''aENhbGVuZGFyVmlldygpe3JldHVybiB0aGlzLl9yZWZyZXNoQ2FsZW5kYXJWaWV3LmFzT2JzZXJ2YWJsZSgpfW5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZCh0LHtlbWl0RXZlbnQ6cn09e2VtaXRFdmVudDohMH0pe2lmKHRoaXMuaXNSYW5nZVBpY2tlcil7Y29uc3R7c3RhcnREYXRlOmksZW5k''@;'; put 'put ''RGF0ZTpvfT10O2kmJm8/KHRoaXMuc2V0U2VsZWN0ZWREYXkoaSxyKSx0aGlzLnNldFNlbGVjdGVkRW5kRGF5KG8scikpOihudWxsIT09byYmdGhpcy5zZXRTZWxlY3RlZEVuZERheShvLHIpLG51bGwhPT1pJiZ0aGlzLnNldFNlbGVjdGVkRGF5KGkscikpfWVsc2UgdGhpcy5zZXRTZWxlY3Rl''@;'; put 'put ''ZERheSh0LHIpO3RoaXMuX3JlZnJlc2hDYWxlbmRhclZpZXcubmV4dCgpfWluaXRpYWxpemVDYWxlbmRhcigpe3RoaXMuZm9jdXNlZERheT1udWxsLHRoaXMuaW5pdGlhbGl6ZVRvZGF5c0RhdGUoKSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj10aGlzLnNlbGVjdGVkRGF5P25ldyBMMyh0aGlz''@;'; put 'put ''LnNlbGVjdGVkRGF5LnllYXIsdGhpcy5zZWxlY3RlZERheS5tb250aCk6bmV3IEwzKHRoaXMudG9kYXkueWVhcix0aGlzLnRvZGF5Lm1vbnRoKX1jaGFuZ2VNb250aCh0KXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBMMyh0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci55ZWFyLHQpKX1j''@;'; put 'put ''aGFuZ2VZZWFyKHQpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IEwzKHQsdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIubW9udGgpKX1tb3ZlVG9OZXh0TW9udGgoKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLm5leHRNb250aCgpKX1tb3Zl''@;'; put 'put ''VG9QcmV2aW91c01vbnRoKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5wcmV2aW91c01vbnRoKCkpfW1vdmVUb05leHRZZWFyKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5uZXh0WWVhcigpKX1t''@;'; put 'put ''b3ZlVG9QcmV2aW91c1llYXIoKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLnByZXZpb3VzWWVhcigpKX1tb3ZlVG9DdXJyZW50TW9udGgoKXt0aGlzLmRpc3BsYXllZENhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcih0aGlzLnRvZGF5KXx8dGhpcy5z''@;'; put 'put ''ZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgTDModGhpcy50b2RheS55ZWFyLHRoaXMudG9kYXkubW9udGgpKSx0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2UubmV4dCgpfW1vdmVUb1NwZWNpZmljTW9udGgodCl7dGhpcy5kaXNwbGF5ZWRDYWxlbmRhci5pc0RheUluQ2FsZW5kYXIodCl8fHRo''@;'; put 'put ''aXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IEwzKHQueWVhcix0Lm1vbnRoKSl9aW5jcmVtZW50Rm9jdXNEYXkodCl7dGhpcy5ob3ZlcmVkRGF5PXRoaXMuZm9jdXNlZERheT10aGlzLmZvY3VzZWREYXkuaW5jcmVtZW50QnkodCksdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIuaXNEYXlJbkNh''@;'; put 'put ''bGVuZGFyKHRoaXMuZm9jdXNlZERheSk/dGhpcy5fZm9jdXNlZERheUNoYW5nZS5uZXh0KHRoaXMuZm9jdXNlZERheSk6dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgTDModGhpcy5mb2N1c2VkRGF5LnllYXIsdGhpcy5mb2N1c2VkRGF5Lm1vbnRoKSksdGhpcy5fZm9jdXNPbkNhbGVu''@;'; put 'put ''ZGFyQ2hhbmdlLm5leHQoKX1yZXNldFNlbGVjdGVkRGF5KCl7dGhpcy5zZWxlY3RlZERheT10aGlzLnBlcnNpc3RlZERhdGUsdGhpcy5zZWxlY3RlZEVuZERheT10aGlzLnBlcnNpc3RlZEVuZERhdGV9Y29udmVydERhdGVUb0RheU1vZGVsKHQpe3JldHVybiBuZXcgRDModC5nZXRGdWxsWWVh''@;'; put 'put ''cigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSl9c2V0U2VsZWN0ZWREYXkodCxyKXt0aGlzLnNlbGVjdGVkRGF5PXQsciYmdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2UubmV4dCh0KX1zZXRTZWxlY3RlZEVuZERheSh0LHIpe3RoaXMuc2VsZWN0ZWRFbmREYXk9dCxyJiZ0aGlzLl9zZWxlY3Rl''@;'; put 'put ''ZEVuZERheUNoYW5nZS5uZXh0KHQpfXNldERpc3BsYXllZENhbGVuZGFyKHQpe3RoaXMuX2Rpc3BsYXllZENhbGVuZGFyLmlzRXF1YWwodCl8fCh0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj10LHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hhbmdlLm5leHQoKSl9aW5pdGlhbGl6ZVRvZGF5c0Rh''@;'; put 'put ''dGUoKXt0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcgRGF0ZSx0aGlzLl90b2RheT1uZXcgRDModGhpcy5fdG9kYXlzRnVsbERhdGUuZ2V0RnVsbFllYXIoKSx0aGlzLl90b2RheXNGdWxsRGF0ZS5nZXRNb250aCgpLHRoaXMuX3RvZGF5c0Z1bGxEYXRlLmdldERhdGUoKSl9fXJldHVybiBuLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFJ2PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxyKXt0aGlzLl9uZ1pvbmU9dCx0aGlzLnBsYXRmb3JtSWQ9cn1mb2N1c0Nl''@;'; put 'put ''bGwodCl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+e2NvbnN0IHI9dC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRleD0iMCJdJyk7ciYmci5mb2N1cygpfSl9KX1mb2N1''@;'; put 'put ''c0lucHV0KHQpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+dC5mb2N1cygpKSl9ZWxlbWVudElzRm9jdXNlZCh0KXtyZXR1cm4gSGModGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYWN0aXZl''@;'; put 'put ''RWxlbWVudD09PXR9bmdab25lSXNTdGFibGVJbkJyb3dzZXIoKXtyZXR1cm4gdGhpcy5fbmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodXYoKSxzdSgoKT0+SGModGhpcy5wbGF0Zm9ybUlkKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0''@;'; put 'put ''fHxuKShvcihnYSksb3IobGQpKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxzNz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQpe3RoaXMuZGlzYWJsZWREYXRlcz17bWluRGF0ZTpuZXcgRDMoMCwwLDEpLG1heERhdGU6bmV3IEQzKDk5''@;'; put 'put ''OTksMTEsMzEpfSx0aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0PSJkZC9NTS95Iix0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9ZVcsdGhpcy5kZWxpbWl0ZXJzPVsiLyIsIi8iXSx0aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0PXQubG9jYWxlRGF0ZUZvcm1hdCx0aGlzLmluaXRpYWxpemVMb2Nh''@;'; put 'put ''bGVEaXNwbGF5Rm9ybWF0KCl9Z2V0IHBsYWNlaG9sZGVyVGV4dCgpe2NvbnN0IHQ9dGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0LmZvcm1hdDtyZXR1cm4gdFswXSt0aGlzLmRlbGltaXRlcnNbMF0rdFsxXSt0aGlzLmRlbGltaXRlcnNbMV0rdFsyXX1zZXRNaW5EYXRlKHQpe2lmKHQpe2NvbnN0''@;'; put 'put ''W3IsaSxvXT10LnNwbGl0KCItIikubWFwKGE9PnBhcnNlSW50KGEsMTApKTt0aGlzLmRpc2FibGVkRGF0ZXMubWluRGF0ZT1uZXcgRDMocixpLTEsbyl9ZWxzZSB0aGlzLmRpc2FibGVkRGF0ZXMubWluRGF0ZT1uZXcgRDMoMCwwLDEpfXNldE1heERhdGUodCl7aWYodCl7Y29uc3RbcixpLG9d''@;'; put 'put ''PXQuc3BsaXQoIi0iKS5tYXAoYT0+cGFyc2VJbnQoYSwxMCkpO3RoaXMuZGlzYWJsZWREYXRlcy5tYXhEYXRlPW5ldyBEMyhyLGktMSxvKX1lbHNlIHRoaXMuZGlzYWJsZWREYXRlcy5tYXhEYXRlPW5ldyBEMyg5OTk5LDExLDMxKX1zZXRSYW5nZU9wdGlvbnModCl7Y29uc3Qgcj10aGlzLnZh''@;'; put 'put ''bGlkYXRlRGF0ZVJhbmdlT3B0aW9ucyh0KTt0aGlzLmRhdGVSYW5nZU9wdGlvbnM9cnx8W119Z2V0UmFuZ2VPcHRpb25zKCl7cmV0dXJuIHRoaXMuZGF0ZVJhbmdlT3B0aW9uc310b0xvY2FsZURpc3BsYXlGb3JtYXRTdHJpbmcodCl7aWYodCl7aWYoaXNOYU4odC5nZXRUaW1lKCkpKXJldHVy''@;'; put 'put ''biIiO2NvbnN0IHI9dC5nZXREYXRlKCksaT10LmdldE1vbnRoKCkrMSxvPXI+OT9yLnRvU3RyaW5nKCk6IjAiK3IsYT1pPjk/aS50b1N0cmluZygpOiIwIitpO3JldHVybiB0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9PT1lVz9vK3RoaXMuZGVsaW1pdGVyc1swXSthK3RoaXMuZGVsaW1pdGVy''@;'; put 'put ''c1sxXSt0LmdldEZ1bGxZZWFyKCk6dGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09cGFlP2ErdGhpcy5kZWxpbWl0ZXJzWzBdK28rdGhpcy5kZWxpbWl0ZXJzWzFdK3QuZ2V0RnVsbFllYXIoKTp0LmdldEZ1bGxZZWFyKCkrdGhpcy5kZWxpbWl0ZXJzWzBdK2ErdGhpcy5kZWxpbWl0ZXJzWzFd''@;'; put 'put ''K299cmV0dXJuIiJ9Z2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcodCl7aWYoIXR8fCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gbnVsbDtjb25zdCByPXQubWF0Y2goRl90KTtpZighcnx8MyE9PXIubGVuZ3RoKXJldHVybiBudWxsO2NvbnN0W2ksbyxhXT1yO3JldHVybiB0aGlzLmxvY2Fs''@;'; put 'put ''ZURpc3BsYXlGb3JtYXQ9PT1lVz90aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZShhLG8saSk6dGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09cGFlP3RoaXMudmFsaWRhdGVBbmRHZXREYXRlKGEsaSxvKTp0aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZShpLG8sYSl9dmFsaWRhdGVEYXRlUmFuZ2VPcHRp''@;'; put 'put ''b25zKHQpe2NvbnN0IHI9W107cmV0dXJuIHQ/LmZvckVhY2goaT0+ezIhPT1pPy52YWx1ZT8ubGVuZ3RofHwiW29iamVjdCBEYXRlXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaT8udmFsdWVbMF0pfHwiW29iamVjdCBEYXRlXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3Ry''@;'; put 'put ''aW5nLmNhbGwoaT8udmFsdWVbMV0pfHxyLnB1c2goaSl9KSxyfWluaXRpYWxpemVMb2NhbGVEaXNwbGF5Rm9ybWF0KCl7Y29uc3QgdD10aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0LnRvTG9jYWxlTG93ZXJDYXNlKCk7dGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PUxfdC50ZXN0KHQpP2VXOk9f''@;'; put 'put ''dC50ZXN0KHQpP3BhZTpWX3QsdGhpcy5leHRyYWN0RGVsaW1pdGVycygpfWV4dHJhY3REZWxpbWl0ZXJzKCl7aWYodGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdCl7Y29uc3Qgcj10aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0LnJlcGxhY2UoSF90LCIiKS5zcGxpdChOX3QpO3ImJjQ9PT1yLmxl''@;'; put 'put ''bmd0aD90aGlzLmRlbGltaXRlcnM9W3JbMV0sclsyXV06Y29uc29sZS5lcnJvcigiVW5leHBlY3RlZCBkYXRlIGZvcm1hdCByZWNlaXZlZC4gRGVsaW1pdGVycyBleHRyYWN0ZWQ6ICIscil9fWlzVmFsaWRNb250aCh0KXtyZXR1cm4gdD4tMSYmdDwxMn1pc1ZhbGlkRGF0ZSh0LHIsaSl7cmV0''@;'; put 'put ''dXJuIGk+MCYmaTw9ZE1lKHQscil9dmFsaWRhdGVBbmRHZXREYXRlKHQscixpKXtjb25zdCBvPSt0LGE9K3ItMSxsPStpO2lmKCF0aGlzLmlzVmFsaWRNb250aChhKXx8IXRoaXMuaXNWYWxpZERhdGUobyxhLGwpKXJldHVybiBudWxsO2NvbnN0IHU9ZnVuY3Rpb24gVV90KG4pe2lmKG4+OTk5''@;'; put 'put ''OXx8bj4xMDAmJm48OTk5fHxuPDEwKXJldHVybi0xO2lmKG4+OTk5KXJldHVybiBuO2NvbnN0IGU9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpO2xldCByPW4rMTAwKk1hdGguZmxvb3IoZS8xMDApO3JldHVybiByPmUrMjAmJihyLT0xMDApLHJ9KG8pO3JldHVybi0xIT09dT9uZXcgRGF0ZSh1''@;'; put 'put ''LGEsbCk6bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikob3IoVkQpKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxiTT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5fdG91Y2hl''@;'; put 'put ''ZENoYW5nZT1uZXcgTXIsdGhpcy5fZGlydHlDaGFuZ2U9bmV3IE1yfWdldCB0b3VjaGVkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGRpcnR5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2RpcnR5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfW1hcmtB''@;'; put 'put ''c1RvdWNoZWQoKXt0aGlzLl90b3VjaGVkQ2hhbmdlLm5leHQoKX1tYXJrQXNEaXJ0eSgpe3RoaXMuX2RpcnR5Q2hhbmdlLm5leHQoKX1zZXREaXNhYmxlZCh0KXt0aGlzLmRpc2FibGVkPXR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3''@;'; put 'put ''NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGhNZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscil7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPXQsdGhpcy5jb21tb25TdHJpbmdzPXIsdGhpcy5vblNlbGVjdERheT1uZXcgS3J9Z2V0IGRheVZp''@;'; put 'put ''ZXcoKXtyZXR1cm4gdGhpcy5fZGF5Vmlld31zZXQgZGF5Vmlldyh0KXt0aGlzLl9kYXlWaWV3PXR9Z2V0IGRheVN0cmluZygpe3JldHVybiB0aGlzLmRheVZpZXcuaXNTZWxlY3RlZD90aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclNl''@;'; put 'put ''bGVjdGVkTGFiZWwse0ZVTExfREFURTp0aGlzLl9kYXlWaWV3LmRheU1vZGVsLnRvRGF0ZVN0cmluZygpfSk6dGhpcy5fZGF5Vmlldy5kYXlNb2RlbC50b0RhdGVTdHJpbmcoKX1nZXQgaXNSYW5nZVN0YXJ0RGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1Jhbmdl''@;'; put 'put ''UGlja2VyJiZ0aGlzLmRheVZpZXc/LmRheU1vZGVsPy50b0NvbXBhcmlzb25TdHJpbmcoKT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8udG9Db21wYXJpc29uU3RyaW5nKCl9Z2V0IGlzUmFuZ2VFbmREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25T''@;'; put 'put ''ZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuZGF5Vmlldz8uZGF5TW9kZWw/LnRvQ29tcGFyaXNvblN0cmluZygpPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py50b0NvbXBhcmlzb25TdHJpbmcoKX1ob3Zlckxpc3RlbmVyKCl7dGhpcy5kYXlWaWV3Lmlz''@;'; put 'put ''RGlzYWJsZWR8fCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZERheT10aGlzLmRheVZpZXcuZGF5TW9kZWwpfW9uRGF5Vmlld0ZvY3VzKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXk9dGhpcy5kYXlWaWV3LmRheU1vZGVsfXNlbGVjdERheSgpe3Ro''@;'; put 'put ''aXMuZGF5Vmlldy5pc0Rpc2FibGVkfHx0aGlzLm9uU2VsZWN0RGF5LmVtaXQodGhpcy5kYXlWaWV3LmRheU1vZGVsKX1pc0luUmFuZ2UoKXtyZXR1cm4hIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVj''@;'; put 'put ''dGVkRGF5JiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/dGhpcy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNBZnRlcih0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpJiZ0aGlzLl9kYXlWaWV3LmRheU1vZGVsPy5pc0JlZm9yZSh0aGlzLl9k''@;'; put 'put ''YXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkpOiEoIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheXx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5KSYmdGhpcy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNBZnRlcih0aGlzLl9k''@;'; put 'put ''YXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpJiZ0aGlzLl9kYXlWaWV3LmRheU1vZGVsPy5pc0JlZm9yZSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZERheSwhMCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShO''@;'; put 'put ''cCksemUoaWwpKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWRheSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezEmdCYmd3QoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuaG92ZXJMaXN0ZW5lcigpfSksMiZ0JiZ3cigi''@;'; put 'put ''ZGF5IiwhMCl9LGlucHV0czp7ZGF5VmlldzpbMCwiY2xyRGF5VmlldyIsImRheVZpZXciXX0sb3V0cHV0czp7b25TZWxlY3REYXk6InNlbGVjdERheSJ9LHN0YW5kYWxvbmU6ITEsZGVjbHM6Mix2YXJzOjE5LGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwxLCJkYXktYnRuIiwzLCJjbGljayIs''@;'; put 'put ''ImZvY3VzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHQscil7MSZ0JiYoSigwLCJidXR0b24iLDApLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gci5zZWxlY3REYXkoKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gci5vbkRheVZpZXdGb2N1cygpfSksU2UoMSksdGUoKSksMiZ0JiYo''@;'; put 'put ''d3IoImlzLXRvZGF5IixyLmRheVZpZXcuaXNUb2RheXNEYXRlKSgiaXMtZXhjbHVkZWQiLHIuZGF5Vmlldy5pc0V4Y2x1ZGVkKSgiaXMtZGlzYWJsZWQiLHIuZGF5Vmlldy5pc0Rpc2FibGVkKSgiaXMtc2VsZWN0ZWQiLHIuZGF5Vmlldy5pc1NlbGVjdGVkKSgiaW4tcmFuZ2UiLHIuaXNJblJh''@;'; put 'put ''bmdlKCkpKCJpcy1zdGFydC1yYW5nZSIsci5pc1JhbmdlU3RhcnREYXkpKCJpcy1lbmQtcmFuZ2UiLHIuaXNSYW5nZUVuZERheSksUnIoInRhYmluZGV4IixyLmRheVZpZXcudGFiSW5kZXgpKCJhcmlhLWN1cnJlbnQiLHIuZGF5Vmlldy5pc1RvZGF5c0RhdGU/ImRhdGUiOiJmYWxzZSIpKCJh''@;'; put 'put ''cmlhLWxhYmVsIixyLmRheVN0cmluZykoImFyaWEtc2VsZWN0ZWQiLHIuZGF5Vmlldy5pc1NlbGVjdGVkKSxpZSgpLFNyKCIgIixyLmRheVZpZXcuZGF5TW9kZWwuZGF0ZSwiICIpKX0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksZk1lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxyLGks''@;'; put 'put ''byxhLGwsdSl7dGhpcy5fbG9jYWxlSGVscGVyU2VydmljZT10LHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1yLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2U9aSx0aGlzLl9kYXRlSU9TZXJ2aWNlPW8sdGhpcy5fZWxSZWY9YSx0aGlzLl9kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPWws''@;'; put 'put ''dGhpcy5fdG9nZ2xlU2VydmljZT11LHRoaXMuX3N1YnM9W10sdGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldygpLHRoaXMuaW5pdGlhbGl6ZVN1YnNjcmlwdGlvbnMoKX1nZXQgbG9jYWxlRGF5cygpe3JldHVybiB0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZURheXN9Z2V0IGNhbGVu''@;'; put 'put ''ZGFyKCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhcn1nZXQgc2VsZWN0ZWREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5fWdldCBzZWxlY3RlZEVuZERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2''@;'; put 'put ''aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXl9Z2V0IGZvY3VzZWREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXl9Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS50b2RheX1uZ0FmdGVyVmlld0luaXQoKXt0''@;'; put 'put ''aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzLmZvckVhY2godD0+dC51bnN1YnNjcmliZSgpKX1vbktleURvd24odCl7aWYodCYmdGhpcy5mb2N1c2VkRGF5KXN3aXRjaCh0bSh0LmtleSkpe2Nhc2UgTW8u''@;'; put 'put ''QXJyb3dVcDp0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KC03KTticmVhaztjYXNlIE1vLkFycm93RG93bjp0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5''@;'; put 'put ''KDcpO2JyZWFrO2Nhc2UgTW8uQXJyb3dMZWZ0OnQucHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoLTEpO2JyZWFrO2Nhc2UgTW8uQXJyb3dSaWdodDp0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2''@;'; put 'put ''aWNlLmluY3JlbWVudEZvY3VzRGF5KDEpfX1zZXRTZWxlY3RlZERheSh0KXtjb25zdCByPXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5oYXNBY3Rpb25CdXR0b25zLGk9dGhpcy51cGRhdGVDYWxlbmRhclZpZXdNb2RhbCh0KTt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uubm90aWZ5''@;'; put 'put ''U2VsZWN0ZWREYXlDaGFuZ2VkKGkse2VtaXRFdmVudDohcn0pLHJ8fCh0aGlzLl9kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLm1hcmtBc0RpcnR5KCksdGhpcy52YWxpZGF0ZUFuZENsb3NlRGF0ZVBpY2tlcigpKX1pbml0aWFsaXplU3Vic2NyaXB0aW9ucygpe3RoaXMuX3N1YnMucHVzaCh0aGlz''@;'; put 'put ''Ll9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldygpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheUNoYW5nZS5zdWJzY3JpYmUo''@;'; put 'put ''dD0+e3RoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlRm9jdXNhYmxlRGF5KHQpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9j''@;'; put 'put ''dXNDZWxsKHRoaXMuX2VsUmVmKX0pKSx0aGlzLl9zdWJzLnB1c2godGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnJlZnJlc2hDYWxlbmRhclZpZXcuc3Vic2NyaWJlKCgpPT57dGhpcy5yZWZyZXNoQ2FsZW5kYXJWaWV3TW9kYWwoKX0pKX12YWxpZGF0ZUFuZENsb3NlRGF0ZVBpY2tlcigp''@;'; put 'put ''eyh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXl8fCF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5n''@;'; put 'put ''ZVBpY2tlciYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSYmKHRoaXMuX3RvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9dXBkYXRlQ2FsZW5kYXJWaWV3TW9kYWwodCl7Y29uc3Qgcj10aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVjdGVkRGF5fHxudWxsLGk9dGhpcy5f''@;'; put 'put ''ZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXI7bGV0IG89dGhpcy5jYWxlbmRhclZpZXdNb2RlbC5zZWxlY3RlZEVuZERheXx8bnVsbDtyZXR1cm4gaT8hcnx8ciYmb3x8ciYmdD8uaXNCZWZvcmUocik/KHRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWREYXko''@;'; put 'put ''dCksbyYmKG89dm9pZCAwLHRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWRFbmREYXkobykpKTp0aGlzLmNhbGVuZGFyVmlld01vZGVsLnVwZGF0ZVNlbGVjdGVkRW5kRGF5KHQpOnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWREYXkodCksaT97c3RhcnRE''@;'; put 'put ''YXRlOnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwuc2VsZWN0ZWREYXksZW5kRGF0ZTp0aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVjdGVkRW5kRGF5fTp0aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVjdGVkRGF5fXJlZnJlc2hDYWxlbmRhclZpZXdNb2RhbCgpe3RoaXMuY2FsZW5kYXJWaWV3''@;'; put 'put ''TW9kZWwudXBkYXRlU2VsZWN0ZWREYXkodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZEVuZERheSh0aGlzLl9kYXRlTmF2''@;'; put 'put ''aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkpfWdlbmVyYXRlQ2FsZW5kYXJWaWV3KCl7dGhpcy5jYWxlbmRhclZpZXdNb2RlbD1uZXcgWV90KHRoaXMuY2FsZW5kYXIsdGhpcy5zZWxlY3RlZERheSx0aGlzLnNlbGVjdGVkRW5kRGF5LHRoaXMuZm9jdXNlZERheSx0aGlzLnRvZGF5LHRo''@;'; put 'put ''aXMuX2xvY2FsZUhlbHBlclNlcnZpY2UuZmlyc3REYXlPZldlZWssdGhpcy5fZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoVkQpLHplKE5wKSx6ZShSdiksemUoczcpLHplKG5vKSx6ZShiTSks''@;'; put 'put ''emUoS3UpKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWNhbGVuZGFyIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezEmdCYmd3QoImtleWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiByLm9uS2V5RG93bihvKX0pfSxzdGFuZGFsb25lOiExLGRlY2xzOjQs''@;'; put 'put ''dmFyczoyLGNvbnN0czpbWyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJjYWxlbmRhci10YWJsZSJdLFsxLCJjYWxlbmRhci1yb3ciLCJ3ZWVrZGF5cyJdLFsiY2xhc3MiLCJjYWxlbmRhci1jZWxsIHdlZWtkYXkiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJjYWxlbmRhci1yb3ci''@;'; put 'put ''LDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjYWxlbmRhci1jZWxsIiwid2Vla2RheSJdLFsxLCJjYWxlbmRhci1yb3ciXSxbImNsYXNzIiwiY2FsZW5kYXItY2VsbCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNhbGVuZGFyLWNlbGwiXSxbMywic2VsZWN0RGF5IiwiY2xyRGF5VmlldyJd''@;'; put 'put ''XSx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpezEmdCYmKEooMCwidGFibGUiLDApKDEsInRyIiwxKSxZbigyLGU2dCwzLDIsInRoIiwyKSx0ZSgpLFluKDMsbjZ0LDIsMSwidHIiLDMpLHRlKCkpLDImdCYmKGllKDIpLHJ0KCJuZ0Zvck9mIixyLmxvY2FsZURheXMpLGllKCkscnQoIm5nRm9yT2Yi''@;'; put 'put ''LHIuY2FsZW5kYXJWaWV3TW9kZWwuY2FsZW5kYXJWaWV3KSl9LGRlcGVuZGVuY2llczpbUmYsaE1lXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSx0Vz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQpe3RoaXMuX2RvY3VtZW50PXQsdGhpcy5faXNVc2VyQWdlbnRNb2JpbGU9ITEsdCYmKHRo''@;'; put 'put ''aXMuX2lzVXNlckFnZW50TW9iaWxlPVBfdC50ZXN0KHQuZGVmYXVsdFZpZXcubmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5faW5uZXJXaWR0aD10LmRlZmF1bHRWaWV3LmlubmVyV2lkdGgpfWdldCBpc0VuYWJsZWQoKXtyZXR1cm4hKHRoaXMuX2RvY3VtZW50JiZ0aGlzLl9pbm5lcldpZHRo''@;'; put 'put ''PDc2OCYmdGhpcy5faXNVc2VyQWdlbnRNb2JpbGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKShvcihUbCkpfSxuLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGdhZT0oKCk9PntjbGFzcyBuIGV4dGVu''@;'; put 'put ''ZHMgWWJ7Y29uc3RydWN0b3IodCxyLGksbyxhLGwsdSxnLEUsTyxaLGVlLHZlKXtzdXBlcih0LG5XLHIsYSxvLGkpLHRoaXMuZWw9aSx0aGlzLnJlbmRlcmVyPW8sdGhpcy5jb250cm9sPWEsdGhpcy5jb250YWluZXI9bCx0aGlzLmRhdGVJT1NlcnZpY2U9dSx0aGlzLmRhdGVOYXZpZ2F0aW9u''@;'; put 'put ''U2VydmljZT1nLHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlPUUsdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPU8sdGhpcy5wbGF0Zm9ybUlkPVosdGhpcy5mb2N1c1NlcnZpY2U9ZWUsdGhpcy5kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPXZlLHRoaXMuaW5kZXg9MX1nZXQgZGlzYWJs''@;'; put 'put ''ZWQoKXtyZXR1cm4gdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlP3RoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXNhYmxlZHx8ISF0aGlzLmNvbnRyb2w/LmNvbnRyb2w/LmRpc2FibGVkOm51bGx9c2V0IGRpc2FibGVkKHQpe3RoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZSYmdGhp''@;'; put 'put ''cy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLnNldERpc2FibGVkKHA0KHQpKX1nZXQgcGxhY2Vob2xkZXJUZXh0KCl7cmV0dXJuIHRoaXMucGxhY2Vob2xkZXI/dGhpcy5wbGFjZWhvbGRlcjp0aGlzLmRhdGVJT1NlcnZpY2UucGxhY2Vob2xkZXJUZXh0fWdldCBpbnB1dFR5cGUoKXtyZXR1cm4g''@;'; put 'put ''SGModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy51c2luZ05hdGl2ZURhdGVwaWNrZXIoKT8iZGF0ZSI6InRleHQifW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKSx0aGlzLnBvcHVsYXRlU2VydmljZXNGcm9tQ29udGFpbmVyQ29tcG9uZW50KCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhp''@;'; put 'put ''cy5saXN0ZW5Gb3JVc2VyU2VsZWN0ZWREYXlDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JDb250cm9sVmFsdWVDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JUb3VjaENoYW5nZXMoKSx0aGlzLmxpc3RlbkZvckRpcnR5Q2hhbmdlcygpLHRoaXMubGlzdGVuRm9ySW5wdXRSZWZvY3VzKCkpfW5nQWZ0''@;'; put 'put ''ZXJWaWV3SW5pdCgpe3RoaXMucHJvY2Vzc0luaXRpYWxJbnB1dHMoKX1zZXRGb2N1c1N0YXRlcygpe3RoaXMuc2V0Rm9jdXMoITApfXRyaWdnZXJWYWxpZGF0aW9uKCl7c3VwZXIudHJpZ2dlclZhbGlkYXRpb24oKSx0aGlzLnNldEZvY3VzKCExKX1vblZhbHVlQ2hhbmdlKHQpe2NvbnN0IHI9''@;'; put 'put ''dGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKHQudmFsdWUpO2lmKHRoaXMudXNpbmdDbGFyaXR5RGF0ZXBpY2tlcigpJiZyKXRoaXMudXBkYXRlRGF0ZShyLCEwKTtlbHNlIGlmKHRoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCkpe2NvbnN0W2ksbyxhXT10''@;'; put 'put ''LnZhbHVlLnNwbGl0KCItIik7dGhpcy51cGRhdGVEYXRlKG5ldyBEYXRlKCtpLCtvLTEsK2EpLCEwKX1lbHNlIHRoaXMuZW1pdERhdGVPdXRwdXQobnVsbCl9ZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCl7cmV0dXJuISF0aGlzLmNvbnRyb2x9c2V0RGF0ZSh0KXsic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IHQmJih0PW5ldyBEYXRlKHQpKSx0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSE9PXQmJnRoaXMudXBkYXRlRGF0ZSh0KSx0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZXx8KHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlPXQpfXVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfXVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpe3JldHVybiF0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZS5pc0VuYWJsZWR9c2V0Rm9jdXModCl7dGhpcy5mb2N1c1NlcnZpY2UmJih0aGlzLmZvY3VzU2VydmljZS5mb2N1''@;'; put 'put ''c2VkPXQpfXBvcHVsYXRlU2VydmljZXNGcm9tQ29udGFpbmVyQ29tcG9uZW50KCl7dGhpcy5jb250YWluZXJ8fCh0aGlzLmRhdGVJT1NlcnZpY2U9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIoczcpLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9t''@;'; put 'put ''Q29udGFpbmVyKE5wKSx0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcih0VyksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKGJNKSl9cHJvY2Vzc0luaXRpYWxJbnB1dHMoKXt0''@;'; put 'put ''aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpP3RoaXMudXBkYXRlRGF0ZSh0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcodGhpcy5jb250cm9sLnZhbHVlKSk6dGhpcy51cGRhdGVEYXRlKHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlKX11cGRh''@;'; put 'put ''dGVEYXRlKHQscj0hMSl7Y29uc3QgaT10aGlzLmdldFZhbGlkRGF0ZVZhbHVlRnJvbURhdGUodCk7aWYocj90aGlzLmVtaXREYXRlT3V0cHV0KGkpOnRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPWksdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Upe2NvbnN0IG89aT9uZXcgRDMoaS5nZXRGdWxs''@;'; put 'put ''WWVhcigpLGkuZ2V0TW9udGgoKSxpLmdldERhdGUoKSk6bnVsbDt0aGlzLnVwZGF0ZURheU1vZGVsKG8pfXRoaXMudXBkYXRlSW5wdXQoaSl9dXBkYXRlSW5wdXQodCl7aWYodCl7Y29uc3Qgcj10aGlzLmRhdGVJT1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKHQpO3RoaXMu''@;'; put 'put ''dXNpbmdOYXRpdmVEYXRlcGlja2VyKCk/KHQuc2V0TWludXRlcyh0LmdldE1pbnV0ZXMoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpLHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ2YWx1ZUFzRGF0ZSIsdCkpOnRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1D''@;'; put 'put ''b250cm9sKCkmJnIhPT10aGlzLmNvbnRyb2wudmFsdWU/dGhpcy5jb250cm9sLmNvbnRyb2wuc2V0VmFsdWUocik6dGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInZhbHVlIixyKSx0aGlzLnZhbGlkYXRlRGF0ZVJhbmdlKCl9ZWxzZSB0aGlzLnJlbmRl''@;'; put 'put ''cmVyLnNldFByb3BlcnR5KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWUiLCIiKX1nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKHQpe2lmKHRoaXMuZGF0ZUlPU2VydmljZSl7Y29uc3Qgcj10aGlzLmRhdGVJT1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKHQpO3JldHVy''@;'; put 'put ''biB0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcocil9cmV0dXJuIG51bGx9ZW1pdERhdGVPdXRwdXQodCl7IWZ1bmN0aW9uIHpfdChuLGUpe3JldHVybiBuIGluc3RhbmNlb2YgRGF0ZSYmZSBpbnN0YW5jZW9mIERhdGUmJm4uZ2V0RnVsbFllYXIoKT09PWUu''@;'; put 'put ''Z2V0RnVsbFllYXIoKSYmbi5nZXRNb250aCgpPT09ZS5nZXRNb250aCgpJiZuLmdldERhdGUoKT09PWUuZ2V0RGF0ZSgpfSh0LHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlKT8odGhpcy5kYXRlQ2hhbmdlLmVtaXQodCksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9dCk6IXQmJnRoaXMucHJldmlv''@;'; put 'put ''dXNEYXRlQ2hhbmdlJiYodGhpcy5kYXRlQ2hhbmdlLmVtaXQobnVsbCksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9bnVsbCl9bGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpP3RoaXMuY29udHJvbC52YWx1ZUNoYW5n''@;'; put 'put ''ZXMucGlwZShzdSgoKT0+IXRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZS5lbGVtZW50SXNGb2N1c2VkKHRoaXMuZWwubmF0aXZlRWxlbWVudCkpKS5zdWJzY3JpYmUodD0+dGhpcy51cGRhdGVEYXRlKHRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyh0KSkp''@;'; put 'put ''Om51bGx9bGlzdGVuRm9yVXNlclNlbGVjdGVkRGF5Q2hhbmdlcygpe3JldHVybiB0aGlzLnVzZXJTZWxlY3RlZERheUNoYW5nZS5zdWJzY3JpYmUodD0+dGhpcy51cGRhdGVEYXRlKHQ/LnRvRGF0ZSgpLCEwKSl9bGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1D''@;'; put 'put ''b250cm9sU2VydmljZS50b3VjaGVkQ2hhbmdlLnBpcGUoc3UoKCk9PnRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkpKS5zdWJzY3JpYmUoKCk9PnRoaXMuY29udHJvbC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKSl9bGlzdGVuRm9yRGlydHlDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0''@;'; put 'put ''ZUZvcm1Db250cm9sU2VydmljZS5kaXJ0eUNoYW5nZS5waXBlKHN1KCgpPT50aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLmNvbnRyb2wuY29udHJvbC5tYXJrQXNEaXJ0eSgpKX1saXN0ZW5Gb3JJbnB1dFJlZm9jdXMoKXtyZXR1cm4gdGhpcy5k''@;'; put 'put ''YXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2UucGlwZShzdSh0PT4hIXQmJiF0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyKSkuc3Vic2NyaWJlKCgpPT50aGlzLmRhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNJbnB1dCh0aGlzLmVsLm5hdGl2''@;'; put 'put ''ZUVsZW1lbnQpKX12YWxpZGF0ZURhdGVSYW5nZSgpe2lmKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXIpe2NvbnN0IHQ9dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPy5jb250cm9sLHI9dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPy5hZGRpdGlvbmFsQ29udHJvbHM7dGhpcy5k''@;'; put 'put ''YXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LmlzQmVmb3JlKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LCEwKSYmKHQ/Lmhhc0Vycm9yKCJyYW5nZSIpfHxyPy5zb21lKG89Pm8uaGFzRXJyb3IoInJhbmdlIikpKSYmKHQuY29udHJvbD8udXBkYXRl''@;'; put 'put ''VmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksci5mb3JFYWNoKG89PntvPy5jb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0pKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKERzKSx6ZShNbCks''@;'; put 'put ''emUobm8pLHplKE50KSx6ZShWMiwxMCksemUoVW8oKCk9Pm5XKSw4KSx6ZShzNyw4KSx6ZShOcCw4KSx6ZSh0Vyw4KSx6ZShiTSw4KSx6ZShsZCksemUodk0sOCksemUoUnYpKX0sbi5cdTAyNzVkaXI9JHIoe3R5cGU6bixob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezEm''@;'; put 'put ''dCYmd3QoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiByLnNldEZvY3VzU3RhdGVzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gci50cmlnZ2VyVmFsaWRhdGlvbigpfSkoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIHIub25WYWx1ZUNoYW5nZShvLnRhcmdldCl9KSwyJnQmJihP''@;'; put 'put ''NSgiZGlzYWJsZWQiLHIuZGlzYWJsZWQpLFJyKCJwbGFjZWhvbGRlciIsci5wbGFjZWhvbGRlclRleHQpKCJ0eXBlIixyLmlucHV0VHlwZSkpfSxpbnB1dHM6e3BsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsZGlzYWJsZWQ6ImRpc2FibGVkIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbRm9d''@;'; put 'put ''fSksbn0pKCkscE1lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBnYWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZGF0ZUNoYW5nZT1uZXcgS3IoITEpLHRoaXMuaW5wdXRXaWR0aD0xM31zZXQgZGF0ZSh0KXt0aGlzLnNldERhdGUodCl9Z2V0IGlucHV0U2l6ZSgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmlucHV0V2lkdGh9Z2V0IHVzZXJTZWxlY3RlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheUNoYW5nZX10cmlnZ2VyQ29udHJvbElucHV0VmFsaWRhdGlvbigpe3RoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9s''@;'; put 'put ''KCkmJih0aGlzLmNvbnRyb2wuY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5jb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh0aGlzLmNvbnRyb2wuY29udHJvbC5lcnJvcnMpKX11cGRhdGVEYXlNb2RlbCh0KXt0aGlzLmRhdGVOYXZpZ2F0aW9u''@;'; put 'put ''U2VydmljZS5wZXJzaXN0ZWRFbmREYXRlPXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5PXR9fXJldHVybiBuLlx1MDI3NWZhYz0oKCk9PntsZXQgZTtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuKGV8fChlPXdhKG4pKSkocnx8bil9fSkoKSxuLlx1MDI3NWRpcj0k''@;'; put 'put ''cih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjbHJFbmREYXRlIiwiIl1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHQscil7MiZ0JiYoUnIoInNpemUiLHIuaW5wdXRTaXplKSx3cigiY2xyLWlucHV0IiwhMCkpfSxpbnB1dHM6e2lucHV0V2lkdGg6ImlucHV0V2lkdGgiLGRh''@;'; put 'put ''dGU6WzAsImNsckVuZERhdGUiLCJkYXRlIl19LG91dHB1dHM6e2RhdGVDaGFuZ2U6ImNsckVuZERhdGVDaGFuZ2UifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltibyhbUnZdKSxGb119KSxufSkoKSxtYWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGdhZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4u''@;'; put 'put ''LmFyZ3VtZW50cyksdGhpcy5kYXRlQ2hhbmdlPW5ldyBLcighMSl9c2V0IGRhdGUodCl7dGhpcy5zZXREYXRlKHQpfXNldCBtaW4odCl7dGhpcy5kYXRlSU9TZXJ2aWNlLnNldE1pbkRhdGUodCksdGhpcy50cmlnZ2VyQ29udHJvbFZhbGlkYXRpb24oKX1zZXQgbWF4KHQpe3RoaXMuZGF0ZUlP''@;'; put 'put ''U2VydmljZS5zZXRNYXhEYXRlKHQpLHRoaXMudHJpZ2dlckNvbnRyb2xWYWxpZGF0aW9uKCl9Z2V0IHVzZXJTZWxlY3RlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheUNoYW5nZX11cGRhdGVEYXlNb2RlbCh0KXt0aGlzLmRhdGVOYXZp''@;'; put 'put ''Z2F0aW9uU2VydmljZS5wZXJzaXN0ZWREYXRlPXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5PXR9dHJpZ2dlckNvbnRyb2xWYWxpZGF0aW9uKCl7dGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSYmKHRoaXMuY29udHJvbC5jb250cm9sPy51cGRhdGVWYWx1ZUFu''@;'; put 'put ''ZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHRoaXMuY29udHJvbC5jb250cm9sLmVycm9ycykpfX1yZXR1cm4gbi5cdTAyNzVmYWM9KCgpPT57bGV0IGU7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybihlfHwoZT13YShuKSkpKHJ8fG4p''@;'; put 'put ''fX0pKCksbi5cdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2xyRGF0ZSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezImdCYmd3IoImNsci1pbnB1dCIsITApfSxpbnB1dHM6e2RhdGU6WzAsImNsckRhdGUiLCJkYXRlIl0sbWluOiJtaW4i''@;'; put 'put ''LG1heDoibWF4In0sb3V0cHV0czp7ZGF0ZUNoYW5nZToiY2xyRGF0ZUNoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2JvKFtSdl0pLEZvXX0pLG59KSgpLGdNZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZ2Fle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmRh''@;'; put 'put ''dGVDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLmlucHV0V2lkdGg9MTN9c2V0IGRhdGUodCl7dGhpcy5zZXREYXRlKHQpfWdldCBpbnB1dFNpemUoKXtyZXR1cm4gdGhpcy5pbnB1dFdpZHRofWdldCB1c2VyU2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZp''@;'; put 'put ''Y2Uuc2VsZWN0ZWREYXlDaGFuZ2V9dHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpJiYodGhpcy5jb250cm9sLmNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLHRoaXMuY29udHJvbC5jb250''@;'; put 'put ''cm9sPy5zZXRFcnJvcnModGhpcy5jb250cm9sLmNvbnRyb2wuZXJyb3JzKSl9dXBkYXRlRGF5TW9kZWwodCl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UucGVyc2lzdGVkRGF0ZT10aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT10fX1yZXR1cm4gbi5cdTAyNzVmYWM9''@;'; put 'put ''KCgpPT57bGV0IGU7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybihlfHwoZT13YShuKSkpKHJ8fG4pfX0pKCksbi5cdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2xyU3RhcnREYXRlIiwiIl1dLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHQscil7MiZ0JiYo''@;'; put 'put ''UnIoInNpemUiLHIuaW5wdXRTaXplKSxPMigidGV4dC1hbGlnbiIsInJpZ2h0Iiksd3IoImNsci1pbnB1dCIsITApKX0saW5wdXRzOntpbnB1dFdpZHRoOiJpbnB1dFdpZHRoIixkYXRlOlswLCJjbHJTdGFydERhdGUiLCJkYXRlIl19LG91dHB1dHM6e2RhdGVDaGFuZ2U6ImNsclN0YXJ0RGF0''@;'; put 'put ''ZUNoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2JvKFtSdl0pLEZvXX0pLG59KSgpLHdNPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnBvc2l0aW9uPUEzWyJib3R0b20tbGVmdCJdLHRoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn1nZXQgaXNEYXlWaWV3KCl7cmV0''@;'; put 'put ''dXJuIkRBWVZJRVciPT09dGhpcy5fY3VycmVudFZpZXd9Z2V0IGlzWWVhclZpZXcoKXtyZXR1cm4iWUVBUlZJRVciPT09dGhpcy5fY3VycmVudFZpZXd9Z2V0IGlzTW9udGhWaWV3KCl7cmV0dXJuIk1PTlRIVklFVyI9PT10aGlzLl9jdXJyZW50Vmlld31jaGFuZ2VUb01vbnRoVmlldygpe3Ro''@;'; put 'put ''aXMuX2N1cnJlbnRWaWV3PSJNT05USFZJRVcifWNoYW5nZVRvWWVhclZpZXcoKXt0aGlzLl9jdXJyZW50Vmlldz0iWUVBUlZJRVcifWNoYW5nZVRvRGF5Vmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXco''@;'; put 'put ''dHx8bil9LG4uXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksbU1lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxyLGksbyxhLGwpe3RoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9dCx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9cix0aGlz''@;'; put 'put ''Ll9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWksdGhpcy5fZWxSZWY9byx0aGlzLl92aWV3TWFuYWdlclNlcnZpY2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9bCx0aGlzLl9mb2N1c2VkTW9udGhJbmRleD10aGlzLmNhbGVuZGFyTW9udGhJbmRleH1nZXQgbW9udGhOYW1lcygpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZU1vbnRoc1dpZGV9Z2V0IGNhbGVuZGFyTW9udGhJbmRleCgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIubW9udGh9Z2V0IGNhbGVuZGFyRW5kTW9udGhJbmRleCgpe3JldHVybiB0aGlzLl9k''@;'; put 'put ''YXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/Lm1vbnRofWdldCB5ZWFyQXR0clN0cmluZygpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclNlbGVjdFllYXJUZXh0LHtDQUxFTkRBUl9ZRUFSOnRoaXMu''@;'; put 'put ''Y2FsZW5kYXJZZWFyLnRvU3RyaW5nKCl9KX1nZXQgY2FsZW5kYXJZZWFyKCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhci55ZWFyfWdldCBjdXJyZW50Q2FsZW5kYXJZZWFyKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpfWdldCBj''@;'; put 'put ''dXJyZW50Q2FsZW5kYXJNb250aCgpe3JldHVybihuZXcgRGF0ZSkuZ2V0TW9udGgoKX1nZXRJc1JhbmdlU3RhcnRNb250aCh0KXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25T''@;'; put 'put ''ZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyJiZ0PT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py5tb250aH1nZXRJc1JhbmdlRW5kTW9udGgodCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmNhbGVuZGFyWWVh''@;'; put 'put ''cj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ueWVhciYmdD09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ubW9udGh9Y2hhbmdlVG9ZZWFyVmlldygpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb1llYXJW''@;'; put 'put ''aWV3KCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW9uS2V5RG93bih0KXtpZih0KXtjb25zdCByPXRtKHQua2V5KTtyPT09TW8uQXJyb3dVcCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg+MT8odC5wcmV2ZW50''@;'; put 'put ''RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4LT0yLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKSk6cj09PU1vLkFycm93RG93biYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg8MTA/KHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1''@;'; put 'put ''c2VkTW9udGhJbmRleCs9Mix0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZikpOnI9PT1Nby5BcnJvd1JpZ2h0JiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleDwxMT8odC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4KyssdGhp''@;'; put 'put ''cy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpyPT09TW8uQXJyb3dMZWZ0JiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleD4wJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4LS0sdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2Vy''@;'; put 'put ''dmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKX19aXNTZWxlY3RlZCh0KXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyPT09dGhpcy5jYWxlbmRhclllYXImJnQ9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/Lm1v''@;'; put 'put ''bnRofHx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/LnllYXI9PT10aGlzLmNhbGVuZGFyWWVhciYmdD09PXRoaXMuY2FsZW5kYXJFbmRNb250aEluZGV4fW9uSG92ZXIodCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRNb250aD10fWNoYW5n''@;'; put 'put ''ZU1vbnRoKHQpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5jaGFuZ2VNb250aCh0KSx0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9EYXlWaWV3KCl9Z2V0VGFiSW5kZXgodCl7cmV0dXJuIHQ9PT10aGlzLl9mb2N1c2VkTW9udGhJbmRleD8wOi0xfW5leHRZZWFyKCl7dGhp''@;'; put 'put ''cy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb05leHRZZWFyKCl9cHJldmlvdXNZZWFyKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb1ByZXZpb3VzWWVhcigpfWN1cnJlbnRZZWFyKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb0N1cnJlbnRNb250''@;'; put 'put ''aCgpfWlzSW5SYW5nZSh0KXtyZXR1cm4hIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/dGhpcy5jYWxlbmRh''@;'; put 'put ''clllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciYmdD50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkubW9udGgmJnRoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5''@;'; put 'put ''LnllYXImJnQ8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Lm1vbnRofHx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciE9PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS55ZWFyJiZ0aGlzLmNhbGVu''@;'; put 'put ''ZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZ0PnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS5tb250aHx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXIhPT10aGlzLl9kYXRlTmF2''@;'; put 'put ''aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhciYmdGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhciYmdDx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkubW9udGh8fHRoaXMuY2Fs''@;'; put 'put ''ZW5kYXJZZWFyPnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZ0aGlzLmNhbGVuZGFyWWVhcjx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhcjohKCF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXl8''@;'; put 'put ''fHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheSkmJih0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZ0PnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS5tb250aCYmdDx0''@;'; put 'put ''aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZE1vbnRofHx0aGlzLmNhbGVuZGFyWWVhcj50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciYmdDx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZE1vbnRoKSl9fXJldHVybiBuLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKFZEKSx6ZShOcCksemUoUnYpLHplKG5vKSx6ZSh3TSksemUoaWwpKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLW1vbnRocGlja2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJhcHBsaWNhdGlvbiJd''@;'; put 'put ''LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHQscil7MSZ0JiZ3dCgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIHIub25LZXlEb3duKG8pfSksMiZ0JiZ3cigibW9udGhwaWNrZXIiLCEwKX0sc3RhbmRhbG9uZTohMSxkZWNsczoxMyx2YXJzOjEwLGNvbnN0czpbWzEsImNh''@;'; put 'put ''bGVuZGFyLWhlYWRlciIsImluLW1vbnRocGlja2VyIl0sWzEsInllYXItdmlldy1zd2l0Y2hlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwieWVhcnBpY2tlci10cmlnZ2VyIiwzLCJjbGljayJdLFsxLCJjYWxlbmRhci1zd2l0Y2hlcnMiXSxbInR5cGUiLCJidXR0b24i''@;'; put 'put ''LDEsImNhbGVuZGFyLWJ0biIsInN3aXRjaGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsImxlZnQiXSxbInNoYXBlIiwiZXZlbnQiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCJdLFsxLCJtb250aHMiXSxbInR5cGUiLCJidXR0b24iLCJj''@;'; put 'put ''bGFzcyIsImNhbGVuZGFyLWJ0biBtb250aCIsMywiaXMtc2VsZWN0ZWQiLCJpcy1zdGFydC1yYW5nZSIsImlzLWVuZC1yYW5nZSIsImluLXJhbmdlIiwiaXMtdG9kYXkiLCJjbGljayIsIm1vdXNlZW50ZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5k''@;'; put 'put ''YXItYnRuIiwibW9udGgiLDMsImNsaWNrIiwibW91c2VlbnRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpezEmdCYmKEooMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLmNoYW5nZVRvWWVhclZpZXcoKX0pLFNlKDMp''@;'; put 'put ''LHRlKCkoKSxKKDQsImRpdiIsMykoNSwiYnV0dG9uIiw0KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHIucHJldmlvdXNZZWFyKCl9KSxJdCg2LCJjZHMtaWNvbiIsNSksdGUoKSxKKDcsImJ1dHRvbiIsNCksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLmN1cnJlbnRZZWFy''@;'; put 'put ''KCl9KSxJdCg4LCJjZHMtaWNvbiIsNiksdGUoKSxKKDksImJ1dHRvbiIsNCksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLm5leHRZZWFyKCl9KSxJdCgxMCwiY2RzLWljb24iLDcpLHRlKCkoKSgpLEooMTEsImRpdiIsOCksWW4oMTIscjZ0LDIsMTIsImJ1dHRvbiIsOSksdGUoKSks''@;'; put 'put ''MiZ0JiYoaWUoMiksUnIoImFyaWEtbGFiZWwiLHIueWVhckF0dHJTdHJpbmcpKCJ0aXRsZSIsci55ZWFyQXR0clN0cmluZyksaWUoKSxTcigiICIsci5jYWxlbmRhclllYXIsIiAiKSxpZSgyKSxScigiYXJpYS1sYWJlbCIsci5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3Vz''@;'; put 'put ''TW9udGgpLGllKCksUnIoInRpdGxlIixyLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyUHJldmlvdXNNb250aCksaWUoKSxScigiYXJpYS1sYWJlbCIsci5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnRNb250aCksaWUoKSxScigidGl0bGUiLHIuY29tbW9uU3RyaW5n''@;'; put 'put ''cy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50TW9udGgpLGllKCksUnIoImFyaWEtbGFiZWwiLHIuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0TW9udGgpLGllKCksUnIoInRpdGxlIixyLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxpZSgyKSxydCgibmdG''@;'; put 'put ''b3JPZiIsci5tb250aE5hbWVzKSl9LGRlcGVuZGVuY2llczpbUmYsSnNdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpO2NsYXNzIEJEe2NvbnN0cnVjdG9yKGUpe3RoaXMueWVhcj1lLHRoaXMueWVhclJhbmdlPVtdLHRoaXMuZ2VuZXJhdGVZZWFyUmFuZ2UoKX1nZXQgbWlkZGxlWWVhcigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnllYXJSYW5nZVtNYXRoLmZsb29yKHRoaXMueWVhclJhbmdlLmxlbmd0aC8yKV19bmV4dERlY2FkZSgpe3JldHVybiBuZXcgQkQodGhpcy55ZWFyKzEwKX1wcmV2aW91c0RlY2FkZSgpe3JldHVybiBuZXcgQkQodGhpcy55ZWFyLTEwKX1jdXJyZW50RGVjYWRlKCl7cmV0dXJu''@;'; put 'put ''IG5ldyBCRCgobmV3IERhdGUpLmdldEZ1bGxZZWFyKCkpfWluUmFuZ2UoZSl7cmV0dXJuIHRoaXMueWVhclJhbmdlLmluZGV4T2YoZSk+LTF9Z2VuZXJhdGVZZWFyUmFuZ2UoKXtjb25zdCB0PXRoaXMueWVhci10aGlzLnllYXIlMTA7dGhpcy55ZWFyUmFuZ2U9dGhpcy5nZW5lcmF0ZVJhbmdl''@;'; put 'put ''KHQsdCsxMCl9Z2VuZXJhdGVSYW5nZShlLHQpe3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6dC1lfSwocixpKT0+aStlKX19bGV0IF9NZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscixpLG8sYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPXQsdGhpcy5fdmlld01hbmFnZXJT''@;'; put 'put ''ZXJ2aWNlPXIsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZT1pLHRoaXMuX2VsUmVmPW8sdGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy55ZWFyUmFuZ2VNb2RlbD1uZXcgQkQodGhpcy5jYWxlbmRhclllYXIpLHRoaXMuX2ZvY3VzZWRZZWFyPXRoaXMuY2FsZW5kYXJZZWFyfWdldCBzZWxl''@;'; put 'put ''Y3RlZFN0YXJ0WWVhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LnllYXJ9Z2V0IHNlbGVjdGVkRW5kWWVhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/LnllYXJ9Z2V0IGNhbGVuZGFyWWVhcigp''@;'; put 'put ''e3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIueWVhcn1pc0N1cnJlbnRDYWxlbmRhclllYXIodCl7cmV0dXJuIHQ9PT0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCl9Z2V0SXNSYW5nZVN0YXJ0WWVhcih0KXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmln''@;'; put 'put ''YXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnQ9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LnllYXJ9Z2V0SXNSYW5nZUVuZFllYXIodCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0PT09dGhpcy5fZGF0ZU5h''@;'; put 'put ''dmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py55ZWFyfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX1vbktleURvd24odCl7aWYodCl7Y29uc3Qgcj10bSh0LmtleSk7cj09PU1vLkFycm93VXA/KHQucHJl''@;'; put 'put ''dmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KC0yKSk6cj09PU1vLkFycm93RG93bj8odC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVtZW50Rm9jdXNZZWFyQnkoMikpOnI9PT1Nby5BcnJvd1JpZ2h0Pyh0LnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNyZW1lbnRG''@;'; put 'put ''b2N1c1llYXJCeSgxKSk6cj09PU1vLkFycm93TGVmdCYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KC0xKSl9fWNoYW5nZVllYXIodCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNoYW5nZVllYXIodCksdGhpcy5fdmlld01hbmFnZXJTZXJ2aWNl''@;'; put 'put ''LmNoYW5nZVRvRGF5VmlldygpfW9uSG92ZXIodCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRZZWFyPXR9cHJldmlvdXNEZWNhZGUoKXt0aGlzLnllYXJSYW5nZU1vZGVsPXRoaXMueWVhclJhbmdlTW9kZWwucHJldmlvdXNEZWNhZGUoKX1jdXJyZW50RGVjYWRlKCl7dGhp''@;'; put 'put ''cy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS50b2RheS55ZWFyKXx8KHRoaXMueWVhclJhbmdlTW9kZWw9dGhpcy55ZWFyUmFuZ2VNb2RlbC5jdXJyZW50RGVjYWRlKCkpLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRo''@;'; put 'put ''aXMuX2VsUmVmKX1uZXh0RGVjYWRlKCl7dGhpcy55ZWFyUmFuZ2VNb2RlbD10aGlzLnllYXJSYW5nZU1vZGVsLm5leHREZWNhZGUoKX1nZXRUYWJJbmRleCh0KXtyZXR1cm4gdGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuX2ZvY3VzZWRZZWFyKXx8KHRoaXMuX2ZvY3VzZWRZZWFy''@;'; put 'put ''PXRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLmNhbGVuZGFyWWVhcik/dGhpcy5jYWxlbmRhclllYXI6dGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuc2VsZWN0ZWRFbmRZZWFyKT90aGlzLnNlbGVjdGVkRW5kWWVhcjp0aGlzLnllYXJSYW5nZU1vZGVsLm1pZGRsZVll''@;'; put 'put ''YXIpLHRoaXMuX2ZvY3VzZWRZZWFyPT09dD8wOi0xfWlzSW5SYW5nZSh0KXtyZXR1cm4hIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyJiZ0aGlzLnNlbGVjdGVkRW5kWWVhcj90''@;'; put 'put ''PnRoaXMuc2VsZWN0ZWRTdGFydFllYXImJnQ8dGhpcy5zZWxlY3RlZEVuZFllYXI6ISghdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyfHx0aGlzLnNlbGVjdGVkRW5kWWVhcikmJnQ+dGhpcy5zZWxlY3RlZFN0YXJ0WWVhciYmdDx0aGlzLl9kYXRlTmF2aWdh''@;'; put 'put ''dGlvblNlcnZpY2UuaG92ZXJlZFllYXIpfWNoYW5nZVRvRGF5Vmlldygpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1pbmNyZW1lbnRGb2N1c1llYXJCeSh0KXt0aGlzLl9mb2N1c2VkWWVhcj10aGlzLl9mb2N1c2VkWWVhcit0LHRoaXMueWVhclJhbmdlTW9k''@;'; put 'put ''ZWwuaW5SYW5nZSh0aGlzLl9mb2N1c2VkWWVhcil8fCh0aGlzLnllYXJSYW5nZU1vZGVsPXQ+MD90aGlzLnllYXJSYW5nZU1vZGVsLm5leHREZWNhZGUoKTp0aGlzLnllYXJSYW5nZU1vZGVsLnByZXZpb3VzRGVjYWRlKCkpLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxs''@;'; put 'put ''KHRoaXMuX2VsUmVmKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoTnApLHplKHdNKSx6ZShSdiksemUobm8pLHplKGlsKSl9LG4uXHUwMjc1Y21wPVByKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci15ZWFycGlja2VyIl1dLGhvc3RBdHRyczpb''@;'; put 'put ''InJvbGUiLCJhcHBsaWNhdGlvbiJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHQscil7MSZ0JiZ3dCgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIHIub25LZXlEb3duKG8pfSksMiZ0JiZ3cigieWVhcnBpY2tlciIsITApfSxzdGFuZGFsb25lOiExLGRlY2xzOjEzLHZh''@;'; put 'put ''cnM6OSxjb25zdHM6W1sxLCJjYWxlbmRhci1oZWFkZXIiXSxbMSwiY2FsZW5kYXItcGlja2VycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwieWVhcnBpY2tlci10cmlnZ2VyIiwieWVhci1yYW5nZSIsMywiY2xpY2siXSxbMSwieWVhci1zd2l0Y2hlcnMiXSxbInR5cGUi''@;'; put 'put ''LCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInN3aXRjaGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsImxlZnQiXSxbInNoYXBlIiwiZXZlbnQiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCJdLFsxLCJ5ZWFycyJdLFsidHlwZSIsImJ1''@;'; put 'put ''dHRvbiIsImNsYXNzIiwiY2FsZW5kYXItYnRuIHllYXIiLDMsImlzLXNlbGVjdGVkIiwiaXMtc3RhcnQtcmFuZ2UiLCJpcy1lbmQtcmFuZ2UiLCJpbi1yYW5nZSIsImlzLXRvZGF5IiwiY2xpY2siLCJtb3VzZWVudGVyIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInR5cGUiLCJidXR0b24iLDEs''@;'; put 'put ''ImNhbGVuZGFyLWJ0biIsInllYXIiLDMsImNsaWNrIiwibW91c2VlbnRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpezEmdCYmKEooMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLmNoYW5nZVRvRGF5VmlldygpfSks''@;'; put 'put ''U2UoMyksdGUoKSgpLEooNCwiZGl2IiwzKSg1LCJidXR0b24iLDQpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gci5wcmV2aW91c0RlY2FkZSgpfSksSXQoNiwiY2RzLWljb24iLDUpLHRlKCksSig3LCJidXR0b24iLDQpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gci5jdXJy''@;'; put 'put ''ZW50RGVjYWRlKCl9KSxJdCg4LCJjZHMtaWNvbiIsNiksdGUoKSxKKDksImJ1dHRvbiIsNCksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLm5leHREZWNhZGUoKX0pLEl0KDEwLCJjZHMtaWNvbiIsNyksdGUoKSgpKCksSigxMSwiZGl2Iiw4KSxZbigxMixpNnQsMiwxMiwiYnV0dG9u''@;'; put 'put ''Iiw5KSx0ZSgpKSwyJnQmJihpZSgzKSxOaCgiICIsci55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2VbMF0sIiAtICIsci55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2Vbci55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2UubGVuZ3RoLTFdLCIgIiksaWUoMiksUnIoImFyaWEtbGFiZWwiLHIuY29tbW9u''@;'; put 'put ''U3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZSksaWUoKSxScigidGl0bGUiLHIuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZSksaWUoKSxScigiYXJpYS1sYWJlbCIsci5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnREZWNh''@;'; put 'put ''ZGUpLGllKCksUnIoInRpdGxlIixyLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudERlY2FkZSksaWUoKSxScigiYXJpYS1sYWJlbCIsci5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNhZGUpLGllKCksUnIoInRpdGxlIixyLmNvbW1vblN0cmluZ3Mua2V5''@;'; put 'put ''cy5kYXRlcGlja2VyTmV4dERlY2FkZSksaWUoMikscnQoIm5nRm9yT2YiLHIueWVhclJhbmdlTW9kZWwueWVhclJhbmdlKSl9LGRlcGVuZGVuY2llczpbUmYsSnNdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHlNZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscixpLG8pe3RoaXMuX3Zp''@;'; put 'put ''ZXdNYW5hZ2VyU2VydmljZT10LHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1yLHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9aSx0aGlzLmNvbW1vblN0cmluZ3M9b31nZXQgbW9udGhBdHRyU3RyaW5nKCl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0''@;'; put 'put ''cmluZ3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0TW9udGhUZXh0LHtDQUxFTkRBUl9NT05USDp0aGlzLmNhbGVuZGFyTW9udGh9KX1nZXQgeWVhckF0dHJTdHJpbmcoKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxl''@;'; put 'put ''Y3RZZWFyVGV4dCx7Q0FMRU5EQVJfWUVBUjp0aGlzLmNhbGVuZGFyWWVhci50b1N0cmluZygpfSl9Z2V0IGNhbGVuZGFyTW9udGgoKXtyZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2NhbGVNb250aHNBYmJyZXZpYXRlZFt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlz''@;'; put 'put ''cGxheWVkQ2FsZW5kYXIubW9udGhdfWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9Y2hhbmdlVG9Nb250aFZpZXcoKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9Nb250aFZpZXcoKX1j''@;'; put 'put ''aGFuZ2VUb1llYXJWaWV3KCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvWWVhclZpZXcoKX1uZXh0TW9udGgoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvTmV4dE1vbnRoKCl9cHJldmlvdXNNb250aCgpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5t''@;'; put 'put ''b3ZlVG9QcmV2aW91c01vbnRoKCl9Y3VycmVudE1vbnRoKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb0N1cnJlbnRNb250aCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZSh3TSksemUoTnApLHplKFZEKSx6ZShpbCkpfSxu''@;'; put 'put ''Llx1MDI3NWNtcD1Qcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItZGF5cGlja2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJhcHBsaWNhdGlvbiJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHQscil7MiZ0JiZ3cigiZGF5cGlja2VyIiwhMCl9LHN0YW5kYWxvbmU6ITEsZGVj''@;'; put 'put ''bHM6MTgsdmFyczoxNCxjb25zdHM6W1sxLCJjbHItc3Itb25seSJdLFsxLCJjYWxlbmRhci1oZWFkZXIiXSxbMSwiY2FsZW5kYXItcGlja2VycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwibW9udGhwaWNrZXItdHJpZ2dlciIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0''@;'; put 'put ''b24iLDEsImNhbGVuZGFyLWJ0biIsInllYXJwaWNrZXItdHJpZ2dlciIsMywiY2xpY2siXSxbMSwiY2FsZW5kYXItc3dpdGNoZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJzd2l0Y2hlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJs''@;'; put 'put ''ZWZ0Il0sWyJzaGFwZSIsImV2ZW50Il0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24odCxyKXsxJnQmJihKKDAsImRpdiIsMCksU2UoMSksdGUoKSxKKDIsImRpdiIsMSkoMywiZGl2IiwyKSg0LCJidXR0b24iLDMpLHd0KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gci5jaGFuZ2VUb01vbnRoVmlldygpfSksU2UoNSksdGUoKSxKKDYsImJ1dHRvbiIsNCksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLmNoYW5nZVRvWWVhclZpZXcoKX0pLFNlKDcpLHRlKCkoKSxKKDgsImRpdiIsNSkoOSwiYnV0dG9uIiw2KSx3dCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHIucHJldmlvdXNNb250aCgpfSksSXQoMTAsImNkcy1pY29uIiw3KSx0ZSgpLEooMTEsImJ1dHRvbiIsNiksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLmN1cnJlbnRNb250aCgpfSksSXQoMTIsImNkcy1pY29uIiw4KSx0ZSgpLEooMTMs''@;'; put 'put ''ImJ1dHRvbiIsNiksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLm5leHRNb250aCgpfSksSXQoMTQsImNkcy1pY29uIiw5KSx0ZSgpKCkoKSxJdCgxNSwiY2xyLWNhbGVuZGFyIiksSigxNiwiZGl2IiwwKSxTZSgxNyksdGUoKSksMiZ0JiYoaWUoKSxwcihyLmNvbW1vblN0cmluZ3Mu''@;'; put 'put ''a2V5cy5tb2RhbENvbnRlbnRTdGFydCksaWUoMyksUnIoImFyaWEtbGFiZWwiLHIubW9udGhBdHRyU3RyaW5nKSgidGl0bGUiLHIubW9udGhBdHRyU3RyaW5nKSxpZSgpLFNyKCIgIixyLmNhbGVuZGFyTW9udGgsIiAiKSxpZSgpLFJyKCJhcmlhLWxhYmVsIixyLnllYXJBdHRyU3RyaW5nKSgi''@;'; put 'put ''dGl0bGUiLHIueWVhckF0dHJTdHJpbmcpLGllKCksU3IoIiAiLHIuY2FsZW5kYXJZZWFyLCIgIiksaWUoMiksUnIoImFyaWEtbGFiZWwiLHIuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxpZSgpLFJyKCJ0aXRsZSIsci5jb21tb25TdHJpbmdzLmtleXMuZGF0''@;'; put 'put ''ZXBpY2tlclByZXZpb3VzTW9udGgpLGllKCksUnIoImFyaWEtbGFiZWwiLHIuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50TW9udGgpLGllKCksUnIoInRpdGxlIixyLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxpZSgpLFJyKCJhcmlhLWxh''@;'; put 'put ''YmVsIixyLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxpZSgpLFJyKCJ0aXRsZSIsci5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHRNb250aCksaWUoMykscHIoci5jb21tb25TdHJpbmdzLmtleXMubW9kYWxDb250ZW50RW5kKSl9LGRlcGVuZGVuY2ll''@;'; put 'put ''czpbSnMsZk1lXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxiTWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0LHIsaSxvKXt0aGlzLmNvbW1vblN0cmluZ3M9dCx0aGlzLnRvZ2dsZVNlcnZpY2U9cix0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1pLHRoaXMuZGF0ZUZvcm1Db250cm9s''@;'; put 'put ''U2VydmljZT1vfWFwcGx5KCl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkmJnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Pyh0aGlzLmRhdGVOYXZpZ2F0aW9uU2Vy''@;'; put 'put ''dmljZS5ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQoe3N0YXJ0RGF0ZTp0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSxlbmREYXRlOnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5fSksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLm1hcmtB''@;'; put 'put ''c0RpcnR5KCkpOiF0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSYmKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZCh0aGlzLmRhdGVOYXZpZ2F0aW9u''@;'; put 'put ''U2VydmljZS5zZWxlY3RlZERheSksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLm1hcmtBc0RpcnR5KCkpLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfWNhbmNlbCgpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnJlc2V0U2VsZWN0ZWREYXkoKSx0aGlzLnRvZ2dsZVNlcnZpY2Uu''@;'; put 'put ''b3Blbj0hMX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoaWwpLHplKEt1KSx6ZShOcCksemUoYk0pKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWRhdGVwaWNrZXItYWN0aW9ucyJdXSxob3N0VmFyczoyLGhvc3RC''@;'; put 'put ''aW5kaW5nczpmdW5jdGlvbih0LHIpezImdCYmd3IoImRhdGVwaWNrZXItYWN0aW9ucyIsITApfSxzdGFuZGFsb25lOiExLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXV0sdGVt''@;'; put 'put ''cGxhdGU6ZnVuY3Rpb24odCxyKXsxJnQmJihKKDAsImJ1dHRvbiIsMCksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLmNhbmNlbCgpfSksU2UoMSksdGUoKSxKKDIsImJ1dHRvbiIsMSksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLmFwcGx5KCl9KSxTZSgzKSx0ZSgpKSwy''@;'; put 'put ''JnQmJihpZSgpLHByKHIuY29tbW9uU3RyaW5ncy5rZXlzLmNhbmNlbCksaWUoMikscHIoci5jb21tb25TdHJpbmdzLmtleXMuYXBwbHkpKX0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksd01lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxyLGksbyl7dGhpcy5jb21tb25TdHJpbmdzPXQs''@;'; put 'put ''dGhpcy52aWV3TWFuYWdlclNlcnZpY2U9cix0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1pLHRoaXMuZGF0ZUlPU2VydmljZT1vfWdldCBpc01vbnRoVmlldygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc01vbnRoVmlld31nZXQgaXNZZWFyVmlldygpe3JldHVybiB0aGlz''@;'; put 'put ''LnZpZXdNYW5hZ2VyU2VydmljZS5pc1llYXJWaWV3fWdldCBpc0RheVZpZXcoKXtyZXR1cm4gdGhpcy52aWV3TWFuYWdlclNlcnZpY2UuaXNEYXlWaWV3fWdldCBoYXNSYW5nZU9wdGlvbnMoKXtyZXR1cm4hIXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPy5pc1JhbmdlUGlja2VyJiYhIXRo''@;'; put 'put ''aXMuZGF0ZVJhbmdlT3B0aW9ucz8ubGVuZ3RofWdldCBoYXNBY3Rpb25CdXR0b25zKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhhc0FjdGlvbkJ1dHRvbnN9Z2V0IGRhdGVSYW5nZU9wdGlvbnMoKXtyZXR1cm4gdGhpcy5kYXRlSU9TZXJ2aWNlLmdldFJhbmdlT3B0aW9u''@;'; put 'put ''cygpfW9uUmFuZ2VPcHRpb25TZWxlY3QodCl7Y29uc3Qgcj10aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5jb252ZXJ0RGF0ZVRvRGF5TW9kZWwodD8udmFsdWVbMF0pLGk9dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuY29udmVydERhdGVUb0RheU1vZGVsKHQ/LnZhbHVlWzFdKTt0aGlz''@;'; put 'put ''LmRhdGVOYXZpZ2F0aW9uU2VydmljZS5ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQoe3N0YXJ0RGF0ZTpyLGVuZERhdGU6aX0se2VtaXRFdmVudDohdGhpcy5oYXNBY3Rpb25CdXR0b25zfSksdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvU3BlY2lmaWNNb250aChyKX19cmV0dXJu''@;'; put 'put ''IG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoaWwpLHplKHdNKSx6ZShOcCksemUoczcpKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJkaWFsb2ci''@;'; put 'put ''XSxob3N0VmFyczo4LGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezImdCYmKFJyKCJhcmlhLW1vZGFsIiwhMCkoImFyaWEtbGFiZWwiLHIuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJEaWFsb2dMYWJlbCksd3IoImRhdGVwaWNrZXIiLCEwKSgiaGFzLXJhbmdlLW9wdGlvbiIsci5o''@;'; put 'put ''YXNSYW5nZU9wdGlvbnMpKCJoYXMtYWN0aW9uLWJ1dHRvbnMiLHIuaGFzQWN0aW9uQnV0dG9ucykpfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltibyhbUnZdKV0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbImNhbGVuZGFyVmlldyIsIiJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbMSwiY2xy''@;'; put 'put ''LWRhdGUtcmFuZ2UtcGlja2VyLW5hdiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwiaHJlZiIsImphdmFzY3JpcHQ6dm9pZCgwKSIsInRhYmluZGV4Iiwi''@;'; put 'put ''MCIsMywia2V5dXAuZW50ZXIiLCJjbGljayJdLFs0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHQscil7aWYoMSZ0JiZZbigwLHM2dCw1LDIsIm5nLWNvbnRhaW5lciIsMSkoMSxoNnQsNCw0LCJuZy10ZW1wbGF0ZSIsbnVsbCwwLGNkKSwyJnQpe2NvbnN0IGk9b28oMik7cnQoIm5nSWYi''@;'; put 'put ''LHIuaGFzUmFuZ2VPcHRpb25zKSgibmdJZkVsc2UiLGkpfX0sZGVwZW5kZW5jaWVzOltSZixZcyxJZixsYWUsdWFlLG1NZSxfTWUseU1lLGJNZV0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksblc9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFdie2NvbnN0cnVjdG9yKHQscixpLG8sYSxsLHUsZyxF''@;'; put 'put ''LE8sWixlZSx2ZSxNZSl7aWYoc3VwZXIoTWUsZWUsWix2ZSksdGhpcy5yZW5kZXJlcj10LHRoaXMuZWxlbT1yLHRoaXMudG9nZ2xlU2VydmljZT1pLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPW8sdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2U9YSx0aGlzLmRhdGVGb3JtQ29udHJv''@;'; put 'put ''bFNlcnZpY2U9bCx0aGlzLmRhdGVJT1NlcnZpY2U9dSx0aGlzLmNvbW1vblN0cmluZ3M9Zyx0aGlzLnZpZXdNYW5hZ2VyU2VydmljZT1PLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1aLHRoaXMubGF5b3V0U2VydmljZT1lZSx0aGlzLm5nQ29udHJvbFNlcnZpY2U9dmUsdGhpcy5pZkNvbnRy''@;'; put 'put ''b2xTdGF0ZVNlcnZpY2U9TWUsdGhpcy5mb2N1cz0hMSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChFLmZvY3VzQ2hhbmdlLnN1YnNjcmliZShIZT0+e3RoaXMuZm9jdXM9SGV9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaS5vcGVuQ2hhbmdlLnN1YnNjcmliZSgoKT0+e2wubWFya0FzVG91''@;'; put 'put ''Y2hlZCgpfSkpLG8pe2NvbnN0IEhlPXIubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7by5oYXNBY3Rpb25CdXR0b25zPW8uaXNSYW5nZVBpY2tlcj0iY2xyLWRhdGUtcmFuZ2UtY29udGFpbmVyIj09PUhlfX1zZXQgc2hvd0FjdGlvbkJ1dHRvbnModCl7dGhpcy5kYXRlTmF2''@;'; put 'put ''aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmIXQ/Y29uc29sZS5lcnJvcigiRXJyb3IhIFRoZSBkYXRlIHJhbmdlIHBpY2tlciByZXF1aXJlcyBhY3Rpb24gYnV0dG9ucywgW3Nob3dBY3Rpb25CdXR0b25zXSBjYW5ub3QgYmUgdHVybmVkIG9mZi4iKTp0aGlzLmRhdGVOYXZpZ2F0aW9u''@;'; put 'put ''U2VydmljZS5oYXNBY3Rpb25CdXR0b25zPXR9c2V0IGNsclBvc2l0aW9uKHQpe3QmJkEzW3RdJiYodGhpcy52aWV3TWFuYWdlclNlcnZpY2UucG9zaXRpb249QTNbdF0pfXNldCByYW5nZU9wdGlvbnModCl7dGhpcy5kYXRlSU9TZXJ2aWNlLnNldFJhbmdlT3B0aW9ucyh0KX1zZXQgbWluKHQp''@;'; put 'put ''e3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXI/KHRoaXMuZGF0ZUlPU2VydmljZS5zZXRNaW5EYXRlKHQpLHRoaXMuY2xyU3RhcnREYXRlSW5wdXQ/LnRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCksdGhpcy5jbHJFbmREYXRlSW5wdXQ/LnRyaWdnZXJDb250''@;'; put 'put ''cm9sSW5wdXRWYWxpZGF0aW9uKCkpOmNvbnNvbGUuZXJyb3IoIkVycm9yISBUaGUgZGF0ZSBjb250YWluZXIgW21pbl0gaW5wdXQgb25seSB3b3JrcyBmb3IgZGF0ZSByYW5nZSBwaWNrZXJzLiBVc2UgdGhlIG5hdGl2ZSBgbWluYCBhdHRyaWJ1dGUvcHJvcGVydHkgZm9yIHNpbmdsZS1kYXRl''@;'; put 'put ''IGlucHV0cy4iKX1zZXQgbWF4KHQpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXI/KHRoaXMuZGF0ZUlPU2VydmljZS5zZXRNYXhEYXRlKHQpLHRoaXMuY2xyU3RhcnREYXRlSW5wdXQ/LnRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCksdGhpcy5jbHJFbmRE''@;'; put 'put ''YXRlSW5wdXQ/LnRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCkpOmNvbnNvbGUuZXJyb3IoIkVycm9yISBUaGUgZGF0ZSBjb250YWluZXIgW21heF0gaW5wdXQgb25seSB3b3JrcyBmb3IgZGF0ZSByYW5nZSBwaWNrZXJzLiBVc2UgdGhlIG5hdGl2ZSBgbWF4YCBhdHRyaWJ1dGUvcHJv''@;'; put 'put ''cGVydHkgZm9yIHNpbmdsZS1kYXRlIGlucHV0cy4iKX1zZXQgYWN0aW9uQnV0dG9uKHQpe3RoaXMudG9nZ2xlQnV0dG9uPXR9Z2V0IHBvcG92ZXJQb3NpdGlvbigpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5wb3NpdGlvbn1nZXQgb3Blbigpe3JldHVybiB0aGlzLnRvZ2dsZVNl''@;'; put 'put ''cnZpY2Uub3Blbn1nZXQgaXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlLmlzRW5hYmxlZH1nZXQgaXNJbnB1dERhdGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5kaXNhYmxlZHx8dGhpcy5kYXRlRm9ybUNvbnRyb2xT''@;'; put 'put ''ZXJ2aWNlJiZ0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UuZGlzYWJsZWR9Z2V0IGlzUmFuZ2VQaWNrZXIoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcn1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmRhdGVSYW5nZVN0cnVjdHVyYWxDaGVja3MoKSx0''@;'; put 'put ''aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUodD0+e3Q/dGhpcy5pbml0aWFsaXplQ2FsZW5kYXIoKToodGhpcy50b2dnbGVCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnJl''@;'; put 'put ''c2V0U2VsZWN0ZWREYXkoKSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JEYXRlQ2hhbmdlcygpKX1nZXRUb2dnbGVCdXR0b25MYWJlbCh0KXtpZih0KXtjb25zdCByPXRoaXMuZGF0ZUlPU2VydmljZS50b0xvY2FsZURpc3BsYXlGb3JtYXRTdHJpbmcodC50b0Rh''@;'; put 'put ''dGUoKSk7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyVG9nZ2xlQ2hhbmdlRGF0ZUxhYmVsLHtTRUxFQ1RFRF9EQVRFOnJ9KX1yZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclRvZ2dsZUNob29z''@;'; put 'put ''ZURhdGVMYWJlbH1saXN0ZW5Gb3JEYXRlQ2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheUNoYW5nZS5waXBlKHFnKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSkuc3Vic2NyaWJlKHQ9PntpZih0aGlzLmlzRW5hYmxl''@;'; put 'put ''ZCl7Y29uc3Qgcj10aGlzLmdldFRvZ2dsZUJ1dHRvbkxhYmVsKHQpLGk9dGhpcy50b2dnbGVCdXR0b24ubmF0aXZlRWxlbWVudDt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShpLCJhcmlhLWxhYmVsIixyKSx0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShpLCJ0aXRsZSIscil9fSl9aW5p''@;'; put 'put ''dGlhbGl6ZUNhbGVuZGFyKCl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5pdGlhbGl6ZUNhbGVuZGFyKCl9ZGF0ZVJhbmdlU3RydWN0dXJhbENoZWNrcygpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJih0aGlzLmNsckRhdGVJbnB1dCYmY29uc29sZS5l''@;'; put 'put ''cnJvcigiRXJyb3IhIGNsci1kYXRlLXJhbmdlLWNvbnRhaW5lciBtdXN0IGNvbnRhaW4gY2xyU3RhcnREYXRlIGFuZCBjbHJFbmREYXRlIGlucHV0cyIpLHRoaXMuY2xyU3RhcnREYXRlSW5wdXR8fGNvbnNvbGUuZXJyb3IoIkVycm9yISBjbHItZGF0ZS1yYW5nZS1jb250YWluZXIgbXVzdCBj''@;'; put 'put ''b250YWluIGNsclN0YXJ0RGF0ZSBpbnB1dCIpLHRoaXMuY2xyRW5kRGF0ZUlucHV0fHxjb25zb2xlLmVycm9yKCJFcnJvciEgY2xyLWRhdGUtcmFuZ2UtY29udGFpbmVyIG11c3QgY29udGFpbiBjbHJFbmREYXRlIGlucHV0IikpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0''@;'; put 'put ''dXJuIG5ldyh0fHxuKSh6ZShOdCksemUobm8pLHplKEt1KSx6ZShOcCksemUodFcpLHplKGJNKSx6ZShzNyksemUoaWwpLHplKHZNKSx6ZSh3TSksemUoSTMpLHplKFo1LDgpLHplKGoyKSx6ZShSMykpfSxuLlx1MDI3NWNtcD1Qcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItZGF0ZS1jb250''@;'; put 'put ''YWluZXIiXSxbImNsci1kYXRlLXJhbmdlLWNvbnRhaW5lciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbih0LHIsaSl7aWYoMSZ0JiYoRmEoaSxtYWUsNSksRmEoaSxnTWUsNSksRmEoaSxwTWUsNSkpLDImdCl7bGV0IG87Y2kobz11aSgpKSYmKHIuY2xyRGF0ZUlucHV0PW8uZmlyc3QpLGNp''@;'; put 'put ''KG89dWkoKSkmJihyLmNsclN0YXJ0RGF0ZUlucHV0PW8uZmlyc3QpLGNpKG89dWkoKSkmJihyLmNsckVuZERhdGVJbnB1dD1vLmZpcnN0KX19LHZpZXdRdWVyeTpmdW5jdGlvbih0LHIpe2lmKDEmdCYmV28oZjZ0LDUpLDImdCl7bGV0IGk7Y2koaT11aSgpKSYmKHIuYWN0aW9uQnV0dG9uPWku''@;'; put 'put ''Zmlyc3QpfX0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsyJnQmJndyKCJjbHItZGF0ZS1jb250YWluZXIiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsci5pc0lucHV0RGF0ZURpc2FibGVkKSgiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItcm93Iixy''@;'; put 'put ''LmFkZEdyaWQoKSl9LGlucHV0czp7c2hvd0FjdGlvbkJ1dHRvbnM6InNob3dBY3Rpb25CdXR0b25zIixjbHJQb3NpdGlvbjoiY2xyUG9zaXRpb24iLHJhbmdlT3B0aW9uczoicmFuZ2VPcHRpb25zIixtaW46Im1pbiIsbWF4OiJtYXgifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltibyhbT3As''@;'; put 'put ''VkQsSTMsdk0sajIsczcsTnAsdFcsYk0sd00sUjNdKSx6ZyhbaTddKSxGb10sbmdDb250ZW50U2VsZWN0b3JzOmc2dCxkZWNsczoxNCx2YXJzOjE1LGNvbnN0czpbWyJhY3Rpb25CdXR0b24iLCIiXSxbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxb''@;'; put 'put ''ImNsclBvcG92ZXJBbmNob3IiLCIiLDEsImNsci1pbnB1dC13cmFwcGVyIl0sWzEsImNsci1pbnB1dC1ncm91cCJdLFsidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLCJjbGFzcyIsImNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiIsMywiZGlzYWJsZWQi''@;'; put 'put ''LDQsIm5nSWYiXSxbImNka1RyYXBGb2N1cyIsIiIsNCwiY2xyUG9wb3ZlckNvbnRlbnQiLCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIl0sWyJjbGFzcyIsImNsci12YWxp''@;'; put 'put ''ZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlh''@;'; put 'put ''LWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbMSwiZGF0ZS1yYW5nZS1zZXBhcmF0b3IiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwxLCJjbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb24iLDMsImRpc2FibGVkIl0sWyJzdGF0dXMiLCJpbmZvIiwi''@;'; put 'put ''c2hhcGUiLCJjYWxlbmRhciJdLFsiY2RrVHJhcEZvY3VzIiwiIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwi''@;'; put 'put ''c3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24odCxyKXsxJnQmJihmbyhwNnQpLFdyKDApLFluKDEsbTZ0LDEsMCwibGFiZWwiLDEpLEooMiwiZGl2IiwyKSgzLCJkaXYiLDMpKDQsImRpdiIsNCksWW4oNSx2NnQs''@;'; put 'put ''NSwwLCJuZy1jb250YWluZXIiLDEpLFdyKDYsMSksWW4oNyxfNnQsMywxLCJidXR0b24iLDUpKDgseTZ0LDEsMCwiY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIiw2KSx0ZSgpLFluKDksYjZ0LDEsMCwiY2RzLWljb24iLDcpKDEwLHc2dCwxLDAsImNkcy1pY29uIiw4KSx0ZSgpLFluKDEx''@;'; put 'put ''LEM2dCwxLDAsIm5nLWNvbnRlbnQiLDEpKDEyLFM2dCwxLDAsIm5nLWNvbnRlbnQiLDEpKDEzLEU2dCwxLDAsIm5nLWNvbnRlbnQiLDEpLHRlKCkpLDImdCYmKGllKCkscnQoIm5nSWYiLCFyLmxhYmVsJiZyLmFkZEdyaWQoKSksaWUoKSxydCgibmdDbGFzcyIsci5jb250cm9sQ2xhc3MoKSks''@;'; put 'put ''aWUoMiksd3IoImNsci1mb2N1cyIsci5mb2N1cyksaWUoKSxydCgibmdJZiIsci5pc1JhbmdlUGlja2VyKSxpZSgyKSxydCgibmdJZiIsci5pc0VuYWJsZWQpLGllKCkscnQoImNsclBvcG92ZXJDb250ZW50IixyLm9wZW4pKCJjbHJQb3BvdmVyQ29udGVudEF0IixyLnBvcG92ZXJQb3NpdGlv''@;'; put 'put ''bikoImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsITApKCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiLCEwKSxpZSgpLHJ0KCJuZ0lmIixyLnNob3dJbnZhbGlkKSxpZSgpLHJ0KCJuZ0lmIixyLnNob3dWYWxpZCksaWUoKSxydCgibmdJZiIsci5zaG93SGVs''@;'; put 'put ''cGVyKSxpZSgpLHJ0KCJuZ0lmIixyLnNob3dJbnZhbGlkKSxpZSgpLHJ0KCJuZ0lmIixyLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W0ZoLFlzLF9NLGtELERELElELEpzLGVsLHdNZV0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksQ01lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCl7''@;'; put 'put ''dGhpcy5kYXRlSU9TZXJ2aWNlPXR9dmFsaWRhdGUodCl7aWYodGhpcy5kYXRlSU9TZXJ2aWNlKXtjb25zdCByPXRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyh0LnZhbHVlKSxpPXRoaXMuZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzLm1pbkRhdGUudG9E''@;'; put 'put ''YXRlKCksbz10aGlzLmRhdGVJT1NlcnZpY2UuZGlzYWJsZWREYXRlcy5tYXhEYXRlLnRvRGF0ZSgpO2lmKHImJnI8aSlyZXR1cm57bWluOnttaW46aS50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6ci50b0xvY2FsZURhdGVTdHJpbmcoKX19O2lmKHImJnI+bylyZXR1cm57bWF4OnttYXg6''@;'; put 'put ''by50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6ci50b0xvY2FsZURhdGVTdHJpbmcoKX19fXJldHVybiBudWxsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShzNyw4KSl9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIs''@;'; put 'put ''ImNsckRhdGUiLCIiXSxbIiIsImNsclN0YXJ0RGF0ZSIsIiJdLFsiIiwiY2xyRW5kRGF0ZSIsIiJdXSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltibyhbe3Byb3ZpZGU6RzEsdXNlRXhpc3Rpbmc6bixtdWx0aTohMH1dKV19KSxufSkoKSxaX3Q9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigp''@;'; put 'put ''e3psLmFkZEljb25zKEFwLGtwLHJNLGtndCxSZ3QpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltxbyxKeixORCxybSxMRCxXbCxnaCxjTWVdfSksbn0pKCks''@;'; put 'put ''JF90PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt6bC5hZGRJY29ucyhJZ3QpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltxbyxXbCxnaCxnaF19KSxu''@;'; put 'put ''fSkoKSxTTWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFdie2NvbnN0cnVjdG9yKHQscixpLG8sYSl7c3VwZXIoYSxyLHQsaSksdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9YSx0aGlzLmZvY3VzPSExLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKG8uZm9jdXNDaGFuZ2Uuc3Vic2NyaWJlKGw9''@;'; put 'put ''PnRoaXMuZm9jdXM9bCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShJMyksemUoWjUsOCksemUoajIpLHplKHZNKSx6ZShSMykpfSxuLlx1MDI3NWNtcD1Qcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5l''@;'; put 'put ''ciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbih0LHIsaSl7aWYoMSZ0JiZGYShpLEVNZSw1KSwyJnQpe2xldCBvO2NpKG89dWkoKSkmJihyLmlucHV0PW8uZmlyc3QpfX0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsyJnQmJndyKCJjbHItZm9ybS1jb250cm9sIiwh''@;'; put 'put ''MCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PXIuY29udHJvbD9udWxsOnIuY29udHJvbC5kaXNhYmxlZCkoImNsci1mb3JtLWNvbnRyb2wtcmVhZG9ubHkiLHIuaW5wdXQucmVhZG9ubHkpKCJjbHItcm93IixyLmFkZEdyaWQoKSl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6''@;'; put 'put ''W2JvKFt2TSxSMyxqMixPcCxJM10pLEZvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6azZ0LGRlY2xzOjE3LHZhcnM6MTEsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIl0sWzEsImNsci1p''@;'; put 'put ''bnB1dC1ncm91cCJdLFsxLCJjbHItaW5wdXQtZ3JvdXAtYWN0aW9ucyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsIm1pbnVzIiwic2l6ZSIsInNtIl0sWzEsImNsci1udW1iZXItaW5wdXQt''@;'; put 'put ''c2VwYXJhdG9yIl0sWyJzaGFwZSIsInBsdXMiLCJzaXplIiwic20iXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFs''@;'; put 'put ''aWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxp''@;'; put 'put ''ZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHQscil7MSZ0JiYoZm8oQTZ0KSxXcigwKSxZbigxLFI2dCwxLDAsImxhYmVsIiww''@;'; put 'put ''KSxKKDIsImRpdiIsMSkoMywiZGl2IiwyKSg0LCJkaXYiLDMpLFdyKDUsMSksSig2LCJkaXYiLDQpKDcsImJ1dHRvbiIsNSksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLmlucHV0LnN0ZXBEb3duKCl9KSxJdCg4LCJjZHMtaWNvbiIsNiksdGUoKSxJdCg5LCJkaXYiLDcpLEooMTAs''@;'; put 'put ''ImJ1dHRvbiIsNSksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLmlucHV0LnN0ZXBVcCgpfSksSXQoMTEsImNkcy1pY29uIiw4KSx0ZSgpKCkoKSxZbigxMixJNnQsMSwwLCJjZHMtaWNvbiIsOSkoMTMsRDZ0LDEsMCwiY2RzLWljb24iLDEwKSx0ZSgpLFluKDE0LEw2dCwxLDAsIm5n''@;'; put 'put ''LWNvbnRlbnQiLDApKDE1LE82dCwxLDAsIm5nLWNvbnRlbnQiLDApKDE2LE42dCwxLDAsIm5nLWNvbnRlbnQiLDApLHRlKCkpLDImdCYmKGllKCkscnQoIm5nSWYiLCFyLmxhYmVsJiZyLmFkZEdyaWQoKSksaWUoKSxydCgibmdDbGFzcyIsci5jb250cm9sQ2xhc3MoKSksaWUoMiksd3IoImNs''@;'; put 'put ''ci1mb2N1cyIsci5mb2N1cyksaWUoMykscnQoImRpc2FibGVkIixudWxsPT1yLmNvbnRyb2w/bnVsbDpyLmNvbnRyb2wuZGlzYWJsZWQpLGllKDMpLHJ0KCJkaXNhYmxlZCIsbnVsbD09ci5jb250cm9sP251bGw6ci5jb250cm9sLmRpc2FibGVkKSxpZSgyKSxydCgibmdJZiIsci5zaG93SW52''@;'; put 'put ''YWxpZCksaWUoKSxydCgibmdJZiIsci5zaG93VmFsaWQpLGllKCkscnQoIm5nSWYiLHIuc2hvd0hlbHBlciksaWUoKSxydCgibmdJZiIsci5zaG93SW52YWxpZCksaWUoKSxydCgibmdJZiIsci5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOltGaCxZcyxKcyxlbF0sZW5jYXBzdWxhdGlvbjoy''@;'; put 'put ''fSksbn0pKCksRU1lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBZYntjb25zdHJ1Y3Rvcih0LHIsaSxvLGEsbCl7aWYoc3VwZXIocixTTWUsaSxvLGEsbCksdGhpcy5mb2N1c1NlcnZpY2U9dCx0aGlzLmNvbnRyb2w9byx0aGlzLmVsPWwsdGhpcy5pbmRleD0xLCF0KXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''Y2xyTnVtYmVySW5wdXQgcmVxdWlyZXMgYmVpbmcgd3JhcHBlZCBpbiA8Y2xyLW51bWJlci1pbnB1dC1jb250YWluZXI+Iil9Z2V0IHJlYWRvbmx5KCl7cmV0dXJuIG51bGwhPT10aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJyZWFkb25seSIpfXRyaWdnZXJGb2N1cygpeyF0''@;'; put 'put ''aGlzLnJlYWRvbmx5JiZ0aGlzLmZvY3VzU2VydmljZSYmKHRoaXMuZm9jdXNTZXJ2aWNlLmZvY3VzZWQ9ITApfXRyaWdnZXJWYWxpZGF0aW9uKCl7dGhpcy5yZWFkb25seXx8KHN1cGVyLnRyaWdnZXJWYWxpZGF0aW9uKCksdGhpcy5mb2N1c1NlcnZpY2UmJih0aGlzLmZvY3VzU2VydmljZS5m''@;'; put 'put ''b2N1c2VkPSExKSl9c3RlcFVwKCl7dGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0ZXBVcCgpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgiaW5wdXQiLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITB9KSksdGhpcy5jb250cm9sLmNvbnRyb2wubWFya0FsbEFz''@;'; put 'put ''VG91Y2hlZCgpfXN0ZXBEb3duKCl7dGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0ZXBEb3duKCksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJpbnB1dCIse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pKSx0aGlzLmNvbnRyb2wuY29udHJvbC5tYXJrQWxs''@;'; put 'put ''QXNUb3VjaGVkKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKHZNLDgpLHplKERzKSx6ZShNbCksemUoVjIsMTApLHplKE50KSx6ZShubykpfSxuLlx1MDI3NWRpcj0kcih7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1i''@;'; put 'put ''ZXIiLCJjbHJOdW1iZXJJbnB1dCIsIiJdXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezEmdCYmd3QoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiByLnRyaWdnZXJGb2N1cygpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHIudHJpZ2dlclZhbGlkYXRpb24oKX0p''@;'; put 'put ''LDImdCYmd3IoImNsci1pbnB1dCIsITApKCJjbHItbnVtYmVyLWlucHV0IiwhMCl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0ZvXX0pLG59KSgpLHFfdD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7emwuYWRkSWNvbnMoQXAsa3AsRGd0LExndCl9fXJldHVybiBuLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3FvLGhkLFdsLGdoLGdoXX0pLG59KSgpLFFfdD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7emwuYWRkSWNvbnMoT2d0LE5ndCxBcCxrcCl9fXJl''@;'; put 'put ''dHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3FvLGhkLFdsLGdoLGdoXX0pLG59KSgpLHZhZT0oKCk9PntjbGFzcyBue25nT25Jbml0KCl7dGhpcy5sYWJlbCYmdGhp''@;'; put 'put ''cy5sYWJlbC5kaXNhYmxlR3JpZCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLXJhZGlvLXdyYXBwZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24odCxyLGkpe2lmKDEm''@;'; put 'put ''dCYmRmEoaSxlbCw3KSwyJnQpe2xldCBvO2NpKG89dWkoKSkmJihyLmxhYmVsPW8uZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsyJnQmJndyKCJjbHItcmFkaW8td3JhcHBlciIsITApfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltibyhbT3BdKV0sbmdD''@;'; put 'put ''b250ZW50U2VsZWN0b3JzOlA2dCxkZWNsczozLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHQscil7MSZ0JiYoZm8oRjZ0KSxXcigwKSxXcigxLDEpLFluKDIsSDZ0LDEsMCwibGFiZWwiLDApKSwyJnQmJihpZSgyKSxydCgibmdJZiIsIXIubGFiZWwpKX0s''@;'; put 'put ''ZGVwZW5kZW5jaWVzOltZcyxlbF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksX2FlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBZYntjb25zdHJ1Y3Rvcih0LHIsaSxvLGEpe3N1cGVyKHQsdmFlLHIsaSxvLGEpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxu''@;'; put 'put ''KSh6ZShEcyksemUoTWwpLHplKFYyLDEwKSx6ZShOdCksemUobm8pKX0sbi5cdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2xyUmFkaW8iLCIiXV0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbRm9dfSksbn0pKCksSl90PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBXYntjb25z''@;'; put 'put ''dHJ1Y3Rvcih0LHIsaSxvKXtzdXBlcihvLHQscixpKSx0aGlzLmxheW91dFNlcnZpY2U9dCx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9cix0aGlzLm5nQ29udHJvbFNlcnZpY2U9aSx0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1vLHRoaXMuaW5saW5lPSExLHRoaXMuX2dlbmVyYXRlZElk''@;'; put 'put ''PVBoKCl9Z2V0IGNscklubGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKHQpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2YgdD8iZmFsc2UiIT09dDohIXR9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRBcmlhUm9sZXMoKSx0aGlzLnNldEFyaWFMYWJlbGxl''@;'; put 'put ''ZEJ5KCl9c2V0QXJpYVJvbGVzKCl7dGhpcy5yb2xlPXRoaXMucmFkaW9zLmxlbmd0aD8icmFkaW9ncm91cCI6bnVsbH1zZXRBcmlhTGFiZWxsZWRCeSgpe2NvbnN0IHQ9dGhpcy5ncm91cExhYmVsPy5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKTt0P3RoaXMuYXJpYUxhYmVsbGVk''@;'; put 'put ''Qnk9dGhpcy5yYWRpb3MubGVuZ3RoP3Q6bnVsbDoodGhpcy5ncm91cExhYmVsPy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLHRoaXMuX2dlbmVyYXRlZElkKSx0aGlzLmFyaWFMYWJlbGxlZEJ5PXRoaXMucmFkaW9zLmxlbmd0aD90aGlzLl9nZW5lcmF0ZWRJZDpudWxsKX19cmV0''@;'; put 'put ''dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoWjUsOCksemUoSTMpLHplKGoyKSx6ZShSMykpfSxuLlx1MDI3NWNtcD1Qcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItcmFkaW8tY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKHQscixp''@;'; put 'put ''KXtpZigxJnQmJihGYShpLGVsLDcsbm8pLEZhKGksX2FlLDUpKSwyJnQpe2xldCBvO2NpKG89dWkoKSkmJihyLmdyb3VwTGFiZWw9by5maXJzdCksY2kobz11aSgpKSYmKHIucmFkaW9zPW8pfX0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsyJnQmJihScigicm9sZSIs''@;'; put 'put ''ci5yb2xlKSgiYXJpYS1sYWJlbGxlZGJ5IixyLmFyaWFMYWJlbGxlZEJ5KSx3cigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1yLmNvbnRyb2w/bnVsbDpyLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixyLmFkZEdyaWQoKSkpfSxp''@;'; put 'put ''bnB1dHM6e2NscklubGluZToiY2xySW5saW5lIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbYm8oW2oyLFIzLEkzLEJiXSksRm9dLG5nQ29udGVudFNlbGVjdG9yczpCNnQsZGVjbHM6Nix2YXJzOjYsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5n''@;'; put 'put ''Q2xhc3MiXSxbImNsYXNzIiwiY2xyLXN1YnRleHQtd3JhcHBlciIsNCwibmdJZiJdLFsxLCJjbHItc3VidGV4dC13cmFwcGVyIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIs''@;'; put 'put ''InRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2Vy''@;'; put 'put ''IiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpezEmdCYmKGZv''@;'; put 'put ''KFY2dCksV3IoMCksWW4oMSxqNnQsMSwwLCJsYWJlbCIsMCksSigyLCJkaXYiLDEpLFdyKDMsMSksWW4oNCxVNnQsMiwwLCJkaXYiLDIpKDUsRzZ0LDUsNCwiZGl2IiwyKSx0ZSgpKSwyJnQmJihpZSgpLHJ0KCJuZ0lmIiwhci5sYWJlbCYmci5hZGRHcmlkKCkpLGllKCksd3IoImNsci1jb250''@;'; put 'put ''cm9sLWlubGluZSIsci5jbHJJbmxpbmUpLHJ0KCJuZ0NsYXNzIixyLmNvbnRyb2xDbGFzcygpKSxpZSgyKSxydCgibmdJZiIsci5zaG93SGVscGVyKSxpZSgpLHJ0KCJuZ0lmIixyLnNob3dWYWxpZHx8ci5zaG93SW52YWxpZCkpfSxkZXBlbmRlbmNpZXM6W0ZoLFlzLGVsLEpzXSxlbmNhcHN1''@;'; put 'put ''bGF0aW9uOjJ9KSxufSkoKSxleXQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3psLmFkZEljb25zKEFwLGtwKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj1taSh7aW1wb3J0''@;'; put 'put ''czpbcW8sZ2gsTkQsV2wsZ2hdfSksbn0pKCksdHl0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt6bC5hZGRJY29ucyhBcCxrcCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9''@;'; put 'put ''bWkoe2ltcG9ydHM6W3FvLGdoLE5ELFdsLGdoXX0pLG59KSgpLENNPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBXYntjb25zdHJ1Y3Rvcih0LHIsaSxvKXtzdXBlcihvLHQscixpKSx0aGlzLmxheW91dFNlcnZpY2U9dCx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9cix0aGlzLm5nQ29udHJvbFNl''@;'; put 'put ''cnZpY2U9aSx0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1vLHRoaXMubXVsdGk9ITF9bmdPbkluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm5nQ29udHJvbFNlcnZpY2UuY29udHJvbENoYW5nZXMuc3Vic2NyaWJlKHQ9Pnt0JiYodGhpcy5tdWx0aT10LnZhbHVlQWNjZXNz''@;'; put 'put ''b3IgaW5zdGFuY2VvZiBsRCx0aGlzLmNvbnRyb2w9dCl9KSl9d3JhcHBlckNsYXNzKCl7cmV0dXJuIHRoaXMubXVsdGk/ImNsci1tdWx0aXNlbGVjdC13cmFwcGVyIjoiY2xyLXNlbGVjdC13cmFwcGVyIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8biko''@;'; put 'put ''emUoWjUsOCksemUoSTMpLHplKGoyKSx6ZShSMykpfSxuLlx1MDI3NWNtcD1Qcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItc2VsZWN0LWNvbnRhaW5lciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbih0LHIsaSl7aWYoMSZ0JiZGYShpLGxELDUpLDImdCl7bGV0IG87Y2kobz11aSgpKSYm''@;'; put 'put ''KHIubXVsdGlwbGU9by5maXJzdCl9fSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezImdCYmd3IoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ci5jb250cm9sP251bGw6ci5jb250cm9sLmRpc2FibGVkKSgiY2xy''@;'; put 'put ''LXJvdyIsci5hZGRHcmlkKCkpfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltibyhbUjMsajIsT3AsSTNdKSxGb10sbmdDb250ZW50U2VsZWN0b3JzOnE2dCxkZWNsczoxMCx2YXJzOjgsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxb''@;'; put 'put ''MywibmdDbGFzcyJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1j''@;'; put 'put ''aXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2st''@;'; put 'put ''Y2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24odCxyKXsxJnQmJihmbygkNnQpLFdyKDApLFluKDEsSzZ0LDEsMCwibGFiZWwiLDApLEooMiwiZGl2IiwxKSgzLCJkaXYiLDIpLFdy''@;'; put 'put ''KDQsMSksWW4oNSxYNnQsMSwwLCJjZHMtaWNvbiIsMykoNixRNnQsMSwwLCJjZHMtaWNvbiIsNCksdGUoKSxZbig3LEo2dCwxLDAsIm5nLWNvbnRlbnQiLDApKDgsZTh0LDEsMCwibmctY29udGVudCIsMCkoOSx0OHQsMSwwLCJuZy1jb250ZW50IiwwKSx0ZSgpKSwyJnQmJihpZSgpLHJ0KCJu''@;'; put 'put ''Z0lmIiwhci5sYWJlbCYmci5hZGRHcmlkKCkpLGllKCkscnQoIm5nQ2xhc3MiLHIuY29udHJvbENsYXNzKCkpLGllKCkscnQoIm5nQ2xhc3MiLHIud3JhcHBlckNsYXNzKCkpLGllKDIpLHJ0KCJuZ0lmIixyLnNob3dJbnZhbGlkKSxpZSgpLHJ0KCJuZ0lmIixyLnNob3dWYWxpZCksaWUoKSxy''@;'; put 'put ''dCgibmdJZiIsci5zaG93SGVscGVyKSxpZSgpLHJ0KCJuZ0lmIixyLnNob3dJbnZhbGlkKSxpZSgpLHJ0KCJuZ0lmIixyLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W0ZoLFlzLEpzLGVsXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxxYj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWWJ7Y29u''@;'; put 'put ''c3RydWN0b3IodCxyLGksbyxhKXtzdXBlcih0LENNLHIsaSxvLGEpLHRoaXMuaW5kZXg9MX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoRHMpLHplKE1sKSx6ZShWMiwxMCksemUoTnQpLHplKG5vKSl9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4s''@;'; put 'put ''c2VsZWN0b3JzOltbIiIsImNsclNlbGVjdCIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezImdCYmd3IoImNsci1zZWxlY3QiLCEwKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbRm9dfSksbn0pKCksbnl0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt6''@;'; put 'put ''bC5hZGRJY29ucyhBcCxrcCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3FvLGhkLFdsLGdoLGdoXX0pLG59KSgpLE1NZT0oKCk9PntjbGFzcyBuIGV4dGVu''@;'; put 'put ''ZHMgV2J7fXJldHVybiBuLlx1MDI3NWZhYz0oKCk9PntsZXQgZTtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuKGV8fChlPXdhKG4pKSkocnx8bil9fSkoKSxuLlx1MDI3NWNtcD1Qcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItdGV4dGFyZWEtY29udGFpbmVyIl1dLGhvc3RWYXJzOjYsaG9z''@;'; put 'put ''dEJpbmRpbmdzOmZ1bmN0aW9uKHQscil7MiZ0JiZ3cigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1yLmNvbnRyb2w/bnVsbDpyLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixyLmFkZEdyaWQoKSl9LHN0YW5kYWxvbmU6ITEsZmVh''@;'; put 'put ''dHVyZXM6W2JvKFtSMyxqMixPcCxJM10pLEZvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6cjh0LGRlY2xzOjEwLHZhcnM6Nyxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJjbHItdGV4dGFyZWEtd3JhcHBlciJdLFsiY2xhc3MiLCJj''@;'; put 'put ''bHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNz''@;'; put 'put ''IiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2Vz''@;'; put 'put ''cyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24odCxyKXsxJnQmJihmbyhuOHQpLFdyKDApLFluKDEsaTh0LDEsMCwibGFiZWwiLDApLEooMiwiZGl2IiwxKSgzLCJkaXYiLDIpLFdyKDQsMSksWW4oNSxvOHQsMSwwLCJjZHMt''@;'; put 'put ''aWNvbiIsMykoNixhOHQsMSwwLCJjZHMtaWNvbiIsNCksdGUoKSxZbig3LHM4dCwxLDAsIm5nLWNvbnRlbnQiLDApKDgsbDh0LDEsMCwibmctY29udGVudCIsMCkoOSxjOHQsMSwwLCJuZy1jb250ZW50IiwwKSx0ZSgpKSwyJnQmJihpZSgpLHJ0KCJuZ0lmIiwhci5sYWJlbCYmci5hZGRHcmlk''@;'; put 'put ''KCkpLGllKCkscnQoIm5nQ2xhc3MiLHIuY29udHJvbENsYXNzKCkpLGllKDMpLHJ0KCJuZ0lmIixyLnNob3dJbnZhbGlkKSxpZSgpLHJ0KCJuZ0lmIixyLnNob3dWYWxpZCksaWUoKSxydCgibmdJZiIsci5zaG93SGVscGVyKSxpZSgpLHJ0KCJuZ0lmIixyLnNob3dJbnZhbGlkKSxpZSgpLHJ0''@;'; put 'put ''KCJuZ0lmIixyLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W0ZoLFlzLEpzLGVsXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxyVz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWWJ7Y29uc3RydWN0b3IodCxyLGksbyxhKXtzdXBlcih0LE1NZSxyLGksbyxhKSx0aGlzLmluZGV4PTF9fXJldHVy''@;'; put 'put ''biBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKERzKSx6ZShNbCksemUoVjIsMTApLHplKE50KSx6ZShubykpfSxuLlx1MDI3NWRpcj0kcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjbHJUZXh0YXJlYSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpm''@;'; put 'put ''dW5jdGlvbih0LHIpezImdCYmd3IoImNsci10ZXh0YXJlYSIsITApfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltGb119KSxufSkoKSxyeXQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3psLmFkZEljb25zKEFwLGtwKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVy''@;'; put 'put ''biBuZXcodHx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj1taSh7aW1wb3J0czpbcW8saGQsV2wsZ2gsZ2hdfSksbn0pKCksVE1lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NW1v''@;'; put 'put ''ZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3FvLGdoLGFfdCxkX3QsWl90LCRfdCxpTWUsUV90LGV5dCxueXQscnl0LHR5dCxoX3QscV90XX0pLG59KSgpLHhNZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0''@;'; put 'put ''fHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltxb119KSxufSkoKSxpeXQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEZvZXtjb25zdHJ1Y3Rvcih0LHIsaSxvLGEsbCx1LGcsRSl7c3VwZXIodCxyLGksbyxhLGwsdSxnLEUpfX1yZXR1cm4gbi5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShubyksemUoTm9lLDgpLHplKFRsLDgpLHplKGdhKSx6ZShEcyksemUoT29lLDgpLHplKGlNKSx6ZShWeiksemUoVWwpKX0sbi5cdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrRHJhZyIsIiJdXSxz''@;'; put 'put ''dGFuZGFsb25lOiExLGZlYXR1cmVzOltGb119KSxufSkoKSxveXQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj1taSh7fSksbn0pKCksYXl0PSgoKT0+e2Ns''@;'; put 'put ''YXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3FvXX0pLG59KSgpO2NsYXNzIGlXe31sZXQgakQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3Ro''@;'; put 'put ''aXMubmJDaGFuZ2VzPTAsdGhpcy5fY2hhbmdlPW5ldyBNcn1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1jaGFuZ2VTdGFydCgpe3RoaXMubmJDaGFuZ2VzKyt9Y2hhbmdlRG9uZSgpezA9PT0tLXRoaXMubmJDaGFuZ2VzJiZ0aGlzLl9jaGFuZ2UubmV4''@;'; put 'put ''dCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxJdj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RhdGVEZWJvdW5jZXI9dCx0aGlz''@;'; put 'put ''LmFjdGl2YXRlZD0hMSx0aGlzLl9zaXplPTAsdGhpcy5fY3VycmVudD0xLHRoaXMuX2NoYW5nZT1uZXcgTXIsdGhpcy5wcmV2ZW50RW1pdD0hMSx0aGlzLl9zaXplQ2hhbmdlPW5ldyBNcn1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfXNldCBzaXplKHQpe2NvbnN0IHI9dGhpcy5fc2l6''@;'; put 'put ''ZTt0IT09ciYmKHRoaXMucHJldmVudEVtaXR8fHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9zaXplPXQsdGhpcy5fY3VycmVudD0wPT09dD8xOk1hdGguZmxvb3Ioci90Kih0aGlzLl9jdXJyZW50LTEpKSsxLHRoaXMucHJldmVudEVtaXR8fCh0aGlzLl9jaGFuZ2Uu''@;'; put 'put ''bmV4dCh0aGlzLl9jdXJyZW50KSx0aGlzLl9zaXplQ2hhbmdlLm5leHQodGhpcy5fc2l6ZSksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCkpKSx0aGlzLnByZXZlbnRFbWl0PSExfWdldCB0b3RhbEl0ZW1zKCl7cmV0dXJuIHRoaXMuX3RvdGFsSXRlbXN8fDB9c2V0IHRvdGFsSXRl''@;'; put 'put ''bXModCl7dGhpcy5fdG90YWxJdGVtcz10LHRoaXMuY3VycmVudD50aGlzLmxhc3QmJih0aGlzLmN1cnJlbnQ9dGhpcy5sYXN0KX1nZXQgbGFzdCgpe3JldHVybiB0aGlzLl9sYXN0P3RoaXMuX2xhc3Q6dGhpcy5zaXplPjAmJnRoaXMudG90YWxJdGVtcz9NYXRoLmNlaWwodGhpcy50b3RhbEl0''@;'; put 'put ''ZW1zL3RoaXMuc2l6ZSk6MX1zZXQgbGFzdCh0KXt0aGlzLl9sYXN0PXR9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IHNpemVDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fc2l6ZUNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudCgpe3JldHVy''@;'; put 'put ''biB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KHQpe3QhPT10aGlzLl9jdXJyZW50JiYodGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX2N1cnJlbnQ9dCx0aGlzLl9jaGFuZ2UubmV4dCh0KSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKSl9Z2V0IGZpcnN0''@;'; put 'put ''SXRlbSgpe3JldHVybiAwPT09dGhpcy5fdG90YWxJdGVtcz8tMTowPT09dGhpcy5zaXplPzA6KHRoaXMuY3VycmVudC0xKSp0aGlzLnNpemV9Z2V0IGxhc3RJdGVtKCl7aWYoMD09PXRoaXMuX3RvdGFsSXRlbXMpcmV0dXJuLTE7aWYoMD09PXRoaXMuc2l6ZSlyZXR1cm4gdGhpcy50b3RhbEl0''@;'; put 'put ''ZW1zLTE7bGV0IHQ9dGhpcy5jdXJyZW50KnRoaXMuc2l6ZS0xO3JldHVybiB0aGlzLnRvdGFsSXRlbXMmJih0PU1hdGgubWluKHQsdGhpcy50b3RhbEl0ZW1zLTEpKSx0fXByZXZpb3VzKCl7dGhpcy5jdXJyZW50PjEmJnRoaXMuY3VycmVudC0tfW5leHQoKXt0aGlzLmN1cnJlbnQ8dGhpcy5s''@;'; put 'put ''YXN0JiZ0aGlzLmN1cnJlbnQrK31yZXNldFBhZ2VTaXplKHQ9ITEpe3RoaXMucHJldmVudEVtaXQ9dCx0aGlzLnNpemU9MH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikob3IoakQpKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5c''@;'; put 'put ''dTAyNzVmYWN9KSxufSkoKSxsNz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscil7dGhpcy5fcGFnZT10LHRoaXMuc3RhdGVEZWJvdW5jZXI9cix0aGlzLl9jaGFuZ2U9bmV3IE1yLHRoaXMuX2FsbD1bXX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUo''@;'; put 'put ''KX1oYXNBY3RpdmVGaWx0ZXJzKCl7Zm9yKGNvbnN0e2ZpbHRlcjp0fW9mIHRoaXMuX2FsbClpZih0JiZ0LmlzQWN0aXZlKCkpcmV0dXJuITA7cmV0dXJuITF9Z2V0QWN0aXZlRmlsdGVycygpe2NvbnN0IHQ9W107Zm9yKGNvbnN0e2ZpbHRlcjpyfW9mIHRoaXMuX2FsbClyJiZyLmlzQWN0aXZl''@;'; put 'put ''KCkmJnQucHVzaChyKTtyZXR1cm4gdH1hZGQodCl7Y29uc3Qgcj10LmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLnJlc2V0UGFnZUFuZEVtaXRGaWx0ZXJDaGFuZ2UoW3RdKSk7bGV0IGk9ITE7Y29uc3Qgbz1uZXcgb1codCwoKT0+e2lmKGkpcmV0dXJuO3IudW5zdWJzY3JpYmUoKTtjb25z''@;'; put 'put ''dCBhPXRoaXMuX2FsbC5maW5kSW5kZXgobD0+bC5maWx0ZXI9PT10KTthPj0wJiZ0aGlzLl9hbGwuc3BsaWNlKGEsMSksdC5pc0FjdGl2ZSgpJiZ0aGlzLnJlc2V0UGFnZUFuZEVtaXRGaWx0ZXJDaGFuZ2UoW10pLGk9ITB9KTtyZXR1cm4gdGhpcy5fYWxsLnB1c2gobyksdC5pc0FjdGl2ZSgp''@;'; put 'put ''JiZ0aGlzLnJlc2V0UGFnZUFuZEVtaXRGaWx0ZXJDaGFuZ2UoW3RdKSxvfWFjY2VwdHModCl7Zm9yKGNvbnN0e2ZpbHRlcjpyfW9mIHRoaXMuX2FsbClpZihyJiZyLmlzQWN0aXZlKCkmJiFyLmFjY2VwdHModCkpcmV0dXJuITE7cmV0dXJuITB9cmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5n''@;'; put 'put ''ZSh0KXt0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fcGFnZS5jdXJyZW50PTEsdGhpcy5fY2hhbmdlLm5leHQodCksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKG9y''@;'; put 'put ''KEl2KSxvcihqRCkpfSxuLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpO2NsYXNzIG9Xe2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5maWx0ZXI9ZSx0aGlzLnVucmVnaXN0ZXI9dH19bGV0IGFXPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCl7dGhp''@;'; put 'put ''cy5maWx0ZXJzPXR9Z2V0IGZpbHRlcigpe3JldHVybiB0aGlzLnJlZ2lzdGVyZWQmJnRoaXMucmVnaXN0ZXJlZC5maWx0ZXJ9bmdPbkRlc3Ryb3koKXt0aGlzLmRlbGV0ZUZpbHRlcigpfXNldEZpbHRlcih0KXt0aGlzLmRlbGV0ZUZpbHRlcigpLHQgaW5zdGFuY2VvZiBvVz90aGlzLnJlZ2lz''@;'; put 'put ''dGVyZWQ9dDp0JiYodGhpcy5yZWdpc3RlcmVkPXRoaXMuZmlsdGVycy5hZGQodCkpfWRlbGV0ZUZpbHRlcigpe3RoaXMucmVnaXN0ZXJlZCYmKHRoaXMucmVnaXN0ZXJlZC51bnJlZ2lzdGVyKCksZGVsZXRlIHRoaXMucmVnaXN0ZXJlZCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0''@;'; put 'put ''KXtyZXR1cm4gbmV3KHR8fG4pKHplKGw3KSl9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc3RhbmRhbG9uZTohMX0pLG59KSgpO2NsYXNzIEFNZXtjb25zdHJ1Y3RvcihlKXt0aGlzLnV0aWxzPWV9a2V5VXAoZSl7Y29uc3QgdD10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGUpO2lm''@;'; put 'put ''KDA9PT1lLnkpcmV0dXJuIHQ7dC55PWUueS0xO2NvbnN0IHI9dGhpcy51dGlscy5pc0FjdGlvbkNlbGwoZSk7cmV0dXJuIHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3codC55KSYmIXImJnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KHQueSk/dC54PTA6dGhpcy51dGlscy5pc0Rl''@;'; put 'put ''dGFpbHNSb3codC55KSYmKHI/dC55PXQueS0xOnQueD10LngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoZS55KSksdH1rZXlEb3duKGUpe2NvbnN0IHQ9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhlKTtpZihlLnk+PSh0aGlzLnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dz''@;'; put 'put ''Lmxlbmd0aC0xOjApKXJldHVybiB0O2NvbnN0IGk9dGhpcy51dGlscy5pc0FjdGlvbkNlbGwoZSk7cmV0dXJuIHQueT1lLnkrMSwhaSYmdGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKHQueSkmJih0Lnk9dC55KzEsdC54PXRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3codC55KT8w''@;'; put 'put ''OnQueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChlLnkpKSx0fWtleUxlZnQoZSl7Y29uc3QgdD10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGUpO3JldHVybiAwPT09ZS54fHwodC54PWUueC0xKSx0fWtleVJpZ2h0KGUpe2NvbnN0IHQ9dGhpcy51dGlscy5jcmVhdGVOZXh0''@;'; put 'put ''Q2VsbENvb3JkcyhlKSxyPXRoaXMudXRpbHMucm93cz8ubGVuZ3RoLTE/dGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdygwKS5sZW5ndGgtMTowO3JldHVybiB0Lng9ZS54PHI/dC54KzE6dC54LHR9a2V5RW5kKGUsdCl7Y29uc3Qgcj10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGUp''@;'; put 'put ''LGk9dGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5sZW5ndGgtMTowO3JldHVybiByLng9aT90aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KDApLmxlbmd0aC0xOjAsdCYmKHIueT1pLHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KHIueSkmJihyLng9dGhpcy51dGlscy5nZXRDZWxsc0Zv''@;'; put 'put ''clJvdyhyLnkpLmxlbmd0aC0xKSkscn1rZXlIb21lKGUsdCl7Y29uc3Qgcj10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGUpO3JldHVybiByLng9MCx0JiYoci55PTApLHJ9a2V5UGFnZVVwKGUpe2NvbnN0IHQ9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhlKSxyPXRo''@;'; put 'put ''aXMudXRpbHMuaXRlbXNQZXJQYWdlO3JldHVybiB0Lnk9ZS55LXI+MD9lLnktcisxOjEsdGhpcy51dGlscy5pc0FjdGlvbkNlbGwoZSk/dGhpcy51dGlscy5pc0RldGFpbHNSb3codC55KSYmKHQueT10LnktMSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3codC55KT90Lng9dGhpcy51dGlscy5p''@;'; put 'put ''c1NpbmdsZUNlbGxFeHBhbmRlZFJvdyh0LnkpPzA6dC54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGUueSk6dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKHQueSkmJih0Lnk9dC55KzEsdC54PXRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3codC55KT8wOnQueC10aGlzLnV0''@;'; put 'put ''aWxzLmFjdGlvbkNlbGxDb3VudChlLnkpKSx0fWtleVBhZ2VEb3duKGUpe2NvbnN0IHQ9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhlKSxyPXRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MCxpPXRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO3JldHVybiB0''@;'; put 'put ''Lnk9ZS55K2k+PXI/cjplLnkraSx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChlKSYmdGhpcy51dGlscy5pc0RldGFpbHNSb3codC55KT90Lnk9dC55LTE6dGhpcy51dGlscy5pc0RldGFpbHNSb3codC55KSYmdGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyh0LnkpP3QueD0wOnRo''@;'; put 'put ''aXMudXRpbHMuaXNEZXRhaWxzUm93KHQueSk/dC54PXQueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChlLnkpOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZCh0LnkpJiYodC55PXQueSsxLHQueD10aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KHQueSk/MDp0LngtdGhpcy51''@;'; put 'put ''dGlscy5hY3Rpb25DZWxsQ291bnQoZS55KSksdH19Y2xhc3Mga01lIGV4dGVuZHMgQU1le2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpfWtleVVwKGUpe2NvbnN0IHQ9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhlKTtpZigwPT09ZS55KXJldHVybiB0O2lmKHQueT1lLnktMSx0aGlz''@;'; put 'put ''LnV0aWxzLmlzQWN0aW9uQ2VsbChlKSl0aGlzLnV0aWxzLmlzRGV0YWlsc1Jvdyh0LnkpJiZ0Lnk+MCYmKHQueT10LnktMSk7ZWxzZSBzd2l0Y2godGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGUueSkmJih0Lnk9dC55LTEpLCEwKXtjYXNlIHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KHQueSk6''@;'; put 'put ''dC54PTA7YnJlYWs7Y2FzZSExPT09dGhpcy51dGlscy5pc0RldGFpbHNSb3coZS55KTp0Lng9ZS54O2JyZWFrO2RlZmF1bHQ6dC54PXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KHQueSl9cmV0dXJuIHR9a2V5RG93bihlKXtjb25zdCB0PXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29y''@;'; put 'put ''ZHMoZSkscj10aGlzLnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjA7cmV0dXJuIGUueT49cnx8KHQueT1lLnkrMSx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChlKT90Lnk9dC55PHI/dC55KzE6dC55Oih0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQodC55KSYmKHQueT10Lnkr''@;'; put 'put ''MSksdC54PXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KHQueSk/MDp0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudCh0LnkpKSksdH1rZXlMZWZ0KGUpe2NvbnN0IHQ9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhlKTtyZXR1cm4gdGhpcy51dGlscy5pc0RldGFpbHNSb3coZS55KXx8''@;'; put 'put ''dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGUueSk/KDAhPT1lLng/dC54PWUueC0xOnRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGUpfHwodC55PWUueS0xLHQueD10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudCh0LnkpLTEpLHQpOnN1cGVyLmtleUxlZnQoZSl9a2V5UmlnaHQoZSl7Y29uc3Qg''@;'; put 'put ''dD10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGUpO2lmKCF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhlLnkpJiYhdGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGUueSkpcmV0dXJuIHN1cGVyLmtleVJpZ2h0KGUpO2NvbnN0IHI9dGhpcy51dGlscy5yb3dzPy5sZW5ndGgtMT90aGlz''@;'; put 'put ''LnV0aWxzLmdldENlbGxzRm9yUm93KDApLmxlbmd0aC0xOjA7cmV0dXJuIGUueD49cnx8KHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGUpJiZlLng9PT10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChlLngpLTEmJnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChlLnkpJiYhdGhpcy51dGlscy5p''@;'; put 'put ''c0RldGFpbHNSb3coZS55KT8odC55PWUueSsxLHQueD0wKTp0Lng9ZS54KzEpLHR9a2V5RW5kKGUsdCl7Y29uc3Qgcj10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGUpO3JldHVybiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhlLnkpJiYhdGhpcy51dGlscy5pc1Jvd1JlcGxhY2Vk''@;'; put 'put ''KGUueSl8fHQ/c3VwZXIua2V5RW5kKGUsdCk6KHIueD10aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KGUueSkubGVuZ3RoLTEscil9a2V5SG9tZShlLHQpe2NvbnN0IHI9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhlKTtyZXR1cm4gdGhpcy51dGlscy5pc0RldGFpbHNSb3coZS55''@;'; put 'put ''KXx8dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGUueSk/KHIueD0wLHIueT1lLnktMSx0JiYoci55PTApLHIpOnN1cGVyLmtleUhvbWUoZSx0KX1rZXlQYWdlVXAoZSl7Y29uc3QgdD10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGUpLHI9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7''@;'; put 'put ''cmV0dXJuIHQueT1lLnktcj4wP2UueS1yKzE6MSx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChlKT90aGlzLnV0aWxzLmlzRGV0YWlsc1Jvdyh0LnkpJiYodC55PXQueS0xKTp0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQodC55KT90aGlzLnV0aWxzLmlzRGV0YWlsc1Jvdyh0LnkpfHwodC55PXQu''@;'; put 'put ''eSsxLHQueD0wKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhlLnkpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGUueSkmJih0aGlzLnV0aWxzLmlzRGV0YWlsc1Jvdyh0LnkpfHwodC54PXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KHQueSkpKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1Jvdyh0''@;'; put 'put ''LnkpJiYodC54PTApLHR9a2V5UGFnZURvd24oZSl7Y29uc3QgdD10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGUpLHI9dGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5sZW5ndGgtMTowLGk9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJuIHQueT1lLnkraT49cj9y''@;'; put 'put ''OmUueStpLHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGUpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KHQueSkmJih0Lnk9dC55LTEpOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZCh0LnkpP3QueTxyJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3codC55KSYmKHQueT10LnkrMSk6dGhpcy51dGls''@;'; put 'put ''cy5pc0RldGFpbHNSb3coZS55KSYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KHQueSk/dC54PWUueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudCh0LnkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KHQueSkmJih0Lng9MCksdH19Y2xhc3Mgc3l0IGV4dGVuZHMga01le2NvbnN0cnVjdG9y''@;'; put 'put ''KGUpe3N1cGVyKGUpfWtleVVwKGUpe2NvbnN0IHQ9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhlKTtpZigwPT09ZS55KXJldHVybiB0O2lmKHQueT1lLnktMSx0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KHQueSkpcmV0dXJuIHN1cGVyLmtleVVwKGUpO2NvbnN0''@;'; put 'put ''IHI9dGhpcy51dGlscy5pc0FjdGlvbkNlbGwoZSk7cmV0dXJuIHImJnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KHQueSk/dC55PXQueS0xOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZCh0LnkpPyh0Lnk9dC55LTEsdGhpcy51dGlscy5pc0RldGFpbHNSb3codC55KXx8KHQueD1lLngrdGhpcy51''@;'; put 'put ''dGlscy5hY3Rpb25DZWxsQ291bnQodC55KSkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGUueSkmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1Jvdyh0LnkpP3QueD1lLngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQodC55KTohciYmdGhpcy51dGlscy5pc0RldGFpbHNSb3codC55KSYmKHQu''@;'; put 'put ''eD1lLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoZS55KSksdH1rZXlEb3duKGUpe2NvbnN0IHQ9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhlKSxyPXRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MCxpPXI/dGhpcy51dGlscy5nZXRDZWxsc0Zv''@;'; put 'put ''clJvdygwKS5sZW5ndGgtMTowO3JldHVybiBlLnk+PXI/dDoodC55PWUueSsxLHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3codC55KT9zdXBlci5rZXlEb3duKGUpOih0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChlKXx8dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKHQueSk/dC55''@;'; put 'put ''PXQueTxyP3QueSsxOnQueS0xOnQueD10aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KGUueSkubGVuZ3RoPmk/ZS54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGUueSk6ZS54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KHQueSksdCkpfWtleUxlZnQoZSl7cmV0dXJuIHN1cGVyLmtl''@;'; put 'put ''eUxlZnQoZSl9a2V5UmlnaHQoZSl7cmV0dXJuIHN1cGVyLmtleVJpZ2h0KGUpfWtleUVuZChlLHQpe3JldHVybiBzdXBlci5rZXlFbmQoZSx0KX1rZXlIb21lKGUsdCl7cmV0dXJuIHN1cGVyLmtleUhvbWUoZSx0KX1rZXlQYWdlVXAoZSl7Y29uc3QgdD10aGlzLnV0aWxzLmNyZWF0ZU5leHRD''@;'; put 'put ''ZWxsQ29vcmRzKGUpLHI9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJuIHQueT1lLnktcj4wP2UueS1yKzE6MSx0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KHQueSk/c3VwZXIua2V5UGFnZVVwKGUpOih0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChlKT90aGlzLnV0aWxz''@;'; put 'put ''LmlzRGV0YWlsc1Jvdyh0LnkpJiYodC55PXQueS0xKTp0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQodC55KT90aGlzLnV0aWxzLmlzRGV0YWlsc1Jvdyh0LnkpfHwodC55PXQueSsxLHQueD1lLngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQodC55KSk6dGhpcy51dGlscy5pc0RldGFpbHNS''@;'; put 'put ''b3coZS55KSYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KHQueSk/dC54PWUueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudCh0LnkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KHQueSkmJih0Lng9ZS54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGUueSkpLHQpfWtleVBhZ2VEb3du''@;'; put 'put ''KGUpe2NvbnN0IHQ9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhlKSxyPXRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MCxpPXRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO3JldHVybiB0Lnk9ZS55K2k+PXI/cjplLnkraSx0aGlzLnV0aWxzLmlzU2luZ2xl''@;'; put 'put ''Q2VsbEV4cGFuZGVkUm93KHQueSk/c3VwZXIua2V5UGFnZURvd24oZSk6KHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGUpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KHQueSkmJih0Lnk9dC55LTEpOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZCh0LnkpJiYhdGhpcy51dGlscy5pc0RldGFpbHNS''@;'; put 'put ''b3codC55KT90Lnk8ciYmKHQueT10LnkrMSx0Lng9ZS54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KHQueSkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGUueSkmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1Jvdyh0LnkpP3QueD1lLngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQodC55''@;'; put 'put ''KTp0aGlzLnV0aWxzLmlzRGV0YWlsc1Jvdyh0LnkpJiYodC54PWUueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChlLnkpKSx0KX19Y2xhc3MgbHl0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5ob3N0PWUsdGhpcy5jb25maWc9dH1nZXQgZ3JpZCgpe3JldHVybiB0aGlzLmhvc3Q/LnF1ZXJ5''@;'; put 'put ''U2VsZWN0b3IodGhpcy5jb25maWcua2V5R3JpZCl9Z2V0IHJvd3MoKXtyZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRSb3dzKX1nZXQgY2VsbHMoKXtyZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdy''@;'; put 'put ''aWRDZWxscyl9Z2V0IGN1cnJlbnRDZWxsQ29vcmRpbmF0ZXMoKXtjb25zdCBlPXRoaXMuY2VsbHM/QXJyYXkuZnJvbSh0aGlzLmNlbGxzKS5maW5kKGk9PiIwIj09PWkuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpKTpudWxsLHQ9ZT9lLmNsb3Nlc3QodGhpcy5jb25maWcua2V5R3JpZFJvd3Mp''@;'; put 'put ''Om51bGw7cmV0dXJue3g6dCYmZT9BcnJheS5mcm9tKHQucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpKS5pbmRleE9mKGUpOjAseTp0JiZlJiZ0aGlzLnJvd3M/QXJyYXkuZnJvbSh0aGlzLnJvd3MpLmluZGV4T2YodCk6MH19Z2V0IGl0ZW1zUGVyUGFnZSgpe3Jl''@;'; put 'put ''dHVybiBNYXRoLmZsb29yKHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkIikuY2xpZW50SGVpZ2h0L3RoaXMucm93c1swXS5jbGllbnRIZWlnaHQpLTF8fDB9Z2V0TmV4dEl0ZW1Db29yZGluYXRlKGUpe2NvbnN0IHQ9dGhpcy5jdXJyZW50Q2VsbENvb3JkaW5hdGVzLHI9dGhp''@;'; put 'put ''cy5nZXROYXZTdHJhdGVneSh0KTtzd2l0Y2goZS5rZXkpe2Nhc2UgTW8uQXJyb3dVcDpyZXR1cm4gci5rZXlVcCh0KTtjYXNlIE1vLkFycm93RG93bjpyZXR1cm4gci5rZXlEb3duKHQpO2Nhc2UicnRsIj09PXRoaXMuaG9zdC5kaXI/TW8uQXJyb3dSaWdodDpNby5BcnJvd0xlZnQ6cmV0dXJu''@;'; put 'put ''IHIua2V5TGVmdCh0KTtjYXNlInJ0bCI9PT10aGlzLmhvc3QuZGlyP01vLkFycm93TGVmdDpNby5BcnJvd1JpZ2h0OnJldHVybiByLmtleVJpZ2h0KHQpO2Nhc2UgTW8uSG9tZTpyZXR1cm4gci5rZXlIb21lKHQsZS5jdHJsS2V5KTtjYXNlIE1vLkVuZDpyZXR1cm4gci5rZXlFbmQodCxlLmN0''@;'; put 'put ''cmxLZXkpO2Nhc2UgTW8uUGFnZVVwOnJldHVybiByLmtleVBhZ2VVcCh0KTtjYXNlIE1vLlBhZ2VEb3duOnJldHVybiByLmtleVBhZ2VEb3duKHQpO2RlZmF1bHQ6cmV0dXJuIHR9fWdldENlbGxzRm9yUm93KGUpe3JldHVybiB0aGlzLnJvd3NbZV0ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNv''@;'; put 'put ''bmZpZy5rZXlHcmlkQ2VsbHMpfWlzRXhwYW5kZWRSb3coZSl7Y29uc3QgdD10aGlzLnJvd3NbZV0ucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLXJvdy1kZXRhaWwiKTtyZXR1cm4hIXQmJiJub25lIiE9PXQuc3R5bGUuZGlzcGxheX1pc0RldGFpbHNSb3coZSl7cmV0dXJuIHRoaXMucm93c1tl''@;'; put 'put ''XS5jbGFzc0xpc3QuY29udGFpbnMoImRhdGFncmlkLXJvdy1kZXRhaWwiKX1pc1Jvd1JlcGxhY2VkKGUpe3JldHVybiEhdGhpcy5yb3dzW2VdLmNsb3Nlc3QoImNsci1kZy1yb3cuZGF0YWdyaWQtcm93LXJlcGxhY2VkIil9aXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coZSl7cmV0dXJuIDE9PT10''@;'; put 'put ''aGlzLnJvd3NbZV0/LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcua2V5R3JpZENlbGxzKS5sZW5ndGh9YWN0aW9uQ2VsbENvdW50KGUpe3JldHVybiB0aGlzLmFjdGlvbkNlbGxzQXNBcnJheShlKS5sZW5ndGh9YWN0aW9uQ2VsbHNBc0FycmF5KGUpe3JldHVybiBBcnJheS5mcm9tKHRo''@;'; put 'put ''aXMucm93c1tlXS5xdWVyeVNlbGVjdG9yQWxsKCIuZGF0YWdyaWQtcm93LXN0aWNreSAuZGF0YWdyaWQtY2VsbCwgLmRhdGFncmlkLXJvdy1zdGlja3kgLmRhdGFncmlkLWNvbHVtbiIpKX1pc0FjdGlvbkNlbGwoZSl7cmV0dXJuISF0aGlzLmFjdGlvbkNlbGxzQXNBcnJheShlLnkpW2UueF19''@;'; put 'put ''Y3JlYXRlTmV4dENlbGxDb29yZHMoZSl7cmV0dXJue3g6ZS54LHk6ZS55fX1nZXROYXZTdHJhdGVneShlKXtzd2l0Y2goITApe2Nhc2UgdGhpcy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhlLnkpOnJldHVybiBuZXcga01lKHRoaXMpO2Nhc2UgdGhpcy5pc0RldGFpbHNSb3coZS55KTpjYXNl''@;'; put 'put ''IHRoaXMuaXNFeHBhbmRlZFJvdyhlLnkpOnJldHVybiBuZXcgc3l0KHRoaXMpO2RlZmF1bHQ6cmV0dXJuIG5ldyBBTWUodGhpcyl9fX1jb25zdCBSTWU9WyJhW2hyZWZdIiwiYXJlYVtocmVmXSIsImlucHV0Om5vdChbZGlzYWJsZWRdKSIsImJ1dHRvbjpub3QoW2Rpc2FibGVkXSkiLCJzZWxl''@;'; put 'put ''Y3Q6bm90KFtkaXNhYmxlZF0pIiwidGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pIiwiaWZyYW1lIiwib2JqZWN0IiwiZW1iZWQiLCJbY29udGVudGVkaXRhYmxlPXRydWVdIiwiW3JvbGU9YnV0dG9uXTpub3QoW2Rpc2FibGVkXSkiXTtmdW5jdGlvbiB1eXQobil7Y29uc3QgZT1STWUuam9pbigi''@;'; put 'put ''LCIpO3JldHVybiBuLm1hdGNoZXMoZSl9bGV0IHNXPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCl7dGhpcy56b25lPXQsdGhpcy5za2lwSXRlbUZvY3VzPSExLHRoaXMubGlzdGVuZXJzQWRkZWQ9ITEsdGhpcy5kZXN0cm95JD1uZXcgTXIsdGhpcy5fYWN0aXZlQ2VsbD1udWxsLHRoaXMu''@;'; put 'put ''Y29uZmlnPXtrZXlHcmlkUm93czonW3JvbGU9cm93XTpub3QoLmRhdGFncmlkLXBsYWNlaG9sZGVyKTpub3QoW3N0eWxlKj0iZGlzcGxheTogbm9uZSJdKScsa2V5R3JpZENlbGxzOiJbcm9sZT1ncmlkY2VsbF06bm90KC5kYXRhZ3JpZC1oaWRkZW4tY29sdW1uKTpub3QoLmRhdGFncmlkLXBs''@;'; put 'put ''YWNlaG9sZGVyLWNvbnRlbnQpLCBbcm9sZT1jb2x1bW5oZWFkZXJdOm5vdCguZGF0YWdyaWQtaGlkZGVuLWNvbHVtbik6bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250ZW50KSwgLmRhdGFncmlkLWRldGFpbC1jYXJldCIsa2V5R3JpZDoiW3JvbGU9Z3JpZF0ifX1uZ09uRGVzdHJveSgp''@;'; put 'put ''e3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1hZGRMaXN0ZW5lcnMoKXt0aGlzLmxpc3RlbmVyc0FkZGVkfHwodGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57SmcodGhpcy5rZXlOYXZVdGlscy5ncmlkLCJtb3VzZWRvd24iKS5waXBlKHYwKHRo''@;'; put 'put ''aXMuZGVzdHJveSQpKS5zdWJzY3JpYmUodD0+e2lmKDE9PT10LmJ1dHRvbnMmJiF0LmN0cmxLZXkpe2NvbnN0IHI9dGhpcy5rZXlOYXZVdGlscy5jZWxscz9BcnJheS5mcm9tKHRoaXMua2V5TmF2VXRpbHMuY2VsbHMpLmZpbmQoaT0+aT09PXQudGFyZ2V0fHxpPT09dC50YXJnZXQuY2xvc2Vz''@;'; put 'put ''dCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpKTpudWxsO3ImJnRoaXMuc2V0QWN0aXZlQ2VsbChyLHtrZWVwRm9jdXM6dXl0KHQudGFyZ2V0KX0pfX0pLEpnKHRoaXMua2V5TmF2VXRpbHMuZ3JpZCwid2hlZWwiKS5waXBlKHYwKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlz''@;'; put 'put ''LnJlbW92ZUFjdGl2ZUNlbGwoKX0pLEpnKHRoaXMua2V5TmF2VXRpbHMuZ3JpZCwiZm9jdXNvdXQiKS5waXBlKE5iKDApLHYwKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmtleU5hdlV0aWxzLmdyaWQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCl8fHRoaXMu''@;'; put 'put ''cmVtb3ZlQWN0aXZlQ2VsbCgpfSksSmcodGhpcy5rZXlOYXZVdGlscy5ncmlkLCJrZXlkb3duIikucGlwZSh2MCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHQ9PntpZigoIXQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiZHJhZy1oYW5kbGUiKXx8dC5rZXkhPT1Nby5BcnJvd0xlZnQm''@;'; put 'put ''JnQua2V5IT09TW8uQXJyb3dSaWdodCkmJih0LmtleT09PU1vLkFycm93VXB8fHQua2V5PT09TW8uQXJyb3dEb3dufHx0LmtleT09PU1vLkFycm93TGVmdHx8dC5rZXk9PT1Nby5BcnJvd1JpZ2h0fHx0LmtleT09PU1vLkVuZHx8dC5rZXk9PT1Nby5Ib21lfHx0LmtleT09PU1vLlBhZ2VVcHx8''@;'; put 'put ''dC5rZXk9PT1Nby5QYWdlRG93bikpe2NvbnN0IHI9dGhpcy5rZXlOYXZVdGlscy5nZXROZXh0SXRlbUNvb3JkaW5hdGUodCksaT10aGlzLmtleU5hdlV0aWxzLnJvd3M/QXJyYXkuZnJvbSh0aGlzLmtleU5hdlV0aWxzLmdldENlbGxzRm9yUm93KHIueSkpW3IueF06bnVsbDtpJiZ0aGlzLnNl''@;'; put 'put ''dEFjdGl2ZUNlbGwoaSksdC5wcmV2ZW50RGVmYXVsdCgpfX0pfSksdGhpcy5saXN0ZW5lcnNBZGRlZD0hMCl9aW5pdGlhbGl6ZUtleUdyaWQodCl7dGhpcy5rZXlOYXZVdGlscz1uZXcgbHl0KHQsdGhpcy5jb25maWcpLHRoaXMuYWRkTGlzdGVuZXJzKCksdGhpcy5yZXNldEtleUdyaWQoKX1y''@;'; put 'put ''ZXNldEtleUdyaWQoKXt0aGlzLmtleU5hdlV0aWxzLmNlbGxzPy5mb3JFYWNoKHI9PnIuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIikpLCh0aGlzLmtleU5hdlV0aWxzLmNlbGxzP3RoaXMua2V5TmF2VXRpbHMuY2VsbHNbMF06bnVsbCk/LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIw''@;'; put 'put ''Iil9cmVtb3ZlQWN0aXZlQ2VsbCgpe3RoaXMuX2FjdGl2ZUNlbGw9bnVsbH1nZXRBY3RpdmVDZWxsKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZUNlbGx9c2V0QWN0aXZlQ2VsbCh0LHtrZWVwRm9jdXM6cn09e2tlZXBGb2N1czohMX0pe2NvbnN0IGk9dGhpcy5rZXlOYXZVdGlscy5jZWxscz9BcnJh''@;'; put 'put ''eS5mcm9tKHRoaXMua2V5TmF2VXRpbHMuY2VsbHMpLmZpbmQobz0+IjAiPT09by5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IikpOm51bGw7aWYoaSYmaS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSx0LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIiksdGhpcy5fYWN0aXZlQ2VsbD10''@;'; put 'put ''LCF0aGlzLnNraXBJdGVtRm9jdXMmJiFyKXtsZXQgbztpZigiY29sdW1uaGVhZGVyIj09PXQuZ2V0QXR0cmlidXRlKCJyb2xlIikpbz10O2Vsc2V7Y29uc3QgYT1mdW5jdGlvbiBjeXQobil7Y29uc3QgdD1bLi4uUk1lLCdbdGFiaW5kZXg9IjAiXTpub3QoW2Rpc2FibGVkXSknXS5qb2luKCIs''@;'; put 'put ''Iik7cmV0dXJuIEFycmF5LmZyb20obi5xdWVyeVNlbGVjdG9yQWxsKHQpKX0odCk7bz1hLmxlbmd0aD9hWzBdOnR9by5mb2N1cygpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikob3IoZ2EpKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rv''@;'; put 'put ''cnk6bi5cdTAyNzVmYWN9KSxufSkoKSxVRD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgYVd7Y29uc3RydWN0b3IodCxyLGksbyxhLGwpe3N1cGVyKHQpLHRoaXMuY29tbW9uU3RyaW5ncz1yLHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlPWksdGhpcy5wbGF0Zm9ybUlkPW8sdGhpcy5lbGVtZW50UmVm''@;'; put 'put ''PWEsdGhpcy5rZXlOYXZpZ2F0aW9uPWwsdGhpcy5vcGVuQ2hhbmdlPW5ldyBLcighMSksdGhpcy5hcmlhRXhwYW5kZWQ9ITEsdGhpcy5wb3BvdmVySWQ9UGgoKSx0aGlzLnNtYXJ0UG9zaXRpb249e2F4aXM6QjIuVkVSVElDQUwsc2lkZTpubS5BRlRFUixhbmNob3I6UWwuRU5ELGNvbnRlbnQ6''@;'; put 'put ''UWwuRU5EfSx0aGlzLl9vcGVuPSExLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaChpLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKHU9Pnt0aGlzLm9wZW49dSx0aGlzLmFyaWFFeHBhbmRlZD11fSkpfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMuX29wZW59c2V0IG9wZW4odCl7dGhpcy5vcGVuIT09''@;'; put 'put ''KHQ9ISF0KSYmKHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlLm9wZW49dCx0aGlzLm9wZW5DaGFuZ2UuZW1pdCh0KSwhdCYmSGModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5hbmNob3IubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMua2V5TmF2aWdhdGlvbiYmKHRoaXMua2V5TmF2aWdhdGlvbi5z''@;'; put 'put ''a2lwSXRlbUZvY3VzPXQpLHRoaXMuX29wZW49dCl9c2V0IGN1c3RvbUZpbHRlcih0KXt0aGlzLnNldEZpbHRlcih0KX1nZXQgYWN0aXZlKCl7cmV0dXJuISF0aGlzLmZpbHRlciYmdGhpcy5maWx0ZXIuaXNBY3RpdmUoKX1uZ09uQ2hhbmdlcygpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLnNldFRv''@;'; put 'put ''Z2dsZUJ1dHRvbkFyaWFMYWJlbCgpfSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKHQ9PnQudW5zdWJzY3JpYmUoKSl9c2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl7Y29uc3QgaT10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD8uY2xv''@;'; put 'put ''c2VzdCgiY2xyLWRnLWNvbHVtbiIpPy5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtY29sdW1uLXRpdGxlIik/LnRleHRDb250ZW50LnRyaW0oKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3RoaXMudG9nZ2xlQnV0dG9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1v''@;'; put 'put ''blN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckFyaWFMYWJlbCx7Q09MVU1OOml8fCIifSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKGw3KSx6ZShpbCksemUoS3UpLHplKGxkKSx6ZShubyksemUoc1csOCkpfSxuLlx1MDI3NWNtcD1Qcih7''@;'; put 'put ''dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItZGctZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbih0LHIpe2lmKDEmdCYmV28odTh0LDUsbm8pLDImdCl7bGV0IGk7Y2koaT11aSgpKSYmKHIuYW5jaG9yPWkuZmlyc3QpfX0saW5wdXRzOntvcGVuOlswLCJjbHJEZ0ZpbHRlck9wZW4iLCJvcGVu''@;'; put 'put ''Il0sY3VzdG9tRmlsdGVyOlswLCJjbHJEZ0ZpbHRlciIsImN1c3RvbUZpbHRlciJdfSxvdXRwdXRzOntvcGVuQ2hhbmdlOiJjbHJEZ0ZpbHRlck9wZW5DaGFuZ2UifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltibyhbe3Byb3ZpZGU6aVcsdXNlRXhpc3Rpbmc6bn1dKSxGbyxpdV0sbmdDb250''@;'; put 'put ''ZW50U2VsZWN0b3JzOmVzLGRlY2xzOjQsdmFyczoxMyxjb25zdHM6W1siYW5jaG9yIiwiIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3ZlckFuY2hvciIsIiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLDEsImRhdGFncmlkLWZpbHRlci10b2dnbGUiXSxbInNvbGlkIiwiIl0s''@;'; put 'put ''WyJjbGFzcyIsImRhdGFncmlkLWZpbHRlciIsImNka1RyYXBGb2N1cyIsIiIsInJvbGUiLCJkaWFsb2ciLDMsImlkIiw0LCJjbHJQb3BvdmVyQ29udGVudCIsImNsclBvcG92ZXJDb250ZW50QXQiLCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJjbHJQb3BvdmVyQ29u''@;'; put 'put ''dGVudFNjcm9sbFRvQ2xvc2UiXSxbImNka1RyYXBGb2N1cyIsIiIsInJvbGUiLCJkaWFsb2ciLDEsImRhdGFncmlkLWZpbHRlciIsMywiaWQiXSxbMSwiZGF0YWdyaWQtZmlsdGVyLWNsb3NlLXdyYXBwZXIiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyQ2xvc2VCdXR0b24iLCIiLDEs''@;'; put 'put ''ImNsb3NlIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpezEmdCYmKGZvKCksSigwLCJidXR0b24iLDEsMCksSXQoMiwiY2RzLWljb24iLDIpLHRlKCksWW4oMyxkOHQsNSwzLCJkaXYiLDMpKSwyJnQmJih3cigiZGF0YWdyaWQtZmlsdGVyLW9wZW4i''@;'; put 'put ''LHIub3BlbikoImRhdGFncmlkLWZpbHRlcmVkIixyLmFjdGl2ZSksUnIoImFyaWEtbGFiZWwiLHIudG9nZ2xlQnV0dG9uQXJpYUxhYmVsKSgiYXJpYS1leHBhbmRlZCIsci5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixyLnBvcG92ZXJJZCksaWUoMiksUnIoInN0YXR1cyIsci5hY3Rp''@;'; put 'put ''dmU/ImluZm8iOm51bGwpKCJzaGFwZSIsci5hY3RpdmU/ImZpbHRlci1ncmlkLWNpcmNsZSI6ImZpbHRlci1ncmlkIiksaWUoKSxydCgiY2xyUG9wb3ZlckNvbnRlbnQiLHIub3BlbikoImNsclBvcG92ZXJDb250ZW50QXQiLHIuc21hcnRQb3NpdGlvbikoImNsclBvcG92ZXJDb250ZW50T3V0''@;'; put 'put ''c2lkZUNsaWNrVG9DbG9zZSIsITApKCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiLCEwKSl9LGRlcGVuZGVuY2llczpbX00sSnMsa0QsRkVlLERELElEXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKTtjbGFzcyB5YWV7Y29uc3RydWN0b3IoZSl7dGhpcy5wcm9wPWUsZS5pbmRleE9m''@;'; put 'put ''KCIuIik+PTAmJih0aGlzLnNwbGl0UHJvcD1lLnNwbGl0KCIuIikpfWdldFByb3BWYWx1ZShlKXtpZih0aGlzLnNwbGl0UHJvcCl7bGV0IHQ9ZTtmb3IoY29uc3QgciBvZiB0aGlzLnNwbGl0UHJvcCl7aWYobnVsbD09PXR8fHR5cGVvZiB0PiJ1Inx8dHlwZW9mIHRbcl0+InUiKXJldHVybjt0''@;'; put 'put ''PXRbcl19cmV0dXJuIHR9cmV0dXJuIGVbdGhpcy5wcm9wXX19Y2xhc3MgbFd7Y29uc3RydWN0b3IoZSx0PSExKXt0aGlzLnByb3A9ZSx0aGlzLmV4YWN0PXQsdGhpcy5uZXN0ZWRQcm9wPW5ldyB5YWUoZSl9YWNjZXB0cyhlLHQscil7Y29uc3QgaT10aGlzLm5lc3RlZFByb3AuZ2V0UHJvcFZh''@;'; put 'put ''bHVlKGUpO3JldHVybiEodm9pZCAwPT09aXx8bnVsbCE9PXQmJigibnVtYmVyIiE9dHlwZW9mIGl8fGk8dCl8fG51bGwhPT1yJiYoIm51bWJlciIhPXR5cGVvZiBpfHxpPnIpKX19Y2xhc3MgS2J7Y29uc3RydWN0b3IoZSl7dGhpcy5maWx0ZXJGbj1lLHRoaXMuX2NoYW5nZXM9bmV3IE1yLHRo''@;'; put 'put ''aXMuX2xvdz1udWxsLHRoaXMuX2hpZ2g9bnVsbH1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCB2YWx1ZSgpe3JldHVyblt0aGlzLl9sb3csdGhpcy5faGlnaF19c2V0IHZhbHVlKGUpe2NvbnN0IHQ9ZVswXSxyPWVbMV07KHQhPT10aGlzLl9s''@;'; put 'put ''b3d8fHIhPT10aGlzLl9oaWdoKSYmKHRoaXMuX2xvdz10LHRoaXMuX2hpZ2g9cix0aGlzLl9jaGFuZ2VzLm5leHQoW3RoaXMuX2xvdyx0aGlzLl9oaWdoXSkpfWdldCBsb3coKXtyZXR1cm4gdGhpcy5fbG93fXNldCBsb3coZSl7ZSE9PXRoaXMuX2xvdyYmKHRoaXMuX2xvdz1lLHRoaXMuX2No''@;'; put 'put ''YW5nZXMubmV4dChbdGhpcy5fbG93LHRoaXMuX2hpZ2hdKSl9Z2V0IGhpZ2goKXtyZXR1cm4gdGhpcy5faGlnaH1zZXQgaGlnaChlKXtlIT09dGhpcy5faGlnaCYmKHRoaXMuX2hpZ2g9ZSx0aGlzLl9jaGFuZ2VzLm5leHQoW3RoaXMuX2xvdyx0aGlzLl9oaWdoXSkpfWdldCBzdGF0ZSgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmZpbHRlckZuIGluc3RhbmNlb2YgbFc/e3Byb3BlcnR5OnRoaXMuZmlsdGVyRm4ucHJvcCxsb3c6dGhpcy5fbG93LGhpZ2g6dGhpcy5faGlnaH06dGhpc31pc0FjdGl2ZSgpe3JldHVybiBudWxsIT09dGhpcy5fbG93fHxudWxsIT09dGhpcy5oaWdofWFjY2VwdHMoZSl7cmV0''@;'; put 'put ''dXJuIHRoaXMuZmlsdGVyRm4uYWNjZXB0cyhlLHRoaXMuX2xvdyx0aGlzLl9oaWdoKX1lcXVhbHMoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBLYiYmKGUuZmlsdGVyRm4gaW5zdGFuY2VvZiBsVz90aGlzLmZpbHRlckZuIGluc3RhbmNlb2YgbFcmJmUuZmlsdGVyRm4ucHJvcD09PXRoaXMuZmls''@;'; put 'put ''dGVyRm4ucHJvcCYmZS5sb3c9PT10aGlzLl9sb3cmJmUuaGlnaD09PXRoaXMuX2hpZ2g6ZT09PXRoaXMpfX1sZXQgSU1lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBhV3tjb25zdHJ1Y3Rvcih0LHIsaSxvLGEpe3N1cGVyKHQpLHRoaXMuZG9tQWRhcHRlcj1yLHRoaXMuY29tbW9uU3RyaW5ncz1p''@;'; put 'put ''LHRoaXMucG9wb3ZlclRvZ2dsZVNlcnZpY2U9byx0aGlzLm5nWm9uZT1hLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEtyLHRoaXMub3Blbj0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W119Z2V0IHZhbHVlKCl7cmV0dXJuW3RoaXMuZmlsdGVyLmxvdyx0aGlzLmZpbHRlci5oaWdoXX1zZXQg''@;'; put 'put ''dmFsdWUodCl7dGhpcy5maWx0ZXImJkFycmF5LmlzQXJyYXkodCk/dCYmKHRbMF0hPT10aGlzLmZpbHRlci5sb3d8fHRbMV0hPT10aGlzLmZpbHRlci5oaWdoKSYmKHRoaXMuZmlsdGVyLmxvdz0ibnVtYmVyIj09dHlwZW9mIHRbMF0/dFswXTpudWxsLHRoaXMuZmlsdGVyLmhpZ2g9Im51bWJl''@;'; put 'put ''ciI9PXR5cGVvZiB0WzFdP3RbMV06bnVsbCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQodCkpOnRoaXMuaW5pdEZpbHRlclZhbHVlcz10fXNldCBjdXN0b21OdW1lcmljRmlsdGVyKHQpe3RoaXMuc2V0RmlsdGVyKHQgaW5zdGFuY2VvZiBvVz90Om5ldyBLYih0KSksdGhpcy5pbml0Rmls''@;'; put 'put ''dGVyVmFsdWVzJiYodGhpcy52YWx1ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZXMsZGVsZXRlIHRoaXMuaW5pdEZpbHRlclZhbHVlcyl9Z2V0IG1heFBsYWNlaG9sZGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5tYXhQbGFjZWhvbGRlcnx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMubWF4VmFsdWV9Z2V0''@;'; put 'put ''IG1pblBsYWNlaG9sZGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5taW5QbGFjZWhvbGRlcnx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMubWluVmFsdWV9Z2V0IGZyb21MYWJlbFZhbHVlKCl7cmV0dXJuIHRoaXMuZnJvbUxhYmVsfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5mcm9tTGFiZWx9Z2V0''@;'; put 'put ''IHRvTGFiZWxWYWx1ZSgpe3JldHVybiB0aGlzLnRvTGFiZWx8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnRvTGFiZWx9Z2V0IGxvdygpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdGhpcy5maWx0ZXIubG93JiZpc0Zpbml0ZSh0aGlzLmZpbHRlci5sb3cpP3RoaXMuZmlsdGVyLmxvdzpudWxs''@;'; put 'put ''fXNldCBsb3codCl7Im51bWJlciI9PXR5cGVvZiB0JiZ0IT09dGhpcy5maWx0ZXIubG93Pyh0aGlzLmZpbHRlci5sb3c9dCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuZmlsdGVyLmxvdyx0aGlzLmZpbHRlci5oaWdoXSkpOiJudW1iZXIiIT10eXBlb2YgdCYmKHRoaXMuZmls''@;'; put 'put ''dGVyLmxvdz1udWxsLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSl9Z2V0IGhpZ2goKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHRoaXMuZmlsdGVyLmhpZ2gmJmlzRmluaXRlKHRoaXMuZmlsdGVyLmhpZ2gpP3RoaXMuZmls''@;'; put 'put ''dGVyLmhpZ2g6bnVsbH1zZXQgaGlnaCh0KXsibnVtYmVyIj09dHlwZW9mIHQmJnQhPT10aGlzLmZpbHRlci5oaWdoPyh0aGlzLmZpbHRlci5oaWdoPXQsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKToibnVtYmVyIiE9dHlw''@;'; put 'put ''ZW9mIHQmJih0aGlzLmZpbHRlci5oaWdoPW51bGwsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnBvcG92ZXJUb2dnbGVTZXJ2aWNlLm9w''@;'; put 'put ''ZW5DaGFuZ2Uuc3Vic2NyaWJlKHQ9Pnt0aGlzLm9wZW49dCx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuZG9tQWRhcHRlci5mb2N1cyh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpfSl9KX0pKX1uZ09uRGVzdHJveSgp''@;'; put 'put ''e3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2godD0+e3QudW5zdWJzY3JpYmUoKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShsNyksemUoYnYpLHplKGlsKSx6ZShLdSksemUoZ2EpKX0sbi5cdTAyNzVj''@;'; put 'put ''bXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWRnLW51bWVyaWMtZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbih0LHIpe2lmKDEmdCYmKFdvKGg4dCw1KSxXbyhVRCw1KSksMiZ0KXtsZXQgaTtjaShpPXVpKCkpJiYoci5pbnB1dD1pLmZpcnN0KSxjaShpPXVpKCkpJiYoci5maWx0''@;'; put 'put ''ZXJDb250YWluZXI9aS5maXJzdCl9fSxpbnB1dHM6e21pblBsYWNlaG9sZGVyOlswLCJjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlciIsIm1pblBsYWNlaG9sZGVyIl0sbWF4UGxhY2Vob2xkZXI6WzAsImNsckZpbHRlck1heFBsYWNlaG9sZGVyIiwibWF4UGxhY2Vob2xkZXIiXSxmcm9tTGFiZWw6''@;'; put 'put ''WzAsImNsckZpbHRlckZyb21MYWJlbCIsImZyb21MYWJlbCJdLHRvTGFiZWw6WzAsImNsckZpbHRlclRvTGFiZWwiLCJ0b0xhYmVsIl0sdmFsdWU6WzAsImNsckZpbHRlclZhbHVlIiwidmFsdWUiXSxjdXN0b21OdW1lcmljRmlsdGVyOlswLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjdXN0b21O''@;'; put 'put ''dW1lcmljRmlsdGVyIl19LG91dHB1dHM6e2ZpbHRlclZhbHVlQ2hhbmdlOiJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2JvKFt7cHJvdmlkZTppVyx1c2VFeGlzdGluZzpufV0pLEZvXSxkZWNsczoxMix2YXJzOjEwLGNvbnN0czpbWyJpbnB1dF9sb3ci''@;'; put 'put ''LCIiXSxbImlucHV0X2hpZ2giLCIiXSxbMywiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIiwiY2xyRGdGaWx0ZXIiLCJjbHJEZ0ZpbHRlck9wZW4iXSxbMSwiZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItZm9ybSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCJdLFsiY2xyTnVtYmVySW5wdXQiLCIiLCJ0''@;'; put 'put ''eXBlIiwibnVtYmVyIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsImxvdyIsMSwiZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItaW5wdXQiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwicGxhY2Vob2xkZXIiXSxbImNsck51bWJlcklucHV0IiwiIiwidHlwZSIsIm51bWJlciIsImF1''@;'; put 'put ''dG9jb21wbGV0ZSIsIm9mZiIsIm5hbWUiLCJoaWdoIiwxLCJkYXRhZ3JpZC1udW1lcmljLWZpbHRlci1pbnB1dCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJwbGFjZWhvbGRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpe2lmKDEmdCl7Y29uc3QgaT13bigpO0ooMCwiY2xyLWRn''@;'; put 'put ''LWZpbHRlciIsMiksaGkoImNsckRnRmlsdGVyT3BlbkNoYW5nZSIsZnVuY3Rpb24oYSl7cmV0dXJuIFllKGkpLGZpKHIub3BlbixhKXx8KHIub3Blbj1hKSxYZShhKX0pLEooMSwiZGl2IiwzKSgyLCJjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lciIpKDMsImxhYmVsIiw0KSxTZSg0KSx0ZSgp''@;'; put 'put ''LEooNSwiaW5wdXQiLDUsMCksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGEpe3JldHVybiBZZShpKSxmaShyLmxvdyxhKXx8KHIubG93PWEpLFhlKGEpfSksdGUoKSgpLEooNywiY2xyLW51bWJlci1pbnB1dC1jb250YWluZXIiKSg4LCJsYWJlbCIsNCksU2UoOSksdGUoKSxKKDEwLCJp''@;'; put 'put ''bnB1dCIsNiwxKSxoaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oYSl7cmV0dXJuIFllKGkpLGZpKHIuaGlnaCxhKXx8KHIuaGlnaD1hKSxYZShhKX0pLHRlKCkoKSgpKCl9MiZ0JiYocnQoImNsckRnRmlsdGVyIixyLnJlZ2lzdGVyZWQpLGRpKCJjbHJEZ0ZpbHRlck9wZW4iLHIub3Blbiks''@;'; put 'put ''aWUoNCkscHIoci5mcm9tTGFiZWxWYWx1ZSksaWUoKSxkaSgibmdNb2RlbCIsci5sb3cpLHJ0KCJwbGFjZWhvbGRlciIsci5taW5QbGFjZWhvbGRlclZhbHVlKSxScigiYXJpYS1sYWJlbCIsci5taW5QbGFjZWhvbGRlclZhbHVlKSxpZSg0KSxwcihyLnRvTGFiZWxWYWx1ZSksaWUoKSxkaSgi''@;'; put 'put ''bmdNb2RlbCIsci5oaWdoKSxydCgicGxhY2Vob2xkZXIiLHIubWF4UGxhY2Vob2xkZXJWYWx1ZSksUnIoImFyaWEtbGFiZWwiLHIubWF4UGxhY2Vob2xkZXJWYWx1ZSkpfSxkZXBlbmRlbmNpZXM6W2VsLEVNZSxTTWUsbHUsRXosb2MsWGwsVURdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpO2Ns''@;'; put 'put ''YXNzIGNXe2NvbnN0cnVjdG9yKGUsdD0hMSl7dGhpcy5wcm9wPWUsdGhpcy5leGFjdD10LHRoaXMubmVzdGVkUHJvcD1uZXcgeWFlKGUpfWFjY2VwdHMoZSx0KXtjb25zdCByPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUoZSk7cmV0dXJuISh0eXBlb2Ygcj4idSIpJiYodGhpcy5leGFj''@;'; put 'put ''dD8oIiIrcikudG9Mb3dlckNhc2UoKT09PXQ6KCIiK3IpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0KT49MCl9fWNsYXNzIFhie2NvbnN0cnVjdG9yKGUpe3RoaXMuZmlsdGVyRm49ZSx0aGlzLl9jaGFuZ2VzPW5ldyBNcix0aGlzLl9sb3dlckNhc2VWYWx1ZT0iIix0aGlzLl9yYXdWYWx1ZT0i''@;'; put 'put ''In1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCBsb3dlckNhc2VWYWx1ZSgpe3JldHVybiB0aGlzLl9sb3dlckNhc2VWYWx1ZX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIGNXP3twcm9wZXJ0eTp0aGlzLmZp''@;'; put 'put ''bHRlckZuLnByb3AsdmFsdWU6dGhpcy52YWx1ZX06dGhpc31nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fcmF3VmFsdWV9c2V0IHZhbHVlKGUpe2V8fChlPSIiKSxlIT09dGhpcy5fcmF3VmFsdWUmJih0aGlzLl9yYXdWYWx1ZT1lLHRoaXMuX2xvd2VyQ2FzZVZhbHVlPWUudG9Mb3dlckNhc2Uo''@;'; put 'put ''KS50cmltKCksdGhpcy5fY2hhbmdlcy5uZXh0KGUpKX1pc0FjdGl2ZSgpe3JldHVybiEhdGhpcy52YWx1ZX1hY2NlcHRzKGUpe3JldHVybiB0aGlzLmZpbHRlckZuLmFjY2VwdHMoZSx0aGlzLmxvd2VyQ2FzZVZhbHVlKX1lcXVhbHMoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBYYiYmKGUuZmls''@;'; put 'put ''dGVyRm4gaW5zdGFuY2VvZiBjVz90aGlzLmZpbHRlckZuIGluc3RhbmNlb2YgY1cmJmUuZmlsdGVyRm4ucHJvcD09PXRoaXMuZmlsdGVyRm4ucHJvcCYmZS52YWx1ZT09PXRoaXMudmFsdWU6ZT09PXRoaXMpfX1sZXQgU009KCgpPT57Y2xhc3MgbiBleHRlbmRzIGFXe2NvbnN0cnVjdG9yKHQs''@;'; put 'put ''cixpLG8sYSxsLHUpe3N1cGVyKHQpLHRoaXMuZG9tQWRhcHRlcj1yLHRoaXMuY29tbW9uU3RyaW5ncz1pLHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlPW8sdGhpcy5lbGVtZW50UmVmPWEsdGhpcy5jZHI9bCx0aGlzLm5nWm9uZT11LHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEtyLHRoaXMu''@;'; put 'put ''b3Blbj0hMSx0aGlzLmxhYmVsVmFsdWU9IiIsdGhpcy5zdWJzPVtdfXNldCBjdXN0b21TdHJpbmdGaWx0ZXIodCl7dGhpcy5zZXRGaWx0ZXIodCBpbnN0YW5jZW9mIG9XP3Q6bmV3IFhiKHQpKSx0aGlzLmluaXRGaWx0ZXJWYWx1ZSYmKHRoaXMudmFsdWU9dGhpcy5pbml0RmlsdGVyVmFsdWUs''@;'; put 'put ''ZGVsZXRlIHRoaXMuaW5pdEZpbHRlclZhbHVlKX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5maWx0ZXIudmFsdWV9c2V0IHZhbHVlKHQpe3RoaXMuZmlsdGVyJiYic3RyaW5nIj09dHlwZW9mIHQ/KHR8fCh0PSIiKSx0IT09dGhpcy5maWx0ZXIudmFsdWUmJih0aGlzLmZpbHRlci52YWx1ZT10''@;'; put 'put ''LHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdCh0KSkpOnRoaXMuaW5pdEZpbHRlclZhbHVlPXR9Z2V0IHBsYWNlaG9sZGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcnx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZmlsdGVySXRlbXN9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5z''@;'; put 'put ''dWJzLnB1c2godGhpcy5zbWFydFRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUodD0+e3RoaXMub3Blbj10LHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5kb21BZGFwdGVyLmZvY3VzKHRoaXMuaW5wdXQu''@;'; put 'put ''bmF0aXZlRWxlbWVudCl9KX0pfSkpfW5nT25DaGFuZ2VzKCl7c2V0VGltZW91dCgoKT0+e3RoaXMuc2V0RmlsdGVyTGFiZWwoKSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKX0pfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLnN1YnMuZm9yRWFjaCh0PT50LnVuc3Vic2Ny''@;'; put 'put ''aWJlKCkpfXNldEZpbHRlckxhYmVsKCl7aWYodGhpcy5sYWJlbClyZXR1cm4gdm9pZCh0aGlzLmxhYmVsVmFsdWU9dGhpcy5sYWJlbCk7Y29uc3Qgcj10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD8uY2xvc2VzdCgiY2xyLWRnLWNvbHVtbiIpPy5xdWVyeVNlbGVjdG9yKCIuZGF0YWdy''@;'; put 'put ''aWQtY29sdW1uLXRpdGxlIik7dGhpcy5sYWJlbFZhbHVlPXRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckxhYmVsLHtDT0xVTU46cj8udGV4dENvbnRlbnQudHJpbSgpfHwiIn0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShsNyksemUoYnYpLHplKGlsKSx6ZShLdSksemUobm8pLHplKFVsKSx6ZShnYSkpfSxuLlx1MDI3NWNtcD1Qcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItZGctc3RyaW5nLWZpbHRlciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24odCxyKXtpZigxJnQm''@;'; put 'put ''JihXbyhmOHQsNSksV28oVUQsNSkpLDImdCl7bGV0IGk7Y2koaT11aSgpKSYmKHIuaW5wdXQ9aS5maXJzdCksY2koaT11aSgpKSYmKHIuZmlsdGVyQ29udGFpbmVyPWkuZmlyc3QpfX0saW5wdXRzOntwbGFjZWhvbGRlcjpbMCwiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlciJd''@;'; put 'put ''LGxhYmVsOlswLCJjbHJGaWx0ZXJMYWJlbCIsImxhYmVsIl0sY3VzdG9tU3RyaW5nRmlsdGVyOlswLCJjbHJEZ1N0cmluZ0ZpbHRlciIsImN1c3RvbVN0cmluZ0ZpbHRlciJdLHZhbHVlOlswLCJjbHJGaWx0ZXJWYWx1ZSIsInZhbHVlIl19LG91dHB1dHM6e2ZpbHRlclZhbHVlQ2hhbmdlOiJj''@;'; put 'put ''bHJGaWx0ZXJWYWx1ZUNoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2JvKFt7cHJvdmlkZTppVyx1c2VFeGlzdGluZzpufV0pLEZvLGl1XSxkZWNsczo2LHZhcnM6Nixjb25zdHM6W1siaW5wdXQiLCIiXSxbMywiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIiwiY2xyRGdGaWx0ZXIiLCJj''@;'; put 'put ''bHJEZ0ZpbHRlck9wZW4iXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsInNlYXJjaCIsImNscklucHV0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsInBsYWNlaG9sZGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHQscil7aWYoMSZ0KXtjb25zdCBp''@;'; put 'put ''PXduKCk7SigwLCJjbHItZGctZmlsdGVyIiwxKSxoaSgiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIixmdW5jdGlvbihhKXtyZXR1cm4gWWUoaSksZmkoci5vcGVuLGEpfHwoci5vcGVuPWEpLFhlKGEpfSksSigxLCJjbHItaW5wdXQtY29udGFpbmVyIikoMiwibGFiZWwiKSxTZSgzKSx0ZSgpLEoo''@;'; put 'put ''NCwiaW5wdXQiLDIsMCksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGEpe3JldHVybiBZZShpKSxmaShyLnZhbHVlLGEpfHwoci52YWx1ZT1hKSxYZShhKX0pLHRlKCkoKSgpfTImdCYmKHJ0KCJjbHJEZ0ZpbHRlciIsci5yZWdpc3RlcmVkKSxkaSgiY2xyRGdGaWx0ZXJPcGVuIixyLm9w''@;'; put 'put ''ZW4pLGllKDMpLHByKHIubGFiZWxWYWx1ZSksaWUoKSxkaSgibmdNb2RlbCIsci52YWx1ZSkscnQoInBsYWNlaG9sZGVyIixyLnBsYWNlaG9sZGVyVmFsdWUpLFJyKCJhcmlhLWxhYmVsIixyLnBsYWNlaG9sZGVyVmFsdWUpKX0sZGVwZW5kZW5jaWVzOltlbCxQZixYeixsdSxvYyxYbCxVRF0s''@;'; put 'put ''ZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksRHY9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHNNe31yZXR1cm4gbi5cdTAyNzVmYWM9KCgpPT57bGV0IGU7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybihlfHwoZT13YShuKSkpKHJ8fG4pfX0pKCksbi5cdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3Rv''@;'; put 'put ''cnM6W1siY2xyLWRhdGFncmlkIl1dLHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0ZvXX0pLG59KSgpLEVNPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmFjdGlvbmFibGVDb3VudD0wfWdldCBoYXNBY3Rpb25hYmxlUm93KCl7cmV0dXJuIHRoaXMuYWN0aW9uYWJsZUNvdW50PjB9''@;'; put 'put ''cmVnaXN0ZXIoKXt0aGlzLmFjdGlvbmFibGVDb3VudCsrfXVucmVnaXN0ZXIoKXt0aGlzLmFjdGlvbmFibGVDb3VudC0tfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9''@;'; put 'put ''KSxufSkoKSxRYj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgbE17Y29uc3RydWN0b3IodCxyLGkpe2lmKCFyKXRocm93IG5ldyBFcnJvcigiY2xyLWRnLXJvdyBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci1kYXRhZ3JpZCIpO3N1cGVyKHQsciksdGhpcy5yb3dBY3Rpb25zPWl9''@;'; put 'put ''Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLnJvd0FjdGlvbnMuaGFzQWN0aW9uYWJsZVJvd319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoVWwpLHplKER2LDgpLHplKEVNKSl9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNs''@;'; put 'put ''ci1kYXRhZ3JpZCJdLFsiY2xyLWRnLXJvdyJdXSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltGb119KSxufSkoKSxETWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0KXt0aGlzLnBsYXRmb3JtSWQ9dCx0aGlzLm1vZGFsU3RhY2s9W10sdGhpcy5rZXlVcEV2ZW50TGlzdGVuZXI9dGhpcy5v''@;'; put 'put ''bktleVVwLmJpbmQodGhpcyl9dHJhY2tNb2RhbE9wZW4odCl7ITE9PT10aGlzLm1vZGFsU3RhY2suaW5jbHVkZXModCkmJnRoaXMubW9kYWxTdGFjay51bnNoaWZ0KHQpLEhjKHRoaXMucGxhdGZvcm1JZCkmJmRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMua2V5''@;'; put 'put ''VXBFdmVudExpc3RlbmVyKX10cmFja01vZGFsQ2xvc2UodCl7Y29uc3Qgcj10aGlzLm1vZGFsU3RhY2suaW5kZXhPZih0KTtyPi0xJiZ0aGlzLm1vZGFsU3RhY2suc3BsaWNlKHIsMSksMD09PXRoaXMubW9kYWxTdGFjay5sZW5ndGgmJkhjKHRoaXMucGxhdGZvcm1JZCkmJmRvY3VtZW50LmJv''@;'; put 'put ''ZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMua2V5VXBFdmVudExpc3RlbmVyKX1vbktleVVwKHQpe3RoaXMubW9kYWxTdGFjay5sZW5ndGgmJnRtKHQua2V5KT09PU1vLkVzY2FwZSYmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpLHRoaXMubW9kYWxTdGFja1swXS5j''@;'; put 'put ''bG9zZSgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikob3IobGQpKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxnND0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9y''@;'; put 'put ''KHQpe3RoaXMubW9kYWxTdGFja1NlcnZpY2U9dCx0aGlzLnByZXZlbnRTY3JvbGw9ITEsdGhpcy50b2dnbGVTdGF0ZT0hMSx0aGlzLl9lbmFibGVkPSExLHRoaXMuX3N0YXRlPW5ldyAkaSh0aGlzLnRvZ2dsZVN0YXRlKX1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLl9lbmFibGVkfXNldCBl''@;'; put 'put ''bmFibGVkKHQpe3RoaXMuX2VuYWJsZWQ9dH1nZXQgcHJldmVudEZvY3VzU2Nyb2xsKCl7cmV0dXJuIHRoaXMucHJldmVudFNjcm9sbH1zZXQgcHJldmVudEZvY3VzU2Nyb2xsKHQpe3RoaXMucHJldmVudFNjcm9sbD10fWdldCBzdGF0ZSgpe3JldHVybiB0aGlzLmNhY2hlfWdldCBzdGF0ZUNo''@;'; put 'put ''YW5nZSgpe3JldHVybiB0aGlzLl9zdGF0ZS5hc09ic2VydmFibGUoKX1nZXQgaXNPcGVuKCl7cmV0dXJuITA9PT10aGlzLnRvZ2dsZVN0YXRlfW9wZW4odCxyKXt0aGlzLmNhY2hlPXQsdGhpcy5idXR0b249cix0aGlzLnRvZ2dsZVN0YXRlPSEwLHRoaXMuX3N0YXRlLm5leHQodGhpcy50b2dn''@;'; put 'put ''bGVTdGF0ZSksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFja01vZGFsT3Blbih0aGlzKX1jbG9zZSgpe3RoaXMudG9nZ2xlU3RhdGU9ITEsdGhpcy5yZXR1cm5Gb2N1cygpLHRoaXMuX3N0YXRlLm5leHQodGhpcy50b2dnbGVTdGF0ZSksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFja01v''@;'; put 'put ''ZGFsQ2xvc2UodGhpcyl9cmV0dXJuRm9jdXMoKXt0aGlzLmJ1dHRvbiYmKHRoaXMuYnV0dG9uLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOnRoaXMucHJldmVudEZvY3VzU2Nyb2xsfSksdGhpcy5idXR0b249bnVsbCl9dG9nZ2xlKHQscil7dGhpcy5pc1Jvd09wZW4odCl8fCF0P3RoaXMuY2xvc2Uo''@;'; put 'put ''KTp0aGlzLm9wZW4odCxyKX1pc1Jvd09wZW4odCl7cmV0dXJuISghdGhpcy50b2dnbGVTdGF0ZXx8dGhpcy5jYWNoZSE9PXQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKShvcihETWUpKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6''@;'; put 'put ''bi5cdTAyNzVmYWN9KSxufSkoKSxNTT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQpe3RoaXMuZGV0YWlsU2VydmljZT10LHRoaXMuZXhwYW5kYWJsZUNvdW50PTB9Z2V0IGhhc0V4cGFuZGFibGVSb3coKXtyZXR1cm4hdGhpcy5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQmJnRoaXMuZXhwYW5k''@;'; put 'put ''YWJsZUNvdW50PjB9cmVnaXN0ZXIoKXt0aGlzLmV4cGFuZGFibGVDb3VudCsrfXVucmVnaXN0ZXIoKXt0aGlzLmV4cGFuZGFibGVDb3VudC0tfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKShvcihnNCkpfSxuLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4s''@;'; put 'put ''ZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEpiPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBsTXtjb25zdHJ1Y3Rvcih0LHIsaSl7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJjbHItZGctcm93IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRhdGFncmlkIik7c3VwZXIodCxy''@;'; put 'put ''KSx0aGlzLmV4cGFuZGFibGVDb3VudD1pfWdldCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlQ291bnQuaGFzRXhwYW5kYWJsZVJvd319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoVWwpLHplKER2LDgpLHplKE1NKSl9LG4uXHUwMjc1''@;'; put 'put ''ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdLFsiY2xyLWRnLXJvdyJdXSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltGb119KSxufSkoKTtjbGFzcyB1V3tjb25zdHJ1Y3RvcihlKXt0aGlzLnByb3A9ZSx0aGlzLm5lc3RlZFByb3A9bmV3IHlhZShlKX1jb21wYXJl''@;'; put 'put ''KGUsdCl7bGV0IHI9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShlKSxpPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUodCk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiByJiYocj1yLnRvTG93ZXJDYXNlKCkpLCJzdHJpbmciPT10eXBlb2YgaSYmKGk9aS50b0xvd2VyQ2FzZSgpKSx0''@;'; put 'put ''eXBlb2Ygcj4idSJ8fG51bGw9PT1yP3R5cGVvZiBpPiJ1Inx8bnVsbD09PWk/MDoxOnR5cGVvZiBpPiJ1Inx8bnVsbD09PWl8fHI8aT8tMTpyPmk/MTowfX12YXIgRnA9ZnVuY3Rpb24obil7cmV0dXJuIG5bbi5VTlNPUlRFRD0wXT0iVU5TT1JURUQiLG5bbi5BU0M9MV09IkFTQyIsbltuLkRF''@;'; put 'put ''U0M9LTFdPSJERVNDIixufShGcHx8e30pO2NvbnN0IFRNPSJkYXRhZ3JpZC1maXhlZC13aWR0aCIsekQ9ImRhdGFncmlkLWhpZGRlbi1jb2x1bW4iO2xldCBiYWU9KCgpPT57Y2xhc3MgbntuZ0FmdGVyVmlld0luaXQoKXt0aGlzLmNvbHVtblZpZXc9dGhpcy50ZW1wbGF0ZVJlZi5jcmVhdGVF''@;'; put 'put ''bWJlZGRlZFZpZXcobnVsbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbHVtblZpZXcuZGVzdHJveSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siZGctd3JhcHBlZC1jb2x1bW4iXV0s''@;'; put 'put ''dmlld1F1ZXJ5OmZ1bmN0aW9uKHQscil7aWYoMSZ0JiZXbyhwOHQsNSksMiZ0KXtsZXQgaTtjaShpPXVpKCkpJiYoci50ZW1wbGF0ZVJlZj1pLmZpcnN0KX19LHN0YW5kYWxvbmU6ITEsbmdDb250ZW50U2VsZWN0b3JzOmVzLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJjb2x1bW5Qb3J0YWwi''@;'; put 'put ''LCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24odCxyKXsxJnQmJihmbygpLFluKDAsZzh0LDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxjZCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxkVz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RhdGVEZWJvdW5jZXI9dCx0aGlzLl9y''@;'; put 'put ''ZXZlcnNlPSExLHRoaXMuX2NoYW5nZT1uZXcgTXJ9Z2V0IGNvbXBhcmF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcGFyYXRvcn1zZXQgY29tcGFyYXRvcih0KXt0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fY29tcGFyYXRvcj10LHRoaXMuZW1pdENoYW5nZSgpLHRoaXMu''@;'; put 'put ''c3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpfWdldCByZXZlcnNlKCl7cmV0dXJuIHRoaXMuX3JldmVyc2V9c2V0IHJldmVyc2UodCl7dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3JldmVyc2U9dCx0aGlzLmVtaXRDaGFuZ2UoKSx0aGlzLnN0YXRlRGVib3VuY2Vy''@;'; put 'put ''LmNoYW5nZURvbmUoKX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGUodCxyKXt0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5jb21wYXJhdG9yPT09dD90aGlzLl9yZXZlcnNlPXR5cGVvZiByPCJ1IiYmcnx8IXRoaXMu''@;'; put 'put ''X3JldmVyc2U6KHRoaXMuX2NvbXBhcmF0b3I9dCx0aGlzLl9yZXZlcnNlPXR5cGVvZiByPCJ1IiYmciksdGhpcy5lbWl0Q2hhbmdlKCksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCl9Y2xlYXIoKXt0aGlzLmNvbXBhcmF0b3I9bnVsbH1jb21wYXJlKHQscil7cmV0dXJuKHRoaXMu''@;'; put 'put ''cmV2ZXJzZT8tMToxKSp0aGlzLmNvbXBhcmF0b3IuY29tcGFyZSh0LHIpfWVtaXRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2UubmV4dCh0aGlzKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikob3IoakQpKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZh''@;'; put 'put ''Y3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTt2YXIgbTQ9ZnVuY3Rpb24obil7cmV0dXJuIG5bbi5BTElHTl9DT0xVTU5TPTBdPSJBTElHTl9DT0xVTU5TIixuW24uQ0FMQ1VMQVRFX01PREVfT049MV09IkNBTENVTEFURV9NT0RFX09OIixuW24uQ0FMQ1VMQVRFX01PREVfT0ZGPTJdPSJDQUxD''@;'; put 'put ''VUxBVEVfTU9ERV9PRkYiLG5bbi5DTEVBUl9XSURUSFM9M109IkNMRUFSX1dJRFRIUyIsbltuLkNPTVBVVEVfQ09MVU1OX1dJRFRIUz00XT0iQ09NUFVURV9DT0xVTU5fV0lEVEhTIixufShtNHx8e30pO2xldCBldz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVuZGVyU3Rl''@;'; put 'put ''cD1uZXcgTXIsdGhpcy5hbHJlYWR5U2l6ZWQ9ITF9Z2V0IHJlbmRlclN0ZXAoKXtyZXR1cm4gdGhpcy5fcmVuZGVyU3RlcC5hc09ic2VydmFibGUoKX1maWx0ZXJSZW5kZXJTdGVwcyh0KXtyZXR1cm4gdGhpcy5yZW5kZXJTdGVwLnBpcGUoc3Uocj0+dD09PXIpKX1yZXNpemUoKXt0aGlzLl9y''@;'; put 'put ''ZW5kZXJTdGVwLm5leHQobTQuQ0FMQ1VMQVRFX01PREVfT04pLHRoaXMuYWxyZWFkeVNpemVkJiZ0aGlzLl9yZW5kZXJTdGVwLm5leHQobTQuQ0xFQVJfV0lEVEhTKSx0aGlzLl9yZW5kZXJTdGVwLm5leHQobTQuQ09NUFVURV9DT0xVTU5fV0lEVEhTKSx0aGlzLl9yZW5kZXJTdGVwLm5leHQo''@;'; put 'put ''bTQuQUxJR05fQ09MVU1OUyksdGhpcy5hbHJlYWR5U2l6ZWQ9ITAsdGhpcy5fcmVuZGVyU3RlcC5uZXh0KG00LkNBTENVTEFURV9NT0RFX09GRil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9y''@;'; put 'put ''eTpuLlx1MDI3NWZhY30pLG59KSgpLHdhZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscixpKXt0aGlzLmVsPXQsdGhpcy5kb21BZGFwdGVyPXIsdGhpcy5vcmdhbml6ZXI9aSx0aGlzLl9yZXNpemVkQnk9MH1nZXQgcmVzaXplZEJ5KCl7cmV0dXJuIHRoaXMuX3Jlc2l6ZWRCeX1nZXQg''@;'; put 'put ''bWluQ29sdW1uV2lkdGgoKXtyZXR1cm4gdGhpcy5kb21BZGFwdGVyLm1pbldpZHRoKHRoaXMuZWwubmF0aXZlRWxlbWVudCl8fDk2fWdldCBtYXhSZXNpemVSYW5nZSgpe3JldHVybiB0aGlzLndpZHRoQmVmb3JlUmVzaXplLXRoaXMubWluQ29sdW1uV2lkdGh9Z2V0IHdpZHRoQWZ0ZXJSZXNp''@;'; put 'put ''emUoKXtyZXR1cm4gdGhpcy53aWR0aEJlZm9yZVJlc2l6ZSt0aGlzLl9yZXNpemVkQnl9c3RhcnRSZXNpemUoKXt0aGlzLl9yZXNpemVkQnk9MCx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U9ITAsdGhpcy53aWR0aEJlZm9yZVJlc2l6ZT10aGlzLmRvbUFkYXB0ZXIuY2xpZW50UmVjdCh0''@;'; put 'put ''aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLndpZHRofWVuZFJlc2l6ZSgpe3RoaXMub3JnYW5pemVyLnJlc2l6ZSgpfWNhbGN1bGF0ZVJlc2l6ZSh0KXt0PC10aGlzLm1heFJlc2l6ZVJhbmdlPyh0aGlzLl9yZXNpemVkQnk9LXRoaXMubWF4UmVzaXplUmFuZ2UsdGhpcy5pc1dpdGhpbk1heFJlc2l6''@;'; put 'put ''ZVJhbmdlPSExKToodGhpcy5fcmVzaXplZEJ5PXQsdGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPSEwKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikob3Iobm8pLG9yKGJ2KSxvcihldykpfSxuLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9y''@;'; put 'put ''eTpuLlx1MDI3NWZhY30pLG59KSgpLENhZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQpe3RoaXMucGxhdGZvcm1JZD10fWdldCB0YWJsZVJlZigpe3JldHVybiB0aGlzLl90YWJsZVJlZn1zZXQgdGFibGVSZWYodCl7dGhpcy5fdGFibGVSZWY9dH1zZXQgdGFibGUodCl7SGModGhpcy5w''@;'; put 'put ''bGF0Zm9ybUlkKSYmdC5uYXRpdmVFbGVtZW50JiYodGhpcy50YWJsZVJlZj10Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLXRhYmxlIikpfWdldENvbHVtbkRyYWdIZWlnaHQoKXtyZXR1cm4gdGhpcy50YWJsZVJlZj9gJHt0aGlzLnRhYmxlUmVmLmNsaWVudEhlaWdo''@;'; put 'put ''dH1weGA6bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikob3IobGQpKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxPTWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0LHIsaSxvLGEsbCl7''@;'; put 'put ''dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZT10LHRoaXMucmVuZGVyZXI9cix0aGlzLm5nWm9uZT1pLHRoaXMudGFibGVTaXplU2VydmljZT1vLHRoaXMuY29tbW9uU3RyaW5nPWEsdGhpcy5kb2N1bWVudD1sLHRoaXMuY29sdW1uU2VwYXJhdG9ySWQ9UGgoKSx0aGlzLnJlc2l6ZVN0YXJ0ZWRP''@;'; put 'put ''bktleURvd249ITEsdGhpcy51bmxpc3RlbmVycz1bXX1nZXQgZGVzY3JpcHRpb25JZCgpe3JldHVybmAke3RoaXMuY29sdW1uU2VwYXJhdG9ySWR9LWFyaWEtZGVzY3JpYmVkYnlgfWdldCByZXNpemVUcmFja2VyRWwoKXtyZXR1cm4gdGhpcy5yZXNpemVUcmFja2VyUmVmLm5hdGl2ZUVsZW1l''@;'; put 'put ''bnR9Z2V0IGNvbHVtbkhhbmRsZUVsKCl7cmV0dXJuIHRoaXMuY29sdW1uSGFuZGxlUmVmLm5hdGl2ZUVsZW1lbnR9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLnVubGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhp''@;'; put 'put ''cy5jb2x1bW5IYW5kbGVFbCwia2V5ZG93biIsdD0+e3RoaXMuc2hvd1RyYWNrZXJPbkZpcnN0S2V5RG93bih0KSx0aGlzLm1vdmVUcmFja2VyT25LZXlEb3duKHQpfSkpLHRoaXMudW5saXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmNvbHVtbkhhbmRsZUVsLCJrZXl1''@;'; put 'put ''cCIsdD0+e3RoaXMuaGlkZVRyYWNrZXJPbktleVVwKHQpfSkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnVubGlzdGVuZXJzLmZvckVhY2godD0+dCgpKX1zaG93VHJhY2tlcigpe3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2Uuc3RhcnRSZXNpemUoKTtjb25zdCB0PXRoaXMudGFibGVTaXplU2Vy''@;'; put 'put ''dmljZS5nZXRDb2x1bW5EcmFnSGVpZ2h0KCk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiaGVpZ2h0Iix0KSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJkaXNwbGF5IiwiYmxvY2siKX1tb3ZlVHJhY2tlcih0KXt0aGlz''@;'; put 'put ''LmNvbHVtblJlc2l6ZXJTZXJ2aWNlLmNhbGN1bGF0ZVJlc2l6ZSh0KSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGVYKCR7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnl9cHgpYCksdGhpcy5yZW5kZXJl''@;'; put 'put ''ci5zZXRTdHlsZSh0aGlzLmRvY3VtZW50LmJvZHksImN1cnNvciIsImNvbC1yZXNpemUiKSx0aGlzLnJlZEZsYWdUcmFja2VyKCl9aGlkZVRyYWNrZXIoKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLmVuZFJlc2l6ZSgpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFj''@;'; put 'put ''a2VyRWwsImRpc3BsYXkiLCJub25lIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlWCgwcHgpIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmNvbHVtbkhhbmRsZUVsLCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGVY''@;'; put 'put ''KDBweCkiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZG9jdW1lbnQuYm9keSwiY3Vyc29yIiwiYXV0byIpfXNob3dUcmFja2VyT25GaXJzdEtleURvd24odCl7IXRoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93biYmKHRoaXMuaXNBcnJvd0xlZnRLZXlFdmVudCh0KXx8dGhpcy5pc0Fy''@;'; put 'put ''cm93UmlnaHRLZXlFdmVudCh0KSkmJih0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd249ITAsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwib24tYXJyb3cta2V5LXJlc2l6ZSIpLHRoaXMuc2hvd1RyYWNrZXIoKSl9bW92ZVRyYWNrZXJPbktleURvd24odCl7''@;'; put 'put ''dGhpcy5pc0Fycm93TGVmdEtleUV2ZW50KHQpPyh0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMubW92ZVRyYWNrZXIodGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnktMTIpKTp0aGlzLmlzQXJyb3dSaWdodEtleUV2ZW50KHQpJiYodC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm1v''@;'; put 'put ''dmVUcmFja2VyKHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5KzEyKSl9aGlkZVRyYWNrZXJPbktleVVwKHQpe3RoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93biYmKHRoaXMuaXNBcnJvd0xlZnRLZXlFdmVudCh0KXx8dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudCh0KSkmJih0''@;'; put 'put ''aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd249ITEsdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwib24tYXJyb3cta2V5LXJlc2l6ZSIpLHRoaXMuaGlkZVRyYWNrZXIoKSx0aGlzLmNvbHVtbkhhbmRsZUVsLmZvY3VzKCkpfXJlZEZsYWdUcmFja2VyKCl7''@;'; put 'put ''dGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlIT09dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlJiYodGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPXRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UuaXNXaXRoaW5NYXhSZXNpemVSYW5nZSx0aGlzLmlz''@;'; put 'put ''V2l0aGluTWF4UmVzaXplUmFuZ2U/dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZXhjZWVkZWQtbWF4Iik6dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZXhjZWVkZWQtbWF4IikpfWlzQXJyb3dMZWZ0S2V5RXZlbnQo''@;'; put 'put ''dCl7cmV0dXJuIHRtKHQua2V5KT09PU1vLkFycm93TGVmdH1pc0Fycm93UmlnaHRLZXlFdmVudCh0KXtyZXR1cm4gdG0odC5rZXkpPT09TW8uQXJyb3dSaWdodH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUod2FlKSx6ZShOdCksemUoZ2EpLHpl''@;'; put 'put ''KENhZSksemUoaWwpLHplKFRsKSl9LG4uXHUwMjc1Y21wPVByKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIl1dLHZpZXdRdWVyeTpmdW5jdGlvbih0LHIpe2lmKDEmdCYmKFdvKG04dCw1KSxXbyh2OHQsNSkpLDImdCl7bGV0IGk7Y2koaT11aSgpKSYmKHIu''@;'; put 'put ''cmVzaXplVHJhY2tlclJlZj1pLmZpcnN0KSxjaShpPXVpKCkpJiYoci5jb2x1bW5IYW5kbGVSZWY9aS5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezImdCYmd3IoImRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IiLCEwKX0sc3RhbmRhbG9uZTohMSxkZWNs''@;'; put 'put ''czo2LHZhcnM6NCxjb25zdHM6W1siY29sdW1uSGFuZGxlIiwiIl0sWyJyZXNpemVUcmFja2VyIiwiIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2RrRHJhZyIsIiIsImNka0RyYWdMb2NrQXhpcyIsIngiLDEsImRhdGFncmlkLWNvbHVtbi1oYW5kbGUiLDMsImNka0RyYWdTdGFydGVkIiwiY2RrRHJh''@;'; put 'put ''Z01vdmVkIiwiY2RrRHJhZ0VuZGVkIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWNvbHVtbi1yZXNpemUtdHJhY2tlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpe2lmKDEmdCl7Y29uc3QgaT13bigpO0ooMCwiYnV0dG9uIiwyLDApLHd0KCJjZGtEcmFnU3RhcnRlZCIsZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gWWUoaSksWGUoci5zaG93VHJhY2tlcigpKX0pKCJjZGtEcmFnTW92ZWQiLGZ1bmN0aW9uKGEpe3JldHVybiBZZShpKSxYZShyLm1vdmVUcmFja2VyKGEuZGlzdGFuY2UueCkpfSkoImNka0RyYWdFbmRlZCIsZnVuY3Rpb24oYSl7cmV0dXJuIFllKGkpLHIuaGlkZVRy''@;'; put 'put ''YWNrZXIoKSxYZShhLnNvdXJjZS5fZHJhZ1JlZi5yZXNldCgpKX0pLHRlKCksSigyLCJzcGFuIiwzKSxTZSgzKSx0ZSgpLEl0KDQsImRpdiIsNCwxKX0yJnQmJihScigiYXJpYS1sYWJlbCIsci5jb21tb25TdHJpbmcua2V5cy5jb2x1bW5TZXBhcmF0b3JBcmlhTGFiZWwpKCJhcmlhLWRlc2Ny''@;'; put 'put ''aWJlZGJ5IixyLmRlc2NyaXB0aW9uSWQpLGllKDIpLFJyKCJpZCIsci5kZXNjcmlwdGlvbklkKSxpZSgpLFNyKCIgIixyLmNvbW1vblN0cmluZy5rZXlzLmNvbHVtblNlcGFyYXRvckRlc2NyaXB0aW9uLCIgIikpfSxkZXBlbmRlbmNpZXM6W2l5dF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCks''@;'; put 'put ''dHc9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGFXe2NvbnN0cnVjdG9yKHQscixpLG8sYSxsKXtzdXBlcihpKSx0aGlzLmVsPXQsdGhpcy5fc29ydD1yLHRoaXMudmNyPW8sdGhpcy5kZXRhaWxTZXJ2aWNlPWEsdGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1sLHRoaXMuc29ydE9yZGVyQ2hhbmdlPW5l''@;'; put 'put ''dyBLcix0aGlzLmZpbHRlclZhbHVlQ2hhbmdlPW5ldyBLcix0aGlzLmN1c3RvbUZpbHRlcj0hMSx0aGlzLl9jb2xUeXBlPSJzdHJpbmciLHRoaXMuX3NvcnRPcmRlcj1GcC5VTlNPUlRFRCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fc2hvd1NlcGFyYXRvcj0hMCx0aGlzLnN1YnNjcmlw''@;'; put 'put ''dGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvclNvcnRpbmdDaGFuZ2VzKCkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yRGV0YWlsUGFuZUNoYW5nZXMoKSl9Z2V0IGlzSGlkZGVuKCl7cmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMo''@;'; put 'put ''ekQpfWdldCBzaG93U2VwYXJhdG9yKCl7cmV0dXJuIHRoaXMuX3Nob3dTZXBhcmF0b3J9c2V0IHNob3dTZXBhcmF0b3IodCl7dGhpcy5fc2hvd1NlcGFyYXRvcj10LHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IGNvbFR5cGUoKXtyZXR1cm4gdGhpcy5fY29sVHlw''@;'; put 'put ''ZX1zZXQgY29sVHlwZSh0KXt0aGlzLl9jb2xUeXBlPXR9Z2V0IGZpZWxkKCl7cmV0dXJuIHRoaXMuX2ZpZWxkfXNldCBmaWVsZCh0KXsic3RyaW5nIj09dHlwZW9mIHQmJih0aGlzLl9maWVsZD10LHRoaXMuX3NvcnRCeXx8KHRoaXMuX3NvcnRCeT1uZXcgdVcodCkpKX1nZXQgc29ydEJ5KCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX3NvcnRCeX1zZXQgc29ydEJ5KHQpeyJzdHJpbmciPT10eXBlb2YgdD90aGlzLl9zb3J0Qnk9bmV3IHVXKHQpOnQ/dGhpcy5fc29ydEJ5PXQ6dGhpcy5maWVsZD90aGlzLl9zb3J0Qnk9bmV3IHVXKHRoaXMuZmllbGQpOmRlbGV0ZSB0aGlzLl9zb3J0Qnl9Z2V0IHNvcnRP''@;'; put 'put ''cmRlcigpe3JldHVybiB0aGlzLl9zb3J0T3JkZXJ9c2V0IHNvcnRPcmRlcih0KXtpZighKHR5cGVvZiB0PiJ1IikmJnRoaXMuX3NvcnRPcmRlciE9PXQpc3dpdGNoKHQpe2Nhc2UgRnAuQVNDOnRoaXMuc29ydCghMSk7YnJlYWs7Y2FzZSBGcC5ERVNDOnRoaXMuc29ydCghMCk7YnJlYWs7ZGVm''@;'; put 'put ''YXVsdDp0aGlzLl9zb3J0LmNsZWFyKCl9fXNldCB1cGRhdGVGaWx0ZXJWYWx1ZSh0KXt0aGlzLmZpbHRlcj90aGlzLmZpbHRlciBpbnN0YW5jZW9mIFhiPygoIXR8fCJzdHJpbmciIT10eXBlb2YgdCkmJih0PSIiKSx0IT09dGhpcy5maWx0ZXIudmFsdWUmJih0aGlzLmZpbHRlci52YWx1ZT10''@;'; put 'put ''KSk6dGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBLYiYmKCghdHx8ISh0IGluc3RhbmNlb2YgQXJyYXkpKSYmKHQ9W251bGwsbnVsbF0pLDI9PT10Lmxlbmd0aCYmKHRbMF0hPT10aGlzLmZpbHRlci52YWx1ZVswXXx8dFsxXSE9PXRoaXMuZmlsdGVyLnZhbHVlWzFdKSYmKHRoaXMuZmlsdGVyLnZh''@;'; put 'put ''bHVlPXQpKTp0aGlzLmluaXRGaWx0ZXJWYWx1ZT10fXNldCBwcm9qZWN0ZWRGaWx0ZXIodCl7dCYmKHRoaXMuZGVsZXRlRmlsdGVyKCksdGhpcy5jdXN0b21GaWx0ZXI9ITApfWdldCBzb3J0YWJsZSgpe3JldHVybiEhdGhpcy5fc29ydEJ5fWdldCBhcmlhU29ydCgpe3N3aXRjaCh0aGlzLl9z''@;'; put 'put ''b3J0T3JkZXIpe2Nhc2UgRnAuQVNDOnJldHVybiJhc2NlbmRpbmciO2Nhc2UgRnAuREVTQzpyZXR1cm4iZGVzY2VuZGluZyI7ZGVmYXVsdDpyZXR1cm4ibm9uZSJ9fWdldCBzb3J0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvcnREaXJlY3Rpb259Z2V0IGZpbHRlclZhbHVlKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZmlsdGVyIGluc3RhbmNlb2YgWGJ8fHRoaXMuZmlsdGVyIGluc3RhbmNlb2YgS2I/dGhpcy5maWx0ZXIudmFsdWU6bnVsbH1zZXQgZmlsdGVyVmFsdWUodCl7KHRoaXMuZmlsdGVyIGluc3RhbmNlb2YgWGJ8fHRoaXMuZmlsdGVyIGluc3RhbmNlb2YgS2IpJiYodGhpcy51cGRhdGVG''@;'; put 'put ''aWx0ZXJWYWx1ZT10LHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlci52YWx1ZSkpfWdldCBfdmlldygpe3JldHVybiB0aGlzLndyYXBwZWRJbmplY3Rvci5nZXQoYmFlLHRoaXMudmNyKS5jb2x1bW5WaWV3fW5nT25Jbml0KCl7dGhpcy53cmFwcGVkSW5qZWN0b3I9bmV3''@;'; put 'put ''IEt6KGJhZSx0aGlzLnZjcil9bmdPbkNoYW5nZXModCl7dC5jb2xUeXBlJiZ0LmNvbFR5cGUuY3VycmVudFZhbHVlJiZ0LmNvbFR5cGUuY3VycmVudFZhbHVlIT09dC5jb2xUeXBlLnByZXZpb3VzVmFsdWUmJiF0aGlzLmN1c3RvbUZpbHRlciYmIXRoaXMuZmlsdGVyJiZ0aGlzLmNvbFR5cGUm''@;'; put 'put ''JnRoaXMuZmllbGQmJnRoaXMuc2V0dXBEZWZhdWx0RmlsdGVyKHRoaXMuZmllbGQsdGhpcy5jb2xUeXBlKSx0LmZpZWxkJiZ0LmZpZWxkLmN1cnJlbnRWYWx1ZSYmdC5maWVsZC5jdXJyZW50VmFsdWUhPT10LmZpZWxkLnByZXZpb3VzVmFsdWUmJiF0aGlzLmN1c3RvbUZpbHRlciYmdGhpcy5j''@;'; put 'put ''b2xUeXBlJiZ0aGlzLnNldHVwRGVmYXVsdEZpbHRlcih0aGlzLmZpZWxkLHRoaXMuY29sVHlwZSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHQ9PnQudW5zdWJzY3JpYmUoKSl9c29ydCh0KXt0aGlzLnNvcnRhYmxlJiYodGhp''@;'; put 'put ''cy5fc29ydC50b2dnbGUodGhpcy5fc29ydEJ5LHQpLHRoaXMuX3NvcnRPcmRlcj10aGlzLl9zb3J0LnJldmVyc2U/RnAuREVTQzpGcC5BU0MsdGhpcy5fc29ydERpcmVjdGlvbj10aGlzLl9zb3J0T3JkZXI9PT1GcC5ERVNDPyJkb3duIjoidXAiLHRoaXMuc29ydE9yZGVyQ2hhbmdlLmVtaXQo''@;'; put 'put ''dGhpcy5fc29ydE9yZGVyKSl9bGlzdGVuRm9yRGV0YWlsUGFuZUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlQ2hhbmdlLnN1YnNjcmliZSh0PT57dGhpcy5zaG93U2VwYXJhdG9yIT09IXQmJih0aGlzLnNob3dTZXBhcmF0b3I9IXQpfSl9bGlzdGVuRm9yU29ydGlu''@;'; put 'put ''Z0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5fc29ydC5jaGFuZ2Uuc3Vic2NyaWJlKHQ9Pnt0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc29ydE9yZGVyIT09RnAuVU5TT1JURUQmJnQuY29tcGFyYXRvciE9PXRoaXMuX3NvcnRCeSYmKHRoaXMuX3NvcnRPcmRlcj1G''@;'; put 'put ''cC5VTlNPUlRFRCx0aGlzLnNvcnRPcmRlckNoYW5nZS5lbWl0KHRoaXMuX3NvcnRPcmRlciksdGhpcy5fc29ydERpcmVjdGlvbj1udWxsKX0pfXNldHVwRGVmYXVsdEZpbHRlcih0LHIpeyJudW1iZXIiPT09cj90aGlzLnNldEZpbHRlcihuZXcgS2IobmV3IGxXKHQpKSk6InN0cmluZyI9PT1y''@;'; put 'put ''JiZ0aGlzLnNldEZpbHRlcihuZXcgWGIobmV3IGNXKHQpKSksdGhpcy5maWx0ZXImJnRoaXMuaW5pdEZpbHRlclZhbHVlJiYodGhpcy51cGRhdGVGaWx0ZXJWYWx1ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZSxkZWxldGUgdGhpcy5pbml0RmlsdGVyVmFsdWUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShubyksemUoZFcpLHplKGw3KSx6ZShEcyksemUoZzQpLHplKFVsKSl9LG4uXHUwMjc1Y21wPVByKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4iXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24odCxyLGkpe2lmKDEmdCYm''@;'; put 'put ''RmEoaSxpVyw1KSwyJnQpe2xldCBvO2NpKG89dWkoKSkmJihyLnByb2plY3RlZEZpbHRlcj1vLmZpcnN0KX19LGhvc3RBdHRyczpbInJvbGUiLCJjb2x1bW5oZWFkZXIiXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezImdCYmKFJyKCJhcmlhLXNvcnQiLHIuYXJpYVNv''@;'; put 'put ''cnQpLHdyKCJkYXRhZ3JpZC1jb2x1bW4iLCEwKSl9LGlucHV0czp7ZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6WzAsImNsckZpbHRlclN0cmluZ1BsYWNlaG9sZGVyIiwiZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXIiXSxmaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlcjpbMCwiY2xyRmlsdGVyTnVt''@;'; put 'put ''YmVyTWF4UGxhY2Vob2xkZXIiLCJmaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlciJdLGZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyOlswLCJjbHJGaWx0ZXJOdW1iZXJNaW5QbGFjZWhvbGRlciIsImZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyIl0sY29sVHlwZTpbMCwiY2xyRGdDb2xUeXBl''@;'; put 'put ''IiwiY29sVHlwZSJdLGZpZWxkOlswLCJjbHJEZ0ZpZWxkIiwiZmllbGQiXSxzb3J0Qnk6WzAsImNsckRnU29ydEJ5Iiwic29ydEJ5Il0sc29ydE9yZGVyOlswLCJjbHJEZ1NvcnRPcmRlciIsInNvcnRPcmRlciJdLHVwZGF0ZUZpbHRlclZhbHVlOlswLCJjbHJGaWx0ZXJWYWx1ZSIsInVwZGF0''@;'; put 'put ''ZUZpbHRlclZhbHVlIl19LG91dHB1dHM6e3NvcnRPcmRlckNoYW5nZToiY2xyRGdTb3J0T3JkZXJDaGFuZ2UiLGZpbHRlclZhbHVlQ2hhbmdlOiJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W3pnKFtpN10pLEZvLGl1XSxuZ0NvbnRlbnRTZWxlY3RvcnM6''@;'; put 'put ''eTh0LGRlY2xzOjksdmFyczo1LGNvbnN0czpbWyJjb2x1bW5UaXRsZSIsIiJdLFsxLCJkYXRhZ3JpZC1jb2x1bW4tZmxleCJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLCJ0eXBlIiwiYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFszLCJjbHJGaWx0ZXJQbGFjZWhvbGRl''@;'; put 'put ''ciIsImNsckRnU3RyaW5nRmlsdGVyIiwiY2xyRmlsdGVyVmFsdWUiLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJGaWx0ZXJNYXhQbGFjZWhvbGRlciIsImNsckZpbHRlck1pblBsYWNlaG9sZGVyIiwiY2xyRGdOdW1lcmljRmlsdGVyIiwiY2xyRmlsdGVyVmFsdWUi''@;'; put 'put ''LCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiZGF0YWdyaWQtY29sdW1uLXRpdGxlIiwzLCJjbGljayJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0s''@;'; put 'put ''WyJzaGFwZSIsImFycm93IiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwiY2xhc3MiLCJzb3J0LWljb24iLDQsIm5nSWYiXSxbInNoYXBlIiwiYXJyb3ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsInNvcnQtaWNvbiJdLFszLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsImNsckZpbHRlclBsYWNlaG9s''@;'; put 'put ''ZGVyIiwiY2xyRGdTdHJpbmdGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSJdLFszLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsImNsckZpbHRlck1heFBsYWNlaG9sZGVyIiwiY2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSJdLFsxLCJk''@;'; put 'put ''YXRhZ3JpZC1jb2x1bW4tdGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24odCxyKXsxJnQmJihmbyhfOHQpLEooMCwiZGl2IiwxKSxZbigxLEM4dCwzLDIsImJ1dHRvbiIsMiksV3IoMiksWW4oMyxTOHQsMSwzLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMykoNCxFOHQsMSw0LCJjbHItZGctbnVt''@;'; put 'put ''ZXJpYy1maWx0ZXIiLDQpKDUsTTh0LDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxjZCkoNyx4OHQsMiwxLCJzcGFuIiw1KSg4LEE4dCwxLDAsImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIiw2KSx0ZSgpKSwyJnQmJihpZSgpLHJ0KCJuZ0lmIixyLnNvcnRhYmxlKSxpZSgyKSxydCgibmdJZiIs''@;'; put 'put ''ci5maWVsZCYmIXIuY3VzdG9tRmlsdGVyJiYic3RyaW5nIj09ci5jb2xUeXBlKSxpZSgpLHJ0KCJuZ0lmIixyLmZpZWxkJiYhci5jdXN0b21GaWx0ZXImJiJudW1iZXIiPT1yLmNvbFR5cGUpLGllKDMpLHJ0KCJuZ0lmIiwhci5zb3J0YWJsZSksaWUoKSxydCgibmdJZiIsci5zaG93U2VwYXJh''@;'; put 'put ''dG9yKSl9LGRlcGVuZGVuY2llczpbWXMsSWYsSnMsT01lLElNZSxTTV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksYzc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0LHIsaSl7dGhpcy5fZmlsdGVycz10LHRoaXMuX3NvcnQ9cix0aGlzLl9wYWdlPWksdGhp''@;'; put 'put ''cy5sb2FkaW5nPSExLHRoaXMuX3NtYXJ0PSExLHRoaXMuX2Rpc3BsYXllZD1bXSx0aGlzLl9jaGFuZ2U9bmV3IE1yLHRoaXMuX2FsbENoYW5nZXM9bmV3IE1yLHRoaXMudHJhY2tCeT1vPT5vfWdldCBzbWFydCgpe3JldHVybiB0aGlzLl9zbWFydH1nZXQgYWxsKCl7cmV0dXJuIHRoaXMuX2Fs''@;'; put 'put ''bH1zZXQgYWxsKHQpe3RoaXMuX2FsbD10LHRoaXMuZW1pdEFsbENoYW5nZXModCksdGhpcy5zbWFydD90aGlzLl9maWx0ZXJJdGVtcygpOih0aGlzLl9kaXNwbGF5ZWQ9dCx0aGlzLmVtaXRDaGFuZ2UoKSl9Z2V0IGRpc3BsYXllZCgpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWR9Z2V0IGNoYW5n''@;'; put 'put ''ZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGFsbENoYW5nZXMoKXtyZXR1cm4gdGhpcy5fYWxsQ2hhbmdlcy5hc09ic2VydmFibGUoKX1nZXQgdW5pbml0aWFsaXplZCgpe3JldHVybiF0aGlzLl9hbGx9ZGVzdHJveSgpe3RoaXMuX2ZpbHRlcnNTdWImJnRoaXMu''@;'; put 'put ''X2ZpbHRlcnNTdWIudW5zdWJzY3JpYmUoKSx0aGlzLl9zb3J0U3ViJiZ0aGlzLl9zb3J0U3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fcGFnZVN1YiYmdGhpcy5fcGFnZVN1Yi51bnN1YnNjcmliZSgpfXNtYXJ0ZW5Eb3duKCl7dGhpcy5fc21hcnQ9ITEsdGhpcy5kZXN0cm95KCl9c21hcnRlblVw''@;'; put 'put ''KCl7dGhpcy5fc21hcnQ9ITAsdGhpcy5fZmlsdGVyc1N1Yj10aGlzLl9maWx0ZXJzLmNoYW5nZS5zdWJzY3JpYmUoKCk9PnRoaXMuX2ZpbHRlckl0ZW1zKCkpLHRoaXMuX3NvcnRTdWI9dGhpcy5fc29ydC5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5fc29ydC5jb21wYXJhdG9yP3RoaXMu''@;'; put 'put ''X3NvcnRJdGVtcygpOnRoaXMuX2ZpbHRlckl0ZW1zKCl9KSx0aGlzLl9wYWdlU3ViPXRoaXMuX3BhZ2UuY2hhbmdlLnN1YnNjcmliZSgoKT0+dGhpcy5fY2hhbmdlUGFnZSgpKX1yZWZyZXNoKCl7dGhpcy5zbWFydCYmdGhpcy5fZmlsdGVySXRlbXMoKX1lbWl0Q2hhbmdlKCl7dGhpcy5fY2hh''@;'; put 'put ''bmdlLm5leHQodGhpcy5kaXNwbGF5ZWQpfWVtaXRBbGxDaGFuZ2VzKHQpe3RoaXMuX2FsbENoYW5nZXMubmV4dCh0KX1fZmlsdGVySXRlbXMoKXt0aGlzLnVuaW5pdGlhbGl6ZWR8fCh0aGlzLl9maWx0ZXJlZD10aGlzLl9maWx0ZXJzLmhhc0FjdGl2ZUZpbHRlcnMoKT90aGlzLl9hbGwuZmls''@;'; put 'put ''dGVyKHQ9PnRoaXMuX2ZpbHRlcnMuYWNjZXB0cyh0KSk6dGhpcy5fYWxsLnNsaWNlKCksdGhpcy5fcGFnZS50b3RhbEl0ZW1zPXRoaXMuX2ZpbHRlcmVkLmxlbmd0aCx0aGlzLl9zb3J0SXRlbXMoKSl9X3NvcnRJdGVtcygpe3RoaXMudW5pbml0aWFsaXplZHx8KHRoaXMuX3NvcnQuY29tcGFy''@;'; put 'put ''YXRvciYmdGhpcy5fZmlsdGVyZWQuc29ydCgodCxyKT0+dGhpcy5fc29ydC5jb21wYXJlKHQscikpLHRoaXMuX2NoYW5nZVBhZ2UoKSl9X2NoYW5nZVBhZ2UoKXt0aGlzLnVuaW5pdGlhbGl6ZWR8fHRoaXMuX3BhZ2UuYWN0aXZhdGVkJiYwPT09dGhpcy5fcGFnZS5zaXplfHwodGhpcy5fZGlz''@;'; put 'put ''cGxheWVkPXRoaXMuX3BhZ2Uuc2l6ZT4wP3RoaXMuX2ZpbHRlcmVkLnNsaWNlKHRoaXMuX3BhZ2UuZmlyc3RJdGVtLHRoaXMuX3BhZ2UubGFzdEl0ZW0rMSk6dGhpcy5fZmlsdGVyZWQsdGhpcy5lbWl0Q2hhbmdlKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5l''@;'; put 'put ''dyh0fHxuKShvcihsNyksb3IoZFcpLG9yKEl2KSl9LG4uXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCkseE09KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0LHIsaSxvKXt0aGlzLnRlbXBsYXRlPXQsdGhpcy5kaWZmZXJzPXIsdGhpcy5pdGVtcz1p''@;'; put 'put ''LHRoaXMuZGlmZmVyPW51bGwsdGhpcy5zdWJzY3JpcHRpb25zPVtdLGkuc21hcnRlblVwKCksdGhpcy5pdGVyYWJsZVByb3h5PW5ldyBSZihvLHQsciksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaS5jaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLml0ZXJhYmxlUHJveHkubmdGb3JPZj1hLHRo''@;'; put 'put ''aXMuaXRlcmFibGVQcm94eS5uZ0RvQ2hlY2soKX0pKX1zZXQgcmF3SXRlbXModCl7dGhpcy5fcmF3SXRlbXM9dHx8W119c2V0IHRyYWNrQnkodCl7dGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yVHJhY2tCeT10fXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKHQscil7cmV0dXJuITB9bmdE''@;'; put 'put ''b0NoZWNrKCl7dGhpcy5kaWZmZXJ8fCh0aGlzLmRpZmZlcj10aGlzLmRpZmZlcnMuZmluZCh0aGlzLl9yYXdJdGVtcykuY3JlYXRlKHRoaXMuaXRlcmFibGVQcm94eS5uZ0ZvclRyYWNrQnkpKSx0aGlzLmRpZmZlciYmdGhpcy5kaWZmZXIuZGlmZih0aGlzLl9yYXdJdGVtcykmJih0aGlzLml0''@;'; put 'put ''ZW1zLmFsbD10aGlzLl9yYXdJdGVtcyl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCh0PT50LnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShGYyksemUoYXYpLHplKGM3KSx6ZShEcykpfSxu''@;'; put 'put ''Llx1MDI3NWRpcj0kcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjbHJEZ0l0ZW1zIiwiIiwiY2xyRGdJdGVtc09mIiwiIl1dLGlucHV0czp7cmF3SXRlbXM6WzAsImNsckRnSXRlbXNPZiIsInJhd0l0ZW1zIl0sdHJhY2tCeTpbMCwiY2xyRGdJdGVtc1RyYWNrQnkiLCJ0cmFja0J5Il19LHN0''@;'; put 'put ''YW5kYWxvbmU6ITF9KSxufSkoKSxTYWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0KXt0aGlzLml0ZW1zPXR9Z2V0IGVtcHR5RGF0YWdyaWQoKXtyZXR1cm4hKHRoaXMuaXRlbXMubG9hZGluZ3x8dGhpcy5pdGVtcy5kaXNwbGF5ZWQmJjAhPT10aGlzLml0ZW1zLmRpc3BsYXllZC5sZW5n''@;'; put 'put ''dGgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShjNykpfSxuLlx1MDI3NWNtcD1Qcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItZGctcGxhY2Vob2xkZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsyJnQmJndy''@;'; put 'put ''KCJkYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250YWluZXIiLCEwKX0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6ZXMsZGVjbHM6NCx2YXJzOjQsY29uc3RzOltbMSwiZGF0YWdyaWQtcGxhY2Vob2xkZXIiXSxbImNsYXNzIiwiZGF0YWdyaWQtcGxhY2Vob2xkZXItaW1hZ2UiLDQs''@;'; put 'put ''Im5nSWYiXSxbMSwiZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGVudCJdLFs0LCJuZ0lmIl0sWzEsImRhdGFncmlkLXBsYWNlaG9sZGVyLWltYWdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHQscil7MSZ0JiYoZm8oKSxKKDAsImRpdiIsMCksWW4oMSxrOHQsMSwwLCJkaXYiLDEpLEooMiwic3Bh''@;'; put 'put ''biIsMiksWW4oMyxSOHQsMSwwLCJuZy1jb250ZW50IiwzKSx0ZSgpKCkpLDImdCYmKHdyKCJkYXRhZ3JpZC1lbXB0eSIsci5lbXB0eURhdGFncmlkKSxpZSgpLHJ0KCJuZ0lmIixyLmVtcHR5RGF0YWdyaWQpLGllKDIpLHJ0KCJuZ0lmIixyLmVtcHR5RGF0YWdyaWQpKX0sZGVwZW5kZW5jaWVz''@;'; put 'put ''OltZc10sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksRWFlPSgoKT0+e2NsYXNzIG57bmdBZnRlclZpZXdJbml0KCl7dGhpcy5jZWxsVmlldz10aGlzLnRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsKX1uZ09uRGVzdHJveSgpe3RoaXMuY2VsbFZpZXcuZGVzdHJveSgpfX1yZXR1''@;'; put 'put ''cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siZGctd3JhcHBlZC1jZWxsIl1dLHZpZXdRdWVyeTpmdW5jdGlvbih0LHIpe2lmKDEmdCYmV28oSTh0LDUpLDImdCl7bGV0IGk7Y2koaT11aSgpKSYm''@;'; put 'put ''KHIudGVtcGxhdGVSZWY9aS5maXJzdCl9fSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9yczplcyxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY2VsbFBvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpezEmdCYmKGZvKCksWW4oMCxEOHQsMSwwLCJuZy10ZW1wbGF0ZSIs''@;'; put 'put ''bnVsbCwwLGNkKSl9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHY0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCl7dGhpcy52Y3I9dH1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KEVhZSx0aGlzLnZjcikuY2VsbFZpZXd9bmdPbkluaXQoKXt0aGlzLndy''@;'; put 'put ''YXBwZWRJbmplY3Rvcj1uZXcgS3ooRWFlLHRoaXMudmNyKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoRHMpKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWRnLWNlbGwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rp''@;'; put 'put ''b24odCxyLGkpe2lmKDEmdCYmRmEoaSxxeiw0KSwyJnQpe2xldCBvO2NpKG89dWkoKSkmJihyLnNpZ25wb3N0PW8pfX0saG9zdEF0dHJzOlsicm9sZSIsImdyaWRjZWxsIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsyJnQmJndyKCJkYXRhZ3JpZC1jZWxsIiwhMCko''@;'; put 'put ''ImRhdGFncmlkLXNpZ25wb3N0LXRyaWdnZXIiLHIuc2lnbnBvc3QubGVuZ3RoPjApfSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9yczplcyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpezEmdCYmKGZvKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxufSko''@;'; put 'put ''KSxOTWU9MCxXRD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgTmZ7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuZXhwYW5kYWJsZUlkPSIiLHRoaXMuX3JlcGxhY2U9bmV3ICRpKCExKSx0aGlzLl9hbmltYXRlPW5ldyBNcixOTWUrKyx0aGlzLmV4cGFuZGFibGVJZD0iY2xyLWRnLWV4cGFuZGFi''@;'; put 'put ''bGUtcm93LSIrTk1lfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQodCl7KHQ9ISF0KSE9PXRoaXMuX2V4cGFuZGVkJiYodGhpcy5fZXhwYW5kZWQ9dCx0aGlzLl9hbmltYXRlLm5leHQoKSx0aGlzLl9leHBhbmRDaGFuZ2UubmV4dCh0KSl9Z2V0IHJl''@;'; put 'put ''cGxhY2UoKXtyZXR1cm4gdGhpcy5fcmVwbGFjZS5hc09ic2VydmFibGUoKX1nZXQgYW5pbWF0ZSgpe3JldHVybiB0aGlzLl9hbmltYXRlLmFzT2JzZXJ2YWJsZSgpfWxvYWRpbmdTdGF0ZUNoYW5nZSh0KXtzdXBlci5sb2FkaW5nU3RhdGVDaGFuZ2UodCksdCE9PU9mLkxPQURJTkcmJnRoaXMu''@;'; put 'put ''X2FuaW1hdGUubmV4dCgpfXNldFJlcGxhY2UodCl7dGhpcy5fcmVwbGFjZS5uZXh0KHQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTt2YXIgQU09ZnVu''@;'; put 'put ''Y3Rpb24obil7cmV0dXJuIG5bbi5ESVNQTEFZPTBdPSJESVNQTEFZIixuW24uQ0FMQ1VMQVRFPTFdPSJDQUxDVUxBVEUiLG59KEFNfHx7fSksQmM9ZnVuY3Rpb24obil7cmV0dXJuIG5bbi5Ob25lPTBdPSJOb25lIixuW24uU2luZ2xlPTFdPSJTaW5nbGUiLG5bbi5NdWx0aT0yXT0iTXVsdGki''@;'; put 'put ''LG59KEJjfHx7fSk7bGV0IE1hZT0oKCk9PntjbGFzcyBue25nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMucm93Vmlldz10aGlzLnRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsKX1uZ09uRGVzdHJveSgpe3RoaXMucm93Vmlldy5kZXN0cm95KCl9fXJldHVybiBuLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NWNtcD1Qcih7dHlwZTpuLHNlbGVjdG9yczpbWyJkZy13cmFwcGVkLXJvdyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24odCxyKXtpZigxJnQmJldvKEw4dCw1KSwyJnQpe2xldCBpO2NpKGk9dWkoKSkmJihyLnRlbXBsYXRlUmVmPWku''@;'; put 'put ''Zmlyc3QpfX0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6ZXMsZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbInJvd1BvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpezEmdCYmKGZvKCksWW4oMCxPOHQsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLGNkKSl9LGVuY2Fw''@;'; put 'put ''c3VsYXRpb246Mn0pLG59KSgpLGh5dD0wLGtNPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxyKXt0aGlzLl9pdGVtcz10LHRoaXMucHJlc2VydmVTZWxlY3Rpb249ITEsdGhpcy5zaGlmdFByZXNzZWQ9ITEsdGhpcy5yb3dTZWxlY3Rpb25Nb2RlPSExLHRoaXMucHJldlNlbGVjdGlvblJl''@;'; put 'put ''ZnM9W10sdGhpcy5sb2NrZWRSZWZzPVtdLHRoaXMudmFsdWVDb2xsZWN0b3I9bmV3IE1yLHRoaXMuX3NlbGVjdGlvblR5cGU9QmMuTm9uZSx0aGlzLl9jaGFuZ2U9bmV3IE1yLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmlkPSJjbHItZGctc2VsZWN0aW9uIitoeXQrKyx0aGlzLnN1YnNj''@;'; put 'put ''cmlwdGlvbnMucHVzaChyLmNoYW5nZS5zdWJzY3JpYmUoKCk9PnshdGhpcy5fc2VsZWN0YWJsZXx8dGhpcy5wcmVzZXJ2ZVNlbGVjdGlvbnx8dGhpcy5jbGVhclNlbGVjdGlvbigpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHQuYWxsQ2hhbmdlcy5zdWJzY3JpYmUoaT0+e2NvbnN0IG89''@;'; put 'put ''W107c3dpdGNoKHRoaXMuc2VsZWN0aW9uVHlwZSl7Y2FzZSBCYy5Ob25lOmJyZWFrO2Nhc2UgQmMuU2luZ2xlOntsZXQgYSxsPSExO3RoaXMuY3VycmVudFNpbmdsZSYmIXRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZiYmKHRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZj10LnRyYWNrQnko''@;'; put 'put ''dGhpcy5jdXJyZW50U2luZ2xlKSksaS5mb3JFYWNoKHU9Pntjb25zdCBnPXQudHJhY2tCeSh1KTt0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9PT1nJiYoYT11LGw9ITApLHRoaXMubG9ja2VkUmVmcy5pbmRleE9mKGcpPi0xJiZvLnB1c2goZyl9KSx0LnNtYXJ0JiYhYSYmKGw9ITApLHNl''@;'; put 'put ''dFRpbWVvdXQoKCk9PntsJiYodGhpcy5jdXJyZW50U2luZ2xlPWEpfSwwKTticmVha31jYXNlIEJjLk11bHRpOntsZXQgYT10aGlzLmN1cnJlbnQuc2xpY2UoKSxsPSExO3RoaXMuY3VycmVudC5sZW5ndGg+MCYmdGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5sZW5ndGghPT10aGlzLmN1cnJlbnQu''@;'; put 'put ''bGVuZ3RoJiYodGhpcy5wcmV2U2VsZWN0aW9uUmVmcz1bXSx0aGlzLmN1cnJlbnQuZm9yRWFjaCh1PT57dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5wdXNoKHQudHJhY2tCeSh1KSl9KSksaS5mb3JFYWNoKHU9Pntjb25zdCBnPXQudHJhY2tCeSh1KTt0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihn''@;'; put 'put ''KT4tMSYmby5wdXNoKGcpfSksYS5sZW5ndGg+MCYmKGkuZm9yRWFjaCh1PT57Y29uc3QgZz10LnRyYWNrQnkodSksRT10aGlzLnByZXZTZWxlY3Rpb25SZWZzLmluZGV4T2YoZyk7RT4tMSYmKGFbRV09dSxsPSEwKX0pLHQuc21hcnQmJihhPWEuZmlsdGVyKHU9PmkuaW5kZXhPZih1KT4tMSks''@;'; put 'put ''dGhpcy5jdXJyZW50Lmxlbmd0aCE9PWEubGVuZ3RoJiYobD0hMCkpLHNldFRpbWVvdXQoKCk9PntsJiYodGhpcy5jdXJyZW50PWEpfSwwKSk7YnJlYWt9fXRoaXMubG9ja2VkUmVmcz1vfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudmFsdWVDb2xsZWN0b3IucGlwZShOYigwKSku''@;'; put 'put ''c3Vic2NyaWJlKCgpPT50aGlzLmVtaXRDaGFuZ2UoKSkpfWdldCBzZWxlY3Rpb25UeXBlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGV9c2V0IHNlbGVjdGlvblR5cGUodCl7dCE9PXRoaXMuc2VsZWN0aW9uVHlwZSYmKHRoaXMuX3NlbGVjdGlvblR5cGU9dCx0PT09QmMuTm9uZT9kZWxl''@;'; put 'put ''dGUgdGhpcy5jdXJyZW50OnRoaXMudXBkYXRlQ3VycmVudChbXSwhMSkpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQodCl7dGhpcy51cGRhdGVDdXJyZW50KHQsITApfWdldCBjdXJyZW50U2luZ2xlKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRTaW5nbGV9''@;'; put 'put ''c2V0IGN1cnJlbnRTaW5nbGUodCl7dCE9PXRoaXMuX2N1cnJlbnRTaW5nbGUmJih0aGlzLl9jdXJyZW50U2luZ2xlPXQsdCYmKHRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZj10aGlzLl9pdGVtcy50cmFja0J5KHQpKSx0aGlzLmVtaXRDaGFuZ2UoKSl9Z2V0IGNoYW5nZSgpe3JldHVybiB0''@;'; put 'put ''aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IF9zZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGU9PT1CYy5NdWx0aXx8dGhpcy5fc2VsZWN0aW9uVHlwZT09PUJjLlNpbmdsZX1jbGVhclNlbGVjdGlvbigpe3RoaXMuX2N1cnJlbnQ9W10sdGhpcy5wcmV2U2VsZWN0''@;'; put 'put ''aW9uUmVmcz1bXSx0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9bnVsbCx0aGlzLl9jdXJyZW50U2luZ2xlPW51bGwsdGhpcy5lbWl0Q2hhbmdlKCl9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHQ9PnQudW5zdWJzY3JpYmUoKSl9dXBkYXRlQ3VycmVudCh0LHIpe3Ro''@;'; put 'put ''aXMuX2N1cnJlbnQ9dCxyJiZ0aGlzLnZhbHVlQ29sbGVjdG9yLm5leHQodCl9aXNTZWxlY3RlZCh0KXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlwZT09PUJjLlNpbmdsZT90aGlzLmN1cnJlbnRTaW5nbGU9PT10OnRoaXMuX3NlbGVjdGlvblR5cGU9PT1CYy5NdWx0aSYmdGhpcy5jdXJyZW50''@;'; put 'put ''LmluZGV4T2YodCk+PTB9c2V0U2VsZWN0ZWQodCxyKXtjb25zdCBpPXRoaXMuY3VycmVudD90aGlzLmN1cnJlbnQuaW5kZXhPZih0KTotMTtzd2l0Y2godGhpcy5fc2VsZWN0aW9uVHlwZSl7Y2FzZSBCYy5Ob25lOmNhc2UgQmMuU2luZ2xlOmJyZWFrO2Nhc2UgQmMuTXVsdGk6aT49MCYmIXI/''@;'; put 'put ''dGhpcy5kZXNlbGVjdEl0ZW0oaSk6aTwwJiZyJiZ0aGlzLnNlbGVjdEl0ZW0odCl9fWlzQWxsU2VsZWN0ZWQoKXtpZih0aGlzLl9zZWxlY3Rpb25UeXBlIT09QmMuTXVsdGl8fCF0aGlzLl9pdGVtcy5kaXNwbGF5ZWQpcmV0dXJuITE7Y29uc3QgdD10aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZmls''@;'; put 'put ''dGVyKG89PiExPT09dGhpcy5pc0xvY2tlZChvKSk7cmV0dXJuISh0Lmxlbmd0aDwxKSYmdC5maWx0ZXIobz0+dGhpcy5jdXJyZW50LmluZGV4T2Yobyk+LTEpLmxlbmd0aD09PXQubGVuZ3RofWxvY2tJdGVtKHQscil7aWYodGhpcy5jYW5JdEJlTG9ja2VkKCkpe2NvbnN0IGk9dGhpcy5faXRl''@;'; put 'put ''bXMudHJhY2tCeSh0KTshMD09PXI/dGhpcy5sb2NrZWRSZWZzLnB1c2goaSk6dGhpcy5sb2NrZWRSZWZzPXRoaXMubG9ja2VkUmVmcy5maWx0ZXIobz0+aSE9PW8pfX1pc0xvY2tlZCh0KXtpZih0aGlzLmNhbkl0QmVMb2NrZWQoKSl7Y29uc3Qgcj10aGlzLl9pdGVtcy50cmFja0J5KHQpO3Jl''@;'; put 'put ''dHVybiB0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihyKT4tMX1yZXR1cm4hMX10b2dnbGVBbGwoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09QmMuTm9uZXx8dGhpcy5fc2VsZWN0aW9uVHlwZT09PUJjLlNpbmdsZXx8KHRoaXMuaXNBbGxTZWxlY3RlZCgpP3RoaXMuX2l0ZW1zLmRpc3BsYXllZC5m''@;'; put 'put ''b3JFYWNoKHQ9Pntjb25zdCByPXRoaXMuY3VycmVudC5pbmRleE9mKHQpO3I+LTEmJiExPT09dGhpcy5pc0xvY2tlZCh0KSYmdGhpcy5kZXNlbGVjdEl0ZW0ocil9KTp0aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZm9yRWFjaCh0PT57dGhpcy5jdXJyZW50LmluZGV4T2YodCk8MCYmITE9PT10aGlz''@;'; put 'put ''LmlzTG9ja2VkKHQpJiZ0aGlzLnNlbGVjdEl0ZW0odCl9KSl9c2VsZWN0SXRlbSh0KXt0aGlzLmN1cnJlbnQ9dGhpcy5jdXJyZW50LmNvbmNhdCh0KSx0aGlzLnByZXZTZWxlY3Rpb25SZWZzLnB1c2godGhpcy5faXRlbXMudHJhY2tCeSh0KSl9ZGVzZWxlY3RJdGVtKHQpe2lmKHRoaXMuY3Vy''@;'; put 'put ''cmVudD10aGlzLmN1cnJlbnQuc2xpY2UoMCx0KS5jb25jYXQodGhpcy5jdXJyZW50LnNsaWNlKHQrMSkpLHQ8dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5sZW5ndGgpe2NvbnN0IHI9dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5zcGxpY2UodCwxKTt0aGlzLmxvY2tlZFJlZnM9dGhpcy5sb2NrZWRS''@;'; put 'put ''ZWZzLmZpbHRlcihpPT5pIT09clswXSl9fWNhbkl0QmVMb2NrZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlwZSE9PUJjLk5vbmV9ZW1pdENoYW5nZSgpe3RoaXMuX3NlbGVjdGlvblR5cGU9PT1CYy5TaW5nbGU/dGhpcy5fY2hhbmdlLm5leHQodGhpcy5jdXJyZW50U2luZ2xlKTp0aGlz''@;'; put 'put ''Ll9zZWxlY3Rpb25UeXBlPT09QmMuTXVsdGkmJnRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKG9yKGM3KSxvcihsNykpfSxuLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3''@;'; put 'put ''NWZhY30pLG59KSgpLFRhZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQpe3RoaXMuX3ZpZXc9bmV3ICRpKEFNLkRJU1BMQVkpLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0LmZpbHRlclJlbmRlclN0ZXBzKG00LkNBTENVTEFURV9NT0RFX09OKS5z''@;'; put 'put ''dWJzY3JpYmUoKCk9PnRoaXMuX3ZpZXcubmV4dChBTS5DQUxDVUxBVEUpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godC5maWx0ZXJSZW5kZXJTdGVwcyhtNC5DQUxDVUxBVEVfTU9ERV9PRkYpLnN1YnNjcmliZSgoKT0+dGhpcy5fdmlldy5uZXh0KEFNLkRJU1BMQVkpKSl9Z2V0IHZpZXco''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fdmlldy5hc09ic2VydmFibGUoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHQ9PnQudW5zdWJzY3JpYmUoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKG9yKGV3KSl9LG4uXHUwMjc1cHJv''@;'; put 'put ''dj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCkseGFlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCl7dGhpcy5zZWxlY3Rpb249dH1vblNlbGVjdGlvbkNlbGxDbGljayh0KXt0aGlzLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlfHwiTEFCRUwiIT09dC50YXJn''@;'; put 'put ''ZXQudGFnTmFtZSYmIklOUFVUIiE9PXQudGFyZ2V0LnRhZ05hbWUmJnQudGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoImlucHV0Iik/LmNsaWNrKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKGtNKSl9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2Vs''@;'; put 'put ''ZWN0b3JzOltbIiIsOCwiZGF0YWdyaWQtc2VsZWN0Il1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezEmdCYmd3QoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gci5vblNlbGVjdGlvbkNlbGxDbGljayhvKX0pfSxzdGFuZGFsb25lOiExfSksbn0pKCksRzU9KCgpPT57Y2xhc3Mgbntj''@;'; put 'put ''b25zdHJ1Y3Rvcih0LHIsaSl7dGhpcy5lbD10LHRoaXMucmVuZGVyZXI9cix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaS5maWx0ZXJSZW5kZXJTdGVwcyhtNC5DTEVBUl9XSURUSFMpLnN1YnNjcmliZSgoKT0+dGhpcy5jbGVhcldpZHRoKCkpKX1uZ09u''@;'; put 'put ''RGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHQ9PnQudW5zdWJzY3JpYmUoKSksdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXJlc2V0U3RhdGUodCl7dGhpcy5zZXRXaWR0aCh0KSx0aGlzLnNldEhpZGRlbih0''@;'; put 'put ''KX1zZXRXaWR0aCh0KXt0LnN0cmljdFdpZHRoP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LFRNKTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxUTSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2''@;'; put 'put ''ZUVsZW1lbnQsIndpZHRoIix0LndpZHRoKyJweCIpfXNldEhpZGRlbih0KXt0LmhpZGRlbj90aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCx6RCk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsekQpfWNsZWFyV2lkdGgo''@;'; put 'put ''KXt0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxUTSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixudWxsKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUo''@;'; put 'put ''bm8pLHplKE50KSx6ZShldykpfSxuLlx1MDI3NWRpcj0kcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItZGctY2VsbCJdXSxzdGFuZGFsb25lOiExfSksbn0pKCksaFc9MCxMdj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscixpLG8sYSxsLHUsZyxFLE8sWixlZSl7dGhpcy5zZWxlY3Rp''@;'; put 'put ''b249dCx0aGlzLnJvd0FjdGlvblNlcnZpY2U9cix0aGlzLmdsb2JhbEV4cGFuZGFibGU9aSx0aGlzLmV4cGFuZD1vLHRoaXMuZGV0YWlsU2VydmljZT1hLHRoaXMuZGlzcGxheU1vZGU9bCx0aGlzLnZjcj11LHRoaXMuY29tbW9uU3RyaW5ncz1PLHRoaXMuaXRlbXM9Wix0aGlzLmRvY3VtZW50''@;'; put 'put ''PWVlLHRoaXMuc2VsZWN0ZWRDaGFuZ2VkPW5ldyBLcighMSksdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgS3IoITEpLHRoaXMuZGV0YWlsRGlzYWJsZWQ9ITEsdGhpcy5kZXRhaWxIaWRkZW49ITEsdGhpcy5za2VsZXRvbkxvYWRpbmc9ITEsdGhpcy5kaXNwbGF5Q2VsbHM9ITEsdGhpcy5leHBh''@;'; put 'put ''bmRBbmltYXRpb25UcmlnZ2VyPSExLHRoaXMuU0VMRUNUSU9OX1RZUEU9QmMsdGhpcy5pdGVtQ2hhbmdlcz1uZXcgZEQoMSksdGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fZGV0YWlsT3BlbkxhYmVsPSIiLHRoaXMuX2RldGFpbENsb3NlTGFiZWw9IiIsdGhpcy5fcm93U2VsZWN0aW9uTGFiZWw9''@;'; put 'put ''IiIsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3NlbGVjdGFibGU9ITAsaFcrKyx0aGlzLmlkPSJjbHItZGctcm93IitoVyx0aGlzLnJhZGlvSWQ9ImNsci1kZy1yb3ctcmQiK2hXLHRoaXMuY2hlY2tib3hJZD0iY2xyLWRnLXJvdy1jYiIraFcsdGhpcy5leHBhbmRhYmxlSWQ9by5leHBh''@;'; put 'put ''bmRhYmxlSWQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goX2Ioby5yZXBsYWNlLG8uZXhwYW5kQ2hhbmdlKS5zdWJzY3JpYmUoKFt2ZSxNZV0pPT57dmUmJk1lPyh0aGlzLnJlcGxhY2VkPSEwLGcuYWRkQ2xhc3MoRS5uYXRpdmVFbGVtZW50LCJkYXRhZ3JpZC1yb3ctcmVwbGFjZWQiKSk6KHRo''@;'; put 'put ''aXMucmVwbGFjZWQ9ITEsZy5yZW1vdmVDbGFzcyhFLm5hdGl2ZUVsZW1lbnQsImRhdGFncmlkLXJvdy1yZXBsYWNlZCIpKX0pKX1nZXQgaXRlbSgpe3JldHVybiB0aGlzLl9pdGVtfXNldCBpdGVtKHQpe3RoaXMuX2l0ZW09dCx0aGlzLml0ZW1DaGFuZ2VzLm5leHQodCksdGhpcy5jbHJEZ1Nl''@;'; put 'put ''bGVjdGFibGU9dGhpcy5fc2VsZWN0YWJsZX1nZXQgY2xyRGdTZWxlY3RhYmxlKCl7cmV0dXJuIXRoaXMuc2VsZWN0aW9uLmlzTG9ja2VkKHRoaXMuaXRlbSl9c2V0IGNsckRnU2VsZWN0YWJsZSh0KXt0aGlzLml0ZW0mJnRoaXMuc2VsZWN0aW9uLmxvY2tJdGVtKHRoaXMuaXRlbSwiZmFsc2Ui''@;'; put 'put ''PT09dHx8ITE9PT10KSx0aGlzLl9zZWxlY3RhYmxlPXR9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1CYy5Ob25lP3RoaXMuX3NlbGVjdGVkOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQodGhpcy5pdGVtKX1zZXQgc2VsZWN0ZWQodCl7dGhp''@;'; put 'put ''cy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PUJjLk5vbmU/dGhpcy5fc2VsZWN0ZWQ9dDoodCYmdGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PUJjLk11bHRpP3RoaXMucmFuZ2VTZWxlY3QoKTp0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0PW51bGwsdGhpcy5zZWxlY3Rpb24uc2V0''@;'; put 'put ''U2VsZWN0ZWQodGhpcy5pdGVtLHQpKX1nZXQgZXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmQuZXhwYW5kZWR9c2V0IGV4cGFuZGVkKHQpe3RoaXMuZXhwYW5kLmV4cGFuZGVkPXR9Z2V0IGNsckRnRGV0YWlsT3BlbkxhYmVsKCl7cmV0dXJuIHRoaXMuX2RldGFpbE9wZW5MYWJlbD90aGlz''@;'; put 'put ''Ll9kZXRhaWxPcGVuTGFiZWw6dGhpcy5jb21tb25TdHJpbmdzLmtleXMub3Blbn1zZXQgY2xyRGdEZXRhaWxPcGVuTGFiZWwodCl7dGhpcy5fZGV0YWlsT3BlbkxhYmVsPXR9Z2V0IGNsckRnRGV0YWlsQ2xvc2VMYWJlbCgpe3JldHVybiB0aGlzLl9kZXRhaWxDbG9zZUxhYmVsP3RoaXMuX2Rl''@;'; put 'put ''dGFpbENsb3NlTGFiZWw6dGhpcy5jb21tb25TdHJpbmdzLmtleXMuY2xvc2V9c2V0IGNsckRnRGV0YWlsQ2xvc2VMYWJlbCh0KXt0aGlzLl9kZXRhaWxDbG9zZUxhYmVsPXR9Z2V0IGNsckRnUm93U2VsZWN0aW9uTGFiZWwoKXtyZXR1cm4gdGhpcy5fcm93U2VsZWN0aW9uTGFiZWw/dGhpcy5f''@;'; put 'put ''cm93U2VsZWN0aW9uTGFiZWw6dGhpcy5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0fXNldCBjbHJEZ1Jvd1NlbGVjdGlvbkxhYmVsKHQpe3RoaXMuX3Jvd1NlbGVjdGlvbkxhYmVsPXR9Z2V0IF92aWV3KCl7cmV0dXJuIHRoaXMud3JhcHBlZEluamVjdG9yLmdldChNYWUsdGhpcy52Y3IpLnJv''@;'; put 'put ''d1ZpZXd9bmdPbkluaXQoKXt0aGlzLndyYXBwZWRJbmplY3Rvcj1uZXcgS3ooTWFlLHRoaXMudmNyKSx0aGlzLnNlbGVjdGlvbi5sb2NrSXRlbSh0aGlzLml0ZW0sITE9PT10aGlzLmNsckRnU2VsZWN0YWJsZSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5kZ0NlbGxzLmNoYW5nZXMuc3Vi''@;'; put 'put ''c2NyaWJlKCgpPT57dGhpcy5kZ0NlbGxzLmZvckVhY2godD0+e3QuX3ZpZXcuZGVzdHJveWVkfHx0aGlzLl9zY3JvbGxhYmxlQ2VsbHMuaW5zZXJ0KHQuX3ZpZXcpfSl9KX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmRpc3BsYXlNb2RlLnZpZXcuc3Vi''@;'; put 'put ''c2NyaWJlKHQ9Pntmb3IobGV0IHI9dGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmxlbmd0aDtyPjA7ci0tKXRoaXMuX3Njcm9sbGFibGVDZWxscy5kZXRhY2goKTtmb3IobGV0IHI9dGhpcy5fY2FsY3VsYXRlZENlbGxzLmxlbmd0aDtyPjA7ci0tKXRoaXMuX2NhbGN1bGF0ZWRDZWxscy5kZXRhY2go''@;'; put 'put ''KTt0PT09QU0uQ0FMQ1VMQVRFPyh0aGlzLmRpc3BsYXlDZWxscz0hMSx0aGlzLmRnQ2VsbHMuZm9yRWFjaChyPT57ci5fdmlldy5kZXN0cm95ZWR8fHRoaXMuX2NhbGN1bGF0ZWRDZWxscy5pbnNlcnQoci5fdmlldyl9KSk6KHRoaXMuZGlzcGxheUNlbGxzPSEwLHRoaXMuZGdDZWxscy5mb3JF''@;'; put 'put ''YWNoKHI9PntyLl92aWV3LmRlc3Ryb3llZHx8dGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmluc2VydChyLl92aWV3KX0pKX0pLHRoaXMuZXhwYW5kLmFuaW1hdGUuc3Vic2NyaWJlKCgpPT57dGhpcy5leHBhbmRBbmltYXRpb25UcmlnZ2VyPSF0aGlzLmV4cGFuZEFuaW1hdGlvblRyaWdnZXJ9KSl9''@;'; put 'put ''bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCh0PT50LnVuc3Vic2NyaWJlKCkpfXRvZ2dsZSh0PSF0aGlzLnNlbGVjdGVkKXt0IT09dGhpcy5zZWxlY3RlZCYmKHRoaXMuc2VsZWN0ZWQ9dCx0aGlzLnNlbGVjdGVkQ2hhbmdlZC5lbWl0KHQpKX10b2dnbGVFeHBhbmQo''@;'; put 'put ''KXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlJiYodGhpcy5leHBhbmRBbmltYXRpb24udXBkYXRlU3RhcnRIZWlnaHQoKSx0aGlzLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkLHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLmV4cGFuZGVkKSl9Y2xlYXJSYW5nZXModCl7dC5zaGlmdEtleSYm''@;'; put 'put ''KHRoaXMuZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCksLTEhPT13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94IikmJih0LnByZXZlbnREZWZhdWx0KCksdGhpcy50b2dnbGUoITApKSl9c2VsZWN0Um93KHQ9IXRoaXMuc2VsZWN0ZWQs''@;'; put 'put ''cil7IkxBQkVMIiE9PXIudGFyZ2V0LnRhZ05hbWUmJih0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09dGhpcy5TRUxFQ1RJT05fVFlQRS5TaW5nbGU/dGhpcy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT10aGlzLml0ZW06dGhpcy50b2dnbGUodCkpfXJhbmdlU2VsZWN0KCl7Y29uc3Qg''@;'; put 'put ''dD10aGlzLml0ZW1zLmRpc3BsYXllZDtpZighdClyZXR1cm47Y29uc3Qgcj10LmluZGV4T2YodGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCk7aWYodGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCYmdGhpcy5zZWxlY3Rpb24uY3VycmVudC5pbmNsdWRlcyh0aGlzLnNlbGVjdGlvbi5yYW5nZVN0''@;'; put 'put ''YXJ0KSYmdGhpcy5zZWxlY3Rpb24uc2hpZnRQcmVzc2VkJiYtMSE9PXIpe2NvbnN0IGk9dC5pbmRleE9mKHRoaXMuaXRlbSksbz1uZXcgU2V0KHRoaXMuc2VsZWN0aW9uLmN1cnJlbnQuY29uY2F0KHQuc2xpY2UoTWF0aC5taW4ocixpKSxNYXRoLm1heChyLGkpKzEpKSk7dGhpcy5zZWxlY3Rp''@;'; put 'put ''b24uY2xlYXJTZWxlY3Rpb24oKSx0aGlzLnNlbGVjdGlvbi5jdXJyZW50LnB1c2goLi4ubyl9ZWxzZSB0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0PXRoaXMuaXRlbX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoa00pLHplKEVNKSx6ZShNTSks''@;'; put 'put ''emUoV0QpLHplKGc0KSx6ZShUYWUpLHplKERzKSx6ZShOdCksemUobm8pLHplKGlsKSx6ZShjNyksemUoVGwpKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWRnLXJvdyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbih0LHIsaSl7aWYoMSZ0JiZGYShpLHY0LDQp''@;'; put 'put ''LDImdCl7bGV0IG87Y2kobz11aSgpKSYmKHIuZGdDZWxscz1vKX19LHZpZXdRdWVyeTpmdW5jdGlvbih0LHIpe2lmKDEmdCYmKFdvKHp6LDUpLFdvKE44dCw1KSxXbyhGOHQsNSxEcyksV28oUDh0LDUsRHMpLFdvKEg4dCw1LERzKSksMiZ0KXtsZXQgaTtjaShpPXVpKCkpJiYoci5leHBhbmRB''@;'; put 'put ''bmltYXRpb249aS5maXJzdCksY2koaT11aSgpKSYmKHIuZGV0YWlsQnV0dG9uPWkuZmlyc3QpLGNpKGk9dWkoKSkmJihyLl9zdGlja3lDZWxscz1pLmZpcnN0KSxjaShpPXVpKCkpJiYoci5fc2Nyb2xsYWJsZUNlbGxzPWkuZmlyc3QpLGNpKGk9dWkoKSkmJihyLl9jYWxjdWxhdGVkQ2VsbHM9''@;'; put 'put ''aS5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwicm93Z3JvdXAiXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezImdCYmKFJyKCJhcmlhLW93bnMiLHIuaWQpLHdyKCJkYXRhZ3JpZC1yb3ciLCEwKSgiZGF0YWdyaWQtcm93LXNrZWxldG9uIixyLnNrZWxldG9uTG9h''@;'; put 'put ''ZGluZykoImRhdGFncmlkLXNlbGVjdGVkIixyLnNlbGVjdGVkKSl9LGlucHV0czp7ZGV0YWlsRGlzYWJsZWQ6WzAsImNsckRnRGV0YWlsRGlzYWJsZWQiLCJkZXRhaWxEaXNhYmxlZCJdLGRldGFpbEhpZGRlbjpbMCwiY2xyRGdEZXRhaWxIaWRkZW4iLCJkZXRhaWxIaWRkZW4iXSxza2VsZXRv''@;'; put 'put ''bkxvYWRpbmc6WzAsImNsckRnU2tlbGV0b25Mb2FkaW5nIiwic2tlbGV0b25Mb2FkaW5nIl0saXRlbTpbMCwiY2xyRGdJdGVtIiwiaXRlbSJdLGNsckRnU2VsZWN0YWJsZToiY2xyRGdTZWxlY3RhYmxlIixzZWxlY3RlZDpbMCwiY2xyRGdTZWxlY3RlZCIsInNlbGVjdGVkIl0sZXhwYW5kZWQ6''@;'; put 'put ''WzAsImNsckRnRXhwYW5kZWQiLCJleHBhbmRlZCJdLGNsckRnRGV0YWlsT3BlbkxhYmVsOiJjbHJEZ0RldGFpbE9wZW5MYWJlbCIsY2xyRGdEZXRhaWxDbG9zZUxhYmVsOiJjbHJEZ0RldGFpbENsb3NlTGFiZWwiLGNsckRnUm93U2VsZWN0aW9uTGFiZWw6ImNsckRnUm93U2VsZWN0aW9uTGFi''@;'; put 'put ''ZWwifSxvdXRwdXRzOntzZWxlY3RlZENoYW5nZWQ6ImNsckRnU2VsZWN0ZWRDaGFuZ2UiLGV4cGFuZGVkQ2hhbmdlOiJjbHJEZ0V4cGFuZGVkQ2hhbmdlIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbYm8oW1dELHtwcm92aWRlOk5mLHVzZUV4aXN0aW5nOldEfSx7cHJvdmlkZTpFRCx1c2VF''@;'; put 'put ''eGlzdGluZzpXRH1dKV0sbmdDb250ZW50U2VsZWN0b3JzOkI4dCxkZWNsczo5LHZhcnM6Myxjb25zdHM6W1siZGV0YWlsIiwiIl0sWyJyb3dDb250ZW50IiwiIl0sWyJjYWxjdWxhdGVkQ2VsbHMiLCIiXSxbInN0aWNreUNlbGxzIiwiIl0sWyJzY3JvbGxhYmxlQ2VsbHMiLCIiXSxbImRldGFp''@;'; put 'put ''bEJ1dHRvbiIsIiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1yb3ctY2xpY2thYmxlIiwzLCJtb3VzZWRvd24iLCJjbGljayIsNCwibmdJZiJdLFszLCJjbHJFeHBhbmRUcmlnZ2VyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcm93LWNsaWNrYWJsZSIsMywibW91c2Vkb3duIiwi''@;'; put 'put ''Y2xpY2siXSxbMywiY2xyRXhwYW5kVHJpZ2dlciJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il0sWyJyb2xlIiwicm93IiwxLCJkYXRhZ3JpZC1yb3ctbWFzdGVyIiwiZGF0YWdyaWQtcm93LWZsZXgiLDMsImlkIl0sWzEsImRhdGFncmlkLXJvdy1zdGlja3kiXSxbImNsYXNzIiwiZGF0YWdyaWQt''@;'; put 'put ''c2VsZWN0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiwzLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLXJvdy1hY3Rpb25zIGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRj''@;'; put 'put ''ZWxsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNv''@;'; put 'put ''bHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLXJvdy1zY3JvbGxhYmxlIiwzLCJuZ0NsYXNzIl0sWzEsImRhdGFncmlkLXNjcm9sbGluZy1jZWxscyJdLFsiY2xhc3MiLCJza2VsZXRvbi1sb2FkaW5nIiw0LCJuZ0lmIl0sWyJyb2xl''@;'; put 'put ''IiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbInRhYmluZGV4IiwiLTEiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWxDaGFuZ2Ui''@;'; put 'put ''LCJuZ01vZGVsIiwiaWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiY2xpY2siLCJmb3IiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInRhYmluZGV4IiwiLTEiLCJ0eXBlIiwicmFkaW8iLCJjbHJSYWRpbyIsIiIsMywibmdNb2RlbENoYW5nZSIs''@;'; put 'put ''ImlkIiwibmFtZSIsInZhbHVlIiwibmdNb2RlbCIsImNoZWNrZWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiZm9yIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLXJvdy1hY3Rpb25zIiwiZGF0YWdyaWQtZml4ZWQtY29sdW1u''@;'; put 'put ''IiwiZGF0YWdyaWQtY2VsbCJdLFsicm9sZSIsImdyaWRjZWxsIiwxLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2VsbCJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImRhdGFncmlkLWV4cGFu''@;'; put 'put ''ZGFibGUtY2FyZXQtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbInRhYmluZGV4IiwiLTEiLCJ0eXBlIiwiYnV0dG9uIiwxLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1dHRvbiIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLDEs''@;'; put 'put ''ImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNvbiJdLFsiY2xyU21hbGwiLCIiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2VsbCJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0''@;'; put 'put ''b24iLCJjbGFzcyIsImRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b24iLCJhcmlhLWhhc3BvcHVwIiwiZGlhbG9nIiwzLCJkaXNhYmxlZCIsImlzLW9wZW4iLCJjbGljayIsNCwibmdJZiJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0b24iLCJhcmlhLWhhc3BvcHVwIiwiZGlhbG9n''@;'; put 'put ''IiwxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlLWRvdWJsZSIsMSwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb24iXSxbMSwic2tlbGV0b24tbG9hZGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpezEmdCYm''@;'; put 'put ''KGZvKFY4dCksWW4oMCxaOHQsMywyLCJkaXYiLDYpKDEsJDh0LDIsMiwiY2xyLWV4cGFuZGFibGUtYW5pbWF0aW9uIiw3KSgyLEs4dCwxLDEsbnVsbCw4KSgzLFg4dCwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAsY2QpKDUsaDd0LDE3LDE0LCJuZy10ZW1wbGF0ZSIsbnVsbCwxLGNkKSxhdSg3''@;'; put 'put ''LG51bGwsMikpLDImdCYmKHJ0KCJuZ0lmIixyLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlKSxpZSgpLHJ0KCJuZ0lmIiwhci5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZSYmci5leHBhbmQuZXhwYW5kYWJsZSksaWUoKSxydCgibmdJZiIsIXIuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1v''@;'; put 'put ''ZGUmJiFyLmV4cGFuZC5leHBhbmRhYmxlKSl9LGRlcGVuZGVuY2llczpbRmgsWXMsSWYsSnMsZWwsX2FlLHZhZSxsdSxIMixNeixvYyxYbCx6eix6Mix2NCx4YWUsRzVdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpO3ZhciBIZj1mdW5jdGlvbihuKXtyZXR1cm4gbltuLldJRFRIPTBdPSJXSURU''@;'; put 'put ''SCIsbltuLkhJRERFTj0xXT0iSElEREVOIixuW24uSU5JVElBTElaRT0yXT0iSU5JVElBTElaRSIsbn0oSGZ8fHt9KTtjb25zdCBmeXQ9T2JqZWN0LmtleXMoSGYpLm1hcChuPT5IZltuXSkuZmlsdGVyKG49Pm49PT1wYXJzZUludChuLDEwKSYmbiE9PUhmLklOSVRJQUxJWkUpO2xldCB1Nz0o''@;'; put 'put ''KCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5jb2x1bW5zPVtdLHRoaXMuY29sdW1uc1N0YXRlQ2hhbmdlPW5ldyAkaShudWxsKSx0aGlzLl9jYWNoZT1bXX1nZXQgY29sdW1uU3RhdGVzKCl7cmV0dXJuIHRoaXMuY29sdW1ucy5tYXAodD0+dC52YWx1ZSl9Z2V0IGhhc0hpZGVhYmxl''@;'; put 'put ''Q29sdW1ucygpe3JldHVybiB0aGlzLmNvbHVtblN0YXRlcy5maWx0ZXIodD0+dC5oaWRlYWJsZSkubGVuZ3RoPjB9Z2V0IHZpc2libGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uU3RhdGVzLmZpbHRlcih0PT4hdC5oaWRkZW4pfWNhY2hlKCl7dGhpcy5fY2FjaGU9dGhpcy5jb2x1bW5z''@;'; put 'put ''Lm1hcCh0PT57Y29uc3Qgcj17Li4udC52YWx1ZX07cmV0dXJuIGRlbGV0ZSByLmNoYW5nZXMscn0pfWhhc0NhY2hlKCl7cmV0dXJuISF0aGlzLl9jYWNoZS5sZW5ndGh9cmVzZXRUb0xhc3RDYWNoZSgpe3RoaXMuX2NhY2hlLmZvckVhY2goKHQscik9Pntjb25zdCBpPXsuLi50LGNoYW5nZXM6''@;'; put 'put ''Znl0fTt0aGlzLmNvbHVtbnNbcl0ubmV4dChpKSx0aGlzLmNvbHVtbnNTdGF0ZUNoYW5nZS5uZXh0KGkpfSksdGhpcy5fY2FjaGU9W119ZW1pdFN0YXRlQ2hhbmdlQXQodCxyKXt0aGlzLmNvbHVtbnNbdF0mJnRoaXMuZW1pdFN0YXRlQ2hhbmdlKHRoaXMuY29sdW1uc1t0XSxyKX1lbWl0U3Rh''@;'; put 'put ''dGVDaGFuZ2UodCxyKXtjb25zdCBpPXsuLi50LnZhbHVlLC4uLnJ9O3QubmV4dChpKSx0aGlzLmNvbHVtbnNTdGF0ZUNoYW5nZS5uZXh0KGkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6''@;'; put 'put ''bi5cdTAyNzVmYWN9KSxufSkoKTtjb25zdCBweXQ9e2l0ZW1TaXplOjMyLG1pbkJ1ZmZlclB4OjIwMCxtYXhCdWZmZXJQeDo0MDB9O2xldCBGTWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0LHIsaSxvLGEsbCx1LGcsRSxPLFosZWUsdmUpe3RoaXMuY2hhbmdlRGV0ZWN0b3JSZWY9dCx0''@;'; put 'put ''aGlzLml0ZXJhYmxlRGlmZmVycz1yLHRoaXMuaXRlbXM9aSx0aGlzLm5nWm9uZT1vLHRoaXMucmVuZGVyZXIyPWEsdGhpcy50ZW1wbGF0ZVJlZj1sLHRoaXMudmlld0NvbnRhaW5lclJlZj11LHRoaXMuZGlyZWN0aW9uYWxpdHk9Zyx0aGlzLnNjcm9sbERpc3BhdGNoZXI9RSx0aGlzLnZpZXdw''@;'; put 'put ''b3J0UnVsZXI9Tyx0aGlzLmRhdGFncmlkPVosdGhpcy5jb2x1bW5zU2VydmljZT1lZSx0aGlzLmluamVjdG9yPXZlLHRoaXMucmVuZGVyZWRSYW5nZUNoYW5nZT1uZXcgS3IsdGhpcy5wZXJzaXN0SXRlbXM9ITAsdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cz17Li4ucHl0''@;'; put 'put ''fSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy50b3BJbmRleD0wLHRoaXMubXV0YXRpb25DaGFuZ2VzPW5ldyBNdXRhdGlvbk9ic2VydmVyKE1lPT57TWUuZm9yRWFjaChIZT0+e0hlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoImRhdGFncmlkLWNvbXBhY3QiKSYmdGhpcy5pdGVtU2l6''@;'; put 'put ''ZT4yNCYmKHRoaXMuaXRlbVNpemU9MjQpfSl9KSx0aGlzLnZpZXdSZXBlYXRlcj1uZXcgJFNlLHRoaXMuY2RrVmlydHVhbEZvcklucHV0cz17Y2RrVmlydHVhbEZvclRyYWNrQnk6TWU9Pk1lfSxpLnNtYXJ0ZW5VcCgpLFouZGV0YWlsU2VydmljZS5wcmV2ZW50Rm9jdXNTY3JvbGw9ITAsdGhp''@;'; put 'put ''cy5kYXRhZ3JpZEVsZW1lbnRSZWY9Wi5lbCx0aGlzLmNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZT0yMCx0aGlzLm11dGF0aW9uQ2hhbmdlcy5vYnNlcnZlKHRoaXMuZGF0YWdyaWRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQse2F0dHJpYnV0ZUZpbHRlcjpbImNsYXNzIl0sYXR0cmli''@;'; put 'put ''dXRlT2xkVmFsdWU6ITB9KSx0aGlzLnZpcnR1YWxTY3JvbGxTdHJhdGVneT1uZXcgS210KHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMuaXRlbVNpemUsdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5taW5CdWZmZXJQeCx0aGlzLl9jZGtGaXhlZFNp''@;'; put 'put ''emVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1heEJ1ZmZlclB4KX1nZXQgY2RrVmlydHVhbEZvck9mKCl7cmV0dXJuIHRoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yT2Z9c2V0IGNka1ZpcnR1YWxGb3JPZih0KXt0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZv''@;'; put 'put ''ck9mPXQsdGhpcy5pdGVtcy5hbGw9dCx0aGlzLnVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKX1nZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoKXtyZXR1cm4gdGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUcmFja0J5fXNldCBjZGtWaXJ0dWFsRm9yVHJhY2tCeSh0KXt0''@;'; put 'put ''aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvclRyYWNrQnk9dCx0aGlzLnVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKX1nZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlKCl7cmV0dXJuIHRoaXM/LmNka1ZpcnR1YWxGb3JJbnB1dHM/LmNka1ZpcnR1YWxGb3JUZW1wbGF0ZX1z''@;'; put 'put ''ZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlKHQpe3RoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yVGVtcGxhdGU9dCx0aGlzLnVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKX1nZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKCl7cmV0dXJuIHRoaXMuY2RrVmly''@;'; put 'put ''dHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemV9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSh0KXt0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplPUZiKHQpLHRoaXMudXBkYXRlQ2RrVmlydHVh''@;'; put 'put ''bEZvcklucHV0cygpfWdldCBpdGVtU2l6ZSgpe3JldHVybiB0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLml0ZW1TaXplfXNldCBpdGVtU2l6ZSh0KXt0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLml0ZW1TaXplPUZiKHQpLHRoaXMudXBkYXRlRml4''@;'; put 'put ''ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cygpfWdldCBtaW5CdWZmZXJQeCgpe3JldHVybiB0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1pbkJ1ZmZlclB4fXNldCBtaW5CdWZmZXJQeCh0KXt0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1pbkJ1''@;'; put 'put ''ZmZlclB4PUZiKHQpLHRoaXMudXBkYXRlRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cygpfWdldCBtYXhCdWZmZXJQeCgpe3JldHVybiB0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1heEJ1ZmZlclB4fXNldCBtYXhCdWZmZXJQeCh0KXt0aGlzLl9jZGtGaXhlZFNp''@;'; put 'put ''emVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1heEJ1ZmZlclB4PUZiKHQpLHRoaXMudXBkYXRlRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cygpfXNldCBkYXRhUmFuZ2UodCl7dCYmKHRoaXMuaXRlbXMuc21hcnQmJnRoaXMuaXRlbXMuc21hcnRlbkRvd24oKSx0aGlzLnRvdGFsSXRlbXM9dC50''@;'; put 'put ''b3RhbCx0aGlzLnVwZGF0ZURhdGFSYW5nZSh0LnNraXAsdC5kYXRhKSl9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhpcy5fdG90YWxJdGVtc31zZXQgdG90YWxJdGVtcyh0KXt0aGlzLl90b3RhbEl0ZW1zPXR9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5pbmplY3Rvci5ydW5JbkNvbnRleHQo''@;'; put 'put ''KCk9Pnt0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydD10aGlzLmNyZWF0ZVZpcnR1YWxTY3JvbGxWaWV3cG9ydEZvckRhdGFncmlkKHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYsdGhpcy5uZ1pvbmUsdGhpcy5yZW5kZXJlcjIsdGhpcy5kaXJlY3Rpb25hbGl0eSx0aGlzLnNjcm9sbERpc3BhdGNo''@;'; put 'put ''ZXIsdGhpcy52aWV3cG9ydFJ1bGVyLHRoaXMuZGF0YWdyaWRFbGVtZW50UmVmLHRoaXMudmlydHVhbFNjcm9sbFN0cmF0ZWd5KSx0aGlzLmNka1ZpcnR1YWxGb3I9ZnVuY3Rpb24gbXl0KG4sZSx0LHIsaSxvKXtpZigranMubWFqb3I8MTkpcmV0dXJuIG5ldyBQeihuLGUsdCxyLGksbyk7e2Nv''@;'; put 'put ''bnN0IGE9TWwuY3JlYXRlKHtwYXJlbnQ6c24obmwpLHByb3ZpZGVyczpbe3Byb3ZpZGU6b00sdXNlVmFsdWU6aX1dfSk7cmV0dXJuIE1sLmNyZWF0ZSh7cGFyZW50OmEscHJvdmlkZXJzOlt7cHJvdmlkZTpEcyx1c2VWYWx1ZTpufSx7cHJvdmlkZTpGYyx1c2VWYWx1ZTplfSx7cHJvdmlkZTph''@;'; put 'put ''dix1c2VWYWx1ZTp0fSx7cHJvdmlkZTpFb2UsdXNlVmFsdWU6cn0se3Byb3ZpZGU6Z2EsdXNlVmFsdWU6b30se3Byb3ZpZGU6UHosdXNlQ2xhc3M6UHp9XX0pLmdldChQeil9fSh0aGlzLnZpZXdDb250YWluZXJSZWYsdGhpcy50ZW1wbGF0ZVJlZix0aGlzLml0ZXJhYmxlRGlmZmVycyx0aGlz''@;'; put 'put ''LnZpZXdSZXBlYXRlcix0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCx0aGlzLm5nWm9uZSksdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQubmdPbkluaXQoKX0pLHRoaXMuZ3JpZFJvbGVFbGVtZW50PXRoaXMuZGF0YWdyaWRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3Rv''@;'; put 'put ''cignW3JvbGU9ImdyaWQiXScpLHRoaXMudXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuaXRlbXMuY2hhbmdlLnN1YnNjcmliZSh0PT57dGhpcy5pdGVtcy5zbWFydCYmKHRoaXMuY2RrVmlydHVhbEZvci5jZGtWaXJ0dWFsRm9yT2Y9dCl9''@;'; put 'put ''KSx0aGlzLmNka1ZpcnR1YWxGb3IuZGF0YVN0cmVhbS5zdWJzY3JpYmUodD0+e3RoaXMudXBkYXRlQXJpYVJvd0NvdW50KHQubGVuZ3RoKX0pLHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0LnNjcm9sbGVkSW5kZXhDaGFuZ2Uuc3Vic2NyaWJlKHQ9Pnt0aGlzLnRvcEluZGV4PXR9KSx0aGlz''@;'; put 'put ''LnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5yZW5kZXJlZFJhbmdlU3RyZWFtLnN1YnNjcmliZSh0PT57dGhpcy5yZW5kZXJlZFJhbmdlQ2hhbmdlLmVtaXQodCl9KSx0aGlzLmRhdGFncmlkLnJlZnJlc2guc3Vic2NyaWJlKHQ9Pnt0LmZpbHRlcnMmJnRoaXMuc2Nyb2xsVG9JbmRleCgwKX0pLHRo''@;'; put 'put ''aXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1N0YXRlQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMudmlld1JlcGVhdGVyLmRldGFjaCgpfSkpfW5nRG9DaGVjaygpe3RoaXMuY2RrVmlydHVhbEZvcj8ubmdEb0NoZWNrKCksdGhpcy51cGRhdGVBcmlhUm93SW5kZXhlcygpfW5nT25EZXN0cm95''@;'; put 'put ''KCl7dGhpcy5jZGtWaXJ0dWFsRm9yPy5uZ09uRGVzdHJveSgpLHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0Py5uZ09uRGVzdHJveSgpLHRoaXMubXV0YXRpb25DaGFuZ2VzPy5kaXNjb25uZWN0KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2godD0+e3QudW5zdWJzY3JpYmUoKX0pfXNj''@;'; put 'put ''cm9sbFVwKHQscj0iYXV0byIpe3RoaXMuc2Nyb2xsVG9JbmRleCh0aGlzLnRvcEluZGV4LXQscil9c2Nyb2xsRG93bih0LHI9ImF1dG8iKXt0aGlzLnNjcm9sbFRvSW5kZXgodGhpcy50b3BJbmRleCt0LHIpfXNjcm9sbFRvSW5kZXgodCxyPSJhdXRvIil7dGhpcy52aXJ0dWFsU2Nyb2xsVmll''@;'; put 'put ''d3BvcnQ/LnNjcm9sbFRvSW5kZXgodCxyKX11cGRhdGVEYXRhUmFuZ2UodCxyKXtsZXQgaT10aGlzLmNka1ZpcnR1YWxGb3JPZjsoIXRoaXMucGVyc2lzdEl0ZW1zfHwhaXx8aT8ubGVuZ3RoIT09dGhpcy50b3RhbEl0ZW1zKSYmKGk9QXJyYXkodGhpcy50b3RhbEl0ZW1zKSksaS5zcGxpY2Uo''@;'; put 'put ''dCxyLmxlbmd0aCwuLi5yKSx0aGlzLmNka1ZpcnR1YWxGb3JPZj1BcnJheS5mcm9tKGkpfXVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKXtpZih0aGlzLmNka1ZpcnR1YWxGb3IpZm9yKGNvbnN0IHQgb2YgT2JqZWN0LmtleXModGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzKSl0aGlzLmNka1Zp''@;'; put 'put ''cnR1YWxGb3JbdF0hPT10aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHNbdF0mJih0aGlzLmNka1ZpcnR1YWxGb3JbdF09dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzW3RdKX11cGRhdGVGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzKCl7dGhpcy52aXJ0dWFsU2Nyb2xsU3RyYXRlZ3kmJnRoaXMu''@;'; put 'put ''dmlydHVhbFNjcm9sbFN0cmF0ZWd5LnVwZGF0ZUl0ZW1BbmRCdWZmZXJTaXplKHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMuaXRlbVNpemUsdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5taW5CdWZmZXJQeCx0aGlzLl9jZGtGaXhlZFNpemVWaXJ0''@;'; put 'put ''dWFsU2Nyb2xsSW5wdXRzLm1heEJ1ZmZlclB4KX11cGRhdGVBcmlhUm93Q291bnQodCl7dGhpcy5ncmlkUm9sZUVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIsdC50b1N0cmluZygpKX11cGRhdGVBcmlhUm93SW5kZXhlcygpe2ZvcihsZXQgdD0wO3Q8dGhpcy52aWV3Q29u''@;'; put 'put ''dGFpbmVyUmVmLmxlbmd0aDt0Kyspe2NvbnN0IHI9dGhpcy52aWV3Q29udGFpbmVyUmVmLmdldCh0KTtyLnJvb3ROb2Rlcy5maW5kKGw9PiJDTFItREctUk9XIj09PWwudGFnTmFtZSk/LnF1ZXJ5U2VsZWN0b3IoJ1tyb2xlPSJyb3ciXScpPy5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgi''@;'; put 'put ''LChyLmNvbnRleHQuaW5kZXgrMSkudG9TdHJpbmcoKSl9fWNyZWF0ZVZpcnR1YWxTY3JvbGxWaWV3cG9ydEZvckRhdGFncmlkKHQscixpLG8sYSxsLHUsZyl7Y29uc3QgRT11Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkIiksTz11Lm5hdGl2ZUVsZW1lbnQucXVlcnlT''@;'; put 'put ''ZWxlY3RvcigiLmRhdGFncmlkLXRhYmxlIiksWj11Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLXJvd3MiKTtsZXQgdmU9MCxNZT0wO2Z1bmN0aW9uIEhlKCl7Wi5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZVkoJHt2ZX1weClgLFouc3R5bGUuaGVpZ2h0PU1lLXZl''@;'; put 'put ''KyJweCJ9Y29uc3QgV2U9ZnVuY3Rpb24gZ3l0KG4sZSx0LHIsaSxvLGEsbCx1KXtyZXR1cm4ranMubWFqb3I8MTk/bmV3IG9NKG4sZSx0LGksbyxhLGwsdSk6TWwuY3JlYXRlKHtwYXJlbnQ6c24obmwpLHByb3ZpZGVyczpbe3Byb3ZpZGU6bm8sdXNlVmFsdWU6bn0se3Byb3ZpZGU6VWwsdXNl''@;'; put 'put ''VmFsdWU6ZX0se3Byb3ZpZGU6Z2EsdXNlVmFsdWU6dH0se3Byb3ZpZGU6TnQsdXNlVmFsdWU6cn0se3Byb3ZpZGU6cVNlLHVzZVZhbHVlOml9LHtwcm92aWRlOmlNLHVzZVZhbHVlOm99LHtwcm92aWRlOk56LHVzZVZhbHVlOmF9LHtwcm92aWRlOkZ6LHVzZVZhbHVlOmx9LHtwcm92aWRlOlFT''@;'; put 'put ''ZSx1c2VWYWx1ZTp1fSx7cHJvdmlkZTpvTSx1c2VDbGFzczpvTX1dfSkuZ2V0KG9NKX0oe25hdGl2ZUVsZW1lbnQ6RX0sdCxyLGksZyxvLGEsbCxudWxsKTtyZXR1cm4gV2UuX2NvbnRlbnRXcmFwcGVyPXtuYXRpdmVFbGVtZW50OntzdHlsZTp7c2V0IHRyYW5zZm9ybShhdCl7dmU9dm9pZCAw''@;'; put 'put ''PT09YXQ/MDorL3RyYW5zbGF0ZVlcKChbMC05XSspcHhcKS8uZXhlYyhhdCk/LlsxXSxIZSgpfX19fSxXZS5zZXRUb3RhbENvbnRlbnRTaXplPWF0PT57TWU9YXQsTy5zdHlsZS5oZWlnaHQ9YCR7TWV9cHhgLEhlKCl9LFdlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJu''@;'; put 'put ''IG5ldyh0fHxuKSh6ZShVbCksemUoYXYpLHplKGM3KSx6ZShnYSksemUoTnQpLHplKEZjKSx6ZShEcyksemUoaU0pLHplKE56KSx6ZShGeiksemUoVW8oKCk9Pk52KSksemUodTcpLHplKG5sKSl9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNsclZpcnR1YWxTY3Jv''@;'; put 'put ''bGwiLCIiXSxbIiIsIkNsclZpcnR1YWxTY3JvbGwiLCIiXV0saW5wdXRzOntwZXJzaXN0SXRlbXM6WzAsImNsclZpcnR1YWxQZXJzaXN0SXRlbXMiLCJwZXJzaXN0SXRlbXMiXSxjZGtWaXJ0dWFsRm9yT2Y6WzAsImNsclZpcnR1YWxSb3dzT2YiLCJjZGtWaXJ0dWFsRm9yT2YiXSxjZGtWaXJ0''@;'; put 'put ''dWFsRm9yVHJhY2tCeTpbMCwiY2xyVmlydHVhbFJvd3NUcmFja0J5IiwiY2RrVmlydHVhbEZvclRyYWNrQnkiXSxjZGtWaXJ0dWFsRm9yVGVtcGxhdGU6WzAsImNsclZpcnR1YWxSb3dzVGVtcGxhdGUiLCJjZGtWaXJ0dWFsRm9yVGVtcGxhdGUiXSxjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNo''@;'; put 'put ''ZVNpemU6WzAsImNsclZpcnR1YWxSb3dzVGVtcGxhdGVDYWNoZVNpemUiLCJjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUiXSxpdGVtU2l6ZTpbMCwiY2xyVmlydHVhbFJvd3NJdGVtU2l6ZSIsIml0ZW1TaXplIl0sbWluQnVmZmVyUHg6WzAsImNsclZpcnR1YWxSb3dzTWluQnVmZmVy''@;'; put 'put ''UHgiLCJtaW5CdWZmZXJQeCJdLG1heEJ1ZmZlclB4OlswLCJjbHJWaXJ0dWFsUm93c01heEJ1ZmZlclB4IiwibWF4QnVmZmVyUHgiXSxkYXRhUmFuZ2U6WzAsImNsclZpcnR1YWxEYXRhUmFuZ2UiLCJkYXRhUmFuZ2UiXX0sb3V0cHV0czp7cmVuZGVyZWRSYW5nZUNoYW5nZToicmVuZGVyZWRS''@;'; put 'put ''YW5nZUNoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2JvKFtjN10pXX0pLG59KSgpLFBNZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscixpLG8pe3RoaXMuZmlsdGVycz10LHRoaXMuc29ydD1yLHRoaXMucGFnZT1pLHRoaXMuZGVib3VuY2VyPW8sdGhpcy5jaGFuZ2U9dGhp''@;'; put 'put ''cy5kZWJvdW5jZXIuY2hhbmdlLnBpcGUoRXMoKCk9PnRoaXMuc3RhdGUpKX1nZXQgc3RhdGUoKXtjb25zdCB0PXt9O3RoaXMucGFnZS5zaXplPjAmJih0LnBhZ2U9e2Zyb206dGhpcy5wYWdlLmZpcnN0SXRlbSx0bzp0aGlzLnBhZ2UubGFzdEl0ZW0sc2l6ZTp0aGlzLnBhZ2Uuc2l6ZSxjdXJy''@;'; put 'put ''ZW50OnRoaXMucGFnZS5jdXJyZW50fSksdGhpcy5zb3J0LmNvbXBhcmF0b3ImJih0LnNvcnQ9dGhpcy5zb3J0LmNvbXBhcmF0b3IgaW5zdGFuY2VvZiB1Vz97Ynk6dGhpcy5zb3J0LmNvbXBhcmF0b3IucHJvcCxyZXZlcnNlOnRoaXMuc29ydC5yZXZlcnNlfTp7Ynk6dGhpcy5zb3J0LmNvbXBh''@;'; put 'put ''cmF0b3IscmV2ZXJzZTp0aGlzLnNvcnQucmV2ZXJzZX0pO2NvbnN0IHI9dGhpcy5maWx0ZXJzLmdldEFjdGl2ZUZpbHRlcnMoKTtpZihyLmxlbmd0aD4wKXt0LmZpbHRlcnM9W107Zm9yKGNvbnN0IGkgb2Ygcil0LmZpbHRlcnMucHVzaChpLnN0YXRlP2kuc3RhdGU6aSl9cmV0dXJuIHR9fXJl''@;'; put 'put ''dHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKG9yKGw3KSxvcihkVyksb3IoSXYpLG9yKGpEKSl9LG4uXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksT3Y9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0KXt0aGlz''@;'; put 'put ''LmNvbHVtbnNTZXJ2aWNlPXQsdGhpcy5zdWJzY3JpcHRpb25zPVtdfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0Q2VsbHNTdGF0ZSgpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuY2VsbHMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLnNldENlbGxzU3RhdGUoKX0pKX1u''@;'; put 'put ''Z09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHQ9PnQudW5zdWJzY3JpYmUoKSl9c2V0Q2VsbHNTdGF0ZSgpe3RoaXMuY2VsbHMubGVuZ3RoPT09dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmxlbmd0aCYmdGhpcy5jZWxscy5mb3JFYWNoKCh0LHIpPT57dGhpcy5j''@;'; put 'put ''b2x1bW5zU2VydmljZS5jb2x1bW5zW3JdJiZ0LnJlc2V0U3RhdGUodGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zW3JdLnZhbHVlKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZSh1NykpfSxuLlx1MDI3NWRpcj0kcih7dHlwZTpuLHNlbGVj''@;'; put 'put ''dG9yczpbWyJjbHItZGctcm93Il0sWyJjbHItZGctcm93LWRldGFpbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbih0LHIsaSl7aWYoMSZ0JiYoRmEoaSxuLDUpLEZhKGksRzUsNCkpLDImdCl7bGV0IG87Y2kobz11aSgpKSYmKHIuZXhwYW5kYWJsZVJvdz1vLmZpcnN0KSxjaShvPXVpKCkp''@;'; put 'put ''JiYoci5jZWxscz1vKX19LHN0YW5kYWxvbmU6ITF9KSxufSkoKSxOdj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscixpLG8sYSxsLHUsZyxFLE8sWixlZSx2ZSxNZSxIZSl7dGhpcy5vcmdhbml6ZXI9dCx0aGlzLml0ZW1zPXIsdGhpcy5leHBhbmRhYmxlUm93cz1pLHRoaXMuc2VsZWN0''@;'; put 'put ''aW9uPW8sdGhpcy5yb3dBY3Rpb25TZXJ2aWNlPWEsdGhpcy5zdGF0ZVByb3ZpZGVyPWwsdGhpcy5kaXNwbGF5TW9kZT11LHRoaXMucmVuZGVyZXI9Zyx0aGlzLmRldGFpbFNlcnZpY2U9RSx0aGlzLmRvY3VtZW50PU8sdGhpcy5lbD1aLHRoaXMucGFnZT1lZSx0aGlzLmNvbW1vblN0cmluZ3M9''@;'; put 'put ''dmUsdGhpcy5rZXlOYXZpZ2F0aW9uPU1lLHRoaXMuem9uZT1IZSx0aGlzLmNsckRnU2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbCx0aGlzLmNsckRnU2luZ2xlQWN0aW9uYWJsZUFyaWFMYWJlbD10aGlzLmNv''@;'; put 'put ''bW1vblN0cmluZ3Mua2V5cy5zaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsLHRoaXMuY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsLHRoaXMuY2xyRGdEaXNhYmxlUGFnZUZvY3VzPSExLHRoaXMuc2Vs''@;'; put 'put ''ZWN0ZWRDaGFuZ2VkPW5ldyBLcighMSksdGhpcy5zaW5nbGVTZWxlY3RlZENoYW5nZWQ9bmV3IEtyKCExKSx0aGlzLnJlZnJlc2g9bmV3IEtyKCExKSx0aGlzLmN1c3RvbVNlbGVjdEFsbEVuYWJsZWQ9ITEsdGhpcy5jdXN0b21TZWxlY3RBbGw9bmV3IEtyLHRoaXMuU0VMRUNUSU9OX1RZUEU9''@;'; put 'put ''QmMsdGhpcy5fc3Vic2NyaXB0aW9ucz1bXTtjb25zdCBXZT1QaCgpO3RoaXMuc2VsZWN0QWxsSWQ9ImNsci1kZy1zZWxlY3QtYWxsLSIrV2UsRS5pZD1XZX1nZXQgbG9hZGluZygpe3JldHVybiB0aGlzLml0ZW1zLmxvYWRpbmd9c2V0IGxvYWRpbmcodCl7dGhpcy5pdGVtcy5sb2FkaW5nPXR9''@;'; put 'put ''c2V0IHNlbGVjdGVkKHQpe3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9dD9CYy5NdWx0aTpCYy5Ob25lLHRoaXMuc2VsZWN0aW9uLnVwZGF0ZUN1cnJlbnQodCwhMSl9c2V0IHNpbmdsZVNlbGVjdGVkKHQpe3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9QmMuU2luZ2xlLHQ/dGhp''@;'; put 'put ''cy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT10OnRoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGUmJih0aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPW51bGwpfXNldCBjbHJEZ1ByZXNlcnZlU2VsZWN0aW9uKHQpe3RoaXMuc2VsZWN0aW9uLnByZXNlcnZlU2VsZWN0aW9uPXR9c2V0IHJv''@;'; put 'put ''d1NlbGVjdGlvbk1vZGUodCl7dGhpcy5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZT10fXNldCB0cmFja0J5KHQpe3RoaXMuaXRlbXMudHJhY2tCeT10fWdldCBhbGxTZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5pc0FsbFNlbGVjdGVkKCl9c2V0IGFsbFNlbGVjdGVkKHQpe3Ro''@;'; put 'put ''aXMuY3VzdG9tU2VsZWN0QWxsRW5hYmxlZD90aGlzLmN1c3RvbVNlbGVjdEFsbC5lbWl0KHQpOnRoaXMuc2VsZWN0aW9uLnRvZ2dsZUFsbCgpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuaXRlbXMuc21hcnR8fCh0aGlzLml0ZW1zLmFsbD10aGlzLnJvd3MubWFwKHI9PnIuaXRlbSkpO2Nv''@;'; put 'put ''bnN0IHQ9dGhpcy5yb3dzLmNoYW5nZXMucGlwZShtMChyPT5oRChQYShyLm1hcChpPT5pLml0ZW0pKSxfYihyLm1hcChpPT5pLml0ZW1DaGFuZ2VzKSkucGlwZShOYigwKSkpKSk7dGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKHQuc3Vic2NyaWJlKHI9Pnt0aGlzLml0ZW1zLnNtYXJ0fHwodGhp''@;'; put 'put ''cy5pdGVtcy5hbGw9cil9KSx0aGlzLnJvd3MuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pntmb3IobGV0IHI9dGhpcy5fZGlzcGxheWVkUm93cy5sZW5ndGgtMTtyPj0wO3ItLSl0aGlzLl9kaXNwbGF5ZWRSb3dzLmdldChyKS5kZXN0cm95ZWQmJnRoaXMuX2Rpc3BsYXllZFJvd3MucmVtb3ZlKHIp''@;'; put 'put ''O2lmKHRoaXMucm93cy5mb3JFYWNoKHI9Pnt0aGlzLl9kaXNwbGF5ZWRSb3dzLmluc2VydChyLl92aWV3KX0pLHRoaXMudXBkYXRlRGV0YWlsU3RhdGUoKSx0aGlzLnZpcnR1YWxTY3JvbGwpe2NvbnN0IHI9dGhpcy5rZXlOYXZpZ2F0aW9uLmdldEFjdGl2ZUNlbGwoKTtyJiZ0aGlzLnpvbmUu''@;'; put 'put ''cnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntzZXRUaW1lb3V0KCgpPT50aGlzLmtleU5hdmlnYXRpb24uc2V0QWN0aXZlQ2VsbChyKSl9KX19KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5rZXlOYXZpZ2F0aW9uLmluaXRpYWxpemVLZXlHcmlkKHRoaXMuZWwubmF0aXZlRWxlbWVudCksdGhpcy51''@;'; put 'put ''cGRhdGVEZXRhaWxTdGF0ZSgpLHRoaXMucmVmcmVzaC5lbWl0KHRoaXMuc3RhdGVQcm92aWRlci5zdGF0ZSksdGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuc3RhdGVQcm92aWRlci5jaGFuZ2Uuc3Vic2NyaWJlKHQ9PnRoaXMucmVmcmVzaC5lbWl0KHQpKSx0aGlzLnNlbGVjdGlvbi5j''@;'; put 'put ''aGFuZ2Uuc3Vic2NyaWJlKHQ9Pnt0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09QmMuU2luZ2xlP3RoaXMuc2luZ2xlU2VsZWN0ZWRDaGFuZ2VkLmVtaXQodCk6dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PUJjLk11bHRpJiZ0aGlzLnNlbGVjdGVkQ2hhbmdlZC5lbWl0KHQp''@;'; put 'put ''fSksdGhpcy5wYWdlLmNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmtleU5hdmlnYXRpb24ucmVzZXRLZXlHcmlkKCksdGhpcy5jbHJEZ0Rpc2FibGVQYWdlRm9jdXN8fHRoaXMuZGF0YWdyaWRUYWJsZS5uYXRpdmVFbGVtZW50LmZvY3VzKCl9KSx0aGlzLmRpc3BsYXlNb2RlLnZpZXcuc3Vi''@;'; put 'put ''c2NyaWJlKHQ9Pntmb3IobGV0IHI9dGhpcy5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnMubGVuZ3RoO3I+MDtyLS0pdGhpcy5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnMuZGV0YWNoKCk7Zm9yKGxldCByPXRoaXMuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucy5sZW5ndGg7cj4wO3ItLSl0''@;'; put 'put ''aGlzLl9wcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMuZGV0YWNoKCk7Zm9yKGxldCByPXRoaXMuX2NhbGN1bGF0aW9uUm93cy5sZW5ndGg7cj4wO3ItLSl0aGlzLl9jYWxjdWxhdGlvblJvd3MuZGV0YWNoKCk7Zm9yKGxldCByPXRoaXMuX2Rpc3BsYXllZFJvd3MubGVuZ3RoO3I+MDtyLS0p''@;'; put 'put ''dGhpcy5fZGlzcGxheWVkUm93cy5kZXRhY2goKTt0PT09QU0uRElTUExBWT8odGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIiksdGhpcy5jb2x1bW5zLmZvckVhY2gocj0+e3RoaXMuX3Byb2plY3RlZERpc3Bs''@;'; put 'put ''YXlDb2x1bW5zLmluc2VydChyLl92aWV3KX0pLHRoaXMucm93cy5mb3JFYWNoKHI9Pnt0aGlzLl9kaXNwbGF5ZWRSb3dzLmluc2VydChyLl92aWV3KX0pKToodGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIiksdGhp''@;'; put 'put ''cy5jb2x1bW5zLmZvckVhY2gocj0+e3RoaXMuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucy5pbnNlcnQoci5fdmlldyl9KSx0aGlzLnJvd3MuZm9yRWFjaChyPT57dGhpcy5fY2FsY3VsYXRpb25Sb3dzLmluc2VydChyLl92aWV3KX0pKX0pKSx0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3Vs''@;'; put 'put ''YXIoKCk9Pnt0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2goSmcodGhpcy5kb2N1bWVudC5ib2R5LCJrZXlkb3duIikuc3Vic2NyaWJlKHQ9PnsiU2hpZnQiPT09dC5rZXkmJih0aGlzLnNlbGVjdGlvbi5zaGlmdFByZXNzZWQ9ITApfSksSmcodGhpcy5kb2N1bWVudC5ib2R5LCJrZXl1cCIpLnN1''@;'; put 'put ''YnNjcmliZSh0PT57IlNoaWZ0Ij09PXQua2V5JiYodGhpcy5zZWxlY3Rpb24uc2hpZnRQcmVzc2VkPSExKX0pKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHQ9PnQudW5zdWJzY3JpYmUoKSl9dG9nZ2xlQWxsU2VsZWN0ZWQodCl7dC5wcmV2ZW50RGVmYXVs''@;'; put 'put ''dCgpLHRoaXMuc2VsZWN0QWxsQ2hlY2tib3g/Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKX1yZXNpemUoKXt0aGlzLm9yZ2FuaXplci5yZXNpemUoKX11cGRhdGVEZXRhaWxTdGF0ZSgpe2lmKHRoaXMuZGV0YWlsU2VydmljZS5zdGF0ZSYmdGhpcy5kZXRhaWxTZXJ2aWNlLmlzT3Blbil7Y29uc3Qg''@;'; put 'put ''dD10aGlzLnJvd3MuZmluZChyPT50aGlzLml0ZW1zLnRyYWNrQnkoci5pdGVtKT09PXRoaXMuaXRlbXMudHJhY2tCeSh0aGlzLmRldGFpbFNlcnZpY2Uuc3RhdGUpKTt0P3RoaXMuZGV0YWlsU2VydmljZS5vcGVuKHQuaXRlbSx0LmRldGFpbEJ1dHRvbi5uYXRpdmVFbGVtZW50KTp0aGlzLnZp''@;'; put 'put ''cnR1YWxTY3JvbGx8fHNldFRpbWVvdXQoKCk9Pnt0aGlzLmRldGFpbFNlcnZpY2UuY2xvc2UoKX0pfX1kYXRhQ2hhbmdlZCgpe3RoaXMuaXRlbXMucmVmcmVzaCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShldyksemUoYzcpLHplKE1NKSx6''@;'; put 'put ''ZShrTSksemUoRU0pLHplKFBNZSksemUoVGFlKSx6ZShOdCksemUoZzQpLHplKFRsKSx6ZShubyksemUoSXYpLHplKGlsKSx6ZShzVyksemUoZ2EpKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKHQs''@;'; put 'put ''cixpKXtpZigxJnQmJihGYShpLEZNZSw1KSxGYShpLHhNLDUpLEZhKGksU2FlLDUpLEZhKGksdHcsNCksRmEoaSxMdiw0KSksMiZ0KXtsZXQgbztjaShvPXVpKCkpJiYoci52aXJ0dWFsU2Nyb2xsPW8uZmlyc3QpLGNpKG89dWkoKSkmJihyLml0ZXJhdG9yPW8uZmlyc3QpLGNpKG89dWkoKSkm''@;'; put 'put ''JihyLnBsYWNlaG9sZGVyPW8uZmlyc3QpLGNpKG89dWkoKSkmJihyLmNvbHVtbnM9byksY2kobz11aSgpKSYmKHIucm93cz1vKX19LHZpZXdRdWVyeTpmdW5jdGlvbih0LHIpe2lmKDEmdCYmKFdvKGY3dCw1LG5vKSxXbyhwN3QsNSxubyksV28oZzd0LDUsRHMpLFdvKG03dCw1LERzKSxXbyh2''@;'; put 'put ''N3QsNSxEcyksV28oXzd0LDUsRHMpLFdvKHk3dCw1LERzKSxXbyhiN3QsNSkpLDImdCl7bGV0IGk7Y2koaT11aSgpKSYmKHIuZGF0YWdyaWQ9aS5maXJzdCksY2koaT11aSgpKSYmKHIuZGF0YWdyaWRUYWJsZT1pLmZpcnN0KSxjaShpPXVpKCkpJiYoci5zY3JvbGxhYmxlQ29sdW1ucz1pLmZp''@;'; put 'put ''cnN0KSxjaShpPXVpKCkpJiYoci5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnM9aS5maXJzdCksY2koaT11aSgpKSYmKHIuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucz1pLmZpcnN0KSxjaShpPXVpKCkpJiYoci5fZGlzcGxheWVkUm93cz1pLmZpcnN0KSxjaShpPXVpKCkpJiYoci5fY2Fs''@;'; put 'put ''Y3VsYXRpb25Sb3dzPWkuZmlyc3QpLGNpKGk9dWkoKSkmJihyLnNlbGVjdEFsbENoZWNrYm94PWkuZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsyJnQmJndyKCJkYXRhZ3JpZC1ob3N0IiwhMCkoImRhdGFncmlkLWRldGFpbC1vcGVuIixyLmRldGFpbFNl''@;'; put 'put ''cnZpY2UuaXNPcGVuKX0saW5wdXRzOntsb2FkaW5nTW9yZUl0ZW1zOlswLCJjbHJMb2FkaW5nTW9yZUl0ZW1zIiwibG9hZGluZ01vcmVJdGVtcyJdLGNsckRnU2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsOiJjbHJEZ1NpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbCIsY2xyRGdTaW5nbGVBY3Rpb25h''@;'; put 'put ''YmxlQXJpYUxhYmVsOiJjbHJEZ1NpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwiLGNsckRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWw6ImNsckRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWwiLGNsckRnRGlzYWJsZVBhZ2VGb2N1czoiY2xyRGdEaXNhYmxlUGFnZUZvY3VzIixjdXN0b21TZWxlY3RB''@;'; put 'put ''bGxFbmFibGVkOlswLCJjbHJEZ0N1c3RvbVNlbGVjdEFsbEVuYWJsZWQiLCJjdXN0b21TZWxlY3RBbGxFbmFibGVkIl0sbG9hZGluZzpbMCwiY2xyRGdMb2FkaW5nIiwibG9hZGluZyJdLHNlbGVjdGVkOlswLCJjbHJEZ1NlbGVjdGVkIiwic2VsZWN0ZWQiXSxzaW5nbGVTZWxlY3RlZDpbMCwi''@;'; put 'put ''Y2xyRGdTaW5nbGVTZWxlY3RlZCIsInNpbmdsZVNlbGVjdGVkIl0sY2xyRGdQcmVzZXJ2ZVNlbGVjdGlvbjoiY2xyRGdQcmVzZXJ2ZVNlbGVjdGlvbiIscm93U2VsZWN0aW9uTW9kZTpbMCwiY2xyRGdSb3dTZWxlY3Rpb24iLCJyb3dTZWxlY3Rpb25Nb2RlIl0sdHJhY2tCeTpbMCwiY2xyRGdJ''@;'; put 'put ''dGVtc1RyYWNrQnkiLCJ0cmFja0J5Il19LG91dHB1dHM6e3NlbGVjdGVkQ2hhbmdlZDoiY2xyRGdTZWxlY3RlZENoYW5nZSIsc2luZ2xlU2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1NpbmdsZVNlbGVjdGVkQ2hhbmdlIixyZWZyZXNoOiJjbHJEZ1JlZnJlc2giLGN1c3RvbVNlbGVjdEFsbDoiY2xy''@;'; put 'put ''RGdDdXN0b21TZWxlY3RBbGwifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltibyhba00sZFcsbDcsSXYsYzcsZXcsRU0sTU0sakQsZzQsUE1lLENhZSx1NyxUYWUsc1ddKV0sbmdDb250ZW50U2VsZWN0b3JzOkM3dCxkZWNsczozNSx2YXJzOjksY29uc3RzOltbImRhdGFncmlkIiwiIl0sWyJk''@;'; put 'put ''YXRhZ3JpZFRhYmxlIiwiIl0sWyJwcm9qZWN0ZWREaXNwbGF5Q29sdW1ucyIsIiJdLFsiZGlzcGxheWVkUm93cyIsIiJdLFsicHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zIiwiIl0sWyJjYWxjdWxhdGlvblJvd3MiLCIiXSxbInNlbGVjdEFsbENoZWNrYm94IiwiIl0sWzEsImRhdGFncmlk''@;'; put 'put ''LW91dGVyLXdyYXBwZXIiXSxbMSwiZGF0YWdyaWQtaW5uZXItd3JhcHBlciJdLFsxLCJkYXRhZ3JpZCJdLFsxLCJkYXRhZ3JpZC10YWJsZS13cmFwcGVyIl0sWyJyb2xlIiwiZ3JpZCIsInRhYmluZGV4IiwiLTEiLDEsImRhdGFncmlkLXRhYmxlIl0sWyJyb2xlIiwicm93Z3JvdXAiLDEsImRh''@;'; put 'put ''dGFncmlkLWhlYWRlciJdLFsicm9sZSIsInJvdyIsMSwiZGF0YWdyaWQtcm93Il0sWzEsImRhdGFncmlkLXJvdy1tYXN0ZXIiLCJkYXRhZ3JpZC1yb3ctZmxleCJdLFsxLCJkYXRhZ3JpZC1yb3ctc3RpY2t5Il0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1''@;'; put 'put ''bW4gZGF0YWdyaWQtc2VsZWN0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsMywia2V5ZG93bi5zcGFjZSIsNCwibmdJZiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQtY29sdW1uIGRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYi''@;'; put 'put ''XSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1yb3ctYWN0aW9ucyBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1leHBh''@;'; put 'put ''bmRhYmxlLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSJdLFsicm9sZSIsInByZXNlbnRhdGlvbiIsMSwiZGF0YWdyaWQtcm93cyJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1yb3ctbG9hZGluZyIsNCwibmdJZiJdLFs0LCJu''@;'; put 'put ''Z0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLXNwaW5uZXIiLDQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGUiXSxbMSwiZGF0YWdyaWQtY2FsY3VsYXRpb24taGVhZGVyIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJkYXRhZ3JpZC1jb2x1bW4iLCJkYXRhZ3JpZC1z''@;'; put 'put ''ZWxlY3QiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDMsImtleWRvd24uc3BhY2UiXSxbImNsYXNzIiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciJdLFsxLCJjbHItY2hlY2tib3gtd3JhcHBlciJdLFsidHlwZSIsImNoZWNr''@;'; put 'put ''Ym94IiwidGFiaW5kZXgiLCItMSIsMywibmdNb2RlbENoYW5nZSIsImlkIiwibmdNb2RlbCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiZm9yIl0sWzEsImNsci1zci1vbmx5Il0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJkYXRhZ3JpZC1jb2x1bW4iLCJk''@;'; put 'put ''YXRhZ3JpZC1zZWxlY3QiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXJvdy1hY3Rpb25zIiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJkYXRhZ3Jp''@;'; put 'put ''ZC1jb2x1bW4iLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIl0sWzEsImRhdGFncmlkLXJvdy1sb2FkaW5nIl0sWyJjbHJNZWRpdW0iLCIiXSxbMSwiZGF0YWdyaWQtc3Bpbm5lciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpezEmdCYmKGZvKHc3''@;'; put 'put ''dCksV3IoMCksSigxLCJkaXYiLDcpKDIsImRpdiIsOCkoMywiZGl2Iiw5LDApKDUsImRpdiIsMTApKDYsImRpdiIsMTEsMSkoOCwiZGl2IiwxMikoOSwiZGl2IiwxMykoMTAsImRpdiIsMTQpKDExLCJkaXYiLDE1KSxZbigxMixFN3QsMywxLCJkaXYiLDE2KSgxMyxNN3QsNCwxLCJkaXYiLDE3''@;'; put 'put ''KSgxNCxUN3QsNCwxLCJkaXYiLDE4KSgxNSx4N3QsNCwxLCJkaXYiLDE5KSx0ZSgpLEooMTYsImRpdiIsMjApLGF1KDE3LG51bGwsMiksdGUoKSgpKCkoKSxKKDE5LCJkaXYiLDIxKSxZbigyMCxBN3QsNSwxLCJjbHItZGctcm93IiwyMiksYXUoMjEsbnVsbCwzKSxZbigyMyxrN3QsNSwxLCJj''@;'; put 'put ''bHItZGctcm93IiwyMiksV3IoMjQsMSksWW4oMjUsUjd0LDEsMCwiY2xyLWRnLXBsYWNlaG9sZGVyIiwyMyksdGUoKSgpKCkoKSxXcigyNiwyKSxZbigyNyxJN3QsMywwLCJkaXYiLDI0KSx0ZSgpLFdyKDI4LDMpLHRlKCksSigyOSwiZGl2IiwyNSkoMzAsImRpdiIsMjYpLGF1KDMxLG51bGws''@;'; put 'put ''NCksdGUoKSxhdSgzMyxudWxsLDUpLHRlKCkpLDImdCYmKGllKDMpLFJyKCJhcmlhLWhpZGRlbiIsISFyLmRldGFpbFNlcnZpY2UuaXNPcGVufHxudWxsKSxpZSg5KSxydCgibmdJZiIsci5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXIuU0VMRUNUSU9OX1RZUEUuTXVsdGkpLGllKCkscnQo''@;'; put 'put ''Im5nSWYiLHIuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1yLlNFTEVDVElPTl9UWVBFLlNpbmdsZSksaWUoKSxydCgibmdJZiIsci5yb3dBY3Rpb25TZXJ2aWNlLmhhc0FjdGlvbmFibGVSb3cpLGllKCkscnQoIm5nSWYiLHIuZXhwYW5kYWJsZVJvd3MuaGFzRXhwYW5kYWJsZVJvd3x8ci5k''@;'; put 'put ''ZXRhaWxTZXJ2aWNlLmVuYWJsZWQpLGllKDUpLHJ0KCJuZ0lmIixyLmxvYWRpbmdNb3JlSXRlbXMpLGllKDMpLHJ0KCJuZ0lmIixyLmxvYWRpbmdNb3JlSXRlbXMpLGllKDIpLHJ0KCJuZ0lmIiwhci5wbGFjZWhvbGRlciksaWUoMikscnQoIm5nSWYiLHIubG9hZGluZykpfSxkZXBlbmRlbmNp''@;'; put 'put ''ZXM6W1lzLGVsLEgyLG9jLFhsLHoyLHY0LFNhZSxMdix4YWUsRzUsT3YsUWIsSmJdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpO2NvbnN0IGJ5dD1uPT5uO2xldCBITWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0LHIpe3RoaXMuY29tbW9uU3RyaW5ncz10LHRoaXMuY29sdW1uc1NlcnZp''@;'; put 'put ''Y2U9cix0aGlzLmFsbFNlbGVjdGVkPW5ldyBLcn1nZXQgY2xyQWxsU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5hbGxTZWxlY3RlZC5hc09ic2VydmFibGUoKX1nZXQgYWxsSGlkZWFibGVzVmlzaWJsZSgpe3JldHVybiAwPT09dGhpcy5oaWRlYWJsZUNvbHVtbnMoKS5maWx0ZXIodD0+dC52YWx1''@;'; put 'put ''ZS5oaWRkZW4pLmxlbmd0aH1zZWxlY3RBbGwoKXt0aGlzLmhpZGVhYmxlQ29sdW1ucygpLmZvckVhY2godD0+dGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2UodCx7aGlkZGVuOiExLGNoYW5nZXM6W0hmLkhJRERFTl19KSksdGhpcy5hbGxTZWxlY3RlZC5uZXh0KCEwKX1oaWRl''@;'; put 'put ''YWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmZpbHRlcih0PT50LnZhbHVlLmhpZGVhYmxlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoaWwpLHplKHU3KSl9LG4uXHUwMjc1Y21wPVByKHt0eXBlOm4s''@;'; put 'put ''c2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4tdG9nZ2xlLWJ1dHRvbiJdXSxvdXRwdXRzOntjbHJBbGxTZWxlY3RlZDoiY2xyQWxsU2VsZWN0ZWQifSxzdGFuZGFsb25lOiExLGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGlu''@;'; put 'put ''ayIsInN3aXRjaC1idXR0b24iLDMsImNsaWNrIiwiZGlzYWJsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24odCxyKXsxJnQmJihKKDAsImJ1dHRvbiIsMCksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLnNlbGVjdEFsbCgpfSksU2UoMSksdGUoKSksMiZ0JiYocnQoImRpc2FibGVkIixy''@;'; put 'put ''LmFsbEhpZGVhYmxlc1Zpc2libGUpLGllKCksU3IoIiAiLHIuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdEFsbCwiICIpKX0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksVk1lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxyLGkpe3RoaXMuY29tbW9uU3RyaW5ncz10LHRoaXMuY29sdW1u''@;'; put 'put ''c1NlcnZpY2U9cix0aGlzLnBvcG92ZXJJZD1QaCgpLHRoaXMub3BlblN0YXRlPSExLHRoaXMuc21hcnRQb3NpdGlvbj17YXhpczpCMi5WRVJUSUNBTCxzaWRlOm5tLkJFRk9SRSxhbmNob3I6UWwuU1RBUlQsY29udGVudDpRbC5TVEFSVH0sdGhpcy50cmFja0J5Rm49Ynl0LHRoaXMuc3Vic2Ny''@;'; put 'put ''aXB0aW9uPWkub3BlbkNoYW5nZS5zdWJzY3JpYmUobz0+dGhpcy5vcGVuU3RhdGU9byl9Z2V0IGFsbENvbHVtbnNWaXNpYmxlKCl7cmV0dXJuIHRoaXMuX2FsbENvbHVtbnNWaXNpYmxlfXNldCBhbGxDb2x1bW5zVmlzaWJsZSh0KXt0aGlzLl9hbGxDb2x1bW5zVmlzaWJsZT10fWdldCBoaWRl''@;'; put 'put ''YWJsZUNvbHVtblN0YXRlcygpe3JldHVybiB0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuZmlsdGVyKHI9PnIudmFsdWUuaGlkZWFibGUpLm1hcChyPT5yLnZhbHVlKX1nZXQgaGFzT25seU9uZVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmxl''@;'; put 'put ''bmd0aC10aGlzLmhpZGVhYmxlQ29sdW1uU3RhdGVzLmxlbmd0aD09PTAmJjE9PT10aGlzLmhpZGVhYmxlQ29sdW1uU3RhdGVzLmZpbHRlcihyPT4hci5oaWRkZW4pLmxlbmd0aH1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dG9nZ2xlQ29sdW1uU3RhdGUo''@;'; put 'put ''dCxyKXtjb25zdCBpPXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5maWx0ZXIobz0+by52YWx1ZT09PXQpWzBdO3RoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlKGkse2hpZGRlbjpyLGNoYW5nZXM6W0hmLkhJRERFTl19KX10b2dnbGVTd2l0Y2hQYW5lbCgpe3RoaXMub3Bl''@;'; put 'put ''blN0YXRlPSF0aGlzLm9wZW5TdGF0ZX1hbGxDb2x1bW5zU2VsZWN0ZWQoKXt0aGlzLmFsbFNlbGVjdGVkRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKGlsKSx6ZSh1NyksemUoS3UpKX0sbi5c''@;'; put 'put ''dTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dnbGUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKHQscil7aWYoMSZ0JiZXbyhMN3QsNSxubyksMiZ0KXtsZXQgaTtjaShpPXVpKCkpJiYoci5hbGxTZWxlY3RlZEVsZW1lbnQ9aS5maXJzdCl9fSxob3N0VmFy''@;'; put 'put ''czo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezImdCYmd3IoImNvbHVtbi1zd2l0Y2gtd3JhcHBlciIsITApKCJhY3RpdmUiLHIub3BlblN0YXRlKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbemcoW2k3XSldLGRlY2xzOjMsdmFyczo4LGNvbnN0czpbWyJhbGxTZWxlY3RlZCIsIiJd''@;'; put 'put ''LFsicm9sZSIsImJ1dHRvbiIsInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyQW5jaG9yIiwiIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiY29sdW1uLXRvZ2dsZS0tYWN0aW9uIl0sWyJjbGFzcyIsImNvbHVtbi1zd2l0Y2giLCJyb2xlIiwiZGlh''@;'; put 'put ''bG9nIiwiY2RrVHJhcEZvY3VzIiwiIiwzLCJpZCIsNCwiY2xyUG9wb3ZlckNvbnRlbnQiLCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIl0sWyJyb2xlIiwiZGlhbG9nIiwi''@;'; put 'put ''Y2RrVHJhcEZvY3VzIiwiIiwxLCJjb2x1bW4tc3dpdGNoIiwzLCJpZCJdLFsxLCJzd2l0Y2gtaGVhZGVyIl0sWyJ0YWJpbmRleCIsIi0xIiwxLCJjbHItc3Itb25seSJdLFsiY2xyUG9wb3ZlckNsb3NlQnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxp''@;'; put 'put ''bmsiLCJ0b2dnbGUtc3dpdGNoLWNsb3NlLWJ1dHRvbiJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiLCJhcmlhLWhpZGRlbiIsInRydWUiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwic3dpdGNoLWNvbnRlbnQiLCJsaXN0LXVuc3R5bGVkIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJh''@;'; put 'put ''Y2tCeSJdLFsxLCJzd2l0Y2gtZm9vdGVyIl0sWzMsImNsckFsbFNlbGVjdGVkIl0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsMywibmdNb2RlbENoYW5nZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il1dLHRlbXBsYXRlOmZ1bmN0aW9u''@;'; put 'put ''KHQscil7MSZ0JiYoSigwLCJidXR0b24iLDEpLFNlKDEpLHRlKCksWW4oMixGN3QsMTUsOSwiZGl2IiwyKSksMiZ0JiYoUnIoImFyaWEtY29udHJvbHMiLHIucG9wb3ZlcklkKSgiYXJpYS1leHBhbmRlZCIsci5vcGVuU3RhdGUpKCJhcmlhLWhhc3BvcHVwIiwibWVudSIpLGllKCksU3IoIiAi''@;'; put 'put ''LHIuY29tbW9uU3RyaW5ncy5rZXlzLnBpY2tDb2x1bW5zLCIgIiksaWUoKSxydCgiY2xyUG9wb3ZlckNvbnRlbnQiLHIub3BlblN0YXRlKSgiY2xyUG9wb3ZlckNvbnRlbnRBdCIsci5zbWFydFBvc2l0aW9uKSgiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwhMCkoImNs''@;'; put 'put ''clBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsITApKX0sZGVwZW5kZW5jaWVzOltSZixJZixfTSxKcyxlbCxVMixGZixIMixvYyxYbCxrRCxGRWUsREQsSUQsSE1lXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxqTWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0KXt0aGlzLmV4cGFu''@;'; put 'put ''ZGFibGVSb3dzQ291bnQ9dCx0JiZ0LnJlZ2lzdGVyKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZGFibGVSb3dzQ291bnQmJnRoaXMuZXhwYW5kYWJsZVJvd3NDb3VudC51bnJlZ2lzdGVyKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKE1N''@;'; put 'put ''LDgpKX0sbi5cdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXSxzdGFuZGFsb25lOiExfSksbn0pKCksZlc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0LHIsaSxvKXt0aGlzLnNlbGVjdGlvbj10LHRoaXMuZGV0YWlsU2VydmljZT1yLHRo''@;'; put 'put ''aXMuY29sdW1uc1NlcnZpY2U9aSx0aGlzLmNvbW1vblN0cmluZ3M9byx0aGlzLlNFTEVDVElPTl9UWVBFPUJjfWdldCBoYXNIaWRlYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2VydmljZS5oYXNIaWRlYWJsZUNvbHVtbnN9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0''@;'; put 'put ''KXtyZXR1cm4gbmV3KHR8fG4pKHplKGtNKSx6ZShnNCksemUodTcpLHplKGlsKSl9LG4uXHUwMjc1Y21wPVByKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1kZy1mb290ZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsyJnQmJndyKCJkYXRhZ3JpZC1mb290ZXIi''@;'; put 'put ''LCEwKX0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6Vjd0LGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCJdLFsxLCJkYXRhZ3JpZC1mb290ZXItc2VsZWN0Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJj''@;'; put 'put ''aGVja2JveCIsImNoZWNrZWQiLCJjaGVja2VkIiwiZGlzYWJsZWQiLCIiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwiZGF0YWdyaWQtZm9vdGVyLWRlc2NyaXB0aW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHQscil7MSZ0JiYoZm8oSDd0KSxZbigwLEI3dCw4LDIsIm5nLWNvbnRhaW5lciIsMCko''@;'; put 'put ''MSxVN3QsNCwxLCJuZy1jb250YWluZXIiLDApLFdyKDIpKSwyJnQmJihydCgibmdJZiIsci5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXIuU0VMRUNUSU9OX1RZUEUuTXVsdGkmJnIuc2VsZWN0aW9uLmN1cnJlbnQubGVuZ3RoPjApLGllKCkscnQoIm5nSWYiLCFyLmRldGFpbFNlcnZpY2Uu''@;'; put 'put ''aXNPcGVuKSl9LGRlcGVuZGVuY2llczpbWXMsZWwsVTIsRmYsVk1lXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKTtjb25zdCBBYWU9bmV3IEVyKCJDT0xVTU5fU1RBVEUiKSxFeXQ9e3Byb3ZpZGU6QWFlLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gU3l0KCl7cmV0dXJuIG5ldyAkaSh7Y2hhbmdlczpb''@;'; put 'put ''XX0pfX07bGV0IFlEPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCl7dGhpcy5wYWdlPXQsdGhpcy5wYWdlU2l6ZU9wdGlvbnNJZD1QaCgpfW5nT25Jbml0KCl7KCF0aGlzLnBhZ2VTaXplT3B0aW9uc3x8MD09PXRoaXMucGFnZVNpemVPcHRpb25zLmxlbmd0aCkmJih0aGlzLnBhZ2VTaXpl''@;'; put 'put ''T3B0aW9ucz1bdGhpcy5wYWdlLnNpemVdKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoSXYpKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWRnLXBhZ2Utc2l6ZSJdXSxpbnB1dHM6e3BhZ2VTaXplT3B0aW9uczpb''@;'; put 'put ''MCwiY2xyUGFnZVNpemVPcHRpb25zIiwicGFnZVNpemVPcHRpb25zIl0scGFnZVNpemVPcHRpb25zSWQ6WzAsImNsclBhZ2VTaXplT3B0aW9uc0lkIiwicGFnZVNpemVPcHRpb25zSWQiXX0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6ZXMsZGVjbHM6NSx2YXJzOjYsY29uc3Rz''@;'; put 'put ''OltbMywiZm9yIl0sWzEsImNsci1zZWxlY3Qtd3JhcHBlciJdLFszLCJuZ01vZGVsQ2hhbmdlIiwiaWQiLCJuZ01vZGVsIl0sWzMsIm5nVmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ1ZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHQscil7MSZ0JiYoZm8oKSxKKDAsImxhYmVs''@;'; put 'put ''IiwwKSxXcigxKSx0ZSgpLEooMiwiZGl2IiwxKSgzLCJzZWxlY3QiLDIpLGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gZmkoci5wYWdlLnNpemUsbyl8fChyLnBhZ2Uuc2l6ZT1vKSxvfSksWW4oNCx6N3QsMiwyLCJvcHRpb24iLDMpLHRlKCkoKSksMiZ0JiYocnQoImZv''@;'; put 'put ''ciIsci5wYWdlU2l6ZU9wdGlvbnNJZCksaWUoMyksd3IoImNsci1wYWdlLXNpemUtc2VsZWN0IiwhMCkscnQoImlkIixyLnBhZ2VTaXplT3B0aW9uc0lkKSxkaSgibmdNb2RlbCIsci5wYWdlLnNpemUpLGllKCkscnQoIm5nRm9yT2YiLHIucGFnZVNpemVPcHRpb25zKSl9LGRlcGVuZGVuY2ll''@;'; put 'put ''czpbUmYsZWwsWGcsUWcsS2csb2MsWGxdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHBXPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxyLGkpe3RoaXMucGFnZT10LHRoaXMuY29tbW9uU3RyaW5ncz1yLHRoaXMuZGV0YWlsU2VydmljZT1pLHRoaXMuY3VycmVudENoYW5nZWQ9bmV3IEty''@;'; put 'put ''KCExKSx0LmFjdGl2YXRlZD0hMH1nZXQgcGFnZVNpemUoKXtyZXR1cm4gdGhpcy5wYWdlLnNpemV9c2V0IHBhZ2VTaXplKHQpeyJudW1iZXIiPT10eXBlb2YgdCYmKHRoaXMucGFnZS5zaXplPXQpfWdldCB0b3RhbEl0ZW1zKCl7cmV0dXJuIHRoaXMucGFnZS50b3RhbEl0ZW1zfXNldCB0b3Rh''@;'; put 'put ''bEl0ZW1zKHQpeyJudW1iZXIiPT10eXBlb2YgdCYmKHRoaXMucGFnZS50b3RhbEl0ZW1zPXQpfWdldCBsYXN0UGFnZSgpe3JldHVybiB0aGlzLnBhZ2UubGFzdH1zZXQgbGFzdFBhZ2UodCl7Im51bWJlciI9PXR5cGVvZiB0JiYodGhpcy5wYWdlLmxhc3Q9dCl9Z2V0IGN1cnJlbnRQYWdlKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMucGFnZS5jdXJyZW50fXNldCBjdXJyZW50UGFnZSh0KXsibnVtYmVyIj09dHlwZW9mIHQmJih0aGlzLnBhZ2UuY3VycmVudD10KX1nZXQgZmlyc3RJdGVtKCl7cmV0dXJuIHRoaXMucGFnZS5maXJzdEl0ZW19Z2V0IGxhc3RJdGVtKCl7cmV0dXJuIHRoaXMucGFnZS5sYXN0''@;'; put 'put ''SXRlbX1nZXQgbWlkZGxlUGFnZXMoKXtjb25zdCB0PVtdO3JldHVybiB0aGlzLnBhZ2UuY3VycmVudD4xJiZ0LnB1c2godGhpcy5wYWdlLmN1cnJlbnQtMSksdC5wdXNoKHRoaXMucGFnZS5jdXJyZW50KSx0aGlzLnBhZ2UuY3VycmVudDx0aGlzLnBhZ2UubGFzdCYmdC5wdXNoKHRoaXMucGFn''@;'; put 'put ''ZS5jdXJyZW50KzEpLHR9bmdPbkluaXQoKXt0aGlzLnBhZ2Uuc2l6ZXx8KHRoaXMucGFnZS5zaXplPTEwKSx0aGlzLl9wYWdlU3Vic2NyaXB0aW9uPXRoaXMucGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKHQ9PnRoaXMuY3VycmVudENoYW5nZWQuZW1pdCh0KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnBh''@;'; put 'put ''Z2UucmVzZXRQYWdlU2l6ZSghMCksdGhpcy5fcGFnZVN1YnNjcmlwdGlvbiYmdGhpcy5fcGFnZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXByZXZpb3VzKCl7dGhpcy5wYWdlLnByZXZpb3VzKCl9bmV4dCgpe3RoaXMucGFnZS5uZXh0KCl9dmVyaWZ5Q3VycmVudFBhZ2UodCl7cGFyc2VJ''@;'; put 'put ''bnQodC50YXJnZXQudmFsdWUsMTApIT09dGhpcy5wYWdlLmN1cnJlbnQmJih0LnRhcmdldC52YWx1ZT10aGlzLnBhZ2UuY3VycmVudCl9dXBkYXRlQ3VycmVudFBhZ2UodCl7Y29uc3Qgcj1wYXJzZUludCh0LnRhcmdldC52YWx1ZSwxMCk7aXNOYU4ocil8fCh0aGlzLnBhZ2UuY3VycmVudD1y''@;'; put 'put ''PDE/MTpyPnRoaXMucGFnZS5sYXN0P3RoaXMucGFnZS5sYXN0OnIpLHRoaXMuY3VycmVudFBhZ2VJbnB1dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlPXRoaXMucGFnZS5jdXJyZW50LnRvU3RyaW5nKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHpl''@;'; put 'put ''KEl2KSx6ZShpbCksemUoZzQpKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWRnLXBhZ2luYXRpb24iXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24odCxyLGkpe2lmKDEmdCYmRmEoaSxZRCw1KSwyJnQpe2xldCBvO2NpKG89dWkoKSkmJihyLl9wYWdlU2l6ZUNv''@;'; put 'put ''bXBvbmVudD1vLmZpcnN0KX19LHZpZXdRdWVyeTpmdW5jdGlvbih0LHIpe2lmKDEmdCYmV28oVzd0LDUpLDImdCl7bGV0IGk7Y2koaT11aSgpKSYmKHIuY3VycmVudFBhZ2VJbnB1dFJlZj1pLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHQscil7MiZ0JiZ3cigi''@;'; put 'put ''cGFnaW5hdGlvbiIsITApfSxpbnB1dHM6e2Rpc2FibGVDdXJyZW50UGFnZUlucHV0OlswLCJjbHJEZ1BhZ2VJbnB1dERpc2FibGVkIiwiZGlzYWJsZUN1cnJlbnRQYWdlSW5wdXQiXSxwYWdlU2l6ZTpbMCwiY2xyRGdQYWdlU2l6ZSIsInBhZ2VTaXplIl0sdG90YWxJdGVtczpbMCwiY2xyRGdU''@;'; put 'put ''b3RhbEl0ZW1zIiwidG90YWxJdGVtcyJdLGxhc3RQYWdlOlswLCJjbHJEZ0xhc3RQYWdlIiwibGFzdFBhZ2UiXSxjdXJyZW50UGFnZTpbMCwiY2xyRGdQYWdlIiwiY3VycmVudFBhZ2UiXX0sb3V0cHV0czp7Y3VycmVudENoYW5nZWQ6ImNsckRnUGFnZUNoYW5nZSJ9LHN0YW5kYWxvbmU6ITEs''@;'; put 'put ''bmdDb250ZW50U2VsZWN0b3JzOlo3dCxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1sicmVhZE9ubHkiLCIiXSxbImN1cnJlbnRQYWdlSW5wdXQiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLXNpemUiLDQsIm5nSWYiXSxbMSwicGFnaW5hdGlvbi1kZXNjcmlwdGlvbiJdLFsi''@;'; put 'put ''Y2xhc3MiLCJwYWdpbmF0aW9uLWxpc3QiLDQsIm5nSWYiXSxbMSwicGFnaW5hdGlvbi1zaXplIl0sWzEsInBhZ2luYXRpb24tbGlzdCJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1maXJzdCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsxLCJjbHItc3Itb25seSJdLFsic2hhcGUi''@;'; put 'put ''LCJzdGVwLWZvcndhcmQtMiIsImRpcmVjdGlvbiIsImRvd24iXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tcHJldmlvdXMiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJ0eXBlIiwidGV4dCIsImNsYXNzIiwicGFn''@;'; put 'put ''aW5hdGlvbi1jdXJyZW50IGNsci1pbnB1dCIsMywic2l6ZSIsInZhbHVlIiwia2V5ZG93bi5lbnRlciIsImJsdXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1uZXh0IiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlIiwi''@;'; put 'put ''ZGlyZWN0aW9uIiwicmlnaHQiXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tbGFzdCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJzdGVwLWZvcndhcmQtMiIsImRpcmVjdGlvbiIsInVwIl0sWyJ0eXBlIiwidGV4dCIsMSwicGFnaW5hdGlvbi1jdXJyZW50IiwiY2xy''@;'; put 'put ''LWlucHV0IiwzLCJrZXlkb3duLmVudGVyIiwiYmx1ciIsInNpemUiLCJ2YWx1ZSJdLFsxLCJwYWdpbmF0aW9uLWRlc2NyaXB0aW9uLWNvbXBhY3QiXV0sdGVtcGxhdGU6ZnVuY3Rpb24odCxyKXsxJnQmJihmbyhZN3QpLFluKDAsWDd0LDUsMiwibmctY29udGFpbmVyIiwyKSgxLFE3dCwxNCwx''@;'; put 'put ''MCwibmctY29udGFpbmVyIiwyKSksMiZ0JiYocnQoIm5nSWYiLCFyLmRldGFpbFNlcnZpY2UuaXNPcGVuKSxpZSgpLHJ0KCJuZ0lmIixyLmRldGFpbFNlcnZpY2UuaXNPcGVuKSl9LGRlcGVuZGVuY2llczpbWXMsSnNdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLG53PSgoKT0+e2NsYXNzIG57''@;'; put 'put ''Y29uc3RydWN0b3IodCxyLGksbyxhLGwsdSl7dGhpcy5lbD10LHRoaXMucmVuZGVyZXI9cix0aGlzLmRvbUFkYXB0ZXI9byx0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlPWEsdGhpcy5jb2x1bW5zU2VydmljZT1sLHRoaXMuY29sdW1uU3RhdGU9dSx0aGlzLnJlc2l6ZUVtaXR0ZXI9bmV3IEty''@;'; put 'put ''LHRoaXMud2lkdGhTZXQ9ITEsdGhpcy5hdXRvU2V0PSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChpLmZpbHRlclJlbmRlclN0ZXBzKG00LkNMRUFSX1dJRFRIUykuc3Vic2NyaWJlKCgpPT50aGlzLmNsZWFyV2lkdGgoKSkpfW5nT25EZXN0cm95KCl7''@;'; put 'put ''dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2godD0+dC51bnN1YnNjcmliZSgpKX1nZXRDb2x1bW5XaWR0aFN0YXRlKCl7Y29uc3QgdD10aGlzLmRldGVjdFN0cmljdFdpZHRoKCk7cmV0dXJue3dpZHRoOnRoaXMuY29tcHV0ZVdpZHRoKHQpLHN0cmljdFdpZHRoOnR9fXNldENvbHVtblN0YXRl''@;'; put 'put ''KHQpe3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1t0XT10aGlzLmNvbHVtblN0YXRlfXNldFdpZHRoKHQpe3Quc3RyaWN0V2lkdGg/KHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5JiYodGhpcy5yZXNpemVFbWl0dGVyLmVtaXQodC53aWR0aCksdGhpcy5yZW5kZXJlci5z''@;'; put 'put ''ZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIix0LndpZHRoKyJweCIpLHRoaXMud2lkdGhTZXQ9ITEpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LFRNKSx0aGlzLmF1dG9TZXQ9ITEpOih0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRo''@;'; put 'put ''aXMuZWwubmF0aXZlRWxlbWVudCxUTSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIix0LndpZHRoKyJweCIpLHRoaXMud2lkdGhTZXQ9ITAsdGhpcy5hdXRvU2V0PSEwKX1zZXRIaWRkZW4odCl7dC5oaWRkZW4/dGhpcy5yZW5kZXJlci5hZGRD''@;'; put 'put ''bGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsekQpOnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LHpEKX1jbGVhcldpZHRoKCl7dGhpcy53aWR0aFNldCYmIXRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5JiZ0aGlzLnJlbmRlcmVyLnNl''@;'; put 'put ''dFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLG51bGwpLHRoaXMuYXV0b1NldCYmdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsVE0pfWRldGVjdFN0cmljdFdpZHRoKCl7cmV0dXJuIHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVz''@;'; put 'put ''aXplZEJ5P3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2Uud2lkdGhBZnRlclJlc2l6ZTp0aGlzLmF1dG9TZXQ/MDp0aGlzLmRvbUFkYXB0ZXIudXNlckRlZmluZWRXaWR0aCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpfWNvbXB1dGVXaWR0aCh0KXtsZXQgcj10O3JldHVybiByfHwocj10aGlzLmRv''@;'; put 'put ''bUFkYXB0ZXIuc2Nyb2xsV2lkdGgodGhpcy5lbC5uYXRpdmVFbGVtZW50KSkscn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUobm8pLHplKE50KSx6ZShldyksemUoYnYpLHplKHdhZSksemUodTcpLHplKEFhZSkpfSxuLlx1MDI3NWRpcj0kcih7''@;'; put 'put ''dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uIl1dLG91dHB1dHM6e3Jlc2l6ZUVtaXR0ZXI6ImNsckRnQ29sdW1uUmVzaXplIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbYm8oW3dhZSxFeXRdKV19KSxufSkoKSxBeXQ9KCgpPT57Y2xhc3Mgbnt1c2VyRGVmaW5lZFdpZHRoKHQp''@;'; put 'put ''e3JldHVybiAwfXNjcm9sbEJhcldpZHRoKHQpe3JldHVybiAwfXNjcm9sbFdpZHRoKHQpe3JldHVybiAwfWNvbXB1dGVkSGVpZ2h0KHQpe3JldHVybiAwfWNsaWVudFJlY3QodCl7cmV0dXJue3RvcDowLGJvdHRvbTowLGxlZnQ6MCxyaWdodDowLHdpZHRoOjAsaGVpZ2h0OjB9fW1pbldpZHRo''@;'; put 'put ''KHQpe3JldHVybiAwfWZvY3VzKHQpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7Y29uc3Qga3l0PW49PkhjKG4pP25ldyBidjpuZXcgQXl0O2xldCBS''@;'; put 'put ''TT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscixpLG8sYSxsLHUsZyxFLE8sWixlZSl7dGhpcy5kYXRhZ3JpZD10LHRoaXMub3JnYW5pemVyPXIsdGhpcy5pdGVtcz1pLHRoaXMucGFnZT1vLHRoaXMuZWw9YSx0aGlzLnJlbmRlcmVyPWwsdGhpcy50YWJsZVNpemVTZXJ2aWNlPWcsdGhp''@;'; put 'put ''cy5jb2x1bW5zU2VydmljZT1FLHRoaXMubmdab25lPU8sdGhpcy5rZXlOYXZpZ2F0aW9uPVosdGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1lZSx0aGlzLl9oZWlnaHRTZXQ9ITEsdGhpcy5zaG91bGRTdGFiaWxpemVDb2x1bW5zPSEwLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmludGVyc2Vj''@;'; put 'put ''dGlvbk9ic2VydmVyPW51bGwsdGhpcy5jb2x1bW5zU2l6ZXNTdGFibGU9ITEsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goci5maWx0ZXJSZW5kZXJTdGVwcyhtNC5DT01QVVRFX0NPTFVNTl9XSURUSFMpLnN1YnNjcmliZSgoKT0+dGhpcy5jb21wdXRlSGVhZGVyc1dpZHRoKCkpKSx0aGlzLnN1''@;'; put 'put ''YnNjcmlwdGlvbnMucHVzaChvLnNpemVDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5faGVpZ2h0U2V0JiZ0aGlzLnJlc2V0RGF0YWdyaWRIZWlnaHQoKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh1LnN0YXRlQ2hhbmdlLnN1YnNjcmliZSh2ZT0+dGhpcy50b2dnbGVEZXRhaWxQYW5l''@;'; put 'put ''KHZlKSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGkuY2hhbmdlLnN1YnNjcmliZSgoKT0+dGhpcy5zaG91bGRTdGFiaWxpemVDb2x1bW5zPSEwKSl9bmdPbkluaXQoKXt0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnNTdGF0ZUNoYW5nZS5zdWJzY3JpYmUodD0+dGhpcy5jb2x1bW5TdGF0''@;'; put 'put ''ZUNoYW5nZWQodCkpLG51bGw9PT10aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0UGFyZW50JiYodGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKFt0XSk9PnsodGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFBhcmVudHx8dC5pc0ludGVyc2Vj''@;'; put 'put ''dGluZykmJnRoaXMuY29sdW1uc1NpemVzU3RhYmxlJiYodGhpcy5jb2x1bW5zU2l6ZXNTdGFibGU9ITEsdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKSl9KSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVy''@;'; put 'put ''Lm9ic2VydmUodGhpcy5lbC5uYXRpdmVFbGVtZW50KSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXR1cENvbHVtbnMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmhlYWRlcnMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLnNldHVwQ29sdW1ucygpLHRoaXMuY29sdW1u''@;'; put 'put ''c1NpemVzU3RhYmxlPSExLHRoaXMuc3RhYmlsaXplQ29sdW1ucygpfSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudGFibGVTaXplU2VydmljZS50YWJsZT10aGlzLmVsfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMuc2hvdWxkU3RhYmlsaXplQ29sdW1ucyYmdGhpcy5zdGFiaWxpemVDb2x1''@;'; put 'put ''bW5zKCksdGhpcy5zaG91bGRDb21wdXRlSGVpZ2h0KCkmJnRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuY29tcHV0ZURhdGFncmlkSGVpZ2h0KCl9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2godD0+dC51''@;'; put 'put ''bnN1YnNjcmliZSgpKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPy5kaXNjb25uZWN0KCl9dG9nZ2xlRGV0YWlsUGFuZSh0KXt0aGlzLmhlYWRlcnMmJih0JiYhdGhpcy5jb2x1bW5zU2VydmljZS5oYXNDYWNoZSgpPyh0aGlzLmNvbHVtbnNTZXJ2aWNlLmNhY2hlKCksdGhpcy5jb2x1bW5z''@;'; put 'put ''U2VydmljZS52aXNpYmxlQ29sdW1ucy5mb3JFYWNoKChyLGkpPT57aT4wJiZ0aGlzLmNvbHVtbnNTZXJ2aWNlLmVtaXRTdGF0ZUNoYW5nZUF0KHIuY29sdW1uSW5kZXgse2NoYW5nZXM6W0hmLkhJRERFTl0saGlkZGVuOnR9KX0pKTp0fHx0aGlzLmNvbHVtbnNTZXJ2aWNlLnJlc2V0VG9MYXN0''@;'; put 'put ''Q2FjaGUoKSl9c2V0dXBDb2x1bW5zKCl7dGhpcy5oZWFkZXJzLmZvckVhY2goKHQscik9PnQuc2V0Q29sdW1uU3RhdGUocikpLHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5zcGxpY2UodGhpcy5oZWFkZXJzLmxlbmd0aCksdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmZvckVhY2go''@;'; put 'put ''KHQscik9Pnt0aGlzLmNvbHVtbnNTZXJ2aWNlLmVtaXRTdGF0ZUNoYW5nZSh0LHtjaGFuZ2VzOltIZi5JTklUSUFMSVpFXSxjb2x1bW5JbmRleDpyfSl9KX1zaG91bGRDb21wdXRlSGVpZ2h0KCl7cmV0dXJuIXRoaXMuX2hlaWdodFNldCYmdGhpcy5wYWdlLnNpemU+MCYmdGhpcy5pdGVtcy5k''@;'; put 'put ''aXNwbGF5ZWQubGVuZ3RoPT09dGhpcy5wYWdlLnNpemV9Y29tcHV0ZURhdGFncmlkSGVpZ2h0KCl7Y29uc3QgdD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLmhlaWdodDt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwi''@;'; put 'put ''aGVpZ2h0Iix0KSx0aGlzLl9oZWlnaHRTZXQ9ITB9cmVzZXREYXRhZ3JpZEhlaWdodCgpe3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJoZWlnaHQiLCIiKSx0aGlzLl9oZWlnaHRTZXQ9ITF9Y29tcHV0ZUhlYWRlcnNXaWR0aCgpe2NvbnN0IHQ9dGhpcy5o''@;'; put 'put ''ZWFkZXJzLmxlbmd0aCxyPXRoaXMuaGVhZGVycy5tYXAobz0+by5nZXRDb2x1bW5XaWR0aFN0YXRlKCkpO2xldCBpPSEwO3RoaXMuaGVhZGVycy5mb3JFYWNoKChvLGEpPT57Y29uc3QgbD17Y2hhbmdlczpbSGYuV0lEVEhdLC4uLnJbYV19O2wuc3RyaWN0V2lkdGh8fChpPSExKSx0PT09YSsx''@;'; put 'put ''JiZpJiYobC5zdHJpY3RXaWR0aD0wKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmVtaXRTdGF0ZUNoYW5nZUF0KGEsbCl9KX1jb2x1bW5TdGF0ZUNoYW5nZWQodCl7aWYoIXRoaXMuaGVhZGVyc3x8bnVsbD09dC5jb2x1bW5JbmRleClyZXR1cm47Y29uc3Qgcj10LmNvbHVtbkluZGV4O3QuY2hhbmdl''@;'; put 'put ''cyYmdC5jaGFuZ2VzLmxlbmd0aCYmdC5jaGFuZ2VzLmZvckVhY2goaT0+e3N3aXRjaChpKXtjYXNlIEhmLldJRFRIOnRoaXMuaGVhZGVycy5nZXQocikuc2V0V2lkdGgodCksdGhpcy5yb3dzLmZvckVhY2gobz0+e28/LmNlbGxzLmxlbmd0aD09PXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1u''@;'; put 'put ''cy5sZW5ndGgmJihvLmNlbGxzLmdldChyKS5zZXRXaWR0aCh0KSxvLmV4cGFuZGFibGVSb3c/LmNlbGxzLmdldChyKT8uc2V0V2lkdGgodCkpfSk7YnJlYWs7Y2FzZSBIZi5ISURERU46dGhpcy5oZWFkZXJzLmdldChyKS5zZXRIaWRkZW4odCksdGhpcy5yb3dzLmZvckVhY2gobz0+e28uY2Vs''@;'; put 'put ''bHMmJm8uY2VsbHMubGVuZ3RoJiYoby5jZWxscy5nZXQocikuc2V0SGlkZGVuKHQpLG8uZXhwYW5kYWJsZVJvdz8uY2VsbHMuZ2V0KHIpPy5zZXRIaWRkZW4odCkpfSksdGhpcy51cGRhdGVDb2x1bW5TZXBhcmF0b3JzVmlzaWJpbGl0eSgpLHRoaXMua2V5TmF2aWdhdGlvbi5yZXNldEtleUdy''@;'; put 'put ''aWQoKTticmVhaztjYXNlIEhmLklOSVRJQUxJWkU6dC5oaWRlYWJsZSYmdC5oaWRkZW4mJih0aGlzLmhlYWRlcnMuZ2V0KHIpLnNldEhpZGRlbih0KSx0aGlzLnJvd3MuZm9yRWFjaChvPT57by5zZXRDZWxsc1N0YXRlKCksby5leHBhbmRhYmxlUm93Py5zZXRDZWxsc1N0YXRlKCl9KSl9fSl9''@;'; put 'put ''c3RhYmlsaXplQ29sdW1ucygpe3RoaXMuY29sdW1uc1NpemVzU3RhYmxlfHx0aGlzLml0ZW1zLmRpc3BsYXllZC5sZW5ndGg+MCYmKHRoaXMub3JnYW5pemVyLnJlc2l6ZSgpLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSEwKX11cGRhdGVDb2x1bW5TZXBhcmF0b3JzVmlzaWJpbGl0eSgpe2Nv''@;'; put 'put ''bnN0IHQ9dGhpcy5kYXRhZ3JpZC5jb2x1bW5zLmZpbHRlcihyPT4hci5pc0hpZGRlbik7dC5mb3JFYWNoKChyLGkpPT57aT09PXQubGVuZ3RoLTE/ci5zaG93U2VwYXJhdG9yPSExOnIuc2hvd1NlcGFyYXRvcnx8KHIuc2hvd1NlcGFyYXRvcj0hMCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoTnYpLHplKGV3KSx6ZShjNyksemUoSXYpLHplKG5vKSx6ZShOdCksemUoZzQpLHplKENhZSksemUodTcpLHplKGdhKSx6ZShzVyksemUoVWwpKX0sbi5cdTAyNzVkaXI9JHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1d''@;'; put 'put ''LGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKHQscixpKXtpZigxJnQmJihGYShpLG53LDQpLEZhKGksT3YsNCkpLDImdCl7bGV0IG87Y2kobz11aSgpKSYmKHIuaGVhZGVycz1vKSxjaShvPXVpKCkpJiYoci5yb3dzPW8pfX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbYm8oW3twcm92aWRlOmJ2''@;'; put 'put ''LHVzZUZhY3Rvcnk6a3l0LGRlcHM6W2xkXX1dKV19KSxufSkoKSxSeXQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3psLmFkZEljb25zKEZndCxQZ3QsY0QsSGd0LEZTZSxWZ3QsUFNlLEJndCxqZ3QpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxu''@;'; put 'put ''KX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltxbyxveXQsSnosV2wsVE1lLGhkLFdvZSxybSxheXQseE1lLGdNLExELHRhZV19KSxufSkoKSxVTWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBu''@;'; put 'put ''ZXcodHx8bil9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1zdGFjay1jb250ZW50Il1dLHN0YW5kYWxvbmU6ITF9KSxufSkoKSxrYWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2dlbmVyYXRlZElkPW51bGwsdGhpcy5faWQ9bnVsbH1nZXQgaWQo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKHQpe3RoaXMuX2lkPSJzdHJpbmciPT10eXBlb2YgdCYmIiIhPT10P3Q6dGhpcy5fZ2VuZXJhdGVkSWQrIiJ9bmdPbkluaXQoKXt0aGlzLl9nZW5lcmF0ZWRJZD0iY2xyLXN0YWNrLWxhYmVsLSIrUGgoKSx0aGlzLmlkfHwodGhpcy5faWQ9dGhpcy5f''@;'; put 'put ''Z2VuZXJhdGVkSWQrIiIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWxhYmVsIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHQscil7MiZ0JiZS''@;'; put 'put ''cigiaWQiLHIuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LHN0YW5kYWxvbmU6ITEsbmdDb250ZW50U2VsZWN0b3JzOmVzLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKHQscil7MSZ0JiYoZm8oKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHpNZT0oKCk9PntjbGFzcyBu''@;'; put 'put ''e2NvbnN0cnVjdG9yKHQscil7dGhpcy5wYXJlbnQ9dCx0aGlzLmNvbW1vblN0cmluZ3M9cix0aGlzLmV4cGFuZGVkPSExLHRoaXMuZXhwYW5kYWJsZT0hMSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBLcighMSksdGhpcy5mb2N1c2VkPSExLHRoaXMudW5pcXVlSWQ9UGgoKSx0aGlzLl9jaGFu''@;'; put 'put ''Z2VkQ2hpbGRyZW49MCx0aGlzLl9mdWxseUluaXRpYWxpemVkPSExLHRoaXMuX2NoYW5nZWQ9ITEsdCYmdC5hZGRDaGlsZCgpfXNldCBzZXRDaGFuZ2VkVmFsdWUodCl7dGhpcy5fY2hhbmdlZD10LHRoaXMucGFyZW50JiZ0aGlzLl9mdWxseUluaXRpYWxpemVkJiYodD90aGlzLnBhcmVudC5f''@;'; put 'put ''Y2hhbmdlZENoaWxkcmVuKys6dGhpcy5wYXJlbnQuX2NoYW5nZWRDaGlsZHJlbi0tKX1nZXQgZ2V0Q2hhbmdlZFZhbHVlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZWR8fHRoaXMuX2NoYW5nZWRDaGlsZHJlbj4wJiYhdGhpcy5leHBhbmRlZH1nZXQgb25TdGFja0xhYmVsRm9jdXMoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5leHBhbmRhYmxlJiYhdGhpcy5leHBhbmRlZCYmdGhpcy5mb2N1c2VkfWdldCBsYWJlbGxlZEJ5SWQoKXtyZXR1cm4gdGhpcy5zdGFja0Jsb2NrVGl0bGUuaWR9Z2V0IGhlYWRpbmdMZXZlbCgpe3JldHVybiB0aGlzLmFyaWFMZXZlbD90aGlzLmFyaWFMZXZlbCsiIjp0aGlzLnBhcmVu''@;'; put 'put ''dD8iNCI6IjMifWdldCBjYXJldERpcmVjdGlvbigpe3JldHVybiB0aGlzLmV4cGFuZGVkPyJkb3duIjoicmlnaHQifWdldCByb2xlKCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZT8iYnV0dG9uIjpudWxsfWdldCB0YWJJbmRleCgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/IjAiOm51bGx9Z2V0''@;'; put 'put ''IGFyaWFFeHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/dGhpcy5leHBhbmRlZD8idHJ1ZSI6ImZhbHNlIjpudWxsfW5nT25Jbml0KCl7dGhpcy5fZnVsbHlJbml0aWFsaXplZD0hMH1hZGRDaGlsZCgpe3RoaXMuZXhwYW5kYWJsZT0hMH10b2dnbGVFeHBhbmQodCl7V01lKHQpfHx0''@;'; put 'put ''aGlzLmV4cGFuZGFibGUmJih0aGlzLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkLHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLmV4cGFuZGVkKSl9Z2V0U3RhY2tDaGlsZHJlbklkKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQ/YGNsci1zdGFjay1jaGlsZHJlbi0ke3RoaXMudW5pcXVlSWR9''@;'; put 'put ''YDpudWxsfXByZXZlbnREZWZhdWx0SWZOb3RJbnB1dEV2ZW50KHQpe1dNZSh0KXx8dC5wcmV2ZW50RGVmYXVsdCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShuLDEyKSx6ZShpbCkpfSxuLlx1MDI3NWNtcD1Qcih7dHlwZTpuLHNlbGVjdG9y''@;'; put 'put ''czpbWyJjbHItc3RhY2stYmxvY2siXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24odCxyLGkpe2lmKDEmdCYmRmEoaSxrYWUsNSksMiZ0KXtsZXQgbztjaShvPXVpKCkpJiYoci5zdGFja0Jsb2NrVGl0bGU9by5maXJzdCl9fSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxy''@;'; put 'put ''KXsyJnQmJihScigicm9sZSIsImhlYWRpbmciKSgiYXJpYS1sZXZlbCIsci5oZWFkaW5nTGV2ZWwpLHdyKCJzdGFjay1ibG9jayIsITApKCJzdGFjay1ibG9jay1leHBhbmRlZCIsci5leHBhbmRlZCkoInN0YWNrLWJsb2NrLWV4cGFuZGFibGUiLHIuZXhwYW5kYWJsZSkoInN0YWNrLWJsb2Nr''@;'; put 'put ''LWNoYW5nZWQiLHIuZ2V0Q2hhbmdlZFZhbHVlKSgib24tZm9jdXMiLHIub25TdGFja0xhYmVsRm9jdXMpKX0saW5wdXRzOntleHBhbmRlZDpbMCwiY2xyU2JFeHBhbmRlZCIsImV4cGFuZGVkIl0sZXhwYW5kYWJsZTpbMCwiY2xyU2JFeHBhbmRhYmxlIiwiZXhwYW5kYWJsZSJdLGFyaWFMZXZl''@;'; put 'put ''bDpbMCwiY2xyU3RhY2tWaWV3TGV2ZWwiLCJhcmlhTGV2ZWwiXSxzZXRDaGFuZ2VkVmFsdWU6WzAsImNsclNiTm90aWZ5Q2hhbmdlIiwic2V0Q2hhbmdlZFZhbHVlIl19LG91dHB1dHM6e2V4cGFuZGVkQ2hhbmdlOiJjbHJTYkV4cGFuZGVkQ2hhbmdlIn0sc3RhbmRhbG9uZTohMSxuZ0NvbnRl''@;'; put 'put ''bnRTZWxlY3RvcnM6cjl0LGRlY2xzOjksdmFyczo5LGNvbnN0czpbWzEsInN0YWNrLWJsb2NrLWxhYmVsIiwzLCJjbGljayIsImtleXVwLmVudGVyIiwia2V5dXAuc3BhY2UiLCJrZXlkb3duLnNwYWNlIiwiZm9jdXMiLCJibHVyIiwiaWQiXSxbInNoYXBlIiwiYW5nbGUiLCJjbGFzcyIsInN0''@;'; put 'put ''YWNrLWJsb2NrLWNhcmV0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzEsInN0YWNrLXZpZXcta2V5Il0sWzEsInN0YWNrLWJsb2NrLWNvbnRlbnQiXSxbMSwic3RhY2stY2hpbGRyZW4iLDMsImNsckV4cGFuZFRyaWdnZXIiXSxbInJvbGUiLCJyZWdpb24i''@;'; put 'put ''LDMsImhlaWdodCIsNCwibmdJZiJdLFsic2hhcGUiLCJhbmdsZSIsMSwic3RhY2stYmxvY2stY2FyZXQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInJvbGUiLCJyZWdpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24odCxyKXsxJnQmJihmbyhuOXQpLEooMCwiZGl2IiwwKSx3dCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKG8pe3JldHVybiByLnRvZ2dsZUV4cGFuZChvKX0pKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24obyl7cmV0dXJuIHIudG9nZ2xlRXhwYW5kKG8pfSkoImtleXVwLnNwYWNlIixmdW5jdGlvbihvKXtyZXR1cm4gci50b2dnbGVFeHBhbmQobyl9KSgia2V5ZG93bi5zcGFjZSIsZnVuY3Rpb24o''@;'; put 'put ''byl7cmV0dXJuIHIucHJldmVudERlZmF1bHRJZk5vdElucHV0RXZlbnQobyl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuZm9jdXNlZD0hMH0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiByLmZvY3VzZWQ9ITF9KSxZbigxLGk5dCwxLDEsImNkcy1pY29uIiwxKSgyLG85dCwyLDEs''@;'; put 'put ''InNwYW4iLDIpLEooMywiZGl2IiwzKSxXcig0KSx0ZSgpLEooNSwiZGl2Iiw0KSxXcig2LDEpLHRlKCkoKSxKKDcsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNSksWW4oOCxhOXQsMiw0LCJkaXYiLDYpLHRlKCkpLDImdCYmKHJ0KCJpZCIsci51bmlxdWVJZCksUnIoInJvbGUiLHIucm9s''@;'; put 'put ''ZSkoInRhYmluZGV4IixyLnRhYkluZGV4KSgiYXJpYS1leHBhbmRlZCIsci5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixyLmdldFN0YWNrQ2hpbGRyZW5JZCgpKSxpZSgpLHJ0KCJuZ0lmIixyLmV4cGFuZGFibGUpLGllKCkscnQoIm5nSWYiLHIuZ2V0Q2hhbmdlZFZhbHVlKSxpZSg1''@;'; put 'put ''KSxydCgiY2xyRXhwYW5kVHJpZ2dlciIsci5leHBhbmRlZCksaWUoKSxydCgibmdJZiIsci5leHBhbmRlZCkpfSxkZXBlbmRlbmNpZXM6W1lzLEpzLHp6XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKTtmdW5jdGlvbiBXTWUobil7Y29uc3QgZT1uPy50YXJnZXQ7cmV0dXJuISFlPy50YWdOYW1l''@;'; put 'put ''JiZbIklOUFVUIiwiVEVYVEFSRUEiLCJCVVRUT04iLCJBIiwiU0VMRUNUIiwiT1BUSU9OIl0uaW5jbHVkZXMoZS50YWdOYW1lKX1sZXQgUmFlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NWNtcD1Qcih7dHlw''@;'; put 'put ''ZTpuLHNlbGVjdG9yczpbWyJjbHItc3RhY2stdmlldyJdXSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9yczpsOXQsZGVjbHM6Myx2YXJzOjAsY29uc3RzOltbMSwic3RhY2stdmlldyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpezEmdCYmKGZvKHM5dCksV3IoMCksSigxLCJkaXYi''@;'; put 'put ''LDApLFdyKDIsMSksdGUoKSl9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLER5dD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7emwuYWRkSWNvbnMock0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0p''@;'; put 'put ''LG4uXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltxbyxoZCxXbCx4TWVdfSksbn0pKCkscnc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuc2VsZWN0YWJsZT0hMSx0aGlzLmVhZ2VyPSEwLHRoaXMuY2hpbGRyZW5GZXRjaGVkPW5ldyBNcn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7Y29uc3QgWU1lPXtwcm92aWRlOnJ3LHVzZUZhY3Rvcnk6ZnVuY3Rpb24gTHl0KG4pe3JldHVybiBufHxuZXcgcnd9LGRlcHM6W1tuZXcgdzgsbmV3IHFt''@;'; put 'put ''LHJ3XV19O2xldCBaTWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0LHIpe3RoaXMuZmVhdHVyZXNTZXJ2aWNlPXQsdGhpcy5leHBhbmRTZXJ2aWNlPXIsciYmKHRoaXMuc3Vic2NyaXB0aW9uPXIuZXhwYW5kQ2hhbmdlLnN1YnNjcmliZShpPT57IWkmJnRoaXMucGFyZW50JiYhdC5lYWdl''@;'; put 'put ''ciYmdC5yZWN1cnNpb24mJnRoaXMucGFyZW50LmNsZWFyQ2hpbGRyZW4oKX0pKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldEFyaWFSb2xlcygpfXNob3VsZFJlbmRlcigpe3JldHVybiB0aGlzLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24mJih0aGlzLmZlYXR1cmVzU2VydmljZS5l''@;'; put 'put ''YWdlcnx8IXRoaXMuZXhwYW5kU2VydmljZXx8dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkKX1nZXRDb250ZXh0KHQpe3JldHVybnskaW1wbGljaXQ6dC5tb2RlbCxjbHJNb2RlbDp0fX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNj''@;'; put 'put ''cmliZSgpfXNldEFyaWFSb2xlcygpe3RoaXMucm9sZT10aGlzLnBhcmVudD8iZ3JvdXAiOm51bGx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKHJ3KSx6ZShOZiw4KSl9LG4uXHUwMjc1Y21wPVByKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1y''@;'; put 'put ''ZWN1cnNpdmUtY2hpbGRyZW4iXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsyJnQmJlJyKCJyb2xlIixyLnJvbGUpfSxpbnB1dHM6e3BhcmVudDoicGFyZW50IixjaGlsZHJlbjoiY2hpbGRyZW4ifSxzdGFuZGFsb25lOiExLGRlY2xzOjEsdmFyczoxLGNvbnN0czpb''@;'; put 'put ''WzQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpezEmdCYmWW4oMCxmOXQsMiwxLCJuZy1jb250YWluZXIiLDApLDImdCYmcnQoIm5nSWYiLHIuc2hvdWxk''@;'; put 'put ''UmVuZGVyKCkpfSxkZXBlbmRlbmNpZXM6W1JmLFlzLElmXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKTt2YXIgZzE9ZnVuY3Rpb24obil7cmV0dXJuIG5bbi5VTlNFTEVDVEVEPTBdPSJVTlNFTEVDVEVEIixuW24uU0VMRUNURUQ9MV09IlNFTEVDVEVEIixuW24uSU5ERVRFUk1JTkFURT0yXT0i''@;'; put 'put ''SU5ERVRFUk1JTkFURSIsbn0oZzF8fHt9KTtjbGFzcyBHTWV7Y29uc3RydWN0b3IoKXt0aGlzLmxvYWRpbmckPW5ldyAkaSghMSksdGhpcy5zZWxlY3RlZD1uZXcgJGkoZzEuVU5TRUxFQ1RFRCksdGhpcy5fbG9hZGluZz0hMX1nZXQgbG9hZGluZygpe3JldHVybiB0aGlzLl9sb2FkaW5nfXNl''@;'; put 'put ''dCBsb2FkaW5nKGUpe3RoaXMuX2xvYWRpbmc9ZSx0aGlzLmxvYWRpbmckLm5leHQoZSl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuISghdGhpcy5fZGlzYWJsZWQmJiF0aGlzLnBhcmVudD8uZGlzYWJsZWQpfXNldCBkaXNhYmxlZChlKXt0aGlzLl9kaXNhYmxlZD1lfWRlc3Ryb3koKXt0aGlzLnNl''@;'; put 'put ''bGVjdGVkLmNvbXBsZXRlKCl9c2V0U2VsZWN0ZWQoZSx0LHIpe2UhPT10aGlzLnNlbGVjdGVkLnZhbHVlJiYodGhpcy5zZWxlY3RlZC5uZXh0KGUpLHImJmUhPT1nMS5JTkRFVEVSTUlOQVRFJiZ0aGlzLmNoaWxkcmVuJiZ0aGlzLmNoaWxkcmVuLmZvckVhY2goaT0+e2kuZGlzYWJsZWR8fGku''@;'; put 'put ''c2V0U2VsZWN0ZWQoZSwhMSwhMCl9KSx0JiZ0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuX3VwZGF0ZVNlbGVjdGlvbkZyb21DaGlsZHJlbigpKX10b2dnbGVTZWxlY3Rpb24oZSl7dGhpcy5kaXNhYmxlZHx8dGhpcy5zZXRTZWxlY3RlZCh0aGlzLnNlbGVjdGVkLnZhbHVlPT09ZzEuU0VMRUNU''@;'; put 'put ''RUQ/ZzEuVU5TRUxFQ1RFRDpnMS5TRUxFQ1RFRCwhMCxlKX1fdXBkYXRlU2VsZWN0aW9uRnJvbUNoaWxkcmVuKCl7Y29uc3QgZT10aGlzLmNvbXB1dGVTZWxlY3Rpb25TdGF0ZUZyb21DaGlsZHJlbigpO2UhPT10aGlzLnNlbGVjdGVkLnZhbHVlJiYodGhpcy5zZWxlY3RlZC5uZXh0KGUpLHRo''@;'; put 'put ''aXMucGFyZW50JiZ0aGlzLnBhcmVudC5fdXBkYXRlU2VsZWN0aW9uRnJvbUNoaWxkcmVuKCkpfWNvbXB1dGVTZWxlY3Rpb25TdGF0ZUZyb21DaGlsZHJlbigpe2xldCBlPSExLHQ9ITE7Zm9yKGNvbnN0IHIgb2YgdGhpcy5jaGlsZHJlbilzd2l0Y2goci5zZWxlY3RlZC52YWx1ZSl7Y2FzZSBn''@;'; put 'put ''MS5JTkRFVEVSTUlOQVRFOmlmKHIuZGlzYWJsZWQpY29udGludWU7cmV0dXJuIGcxLklOREVURVJNSU5BVEU7Y2FzZSBnMS5TRUxFQ1RFRDppZihlPSEwLHQpcmV0dXJuIGcxLklOREVURVJNSU5BVEU7YnJlYWs7ZGVmYXVsdDppZih0PSEwLGUpcmV0dXJuIGcxLklOREVURVJNSU5BVEV9cmV0''@;'; put 'put ''dXJuIGU/dD9nMS5VTlNFTEVDVEVEOmcxLlNFTEVDVEVEOmcxLlVOU0VMRUNURUR9fWNsYXNzIGdXIGV4dGVuZHMgR01le2NvbnN0cnVjdG9yKGUsdCxyLGkpe3N1cGVyKCksdGhpcy5nZXRDaGlsZHJlbj1yLHRoaXMuZmVhdHVyZXNTZXJ2aWNlPWksdGhpcy5jaGlsZHJlbkZldGNoZWQ9ITEs''@;'; put 'put ''dGhpcy5fY2hpbGRyZW49W10sdGhpcy5tb2RlbD1lLHRoaXMucGFyZW50PXR9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuZmV0Y2hDaGlsZHJlbigpLHRoaXMuX2NoaWxkcmVufXNldCBjaGlsZHJlbihlKXt0aGlzLl9jaGlsZHJlbj1lfWRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbiYm''@;'; put 'put ''dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxzdXBlci5kZXN0cm95KCl9Y2xlYXJDaGlsZHJlbigpe3RoaXMuX2NoaWxkcmVuLmZvckVhY2goZT0+ZS5kZXN0cm95KCkpLGRlbGV0ZSB0aGlzLl9jaGlsZHJlbix0aGlzLmNoaWxkcmVuRmV0Y2hlZD0hMX1mZXRjaENoaWxkcmVuKCl7''@;'; put 'put ''aWYodGhpcy5jaGlsZHJlbkZldGNoZWQpcmV0dXJuO2NvbnN0IGU9dGhpcy5nZXRDaGlsZHJlbih0aGlzLm1vZGVsKTshZnVuY3Rpb24gT3l0KG4pe3JldHVybiBuJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi50aGVufShlKT94SShlKT8odGhpcy5sb2FkaW5nPSEwLHRoaXMuc3Vic2NyaXB0aW9u''@;'; put 'put ''PWUuc3Vic2NyaWJlKHQ9Pnt0aGlzLl9jaGlsZHJlbj10aGlzLndyYXBDaGlsZHJlbih0KSx0aGlzLmxvYWRpbmc9ITF9KSk6dGhpcy5fY2hpbGRyZW49ZT90aGlzLndyYXBDaGlsZHJlbihlKTpbXToodGhpcy5sb2FkaW5nPSEwLGUudGhlbih0PT57dGhpcy5fY2hpbGRyZW49dGhpcy53cmFw''@;'; put 'put ''Q2hpbGRyZW4odCksdGhpcy5sb2FkaW5nPSExfSkpLHRoaXMuY2hpbGRyZW5GZXRjaGVkPSEwLHRoaXMuZmVhdHVyZXNTZXJ2aWNlJiZ0aGlzLmZlYXR1cmVzU2VydmljZS5jaGlsZHJlbkZldGNoZWQubmV4dCgpfXdyYXBDaGlsZHJlbihlKXtyZXR1cm4gZS5tYXAodD0+bmV3IGdXKHQsdGhp''@;'; put 'put ''cyx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVyZXNTZXJ2aWNlKSl9fWxldCAkTWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0LHIsaSl7dGhpcy50ZW1wbGF0ZT10LHRoaXMuZmVhdHVyZXNTZXJ2aWNlPXIsdGhpcy5jZHI9aX1uZ09uQ2hhbmdlcygpe2xldCB0O3Q9QXJyYXkuaXNB''@;'; put 'put ''cnJheSh0aGlzLm5vZGVzKT90aGlzLm5vZGVzLm1hcChyPT5uZXcgZ1cocixudWxsLHRoaXMuZ2V0Q2hpbGRyZW4sdGhpcy5mZWF0dXJlc1NlcnZpY2UpKTpbbmV3IGdXKHRoaXMubm9kZXMsbnVsbCx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVyZXNTZXJ2aWNlKV0sdGhpcy5jaGlsZHJl''@;'; put 'put ''bkZldGNoU3Vic2NyaXB0aW9ufHwodGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9uPXRoaXMuZmVhdHVyZXNTZXJ2aWNlLmNoaWxkcmVuRmV0Y2hlZC5waXBlKE5iKDApKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCl9KSksdGhpcy5mZWF0dXJlc1NlcnZpY2Uu''@;'; put 'put ''cmVjdXJzaW9uPXt0ZW1wbGF0ZTp0aGlzLnRlbXBsYXRlLHJvb3Q6dH19bmdPbkRlc3Ryb3koKXt0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb24mJnRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7''@;'; put 'put ''cmV0dXJuIG5ldyh0fHxuKSh6ZShGYyksemUocncpLHplKFVsKSl9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNsclJlY3Vyc2l2ZUZvciIsIiIsImNsclJlY3Vyc2l2ZUZvck9mIiwiIl1dLGlucHV0czp7bm9kZXM6WzAsImNsclJlY3Vyc2l2ZUZvck9mIiwibm9k''@;'; put 'put ''ZXMiXSxnZXRDaGlsZHJlbjpbMCwiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLCJnZXRDaGlsZHJlbiJdfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltpdV19KSxufSkoKSxJYWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzUmVxdWVzdD1uZXcgTXIsdGhpcy5f''@;'; put 'put ''Zm9jdXNDaGFuZ2U9bmV3IE1yfWdldCBmb2N1c1JlcXVlc3QoKXtyZXR1cm4gdGhpcy5fZm9jdXNSZXF1ZXN0LmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c0NoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c0NoYW5nZS5hc09ic2VydmFibGUoKX1mb2N1c05vZGUodCl7dCYmdGhpcy5fZm9jdXNS''@;'; put 'put ''ZXF1ZXN0Lm5leHQodC5ub2RlSWQpfWJyb2FkY2FzdEZvY3VzZWROb2RlKHQpe3RoaXMuZm9jdXNlZE5vZGVJZCE9PXQmJih0aGlzLmZvY3VzZWROb2RlSWQ9dCx0aGlzLl9mb2N1c0NoYW5nZS5uZXh0KHQpKX1mb2N1c1BhcmVudCh0KXt0JiZ0aGlzLmZvY3VzTm9kZSh0LnBhcmVudCl9Zm9j''@;'; put 'put ''dXNGaXJzdFZpc2libGVOb2RlKCl7dGhpcy5mb2N1c05vZGUodGhpcy5yb290Tm9kZU1vZGVscyYmdGhpcy5yb290Tm9kZU1vZGVsc1swXSl9Zm9jdXNMYXN0VmlzaWJsZU5vZGUoKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmRMYXN0VmlzaWJsZUluVHJlZSgpKX1mb2N1c05vZGVBYm92ZSh0''@;'; put 'put ''KXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmROb2RlQWJvdmUodCkpfWZvY3VzTm9kZUJlbG93KHQpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZE5vZGVCZWxvdyh0KSl9Zm9jdXNOb2RlU3RhcnRzV2l0aCh0LHIpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZENsb3Nlc3ROb2RlU3RhcnRzV2l0''@;'; put 'put ''aCh0LHIpKX1maW5kU2libGluZ3ModCl7cmV0dXJuIHQucGFyZW50P3QucGFyZW50LmNoaWxkcmVuOnRoaXMucm9vdE5vZGVNb2RlbHN9ZmluZExhc3RWaXNpYmxlSW5Ob2RlKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuZXhwYW5kZWQmJnQuY2hpbGRyZW4ubGVuZ3RoPjApe2NvbnN0IHI9''@;'; put 'put ''dC5jaGlsZHJlbjtyZXR1cm4gdGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUocltyLmxlbmd0aC0xXSl9cmV0dXJuIHR9ZmluZE5leHRGb2N1c2FibGUodCl7aWYoIXQpcmV0dXJuIG51bGw7Y29uc3Qgcj10aGlzLmZpbmRTaWJsaW5ncyh0KSxpPXIuaW5kZXhPZih0KTtyZXR1cm4gaTxyLmxl''@;'; put 'put ''bmd0aC0xP3JbaSsxXTppPT09ci5sZW5ndGgtMT90aGlzLmZpbmROZXh0Rm9jdXNhYmxlKHQucGFyZW50KTpudWxsfWZpbmRMYXN0VmlzaWJsZUluVHJlZSgpe3JldHVybiB0aGlzLmZpbmRMYXN0VmlzaWJsZUluTm9kZSh0aGlzLnJvb3ROb2RlTW9kZWxzJiZ0aGlzLnJvb3ROb2RlTW9kZWxz''@;'; put 'put ''Lmxlbmd0aCYmdGhpcy5yb290Tm9kZU1vZGVsc1t0aGlzLnJvb3ROb2RlTW9kZWxzLmxlbmd0aC0xXSl9ZmluZE5vZGVBYm92ZSh0KXtpZighdClyZXR1cm4gbnVsbDtjb25zdCByPXRoaXMuZmluZFNpYmxpbmdzKHQpLGk9ci5pbmRleE9mKHQpO3JldHVybiAwPT09aT90LnBhcmVudDppPjA/''@;'; put 'put ''dGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUocltpLTFdKTpudWxsfWZpbmROb2RlQmVsb3codCl7cmV0dXJuIHQ/dC5leHBhbmRlZCYmdC5jaGlsZHJlbi5sZW5ndGg+MD90LmNoaWxkcmVuWzBdOnRoaXMuZmluZE5leHRGb2N1c2FibGUodCk6bnVsbH1maW5kRGVzY2VuZGVudE5vZGVTdGFy''@;'; put 'put ''dHNXaXRoKHQscil7aWYoci5leHBhbmRlZCYmci5jaGlsZHJlbi5sZW5ndGg+MClmb3IoY29uc3QgaSBvZiByLmNoaWxkcmVuKXtjb25zdCBvPXRoaXMuZmluZE5vZGVTdGFydHNXaXRoKHQsaSk7aWYobylyZXR1cm4gb31yZXR1cm4gbnVsbH1maW5kU2libGluZ05vZGVTdGFydHNXaXRoKHQs''@;'; put 'put ''cil7Y29uc3QgaT10aGlzLmZpbmRTaWJsaW5ncyhyKTtmb3IobGV0IGE9aS5pbmRleE9mKHIpKzE7YTxpLmxlbmd0aDthKyspe2NvbnN0IHU9dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgodCxpW2FdKTtpZih1KXJldHVybiB1fXJldHVybiBudWxsfWZpbmRSb290Tm9kZVN0YXJ0c1dpdGgodCxy''@;'; put 'put ''KXtmb3IoY29uc3QgaSBvZiB0aGlzLnJvb3ROb2RlTW9kZWxzKXtpZihyLnBhcmVudCYmci5wYXJlbnQ9PT1pKWNvbnRpbnVlO2NvbnN0IG89dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgodCxpKTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfWZpbmROb2RlU3RhcnRzV2l0aCh0LHIpe3JldHVy''@;'; put 'put ''biByP3IudGV4dENvbnRlbnQuc3RhcnRzV2l0aCh0KT9yOnRoaXMuZmluZERlc2NlbmRlbnROb2RlU3RhcnRzV2l0aCh0LHIpOm51bGx9ZmluZENsb3Nlc3ROb2RlU3RhcnRzV2l0aCh0LHIpe2lmKCFyKXJldHVybiBudWxsO2NvbnN0IGk9dGhpcy5maW5kRGVzY2VuZGVudE5vZGVTdGFydHNX''@;'; put 'put ''aXRoKHQscik7aWYoaSlyZXR1cm4gaTtjb25zdCBvPXRoaXMuZmluZFNpYmxpbmdOb2RlU3RhcnRzV2l0aCh0LHIpO3JldHVybiBvfHwodGhpcy5maW5kUm9vdE5vZGVTdGFydHNXaXRoKHQscil8fHRoaXMuZmluZE5vZGVTdGFydHNXaXRoKHQsci5wYXJlbnQpKX19cmV0dXJuIG4uXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7Y2xhc3MgTnl0IGV4dGVuZHMgR01le2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5wYXJlbnQ9ZSxlJiZlLl9hZGRDaGlsZCh0aGlz''@;'; put 'put ''KSx0aGlzLmNoaWxkcmVuPVtdfWRlc3Ryb3koKXt0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuX3JlbW92ZUNoaWxkKHRoaXMpLHN1cGVyLmRlc3Ryb3koKX1fYWRkQ2hpbGQoZSl7dGhpcy5jaGlsZHJlbi5wdXNoKGUpfV9yZW1vdmVDaGlsZChlKXtjb25zdCB0PXRoaXMuY2hpbGRyZW4uaW5k''@;'; put 'put ''ZXhPZihlKTt0Pi0xJiZ0aGlzLmNoaWxkcmVuLnNwbGljZSh0LDEpfX1sZXQgZDc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0KXt0aGlzLmVsPXR9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJhY3RpdmUiKX1hY3RpdmF0''@;'; put 'put ''ZSgpe3RoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsaWNrJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUobm8pKX0sbi5cdTAyNzVkaXI9JHIoe3R5cGU6''@;'; put 'put ''bixzZWxlY3RvcnM6W1siIiw4LCJjbHItdHJlZW5vZGUtbGluayJdXSxzdGFuZGFsb25lOiExfSksbn0pKCksTzM9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0LHIsaSxvLGEsbCx1LGcpe3RoaXMucGxhdGZvcm1JZD10LHRoaXMuZmVhdHVyZXNTZXJ2aWNlPWksdGhpcy5leHBhbmRTZXJ2''@;'; put 'put ''aWNlPW8sdGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5mb2N1c01hbmFnZXI9bCx0aGlzLmVsZW1lbnRSZWY9dSx0aGlzLnNlbGVjdGVkQ2hhbmdlPW5ldyBLcighMSksdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgS3IsdGhpcy5TVEFURVM9ZzEsdGhpcy5pc01vZGVsTG9hZGluZz0hMSx0aGlz''@;'; put 'put ''Lm5vZGVJZD1QaCgpLHRoaXMuY29udGVudENvbnRhaW5lclRhYmluZGV4PS0xLHRoaXMuc2tpcEVtaXRDaGFuZ2U9ITEsdGhpcy50eXBlQWhlYWRLZXlCdWZmZXI9IiIsdGhpcy50eXBlQWhlYWRLZXlFdmVudD1uZXcgTXIsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX21vZGVsPWkucmVj''@;'; put 'put ''dXJzaW9uP2cudmlldz9nLnZpZXcuY29udGV4dC5jbHJNb2RlbDpnLl9sVmlld1s4XS5jbHJNb2RlbDpuZXcgTnl0KHI/ci5fbW9kZWw6bnVsbCksdGhpcy5fbW9kZWwubm9kZUlkPXRoaXMubm9kZUlkfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9tb2RlbC5kaXNhYmxlZH1zZXQgZGlz''@;'; put 'put ''YWJsZWQodCl7dGhpcy5fbW9kZWwuZGlzYWJsZWQ9dH1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5fbW9kZWwuc2VsZWN0ZWQudmFsdWV9c2V0IHNlbGVjdGVkKHQpe3RoaXMuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGU9ITAsKG51bGw9PT10fHx0eXBlb2YgdD4idSIpJiYodD1nMS5V''@;'; put 'put ''TlNFTEVDVEVEKSwiYm9vbGVhbiI9PXR5cGVvZiB0JiYodD10P2cxLlNFTEVDVEVEOmcxLlVOU0VMRUNURUQpLHRoaXMuc2tpcEVtaXRDaGFuZ2U9ITAsdGhpcy5fbW9kZWwuc2V0U2VsZWN0ZWQodCx0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcix0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdl''@;'; put 'put ''ciksdGhpcy5za2lwRW1pdENoYW5nZT0hMX1nZXQgZXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkfXNldCBleHBhbmRlZCh0KXt0aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9dH1zZXQgY2xyRm9yVHlwZUFoZWFkKHQpe3RoaXMuX21vZGVsLnRleHRDb250''@;'; put 'put ''ZW50PXFNZSh0fHx0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudCl9Z2V0IGFyaWFTZWxlY3RlZCgpe3JldHVybiB0aGlzLmlzU2VsZWN0YWJsZSgpP3RoaXMuX21vZGVsLnNlbGVjdGVkLnZhbHVlPT09ZzEuU0VMRUNURUQ6ISF0aGlzLnRyZWVOb2RlTGluaz8uYWN0''@;'; put 'put ''aXZlfHxudWxsfWdldCB0cmVlTm9kZUxpbmsoKXtyZXR1cm4gdGhpcy50cmVlTm9kZUxpbmtMaXN0JiZ0aGlzLnRyZWVOb2RlTGlua0xpc3QuZmlyc3R9Z2V0IGlzUGFyZW50KCl7cmV0dXJuIHRoaXMuX21vZGVsLmNoaWxkcmVuJiZ0aGlzLl9tb2RlbC5jaGlsZHJlbi5sZW5ndGg+MH1uZ09u''@;'; put 'put ''SW5pdCgpe3RoaXMuX21vZGVsLmV4cGFuZGVkPXRoaXMuZXhwYW5kZWQsdGhpcy5fbW9kZWwuZGlzYWJsZWQ9dGhpcy5kaXNhYmxlZCx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9tb2RlbC5zZWxlY3RlZC5waXBlKHN1KCgpPT4hdGhpcy5za2lwRW1pdENoYW5nZSkpLnN1YnNjcmli''@;'; put 'put ''ZSh0PT57dGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHQpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRDaGFuZ2Uuc3Vic2NyaWJlKHQ9Pnt0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodCksdGhpcy5fbW9kZWwuZXhwYW5kZWQ9dH0pKSx0aGlz''@;'; put 'put ''LnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmZvY3VzTWFuYWdlci5mb2N1c1JlcXVlc3Quc3Vic2NyaWJlKHQ9Pnt0aGlzLm5vZGVJZD09PXQmJnRoaXMuZm9jdXNUcmVlTm9kZSgpfSksdGhpcy5mb2N1c01hbmFnZXIuZm9jdXNDaGFuZ2Uuc3Vic2NyaWJlKHQ9Pnt0aGlzLmNoZWNrVGFiSW5k''@;'; put 'put ''ZXgodCl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fbW9kZWwubG9hZGluZyQucGlwZShOYigwKSkuc3Vic2NyaWJlKHQ9PnRoaXMuaXNNb2RlbExvYWRpbmc9dCkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudHlwZUFoZWFkS2V5''@;'; put 'put ''RXZlbnQucGlwZShOYigyMDApKS5zdWJzY3JpYmUodD0+e3RoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZVN0YXJ0c1dpdGgodCx0aGlzLl9tb2RlbCksdGhpcy50eXBlQWhlYWRLZXlCdWZmZXI9IiJ9KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fbW9kZWwudGV4dENvbnRlbnR8fCh0aGlz''@;'; put 'put ''Ll9tb2RlbC50ZXh0Q29udGVudD1xTWUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQpKX1uZ09uRGVzdHJveSgpe3RoaXMuX21vZGVsLmRlc3Ryb3koKSx0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCh0PT50LnVuc3Vic2NyaWJlKCkpfWlzRXhwYW5kYWJsZSgp''@;'; put 'put ''e3JldHVybiB0eXBlb2YgdGhpcy5leHBhbmRhYmxlPCJ1Ij90aGlzLmV4cGFuZGFibGU6ISF0aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kYWJsZXx8dGhpcy5pc1BhcmVudH1pc1NlbGVjdGFibGUoKXtyZXR1cm4gdGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZX1mb2N1c1RyZWVOb2Rl''@;'; put 'put ''KCl7Y29uc3QgdD10aGlzLmNvbnRlbnRDb250YWluZXIubmF0aXZlRWxlbWVudDtIYyh0aGlzLnBsYXRmb3JtSWQpJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09dCYmKHRoaXMuc2V0VGFiSW5kZXgoMCksdC5mb2N1cygpLHQuc2Nyb2xsSW50b1ZpZXcoe2Jsb2NrOiJuZWFyZXN0Iixpbmxp''@;'; put 'put ''bmU6Im5lYXJlc3QifSkpfWJyb2FkY2FzdEZvY3VzT25Db250YWluZXIoKXt0aGlzLmZvY3VzTWFuYWdlci5icm9hZGNhc3RGb2N1c2VkTm9kZSh0aGlzLm5vZGVJZCl9b25LZXlEb3duKHQpe3N3aXRjaChqb2UodCksdG0odC5rZXkpKXtjYXNlIE1vLkFycm93VXA6dGhpcy5mb2N1c01hbmFn''@;'; put 'put ''ZXIuZm9jdXNOb2RlQWJvdmUodGhpcy5fbW9kZWwpO2JyZWFrO2Nhc2UgTW8uQXJyb3dEb3duOnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZUJlbG93KHRoaXMuX21vZGVsKTticmVhaztjYXNlIE1vLkFycm93UmlnaHQ6dGhpcy5leHBhbmRPckZvY3VzRmlyc3RDaGlsZCgpO2JyZWFrO2Nh''@;'; put 'put ''c2UgTW8uQXJyb3dMZWZ0OnRoaXMuY29sbGFwc2VPckZvY3VzUGFyZW50KCk7YnJlYWs7Y2FzZSBNby5Ib21lOnQucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0ZpcnN0VmlzaWJsZU5vZGUoKTticmVhaztjYXNlIE1vLkVuZDp0LnByZXZlbnREZWZhdWx0KCksdGhp''@;'; put 'put ''cy5mb2N1c01hbmFnZXIuZm9jdXNMYXN0VmlzaWJsZU5vZGUoKTticmVhaztjYXNlIE1vLkVudGVyOnRoaXMudG9nZ2xlRXhwYW5kT3JUcmlnZ2VyRGVmYXVsdCgpO2JyZWFrO2Nhc2UgTW8uU3BhY2U6Y2FzZSBNby5TcGFjZWJhcjp0LnByZXZlbnREZWZhdWx0KCksdGhpcy50b2dnbGVFeHBh''@;'; put 'put ''bmRPclRyaWdnZXJEZWZhdWx0KCk7YnJlYWs7ZGVmYXVsdDppZih0aGlzLl9tb2RlbC50ZXh0Q29udGVudCYmZnVuY3Rpb24gU3Z0KG4pe2NvbnN0IGU9bi5rZXk7cmV0dXJuIGUudG9Mb3dlckNhc2UoKSE9PWUudG9VcHBlckNhc2UoKXx8ZT49IjAiJiZlPD0iOSJ9KHQpKXJldHVybiB0aGlz''@;'; put 'put ''LnR5cGVBaGVhZEtleUJ1ZmZlcis9dC5rZXksdm9pZCB0aGlzLnR5cGVBaGVhZEtleUV2ZW50Lm5leHQodGhpcy50eXBlQWhlYWRLZXlCdWZmZXIpfXRoaXMudHlwZUFoZWFkS2V5QnVmZmVyPSIifXNldFRhYkluZGV4KHQpe3RoaXMuY29udGVudENvbnRhaW5lclRhYmluZGV4PXQsdGhpcy5j''@;'; put 'put ''b250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdC50b1N0cmluZygpKX1jaGVja1RhYkluZGV4KHQpe0hjKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMubm9kZUlkIT09dCYmLTEhPT10aGlzLmNvbnRlbnRDb250YWluZXJUYWJpbmRleCYmdGhpcy5z''@;'; put 'put ''ZXRUYWJJbmRleCgtMSl9dG9nZ2xlRXhwYW5kT3JUcmlnZ2VyRGVmYXVsdCgpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmlzRXhwYW5kYWJsZSgpJiYhdGhpcy5pc1NlbGVjdGFibGUoKT90aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQ6dGhpcy50cmlnZ2VyRGVmYXVs''@;'; put 'put ''dEFjdGlvbigpKX1leHBhbmRPckZvY3VzRmlyc3RDaGlsZCgpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmV4cGFuZGVkP3RoaXMuaXNQYXJlbnQmJnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZUJlbG93KHRoaXMuX21vZGVsKTp0aGlzLmlzRXhwYW5kYWJsZSgpJiYodGhpcy5leHBhbmRTZXJ2''@;'; put 'put ''aWNlLmV4cGFuZGVkPSEwKSl9Y29sbGFwc2VPckZvY3VzUGFyZW50KCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuZXhwYW5kZWQ/dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSExOnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzUGFyZW50KHRoaXMuX21vZGVsKSl9dHJpZ2dlckRlZmF1bHRBY3Rp''@;'; put 'put ''b24oKXt0aGlzLnRyZWVOb2RlTGluaz90aGlzLnRyZWVOb2RlTGluay5hY3RpdmF0ZSgpOnRoaXMuaXNTZWxlY3RhYmxlKCkmJnRoaXMuX21vZGVsLnRvZ2dsZVNlbGVjdGlvbih0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1''@;'; put 'put ''cm4gbmV3KHR8fG4pKHplKGxkKSx6ZShuLDEyKSx6ZShydyksemUoTmYpLHplKGlsKSx6ZShJYWUpLHplKG5vKSx6ZShNbCkpfSxuLlx1MDI3NWNtcD1Qcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItdHJlZS1ub2RlIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKHQscixpKXtpZigxJnQm''@;'; put 'put ''JkZhKGksZDcsNCksMiZ0KXtsZXQgbztjaShvPXVpKCkpJiYoci50cmVlTm9kZUxpbmtMaXN0PW8pfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKHQscil7aWYoMSZ0JiZXbyhwOXQsNyxubyksMiZ0KXtsZXQgaTtjaShpPXVpKCkpJiYoci5jb250ZW50Q29udGFpbmVyPWkuZmlyc3QpfX0saG9zdFZh''@;'; put 'put ''cnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsyJnQmJndyKCJjbHItdHJlZS1ub2RlIiwhMCkoImRpc2FibGVkIixyLl9tb2RlbC5kaXNhYmxlZCl9LGlucHV0czp7ZXhwYW5kYWJsZTpbMCwiY2xyRXhwYW5kYWJsZSIsImV4cGFuZGFibGUiXSxkaXNhYmxlZDpbMCwiY2xyRGlzYWJs''@;'; put 'put ''ZWQiLCJkaXNhYmxlZCJdLHNlbGVjdGVkOlswLCJjbHJTZWxlY3RlZCIsInNlbGVjdGVkIl0sZXhwYW5kZWQ6WzAsImNsckV4cGFuZGVkIiwiZXhwYW5kZWQiXSxjbHJGb3JUeXBlQWhlYWQ6ImNsckZvclR5cGVBaGVhZCJ9LG91dHB1dHM6e3NlbGVjdGVkQ2hhbmdlOiJjbHJTZWxlY3RlZENo''@;'; put 'put ''YW5nZSIsZXhwYW5kZWRDaGFuZ2U6ImNsckV4cGFuZGVkQ2hhbmdlIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbYm8oW1lNZSxOZix7cHJvdmlkZTpFRCx1c2VFeGlzdGluZzpOZn1dKV0sbmdDb250ZW50U2VsZWN0b3JzOm05dCxkZWNsczoxMix2YXJzOjEyLGNvbnN0czpbWyJjb250ZW50''@;'; put 'put ''Q29udGFpbmVyIiwiIl0sWyJ0cmVlbm9kZUNvbnRlbnQiLCIiXSxbInJvbGUiLCJ0cmVlaXRlbSIsInRhYmluZGV4IiwiLTEiLDEsImNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIiLDMsImtleWRvd24iLCJmb2N1cyJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImJ1dHRv''@;'; put 'put ''biIsInRhYmluZGV4IiwiLTEiLCJjbGFzcyIsImNsci10cmVlbm9kZS1jYXJldCIsMywiZGlzYWJsZWQiLCJjbGljayIsImZvY3VzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY2hlY2tib3gtd3Jh''@;'; put 'put ''cHBlciBjbHItdHJlZW5vZGUtY2hlY2tib3giLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXRyZWVub2RlLWNvbnRlbnQiLDMsIm1vdXNldXAiLDQsIm5nSWYiXSxbMSwiY2xyLXRyZWVub2RlLWNoaWxkcmVuIl0sWzMsInBhcmVudCJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImJ1''@;'; put 'put ''dHRvbiIsInRhYmluZGV4IiwiLTEiLDEsImNsci10cmVlbm9kZS1jYXJldCIsMywiY2xpY2siLCJmb2N1cyIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlIiwxLCJjbHItdHJlZW5vZGUtY2FyZXQtaWNvbiJdLFsxLCJjbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXIiXSxbMSwiY2xy''@;'; put 'put ''LXRyZWVub2RlLXNwaW5uZXIiLCJzcGlubmVyIl0sWzEsImNsci1jaGVja2JveC13cmFwcGVyIiwiY2xyLXRyZWVub2RlLWNoZWNrYm94Il0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJ0eXBlIiwiY2hlY2tib3giLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItY2hlY2tib3giLDMsImNoYW5nZSIs''@;'; put 'put ''ImZvY3VzIiwiaWQiLCJkaXNhYmxlZCIsImNoZWNrZWQiLCJpbmRldGVybWluYXRlIl0sWzEsImNsci1jb250cm9sLWxhYmVsIiwzLCJmb3IiXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJjbHItdHJlZW5vZGUtY29udGVudCIsMywibW91c2V1cCJdLFsiY2xhc3MiLCJjbHItc3Itb25s''@;'; put 'put ''eSIsNCwibmdJZiJdLFsxLCJjbHItc3Itb25seSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpe2lmKDEmdCl7Y29uc3QgaT13bigpO2ZvKGc5dCksSigwLCJkaXYiLDIsMCksd3QoImtleWRvd24iLGZ1bmN0aW9uKGEpe3JldHVybiBZZShpKSxYZShyLm9uS2V5RG93bihhKSl9KSgiZm9jdXMi''@;'; put 'put ''LGZ1bmN0aW9uKCl7cmV0dXJuIFllKGkpLFhlKHIuYnJvYWRjYXN0Rm9jdXNPbkNvbnRhaW5lcigpKX0pLFluKDIsdjl0LDIsMiwiYnV0dG9uIiwzKSgzLF85dCwyLDAsImRpdiIsNCkoNCx5OXQsNCw2LCJkaXYiLDUpKDUsYjl0LDIsMSwiZGl2Iiw2KSg2LEM5dCwyLDEsIm5nLXRlbXBsYXRl''@;'; put 'put ''IixudWxsLDEsY2QpLHRlKCksSig4LCJkaXYiLDcpLFdyKDkpLFdyKDEwLDEpLEl0KDExLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiw4KSx0ZSgpfTImdCYmKHdyKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixyLmRpc2FibGVkKSxScigiYXJpYS1kaXNhYmxlZCIsci5kaXNhYmxlZCko''@;'; put 'put ''ImFyaWEtZXhwYW5kZWQiLHIuaXNFeHBhbmRhYmxlKCk/ci5leHBhbmRlZDpudWxsKSgiYXJpYS1zZWxlY3RlZCIsci5hcmlhU2VsZWN0ZWQpLGllKDIpLHJ0KCJuZ0lmIixyLmlzRXhwYW5kYWJsZSgpJiYhci5pc01vZGVsTG9hZGluZyYmIXIuZXhwYW5kU2VydmljZS5sb2FkaW5nKSxpZSgp''@;'; put 'put ''LHJ0KCJuZ0lmIixyLmV4cGFuZFNlcnZpY2UubG9hZGluZ3x8ci5pc01vZGVsTG9hZGluZyksaWUoKSxydCgibmdJZiIsci5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZSksaWUoKSxydCgibmdJZiIsIXIuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGUpLGllKDMpLHJ0KCJAdG9nZ2xlQ2hp''@;'; put 'put ''bGRyZW5BbmltIixyLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ/ImV4cGFuZGVkIjoiY29sbGFwc2VkIiksUnIoInJvbGUiLHIuaXNFeHBhbmRhYmxlKCkmJiFyLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24/Imdyb3VwIjpudWxsKSxpZSgzKSxydCgicGFyZW50IixyLl9tb2RlbCkpfSxkZXBl''@;'; put 'put ''bmRlbmNpZXM6W1lzLElmLEpzLFpNZV0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbUnAoInRvZ2dsZUNoaWxkcmVuQW5pbSIsW3BoKCJjb2xsYXBzZWQgPT4gZXhwYW5kZWQiLFt2bCh7aGVpZ2h0OjB9KSx5MCgyMDAsdmwoe2hlaWdodDoiKiJ9KSldKSxwaCgiZXhwYW5kZWQg''@;'; put 'put ''PT4gY29sbGFwc2VkIixbdmwoe2hlaWdodDoiKiJ9KSx5MCgyMDAsdmwoe2hlaWdodDowfSkpXSksa3ooImV4cGFuZGVkIix2bCh7aGVpZ2h0OiIqIiwib3ZlcmZsb3cteSI6InZpc2libGUifSkpLGt6KCJjb2xsYXBzZWQiLHZsKHtoZWlnaHQ6MH0pKV0pXX19KSxufSkoKTtmdW5jdGlvbiBx''@;'; put 'put ''TWUobil7cmV0dXJuIG4udG9Mb2NhbGVMb3dlckNhc2UoKS50cmltKCl9bGV0IFBwPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxyLGksbyxhKXt0aGlzLmZlYXR1cmVzU2VydmljZT10LHRoaXMuZm9jdXNNYW5hZ2VyU2VydmljZT1yLHRoaXMucmVuZGVyZXI9aSx0aGlzLmVsPW8sdGhp''@;'; put 'put ''cy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX2lzTXVsdGlTZWxlY3RhYmxlPSExO2NvbnN0IGw9YS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+Smcoby5uYXRpdmVFbGVtZW50LCJmb2N1c2luIikuc3Vic2NyaWJlKHU9Pnt1LnRhcmdldD09PW8ubmF0aXZlRWxlbWVudCYmKHIuZm9jdXNGaXJzdFZp''@;'; put 'put ''c2libGVOb2RlKCksaS5yZW1vdmVBdHRyaWJ1dGUoby5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIpKX0pKTt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChsKX1zZXQgbGF6eSh0KXt0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcj0hdH1nZXQgaXNNdWx0aVNlbGVjdGFibGUoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5faXNNdWx0aVNlbGVjdGFibGV9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRSb290Tm9kZXMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnJvb3ROb2Rlcy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0TXVsdGlTZWxlY3RhYmxlKCksdGhpcy5zZXRSb290Tm9k''@;'; put 'put ''ZXMoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHQ9PnQudW5zdWJzY3JpYmUoKSl9c2V0TXVsdGlTZWxlY3RhYmxlKCl7dGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZSYmdGhpcy5yb290Tm9kZXMubGVuZ3RoPjA/KHRoaXMuX2lzTXVsdGlTZWxl''@;'; put 'put ''Y3RhYmxlPSEwLHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiYXJpYS1tdWx0aXNlbGVjdGFibGUiLCJ0cnVlIikpOih0aGlzLl9pc011bHRpU2VsZWN0YWJsZT0hMSx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVs''@;'; put 'put ''ZW1lbnQsImFyaWEtbXVsdGlzZWxlY3RhYmxlIikpfXNldFJvb3ROb2Rlcygpe3RoaXMuZm9jdXNNYW5hZ2VyU2VydmljZS5yb290Tm9kZU1vZGVscz10aGlzLnJvb3ROb2Rlcy5tYXAodD0+dC5fbW9kZWwpLmZpbHRlcih0PT4hdC5wYXJlbnQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShydyksemUoSWFlKSx6ZShOdCksemUobm8pLHplKGdhKSl9LG4uXHUwMjc1Y21wPVByKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci10cmVlIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKHQscixpKXtpZigxJnQmJkZhKGksTzMsNCksMiZ0KXts''@;'; put 'put ''ZXQgbztjaShvPXVpKCkpJiYoci5yb290Tm9kZXM9byl9fSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezImdCYmUnIoInJvbGUiLCJ0cmVlIil9LGlucHV0czp7bGF6eTpbMCwiY2xyTGF6eSIsImxhenkiXX0sc3RhbmRh''@;'; put 'put ''bG9uZTohMSxmZWF0dXJlczpbYm8oW1lNZSxJYWVdKV0sbmdDb250ZW50U2VsZWN0b3JzOmVzLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWzMsImNoaWxkcmVuIiw0LCJuZ0lmIl0sWzMsImNoaWxkcmVuIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHQscil7MSZ0JiYoZm8oKSxXcigwKSxZbigxLFM5''@;'; put 'put ''dCwxLDEsImNsci1yZWN1cnNpdmUtY2hpbGRyZW4iLDApKSwyJnQmJihpZSgpLHJ0KCJuZ0lmIixyLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24pKX0sZGVwZW5kZW5jaWVzOltZcyxaTWVdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLEh5dD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7''@;'; put 'put ''emwuYWRkSWNvbnMock0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltxbyxXbCxXb2VdfSksbn0pKCksVnl0PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1J5dCxEeXQsSHl0XX0pLG59KSgpO2NvbnN0IEJ5dD1bImluZm8iLCJ3YXJuaW5nIiwiZGFuZ2VyIiwic3VjY2VzcyIsIm5ldXRyYWwi''@;'; put 'put ''LCJ1bmtub3duIiwibG9hZGluZyJdO2xldCBEYWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0KXt0aGlzLmNvbW1vblN0cmluZ3M9dCx0aGlzLmRlZmF1bHRJY29uU2hhcGU9ImluZm8tc3RhbmRhcmQiLHRoaXMuX2FsZXJ0SWNvblNoYXBlPSIiLHRoaXMuX2FsZXJ0VHlwZT0iaW5mbyJ9''@;'; put 'put ''Z2V0IGFsZXJ0VHlwZSgpe3JldHVybiB0aGlzLl9hbGVydFR5cGV9c2V0IGFsZXJ0VHlwZSh0KXtCeXQuaW5kZXhPZih0KT4tMSYmKHRoaXMuX2FsZXJ0VHlwZT10KX1nZXQgYWxlcnRJY29uU2hhcGUoKXtyZXR1cm4iIj09PXRoaXMuX2FsZXJ0SWNvblNoYXBlP3RoaXMuaWNvbkluZm9Gcm9t''@;'; put 'put ''VHlwZSh0aGlzLl9hbGVydFR5cGUpLnNoYXBlOnRoaXMuX2FsZXJ0SWNvblNoYXBlfXNldCBhbGVydEljb25TaGFwZSh0KXt0P3QhPT10aGlzLl9hbGVydEljb25TaGFwZSYmKHRoaXMuX2FsZXJ0SWNvblNoYXBlPXQpOnRoaXMuX2FsZXJ0SWNvblNoYXBlPSIifWdldCBhbGVydEljb25UaXRs''@;'; put 'put ''ZSgpe3JldHVybiB0aGlzLmljb25JbmZvRnJvbVR5cGUodGhpcy5fYWxlcnRUeXBlKS50aXRsZX1pY29uSW5mb0Zyb21UeXBlKHQpe2NvbnN0IHI9e3NoYXBlOiIiLGNzc0NsYXNzOiIiLHRpdGxlOiIifTtzd2l0Y2godCl7Y2FzZSJ3YXJuaW5nIjpyLnNoYXBlPSJ3YXJuaW5nLXN0YW5kYXJk''@;'; put 'put ''IixyLmNzc0NsYXNzPSJhbGVydC13YXJuaW5nIixyLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLndhcm5pbmc7YnJlYWs7Y2FzZSJkYW5nZXIiOnIuc2hhcGU9ImVycm9yLXN0YW5kYXJkIixyLmNzc0NsYXNzPSJhbGVydC1kYW5nZXIiLHIudGl0bGU9dGhpcy5jb21tb25TdHJpbmdz''@;'; put 'put ''LmtleXMuZGFuZ2VyO2JyZWFrO2Nhc2Uic3VjY2VzcyI6ci5zaGFwZT0ic3VjY2Vzcy1zdGFuZGFyZCIsci5jc3NDbGFzcz0iYWxlcnQtc3VjY2VzcyIsci50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zdWNjZXNzO2JyZWFrO2Nhc2UibmV1dHJhbCI6ci5zaGFwZT0ibm90ZSIsci5j''@;'; put 'put ''c3NDbGFzcz0iYWxlcnQtbmV1dHJhbCIsci50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5uZXV0cmFsO2JyZWFrO2Nhc2UidW5rbm93biI6ci5zaGFwZT0iaGVscCIsci5jc3NDbGFzcz0iYWxlcnQtbmV1dHJhbCIsci50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy51bmtub3du''@;'; put 'put ''O2JyZWFrO2Nhc2UibG9hZGluZyI6ci5zaGFwZT0ibG9hZGluZyIsci5jc3NDbGFzcz0iYWxlcnQtbmV1dHJhbCIsci50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy51bmtub3duO2JyZWFrO2RlZmF1bHQ6ci5zaGFwZT10aGlzLmRlZmF1bHRJY29uU2hhcGUsci5jc3NDbGFzcz0iYWxl''@;'; put 'put ''cnQtaW5mbyIsci50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5pbmZvfXJldHVybiByfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKShvcihpbCkpfSxuLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgp''@;'; put 'put ''LG1XPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9jaGFuZ2U9bmV3IE1yfWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KHQpe3QhPT10aGlzLl9jdXJy''@;'; put 'put ''ZW50JiYodGhpcy5fY3VycmVudD10LHRoaXMuX2NoYW5nZS5uZXh0KHQpKX1nZXQgYWN0aXZlQWxlcnRzKCl7cmV0dXJuIHRoaXMuYWxsQWxlcnRzJiZ0aGlzLmFsbEFsZXJ0cy5maWx0ZXIodD0+IXQuX2Nsb3NlZCl9Z2V0IGN1cnJlbnRBbGVydCgpe3JldHVybiB0aGlzLmFjdGl2ZUFsZXJ0''@;'; put 'put ''cyYmdGhpcy5hY3RpdmVBbGVydHNbdGhpcy5jdXJyZW50XX1zZXQgY3VycmVudEFsZXJ0KHQpe3RoaXMuY3VycmVudD10aGlzLmFjdGl2ZUFsZXJ0cy5pbmRleE9mKHQpfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmFjdGl2ZUFsZXJ0cyYmdGhpcy5hY3RpdmVBbGVydHMubGVuZ3RofHwwfW1h''@;'; put 'put ''bmFnZSh0KXt0aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmFsbEFsZXJ0cz10LHRoaXMuY3VycmVudD0ibnVtYmVyIj09dHlwZW9mIHRoaXMuX2N1cnJlbnQ/dGhpcy5fY3VycmVudDowLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVu''@;'; put 'put ''dCksdGhpcy5zdWJzY3JpcHRpb249dGhpcy5hbGxBbGVydHMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLmN1cnJlbnQ+PXRoaXMuYWxsQWxlcnRzLmxlbmd0aCYmKHRoaXMuY3VycmVudD1NYXRoLm1heCgwLHRoaXMuYWxsQWxlcnRzLmxlbmd0aC0xKSl9KX1uZXh0KCl7dGhpcy5fY3Vy''@;'; put 'put ''cmVudD10aGlzLmN1cnJlbnQ9PT10aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgtMT8wOnRoaXMuY3VycmVudCsxLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpfXByZXZpb3VzKCl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKHRoaXMuX2N1cnJlbnQ9MD09PXRoaXMuY3Vy''@;'; put 'put ''cmVudD90aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgtMTp0aGlzLmN1cnJlbnQtMSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9b3BlbigpezAhPT10aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgmJih0aGlzLmN1cnJlbnRBbGVydHx8KHRoaXMuX2N1cnJlbnQ9MCksdGhpcy5fY2hh''@;'; put 'put ''bmdlLm5leHQodGhpcy5fY3VycmVudCkpfWNsb3NlKHQpezAhPT10aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgmJih0JiYodGhpcy5fY3VycmVudD1NYXRoLm1heCgwLHRoaXMuY3VycmVudC0xKSksdGhpcy5fY2hhbmdlLm5leHQodGhpcy5fY3VycmVudCkpfWRlc3Ryb3koKXt0aGlzLnN1YnNj''@;'; put 'put ''cmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksWkQ9KCgpPT57Y2xhc3Mgbntjb25z''@;'; put 'put ''dHJ1Y3Rvcih0LHIsaSxvLGEsbCl7dGhpcy5pY29uU2VydmljZT10LHRoaXMuY2RyPXIsdGhpcy5tdWx0aUFsZXJ0U2VydmljZT1pLHRoaXMuY29tbW9uU3RyaW5ncz1vLHRoaXMucmVuZGVyZXI9YSx0aGlzLmhvc3RFbGVtZW50PWwsdGhpcy5pc1NtYWxsPSExLHRoaXMuY2xvc2FibGU9ITAs''@;'; put 'put ''dGhpcy5pc0FwcExldmVsPSExLHRoaXMuY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuYWxlcnRDbG9zZUJ1dHRvbkFyaWFMYWJlbCx0aGlzLl9jbG9zZWRDaGFuZ2VkPW5ldyBLcighMSksdGhpcy5fY2xvc2VkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1b''@;'; put 'put ''XSx0aGlzLl9pc0xpZ2h0d2VpZ2h0PSExfWdldCBpc0xpZ2h0d2VpZ2h0KCl7cmV0dXJuIHRoaXMuX2lzTGlnaHR3ZWlnaHR9c2V0IGlzTGlnaHR3ZWlnaHQodCl7dGhpcy5faXNMaWdodHdlaWdodD10LHRoaXMuY29uZmlnQWxlcnRUeXBlKHRoaXMuX29yaWdBbGVydFR5cGUpfWdldCBhbGVy''@;'; put 'put ''dFR5cGUoKXtyZXR1cm4gdGhpcy5pY29uU2VydmljZS5hbGVydFR5cGV9c2V0IGFsZXJ0VHlwZSh0KXt0aGlzLl9vcmlnQWxlcnRUeXBlPXQsdGhpcy5jb25maWdBbGVydFR5cGUodCl9c2V0IGFsZXJ0SWNvblNoYXBlKHQpe3RoaXMuaWNvblNlcnZpY2UuYWxlcnRJY29uU2hhcGU9dH1zZXQg''@;'; put 'put ''Y2xvc2VkKHQpe3QmJiF0aGlzLl9jbG9zZWQ/dGhpcy5jbG9zZSgpOiF0JiZ0aGlzLl9jbG9zZWQmJnRoaXMub3BlbigpfWdldCBhbGVydENsYXNzKCl7cmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuaWNvbkluZm9Gcm9tVHlwZSh0aGlzLmljb25TZXJ2aWNlLmFsZXJ0VHlwZSkuY3NzQ2xhc3N9''@;'; put 'put ''Z2V0IGhpZGRlbigpe3JldHVybiB0aGlzLl9oaWRkZW59c2V0IGhpZGRlbih0KXt0IT09dGhpcy5faGlkZGVuJiYodGhpcy5faGlkZGVuPXQsdGhpcy5faGlkZGVuP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCJhbGVydC1oaWRkZW4iKTp0''@;'; put 'put ''aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwiYWxlcnQtaGlkZGVuIiksdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpKX1uZ09uSW5pdCgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UmJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubXVs''@;'; put 'put ''dGlBbGVydFNlcnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLmhpZGRlbj10aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydCE9PXRoaXN9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCh0PT50LnVuc3Vic2NyaWJlKCkpfWNvbmZpZ0Fs''@;'; put 'put ''ZXJ0VHlwZSh0KXt0aGlzLmljb25TZXJ2aWNlLmFsZXJ0VHlwZT10fW9wZW4oKXt0aGlzLl9jbG9zZWQ9ITEsdGhpcy5tdWx0aUFsZXJ0U2VydmljZSYmdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5vcGVuKCksdGhpcy5fY2xvc2VkQ2hhbmdlZC5lbWl0KCExKX1jbG9zZSgpe2lmKCF0aGlzLmNs''@;'; put 'put ''b3NhYmxlKXJldHVybjtjb25zdCB0PXRoaXMubXVsdGlBbGVydFNlcnZpY2U/LmN1cnJlbnRBbGVydD09PXRoaXM7dGhpcy5fY2xvc2VkPSEwLHRoaXMubXVsdGlBbGVydFNlcnZpY2U/LmFjdGl2ZUFsZXJ0cyYmdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jbG9zZSh0KSx0aGlzLl9jbG9zZWRD''@;'; put 'put ''aGFuZ2VkLmVtaXQoITApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShEYWUpLHplKFVsKSx6ZShtVyw4KSx6ZShpbCksemUoTnQpLHplKG5vKSl9LG4uXHUwMjc1Y21wPVByKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1hbGVydCJdXSxpbnB1''@;'; put 'put ''dHM6e2lzU21hbGw6WzAsImNsckFsZXJ0U2l6ZVNtYWxsIiwiaXNTbWFsbCJdLGNsb3NhYmxlOlswLCJjbHJBbGVydENsb3NhYmxlIiwiY2xvc2FibGUiXSxpc0FwcExldmVsOlswLCJjbHJBbGVydEFwcExldmVsIiwiaXNBcHBMZXZlbCJdLGNsckNsb3NlQnV0dG9uQXJpYUxhYmVsOiJjbHJD''@;'; put 'put ''bG9zZUJ1dHRvbkFyaWFMYWJlbCIsaXNMaWdodHdlaWdodDpbMCwiY2xyQWxlcnRMaWdodHdlaWdodCIsImlzTGlnaHR3ZWlnaHQiXSxhbGVydFR5cGU6WzAsImNsckFsZXJ0VHlwZSIsImFsZXJ0VHlwZSJdLGFsZXJ0SWNvblNoYXBlOlswLCJjbHJBbGVydEljb24iLCJhbGVydEljb25TaGFw''@;'; put 'put ''ZSJdLGNsb3NlZDpbMCwiY2xyQWxlcnRDbG9zZWQiLCJjbG9zZWQiXX0sb3V0cHV0czp7X2Nsb3NlZENoYW5nZWQ6ImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbYm8oW0RhZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6ZXMsZGVjbHM6MSx2YXJzOjEsY29u''@;'; put 'put ''c3RzOltbImNsYXNzIiwiYWxlcnQiLDMsIm5nQ2xhc3MiLCJhbGVydC1zbSIsImFsZXJ0LWxpZ2h0d2VpZ2h0IiwiYWxlcnQtYXBwLWxldmVsIiw0LCJuZ0lmIl0sWzEsImFsZXJ0IiwzLCJuZ0NsYXNzIl0sWzEsImFsZXJ0LWl0ZW1zIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjbG9z''@;'; put 'put ''ZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImNsb3NlIiwzLCJjbGljayJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24odCxyKXsxJnQmJihmbygpLFluKDAsTTl0LDQsOCwiZGl2IiwwKSksMiZ0JiZydCgibmdJZiIsIXIuX2Ns''@;'; put 'put ''b3NlZCl9LGRlcGVuZGVuY2llczpbRmgsWXMsSnNdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLEtNZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQpe3RoaXMuaWNvblNlcnZpY2U9dH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoRGFlKSl9''@;'; put 'put ''LG4uXHUwMjc1Y21wPVByKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1hbGVydC1pdGVtIl1dLGhvc3RBdHRyczpbMSwiYWxlcnQtaXRlbSJdLHN0YW5kYWxvbmU6ITEsbmdDb250ZW50U2VsZWN0b3JzOmVzLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImFsZXJ0LWljb24td3JhcHBlciJd''@;'; put 'put ''LFsiY2xhc3MiLCJhbGVydC1zcGlubmVyIiwiY2xySW5saW5lIiwiIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFsZXJ0LWljb24iLCJyb2xlIiwiaW1nIiw0LCJuZ0lmIl0sWyJjbHJJbmxpbmUiLCIiLDEsImFsZXJ0LXNwaW5uZXIiXSxbInJvbGUiLCJpbWciLDEsImFsZXJ0LWljb24iXV0sdGVt''@;'; put 'put ''cGxhdGU6ZnVuY3Rpb24odCxyKXsxJnQmJihmbygpLEooMCwiZGl2IiwwKSxZbigxLFQ5dCwxLDAsImNsci1zcGlubmVyIiwxKSgyLHg5dCwxLDIsImNkcy1pY29uIiwyKSx0ZSgpLFdyKDMpKSwyJnQmJihpZSgpLHJ0KCJuZ0lmIiwibG9hZGluZyI9PT1yLmljb25TZXJ2aWNlLmFsZXJ0SWNv''@;'; put 'put ''blNoYXBlKSxpZSgpLHJ0KCJuZ0lmIiwibG9hZGluZyIhPT1yLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlKSl9LGRlcGVuZGVuY2llczpbWXMsSnMsejJdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLEdEPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXty''@;'; put 'put ''ZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NWRpcj0kcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLDgsImFsZXJ0LXRleHQiXV0sc3RhbmRhbG9uZTohMX0pLG59KSgpLFhNZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscil7dGhpcy5tdWx0aUFsZXJ0U2VydmljZT10LHRoaXMuY29tbW9u''@;'; put 'put ''U3RyaW5ncz1yLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdlPW5ldyBLcighMSksdGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZT1uZXcgS3J9Z2V0IGN1cnJlbnRBbGVydCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydH1zZXQgY3VycmVudEFsZXJ0KHQpe3Qm''@;'; put 'put ''Jih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydD10KX1nZXQgY3VycmVudEFsZXJ0SW5kZXgoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50fXNldCBjdXJyZW50QWxlcnRJbmRleCh0KXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQ9dH1nZXQg''@;'; put 'put ''cHJldmlvdXNBbGVydEFyaWFMYWJlbCgpe2NvbnN0IHQ9dGhpcy5jdXJyZW50QWxlcnRJbmRleCsxO3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuYWxlcnRQcmV2aW91c0FsZXJ0QXJpYUxhYmVsLHtDVVJSRU5UOigxPT09dD90aGlzLm11''@;'; put 'put ''bHRpQWxlcnRTZXJ2aWNlLmNvdW50OnQtMSkudG9TdHJpbmcoKSxDT1VOVDp0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50LnRvU3RyaW5nKCl9KX1nZXQgbmV4dEFsZXJ0QXJpYUxhYmVsKCl7Y29uc3QgdD10aGlzLmN1cnJlbnRBbGVydEluZGV4KzE7cmV0dXJuIHRoaXMuY29tbW9uU3Ry''@;'; put 'put ''aW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5hbGVydE5leHRBbGVydEFyaWFMYWJlbCx7Q1VSUkVOVDoodD09PXRoaXMubXVsdGlBbGVydFNlcnZpY2UuY291bnQ/MTp0KzEpLnRvU3RyaW5nKCksQ09VTlQ6dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudC50b1N0cmluZygp''@;'; put 'put ''fSl9bmdPbkluaXQoKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlQ2hhbmdlcz10aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKHQ9Pnt0aGlzLmN1cnJlbnRBbGVydEluZGV4Q2hhbmdlLmVtaXQodCksdGhpcy5jdXJyZW50QWxlcnRDaGFuZ2UuZW1pdCh0aGlzLm11bHRp''@;'; put 'put ''QWxlcnRTZXJ2aWNlLmFjdGl2ZUFsZXJ0c1t0XSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2VDaGFuZ2VzLnVuc3Vic2NyaWJlKCl9cGFnZVVwKCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5uZXh0KCl9cGFnZURvd24oKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLnBy''@;'; put 'put ''ZXZpb3VzKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKG1XKSx6ZShpbCkpfSxuLlx1MDI3NWNtcD1Qcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItYWxlcnRzLXBhZ2VyIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHQs''@;'; put 'put ''cil7MiZ0JiZ3cigiYWxlcnRzLXBhZ2VyIiwhMCl9LGlucHV0czp7Y3VycmVudEFsZXJ0OlswLCJjbHJDdXJyZW50QWxlcnQiLCJjdXJyZW50QWxlcnQiXSxjdXJyZW50QWxlcnRJbmRleDpbMCwiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJjdXJyZW50QWxlcnRJbmRleCJdfSxvdXRwdXRzOntj''@;'; put 'put ''dXJyZW50QWxlcnRDaGFuZ2U6ImNsckN1cnJlbnRBbGVydENoYW5nZSIsY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U6ImNsckN1cnJlbnRBbGVydEluZGV4Q2hhbmdlIn0sc3RhbmRhbG9uZTohMSxkZWNsczo5LHZhcnM6Nixjb25zdHM6W1sxLCJhbGVydHMtcGFnZXItY29udHJvbCJdLFsxLCJh''@;'; put 'put ''bGVydHMtcGFnZS1kb3duIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJhbGVydHMtcGFnZXItYnV0dG9uIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsImxlZnQiXSxbMSwiYWxlcnRzLXBhZ2VyLXRleHQiXSxbMSwiYWxlcnRzLXBhZ2UtdXAiXSxbInNoYXBlIiwiYW5n''@;'; put 'put ''bGUiLCJkaXJlY3Rpb24iLCJyaWdodCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpezEmdCYmKEooMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLnBhZ2VEb3duKCl9KSxJdCgzLCJjZHMtaWNvbiIsMyksdGUoKSgpLEoo''@;'; put 'put ''NCwiZGl2Iiw0KSxTZSg1KSx0ZSgpLEooNiwiZGl2Iiw1KSg3LCJidXR0b24iLDIpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gci5wYWdlVXAoKX0pLEl0KDgsImNkcy1pY29uIiw2KSx0ZSgpKCkoKSksMiZ0JiYoaWUoMiksUnIoImFyaWEtbGFiZWwiLHIucHJldmlvdXNBbGVydEFy''@;'; put 'put ''aWFMYWJlbCksaWUoKSxScigidGl0bGUiLHIuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzKSxpZSgyKSxOaCgiIixyLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQrMSwiIC8gIixyLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50KSxpZSgyKSxScigiYXJpYS1sYWJlbCIsci5uZXh0QWxlcnRB''@;'; put 'put ''cmlhTGFiZWwpLGllKCksUnIoInRpdGxlIixyLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0KSl9LGRlcGVuZGVuY2llczpbSnNdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFFNZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQpe3RoaXMubXVsdGlBbGVydFNlcnZpY2U9dCx0aGlzLmN1cnJl''@;'; put 'put ''bnRBbGVydENoYW5nZT1uZXcgS3IoITEpLHRoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLnN1YnNjcmlwdGlvbnM9W119c2V0IGFsbEFsZXJ0cyh0KXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLm1hbmFnZSh0KX1zZXQgX2lucHV0Q3VycmVudEluZGV4KHQpe051''@;'; put 'put ''bWJlci5pc0ludGVnZXIodCkmJnQ+PTAmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQ9dCl9Z2V0IGN1cnJlbnRBbGVydEluZGV4KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudH1zZXQgY3VycmVudEFsZXJ0SW5kZXgodCl7dGhpcy5tdWx0aUFsZXJ0U2Vy''@;'; put 'put ''dmljZS5jdXJyZW50PXR9Z2V0IGN1cnJlbnRBbGVydCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydH1zZXQgY3VycmVudEFsZXJ0KHQpe3QmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydD10KX1nZXQgYWxlcnRzKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''YWxsQWxlcnRzLmZpbHRlcih0PT4hMT09PXQuaGlkZGVuKX1nZXQgY3VycmVudEFsZXJ0VHlwZSgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydD90aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydC5hbGVydFR5cGU6IiJ9bmdBZnRlckNvbnRlbnRJ''@;'; put 'put ''bml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSh0PT57dGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZS5uZXh0KHQpLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdlLm5leHQodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5j''@;'; put 'put ''dXJyZW50QWxlcnQpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2godD0+dC51bnN1YnNjcmliZSgpKSx0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmRlc3Ryb3koKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUobVcp''@;'; put 'put ''KX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWFsZXJ0cyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbih0LHIsaSl7aWYoMSZ0JiZGYShpLFpELDQpLDImdCl7bGV0IG87Y2kobz11aSgpKSYmKHIuYWxsQWxlcnRzPW8pfX0saG9zdFZhcnM6MTIsaG9zdEJpbmRp''@;'; put 'put ''bmdzOmZ1bmN0aW9uKHQscil7MiZ0JiZ3cigiYWxlcnRzIiwhMCkoImFsZXJ0LWRhbmdlciIsImRhbmdlciI9PXIuY3VycmVudEFsZXJ0VHlwZSkoImFsZXJ0LWluZm8iLCJpbmZvIj09ci5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtc3VjY2VzcyIsInN1Y2Nlc3MiPT1yLmN1cnJlbnRBbGVy''@;'; put 'put ''dFR5cGUpKCJhbGVydC13YXJuaW5nIiwid2FybmluZyI9PXIuY3VycmVudEFsZXJ0VHlwZSkoImFsZXJ0LW5ldXRyYWwiLCJuZXV0cmFsIj09ci5jdXJyZW50QWxlcnRUeXBlKX0saW5wdXRzOntfaW5wdXRDdXJyZW50SW5kZXg6WzAsImNsckN1cnJlbnRBbGVydEluZGV4IiwiX2lucHV0Q3Vy''@;'; put 'put ''cmVudEluZGV4Il0sY3VycmVudEFsZXJ0OlswLCJjbHJDdXJyZW50QWxlcnQiLCJjdXJyZW50QWxlcnQiXX0sb3V0cHV0czp7Y3VycmVudEFsZXJ0Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRDaGFuZ2UiLGN1cnJlbnRBbGVydEluZGV4Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRJbmRleENoYW5n''@;'; put 'put ''ZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2JvKFttV10pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6azl0LGRlY2xzOjMsdmFyczoxLGNvbnN0czpbWzEsImFsZXJ0cy13cmFwcGVyIl0sWzMsImNsckN1cnJlbnRBbGVydEluZGV4Iiw0LCJuZ0lmIl0sWzMsImNsckN1cnJlbnRBbGVydEluZGV4''@;'; put 'put ''Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKHQscil7MSZ0JiYoZm8oQTl0KSxKKDAsImRpdiIsMCksWW4oMSxSOXQsMSwxLCJjbHItYWxlcnRzLXBhZ2VyIiwxKSxXcigyKSx0ZSgpKSwyJnQmJihpZSgpLHJ0KCJuZ0lmIixyLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50PjEpKX0sZGVwZW5kZW5jaWVz''@;'; put 'put ''OltZcyxYTWVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpibG9ja30iXX0pLG59KSgpLEpNZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7emwuYWRkSWNvbnModW9lLFVndCx6Z3QsV2d0LGRvZSxZZ3QsY0QpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7''@;'; put 'put ''cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltxbyxXbCxHb2UsZ01dfSksbn0pKCksanl0PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3''@;'; put 'put ''NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W0pNZV19KSxufSkoKSxlVGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcih0KXt0aGlzLl9kb2N1bWVudD10fXN0b3BTY3JvbGxpbmcoKXt0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoIm5vLXNjcm9s''@;'; put 'put ''bGluZyIpfXJlc3VtZVNjcm9sbGluZygpe3RoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCJuby1zY3JvbGxpbmciKSYmdGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCJuby1zY3JvbGxpbmciKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQp''@;'; put 'put ''e3JldHVybiBuZXcodHx8bikob3IoVGwpKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx0VGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuZmFkZU1vdmU9ImZhZGVEb3duIix0aGlzLmJhY2tkcm9wPSEwfX1yZXR1cm4gbi5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSx4ZD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscixpLG8pe3RoaXMuX3Njcm9sbGluZ1Nl''@;'; put 'put ''cnZpY2U9dCx0aGlzLmNvbW1vblN0cmluZ3M9cix0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlPWksdGhpcy5jb25maWd1cmF0aW9uPW8sdGhpcy5tb2RhbElkPVBoKCksdGhpcy5fb3Blbj0hMSx0aGlzLl9vcGVuQ2hhbmdlZD1uZXcgS3IoITEpLHRoaXMuY2xvc2FibGU9ITAsdGhpcy5jbG9zZUJ1''@;'; put 'put ''dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSx0aGlzLnNpemU9Im1kIix0aGlzLnN0YXRpY0JhY2tkcm9wPSEwLHRoaXMuc2tpcEFuaW1hdGlvbj0hMSx0aGlzLnN0b3BDbG9zZT0hMSx0aGlzLmFsdENsb3NlPW5ldyBLcighMSksdGhpcy5ieXBhc3NTY3JvbGxT''@;'; put 'put ''ZXJ2aWNlPSExfWdldCBmYWRlTW92ZSgpe3JldHVybiB0aGlzLnNraXBBbmltYXRpb24/IiI6dGhpcy5jb25maWd1cmF0aW9uLmZhZGVNb3ZlfXNldCBmYWRlTW92ZSh0KXt0aGlzLmNvbmZpZ3VyYXRpb24uZmFkZU1vdmU9dH1nZXQgYmFja2Ryb3AoKXtyZXR1cm4gdGhpcy5jb25maWd1cmF0''@;'; put 'put ''aW9uLmJhY2tkcm9wfW5nT25DaGFuZ2VzKHQpeyF0aGlzLmJ5cGFzc1Njcm9sbFNlcnZpY2UmJnQmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LCJfb3BlbiIpJiYodC5fb3Blbi5jdXJyZW50VmFsdWU/KHRoaXMuX3Njcm9sbGluZ1NlcnZpY2Uuc3RvcFNjcm9sbGlu''@;'; put 'put ''ZygpLHRoaXMubW9kYWxTdGFja1NlcnZpY2UudHJhY2tNb2RhbE9wZW4odGhpcykpOnRoaXMuX3Njcm9sbGluZ1NlcnZpY2UucmVzdW1lU2Nyb2xsaW5nKCkpfW5nT25EZXN0cm95KCl7dGhpcy5fc2Nyb2xsaW5nU2VydmljZS5yZXN1bWVTY3JvbGxpbmcoKX1vcGVuKCl7dGhpcy5fb3Blbnx8''@;'; put 'put ''KHRoaXMuX29wZW49ITAsdGhpcy5fb3BlbkNoYW5nZWQuZW1pdCghMCksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFja01vZGFsT3Blbih0aGlzKSl9YmFja2Ryb3BDbGljaygpe3RoaXMuc3RhdGljQmFja2Ryb3A/dGhpcy50aXRsZS5uYXRpdmVFbGVtZW50LmZvY3VzKCk6dGhpcy5jbG9z''@;'; put 'put ''ZSgpfWNsb3NlKCl7dGhpcy5zdG9wQ2xvc2U/dGhpcy5hbHRDbG9zZS5lbWl0KCExKTohdGhpcy5jbG9zYWJsZXx8IXRoaXMuX29wZW58fCh0aGlzLl9vcGVuPSExKX1mYWRlRG9uZSh0KXsidm9pZCI9PT10LnRvU3RhdGUmJih0aGlzLl9vcGVuQ2hhbmdlZC5lbWl0KCExKSx0aGlzLm1vZGFs''@;'; put 'put ''U3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxDbG9zZSh0aGlzKSl9c2Nyb2xsVG9wKCl7dGhpcy5ib2R5RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKDAsMCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pKHplKGVUZSksemUoaWwpLHplKERN''@;'; put 'put ''ZSksemUodFRlKSl9LG4uXHUwMjc1Y21wPVByKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1tb2RhbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbih0LHIsaSl7aWYoMSZ0JiZGYShpLEk5dCw1KSwyJnQpe2xldCBvO2NpKG89dWkoKSkmJihyLm1vZGFsQ29udGVudFRlbXBsYXRlPW8uZmly''@;'; put 'put ''c3QpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKHQscil7aWYoMSZ0JiYoV28oTUVlLDUpLFdvKFRFZSw1KSksMiZ0KXtsZXQgaTtjaShpPXVpKCkpJiYoci50aXRsZT1pLmZpcnN0KSxjaShpPXVpKCkpJiYoci5ib2R5RWxlbWVudFJlZj1pLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdz''@;'; put 'put ''OmZ1bmN0aW9uKHQscil7MiZ0JiZ3cigib3BlbiIsci5fb3Blbil9LGlucHV0czp7X29wZW46WzAsImNsck1vZGFsT3BlbiIsIl9vcGVuIl0sY2xvc2FibGU6WzAsImNsck1vZGFsQ2xvc2FibGUiLCJjbG9zYWJsZSJdLGNsb3NlQnV0dG9uQXJpYUxhYmVsOlswLCJjbHJNb2RhbENsb3NlQnV0''@;'; put 'put ''dG9uQXJpYUxhYmVsIiwiY2xvc2VCdXR0b25BcmlhTGFiZWwiXSxzaXplOlswLCJjbHJNb2RhbFNpemUiLCJzaXplIl0sc3RhdGljQmFja2Ryb3A6WzAsImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCJzdGF0aWNCYWNrZHJvcCJdLHNraXBBbmltYXRpb246WzAsImNsck1vZGFsU2tpcEFuaW1h''@;'; put 'put ''dGlvbiIsInNraXBBbmltYXRpb24iXSxzdG9wQ2xvc2U6WzAsImNsck1vZGFsUHJldmVudENsb3NlIiwic3RvcENsb3NlIl0sbGFiZWxsZWRCeTpbMCwiY2xyTW9kYWxMYWJlbGxlZEJ5SWQiLCJsYWJlbGxlZEJ5Il0sYnlwYXNzU2Nyb2xsU2VydmljZTpbMCwiY2xyTW9kYWxPdmVycmlkZVNj''@;'; put 'put ''cm9sbFNlcnZpY2UiLCJieXBhc3NTY3JvbGxTZXJ2aWNlIl19LG91dHB1dHM6e19vcGVuQ2hhbmdlZDoiY2xyTW9kYWxPcGVuQ2hhbmdlIixhbHRDbG9zZToiY2xyTW9kYWxBbHRlcm5hdGVDbG9zZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2JvKFtdLFtlVGVdKSxpdV0sbmdDb250ZW50''@;'; put 'put ''U2VsZWN0b3JzOkw5dCxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1sidGl0bGUiLCIiXSxbImJvZHkiLCIiXSxbImNsYXNzIiwibW9kYWwiLDMsIm1vZGFsLWZ1bGwtc2NyZWVuIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1vZGFsLWJhY2tkcm9wIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwzLCJjbGlj''@;'; put 'put ''ayIsNCwibmdJZiJdLFsxLCJtb2RhbCJdLFsiY2RrVHJhcEZvY3VzIiwiIiwicm9sZSIsImRpYWxvZyIsImFyaWEtbW9kYWwiLCJ0cnVlIiwxLCJtb2RhbC1kaWFsb2ciLDMsImNka1RyYXBGb2N1c0F1dG9DYXB0dXJlIl0sWzEsImNsci1zci1vbmx5Il0sWyJjbGFzcyIsIm1vZGFsLWNvbnRl''@;'; put 'put ''bnQtd3JhcHBlciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWzEsIm1vZGFsLWNvbnRlbnQtd3JhcHBlciJdLFsxLCJtb2RhbC1jb250ZW50Il0sWzEsIm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSJdLFsiY2RrRm9jdXNJbml0aWFsIiwiIiwidGFiaW5kZXgiLCItMSIsMSwibW9kYWwtdGl0bGUt''@;'; put 'put ''d3JhcHBlciIsMywiaWQiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImNsb3NlIiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJtb2RhbC1ib2R5LXdyYXBwZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImNsb3NlIiwzLCJjbGljayJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiXSxbImFyaWEt''@;'; put 'put ''aGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtYmFja2Ryb3AiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHQscil7MSZ0JiYoZm8oRDl0KSxZbigwLEY5dCw3LDE2LCJkaXYiLDIpKDEsUDl0LDEsMSwiZGl2IiwzKSksMiZ0JiYocnQoIm5nSWYiLHIuX29wZW4pLGllKCkscnQoIm5nSWYi''@;'; put 'put ''LHIuYmFja2Ryb3ApKX0sZGVwZW5kZW5jaWVzOltZcyxfTSxKc10sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbUnAoImZhZGVNb3ZlIixbcGgoIiogPT4gZmFkZURvd24iLFt2bCh7b3BhY2l0eTowLHRyYW5zZm9ybToidHJhbnNsYXRlKDAsIC0yNSUpIn0pLHkwKCIwLjJzIGVh''@;'; put 'put ''c2UtaW4tb3V0IildKSxwaCgiZmFkZURvd24gPT4gKiIsW3kwKCIwLjJzIGVhc2UtaW4tb3V0Iix2bCh7b3BhY2l0eTowLHRyYW5zZm9ybToidHJhbnNsYXRlKDAsIC0yNSUpIn0pKV0pLHBoKCIqID0+IGZhZGVMZWZ0Iixbdmwoe29wYWNpdHk6MCx0cmFuc2Zvcm06InRyYW5zbGF0ZSgyNSUs''@;'; put 'put ''IDApIn0pLHkwKCIwLjJzIGVhc2UtaW4tb3V0IildKSxwaCgiZmFkZUxlZnQgPT4gKiIsW3kwKCIwLjJzIGVhc2UtaW4tb3V0Iix2bCh7b3BhY2l0eTowLHRyYW5zZm9ybToidHJhbnNsYXRlKDI1JSwgMCkifSkpXSldKSxScCgiZmFkZSIsW3BoKCJ2b2lkID0+ICoiLFt2bCh7b3BhY2l0eTow''@;'; put 'put ''fSkseTAoIjAuMnMgZWFzZS1pbi1vdXQiLHZsKHtvcGFjaXR5Oi44NX0pKV0pLHBoKCIqID0+IHZvaWQiLFt5MCgiMC4ycyBlYXNlLWluLW91dCIsdmwoe29wYWNpdHk6MH0pKV0pXSldfX0pLG59KSgpLG1oPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxyLGkpe3RoaXMucmVuZGVyZXI9''@;'; put 'put ''dCx0aGlzLmhvc3Q9cix0aGlzLnRhYmluZGV4PSIwIix0aGlzLnVubGlzdGVuZXJzPVtdLGkucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLm9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+dGhpcy5hZGRPclJlbW92ZVRhYkluZGV4KCkpLHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShy''@;'; put 'put ''Lm5hdGl2ZUVsZW1lbnQpLHRoaXMudW5saXN0ZW5lcnMucHVzaCh0Lmxpc3RlbihyLm5hdGl2ZUVsZW1lbnQsIm1vdXNldXAiLCgpPT57dGhpcy5hZGRPclJlbW92ZVRhYkluZGV4KCl9KSx0Lmxpc3RlbihyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZG93biIsKCk9Pnt0aGlzLnJlbW92ZVRhYklu''@;'; put 'put ''ZGV4KCl9KSl9KX1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy51bmxpc3RlbmVycy5sZW5ndGg7KXRoaXMudW5saXN0ZW5lcnMucG9wKCkoKTt0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLm9ic2VydmVyPW51bGx9YWRkVGFiSW5kZXgoKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0''@;'; put 'put ''ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLHRoaXMudGFiaW5kZXgpfXJlbW92ZVRhYkluZGV4KCl7dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4Iil9YWRkT3JSZW1vdmVUYWJJbmRleCgpe2NvbnN0IHQ9''@;'; put 'put ''dGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDt0JiZ0LmNsaWVudEhlaWdodDx0LnNjcm9sbEhlaWdodD90aGlzLmFkZFRhYkluZGV4KCk6dGhpcy5yZW1vdmVUYWJJbmRleCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKSh6ZShO''@;'; put 'put ''dCksemUobm8pLHplKGdhKSl9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsOCwibW9kYWwtYm9keSJdXSxzdGFuZGFsb25lOiExfSksbn0pKCksdlc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3psLmFkZEljb25zKGNEKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj1taSh7aW1wb3J0czpbcW8sSnosV2wsV2xdfSksbn0pKCksVXl0PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4p''@;'; put 'put ''fSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3FvLEp6LFdsLHZXLHZXLFdsXX0pLG59KSgpLG5UZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5tYXg9MTAwLHRoaXMudmFsdWU9MCx0aGlzLmV4dGVybmFsSWQ9IiJ9Z2V0IGlkKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX0lEfXNldCBpZCh0KXt0aGlzLl9JRD10LHRoaXMuZXh0ZXJuYWxJZD1udWxsfWdldCBwcm9ncmVzc0NsYXNzKCl7cmV0dXJuITB9c2V0IGNsckNvbXBhY3QodCl7dGhpcy5fY29tcGFjdD1wNCh0KX1nZXQgY29tcGFjdENsYXNzKCl7cmV0dXJuIHRoaXMuX2NvbXBhY3R9''@;'; put 'put ''c2V0IGNsckxhYmVsZWQodCl7dGhpcy5fbGFiZWxlZD1wNCh0KX1nZXQgbGFiZWxlZENsYXNzKCl7cmV0dXJuIHRoaXMuX2xhYmVsZWR9c2V0IGNsckZhZGUodCl7dGhpcy5fZmFkZT1wNCh0KX1nZXQgZmFkZUNsYXNzKCl7cmV0dXJuIHRoaXMuX2ZhZGV9c2V0IGNsckxvb3AodCl7dGhpcy5f''@;'; put 'put ''bG9vcD1wNCh0KX1nZXQgbG9vcENsYXNzKCl7cmV0dXJuIHRoaXMuX2xvb3B9Z2V0IHdhcm5pbmdDbGFzcygpe3JldHVybiJ3YXJuaW5nIj09PXRoaXMuY29sb3J9Z2V0IHN1Y2Nlc3NDbGFzcygpe3JldHVybiJzdWNjZXNzIj09PXRoaXMuY29sb3J9Z2V0IGRhbmdlckNsYXNzKCl7cmV0dXJu''@;'; put 'put ''ImRhbmdlciI9PT10aGlzLmNvbG9yfXNldCBjbHJGbGFzaCh0KXt0aGlzLl9mbGFzaD1wNCh0KX1nZXQgZmxhc2hDbGFzcygpe3JldHVybiB0aGlzLl9mbGFzaH1zZXQgY2xyRmxhc2hEYW5nZXIodCl7dGhpcy5fZmxhc2hEYW5nZXI9cDQodCl9Z2V0IGZsYXNoRGFuZ2VyQ2xhc3MoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fZmxhc2hEYW5nZXJ9Z2V0IGRpc3BsYXlWYWx1ZSgpe3JldHVybiB0aGlzLmRpc3BsYXl2YWw/dGhpcy5kaXNwbGF5dmFsOmAke3RoaXMudmFsdWV8fDB9JWB9ZGlzcGxheVN0cmluZ1ZhbHVlKCl7cmV0dXJuIHRoaXMuX2xhYmVsZWR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NWNtcD1Qcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItcHJvZ3Jlc3MtYmFyIl1dLGhvc3RWYXJzOjIxLGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LHIpezImdCYmKFJyKCJpZCIsci5leHRlcm5hbElkKSx3cigicHJvZ3Jlc3MiLHIu''@;'; put 'put ''cHJvZ3Jlc3NDbGFzcykoImNvbXBhY3QiLHIuY29tcGFjdENsYXNzKSgibGFiZWxlZCIsci5sYWJlbGVkQ2xhc3MpKCJwcm9ncmVzcy1mYWRlIixyLmZhZGVDbGFzcykoImxvb3AiLHIubG9vcENsYXNzKSgid2FybmluZyIsci53YXJuaW5nQ2xhc3MpKCJzdWNjZXNzIixyLnN1Y2Nlc3NDbGFz''@;'; put 'put ''cykoImRhbmdlciIsci5kYW5nZXJDbGFzcykoImZsYXNoIixyLmZsYXNoQ2xhc3MpKCJmbGFzaC1kYW5nZXIiLHIuZmxhc2hEYW5nZXJDbGFzcykpfSxpbnB1dHM6e21heDpbMCwiY2xyTWF4IiwibWF4Il0sZGlzcGxheXZhbDpbMCwiY2xyRGlzcGxheXZhbCIsImRpc3BsYXl2YWwiXSxjb2xv''@;'; put 'put ''cjpbMCwiY2xyQ29sb3IiLCJjb2xvciJdLHZhbHVlOlswLCJjbHJWYWx1ZSIsInZhbHVlIl0saWQ6ImlkIixjbHJDb21wYWN0OiJjbHJDb21wYWN0IixjbHJMYWJlbGVkOiJjbHJMYWJlbGVkIixjbHJGYWRlOiJjbHJGYWRlIixjbHJMb29wOiJjbHJMb29wIixjbHJGbGFzaDoiY2xyRmxhc2gi''@;'; put 'put ''LGNsckZsYXNoRGFuZ2VyOiJjbHJGbGFzaERhbmdlciJ9LHN0YW5kYWxvbmU6ITEsZGVjbHM6Mix2YXJzOjUsY29uc3RzOltbMywiaWQiXSxbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpezEmdCYmKEl0KDAsInByb2dyZXNzIiwwKSxZbigxLGo5dCwyLDEsInNwYW4iLDEpKSwy''@;'; put 'put ''JnQmJihydCgiaWQiLHIuaWQpLFJyKCJtYXgiLHIubWF4KSgidmFsdWUiLHIudmFsdWUpKCJkYXRhLWRpc3BsYXl2YWwiLHIuZGlzcGxheVZhbHVlKSxpZSgpLHJ0KCJuZ0lmIixyLmRpc3BsYXlTdHJpbmdWYWx1ZSgpKSl9LGRlcGVuZGVuY2llczpbWXNdLGVuY2Fwc3VsYXRpb246Mn0pLG59''@;'; put 'put ''KSgpLHp5dD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltxb119KSxufSkoKSxZeXQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigp''@;'; put 'put ''e3psLmFkZEljb25zKFpndCxHZ3QsdW9lLGRvZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3FvLFdsLGdNLFdsLGdNXX0pLG59KSgpLEt5dD0oKCk9Pntj''@;'; put 'put ''bGFzcyBue2NvbnN0cnVjdG9yKCl7emwuYWRkSWNvbnModW9lLGRvZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3FvLHZXLEpNZV19KSxufSkoKSxxMD0o''@;'; put 'put ''KCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltqeXQsVnl0LFdsLHZXLFdvZSxybSxXeixOdnQsVE1lLElfdCxlX3QsS3l0LFV5dCxDdnQs''@;'; put 'put ''Z00senl0LExELFl5dF19KSxufSkoKSxYeXQ9KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3RvcihyLGkpe3RoaXMuc2FzU2VydmljZT1yLHRoaXMubG9nZ2VyU2VydmljZT1pLHRoaXMuX3N1YnNjcmlwdGlvbj1uZXcgQXIsdGhpcy5sb2FkaW5nPSExLHRoaXMuYWxlcnRDbG9zZWQ9ITAs''@;'; put 'put ''dGhpcy5kYXRhPXt1c2VyOm51bGwscGFzczpudWxsfX1uZ09uSW5pdCgpeyJSZWRpcmVjdGVkIiE9PXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiYodGhpcy5fc3Vic2NyaXB0aW9uPXRoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5zdWJzY3JpYmUo''@;'; put 'put ''aT0+e3RoaXMuaXNBY3RpdmU9aTtsZXQgbz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJib2R5Iik7byYmKGk/by5jbGFzc0xpc3QuYWRkKCJzaG91bGQtbG9naW4iKTpvLmNsYXNzTGlzdC5yZW1vdmUoInNob3VsZC1sb2dpbiIpKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlv''@;'; put 'put ''bi51bnN1YnNjcmliZSgpfXN1Ym1pdCgpe3RoaXMubG9hZGluZ3x8KHRoaXMubG9hZGluZz0hMCx0aGlzLmRhdGEudXNlciYmdGhpcy5kYXRhLnBhc3MmJnRoaXMuc2FzU2VydmljZS5sb2dpbih0aGlzLmRhdGEudXNlcix0aGlzLmRhdGEucGFzcykudGhlbihyPT57dGhpcy5sb2FkaW5nPSEx''@;'; put 'put ''LHJ8fCh0aGlzLmVycm9yTXNnPSJVc2VybmFtZSBvciBwYXNzd29yZCBpbnZhbGlkIix0aGlzLmFsZXJ0Q2xvc2VkPSExKX0scj0+e3RoaXMubG9nZ2VyU2VydmljZS5sb2cociksdGhpcy5sb2FkaW5nPSExLHRoaXMuZXJyb3JNc2c9cix0aGlzLmFsZXJ0Q2xvc2VkPSExfSkpfXN0YXRpYyNl''@;'; put 'put ''PW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpKHplKGljKSx6ZSh4MykpfSx0aGlzLlx1MDI3NWNtcD1Qcih7dHlwZTplLHNlbGVjdG9yczpbWyJhcHAtbG9naW4iXV0sc3RhbmRhbG9uZTohMSxkZWNsczoyMCx2YXJzOjksY29uc3RzOltbMSwibG9n''@;'; put 'put ''aW4tc2lkZWJhci13cmFwcGVyIl0sWzEsImxvZ2luLXNpZGViYXIiLCJzaWRlQmFyUHJvcHMiXSxbInNyYyIsIi9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvZGF0YWNvbnRyb2xsZXItc3ZnIiwiYWx0IiwiZGF0YWNvbnRy''@;'; put 'put ''b2xsZXIgbG9nbyIsMSwibG9naW4tbG9nbyJdLFsxLCJsb2dpbiIsMywibmdTdWJtaXQiXSxbMSwidGl0bGUiXSxbMSwid2VsY29tZSJdLFsxLCJoaW50Il0sWzEsImxvZ2luLWdyb3VwIl0sWyJjbHJJbnB1dCIsIiIsIm5hbWUiLCJ1c2VyIiwidHlwZSIsInRleHQiLCJwbGFjZWhvbGRlciIs''@;'; put 'put ''IlVzZXJuYW1lIiwxLCJ1c2VybmFtZSIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNscklucHV0IiwiIiwibmFtZSIsInBhc3MiLCJ0eXBlIiwicGFzc3dvcmQiLCJwbGFjZWhvbGRlciIsIlBhc3N3b3JkIiwxLCJwYXNzd29yZCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwi''@;'; put 'put ''XSxbMywiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydENsb3NlZCJdLFsiY2xyLWFsZXJ0LWl0ZW0iLCIiLDEsImFsZXJ0LWl0ZW0iXSxbMSwiYWxlcnQtdGV4dCJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLDMs''@;'; put 'put ''ImNsckxvYWRpbmciLCJkaXNhYmxlZCJdLFsxLCJvdmVybGF5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGksbyl7MSZpJiYoSigwLCJkaXYiLDApKDEsImRpdiIsMSksSXQoMiwiaW1nIiwyKSxKKDMsImZvcm0iLDMpLHd0KCJuZ1N1Ym1pdCIsZnVuY3Rpb24oKXtyZXR1cm4gby5zdWJtaXQoKX0p''@;'; put 'put ''LEooNCwibGFiZWwiLDQpKDUsImgzIiw1KSxTZSg2LCJXZWxjb21lIHRvIiksdGUoKSxTZSg3LCIgRGF0YSBDb250cm9sbGVyICIpLEooOCwiaDQiLDYpLFNlKDksIkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiKSx0ZSgpKCksSigxMCwiZGl2Iiw3KSgxMSwiaW5wdXQiLDgpLGhpKCJu''@;'; put 'put ''Z01vZGVsQ2hhbmdlIixmdW5jdGlvbihsKXtyZXR1cm4gZmkoby5kYXRhLnVzZXIsbCl8fChvLmRhdGEudXNlcj1sKSxsfSksdGUoKSxKKDEyLCJpbnB1dCIsOSksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGwpe3JldHVybiBmaShvLmRhdGEucGFzcyxsKXx8KG8uZGF0YS5wYXNzPWwp''@;'; put 'put ''LGx9KSx0ZSgpLEooMTMsImNsci1hbGVydCIsMTApLGhpKCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24obCl7cmV0dXJuIGZpKG8uYWxlcnRDbG9zZWQsbCl8fChvLmFsZXJ0Q2xvc2VkPWwpLGx9KSxKKDE0LCJkaXYiLDExKSgxNSwic3BhbiIsMTIpLFNlKDE2KSx0ZSgpKCkoKSxK''@;'; put 'put ''KDE3LCJidXR0b24iLDEzKSxTZSgxOCwiIExvZyBpbiAiKSx0ZSgpKCkoKSgpLEl0KDE5LCJkaXYiLDE0KSx0ZSgpKSwyJmkmJih3cigiYWN0aXZlIixvLmlzQWN0aXZlKSxpZSgxMSksZGkoIm5nTW9kZWwiLG8uZGF0YS51c2VyKSxpZSgpLGRpKCJuZ01vZGVsIixvLmRhdGEucGFzcyksaWUo''@;'; put 'put ''KSxydCgiY2xyQWxlcnRUeXBlIiwiYWxlcnQtZGFuZ2VyIiksZGkoImNsckFsZXJ0Q2xvc2VkIixvLmFsZXJ0Q2xvc2VkKSxpZSgzKSxwcihvLmVycm9yTXNnKSxpZSgpLHJ0KCJjbHJMb2FkaW5nIixvLmxvYWRpbmcpKCJkaXNhYmxlZCIsby5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbTGIs''@;'; put 'put ''bHUsb2MsSWIsWGwsZDQsWkQsR0QsJDAsaW0sZWwsUGZdLGVuY2Fwc3VsYXRpb246Mn0pKX1yZXR1cm4gbigpLGV9KSgpO2Z1bmN0aW9uIFF5dChuLGUpezEmbiYmKEooMCwic3BhbiIsNiksU2UoMSwibG9hZGluZyIpLHRlKCkpfWZ1bmN0aW9uIEp5dChuLGUpezEmbiYmKEooMCwic3BhbiIs''@;'; put 'put ''NyksU2UoMSwibG9hZGVkIiksdGUoKSl9ZnVuY3Rpb24gZWJ0KG4sZSl7MSZuJiYoSigwLCJzcGFuIiw4KSxTZSgxLCJmYWlsZWQiKSx0ZSgpKX1mdW5jdGlvbiB0YnQobixlKXtpZigxJm4mJihKKDAsInAiKSgxLCJjb2RlIiksU2UoMiksdGUoKSxTZSgzLCIgXHhhMCAiKSx2dCg0LFF5dCwy''@;'; put 'put ''LDAsInNwYW4iLDYpLHZ0KDUsSnl0LDIsMCwic3BhbiIsNyksdnQoNixlYnQsMiwwLCJzcGFuIiw4KSx0ZSgpKSwyJm4pe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7aWUoMikscHIodC5wcm9ncmFtKSxpZSgyKSxfdCh0LnJ1bm5pbmc/NDotMSksaWUoKSxfdCghdC5ydW5uaW5nJiZ0LnN1Y2Nlc3Nm''@;'; put 'put ''dWw/NTotMSksaWUoKSxfdCh0LnJ1bm5pbmd8fHQuc3VjY2Vzc2Z1bD8tMTo2KX19ZnVuY3Rpb24gbmJ0KG4sZSl7aWYoMSZuJiYoSigwLCJjbHItc2lnbnBvc3QtY29udGVudCIsNSksX28oMSx0YnQsNyw0LCJwIixudWxsLENvKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtydCgiY2xyUG9z''@;'; put 'put ''aXRpb24iLCJib3R0b20tbWlkZGxlIiksaWUoKSx5byh0LnJlcXVlc3RzKX19bGV0IHJidD0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKCl7dGhpcy5sb2FkaW5nPSExLHRoaXMucmVxdWVzdHM9W10sdGhpcy5fbG9hZGluZ1N1Yj1uZXcgQXJ9bmdPbkluaXQoKXt9bmdPbkRlc3Ry''@;'; put 'put ''b3koKXt0aGlzLl9sb2FkaW5nU3ViLnVuc3Vic2NyaWJlKCl9c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSl9LHRoaXMuXHUwMjc1Y21wPVByKHt0eXBlOmUsc2VsZWN0b3JzOltbImFwcC1sb2FkaW5nLWluZGljYXRvciJdXSxzdGFu''@;'; put 'put ''ZGFsb25lOiExLGRlY2xzOjYsdmFyczo2LGNvbnN0czpbWzEsImxvYWRpbmctaW5kaWNhdG9yIl0sWyJjbHJTaWducG9zdFRyaWdnZXIiLCIiLDEsInNwaW5uZXIiLCJzcGlubmVyLXNtIiwic3Bpbm5lci1pbnZlcnNlIl0sWyJjbHJTaWducG9zdFRyaWdnZXIiLCIiLCJzaGFwZSIsImNoZWNr''@;'; put 'put ''Iiwic2l6ZSIsIjIwIiwxLCJpcy1pbmZvIl0sWyJjbHJTaWducG9zdFRyaWdnZXIiLCIiLCJzaGFwZSIsImVycm9yIiwic2l6ZSIsIjI0IiwxLCJpcy1lcnJvciJdLFszLCJjbHJQb3NpdGlvbiIsNCwiY2xySWZPcGVuIl0sWzMsImNsclBvc2l0aW9uIl0sWzEsInJ1bm5pbmciXSxbMSwic3Vj''@;'; put 'put ''Y2VzcyJdLFsxLCJmYWlsIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGksbyl7MSZpJiYoSigwLCJkaXYiLDApKDEsImNsci1zaWducG9zdCIpLEl0KDIsInNwYW4iLDEpKDMsImNsci1pY29uIiwyKSg0LCJjbHItaWNvbiIsMyksWW4oNSxuYnQsMywxLCJjbHItc2lnbnBvc3QtY29udGVudCIsNCks''@;'; put 'put ''dGUoKSgpKSwyJmkmJihpZSgyKSxPMigiZGlzcGxheSIsby5sb2FkaW5nPyJpbmxpbmUtYmxvY2siOiJub25lIiksaWUoKSxPMigiZGlzcGxheSIsIW8ubG9hZGluZyYmby5yZXF1ZXN0cy5sZW5ndGg+MCYmby5yZXF1ZXN0c1swXS5zdWNjZXNzZnVsPyJpbmxpbmUtYmxvY2siOiJub25lIiks''@;'; put 'put ''aWUoKSxPMigiZGlzcGxheSIsIW8ubG9hZGluZyYmby5yZXF1ZXN0cy5sZW5ndGg+MCYmIW8ucmVxdWVzdHNbMF0uc3VjY2Vzc2Z1bD8iaW5saW5lLWJsb2NrIjoibm9uZSIpKX0sZGVwZW5kZW5jaWVzOltjdSxMcCxxeixKRWUsJHpdLGVuY2Fwc3VsYXRpb246Mn0pKX1yZXR1cm4gbigpLGV9''@;'; put 'put ''KSgpO2Z1bmN0aW9uIGlidChuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2RzLWljb24iLDExKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCkudG9nZ2xlRGFya01vZGUoITApKX0pLHRlKCl9fWZ1bmN0aW9uIG9idChuLGUpe2lmKDEmbil7Y29uc3Qg''@;'; put 'put ''dD13bigpO0ooMCwiY2RzLWljb24iLDEyKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCkudG9nZ2xlRGFya01vZGUoITEpKX0pLHRlKCl9fWZ1bmN0aW9uIGFidChuLGUpe2lmKDEmbiYmKEooMCwic3BhbiIpLEl0KDEsImltZyIsMTMpLHRlKCkpLDImbil7Y29u''@;'; put 'put ''c3QgdD1UZSgpO2llKCkscnQoInNyYyIsemoodC5nZXRQaWN0dXJlVXJsKCkpLEtrKX19ZnVuY3Rpb24gc2J0KG4sZSl7aWYoMSZuJiYoSigwLCJzcGFuIiwxNCksU2UoMSksdGUoKSksMiZuKXtjb25zdCB0PVRlKCk7d3IoImhpZGRlbiIsMD09PXQuZmFpbGVkUmVxcy5sZW5ndGgpLGllKCks''@;'; put 'put ''cHIodC5mYWlsZWRSZXFzLmxlbmd0aCl9fWZ1bmN0aW9uIGxidChuLGUpe2lmKDEmbiYmKEooMCwic3BhbiIsMTUpLFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgpO3dyKCJoaWRkZW4iLDA9PT10LmRlYnVnTG9ncy5sZW5ndGgpLGllKCkscHIodC5kZWJ1Z0xvZ3MubGVuZ3RoKX19ZnVu''@;'; put 'put ''Y3Rpb24gY2J0KG4sZSl7MSZuJiZJdCgwLCJjbHItaWNvbiIsOSl9ZnVuY3Rpb24gdWJ0KG4sZSl7MSZuJiYoSigwLCJhIiwyMSkoMSwic3BhbiIsMjcpLFNlKDIsIkRvY3VtZW50YXRpb24iKSx0ZSgpKCkpfWZ1bmN0aW9uIGRidChuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xy''@;'; put 'put ''LWRyb3Bkb3duLW1lbnUiLDE2KSgxLCJkaXYiLDE3LDApKDMsImNsci10b2dnbGUtY29udGFpbmVyIiwxOCksd3QoImNsaWNrIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPW9vKDIpO3JldHVybiBYZShUZSgpLm9uRGVidWdSb3dDbGljayhpLG8pKX0pLEooNCwiY2xyLXRvZ2dsZS13cmFw''@;'; put 'put ''cGVyIikoNSwiaW5wdXQiLDE5KSxoaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgpO3JldHVybiBmaShvLnNhc2pzQ29uZmlnLmRlYnVnLGkpfHwoby5zYXNqc0NvbmZpZy5kZWJ1Zz1pKSxYZShpKX0pLHd0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBZZSh0KSxYZShUZSgpLm9uRGVidWdNb2RlQ2hhbmdlKCkpfSksdGUoKSxKKDYsImxhYmVsIiksU2UoNywiRGVidWcgTW9kZSIpLHRlKCkoKSgpKCksSig4LCJhIiwyMCksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLm9wZW5SZXF1ZXN0c01vZGFs''@;'; put 'put ''KCkpfSksSig5LCJzcGFuIiksU2UoMTAsIlNBUyBSZXF1ZXN0cyIpLHRlKCkoKSx2dCgxMSx1YnQsMywwLCJhIiwyMSksSXQoMTIsImRpdiIsMjIpLEooMTMsImEiLDIzKSgxNCwic3BhbiIpLFNlKDE1LCJTeXN0ZW0iKSx0ZSgpKCksSigxNiwiYSIsMjQpLHd0KCJjbGljayIsZnVuY3Rpb24o''@;'; put 'put ''aSl7cmV0dXJuIFllKHQpLFhlKFRlKCkubG9nb3V0KGkpKX0pLEooMTcsInNwYW4iKSxTZSgxOCwiTG9nIE91dCIpLHRlKCksSXQoMTksImNsci1pY29uIiwyNSksdGUoKSxKKDIwLCJkaXYiLDI2KSgyMSwic3BhbiIpLFNlKDIyKSx0ZSgpKCkoKX1pZigyJm4pe2NvbnN0IHQ9VGUoKTtpZSg1''@;'; put 'put ''KSxkaSgibmdNb2RlbCIsdC5zYXNqc0NvbmZpZy5kZWJ1ZyksaWUoNiksX3QodC5pc0RlcGxveVBhZ2U/LTE6MTEpLGllKDExKSxTcigidiIsdC5jb21taXRWZXIpfX1sZXQgaGJ0PSgoKT0+e3ZhciBuO2NsYXNzIGV7Y29uc3RydWN0b3IocixpLG8sYSl7dGhpcy51c2VyU2VydmljZT1yLHRo''@;'; put 'put ''aXMuc2FzU2VydmljZT1pLHRoaXMuZXZlbnRTZXJ2aWNlPW8sdGhpcy5yb3V0ZXI9YSx0aGlzLnVzZXJOYW1lPSJOb3QgbG9nZ2VkIGluIix0aGlzLnJlcVN1Yj1uZXcgQXIsdGhpcy51c2VyU3ViPW5ldyBBcix0aGlzLmFwcExvZ3M9W10sdGhpcy5kZWJ1Z0xvZ3M9W10sdGhpcy5mYWlsZWRS''@;'; put 'put ''ZXFzPVtdLHRoaXMuc2FzRXJyb3JzPVtdLHRoaXMuaXNWaXlhPSExLHRoaXMuc2FzanNDb25maWc9bmV3IHhwLlNBU2pzQ29uZmlnLHRoaXMucmVxdWVzdHNDb3VudD0wLHRoaXMuY29tbWl0VmVyPSIiLHRoaXMuZGFya01vZGU9dGhpcy5ldmVudFNlcnZpY2UuZGFya01vZGV9bmdPbkluaXQo''@;'; put 'put ''KXt0aGlzLnVzZXJTdWI9dGhpcy51c2VyU2VydmljZS51c2VyQ2hhbmdlLnN1YnNjcmliZShyPT57dGhpcy51c2VyTmFtZT1yLnVzZXJuYW1lfSksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSwiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNl''@;'; put 'put ''cnZlclR5cGUmJih0aGlzLmlzVml5YT0hMCksdGhpcy5jb21taXRWZXI9InY3LjE2LjAiLnJlcGxhY2UoInYiLCIiKSsiLmc3OTE4OWVmIn1uZ09uRGVzdHJveSgpe3RoaXMucmVxU3ViLnVuc3Vic2NyaWJlKCksdGhpcy51c2VyU3ViLnVuc3Vic2NyaWJlKCl9dG9nZ2xlRGFya01vZGUocil7''@;'; put 'put ''dGhpcy5ldmVudFNlcnZpY2UudG9nZ2xlRGFya01vZGUocil9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vcGVuUmVxdWVzdHNNb2RhbCgpfW9uRGVidWdNb2RlQ2hhbmdlKHIpe3RoaXMuc2FzanNDb25maWcmJnRoaXMuc2FzU2VydmljZS5zZXREZWJ1Z1N0YXRlKHRo''@;'; put 'put ''aXMuc2FzanNDb25maWcuZGVidWcpfW9uRGVidWdSb3dDbGljayhyLGkpe3Iuc3RvcFByb3BhZ2F0aW9uKCksVW4udXNlckRyb3Bkb3duQ29uZmlnLmNsb3NlT25EZWJ1Z0NsaWNrJiZzZXRUaW1lb3V0KCgpPT57aS5jbGljaygpfSwzMDApfWxvZ291dChyKXtyLnByZXZlbnREZWZhdWx0KCk7''@;'; put 'put ''dHJ5e3RoaXMuc2FzU2VydmljZS5sb2dvdXQoKX1jYXRjaChpKXtjb25zb2xlLmVycm9yKGkpfX1nZXRQaWN0dXJlVXJsKCl7cmV0dXJuYCR7dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmx9L2lkZW50aXRpZXMvdXNlcnMvJHt0aGlzLnVzZXJOYW1lfS9hdmF0YXIvY29udGVudGB9Z2V0IGlz''@;'; put 'put ''RGVwbG95UGFnZSgpe3JldHVybiB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpfXN0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpKHplKHBpZSksemUoaWMpLHplKHVkKSx6ZSh2YykpfSx0aGlzLlx1MDI3NWNtcD1Qcih7''@;'; put 'put ''dHlwZTplLHNlbGVjdG9yczpbWyJhcHAtaGVhZGVyLWFjdGlvbnMiXV0sc3RhbmRhbG9uZTohMSxkZWNsczoxNCx2YXJzOjcsY29uc3RzOltbImRyb3Bkb3duSXRlbURlYnVnIiwiIl0sWzEsImhlYWRlci1hY3Rpb25zIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxb''@;'; put 'put ''InNpemUiLCJtZCIsInNoYXBlIiwibW9vbiIsImludmVyc2UiLCJmYWxzZSIsInNvbGlkIiwiZmFsc2UiLDEsInRoZW1lLXRvZ2dsZS1pY29uIiwiY3Vyc29yLXBvaW50ZXIiXSxbInNpemUiLCJtZCIsInNoYXBlIiwic3VuIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMSwi''@;'; put 'put ''dGhlbWUtdG9nZ2xlLWljb24iLCJjdXJzb3ItcG9pbnRlciJdLFsxLCJhcHAtbmF2LWRyb3Bkb3duIl0sWyJjbHJEcm9wZG93blRvZ2dsZSIsIiIsMSwibmF2LXRleHQiLCJjb2xvci13aGl0ZSIsInVzZXItbmF2LXRvZ2dsZSJdLFsxLCJiYWRnZSIsImJhZGdlLWRhbmdlciIsMywiaGlkZGVu''@;'; put 'put ''Il0sWzEsImJhZGdlIiwiYmFkZ2UtaW5mbyIsMywiaGlkZGVuIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsImNhcmV0IGRvd24iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0Iiw0LCJjbHJJZk9wZW4iXSxbInNpemUiLCJtZCIsInNoYXBlIiwibW9vbiIsImludmVyc2Ui''@;'; put 'put ''LCJmYWxzZSIsInNvbGlkIiwiZmFsc2UiLDEsInRoZW1lLXRvZ2dsZS1pY29uIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaXplIiwibWQiLCJzaGFwZSIsInN1biIsImludmVyc2UiLCJmYWxzZSIsInNvbGlkIiwiZmFsc2UiLDEsInRoZW1lLXRvZ2dsZS1pY29uIiwiY3Vyc29y''@;'; put 'put ''LXBvaW50ZXIiLDMsImNsaWNrIl0sWyJhbHQiLCJwcm9maWxlIHBpY3R1cmUiLDEsImF2YXRhci1pbWciLDMsInNyYyJdLFsxLCJiYWRnZSIsImJhZGdlLWRhbmdlciJdLFsxLCJiYWRnZSIsImJhZGdlLWluZm8iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0Il0sWyJjbHJEcm9wZG93''@;'; put 'put ''bkl0ZW0iLCIiLDEsImRlYnVnLXN3aXRjaC1pdGVtIl0sWzEsInRvZ2dsZS1zd2l0Y2giLDMsImNsaWNrIl0sWyJpZCIsImRlYnVnLXRvZ2dsZTEiLCJ0eXBlIiwiY2hlY2tib3giLCJjbHJUb2dnbGUiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjbHJEcm9wZG93bkl0ZW0i''@;'; put 'put ''LCIiLDMsImNsaWNrIl0sWyJ0YXJnZXQiLCJfYmxhbmsiLCJocmVmIiwiaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvIiwiY2xyRHJvcGRvd25JdGVtIiwiIl0sWzEsInNlcGFyYXRvciJdLFsiaHJlZiIsIi4uLiIsInJvdXRlckxpbmsiLCIvc3lzdGVtIiwiY2xyRHJvcGRvd25JdGVt''@;'; put 'put ''IiwiIl0sWyJocmVmIiwiLi4uIiwiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJsb2dvdXQiLDEsImNsci1sb2dvdXQiXSxbMSwiY29weVJpZ2h0Il0sWzEsImRyb3Bkb3duLXRleHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oaSxv''@;'; put 'put ''KXsxJmkmJihKKDAsImRpdiIsMSkoMSwiZGl2IiwyKSx2dCgyLGlidCwxLDAsImNkcy1pY29uIiwzKSx2dCgzLG9idCwxLDAsImNkcy1pY29uIiw0KSx0ZSgpLEl0KDQsImFwcC1sb2FkaW5nLWluZGljYXRvciIpLEooNSwiY2xyLWRyb3Bkb3duIiw1KSg2LCJidXR0b24iLDYpKDcsInNwYW4i''@;'; put 'put ''KSxTZSg4KSx0ZSgpLHZ0KDksYWJ0LDIsMiwic3BhbiIpLHZ0KDEwLHNidCwyLDMsInNwYW4iLDcpLHZ0KDExLGxidCwyLDMsInNwYW4iLDgpLHZ0KDEyLGNidCwxLDAsImNsci1pY29uIiw5KSx0ZSgpLFluKDEzLGRidCwyMywzLCJjbHItZHJvcGRvd24tbWVudSIsMTApLHRlKCkoKSksMiZp''@;'; put 'put ''JiYoaWUoMiksX3Qoby5kYXJrTW9kZS52YWx1ZT8tMToyKSxpZSgpLF90KG8uZGFya01vZGUudmFsdWU/MzotMSksaWUoNSkscHIoby51c2VyTmFtZSksaWUoKSxfdCgiTm90IGxvZ2dlZCBpbiIhPT1vLnVzZXJOYW1lJiZvLmlzVml5YT85Oi0xKSxpZSgpLF90KG8uc2FzanNDb25maWcuZGVi''@;'; put 'put ''dWc/LTE6MTApLGllKCksX3Qoby5zYXNqc0NvbmZpZy5kZWJ1Zz8xMTotMSksaWUoKSxfdChvLmlzVml5YT8tMToxMikpfSxkZXBlbmRlbmNpZXM6W0gyLG9jLFhsLFAyLGN1LEpzLExwLGVsLFUyLEV2LEZmLG83LGpiLFViLHBNLHJidF0sZW5jYXBzdWxhdGlvbjoyfSkpfXJldHVybiBuKCks''@;'; put 'put ''ZX0pKCksbVRlPSgoKT0+e3ZhciBuO2NsYXNzIGV7Y29uc3RydWN0b3IoKXt0aGlzLmFsZXJ0cz1uZXcgTXJ9c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSl9LHRoaXMuXHUwMjc1cHJvdj1Kbih7dG9rZW46ZSxmYWN0b3J5OmUuXHUw''@;'; put 'put ''Mjc1ZmFjfSkpfXJldHVybiBuKCksZX0pKCk7ZnVuY3Rpb24gZmJ0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItYWxlcnQiLDEpLGhpKCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24oaSl7Y29uc3Qgbz1ZZSh0KS4kaW1wbGljaXQ7cmV0dXJuIGZpKG8uY2xvc2Vk''@;'; put 'put ''LGkpfHwoby5jbG9zZWQ9aSksWGUoaSl9KSx3dCgiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKDIpLm9uQWxlcnRDbG9zZSgpKX0pLEooMSwiZGl2IiwyKSgyLCJzcGFuIiwzKSxTZSgzKSx0ZSgpKCkoKX1pZigyJm4pe2NvbnN0IHQ9ZS4kaW1w''@;'; put 'put ''bGljaXQ7cnQoImNsckFsZXJ0VHlwZSIsdC50eXBlKSgiY2xyQWxlcnRBcHBMZXZlbCIsITApLGRpKCJjbHJBbGVydENsb3NlZCIsdC5jbG9zZWQpLGllKDMpLFNyKCIgIix0Lm1lc3NhZ2UsIiAiKX19ZnVuY3Rpb24gcGJ0KG4sZSl7aWYoMSZuJiYoSigwLCJjbHItYWxlcnRzIiksX28oMSxm''@;'; put 'put ''YnQsNCw0LCJjbHItYWxlcnQiLDAsQ28pLHRlKCkpLDImbil7Y29uc3QgdD1UZSgpO2llKCkseW8odC5hbGVydHMpfX1sZXQgZ2J0PSgoKT0+e3ZhciBuO2NsYXNzIGV7Y29uc3RydWN0b3Iocil7dGhpcy5fYWxlcnRzU2VydmljZT1yLHRoaXMuYWxlcnRzPVtdLHRoaXMuaGFzT3BlbkFsZXJ0''@;'; put 'put ''PSExLHRoaXMuYWxlcnRzU3ViPW5ldyBBcn1uZ09uSW5pdCgpe3RoaXMuYWxlcnRzU3ViPXRoaXMuX2FsZXJ0c1NlcnZpY2UuYWxlcnRzLnN1YnNjcmliZShyPT57dGhpcy5hbGVydHMucHVzaChyKSx0aGlzLmhhc09wZW5BbGVydD0hMCxyLmVyciYmY29uc29sZS5lcnJvcihyLmVycil9KX1v''@;'; put 'put ''bkFsZXJ0Q2xvc2UoKXt0aGlzLmhhc09wZW5BbGVydD10aGlzLmFsZXJ0cy5zb21lKHI9PiFyLmNsb3NlZCl9c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSkoemUobVRlKSl9LHRoaXMuXHUwMjc1Y21wPVByKHt0eXBlOmUsc2VsZWN0''@;'; put 'put ''b3JzOltbImFwcC1hbGVydHMiXV0sc3RhbmRhbG9uZTohMSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1szLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydEFwcExldmVsIiwiY2xyQWxlcnRDbG9zZWQiXSxbMywiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydEFw''@;'; put 'put ''cExldmVsIiwiY2xyQWxlcnRDbG9zZWQiXSxbMSwiYWxlcnQtaXRlbSJdLFsxLCJhbGVydC10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGksbyl7MSZpJiZ2dCgwLHBidCwzLDAsImNsci1hbGVydHMiKSwyJmkmJl90KG8uaGFzT3BlbkFsZXJ0PzA6LTEpfSxkZXBlbmRlbmNpZXM6W1pELFFN''@;'; put 'put ''ZSxHRF0sZW5jYXBzdWxhdGlvbjoyfSkpfXJldHVybiBuKCksZX0pKCksX1c9KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3Rvcigpe3RoaXMuY2xhc3Nlcz0iIn1uZ09uSW5pdCgpe31zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxl''@;'; put 'put ''KX0sdGhpcy5cdTAyNzVjbXA9UHIoe3R5cGU6ZSxzZWxlY3RvcnM6W1siY29udGFjdC1saW5rIl1dLGlucHV0czp7Y2xhc3NlczoiY2xhc3NlcyJ9LHN0YW5kYWxvbmU6ITEsZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbImhyZWYiLCJtYWlsdG86c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbz9z''@;'; put 'put ''dWJqZWN0PUxpY2VuY2UiLDMsIm5nQ2xhc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oaSxvKXsxJmkmJihKKDAsImEiLDApLFNlKDEsInN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKSx0ZSgpKSwyJmkmJih3cigidW5zZXQiLCIiIT09by5jbGFzc2VzKSxydCgibmdDbGFzcyIsby5jbGFzc2Vz''@;'; put 'put ''KSl9LGRlcGVuZGVuY2llczpbRmhdLGVuY2Fwc3VsYXRpb246Mn0pKX1yZXR1cm4gbigpLGV9KSgpLHZUZT0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKCl7dGhpcy5vcHRpb25zU3ViamVjdCQ9bmV3IE1yLHRoaXMucmVzdWx0Q2hhbmdlJD1uZXcgTXJ9b3BlbihyKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5vcHRpb25zU3ViamVjdCQubmV4dCh7b3BlbjohMCwuLi5yfSksdGhpcy5yZXN1bHRDaGFuZ2UkPW5ldyBNcix0aGlzLnJlc3VsdENoYW5nZSQuYXNPYnNlcnZhYmxlKCl9Y2xvc2Uocil7dGhpcy5vcHRpb25zU3ViamVjdCQubmV4dCh7b3BlbjohMX0pLHRoaXMucmVzdWx0Q2hhbmdl''@;'; put 'put ''JC5uZXh0KHtwYXNzd29yZDpyfSksdGhpcy5yZXN1bHRDaGFuZ2UkLmNvbXBsZXRlKCl9c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSl9LHRoaXMuXHUwMjc1cHJvdj1Kbih7dG9rZW46ZSxmYWN0b3J5OmUuXHUwMjc1ZmFjLHByb3Zp''@;'; put 'put ''ZGVkSW46InJvb3QifSkpfXJldHVybiBuKCksZX0pKCk7ZnVuY3Rpb24gbWJ0KG4sZSl7MSZuJiYoSigwLCJwIiw4KSxTZSgxLCJTb3JyeSB0aGF0IGRpZG4ndCB3b3JrLCB0cnkgYWdhaW4uIiksdGUoKSl9ZnVuY3Rpb24gdmJ0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJkaXYi''@;'; put 'put ''LDEpKDEsImNsci1tb2RhbCIsMikoMiwiaDMiLDMpLFNlKDMsIiBQYXNzd29yZCBQcm90ZWN0ZWQgRmlsZSAiKSx0ZSgpLEooNCwiZGl2Iiw0KSg1LCJwIiw1KSxTZSg2LCJQbGVhc2UgZW50ZXIgcGFzc3dvcmQ6IiksdGUoKSxKKDcsImlucHV0Iiw2LDApLGhpKCJuZ01vZGVsQ2hhbmdlIixm''@;'; put 'put ''dW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKCk7cmV0dXJuIGZpKG8ucGFzc3dvcmRJbnB1dCxpKXx8KG8ucGFzc3dvcmRJbnB1dD1pKSxYZShpKX0pLHRlKCkoKSxKKDksImRpdiIsNykoMTAsImRpdiIpLHZ0KDExLG1idCwyLDAsInAiLDgpLHRlKCksSigxMiwiZGl2Iiw5KSgxMywiYnV0''@;'; put 'put ''dG9uIiwxMCksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLmNsb3NlKCkpfSksU2UoMTQsIiBDYW5jZWwgIiksdGUoKSxKKDE1LCJidXR0b24iLDExKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3QgaT1vbyg4KTtyZXR1cm4gWGUoVGUoKS5jbG9z''@;'; put 'put ''ZShpLnZhbHVlKSl9KSxTZSgxNiwiIFVubG9jayAiKSx0ZSgpKCkoKSgpKCl9aWYoMiZuKXtjb25zdCB0PWUscj1vbyg4KSxpPVRlKCk7aWUoKSxydCgiY2xyTW9kYWxPcGVuIix0Lm9wZW4pKCJjbHJNb2RhbFNpemUiLCJtZCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksaWUoNiksZGkoIm5n''@;'; put 'put ''TW9kZWwiLGkucGFzc3dvcmRJbnB1dCksaWUoNCksX3QodC5lcnJvcj8xMTotMSksaWUoNCkscnQoImRpc2FibGVkIixyLnZhbHVlLmxlbmd0aDwxKX19bGV0IF9idD0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKHIpe3RoaXMuZXhjZWxQYXNzd29yZE1vZGFsU2VydmljZT1yLHRo''@;'; put 'put ''aXMub3B0aW9ucyQ9dGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlLm9wdGlvbnNTdWJqZWN0JCx0aGlzLmZpbGVVbmxvY2tFcnJvcj0hMSx0aGlzLnBhc3N3b3JkSW5wdXQ9IiJ9Y2xvc2Uocil7dGhpcy5wYXNzd29yZElucHV0PSIiLHRoaXMuZXhjZWxQYXNzd29yZE1vZGFsU2Vydmlj''@;'; put 'put ''ZS5jbG9zZShyKX1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKSh6ZSh2VGUpKX0sdGhpcy5cdTAyNzVjbXA9UHIoe3R5cGU6ZSxzZWxlY3RvcnM6W1siYXBwLWV4Y2VsLXBhc3N3b3JkLW1vZGFsIl1dLHN0YW5kYWxvbmU6ITEsZGVj''@;'; put 'put ''bHM6Mix2YXJzOjMsY29uc3RzOltbImZpbGVQYXNzd29yZElucHV0IiwiIl0sWzEsImV4Y2VsLXBhc3N3b3JkLXJvb3QiXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwi''@;'; put 'put ''Y29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsIm0tMCJdLFsiZGF0YS1scGlnbm9yZSIsInRydWUiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJpZCIsImZpbGVQYXNzd29yZElucHV0IiwidHlwZSIsInRl''@;'; put 'put ''eHQiLDEsImNsci1pbnB1dCIsImRpc2FibGUtcGFzc3dvcmQtbWFuYWdlciIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwibW9kYWwtZm9vdGVyIl0sWzEsIm0tMCIsImNvbG9yLXJlZCJdLFsxLCJidXR0b25zIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJi''@;'; put 'put ''dG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oaSxvKXtpZigxJmkmJih2dCgwLHZidCwxNyw2LCJkaXYiLDEpLEFjKDEsImFz''@;'; put 'put ''eW5jIikpLDImaSl7bGV0IGE7X3QoKGE9VGQoMSwxLG8ub3B0aW9ucyQpKT8wOi0xLGEpfX0sZGVwZW5kZW5jaWVzOltsdSxvYyxYbCx4ZCxtaCxtSV0sZW5jYXBzdWxhdGlvbjoyfSkpfXJldHVybiBuKCksZX0pKCkscUQ9KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3Rvcigpe3RoaXMu''@;'; put 'put ''ZmlsZU92ZXI9ITEsdGhpcy5maWxlRHJvcHBlZD1uZXcgS3IsdGhpcy5maWxlRHJhZ2dlZE92ZXI9bmV3IEtyfW9uRHJhZ092ZXIocil7ci5wcmV2ZW50RGVmYXVsdCgpLHIuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5jb250YWluc0ZpbGVzKHIpJiYhdGhpcy5maWxlT3ZlciYmKHRoaXMuZmls''@;'; put 'put ''ZU92ZXI9ITAsdGhpcy5maWxlRHJhZ2dlZE92ZXIuZW1pdCgpKX1vbkRyYWdMZWF2ZShyKXtyLnByZXZlbnREZWZhdWx0KCksci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmZpbGVPdmVyPSExfW9uZHJvcChyKXtyLnByZXZlbnREZWZhdWx0KCksci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmZp''@;'; put 'put ''bGVPdmVyPSExO2NvbnN0IGk9ci5kYXRhVHJhbnNmZXIuZmlsZXM7aS5sZW5ndGg+MCYmdGhpcy5maWxlRHJvcHBlZC5lbWl0KGkpfWNvbnRhaW5zRmlsZXMocil7aWYociYmci5kYXRhVHJhbnNmZXImJnIuZGF0YVRyYW5zZmVyLnR5cGVzKWZvcihsZXQgaT0wO2k8ci5kYXRhVHJhbnNmZXIu''@;'; put 'put ''dHlwZXMubGVuZ3RoO2krKylpZigiRmlsZXMiPT1yLmRhdGFUcmFuc2Zlci50eXBlc1tpXSlyZXR1cm4hMH1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKX0sdGhpcy5cdTAyNzVkaXI9JHIoe3R5cGU6ZSxzZWxlY3RvcnM6W1siIiwi''@;'; put 'put ''YXBwRHJhZ05kcm9wIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGksbyl7MSZpJiZ3dCgiZHJhZ292ZXIiLGZ1bmN0aW9uKGwpe3JldHVybiBvLm9uRHJhZ092ZXIobCl9KSgiZHJhZ2xlYXZlIixmdW5jdGlvbihsKXtyZXR1cm4gby5vbkRyYWdMZWF2ZShsKX0pKCJk''@;'; put 'put ''cm9wIixmdW5jdGlvbihsKXtyZXR1cm4gby5vbmRyb3AobCl9KSwyJmkmJndyKCJmaWxlb3ZlciIsby5maWxlT3Zlcil9LG91dHB1dHM6e2ZpbGVEcm9wcGVkOiJmaWxlRHJvcHBlZCIsZmlsZURyYWdnZWRPdmVyOiJmaWxlRHJhZ2dlZE92ZXIifSxzdGFuZGFsb25lOiExfSkpfXJldHVybiBu''@;'; put 'put ''KCksZX0pKCk7Y29uc3QgX1RlPSgpPT5bXTtmdW5jdGlvbiB5YnQobixlKXsxJm4mJihKKDAsInAiLDQpLFNlKDEsIk5vIHJlcXVlc3RzIG1hZGUiKSx0ZSgpKX1mdW5jdGlvbiBiYnQobixlKXsxJm4mJihKKDAsInNwYW4iKSxJdCgxLCJjbHItaWNvbiIsMTApLHRlKCkpfWZ1bmN0aW9uIHdi''@;'; put 'put ''dChuLGUpezEmbiYmKEooMCwic3BhbiIpLEl0KDEsImNsci1pY29uIiwxMSksdGUoKSl9ZnVuY3Rpb24gQ2J0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItdHJlZS1ub2RlIiwxNyksd3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGk9WWUodCkuJGltcGxpY2l0LG89VGUo''@;'; put 'put ''MykuJGluZGV4O3JldHVybiBYZShUZSgyKS5nb1RvTG9nTGluZShpLCJyZXF1ZXN0XyIrbywiZXJyb3IiKSl9KSxKKDEsImJ1dHRvbiIsMTgpLFNlKDIpLHRlKCkoKX1pZigyJm4pe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7aWUoMiksU3IoIiAiLHQsIiAiKX19ZnVuY3Rpb24gU2J0KG4sZSl7aWYo''@;'; put 'put ''MSZuJiYoSigwLCJjbHItdHJlZS1ub2RlIiwxMiksSXQoMSwiY2xyLWljb24iLDE2KSxTZSgyKSxfbygzLENidCwzLDEsImNsci10cmVlLW5vZGUiLG51bGwsQ28pLHRlKCkpLDImbil7Y29uc3QgdD1UZSgyKS4kaW1wbGljaXQ7aWUoMiksU3IoIiBFcnJvcnMgKCIsdC5sb2dFcnJvcnMubGVu''@;'; put 'put ''Z3RoLCIpICIpLGllKCkseW8odC5sb2dFcnJvcnN8fG1jKDEsX1RlKSl9fWZ1bmN0aW9uIEVidChuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLXRyZWUtbm9kZSIsMTcpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBpPVllKHQpLiRpbXBsaWNpdCxvPVRlKDMpLiRpbmRl''@;'; put 'put ''eDtyZXR1cm4gWGUoVGUoMikuZ29Ub0xvZ0xpbmUoaSwicmVxdWVzdF8iK28sIndhcm5pbmciKSl9KSxKKDEsImJ1dHRvbiIsMTgpLFNlKDIpLHRlKCkoKX1pZigyJm4pe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7aWUoMiksU3IoIiAiLHQsIiAiKX19ZnVuY3Rpb24gTWJ0KG4sZSl7aWYoMSZuJiYo''@;'; put 'put ''SigwLCJjbHItdHJlZS1ub2RlIiwxMiksSXQoMSwiY2xyLWljb24iLDE5KSxTZSgyKSxfbygzLEVidCwzLDEsImNsci10cmVlLW5vZGUiLG51bGwsQ28pLHRlKCkpLDImbil7Y29uc3QgdD1UZSgyKS4kaW1wbGljaXQ7aWUoMiksU3IoIiBXYXJuaW5ncyAoIix0LmxvZ1dhcm5pbmdzLmxlbmd0''@;'; put 'put ''aCwiKSAiKSxpZSgpLHlvKHQubG9nV2FybmluZ3N8fG1jKDEsX1RlKSl9fWZ1bmN0aW9uIFRidChuLGUpezEmbiYmSXQoMCwiZGl2IiwxMyksMiZuJiZydCgiaW5uZXJIVE1MIixUZSgyKS4kaW1wbGljaXQubG9nRmlsZSx4NSl9ZnVuY3Rpb24geGJ0KG4sZSl7MSZuJiZJdCgwLCJkaXYiLDE0''@;'; put 'put ''KSwyJm4mJnJ0KCJ0ZXh0Q29udGVudCIsVGUoMikuJGltcGxpY2l0LmxvZ0ZpbGUpfWZ1bmN0aW9uIEFidChuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiYnV0dG9uIiwyMCksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoMikuJGltcGxpY2l0O3JldHVybiBY''@;'; put 'put ''ZShUZSgyKS5kb3dubG9hZExvZyhpLmxvZ0ZpbGUpKX0pLFNlKDEsIiBEb3dubG9hZCAiKSx0ZSgpfX1mdW5jdGlvbiBrYnQobixlKXtpZigxJm4mJihKKDAsImNsci10YWItY29udGVudCIpKDEsImNsci10cmVlIiksdnQoMixTYnQsNSwyLCJjbHItdHJlZS1ub2RlIiwxMiksdnQoMyxNYnQs''@;'; put 'put ''NSwyLCJjbHItdHJlZS1ub2RlIiwxMiksdGUoKSx2dCg0LFRidCwxLDEsImRpdiIsMTMpLHZ0KDUseGJ0LDEsMSwiZGl2IiwxNCksdnQoNixBYnQsMiwwLCJidXR0b24iLDE1KSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoKS4kaW1wbGljaXQscj1UZSgyKTtpZSgyKSxfdCh0LmxvZ0Vycm9ycz8y''@;'; put 'put ''Oi0xKSxpZSgpLF90KHQubG9nV2FybmluZ3M/MzotMSksaWUoKSxfdCgiU0FTVklZQSIhPT1yLnNlcnZlclR5cGU/NDotMSksaWUoKSxfdCgiU0FTVklZQSI9PT1yLnNlcnZlclR5cGU/NTotMSksaWUoKSxfdCh0LmxvZ0ZpbGUubGVuZ3RoPjA/NjotMSl9fWZ1bmN0aW9uIFJidChuLGUpe2lm''@;'; put 'put ''KDEmbil7Y29uc3QgdD13bigpO0ooMCwiYnV0dG9uIiwyMCksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoMikuJGltcGxpY2l0O3JldHVybiBYZShUZSgyKS5kb3dubG9hZFNvdXJjZUNvZGUoaS5zb3VyY2VDb2RlKSl9KSxTZSgxLCIgRG93bmxvYWQgIiksdGUoKX19''@;'; put 'put ''ZnVuY3Rpb24gSWJ0KG4sZSl7aWYoMSZuJiYoSigwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDIxKSxTZSgyKSx0ZSgpLHZ0KDMsUmJ0LDIsMCwiYnV0dG9uIiwxNSksdGUoKSksMiZuKXtjb25zdCB0PVRlKCkuJGltcGxpY2l0O2llKDIpLFNyKCIgIix0LnNvdXJjZUNvZGUsIiAiKSxp''@;'; put 'put ''ZSgpLF90KHQuc291cmNlQ29kZS5sZW5ndGg+MD8zOi0xKX19ZnVuY3Rpb24gRGJ0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJidXR0b24iLDIwKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3QgaT1UZSgyKS4kaW1wbGljaXQ7cmV0dXJuIFhlKFRlKDIpLmRvd25s''@;'; put 'put ''b2FkR2VuZXJhdGVkQ29kZShpLmdlbmVyYXRlZENvZGUpKX0pLFNlKDEsIiBEb3dubG9hZCAiKSx0ZSgpfX1mdW5jdGlvbiBMYnQobixlKXtpZigxJm4mJihKKDAsImNsci10YWItY29udGVudCIpKDEsImRpdiIsMjEpLFNlKDIpLHRlKCksdnQoMyxEYnQsMiwwLCJidXR0b24iLDE1KSx0ZSgp''@;'; put 'put ''KSwyJm4pe2NvbnN0IHQ9VGUoKS4kaW1wbGljaXQ7aWUoMiksU3IoIiAiLHQuZ2VuZXJhdGVkQ29kZSwiICIpLGllKCksX3QodC5nZW5lcmF0ZWRDb2RlLmxlbmd0aD4wPzM6LTEpfX1mdW5jdGlvbiBPYnQobixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRpdiIsMjcpLHd0KCJjbGlj''@;'; put 'put ''ayIsZnVuY3Rpb24oKXtjb25zdCBpPVllKHQpLiRpbXBsaWNpdDtyZXR1cm4gWGUoVGUoMykuJGltcGxpY2l0LnNlbGVjdGVkVGFibGU9aS5rZXkpfSksU2UoMSksdGUoKX1pZigyJm4pe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7d3IoInNlbGVjdGVkIixUZSgzKS4kaW1wbGljaXQuc2VsZWN0ZWRU''@;'; put 'put ''YWJsZT09PXQua2V5KSxpZSgpLFNyKCIgIix0LmtleSwiICIpfX1mdW5jdGlvbiBOYnQobixlKXtpZigxJm4mJihKKDAsImNsci1kcm9wZG93bi1tZW51IiksX28oMSxPYnQsMiwzLCJkaXYiLDI2LENvKSxBYygzLCJrZXl2YWx1ZSIpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgyKS4kaW1wbGlj''@;'; put 'put ''aXQ7aWUoKSx5byhUZCgzLDAsdC5TQVNXT1JLKSl9fWZ1bmN0aW9uIEZidChuLGUpe2lmKDEmbiYmKEooMCwicCIsMjgpKDEsInN0cm9uZyIpLFNlKDIpLHRlKCkoKSksMiZuKXtjb25zdCB0PVRlKDMpLiRpbXBsaWNpdDtpZSgyKSxTcigiIix0LnNlbGVjdGVkVGFibGUsIiAoZmlyc3QgMTAg''@;'; put 'put ''cm93cykgIil9fWZ1bmN0aW9uIFBidChuLGUpe2lmKDEmbiYmKEooMCwidGgiKSxTZSgxKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7aWUoKSxTcigiICIsdC5rZXksIiAiKX19ZnVuY3Rpb24gSGJ0KG4sZSl7aWYoMSZuJiYoSigwLCJ0ZCIpLFNlKDEpLHRlKCkpLDImbil7Y29u''@;'; put 'put ''c3QgdD1lLiRpbXBsaWNpdCxyPVRlKCkuJGltcGxpY2l0O2llKCksU3IoIiAiLHJbdC5rZXldLCIgIil9fWZ1bmN0aW9uIFZidChuLGUpe2lmKDEmbiYmKEooMCwidHIiKSxfbygxLEhidCwyLDEsInRkIixudWxsLENvKSxBYygzLCJrZXl2YWx1ZSIpLHRlKCkpLDImbil7Y29uc3QgdD1UZSg0''@;'; put 'put ''KS4kaW1wbGljaXQ7aWUoKSx5byhUZCgzLDAsdC5TQVNXT1JLW3Quc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3NbMF0pKX19ZnVuY3Rpb24gQmJ0KG4sZSl7aWYoMSZuJiYoSigwLCJ0YWJsZSIsMzApKDEsInRoZWFkIikoMiwidHIiKSxfbygzLFBidCwyLDEsInRoIixudWxsLENvKSxBYyg1''@;'; put 'put ''LCJrZXl2YWx1ZSIpLHRlKCkoKSxKKDYsInRib2R5IiksX28oNyxWYnQsNCwyLCJ0ciIsbnVsbCxDbyksdGUoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoMykuJGltcGxpY2l0O2llKDMpLHlvKFRkKDUsMCx0LlNBU1dPUktbdC5zZWxlY3RlZFRhYmxlXS5maXJzdDEwcm93c1swXSkpLGllKDQpLHlv''@;'; put 'put ''KHQuU0FTV09SS1t0LnNlbGVjdGVkVGFibGVdLmZpcnN0MTByb3dzKX19ZnVuY3Rpb24gamJ0KG4sZSl7aWYoMSZuJiYoSigwLCJjbHItdGFiLWNvbnRlbnQiKSx2dCgxLEZidCwzLDEsInAiLDI4KSxKKDIsImRpdiIsMjkpLHZ0KDMsQmJ0LDksMiwidGFibGUiLDMwKSx0ZSgpKCkpLDImbil7''@;'; put 'put ''Y29uc3QgdD1UZSgyKS4kaW1wbGljaXQ7aWUoKSxfdCh0LnNlbGVjdGVkVGFibGU/MTotMSksaWUoMiksX3QodC5zZWxlY3RlZFRhYmxlPzM6LTEpfX1mdW5jdGlvbiBVYnQobixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImNsci10YWIiKSgxLCJjbHItZHJvcGRvd24iLDIyKSgyLCJi''@;'; put 'put ''dXR0b24iLDIzKSxTZSgzLCIgU0FTIFdvcmsgVGFibGVzICIpLEl0KDQsImNsci1pY29uIiwyNCksdGUoKSxZbig1LE5idCw0LDIsImNsci1kcm9wZG93bi1tZW51IiwyNSksdGUoKSxZbig2LGpidCw0LDIsIm5nLXRlbXBsYXRlIiw5KSxoaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9u''@;'; put 'put ''KGkpe1llKHQpO2NvbnN0IG89VGUoMyk7cmV0dXJuIGZpKG8udGFibGVzQWN0aXZlLGkpfHwoby50YWJsZXNBY3RpdmU9aSksWGUoaSl9KSx0ZSgpfWlmKDImbil7Y29uc3QgdD1UZSgzKTtpZSgpLHJ0KCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsITApLGllKDUpLGRpKCJjbHJJZkFjdGl2''@;'; put 'put ''ZSIsdC50YWJsZXNBY3RpdmUpfX1mdW5jdGlvbiB6YnQobixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImNsci1zdGFjay1ibG9jayIsNSkoMSwiY2xyLXN0YWNrLWxhYmVsIiksU2UoMiksSigzLCJzcGFuIiw2KSx2dCg0LGJidCwyLDAsInNwYW4iKSx2dCg1LHdidCwyLDAsInNwYW4i''@;'; put 'put ''KSx0ZSgpKCksSig2LCJjbHItc3RhY2stY29udGVudCIpLFNlKDcpLHRlKCksSig4LCJjbHItc3RhY2stYmxvY2siLDcpKDksImNsci1zdGFjay1jb250ZW50IikoMTAsImNsci10YWJzIikoMTEsImNsci10YWIiKSgxMiwiYnV0dG9uIiw4KSxTZSgxMywiU0FTIExvZyIpLHRlKCksWW4oMTQs''@;'; put 'put ''a2J0LDcsNSwibmctdGVtcGxhdGUiLDkpLGhpKCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgyKTtyZXR1cm4gZmkoby5zYXNMb2dBY3RpdmUsaSl8fChvLnNhc0xvZ0FjdGl2ZT1pKSxYZShpKX0pLHRlKCksSigxNSwiY2xyLXRhYiIpKDE2LCJidXR0''@;'; put 'put ''b24iLDgpLFNlKDE3LCJTQVMgU291cmNlIENvZGUiKSx0ZSgpLFluKDE4LElidCw0LDIsIm5nLXRlbXBsYXRlIiw5KSxoaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoMik7cmV0dXJuIGZpKG8uc2FzU291cmNlQ29kZUFjdGl2ZSxpKXx8KG8uc2Fz''@;'; put 'put ''U291cmNlQ29kZUFjdGl2ZT1pKSxYZShpKX0pLHRlKCksSigxOSwiY2xyLXRhYiIpKDIwLCJidXR0b24iLDgpLFNlKDIxLCJTQVMgR2VuZXJhdGVkIENvZGUiKSx0ZSgpLFluKDIyLExidCw0LDIsIm5nLXRlbXBsYXRlIiw5KSxoaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGkpe1ll''@;'; put 'put ''KHQpO2NvbnN0IG89VGUoMik7cmV0dXJuIGZpKG8uc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZSxpKXx8KG8uc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZT1pKSxYZShpKX0pLHRlKCksdnQoMjMsVWJ0LDcsMiwiY2xyLXRhYiIpLHRlKCkoKSgpKCl9aWYoMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0LHI9''@;'; put 'put ''ZS4kaW5kZXgsaT1UZSgyKTtydCgiaWQiLCJyZXF1ZXN0XyIrcikoImNsclN0YWNrVmlld0xldmVsIiwxKSxpZSgyKSxTcigiICIsdC5zZXJ2aWNlTGluaywiICIpLGllKDIpLF90KChudWxsPT10LmxvZ1dhcm5pbmdzP251bGw6dC5sb2dXYXJuaW5ncy5sZW5ndGgpPjA/NDotMSksaWUoKSxf''@;'; put 'put ''dCgobnVsbD09dC5sb2dFcnJvcnM/bnVsbDp0LmxvZ0Vycm9ycy5sZW5ndGgpPjA/NTotMSksaWUoMikscHIodC5wYXJzZWRUaW1lc3RhbXApLGllKDcpLGRpKCJjbHJJZkFjdGl2ZSIsaS5zYXNMb2dBY3RpdmUpLGllKDQpLGRpKCJjbHJJZkFjdGl2ZSIsaS5zYXNTb3VyY2VDb2RlQWN0aXZl''@;'; put 'put ''KSxpZSg0KSxkaSgiY2xySWZBY3RpdmUiLGkuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZSksaWUoKSxfdCh0LlNBU1dPUks/MjM6LTEpfX1mdW5jdGlvbiBXYnQobixlKXtpZigxJm4mJihKKDAsImNsci1zdGFjay12aWV3IiksX28oMSx6YnQsMjQsMTAsImNsci1zdGFjay1ibG9jayIsNSxDbyks''@;'; put 'put ''dGUoKSksMiZuKXtjb25zdCB0PVRlKCk7aWUoKSx5byh0LnNhc2pzUmVxdWVzdHMpfX1sZXQgWWJ0PSgoKT0+e3ZhciBuO2NsYXNzIGV7Z2V0IG9wZW5lZCgpe3JldHVybiB0aGlzLl9vcGVuZWR9c2V0IG9wZW5lZChyKXt0aGlzLl9vcGVuZWQ9cixyJiZ0aGlzLm1vZGFsT3BlbmVkKCksdGhp''@;'; put 'put ''cy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLnNhc2pzUmVxdWVzdHMpfWNvbnN0cnVjdG9yKHIsaSxvKXt0aGlzLnNhc1NlcnZpY2U9cix0aGlzLmxvZ2dlclNlcnZpY2U9aSx0aGlzLmhlbHBlclNlcnZpY2U9byx0aGlzLl9vcGVuZWQ9ITEsdGhpcy5vcGVuZWRDaGFuZ2U9bmV3IEtyLHRoaXMu''@;'; put 'put ''c2FzTG9nQWN0aXZlPSEwLHRoaXMuc2FzU291cmNlQ29kZUFjdGl2ZT0hMSx0aGlzLnNhc0dlbmVyYXRlZENvZGVBY3RpdmU9ITEsdGhpcy50YWJsZXNBY3RpdmU9ITEsdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNhc2pzUmVxdWVzdHM9''@;'; put 'put ''W10sdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNlcnZlclR5cGU9dGhpcy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKX1uZ09uSW5pdCgpe31wYXJzZUxvZ1RpbWVzdGFtcChyKXtyZXR1cm5gJHt0aGlzLmZvcm1hdFRpbWVzdGFtcChy''@;'; put 'put ''KX0gJHt0aGlzLnRpbWVzdGFtcEZyb21Ob3cocil9YH1jdXRBcHBMb2Mocil7cmV0dXJuIHIucmVwbGFjZSh0aGlzLnNhc2pzQ29uZmlnLmFwcExvYysiLyIsIiIpfWZvcm1hdFRpbWVzdGFtcChyKXtyZXR1cm4gU3AoKShyKS5mb3JtYXQoKT9TcCgpKHIpLmZvcm1hdCgiZGRkZCwgTU1NTSBE''@;'; put 'put ''byBZWVlZLCBoOm1tOnNzIGEiKTpyfXRpbWVzdGFtcEZyb21Ob3cocil7cmV0dXJuIFNwKCkocikuZm9ybWF0KCk/YCAoJHtTcCgpKHIpLmZyb21Ob3coKX0pYDoiIn1tb2RhbE9wZW5DaGFuZ2Uocil7dGhpcy5vcGVuZWQ9cix0aGlzLm9wZW5lZENoYW5nZS5lbWl0KHRoaXMub3BlbmVkKX1t''@;'; put 'put ''b2RhbE9wZW5lZCgpe3RoaXMuc2FzanNSZXF1ZXN0cz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzUmVxdWVzdHMoKTtmb3IobGV0IHIgb2YgdGhpcy5zYXNqc1JlcXVlc3RzKXRoaXMucGFyc2VFcnJvcnNBbmRXYXJuaW5ncyhyKSxyLnNlcnZpY2VMaW5rPXRoaXMuY3V0QXBwTG9jKHIuc2Vydmlj''@;'; put 'put ''ZUxpbmspLHIucGFyc2VkVGltZXN0YW1wPXRoaXMucGFyc2VMb2dUaW1lc3RhbXAoci50aW1lc3RhbXApfWdvVG9Mb2dMaW5lKHIsaSxvKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2l9IC5sb2ctd3JhcHBlci5zYXNsb2dgKTtpZihhKWlmKCJTQVNWSVlBIj09PXRoaXMu''@;'; put 'put ''c2VydmVyVHlwZSl7Y29uc3QgdT0oYS50ZXh0Q29udGVudHx8IiIpLnNwbGl0KCJcbiIpO2xldCBnPS0xO2ZvcihsZXQgZWU9MDtlZTx1Lmxlbmd0aDtlZSsrKWlmKHVbZWVdLmluY2x1ZGVzKHIpKXtnPWVlO2JyZWFrfWlmKC0xPT09ZylyZXR1cm47Y29uc3QgRT1kb2N1bWVudC5jcmVhdGVF''@;'; put 'put ''bGVtZW50KCJkaXYiKTtFLmNsYXNzTmFtZT0idGVtcC1saW5lLWhlaWdodC1jYWxjIixFLnRleHRDb250ZW50PSJYIixhLmFwcGVuZENoaWxkKEUpO2NvbnN0IE89RS5jbGllbnRIZWlnaHQ7YS5yZW1vdmVDaGlsZChFKSxhLnNjcm9sbFRvcD1PKmc7Y29uc3QgWj1kb2N1bWVudC5jcmVhdGVF''@;'; put 'put ''bGVtZW50KCJkaXYiKTtaLmNsYXNzTmFtZT0ibGluZS1oaWdobGlnaHQtb3ZlcmxheSAiKygiZXJyb3IiPT09bz8iZXJyb3ItaGlnaGxpZ2h0Ijoid2FybmluZy1oaWdobGlnaHQiKSxaLmNsYXNzTGlzdC5hZGQoInRlbXAtaGVpZ2h0LXNldHRlciIpLGRvY3VtZW50LmRvY3VtZW50RWxlbWVu''@;'; put 'put ''dC5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1saW5lLWhlaWdodCIsYCR7T31weGApLFouY2xhc3NMaXN0LmFkZCgibGluZS1wb3NpdGlvbi1zZXR0ZXIiKSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoIi0tbGluZS10b3AiLE8qZysicHgiKSxhLmFwcGVuZENoaWxk''@;'; put 'put ''KFopLHNldFRpbWVvdXQoKCk9PnthLmNvbnRhaW5zKFopJiZhLnJlbW92ZUNoaWxkKFopfSwzZTMpfWVsc2V7Y29uc3QgbD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjJHtpfSAubG9nLXdyYXBwZXIuc2FzbG9nIGZvbnRgKTtmb3IobGV0IHUgb2YgQXJyYXkuZnJvbShsKSlpZih1LnRl''@;'; put 'put ''eHRDb250ZW50Py5pbmNsdWRlcyhyKSl7YS5zY3JvbGxUb3A9dS5vZmZzZXRUb3AtYS5vZmZzZXRUb3AsdS5jbGFzc0xpc3QuYWRkKCJoaWdobGlnaHRlZC1saW5lIiksc2V0VGltZW91dCgoKT0+e3UuY2xhc3NMaXN0LnJlbW92ZSgiaGlnaGxpZ2h0ZWQtbGluZSIpfSwzZTMpO2JyZWFrfX19''@;'; put 'put ''cGFyc2VFcnJvcnNBbmRXYXJuaW5ncyhyKXt2YXIgaT10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtpZighcnx8IXIubG9nRmlsZXx8InN0cmluZyIhPXR5cGVvZiByLmxvZ0ZpbGV8fHZvaWQgMCE9PXIubG9nRXJyb3JzfHx2b2lkIDAhPT1yLmxvZ1dhcm5pbmdzKXJldHVybjtsZXQgbz1b''@;'; put 'put ''XSxhPVtdLGw9ci5sb2dGaWxlLnNwbGl0KCJcbiIpLHU9Wy4uLmxdO2ZvcihsZXQgZz0wO2c8bC5sZW5ndGg7ZysrKXtpZigvPC4qPkVSUk9SL2dtLnRlc3QobFtnXSkpe2xldCBFPWxbZ10uc3Vic3RyaW5nKGxbZ10uaW5kZXhPZigiRSIpLGxbZ10ubGVuZ3RoLTEpO28ucHVzaChFKX1lbHNl''@;'; put 'put ''L15FUlJPUi9nbS50ZXN0KGxbZ10pJiYoby5wdXNoKGxbZ10pLCJTQVNWSVlBIiE9PWkuc2VydmVyVHlwZSYmKGxbZ109Jzxmb250IGNsYXNzPSJlcnJvci1saW5lIj4nK2xbZ10rIjwvZm9udD4iKSk7aWYoLzwuKj5XQVJOSU5HL2dtLnRlc3QobFtnXSkpe2xldCBFPWxbZ10uc3Vic3RyaW5n''@;'; put 'put ''KGxbZ10uaW5kZXhPZigiVyIpLGxbZ10ubGVuZ3RoLTEpO2EucHVzaChFKX1lbHNlL15XQVJOSU5HL2dtLnRlc3QobFtnXSkmJihhLnB1c2gobFtnXSksIlNBU1ZJWUEiIT09aS5zZXJ2ZXJUeXBlJiYobFtnXT0nPGZvbnQgY2xhc3M9Indhcm5pbmctbGluZSI+JytsW2ddKyI8L2ZvbnQ+Iikp''@;'; put 'put ''fWkubG9nZ2VyU2VydmljZS5sb2coYSksIlNBU1ZJWUEiPT09aS5zZXJ2ZXJUeXBlJiYoci5vcmlnaW5hbExvZ0ZpbGU9dS5qb2luKCJcbiIpLHIubG9nRmlsZUxpbmVNYXA9e30sby5mb3JFYWNoKGc9Pntmb3IobGV0IEU9MDtFPHUubGVuZ3RoO0UrKylpZih1W0VdLmluY2x1ZGVzKGcpKXty''@;'; put 'put ''LmxvZ0ZpbGVMaW5lTWFwLmVycm9yc3x8KHIubG9nRmlsZUxpbmVNYXAuZXJyb3JzPXt9KSxyLmxvZ0ZpbGVMaW5lTWFwLmVycm9yc1tnXT1FO2JyZWFrfX0pLGEuZm9yRWFjaChnPT57Zm9yKGxldCBFPTA7RTx1Lmxlbmd0aDtFKyspaWYodVtFXS5pbmNsdWRlcyhnKSl7ci5sb2dGaWxlTGlu''@;'; put 'put ''ZU1hcC53YXJuaW5nc3x8KHIubG9nRmlsZUxpbmVNYXAud2FybmluZ3M9e30pLHIubG9nRmlsZUxpbmVNYXAud2FybmluZ3NbZ109RTticmVha319KSksci5sb2dGaWxlPWwuam9pbigiXG4iKSxyLmxvZ0Vycm9ycz1vLHIubG9nV2FybmluZ3M9YX0pKCl9ZG93bmxvYWRMb2cocil7Y29uc3Qg''@;'; put 'put ''aT0obmV3IERhdGUpLnZhbHVlT2YoKTt0aGlzLmhlbHBlclNlcnZpY2UuZG93bmxvYWRUZXh0RmlsZShgbG9nRmlsZS0ke2l9YCxyKX1kb3dubG9hZFNvdXJjZUNvZGUocil7Y29uc3QgaT0obmV3IERhdGUpLnZhbHVlT2YoKTt0aGlzLmhlbHBlclNlcnZpY2UuZG93bmxvYWRUZXh0RmlsZShg''@;'; put 'put ''c291cmNlQ29kZS0ke2l9YCxyKX1kb3dubG9hZEdlbmVyYXRlZENvZGUocil7Y29uc3QgaT0obmV3IERhdGUpLnZhbHVlT2YoKTt0aGlzLmhlbHBlclNlcnZpY2UuZG93bmxvYWRUZXh0RmlsZShgZ2VuZXJhdGVkQ29kZS0ke2l9YCxyKX1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKSh6ZShpYyksemUoeDMpLHplKGZoKSl9LHRoaXMuXHUwMjc1Y21wPVByKHt0eXBlOmUsc2VsZWN0b3JzOltbImFwcC1yZXF1ZXN0cy1tb2RhbCJdXSxpbnB1dHM6e29wZW5lZDoib3BlbmVkIn0sb3V0cHV0czp7b3BlbmVkQ2hhbmdlOiJvcGVu''@;'; put 'put ''ZWRDaGFuZ2UifSxzdGFuZGFsb25lOiExLGRlY2xzOjgsdmFyczo0LGNvbnN0czpbWyJjbHJNb2RhbFNpemUiLCJ4bCIsMSwicmVxdWVzdHMtbW9kYWwiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtdC0wIiwiZC1pbmxpbmUt''@;'; put 'put ''YmxvY2siXSxbMSwibW9kYWwtYm9keSIsImgtNzB2aCJdLFsxLCJuby1yZXFzIl0sWzMsImlkIiwiY2xyU3RhY2tWaWV3TGV2ZWwiXSxbMSwibWwtMTAiXSxbMSwiY29udGVudCJdLFsiY2xyVGFiTGluayIsIiJdLFszLCJjbHJJZkFjdGl2ZUNoYW5nZSIsImNscklmQWN0aXZlIl0sWyJzaGFw''@;'; put 'put ''ZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsMSwibWItNSIsImNvbG9yLWdyZWVuIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJtYi01IiwiY29sb3ItcmVkIl0sWzEsImVyci1saW5rcyJdLFsxLCJsb2ctd3JhcHBlciIsInNhc2xvZyIsMywiaW5uZXJIVE1MIl0sWzEsImxv''@;'; put 'put ''Zy13cmFwcGVyIiwic2FzbG9nIiwidml5YSIsMywidGV4dENvbnRlbnQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJjb2xvci1yZWQiXSxbMywiY2xpY2siXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiXSxb''@;'; put 'put ''InNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwxLCJjb2xvci1ncmVlbiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWzEsImxvZy13cmFwcGVyIl0sWyJjbHJUYWJMaW5rIiwiIiwxLCJ3b3JrLXRhYmxlcy1kcm9wZG93biIsMywiY2xyQ2xvc2VN''@;'; put 'put ''ZW51T25JdGVtQ2xpY2siXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWzQsImNscklmT3BlbiJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwxLCJkcm9wZG93bi1pdGVtIiwzLCJzZWxlY3RlZCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwxLCJkcm9w''@;'; put 'put ''ZG93bi1pdGVtIiwzLCJjbGljayJdLFsxLCJtdC0xMCJdLFsxLCJtaW4taC01MHZoIl0sWzEsInRhYmxlIiwibXQtMTAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oaSxvKXsxJmkmJihKKDAsImNsci1tb2RhbCIsMCksd3QoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24obCl7cmV0dXJuIG8u''@;'; put 'put ''bW9kYWxPcGVuQ2hhbmdlKGwpfSksSigxLCJoMyIsMSksU2UoMiwiIFJlcXVlc3QgSGlzdG9yeSAiKSxKKDMsInAiLDIpLFNlKDQpLHRlKCkoKSxKKDUsImRpdiIsMyksdnQoNix5YnQsMiwwLCJwIiw0KSx2dCg3LFdidCwzLDAsImNsci1zdGFjay12aWV3IiksdGUoKSgpKSwyJmkmJihydCgi''@;'; put 'put ''Y2xyTW9kYWxPcGVuIixvLm9wZW5lZCksaWUoNCksU3IoIkFwcCBMb2NhdGlvbjogIixvLnNhc2pzQ29uZmlnLmFwcExvYyksaWUoMiksX3Qoby5zYXNqc1JlcXVlc3RzLmxlbmd0aDwxPzY6LTEpLGllKCksX3Qoby5vcGVuZWQmJm8uc2FzanNSZXF1ZXN0cy5sZW5ndGg+MD83Oi0xKSl9LGRl''@;'; put 'put ''cGVuZGVuY2llczpbUmFlLHpNZSxrYWUsVU1lLFBwLE8zLGQ3LGN1LHhkLG1oLGhNLExwLHh2LGt2LCRiLEF2LFR2LFpiLG83LGpiLFViLHBNLEVVXSxlbmNhcHN1bGF0aW9uOjJ9KSl9cmV0dXJuIG4oKSxlfSkoKTtjbGFzcyBaYnR7Y29uc3RydWN0b3IoKXt0aGlzLnNhc1NlcnZpY2U9bnVs''@;'; put 'put ''bCx0aGlzLm1lc3NhZ2U9IiIsdGhpcy5kZXRhaWxzPW5ldyB5VGV9fWNsYXNzIHlUZXt9ZnVuY3Rpb24gR2J0KG4sZSl7aWYoMSZuJiYoSigwLCJwIiwyKSxTZSgxLCIgU0FTIFNlcnZpY2U6ICIpLEooMiwic3Ryb25nIiksU2UoMyksdGUoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSgzKSxw''@;'; put 'put ''cih0LmRhdGEuc2FzU2VydmljZSl9fWZ1bmN0aW9uICRidChuLGUpe2lmKDEmbiYmKEooMCwiZGl2Iiw1KSgxLCJwIikoMiwic3Ryb25nIiksU2UoMywiU1lTV0FSTklOR1RFWFQ6IiksdGUoKSxTZSg0KSx0ZSgpLEooNSwicCIpKDYsInN0cm9uZyIpLFNlKDcsIlNZU0VSUk9SVEVYVDoiKSx0''@;'; put 'put ''ZSgpLFNlKDgpLHRlKCksSig5LCJwIikoMTAsInN0cm9uZyIpLFNlKDExLCJNQUM6IiksdGUoKSxTZSgxMiksdGUoKSxKKDEzLCJwIikoMTQsInN0cm9uZyIpLFNlKDE1LCJfUFJPR1JBTToiKSx0ZSgpLFNlKDE2KSx0ZSgpKCkpLDImbil7Y29uc3QgdD1UZSgpO2llKDQpLFNyKCIgIix0LmRh''@;'; put 'put ''dGEuZGV0YWlscy5TWVNXQVJOSU5HVEVYVCwiICIpLGllKDQpLFNyKCIgIix0LmRhdGEuZGV0YWlscy5TWVNFUlJPUlRFWFQpLGllKDQpLFNyKCIgIix0LmRhdGEuZGV0YWlscy5NQUMpLGllKDQpLFNyKCIgIix0LmRhdGEuZGV0YWlscy5fUFJPR1JBTSl9fWZ1bmN0aW9uIHFidChuLGUpe2lm''@;'; put 'put ''KDEmbil7Y29uc3QgdD13bigpO0ooMCwiYnV0dG9uIiw4KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCkub3BlbkNvbmZpZ3VyYXRvcigpKX0pLFNlKDEsIiBPcGVuIGNvbmZpZ3VyYXRvciAiKSx0ZSgpfX1mdW5jdGlvbiBLYnQobixlKXtpZigxJm4pe2NvbnN0''@;'; put 'put ''IHQ9d24oKTtKKDAsImJ1dHRvbiIsOCksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLm9wZW5SZXF1ZXN0c01vZGFsKCkpfSksU2UoMSwiIE9wZW4gcmVxdWVzdHMgbW9kYWwgIiksdGUoKX19ZnVuY3Rpb24gWGJ0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7''@;'; put 'put ''SigwLCJidXR0b24iLDgpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoKS5kb3dubG9hZExvZygpKX0pLFNlKDEsIiBEb3dubG9hZCBsb2cgIiksdGUoKX19ZnVuY3Rpb24gUWJ0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJidXR0b24iLDgpLHd0KCJj''@;'; put 'put ''bGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoKS5jbG9zZUFib3J0TW9kYWwoKSl9KSxTZSgxLCIgQ2xvc2UgIiksdGUoKX19ZnVuY3Rpb24gSmJ0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJidXR0b24iLDgpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''WWUodCksWGUoVGUoKS5yZWxvYWQoKSl9KSxTZSgxLCIgUmVsb2FkICIpLHRlKCl9fWxldCBld3Q9KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3RvcihyLGksbyxhKXt0aGlzLmhlbHBlclNlcnZpY2U9cix0aGlzLmV2ZW50U2VydmljZT1pLHRoaXMuc2FzU2VydmljZT1vLHRoaXMucm91''@;'; put 'put ''dGVyPWEsdGhpcy5vbkNvbmZpcm1Nb2RhbENsaWNrPW5ldyBLcix0aGlzLmRhdGE9bmV3IFpidCx0aGlzLmZvcmNlUmVsb2FkPSExLHRoaXMubW9kYWxFbmFibGVkPSEwLHRoaXMuZGVmYXVsdERhdGE9e21vZGFsVGl0bGU6IkFib3J0IE1lc3NhZ2UiLHNhc1NlcnZpY2U6bnVsbCxtZXNzYWdl''@;'; put 'put ''OiIiLGRldGFpbHM6bmV3IHlUZX19bmdPbkluaXQoKXtsZXQgcj17Li4udGhpcy5kZWZhdWx0RGF0YSwuLi50aGlzLmRhdGF9O3RoaXMuZGF0YT1yfXNob3dDb25maWd1cmF0b3JCdXR0b24ocil7Y29uc3QgaT10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKTtyZXR1cm4gcj8uaW5j''@;'; put 'put ''bHVkZXMoInN0YXJ0dXBzZXJ2aWNlIikmJmkuc2VydmVyVHlwZT09PV8wLlkuU2FzOX1jbG9zZUFib3J0TW9kYWwoKXt0aGlzLm9uQ29uZmlybU1vZGFsQ2xpY2suZW1pdCgpfW9wZW5Db25maWd1cmF0b3IoKXt0aGlzLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLHRoaXMucm91''@;'; put 'put ''dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSx0aGlzLmNsb3NlQWJvcnRNb2RhbCgpfWRvd25sb2FkTG9nKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmRvd25sb2FkVGV4dEZpbGUoYCR7dGhpcy5kYXRhLnNhc1NlcnZpY2V9LUxPR2AsdGhpcy5kYXRhLmRldGFpbHM/LkxPR3x8IkVycm9yIHBh''@;'; put 'put ''cnNpbmcgdGhlIGxvZyIpfW9wZW5SZXF1ZXN0c01vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub3BlblJlcXVlc3RzTW9kYWwoKX1yZWxvYWQoKXtsb2NhdGlvbi5yZWxvYWQoKX1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKSh6ZShm''@;'; put 'put ''aCksemUodWQpLHplKGljKSx6ZSh2YykpfSx0aGlzLlx1MDI3NWNtcD1Qcih7dHlwZTplLHNlbGVjdG9yczpbWyJhcHAtaW5mby1tb2RhbCJdXSxpbnB1dHM6e2RhdGE6ImRhdGEiLGZvcmNlUmVsb2FkOiJmb3JjZVJlbG9hZCJ9LG91dHB1dHM6e29uQ29uZmlybU1vZGFsQ2xpY2s6Im9uQ29u''@;'; put 'put ''ZmlybU1vZGFsQ2xpY2sifSxzdGFuZGFsb25lOiExLGRlY2xzOjEzLHZhcnM6MTIsY29uc3RzOltbImFwcERyYWdOZHJvcCIsIiIsMSwiY2xyLWFib3J0LW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxl''@;'; put 'put ''Il0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsInNhc1NlcnZpY2UiLCJtdC0wIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwiYWJvcnRNc2ciLDMsImlubmVySFRNTCJdLFsxLCJzeXN0ZXh0Il0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiXSxb''@;'; put 'put ''InR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihpLG8pezEmaSYmKEooMCwiY2xyLW1vZGFsIiwwKSxoaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihsKXtyZXR1cm4gZmkoby5tb2RhbEVuYWJsZWQsbCl8fChv''@;'; put 'put ''Lm1vZGFsRW5hYmxlZD1sKSxsfSksSigxLCJoMyIsMSksU2UoMiksdnQoMyxHYnQsNCwxLCJwIiwyKSx0ZSgpLEooNCwiZGl2IiwzKSxJdCg1LCJkaXYiLDQpLHZ0KDYsJGJ0LDE3LDQsImRpdiIsNSksdGUoKSxKKDcsImRpdiIsNiksdnQoOCxxYnQsMiwwLCJidXR0b24iLDcpLHZ0KDksS2J0''@;'; put 'put ''LDIsMCwiYnV0dG9uIiw3KSx2dCgxMCxYYnQsMiwwLCJidXR0b24iLDcpLHZ0KDExLFFidCwyLDAsImJ1dHRvbiIsNyksdnQoMTIsSmJ0LDIsMCwiYnV0dG9uIiw3KSx0ZSgpKCkpLDImaSYmKGRpKCJjbHJNb2RhbE9wZW4iLG8ubW9kYWxFbmFibGVkKSxydCgiY2xyTW9kYWxTaXplIiwieGwi''@;'; put 'put ''KSgiY2xyTW9kYWxDbG9zYWJsZSIsIW8uZm9yY2VSZWxvYWQpLGllKDIpLFNyKCIgIixvLmRhdGEubW9kYWxUaXRsZSwiICIpLGllKCksX3Qoby5kYXRhLnNhc1NlcnZpY2UmJm8uZGF0YS5zYXNTZXJ2aWNlLmxlbmd0aD4wPzM6LTEpLGllKDIpLHJ0KCJpbm5lckhUTUwiLG8uZGF0YS5tZXNz''@;'; put 'put ''YWdlLHg1KSxpZSgpLF90KG51bGwhPT1vLmRhdGEuZGV0YWlscz82Oi0xKSxpZSgyKSxfdChvLnNob3dDb25maWd1cmF0b3JCdXR0b24oby5kYXRhLnNhc1NlcnZpY2UpPzg6LTEpLGllKCksX3QobnVsbCE9PW8uZGF0YS5kZXRhaWxzPzk6LTEpLGllKCksX3QobnVsbCE9by5kYXRhLmRldGFp''@;'; put 'put ''bHMmJm8uZGF0YS5kZXRhaWxzLkxPRyYmKG51bGw9PW8uZGF0YS5kZXRhaWxzfHxudWxsPT1vLmRhdGEuZGV0YWlscy5MT0c/bnVsbDpvLmRhdGEuZGV0YWlscy5MT0cudHJpbSgpKS5sZW5ndGg+MD8xMDotMSksaWUoKSxfdChvLmZvcmNlUmVsb2FkPy0xOjExKSxpZSgpLF90KG8uZm9yY2VS''@;'; put 'put ''ZWxvYWQ/MTI6LTEpKX0sZGVwZW5kZW5jaWVzOlt4ZCxtaCxxRF0sZW5jYXBzdWxhdGlvbjoyfSkpfXJldHVybiBuKCksZX0pKCk7Y29uc3QgdHd0PSgpPT5bIi8iXSxiVGU9KCk9PlsiL3ZpZXciXSx3VGU9KCk9PlsiL2hvbWUiXSxPYWU9KCk9PlsiL3Jldmlldy9zdWJtaXR0ZWQiXSxud3Q9''@;'; put 'put ''KCk9PlsiL3Jldmlldy9hcHByb3ZlIl0scnd0PSgpPT5bIi9yZXZpZXcvaGlzdG9yeSJdLGl3dD0obixlKT0+ZS5sYWJlbDtmdW5jdGlvbiBvd3QobixlKXsxJm4mJihKKDAsImRpdiIsMTMpKDEsImRpdiIsMTQpKDIsImRpdiIsMTUpLEl0KDMsImNkcy1pY29uIiwxNiksdGUoKSxKKDQsImRp''@;'; put 'put ''diIsMTcpLFNlKDUsIiBEYXRhIENvbnRyb2xsZXIgKEZSRUUgVGllcikgLSB0byB1cGdyYWRlIGNvbnRhY3QgIiksSXQoNiwiY29udGFjdC1saW5rIiwxOCksdGUoKSgpKCksSig3LCJhIiwxOSksU2UoOCwiVXBkYXRlIExpY2VuY2UgS2V5IiksdGUoKSl9ZnVuY3Rpb24gYXd0KG4sZSl7aWYo''@;'; put 'put ''MSZuKXtjb25zdCB0PXduKCk7SigwLCJkaXYiLDEzKSgxLCJkaXYiLDE0KSgyLCJkaXYiLDE1KSxJdCgzLCJjZHMtaWNvbiIsMTYpLHRlKCksSig0LCJkaXYiLDE3KSxTZSg1LCIgRGF0YSBDb250cm9sbGVyIChGUkVFIFRpZXIpIC0gUHJvYmxlbSB3aXRoIGxpY2VuY2UgIiksdGUoKSgpKCks''@;'; put 'put ''Sig2LCJhIiwyMCksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoMyk7cmV0dXJuIFhlKGkubGljZW5jZVByb2JsZW1EZXRhaWxzKGkubGljZW5jZVByb2JsZW0udmFsdWUpKX0pLFNlKDcsIk1vcmUgZGV0YWlscyIpLHRlKCl9fWZ1bmN0aW9uIHN3dChuLGUpe2lmKDEm''@;'; put 'put ''biYmKEooMCwiZGl2IiwxMSksdnQoMSxvd3QsOSwwKSx2dCgyLGF3dCw4LDApLHRlKCkpLDImbil7Y29uc3QgdD1UZSgyKTtpZSgpLF90KG51bGw9PT10LmxpY2VuY2VQcm9ibGVtLnZhbHVlPzE6LTEpLGllKCksX3QobnVsbCE9PXQubGljZW5jZVByb2JsZW0udmFsdWU/MjotMSl9fWZ1bmN0''@;'; put 'put ''aW9uIGx3dChuLGUpezEmbiYmKEooMCwiYSIsMTkpLFNlKDEsIlVwZGF0ZSBMaWNlbmNlIEtleSIpLHRlKCkpfWZ1bmN0aW9uIGN3dChuLGUpe2lmKDEmbiYmKEooMCwiZGl2IiwxMikoMSwiZGl2IiwxMykoMiwiZGl2IiwxNCkoMywiZGl2IiwxNSksSXQoNCwiY2RzLWljb24iLDE2KSx0ZSgp''@;'; put 'put ''LEooNSwiZGl2IiwxNyksU2UoNiksSXQoNywiY29udGFjdC1saW5rIiwxOCksU2UoOCksdGUoKSgpKCksdnQoOSxsd3QsMiwwLCJhIiwxOSksdGUoKSksMiZuKXtjb25zdCB0PVRlKDIpO2llKDYpLE5oKCIgVGhpcyBsaWNlbnNlIGtleSB3aWxsIGV4cGlyZSBpbiAiLHQubGljZW5zZUV4cGly''@;'; put 'put ''aW5nRGF5cywiICIsMT09PXQubGljZW5zZUV4cGlyaW5nRGF5cz8iZGF5IjoiZGF5cyIsIi4gUGxlYXNlIGNvbnRhY3QgIiksaWUoMiksU3IoIiBvciB5b3VyIHJlc2VsbGVyIHRvIGFycmFuZ2UgYWRkaXRpb25hbCBsaWNlbmNlIGZvciBzaXRlIGlkICIsdC5zeXNzaXRlLmdldFZhbHVlKCks''@;'; put 'put ''Ii4gIiksaWUoKSxfdCh0LmZyZWVUaWVyQmFubmVyPy0xOjkpfX1mdW5jdGlvbiB1d3QobixlKXsxJm4mJihKKDAsImEiLDE5KSxTZSgxLCJVcGRhdGUgTGljZW5jZSBLZXkiKSx0ZSgpKX1mdW5jdGlvbiBkd3QobixlKXtpZigxJm4mJihKKDAsImRpdiIsMTIpKDEsImRpdiIsMTMpKDIsImRp''@;'; put 'put ''diIsMTQpKDMsImRpdiIsMTUpLEl0KDQsImNkcy1pY29uIiwxNiksdGUoKSxKKDUsImRpdiIsMTcpLFNlKDYsIiBUaGUgcmVnaXN0ZXJlZCBudW1iZXIgb2YgdXNlcnMgZXhjZWVkcyB0aGUgbGltaXQgc3BlY2lmaWVkIGZvciB5b3VyIGxpY2Vuc2UuIFBsZWFzZSBjb250YWN0ICIpLEl0KDcs''@;'; put 'put ''ImNvbnRhY3QtbGluayIsMTgpLFNlKDgpLHRlKCkoKSgpLHZ0KDksdXd0LDIsMCwiYSIsMTkpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgyKTtpZSg4KSxTcigiIG9yIHlvdXIgcmVzZWxsZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFsIGxpY2VuY2UgZm9yIHNpdGUgaWQgIix0LnN5c3NpdGUuZ2V0''@;'; put 'put ''VmFsdWUoKSwiLiAiKSxpZSgpLF90KHQubGljZW5zZUV4cGlyaW5nRGF5c3x8dC5mcmVlVGllckJhbm5lcj8tMTo5KX19ZnVuY3Rpb24gaHd0KG4sZSl7aWYoMSZuJiYodnQoMCxzd3QsMywyLCJkaXYiLDExKSx2dCgxLGN3dCwxMCw0LCJkaXYiLDEyKSx2dCgyLGR3dCwxMCwyLCJkaXYiLDEy''@;'; put 'put ''KSksMiZuKXtjb25zdCB0PVRlKCk7X3QodC5mcmVlVGllckJhbm5lciYmKCF0LmxpY2Vuc2VFeHBpcmluZ0RheXN8fHQubGljZW5zZUV4cGlyaW5nRGF5czwwKT8wOi0xKSxpZSgpLF90KHQubGljZW5zZUV4cGlyaW5nRGF5cyYmIXQuZnJlZVRpZXJCYW5uZXI/MTotMSksaWUoKSxfdCh0LmFw''@;'; put 'put ''cE92ZXJDYXBhY2l0eT8yOi0xKX19ZnVuY3Rpb24gZnd0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJkaXYiLDI2KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKDIpLnRvZ2dsZVNpZGViYXIoKSl9KSxJdCgxLCJjbHItaWNvbiIsMjcpLHRlKCl9fWZ1''@;'; put 'put ''bmN0aW9uIHB3dChuLGUpezEmbiYmKEooMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDM1KSgxLCJhIiwzNiksU2UoMiwiVklFVyIpLHRlKCksSigzLCJhIiwzNiksU2UoNCwiTE9BRCIpLHRlKCksSig1LCJhIiwzNiksU2UoNiwiUkVWSUVXIiksdGUoKSgpKSwyJm4mJihpZSgpLHJ0KCJyb3V0ZXJM''@;'; put 'put ''aW5rIixtYygzLGJUZSkpLGllKDIpLHJ0KCJyb3V0ZXJMaW5rIixtYyg0LHdUZSkpLGllKDIpLHJ0KCJyb3V0ZXJMaW5rIixtYyg1LE9hZSkpKX1mdW5jdGlvbiBnd3QobixlKXtpZigxJm4mJihKKDAsImRpdiIsMjgpKDEsImNsci1kcm9wZG93biIpKDIsImJ1dHRvbiIsMjkpLFNlKDMsIiBN''@;'; put 'put ''ZW51ICIpLHRlKCksWW4oNCxwd3QsNyw2LCJjbHItZHJvcGRvd24tbWVudSIsMzApLHRlKCkoKSxKKDUsImRpdiIsMzEpKDYsImEiLDMyKSxTZSg3LCJWSUVXIiksdGUoKSxKKDgsImEiLDMzKSxTZSg5LCJMT0FEIiksdGUoKSxKKDEwLCJhIiwzNCksU2UoMTEsIlJFVklFVyIpLHRlKCkoKSks''@;'; put 'put ''MiZuKXtjb25zdCB0PVRlKDIpO2llKDYpLHJ0KCJyb3V0ZXJMaW5rIixtYyg3LGJUZSkpLGllKDIpLHdyKCJhY3RpdmUiLHQucm91dGVyLnVybC5pbmNsdWRlcygiZWRpdG9yIil8fHQucm91dGVyLnVybC5pbmNsdWRlcygiZWRpdC1yZWNvcmQiKXx8dC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJo''@;'; put 'put ''b21lIikpLHJ0KCJyb3V0ZXJMaW5rIixtYyg4LHdUZSkpLGllKDIpLHdyKCJhY3RpdmUiLHQucm91dGVyLnVybC5pbmNsdWRlcygic3VibWl0dGVkIil8fHQucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpfHx0LnJvdXRlci51cmwuaW5jbHVkZXMoImhpc3RvcnkiKSkscnQoInJvdXRl''@;'; put 'put ''ckxpbmsiLG1jKDksT2FlKSl9fWZ1bmN0aW9uIG13dChuLGUpe2lmKDEmbiYmKEooMCwiaGVhZGVyIiwxKSx2dCgxLGZ3dCwyLDAsImRpdiIsMjEpLEooMiwiZGl2IiwyMikoMywiYSIsMjMpLEl0KDQsImltZyIsMjQpKDUsImltZyIsMjUpLHRlKCkoKSx2dCg2LGd3dCwxMiwxMCksSXQoNywi''@;'; put 'put ''YXBwLWhlYWRlci1hY3Rpb25zIiksdGUoKSksMiZuKXtjb25zdCB0PVRlKCk7aWUoKSxfdCh0LmlzTWFpblJvdXRlKCJ2aWV3Iil8fHQuaXNNYWluUm91dGUoImhvbWUiKSYmIXQucm91dGVyLnVybC5pbmNsdWRlcygibGljZW5zaW5nIik/MTotMSksaWUoMikscnQoInJvdXRlckxpbmsiLG1j''@;'; put 'put ''KDMsdHd0KSksaWUoMyksX3QodC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKXx8dC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKT8tMTo2KX19ZnVuY3Rpb24gdnd0KG4sZSl7aWYoMSZuJiYoSigwLCJuYXYiLDIpKDEsInVsIiwzNykoMiwibGkiLDM4KSgzLCJhIiwzMiks''@;'; put 'put ''U2UoNCwiU1VCTUlUIiksdGUoKSgpLEooNSwibGkiLDM4KSg2LCJhIiwzMiksU2UoNywiQVBQUk9WRSIpLHRlKCkoKSxKKDgsImxpIiwzOCkoOSwiYSIsMzIpLFNlKDEwLCJISVNUT1JZIiksdGUoKSgpKCkoKSksMiZuKXtjb25zdCB0PVRlKCk7aWUoMykscnQoInJvdXRlckxpbmsiLG1jKDUs''@;'; put 'put ''T2FlKSksaWUoMyksd3IoImFjdGl2ZSIsdC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJhcHByb3ZlIikpLHJ0KCJyb3V0ZXJMaW5rIixtYyg2LG53dCkpLGllKDMpLHJ0KCJyb3V0ZXJMaW5rIixtYyg3LHJ3dCkpfX1mdW5jdGlvbiBfd3QobixlKXsxJm4mJkl0KDAsImFwcC1hbGVydHMiKX1mdW5j''@;'; put 'put ''dGlvbiB5d3QobixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRpdiIsNCkoMSwiYnV0dG9uIiwzOSksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLmJhY2tUb0VkaXRvcigpKX0pLEl0KDIsImNsci1pY29uIiw0MCksU2UoMywiIEJhY2sgdG8gRWRpdCB0''@;'; put 'put ''YWJsZSAiKSx0ZSgpKCl9fWZ1bmN0aW9uIGJ3dChuLGUpezEmbiYmSXQoMCwicm91dGVyLW91dGxldCIpfWZ1bmN0aW9uIHd3dChuLGUpezEmbiYmSXQoMCwiYXBwLWFsZXJ0cyIpfWZ1bmN0aW9uIEN3dChuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiYXBwLWluZm8tbW9kYWwiLDQx''@;'; put 'put ''KSx3dCgib25Db25maXJtTW9kYWxDbGljayIsZnVuY3Rpb24oKXtjb25zdCBpPVllKHQpLiRpbXBsaWNpdDtyZXR1cm4gWGUoVGUoKS5jbG9zZUFib3J0TW9kYWwoaS5pZCkpfSksdGUoKX1pZigyJm4pe2NvbnN0IHQ9ZS4kaW1wbGljaXQscj1UZSgpO3J0KCJkYXRhIix0KSgiZm9yY2VSZWxv''@;'; put 'put ''YWQiLCFyLnN0YXJ0dXBEYXRhTG9hZGVkJiYxPT09ci5zYXNqc0Fib3J0cy5sZW5ndGgpfX1mdW5jdGlvbiBTd3QobixlKXsxJm4mJihKKDAsImRpdiIsNDMpLEl0KDEsImRpdiIsNDUpKDIsImRpdiIsNDYpKDMsImRpdiIsNDcpLHRlKCkpfWZ1bmN0aW9uIEV3dChuLGUpezEmbiYmSXQoMCwi''@;'; put 'put ''Y2xyLWljb24iLDUwKX1mdW5jdGlvbiBNd3QobixlKXsxJm4mJkl0KDAsImNsci1zcGlubmVyIiw1MSl9ZnVuY3Rpb24gVHd0KG4sZSl7MSZuJiZJdCgwLCJjbHItaWNvbiIsNTIpfWZ1bmN0aW9uIHh3dChuLGUpezEmbiYmSXQoMCwiY2xyLWljb24iLDUzKX1mdW5jdGlvbiBBd3QobixlKXtp''@;'; put 'put ''ZigxJm4mJihKKDAsInNwYW4iLDU1KSxTZSgxKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoKS4kaW1wbGljaXQ7aWUoKSxwcih0LmRldGFpbCl9fWZ1bmN0aW9uIGt3dChuLGUpe2lmKDEmbiYmKEooMCwiZGl2Iiw0OSksdnQoMSxFd3QsMSwwLCJjbHItaWNvbiIsNTApKDIsTXd0LDEsMCwiY2xy''@;'; put 'put ''LXNwaW5uZXIiLDUxKSgzLFR3dCwxLDAsImNsci1pY29uIiw1MikoNCx4d3QsMSwwLCJjbHItaWNvbiIsNTMpLEooNSwic3BhbiIsNTQpLFNlKDYpLHRlKCksdnQoNyxBd3QsMiwxLCJzcGFuIiw1NSksdGUoKSksMiZuKXtsZXQgdDtjb25zdCByPWUuJGltcGxpY2l0O3dyKCJzdGFydHVwLWNo''@;'; put 'put ''ZWNrLS1lcnJvciIsImVycm9yIj09PXIuc3RhdHVzKSgic3RhcnR1cC1jaGVjay0tZG9uZSIsImRvbmUiPT09ci5zdGF0dXMpLGllKCksX3QoInBlbmRpbmciPT09KHQ9ci5zdGF0dXMpPzE6ImluX3Byb2dyZXNzIj09PXQ/MjoiZG9uZSI9PT10PzM6ImVycm9yIj09PXQ/NDotMSksaWUoNSks''@;'; put 'put ''cHIoci5sYWJlbCksaWUoKSxfdChyLmRldGFpbD83Oi0xKX19ZnVuY3Rpb24gUnd0KG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiLDQ0KSxfbygxLGt3dCw4LDcsImRpdiIsNDgsaXd0KSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoMik7aWUoKSx5byh0LnN0YXJ0dXBTdGVwcyl9fWZ1bmN0aW9uIEl3''@;'; put 'put ''dChuLGUpe2lmKDEmbiYmKEooMCwiZGl2IiwxMCksSXQoMSwiaW1nIiw0MiksdnQoMixTd3QsNCwwLCJkaXYiLDQzKSx2dCgzLFJ3dCwzLDAsImRpdiIsNDQpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgpO2llKDIpLF90KG51bGw9PT10LmFwcEFjdGl2ZT8yOi0xKSxpZSgpLF90KHQuc3RhcnR1''@;'; put 'put ''cFN0ZXBzLmxlbmd0aD4wPzM6LTEpfX16bC5hZGRJY29ucyhbIm1vb24iLHtvdXRsaW5lOic8cGF0aCBkPSJNMTguMTEgMzIuMDAwM0MxMC4zMyAzMi4wMDAzIDQgMjUuNzIwMyA0IDE3Ljk5MDNDNCAxMC4yNjAzIDEwLjAzIDQuMjAwMyAxNy43MyA0LjAwMDNDMTguMTUgMy45OTAzIDE4LjUy''@;'; put 'put ''IDQuMjMwMyAxOC42OCA0LjYxMDNDMTguODQgNC45OTAzIDE4Ljc1IDUuNDMwMyAxOC40NiA1LjcyMDNDMTYuNjkgNy40NTAzIDE1LjcxIDkuNzYwMyAxNS43MSAxMi4yMTAzQzE1LjcxIDE3LjI0MDMgMTkuODMgMjEuMzMwMyAyNC45MSAyMS4zMzAzQzI2LjkgMjEuMzMwMyAyOC44IDIwLjcw''@;'; put 'put ''MDMgMzAuNDEgMTkuNTEwM0MzMC43NCAxOS4yNzAzIDMxLjE5IDE5LjI1MDMgMzEuNTMgMTkuNDYwM0MzMS44OCAxOS42ODAzIDMyLjA2IDIwLjA4MDMgMzEuOTkgMjAuNDkwM0MzMC43OCAyNy4xNjAzIDI0Ljk0IDMyLjAwMDMgMTguMTEgMzIuMDAwM1pNMTUuNDMgNi4yOTAzQzkuOTkgNy40''@;'; put 'put ''ODAzIDYgMTIuMjQwMyA2IDE3Ljk5MDNDNiAyNC42MTAzIDExLjQzIDMwLjAwMDMgMTguMTEgMzAuMDAwM0MyMy4xNiAzMC4wMDAzIDI3LjU4IDI2LjkyMDMgMjkuMzcgMjIuNDAwM0MyNy45NyAyMy4wMTAzIDI2LjQ2IDIzLjMyMDMgMjQuOTEgMjMuMzIwM0MxOC43NCAyMy4zMjAzIDEzLjcx''@;'; put 'put ''IDE4LjMzMDMgMTMuNzEgMTIuMjAwM0MxMy43MSAxMC4wNzAzIDE0LjMxIDguMDMwMyAxNS40MyA2LjI4MDNWNi4yOTAzWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOC4xMSAzMi4wMDAzQzEwLjMzIDMyLjAwMDMgNCAyNS43MjAzIDQgMTcuOTkwM0M0IDEwLjI2MDMgMTAuMDMgNC4yMDAzIDE3''@;'; put 'put ''LjczIDQuMDAwM0MxOC4xNSAzLjk5MDMgMTguNTIgNC4yMzAzIDE4LjY4IDQuNjEwM0MxOC44NCA0Ljk5MDMgMTguNzUgNS40MzAzIDE4LjQ2IDUuNzIwM0MxNi42OSA3LjQ1MDMgMTUuNzEgOS43NjAzIDE1LjcxIDEyLjIxMDNDMTUuNzEgMTcuMjQwMyAxOS44MyAyMS4zMzAzIDI0LjkxIDIx''@;'; put 'put ''LjMzMDNDMjYuOSAyMS4zMzAzIDI4LjggMjAuNzAwMyAzMC40MSAxOS41MTAzQzMwLjc0IDE5LjI3MDMgMzEuMTkgMTkuMjUwMyAzMS41MyAxOS40NjAzQzMxLjg4IDE5LjY4MDMgMzIuMDYgMjAuMDgwMyAzMS45OSAyMC40OTAzQzMwLjc4IDI3LjE2MDMgMjQuOTQgMzIuMDAwMyAxOC4xMSAz''@;'; put 'put ''Mi4wMDAzWiIvPid9XSxbInN1biIse291dGxpbmU6JzxwYXRoIGQ9Ik04LjgxIDEwLjIyQzkuMDEgMTAuNDIgOS4yNiAxMC41MSA5LjUyIDEwLjUxQzkuNzggMTAuNTEgMTAuMDMgMTAuNDEgMTAuMjMgMTAuMjJDMTAuNjIgOS44MyAxMC42MiA5LjIgMTAuMjMgOC44MUw4LjExIDYuNjlDNy43''@;'; put 'put ''MiA2LjMgNy4wOSA2LjMgNi43IDYuNjlDNi4zMSA3LjA4IDYuMzEgNy43MSA2LjcgOC4xTDguODIgMTAuMjJIOC44MVpNNyAxOEM3IDE3LjQ1IDYuNTUgMTcgNiAxN0gzQzIuNDUgMTcgMiAxNy40NSAyIDE4QzIgMTguNTUgMi40NSAxOSAzIDE5SDZDNi41NSAxOSA3IDE4LjU1IDcgMThaTTE4''@;'; put 'put ''IDdDMTguNTUgNyAxOSA2LjU1IDE5IDZWM0MxOSAyLjQ1IDE4LjU1IDIgMTggMkMxNy40NSAyIDE3IDIuNDUgMTcgM1Y2QzE3IDYuNTUgMTcuNDUgNyAxOCA3Wk0yNi40OSAxMC41MUMyNi43NSAxMC41MSAyNyAxMC40MSAyNy4yIDEwLjIyTDI5LjMyIDguMUMyOS43MSA3LjcxIDI5LjcxIDcu''@;'; put 'put ''MDggMjkuMzIgNi42OUMyOC45MyA2LjMgMjguMyA2LjMgMjcuOTEgNi42OUwyNS43OSA4LjgxQzI1LjQgOS4yIDI1LjQgOS44MyAyNS43OSAxMC4yMkMyNS45OSAxMC40MiAyNi4yNCAxMC41MSAyNi41IDEwLjUxSDI2LjQ5Wk04LjgxIDI1Ljc4TDYuNjkgMjcuOUM2LjMgMjguMjkgNi4zIDI4''@;'; put 'put ''LjkyIDYuNjkgMjkuMzFDNi44OSAyOS41MSA3LjE0IDI5LjYgNy40IDI5LjZDNy42NiAyOS42IDcuOTEgMjkuNSA4LjExIDI5LjMxTDEwLjIzIDI3LjE5QzEwLjYyIDI2LjggMTAuNjIgMjYuMTcgMTAuMjMgMjUuNzhDOS44NCAyNS4zOSA5LjIxIDI1LjM5IDguODIgMjUuNzhIOC44MVpNMzMg''@;'; put 'put ''MTdIMzBDMjkuNDUgMTcgMjkgMTcuNDUgMjkgMThDMjkgMTguNTUgMjkuNDUgMTkgMzAgMTlIMzNDMzMuNTUgMTkgMzQgMTguNTUgMzQgMThDMzQgMTcuNDUgMzMuNTUgMTcgMzMgMTdaTTE4IDlDMTMuMDQgOSA5IDEzLjA0IDkgMThDOSAyMi45NiAxMy4wNCAyNyAxOCAyN0MyMi45NiAyNyAy''@;'; put 'put ''NyAyMi45NiAyNyAxOEMyNyAxMy4wNCAyMi45NiA5IDE4IDlaTTE4IDI1QzE0LjE0IDI1IDExIDIxLjg2IDExIDE4QzExIDE0LjE0IDE0LjE0IDExIDE4IDExQzIxLjg2IDExIDI1IDE0LjE0IDI1IDE4QzI1IDIxLjg2IDIxLjg2IDI1IDE4IDI1Wk0yNy4xOSAyNS43OEMyNi44IDI1LjM5IDI2''@;'; put 'put ''LjE3IDI1LjM5IDI1Ljc4IDI1Ljc4QzI1LjM5IDI2LjE3IDI1LjM5IDI2LjggMjUuNzggMjcuMTlMMjcuOSAyOS4zMUMyOC4xIDI5LjUxIDI4LjM1IDI5LjYgMjguNjEgMjkuNkMyOC44NyAyOS42IDI5LjEyIDI5LjUgMjkuMzIgMjkuMzFDMjkuNzEgMjguOTIgMjkuNzEgMjguMjkgMjkuMzIg''@;'; put 'put ''MjcuOUwyNy4yIDI1Ljc4SDI3LjE5Wk0xOCAyOUMxNy40NSAyOSAxNyAyOS40NSAxNyAzMFYzM0MxNyAzMy41NSAxNy40NSAzNCAxOCAzNEMxOC41NSAzNCAxOSAzMy41NSAxOSAzM1YzMEMxOSAyOS40NSAxOC41NSAyOSAxOCAyOVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNOC44MSAyNS43OEw2''@;'; put 'put ''LjY5IDI3LjlDNi4zIDI4LjI5IDYuMyAyOC45MiA2LjY5IDI5LjMxQzYuODkgMjkuNTEgNy4xNCAyOS42IDcuNCAyOS42QzcuNjYgMjkuNiA3LjkxIDI5LjUgOC4xMSAyOS4zMUwxMC4yMyAyNy4xOUMxMC42MiAyNi44IDEwLjYyIDI2LjE3IDEwLjIzIDI1Ljc4QzkuODQgMjUuMzkgOS4yMSAy''@;'; put 'put ''NS4zOSA4LjgyIDI1Ljc4SDguODFaTTcgMThDNyAxNy40NSA2LjU1IDE3IDYgMTdIM0MyLjQ1IDE3IDIgMTcuNDUgMiAxOEMyIDE4LjU1IDIuNDUgMTkgMyAxOUg2QzYuNTUgMTkgNyAxOC41NSA3IDE4Wk04LjgxIDEwLjIyQzkuMDEgMTAuNDIgOS4yNiAxMC41MSA5LjUyIDEwLjUxQzkuNzgg''@;'; put 'put ''MTAuNTEgMTAuMDMgMTAuNDEgMTAuMjMgMTAuMjJDMTAuNjIgOS44MyAxMC42MiA5LjIgMTAuMjMgOC44MUw4LjExIDYuNjlDNy43MiA2LjMgNy4wOSA2LjMgNi43IDYuNjlDNi4zMSA3LjA4IDYuMzEgNy43MSA2LjcgOC4xTDguODIgMTAuMjJIOC44MVpNMjYuNDkgMTAuNTFDMjYuNzUgMTAu''@;'; put 'put ''NTEgMjcgMTAuNDEgMjcuMiAxMC4yMkwyOS4zMiA4LjFDMjkuNzEgNy43MSAyOS43MSA3LjA4IDI5LjMyIDYuNjlDMjguOTMgNi4zIDI4LjMgNi4zIDI3LjkxIDYuNjlMMjUuNzkgOC44MUMyNS40IDkuMiAyNS40IDkuODMgMjUuNzkgMTAuMjJDMjUuOTkgMTAuNDIgMjYuMjQgMTAuNTEgMjYu''@;'; put 'put ''NSAxMC41MUgyNi40OVpNMTggN0MxOC41NSA3IDE5IDYuNTUgMTkgNlYzQzE5IDIuNDUgMTguNTUgMiAxOCAyQzE3LjQ1IDIgMTcgMi40NSAxNyAzVjZDMTcgNi41NSAxNy40NSA3IDE4IDdaTTE4IDI5QzE3LjQ1IDI5IDE3IDI5LjQ1IDE3IDMwVjMzQzE3IDMzLjU1IDE3LjQ1IDM0IDE4IDM0''@;'; put 'put ''QzE4LjU1IDM0IDE5IDMzLjU1IDE5IDMzVjMwQzE5IDI5LjQ1IDE4LjU1IDI5IDE4IDI5Wk0zMyAxN0gzMEMyOS40NSAxNyAyOSAxNy40NSAyOSAxOEMyOSAxOC41NSAyOS40NSAxOSAzMCAxOUgzM0MzMy41NSAxOSAzNCAxOC41NSAzNCAxOEMzNCAxNy40NSAzMy41NSAxNyAzMyAxN1pNMjcu''@;'; put 'put ''MTkgMjUuNzhDMjYuOCAyNS4zOSAyNi4xNyAyNS4zOSAyNS43OCAyNS43OEMyNS4zOSAyNi4xNyAyNS4zOSAyNi44IDI1Ljc4IDI3LjE5TDI3LjkgMjkuMzFDMjguMSAyOS41MSAyOC4zNSAyOS42IDI4LjYxIDI5LjZDMjguODcgMjkuNiAyOS4xMiAyOS41IDI5LjMyIDI5LjMxQzI5LjcxIDI4''@;'; put 'put ''LjkyIDI5LjcxIDI4LjI5IDI5LjMyIDI3LjlMMjcuMiAyNS43OEgyNy4xOVpNMTggOUMxMy4wNCA5IDkgMTMuMDQgOSAxOEM5IDIyLjk2IDEzLjA0IDI3IDE4IDI3QzIyLjk2IDI3IDI3IDIyLjk2IDI3IDE4QzI3IDEzLjA0IDIyLjk2IDkgMTggOVoiLz4nfV0sWyJleGNsYW1hdGlvbi10cmlh''@;'; put 'put ''bmdsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xNy45OTQzIDIwLjhDMTguNTQ0IDIwLjggMTguOTkzOCAyMC4zNSAxOC45OTM4IDE5LjhWMTRDMTguOTkzOCAxMy40NSAxOC41NDQgMTMgMTcuOTk0MyAxM0MxNy40NDQ1IDEzIDE2Ljk5NDcgMTMuNDUgMTYuOTk0NyAxNFYxOS44QzE2Ljk5NDcg''@;'; put 'put ''MjAuMzUgMTcuNDQ0NSAyMC44IDE3Ljk5NDMgMjAuOFpNMTguODQzOSAyMi45NUMxOC43MjM5IDIyLjg0IDE4LjU5NCAyMi43NSAxOC40NTQxIDIyLjY5QzE4LjE2NDIgMjIuNTcgMTcuODI0MyAyMi41NyAxNy41MzQ1IDIyLjY5QzE3LjM5NDUgMjIuNzUgMTcuMjY0NiAyMi44NCAxNy4xNDQ2''@;'; put 'put ''IDIyLjk1QzE2LjkyNDcgMjMuMTggMTYuNzk0OCAyMy40OCAxNi43OTQ4IDIzLjhDMTYuNzk0OCAyNC4xMiAxNi45MjQ3IDI0LjQyIDE3LjE0NDYgMjQuNjVDMTcuMjY0NiAyNC43NiAxNy4zOTQ1IDI0Ljg1IDE3LjUzNDUgMjQuOTFDMTcuNjg0NCAyNC45NyAxNy44MzQzIDI1IDE3Ljk5NDMg''@;'; put 'put ''MjVDMTguMTU0MiAyNSAxOC4zMDQxIDI0Ljk3IDE4LjQ1NDEgMjQuOTFDMTguNTk0IDI0Ljg1IDE4LjcyMzkgMjQuNzYgMTguODQzOSAyNC42NUMxOS4wNjM4IDI0LjQyIDE5LjE5MzcgMjQuMTIgMTkuMTkzNyAyMy44QzE5LjE5MzcgMjMuNjQgMTkuMTYzNyAyMy40OSAxOS4xMDM4IDIzLjM0''@;'; put 'put ''QzE5LjA0MzggMjMuMiAxOC45NTM4IDIzLjA2IDE4Ljg0MzkgMjIuOTVaTTMwLjU5ODYgMjUuNDNMMjAuNjYzMSA3LjU3QzIwLjExMzMgNi41OSAxOS4xMjM4IDYgMTcuOTk0MyA2QzE2Ljg2NDggNiAxNS44NzUyIDYuNTkgMTUuMzI1NCA3LjU3TDUuMzg5ODggMjUuNDNDNC44NTAxMiAyNi4z''@;'; put 'put ''OSA0Ljg3MDExIDI3LjUzIDUuNDE5ODcgMjguNDhDNS45Njk2MiAyOS40MyA2Ljk1OTE4IDMwIDguMDU4NjkgMzBIMjcuOTI5OEMyOS4wMjkzIDMwIDMwLjAwODkgMjkuNDMgMzAuNTY4NiAyOC40OEMzMS4xMjg0IDI3LjUzIDMxLjEzODQgMjYuMzkgMzAuNTk4NiAyNS40M1pNMjguODQ5NCAy''@;'; put 'put ''Ny40N0MyOC43NTk1IDI3LjYzIDI4LjQ3OTYgMjggMjcuOTM5OCAyOEg4LjA1ODY5QzcuNTA4OTQgMjggNy4yMzkwNiAyNy42MyA3LjE0OTEgMjcuNDdDNy4wNTkxNCAyNy4zMSA2Ljg2OTIyIDI2Ljg5IDcuMTQ5MSAyNi40MUwxNy4wNjQ3IDguNTVDMTcuMzM0NiA4LjA2IDE3LjgwNDMgOCAx''@;'; put 'put ''Ny45ODQzIDhDMTguMTY0MiA4IDE4LjYzNCA4LjA1IDE4LjkwMzkgOC41NUwyOC44Mzk0IDI2LjQxQzI5LjEwOTMgMjYuODkgMjguOTE5NCAyNy4zMSAyOC44Mjk0IDI3LjQ3SDI4Ljg0OTRaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTMwLjU5ODYgMjUuNDNMMjAuNjYzMSA3LjU3QzIwLjExMzMg''@;'; put 'put ''Ni41OSAxOS4xMjM4IDYgMTcuOTk0MyA2QzE2Ljg2NDggNiAxNS44NzUyIDYuNTkgMTUuMzI1NCA3LjU3TDUuMzg5ODggMjUuNDNDNC44NTAxMiAyNi4zOSA0Ljg3MDExIDI3LjUzIDUuNDE5ODcgMjguNDhDNS45Njk2MiAyOS40MyA2Ljk1OTE4IDMwIDguMDU4NjkgMzBIMjcuOTI5OEMyOS4w''@;'; put 'put ''MjkzIDMwIDMwLjAwODkgMjkuNDMgMzAuNTY4NiAyOC40OEMzMS4xMjg0IDI3LjUzIDMxLjEzODQgMjYuMzkgMzAuNTk4NiAyNS40M1pNMTYuNzk0OCAxMy41QzE2Ljc5NDggMTIuODQgMTcuMzM0NiAxMi4zIDE3Ljk5NDMgMTIuM0MxOC42NTQgMTIuMyAxOS4xOTM3IDEyLjg0IDE5LjE5Mzcg''@;'; put 'put ''MTMuNVYxOS4zQzE5LjE5MzcgMTkuOTYgMTguNjU0IDIwLjUgMTcuOTk0MyAyMC41QzE3LjMzNDYgMjAuNSAxNi43OTQ4IDE5Ljk2IDE2Ljc5NDggMTkuM1YxMy41Wk0xOC45NzM4IDI1QzE4LjgzMzkgMjUuMTMgMTguNjg0IDI1LjIzIDE4LjUyNCAyNS4zQzE4LjM0NDEgMjUuMzcgMTguMTc0''@;'; put 'put ''MiAyNS40MSAxNy45OTQzIDI1LjQxQzE3LjgxNDMgMjUuNDEgMTcuNjM0NCAyNS4zOCAxNy40NTQ1IDI1LjNDMTcuMzA0NiAyNS4yMyAxNy4xNTQ2IDI1LjEzIDE2Ljk5NDcgMjQuOTlDMTYuNzM0OCAyNC43MiAxNi41ODQ5IDI0LjM3IDE2LjU4NDkgMjRDMTYuNTg0OSAyMy42MyAxNi43MjQ4''@;'; put 'put ''IDIzLjI5IDE2Ljk5NDcgMjNDMTcuMTM0NiAyMi44NyAxNy4yODQ2IDIyLjc3IDE3LjQ0NDUgMjIuN0MxNy42MTQ0IDIyLjYzIDE3Ljc5NDMgMjIuNTkgMTcuOTg0MyAyMi41OUMxOC4xNzQyIDIyLjU5IDE4LjM1NDEgMjIuNjMgMTguNTI0IDIyLjdDMTguNjc0IDIyLjc3IDE4LjgyMzkgMjIu''@;'; put 'put ''ODcgMTguOTczOCAyM0MxOS4wOTM4IDIzLjEyIDE5LjIwMzcgMjMuMjggMTkuMjczNyAyMy40NkMxOS4zNDM3IDIzLjY0IDE5LjM4MzYgMjMuODEgMTkuMzgzNiAyMy45OUMxOS4zODM2IDI0LjM1IDE5LjI0MzcgMjQuNyAxOC45NjM4IDI0Ljk5TDE4Ljk3MzggMjVaIi8+J31dLFsidGFibGUi''@;'; put 'put ''LHtvdXRsaW5lOic8cGF0aCBkPSJNMzMgMThDMzMuNTUgMTggMzQgMTcuNTUgMzQgMTdDMzQgMTYuNDUgMzMuNTUgMTYgMzMgMTZIMjhWOEgzM0MzMy41NSA4IDM0IDcuNTUgMzQgN0MzNCA2LjQ1IDMzLjU1IDYgMzMgNkg4VjNDOCAyLjQ1IDcuNTUgMiA3IDJDNi40NSAyIDYgMi40NSA2IDNW''@;'; put 'put ''NkgzQzIuNDUgNiAyIDYuNDUgMiA3QzIgNy41NSAyLjQ1IDggMyA4SDZWMzNDNiAzMy41NSA2LjQ1IDM0IDcgMzRDNy41NSAzNCA4IDMzLjU1IDggMzNWMjhIMTZWMzNDMTYgMzMuNTUgMTYuNDUgMzQgMTcgMzRDMTcuNTUgMzQgMTggMzMuNTUgMTggMzNWMjhIMjZWMzNDMjYgMzMuNTUgMjYu''@;'; put 'put ''NDUgMzQgMjcgMzRDMjcuNTUgMzQgMjggMzMuNTUgMjggMzNWMjhIMzNDMzMuNTUgMjggMzQgMjcuNTUgMzQgMjdDMzQgMjYuNDUgMzMuNTUgMjYgMzMgMjZIMjhWMThIMzNaTTE2IDI2SDhWMThIMTZWMjZaTTE2IDE2SDhWOEgxNlYxNlpNMjYgMjZIMThWMThIMjZWMjZaTTI2IDE2SDE4VjhI''@;'; put 'put ''MjZWMTZaIi8+J31dLFsidHJhc2giLHtvdXRsaW5lOic8cGF0aCBkPSJNMjcuOTggMzFDMjggMzEuMjUgMjcuOTIgMzEuNDkgMjcuNzYgMzEuNjhDMjcuNiAzMS44NyAyNy4zNyAzMS45OCAyNy4xMiAzMkg4Ljg1QzguNiAzMS45OCA4LjM3IDMxLjg3IDguMjEgMzEuNjhDOC4wNSAzMS40OSA3''@;'; put 'put ''Ljk3IDMxLjI1IDcuOTkgMzFWMTEuMDNINS45N1YzMUM1Ljk1IDMxLjc4IDYuMjQgMzIuNTMgNi43OCAzMy4wOUM3LjMyIDMzLjY1IDguMDYgMzMuOTggOC44NSAzNEgyNy4xMkMyNy45IDMzLjk4IDI4LjY1IDMzLjY2IDI5LjE5IDMzLjA5QzI5LjczIDMyLjUyIDMwLjAyIDMxLjc3IDMwIDMx''@;'; put 'put ''VjExLjAzSDI3Ljk4VjMxWk0xMyAxMi45OFYyNy45OEgxNS4wMlYxMi45OEgxM1pNMTUgNEgyMVY2SDIzVjRDMjMgMi45IDIyLjEgMiAyMSAySDE1QzEzLjkgMiAxMyAyLjkgMTMgNFY2SDE1VjRaTTMwLjk5IDYuOThINS4wMUM0LjQ1IDYuOTggNCA3LjQzIDQgNy45OEM0IDguNTMgNC40NSA4''@;'; put 'put ''Ljk4IDUuMDEgOC45OEgzMC45OUMzMS41NSA4Ljk4IDMyIDguNTMgMzIgNy45OEMzMiA3LjQzIDMxLjU1IDYuOTggMzAuOTkgNi45OFpNMjAuOTggMTIuOThWMjcuOThIMjNWMTIuOThIMjAuOThaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE1IDRIMjFWNkgyM1Y0QzIzIDIuOSAyMi4xIDIgMjEg''@;'; put 'put ''MkgxNUMxMy45IDIgMTMgMi45IDEzIDRWNkgxNVY0Wk0zMC45OSA2Ljk4SDUuMDFDNC40NSA2Ljk4IDQgNy40MyA0IDcuOThDNCA4LjUzIDQuNDUgOC45OCA1LjAxIDguOThIMzAuOTlDMzEuNTUgOC45OCAzMiA4LjUzIDMyIDcuOThDMzIgNy40MyAzMS41NSA2Ljk4IDMwLjk5IDYuOThaTTUu''@;'; put 'put ''OTcgMTEuMDNWMzFDNS45NSAzMS43OCA2LjI0IDMyLjUzIDYuNzggMzMuMDlDNy4zMiAzMy42NSA4LjA2IDMzLjk4IDguODUgMzRIMjcuMTJDMjcuOSAzMy45OCAyOC42NSAzMy42NiAyOS4xOSAzMy4wOUMyOS43MyAzMi41MiAzMC4wMiAzMS43NyAzMCAzMVYxMS4wM0g1Ljk3Wk0yMC43OSAy''@;'; put 'put ''OC44MlYxNUgyMy4yMVYyOUgyMC43OVYyOC44MlpNMTIuODEgMjguODJWMTVIMTUuMjNWMjlIMTIuODFWMjguODJaIi8+J31dLFsicHJvY2Vzcy1vbi12bSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xMiAxNC41MDAxVjI0LjUwMDFDMTIgMjUuMDUwMSAxMi40NSAyNS41MDAxIDEzIDI1LjUwMDFI''@;'; put 'put ''MjNDMjMuNTUgMjUuNTAwMSAyNCAyNS4wNTAxIDI0IDI0LjUwMDFWMTQuNTAwMUMyNCAxMy45NTAxIDIzLjU1IDEzLjUwMDEgMjMgMTMuNTAwMUgxM0MxMi40NSAxMy41MDAxIDEyIDEzLjk1MDEgMTIgMTQuNTAwMVpNMTQgMTUuNTAwMUgyMlYyMy41MDAxSDE0VjE1LjUwMDFaTTUuMjYgMjIu''@;'; put 'put ''MjgwMUM1LjgxIDIyLjIwMDEgNi4xOSAyMS43MDAxIDYuMTEgMjEuMTUwMUM2LjAzIDIwLjYxMDEgNiAyMC4wNTAxIDYgMTkuNDkwMUM2IDEzLjQxMDEgMTAuNTUgOC4zOTAwNiAxNi40NyA3LjYxMDA2TDE2LjI5IDcuNzkwMDZDMTUuOSA4LjE4MDA2IDE1LjkgOC44MTAwNiAxNi4yOSA5LjIw''@;'; put 'put ''MDA2QzE2LjQ5IDkuNDAwMDYgMTYuNzQgOS40OTAwNiAxNyA5LjQ5MDA2QzE3LjI2IDkuNDkwMDYgMTcuNTEgOS4zOTAwNiAxNy43MSA5LjIwMDA2TDIwLjQyIDYuNDkwMDZMMTcuNzEgMy43OTAwNkMxNy4zMiAzLjQwMDA2IDE2LjY5IDMuNDAwMDYgMTYuMyAzLjc5MDA2QzE1LjkxIDQuMTgw''@;'; put 'put ''MDYgMTUuOTEgNC44MTAwNiAxNi4zIDUuMjAwMDZMMTYuNjYgNS41NjAwNkM5LjU2IDYuMjUwMDYgNCAxMi4yMzAxIDQgMTkuNTAwMUM0IDIwLjE1MDEgNC4wNCAyMC44MDAxIDQuMTMgMjEuNDMwMUM0LjIgMjEuOTMwMSA0LjYzIDIyLjI5MDEgNS4xMiAyMi4yOTAxQzUuMTYgMjIuMjkwMSA1''@;'; put 'put ''LjIxIDIyLjI5MDEgNS4yNiAyMi4yOTAxVjIyLjI4MDFaTTIzLjY3IDMwLjA3MDFDMjEuOTQgMzEuMDAwMSAxOS45OCAzMS40OTAxIDE4IDMxLjQ5MDFDMTQuMyAzMS40OTAxIDEwLjgzIDI5Ljc2MDEgOC41NyAyNi45MDAxTDguODMgMjYuOTQwMUM5LjM4IDI3LjA0MDEgOS44OSAyNi42NjAx''@;'; put 'put ''IDkuOTggMjYuMTIwMUMxMC4wNyAyNS41ODAxIDkuNyAyNS4wNjAxIDkuMTYgMjQuOTcwMUw1LjM4IDI0LjM0MDFMNC43NSAyOC4xMjAxQzQuNjYgMjguNjYwMSA1LjAzIDI5LjE4MDEgNS41NyAyOS4yNzAxQzUuNjMgMjkuMjcwMSA1LjY4IDI5LjI4MDEgNS43NCAyOS4yODAxQzYuMjIgMjku''@;'; put 'put ''MjgwMSA2LjY0IDI4LjkzMDEgNi43MyAyOC40NTAxTDYuODIgMjcuOTIwMUM5LjQ1IDMxLjQwMDEgMTMuNTkgMzMuNTAwMSAxOCAzMy41MDAxQzIwLjMxIDMzLjUwMDEgMjIuNiAzMi45MzAxIDI0LjYyIDMxLjg0MDFDMjUuMTEgMzEuNTgwMSAyNS4yOSAzMC45NzAxIDI1LjAzIDMwLjQ5MDFD''@;'; put 'put ''MjQuNzcgMzAuMDAwMSAyNC4xNiAyOS44MjAxIDIzLjY4IDMwLjA4MDFMMjMuNjcgMzAuMDcwMVpNMzAuMDkgMjYuODMwMUwyOS45IDI2Ljg2MDFDMzEuMjYgMjQuNjYwMSAzMiAyMi4xMjAxIDMyIDE5LjQ5MDFDMzIgMTMuOTAwMSAyOC42OCA4Ljg1MDA2IDIzLjU1IDYuNjMwMDZDMjMuMDQg''@;'; put 'put ''Ni40MTAwNiAyMi40NiA2LjY0MDA2IDIyLjI0IDcuMTUwMDZDMjIuMDIgNy42NjAwNiAyMi4yNSA4LjI1MDA2IDIyLjc2IDguNDYwMDZDMjcuMTYgMTAuMzYwMSAzMC4wMSAxNC42OTAxIDMwLjAxIDE5LjQ4MDFDMzAuMDEgMjEuODAwMSAyOS4zNCAyNC4wNDAxIDI4LjEgMjUuOTYwMUwyNy45''@;'; put 'put ''OSAyNS4zMjAxQzI3LjkgMjQuNzgwMSAyNy4zOSAyNC40MDAxIDI2Ljg0IDI0LjUwMDFDMjYuMyAyNC41OTAxIDI1LjkzIDI1LjEwMDEgMjYuMDIgMjUuNjUwMUwyNi42NCAyOS40MzAxTDMwLjQyIDI4LjgxMDFDMzAuOTYgMjguNzIwMSAzMS4zMyAyOC4yMTAxIDMxLjI0IDI3LjY2MDFDMzEu''@;'; put 'put ''MTUgMjcuMTIwMSAzMC42NCAyNi43NDAxIDMwLjA5IDI2Ljg0MDFWMjYuODMwMVoiLz4nfV0pO2xldCBEd3Q9KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3RvcihyLGksbyxhLGwsdSxnLEUsTyxaKXt0aGlzLmFwcFNlcnZpY2U9cix0aGlzLmxpY2VuY2VTZXJ2aWNlPWksdGhpcy5yb3V0''@;'; put 'put ''ZXI9byx0aGlzLnJvdXRlPWEsdGhpcy5sb2NhdGlvbj1sLHRoaXMuZXZlbnRTZXJ2aWNlPXUsdGhpcy5hcHBTdG9yZVNlcnZpY2U9Zyx0aGlzLnN0YXJ0dXBDaGVja1NlcnZpY2U9RSx0aGlzLmNkcj1PLHRoaXMuZWxlbWVudFJlZj1aLHRoaXMubGljZW5zZUV4cGlyaW5nRGF5cz1udWxsLHRo''@;'; put 'put ''aXMuc2FzanNBYm9ydHM9W10sdGhpcy5lZGl0b3JBY3RpdmU9ITEsdGhpcy5hcHByb3ZlQWN0aXZlPSExLHRoaXMuZnJlZVRpZXJCYW5uZXI9dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVUaWVyLnZhbHVlLHRoaXMubGljZW5jZVByb2JsZW09dGhpcy5saWNlbmNlU2VydmljZS5saWNl''@;'; put 'put ''bmNlUHJvYmxlbSx0aGlzLmFwcE92ZXJDYXBhY2l0eT0hMSx0aGlzLmFwcEFjdGl2ZT1udWxsLHRoaXMucmVxdWVzdHNNb2RhbD0hMSx0aGlzLnNob3dSZWdpc3RyYXRpb249ITAsdGhpcy5zdGFydHVwRGF0YUxvYWRlZD0hMSx0aGlzLnN0YXJ0dXBTdGVwcz1bXSx0aGlzLmRlbW9MaW1pdE5v''@;'; put 'put ''dGljZT17b3BlbjohMSxmZWF0dXJlTmFtZToiIn0sdGhpcy5zeXNzaXRlPXRoaXMuYXBwU2VydmljZS5zeXNzaXRlLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuZW1iZWQ9VW4uZW1iZWQsdGhpcy5wYXJzZURjQWRhcHRlclNldHRpbmdz''@;'; put 'put ''KCksdGhpcy5zdGFydHVwQ2hlY2tTZXJ2aWNlLnN0ZXBzJC5zdWJzY3JpYmUodmU9Pnt0aGlzLnN0YXJ0dXBTdGVwcz12ZX0pLHdpbmRvdy5hcHBpbmZvPSgpPT57Y29uc29sZS50YWJsZSh7IkFkYXB0ZXIgdmVyc2lvbiI6IjQuMTkuMCIsIkFwcCB2ZXJzaW9uIjoidjcuMTYuMCIucmVwbGFj''@;'; put 'put ''ZSgidiIsIiIpLCJCdWlsZCB0aW1lc3RhbXAiOlNwKCkocGFyc2VJbnQoIjE3OTA1ODY1ODcxNTciKSkuZm9ybWF0KCJERC1NTU0tWVlZWSBISDpNTSIpLCIuLi4iOiIuLi4ifSl9LHRoaXMuc3Vic2NyaWJlVG9MaWNlbnNlRXZlbnRzKCksdGhpcy5jb21taXRWZXI9InY3LjE2LjAiLnJlcGxh''@;'; put 'put ''Y2UoInYiLCIiKSsiLmc3OTE4OWVmIixvLmV2ZW50cy5zdWJzY3JpYmUodmU9PntpZih0aGlzLnJvdXRlVXJsPXRoaXMucm91dGVyLnVybCx0eXBlb2YgdGhpcy5yb3V0ZVVybDwidSImJnRoaXMucm91dGVVcmwubGVuZ3RoPjQpe2xldCBNZT10aGlzLnJvdXRlVXJsLnNwbGl0KCIvIilbMV07''@;'; put 'put ''ImVkaXRvciI9PT1NZT8odGhpcy5lcnJUb3A9ITAsdGhpcy5lZGl0b3JBY3RpdmU9ITAsdGhpcy5hcHByb3ZlQWN0aXZlPSExKToiaG9tZSI9PT1NZT8odGhpcy5lcnJUb3A9ITEsdGhpcy5lZGl0b3JBY3RpdmU9ITAsdGhpcy5hcHByb3ZlQWN0aXZlPSExKToodGhpcy5lcnJUb3A9ITAsdGhp''@;'; put 'put ''cy5lZGl0b3JBY3RpdmU9ITEpLFVuLnJvb3RQYXJhbT1NZX10eXBlb2YgdGhpcy5yb3V0ZVVybDwidSImJnRoaXMucm91dGVVcmwubGVuZ3RoPjYmJih0aGlzLmFwcHJvdmVBY3RpdmU9ISF0aGlzLnJvdXRlVXJsLmluY2x1ZGVzKCJhcHByb3ZlRGV0Iil8fCEhdGhpcy5yb3V0ZVVybC5pbmNs''@;'; put 'put ''dWRlcygidG9hcHByb3ZlIikpfSk7Y29uc3QgZWU9d2luZG93LmxvY2F0aW9uLmhhc2guc3BsaXQoIj8iKVsxXTtpZihlZSYmbnVsbCE9PW5ldyBVUkxTZWFyY2hQYXJhbXMoZWUpLmdldCgiZW1iZWQiKSl7Y29uc3QgdmU9ZnVuY3Rpb24gTmF0KG4pe2lmKCFuKXJldHVybiExO2NvbnN0IGU9''@;'; put 'put ''bmV3IFVSTFNlYXJjaFBhcmFtcyhuKS5nZXQoImVtYmVkIik7cmV0dXJuIG51bGwhPT1lJiYoInZhIj09PWU/InZhIjoiZmFsc2UiIT09ZSl9KGVlKTtVbi5lbWJlZD12ZSx0aGlzLmVtYmVkPXZlfXRoaXMuc3Vic2NyaWJlVG9TaG93QWJvcnRNb2RhbCgpLHRoaXMuc3Vic2NyaWJlVG9SZXF1''@;'; put 'put ''ZXN0c01vZGFsKCksdGhpcy5zdWJzY3JpYmVUb1N0YXJ0dXBEYXRhKCksdGhpcy5zdWJzY3JpYmVUb0FwcEFjdGl2ZSgpLHRoaXMuc3Vic2NyaWJlVG9EZW1vTGltaXRNb2RhbCgpLHdpbmRvdy5mcmFtZUVsZW1lbnQmJih3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgic3R5bGUi''@;'; put 'put ''LCJoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFsbG93ZnVsbHNjcmVlbiIsIiIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJmcmFtZWJvcmRlciIsIjAiKSx3aW5kb3cuZnJhbWVF''@;'; put 'put ''bGVtZW50LnNldEF0dHJpYnV0ZSgibWFyZ2luaGVpZ2h0IiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXJnaW53aWR0aCIsIjAiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwiYXV0byIpLHdpbmRvdy5mb2N1cygpKX1wYXJz''@;'; put 'put ''ZURjQWRhcHRlclNldHRpbmdzKCl7Y29uc3Qgcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJzYXNqcyIpO2lmKCFyKXJldHVybiB0aGlzLmxpY2VuY2VTZXJ2aWNlLmRlYWN0aXZhdGVBcHAoKSx2b2lkIHNldFRpbWVvdXQoKCk9Pnt0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChu''@;'; put 'put ''dWxsLCJQbGVhc2UgbWFrZSBzdXJlICdTQVNKUycgdGFnIHdpdGggY29uZmlnIGF0dHJpYnV0ZXMgaXMgYWRkZWQgdG8gaW5kZXguaHRtbCIsbnVsbCwiU0FTanMgQ29uZmlnIG5vdCBmb3VuZCIpfSk7Y29uc3QgaT1hPT5yLmdldEF0dHJpYnV0ZShhKXx8dm9pZCAwLG89e3NlcnZlclVybDpp''@;'; put 'put ''KCJzZXJ2ZXJVcmwiKXx8IiIsYXBwTG9jOmkoImFwcExvYyIpfHwiIixzZXJ2ZXJUeXBlOmkoInNlcnZlclR5cGUiKSxsb2dpbk1lY2hhbmlzbTppKCJsb2dpbk1lY2hhbmlzbSIpfHwiIixhZG1pbkdyb3VwOmkoImFkbWluR3JvdXAiKXx8IiIsZGNQYXRoOmkoImRjUGF0aCIpfHwiIixkZWJ1''@;'; put 'put ''ZzoidHJ1ZSI9PT1pKCJkZWJ1ZyIpfHwhMSx1c2VDb21wdXRlQXBpOnRoaXMucGFyc2VDb21wdXRlQXBpKGkoInVzZUNvbXB1dGVBcGkiKSkscnVuQXNUYXNrOiJ0cnVlIj09PWkoInJ1bkFzVGFzayIpfHwhMSxjb250ZXh0TmFtZTppKCJjb250ZXh0TmFtZSIpfHwiIixob3RMaWNlbmNlS2V5''@;'; put 'put ''OmkoImhvdExpY2VuY2VLZXkiKXx8IiJ9O3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M9byx0aGlzLmFwcFN0b3JlU2VydmljZS5zZXREY0FkYXB0ZXJTZXR0aW5ncyhvKSx0aGlzLmFwcFNlcnZpY2Uuc2FzU2VydmljZUluaXQoKX1saWNlbmNlUHJvYmxlbURldGFpbHMocil7dGhpcy5yb3V0ZXIu''@;'; put 'put ''bmF2aWdhdGVCeVVybChyKX1wYXJzZUNvbXB1dGVBcGkocil7cmV0dXJuIHZvaWQgMD09PXJ8fCJ1bmRlZmluZWQiPT09cnx8Im51bGwiPT09cj9udWxsOiJ0cnVlIj09PXJ8fCExfXN1YnNjcmliZVRvRGVtb0xpbWl0TW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vbkRlbW9MaW1pdE1vZGFs''@;'; put 'put ''U2hvdy5zdWJzY3JpYmUocj0+e3RoaXMuZGVtb0xpbWl0Tm90aWNlPXtvcGVuOiEwLGZlYXR1cmVOYW1lOnJ9fSl9c3Vic2NyaWJlVG9MaWNlbnNlRXZlbnRzKCl7dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVUaWVyLnN1YnNjcmliZShyPT57dGhpcy5mcmVlVGllckJhbm5lcj1yfSks''@;'; put 'put ''dGhpcy5saWNlbmNlU2VydmljZS5saWNlbnNlRXhwaXJlc0luRGF5cy5zdWJzY3JpYmUocj0+e3ImJnI8PTE0JiYodGhpcy5saWNlbnNlRXhwaXJpbmdEYXlzPXIpfSksdGhpcy5saWNlbmNlU2VydmljZS5pc0FwcE92ZXJDYXBhY2l0eS5zdWJzY3JpYmUocj0+e3RoaXMuYXBwT3ZlckNhcGFj''@;'; put 'put ''aXR5PXJ9KX1zdWJzY3JpYmVUb0FwcEFjdGl2ZSgpe3RoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQuc3Vic2NyaWJlKHI9Pnt0aGlzLmFwcEFjdGl2ZT1yfSl9c3Vic2NyaWJlVG9TaG93QWJvcnRNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uU2hvd0Fib3J0TW9kYWwuc3Vi''@;'; put 'put ''c2NyaWJlKHI9PntyLmlkPXRoaXMuc2FzanNBYm9ydHMubGVuZ3RoKzEsdGhpcy5zYXNqc0Fib3J0cy5wdXNoKHIpLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKX0pfXN1YnNjcmliZVRvU3RhcnR1cERhdGEoKXt0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmli''@;'; put 'put ''ZSgoKT0+e3RoaXMuc3RhcnR1cERhdGFMb2FkZWQ9ITB9KX1zdWJzY3JpYmVUb1JlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vblJlcXVlc3RzTW9kYWxPcGVuLnN1YnNjcmliZShyPT57dGhpcy5yZXF1ZXN0c01vZGFsPSEwfSl9Y2xvc2VBYm9ydE1vZGFsKHIpe2xldCBpPXRo''@;'; put 'put ''aXMuc2FzanNBYm9ydHMuZmluZEluZGV4KG89Pm8uaWQ9PT1yKTt0aGlzLnNhc2pzQWJvcnRzLnNwbGljZShpLDEpfXRvZ2dsZVNpZGViYXIoKXt0aGlzLmV2ZW50U2VydmljZS50b2dnbGVTaWRlYmFyKCl9aXNNYWluUm91dGUocil7cmV0dXJuIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcyhy''@;'; put 'put ''KX1vcGVuTGljZW5jaW5nUGFnZSgpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcvdXBkYXRlIil9Z2V0IHZhRWRpdG9yTGliZHMoKXtjb25zdCByPVVuLmVkaXRvcjtyZXR1cm4gcj8ubGlicmFyeSYmcj8udGFibGU/YCR7ci5saWJyYXJ5fS4ke3IudGFibGV9YDoiIn1i''@;'; put 'put ''YWNrVG9FZGl0b3IoKXt0aGlzLnZhRWRpdG9yTGliZHMmJnRoaXMucm91dGVyLm5hdmlnYXRlKFsiL2VkaXRvci8iK3RoaXMudmFFZGl0b3JMaWJkc10se3F1ZXJ5UGFyYW1zOntlbWJlZDoidmEifX0pfXN0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4g''@;'; put 'put ''bmV3KGl8fGUpKHplKHV6KSx6ZShGMiksemUodmMpLHplKHAxKSx6ZShWMCksemUodWQpLHplKEViKSx6ZShTaWUpLHplKFVsKSx6ZShubykpfSx0aGlzLlx1MDI3NWNtcD1Qcih7dHlwZTplLHNlbGVjdG9yczpbWyJteS1hcHAiXV0sc3RhbmRhbG9uZTohMSxkZWNsczoyMix2YXJzOjE0LGNv''@;'; put 'put ''bnN0czpbWzEsIm1haW4tY29udGFpbmVyIl0sWzEsImFwcC1oZWFkZXIiXSxbMSwic3VibmF2Il0sWzMsIm9wZW5lZENoYW5nZSIsIm9wZW5lZCJdLFsxLCJ2YS1iYWNrLWJhciJdLFszLCJkYXRhIiwiZm9yY2VSZWxvYWQiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwicG9zaXRpb24tcmVsYXRp''@;'; put 'put ''dmUiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbFNpemUiXSxbMSwibW9kYWwtdGl0bGUiXSxbInNpemUiLCIyMCIsInNoYXBlIiwibG9jayJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImFwcC1sb2FkaW5nIl0sWyJpZCIs''@;'; put 'put ''ImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0IiwxLCJhbGVydCIsImFsZXJ0LWFwcC1sZXZlbCIsImFsZXJ0LXdhcm5pbmciXSxbImlkIiwiZGVtby1iYW5uZXIiLCJyb2xlIiwiYWxlcnQiLDEsImFsZXJ0IiwiYWxlcnQtYXBwLWxldmVsIiwiYWxlcnQtZGFuZ2VyIl0sWzEsImFsZXJ0LWl0''@;'; put 'put ''ZW1zIl0sWzEsImFsZXJ0LWl0ZW0iLCJzdGF0aWMiXSxbMSwiYWxlcnQtaWNvbi13cmFwcGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLDEsImFsZXJ0LWljb24iXSxbMSwiYWxlcnQtdGV4dCJdLFsiY2xhc3NlcyIsImNvbG9yLXdoaXRlIl0sWyJyb3V0ZXJMaW5rIiwiL2xpY2Vu''@;'; put 'put ''c2luZy91cGRhdGUiLDEsInVwZGF0ZS1rZXkiXSxbMSwidXBkYXRlLWtleSIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsImFyaWEtbGFiZWwiLCJUb2dnbGUgc2lkZWJhciIsMSwiY3Vyc29yLXBvaW50ZXIiLCJzZWxlY3Qtbm9uZSIsIm1sLTEwIiwiZC1m''@;'; put 'put ''bGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImxvZ28iLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJocmVmIiwiIyIsMSwibmF2LWxpbmsiLDMsInJvdXRlckxpbmsiXSxbInNyYyIsIi9TQVNTdG9yZWRQ''@;'; put 'put ''cm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvZGMtbG9nby1zdmciLCJhbHQiLCJkYXRhY29udHJvbGxlciBsb2dvIHdpdGhvdXQgdGV4dCIsMSwid2l0aG91dC10ZXh0IiwiZC1ibG9jayIsImQtbWQtbm9uZSJdLFsic3JjIiwiL1NBU1N0b3Jl''@;'; put 'put ''ZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9kYXRhY29udHJvbGxlci1zdmciLCJhbHQiLCJkYXRhY29udHJvbGxlciBsb2dvIiwxLCJ3aXRoLXRleHQiLCJkLW5vbmUiLCJkLW1kLWJsb2NrIl0sWyJ0eXBlIiwiYnV0dG9uIiwiYXJpYS1s''@;'; put 'put ''YWJlbCIsIlRvZ2dsZSBzaWRlYmFyIiwxLCJjdXJzb3ItcG9pbnRlciIsInNlbGVjdC1ub25lIiwibWwtMTAiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsImNsaWNrIl0sWyJzaXplIiwiMjQiLCJzaGFwZSIsInRyZWUt''@;'; put 'put ''dmlldyIsImFyaWEtaGlkZGVuIiwidHJ1ZSJdLFsxLCJoZWFkZXItbmF2IiwiZC1mbGV4IiwiZC1zbS1ub25lIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLCJhcmlhLWxhYmVsIiwidG9nZ2xlIHNldHRpbmdzIG1lbnUiLDEsIm5hdi1pY29uIiwiY29sb3Itd2hpdGUtaSJdLFsiY2xyUG9z''@;'; put 'put ''aXRpb24iLCJib3R0b20tbGVmdCIsNCwiY2xySWZPcGVuIl0sWzEsImhlYWRlci1uYXYiLCJkLW5vbmUiLCJkLXNtLWZsZXgiXSxbInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDEsIm5hdi1saW5rIiwibmF2LXRleHQiLDMsInJvdXRlckxpbmsiXSxbMSwibmF2LWxpbmsiLCJuYXYtdGV4''@;'; put 'put ''dCIsMywicm91dGVyTGluayJdLFsxLCJuYXYtbGluayIsIm5hdi10ZXh0IiwiY3Vyc29yLXBvaW50ZXIiLDMsInJvdXRlckxpbmsiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywicm91dGVyTGluayJdLFsxLCJuYXYiXSxbMSwibmF2LWl0''@;'; put 'put ''ZW0iXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJjYXJldCIsImRpciIsImxlZnQiLCJzaXplIiwiMTYiXSxbMywib25Db25maXJtTW9kYWxDbGljayIsImRhdGEiLCJmb3Jj''@;'; put 'put ''ZVJlbG9hZCJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9kYXRhY29udHJvbGxlci1zdmciLCJhbHQiLCJkYXRhY29udHJvbGxlciBsb2dvIiwxLCJsb2FkaW5nLWxvZ28iXSxbMSwic2xpZGVyIl0sWzEs''@;'; put 'put ''InN0YXJ0dXAtY2hlY2tzIl0sWzEsImxpbmUiXSxbMSwic3VibGluZSIsImluYyJdLFsxLCJzdWJsaW5lIiwiZGVjIl0sWzEsInN0YXJ0dXAtY2hlY2siLDMsInN0YXJ0dXAtY2hlY2stLWVycm9yIiwic3RhcnR1cC1jaGVjay0tZG9uZSJdLFsxLCJzdGFydHVwLWNoZWNrIl0sWyJzaGFwZSIs''@;'; put 'put ''ImNpcmNsZSIsMSwiaXMtc29saWQiLCJzdGFydHVwLWNoZWNrX19pY29uLS1wZW5kaW5nIl0sWyJjbHJTbWFsbCIsIiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLDEsImlzLXNvbGlkIiwic3RhcnR1cC1jaGVja19faWNvbi0tZG9uZSJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUi''@;'; put 'put ''LDEsImlzLXNvbGlkIiwic3RhcnR1cC1jaGVja19faWNvbi0tZXJyb3IiXSxbMSwic3RhcnR1cC1jaGVja19fbGFiZWwiXSxbMSwic3RhcnR1cC1jaGVja19fZGV0YWlsIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGksbyl7MSZpJiYoSigwLCJkaXYiLDApLHZ0KDEsaHd0LDMsMyksdnQoMixtd3Qs''@;'; put 'put ''OCw0LCJoZWFkZXIiLDEpLHZ0KDMsdnd0LDExLDgsIm5hdiIsMiksdnQoNCxfd3QsMSwwLCJhcHAtYWxlcnRzIiksSig1LCJhcHAtcmVxdWVzdHMtbW9kYWwiLDMpLGhpKCJvcGVuZWRDaGFuZ2UiLGZ1bmN0aW9uKGwpe3JldHVybiBmaShvLnJlcXVlc3RzTW9kYWwsbCl8fChvLnJlcXVlc3Rz''@;'; put 'put ''TW9kYWw9bCksbH0pLHRlKCksSXQoNiwiYXBwLWV4Y2VsLXBhc3N3b3JkLW1vZGFsIiksdnQoNyx5d3QsNCwwLCJkaXYiLDQpLHZ0KDgsYnd0LDEsMCwicm91dGVyLW91dGxldCIpLEl0KDksImFwcC1sb2dpbiIpLHZ0KDEwLHd3dCwxLDAsImFwcC1hbGVydHMiKSxfbygxMSxDd3QsMSwyLCJh''@;'; put 'put ''cHAtaW5mby1tb2RhbCIsNSxDbyksSigxMywiY2xyLW1vZGFsIiw2KSxoaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihsKXtyZXR1cm4gZmkoby5kZW1vTGltaXROb3RpY2Uub3BlbixsKXx8KG8uZGVtb0xpbWl0Tm90aWNlLm9wZW49bCksbH0pLEooMTQsImgzIiw3KSxTZSgxNSks''@;'; put 'put ''SXQoMTYsImNsci1pY29uIiw4KSx0ZSgpLEooMTcsImRpdiIsOSksU2UoMTgsIiBDb250YWN0ICIpLEl0KDE5LCJjb250YWN0LWxpbmsiKSxTZSgyMCksdGUoKSgpKCksdnQoMjEsSXd0LDQsMiwiZGl2IiwxMCkpLDImaSYmKGllKCksX3Qoby5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNp''@;'; put 'put ''bmciKT8tMToxKSxpZSgpLF90KG8uZW1iZWQ/LTE6MiksaWUoKSxfdCghby5lbWJlZCYmKG8ucm91dGVyLnVybC5pbmNsdWRlcygic3VibWl0dGVkIil8fG8ucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpfHxvLnJvdXRlci51cmwuaW5jbHVkZXMoImhpc3RvcnkiKSk/MzotMSksaWUo''@;'; put 'put ''KSxfdChvLmVyclRvcD8tMTo0KSxpZSgpLGRpKCJvcGVuZWQiLG8ucmVxdWVzdHNNb2RhbCksaWUoMiksX3QoInZhIj09PW8uZW1iZWQmJm8udmFFZGl0b3JMaWJkcyYmIW8uaXNNYWluUm91dGUoIi9lZGl0b3IiKT83Oi0xKSxpZSgpLF90KG8uc3RhcnR1cERhdGFMb2FkZWQ/ODotMSksaWUo''@;'; put 'put ''MiksX3Qoby5lcnJUb3A/MTA6LTEpLGllKCkseW8oby5zYXNqc0Fib3J0cyksaWUoMiksZGkoImNsck1vZGFsT3BlbiIsby5kZW1vTGltaXROb3RpY2Uub3BlbikscnQoImNsck1vZGFsQ2xvc2FibGUiLCEwKSgiY2xyTW9kYWxTaXplIiwibGciKSxpZSgyKSxTcigiIExvY2tlZCBGZWF0dXJl''@;'; put 'put ''ICgiLG8uZGVtb0xpbWl0Tm90aWNlLmZlYXR1cmVOYW1lLCIpICIpLGllKDUpLFNyKCIgd2l0aCB5b3VyIHNpdGUgaWQgKCIsby5zeXNzaXRlLnZhbHVlLCIpIHRvIGFjdGl2YXRlISAiKSxpZSgpLF90KG8uc3RhcnR1cERhdGFMb2FkZWQ/LTE6MjEpKX0sZGVwZW5kZW5jaWVzOltlNyxQMixK''@;'; put 'put ''RSxYeXQsaGJ0LGdidCxfVyxfYnQsR0QsY3UsSnMseGQsbWgsTHAsbzcsamIsVWIscE0sejIscUQsWWJ0LGV3dF0sc3R5bGVzOlsiLnZhLWJhY2stYmFye3Bvc2l0aW9uOnN0aWNreTt0b3A6MDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O3Bh''@;'; put 'put ''ZGRpbmc6LjM1cmVtIC42cmVtO2JhY2tncm91bmQ6I2ZhZmFmYTtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4wOCl9XG4iXSxlbmNhcHN1bGF0aW9uOjJ9KSl9cmV0dXJuIG4oKSxlfSkoKTtmdW5jdGlvbiBTVGUobil7cmV0dXJuIG5ldyBXbigzZTMsITEpfWZ1bmN0aW9u''@;'; put 'put ''IFV3dChuKXtyZXR1cm4gbmV3IFduKDMwMDIsITEpfWZ1bmN0aW9uIFB2KG4pe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgZkQ7Y2FzZSAxOnJldHVybiBuWzBdO2RlZmF1bHQ6cmV0dXJuIG5ldyBCU2Uobil9fWZ1bmN0aW9uIEVUZShuLGUsdD1uZXcgTWFwLHI9bmV3IE1h''@;'; put 'put ''cCl7Y29uc3QgaT1bXSxvPVtdO2xldCBhPS0xLGw9bnVsbDtpZihlLmZvckVhY2godT0+e2NvbnN0IGc9dS5nZXQoIm9mZnNldCIpLEU9Zz09YSxPPUUmJmx8fG5ldyBNYXA7dS5mb3JFYWNoKChaLGVlKT0+e2xldCB2ZT1lZSxNZT1aO2lmKCJvZmZzZXQiIT09ZWUpc3dpdGNoKHZlPW4ubm9y''@;'; put 'put ''bWFsaXplUHJvcGVydHlOYW1lKHZlLGkpLE1lKXtjYXNlIiEiOk1lPXQuZ2V0KGVlKTticmVhaztjYXNlIHQ3Ok1lPXIuZ2V0KGVlKTticmVhaztkZWZhdWx0Ok1lPW4ubm9ybWFsaXplU3R5bGVWYWx1ZShlZSx2ZSxNZSxpKX1PLnNldCh2ZSxNZSl9KSxFfHxvLnB1c2goTyksbD1PLGE9Z30p''@;'; put 'put ''LGkubGVuZ3RoKXRocm93IGZ1bmN0aW9uIEp3dCgpe3JldHVybiBuZXcgV24oMzUwMiwhMSl9KCk7cmV0dXJuIG99ZnVuY3Rpb24gTmFlKG4sZSx0LHIpe3N3aXRjaChlKXtjYXNlInN0YXJ0IjpuLm9uU3RhcnQoKCk9PnIodCYmRmFlKHQsInN0YXJ0IixuKSkpO2JyZWFrO2Nhc2UiZG9uZSI6''@;'; put 'put ''bi5vbkRvbmUoKCk9PnIodCYmRmFlKHQsImRvbmUiLG4pKSk7YnJlYWs7Y2FzZSJkZXN0cm95IjpuLm9uRGVzdHJveSgoKT0+cih0JiZGYWUodCwiZGVzdHJveSIsbikpKX19ZnVuY3Rpb24gRmFlKG4sZSx0KXtjb25zdCBvPVBhZShuLmVsZW1lbnQsbi50cmlnZ2VyTmFtZSxuLmZyb21TdGF0''@;'; put 'put ''ZSxuLnRvU3RhdGUsZXx8bi5waGFzZU5hbWUsdC50b3RhbFRpbWU/P24udG90YWxUaW1lLCEhdC5kaXNhYmxlZCksYT1uLl9kYXRhO3JldHVybiBudWxsIT1hJiYoby5fZGF0YT1hKSxvfWZ1bmN0aW9uIFBhZShuLGUsdCxyLGk9IiIsbz0wLGEpe3JldHVybntlbGVtZW50Om4sdHJpZ2dlck5h''@;'; put 'put ''bWU6ZSxmcm9tU3RhdGU6dCx0b1N0YXRlOnIscGhhc2VOYW1lOmksdG90YWxUaW1lOm8sZGlzYWJsZWQ6ISFhfX1mdW5jdGlvbiBIcChuLGUsdCl7bGV0IHI9bi5nZXQoZSk7cmV0dXJuIHJ8fG4uc2V0KGUscj10KSxyfWZ1bmN0aW9uIE1UZShuKXtjb25zdCBlPW4uaW5kZXhPZigiOiIpO3Jl''@;'; put 'put ''dHVybltuLnN1YnN0cmluZygxLGUpLG4uc2xpY2UoZSsxKV19Y29uc3QgZEN0PXR5cGVvZiBkb2N1bWVudD4idSI/bnVsbDpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7ZnVuY3Rpb24gSGFlKG4pe2NvbnN0IGU9bi5wYXJlbnROb2RlfHxuLmhvc3R8fG51bGw7cmV0dXJuIGU9PT1kQ3Q/bnVs''@;'; put 'put ''bDplfWxldCBpdz1udWxsLFRUZT0hMTtmdW5jdGlvbiB4VGUobixlKXtmb3IoO2U7KXtpZihlPT09bilyZXR1cm4hMDtlPUhhZShlKX1yZXR1cm4hMX1mdW5jdGlvbiBBVGUobixlLHQpe2lmKHQpcmV0dXJuIEFycmF5LmZyb20obi5xdWVyeVNlbGVjdG9yQWxsKGUpKTtjb25zdCByPW4ucXVl''@;'; put 'put ''cnlTZWxlY3RvcihlKTtyZXR1cm4gcj9bcl06W119Y29uc3QgVmFlPSJuZy1sZWF2ZSIseVc9Im5nLXRyaWdnZXIiLGJXPSIubmctdHJpZ2dlciIsSVRlPSJuZy1hbmltYXRpbmciLEJhZT0iLm5nLWFuaW1hdGluZyI7ZnVuY3Rpb24gaDcobil7aWYoIm51bWJlciI9PXR5cGVvZiBuKXJldHVy''@;'; put 'put ''biBuO2NvbnN0IGU9bi5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykvKTtyZXR1cm4hZXx8ZS5sZW5ndGg8Mj8wOmphZShwYXJzZUZsb2F0KGVbMV0pLGVbMl0pfWZ1bmN0aW9uIGphZShuLGUpe3JldHVybiJzIj09PWU/MWUzKm46bn1mdW5jdGlvbiB3VyhuLGUsdCl7cmV0dXJuIG4uaGFzT3du''@;'; put 'put ''UHJvcGVydHkoImR1cmF0aW9uIik/bjpmdW5jdGlvbiBfQ3QobixlLHQpe2xldCByLGk9MCxvPSIiO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7Y29uc3QgYT1uLm1hdGNoKHZDdCk7aWYobnVsbD09PWEpcmV0dXJuIGUucHVzaChTVGUoKSkse2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6IiJ9''@;'; put 'put ''O3I9amFlKHBhcnNlRmxvYXQoYVsxXSksYVsyXSk7Y29uc3QgbD1hWzNdO251bGwhPWwmJihpPWphZShwYXJzZUZsb2F0KGwpLGFbNF0pKTtjb25zdCB1PWFbNV07dSYmKG89dSl9ZWxzZSByPW47aWYoIXQpe2xldCBhPSExLGw9ZS5sZW5ndGg7cjwwJiYoZS5wdXNoKGZ1bmN0aW9uIEx3dCgp''@;'; put 'put ''e3JldHVybiBuZXcgV24oMzEwMCwhMSl9KCkpLGE9ITApLGk8MCYmKGUucHVzaChmdW5jdGlvbiBPd3QoKXtyZXR1cm4gbmV3IFduKDMxMDEsITEpfSgpKSxhPSEwKSxhJiZlLnNwbGljZShsLDAsU1RlKCkpfXJldHVybntkdXJhdGlvbjpyLGRlbGF5OmksZWFzaW5nOm99fShuLGUsdCl9Y29u''@;'; put 'put ''c3QgdkN0PS9eKC0/W1wuXGRdKykobT9zKSg/OlxzKygtP1tcLlxkXSspKG0/cykpPyg/OlxzKyhbLWEtel0rKD86XCguKz9cKSk/KSk/JC9pO2Z1bmN0aW9uICQ1KG4sZSx0KXtlLmZvckVhY2goKHIsaSk9Pntjb25zdCBvPXphZShpKTt0JiYhdC5oYXMoaSkmJnQuc2V0KGksbi5zdHlsZVtv''@;'; put 'put ''XSksbi5zdHlsZVtvXT1yfSl9ZnVuY3Rpb24gb3cobixlKXtlLmZvckVhY2goKHQscik9Pntjb25zdCBpPXphZShyKTtuLnN0eWxlW2ldPSIifSl9ZnVuY3Rpb24gS0Qobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/MT09bi5sZW5ndGg/blswXTpmdW5jdGlvbiBvbXQobixlPW51bGwpe3Jl''@;'; put 'put ''dHVybnt0eXBlOmJzLlNlcXVlbmNlLHN0ZXBzOm4sb3B0aW9uczplfX0obik6bn1jb25zdCBVYWU9bmV3IFJlZ0V4cCgie3tcXHMqKC4rPylcXHMqfX0iLCJnIik7ZnVuY3Rpb24gRFRlKG4pe2xldCBlPVtdO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7bGV0IHQ7Zm9yKDt0PVVhZS5leGVjKG4p''@;'; put 'put ''OyllLnB1c2godFsxXSk7VWFlLmxhc3RJbmRleD0wfXJldHVybiBlfWZ1bmN0aW9uIFhEKG4sZSx0KXtjb25zdCByPWAke259YCxpPXIucmVwbGFjZShVYWUsKG8sYSk9PntsZXQgbD1lW2FdO3JldHVybiBudWxsPT1sJiYodC5wdXNoKGZ1bmN0aW9uIEZ3dCgpe3JldHVybiBuZXcgV24oMzAw''@;'; put 'put ''MywhMSl9KCkpLGw9IiIpLGwudG9TdHJpbmcoKX0pO3JldHVybiBpPT1yP246aX1jb25zdCB3Q3Q9Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9uIHphZShuKXtyZXR1cm4gbi5yZXBsYWNlKHdDdCwoLi4uZSk9PmVbMV0udG9VcHBlckNhc2UoKSl9ZnVuY3Rpb24gVnAobixlLHQpe3N3aXRjaChl''@;'; put 'put ''LnR5cGUpe2Nhc2UgYnMuVHJpZ2dlcjpyZXR1cm4gbi52aXNpdFRyaWdnZXIoZSx0KTtjYXNlIGJzLlN0YXRlOnJldHVybiBuLnZpc2l0U3RhdGUoZSx0KTtjYXNlIGJzLlRyYW5zaXRpb246cmV0dXJuIG4udmlzaXRUcmFuc2l0aW9uKGUsdCk7Y2FzZSBicy5TZXF1ZW5jZTpyZXR1cm4gbi52''@;'; put 'put ''aXNpdFNlcXVlbmNlKGUsdCk7Y2FzZSBicy5Hcm91cDpyZXR1cm4gbi52aXNpdEdyb3VwKGUsdCk7Y2FzZSBicy5BbmltYXRlOnJldHVybiBuLnZpc2l0QW5pbWF0ZShlLHQpO2Nhc2UgYnMuS2V5ZnJhbWVzOnJldHVybiBuLnZpc2l0S2V5ZnJhbWVzKGUsdCk7Y2FzZSBicy5TdHlsZTpyZXR1''@;'; put 'put ''cm4gbi52aXNpdFN0eWxlKGUsdCk7Y2FzZSBicy5SZWZlcmVuY2U6cmV0dXJuIG4udmlzaXRSZWZlcmVuY2UoZSx0KTtjYXNlIGJzLkFuaW1hdGVDaGlsZDpyZXR1cm4gbi52aXNpdEFuaW1hdGVDaGlsZChlLHQpO2Nhc2UgYnMuQW5pbWF0ZVJlZjpyZXR1cm4gbi52aXNpdEFuaW1hdGVSZWYo''@;'; put 'put ''ZSx0KTtjYXNlIGJzLlF1ZXJ5OnJldHVybiBuLnZpc2l0UXVlcnkoZSx0KTtjYXNlIGJzLlN0YWdnZXI6cmV0dXJuIG4udmlzaXRTdGFnZ2VyKGUsdCk7ZGVmYXVsdDp0aHJvdyBmdW5jdGlvbiBQd3QoKXtyZXR1cm4gbmV3IFduKDMwMDQsITEpfSgpfX1mdW5jdGlvbiBXYWUobixlKXtyZXR1''@;'; put 'put ''cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUobilbZV19bGV0IFlhZT0oKCk9PntjbGFzcyBue3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eSh0KXtyZXR1cm4gZnVuY3Rpb24gZkN0KG4pe2l3fHwoaXc9ZnVuY3Rpb24gcEN0KCl7cmV0dXJuIHR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuYm9k''@;'; put 'put ''eTpudWxsfSgpfHx7fSxUVGU9ISFpdy5zdHlsZSYmIldlYmtpdEFwcGVhcmFuY2UiaW4gaXcuc3R5bGUpO2xldCBlPSEwO3JldHVybiBpdy5zdHlsZSYmIWZ1bmN0aW9uIGhDdChuKXtyZXR1cm4iZWJraXQiPT1uLnN1YnN0cmluZygxLDYpfShuKSYmKGU9biBpbiBpdy5zdHlsZSwhZSYmVFRl''@;'; put 'put ''JiYoZT0iV2Via2l0IituLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK24uc2xpY2UoMSlpbiBpdy5zdHlsZSkpLGV9KHQpfWNvbnRhaW5zRWxlbWVudCh0LHIpe3JldHVybiB4VGUodCxyKX1nZXRQYXJlbnRFbGVtZW50KHQpe3JldHVybiBIYWUodCl9cXVlcnkodCxyLGkpe3JldHVybiBBVGUo''@;'; put 'put ''dCxyLGkpfWNvbXB1dGVTdHlsZSh0LHIsaSl7cmV0dXJuIGl8fCIifWFuaW1hdGUodCxyLGksbyxhLGw9W10sdSl7cmV0dXJuIG5ldyBmRChpLG8pfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFj''@;'; put 'put ''dG9yeTpuLlx1MDI3NWZhY30pfXJldHVybiBufSkoKTtjbGFzcyBaYWV7c3RhdGljIE5PT1A9bmV3IFlhZX1jbGFzcyBHYWV7fWNvbnN0IGtDdD1uZXcgU2V0KFsid2lkdGgiLCJoZWlnaHQiLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsIm1heFdpZHRoIiwibWF4SGVpZ2h0IiwibGVmdCIsInRv''@;'; put 'put ''cCIsImJvdHRvbSIsInJpZ2h0IiwiZm9udFNpemUiLCJvdXRsaW5lV2lkdGgiLCJvdXRsaW5lT2Zmc2V0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdSaWdodCIsIm1hcmdpblRvcCIsIm1hcmdpbkxlZnQiLCJtYXJnaW5Cb3R0b20iLCJtYXJn''@;'; put 'put ''aW5SaWdodCIsImJvcmRlclJhZGl1cyIsImJvcmRlcldpZHRoIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJ0ZXh0SW5kZW50IiwicGVyc3BlY3RpdmUiXSk7Y2xhc3MgT1RlIGV4dGVuZHMgR2Fle25v''@;'; put 'put ''cm1hbGl6ZVByb3BlcnR5TmFtZShlLHQpe3JldHVybiB6YWUoZSl9bm9ybWFsaXplU3R5bGVWYWx1ZShlLHQscixpKXtsZXQgbz0iIjtjb25zdCBhPXIudG9TdHJpbmcoKS50cmltKCk7aWYoa0N0Lmhhcyh0KSYmMCE9PXImJiIwIiE9PXIpaWYoIm51bWJlciI9PXR5cGVvZiByKW89InB4Ijtl''@;'; put 'put ''bHNle2NvbnN0IGw9ci5tYXRjaCgvXlsrLV0/W1xkXC5dKyhbYS16XSopJC8pO2wmJjA9PWxbMV0ubGVuZ3RoJiZpLnB1c2goZnVuY3Rpb24gSHd0KCl7cmV0dXJuIG5ldyBXbigzMDA1LCExKX0oKSl9cmV0dXJuIGErb319Y29uc3QgU1c9bmV3IFNldChbInRydWUiLCIxIl0pLEVXPW5ldyBT''@;'; put 'put ''ZXQoWyJmYWxzZSIsIjAiXSk7ZnVuY3Rpb24gTlRlKG4sZSl7Y29uc3QgdD1TVy5oYXMobil8fEVXLmhhcyhuKSxyPVNXLmhhcyhlKXx8RVcuaGFzKGUpO3JldHVybihpLG8pPT57bGV0IGE9IioiPT1ufHxuPT1pLGw9IioiPT1lfHxlPT1vO3JldHVybiFhJiZ0JiYiYm9vbGVhbiI9PXR5cGVv''@;'; put 'put ''ZiBpJiYoYT1pP1NXLmhhcyhuKTpFVy5oYXMobikpLCFsJiZyJiYiYm9vbGVhbiI9PXR5cGVvZiBvJiYobD1vP1NXLmhhcyhlKTpFVy5oYXMoZSkpLGEmJmx9fWNvbnN0IExDdD1uZXcgUmVnRXhwKCJzKjpzZWxmcyosPyIsImciKTtmdW5jdGlvbiBxYWUobixlLHQscil7cmV0dXJuIG5ldyBP''@;'; put 'put ''Q3QobikuYnVpbGQoZSx0LHIpfWNsYXNzIE9DdHtfZHJpdmVyO2NvbnN0cnVjdG9yKGUpe3RoaXMuX2RyaXZlcj1lfWJ1aWxkKGUsdCxyKXtjb25zdCBpPW5ldyBQQ3QodCk7cmV0dXJuIHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUoaSksVnAodGhpcyxLRChlKSxpKX1fcmVz''@;'; put 'put ''ZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShlKXtlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPSIiLGUuY29sbGVjdGVkU3R5bGVzPW5ldyBNYXAsZS5jb2xsZWN0ZWRTdHlsZXMuc2V0KCIiLG5ldyBNYXApLGUuY3VycmVudFRpbWU9MH12aXNpdFRyaWdnZXIoZSx0KXtsZXQgcj10LnF1ZXJ5Q291''@;'; put 'put ''bnQ9MCxpPXQuZGVwQ291bnQ9MDtjb25zdCBvPVtdLGE9W107cmV0dXJuIkAiPT1lLm5hbWUuY2hhckF0KDApJiZ0LmVycm9ycy5wdXNoKGZ1bmN0aW9uIFZ3dCgpe3JldHVybiBuZXcgV24oMzAwNiwhMSl9KCkpLGUuZGVmaW5pdGlvbnMuZm9yRWFjaChsPT57aWYodGhpcy5fcmVzZXRDb250''@;'; put 'put ''ZXh0U3R5bGVUaW1pbmdTdGF0ZSh0KSxsLnR5cGU9PWJzLlN0YXRlKXtjb25zdCB1PWwsZz11Lm5hbWU7Zy50b1N0cmluZygpLnNwbGl0KC9ccyosXHMqLykuZm9yRWFjaChFPT57dS5uYW1lPUUsby5wdXNoKHRoaXMudmlzaXRTdGF0ZSh1LHQpKX0pLHUubmFtZT1nfWVsc2UgaWYobC50eXBl''@;'; put 'put ''PT1icy5UcmFuc2l0aW9uKXtjb25zdCB1PXRoaXMudmlzaXRUcmFuc2l0aW9uKGwsdCk7cis9dS5xdWVyeUNvdW50LGkrPXUuZGVwQ291bnQsYS5wdXNoKHUpfWVsc2UgdC5lcnJvcnMucHVzaChmdW5jdGlvbiBCd3QoKXtyZXR1cm4gbmV3IFduKDMwMDcsITEpfSgpKX0pLHt0eXBlOmJzLlRy''@;'; put 'put ''aWdnZXIsbmFtZTplLm5hbWUsc3RhdGVzOm8sdHJhbnNpdGlvbnM6YSxxdWVyeUNvdW50OnIsZGVwQ291bnQ6aSxvcHRpb25zOm51bGx9fXZpc2l0U3RhdGUoZSx0KXtjb25zdCByPXRoaXMudmlzaXRTdHlsZShlLnN0eWxlcyx0KSxpPWUub3B0aW9ucyYmZS5vcHRpb25zLnBhcmFtc3x8bnVs''@;'; put 'put ''bDtpZihyLmNvbnRhaW5zRHluYW1pY1N0eWxlcyl7Y29uc3Qgbz1uZXcgU2V0LGE9aXx8e307ci5zdHlsZXMuZm9yRWFjaChsPT57bCBpbnN0YW5jZW9mIE1hcCYmbC5mb3JFYWNoKHU9PntEVGUodSkuZm9yRWFjaChnPT57YS5oYXNPd25Qcm9wZXJ0eShnKXx8by5hZGQoZyl9KX0pfSksby5z''@;'; put 'put ''aXplJiZ0LmVycm9ycy5wdXNoKGZ1bmN0aW9uIGp3dCgpe3JldHVybiBuZXcgV24oMzAwOCwhMSl9KDAsby52YWx1ZXMoKSkpfXJldHVybnt0eXBlOmJzLlN0YXRlLG5hbWU6ZS5uYW1lLHN0eWxlOnIsb3B0aW9uczppP3twYXJhbXM6aX06bnVsbH19dmlzaXRUcmFuc2l0aW9uKGUsdCl7dC5x''@;'; put 'put ''dWVyeUNvdW50PTAsdC5kZXBDb3VudD0wO2NvbnN0IHI9VnAodGhpcyxLRChlLmFuaW1hdGlvbiksdCksaT1mdW5jdGlvbiBSQ3QobixlKXtjb25zdCB0PVtdO3JldHVybiJzdHJpbmciPT10eXBlb2Ygbj9uLnNwbGl0KC9ccyosXHMqLykuZm9yRWFjaChyPT5mdW5jdGlvbiBJQ3QobixlLHQp''@;'; put 'put ''e2lmKCI6Ij09blswXSl7Y29uc3QgdT1mdW5jdGlvbiBEQ3QobixlKXtzd2l0Y2gobil7Y2FzZSI6ZW50ZXIiOnJldHVybiJ2b2lkID0+ICoiO2Nhc2UiOmxlYXZlIjpyZXR1cm4iKiA9PiB2b2lkIjtjYXNlIjppbmNyZW1lbnQiOnJldHVybih0LHIpPT5wYXJzZUZsb2F0KHIpPnBhcnNlRmxv''@;'; put 'put ''YXQodCk7Y2FzZSI6ZGVjcmVtZW50IjpyZXR1cm4odCxyKT0+cGFyc2VGbG9hdChyKTxwYXJzZUZsb2F0KHQpO2RlZmF1bHQ6cmV0dXJuIGUucHVzaChmdW5jdGlvbiBYd3QoKXtyZXR1cm4gbmV3IFduKDMwMTYsITEpfSgpKSwiKiA9PiAqIn19KG4sdCk7aWYoImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IHUpcmV0dXJuIHZvaWQgZS5wdXNoKHUpO249dX1jb25zdCByPW4ubWF0Y2goL14oXCp8Wy1cd10rKVxzKig8P1s9LV0+KVxzKihcKnxbLVx3XSspJC8pO2lmKG51bGw9PXJ8fHIubGVuZ3RoPDQpcmV0dXJuIHQucHVzaChmdW5jdGlvbiBLd3QoKXtyZXR1cm4gbmV3IFduKDMwMTUsITEpfSgp''@;'; put 'put ''KSxlO2NvbnN0IGk9clsxXSxvPXJbMl0sYT1yWzNdO2UucHVzaChOVGUoaSxhKSksIjwiPT1vWzBdJiYoIioiIT1pfHwiKiIhPWEpJiZlLnB1c2goTlRlKGEsaSkpfShyLHQsZSkpOnQucHVzaChuKSx0fShlLmV4cHIsdC5lcnJvcnMpO3JldHVybnt0eXBlOmJzLlRyYW5zaXRpb24sbWF0Y2hl''@;'; put 'put ''cnM6aSxhbmltYXRpb246cixxdWVyeUNvdW50OnQucXVlcnlDb3VudCxkZXBDb3VudDp0LmRlcENvdW50LG9wdGlvbnM6YXcoZS5vcHRpb25zKX19dmlzaXRTZXF1ZW5jZShlLHQpe3JldHVybnt0eXBlOmJzLlNlcXVlbmNlLHN0ZXBzOmUuc3RlcHMubWFwKHI9PlZwKHRoaXMscix0KSksb3B0''@;'; put 'put ''aW9uczphdyhlLm9wdGlvbnMpfX12aXNpdEdyb3VwKGUsdCl7Y29uc3Qgcj10LmN1cnJlbnRUaW1lO2xldCBpPTA7Y29uc3Qgbz1lLnN0ZXBzLm1hcChhPT57dC5jdXJyZW50VGltZT1yO2NvbnN0IGw9VnAodGhpcyxhLHQpO3JldHVybiBpPU1hdGgubWF4KGksdC5jdXJyZW50VGltZSksbH0p''@;'; put 'put ''O3JldHVybiB0LmN1cnJlbnRUaW1lPWkse3R5cGU6YnMuR3JvdXAsc3RlcHM6byxvcHRpb25zOmF3KGUub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZShlLHQpe2NvbnN0IHI9ZnVuY3Rpb24gVkN0KG4sZSl7aWYobi5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKSlyZXR1cm4gbjtpZigibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIG4pcmV0dXJuIEthZSh3VyhuLGUpLmR1cmF0aW9uLDAsIiIpO2NvbnN0IHQ9bjtpZih0LnNwbGl0KC9ccysvKS5zb21lKG89PiJ7Ij09by5jaGFyQXQoMCkmJiJ7Ij09by5jaGFyQXQoMSkpKXtjb25zdCBvPUthZSgwLDAsIiIpO3JldHVybiBvLmR5bmFtaWM9ITAsby5zdHJW''@;'; put 'put ''YWx1ZT10LG99Y29uc3QgaT13Vyh0LGUpO3JldHVybiBLYWUoaS5kdXJhdGlvbixpLmRlbGF5LGkuZWFzaW5nKX0oZS50aW1pbmdzLHQuZXJyb3JzKTt0LmN1cnJlbnRBbmltYXRlVGltaW5ncz1yO2xldCBpLG89ZS5zdHlsZXM/ZS5zdHlsZXM6dmwoe30pO2lmKG8udHlwZT09YnMuS2V5ZnJh''@;'; put 'put ''bWVzKWk9dGhpcy52aXNpdEtleWZyYW1lcyhvLHQpO2Vsc2V7bGV0IGE9ZS5zdHlsZXMsbD0hMTtpZighYSl7bD0hMDtjb25zdCBnPXt9O3IuZWFzaW5nJiYoZy5lYXNpbmc9ci5lYXNpbmcpLGE9dmwoZyl9dC5jdXJyZW50VGltZSs9ci5kdXJhdGlvbityLmRlbGF5O2NvbnN0IHU9dGhpcy52''@;'; put 'put ''aXNpdFN0eWxlKGEsdCk7dS5pc0VtcHR5U3RlcD1sLGk9dX1yZXR1cm4gdC5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx7dHlwZTpicy5BbmltYXRlLHRpbWluZ3M6cixzdHlsZTppLG9wdGlvbnM6bnVsbH19dmlzaXRTdHlsZShlLHQpe2NvbnN0IHI9dGhpcy5fbWFrZVN0eWxlQXN0KGUs''@;'; put 'put ''dCk7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3Qocix0KSxyfV9tYWtlU3R5bGVBc3QoZSx0KXtjb25zdCByPVtdLGk9QXJyYXkuaXNBcnJheShlLnN0eWxlcyk/ZS5zdHlsZXM6W2Uuc3R5bGVzXTtmb3IobGV0IGwgb2YgaSkic3RyaW5nIj09dHlwZW9mIGw/bD09PXQ3P3IucHVzaChs''@;'; put 'put ''KTp0LmVycm9ycy5wdXNoKFV3dCgpKTpyLnB1c2gobmV3IE1hcChPYmplY3QuZW50cmllcyhsKSkpO2xldCBvPSExLGE9bnVsbDtyZXR1cm4gci5mb3JFYWNoKGw9PntpZihsIGluc3RhbmNlb2YgTWFwJiYobC5oYXMoImVhc2luZyIpJiYoYT1sLmdldCgiZWFzaW5nIiksbC5kZWxldGUoImVh''@;'; put 'put ''c2luZyIpKSwhbykpZm9yKGxldCB1IG9mIGwudmFsdWVzKCkpaWYodS50b1N0cmluZygpLmluZGV4T2YoInt7Iik+PTApe289ITA7YnJlYWt9fSkse3R5cGU6YnMuU3R5bGUsc3R5bGVzOnIsZWFzaW5nOmEsb2Zmc2V0OmUub2Zmc2V0LGNvbnRhaW5zRHluYW1pY1N0eWxlczpvLG9wdGlvbnM6''@;'; put 'put ''bnVsbH19X3ZhbGlkYXRlU3R5bGVBc3QoZSx0KXtjb25zdCByPXQuY3VycmVudEFuaW1hdGVUaW1pbmdzO2xldCBpPXQuY3VycmVudFRpbWUsbz10LmN1cnJlbnRUaW1lO3ImJm8+MCYmKG8tPXIuZHVyYXRpb24rci5kZWxheSksZS5zdHlsZXMuZm9yRWFjaChhPT57InN0cmluZyIhPXR5cGVv''@;'; put 'put ''ZiBhJiZhLmZvckVhY2goKGwsdSk9Pntjb25zdCBnPXQuY29sbGVjdGVkU3R5bGVzLmdldCh0LmN1cnJlbnRRdWVyeVNlbGVjdG9yKSxFPWcuZ2V0KHUpO2xldCBPPSEwO0UmJihvIT1pJiZvPj1FLnN0YXJ0VGltZSYmaTw9RS5lbmRUaW1lJiYodC5lcnJvcnMucHVzaChmdW5jdGlvbiB6d3Qo''@;'; put 'put ''KXtyZXR1cm4gbmV3IFduKDMwMTAsITEpfSgpKSxPPSExKSxvPUUuc3RhcnRUaW1lKSxPJiZnLnNldCh1LHtzdGFydFRpbWU6byxlbmRUaW1lOml9KSx0Lm9wdGlvbnMmJmZ1bmN0aW9uIGJDdChuLGUsdCl7Y29uc3Qgcj1lLnBhcmFtc3x8e30saT1EVGUobik7aS5sZW5ndGgmJmkuZm9yRWFj''@;'; put 'put ''aChvPT57ci5oYXNPd25Qcm9wZXJ0eShvKXx8dC5wdXNoKGZ1bmN0aW9uIE53dCgpe3JldHVybiBuZXcgV24oMzAwMSwhMSl9KCkpfSl9KGwsdC5vcHRpb25zLHQuZXJyb3JzKX0pfSl9dmlzaXRLZXlmcmFtZXMoZSx0KXtjb25zdCByPXt0eXBlOmJzLktleWZyYW1lcyxzdHlsZXM6W10sb3B0''@;'; put 'put ''aW9uczpudWxsfTtpZighdC5jdXJyZW50QW5pbWF0ZVRpbWluZ3MpcmV0dXJuIHQuZXJyb3JzLnB1c2goZnVuY3Rpb24gV3d0KCl7cmV0dXJuIG5ldyBXbigzMDExLCExKX0oKSkscjtsZXQgbz0wO2NvbnN0IGE9W107bGV0IGw9ITEsdT0hMSxnPTA7Y29uc3QgRT1lLnN0ZXBzLm1hcChXZT0+''@;'; put 'put ''e2NvbnN0IGF0PXRoaXMuX21ha2VTdHlsZUFzdChXZSx0KTtsZXQgQ3Q9bnVsbCE9YXQub2Zmc2V0P2F0Lm9mZnNldDpmdW5jdGlvbiBIQ3Qobil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXJldHVybiBudWxsO2xldCBlPW51bGw7aWYoQXJyYXkuaXNBcnJheShuKSluLmZvckVhY2godD0+e2lm''@;'; put 'put ''KHQgaW5zdGFuY2VvZiBNYXAmJnQuaGFzKCJvZmZzZXQiKSl7Y29uc3Qgcj10O2U9cGFyc2VGbG9hdChyLmdldCgib2Zmc2V0IikpLHIuZGVsZXRlKCJvZmZzZXQiKX19KTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBNYXAmJm4uaGFzKCJvZmZzZXQiKSl7Y29uc3QgdD1uO2U9cGFyc2VGbG9hdCh0''@;'; put 'put ''LmdldCgib2Zmc2V0IikpLHQuZGVsZXRlKCJvZmZzZXQiKX1yZXR1cm4gZX0oYXQuc3R5bGVzKSxBdD0wO3JldHVybiBudWxsIT1DdCYmKG8rKyxBdD1hdC5vZmZzZXQ9Q3QpLHU9dXx8QXQ8MHx8QXQ+MSxsPWx8fEF0PGcsZz1BdCxhLnB1c2goQXQpLGF0fSk7dSYmdC5lcnJvcnMucHVzaChm''@;'; put 'put ''dW5jdGlvbiBZd3QoKXtyZXR1cm4gbmV3IFduKDMwMTIsITEpfSgpKSxsJiZ0LmVycm9ycy5wdXNoKGZ1bmN0aW9uIFp3dCgpe3JldHVybiBuZXcgV24oMzIwMCwhMSl9KCkpO2NvbnN0IE89ZS5zdGVwcy5sZW5ndGg7bGV0IFo9MDtvPjAmJm88Tz90LmVycm9ycy5wdXNoKGZ1bmN0aW9uIEd3''@;'; put 'put ''dCgpe3JldHVybiBuZXcgV24oMzIwMiwhMSl9KCkpOjA9PW8mJihaPTEvKE8tMSkpO2NvbnN0IGVlPU8tMSx2ZT10LmN1cnJlbnRUaW1lLE1lPXQuY3VycmVudEFuaW1hdGVUaW1pbmdzLEhlPU1lLmR1cmF0aW9uO3JldHVybiBFLmZvckVhY2goKFdlLGF0KT0+e2NvbnN0IEN0PVo+MD9hdD09''@;'; put 'put ''ZWU/MTpaKmF0OmFbYXRdLEF0PUN0KkhlO3QuY3VycmVudFRpbWU9dmUrTWUuZGVsYXkrQXQsTWUuZHVyYXRpb249QXQsdGhpcy5fdmFsaWRhdGVTdHlsZUFzdChXZSx0KSxXZS5vZmZzZXQ9Q3Qsci5zdHlsZXMucHVzaChXZSl9KSxyfXZpc2l0UmVmZXJlbmNlKGUsdCl7cmV0dXJue3R5cGU6''@;'; put 'put ''YnMuUmVmZXJlbmNlLGFuaW1hdGlvbjpWcCh0aGlzLEtEKGUuYW5pbWF0aW9uKSx0KSxvcHRpb25zOmF3KGUub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZUNoaWxkKGUsdCl7cmV0dXJuIHQuZGVwQ291bnQrKyx7dHlwZTpicy5BbmltYXRlQ2hpbGQsb3B0aW9uczphdyhlLm9wdGlvbnMpfX12aXNp''@;'; put 'put ''dEFuaW1hdGVSZWYoZSx0KXtyZXR1cm57dHlwZTpicy5BbmltYXRlUmVmLGFuaW1hdGlvbjp0aGlzLnZpc2l0UmVmZXJlbmNlKGUuYW5pbWF0aW9uLHQpLG9wdGlvbnM6YXcoZS5vcHRpb25zKX19dmlzaXRRdWVyeShlLHQpe2NvbnN0IHI9dC5jdXJyZW50UXVlcnlTZWxlY3RvcixpPWUub3B0''@;'; put 'put ''aW9uc3x8e307dC5xdWVyeUNvdW50KyssdC5jdXJyZW50UXVlcnk9ZTtjb25zdFtvLGFdPWZ1bmN0aW9uIE5DdChuKXtjb25zdCBlPSEhbi5zcGxpdCgvXHMqLFxzKi8pLmZpbmQodD0+IjpzZWxmIj09dCk7cmV0dXJuIGUmJihuPW4ucmVwbGFjZShMQ3QsIiIpKSxuPW4ucmVwbGFjZSgvQFwq''@;'; put 'put ''L2csYlcpLnJlcGxhY2UoL0BcdysvZyx0PT5iVysiLSIrdC5zbGljZSgxKSkucmVwbGFjZSgvOmFuaW1hdGluZy9nLEJhZSksW24sZV19KGUuc2VsZWN0b3IpO3QuY3VycmVudFF1ZXJ5U2VsZWN0b3I9ci5sZW5ndGg/cisiICIrbzpvLEhwKHQuY29sbGVjdGVkU3R5bGVzLHQuY3VycmVudFF1''@;'; put 'put ''ZXJ5U2VsZWN0b3IsbmV3IE1hcCk7Y29uc3QgbD1WcCh0aGlzLEtEKGUuYW5pbWF0aW9uKSx0KTtyZXR1cm4gdC5jdXJyZW50UXVlcnk9bnVsbCx0LmN1cnJlbnRRdWVyeVNlbGVjdG9yPXIse3R5cGU6YnMuUXVlcnksc2VsZWN0b3I6byxsaW1pdDppLmxpbWl0fHwwLG9wdGlvbmFsOiEhaS5v''@;'; put 'put ''cHRpb25hbCxpbmNsdWRlU2VsZjphLGFuaW1hdGlvbjpsLG9yaWdpbmFsU2VsZWN0b3I6ZS5zZWxlY3RvcixvcHRpb25zOmF3KGUub3B0aW9ucyl9fXZpc2l0U3RhZ2dlcihlLHQpe3QuY3VycmVudFF1ZXJ5fHx0LmVycm9ycy5wdXNoKGZ1bmN0aW9uICR3dCgpe3JldHVybiBuZXcgV24oMzAx''@;'; put 'put ''MywhMSl9KCkpO2NvbnN0IHI9ImZ1bGwiPT09ZS50aW1pbmdzP3tkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiJmdWxsIn06d1coZS50aW1pbmdzLHQuZXJyb3JzLCEwKTtyZXR1cm57dHlwZTpicy5TdGFnZ2VyLGFuaW1hdGlvbjpWcCh0aGlzLEtEKGUuYW5pbWF0aW9uKSx0KSx0aW1pbmdz''@;'; put 'put ''OnIsb3B0aW9uczpudWxsfX19Y2xhc3MgUEN0e2Vycm9ycztxdWVyeUNvdW50PTA7ZGVwQ291bnQ9MDtjdXJyZW50VHJhbnNpdGlvbj1udWxsO2N1cnJlbnRRdWVyeT1udWxsO2N1cnJlbnRRdWVyeVNlbGVjdG9yPW51bGw7Y3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGw7Y3VycmVudFRpbWU9''@;'; put 'put ''MDtjb2xsZWN0ZWRTdHlsZXM9bmV3IE1hcDtvcHRpb25zPW51bGw7dW5zdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzRm91bmQ9bmV3IFNldDtjb25zdHJ1Y3RvcihlKXt0aGlzLmVycm9ycz1lfX1mdW5jdGlvbiBhdyhuKXtyZXR1cm4gbj8obj17Li4ubn0pLnBhcmFtcyYmKG4ucGFyYW1zPWZ1bmN0''@;'; put 'put ''aW9uIEZDdChuKXtyZXR1cm4gbj97Li4ubn06bnVsbH0obi5wYXJhbXMpKTpuPXt9LG59ZnVuY3Rpb24gS2FlKG4sZSx0KXtyZXR1cm57ZHVyYXRpb246bixkZWxheTplLGVhc2luZzp0fX1mdW5jdGlvbiBYYWUobixlLHQscixpLG8sYT1udWxsLGw9ITEpe3JldHVybnt0eXBlOjEsZWxlbWVu''@;'; put 'put ''dDpuLGtleWZyYW1lczplLHByZVN0eWxlUHJvcHM6dCxwb3N0U3R5bGVQcm9wczpyLGR1cmF0aW9uOmksZGVsYXk6byx0b3RhbFRpbWU6aStvLGVhc2luZzphLHN1YlRpbWVsaW5lOmx9fWNsYXNzIE1Xe19tYXA9bmV3IE1hcDtnZXQoZSl7cmV0dXJuIHRoaXMuX21hcC5nZXQoZSl8fFtdfWFw''@;'; put 'put ''cGVuZChlLHQpe2xldCByPXRoaXMuX21hcC5nZXQoZSk7cnx8dGhpcy5fbWFwLnNldChlLHI9W10pLHIucHVzaCguLi50KX1oYXMoZSl7cmV0dXJuIHRoaXMuX21hcC5oYXMoZSl9Y2xlYXIoKXt0aGlzLl9tYXAuY2xlYXIoKX19Y29uc3QgVUN0PW5ldyBSZWdFeHAoIjplbnRlciIsImciKSxX''@;'; put 'put ''Q3Q9bmV3IFJlZ0V4cCgiOmxlYXZlIiwiZyIpO2Z1bmN0aW9uIFFhZShuLGUsdCxyLGksbz1uZXcgTWFwLGE9bmV3IE1hcCxsLHUsZz1bXSl7cmV0dXJuKG5ldyBZQ3QpLmJ1aWxkS2V5ZnJhbWVzKG4sZSx0LHIsaSxvLGEsbCx1LGcpfWNsYXNzIFlDdHtidWlsZEtleWZyYW1lcyhlLHQscixp''@;'; put 'put ''LG8sYSxsLHUsZyxFPVtdKXtnPWd8fG5ldyBNVztjb25zdCBPPW5ldyBKYWUoZSx0LGcsaSxvLEUsW10pO08ub3B0aW9ucz11O2NvbnN0IFo9dS5kZWxheT9oNyh1LmRlbGF5KTowO08uY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAoWiksTy5jdXJyZW50VGltZWxpbmUuc2V0U3R5bGVz''@;'; put 'put ''KFthXSxudWxsLE8uZXJyb3JzLHUpLFZwKHRoaXMscixPKTtjb25zdCBlZT1PLnRpbWVsaW5lcy5maWx0ZXIodmU9PnZlLmNvbnRhaW5zQW5pbWF0aW9uKCkpO2lmKGVlLmxlbmd0aCYmbC5zaXplKXtsZXQgdmU7Zm9yKGxldCBNZT1lZS5sZW5ndGgtMTtNZT49MDtNZS0tKXtjb25zdCBIZT1l''@;'; put 'put ''ZVtNZV07aWYoSGUuZWxlbWVudD09PXQpe3ZlPUhlO2JyZWFrfX12ZSYmIXZlLmFsbG93T25seVRpbWVsaW5lU3R5bGVzKCkmJnZlLnNldFN0eWxlcyhbbF0sbnVsbCxPLmVycm9ycyx1KX1yZXR1cm4gZWUubGVuZ3RoP2VlLm1hcCh2ZT0+dmUuYnVpbGRLZXlmcmFtZXMoKSk6W1hhZSh0LFtd''@;'; put 'put ''LFtdLFtdLDAsWiwiIiwhMSldfXZpc2l0VHJpZ2dlcihlLHQpe312aXNpdFN0YXRlKGUsdCl7fXZpc2l0VHJhbnNpdGlvbihlLHQpe312aXNpdEFuaW1hdGVDaGlsZChlLHQpe2NvbnN0IHI9dC5zdWJJbnN0cnVjdGlvbnMuZ2V0KHQuZWxlbWVudCk7aWYocil7Y29uc3QgaT10LmNyZWF0ZVN1''@;'; put 'put ''YkNvbnRleHQoZS5vcHRpb25zKSxvPXQuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLGE9dGhpcy5fdmlzaXRTdWJJbnN0cnVjdGlvbnMocixpLGkub3B0aW9ucyk7byE9YSYmdC50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoYSl9dC5wcmV2aW91c05vZGU9ZX12aXNpdEFuaW1hdGVSZWYo''@;'; put 'put ''ZSx0KXtjb25zdCByPXQuY3JlYXRlU3ViQ29udGV4dChlLm9wdGlvbnMpO3IudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksdGhpcy5fYXBwbHlBbmltYXRpb25SZWZEZWxheXMoW2Uub3B0aW9ucyxlLmFuaW1hdGlvbi5vcHRpb25zXSx0LHIpLHRoaXMudmlzaXRSZWZlcmVuY2UoZS5hbmlt''@;'; put 'put ''YXRpb24sciksdC50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoci5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLHQucHJldmlvdXNOb2RlPWV9X2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKGUsdCxyKXtmb3IoY29uc3QgaSBvZiBlKXtjb25zdCBvPWk/LmRlbGF5O2lmKG8pe2NvbnN0IGE9''@;'; put 'put ''Im51bWJlciI9PXR5cGVvZiBvP286aDcoWEQobyxpPy5wYXJhbXM/P3t9LHQuZXJyb3JzKSk7ci5kZWxheU5leHRTdGVwKGEpfX19X3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKGUsdCxyKXtsZXQgbz10LmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZTtjb25zdCBhPW51bGwhPXIuZHVyYXRpb24/''@;'; put 'put ''aDcoci5kdXJhdGlvbik6bnVsbCxsPW51bGwhPXIuZGVsYXk/aDcoci5kZWxheSk6bnVsbDtyZXR1cm4gMCE9PWEmJmUuZm9yRWFjaCh1PT57Y29uc3QgZz10LmFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZSh1LGEsbCk7bz1NYXRoLm1heChvLGcuZHVyYXRpb24rZy5kZWxheSl9KSxvfXZp''@;'; put 'put ''c2l0UmVmZXJlbmNlKGUsdCl7dC51cGRhdGVPcHRpb25zKGUub3B0aW9ucywhMCksVnAodGhpcyxlLmFuaW1hdGlvbix0KSx0LnByZXZpb3VzTm9kZT1lfXZpc2l0U2VxdWVuY2UoZSx0KXtjb25zdCByPXQuc3ViQ29udGV4dENvdW50O2xldCBpPXQ7Y29uc3Qgbz1lLm9wdGlvbnM7aWYobyYm''@;'; put 'put ''KG8ucGFyYW1zfHxvLmRlbGF5KSYmKGk9dC5jcmVhdGVTdWJDb250ZXh0KG8pLGkudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksbnVsbCE9by5kZWxheSkpe2kucHJldmlvdXNOb2RlLnR5cGU9PWJzLlN0eWxlJiYoaS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCks''@;'; put 'put ''aS5wcmV2aW91c05vZGU9VFcpO2NvbnN0IGE9aDcoby5kZWxheSk7aS5kZWxheU5leHRTdGVwKGEpfWUuc3RlcHMubGVuZ3RoJiYoZS5zdGVwcy5mb3JFYWNoKGE9PlZwKHRoaXMsYSxpKSksaS5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksaS5zdWJDb250ZXh0Q291''@;'; put 'put ''bnQ+ciYmaS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSksdC5wcmV2aW91c05vZGU9ZX12aXNpdEdyb3VwKGUsdCl7Y29uc3Qgcj1bXTtsZXQgaT10LmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZTtjb25zdCBvPWUub3B0aW9ucyYmZS5vcHRpb25zLmRlbGF5P2g3KGUub3B0aW9ucy5k''@;'; put 'put ''ZWxheSk6MDtlLnN0ZXBzLmZvckVhY2goYT0+e2NvbnN0IGw9dC5jcmVhdGVTdWJDb250ZXh0KGUub3B0aW9ucyk7byYmbC5kZWxheU5leHRTdGVwKG8pLFZwKHRoaXMsYSxsKSxpPU1hdGgubWF4KGksbC5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLHIucHVzaChsLmN1cnJlbnRUaW1l''@;'; put 'put ''bGluZSl9KSxyLmZvckVhY2goYT0+dC5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhhKSksdC50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaSksdC5wcmV2aW91c05vZGU9ZX1fdmlzaXRUaW1pbmcoZSx0KXtpZihlLmR5bmFtaWMpe2NvbnN0IHI9ZS5zdHJW''@;'; put 'put ''YWx1ZTtyZXR1cm4gd1codC5wYXJhbXM/WEQocix0LnBhcmFtcyx0LmVycm9ycyk6cix0LmVycm9ycyl9cmV0dXJue2R1cmF0aW9uOmUuZHVyYXRpb24sZGVsYXk6ZS5kZWxheSxlYXNpbmc6ZS5lYXNpbmd9fXZpc2l0QW5pbWF0ZShlLHQpe2NvbnN0IHI9dC5jdXJyZW50QW5pbWF0ZVRpbWlu''@;'; put 'put ''Z3M9dGhpcy5fdmlzaXRUaW1pbmcoZS50aW1pbmdzLHQpLGk9dC5jdXJyZW50VGltZWxpbmU7ci5kZWxheSYmKHQuaW5jcmVtZW50VGltZShyLmRlbGF5KSxpLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTtjb25zdCBvPWUuc3R5bGU7by50eXBlPT1icy5LZXlmcmFtZXM/dGhpcy52aXNpdEtl''@;'; put 'put ''eWZyYW1lcyhvLHQpOih0LmluY3JlbWVudFRpbWUoci5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKG8sdCksaS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSksdC5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0LnByZXZpb3VzTm9kZT1lfXZpc2l0U3R5bGUoZSx0KXtjb25zdCByPXQuY3Vy''@;'; put 'put ''cmVudFRpbWVsaW5lLGk9dC5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7IWkmJnIuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpJiZyLmZvcndhcmRGcmFtZSgpO2NvbnN0IG89aSYmaS5lYXNpbmd8fGUuZWFzaW5nO2UuaXNFbXB0eVN0ZXA/ci5hcHBseUVtcHR5U3RlcChvKTpyLnNldFN0eWxl''@;'; put 'put ''cyhlLnN0eWxlcyxvLHQuZXJyb3JzLHQub3B0aW9ucyksdC5wcmV2aW91c05vZGU9ZX12aXNpdEtleWZyYW1lcyhlLHQpe2NvbnN0IHI9dC5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsaT10LmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbixvPXIuZHVyYXRpb24sbD10LmNyZWF0ZVN1YkNvbnRleHQo''@;'; put 'put ''KS5jdXJyZW50VGltZWxpbmU7bC5lYXNpbmc9ci5lYXNpbmcsZS5zdHlsZXMuZm9yRWFjaCh1PT57bC5mb3J3YXJkVGltZSgodS5vZmZzZXR8fDApKm8pLGwuc2V0U3R5bGVzKHUuc3R5bGVzLHUuZWFzaW5nLHQuZXJyb3JzLHQub3B0aW9ucyksbC5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKX0p''@;'; put 'put ''LHQuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMobCksdC50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaStvKSx0LnByZXZpb3VzTm9kZT1lfXZpc2l0UXVlcnkoZSx0KXtjb25zdCByPXQuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLGk9ZS5vcHRpb25z''@;'; put 'put ''fHx7fSxvPWkuZGVsYXk/aDcoaS5kZWxheSk6MDtvJiYodC5wcmV2aW91c05vZGUudHlwZT09PWJzLlN0eWxlfHwwPT1yJiZ0LmN1cnJlbnRUaW1lbGluZS5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkpJiYodC5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksdC5w''@;'; put 'put ''cmV2aW91c05vZGU9VFcpO2xldCBhPXI7Y29uc3QgbD10Lmludm9rZVF1ZXJ5KGUuc2VsZWN0b3IsZS5vcmlnaW5hbFNlbGVjdG9yLGUubGltaXQsZS5pbmNsdWRlU2VsZiwhIWkub3B0aW9uYWwsdC5lcnJvcnMpO3QuY3VycmVudFF1ZXJ5VG90YWw9bC5sZW5ndGg7bGV0IHU9bnVsbDtsLmZv''@;'; put 'put ''ckVhY2goKGcsRSk9Pnt0LmN1cnJlbnRRdWVyeUluZGV4PUU7Y29uc3QgTz10LmNyZWF0ZVN1YkNvbnRleHQoZS5vcHRpb25zLGcpO28mJk8uZGVsYXlOZXh0U3RlcChvKSxnPT09dC5lbGVtZW50JiYodT1PLmN1cnJlbnRUaW1lbGluZSksVnAodGhpcyxlLmFuaW1hdGlvbixPKSxPLmN1cnJl''@;'; put 'put ''bnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxhPU1hdGgubWF4KGEsTy5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpfSksdC5jdXJyZW50UXVlcnlJbmRleD0wLHQuY3VycmVudFF1ZXJ5VG90YWw9MCx0LnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShhKSx1JiYodC5jdXJy''@;'; put 'put ''ZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyh1KSx0LmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSksdC5wcmV2aW91c05vZGU9ZX12aXNpdFN0YWdnZXIoZSx0KXtjb25zdCByPXQucGFyZW50Q29udGV4dCxpPXQuY3VycmVudFRpbWVsaW5l''@;'; put 'put ''LG89ZS50aW1pbmdzLGE9TWF0aC5hYnMoby5kdXJhdGlvbiksbD1hKih0LmN1cnJlbnRRdWVyeVRvdGFsLTEpO2xldCB1PWEqdC5jdXJyZW50UXVlcnlJbmRleDtzd2l0Y2goby5kdXJhdGlvbjwwPyJyZXZlcnNlIjpvLmVhc2luZyl7Y2FzZSJyZXZlcnNlIjp1PWwtdTticmVhaztjYXNlImZ1''@;'; put 'put ''bGwiOnU9ci5jdXJyZW50U3RhZ2dlclRpbWV9Y29uc3QgRT10LmN1cnJlbnRUaW1lbGluZTt1JiZFLmRlbGF5TmV4dFN0ZXAodSk7Y29uc3QgTz1FLmN1cnJlbnRUaW1lO1ZwKHRoaXMsZS5hbmltYXRpb24sdCksdC5wcmV2aW91c05vZGU9ZSxyLmN1cnJlbnRTdGFnZ2VyVGltZT1pLmN1cnJl''@;'; put 'put ''bnRUaW1lLU8rKGkuc3RhcnRUaW1lLXIuY3VycmVudFRpbWVsaW5lLnN0YXJ0VGltZSl9fWNvbnN0IFRXPXt9O2NsYXNzIEphZXtfZHJpdmVyO2VsZW1lbnQ7c3ViSW5zdHJ1Y3Rpb25zO19lbnRlckNsYXNzTmFtZTtfbGVhdmVDbGFzc05hbWU7ZXJyb3JzO3RpbWVsaW5lcztwYXJlbnRDb250''@;'; put 'put ''ZXh0PW51bGw7Y3VycmVudFRpbWVsaW5lO2N1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsO3ByZXZpb3VzTm9kZT1UVztzdWJDb250ZXh0Q291bnQ9MDtvcHRpb25zPXt9O2N1cnJlbnRRdWVyeUluZGV4PTA7Y3VycmVudFF1ZXJ5VG90YWw9MDtjdXJyZW50U3RhZ2dlclRpbWU9MDtjb25zdHJ1''@;'; put 'put ''Y3RvcihlLHQscixpLG8sYSxsLHUpe3RoaXMuX2RyaXZlcj1lLHRoaXMuZWxlbWVudD10LHRoaXMuc3ViSW5zdHJ1Y3Rpb25zPXIsdGhpcy5fZW50ZXJDbGFzc05hbWU9aSx0aGlzLl9sZWF2ZUNsYXNzTmFtZT1vLHRoaXMuZXJyb3JzPWEsdGhpcy50aW1lbGluZXM9bCx0aGlzLmN1cnJlbnRU''@;'; put 'put ''aW1lbGluZT11fHxuZXcgeFcodGhpcy5fZHJpdmVyLHQsMCksbC5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKX1nZXQgcGFyYW1zKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9dXBkYXRlT3B0aW9ucyhlLHQpe2lmKCFlKXJldHVybjtjb25zdCByPWU7bGV0IGk9dGhpcy5vcHRpb25z''@;'; put 'put ''O251bGwhPXIuZHVyYXRpb24mJihpLmR1cmF0aW9uPWg3KHIuZHVyYXRpb24pKSxudWxsIT1yLmRlbGF5JiYoaS5kZWxheT1oNyhyLmRlbGF5KSk7Y29uc3Qgbz1yLnBhcmFtcztpZihvKXtsZXQgYT1pLnBhcmFtczthfHwoYT10aGlzLm9wdGlvbnMucGFyYW1zPXt9KSxPYmplY3Qua2V5cyhv''@;'; put 'put ''KS5mb3JFYWNoKGw9PnsoIXR8fCFhLmhhc093blByb3BlcnR5KGwpKSYmKGFbbF09WEQob1tsXSxhLHRoaXMuZXJyb3JzKSl9KX19X2NvcHlPcHRpb25zKCl7Y29uc3QgZT17fTtpZih0aGlzLm9wdGlvbnMpe2NvbnN0IHQ9dGhpcy5vcHRpb25zLnBhcmFtcztpZih0KXtjb25zdCByPWUucGFy''@;'; put 'put ''YW1zPXt9O09iamVjdC5rZXlzKHQpLmZvckVhY2goaT0+e3JbaV09dFtpXX0pfX1yZXR1cm4gZX1jcmVhdGVTdWJDb250ZXh0KGU9bnVsbCx0LHIpe2NvbnN0IGk9dHx8dGhpcy5lbGVtZW50LG89bmV3IEphZSh0aGlzLl9kcml2ZXIsaSx0aGlzLnN1Ykluc3RydWN0aW9ucyx0aGlzLl9lbnRl''@;'; put 'put ''ckNsYXNzTmFtZSx0aGlzLl9sZWF2ZUNsYXNzTmFtZSx0aGlzLmVycm9ycyx0aGlzLnRpbWVsaW5lcyx0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKGkscnx8MCkpO3JldHVybiBvLnByZXZpb3VzTm9kZT10aGlzLnByZXZpb3VzTm9kZSxvLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLmN1''@;'; put 'put ''cnJlbnRBbmltYXRlVGltaW5ncyxvLm9wdGlvbnM9dGhpcy5fY29weU9wdGlvbnMoKSxvLnVwZGF0ZU9wdGlvbnMoZSksby5jdXJyZW50UXVlcnlJbmRleD10aGlzLmN1cnJlbnRRdWVyeUluZGV4LG8uY3VycmVudFF1ZXJ5VG90YWw9dGhpcy5jdXJyZW50UXVlcnlUb3RhbCxvLnBhcmVudENv''@;'; put 'put ''bnRleHQ9dGhpcyx0aGlzLnN1YkNvbnRleHRDb3VudCsrLG99dHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGUpe3JldHVybiB0aGlzLnByZXZpb3VzTm9kZT1UVyx0aGlzLmN1cnJlbnRUaW1lbGluZT10aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKHRoaXMuZWxlbWVudCxlKSx0aGlzLnRpbWVs''@;'; put 'put ''aW5lcy5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKSx0aGlzLmN1cnJlbnRUaW1lbGluZX1hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUoZSx0LHIpe2NvbnN0IGk9e2R1cmF0aW9uOnQ/P2UuZHVyYXRpb24sZGVsYXk6dGhpcy5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUrKHI/PzAp''@;'; put 'put ''K2UuZGVsYXksZWFzaW5nOiIifSxvPW5ldyBaQ3QodGhpcy5fZHJpdmVyLGUuZWxlbWVudCxlLmtleWZyYW1lcyxlLnByZVN0eWxlUHJvcHMsZS5wb3N0U3R5bGVQcm9wcyxpLGUuc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUpO3JldHVybiB0aGlzLnRpbWVsaW5lcy5wdXNoKG8pLGl9aW5jcmVt''@;'; put 'put ''ZW50VGltZShlKXt0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbitlKX1kZWxheU5leHRTdGVwKGUpe2U+MCYmdGhpcy5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcChlKX1pbnZva2VRdWVyeShlLHQscixpLG8sYSl7bGV0''@;'; put 'put ''IGw9W107aWYoaSYmbC5wdXNoKHRoaXMuZWxlbWVudCksZS5sZW5ndGg+MCl7ZT0oZT1lLnJlcGxhY2UoVUN0LCIuIit0aGlzLl9lbnRlckNsYXNzTmFtZSkpLnJlcGxhY2UoV0N0LCIuIit0aGlzLl9sZWF2ZUNsYXNzTmFtZSk7bGV0IGc9dGhpcy5fZHJpdmVyLnF1ZXJ5KHRoaXMuZWxlbWVu''@;'; put 'put ''dCxlLDEhPXIpOzAhPT1yJiYoZz1yPDA/Zy5zbGljZShnLmxlbmd0aCtyLGcubGVuZ3RoKTpnLnNsaWNlKDAscikpLGwucHVzaCguLi5nKX1yZXR1cm4hbyYmMD09bC5sZW5ndGgmJmEucHVzaChmdW5jdGlvbiBxd3QoKXtyZXR1cm4gbmV3IFduKDMwMTQsITEpfSgpKSxsfX1jbGFzcyB4V3tf''@;'; put 'put ''ZHJpdmVyO2VsZW1lbnQ7c3RhcnRUaW1lO19lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA7ZHVyYXRpb249MDtlYXNpbmc9bnVsbDtfcHJldmlvdXNLZXlmcmFtZT1uZXcgTWFwO19jdXJyZW50S2V5ZnJhbWU9bmV3IE1hcDtfa2V5ZnJhbWVzPW5ldyBNYXA7X3N0eWxlU3VtbWFyeT1uZXcg''@;'; put 'put ''TWFwO19sb2NhbFRpbWVsaW5lU3R5bGVzPW5ldyBNYXA7X2dsb2JhbFRpbWVsaW5lU3R5bGVzO19wZW5kaW5nU3R5bGVzPW5ldyBNYXA7X2JhY2tGaWxsPW5ldyBNYXA7X2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT1udWxsO2NvbnN0cnVjdG9yKGUsdCxyLGkpe3RoaXMuX2RyaXZlcj1lLHRo''@;'; put 'put ''aXMuZWxlbWVudD10LHRoaXMuc3RhcnRUaW1lPXIsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPWksdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwfHwodGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPW5ldyBNYXApLHRoaXMuX2dsb2JhbFRpbWVsaW5l''@;'; put 'put ''U3R5bGVzPXRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5nZXQodCksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXN8fCh0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5z''@;'; put 'put ''ZXQodCx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKSksdGhpcy5fbG9hZEtleWZyYW1lKCl9Y29udGFpbnNBbmltYXRpb24oKXtzd2l0Y2godGhpcy5fa2V5ZnJhbWVzLnNpemUpe2Nhc2UgMDpyZXR1cm4hMTtjYXNlIDE6cmV0dXJuIHRoaXMuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygp''@;'; put 'put ''O2RlZmF1bHQ6cmV0dXJuITB9fWhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEtleWZyYW1lLnNpemU+MH1nZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5zdGFydFRpbWUrdGhpcy5kdXJhdGlvbn1kZWxheU5leHRTdGVwKGUpe2NvbnN0IHQ9MT09''@;'; put 'put ''PXRoaXMuX2tleWZyYW1lcy5zaXplJiZ0aGlzLl9wZW5kaW5nU3R5bGVzLnNpemU7dGhpcy5kdXJhdGlvbnx8dD8odGhpcy5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lK2UpLHQmJnRoaXMuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpOnRoaXMuc3RhcnRUaW1lKz1lfWZvcmsoZSx0KXty''@;'; put 'put ''ZXR1cm4gdGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxuZXcgeFcodGhpcy5fZHJpdmVyLGUsdHx8dGhpcy5jdXJyZW50VGltZSx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXApfV9sb2FkS2V5ZnJhbWUoKXt0aGlzLl9jdXJyZW50S2V5ZnJhbWUmJih0aGlzLl9wcmV2aW91''@;'; put 'put ''c0tleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZSksdGhpcy5fY3VycmVudEtleWZyYW1lPXRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbiksdGhpcy5fY3VycmVudEtleWZyYW1lfHwodGhpcy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5fa2V5ZnJhbWVzLnNldCh0''@;'; put 'put ''aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfWZvcndhcmRGcmFtZSgpe3RoaXMuZHVyYXRpb24rPTEsdGhpcy5fbG9hZEtleWZyYW1lKCl9Zm9yd2FyZFRpbWUoZSl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSx0aGlzLmR1cmF0aW9uPWUsdGhpcy5fbG9hZEtleWZy''@;'; put 'put ''YW1lKCl9X3VwZGF0ZVN0eWxlKGUsdCl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5zZXQoZSx0KSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5zZXQoZSx0KSx0aGlzLl9zdHlsZVN1bW1hcnkuc2V0KGUse3RpbWU6dGhpcy5jdXJyZW50VGltZSx2YWx1ZTp0fSl9YWxsb3dPbmx5VGlt''@;'; put 'put ''ZWxpbmVTdHlsZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lIT09dGhpcy5fY3VycmVudEtleWZyYW1lfWFwcGx5RW1wdHlTdGVwKGUpe2UmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLGUpO2ZvcihsZXRbdCxyXW9mIHRoaXMuX2dsb2JhbFRp''@;'; put 'put ''bWVsaW5lU3R5bGVzKXRoaXMuX2JhY2tGaWxsLnNldCh0LHJ8fHQ3KSx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KHQsdDcpO3RoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9c2V0U3R5bGVzKGUsdCxyLGkpe3QmJnRoaXMuX3ByZXZpb3VzS2V5''@;'; put 'put ''ZnJhbWUuc2V0KCJlYXNpbmciLHQpO2NvbnN0IG89aSYmaS5wYXJhbXN8fHt9LGE9ZnVuY3Rpb24gR0N0KG4sZSl7Y29uc3QgdD1uZXcgTWFwO2xldCByO3JldHVybiBuLmZvckVhY2goaT0+e2lmKCIqIj09PWkpe3I/Pz1lLmtleXMoKTtmb3IobGV0IG8gb2Ygcil0LnNldChvLHQ3KX1lbHNl''@;'; put 'put ''IGZvcihsZXRbbyxhXW9mIGkpdC5zZXQobyxhKX0pLHR9KGUsdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpO2ZvcihsZXRbbCx1XW9mIGEpe2NvbnN0IGc9WEQodSxvLHIpO3RoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KGwsZyksdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5oYXMobCl8fHRo''@;'; put 'put ''aXMuX2JhY2tGaWxsLnNldChsLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzLmdldChsKT8/dDcpLHRoaXMuX3VwZGF0ZVN0eWxlKGwsZyl9fWFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpezAhPXRoaXMuX3BlbmRpbmdTdHlsZXMuc2l6ZSYmKHRoaXMuX3BlbmRpbmdTdHlsZXMuZm9yRWFjaCgo''@;'; put 'put ''ZSx0KT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQodCxlKX0pLHRoaXMuX3BlbmRpbmdTdHlsZXMuY2xlYXIoKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmZvckVhY2goKGUsdCk9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWUuaGFzKHQpfHx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0''@;'; put 'put ''KHQsZSl9KSl9c25hcHNob3RDdXJyZW50U3R5bGVzKCl7Zm9yKGxldFtlLHRdb2YgdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9wZW5kaW5nU3R5bGVzLnNldChlLHQpLHRoaXMuX3VwZGF0ZVN0eWxlKGUsdCl9Z2V0RmluYWxLZXlmcmFtZSgpe3JldHVybiB0aGlzLl9rZXlmcmFt''@;'; put 'put ''ZXMuZ2V0KHRoaXMuZHVyYXRpb24pfWdldCBwcm9wZXJ0aWVzKCl7Y29uc3QgZT1bXTtmb3IobGV0IHQgaW4gdGhpcy5fY3VycmVudEtleWZyYW1lKWUucHVzaCh0KTtyZXR1cm4gZX1tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKGUpe2UuX3N0eWxlU3VtbWFyeS5mb3JFYWNoKCh0LHIp''@;'; put 'put ''PT57Y29uc3QgaT10aGlzLl9zdHlsZVN1bW1hcnkuZ2V0KHIpOyghaXx8dC50aW1lPmkudGltZSkmJnRoaXMuX3VwZGF0ZVN0eWxlKHIsdC52YWx1ZSl9KX1idWlsZEtleWZyYW1lcygpe3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCk7Y29uc3QgZT1uZXcgU2V0LHQ9bmV3IFNldCxyPTE9''@;'; put 'put ''PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmMD09PXRoaXMuZHVyYXRpb247bGV0IGk9W107dGhpcy5fa2V5ZnJhbWVzLmZvckVhY2goKGwsdSk9Pntjb25zdCBnPW5ldyBNYXAoWy4uLnRoaXMuX2JhY2tGaWxsLC4uLmxdKTtnLmZvckVhY2goKEUsTyk9PnsiISI9PT1FP2UuYWRkKE8pOkU9PT10''@;'; put 'put ''NyYmdC5hZGQoTyl9KSxyfHxnLnNldCgib2Zmc2V0Iix1L3RoaXMuZHVyYXRpb24pLGkucHVzaChnKX0pO2NvbnN0IG89Wy4uLmUudmFsdWVzKCldLGE9Wy4uLnQudmFsdWVzKCldO2lmKHIpe2NvbnN0IGw9aVswXSx1PW5ldyBNYXAobCk7bC5zZXQoIm9mZnNldCIsMCksdS5zZXQoIm9mZnNl''@;'; put 'put ''dCIsMSksaT1bbCx1XX1yZXR1cm4gWGFlKHRoaXMuZWxlbWVudCxpLG8sYSx0aGlzLmR1cmF0aW9uLHRoaXMuc3RhcnRUaW1lLHRoaXMuZWFzaW5nLCExKX19Y2xhc3MgWkN0IGV4dGVuZHMgeFd7a2V5ZnJhbWVzO3ByZVN0eWxlUHJvcHM7cG9zdFN0eWxlUHJvcHM7X3N0cmV0Y2hTdGFydGlu''@;'; put 'put ''Z0tleWZyYW1lO3RpbWluZ3M7Y29uc3RydWN0b3IoZSx0LHIsaSxvLGEsbD0hMSl7c3VwZXIoZSx0LGEuZGVsYXkpLHRoaXMua2V5ZnJhbWVzPXIsdGhpcy5wcmVTdHlsZVByb3BzPWksdGhpcy5wb3N0U3R5bGVQcm9wcz1vLHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lPWwsdGhpcy50''@;'; put 'put ''aW1pbmdzPXtkdXJhdGlvbjphLmR1cmF0aW9uLGRlbGF5OmEuZGVsYXksZWFzaW5nOmEuZWFzaW5nfX1jb250YWluc0FuaW1hdGlvbigpe3JldHVybiB0aGlzLmtleWZyYW1lcy5sZW5ndGg+MX1idWlsZEtleWZyYW1lcygpe2xldCBlPXRoaXMua2V5ZnJhbWVzLHtkZWxheTp0LGR1cmF0aW9u''@;'; put 'put ''OnIsZWFzaW5nOml9PXRoaXMudGltaW5ncztpZih0aGlzLl9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZSYmdCl7Y29uc3Qgbz1bXSxhPXIrdCxsPXQvYSx1PW5ldyBNYXAoZVswXSk7dS5zZXQoIm9mZnNldCIsMCksby5wdXNoKHUpO2NvbnN0IGc9bmV3IE1hcChlWzBdKTtnLnNldCgib2Zmc2V0''@;'; put 'put ''IixIVGUobCkpLG8ucHVzaChnKTtjb25zdCBFPWUubGVuZ3RoLTE7Zm9yKGxldCBPPTE7Tzw9RTtPKyspe2xldCBaPW5ldyBNYXAoZVtPXSk7Y29uc3QgZWU9Wi5nZXQoIm9mZnNldCIpO1ouc2V0KCJvZmZzZXQiLEhUZSgodCtlZSpyKS9hKSksby5wdXNoKFopfXI9YSx0PTAsaT0iIixlPW99''@;'; put 'put ''cmV0dXJuIFhhZSh0aGlzLmVsZW1lbnQsZSx0aGlzLnByZVN0eWxlUHJvcHMsdGhpcy5wb3N0U3R5bGVQcm9wcyxyLHQsaSwhMCl9fWZ1bmN0aW9uIEhUZShuLGU9Myl7Y29uc3QgdD1NYXRoLnBvdygxMCxlLTEpO3JldHVybiBNYXRoLnJvdW5kKG4qdCkvdH1mdW5jdGlvbiBWVGUobixlLHQs''@;'; put 'put ''cixpLG8sYSxsLHUsZyxFLE8sWil7cmV0dXJue3R5cGU6MCxlbGVtZW50Om4sdHJpZ2dlck5hbWU6ZSxpc1JlbW92YWxUcmFuc2l0aW9uOmksZnJvbVN0YXRlOnQsZnJvbVN0eWxlczpvLHRvU3RhdGU6cix0b1N0eWxlczphLHRpbWVsaW5lczpsLHF1ZXJpZWRFbGVtZW50czp1LHByZVN0eWxl''@;'; put 'put ''UHJvcHM6Zyxwb3N0U3R5bGVQcm9wczpFLHRvdGFsVGltZTpPLGVycm9yczpafX1jb25zdCBlc2U9e307Y2xhc3MgQlRle190cmlnZ2VyTmFtZTthc3Q7X3N0YXRlU3R5bGVzO2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLl90cmlnZ2VyTmFtZT1lLHRoaXMuYXN0PXQsdGhpcy5fc3RhdGVTdHls''@;'; put 'put ''ZXM9cn1tYXRjaChlLHQscixpKXtyZXR1cm4gZnVuY3Rpb24gJEN0KG4sZSx0LHIsaSl7cmV0dXJuIG4uc29tZShvPT5vKGUsdCxyLGkpKX0odGhpcy5hc3QubWF0Y2hlcnMsZSx0LHIsaSl9YnVpbGRTdHlsZXMoZSx0LHIpe2xldCBpPXRoaXMuX3N0YXRlU3R5bGVzLmdldCgiKiIpO3JldHVy''@;'; put 'put ''biB2b2lkIDAhPT1lJiYoaT10aGlzLl9zdGF0ZVN0eWxlcy5nZXQoZT8udG9TdHJpbmcoKSl8fGkpLGk/aS5idWlsZFN0eWxlcyh0LHIpOm5ldyBNYXB9YnVpbGQoZSx0LHIsaSxvLGEsbCx1LGcsRSl7Y29uc3QgTz1bXSxaPXRoaXMuYXN0Lm9wdGlvbnMmJnRoaXMuYXN0Lm9wdGlvbnMucGFy''@;'; put 'put ''YW1zfHxlc2UsdmU9dGhpcy5idWlsZFN0eWxlcyhyLGwmJmwucGFyYW1zfHxlc2UsTyksTWU9dSYmdS5wYXJhbXN8fGVzZSxIZT10aGlzLmJ1aWxkU3R5bGVzKGksTWUsTyksV2U9bmV3IFNldCxhdD1uZXcgTWFwLEN0PW5ldyBNYXAsQXQ9InZvaWQiPT09aSxLdD17cGFyYW1zOmpUZShNZSxa''@;'; put 'put ''KSxkZWxheTp0aGlzLmFzdC5vcHRpb25zPy5kZWxheX0scXQ9RT9bXTpRYWUoZSx0LHRoaXMuYXN0LmFuaW1hdGlvbixvLGEsdmUsSGUsS3QsZyxPKTtsZXQgZ249MDtyZXR1cm4gcXQuZm9yRWFjaChUbj0+e2duPU1hdGgubWF4KFRuLmR1cmF0aW9uK1RuLmRlbGF5LGduKX0pLE8ubGVuZ3Ro''@;'; put 'put ''P1ZUZSh0LHRoaXMuX3RyaWdnZXJOYW1lLHIsaSxBdCx2ZSxIZSxbXSxbXSxhdCxDdCxnbixPKToocXQuZm9yRWFjaChUbj0+e2NvbnN0IENuPVRuLmVsZW1lbnQscXI9SHAoYXQsQ24sbmV3IFNldCk7VG4ucHJlU3R5bGVQcm9wcy5mb3JFYWNoKFRyPT5xci5hZGQoVHIpKTtjb25zdCAkbj1I''@;'; put 'put ''cChDdCxDbixuZXcgU2V0KTtUbi5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKFRyPT4kbi5hZGQoVHIpKSxDbiE9PXQmJldlLmFkZChDbil9KSxWVGUodCx0aGlzLl90cmlnZ2VyTmFtZSxyLGksQXQsdmUsSGUscXQsWy4uLldlLnZhbHVlcygpXSxhdCxDdCxnbikpfX1mdW5jdGlvbiBqVGUobixl''@;'; put 'put ''KXtjb25zdCB0PXsuLi5lfTtyZXR1cm4gT2JqZWN0LmVudHJpZXMobikuZm9yRWFjaCgoW3IsaV0pPT57bnVsbCE9aSYmKHRbcl09aSl9KSx0fWNsYXNzIHFDdHtzdHlsZXM7ZGVmYXVsdFBhcmFtcztub3JtYWxpemVyO2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLnN0eWxlcz1lLHRoaXMuZGVm''@;'; put 'put ''YXVsdFBhcmFtcz10LHRoaXMubm9ybWFsaXplcj1yfWJ1aWxkU3R5bGVzKGUsdCl7Y29uc3Qgcj1uZXcgTWFwLGk9alRlKGUsdGhpcy5kZWZhdWx0UGFyYW1zKTtyZXR1cm4gdGhpcy5zdHlsZXMuc3R5bGVzLmZvckVhY2gobz0+eyJzdHJpbmciIT10eXBlb2YgbyYmby5mb3JFYWNoKChhLGwp''@;'; put 'put ''PT57YSYmKGE9WEQoYSxpLHQpKTtjb25zdCB1PXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVQcm9wZXJ0eU5hbWUobCx0KTthPXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVTdHlsZVZhbHVlKGwsdSxhLHQpLHIuc2V0KGwsYSl9KX0pLHJ9fWNsYXNzIFhDdHtuYW1lO2FzdDtfbm9ybWFsaXpl''@;'; put 'put ''cjt0cmFuc2l0aW9uRmFjdG9yaWVzPVtdO2ZhbGxiYWNrVHJhbnNpdGlvbjtzdGF0ZXM9bmV3IE1hcDtjb25zdHJ1Y3RvcihlLHQscil7dGhpcy5uYW1lPWUsdGhpcy5hc3Q9dCx0aGlzLl9ub3JtYWxpemVyPXIsdC5zdGF0ZXMuZm9yRWFjaChpPT57dGhpcy5zdGF0ZXMuc2V0KGkubmFtZSxu''@;'; put 'put ''ZXcgcUN0KGkuc3R5bGUsaS5vcHRpb25zJiZpLm9wdGlvbnMucGFyYW1zfHx7fSxyKSl9KSxVVGUodGhpcy5zdGF0ZXMsInRydWUiLCIxIiksVVRlKHRoaXMuc3RhdGVzLCJmYWxzZSIsIjAiKSx0LnRyYW5zaXRpb25zLmZvckVhY2goaT0+e3RoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5wdXNo''@;'; put 'put ''KG5ldyBCVGUoZSxpLHRoaXMuc3RhdGVzKSl9KSx0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbj1mdW5jdGlvbiBRQ3QobixlKXtyZXR1cm4gbmV3IEJUZShuLHt0eXBlOmJzLlRyYW5zaXRpb24sYW5pbWF0aW9uOnt0eXBlOmJzLlNlcXVlbmNlLHN0ZXBzOltdLG9wdGlvbnM6bnVsbH0sbWF0Y2hl''@;'; put 'put ''cnM6WyhhLGwpPT4hMF0sb3B0aW9uczpudWxsLHF1ZXJ5Q291bnQ6MCxkZXBDb3VudDowfSxlKX0oZSx0aGlzLnN0YXRlcyl9Z2V0IGNvbnRhaW5zUXVlcmllcygpe3JldHVybiB0aGlzLmFzdC5xdWVyeUNvdW50PjB9bWF0Y2hUcmFuc2l0aW9uKGUsdCxyLGkpe3JldHVybiB0aGlzLnRyYW5z''@;'; put 'put ''aXRpb25GYWN0b3JpZXMuZmluZChhPT5hLm1hdGNoKGUsdCxyLGkpKXx8bnVsbH1tYXRjaFN0eWxlcyhlLHQscil7cmV0dXJuIHRoaXMuZmFsbGJhY2tUcmFuc2l0aW9uLmJ1aWxkU3R5bGVzKGUsdCxyKX19ZnVuY3Rpb24gVVRlKG4sZSx0KXtuLmhhcyhlKT9uLmhhcyh0KXx8bi5zZXQodCxu''@;'; put 'put ''LmdldChlKSk6bi5oYXModCkmJm4uc2V0KGUsbi5nZXQodCkpfWNvbnN0IEpDdD1uZXcgTVc7Y2xhc3MgZVN0e2JvZHlOb2RlO19kcml2ZXI7X25vcm1hbGl6ZXI7X2FuaW1hdGlvbnM9bmV3IE1hcDtfcGxheWVyc0J5SWQ9bmV3IE1hcDtwbGF5ZXJzPVtdO2NvbnN0cnVjdG9yKGUsdCxyKXt0''@;'; put 'put ''aGlzLmJvZHlOb2RlPWUsdGhpcy5fZHJpdmVyPXQsdGhpcy5fbm9ybWFsaXplcj1yfXJlZ2lzdGVyKGUsdCl7Y29uc3Qgcj1bXSxvPXFhZSh0aGlzLl9kcml2ZXIsdCxyLFtdKTtpZihyLmxlbmd0aCl0aHJvdyBmdW5jdGlvbiBlQ3QoKXtyZXR1cm4gbmV3IFduKDM1MDMsITEpfSgpO3RoaXMu''@;'; put 'put ''X2FuaW1hdGlvbnMuc2V0KGUsbyl9X2J1aWxkUGxheWVyKGUsdCxyKXtjb25zdCBpPWUuZWxlbWVudCxvPUVUZSh0aGlzLl9ub3JtYWxpemVyLGUua2V5ZnJhbWVzLHQscik7cmV0dXJuIHRoaXMuX2RyaXZlci5hbmltYXRlKGksbyxlLmR1cmF0aW9uLGUuZGVsYXksZS5lYXNpbmcsW10sITAp''@;'; put 'put ''fWNyZWF0ZShlLHQscj17fSl7Y29uc3QgaT1bXSxvPXRoaXMuX2FuaW1hdGlvbnMuZ2V0KGUpO2xldCBhO2NvbnN0IGw9bmV3IE1hcDtpZihvPyhhPVFhZSh0aGlzLl9kcml2ZXIsdCxvLCJuZy1lbnRlciIsVmFlLG5ldyBNYXAsbmV3IE1hcCxyLEpDdCxpKSxhLmZvckVhY2goRT0+e2NvbnN0''@;'; put 'put ''IE89SHAobCxFLmVsZW1lbnQsbmV3IE1hcCk7RS5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKFo9Pk8uc2V0KFosbnVsbCkpfSkpOihpLnB1c2goZnVuY3Rpb24gdEN0KCl7cmV0dXJuIG5ldyBXbigzMzAwLCExKX0oKSksYT1bXSksaS5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gbkN0KCl7cmV0dXJu''@;'; put 'put ''IG5ldyBXbigzNTA0LCExKX0oKTtsLmZvckVhY2goKEUsTyk9PntFLmZvckVhY2goKFosZWUpPT57RS5zZXQoZWUsdGhpcy5fZHJpdmVyLmNvbXB1dGVTdHlsZShPLGVlLHQ3KSl9KX0pO2NvbnN0IGc9UHYoYS5tYXAoRT0+e2NvbnN0IE89bC5nZXQoRS5lbGVtZW50KTtyZXR1cm4gdGhpcy5f''@;'; put 'put ''YnVpbGRQbGF5ZXIoRSxuZXcgTWFwLE8pfSkpO3JldHVybiB0aGlzLl9wbGF5ZXJzQnlJZC5zZXQoZSxnKSxnLm9uRGVzdHJveSgoKT0+dGhpcy5kZXN0cm95KGUpKSx0aGlzLnBsYXllcnMucHVzaChnKSxnfWRlc3Ryb3koZSl7Y29uc3QgdD10aGlzLl9nZXRQbGF5ZXIoZSk7dC5kZXN0cm95''@;'; put 'put ''KCksdGhpcy5fcGxheWVyc0J5SWQuZGVsZXRlKGUpO2NvbnN0IHI9dGhpcy5wbGF5ZXJzLmluZGV4T2YodCk7cj49MCYmdGhpcy5wbGF5ZXJzLnNwbGljZShyLDEpfV9nZXRQbGF5ZXIoZSl7Y29uc3QgdD10aGlzLl9wbGF5ZXJzQnlJZC5nZXQoZSk7aWYoIXQpdGhyb3cgZnVuY3Rpb24gckN0''@;'; put 'put ''KCl7cmV0dXJuIG5ldyBXbigzMzAxLCExKX0oKTtyZXR1cm4gdH1saXN0ZW4oZSx0LHIsaSl7Y29uc3Qgbz1QYWUodCwiIiwiIiwiIik7cmV0dXJuIE5hZSh0aGlzLl9nZXRQbGF5ZXIoZSkscixvLGkpLCgpPT57fX1jb21tYW5kKGUsdCxyLGkpe2lmKCJyZWdpc3RlciI9PXIpcmV0dXJuIHZv''@;'; put 'put ''aWQgdGhpcy5yZWdpc3RlcihlLGlbMF0pO2lmKCJjcmVhdGUiPT1yKXJldHVybiB2b2lkIHRoaXMuY3JlYXRlKGUsdCxpWzBdfHx7fSk7Y29uc3Qgbz10aGlzLl9nZXRQbGF5ZXIoZSk7c3dpdGNoKHIpe2Nhc2UicGxheSI6by5wbGF5KCk7YnJlYWs7Y2FzZSJwYXVzZSI6by5wYXVzZSgpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UicmVzZXQiOm8ucmVzZXQoKTticmVhaztjYXNlInJlc3RhcnQiOm8ucmVzdGFydCgpO2JyZWFrO2Nhc2UiZmluaXNoIjpvLmZpbmlzaCgpO2JyZWFrO2Nhc2UiaW5pdCI6by5pbml0KCk7YnJlYWs7Y2FzZSJzZXRQb3NpdGlvbiI6by5zZXRQb3NpdGlvbihwYXJzZUZsb2F0KGlb''@;'; put 'put ''MF0pKTticmVhaztjYXNlImRlc3Ryb3kiOnRoaXMuZGVzdHJveShlKX19fWNvbnN0IHpUZT0ibmctYW5pbWF0ZS1xdWV1ZWQiLHRzZT0ibmctYW5pbWF0ZS1kaXNhYmxlZCIsb1N0PVtdLFdUZT17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yUmVtb3ZhbDohMSxzZXRGb3JNb3ZlOiExLGhhc0FuaW1h''@;'; put 'put ''dGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMX0sYVN0PXtuYW1lc3BhY2VJZDoiIixzZXRGb3JNb3ZlOiExLHNldEZvclJlbW92YWw6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiEwfSxfND0iX19uZ19yZW1vdmVkIjtjbGFzcyBuc2V7bmFtZXNwYWNlSWQ7''@;'; put 'put ''dmFsdWU7b3B0aW9ucztnZXQgcGFyYW1zKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9Y29uc3RydWN0b3IoZSx0PSIiKXt0aGlzLm5hbWVzcGFjZUlkPXQ7Y29uc3Qgcj1lJiZlLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpO2lmKHRoaXMudmFsdWU9ZnVuY3Rpb24gdVN0KG4pe3JldHVy''@;'; put 'put ''biBuPz9udWxsfShyP2UudmFsdWU6ZSkscil7Y29uc3R7dmFsdWU6bywuLi5hfT1lO3RoaXMub3B0aW9ucz1hfWVsc2UgdGhpcy5vcHRpb25zPXt9O3RoaXMub3B0aW9ucy5wYXJhbXN8fCh0aGlzLm9wdGlvbnMucGFyYW1zPXt9KX1hYnNvcmJPcHRpb25zKGUpe2NvbnN0IHQ9ZS5wYXJhbXM7''@;'; put 'put ''aWYodCl7Y29uc3Qgcj10aGlzLm9wdGlvbnMucGFyYW1zO09iamVjdC5rZXlzKHQpLmZvckVhY2goaT0+e251bGw9PXJbaV0mJihyW2ldPXRbaV0pfSl9fX1jb25zdCBRRD0idm9pZCIscnNlPW5ldyBuc2UoUUQpO2NsYXNzIHNTdHtpZDtob3N0RWxlbWVudDtfZW5naW5lO3BsYXllcnM9W107''@;'; put 'put ''X3RyaWdnZXJzPW5ldyBNYXA7X3F1ZXVlPVtdO19lbGVtZW50TGlzdGVuZXJzPW5ldyBNYXA7X2hvc3RDbGFzc05hbWU7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMuaWQ9ZSx0aGlzLmhvc3RFbGVtZW50PXQsdGhpcy5fZW5naW5lPXIsdGhpcy5faG9zdENsYXNzTmFtZT0ibmctdG5zLSIrZSxv''@;'; put 'put ''bSh0LHRoaXMuX2hvc3RDbGFzc05hbWUpfWxpc3RlbihlLHQscixpKXtpZighdGhpcy5fdHJpZ2dlcnMuaGFzKHQpKXRocm93IGZ1bmN0aW9uIGlDdCgpe3JldHVybiBuZXcgV24oMzMwMiwhMSl9KCk7aWYobnVsbD09cnx8MD09ci5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gb0N0KCl7cmV0dXJu''@;'; put 'put ''IG5ldyBXbigzMzAzLCExKX0oKTtpZighZnVuY3Rpb24gZFN0KG4pe3JldHVybiJzdGFydCI9PW58fCJkb25lIj09bn0ocikpdGhyb3cgZnVuY3Rpb24gYUN0KCl7cmV0dXJuIG5ldyBXbigzNDAwLCExKX0oKTtjb25zdCBvPUhwKHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMsZSxbXSksYT17bmFt''@;'; put 'put ''ZTp0LHBoYXNlOnIsY2FsbGJhY2s6aX07by5wdXNoKGEpO2NvbnN0IGw9SHAodGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudCxlLG5ldyBNYXApO3JldHVybiBsLmhhcyh0KXx8KG9tKGUseVcpLG9tKGUseVcrIi0iK3QpLGwuc2V0KHQscnNlKSksKCk9Pnt0aGlzLl9lbmdpbmUuYWZ0ZXJG''@;'; put 'put ''bHVzaCgoKT0+e2NvbnN0IHU9by5pbmRleE9mKGEpO3U+PTAmJm8uc3BsaWNlKHUsMSksdGhpcy5fdHJpZ2dlcnMuaGFzKHQpfHxsLmRlbGV0ZSh0KX0pfX1yZWdpc3RlcihlLHQpe3JldHVybiF0aGlzLl90cmlnZ2Vycy5oYXMoZSkmJih0aGlzLl90cmlnZ2Vycy5zZXQoZSx0KSwhMCl9X2dl''@;'; put 'put ''dFRyaWdnZXIoZSl7Y29uc3QgdD10aGlzLl90cmlnZ2Vycy5nZXQoZSk7aWYoIXQpdGhyb3cgZnVuY3Rpb24gc0N0KCl7cmV0dXJuIG5ldyBXbigzNDAxLCExKX0oKTtyZXR1cm4gdH10cmlnZ2VyKGUsdCxyLGk9ITApe2NvbnN0IG89dGhpcy5fZ2V0VHJpZ2dlcih0KSxhPW5ldyBpc2UodGhp''@;'; put 'put ''cy5pZCx0LGUpO2xldCBsPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGUpO2x8fChvbShlLHlXKSxvbShlLHlXKyItIit0KSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LnNldChlLGw9bmV3IE1hcCkpO2xldCB1PWwuZ2V0KHQpO2NvbnN0IGc9bmV3IG5zZShyLHRoaXMu''@;'; put 'put ''aWQpO2lmKCEociYmci5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKSkmJnUmJmcuYWJzb3JiT3B0aW9ucyh1Lm9wdGlvbnMpLGwuc2V0KHQsZyksdXx8KHU9cnNlKSxnLnZhbHVlIT09UUQmJnUudmFsdWU9PT1nLnZhbHVlKXtpZighZnVuY3Rpb24gcFN0KG4sZSl7Y29uc3QgdD1PYmplY3Qua2V5''@;'; put 'put ''cyhuKSxyPU9iamVjdC5rZXlzKGUpO2lmKHQubGVuZ3RoIT1yLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKyl7Y29uc3Qgbz10W2ldO2lmKCFlLmhhc093blByb3BlcnR5KG8pfHxuW29dIT09ZVtvXSlyZXR1cm4hMX1yZXR1cm4hMH0odS5wYXJhbXMsZy5wYXJh''@;'; put 'put ''bXMpKXtjb25zdCBNZT1bXSxIZT1vLm1hdGNoU3R5bGVzKHUudmFsdWUsdS5wYXJhbXMsTWUpLFdlPW8ubWF0Y2hTdHlsZXMoZy52YWx1ZSxnLnBhcmFtcyxNZSk7TWUubGVuZ3RoP3RoaXMuX2VuZ2luZS5yZXBvcnRFcnJvcihNZSk6dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9Pntvdyhl''@;'; put 'put ''LEhlKSwkNShlLFdlKX0pfXJldHVybn1jb25zdCBaPUhwKHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LGUsW10pO1ouZm9yRWFjaChNZT0+e01lLm5hbWVzcGFjZUlkPT10aGlzLmlkJiZNZS50cmlnZ2VyTmFtZT09dCYmTWUucXVldWVkJiZNZS5kZXN0cm95KCl9KTtsZXQgZWU9by5t''@;'; put 'put ''YXRjaFRyYW5zaXRpb24odS52YWx1ZSxnLnZhbHVlLGUsZy5wYXJhbXMpLHZlPSExO2lmKCFlZSl7aWYoIWkpcmV0dXJuO2VlPW8uZmFsbGJhY2tUcmFuc2l0aW9uLHZlPSEwfXJldHVybiB0aGlzLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssdGhpcy5fcXVldWUucHVzaCh7ZWxlbWVu''@;'; put 'put ''dDplLHRyaWdnZXJOYW1lOnQsdHJhbnNpdGlvbjplZSxmcm9tU3RhdGU6dSx0b1N0YXRlOmcscGxheWVyOmEsaXNGYWxsYmFja1RyYW5zaXRpb246dmV9KSx2ZXx8KG9tKGUselRlKSxhLm9uU3RhcnQoKCk9PntMTShlLHpUZSl9KSksYS5vbkRvbmUoKCk9PntsZXQgTWU9dGhpcy5wbGF5ZXJz''@;'; put 'put ''LmluZGV4T2YoYSk7TWU+PTAmJnRoaXMucGxheWVycy5zcGxpY2UoTWUsMSk7Y29uc3QgSGU9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGUpO2lmKEhlKXtsZXQgV2U9SGUuaW5kZXhPZihhKTtXZT49MCYmSGUuc3BsaWNlKFdlLDEpfX0pLHRoaXMucGxheWVycy5wdXNoKGEp''@;'; put 'put ''LFoucHVzaChhKSxhfWRlcmVnaXN0ZXIoZSl7dGhpcy5fdHJpZ2dlcnMuZGVsZXRlKGUpLHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZm9yRWFjaCh0PT50LmRlbGV0ZShlKSksdGhpcy5fZWxlbWVudExpc3RlbmVycy5mb3JFYWNoKCh0LHIpPT57dGhpcy5fZWxlbWVudExpc3RlbmVy''@;'; put 'put ''cy5zZXQocix0LmZpbHRlcihpPT5pLm5hbWUhPWUpKX0pfWNsZWFyRWxlbWVudENhY2hlKGUpe3RoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZGVsZXRlKGUpLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZGVsZXRlKGUpO2NvbnN0IHQ9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQu''@;'; put 'put ''Z2V0KGUpO3QmJih0LmZvckVhY2gocj0+ci5kZXN0cm95KCkpLHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmRlbGV0ZShlKSl9X3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKGUsdCl7Y29uc3Qgcj10aGlzLl9lbmdpbmUuZHJpdmVyLnF1ZXJ5KGUsYlcsITApO3IuZm9yRWFj''@;'; put 'put ''aChpPT57aWYoaVtfNF0pcmV0dXJuO2NvbnN0IG89dGhpcy5fZW5naW5lLmZldGNoTmFtZXNwYWNlc0J5RWxlbWVudChpKTtvLnNpemU/by5mb3JFYWNoKGE9PmEudHJpZ2dlckxlYXZlQW5pbWF0aW9uKGksdCwhMSwhMCkpOnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUoaSl9KSx0aGlzLl9lbmdp''@;'; put 'put ''bmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT5yLmZvckVhY2goaT0+dGhpcy5jbGVhckVsZW1lbnRDYWNoZShpKSkpfXRyaWdnZXJMZWF2ZUFuaW1hdGlvbihlLHQscixpKXtjb25zdCBvPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGUpLGE9bmV3IE1hcDtpZihvKXtj''@;'; put 'put ''b25zdCBsPVtdO2lmKG8uZm9yRWFjaCgodSxnKT0+e2lmKGEuc2V0KGcsdS52YWx1ZSksdGhpcy5fdHJpZ2dlcnMuaGFzKGcpKXtjb25zdCBFPXRoaXMudHJpZ2dlcihlLGcsUUQsaSk7RSYmbC5wdXNoKEUpfX0pLGwubGVuZ3RoKXJldHVybiB0aGlzLl9lbmdpbmUubWFya0VsZW1lbnRBc1Jl''@;'; put 'put ''bW92ZWQodGhpcy5pZCxlLCEwLHQsYSksciYmUHYobCkub25Eb25lKCgpPT50aGlzLl9lbmdpbmUucHJvY2Vzc0xlYXZlTm9kZShlKSksITB9cmV0dXJuITF9cHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKGUpe2NvbnN0IHQ9dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQoZSkscj10''@;'; put 'put ''aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldChlKTtpZih0JiZyKXtjb25zdCBpPW5ldyBTZXQ7dC5mb3JFYWNoKG89Pntjb25zdCBhPW8ubmFtZTtpZihpLmhhcyhhKSlyZXR1cm47aS5hZGQoYSk7Y29uc3QgdT10aGlzLl90cmlnZ2Vycy5nZXQoYSkuZmFsbGJhY2tUcmFuc2l0aW9u''@;'; put 'put ''LGc9ci5nZXQoYSl8fHJzZSxFPW5ldyBuc2UoUUQpLE89bmV3IGlzZSh0aGlzLmlkLGEsZSk7dGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6ZSx0cmlnZ2VyTmFtZTphLHRyYW5zaXRpb246dSxmcm9tU3RhdGU6Zyx0b1N0YXRlOkUs''@;'; put 'put ''cGxheWVyOk8saXNGYWxsYmFja1RyYW5zaXRpb246ITB9KX0pfX1yZW1vdmVOb2RlKGUsdCl7Y29uc3Qgcj10aGlzLl9lbmdpbmU7aWYoZS5jaGlsZEVsZW1lbnRDb3VudCYmdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnMoZSx0KSx0aGlzLnRyaWdnZXJMZWF2ZUFuaW1hdGlv''@;'; put 'put ''bihlLHQsITApKXJldHVybjtsZXQgaT0hMTtpZihyLnRvdGFsQW5pbWF0aW9ucyl7Y29uc3Qgbz1yLnBsYXllcnMubGVuZ3RoP3IucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KGUpOltdO2lmKG8mJm8ubGVuZ3RoKWk9ITA7ZWxzZXtsZXQgYT1lO2Zvcig7YT1hLnBhcmVudE5vZGU7KWlm''@;'; put 'put ''KHIuc3RhdGVzQnlFbGVtZW50LmdldChhKSl7aT0hMDticmVha319fWlmKHRoaXMucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKGUpLGkpci5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLGUsITEsdCk7ZWxzZXtjb25zdCBvPWVbXzRdOyghb3x8bz09PVdUZSkmJihyLmFmdGVy''@;'; put 'put ''Rmx1c2goKCk9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUoZSkpLHIuZGVzdHJveUlubmVyQW5pbWF0aW9ucyhlKSxyLl9vblJlbW92YWxDb21wbGV0ZShlLHQpKX19aW5zZXJ0Tm9kZShlLHQpe29tKGUsdGhpcy5faG9zdENsYXNzTmFtZSl9ZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyhlKXtjb25z''@;'; put 'put ''dCB0PVtdO3JldHVybiB0aGlzLl9xdWV1ZS5mb3JFYWNoKHI9Pntjb25zdCBpPXIucGxheWVyO2lmKGkuZGVzdHJveWVkKXJldHVybjtjb25zdCBvPXIuZWxlbWVudCxhPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KG8pO2EmJmEuZm9yRWFjaChsPT57aWYobC5uYW1lPT1yLnRyaWdnZXJO''@;'; put 'put ''YW1lKXtjb25zdCB1PVBhZShvLHIudHJpZ2dlck5hbWUsci5mcm9tU3RhdGUudmFsdWUsci50b1N0YXRlLnZhbHVlKTt1Ll9kYXRhPWUsTmFlKHIucGxheWVyLGwucGhhc2UsdSxsLmNhbGxiYWNrKX19KSxpLm1hcmtlZEZvckRlc3Ryb3k/dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9Pntp''@;'; put 'put ''LmRlc3Ryb3koKX0pOnQucHVzaChyKX0pLHRoaXMuX3F1ZXVlPVtdLHQuc29ydCgocixpKT0+e2NvbnN0IG89ci50cmFuc2l0aW9uLmFzdC5kZXBDb3VudCxhPWkudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQ7cmV0dXJuIDA9PW98fDA9PWE/by1hOnRoaXMuX2VuZ2luZS5kcml2ZXIuY29udGFp''@;'; put 'put ''bnNFbGVtZW50KHIuZWxlbWVudCxpLmVsZW1lbnQpPzE6LTF9KX1kZXN0cm95KGUpe3RoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQuZGVzdHJveSgpKSx0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0aGlzLmhvc3RFbGVtZW50LGUpfX1jbGFzcyBsU3R7Ym9keU5vZGU7ZHJp''@;'; put 'put ''dmVyO19ub3JtYWxpemVyO3BsYXllcnM9W107bmV3SG9zdEVsZW1lbnRzPW5ldyBNYXA7cGxheWVyc0J5RWxlbWVudD1uZXcgTWFwO3BsYXllcnNCeVF1ZXJpZWRFbGVtZW50PW5ldyBNYXA7c3RhdGVzQnlFbGVtZW50PW5ldyBNYXA7ZGlzYWJsZWROb2Rlcz1uZXcgU2V0O3RvdGFsQW5pbWF0''@;'; put 'put ''aW9ucz0wO3RvdGFsUXVldWVkUGxheWVycz0wO19uYW1lc3BhY2VMb29rdXA9e307X25hbWVzcGFjZUxpc3Q9W107X2ZsdXNoRm5zPVtdO193aGVuUXVpZXRGbnM9W107bmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQ9bmV3IE1hcDtjb2xsZWN0ZWRFbnRlckVsZW1lbnRzPVtdO2NvbGxlY3RlZExl''@;'; put 'put ''YXZlRWxlbWVudHM9W107b25SZW1vdmFsQ29tcGxldGU9KGUsdCk9Pnt9O19vblJlbW92YWxDb21wbGV0ZShlLHQpe3RoaXMub25SZW1vdmFsQ29tcGxldGUoZSx0KX1jb25zdHJ1Y3RvcihlLHQscil7dGhpcy5ib2R5Tm9kZT1lLHRoaXMuZHJpdmVyPXQsdGhpcy5fbm9ybWFsaXplcj1yfWdl''@;'; put 'put ''dCBxdWV1ZWRQbGF5ZXJzKCl7Y29uc3QgZT1bXTtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTGlzdC5mb3JFYWNoKHQ9Pnt0LnBsYXllcnMuZm9yRWFjaChyPT57ci5xdWV1ZWQmJmUucHVzaChyKX0pfSksZX1jcmVhdGVOYW1lc3BhY2UoZSx0KXtjb25zdCByPW5ldyBzU3QoZSx0LHRoaXMpO3Jl''@;'; put 'put ''dHVybiB0aGlzLmJvZHlOb2RlJiZ0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQodGhpcy5ib2R5Tm9kZSx0KT90aGlzLl9iYWxhbmNlTmFtZXNwYWNlTGlzdChyLHQpOih0aGlzLm5ld0hvc3RFbGVtZW50cy5zZXQodCxyKSx0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQodCkpLHRoaXMuX25h''@;'; put 'put ''bWVzcGFjZUxvb2t1cFtlXT1yfV9iYWxhbmNlTmFtZXNwYWNlTGlzdChlLHQpe2NvbnN0IHI9dGhpcy5fbmFtZXNwYWNlTGlzdCxpPXRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQ7aWYoci5sZW5ndGgtMT49MCl7bGV0IGE9ITEsbD10aGlzLmRyaXZlci5nZXRQYXJlbnRFbGVtZW50KHQp''@;'; put 'put ''O2Zvcig7bDspe2NvbnN0IHU9aS5nZXQobCk7aWYodSl7Y29uc3QgZz1yLmluZGV4T2YodSk7ci5zcGxpY2UoZysxLDAsZSksYT0hMDticmVha31sPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQobCl9YXx8ci51bnNoaWZ0KGUpfWVsc2Ugci5wdXNoKGUpO3JldHVybiBpLnNldCh0LGUp''@;'; put 'put ''LGV9cmVnaXN0ZXIoZSx0KXtsZXQgcj10aGlzLl9uYW1lc3BhY2VMb29rdXBbZV07cmV0dXJuIHJ8fChyPXRoaXMuY3JlYXRlTmFtZXNwYWNlKGUsdCkpLHJ9cmVnaXN0ZXJUcmlnZ2VyKGUsdCxyKXtsZXQgaT10aGlzLl9uYW1lc3BhY2VMb29rdXBbZV07aSYmaS5yZWdpc3Rlcih0LHIpJiZ0''@;'; put 'put ''aGlzLnRvdGFsQW5pbWF0aW9ucysrfWRlc3Ryb3koZSx0KXtlJiYodGhpcy5hZnRlckZsdXNoKCgpPT57fSksdGhpcy5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9Pntjb25zdCByPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGUpO3RoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZGVsZXRl''@;'; put 'put ''KHIuaG9zdEVsZW1lbnQpO2NvbnN0IGk9dGhpcy5fbmFtZXNwYWNlTGlzdC5pbmRleE9mKHIpO2k+PTAmJnRoaXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKGksMSksci5kZXN0cm95KHQpLGRlbGV0ZSB0aGlzLl9uYW1lc3BhY2VMb29rdXBbZV19KSl9X2ZldGNoTmFtZXNwYWNlKGUpe3JldHVy''@;'; put 'put ''biB0aGlzLl9uYW1lc3BhY2VMb29rdXBbZV19ZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KGUpe2NvbnN0IHQ9bmV3IFNldCxyPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldChlKTtpZihyKWZvcihsZXQgaSBvZiByLnZhbHVlcygpKWlmKGkubmFtZXNwYWNlSWQpe2NvbnN0IG89dGhpcy5fZmV0''@;'; put 'put ''Y2hOYW1lc3BhY2UoaS5uYW1lc3BhY2VJZCk7byYmdC5hZGQobyl9cmV0dXJuIHR9dHJpZ2dlcihlLHQscixpKXtpZihBVyh0KSl7Y29uc3Qgbz10aGlzLl9mZXRjaE5hbWVzcGFjZShlKTtpZihvKXJldHVybiBvLnRyaWdnZXIodCxyLGkpLCEwfXJldHVybiExfWluc2VydE5vZGUoZSx0LHIs''@;'; put 'put ''aSl7aWYoIUFXKHQpKXJldHVybjtjb25zdCBvPXRbXzRdO2lmKG8mJm8uc2V0Rm9yUmVtb3ZhbCl7by5zZXRGb3JSZW1vdmFsPSExLG8uc2V0Rm9yTW92ZT0hMDtjb25zdCBhPXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5pbmRleE9mKHQpO2E+PTAmJnRoaXMuY29sbGVjdGVkTGVhdmVF''@;'; put 'put ''bGVtZW50cy5zcGxpY2UoYSwxKX1pZihlKXtjb25zdCBhPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGUpO2EmJmEuaW5zZXJ0Tm9kZSh0LHIpfWkmJnRoaXMuY29sbGVjdEVudGVyRWxlbWVudCh0KX1jb2xsZWN0RW50ZXJFbGVtZW50KGUpe3RoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5wdXNo''@;'; put 'put ''KGUpfW1hcmtFbGVtZW50QXNEaXNhYmxlZChlLHQpe3Q/dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyhlKXx8KHRoaXMuZGlzYWJsZWROb2Rlcy5hZGQoZSksb20oZSx0c2UpKTp0aGlzLmRpc2FibGVkTm9kZXMuaGFzKGUpJiYodGhpcy5kaXNhYmxlZE5vZGVzLmRlbGV0ZShlKSxMTShlLHRzZSkp''@;'; put 'put ''fXJlbW92ZU5vZGUoZSx0LHIpe2lmKEFXKHQpKXtjb25zdCBpPWU/dGhpcy5fZmV0Y2hOYW1lc3BhY2UoZSk6bnVsbDtpP2kucmVtb3ZlTm9kZSh0LHIpOnRoaXMubWFya0VsZW1lbnRBc1JlbW92ZWQoZSx0LCExLHIpO2NvbnN0IG89dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5nZXQo''@;'; put 'put ''dCk7byYmby5pZCE9PWUmJm8ucmVtb3ZlTm9kZSh0LHIpfWVsc2UgdGhpcy5fb25SZW1vdmFsQ29tcGxldGUodCxyKX1tYXJrRWxlbWVudEFzUmVtb3ZlZChlLHQscixpLG8pe3RoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5wdXNoKHQpLHRbXzRdPXtuYW1lc3BhY2VJZDplLHNldEZvclJl''@;'; put 'put ''bW92YWw6aSxoYXNBbmltYXRpb246cixyZW1vdmVkQmVmb3JlUXVlcmllZDohMSxwcmV2aW91c1RyaWdnZXJzVmFsdWVzOm99fWxpc3RlbihlLHQscixpLG8pe3JldHVybiBBVyh0KT90aGlzLl9mZXRjaE5hbWVzcGFjZShlKS5saXN0ZW4odCxyLGksbyk6KCk9Pnt9fV9idWlsZEluc3RydWN0''@;'; put 'put ''aW9uKGUsdCxyLGksbyl7cmV0dXJuIGUudHJhbnNpdGlvbi5idWlsZCh0aGlzLmRyaXZlcixlLmVsZW1lbnQsZS5mcm9tU3RhdGUudmFsdWUsZS50b1N0YXRlLnZhbHVlLHIsaSxlLmZyb21TdGF0ZS5vcHRpb25zLGUudG9TdGF0ZS5vcHRpb25zLHQsbyl9ZGVzdHJveUlubmVyQW5pbWF0aW9u''@;'; put 'put ''cyhlKXtsZXQgdD10aGlzLmRyaXZlci5xdWVyeShlLGJXLCEwKTt0LmZvckVhY2gocj0+dGhpcy5kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQocikpLDAhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuc2l6ZSYmKHQ9dGhpcy5kcml2ZXIucXVlcnkoZSxCYWUsITApLHQu''@;'; put 'put ''Zm9yRWFjaChyPT50aGlzLmZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQocikpKX1kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQoZSl7Y29uc3QgdD10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGUpO3QmJnQuZm9yRWFjaChyPT57ci5xdWV1ZWQ/ci5tYXJr''@;'; put 'put ''ZWRGb3JEZXN0cm95PSEwOnIuZGVzdHJveSgpfSl9ZmluaXNoQWN0aXZlUXVlcmllZEFuaW1hdGlvbk9uRWxlbWVudChlKXtjb25zdCB0PXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KGUpO3QmJnQuZm9yRWFjaChyPT5yLmZpbmlzaCgpKX13aGVuUmVuZGVyaW5nRG9uZSgpe3Jl''@;'; put 'put ''dHVybiBuZXcgUHJvbWlzZShlPT57aWYodGhpcy5wbGF5ZXJzLmxlbmd0aClyZXR1cm4gUHYodGhpcy5wbGF5ZXJzKS5vbkRvbmUoKCk9PmUoKSk7ZSgpfSl9cHJvY2Vzc0xlYXZlTm9kZShlKXtjb25zdCB0PWVbXzRdO2lmKHQmJnQuc2V0Rm9yUmVtb3ZhbCl7aWYoZVtfNF09V1RlLHQubmFt''@;'; put 'put ''ZXNwYWNlSWQpe3RoaXMuZGVzdHJveUlubmVyQW5pbWF0aW9ucyhlKTtjb25zdCByPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHQubmFtZXNwYWNlSWQpO3ImJnIuY2xlYXJFbGVtZW50Q2FjaGUoZSl9dGhpcy5fb25SZW1vdmFsQ29tcGxldGUoZSx0LnNldEZvclJlbW92YWwpfWUuY2xhc3NMaXN0''@;'; put 'put ''Py5jb250YWlucyh0c2UpJiZ0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZChlLCExKSx0aGlzLmRyaXZlci5xdWVyeShlLCIubmctYW5pbWF0ZS1kaXNhYmxlZCIsITApLmZvckVhY2gocj0+e3RoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKHIsITEpfSl9Zmx1c2goZT0tMSl7bGV0IHQ9W107''@;'; put 'put ''aWYodGhpcy5uZXdIb3N0RWxlbWVudHMuc2l6ZSYmKHRoaXMubmV3SG9zdEVsZW1lbnRzLmZvckVhY2goKHIsaSk9PnRoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KHIsaSkpLHRoaXMubmV3SG9zdEVsZW1lbnRzLmNsZWFyKCkpLHRoaXMudG90YWxBbmltYXRpb25zJiZ0aGlzLmNvbGxlY3Rl''@;'; put 'put ''ZEVudGVyRWxlbWVudHMubGVuZ3RoKWZvcihsZXQgcj0wO3I8dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aDtyKyspb20odGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzW3JdLCJuZy1zdGFyLWluc2VydGVkIik7aWYodGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgmJih0aGlz''@;'; put 'put ''LnRvdGFsUXVldWVkUGxheWVyc3x8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aCkpe2NvbnN0IHI9W107dHJ5e3Q9dGhpcy5fZmx1c2hBbmltYXRpb25zKHIsZSl9ZmluYWxseXtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKylyW2ldKCl9fWVsc2UgZm9yKGxldCByPTA7cjx0''@;'; put 'put ''aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO3IrKyl0aGlzLnByb2Nlc3NMZWF2ZU5vZGUodGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW3JdKTtpZih0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg9MCx0aGlzLmNv''@;'; put 'put ''bGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5fZmx1c2hGbnMuZm9yRWFjaChyPT5yKCkpLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucy5sZW5ndGgpe2NvbnN0IHI9dGhpcy5fd2hlblF1aWV0Rm5zO3RoaXMuX3doZW5RdWlldEZucz1bXSx0Lmxlbmd0aD9Q''@;'; put 'put ''dih0KS5vbkRvbmUoKCk9PntyLmZvckVhY2goaT0+aSgpKX0pOnIuZm9yRWFjaChpPT5pKCkpfX1yZXBvcnRFcnJvcihlKXt0aHJvdyBmdW5jdGlvbiBsQ3QoKXtyZXR1cm4gbmV3IFduKDM0MDIsITEpfSgpfV9mbHVzaEFuaW1hdGlvbnMoZSx0KXtjb25zdCByPW5ldyBNVyxpPVtdLG89bmV3''@;'; put 'put ''IE1hcCxhPVtdLGw9bmV3IE1hcCx1PW5ldyBNYXAsZz1uZXcgTWFwLEU9bmV3IFNldDt0aGlzLmRpc2FibGVkTm9kZXMuZm9yRWFjaChBbj0+e0UuYWRkKEFuKTtjb25zdCBIcj10aGlzLmRyaXZlci5xdWVyeShBbiwiLm5nLWFuaW1hdGUtcXVldWVkIiwhMCk7Zm9yKGxldCB0aT0wO3RpPEhy''@;'; put 'put ''Lmxlbmd0aDt0aSsrKUUuYWRkKEhyW3RpXSl9KTtjb25zdCBPPXRoaXMuYm9keU5vZGUsWj1BcnJheS5mcm9tKHRoaXMuc3RhdGVzQnlFbGVtZW50LmtleXMoKSksZWU9R1RlKFosdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzKSx2ZT1uZXcgTWFwO2xldCBNZT0wO2VlLmZvckVhY2goKEFu''@;'; put 'put ''LEhyKT0+e2NvbnN0IHRpPSJuZy1lbnRlciIrTWUrKzt2ZS5zZXQoSHIsdGkpLEFuLmZvckVhY2goZnI9Pm9tKGZyLHRpKSl9KTtjb25zdCBIZT1bXSxXZT1uZXcgU2V0LGF0PW5ldyBTZXQ7Zm9yKGxldCBBbj0wO0FuPHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7QW4rKyl7''@;'; put 'put ''Y29uc3QgSHI9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW0FuXSx0aT1IcltfNF07dGkmJnRpLnNldEZvclJlbW92YWwmJihIZS5wdXNoKEhyKSxXZS5hZGQoSHIpLHRpLmhhc0FuaW1hdGlvbj90aGlzLmRyaXZlci5xdWVyeShIciwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNo''@;'; put 'put ''KGZyPT5XZS5hZGQoZnIpKTphdC5hZGQoSHIpKX1jb25zdCBDdD1uZXcgTWFwLEF0PUdUZShaLEFycmF5LmZyb20oV2UpKTtBdC5mb3JFYWNoKChBbixIcik9Pntjb25zdCB0aT1WYWUrTWUrKztDdC5zZXQoSHIsdGkpLEFuLmZvckVhY2goZnI9Pm9tKGZyLHRpKSl9KSxlLnB1c2goKCk9Pntl''@;'; put 'put ''ZS5mb3JFYWNoKChBbixIcik9Pntjb25zdCB0aT12ZS5nZXQoSHIpO0FuLmZvckVhY2goZnI9PkxNKGZyLHRpKSl9KSxBdC5mb3JFYWNoKChBbixIcik9Pntjb25zdCB0aT1DdC5nZXQoSHIpO0FuLmZvckVhY2goZnI9PkxNKGZyLHRpKSl9KSxIZS5mb3JFYWNoKEFuPT57dGhpcy5wcm9jZXNz''@;'; put 'put ''TGVhdmVOb2RlKEFuKX0pfSk7Y29uc3QgS3Q9W10scXQ9W107Zm9yKGxldCBBbj10aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aC0xO0FuPj0wO0FuLS0pdGhpcy5fbmFtZXNwYWNlTGlzdFtBbl0uZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyh0KS5mb3JFYWNoKHRpPT57Y29uc3QgZnI9dGkucGxh''@;'; put 'put ''eWVyLGVpPXRpLmVsZW1lbnQ7aWYoS3QucHVzaChmciksdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aCl7Y29uc3Qga2E9ZWlbXzRdO2lmKGthJiZrYS5zZXRGb3JNb3ZlKXtpZihrYS5wcmV2aW91c1RyaWdnZXJzVmFsdWVzJiZrYS5wcmV2aW91c1RyaWdnZXJzVmFsdWVzLmhh''@;'; put 'put ''cyh0aS50cmlnZ2VyTmFtZSkpe2NvbnN0IGFvPWthLnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuZ2V0KHRpLnRyaWdnZXJOYW1lKSx1dD10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQodGkuZWxlbWVudCk7aWYodXQmJnV0Lmhhcyh0aS50cmlnZ2VyTmFtZSkpe2NvbnN0IEh0PXV0LmdldCh0aS50''@;'; put 'put ''cmlnZ2VyTmFtZSk7SHQudmFsdWU9YW8sdXQuc2V0KHRpLnRyaWdnZXJOYW1lLEh0KX19cmV0dXJuIHZvaWQgZnIuZGVzdHJveSgpfX1jb25zdCBQbz0hT3x8IXRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVudChPLGVpKSxIbz1DdC5nZXQoZWkpLHhpPXZlLmdldChlaSksVG89dGhpcy5fYnVp''@;'; put 'put ''bGRJbnN0cnVjdGlvbih0aSxyLHhpLEhvLFBvKTtpZihUby5lcnJvcnMmJlRvLmVycm9ycy5sZW5ndGgpcmV0dXJuIHZvaWQgcXQucHVzaChUbyk7aWYoUG8pcmV0dXJuIGZyLm9uU3RhcnQoKCk9Pm93KGVpLFRvLmZyb21TdHlsZXMpKSxmci5vbkRlc3Ryb3koKCk9PiQ1KGVpLFRvLnRvU3R5''@;'; put 'put ''bGVzKSksdm9pZCBpLnB1c2goZnIpO2lmKHRpLmlzRmFsbGJhY2tUcmFuc2l0aW9uKXJldHVybiBmci5vblN0YXJ0KCgpPT5vdyhlaSxUby5mcm9tU3R5bGVzKSksZnIub25EZXN0cm95KCgpPT4kNShlaSxUby50b1N0eWxlcykpLHZvaWQgaS5wdXNoKGZyKTtjb25zdCB3cz1bXTtUby50aW1l''@;'; put 'put ''bGluZXMuZm9yRWFjaChrYT0+e2thLnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lPSEwLHRoaXMuZGlzYWJsZWROb2Rlcy5oYXMoa2EuZWxlbWVudCl8fHdzLnB1c2goa2EpfSksVG8udGltZWxpbmVzPXdzLHIuYXBwZW5kKGVpLFRvLnRpbWVsaW5lcyksYS5wdXNoKHtpbnN0cnVjdGlvbjpUbyxw''@;'; put 'put ''bGF5ZXI6ZnIsZWxlbWVudDplaX0pLFRvLnF1ZXJpZWRFbGVtZW50cy5mb3JFYWNoKGthPT5IcChsLGthLFtdKS5wdXNoKGZyKSksVG8ucHJlU3R5bGVQcm9wcy5mb3JFYWNoKChrYSxhbyk9PntpZihrYS5zaXplKXtsZXQgdXQ9dS5nZXQoYW8pO3V0fHx1LnNldChhbyx1dD1uZXcgU2V0KSxr''@;'; put 'put ''YS5mb3JFYWNoKChIdCxkbik9PnV0LmFkZChkbikpfX0pLFRvLnBvc3RTdHlsZVByb3BzLmZvckVhY2goKGthLGFvKT0+e2xldCB1dD1nLmdldChhbyk7dXR8fGcuc2V0KGFvLHV0PW5ldyBTZXQpLGthLmZvckVhY2goKEh0LGRuKT0+dXQuYWRkKGRuKSl9KX0pO2lmKHF0Lmxlbmd0aCl7Y29u''@;'; put 'put ''c3QgQW49W107cXQuZm9yRWFjaChIcj0+e0FuLnB1c2goZnVuY3Rpb24gY0N0KCl7cmV0dXJuIG5ldyBXbigzNTA1LCExKX0oKSl9KSxLdC5mb3JFYWNoKEhyPT5Ici5kZXN0cm95KCkpLHRoaXMucmVwb3J0RXJyb3IoQW4pfWNvbnN0IGduPW5ldyBNYXAsVG49bmV3IE1hcDthLmZvckVhY2go''@;'; put 'put ''QW49Pntjb25zdCBIcj1Bbi5lbGVtZW50O3IuaGFzKEhyKSYmKFRuLnNldChIcixIciksdGhpcy5fYmVmb3JlQW5pbWF0aW9uQnVpbGQoQW4ucGxheWVyLm5hbWVzcGFjZUlkLEFuLmluc3RydWN0aW9uLGduKSl9KSxpLmZvckVhY2goQW49Pntjb25zdCBIcj1Bbi5lbGVtZW50O3RoaXMuX2dl''@;'; put 'put ''dFByZXZpb3VzUGxheWVycyhIciwhMSxBbi5uYW1lc3BhY2VJZCxBbi50cmlnZ2VyTmFtZSxudWxsKS5mb3JFYWNoKGZyPT57SHAoZ24sSHIsW10pLnB1c2goZnIpLGZyLmRlc3Ryb3koKX0pfSk7Y29uc3QgQ249SGUuZmlsdGVyKEFuPT5xVGUoQW4sdSxnKSkscXI9bmV3IE1hcDtaVGUocXIs''@;'; put 'put ''dGhpcy5kcml2ZXIsYXQsZyx0NykuZm9yRWFjaChBbj0+e3FUZShBbix1LGcpJiZDbi5wdXNoKEFuKX0pO2NvbnN0IFRyPW5ldyBNYXA7ZWUuZm9yRWFjaCgoQW4sSHIpPT57WlRlKFRyLHRoaXMuZHJpdmVyLG5ldyBTZXQoQW4pLHUsIiEiKX0pLENuLmZvckVhY2goQW49Pntjb25zdCBIcj1x''@;'; put 'put ''ci5nZXQoQW4pLHRpPVRyLmdldChBbik7cXIuc2V0KEFuLG5ldyBNYXAoWy4uLkhyPy5lbnRyaWVzKCk/P1tdLC4uLnRpPy5lbnRyaWVzKCk/P1tdXSkpfSk7Y29uc3Qgcmk9W10sZm49W10seXI9e307YS5mb3JFYWNoKEFuPT57Y29uc3R7ZWxlbWVudDpIcixwbGF5ZXI6dGksaW5zdHJ1Y3Rp''@;'; put 'put ''b246ZnJ9PUFuO2lmKHIuaGFzKEhyKSl7aWYoRS5oYXMoSHIpKXJldHVybiB0aS5vbkRlc3Ryb3koKCk9PiQ1KEhyLGZyLnRvU3R5bGVzKSksdGkuZGlzYWJsZWQ9ITAsdGkub3ZlcnJpZGVUb3RhbFRpbWUoZnIudG90YWxUaW1lKSx2b2lkIGkucHVzaCh0aSk7bGV0IGVpPXlyO2lmKFRuLnNp''@;'; put 'put ''emU+MSl7bGV0IEhvPUhyO2NvbnN0IHhpPVtdO2Zvcig7SG89SG8ucGFyZW50Tm9kZTspe2NvbnN0IFRvPVRuLmdldChIbyk7aWYoVG8pe2VpPVRvO2JyZWFrfXhpLnB1c2goSG8pfXhpLmZvckVhY2goVG89PlRuLnNldChUbyxlaSkpfWNvbnN0IFBvPXRoaXMuX2J1aWxkQW5pbWF0aW9uKHRp''@;'; put 'put ''Lm5hbWVzcGFjZUlkLGZyLGduLG8sVHIscXIpO2lmKHRpLnNldFJlYWxQbGF5ZXIoUG8pLGVpPT09eXIpcmkucHVzaCh0aSk7ZWxzZXtjb25zdCBIbz10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGVpKTtIbyYmSG8ubGVuZ3RoJiYodGkucGFyZW50UGxheWVyPVB2KEhvKSksaS5wdXNoKHRp''@;'; put 'put ''KX19ZWxzZSBvdyhIcixmci5mcm9tU3R5bGVzKSx0aS5vbkRlc3Ryb3koKCk9PiQ1KEhyLGZyLnRvU3R5bGVzKSksZm4ucHVzaCh0aSksRS5oYXMoSHIpJiZpLnB1c2godGkpfSksZm4uZm9yRWFjaChBbj0+e2NvbnN0IEhyPW8uZ2V0KEFuLmVsZW1lbnQpO2lmKEhyJiZIci5sZW5ndGgpe2Nv''@;'; put 'put ''bnN0IHRpPVB2KEhyKTtBbi5zZXRSZWFsUGxheWVyKHRpKX19KSxpLmZvckVhY2goQW49PntBbi5wYXJlbnRQbGF5ZXI/QW4uc3luY1BsYXllckV2ZW50cyhBbi5wYXJlbnRQbGF5ZXIpOkFuLmRlc3Ryb3koKX0pO2ZvcihsZXQgQW49MDtBbjxIZS5sZW5ndGg7QW4rKyl7Y29uc3QgSHI9SGVb''@;'; put 'put ''QW5dLHRpPUhyW180XTtpZihMTShIcixWYWUpLHRpJiZ0aS5oYXNBbmltYXRpb24pY29udGludWU7bGV0IGZyPVtdO2lmKGwuc2l6ZSl7bGV0IFBvPWwuZ2V0KEhyKTtQbyYmUG8ubGVuZ3RoJiZmci5wdXNoKC4uLlBvKTtsZXQgSG89dGhpcy5kcml2ZXIucXVlcnkoSHIsQmFlLCEwKTtmb3Io''@;'; put 'put ''bGV0IHhpPTA7eGk8SG8ubGVuZ3RoO3hpKyspe2xldCBUbz1sLmdldChIb1t4aV0pO1RvJiZUby5sZW5ndGgmJmZyLnB1c2goLi4uVG8pfX1jb25zdCBlaT1mci5maWx0ZXIoUG89PiFQby5kZXN0cm95ZWQpO2VpLmxlbmd0aD9oU3QodGhpcyxIcixlaSk6dGhpcy5wcm9jZXNzTGVhdmVOb2Rl''@;'; put 'put ''KEhyKX1yZXR1cm4gSGUubGVuZ3RoPTAscmkuZm9yRWFjaChBbj0+e3RoaXMucGxheWVycy5wdXNoKEFuKSxBbi5vbkRvbmUoKCk9PntBbi5kZXN0cm95KCk7Y29uc3QgSHI9dGhpcy5wbGF5ZXJzLmluZGV4T2YoQW4pO3RoaXMucGxheWVycy5zcGxpY2UoSHIsMSl9KSxBbi5wbGF5KCl9KSxy''@;'; put 'put ''aX1hZnRlckZsdXNoKGUpe3RoaXMuX2ZsdXNoRm5zLnB1c2goZSl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGUpe3RoaXMuX3doZW5RdWlldEZucy5wdXNoKGUpfV9nZXRQcmV2aW91c1BsYXllcnMoZSx0LHIsaSxvKXtsZXQgYT1bXTtpZih0KXtjb25zdCBsPXRoaXMucGxheWVyc0J5UXVl''@;'; put 'put ''cmllZEVsZW1lbnQuZ2V0KGUpO2wmJihhPWwpfWVsc2V7Y29uc3QgbD10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGUpO2lmKGwpe2NvbnN0IHU9IW98fG89PVFEO2wuZm9yRWFjaChnPT57Zy5xdWV1ZWR8fCF1JiZnLnRyaWdnZXJOYW1lIT1pfHxhLnB1c2goZyl9KX19cmV0dXJuKHJ8fGkp''@;'; put 'put ''JiYoYT1hLmZpbHRlcihsPT4hKHImJnIhPWwubmFtZXNwYWNlSWR8fGkmJmkhPWwudHJpZ2dlck5hbWUpKSksYX1fYmVmb3JlQW5pbWF0aW9uQnVpbGQoZSx0LHIpe2NvbnN0IG89dC5lbGVtZW50LGE9dC5pc1JlbW92YWxUcmFuc2l0aW9uP3ZvaWQgMDplLGw9dC5pc1JlbW92YWxUcmFuc2l0''@;'; put 'put ''aW9uP3ZvaWQgMDp0LnRyaWdnZXJOYW1lO2Zvcihjb25zdCB1IG9mIHQudGltZWxpbmVzKXtjb25zdCBnPXUuZWxlbWVudCxFPWchPT1vLE89SHAocixnLFtdKTt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoZyxFLGEsbCx0LnRvU3RhdGUpLmZvckVhY2goZWU9Pntjb25zdCB2ZT1lZS5nZXRS''@;'; put 'put ''ZWFsUGxheWVyKCk7dmUuYmVmb3JlRGVzdHJveSYmdmUuYmVmb3JlRGVzdHJveSgpLGVlLmRlc3Ryb3koKSxPLnB1c2goZWUpfSl9b3cobyx0LmZyb21TdHlsZXMpfV9idWlsZEFuaW1hdGlvbihlLHQscixpLG8sYSl7Y29uc3QgbD10LnRyaWdnZXJOYW1lLHU9dC5lbGVtZW50LGc9W10sRT1u''@;'; put 'put ''ZXcgU2V0LE89bmV3IFNldCxaPXQudGltZWxpbmVzLm1hcCh2ZT0+e2NvbnN0IE1lPXZlLmVsZW1lbnQ7RS5hZGQoTWUpO2NvbnN0IEhlPU1lW180XTtpZihIZSYmSGUucmVtb3ZlZEJlZm9yZVF1ZXJpZWQpcmV0dXJuIG5ldyBmRCh2ZS5kdXJhdGlvbix2ZS5kZWxheSk7Y29uc3QgV2U9TWUh''@;'; put 'put ''PT11LGF0PWZ1bmN0aW9uIGZTdChuKXtjb25zdCBlPVtdO3JldHVybiAkVGUobixlKSxlfSgoci5nZXQoTWUpfHxvU3QpLm1hcChnbj0+Z24uZ2V0UmVhbFBsYXllcigpKSkuZmlsdGVyKGduPT4hIWduLmVsZW1lbnQmJmduLmVsZW1lbnQ9PT1NZSksQ3Q9by5nZXQoTWUpLEF0PWEuZ2V0KE1l''@;'; put 'put ''KSxLdD1FVGUodGhpcy5fbm9ybWFsaXplcix2ZS5rZXlmcmFtZXMsQ3QsQXQpLHF0PXRoaXMuX2J1aWxkUGxheWVyKHZlLEt0LGF0KTtpZih2ZS5zdWJUaW1lbGluZSYmaSYmTy5hZGQoTWUpLFdlKXtjb25zdCBnbj1uZXcgaXNlKGUsbCxNZSk7Z24uc2V0UmVhbFBsYXllcihxdCksZy5wdXNo''@;'; put 'put ''KGduKX1yZXR1cm4gcXR9KTtnLmZvckVhY2godmU9PntIcCh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LHZlLmVsZW1lbnQsW10pLnB1c2godmUpLHZlLm9uRG9uZSgoKT0+ZnVuY3Rpb24gY1N0KG4sZSx0KXtsZXQgcj1uLmdldChlKTtpZihyKXtpZihyLmxlbmd0aCl7Y29uc3QgaT1y''@;'; put 'put ''LmluZGV4T2YodCk7ci5zcGxpY2UoaSwxKX0wPT1yLmxlbmd0aCYmbi5kZWxldGUoZSl9cmV0dXJuIHJ9KHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsdmUuZWxlbWVudCx2ZSkpfSksRS5mb3JFYWNoKHZlPT5vbSh2ZSxJVGUpKTtjb25zdCBlZT1QdihaKTtyZXR1cm4gZWUub25EZXN0''@;'; put 'put ''cm95KCgpPT57RS5mb3JFYWNoKHZlPT5MTSh2ZSxJVGUpKSwkNSh1LHQudG9TdHlsZXMpfSksTy5mb3JFYWNoKHZlPT57SHAoaSx2ZSxbXSkucHVzaChlZSl9KSxlZX1fYnVpbGRQbGF5ZXIoZSx0LHIpe3JldHVybiB0Lmxlbmd0aD4wP3RoaXMuZHJpdmVyLmFuaW1hdGUoZS5lbGVtZW50LHQs''@;'; put 'put ''ZS5kdXJhdGlvbixlLmRlbGF5LGUuZWFzaW5nLHIpOm5ldyBmRChlLmR1cmF0aW9uLGUuZGVsYXkpfX1jbGFzcyBpc2V7bmFtZXNwYWNlSWQ7dHJpZ2dlck5hbWU7ZWxlbWVudDtfcGxheWVyPW5ldyBmRDtfY29udGFpbnNSZWFsUGxheWVyPSExO19xdWV1ZWRDYWxsYmFja3M9bmV3IE1hcDtk''@;'; put 'put ''ZXN0cm95ZWQ9ITE7cGFyZW50UGxheWVyPW51bGw7bWFya2VkRm9yRGVzdHJveT0hMTtkaXNhYmxlZD0hMTtxdWV1ZWQ9ITA7dG90YWxUaW1lPTA7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMubmFtZXNwYWNlSWQ9ZSx0aGlzLnRyaWdnZXJOYW1lPXQsdGhpcy5lbGVtZW50PXJ9c2V0UmVhbFBs''@;'; put 'put ''YXllcihlKXt0aGlzLl9jb250YWluc1JlYWxQbGF5ZXJ8fCh0aGlzLl9wbGF5ZXI9ZSx0aGlzLl9xdWV1ZWRDYWxsYmFja3MuZm9yRWFjaCgodCxyKT0+e3QuZm9yRWFjaChpPT5OYWUoZSxyLHZvaWQgMCxpKSl9KSx0aGlzLl9xdWV1ZWRDYWxsYmFja3MuY2xlYXIoKSx0aGlzLl9jb250YWlu''@;'; put 'put ''c1JlYWxQbGF5ZXI9ITAsdGhpcy5vdmVycmlkZVRvdGFsVGltZShlLnRvdGFsVGltZSksdGhpcy5xdWV1ZWQ9ITEpfWdldFJlYWxQbGF5ZXIoKXtyZXR1cm4gdGhpcy5fcGxheWVyfW92ZXJyaWRlVG90YWxUaW1lKGUpe3RoaXMudG90YWxUaW1lPWV9c3luY1BsYXllckV2ZW50cyhlKXtjb25z''@;'; put 'put ''dCB0PXRoaXMuX3BsYXllcjt0LnRyaWdnZXJDYWxsYmFjayYmZS5vblN0YXJ0KCgpPT50LnRyaWdnZXJDYWxsYmFjaygic3RhcnQiKSksZS5vbkRvbmUoKCk9PnRoaXMuZmluaXNoKCkpLGUub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3koKSl9X3F1ZXVlRXZlbnQoZSx0KXtIcCh0aGlzLl9x''@;'; put 'put ''dWV1ZWRDYWxsYmFja3MsZSxbXSkucHVzaCh0KX1vbkRvbmUoZSl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRvbmUiLGUpLHRoaXMuX3BsYXllci5vbkRvbmUoZSl9b25TdGFydChlKXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgic3RhcnQiLGUpLHRoaXMuX3BsYXll''@;'; put 'put ''ci5vblN0YXJ0KGUpfW9uRGVzdHJveShlKXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZGVzdHJveSIsZSksdGhpcy5fcGxheWVyLm9uRGVzdHJveShlKX1pbml0KCl7dGhpcy5fcGxheWVyLmluaXQoKX1oYXNTdGFydGVkKCl7cmV0dXJuIXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5''@;'; put 'put ''ZXIuaGFzU3RhcnRlZCgpfXBsYXkoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wbGF5KCl9cGF1c2UoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wYXVzZSgpfXJlc3RhcnQoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXN0YXJ0KCl9ZmluaXNoKCl7dGhpcy5fcGxh''@;'; put 'put ''eWVyLmZpbmlzaCgpfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLl9wbGF5ZXIuZGVzdHJveSgpfXJlc2V0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzZXQoKX1zZXRQb3NpdGlvbihlKXt0aGlzLnF1ZXVlZHx8dGhpcy5fcGxheWVyLnNldFBvc2l0aW9uKGUpfWdl''@;'; put 'put ''dFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMucXVldWVkPzA6dGhpcy5fcGxheWVyLmdldFBvc2l0aW9uKCl9dHJpZ2dlckNhbGxiYWNrKGUpe2NvbnN0IHQ9dGhpcy5fcGxheWVyO3QudHJpZ2dlckNhbGxiYWNrJiZ0LnRyaWdnZXJDYWxsYmFjayhlKX19ZnVuY3Rpb24gQVcobil7cmV0dXJuIG4m''@;'; put 'put ''JjE9PT1uLm5vZGVUeXBlfWZ1bmN0aW9uIFlUZShuLGUpe2NvbnN0IHQ9bi5zdHlsZS5kaXNwbGF5O3JldHVybiBuLnN0eWxlLmRpc3BsYXk9ZT8/Im5vbmUiLHR9ZnVuY3Rpb24gWlRlKG4sZSx0LHIsaSl7Y29uc3Qgbz1bXTt0LmZvckVhY2godT0+by5wdXNoKFlUZSh1KSkpO2NvbnN0IGE9''@;'; put 'put ''W107ci5mb3JFYWNoKCh1LGcpPT57Y29uc3QgRT1uZXcgTWFwO3UuZm9yRWFjaChPPT57Y29uc3QgWj1lLmNvbXB1dGVTdHlsZShnLE8saSk7RS5zZXQoTyxaKSwoIVp8fDA9PVoubGVuZ3RoKSYmKGdbXzRdPWFTdCxhLnB1c2goZykpfSksbi5zZXQoZyxFKX0pO2xldCBsPTA7cmV0dXJuIHQu''@;'; put 'put ''Zm9yRWFjaCh1PT5ZVGUodSxvW2wrK10pKSxhfWZ1bmN0aW9uIEdUZShuLGUpe2NvbnN0IHQ9bmV3IE1hcDtpZihuLmZvckVhY2gobD0+dC5zZXQobCxbXSkpLDA9PWUubGVuZ3RoKXJldHVybiB0O2NvbnN0IGk9bmV3IFNldChlKSxvPW5ldyBNYXA7ZnVuY3Rpb24gYShsKXtpZighbClyZXR1''@;'; put 'put ''cm4gMTtsZXQgdT1vLmdldChsKTtpZih1KXJldHVybiB1O2NvbnN0IGc9bC5wYXJlbnROb2RlO3JldHVybiB1PXQuaGFzKGcpP2c6aS5oYXMoZyk/MTphKGcpLG8uc2V0KGwsdSksdX1yZXR1cm4gZS5mb3JFYWNoKGw9Pntjb25zdCB1PWEobCk7MSE9PXUmJnQuZ2V0KHUpLnB1c2gobCl9KSx0''@;'; put 'put ''fWZ1bmN0aW9uIG9tKG4sZSl7bi5jbGFzc0xpc3Q/LmFkZChlKX1mdW5jdGlvbiBMTShuLGUpe24uY2xhc3NMaXN0Py5yZW1vdmUoZSl9ZnVuY3Rpb24gaFN0KG4sZSx0KXtQdih0KS5vbkRvbmUoKCk9Pm4ucHJvY2Vzc0xlYXZlTm9kZShlKSl9ZnVuY3Rpb24gJFRlKG4sZSl7Zm9yKGxldCB0''@;'; put 'put ''PTA7dDxuLmxlbmd0aDt0Kyspe2NvbnN0IHI9blt0XTtyIGluc3RhbmNlb2YgQlNlPyRUZShyLnBsYXllcnMsZSk6ZS5wdXNoKHIpfX1mdW5jdGlvbiBxVGUobixlLHQpe2NvbnN0IHI9dC5nZXQobik7aWYoIXIpcmV0dXJuITE7bGV0IGk9ZS5nZXQobik7cmV0dXJuIGk/ci5mb3JFYWNoKG89''@;'; put 'put ''PmkuYWRkKG8pKTplLnNldChuLHIpLHQuZGVsZXRlKG4pLCEwfWNsYXNzIEpEe19kcml2ZXI7X25vcm1hbGl6ZXI7X3RyYW5zaXRpb25FbmdpbmU7X3RpbWVsaW5lRW5naW5lO190cmlnZ2VyQ2FjaGU9e307b25SZW1vdmFsQ29tcGxldGU9KGUsdCk9Pnt9O2NvbnN0cnVjdG9yKGUsdCxyKXt0''@;'; put 'put ''aGlzLl9kcml2ZXI9dCx0aGlzLl9ub3JtYWxpemVyPXIsdGhpcy5fdHJhbnNpdGlvbkVuZ2luZT1uZXcgbFN0KGUuYm9keSx0LHIpLHRoaXMuX3RpbWVsaW5lRW5naW5lPW5ldyBlU3QoZS5ib2R5LHQsciksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT0oaSxvKT0+''@;'; put 'put ''dGhpcy5vblJlbW92YWxDb21wbGV0ZShpLG8pfXJlZ2lzdGVyVHJpZ2dlcihlLHQscixpLG8pe2NvbnN0IGE9ZSsiLSIraTtsZXQgbD10aGlzLl90cmlnZ2VyQ2FjaGVbYV07aWYoIWwpe2NvbnN0IHU9W10sRT1xYWUodGhpcy5fZHJpdmVyLG8sdSxbXSk7aWYodS5sZW5ndGgpdGhyb3cgZnVu''@;'; put 'put ''Y3Rpb24gUXd0KCl7cmV0dXJuIG5ldyBXbigzNDA0LCExKX0oKTtsPWZ1bmN0aW9uIEtDdChuLGUsdCl7cmV0dXJuIG5ldyBYQ3QobixlLHQpfShpLEUsdGhpcy5fbm9ybWFsaXplciksdGhpcy5fdHJpZ2dlckNhY2hlW2FdPWx9dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3RlclRyaWdn''@;'; put 'put ''ZXIodCxpLGwpfXJlZ2lzdGVyKGUsdCl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3RlcihlLHQpfWRlc3Ryb3koZSx0KXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmRlc3Ryb3koZSx0KX1vbkluc2VydChlLHQscixpKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmluc2VydE5vZGUoZSx0''@;'; put 'put ''LHIsaSl9b25SZW1vdmUoZSx0LHIpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVtb3ZlTm9kZShlLHQscil9ZGlzYWJsZUFuaW1hdGlvbnMoZSx0KXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLm1hcmtFbGVtZW50QXNEaXNhYmxlZChlLHQpfXByb2Nlc3MoZSx0LHIsaSl7aWYoIkAiPT1yLmNo''@;'; put 'put ''YXJBdCgwKSl7Y29uc3RbbyxhXT1NVGUocik7dGhpcy5fdGltZWxpbmVFbmdpbmUuY29tbWFuZChvLHQsYSxpKX1lbHNlIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUudHJpZ2dlcihlLHQscixpKX1saXN0ZW4oZSx0LHIsaSxvKXtpZigiQCI9PXIuY2hhckF0KDApKXtjb25zdFthLGxdPU1UZShy''@;'; put 'put ''KTtyZXR1cm4gdGhpcy5fdGltZWxpbmVFbmdpbmUubGlzdGVuKGEsdCxsLG8pfXJldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLmxpc3RlbihlLHQscixpLG8pfWZsdXNoKGU9LTEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZmx1c2goZSl9Z2V0IHBsYXllcnMoKXtyZXR1cm5bLi4udGhp''@;'; put 'put ''cy5fdHJhbnNpdGlvbkVuZ2luZS5wbGF5ZXJzLC4uLnRoaXMuX3RpbWVsaW5lRW5naW5lLnBsYXllcnNdfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX1hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoZSl7dGhpcy5f''@;'; put 'put ''dHJhbnNpdGlvbkVuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoZSl9fWxldCBtU3Q9KCgpPT57Y2xhc3MgbntfZWxlbWVudDtfc3RhcnRTdHlsZXM7X2VuZFN0eWxlcztzdGF0aWMgaW5pdGlhbFN0eWxlc0J5RWxlbWVudD1uZXcgV2Vha01hcDtfc3RhdGU9MDtfaW5pdGlhbFN0eWxl''@;'; put 'put ''cztjb25zdHJ1Y3Rvcih0LHIsaSl7dGhpcy5fZWxlbWVudD10LHRoaXMuX3N0YXJ0U3R5bGVzPXIsdGhpcy5fZW5kU3R5bGVzPWk7bGV0IG89bi5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmdldCh0KTtvfHxuLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuc2V0KHQsbz1uZXcgTWFwKSx0aGlzLl9p''@;'; put 'put ''bml0aWFsU3R5bGVzPW99c3RhcnQoKXt0aGlzLl9zdGF0ZTwxJiYodGhpcy5fc3RhcnRTdHlsZXMmJiQ1KHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3RhdGU9MSl9ZmluaXNoKCl7dGhpcy5zdGFydCgpLHRoaXMuX3N0YXRlPDIm''@;'; put 'put ''JigkNSh0aGlzLl9lbGVtZW50LHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcyYmKCQ1KHRoaXMuX2VsZW1lbnQsdGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdGhpcy5fc3RhdGU9MSl9ZGVzdHJveSgpe3RoaXMuZmluaXNoKCksdGhpcy5fc3RhdGU8''@;'; put 'put ''MyYmKG4uaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5kZWxldGUodGhpcy5fZWxlbWVudCksdGhpcy5fc3RhcnRTdHlsZXMmJihvdyh0aGlzLl9lbGVtZW50LHRoaXMuX3N0YXJ0U3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdGhpcy5fZW5kU3R5bGVzJiYob3codGhpcy5fZWxlbWVudCx0''@;'; put 'put ''aGlzLl9lbmRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSwkNSh0aGlzLl9lbGVtZW50LHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTMpfX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gb3NlKG4pe2xldCBlPW51bGw7cmV0dXJuIG4uZm9yRWFjaCgodCxyKT0+eyhmdW5jdGlv''@;'; put 'put ''biB2U3Qobil7cmV0dXJuImRpc3BsYXkiPT09bnx8InBvc2l0aW9uIj09PW59KShyKSYmKGU9ZXx8bmV3IE1hcCxlLnNldChyLHQpKX0pLGV9Y2xhc3MgS1Rle2VsZW1lbnQ7a2V5ZnJhbWVzO29wdGlvbnM7X3NwZWNpYWxTdHlsZXM7X29uRG9uZUZucz1bXTtfb25TdGFydEZucz1bXTtfb25E''@;'; put 'put ''ZXN0cm95Rm5zPVtdO19kdXJhdGlvbjtfZGVsYXk7X2luaXRpYWxpemVkPSExO19maW5pc2hlZD0hMTtfc3RhcnRlZD0hMTtfZGVzdHJveWVkPSExO19maW5hbEtleWZyYW1lO19vcmlnaW5hbE9uRG9uZUZucz1bXTtfb3JpZ2luYWxPblN0YXJ0Rm5zPVtdO2RvbVBsYXllcj1udWxsO3RpbWU9''@;'; put 'put ''MDtwYXJlbnRQbGF5ZXI9bnVsbDtjdXJyZW50U25hcHNob3Q9bmV3IE1hcDtjb25zdHJ1Y3RvcihlLHQscixpKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLmtleWZyYW1lcz10LHRoaXMub3B0aW9ucz1yLHRoaXMuX3NwZWNpYWxTdHlsZXM9aSx0aGlzLl9kdXJhdGlvbj1yLmR1cmF0aW9uLHRoaXMu''@;'; put 'put ''X2RlbGF5PXIuZGVsYXl8fDAsdGhpcy50aW1lPXRoaXMuX2R1cmF0aW9uK3RoaXMuX2RlbGF5fV9vbkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2goZT0+ZSgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWluaXQoKXt0aGlz''@;'; put 'put ''Ll9idWlsZFBsYXllcigpJiZ0aGlzLl9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQoKX1fYnVpbGRQbGF5ZXIoKXtpZih0aGlzLl9pbml0aWFsaXplZClyZXR1cm4gdGhpcy5kb21QbGF5ZXI7dGhpcy5faW5pdGlhbGl6ZWQ9ITA7Y29uc3QgZT10aGlzLmtleWZyYW1lcyx0PXRoaXMuX3RyaWdn''@;'; put 'put ''ZXJXZWJBbmltYXRpb24odGhpcy5lbGVtZW50LGUsdGhpcy5vcHRpb25zKTtpZighdClyZXR1cm4gdGhpcy5fb25GaW5pc2goKSxudWxsO3RoaXMuZG9tUGxheWVyPXQsdGhpcy5fZmluYWxLZXlmcmFtZT1lLmxlbmd0aD9lW2UubGVuZ3RoLTFdOm5ldyBNYXA7Y29uc3Qgcj0oKT0+dGhpcy5f''@;'; put 'put ''b25GaW5pc2goKTtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKCJmaW5pc2giLHIpLHRoaXMub25EZXN0cm95KCgpPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKCJmaW5pc2giLHIpfSksdH1fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl7dGhpcy5fZGVsYXk/dGhpcy5fcmVzZXREb21QbGF5''@;'; put 'put ''ZXJTdGF0ZSgpOnRoaXMuZG9tUGxheWVyPy5wYXVzZSgpfV9jb252ZXJ0S2V5ZnJhbWVzVG9PYmplY3QoZSl7Y29uc3QgdD1bXTtyZXR1cm4gZS5mb3JFYWNoKHI9Pnt0LnB1c2goT2JqZWN0LmZyb21FbnRyaWVzKHIpKX0pLHR9X3RyaWdnZXJXZWJBbmltYXRpb24oZSx0LHIpe2NvbnN0IGk9''@;'; put 'put ''dGhpcy5fY29udmVydEtleWZyYW1lc1RvT2JqZWN0KHQpO3RyeXtyZXR1cm4gZS5hbmltYXRlKGkscil9Y2F0Y2h7cmV0dXJuIG51bGx9fW9uU3RhcnQoZSl7dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLnB1c2goZSksdGhpcy5fb25TdGFydEZucy5wdXNoKGUpfW9uRG9uZShlKXt0aGlzLl9v''@;'; put 'put ''cmlnaW5hbE9uRG9uZUZucy5wdXNoKGUpLHRoaXMuX29uRG9uZUZucy5wdXNoKGUpfW9uRGVzdHJveShlKXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaChlKX1wbGF5KCl7Y29uc3QgZT10aGlzLl9idWlsZFBsYXllcigpO2UmJih0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnRGbnMu''@;'; put 'put ''Zm9yRWFjaCh0PT50KCkpLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLnN0YXJ0KCkpLGUucGxheSgpKX1wYXVzZSgpe3RoaXMuaW5pdCgpLHRoaXMuZG9tUGxheWVyPy5wYXVzZSgpfWZpbmlzaCgp''@;'; put 'put ''e3RoaXMuaW5pdCgpLHRoaXMuZG9tUGxheWVyJiYodGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5maW5pc2goKSx0aGlzLl9vbkZpbmlzaCgpLHRoaXMuZG9tUGxheWVyLmZpbmlzaCgpKX1yZXNldCgpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9k''@;'; put 'put ''ZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9X3Jlc2V0RG9tUGxheWVyU3RhdGUoKXt0aGlzLmRvbVBsYXll''@;'; put 'put ''cj8uY2FuY2VsKCl9cmVzdGFydCgpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fb25G''@;'; put 'put ''aW5pc2goKSx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmRlc3Ryb3koKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChlPT5lKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9c2V0UG9zaXRpb24oZSl7dGhpcy5kb21QbGF5ZXJ8fHRoaXMuaW5pdCgpLHRoaXMu''@;'; put 'put ''ZG9tUGxheWVyJiYodGhpcy5kb21QbGF5ZXIuY3VycmVudFRpbWU9ZSp0aGlzLnRpbWUpfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuZG9tUGxheWVyPysodGhpcy5kb21QbGF5ZXIuY3VycmVudFRpbWU/PzApL3RoaXMudGltZTp0aGlzLl9pbml0aWFsaXplZD8xOjB9Z2V0IHRvdGFsVGlt''@;'; put 'put ''ZSgpe3JldHVybiB0aGlzLl9kZWxheSt0aGlzLl9kdXJhdGlvbn1iZWZvcmVEZXN0cm95KCl7Y29uc3QgZT1uZXcgTWFwO3RoaXMuaGFzU3RhcnRlZCgpJiZ0aGlzLl9maW5hbEtleWZyYW1lLmZvckVhY2goKHIsaSk9Pnsib2Zmc2V0IiE9PWkmJmUuc2V0KGksdGhpcy5fZmluaXNoZWQ/cjpX''@;'; put 'put ''YWUodGhpcy5lbGVtZW50LGkpKX0pLHRoaXMuY3VycmVudFNuYXBzaG90PWV9dHJpZ2dlckNhbGxiYWNrKGUpe2NvbnN0IHQ9InN0YXJ0Ij09PWU/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7dC5mb3JFYWNoKHI9PnIoKSksdC5sZW5ndGg9MH19Y2xhc3MgWFRle3ZhbGlkYXRl''@;'; put 'put ''U3R5bGVQcm9wZXJ0eShlKXtyZXR1cm4hMH12YWxpZGF0ZUFuaW1hdGFibGVTdHlsZVByb3BlcnR5KGUpe3JldHVybiEwfWNvbnRhaW5zRWxlbWVudChlLHQpe3JldHVybiB4VGUoZSx0KX1nZXRQYXJlbnRFbGVtZW50KGUpe3JldHVybiBIYWUoZSl9cXVlcnkoZSx0LHIpe3JldHVybiBBVGUo''@;'; put 'put ''ZSx0LHIpfWNvbXB1dGVTdHlsZShlLHQscil7cmV0dXJuIFdhZShlLHQpfWFuaW1hdGUoZSx0LHIsaSxvLGE9W10pe2NvbnN0IHU9e2R1cmF0aW9uOnIsZGVsYXk6aSxmaWxsOjA9PWk/ImJvdGgiOiJmb3J3YXJkcyJ9O28mJih1LmVhc2luZz1vKTtjb25zdCBnPW5ldyBNYXAsRT1hLmZpbHRl''@;'; put 'put ''cihlZT0+ZWUgaW5zdGFuY2VvZiBLVGUpOyhmdW5jdGlvbiBDQ3QobixlKXtyZXR1cm4gMD09PW58fDA9PT1lfSkocixpKSYmRS5mb3JFYWNoKGVlPT57ZWUuY3VycmVudFNuYXBzaG90LmZvckVhY2goKHZlLE1lKT0+Zy5zZXQoTWUsdmUpKX0pO2xldCBPPWZ1bmN0aW9uIHlDdChuKXtyZXR1''@;'; put 'put ''cm4gbi5sZW5ndGg/blswXWluc3RhbmNlb2YgTWFwP246bi5tYXAoZT0+bmV3IE1hcChPYmplY3QuZW50cmllcyhlKSkpOltdfSh0KS5tYXAoZWU9Pm5ldyBNYXAoZWUpKTtPPWZ1bmN0aW9uIFNDdChuLGUsdCl7aWYodC5zaXplJiZlLmxlbmd0aCl7bGV0IHI9ZVswXSxpPVtdO2lmKHQuZm9y''@;'; put 'put ''RWFjaCgobyxhKT0+e3IuaGFzKGEpfHxpLnB1c2goYSksci5zZXQoYSxvKX0pLGkubGVuZ3RoKWZvcihsZXQgbz0xO288ZS5sZW5ndGg7bysrKXtsZXQgYT1lW29dO2kuZm9yRWFjaChsPT5hLnNldChsLFdhZShuLGwpKSl9fXJldHVybiBlfShlLE8sZyk7Y29uc3QgWj1mdW5jdGlvbiBnU3Qo''@;'; put 'put ''bixlKXtsZXQgdD1udWxsLHI9bnVsbDtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg/KHQ9b3NlKGVbMF0pLGUubGVuZ3RoPjEmJihyPW9zZShlW2UubGVuZ3RoLTFdKSkpOmUgaW5zdGFuY2VvZiBNYXAmJih0PW9zZShlKSksdHx8cj9uZXcgbVN0KG4sdCxyKTpudWxsfShlLE8p''@;'; put 'put ''O3JldHVybiBuZXcgS1RlKGUsTyx1LFopfX1jb25zdCBRVGU9IkAuZGlzYWJsZWQiO2NsYXNzIEpUZXtuYW1lc3BhY2VJZDtkZWxlZ2F0ZTtlbmdpbmU7X29uRGVzdHJveTtcdTAyNzV0eXBlPTA7Y29uc3RydWN0b3IoZSx0LHIsaSl7dGhpcy5uYW1lc3BhY2VJZD1lLHRoaXMuZGVsZWdhdGU9''@;'; put 'put ''dCx0aGlzLmVuZ2luZT1yLHRoaXMuX29uRGVzdHJveT1pfWdldCBkYXRhKCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuZGF0YX1kZXN0cm95Tm9kZShlKXt0aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlPy4oZSl9ZGVzdHJveSgpe3RoaXMuZW5naW5lLmRlc3Ryb3kodGhpcy5uYW1lc3BhY2VJZCx0''@;'; put 'put ''aGlzLmRlbGVnYXRlKSx0aGlzLmVuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9PntxdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMuZGVsZWdhdGUuZGVzdHJveSgpfSl9KSx0aGlzLl9vbkRlc3Ryb3k/LigpfWNyZWF0ZUVsZW1lbnQoZSx0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5j''@;'; put 'put ''cmVhdGVFbGVtZW50KGUsdCl9Y3JlYXRlQ29tbWVudChlKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KGUpfWNyZWF0ZVRleHQoZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dChlKX1hcHBlbmRDaGlsZChlLHQpe3RoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQo''@;'; put 'put ''ZSx0KSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLHQsZSwhMSl9aW5zZXJ0QmVmb3JlKGUsdCxyLGk9ITApe3RoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKGUsdCxyKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLHQsZSxpKX1yZW1vdmVDaGls''@;'; put 'put ''ZChlLHQscixpKXtpP3RoaXMuZGVsZWdhdGUucmVtb3ZlQ2hpbGQoZSx0LHIsaSk6dGhpcy5wYXJlbnROb2RlKHQpJiZ0aGlzLmVuZ2luZS5vblJlbW92ZSh0aGlzLm5hbWVzcGFjZUlkLHQsdGhpcy5kZWxlZ2F0ZSl9c2VsZWN0Um9vdEVsZW1lbnQoZSx0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0''@;'; put 'put ''ZS5zZWxlY3RSb290RWxlbWVudChlLHQpfXBhcmVudE5vZGUoZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZShlKX1uZXh0U2libGluZyhlKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZyhlKX1zZXRBdHRyaWJ1dGUoZSx0LHIsaSl7dGhpcy5kZWxlZ2F0ZS5zZXRB''@;'; put 'put ''dHRyaWJ1dGUoZSx0LHIsaSl9cmVtb3ZlQXR0cmlidXRlKGUsdCxyKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZShlLHQscil9YWRkQ2xhc3MoZSx0KXt0aGlzLmRlbGVnYXRlLmFkZENsYXNzKGUsdCl9cmVtb3ZlQ2xhc3MoZSx0KXt0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKGUs''@;'; put 'put ''dCl9c2V0U3R5bGUoZSx0LHIsaSl7dGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZShlLHQscixpKX1yZW1vdmVTdHlsZShlLHQscil7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZShlLHQscil9c2V0UHJvcGVydHkoZSx0LHIpeyJAIj09dC5jaGFyQXQoMCkmJnQ9PVFUZT90aGlzLmRpc2FibGVBbmlt''@;'; put 'put ''YXRpb25zKGUsISFyKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KGUsdCxyKX1zZXRWYWx1ZShlLHQpe3RoaXMuZGVsZWdhdGUuc2V0VmFsdWUoZSx0KX1saXN0ZW4oZSx0LHIsaSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGUsdCxyLGkpfWRpc2FibGVBbmltYXRpb25zKGUsdCl7''@;'; put 'put ''dGhpcy5lbmdpbmUuZGlzYWJsZUFuaW1hdGlvbnMoZSx0KX19Y2xhc3MgX1N0IGV4dGVuZHMgSlRle2ZhY3Rvcnk7Y29uc3RydWN0b3IoZSx0LHIsaSxvKXtzdXBlcih0LHIsaSxvKSx0aGlzLmZhY3Rvcnk9ZSx0aGlzLm5hbWVzcGFjZUlkPXR9c2V0UHJvcGVydHkoZSx0LHIpeyJAIj09dC5j''@;'; put 'put ''aGFyQXQoMCk/Ii4iPT10LmNoYXJBdCgxKSYmdD09UVRlP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnMoZSxyPXZvaWQgMD09PXJ8fCEhcik6dGhpcy5lbmdpbmUucHJvY2Vzcyh0aGlzLm5hbWVzcGFjZUlkLGUsdC5zbGljZSgxKSxyKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KGUsdCxyKX1s''@;'; put 'put ''aXN0ZW4oZSx0LHIsaSl7aWYoIkAiPT10LmNoYXJBdCgwKSl7Y29uc3Qgbz1mdW5jdGlvbiB5U3Qobil7c3dpdGNoKG4pe2Nhc2UiYm9keSI6cmV0dXJuIGRvY3VtZW50LmJvZHk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGRvY3VtZW50O2Nhc2Uid2luZG93IjpyZXR1cm4gd2luZG93O2RlZmF1''@;'; put 'put ''bHQ6cmV0dXJuIG59fShlKTtsZXQgYT10LnNsaWNlKDEpLGw9IiI7cmV0dXJuIkAiIT1hLmNoYXJBdCgwKSYmKFthLGxdPWZ1bmN0aW9uIGJTdChuKXtjb25zdCBlPW4uaW5kZXhPZigiLiIpO3JldHVybltuLnN1YnN0cmluZygwLGUpLG4uc2xpY2UoZSsxKV19KGEpKSx0aGlzLmVuZ2luZS5s''@;'; put 'put ''aXN0ZW4odGhpcy5uYW1lc3BhY2VJZCxvLGEsbCx1PT57dGhpcy5mYWN0b3J5LnNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayh1Ll9kYXRhfHwtMSxyLHUpfSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGUsdCxyLGkpfX1jbGFzcyB3U3R7ZGVsZWdhdGU7ZW5naW5lO196b25lO19jdXJy''@;'; put 'put ''ZW50SWQ9MDtfbWljcm90YXNrSWQ9MTtfYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdO19yZW5kZXJlckNhY2hlPW5ldyBNYXA7X2NkUmVjdXJEZXB0aD0wO2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLmRlbGVnYXRlPWUsdGhpcy5lbmdpbmU9dCx0aGlzLl96b25lPXIsdC5vblJlbW92YWxD''@;'; put 'put ''b21wbGV0ZT0oaSxvKT0+e28/LnJlbW92ZUNoaWxkKG51bGwsaSl9fWNyZWF0ZVJlbmRlcmVyKGUsdCl7Y29uc3QgaT10aGlzLmRlbGVnYXRlLmNyZWF0ZVJlbmRlcmVyKGUsdCk7aWYoIWV8fCF0Py5kYXRhPy5hbmltYXRpb24pe2NvbnN0IGc9dGhpcy5fcmVuZGVyZXJDYWNoZTtsZXQgRT1n''@;'; put 'put ''LmdldChpKTtyZXR1cm4gRXx8KEU9bmV3IEpUZSgiIixpLHRoaXMuZW5naW5lLCgpPT5nLmRlbGV0ZShpKSksZy5zZXQoaSxFKSksRX1jb25zdCBvPXQuaWQsYT10LmlkKyItIit0aGlzLl9jdXJyZW50SWQ7dGhpcy5fY3VycmVudElkKyssdGhpcy5lbmdpbmUucmVnaXN0ZXIoYSxlKTtjb25z''@;'; put 'put ''dCBsPWc9PntBcnJheS5pc0FycmF5KGcpP2cuZm9yRWFjaChsKTp0aGlzLmVuZ2luZS5yZWdpc3RlclRyaWdnZXIobyxhLGUsZy5uYW1lLGcpfTtyZXR1cm4gdC5kYXRhLmFuaW1hdGlvbi5mb3JFYWNoKGwpLG5ldyBfU3QodGhpcyxhLGksdGhpcy5lbmdpbmUpfWJlZ2luKCl7dGhpcy5fY2RS''@;'; put 'put ''ZWN1ckRlcHRoKyssdGhpcy5kZWxlZ2F0ZS5iZWdpbiYmdGhpcy5kZWxlZ2F0ZS5iZWdpbigpfV9zY2hlZHVsZUNvdW50VGFzaygpe3F1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5fbWljcm90YXNrSWQrK30pfXNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhlLHQscil7aWYoZT49MCYmZTx0aGlz''@;'; put 'put ''Ll9taWNyb3Rhc2tJZClyZXR1cm4gdm9pZCB0aGlzLl96b25lLnJ1bigoKT0+dChyKSk7Y29uc3QgaT10aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI7MD09aS5sZW5ndGgmJnF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5fem9uZS5ydW4oKCk9PntpLmZvckVhY2gobz0+e2NvbnN0W2Es''@;'; put 'put ''bF09bzthKGwpfSksdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdfSl9KSxpLnB1c2goW3Qscl0pfWVuZCgpe3RoaXMuX2NkUmVjdXJEZXB0aC0tLDA9PXRoaXMuX2NkUmVjdXJEZXB0aCYmdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3NjaGVkdWxlQ291''@;'; put 'put ''bnRUYXNrKCksdGhpcy5lbmdpbmUuZmx1c2godGhpcy5fbWljcm90YXNrSWQpfSksdGhpcy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gdGhpcy5lbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX1jb21wb25lbnRSZXBsYWNlZChl''@;'; put 'put ''KXt0aGlzLmVuZ2luZS5mbHVzaCgpLHRoaXMuZGVsZWdhdGUuY29tcG9uZW50UmVwbGFjZWQ/LihlKX19bGV0IFNTdD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSkR7Y29uc3RydWN0b3IodCxyLGkpe3N1cGVyKHQscixpKX1uZ09uRGVzdHJveSgpe3RoaXMuZmx1c2goKX1zdGF0aWMgXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikob3IoVGwpLG9yKFphZSksb3IoR2FlKSl9O3N0YXRpYyBcdTAyNzVwcm92PUpuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KX1yZXR1cm4gbn0pKCk7Y29uc3QgZXhlPVt7cHJvdmlkZTpHYWUsdXNlRmFjdG9yeTpmdW5jdGlv''@;'; put 'put ''biBFU3QoKXtyZXR1cm4gbmV3IE9UZX19LHtwcm92aWRlOkpELHVzZUNsYXNzOlNTdH0se3Byb3ZpZGU6Z2MsdXNlRmFjdG9yeTpmdW5jdGlvbiBNU3QobixlLHQpe3JldHVybiBuZXcgd1N0KG4sZSx0KX0sZGVwczpbb3JlLEpELGdhXX1dLHR4ZT1be3Byb3ZpZGU6WmFlLHVzZUNsYXNzOllh''@;'; put 'put ''ZX0se3Byb3ZpZGU6bFYsdXNlVmFsdWU6Ik5vb3BBbmltYXRpb25zIn0sLi4uZXhlXSxhc2U9W3twcm92aWRlOlphZSx1c2VGYWN0b3J5OigpPT5uZXcgWFRlfSx7cHJvdmlkZTpsVix1c2VGYWN0b3J5OigpPT4iQnJvd3NlckFuaW1hdGlvbnMifSwuLi5leGVdO2xldCBUU3Q9KCgpPT57Y2xh''@;'; put 'put ''c3MgbntzdGF0aWMgd2l0aENvbmZpZyh0KXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6dC5kaXNhYmxlQW5pbWF0aW9ucz90eGU6YXNlfX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVtb2Q9R2koe3R5cGU6bn0pO3N0YXRp''@;'; put 'put ''YyBcdTAyNzVpbmo9bWkoe3Byb3ZpZGVyczphc2UsaW1wb3J0czpbTV9lXX0pfXJldHVybiBufSkoKSx4U3Q9KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhp''@;'; put 'put ''fHxlKX0sdGhpcy5cdTAyNzVjbXA9UHIoe3R5cGU6ZSxzZWxlY3RvcnM6W1siYXBwLW5vdC1mb3VuZCJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXV0sdGVtcGxhdGU6ZnVu''@;'; put 'put ''Y3Rpb24oaSxvKXsxJmkmJihKKDAsImRpdiIsMCkoMSwicCIpLFNlKDIsIjQwNCAtIE5vdCBGb3VuZCIpLHRlKCkoKSl9LGVuY2Fwc3VsYXRpb246Mn0pKX1yZXR1cm4gbigpLGV9KSgpLG54ZT0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKCl7fWRvd25sb2FkRmlsZShyLGksbz0i''@;'; put 'put ''dHh0Iil7bGV0IGE9bmV3IEJsb2IoW3JdLHt0eXBlOiJ0ZXh0L3BsYWluIn0pO2lmKG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKGEsYCR7aX0uJHtvfWApO2Vsc2V7bGV0IGw9ZG9jdW1lbnQuY3Jl''@;'; put 'put ''YXRlRWxlbWVudCgiYSIpO2wuaHJlZj0iZGF0YTp0ZXh0L3BsYWluLCIrZW5jb2RlVVJJQ29tcG9uZW50KHIpLGwuZG93bmxvYWQ9YCR7aX0uJHtvfWAsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsKSxsLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsKX19cmVhZEZpbGUo''@;'; put 'put ''cil7cmV0dXJuIG5ldyBQcm9taXNlKChpLG8pPT57bGV0IGE9bmV3IEZpbGVSZWFkZXI7YS5vbmxvYWQ9KCk9PnthLnJlc3VsdCYmaShKU09OLnBhcnNlKGEucmVzdWx0LnRvU3RyaW5nKCkpKX0sYS5yZWFkQXNUZXh0KHIpfSl9Y2xlYXJVcGxvYWRJbnB1dChyKXtyLnRhcmdldC52YWx1ZT0i''@;'; put 'put ''In1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKX0sdGhpcy5cdTAyNzVwcm92PUpuKHt0b2tlbjplLGZhY3Rvcnk6ZS5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSl9cmV0dXJuIG4oKSxlfSkoKTt2YXIgeTQ9aCg1OTQ4KTtj''@;'; put 'put ''b25zdCBzc2U9ZnVuY3Rpb24ga1N0KG4pe3JldHVybiJzeW1ib2wiPT10eXBlb2Ygbnx8S0UobikmJiJbb2JqZWN0IFN5bWJvbF0iPT1aRShuKX07dmFyIFJTdD0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxJU3Q9L15cdyokLztmdW5jdGlvbiBs''@;'; put 'put ''c2UobixlKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbnx8bnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBmdW5jdGlvbiIpO3ZhciB0PWZ1bmN0aW9uKCl7dmFyIHI9YXJndW1lbnRzLGk9ZT9lLmFwcGx5KHRoaXMscik6clswXSxv''@;'; put 'put ''PXQuY2FjaGU7aWYoby5oYXMoaSkpcmV0dXJuIG8uZ2V0KGkpO3ZhciBhPW4uYXBwbHkodGhpcyxyKTtyZXR1cm4gdC5jYWNoZT1vLnNldChpLGEpfHxvLGF9O3JldHVybiB0LmNhY2hlPW5ldyhsc2UuQ2FjaGV8fE1pZSksdH1sc2UuQ2FjaGU9TWllO2NvbnN0IE5TdD1sc2U7dmFyIFZTdD0v''@;'; put 'put ''W14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxCU3Q9L1xcKFxcKT8vZyxqU3Q9ZnVuY3Rpb24gUFN0KG4pe3ZhciBlPU5TdChuLGZ1bmN0aW9uKHIpe3JldHVybiA1''@;'; put 'put ''MDA9PT10LnNpemUmJnQuY2xlYXIoKSxyfSksdD1lLmNhY2hlO3JldHVybiBlfShmdW5jdGlvbihuKXt2YXIgZT1bXTtyZXR1cm4gNDY9PT1uLmNoYXJDb2RlQXQoMCkmJmUucHVzaCgiIiksbi5yZXBsYWNlKFZTdCxmdW5jdGlvbih0LHIsaSxvKXtlLnB1c2goaT9vLnJlcGxhY2UoQlN0LCIk''@;'; put 'put ''MSIpOnJ8fHQpfSksZX0pO2NvbnN0IFVTdD1qU3Q7dmFyIHJ4ZT1ndj9ndi5wcm90b3R5cGU6dm9pZCAwLGl4ZT1yeGU/cnhlLnRvU3RyaW5nOnZvaWQgMDtjb25zdCBaU3Q9ZnVuY3Rpb24gb3hlKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbjtpZihYRShuKSlyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24gelN0KG4sZSl7Zm9yKHZhciB0PS0xLHI9bnVsbD09bj8wOm4ubGVuZ3RoLGk9QXJyYXkocik7Kyt0PHI7KWlbdF09ZShuW3RdLHQsbik7cmV0dXJuIGl9KG4sb3hlKSsiIjtpZihzc2UobikpcmV0dXJuIGl4ZT9peGUuY2FsbChuKToiIjt2YXIgZT1uKyIiO3JldHVybiIwIj09ZSYm''@;'; put 'put ''MS9uPT0tMS8wPyItMCI6ZX0sS1N0PWZ1bmN0aW9uIHFTdChuLGUpe3JldHVybiBYRShuKT9uOmZ1bmN0aW9uIERTdChuLGUpe2lmKFhFKG4pKXJldHVybiExO3ZhciB0PXR5cGVvZiBuO3JldHVybiEoIm51bWJlciIhPXQmJiJzeW1ib2wiIT10JiYiYm9vbGVhbiIhPXQmJm51bGwhPW4mJiFz''@;'; put 'put ''c2UobikpfHxJU3QudGVzdChuKXx8IVJTdC50ZXN0KG4pfHxudWxsIT1lJiZuIGluIE9iamVjdChlKX0obixlKT9bbl06VVN0KGZ1bmN0aW9uIEdTdChuKXtyZXR1cm4gbnVsbD09bj8iIjpaU3Qobil9KG4pKX0sSlN0PWZ1bmN0aW9uIFFTdChuKXtpZigic3RyaW5nIj09dHlwZW9mIG58fHNz''@;'; put 'put ''ZShuKSlyZXR1cm4gbjt2YXIgZT1uKyIiO3JldHVybiIwIj09ZSYmMS9uPT0tMS8wPyItMCI6ZX0sJGM9ZnVuY3Rpb24gbkV0KG4sZSx0KXt2YXIgcj1udWxsPT1uP3ZvaWQgMDpmdW5jdGlvbiBlRXQobixlKXtmb3IodmFyIHQ9MCxyPShlPUtTdChlLG4pKS5sZW5ndGg7bnVsbCE9biYmdDxy''@;'; put 'put ''OyluPW5bSlN0KGVbdCsrXSldO3JldHVybiB0JiZ0PT1yP246dm9pZCAwfShuLGUpO3JldHVybiB2b2lkIDA9PT1yP3Q6cn07bGV0IEJwPSgoKT0+e3ZhciBuO2NsYXNzIGV7Y29uc3RydWN0b3IocixpLG8pe3RoaXMuc2FzU2VydmljZT1yLHRoaXMuaGVscGVyU2VydmljZT1pLHRoaXMubG9n''@;'; put 'put ''Z2VyU2VydmljZT1vLHRoaXMucmVzcG9uc2U9bmV3IE1yLHRoaXMuY2hhbmdlZFRhYmxlPW5ldyBNcix0aGlzLmRldGFpbHM9bmV3IE1yLHRoaXMuZGlmZnM9bmV3IE1yLHRoaXMuY29sdW1ucz1uZXcgTXIsdGhpcy52YWx1ZXM9bmV3IE1yLHRoaXMuZmlsdGVyPW5ldyBNcix0aGlzLnF1ZXJ5''@;'; put 'put ''PW5ldyBNcix0aGlzLnN1Ym1pdHREZXRhaWw9bmV3IE1yLHRoaXMucmVtb3ZlUXVlcnk9bmV3IE1yLHRoaXMuc2V0U3VibWl0PW5ldyBNcix0aGlzLnNldFN1Ym1pdExpc3Q9bmV3IE1yLHRoaXMuc3VibWl0c0hhbmRvZmY9bnVsbCx0aGlzLmxpYnNQcm9taXNlPW51bGx9Y2FsbFNlcnZpY2Uo''@;'; put 'put ''cixpLG8sYSl7dmFyIGw9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7Y29uc3QgdT17fTtyZXR1cm4gdVtpXT1bcl0se2RhdGE6KHlpZWxkIGwuc2FzU2VydmljZS5yZXF1ZXN0KG8sdSkpLmFkYXB0ZXJSZXNwb25zZSxsaWJkczphfX0pKCl9dXBkYXRlVGFibGUocixpLG8sYSxsLHUsZyl7''@;'; put 'put ''dmFyIEU9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7bGV0IE89e2pzZGF0YTppfTtpZihsKXtsZXQgZWU9RS5wYXJzZUZvcm1hdHMobCk7Ty4kanNkYXRhPXtmb3JtYXRzOmVlfX1yZXR1cm4gT1tvXT1bcl0seWllbGQgRS5zYXNTZXJ2aWNlLnJlcXVlc3QoYSxPLGcse3N1cHByZXNzRXJy''@;'; put 'put ''b3JBYm9ydE1vZGFsOnUsc3VwcHJlc3NTdWNjZXNzQWJvcnRNb2RhbDp1fSl9KSgpfWdldEFwcHJvdmFscyhyLGksbyl7dmFyIGE9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7bGV0IGw9e307cmV0dXJuIGxbaV09W3JdLCh5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdChvLGwpKS5hZGFw''@;'; put 'put ''dGVyUmVzcG9uc2V9KSgpfXNlbmREZXRhaWxzKHIsaSxvKXt2YXIgYT10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtsZXQgbD1PYmplY3QuYXNzaWduKHtzdWI6ITB9LHIpO2Euc3VibWl0dERldGFpbC5uZXh0KHtkYXRhOm9baV0sdmlld0RhdGE6bH0pfSkoKX1nZXRTdWJtaXR0cygpe3Zh''@;'; put 'put ''ciByPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCByLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9nZXRzdWJtaXRzIixudWxsKSkuYWRhcHRlclJlc3BvbnNlfSkoKX1oYW5kb2ZmU3VibWl0cyhyKXt0aGlzLnN1Ym1pdHNIYW5kb2ZmPXJ8fG51bGx9dGFrZVN1''@;'; put 'put ''Ym1pdHNIYW5kb2ZmKCl7Y29uc3Qgcj10aGlzLnN1Ym1pdHNIYW5kb2ZmO3JldHVybiB0aGlzLnN1Ym1pdHNIYW5kb2ZmPW51bGwscn12aWV3TGlicygpe3JldHVybiB0aGlzLmxpYnNQcm9taXNlfHwodGhpcy5saWJzUHJvbWlzZT10aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3Zp''@;'; put 'put ''ZXdsaWJzIixudWxsKS50aGVuKHI9PnIuYWRhcHRlclJlc3BvbnNlKS5jYXRjaChyPT57dGhyb3cgdGhpcy5saWJzUHJvbWlzZT1udWxsLHJ9KSksdGhpcy5saWJzUHJvbWlzZX1yZWZyZXNoTGliSW5mbyhyKXt2YXIgaT10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtjb25zdCBvPXtsaWIy''@;'; put 'put ''cmVmcmVzaDpbe2xpYnJlZjpyfV19O3JldHVybih5aWVsZCBpLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3JlZnJlc2hsaWJpbmZvIixvKSkuYWRhcHRlclJlc3BvbnNlfSkoKX12aWV3VGFibGVzKHIpe3ZhciBpPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe2xldCBvPXtTQVNDb250''@;'; put 'put ''cm9sVGFibGU6W3tNUExJQjpyfV19O3JldHVybih5aWVsZCBpLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXd0YWJsZXMiLG8pKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXZpZXdEYXRhKHIsaSl7dmFyIG89dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7bGV0IGE9e1NBU0NvbnRyb2xU''@;'; put 'put ''YWJsZTpbe0xJQkRTOnIsRklMVEVSX1JLOml9XX07cmV0dXJuKHlpZWxkIG8uc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld2RhdGEiLGEpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXZpZXdEYXRhU2VhcmNoKHIpe3ZhciBpPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKihvLGE9ITEsbCx1''@;'; put 'put ''KXtsZXQgRT17U0FTQ29udHJvbFRhYmxlOlt7U0VBUkNIVFlQRTpvLmxlbmd0aD4wP2E/Ik5VTSI6IkNIQVIiOiJOT05FIixTRUFSQ0hWQUw6byxMSUJEUzpsLEZJTFRFUl9SSzp1fV19O3JldHVybih5aWVsZCBpLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdkYXRhIixFKSkuYWRh''@;'; put 'put ''cHRlclJlc3BvbnNlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWdldFhMTWFwUnVsZXMocil7dmFyIGk9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7Y29uc3Qgbz17Z2V0eGxtYXBzX2luOlt7WExNQVBfSUQ6cn1dfTtyZXR1cm4oeWllbGQgaS5zYXNTZXJ2aWNlLnJlcXVlc3QoImVkaXRv''@;'; put 'put ''cnMvZ2V0eGxtYXBzIixvKSkuYWRhcHRlclJlc3BvbnNlfSkoKX1zaG93RGlmZnMocixpLG8pe3ZhciBhPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe2xldCBsPXt9O3JldHVybiBsW2ldPVtyXSwoeWllbGQgYS5zYXNTZXJ2aWNlLnJlcXVlc3QobyxsLHt1c2VDb21wdXRlQXBpOm51bGx9''@;'; put 'put ''KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1yZWplY3RpbmcocixpLG8pe3ZhciBhPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe2xldCBsPXt9O3JldHVybiBsW2ldPVtyXSwoeWllbGQgYS5zYXNTZXJ2aWNlLnJlcXVlc3QobyxsLHt1c2VDb21wdXRlQXBpOm51bGx9KSkuYWRhcHRlclJlc3Bv''@;'; put 'put ''bnNlfSkoKX1hcHByb3ZlVGFibGUocixpLG8pe3ZhciBhPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe2xldCBsPXt9O3JldHVybiBsW2ldPVtyXSwoeWllbGQgYS5zYXNTZXJ2aWNlLnJlcXVlc3QobyxsKSkuYWRhcHRlclJlc3BvbnNlfSkoKX1nZXRIaXN0b3J5KHIsaSxvKXt2YXIgYT10''@;'; put 'put ''aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtsZXQgbD17fTtyZXR1cm4gbFtpXT1bcl0sKHlpZWxkIGEuc2FzU2VydmljZS5yZXF1ZXN0KG8sbCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9c2V0UXVlcnlWYXJpYWJsZXMocixpKXt0aGlzLmNvbHVtbnMubmV4dCh7ZGF0YTp7Y29sczppfSxsaWJk''@;'; put 'put ''czpyfSl9Z2V0Q2hhbmdlSW5mbyhyKXt2YXIgaT10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtsZXQgYT17U0FTQ29udHJvbFRhYmxlOlt7VEFCTEU6cn1dfTtyZXR1cm4oeWllbGQgaS5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRjaGFuZ2VpbmZvIixhKSkuYWRhcHRlclJlc3Bv''@;'; put 'put ''bnNlfSkoKX1nZXRRdWVyeVZhbHVlcyhyLGksbyxhLGwpe3ZhciB1PXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe2xldCBnPXtpd2FudDpbe2xpYmRzOmksY29sOnIsLi4uYSYme1NUQVJUUk9XOmF9LC4uLmwmJntST1dTOmx9fV19O3JldHVybiBvLmxlbmd0aD4wJiYoZy5GSUxURVJRVUVS''@;'; put 'put ''WT1vKSwoeWllbGQgdS5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRjb2x2YWxzIixnKS5jYXRjaChFPT57dGhyb3cgRX0pKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXNhdmVRdWVyeShyLGkpe3ZhciBvPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe2xldCBhPXtpd2FudDpbe2ZpbHRl''@;'; put 'put ''cl90YWJsZTpyfV0sZmlsdGVycXVlcnk6aX07Y29uc3QgbD15aWVsZCBvLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZhbGlkYXRlZmlsdGVyIixhKTtyZXR1cm4gby5maWx0ZXIubmV4dChsKSxsLmFkYXB0ZXJSZXNwb25zZX0pKCl9b3BlblRhYmxlKHIpe3ZhciBpPXRoaXM7cmV0dXJu''@;'; put 'put ''IENyKGZ1bmN0aW9uKigpe2xldCBvPXtpd2FudDpbe3RhYmxlX2lkOnJ9XX07cmV0dXJuKHlpZWxkIGkuc2FzU2VydmljZS5yZXF1ZXN0KCJhdWRpdG9ycy9nZXRzdGFnZXRhYmxlIixvKSkuYWRhcHRlclJlc3BvbnNlfSkoKX1jaGVja09wZXJhdG9yKHIsaSxvKXtsZXQgYTtzd2l0Y2gocil7''@;'; put 'put ''Y2FzZSJCRVRXRUVOIjppIGluc3RhbmNlb2YgQXJyYXkmJigiIiE9PWlbMF0mJiIiIT09aVsxXT9hPWlbMF0rIiBBTkQgIitpWzFdOiIiIT09aVswXSYmIiI9PT1pWzFdPyhpWzFdPSIuIixhPWlbMF0rIiBBTkQgIitpWzFdKToiIj09PWlbMF0mJiIiIT09aVsxXT8oaVswXT0iLiIsYT1pWzBd''@;'; put 'put ''KyIgQU5EICIraVsxXSk6KGlbMF09Ii4iLGlbMV09Ii4iLGE9aVswXSsiIEFORCAiK2lbMV0pKTticmVhaztjYXNlIklOIjpjYXNlIk5PVCBJTiI6bGV0IHU9W107aWYodHlwZW9mIGk8InUiKWZvcihsZXQgZz0wO2c8aS5sZW5ndGg7ZysrKSEwPT09aVtnXS5jaGVja2VkJiYoImNoYXIiPT09''@;'; put 'put ''bz8oInN0cmluZyI9PXR5cGVvZiBpW2ddLnZhbCYmKGlbZ10udmFsPWlbZ10udmFsLnJlcGxhY2UoIiciLCInJyIpKSx1LnB1c2goIiciK2lbZ10udmFsKyInIikpOihudWxsPT09aVtnXS52YWwmJihpW2ddLnZhbD0iLiIpLHUucHVzaChpW2ddLnZhbCkpKTtpPSIoIit1KyIpIjticmVhaztj''@;'; put 'put ''YXNlIkNPTlRBSU5TIjpyPSI/IjticmVhaztjYXNlIk5PVCBFUVVBTCI6cj0ibmUifXJldHVybiJudW0iPT09byYmbnVsbD09PWkmJihpPSIuIiksIlBsZWFzZSBzZWxlY3QgdmFsdWUiPT09aSYmKGk9IiIpLC0xIT09WyI9IiwiPiIsIjwiLCI8PSIsIj49IiwibmUiXS5pbmRleE9mKHIpJiYi''@;'; put 'put ''bnVtIj09PW8mJiIiPT09aSYmKGk9Ii4iKSwiQkVUV0VFTiI9PT1yP3t2YWx1ZTphLG9wZXJhdG9yOnJ9Ont2YWx1ZTppLG9wZXJhdG9yOnJ9fXdoZXJlQ2xhdXNlQ3JlYXRvcihyLGksbyl7bGV0IGcsWixhPSIiLEU9IiIsTz1bXTtmb3IobGV0IHZlPTA7dmU8ci5xdWVyeU9iai5sZW5ndGg7''@;'; put 'put ''dmUrKyl7bGV0IE1lPSIiLEhlPXIucXVlcnlPYmpbdmVdO2ZvcihsZXQgV2U9MDtXZTxIZS5lbGVtZW50cy5sZW5ndGg7V2UrKyl7bGV0IEN0LGF0PUhlLmVsZW1lbnRzW1dlXTtnPVdlPEhlLmVsZW1lbnRzLmxlbmd0aC0xP0hlLmNsYXVzZUxvZ2ljOiIiO2ZvcihsZXQgQ249MDtDbjxhdC52''@;'; put 'put ''YWx1ZXMubGVuZ3RoO0NuKyspe2lmKCJzdHJpbmciPT10eXBlb2YgYXQudmFsdWUmJiJudW1iZXIiPT10eXBlb2YgYXQudmFsdWVzW0NuXS5mb3JtYXR0ZWQpYXQudmFsdWU9PT1KU09OLnN0cmluZ2lmeShhdC52YWx1ZXNbQ25dLmZvcm1hdHRlZCkmJihDdD1hdC52YWx1ZXNbQ25dLnVuZm9y''@;'; put 'put ''bWF0dGVkKTtlbHNle2xldCAkbj0ibnVtYmVyIiE9dHlwZW9mIGF0LnZhbHVlc1tDbl0uZm9ybWF0dGVkJiZudWxsIT09YXQudmFsdWVzW0NuXS5mb3JtYXR0ZWQ/YXQudmFsdWVzW0NuXS5mb3JtYXR0ZWQudHJpbSgpOmF0LnZhbHVlc1tDbl0uZm9ybWF0dGVkO2F0LnZhbHVlPT09JG4mJihD''@;'; put 'put ''dD1hdC52YWx1ZXNbQ25dLnVuZm9ybWF0dGVkKX0iUGxlYXNlIHNlbGVjdCB2YWx1ZSI9PT1hdC52YWx1ZSYmLTEhPT1bIj0iLCI+IiwiPCIsIjw9IiwiPj0iLCJuZSJdLmluZGV4T2YoYXQub3BlcmF0b3IpJiYoQ3Q9IiIpLCgiQ09OVEFJTlMiPT09YXQub3BlcmF0b3J8fCJMSUtFIj09PWF0''@;'; put 'put ''Lm9wZXJhdG9yfHwiQkVHSU5TX1dJVEgiPT09YXQub3BlcmF0b3IpJiYoQ3Q9YXQudmFsdWUpfWlmKEN0fHwoQ3Q9YXQudmFsdWUpLGF0LnZhbHVlIGluc3RhbmNlb2YgQXJyYXkmJiJCRVRXRUVOIj09PWF0Lm9wZXJhdG9yKXtDdD1bXSxDdC5wdXNoKGF0LnZhbHVlWzBdKSxDdC5wdXNoKGF0''@;'; put 'put ''LnZhbHVlWzFdKTtmb3IobGV0IENuPTA7Q248YXQudmFsdWVzLmxlbmd0aDtDbisrKUN0WzBdPT09YXQudmFsdWVzW0NuXS5mb3JtYXR0ZWQmJihDdFswXT1hdC52YWx1ZXNbQ25dLnVuZm9ybWF0dGVkKSxDdFsxXT09PWF0LnZhbHVlc1tDbl0uZm9ybWF0dGVkJiYoQ3RbMV09YXQudmFsdWVz''@;'; put 'put ''W0NuXS51bmZvcm1hdHRlZCl9aWYoYXQudmFsdWUgaW5zdGFuY2VvZiBBcnJheSYmKCJJTiI9PT1hdC5vcGVyYXRvcnx8Ik5PVCBJTiI9PT1hdC5vcGVyYXRvcikpe0N0PVtdLEN0PWF0LnZhbHVlO2ZvcihsZXQgQ249MDtDbjxhdC52YWx1ZXMubGVuZ3RoO0NuKyspQ3RbQ25dJiZDdFtDbl0u''@;'; put 'put ''dmFsPT09YXQudmFsdWVzW0NuXS5mb3JtYXR0ZWQmJihDdFtDbl0udmFsPWF0LnZhbHVlc1tDbl0udW5mb3JtYXR0ZWQpfWxldCBBdD1hdC50eXBlO2NvbnN0IEt0PWF0LnZhbHVlVmFyaWFibGU7bGV0IFRuLHF0PW51bGw9PT1hdC52YXJpYWJsZT8iIjphdC52YXJpYWJsZSxnbj1udWxsPT09''@;'; put 'put ''YXQub3BlcmF0b3I/IiI6YXQub3BlcmF0b3I7VG49dGhpcy5jaGVja09wZXJhdG9yKGduLEN0LEF0KS52YWx1ZSwic3RyaW5nIj09dHlwZW9mIFRuJiYiKCIhPT1UblswXSYmKFRuPVRuLnJlcGxhY2UoIiciLCInJyIpKSxnbj10aGlzLmNoZWNrT3BlcmF0b3IoZ24sVG4sQXQpLm9wZXJhdG9y''@;'; put 'put ''LCJjaGFyIj09PUF0JiYiSU4iIT09Z24mJiJOT1QgSU4iIT09Z24/KHR5cGVvZiBUbj4idSImJihUbj0iIiksVG49S3Q/IiAiK1RuKyIgIjoiICciK1RuKyInICIsTWU9TWUrIiAiK3F0KyIgIitnbitUbitnKTooIm51bSI9PT1BdCYmdHlwZW9mIFRuPiJ1IiYmKFRuPSIuIiksVG49dHlwZW9m''@;'; put 'put ''IFRuPiJ1Ij8iIjoiICIrVG4rIiAiLE1lPU1lKyIgIitxdCsiICIrZ24rVG4rZyl9Ty5wdXNoKE1lKX1FPSIiO2ZvcihsZXQgdmU9MDt2ZTxPLmxlbmd0aDt2ZSsrKVo9dmU8Ty5sZW5ndGgtMT9pOiIiLEU9MT09PU8ubGVuZ3RoP09bMF06RSsiICgiK09bdmVdKyIpICIrWjtyZXR1cm4gYT1F''@;'; put 'put ''LnN1YnN0cigxKS5zbGljZSgwLC0xKSxFPSJXSEVSRSIrRSsiOyIsdGhpcy5xdWVyeS5uZXh0KHt3aGVyZUNsYXVzZTpFLHN0cmluZzphLG9iajpyLGxpYmRzOm99KSx7d2hlcmVDbGF1c2U6RSxzdHJpbmc6YX19Y3JlYXRlRmlsdGVyUXVlcnlUYWJsZShyKXtjb25zdCBpPVtdO3JldHVybiBy''@;'; put 'put ''LmZpbHRlckdyb3Vwcy5mb3JFYWNoKChvLGEpPT57by5maWx0ZXJDbGF1c2VzLmZvckVhY2gobD0+e2xldCB1PSIiOyJCRVRXRUVOIj09PWwub3BlcmF0b3I/dT1gJHtsLnZhbHVlWzBdfSBBTkQgJHtsLnZhbHVlWzFdfWA6IklOIj09PWwub3BlcmF0b3J8fCJOT1QgSU4iPT09bC5vcGVyYXRv''@;'; put 'put ''cj8obC52YWx1ZS5mb3JFYWNoKGc9PntpZihnLmNoZWNrZWQpe2NvbnN0IEU9Zy52YWw7InN0cmluZyIhPXR5cGVvZiBFfHwoMCx5NC5pc1NwZWNpYWxNaXNzaW5nKShFKSYmImNoYXIiIT09bC50eXBlP3UubGVuZ3RoPjA/dSs9YCwke0V9YDp1PWAoJHtFfWA6dS5sZW5ndGg+MD91Kz1gLCck''@;'; put 'put ''e0UucmVwbGFjZSgvJy9nLCInJyIpfSdgOnU9YCgnJHtFLnJlcGxhY2UoLycvZywiJyciKX0nYH19KSx1Lmxlbmd0aD4wJiYodSs9IikiKSk6IiI9PT1sLnZhbHVlP3U9ImNoYXIiPT09bC50eXBlPyInICciOiIuIjoiY2hhciI9PT1sLnR5cGUmJiFsLnZhbHVlVmFyaWFibGUmJih1PWAnJHts''@;'; put 'put ''LnZhbHVlLnJlcGxhY2UoLycvZywiJyciKX0nYCksaS5wdXNoKHtHUk9VUF9MT0dJQzpyLmdyb3VwTG9naWMsU1VCR1JPVVBfTE9HSUM6by5jbGF1c2VMb2dpY3x8IkFORCIsU1VCR1JPVVBfSUQ6YSxWQVJJQUJMRV9OTTpsLnZhcmlhYmxlLE9QRVJBVE9SX05NOmwub3BlcmF0b3IsUkFXX1ZB''@;'; put 'put ''TFVFOnV8fGwudmFsdWV9KX0pfSksaX1pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKHIsaSl7Y29uc3Qgbz17cXVlcnlPYmo6W10sY2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzokYyhVbixyKS5maWx0ZXIucXVlcnlbMF0uR1JPVVBfTE9HSUN9OyRjKFVuLHIpLmZpbHRlci5jbGF1c2Vz''@;'; put 'put ''PXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUobyksJGMoVW4scikuZmlsdGVyLmdyb3VwTG9naWM9JGMoVW4scikuZmlsdGVyLnF1ZXJ5WzBdLkdST1VQX0xPR0lDO2xldCBhPSIiLGw9e2VsZW1lbnRzOltdfSx1PTA7JGMoVW4scikuZmlsdGVyLnF1ZXJ5LmZvckVhY2goZz0+e2NvbnN0''@;'; put 'put ''IEU9e307Zm9yKGxldCBPPTA7TzxpLmxlbmd0aDtPKyspaWYoaVtPXS5OQU1FPT09Zy5WQVJJQUJMRV9OTSl7aWYoYT1nLlNVQkdST1VQX0xPR0lDLEUuZGR0eXBlPWlbT10uRERUWVBFLEUudHlwZT1pW09dLlRZUEUsRS5vcGVyYXRvcnM9Im51bSI9PT1pW09dLlRZUEU/VW4ub3BlcmF0b3Jz''@;'; put 'put ''Lm51bU9wZXJhdG9yczpVbi5vcGVyYXRvcnMuY2hhck9wZXJhdG9ycyxFLmxvZ2ljPW51bGwsRS5vcGVyYXRvcj1nLk9QRVJBVE9SX05NLEUudmFyaWFibGU9Zy5WQVJJQUJMRV9OTSwiY2hhciI9PT1pW09dLlRZUEUpaWYoIklOIj09PWcuT1BFUkFUT1JfTk18fCJOT1QgSU4iPT09Zy5PUEVS''@;'; put 'put ''QVRPUl9OTSl7Y29uc3QgWj1bXSx2ZT1nLlJBV19WQUxVRS5zbGljZSgxLC0xKS5zcGxpdCgiJywnIik7MT09PXZlLmxlbmd0aD9aLnB1c2goe2NoZWNrZWQ6ITAsdmFsOnZlWzBdLnNsaWNlKDEsLTEpLnJlcGxhY2UoLycnL2csIiciKX0pOnZlLmZvckVhY2goKE1lLEhlKT0+e1oucHVzaCgw''@;'; put 'put ''PT09SGU/e2NoZWNrZWQ6ITAsdmFsOk1lLnNsaWNlKDEpLnJlcGxhY2UoLycnL2csIiciKX06SGU9PT12ZS5sZW5ndGgtMT97Y2hlY2tlZDohMCx2YWw6TWUuc2xpY2UoMCwtMSkucmVwbGFjZSgvJycvZywiJyIpfTp7Y2hlY2tlZDohMCx2YWw6TWUucmVwbGFjZSgvJycvZywiJyIpfSl9KSxF''@;'; put 'put ''LnZhbHVlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoWil9ZWxzZSBFLnZhbHVlPWcuUkFXX1ZBTFVFLnNsaWNlKDEsLTEpLnJlcGxhY2UoLycnL2csIiciKTtlbHNlIGlmKCJJTiI9PT1nLk9QRVJBVE9SX05NfHwiTk9UIElOIj09PWcuT1BFUkFUT1JfTk0pe2NvbnN0IFo9W107Zy5S''@;'; put 'put ''QVdfVkFMVUUuc2xpY2UoMSwtMSkuc3BsaXQoIiwiKS5mb3JFYWNoKChNZSxIZSk9PntaLnB1c2goe2NoZWNrZWQ6ITAsdmFsOk1lfSl9KSxFLnZhbHVlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoWil9ZWxzZSBpZigiQkVUV0VFTiI9PT1nLk9QRVJBVE9SX05NKXtjb25zdCBaPWcu''@;'; put 'put ''UkFXX1ZBTFVFLnNwbGl0KCIgQU5EICIpO0UudmFsdWU9Wn1lbHNlIEUudmFsdWU9Zy5SQVdfVkFMVUU7RS52YWx1ZXM9W10sdT09PWcuU1VCR1JPVVBfSUR8fCgkYyhVbixyKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9iai5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUobCkpLCRj''@;'; put 'put ''KFVuLHIpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW3VdLmNsYXVzZUxvZ2ljPWEsJGMoVW4scikuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbdV0uaW52YWxpZENsYXVzZT0hMSx1KyssbC5lbGVtZW50cz1bXSksbC5lbGVtZW50cy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUo''@;'; put 'put ''RSkpO2JyZWFrfX0pLGwuZWxlbWVudHMubGVuZ3RoPjAmJigkYyhVbixyKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9iai5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUobCkpLCRjKFVuLHIpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW3VdLmNsYXVzZUxvZ2ljPWEsJGMoVW4sciku''@;'; put 'put ''ZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbdV0uaW52YWxpZENsYXVzZT0hMSksJGMoVW4scikuZmlsdGVyLnF1ZXJ5PVtdfXJlbW92ZUNsYXVzZSgpe3ZhciByPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe2xldCBpPSEwO3JldHVybiByLnJlbW92ZVF1ZXJ5Lm5leHQoaSksaX0pKCl9c3Bl''@;'; put 'put ''Y0NvbnZlcnNpb24ocil7bGV0IGk9e30sbz1bXTtpZihvPXIubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLk5BTUUudG9VcHBlckNhc2UoKX0pLHIgaW5zdGFuY2VvZiBBcnJheSlmb3IobGV0IGE9MDthPG8ubGVuZ3RoO2ErKylpW29bYV1dPTE9PT1yW2FdLlRZUEU/e2NvbFR5cGU6Im51bSIs''@;'; put 'put ''Y29sTGVuZ3RoOnJbYV0uTEVOR1RIfTp7Y29sVHlwZToic3RyaW5nIixjb2xMZW5ndGg6clthXS5MRU5HVEh9O3JldHVybiBpfXNldFN1Ym1pdFJlYWR5KCl7dGhpcy5zZXRTdWJtaXQubmV4dCghMCl9cGFyc2VGb3JtYXRzKHIpe2NvbnN0IGk9e30sbz1yLnZhcnM7Zm9yKGxldCBhIG9mIE9i''@;'; put 'put ''amVjdC5rZXlzKG8pKXtjb25zdCBsPW9bYV0udHlwZSx1PW9bYV0ubGVuZ3RoOyJudW0iPT09bD9pW2FdPSJiZXN0LiI6ImNoYXIiPT09bCYmKGlbYV09YCRjaGFyJHt1fS5gKX1yZXR1cm4gaX1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhp''@;'; put 'put ''fHxlKShvcihpYyksb3IoZmgpLG9yKHgzKSl9LHRoaXMuXHUwMjc1cHJvdj1Kbih7dG9rZW46ZSxmYWN0b3J5OmUuXHUwMjc1ZmFjfSkpfXJldHVybiBuKCksZX0pKCk7ZnVuY3Rpb24gckV0KG4sZSl7MSZuJiYoSigwLCJzcGFuIiwzMCksU2UoMSwiIExvYWRpbmcuLi4gIiksdGUoKSxKKDIs''@;'; put 'put ''InAiKSxTZSgzLCJEZXBsb3lpbmcuLi4iKSx0ZSgpKX1mdW5jdGlvbiBpRXQobixlKXsxJm4mJkl0KDAsImNsci1pY29uIiwzOSl9ZnVuY3Rpb24gb0V0KG4sZSl7MSZuJiZJdCgwLCJjbHItaWNvbiIsMzYpfWZ1bmN0aW9uIGFFdChuLGUpe2lmKDEmbiYmKEooMCwiZGl2IiwzMyksdnQoMSxp''@;'; put 'put ''RXQsMSwwLCJjbHItaWNvbiIsMzkpLHZ0KDIsb0V0LDEsMCwiY2xyLWljb24iLDM2KSxKKDMsInAiKSxTZSg0LCJEZXBsb3kgU0FTIEpvYnMiKSx0ZSgpKCkpLDImbil7Y29uc3QgdD1UZSgzKTtpZSgpLF90KCEwPT09dC5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrPzE6LTEp''@;'; put 'put ''LGllKCksX3QodC5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrPzI6LTEpfX1mdW5jdGlvbiBzRXQobixlKXsxJm4mJkl0KDAsImNsci1pY29uIiwzOSl9ZnVuY3Rpb24gbEV0KG4sZSl7MSZuJiZJdCgwLCJjbHItaWNvbiIsMzYpfWZ1bmN0aW9uIGNFdChuLGUpe2lmKDEmbiYm''@;'; put 'put ''KEooMCwiZGl2IiwzMyksdnQoMSxzRXQsMSwwLCJjbHItaWNvbiIsMzkpLHZ0KDIsbEV0LDEsMCwiY2xyLWljb24iLDM2KSxKKDMsInAiKSxTZSg0LCJDcmVhdGUgZGF0YWJhc2UiKSx0ZSgpKCkpLDImbil7Y29uc3QgdD1UZSgzKTtpZSgpLF90KHQuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtl''@;'; put 'put ''RGF0YT8xOi0xKSxpZSgpLF90KCExPT09dC5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhPzI6LTEpfX1mdW5jdGlvbiB1RXQobixlKXsxJm4mJkl0KDAsImNsci1pY29uIiwzNil9ZnVuY3Rpb24gZEV0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJwIiwzMSksU2UoMSwiRG9u''@;'; put 'put ''ZSIpLHRlKCksSXQoMiwiaHIiLDMyKSx2dCgzLGFFdCw1LDIsImRpdiIsMzMpLHZ0KDQsY0V0LDUsMiwiZGl2IiwzMyksSXQoNSwiaHIiLDMyKSxKKDYsImRpdiIsMzQpKDcsImJ1dHRvbiIsMzUpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoMikubmF2aWdhdGVU''@;'; put 'put ''b0hvbWUoKSl9KSx2dCg4LHVFdCwxLDAsImNsci1pY29uIiwzNiksU2UoOSwiIExBVU5DSCAiKSx0ZSgpLEooMTAsImJ1dHRvbiIsMzcpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtZZSh0KTtjb25zdCBpPVRlKDIpO3JldHVybiBYZShpLmRvd25sb2FkRmlsZShpLm1ha2VEYXRhUmVzcG9uc2Us''@;'; put 'put ''ImNyZWF0ZS1kYXRhYmFzZS1sb2ciLCJ0eHQiKSl9KSxTZSgxMSwiIERvd25sb2FkIGxvZyAiKSx0ZSgpKCksSXQoMTIsImhyIiwzMiksSigxMywiZGl2IiwzNCkoMTQsImJ1dHRvbiIsMzgpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtZZSh0KTtjb25zdCBpPVRlKDIpO3JldHVybiBpLmF1dG9k''@;'; put 'put ''ZXBsb3lpbmc9ITEsWGUoaS5hdXRvZGVwbG95RG9uZT0hMSl9KSxTZSgxNSwiIENsb3NlICIpLHRlKCksSigxNiwiYnV0dG9uIiwzOCksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgyKS5vcGVuU2FzUmVxdWVzdHNNb2RhbCgpKX0pLFNlKDE3LCIgU0FTIFJlcXVl''@;'; put 'put ''c3RzICIpLHRlKCkoKX1pZigyJm4pe2NvbnN0IHQ9VGUoMik7aWUoMyksX3QobnVsbCE9PXQuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjaz8zOi0xKSxpZSgpLF90KG51bGwhPT10LmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGE/NDotMSksaWUoNCksX3QoITE9PT10LmF1''@;'; put 'put ''dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2t8fCExPT09dC5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhPzg6LTEpfX1mdW5jdGlvbiBoRXQobixlKXtpZigxJm4mJihKKDAsImRpdiIsMCkoMSwiZGl2IiwyOSksdnQoMixyRXQsNCwwKSx2dCgzLGRFdCwxOCwzKSx0ZSgpKCkp''@;'; put 'put ''LDImbil7Y29uc3QgdD1UZSgpO2llKDIpLF90KHQuYXV0b2RlcGxveURvbmU/LTE6MiksaWUoKSxfdCh0LmF1dG9kZXBsb3lEb25lPzM6LTEpfX1mdW5jdGlvbiBmRXQobixlKXtpZigxJm4mJihTZSgwLCIgKCIpLEooMSwic3Ryb25nIiksU2UoMiksdGUoKSxTZSgzLCIpICIpKSwyJm4pe2Nv''@;'; put 'put ''bnN0IHQ9VGUoKTtpZSgyKSxwcihudWxsPT10LmN1cnJlbnRVc2VySW5mbz9udWxsOnQuY3VycmVudFVzZXJJbmZvLmlkKX19ZnVuY3Rpb24gcEV0KG4sZSl7aWYoMSZuJiYoSigwLCJvcHRpb24iLDQxKSxTZSgxKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7cnQoInZhbHVlIix0''@;'; put 'put ''LmlkKSxpZSgpLFNyKCIgIix0Lm5hbWUsIiAiKX19ZnVuY3Rpb24gZ0V0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJzZWxlY3QiLDQwKSxoaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgpO3JldHVybiBmaShvLnNlbGVjdGVkQWRtaW5Hcm91''@;'; put 'put ''cCxpKXx8KG8uc2VsZWN0ZWRBZG1pbkdyb3VwPWkpLFhlKGkpfSksX28oMSxwRXQsMiwyLCJvcHRpb24iLDQxLENvKSx0ZSgpfWlmKDImbil7Y29uc3QgdD1UZSgpO2RpKCJuZ01vZGVsIix0LnNlbGVjdGVkQWRtaW5Hcm91cCksaWUoKSx5byh0LmFkbWluR3JvdXBzKX19ZnVuY3Rpb24gbUV0''@;'; put 'put ''KG4sZSl7MSZuJiZJdCgwLCJjbHItc3Bpbm5lciIsMTgpfWZ1bmN0aW9uIHZFdChuLGUpe2lmKDEmbiYmKEooMCwib3B0aW9uIiw0MSksU2UoMSksdGUoKSksMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0O3J0KCJ2YWx1ZSIsdCksaWUoKSxTcigiICIsdCwiICIpfX1mdW5jdGlvbiBfRXQobixl''@;'; put 'put ''KXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsInNlbGVjdCIsNDQpLGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKDIpO3JldHVybiBmaShvLnNlbGVjdGVkQmF0Y2hJZCxpKXx8KG8uc2VsZWN0ZWRCYXRjaElkPWkpLFhlKGkpfSksd3QoIm5nTW9kZWxD''@;'; put 'put ''aGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKDIpLm9uQmF0Y2hJZENoYW5nZSgpKX0pLF9vKDEsdkV0LDIsMiwib3B0aW9uIiw0MSxDbyksdGUoKX1pZigyJm4pe2NvbnN0IHQ9VGUoMik7ZGkoIm5nTW9kZWwiLHQuc2VsZWN0ZWRCYXRjaElkKSxpZSgpLHlvKHQuYmF0Y2hJ''@;'; put 'put ''ZHMpfX1mdW5jdGlvbiB5RXQobixlKXsxJm4mJkl0KDAsImNsci1zcGlubmVyIiwxOCl9ZnVuY3Rpb24gYkV0KG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiLDMpKDEsImxhYmVsIiw0MiksU2UoMiwiQmF0Y2ggSUQiKSx0ZSgpLEooMywicCIsNSksU2UoNCwiIFRoZSBiYXRjaCBpZGVudGl0eSAo''@;'; put 'put ''IiksSig1LCJjb2RlIiksU2UoNiwicnVuU2VydmVyQXMiKSx0ZSgpLFNlKDcsIikgdW5kZXIgd2hpY2ggRGF0YSBDb250cm9sbGVyIGpvYnMgd2lsbCBleGVjdXRlLiBJdCBpcyB1c2VkIHRvIGZpbHRlciB0aGUgQ29tcHV0ZSBDb250ZXh0IGRyb3Bkb3duIGJlbG93IHRvIG9ubHkgdGhlIGNv''@;'; put 'put ''bnRleHRzIHJ1bm5pbmcgYXMgdGhpcyBpZGVudGl0eS4gIiksdGUoKSxKKDgsImRpdiIsNikoOSwiZGl2IiwxMSksdnQoMTAsX0V0LDMsMSwic2VsZWN0Iiw0MyksdnQoMTEseUV0LDEsMCwiY2xyLXNwaW5uZXIiLDE4KSx0ZSgpKCkoKSksMiZuKXtjb25zdCB0PVRlKCk7aWUoMTApLF90KHQu''@;'; put 'put ''Y29tcHV0ZUNvbnRleHRzTG9hZGluZz8tMToxMCksaWUoKSxfdCh0LmNvbXB1dGVDb250ZXh0c0xvYWRpbmc/MTE6LTEpfX1mdW5jdGlvbiB3RXQobixlKXtpZigxJm4mJihKKDAsIm9wdGlvbiIsNDEpLFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdDtydCgidmFsdWUiLHQu''@;'; put 'put ''aWQpLGllKCksU3IoIiAiLHQubmFtZSwiICIpfX1mdW5jdGlvbiBDRXQobixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsInNlbGVjdCIsNDUpLHd0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtyZXR1cm4gWWUodCksWGUoVGUoKS5vbkNvbXB1dGVDb250ZXh0Q2hhbmdlKGkpKX0p''@;'; put 'put ''LGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKCk7cmV0dXJuIGZpKG8uc2VsZWN0ZWRDb21wdXRlQ29udGV4dCxpKXx8KG8uc2VsZWN0ZWRDb21wdXRlQ29udGV4dD1pKSxYZShpKX0pLF9vKDEsd0V0LDIsMiwib3B0aW9uIiw0MSxDbyksdGUoKX1pZigy''@;'; put 'put ''Jm4pe2NvbnN0IHQ9VGUoKTtkaSgibmdNb2RlbCIsdC5zZWxlY3RlZENvbXB1dGVDb250ZXh0KSxpZSgpLHlvKHQuZ2V0RmlsdGVyZWRDb21wdXRlQ29udGV4dHMoKSl9fWZ1bmN0aW9uIFNFdChuLGUpezEmbiYmSXQoMCwiY2xyLXNwaW5uZXIiLDE4KX1mdW5jdGlvbiBFRXQobixlKXtpZigx''@;'; put 'put ''Jm4mJihKKDAsImRpdiIsMykoMSwibGFiZWwiLDQpLFNlKDIsIlJ1bm5pbmcgYXMgdXNlciIpLHRlKCksSigzLCJwIiw1KSxTZSg0LCIgVGhlIGlkZW50aXR5IHVuZGVyIHdoaWNoIERhdGEgQ29udHJvbGxlciBqb2JzIHdpbGwgcnVuIHdpdGggdGhlIHNlbGVjdGVkIGNvbXB1dGUgY29udGV4''@;'; put 'put ''dC4gVGhpcyB1c2VyIG11c3QgYmUgYWJsZSB0byB3cml0ZSB0byB0aGUgREMgTG9jIGFib3ZlLiAiKSx0ZSgpLEooNSwiZGl2Iiw2KSg2LCJkaXYiLDcpKDcsInAiLDgpKDgsInN0cm9uZyIpLFNlKDkpLHRlKCkoKSgpKCkoKSksMiZuKXtjb25zdCB0PVRlKCk7aWUoOSkscHIodC5ydW5uaW5n''@;'; put 'put ''QXNVc2VyKX19bGV0IE1FdD0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKHIsaSxvLGEsbCx1KXt0aGlzLmV2ZW50U2VydmljZT1yLHRoaXMuZGVwbG95U2VydmljZT1pLHRoaXMuc2FzU2VydmljZT1vLHRoaXMuc2FzVml5YVNlcnZpY2U9YSx0aGlzLmxvZ2dlclNlcnZpY2U9bCx0''@;'; put 'put ''aGlzLmhlbHBlclNlcnZpY2U9dSx0aGlzLnNhc0pzQ29uZmlnPW5ldyB4cC5TQVNqc0NvbmZpZyx0aGlzLmFwcExvYz0iIix0aGlzLmRjUGF0aD0iIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iIix0aGlzLm9uTmF2aWdhdGVUb0hvbWU9bmV3IEtyLHRoaXMuc2VsZWN0ZWRDb21wdXRlQ29u''@;'; put 'put ''dGV4dD0iIix0aGlzLm1ha2VEYXRhUmVzcG9uc2U9IiIsdGhpcy5qc29uRmlsZT1udWxsLHRoaXMuYXV0b2RlcGxveWluZz0hMSx0aGlzLmF1dG9kZXBsb3lEb25lPSExLHRoaXMucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSExLHRoaXMuaXNTdWJtaXR0aW5nSnNvbj0hMSx0aGlzLmlzSnNvblN1''@;'; put 'put ''Ym1pdHRlZD0hMSx0aGlzLnJlY3JlYXRlRGF0YWJhc2U9ITAsdGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITEsdGhpcy5hZG1pbkdyb3Vwc0xvYWRpbmc9ITEsdGhpcy5jdXJyZW50VXNlckluZm9Mb2FkaW5nPSExLHRoaXMuY29tcHV0ZUNvbnRleHRzTG9hZGluZz0hMSx0aGlzLmFkbWlu''@;'; put 'put ''R3JvdXBzPVtdLHRoaXMuY29tcHV0ZUNvbnRleHRJbmZvcz1bXSx0aGlzLmJhdGNoSWRzPVtdLHRoaXMuc2VsZWN0ZWRCYXRjaElkPSIiLHRoaXMuc2hvd0FsbENvbnRleHRzPSExLHRoaXMuYWxsQWRtaW5Hcm91cHM9W10sdGhpcy5tZW1iZXJBZG1pbkdyb3Vwcz1bXSx0aGlzLnNob3dBbGxH''@;'; put 'put ''cm91cHM9ITEsdGhpcy5jdXJyZW50VXNlckluZm89bnVsbCx0aGlzLmNvbXB1dGVDb250ZXh0cz1bXSx0aGlzLmF1dG9EZXBsb3lTdGF0dXM9e2RlcGxveVNlcnZpY2VQYWNrOm51bGwscnVuTWFrZURhdGE6bnVsbH0sdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanND''@;'; put 'put ''b25maWcoKSx0aGlzLmRlcGxveUluTmV3V2luZG93PSEwLHRoaXMubWFrZWRhdGFQb2xsSW50ZXJ2YWw9bnVsbH1uZ09uSW5pdCgpe3RoaXMubG9hZERhdGEoKX1sb2FkRGF0YSgpe3ZhciByPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe3lpZWxkIHIuZ2V0Q3VycmVudFVzZXIoKSx5aWVs''@;'; put 'put ''ZCByLmdldEFkbWluR3JvdXBzKCkseWllbGQgci5nZXRDb21wdXRlQ29udGV4dHMoKSxzZXRUaW1lb3V0KCgpPT57ci5zZWxlY3RlZENvbXB1dGVDb250ZXh0JiZyLm9uQ29tcHV0ZUNvbnRleHRDaGFuZ2Uoci5zZWxlY3RlZENvbXB1dGVDb250ZXh0KX0sNTAwKX0pKCl9Z2V0Q29tcHV0ZUNv''@;'; put 'put ''bnRleHRzKCl7dmFyIHI9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChpLG8pPT57ci5jb21wdXRlQ29udGV4dHNMb2FkaW5nPSEwLHIuc2FzVml5YVNlcnZpY2UuZ2V0Q29tcHV0ZUNvbnRleHRzKCkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dmFyIGE9Q3Io''@;'; put 'put ''ZnVuY3Rpb24qKGwpe3IuY29tcHV0ZUNvbnRleHRzPWwuaXRlbXMseWllbGQgci5nZXRDb21wdXRlQ29udGV4dERldGFpbHMoKSxyLmNvbXB1dGVDb250ZXh0c0xvYWRpbmc9ITEsaSgpfSk7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksYT0+''@;'; put 'put ''e28oYSl9KX0pfSkoKX1nZXRDb21wdXRlQ29udGV4dERldGFpbHMoKXt2YXIgcj10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtjb25zdCBpPXlpZWxkIFByb21pc2UuYWxsKHIuY29tcHV0ZUNvbnRleHRzLm1hcChsPT5uZXcgUHJvbWlzZSh1PT57ci5zYXNWaXlhU2VydmljZS5nZXRDb21w''@;'; put 'put ''dXRlQ29udGV4dEJ5SWQobC5pZCkuc3Vic2NyaWJlKGc9Pnt1KHtpZDpsLmlkLG5hbWU6bC5uYW1lLHJ1bkFzOnIuZXh0cmFjdFJ1bkFzKGcpLHJldXNhYmxlOiJ0cnVlIj09PWcuYXR0cmlidXRlcz8ucmV1c2VTZXJ2ZXJQcm9jZXNzZXN9KX0sZz0+e3IubG9nZ2VyU2VydmljZS5lcnJvcihg''@;'; put 'put ''RXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNvbnRleHQgJHtsLm5hbWV9YCxnKSx1KHtpZDpsLmlkLG5hbWU6bC5uYW1lLHJ1bkFzOm51bGwscmV1c2FibGU6ITF9KX0pfSkpKTtyLmNvbXB1dGVDb250ZXh0SW5mb3M9aSxyLmJhdGNoSWRzPVsuLi5uZXcgU2V0KGkuZmlsdGVyKGw9Pmwu''@;'; put 'put ''cmV1c2FibGUmJmwucnVuQXMpLm1hcChsPT5sLnJ1bkFzKSldLHIuYmF0Y2hJZHMubGVuZ3RoJiYoci5zZWxlY3RlZEJhdGNoSWQ9ci5iYXRjaElkc1swXSk7Y29uc3Qgbz1yLmdldEZpbHRlcmVkQ29tcHV0ZUNvbnRleHRzKCksYT1vLmZpbmQobD0+IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1''@;'; put 'put ''dGUgY29udGV4dCI9PT1sLm5hbWUpfHxvWzBdO2EmJihyLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQ9YS5pZCl9KSgpfWV4dHJhY3RSdW5BcyhyKXtyZXR1cm4gci5hdHRyaWJ1dGVzPy5ydW5TZXJ2ZXJBc3x8bnVsbH1nZXRGaWx0ZXJlZENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLnNo''@;'; put 'put ''b3dBbGxDb250ZXh0cz90aGlzLmNvbXB1dGVDb250ZXh0SW5mb3M6dGhpcy5jb21wdXRlQ29udGV4dEluZm9zLmZpbHRlcihyPT5yLnJldXNhYmxlJiZyLnJ1bkFzPT09dGhpcy5zZWxlY3RlZEJhdGNoSWQpfW9uQmF0Y2hJZENoYW5nZSgpe3RoaXMuZW5zdXJlU2VsZWN0ZWRDb21wdXRlQ29u''@;'; put 'put ''dGV4dCgpfW9uU2hvd0FsbENvbnRleHRzQ2hhbmdlKCl7dGhpcy5lbnN1cmVTZWxlY3RlZENvbXB1dGVDb250ZXh0KCl9ZW5zdXJlU2VsZWN0ZWRDb21wdXRlQ29udGV4dCgpe2NvbnN0IHI9dGhpcy5nZXRGaWx0ZXJlZENvbXB1dGVDb250ZXh0cygpO3Iuc29tZShvPT5vLmlkPT09dGhpcy5z''@;'; put 'put ''ZWxlY3RlZENvbXB1dGVDb250ZXh0KXx8KHRoaXMuc2VsZWN0ZWRDb21wdXRlQ29udGV4dD1yLmxlbmd0aD9yWzBdLmlkOiIiKSx0aGlzLnVwZGF0ZVJ1bm5pbmdBc1VzZXIoKX11cGRhdGVSdW5uaW5nQXNVc2VyKCl7Y29uc3Qgcj10aGlzLmNvbXB1dGVDb250ZXh0SW5mb3MuZmluZChpPT5p''@;'; put 'put ''LmlkPT09dGhpcy5zZWxlY3RlZENvbXB1dGVDb250ZXh0KTt0aGlzLnJ1bm5pbmdBc1VzZXI9cj8ucnVuQXN8fHRoaXMuY3VycmVudFVzZXJJbmZvPy5pZHx8InVua25vd24ifWdldEN1cnJlbnRVc2VyKCl7dmFyIHI9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9t''@;'; put 'put ''aXNlKChpLG8pPT57ci5jdXJyZW50VXNlckluZm9Mb2FkaW5nPSEwLHIuc2FzVml5YVNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS5zdWJzY3JpYmUoYT0+e3IuY3VycmVudFVzZXJJbmZvTG9hZGluZz0hMSxyLmN1cnJlbnRVc2VySW5mbz1hLHIuZGNQYXRoPWAvZXhwb3J0L3ZpeWEvaG9tZXMv''@;'; put 'put ''JHthLmlkfWAsaSgpfSxhPT57Y29uc29sZS5lcnJvcigiRXJyb3Igd2hpbGUgZ2V0dGluZyBjdXJyZW50IHVzZXIiLGEpLG8oYSl9KX0pfSkoKX1nZXRBZG1pbkdyb3Vwcygpe3ZhciByPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoaSxvKT0+e3IuYWRt''@;'; put 'put ''aW5Hcm91cHNMb2FkaW5nPSEwLHIuc2FzVml5YVNlcnZpY2UuZ2V0QWRtaW5Hcm91cHMoKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXt2YXIgYT1DcihmdW5jdGlvbioobCl7ci5hbGxBZG1pbkdyb3Vwcz1sLml0ZW1zLm1hcCh1PT4oe2lkOnUuaWQsbmFtZTp1Lm5hbWV9KSkseWllbGQgci5nZXRN''@;'; put 'put ''ZW1iZXJBZG1pbkdyb3VwcygpLHIuYXBwbHlBZG1pbkdyb3VwRmlsdGVyKCksci5hZG1pbkdyb3Vwc0xvYWRpbmc9ITEsaSgpfSk7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfSl9KSgpfWdldE1lbWJlckFkbWluR3JvdXBzKCl7dmFyIHI9''@;'; put 'put ''dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKGk9PntyLnNhc1ZpeWFTZXJ2aWNlLmdldEN1cnJlbnRVc2VyR3JvdXBNZW1iZXJzaGlwcygpLnN1YnNjcmliZShvPT57Y29uc3QgYT1vLml0ZW1zLm1hcChsPT5sLmlkKTtyLm1lbWJlckFkbWluR3JvdXBzPXIu''@;'; put 'put ''YWxsQWRtaW5Hcm91cHMuZmlsdGVyKGw9PmEuaW5jbHVkZXMobC5pZCkpLGkoKX0sbz0+e3IubG9nZ2VyU2VydmljZS5lcnJvcigiRXJyb3Igd2hpbGUgZ2V0dGluZyB1c2VyIGdyb3VwIG1lbWJlcnNoaXBzIixvKSxyLm1lbWJlckFkbWluR3JvdXBzPXIuYWxsQWRtaW5Hcm91cHMsaSgpfSl9''@;'; put 'put ''KX0pKCl9b25TaG93QWxsR3JvdXBzQ2hhbmdlKCl7dGhpcy5hcHBseUFkbWluR3JvdXBGaWx0ZXIoKX1hcHBseUFkbWluR3JvdXBGaWx0ZXIoKXt0aGlzLmFkbWluR3JvdXBzPXRoaXMuc2hvd0FsbEdyb3Vwc3x8IXRoaXMubWVtYmVyQWRtaW5Hcm91cHMubGVuZ3RoP3RoaXMuYWxsQWRtaW5H''@;'; put 'put ''cm91cHM6dGhpcy5tZW1iZXJBZG1pbkdyb3VwcywhdGhpcy5hZG1pbkdyb3Vwcy5zb21lKGk9PmkuaWQ9PT10aGlzLnNlbGVjdGVkQWRtaW5Hcm91cCkmJnRoaXMuYWRtaW5Hcm91cHMubGVuZ3RoJiYodGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9dGhpcy5hZG1pbkdyb3Vwc1swXS5pZCl9b25D''@;'; put 'put ''b21wdXRlQ29udGV4dENoYW5nZShyKXt2YXIgaT10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtpLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQ9cixpLnVwZGF0ZVJ1bm5pbmdBc1VzZXIoKX0pKCl9Z2V0Q29tcHV0ZUNvbnRleHROYW1lKHIpe3JldHVybiB0aGlzLmNvbXB1dGVDb250ZXh0cy5m''@;'; put 'put ''aW5kKGk9PmkuaWQ9PT1yKT8ubmFtZXx8dm9pZCAwfWV4ZWN1dGVKc29uKCl7dmFyIHI9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7ci5pc1N1Ym1pdHRpbmdKc29uPSEwO3RyeXt5aWVsZCByLnNhc0pzLmRlcGxveVNlcnZpY2VQYWNrKHIuanNvbkZpbGUsci5kY0FkYXB0ZXJTZXR0aW5n''@;'; put 'put ''cz8uYXBwTG9jLHZvaWQgMCx2b2lkIDAsITApLHIuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjaz0hMCxyLmlzSnNvblN1Ym1pdHRlZD0hMH1jYXRjaChpKXtsZXQgbz0iIjtyZXR1cm4gbz0ic3RyaW5nIiE9dHlwZW9mIGkubWVzc2FnZT9KU09OLnN0cmluZ2lmeShpKS5yZXBs''@;'; put 'put ''YWNlKC9cXC9nbSwiIik6aS5tZXNzYWdlLHIuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjaz0hMSxyLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJEZXBsb3kgZXJyb3IiLGBFeGNlcHRpb246IFxuICR7IiIhPT1vP286aX1gKSxyLmF1dG9kZXBsb3lpbmc9ITEsdm9pZChy''@;'; put 'put ''LmF1dG9kZXBsb3lEb25lPSExKX1yLmlzU3VibWl0dGluZ0pzb249ITF9KSgpfXJ1bkF1dG9EZXBsb3koKXt2YXIgcj10aGlzO3JldHVybiBDcihmdW5jdGlvbiooaT0hMSl7ci5kZXBsb3lJbk5ld1dpbmRvd3x8KHIuYXV0b2RlcGxveWluZz0hMCksaSYmci5leGVjdXRlSnNvbigpLHIucmVj''@;'; put 'put ''cmVhdGVEYXRhYmFzZT9yLmNyZWF0ZURhdGFiYXNlKCk6ci5kZXBsb3lJbk5ld1dpbmRvd3x8KHIuYXV0b2RlcGxveURvbmU9ITApfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNyZWF0ZURhdGFiYXNlKCl7bGV0IHI9e2Zyb21qczpbe0FETUlOOnRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwLERD''@;'; put 'put ''UEFUSDp0aGlzLmRjUGF0aH1dfSxpPXRoaXMuc2FzSnNDb25maWcuY29udGV4dE5hbWU7aWYodGhpcy5zZWxlY3RlZENvbXB1dGVDb250ZXh0Lmxlbmd0aCYmdGhpcy5jb21wdXRlQ29udGV4dHMubGVuZ3RoKXtjb25zdCBhPXRoaXMuZ2V0Q29tcHV0ZUNvbnRleHROYW1lKHRoaXMuc2VsZWN0''@;'; put 'put ''ZWRDb21wdXRlQ29udGV4dCk7YSYmKGk9YSl9bGV0IG89e3VzZUNvbXB1dGVBcGk6bnVsbCxjb250ZXh0TmFtZTppLGRlYnVnOiEwfTt0aGlzLmRlcGxveUluTmV3V2luZG93P3RoaXMucnVuTWFrZWRhdGFJbk5ld1dpbmRvdyh7Y29udGV4dE5hbWU6aSxhZG1pbjp0aGlzLnNlbGVjdGVkQWRt''@;'; put 'put ''aW5Hcm91cCxkY1BhdGg6dGhpcy5kY1BhdGh9KTp0aGlzLnNhc0pzLnJlcXVlc3QoInNlcnZpY2VzL2FkbWluL21ha2VkYXRhIixyLG8sKCk9Pnt0aGlzLnNhc1NlcnZpY2Uuc2hvdWxkTG9naW4ubmV4dCghMCl9KS50aGVuKGE9Pnt0aGlzLmF1dG9kZXBsb3lEb25lPSEwO3RyeXt0aGlzLm1h''@;'; put 'put ''a2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoYSl9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWF9dGhpcy5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhPSEhKGEucmVzdWx0JiZhLnJlc3VsdC5sZW5ndGg+MCksdHlwZW9mIGEuc2FzanNBYm9ydDwidSImJnRoaXMuZXZlbnRT''@;'; put 'put ''ZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJtYWtlZGF0YSIsYS5zYXNqc0Fib3J0WzBdLk1TRyx7U1lTV0FSTklOR1RFWFQ6YS5TWVNXQVJOSU5HVEVYVCxTWVNFUlJPUlRFWFQ6YS5TWVNFUlJPUlRFWFQsTUFDOmEuc2FzanNBYm9ydFswXS5NQUMsX1BST0dSQU06YS5fUFJPR1JBTX0pLHRoaXMu''@;'; put 'put ''aGVscGVyU2VydmljZS5pc1N0cmVhbWluZ1ZpeWEoKSYmdGhpcy51cGRhdGVJbmRleEh0bWxDb21wdXRlQ29udGV4dCgpfSkuY2F0Y2goYT0+e3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJtYWtlZGF0YSIsSlNPTi5zdHJpbmdpZnkoYSkpLHRoaXMuYXV0b0RlcGxveVN0YXR1''@;'; put 'put ''cy5ydW5NYWtlRGF0YT0hMSx0aGlzLmF1dG9kZXBsb3lEb25lPSEwO3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoYSl9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWF9fSl9cnVuTWFrZWRhdGFJbk5ld1dpbmRvdyhyKXtsZXQgaT10aGlzLnNhc2pzQ29uZmln''@;'; put 'put ''LnNlcnZlclVybCxvPXRoaXMuc2FzanNDb25maWcuYXBwTG9jO2NvbnN0IGE9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihpK2ErIi8/X3Byb2dyYW09IitvKyIvc2VydmljZXMvYWRtaW4vbWFrZWRhdGEiK2AmX2NvbnRleHRuYW1lPSR7ci5jb250ZXh0''@;'; put 'put ''TmFtZX1gK2AmYWRtaW49JHtyLmFkbWlufWArYCZkY3BhdGg9JHtyLmRjUGF0aH0mX2RlYnVnPTEzMWApLHRoaXMucG9sbE1ha2VkYXRhQ29tcGxldGlvbigpfXBvbGxNYWtlZGF0YUNvbXBsZXRpb24oKXt2YXIgcj10aGlzO3RoaXMubWFrZWRhdGFQb2xsSW50ZXJ2YWwmJmNsZWFySW50ZXJ2''@;'; put 'put ''YWwodGhpcy5tYWtlZGF0YVBvbGxJbnRlcnZhbCk7bGV0IGk9MDt0aGlzLm1ha2VkYXRhUG9sbEludGVydmFsPXNldEludGVydmFsKENyKGZ1bmN0aW9uKigpe2krKyxjb25zb2xlLmxvZyhgcG9sbE1ha2VkYXRhQ29tcGxldGlvbjogY2hlY2tpbmcgaWYgbWFrZWRhdGEgaXMgZ29uZSAoYXR0''@;'; put 'put ''ZW1wdCAke2l9LzEyMClgKTt0cnl7KHlpZWxkIHIuc2FzU2VydmljZS52aXlhTWFrZWRhdGFTdWNjZXNzZnVsbCgpKSYmKGNvbnNvbGUubG9nKCJwb2xsTWFrZWRhdGFDb21wbGV0aW9uOiBtYWtlZGF0YSBqb2IgaXMgZ29uZSwgcmVsb2FkaW5nIGFwcCIpLGNsZWFySW50ZXJ2YWwoci5tYWtl''@;'; put 'put ''ZGF0YVBvbGxJbnRlcnZhbCksci5tYWtlZGF0YVBvbGxJbnRlcnZhbD1udWxsLHdpbmRvdy5sb2NhdGlvbi5ocmVmPXdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF0pfWNhdGNoKGEpe2NvbnNvbGUuZXJyb3IoInBvbGxNYWtlZGF0YUNvbXBsZXRpb246IGVycm9yIGNoZWNraW5n''@;'; put 'put ''IixhKX1pPj0xMjAmJihjb25zb2xlLndhcm4oInBvbGxNYWtlZGF0YUNvbXBsZXRpb246IHRpbWVkIG91dCBhZnRlciAxMCBtaW51dGVzLCBzdG9wcGluZyBwb2xsIiksY2xlYXJJbnRlcnZhbChyLm1ha2VkYXRhUG9sbEludGVydmFsKSxyLm1ha2VkYXRhUG9sbEludGVydmFsPW51bGwpfSks''@;'; put 'put ''NWUzKX11cGRhdGVJbmRleEh0bWxDb21wdXRlQ29udGV4dCgpe3ZhciByPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe2NvbnN0IGk9bG9jYXRpb24uc2VhcmNoLnNwbGl0KCIvIikucG9wKCksbz1pPy5pbmNsdWRlcygiLiIpP2k6dm9pZCAwO2lmKCFvKXJldHVybiB2b2lkIHIuZXZlbnRT''@;'; put 'put ''ZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIldlIGNvdWxkIG5vdCBmaWd1cmUgb3V0IHRoZSBmaWxlIG5hbWUgb2YgYGluZGV4Lmh0bWxgIGJhc2VkIG9uIHRoZSB1cmwuIik7Y29uc3QgYT15aWVsZCByLnNhc1NlcnZpY2UuZ2V0RmlsZUNvbnRlbnQoYCR7ci5hcHBMb2N9L3NlcnZpY2Vz''@;'; put 'put ''YCxvKTtpZighYSlyZXR1cm4gdm9pZCByLmxvZ2dlclNlcnZpY2UuZXJyb3IoYEZhaWxlZCB0byBnZXQgJHtvfSBhdCAke3IuYXBwTG9jfS9zZXJ2aWNlc2ApO2NvbnN0IGw9ci5nZXRDb21wdXRlQ29udGV4dE5hbWUoci5zZWxlY3RlZENvbXB1dGVDb250ZXh0KTtpZighbClyZXR1cm4gdm9p''@;'; put 'put ''ZCByLmxvZ2dlclNlcnZpY2UuZXJyb3IoYENvbXB1dGUgY29udGV4dCBuYW1lIG5vdCBmb3VuZCBmb3IgSUQ6ICR7ci5zZWxlY3RlZENvbXB1dGVDb250ZXh0fSB8IExpc3Q6ICR7SlNPTi5zdHJpbmdpZnkoci5jb21wdXRlQ29udGV4dHMpfWApO2NvbnN0IHU9YS5yZXBsYWNlKC9jb250ZXh0''@;'; put 'put ''bmFtZT0iW14iXSoiL2csKCk9PmBjb250ZXh0bmFtZT0iJHtsfSJgKTt5aWVsZCByLnNhc1NlcnZpY2UudXBkYXRlRmlsZUNvbnRlbnQoYCR7ci5hcHBMb2N9L3NlcnZpY2VzYCxvLHUpLmNhdGNoKGc9PntyLmxvZ2dlclNlcnZpY2UuZXJyb3IoYEZhaWxlZCB0byB1cGRhdGUgRGF0YUNvbnRy''@;'; put 'put ''b2xsZXIuaHRtbDogJHtnfWApfSl9KSgpfWRvd25sb2FkRmlsZShyLGksbz0idHh0Iil7dGhpcy5kZXBsb3lTZXJ2aWNlLmRvd25sb2FkRmlsZShyLGksbyl9b25Kc29uRmlsZUNoYW5nZShyKXt2YXIgaT10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtsZXQgbz1yLnRhcmdldC5maWxlc1sw''@;'; put 'put ''XTtpLmpzb25GaWxlPXlpZWxkIGkuZGVwbG95U2VydmljZS5yZWFkRmlsZShvKX0pKCl9cmVjcmVhdGVEYXRhYmFzZUNsaWNrZWQocil7ITA9PT1yLnRhcmdldC5jaGVja2VkJiYodGhpcy5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9ITApfWNsZWFyVXBsb2FkSW5wdXQocil7dGhpcy5kZXBsb3lT''@;'; put 'put ''ZXJ2aWNlLmNsZWFyVXBsb2FkSW5wdXQocil9b3BlblNhc1JlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vcGVuUmVxdWVzdHNNb2RhbCgpfW5hdmlnYXRlVG9Ib21lKCl7dGhpcy5vbk5hdmlnYXRlVG9Ib21lLmVtaXQoKX1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKSh6ZSh1ZCksemUobnhlKSx6ZShpYyksemUoQ2llKSx6ZSh4MyksemUoZmgpKX0sdGhpcy5cdTAyNzVjbXA9UHIoe3R5cGU6ZSxzZWxlY3RvcnM6W1siYXBwLWF1dG9tYXRpYy1kZXBsb3kiXV0saW5wdXRzOntzYXNKczoic2FzSnMiLHNhc0pz''@;'; put 'put ''Q29uZmlnOiJzYXNKc0NvbmZpZyIsZGNBZGFwdGVyU2V0dGluZ3M6ImRjQWRhcHRlclNldHRpbmdzIixhcHBMb2M6ImFwcExvYyIsZGNQYXRoOiJkY1BhdGgiLHNlbGVjdGVkQWRtaW5Hcm91cDoic2VsZWN0ZWRBZG1pbkdyb3VwIn0sb3V0cHV0czp7b25OYXZpZ2F0ZVRvSG9tZToib25OYXZp''@;'; put 'put ''Z2F0ZVRvSG9tZSJ9LHN0YW5kYWxvbmU6ITEsZGVjbHM6NzQsdmFyczoxNSxjb25zdHM6W1sxLCJhdXRvLWRlcGxveSJdLFsxLCJ0ZXh0LWNlbnRlciIsIm15LTE1Il0sWzEsImRlcGxveS1pbnRybyJdLFsxLCJkZXBsb3ktZmllbGQiXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwiZGVw''@;'; put 'put ''bG95LWZpZWxkLWRlc2NyaXB0aW9uIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsxLCJtLTAiXSxbImZvciIsImRjbG9jIiwxLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLCJkYy1sb2MtaW5wdXQt''@;'; put 'put ''d3JhcHBlciJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciIsInNtYWxsLW10Il0sWyJjbHJJbnB1dCIsIiIsIm5hbWUiLCJkY2xvYyIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImZvciIsImFkbWluR3JvdXAiLDEsImNsci1jb250cm9sLWxhYmVsIl0sWzEsIm10LTAiXSxbImlkIiwi''@;'; put 'put ''c2hvdy1hbGwtZ3JvdXBzLXRvZ2dsZSIsInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImZvciIsInNob3ctYWxsLWdyb3Vwcy10b2dnbGUiXSxbImNsclNlbGVjdCIsIiIsIm5hbWUiLCJhZG1pbkdyb3VwIiwzLCJuZ01vZGVs''@;'; put 'put ''Il0sWyJjbHJJbmxpbmUiLCIiLDEsInNwaW5uZXItc20iXSxbImZvciIsImNvbXB1dGVDb250ZXh0IiwxLCJjbHItY29udHJvbC1sYWJlbCJdLFsiaWQiLCJzaG93LWFsbC1jb250ZXh0cy10b2dnbGUiLCJ0eXBlIiwiY2hlY2tib3giLCJjbHJUb2dnbGUiLCIiLDMsIm5nTW9kZWxDaGFuZ2Ui''@;'; put 'put ''LCJuZ01vZGVsIl0sWyJmb3IiLCJzaG93LWFsbC1jb250ZXh0cy10b2dnbGUiXSxbImNsclNlbGVjdCIsIiIsIm5hbWUiLCJjb21wdXRlQ29udGV4dCIsMywibmdNb2RlbCJdLFsxLCJidG4tYXV0b2RlcGxveSIsImJ0biIsImJ0bi1wcmltYXJ5IiwiZC1pbmxpbmUtYmxvY2siLCJtci0xMCIs''@;'; put 'put ''MywiY2xpY2siXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXBy''@;'; put 'put ''aW1hcnkiLDMsImNsaWNrIl0sWzEsInNwaW5uZXItYm94Il0sWzEsInNwaW5uZXIiLCJzcGlubmVyLW1kIl0sWzEsIm0tMCIsImFsaWduLXNlbGYtc3RhcnQiXSxbMSwidy0xMDAiXSxbMSwiZGVwbG95LXN0YXR1cy1yb3ciXSxbMSwiYnV0dG9ucyJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIs''@;'; put 'put ''Im10LTE1IiwibXItMCIsMywiY2xpY2siXSxbInNoYXBlIiwidGltZXMtY2lyY2xlIiwxLCJkZXBsb3ktZXJyb3IiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnktb3V0bGluZSIsIm10LTE1IiwibXItMCIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXByaW1hcnktb3V0bGluZSIsIm10LTE1Iiwi''@;'; put 'put ''bXItMCIsImFsaWduLXNlbGYtZW5kIiwzLCJjbGljayJdLFsic2hhcGUiLCJzdWNjZXNzLXN0YW5kYXJkIiwxLCJkZXBsb3ktc3VjY2VzcyJdLFsiY2xyU2VsZWN0IiwiIiwibmFtZSIsImFkbWluR3JvdXAiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzMsInZhbHVlIl0sWyJmb3Ii''@;'; put 'put ''LCJiYXRjaElkIiwxLCJjbHItY29udHJvbC1sYWJlbCJdLFsiY2xyU2VsZWN0IiwiIiwibmFtZSIsImJhdGNoSWQiLDMsIm5nTW9kZWwiXSxbImNsclNlbGVjdCIsIiIsIm5hbWUiLCJiYXRjaElkIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2xyU2VsZWN0IiwiIiwibmFtZSIs''@;'; put 'put ''ImNvbXB1dGVDb250ZXh0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihpLG8pezEmaSYmKHZ0KDAsaEV0LDQsMiwiZGl2IiwwKSxKKDEsImg0IiwxKSxTZSgyLCJWaXlhIERlcGxveSIpLHRlKCksSigzLCJwIiwyKSxTZSg0LCIgQ29uZmlndXJlIGFu''@;'; put 'put ''ZCBkZXBsb3kgRGF0YSBDb250cm9sbGVyIHRvIHlvdXIgVml5YSBlbnZpcm9ubWVudC4gRGVwbG95bWVudCBjcmVhdGVzIHRoZSBiYWNrZW5kIFNBUyBzZXJ2aWNlcyBhbmQgdGhlIGNvbnRyb2wgbGlicmFyeSB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbi5cbiIpLHRlKCksSXQoNSwiaHIiKSxK''@;'; put 'put ''KDYsImRpdiIsMykoNywibGFiZWwiLDQpLFNlKDgsIkFwcCBMb2MiKSx0ZSgpLEooOSwicCIsNSksU2UoMTAsIiBUaGUgU0FTIGRyaXZlIGZvbGRlciBpbiB3aGljaCB0aGUgRGF0YSBDb250cm9sbGVyIGZyb250ZW5kIGFuZCBzZXJ2aWNlcyBhcmUgZGVwbG95ZWQuIERlcml2ZWQgZnJvbSB5''@;'; put 'put ''b3VyIGRlcGxveW1lbnQgY29uZmlndXJhdGlvbiBcdTIwMTQgaXQgY2Fubm90IGJlIGNoYW5nZWQgaGVyZS4gIiksdGUoKSxKKDExLCJkaXYiLDYpKDEyLCJkaXYiLDcpKDEzLCJwIiw4KSxTZSgxNCksdGUoKSgpKCkoKSxKKDE1LCJkaXYiLDMpKDE2LCJsYWJlbCIsOSksU2UoMTcsIkRDIExv''@;'; put 'put ''YyIpLHRlKCksSigxOCwicCIsNSksU2UoMTksIiBBIHBoeXNpY2FsIGRpcmVjdG9yeSBvbiB0aGUgY29tcHV0ZSBzZXJ2ZXIgdG8gd2hpY2ggdGhlIGRlcGxveW1lbnQgdXNlciBjYW4gd3JpdGUuIERhdGEgQ29udHJvbGxlciBzdG9yZXMgaXRzIGNvbnRyb2wgdGFibGVzLCBzdGFnaW5nIGFy''@;'; put 'put ''ZWEgYW5kIGF1ZGl0IGhpc3RvcnkgaGVyZS4gIiksdGUoKSxKKDIwLCJkaXYiLDEwKSgyMSwiZGl2IiwxMSkoMjIsImlucHV0IiwxMiksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGwpe3JldHVybiBmaShvLmRjUGF0aCxsKXx8KG8uZGNQYXRoPWwpLGx9KSx0ZSgpKCkoKSgpLEooMjMs''@;'; put 'put ''ImRpdiIsMykoMjQsImxhYmVsIiwxMyksU2UoMjUsIlNBUyBBZG1pbiBncm91cCIpLHRlKCksSigyNiwicCIsNSksU2UoMjcsIiBUaGUgZ3JvdXAgeW91IHNlbGVjdCBiZWNvbWVzIHRoZSBEYXRhIENvbnRyb2xsZXIgQWRtaW4gR3JvdXAgXHUyMDE0IGV2ZXJ5b25lIGluIGl0IHdpbGwgaGF2''@;'; put 'put ''ZSB1bnJlc3RyaWN0ZWQgYWNjZXNzIHRvIERhdGEgQ29udHJvbGxlci4gQnkgZGVmYXVsdCB0aGUgbGlzdCBpcyBmaWx0ZXJlZCB0byB0aGUgZ3JvdXBzIHlvdXIgaWRlbnRpdHkgIiksdnQoMjgsZkV0LDQsMSksU2UoMjksIiBpcyBhIG1lbWJlciBvZi4gVG9nZ2xlIGJlbG93IHRvIGxpc3Qg''@;'; put 'put ''ZXZlcnkgZ3JvdXAgb24gdGhlIFZpeWEgc2VydmVyLiAiKSx0ZSgpLEooMzAsImNsci10b2dnbGUtY29udGFpbmVyIiwxNCkoMzEsImNsci10b2dnbGUtd3JhcHBlciIpKDMyLCJpbnB1dCIsMTUpLGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihsKXtyZXR1cm4gZmkoby5zaG93QWxsR3Jv''@;'; put 'put ''dXBzLGwpfHwoby5zaG93QWxsR3JvdXBzPWwpLGx9KSx3dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gby5vblNob3dBbGxHcm91cHNDaGFuZ2UoKX0pLHRlKCksSigzMywibGFiZWwiLDE2KSxTZSgzNCwiU2hvdyBhbGwgZ3JvdXBzIiksdGUoKSgpKCksSigzNSwiZGl2Iiw2''@;'; put 'put ''KSgzNiwiZGl2IiwxMSksdnQoMzcsZ0V0LDMsMSwic2VsZWN0IiwxNyksdnQoMzgsbUV0LDEsMCwiY2xyLXNwaW5uZXIiLDE4KSx0ZSgpKCkoKSx2dCgzOSxiRXQsMTIsMiwiZGl2IiwzKSxKKDQwLCJkaXYiLDMpKDQxLCJsYWJlbCIsMTkpLFNlKDQyLCJDb21wdXRlIENvbnRleHQiKSx0ZSgp''@;'; put 'put ''LEooNDMsInAiLDUpLFNlKDQ0LCIgVGhlIGNvbXB1dGUgY29udGV4dCB1c2VkIHRvIHJ1biB0aGUgRGF0YSBDb250cm9sbGVyIHNlcnZpY2VzIChpbmNsdWRpbmcgdGhlICIpLEooNDUsImNvZGUiKSxTZSg0NiwibWFrZWRhdGEiKSx0ZSgpLFNlKDQ3LCIgZGVwbG95bWVudCBqb2IpLiBPbmx5''@;'; put 'put ''IHJldXNhYmxlIGNvbnRleHRzIG1hdGNoaW5nIHRoZSBzZWxlY3RlZCBCYXRjaCBJRCBhcmUgc2hvd24sIHVubGVzcyB0aGUgdG9nZ2xlIGJlbG93IGlzIGVuYWJsZWQuICIpLHRlKCksSig0OCwiY2xyLXRvZ2dsZS1jb250YWluZXIiLDE0KSg0OSwiY2xyLXRvZ2dsZS13cmFwcGVyIikoNTAs''@;'; put 'put ''ImlucHV0IiwyMCksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGwpe3JldHVybiBmaShvLnNob3dBbGxDb250ZXh0cyxsKXx8KG8uc2hvd0FsbENvbnRleHRzPWwpLGx9KSx3dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gby5vblNob3dBbGxDb250ZXh0c0NoYW5nZSgp''@;'; put 'put ''fSksdGUoKSxKKDUxLCJsYWJlbCIsMjEpLFNlKDUyLCJTaG93IGFsbCBjb21wdXRlIGNvbnRleHRzIiksdGUoKSgpKCksSig1MywiZGl2Iiw2KSg1NCwiZGl2IiwxMSksdnQoNTUsQ0V0LDMsMSwic2VsZWN0IiwyMiksdnQoNTYsU0V0LDEsMCwiY2xyLXNwaW5uZXIiLDE4KSx0ZSgpKCkoKSx2''@;'; put 'put ''dCg1NyxFRXQsMTAsMSwiZGl2IiwzKSxJdCg1OCwiaHIiKSxKKDU5LCJidXR0b24iLDIzKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG8ucnVuQXV0b0RlcGxveSgpfSksU2UoNjAsIiBEZXBsb3lcbiIpLHRlKCksSig2MSwiY2xyLW1vZGFsIiwyNCksaGkoImNsck1vZGFsT3BlbkNo''@;'; put 'put ''YW5nZSIsZnVuY3Rpb24obCl7cmV0dXJuIGZpKG8ucmVjcmVhdGVEYXRhYmFzZU1vZGFsLGwpfHwoby5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9bCksbH0pLEooNjIsImgzIiwyNSksU2UoNjMsIldhcm5pbmciKSx0ZSgpLEooNjQsImRpdiIsMjYpLFNlKDY1LCIgVGhpcyBhY3Rpb24gd2lsbCBy''@;'; put 'put ''ZWNyZWF0ZSB0aGUgZGF0YWJhc2UgKGlmIGl0IGV4aXN0cykuIEZvciBhbiBpbml0aWFsIGRlcGxveW1lbnQsIHRoaXMgaXMgZXhwZWN0ZWQuIElmIHRoaXMgaXMgYSByZS1kZXBsb3ltZW50LCB5b3Ugd2lsbCBsb3NlIGFueSBleGlzdGluZyB0YWJsZXMgaW4gIiksSig2Niwic3Ryb25nIiks''@;'; put 'put ''U2UoNjcpLHRlKCksU2UoNjgsIi4gIiksdGUoKSxKKDY5LCJkaXYiLDI3KSg3MCwiYnV0dG9uIiwyOCksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBvLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMSxvLnJlY3JlYXRlRGF0YWJhc2U9ITF9KSxTZSg3MSwiIENhbmNlbCAiKSx0ZSgpLEoo''@;'; put 'put ''NzIsImJ1dHRvbiIsMjgpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gby5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9ITEsby5yZWNyZWF0ZURhdGFiYXNlPSEwfSksU2UoNzMsIiBPayAiKSx0ZSgpKCkoKSksMiZpJiYoX3Qoby5hdXRvZGVwbG95aW5nPzA6LTEpLGllKDE0KSxwcihvLmFw''@;'; put 'put ''cExvYyksaWUoOCksZGkoIm5nTW9kZWwiLG8uZGNQYXRoKSxpZSg2KSxfdChudWxsIT1vLmN1cnJlbnRVc2VySW5mbyYmby5jdXJyZW50VXNlckluZm8uaWQ/Mjg6LTEpLGllKDQpLGRpKCJuZ01vZGVsIixvLnNob3dBbGxHcm91cHMpLGllKDUpLF90KG8uYWRtaW5Hcm91cHNMb2FkaW5nPy0x''@;'; put 'put ''OjM3KSxpZSgpLF90KG8uYWRtaW5Hcm91cHNMb2FkaW5nPzM4Oi0xKSxpZSgpLF90KG8uc2hvd0FsbENvbnRleHRzPy0xOjM5KSxpZSgxMSksZGkoIm5nTW9kZWwiLG8uc2hvd0FsbENvbnRleHRzKSxpZSg1KSxfdChvLmNvbXB1dGVDb250ZXh0c0xvYWRpbmc/LTE6NTUpLGllKCksX3Qoby5j''@;'; put 'put ''b21wdXRlQ29udGV4dHNMb2FkaW5nPzU2Oi0xKSxpZSgpLF90KG8ucnVubmluZ0FzVXNlcj81NzotMSksaWUoNCksZGkoImNsck1vZGFsT3BlbiIsby5yZWNyZWF0ZURhdGFiYXNlTW9kYWwpLHJ0KCJjbHJNb2RhbENsb3NhYmxlIiwhMSksaWUoNikscHIoby5kY1BhdGgpKX0sZGVwZW5kZW5j''@;'; put 'put ''aWVzOltYZyxRZyxsdSxIMixLZyxvYyxYbCxjdSx4ZCxtaCxlbCxVMixFdixGZixQZixxYix6Ml0sZW5jYXBzdWxhdGlvbjoyfSkpfXJldHVybiBuKCksZX0pKCk7Y29uc3QgY3NlPSgpPT4oe3N0YW5kYWxvbmU6ITB9KTtmdW5jdGlvbiBURXQobixlKXsxJm4mJihKKDAsImRpdiIsNCkoMSwi''@;'; put 'put ''cCIsNSksU2UoMiwiUGxlYXNlIGxvZyBpbiBmaXJzdCIpLHRlKCksSigzLCJsYWJlbCIsNiksU2UoNCwiVXNlcm5hbWUiKSx0ZSgpLEooNSwiZGl2Iiw3KSg2LCJkaXYiLDgpLEl0KDcsImlucHV0Iiw5KSx0ZSgpKCksSig4LCJsYWJlbCIsMTApLFNlKDksIlBhc3N3b3JkIiksdGUoKSxKKDEw''@;'; put 'put ''LCJkaXYiLDcpKDExLCJkaXYiLDgpLEl0KDEyLCJpbnB1dCIsMTEpLHRlKCkoKSxKKDEzLCJidXR0b24iLDEyKSxTZSgxNCwiTG9nIGluIiksdGUoKSgpKX1mdW5jdGlvbiB4RXQobixlKXtpZigxJm4mJihKKDAsIm9wdGlvbiIsMTgpLFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1lLiRpbXBs''@;'; put 'put ''aWNpdDtydCgidmFsdWUiLHQuaWQpLGllKCksU3IoIiAiLHQubmFtZSwiICIpfX1mdW5jdGlvbiBBRXQobixlKXtpZigxJm4mJihKKDAsInNwYW4iKSxTZSgxKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoKS4kaW1wbGljaXQ7aWUoKSxTcigiKCAiLHQuYXR0cmlidXRlcy5zeXNVc2VySWQsIiAp''@;'; put 'put ''Iil9fWZ1bmN0aW9uIGtFdChuLGUpe2lmKDEmbiYmKEooMCwib3B0aW9uIiwxOCksU2UoMSksdnQoMixBRXQsMiwxLCJzcGFuIiksQWMoMywianNvbiIpLHRlKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdDtydCgidmFsdWUiLHQubmFtZSksaWUoKSxTcigiICIsdC5uYW1lLCIgIiksaWUo''@;'; put 'put ''KSxfdCgie30iIT1UZCgzLDMsdC5hdHRyaWJ1dGVzKT8yOi0xKX19ZnVuY3Rpb24gUkV0KG4sZSl7MSZuJiYoSigwLCJzcGFuIiksU2UoMSwiSlNPTiBTdWJtaXR0ZWQgU3VjY2Vzc2Z1bGx5IiksdGUoKSl9ZnVuY3Rpb24gSUV0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJidXR0''@;'; put 'put ''b24iLDM0KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKDIpLmRvd25sb2FkU2FzUHJlY29kZUZpbGUoKSl9KSxJdCgxLCJjbHItaWNvbiIsMzUpLHRlKCl9fWZ1bmN0aW9uIERFdChuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwicCIsMzYpLFNlKDEsIkZp''@;'; put 'put ''bGUgZXhlY3V0ZSBjb21wbGV0ZWQiKSx0ZSgpLEl0KDIsImhyIiksSigzLCJkaXYiKSg0LCJidXR0b24iLDM3KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3QgaT1UZSgyKTtyZXR1cm4gWGUoaS5kb3dubG9hZEZpbGUoaS5qb2JMb2csImV4ZWN1dGUtc2NyaXB0LWxvZyIsInR4''@;'; put 'put ''dCIpKX0pLFNlKDUsIiBEb3dubG9hZCBsb2cgIiksdGUoKSgpfX1mdW5jdGlvbiBMRXQobixlKXtpZigxJm4mJihKKDAsImRpdiIsMzgpLFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgzKTtpZSgpLFNyKCIgIix0Lm1ha2VEYXRhUmVzcG9uc2UsIiAiKX19ZnVuY3Rpb24gT0V0KG4sZSl7''@;'; put 'put ''MSZuJiYoSigwLCJzcGFuIiwyMyksU2UoMSwiIFZhbGlkYXRpbmcgZGVwbG95Li4uICIpLHRlKCksSigyLCJzcGFuIiksU2UoMywiIFZhbGlkYXRpbmcgZGVwbG95Li4uICIpLHRlKCkpfWZ1bmN0aW9uIE5FdChuLGUpezEmbiYmKEl0KDAsImNsci1pY29uIiw0MSksSigxLCJzcGFuIiksU2Uo''@;'; put 'put ''MiwiIFZhbGlkYXRpb24gZmFpbGVkICIpLHRlKCkpfWZ1bmN0aW9uIEZFdChuLGUpezEmbiYmKEl0KDAsImNsci1pY29uIiw0MiksSigxLCJzcGFuIiksU2UoMiwiIFZhbGlkYXRpb24gc3VjY2VlZGVkICIpLHRlKCkpfWZ1bmN0aW9uIFBFdChuLGUpe2lmKDEmbiYmKEooMCwiZGl2Iiw0MCks''@;'; put 'put ''dnQoMSxPRXQsNCwwKSx2dCgyLE5FdCwzLDApLHZ0KDMsRkV0LDMsMCksdGUoKSksMiZuKXtjb25zdCB0PVRlKDMpO2llKCksX3QodC5pc1ZhbGlkYXRpbmc/MTotMSksaWUoKSxfdCh0LmlzVmFsaWRhdGluZ3x8ImVycm9yIiE9PXQudmFsaWRhdGlvblN0YXRlPy0xOjIpLGllKCksX3QodC5p''@;'; put 'put ''c1ZhbGlkYXRpbmd8fCJzdWNjZXNzIiE9PXQudmFsaWRhdGlvblN0YXRlPy0xOjMpfX1mdW5jdGlvbiBIRXQobixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsInAiLDM2KSxTZSgxLCJDcmVhdGUgRGF0YWJhc2UgQ29tcGxldGVkIiksdGUoKSxJdCgyLCJociIpLHZ0KDMsTEV0LDIsMSwi''@;'; put 'put ''ZGl2IiwzOCksSig0LCJidXR0b24iLDM5KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKDIpLm5hdmlnYXRlVG9Ib21lKCkpfSksU2UoNSwiIExldCdzIGdldCBzdGFydGVkICIpLHRlKCksSig2LCJidXR0b24iLDM5KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7WWUo''@;'; put 'put ''dCk7Y29uc3QgaT1UZSgyKTtyZXR1cm4gWGUoaS5kb3dubG9hZEZpbGUoaS5tYWtlRGF0YVJlc3BvbnNlLCJjcmVhdGUtZGF0YWJhc2UtbG9nIiwidHh0IikpfSksU2UoNywiIERvd25sb2FkIGxvZyAiKSx0ZSgpLEooOCwiYnV0dG9uIiwzOSksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBZZSh0KSxYZShUZSgyKS52YWxpZGF0ZURlcGxveSgpKX0pLFNlKDksIiBWYWxpZGF0ZSAiKSx0ZSgpLHZ0KDEwLFBFdCw0LDMsImRpdiIsNDApfWlmKDImbil7Y29uc3QgdD1UZSgyKTtpZSgzKSxfdCh0Lm1ha2VEYXRhUmVzcG9uc2UubGVuZ3RoPjA/MzotMSksaWUoNyksX3QoIm5vbmUi''@;'; put 'put ''IT09dC52YWxpZGF0aW9uU3RhdGV8fHQuaXNWYWxpZGF0aW5nPzEwOi0xKX19ZnVuY3Rpb24gVkV0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJmb3JtIikoMSwiZGl2IiwxMykoMiwibGFiZWwiLDE0KSxTZSgzLCJBZG1pbiBncm91cCIpLHRlKCksSig0LCJkaXYiLDE1KSg1LCJk''@;'; put 'put ''aXYiLDE2KSg2LCJzZWxlY3QiLDE3KSxoaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgpO3JldHVybiBmaShvLnNlbGVjdGVkQWRtaW5Hcm91cCxpKXx8KG8uc2VsZWN0ZWRBZG1pbkdyb3VwPWkpLFhlKGkpfSksX28oNyx4RXQsMiwyLCJvcHRpb24iLDE4''@;'; put 'put ''LENvKSx0ZSgpKCkoKSgpLEooOSwiZGl2IiwxMykoMTAsImRpdiIpKDExLCJsYWJlbCIsMTQpLFNlKDEyLCJDb250ZXh0IiksdGUoKSxKKDEzLCJkaXYiLDE1KSgxNCwiZGl2IiwxNikoMTUsInNlbGVjdCIsMTkpLGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBv''@;'; put 'put ''PVRlKCk7cmV0dXJuIGZpKG8uc2VsZWN0ZWRDb250ZXh0LGkpfHwoby5zZWxlY3RlZENvbnRleHQ9aSksWGUoaSl9KSxfbygxNixrRXQsNCw1LCJvcHRpb24iLDE4LENvKSx0ZSgpKCkoKSxKKDE4LCJidXR0b24iLDIwKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRl''@;'; put 'put ''KCkuZXhlY3V0YWJsZUNvbnRleHQoKSl9KSxJdCgxOSwiY2xyLWljb24iLDIxKSx0ZSgpKCksSigyMCwiZGl2IiwyMikoMjEsInNwYW4iLDIzKSxTZSgyMiwiIExvYWRpbmcgY29udGV4dHMuLi4gIiksdGUoKSxKKDIzLCJzcGFuIiksU2UoMjQsIiBMb2FkaW5nIGNvbnRleHRzLi4uICIpLHRl''@;'; put 'put ''KCkoKSxKKDI1LCJsYWJlbCIsMjQpLFNlKDI2LCJEQyBMb2MiKSx0ZSgpLEooMjcsImRpdiIsNykoMjgsImRpdiIsOCkoMjksImlucHV0IiwyNSksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoKTtyZXR1cm4gZmkoby5kY1BhdGgsaSl8fChvLmRjUGF0''@;'; put 'put ''aD1pKSxYZShpKX0pLHd0KCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoKS5zYXZlRGNQYXRoKCkpfSksdGUoKSgpKCksSigzMCwicCIsMjYpLFNlKDMxLCIgU2VsZWN0IEpTT04gZmlsZSB0byB1cGxvYWQgKGpzb24gYnVpbGQgZmlsZSBwcmVsb2FkZWQpOiAiKSx0''@;'; put 'put ''ZSgpLEooMzIsImRpdiIsMjcpKDMzLCJpbnB1dCIsMjgpLHd0KCJjbGljayIsZnVuY3Rpb24oaSl7cmV0dXJuIFllKHQpLFhlKFRlKCkuY2xlYXJVcGxvYWRJbnB1dChpKSl9KSgiY2hhbmdlIixmdW5jdGlvbihpKXtyZXR1cm4gWWUodCksWGUoVGUoKS5vbkpzb25GaWxlQ2hhbmdlKGkpKX0p''@;'; put 'put ''LHRlKCkoKSxKKDM0LCJkaXYiLDI5KSgzNSwiYnV0dG9uIiwzMCksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLmV4ZWN1dGVKc29uKCkpfSksU2UoMzYsIiBTVUJNSVQgSlNPTiAiKSx0ZSgpLHZ0KDM3LFJFdCwyLDAsInNwYW4iKSx0ZSgpLEooMzgsInAiLDI2''@;'; put 'put ''KSxTZSgzOSwiU2VsZWN0IFNBUyBmaWxlIHRvIHVwbG9hZDoiKSx0ZSgpLEooNDAsImRpdiIsMjcpKDQxLCJpbnB1dCIsMjgpLHd0KCJjbGljayIsZnVuY3Rpb24oaSl7cmV0dXJuIFllKHQpLFhlKFRlKCkuY2xlYXJVcGxvYWRJbnB1dChpKSl9KSgiY2hhbmdlIixmdW5jdGlvbihpKXtZZSh0''@;'; put 'put ''KTtjb25zdCBvPVRlKCk7cmV0dXJuIG8ub25TYXNGaWxlQ2hhbmdlKGkpLFhlKG8uZG93bmxvYWRGaWxlQnRuPSEwKX0pLHRlKCksdnQoNDIsSUV0LDIsMCwiYnV0dG9uIiwzMSksdGUoKSxKKDQzLCJkaXYiLDI5KSg0NCwiYnV0dG9uIiwzMiksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBZZSh0KSxYZShUZSgpLmV4ZWN1dGVTQVMoKSl9KSxTZSg0NSwiIFNVQk1JVCAiKSx0ZSgpKCkoKSx2dCg0NixERXQsNiwwKSxKKDQ3LCJidXR0b24iLDMzKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCkuY3JlYXRlRGF0YWJhc2UoKSl9KSxTZSg0OCwiIENy''@;'; put 'put ''ZWF0ZSBEYXRhYmFzZSAiKSx0ZSgpLHZ0KDQ5LEhFdCwxMSwyKSx0ZSgpfWlmKDImbil7Y29uc3QgdD1UZSgpO2llKDYpLGRpKCJuZ01vZGVsIix0LnNlbGVjdGVkQWRtaW5Hcm91cCkscnQoIm5nTW9kZWxPcHRpb25zIixtYygxNyxjc2UpKSxpZSgpLHlvKHQuYWRtaW5Hcm91cHMpLGllKDMp''@;'; put 'put ''LHdyKCJoaWRkZW4iLHQuY29udGV4dHNMb2FkaW5nKSxpZSg1KSxkaSgibmdNb2RlbCIsdC5zZWxlY3RlZENvbnRleHQpLHJ0KCJuZ01vZGVsT3B0aW9ucyIsbWMoMTgsY3NlKSksaWUoKSx5byh0LmFsbENvbnRleHRzKSxpZSg0KSx3cigiaGlkZGVuIiwhdC5jb250ZXh0c0xvYWRpbmcpLGll''@;'; put 'put ''KDkpLGRpKCJuZ01vZGVsIix0LmRjUGF0aCkscnQoIm5nTW9kZWxPcHRpb25zIixtYygxOSxjc2UpKSxpZSg2KSxydCgiY2xyTG9hZGluZyIsdC5pc1N1Ym1pdHRpbmdKc29uKSxpZSgyKSxfdCh0LmlzSnNvblN1Ym1pdHRlZD8zNzotMSksaWUoNSksX3QodC5kb3dubG9hZEZpbGVCdG4/NDI6''@;'; put 'put ''LTEpLGllKDIpLHJ0KCJjbHJMb2FkaW5nIix0LmV4ZWN1dGluZ1NjcmlwdCksaWUoMiksX3QodC5qb2JMb2cubGVuZ3RoPjA/NDY6LTEpLGllKCkscnQoImNsckxvYWRpbmciLHQuY3JlYXRlRGF0YWJhc2VMb2FkaW5nKSxpZSgyKSxfdCh0Lm1ha2VEYXRhUmVzcG9uc2UubGVuZ3RoPjA/NDk6''@;'; put 'put ''LTEpfX1sZXQgQkV0PSgoKT0+e3ZhciBuO2NsYXNzIGV7Y29uc3RydWN0b3IocixpLG8sYSl7dGhpcy5zYXNTZXJ2aWNlPXIsdGhpcy5ldmVudFNlcnZpY2U9aSx0aGlzLmxvZ2dlclNlcnZpY2U9byx0aGlzLmRlcGxveVNlcnZpY2U9YSx0aGlzLnNhc0pzQ29uZmlnPW5ldyB4cC5TQVNqc0Nv''@;'; put 'put ''bmZpZyx0aGlzLm9uTmF2aWdhdGVUb0hvbWU9bmV3IEtyLHRoaXMubmVlZHNMb2dpbj0hMSx0aGlzLmFkbWluR3JvdXBzPVtdLHRoaXMuYWxsQ29udGV4dHM9W10sdGhpcy5hcHBMb2M9IiIsdGhpcy5kY1BhdGg9IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IiIsdGhpcy5zZWxlY3RlZENv''@;'; put 'put ''bnRleHQ9IiIsdGhpcy5qb2JMb2c9IiIsdGhpcy5tYWtlRGF0YVJlc3BvbnNlPSIiLHRoaXMubGluZXNPZkNvZGU9W10sdGhpcy5maWxlTmFtZT0iIix0aGlzLnByZWxvYWRlZEZpbGU9ITAsdGhpcy5leGVjdXRlU0FTRW5hYmxlZD0hMSx0aGlzLmNvbnRleHRzTG9hZGluZz0hMSx0aGlzLmNy''@;'; put 'put ''ZWF0ZURhdGFiYXNlTG9hZGluZz0hMSx0aGlzLmV4ZWN1dGluZ1NjcmlwdD0hMSx0aGlzLmRvd25sb2FkRmlsZUJ0bj0hMSx0aGlzLmlzVmFsaWRhdGluZz0hMSx0aGlzLmpzb25GaWxlPW51bGwsdGhpcy5pc1N1Ym1pdHRpbmdKc29uPSExLHRoaXMuaXNKc29uU3VibWl0dGVkPSExLHRoaXMu''@;'; put 'put ''dmFsaWRhdGlvblN0YXRlPSJub25lIn1uZ09uSW5pdCgpe31leGVjdXRhYmxlQ29udGV4dCgpe3JldHVybiBDcihmdW5jdGlvbiooKXt9KSgpfWNsZWFyVXBsb2FkSW5wdXQocil7dGhpcy5kZXBsb3lTZXJ2aWNlLmNsZWFyVXBsb2FkSW5wdXQocil9b25TYXNGaWxlQ2hhbmdlKHIpe3RoaXMu''@;'; put 'put ''cHJlbG9hZGVkRmlsZT0hMTtsZXQgaT1yLnRhcmdldC5maWxlc1swXTt0aGlzLmZpbGVOYW1lPWkubmFtZTtsZXQgbz1uZXcgRmlsZVJlYWRlcjtvLm9ubG9hZD0oKT0+e28ucmVzdWx0JiYodGhpcy5saW5lc09mQ29kZT1vLnJlc3VsdC5zcGxpdCgiXG4iKSx0aGlzLmxpbmVzT2ZDb2RlPXRo''@;'; put 'put ''aXMubGluZXNPZkNvZGUuZmlsdGVyKGE9PiIiIT09YSYmbnVsbCE9PWEpLHRoaXMuZXhlY3V0ZVNBU0VuYWJsZWQ9ITAsdGhpcy5hZGRQcmVjb2RlTGluZXMoKSl9LG8ucmVhZEFzVGV4dChpKX1vbkpzb25GaWxlQ2hhbmdlKHIpe3ZhciBpPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe2xl''@;'; put 'put ''dCBvPXIudGFyZ2V0LmZpbGVzWzBdO2kuanNvbkZpbGU9eWllbGQgaS5kZXBsb3lTZXJ2aWNlLnJlYWRGaWxlKG8pfSkoKX1hZGRQcmVjb2RlTGluZXMoKXt0aGlzLmxpbmVzT2ZDb2RlLnVuc2hpZnQoYCVsZXQgY29udGV4dD0ke3RoaXMuc2VsZWN0ZWRDb250ZXh0fTtgLGAlbGV0IGFwcExv''@;'; put 'put ''Yz0ke3RoaXMuYXBwTG9jfTtgLGAlbGV0IGFkbWluPSR7dGhpcy5zZWxlY3RlZEFkbWluR3JvdXB9O2AsYCVsZXQgZGNwYXRoPSR7dGhpcy5kY1BhdGh9O2ApfWRvd25sb2FkU2FzUHJlY29kZUZpbGUoKXtsZXQgcj10aGlzLmxpbmVzT2ZDb2RlLmpvaW4oIlxuIiksaT10aGlzLmZpbGVOYW1l''@;'; put 'put ''LnNwbGl0KCIuIilbMF07dGhpcy5kb3dubG9hZEZpbGUocixpLCJzYXMiKX1kb3dubG9hZEZpbGUocixpLG89InR4dCIpe3RoaXMuZGVwbG95U2VydmljZS5kb3dubG9hZEZpbGUocixpLG8pfXNhdmVEY1BhdGgoKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiZGVwbG95X2RjX2xvYyIsdGhpcy5k''@;'; put 'put ''Y1BhdGgpfWV4ZWN1dGVKc29uKCl7dmFyIHI9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7ci5pc1N1Ym1pdHRpbmdKc29uPSEwO3RyeXt5aWVsZCByLnNhc0pzLmRlcGxveVNlcnZpY2VQYWNrKHIuanNvbkZpbGUsci5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiIix2b2lkIDAsdm9p''@;'; put 'put ''ZCAwLCEwKSxyLmlzSnNvblN1Ym1pdHRlZD0hMH1jYXRjaChpKXtsZXQgbz0iIjtyZXR1cm4gbz0ic3RyaW5nIiE9dHlwZW9mIGkubWVzc2FnZT9KU09OLnN0cmluZ2lmeShpKS5yZXBsYWNlKC9cXC9nbSwiIik6aS5tZXNzYWdlLHZvaWQgci5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgi''@;'; put 'put ''RGVwbG95IGVycm9yIixgRXhjZXB0aW9uOiBcbiAkeyIiIT09bz9vOml9YCl9ci5pc1N1Ym1pdHRpbmdKc29uPSExfSkoKX1leGVjdXRlU0FTKCl7dmFyIHI9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7ci5leGVjdXRpbmdTY3JpcHQ9ITAsci5qb2JMb2c9IiIsci5tYWtlRGF0YVJlc3Bv''@;'; put 'put ''bnNlPSIiO3RyeXtsZXQgaT15aWVsZCByLnNhc0pzLmV4ZWN1dGVTY3JpcHQoe2ZpbGVOYW1lOnIuZmlsZU5hbWUsbGluZXNPZkNvZGU6ci5saW5lc09mQ29kZSxjb250ZXh0TmFtZTpyLnNlbGVjdGVkQ29udGV4dH0pO3IubG9nZ2VyU2VydmljZS5sb2coaSksInN0cmluZyI9PXR5cGVvZiBp''@;'; put 'put ''LmxvZyYmKGkubG9nPUpTT04ucGFyc2UoaS5sb2cpKSwiZXJyb3IiPT09aS5qb2JTdGF0dXM/YWxlcnQoIkVycm9yISIpOnIuam9iTG9nPWkubG9nLml0ZW1zP2kubG9nLml0ZW1zLm1hcChvPT5vLmxpbmUpLmpvaW4oIlxuIik6SlNPTi5zdHJpbmdpZnkoaS5sb2cpLHIuZXhlY3V0aW5nU2Ny''@;'; put 'put ''aXB0PSExfWNhdGNoe3IuZXhlY3V0aW5nU2NyaXB0PSExfX0pKCl9Y3JlYXRlRGF0YWJhc2Uocj0hMCl7aWYocil7bGV0IGw9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCkuc2VydmVyVXJsKyIvU0FTSm9iRXhlY3V0aW9uLz9fcHJvZ3JhbT0iK3RoaXMuZGNBZGFwdGVyU2V0dGlu''@;'; put 'put ''Z3M/LmFwcExvY3x8Ii9hZG1pbi9tYWtlZGF0YSZBRE1JTj0iK3RoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwKyImRENQQVRIPSIrdGhpcy5kY1BhdGgrIiZfZGVidWc9MTMxIjtyZXR1cm4gdm9pZCB3aW5kb3cub3BlbihsLCJfYmxhbmsiKX10aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMCx0''@;'; put 'put ''aGlzLnNhc0pzLnJlcXVlc3QoInNlcnZpY2VzL2FkbWluL21ha2VkYXRhIix7ZnJvbWpzOlt7QURNSU46dGhpcy5zZWxlY3RlZEFkbWluR3JvdXAsRENQQVRIOnRoaXMuZGNQYXRofV19LHt1c2VDb21wdXRlQXBpOm51bGwsY29udGV4dE5hbWU6dGhpcy5zYXNKc0NvbmZpZy5jb250ZXh0TmFt''@;'; put 'put ''ZSxkZWJ1ZzohMH0sKCk9Pnt0aGlzLnNhc1NlcnZpY2Uuc2hvdWxkTG9naW4ubmV4dCghMCl9KS50aGVuKGE9Pnt0cnl7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpTT04uc3RyaW5naWZ5KGEpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1hfXRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5n''@;'; put 'put ''PSExfSkuY2F0Y2goYT0+e3RoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExO3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoYSl9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWF9fSl9bmF2aWdhdGVUb0hvbWUoKXt0aGlzLm9uTmF2aWdhdGVUb0hvbWUuZW1p''@;'; put 'put ''dCgpfXZhbGlkYXRlRGVwbG95KCl7dGhpcy5pc1ZhbGlkYXRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9zdGFydHVwc2VydmljZSIsbnVsbCkudGhlbihyPT57dGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhyLmFkYXB0ZXJSZXNwb25zZSk7Y29uc3QgaT1td2Uoci5hZGFw''@;'; put 'put ''dGVyUmVzcG9uc2UpO2k/KHRoaXMudmFsaWRhdGlvblN0YXRlPSJlcnJvciIsdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLGkpKTp0aGlzLnZhbGlkYXRpb25TdGF0ZT1yLmFkYXB0ZXJSZXNwb25zZS5zYXNsaWJzPyJzdWNjZXNzIjoiZXJyb3IiLHRoaXMuaXNWYWxp''@;'; put 'put ''ZGF0aW5nPSExfSkuY2F0Y2gocj0+e3RoaXMuaXNWYWxpZGF0aW5nPSExLHRoaXMudmFsaWRhdGlvblN0YXRlPSJlcnJvciJ9KX1kZWxldGVLZXlzKCl7bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oImRlcGxveV9kY19sb2MiKX1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oaSl7cmV0dXJuIG5ldyhpfHxlKSh6ZShpYyksemUodWQpLHplKHgzKSx6ZShueGUpKX0sdGhpcy5cdTAyNzVjbXA9UHIoe3R5cGU6ZSxzZWxlY3RvcnM6W1siYXBwLW1hbnVhbC1kZXBsb3kiXV0saW5wdXRzOntzYXNKczoic2FzSnMiLHNhc0pzQ29uZmlnOiJzYXNKc0NvbmZpZyIsZGNB''@;'; put 'put ''ZGFwdGVyU2V0dGluZ3M6ImRjQWRhcHRlclNldHRpbmdzIn0sb3V0cHV0czp7b25OYXZpZ2F0ZVRvSG9tZToib25OYXZpZ2F0ZVRvSG9tZSJ9LHN0YW5kYWxvbmU6ITEsZGVjbHM6OSx2YXJzOjMsY29uc3RzOltbMSwiY2FyZC1oZWFkZXIiLCJwb3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJkLWlu''@;'; put 'put ''bGluZS1ibG9jayIsIm1sLTEwIiwibWItMTAiLCJtdC0wIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwiY2xlYXItbWVtb3J5LWJ1dHRvbiIsInBvc2l0aW9uLWFic29sdXRlIiwzLCJjbGljayJdLFsxLCJjYXJkLWJsb2NrIl0sWyJpZCIsImxvZ2luRm9ybSIsMSwiZC1ub25lIl0sWzEsIm1i''@;'; put 'put ''LTEwIl0sWyJmb3IiLCJ1c2VybmFtZSIsMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwibWItMTAiLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbInR5cGUiLCJ0ZXh0IiwiaWQiLCJ1c2VybmFtZSIsMSwiY2xyLWlucHV0Il0sWyJmb3IiLCJwYXNz''@;'; put 'put ''d29yZCIsMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbInR5cGUiLCJwYXNzd29yZCIsImlkIiwicGFzc3dvcmQiLDEsImNsci1pbnB1dCJdLFsiaWQiLCJsb2dpbkJ0biIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJkLW5vbmUiXSxbMSwiY2xyLWZvcm0tY29udHJvbCJdLFsiZm9yIiwic2VsZWN0''@;'; put 'put ''LWZ1bGwiLDEsImNsci1jb250cm9sLWxhYmVsIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItc2VsZWN0LXdyYXBwZXIiXSxbIm5hbWUiLCJzZWxlY3RlZEFkbWluR3JvdXAiLCJpZCIsImFkbWluR3JvdXBzU2VsZWN0IiwxLCJjbHItc2VsZWN0IiwzLCJuZ01vZGVsQ2hh''@;'; put 'put ''bmdlIiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIl0sWzMsInZhbHVlIl0sWyJuYW1lIiwic2VsZWN0ZWRDb250ZXh0IiwxLCJjbHItc2VsZWN0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIl0sWyJ0eXBlIiwiYnV0dG9uIiwiaWQiLCJjb250ZXh0cy1i''@;'; put 'put ''dG4iLDEsImJ0biIsImJ0bi1pY29uIiwzLCJjbGljayJdLFsic2hhcGUiLCJwbGF5Il0sWzEsImQtZmxleCJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiLCJtci0xMCJdLFsiZm9yIiwiZGNsb2MiLDEsIm10LTIwIiwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbIm5hbWUiLCJkY1BhdGgi''@;'; put 'put ''LCJ0eXBlIiwidGV4dCIsImlkIiwiZGNsb2MiLDEsImNsci1pbnB1dCIsMywibmdNb2RlbENoYW5nZSIsImZvY3Vzb3V0IiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIl0sWzEsIm10LTEwIl0sWzEsImQtZmxleCIsImZsZXgtY29sdW1uIl0sWyJ0eXBlIiwiZmlsZSIsMywiY2xpY2siLCJj''@;'; put 'put ''aGFuZ2UiXSxbMSwibXQtMjAiLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImlkIiwiIiwxLCJtdC0wIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJtaW4tdy0wIiwidy00MCJdLFsiaWQiLCJkZXBsb3kiLDEsIm10LTAiLDMs''@;'; put 'put ''ImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTEwIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJtaW4tdy0wIiwidy00MCIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbMSwibWItMCIs''@;'; put 'put ''Im10LTEwIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMCIsIm1yLTIwIiwzLCJjbGljayJdLFsxLCJsb2ctd3JhcHBlciJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTE1IiwzLCJjbGljayJdLFsxLCJ2YWxpZGF0aW9uLWJhciJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJj''@;'; put 'put ''bGUiLDEsImlzLWVycm9yIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsMSwiaXMtc3VjY2VzcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihpLG8pezEmaSYmKEooMCwiZGl2IiwwKSxTZSgxLCIgQ29uZmlndXJhdG9yICIpLEooMiwicCIsMSksU2UoMyksdGUoKSxKKDQsImJ1dHRvbiIsMiksd3Qo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBvLmRlbGV0ZUtleXMoKX0pLFNlKDUsIiBDbGVhciBtZW1vcnkgIiksdGUoKSgpLEooNiwiZGl2IiwzKSx2dCg3LFRFdCwxNSwwLCJkaXYiLDQpLHZ0KDgsVkV0LDUwLDIwLCJmb3JtIiksdGUoKSksMiZpJiYoaWUoMyksU3IoIkFwcCBMb2NhdGlv''@;'; put 'put ''bjogIixvLmFwcExvYyksaWUoNCksX3Qoby5uZWVkc0xvZ2luPzc6LTEpLGllKCksX3Qoby5uZWVkc0xvZ2luPy0xOjgpKX0sZGVwZW5kZW5jaWVzOltMYixYZyxRZyxsdSxLZyxvYyxJYixYbCxkNCxjdSwkMCxpbSxlbCxLbmVdLGVuY2Fwc3VsYXRpb246Mn0pKX1yZXR1cm4gbigpLGV9KSgp''@;'; put 'put ''O2Z1bmN0aW9uIGpFdChuLGUpezEmbiYmKEooMCwiZGl2IiwwKSxJdCgxLCJwcm9ncmVzcyIpLHRlKCkpfWZ1bmN0aW9uIFVFdChuLGUpe2lmKDEmbiYmKEooMCwib3B0aW9uIiwxMSksU2UoMSksdGUoKSksMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0O3J0KCJ2YWx1ZSIsdC5HUk9VUE5BTUUp''@;'; put 'put ''LGllKCksTmgoIiAiLHQuR1JPVVBOQU1FLCIgLSAiLHQuR1JPVVBERVNDLCIgIil9fWxldCB6RXQ9KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3RvcihyLGksbyl7dGhpcy5zYXNTZXJ2aWNlPXIsdGhpcy5zYXNqc1NlcnZpY2U9aSx0aGlzLmxvY2F0aW9uPW8sdGhpcy5zYXNKc0NvbmZp''@;'; put 'put ''Zz1uZXcgeHAuU0FTanNDb25maWcsdGhpcy5vbk5hdmlnYXRlVG9Ib21lPW5ldyBLcix0aGlzLmRjRGlyZWN0b3J5PSIiLHRoaXMuZGNBZG1pbkdyb3VwPSJEQ0RFRkFVTFQiLHRoaXMuTUVUQVBFUlNPTj0ibi9hIix0aGlzLk1FVEFVU0VSPSJuL2EiLHRoaXMuU1lTVVNFUklEPSJuL2EiLHRo''@;'; put 'put ''aXMuU1lTSE9TVE5BTUU9Im4vYSIsdGhpcy5TWVNWTE9ORz0ibi9hIix0aGlzLmRjQWRtaW5Hcm91cExpc3Q9W10sdGhpcy5sb2FkaW5nPSExLHRoaXMuc2hvd0xvZ291dD0hMSx0aGlzLnRtcERpcmVjdG9yaWVzPXtsaW51eDoiL3RtcC9EYXRhQ29udHJvbGxlciIsd2luZG93czoiQzpcXERh''@;'; put 'put ''dGFDb250cm9sbGVyIn19bmdPbkluaXQoKXt0aGlzLmdldFVzZXJHcm91cHMoKSx0aGlzLmdldFNlcnZlckluZm8oKX1nZXRTZXJ2ZXJJbmZvKCl7dGhpcy5zYXNqc1NlcnZpY2UuZ2V0U2VydmVySW5mbygpLnN1YnNjcmliZShyPT57ImRlc2t0b3AiIT09ci5tb2RlJiYodGhpcy5zaG93TG9n''@;'; put 'put ''b3V0PSEwKX0pfWdldFVzZXJHcm91cHMoKXt0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcmdyb3Vwc2J5bWVtYmVyIixudWxsKS50aGVuKHI9Pnt0aGlzLk1FVEFQRVJTT049ci5hZGFwdGVyUmVzcG9uc2UuTUZfR0VUVVNFUix0aGlzLlNZU1VT''@;'; put 'put ''RVJJRD1yLmFkYXB0ZXJSZXNwb25zZS5TWVNVU0VSSUQsdGhpcy5TWVNIT1NUTkFNRT1yLmFkYXB0ZXJSZXNwb25zZS5TWVNIT1NUTkFNRSx0aGlzLlNZU1ZMT05HPXIuYWRhcHRlclJlc3BvbnNlLlNZU1ZMT05HLHRoaXMuZGNEaXJlY3Rvcnk9dGhpcy50bXBEaXJlY3Rvcmllc1tbIkwiLCJI''@;'; put 'put ''IiwiQSIsIlMiXS5pbmNsdWRlcyhyLmFkYXB0ZXJSZXNwb25zZS5TWVNTQ1BMLnN1YnN0cmluZygwLDEpKT8ibGludXgiOiJ3aW5kb3dzIl0sdGhpcy5kY0FkbWluR3JvdXBMaXN0PXIuYWRhcHRlclJlc3BvbnNlLmdyb3Vwcyx0aGlzLmRjQWRtaW5Hcm91cD10aGlzLmRjQWRtaW5Hcm91cExp''@;'; put 'put ''c3RbMF0uR1JPVVBOQU1FLHRoaXMubG9hZGluZz0hMX0scj0+e3RoaXMubG9hZGluZz0hMX0pfW1ha2VEYXRhKCl7bGV0IGk9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTtjb25zdCBvPXRoaXMuc2FzSnNDb25maWcuYXBwTG9jO2xldCBhPXRoaXMuc2FzSnNDb25maWcuc2Vy''@;'; put 'put ''dmVyVXJsLGw9dGhpcy5kY0RpcmVjdG9yeTt0aGlzLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1fMC5ZLlNhc2pzP3RoaXMuc2FzU2VydmljZS5zYXNqc01ha2VkYXRhQ2hlY2tpbmcoKS50aGVuKGc9PntnJiYodGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoIi8iKSxsb2NhdGlvbi5yZWxv''@;'; put 'put ''YWQoKSl9KTp0aGlzLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1fMC5ZLlNhczkmJihhPSIiLGk9d2luZG93LmxvY2F0aW9uLm9yaWdpbitpKyIvIixsPWVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmRjRGlyZWN0b3J5KSksd2luZG93Lm9wZW4oYCR7YXx8IiJ9JHtpfT9fcHJvZ3JhbT0ke299''@;'; put 'put ''L3NlcnZpY2VzL2FkbWluL21ha2VkYXRhJmFkbWluPSR7dGhpcy5kY0FkbWluR3JvdXB9JnBhdGg9JHtsfSZfZGVidWc9MTMxYCwiX2JsYW5rIil9bG9nb3V0KCl7dGhpcy5zYXNTZXJ2aWNlLmxvZ291dCgpfXN0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1''@;'; put 'put ''cm4gbmV3KGl8fGUpKHplKGljKSx6ZShWd2UpLHplKFYwKSl9LHRoaXMuXHUwMjc1Y21wPVByKHt0eXBlOmUsc2VsZWN0b3JzOltbImFwcC1zYXNqcy1jb25maWd1cmF0b3IiXV0saW5wdXRzOntzYXNKczoic2FzSnMiLHNhc0pzQ29uZmlnOiJzYXNKc0NvbmZpZyIsZGNBZGFwdGVyU2V0dGlu''@;'; put 'put ''Z3M6ImRjQWRhcHRlclNldHRpbmdzIn0sb3V0cHV0czp7b25OYXZpZ2F0ZVRvSG9tZToib25OYXZpZ2F0ZVRvSG9tZSJ9LHN0YW5kYWxvbmU6ITEsZGVjbHM6NDUsdmFyczo5LGNvbnN0czpbWzEsInRoaW5Qcm9ncmVzcyIsInByb2dyZXNTdGF0aWMiLCJwcm9ncmVzcyIsImxvb3AiXSxbMSwi''@;'; put 'put ''dGV4dC1jZW50ZXIiLCJteS0xNSJdLFsxLCJsaWdodCJdLFsxLCJtLTAiXSxbMSwibS0wIiwibXQtMTAiXSxbMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsicGxhY2Vob2xk''@;'; put 'put ''ZXIiLCJUeXBlIGluIGRpcmVjdG9yeSIsMSwiY2xyLWlucHV0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsxLCJtYi0xMCIsIm10LTAiLCJ3LTUwdnciXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywidmFsdWUiXSxbMSwiY2xyLWZsZXgi''@;'; put 'put ''XSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLCJtdC0xNSIsInRleHQtY2VudGVyIiwzLCJjbGljayJdLFsxLCJjYXJkLXRleHQiLCJwYi0xMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihpLG8pezEmaSYmKHZ0KDAsakV0LDIsMCwiZGl2IiwwKSxKKDEsImg0IiwxKSxTZSgyLCJTYXNqcyBEZXBsb3ki''@;'; put 'put ''KSx0ZSgpLEl0KDMsImhyIiwyKSxKKDQsInAiLDMpLFNlKDUsIiBUbyBjb25maWd1cmUgRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5LCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6XG4iKSx0ZSgpLEooNiwicCIsNCksU2UoNywiIFBsZWFzZSBzcGVjaWZ5IGEgcGh5''@;'; put 'put ''c2ljYWwgZGlyZWN0b3J5IChvbiB0aGUgIiksSig4LCJzdHJvbmciKSxTZSg5KSx0ZSgpLFNlKDEwLCIgY29tcHV0ZSBzZXJ2ZXIpIGJlbG93LCB0byB3aGljaCB1c2VyICIpLEooMTEsInN0cm9uZyIpLFNlKDEyKSx0ZSgpLFNlKDEzLCIgY2FuIHdyaXRlLCBvbiBiZWhhbGYgb2YgRGF0YSBD''@;'; put 'put ''b250cm9sbGVyLlxuIiksdGUoKSxKKDE0LCJsYWJlbCIsNSksU2UoMTUsIkRDIFN0YWdpbmcgRGlyZWN0b3J5IiksdGUoKSxKKDE2LCJkaXYiLDYpKDE3LCJkaXYiLDcpKDE4LCJpbnB1dCIsOCksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGwpe3JldHVybiBmaShvLmRjRGlyZWN0b3J5''@;'; put 'put ''LGwpfHwoby5kY0RpcmVjdG9yeT1sKSxsfSksdGUoKSgpKCksSigxOSwicCIsNCksU2UoMjAsIiBCZWxvdyBhcmUgdGhlIGxpc3Qgb2YgZ3JvdXBzIHRvIHdoaWNoIHlvdSBiZWxvbmcuIFRoZSBncm91cCB5b3Ugc2VsZWN0IHdpbGwgYmVjb21lIHRoZSBEYXRhIENvbnRyb2xsZXIgQWRtaW4g''@;'; put 'put ''R3JvdXAsIGFuZCBldmVyeW9uZSBpbiBpdCB3aWxsIGhhdmUgdW5yZXN0cmljdGVkIGFjY2VzcyB0byBEYXRhIENvbnRyb2xsZXIuXG4iKSx0ZSgpLEooMjEsImxhYmVsIiw1KSxTZSgyMiwiRGF0YSBDb250cm9sbGVyIEFkbWluIGdyb3VwIiksdGUoKSxKKDIzLCJjbHItc2VsZWN0LWNvbnRh''@;'; put 'put ''aW5lciIsOSkoMjQsInNlbGVjdCIsMTApLGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihsKXtyZXR1cm4gZmkoby5kY0FkbWluR3JvdXAsbCl8fChvLmRjQWRtaW5Hcm91cD1sKSxsfSksX28oMjUsVUV0LDIsMywib3B0aW9uIiwxMSxDbyksdGUoKSgpLEooMjcsInAiLDQpLFNlKDI4LCIg''@;'; put 'put ''Tm93LCBjcmVhdGUgdGhlIHRhcmdldCBkaXJlY3RvcnkgYW5kIGRlcGxveSB0aGUgY29udHJvbCBsaWJyYXJ5IHVzaW5nIHRoZSBhZG1pbiBncm91cCBzZWxlY3RlZCBhYm92ZTpcbiIpLHRlKCksSigyOSwiZGl2IiwxMikoMzAsImJ1dHRvbiIsMTMpLHd0KCJjbGljayIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gby5tYWtlRGF0YSgpfSksU2UoMzEsIiBTVUJNSVQgIiksdGUoKSgpLEl0KDMyLCJociIsMiksSigzMywiZGl2IiwxNCkoMzQsInAiKSxTZSgzNSwiWW91IGFyZSBjb25uZWN0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNyZWRlbnRpYWxzOiIpLHRlKCksSigzNiwidWwiKSgzNywibGki''@;'; put 'put ''KSxTZSgzOCksdGUoKSxKKDM5LCJsaSIpLFNlKDQwKSx0ZSgpLEooNDEsImxpIiksU2UoNDIpLHRlKCksSig0MywibGkiKSxTZSg0NCksdGUoKSgpKCkpLDImaSYmKF90KG8ubG9hZGluZz8wOi0xKSxpZSg5KSxTcigiICIsby5TWVNIT1NUTkFNRSksaWUoMykscHIoby5TWVNVU0VSSUQpLGll''@;'; put 'put ''KDYpLGRpKCJuZ01vZGVsIixvLmRjRGlyZWN0b3J5KSxpZSg2KSxkaSgibmdNb2RlbCIsby5kY0FkbWluR3JvdXApLGllKCkseW8oby5kY0FkbWluR3JvdXBMaXN0KSxpZSgxMyksU3IoIk1FVEFQRVJTT046ICIsby5NRVRBUEVSU09OKSxpZSgyKSxTcigiU1lTVVNFUklEOiAiLG8uU1lTVVNF''@;'; put 'put ''UklEKSxpZSgyKSxTcigiU1lTSE9TVE5BTUU6ICIsby5TWVNIT1NUTkFNRSksaWUoMiksU3IoIlNZU1ZMT05HOiAiLG8uU1lTVkxPTkcpKX0sZGVwZW5kZW5jaWVzOltYZyxRZyxsdSxLZyxvYyxYbCxlbCxxYixDTV0sZW5jYXBzdWxhdGlvbjoyfSkpfXJldHVybiBuKCksZX0pKCk7ZnVuY3Rp''@;'; put 'put ''b24gV0V0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJkaXYiLDIpKDEsImRpdiIsMyksU2UoMiwiVGVybXMgYW5kIENvbmRpdGlvbnMiKSx0ZSgpLEooMywiZGl2Iiw0KSg0LCJkaXYiLDUpKDUsInAiLDYpLFNlKDYsIiBUaGUgRGVtbyB2ZXJzaW9uIG9mIERhdGEgQ29udHJvbGxl''@;'; put 'put ''ciBpcyBmcmVlIGZvciBFVkFMVUFUSU9OIHB1cnBvc2VzIG9ubHkuIEJlZm9yZSBwcm9jZWVkaW5nIHdpdGggY29uZmlndXJhdGlvbiwgcGxlYXNlIGNvbmZpcm0gdGhhdCB5b3UgaGF2ZSByZWFkLCB1bmRlcnN0b29kLCBhbmQgYWdyZWVkIHRvIHRoZSAiKSxKKDcsImEiLDcpLFNlKDgsIkRh''@;'; put 'put ''dGEgQ29udHJvbGxlciBmb3IgU0FTXHhhOSBFdmFsdWF0aW9uIEFncmVlbWVudCIpLHRlKCksU2UoOSwiLiAiKSx0ZSgpKCksSXQoMTAsImhyIiw4KSxKKDExLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEyLCJpbnB1dCIsOSksd3QoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCks''@;'; put 'put ''WGUoVGUoKS50ZXJtc0FncmVlQ2hhbmdlKCkpfSksdGUoKSxKKDEzLCJsYWJlbCIpLFNlKDE0LCJJIGhhdmUgcmVhZCBhbmQgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoZSAiKSxKKDE1LCJhIiw3KSxTZSgxNiwiRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5IEV2YWx1YXRpb24gQWdyZWVt''@;'; put 'put ''ZW50IiksdGUoKSgpKCkoKSgpfX1mdW5jdGlvbiBZRXQobixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRpdiIsMTApKDEsImFwcC1hdXRvbWF0aWMtZGVwbG95IiwxMiksd3QoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKDMpLm9uTmF2aWdh''@;'; put 'put ''dGVUb0hvbWUoKSl9KSx0ZSgpKCl9aWYoMiZuKXtjb25zdCB0PVRlKDMpO2llKCkscnQoInNhc0pzIix0LnNhc0pzKSgic2FzSnNDb25maWciLHQuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsdC5kY0FkYXB0ZXJTZXR0aW5ncykoImFwcExvYyIsdC5hcHBMb2MpKCJkY1BhdGgi''@;'; put 'put ''LHQuZGNQYXRoKSgic2VsZWN0ZWRBZG1pbkdyb3VwIix0LnNlbGVjdGVkQWRtaW5Hcm91cCl9fWZ1bmN0aW9uIFpFdChuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiZGl2IiwxMSkoMSwiYXBwLW1hbnVhbC1kZXBsb3kiLDEzKSx3dCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gWWUodCksWGUoVGUoMykub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLHRlKCkoKX1pZigyJm4pe2NvbnN0IHQ9VGUoMyk7aWUoKSxydCgic2FzSnMiLHQuc2FzSnMpKCJzYXNKc0NvbmZpZyIsdC5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIix0LmRjQWRhcHRlclNldHRp''@;'; put 'put ''bmdzKX19ZnVuY3Rpb24gR0V0KG4sZSl7aWYoMSZuJiYodnQoMCxZRXQsMiw2LCJkaXYiLDEwKSx2dCgxLFpFdCwyLDMsImRpdiIsMTEpKSwyJm4pe2NvbnN0IHQ9VGUoMik7X3QodC5hdXRvZGVwbG95PzA6LTEpLGllKCksX3QodC5hdXRvZGVwbG95Py0xOjEpfX1mdW5jdGlvbiAkRXQobixl''@;'; put 'put ''KXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRpdiIsMTApKDEsImFwcC1zYXNqcy1jb25maWd1cmF0b3IiLDEzKSx3dCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoMikub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLHRlKCkoKX1pZigyJm4pe2NvbnN0''@;'; put 'put ''IHQ9VGUoMik7aWUoKSxydCgic2FzSnMiLHQuc2FzSnMpKCJzYXNKc0NvbmZpZyIsdC5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIix0LmRjQWRhcHRlclNldHRpbmdzKX19ZnVuY3Rpb24gcUV0KG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJkaXYiLDEwKSgxLCJhcHAt''@;'; put 'put ''c2FzanMtY29uZmlndXJhdG9yIiwxMyksd3QoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKDIpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSx0ZSgpKCl9aWYoMiZuKXtjb25zdCB0PVRlKDIpO2llKCkscnQoInNhc0pzIix0LnNhc0pzKSgic2FzSnNDb25m''@;'; put 'put ''aWciLHQuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsdC5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIEtFdChuLGUpe2lmKDEmbiYmdnQoMCxHRXQsMiwyKSgxLCRFdCwyLDMsImRpdiIsMTApKDIscUV0LDIsMywiZGl2IiwxMCksMiZuKXtsZXQgdDtjb25zdCByPVRlKCk7''@;'; put 'put ''X3QoKHQ9ITApPT0oci5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09ci5TZXJ2ZXJUeXBlLlNhc1ZpeWEpPzA6dD09PShyLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1yLlNlcnZlclR5cGUuU2FzanMpPzE6dD09PShyLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1yLlNlcnZlclR5cGUuU2Fz''@;'; put 'put ''OSk/MjotMSl9fWxldCBheGU9KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3RvcihyLGksbyxhKXt0aGlzLmFwcFN0b3JlU2VydmljZT1yLHRoaXMuc2FzU2VydmljZT1pLHRoaXMubG9nZ2VyU2VydmljZT1vLHRoaXMucm91dGVyPWEsdGhpcy5zdGVwPTAsdGhpcy5hZG1pbkdyb3Vwcz1b''@;'; put 'put ''XSx0aGlzLmFwcExvYz0iIix0aGlzLmRjUGF0aD0iIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iIix0aGlzLmF1dG9kZXBsb3k9ITAsdGhpcy5qc29uRmlsZT1udWxsLHRoaXMuc2FzSnNDb25maWc9bmV3IHhwLlNBU2pzQ29uZmlnLHRoaXMuU2VydmVyVHlwZT1fMC5ZLHRoaXMuZGNBZGFw''@;'; put 'put ''dGVyU2V0dGluZ3M9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKSx0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoIm1hbnVhbGRlcGxveSIpJiYodGhpcy5hdXRvZGVwbG95PSExKSx0aGlzLnNhc0pzPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0luc3RhbmNlKCks''@;'; put 'put ''dGhpcy5zYXNKc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmFwcExvYz10aGlzLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIifW5nT25Jbml0KCl7dGhpcy5zZXREZXBsb3lEZWZhdWx0cygpfXNldERlcGxveURlZmF1bHRzKCl7dGhpcy5kY1BhdGg9''@;'; put 'put ''dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uZGNQYXRofHwiIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD10aGlzLmRjQWRhcHRlclNldHRpbmdzPy5hZG1pbkdyb3VwfHwiIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cHx8KHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSJTQVNBZG1pbmlzdHJhdG9y''@;'; put 'put ''cyIpfXRlcm1zQWdyZWVDaGFuZ2UoKXt0aGlzLmF1dG9kZXBsb3l8fHRoaXMuZ2V0QWRtaW5Hcm91cHMoKSx0aGlzLnN0ZXArK31nZXRBZG1pbkdyb3Vwcygpe2ZldGNoKHRoaXMuc2FzSnNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHM/c29ydEJ5PW5hbWUmbGltaXQ9NTAw''@;'; put 'put ''MCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihyPT5yLnRleHQoKSkudGhlbihyPT57bGV0IGk7dHJ5e2k9SlNPTi5wYXJzZShyKX1jYXRjaChvKXtjb25zb2xlLmVycm9yKG8pfWkmJih0aGlzLmFkbWluR3JvdXBzPWkuaXRlbXMsdGhpcy5zZWxlY3RlZEFk''@;'; put 'put ''bWluR3JvdXA9dGhpcy5hZG1pbkdyb3Vwc1swXS5pZCl9KX1vbk5hdmlnYXRlVG9Ib21lKCl7d2luZG93Lm9wZW4obG9jYXRpb24uaHJlZi5zcGxpdCgiIyIpWzBdLCJfYmxhbmsiKX1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKSh6''@;'; put 'put ''ZShFYiksemUoaWMpLHplKHgzKSx6ZSh2YykpfSx0aGlzLlx1MDI3NWNtcD1Qcih7dHlwZTplLHNlbGVjdG9yczpbWyJhcHAtZGVwbG95Il1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxzdGFuZGFsb25lOiExLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImNvbnRlbnQt''@;'; put 'put ''YXJlYSIsInBvc2l0aW9uLXJlbGF0aXZlIl0sWzEsImNsci1yb3ciXSxbImlkIiwiVENTIiwxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtYmxvY2siXSxbMSwiY2FyZC10ZXh0Il0sWzEsIm10LTAiXSxbImhyZWYiLCJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8v''@;'; put 'put ''ZXZhbHVhdGlvbi1saWNlbmNlLWFncmVlbWVudCIsInRhcmdldCIsIl9ibGFuayJdLFsxLCJsaWdodCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsImNoYW5nZSJdLFsxLCJhdXRvZGVwbG95LXNlY3Rpb24iLCJjYXJkIl0sWyJpZCIsIm1haW5ib2R5IiwxLCJjYXJk''@;'; put 'put ''Il0sWzMsIm9uTmF2aWdhdGVUb0hvbWUiLCJzYXNKcyIsInNhc0pzQ29uZmlnIiwiZGNBZGFwdGVyU2V0dGluZ3MiLCJhcHBMb2MiLCJkY1BhdGgiLCJzZWxlY3RlZEFkbWluR3JvdXAiXSxbMywib25OYXZpZ2F0ZVRvSG9tZSIsInNhc0pzIiwic2FzSnNDb25maWciLCJkY0FkYXB0ZXJTZXR0''@;'; put 'put ''aW5ncyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihpLG8pezEmaSYmKEooMCwibWFpbiIsMCkoMSwiZGl2IiwxKSx2dCgyLFdFdCwxNywwLCJkaXYiLDIpLHRlKCksdnQoMyxLRXQsMywxKSx0ZSgpKSwyJmkmJihpZSgyKSxfdCgwPT09by5zdGVwPzI6LTEpLGllKCksX3Qoby5zdGVwPjA/MzotMSkp''@;'; put 'put ''fSxkZXBlbmRlbmNpZXM6W2VsLFUyLEZmLE1FdCxCRXQsekV0XSxlbmNhcHN1bGF0aW9uOjJ9KSl9cmV0dXJuIG4oKSxlfSkoKTtjb25zdCBYRXQ9W3twYXRoOiIiLGNvbXBvbmVudDpheGV9LHtwYXRoOiJtYW51YWxkZXBsb3kiLGNvbXBvbmVudDpheGV9XTtsZXQgUUV0PSgoKT0+e3ZhciBu''@;'; put 'put ''O2NsYXNzIGV7c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSl9LHRoaXMuXHUwMjc1bW9kPUdpKHt0eXBlOmV9KSx0aGlzLlx1MDI3NWluaj1taSh7aW1wb3J0czpbV2QuZm9yQ2hpbGQoWEV0KSxXZF19KSl9cmV0dXJuIG4oKSxlfSko''@;'; put 'put ''KSxKRXQ9KCgpPT57dmFyIG47Y2xhc3MgZXtzdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKX0sdGhpcy5cdTAyNzVtb2Q9R2koe3R5cGU6ZX0pLHRoaXMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltxbyxoZCxxMCxRRXRdfSkpfXJldHVy''@;'; put 'put ''biBuKCksZX0pKCk7Y29uc3QgYjQ9bj0+WyJ0YWJpbmRleCIsbl0sdU10PSgpPT5bInJvbGUiLCJncmlkY2VsbCJdLGRNdD0oKT0+WyJyb2xlIiwiZ3JpZGNlbGwgYnV0dG9uIl0saE10PSgpPT5bInJvbGUiLCJyb3doZWFkZXIiXSxmTXQ9KCk9Plsicm9sZSIsImNvbHVtbmhlYWRlciJdLGh4''@;'; put 'put ''ZT0oKT0+WyJyb2xlIiwicm93Il0sU010PSgpPT5bInNjb3BlIiwiY29sIl0sRU10PSgpPT5bInNjb3BlIiwicm93Il0sTjM9bj0+WyJhcmlhLWxhYmVsIixuXSxUTXQ9bj0+WyJhcmlhLWxhYmVsbGVkYnkiLG5dLHhNdD1uPT5bImFyaWEtZGVzY3JpYmVkYnkiLG5dLHRMPShuPSEwKT0+WyJh''@;'; put 'put ''cmlhLWRpc2FibGVkIixuXSxweGU9bj0+WyJhcmlhLWhhc3BvcHVwIixuXSxneGU9bj0+WyJhcmlhLXJvd2NvdW50IixuXSxkc2U9bj0+WyJhcmlhLWNvbGNvdW50IixuXSxteGU9bj0+WyJhcmlhLXJvd2luZGV4IixuXSxoc2U9bj0+WyJhcmlhLWNvbGluZGV4IixuXSxhbT1uPT5bImFyaWEt''@;'; put 'put ''ZXhwYW5kZWQiLG5dLHl4ZT1uPT5bImFyaWEtY2hlY2tlZCIsbl0sSU10PW49PlsiYXJpYS1jb250cm9scyIsbl0sTE10PW49PlsiYXJpYS1saXZlIixuXSxPTXQ9bj0+WyJhcmlhLXJlbGV2YW50IixuXSxOTXQ9bj0+WyJhcmlhLXNldHNpemUiLG5dLEZNdD1uPT5bImFyaWEtcG9zaW5zZXQi''@;'; put 'put ''LG5dO2Z1bmN0aW9uIHd4ZShuKXtjb25zdCBlPW4ubGVuZ3RoO2xldCB0PTA7Zm9yKDt0PGU7KW5bdF09W25bdF1dLHQrPTF9ZnVuY3Rpb24gcHNlKG4sZSl7Y29uc3QgdD1lLmxlbmd0aDtsZXQgcj0wO2Zvcig7cjx0OyluLnB1c2goZVtyXSkscis9MX1mdW5jdGlvbiBuTChuKXtjb25zdCBl''@;'; put 'put ''PVtdO2lmKCFufHwwPT09bi5sZW5ndGh8fCFuWzBdfHwwPT09blswXS5sZW5ndGgpcmV0dXJuIGU7Y29uc3QgdD1uLmxlbmd0aCxyPW5bMF0ubGVuZ3RoO2ZvcihsZXQgaT0wO2k8dDtpKyspZm9yKGxldCBvPTA7bzxyO28rKyllW29dfHwoZVtvXT1bXSksZVtvXVtpXT1uW2ldW29dO3JldHVy''@;'; put 'put ''biBlfWZ1bmN0aW9uIG0xKG4sZSx0LHIpe2xldCBpPS0xO2NvbnN0IG89QXJyYXkuaXNBcnJheShuKT9uOkFycmF5LmZyb20obiksYT1vLmxlbmd0aDtyJiZhJiYoaSs9MSx0PW9baV0pO2xldCBsPXQ7Zm9yKGkrPTE7aTxhOylsPWUobCxvW2ldLGksbyksaSs9MTtyZXR1cm4gbH1mdW5jdGlv''@;'; put 'put ''biBIdihuLGUpe2xldCB0PTA7Y29uc3Qgcj1BcnJheS5pc0FycmF5KG4pP246QXJyYXkuZnJvbShuKSxpPXIubGVuZ3RoLG89W107bGV0IGE9LTE7Zm9yKDt0PGk7KXtjb25zdCBsPXJbdF07ZShsLHQscikmJihhKz0xLG9bYV09bCksdCs9MX1yZXR1cm4gb31mdW5jdGlvbiBfYyhuLGUpe2xl''@;'; put 'put ''dCB0PTA7Y29uc3Qgcj1BcnJheS5pc0FycmF5KG4pP246QXJyYXkuZnJvbShuKSxpPXIubGVuZ3RoLG89W107bGV0IGE9LTE7Zm9yKDt0PGk7KWErPTEsb1thXT1lKHJbdF0sdCxyKSx0Kz0xO3JldHVybiBvfWZ1bmN0aW9uIFhuKG4sZSl7bGV0IHIsdD0wO3I9QXJyYXkuaXNBcnJheShuKT9u''@;'; put 'put ''OkFycmF5LmZyb20obik7Y29uc3QgaT1yLmxlbmd0aDtmb3IoO3Q8aSYmITEhPT1lKHJbdF0sdCxyKTspdCs9MTtyZXR1cm4gcn1mdW5jdGlvbiBDeGUobil7cmV0dXJuIG0xKG4sKGUsdCk9PmUrdCwwKX1mdW5jdGlvbiBITXQobil7cmV0dXJuIG0xKG4sKGUsdCk9PnZvaWQgMCE9PWUmJmU+''@;'; put 'put ''dD9lOnQsblswXSl9ZnVuY3Rpb24gVk10KG4pe3JldHVybiBtMShuLChlLHQpPT52b2lkIDAhPT1lJiZlPHQ/ZTp0LG5bMF0pfWZ1bmN0aW9uIEJNdChuKXtyZXR1cm4gbi5sZW5ndGg/Q3hlKG4pL24ubGVuZ3RoOjB9ZnVuY3Rpb24gU3hlKG4pe3JldHVybiBtMShuLChlLHQpPT5lLmNvbmNh''@;'; put 'put ''dChBcnJheS5pc0FycmF5KHQpP1N4ZSh0KTp0KSxbXSl9ZnVuY3Rpb24gZ3NlKG4pe2NvbnN0IGU9W107cmV0dXJuIFhuKG4sdD0+ey0xPT09ZS5pbmRleE9mKHQpJiZlLnB1c2godCl9KSxlfWZ1bmN0aW9uIHJMKC4uLm4pe2NvbnN0W2UsLi4udF09Wy4uLm5dO2xldCByPWU7cmV0dXJuIFhu''@;'; put 'put ''KHQsaT0+e3I9ci5maWx0ZXIobz0+IWkuaW5jbHVkZXMobykpfSkscn1mdW5jdGlvbiBFeGUoLi4ubil7Y29uc3QgZT1bXTtsZXQgdDtYbihuLChsLHUpPT57ImZ1bmN0aW9uIj09dHlwZW9mIGw/dT09PW4ubGVuZ3RoLTEmJih0PWwpOmUucHVzaChsKX0pO2NvbnN0IHI9dD8obCx1KT0+dS5z''@;'; put 'put ''b21lKGc9PnQobCxnKSk6KGwsdSk9PnUuaW5jbHVkZXMobCksW2ksLi4ub109ZTtsZXQgYT1pO3JldHVybiBYbihvLGw9PnthPWEuZmlsdGVyKHU9PnIodSxsKSl9KSxhfWZ1bmN0aW9uIGpNdCguLi5uKXtjb25zdFtlLC4uLnRdPVsuLi5uXSxyPW5ldyBTZXQoZSk7cmV0dXJuIFhuKHQsaT0+''@;'; put 'put ''e1huKGksbz0+e3IuaGFzKG8pfHxyLmFkZChvKX0pfSksQXJyYXkuZnJvbShyKX1mdW5jdGlvbiBtc2UobixlPSIgIil7cmV0dXJuIG4uc3BsaXQoZSl9ZnVuY3Rpb24gTXhlKG4sZT0iICIpe3JldHVybiBuLmpvaW4oZSl9ZnVuY3Rpb24geWMobiwuLi5lKXtyZXR1cm4gbTEoQXJyYXkuZnJv''@;'; put 'put ''bShuKSwocixpLG8pPT5yK2kucmVwbGFjZSgvXHI/XG5ccyovZywiIikrKGVbb10/ZVtvXToiIiksIiIpLnRyaW0oKX1mdW5jdGlvbiBzdyhuLC4uLmUpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt0LmlubmVySFRNTD1BcnJheS5mcm9tKG4pLnJlZHVjZSgo''@;'; put 'put ''byxhLGwpPT5vK2ErKGVbbF0/PyIiKSwiIik7Y29uc3Qgcj10LmNvbnRlbnQuY2xvbmVOb2RlKCEwKSxpPXt9O3JldHVybiByLnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXJlZl0iKS5mb3JFYWNoKG89Pntjb25zdCBhPW8uZGF0YXNldC5yZWY/P251bGw7ZGVsZXRlIG8uZGF0YXNldC5yZWYs''@;'; put 'put ''bnVsbCE9PWEmJihpW2FdPW8pfSkse2ZyYWdtZW50OnIscmVmczppfX1mdW5jdGlvbiBQbChuKXtsZXQgZTtzd2l0Y2godHlwZW9mIG4pe2Nhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6ZT1gJHtufWA7YnJlYWs7Y2FzZSJvYmplY3QiOmU9bnVsbD09PW4/IiI6bi50b1N0cmluZygpO2JyZWFr''@;'; put 'put ''O2Nhc2UidW5kZWZpbmVkIjplPSIiO2JyZWFrO2RlZmF1bHQ6ZT1uLnRvU3RyaW5nKCl9cmV0dXJuIGV9ZnVuY3Rpb24gWm8obil7cmV0dXJuIHR5cGVvZiBuPCJ1In1mdW5jdGlvbiBYdShuKXtyZXR1cm4gdHlwZW9mIG4+InUifWZ1bmN0aW9uIEFsKG4pe3JldHVybiBudWxsPT09bnx8IiI9''@;'; put 'put ''PT1ufHxYdShuKX1mdW5jdGlvbiBUeGUobil7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobil9Y29uc3QgaUw9Imxlbmd0aCIsb0w9bj0+cGFyc2VJbnQobiwxNikseHhlPW49PnBhcnNlSW50KG4sMTApLERXPShuLGUsdCk9Pm4uc3Vi''@;'; put 'put ''c3RyKGUsdCksYUw9bj0+KG4uY29kZVBvaW50QXQoMCk/PzApLTY1LHZzZT1uPT5gJHtufWAucmVwbGFjZSgvXC0vZywiIik7bGV0IEF4ZT0hMTtjb25zdCBreGU9e2ludmFsaWQ6KCk9PnljYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgaW52YWxpZC5ceDIwCiAg''@;'; put 'put ''ICBJZiB5b3UgbmVlZCBhbnkgaGVscCwgY29udGFjdCB1cyBhdCBzdXBwb3J0QGhhbmRzb250YWJsZS5jb20uYCxleHBpcmVkOih7a2V5VmFsaWRpdHlEYXRlOm4saG90VmVyc2lvbjplfSk9PnljYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgZXhwaXJlZCBvbiAke259''@;'; put 'put ''LCBhbmQgaXMgbm90IHZhbGlkIGZvciB0aGUgaW5zdGFsbGVkXHgyMAogICAgdmVyc2lvbiAke2V9LiBSZW5ldyB5b3VyIGxpY2Vuc2Uga2V5IGF0IGhhbmRzb250YWJsZS5jb20gb3IgZG93bmdyYWRlIHRvIGEgdmVyc2lvbiByZWxlYXNlZCBwcmlvclx4MjAKICAgIHRvICR7bn0uIElmIHlv''@;'; put 'put ''dSBuZWVkIGFueSBoZWxwLCBjb250YWN0IHVzIGF0IHNhbGVzQGhhbmRzb250YWJsZS5jb20uYCxtaXNzaW5nOigpPT55Y2AKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIG1pc3NpbmcuIFVzZSB5b3VyIHB1cmNoYXNlZCBrZXkgdG8gYWN0aXZhdGUgdGhlIHByb2R1''@;'; put 'put ''Y3QuXHgyMAogICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhY3RpdmF0ZSBIYW5kc29udGFibGUgdG8gdXNlIGZvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcyBieVx4MjAKICAgIHBhc3NpbmcgdGhlIGtleTogJ25vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uJy4gSWYgeW91IG5lZWQg''@;'; put 'put ''YW55IGhlbHAsIGNvbnRhY3RceDIwCiAgICB1cyBhdCBzdXBwb3J0QGhhbmRzb250YWJsZS5jb20uYCxub25fY29tbWVyY2lhbDooKT0+IiJ9LFJ4ZT17aW52YWxpZDooKT0+eWNgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBpbnZhbGlkLlx4MjAKICAgIDxhIGhy''@;'; put 'put ''ZWY9Imh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9kb2NzL3R1dG9yaWFsLWxpY2Vuc2Uta2V5Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5SZWFkIG1vcmU8L2E+IG9uIGhvdyB0b1x4MjAKICAgIGluc3RhbGwgaXQgcHJvcGVybHkgb3IgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c3Vw''@;'; put 'put ''cG9ydEBoYW5kc29udGFibGUuY29tIj5zdXBwb3J0QGhhbmRzb250YWJsZS5jb208L2E+LmAsZXhwaXJlZDooe2tleVZhbGlkaXR5RGF0ZTpuLGhvdFZlcnNpb246ZX0pPT55Y2AKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGV4cGlyZWQgb24gJHtufSwgYW5kIGlzIG5v''@;'; put 'put ''dCB2YWxpZCBmb3IgdGhlIGluc3RhbGxlZFx4MjAKICAgIHZlcnNpb24gJHtlfS4gPGEgaHJlZj0iaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL3ByaWNpbmciIHRhcmdldD0iX2JsYW5rIj5SZW5ldzwvYT4geW91clx4MjAKICAgIGxpY2Vuc2Uga2V5IG9yIGRvd25ncmFkZSB0byBhIHZlcnNp''@;'; put 'put ''b24gcmVsZWFzZWQgcHJpb3IgdG8gJHtufS4gSWYgeW91IG5lZWQgYW55XHgyMAogICAgaGVscCwgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c2FsZXNAaGFuZHNvbnRhYmxlLmNvbSI+c2FsZXNAaGFuZHNvbnRhYmxlLmNvbTwvYT4uYCxtaXNzaW5nOigpPT55Y2AKICAgIFRoZSBs''@;'; put 'put ''aWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIG1pc3NpbmcuIFVzZSB5b3VyIHB1cmNoYXNlZCBrZXkgdG8gYWN0aXZhdGUgdGhlIHByb2R1Y3QuXHgyMAogICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhY3RpdmF0ZSBIYW5kc29udGFibGUgdG8gdXNlIGZvciBub24tY29tbWVyY2lh''@;'; put 'put ''bCBwdXJwb3NlcyBieVx4MjAKICAgIHBhc3NpbmcgdGhlIGtleTogJ25vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uJy5ceDIwCiAgICA8YSBocmVmPSJodHRwczovL2hhbmRzb250YWJsZS5jb20vZG9jcy90dXRvcmlhbC1saWNlbnNlLWtleS5odG1sIiB0YXJnZXQ9Il9ibGFuayI+UmVh''@;'; put 'put ''ZCBtb3JlPC9hPiBhYm91dCBpdCBpblx4MjAKICAgIHRoZSBkb2N1bWVudGF0aW9uIG9yIGNvbnRhY3QgdXMgYXQgPGEgaHJlZj0ibWFpbHRvOnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbSI+c3VwcG9ydEBoYW5kc29udGFibGUuY29tPC9hPi5gLG5vbl9jb21tZXJjaWFsOigpPT4iIn07ZnVu''@;'; put 'put ''Y3Rpb24gSXhlKHtjbGFzc05hbWU6bixrZXk6ZSxlbGVtZW50OnQscmVsZWFzZURhdGU6cn0pe2NvbnN0IGk9IUFsKGUpLG89InN0cmluZyI9PXR5cGVvZiBlJiYoIm5vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uIj09PWUudG9Mb3dlckNhc2UoKXx8Imh0NjhlLTFmMmI3LTQ3MTU4LTcw''@;'; put 'put ''YjA1LTA4NDJmIj09PWUudG9Mb3dlckNhc2UoKSksYT0iMTguMC4wIjtsZXQgbCx1PSJpbnZhbGlkIixnPSJpbnZhbGlkIjtjb25zdCBFPWZ1bmN0aW9uIFdNdChuKXtsZXQgZT1bXVtpTF0sdD1lO2lmKG5baUxdIT09YUwoIloiKSlyZXR1cm4hMTtmb3IobGV0IHI9IiIsaT0iQjxINFArIi5z''@;'; put 'put ''cGxpdCgiIiksbz1hTChpLnNoaWZ0KCk/PyJBIik7bztvPWFMKGkuc2hpZnQoKT8/IkEiKSktLW88IiJbaUxdP3R8PSh4eGUoYCR7eHhlKG9MKHIpKyhvTChEVyhuLE1hdGguYWJzKG8pLDIpKStTdHJpbmcoW10pKS5wYWRTdGFydCgyLCIwIikpfWApJTk3fHwyKT4+MTpyPURXKG4sbyxvPzE9''@;'; put 'put ''PT1pW2lMXT85Ojg6Nik7cmV0dXJuIHQ9PT1lfShlPXZzZShlfHwiIikpO2lmKG8pdT0ibm9uX2NvbW1lcmNpYWwiLGc9InZhbGlkIjtlbHNlIGlmKGl8fEUpaWYoRSl7Y29uc3QgTz1yPz8iMzAvMDYvMjAyNiI/PyIiLFtaLGVlLHZlXT1PLnNwbGl0KCIvIikubWFwKE51bWJlciksTWU9TWF0''@;'; put 'put ''aC5mbG9vcihEYXRlLlVUQyh2ZSxlZS0xLFopLzg2NGU1KSxIZT0obj0+b0woRFcodnNlKG4pLG9MKCIxMiIpLGFMKCJGIikpKS8ob0woRFcodnNlKG4pLGFMKCJCIiksfn4hW11baUxdKSl8fDkpKShlKTtsPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCJlbi1VUyIse3llYXI6Im51bWVyaWMi''@;'; put 'put ''LG1vbnRoOiJsb25nIixkYXk6IjItZGlnaXQiLHRpbWVab25lOiJVVEMifSkuZm9ybWF0KDg2NGU1KihIZSsxKSksTWU+SGU/KHU9ImV4cGlyZWQiLGc9ImV4cGlyZWQiKToodT0idmFsaWQiLGc9InZhbGlkIil9ZWxzZSB1PSJpbnZhbGlkIixnPSJpbnZhbGlkIjtlbHNlIHU9Im1pc3Npbmci''@;'; put 'put ''LGc9Im1pc3NpbmciO2lmKHR5cGVvZiBsb2NhdGlvbjwidSImJi9eKFthLXowLTlcLV0rXC4pP1x4NjhceDYxXHg2RVx4NjRceDczXHg2Rlx4NkVceDc0XHg2MVx4NjJceDZDXHg2NVx4MkVceDYzXHg2Rlx4NkQkL2kudGVzdChsb2NhdGlvbi5ob3N0KSYmKHU9InZhbGlkIixnPSJ2YWxpZCIp''@;'; put 'put ''LCFBeGUmJiJ2YWxpZCIhPT11JiYoa3hlW3VdKHtrZXlWYWxpZGl0eURhdGU6bCxob3RWZXJzaW9uOmF9KSYmY29uc29sZVsibm9uX2NvbW1lcmNpYWwiPT09dT8iaW5mbyI6Indhcm4iXShreGVbdV0oe2tleVZhbGlkaXR5RGF0ZTpsLGhvdFZlcnNpb246YX0pKSxBeGU9ITApLCJ2YWxpZCIh''@;'; put 'put ''PT1nJiZ0JiZSeGVbZ10oe2tleVZhbGlkaXR5RGF0ZTpsLGhvdFZlcnNpb246YX0pKXtjb25zdCBaPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGVlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBaLmNsYXNzTmFtZT1gaGFuZHNvbnRhYmxlICR7bn1gLGVlLmNs''@;'; put 'put ''YXNzTmFtZT1gJHtufV9pbm5lcmAsZWUuaW5uZXJIVE1MPVJ4ZVtnXSh7a2V5VmFsaWRpdHlEYXRlOmwsaG90VmVyc2lvbjphfSksWi5hcHBlbmRDaGlsZChlZSksdC5hcHBlbmRDaGlsZChaKSxafXJldHVybiBudWxsfWZ1bmN0aW9uIEpyKG4pe3Rocm93IG5ldyBFcnJvcihuLHtjYXVzZTp7''@;'; put 'put ''aGFuZHNvbnRhYmxlOiEwfX0pfWZ1bmN0aW9uIE9NKG4pe2xldCBlO2lmKEFycmF5LmlzQXJyYXkobikpZT1uLmxlbmd0aD9uZXcgQXJyYXkobi5sZW5ndGgpLmZpbGwobnVsbCk6W107ZWxzZXtjb25zdCB0PU9iamVjdC5jcmVhdGUobnVsbCk7YWMobiwocixpKT0+eyJfX2NoaWxkcmVuIiE9''@;'; put 'put ''PWkmJih0W2ldPXImJiJvYmplY3QiPT10eXBlb2YgciYmIUFycmF5LmlzQXJyYXkocik/T00ocik6QXJyYXkuaXNBcnJheShyKT9yLmxlbmd0aCYmIm9iamVjdCI9PXR5cGVvZiByWzBdJiYhQXJyYXkuaXNBcnJheShyWzBdKT9bT00oclswXSldOltdOm51bGwpfSksZT10fXJldHVybiBlfWZ1''@;'; put 'put ''bmN0aW9uIER4ZShuLGUpe3JldHVybiBlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLG4ucHJvdG90eXBlPW5ldyBlLG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW4sbn1mdW5jdGlvbiBZZChuLGUsdCl7Y29uc3Qgcj1BcnJheS5pc0FycmF5KHQpO3JldHVybiBhYyhlLChpLG8pPT57Il9fcHJv''@;'; put 'put ''dG9fXyI9PT1vfHwiY29uc3RydWN0b3IiPT09b3x8InByb3RvdHlwZSI9PT1vfHwoITE9PT1yfHx0LmluY2x1ZGVzKG8pKSYmKG5bb109aSl9KSxufWZ1bmN0aW9uIExXKG4sZSl7YWMoZSwodCxyKT0+e2lmKCJfX3Byb3RvX18iPT09cnx8ImNvbnN0cnVjdG9yIj09PXJ8fCJwcm90b3R5cGUi''@;'; put 'put ''PT09cilyZXR1cm47Y29uc3QgaT1lW3JdO2kmJiJvYmplY3QiPT10eXBlb2YgaT8obltyXXx8KG5bcl09QXJyYXkuaXNBcnJheShpKT9bXToiW29iamVjdCBEYXRlXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaSk/aTp7fSksTFcobltyXSxpKSk6bltyXT1pfSl9ZnVuY3Rp''@;'; put 'put ''b24gQWQobil7aWYoQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gbi5tYXAoZT0+QWQoZSkpO2lmKG4gaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShuKTtpZigib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPT1uKXtjb25zdCBlPXt9O2Zvcihjb25zdFt0LHJdb2YgT2JqZWN0LmVudHJp''@;'; put 'put ''ZXMobikpIl9fcHJvdG9fXyI9PT10fHwiY29uc3RydWN0b3IiPT09dHx8InByb3RvdHlwZSI9PT10fHwoZVt0XT1BZChyKSk7cmV0dXJuIGV9cmV0dXJuIG59ZnVuY3Rpb24gcTUobil7Y29uc3QgZT17fTtyZXR1cm4gYWMobiwodCxyKT0+e2Vbcl09dH0pLGV9ZnVuY3Rpb24gWk10KG4sZSl7''@;'; put 'put ''Y29uc3QgdD1gXyR7bn1gO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzW3RdJiYodGhpc1t0XT1mdW5jdGlvbiBZTXQobil7bGV0IGU9bjtyZXR1cm4oQXJyYXkuaXNBcnJheShlKXx8Q2EoZSkpJiYoZT1BZChlKSksZX0oZSkpLHRoaXNbdF19fWZ1bmN0aW9uIEdNdChu''@;'; put 'put ''KXtjb25zdCBlPWBfJHtufWA7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXNbZV09dH19ZnVuY3Rpb24gWWwobiwuLi5lKXtyZXR1cm4gbi5NSVhJTlN8fChuLk1JWElOUz1bXSksWG4oZSx0PT57bi5NSVhJTlMucHVzaCh0Lk1JWElOX05BTUUpLGFjKHQsKHIsaSk9Pnt2b2lkIDAhPT1uLnByb3Rv''@;'; put 'put ''dHlwZVtpXSYmSnIoYE1peGluIGNvbmZsaWN0LiBQcm9wZXJ0eSAnJHtpfScgYWxyZWFkeSBleGlzdCBhbmQgY2Fubm90IGJlIG92ZXJ3cml0dGVuLmApLCJmdW5jdGlvbiI9PXR5cGVvZiByP24ucHJvdG90eXBlW2ldPXI6T2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLGkse2dl''@;'; put 'put ''dDpaTXQoaSxyKSxzZXQ6R010KGkpLGNvbmZpZ3VyYWJsZTohMH0pfSl9KSxufWZ1bmN0aW9uIGc3KG4sZSl7Y29uc3QgdD1yPT52b2lkIDA9PT1yPyJ1bmRlZmluZWQiOkFycmF5LmlzQXJyYXkocik/YFske3IubWFwKHQpLmpvaW4oIiwiKX1dYDpyIGluc3RhbmNlb2YgRGF0ZT9KU09OLnN0''@;'; put 'put ''cmluZ2lmeShyKTpudWxsIT09ciYmIm9iamVjdCI9PXR5cGVvZiByP2B7JHtPYmplY3QuZW50cmllcyhyKS5zb3J0KChbb10sW2FdKT0+by5sb2NhbGVDb21wYXJlKGEpKS5tYXAoKFtvLGFdKT0+YCR7SlNPTi5zdHJpbmdpZnkobyl9OiR7dChhKX1gKS5qb2luKCIsIil9fWA6SlNPTi5zdHJp''@;'; put 'put ''bmdpZnkocik7cmV0dXJuIHQobik9PT10KGUpfWZ1bmN0aW9uIENhKG4pe3JldHVybiBrZChuKX1mdW5jdGlvbiBrZChuKXtyZXR1cm4iW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKX1mdW5jdGlvbiBLNShuLGUsdCxyKXtyLnZhbHVlPXQsci53''@;'; put 'put ''cml0YWJsZT0hMSE9PXIud3JpdGFibGUsci5lbnVtZXJhYmxlPSExIT09ci5lbnVtZXJhYmxlLHIuY29uZmlndXJhYmxlPSExIT09ci5jb25maWd1cmFibGUsT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxyKX1mdW5jdGlvbiBhYyhuLGUpe2NvbnN0IHQ9bjtmb3IoY29uc3QgciBpbiB0KWlm''@;'; put 'put ''KCghdC5oYXNPd25Qcm9wZXJ0eXx8dC5oYXNPd25Qcm9wZXJ0eSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikpJiYhMT09PWUodFtyXSxyLG4pKWJyZWFrO3JldHVybiBufWZ1bmN0aW9uIHNMKG4sZSl7Y29uc3QgdD1lLnNwbGl0KCIuIik7bGV0IHI9bjtmb3Io''@;'; put 'put ''Y29uc3QgaSBvZiB0KWlmKHI9cltpXSx2b2lkIDA9PT1yKXJldHVybjtyZXR1cm4gcn1mdW5jdGlvbiBsTChuLGUsdCl7aWYoInN0cmluZyIhPXR5cGVvZiBlfHxudWxsPT09bnx8Im9iamVjdCIhPXR5cGVvZiBuKXJldHVybjtjb25zdCByPWUuc3BsaXQoIi4iKTtsZXQgaT1uO2ZvcihsZXQg''@;'; put 'put ''bz0wO288ci5sZW5ndGg7bys9MSl7Y29uc3QgYT1yW29dO2lmKCJfX3Byb3RvX18iPT09YXx8ImNvbnN0cnVjdG9yIj09PWF8fCJwcm90b3R5cGUiPT09YSlyZXR1cm47aWYobyE9PXIubGVuZ3RoLTEpe1JkKGksYSl8fChpW2FdPXt9KTtjb25zdCBsPWlbYV07aWYoIWtkKGwpKXJldHVybjtp''@;'; put 'put ''PWx9ZWxzZSBPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxhLHt2YWx1ZTp0LHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fWZ1bmN0aW9uIE9XKG4pe2lmKCFDYShuKSlyZXR1cm4gMDtjb25zdCBlPWZ1bmN0aW9uKHQpe2xldCByPTA7cmV0dXJuIGtkKHQpP2Fj''@;'; put 'put ''KHQsKGksbyk9PnsiX19jaGlsZHJlbiIhPT1vJiYocis9ZShpKSl9KTpyKz0xLHJ9O3JldHVybiBlKG4pfWZ1bmN0aW9uIFZmKG4sZT0idmFsdWUiKXtjb25zdCB0PWBfJHtlfWAscj17X3RvdWNoZWQ6ITEsW3RdOm4saXNUb3VjaGVkKCl7cmV0dXJuISF0aGlzLl90b3VjaGVkfSx2YWx1ZTp2''@;'; put 'put ''b2lkIDB9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocixlLHtnZXQoKXtyZXR1cm4gdGhpc1t0XX0sc2V0KGkpe3RoaXMuX3RvdWNoZWQ9ITAsdGhpc1t0XT1pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHJ9ZnVuY3Rpb24gUmQobixlKXtyZXR1cm4gT2JqZWN0LnBy''@;'; put 'put ''b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sZSl9ZnVuY3Rpb24gY0wobixlKXtpZigib2JqZWN0IiE9dHlwZW9mIG58fG51bGw9PT1uKXJldHVybiBlO2lmKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWUpcmV0dXJuIG47Y29uc3QgdD17fTtyZXR1cm4gT2JqZWN0LmtleXMoZSku''@;'; put 'put ''Zm9yRWFjaChyPT57Y29uc3QgaT1lW3JdLG89bltyXTt0W3JdPWtkKGkpP2NMKGtkKG8pP286e30saSk6UmQobixyKSYmdm9pZCAwIT09bz9vOml9KSxPYmplY3Qua2V5cyhuKS5mb3JFYWNoKHI9PntSZCh0LHIpfHwodFtyXT1uW3JdKX0pLHR9ZnVuY3Rpb24gTlcobj17fSxlPXt9KXtjb25z''@;'; put 'put ''dCB0PXsuLi5ufTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChyPT57aWYoIl9fcHJvdG9fXyI9PT1yfHwiY29uc3RydWN0b3IiPT09cnx8InByb3RvdHlwZSI9PT1yKXJldHVybjtjb25zdCBpPWVbcl0sbz10W3JdO3Rbcl09a2QoaSkmJmtkKG8pP05XKG8saSk6aX0pLHR9ZnVuY3Rp''@;'; put 'put ''b24gYjAobil7cmV0dXJuIGtkKG4pJiZabyhuLmtleSkmJlpvKG4udmFsdWUpfWZ1bmN0aW9uIHVMKG4pe3JldHVybiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG4pfWZ1bmN0aW9uIGRMKG4pe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShuKX1mdW5jdGlvbiBfc2UoKXtyZXR1''@;'; put 'put ''cm4ib250b3VjaHN0YXJ0ImluIHdpbmRvd31mdW5jdGlvbiBMeGUoKXtyZXR1cm4gdHlwZW9mIHdpbmRvdzwidSJ9bGV0IE5NO2Z1bmN0aW9uIE94ZShuLGU9e30pe3JldHVybiBOTXx8KE5NPSJvYmplY3QiPT10eXBlb2YgSW50bD9uZXcgSW50bC5Db2xsYXRvcihuLGUpLmNvbXBhcmU6ImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIFN0cmluZy5wcm90b3R5cGUubG9jYWxlQ29tcGFyZT8odCxyKT0+YCR7dH1gLmxvY2FsZUNvbXBhcmUocik6KHQscik9PnQ9PT1yPzA6dD5yPy0xOjEsTk0pfWNvbnN0IGpwPW49Pntjb25zdCBlPXt2YWx1ZTohMSx0ZXN0KHQscil7ZS52YWx1ZT1uKHQscil9fTty''@;'; put 'put ''ZXR1cm4gZX0sWDU9e2Nocm9tZTpqcCgobixlKT0+L0Nocm9tZS8udGVzdChuKSYmL0dvb2dsZS8udGVzdChlPz8iIikpLGNocm9tZVdlYktpdDpqcChuPT4vQ3JpT1MvLnRlc3QobikpLGVkZ2U6anAobj0+L0VkZ2UvLnRlc3QobikpLGVkZ2VXZWJLaXQ6anAobj0+L0VkZ2lPUy8udGVzdChu''@;'; put 'put ''KSksZmlyZWZveDpqcChuPT4vRmlyZWZveC8udGVzdChuKSksZmlyZWZveFdlYktpdDpqcChuPT4vRnhpT1MvLnRlc3QobikpLG1vYmlsZTpqcChuPT4vQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QobikpLHNhZmFy''@;'; put 'put ''aTpqcCgobixlKT0+L1NhZmFyaS8udGVzdChuKSYmL0FwcGxlIENvbXB1dGVyLy50ZXN0KGU/PyIiKSksc2FmYXJpQmVmb3JlMjYxOmpwKChuLGUpPT57aWYoIS9TYWZhcmkvLnRlc3Qobil8fCEvQXBwbGUgQ29tcHV0ZXIvLnRlc3QoZT8/IiIpKXJldHVybiExO2NvbnN0IHQ9L1ZlcnNpb25c''@;'; put 'put ''LyhcZCsoPzpcLlxkKyk/KS9pLmV4ZWMobik7cmV0dXJuKHQ/TnVtYmVyLnBhcnNlRmxvYXQodFsxXSk6MCk8MjYuMX0pfSxGTT17bWFjOmpwKG49Pi9eTWFjLy50ZXN0KG4pKSx3aW46anAobj0+L15XaW4vLnRlc3QobikpLGxpbnV4OmpwKG49Pi9eTGludXgvLnRlc3QobikpLGlvczpqcChu''@;'; put 'put ''PT4vaVBob25lfGlQYWR8aVBvZC9pLnRlc3QobikpfTtmdW5jdGlvbiBOeGUoe3VzZXJBZ2VudDpuPW5hdmlnYXRvci51c2VyQWdlbnQsdmVuZG9yOmU9bmF2aWdhdG9yLnZlbmRvcn09e30pe2FjKFg1LCh7dGVzdDp0fSk9PnQobixlKSl9ZnVuY3Rpb24gRnhlKHtwbGF0Zm9ybTpuPW5hdmln''@;'; put 'put ''YXRvci5wbGF0Zm9ybX09e30pe2FjKEZNLCh7dGVzdDplfSk9PmUobikpfWZ1bmN0aW9uIFB4ZSgpe3JldHVybiBYNS5jaHJvbWUudmFsdWV9ZnVuY3Rpb24gSHhlKCl7cmV0dXJuIFg1LmNocm9tZVdlYktpdC52YWx1ZX1mdW5jdGlvbiBGVygpe3JldHVybiBYNS5maXJlZm94LnZhbHVlfWZ1''@;'; put 'put ''bmN0aW9uIFZ4ZSgpe3JldHVybiBYNS5maXJlZm94V2ViS2l0LnZhbHVlfWZ1bmN0aW9uIGhMKCl7cmV0dXJuIFg1LnNhZmFyaS52YWx1ZX1mdW5jdGlvbiBCeGUoKXtyZXR1cm4gWDUuc2FmYXJpQmVmb3JlMjYxLnZhbHVlfWZ1bmN0aW9uIGp4ZSgpe3JldHVybiBYNS5lZGdlLnZhbHVlfWZ1''@;'; put 'put ''bmN0aW9uICRNdCgpe3JldHVybiBYNS5lZGdlV2ViS2l0LnZhbHVlfWZ1bmN0aW9uIFE1KCl7cmV0dXJuIFg1Lm1vYmlsZS52YWx1ZX1mdW5jdGlvbiB5c2UoKXtyZXR1cm4gRk0uaW9zLnZhbHVlfWZ1bmN0aW9uIFBXKHttYXhUb3VjaFBvaW50czpufT1uYXZpZ2F0b3Ipe3JldHVybihuPz8w''@;'; put 'put ''KT4yJiZGTS5tYWMudmFsdWV9ZnVuY3Rpb24gSFcoKXtyZXR1cm4gRk0ud2luLnZhbHVlfWZ1bmN0aW9uIGx3KCl7cmV0dXJuIEZNLm1hYy52YWx1ZX1mdW5jdGlvbiBxTXQoKXtyZXR1cm4gRk0ubGludXgudmFsdWV9ZnVuY3Rpb24gSzAobil7cmV0dXJuIG5bMF0udG9VcHBlckNhc2UoKStu''@;'; put 'put ''LnN1YnN0cigxKX1mdW5jdGlvbiBLTXQoLi4ubil7Y29uc3QgZT1bXTtsZXQgdD1uLmxlbmd0aDtmb3IoO3Q7KXt0LT0xO2NvbnN0IHI9UGwoblt0XSkudG9Mb3dlckNhc2UoKTstMT09PWUuaW5kZXhPZihyKSYmZS5wdXNoKHIpfXJldHVybiAxPT09ZS5sZW5ndGh9ZnVuY3Rpb24gVlcoKXtj''@;'; put 'put ''b25zdCBuPW5ldyBVaW50MTZBcnJheSg0KTtyZXR1cm4gZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG4pLEFycmF5LmZyb20obixlPT5lLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg0LCIwIikpLmpvaW4oIiIpfWZ1bmN0aW9uIGJzZShuKXtpZigic3RyaW5nIiE9dHlwZW9mIG4p''@;'; put 'put ''cmV0dXJuITE7dHJ5e2NvbnN0IGU9SlNPTi5wYXJzZShuKTtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiB3c2Uobil7cmV0dXJuL14oPzpcZFxkPyV8MTAwJSkkLy50ZXN0KG4pfWZ1bmN0aW9uIGZMKG4sZT17fSl7cmV0dXJuYCR7''@;'; put 'put ''bn1gLnJlcGxhY2UoLyg/OlxcKT9cWyhbXltcXV0rKV0vZywodCxyKT0+IlxcIj09PXQuY2hhckF0KDApP3Quc3Vic3RyKDEsdC5sZW5ndGgtMSk6dm9pZCAwPT09ZVtyXT8iIjpTdHJpbmcoZVtyXSkpfWZ1bmN0aW9uIHNtKG4pe2NvbnN0IGU9U3RyaW5nKG4pO2xldCB0PSIiLHI9MCxpPSEx''@;'; put 'put ''LG89IiI7Zm9yKGxldCBhPTA7YTxlLmxlbmd0aDthKyspe2NvbnN0IGw9ZVthXTtyPjAmJiFpJiYoJyInPT09bHx8IiciPT09bCk/KGk9ITAsbz1sKTppJiZsPT09bz9pPSExOml8fCI8IiE9PWw/IWkmJiI+Ij09PWwmJnI+MD9yLT0xOjA9PT1yJiYodCs9bCk6cis9MX1yZXR1cm4gdH1mdW5j''@;'; put 'put ''dGlvbiBYTXQobil7cmV0dXJuIG59ZnVuY3Rpb24gUE0obil7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBuP246bi5yZXBsYWNlKC8oW0EtWl0pL2csIi0kMSIpLnJlcGxhY2VBbGwoIl8iLCItIikudG9Mb3dlckNhc2UoKX1MeGUoKSYmKE54ZSgpLEZ4ZSgpKTtjb25zdCBRTXQ9IklcdTAxMzBc''@;'; put 'put ''eGNjXHhjZFx1MDEyOCIudG9Mb3dlckNhc2UoKSx6eGU9bmV3IE1hcDtmdW5jdGlvbiB2MShuLGUpe3JldHVybiBmdW5jdGlvbiBKTXQobil7Y29uc3QgZT16eGUuZ2V0KG4pO2lmKHZvaWQgMCE9PWUpcmV0dXJuIGU7bGV0IHQ7dHJ5e3Q9IklcdTAxMzBceGNjXHhjZFx1MDEyOCIudG9Mb2Nh''@;'; put 'put ''bGVMb3dlckNhc2UobikhPT1RTXR9Y2F0Y2h7dD0hMX1yZXR1cm4genhlLnNldChuLHQpLHR9KGUpP24udG9Mb2NhbGVMb3dlckNhc2UoZSk6bi50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIHRUdCguLi5uKXtabyhjb25zb2xlKSYmY29uc29sZS5sb2coLi4ubil9ZnVuY3Rpb24gSGEoLi4ubil7''@;'; put 'put ''Wm8oY29uc29sZSkmJmNvbnNvbGUud2FybiguLi5uKX1jb25zdCBXeGU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gQ3NlKG4sZSwuLi50KXtsZXQgcj1XeGUuZ2V0KG4pO3ZvaWQgMD09PXImJihyPW5ldyBTZXQsV3hlLnNldChuLHIpKSwhci5oYXMoZSkmJihyLmFkZChlKSxIYSguLi50KSl9ZnVu''@;'; put 'put ''Y3Rpb24gQlcobil7Wm8oY29uc29sZSkmJmNvbnNvbGUud2FybihgRGVwcmVjYXRlZDogJHtufWApfWZ1bmN0aW9uIG03KC4uLm4pe1pvKGNvbnNvbGUpJiZjb25zb2xlLmVycm9yKC4uLm4pfWZ1bmN0aW9uIFl4ZShuLGU9MCl7bGV0IHQ9LTEscj1udWxsLGk9bjtmb3IoO251bGwhPT1pOyl7''@;'; put 'put ''aWYodD09PWUpe3I9aHMoaSk/aTpudWxsO2JyZWFrfWJMKGkpP2k9aS5ob3N0Oih0Kz0xLGk9aS5wYXJlbnROb2RlKX1yZXR1cm4gcn1mdW5jdGlvbiBwTChuLGUpe2NvbnN0IHQ9bi5jbG9zZXN0KCIuaGFuZHNvbnRhYmxlIik7cmV0dXJuISF0JiYodC5wYXJlbnROb2RlPT09ZXx8dD09PWUp''@;'; put 'put ''fWZ1bmN0aW9uIEFhKG4pe3JldHVybiBuLnRhcmdldH1mdW5jdGlvbiBaeGUobil7Y29uc3R7ZnJhbWVFbGVtZW50OmV9PW47cmV0dXJuIG4ucGFyZW50JiZPYmplY3QuZ2V0UHJvdG90eXBlT2Yobi5wYXJlbnQpJiZlIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQ/ZTpudWxsfWZ1bmN0''@;'; put 'put ''aW9uIHY3KG4pe3JldHVybiBaeGUobik/bi5wYXJlbnQ6bnVsbH1mdW5jdGlvbiByVHQobil7cmV0dXJuISFPYmplY3QuZ2V0UHJvdG90eXBlT2Yobi5wYXJlbnQpfWZ1bmN0aW9uIFZ2KG4sZT1bXSx0KXtjb25zdHtFTEVNRU5UX05PREU6cn09Tm9kZTtsZXQgbz1uO2Zvcig7bnVsbCE9byYm''@;'; put 'put ''byE9PXQ7KXtjb25zdHtub2RlVHlwZTphLG5vZGVOYW1lOmx9PW87aWYoYT09PXImJmhzKG8pJiYoZS5pbmNsdWRlcyhsKXx8ZS5pbmNsdWRlcyhvKSkpcmV0dXJuIG87bz1iTChvKT9vLmhvc3Q6by5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIGdMKG4sZSx0KXtjb25zdCByPVtd''@;'; put 'put ''O2xldCBpPWhzKG4pP246bnVsbDtmb3IoO2kmJihpPVZ2KGksZSx0KSxpJiYoIXR8fHQuY29udGFpbnMoaSkpKTspaWYoci5wdXNoKGkpLGJMKGkpKXtjb25zdHtob3N0OmF9PWk7aT1ocyhhKT9hOm51bGx9ZWxzZSBpPWkucGFyZW50RWxlbWVudDtjb25zdCBvPXIubGVuZ3RoO3JldHVybiBv''@;'; put 'put ''P3Jbby0xXTpudWxsfWZ1bmN0aW9uIEd4ZShuLGUpe2NvbnN0IHQ9e2VsZW1lbnQ6dm9pZCAwLGNsYXNzTmFtZXM6W119O2xldCByPW47Zm9yKDtudWxsIT09ciYmciE9PW4ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJiF0LmVsZW1lbnQ7KXtpZigic3RyaW5nIj09dHlwZW9mIGUm''@;'; put 'put ''JnIuY2xhc3NMaXN0LmNvbnRhaW5zKGUpKXQuZWxlbWVudD1yLHQuY2xhc3NOYW1lcy5wdXNoKGUpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIFJlZ0V4cCl7Y29uc3QgaT1BcnJheS5mcm9tKHIuY2xhc3NMaXN0KS5maWx0ZXIobz0+ZS50ZXN0KG8pKTtpLmxlbmd0aCYmKHQuZWxlbWVudD1yLHQu''@;'; put 'put ''Y2xhc3NOYW1lcy5wdXNoKC4uLmkpKX1yPXIucGFyZW50RWxlbWVudH1yZXR1cm4gdH1mdW5jdGlvbiBCdihuLGUpe2xldCB0PW4ucGFyZW50Tm9kZSxyPVtdO2Zvcigic3RyaW5nIj09dHlwZW9mIGU/cj1uIGluc3RhbmNlb2YgRG9jdW1lbnQ/QXJyYXkuZnJvbShuLnF1ZXJ5U2VsZWN0b3JB''@;'; put 'put ''bGwoZSkpOkFycmF5LmZyb20obi5vd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSkpOnIucHVzaChlKTtudWxsIT09dDspe2lmKHIuaW5kZXhPZih0KT4tMSlyZXR1cm4hMDt0PXQucGFyZW50Tm9kZX1yZXR1cm4hMX1mdW5jdGlvbiAkeGUobil7bGV0IGU9MCx0PW47aWYodC5wcmV2''@;'; put 'put ''aW91c1NpYmxpbmcpZm9yKDt0PXQucHJldmlvdXNTaWJsaW5nOyllKz0xO3JldHVybiBlfWZ1bmN0aW9uIGp2KG4sZSx0KXtjb25zdCByPXQucGFyZW50RWxlbWVudD8ucXVlcnlTZWxlY3RvcihgLmh0X2Nsb25lXyR7bn1gKTtyZXR1cm4hIXImJnIuY29udGFpbnMoZSl9ZnVuY3Rpb24gY3co''@;'; put 'put ''bil7aWYoIW58fCFuLmNsYXNzTGlzdHx8IW4ucGFyZW50Tm9kZXx8IW4ucGFyZW50Tm9kZS5wYXJlbnROb2RlfHxuLmNsYXNzTGlzdC5jb250YWlucygiaGlkZGVuSGVhZGVyIil8fCJub25lIj09PW4uc3R5bGUuZGlzcGxheSlyZXR1cm4hMTtjb25zdCBlPW4ucGFyZW50Tm9kZSx0PUFycmF5''@;'; put 'put ''LmZyb20oZT8ucGFyZW50Tm9kZT8uY2hpbGROb2Rlcz8/W10pO3JldHVybihlP3QuaW5kZXhPZihlKTotMSkrKE51bWJlci5wYXJzZUludChuLmdldEF0dHJpYnV0ZSgicm93c3BhbiIpPz8iIiwxMCl8fDEpPj10Lmxlbmd0aH1mdW5jdGlvbiBxeGUobil7cmV0dXJuIG4mJm4ubGVuZ3RoP24u''@;'; put 'put ''ZmlsdGVyKGU9PiEhZSk6W119ZnVuY3Rpb24gS3hlKG4sZSl7aWYoIW58fCFuLmxlbmd0aClyZXR1cm4gZT97cmVnZXhGcmVlOltdLHJlZ2V4ZXM6W119OltdO2NvbnN0IHQ9W10scj1bXTtyZXR1cm4gci5wdXNoKC4uLm4uZmlsdGVyKGk9Pntjb25zdCBvPWkgaW5zdGFuY2VvZiBSZWdFeHA7''@;'; put 'put ''cmV0dXJuIG8mJmUmJnQucHVzaChpKSwhb30pKSxlP3tyZWdleEZyZWU6cixyZWdleGVzOnR9OnJ9ZnVuY3Rpb24gTGEobixlKXtyZXR1cm4gdm9pZCAwIT09bi5jbGFzc0xpc3QmJiJzdHJpbmciPT10eXBlb2YgZSYmIiIhPT1lJiZuLmNsYXNzTGlzdC5jb250YWlucyhlKX1mdW5jdGlvbiBZ''@;'; put 'put ''cihuLGUpeyJzdHJpbmciPT10eXBlb2YgZSYmKGU9ZS5zcGxpdCgiICIpKSwoZT1xeGUoZSkpLmxlbmd0aD4wJiZuLmNsYXNzTGlzdC5hZGQoLi4uZSl9ZnVuY3Rpb24ga28obixlKXsic3RyaW5nIj09dHlwZW9mIGU/ZT1lLnNwbGl0KCIgIik6ZSBpbnN0YW5jZW9mIFJlZ0V4cCYmKGU9W2Vd''@;'; put 'put ''KTtsZXR7cmVnZXhGcmVlOnQscmVnZXhlczpyfT1LeGUoZSwhMCk7dD1xeGUodCksdC5sZW5ndGg+MCYmbi5jbGFzc0xpc3QucmVtb3ZlKC4uLnQpLHIuZm9yRWFjaChpPT57bi5jbGFzc0xpc3QuZm9yRWFjaChvPT57aS50ZXN0KG8pJiZuLmNsYXNzTGlzdC5yZW1vdmUobyl9KX0pfWZ1bmN0''@;'; put 'put ''aW9uIEtvKG4sZT1bXSx0KXtBcnJheS5pc0FycmF5KGUpfHwoZT1bW2UsdD8/IiJdXSksZS5mb3JFYWNoKHI9PntBcnJheS5pc0FycmF5KHIpJiYiIiE9PXJbMF0mJm4uc2V0QXR0cmlidXRlKHJbMF0sU3RyaW5nKHJbMV0pKX0pfWZ1bmN0aW9uIHc0KG4sZT1bXSl7InN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBlP2U9ZS5zcGxpdCgiICIpOmUgaW5zdGFuY2VvZiBSZWdFeHAmJihlPVtlXSk7Y29uc3R7cmVnZXhGcmVlOnQscmVnZXhlczpyfT1LeGUoZSwhMCk7aWYodC5mb3JFYWNoKGk9PnsiIiE9PWkmJm4ucmVtb3ZlQXR0cmlidXRlKGkpfSksci5sZW5ndGg+MCl7Y29uc3QgaT1uLmdldEF0dHJp''@;'; put 'put ''YnV0ZU5hbWVzKCk7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspe2NvbnN0IGE9aVtvXTtmb3IobGV0IGw9MDtsPHIubGVuZ3RoO2wrKylpZihyW2xdLnRlc3QoYSkpe24ucmVtb3ZlQXR0cmlidXRlKGEpO2JyZWFrfX19fWZ1bmN0aW9uIFNzZShuKXtpZigzPT09bi5ub2RlVHlwZSluLnBh''@;'; put 'put ''cmVudE5vZGU/LnJlbW92ZUNoaWxkKG4pO2Vsc2UgaWYoWyJUQUJMRSIsIlRIRUFEIiwiVEJPRFkiLCJURk9PVCIsIlRSIl0uaW5kZXhPZihuLm5vZGVOYW1lKT4tMSl7Y29uc3QgZT1uLmNoaWxkTm9kZXM7Zm9yKGxldCB0PWUubGVuZ3RoLTE7dD49MDt0LS0pU3NlKGVbdF0pfX1mdW5jdGlv''@;'; put 'put ''biBDNChuKXtsZXQgZTtmb3IoO2U9bi5sYXN0Q2hpbGQ7KW4ucmVtb3ZlQ2hpbGQoZSl9Y29uc3QgWHhlPS8oPChbXj5dKik+fCYoW147XSopOykvLEVzZT0ic2FuaXRpemVyIixpVHQ9e307ZnVuY3Rpb24gXzcobixlLHQ9ITAscj0iaW5uZXJIVE1MIixpPWlUdCl7aWYoWHhlLnRlc3QoZSkp''@;'; put 'put ''e2xldCBvOyJmdW5jdGlvbiI9PXR5cGVvZiB0P289dChlLHIpOighMSE9PXQmJkNzZShpLEVzZSxgSFRNTCBjb250ZW50IGlzIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIERPTSAoIiR7cn0iKSB3aXRob3V0IGEgc2FuaXRpemVyLiBDb25maWd1cmUgdGhlICJzYW5pdGl6ZXIiIG9wdGlvbiB0byBw''@;'; put 'put ''cmV2ZW50IFhTUyB2dWxuZXJhYmlsaXRpZXMuYCksbz1lKSxuLmlubmVySFRNTD1vfWVsc2UgeTcobixlKX1mdW5jdGlvbiB5NyhuLGUpe2NvbnN0IHQ9bi5maXJzdENoaWxkO3QmJjM9PT10Lm5vZGVUeXBlJiZudWxsPT09dC5uZXh0U2libGluZz90LnRleHRDb250ZW50PWU6KEM0KG4pLG4u''@;'; put 'put ''YXBwZW5kQ2hpbGQobi5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpKSl9ZnVuY3Rpb24gVXYobil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4uY2hlY2tWaXNpYmlsaXR5KXJldHVybiBuLmNoZWNrVmlzaWJpbGl0eSgpO2NvbnN0IGU9bi5vd25lckRvY3VtZW50LmRvY3VtZW50RWxl''@;'; put 'put ''bWVudCx0PW4ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztsZXQgcj1uO2Zvcig7ciE9PWU7KXtpZihudWxsPT09cilyZXR1cm4hMTtpZihiTChyKSl7Y29uc3QgaT1yLmhvc3Q7cmV0dXJuIFV2KGkuaW1wbD9pLmltcGw6aSl9aWYoci5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01F''@;'; put 'put ''TlRfTk9ERSlyZXR1cm4hMTtpZihyLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJmhzKHIpJiYibm9uZSI9PT10Py5nZXRDb21wdXRlZFN0eWxlKHIpLmRpc3BsYXkpcmV0dXJuITE7cj1yLnBhcmVudE5vZGV9cmV0dXJuITB9ZnVuY3Rpb24gUXhlKG4pe2NvbnN0IHQ9bi5vd25lckRv''@;'; put 'put ''Y3VtZW50LmRlZmF1bHRWaWV3O2xldCByPW47Zm9yKDtyLnBhcmVudEVsZW1lbnQ7KXtpZigiMHB4Ij09PXIuc3R5bGUuaGVpZ2h0fHwiMCI9PT1yLnN0eWxlLmhlaWdodCl7Y29uc3QgaT10Py5nZXRDb21wdXRlZFN0eWxlKHIpLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik7cmV0dXJu''@;'; put 'put ''ImhpZGRlbiI9PT1pfHwiY2xpcCI9PT1pfXI9ci5wYXJlbnRFbGVtZW50fXJldHVybiExfWZ1bmN0aW9uIFgwKG4pe2NvbnN0IGU9bi5vd25lckRvY3VtZW50LHQ9ZS5kZWZhdWx0VmlldyxyPWUuZG9jdW1lbnRFbGVtZW50O2xldCBvLGEsbCxpPW47Zm9yKG89aS5vZmZzZXRMZWZ0LGE9aS5v''@;'; put 'put ''ZmZzZXRUb3AsbD1pOyhpPWhzKGkub2Zmc2V0UGFyZW50KT9pLm9mZnNldFBhcmVudDpudWxsKSYmaSE9PWUuYm9keSYmIm9mZnNldExlZnQiaW4gaTspbys9aS5vZmZzZXRMZWZ0LGErPWkub2Zmc2V0VG9wLGw9aTtyZXR1cm4gbCYmImZpeGVkIj09PWwuc3R5bGUucG9zaXRpb24mJihvKz0o''@;'; put 'put ''dD8ucGFnZVhPZmZzZXQ/PzApfHxyLnNjcm9sbExlZnQsYSs9KHQ/LnBhZ2VZT2Zmc2V0Pz8wKXx8ci5zY3JvbGxUb3ApLHtsZWZ0Om8sdG9wOmF9fWZ1bmN0aW9uIEp4ZShuPXdpbmRvdyl7cmV0dXJuIG4uc2Nyb2xsWX1mdW5jdGlvbiBlQWUobj13aW5kb3cpe3JldHVybiBuLnNjcm9sbFh9''@;'; put 'put ''ZnVuY3Rpb24galcobixlPXdpbmRvdyl7cmV0dXJuIG4gaW5zdGFuY2VvZiBXaW5kb3c/SnhlKGUpOm4uc2Nyb2xsVG9wfWZ1bmN0aW9uIE1zZShuLGU9d2luZG93KXtyZXR1cm4gbiBpbnN0YW5jZW9mIFdpbmRvdz9lQWUoZSk6bi5zY3JvbGxMZWZ0fWZ1bmN0aW9uIG1MKG4pe2NvbnN0IGU9''@;'; put 'put ''bi5vd25lckRvY3VtZW50LHQ9ZS5kZWZhdWx0VmlldyxyPVsiYXV0byIsInNjcm9sbCJdO2xldCBpPW4ucGFyZW50RWxlbWVudDtmb3IoO2kmJmkuc3R5bGUmJmUuYm9keSE9PWk7KXtsZXR7b3ZlcmZsb3c6byxvdmVyZmxvd1g6YSxvdmVyZmxvd1k6bH09aS5zdHlsZTtpZihbbyxhLGxdLmlu''@;'; put 'put ''Y2x1ZGVzKCJzY3JvbGwiKSlyZXR1cm4gaTtpZih0JiYoe292ZXJmbG93Om8sb3ZlcmZsb3dYOmEsb3ZlcmZsb3dZOmx9PXQuZ2V0Q29tcHV0ZWRTdHlsZShpKSksci5pbmNsdWRlcyhvKXx8ci5pbmNsdWRlcyhhKXx8ci5pbmNsdWRlcyhsKXx8aS5jbGllbnRIZWlnaHQ8PWkuc2Nyb2xsSGVp''@;'; put 'put ''Z2h0KzEmJihyLmluY2x1ZGVzKGwpfHxyLmluY2x1ZGVzKG8pKXx8aS5jbGllbnRXaWR0aDw9aS5zY3JvbGxXaWR0aCsxJiYoci5pbmNsdWRlcyhhKXx8ci5pbmNsdWRlcyhvKSkpcmV0dXJuIGk7aT1pLnBhcmVudEVsZW1lbnR9cmV0dXJuIHQ/P2UuZG9jdW1lbnRFbGVtZW50fWZ1bmN0aW9u''@;'; put 'put ''IHRBZShuKXtyZXR1cm4gbi5zY3JvbGxIZWlnaHQtbi5jbGllbnRIZWlnaHR9ZnVuY3Rpb24gbkFlKG4pe3JldHVybiBuLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGh9ZnVuY3Rpb24gSE0obil7Y29uc3QgZT1uLm93bmVyRG9jdW1lbnQsdD1lLmRlZmF1bHRWaWV3O2xldCByPW4ucGFyZW50''@;'; put 'put ''RWxlbWVudDtmb3IoO3ImJnIuc3R5bGUmJmUuYm9keSE9PXI7KXtpZigidmlzaWJsZSIhPT1yLnN0eWxlLm92ZXJmbG93JiYiIiE9PXIuc3R5bGUub3ZlcmZsb3cpcmV0dXJuIHI7aWYodCl7Y29uc3QgaT10LmdldENvbXB1dGVkU3R5bGUociksbz1bInNjcm9sbCIsImhpZGRlbiIsImF1dG8i''@;'; put 'put ''LCJjbGlwIl0sYT1pLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93IiksbD1pLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93LXkiKSx1PWkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3cteCIpO2lmKG8uaW5jbHVkZXMoYSl8fG8uaW5jbHVkZXMobCl8fG8uaW5jbHVkZXModSkpcmV0dXJu''@;'; put 'put ''IHJ9cj1yLnBhcmVudEVsZW1lbnR9cmV0dXJuIHQ/P2UuZG9jdW1lbnRFbGVtZW50fWZ1bmN0aW9uIHV3KG4sZSx0PXdpbmRvdyl7aWYoIW4pcmV0dXJuO2lmKG4gaW5zdGFuY2VvZiBXaW5kb3cpcmV0dXJuIndpZHRoIj09PWU/YCR7bi5pbm5lcldpZHRofXB4YDoiaGVpZ2h0Ij09PWU/YCR7''@;'; put 'put ''bi5pbm5lckhlaWdodH1weGA6dm9pZCAwO2NvbnN0IHI9bi5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGUpfHxuLnN0eWxlW2VdO2lmKCIiIT09ciYmdm9pZCAwIT09cilyZXR1cm4gcjtjb25zdCBpPXQuZ2V0Q29tcHV0ZWRTdHlsZShuKSxvPWkuZ2V0UHJvcGVydHlWYWx1ZShlKXx8aVtlXTty''@;'; put 'put ''ZXR1cm4iIiE9PW8mJnZvaWQgMCE9PW8/bzp2b2lkIDB9ZnVuY3Rpb24gb1R0KG4sZSl7bGV0IHQ9ITE7cmV0dXJuIGUgaW5zdGFuY2VvZiBDU1NTdHlsZVJ1bGUmJmUuc2VsZWN0b3JUZXh0JiYoIm1zTWF0Y2hlc1NlbGVjdG9yImluIG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLm1zTWF0Y2hl''@;'; put 'put ''c1NlbGVjdG9yP3Q9bi5tc01hdGNoZXNTZWxlY3RvcihlLnNlbGVjdG9yVGV4dCk6bi5tYXRjaGVzJiYodD1uLm1hdGNoZXMoZS5zZWxlY3RvclRleHQpKSksdH1mdW5jdGlvbiBaZChuKXtyZXR1cm4gbi5vZmZzZXRXaWR0aH1mdW5jdGlvbiBIaChuKXtyZXR1cm4gbi5vZmZzZXRIZWlnaHR9''@;'; put 'put ''ZnVuY3Rpb24gZHcobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBXaW5kb3c/bi5pbm5lckhlaWdodDpuLmNsaWVudEhlaWdodH1mdW5jdGlvbiBUc2Uobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBXaW5kb3c/bi5pbm5lcldpZHRoOm4uY2xpZW50V2lkdGh9ZnVuY3Rpb24gYVR0KG4sZSx0KXtuLmFk''@;'; put 'put ''ZEV2ZW50TGlzdGVuZXIoZSx0LCExKX1mdW5jdGlvbiBzVHQobixlLHQpe24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHQsITEpfWZ1bmN0aW9uIHhzZShuKXtyZXR1cm4gbi5zZWxlY3Rpb25TdGFydD9uLnNlbGVjdGlvblN0YXJ0OjB9ZnVuY3Rpb24gckFlKG4pe3JldHVybiBuLnNlbGVjdGlv''@;'; put 'put ''bkVuZD9uLnNlbGVjdGlvbkVuZDowfWZ1bmN0aW9uIGxUdChuPXdpbmRvdyl7Y29uc3QgZT1uLmRvY3VtZW50O2xldCB0PSIiO3JldHVybiBuLmdldFNlbGVjdGlvbj90PW4uZ2V0U2VsZWN0aW9uKCk/LnRvU3RyaW5nKCk/PyIiOiJzZWxlY3Rpb24iaW4gZSYmZS5zZWxlY3Rpb24mJiJDb250''@;'; put 'put ''cm9sIiE9PWUuc2VsZWN0aW9uLnR5cGUmJih0PWUuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCkudGV4dCksdH1mdW5jdGlvbiBBc2Uobj13aW5kb3cpe2lmKG4uZ2V0U2VsZWN0aW9uKXtjb25zdCBlPW4uZ2V0U2VsZWN0aW9uKCk7ZT8uZW1wdHk/ZS5lbXB0eSgpOmU/LnJlbW92ZUFsbFJhbmdl''@;'; put 'put ''cyYmZS5yZW1vdmVBbGxSYW5nZXMoKX19ZnVuY3Rpb24gdkwobixlLHQpe2lmKHZvaWQgMD09PXQmJih0PWUpLG4uc2V0U2VsZWN0aW9uUmFuZ2Upe24uZm9jdXMoKTt0cnl7bi5zZXRTZWxlY3Rpb25SYW5nZShlLHQpfWNhdGNoe2NvbnN0IGk9bi5wYXJlbnRFbGVtZW50O2lmKGkpe2NvbnN0''@;'; put 'put ''IG89aS5zdHlsZS5kaXNwbGF5O2kuc3R5bGUuZGlzcGxheT0iYmxvY2siLG4uc2V0U2VsZWN0aW9uUmFuZ2UoZSx0KSxpLnN0eWxlLmRpc3BsYXk9b319fX1sZXQga3NlO2Z1bmN0aW9uIGlBZShuPWRvY3VtZW50KXtyZXR1cm4gSFcoKT9OdW1iZXIuaXNJbnRlZ2VyKG4uZGVmYXVsdFZpZXc/''@;'; put 'put ''LmRldmljZVBpeGVsUmF0aW98fDEpPzA6MjowfWZ1bmN0aW9uIEdkKG49ZG9jdW1lbnQpe3JldHVybiB2b2lkIDA9PT1rc2UmJihrc2U9ZnVuY3Rpb24gY1R0KG49ZG9jdW1lbnQpe2NvbnN0IGU9KHI9ITEpPT57Y29uc3QgaT1uLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2kuc3R5bGUuaGVpZ2h0''@;'; put 'put ''PSIyMDBweCIsaS5zdHlsZS53aWR0aD0iMTAwJSI7Y29uc3Qgbz1uLmNyZWF0ZUVsZW1lbnQoImRpdiIpO28uY2xhc3NMaXN0LmFkZCgiaHRTY3JvbGxiYXJUZXN0IiksciYmby5jbGFzc0xpc3QuYWRkKCJodFNjcm9sbGJhclNhZmFyaVRlc3QiKSxvLnN0eWxlLmJveFNpemluZz0iY29udGVu''@;'; put 'put ''dC1ib3giLG8uc3R5bGUuaGVpZ2h0PSIxNTBweCIsby5zdHlsZS5sZWZ0PSIwcHgiLG8uc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsby5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLG8uc3R5bGUudG9wPSIwcHgiLG8uc3R5bGUud2lkdGg9IjIwMHB4IixvLnN0eWxlLnZpc2liaWxpdHk9Imhp''@;'; put 'put ''ZGRlbiIsby5hcHBlbmRDaGlsZChpKSxuLmJvZHkuYXBwZW5kQ2hpbGQobyk7Y29uc3QgYT1pLm9mZnNldFdpZHRoO28uc3R5bGUub3ZlcmZsb3c9InNjcm9sbCI7bGV0IGw9aS5vZmZzZXRXaWR0aDtyZXR1cm4gYT09PWwmJihsPW8uY2xpZW50V2lkdGgpLG4uYm9keS5yZW1vdmVDaGlsZChv''@;'; put 'put ''KSxhLWx9LHQ9ZSgpO3JldHVybiAwIT09dHx8IUJ4ZSgpfHxRNSgpfHxQVygpP3Q6ZSghMCl9KG4pKSxrc2V9ZnVuY3Rpb24gUnNlKG4pe3JldHVybiBuIGluc3RhbmNlb2YgV2luZG93P24uZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ+bi5pbm5lckhlaWdodDpuLm9mZnNldFdpZHRoIT09''@;'; put 'put ''bi5jbGllbnRXaWR0aH1mdW5jdGlvbiBJc2Uobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBXaW5kb3c/bi5kb2N1bWVudC5ib2R5LnNjcm9sbFdpZHRoPm4uaW5uZXJXaWR0aDpuLm9mZnNldEhlaWdodCE9PW4uY2xpZW50SGVpZ2h0fWZ1bmN0aW9uIFVXKG4sZSx0KXtuLnN0eWxlLnRyYW5zZm9y''@;'; put 'put ''bT1gdHJhbnNsYXRlM2QoJHtlfSwke3R9LDApYH1mdW5jdGlvbiB1VHQobil7bGV0IGU7cmV0dXJuIG4uc3R5bGUudHJhbnNmb3JtJiYiIiE9PShlPW4uc3R5bGUudHJhbnNmb3JtKT9bInRyYW5zZm9ybSIsZV06LTF9ZnVuY3Rpb24gX0wobil7bi5zdHlsZS50cmFuc2Zvcm0mJiIiIT09bi5z''@;'; put 'put ''dHlsZS50cmFuc2Zvcm0mJihuLnN0eWxlLnRyYW5zZm9ybT0iIil9ZnVuY3Rpb24geUwobil7cmV0dXJuIG4mJihbIklOUFVUIiwiU0VMRUNUIiwiVEVYVEFSRUEiXS5pbmRleE9mKG4ubm9kZU5hbWUpPi0xfHwidHJ1ZSI9PT1uLmNvbnRlbnRFZGl0YWJsZSl9ZnVuY3Rpb24gVk0obil7cmV0''@;'; put 'put ''dXJuIHlMKG4pJiYhKCJob3RJbnB1dCJpbiBuLmRhdGFzZXQpfWZ1bmN0aW9uIGRUdChuKXtjb25zdCBlPW4ub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50O2hzKGUpJiYhVk0oZSkmJihuIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudHx8biBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVs''@;'; put 'put ''ZW1lbnQpJiZuLnNlbGVjdCgpfWZ1bmN0aW9uIERzZShuKXtyZXR1cm4hbi5wYXJlbnROb2RlfWZ1bmN0aW9uIG9BZShuLGUpe25ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigocixpKT0+e3IuZm9yRWFjaChvPT57by5pc0ludGVyc2VjdGluZyYmKGUoKSxpLmRpc2Nvbm5lY3QoKSl9KX0pLm9i''@;'; put 'put ''c2VydmUobil9ZnVuY3Rpb24gTHNlKG4sZT0hMCx0PSEwKXtjb25zdCByPW4ub3duZXJEb2N1bWVudCxpPXIuY3JlYXRlUmFuZ2UoKSxvPXIuZGVmYXVsdFZpZXc/LmdldFNlbGVjdGlvbigpO2lmKEtvKG4sImNvbnRlbnRlZGl0YWJsZSIsITApLHQpe2NvbnN0IGE9WyJhcmlhLWhpZGRlbiIs''@;'; put 'put ''InRydWUiXTtLbyhuLGFbMF0sYVsxXSl9ZSYmWXIobiwiaW52aXNpYmxlU2VsZWN0aW9uIiksaS5zZWxlY3ROb2RlQ29udGVudHMobiksbz8ucmVtb3ZlQWxsUmFuZ2VzKCksbz8uYWRkUmFuZ2UoaSl9ZnVuY3Rpb24gT3NlKG4sZT0hMCl7Y29uc3QgdD1uLm93bmVyRG9jdW1lbnQuZGVmYXVs''@;'; put 'put ''dFZpZXc/LmdldFNlbGVjdGlvbigpO24uaGFzQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpJiZuLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKSx0Py5yZW1vdmVBbGxSYW5nZXMoKSxlJiZrbyhuLCJpbnZpc2libGVTZWxlY3Rpb24iKSxuLnJlbW92ZUF0dHJpYnV0ZSgiY29udGVudGVk''@;'; put 'put ''aXRhYmxlIil9ZnVuY3Rpb24gYUFlKG4sZSx0PSEwKXtMc2Uobix0KSxlKCksT3NlKG4sdCl9ZnVuY3Rpb24gaHMobil7aWYoIm9iamVjdCIhPXR5cGVvZiBufHxudWxsPT09bilyZXR1cm4hMTtjb25zdCBlPW4ub3duZXJEb2N1bWVudD8uZGVmYXVsdFZpZXc/LkVsZW1lbnQ7cmV0dXJuISEo''@;'; put 'put ''ZSYmbiBpbnN0YW5jZW9mIGUpfWZ1bmN0aW9uIE5zZShuKXtyZXR1cm4gaHMobikmJigiVEQiPT09bi50YWdOYW1lfHwiVEgiPT09bi50YWdOYW1lKX1mdW5jdGlvbiBoVHQobil7cmV0dXJuIklOUFVUIj09PW4udGFnTmFtZX1mdW5jdGlvbiBiTChuKXtyZXR1cm4gbi5ub2RlVHlwZT09PU5v''@;'; put 'put ''ZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmImhvc3QiaW4gbn1mdW5jdGlvbiBmVHQobixlKXtyZXR1cm4gbi5jaGlsZE5vZGVzW2VdfHxudWxsfWZ1bmN0aW9uIF9hKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBufWZ1bmN0aW9uIHNBZShuLGU9MjAwKXtsZXQgdD0wO2NvbnN0IHI9''@;'; put 'put ''e2xhc3RDYWxsVGhyb3R0bGVkOiEwfTtsZXQgaT1udWxsO3JldHVybiBmdW5jdGlvbiBvKC4uLmEpe2NvbnN0IGw9RGF0ZS5ub3coKTtsZXQgdT0hMTtyLmxhc3RDYWxsVGhyb3R0bGVkPSEwLHR8fCh0PWwsdT0hMCk7Y29uc3QgZz1lLShsLXQpO3JldHVybiB1PyhyLmxhc3RDYWxsVGhyb3R0''@;'; put 'put ''bGVkPSExLG4uYXBwbHkodGhpcyxhKSk6KGkmJmNsZWFyVGltZW91dChpKSxpPXNldFRpbWVvdXQoKCk9PntyLmxhc3RDYWxsVGhyb3R0bGVkPSExLG4uYXBwbHkodGhpcyxhKSx0PTAsaT1udWxsfSxnKSkscn19ZnVuY3Rpb24gcFR0KG4sZT0yMDAsdD0xMCl7Y29uc3Qgcj1zQWUobixlKTts''@;'; put 'put ''ZXQgaT10O2Z1bmN0aW9uIGEoLi4ubCl7cmV0dXJuIGk/KGktPTEsbi5hcHBseSh0aGlzLGwpKTpyLmFwcGx5KHRoaXMsbCl9cmV0dXJuIGEuY2xlYXJIaXRzPWZ1bmN0aW9uIG8oKXtpPXR9LGF9ZnVuY3Rpb24gQk0obixlPTIwMCl7bGV0IHIsdD1udWxsO2Z1bmN0aW9uIGkoLi4uYSl7cmV0''@;'; put 'put ''dXJuIHQmJmNsZWFyVGltZW91dCh0KSx0PXNldFRpbWVvdXQoKCk9Pnt0PW51bGwscj1uLmFwcGx5KHRoaXMsYSl9LGUpLHJ9cmV0dXJuIGkuY2FuY2VsPWZ1bmN0aW9uIG8oKXtudWxsIT09dCYmKGNsZWFyVGltZW91dCh0KSx0PW51bGwpfSxpfWZ1bmN0aW9uIGdUdCguLi5uKXtjb25zdFtl''@;'; put 'put ''LC4uLnRdPW47cmV0dXJuIGZ1bmN0aW9uKC4uLmkpe3JldHVybiBtMSh0LChvLGEpPT5hKG8pLGUuYXBwbHkodGhpcyxpKSl9fWZ1bmN0aW9uIG1UdChuLC4uLmUpe3JldHVybiBmdW5jdGlvbiguLi5yKXtyZXR1cm4gbi5hcHBseSh0aGlzLGUuY29uY2F0KHIpKX19ZnVuY3Rpb24gbEFlKG4p''@;'; put 'put ''e2NvbnN0IGU9bi5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uIHQocil7cmV0dXJuIGZ1bmN0aW9uKC4uLm8pe2NvbnN0IGE9ci5jb25jYXQobyk7bGV0IGw7cmV0dXJuIGw9YS5sZW5ndGg+PWU/bi5hcHBseSh0aGlzLGEpOnQoYSksbH19KFtdKX1mdW5jdGlvbiB2VHQobil7Y29uc3QgZT1uLmxl''@;'; put 'put ''bmd0aDtyZXR1cm4gZnVuY3Rpb24gdChyKXtyZXR1cm4gZnVuY3Rpb24oLi4ubyl7Y29uc3QgYT1yLmNvbmNhdChvLnJldmVyc2UoKSk7bGV0IGw7cmV0dXJuIGw9YS5sZW5ndGg+PWU/bi5hcHBseSh0aGlzLGEpOnQoYSksbH19KFtdKX1mdW5jdGlvbiBGc2UobixlLHQscixpLG8sYSxsKXty''@;'; put 'put ''ZXR1cm4gWm8obCk/bi5jYWxsKGUsdCxyLGksbyxhLGwpOlpvKGEpP24uY2FsbChlLHQscixpLG8sYSk6Wm8obyk/bi5jYWxsKGUsdCxyLGksbyk6Wm8oaSk/bi5jYWxsKGUsdCxyLGkpOlpvKHIpP24uY2FsbChlLHQscik6Wm8odCk/bi5jYWxsKGUsdCk6bi5jYWxsKGUpfWNvbnN0IEVhPXtB''@;'; put 'put ''TFQ6MTgsQVJST1dfRE9XTjo0MCxBUlJPV19MRUZUOjM3LEFSUk9XX1JJR0hUOjM5LEFSUk9XX1VQOjM4LEFVRElPX0RPV046RlcoKT8xODI6MTc0LEFVRElPX01VVEU6RlcoKT8xODE6MTczLEFVRElPX1VQOkZXKCk/MTgzOjE3NSxCQUNLU1BBQ0U6OCxDQVBTX0xPQ0s6MjAsQ09NTUE6MTg4''@;'; put 'put ''LENPTU1BTkRfTEVGVDo5MSxDT01NQU5EX1JJR0hUOjkzLENPTU1BTkRfRklSRUZPWDoyMjQsQ09OVFJPTDoxNyxERUxFVEU6NDYsRU5EOjM1LEVOVEVSOjEzLEVTQ0FQRToyNyxGMToxMTIsRjI6MTEzLEYzOjExNCxGNDoxMTUsRjU6MTE2LEY2OjExNyxGNzoxMTgsRjg6MTE5LEY5OjEyMCxG''@;'; put 'put ''MTA6MTIxLEYxMToxMjIsRjEyOjEyMyxGMTM6MTI0LEYxNDoxMjUsRjE1OjEyNixGMTY6MTI3LEYxNzoxMjgsRjE4OjEyOSxGMTk6MTMwLEhPTUU6MzYsSU5TRVJUOjQ1LE1FRElBX05FWFQ6MTc2LE1FRElBX1BMQVlfUEFVU0U6MTc5LE1FRElBX1BSRVY6MTc3LE1FRElBX1NUT1A6MTc4LE5V''@;'; put 'put ''TEw6MCxOVU1fTE9DSzoxNDQsUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEFVU0U6MTksUEVSSU9EOjE5MCxTQ1JPTExfTE9DSzoxNDUsU0hJRlQ6MTYsU1BBQ0U6MzIsVEFCOjksQTo2NSxDOjY3LEQ6NjgsRjo3MCxMOjc2LE86NzksUDo4MCxTOjgzLFY6ODYsWDo4OCxZOjg5LFo6OTB9LF9U''@;'; put 'put ''dD1bRWEuQUxULEVhLkFSUk9XX0RPV04sRWEuQVJST1dfTEVGVCxFYS5BUlJPV19SSUdIVCxFYS5BUlJPV19VUCxFYS5BVURJT19ET1dOLEVhLkFVRElPX01VVEUsRWEuQVVESU9fVVAsRWEuQkFDS1NQQUNFLEVhLkNBUFNfTE9DSyxFYS5ERUxFVEUsRWEuRU5ELEVhLkVOVEVSLEVhLkVTQ0FQ''@;'; put 'put ''RSxFYS5GMSxFYS5GMixFYS5GMyxFYS5GNCxFYS5GNSxFYS5GNixFYS5GNyxFYS5GOCxFYS5GOSxFYS5GMTAsRWEuRjExLEVhLkYxMixFYS5GMTMsRWEuRjE0LEVhLkYxNSxFYS5GMTYsRWEuRjE3LEVhLkYxOCxFYS5GMTksRWEuSE9NRSxFYS5JTlNFUlQsRWEuTUVESUFfTkVYVCxFYS5NRURJ''@;'; put 'put ''QV9QTEFZX1BBVVNFLEVhLk1FRElBX1BSRVYsRWEuTUVESUFfU1RPUCxFYS5OVUxMLEVhLk5VTV9MT0NLLEVhLlBBR0VfRE9XTixFYS5QQUdFX1VQLEVhLlBBVVNFLEVhLlNDUk9MTF9MT0NLLEVhLlNISUZULEVhLlRBQl07ZnVuY3Rpb24gUHNlKG4pe3JldHVybiAzMj09PW58fG4+PTQ4JiZu''@;'; put 'put ''PD01N3x8bj49OTYmJm48PTExMXx8bj49MTg2JiZuPD0xOTJ8fG4+PTIxOSYmbjw9MjIyfHxuPj0yMjZ8fG4+PTY1JiZuPD05MH1mdW5jdGlvbiBjQWUobil7cmV0dXJuIF9UdC5pbmNsdWRlcyhuKX1mdW5jdGlvbiB5VHQobil7Y29uc3QgZT1bXTtyZXR1cm4gbHcoKT9lLnB1c2goRWEuQ09N''@;'; put 'put ''TUFORF9MRUZULEVhLkNPTU1BTkRfUklHSFQsRWEuQ09NTUFORF9GSVJFRk9YKTplLnB1c2goRWEuQ09OVFJPTCksZS5pbmNsdWRlcyhuKX1mdW5jdGlvbiB1QWUobil7cmV0dXJuW0VhLkNPTlRST0wsRWEuQ09NTUFORF9MRUZULEVhLkNPTU1BTkRfUklHSFQsRWEuQ09NTUFORF9GSVJFRk9Y''@;'; put 'put ''XS5pbmNsdWRlcyhuKX1mdW5jdGlvbiBodyhuLGUpe2NvbnN0IHQ9ZS5zcGxpdCgifCIpO2xldCByPSExO3JldHVybiBYbih0LGk9PntpZihuPT09RWFbaV0pcmV0dXJuIHI9ITAsITF9KSxyfWZ1bmN0aW9uIEYzKG4pe24uaXNJbW1lZGlhdGVQcm9wYWdhdGlvbkVuYWJsZWQ9ITEsbi5jYW5j''@;'; put 'put ''ZWxCdWJibGU9ITB9ZnVuY3Rpb24gSjUobil7cmV0dXJuITE9PT1uLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25FbmFibGVkfWZ1bmN0aW9uIHp2KG4pe3JldHVybiAyPT09bi5idXR0b259ZnVuY3Rpb24gelcobil7cmV0dXJuIDA9PT1uLmJ1dHRvbn1mdW5jdGlvbiBkQWUobil7cmV0dXJuIDE9''@;'; put 'put ''PT1uLmJ1dHRvbn1mdW5jdGlvbiBoQWUobil7cmV0dXJuIHR5cGVvZiBUb3VjaEV2ZW50PCJ1IiYmbiBpbnN0YW5jZW9mIFRvdWNoRXZlbnR9ZnVuY3Rpb24gZkFlKG4sZSl7Y29uc3QgdD17eDpuLm9mZnNldFgseTpuLm9mZnNldFl9O2xldCByPUFhKG4pO2lmKCFocyhlKXx8ciE9PWUmJnIu''@;'; put 'put ''Y29udGFpbnMoZSkpcmV0dXJuIHQ7Zm9yKDtyIT09ZTspdC54Kz1yLm9mZnNldExlZnQsdC55Kz1yLm9mZnNldFRvcCxyPXIub2Zmc2V0UGFyZW50O3JldHVybiB0fWNvbnN0IGZ3PVsiYWZ0ZXJDZWxsTWV0YVJlc2V0IiwiYWZ0ZXJDaGFuZ2UiLCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9w''@;'; put 'put ''dGlvbnMiLCJiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zIiwiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIsImJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zIiwiYWZ0ZXJDb250ZXh0TWVudUhpZGUiLCJiZWZvcmVDb250ZXh0TWVudVNob3ciLCJhZnRlckNvbnRleHRNZW51U2hv''@;'; put 'put ''dyIsImFmdGVyQ29weUxpbWl0IiwiYmVmb3JlQ3JlYXRlQ29sIiwiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNhY2hlVXBkYXRlIiwiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsImFmdGVyQ3JlYXRlQ29sIiwiYmVmb3JlQ3JlYXRlUm93IiwiYWZ0ZXJDcmVhdGVSb3ciLCJiZWZvcmVBbHRlciIs''@;'; put 'put ''ImFmdGVyRGVzZWxlY3QiLCJhZnRlckRlc3Ryb3kiLCJhZnRlckRvY3VtZW50S2V5RG93biIsImFmdGVyRHJhd1NlbGVjdGlvbiIsImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIiwiYmVmb3JlQ29tcG9zaXRpb25TdGFydCIsImFmdGVyR2V0Q2VsbE1ldGEiLCJhZnRlckdldENvbEhlYWRl''@;'; put 'put ''ciIsImFmdGVyR2V0Um93SGVhZGVyIiwiYWZ0ZXJJbml0IiwiYWZ0ZXJMb2FkRGF0YSIsImFmdGVyVXBkYXRlRGF0YSIsImFmdGVyRGF0YVByb3ZpZGVyRmV0Y2giLCJhZnRlckRhdGFQcm92aWRlckZldGNoRXJyb3IiLCJhZnRlckRhdGFQcm92aWRlckZldGNoQWJvcnQiLCJoYXNFeHRlcm5h''@;'; put 'put ''bERhdGFTb3VyY2UiLCJiZWZvcmVSb3dzTXV0YXRpb24iLCJhZnRlclJvd3NNdXRhdGlvbiIsImFmdGVyUm93c011dGF0aW9uRXJyb3IiLCJhZnRlck1vbWVudHVtU2Nyb2xsIiwiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIiwiYWZ0ZXJP''@;'; put 'put ''bkNlbGxNb3VzZURvd24iLCJhZnRlck9uQ2VsbE1vdXNlVXAiLCJhZnRlck9uQ2VsbENvbnRleHRNZW51IiwiYWZ0ZXJPbkNlbGxNb3VzZU92ZXIiLCJhZnRlck9uQ2VsbE1vdXNlT3V0IiwiYWZ0ZXJPbkNlbGxNb3VzZU92ZXJPdXRzaWRlIiwiYWZ0ZXJSZW1vdmVDb2wiLCJhZnRlclJlbW92''@;'; put 'put ''ZVJvdyIsImJlZm9yZVJlbmRlcmVyIiwiYWZ0ZXJSZW5kZXJlciIsImFmdGVyUm93U2VxdWVuY2VDYWNoZVVwZGF0ZSIsImFmdGVyUm93U2VxdWVuY2VDaGFuZ2UiLCJiZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHkiLCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsImJl''@;'; put 'put ''Zm9yZVZpZXdwb3J0U2Nyb2xsIiwiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCJhZnRlclNjcm9sbCIsImFmdGVyU2VsZWN0aW9uIiwiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLCJhZnRlclNlbGVjdGlvbkVuZCIsImFmdGVyU2VsZWN0aW9uRW5kQnlQ''@;'; put 'put ''cm9wIiwiYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldCIsImJlZm9yZVNlbGVjdENvbHVtbnMiLCJhZnRlclNlbGVjdENvbHVtbnMiLCJiZWZvcmVTZWxlY3RSb3dzIiwiYWZ0ZXJTZWxlY3RSb3dzIiwiYmVmb3JlU2VsZWN0QWxsIiwiYWZ0ZXJTZWxlY3RBbGwiLCJhZnRlclNldENlbGxNZXRhIiwi''@;'; put 'put ''YWZ0ZXJSZW1vdmVDZWxsTWV0YSIsImFmdGVyU2V0RGF0YUF0Q2VsbCIsImFmdGVyU2V0RGF0YUF0Um93UHJvcCIsImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsImFmdGVyU2V0VGhlbWUiLCJhZnRlclVwZGF0ZVNldHRpbmdzIiwiYWZ0ZXJWYWxpZGF0ZSIsImJlZm9yZUxhbmd1YWdlQ2hh''@;'; put 'put ''bmdlIiwiYWZ0ZXJMYW5ndWFnZUNoYW5nZSIsImJlZm9yZUF1dG9maWxsIiwiYWZ0ZXJBdXRvZmlsbCIsImJlZm9yZUNlbGxBbGlnbm1lbnQiLCJiZWZvcmVDaGFuZ2UiLCJiZWZvcmVDaGFuZ2VSZW5kZXIiLCJiZWZvcmVIZWlnaHRDaGFuZ2UiLCJiZWZvcmVXaWR0aENoYW5nZSIsImJlZm9y''@;'; put 'put ''ZURyYXdCb3JkZXJzIiwiYmVmb3JlR2V0Q2VsbE1ldGEiLCJiZWZvcmVSZW1vdmVDZWxsTWV0YSIsImJlZm9yZUluaXQiLCJiZWZvcmVJbml0V2Fsa29udGFibGUiLCJiZWZvcmVMb2FkRGF0YSIsImJlZm9yZVVwZGF0ZURhdGEiLCJiZWZvcmVEYXRhUHJvdmlkZXJGZXRjaCIsImJlZm9yZUtl''@;'; put 'put ''eURvd24iLCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLCJiZWZvcmVPbkNlbGxNb3VzZVVwIiwiYmVmb3JlT25DZWxsQ29udGV4dE1lbnUiLCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLCJiZWZvcmVPbkNlbGxNb3VzZU91dCIsImJlZm9yZU9uQ2VsbE1vdXNlT3Zlck91dHNpZGUiLCJiZWZvcmVS''@;'; put 'put ''ZW1vdmVDb2wiLCJiZWZvcmVSZW1vdmVSb3ciLCJiZWZvcmVWaWV3UmVuZGVyIiwiYWZ0ZXJWaWV3UmVuZGVyIiwiYmVmb3JlUmVuZGVyIiwiYWZ0ZXJSZW5kZXIiLCJiZWZvcmVSb3dXcmFwIiwiYmVmb3JlQ29sdW1uV3JhcCIsImJlZm9yZVNldENlbGxNZXRhIiwiYmVmb3JlU2VsZWN0aW9u''@;'; put 'put ''Rm9jdXNTZXQiLCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsImJlZm9yZVNldFJhbmdlU3RhcnQiLCJiZWZvcmVTZXRSYW5nZUVuZCIsImJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldCIsImJlZm9yZVRvdWNoU2Nyb2xsIiwiYmVmb3JlVmFsaWRhdGUiLCJiZWZvcmVWYWx1ZVJlbmRlciIs''@;'; put 'put ''ImNvbnN0cnVjdCIsImluaXQiLCJtb2RpZnlDb2xIZWFkZXIiLCJtb2RpZnlDb2xXaWR0aCIsIm1vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlIiwibW9kaWZ5Rm9jdXNlZEVsZW1lbnQiLCJtb2RpZnlSb3dIZWFkZXIiLCJtb2RpZnlSb3dIZWlnaHQiLCJtb2RpZnlSb3dIZWlnaHRCeU92''@;'; put 'put ''ZXJsYXlOYW1lIiwibW9kaWZ5RGF0YSIsIm1vZGlmeVNvdXJjZURhdGEiLCJtb2RpZnlSb3dEYXRhIiwibW9kaWZ5R2V0Q2VsbENvb3JkcyIsIm1vZGlmeUdldENvb3Jkc0VsZW1lbnQiLCJtb2RpZnlGb2N1c09uVGFiTmF2aWdhdGlvbiIsImJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlciIs''@;'; put 'put ''ImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsImJlZm9yZUNvbHVtblNvcnQiLCJhZnRlckNvbHVtblNvcnQiLCJtb2RpZnlBdXRvZmlsbFJhbmdlIiwibW9kaWZ5Q29weWFibGVSYW5nZSIsImJlZm9yZUN1dCIsImFmdGVyQ3V0IiwiYmVmb3JlQ29weSIsImFmdGVyQ29weSIsImJl''@;'; put 'put ''Zm9yZVBhc3RlIiwiYWZ0ZXJQYXN0ZSIsImJlZm9yZUNvbHVtbkZyZWV6ZSIsImFmdGVyQ29sdW1uRnJlZXplIiwiYmVmb3JlQ29sdW1uTW92ZSIsImFmdGVyQ29sdW1uTW92ZSIsImJlZm9yZUNvbHVtblVuZnJlZXplIiwiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsImJlZm9yZVJvd01vdmUiLCJh''@;'; put 'put ''ZnRlclJvd01vdmUiLCJiZWZvcmVDb2x1bW5SZXNpemUiLCJhZnRlckNvbHVtblJlc2l6ZSIsImJlZm9yZVJvd1Jlc2l6ZSIsImFmdGVyUm93UmVzaXplIiwiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLCJhZnRlckdldFJvd0hlYWRlclJlbmRlcmVycyIsImJlZm9yZVN0cmV0Y2hp''@;'; put 'put ''bmdDb2x1bW5XaWR0aCIsImJlZm9yZUZpbHRlciIsImFmdGVyRmlsdGVyIiwiYmVmb3JlUGFnZUNoYW5nZSIsImFmdGVyUGFnZUNoYW5nZSIsImJlZm9yZVBhZ2VTaXplQ2hhbmdlIiwiYWZ0ZXJQYWdlU2l6ZUNoYW5nZSIsImFmdGVyUGFnZVNpemVWaXNpYmlsaXR5Q2hhbmdlIiwiYWZ0ZXJQ''@;'; put 'put ''YWdlQ291bnRlclZpc2liaWxpdHlDaGFuZ2UiLCJhZnRlclBhZ2VOYXZpZ2F0aW9uVmlzaWJpbGl0eUNoYW5nZSIsImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLCJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIiwiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkIiwiYWZ0ZXJTaGVldEFk''@;'; put 'put ''ZGVkIiwiYWZ0ZXJTaGVldFJlbmFtZWQiLCJhZnRlclNoZWV0UmVtb3ZlZCIsIm1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIsIm1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIiwiYmVmb3JlVW5kbyIsImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsImFmdGVyVW5kbyIsImFmdGVyVW5kb1N0YWNrQ2hh''@;'; put 'put ''bmdlIiwiYmVmb3JlUmVkbyIsImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsImFmdGVyUmVkbyIsImFmdGVyUmVkb1N0YWNrQ2hhbmdlIiwibW9kaWZ5Um93SGVhZGVyV2lkdGgiLCJtb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsIm1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwibW9kaWZ5VHJhbnNmb3JtRW5k''@;'; put 'put ''IiwiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIiwiYWZ0''@;'; put 'put ''ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLCJiZWZvcmVIaWRlUm93cyIsImFmdGVySGlkZVJvd3MiLCJiZWZvcmVVbmhpZGVSb3dzIiwiYWZ0ZXJVbmhpZGVSb3dzIiwiYmVmb3JlSGlkZUNvbHVtbnMiLCJhZnRlckhpZGVDb2x1bW5zIiwiYmVmb3JlVW5oaWRlQ29sdW1ucyIsImFmdGVyVW5oaWRl''@;'; put 'put ''Q29sdW1ucyIsImJlZm9yZVRyaW1Sb3ciLCJhZnRlclRyaW1Sb3ciLCJiZWZvcmVVbnRyaW1Sb3ciLCJhZnRlclVudHJpbVJvdyIsImJlZm9yZURyb3Bkb3duTWVudVNob3ciLCJhZnRlckRyb3Bkb3duTWVudVNob3ciLCJhZnRlckRyb3Bkb3duTWVudUhpZGUiLCJiZWZvcmVBZGRDaGlsZCIs''@;'; put 'put ''ImFmdGVyQWRkQ2hpbGQiLCJiZWZvcmVEZXRhY2hDaGlsZCIsImFmdGVyRGV0YWNoQ2hpbGQiLCJiZWZvcmVCZWdpbkVkaXRpbmciLCJhZnRlckRpYWxvZ0hpZGUiLCJhZnRlckRpYWxvZ1Nob3ciLCJiZWZvcmVEaWFsb2dIaWRlIiwiYmVmb3JlRGlhbG9nU2hvdyIsImRpYWxvZ0ZvY3VzUHJl''@;'; put 'put ''dmlvdXNFbGVtZW50IiwiZGlhbG9nRm9jdXNOZXh0RWxlbWVudCIsImFmdGVyRGlhbG9nRm9jdXMiLCJiZWZvcmVMb2FkaW5nU2hvdyIsImFmdGVyTG9hZGluZ1Nob3ciLCJiZWZvcmVMb2FkaW5nSGlkZSIsImFmdGVyTG9hZGluZ0hpZGUiLCJiZWZvcmVFbXB0eURhdGFTdGF0ZVNob3ciLCJh''@;'; put 'put ''ZnRlckVtcHR5RGF0YVN0YXRlU2hvdyIsImJlZm9yZUVtcHR5RGF0YVN0YXRlSGlkZSIsImFmdGVyRW1wdHlEYXRhU3RhdGVIaWRlIiwiYmVmb3JlTm90aWZpY2F0aW9uU2hvdyIsImFmdGVyTm90aWZpY2F0aW9uU2hvdyIsImJlZm9yZU5vdGlmaWNhdGlvbkhpZGUiLCJhZnRlck5vdGlmaWNh''@;'; put 'put ''dGlvbkhpZGUiLCJhZnRlckJlZ2luRWRpdGluZyIsImJlZm9yZU1lcmdlQ2VsbHMiLCJhZnRlck1lcmdlQ2VsbHMiLCJiZWZvcmVVbm1lcmdlQ2VsbHMiLCJhZnRlclVubWVyZ2VDZWxscyIsImFmdGVyTGlzdGVuIiwiYWZ0ZXJVbmxpc3RlbiIsImFmdGVyUmVmcmVzaERpbWVuc2lvbnMiLCJi''@;'; put 'put ''ZWZvcmVSZWZyZXNoRGltZW5zaW9ucyIsImJlZm9yZUNvbHVtbkNvbGxhcHNlIiwiYWZ0ZXJDb2x1bW5Db2xsYXBzZSIsImJlZm9yZUNvbHVtbkV4cGFuZCIsImFmdGVyQ29sdW1uRXhwYW5kIiwibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIl0sSHNlPW5ldyBNYXAoW1sibW9kaWZ5Um93Iiwi''@;'; put 'put ''OC4wLjAiXSxbIm1vZGlmeUNvbCIsIjguMC4wIl0sWyJ1bm1vZGlmeVJvdyIsIjguMC4wIl0sWyJ1bm1vZGlmeUNvbCIsIjguMC4wIl0sWyJza2lwTGVuZ3RoQ2FjaGUiLCI4LjAuMCJdLFsiaGlkZGVuQ29sdW1uIiwiOC4wLjAiXSxbImhpZGRlblJvdyIsIjguMC4wIl0sWyJwZXJzaXN0ZW50''@;'; put 'put ''U3RhdGVTYXZlIiwiMTcuMC4wIl0sWyJwZXJzaXN0ZW50U3RhdGVMb2FkIiwiMTcuMC4wIl0sWyJwZXJzaXN0ZW50U3RhdGVSZXNldCIsIjE3LjAuMCJdXSksVnNlPW5ldyBNYXAoW10pO2Z1bmN0aW9uIHBBZShuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBp''@;'; put 'put ''bml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gZ0FlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0''@;'; put 'put ''dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIFEwKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIGJUdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sZ0FlKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIEJzZShuLGUsdCl7cEFlKG4sZSksZS5zZXQobix0KX1mdW5jdGlvbiBqc2Uobixl''@;'; put 'put ''LHQpe3JldHVybiBmdW5jdGlvbiB3VHQobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLGdBZShuLGUsInNl''@;'; put 'put ''dCIpLHQpLHR9ZnVuY3Rpb24gbUFlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiB0fXZhciBVcD1uZXcgV2Vha01hcCxqTT1uZXcgV2Vha01hcCxXVz1uZXcgV2Vh''@;'; put 'put ''a01hcCxVc2U9bmV3IFdlYWtTZXQ7Y2xhc3MgdkFle2dldEhvb2tzKGUpe3JldHVybiBRMCh0aGlzLFVwKS5nZXQoZSk/P1tdfWFkZChlLHQscj17fSl7UTAodGhpcyxVcCkuaGFzKGUpfHwobUFlKHRoaXMsVXNlLF9BZSkuY2FsbCh0aGlzLGUpLGZ3LnB1c2goZSkpO2NvbnN0IGk9UTAodGhp''@;'; put 'put ''cyxVcCkuZ2V0KGUpPz9bXSxvPWkuZmluZChFPT5FLmNhbGxiYWNrPT09dCk7aWYobylyZXR1cm4gdm9pZCghMD09PW8uc2tpcCYmKG8uc2tpcD0hMSkpO2NvbnN0IGE9TnVtYmVyLmlzSW50ZWdlcihyLm9yZGVySW5kZXgpP3Iub3JkZXJJbmRleD8/MDowLGw9ISFyLnJ1bk9uY2UsdT0hIXIu''@;'; put 'put ''aW5pdGlhbEhvb2s7bGV0IGc9ITE7aWYodSl7Y29uc3QgRT1pLmZpbmQoTz0+Ty5pbml0aWFsSG9vayk7RSYmKEUuY2FsbGJhY2s9dCxnPSEwKX1pZighZyl7aS5wdXNoKHtjYWxsYmFjazp0LG9yZGVySW5kZXg6YSxydW5PbmNlOmwsaW5pdGlhbEhvb2s6dSxza2lwOiExfSk7bGV0IEU9UTAo''@;'; put 'put ''dGhpcyxXVykuaGFzKGUpOyFFJiYwIT09YSYmKEU9ITAsUTAodGhpcyxXVykuYWRkKGUpKSxFJiZpLmxlbmd0aD4xJiZRMCh0aGlzLFVwKS5zZXQoZSxpLnRvU29ydGVkKChPLFopPT5PLm9yZGVySW5kZXgtWi5vcmRlckluZGV4KSl9fWhhcyhlKXtyZXR1cm4gUTAodGhpcyxVcCkuaGFzKGUp''@;'; put 'put ''JiYoUTAodGhpcyxVcCkuZ2V0KGUpPy5sZW5ndGg/PzApPjB9cmVtb3ZlKGUsdCl7aWYoIVEwKHRoaXMsVXApLmhhcyhlKSlyZXR1cm4hMTtjb25zdCByPVEwKHRoaXMsVXApLmdldChlKT8/W10saT1yLmZpbmQobz0+by5jYWxsYmFjaz09PXQpO2lmKGkpe2xldCBvPVEwKHRoaXMsak0pLmdl''@;'; put 'put ''dChlKT8/MDtyZXR1cm4gaS5za2lwPSEwLG8rPTEsbz4xMDAmJihRMCh0aGlzLFVwKS5zZXQoZSxyLmZpbHRlcihhPT4hYS5za2lwKSksbz0wKSxRMCh0aGlzLGpNKS5zZXQoZSxvKSwhMH1yZXR1cm4hMX1kZXN0cm95KCl7UTAodGhpcyxVcCkuY2xlYXIoKSxRMCh0aGlzLGpNKS5jbGVhcigp''@;'; put 'put ''fWNvbnN0cnVjdG9yKCl7KGZ1bmN0aW9uIENUdChuLGUpe3BBZShuLGUpLGUuYWRkKG4pfSkodGhpcyxVc2UpLEJzZSh0aGlzLFVwLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxCc2UodGhpcyxqTSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksQnNlKHRoaXMsV1cse3dyaXRhYmxl''@;'; put 'put ''OiEwLHZhbHVlOnZvaWQgMH0pLGpzZSh0aGlzLFVwLG5ldyBNYXApLGpzZSh0aGlzLGpNLG5ldyBNYXApLGpzZSh0aGlzLFdXLG5ldyBTZXQpLGZ3LmZvckVhY2goZT0+bUFlKHRoaXMsVXNlLF9BZSkuY2FsbCh0aGlzLGUpKX19ZnVuY3Rpb24gX0FlKG4pe1EwKHRoaXMsVXApLnNldChuLFtd''@;'; put 'put ''KSxRMCh0aGlzLGpNKS5zZXQobiwwKX1mdW5jdGlvbiB5QWUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHR9Y29uc3QgVFR0PXljYFRoZSBwbHVnaW4gaG9vayAi''@;'; put 'put ''W2hvb2tOYW1lXSIgd2FzIHJlbW92ZWQgaW4gSGFuZHNvbnRhYmxlIFtyZW1vdmVkSW5WZXJzaW9uXS5ceDIwCiAgUGxlYXNlIGNvbnN1bHQgcmVsZWFzZSBub3RlcyBodHRwczovL2dpdGh1Yi5jb20vaGFuZHNvbnRhYmxlL2hhbmRzb250YWJsZS9yZWxlYXNlcy90YWcvW3JlbW92ZWRJblZl''@;'; put 'put ''cnNpb25dIHRvXHgyMAogIGxlYXJuIGFib3V0IHRoZSBtaWdyYXRpb24gcGF0aC5gO3ZhciB6c2U9bmV3IFdlYWtTZXQ7Y2xhc3MgR297c3RhdGljIGdldFNpbmdsZXRvbigpe3JldHVybiBmdW5jdGlvbiBBVHQoKXtyZXR1cm4geFR0fSgpfWdldEJ1Y2tldChlPW51bGwpe3JldHVybiBlPyhl''@;'; put 'put ''LnBsdWdpbkhvb2tCdWNrZXR8fChlLnBsdWdpbkhvb2tCdWNrZXQ9bmV3IHZBZSksZS5wbHVnaW5Ib29rQnVja2V0KTp0aGlzLmdsb2JhbEJ1Y2tldH1hZGQoZSx0LHI9bnVsbCxpKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9Ybih0LG89PnRoaXMuYWRkKGUsbyxyKSk6KEhzZS5oYXMoZSkm''@;'; put 'put ''JkhhKGZMKFRUdCx7aG9va05hbWU6ZSxyZW1vdmVkSW5WZXJzaW9uOkhzZS5nZXQoZSl9KSksVnNlLmhhcyhlKSYmSGEoVnNlLmdldChlKSksdGhpcy5nZXRCdWNrZXQocikuYWRkKGUsdCx7b3JkZXJJbmRleDppLHJ1bk9uY2U6ITF9KSksdGhpc31vbmNlKGUsdCxyPW51bGwsaSl7cmV0dXJu''@;'; put 'put ''IEFycmF5LmlzQXJyYXkodCk/WG4odCxvPT50aGlzLm9uY2UoZSxvLHIpKTp0aGlzLmdldEJ1Y2tldChyKS5hZGQoZSx0LHtvcmRlckluZGV4OmkscnVuT25jZTohMH0pLHRoaXN9YWRkQXNGaXhlZChlLHQscj1udWxsKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9Ybih0LGk9PnRoaXMuYWRk''@;'; put 'put ''QXNGaXhlZChlLGkscikpOnRoaXMuZ2V0QnVja2V0KHIpLmFkZChlLHQse2luaXRpYWxIb29rOiEwfSksdGhpc31yZW1vdmUoZSx0LHI9bnVsbCl7cmV0dXJuIHRoaXMuZ2V0QnVja2V0KHIpLnJlbW92ZShlLHQpfWhhcyhlLHQ9bnVsbCl7cmV0dXJuIHRoaXMuZ2V0QnVja2V0KHQpLmhhcyhl''@;'; put 'put ''KX1ydW4oZSx0LHIsaSxvLGEsbCx1KXtyZXR1cm4gcj15QWUodGhpcyx6c2UsYkFlKS5jYWxsKHRoaXMsdGhpcy5nZXRCdWNrZXQoKS5nZXRIb29rcyh0KSxlLHQsbnVsbCxyLGksbyxhLGwsdSkseUFlKHRoaXMsenNlLGJBZSkuY2FsbCh0aGlzLHRoaXMuZ2V0QnVja2V0KGUpLmdldEhvb2tz''@;'; put 'put ''KHQpLGUsdCxlLHIsaSxvLGEsbCx1KX1kZXN0cm95KGU9bnVsbCl7dGhpcy5nZXRCdWNrZXQoZSkuZGVzdHJveSgpfXJlZ2lzdGVyKGUpe3RoaXMuaXNSZWdpc3RlcmVkKGUpfHxmdy5wdXNoKGUpfWRlcmVnaXN0ZXIoZSl7dGhpcy5pc1JlZ2lzdGVyZWQoZSkmJmZ3LnNwbGljZShmdy5pbmRl''@;'; put 'put ''eE9mKGUpLDEpfWlzRGVwcmVjYXRlZChlKXtyZXR1cm4gVnNlLmhhcyhlKXx8SHNlLmhhcyhlKX1pc1JlZ2lzdGVyZWQoZSl7cmV0dXJuIGZ3LmluZGV4T2YoZSk+PTB9Z2V0UmVnaXN0ZXJlZCgpe3JldHVybiBmd31jb25zdHJ1Y3RvcigpeyhmdW5jdGlvbiBNVHQobixlKXsoZnVuY3Rpb24g''@;'; put 'put ''RVR0KG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sZSksZS5hZGQobil9KSh0aGlzLHpzZSksdGhpcy5nbG9iYWxCdWNrZXQ9bmV3IHZBZX19ZnVu''@;'; put 'put ''Y3Rpb24gYkFlKG4sZSx0LHIsaSxvLGEsbCx1LGcpe2NvbnN0IEU9bj9uLmxlbmd0aDowO2xldCBPPTA7aWYoRSlmb3IoO088RTspe2lmKCFuW09dfHxuW09dLnNraXApe08rPTE7Y29udGludWV9Y29uc3QgWj1Gc2UobltPXS5jYWxsYmFjayxlLGksbyxhLGwsdSxnKTt2b2lkIDAhPT1aJiYo''@;'; put 'put ''aT1aKSxuW09dJiZuW09dLnJ1bk9uY2UmJnRoaXMucmVtb3ZlKHQsbltPXS5jYWxsYmFjayxyKSxPKz0xfXJldHVybiBpfWNvbnN0IHhUdD1uZXcgR28sd0w9bmV3IE1hcDtmdW5jdGlvbiB6cChuPSJjb21tb24iKXt3TC5oYXMobil8fHdMLnNldChuLG5ldyBNYXApO2NvbnN0IGU9d0wuZ2V0''@;'; put 'put ''KG4pO3JldHVybntyZWdpc3RlcjpmdW5jdGlvbiB0KHUsZyl7ZS5zZXQodSxnKX0sZ2V0SXRlbTpmdW5jdGlvbiByKHUpe3JldHVybiBlLmdldCh1KX0saGFzSXRlbTpmdW5jdGlvbiBpKHUpe3JldHVybiBlLmhhcyh1KX0sZ2V0TmFtZXM6ZnVuY3Rpb24gbygpe3JldHVyblsuLi5lLmtleXMo''@;'; put 'put ''KV19LGdldFZhbHVlczpmdW5jdGlvbiBhKCl7cmV0dXJuWy4uLmUudmFsdWVzKCldfSxjbGVhcjpmdW5jdGlvbiBsKCl7d0wuZGVsZXRlKG4pLGUuY2xlYXIoKX19fWZ1bmN0aW9uIGtUdChuLGUpe3JldHVybiB3TD8uZ2V0KG4uZ3VpZCk/LmdldChlKX1mdW5jdGlvbiB3QWUobixlLHQpe2lm''@;'; put 'put ''KCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQobil9ZnVuY3Rpb24gVU0obixlKXtyZXR1cm4gZnVuY3Rpb24gSVR0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwo''@;'; put 'put ''bik6ZS52YWx1ZX0obix3QWUobixlLCJnZXQiKSl9ZnVuY3Rpb24gQ0FlKG4sZSx0KXsoZnVuY3Rpb24gUlR0KG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3Qi''@;'; put 'put ''KX0pKG4sZSksZS5zZXQobix0KX1mdW5jdGlvbiBTQWUobixlLHQpe3JldHVybiBmdW5jdGlvbiBEVHQobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZh''@;'; put 'put ''dGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLHdBZShuLGUsInNldCIpLHQpLHR9Y29uc3R7cmVnaXN0ZXI6TFR0LGdldEl0ZW06RUFlLGhhc0l0ZW06TUFlLGdldE5hbWVzOk9UdH09enAoImVkaXRvcnMiKTt2YXIgWVc9bmV3IFdlYWtNYXAsek09bmV3IFdlYWtNYXA7Y2xhc3MgTlR0e2dldENv''@;'; put 'put ''bnN0cnVjdG9yKCl7cmV0dXJuIFVNKHRoaXMsWVcpfWdldEluc3RhbmNlKGUpe3JldHVybiBlLmd1aWQgaW4gVU0odGhpcyx6TSl8fChVTSh0aGlzLHpNKVtlLmd1aWRdPW5ldyhVTSh0aGlzLFlXKSkoZSkpLFVNKHRoaXMsek0pW2UuZ3VpZF19Y29uc3RydWN0b3IoZSl7Q0FlKHRoaXMsWVcs''@;'; put 'put ''e3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLENBZSh0aGlzLHpNLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxTQWUodGhpcyx6TSx7fSksU0FlKHRoaXMsWVcsZSk7Y29uc3QgdD1VTSh0aGlzLHpNKTtHby5nZXRTaW5nbGV0b24oKS5hZGQoImFmdGVyRGVzdHJveSIsZnVuY3Rpb24o''@;'; put 'put ''KXt0W3RoaXMuZ3VpZF09bnVsbH0pfX1jb25zdCBXc2U9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gWXNlKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBufWZ1bmN0aW9uIFRBZShuKXtyZXR1cm4gWXNlKG4pfHxKcigiRWRpdG9yIGNsYXNzIG11c3QgYmUgYSBjb25zdHJ1Y3RvciBmdW5jdGlv''@;'; put 'put ''bi4iKSxufWZ1bmN0aW9uIFpXKG4pe3JldHVybiJzdHJpbmciIT10eXBlb2Ygbj9UQWUobik6KE1BZShuKXx8SnIoYE5vIHJlZ2lzdGVyZWQgZWRpdG9yIGZvdW5kIHVuZGVyICIke259IiBuYW1lYCksRUFlKG4pLmdldENvbnN0cnVjdG9yKCkpfWZ1bmN0aW9uIEowKG4sZSl7bGV0IHQ9InN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBuP246bnVsbCxyPWU7biYmWXNlKG4pJiYocj1uLHQ9bi5FRElUT1JfVFlQRT8/bnVsbCkscnx8SnIoIkVkaXRvciBjbGFzcyBpcyByZXF1aXJlZCB0byByZWdpc3RlciBhbiBlZGl0b3IuIik7Y29uc3QgaT1UQWUociksbz1uZXcgTlR0KGkpO251bGwhPT10JiZMVHQo''@;'; put 'put ''dCxvKSxXc2Uuc2V0KGksbyl9bGV0IEdXPTA7Y29uc3QgVzI9Y2xhc3MgUFR0e2FkZEV2ZW50TGlzdGVuZXIoZSx0LHIsaT0hMSl7aWYoIXRoaXMuY29udGV4dClyZXR1cm4oKT0+e307Y29uc3Qgbz1yO2Z1bmN0aW9uIGEobCl7by5jYWxsKHRoaXMsZnVuY3Rpb24gSFR0KG4pe2NvbnN0IGU9''@;'; put 'put ''bi5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247cmV0dXJuIG4uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uPWZ1bmN0aW9uKCl7ZS5hcHBseSh0aGlzKSxGMyh0aGlzKX0sbn0obCkpfXJldHVybiB0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMucHVzaCh7ZWxlbWVudDplLGV2ZW50OnQsY2Fs''@;'; put 'put ''bGJhY2s6cixjYWxsYmFja1Byb3h5OmEsb3B0aW9uczppLGV2ZW50TWFuYWdlcjp0aGlzfSksZS5hZGRFdmVudExpc3RlbmVyKHQsYSxpKSxHVys9MSwoKT0+e3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHQscil9fXJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0LHIsaT0hMSl7aWYoIXRoaXMu''@;'; put 'put ''Y29udGV4dClyZXR1cm47bGV0IGEsbz10aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMubGVuZ3RoO2Zvcig7bzspaWYoby09MSxhPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc1tvXSxhLmV2ZW50PT09dCYmYS5lbGVtZW50PT09ZSl7aWYociYmciE9PWEuY2FsbGJhY2t8fGkmJmEuZXZl''@;'; put 'put ''bnRNYW5hZ2VyIT09dGhpcyljb250aW51ZTt0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMuc3BsaWNlKG8sMSksYS5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoYS5ldmVudCxhLmNhbGxiYWNrUHJveHksYS5vcHRpb25zKSxHVy09MX19Y2xlYXJFdmVudHMoZT0hMSl7aWYoIXRoaXMu''@;'; put 'put ''Y29udGV4dClyZXR1cm47bGV0IHQ9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLmxlbmd0aDtmb3IoO3Q7KXt0LT0xO2NvbnN0IHI9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzW3RdO2UmJnIuZXZlbnRNYW5hZ2VyIT09dGhpc3x8KHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5z''@;'; put 'put ''cGxpY2UodCwxKSxyLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLmV2ZW50LHIuY2FsbGJhY2tQcm94eSxyLm9wdGlvbnMpLEdXLT0xKX19Y2xlYXIoKXt0aGlzLmNsZWFyRXZlbnRzKCl9ZGVzdHJveSgpe3RoaXMuY2xlYXJFdmVudHMoKSx0aGlzLmNvbnRleHQ9bnVsbH1kZXN0cm95''@;'; put 'put ''V2l0aE93bkV2ZW50c09ubHkoKXt0aGlzLmNsZWFyRXZlbnRzKCEwKSx0aGlzLmNvbnRleHQ9bnVsbH1maXJlRXZlbnQoZSx0KXtsZXQgcj0iZG9jdW1lbnQiaW4gZT9lLmRvY3VtZW50OnZvaWQgMCxpPSJ3aW5kb3ciaW4gZT9lOnZvaWQgMDtyfHwocj1lLm93bmVyRG9jdW1lbnQ/ZS5vd25l''@;'; put 'put ''ckRvY3VtZW50OmUsaT1yLmRlZmF1bHRWaWV3KTtjb25zdCBvPXtidWJibGVzOiEwLGNhbmNlbGFibGU6Im1vdXNlbW92ZSIhPT10LHZpZXc6aSxkZXRhaWw6MCxzY3JlZW5YOjAsc2NyZWVuWTowLGNsaWVudFg6MSxjbGllbnRZOjEsY3RybEtleTohMSxhbHRLZXk6ITEsc2hpZnRLZXk6ITEs''@;'; put 'put ''bWV0YUtleTohMSxidXR0b246MCxyZWxhdGVkVGFyZ2V0OnZvaWQgMH07bGV0IGE7ci5jcmVhdGVFdmVudD8oYT1yLmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpLGEuaW5pdE1vdXNlRXZlbnQodCxvLmJ1YmJsZXMsby5jYW5jZWxhYmxlLG8udmlldyxvLmRldGFpbCxvLnNjcmVlblgsby5z''@;'; put 'put ''Y3JlZW5ZLG8uY2xpZW50WCxvLmNsaWVudFksby5jdHJsS2V5LG8uYWx0S2V5LG8uc2hpZnRLZXksby5tZXRhS2V5LG8uYnV0dG9uLG8ucmVsYXRlZFRhcmdldHx8ci5ib2R5LnBhcmVudE5vZGUpKTphPXIuY3JlYXRlRXZlbnRPYmplY3QoKSxlLmRpc3BhdGNoRXZlbnQ/ZS5kaXNwYXRjaEV2''@;'; put 'put ''ZW50KGEpOmUuZmlyZUV2ZW50KGBvbiR7dH1gLGEpfWNvbnN0cnVjdG9yKGU9bnVsbCl7dGhpcy5jb250ZXh0PWV8fHRoaXMsdGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzfHwodGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzPVtdKX19O2Z1bmN0aW9uIFpzZShuLGUsdCl7aWYoIWUuaGFz''@;'; put 'put ''KG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiB4QWUobixlKXsoZnVuY3Rpb24gQlR0KG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRp''@;'; put 'put ''YWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sZSksZS5hZGQobil9dmFyIEdzZT1uZXcgV2Vha1NldCxBQWU9bmV3IFdlYWtTZXQ7Y2xhc3MgJHNle2dldEFjdGl2ZUVkaXRvcigpe3JldHVybiB0aGlzLmFjdGl2ZUVkaXRvcn1wcmVwYXJl''@;'; put 'put ''RWRpdG9yKCl7aWYodGhpcy5hY3RpdmVFZGl0b3ImJnRoaXMuYWN0aXZlRWRpdG9yLmlzV2FpdGluZygpKXJldHVybiB2b2lkIHRoaXMuY2xvc2VFZGl0b3IoITEsITEsRT0+e0UmJnRoaXMucHJlcGFyZUVkaXRvcigpfSk7Y29uc3QgZT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZl''@;'; put 'put ''KCk/LmhpZ2hsaWdodDtpZighZXx8ZS5pc0hlYWRlcigpKXJldHVybjtjb25zdHtyb3c6dCxjb2w6cn09ZSxpPXQsbz1yLGE9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLGksbywhMSwibWV0YSIpO2xldCBsPWksdT1vO2lmKEFycmF5LmlzQXJyYXkoYSkmJihbbCx1''@;'; put 'put ''XT1hKSx0aGlzLmNlbGxQcm9wZXJ0aWVzPXRoaXMuaG90LmdldENlbGxNZXRhKGwsdSksIXRoaXMuaXNDZWxsRWRpdGFibGUoKSlyZXR1cm4gdm9pZCB0aGlzLmNsZWFyQWN0aXZlRWRpdG9yKCk7Y29uc3QgZz10aGlzLmhvdC5nZXRDZWxsKGksbywhMCk7aWYoZyl7Y29uc3QgRT10aGlzLmhv''@;'; put 'put ''dC5nZXRDZWxsRWRpdG9yKHRoaXMuY2VsbFByb3BlcnRpZXMpLE89dGhpcy5ob3QuY29sVG9Qcm9wKHUpLFo9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpLHUpO3RoaXMuYWN0aXZlRWRpdG9yPWZ1bmN0aW9uIEZUdChuLGUpe2xldCB0O3Jl''@;'; put 'put ''dHVybiBZc2Uobik/KFdzZS5nZXQobil8fEowKG51bGwsbiksdD1Xc2UuZ2V0KG4pKToic3RyaW5nIj09dHlwZW9mIG4/dD1FQWUobik6SnIoJ09ubHkgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGNhbiBiZSBwYXNzZWQgYXMgImVkaXRvciIgcGFyYW1ldGVyJyksdHx8SnIoYE5vIGVkaXRvciBy''@;'; put 'put ''ZWdpc3RlcmVkIHVuZGVyIG5hbWUgIiR7bn0iYCksdC5nZXRJbnN0YW5jZShlKX0oRSx0aGlzLmhvdCksdGhpcy5hY3RpdmVFZGl0b3IucHJlcGFyZShpLG8sTyxnLFosdGhpcy5jZWxsUHJvcGVydGllcyl9fWlzRWRpdG9yT3BlbmVkKCl7cmV0dXJuIHRoaXMuYWN0aXZlRWRpdG9yJiZ0aGlz''@;'; put 'put ''LmFjdGl2ZUVkaXRvci5pc09wZW5lZCgpfW9wZW5FZGl0b3IoZSx0LHI9ITEpe2lmKCF0aGlzLmlzQ2VsbEVkaXRhYmxlKCkpcmV0dXJuIHZvaWQgdGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpO2NvbnN0IGk9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2xldCBvPXRoaXMuaG90''@;'; put 'put ''LnJ1bkhvb2tzKCJiZWZvcmVCZWdpbkVkaXRpbmciLGkuaGlnaGxpZ2h0LnJvdyxpLmhpZ2hsaWdodC5jb2wsZSx0LHIpO3QgaW5zdGFuY2VvZiBNb3VzZUV2ZW50JiYiYm9vbGVhbiIhPXR5cGVvZiBvJiYobz0wPT09dGhpcy5ob3Quc2VsZWN0aW9uLmdldExheWVyTGV2ZWwoKSYmaS5pc1Np''@;'; put 'put ''bmdsZSgpKSwhMSE9PW8/KHRoaXMuYWN0aXZlRWRpdG9yfHwodGhpcy5ob3Quc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgpLHRoaXMucHJlcGFyZUVkaXRvcigpKSx0aGlzLmFjdGl2ZUVkaXRvciYmKHImJnRoaXMuYWN0aXZlRWRpdG9yLmVuYWJsZUZ1bGxFZGl0TW9kZSgpLHRoaXMuYWN0aXZlRWRp''@;'; put 'put ''dG9yLmJlZ2luRWRpdGluZyhlLHQpKSk6dGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpfWNsb3NlRWRpdG9yKGU9ITEsdD0hMSxyKXt0aGlzLmFjdGl2ZUVkaXRvcj90aGlzLmFjdGl2ZUVkaXRvci5maW5pc2hFZGl0aW5nKGUsdCxyKTpyJiZyKCExKX1jbG9zZUVkaXRvckFuZFNhdmVDaGFuZ2Vz''@;'; put 'put ''KGUpe3RoaXMuY2xvc2VFZGl0b3IoITEsZSl9Y2xvc2VFZGl0b3JBbmRSZXN0b3JlT3JpZ2luYWxWYWx1ZShlKXt0aGlzLmNsb3NlRWRpdG9yKCEwLGUpfWNsZWFyQWN0aXZlRWRpdG9yKCl7dGhpcy5hY3RpdmVFZGl0b3I9dm9pZCAwfWlzQ2VsbEVkaXRhYmxlKCl7Y29uc3QgZT10aGlzLmhv''@;'; put 'put ''dC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIWUpcmV0dXJuITE7Y29uc3QgdD10aGlzLmhvdC5nZXRDZWxsRWRpdG9yKHRoaXMuY2VsbFByb3BlcnRpZXMpLHtyb3c6cixjb2w6aX09ZS5oaWdobGlnaHQ7aWYobnVsbD09PXJ8fG51bGw9PT1pKXJldHVybiExO2NvbnN0e3Jvd0luZGV4''@;'; put 'put ''TWFwcGVyOm8sY29sdW1uSW5kZXhNYXBwZXI6YX09dGhpcy5ob3QsbD1vLmlzSGlkZGVuKHRoaXMuaG90LnRvUGh5c2ljYWxSb3cocikpfHxhLmlzSGlkZGVuKHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oaSkpO3JldHVybiEodGhpcy5jZWxsUHJvcGVydGllcy5yZWFkT25seXx8IXR8fGwp''@;'; put 'put ''fW1vdmVTZWxlY3Rpb25BZnRlckVudGVyKGUpe2lmKCF0aGlzLmhvdC5nZXRTZWxlY3RlZCgpKXJldHVybjtjb25zdCB0PXsuLi4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy50YWJsZU1ldGEuZW50ZXJNb3Zlcz90aGlzLnRhYmxlTWV0YS5lbnRlck1vdmVzKGUpOnRoaXMudGFibGVNZXRhLmVu''@;'; put 'put ''dGVyTW92ZXN9O2Uuc2hpZnRLZXkmJih0LnJvdz0tKHQucm93Pz8wKSx0LmNvbD0tKHQuY29sPz8wKSksdGhpcy5ob3Quc2VsZWN0aW9uLmlzTXVsdGlwbGUoKT90aGlzLnNlbGVjdGlvbi50cmFuc2Zvcm1Gb2N1cyh0LnJvdz8/MCx0LmNvbD8/MCk6dGhpcy5zZWxlY3Rpb24udHJhbnNmb3Jt''@;'; put 'put ''U3RhcnQodC5yb3c/PzAsdC5jb2w/PzAsITApfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9Y29uc3RydWN0b3IoZSx0LHIpe3hBZSh0aGlzLEdzZSkseEFlKHRoaXMsQUFlKSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmhvdD1lLHRoaXMu''@;'; put 'put ''dGFibGVNZXRhPXQsdGhpcy5zZWxlY3Rpb249cix0aGlzLmV2ZW50TWFuYWdlcj1uZXcgVzIoZSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJEb2N1bWVudEtleURvd24iLGk9PlpzZSh0aGlzLEdzZSxrQWUpLmNhbGwodGhpcyxpKSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlQ29tcG9zaXRp''@;'; put 'put ''b25TdGFydCIsaT0+WnNlKHRoaXMsR3NlLGtBZSkuY2FsbCh0aGlzLGkpKSx0aGlzLmhvdC52aWV3Ll93dC51cGRhdGUoIm9uQ2VsbERibENsaWNrIiwoaSxvLGEpPT5ac2UodGhpcyxBQWUsalR0KS5jYWxsKHRoaXMsaSxvKSl9fWZ1bmN0aW9uIGtBZShuKXtjb25zdCBlPXRoaXMuaG90Lmdl''@;'; put 'put ''dFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighdGhpcy5ob3QuaXNMaXN0ZW5pbmcoKXx8IWV8fGUuaGlnaGxpZ2h0LmlzSGVhZGVyKCl8fEo1KG4pKXJldHVybjtjb25zdHtrZXlDb2RlOnR9PW4scj0obi5jdHJsS2V5fHxuLm1ldGFLZXkpJiYhbi5hbHRLZXk7KCF0aGlzLmFjdGl2ZUVkaXRv''@;'; put 'put ''cnx8dGhpcy5hY3RpdmVFZGl0b3ImJiF0aGlzLmFjdGl2ZUVkaXRvci5pc1dhaXRpbmcoKSkmJiFjQWUodCkmJiF1QWUodCkmJiFyJiYhdGhpcy5pc0VkaXRvck9wZW5lZCgpJiZ0aGlzLm9wZW5FZGl0b3IoIiIsbil9ZnVuY3Rpb24galR0KG4sZSl7ZT8uaXNDZWxsKCkmJih0aGlzLmhvdC5n''@;'; put 'put ''ZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCk/dGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpOnRoaXMub3BlbkVkaXRvcihudWxsLG4sITApKX1jb25zdCBSQWU9bmV3IFdlYWtNYXA7JHNlLmdldEluc3RhbmNlPWZ1bmN0aW9uKG4sZSx0KXtsZXQgcj1SQWUuZ2V0KG4pO3JldHVy''@;'; put 'put ''biByfHwocj1uZXcgJHNlKG4sZSx0KSxSQWUuc2V0KG4scikpLHJ9O2NvbnN0IFVUdD0kc2UsSUFlPXsiJm5ic3A7IjoiICIsIiZhbXA7IjoiJiIsIiZsdDsiOiI8IiwiJmd0OyI6Ij4ifSx6VHQ9bmV3IFJlZ0V4cChPYmplY3Qua2V5cyhJQWUpLm1hcChuPT5gKCR7bn0pYCkuam9pbigifCIp''@;'; put 'put ''LCJnaSIpO2Z1bmN0aW9uIHFzZShuKXtjb25zdCBlPW4uaGFzQ29sSGVhZGVycygpLHQ9bi5oYXNSb3dIZWFkZXJzKCkscj1bZT8tMTowLHQ/LTE6MCxuLmNvdW50Um93cygpLTEsbi5jb3VudENvbHMoKS0xXSxpPW4uZ2V0RGF0YSguLi5yKSxvPWkubGVuZ3RoLGE9bz4wP2lbMF0ubGVuZ3Ro''@;'; put 'put ''OjAsbD1bIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHU9ZT9bIjx0aGVhZD4iLCI8L3RoZWFkPiJdOltdLGc9WyI8dGJvZHk+IiwiPC90Ym9keT4iXSxFPXQ/MTowLE89ZT8xOjA7Zm9yKGxldCBaPTA7WjxvO1orPTEpe2NvbnN0IGVlPWUmJjA9PT1aLHZlPVtdO2ZvcihsZXQgSGU9MDtIZTxhO0hl''@;'; put 'put ''Kz0xKXtjb25zdCBXZT0hZWUmJnQmJjA9PT1IZTtsZXQgYXQ9IiI7aWYoZWUpYXQ9YDx0aD4ke24uZ2V0Q29sSGVhZGVyKEhlLUUpfTwvdGg+YDtlbHNlIGlmKFdlKWF0PWA8dGg+JHtuLmdldFJvd0hlYWRlcihaLU8pfTwvdGg+YDtlbHNle2NvbnN0IEN0PWlbWl1bSGVdLHtoaWRkZW46QXQs''@;'; put 'put ''cm93c3BhbjpLdCxjb2xzcGFuOnF0fT1uLmdldENlbGxNZXRhKFotTyxIZS1FKTtpZighQXQpe2NvbnN0IGduPVtdO2lmKEt0JiZnbi5wdXNoKGByb3dzcGFuPSIke0t0fSJgKSxxdCYmZ24ucHVzaChgY29sc3Bhbj0iJHtxdH0iYCksQWwoQ3QpKWF0PWA8dGQgJHtnbi5qb2luKCIgIil9Pjwv''@;'; put 'put ''dGQ+YDtlbHNle2NvbnN0IFRuPVN0cmluZyhDdCkucmVwbGFjZUFsbCgiPCIsIiZsdDsiKS5yZXBsYWNlQWxsKCI+IiwiJmd0OyIpLnJlcGxhY2UoLyg8YnIoXHMqfFwvKT4oXHJcbnxcbik/fFxyXG58XG4pL2csIjxicj5cclxuIikucmVwbGFjZSgvXHgyMC9naSwiJm5ic3A7IikucmVwbGFj''@;'; put 'put ''ZSgvXHQvZ2ksIiYjOTsiKTthdD1gPHRkICR7Z24uam9pbigiICIpfT4ke1RufTwvdGQ+YH19fXZlLnB1c2goYXQpfWNvbnN0IE1lPVsiPHRyPiIsLi4udmUsIjwvdHI+Il0uam9pbigiIik7ZWU/dS5zcGxpY2UoMSwwLE1lKTpnLnNwbGljZSgtMSwwLE1lKX1yZXR1cm4gbC5zcGxpY2UoMSww''@;'; put 'put ''LHUuam9pbigiIiksZy5qb2luKCIiKSksbC5qb2luKCIiKX1mdW5jdGlvbiBLc2Uobil7Y29uc3QgZT1uLmxlbmd0aCx0PVsiPHRhYmxlPiJdO2ZvcihsZXQgcj0wO3I8ZTtyKz0xKXtjb25zdCBpPW5bcl0sbz1pLmxlbmd0aCxhPVtdOzA9PT1yJiZ0LnB1c2goIjx0Ym9keT4iKTtmb3IobGV0''@;'; put 'put ''IGw9MDtsPG87bCs9MSl7Y29uc3QgdT1pW2xdLGc9QWwodSk/IiI6dS50b1N0cmluZygpLnJlcGxhY2VBbGwoIiYiLCImYW1wOyIpLnJlcGxhY2VBbGwoIjwiLCImbHQ7IikucmVwbGFjZUFsbCgiPiIsIiZndDsiKS5yZXBsYWNlKC8oPGJyKFxzKnxcLyk+KFxyXG58XG4pP3xcclxufFxuKS9n''@;'; put 'put ''LCI8YnI+XHJcbiIpLnJlcGxhY2UoL1x4MjB7Mix9L2dpLEU9PmA8c3BhbiBzdHlsZT0ibXNvLXNwYWNlcnVuOiB5ZXMiPiR7IiZuYnNwOyIucmVwZWF0KEUubGVuZ3RoLTEpfSA8L3NwYW4+YCkucmVwbGFjZSgvXHQvZ2ksIiYjOTsiKTthLnB1c2goYDx0ZD4ke2d9PC90ZD5gKX10LnB1c2go''@;'; put 'put ''Ijx0cj4iLC4uLmEsIjwvdHI+IikscisxPT09ZSYmdC5wdXNoKCI8L3Rib2R5PiIpfXJldHVybiB0LnB1c2goIjwvdGFibGU+IiksdC5qb2luKCIiKX1jb25zdCBEQWU9Lzx0ZFxiW14+XSo+L2ksWVR0PS88XC9ccyp0ZFxzKj4vaSxaVHQ9LzxwLio/Pi9nO2Z1bmN0aW9uIEdUdChuLGUpe2xl''@;'; put 'put ''dCB0PTEscj1lO2Zvcig7dD4wOyl7Y29uc3QgaT1uLnN1YnN0cmluZyhyKSxvPWkubWF0Y2goREFlKSxhPWkubWF0Y2goWVR0KTtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBsPXIrKGEuaW5kZXg/PzApLHU9YVswXS5sZW5ndGgsZz1vP3IrKG8uaW5kZXg/PzApOm4ubGVuZ3RoO2lmKGc8bCl0''@;'; put 'put ''Kz0xLHI9Zysobz8uWzBdLmxlbmd0aD8/MCk7ZWxzZXtpZih0LT0xLDA9PT10KXJldHVybntzdGFydDpsLGxlbmd0aDp1fTtyPWwrdX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gTEFlKG4pe2NvbnN0IGU9W107bGV0IHQ9MDtmb3IoO3Q8bi5sZW5ndGg7KXtjb25zdCByPW4uc3Vic3RyaW5nKHQp''@;'; put 'put ''Lm1hdGNoKERBZSk7aWYoIXIpe2UucHVzaChuLnN1YnN0cmluZyh0KSk7YnJlYWt9Y29uc3QgaT10KyhyLmluZGV4Pz8wKSxvPXJbMF0sYT1pK28ubGVuZ3RoO2UucHVzaChuLnN1YnN0cmluZyh0LGkpKTtjb25zdCBsPUdUdChuLGEpO2lmKCFsKXtlLnB1c2gobi5zdWJzdHJpbmcoaSkpO2Jy''@;'; put 'put ''ZWFrfWxldCBPLEU9bi5zdWJzdHJpbmcoaSxsLnN0YXJ0K2wubGVuZ3RoKS5zdWJzdHJpbmcoby5sZW5ndGgsbC5zdGFydC1pKS50cmltKCkucmVwbGFjZUFsbCgvXG5ccysvZywiICIpLnJlcGxhY2VBbGwoWlR0LCJcbiIpLnJlcGxhY2UoL15cbisvLCIiKS5yZXBsYWNlQWxsKC88XC8oLiop''@;'; put 'put ''PlxzKyQvZ20sIjwvJDE+Iik7ZG97Tz1FLEU9RS5yZXBsYWNlKC88KD8hYnJcYilbXj5dKz4vZ2ksIiIpfXdoaWxlKEUhPT1PKTtFPUUucmVwbGFjZUFsbCgvXiZuYnNwOyQvZ20sIiIpLGUucHVzaChgJHtvfSR7RX08L3RkPmApLHQ9bC5zdGFydCtsLmxlbmd0aH1yZXR1cm4gZS5qb2luKCIi''@;'; put 'put ''KX1mdW5jdGlvbiBYc2UobixlPWRvY3VtZW50KXtjb25zdCB0PXt9LHI9ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaT1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3IuYXBwZW5kQ2hpbGQoaSk7bGV0IG89bjtpZigic3RyaW5nIj09dHlwZW9mIG8pe2NvbnN0IEF0PUxBZShvKTtpLmluc2Vy''@;'; put 'put ''dEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsQXQpLG89aS5xdWVyeVNlbGVjdG9yKCJ0YWJsZSIpfWlmKCFvfHwhZnVuY3Rpb24gV1R0KG4pe3JldHVybiJUQUJMRSI9PT0obiYmbi5ub2RlTmFtZXx8IiIpfShvKSlyZXR1cm47Y29uc3QgYT1vLGw9aS5xdWVyeVNlbGVjdG9yKCdtZXRhW25h''@;'; put 'put ''bWUkPSJlbmVyYXRvciJdJyksdT1udWxsIT09YS5xdWVyeVNlbGVjdG9yKCJ0Ym9keSB0aCIpLGc9YS5xdWVyeVNlbGVjdG9yKCJ0ciIpLEU9Zz9BcnJheS5mcm9tKGcuY2VsbHMpLnJlZHVjZSgoQXQsS3QpPT5BdCtLdC5jb2xTcGFuLDApLSh1PzE6MCk6MCxPPWEudEZvb3QmJkFycmF5LmZy''@;'; put 'put ''b20oYS50Rm9vdC5yb3dzKXx8W10sWj1bXTtsZXQgZWU9ITEsdmU9MCxNZT0wO2lmKGEudEhlYWQpe2NvbnN0IEF0PUFycmF5LmZyb20oYS50SGVhZC5yb3dzKS5maWx0ZXIoS3Q9Pntjb25zdCBxdD1udWxsIT09S3QucXVlcnlTZWxlY3RvcigidGQiKTtyZXR1cm4gcXQmJloucHVzaChLdCks''@;'; put 'put ''IXF0fSk7dmU9QXQubGVuZ3RoLGVlPXZlPjAsdmU+MT90Lm5lc3RlZEhlYWRlcnM9QXJyYXkuZnJvbShBdCkucmVkdWNlKChLdCxxdCk9Pntjb25zdCBnbj1BcnJheS5mcm9tKHF0LmNlbGxzKS5yZWR1Y2UoKFRuLENuLHFyKT0+e2lmKHUmJjA9PT1xcilyZXR1cm4gVG47Y29uc3R7Y29sU3Bh''@;'; put 'put ''bjokbixpbm5lckhUTUw6VHJ9PUNuO3JldHVybiBUbi5wdXNoKCRuPjE/e2xhYmVsOlRyLGNvbHNwYW46JG59OlRyKSxUbn0sW10pO3JldHVybiBLdC5wdXNoKGduKSxLdH0sW10pOmVlJiYodC5jb2xIZWFkZXJzPUFycmF5LmZyb20oQXRbMF0uY2hpbGRyZW4pLnJlZHVjZSgoS3QscXQsZ24p''@;'; put 'put ''PT4odSYmMD09PWdufHxLdC5wdXNoKHF0LmlubmVySFRNTCksS3QpLFtdKSl9Wi5sZW5ndGgmJih0LmZpeGVkUm93c1RvcD1aLmxlbmd0aCksTy5sZW5ndGgmJih0LmZpeGVkUm93c0JvdHRvbT1PLmxlbmd0aCk7Y29uc3QgSGU9Wy4uLlosLi4uQXJyYXkuZnJvbShhLnRCb2RpZXMpLnJlZHVj''@;'; put 'put ''ZSgoQXQsS3QpPT4oQXJyYXkuZnJvbShLdC5yb3dzKS5mb3JFYWNoKHF0PT57QXQucHVzaChxdCl9KSxBdCksW10pLC4uLk9dO01lPUhlLmxlbmd0aDtjb25zdCBXZT1BcnJheS5mcm9tKHtsZW5ndGg6TWV9LCgpPT5BcnJheS5mcm9tKHtsZW5ndGg6RX0pKSxhdD1bXSxDdD1bXTtmb3IobGV0''@;'; put 'put ''IEF0PTA7QXQ8TWU7QXQrKyl7Y29uc3QgcXQ9QXJyYXkuZnJvbShIZVtBdF0uY2VsbHMpLGduPXF0Lmxlbmd0aDtmb3IobGV0IFRuPTA7VG48Z247VG4rKyl7Y29uc3QgQ249cXRbVG5dLHtub2RlTmFtZTpxcixpbm5lckhUTUw6JG4scm93U3BhbjpUcixjb2xTcGFuOnJpfT1Dbixmbj1XZVtB''@;'; put 'put ''dF0uZmluZEluZGV4KHlyPT52b2lkIDA9PT15cik7aWYoIlREIj09PXFyKXtpZihUcj4xfHxyaT4xKXtmb3IobGV0IHRpPUF0O3RpPEF0K1RyO3RpKyspaWYodGk8TWUpZm9yKGxldCBmcj1mbjtmcjxmbityaTtmcisrKVdlW3RpXVtmcl09bnVsbDtjb25zdCBBbj1Dbi5nZXRBdHRyaWJ1dGUo''@;'; put 'put ''InN0eWxlIik7QW4mJkFuLmluY2x1ZGVzKCJtc28taWdub3JlOmNvbHNwYW4iKXx8YXQucHVzaCh7Y29sOmZuLHJvdzpBdCxyb3dzcGFuOlRyLGNvbHNwYW46cml9KX1sZXQgeXI9IiI7eXI9bCYmL2V4Y2VsL2dpLnRlc3QobC5jb250ZW50KT8kbi5yZXBsYWNlKC9bXHJcbl1bXHgyMF17MCwy''@;'; put 'put ''fS9nLCIgIikucmVwbGFjZSgvPGJyKFxzKnxcLyk+W1xyXG5dP1tceDIwXXswLDN9L2dpbSwiXHJcbiIpOiRuLnJlcGxhY2UoLzxicihccyp8XC8pPltcclxuXT8vZ2ltLCJcclxuIiksV2VbQXRdW2ZuXT15ci5yZXBsYWNlKHpUdCxBbj0+SUFlW0FuXSl9ZWxzZSBDdC5wdXNoKCRuKX19cmV0''@;'; put 'put ''dXJuIGF0Lmxlbmd0aCYmKHQubWVyZ2VDZWxscz1hdCksQ3QubGVuZ3RoJiYodC5yb3dIZWFkZXJzPUN0KSxXZS5sZW5ndGgmJih0LmRhdGE9V2UpLHR9ZnVuY3Rpb24gdzAobixlPVtdKXtpZigibnVtYmVyIj09dHlwZW9mIG4pcmV0dXJuIWlzTmFOKG4pJiZpc0Zpbml0ZShuKTtpZigic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIG4pe2lmKDA9PT1uLmxlbmd0aClyZXR1cm4hMTtpZigxPT09bi5sZW5ndGgpcmV0dXJuL1xkLy50ZXN0KG4pO2NvbnN0IHQ9QXJyYXkuZnJvbShuZXcgU2V0KFsiLiIsLi4uZV0pKS5tYXAocj0+YFxcJHtyfWApLmpvaW4oInwiKTtyZXR1cm4gbmV3IFJlZ0V4cChgXlsr''@;'; put 'put ''LV0/KCgoJHt0fSk/XFxkKygoJHt0fSlcXGQrKT8oZVsrLV0/XFxkKyk/KXwoMHhbYS1mXFxkXSspKSRgLCJpIikudGVzdChuLnRyaW0oKSl9cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT09biYmIm51bWJlciI9PXR5cGVvZiBuLnZhbHVlT2YoKSYmIShuIGluc3RhbmNlb2YgRGF0''@;'; put 'put ''ZSl9ZnVuY3Rpb24gT0FlKG4pe3JldHVybiB3MChuLFsiLCJdKX1mdW5jdGlvbiBRc2UobixlKXtyZXR1cm4iLiI9PT1lJiYic3RyaW5nIj09dHlwZW9mIG4mJi9eWystXT9bMS05XVxkezAsMn0oLFxkezN9KSskLy50ZXN0KG4udHJpbSgpKX1mdW5jdGlvbiBKc2UobixlKXtyZXR1cm4iLCI9''@;'; put 'put ''PT1lJiYic3RyaW5nIj09dHlwZW9mIG4mJi9eWystXT9bMS05XVxkezAsMn0oXC5cZHszfSkrJC8udGVzdChuLnRyaW0oKSl9ZnVuY3Rpb24gZWxlKG4sZSl7cmV0dXJuIiwiPT09ZSYmInN0cmluZyI9PXR5cGVvZiBuJiYvXlsrLV0/WzEtOV1cZHswLDJ9KFwuXGR7M30pKyxcZCskLy50ZXN0''@;'; put 'put ''KG4udHJpbSgpKX1mdW5jdGlvbiBWYShuLGUsdCl7bGV0IHIsaSxvO2ZvcigiZnVuY3Rpb24iPT10eXBlb2YgZT8ocj0tMSxpPW4sbz1lKToocj1uLTEsaT1lLG89dCk7KytyPD1pJiYhMSE9PW8ocik7KTt9ZnVuY3Rpb24gdGxlKG4sZSx0KXtsZXQgaSxvLHI9bisxO2ZvcigiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgZT8obz1lLGk9MCk6KG89dCxpPWUpOy0tcj49aSYmITEhPT1vKHIpOyk7fWZ1bmN0aW9uIG5sZShuLGUpe3JldHVybiBlPU51bWJlci5wYXJzZUludChlLnRvU3RyaW5nKCkucmVwbGFjZSgiJSIsIiIpLDEwKSxlPWlzTmFOKGUpPzA6ZSxOdW1iZXIucGFyc2VJbnQoU3RyaW5n''@;'; put 'put ''KG4qZS8xMDApLDEwKX1mdW5jdGlvbiBWcyhuLGUsdCl7cmV0dXJuIE1hdGgubWluKG4sZSk9PT1uP2U6TWF0aC5tYXgobix0KT09PW4/dDpufWZ1bmN0aW9uIE5BZShuLGU9e30pe2NvbnN0e2RlY2ltYWxTZXBhcmF0b3I6dH09ZSxyPW4udHJpbSgpO2lmKFFzZShuLHQpKXJldHVybiBOdW1i''@;'; put 'put ''ZXIucGFyc2VGbG9hdChyLnJlcGxhY2VBbGwoIiwiLCIiKSk7aWYoSnNlKG4sdCkpcmV0dXJuIE51bWJlci5wYXJzZUZsb2F0KHIucmVwbGFjZUFsbCgiLiIsIiIpKTtpZihlbGUobix0KSlyZXR1cm4gTnVtYmVyLnBhcnNlRmxvYXQoci5yZXBsYWNlQWxsKCIuIiwiIikucmVwbGFjZSgiLCIs''@;'; put 'put ''Ii4iKSk7Y29uc3QgaT1yLnJlcGxhY2UoIiwiLCIuIik7cmV0dXJuITE9PT1pc05hTihOdW1iZXIucGFyc2VGbG9hdChpKSk/TnVtYmVyLnBhcnNlRmxvYXQoaSk6bnVsbH1mdW5jdGlvbiBwdyhuKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihuKSYmIm51bWJlciI9PXR5cGVvZiBuJiZuPj0w''@;'; put 'put ''fWNvbnN0IEZBZT1uZXcgTWFwKFtbImFzYyIsWy0xLDFdXSxbImRlc2MiLFsxLC0xXV1dKSxxVHQ9bj0+YFRoZSBwcmlvcml0eSAnJHtufScgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiBhIG1hcC5gLEtUdD1uPT5gVGhlIHByaW9yaXR5ICcke259JyBpcyBub3QgYSBudW1iZXIuYCxRVHQ9bj0+''@;'; put 'put ''YFRoZSBpZCAnJHtufScgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiBhIG1hcC5gO2Z1bmN0aW9uIENMKHtlcnJvcklkRXhpc3RzOm59PXt9KXtjb25zdCBlPW5ldyBNYXAsdD1fYShuKT9uOlFUdDtmdW5jdGlvbiB1KCl7cmV0dXJuWy4uLmVdfWZ1bmN0aW9uIEUoTyl7cmV0dXJuIGUuaGFzKE8p''@;'; put 'put ''fXJldHVybnthZGRJdGVtOmZ1bmN0aW9uIHIoTyxaKXtFKE8pJiZKcihTdHJpbmcodChPKSkpLGUuc2V0KE8sWil9LGNsZWFyOmZ1bmN0aW9uIG8oKXtlLmNsZWFyKCl9LGdldElkOmZ1bmN0aW9uIGEoTyl7Y29uc3RbWl09dSgpLmZpbmQoKFtlZSx2ZV0pPT5PPT09dmUmJmVlKXx8W251bGxd''@;'; put 'put ''O3JldHVybiBafSxnZXRJdGVtOmZ1bmN0aW9uIGwoTyl7cmV0dXJuIGUuZ2V0KE8pfSxnZXRJdGVtczp1LGdldFZhbHVlczpmdW5jdGlvbiBnKCl7cmV0dXJuWy4uLmUudmFsdWVzKCldfSxoYXNJdGVtOkUscmVtb3ZlSXRlbTpmdW5jdGlvbiBpKE8pe3JldHVybiBlLmRlbGV0ZShPKX19fWNv''@;'; put 'put ''bnN0IEpUdD1uPT5gJyR7bn0nIHZhbHVlIGlzIGFscmVhZHkgZGVjbGFyZWQgaW4gYSB1bmlxdWUgc2V0LmAsaWxlPW49PmBUaGVyZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgIiR7bn0iIHBsdWdpbi5gLFBBZT1mdW5jdGlvbiBYVHQoe2Vycm9yUHJpb3JpdHlFeGlzdHM6bixlcnJvclByaW9y''@;'; put 'put ''aXR5TmFOOmV9PXt9KXtjb25zdCB0PW5ldyBNYXAscj1fYShuKT9uOnFUdCxpPV9hKGUpP2U6S1R0O3JldHVybnthZGRJdGVtOmZ1bmN0aW9uIG8obCx1KXt3MChsKXx8SnIoU3RyaW5nKGkobCkpKSx0LmhhcyhsKSYmSnIoU3RyaW5nKHIobCkpKSx0LnNldChsLHUpfSxnZXRJdGVtczpmdW5j''@;'; put 'put ''dGlvbiBhKGw9ImFzYyIpe2NvbnN0W3UsZ109RkFlLmdldChsKXx8RkFlLmdldCgiYXNjIik7cmV0dXJuWy4uLnRdLnNvcnQoKEUsTyk9PkVbMF08T1swXT91OmcpLm1hcChFPT5FWzFdKX19fSh7ZXJyb3JQcmlvcml0eUV4aXN0czpuPT5gVGhlcmUgaXMgYWxyZWFkeSByZWdpc3RlcmVkIHBs''@;'; put 'put ''dWdpbiBvbiBwcmlvcml0eSAiJHtufSIuYCxlcnJvclByaW9yaXR5TmFOOm49PmBUaGUgcHJpb3JpdHkgIiR7bn0iIGlzIG5vdCBhIG51bWJlci5gfSksSEFlPWZ1bmN0aW9uIGV4dCh7ZXJyb3JJdGVtRXhpc3RzOm59PXt9KXtjb25zdCBlPW5ldyBTZXQsdD1fYShuKT9uOkpUdDtyZXR1cm57''@;'; put 'put ''YWRkSXRlbTpmdW5jdGlvbiByKGEpe2UuaGFzKGEpJiZKcihTdHJpbmcodChhKSkpLGUuYWRkKGEpfSxjbGVhcjpmdW5jdGlvbiBvKCl7ZS5jbGVhcigpfSxnZXRJdGVtczpmdW5jdGlvbiBpKCl7cmV0dXJuWy4uLmVdfX19KHtlcnJvckl0ZW1FeGlzdHM6aWxlfSksb2xlPUNMKHtlcnJvcklk''@;'; put 'put ''RXhpc3RzOmlsZX0pO2Z1bmN0aW9uIGFsZSgpe3JldHVyblsuLi5QQWUuZ2V0SXRlbXMoKSwuLi5IQWUuZ2V0SXRlbXMoKV19ZnVuY3Rpb24gU0wobil7Y29uc3QgZT1LMChuKTtyZXR1cm4gb2xlLmdldEl0ZW0oZSl9ZnVuY3Rpb24gb2wobixlLHQpe2NvbnN0W3IsaSxvXT1mdW5jdGlvbiBy''@;'; put 'put ''eHQobixlLHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYobj0oZT1uKS5QTFVHSU5fS0VZLHQ9ZS5QTFVHSU5fUFJJT1JJVFkpLFtuLGUsdF19KG4sZSx0KTt2b2lkIDA9PT1TTChyKSYmZnVuY3Rpb24gbnh0KG4sZSx0KXtjb25zdCByPUswKG4pO29sZS5oYXNJdGVtKHIpJiZKcihp''@;'; put 'put ''bGUocikpLHZvaWQgMD09PXQ/SEFlLmFkZEl0ZW0ocik6UEFlLmFkZEl0ZW0odCxyKSxvbGUuYWRkSXRlbShyLGUpfShyLGksbyl9Y29uc3R7cmVnaXN0ZXI6aXh0LGdldEl0ZW06b3h0LGhhc0l0ZW06VkFlLGdldE5hbWVzOmF4dH09enAoInJlbmRlcmVycyIpO2Z1bmN0aW9uICRXKG4pe3Jl''@;'; put 'put ''dHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246KFZBZShuKXx8SnIoYE5vIHJlZ2lzdGVyZWQgcmVuZGVyZXIgZm91bmQgdW5kZXIgIiR7bn0iIG5hbWVgKSxveHQobikpfWZ1bmN0aW9uIEMwKG4sZSl7InN0cmluZyIhPXR5cGVvZiBuJiYoZT1uLG49bi5SRU5ERVJFUl9UWVBFKSxpeHQobixl''@;'; put 'put ''KX1jb25zdHtyZWdpc3RlcjpzeHQsZ2V0SXRlbTpseHQsaGFzSXRlbTpCQWUsZ2V0TmFtZXM6Y3h0fT16cCgidmFsaWRhdG9ycyIpO2Z1bmN0aW9uIHNsZShuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOihCQWUobil8fEpyKGBObyByZWdpc3RlcmVkIHZhbGlkYXRvciBmb3VuZCB1''@;'; put 'put ''bmRlciAiJHtufSIgbmFtZWApLGx4dChuKSl9ZnVuY3Rpb24gZTYobixlKXsic3RyaW5nIiE9dHlwZW9mIG4mJihlPW4sbj1uLlZBTElEQVRPUl9UWVBFKSxzeHQobixlKX1mdW5jdGlvbiBqQWUobixlLHQscixpKXtsZXQgbz0wO2ZvcihsZXQgYT10O2E8PXI7YSsrKXtjb25zdCBsPW4uZ2V0''@;'; put 'put ''Q2VsbCh7cm93OmUsY29sOmF9LCEwKTtpZighKGwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpY29udGludWU7Y29uc3QgdT1sLm9mZnNldFdpZHRoO2lmKGk8byt1KXJldHVybiBhO28rPXV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gbGxlKG4sZSx0LHIsaSl7bGV0IG89MDtmb3IobGV0IGE9dDth''@;'; put 'put ''PD1yO2ErKyl7Y29uc3QgbD1uLmdldENlbGwoe3JvdzphLGNvbDplfSwhMCk7aWYoIShsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKWNvbnRpbnVlO2NvbnN0IHU9bC5vZmZzZXRIZWlnaHQ7aWYoaTxvK3UpcmV0dXJuIGE7bys9dX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBVQWUobixlKXtpZihl''@;'; put 'put ''LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHpBZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3Qr''@;'; put 'put ''IiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBWaShuLGUpe3JldHVybiBmdW5jdGlvbiB1eHQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLHpBZShuLGUsImdldCIpKX1mdW5jdGlvbiBlMihuLGUsdCl7''@;'; put 'put ''VUFlKG4sZSksZS5zZXQobix0KX1mdW5jdGlvbiBYcyhuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIGR4dChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0''@;'; put 'put ''ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4sekFlKG4sZSwic2V0IiksdCksdH1mdW5jdGlvbiBiNyhuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiBj''@;'; put 'put ''bGUobixlKXtVQWUobixlKSxlLmFkZChuKX12YXIgJDE9bmV3IFdlYWtNYXAsV009bmV3IFdlYWtNYXAsdmg9bmV3IFdlYWtNYXAsRUw9bmV3IFdlYWtNYXAscVc9bmV3IFdlYWtNYXAsUDM9bmV3IFdlYWtNYXAsS1c9bmV3IFdlYWtNYXAsWU09bmV3IFdlYWtNYXAsWTI9bmV3IFdlYWtNYXAs''@;'; put 'put ''V3A9bmV3IFdlYWtNYXAsZ3c9bmV3IFdlYWtNYXAsbXc9bmV3IFdlYWtNYXAsV3Y9bmV3IFdlYWtNYXAsWXY9bmV3IFdlYWtNYXAsWk09bmV3IFdlYWtNYXAsR009bmV3IFdlYWtNYXAsWnY9bmV3IFdlYWtNYXAsWUFlPW5ldyBXZWFrU2V0LFpBZT1uZXcgV2Vha1NldCxHdj1uZXcgV2Vha1Nl''@;'; put 'put ''dDtmdW5jdGlvbiBweHQobixlKXtjb25zdCB0PVZpKHRoaXMsJDEpLmdldFNldHRpbmcoInJ0bE1vZGUiKSxyPVZpKHRoaXMsS1cpLmNhbGwodGhpcyksaT1WaSh0aGlzLCQxKS5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLG89VmkodGhpcywkMSkuZ2V0U2V0dGluZygiZml4ZWRS''@;'; put 'put ''b3dzVG9wIiksYT1WaSh0aGlzLCQxKS5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxsPXIud3RTY3JvbGwuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCksdT1yLnd0U2Nyb2xsLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCksZz1yLnd0U2Nyb2xsLmdldEZpcnN0UGFydGlh''@;'; put 'put ''bGx5VmlzaWJsZUNvbHVtbigpLEU9ci53dFNjcm9sbC5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpLE89VmkodGhpcyx2aCkud3RSb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxaPVZpKHRoaXMsJDEpLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg+''@;'; put 'put ''MD9yLnd0Vmlld3BvcnQuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCk6MCxlZT1WaSh0aGlzLCQxKS5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoPjA/ci53dFZpZXdwb3J0LmdldFJvd0hlYWRlcldpZHRoKCk6MCx7cm9vdFdpbmRvdzp2ZX09VmkodGhpcyxXTSksTWU9ci53dFZpZXdw''@;'; put 'put ''b3J0LmlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCk/TWF0aC5taW4oMCxPLmxlZnQpOk8ubGVmdCxIZT1yLnd0Vmlld3BvcnQuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCk/TWF0aC5taW4oMCxPLnRvcCk6Ty50b3AsV2U9ci53dFZpZXdwb3J0LmlzSG9yaXpvbnRh''@;'; put 'put ''bGx5U2Nyb2xsYWJsZUJ5V2luZG93KCk/dmUuaW5uZXJXaWR0aDpPLmxlZnQrci53dFZpZXdwb3J0LmdldFZpZXdwb3J0V2lkdGgoKStlZSxhdD1yLnd0Vmlld3BvcnQuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCk/dmUuaW5uZXJIZWlnaHQ6Ty50b3Arci53dFZpZXdwb3J0Lmdl''@;'; put 'put ''dFZpZXdwb3J0SGVpZ2h0KCkrWixDdD1WcyhuLE1lLFdlKSxBdD1WcyhlLEhlLGF0KTtsZXQgS3Q9bnVsbDtpZihpPjApe2NvbnN0IGduPXIuZ2V0Q2VsbCh7cm93OmwsY29sOjB9LCEwKTtpZihnbiBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KXtjb25zdCBUbj1nbi5nZXRCb3VuZGluZ0NsaWVu''@;'; put 'put ''dFJlY3QoKTtLdD1qQWUocixsLDAsaS0xLHQ/VG4ucmlnaHQtQ3Q6Q3QtVG4ubGVmdCl9fWlmKG51bGw9PT1LdCl7Y29uc3QgZ249ci5nZXRDZWxsKHtyb3c6bCxjb2w6Z30sITApO2lmKGduIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpe2NvbnN0IFRuPWduLmdldEJvdW5kaW5nQ2xpZW50UmVj''@;'; put 'put ''dCgpLENuPXQ/VG4ucmlnaHQtQ3Q6Q3QtVG4ubGVmdDtLdD1qQWUocixsLGcsRSxDbiksbnVsbD09PUt0JiYoS3Q9Q248MD9nOkUpfWVsc2UgS3Q9Z31sZXQgcXQ9bnVsbDtpZihvPjApe2NvbnN0IGduPXIuZ2V0Q2VsbCh7cm93OjAsY29sOmd9LCEwKTtnbiBpbnN0YW5jZW9mIEhUTUxFbGVt''@;'; put 'put ''ZW50JiYocXQ9bGxlKHIsZywwLG8tMSxBdC1nbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ApKX1pZihudWxsPT09cXQmJmE+MCl7Y29uc3QgZ249VmkodGhpcywkMSkuZ2V0U2V0dGluZygidG90YWxSb3dzIiksVG49Z24tYSxDbj1nbi0xLHFyPXIuZ2V0Q2VsbCh7cm93OlRuLGNvbDpn''@;'; put 'put ''fSwhMCk7aWYocXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCl7Y29uc3QgVHI9QXQtcXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1RyPj0wJiYocXQ9bGxlKHIsZyxUbixDbixUciksbnVsbD09PXF0JiYocXQ9Q24pKX19aWYobnVsbD09PXF0KXtjb25zdCBnbj1yLmdldENlbGwoe3Jv''@;'; put 'put ''dzpsLGNvbDpnfSwhMCk7Z24gaW5zdGFuY2VvZiBIVE1MRWxlbWVudD8ocXQ9bGxlKHIsZyxsLHUsQXQtZ24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wKSxudWxsPT09cXQmJihxdD11KSk6cXQ9bH1yZXR1cm57Y29vcmRzOnIuY3JlYXRlQ2VsbENvb3JkcyhxdCxLdCksaXNPdXRzaWRl''@;'; put 'put ''Om48TWV8fG4+V2V8fGU8SGV8fGU+YXR9fWZ1bmN0aW9uIGd4dChuKXtiNyh0aGlzLEd2LHZ3KS5jYWxsKHRoaXMpO2NvbnN0IGU9bi50b3VjaGVzWzBdO2UmJihYcyh0aGlzLFd2LHt4OmUuY2xpZW50WCx5OmUuY2xpZW50WX0pLFhzKHRoaXMsZ3csc2V0VGltZW91dCgoKT0+e1hzKHRoaXMs''@;'; put 'put ''Z3csbnVsbCksWHModGhpcyxtdywhMCksWHModGhpcyxXdixudWxsKSx0aGlzLm9uTW91c2VEb3duKG4pLFZpKHRoaXMsV3ApWzBdPW51bGwsVmkodGhpcyxXcClbMV09bnVsbCxudWxsIT09VmkodGhpcyxZMilbMF0mJmNsZWFyVGltZW91dChWaSh0aGlzLFkyKVswXSksbnVsbCE9PVZpKHRo''@;'; put 'put ''aXMsWTIpWzFdJiZjbGVhclRpbWVvdXQoVmkodGhpcyxZMilbMV0pO2NvbnN0IHQ9bi50YXJnZXQ7aWYoIXQpcmV0dXJuO2NvbnN0IHI9bmV3IE1vdXNlRXZlbnQoImNvbnRleHRtZW51Iix7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNsaWVudFg6ZS5jbGllbnRYLGNsaWVudFk6ZS5jbGll''@;'; put 'put ''bnRZLHNjcmVlblg6ZS5zY3JlZW5YLHNjcmVlblk6ZS5zY3JlZW5ZfSk7dC5kaXNwYXRjaEV2ZW50KHIpfSw1MDApKSl9ZnVuY3Rpb24gdncoKXtudWxsIT09VmkodGhpcyxndykmJihjbGVhclRpbWVvdXQoVmkodGhpcyxndykpLFhzKHRoaXMsZ3csbnVsbCkpLFhzKHRoaXMsV3YsbnVsbCl9''@;'; put 'put ''Y29uc3QgR0FlPWNsYXNzIGZ4dHtyZWdpc3RlckV2ZW50cygpe1ZpKHRoaXMsUDMpLmFkZEV2ZW50TGlzdGVuZXIoVmkodGhpcyx2aCkuaG9sZGVyLCJjb250ZXh0bWVudSIscj0+dGhpcy5vbkNvbnRleHRNZW51KHIpKSxWaSh0aGlzLFAzKS5hZGRFdmVudExpc3RlbmVyKFZpKHRoaXMsdmgp''@;'; put 'put ''LlRBQkxFLCJtb3VzZW92ZXIiLHI9PnRoaXMub25Nb3VzZU92ZXIocikpLFZpKHRoaXMsUDMpLmFkZEV2ZW50TGlzdGVuZXIoVmkodGhpcyx2aCkuVEFCTEUsIm1vdXNlb3V0IixyPT50aGlzLm9uTW91c2VPdXQocikpLFZpKHRoaXMsdmgpLmlzTWFzdGVyJiYoVmkodGhpcyxQMykuYWRkRXZl''@;'; put 'put ''bnRMaXN0ZW5lcihWaSh0aGlzLFdNKS5yb290RG9jdW1lbnQsIm1vdXNlbW92ZSIscj0+dGhpcy5vbk1vdXNlTW92ZShyKSksVmkodGhpcyxQMykuYWRkRXZlbnRMaXN0ZW5lcihWaSh0aGlzLFdNKS5yb290RG9jdW1lbnQsIm1vdXNldXAiLCgpPT57WHModGhpcyxHTSwhMSksWHModGhpcyxa''@;'; put 'put ''dixudWxsKX0pKTtjb25zdCBlPSgpPT57VmkodGhpcyxQMykuYWRkRXZlbnRMaXN0ZW5lcihWaSh0aGlzLHZoKS5ob2xkZXIsInRvdWNoc3RhcnQiLHI9PnRoaXMub25Ub3VjaFN0YXJ0KHIpKSxWaSh0aGlzLFAzKS5hZGRFdmVudExpc3RlbmVyKFZpKHRoaXMsdmgpLmhvbGRlciwidG91Y2hl''@;'; put 'put ''bmQiLHI9PnRoaXMub25Ub3VjaEVuZChyKSksVmkodGhpcyxQMykuYWRkRXZlbnRMaXN0ZW5lcihWaSh0aGlzLHZoKS5ob2xkZXIsInRvdWNobW92ZSIscj0+dGhpcy5vblRvdWNoTW92ZShyKSksVmkodGhpcyxQMykuYWRkRXZlbnRMaXN0ZW5lcihWaSh0aGlzLHZoKS5ob2xkZXIsInNjcm9s''@;'; put 'put ''bCIsKCk9PnRoaXMub25Ib2xkZXJTY3JvbGwoKSl9O1E1KCk/ZSgpOihfc2UoKSYmZSgpLCgoKT0+e1ZpKHRoaXMsUDMpLmFkZEV2ZW50TGlzdGVuZXIoVmkodGhpcyx2aCkuaG9sZGVyLCJtb3VzZXVwIixyPT50aGlzLm9uTW91c2VVcChyKSksVmkodGhpcyxQMykuYWRkRXZlbnRMaXN0ZW5l''@;'; put 'put ''cihWaSh0aGlzLHZoKS5ob2xkZXIsIm1vdXNlZG93biIscj0+dGhpcy5vbk1vdXNlRG93bihyKSl9KSgpKX1zZWxlY3RlZENlbGxXYXNUb3VjaGVkKGUpe2NvbnN0IHI9dGhpcy5wYXJlbnRDZWxsKGUpLmNvb3JkcztpZihWaSh0aGlzLFlNKSYmcil7Y29uc3RbaSxvXT1bci5yb3csVmkodGhp''@;'; put 'put ''cyxZTSkuZnJvbS5yb3ddLFthLGxdPVtyLmNvbCxWaSh0aGlzLFlNKS5mcm9tLmNvbF07cmV0dXJuIGk9PT1vJiZhPT09bH1yZXR1cm4hMX1wYXJlbnRDZWxsKGUpe2NvbnN0IHQ9e2Nvb3JkczpudWxsLFREOm51bGx9LGk9Z0woZSxbIlREIiwiVEgiXSxWaSh0aGlzLHZoKS5UQUJMRSksbz1l''@;'; put 'put ''O2lmKGkpdC5jb29yZHM9VmkodGhpcyx2aCkuZ2V0Q29vcmRzKGkpLHQuVEQ9aTtlbHNlIGlmKExhKG8sInd0Qm9yZGVyIikmJkxhKG8sImN1cnJlbnQiKSl7Y29uc3QgYT1WaSh0aGlzLEVMKS5nZXRGb2N1c1NlbGVjdGlvbigpPy5jZWxsUmFuZ2U7YSYmKHQuY29vcmRzPWEuaGlnaGxpZ2h0''@;'; put 'put ''LHQuVEQ9VmkodGhpcyx2aCkuZ2V0Q2VsbCh0LmNvb3JkcykpfWVsc2UgaWYoTGEobywid3RCb3JkZXIiKSYmTGEobywiYXJlYSIpKXtjb25zdCBhPVZpKHRoaXMsRUwpLmdldEFyZWFTZWxlY3Rpb24oKT8uY2VsbFJhbmdlO2EmJih0LmNvb3Jkcz1hLnRvLHQuVEQ9VmkodGhpcyx2aCkuZ2V0''@;'; put 'put ''Q2VsbCh0LmNvb3JkcykpfXJldHVybiB0fW9uTW91c2VEb3duKGUpe2NvbnN0IHQ9VmkodGhpcyxXTSkucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQscj1BYShlKSxpPWw9Pll4ZShyLGwpLG89QWEoZSk7aWYodCYmIVsiVEQiLCJUSCJdLmluY2x1ZGVzKHQubm9kZU5hbWUpJiYobz09PXR8''@;'; put 'put ''fGkoMCk9PT10fHxpKDEpPT09dCkpcmV0dXJuO2NvbnN0IGE9dGhpcy5wYXJlbnRDZWxsKG8pO0xhKG8sImNvcm5lciIpP1ZpKHRoaXMsJDEpLmdldFNldHRpbmcoIm9uQ2VsbENvcm5lck1vdXNlRG93biIsZSxvKTphLlREJiYoWHModGhpcyxHTSwhMCksWHModGhpcyxadixudWxsKSxWaSh0''@;'; put 'put ''aGlzLCQxKS5oYXMoIm9uQ2VsbE1vdXNlRG93biIpJiZ0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsTW91c2VEb3duIixlLGEuY29vcmRzLGEuVEQpKSwoMD09PWUuYnV0dG9ufHx0aGlzLnRvdWNoQXBwbGllZCkmJmEuVEQmJihWaSh0aGlzLFdwKVswXT1hLlRELG51bGwhPT1WaSh0aGlzLFky''@;'; put 'put ''KVswXSYmY2xlYXJUaW1lb3V0KFZpKHRoaXMsWTIpWzBdKSxWaSh0aGlzLFkyKVswXT1zZXRUaW1lb3V0KCgpPT57VmkodGhpcyxXcClbMF09bnVsbH0sMWUzKSl9b25Db250ZXh0TWVudShlKXtpZihiNyh0aGlzLEd2LHZ3KS5jYWxsKHRoaXMpLFZpKHRoaXMsJDEpLmhhcygib25DZWxsQ29u''@;'; put 'put ''dGV4dE1lbnUiKSl7Y29uc3QgdD10aGlzLnBhcmVudENlbGwoQWEoZSkpO3QuVEQmJnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxDb250ZXh0TWVudSIsZSx0LmNvb3Jkcyx0LlREKX19b25Nb3VzZU92ZXIoZSl7aWYoIVZpKHRoaXMsJDEpLmhhcygib25DZWxsTW91c2VPdmVyIikpcmV0dXJu''@;'; put 'put ''O2NvbnN0IHQ9VmkodGhpcyx2aCkuVEFCTEUscj1nTChBYShlKSxbIlREIiwiVEgiXSx0KSxpPVZpKHRoaXMscVcpfHx0aGlzO2lmKHImJnIhPT1pLmxhc3RNb3VzZU92ZXImJkJ2KHIsdCkpe2kubGFzdE1vdXNlT3Zlcj1yO2NvbnN0IG89VmkodGhpcyx2aCkuZ2V0Q29vcmRzKHIpO28mJnRo''@;'; put 'put ''aXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZU92ZXIiLGUsbyxyKX19b25Nb3VzZU1vdmUoZSl7aWYoIVZpKHRoaXMsR00pKXJldHVybjtjb25zdHtjb29yZHM6dCxpc091dHNpZGU6cn09YjcodGhpcyxZQWUscHh0KS5jYWxsKHRoaXMsZS5jbGllbnRYLGUuY2xpZW50WSk7aWYocil7Y29u''@;'; put 'put ''c3QgaT1WaSh0aGlzLFp2KTtpZighaXx8aS5yb3chPT10LnJvd3x8aS5jb2whPT10LmNvbCl7Y29uc3Qgbz1WaSh0aGlzLHZoKS5nZXRDZWxsKHQpO28gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmKFhzKHRoaXMsWnYse3Jvdzp0LnJvdyxjb2w6dC5jb2x9KSx0aGlzLmNhbGxMaXN0ZW5lcigi''@;'; put 'put ''b25DZWxsTW91c2VPdmVyT3V0c2lkZSIsZSx0LG8pKX19ZWxzZSBYcyh0aGlzLFp2LG51bGwpfW9uTW91c2VPdXQoZSl7aWYoIVZpKHRoaXMsJDEpLmhhcygib25DZWxsTW91c2VPdXQiKSlyZXR1cm47Y29uc3QgdD1WaSh0aGlzLHZoKS5UQUJMRSxyPWdMKEFhKGUpLFsiVEQiLCJUSCJdLHQp''@;'; put 'put ''LGk9Z0woZS5yZWxhdGVkVGFyZ2V0LFsiVEQiLCJUSCJdLHQpLG89VmkodGhpcyxxVyl8fHRoaXM7aWYociYmciE9PWkmJkJ2KHIsdCkpe2NvbnN0IGE9VmkodGhpcyx2aCkuZ2V0Q29vcmRzKHIpO2EmJnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZU91dCIsZSxhLHIpLG51bGw9PT1p''@;'; put 'put ''JiYoby5sYXN0TW91c2VPdmVyPW51bGwpfX1vbk1vdXNlVXAoZSl7WHModGhpcyxHTSwhMSksWHModGhpcyxadixudWxsKTtjb25zdCB0PXRoaXMucGFyZW50Q2VsbChBYShlKSk7dC5URCYmVmkodGhpcywkMSkuaGFzKCJvbkNlbGxNb3VzZVVwIikmJnRoaXMuY2FsbExpc3RlbmVyKCJvbkNl''@;'; put 'put ''bGxNb3VzZVVwIixlLHQuY29vcmRzLHQuVEQpLCgwPT09ZS5idXR0b258fHRoaXMudG91Y2hBcHBsaWVkKSYmKHQuVEQmJnQuVEQ9PT1WaSh0aGlzLFdwKVswXSYmdC5URD09PVZpKHRoaXMsV3ApWzFdPyhMYShBYShlKSwiY29ybmVyIik/dGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbENvcm5l''@;'; put 'put ''ckRibENsaWNrIixlLHQuY29vcmRzLHQuVEQpOnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxEYmxDbGljayIsZSx0LmNvb3Jkcyx0LlREKSxWaSh0aGlzLFdwKVswXT1udWxsLFZpKHRoaXMsV3ApWzFdPW51bGwpOnQuVEQmJnQuVEQ9PT1WaSh0aGlzLFdwKVswXSYmKFZpKHRoaXMsV3ApWzFd''@;'; put 'put ''PXQuVEQsbnVsbCE9PVZpKHRoaXMsWTIpWzFdJiZjbGVhclRpbWVvdXQoVmkodGhpcyxZMilbMV0pLFZpKHRoaXMsWTIpWzFdPXNldFRpbWVvdXQoKCk9PntWaSh0aGlzLFdwKVsxXT1udWxsfSw1MDApKSl9b25Ub3VjaFN0YXJ0KGUpe1hzKHRoaXMsWU0sVmkodGhpcyxFTCkuZ2V0Rm9jdXNT''@;'; put 'put ''ZWxlY3Rpb24oKT8uY2VsbFJhbmdlPz9udWxsKSx0aGlzLnRvdWNoQXBwbGllZD0hMCxYcyh0aGlzLFl2LCExKSxYcyh0aGlzLG13LCExKSxYcyh0aGlzLFpNLGUpLGI3KHRoaXMsWkFlLGd4dCkuY2FsbCh0aGlzLGUpfW9uVG91Y2hFbmQoZSl7Y29uc3QgdD1WaSh0aGlzLFl2KSxyPSF0JiYh''@;'; put 'put ''VmkodGhpcyxtdykmJm51bGwhPT1WaSh0aGlzLFpNKSxpPVZpKHRoaXMsWk0pO2I3KHRoaXMsR3YsdncpLmNhbGwodGhpcyksWHModGhpcyxaTSxudWxsKSxyJiZudWxsIT09aSYmdGhpcy5vbk1vdXNlRG93bihpKTtjb25zdCBvPUFhKGUpLGE9dGhpcy5wYXJlbnRDZWxsKG8pPy5jb29yZHM7''@;'; put 'put ''aWYoZS5jYW5jZWxhYmxlJiZudWxsIT1hJiYoYS5yb3c/Py0xKT49MCYmKGEuY29sPz8tMSk+PTAmJlZpKHRoaXMsJDEpLmdldFNldHRpbmcoImlzRGF0YVZpZXdJbnN0YW5jZSIpKXtjb25zdCBnPVsiQSIsIkJVVFRPTiIsIklOUFVUIl07KHlzZSgpJiYoSHhlKCl8fFZ4ZSgpKSYmdGhpcy5z''@;'; put 'put ''ZWxlY3RlZENlbGxXYXNUb3VjaGVkKG8pJiYhZy5pbmNsdWRlcyhvLnRhZ05hbWUpfHwhdGhpcy5zZWxlY3RlZENlbGxXYXNUb3VjaGVkKG8pJiYoIklOUFVUIiE9PW8udGFnTmFtZXx8ImNoZWNrYm94IiE9PW8udHlwZSkpJiZlLnByZXZlbnREZWZhdWx0KCl9KCF0fHxWaSh0aGlzLG13KSkm''@;'; put 'put ''JnRoaXMub25Nb3VzZVVwKGUpLHRoaXMudG91Y2hBcHBsaWVkPSExLFhzKHRoaXMsWXYsITEpLFhzKHRoaXMsbXcsITEpfW9uSG9sZGVyU2Nyb2xsKCl7dGhpcy5tb21lbnR1bVNjcm9sbGluZ3x8KHRoaXMubW9tZW50dW1TY3JvbGxpbmc9e30pLHRoaXMudG91Y2hBcHBsaWVkJiZYcyh0aGlz''@;'; put 'put ''LFl2LCEwKSxiNyh0aGlzLEd2LHZ3KS5jYWxsKHRoaXMpLGNsZWFyVGltZW91dCh0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLl90aW1lb3V0KSx0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLm9uZ29pbmd8fFZpKHRoaXMsJDEpLmdldFNldHRpbmcoIm9uQmVmb3JlVG91Y2hTY3JvbGwiKSx0aGlzLm1v''@;'; put 'put ''bWVudHVtU2Nyb2xsaW5nLm9uZ29pbmc9ITAsdGhpcy5tb21lbnR1bVNjcm9sbGluZy5fdGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy50b3VjaEFwcGxpZWR8fCh0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLm9uZ29pbmc9ITEsVmkodGhpcywkMSkuZ2V0U2V0dGluZygib25BZnRlck1vbWVu''@;'; put 'put ''dHVtU2Nyb2xsIikpfSwyMDApfW9uVG91Y2hNb3ZlKGUpe2lmKG51bGw9PT1WaSh0aGlzLFd2KSlyZXR1cm47Y29uc3QgdD1lLnRvdWNoZXNbMF07aWYoIXQpcmV0dXJuIFhzKHRoaXMsWXYsITApLHZvaWQgYjcodGhpcyxHdix2dykuY2FsbCh0aGlzKTtjb25zdCByPU1hdGguYWJzKHQuY2xp''@;'; put 'put ''ZW50WC1WaSh0aGlzLFd2KS54KSxpPU1hdGguYWJzKHQuY2xpZW50WS1WaSh0aGlzLFd2KS55KTsocj4xMHx8aT4xMCkmJihYcyh0aGlzLFl2LCEwKSxiNyh0aGlzLEd2LHZ3KS5jYWxsKHRoaXMpKX1jYWxsTGlzdGVuZXIoZSx0LHIsaSl7Y29uc3Qgbz1WaSh0aGlzLCQxKS5nZXRTZXR0aW5n''@;'; put 'put ''UHVyZShlKTtvJiZvKHQscixpLFZpKHRoaXMsS1cpLmNhbGwodGhpcykpfWRlc3Ryb3koKXtudWxsIT09VmkodGhpcyxZMilbMF0mJmNsZWFyVGltZW91dChWaSh0aGlzLFkyKVswXSksbnVsbCE9PVZpKHRoaXMsWTIpWzFdJiZjbGVhclRpbWVvdXQoVmkodGhpcyxZMilbMV0pLGI3KHRoaXMs''@;'; put 'put ''R3YsdncpLmNhbGwodGhpcyksdGhpcy5tb21lbnR1bVNjcm9sbGluZyYmY2xlYXJUaW1lb3V0KHRoaXMubW9tZW50dW1TY3JvbGxpbmcuX3RpbWVvdXQpLFZpKHRoaXMsUDMpLmRlc3Ryb3koKX1jb25zdHJ1Y3RvcihlLHQscixpLG8sYSxsPW51bGwpe2NsZSh0aGlzLFlBZSksY2xlKHRoaXMs''@;'; put 'put ''WkFlKSxjbGUodGhpcyxHdiksZTIodGhpcywkMSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZTIodGhpcyxXTSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZTIodGhpcyx2aCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZTIodGhpcyxFTCx7d3JpdGFibGU6ITAsdmFsdWU6''@;'; put 'put ''dm9pZCAwfSksZTIodGhpcyxxVyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZTIodGhpcyxQMyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZTIodGhpcyxLVyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZTIodGhpcyxZTSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSks''@;'; put 'put ''ZTIodGhpcyxZMix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZTIodGhpcyxXcCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZTIodGhpcyxndyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZTIodGhpcyxtdyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZTIodGhpcyxX''@;'; put 'put ''dix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZTIodGhpcyxZdix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZTIodGhpcyxaTSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZTIodGhpcyxHTSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZTIodGhpcyxadix7d3JpdGFi''@;'; put 'put ''bGU6ITAsdmFsdWU6dm9pZCAwfSksWHModGhpcyxZTSxudWxsKSxYcyh0aGlzLFkyLFtudWxsLG51bGxdKSxYcyh0aGlzLFdwLFtudWxsLG51bGxdKSxYcyh0aGlzLGd3LG51bGwpLFhzKHRoaXMsbXcsITEpLFhzKHRoaXMsV3YsbnVsbCksWHModGhpcyxZdiwhMSksWHModGhpcyxaTSxudWxs''@;'; put 'put ''KSxYcyh0aGlzLEdNLCExKSxYcyh0aGlzLFp2LG51bGwpLFhzKHRoaXMsJDEsciksWHModGhpcyxXTSx0KSxYcyh0aGlzLHZoLG8pLFhzKHRoaXMsRUwsYSksWHModGhpcyxxVyxsKSxYcyh0aGlzLFAzLGkpLFhzKHRoaXMsS1csZSksdGhpcy5yZWdpc3RlckV2ZW50cygpfX0sdnh0PWNsYXNz''@;'; put 'put ''IG14dHtvZmZzZXR0ZWQoZSl7cmV0dXJuIGUrdGhpcy5vZmZzZXR9dW5PZmZzZXR0ZWQoZSl7cmV0dXJuIGUtdGhpcy5vZmZzZXR9cmVuZGVyZWRUb1NvdXJjZShlKXtyZXR1cm4gdGhpcy5vZmZzZXR0ZWQoZSl9c291cmNlVG9SZW5kZXJlZChlKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZChl''@;'; put 'put ''KX1vZmZzZXR0ZWRUSChlKXtyZXR1cm4gZS10aGlzLmNvdW50VEh9dW5PZmZzZXR0ZWRUSChlKXtyZXR1cm4gZSt0aGlzLmNvdW50VEh9dmlzaWJsZVJvd0hlYWRlZENvbHVtblRvU291cmNlQ29sdW1uKGUpe3JldHVybiB0aGlzLnJlbmRlcmVkVG9Tb3VyY2UodGhpcy5vZmZzZXR0ZWRUSChl''@;'; put 'put ''KSl9c291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGUpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVkVEgodGhpcy5zb3VyY2VUb1JlbmRlcmVkKGUpKX1jb25zdHJ1Y3RvcihlLHQscil7dGhpcy5vZmZzZXQ9ZSx0aGlzLnRvdGFsPXQsdGhpcy5jb3VudFRIPXJ9fSx5eHQ9Y2xh''@;'; put 'put ''c3MgX3h0e29mZnNldHRlZChlKXtyZXR1cm4gZSt0aGlzLm9mZnNldH11bk9mZnNldHRlZChlKXtyZXR1cm4gZS10aGlzLm9mZnNldH1yZW5kZXJlZFRvU291cmNlKGUpe3JldHVybiB0aGlzLm9mZnNldHRlZChlKX1zb3VyY2VUb1JlbmRlcmVkKGUpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVk''@;'; put 'put ''KGUpfW9mZnNldHRlZFRIKGUpe3JldHVybiBlLXRoaXMuY291bnRUSH11bk9mZnNldHRlZFRIKGUpe3JldHVybiBlK3RoaXMuY291bnRUSH12aXNpYmxlQ29sSGVhZGVkUm93VG9Tb3VyY2VSb3coZSl7cmV0dXJuIHRoaXMucmVuZGVyZWRUb1NvdXJjZSh0aGlzLm9mZnNldHRlZFRIKGUpKX1z''@;'; put 'put ''b3VyY2VSb3dUb1Zpc2libGVDb2xIZWFkZWRSb3coZSl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWRUSCh0aGlzLnNvdXJjZVRvUmVuZGVyZWQoZSkpfWNvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLm9mZnNldD1lLHRoaXMudG90YWw9dCx0aGlzLmNvdW50VEg9cn19O2NsYXNzIGJ4dHtzZXRTaXpl''@;'; put 'put ''KGUpe3RoaXMubmV4dFNpemU9ZX1zZXRPZmZzZXQoZSl7dGhpcy5uZXh0T2Zmc2V0PWV9Y29uc3RydWN0b3IoKXt0aGlzLm5leHRTaXplPTAsdGhpcy5uZXh0T2Zmc2V0PTB9fWNsYXNzIEN4dHtzZXRTaXplKGUpe3RoaXMuc2l6ZS5zZXRTaXplKGUpfXNldE9mZnNldChlKXt0aGlzLnNpemUu''@;'; put 'put ''c2V0T2Zmc2V0KGUpfWdldFZpZXdTaXplKCl7cmV0dXJuIHRoaXMuc2l6ZX1pc1NoYXJlZCgpe3JldHVybiBudWxsIT09dGhpcy5zaGFyZWRTaXplfWlzUGxhY2VPbihlKXtyZXR1cm4gdGhpcy53b3JraW5nU3BhY2U9PT1lfWFwcGVuZChlKXt0aGlzLndvcmtpbmdTcGFjZT0xLGUud29ya2lu''@;'; put 'put ''Z1NwYWNlPTIsdGhpcy5zaGFyZWRTaXplPWUuZ2V0Vmlld1NpemUoKX1wcmVwZW5kKGUpe3RoaXMud29ya2luZ1NwYWNlPTIsZS53b3JraW5nU3BhY2U9MSx0aGlzLnNoYXJlZFNpemU9ZS5nZXRWaWV3U2l6ZSgpfWNvbnN0cnVjdG9yKCl7dGhpcy5zaXplPW5ldyBieHQsdGhpcy53b3JraW5n''@;'; put 'put ''U3BhY2U9MCx0aGlzLnNoYXJlZFNpemU9bnVsbH19Y2xhc3MgTUx7c2V0U2l6ZShlKXtyZXR1cm4gdGhpcy5zaXplU2V0LnNldFNpemUoZSksdGhpc31zZXRPZmZzZXQoZSl7cmV0dXJuIHRoaXMuc2l6ZVNldC5zZXRPZmZzZXQoZSksdGhpc31pc1NoYXJlZFZpZXdTZXQoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5zaXplU2V0LmlzU2hhcmVkKCl9Z2V0Tm9kZShlKXtyZXR1cm4gZTx0aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aD90aGlzLmNvbGxlY3RlZE5vZGVzW2VdOm51bGx9Z2V0Q3VycmVudE5vZGUoKXtjb25zdCBlPXRoaXMuY29sbGVjdGVkTm9kZXMubGVuZ3RoO3JldHVybiBlPjA/dGhpcy5j''@;'; put 'put ''b2xsZWN0ZWROb2Rlc1tlLTFdOm51bGx9Z2V0UmVuZGVyZWRDaGlsZENvdW50KCl7Y29uc3R7cm9vdE5vZGU6ZSxzaXplU2V0OnR9PXRoaXM7bGV0IHI9MDtpZih0aGlzLmlzU2hhcmVkVmlld1NldCgpKXtsZXQgaT1lLmZpcnN0RWxlbWVudENoaWxkO2Zvcig7aTspe2lmKGkudGFnTmFtZT09''@;'; put 'put ''PXRoaXMuY2hpbGROb2RlVHlwZSlyKz0xO2Vsc2UgaWYodC5pc1BsYWNlT24oMSkpYnJlYWs7aT1pLm5leHRFbGVtZW50U2libGluZ319ZWxzZSByPWUuY2hpbGRFbGVtZW50Q291bnQ7cmV0dXJuIHJ9c3RhcnQoKXt0aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aD0wLHRoaXMudmlzdWFsSW5k''@;'; put 'put ''ZXg9MDtjb25zdHtyb290Tm9kZTplLHNpemVTZXQ6dH09dGhpcyxyPXRoaXMuaXNTaGFyZWRWaWV3U2V0KCkse25leHRTaXplOml9PXQuZ2V0Vmlld1NpemUoKTtsZXQgbz10aGlzLmdldFJlbmRlcmVkQ2hpbGRDb3VudCgpO2Zvcig7bzxpOyl7Y29uc3QgbD10aGlzLm5vZGVzUG9vbCgpOyFy''@;'; put 'put ''fHx0LmlzUGxhY2VPbigyKT9lLmFwcGVuZENoaWxkKGwpOmUuaW5zZXJ0QmVmb3JlKGwsZS5maXJzdENoaWxkKSxvKz0xfWNvbnN0IGE9ciYmdC5pc1BsYWNlT24oMSk7Zm9yKDtvPmk7KXtjb25zdCBsPWE/ZS5maXJzdENoaWxkOmUubGFzdENoaWxkO2wmJmUucmVtb3ZlQ2hpbGQobCksby09''@;'; put 'put ''MX19cmVuZGVyKCl7Y29uc3R7cm9vdE5vZGU6ZSxzaXplU2V0OnR9PXRoaXM7bGV0IHI9dGhpcy52aXN1YWxJbmRleDt0aGlzLmlzU2hhcmVkVmlld1NldCgpJiZ0LmlzUGxhY2VPbigyKSYmdC5zaGFyZWRTaXplJiYocis9dC5zaGFyZWRTaXplLm5leHRTaXplKTtsZXQgaT1lLmNoaWxkcmVu''@;'; put 'put ''W3JdO2lmKGkpe2lmKGkudGFnTmFtZSE9PXRoaXMuY2hpbGROb2RlVHlwZSl7Y29uc3Qgbz10aGlzLm5vZGVzUG9vbCgpO2kucmVwbGFjZVdpdGgobyksaT1vfX1lbHNlIGk9dGhpcy5ub2Rlc1Bvb2woKSxlLmFwcGVuZENoaWxkKGkpO3RoaXMuY29sbGVjdGVkTm9kZXMucHVzaChpKSx0aGlz''@;'; put 'put ''LnZpc3VhbEluZGV4Kz0xfWVuZCgpe31jb25zdHJ1Y3RvcihlLHQscil7dGhpcy5zaXplU2V0PW5ldyBDeHQsdGhpcy5jb2xsZWN0ZWROb2Rlcz1bXSx0aGlzLnZpc3VhbEluZGV4PTAsdGhpcy5yb290Tm9kZT1lLHRoaXMubm9kZXNQb29sPXQsdGhpcy5jaGlsZE5vZGVUeXBlPSJzdHJpbmci''@;'; put 'put ''PT10eXBlb2Ygcj9yLnRvVXBwZXJDYXNlKCk6cn19Y2xhc3MgJEFlIGV4dGVuZHMgTUx7cHJlcGVuZFZpZXcoZSl7cmV0dXJuIHRoaXMuc2l6ZVNldC5wcmVwZW5kKGUuc2l6ZVNldCksZS5zaXplU2V0LmFwcGVuZCh0aGlzLnNpemVTZXQpLHRoaXN9YXBwZW5kVmlldyhlKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5zaXplU2V0LmFwcGVuZChlLnNpemVTZXQpLGUuc2l6ZVNldC5wcmVwZW5kKHRoaXMuc2l6ZVNldCksdGhpc319Y2xhc3MgU3h0e3NldFJvb3REb2N1bWVudChlKXt0aGlzLnJvb3REb2N1bWVudD1lfW9idGFpbihlLHQpe3JldHVybiB0aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50''@;'; put 'put ''KHRoaXMubm9kZVR5cGUpfWNvbnN0cnVjdG9yKGUpe3RoaXMubm9kZVR5cGU9ZS50b1VwcGVyQ2FzZSgpfX1jbGFzcyAkTXtzZXRUYWJsZShlKXt0aGlzLm5vZGVzUG9vbCYmdGhpcy5ub2Rlc1Bvb2wuc2V0Um9vdERvY3VtZW50KGUucm9vdERvY3VtZW50KSx0aGlzLnRhYmxlPWV9cmVuZGVy''@;'; put 'put ''KCl7fWNvbnN0cnVjdG9yKGUsdCl7dGhpcy5ub2Rlc1Bvb2w9bnVsbCx0aGlzLnJlbmRlcmVkTm9kZXM9MCx0aGlzLm5vZGVzUG9vbD0ic3RyaW5nIj09dHlwZW9mIGU/bmV3IFN4dChlKTpudWxsLHRoaXMubm9kZVR5cGU9ZSx2b2lkIDAhPT10JiYodGhpcy5yb290Tm9kZT10KX19Y2xhc3Mg''@;'; put 'put ''RXh0IGV4dGVuZHMgJE17b2J0YWluT3JkZXJWaWV3KGUpe3JldHVybiB0aGlzLm9yZGVyVmlld3MuaGFzKGUpfHx0aGlzLm9yZGVyVmlld3Muc2V0KGUsbmV3ICRBZShlLCgpPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4oKSx0aGlzLm5vZGVUeXBlKSksdGhpcy5vcmRlclZpZXdzLmdldChlKX1y''@;'; put 'put ''ZW5kZXIoKXtjb25zdHtyb3dzVG9SZW5kZXI6ZSxyb3dIZWFkZXJGdW5jdGlvbnM6dCxyb3dIZWFkZXJzQ291bnQ6cixyb3dzOmksY2VsbHM6b309dGhpcy50YWJsZTtmb3IobGV0IGE9MDthPGU7YSsrKXtjb25zdCBsPXRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZShhKSx1PWkuZ2V0''@;'; put 'put ''UmVuZGVyZWROb2RlKGEpO2lmKCF1KWNvbnRpbnVlO2NvbnN0IGc9dGhpcy5vYnRhaW5PcmRlclZpZXcodSksRT1vLm9idGFpbk9yZGVyVmlldyh1KTtnLmFwcGVuZFZpZXcoRSkuc2V0U2l6ZShyKS5zZXRPZmZzZXQoMCkuc3RhcnQoKTtmb3IobGV0IE89MDtPPHI7TysrKXtnLnJlbmRlcigp''@;'; put 'put ''O2NvbnN0IFo9Zy5nZXRDdXJyZW50Tm9kZSgpO1omJihaLmNsYXNzTmFtZT0iIixaLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSx3NChaLFsvYXJpYS0oLiopLywvcm9sZS9dKSx0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmS28oWixbaE10KCksRU10KCksaHNlKE8rMSksYjQoLTEpXSks''@;'; put 'put ''dFtPXShsLFosTykpfWcuZW5kKCl9fWNvbnN0cnVjdG9yKCl7c3VwZXIoIlRIIiksdGhpcy5vcmRlclZpZXdzPW5ldyBXZWFrTWFwfX1jbGFzcyBNeHQgZXh0ZW5kcyAkTXtnZXRSZW5kZXJlZE5vZGUoZSl7cmV0dXJuIHRoaXMub3JkZXJWaWV3LmdldE5vZGUoZSl9cmVuZGVyKCl7Y29uc3R7''@;'; put 'put ''Y29sdW1uSGVhZGVyc0NvdW50OmV9PXRoaXMudGFibGU7dGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkmJktvKHRoaXMucm9vdE5vZGUsW1sicm9sZSIsInJvd2dyb3VwIl1dKSx0aGlzLm9yZGVyVmlldy5zZXRTaXplKGUpLnNldE9mZnNldCgwKS5zdGFydCgpO2ZvcihsZXQgdD0wO3Q8ZTt0''@;'; put 'put ''Kyspe3RoaXMub3JkZXJWaWV3LnJlbmRlcigpO2NvbnN0IHI9dGhpcy5vcmRlclZpZXcuZ2V0Q3VycmVudE5vZGUoKTtyJiZ0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmS28ocixbaHhlKCksbXhlKHQrMSldKX10aGlzLm9yZGVyVmlldy5lbmQoKX1jb25zdHJ1Y3RvcihlKXtzdXBlcigi''@;'; put 'put ''VFIiLGUpLHRoaXMub3JkZXJWaWV3PW5ldyBNTChlLCgpPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4oKSx0aGlzLm5vZGVUeXBlKX19Y2xhc3MgVHh0IGV4dGVuZHMgJE17b2J0YWluT3JkZXJWaWV3KGUpe3JldHVybiB0aGlzLm9yZGVyVmlld3MuaGFzKGUpfHx0aGlzLm9yZGVyVmlld3Muc2V0''@;'; put 'put ''KGUsbmV3IE1MKGUsKCk9PnRoaXMubm9kZXNQb29sLm9idGFpbigpLHRoaXMubm9kZVR5cGUpKSx0aGlzLm9yZGVyVmlld3MuZ2V0KGUpfXJlbmRlcigpe2NvbnN0e2NvbHVtbkhlYWRlcnNDb3VudDplLGNvbHVtbkhlYWRlckZ1bmN0aW9uczp0LGNvbHVtbnNUb1JlbmRlcjpyLHJvd0hlYWRl''@;'; put 'put ''cnNDb3VudDppLGNvbHVtbkhlYWRlclJvd3M6b309dGhpcy50YWJsZSxhPXIraTtmb3IobGV0IGw9MDtsPGU7bCsrKXtjb25zdCB1PW8uZ2V0UmVuZGVyZWROb2RlKGwpO2lmKCF1KWNvbnRpbnVlO2NvbnN0IGc9dGhpcy5vYnRhaW5PcmRlclZpZXcodSk7Zy5zZXRTaXplKGEpLnNldE9mZnNl''@;'; put 'put ''dCgwKS5zdGFydCgpO2ZvcihsZXQgRT0wO0U8YTtFKyspe2cucmVuZGVyKCk7Y29uc3QgTz1FLWksWj10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoTyksZWU9Zy5nZXRDdXJyZW50Tm9kZSgpO2VlJiYoZWUuY2xhc3NOYW1lPSIiLGVlLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUi''@;'; put 'put ''KSx3NChlZSxbL2FyaWEtKC4qKS8sL3JvbGUvXSksdGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkmJktvKGVlLFtoc2UoRSsxKSxiNCgtMSksZk10KCksLi4uTz49MD9bU010KCldOltkTXQoKSxOMygiU2VsZWN0IHdob2xlIGdyaWQiKV1dKSx0W2xdKFosZWUsbCkpfWcuZW5kKCl9fWNvbnN0''@;'; put 'put ''cnVjdG9yKCl7c3VwZXIoIlRIIiksdGhpcy5vcmRlclZpZXdzPW5ldyBXZWFrTWFwfX1sZXQgcUFlPSExO2NsYXNzIHh4dCBleHRlbmRzICRNe3JlbmRlcigpe2NvbnN0e2NvbHVtbnNUb1JlbmRlcjplLHJvd0hlYWRlcnNDb3VudDp0fT10aGlzLnRhYmxlLHI9ZSt0OyFxQWUmJmU+MWUzJiYo''@;'; put 'put ''cUFlPSEwLEhhKHljYFBlcmZvcm1hbmNlIHRpcDogSGFuZHNvbnRhYmxlIHJlbmRlcmVkIG1vcmUgdGhhbiAxMDAwIHZpc2libGUgY29sdW1ucy5ceDIwCiAgICAgICAgQ29uc2lkZXIgbGltaXRpbmcgdGhlIG51bWJlciBvZiByZW5kZXJlZCBjb2x1bW5zIGJ5IHNwZWNpZnlpbmcgdGhlIHRh''@;'; put 'put ''YmxlIHdpZHRoIGFuZC9vclx4MjAKICAgICAgICB0dXJuaW5nIG9mZiB0aGUgInJlbmRlckFsbENvbHVtbnMiIG9wdGlvbi5gKSksdGhpcy5vcmRlclZpZXcuc2V0U2l6ZShyKS5zZXRPZmZzZXQoMCkuc3RhcnQoKTtmb3IobGV0IG89MDtvPHI7bysrKXt0aGlzLm9yZGVyVmlldy5yZW5kZXIo''@;'; put 'put ''KTtjb25zdCBhPXRoaXMub3JkZXJWaWV3LmdldEN1cnJlbnROb2RlKCk7aWYoYSlpZihvPHQpe2NvbnN0IGw9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKG8pO2Euc3R5bGUud2lkdGg9YCR7dGhpcy50YWJsZS5jb2x1bW5VdGlscy5nZXRIZWFkZXJXaWR0aChsKX1weGB9ZWxz''@;'; put 'put ''ZXtjb25zdCBsPXRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZShvLXQpO2Euc3R5bGUud2lkdGg9YCR7dGhpcy50YWJsZS5jb2x1bW5VdGlscy5nZXRXaWR0aChsKX1weGB9fXRoaXMub3JkZXJWaWV3LmVuZCgpO2NvbnN0IGk9dGhpcy5yb290Tm9kZS5maXJzdENoaWxkO2kmJlly''@;'; put 'put ''KGksInJvd0hlYWRlciIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKCJDT0wiLGUpLHRoaXMub3JkZXJWaWV3PW5ldyBNTChlLCgpPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4oKSx0aGlzLm5vZGVUeXBlKX19bGV0IEtBZT0hMTtjbGFzcyBBeHQgZXh0ZW5kcyAkTXtnZXRSZW5kZXJlZE5vZGUoZSl7''@;'; put 'put ''cmV0dXJuIHRoaXMub3JkZXJWaWV3LmdldE5vZGUoZSl9cmVuZGVyKCl7Y29uc3R7cm93c1RvUmVuZGVyOmV9PXRoaXMudGFibGU7IUtBZSYmZT4xZTMmJihLQWU9ITAsSGEoeWNgUGVyZm9ybWFuY2UgdGlwOiBIYW5kc29udGFibGUgcmVuZGVyZWQgbW9yZSB0aGFuIDEwMDAgdmlzaWJsZSBy''@;'; put 'put ''b3dzLlx4MjAKICAgICAgICBDb25zaWRlciBsaW1pdGluZyB0aGUgbnVtYmVyIG9mIHJlbmRlcmVkIHJvd3MgYnkgc3BlY2lmeWluZyB0aGUgdGFibGUgaGVpZ2h0IGFuZC9vclx4MjAKICAgICAgICB0dXJuaW5nIG9mZiB0aGUgInJlbmRlckFsbFJvd3MiIG9wdGlvbi5gKSksdGhpcy50YWJs''@;'; put 'put ''ZS5pc0FyaWFFbmFibGVkKCkmJktvKHRoaXMucm9vdE5vZGUsW1sicm9sZSIsInJvd2dyb3VwIl1dKSx0aGlzLm9yZGVyVmlldy5zZXRTaXplKGUpLnNldE9mZnNldCh0aGlzLnRhYmxlLnJlbmRlcmVkUm93VG9Tb3VyY2UoMCkpLnN0YXJ0KCk7Zm9yKGxldCB0PTA7dDxlO3QrKyl7dGhpcy5v''@;'; put 'put ''cmRlclZpZXcucmVuZGVyKCk7Y29uc3Qgcj10aGlzLm9yZGVyVmlldy5nZXRDdXJyZW50Tm9kZSgpLGk9dGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKHQpO3ImJih0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmS28ocixbaHhlKCksbXhlKGkrKHRoaXMudGFibGUucm93VXRpbHM/''@;'; put 'put ''LmRhdGFBY2Nlc3NPYmplY3Q/LmNvbHVtbkhlYWRlcnM/Lmxlbmd0aD8/MCkrMSldKSwoaSsxKSUyPT0wP0xhKHIsImh0X19yb3dfZXZlbiIpfHwoa28ociwiaHRfX3Jvd19vZGQiKSxZcihyLCJodF9fcm93X2V2ZW4iKSk6TGEociwiaHRfX3Jvd19vZGQiKXx8KGtvKHIsImh0X19yb3dfZXZl''@;'; put 'put ''biIpLFlyKHIsImh0X19yb3dfb2RkIikpKX10aGlzLm9yZGVyVmlldy5lbmQoKX1jb25zdHJ1Y3RvcihlKXtzdXBlcigiVFIiLGUpLHRoaXMub3JkZXJWaWV3PW5ldyBNTChlLCgpPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4oKSx0aGlzLm5vZGVUeXBlKX19Y2xhc3Mga3h0IGV4dGVuZHMgJE17''@;'; put 'put ''b2J0YWluT3JkZXJWaWV3KGUpe3JldHVybiB0aGlzLm9yZGVyVmlld3MuaGFzKGUpfHx0aGlzLm9yZGVyVmlld3Muc2V0KGUsbmV3ICRBZShlLCgpPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4oKSx0aGlzLm5vZGVUeXBlKSksdGhpcy5vcmRlclZpZXdzLmdldChlKX1yZW5kZXIoKXtjb25zdHty''@;'; put 'put ''b3dzVG9SZW5kZXI6ZSxjb2x1bW5zVG9SZW5kZXI6dCxyb3dzOnIscm93SGVhZGVyczppfT10aGlzLnRhYmxlO2ZvcihsZXQgbz0wO288ZTtvKyspe2NvbnN0IGE9dGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKG8pLGw9ci5nZXRSZW5kZXJlZE5vZGUobyk7aWYoIWwpY29udGludWU7''@;'; put 'put ''Y29uc3QgdT10aGlzLm9idGFpbk9yZGVyVmlldyhsKSxnPWkub2J0YWluT3JkZXJWaWV3KGwpO3UucHJlcGVuZFZpZXcoZykuc2V0U2l6ZSh0KS5zZXRPZmZzZXQoMCkuc3RhcnQoKTtmb3IobGV0IEU9MDtFPHQ7RSsrKXt1LnJlbmRlcigpO2NvbnN0IE89dGhpcy50YWJsZS5yZW5kZXJlZENv''@;'; put 'put ''bHVtblRvU291cmNlKEUpLFo9dS5nZXRDdXJyZW50Tm9kZSgpO1omJihMYShaLCJoaWRlIil8fChaLmNsYXNzTmFtZT0iIiksWi5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksWi5yZW1vdmVBdHRyaWJ1dGUoImRpciIpLHc0KFosWy9hcmlhLSguKikvLC9yb2xlL10pLHRoaXMudGFibGUuY2Vs''@;'; put 'put ''bFJlbmRlcmVyKGEsTyxaKSx0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmS28oWixbLi4uWi5oYXNBdHRyaWJ1dGUoInJvbGUiKT9bXTpbdU10KCldLGI0KC0xKSxoc2UoTysodGhpcy50YWJsZS5yb3dVdGlscz8uZGF0YUFjY2Vzc09iamVjdD8ucm93SGVhZGVycz8ubGVuZ3RoPz8wKSsx''@;'; put 'put ''KV0pKX11LmVuZCgpfX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCJURCIpLHRoaXMub3JkZXJWaWV3cz1uZXcgV2Vha01hcH19Y2xhc3MgUnh0e3NldEFjdGl2ZU92ZXJsYXlOYW1lKGUpe3RoaXMuYWN0aXZlT3ZlcmxheU5hbWU9ZX1zZXRBeGlzVXRpbHMoZSx0KXt0aGlzLnJvd1V0aWxzPWUsdGhp''@;'; put 'put ''cy5jb2x1bW5VdGlscz10fXNldFZpZXdwb3J0U2l6ZShlLHQpe3RoaXMucm93c1RvUmVuZGVyPWUsdGhpcy5jb2x1bW5zVG9SZW5kZXI9dH1zZXRGaWx0ZXJzKGUsdCl7dGhpcy5yb3dGaWx0ZXI9ZSx0aGlzLmNvbHVtbkZpbHRlcj10fXNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMoZSx0KXt0''@;'; put 'put ''aGlzLnJvd0hlYWRlckZ1bmN0aW9ucz1lLHRoaXMucm93SGVhZGVyc0NvdW50PWUubGVuZ3RoLHRoaXMuY29sdW1uSGVhZGVyRnVuY3Rpb25zPXQsdGhpcy5jb2x1bW5IZWFkZXJzQ291bnQ9dC5sZW5ndGh9c2V0UmVuZGVyZXJzKHtyb3dIZWFkZXJzOmUsY29sdW1uSGVhZGVyUm93czp0LGNv''@;'; put 'put ''bHVtbkhlYWRlcnM6cixjb2xHcm91cDppLHJvd3M6byxjZWxsczphfSl7ZS5zZXRUYWJsZSh0aGlzKSx0LnNldFRhYmxlKHRoaXMpLHIuc2V0VGFibGUodGhpcyksaS5zZXRUYWJsZSh0aGlzKSxvLnNldFRhYmxlKHRoaXMpLGEuc2V0VGFibGUodGhpcyksdGhpcy5yb3dIZWFkZXJzPWUsdGhp''@;'; put 'put ''cy5jb2x1bW5IZWFkZXJSb3dzPXQsdGhpcy5jb2x1bW5IZWFkZXJzPXIsdGhpcy5jb2xHcm91cD1pLHRoaXMucm93cz1vLHRoaXMuY2VsbHM9YX1yZW5kZXJlZFJvd1RvU291cmNlKGUpe3JldHVybiB0aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGUpfXJlbmRlcmVkQ29sdW1uVG9T''@;'; put 'put ''b3VyY2UoZSl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoZSl9aXNBcmlhRW5hYmxlZCgpe3JldHVybiB0aGlzLnJvd1V0aWxzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiYXJpYVRhZ3MiKX1yZW5kZXIoKXt0aGlzLmNvbHVtbkhlYWRlclJvd3MucmVuZGVyKCks''@;'; put 'put ''dGhpcy5jb2x1bW5IZWFkZXJzLnJlbmRlcigpLHRoaXMucm93cy5yZW5kZXIoKSx0aGlzLnJvd0hlYWRlcnMucmVuZGVyKCksdGhpcy5jZWxscy5yZW5kZXIoKSx0aGlzLmNvbHVtblV0aWxzLmNhbGN1bGF0ZVdpZHRocygpLHRoaXMuY29sR3JvdXAucmVuZGVyKCk7Y29uc3R7cm93c1RvUmVu''@;'; put 'put ''ZGVyOmUscm93czp0fT10aGlzO2ZvcihsZXQgcj0wO3I8ZTtyKyspe2NvbnN0IGk9dC5nZXRSZW5kZXJlZE5vZGUociksbz10aGlzLnJvd1V0aWxzO2lmKGkmJmkuZmlyc3RDaGlsZCl7Y29uc3QgYT10aGlzLnJlbmRlcmVkUm93VG9Tb3VyY2UociksbD1vLmdldEhlaWdodEJ5T3ZlcmxheU5h''@;'; put 'put ''bWUoYSx0aGlzLmFjdGl2ZU92ZXJsYXlOYW1lKSxnPXRoaXMuc3R5bGVzSGFuZGxlci5hcmVDZWxsc0JvcmRlckJveCgpPzA6MTtpLmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0PWw/bC1nKyJweCI6IiJ9fX1jb25zdHJ1Y3RvcihlLHtjZWxsUmVuZGVyZXI6dCxzdHlsZXNIYW5kbGVyOnJ9PXt9''@;'; put 'put ''KXt0aGlzLnJvd0hlYWRlcnM9bnVsbCx0aGlzLmNvbHVtbkhlYWRlclJvd3M9bnVsbCx0aGlzLmNvbHVtbkhlYWRlcnM9bnVsbCx0aGlzLmNvbEdyb3VwPW51bGwsdGhpcy5yb3dzPW51bGwsdGhpcy5jZWxscz1udWxsLHRoaXMucm93RmlsdGVyPW51bGwsdGhpcy5jb2x1bW5GaWx0ZXI9bnVs''@;'; put 'put ''bCx0aGlzLnJvd1V0aWxzPW51bGwsdGhpcy5jb2x1bW5VdGlscz1udWxsLHRoaXMucm93c1RvUmVuZGVyPTAsdGhpcy5jb2x1bW5zVG9SZW5kZXI9MCx0aGlzLnJvd0hlYWRlckZ1bmN0aW9ucz1bXSx0aGlzLnJvd0hlYWRlcnNDb3VudD0wLHRoaXMuY29sdW1uSGVhZGVyRnVuY3Rpb25zPVtd''@;'; put 'put ''LHRoaXMuY29sdW1uSGVhZGVyc0NvdW50PTAsdGhpcy5yb290Tm9kZT1lLHRoaXMucm9vdERvY3VtZW50PXRoaXMucm9vdE5vZGUub3duZXJEb2N1bWVudCx0aGlzLmNlbGxSZW5kZXJlcj10LHRoaXMuc3R5bGVzSGFuZGxlcj1yfX1jbGFzcyBJeHR7c2V0QWN0aXZlT3ZlcmxheU5hbWUoZSl7''@;'; put 'put ''cmV0dXJuIHRoaXMucmVuZGVyZXIuc2V0QWN0aXZlT3ZlcmxheU5hbWUoZSksdGhpc31zZXRGaWx0ZXJzKGUsdCl7cmV0dXJuIHRoaXMucmVuZGVyZXIuc2V0RmlsdGVycyhlLHQpLHRoaXN9c2V0Vmlld3BvcnRTaXplKGUsdCl7cmV0dXJuIHRoaXMucmVuZGVyZXIuc2V0Vmlld3BvcnRTaXpl''@;'; put 'put ''KGUsdCksdGhpc31zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKGUsdCl7cmV0dXJuIHRoaXMucmVuZGVyZXIuc2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhlLHQpLHRoaXN9cmVuZGVyKCl7dGhpcy5yZW5kZXJlci5yZW5kZXIoKX1jb25zdHJ1Y3Rvcih7VEFCTEU6ZSxUSEVBRDp0LENPTEdS''@;'; put 'put ''T1VQOnIsVEJPRFk6aSxyb3dVdGlsczpvLGNvbHVtblV0aWxzOmEsY2VsbFJlbmRlcmVyOmwsc3R5bGVzSGFuZGxlcjp1fT17fSl7dGhpcy5yZW5kZXJlcj1uZXcgUnh0KGUse2NlbGxSZW5kZXJlcjpsLHN0eWxlc0hhbmRsZXI6dX0pLHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyZXJzKHtyb3dI''@;'; put 'put ''ZWFkZXJzOm5ldyBFeHQsY29sdW1uSGVhZGVyUm93czpuZXcgTXh0KHQpLGNvbHVtbkhlYWRlcnM6bmV3IFR4dCxjb2xHcm91cDpuZXcgeHh0KHIpLHJvd3M6bmV3IEF4dChpKSxjZWxsczpuZXcga3h0fSksdGhpcy5yZW5kZXJlci5zZXRBeGlzVXRpbHMobyxhKX19Y2xhc3MgRHh0e2dldFdp''@;'; put 'put ''ZHRoKGUpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uV2lkdGgiLGUpfHx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIil9Z2V0SGVhZGVySGVpZ2h0KGUpe2xldCB0PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzdHls''@;'; put 'put ''ZXNIYW5kbGVyIikuZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2NvbnN0IHI9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tlXTtyZXR1cm4gdm9pZCAwIT09ciYmKHQ9dD9NYXRoLm1heCh0LHIpOnIpLHR9Z2V0SGVhZGVyV2lkdGgoZSl7Y29u''@;'; put 'put ''c3R7Y29sdW1uRmlsdGVyOnR9PXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlO2lmKHQpcmV0dXJuIHRoaXMuaGVhZGVyV2lkdGhzLmdldCh0LnNvdXJjZVRvUmVuZGVyZWQoZSkpfWNhbGN1bGF0ZVdpZHRocygpe2NvbnN0e3d0U2V0dGluZ3M6ZX09dGhpcztsZXQgdD1lLmdldFNldHRp''@;'; put 'put ''bmcoInJvd0hlYWRlcldpZHRoIik7aWYodD1lLmdldFNldHRpbmcoIm9uTW9kaWZ5Um93SGVhZGVyV2lkdGgiLHQpLG51bGwhPXQpe2NvbnN0IHI9ZS5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoLGk9ZS5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKTtmb3IobGV0IG89''@;'; put 'put ''MDtvPHI7bysrKXtsZXQgYT1BcnJheS5pc0FycmF5KHQpP3Rbb106dDthPWE/P2ksdGhpcy5oZWFkZXJXaWR0aHMuc2V0KG8sYSl9fX1jb25zdHJ1Y3RvcihlLHQpe3RoaXMuaGVhZGVyV2lkdGhzPW5ldyBNYXAsdGhpcy5kYXRhQWNjZXNzT2JqZWN0PWUsdGhpcy53dFNldHRpbmdzPXR9fWNs''@;'; put 'put ''YXNzIEx4dHtnZXRIZWlnaHQoZSl7bGV0IHQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlaWdodCIsZSk7Y29uc3Qgcj10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRSb3dzW2VdO3JldHVybiB2b2lkIDAhPT1yJiYodD12b2lkIDA9PT10P3I6TWF0''@;'; put 'put ''aC5tYXgodCxyKSksdH1nZXRIZWlnaHRCeU92ZXJsYXlOYW1lKGUsdCl7bGV0IHI9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLGUsdCk7Y29uc3QgaT10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRSb3dzW2VdO3Jl''@;'; put 'put ''dHVybiB2b2lkIDAhPT1pJiYocj12b2lkIDA9PT1yP2k6TWF0aC5tYXgocixpKSkscn1jb25zdHJ1Y3RvcihlLHQpe3RoaXMuZGF0YUFjY2Vzc09iamVjdD1lLHRoaXMud3RTZXR0aW5ncz10fX1jb25zdCAkdj0idG9wIix0Nj0iYm90dG9tIixxdj0iaW5saW5lX3N0YXJ0Iixfdz0idG9wX2lu''@;'; put 'put ''bGluZV9zdGFydF9jb3JuZXIiLEt2PSJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciIsWEFlPVskdix0NixxdixfdyxLdl0sT3h0PW5ldyBNYXAoW1skdixgaHRfY2xvbmVfJHskdn1gXSxbdDYsYGh0X2Nsb25lXyR7dDZ9YF0sW3F2LGBodF9jbG9uZV8ke3F2fSBodF9jbG9uZV9sZWZ0YF0s''@;'; put 'put ''W193LGBodF9jbG9uZV8ke193fSBodF9jbG9uZV90b3BfbGVmdF9jb3JuZXJgXSxbS3YsYGh0X2Nsb25lXyR7S3Z9IGh0X2Nsb25lX2JvdHRvbV9sZWZ0X2Nvcm5lcmBdXSksS009Y2xhc3MgTnh0e2FsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWluZXIoKXt9bWFya092ZXJzaXplZENv''@;'; put 'put ''bHVtbkhlYWRlcnMoKXt9aXMoZSl7cmV0dXJuIHRoaXMubmFtZT09PWV9Zml4VGFibGVEb21UcmVlKCl7Y29uc3QgZT10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudDt0aGlzLlRCT0RZPXRoaXMuVEFCTEUucXVlcnlTZWxlY3RvcigidGJvZHkiKSx0aGlzLlRCT0RZfHwodGhpcy5UQk9E''@;'; put 'put ''WT1lLmNyZWF0ZUVsZW1lbnQoInRib2R5IiksdGhpcy5UQUJMRS5hcHBlbmRDaGlsZCh0aGlzLlRCT0RZKSksdGhpcy5USEVBRD10aGlzLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoInRoZWFkIiksdGhpcy5USEVBRHx8KHRoaXMuVEhFQUQ9ZS5jcmVhdGVFbGVtZW50KCJ0aGVhZCIpLHRoaXMuVEFC''@;'; put 'put ''TEUuaW5zZXJ0QmVmb3JlKHRoaXMuVEhFQUQsdGhpcy5UQk9EWSkpLHRoaXMuQ09MR1JPVVA9dGhpcy5UQUJMRS5xdWVyeVNlbGVjdG9yKCJjb2xncm91cCIpLHRoaXMuQ09MR1JPVVB8fCh0aGlzLkNPTEdST1VQPWUuY3JlYXRlRWxlbWVudCgiY29sZ3JvdXAiKSx0aGlzLlRBQkxFLmluc2Vy''@;'; put 'put ''dEJlZm9yZSh0aGlzLkNPTEdST1VQLHRoaXMuVEhFQUQpKX1jcmVhdGVTcHJlYWRlcihlKXtjb25zdCB0PWUucGFyZW50Tm9kZTtsZXQgcjtyZXR1cm4oIXR8fHQubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IWhzKHQpfHwhTGEodCwid3RIb2xkZXIiKSkmJihyPXRoaXMuZG9tQmlu''@;'; put 'put ''ZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHIuY2xhc3NOYW1lPSJ3dFNwcmVhZGVyIix0JiZlLmJlZm9yZShyKSxyLmFwcGVuZENoaWxkKGUpKSxyJiYoci5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJhcmlhVGFn''@;'; put 'put ''cyIpJiZLbyhyLFtbInJvbGUiLCJwcmVzZW50YXRpb24iXV0pKSxyfWNyZWF0ZUhpZGVyKGUpe2NvbnN0IHQ9ZS5wYXJlbnROb2RlO2xldCByO3JldHVybighdHx8dC5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHwhaHModCl8fCFMYSh0LCJ3dEhvbGRlciIpKSYmKHI9dGhpcy5kb21C''@;'; put 'put ''aW5kaW5ncy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiksci5jbGFzc05hbWU9Ind0SGlkZXIiLHQmJmUuYmVmb3JlKHIpLHIuYXBwZW5kQ2hpbGQoZSkpLHImJnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJhcmlhVGFncyIpJiZLbyhyLFtbInJvbGUiLCJwcmVzZW50YXRp''@;'; put 'put ''b24iXV0pLHJ9Y3JlYXRlSG9sZGVyKGUpe2NvbnN0IHQ9ZS5wYXJlbnROb2RlO2xldCByO2lmKCF0fHx0Lm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREV8fCFocyh0KXx8IUxhKHQsInd0SG9sZGVyIikpe2lmKHI9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVu''@;'; put 'put ''dCgiZGl2Iiksci5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHIuY2xhc3NOYW1lPSJ3dEhvbGRlciIsdGhpcy5pc01hc3RlciYmS28ocixbYjQoLTEpXSksdCYmZS5iZWZvcmUociksdGhpcy5pc01hc3Rlcil7Y29uc3QgaT1yLnBhcmVudE5vZGU7aHMoaSkmJihpLmNsYXNzTmFtZSs9Imh0''@;'; put 'put ''X21hc3RlciBoYW5kc29udGFibGUiLGkuc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgicnRsTW9kZSIpPyJydGwiOiJsdHIiKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiYXJpYVRhZ3MiKSYmS28oaSxbWyJyb2xlIiwicHJlc2VudGF0aW9u''@;'; put 'put ''Il1dKSl9ci5hcHBlbmRDaGlsZChlKX1yZXR1cm4gciYmdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIikmJktvKHIsW1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSkscn1kcmF3KGU9ITEpe2NvbnN0e3d0U2V0dGluZ3M6dH09dGhpcyx7d3RPdmVybGF5czpyLHd0Vmlld3Bv''@;'; put 'put ''cnQ6aX09dGhpcy5kYXRhQWNjZXNzT2JqZWN0LGw9KHQuZ2V0U2V0dGluZygidG90YWxSb3dzIiksdC5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSx0LmdldFNldHRpbmcoInJvd0hlYWRlcnMiKSksdT1sLmxlbmd0aCxnPXQuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLEU9Zy5sZW5n''@;'; put 'put ''dGg7bGV0IE89ZTtpZih0aGlzLmlzTWFzdGVyJiYoci5iZWZvcmVEcmF3KCksdGhpcy5ob2xkZXJPZmZzZXQ9WDAodGhpcy5ob2xkZXIpLGkucm93SGVpZ2h0Q2FjaGUuZW5zdXJlQnVpbHQoKSxpLmNvbHVtbldpZHRoQ2FjaGUuZW5zdXJlQnVpbHQoKSxPPWkuY3JlYXRlQ2FsY3VsYXRvcnMo''@;'; put 'put ''TyksdSYmIXQuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSkpe2NvbnN0IGVlPXIuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCksdmU9dGhpcy5jb3JyZWN0SGVhZGVyV2lkdGg7dGhpcy5jb3JyZWN0SGVhZGVyV2lkdGg9MCE9PWVlLHZlIT09dGhpcy5jb3Jy''@;'; put 'put ''ZWN0SGVhZGVyV2lkdGgmJihPPSExKX1pZihPKXRoaXMuaXNNYXN0ZXImJihyLnJlZnJlc2goITApLHRoaXMuc3luY092ZXJzaXplZENvbHVtbkhlYWRlcnNXaXRoRnJvemVuT3ZlcmxheXMoKSk7ZWxzZXt0aGlzLnRhYmxlT2Zmc2V0PXRoaXMuaXNNYXN0ZXI/WDAodGhpcy5UQUJMRSk6dGhp''@;'; put 'put ''cy5kYXRhQWNjZXNzT2JqZWN0LnBhcmVudFRhYmxlT2Zmc2V0O2NvbnN0IGVlPU1hdGgubWF4KHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpLDApLHZlPU1hdGgubWF4KHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpLDApO3RoaXMucm93RmlsdGVyPW5ldyB5eHQoZWUsdC5nZXRTZXR0''@;'; put 'put ''aW5nKCJ0b3RhbFJvd3MiKSxFKSx0aGlzLmNvbHVtbkZpbHRlcj1uZXcgdnh0KHZlLHQuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksdSk7bGV0IE1lPSEwO2lmKHRoaXMuaXNNYXN0ZXIpe3RoaXMuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpO2NvbnN0IEhlPXt9O3Ro''@;'; put 'put ''aXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJiZWZvcmVEcmF3IiwhMCxIZSksTWU9ITAhPT1IZS5za2lwUmVuZGVyfU1lJiYodGhpcy50YWJsZVJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMobCxnKSwodGhpcy5pcyh0Nil8fHRoaXMuaXMoS3YpKSYmdGhpcy50YWJsZVJlbmRl''@;'; put 'put ''cmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMobCxbXSksdGhpcy5yZXNldE92ZXJzaXplZFJvd3MoKSx0aGlzLnRhYmxlUmVuZGVyZXIuc2V0QWN0aXZlT3ZlcmxheU5hbWUodGhpcy5uYW1lKS5zZXRWaWV3cG9ydFNpemUodGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpLHRoaXMuZ2V0''@;'; put 'put ''UmVuZGVyZWRDb2x1bW5zQ291bnQoKSkuc2V0RmlsdGVycyh0aGlzLnJvd0ZpbHRlcix0aGlzLmNvbHVtbkZpbHRlcikucmVuZGVyKCksdGhpcy5pc01hc3RlciYmdGhpcy5tYXJrT3ZlcnNpemVkQ29sdW1uSGVhZGVycygpLHRoaXMuYWRqdXN0Q29sdW1uSGVhZGVySGVpZ2h0cygpLHRoaXMu''@;'; put 'put ''aXNNYXN0ZXImJnRoaXMuc3luY092ZXJzaXplZENvbHVtbkhlYWRlcnNXaXRoRE9NKCksKHRoaXMuaXNNYXN0ZXJ8fHRoaXMuaXModDYpKSYmdGhpcy5tYXJrT3ZlcnNpemVkUm93cygpLHRoaXMuaXNNYXN0ZXI/KHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJleHRlcm5hbFJvd0NhbGN1''@;'; put 'put ''bGF0b3IiKXx8KGkucm93SGVpZ2h0Q2FjaGUuZW5zdXJlQnVpbHQoKSxpLmNvbHVtbldpZHRoQ2FjaGUuZW5zdXJlQnVpbHQoKSxpLmNyZWF0ZVZpc2libGVDYWxjdWxhdG9ycygpKSxyLnJlZnJlc2goITEpLHRoaXMuc3luY092ZXJzaXplZENvbHVtbkhlYWRlcnNXaXRoRnJvemVuT3Zlcmxh''@;'; put 'put ''eXMoKSxyLmFwcGx5VG9ET00oKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25EcmF3IiwhMCkpOnRoaXMuaXModDYpJiZ0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY2xvbmVTb3VyY2Uud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUoKSl9bGV0IFo9ITE7cmV0dXJuIHRoaXMuaXNN''@;'; put 'put ''YXN0ZXImJihaPXIudG9wT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKSxyLmJvdHRvbU92ZXJsYXkuY2xvbmUmJihaPXIuYm90dG9tT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKXx8WiksWj1yLmlubGluZVN0YXJ0T3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKXx8WixyLnRvcElu''@;'; put 'put ''bGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmci50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCksci5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnIuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lJiZyLmJvdHRvbUlubGluZVN0''@;'; put 'put ''YXJ0Q29ybmVyT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKSksWj8oci5yZWZyZXNoQWxsKCksci5hZGp1c3RFbGVtZW50c1NpemUoKSk6dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnNlbGVjdGlvbk1hbmFnZXIuc2V0QWN0aXZlT3ZlcmxheSh0aGlzLmZhY2FkZUdldHRlcigpKS5yZW5kZXIo''@;'; put 'put ''TyksdGhpcy5pc01hc3RlciYmci5hZnRlckRyYXcoKSx0aGlzLmRhdGFBY2Nlc3NPYmplY3QuZHJhd249ITAsdGhpc31tYXJrSWZPdmVyc2l6ZWRDb2x1bW5IZWFkZXIoZSl7Y29uc3QgdD10aGlzLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKGUpO2xldCByPXRoaXMud3RTZXR0aW5n''@;'; put 'put ''cy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2NvbnN0IGk9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInN0eWxlc0hhbmRsZXIiKS5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IG8sYSxsO2NvbnN0IHU9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhl''@;'; put 'put ''YWRlckhlaWdodCIpfHxbXTtmb3IoO3I7KXtpZihyLT0xLG89dGhpcy5nZXRDb2x1bW5IZWFkZXJIZWlnaHQociksYT10aGlzLmdldENvbHVtbkhlYWRlcih0LHIpLCFhKWNvbnRpbnVlO2w9ZHcoYSksKCFvJiZpPGx8fG88bCkmJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5v''@;'; put 'put ''dmVyc2l6ZWRDb2x1bW5IZWFkZXJzW3JdPWwpLEFycmF5LmlzQXJyYXkodSk/bnVsbCE9dVtyXSYmKHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbcl09dVtyXSk6aXNOYU4odSl8fCh0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9y''@;'; put 'put ''dC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW3JdPXUpO2NvbnN0IGc9QXJyYXkuaXNBcnJheSh1KT91W3JdPz8wOnU7KHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbcl0/PzApPGcmJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9y''@;'; put 'put ''dC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW3JdPWcpfX1hZGp1c3RDb2x1bW5IZWFkZXJIZWlnaHRzKCl7Y29uc3R7d3RTZXR0aW5nczplfT10aGlzLHQ9dGhpcy5USEVBRC5jaGlsZE5vZGVzLHI9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVy''@;'; put 'put ''cztmb3IobGV0IG89MCxhPWUuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aDtvPGE7bysrKWlmKHJbb10pe2lmKCF0W29dfHwwPT09dFtvXS5jaGlsZE5vZGVzLmxlbmd0aClyZXR1cm47Y29uc3QgbD10W29dLmNoaWxkTm9kZXNbMF07aHMobCkmJihsLnN0eWxlLmhlaWdodD1g''@;'; put 'put ''JHtyW29dfXB4YCl9fXN5bmNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzV2l0aERPTSgpe2NvbnN0e3d0U2V0dGluZ3M6ZX09dGhpcyx0PXRoaXMuVEhFQUQuY2hpbGROb2RlcyxyPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnM7Zm9yKGxldCBh''@;'; put 'put ''PTAsbD1lLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7YTxsO2ErKyl7aWYoIXRbYV18fCFyW2FdKWNvbnRpbnVlO2NvbnN0IHU9dFthXSxnPWhzKHUpP2R3KHUpOjA7Zz4oclthXT8/MCkrMSYmKHJbYV09Zyl9fXN5bmNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzV2l0aEZyb3pl''@;'; put 'put ''bk92ZXJsYXlzKCl7Y29uc3R7d3RPdmVybGF5czplfT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsdD1lLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT8uY2xvbmU7aWYoIXQ/Lnd0VGFibGU/LlRIRUFEKXJldHVybjtjb25zdCByPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5I''@;'; put 'put ''ZWFkZXJzIik7aWYoIXIubGVuZ3RoKXJldHVybjtjb25zdCBpPXQud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzLG89ZS50b3BPdmVybGF5Py5jbG9uZSxhPVt0aGlzLlRIRUFELG8/Lnd0VGFibGU/LlRIRUFEXTtmb3IobGV0IHU9MCxnPXIubGVuZ3RoO3U8Zzt1Kyspe2NvbnN0IEU9aVt1XTtp''@;'; put 'put ''ZighKEUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpY29udGludWU7Y29uc3QgTz1FLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDthLmZvckVhY2goWj0+e2NvbnN0IGVlPVo/LmNoaWxkTm9kZXNbdV07aWYoIShlZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KXx8MD09PWVlLmNoaWxk''@;'; put 'put ''Tm9kZXMubGVuZ3RoKXJldHVybjtjb25zdCB2ZT1lZS5jaGlsZE5vZGVzWzBdO3ZlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJk1hdGguYWJzKGVlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodC1PKT4uMSYmKHZlLnN0eWxlLmhlaWdodD1gJHtPfXB4YCl9KX19cmVzZXRPdmVyc2l6''@;'; put 'put ''ZWRSb3dzKCl7Y29uc3R7d3RTZXR0aW5nczplfT10aGlzLHt3dFZpZXdwb3J0OnR9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZigodGhpcy5pc01hc3Rlcnx8dGhpcy5pcyh0NikpJiYhZS5nZXRTZXR0aW5nKCJleHRlcm5hbFJvd0NhbGN1bGF0b3IiKSl7Y29uc3Qgcj10aGlzLmdldFJlbmRl''@;'; put 'put ''cmVkUm93c0NvdW50KCk7Zm9yKGxldCBpPTA7aTxyO2krKyl7Y29uc3Qgbz10aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGkpO3Qub3ZlcnNpemVkUm93cyYmdC5vdmVyc2l6ZWRSb3dzW29dJiYodC5vdmVyc2l6ZWRSb3dzW29dPXZvaWQgMCl9fX1nZXRDZWxsKGUpe2lmKG51bGw9''@;'; put 'put ''PT1lLnJvd3x8bnVsbD09PWUuY29sKXJldHVybi01O2xldCB0PWUucm93LHI9ZS5jb2w7Y29uc3QgaT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25Nb2RpZnlHZXRDZWxsQ29vcmRzIix0LHIsIXRoaXMuaXNNYXN0ZXIsInJlbmRlciIpO2lmKGkmJkFycmF5LmlzQXJyYXkoaSkmJihb''@;'; put 'put ''dCxyXT1pKSx0aGlzLmlzUm93QmVmb3JlUmVuZGVyZWRSb3dzKHQpKXJldHVybi0xO2lmKHRoaXMuaXNSb3dBZnRlclJlbmRlcmVkUm93cyh0KSlyZXR1cm4tMjtpZih0aGlzLmlzQ29sdW1uQmVmb3JlUmVuZGVyZWRDb2x1bW5zKHIpKXJldHVybi0zO2lmKHRoaXMuaXNDb2x1bW5BZnRlclJl''@;'; put 'put ''bmRlcmVkQ29sdW1ucyhyKSlyZXR1cm4tNDtjb25zdCBvPXRoaXMuZ2V0Um93KHQpOyFvJiZ0Pj0wJiZKcigiVFIgd2FzIGV4cGVjdGVkIHRvIGJlIHJlbmRlcmVkIGJ1dCBpcyBub3QiKTtjb25zdCBsPSghMSE9PW8/bzpudWxsKT8uY2hpbGROb2Rlc1t0aGlzLmNvbHVtbkZpbHRlci5zb3Vy''@;'; put 'put ''Y2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4ocildO3JldHVybiFsJiZyPj0wJiZKcigiVEQgb3IgVEggd2FzIGV4cGVjdGVkIHRvIGJlIHJlbmRlcmVkIGJ1dCBpcyBub3QiKSxsfWdldFJvdyhlKXtsZXQgdD1udWxsLHI9bnVsbDtyZXR1cm4gZTwwPyh0PXRoaXMucm93RmlsdGVy''@;'; put 'put ''Py5zb3VyY2VSb3dUb1Zpc2libGVDb2xIZWFkZWRSb3coZSkscj10aGlzLlRIRUFEKToodD10aGlzLnJvd0ZpbHRlcj8uc291cmNlVG9SZW5kZXJlZChlKSxyPXRoaXMuVEJPRFkpLG51bGwhPXQmJm51bGwhPT1yJiYhKHIuY2hpbGROb2Rlcy5sZW5ndGg8dCsxKSYmci5jaGlsZE5vZGVzW3Rd''@;'; put 'put ''fWdldENvbHVtbkhlYWRlcihlLHQ9MCl7Y29uc3QgaT10aGlzLlRIRUFELmNoaWxkTm9kZXNbdF0/LmNoaWxkTm9kZXNbdGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGUpXTtyZXR1cm4gaHMoaSk/aTp2b2lkIDB9Z2V0Q29sdW1uSGVhZGVy''@;'; put 'put ''cyhlKXtjb25zdCB0PVtdLHI9dGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGUpO3JldHVybiB0aGlzLlRIRUFELmNoaWxkTm9kZXMuZm9yRWFjaChpPT57Y29uc3Qgbz1pLmNoaWxkTm9kZXNbcl07TnNlKG8pJiZ0LnB1c2gobyl9KSx0fWdl''@;'; put 'put ''dFJvd0hlYWRlcihlLHQ9MCl7aWYodD49dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGgpcmV0dXJuO2NvbnN0IGk9dGhpcy5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChlKSxvPWk8MD90aGlzLnJvd0ZpbHRlci5zb3VyY2VSb3dUb1Zpc2libGVDb2xI''@;'; put 'put ''ZWFkZWRSb3coZSk6aSx1PShpPDA/dGhpcy5USEVBRDp0aGlzLlRCT0RZKT8uY2hpbGROb2Rlc1tvXT8uY2hpbGROb2Rlc1t0XTtyZXR1cm4gaHModSk/dTp2b2lkIDB9Z2V0Um93SGVhZGVycyhlKXtjb25zdCB0PVtdLHI9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMi''@;'; put 'put ''KS5sZW5ndGg7Zm9yKGxldCBpPTA7aTxyO2krKyl7Y29uc3QgYT10aGlzLlRCT0RZLmNoaWxkTm9kZXNbdGhpcy5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChlKV0/LmNoaWxkTm9kZXNbaV07YSYmdC5wdXNoKGEpfXJldHVybiB0fWdldENvb3JkcyhlKXtsZXQgdD1lO2lmKCJURCIhPT10''@;'; put 'put ''Lm5vZGVOYW1lJiYiVEgiIT09dC5ub2RlTmFtZSYmKHQ9VnYodCxbIlREIiwiVEgiXSkpLG51bGw9PT10KXJldHVybiBudWxsO2NvbnN0IHI9dC5wYXJlbnROb2RlO2lmKCFyKXJldHVybiBudWxsO2NvbnN0IGk9ci5wYXJlbnROb2RlO2lmKCFpKXJldHVybiBudWxsO2xldCBvPWhzKHIpPyR4''@;'; put 'put ''ZShyKTowLGE9TnNlKHQpP3QuY2VsbEluZGV4OjA7anYoX3csdCx0aGlzLnd0Um9vdEVsZW1lbnQpfHxqdigkdix0LHRoaXMud3RSb290RWxlbWVudCk/IlRIRUFEIj09PWkubm9kZU5hbWUmJihvLT1pLmNoaWxkTm9kZXMubGVuZ3RoKTpqdihLdix0LHRoaXMud3RSb290RWxlbWVudCl8fGp2''@;'; put 'put ''KHQ2LHQsdGhpcy53dFJvb3RFbGVtZW50KT9vPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS1pLmNoaWxkTm9kZXMubGVuZ3RoK286aT09PXRoaXMuVEhFQUQ/bz10aGlzLnJvd0ZpbHRlci52aXNpYmxlQ29sSGVhZGVkUm93VG9Tb3VyY2VSb3cobyk6dGhpcy5yb3dG''@;'; put 'put ''aWx0ZXImJihvPXRoaXMucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobykpLGp2KF93LHQsdGhpcy53dFJvb3RFbGVtZW50KXx8anYocXYsdCx0aGlzLnd0Um9vdEVsZW1lbnQpfHxqdihLdix0LHRoaXMud3RSb290RWxlbWVudCk/YT10aGlzLmNvbHVtbkZpbHRlci5vZmZzZXR0ZWRUSChh''@;'; put 'put ''KTp0aGlzLmNvbHVtbkZpbHRlciYmKGE9dGhpcy5jb2x1bW5GaWx0ZXIudmlzaWJsZVJvd0hlYWRlZENvbHVtblRvU291cmNlQ29sdW1uKGEpKTtjb25zdCBsPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbk1vZGlmeUdldENvb3Jkc0VsZW1lbnQiLG8sYSk7cmV0dXJuIGwmJkFycmF5''@;'; put 'put ''LmlzQXJyYXkobCkmJihbbyxhXT1sKSx0aGlzLndvdC5jcmVhdGVDZWxsQ29vcmRzKG8sYSl9bWFya092ZXJzaXplZFJvd3MoKXtpZih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZXh0ZXJuYWxSb3dDYWxjdWxhdG9yIikpcmV0dXJuO2xldCBlPXRoaXMuVEJPRFkuY2hpbGROb2Rlcy5s''@;'; put 'put ''ZW5ndGg7Y29uc3QgdD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic3R5bGVzSGFuZGxlciIpLHI9ZSp0LmdldERlZmF1bHRSb3dIZWlnaHQoKSxpPWR3KHRoaXMuVEJPRFkpLTEsbz10LmFyZUNlbGxzQm9yZGVyQm94KCksYT1vP0hoOmR3LGw9bz8wOjEsdT1vPzE6MDtsZXQgZyxFLE8s''@;'; put 'put ''WixlZTtpZihyPT09aSYmIXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSlyZXR1cm47Y29uc3R7d3RWaWV3cG9ydDp2ZX09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2xldCBNZT0hMTtmb3IoO2U7KXtlLT0xLE89dGhpcy5yb3dGaWx0ZXIucmVuZGVyZWRUb1Nv''@;'; put 'put ''dXJjZShlKSxnPXRoaXMuZ2V0Um93SGVpZ2h0KE8pLFo9dGhpcy5nZXRUckZvclJvdyhPKSxlZT1aLnF1ZXJ5U2VsZWN0b3IoInRoIik7Y29uc3QgSGU9MD09PWU/dTowO0U9ZWU/YShlZSk6YShaKS1sLCghZyYmdC5nZXREZWZhdWx0Um93SGVpZ2h0KCk8RS1IZXx8dm9pZCAwIT09ZyYmZzxF''@;'; put 'put ''KSYmKG98fChFKz0xKSx2ZS5vdmVyc2l6ZWRSb3dzW09dPUUsTWU9ITApfU1lJiZ2ZS5yb3dIZWlnaHRDYWNoZS5pbnZhbGlkYXRlKCl9Z2V0VHJGb3JSb3coZSl7cmV0dXJuIHRoaXMuVEJPRFkuY2hpbGROb2Rlc1t0aGlzLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGUpXX1pc0NvbHVt''@;'; put 'put ''bkhlYWRlclJlbmRlcmVkKGUpe2lmKGU+PTApcmV0dXJuITE7Y29uc3Qgcj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aDtyZXR1cm4gTWF0aC5hYnMoZSk8PXJ9aXNSb3dIZWFkZXJSZW5kZXJlZChlKXtpZihlPj0wKXJldHVybiExO2NvbnN0IHI9dGhp''@;'; put 'put ''cy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7cmV0dXJuIE1hdGguYWJzKGUpPD1yfWlzUm93QmVmb3JlUmVuZGVyZWRSb3dzKGUpe2NvbnN0IHQ9dGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCk7cmV0dXJuIGU8MCYmdDw9MD8hdGhpcy5pc1Jvd0hlYWRl''@;'; put 'put ''clJlbmRlcmVkKGUpOmU8dH1pc1Jvd0FmdGVyUmVuZGVyZWRSb3dzKGUpe3JldHVybiBlPnRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9aXNDb2x1bW5CZWZvcmVSZW5kZXJlZENvbHVtbnMoZSl7Y29uc3QgdD10aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKTtyZXR1cm4gZTwwJiZ0PD0w''@;'; put 'put ''PyF0aGlzLmlzQ29sdW1uSGVhZGVyUmVuZGVyZWQoZSk6ZTx0fWlzQ29sdW1uQWZ0ZXJSZW5kZXJlZENvbHVtbnMoZSl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyJiZlPnRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9aXNDb2x1bW5BZnRlclZpZXdwb3J0KGUpe3JldHVybiB0aGlzLmNv''@;'; put 'put ''bHVtbkZpbHRlciYmZT50aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCl9aXNSb3dBZnRlclZpZXdwb3J0KGUpe3JldHVybiB0aGlzLnJvd0ZpbHRlciYmZT50aGlzLmdldExhc3RWaXNpYmxlUm93KCl9aXNDb2x1bW5CZWZvcmVWaWV3cG9ydChlKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXIm''@;'; put 'put ''JnRoaXMuY29sdW1uRmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQoZSk8MCYmZT49MH1pc0xhc3RSb3dGdWxseVZpc2libGUoKXtyZXR1cm4gdGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpPT09dGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX1pc0xhc3RDb2x1bW5GdWxseVZpc2libGUoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpPT09dGhpcy5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX1hbGxSb3dzSW5WaWV3cG9ydCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik9PT10aGlzLmdldFZpc2libGVSb3dzQ291bnQoKX1hbGxDb2x1bW5z''@;'; put 'put ''SW5WaWV3cG9ydCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIik9PT10aGlzLmdldFZpc2libGVDb2x1bW5zQ291bnQoKX1nZXRSb3dIZWlnaHQoZSl7cmV0dXJuIHRoaXMucm93VXRpbHMuZ2V0SGVpZ2h0KGUpfWdldENvbHVtbkhlYWRlckhlaWdo''@;'; put 'put ''dChlKXtyZXR1cm4gdGhpcy5jb2x1bW5VdGlscy5nZXRIZWFkZXJIZWlnaHQoZSl9Z2V0Q29sdW1uV2lkdGgoZSl7cmV0dXJuIHRoaXMuY29sdW1uVXRpbHMuZ2V0V2lkdGgoZSl9aGFzRGVmaW5lZFNpemUoKXtyZXR1cm4gdGhpcy5oYXNUYWJsZUhlaWdodCYmdGhpcy5oYXNUYWJsZVdpZHRo''@;'; put 'put ''fWdldFdpZHRoKCl7cmV0dXJuIFpkKHRoaXMuVEFCTEUpfWdldEhlaWdodCgpe3JldHVybiBIaCh0aGlzLlRBQkxFKX1nZXRUb3RhbFdpZHRoKCl7Y29uc3QgZT1aZCh0aGlzLmhpZGVyKTtyZXR1cm4gMCE9PWU/ZTp0aGlzLmdldFdpZHRoKCl9Z2V0VG90YWxIZWlnaHQoKXtjb25zdCBlPUho''@;'; put 'put ''KHRoaXMuaGlkZXIpO3JldHVybiAwIT09ZT9lOnRoaXMuZ2V0SGVpZ2h0KCl9aXNWaXNpYmxlKCl7cmV0dXJuIFV2KHRoaXMuVEFCTEUpfV9tb2RpZnlSb3dIZWFkZXJXaWR0aChlKXtsZXQgcj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lKCk6ZTtyZXR1cm4gQXJyYXkuaXNBcnJheShyKT8ocj1b''@;'; put 'put ''Li4ucl0scltyLmxlbmd0aC0xXT10aGlzLl9jb3JyZWN0Um93SGVhZGVyV2lkdGgocltyLmxlbmd0aC0xXSkpOnI9dGhpcy5fY29ycmVjdFJvd0hlYWRlcldpZHRoKHIpLHJ9X2NvcnJlY3RSb3dIZWFkZXJXaWR0aChlKXtsZXQgdD0ibnVtYmVyIj09dHlwZW9mIGU/ZTp0aGlzLnd0U2V0dGlu''@;'; put 'put ''Z3MuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIik7cmV0dXJuIHRoaXMuY29ycmVjdEhlYWRlcldpZHRoJiYodCs9MSksdH1kZXN0cm95KCl7fWNvbnN0cnVjdG9yKGUsdCxyLGksbyl7dGhpcy5UQk9EWT1udWxsLHRoaXMuVEhFQUQ9bnVsbCx0aGlzLkNPTEdST1VQPW51bGwsdGhp''@;'; put 'put ''cy5oYXNUYWJsZUhlaWdodD0hMCx0aGlzLmhhc1RhYmxlV2lkdGg9ITAsdGhpcy5pc1RhYmxlVmlzaWJsZT0hMSx0aGlzLnRhYmxlT2Zmc2V0PTAsdGhpcy5ob2xkZXJPZmZzZXQ9MCx0aGlzLmRvbUJpbmRpbmdzPXIsdGhpcy5pc01hc3Rlcj0ibWFzdGVyIj09PW8sdGhpcy5uYW1lPW8sdGhp''@;'; put 'put ''cy5kYXRhQWNjZXNzT2JqZWN0PWUsdGhpcy5mYWNhZGVHZXR0ZXI9dCx0aGlzLnd0U2V0dGluZ3M9aSx0aGlzLmluc3RhbmNlPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53b3QsdGhpcy53b3Q9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LndvdCx0aGlzLlRBQkxFPXIucm9vdFRhYmxlLFNzZSh0aGlz''@;'; put 'put ''LlRBQkxFKSx0aGlzLnNwcmVhZGVyPXRoaXMuY3JlYXRlU3ByZWFkZXIodGhpcy5UQUJMRSksdGhpcy5oaWRlcj10aGlzLmNyZWF0ZUhpZGVyKHRoaXMuc3ByZWFkZXIpLHRoaXMuaG9sZGVyPXRoaXMuY3JlYXRlSG9sZGVyKHRoaXMuaGlkZXIpLHRoaXMud3RSb290RWxlbWVudD10aGlzLmhv''@;'; put 'put ''bGRlci5wYXJlbnROb2RlLHRoaXMuaXNNYXN0ZXImJnRoaXMuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpLHRoaXMuZml4VGFibGVEb21UcmVlKCksdGhpcy5yb3dGaWx0ZXI9bnVsbCx0aGlzLmNvbHVtbkZpbHRlcj1udWxsLHRoaXMuY29ycmVjdEhlYWRlcldpZHRoPSEx''@;'; put 'put ''O2NvbnN0IGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmdQdXJlKCJyb3dIZWFkZXJXaWR0aCIpO3RoaXMud3RTZXR0aW5ncy51cGRhdGUoInJvd0hlYWRlcldpZHRoIiwoKT0+dGhpcy5fbW9kaWZ5Um93SGVhZGVyV2lkdGgoYSkpLHRoaXMucm93VXRpbHM9bmV3IEx4dCh0aGlzLmRhdGFB''@;'; put 'put ''Y2Nlc3NPYmplY3QsdGhpcy53dFNldHRpbmdzKSx0aGlzLmNvbHVtblV0aWxzPW5ldyBEeHQodGhpcy5kYXRhQWNjZXNzT2JqZWN0LHRoaXMud3RTZXR0aW5ncyksdGhpcy50YWJsZVJlbmRlcmVyPW5ldyBJeHQoe1RBQkxFOnRoaXMuVEFCTEUsVEhFQUQ6dGhpcy5USEVBRD8/dm9pZCAwLENP''@;'; put 'put ''TEdST1VQOnRoaXMuQ09MR1JPVVA/P3ZvaWQgMCxUQk9EWTp0aGlzLlRCT0RZPz92b2lkIDAscm93VXRpbHM6dGhpcy5yb3dVdGlscyxjb2x1bW5VdGlsczp0aGlzLmNvbHVtblV0aWxzLGNlbGxSZW5kZXJlcjp0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoImNlbGxSZW5kZXJlciIp''@;'; put 'put ''LHN0eWxlc0hhbmRsZXI6dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInN0eWxlc0hhbmRsZXIiKX0pfX0sUUFlPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7cmV0dXJuIDA9PT10aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCk/LTE6MH0sZ2V0Rmlyc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpfSxnZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCl9LGdldExhc3RSZW5kZXJlZFJvdygpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCktMX0sZ2V0TGFzdFZpc2libGVS''@;'; put 'put ''b3coKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX0sZ2V0UmVuZGVyZWRSb3dzQ291bnQoKXtyZXR1cm4gTWF0aC5taW4odGhpcy53dFNldHRpbmdzLmdldFNldHRp''@;'; put 'put ''bmcoInRvdGFsUm93cyIpPz8wLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSl9LGdldFZpc2libGVSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpfSxnZXRDb2x1bW5IZWFkZXJzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNj''@;'; put 'put ''ZXNzT2JqZWN0LmNvbHVtbkhlYWRlcnMubGVuZ3RofX07SzUoUUFlLCJNSVhJTl9OQU1FIiwic3RpY2t5Um93c1RvcCIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBKQWU9UUFlLGVrZT17Z2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpe2NvbnN0IG49dGhpcy5kYXRhQWNjZXNz''@;'; put 'put ''T2JqZWN0LnN0YXJ0Q29sdW1uUmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1uPy0xOm59LGdldEZpcnN0VmlzaWJsZUNvbHVtbigpe2NvbnN0IG49dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Q29sdW1uVmlzaWJsZTtyZXR1cm4gbnVsbD09PW4/LTE6bn0sZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNp''@;'; put 'put ''YmxlQ29sdW1uKCl7Y29uc3Qgbj10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5QYXJ0aWFsbHlWaXNpYmxlO3JldHVybiBudWxsPT09bj8tMTpufSxnZXRMYXN0UmVuZGVyZWRDb2x1bW4oKXtjb25zdCBuPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1bW5SZW5kZXJlZDty''@;'; put 'put ''ZXR1cm4gbnVsbD09PW4/LTE6bn0sZ2V0TGFzdFZpc2libGVDb2x1bW4oKXtjb25zdCBuPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1bW5WaXNpYmxlO3JldHVybiBudWxsPT09bj8tMTpufSxnZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe2NvbnN0IG49dGhpcy5kYXRhQWNj''@;'; put 'put ''ZXNzT2JqZWN0LmVuZENvbHVtblBhcnRpYWxseVZpc2libGU7cmV0dXJuIG51bGw9PT1uPy0xOm59LGdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudENvbHVtbnNSZW5kZXJlZH0sZ2V0VmlzaWJsZUNvbHVtbnNDb3VudCgpe3JldHVy''@;'; put 'put ''biB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY291bnRDb2x1bW5zVmlzaWJsZX0sZ2V0Um93SGVhZGVyc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5yb3dIZWFkZXJzLmxlbmd0aH19O0s1KGVrZSwiTUlYSU5fTkFNRSIsImNhbGN1bGF0ZWRDb2x1bW5zIix7d3JpdGFibGU6''@;'; put 'put ''ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IHVsZT1la2U7Y2xhc3MgZGxlIGV4dGVuZHMgS017Y29uc3RydWN0b3IoZSx0LHIsaSl7c3VwZXIoZSx0LHIsaSwkdil9fVlsKGRsZSxKQWUpLFlsKGRsZSx1bGUpO2NvbnN0IEh4dD1kbGU7ZnVuY3Rpb24gSlcobixlLHQpe2lmKCFlLmhhcyhuKSl0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHR9ZnVuY3Rpb24gdGtlKG4sZSl7KGZ1bmN0aW9uIFZ4dChuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXpl''@;'; put 'put ''IHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLGUpLGUuYWRkKG4pfXZhciBobGU9bmV3IFdlYWtTZXQsZmxlPW5ldyBXZWFrU2V0O2Z1bmN0aW9uIG5rZShuKXtjb25zdHt3dFNldHRpbmdzOmUsaW5saW5lU3RhcnRPdmVybGF5OnQsd3RUYWJsZTpy''@;'; put 'put ''LHd0Vmlld3BvcnQ6aSx0b3RhbENvbHVtbnM6byxyb290V2luZG93OmF9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZih0Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09YSl7bGV0IHU9bnVsbDtpZihlLmdldFNldHRpbmcoInJ0bE1vZGUiKSl7Y29uc3QgRT1yLlRBQkxFLmdldEJvdW5k''@;'; put 'put ''aW5nQ2xpZW50UmVjdCgpO3U9TWF0aC5hYnMoRS5yaWdodC1hLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRXaWR0aCl9ZWxzZSB1PVgwKHIud3RSb290RWxlbWVudCkubGVmdDtjb25zdCBnPU1hdGguYWJzKE1zZShhLGEpKTtpZih1Pmcpe2NvbnN0IEU9VHNlKGEpO2xldCBPPWku''@;'; put 'put ''Z2V0Um93SGVhZGVyV2lkdGgoKTtmb3IobGV0IFo9MTtaPD1vO1orKylpZihPKz10LnN1bUNlbGxTaXplcyhaLTEsWiksdStPLWc+PUUpe249Wi0yO2JyZWFrfX19cmV0dXJuIG59ZnVuY3Rpb24gcmtlKG4pe2NvbnN0e3RvcE92ZXJsYXk6ZSx3dFRhYmxlOnQsd3RWaWV3cG9ydDpyLHRvdGFs''@;'; put 'put ''Um93czppLHJvb3RXaW5kb3c6b309dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKGUubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT1vKXtjb25zdCBhPVgwKHQud3RSb290RWxlbWVudCksbD1qVyhvLG8pO2lmKGEudG9wPmwpe2NvbnN0IHU9ZHcobyk7bGV0IGc9ci5nZXRDb2x1bW5IZWFk''@;'; put 'put ''ZXJIZWlnaHQoKTtmb3IobGV0IEU9MTtFPD1pO0UrKylpZihnKz1lLnN1bUNlbGxTaXplcyhFLTEsRSksYS50b3ArZy1sPj11KXtuPUUtMjticmVha319fXJldHVybiBufWNvbnN0IGp4dD1jbGFzcyBCeHR7c2Nyb2xsVmlld3BvcnQoZSx0LHIpe2lmKGUuY29sPDB8fGUucm93PDApcmV0dXJu''@;'; put 'put ''ITE7Y29uc3QgaT10aGlzLnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGUuY29sLHQpLG89dGhpcy5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkoZS5yb3cscik7cmV0dXJuIGl8fG99c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkoZSx0PSJhdXRvIil7Y29uc3R7ZHJhd246cix0b3RhbENv''@;'; put 'put ''bHVtbnM6aX09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKCFyKXJldHVybiExO2NvbnN0IG89VmYodCk7aWYoZT10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5IixlLG8pLCFOdW1iZXIuaXNJbnRl''@;'; put 'put ''Z2VyKGUpfHxlPDB8fGU+aSlyZXR1cm4hMTt0PW8udmFsdWU7Y29uc3R7Zml4ZWRDb2x1bW5zU3RhcnQ6YSxpbmxpbmVTdGFydE92ZXJsYXk6bH09dGhpcy5kYXRhQWNjZXNzT2JqZWN0LHU9ImF1dG8iPT09dDtpZih1JiZlPGEpcmV0dXJuITE7Y29uc3QgZz10aGlzLmdldEZpcnN0VmlzaWJs''@;'; put 'put ''ZUNvbHVtbigpLEU9dGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpO2xldCBPPSExO3JldHVybih1JiYoZTxnfHxlPkUpfHwhdSkmJihPPWwuc2Nyb2xsVG8oZSx1P2U+PXRoaXMuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKToiZW5kIj09PXQpKSxPfXNjcm9sbFZpZXdwb3J0VmVy''@;'; put 'put ''dGljYWxseShlLHQ9ImF1dG8iKXtjb25zdHtkcmF3bjpyLHRvdGFsUm93czppfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoIXIpcmV0dXJuITE7Y29uc3Qgbz1WZih0KTtpZihlPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQmVmb3JlVmlld3BvcnRT''@;'; put 'put ''Y3JvbGxWZXJ0aWNhbGx5IixlLG8pLCFOdW1iZXIuaXNJbnRlZ2VyKGUpfHxlPDB8fGU+aSlyZXR1cm4hMTt0PW8udmFsdWU7Y29uc3R7Zml4ZWRSb3dzQm90dG9tOmEsZml4ZWRSb3dzVG9wOmwsdG9wT3ZlcmxheTp1fT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsZz0iYXV0byI9PT10O2lmKGcm''@;'; put 'put ''JihlPGx8fGU+aS1hLTEpKXJldHVybiExO2NvbnN0IEU9dGhpcy5nZXRGaXJzdFZpc2libGVSb3coKSxPPXRoaXMuZ2V0TGFzdFZpc2libGVSb3coKTtsZXQgWj0hMTtyZXR1cm4oZyYmKGU8RXx8ZT5PKXx8IWcpJiYoWj11LnNjcm9sbFRvKGUsZz9lPj10aGlzLmdldExhc3RQYXJ0aWFsbHlW''@;'; put 'put ''aXNpYmxlUm93KCk6ImJvdHRvbSI9PT10KSksWn1nZXRGaXJzdFZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlUm93KCl9Z2V0TGFzdFZpc2libGVSb3coKXtyZXR1cm4gSlcodGhpcyxmbGUscmtlKS5jYWxsKHRoaXMsdGhp''@;'; put 'put ''cy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0TGFzdFZpc2libGVSb3coKSl9Z2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpfWdldExhc3RQYXJ0aWFsbHlWaXNp''@;'; put 'put ''YmxlUm93KCl7cmV0dXJuIEpXKHRoaXMsZmxlLHJrZSkuY2FsbCh0aGlzLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpfWdldEZpcnN0VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5n''@;'; put 'put ''ZXRGaXJzdFZpc2libGVDb2x1bW4oKX1nZXRMYXN0VmlzaWJsZUNvbHVtbigpe3JldHVybiBKVyh0aGlzLGhsZSxua2UpLmNhbGwodGhpcyx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRMYXN0VmlzaWJsZUNvbHVtbigpKX1nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4o''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl9Z2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gSlcodGhpcyxobGUsbmtlKS5jYWxsKHRoaXMsdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFi''@;'; put 'put ''bGUuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSl9Y29uc3RydWN0b3IoZSl7dGtlKHRoaXMsaGxlKSx0a2UodGhpcyxmbGUpLHRoaXMuZGF0YUFjY2Vzc09iamVjdD1lfX07ZnVuY3Rpb24gaWtlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1w''@;'; put 'put ''dGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIFhNKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIHp4dChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4saWtlKG4sZSwiZ2V0IikpfWZ1bmN0aW9u''@;'; put 'put ''IHBsZShuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIFd4dChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4saWtl''@;'; put 'put ''KG4sZSwic2V0IiksdCksdH12YXIgbjY9bmV3IFdlYWtNYXA7Y2xhc3MgZVl7aXNWYWxpZChlKXtjb25zdHtjb3VudFJvd3M6dCxjb3VudENvbHM6cixjb3VudFJvd0hlYWRlcnM6aSxjb3VudENvbEhlYWRlcnM6b309e2NvdW50Um93czowLGNvdW50Q29sczowLGNvdW50Um93SGVhZGVyczow''@;'; put 'put ''LGNvdW50Q29sSGVhZGVyczowLC4uLmV9O2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHRoaXMucm93KXx8IU51bWJlci5pc0ludGVnZXIodGhpcy5jb2wpKXJldHVybiExO2NvbnN0IGE9dGhpcy5yb3csbD10aGlzLmNvbDtyZXR1cm4hKGE8LW98fGw8LWl8fGE+PXR8fGw+PXIpfWlzU2V0KCl7cmV0''@;'; put 'put ''dXJuIG51bGwhPT10aGlzLnJvdyYmbnVsbCE9PXRoaXMuY29sfWlzRXF1YWwoZSl7cmV0dXJuIGU9PT10aGlzfHx0aGlzLnJvdz09PWUucm93JiZ0aGlzLmNvbD09PWUuY29sfWlzSGVhZGVyKCl7cmV0dXJuIXRoaXMuaXNDZWxsKCl9aXNDZWxsKCl7cmV0dXJuIG51bGwhPT10aGlzLnJvdyYm''@;'; put 'put ''bnVsbCE9PXRoaXMuY29sJiZ0aGlzLnJvdz49MCYmdGhpcy5jb2w+PTB9aXNSdGwoKXtyZXR1cm4gWE0odGhpcyxuNil9aXNTb3V0aEVhc3RPZihlKXtpZihudWxsPT09dGhpcy5yb3d8fG51bGw9PT10aGlzLmNvbHx8bnVsbD09PWUucm93fHxudWxsPT09ZS5jb2wpcmV0dXJuITE7Y29uc3Qg''@;'; put 'put ''cj10aGlzLmNvbCxvPWUuY29sO3JldHVybiB0aGlzLnJvdz49ZS5yb3cmJihYTSh0aGlzLG42KT9yPD1vOnI+PW8pfWlzTm9ydGhXZXN0T2YoZSl7aWYobnVsbD09PXRoaXMucm93fHxudWxsPT09dGhpcy5jb2x8fG51bGw9PT1lLnJvd3x8bnVsbD09PWUuY29sKXJldHVybiExO2NvbnN0IHI9''@;'; put 'put ''dGhpcy5jb2wsbz1lLmNvbDtyZXR1cm4gdGhpcy5yb3c8PWUucm93JiYoWE0odGhpcyxuNik/cj49bzpyPD1vKX1pc1NvdXRoV2VzdE9mKGUpe2lmKG51bGw9PT10aGlzLnJvd3x8bnVsbD09PXRoaXMuY29sfHxudWxsPT09ZS5yb3d8fG51bGw9PT1lLmNvbClyZXR1cm4hMTtjb25zdCByPXRo''@;'; put 'put ''aXMuY29sLG89ZS5jb2w7cmV0dXJuIHRoaXMucm93Pj1lLnJvdyYmKFhNKHRoaXMsbjYpP3I+PW86cjw9byl9aXNOb3J0aEVhc3RPZihlKXtpZihudWxsPT09dGhpcy5yb3d8fG51bGw9PT10aGlzLmNvbHx8bnVsbD09PWUucm93fHxudWxsPT09ZS5jb2wpcmV0dXJuITE7Y29uc3Qgcj10aGlz''@;'; put 'put ''LmNvbCxvPWUuY29sO3JldHVybiB0aGlzLnJvdzw9ZS5yb3cmJihYTSh0aGlzLG42KT9yPD1vOnI+PW8pfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLnJvdz1udWxsPT09dGhpcy5yb3c/dGhpcy5yb3c6TWF0aC5tYXgodGhpcy5yb3csMCksdGhpcy5jb2w9bnVsbD09PXRoaXMuY29sP3RoaXMu''@;'; put 'put ''Y29sOk1hdGgubWF4KHRoaXMuY29sLDApLHRoaXN9YXNzaWduKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGU/LnJvdykmJih0aGlzLnJvdz1lLnJvdyksTnVtYmVyLmlzSW50ZWdlcihlPy5jb2wpJiYodGhpcy5jb2w9ZS5jb2wpLGUgaW5zdGFuY2VvZiBlWSYmcGxlKHRoaXMsbjYsZS5p''@;'; put 'put ''c1J0bCgpKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyBlWSh0aGlzLnJvdz8/dm9pZCAwLHRoaXMuY29sPz92b2lkIDAsWE0odGhpcyxuNikpfXRvT2JqZWN0KCl7cmV0dXJue3Jvdzp0aGlzLnJvdyxjb2w6dGhpcy5jb2x9fWNvbnN0cnVjdG9yKGUsdCxyPSExKXsoZnVuY3Rpb24gWXh0KG4s''@;'; put 'put ''ZSx0KXsoZnVuY3Rpb24gVXh0KG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sZSksZS5zZXQobix0KX0pKHRoaXMsbjYse3dyaXRhYmxlOiEwLHZh''@;'; put 'put ''bHVlOnZvaWQgMH0pLHRoaXMucm93PW51bGwsdGhpcy5jb2w9bnVsbCxwbGUodGhpcyxuNiwhMSkscGxlKHRoaXMsbjYsciksdHlwZW9mIGU8InUiJiYodGhpcy5yb3c9ZSksdHlwZW9mIHQ8InUiJiYodGhpcy5jb2w9dCl9fWNvbnN0IHRZPWVZO2Z1bmN0aW9uIG9rZShuLGUpe2lmKGUuaGFz''@;'; put 'put ''KG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gYWtlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHBy''@;'; put 'put ''aXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIFlwKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIFp4dChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sYWtlKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIHNrZShuLGUsdCl7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uIEd4dChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4sYWtlKG4sZSwic2V0IiksdCks''@;'; put 'put ''dH1mdW5jdGlvbiBacihuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH12YXIgWjI9bmV3IFdlYWtNYXAsenI9bmV3IFdlYWtTZXQ7Y2xhc3MgZ2xle3NldEhpZ2hs''@;'; put 'put ''aWdodChlKXtyZXR1cm4gdGhpcy5oaWdobGlnaHQ9ZS5jbG9uZSgpLHRoaXN9c2V0RnJvbShlKXtyZXR1cm4gdGhpcy5mcm9tPWUuY2xvbmUoKSx0aGlzfXNldFRvKGUpe3JldHVybiB0aGlzLnRvPWUuY2xvbmUoKSx0aGlzfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmhpZ2hsaWdodC5ub3Jt''@;'; put 'put ''YWxpemUoKSx0aGlzLmZyb20ubm9ybWFsaXplKCksdGhpcy50by5ub3JtYWxpemUoKSx0aGlzfWlzVmFsaWQoZSl7cmV0dXJuIHRoaXMuZnJvbS5pc1ZhbGlkKGUpJiZ0aGlzLnRvLmlzVmFsaWQoZSl9aXNTaW5nbGUoKXtyZXR1cm4gdGhpcy5pc1NpbmdsZUNlbGwoKXx8dGhpcy5pc1Npbmds''@;'; put 'put ''ZUhlYWRlcigpfWlzU2luZ2xlQ2VsbCgpe3JldHVybiBudWxsIT09dGhpcy5mcm9tLnJvdyYmbnVsbCE9PXRoaXMuZnJvbS5jb2wmJm51bGwhPT10aGlzLnRvLnJvdyYmbnVsbCE9PXRoaXMudG8uY29sJiZacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5mcm9tLnJvdyk+PTAmJnRoaXMu''@;'; put 'put ''ZnJvbS5yb3c9PT10aGlzLnRvLnJvdyYmWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMuZnJvbS5jb2wpPj0wJiZ0aGlzLmZyb20uY29sPT09dGhpcy50by5jb2x9aXNTaW5nbGVIZWFkZXIoKXtyZXR1cm4gbnVsbCE9PXRoaXMuZnJvbS5yb3cmJm51bGwhPT10aGlzLmZyb20uY29sJiZu''@;'; put 'put ''dWxsIT09dGhpcy50by5yb3cmJm51bGwhPT10aGlzLnRvLmNvbCYmKFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyx0aGlzLmZyb20ucm93KTwwfHxacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5mcm9tLmNvbCk8MCkmJnRoaXMuZnJvbS5yb3c9PT10aGlzLnRvLnJvdyYmdGhpcy5mcm9t''@;'; put 'put ''LmNvbD09PXRoaXMudG8uY29sfWlzSGVhZGVyKCl7cmV0dXJuISghdGhpcy5mcm9tLmlzSGVhZGVyKCl8fCF0aGlzLnRvLmlzSGVhZGVyKCkpfHxacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5mcm9tLmNvbCk8MCYmWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMudG8uY29sKTww''@;'; put 'put ''fHxacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5mcm9tLnJvdyk8MCYmWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMudG8ucm93KTwwfWNvbnRhaW5zSGVhZGVycygpe3JldHVybiB0aGlzLmZyb20uaXNIZWFkZXIoKXx8dGhpcy50by5pc0hlYWRlcigpfWdldE91dGVySGVpZ2h0''@;'; put 'put ''KCl7cmV0dXJuIE1hdGgubWF4KFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyx0aGlzLmZyb20ucm93KSxacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy50by5yb3cpKS1NYXRoLm1pbihacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5mcm9tLnJvdyksWnIodGhpcyx6cixHcikuY2Fs''@;'; put 'put ''bCh0aGlzLHRoaXMudG8ucm93KSkrMX1nZXRPdXRlcldpZHRoKCl7cmV0dXJuIE1hdGgubWF4KFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyx0aGlzLmZyb20uY29sKSxacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy50by5jb2wpKS1NYXRoLm1pbihacih0aGlzLHpyLEdyKS5jYWxsKHRo''@;'; put 'put ''aXMsdGhpcy5mcm9tLmNvbCksWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMudG8uY29sKSkrMX1nZXRIZWlnaHQoKXtpZihacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5mcm9tLnJvdyk8MCYmWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMudG8ucm93KTwwKXJldHVybiAw''@;'; put 'put ''O2NvbnN0IGU9TWF0aC5tYXgoWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMuZnJvbS5yb3cpLDApLHQ9TWF0aC5tYXgoWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMudG8ucm93KSwwKTtyZXR1cm4gTWF0aC5tYXgoZSx0KS1NYXRoLm1pbihlLHQpKzF9Z2V0V2lkdGgoKXtpZiha''@;'; put 'put ''cih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5mcm9tLmNvbCk8MCYmWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMudG8uY29sKTwwKXJldHVybiAwO2NvbnN0IGU9TWF0aC5tYXgoWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMuZnJvbS5jb2wpLDApLHQ9TWF0aC5tYXgoWnIo''@;'; put 'put ''dGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMudG8uY29sKSwwKTtyZXR1cm4gTWF0aC5tYXgoZSx0KS1NYXRoLm1pbihlLHQpKzF9Z2V0Q2VsbHNDb3VudCgpe3JldHVybiB0aGlzLmdldFdpZHRoKCkqdGhpcy5nZXRIZWlnaHQoKX1pbmNsdWRlcyhlKXtpZihudWxsPT09dGhpcy5mcm9tLnJv''@;'; put 'put ''d3x8bnVsbD09PXRoaXMuZnJvbS5jb2x8fG51bGw9PT10aGlzLnRvLnJvd3x8bnVsbD09PXRoaXMudG8uY29sfHxudWxsPT09ZS5yb3d8fG51bGw9PT1lLmNvbClyZXR1cm4hMTtjb25zdCB0PVpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxlLnJvdykscj1acih0aGlzLHpyLEdyKS5jYWxsKHRo''@;'; put 'put ''aXMsZS5jb2wpLGk9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksbz10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7cmV0dXJuIFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxpLnJvdyk8PXQmJlpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxvLnJvdyk+PXQmJlpyKHRoaXMsenIs''@;'; put 'put ''R3IpLmNhbGwodGhpcyxpLmNvbCk8PXImJlpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxvLmNvbCk+PXJ9aW5jbHVkZXNSYW5nZShlKXtyZXR1cm4gdGhpcy5pbmNsdWRlcyhlLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSkmJnRoaXMuaW5jbHVkZXMoZS5nZXRPdXRlckJvdHRvbUVuZENvcm5l''@;'; put 'put ''cigpKX1pc0VxdWFsKGUpe2lmKG51bGw9PT10aGlzLmZyb20ucm93fHxudWxsPT09dGhpcy5mcm9tLmNvbHx8bnVsbD09PXRoaXMudG8ucm93fHxudWxsPT09dGhpcy50by5jb2x8fG51bGw9PT1lLmZyb20ucm93fHxudWxsPT09ZS5mcm9tLmNvbHx8bnVsbD09PWUudG8ucm93fHxudWxsPT09''@;'; put 'put ''ZS50by5jb2wpcmV0dXJuITE7Y29uc3QgdD1NYXRoLm1pbihacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5mcm9tLnJvdyksWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMudG8ucm93KSkscj1NYXRoLm1heChacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5mcm9tLnJvdyks''@;'; put 'put ''WnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMudG8ucm93KSksaT1NYXRoLm1pbihacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5mcm9tLmNvbCksWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMudG8uY29sKSksbz1NYXRoLm1heChacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMs''@;'; put 'put ''dGhpcy5mcm9tLmNvbCksWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMudG8uY29sKSksYT1NYXRoLm1pbihacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsZS5mcm9tLnJvdyksWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLGUudG8ucm93KSksbD1NYXRoLm1heChacih0aGlzLHpyLEdyKS5j''@;'; put 'put ''YWxsKHRoaXMsZS5mcm9tLnJvdyksWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLGUudG8ucm93KSksdT1NYXRoLm1pbihacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsZS5mcm9tLmNvbCksWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLGUudG8uY29sKSksZz1NYXRoLm1heChacih0aGlzLHpyLEdy''@;'; put 'put ''KS5jYWxsKHRoaXMsZS5mcm9tLmNvbCksWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLGUudG8uY29sKSk7cmV0dXJuIHQ9PT1hJiZyPT09bCYmaT09PXUmJm89PT1nfW92ZXJsYXBzKGUpe3JldHVybiBlLmlzU291dGhFYXN0T2YodGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKSkmJmUuaXNO''@;'; put 'put ''b3J0aFdlc3RPZih0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKSl9aXNTb3V0aEVhc3RPZihlKXtyZXR1cm4gdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5pc1NvdXRoRWFzdE9mKGUpfHx0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5pc1NvdXRoRWFzdE9mKGUp''@;'; put 'put ''fWlzTm9ydGhXZXN0T2YoZSl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuaXNOb3J0aFdlc3RPZihlKXx8dGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkuaXNOb3J0aFdlc3RPZihlKX1pc092ZXJsYXBwaW5nSG9yaXpvbnRhbGx5KGUpe3JldHVybiBacih0aGlz''@;'; put 'put ''LHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLmNvbCk+PVpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxlLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2wpJiZacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLmNv''@;'; put 'put ''bCk8PVpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxlLmdldE91dGVyVG9wRW5kQ29ybmVyKCkuY29sKXx8WnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmNvbCk8PVpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxlLmdldE91dGVyVG9wRW5kQ29y''@;'; put 'put ''bmVyKCkuY29sKSYmWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmNvbCk+PVpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxlLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2wpfWlzT3ZlcmxhcHBpbmdWZXJ0aWNhbGx5KGUpe3JldHVybiBa''@;'; put 'put ''cih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkucm93KT49WnIodGhpcyx6cixHcikuY2FsbCh0aGlzLGUuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLnJvdykmJlpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyx0aGlzLmdldE91dGVyQm90dG9t''@;'; put 'put ''U3RhcnRDb3JuZXIoKS5yb3cpPD1acih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsZS5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkucm93KXx8WnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5yb3cpPD1acih0aGlzLHpyLEdyKS5jYWxsKHRoaXMs''@;'; put 'put ''ZS5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkucm93KSYmWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5yb3cpPj1acih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsZS5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkucm93KX1leHBhbmQoZSx0PSEw''@;'; put 'put ''KXtjb25zdCByPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGk9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO2lmKFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxlLnJvdyk8WnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHIucm93KXx8WnIodGhpcyx6cixHcikuY2FsbCh0aGlz''@;'; put 'put ''LGUuY29sKTxacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsci5jb2wpfHxacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsZS5yb3cpPlpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxpLnJvdyl8fFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxlLmNvbCk+WnIodGhpcyx6cixHcikuY2FsbCh0aGlzLGku''@;'; put 'put ''Y29sKSl7Y29uc3Qgbz10aGlzLmdldFZlcnRpY2FsRGlyZWN0aW9uKCksYT10aGlzLmdldEhvcml6b250YWxEaXJlY3Rpb24oKTtyZXR1cm4gdGhpcy5mcm9tPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4oWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHIucm93KSxacih0aGlzLHpy''@;'; put 'put ''LEdyKS5jYWxsKHRoaXMsZS5yb3cpKSxNYXRoLm1pbihacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsci5jb2wpLFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxlLmNvbCkpKSx0aGlzLnRvPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgoWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLGku''@;'; put 'put ''cm93KSxacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsZS5yb3cpKSxNYXRoLm1heChacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsaS5jb2wpLFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxlLmNvbCkpKSx0JiYoKFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxlLnJvdyk8WnIodGhpcyx6cixHciku''@;'; put 'put ''Y2FsbCh0aGlzLHIucm93KSYmIk4tUyI9PT1vfHxacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsZS5yb3cpPlpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxpLnJvdykmJiJTLU4iPT09bykmJnRoaXMuZmxpcERpcmVjdGlvblZlcnRpY2FsbHkoKSwoWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLGUu''@;'; put 'put ''Y29sKTxacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsci5jb2wpJiYiVy1FIj09PWF8fFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxlLmNvbCk+WnIodGhpcyx6cixHcikuY2FsbCh0aGlzLGkuY29sKSYmIkUtVyI9PT1hKSYmdGhpcy5mbGlwRGlyZWN0aW9uSG9yaXpvbnRhbGx5KCkpLCEwfXJl''@;'; put 'put ''dHVybiExfWV4cGFuZEJ5UmFuZ2UoZSx0PSEwKXtpZih0aGlzLmluY2x1ZGVzUmFuZ2UoZSl8fCF0aGlzLm92ZXJsYXBzKGUpKXJldHVybiExO2NvbnN0IHI9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksaT10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCksbz10aGlzLmdldERp''@;'; put 'put ''cmVjdGlvbigpLGE9ZS5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksbD1lLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCksdT1NYXRoLm1pbihacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsci5yb3cpLFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxhLnJvdykpLGc9TWF0aC5taW4oWnIodGhpcyx6''@;'; put 'put ''cixHcikuY2FsbCh0aGlzLHIuY29sKSxacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsYS5jb2wpKSxFPU1hdGgubWF4KFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxpLnJvdyksWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLGwucm93KSksTz1NYXRoLm1heChacih0aGlzLHpyLEdyKS5jYWxsKHRo''@;'; put 'put ''aXMsaS5jb2wpLFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxsLmNvbCkpLFo9dGhpcy5fY3JlYXRlQ2VsbENvb3Jkcyh1LGcpLGVlPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoRSxPKTtyZXR1cm4gdGhpcy5mcm9tPVosdGhpcy50bz1lZSx0aGlzLnNldERpcmVjdGlvbihvKSx0JiYodGhpcy5o''@;'; put 'put ''aWdobGlnaHQucm93PT09dGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkucm93JiYiTi1TIj09PXRoaXMuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmdGhpcy5mbGlwRGlyZWN0aW9uVmVydGljYWxseSgpLHRoaXMuaGlnaGxpZ2h0LmNvbD09PXRoaXMuZ2V0T3V0ZXJUb3BSaWdodENv''@;'; put 'put ''cm5lcigpLmNvbCYmIlctRSI9PT10aGlzLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmdGhpcy5mbGlwRGlyZWN0aW9uSG9yaXpvbnRhbGx5KCkpLCEwfWdldERpcmVjdGlvbigpe3JldHVybiB0aGlzLmZyb20uaXNOb3J0aFdlc3RPZih0aGlzLnRvKT8iTlctU0UiOnRoaXMuZnJvbS5pc05v''@;'; put 'put ''cnRoRWFzdE9mKHRoaXMudG8pPyJORS1TVyI6dGhpcy5mcm9tLmlzU291dGhFYXN0T2YodGhpcy50byk/IlNFLU5XIjp0aGlzLmZyb20uaXNTb3V0aFdlc3RPZih0aGlzLnRvKT8iU1ctTkUiOiJOVy1TRSJ9c2V0RGlyZWN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIk5XLVNFIjpbdGhpcy5mcm9t''@;'; put 'put ''LHRoaXMudG9dPVt0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpXTticmVhaztjYXNlIk5FLVNXIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKSx0aGlzLmdldE91dGVyQm90dG9tTGVm''@;'; put 'put ''dENvcm5lcigpXTticmVhaztjYXNlIlNFLU5XIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKSx0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpXTticmVhaztjYXNlIlNXLU5FIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVy''@;'; put 'put ''Qm90dG9tTGVmdENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpXX19Z2V0VmVydGljYWxEaXJlY3Rpb24oKXtyZXR1cm5bIk5FLVNXIiwiTlctU0UiXS5pbmRleE9mKHRoaXMuZ2V0RGlyZWN0aW9uKCkpPi0xPyJOLVMiOiJTLU4ifWdldEhvcml6b250YWxEaXJlY3Rpb24o''@;'; put 'put ''KXtyZXR1cm5bIk5XLVNFIiwiU1ctTkUiXS5pbmRleE9mKHRoaXMuZ2V0RGlyZWN0aW9uKCkpPi0xPyJXLUUiOiJFLVcifWdldElubGluZURpcmVjdGlvbigpe3JldHVybiB0aGlzLmdldEhvcml6b250YWxEaXJlY3Rpb24oKT09PShZcCh0aGlzLFoyKT8iRS1XIjoiVy1FIik/InN0YXJ0LWVu''@;'; put 'put ''ZCI6ImVuZC1zdGFydCJ9ZmxpcERpcmVjdGlvblZlcnRpY2FsbHkoKXtzd2l0Y2godGhpcy5nZXREaXJlY3Rpb24oKSl7Y2FzZSJOVy1TRSI6dGhpcy5zZXREaXJlY3Rpb24oIlNXLU5FIik7YnJlYWs7Y2FzZSJORS1TVyI6dGhpcy5zZXREaXJlY3Rpb24oIlNFLU5XIik7YnJlYWs7Y2FzZSJT''@;'; put 'put ''RS1OVyI6dGhpcy5zZXREaXJlY3Rpb24oIk5FLVNXIik7YnJlYWs7Y2FzZSJTVy1ORSI6dGhpcy5zZXREaXJlY3Rpb24oIk5XLVNFIil9fWZsaXBEaXJlY3Rpb25Ib3Jpem9udGFsbHkoKXtzd2l0Y2godGhpcy5nZXREaXJlY3Rpb24oKSl7Y2FzZSJOVy1TRSI6dGhpcy5zZXREaXJlY3Rpb24o''@;'; put 'put ''Ik5FLVNXIik7YnJlYWs7Y2FzZSJORS1TVyI6dGhpcy5zZXREaXJlY3Rpb24oIk5XLVNFIik7YnJlYWs7Y2FzZSJTRS1OVyI6dGhpcy5zZXREaXJlY3Rpb24oIlNXLU5FIik7YnJlYWs7Y2FzZSJTVy1ORSI6dGhpcy5zZXREaXJlY3Rpb24oIlNFLU5XIil9fWdldFRvcFN0YXJ0Q29ybmVyKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4oWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMuZnJvbS5yb3cpLFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyx0aGlzLnRvLnJvdykpLE1hdGgubWluKFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyx0aGlzLmZyb20uY29s''@;'; put 'put ''KSxacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy50by5jb2wpKSkubm9ybWFsaXplKCl9Z2V0VG9wTGVmdENvcm5lcigpe3JldHVybiBZcCh0aGlzLFoyKT90aGlzLmdldFRvcEVuZENvcm5lcigpOnRoaXMuZ2V0VG9wU3RhcnRDb3JuZXIoKX1nZXRCb3R0b21FbmRDb3JuZXIoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heChacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5mcm9tLnJvdyksWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMudG8ucm93KSksTWF0aC5tYXgoWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMuZnJvbS5jb2wpLFpy''@;'; put 'put ''KHRoaXMsenIsR3IpLmNhbGwodGhpcyx0aGlzLnRvLmNvbCkpKS5ub3JtYWxpemUoKX1nZXRCb3R0b21SaWdodENvcm5lcigpe3JldHVybiBZcCh0aGlzLFoyKT90aGlzLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRCb3R0b21FbmRDb3JuZXIoKX1nZXRUb3BFbmRDb3JuZXIoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbihacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5mcm9tLnJvdyksWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMudG8ucm93KSksTWF0aC5tYXgoWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMuZnJvbS5jb2wp''@;'; put 'put ''LFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyx0aGlzLnRvLmNvbCkpKS5ub3JtYWxpemUoKX1nZXRUb3BSaWdodENvcm5lcigpe3JldHVybiBZcCh0aGlzLFoyKT90aGlzLmdldFRvcFN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRUb3BFbmRDb3JuZXIoKX1nZXRCb3R0b21TdGFydENvcm5lcigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyx0aGlzLmZyb20ucm93KSxacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy50by5yb3cpKSxNYXRoLm1pbihacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5mcm9tLmNvbCks''@;'; put 'put ''WnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMudG8uY29sKSkpLm5vcm1hbGl6ZSgpfWdldEJvdHRvbUxlZnRDb3JuZXIoKXtyZXR1cm4gWXAodGhpcyxaMik/dGhpcy5nZXRCb3R0b21FbmRDb3JuZXIoKTp0aGlzLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCl9Z2V0T3V0ZXJUb3BTdGFydENv''@;'; put 'put ''cm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyx0aGlzLmZyb20ucm93KSxacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy50by5yb3cpKSxNYXRoLm1pbihacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5m''@;'; put 'put ''cm9tLmNvbCksWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMudG8uY29sKSkpfWdldE91dGVyVG9wTGVmdENvcm5lcigpe3JldHVybiBZcCh0aGlzLFoyKT90aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCk6dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCl9Z2V0T3V0ZXJCb3R0b21F''@;'; put 'put ''bmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heChacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5mcm9tLnJvdyksWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMudG8ucm93KSksTWF0aC5tYXgoWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRo''@;'; put 'put ''aXMuZnJvbS5jb2wpLFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyx0aGlzLnRvLmNvbCkpKX1nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCl7cmV0dXJuIFlwKHRoaXMsWjIpP3RoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKX1n''@;'; put 'put ''ZXRPdXRlclRvcEVuZENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyx0aGlzLmZyb20ucm93KSxacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy50by5yb3cpKSxNYXRoLm1heChacih0aGlzLHpyLEdyKS5j''@;'; put 'put ''YWxsKHRoaXMsdGhpcy5mcm9tLmNvbCksWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMudG8uY29sKSkpfWdldE91dGVyVG9wUmlnaHRDb3JuZXIoKXtyZXR1cm4gWXAodGhpcyxaMik/dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigp''@;'; put 'put ''fWdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heChacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5mcm9tLnJvdyksWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMudG8ucm93KSksTWF0aC5taW4oWnIodGhpcyx6''@;'; put 'put ''cixHcikuY2FsbCh0aGlzLHRoaXMuZnJvbS5jb2wpLFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyx0aGlzLnRvLmNvbCkpKX1nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKXtyZXR1cm4gWXAodGhpcyxaMik/dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJCb3R0''@;'; put 'put ''b21TdGFydENvcm5lcigpfWlzQ29ybmVyKGUpe3JldHVybiBlLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKSl8fGUuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKSl8fGUuaXNFcXVhbCh0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpKXx8ZS5p''@;'; put 'put ''c0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpKX1nZXRPcHBvc2l0ZUNvcm5lcihlKXtpZihlIGluc3RhbmNlb2YgdFkpe2lmKGUuaXNFcXVhbCh0aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCkpKXJldHVybiB0aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTtp''@;'; put 'put ''ZihlLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkpKXJldHVybiB0aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7aWYoZS5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKSkpcmV0dXJuIHRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpO2lm''@;'; put 'put ''KGUuaXNFcXVhbCh0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKSkpcmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKX19Z2V0Qm9yZGVyc1NoYXJlZFdpdGgoZSl7aWYoIXRoaXMuaW5jbHVkZXNSYW5nZShlKSlyZXR1cm5bXTtjb25zdCB0X3RvcD1NYXRoLm1pbihacih0''@;'; put 'put ''aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5mcm9tLnJvdyksWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMudG8ucm93KSksdF9ib3R0b209TWF0aC5tYXgoWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMuZnJvbS5yb3cpLFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyx0aGlzLnRv''@;'; put 'put ''LnJvdykpLHRfbGVmdD1NYXRoLm1pbihacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5mcm9tLmNvbCksWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHRoaXMudG8uY29sKSksdF9yaWdodD1NYXRoLm1heChacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdGhpcy5mcm9tLmNvbCksWnIodGhp''@;'; put 'put ''cyx6cixHcikuY2FsbCh0aGlzLHRoaXMudG8uY29sKSkscl90b3A9TWF0aC5taW4oWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLGUuZnJvbS5yb3cpLFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxlLnRvLnJvdykpLHJfYm90dG9tPU1hdGgubWF4KFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxl''@;'; put 'put ''LmZyb20ucm93KSxacih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsZS50by5yb3cpKSxyX2xlZnQ9TWF0aC5taW4oWnIodGhpcyx6cixHcikuY2FsbCh0aGlzLGUuZnJvbS5jb2wpLFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxlLnRvLmNvbCkpLHJfcmlnaHQ9TWF0aC5tYXgoWnIodGhpcyx6cixH''@;'; put 'put ''cikuY2FsbCh0aGlzLGUuZnJvbS5jb2wpLFpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxlLnRvLmNvbCkpLGk9W107cmV0dXJuIHRfdG9wPT09cl90b3AmJmkucHVzaCgidG9wIiksdF9yaWdodD09PXJfcmlnaHQmJmkucHVzaChZcCh0aGlzLFoyKT8ibGVmdCI6InJpZ2h0IiksdF9ib3R0b209''@;'; put 'put ''PT1yX2JvdHRvbSYmaS5wdXNoKCJib3R0b20iKSx0X2xlZnQ9PT1yX2xlZnQmJmkucHVzaChZcCh0aGlzLFoyKT8icmlnaHQiOiJsZWZ0IiksaX1nZXRJbm5lcigpe2NvbnN0IGU9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksdD10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCks''@;'; put 'put ''cj1bXTtpZihudWxsPT09ZS5yb3d8fG51bGw9PT1lLmNvbHx8bnVsbD09PXQucm93fHxudWxsPT09dC5jb2wpcmV0dXJuIHI7Y29uc3QgaT1acih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsZS5yb3cpLG89WnIodGhpcyx6cixHcikuY2FsbCh0aGlzLGUuY29sKSxhPVpyKHRoaXMsenIsR3IpLmNh''@;'; put 'put ''bGwodGhpcyx0LnJvdyksbD1acih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdC5jb2wpO2ZvcihsZXQgdT1pO3U8PWE7dSsrKWZvcihsZXQgZz1vO2c8PWw7ZysrKSh0aGlzLmZyb20ucm93IT09dXx8dGhpcy5mcm9tLmNvbCE9PWcpJiYodGhpcy50by5yb3chPT11fHx0aGlzLnRvLmNvbCE9PWcp''@;'; put 'put ''JiZyLnB1c2godGhpcy5fY3JlYXRlQ2VsbENvb3Jkcyh1LGcpKTtyZXR1cm4gcn1nZXRBbGwoKXtjb25zdCBlPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLHQ9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLHI9W107aWYobnVsbD09PWUucm93fHxudWxsPT09ZS5jb2x8fG51''@;'; put 'put ''bGw9PT10LnJvd3x8bnVsbD09PXQuY29sKXJldHVybiByO2NvbnN0IGk9WnIodGhpcyx6cixHcikuY2FsbCh0aGlzLGUucm93KSxvPVpyKHRoaXMsenIsR3IpLmNhbGwodGhpcyxlLmNvbCksYT1acih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsdC5yb3cpLGw9WnIodGhpcyx6cixHcikuY2FsbCh0''@;'; put 'put ''aGlzLHQuY29sKTtmb3IobGV0IHU9aTt1PD1hO3UrKylmb3IobGV0IGc9bztnPD1sO2crKylyLnB1c2goaT09PXUmJm89PT1nP2U6YT09PXUmJmw9PT1nP3Q6dGhpcy5fY3JlYXRlQ2VsbENvb3Jkcyh1LGcpKTtyZXR1cm4gcn1mb3JBbGwoZSl7Y29uc3QgdD10aGlzLmdldE91dGVyVG9wU3Rh''@;'; put 'put ''cnRDb3JuZXIoKSxyPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtpZihudWxsPT09dC5yb3d8fG51bGw9PT10LmNvbHx8bnVsbD09PXIucm93fHxudWxsPT09ci5jb2wpcmV0dXJuO2NvbnN0IGk9WnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHQucm93KSxvPVpyKHRoaXMsenIsR3Ip''@;'; put 'put ''LmNhbGwodGhpcyx0LmNvbCksYT1acih0aGlzLHpyLEdyKS5jYWxsKHRoaXMsci5yb3cpLGw9WnIodGhpcyx6cixHcikuY2FsbCh0aGlzLHIuY29sKTtmb3IobGV0IHU9aTt1PD1hO3UrKylmb3IobGV0IGc9bztnPD1sO2crKylpZighMT09PWUodSxnKSlyZXR1cm59Y2xvbmUoKXtyZXR1cm4g''@;'; put 'put ''bmV3IGdsZSh0aGlzLmhpZ2hsaWdodCx0aGlzLmZyb20sdGhpcy50byxZcCh0aGlzLFoyKSl9dG9PYmplY3QoKXtyZXR1cm57ZnJvbTp0aGlzLmZyb20udG9PYmplY3QoKSx0bzp0aGlzLnRvLnRvT2JqZWN0KCl9fV9jcmVhdGVDZWxsQ29vcmRzKGUsdCl7cmV0dXJuIG5ldyB0WShlPz92b2lk''@;'; put 'put ''IDAsdD8/dm9pZCAwLFlwKHRoaXMsWjIpKX1jb25zdHJ1Y3RvcihlLHQ9ZSxyPWUsaT0hMSl7KGZ1bmN0aW9uIHF4dChuLGUpe29rZShuLGUpLGUuYWRkKG4pfSkodGhpcyx6ciksZnVuY3Rpb24gJHh0KG4sZSx0KXtva2UobixlKSxlLnNldChuLHQpfSh0aGlzLFoyLHt3cml0YWJsZTohMCx2''@;'; put 'put ''YWx1ZTp2b2lkIDB9KSxza2UodGhpcyxaMiwhMSksdGhpcy5oaWdobGlnaHQ9ZS5jbG9uZSgpLHRoaXMuZnJvbT10LmNsb25lKCksdGhpcy50bz1yLmNsb25lKCksc2tlKHRoaXMsWjIsaSl9fWZ1bmN0aW9uIEdyKG4pe3JldHVybiBuPz8wfWNvbnN0IG5ZPWdsZTtjbGFzcyBtbGV7Z2V0IGV2''@;'; put 'put ''ZW50TWFuYWdlcigpe3JldHVybiBuZXcgVzIodGhpcyl9Z2V0IHJvb3REb2N1bWVudCgpe3JldHVybiB0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudH1nZXQgcm9vdFdpbmRvdygpe3JldHVybiB0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3d9Z2V0U2V0dGluZyhlLC4uLnQpe3JldHVy''@;'; put 'put ''biB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZyhlLC4uLnQpfXVwZGF0ZShlLHQpe3RoaXMud3RTZXR0aW5ncy51cGRhdGUoZSx0KX1maW5kT3JpZ2luYWxIZWFkZXJzKCl7Y29uc3QgZT1bXTtpZih0aGlzLnd0VGFibGUuVEhFQUQmJnRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzLmxl''@;'; put 'put ''bmd0aCYmdGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGgpe2ZvcihsZXQgdD0wLHI9dGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGg7dDxyO3QrKyllLnB1c2godGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9k''@;'; put 'put ''ZXNbMF0uY2hpbGROb2Rlc1t0XS5pbm5lckhUTUwpO3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RofHx0aGlzLnd0U2V0dGluZ3MudXBkYXRlKCJjb2x1bW5IZWFkZXJzIixbZnVuY3Rpb24odCxyKXt5NyhyLGVbdF0pfV0pfX1jcmVhdGVDZWxsQ29v''@;'; put 'put ''cmRzKGUsdCl7cmV0dXJuIG5ldyB0WShlLHQsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKSl9Y3JlYXRlQ2VsbFJhbmdlKGUsdCxyKXtyZXR1cm4gbmV3IG5ZKGUsdCxyLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIikpfWRyYXcoZT0hMSl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZHJhd0ludGVycnVwdGVkPSExLCF0aGlzLnd0VGFibGUuaXNWaXNpYmxlKCl8fFF4ZSh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnROb2RlKT90aGlzLmRyYXdJbnRlcnJ1cHRlZD0hMDp0aGlzLnd0VGFibGUuZHJhdyhlKSx0aGlzfWdldENlbGwoZSx0PSExKXtpZihu''@;'; put 'put ''dWxsPT09ZS5yb3d8fG51bGw9PT1lLmNvbClyZXR1cm47aWYoIXQpcmV0dXJuIHRoaXMud3RUYWJsZS5nZXRDZWxsKGUpO2NvbnN0IHI9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLGk9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLG89''@;'; put 'put ''dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7cmV0dXJuIGUucm93PGkmJmUuY29sPGE/dGhpcy53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5j''@;'; put 'put ''bG9uZT8ud3RUYWJsZS5nZXRDZWxsKGUpOmUucm93PGk/dGhpcy53dE92ZXJsYXlzLnRvcE92ZXJsYXkuY2xvbmU/Lnd0VGFibGUuZ2V0Q2VsbChlKTplLmNvbDxhJiZlLnJvdz49ci1vP3RoaXMud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXk/LmNsb25lPy53dFRh''@;'; put 'put ''YmxlLmdldENlbGwoZSk6ZS5jb2w8YT90aGlzLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lPy53dFRhYmxlLmdldENlbGwoZSk6ZS5yb3c8ciYmZS5yb3c+PXItbz90aGlzLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheT8uY2xvbmU/Lnd0VGFibGUuZ2V0Q2VsbChlKTp0aGlz''@;'; put 'put ''Lnd0VGFibGUuZ2V0Q2VsbChlKX1zY3JvbGxWaWV3cG9ydChlLHQscil7cmV0dXJuIG51bGwhPT1lLnJvdyYmbnVsbCE9PWUuY29sJiZ0aGlzLnd0U2Nyb2xsLnNjcm9sbFZpZXdwb3J0KGUsdCxyKX1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShlLHQpe3JldHVybiB0aGlzLnd0U2Nyb2xs''@;'; put 'put ''LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGUsdCl9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGUsdCl7cmV0dXJuIHRoaXMud3RTY3JvbGwuc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGUsdCl9Z2V0Vmlld3BvcnQoKXtyZXR1cm5bdGhpcy53dFRhYmxlLmdldEZpcnN0VmlzaWJsZVJv''@;'; put 'put ''dygpLHRoaXMud3RUYWJsZS5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSx0aGlzLnd0VGFibGUuZ2V0TGFzdFZpc2libGVSb3coKSx0aGlzLnd0VGFibGUuZ2V0TGFzdFZpc2libGVDb2x1bW4oKV19Z2V0T3ZlcmxheUJ5TmFtZShlKXtyZXR1cm4gbnVsbH1leHBvcnRTZXR0aW5nc0FzQ2xhc3NO''@;'; put 'put ''YW1lcygpe31kZXN0cm95KCl7dGhpcy53dE92ZXJsYXlzLmRlc3Ryb3koKSx0aGlzLnd0RXZlbnQuZGVzdHJveSgpfWNyZWF0ZVNjcm9sbERhbygpe2NvbnN0IGU9dGhpcztyZXR1cm57Z2V0IGRyYXduKCl7cmV0dXJuIGUuZHJhd259LGdldCB0b3BPdmVybGF5KCl7cmV0dXJuIGUud3RPdmVy''@;'; put 'put ''bGF5cy50b3BPdmVybGF5fSxnZXQgaW5saW5lU3RhcnRPdmVybGF5KCl7cmV0dXJuIGUud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXl9LGdldCB3dFRhYmxlKCl7cmV0dXJuIGUud3RUYWJsZX0sZ2V0IHd0Vmlld3BvcnQoKXtyZXR1cm4gZS53dFZpZXdwb3J0fSxnZXQgd3RTZXR0aW5n''@;'; put 'put ''cygpe3JldHVybiBlLnd0U2V0dGluZ3N9LGdldCByb290V2luZG93KCl7cmV0dXJuIGUuZG9tQmluZGluZ3Mucm9vdFdpbmRvd30sZ2V0IHRvdGFsUm93cygpe3JldHVybiBlLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIil9LGdldCB0b3RhbENvbHVtbnMoKXtyZXR1cm4gZS53''@;'; put 'put ''dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpfSxnZXQgZml4ZWRSb3dzVG9wKCl7cmV0dXJuIGUud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKX0sZ2V0IGZpeGVkUm93c0JvdHRvbSgpe3JldHVybiBlLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRS''@;'; put 'put ''b3dzQm90dG9tIil9LGdldCBmaXhlZENvbHVtbnNTdGFydCgpe3JldHVybiBlLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKX19fWdldFRhYmxlRGFvKCl7Y29uc3QgZT10aGlzO3JldHVybntnZXQgd290KCl7cmV0dXJuIGV9LGdldCBwYXJlbnRUYWJsZU9mZnNl''@;'; put 'put ''dCgpe3JldHVybiBlLmNsb25lU291cmNlLnd0VGFibGUudGFibGVPZmZzZXR9LGdldCBjbG9uZVNvdXJjZSgpe3JldHVybiBlLmNsb25lU291cmNlfSxnZXQgd29ya3NwYWNlV2lkdGgoKXtyZXR1cm4gZS53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCl9LGdldCB3dFZpZXdwb3J0KCl7''@;'; put 'put ''cmV0dXJuIGUud3RWaWV3cG9ydH0sZ2V0IHd0T3ZlcmxheXMoKXtyZXR1cm4gZS53dE92ZXJsYXlzfSxnZXQgc2VsZWN0aW9uTWFuYWdlcigpe3JldHVybiBlLnNlbGVjdGlvbk1hbmFnZXJ9LGdldCBkcmF3bigpe3JldHVybiBlLmRyYXdufSxzZXQgZHJhd24odCl7ZS5kcmF3bj10fSxnZXQg''@;'; put 'put ''d3RUYWJsZSgpe3JldHVybiBlLnd0VGFibGV9LGdldCBzdGFydENvbHVtblJlbmRlcmVkKCl7cmV0dXJuIGUud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcj8uc3RhcnRDb2x1bW4/P251bGx9LGdldCBzdGFydENvbHVtblZpc2libGUoKXtyZXR1cm4gZS53dFZpZXdwb3J0LmNv''@;'; put 'put ''bHVtbnNWaXNpYmxlQ2FsY3VsYXRvcj8uc3RhcnRDb2x1bW4/P251bGx9LGdldCBzdGFydENvbHVtblBhcnRpYWxseVZpc2libGUoKXtyZXR1cm4gZS53dFZpZXdwb3J0LmNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj8uc3RhcnRDb2x1bW4/P251bGx9LGdldCBlbmRDb2x1bW5S''@;'; put 'put ''ZW5kZXJlZCgpe3JldHVybiBlLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3I/LmVuZENvbHVtbj8/bnVsbH0sZ2V0IGVuZENvbHVtblZpc2libGUoKXtyZXR1cm4gZS53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcj8uZW5kQ29sdW1uPz9udWxsfSxnZXQgZW5k''@;'; put 'put ''Q29sdW1uUGFydGlhbGx5VmlzaWJsZSgpe3JldHVybiBlLnd0Vmlld3BvcnQuY29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yPy5lbmRDb2x1bW4/P251bGx9LGdldCBjb3VudENvbHVtbnNSZW5kZXJlZCgpe3JldHVybiBlLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0''@;'; put 'put ''b3I/LmNvdW50Pz8wfSxnZXQgY291bnRDb2x1bW5zVmlzaWJsZSgpe3JldHVybiBlLnd0Vmlld3BvcnQuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yPy5jb3VudD8/MH0sZ2V0IHN0YXJ0Um93UmVuZGVyZWQoKXtyZXR1cm4gZS53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yPy5zdGFy''@;'; put 'put ''dFJvdz8/bnVsbH0sZ2V0IHN0YXJ0Um93VmlzaWJsZSgpe3JldHVybiBlLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yPy5zdGFydFJvdz8/bnVsbH0sZ2V0IHN0YXJ0Um93UGFydGlhbGx5VmlzaWJsZSgpe3JldHVybiBlLnd0Vmlld3BvcnQucm93c1BhcnRpYWxseVZpc2libGVD''@;'; put 'put ''YWxjdWxhdG9yPy5zdGFydFJvdz8/bnVsbH0sZ2V0IGVuZFJvd1JlbmRlcmVkKCl7cmV0dXJuIGUud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvcj8uZW5kUm93Pz9udWxsfSxnZXQgZW5kUm93VmlzaWJsZSgpe3JldHVybiBlLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9y''@;'; put 'put ''Py5lbmRSb3c/P251bGx9LGdldCBlbmRSb3dQYXJ0aWFsbHlWaXNpYmxlKCl7cmV0dXJuIGUud3RWaWV3cG9ydC5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3I/LmVuZFJvdz8/bnVsbH0sZ2V0IGNvdW50Um93c1JlbmRlcmVkKCl7cmV0dXJuIGUud3RWaWV3cG9ydC5yb3dzUmVuZGVy''@;'; put 'put ''Q2FsY3VsYXRvcj8uY291bnQ/PzB9LGdldCBjb3VudFJvd3NWaXNpYmxlKCl7cmV0dXJuIGUud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3I/LmNvdW50Pz8wfSxnZXQgY29sdW1uSGVhZGVycygpe3JldHVybiBlLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIp''@;'; put 'put ''fSxnZXQgcm93SGVhZGVycygpe3JldHVybiBlLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpfX19Y29uc3RydWN0b3IoZSx0KXt0aGlzLmd1aWQ9YHd0XyR7VlcoKX1gLHRoaXMuZHJhd0ludGVycnVwdGVkPSExLHRoaXMuZHJhd249ITEsdGhpcy5hY3RpdmVPdmVybGF5TmFt''@;'; put 'put ''ZT0ibWFzdGVyIix0aGlzLmRvbUJpbmRpbmdzPXtyb290VGFibGU6ZSxyb290RG9jdW1lbnQ6ZS5vd25lckRvY3VtZW50LHJvb3RXaW5kb3c6ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fSx0aGlzLnd0U2V0dGluZ3M9dCx0aGlzLnd0U2Nyb2xsPW5ldyBqeHQodGhpcy5jcmVhdGVTY3Jv''@;'; put 'put ''bGxEYW8oKSl9fWNsYXNzIEt4dCBleHRlbmRzIG1sZXtjb25zdHJ1Y3RvcihlLHQscil7c3VwZXIoZSx0KTtjb25zdCBpPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmYWNhZGUiLHRoaXMpO3RoaXMuY2xvbmVTb3VyY2U9ci5zb3VyY2UsdGhpcy5jbG9uZU92ZXJsYXk9ci5vdmVybGF5''@;'; put 'put ''LHRoaXMud3RUYWJsZT10aGlzLmNsb25lT3ZlcmxheS5jcmVhdGVUYWJsZSh0aGlzLmdldFRhYmxlRGFvKCksaSx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyksdGhpcy53dFZpZXdwb3J0PXIudmlld3BvcnQsdGhpcy5zZWxlY3Rpb25NYW5hZ2VyPXIuc2VsZWN0aW9uTWFuYWdl''@;'; put 'put ''cix0aGlzLnd0RXZlbnQ9bmV3IEdBZShpLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzLHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMud3RUYWJsZSx0aGlzLnNlbGVjdGlvbk1hbmFnZXIsci5ldmVudCksdGhpcy5maW5kT3JpZ2luYWxIZWFkZXJzKCl9fWNsYXNzIFRMe2hhc1JlbmRl''@;'; put 'put ''cmluZ1N0YXRlQ2hhbmdlZCgpe3JldHVybiB0aGlzLm5lZWRGdWxsUmVuZGVyIT09dGhpcy5zaG91bGRCZVJlbmRlcmVkKCl9dXBkYXRlU3RhdGVPZlJlbmRlcmluZyhlKXsiYmVmb3JlIj09PWUmJnRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpP3RoaXMubmVlZEZ1bGxSZW5kZXI9ITA6ImFmdGVy''@;'; put 'put ''Ij09PWUmJiF0aGlzLnNob3VsZEJlUmVuZGVyZWQoKSYmKHRoaXMubmVlZEZ1bGxSZW5kZXI9ITEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4hMH11cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpe3RoaXMudHJpbW1pbmdDb250YWluZXI9SE0odGhpcy5oaWRlci5wYXJlbnROb2RlPy5wYXJl''@;'; put 'put ''bnROb2RlPz90aGlzLmhpZGVyKX11cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQoKXtjb25zdHt3dFRhYmxlOmV9PXRoaXMud290LHtyb290V2luZG93OnR9PXRoaXMuZG9tQmluZGluZ3Mscj10LmdldENvbXB1dGVkU3R5bGUoZS53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpLmdldFByb3Bl''@;'; put 'put ''cnR5VmFsdWUoIm92ZXJmbG93IiksaT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7dGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD0iaGlkZGVuIj09PXJ8fCJjbGlwIj09PXI/dGhpcy53b3Qud3RUYWJsZS5ob2xkZXI6Imhvcml6b250YWwiPT09''@;'; put 'put ''aSYmdGhpcy50eXBlPT09JHZ8fCJ2ZXJ0aWNhbCI9PT1pJiZ0aGlzLnR5cGU9PT1xdj90Om1MKGUuVEFCTEUpfWdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKGUsdCxyKXtpZighdGhpcy5jbG9uZXx8ITE9PT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLmNvbnRhaW5zKGUpKXJldHVybiB2b2lk''@;'; put 'put ''IEhhKGBUaGUgcHJvdmlkZWQgZWxlbWVudCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgJHt0aGlzLnR5cGV9IG92ZXJsYXlgKTtjb25zdCBpPXRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csbz1yPHRoaXMud3RTZXR0aW5ncy5nZXRT''@;'; put 'put ''ZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLGE9dDx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksbD10Pj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIp''@;'; put 'put ''LHU9dGhpcy5jbG9uZS53dFRhYmxlLnNwcmVhZGVyLGc9e3N0YXJ0OnRoaXMuZ2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKHUpLHRvcDp1Lm9mZnNldFRvcH0sRT17c3RhcnQ6dGhpcy5nZXRSZWxhdGl2ZVN0YXJ0UG9zaXRpb24oZSksdG9wOmUub2Zmc2V0VG9wfTtsZXQgTz1udWxsO3JldHVy''@;'; put 'put ''biBPPWk/dGhpcy5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbldpbmRvdyhhLG8sRSxnKTp0aGlzLmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluSG9sZGVyKGEsbCxvLEUsZyksT31nZXRSZWxhdGl2ZVN0YXJ0UG9zaXRpb24oZSl7cmV0dXJuIHRoaXMuaXNSdGwoKT9lLm9mZnNl''@;'; put 'put ''dFBhcmVudC5vZmZzZXRXaWR0aC1lLm9mZnNldExlZnQtZS5vZmZzZXRXaWR0aDplLm9mZnNldExlZnR9Z2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5XaW5kb3coZSx0LHIsaSl7Y29uc3Qgbz10aGlzLndvdC53dFRhYmxlLnd0Um9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0''@;'; put 'put ''KCksYT10aGlzLndvdC53dE92ZXJsYXlzLnNjcm9sbGFibGVFbGVtZW50IT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LGxfaG9yaXpvbnRhbD1hP3RoaXMud290Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCk6MCxsX3ZlcnRpY2FsPWE/dGhp''@;'; put 'put ''cy53b3Qud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCk6MDtsZXQgdT0wLGc9MDtpZih0KXtsZXQgRT1vLmxlZnQ7dGhpcy5pc1J0bCgpJiYoRT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cuaW5uZXJXaWR0aC0oby5sZWZ0K28ud2lkdGgrR2QoKSkpLHU9RTw9''@;'; put 'put ''MD8tMSpFOjB9ZWxzZSB1PWkuc3RhcnQtbF9ob3Jpem9udGFsO3JldHVybiBnPWUmJnRoaXMuY2xvbmU/dGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC1vLnRvcDppLnRvcC1sX3ZlcnRpY2FsLHtzdGFydDpyLnN0YXJ0K3UsdG9wOnIudG9wK2d9''@;'; put 'put ''fWdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluSG9sZGVyKGUsdCxyLGksbyl7Y29uc3QgYV9ob3Jpem9udGFsPXRoaXMud290Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCksYV92ZXJ0aWNhbD10aGlzLndvdC53dE92ZXJsYXlzLnRvcE92ZXJs''@;'; put 'put ''YXkuZ2V0U2Nyb2xsUG9zaXRpb24oKTtsZXQgbD0wLHU9MDtpZihyfHwobD1hX2hvcml6b250YWwtby5zdGFydCksdCYmdGhpcy5jbG9uZSl7Y29uc3QgZz10aGlzLndvdC53dFRhYmxlLnd0Um9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dT0tMSp0aGlzLmNsb25lLnd0VGFi''@;'; put 'put ''bGUuVEFCTEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wK2cudG9wfWVsc2UgZXx8KHU9YV92ZXJ0aWNhbC1vLnRvcCk7cmV0dXJue3N0YXJ0Omkuc3RhcnQtbCx0b3A6aS50b3AtdX19bWFrZUNsb25lKCl7LTE9PT1YQWUuaW5kZXhPZih0aGlzLnR5cGUpJiZKcihgQ2xvbmUgdHlwZSAi''@;'; put 'put ''JHt0aGlzLnR5cGV9IiBpcyBub3Qgc3VwcG9ydGVkLmApO2NvbnN0e3d0VGFibGU6ZSx3dFNldHRpbmdzOnR9PXRoaXMud290LHtyb290RG9jdW1lbnQ6cixyb290V2luZG93Oml9PXRoaXMuZG9tQmluZGluZ3Msbz1yLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGE9ci5jcmVhdGVFbGVtZW50KCJ0''@;'; put 'put ''YWJsZSIpLGw9ZS53dFJvb3RFbGVtZW50LnBhcmVudE5vZGU7bHx8SnIoIlRoZSBXYWxrb250YWJsZSByb290IGVsZW1lbnQgaGFzIG5vIHBhcmVudCBub2RlLiIpLG8uY2xhc3NOYW1lPWAke094dC5nZXQodGhpcy50eXBlKX0gaGFuZHNvbnRhYmxlYCxvLnNldEF0dHJpYnV0ZSgiZGlyIix0''@;'; put 'put ''aGlzLmlzUnRsKCk/InJ0bCI6Imx0ciIpLG8uc3R5bGUucG9zaXRpb249ImFic29sdXRlIixvLnN0eWxlLnRvcD0iMCIsby5zdHlsZS5vdmVyZmxvdz0idmlzaWJsZSIsdGhpcy5pc1J0bCgpP28uc3R5bGUucmlnaHQ9IjAiOm8uc3R5bGUubGVmdD0iMCIsdC5nZXRTZXR0aW5nKCJhcmlhVGFn''@;'; put 'put ''cyIpJiZLbyhvLFtbInJvbGUiLCJwcmVzZW50YXRpb24iXV0pLGEuY2xhc3NOYW1lPWUuVEFCTEUuY2xhc3NOYW1lO2NvbnN0IHU9ZS5UQUJMRS5nZXRBdHRyaWJ1dGUoInJvbGUiKTt1JiZhLnNldEF0dHJpYnV0ZSgicm9sZSIsdSksby5hcHBlbmRDaGlsZChhKSxsLmFwcGVuZENoaWxkKG8p''@;'; put 'put ''O2NvbnN0IGc9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpLEU9aS5nZXRDb21wdXRlZFN0eWxlKGwpLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9ImhpZGRlbiI9PT1FfHwiY2xp''@;'; put 'put ''cCI9PT1FP2UuaG9sZGVyOiJob3Jpem9udGFsIj09PWcmJnRoaXMudHlwZT09PSR2fHwidmVydGljYWwiPT09ZyYmdGhpcy50eXBlPT09cXY/aTptTChlLlRBQkxFKSxuZXcgS3h0KGEsdGhpcy53dFNldHRpbmdzLHtzb3VyY2U6dGhpcy53b3Qsb3ZlcmxheTp0aGlzLHZpZXdwb3J0OnRoaXMu''@;'; put 'put ''d290Lnd0Vmlld3BvcnQsZXZlbnQ6dGhpcy53b3Qud3RFdmVudCxzZWxlY3Rpb25NYW5hZ2VyOnRoaXMud290LnNlbGVjdGlvbk1hbmFnZXJ9KX1yZWZyZXNoKGU9ITEpe2lmKHRoaXMubmVlZEZ1bGxSZW5kZXImJnRoaXMuY2xvbmUpe2NvbnN0IHQ9dGhpcy5jbG9uZS5jbG9uZVNvdXJjZTt0''@;'; put 'put ''LmFjdGl2ZU92ZXJsYXlOYW1lPXRoaXMuY2xvbmUud3RUYWJsZS5uYW1lLHRoaXMuY2xvbmUuZHJhdyhlKSx0LmFjdGl2ZU92ZXJsYXlOYW1lPSJtYXN0ZXIifX1yZXNldCgpe2lmKCF0aGlzLmNsb25lKXJldHVybjtjb25zdCBlPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXI7W2Uuc3R5bGUs''@;'; put 'put ''dGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLGUucGFyZW50Tm9kZS5zdHlsZV0uZm9yRWFjaChhPT57YS53aWR0aD0iIixhLmhlaWdodD0iIn0pfWlzUnRsKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIil9ZGVzdHJveSgpe3RoaXMuY2xvbmU/LmV2''@;'; put 'put ''ZW50TWFuYWdlci5kZXN0cm95KCl9Y29uc3RydWN0b3IoZSx0LHIsaSxvKXtLNSh0aGlzLCJ3b3QiLGUse3dyaXRhYmxlOiExfSksdGhpcy5kb21CaW5kaW5ncz1vLHRoaXMuZmFjYWRlR2V0dGVyPXQsdGhpcy53dFNldHRpbmdzPWk7Y29uc3R7VEFCTEU6YSxoaWRlcjpsLHNwcmVhZGVyOnUs''@;'; put 'put ''aG9sZGVyOmcsd3RSb290RWxlbWVudDpFfT10aGlzLndvdC53dFRhYmxlO3RoaXMuaW5zdGFuY2U9dGhpcy53b3QsdGhpcy50eXBlPXIsdGhpcy5UQUJMRT1hLHRoaXMuaGlkZXI9bCx0aGlzLnNwcmVhZGVyPXUsdGhpcy5ob2xkZXI9Zyx0aGlzLnd0Um9vdEVsZW1lbnQ9RSx0aGlzLnRyaW1t''@;'; put 'put ''aW5nQ29udGFpbmVyPUhNKHRoaXMuaGlkZXIucGFyZW50Tm9kZT8ucGFyZW50Tm9kZT8/dGhpcy5oaWRlciksdGhpcy5uZWVkRnVsbFJlbmRlcj10aGlzLnNob3VsZEJlUmVuZGVyZWQoKSx0aGlzLmNsb25lPXRoaXMubWFrZUNsb25lKCl9fWNvbnN0IHZsZT1uPT57Y29uc3QgZT1uLnd0U2V0''@;'; put 'put ''dGluZ3MuZ2V0U2V0dGluZygic3R5bGVzSGFuZGxlciIpLHQ9ZS5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLWF1dG9maWxsLXNpemUiKSxyPWUuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1hdXRvZmlsbC1ib3JkZXItd2lkdGgiKSxpPWUuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1h''@;'; put 'put ''dXRvZmlsbC1ib3JkZXItY29sb3IiKTtyZXR1cm4gT2JqZWN0LmZyZWV6ZSh7d2lkdGg6dCxoZWlnaHQ6dCxib3JkZXJXaWR0aDpyLGJvcmRlclN0eWxlOiJzb2xpZCIsYm9yZGVyQ29sb3I6aX0pfTtjbGFzcyBYeHQgZXh0ZW5kcyBUTHtjcmVhdGVUYWJsZSguLi5lKXtyZXR1cm4gbmV3IEh4''@;'; put 'put ''dCguLi5lKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJUb3BPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7aWYoISh0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLnNob3VsZEJlUmVuZGVyZWQoKSYmdGhpcy53''@;'; put 'put ''b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSYmdGhpcy5jbG9uZSkpcmV0dXJuITE7Y29uc3QgZT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUse3Jvb3RXaW5kb3c6dH09dGhpcy5kb21CaW5kaW5ncyxyPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50''@;'; put 'put ''T3ZlcmZsb3ciKTtsZXQgaT0wLG89ITE7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PXR8fHImJiJ2ZXJ0aWNhbCI9PT1yKWk9dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLF9MKGUpO2Vsc2V7Y29uc3R7d3RUYWJsZTpsfT10aGlzLndvdCx1PWwuaGlkZXIuZ2V0Qm91bmRpbmdDbGllbnRS''@;'; put 'put ''ZWN0KCk7bz1NYXRoLmNlaWwodS5ib3R0b20pPT09ZS5vZmZzZXRIZWlnaHQsaT10aGlzLmdldE92ZXJsYXlPZmZzZXQoKSxVVyhlLCIwcHgiLGAke2l9cHhgKX1jb25zdCBhPXRoaXMuYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGksbyk7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVudHNT''@;'; put 'put ''aXplKCksYX1zZXRTY3JvbGxQb3NpdGlvbihlKXtjb25zdHtyb290V2luZG93OnR9PXRoaXMuZG9tQmluZGluZ3Mscj10aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LGk9cixvPSgpPT5yPT09dD90LnNjcm9sbFk6aS5zY3JvbGxUb3AsbD1vKCk7bGV0IHU9ITE7cmV0dXJuIGUhPT1s''@;'; put 'put ''JiYoZz1lLHI9PT10P3Quc2Nyb2xsVG8odC5zY3JvbGxYLGcpOmkuc2Nyb2xsVG9wPWcsdT1sIT09bygpKSx1O3ZhciBnfW9uU2Nyb2xsKCl7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uU2Nyb2xsSG9yaXpvbnRhbGx5Iil9c3VtQ2VsbFNpemVzKGUsdCl7Y29uc3QgaT10aGlzLnd0''@;'; put 'put ''U2V0dGluZ3MuZ2V0U2V0dGluZygic3R5bGVzSGFuZGxlciIpLmdldERlZmF1bHRSb3dIZWlnaHQoKTtsZXQgbz1lLGE9MDtmb3IoO288dDspe2NvbnN0IGw9dGhpcy53b3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQobyk7YSs9dm9pZCAwPT09bD9pOmwsbys9MX1yZXR1cm4gYX1hZGp1c3RFbGVt''@;'; put 'put ''ZW50c1NpemUoKXt0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksdGhpcy5uZWVkRnVsbFJlbmRlciYmKHRoaXMuYWRqdXN0Um9vdEVsZW1lbnRTaXplKCksdGhpcy5hZGp1c3RSb290Q2hpbGRyZW5TaXplKCkpfWFkanVzdFJvb3RFbGVtZW50U2l6ZSgpe2lmKCF0aGlzLmNsb25lKXJl''@;'; put 'put ''dHVybjtjb25zdHt3dFRhYmxlOmUsd3RWaWV3cG9ydDp0fT10aGlzLndvdCx7cm9vdERvY3VtZW50OnIscm9vdFdpbmRvdzppfT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLnN0eWxlLGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmco''@;'; put 'put ''InByZXZlbnRPdmVyZmxvdyIpO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1pfHwiaG9yaXpvbnRhbCI9PT1sKXtsZXQgZz10LmdldFdvcmtzcGFjZVdpZHRoKCk7dC5oYXNWZXJ0aWNhbFNjcm9sbCgpJiYoZy09R2QocikpLGc9TWF0aC5taW4oZyxlLnd0Um9vdEVsZW1lbnQuc2Nyb2xs''@;'; put 'put ''V2lkdGgpLGEud2lkdGg9YCR7Z31weGB9ZWxzZSBhLndpZHRoPSIiO3RoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5bGUud2lkdGg9YS53aWR0aDtsZXQgdT1IaCh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO2UuaGFzRGVmaW5lZFNpemUoKXx8KHU9MCksYS5oZWlnaHQ9YCR7dX1weGB9''@;'; put 'put ''YWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpe2lmKCF0aGlzLmNsb25lKXJldHVybjtjb25zdHtob2xkZXI6ZX09dGhpcy5jbG9uZS53dFRhYmxlLHQ9dmxlKHRoaXMud290KSxyPXRoaXMud290LnNlbGVjdGlvbk1hbmFnZXIuZ2V0Rm9jdXNTZWxlY3Rpb24oKT9wYXJzZUludCh0LmhlaWdodCwx''@;'; put 'put ''MCkvMjowO3RoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZS53aWR0aD10aGlzLmhpZGVyLnN0eWxlLndpZHRoO2NvbnN0IGk9ZS5wYXJlbnROb2RlO2Uuc3R5bGUud2lkdGg9aS5zdHlsZS53aWR0aCxlLnN0eWxlLmhlaWdodD1gJHtwYXJzZUludChpLnN0eWxlLmhlaWdodCwxMCkrcn1w''@;'; put 'put ''eGB9YXBwbHlUb0RPTSgpe2NvbnN0IGU9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpPz8wOyJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvcj8uc3RhcnRQb3NpdGlvbj90aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD1g''@;'; put 'put ''JHt0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgOjA9PT1lP3RoaXMuc3ByZWFkZXIuc3R5bGUudG9wPSIwIjpKcigiSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSByb3dzUmVuZGVyQ2FsY3VsYXRvciIpLHRoaXMuc3ByZWFkZXIuc3R5bGUu''@;'; put 'put ''Ym90dG9tPSIiLHRoaXMubmVlZEZ1bGxSZW5kZXImJnRoaXMuc3luY092ZXJsYXlPZmZzZXQoKX1zeW5jT3ZlcmxheU9mZnNldCgpe2lmKCF0aGlzLmNsb25lKXJldHVybjtjb25zdCBlPXRoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Iix7c3ByZWFkZXI6dH09dGhpcy5jbG9uZS53dFRhYmxl''@;'; put 'put ''O3Quc3R5bGVbZV09Im51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yPy5zdGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA6IiJ9c2Nyb2xsVG8o''@;'; put 'put ''ZSx0KXtjb25zdHt3b3Q6cix3dFNldHRpbmdzOml9PXRoaXMsYT0oci5jbG9uZVNvdXJjZT9yLmNsb25lU291cmNlOnIpLnd0VGFibGUuaG9sZGVyLGw9aS5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIiksZz0wPT09aS5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSYmbC5sZW5ndGg+MCYm''@;'; put 'put ''IUxhKGEucGFyZW50Tm9kZSwiaW5uZXJCb3JkZXJUb3AiKT8xOjA7bGV0IEU9dGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLE89MDtpZih0JiYodGhpcy53b3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQoZSk/PzApPnRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRIZWlnaHQoKSYmKHQ9''@;'; put 'put ''ITEpLHQmJmEub2Zmc2V0SGVpZ2h0IT09YS5jbGllbnRIZWlnaHQmJihPPUdkKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksdCl7Y29uc3QgWj1pLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGVlPWkuZ2V0U2V0dGluZygidG90YWxSb3dzIik7RSs9dGhpcy5zdW1DZWxs''@;'; put 'put ''U2l6ZXMoMCxlKzEpLEUtPXIud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpLXRoaXMuc3VtQ2VsbFNpemVzKGVlLVosZWUpLEUrPTEsRSs9Z31lbHNlIEUrPXRoaXMuc3VtQ2VsbFNpemVzKGkuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksZSk7cmV0dXJuIEUrPU8sdEFlKHRoaXMu''@;'; put 'put ''bWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQpPT09RS1nJiZnPjAmJnRoaXMud290Lnd0T3ZlcmxheXMuZXhwYW5kSGlkZXJWZXJ0aWNhbGx5QnkoZyksdGhpcy5zZXRTY3JvbGxQb3NpdGlvbihFKX1nZXRUYWJsZVBhcmVudE9mZnNldCgpe3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFi''@;'; put 'put ''bGVFbGVtZW50PT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P3RoaXMud290Lnd0VGFibGUuaG9sZGVyT2Zmc2V0LnRvcDowfWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIGpXKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsdGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93''@;'; put 'put ''KX1nZXRPdmVybGF5T2Zmc2V0KCl7Y29uc3R7cm9vdFdpbmRvdzplfT10aGlzLmRvbUJpbmRpbmdzLHQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCByPTA7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lcj09PWUmJighdHx8InZlcnRpY2FsIiE9PXQp''@;'; put 'put ''KXtjb25zdCBhPXRoaXMud290Lnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKS0odGhpcy5jbG9uZT90aGlzLmNsb25lLnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKTowKTtyPU1hdGgubWF4KHRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKS10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCksMCkscj5h''@;'; put 'put ''JiYocj0wKX1yZXR1cm4gcn1hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24oZSx0PSExKXtjb25zdHt3dFNldHRpbmdzOnJ9PXRoaXMsaT10aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLG89ci5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKT8/MCxhPSJob3Jpem9udGFsIj09''@;'; put 'put ''PXIuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bz9rbyhpLCJlbXB0eUNvbHVtbnMiKTpZcihpLCJlbXB0eUNvbHVtbnMiKTtsZXQgbD0hMTtpZighdCYmIWEpe2NvbnN0IHU9ci5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxnPXRoaXMuY2FjaGVkRml4ZWRSb3dzVG9wIT09dSxF''@;'; put 'put ''PXIuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpO2lmKChnfHwwPT09dSkmJkUubGVuZ3RoPjApe2NvbnN0IE89TGEoaSwiaW5uZXJCb3JkZXJUb3AiKTt0aGlzLmNhY2hlZEZpeGVkUm93c1RvcD1yLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLGV8fDA9PT1yLmdldFNldHRpbmcoInRv''@;'; put 'put ''dGFsUm93cyIpPyhZcihpLCJpbm5lckJvcmRlclRvcCIpLGw9IU8pOihrbyhpLCJpbm5lckJvcmRlclRvcCIpLGw9Tyl9fXJldHVybiBsfWNvbnN0cnVjdG9yKGUsdCxyLGkpe3N1cGVyKGUsdCwkdixyLGkpLHRoaXMuY2FjaGVkRml4ZWRSb3dzVG9wPS0xLHRoaXMuY2FjaGVkRml4ZWRSb3dz''@;'; put 'put ''VG9wPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKX19Y29uc3QgbGtlPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7Y29uc3Qgbj10aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCk7cmV0dXJuIDA9PT1uPy0xOih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90''@;'; put 'put ''YWxSb3dzIik/PzApLW59LGdldEZpcnN0VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKX0sZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpfSxnZXRMYXN0UmVuZGVyZWRSb3coKXtyZXR1cm4g''@;'; put 'put ''MD09PXRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKT8tMToodGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpPz8wKS0xfSxnZXRMYXN0VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfSxnZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygp''@;'; put 'put ''e3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfSxnZXRSZW5kZXJlZFJvd3NDb3VudCgpe3JldHVybiBNYXRoLm1pbih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik/PzAsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpKX0s''@;'; put 'put ''Z2V0VmlzaWJsZVJvd3NDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCl9LGdldENvbHVtbkhlYWRlcnNDb3VudDooKT0+MH07SzUobGtlLCJNSVhJTl9OQU1FIiwic3RpY2t5Um93c0JvdHRvbSIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBja2U9''@;'; put 'put ''bGtlO2NsYXNzIF9sZSBleHRlbmRzIEtNe2NvbnN0cnVjdG9yKGUsdCxyLGkpe3N1cGVyKGUsdCxyLGksdDYpfX1ZbChfbGUsY2tlKSxZbChfbGUsdWxlKTtjb25zdCBKeHQ9X2xlO2NsYXNzIGVBdCBleHRlbmRzIFRMe2NyZWF0ZVRhYmxlKC4uLmUpe3JldHVybiBuZXcgSnh0KC4uLmUpfXNo''@;'; put 'put ''b3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtpZighKHRoaXMubmVlZEZ1bGxSZW5kZXImJnRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpJiZ0aGlzLndvdC53dFRh''@;'; put 'put ''YmxlLmhvbGRlci5wYXJlbnROb2RlJiZ0aGlzLmNsb25lKSlyZXR1cm4hMTtjb25zdHtyb290V2luZG93OmV9PXRoaXMuZG9tQmluZGluZ3MsdD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7dC5zdHlsZS50b3A9IiI7bGV0IHI9MDtjb25zdCBpPXRoaXMud3RTZXR0aW5n''@;'; put 'put ''cy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09ZXx8aSYmInZlcnRpY2FsIj09PWkpcj10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksdGhpcy5yZXBvc2l0aW9uT3ZlcmxheSgpO2Vsc2V7cj10aGlzLmdldE92ZXJsYXlPZmZzZXQoKTtj''@;'; put 'put ''b25zdCBhPXRoaXMud290Lnd0VGFibGUuVEFCTEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbD10aGlzLndvdC53dFRhYmxlLmhvbGRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx1PU1hdGgubWF4KDAsYS5ib3R0b20tbC5ib3R0b20pO3Quc3R5bGUuYm90dG9tPXItdSsicHgifWNvbnN0''@;'; put 'put ''IG89dGhpcy5hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24ocik7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksb31yZXBvc2l0aW9uT3ZlcmxheSgpe2lmKCF0aGlzLmNsb25lKXJldHVybjtjb25zdHt3dFRhYmxlOmUsd3RWaWV3cG9ydDp0fT10aGlzLndvdCx7cm9vdERvY3Vt''@;'; put 'put ''ZW50OnJ9PXRoaXMuZG9tQmluZGluZ3MsaT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7bGV0IG89MDt0Lmhhc1ZlcnRpY2FsU2Nyb2xsKCl8fChvKz10LmdldFdvcmtzcGFjZUhlaWdodCgpLWUuZ2V0VG90YWxIZWlnaHQoKSksdC5oYXNWZXJ0aWNhbFNjcm9sbCgpJiZ0''@;'; put 'put ''Lmhhc0hvcml6b250YWxTY3JvbGwoKSYmKG8rPUdkKHIpKSxpLnN0eWxlLmJvdHRvbT1gJHtvfXB4YH1zZXRTY3JvbGxQb3NpdGlvbihlKXtjb25zdHtyb290V2luZG93OnR9PXRoaXMuZG9tQmluZGluZ3Mscj10aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LGk9cixvPSgpPT5yPT09''@;'; put 'put ''dD90LnNjcm9sbFk6aS5zY3JvbGxUb3AsbD1vKCk7bGV0IHU9ITE7cmV0dXJuIGUhPT1sJiYoZz1lLHI9PT10P3Quc2Nyb2xsVG8odC5zY3JvbGxYLGcpOmkuc2Nyb2xsVG9wPWcsdT1sIT09bygpKSx1O3ZhciBnfW9uU2Nyb2xsKCl7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uU2Ny''@;'; put 'put ''b2xsSG9yaXpvbnRhbGx5Iil9c3VtQ2VsbFNpemVzKGUsdCl7Y29uc3R7d3RUYWJsZTpyLHd0U2V0dGluZ3M6aX09dGhpcy53b3Qsbz1pLmdldFNldHRpbmcoInN0eWxlc0hhbmRsZXIiKS5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IGE9ZSxsPTA7Zm9yKDthPHQ7KXtjb25zdCB1PXIuZ2V0''@;'; put 'put ''Um93SGVpZ2h0KGEpO2wrPXZvaWQgMD09PXU/bzp1LGErPTF9cmV0dXJuIGx9YWRqdXN0RWxlbWVudHNTaXplKCl7dGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLHRoaXMubmVlZEZ1bGxSZW5kZXImJih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgpLHRoaXMuYWRqdXN0Um9vdENo''@;'; put 'put ''aWxkcmVuU2l6ZSgpKX1hZGp1c3RSb290RWxlbWVudFNpemUoKXtpZighdGhpcy5jbG9uZSlyZXR1cm47Y29uc3R7d3RUYWJsZTplLHd0Vmlld3BvcnQ6dH09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpyLHJvb3RXaW5kb3c6aX09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMuY2xvbmUud3RUYWJs''@;'; put 'put ''ZS5ob2xkZXIucGFyZW50Tm9kZS5zdHlsZSxsPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09aXx8Imhvcml6b250YWwiPT09bCl7bGV0IGc9dC5nZXRXb3Jrc3BhY2VXaWR0aCgpO3QuaGFzVmVydGljYWxT''@;'; put 'put ''Y3JvbGwoKSYmKGctPUdkKHIpKSxnPU1hdGgubWluKGcsZS53dFJvb3RFbGVtZW50LnNjcm9sbFdpZHRoKSxhLndpZHRoPWAke2d9cHhgfWVsc2UgYS53aWR0aD0iIjt0aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnN0eWxlLndpZHRoPWEud2lkdGg7bGV0IHU9SGgodGhpcy5jbG9uZS53dFRh''@;'; put 'put ''YmxlLlRBQkxFKTtlLmhhc0RlZmluZWRTaXplKCl8fCh1PTApLGEuaGVpZ2h0PWAke3V9cHhgfWFkanVzdFJvb3RDaGlsZHJlblNpemUoKXtpZighdGhpcy5jbG9uZSlyZXR1cm47Y29uc3R7aG9sZGVyOmV9PXRoaXMuY2xvbmUud3RUYWJsZTt0aGlzLmNsb25lLnd0VGFibGUuaGlkZXIuc3R5''@;'; put 'put ''bGUud2lkdGg9dGhpcy5oaWRlci5zdHlsZS53aWR0aDtjb25zdCB0PWUucGFyZW50Tm9kZTtlLnN0eWxlLndpZHRoPXQuc3R5bGUud2lkdGgsZS5zdHlsZS5oZWlnaHQ9dC5zdHlsZS5oZWlnaHR9YXBwbHlUb0RPTSgpe2NvbnN0IGU9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFs''@;'; put 'put ''Um93cyIpOyJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvcj8uc3RhcnRQb3NpdGlvbj90aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD1gJHt0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhg''@;'; put 'put ''OjA9PT1lP3RoaXMuc3ByZWFkZXIuc3R5bGUudG9wPSIwIjpKcigiSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSByb3dzUmVuZGVyQ2FsY3VsYXRvciIpLHRoaXMuc3ByZWFkZXIuc3R5bGUuYm90dG9tPSIiLHRoaXMubmVlZEZ1bGxSZW5kZXImJnRoaXMuc3luY092ZXJsYXlPZmZzZXQoKX1zeW5j''@;'; put 'put ''T3ZlcmxheU9mZnNldCgpe2lmKCF0aGlzLmNsb25lKXJldHVybjtjb25zdCBlPXRoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Iix7c3ByZWFkZXI6dH09dGhpcy5jbG9uZS53dFRhYmxlO3Quc3R5bGVbZV09Im51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5k''@;'; put 'put ''ZXJDYWxjdWxhdG9yPy5zdGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA6IiJ9c2Nyb2xsVG8oZSx0KXtsZXQgcj10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCk7Y29uc3Qgbz0odGhpcy53b3QuY2xv''@;'; put 'put ''bmVTb3VyY2U/dGhpcy53b3QuY2xvbmVTb3VyY2U6dGhpcy53b3QpLnd0VGFibGUuaG9sZGVyO2xldCBhPTA7cmV0dXJuIHQmJm8ub2Zmc2V0SGVpZ2h0IT09by5jbGllbnRIZWlnaHQmJihhPUdkKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksdD8ocis9dGhpcy5zdW1DZWxsU2l6''@;'; put 'put ''ZXMoMCxlKzEpLHItPXRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRIZWlnaHQoKSxyKz0xKTpyKz10aGlzLnN1bUNlbGxTaXplcyh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksZSkscis9YSx0aGlzLnNldFNjcm9sbFBvc2l0aW9uKHIpfWdldFRh''@;'; put 'put ''YmxlUGFyZW50T2Zmc2V0KCl7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/dGhpcy53b3Qud3RUYWJsZS5ob2xkZXJPZmZzZXQudG9wOjB9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4galcodGhpcy5tYWluVGFi''@;'; put 'put ''bGVTY3JvbGxhYmxlRWxlbWVudCx0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpfWdldE92ZXJsYXlPZmZzZXQoKXtjb25zdHtyb290V2luZG93OmV9PXRoaXMuZG9tQmluZGluZ3MsdD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IHI9MDtpZih0''@;'; put 'put ''aGlzLnRyaW1taW5nQ29udGFpbmVyPT09ZSYmKCF0fHwidmVydGljYWwiIT09dCkmJnRoaXMuY2xvbmUpe2NvbnN0IGk9dGhpcy53b3Qud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpLGE9aS10aGlzLmNsb25lLnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKSxsPXRoaXMuZG9tQmluZGluZ3Mucm9v''@;'; put 'put ''dERvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7cj1NYXRoLm1heCh0aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCktdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLWwraSwwKSxyPmEmJihyPTApfXJldHVybiByfWFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihlKXtjb25z''@;'; put 'put ''dCB0PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxyPXRoaXMuY2FjaGVkRml4ZWRSb3dzQm90dG9tIT09dCxpPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIik7bGV0IG89ITE7aWYoKHJ8fDA9PT10KSYmaS5sZW5ndGg+MCl7''@;'; put 'put ''Y29uc3QgYT10aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLGw9TGEoYSwiaW5uZXJCb3JkZXJCb3R0b20iKTt0aGlzLmNhY2hlZEZpeGVkUm93c0JvdHRvbT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksZXx8MD09PXRoaXMud3RTZXR0aW5n''@;'; put 'put ''cy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKT8oWXIoYSwiaW5uZXJCb3JkZXJCb3R0b20iKSxvPSFsKTooa28oYSwiaW5uZXJCb3JkZXJCb3R0b20iKSxvPWwpfXJldHVybiBvfWNvbnN0cnVjdG9yKGUsdCxyLGkpe3N1cGVyKGUsdCx0NixyLGkpLHRoaXMuY2FjaGVkRml4ZWRSb3dzQm90dG9t''@;'; put 'put ''PS0xLHRoaXMuY2FjaGVkRml4ZWRSb3dzQm90dG9tPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKX19Y29uc3QgdWtlPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7Y29uc3Qgbj10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRSb3dSZW5kZXJlZDtyZXR1cm4g''@;'; put 'put ''bnVsbD09PW4/LTE6bn0sZ2V0Rmlyc3RWaXNpYmxlUm93KCl7Y29uc3Qgbj10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRSb3dWaXNpYmxlO3JldHVybiBudWxsPT09bj8tMTpufSxnZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKXtjb25zdCBuPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5z''@;'; put 'put ''dGFydFJvd1BhcnRpYWxseVZpc2libGU7cmV0dXJuIG51bGw9PT1uPy0xOm59LGdldExhc3RSZW5kZXJlZFJvdygpe2NvbnN0IG49dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZFJvd1JlbmRlcmVkO3JldHVybiBudWxsPT09bj8tMTpufSxnZXRMYXN0VmlzaWJsZVJvdygpe2NvbnN0IG49dGhp''@;'; put 'put ''cy5kYXRhQWNjZXNzT2JqZWN0LmVuZFJvd1Zpc2libGU7cmV0dXJuIG51bGw9PT1uPy0xOm59LGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7Y29uc3Qgbj10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kUm93UGFydGlhbGx5VmlzaWJsZTtyZXR1cm4gbnVsbD09PW4/LTE6bn0sZ2V0UmVu''@;'; put 'put ''ZGVyZWRSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Um93c1JlbmRlcmVkfSxnZXRWaXNpYmxlUm93c0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudFJvd3NWaXNpYmxlfSxnZXRDb2x1bW5IZWFkZXJzQ291bnQoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvbHVtbkhlYWRlcnMubGVuZ3RofX07SzUodWtlLCJNSVhJTl9OQU1FIiwiY2FsY3VsYXRlZFJvd3MiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgZGtlPXVrZSxoa2U9e2dldEZpcnN0UmVuZGVyZWRDb2x1bW4oKXtyZXR1cm4gMD09''@;'; put 'put ''PXRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKT8tMTowfSxnZXRGaXJzdFZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1''@;'; put 'put ''bW4oKX0sZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKS0xfSxnZXRMYXN0VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfSxnZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfSxnZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpe3JldHVybiBNYXRoLm1pbih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIik/PzAsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0''@;'; put 'put ''YXJ0IikpfSxnZXRWaXNpYmxlQ29sdW1uc0NvdW50KCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKX0sZ2V0Um93SGVhZGVyc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5yb3dIZWFkZXJzLmxlbmd0aH19O0s1KGhrZSwiTUlYSU5fTkFNRSIsInN0''@;'; put 'put ''aWNreUNvbHVtbnNTdGFydCIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCB5bGU9aGtlO2NsYXNzIGJsZSBleHRlbmRzIEtNe2NvbnN0cnVjdG9yKGUsdCxyLGkpe3N1cGVyKGUsdCxyLGkscXYpfX1ZbChibGUsZGtlKSxZbChibGUseWxlKTtjb25zdCByQXQ9YmxlO2NsYXNz''@;'; put 'put ''IGlBdCBleHRlbmRzIFRMe2NyZWF0ZVRhYmxlKC4uLmUpe3JldHVybiBuZXcgckF0KC4uLmUpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2Nv''@;'; put 'put ''bnN0e3d0VGFibGU6ZX09dGhpcy53b3Q7aWYoISh0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLnNob3VsZEJlUmVuZGVyZWQoKSYmZS5ob2xkZXIucGFyZW50Tm9kZSYmdGhpcy5jbG9uZSkpcmV0dXJuITE7Y29uc3R7cm9vdFdpbmRvdzp0fT10aGlzLmRvbUJpbmRpbmdzLHI9dGhpcy5jbG9u''@;'; put 'put ''ZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLGk9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCBvPTA7dGhpcy50cmltbWluZ0NvbnRhaW5lciE9PXR8fGkmJiJob3Jpem9udGFsIj09PWk/KG89dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLF9MKHIp''@;'; put 'put ''KToobz10aGlzLmdldE92ZXJsYXlPZmZzZXQoKSoodGhpcy5pc1J0bCgpPy0xOjEpLFVXKHIsYCR7b31weGAsIjBweCIpKTtjb25zdCBhPXRoaXMuYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKG8pO3JldHVybiB0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLGF9c2V0U2Nyb2xsUG9zaXRp''@;'; put 'put ''b24oZSl7Y29uc3R7cm9vdFdpbmRvdzp0fT10aGlzLmRvbUJpbmRpbmdzLHI9dGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxpPXIsbz0oKT0+cj09PXQ/dC5zY3JvbGxYOmkuc2Nyb2xsTGVmdDt0aGlzLmlzUnRsKCkmJihlPS1lKTtjb25zdCBsPW8oKTtsZXQgdT0hMTtyZXR1cm4g''@;'; put 'put ''ZSE9PWwmJihnPWUscj09PXQ/dC5zY3JvbGxUbyhnLHQuc2Nyb2xsWSk6aS5zY3JvbGxMZWZ0PWcsdT1sIT09bygpKSx1O3ZhciBnfW9uU2Nyb2xsKCl7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uU2Nyb2xsVmVydGljYWxseSIpfXN1bUNlbGxTaXplcyhlLHQpe2NvbnN0IHI9dGhp''@;'; put 'put ''cy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRDb2x1bW5XaWR0aCIpO2xldCBpPWUsbz0wO2Zvcig7aTx0OylvKz10aGlzLndvdC53dFRhYmxlLmdldENvbHVtbldpZHRoKGkpfHxyLGkrPTE7cmV0dXJuIG99YWRqdXN0RWxlbWVudHNTaXplKCl7dGhpcy51cGRhdGVUcmltbWluZ0Nv''@;'; put 'put ''bnRhaW5lcigpLHRoaXMubmVlZEZ1bGxSZW5kZXImJih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgpLHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpKX1hZGp1c3RSb290RWxlbWVudFNpemUoKXtpZighdGhpcy5jbG9uZSlyZXR1cm47Y29uc3R7d3RUYWJsZTplLHd0Vmlld3BvcnQ6''@;'; put 'put ''dH09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpyLHJvb3RXaW5kb3c6aX09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHlsZSxsPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1t''@;'; put 'put ''aW5nQ29udGFpbmVyIT09aXx8InZlcnRpY2FsIj09PWwpe2xldCBnPXQuZ2V0V29ya3NwYWNlSGVpZ2h0KCk7aWYodC5oYXNIb3Jpem9udGFsU2Nyb2xsKCkpe2NvbnN0IEU9ZS5ob2xkZXIuY2xpZW50SGVpZ2h0O2c9RT4wP0U6Zy1HZChyKX1nPU1hdGgubWluKGcsZS53dFJvb3RFbGVtZW50''@;'; put 'put ''LnNjcm9sbEhlaWdodCksYS5oZWlnaHQ9YCR7Z31weGB9ZWxzZSBhLmhlaWdodD0iIjt0aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnN0eWxlLmhlaWdodD1hLmhlaWdodDtjb25zdCB1PVpkKHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7YS53aWR0aD1gJHt1fXB4YH1hZGp1c3RSb290Q2hp''@;'; put 'put ''bGRyZW5TaXplKCl7aWYoIXRoaXMuY2xvbmUpcmV0dXJuO2NvbnN0e2hvbGRlcjplfT10aGlzLmNsb25lLnd0VGFibGUsdD12bGUodGhpcy53b3QpLHI9dGhpcy53b3Quc2VsZWN0aW9uTWFuYWdlci5nZXRGb2N1c1NlbGVjdGlvbigpP3BhcnNlSW50KHQud2lkdGgsMTApLzI6MDt0aGlzLmNs''@;'; put 'put ''b25lLnd0VGFibGUuaGlkZXIuc3R5bGUuaGVpZ2h0PXRoaXMuaGlkZXIuc3R5bGUuaGVpZ2h0O2NvbnN0IGk9ZS5wYXJlbnROb2RlO2Uuc3R5bGUuaGVpZ2h0PWkuc3R5bGUuaGVpZ2h0LGUuc3R5bGUud2lkdGg9YCR7cGFyc2VJbnQoaS5zdHlsZS53aWR0aCwxMCkrcn1weGB9YXBwbHlUb0RP''@;'; put 'put ''TSgpe2NvbnN0IGU9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLHQ9dGhpcy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiOyJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcj8uc3RhcnRQb3NpdGlvbj90aGlz''@;'; put 'put ''LnNwcmVhZGVyLnN0eWxlW3RdPWAke3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA6MD09PWU/dGhpcy5zcHJlYWRlci5zdHlsZVt0XT0iMCI6SnIoIkluY29ycmVjdCB2YWx1ZSBvZiB0aGUgY29sdW1uc1JlbmRlckNhbGN1bGF0''@;'; put 'put ''b3IiKSx0aGlzLmlzUnRsKCk/dGhpcy5zcHJlYWRlci5zdHlsZS5sZWZ0PSIiOnRoaXMuc3ByZWFkZXIuc3R5bGUucmlnaHQ9IiIsdGhpcy5uZWVkRnVsbFJlbmRlciYmdGhpcy5zeW5jT3ZlcmxheU9mZnNldCgpfXN5bmNPdmVybGF5T2Zmc2V0KCl7dGhpcy5jbG9uZSYmKHRoaXMuY2xvbmUu''@;'; put 'put ''d3RUYWJsZS5zcHJlYWRlci5zdHlsZS50b3A9Im51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yPy5zdGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA6IiIp''@;'; put 'put ''fXNjcm9sbFRvKGUsdCl7Y29uc3R7d3RTZXR0aW5nczpyfT10aGlzLGk9ci5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksbz1yLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IiksbD0odGhpcy53b3QuY2xvbmVTb3VyY2U/dGhpcy53b3QuY2xvbmVTb3VyY2U6dGhpcy53b3QpLnd0VGFi''@;'; put 'put ''bGUuaG9sZGVyLHU9MD09PW8mJmkubGVuZ3RoPjAmJiFMYShsLnBhcmVudE5vZGUsImlubmVyQm9yZGVySW5saW5lU3RhcnQiKT8xOjA7bGV0IGc9dGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLEU9MDtyZXR1cm4gdCYmdGhpcy53b3Qud3RUYWJsZS5nZXRDb2x1bW5XaWR0aChlKT50aGlz''@;'; put 'put ''LndvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0V2lkdGgoKSYmKHQ9ITEpLHQmJmwub2Zmc2V0V2lkdGghPT1sLmNsaWVudFdpZHRoJiYoRT1HZCh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCkpLHQ/KGcrPXRoaXMuc3VtQ2VsbFNpemVzKDAsZSsxKSxnLT10aGlzLndvdC53dFZpZXdw''@;'; put 'put ''b3J0LmdldFZpZXdwb3J0V2lkdGgoKSxnKz11KTpnKz10aGlzLnN1bUNlbGxTaXplcyh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSxlKSxnKz1FLG5BZSh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50KT09PWctdSYmdT4wJiZ0aGlzLndvdC53''@;'; put 'put ''dE92ZXJsYXlzLmV4cGFuZEhpZGVySG9yaXpvbnRhbGx5QnkodSksdGhpcy5zZXRTY3JvbGxQb3NpdGlvbihnKX1nZXRUYWJsZVBhcmVudE9mZnNldCgpe2xldCB0PTA7cmV0dXJuIXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKSYmdGhpcy50cmltbWluZ0Nv''@;'; put 'put ''bnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyYmKHQ9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXJPZmZzZXQubGVmdCksdH1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBNYXRoLmFicyhNc2UodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCx0aGlzLmRvbUJpbmRp''@;'; put 'put ''bmdzLnJvb3RXaW5kb3cpKX1nZXRPdmVybGF5T2Zmc2V0KCl7Y29uc3R7cm9vdFdpbmRvdzplfT10aGlzLmRvbUJpbmRpbmdzLHQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCByPTA7cmV0dXJuIHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1lfHx0''@;'; put 'put ''JiYiaG9yaXpvbnRhbCI9PT10fHwocj10aGlzLmlzUnRsKCk/TWF0aC5hYnMoTWF0aC5taW4odGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSwwKSk6TWF0aC5tYXgodGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLXRoaXMuZ2V0VGFibGVQYXJlbnRP''@;'; put 'put ''ZmZzZXQoKSwwKSxyPnRoaXMud290Lnd0VGFibGUuZ2V0VG90YWxXaWR0aCgpLSh0aGlzLmNsb25lP3RoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3RhbFdpZHRoKCk6MCkmJihyPTApKSxyfWFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihlKXtjb25zdHt3dFNldHRpbmdzOnR9PXRoaXMscj10''@;'; put 'put ''aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLGk9dC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksbz10LmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IiksYT10LmdldFNldHRpbmcoInRvdGFsUm93cyIpLGw9InZlcnRpY2FsIj09PXQuZ2V0U2V0dGluZygicHJldmVudE92''@;'; put 'put ''ZXJmbG93Iik7YT9rbyhyLCJlbXB0eVJvd3MiKTpZcihyLCJlbXB0eVJvd3MiKTtsZXQgdT0hMTtpZighbClpZihvJiYhaS5sZW5ndGgpWXIociwiaW5uZXJCb3JkZXJMZWZ0IGlubmVyQm9yZGVySW5saW5lU3RhcnQiKTtlbHNlIGlmKCFvJiZpLmxlbmd0aCl7Y29uc3QgZz1MYShyLCJpbm5l''@;'; put 'put ''ckJvcmRlcklubGluZVN0YXJ0Iik7ZT8oWXIociwiaW5uZXJCb3JkZXJMZWZ0IGlubmVyQm9yZGVySW5saW5lU3RhcnQiKSx1PSFnKTooa28ociwiaW5uZXJCb3JkZXJMZWZ0IGlubmVyQm9yZGVySW5saW5lU3RhcnQiKSx1PWcpfXJldHVybiB1fWNvbnN0cnVjdG9yKGUsdCxyLGkpe3N1cGVy''@;'; put 'put ''KGUsdCxxdixyLGkpfX1jbGFzcyB3bGUgZXh0ZW5kcyBLTXtjb25zdHJ1Y3RvcihlLHQscixpKXtzdXBlcihlLHQscixpLF93KX19WWwod2xlLEpBZSksWWwod2xlLHlsZSk7Y29uc3Qgb0F0PXdsZTtjbGFzcyBhQXQgZXh0ZW5kcyBUTHtjcmVhdGVUYWJsZSguLi5lKXtyZXR1cm4gbmV3IG9B''@;'; put 'put ''dCguLi5lKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJUb3BPdmVybGF5IikmJnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXkiKX1zZXRTY3JvbGxQb3NpdGlv''@;'; put 'put ''bihlKXtyZXR1cm4hMX1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVybiAwfWdldFRhYmxlUGFyZW50T2Zmc2V0KCl7cmV0dXJuIDB9Z2V0T3ZlcmxheU9mZnNldCgpe3JldHVybiAwfW9uU2Nyb2xsKCl7fXN1bUNlbGxTaXplcyhlLHQpe3JldHVybiAwfWFkanVzdEVsZW1lbnRzU2l6ZSgpe31h''@;'; put 'put ''cHBseVRvRE9NKCl7fXNjcm9sbFRvKGUsdCl7cmV0dXJuITF9cmVzZXRGaXhlZFBvc2l0aW9uKCl7aWYodGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLCF0aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlfHwhdGhpcy5jbG9uZSlyZXR1cm4hMTtjb25zdCBlPXRoaXMuY2xv''@;'; put 'put ''bmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTt0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P1VXKGUsdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpKih0aGlzLmlzUnRsKCk/LTE6MSkrInB4IixgJHt0aGlzLnRv''@;'; put 'put ''cE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpfXB4YCk6X0woZSk7bGV0IHQ9SGgodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtjb25zdCByPVpkKHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7cmV0dXJuIHRoaXMud290Lnd0VGFibGUuaGFzRGVmaW5lZFNpemUoKXx8KHQ9MCksZS5zdHls''@;'; put 'put ''ZS5oZWlnaHQ9YCR7dH1weGAsZS5zdHlsZS53aWR0aD1gJHtyfXB4YCwhMH1jb25zdHJ1Y3RvcihlLHQscixpLG8sYSl7c3VwZXIoZSx0LF93LHIsaSksdGhpcy50b3BPdmVybGF5PW8sdGhpcy5pbmxpbmVTdGFydE92ZXJsYXk9YX19Y2xhc3MgQ2xlIGV4dGVuZHMgS017Y29uc3RydWN0b3Io''@;'; put 'put ''ZSx0LHIsaSl7c3VwZXIoZSx0LHIsaSxLdil9fVlsKENsZSxja2UpLFlsKENsZSx5bGUpO2NvbnN0IHNBdD1DbGU7Y2xhc3MgbEF0IGV4dGVuZHMgVEx7Y3JlYXRlVGFibGUoLi4uZSl7cmV0dXJuIG5ldyBzQXQoLi4uZSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGlu''@;'; put 'put ''Z3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheSIpJiZ0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7Y29uc3R7d290OmV9PXRoaXM7dGhpcy51cGRhdGVUcmltbWluZ0Nv''@;'; put 'put ''bnRhaW5lcigpO2NvbnN0e2Nsb25lOnR9PXRoaXM7aWYoIWUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZXx8IXQpcmV0dXJuITE7Y29uc3Qgcj10Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7aWYoci5zdHlsZS50b3A9IiIsdGhpcy50cmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmlu''@;'; put 'put ''ZGluZ3Mucm9vdFdpbmRvdyl7Y29uc3QgYT10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCksbD10aGlzLndvdC53dFRhYmxlLlRBQkxFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHU9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0''@;'; put 'put ''KCksZz1NYXRoLm1heCgwLGwuYm90dG9tLXUuYm90dG9tKSxFPXRoaXMuYm90dG9tT3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCktZztyLnN0eWxlW3RoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09YCR7YX1weGAsci5zdHlsZS5ib3R0b209YCR7RX1weGB9ZWxzZSBfTChyKSx0aGlzLnJl''@;'; put 'put ''cG9zaXRpb25PdmVybGF5KCk7bGV0IGk9SGgodC53dFRhYmxlLlRBQkxFKTtjb25zdCBvPVpkKHQud3RUYWJsZS5UQUJMRSk7cmV0dXJuIHRoaXMud290Lnd0VGFibGUuaGFzRGVmaW5lZFNpemUoKXx8KGk9MCksci5zdHlsZS5oZWlnaHQ9YCR7aX1weGAsci5zdHlsZS53aWR0aD1gJHtvfXB4''@;'; put 'put ''YCwhMH1zZXRTY3JvbGxQb3NpdGlvbihlKXtyZXR1cm4hMX1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVybiAwfWdldFRhYmxlUGFyZW50T2Zmc2V0KCl7cmV0dXJuIDB9Z2V0T3ZlcmxheU9mZnNldCgpe3JldHVybiAwfW9uU2Nyb2xsKCl7fXN1bUNlbGxTaXplcyhlLHQpe3JldHVybiAwfWFk''@;'; put 'put ''anVzdEVsZW1lbnRzU2l6ZSgpe31hcHBseVRvRE9NKCl7fXNjcm9sbFRvKGUsdCl7cmV0dXJuITF9cmVwb3NpdGlvbk92ZXJsYXkoKXtpZighdGhpcy5jbG9uZSlyZXR1cm47Y29uc3R7d3RUYWJsZTplLHd0Vmlld3BvcnQ6dH09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpyfT10aGlzLmRvbUJp''@;'; put 'put ''bmRpbmdzLGk9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO2xldCBvPTA7dC5oYXNWZXJ0aWNhbFNjcm9sbCgpfHwobys9dC5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1lLmdldFRvdGFsSGVpZ2h0KCkpLHQuaGFzVmVydGljYWxTY3JvbGwoKSYmdC5oYXNIb3Jpem9udGFsU2Ny''@;'; put 'put ''b2xsKCkmJihvKz1HZChyKSksaS5zdHlsZS5ib3R0b209YCR7b31weGB9Y29uc3RydWN0b3IoZSx0LHIsaSxvLGEpe3N1cGVyKGUsdCxLdixyLGkpLHRoaXMuYm90dG9tT3ZlcmxheT1vLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5PWF9fWZ1bmN0aW9uIGZrZShuLGUpe2lmKGUuaGFzKG4pKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gcGtlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUg''@;'; put 'put ''ZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIHExKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIGNBdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4scGtlKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIFNsZShuLGUsdCl7ZmtlKG4sZSks''@;'; put 'put ''ZS5zZXQobix0KX1mdW5jdGlvbiBTNChuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIHVBdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIp''@;'; put 'put ''O2UudmFsdWU9dH19KG4scGtlKG4sZSwic2V0IiksdCksdH1mdW5jdGlvbiBGdShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiByNihuLGUpe2Zr''@;'; put 'put ''ZShuLGUpLGUuYWRkKG4pfXZhciBCZj1uZXcgV2Vha01hcCxFND1uZXcgV2Vha01hcCx5dz1uZXcgV2Vha01hcCxna2U9bmV3IFdlYWtTZXQsclk9bmV3IFdlYWtTZXQsaVk9bmV3IFdlYWtTZXQsbWtlPW5ldyBXZWFrU2V0LEVsZT1uZXcgV2Vha1NldCxRTT1uZXcgV2Vha1NldCxvWT1uZXcg''@;'; put 'put ''V2Vha1NldCx2a2U9bmV3IFdlYWtTZXQseEw9bmV3IFdlYWtTZXQsQUw9bmV3IFdlYWtTZXQ7Y2xhc3MgZEF0e3JlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3R7ZXZlbnRNYW5hZ2VyOmUsZG9tQmluZGluZ3M6e3Jvb3REb2N1bWVudDp0fX09cTEodGhpcyxCZik7cTEodGhpcyxFNCkmJihTNCh0''@;'; put 'put ''aGlzLEU0LCExKSxGdSh0aGlzLFFNLGtMKS5jYWxsKHRoaXMsInJlbGF0aXZlIiwwLDApKSxTNCh0aGlzLHl3LCExKSxlLmFkZEV2ZW50TGlzdGVuZXIodCwibW91c2Vkb3duIixyPT57ciBpbnN0YW5jZW9mIE1vdXNlRXZlbnQmJlM0KHRoaXMseXcsRnUodGhpcyx2a2UscEF0KS5jYWxsKHRo''@;'; put 'put ''aXMscikpfSksZS5hZGRFdmVudExpc3RlbmVyKHQsIm1vdXNldXAiLCgpPT57UzQodGhpcyx5dywhMSkscTEodGhpcyxFNCkmJnRoaXMuZGVhY3RpdmF0ZSgpfSl9dHJ5QWN0aXZhdGUoZSx0KXtxMSh0aGlzLHl3KSYmIXExKHRoaXMsRTQpJiYhaEwoKSYmKGV8fHQpJiZGdSh0aGlzLGdrZSxo''@;'; put 'put ''QXQpLmNhbGwodGhpcyl9c3luY09mZnNldHMoKXtpZighcTEodGhpcyxFNCkpcmV0dXJuO2NvbnN0IGU9cTEodGhpcyxCZikse3d0Vmlld3BvcnQ6dH09ZS53b3Qscj10LnJvd3NSZW5kZXJDYWxjdWxhdG9yPy5zdGFydFBvc2l0aW9uLGk9dC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcj8uc3Rh''@;'; put 'put ''cnRQb3NpdGlvbjtpZigibnVtYmVyIiE9dHlwZW9mIHJ8fCJudW1iZXIiIT10eXBlb2YgaSlyZXR1cm47Y29uc3Qgbz1yLUZ1KHRoaXMsclksTWxlKS5jYWxsKHRoaXMpLGE9aS1GdSh0aGlzLGlZLFRsZSkuY2FsbCh0aGlzKTtGdSh0aGlzLFFNLGtMKS5jYWxsKHRoaXMsInN0aWNreSIsbyxh''@;'; put 'put ''KX1kZXN0cm95KCl7cTEodGhpcyxFNCkmJkZ1KHRoaXMsUU0sa0wpLmNhbGwodGhpcywicmVsYXRpdmUiLDAsMCksUzQodGhpcyxFNCwhMSksUzQodGhpcyx5dywhMSl9ZGVhY3RpdmF0ZSgpe2NvbnN0IGU9cTEodGhpcyxCZiksdD1lLnd0VGFibGUuc3ByZWFkZXIse3d0Vmlld3BvcnQ6cn09''@;'; put 'put ''ZS53b3Qsbz1lLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpPyJyaWdodCI6ImxlZnQiO2UucmVmcmVzaEFsbCgpO2NvbnN0IGE9TnVtYmVyLnBhcnNlSW50KHQuc3R5bGUudG9wLDEwKXx8MCxsPU51bWJlci5wYXJzZUludCh0LnN0eWxlW29dLDEwKXx8MCx1PXIucm93c1JlbmRl''@;'; put 'put ''ckNhbGN1bGF0b3I/LnN0YXJ0UG9zaXRpb24sZz1yLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yPy5zdGFydFBvc2l0aW9uLEU9Im51bWJlciI9PXR5cGVvZiB1P3UtYTpGdSh0aGlzLHJZLE1sZSkuY2FsbCh0aGlzKSxPPSJudW1iZXIiPT10eXBlb2YgZz9nLWw6RnUodGhpcyxpWSxUbGUpLmNh''@;'; put 'put ''bGwodGhpcyk7RnUodGhpcyxta2UsZkF0KS5jYWxsKHRoaXMsRSxPKSxTNCh0aGlzLEU0LCExKSxGdSh0aGlzLFFNLGtMKS5jYWxsKHRoaXMsInJlbGF0aXZlIiwwLDApLGUucmVmcmVzaEFsbCgpLGUuYXBwbHlUb0RPTSgpfWNvbnN0cnVjdG9yKGUpe3I2KHRoaXMsZ2tlKSxyNih0aGlzLHJZ''@;'; put 'put ''KSxyNih0aGlzLGlZKSxyNih0aGlzLG1rZSkscjYodGhpcyxFbGUpLHI2KHRoaXMsUU0pLHI2KHRoaXMsb1kpLHI2KHRoaXMsdmtlKSxyNih0aGlzLHhMKSxyNih0aGlzLEFMKSxTbGUodGhpcyxCZix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksU2xlKHRoaXMsRTQse3dyaXRhYmxlOiEw''@;'; put 'put ''LHZhbHVlOnZvaWQgMH0pLFNsZSh0aGlzLHl3LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxTNCh0aGlzLEU0LCExKSxTNCh0aGlzLHl3LCExKSxTNCh0aGlzLEJmLGUpfX1mdW5jdGlvbiBoQXQoKXtjb25zdCBuPXExKHRoaXMsQmYpLGU9bi53dFRhYmxlLnNwcmVhZGVyLHI9bi53dFNl''@;'; put 'put ''dHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKT8icmlnaHQiOiJsZWZ0IixvPShOdW1iZXIucGFyc2VJbnQoZS5zdHlsZS50b3AsMTApfHwwKS1GdSh0aGlzLHJZLE1sZSkuY2FsbCh0aGlzKSxsPShOdW1iZXIucGFyc2VJbnQoZS5zdHlsZVtyXSwxMCl8fDApLUZ1KHRoaXMsaVksVGxlKS5j''@;'; put 'put ''YWxsKHRoaXMpO1M0KHRoaXMsRTQsITApLEZ1KHRoaXMsUU0sa0wpLmNhbGwodGhpcywic3RpY2t5IixvLGwpfWZ1bmN0aW9uIE1sZSgpe2NvbnN0e3RvcE92ZXJsYXk6bn09cTEodGhpcyxCZik7cmV0dXJuIG4uZ2V0U2Nyb2xsUG9zaXRpb24oKS1uLmdldFRhYmxlUGFyZW50T2Zmc2V0KCl9''@;'; put 'put ''ZnVuY3Rpb24gVGxlKCl7Y29uc3R7aW5saW5lU3RhcnRPdmVybGF5Om59PXExKHRoaXMsQmYpO3JldHVybiBGdSh0aGlzLEFMLHNZKS5jYWxsKHRoaXMpJiZGdSh0aGlzLHhMLGFZKS5jYWxsKHRoaXMpP01hdGguYWJzKG4uZ2V0U2Nyb2xsUG9zaXRpb24oKSk6TWF0aC5hYnMobi5nZXRTY3Jv''@;'; put 'put ''bGxQb3NpdGlvbigpKS1uLmdldFRhYmxlUGFyZW50T2Zmc2V0KCl9ZnVuY3Rpb24gZkF0KG4sZSl7Y29uc3QgdD1xMSh0aGlzLEJmKTtpZihGdSh0aGlzLHhMLGFZKS5jYWxsKHRoaXMpKXtjb25zdHtyb290V2luZG93OnJ9PXQuZG9tQmluZGluZ3MsaT1GdSh0aGlzLEFMLHNZKS5jYWxsKHRo''@;'; put 'put ''aXMpP2U6ZSt0LmlubGluZVN0YXJ0T3ZlcmxheS5nZXRUYWJsZVBhcmVudE9mZnNldCgpO3Iuc2Nyb2xsVG8oaSxuK3QudG9wT3ZlcmxheS5nZXRUYWJsZVBhcmVudE9mZnNldCgpKX1lbHNlIHQud3RUYWJsZS5ob2xkZXIuc2Nyb2xsVG9wPW4sdC53dFRhYmxlLmhvbGRlci5zY3JvbGxMZWZ0''@;'; put 'put ''PUZ1KHRoaXMsQUwsc1kpLmNhbGwodGhpcyk/LWU6ZX1mdW5jdGlvbiBfa2Uobil7bi5zdHlsZS50b3A9IiIsbi5zdHlsZS5ib3R0b209IiIsbi5zdHlsZS5sZWZ0PSIiLG4uc3R5bGUucmlnaHQ9IiJ9ZnVuY3Rpb24ga0wobixlLHQpe2NvbnN0IHI9cTEodGhpcyxCZiksaT1yLnd0VGFibGUu''@;'; put 'put ''c3ByZWFkZXIsbz1GdSh0aGlzLEFMLHNZKS5jYWxsKHRoaXMpLGE9bz8icmlnaHQiOiJsZWZ0IixsPSJzdGlja3kiPT09bjtpLnN0eWxlLnBvc2l0aW9uPW4sbD8oaS5zdHlsZS50b3A9YCR7ZX1weGAsaS5zdHlsZS5ib3R0b209IiIsaS5zdHlsZVthXT1gJHt0fXB4YCxpLnN0eWxlW28/Imxl''@;'; put 'put ''ZnQiOiJyaWdodCJdPSIiKTpGdSh0aGlzLEVsZSxfa2UpLmNhbGwodGhpcyxpKSwhRnUodGhpcyx4TCxhWSkuY2FsbCh0aGlzKSYmKEZ1KHRoaXMsb1kseGxlKS5jYWxsKHRoaXMsci5pbmxpbmVTdGFydE92ZXJsYXksbixsLGUsbnVsbCxvKSxGdSh0aGlzLG9ZLHhsZSkuY2FsbCh0aGlzLHIu''@;'; put 'put ''dG9wT3ZlcmxheSxuLGwsbnVsbCx0LG8pLEZ1KHRoaXMsb1kseGxlKS5jYWxsKHRoaXMsci5ib3R0b21PdmVybGF5LG4sbCxudWxsLHQsbykpfWZ1bmN0aW9uIHhsZShuLGUsdCxyLGksbyl7aWYoIW4ubmVlZEZ1bGxSZW5kZXJ8fCFuLmNsb25lKXJldHVybjtjb25zdCBhPW4uY2xvbmUud3RU''@;'; put 'put ''YWJsZS5zcHJlYWRlcixsPW8/InJpZ2h0IjoibGVmdCI7YS5zdHlsZS5wb3NpdGlvbj1lLHQ/KG51bGwhPT1yJiYoYS5zdHlsZS50b3A9YCR7cn1weGApLG51bGwhPT1pJiYoYS5zdHlsZVtsXT1gJHtpfXB4YCxhLnN0eWxlW28/ImxlZnQiOiJyaWdodCJdPSIiKSk6RnUodGhpcyxFbGUsX2tl''@;'; put 'put ''KS5jYWxsKHRoaXMsYSl9ZnVuY3Rpb24gcEF0KG4pe3JldHVybiBGdSh0aGlzLHhMLGFZKS5jYWxsKHRoaXMpP24udGFyZ2V0PT09cTEodGhpcyxCZikuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudDpuLnRhcmdldD09PXExKHRoaXMsQmYpLnNjcm9sbGFibGVFbGVt''@;'; put 'put ''ZW50fWZ1bmN0aW9uIGFZKCl7cmV0dXJuIHExKHRoaXMsQmYpLnNjcm9sbGFibGVFbGVtZW50PT09cTEodGhpcyxCZikuZG9tQmluZGluZ3Mucm9vdFdpbmRvd31mdW5jdGlvbiBzWSgpe3JldHVybiBxMSh0aGlzLEJmKS53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKX1mdW5jdGlv''@;'; put 'put ''biB5a2UobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGJrZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0''@;'; put 'put ''dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBfMShuLGUpe3JldHVybiBmdW5jdGlvbiBnQXQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLGJrZShuLGUsImdldCIpKX1mdW5j''@;'; put 'put ''dGlvbiBYdihuLGUsdCl7eWtlKG4sZSksZS5zZXQobix0KX1mdW5jdGlvbiB5MShuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIG1BdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCBy''@;'; put 'put ''ZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4sYmtlKG4sZSwic2V0IiksdCksdH1mdW5jdGlvbiBSTChuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1''@;'; put 'put ''cm4gdH1mdW5jdGlvbiBsWShuLGUpe3lrZShuLGUpLGUuYWRkKG4pfXZhciBidz1uZXcgV2Vha01hcCxJTD1uZXcgV2Vha01hcCxETD1uZXcgV2Vha01hcCxMTD1uZXcgV2Vha01hcCx3dz1uZXcgV2Vha01hcCxRdj1uZXcgV2Vha01hcCxjWT1uZXcgV2Vha01hcCxDdz1uZXcgV2Vha01hcCx3''@;'; put 'put ''a2U9bmV3IFdlYWtTZXQsQ2tlPW5ldyBXZWFrU2V0LFNrZT1uZXcgV2Vha1NldCxBbGU9bmV3IFdlYWtTZXQ7ZnVuY3Rpb24geUF0KCl7eTEodGhpcyxETCx0aGlzLnRvcE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSkseTEodGhpcyxMTCx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRT''@;'; put 'put ''Y3JvbGxQb3NpdGlvbigpKX1mdW5jdGlvbiBiQXQoKXtjb25zdCBuPXRoaXMudG9wT3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpO3JldHVybiBfMSh0aGlzLERMKSE9PW4mJih5MSh0aGlzLERMLG4pLCEwKX1mdW5jdGlvbiB3QXQoKXtjb25zdCBuPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5''@;'; put 'put ''LmdldFNjcm9sbFBvc2l0aW9uKCk7cmV0dXJuIF8xKHRoaXMsTEwpIT09biYmKHkxKHRoaXMsTEwsbiksITApfWZ1bmN0aW9uIEVrZSgpe3RoaXMuZGVzdHJveWVkfHx0aGlzLnVwZGF0ZUxhc3RTcHJlYWRlclNpemUoKSYmdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKX1jb25zdCBDQXQ9Y2xh''@;'; put 'put ''c3MgX0F0e2dldE92ZXJsYXlzKGU9ITEpe2NvbnN0IHQ9Wy4uLl8xKHRoaXMsYncpXTtyZXR1cm4gZSYmdC5wdXNoKHRoaXMud3RUYWJsZSksdH1pbml0QnJvd3NlckxpbmVIZWlnaHQoKXtjb25zdHtyb290V2luZG93OmUscm9vdERvY3VtZW50OnR9PXRoaXMuZG9tQmluZGluZ3Mscj1lLmdl''@;'; put 'put ''dENvbXB1dGVkU3R5bGUodC5ib2R5KSxpPXBhcnNlSW50KHIubGluZUhlaWdodCwxMCksbz0xLjIqcGFyc2VJbnQoci5mb250U2l6ZSwxMCk7dGhpcy5icm93c2VyTGluZUhlaWdodD1pfHxvfWluaXRPdmVybGF5cygpe2NvbnN0IGU9W3RoaXMud290LHRoaXMuZmFjYWRlR2V0dGVyLHRoaXMu''@;'; put 'put ''d3RTZXR0aW5ncyx0aGlzLmRvbUJpbmRpbmdzXTt0aGlzLnRvcE92ZXJsYXk9bmV3IFh4dChlWzBdLGVbMV0sZVsyXSxlWzNdKSx0aGlzLmJvdHRvbU92ZXJsYXk9bmV3IGVBdChlWzBdLGVbMV0sZVsyXSxlWzNdKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheT1uZXcgaUF0KGVbMF0sZVsxXSxl''@;'; put 'put ''WzJdLGVbM10pLHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5PW5ldyBhQXQoZVswXSxlWzFdLGVbMl0sZVszXSx0aGlzLnRvcE92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkpLHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5PW5ldyBsQXQoZVswXSxlWzFd''@;'; put 'put ''LGVbMl0sZVszXSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkpLHkxKHRoaXMsYncsW3RoaXMudG9wT3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5i''@;'; put 'put ''b3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldKX1iZWZvcmVEcmF3KCl7eTEodGhpcyxJTCxfMSh0aGlzLGJ3KS5yZWR1Y2UoKGUsdCk9PnQuaGFzUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCl8fGUsITEpKSxfMSh0aGlzLGJ3KS5mb3JFYWNoKGU9PmUudXBkYXRlU3RhdGVPZlJlbmRlcmlu''@;'; put 'put ''ZygiYmVmb3JlIikpfWFmdGVyRHJhdygpe3RoaXMuc3luY1Njcm9sbFdpdGhNYXN0ZXIoKSxfMSh0aGlzLGJ3KS5mb3JFYWNoKGU9Pntjb25zdCB0PWUuaGFzUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCk7ZS51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCJhZnRlciIpLHQmJiFlLm5lZWRGdWxsUmVu''@;'; put 'put ''ZGVyJiZlLnJlc2V0KCl9KX1yZWZyZXNoQWxsKCl7aWYodGhpcy53b3QuZHJhd24pe2lmKCF0aGlzLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuIHZvaWQgdGhpcy5kZXN0cm95KCk7dGhpcy53b3QuZHJhdyghMCksdGhpcy52ZXJ0aWNhbFNjcm9sbGluZyYmUkwodGhpcyxDa2Us''@;'; put 'put ''YkF0KS5jYWxsKHRoaXMpJiZ0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5vblNjcm9sbCgpLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZyYmUkwodGhpcyxTa2Usd0F0KS5jYWxsKHRoaXMpJiZ0aGlzLnRvcE92ZXJsYXkub25TY3JvbGwoKSx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nPSExLHRoaXMu''@;'; put 'put ''aG9yaXpvbnRhbFNjcm9sbGluZz0hMX19cmVnaXN0ZXJMaXN0ZW5lcnMoKXtjb25zdHtyb290RG9jdW1lbnQ6ZSxyb290V2luZG93OnR9PXRoaXMuZG9tQmluZGluZ3Mse21haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50OnJ9PXRoaXMudG9wT3ZlcmxheSx7bWFpblRhYmxlU2Nyb2xsYWJsZUVs''@;'; put 'put ''ZW1lbnQ6aX09dGhpcy5pbmxpbmVTdGFydE92ZXJsYXk7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihlLmRvY3VtZW50RWxlbWVudCwia2V5ZG93biIsRT0+dGhpcy5vbktleURvd24oRSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZS5kb2N1bWVudEVs''@;'; put 'put ''ZW1lbnQsImtleXVwIiwoKT0+dGhpcy5vbktleVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZSwidmlzaWJpbGl0eWNoYW5nZSIsKCk9PnRoaXMub25LZXlVcCgpKSxfMSh0aGlzLEN3KS5yZWdpc3Rlckxpc3RlbmVycygpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2''@;'; put 'put ''ZW50TGlzdGVuZXIociwic2Nyb2xsIixFPT50aGlzLm9uVGFibGVTY3JvbGwoRSkse3Bhc3NpdmU6ITB9KSxyIT09aSYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihpLCJzY3JvbGwiLEU9PnRoaXMub25UYWJsZVNjcm9sbChFKSx7cGFzc2l2ZTohMH0pO2NvbnN0IG89dGhp''@;'; put 'put ''cy5zY3JvbGxhYmxlRWxlbWVudD09PXQsYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudFdoZWVsIiksbD17cGFzc2l2ZTpvfTtsZXQgZzt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LCJ3aGVlbCIsRT0+dGhp''@;'; put 'put ''cy5vbkNsb25lV2hlZWwoRSxhKSxsKSxbdGhpcy50b3BPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0uZm9yRWFjaChFPT57''@;'; put 'put ''RS5jbG9uZSYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihFLmNsb25lLnd0VGFibGUuaG9sZGVyLCJ3aGVlbCIsTz0+dGhpcy5vbkNsb25lV2hlZWwoTyxhKSxsKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodCwicmVzaXplIiwoKT0+e3VMKCgpPT57''@;'; put 'put ''Y2xlYXJUaW1lb3V0KGcpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbldpbmRvd1Jlc2l6ZSIpLGc9c2V0VGltZW91dCgoKT0+e3kxKHRoaXMsd3csMCl9LDIwMCl9KX0pLG98fHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudEVsZW1lbnQmJnRoaXMucmVzaXplT2JzZXJ2''@;'; put 'put ''ZXIub2JzZXJ2ZSh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnRFbGVtZW50KX1vblRhYmxlU2Nyb2xsKGUpe2NvbnN0IHQ9dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LHI9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsaT10aGlz''@;'; put 'put ''LnRvcE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsbz1lLnRhcmdldDt0aGlzLmtleVByZXNzZWQmJihpIT09dCYmbyE9PXQmJiEoaSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZBYShlKS5jb250YWlucyhpKSl8fHIhPT10JiZvIT09dCYmIShyIGluc3RhbmNlb2YgSFRNTEVs''@;'; put 'put ''ZW1lbnQmJkFhKGUpLmNvbnRhaW5zKHIpKSl8fHRoaXMuc3luY1Njcm9sbFBvc2l0aW9ucygpfW9uQ2xvbmVXaGVlbChlLHQpe2lmKGUuY3RybEtleSlyZXR1cm47Y29uc3R7cm9vdFdpbmRvdzpyfT10aGlzLmRvbUJpbmRpbmdzLGk9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkubWFpblRhYmxl''@;'; put 'put ''U2Nyb2xsYWJsZUVsZW1lbnQsbz10aGlzLnRvcE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsYT1lLnRhcmdldCxsPW8hPT1yJiZhIT09ciYmIShhIGluc3RhbmNlb2YgTm9kZSYmbyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZhLmNvbnRhaW5zKG8pKSx1PWkhPT1yJiZhIT09''@;'; put 'put ''ciYmIShhIGluc3RhbmNlb2YgTm9kZSYmaSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZhLmNvbnRhaW5zKGkpKTtpZih0aGlzLmtleVByZXNzZWQmJihsfHx1KXx8dGhpcy5zY3JvbGxhYmxlRWxlbWVudD09PXIpcmV0dXJuO2NvbnN0IGc9dGhpcy50cmFuc2xhdGVNb3VzZVdoZWVsVG9TY3Jv''@;'; put 'put ''bGwoZSk7KHR8fHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQhPT1yJiZnKSYmZS5wcmV2ZW50RGVmYXVsdCgpfW9uS2V5RG93bihlKXt0aGlzLmtleVByZXNzZWQ9aHcoZS5rZXlDb2RlLCJBUlJPV19VUHxBUlJPV19SSUdIVHxBUlJPV19ET1dOfEFSUk9XX0xFRlQiKX1vbktleVVwKCl7dGhpcy5r''@;'; put 'put ''ZXlQcmVzc2VkPSExfXRyYW5zbGF0ZU1vdXNlV2hlZWxUb1Njcm9sbChlKXtsZXQgdCxyOyFmdW5jdGlvbiB2QXQobil7cmV0dXJuIndoZWVsRGVsdGFZImluIG58fCJ3aGVlbERlbHRhWCJpbiBufShlKT8odD1lLmRlbHRhWSxyPWUuZGVsdGFYKToodD1pc05hTihlLmRlbHRhWSk/LTEqKGUu''@;'; put 'put ''d2hlZWxEZWx0YVk/PzApOmUuZGVsdGFZLHI9aXNOYU4oZS5kZWx0YVgpPy0xKihlLndoZWVsRGVsdGFYPz8wKTplLmRlbHRhWCksMT09PWUuZGVsdGFNb2RlJiYocis9cip0aGlzLmJyb3dzZXJMaW5lSGVpZ2h0LHQrPXQqdGhpcy5icm93c2VyTGluZUhlaWdodCk7Y29uc3QgaT10aGlzLnNj''@;'; put 'put ''cm9sbFZlcnRpY2FsbHkodCksbz10aGlzLnNjcm9sbEhvcml6b250YWxseShyKTtyZXR1cm4gaXx8b31zY3JvbGxWZXJ0aWNhbGx5KGUpe2lmKCEodGhpcy5zY3JvbGxhYmxlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSlyZXR1cm4hMTtjb25zdCB0PXRoaXMuc2Nyb2xsYWJsZUVs''@;'; put 'put ''ZW1lbnQscj10LnNjcm9sbFRvcDtyZXR1cm4gdC5zY3JvbGxUb3ArPWUsciE9PXQuc2Nyb2xsVG9wfXNjcm9sbEhvcml6b250YWxseShlKXtpZighKHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpcmV0dXJuITE7Y29uc3QgdD10aGlzLnNjcm9sbGFibGVF''@;'; put 'put ''bGVtZW50LHI9dC5zY3JvbGxMZWZ0O3JldHVybiB0LnNjcm9sbExlZnQrPWUsciE9PXQuc2Nyb2xsTGVmdH1zeW5jU2Nyb2xsUG9zaXRpb25zKCl7aWYodGhpcy5kZXN0cm95ZWQpcmV0dXJuO2NvbnN0IGU9dGhpcy50b3BPdmVybGF5LmNsb25lPy53dFRhYmxlLmhvbGRlcix0PXRoaXMuaW5s''@;'; put 'put ''aW5lU3RhcnRPdmVybGF5LmNsb25lPy53dFRhYmxlLmhvbGRlcixyPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgaT10aGlzLnNjcm9sbGFibGVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ/dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3Jv''@;'; put 'put ''bGxMZWZ0OjAsbz10aGlzLnNjcm9sbGFibGVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ/dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3A6MDtpZih0aGlzLndvdC53dFZpZXdwb3J0LmlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkmJigiYm9vbGVhbiI9PXR5''@;'; put 'put ''cGVvZiByJiZyfHwiaG9yaXpvbnRhbCIhPT1yKSYmdGhpcy5zY3JvbGxhYmxlRWxlbWVudCBpbnN0YW5jZW9mIFdpbmRvdyYmKGk9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxYKSx0aGlzLndvdC53dFZpZXdwb3J0LmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpJiYoImJv''@;'; put 'put ''b2xlYW4iPT10eXBlb2YgciYmcnx8InZlcnRpY2FsIiE9PXIpJiZ0aGlzLnNjcm9sbGFibGVFbGVtZW50IGluc3RhbmNlb2YgV2luZG93JiYobz10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFkpLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZz10aGlzLmxhc3RTY3JvbGxYIT09aSx0aGlz''@;'; put 'put ''LnZlcnRpY2FsU2Nyb2xsaW5nPXRoaXMubGFzdFNjcm9sbFkhPT1vLHRoaXMubGFzdFNjcm9sbFg9aSx0aGlzLmxhc3RTY3JvbGxZPW8sXzEodGhpcyxDdykudHJ5QWN0aXZhdGUodGhpcy52ZXJ0aWNhbFNjcm9sbGluZyx0aGlzLmhvcml6b250YWxTY3JvbGxpbmcpLHRoaXMuaG9yaXpvbnRh''@;'; put 'put ''bFNjcm9sbGluZyl7aHMoZSkmJihlLnNjcm9sbExlZnQ9aSk7Y29uc3QgYT10aGlzLmJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXI/dGhpcy5ib3R0b21PdmVybGF5LmNsb25lPy53dFRhYmxlLmhvbGRlcjpudWxsO2EmJihhLnNjcm9sbExlZnQ9aSl9dGhpcy52ZXJ0aWNhbFNjcm9sbGlu''@;'; put 'put ''ZyYmaHModCkmJih0LnNjcm9sbFRvcD10aGlzLndvdC53dFZpZXdwb3J0LmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpPzA6byksdGhpcy5yZWZyZXNoQWxsKCksXzEodGhpcyxDdykuc3luY09mZnNldHMoKX1zeW5jU2Nyb2xsV2l0aE1hc3Rlcigpe2lmKCFfMSh0aGlzLElMKSly''@;'; put 'put ''ZXR1cm47Y29uc3QgZT10aGlzLnRvcE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ7aWYoIShlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKXJldHVybjtjb25zdHtzY3JvbGxMZWZ0OnQsc2Nyb2xsVG9wOnJ9PWU7dGhpcy50b3BPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiZ0aGlz''@;'; put 'put ''LnRvcE92ZXJsYXkuY2xvbmUmJih0aGlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIuc2Nyb2xsTGVmdD10KSx0aGlzLmJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJnRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZSYmKHRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxl''@;'; put 'put ''LmhvbGRlci5zY3JvbGxMZWZ0PXQpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZSYmKHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLnNjcm9sbFRvcD1yKSx5MSh0aGlzLElMLCEx''@;'; put 'put ''KX11cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuY2xlYXJFdmVudHMoITApLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpLHRoaXMudG9wT3ZlcmxheS51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQo''@;'; put 'put ''KSx0aGlzLmJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJnRoaXMuYm90dG9tT3ZlcmxheS51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQoKTtjb25zdHt3dFRhYmxlOmV9PXRoaXMse3Jvb3RXaW5kb3c6dH09dGhpcy5kb21CaW5kaW5ncyxyPWUud3RSb290RWxlbWVudC5wYXJlbnRO''@;'; put 'put ''b2RlLGk9bnVsbCE9PXImJjE9PT1yLm5vZGVUeXBlP3QuZ2V0Q29tcHV0ZWRTdHlsZShyKS5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpOiIiO3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9ImhpZGRlbiI9PT1pfHwiY2xpcCI9PT1pP2UuaG9sZGVyOm1MKGUuVEFCTEUpLHRoaXMucmVnaXN0''@;'; put 'put ''ZXJMaXN0ZW5lcnMoKX1kZXN0cm95KCl7XzEodGhpcyxjWSkuY2FuY2VsKCksbnVsbCE9PV8xKHRoaXMsUXYpJiYoY2xlYXJUaW1lb3V0KF8xKHRoaXMsUXYpKSx5MSh0aGlzLFF2LG51bGwpKSx0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSxfMSh0aGlzLEN3KS5kZXN0cm95KCks''@;'; put 'put ''dGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpLHRoaXMudG9wT3ZlcmxheS5kZXN0cm95KCksdGhpcy5ib3R0b21PdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbU92ZXJsYXkuZGVzdHJveSgpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmRlc3Ryb3koKSx0aGlzLnRvcElubGluZVN0YXJ0Q29y''@;'; put 'put ''bmVyT3ZlcmxheSYmdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZGVzdHJveSgpLHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92''@;'; put 'put ''ZXJsYXkuZGVzdHJveSgpLHRoaXMuZGVzdHJveWVkPSEwfXJlZnJlc2goZT0hMSl7dGhpcy52ZXJ0aWNhbFNjcm9sbGluZ3x8dGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nP18xKHRoaXMsY1kpLmNhbGwodGhpcyk6UkwodGhpcyxBbGUsRWtlKS5jYWxsKHRoaXMpLHRoaXMuYm90dG9tT3Zlcmxh''@;'; put 'put ''eS5jbG9uZSYmdGhpcy5ib3R0b21PdmVybGF5LnJlZnJlc2goZSksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkucmVmcmVzaChlKSx0aGlzLnRvcE92ZXJsYXkucmVmcmVzaChlKSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJs''@;'; put 'put ''YXkucmVmcmVzaChlKSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlZnJlc2goZSl9dXBkYXRlTGFzdFNwcmVhZGVyU2l6ZSgp''@;'; put 'put ''e2NvbnN0IGU9dGhpcy53dFRhYmxlLnNwcmVhZGVyLHQ9ZS5jbGllbnRXaWR0aCxyPWUuY2xpZW50SGVpZ2h0LGk9dCE9PXRoaXMuc3ByZWFkZXJMYXN0U2l6ZS53aWR0aHx8ciE9PXRoaXMuc3ByZWFkZXJMYXN0U2l6ZS5oZWlnaHQ7cmV0dXJuIGkmJih0aGlzLnNwcmVhZGVyTGFzdFNpemUu''@;'; put 'put ''d2lkdGg9dCx0aGlzLnNwcmVhZGVyTGFzdFNpemUuaGVpZ2h0PXIpLGl9YWRqdXN0RWxlbWVudHNTaXplKCl7Y29uc3R7d3RWaWV3cG9ydDplfT10aGlzLndvdCx7d3RUYWJsZTp0fT10aGlzLHtyb290V2luZG93OnJ9PXRoaXMuZG9tQmluZGluZ3MsaT10aGlzLnNjcm9sbGFibGVFbGVtZW50''@;'; put 'put ''PT09cixvPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxsPWUuZ2V0Um93SGVhZGVyV2lkdGgoKSx1PWUuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCksZz10aGlzLnd0U2V0dGluZ3MuZ2V0''@;'; put 'put ''U2V0dGluZygiZXh0ZXJuYWxSb3dDYWxjdWxhdG9yIik/MDoxLEU9dSt0aGlzLnRvcE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsYSkrZyxPPWwrdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsbyksZWU9dC5oaWRlci5zdHlsZSxIZT0oKCk9PiFpJiZ0aGlzLnNjcm9sbGFi''@;'; put 'put ''bGVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJnRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wPk1hdGgubWF4KDAsRS10LmhvbGRlci5jbGllbnRIZWlnaHQpKSgpPzE6MCxXZT0oKCk9PiFpJiZ0aGlzLnNjcm9sbGFibGVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1l''@;'; put 'put ''bnQmJnRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdD5NYXRoLm1heCgwLE8tdC5ob2xkZXIuY2xpZW50V2lkdGgpKSgpPzE6MDtlZS53aWR0aD1gJHtPK1dlfXB4YCxlZS5oZWlnaHQ9YCR7RStIZX1weGAsdGhpcy50b3BPdmVybGF5LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMu''@;'; put 'put ''aW5saW5lU3RhcnRPdmVybGF5LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuYm90dG9tT3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUoKX1leHBhbmRIaWRlclZlcnRpY2FsbHlCeShlKXtjb25zdHt3dFRhYmxlOnR9PXRoaXM7dC5oaWRlci5zdHlsZS5oZWlnaHQ9YCR7cGFyc2VJbnQodC5o''@;'; put 'put ''aWRlci5zdHlsZS5oZWlnaHQsMTApK2V9cHhgfWV4cGFuZEhpZGVySG9yaXpvbnRhbGx5QnkoZSl7Y29uc3R7d3RUYWJsZTp0fT10aGlzO3QuaGlkZXIuc3R5bGUud2lkdGg9YCR7cGFyc2VJbnQodC5oaWRlci5zdHlsZS53aWR0aCwxMCkrZX1weGB9YXBwbHlUb0RPTSgpe3RoaXMud3RUYWJs''@;'; put 'put ''ZS5pc1Zpc2libGUoKSYmKHRoaXMudG9wT3ZlcmxheS5hcHBseVRvRE9NKCksdGhpcy5ib3R0b21PdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbU92ZXJsYXkuYXBwbHlUb0RPTSgpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmFwcGx5VG9ET00oKSxfMSh0aGlzLEN3KS5zeW5jT2Zmc2V0cygp''@;'; put 'put ''KX1nZXRQYXJlbnRPdmVybGF5KGUpe2lmKCFlKXJldHVybiBudWxsO2xldCByPW51bGw7cmV0dXJuIFhuKFt0aGlzLnRvcE92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuYm90dG9t''@;'; put 'put ''SW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XSxpPT57aSYmaS5jbG9uZSYmaS5jbG9uZS53dFRhYmxlLlRBQkxFLmNvbnRhaW5zKGUpJiYocj1pLmNsb25lKX0pLHJ9c3luY092ZXJsYXlUYWJsZUNsYXNzTmFtZXMoKXtjb25zdCBlPXRoaXMud3RUYWJsZS5UQUJMRTtYbihbdGhpcy50b3BPdmVy''@;'; put 'put ''bGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0scj0+e3ImJnIuY2xvbmUmJihyLmNsb25lLnd0VGFibGUuVEFCTEUuY2xhc3NOYW1l''@;'; put 'put ''PWUuY2xhc3NOYW1lKX0pfWNvbnN0cnVjdG9yKGUsdCxyLGksbyxhKXtsWSh0aGlzLHdrZSksbFkodGhpcyxDa2UpLGxZKHRoaXMsU2tlKSxsWSh0aGlzLEFsZSksWHYodGhpcyxidyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksWHYodGhpcyxJTCx7d3JpdGFibGU6ITAsdmFsdWU6dm9p''@;'; put 'put ''ZCAwfSksWHYodGhpcyxETCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksWHYodGhpcyxMTCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksWHYodGhpcyx3dyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksWHYodGhpcyxRdix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksWHYo''@;'; put 'put ''dGhpcyxjWSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksWHYodGhpcyxDdyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdGhpcy5zY3JvbGxiYXJTaXplPTAsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5rZXlQcmVzc2VkPSExLHRoaXMuc3ByZWFkZXJMYXN0U2l6ZT17d2lkdGg6bnVs''@;'; put 'put ''bCxoZWlnaHQ6bnVsbH0sdGhpcy52ZXJ0aWNhbFNjcm9sbGluZz0hMSx0aGlzLmhvcml6b250YWxTY3JvbGxpbmc9ITEsdGhpcy5sYXN0U2Nyb2xsWD0wLHRoaXMubGFzdFNjcm9sbFk9MCx5MSh0aGlzLGJ3LFtdKSx5MSh0aGlzLElMLCExKSx5MSh0aGlzLERMLG51bGwpLHkxKHRoaXMsTEws''@;'; put 'put ''bnVsbCkseTEodGhpcyx3dywwKSx5MSh0aGlzLFF2LG51bGwpLHkxKHRoaXMsY1ksQk0oUkwodGhpcyxBbGUsRWtlKS5iaW5kKHRoaXMpLDIwMCkpLHkxKHRoaXMsQ3csbmV3IGRBdCh0aGlzKSksdGhpcy5yZXNpemVPYnNlcnZlcj1uZXcgUmVzaXplT2JzZXJ2ZXIoTz0+e3VMKCgpPT57IUFy''@;'; put 'put ''cmF5LmlzQXJyYXkoTyl8fCFPLmxlbmd0aHx8KHkxKHRoaXMsd3csXzEodGhpcyx3dykrMSksMzAwPT09XzEodGhpcyx3dykmJihIYSgiVGhlIFJlc2l6ZU9ic2VydmVyIGNhbGxiYWNrIHdhcyBmaXJlZCB0b28gbWFueSB0aW1lcyBpbiBkaXJlY3Qgc3VjY2Vzc2lvbi5cblRoaXMgbWF5IGJl''@;'; put 'put ''IGR1ZSB0byBhbiBpbmZpbml0ZSBsb29wIGNhdXNlZCBieSBzZXR0aW5nIGEgZHluYW1pYyBoZWlnaHQvd2lkdGggKGZvciBleGFtcGxlLCB3aXRoIHRoZSBgZHZoYCB1bml0cykgdG8gYSBIYW5kc29udGFibGUgY29udGFpbmVyJ3MgcGFyZW50LiBcblRoZSBvYnNlcnZlciB3aWxsIGJlIGRp''@;'; put 'put ''c2Nvbm5lY3RlZC4iKSx0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSksbnVsbCE9PV8xKHRoaXMsUXYpJiZjbGVhclRpbWVvdXQoXzEodGhpcyxRdikpLHkxKHRoaXMsUXYsc2V0VGltZW91dCgoKT0+e3kxKHRoaXMsd3csMCl9LDEwMCkpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0''@;'; put 'put ''aW5nKCJvbkNvbnRhaW5lckVsZW1lbnRSZXNpemUiKSl9KX0pLHRoaXMud290PWUsdGhpcy53dFNldHRpbmdzPWksdGhpcy5kb21CaW5kaW5ncz1yLHRoaXMuZmFjYWRlR2V0dGVyPXQsdGhpcy53dFRhYmxlPWE7Y29uc3R7cm9vdERvY3VtZW50Omwscm9vdFdpbmRvdzp1fT10aGlzLmRvbUJp''@;'; put 'put ''bmRpbmdzO3RoaXMuaW5zdGFuY2U9dGhpcy53b3QsdGhpcy5ldmVudE1hbmFnZXI9byx0aGlzLnNjcm9sbGJhclNpemU9R2QobCk7Y29uc3QgZz1hLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSxFPW51bGwhPT1nJiYxPT09Zy5ub2RlVHlwZSYmKCgpPT57Y29uc3QgTz11LmdldENvbXB1dGVk''@;'; put 'put ''U3R5bGUoZykuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKTtyZXR1cm4iaGlkZGVuIj09PU98fCJjbGlwIj09PU99KSgpO3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9RT9hLmhvbGRlcjptTChhLlRBQkxFKSx0aGlzLmluaXRPdmVybGF5cygpLFJMKHRoaXMsd2tlLHlBdCkuY2FsbCh0aGlz''@;'; put 'put ''KSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmtleVByZXNzZWQ9ITEsdGhpcy5zcHJlYWRlckxhc3RTaXplPXt3aWR0aDpudWxsLGhlaWdodDpudWxsfSx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nPSExLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZz0hMSx0aGlzLmluaXRCcm93c2VyTGluZUhlaWdo''@;'; put 'put ''dCgpLHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKSx0aGlzLmxhc3RTY3JvbGxYPXUuc2Nyb2xsWCx0aGlzLmxhc3RTY3JvbGxZPXUuc2Nyb2xsWX19O2NsYXNzIFNBdHtnZXREZWZhdWx0cygpe3JldHVybntmYWNhZGU6dm9pZCAwLHRhYmxlOnZvaWQgMCxpc0RhdGFWaWV3SW5zdGFuY2U6ITAs''@;'; put 'put ''ZXh0ZXJuYWxSb3dDYWxjdWxhdG9yOiExLGN1cnJlbnRSb3dDbGFzc05hbWU6bnVsbCxjdXJyZW50Q29sdW1uQ2xhc3NOYW1lOm51bGwscHJldmVudE92ZXJmbG93OigpPT4hMSxwcmV2ZW50V2hlZWw6ITEsZGF0YTp2b2lkIDAsZml4ZWRDb2x1bW5zU3RhcnQ6MCxmaXhlZFJvd3NUb3A6MCxm''@;'; put 'put ''aXhlZFJvd3NCb3R0b206MCxzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXk6KCk9PnRoaXMuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKT4wfHx0aGlzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJUb3BPdmVybGF5OigpPT50aGlzLmdl''@;'; put 'put ''dFNldHRpbmcoImZpeGVkUm93c1RvcCIpPjB8fHRoaXMuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aD4wLHNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXk6KCk9PnRoaXMuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik+MCxtaW5TcGFyZVJvd3M6MCxyb3dIZWFkZXJzOigp''@;'; put 'put ''PT5bXSxjb2x1bW5IZWFkZXJzOigpPT5bXSx0b3RhbFJvd3M6dm9pZCAwLHRvdGFsQ29sdW1uczp2b2lkIDAsY2VsbFJlbmRlcmVyOihlLHQscik9Pnt5NyhyLHRoaXMuZ2V0U2V0dGluZygiZGF0YSIsZSx0KT8/IiIpfSxjb2x1bW5XaWR0aCgpe30scm93SGVpZ2h0KCl7fSxyb3dIZWlnaHRC''@;'; put 'put ''eU92ZXJsYXlOYW1lKCl7fSxkZWZhdWx0Q29sdW1uV2lkdGg6NTAsc2VsZWN0aW9uczpudWxsLGhpZGVCb3JkZXJPbk1vdXNlRG93bk92ZXI6ITEsdmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGU6bnVsbCx2aWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZTpudWxsLHZpZXdwb3J0''@;'; put 'put ''Um93UmVuZGVyaW5nVGhyZXNob2xkOm51bGwsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdUaHJlc2hvbGQ6bnVsbCxvbkNlbGxNb3VzZURvd246bnVsbCxvbkNlbGxDb250ZXh0TWVudTpudWxsLG9uQ2VsbE1vdXNlT3ZlcjpudWxsLG9uQ2VsbE1vdXNlT3Zlck91dHNpZGU6bnVsbCxvbkNlbGxN''@;'; put 'put ''b3VzZU91dDpudWxsLG9uQ2VsbE1vdXNlVXA6bnVsbCxvbkNlbGxEYmxDbGljazpudWxsLG9uQ2VsbENvcm5lck1vdXNlRG93bjpudWxsLG9uQ2VsbENvcm5lckRibENsaWNrOm51bGwsYmVmb3JlRHJhdzpudWxsLG9uRHJhdzpudWxsLG9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6bnVs''@;'; put 'put ''bCxvbkFmdGVyRHJhd1NlbGVjdGlvbjpudWxsLG9uQmVmb3JlRHJhd0JvcmRlcnM6bnVsbCxvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5OmU9PmUsb25CZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHk6ZT0+ZSxvblNjcm9sbEhvcml6b250YWxseTpudWxsLG9uU2Nyb2xs''@;'; put 'put ''VmVydGljYWxseTpudWxsLG9uQmVmb3JlVG91Y2hTY3JvbGw6bnVsbCxvbkFmdGVyTW9tZW50dW1TY3JvbGw6bnVsbCxvbk1vZGlmeVJvd0hlYWRlcldpZHRoOm51bGwsb25Nb2RpZnlHZXRDZWxsQ29vcmRzOm51bGwsb25Nb2RpZnlHZXRDb29yZHNFbGVtZW50Om51bGwsb25Nb2RpZnlHZXRD''@;'; put 'put ''b29yZHM6bnVsbCxvbkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcjplPT5lLG9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyOmU9PmUsb25XaW5kb3dSZXNpemU6bnVsbCxvbkNvbnRhaW5lckVsZW1lbnRSZXNpemU6bnVsbCxyZW5kZXJBbGxDb2x1bW5zOiExLHJlbmRlckFsbFJv''@;'; put 'put ''d3M6ITEsZ3JvdXBzOiExLHJvd0hlYWRlcldpZHRoOm51bGwsY29sdW1uSGVhZGVySGVpZ2h0Om51bGwsaGVhZGVyQ2xhc3NOYW1lOm51bGwscnRsTW9kZTohMSxhcmlhVGFnczohMCxzdHlsZXNIYW5kbGVyOm51bGx9fXVwZGF0ZShlLHQpe3JldHVybiB2b2lkIDA9PT10P2FjKGUsKHIsaSk9''@;'; put 'put ''Pnt0aGlzLnNldHRpbmdzW2ldPXJ9KTp0aGlzLnNldHRpbmdzW2VdPXQsdGhpc31nZXRTZXR0aW5nKGUsdCxyLGksbyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuc2V0dGluZ3NbZV0/dGhpcy5zZXR0aW5nc1tlXSh0LHIsaSxvKTp2b2lkIDAhPT10JiZBcnJheS5pc0FycmF5KHRo''@;'; put 'put ''aXMuc2V0dGluZ3NbZV0pP3RoaXMuc2V0dGluZ3NbZV1bdF06dGhpcy5zZXR0aW5nc1tlXX1nZXRTZXR0aW5nUHVyZShlKXtyZXR1cm4gdGhpcy5zZXR0aW5nc1tlXX1oYXMoZSl7cmV0dXJuISF0aGlzLnNldHRpbmdzW2VdfWNvbnN0cnVjdG9yKGUpe3RoaXMuc2V0dGluZ3M9e30sdGhpcy5k''@;'; put 'put ''ZWZhdWx0cz1PYmplY3QuZnJlZXplKHRoaXMuZ2V0RGVmYXVsdHMoKSksYWModGhpcy5kZWZhdWx0cywodCxyKT0+e3ZvaWQgMCE9PWVbcl0/dGhpcy5zZXR0aW5nc1tyXT1lW3JdOnZvaWQgMD09PXQ/SnIoYEEgcmVxdWlyZWQgc2V0dGluZyAiJHtyfSIgd2FzIG5vdCBwcm92aWRlZGApOnRo''@;'; put 'put ''aXMuc2V0dGluZ3Nbcl09dH0pfX1mdW5jdGlvbiBNa2UobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQobil9ZnVuY3Rpb24gSk0obixlKXtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24gTUF0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obixNa2UobixlLCJnZXQiKSl9ZnVuY3Rpb24gdVkobixlLHQpeyhmdW5jdGlvbiBFQXQobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUg''@;'; put 'put ''c2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIEgzKG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gVEF0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixNa2UobixlLCJzZXQiKSx0KSx0fXZhciBKdj1uZXcgV2Vha01hcCxlVD1uZXcgV2Vha01hcCx0VD1uZXcgV2Vha01hcCxPTD1uZXcgV2Vha01hcDtjbGFzcyBrbGUgZXh0ZW5k''@;'; put 'put ''cyBLTXthbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCl7Y29uc3QgZT1Kdi5oYXModGhpcyksdD1ITSh0aGlzLnd0Um9vdEVsZW1lbnQpLHtyb290V2luZG93OnJ9PXRoaXMuZG9tQmluZGluZ3M7aWYodCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KXtpZihlKXtpZihKTSh0aGlz''@;'; put 'put ''LE9MKSE9PXQpe0pNKHRoaXMsZVQpPy5kaXNjb25uZWN0KCksSk0odGhpcyx0VCk/LmRpc2Nvbm5lY3QoKSxIMyh0aGlzLEp2LG51bGwpLEgzKHRoaXMsT0wsdCk7Y29uc3QgdmU9KCk9PntIMyh0aGlzLEp2LG51bGwpfSxNZT1uZXcgUmVzaXplT2JzZXJ2ZXIodmUpO01lLm9ic2VydmUodCks''@;'; put 'put ''SDModGhpcyxlVCxNZSk7Y29uc3QgSGU9bmV3IFJlc2l6ZU9ic2VydmVyKHZlKTtIZS5vYnNlcnZlKHRoaXMuaGlkZXIpLEgzKHRoaXMsdFQsSGUpfWNvbnN0IGk9dC5vZmZzZXRXaWR0aCxvPXQub2Zmc2V0SGVpZ2h0LGE9dC5zY3JvbGxXaWR0aCxsPXQuc2Nyb2xsSGVpZ2h0LHU9dXcodCwi''@;'; put 'put ''b3ZlcmZsb3ciLHIpPz8iIixnPXV3KHQsImhlaWdodCIscik/PyIiLEU9dGhpcy5oaWRlci5vZmZzZXRIZWlnaHQsTz10aGlzLmhpZGVyLm9mZnNldFdpZHRoLFo9Sk0odGhpcyxKdik7aWYobnVsbCE9PVomJloudHJpbW1pbmdPZmZzZXRXaWR0aD09PWkmJloudHJpbW1pbmdPZmZzZXRIZWln''@;'; put 'put ''aHQ9PT1vJiZaLnRyaW1taW5nU2Nyb2xsV2lkdGg9PT1hJiZaLnRyaW1taW5nU2Nyb2xsSGVpZ2h0PT09bCYmWi50cmltbWluZ092ZXJmbG93PT09dSYmWi50cmltbWluZ0hlaWdodD09PWcmJlouaGlkZXJPZmZzZXRIZWlnaHQ9PT1FJiZaLmhpZGVyT2Zmc2V0V2lkdGg9PT1PKXtjb25zdCB2''@;'; put 'put ''ZT10aGlzLmhvbGRlci5zdHlsZTt2ZS53aWR0aD1aLmhvbGRlcldpZHRoLHZlLmhlaWdodD1aLmhvbGRlckhlaWdodCx2ZS5vdmVyZmxvdz0iIix0aGlzLmhhc1RhYmxlSGVpZ2h0PVouaGFzVGFibGVIZWlnaHQsdGhpcy5oYXNUYWJsZVdpZHRoPVouaGFzVGFibGVXaWR0aH1lbHNle2NvbnN0''@;'; put 'put ''IHZlPXQucGFyZW50RWxlbWVudCxNZT10aGlzLmhvbGRlci5zdHlsZTtsZXQgSGU9aSxXZT1vO2NvbnN0IGF0PVsiYXV0byIsImhpZGRlbiIsInNjcm9sbCIsImNsaXAiXSxDdD11P3Uuc3BsaXQoIiAiKS5zb21lKENuPT5hdC5pbmNsdWRlcyhDbikpOlt1dyh0LCJvdmVyZmxvd1giLHIpLHV3''@;'; put 'put ''KHQsIm92ZXJmbG93WSIscildLnNvbWUoQ249PkNuJiZhdC5pbmNsdWRlcyhDbikpO2xldCBBdD0iYXV0byI9PT1nO2lmKHZlJiZDdCl7Y29uc3QgQ249dC5jbG9uZU5vZGUoITEpO0NuLnN0eWxlLm92ZXJmbG93PSJhdXRvIixDbi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLENuLnN0eWxl''@;'; put 'put ''LmJvcmRlcj0iMCIsQ24uc3R5bGUucGFkZGluZz0iMCIsdC5uZXh0RWxlbWVudFNpYmxpbmc/dmUuaW5zZXJ0QmVmb3JlKENuLHQubmV4dEVsZW1lbnRTaWJsaW5nKTp2ZS5hcHBlbmRDaGlsZChDbik7Y29uc3QgcXI9cGFyc2VJbnQoci5nZXRDb21wdXRlZFN0eWxlKENuKS5oZWlnaHQsMTAp''@;'; put 'put ''O2lmKHZlLnJlbW92ZUNoaWxkKENuKSwwPT09cXIpe1dlPTA7Y29uc3QgJG49ci5nZXRDb21wdXRlZFN0eWxlKHQpLFRyPSRuLm92ZXJmbG93WCxyaT0kbi5vdmVyZmxvd1k7KCJhdXRvIj09PVRyfHwic2Nyb2xsIj09PVRyKSYmImF1dG8iIT09cmkmJiJzY3JvbGwiIT09cmkmJihBdD0hMCl9''@;'; put 'put ''fVdlPU1hdGgubWluKFdlLGwpLEhlPU1hdGgubWluKEhlLGEpO2NvbnN0IEt0PUF0PyJhdXRvIjpgJHtXZX1weGAscXQ9YCR7SGV9cHhgLGduPSJhdXRvIj09PUt0fHxXZT4wLFRuPUhlPjA7TWUuaGVpZ2h0PUt0LE1lLndpZHRoPXF0LE1lLm92ZXJmbG93PSIiLHRoaXMuaGFzVGFibGVIZWln''@;'; put 'put ''aHQ9Z24sdGhpcy5oYXNUYWJsZVdpZHRoPVRuLEhlPjAmJkgzKHRoaXMsSnYse3RyaW1taW5nT2Zmc2V0V2lkdGg6aSx0cmltbWluZ09mZnNldEhlaWdodDpvLHRyaW1taW5nU2Nyb2xsV2lkdGg6YSx0cmltbWluZ1Njcm9sbEhlaWdodDpsLHRyaW1taW5nT3ZlcmZsb3c6dSx0cmltbWluZ0hl''@;'; put 'put ''aWdodDpnLGhpZGVyT2Zmc2V0SGVpZ2h0OkUsaGlkZXJPZmZzZXRXaWR0aDpPLGhvbGRlcldpZHRoOnF0LGhvbGRlckhlaWdodDpLdCxoYXNUYWJsZUhlaWdodDpnbixoYXNUYWJsZVdpZHRoOlRufSl9fX1lbHNlIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ci''@;'; put 'put ''KXx8KHRoaXMuaG9sZGVyLnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIix0aGlzLnd0Um9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiKTt0aGlzLmlzVGFibGVWaXNpYmxlPVV2KHRoaXMuVEFCTEUpfW1hcmtPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzKCl7Y29uc3R7d3RTZXR0aW5n''@;'; put 'put ''czplfT10aGlzLHt3dFZpZXdwb3J0OnR9PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxyPSJtYXN0ZXIiLG89ZS5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2lmKG8mJiF0Lmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWRbcl0pe2NvbnN0IGw9ZS5nZXRTZXR0aW5nKCJy''@;'; put 'put ''b3dIZWFkZXJzIikubGVuZ3RoLHU9dGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpO2ZvcihsZXQgZz0wO2c8bztnKyspZm9yKGxldCBFPS0xKmw7RTx1O0UrKyl0aGlzLm1hcmtJZk92ZXJzaXplZENvbHVtbkhlYWRlcihFKTt0Lmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWRb''@;'; put 'put ''cl09ITB9fWRlc3Ryb3koKXtKTSh0aGlzLGVUKT8uZGlzY29ubmVjdCgpLEpNKHRoaXMsdFQpPy5kaXNjb25uZWN0KCksSDModGhpcyxKdixudWxsKSxIMyh0aGlzLGVULG51bGwpLEgzKHRoaXMsdFQsbnVsbCksSDModGhpcyxPTCxudWxsKX1jb25zdHJ1Y3RvcihlLHQscixpKXtzdXBlcihl''@;'; put 'put ''LHQscixpLCJtYXN0ZXIiKSx1WSh0aGlzLEp2LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx1WSh0aGlzLGVULHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx1WSh0aGlzLHRULHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx1WSh0aGlzLE9MLHt3cml0YWJsZTohMCx2YWx1ZTp2''@;'; put 'put ''b2lkIDB9KSxIMyh0aGlzLEp2LG51bGwpLEgzKHRoaXMsZVQsbnVsbCksSDModGhpcyx0VCxudWxsKSxIMyh0aGlzLE9MLG51bGwpfX1ZbChrbGUsZGtlKSxZbChrbGUsdWxlKTtjb25zdCB4QXQ9a2xlO2Z1bmN0aW9uIFRrZShuLHt0b3RhbENvdW50OmUsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0''@;'; put 'put ''OnQsc2Nyb2xsRW5kOnIscG9zaXRpb25DYWNoZTppLHNldFNpemVGaWVsZDpvLHNldFRvdGFsQ2FsY3VsYXRlZDphLGdldFRvdGFsQ2FsY3VsYXRlZDpsfSl7bi5faW5pdGlhbGl6ZShuKTtsZXQgdT0wO3Q+MCYmZT4wJiYodT1pLmZpbmRJbmRleEF0T2Zmc2V0KHQpLGEobixpLmdldE9mZnNl''@;'; put 'put ''dCh1KSkpO2xldCBnPS0xO2ZvcihsZXQgRT11O0U8ZTtFKyspe2NvbnN0IE89aS5nZXRTaXplQXQoRSk7aWYobyhuLE8pLG4uX3Byb2Nlc3MoRSxuKSxnPUUsYShuLGwobikrTyksbChuKT49cil7bi5uZWVkUmV2ZXJzZT0hMTticmVha319bi5sYXN0UHJvY2Vzc2VkSW5kZXg9ZyxuLl9maW5h''@;'; put 'put ''bGl6ZShuKX1jbGFzcyB4a2V7X2luaXRpYWxpemUoZSl7dGhpcy5jYWxjdWxhdGlvblR5cGVzLmZvckVhY2goKFt0LHJdKT0+e3RoaXMuY2FsY3VsYXRpb25SZXN1bHRzLnNldCh0LHIpLHIuaW5pdGlhbGl6ZShlKX0pfV9wcm9jZXNzKGUsdCl7dGhpcy5jYWxjdWxhdGlvblR5cGVzLmZvckVh''@;'; put 'put ''Y2goKFsscl0pPT5yLnByb2Nlc3MoZSx0KSl9X2ZpbmFsaXplKGUpe3RoaXMuY2FsY3VsYXRpb25UeXBlcy5mb3JFYWNoKChbLHRdKT0+dC5maW5hbGl6ZShlKSl9Z2V0UmVzdWx0c0ZvcihlKXtyZXR1cm4gdGhpcy5jYWxjdWxhdGlvblJlc3VsdHMuZ2V0KGUpfWNvbnN0cnVjdG9yKGUpe3Ro''@;'; put 'put ''aXMuY2FsY3VsYXRpb25UeXBlcz1bXSx0aGlzLmNhbGN1bGF0aW9uUmVzdWx0cz1uZXcgTWFwLHRoaXMuY2FsY3VsYXRpb25UeXBlcz1lfX1jbGFzcyBBQXQgZXh0ZW5kcyB4a2V7Y2FsY3VsYXRlKCl7dGhpcy5wb3NpdGlvbkNhY2hlJiZUa2UodGhpcyx7dG90YWxDb3VudDp0aGlzLnRvdGFs''@;'; put 'put ''Um93cyx6ZXJvQmFzZWRTY3JvbGxPZmZzZXQ6dGhpcy56ZXJvQmFzZWRTY3JvbGxPZmZzZXQsc2Nyb2xsRW5kOnRoaXMuaW5uZXJWaWV3cG9ydEhlaWdodCxwb3NpdGlvbkNhY2hlOnRoaXMucG9zaXRpb25DYWNoZSxzZXRTaXplRmllbGQ6KGUsdCk9PntlLnJvd0hlaWdodD10fSxzZXRUb3Rh''@;'; put 'put ''bENhbGN1bGF0ZWQ6KGUsdCk9PntlLnRvdGFsQ2FsY3VsYXRlZEhlaWdodD10fSxnZXRUb3RhbENhbGN1bGF0ZWQ6ZT0+ZS50b3RhbENhbGN1bGF0ZWRIZWlnaHR9KX1nZXRSZXN1bHRzRm9yKGUpe3JldHVybiB0aGlzLmNhbGN1bGF0aW9uUmVzdWx0cy5nZXQoZSl9Z2V0Um93SGVpZ2h0KGUp''@;'; put 'put ''e3JldHVybiB0aGlzLnBvc2l0aW9uQ2FjaGU/LmdldFNpemVBdChlKT8/MH1jb25zdHJ1Y3Rvcih7Y2FsY3VsYXRpb25UeXBlczplLHZpZXdwb3J0SGVpZ2h0OnQsc2Nyb2xsT2Zmc2V0OnIsdG90YWxSb3dzOmksb3ZlcnJpZGVGbjpvLGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQ6YSxyb3dI''@;'; put 'put ''ZWlnaHRDYWNoZTpsfSl7c3VwZXIoZSksdGhpcy52aWV3cG9ydEhlaWdodD0wLHRoaXMuc2Nyb2xsT2Zmc2V0PTAsdGhpcy56ZXJvQmFzZWRTY3JvbGxPZmZzZXQ9MCx0aGlzLnRvdGFsUm93cz0wLHRoaXMucm93SGVpZ2h0PTAsdGhpcy5vdmVycmlkZUZuPW51bGwsdGhpcy5ob3Jpem9udGFs''@;'; put 'put ''U2Nyb2xsYmFySGVpZ2h0PTAsdGhpcy5pbm5lclZpZXdwb3J0SGVpZ2h0PTAsdGhpcy50b3RhbENhbGN1bGF0ZWRIZWlnaHQ9MCx0aGlzLm5lZWRSZXZlcnNlPSEwLHRoaXMucG9zaXRpb25DYWNoZT1udWxsLHRoaXMubGFzdFByb2Nlc3NlZEluZGV4PS0xLHRoaXMudmlld3BvcnRIZWlnaHQ9''@;'; put 'put ''dCx0aGlzLnNjcm9sbE9mZnNldD1yLHRoaXMuemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0PU1hdGgubWF4KHIsMCksdGhpcy50b3RhbFJvd3M9aSx0aGlzLm92ZXJyaWRlRm49byx0aGlzLmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQ9YT8/MCx0aGlzLmlubmVyVmlld3BvcnRIZWlnaHQ9dGhpcy56''@;'; put 'put ''ZXJvQmFzZWRTY3JvbGxPZmZzZXQrdGhpcy52aWV3cG9ydEhlaWdodC10aGlzLmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsdGhpcy5wb3NpdGlvbkNhY2hlPWwsdGhpcy5jYWxjdWxhdGUoKX19Y2xhc3Mga0F0IGV4dGVuZHMgeGtle2NhbGN1bGF0ZSgpe3RoaXMucG9zaXRpb25DYWNoZSYm''@;'; put 'put ''VGtlKHRoaXMse3RvdGFsQ291bnQ6dGhpcy50b3RhbENvbHVtbnMsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0OnRoaXMuemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0LHNjcm9sbEVuZDp0aGlzLnplcm9CYXNlZFNjcm9sbE9mZnNldCt0aGlzLnZpZXdwb3J0V2lkdGgscG9zaXRpb25DYWNoZTp0aGlzLnBv''@;'; put 'put ''c2l0aW9uQ2FjaGUsc2V0U2l6ZUZpZWxkOihlLHQpPT57ZS5jb2x1bW5XaWR0aD10fSxzZXRUb3RhbENhbGN1bGF0ZWQ6KGUsdCk9PntlLnRvdGFsQ2FsY3VsYXRlZFdpZHRoPXR9LGdldFRvdGFsQ2FsY3VsYXRlZDplPT5lLnRvdGFsQ2FsY3VsYXRlZFdpZHRofSl9Z2V0UmVzdWx0c0Zvcihl''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jYWxjdWxhdGlvblJlc3VsdHMuZ2V0KGUpfWdldENvbHVtbldpZHRoKGUpe3JldHVybiB0aGlzLnBvc2l0aW9uQ2FjaGU/LmdldFNpemVBdChlKT8/MH1jb25zdHJ1Y3Rvcih7Y2FsY3VsYXRpb25UeXBlczplLHZpZXdwb3J0V2lkdGg6dCxzY3JvbGxPZmZzZXQ6cix0''@;'; put 'put ''b3RhbENvbHVtbnM6aSxvdmVycmlkZUZuOm8saW5saW5lU3RhcnRPZmZzZXQ6YSxjb2x1bW5XaWR0aENhY2hlOmx9KXtzdXBlcihlKSx0aGlzLnZpZXdwb3J0V2lkdGg9MCx0aGlzLnNjcm9sbE9mZnNldD0wLHRoaXMuemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0PTAsdGhpcy50b3RhbENvbHVtbnM9''@;'; put 'put ''MCx0aGlzLmNvbHVtbldpZHRoPTAsdGhpcy5vdmVycmlkZUZuPW51bGwsdGhpcy5pbmxpbmVTdGFydE9mZnNldD0wLHRoaXMudG90YWxDYWxjdWxhdGVkV2lkdGg9MCx0aGlzLm5lZWRSZXZlcnNlPSEwLHRoaXMucG9zaXRpb25DYWNoZT1udWxsLHRoaXMubGFzdFByb2Nlc3NlZEluZGV4PS0x''@;'; put 'put ''LHRoaXMudmlld3BvcnRXaWR0aD10LHRoaXMuc2Nyb2xsT2Zmc2V0PXIsdGhpcy56ZXJvQmFzZWRTY3JvbGxPZmZzZXQ9TWF0aC5tYXgociwwKSx0aGlzLnRvdGFsQ29sdW1ucz1pLHRoaXMub3ZlcnJpZGVGbj1vLHRoaXMuaW5saW5lU3RhcnRPZmZzZXQ9YSx0aGlzLnBvc2l0aW9uQ2FjaGU9''@;'; put 'put ''bCx0aGlzLmNhbGN1bGF0ZSgpfX1jbGFzcyBSQXR7aW5pdGlhbGl6ZSh7dG90YWxSb3dzOmV9KXt0aGlzLmNvdW50PWUsdGhpcy5lbmRSb3c9dGhpcy5jb3VudC0xfXByb2Nlc3MoKXt9ZmluYWxpemUoKXt9Y29uc3RydWN0b3IoKXt0aGlzLmNvdW50PTAsdGhpcy5zdGFydFJvdz0wLHRoaXMu''@;'; put 'put ''ZW5kUm93PTAsdGhpcy5zdGFydFBvc2l0aW9uPTAsdGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSEwfX1jbGFzcyBBa2V7aW5pdGlhbGl6ZSgpe31wcm9jZXNzKGUsdCl7Y29uc3R7dG90YWxDYWxjdWxhdGVkSGVpZ2h0OnIsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0OmksaW5uZXJW''@;'; put 'put ''aWV3cG9ydEhlaWdodDpvfT10O3I8PWkmJih0aGlzLnN0YXJ0Um93PWUpLHI+PWkmJnI8PW8mJm51bGw9PT10aGlzLnN0YXJ0Um93JiYodGhpcy5zdGFydFJvdz1lKSx0aGlzLmVuZFJvdz1lfWZpbmFsaXplKGUpe2NvbnN0e3Njcm9sbE9mZnNldDp0LHZpZXdwb3J0SGVpZ2h0OnIsaG9yaXpv''@;'; put 'put ''bnRhbFNjcm9sbGJhckhlaWdodDppLHRvdGFsUm93czpvLG5lZWRSZXZlcnNlOmEscG9zaXRpb25DYWNoZTpsLHJvd0hlaWdodDp1fT1lO2lmKGwpe2lmKHRoaXMuZW5kUm93PT09by0xJiZhKWZvcih0aGlzLnN0YXJ0Um93PXRoaXMuZW5kUm93O3RoaXMuc3RhcnRSb3c+MDspe2NvbnN0IEU9''@;'; put 'put ''bC5nZXRPZmZzZXQodGhpcy5lbmRSb3cpK3UtbC5nZXRPZmZzZXQodGhpcy5zdGFydFJvdy0xKTtpZih0aGlzLnN0YXJ0Um93LT0xLEU+PXItaSlicmVha310aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9PXRoaXMuc3RhcnRSb3c/bC5nZXRPZmZzZXQodGhpcy5zdGFydFJvdyk6bnVsbCx0aGlz''@;'; put 'put ''LmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9ISh0K3ItaTwwfHx0PmwuZ2V0T2Zmc2V0KGUubGFzdFByb2Nlc3NlZEluZGV4KSt1KSxudWxsIT09dGhpcy5lbmRSb3cmJm88dGhpcy5lbmRSb3cmJih0aGlzLmVuZFJvdz1vLTEpLG51bGwhPT10aGlzLnN0YXJ0Um93JiZudWxsIT09dGhp''@;'; put 'put ''cy5lbmRSb3cmJih0aGlzLmNvdW50PXRoaXMuZW5kUm93LXRoaXMuc3RhcnRSb3crMSl9fWNvbnN0cnVjdG9yKCl7dGhpcy5jb3VudD0wLHRoaXMuc3RhcnRSb3c9bnVsbCx0aGlzLmVuZFJvdz1udWxsLHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsLHRoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0Nv''@;'; put 'put ''bnRhaW5lcj0hMX19Y2xhc3MgSUF0IGV4dGVuZHMgQWtle2ZpbmFsaXplKGUpe3N1cGVyLmZpbmFsaXplKGUpO2NvbnN0e292ZXJyaWRlRm46dCx0b3RhbFJvd3M6cixwb3NpdGlvbkNhY2hlOml9PWU7aWYobnVsbCE9PXRoaXMuc3RhcnRSb3cmJiJmdW5jdGlvbiI9PXR5cGVvZiB0KXtjb25z''@;'; put 'put ''dCBvPXRoaXMuc3RhcnRSb3csYT10aGlzLmVuZFJvdzt0KHRoaXMpLHRoaXMucm93U3RhcnRPZmZzZXQ9by10aGlzLnN0YXJ0Um93LHRoaXMucm93RW5kT2Zmc2V0PW51bGwhPT10aGlzLmVuZFJvdyYmbnVsbCE9PWE/dGhpcy5lbmRSb3ctYTowfW51bGwhPT10aGlzLnN0YXJ0Um93JiZ0aGlz''@;'; put 'put ''LnN0YXJ0Um93PDAmJih0aGlzLnN0YXJ0Um93PTApLHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsIT09dGhpcy5zdGFydFJvdyYmaT9pLmdldE9mZnNldCh0aGlzLnN0YXJ0Um93KTpudWxsLG51bGwhPT10aGlzLmVuZFJvdyYmcjx0aGlzLmVuZFJvdyYmKHRoaXMuZW5kUm93PXItMSksbnVsbCE9''@;'; put 'put ''PXRoaXMuc3RhcnRSb3cmJm51bGwhPT10aGlzLmVuZFJvdyYmKHRoaXMuY291bnQ9dGhpcy5lbmRSb3ctdGhpcy5zdGFydFJvdysxKX1jb25zdHJ1Y3RvciguLi5lKXtzdXBlciguLi5lKSx0aGlzLnJvd1N0YXJ0T2Zmc2V0PTAsdGhpcy5yb3dFbmRPZmZzZXQ9MH19Y2xhc3MgREF0e2luaXRp''@;'; put 'put ''YWxpemUoKXt9cHJvY2VzcyhlLHQpe2NvbnN0e3RvdGFsQ2FsY3VsYXRlZEhlaWdodDpyLHplcm9CYXNlZFNjcm9sbE9mZnNldDppLGlubmVyVmlld3BvcnRIZWlnaHQ6byxyb3dIZWlnaHQ6YX09dDtyPj1pJiZyK2E8PW8mJihudWxsPT09dGhpcy5zdGFydFJvdyYmKHRoaXMuc3RhcnRSb3c9''@;'; put 'put ''ZSksdGhpcy5lbmRSb3c9ZSl9ZmluYWxpemUoZSl7Y29uc3R7c2Nyb2xsT2Zmc2V0OnQsdmlld3BvcnRIZWlnaHQ6cixob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0OmksdG90YWxSb3dzOm8sbmVlZFJldmVyc2U6YSxwb3NpdGlvbkNhY2hlOmwscm93SGVpZ2h0OnV9PWU7aWYoIWwpcmV0dXJu''@;'; put 'put ''O2lmKHRoaXMuZW5kUm93PT09by0xJiZhKWZvcih0aGlzLnN0YXJ0Um93PXRoaXMuZW5kUm93O3RoaXMuc3RhcnRSb3c+MDspe2NvbnN0IE89bC5nZXRPZmZzZXQodGhpcy5lbmRSb3cpK3UtbC5nZXRPZmZzZXQodGhpcy5zdGFydFJvdy0xKTtpZihPPD1yLWkmJih0aGlzLnN0YXJ0Um93LT0x''@;'; put 'put ''KSxPPj1yLWkpYnJlYWt9dGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT10aGlzLnN0YXJ0Um93P2wuZ2V0T2Zmc2V0KHRoaXMuc3RhcnRSb3cpOm51bGw7Y29uc3QgZz10K3ItaSxFPW51bGw9PT10aGlzLnN0YXJ0Um93PzA6ZS5nZXRSb3dIZWlnaHQodGhpcy5zdGFydFJvdyk7dGhpcy5pc1Zp''@;'; put 'put ''c2libGVJblRyaW1taW5nQ29udGFpbmVyPSEoZzxFfHx0PmwuZ2V0T2Zmc2V0KGUubGFzdFByb2Nlc3NlZEluZGV4KSksbnVsbCE9PXRoaXMuZW5kUm93JiZvPHRoaXMuZW5kUm93JiYodGhpcy5lbmRSb3c9by0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYmbnVsbCE9PXRoaXMuZW5kUm93JiYo''@;'; put 'put ''dGhpcy5jb3VudD10aGlzLmVuZFJvdy10aGlzLnN0YXJ0Um93KzEpfWNvbnN0cnVjdG9yKCl7dGhpcy5jb3VudD0wLHRoaXMuc3RhcnRSb3c9bnVsbCx0aGlzLmVuZFJvdz1udWxsLHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsLHRoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcj0hMX19''@;'; put 'put ''Y2xhc3MgTEF0e2luaXRpYWxpemUoe3RvdGFsQ29sdW1uczplfSl7dGhpcy5jb3VudD1lLHRoaXMuZW5kQ29sdW1uPXRoaXMuY291bnQtMX1wcm9jZXNzKCl7fWZpbmFsaXplKCl7fWNvbnN0cnVjdG9yKCl7dGhpcy5jb3VudD0wLHRoaXMuc3RhcnRDb2x1bW49MCx0aGlzLmVuZENvbHVtbj0w''@;'; put 'put ''LHRoaXMuc3RhcnRQb3NpdGlvbj0wLHRoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcj0hMH19Y2xhc3Mga2tle2luaXRpYWxpemUoKXt9cHJvY2VzcyhlLHQpe2NvbnN0e3RvdGFsQ2FsY3VsYXRlZFdpZHRoOnIsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0Omksdmlld3BvcnRXaWR0aDpv''@;'; put 'put ''fT10O3I8PWkmJih0aGlzLnN0YXJ0Q29sdW1uPWUpLHI+PWkmJnI8PWkrKGk+MD9vKzE6bykmJm51bGw9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLnN0YXJ0Q29sdW1uPWUpLHRoaXMuZW5kQ29sdW1uPWV9ZmluYWxpemUoZSl7Y29uc3R7c2Nyb2xsT2Zmc2V0OnQsdmlld3BvcnRXaWR0aDpy''@;'; put 'put ''LGlubGluZVN0YXJ0T2Zmc2V0OmksemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0Om8sdG90YWxDb2x1bW5zOmEsbmVlZFJldmVyc2U6bCxwb3NpdGlvbkNhY2hlOnUsY29sdW1uV2lkdGg6Z309ZTtpZih1KXtpZih0aGlzLmVuZENvbHVtbj09PWEtMSYmbClmb3IodGhpcy5zdGFydENvbHVtbj10aGlz''@;'; put 'put ''LmVuZENvbHVtbjt0aGlzLnN0YXJ0Q29sdW1uPjA7KXtjb25zdCBaPXUuZ2V0T2Zmc2V0KHRoaXMuZW5kQ29sdW1uKStnLXUuZ2V0T2Zmc2V0KHRoaXMuc3RhcnRDb2x1bW4tMSk7aWYodGhpcy5zdGFydENvbHVtbi09MSxaPnIpYnJlYWt9dGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT10aGlz''@;'; put 'put ''LnN0YXJ0Q29sdW1uP3UuZ2V0T2Zmc2V0KHRoaXMuc3RhcnRDb2x1bW4pOm51bGwsdGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSEodCtyLShvPjA/cisxOnIpPC0xKml8fHQ+dS5nZXRPZmZzZXQoZS5sYXN0UHJvY2Vzc2VkSW5kZXgpK2d8fC0xKnQtcj4wKSxudWxsIT09dGhp''@;'; put 'put ''cy5lbmRDb2x1bW4mJmE8dGhpcy5lbmRDb2x1bW4mJih0aGlzLmVuZENvbHVtbj1hLTEpLG51bGwhPT10aGlzLnN0YXJ0Q29sdW1uJiZudWxsIT09dGhpcy5lbmRDb2x1bW4mJih0aGlzLmNvdW50PXRoaXMuZW5kQ29sdW1uLXRoaXMuc3RhcnRDb2x1bW4rMSl9fWNvbnN0cnVjdG9yKCl7dGhp''@;'; put 'put ''cy5jb3VudD0wLHRoaXMuc3RhcnRDb2x1bW49bnVsbCx0aGlzLmVuZENvbHVtbj1udWxsLHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsLHRoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcj0hMX19Y2xhc3MgT0F0IGV4dGVuZHMga2tle2ZpbmFsaXplKGUpe3N1cGVyLmZpbmFsaXplKGUp''@;'; put 'put ''O2NvbnN0e292ZXJyaWRlRm46dCx0b3RhbENvbHVtbnM6cixwb3NpdGlvbkNhY2hlOml9PWU7aWYobnVsbCE9PXRoaXMuc3RhcnRDb2x1bW4mJiJmdW5jdGlvbiI9PXR5cGVvZiB0KXtjb25zdCBvPXRoaXMuc3RhcnRDb2x1bW4sYT10aGlzLmVuZENvbHVtbjt0KHRoaXMpLHRoaXMuY29sdW1u''@;'; put 'put ''U3RhcnRPZmZzZXQ9by10aGlzLnN0YXJ0Q29sdW1uLHRoaXMuY29sdW1uRW5kT2Zmc2V0PW51bGwhPT10aGlzLmVuZENvbHVtbiYmbnVsbCE9PWE/dGhpcy5lbmRDb2x1bW4tYTowfW51bGwhPT10aGlzLnN0YXJ0Q29sdW1uJiZ0aGlzLnN0YXJ0Q29sdW1uPDAmJih0aGlzLnN0YXJ0Q29sdW1u''@;'; put 'put ''PTApLHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsIT09dGhpcy5zdGFydENvbHVtbiYmaT9pLmdldE9mZnNldCh0aGlzLnN0YXJ0Q29sdW1uKTpudWxsLG51bGwhPT10aGlzLmVuZENvbHVtbiYmcjx0aGlzLmVuZENvbHVtbiYmKHRoaXMuZW5kQ29sdW1uPXItMSksbnVsbCE9PXRoaXMuc3RhcnRD''@;'; put 'put ''b2x1bW4mJm51bGwhPT10aGlzLmVuZENvbHVtbiYmKHRoaXMuY291bnQ9dGhpcy5lbmRDb2x1bW4tdGhpcy5zdGFydENvbHVtbisxKX1jb25zdHJ1Y3RvciguLi5lKXtzdXBlciguLi5lKSx0aGlzLmNvbHVtblN0YXJ0T2Zmc2V0PTAsdGhpcy5jb2x1bW5FbmRPZmZzZXQ9MH19Y2xhc3MgTkF0''@;'; put 'put ''e2luaXRpYWxpemUoKXt9cHJvY2VzcyhlLHQpe2NvbnN0e3RvdGFsQ2FsY3VsYXRlZFdpZHRoOnIsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0Omksdmlld3BvcnRXaWR0aDpvLGNvbHVtbldpZHRoOmF9PXQ7cj49aSYmcithPD1pKyhpPjA/bysxOm8pJiYobnVsbD09dGhpcy5zdGFydENvbHVtbiYm''@;'; put 'put ''KHRoaXMuc3RhcnRDb2x1bW49ZSksdGhpcy5lbmRDb2x1bW49ZSl9ZmluYWxpemUoZSl7Y29uc3R7c2Nyb2xsT2Zmc2V0OnQsdmlld3BvcnRXaWR0aDpyLGlubGluZVN0YXJ0T2Zmc2V0OmksemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0Om8sdG90YWxDb2x1bW5zOmEsbmVlZFJldmVyc2U6bCxwb3Np''@;'; put 'put ''dGlvbkNhY2hlOnUsY29sdW1uV2lkdGg6Z309ZTtpZighdSlyZXR1cm47aWYodGhpcy5lbmRDb2x1bW49PT1hLTEmJmwpZm9yKHRoaXMuc3RhcnRDb2x1bW49dGhpcy5lbmRDb2x1bW47dGhpcy5zdGFydENvbHVtbj4wOyl7Y29uc3QgZWU9dS5nZXRPZmZzZXQodGhpcy5lbmRDb2x1bW4pK2ct''@;'; put 'put ''dS5nZXRPZmZzZXQodGhpcy5zdGFydENvbHVtbi0xKTtpZihlZTw9ciYmKHRoaXMuc3RhcnRDb2x1bW4tPTEpLGVlPj1yKWJyZWFrfXRoaXMuc3RhcnRQb3NpdGlvbj1udWxsIT09dGhpcy5zdGFydENvbHVtbj91LmdldE9mZnNldCh0aGlzLnN0YXJ0Q29sdW1uKTpudWxsO2NvbnN0IE89dCty''@;'; put 'put ''LShvPjA/cisxOnIpLFo9bnVsbD09PXRoaXMuc3RhcnRDb2x1bW4/MDplLmdldENvbHVtbldpZHRoKHRoaXMuc3RhcnRDb2x1bW4pO3RoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcj0hKE88LTEqaXx8dD51LmdldE9mZnNldChlLmxhc3RQcm9jZXNzZWRJbmRleCl8fC0xKnQtcj4t''@;'; put 'put ''MSpaKSxudWxsIT09dGhpcy5lbmRDb2x1bW4mJmE8dGhpcy5lbmRDb2x1bW4mJih0aGlzLmVuZENvbHVtbj1hLTEpLG51bGwhPT10aGlzLnN0YXJ0Q29sdW1uJiZudWxsIT09dGhpcy5lbmRDb2x1bW4mJih0aGlzLmNvdW50PXRoaXMuZW5kQ29sdW1uLXRoaXMuc3RhcnRDb2x1bW4rMSl9Y29u''@;'; put 'put ''c3RydWN0b3IoKXt0aGlzLmNvdW50PTAsdGhpcy5zdGFydENvbHVtbj1udWxsLHRoaXMuZW5kQ29sdW1uPW51bGwsdGhpcy5zdGFydFBvc2l0aW9uPW51bGwsdGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSExfX1mdW5jdGlvbiBSa2UobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQobil9ZnVuY3Rpb24gZFkobixlKXtyZXR1cm4gZnVuY3Rpb24gUEF0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obixS''@;'; put 'put ''a2UobixlLCJnZXQiKSl9ZnVuY3Rpb24gUmxlKG4sZSx0KXsoZnVuY3Rpb24gRkF0KG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sZSksZS5zZXQo''@;'; put 'put ''bix0KX1mdW5jdGlvbiBJbGUobixlLHQpe3JldHVybiBmdW5jdGlvbiBIQXQobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZh''@;'; put 'put ''bHVlPXR9fShuLFJrZShuLGUsInNldCIpLHQpLHR9dmFyIGhZPW5ldyBXZWFrTWFwLERsZT1uZXcgV2Vha01hcCxMbGU9bmV3IFdlYWtNYXA7Y2xhc3MgSWtle2J1aWxkKCl7Y29uc3QgZT1kWSh0aGlzLGhZKS5jYWxsKHRoaXMpLHQ9ZFkodGhpcyxEbGUpLHI9ZFkodGhpcyxMbGUpLmNhbGwo''@;'; put 'put ''dGhpcyk7dGhpcy50b3RhbEl0ZW1zPWUsdGhpcy5wcmVmaXhTdW09bmV3IEZsb2F0NjRBcnJheShlKzEpLHRoaXMucHJlZml4U3VtWzBdPTA7Zm9yKGxldCBpPTA7aTxlO2krKyl7Y29uc3Qgbz10KGkpO3RoaXMucHJlZml4U3VtW2krMV09dGhpcy5wcmVmaXhTdW1baV0rKGlzTmFOKG8pP3I6''@;'; put 'put ''byl9fWdldE9mZnNldChlKXtyZXR1cm4hdGhpcy5wcmVmaXhTdW18fGU8PTA/MDplPj10aGlzLnRvdGFsSXRlbXM/dGhpcy5wcmVmaXhTdW1bdGhpcy50b3RhbEl0ZW1zXTp0aGlzLnByZWZpeFN1bVtlXX1maW5kSW5kZXhBdE9mZnNldChlKXtpZighdGhpcy5pc0J1aWx0KCl8fGU8PTB8fDA9''@;'; put 'put ''PT10aGlzLnRvdGFsSXRlbXMpcmV0dXJuIDA7bGV0IHQ9MCxyPXRoaXMudG90YWxJdGVtcztmb3IoO3Q8cjspe2NvbnN0IGk9dCtyPj4+MTt0aGlzLnByZWZpeFN1bVtpKzFdPD1lP3Q9aSsxOnI9aX1yZXR1cm4gTWF0aC5taW4odCx0aGlzLnRvdGFsSXRlbXMtMSl9Z2V0U2l6ZUF0KGUpe3Jl''@;'; put 'put ''dHVybiF0aGlzLnByZWZpeFN1bXx8ZTwwfHxlPj10aGlzLnRvdGFsSXRlbXM/MDp0aGlzLnByZWZpeFN1bVtlKzFdLXRoaXMucHJlZml4U3VtW2VdfWVuc3VyZUJ1aWx0KCl7KCF0aGlzLmlzQnVpbHQoKXx8dGhpcy50b3RhbEl0ZW1zIT09ZFkodGhpcyxoWSkuY2FsbCh0aGlzKSkmJnRoaXMu''@;'; put 'put ''YnVpbGQoKX1nZXRUb3RhbFNpemUoKXtyZXR1cm4gdGhpcy5wcmVmaXhTdW0/dGhpcy5wcmVmaXhTdW1bdGhpcy50b3RhbEl0ZW1zXTowfWludmFsaWRhdGUoKXt0aGlzLnByZWZpeFN1bT1udWxsLHRoaXMudG90YWxJdGVtcz0wfWlzQnVpbHQoKXtyZXR1cm4gbnVsbCE9PXRoaXMucHJlZml4''@;'; put 'put ''U3VtfWNvbnN0cnVjdG9yKHt0b3RhbEl0ZW1zRm46ZSxzaXplRm46dCxkZWZhdWx0U2l6ZUZuOnJ9KXtSbGUodGhpcyxoWSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUmxlKHRoaXMsRGxlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxSbGUodGhpcyxMbGUse3dyaXRhYmxlOiEw''@;'; put 'put ''LHZhbHVlOnZvaWQgMH0pLHRoaXMucHJlZml4U3VtPW51bGwsdGhpcy50b3RhbEl0ZW1zPTAsSWxlKHRoaXMsaFksZSksSWxlKHRoaXMsRGxlLHQpLElsZSh0aGlzLExsZSxyKX19Y29uc3QgQkF0PWNsYXNzIFZBdHtnZXRXb3Jrc3BhY2VIZWlnaHQoKXtjb25zdCBlPXRoaXMuZG9tQmluZGlu''@;'; put 'put ''Z3Mucm9vdERvY3VtZW50LHQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcjtsZXQgcj0wO3JldHVybiByPXQ9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/ZS5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OkhoKHQpPjAmJnQuY2xpZW50''@;'; put 'put ''SGVpZ2h0PjA/dC5jbGllbnRIZWlnaHQ6TWF0aC5tYXgoZS5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LDEpLHJ9Z2V0Vmlld3BvcnRIZWlnaHQoKXtsZXQgZT10aGlzLmdldFdvcmtzcGFjZUhlaWdodCgpO2NvbnN0IHQ9dGhpcy5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTtyZXR1cm4g''@;'; put 'put ''dD4wJiYoZS09dCksZX1nZXRXb3Jrc3BhY2VXaWR0aCgpe2NvbnN0e3Jvb3REb2N1bWVudDplLHJvb3RXaW5kb3c6dH09dGhpcy5kb21CaW5kaW5ncyxyPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcjtsZXQgaTtpZihyPT09dCl7Y29u''@;'; put 'put ''c3Qgbz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIik7aT10aGlzLnd0VGFibGUuaG9sZGVyLm9mZnNldFdpZHRoLHRoaXMuZ2V0Um93SGVhZGVyV2lkdGgoKSt0aGlzLnN1bUNvbHVtbldpZHRocygwLG8pPmkmJihpPWUuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdp''@;'; put 'put ''ZHRoKX1lbHNlIGk9ci5jbGllbnRXaWR0aDtyZXR1cm4gaX1nZXRWaWV3cG9ydFdpZHRoKCl7Y29uc3QgZT10aGlzLmdldFdvcmtzcGFjZVdpZHRoKCksdD10aGlzLmdldFJvd0hlYWRlcldpZHRoKCk7cmV0dXJuIHQ+MD9lLXQ6ZX1oYXNWZXJ0aWNhbFNjcm9sbCgpe2lmKHRoaXMuaXNWZXJ0''@;'; put 'put ''aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkpe2NvbnN0IG89dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3JldHVybiBvLnNjcm9sbEhlaWdodD5vLmNsaWVudEhlaWdodH1jb25zdHtob2xkZXI6ZSxoaWRlcjp0fT10aGlzLnd0VGFibGUsaT10Lm9mZnNl''@;'; put 'put ''dEhlaWdodDtyZXR1cm4gZS5jbGllbnRIZWlnaHQ8aXx8aT50aGlzLmdldFdvcmtzcGFjZUhlaWdodCgpfWhhc0hvcml6b250YWxTY3JvbGwoKXtpZih0aGlzLmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpKXtjb25zdCBpPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmRv''@;'; put 'put ''Y3VtZW50RWxlbWVudDtyZXR1cm4gaS5zY3JvbGxXaWR0aD5pLmNsaWVudFdpZHRofWNvbnN0e2hpZGVyOmV9PXRoaXMud3RUYWJsZSx0PWUub2Zmc2V0V2lkdGgscj10aGlzLmhhc1ZlcnRpY2FsU2Nyb2xsKCk/R2QoKTowO3JldHVybiB0PnRoaXMuZ2V0V29ya3NwYWNlV2lkdGgoKS1yfWlz''@;'; put 'put ''VmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wT3ZlcmxheVRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93fWlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''ZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvd31zdW1Db2x1bW5XaWR0aHMoZSx0KXtsZXQgcj0wLGk9ZTtmb3IoO2k8dDspcis9dGhpcy53dFRhYmxlLmdldENvbHVtbldpZHRoKGkpLGkrPTE7''@;'; put 'put ''cmV0dXJuIHJ9Z2V0V29ya3NwYWNlT2Zmc2V0KCl7cmV0dXJuIFgwKHRoaXMud3RUYWJsZS5ob2xkZXIpfWdldENvbHVtbkhlYWRlckhlaWdodCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aD9pc05hTih0aGlzLmNvbHVtbkhlYWRl''@;'; put 'put ''ckhlaWdodCkmJih0aGlzLmNvbHVtbkhlYWRlckhlaWdodD10aGlzLnd0VGFibGUuVEhFQUQ/SGgodGhpcy53dFRhYmxlLlRIRUFEKTowKTp0aGlzLmNvbHVtbkhlYWRlckhlaWdodD0wLHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0fWdldFJvd0hlYWRlcldpZHRoKCl7Y29uc3QgZT10aGlzLnd0''@;'; put 'put ''U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVyV2lkdGgiKSx0PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIik7aWYoZSl7dGhpcy5yb3dIZWFkZXJXaWR0aD0wO2ZvcihsZXQgcj0wLGk9dC5sZW5ndGg7cjxpO3IrKyl7Y29uc3Qgbz1BcnJheS5pc0FycmF5KGUp''@;'; put 'put ''P2Vbcl06ZTt0aGlzLnJvd0hlYWRlcldpZHRoKz1vPz9OYU59fWlmKGlzTmFOKHRoaXMucm93SGVhZGVyV2lkdGgpKWlmKHQubGVuZ3RoKXtsZXQgcj10aGlzLnd0VGFibGUuVEFCTEUucXVlcnlTZWxlY3RvcigiVEgiKTt0aGlzLnJvd0hlYWRlcldpZHRoPTA7Zm9yKGxldCBpPTAsbz10Lmxl''@;'; put 'put ''bmd0aDtpPG87aSsrKXI/KHRoaXMucm93SGVhZGVyV2lkdGgrPVpkKHIpLHI9ci5uZXh0U2libGluZyk6dGhpcy5yb3dIZWFkZXJXaWR0aCs9NTB9ZWxzZSB0aGlzLnJvd0hlYWRlcldpZHRoPTA7cmV0dXJuIHRoaXMucm93SGVhZGVyV2lkdGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmco''@;'; put 'put ''Im9uTW9kaWZ5Um93SGVhZGVyV2lkdGgiLHRoaXMucm93SGVhZGVyV2lkdGgpfHx0aGlzLnJvd0hlYWRlcldpZHRoLHRoaXMucm93SGVhZGVyV2lkdGh9Y3JlYXRlUm93c0NhbGN1bGF0b3IoZT1bInJlbmRlcmVkIiwiZnVsbHlWaXNpYmxlIiwicGFydGlhbGx5VmlzaWJsZSJdKXtjb25zdHt3''@;'; put 'put ''dFNldHRpbmdzOnQsd3RUYWJsZTpyfT10aGlzLGk9dC5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtsZXQgYSxsLG89dGhpcy5nZXRWaWV3cG9ydEhlaWdodCgpO3RoaXMucm93SGVhZGVyV2lkdGg9TmFOO2xldCB1PXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BTY3JvbGxQb3NpdGlvbi10aGlz''@;'; put 'put ''LmRhdGFBY2Nlc3NPYmplY3QudG9wUGFyZW50T2Zmc2V0O2NvbnN0IGc9dC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxFPXQuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik7cmV0dXJuIGcmJnU+PTAmJihsPXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BPdmVybGF5LnN1bUNlbGxT''@;'; put 'put ''aXplcygwLGcpLHUrPWwsby09bCksRSYmdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmJvdHRvbU92ZXJsYXkuY2xvbmUmJihsPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5ib3R0b21PdmVybGF5LnN1bUNlbGxTaXplcyhpLUUsaSksby09bCksYT1yLmhvbGRlci5jbGllbnRIZWlnaHQ9PT1yLmhvbGRl''@;'; put 'put ''ci5vZmZzZXRIZWlnaHQ/MDpHZCh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCksbmV3IEFBdCh7Y2FsY3VsYXRpb25UeXBlczplLmZsYXRNYXAoTz0+e2NvbnN0IFo9dGhpcy5yb3dzQ2FsY3VsYXRvclR5cGVzLmdldChPKTtyZXR1cm4gWj9bW08sWigpXV06W119KSx2aWV3cG9ydEhl''@;'; put 'put ''aWdodDpvLHNjcm9sbE9mZnNldDp1LHRvdGFsUm93czppLG92ZXJyaWRlRm46dC5nZXRTZXR0aW5nUHVyZSgidmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiKSxob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0OmEscm93SGVpZ2h0Q2FjaGU6dGhpcy5yb3dIZWlnaHRDYWNoZX0pfWNyZWF0''@;'; put 'put ''ZUNvbHVtbnNDYWxjdWxhdG9yKGU9WyJyZW5kZXJlZCIsImZ1bGx5VmlzaWJsZSIsInBhcnRpYWxseVZpc2libGUiXSl7Y29uc3R7d3RTZXR0aW5nczp0LHd0VGFibGU6cn09dGhpcyxpPXQuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIik7bGV0IG89dGhpcy5nZXRWaWV3cG9ydFdpZHRoKCks''@;'; put 'put ''YT1NYXRoLmFicyh0aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRTY3JvbGxQb3NpdGlvbiktdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0UGFyZW50T2Zmc2V0O3RoaXMuY29sdW1uSGVhZGVySGVpZ2h0PU5hTjtjb25zdCBsPXQuZ2V0U2V0dGluZygiZml4ZWRDb2x1''@;'; put 'put ''bW5zU3RhcnQiKTtpZihsJiZhPj0wKXtjb25zdCB1PXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsbCk7YSs9dSxvLT11fXJldHVybiByLmhvbGRlci5jbGllbnRXaWR0aCE9PXIuaG9sZGVyLm9mZnNldFdpZHRoJiYoby09R2QodGhpcy5k''@;'; put 'put ''b21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxuZXcga0F0KHtjYWxjdWxhdGlvblR5cGVzOmUuZmxhdE1hcCh1PT57Y29uc3QgZz10aGlzLmNvbHVtbnNDYWxjdWxhdG9yVHlwZXMuZ2V0KHUpO3JldHVybiBnP1tbdSxnKCldXTpbXX0pLHZpZXdwb3J0V2lkdGg6byxzY3JvbGxPZmZzZXQ6YSx0''@;'; put 'put ''b3RhbENvbHVtbnM6aSxvdmVycmlkZUZuOnQuZ2V0U2V0dGluZ1B1cmUoInZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIiksaW5saW5lU3RhcnRPZmZzZXQ6dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0UGFyZW50T2Zmc2V0LGNvbHVtbldpZHRoQ2FjaGU6dGhpcy5j''@;'; put 'put ''b2x1bW5XaWR0aENhY2hlfSl9Y3JlYXRlQ2FsY3VsYXRvcnMoZT0hMSl7Y29uc3R7d3RTZXR0aW5nczp0fT10aGlzLHI9dGhpcy5jcmVhdGVSb3dzQ2FsY3VsYXRvcigpLGk9dGhpcy5jcmVhdGVDb2x1bW5zQ2FsY3VsYXRvcigpO2lmKGUmJiF0LmdldFNldHRpbmcoInJlbmRlckFsbFJvd3Mi''@;'; put 'put ''KSl7Y29uc3Qgbz1yLmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpLGE9ci5nZXRSZXN1bHRzRm9yKCJwYXJ0aWFsbHlWaXNpYmxlIik7ZT10aGlzLmFyZUFsbFByb3Bvc2VkVmlzaWJsZVJvd3NBbHJlYWR5UmVuZGVyZWQobyxhKX1pZihlJiYhdC5nZXRTZXR0aW5nKCJyZW5kZXJBbGxD''@;'; put 'put ''b2x1bW5zIikpe2NvbnN0IG89aS5nZXRSZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKSxhPWkuZ2V0UmVzdWx0c0ZvcigicGFydGlhbGx5VmlzaWJsZSIpO2U9dGhpcy5hcmVBbGxQcm9wb3NlZFZpc2libGVDb2x1bW5zQWxyZWFkeVJlbmRlcmVkKG8sYSl9cmV0dXJuIGV8fCh0aGlzLnJvd3NS''@;'; put 'put ''ZW5kZXJDYWxjdWxhdG9yPXIuZ2V0UmVzdWx0c0ZvcigicmVuZGVyZWQiKT8/bnVsbCx0aGlzLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yPWkuZ2V0UmVzdWx0c0ZvcigicmVuZGVyZWQiKT8/bnVsbCksdGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3I9ci5nZXRSZXN1bHRzRm9yKCJmdWxseVZp''@;'; put 'put ''c2libGUiKT8/bnVsbCx0aGlzLmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcj1pLmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpPz9udWxsLHRoaXMucm93c1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yPXIuZ2V0UmVzdWx0c0ZvcigicGFydGlhbGx5VmlzaWJsZSIpPz9udWxsLHRoaXMu''@;'; put 'put ''Y29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yPWkuZ2V0UmVzdWx0c0ZvcigicGFydGlhbGx5VmlzaWJsZSIpPz9udWxsLGV9Y3JlYXRlVmlzaWJsZUNhbGN1bGF0b3JzKCl7Y29uc3QgZT10aGlzLmNyZWF0ZVJvd3NDYWxjdWxhdG9yKFsiZnVsbHlWaXNpYmxlIiwicGFydGlhbGx5''@;'; put 'put ''VmlzaWJsZSJdKSx0PXRoaXMuY3JlYXRlQ29sdW1uc0NhbGN1bGF0b3IoWyJmdWxseVZpc2libGUiLCJwYXJ0aWFsbHlWaXNpYmxlIl0pO3RoaXMucm93c1Zpc2libGVDYWxjdWxhdG9yPWUuZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIik/P251bGwsdGhpcy5jb2x1bW5zVmlzaWJsZUNh''@;'; put 'put ''bGN1bGF0b3I9dC5nZXRSZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKT8/bnVsbCx0aGlzLnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj1lLmdldFJlc3VsdHNGb3IoInBhcnRpYWxseVZpc2libGUiKT8/bnVsbCx0aGlzLmNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj10''@;'; put 'put ''LmdldFJlc3VsdHNGb3IoInBhcnRpYWxseVZpc2libGUiKT8/bnVsbH1hcmVBbGxQcm9wb3NlZFZpc2libGVSb3dzQWxyZWFkeVJlbmRlcmVkKGUsdCl7aWYoISh0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvciYmdGhpcy5yb3dzUmVuZGVyQ2FsY3VsYXRvciYmZSYmdCkpcmV0dXJuITE7bGV0''@;'; put 'put ''e3N0YXJ0Um93OnIsZW5kUm93Oml9PWU7Y29uc3R7c3RhcnRSb3c6byxlbmRSb3c6YX09dDtpZihudWxsPT09ciYmbnVsbD09PWkpe2lmKCFlLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXImJm51bGwhPT1vJiYhdGhpcy53dFRhYmxlLmlzUm93QmVmb3JlUmVuZGVyZWRSb3dzKG8pJiZu''@;'; put 'put ''dWxsIT09YSYmIXRoaXMud3RUYWJsZS5pc1Jvd0FmdGVyUmVuZGVyZWRSb3dzKGEpKXJldHVybiEwO3I9byxpPWF9aWYobnVsbD09PXJ8fG51bGw9PT1pKXJldHVybiExO2NvbnN0e3N0YXJ0Um93OmwsZW5kUm93OnUscm93U3RhcnRPZmZzZXQ6Zyxyb3dFbmRPZmZzZXQ6RX09dGhpcy5yb3dz''@;'; put 'put ''UmVuZGVyQ2FsY3VsYXRvcjtpZihudWxsPT09bHx8bnVsbD09PXUpcmV0dXJuITE7Y29uc3QgTz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktMSxaPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZCIpO3JldHVy''@;'; put 'put ''biJudW1iZXIiPT10eXBlb2YgWiYmTnVtYmVyLmlzSW50ZWdlcihaKSYmWj4wPyhyPU1hdGgubWF4KDAsci1NYXRoLm1pbihnLFopKSxpPU1hdGgubWluKE8saStNYXRoLm1pbihFLFopKSk6ImF1dG8iPT09WiYmKHI9TWF0aC5tYXgoMCxyLU1hdGguY2VpbChnLzIpKSxpPU1hdGgubWluKE8s''@;'; put 'put ''aStNYXRoLmNlaWwoRS8yKSkpLCEocjxsfHxyPT09bCYmcj4wfHxpPnV8fGk9PT11JiZpPE8pfWFyZUFsbFByb3Bvc2VkVmlzaWJsZUNvbHVtbnNBbHJlYWR5UmVuZGVyZWQoZSx0KXtpZighKHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yJiZ0aGlzLmNvbHVtbnNSZW5kZXJDYWxjdWxh''@;'; put 'put ''dG9yJiZlJiZ0KSlyZXR1cm4hMTtsZXR7c3RhcnRDb2x1bW46cixlbmRDb2x1bW46aX09ZTtjb25zdHtzdGFydENvbHVtbjpvLGVuZENvbHVtbjphfT10O2lmKG51bGw9PT1yJiZudWxsPT09aSl7aWYoIWUuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciYmbnVsbCE9PW8mJiF0aGlzLnd0''@;'; put 'put ''VGFibGUuaXNDb2x1bW5CZWZvcmVSZW5kZXJlZENvbHVtbnMobykmJm51bGwhPT1hJiYhdGhpcy53dFRhYmxlLmlzQ29sdW1uQWZ0ZXJSZW5kZXJlZENvbHVtbnMoYSkpcmV0dXJuITA7cj1vLGk9YX1pZihudWxsPT09cnx8bnVsbD09PWkpcmV0dXJuITE7Y29uc3R7c3RhcnRDb2x1bW46bCxl''@;'; put 'put ''bmRDb2x1bW46dSxjb2x1bW5TdGFydE9mZnNldDpnLGNvbHVtbkVuZE9mZnNldDpFfT10aGlzLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yO2lmKG51bGw9PT1sfHxudWxsPT09dSlyZXR1cm4hMTtjb25zdCBPPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKS0xLFo9''@;'; put 'put ''dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nVGhyZXNob2xkIik7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBaJiZOdW1iZXIuaXNJbnRlZ2VyKFopJiZaPjA/KHI9TWF0aC5tYXgoMCxyLU1hdGgubWluKGcsWikpLGk9TWF0aC5taW4oTyxpK01hdGgu''@;'; put 'put ''bWluKEUsWikpKToiYXV0byI9PT1aJiYocj1NYXRoLm1heCgwLHItTWF0aC5jZWlsKGcvMikpLGk9TWF0aC5taW4oTyxpK01hdGguY2VpbChFLzIpKSksIShyPGx8fHI9PT1sJiZyPjB8fGk+dXx8aT09PXUmJmk8Tyl9aW52YWxpZGF0ZVJvd0hlaWdodENhY2hlKCl7dGhpcy5yb3dIZWlnaHRD''@;'; put 'put ''YWNoZS5pbnZhbGlkYXRlKCl9aW52YWxpZGF0ZUNvbHVtbldpZHRoQ2FjaGUoKXt0aGlzLmNvbHVtbldpZHRoQ2FjaGUuaW52YWxpZGF0ZSgpfWludmFsaWRhdGVBbGxDYWNoZXMoKXt0aGlzLnJvd0hlaWdodENhY2hlLmludmFsaWRhdGUoKSx0aGlzLmNvbHVtbldpZHRoQ2FjaGUuaW52YWxp''@;'; put 'put ''ZGF0ZSgpfXJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCgpe2FjKHRoaXMuaGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCwoZSx0LHIpPT57clt0XT12b2lkIDB9KX1jb25zdHJ1Y3RvcihlLHQscixpLG8pe3RoaXMuZGF0YUFjY2Vzc09iamVjdD1lLHRoaXMud290''@;'; put 'put ''PWUud290LHRoaXMuaW5zdGFuY2U9dGhpcy53b3QsdGhpcy5kb21CaW5kaW5ncz10LHRoaXMud3RTZXR0aW5ncz1yLHRoaXMud3RUYWJsZT1vLHRoaXMub3ZlcnNpemVkUm93cz17fSx0aGlzLm92ZXJzaXplZENvbHVtbkhlYWRlcnM9e30sdGhpcy5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJz''@;'; put 'put ''TWFya2VkPXt9LHRoaXMuY2xpZW50SGVpZ2h0PTAsdGhpcy5yb3dIZWFkZXJXaWR0aD1OYU4sdGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3I9bnVsbCx0aGlzLmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcj1udWxsLHRoaXMucm93c0NhbGN1bGF0b3JUeXBlcz1uZXcgTWFwKFtbInJlbmRlcmVk''@;'; put 'put ''IiwoKT0+dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJlbmRlckFsbFJvd3MiKT9uZXcgUkF0Om5ldyBJQXRdLFsiZnVsbHlWaXNpYmxlIiwoKT0+bmV3IERBdF0sWyJwYXJ0aWFsbHlWaXNpYmxlIiwoKT0+bmV3IEFrZV1dKSx0aGlzLmNvbHVtbnNDYWxjdWxhdG9yVHlwZXM9bmV3IE1h''@;'; put 'put ''cChbWyJyZW5kZXJlZCIsKCk9PnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyZW5kZXJBbGxDb2x1bW5zIik/bmV3IExBdDpuZXcgT0F0XSxbImZ1bGx5VmlzaWJsZSIsKCk9Pm5ldyBOQXRdLFsicGFydGlhbGx5VmlzaWJsZSIsKCk9Pm5ldyBra2VdXSksdGhpcy5yb3dIZWlnaHRDYWNo''@;'; put 'put ''ZT1uZXcgSWtlKHt0b3RhbEl0ZW1zRm46KCk9PnIuZ2V0U2V0dGluZygidG90YWxSb3dzIiksc2l6ZUZuOmE9Pm8uZ2V0Um93SGVpZ2h0KGEpPz9OYU4sZGVmYXVsdFNpemVGbjooKT0+ci5nZXRTZXR0aW5nKCJzdHlsZXNIYW5kbGVyIikuZ2V0RGVmYXVsdFJvd0hlaWdodCgpfSksdGhpcy5j''@;'; put 'put ''b2x1bW5XaWR0aENhY2hlPW5ldyBJa2Uoe3RvdGFsSXRlbXNGbjooKT0+ci5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxzaXplRm46YT0+by5nZXRDb2x1bW5XaWR0aChhKSxkZWZhdWx0U2l6ZUZuOigpPT41MH0pLHRoaXMuZXZlbnRNYW5hZ2VyPWksdGhpcy5ldmVudE1hbmFnZXIuYWRk''@;'; put 'put ''RXZlbnRMaXN0ZW5lcih0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csInJlc2l6ZSIsKCk9Pnt0aGlzLmNsaWVudEhlaWdodD10aGlzLmdldFdvcmtzcGFjZUhlaWdodCgpfSl9fTtmdW5jdGlvbiBEa2UobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5p''@;'; put 'put ''dGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIExrZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVy''@;'; put 'put ''biBlLmdldChuKX1mdW5jdGlvbiAkZChuLGUpe3JldHVybiBmdW5jdGlvbiBqQXQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLExrZShuLGUsImdldCIpKX1mdW5jdGlvbiBPa2UobixlLHQpe0RrZShuLGUpLGUuc2V0KG4sdCl9ZnVuY3Rpb24gZlkobixlLHQp''@;'; put 'put ''e3JldHVybiBmdW5jdGlvbiBVQXQobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLExrZShuLGUsInNldCIp''@;'; put 'put ''LHQpLHR9ZnVuY3Rpb24gT2xlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiB0fWZ1bmN0aW9uIE5rZShuLGUpe0RrZShuLGUpLGUuYWRkKG4pfXZhciBsbT1uZXcg''@;'; put 'put ''V2Vha01hcCx0Mj1uZXcgV2Vha01hcCxGa2U9bmV3IFdlYWtTZXQsTmxlPW5ldyBXZWFrU2V0O2NsYXNzIHpBdHtzZXRBY3RpdmVPdmVybGF5KGUpe3JldHVybiBmWSh0aGlzLHQyLGUpLHRoaXN9c2V0QWN0aXZlU2VsZWN0aW9uKGUpe3JldHVybiBmWSh0aGlzLGxtLGUpLHRoaXN9c2Nhbigp''@;'; put 'put ''e2NvbnN0IGU9JGQodGhpcyxsbSkuc2V0dGluZ3Muc2VsZWN0aW9uVHlwZSx0PW5ldyBTZXQ7cmV0dXJuImFjdGl2ZS1oZWFkZXIiPT09ZT8odGhpcy5zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKHI9PnQuYWRkKHIpKSx0aGlzLnNjYW5Sb3dzSW5IZWFkZXJzUmFuZ2Uocj0+dC5hZGQocikp''@;'; put 'put ''KToiYXJlYSI9PT1lP3RoaXMuc2NhbkNlbGxzUmFuZ2Uocj0+dC5hZGQocikpOiJmb2N1cyI9PT1lPyh0aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2Uocj0+dC5hZGQocikpLHRoaXMuc2NhblJvd3NJbkhlYWRlcnNSYW5nZShyPT50LmFkZChyKSksdGhpcy5zY2FuQ2VsbHNSYW5nZShy''@;'; put 'put ''PT50LmFkZChyKSkpOiJmaWxsIj09PWU/dGhpcy5zY2FuQ2VsbHNSYW5nZShyPT50LmFkZChyKSk6ImhlYWRlciI9PT1lPyh0aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2Uocj0+dC5hZGQocikpLHRoaXMuc2NhblJvd3NJbkhlYWRlcnNSYW5nZShyPT50LmFkZChyKSkpOiJyb3ciPT09''@;'; put 'put ''ZT8odGhpcy5zY2FuUm93c0luSGVhZGVyc1JhbmdlKHI9PnQuYWRkKHIpKSx0aGlzLnNjYW5Sb3dzSW5DZWxsc1JhbmdlKHI9PnQuYWRkKHIpKSk6ImNvbHVtbiI9PT1lJiYodGhpcy5zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKHI9PnQuYWRkKHIpKSx0aGlzLnNjYW5Db2x1bW5zSW5DZWxs''@;'; put 'put ''c1JhbmdlKHI9PnQuYWRkKHIpKSksdH1zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKGUpe2NvbnN0W3QscixpLG9dPSRkKHRoaXMsbG0pLmdldENvcm5lcnMoKSx7d3RUYWJsZTphfT0kZCh0aGlzLHQyKSxsPWEuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKSx1PWEuZ2V0Q29sdW1uSGVhZGVy''@;'; put 'put ''c0NvdW50KCk7bGV0IGc9MDtmb3IobGV0IEU9LWEuZ2V0Um93SGVhZGVyc0NvdW50KCk7RTxsO0UrKyl7Y29uc3QgTz1hLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKEUpO2lmKCEoTzxyfHxPPm8pKXtmb3IobGV0IFo9LXU7WjwwO1orKyl7aWYoWjx0fHxaPmkpY29udGludWU7Y29u''@;'; put 'put ''c3QgZWU9Wit1O2xldCB2ZT1hLmdldENvbHVtbkhlYWRlcihPLGVlKTtjb25zdCBNZT0kZCh0aGlzLHQyKS5nZXRTZXR0aW5nKCJvbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsTyxlZSx7c2VsZWN0aW9uVHlwZTokZCh0aGlzLGxtKS5zZXR0aW5ncy5zZWxlY3Rpb25UeXBlLGNv''@;'; put 'put ''bHVtbkN1cnNvcjpnLHNlbGVjdGlvbldpZHRoOm8tcisxfSk7bnVsbCE9PU1lJiYoTWUhPT1PJiYodmU9YS5nZXRDb2x1bW5IZWFkZXIoTWUsZWUpKSxocyh2ZSkmJmUodmUpKX1nKz0xfX19c2NhblJvd3NJbkhlYWRlcnNSYW5nZShlKXtjb25zdFt0LHIsaSxvXT0kZCh0aGlzLGxtKS5nZXRD''@;'; put 'put ''b3JuZXJzKCkse3d0VGFibGU6YX09JGQodGhpcyx0MiksbD1hLmdldFJlbmRlcmVkUm93c0NvdW50KCksdT1hLmdldFJvd0hlYWRlcnNDb3VudCgpO2xldCBnPTA7Zm9yKGxldCBFPS1hLmdldENvbHVtbkhlYWRlcnNDb3VudCgpO0U8bDtFKyspe2NvbnN0IE89YS5yb3dGaWx0ZXIucmVuZGVy''@;'; put 'put ''ZWRUb1NvdXJjZShFKTtpZighKE88dHx8Tz5pKSl7Zm9yKGxldCBaPS11O1o8MDtaKyspe2lmKFo8cnx8Wj5vKWNvbnRpbnVlO2NvbnN0IGVlPVordTtsZXQgdmU9YS5nZXRSb3dIZWFkZXIoTyxlZSk7Y29uc3QgTWU9JGQodGhpcyx0MikuZ2V0U2V0dGluZygib25CZWZvcmVIaWdobGlnaHRp''@;'; put 'put ''bmdSb3dIZWFkZXIiLE8sZWUse3NlbGVjdGlvblR5cGU6JGQodGhpcyxsbSkuc2V0dGluZ3Muc2VsZWN0aW9uVHlwZSxyb3dDdXJzb3I6ZyxzZWxlY3Rpb25IZWlnaHQ6aS10KzF9KTtudWxsIT09TWUmJihNZSE9PU8mJih2ZT1hLmdldFJvd0hlYWRlcihNZSxlZSkpLGhzKHZlKSYmZSh2ZSkp''@;'; put 'put ''fWcrPTF9fX1zY2FuQ2VsbHNSYW5nZShlKXtjb25zdHt3dFRhYmxlOnR9PSRkKHRoaXMsdDIpO09sZSh0aGlzLEZrZSxXQXQpLmNhbGwodGhpcywocixpKT0+e2NvbnN0IG89dC5nZXRDZWxsKCRkKHRoaXMsdDIpLmNyZWF0ZUNlbGxDb29yZHMocixpKSk7aWYoIWhzKG8pKXJldHVybjtjb25z''@;'; put 'put ''dCBhPSRkKHRoaXMsdDIpLmdldFNldHRpbmcoIm9uQWZ0ZXJEcmF3U2VsZWN0aW9uIixyLGksJGQodGhpcyxsbSkuc2V0dGluZ3MubGF5ZXJMZXZlbCk7InN0cmluZyI9PXR5cGVvZiBhJiZZcihvLGEpLGUobyl9KX1zY2FuUm93c0luQ2VsbHNSYW5nZShlKXtjb25zdFt0LCxyXT0kZCh0aGlz''@;'; put 'put ''LGxtKS5nZXRDb3JuZXJzKCkse3d0VGFibGU6aX09JGQodGhpcyx0Mik7T2xlKHRoaXMsTmxlLFBrZSkuY2FsbCh0aGlzLChvLGEpPT57aWYobz49dCYmbzw9cil7Y29uc3QgbD1pLmdldENlbGwoJGQodGhpcyx0MikuY3JlYXRlQ2VsbENvb3JkcyhvLGEpKTtocyhsKSYmZShsKX19KX1zY2Fu''@;'; put 'put ''Q29sdW1uc0luQ2VsbHNSYW5nZShlKXtjb25zdFssdCwscl09JGQodGhpcyxsbSkuZ2V0Q29ybmVycygpLHt3dFRhYmxlOml9PSRkKHRoaXMsdDIpO09sZSh0aGlzLE5sZSxQa2UpLmNhbGwodGhpcywobyxhKT0+e2lmKGE+PXQmJmE8PXIpe2NvbnN0IGw9aS5nZXRDZWxsKCRkKHRoaXMsdDIp''@;'; put 'put ''LmNyZWF0ZUNlbGxDb29yZHMobyxhKSk7aHMobCkmJmUobCl9fSl9Y29uc3RydWN0b3IoKXtOa2UodGhpcyxGa2UpLE5rZSh0aGlzLE5sZSksT2tlKHRoaXMsbG0se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9rZSh0aGlzLHQyLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxmWSh0''@;'; put 'put ''aGlzLGxtLG51bGwpLGZZKHRoaXMsdDIsbnVsbCl9fWZ1bmN0aW9uIFdBdChuKXtsZXRbZSx0LHIsaV09JGQodGhpcyxsbSkuZ2V0Q29ybmVycygpO2lmKGU8MCYmcjwwfHx0PDAmJmk8MClyZXR1cm47Y29uc3R7d3RUYWJsZTpvfT0kZCh0aGlzLHQyKSxhPWUhPT1yfHx0IT09aTtpZih0PU1h''@;'; put 'put ''dGgubWF4KHQ/PzAsMCksaT1NYXRoLm1heChpPz8wLDApLGU9TWF0aC5tYXgoZT8/MCwwKSxyPU1hdGgubWF4KHI/PzAsMCksYSl7aWYodD1NYXRoLm1heCh0LG8uZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpKSxpPU1hdGgubWluKGksby5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKSksZT1NYXRo''@;'; put 'put ''Lm1heChlLG8uZ2V0Rmlyc3RSZW5kZXJlZFJvdygpKSxyPU1hdGgubWluKHIsby5nZXRMYXN0UmVuZGVyZWRSb3coKSksaTx0fHxyPGUpcmV0dXJufWVsc2UgaWYoIWhzKG8uZ2V0Q2VsbCgkZCh0aGlzLHQyKS5jcmVhdGVDZWxsQ29vcmRzKGUsdCkpKSlyZXR1cm47Zm9yKGxldCBsPWU7bDw9''@;'; put 'put ''cjtsKz0xKWZvcihsZXQgdT10O3U8PWk7dSs9MSluKGwsdSl9ZnVuY3Rpb24gUGtlKG4pe2NvbnN0e3d0VGFibGU6ZX09JGQodGhpcyx0MiksdD1lLmdldFJlbmRlcmVkUm93c0NvdW50KCkscj1lLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk7Zm9yKGxldCBpPTA7aTx0O2krPTEpe2NvbnN0''@;'; put 'put ''IG89ZS5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShpKTtmb3IobGV0IGE9MDthPHI7YSs9MSluKG8sZS5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShhKSl9fWNvbnN0IEhrZT0iaHQtYm9yZGVyLXN0eWxlLSIsVmtlPWNsYXNzIEdBdHtyZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0''@;'; put 'put ''IGU9dGhpcy53b3Qucm9vdERvY3VtZW50LmJvZHk7aWYodGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihlLCJtb3VzZWRvd24iLCgpPT50aGlzLm9uTW91c2VEb3duKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZSwibW91c2V1cCIsKCk9PnRoaXMub25N''@;'; put 'put ''b3VzZVVwKCkpLHRoaXMubWFpbilmb3IobGV0IHQ9MCxyPXRoaXMubWFpbi5jaGlsZE5vZGVzLmxlbmd0aDt0PHI7dCsrKXtjb25zdCBpPXRoaXMubWFpbjt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGkuY2hpbGROb2Rlc1t0XSwibW91c2VlbnRlciIsYT0+dGhpcy5vbk1v''@;'; put 'put ''dXNlRW50ZXIoYSxpLmNoaWxkTm9kZXNbdF0pKX19b25Nb3VzZURvd24oKXt0aGlzLm1vdXNlRG93bj0hMH1vbk1vdXNlVXAoKXt0aGlzLm1vdXNlRG93bj0hMX1vbk1vdXNlRW50ZXIoZSx0KXtpZighdGhpcy5tb3VzZURvd258fCF0aGlzLndvdC5nZXRTZXR0aW5nKCJoaWRlQm9yZGVyT25N''@;'; put 'put ''b3VzZURvd25PdmVyIikpcmV0dXJuO2UucHJldmVudERlZmF1bHQoKSxGMyhlKTtjb25zdCByPXRoaXMud290LnJvb3REb2N1bWVudC5ib2R5LGk9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0LnN0eWxlLmRpc3BsYXk9Im5vbmUiO2NvbnN0IGE9bD0+eyhmdW5jdGlvbiBvKGwpe2lmKGwu''@;'; put 'put ''Y2xpZW50WTxNYXRoLmZsb29yKGkudG9wKXx8bC5jbGllbnRZPk1hdGguY2VpbChpLnRvcCtpLmhlaWdodCl8fGwuY2xpZW50WDxNYXRoLmZsb29yKGkubGVmdCl8fGwuY2xpZW50WD5NYXRoLmNlaWwoaS5sZWZ0K2kud2lkdGgpKXJldHVybiEwfSkobCkmJih0aGlzLmV2ZW50TWFuYWdlci5y''@;'; put 'put ''ZW1vdmVFdmVudExpc3RlbmVyKHIsIm1vdXNlbW92ZSIsYSksdC5zdHlsZS5kaXNwbGF5PSJibG9jayIpfTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHIsIm1vdXNlbW92ZSIsYSl9Y3JlYXRlQm9yZGVycyhlKXtjb25zdHtyb290RG9jdW1lbnQ6dH09dGhpcy53b3Q7dGhp''@;'; put 'put ''cy5tYWluPXQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Y29uc3Qgcj1bInRvcCIsInN0YXJ0IiwiYm90dG9tIiwiZW5kIiwiY29ybmVyIl07bGV0IGk9dGhpcy5tYWluLnN0eWxlO2kucG9zaXRpb249ImFic29sdXRlIixpLnRvcD0iMCIsaS5sZWZ0PSIwIjtjb25zdCBvPVtdO2ZvcihsZXQgdT0w''@;'; put 'put ''O3U8NTt1Kyspe2NvbnN0IGc9clt1XSxFPXQuY3JlYXRlRWxlbWVudCgiZGl2IiksTz1lZT0+e2NvbnN0IHZlPXRoaXMuc2V0dGluZ3NbZ107cmV0dXJuIHZlJiZ2ZVtlZV0/dmVbZWVdOmUuYm9yZGVyPy5bZWVdfTtFLmNsYXNzTmFtZT1gd3RCb3JkZXIgJHt0aGlzLnNldHRpbmdzLmNsYXNz''@;'; put 'put ''TmFtZXx8IiJ9YCx0aGlzLnNldHRpbmdzW2ddPy5oaWRlJiYoRS5jbGFzc05hbWUrPSIgaGlkZGVuIiksaT1FLnN0eWxlO2NvbnN0IFo9Tygic3R5bGUiKTtaPyhbInN0YXJ0IiwiZW5kIl0uaW5jbHVkZXMoZyk/RS5jbGFzc05hbWUrPWAgJHtIa2V9JHtafS12ZXJ0aWNhbGA6RS5jbGFzc05h''@;'; put 'put ''bWUrPWAgJHtIa2V9JHtafS1ob3Jpem9udGFsYCxpLnNldFByb3BlcnR5KCItLWh0LWN1c3RvbS1ib3JkZXItc2l6ZSIsYCR7Tygid2lkdGgiKX1weGApLGkuc2V0UHJvcGVydHkoIi0taHQtY3VzdG9tLWJvcmRlci1jb2xvciIsU3RyaW5nKE8oImNvbG9yIik/PyIiKSkpOmkuYmFja2dyb3Vu''@;'; put 'put ''ZENvbG9yPVN0cmluZyhPKCJjb2xvciIpPz8iIiksaS5oZWlnaHQ9YCR7Tygid2lkdGgiKX1weGAsaS53aWR0aD1gJHtPKCJ3aWR0aCIpfXB4YCxvLnB1c2goRSksdGhpcy5tYWluLmFwcGVuZENoaWxkKEUpfXRoaXMudG9wPW9bMF0sdGhpcy5zdGFydD1vWzFdLHRoaXMuYm90dG9tPW9bMl0s''@;'; put 'put ''dGhpcy5lbmQ9b1szXSx0aGlzLnRvcFN0eWxlPXRoaXMudG9wLnN0eWxlLHRoaXMuc3RhcnRTdHlsZT10aGlzLnN0YXJ0LnN0eWxlLHRoaXMuYm90dG9tU3R5bGU9dGhpcy5ib3R0b20uc3R5bGUsdGhpcy5lbmRTdHlsZT10aGlzLmVuZC5zdHlsZSx0aGlzLmNvcm5lcj1vWzRdLHRoaXMuY29y''@;'; put 'put ''bmVyLmNsYXNzTmFtZSs9IiBjb3JuZXIiLHRoaXMuY29ybmVyU3R5bGU9dGhpcy5jb3JuZXIuc3R5bGUsdGhpcy5jb3JuZXJTdHlsZS53aWR0aD1gJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aH1weGAsdGhpcy5jb3JuZXJTdHlsZS5oZWlnaHQ9YCR7dGhpcy5jb3JuZXJEZWZhdWx0''@;'; put 'put ''U3R5bGUuaGVpZ2h0fXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlcj1bYCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGh9cHhgLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlclN0eWxlLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlckNvbG9yXS5qb2luKCIg''@;'; put 'put ''IiksUTUoKSYmdGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5nKCJpc0RhdGFWaWV3SW5zdGFuY2UiKSYmdGhpcy5jcmVhdGVNdWx0aXBsZVNlbGVjdG9ySGFuZGxlcygpLHRoaXMuZGlzYXBwZWFyKCk7Y29uc3R7d3RUYWJsZTphfT10aGlzLndvdDtsZXQgbD1hLmJvcmRlcnNIb2xkZXI7bHx8KGw9''@;'; put 'put ''dC5jcmVhdGVFbGVtZW50KCJkaXYiKSxsLmNsYXNzTmFtZT0iaHRCb3JkZXJzIixhLmJvcmRlcnNIb2xkZXI9bCxhLnNwcmVhZGVyLmFwcGVuZENoaWxkKGwpKSxsLmFwcGVuZENoaWxkKHRoaXMubWFpbil9Y3JlYXRlTXVsdGlwbGVTZWxlY3RvckhhbmRsZXMoKXtjb25zdHtyb290RG9jdW1l''@;'; put 'put ''bnQ6ZSx3dFNldHRpbmdzOnR9PXRoaXMud290LHI9dC5nZXRTZXR0aW5nKCJzdHlsZXNIYW5kbGVyIiksaT1yLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtbW9iaWxlLWhhbmRsZS1zaXplIiksbz1yLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtbW9iaWxlLWhhbmRsZS1ib3JkZXItcmFk''@;'; put 'put ''aXVzIiksYT1yLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtbW9iaWxlLWhhbmRsZS1iYWNrZ3JvdW5kLWNvbG9yIiksbD1yLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtbW9iaWxlLWhhbmRsZS1iYWNrZ3JvdW5kLW9wYWNpdHkiKSx1PXIuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1t''@;'; put 'put ''b2JpbGUtaGFuZGxlLWJvcmRlci13aWR0aCIpLGc9ci5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLW1vYmlsZS1oYW5kbGUtYm9yZGVyLWNvbG9yIik7dGhpcy5zZWxlY3Rpb25IYW5kbGVzPXt0b3A6ZS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0b3BIaXRBcmVhOmUuY3JlYXRlRWxlbWVudCgi''@;'; put 'put ''ZGl2IiksYm90dG9tOmUuY3JlYXRlRWxlbWVudCgiZGl2IiksYm90dG9tSGl0QXJlYTplLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHN0eWxlczp7fX0sdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcC5jbGFzc05hbWU9InRvcFNlbGVjdGlvbkhhbmRsZSB0b3BMZWZ0U2VsZWN0aW9uSGFuZGxlIix0''@;'; put 'put ''aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wSGl0QXJlYS5jbGFzc05hbWU9InRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIHRvcExlZnRTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbS5jbGFzc05hbWU9ImJvdHRvbVNlbGVjdGlvbkhhbmRsZSBi''@;'; put 'put ''b3R0b21SaWdodFNlbGVjdGlvbkhhbmRsZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbUhpdEFyZWEuY2xhc3NOYW1lPSJib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSBib3R0b21SaWdodFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5''@;'; put 'put ''bGVzPXt0b3A6dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcC5zdHlsZSx0b3BIaXRBcmVhOnRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVhLnN0eWxlLGJvdHRvbTp0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tLnN0eWxlLGJvdHRvbUhpdEFyZWE6dGhpcy5zZWxlY3Rpb25IYW5k''@;'; put 'put ''bGVzLmJvdHRvbUhpdEFyZWEuc3R5bGV9O2NvbnN0IE89W3RoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tSGl0QXJlYSx0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcEhpdEFyZWFdO2Zvcihjb25zdCBaIG9mIE8pWi5wb3NpdGlvbj0iYWJzb2x1dGUiLFouaGVpZ2h0''@;'; put 'put ''PSI0MHB4IixaLndpZHRoPSI0MHB4IixaLmJvcmRlclJhZGl1cz1gJHtwYXJzZUludChTdHJpbmcoNDAvMS41KSwxMCl9cHhgO2Zvcihjb25zdCBaIG9mW3RoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMudG9wXSlaLnBvc2l0''@;'; put 'put ''aW9uPSJhYnNvbHV0ZSIsWi5oZWlnaHQ9YCR7aX1weGAsWi53aWR0aD1gJHtpfXB4YCxaLmJvcmRlclJhZGl1cz1gJHtvfXB4YCxaLmJhY2tncm91bmQ9YGNvbG9yLW1peChpbiBzcmdiLCAke2F9ICR7bH0lLCB0cmFuc3BhcmVudClgLFouYm9yZGVyPWAke3V9cHggc29saWQgJHtnfWB9aXNT''@;'; put 'put ''b3V0aEVhc3RPZkFyZWFTZWxlY3Rpb24oZSx0KXtjb25zdCByPXRoaXMud290LnNlbGVjdGlvbk1hbmFnZXIuZ2V0QXJlYVNlbGVjdGlvbigpO2lmKCFyKXJldHVybiExO2lmKCFyLmNlbGxSYW5nZSlyZXR1cm4hMDtjb25zdCBpPXIuY2VsbFJhbmdlLmdldEJvdHRvbUVuZENvcm5lcigpO3Jl''@;'; put 'put ''dHVybiBpLnJvdz09PWUmJmkuY29sPT09dH11cGRhdGVNdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXNQb3NpdGlvbihlLHQscixpLG8sYSl7Y29uc3QgdT10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKT8icmlnaHQiOiJsZWZ0Iix7dG9wOmcsdG9wSGl0QXJlYTpFLGJv''@;'; put 'put ''dHRvbTpPLGJvdHRvbUhpdEFyZWE6Wn09dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcyxlZT1wYXJzZUludChnLmJvcmRlcldpZHRoLDEwKSx2ZT1wYXJzZUludChnLndpZHRoLDEwKSxNZT1wYXJzZUludChFLndpZHRoLDEwKSxIZT10aGlzLndvdC53dFRhYmxlLmdldFdpZHRoKCksV2U9''@;'; put 'put ''dGhpcy53b3Qud3RUYWJsZS5nZXRIZWlnaHQoKTtnLnRvcD1gJHtwYXJzZUludChTdHJpbmcoci12ZS0xKSwxMCl9cHhgLGdbdV09YCR7cGFyc2VJbnQoU3RyaW5nKGktdmUtMSksMTApfXB4YCxFLnRvcD1gJHtwYXJzZUludChTdHJpbmcoci1NZS80KjMpLDEwKX1weGAsRVt1XT1gJHtwYXJz''@;'; put 'put ''ZUludChTdHJpbmcoaS1NZS80KjMpLDEwKX1weGA7Y29uc3QgYXQ9TWF0aC5taW4ocGFyc2VJbnQoU3RyaW5nKGkrbyksMTApLEhlLXZlLTIqZWUpLEN0PU1hdGgubWluKHBhcnNlSW50KFN0cmluZyhpK28tTWUvNCksMTApLEhlLU1lLTIqZWUpO09bdV09YCR7YXR9cHhgLFpbdV09YCR7Q3R9''@;'; put 'put ''cHhgO2NvbnN0IEF0PU1hdGgubWluKHBhcnNlSW50KFN0cmluZyhyK2EpLDEwKSxXZS12ZS0yKmVlKSxLdD1NYXRoLm1pbihwYXJzZUludChTdHJpbmcocithLU1lLzQpLDEwKSxXZS1NZS0yKmVlKTtPLnRvcD1gJHtBdH1weGAsWi50b3A9YCR7S3R9cHhgO2NvbnN0IHF0PXRoaXMuc2V0dGlu''@;'; put 'put ''Z3MuYm9yZGVyPy5jb3JuZXJWaXNpYmxlO3F0JiYiZnVuY3Rpb24iPT10eXBlb2YgcXQmJnF0KCk/KGcuZGlzcGxheT0iYmxvY2siLEUuZGlzcGxheT0iYmxvY2siLHRoaXMuaXNTb3V0aEVhc3RPZkFyZWFTZWxlY3Rpb24oZSx0KT8oTy5kaXNwbGF5PSJibG9jayIsWi5kaXNwbGF5PSJibG9j''@;'; put 'put ''ayIpOihPLmRpc3BsYXk9Im5vbmUiLFouZGlzcGxheT0ibm9uZSIpKTooZy5kaXNwbGF5PSJub25lIixPLmRpc3BsYXk9Im5vbmUiLEUuZGlzcGxheT0ibm9uZSIsWi5kaXNwbGF5PSJub25lIiksZT09PXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil8fHQ9''@;'; put 'put ''PT10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik/KGcuekluZGV4PSI5OTk5IixFLnpJbmRleD0iOTk5OSIpOihnLnpJbmRleD0iIixFLnpJbmRleD0iIil9YXBwZWFyKGUpe2lmKHRoaXMuZGlzYWJsZWQpcmV0dXJuO2xldFt0LHIsaSxvXT1lO2lm''@;'; put 'put ''KHQ8MCYmaTwwfHxyPDAmJm88MClyZXR1cm4gdm9pZCB0aGlzLmRpc2FwcGVhcigpO2NvbnN0e3d0VGFibGU6YSxyb290RG9jdW1lbnQ6bCxyb290V2luZG93OnV9PXRoaXMud290LGc9dCE9PWl8fHIhPT1vLEU9YS5nZXRGaXJzdFJlbmRlcmVkUm93KCksTz1hLmdldExhc3RSZW5kZXJlZFJv''@;'; put 'put ''dygpLFo9YS5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCksZWU9YS5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKTtpZihaPDAmJmVlPDB8fEU8MCYmTzwwKXJldHVybiB2b2lkIHRoaXMuZGlzYXBwZWFyKCk7bGV0IHZlO2lmKGcpe2lmKHI9TWF0aC5tYXgocixaKSxvPU1hdGgubWluKG8sZWUpLHQ9''@;'; put 'put ''TWF0aC5tYXgodCxFKSxpPU1hdGgubWluKGksTyksbzxyfHxpPHQpcmV0dXJuIHZvaWQgdGhpcy5kaXNhcHBlYXIoKTtpZih2ZT1hLmdldENlbGwodGhpcy53b3QuY3JlYXRlQ2VsbENvb3Jkcyh0LHIpKSwhaHModmUpKXJldHVybiB2b2lkIHRoaXMuZGlzYXBwZWFyKCl9ZWxzZSBpZih2ZT1h''@;'; put 'put ''LmdldENlbGwodGhpcy53b3QuY3JlYXRlQ2VsbENvb3Jkcyh0LHIpKSwhaHModmUpKXJldHVybiB2b2lkIHRoaXMuZGlzYXBwZWFyKCk7Y29uc3QgTWU9Zz9hLmdldENlbGwodGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhpLG8pKTp2ZSxIZT12ZSxXZT1ocyhNZSk/TWU6SGUsYXQ9WDAoSGUp''@;'; put 'put ''LEN0PWc/WDAoV2UpOmF0LEF0PVgwKGEuVEFCTEUpLEt0PWF0LnRvcCxxdD1hdC5sZWZ0LGduPXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpO2xldCBUbj0wLENuPTA7aWYoZ24pe2NvbnN0IGZyPVpkKGEuVEFCTEUpLGVpPVpkKEhlKTtDbj1xdCtlaS1DdC5sZWZ0''@;'; put 'put ''LFRuPXUuaW5uZXJXaWR0aC1xdC1laS0odS5pbm5lcldpZHRoLUF0LmxlZnQtZnIpLTF9ZWxzZSBDbj1DdC5sZWZ0K1pkKFdlKS1xdCxUbj1xdC1BdC5sZWZ0LTE7aWYodGhpcy5pc0VudGlyZUNvbHVtblNlbGVjdGVkKHQsaSkpe2NvbnN0IGVpPXRoaXMuZ2V0RGltZW5zaW9uc0Zyb21IZWFk''@;'; put 'put ''ZXIoImNvbHVtbnMiLHIsbyx0LEF0KTtsZXQgUG89bnVsbDtlaSYmKFtQbyxUbixDbl09ZWkpLFBvJiYodmU9UG8pfWxldCBxcj1LdC1BdC50b3AtMSwkbj1DdC50b3ArSGgoV2UpLUt0O2lmKHRoaXMuaXNFbnRpcmVSb3dTZWxlY3RlZChyLG8pKXtjb25zdCBlaT10aGlzLmdldERpbWVuc2lv''@;'; put 'put ''bnNGcm9tSGVhZGVyKCJyb3dzIix0LGkscixBdCk7bGV0IFBvPW51bGw7ZWkmJihbUG8scXIsJG5dPWVpKSxQbyYmKHZlPVBvKX1jb25zdCBUcj11LmdldENvbXB1dGVkU3R5bGUoSGUpO3BhcnNlSW50KFRyLmJvcmRlclRvcFdpZHRoLDEwKT4wJiYocXIrPTEsJG49JG4+MD8kbi0xOjApLHBh''@;'; put 'put ''cnNlSW50KFRyW2duPyJib3JkZXJSaWdodFdpZHRoIjoiYm9yZGVyTGVmdFdpZHRoIl0sMTApPjAmJihUbis9MSxDbj1Dbj4wP0NuLTE6MCk7Y29uc3Qgcmk9Z24/InJpZ2h0IjoibGVmdCIsZm49TWF0aC5jZWlsKCh0aGlzLnNldHRpbmdzLmJvcmRlcj8ud2lkdGg/PzApLzIpO3RoaXMudG9w''@;'; put 'put ''U3R5bGUudG9wPWAke3FyfXB4YCx0aGlzLnRvcFN0eWxlW3JpXT1gJHtUbn1weGAsdGhpcy50b3BTdHlsZS53aWR0aD1gJHtDbitmbn1weGAsdGhpcy50b3BTdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy5zdGFydFN0eWxlLnRvcD1gJHtxcn1weGAsdGhpcy5zdGFydFN0eWxlW3JpXT1gJHtU''@;'; put 'put ''bn1weGAsdGhpcy5zdGFydFN0eWxlLmhlaWdodD1gJHskbitmbn1weGAsdGhpcy5zdGFydFN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLmJvdHRvbVN0eWxlLnRvcD1gJHtxciskbi1wYXJzZUludCh0aGlzLmJvdHRvbVN0eWxlLmhlaWdodCwxMCkrZm59cHhgLHRoaXMuYm90dG9tU3R5bGVb''@;'; put 'put ''cmldPWAke1RufXB4YCx0aGlzLmJvdHRvbVN0eWxlLndpZHRoPWAke0NuK2ZufXB4YCx0aGlzLmJvdHRvbVN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLmVuZFN0eWxlLnRvcD1gJHtxcn1weGAsdGhpcy5lbmRTdHlsZVtyaV09YCR7VG4rQ24tcGFyc2VJbnQodGhpcy5lbmRTdHlsZS53aWR0''@;'; put 'put ''aCwxMCkrZm59cHhgLHRoaXMuZW5kU3R5bGUuaGVpZ2h0PWAkeyRuK2ZufXB4YCx0aGlzLmVuZFN0eWxlLmRpc3BsYXk9ImJsb2NrIjtsZXQgeXI9dGhpcy5zZXR0aW5ncy5ib3JkZXI/LmNvcm5lclZpc2libGU7eXI9ImZ1bmN0aW9uIj09dHlwZW9mIHlyP3lyKHRoaXMuc2V0dGluZ3MubGF5''@;'; put 'put ''ZXJMZXZlbCk6eXI7Y29uc3QgQW49dGhpcy53b3QuZ2V0U2V0dGluZygib25Nb2RpZnlHZXRDZWxsQ29vcmRzIixpLG8sITEsInJlbmRlciIpO2xldFtIcix0aV09W2ksb107aWYoQW4mJkFycmF5LmlzQXJyYXkoQW4pJiYoWywsSHIsdGldPUFuKSwhUTUoKSYmeXImJnRoaXMuaXNTb3V0aEVh''@;'; put 'put ''c3RPZkFyZWFTZWxlY3Rpb24oSHIsdGkpKXtjb25zdCBmcj1OdW1iZXIodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGgpO3RoaXMuY29ybmVyU3R5bGUudG9wPXFyKyRuK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtZnIrInB4Iix0aGlzLmNvcm5lclN0eWxlW3JpXT1U''@;'; put 'put ''bitDbit0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LU51bWJlcih0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aCkrInB4Iix0aGlzLmNvcm5lclN0eWxlLmJvcmRlclJpZ2h0V2lkdGg9YCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGh9cHhgLHRoaXMu''@;'; put 'put ''Y29ybmVyU3R5bGUuYm9yZGVyTGVmdFdpZHRoPWAke3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRofXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlckJvdHRvbVdpZHRoPWAke3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRofXB4YCx0aGlzLmNvcm5lclN0eWxl''@;'; put 'put ''LndpZHRoPVN0cmluZyh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCksdGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5PSJub25lIjtsZXQgZWk9SE0oYS5UQUJMRSk7Y29uc3QgUG89T2JqZWN0LmlzKGVpLHUpO1BvJiYoZWk9bC5kb2N1bWVudEVsZW1lbnQpO2NvbnN0IEhvPXBhcnNlSW50''@;'; put 'put ''KFN0cmluZyh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aCksMTApLTEseGk9TWF0aC5jZWlsKHBhcnNlSW50KFN0cmluZyh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCksMTApLzIpO2lmKE1hdGguY2VpbChwYXJzZUludChTdHJpbmcodGhpcy5jb3JuZXJEZWZhdWx0''@;'; put 'put ''U3R5bGUuaGVpZ2h0KSwxMCkvMiksbz09PXRoaXMud290LmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLTEpe2NvbnN0IHdzPVBvP1dlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ6V2Uub2Zmc2V0TGVmdDtsZXQgdHM9ITEsa2E9MDtpZihnbj8oa2E9d3MtcGFyc2VJbnQoU3RyaW5n''@;'; put 'put ''KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoKSwxMCkvMix0cz1rYTwwKTooa2E9d3MrWmQoV2UpK3BhcnNlSW50KFN0cmluZyh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCksMTApLzIsdHM9a2E+PVRzZShlaSkpLHRzKXtjb25zdCBhbz1NYXRoLmZsb29yKFRuK0NuK3RoaXMu''@;'; put 'put ''Y29ybmVyQ2VudGVyUG9pbnRPZmZzZXQteGktSG8pO1lyKHRoaXMuY29ybmVyLCJ3dENvcm5lcklubGluZUVuZEVkZ2UiKSx0aGlzLmNvcm5lclN0eWxlW3JpXT1hby0xKyJweCJ9fWVsc2Uga28odGhpcy5jb3JuZXIsInd0Q29ybmVySW5saW5lRW5kRWRnZSIpO2lmKGk9PT10aGlzLndvdC5n''@;'; put 'put ''ZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS0xKXtjb25zdCB3cz1Qbz9XZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A6V2Uub2Zmc2V0VG9wLHRzPXBhcnNlSW50KFN0cmluZyh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5oZWlnaHQpLDEwKS8yO2lmKHdzK0hoKFdlKSt0cz49ZHcoZWkpKXtj''@;'; put 'put ''b25zdCB1dD1NYXRoLmZsb29yKHFyKyRuK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtdHMtSG8pO1lyKHRoaXMuY29ybmVyLCJ3dENvcm5lckJsb2NrRW5kRWRnZSIpLHRoaXMuY29ybmVyU3R5bGUudG9wPXV0LTErInB4In19ZWxzZSBrbyh0aGlzLmNvcm5lciwid3RDb3JuZXJCbG9j''@;'; put 'put ''a0VuZEVkZ2UiKTt0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9ImJsb2NrIn1lbHNlIHRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0ibm9uZSI7UTUoKSYmdGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5nKCJpc0RhdGFWaWV3SW5zdGFuY2UiKSYmdGhpcy51cGRhdGVNdWx0aXBsZVNlbGVjdGlvbkhh''@;'; put 'put ''bmRsZXNQb3NpdGlvbihpLG8scXIsVG4sQ24sJG4pfWlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoZSx0KXtyZXR1cm4gZT09PXRoaXMud290Lnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpJiZ0PT09dGhpcy53b3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRSb3coKX1pc0VudGlyZVJvd1Nl''@;'; put 'put ''bGVjdGVkKGUsdCl7cmV0dXJuIGU9PT10aGlzLndvdC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSYmdD09PXRoaXMud290Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9Z2V0RGltZW5zaW9uc0Zyb21IZWFkZXIoZSx0LHIsaSxvKXtjb25zdHt3dFRhYmxlOmF9PXRo''@;'; put 'put ''aXMud290LGw9YS53dFJvb3RFbGVtZW50LnBhcmVudE5vZGU7bGV0IHU9bnVsbCxnPW51bGwsRT1udWxsLE89bnVsbCxaPW51bGwsZWU9bnVsbCx2ZT1udWxsLE1lPW51bGw7c3dpdGNoKGUpe2Nhc2Uicm93cyI6dT0oLi4uSGUpPT5hLmdldFJvd0hlYWRlcihIZVswXSxIZVsxXSksZz1IZT0+''@;'; put 'put ''SGgoSGUpLEU9Imh0X19zZWxlY3Rpb24tLXJvd3MiLGVlPSJ0b3AiO2JyZWFrO2Nhc2UiY29sdW1ucyI6dT0oLi4uSGUpPT5hLmdldENvbHVtbkhlYWRlcihIZVswXSxIZVsxXSksZz1IZT0+WmQoSGUpLEU9Imh0X19zZWxlY3Rpb24tLWNvbHVtbnMiLGVlPSJsZWZ0In1pZihFJiZsLmNsYXNz''@;'; put 'put ''TGlzdC5jb250YWlucyhFKSl7Y29uc3QgSGU9dGhpcy53b3QuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aDtpZih2ZT11Py4odCxIZS1pKSxNZT11Py4ocixIZS1pKSwhdmV8fCFNZSlyZXR1cm4hMTtjb25zdCBXZT1YMCh2ZSksYXQ9WDAoTWUpLEN0PVdlW2VlXTtyZXR1cm4g''@;'; put 'put ''Tz1DdC1vW2VlXS0xLFo9YXRbZWVdK2coTWUpLUN0LFt2ZSxPLFpdfXJldHVybiExfWNoYW5nZUJvcmRlclN0eWxlKGUsdCl7Y29uc3Qgcj10aGlzW2VdLGk9ci5zdHlsZSxvPXRbZV07IW98fG8uaGlkZT9ZcihyLCJoaWRkZW4iKTooTGEociwiaGlkZGVuIikmJmtvKHIsImhpZGRlbiIpLGku''@;'; put 'put ''YmFja2dyb3VuZENvbG9yPVN0cmluZyhvLmNvbG9yPz8iIiksKCJ0b3AiPT09ZXx8ImJvdHRvbSI9PT1lKSYmKGkuaGVpZ2h0PWAke28ud2lkdGh9cHhgKSwoInN0YXJ0Ij09PWV8fCJlbmQiPT09ZSkmJihpLndpZHRoPWAke28ud2lkdGh9cHhgKSl9Y2hhbmdlQm9yZGVyVG9EZWZhdWx0U3R5''@;'; put 'put ''bGUoZSl7Y29uc3Qgcj10aGlzW2VdLnN0eWxlO3IuYmFja2dyb3VuZENvbG9yPSIjMDAwIixyLndpZHRoPSIxcHgiLHIuaGVpZ2h0PSIxcHgifXRvZ2dsZUhpZGRlbkNsYXNzKGUsdCl7dGhpcy5jaGFuZ2VCb3JkZXJUb0RlZmF1bHRTdHlsZShlKTtjb25zdCByPXRoaXNbZV07dD9ZcihyLCJo''@;'; put 'put ''aWRkZW4iKTprbyhyLCJoaWRkZW4iKX1kaXNhcHBlYXIoKXt0aGlzLnRvcFN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuYm90dG9tU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5zdGFydFN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuZW5kU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5jb3Ju''@;'; put 'put ''ZXJTdHlsZS5kaXNwbGF5PSJub25lIixRNSgpJiZ0aGlzLmluc3RhbmNlLmdldFNldHRpbmcoImlzRGF0YVZpZXdJbnN0YW5jZSIpJiYodGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3AuZGlzcGxheT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3BIaXRBcmVh''@;'; put 'put ''LmRpc3BsYXk9Im5vbmUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tLmRpc3BsYXk9Im5vbmUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tSGl0QXJlYS5kaXNwbGF5PSJub25lIil9ZGVzdHJveSgpe3RoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3lXaXRo''@;'; put 'put ''T3duRXZlbnRzT25seSgpLHRoaXMubWFpbj8ucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQodGhpcy5tYWluKX1jb25zdHJ1Y3RvcihlLHQpe3QmJih0aGlzLmV2ZW50TWFuYWdlcj1lLmV2ZW50TWFuYWdlcix0aGlzLmluc3RhbmNlPWUsdGhpcy53b3Q9ZSx0aGlzLnNldHRpbmdzPXQsdGhpcy5t''@;'; put 'put ''b3VzZURvd249ITEsdGhpcy5tYWluPW51bGwsdGhpcy50b3A9bnVsbCx0aGlzLmJvdHRvbT1udWxsLHRoaXMuc3RhcnQ9bnVsbCx0aGlzLmVuZD1udWxsLHRoaXMudG9wU3R5bGU9bnVsbCx0aGlzLmJvdHRvbVN0eWxlPW51bGwsdGhpcy5zdGFydFN0eWxlPW51bGwsdGhpcy5lbmRTdHlsZT1u''@;'; put 'put ''dWxsLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlPXZsZSh0aGlzLmluc3RhbmNlKSx0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0PS1NYXRoLmNlaWwocGFyc2VJbnQoU3RyaW5nKHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoKSwxMCkvMiksdGhpcy5jb3JuZXI9bnVsbCx0aGlzLmNv''@;'; put 'put ''cm5lclN0eWxlPW51bGwsdGhpcy5jcmVhdGVCb3JkZXJzKHQpLHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKSl9fTtmdW5jdGlvbiBCa2UobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNl''@;'; put 'put ''IG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGprZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiB0bChuLGUpe3JldHVybiBmdW5j''@;'; put 'put ''dGlvbiAkQXQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLGprZShuLGUsImdldCIpKX1mdW5jdGlvbiByVChuLGUsdCl7QmtlKG4sZSksZS5zZXQobix0KX1mdW5jdGlvbiBTdyhuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIHFBdChuLGUsdCl7aWYoZS5zZXQpZS5z''@;'; put 'put ''ZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4samtlKG4sZSwic2V0IiksdCksdH12YXIgbjI9bmV3IFdlYWtNYXAsVjM9bmV3IFdlYWtNYXAs''@;'; put 'put ''cFk9bmV3IFdlYWtNYXAsaVQ9bmV3IFdlYWtNYXAsZ1k9bmV3IFdlYWtNYXAsdzc9bmV3IFdlYWtNYXAsVWtlPW5ldyBXZWFrU2V0O2NsYXNzIFFBdHtzZXRBY3RpdmVPdmVybGF5KGUpe3JldHVybiBTdyh0aGlzLG4yLGUpLHRsKHRoaXMscFkpLnNldEFjdGl2ZU92ZXJsYXkodGwodGhpcyxu''@;'; put 'put ''MikpLHRsKHRoaXMsaVQpLmhhcyh0bCh0aGlzLG4yKSl8fHRsKHRoaXMsaVQpLnNldCh0bCh0aGlzLG4yKSxuZXcgU2V0KSx0aGlzfWdldEZvY3VzU2VsZWN0aW9uKCl7cmV0dXJuIG51bGwhPT10bCh0aGlzLFYzKT90bCh0aGlzLFYzKS5nZXRGb2N1cygpOm51bGx9Z2V0QXJlYVNlbGVjdGlv''@;'; put 'put ''bigpe3JldHVybiBudWxsIT09dGwodGhpcyxWMyk/dGwodGhpcyxWMykuY3JlYXRlTGF5ZXJlZEFyZWEoKTpudWxsfWdldEJvcmRlckluc3RhbmNlKGUpe2lmKCFlLnNldHRpbmdzLmJvcmRlcilyZXR1cm4gbnVsbDtpZih0bCh0aGlzLHc3KS5oYXMoZSkpe2NvbnN0IHI9dGwodGhpcyx3Nyku''@;'; put 'put ''Z2V0KGUpO2lmKHIuaGFzKHRsKHRoaXMsbjIpKSlyZXR1cm4gci5nZXQodGwodGhpcyxuMikpO2NvbnN0IGk9bmV3IFZrZSh0bCh0aGlzLG4yKSxlLnNldHRpbmdzKTtyZXR1cm4gci5zZXQodGwodGhpcyxuMiksaSksaX1jb25zdCB0PW5ldyBWa2UodGwodGhpcyxuMiksZS5zZXR0aW5ncyk7''@;'; put 'put ''cmV0dXJuIHRsKHRoaXMsdzcpLnNldChlLG5ldyBNYXAoW1t0bCh0aGlzLG4yKSx0XV0pKSx0fWdldEJvcmRlckluc3RhbmNlcyhlKXtyZXR1cm4gQXJyYXkuZnJvbSh0bCh0aGlzLHc3KS5nZXQoZSk/LnZhbHVlcygpPz9bXSl9ZGVzdHJveUJvcmRlcnMoZSl7dGwodGhpcyx3NykuZ2V0KGUp''@;'; put 'put ''Py5mb3JFYWNoKHQ9PnQuZGVzdHJveSgpKSx0bCh0aGlzLHc3KS5kZWxldGUoZSl9cmVmcmVzaEFsbEJvcmRlckhhbmRsZVN0eWxlcygpe3RsKHRoaXMsdzcpLmZvckVhY2goZT0+e2UuZm9yRWFjaCh0PT57InVwZGF0ZU11bHRpcGxlU2VsZWN0b3JIYW5kbGVzU3R5bGVzImluIHQmJiJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiB0LnVwZGF0ZU11bHRpcGxlU2VsZWN0b3JIYW5kbGVzU3R5bGVzJiZ0LnVwZGF0ZU11bHRpcGxlU2VsZWN0b3JIYW5kbGVzU3R5bGVzKCl9KX0pfXJlbmRlcihlKXtpZihudWxsPT09dGwodGhpcyxWMykpcmV0dXJuO2UmJmZ1bmN0aW9uIEtBdChuLGUsdCl7aWYoIWUu''@;'; put 'put ''aGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH0odGhpcyxVa2UsSkF0KS5jYWxsKHRoaXMpO2NvbnN0IHQ9QXJyYXkuZnJvbSh0bCh0aGlzLFYzKSkscj1uZXcgTWFwLGk9bmV3IE1hcDtm''@;'; put 'put ''b3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7Y29uc3QgYT10W29dLHtjbGFzc05hbWU6bCxoZWFkZXJBdHRyaWJ1dGVzOnUsY3JlYXRlTGF5ZXJzOmcsc2VsZWN0aW9uVHlwZTpFfT1hLnNldHRpbmdzO3RsKHRoaXMsZ1kpLmhhcyhhKXx8KHRsKHRoaXMsZ1kpLmFkZChhKSxhLmFkZExvY2Fs''@;'; put 'put ''SG9vaygiZGVzdHJveSIsKCk9PnRoaXMuZGVzdHJveUJvcmRlcnMoYSkpKTtjb25zdCBPPXRoaXMuZ2V0Qm9yZGVySW5zdGFuY2UoYSk7aWYoYS5pc0VtcHR5KCkpe08/LmRpc2FwcGVhcigpO2NvbnRpbnVlfWwmJnRsKHRoaXMscFkpLnNldEFjdGl2ZVNlbGVjdGlvbihhKS5zY2FuKCkuZm9y''@;'; put 'put ''RWFjaCh2ZT0+e2lmKHIuaGFzKHZlKSl7Y29uc3QgTWU9ci5nZXQodmUpO01lLmhhcyhsKSYmITA9PT1nP01lLnNldChsLChNZS5nZXQobCk/PzApKzEpOk1lLnNldChsLDEpfWVsc2Ugci5zZXQodmUsbmV3IE1hcChbW2wsMV1dKSk7aWYodSYmKGkuaGFzKHZlKXx8aS5zZXQodmUsW10pLCJU''@;'; put 'put ''SCI9PT12ZS5ub2RlTmFtZSkpe2NvbnN0IE1lPXU7aS5nZXQodmUpLnB1c2goLi4uTWUpfX0pO2NvbnN0IFo9YS5nZXRDb3JuZXJzKCk7dGwodGhpcyxuMikuZ2V0U2V0dGluZygib25CZWZvcmVEcmF3Qm9yZGVycyIsWixFKSxPPy5hcHBlYXIoWil9ci5mb3JFYWNoKChvLGEpPT57Y29uc3Qg''@;'; put 'put ''bD1BcnJheS5mcm9tKG8pLm1hcCgoW3UsZ10pPT4xPT09Zz91Olt1LC4uLkFycmF5LmZyb20oe2xlbmd0aDpnLTF9LChFLE8pPT5gJHt1fS0ke08rMX1gKV0pLmZsYXQoKTtsLmZvckVhY2godT0+dGwodGhpcyxpVCkuZ2V0KHRsKHRoaXMsbjIpKT8uYWRkKHUpKSxZcihhLGwpLCJURCI9PT1h''@;'; put 'put ''Lm5vZGVOYW1lJiZBcnJheS5pc0FycmF5KHRsKHRoaXMsVjMpLm9wdGlvbnM/LmNlbGxBdHRyaWJ1dGVzKSYmS28oYSx0bCh0aGlzLFYzKS5vcHRpb25zLmNlbGxBdHRyaWJ1dGVzKX0pLEFycmF5LmZyb20oaS5rZXlzKCkpLmZvckVhY2gobz0+e0tvKG8sWy4uLmkuZ2V0KG8pXSl9KX1jb25z''@;'; put 'put ''dHJ1Y3RvcihlKXsoZnVuY3Rpb24gWEF0KG4sZSl7QmtlKG4sZSksZS5hZGQobil9KSh0aGlzLFVrZSksclQodGhpcyxuMix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksclQodGhpcyxWMyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksclQodGhpcyxwWSx7d3JpdGFibGU6ITAsdmFs''@;'; put 'put ''dWU6dm9pZCAwfSksclQodGhpcyxpVCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksclQodGhpcyxnWSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksclQodGhpcyx3Nyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksU3codGhpcyxuMixudWxsKSxTdyh0aGlzLHBZLG5ldyB6QXQp''@;'; put 'put ''LFN3KHRoaXMsaVQsbmV3IFdlYWtNYXApLFN3KHRoaXMsZ1ksbmV3IFdlYWtTZXQpLFN3KHRoaXMsdzcsbmV3IE1hcCksU3codGhpcyxWMyxlKX19ZnVuY3Rpb24gSkF0KCl7Y29uc3Qgbj10bCh0aGlzLGlUKS5nZXQodGwodGhpcyxuMikpO2lmKCFuKXJldHVybjtjb25zdCBlPXRsKHRoaXMs''@;'; put 'put ''bjIpLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIpO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspbi5hZGQoZVt0XSk7bi5mb3JFYWNoKHQ9Pntjb25zdCByPXRsKHRoaXMsbjIpLnd0VGFibGUuVEFCTEUu''@;'; put 'put ''cXVlcnlTZWxlY3RvckFsbChgLiR7dH1gKTtsZXQgaT1bXTtBcnJheS5pc0FycmF5KHRsKHRoaXMsVjMpLm9wdGlvbnM/LmNlbGxBdHRyaWJ1dGVzKSYmKGk9dGwodGhpcyxWMykub3B0aW9ucy5jZWxsQXR0cmlidXRlcy5tYXAobz0+b1swXSkpLEFycmF5LmlzQXJyYXkodGwodGhpcyxWMyku''@;'; put 'put ''b3B0aW9ucz8uaGVhZGVyQXR0cmlidXRlcykmJihpPVsuLi5pLC4uLnRsKHRoaXMsVjMpLm9wdGlvbnMuaGVhZGVyQXR0cmlidXRlcy5tYXAobz0+b1swXSldKTtmb3IobGV0IG89MCxhPXIubGVuZ3RoO288YTtvKyspa28ocltvXSx0KSx3NChyW29dLGkpfSksbi5jbGVhcigpfWNsYXNzIGVr''@;'; put 'put ''dCBleHRlbmRzIG1sZXtleHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpe2NvbnN0IHQ9W10scj1bXTthYyh7cm93SGVhZGVyczoiaHRSb3dIZWFkZXJzIixjb2x1bW5IZWFkZXJzOiJodENvbHVtbkhlYWRlcnMifSwoaSxvKT0+e3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKG8pLmxlbmd0''@;'; put 'put ''aCYmci5wdXNoKGkpLHQucHVzaChpKX0pLGtvKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUsdCksWXIodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSxyKX1kZXN0cm95KCl7dGhpcy53dFRhYmxlLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9Z2V0''@;'; put 'put ''T3ZlcmxheUJ5TmFtZShlKXtpZighWEFlLmluY2x1ZGVzKGUpKXJldHVybiBudWxsO2NvbnN0IHQ9ZS5yZXBsYWNlKC9fKFthLXpdKS9nLChyLGkpPT5pLnRvVXBwZXJDYXNlKCkpO3JldHVybiB0aGlzLnd0T3ZlcmxheXNbYCR7dH1PdmVybGF5YF0/P251bGx9Z2V0Vmlld3BvcnREYW8oKXty''@;'; put 'put ''ZXR1cm4oZT0+KHtnZXQgd290KCl7cmV0dXJuIGV9LGdldCB0b3BPdmVybGF5VHJpbW1pbmdDb250YWluZXIoKXtyZXR1cm4gZS53dE92ZXJsYXlzLnRvcE92ZXJsYXkudHJpbW1pbmdDb250YWluZXJ9LGdldCBpbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcigpe3JldHVybiBl''@;'; put 'put ''Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LnRyaW1taW5nQ29udGFpbmVyfSxnZXQgdG9wU2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gZS53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKX0sZ2V0IHRvcFBhcmVudE9mZnNldCgpe3JldHVybiBlLnd0T3Zlcmxh''@;'; put 'put ''eXMudG9wT3ZlcmxheS5nZXRUYWJsZVBhcmVudE9mZnNldCgpfSxnZXQgaW5saW5lU3RhcnRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBlLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCl9LGdldCBpbmxpbmVTdGFydFBhcmVudE9mZnNldCgpe3JldHVy''@;'; put 'put ''biBlLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFRhYmxlUGFyZW50T2Zmc2V0KCl9LGdldCB0b3BPdmVybGF5KCl7cmV0dXJuIGUud3RPdmVybGF5cy50b3BPdmVybGF5fSxnZXQgaW5saW5lU3RhcnRPdmVybGF5KCl7cmV0dXJuIGUud3RPdmVybGF5cy5pbmxpbmVTdGFydE92''@;'; put 'put ''ZXJsYXl9LGdldCBib3R0b21PdmVybGF5KCl7cmV0dXJuIGUud3RPdmVybGF5cy5ib3R0b21PdmVybGF5fX0pKSh0aGlzKX1jb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsbmV3IFNBdCh0KSk7Y29uc3Qgcj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZmFjYWRlIix0aGlzKTt0aGlzLnd0''@;'; put 'put ''VGFibGU9bmV3IHhBdCh0aGlzLmdldFRhYmxlRGFvKCkscix0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyksdGhpcy53dFZpZXdwb3J0PW5ldyBCQXQodGhpcy5nZXRWaWV3cG9ydERhbygpLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzLHRoaXMuZXZlbnRNYW5hZ2Vy''@;'; put 'put ''LHRoaXMud3RUYWJsZSksdGhpcy5zZWxlY3Rpb25NYW5hZ2VyPW5ldyBRQXQodGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNlbGVjdGlvbnMiKSksdGhpcy53dEV2ZW50PW5ldyBHQWUocix0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlz''@;'; put 'put ''Lnd0VGFibGUsdGhpcy5zZWxlY3Rpb25NYW5hZ2VyKSx0aGlzLnd0T3ZlcmxheXM9bmV3IENBdCh0aGlzLHIsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5ldmVudE1hbmFnZXIsdGhpcy53dFRhYmxlKSx0aGlzLmV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCksdGhp''@;'; put 'put ''cy5maW5kT3JpZ2luYWxIZWFkZXJzKCl9fWNsYXNzIEZsZXtfaW5pdEZyb21TZXR0aW5ncyhlKXtlLmZhY2FkZT10PT57Y29uc3Qgcj1uZXcgRmxlKHQpO3JldHVybigpPT5yfSx0aGlzLl93b3Q9bmV3IGVrdChlLnRhYmxlLGUpfWdldCBndWlkKCl7cmV0dXJuIHRoaXMuX3dvdC5ndWlkfWdl''@;'; put 'put ''dCByb290RG9jdW1lbnQoKXtyZXR1cm4gdGhpcy5fd290LmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudH1nZXQgcm9vdFdpbmRvdygpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3Mucm9vdFdpbmRvd31nZXQgd3RTZXR0aW5ncygpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5nc31nZXQg''@;'; put 'put ''Y2xvbmVTb3VyY2UoKXtyZXR1cm4gdGhpcy5fd290LmNsb25lU291cmNlfWdldCBjbG9uZU92ZXJsYXkoKXtyZXR1cm4gdGhpcy5fd290LmNsb25lT3ZlcmxheX1nZXQgc2VsZWN0aW9uTWFuYWdlcigpe3JldHVybiB0aGlzLl93b3Quc2VsZWN0aW9uTWFuYWdlcn1nZXQgd3RWaWV3cG9ydCgp''@;'; put 'put ''e3JldHVybiB0aGlzLl93b3Qud3RWaWV3cG9ydH1nZXQgd3RPdmVybGF5cygpe3JldHVybiB0aGlzLl93b3Qud3RPdmVybGF5c31nZXQgd3RUYWJsZSgpe3JldHVybiB0aGlzLl93b3Qud3RUYWJsZX1nZXQgd3RFdmVudCgpe3JldHVybiB0aGlzLl93b3Qud3RFdmVudH1nZXQgd3RTY3JvbGwo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fd290Lnd0U2Nyb2xsfWdldCBkcmF3bigpe3JldHVybiB0aGlzLl93b3QuZHJhd259c2V0IGRyYXduKGUpe3RoaXMuX3dvdC5kcmF3bj1lfWdldCBhY3RpdmVPdmVybGF5TmFtZSgpe3JldHVybiB0aGlzLl93b3QuYWN0aXZlT3ZlcmxheU5hbWV9Z2V0IGRyYXdJbnRl''@;'; put 'put ''cnJ1cHRlZCgpe3JldHVybiB0aGlzLl93b3QuZHJhd0ludGVycnVwdGVkfXNldCBkcmF3SW50ZXJydXB0ZWQoZSl7dGhpcy5fd290LmRyYXdJbnRlcnJ1cHRlZD1lfWdldCBsYXN0TW91c2VPdmVyKCl7cmV0dXJuIHRoaXMuX3dvdC5sYXN0TW91c2VPdmVyfXNldCBsYXN0TW91c2VPdmVyKGUp''@;'; put 'put ''e3RoaXMuX3dvdC5sYXN0TW91c2VPdmVyPWV9Z2V0IG1vbWVudHVtU2Nyb2xsaW5nKCl7cmV0dXJuIHRoaXMuX3dvdC5tb21lbnR1bVNjcm9sbGluZ31zZXQgbW9tZW50dW1TY3JvbGxpbmcoZSl7dGhpcy5fd290Lm1vbWVudHVtU2Nyb2xsaW5nPWV9Z2V0IHRvdWNoQXBwbGllZCgpe3JldHVy''@;'; put 'put ''biB0aGlzLl93b3QudG91Y2hBcHBsaWVkfXNldCB0b3VjaEFwcGxpZWQoZSl7dGhpcy5fd290LnRvdWNoQXBwbGllZD1lfWdldCBkb21CaW5kaW5ncygpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3N9Z2V0IGV2ZW50TGlzdGVuZXJzKCl7cmV0dXJuIHRoaXMuX3dvdC5ldmVudExpc3Rl''@;'; put 'put ''bmVyc31zZXQgZXZlbnRMaXN0ZW5lcnMoZSl7dGhpcy5fd290LmV2ZW50TGlzdGVuZXJzPWV9Z2V0IGV2ZW50TWFuYWdlcigpe3JldHVybiB0aGlzLl93b3QuZXZlbnRNYW5hZ2VyfWNyZWF0ZUNlbGxDb29yZHMoZSx0KXtyZXR1cm4gdGhpcy5fd290LmNyZWF0ZUNlbGxDb29yZHMoZSx0KX1j''@;'; put 'put ''cmVhdGVDZWxsUmFuZ2UoZSx0LHIpe3JldHVybiB0aGlzLl93b3QuY3JlYXRlQ2VsbFJhbmdlKGUsdCxyKX1kcmF3KGU9ITEpe3JldHVybiB0aGlzLl93b3QuZHJhdyhlKSx0aGlzfWdldENlbGwoZSx0PSExKXtyZXR1cm4gdGhpcy5fd290LmdldENlbGwoZSx0KX1zY3JvbGxWaWV3cG9ydChl''@;'; put 'put ''LHQscil7cmV0dXJuIHRoaXMuX3dvdC5zY3JvbGxWaWV3cG9ydChlLHQscil9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkoZSx0KXtyZXR1cm4gdGhpcy5fd290LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGUsdCl9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGUsdCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX3dvdC5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkoZSx0KX1nZXRWaWV3cG9ydCgpe3JldHVybiB0aGlzLl93b3QuZ2V0Vmlld3BvcnQoKX1nZXRPdmVybGF5TmFtZSgpe3JldHVybiB0aGlzLl93b3QuY2xvbmVPdmVybGF5P3RoaXMuX3dvdC5jbG9uZU92ZXJsYXkudHlwZToibWFzdGVy''@;'; put 'put ''In1nZXRPdmVybGF5QnlOYW1lKGUpe3JldHVybiB0aGlzLl93b3QuZ2V0T3ZlcmxheUJ5TmFtZShlKX1leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpe3RoaXMuX3dvdC5leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpfXVwZGF0ZShlLHQpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5n''@;'; put 'put ''cy51cGRhdGUoZSx0KSx0aGlzfWdldFNldHRpbmcoZSx0LHIsaSxvKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZyhlLHQscixpLG8pfWhhc1NldHRpbmcoZSl7cmV0dXJuIHRoaXMuX3dvdC53dFNldHRpbmdzLmhhcyhlKX1kZXN0cm95KCl7dGhpcy5fd290LmRlc3Ry''@;'; put 'put ''b3koKX1jb25zdHJ1Y3RvcihlKXtlIGluc3RhbmNlb2YgbWxlP3RoaXMuX3dvdD1lOnRoaXMuX2luaXRGcm9tU2V0dGluZ3MoZSl9fWZ1bmN0aW9uIHprZSh7aXNTaGlmdEtleTpuLGlzTGVmdENsaWNrOmUsaXNSaWdodENsaWNrOnQsY29vcmRzOnIsc2VsZWN0aW9uOmksY29udHJvbGxlcjpv''@;'; put 'put ''LGNlbGxDb29yZHNGYWN0b3J5OmF9KXtjb25zdCBsPWksdT1sLmlzU2VsZWN0ZWQoKT9sLmdldFNlbGVjdGVkUmFuZ2UoKS5jdXJyZW50KCk6bnVsbCxnPWwuaXNTZWxlY3RlZEJ5Q29ybmVyKCksRT1sLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO2wubWFya1NvdXJjZSgibW91c2UiKTtjb25z''@;'; put 'put ''dCBPPXIucm93Pz8tMSxaPXIuY29sPz8tMTtpZihuJiZ1KU8+PTAmJlo+PTAmJiFvLmNlbGw/bC5zZXRSYW5nZUVuZChyKTpnJiZPPDAmJiFvLmNvbHVtbj9sLnNldFJhbmdlRW5kKGEodS50by5yb3c/PzAsWikpOkUmJlo8MCYmIW8ucm93P2wuc2V0UmFuZ2VFbmQoYShPLHUudG8uY29sPz8w''@;'; put 'put ''KSk6KCFnJiYhRSYmWjwwfHxnJiZaPDApJiYhby5yb3c/bC5zZWxlY3RSb3dzKE1hdGgubWF4KHUuZnJvbS5yb3c/PzAsMCksTyxaKTooIWcmJiFFJiZPPDB8fEUmJk88MCkmJiFvLmNvbHVtbiYmbC5zZWxlY3RDb2x1bW5zKE1hdGgubWF4KHUuZnJvbS5jb2w/PzAsMCksWixPKTtlbHNle2Nv''@;'; put 'put ''bnN0IGVlPSFsLmluSW5TZWxlY3Rpb24ociksdmU9ZXx8dCYmZWU7TzwwJiZaPj0wJiYhby5jb2x1bW4/dmUmJmwuc2VsZWN0Q29sdW1ucyhaLFosTyk6WjwwJiZPPj0wJiYhby5yb3c/dmUmJmwuc2VsZWN0Um93cyhPLE8sWik6Wj49MCYmTz49MCYmIW8uY2VsbD92ZSYmbC5zZXRSYW5nZVN0''@;'; put 'put ''YXJ0KHIpOlo8MCYmTzwwJiZsLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITAsZm9jdXNQb3NpdGlvbjp7cm93OjAsY29sOjB9fSl9bC5tYXJrRW5kU291cmNlKCl9ZnVuY3Rpb24gV2tlKHtpc0xlZnRDbGljazpuLGNvb3JkczplLHNlbGVjdGlvbjp0LGNvbnRy''@;'; put 'put ''b2xsZXI6cixjZWxsQ29vcmRzRmFjdG9yeTppfSl7aWYoIW4pcmV0dXJuO2NvbnN0IG89dCxhPW8uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksbD1vLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLHU9by50YWJsZVByb3BzLmNvdW50Q29scygpLGc9by50YWJsZVByb3BzLmNvdW50Um93cygp''@;'; put 'put ''O28ubWFya1NvdXJjZSgibW91c2UiKSxsJiYhci5jb2x1bW4/by5zZXRSYW5nZUVuZChpKGctMSxlLmNvbD8/MCkpOmEmJiFyLnJvdz9vLnNldFJhbmdlRW5kKGkoZS5yb3c/PzAsdS0xKSk6ci5jZWxsfHxvLnNldFJhbmdlRW5kKGUpLG8ubWFya0VuZFNvdXJjZSgpfWZ1bmN0aW9uIFlrZSh7''@;'; put 'put ''aXNMZWZ0Q2xpY2s6bixzZWxlY3Rpb246ZSxjZWxsUmFuZ2VNYXBwZXI6dH0pe2NvbnN0IHI9ZSxpPXIuc2V0dGluZ3MuZGlzYWJsZVZpc3VhbFNlbGVjdGlvbixvPSEwPT09aXx8InN0cmluZyI9PXR5cGVvZiBpJiZpLmxlbmd0aD4wfHxBcnJheS5pc0FycmF5KGkpJiZpLmxlbmd0aD4wO2lm''@;'; put 'put ''KCFufHwibXVsdGlwbGUiIT09ci5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlfHxvKXJldHVybjtjb25zdCBhPXIuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9YS5jbG9uZSgpLm1hcChnPT50LnRvUmVuZGVyYWJsZShnKSksdT1sLmN1cnJlbnQoKTtpZih1JiZsLnNpemUoKT4xJiYhdS5pc0hlYWRlcigp''@;'; put 'put ''JiYhci5pc011bHRpcGxlKHUpKXtjb25zdCBnPWwuZmluZEFsbCh1KTtnLmxlbmd0aD09PWwuc2l6ZSgpPyhlLm1hcmtTb3VyY2UoImRlc2VsZWN0IiksYS5wb3AoKSxlLnJlZnJlc2goKSxlLm1hcmtFbmRTb3VyY2UoKSk6Zy5sZW5ndGg+MSYmKGUubWFya1NvdXJjZSgiZGVzZWxlY3QiKSxh''@;'; put 'put ''LnJlbW92ZUxheWVycyhnLm1hcCgoe2xheWVyOkV9KT0+RSkpLGUucmVmcmVzaCgpLGUubWFya0VuZFNvdXJjZSgpKX19Y29uc3QgdGt0PW5ldyBNYXAoW1sidG91Y2hzdGFydCIsemtlXSxbInRvdWNoZW5kIixZa2VdLFsibW91c2Vkb3duIix6a2VdLFsibW91c2VvdmVyIixXa2VdLFsibW91''@;'; put 'put ''c2Vtb3ZlIixXa2VdLFsibW91c2V1cCIsWWtlXV0pO2Z1bmN0aW9uIG1ZKG4sZSl7Y29uc3QgdD10a3QuZ2V0KG4udHlwZSk7dCYmdCh7aXNTaGlmdEtleTpuLnNoaWZ0S2V5LGlzTGVmdENsaWNrOnpXKG4pfHwidG91Y2hzdGFydCI9PT1uLnR5cGUsaXNSaWdodENsaWNrOnp2KG4pLC4uLmV9''@;'; put 'put ''KX1jb25zdCBaa2U9bmV3IFdlYWtNYXAsUGxlPVN5bWJvbCgicm9vdEluc3RhbmNlIik7ZnVuY3Rpb24gcjIobil7cmV0dXJuIFprZS5oYXMobil9ZnVuY3Rpb24gR2tlKG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJp''@;'; put 'put ''dmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiAka2UobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQobil9ZnVuY3Rpb24g''@;'; put 'put ''SWQobixlKXtyZXR1cm4gZnVuY3Rpb24gaWt0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obiwka2UobixlLCJnZXQiKSl9ZnVuY3Rpb24gaTYobixlLHQpe0drZShuLGUpLGUuc2V0KG4sdCl9ZnVuY3Rpb24gdXUobixlLHQpe3JldHVybiBmdW5jdGlvbiBva3Qo''@;'; put 'put ''bixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLCRrZShuLGUsInNldCIpLHQpLHR9ZnVuY3Rpb24gZV8obixl''@;'; put 'put ''LHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHR9ZnVuY3Rpb24gdlkobixlKXtHa2UobixlKSxlLmFkZChuKX12YXIgX1k9bmV3IFdlYWtNYXAsTkw9bmV3IFdlYWtNYXAs''@;'; put 'put ''Rkw9bmV3IFdlYWtNYXAsbzY9bmV3IFdlYWtNYXAsY209bmV3IFdlYWtNYXAseVk9bmV3IFdlYWtNYXAsYlk9bmV3IFdlYWtNYXAsdF89bmV3IFdlYWtNYXAsUEw9bmV3IFdlYWtNYXAsb1Q9bmV3IFdlYWtNYXAsSEw9bmV3IFdlYWtTZXQsSGxlPW5ldyBXZWFrU2V0LHFrZT1uZXcgV2Vha1Nl''@;'; put 'put ''dCxLa2U9bmV3IFdlYWtTZXQ7ZnVuY3Rpb24gd1kobil7cmV0dXJuIG4uc291cmNlQ2FwYWJpbGl0aWVzPyEwPT09bi5zb3VyY2VDYXBhYmlsaXRpZXMuZmlyZXNUb3VjaEV2ZW50czpJZCh0aGlzLFBMKX1mdW5jdGlvbiBYa2UoKXtyZXR1cm4gcGFyc2VJbnQodGhpcy5ob3Qucm9vdEVsZW1l''@;'; put 'put ''bnQuZ2V0QXR0cmlidXRlKCJhcmlhLWNvbGNvdW50Iik/PyIwIiwxMCl9ZnVuY3Rpb24gc2t0KG4pe2NvbnN0IGU9ZV8odGhpcyxIbGUsWGtlKS5jYWxsKHRoaXMpK247S28odGhpcy5ob3Qucm9vdEVsZW1lbnQsW2RzZShlKV0pfWZ1bmN0aW9uIGxrdCgpe2NvbnN0IG49dGhpcy5ob3Qucm9v''@;'; put 'put ''dEVsZW1lbnQ7dGhpcy5oYXNWZXJ0aWNhbFNjcm9sbCgpP1lyKG4sImh0SGFzU2Nyb2xsWSIpOmtvKG4sImh0SGFzU2Nyb2xsWSIpLHRoaXMuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCk/WXIobiwiaHRWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93Iik6a28obiwiaHRWZXJ0''@;'; put 'put ''aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93IiksdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsKCk/WXIobiwiaHRIYXNTY3JvbGxYIik6a28obiwiaHRIYXNTY3JvbGxYIiksdGhpcy5pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpP1lyKG4sImh0SG9yaXpvbnRhbGx5U2Nyb2xsYWJs''@;'; put 'put ''ZUJ5V2luZG93Iik6a28obiwiaHRIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3ciKSwwPT09R2QoKT9ZcihuLCJodFNjcm9sbGJhckhpZGRlbiIpOmtvKG4sImh0U2Nyb2xsYmFySGlkZGVuIil9Y29uc3QgY2t0PWNsYXNzIGFrdHtyZW5kZXIoKXtpZighdGhpcy5ob3QuaXNSZW5kZXJT''@;'; put 'put ''dXNwZW5kZWQoKSl7Y29uc3QgZT10aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXI7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbmRlciIsZSksdGhpcy5fd3QuZHJhdyghZSksZV8odGhpcyxLa2UsbGt0KS5jYWxsKHRoaXMpLHRoaXMucG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplJiYodGhp''@;'; put 'put ''cy5wb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemU9ITEsdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoITApKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZW5kZXIiLGUpLHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcj0hMX19YWRqdXN0RWxlbWVudHNTaXplKGU9ITEpe2U/dGhpcy5fd3Qud3RP''@;'; put 'put ''dmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUoKTp0aGlzLnBvc3Rwb25lZEFkanVzdEVsZW1lbnRzU2l6ZT0hMH1nZXRDZWxsQXRDb29yZHMoZSx0KXtjb25zdCByPXRoaXMuX3d0LmdldENlbGwoZSx0KTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHImJnI8MD9udWxsOnJ9c2Nyb2xsVmlld3Bv''@;'; put 'put ''cnQoZSx0LHIpe3JldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9ydChlLHQscil9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkoZSx0KXtyZXR1cm4gdGhpcy5fd3Quc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkoZSx0KX1zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkoZSx0KXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fd3Quc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGUsdCl9Y3JlYXRlRWxlbWVudHMoKXtjb25zdHtyb290RWxlbWVudDplLHJvb3REb2N1bWVudDp0fT10aGlzLmhvdCxyPWUuZ2V0QXR0cmlidXRlKCJzdHlsZSIpO3ImJihlLmRhdGFzZXQub3JpZ2luYWxzdHlsZT1yKSxZcihlLCJo''@;'; put 'put ''YW5kc29udGFibGUiKSx1dSh0aGlzLGNtLHQuY3JlYXRlRWxlbWVudCgidGFibGUiKSksWXIoSWQodGhpcyxjbSksImh0Q29yZSIpLHRoaXMuaG90LmdldFNldHRpbmdzKCkudGFibGVDbGFzc05hbWUmJllyKElkKHRoaXMsY20pLHRoaXMuaG90LmdldFNldHRpbmdzKCkudGFibGVDbGFzc05h''@;'; put 'put ''bWUpLHRoaXMuc2V0dGluZ3MuYXJpYVRhZ3MmJihLbyhJZCh0aGlzLGNtKSxbWyJyb2xlIiwicHJlc2VudGF0aW9uIl1dKSxLbyhlLFtbInJvbGUiLCJ0cmVlZ3JpZCJdLGd4ZSgtMSksZHNlKHRoaXMuaG90LmNvdW50Q29scygpKSxbImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSJdXSkp''@;'; put 'put ''LHRoaXMuVEhFQUQ9dC5jcmVhdGVFbGVtZW50KCJ0aGVhZCIpLElkKHRoaXMsY20pLmFwcGVuZENoaWxkKHRoaXMuVEhFQUQpLHRoaXMuVEJPRFk9dC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpLElkKHRoaXMsY20pLmFwcGVuZENoaWxkKHRoaXMuVEJPRFkpLHRoaXMuaG90LnRhYmxlPUlkKHRo''@;'; put 'put ''aXMsY20pLHRoaXMuaG90LmNvbnRhaW5lci5pbnNlcnRCZWZvcmUoSWQodGhpcyxjbSksdGhpcy5ob3QuY29udGFpbmVyLmZpcnN0Q2hpbGQpfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7cm9vdFdyYXBwZXJFbGVtZW50OmUscm9vdEVsZW1lbnQ6dCxyb290RG9jdW1lbnQ6cixzZWxlY3Rpb246''@;'; put 'put ''aSxyb290V2luZG93Om99PXRoaXMuaG90LGE9ci5kb2N1bWVudEVsZW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0LCJtb3VzZWRvd24iLHU9PntlXyh0aGlzLEhMLHdZKS5jYWxsKHRoaXMsdSl8fGRBZSh1KXx8KHV1KHRoaXMsRkwsITApLHRoaXMuaXNUZXh0U2Vs''@;'; put 'put ''ZWN0aW9uQWxsb3dlZChBYSh1KSl8fChBc2UobyksdS5wcmV2ZW50RGVmYXVsdCgpLG8uZm9jdXMoKSkpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0LCJtb3VzZXVwIix1PT57ZV8odGhpcyxITCx3WSkuY2FsbCh0aGlzLHUpfHx1dSh0aGlzLEZMLCExKX0pLHRoaXMu''@;'; put 'put ''ZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodCwibW91c2Vtb3ZlIix1PT57SWQodGhpcyxGTCkmJiF0aGlzLmlzVGV4dFNlbGVjdGlvbkFsbG93ZWQoQWEodSkpJiYodGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbiYmQXNlKG8pLHUucHJldmVudERlZmF1bHQoKSl9KSx0aGlz''@;'; put 'put ''LmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsImtleXVwIix1PT57aS5pc0luUHJvZ3Jlc3MoKSYmIXUuc2hpZnRLZXkmJmkuZmluaXNoKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNldXAiLHU9PntpZihpLmlzSW5Qcm9ncmVzcygpJiZ6Vyh1''@;'; put 'put ''KSYmaS5maW5pc2goKSx1dSh0aGlzLG82LCExKSxlXyh0aGlzLEhMLHdZKS5jYWxsKHRoaXMsdSkpcmV0dXJuO2NvbnN0IGc9Vk0oci5hY3RpdmVFbGVtZW50KTt5TChyLmFjdGl2ZUVsZW1lbnQpJiYhZ3x8KGd8fCFpLmlzU2VsZWN0ZWQoKSYmIWkuaXNTZWxlY3RlZEJ5QW55SGVhZGVyKCkm''@;'; put 'put ''JiEoZT8/dCkuY29udGFpbnModS50YXJnZXQpJiYhenYodSkpJiZ0aGlzLmhvdC51bmxpc3RlbigpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJjb250ZXh0bWVudSIsdT0+e2kuaXNJblByb2dyZXNzKCkmJnp2KHUpJiYoaS5maW5pc2goKSx1dSh0aGlzLG82LCEx''@;'; put 'put ''KSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsInRvdWNoZW5kIiwoKT0+e2kuaXNJblByb2dyZXNzKCkmJmkuZmluaXNoKCksdXUodGhpcyxvNiwhMSksdXUodGhpcyxQTCwhMCksbnVsbCE9PUlkKHRoaXMsb1QpJiZjbGVhclRpbWVvdXQoSWQodGhpcyxvVCkpLHV1''@;'; put 'put ''KHRoaXMsb1QsdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3V1KHRoaXMsUEwsITEpLHV1KHRoaXMsb1QsbnVsbCl9LDQwMCkpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWRvd24iLHU9Pntjb25zdCBnPXUudGFyZ2V0LEU9dS5jbGllbnRYLE89''@;'; put 'put ''dS5jbGllbnRZO2xldCBaPXUudGFyZ2V0O2lmKElkKHRoaXMsbzYpfHwhdHx8IXRoaXMuaG90LnZpZXd8fGVfKHRoaXMsSEwsd1kpLmNhbGwodGhpcyx1KSlyZXR1cm47Y29uc3R7aG9sZGVyOmVlfT10aGlzLl93dC53dFRhYmxlO2lmKFo9PT1lZSl7Y29uc3QgTWU9R2Qocik7aWYoci5lbGVt''@;'; put 'put ''ZW50RnJvbVBvaW50KEUrTWUsTykhPT1lZXx8ci5lbGVtZW50RnJvbVBvaW50KEUsTytNZSkhPT1lZSlyZXR1cm59ZWxzZXtjb25zdHtyb290UG9ydGFsRWxlbWVudDpNZX09dGhpcy5ob3Q7Zm9yKDtaIT09YTspe2lmKG51bGw9PT1aKXtpZih1LmlzVGFyZ2V0V2ViQ29tcG9uZW50KWJyZWFr''@;'; put 'put ''O3JldHVybn1pZihaPT09dHx8Wj09PU1lKXJldHVybjtaPVoucGFyZW50Tm9kZX19KCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cz90aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cyhnKTp0aGlzLnNldHRpbmdzLm91dHNpZGVD''@;'; put 'put ''bGlja0Rlc2VsZWN0cyk/dGhpcy5ob3QuZGVzZWxlY3RDZWxsKCk6dGhpcy5ob3QuZGVzdHJveUVkaXRvcighMSwhMSl9KTtsZXQgbD12NyhvKTtmb3IoO251bGwhPT1sOyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJjbGlj''@;'; put 'put ''ayIsKCk9Pnt0aGlzLmhvdC51bmxpc3RlbigpfSksbD12NyhsKTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKElkKHRoaXMsY20pLCJzZWxlY3RzdGFydCIsdT0+e3RoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb258fHlMKEFhKHUpKXx8dS5wcmV2ZW50RGVmYXVsdCgp''@;'; put 'put ''fSl9aW52YWxpZGF0ZUluZGV4U2l6ZXNDYWNoZSgpe3RoaXMuX3d0Lnd0Vmlld3BvcnQuaW52YWxpZGF0ZVJvd0hlaWdodENhY2hlKCksdGhpcy5fd3Qud3RWaWV3cG9ydC5pbnZhbGlkYXRlQ29sdW1uV2lkdGhDYWNoZSgpfWludmFsaWRhdGVDb2x1bW5XaWR0aENhY2hlKCl7dGhpcy5fd3Qu''@;'; put 'put ''d3RWaWV3cG9ydC5pbnZhbGlkYXRlQ29sdW1uV2lkdGhDYWNoZSgpfWludmFsaWRhdGVSb3dIZWlnaHRDYWNoZSgpe3RoaXMuX3d0Lnd0Vmlld3BvcnQuaW52YWxpZGF0ZVJvd0hlaWdodENhY2hlKCl9dHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh7cm93OmUsY29sOnR9''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoLi4udGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoZSx0KSl9dHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGUsdCl7Y29uc3Qgcj1lPj0wP3RoaXMuaG90LnJvd0luZGV4TWFwcGVy''@;'; put 'put ''LmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZSk6ZSxpPXQ+PTA/dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0KTp0O3JldHVybltudWxsPT09cj9lOnIsbnVsbD09PWk/dDppXX1jb3VudFJlbmRlcmFibGVJbmRleGVzKGUsdCl7''@;'; put 'put ''Y29uc3Qgcj1NYXRoLm1pbihlLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCksdCksaT1lLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChyLTEsLTEpO3JldHVybiBudWxsPT09aT8wOihlLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaSk/PzApKzF9Y291bnRSZW5kZXJhYmxlQ29s''@;'; put 'put ''dW1ucygpe3JldHVybiB0aGlzLmNvdW50UmVuZGVyYWJsZUluZGV4ZXModGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsdGhpcy5zZXR0aW5ncy5tYXhDb2xzKX1jb3VudFJlbmRlcmFibGVSb3dzKCl7cmV0dXJuIHRoaXMuY291bnRSZW5kZXJhYmxlSW5kZXhlcyh0aGlzLmhvdC5yb3dJbmRl''@;'; put 'put ''eE1hcHBlcix0aGlzLnNldHRpbmdzLm1heFJvd3MpfWNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhlLHQpe3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuSW5kZXhlcyhlLHQsdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsdGhpcy5jb3VudFJlbmRlcmFibGVSb3dzKCkpfWNvdW50Tm90SGlkZGVu''@;'; put 'put ''Q29sdW1uSW5kZXhlcyhlLHQpe3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuSW5kZXhlcyhlLHQsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsdGhpcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCkpfWNvdW50Tm90SGlkZGVuSW5kZXhlcyhlLHQscixpKXtpZihpc05hTihlKXx8ZTwwKXJl''@;'; put 'put ''dHVybiAwO2NvbnN0IGE9ci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZSx0PDA/LTE6MSksbD1yLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoYSk7aWYobnVsbD09PWx8fCFOdW1iZXIuaXNJbnRlZ2VyKGwpKXJldHVybiAwO2xldCB1PTA7cmV0dXJuIHQ8MD91PWwrMTp0PjAmJih1''@;'; put 'put ''PWktbCksdX1jb3VudE5vdEhpZGRlbkZpeGVkQ29sdW1uc1N0YXJ0KCl7Y29uc3QgZT10aGlzLmhvdC5jb3VudENvbHMoKSx0PU1hdGgubWluKE51bWJlcih0aGlzLnNldHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0KXx8MCxlKS0xO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuQ29sdW1uSW5k''@;'; put 'put ''ZXhlcyh0LC0xKX1jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpe2NvbnN0IGU9dGhpcy5ob3QuY291bnRSb3dzKCksdD1NYXRoLm1pbihOdW1iZXIodGhpcy5zZXR0aW5ncy5maXhlZFJvd3NUb3ApfHwwLGUpLTE7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5Sb3dJbmRleGVzKHQsLTEp''@;'; put 'put ''fWNvdW50Tm90SGlkZGVuRml4ZWRSb3dzQm90dG9tKCl7Y29uc3QgZT10aGlzLmhvdC5jb3VudFJvd3MoKSx0PU1hdGgubWF4KGUtKE51bWJlcih0aGlzLnNldHRpbmdzLmZpeGVkUm93c0JvdHRvbSl8fDApLDApO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyh0LDEpfWNv''@;'; put 'put ''dW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGUsdCl7bGV0IHI9MDtmb3IobGV0IGk9ZTtpPD10O2krKyludWxsIT09dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChpKSYmKHIrPTEpO3JldHVybiByfWNvdW50UmVuZGVyYWJsZVJvd3NJ''@;'; put 'put ''blJhbmdlKGUsdCl7bGV0IHI9MDtmb3IobGV0IGk9ZTtpPD10O2krKyludWxsIT09dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChpKSYmKHIrPTEpO3JldHVybiByfWlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpe2NvbnN0''@;'; put 'put ''IGU9dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpK3RoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20oKSx0PXRoaXMuY291bnROb3RIaWRkZW5GaXhlZENvbHVtbnNTdGFydCgpO3JldHVybiB0aGlzLmhvdC5jb3VudFJlbmRlcmVkUm93cygpPmUmJnRoaXMuaG90LmNv''@;'; put 'put ''dW50UmVuZGVyZWRDb2xzKCk+dH1pbml0aWFsaXplV2Fsa29udGFibGUoKXtjb25zdCBlPXthcmlhVGFnczp0aGlzLnNldHRpbmdzLmFyaWFUYWdzLHJ0bE1vZGU6dGhpcy5ob3QuaXNSdGwoKSxleHRlcm5hbFJvd0NhbGN1bGF0b3I6dGhpcy5ob3QuZ2V0UGx1Z2luKCJhdXRvUm93U2l6ZSIp''@;'; put 'put ''JiZ0aGlzLmhvdC5nZXRQbHVnaW4oImF1dG9Sb3dTaXplIikuaXNFbmFibGVkKCksdGFibGU6SWQodGhpcyxjbSksaXNEYXRhVmlld0luc3RhbmNlOigpPT5yMih0aGlzLmhvdCkscHJldmVudE92ZXJmbG93OigpPT50aGlzLnNldHRpbmdzLnByZXZlbnRPdmVyZmxvdyxwcmV2ZW50V2hlZWw6''@;'; put 'put ''KCk9PnRoaXMuc2V0dGluZ3MucHJldmVudFdoZWVsLHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nVGhyZXNob2xkOigpPT50aGlzLnNldHRpbmdzLnZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nVGhyZXNob2xkLHZpZXdwb3J0Um93UmVuZGVyaW5nVGhyZXNob2xkOigpPT50aGlzLnNldHRpbmdzLnZp''@;'; put 'put ''ZXdwb3J0Um93UmVuZGVyaW5nVGhyZXNob2xkLGRhdGE6KG8sYSk9Pntjb25zdFtsLHVdPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KG8sYSk7cmV0dXJuIHRoaXMuaG90LmdldERhdGFBdENlbGwobCx1KX0sdG90YWxSb3dzOigpPT50aGlzLmNvdW50UmVuZGVy''@;'; put 'put ''YWJsZVJvd3MoKSx0b3RhbENvbHVtbnM6KCk9PnRoaXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLGZpeGVkQ29sdW1uc1N0YXJ0OigpPT50aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKSxmaXhlZFJvd3NUb3A6KCk9PnRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NU''@;'; put 'put ''b3AoKSxmaXhlZFJvd3NCb3R0b206KCk9PnRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20oKSxzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXk6KCk9Pih0aGlzLnNldHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0Pz8wKT4wfHxlLnJvd0hlYWRlcnMoKS5sZW5ndGg+MCxzaG91''@;'; put 'put ''bGRSZW5kZXJUb3BPdmVybGF5OigpPT4odGhpcy5zZXR0aW5ncy5maXhlZFJvd3NUb3A/PzApPjB8fGUuY29sdW1uSGVhZGVycygpLmxlbmd0aD4wLHNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXk6KCk9Pih0aGlzLnNldHRpbmdzLmZpeGVkUm93c0JvdHRvbT8/MCk+MCxtaW5TcGFyZVJvd3M6''@;'; put 'put ''KCk9PnRoaXMuc2V0dGluZ3MubWluU3BhcmVSb3dzLHJlbmRlckFsbFJvd3M6dGhpcy5zZXR0aW5ncy5yZW5kZXJBbGxSb3dzLHJlbmRlckFsbENvbHVtbnM6dGhpcy5zZXR0aW5ncy5yZW5kZXJBbGxDb2x1bW5zLHJvd0hlYWRlcnM6KCk9Pntjb25zdCBvPVtdO3JldHVybiB0aGlzLmhvdC5o''@;'; put 'put ''YXNSb3dIZWFkZXJzKCkmJm8ucHVzaCgoYSxsKT0+e2NvbnN0IHU9YT49MD90aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpOmE7dGhpcy5hcHBlbmRSb3dIZWFkZXIodSxsKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckdldFJvd0hlYWRl''@;'; put 'put ''clJlbmRlcmVycyIsbyksdXUodGhpcyxOTCxvLmxlbmd0aCksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmZV8odGhpcyxIbGUsWGtlKS5jYWxsKHRoaXMpPT09dGhpcy5ob3QuY291bnRDb2xzKCkmJmVfKHRoaXMscWtlLHNrdCkuY2FsbCh0aGlzLElkKHRoaXMsTkwpKSxvfSxj''@;'; put 'put ''b2x1bW5IZWFkZXJzOigpPT57Y29uc3Qgbz1bXTtyZXR1cm4gdGhpcy5ob3QuaGFzQ29sSGVhZGVycygpJiZvLnB1c2goKGEsbCk9Pntjb25zdCB1PWE+PTA/dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChhKTphO3RoaXMuYXBwZW5kQ29s''@;'; put 'put ''SGVhZGVyKHUsbCl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLG8pLHV1KHRoaXMsX1ksby5sZW5ndGgpLG99LGNvbHVtbldpZHRoOm89Pntjb25zdCBhPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxl''@;'; put 'put ''SW5kZXgobyk7cmV0dXJuIHRoaXMuaG90LmdldENvbFdpZHRoKG51bGw9PT1hP286YSl9LHJvd0hlaWdodDpvPT57Y29uc3QgYT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KG8pO3JldHVybiB0aGlzLmhvdC5nZXRSb3dIZWlnaHQobnVsbD09''@;'; put 'put ''PWE/bzphKX0scm93SGVpZ2h0QnlPdmVybGF5TmFtZToobyxhKT0+e2NvbnN0IGw9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChvKSx1PW51bGw9PT1sP286bDtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVJvd0hlaWdodEJ5T3Zl''@;'; put 'put ''cmxheU5hbWUiLHRoaXMuaG90LmdldFJvd0hlaWdodCh1KSx1LGEpfSxjZWxsUmVuZGVyZXI6KG8sYSxsKT0+e2NvbnN0W3UsZ109dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgobyxhKSxFPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIix1''@;'; put 'put ''LGcsITEsIm1ldGEiKTtsZXQgTz11LFo9ZztBcnJheS5pc0FycmF5KEUpJiYoW08sWl09RSk7Y29uc3QgZWU9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoTyxaKSx2ZT10aGlzLmhvdC5jb2xUb1Byb3AoWik7bGV0IE1lPXRoaXMuaG90LmdldERhdGFBdFJvd1Byb3AoTyx2ZSk7dGhpcy5ob3QuaGFz''@;'; put 'put ''SG9vaygiYmVmb3JlVmFsdWVSZW5kZXIiKSYmKE1lPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWYWx1ZVJlbmRlciIsTWUsZWUpKTtjb25zdCBIZT10aGlzLmhvdC5nZXRDZWxsUmVuZGVyZXIoZWUpO2xldCBXZT1NZTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZWUudmFsdWVGb3JtYXR0ZXIp''@;'; put 'put ''V2U9ZWUudmFsdWVGb3JtYXR0ZXIoV2UsZWUpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIEhlJiYidmFsdWVGb3JtYXR0ZXIiaW4gSGUpe2NvbnN0e3ZhbHVlRm9ybWF0dGVyOkN0fT1IZTsiZnVuY3Rpb24iPT10eXBlb2YgQ3QmJihXZT1DdC5jYWxsKGVlLFdlLGVlKSl9dGhpcy5ob3Qu''@;'; put 'put ''cnVuSG9va3MoImJlZm9yZVJlbmRlcmVyIixsLHUsZyx2ZSxNZSxlZSk7Y29uc3QgYXQ9W3RoaXMuaG90LGwsdSxnLHZlLFdlLGVlXTtIZSguLi5hdCksZWUuX2lzQmFzZVJlbmRlcmVyQ2FsbGVkfHx0aGlzLmhvdC5nZXRDZWxsUmVuZGVyZXIoe3JlbmRlcmVyOiJiYXNlIn0pKC4uLmF0KSx0''@;'; put 'put ''aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZW5kZXJlciIsbCx1LGcsdmUsTWUsZWUpLGVlLl9pc0Jhc2VSZW5kZXJlckNhbGxlZD0hMX0sc2VsZWN0aW9uczp0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LGhpZGVCb3JkZXJPbk1vdXNlRG93bk92ZXI6KCk9PnRoaXMuc2V0dGluZ3MuZnJh''@;'; put 'put ''Z21lbnRTZWxlY3Rpb24sb25XaW5kb3dSZXNpemU6KCk9Pnt0aGlzLmhvdCYmIXRoaXMuaG90LmlzRGVzdHJveWVkJiZ0aGlzLmhvdC5yZWZyZXNoRGltZW5zaW9ucygpfSxvbkNvbnRhaW5lckVsZW1lbnRSZXNpemU6KCk9Pnt0aGlzLmhvdCYmIXRoaXMuaG90LmlzRGVzdHJveWVkJiZVdih0''@;'; put 'put ''aGlzLmhvdC5yb290RWxlbWVudCkmJnRoaXMuaG90LnJlZnJlc2hEaW1lbnNpb25zKCl9LG9uQ2VsbE1vdXNlRG93bjoobyxhLGwsdSk9Pntjb25zdCBnPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhhKSxFPXtyb3c6ITEsY29sdW1uOiExLGNlbGw6ITF9O3Ro''@;'; put 'put ''aXMuaG90Lmxpc3RlbigpLHRoaXMuYWN0aXZlV3Q9dSx1dSh0aGlzLG82LCEwKSx1dSh0aGlzLHRfLHtyb3c6by5jbGllbnRYLGNvbDpvLmNsaWVudFl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VEb3duIixvLGcsbCxFKSwhSjUobykmJihtWShvLHtjb29yZHM6Zyxz''@;'; put 'put ''ZWxlY3Rpb246dGhpcy5ob3Quc2VsZWN0aW9uLGNvbnRyb2xsZXI6RSxjZWxsQ29vcmRzRmFjdG9yeTooTyxaKT0+dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoTyxaKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlRG93biIsbyxnLGwpLHRoaXMuYWN0aXZlV3Q9dGhp''@;'; put 'put ''cy5fd3QpfSxvbkNlbGxDb250ZXh0TWVudToobyxhLGwsdSk9Pntjb25zdCBnPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhhKTt0aGlzLmFjdGl2ZVd0PXUsdXUodGhpcyxvNiwhMSksdGhpcy5ob3Quc2VsZWN0aW9uLmlzSW5Qcm9ncmVzcygpJiZ0aGlzLmhv''@;'; put 'put ''dC5zZWxlY3Rpb24uZmluaXNoKCksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU9uQ2VsbENvbnRleHRNZW51IixvLGcsbCksIUo1KG8pJiYodGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLG8sZyxsKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0sb25DZWxsTW91''@;'; put 'put ''c2VPdXQ6KG8sYSxsLHUpPT57Y29uc3QgZz10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoYSk7dGhpcy5hY3RpdmVXdD11LHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZU91dCIsbyxnLGwpLCFKNShvKSYmKHRoaXMuaG90LnJ1bkhvb2tzKCJh''@;'; put 'put ''ZnRlck9uQ2VsbE1vdXNlT3V0IixvLGcsbCksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbE1vdXNlT3ZlcjoobyxhLGwsdSk9Pntjb25zdCBnPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhhKSxFPXtyb3c6ITEsY29sdW1uOiExLGNlbGw6ITF9O3Ro''@;'; put 'put ''aXMuYWN0aXZlV3Q9dSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixvLGcsbCxFKSwhSjUobykmJihJZCh0aGlzLG82KSYmKCFJZCh0aGlzLHRfKXx8SWQodGhpcyx0Xykucm93IT09by5jbGllbnRYfHxJZCh0aGlzLHRfKS5jb2whPT1vLmNsaWVudFkpJiZtWShv''@;'; put 'put ''LHtjb29yZHM6ZyxzZWxlY3Rpb246dGhpcy5ob3Quc2VsZWN0aW9uLGNvbnRyb2xsZXI6RSxjZWxsQ29vcmRzRmFjdG9yeTooTyxaKT0+dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoTyxaKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlT3ZlciIsbyxnLGwpLHRoaXMu''@;'; put 'put ''YWN0aXZlV3Q9dGhpcy5fd3QsdXUodGhpcyx0XyxudWxsKSl9LG9uQ2VsbE1vdXNlT3Zlck91dHNpZGU6KG8sYSxsLHUpPT57Y29uc3QgZz10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoYSksRT17cm93OiExLGNvbHVtbjohMSxjZWxsOiExfTt0aGlzLmFjdGl2''@;'; put 'put ''ZVd0PXUsdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlT3Zlck91dHNpZGUiLG8sZyxsLEUpLCFKNShvKSYmKG1ZKG8se2Nvb3JkczpnLHNlbGVjdGlvbjp0aGlzLmhvdC5zZWxlY3Rpb24sY29udHJvbGxlcjpFLGNlbGxDb29yZHNGYWN0b3J5OihPLFopPT50aGlzLmhvdC5f''@;'; put 'put ''Y3JlYXRlQ2VsbENvb3JkcyhPLFopfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VPdmVyT3V0c2lkZSIsbyxnLGwpLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QsdXUodGhpcyx0XyxudWxsKSl9LG9uQ2VsbE1vdXNlVXA6KG8sYSxsLHUpPT57Y29uc3QgZz10aGlzLnRyYW5z''@;'; put 'put ''bGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoYSk7dGhpcy5hY3RpdmVXdD11LHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZVVwIixvLGcsbCksIUo1KG8pJiYhdGhpcy5ob3QuaXNEZXN0cm95ZWQmJihtWShvLHtjb29yZHM6ZyxzZWxlY3Rpb246dGhpcy5ob3Qu''@;'; put 'put ''c2VsZWN0aW9uLGNlbGxSYW5nZU1hcHBlcjprVHQodGhpcy5ob3QsImNlbGxSYW5nZU1hcHBlciIpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VVcCIsbyxnLGwpLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxDb3JuZXJNb3VzZURvd246bz0+e28ucHJldmVu''@;'; put 'put ''dERlZmF1bHQoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLG8pfSxvbkNlbGxDb3JuZXJEYmxDbGljazpvPT57by5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIixvKX0sYmVmb3JlRHJh''@;'; put 'put ''dzoobyxhKT0+dGhpcy5iZWZvcmVSZW5kZXIobyxhKSxvbkRyYXc6bz0+dGhpcy5hZnRlclJlbmRlcihvKSxvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseToobyxhKT0+e2NvbnN0IGw9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsdT1vPDA7bGV0IGc9bztpZighdSl7Y29uc3QgRT1s''@;'; put 'put ''LmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobyk7aWYobnVsbD09PUUpcmV0dXJuIG87Zz1FfXJldHVybiBnPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHkiLGcsYSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVZpZXdwb3J0U2Nyb2xsIiks''@;'; put 'put ''dT9nOmwuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChnKX0sb25CZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseToobyxhKT0+e2NvbnN0IGw9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsdT1vPDA7bGV0IGc9bztpZighdSl7Y29uc3QgRT1sLmdldFZpc3VhbEZyb21SZW5k''@;'; put 'put ''ZXJhYmxlSW5kZXgobyk7aWYobnVsbD09PUUpcmV0dXJuIG87Zz1FfXJldHVybiBnPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsZyxhKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmlld3BvcnRTY3JvbGwiKSx1P2c6bC5nZXRSZW5kZXJh''@;'; put 'put ''YmxlRnJvbVZpc3VhbEluZGV4KGcpfSxvblNjcm9sbFZlcnRpY2FsbHk6KCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2Nyb2xsIil9LG9uU2Nyb2xsSG9yaXpvbnRhbGx5OigpPT57dGhpcy5ob3QucnVuSG9v''@;'; put 'put ''a3MoImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2Nyb2xsIil9LG9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6KCk9PnRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIpLG9uQmVmb3JlSGlnaGxpZ2h0aW5n''@;'; put 'put ''Um93SGVhZGVyOihvLGEsbCk9Pntjb25zdCB1PXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGc9bzwwO2xldCBFPW87Z3x8KEU9dS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KG8pPz9vKTtjb25zdCBPPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIi''@;'; put 'put ''LEUsYSxsKTtyZXR1cm4gZz9POnUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh1LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChPLDEpKX0sb25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXI6KG8sYSxsKT0+e2NvbnN0IHU9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsZz1v''@;'; put 'put ''PDA7bGV0IEU9bztnfHwoRT11LmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobyk/P28pO2NvbnN0IE89dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsRSxhLGwpO3JldHVybiBnP086dS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHUu''@;'; put 'put ''Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE8sMSkpfSxvbkFmdGVyRHJhd1NlbGVjdGlvbjoobyxhLGwpPT57bGV0IHU7Y29uc3RbZyxFXT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChvLGEpLE89dGhpcy5ob3Quc2VsZWN0aW9uLmdldFNlbGVjdGVkUmFuZ2Uo''@;'; put 'put ''KTtpZihPLnNpemUoKT4wKXtjb25zdCBlZT1PLnBlZWtCeUluZGV4KGw/PzApO3U9W2VlLmZyb20ucm93LGVlLmZyb20uY29sLGVlLnRvLnJvdyxlZS50by5jb2xdfXJldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEcmF3U2VsZWN0aW9uIixnLEUsdSxsKX0sb25CZWZvcmVEcmF3Qm9y''@;'; put 'put ''ZGVyczoobyxhKT0+e2NvbnN0W2wsdSxnLEVdPW8sTz1bdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHUpLHRoaXMuaG90LnJvd0luZGV4''@;'; put 'put ''TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZyksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChFKV07cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEcmF3Qm9yZGVycyIsTyxhKX0sb25CZWZvcmVUb3VjaFNj''@;'; put 'put ''cm9sbDooKT0+dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVRvdWNoU2Nyb2xsIiksb25BZnRlck1vbWVudHVtU2Nyb2xsOigpPT50aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJNb21lbnR1bVNjcm9sbCIpLG9uTW9kaWZ5Um93SGVhZGVyV2lkdGg6bz0+dGhpcy5ob3QucnVuSG9va3MoIm1vZGlm''@;'; put 'put ''eVJvd0hlYWRlcldpZHRoIixvKSxvbk1vZGlmeUdldENlbGxDb29yZHM6KG8sYSxsLHUpPT57Y29uc3QgZz10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixFPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLE89YT49MD9FLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYSk6YSxaPW8+PTA/''@;'; put 'put ''Zy5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KG8pOm8sZWU9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLFosTyxsLHUpO2lmKEFycmF5LmlzQXJyYXkoZWUpKXtjb25zdFt2ZSxNZSxIZSxXZV09ZWU7cmV0dXJuW3ZlPj0wP2cuZ2V0UmVuZGVyYWJsZUZyb21W''@;'; put 'put ''aXN1YWxJbmRleChnLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2ZSwxKSk6dmUsTWU+PTA/RS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE1lLDEpKTpNZSxIZT49MD9nLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZy5nZXRO''@;'; put 'put ''ZWFyZXN0Tm90SGlkZGVuSW5kZXgoSGUsLTEpKTpIZSxXZT49MD9FLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoRS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoV2UsLTEpKTpXZV19fSxvbk1vZGlmeUdldENvb3Jkc0VsZW1lbnQ6KG8sYSk9Pntjb25zdCBsPXRoaXMuaG90LnJvd0lu''@;'; put 'put ''ZGV4TWFwcGVyLHU9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsZz1hPj0wP3UuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChhKTphLEU9bz49MD9sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobyk6byxPPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDb29yZHNFbGVt''@;'; put 'put ''ZW50IixFLGcpO2lmKEFycmF5LmlzQXJyYXkoTykpe2NvbnN0W1osZWVdPU87cmV0dXJuW1o+PTA/bC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGwuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KFosMSkpOlosZWU+PTA/dS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHUuZ2V0''@;'; put 'put ''TmVhcmVzdE5vdEhpZGRlbkluZGV4KGVlLDEpKTplZV19fSx2aWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZTpvPT57Y29uc3QgYT0iYXV0byI9PT10aGlzLnNldHRpbmdzLnZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0PzE6dGhpcy5zZXR0aW5ncy52aWV3cG9ydFJvd1JlbmRlcmluZ09m''@;'; put 'put ''ZnNldDtpZigoYT8/MCk+MCl7Y29uc3QgbD10aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSxnPW8uZW5kUm93O28uc3RhcnRSb3c9TWF0aC5tYXgoby5zdGFydFJvdy0oYT8/MCksMCksby5lbmRSb3c9TWF0aC5taW4oZysoYT8/MCksbC0xKX10aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJWaWV3''@;'; put 'put ''cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIsbyl9LHZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlOm89Pntjb25zdCBhPSJhdXRvIj09PXRoaXMuc2V0dGluZ3Mudmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ/MTp0aGlzLnNldHRpbmdzLnZpZXdwb3J0Q29sdW1uUmVuZGVy''@;'; put 'put ''aW5nT2Zmc2V0O2lmKChhPz8wKT4wKXtjb25zdCBsPXRoaXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLGc9by5lbmRDb2x1bW47by5zdGFydENvbHVtbj1NYXRoLm1heChvLnN0YXJ0Q29sdW1uLShhPz8wKSwwKSxvLmVuZENvbHVtbj1NYXRoLm1pbihnKyhhPz8wKSxsLTEpfXRoaXMuaG90''@;'; put 'put ''LnJ1bkhvb2tzKCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixvKX0scm93SGVhZGVyV2lkdGg6KCk9PnRoaXMuc2V0dGluZ3Mucm93SGVhZGVyV2lkdGgsY29sdW1uSGVhZGVySGVpZ2h0OigpPT57Y29uc3Qgbz10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Q29sdW1u''@;'; put 'put ''SGVhZGVySGVpZ2h0Iik7cmV0dXJuIHRoaXMuc2V0dGluZ3MuY29sdW1uSGVhZGVySGVpZ2h0fHxvfSxzdHlsZXNIYW5kbGVyOigpPT50aGlzLmhvdC5zdHlsZXNIYW5kbGVyfTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlSW5pdFdhbGtvbnRhYmxlIixlKSx0aGlzLl93dD1uZXcgRmxlKGUp''@;'; put 'put ''LHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3Q7Y29uc3QgdD10aGlzLl93dC53dFRhYmxlLnNwcmVhZGVyLHt3aWR0aDpyLGhlaWdodDppfT10aGlzLmhvdC5yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLnNldExhc3RTaXplKHIsaSksdGhpcy5ldmVudE1hbmFnZXIuYWRk''@;'; put 'put ''RXZlbnRMaXN0ZW5lcih0LCJtb3VzZWRvd24iLG89PntvLnRhcmdldD09PXQmJjM9PT1vLndoaWNoJiZvLnN0b3BQcm9wYWdhdGlvbigpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0LCJjb250ZXh0bWVudSIsbz0+e28udGFyZ2V0PT09dCYmMz09PW8ud2hpY2gmJm8u''@;'; put 'put ''c3RvcFByb3BhZ2F0aW9uKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsImNsaWNrIiwoKT0+e3RoaXMuc2V0dGluZ3Mub2JzZXJ2ZURPTVZpc2liaWxpdHkmJnRoaXMuX3d0LmRyYXdJbnRlcnJ1cHRl''@;'; put 'put ''ZCYmdGhpcy5ob3QucmVuZGVyKCl9KX1pc1RleHRTZWxlY3Rpb25BbGxvd2VkKGUpe2lmKHlMKGUpKXJldHVybiEwO2NvbnN0IHQ9QnYoZSx0aGlzLl93dC53dFRhYmxlLnNwcmVhZGVyKTtpZighMD09PXRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJnQpcmV0dXJuITA7Y29uc3Qg''@;'; put 'put ''cj10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk/LmlzU2luZ2xlQ2VsbCgpPz8hMTtyZXR1cm4hISgiY2VsbCI9PT10aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZyJiZ0fHwhdGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbiYmdGhpcy5pc0NlbGxFZGl0ZWQo''@;'; put 'put ''KSYmcil9aXNNb3VzZURvd24oKXtyZXR1cm4gSWQodGhpcyxvNil9aXNDZWxsRWRpdGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldEFjdGl2ZUVkaXRvcigpPy5pc09wZW5lZCgpfWJlZm9yZVJlbmRlcihlLHQpe2UmJnRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWaWV3UmVuZGVyIix0aGlzLmhv''@;'; put 'put ''dC5mb3JjZUZ1bGxSZW5kZXIsdCl9YWZ0ZXJSZW5kZXIoZSl7ZSYmdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVmlld1JlbmRlciIsdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyKX1hcHBlbmRSb3dIZWFkZXIoZSx0KXtpZih0LmZpcnN0Q2hpbGQpe2NvbnN0IHI9dC5maXJzdENoaWxkO2lmKCFM''@;'; put 'put ''YShyLCJyZWxhdGl2ZSIpKXJldHVybiBDNCh0KSx2b2lkIHRoaXMuYXBwZW5kUm93SGVhZGVyKGUsdCk7dGhpcy51cGRhdGVDZWxsSGVhZGVyKHIucXVlcnlTZWxlY3RvcigiLnJvd0hlYWRlciIpLGUsdGhpcy5ob3QuZ2V0Um93SGVhZGVyKX1lbHNle2NvbnN0e3Jvb3REb2N1bWVudDpyLGdl''@;'; put 'put ''dFJvd0hlYWRlcjppfT10aGlzLmhvdCxvPXIuY3JlYXRlRWxlbWVudCgiZGl2IiksYT1yLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtvLmNsYXNzTmFtZT0icmVsYXRpdmUiLGEuY2xhc3NOYW1lPSJyb3dIZWFkZXIiLHRoaXMudXBkYXRlQ2VsbEhlYWRlcihhLGUsaSksby5hcHBlbmRDaGlsZChh''@;'; put 'put ''KSx0LmFwcGVuZENoaWxkKG8pfXRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckdldFJvd0hlYWRlciIsZSx0KX1hcHBlbmRDb2xIZWFkZXIoZSx0LHI9dGhpcy5ob3QuZ2V0Q29sSGVhZGVyLGk9MCl7Y29uc3Qgbz0oKT0+e2NvbnN0IGE9ZT49MD90aGlzLmhvdC5nZXRDb2x1bW5NZXRhKGUpLmhl''@;'; put 'put ''YWRlckNsYXNzTmFtZTpudWxsO3JldHVybiBhPyhBcnJheS5pc0FycmF5KGEpP2E6YS5zcGxpdCgiICIpKS5mbGF0TWFwKHU9PnUuc3BsaXQoIiAiKSkuZmlsdGVyKHU9PnUubGVuZ3RoPjApOltdfTtpZih0LmZpcnN0Q2hpbGQpe2NvbnN0IGE9dC5maXJzdENoaWxkO0xhKGEsInJlbGF0aXZl''@;'; put 'put ''Iik/KHRoaXMudXBkYXRlQ2VsbEhlYWRlcihhLnF1ZXJ5U2VsZWN0b3IoIi5jb2xIZWFkZXIiKSxlLHIsaSksYS5jbGFzc05hbWU9IiIsWXIoYSxbInJlbGF0aXZlIiwuLi5vKCldKSk6KEM0KHQpLHRoaXMuYXBwZW5kQ29sSGVhZGVyKGUsdCxyLGkpKX1lbHNle2NvbnN0e3Jvb3REb2N1bWVu''@;'; put 'put ''dDphfT10aGlzLmhvdCxsPWEuY3JlYXRlRWxlbWVudCgiZGl2IiksdT1hLmNyZWF0ZUVsZW1lbnQoInNwYW4iKSxnPW8oKTtsLmNsYXNzTGlzdC5hZGQoInJlbGF0aXZlIiwuLi5nKSx1LmNsYXNzTmFtZT0iY29sSGVhZGVyIix0aGlzLnNldHRpbmdzLmFyaWFUYWdzJiYoS28obCxbWyJyb2xl''@;'; put 'put ''IiwicHJlc2VudGF0aW9uIl1dKSxLbyh1LFtbInJvbGUiLCJwcmVzZW50YXRpb24iXV0pKSx0aGlzLnVwZGF0ZUNlbGxIZWFkZXIodSxlLHIsaSksbC5hcHBlbmRDaGlsZCh1KSx0LmFwcGVuZENoaWxkKGwpfXRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckdldENvbEhlYWRlciIsZSx0LGkpfXVw''@;'; put 'put ''ZGF0ZUNlbGxIZWFkZXIoZSx0LHIsaT0wKXtsZXQgbz10O2NvbnN0IGE9dGhpcy5fd3Qud3RPdmVybGF5cy5nZXRQYXJlbnRPdmVybGF5KGUpfHx0aGlzLl93dDtlLnBhcmVudE5vZGUmJihMYShlLCJjb2xIZWFkZXIiKT9vPWEud3RUYWJsZS5jb2x1bW5GaWx0ZXIuc291cmNlVG9SZW5kZXJl''@;'; put 'put ''ZCh0KTpMYShlLCJyb3dIZWFkZXIiKSYmKG89YS53dFRhYmxlLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKHQpKSksbz4tMT9fNyhlLFN0cmluZyhyKHQsaSkpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuc2FuaXRpemVyPz8hMCwiaGVhZGVyIix0aGlzLmhvdC5yb290R3JpZEVsZW1lbnQ/''@;'; put 'put ''P3ZvaWQgMCk6KHk3KGUsIlx4YTAiKSxZcihlLCJjb3JuZXJIZWFkZXIiKSl9bWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgoZSl7Y29uc3Qgcj10aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCktZTtyZXR1cm4gcj4wP3I6MH1tYXhpbXVtVmlzaWJsZUVsZW1lbnRIZWln''@;'; put 'put ''aHQoZSl7Y29uc3Qgcj10aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpLWU7cmV0dXJuIHI+MD9yOjB9c2V0TGFzdFNpemUoZSx0KXt1dSh0aGlzLHlZLGUpLHV1KHRoaXMsYlksdCl9Z2V0TGFzdFNpemUoKXtyZXR1cm57d2lkdGg6SWQodGhpcyx5WSksaGVpZ2h0Oklk''@;'; put 'put ''KHRoaXMsYlkpfX1nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpe2lmKCF0aGlzLl93dC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yKXJldHVybiBudWxsO2NvbnN0IGU9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsdD1lLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhp''@;'; put 'put ''cy5fd3Qud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkUm93KCkpO3JldHVybiBlLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0Pz8wLDEpfWdldExhc3RSZW5kZXJlZFZpc2libGVSb3coKXtpZighdGhpcy5fd3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvcilyZXR1cm4gbnVsbDtj''@;'; put 'put ''b25zdCBlPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLHQ9ZS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkUm93KCkpO3JldHVybiBlLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0Pz90aGlzLmhvdC5jb3VudFJvd3MoKS0xLC0x''@;'; put 'put ''KX1nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpe2lmKCF0aGlzLl93dC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yKXJldHVybiBudWxsO2NvbnN0IGU9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsdD1lLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhp''@;'; put 'put ''cy5fd3Qud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCkpO3JldHVybiBlLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0Pz8wLDEpfWdldExhc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKXtpZighdGhpcy5fd3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcilyZXR1''@;'; put 'put ''cm4gbnVsbDtjb25zdCBlPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLHQ9ZS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCkpO3JldHVybiBlLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0Pz90aGlzLmhvdC5j''@;'; put 'put ''b3VudENvbHMoKS0xLC0xKX1nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldEZpcnN0VmlzaWJsZVJvdygpKX1nZXRMYXN0RnVsbHlWaXNpYmxlUm93''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0TGFzdFZpc2libGVSb3coKSl9Z2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIu''@;'; put 'put ''Z2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSl9Z2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRo''@;'; put 'put ''aXMuX3d0Lnd0U2Nyb2xsLmdldExhc3RWaXNpYmxlQ29sdW1uKCkpfWdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldEZpcnN0UGFydGlhbGx5''@;'; put 'put ''VmlzaWJsZVJvdygpKX1nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpfWdldEZpcnN0UGFydGlh''@;'; put 'put ''bGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKX1nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigp''@;'; put 'put ''e3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCkpfWdldENvbHVtbkhlYWRlcnNDb3VudCgpe3JldHVybiBJZCh0aGlzLF9ZKX1nZXRSb3dI''@;'; put 'put ''ZWFkZXJzQ291bnQoKXtyZXR1cm4gSWQodGhpcyxOTCl9Z2V0Vmlld3BvcnRXaWR0aCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFZpZXdwb3J0V2lkdGgoKX1nZXRXb3Jrc3BhY2VXaWR0aCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCl9''@;'; put 'put ''Z2V0Vmlld3BvcnRIZWlnaHQoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpfWdldFdvcmtzcGFjZUhlaWdodCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpfWdldEVsZW1lbnRPdmVybGF5TmFtZShlKXtyZXR1''@;'; put 'put ''cm4odGhpcy5fd3Qud3RPdmVybGF5cy5nZXRQYXJlbnRPdmVybGF5KGUpPz90aGlzLl93dCkud3RUYWJsZS5uYW1lfWdldE92ZXJsYXlCeU5hbWUoZSl7cmV0dXJuIHRoaXMuX3d0LmdldE92ZXJsYXlCeU5hbWUoZSl9Z2V0QWN0aXZlT3ZlcmxheU5hbWUoKXtyZXR1cm4gdGhpcy5fd3QuYWN0''@;'; put 'put ''aXZlT3ZlcmxheU5hbWV9aXNWaXNpYmxlKCl7cmV0dXJuIHRoaXMuX3d0Lnd0VGFibGUuaXNWaXNpYmxlKCl9aGFzVmVydGljYWxTY3JvbGwoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5oYXNWZXJ0aWNhbFNjcm9sbCgpfWhhc0hvcml6b250YWxTY3JvbGwoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''d3Qud3RWaWV3cG9ydC5oYXNIb3Jpem9udGFsU2Nyb2xsKCl9Z2V0VGFibGVXaWR0aCgpe3JldHVybiB0aGlzLl93dC53dFRhYmxlLmdldFdpZHRoKCl9Z2V0VGFibGVIZWlnaHQoKXtyZXR1cm4gdGhpcy5fd3Qud3RUYWJsZS5nZXRIZWlnaHQoKX1nZXRUb3RhbFRhYmxlV2lkdGgoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fd3Qud3RUYWJsZS5nZXRUb3RhbFdpZHRoKCl9Z2V0VG90YWxUYWJsZUhlaWdodCgpe3JldHVybiB0aGlzLl93dC53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCl9Z2V0VGFibGVPZmZzZXQoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VPZmZzZXQoKX1n''@;'; put 'put ''ZXRUYWJsZVNjcm9sbFBvc2l0aW9uKCl7cmV0dXJue2xlZnQ6dGhpcy5fd3Qud3RUYWJsZS5ob2xkZXIuc2Nyb2xsTGVmdCx0b3A6dGhpcy5fd3Qud3RUYWJsZS5ob2xkZXIuc2Nyb2xsVG9wfX1zZXRUYWJsZVNjcm9sbFBvc2l0aW9uKGUpe3RoaXMuX3d0Lnd0VGFibGUuaG9sZGVyLnNjcm9s''@;'; put 'put ''bExlZnQ9ZS5sZWZ0LHRoaXMuX3d0Lnd0VGFibGUuaG9sZGVyLnNjcm9sbFRvcD1lLnRvcH1nZXRSb3dIZWFkZXJXaWR0aCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFJvd0hlYWRlcldpZHRoKCl9Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmll''@;'; put 'put ''d3BvcnQuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl9aXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCl9aXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fd3Qud3RWaWV3cG9ydC5pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpfWRlc3Ryb3koKXt0aGlzLl93dC5kZXN0cm95KCksdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpfWNvbnN0cnVjdG9yKGUpe3ZZKHRoaXMsSEwpLHZZKHRoaXMsSGxlKSx2WSh0aGlzLHFrZSks''@;'; put 'put ''dlkodGhpcyxLa2UpLGk2KHRoaXMsX1kse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGk2KHRoaXMsTkwse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGk2KHRoaXMsRkwse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGk2KHRoaXMsbzYse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQg''@;'; put 'put ''MH0pLGk2KHRoaXMsY20se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGk2KHRoaXMseVkse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGk2KHRoaXMsYlkse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGk2KHRoaXMsdF8se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGk2KHRo''@;'; put 'put ''aXMsUEwse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGk2KHRoaXMsb1Qse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHV1KHRoaXMsX1ksMCksdXUodGhpcyxOTCwwKSx0aGlzLnBvc3Rwb25lZEFkanVzdEVsZW1lbnRzU2l6ZT0hMSx1dSh0aGlzLEZMLCExKSx1dSh0aGlzLG82LCEx''@;'; put 'put ''KSx1dSh0aGlzLGNtLG51bGwpLHV1KHRoaXMseVksMCksdXUodGhpcyxiWSwwKSx1dSh0aGlzLHRfLG51bGwpLHV1KHRoaXMsUEwsITEpLHV1KHRoaXMsb1QsbnVsbCksdGhpcy5ob3Q9ZSx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgVzIodGhpcy5ob3QpLHRoaXMuc2V0dGluZ3M9dGhpcy5ob3Qu''@;'; put 'put ''Z2V0U2V0dGluZ3MoKSx0aGlzLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLHRoaXMuaW5pdGlhbGl6ZVdhbGtvbnRhYmxlKCl9fTtmdW5jdGlvbiBDWShuKXtsZXQgcixlPW4rMSx0PSIiO2Zvcig7ZT4wOylyPShlLTEpJTI2LHQ9U3RyaW5nLmZyb21DaGFyQ29kZSg2''@;'; put 'put ''NStyKSt0LGU9cGFyc2VJbnQoU3RyaW5nKChlLXIpLzI2KSwxMCk7cmV0dXJuIHR9ZnVuY3Rpb24gdWt0KG4pe2xldCBlPTA7aWYobilmb3IobGV0IHQ9MCxyPW4ubGVuZ3RoLTE7dDxuLmxlbmd0aDt0Kz0xLHItPTEpZSs9MjYqKnIqKCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIuaW5k''@;'; put 'put ''ZXhPZihuW3RdKSsxKTtyZXR1cm4gZS09MSxlfWZ1bmN0aW9uIGRrdChuPTEwMCxlPTQpe2NvbnN0IHQ9W107bGV0IHIsaTtmb3Iocj0wO3I8bjtyKyspe2NvbnN0IG89W107Zm9yKGk9MDtpPGU7aSsrKW8ucHVzaChDWShpKSsocisxKSk7dC5wdXNoKG8pfXJldHVybiB0fWZ1bmN0aW9uIGhr''@;'; put 'put ''dChuPTEwMCxlPTQpe2NvbnN0IHQ9W107bGV0IHIsaTtmb3Iocj0wO3I8bjtyKyspe2NvbnN0IG89e307Zm9yKGk9MDtpPGU7aSsrKW9bYHByb3Ake2l9YF09Q1koaSkrKHIrMSk7dC5wdXNoKG8pfXJldHVybiB0fWZ1bmN0aW9uIGZrdChuLGUpe2NvbnN0IHQ9W107bGV0IHI7Zm9yKGxldCBp''@;'; put 'put ''PTA7aTxuO2krKyl7cj1bXTtmb3IobGV0IG89MDtvPGU7bysrKXIucHVzaCgiIik7dC5wdXNoKHIpfXJldHVybiB0fWZ1bmN0aW9uIEJsZShuLGU9MCl7bGV0IHQ9bjtjb25zdCByPVtdO3JldHVybighQXJyYXkuaXNBcnJheShuKXx8IUFycmF5LmlzQXJyYXkoblswXSkpJiYodD1bbl0pLHQu''@;'; put 'put ''Zm9yRWFjaCgoaSxvKT0+e0FycmF5LmlzQXJyYXkoaSk/aS5mb3JFYWNoKChhLGwpPT57ci5wdXNoKFtvK2UsbCxhXSl9KTpPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGE9PntyLnB1c2goW28rZSxhLGlbYV1dKX0pfSkscn1mdW5jdGlvbiBKa2UobixlLHQpe3JldHVybiBuLnNvbWUoKFtyLGld''@;'; put 'put ''KT0+cj09PWUmJmk9PT10KX1mdW5jdGlvbiBqbGUobil7bGV0IGU9MDtyZXR1cm4gQXJyYXkuaXNBcnJheShuKSYmKG5bMF0mJkFycmF5LmlzQXJyYXkoblswXSk/ZT1uWzBdLmxlbmd0aDpuWzBdJiZDYShuWzBdKSYmKGU9T1coblswXSkpKSxlfWZ1bmN0aW9uIFVsZShuKXtyZXR1cm4hIShB''@;'; put 'put ''cnJheS5pc0FycmF5KG4pJiZuLmxlbmd0aCYmbi5ldmVyeShlPT5BcnJheS5pc0FycmF5KGUpKSl9ZnVuY3Rpb24gZVJlKG4pe3JldHVybiEhKEFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoJiZuLmV2ZXJ5KGU9PiJvYmplY3QiPT10eXBlb2YgZSYmIUFycmF5LmlzQXJyYXkoZSkmJm51bGwh''@;'; put 'put ''PT1lKSl9ZnVuY3Rpb24gdFJlKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP24uc2xpY2UoKTpudWxsIT09biYmIm9iamVjdCI9PXR5cGVvZiBuP3suLi5ufTpufWNvbnN0IG5SZT17X2xvY2FsSG9va3M6T2JqZWN0LmNyZWF0ZShudWxsKSxhZGRMb2NhbEhvb2sobixlKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fbG9jYWxIb29rc1tuXXx8KHRoaXMuX2xvY2FsSG9va3Nbbl09W10pLHRoaXMuX2xvY2FsSG9va3Nbbl0ucHVzaChlKSx0aGlzfSxyZW1vdmVMb2NhbEhvb2sobixlKXtpZih0aGlzLl9sb2NhbEhvb2tzW25dKXtjb25zdCB0PXRoaXMuX2xvY2FsSG9va3Nbbl0uaW5kZXhPZihlKTt0Pi0x''@;'; put 'put ''JiZ0aGlzLl9sb2NhbEhvb2tzW25dLnNwbGljZSh0LDEpfXJldHVybiB0aGlzfSxydW5Mb2NhbEhvb2tzKG4sZSx0LHIsaSxvLGEpe2lmKHRoaXMuX2xvY2FsSG9va3Nbbl0pe2NvbnN0IGw9dGhpcy5fbG9jYWxIb29rc1tuXS5sZW5ndGg7Zm9yKGxldCB1PTA7dTxsO3UrKylGc2UodGhpcy5f''@;'; put 'put ''bG9jYWxIb29rc1tuXVt1XSx0aGlzLGUsdCxyLGksbyxhKX19LGNsZWFyTG9jYWxIb29rcygpe3JldHVybiB0aGlzLl9sb2NhbEhvb2tzPXt9LHRoaXN9fTtLNShuUmUsIk1JWElOX05BTUUiLCJsb2NhbEhvb2tzIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IF9oPW5SZTtj''@;'; put 'put ''bGFzcyBFd3tnZXRWYWx1ZXMoZSl7cmV0dXJuIHRoaXMuaW5kZXhlZFZhbHVlc31nZXRWYWx1ZUF0SW5kZXgoZSl7Y29uc3QgdD10aGlzLmluZGV4ZWRWYWx1ZXM7aWYoZTx0Lmxlbmd0aClyZXR1cm4gdFtlXX1zZXRWYWx1ZXMoZSl7dGhpcy5pbmRleGVkVmFsdWVzPWUuc2xpY2UoKSx0aGlz''@;'; put 'put ''LnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfXNldFZhbHVlQXRJbmRleChlLHQpe3JldHVybiBlPHRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGgmJih0aGlzLmluZGV4ZWRWYWx1ZXNbZV09dCx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpLCEwKX1jbGVhcigpe3RoaXMuc2V0RGVmYXVsdFZh''@;'; put 'put ''bHVlcygpfWdldExlbmd0aCgpe3JldHVybiB0aGlzLmdldFZhbHVlcygpLmxlbmd0aH1zZXREZWZhdWx0VmFsdWVzKGU9dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aCl7dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aD0wLF9hKHRoaXMuaW5pdFZhbHVlT3JGbik/VmEoMCxlLTEsdD0+dGhpcy5p''@;'; put 'put ''bmRleGVkVmFsdWVzLnB1c2godGhpcy5pbml0VmFsdWVPckZuKHQpKSk6VmEoMCxlLTEsKCk9PnRoaXMuaW5kZXhlZFZhbHVlcy5wdXNoKHRoaXMuaW5pdFZhbHVlT3JGbikpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9aW5pdChlKXtyZXR1cm4gdGhpcy5zZXREZWZhdWx0VmFsdWVz''@;'; put 'put ''KGUpLHRoaXMucnVuTG9jYWxIb29rcygiaW5pdCIpLHRoaXN9aW5zZXJ0KGUsdCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX1yZW1vdmUoZSl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX1kZXN0cm95KCl7dGhpcy5jbGVhckxvY2FsSG9va3MoKSx0aGlzLmluZGV4ZWRWYWx1''@;'; put 'put ''ZXM9W10sdGhpcy5pbml0VmFsdWVPckZuPW51bGx9Y29uc3RydWN0b3IoZT1udWxsKXt0aGlzLmluZGV4ZWRWYWx1ZXM9W10sdGhpcy5pbml0VmFsdWVPckZuPWV9fWZ1bmN0aW9uIFNZKG4sZSx0LHIpe2NvbnN0IGk9dC5sZW5ndGg/dFswXTp2b2lkIDA7cmV0dXJuWy4uLm4uc2xpY2UoMCxp''@;'; put 'put ''KSwuLi50Lm1hcCgobyxhKT0+X2Eocik/cihvLGEpOnIpLC4uLnZvaWQgMD09PWk/W106bi5zbGljZShpKV19ZnVuY3Rpb24gRVkobixlKXtyZXR1cm4gSHYobiwodCxyKT0+ITE9PT1lLmluY2x1ZGVzKHIpKX1ZbChFdyxfaCk7Y2xhc3Mgbl8gZXh0ZW5kcyBFd3tpbnNlcnQoZSx0KXt0aGlz''@;'; put 'put ''LmluZGV4ZWRWYWx1ZXM9U1kodGhpcy5pbmRleGVkVmFsdWVzLDAsdCx0aGlzLmluaXRWYWx1ZU9yRm4pLHN1cGVyLmluc2VydChlLHQpfXJlbW92ZShlKXt0aGlzLmluZGV4ZWRWYWx1ZXM9RVkodGhpcy5pbmRleGVkVmFsdWVzLGUpLHN1cGVyLnJlbW92ZShlKX19Y2xhc3MgVkwgZXh0ZW5k''@;'; put 'put ''cyBuX3tnZXRIaWRkZW5JbmRleGVzKCl7cmV0dXJuIG0xKHRoaXMuZ2V0VmFsdWVzKCksKGUsdCxyKT0+KHQmJmUucHVzaChyKSxlKSxbXSl9Y29uc3RydWN0b3IoZT0hMSl7c3VwZXIoZSl9fWZ1bmN0aW9uIHJSZShuLGUsdCl7cmV0dXJuWy4uLm4uc2xpY2UoMCxlKSwuLi50LC4uLm4uc2xp''@;'; put 'put ''Y2UoZSldfWZ1bmN0aW9uIE1ZKG4sZSl7cmV0dXJuIEh2KG4sdD0+ITE9PT1lLmluY2x1ZGVzKHQpKX1mdW5jdGlvbiB6bGUobixlKXtyZXR1cm4gX2Mobix0PT50LWUuZmlsdGVyKHI9PnI8dCkubGVuZ3RoKX1mdW5jdGlvbiBXbGUobixlKXtjb25zdCB0PWVbMF0scj1lLmxlbmd0aDtyZXR1''@;'; put 'put ''cm4gX2MobixpPT5pPj10P2krcjppKX1jbGFzcyBUWSBleHRlbmRzIEV3e2dldFZhbHVlcygpe3JldHVybiB0aGlzLm9yZGVyT2ZJbmRleGVzLm1hcChlPT50aGlzLmluZGV4ZWRWYWx1ZXNbZV0pfXNldFZhbHVlcyhlKXt0aGlzLm9yZGVyT2ZJbmRleGVzPVsuLi5BcnJheShlLmxlbmd0aCku''@;'; put 'put ''a2V5cygpXSxzdXBlci5zZXRWYWx1ZXMoZSl9c2V0VmFsdWVBdEluZGV4KGUsdCxyPXRoaXMub3JkZXJPZkluZGV4ZXMubGVuZ3RoKXtyZXR1cm4gZTx0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoJiYodGhpcy5pbmRleGVkVmFsdWVzW2VdPXQsITE9PT10aGlzLm9yZGVyT2ZJbmRleGVzLmlu''@;'; put 'put ''Y2x1ZGVzKGUpJiZ0aGlzLm9yZGVyT2ZJbmRleGVzLnNwbGljZShyLDAsZSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKSwhMCl9Y2xlYXJWYWx1ZShlKXt0aGlzLm9yZGVyT2ZJbmRleGVzPU1ZKHRoaXMub3JkZXJPZkluZGV4ZXMsW2VdKSxfYSh0aGlzLmluaXRWYWx1ZU9yRm4pP3N1''@;'; put 'put ''cGVyLnNldFZhbHVlQXRJbmRleChlLHRoaXMuaW5pdFZhbHVlT3JGbihlKSk6c3VwZXIuc2V0VmFsdWVBdEluZGV4KGUsdGhpcy5pbml0VmFsdWVPckZuKX1nZXRMZW5ndGgoKXtyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5sZW5ndGh9c2V0RGVmYXVsdFZhbHVlcyhlPXRoaXMuaW5kZXhl''@;'; put 'put ''ZFZhbHVlcy5sZW5ndGgpe3RoaXMub3JkZXJPZkluZGV4ZXMubGVuZ3RoPTAsc3VwZXIuc2V0RGVmYXVsdFZhbHVlcyhlKX1pbnNlcnQoZSx0KXt0aGlzLmluZGV4ZWRWYWx1ZXM9U1kodGhpcy5pbmRleGVkVmFsdWVzLDAsdCx0aGlzLmluaXRWYWx1ZU9yRm4pLHRoaXMub3JkZXJPZkluZGV4''@;'; put 'put ''ZXM9V2xlKHRoaXMub3JkZXJPZkluZGV4ZXMsdCksc3VwZXIuaW5zZXJ0KGUsdCl9cmVtb3ZlKGUpe3RoaXMuaW5kZXhlZFZhbHVlcz1FWSh0aGlzLmluZGV4ZWRWYWx1ZXMsZSksdGhpcy5vcmRlck9mSW5kZXhlcz1NWSh0aGlzLm9yZGVyT2ZJbmRleGVzLGUpLHRoaXMub3JkZXJPZkluZGV4''@;'; put 'put ''ZXM9emxlKHRoaXMub3JkZXJPZkluZGV4ZXMsZSksc3VwZXIucmVtb3ZlKGUpfWdldEVudHJpZXMoKXtyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5tYXAoZT0+W2UsdGhpcy5nZXRWYWx1ZUF0SW5kZXgoZSldKX1jb25zdHJ1Y3RvciguLi5lKXtzdXBlciguLi5lKSx0aGlzLm9yZGVyT2ZJ''@;'; put 'put ''bmRleGVzPVtdfX1jbGFzcyBhVCBleHRlbmRzIG5fe2dldFRyaW1tZWRJbmRleGVzKCl7cmV0dXJuIG0xKHRoaXMuZ2V0VmFsdWVzKCksKGUsdCxyKT0+KHQmJmUucHVzaChyKSxlKSxbXSl9Y29uc3RydWN0b3IoZT0hMSl7c3VwZXIoZSl9fWNvbnN0IGlSZT1uZXcgTWFwKFtbImhpZGluZyIs''@;'; put 'put ''VkxdLFsiaW5kZXgiLEV3XSxbImxpbmtlZFBoeXNpY2FsSW5kZXhUb1ZhbHVlIixUWV0sWyJwaHlzaWNhbEluZGV4VG9WYWx1ZSIsbl9dLFsidHJpbW1pbmciLGFUXV0pO2NsYXNzIG9SZSBleHRlbmRzIEV3e2dldFZhbHVlcygpe3JldHVybiB0aGlzLmluZGV4ZWRWYWx1ZXN9aW5zZXJ0KGUs''@;'; put 'put ''dCl7Y29uc3Qgcj1XbGUodGhpcy5nZXRWYWx1ZXMoKSx0KTt0aGlzLmluZGV4ZWRWYWx1ZXM9clJlKHIsZSx0KSxzdXBlci5pbnNlcnQoZSx0KX1yZW1vdmUoZSl7Y29uc3QgdD1NWSh0aGlzLmdldFZhbHVlcygpLGUpO3RoaXMuaW5kZXhlZFZhbHVlcz16bGUodCxlKSxzdXBlci5yZW1vdmUo''@;'; put 'put ''ZSl9Y29uc3RydWN0b3IoKXtzdXBlcihlPT5lKX19bGV0IFlsZT0wO2NsYXNzIFpsZXtyZWdpc3RlcihlLHQpeyExPT09dGhpcy5jb2xsZWN0aW9uLmhhcyhlKSYmKHRoaXMuY29sbGVjdGlvbi5zZXQoZSx0KSx0LmFkZExvY2FsSG9vaygiY2hhbmdlIiwoKT0+dGhpcy5ydW5Mb2NhbEhvb2tz''@;'; put 'put ''KCJjaGFuZ2UiLHQpKSxZbGUrPTEpfXVucmVnaXN0ZXIoZSl7Y29uc3QgdD10aGlzLmNvbGxlY3Rpb24uZ2V0KGUpO3ZvaWQgMCE9PXQmJih0LmRlc3Ryb3koKSx0aGlzLmNvbGxlY3Rpb24uZGVsZXRlKGUpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIix0KSxZbGUtPTEpfXVucmVnaXN0''@;'; put 'put ''ZXJBbGwoKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaCgoZSx0KT0+dGhpcy51bnJlZ2lzdGVyKHQpKSx0aGlzLmNvbGxlY3Rpb24uY2xlYXIoKX1nZXQoZSl7cmV0dXJuIFh1KGUpP0FycmF5LmZyb20odGhpcy5jb2xsZWN0aW9uLnZhbHVlcygpKTp0aGlzLmNvbGxlY3Rpb24uZ2V0KGUpfWdl''@;'; put 'put ''dExlbmd0aCgpe3JldHVybiB0aGlzLmNvbGxlY3Rpb24uc2l6ZX1yZW1vdmVGcm9tRXZlcnkoZSl7dGhpcy5jb2xsZWN0aW9uLmZvckVhY2godD0+e3QucmVtb3ZlKGUpfSl9aW5zZXJ0VG9FdmVyeShlLHQpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKHI9PntyLmluc2VydChlLHQpfSl9aW5p''@;'; put 'put ''dEV2ZXJ5KGUpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKHQ9Pnt0LmluaXQoZSl9KX1jb25zdHJ1Y3Rvcigpe3RoaXMuY29sbGVjdGlvbj1uZXcgTWFwfX1ZbChabGUsX2gpO2NsYXNzIGFSZSBleHRlbmRzIFpsZXtnZXRNZXJnZWRWYWx1ZXMoZT0hMCl7aWYoITA9PT1lKXJldHVybiB0aGlz''@;'; put 'put ''Lm1lcmdlZFZhbHVlc0NhY2hlO2lmKDA9PT10aGlzLmdldExlbmd0aCgpKXJldHVybltdO2NvbnN0IHQ9X2ModGhpcy5nZXQoKSxvPT5vLmdldFZhbHVlcygpKSxyPVtdLGk9Wm8odFswXSkmJnRbMF0ubGVuZ3RofHwwO2ZvcihsZXQgbz0wO288aTtvKz0xKXtjb25zdCBhPVtdO2ZvcihsZXQg''@;'; put 'put ''bD0wO2w8dGhpcy5nZXRMZW5ndGgoKTtsKz0xKWEucHVzaCh0W2xdW29dKTtyLnB1c2goYSl9cmV0dXJuIF9jKHIsdGhpcy5hZ2dyZWdhdGlvbkZ1bmN0aW9uKX1nZXRNZXJnZWRWYWx1ZUF0SW5kZXgoZSx0KXtjb25zdCByPXRoaXMuZ2V0TWVyZ2VkVmFsdWVzKHQpW2VdO3JldHVybiBabyhy''@;'; put 'put ''KT9yOnRoaXMuZmFsbGJhY2tWYWx1ZX11cGRhdGVDYWNoZSgpe3RoaXMubWVyZ2VkVmFsdWVzQ2FjaGU9dGhpcy5nZXRNZXJnZWRWYWx1ZXMoITEpfWNvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSx0aGlzLm1lcmdlZFZhbHVlc0NhY2hlPVtdLHRoaXMuYWdncmVnYXRpb25GdW5jdGlvbj1lLHRo''@;'; put 'put ''aXMuZmFsbGJhY2tWYWx1ZT10fX1mdW5jdGlvbiBzUmUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQobil9ZnVuY3Rpb24gbFJlKG4sZSx0KXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24geWt0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixzUmUobixlLCJzZXQiKSx0KSx0''@;'; put 'put ''fXZhciB4WT1uZXcgV2Vha01hcDtjbGFzcyBjUmV7c3Vic2NyaWJlKGUpe3JldHVybiB0aGlzLmFkZExvY2FsSG9vaygiY2hhbmdlIixlKSx0aGlzLl93cml0ZShmdW5jdGlvbiBia3QobixlKXtyZXR1cm4gZnVuY3Rpb24gX2t0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52''@;'; put 'put ''YWx1ZX0obixzUmUobixlLCJnZXQiKSl9KHRoaXMseFkpKSx0aGlzfXVuc3Vic2NyaWJlKCl7cmV0dXJuIHRoaXMucnVuTG9jYWxIb29rcygidW5zdWJzY3JpYmUiKSx0aGlzLmNsZWFyTG9jYWxIb29rcygpLHRoaXN9X3dyaXRlKGUpe3JldHVybiBlLmxlbmd0aD4wJiZ0aGlzLnJ1bkxvY2Fs''@;'; put 'put ''SG9va3MoImNoYW5nZSIsZSksdGhpc31fd3JpdGVJbml0aWFsQ2hhbmdlcyhlKXtsUmUodGhpcyx4WSxlKX1jb25zdHJ1Y3RvcigpeyhmdW5jdGlvbiB3a3QobixlLHQpeyhmdW5jdGlvbiB2a3QobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6''@;'; put 'put ''ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobixlKSxlLnNldChuLHQpfSkodGhpcyx4WSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksbFJlKHRoaXMseFksW10pfX1mdW5jdGlvbiB1UmUobixlKXtjb25zdCB0PVtdO2xldCByPTAsaT0wO2Zv''@;'; put 'put ''cig7cjxuLmxlbmd0aCYmaTxlLmxlbmd0aDtyKyssaSsrKW5bcl0hPT1lW2ldJiZ0LnB1c2goe29wOiJyZXBsYWNlIixpbmRleDppLG9sZFZhbHVlOm5bcl0sbmV3VmFsdWU6ZVtpXX0pO2Zvcig7cjxlLmxlbmd0aDtyKyspdC5wdXNoKHtvcDoiaW5zZXJ0IixpbmRleDpyLG9sZFZhbHVlOnZv''@;'; put 'put ''aWQgMCxuZXdWYWx1ZTplW3JdfSk7Zm9yKDtpPG4ubGVuZ3RoO2krKyl0LnB1c2goe29wOiJyZW1vdmUiLGluZGV4Omksb2xkVmFsdWU6bltpXSxuZXdWYWx1ZTp2b2lkIDB9KTtyZXR1cm4gdH1mdW5jdGlvbiBkUmUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJh''@;'; put 'put ''dHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQobil9ZnVuY3Rpb24gdW0obixlKXtyZXR1cm4gZnVuY3Rpb24gU2t0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obixkUmUobixlLCJnZXQiKSl9ZnVu''@;'; put 'put ''Y3Rpb24gQkwobixlLHQpeyhmdW5jdGlvbiBDa3QobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIEM3KG4s''@;'; put 'put ''ZSx0KXtyZXR1cm4gZnVuY3Rpb24gRWt0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixkUmUobixlLCJz''@;'; put 'put ''ZXQiKSx0KSx0fVlsKGNSZSxfaCk7dmFyIGpMPW5ldyBXZWFrTWFwLHNUPW5ldyBXZWFrTWFwLFVMPW5ldyBXZWFrTWFwLHpMPW5ldyBXZWFrTWFwLFdMPW5ldyBXZWFrTWFwO2NsYXNzIE1rdHtjcmVhdGVPYnNlcnZlcigpe2NvbnN0IGU9bmV3IGNSZTtyZXR1cm4gdW0odGhpcyxqTCkuYWRk''@;'; put 'put ''KGUpLGUuYWRkTG9jYWxIb29rKCJ1bnN1YnNjcmliZSIsKCk9Pnt1bSh0aGlzLGpMKS5kZWxldGUoZSl9KSxlLl93cml0ZUluaXRpYWxDaGFuZ2VzKHVSZSh1bSh0aGlzLHNUKSx1bSh0aGlzLFVMKSkpLGV9ZW1pdChlKXtsZXQgdD11bSh0aGlzLFVMKTsoIXVtKHRoaXMsekwpfHx1bSh0aGlz''@;'; put 'put ''LHNUKS5sZW5ndGghPT1lLmxlbmd0aCkmJigwPT09ZS5sZW5ndGg/ZT1uZXcgQXJyYXkodC5sZW5ndGgpLmZpbGwodW0odGhpcyxXTCkpOkM3KHRoaXMsc1QsbmV3IEFycmF5KGUubGVuZ3RoKS5maWxsKHVtKHRoaXMsV0wpKSksdW0odGhpcyx6TCl8fChDNyh0aGlzLHpMLCEwKSx0PXVtKHRo''@;'; put 'put ''aXMsc1QpKSk7Y29uc3Qgcj11UmUodCxlKTt1bSh0aGlzLGpMKS5mb3JFYWNoKGk9PmkuX3dyaXRlKHIpKSxDNyh0aGlzLFVMLGUpfWNvbnN0cnVjdG9yKHtpbml0aWFsSW5kZXhWYWx1ZTplfT17fSl7QkwodGhpcyxqTCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksQkwodGhpcyxzVCx7''@;'; put 'put ''d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksQkwodGhpcyxVTCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksQkwodGhpcyx6TCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksQkwodGhpcyxXTCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksQzcodGhpcyxqTCxuZXcgU2V0KSxD''@;'; put 'put ''Nyh0aGlzLHNULFtdKSxDNyh0aGlzLFVMLFtdKSxDNyh0aGlzLHpMLCExKSxDNyh0aGlzLFdMLCExKSxDNyh0aGlzLFdMLGU/PyExKX19ZnVuY3Rpb24gaFJlKG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBl''@;'; put 'put ''bGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBmUmUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQobil9ZnVuY3Rpb24gZG0obixl''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24gVGt0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obixmUmUobixlLCJnZXQiKSl9ZnVuY3Rpb24gcFJlKG4sZSx0KXtoUmUobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIEdsZShuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIHhrdChuLGUs''@;'; put 'put ''dCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4sZlJlKG4sZSwic2V0IiksdCksdH1mdW5jdGlvbiBBWShuLGUsdCl7''@;'; put 'put ''aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiAkbGUobixlKXtoUmUobixlKSxlLmFkZChuKX12YXIgYTY9bmV3IFdlYWtNYXAsTXc9bmV3IFdlYWtNYXAsZ1Jl''@;'; put 'put ''PW5ldyBXZWFrU2V0LHFsZT1uZXcgV2Vha1NldCxtUmU9bmV3IFdlYWtTZXQ7Y2xhc3MgS2xle3N1c3BlbmRPcGVyYXRpb25zKCl7dGhpcy5pc0JhdGNoZWQ9ITB9cmVzdW1lT3BlcmF0aW9ucygpe3RoaXMuaXNCYXRjaGVkPSExLHRoaXMudXBkYXRlQ2FjaGUoKSxBWSh0aGlzLG1SZSxra3Qp''@;'; put 'put ''LmNhbGwodGhpcyl9Y3JlYXRlQ2hhbmdlc09ic2VydmVyKGUpe3JldHVybiJoaWRpbmciIT09ZSYmSnIoYFVuc3VwcG9ydGVkIGluZGV4IG1hcCB0eXBlICIke2V9Ii5gKSx0aGlzLmhpZGluZ0NoYW5nZXNPYnNlcnZhYmxlLmNyZWF0ZU9ic2VydmVyKCl9Y3JlYXRlQW5kUmVnaXN0ZXJJbmRl''@;'; put 'put ''eE1hcChlLHQscil7cmV0dXJuIHRoaXMucmVnaXN0ZXJNYXAoZSxmdW5jdGlvbiBna3QobixlPW51bGwpe3JldHVybiBpUmUuaGFzKG4pfHxKcihgVGhlIHByb3ZpZGVkIG1hcCB0eXBlICgiJHtufSIpIGRvZXMgbm90IGV4aXN0LmApLG5ldyhpUmUuZ2V0KG4pKShlKX0odCxyKSl9cmVnaXN0''@;'; put 'put ''ZXJNYXAoZSx0KXsodGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmdldChlKXx8dGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5nZXQoZSl8fHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmdldChlKSkmJkpyKGBNYXAgd2l0aCBuYW1lICIke2V9IiBoYXMgYmVlbiBhbHJlYWR5IHJlZ2lz''@;'; put 'put ''dGVyZWQuYCksdCBpbnN0YW5jZW9mIGFUP3RoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5yZWdpc3RlcihlLHQpOnQgaW5zdGFuY2VvZiBWTD90aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnJlZ2lzdGVyKGUsdCk6dGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24ucmVnaXN0ZXIoZSx0KTtj''@;'; put 'put ''b25zdCByPXRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7cmV0dXJuIHI+MCYmdC5pbml0KHIpLHR9dW5yZWdpc3Rlck1hcChlKXt0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlcihlKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXIoZSksdGhpcy52YXJp''@;'; put 'put ''b3VzTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlcihlKX11bnJlZ2lzdGVyQWxsKCl7dGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXJBbGwoKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXJBbGwoKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi51bnJl''@;'; put 'put ''Z2lzdGVyQWxsKCl9Z2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgoZSl7Y29uc3QgdD10aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGVbZV07cmV0dXJuIFpvKHQpP3Q6bnVsbH1nZXRQaHlzaWNhbEZyb21SZW5kZXJhYmxlSW5kZXgoZSl7Y29uc3QgdD10aGlzLnJlbmRlcmFibGVQaHlzaWNh''@;'; put 'put ''bEluZGV4ZXNDYWNoZVtlXTtyZXR1cm4gWm8odCk/dDpudWxsfWdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KGUpe3JldHVybiB0aGlzLmZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0NhY2hlLmdldChlKT8/bnVsbH1nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGUpe3JldHVybiB0''@;'; put 'put ''aGlzLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHRoaXMuZ2V0UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4KGUpKX1nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGUpe3JldHVybiB0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuZ2V0KGUpPz9udWxsfWdl''@;'; put 'put ''dE5lYXJlc3ROb3RIaWRkZW5JbmRleChlLHQscj0hMSl7aWYobnVsbD09PXRoaXMuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgoZSkpcmV0dXJuIG51bGw7aWYodGhpcy5mcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlLmhhcyhlKSlyZXR1cm4gZTtjb25zdCBvPUFycmF5LmZy''@;'; put 'put ''b20odGhpcy5mcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlLmtleXMoKSk7bGV0IGE9LTE7cmV0dXJuIGE9dD4wP28uZmluZEluZGV4KGw9Pm51bGwhPT1sJiZsPmUpOm8ucmV2ZXJzZSgpLmZpbmRJbmRleChsPT5udWxsIT09bCYmbDxlKSwtMT09PWE/cj90aGlzLmdldE5lYXJl''@;'; put 'put ''c3ROb3RIaWRkZW5JbmRleChlLC10LCExKTpudWxsOm9bYV19aW5pdFRvTGVuZ3RoKGU9dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKSl7dGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlPVsuLi5uZXcgQXJyYXkoZSkua2V5cygpXSx0aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZT1bLi4ubmV3''@;'; put 'put ''IEFycmF5KGUpLmtleXMoKV0sdGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0iaW5pdCIsdGhpcy5pbmRleGVzU2VxdWVuY2UuaW5pdChlKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5p''@;'; put 'put ''bml0RXZlcnkoZSksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCksdGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uaW5pdEV2ZXJ5KGUpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmluaXRFdmVyeShlKSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKSx0''@;'; put 'put ''aGlzLnJ1bkxvY2FsSG9va3MoImluaXQiKX1maXRUb0xlbmd0aChlKXtjb25zdCB0PXRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7aWYoZTx0KXtjb25zdCByPVsuLi5BcnJheSh0aGlzLmdldE51bWJlck9mSW5kZXhlcygpLWUpLmtleXMoKV0ubWFwKGk9PmkrZSk7dGhpcy5yZW1vdmVJbmRl''@;'; put 'put ''eGVzKHIpfWVsc2UgdGhpcy5pbnNlcnRJbmRleGVzKHQsZS10KX1nZXRJbmRleGVzU2VxdWVuY2UoKXtyZXR1cm4gdGhpcy5pbmRleGVzU2VxdWVuY2UuZ2V0VmFsdWVzKCl9c2V0SW5kZXhlc1NlcXVlbmNlKGUpe3ZvaWQgMD09PXRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZSYmKHRoaXMuaW5k''@;'; put 'put ''ZXhlc0NoYW5nZVNvdXJjZT0idXBkYXRlIiksdGhpcy5pbmRleGVzU2VxdWVuY2Uuc2V0VmFsdWVzKGUpLCJ1cGRhdGUiPT09dGhpcy5pbmRleGVzQ2hhbmdlU291cmNlJiYodGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMCl9Z2V0Tm90VHJpbW1lZEluZGV4ZXMoZT0hMCl7cmV0dXJu''@;'; put 'put ''ITA9PT1lP3RoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZTp0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmZpbHRlcihyPT4hMT09PXRoaXMuaXNUcmltbWVkKHIpKX1nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpe3JldHVybiB0aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKCkubGVuZ3Ro''@;'; put 'put ''fWdldE5vdEhpZGRlbkluZGV4ZXMoZT0hMCl7cmV0dXJuITA9PT1lP3RoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hlOnRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuZmlsdGVyKHI9PiExPT09dGhpcy5pc0hpZGRlbihyKSl9Z2V0Tm90SGlkZGVuSW5kZXhlc0xlbmd0aCgpe3JldHVybiB0aGlz''@;'; put 'put ''LmdldE5vdEhpZGRlbkluZGV4ZXMoKS5sZW5ndGh9Z2V0UmVuZGVyYWJsZUluZGV4ZXMoZT0hMCl7cmV0dXJuITA9PT1lP3RoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlOnRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKS5maWx0ZXIocj0+ITE9PT10aGlzLmlzSGlkZGVuKHIp''@;'; put 'put ''KX1nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmFibGVJbmRleGVzKCkubGVuZ3RofWdldE51bWJlck9mSW5kZXhlcygpe3JldHVybiB0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmxlbmd0aH1tb3ZlSW5kZXhlcyhlLHQpeyJudW1iZXIiPT10eXBl''@;'; put 'put ''b2YgZSYmKGU9W2VdKTtjb25zdCByPV9jKGUsZz0+dGhpcy5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChnKSkuZmlsdGVyKGc9Pm51bGwhPT1nKSxpPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxvPWUubGVuZ3RoLGE9TVkodGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKSxy''@;'; put 'put ''KSxsPWEuZmlsdGVyKGc9PiExPT09dGhpcy5pc1RyaW1tZWQoZykpO2xldCB1PWEuaW5kZXhPZihsW2wubGVuZ3RoLTFdKSsxO3QrbzxpJiYodT1hLmluZGV4T2YobFt0XSkpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0ibW92ZSIsdGhpcy5zZXRJbmRleGVzU2VxdWVuY2UoclJlKGEsdSxy''@;'; put 'put ''KSksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMH1pc1RyaW1tZWQoZSl7cmV0dXJuIHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZUF0SW5kZXgoZSl9aXNIaWRkZW4oZSl7cmV0dXJuIHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0TWVyZ2VkVmFs''@;'; put 'put ''dWVBdEluZGV4KGUpfWluc2VydEluZGV4ZXMoZSx0LHI9InN0YXJ0Iil7Y29uc3QgaT10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKClbZV0sbz1abyhpKT9pOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCksYT10aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmluY2x1ZGVzKGkpP3RoaXMuZ2V0''@;'; put 'put ''SW5kZXhlc1NlcXVlbmNlKCkuaW5kZXhPZihpKTp0aGlzLmdldE51bWJlck9mSW5kZXhlcygpLGw9X2MobmV3IEFycmF5KHQpLmZpbGwobyksKGcsRSk9PmcrRSk7dGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0iaW5zZXJ0Iix0aGlzLmluZGV4ZXNT''@;'; put 'put ''ZXF1ZW5jZS5pbnNlcnQoYSxsKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwO2NvbnN0IHU9ImVuZCI9PT1yP2wubWFwKGc9PmcrMSk6bDt0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uaW5zZXJ0VG9FdmVyeShhLHUpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uaW5zZXJ0''@;'; put 'put ''VG9FdmVyeShhLHUpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkoYSx1KSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKX1yZW1vdmVJbmRleGVzKGUpe3RoaXMuc3VzcGVuZE9wZXJhdGlvbnMoKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9InJlbW92ZSIsdGhpcy5p''@;'; put 'put ''bmRleGVzU2VxdWVuY2UucmVtb3ZlKGUpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDAsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnJlbW92ZUZyb21FdmVyeShlKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnJlbW92ZUZyb21FdmVyeShlKSx0aGlzLnZhcmlvdXNNYXBz''@;'; put 'put ''Q29sbGVjdGlvbi5yZW1vdmVGcm9tRXZlcnkoZSksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCl9b2JzZXJ2ZU1hcENoYW5nZShlLHQpe3JldHVybihlIGluc3RhbmNlb2YgYVR8fGUgaW5zdGFuY2VvZiBWTCkmJkpyKCdUaGUgIm9ic2VydmVNYXBDaGFuZ2UiIG1ldGhvZCBkb2VzIG5vdCBzdXBw''@;'; put 'put ''b3J0IHRyaW1taW5nIG9yIGhpZGluZyBtYXBzLicpLGRtKHRoaXMsYTYpLmhhcyhlKXx8ZG0odGhpcyxhNikuc2V0KGUsbmV3IFNldCksZG0odGhpcyxhNikuZ2V0KGUpLmFkZCh0KSwoKT0+e2NvbnN0IHI9ZG0odGhpcyxhNikuZ2V0KGUpO3ImJihyLmRlbGV0ZSh0KSwwPT09ci5zaXplJiZk''@;'; put 'put ''bSh0aGlzLGE2KS5kZWxldGUoZSkpfX11cGRhdGVDYWNoZShlPSExKXsoITA9PT1lfHwhMT09PXRoaXMuaXNCYXRjaGVkJiYhMD09PSh0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWR8fHRoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkfHx0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkKSkmJih0''@;'; put 'put ''aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udXBkYXRlQ2FjaGUoKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnVwZGF0ZUNhY2hlKCksdGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoITEpLHRoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hl''@;'; put 'put ''PXRoaXMuZ2V0Tm90SGlkZGVuSW5kZXhlcyghMSksdGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGU9dGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlcyghMSksdGhpcy5jYWNoZUZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlcygpLHRoaXMuY2FjaGVGcm9tVmlzdWFsVG9SZW5kZXJh''@;'; put 'put ''YmxlSW5kZXhlcygpLHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQmJnRoaXMuaGlkaW5nQ2hhbmdlc09ic2VydmFibGUuZW1pdCh0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlcygpKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNhY2hlVXBkYXRlZCIse2luZGV4ZXNTZXF1''@;'; put 'put ''ZW5jZUNoYW5nZWQ6dGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkLHRyaW1tZWRJbmRleGVzQ2hhbmdlZDp0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZCxoaWRkZW5JbmRleGVzQ2hhbmdlZDp0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkfSksdGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2Vk''@;'; put 'put ''PSExLHRoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkPSExLHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQ9ITEpfWNhY2hlRnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzKCl7Y29uc3QgZT10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCk7dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3Vh''@;'; put 'put ''bEluZGV4ZXNDYWNoZS5jbGVhcigpO2ZvcihsZXQgdD0wO3Q8ZTt0Kz0xKXtjb25zdCByPXRoaXMuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgodCk7dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5zZXQocix0KX19Y2FjaGVGcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5k''@;'; put 'put ''ZXhlcygpe2NvbnN0IGU9dGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpO3RoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5jbGVhcigpO2ZvcihsZXQgdD0wO3Q8ZTt0Kz0xKXtjb25zdCByPXRoaXMuZ2V0UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4KHQp''@;'; put 'put ''LGk9dGhpcy5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChyKTt0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuc2V0KGksdCl9fWRlc3Ryb3koKXtHbGUodGhpcyxhNixuZXcgV2Vha01hcCksZG0odGhpcyxNdykuY2xlYXIoKSx0aGlzLnVucmVnaXN0ZXJBbGwoKX1j''@;'; put 'put ''b25zdHJ1Y3RvcigpeyRsZSh0aGlzLGdSZSksJGxlKHRoaXMscWxlKSwkbGUodGhpcyxtUmUpLHBSZSh0aGlzLGE2LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxwUmUodGhpcyxNdyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdGhpcy5pbmRleGVzU2VxdWVuY2U9bmV3IG9SZSx0''@;'; put 'put ''aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb249bmV3IGFSZShlPT5lLnNvbWUodD0+ITA9PT10KSwhMSksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbj1uZXcgYVJlKGU9PmUuc29tZSh0PT4hMD09PXQpLCExKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbj1uZXcgWmxlLHRoaXMuaGlkaW5n''@;'; put 'put ''Q2hhbmdlc09ic2VydmFibGU9bmV3IE1rdCh7aW5pdGlhbEluZGV4VmFsdWU6ITF9KSx0aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGU9W10sdGhpcy5ub3RIaWRkZW5JbmRleGVzQ2FjaGU9W10sdGhpcy5pc0JhdGNoZWQ9ITEsdGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkPSExLHRoaXMu''@;'; put 'put ''aW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDAsdGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWQ9ITEsdGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZD0hMSx0aGlzLnJlbmRlcmFibGVQaHlzaWNhbEluZGV4ZXNDYWNoZT1bXSx0aGlzLmZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0NhY2hlPW5l''@;'; put 'put ''dyBNYXAsdGhpcy5mcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlPW5ldyBNYXAsR2xlKHRoaXMsYTYsbmV3IFdlYWtNYXApLEdsZSh0aGlzLE13LG5ldyBTZXQpLHRoaXMuaW5kZXhlc1NlcXVlbmNlLmFkZExvY2FsSG9vaygiY2hhbmdlIiwoKT0+e3RoaXMuaW5kZXhlc1NlcXVl''@;'; put 'put ''bmNlQ2hhbmdlZD0hMCx0aGlzLnVwZGF0ZUNhY2hlKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJpbmRleGVzU2VxdWVuY2VDaGFuZ2UiLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLG51bGwpfSksdGhpcy50''@;'; put 'put ''cmltbWluZ01hcHNDb2xsZWN0aW9uLmFkZExvY2FsSG9vaygiY2hhbmdlIixlPT57dGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWQ9ITAsdGhpcy51cGRhdGVDYWNoZSgpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixlLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbil9KSx0aGlzLmhp''@;'; put 'put ''ZGluZ01hcHNDb2xsZWN0aW9uLmFkZExvY2FsSG9vaygiY2hhbmdlIixlPT57dGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZD0hMCx0aGlzLnVwZGF0ZUNhY2hlKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGUsdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbil9KSx0aGlzLnZhcmlvdXNN''@;'; put 'put ''YXBzQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImNoYW5nZSIsZT0+e0FZKHRoaXMsZ1JlLEFrdCkuY2FsbCh0aGlzLGUpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixlLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uKX0pfX1mdW5jdGlvbiBBa3Qobil7ZG0odGhpcyxhNikuaGFzKG4p''@;'; put 'put ''JiYodGhpcy5pc0JhdGNoZWQ/ZG0odGhpcyxNdykuYWRkKG4pOkFZKHRoaXMscWxlLHZSZSkuY2FsbCh0aGlzLG4pKX1mdW5jdGlvbiB2UmUobil7Y29uc3QgZT1kbSh0aGlzLGE2KS5nZXQobik7ZSYmZS5mb3JFYWNoKHQ9PnQobikpfWZ1bmN0aW9uIGtrdCgpe2RtKHRoaXMsTXcpLnNpemU+''@;'; put 'put ''MCYmKGRtKHRoaXMsTXcpLmZvckVhY2gobj0+QVkodGhpcyxxbGUsdlJlKS5jYWxsKHRoaXMsbikpLGRtKHRoaXMsTXcpLmNsZWFyKCkpfWZ1bmN0aW9uIF9SZShuKXtjb25zdCB0PS9eKFthLXpBLVpdezJ9KS0oW2EtekEtWl17Mn0pJC8uZXhlYyhuKTtyZXR1cm4gdD9gJHt0WzFdLnRvTG93''@;'; put 'put ''ZXJDYXNlKCl9LSR7dFsyXS50b1VwcGVyQ2FzZSgpfWA6bn1mdW5jdGlvbiB5UmUobil7Wm8obikmJm03KHljYExhbmd1YWdlIHdpdGggY29kZSAiJHtufSIgd2FzIG5vdCBmb3VuZC4gWW91IHNob3VsZCByZWdpc3RlciBwYXJ0aWN1bGFyIGxhbmd1YWdlXHgyMAogICAgYmVmb3JlIHVzaW5n''@;'; put 'put ''IGl0LiBSZWFkIG1vcmUgYWJvdXQgdGhpcyBpc3N1ZSBhdDogaHR0cHM6Ly9kb2NzLmhhbmRzb250YWJsZS5jb20vaTE4bi9taXNzaW5nLWxhbmd1YWdlLWNvZGUuYCl9WWwoS2xlLF9oKTtjb25zdHtyZWdpc3RlcjpEa3QsZ2V0VmFsdWVzOkxrdH09enAoInBocmFzZUZvcm1hdHRlcnMiKTtm''@;'; put 'put ''dW5jdGlvbiB3UmUobixlKXtEa3QobixlKX13UmUoInBsdXJhbGl6ZSIsZnVuY3Rpb24gSWt0KG4sZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkobikmJk51bWJlci5pc0ludGVnZXIoZSk/bltlXTpufSksd1JlKCJzdWJzdGl0dXRlIixmdW5jdGlvbiBiUmUobixlKXtyZXR1cm4gQXJyYXkuaXNB''@;'; put 'put ''cnJheShuKT9uLm1hcCh0PT5iUmUodCxlKSk6ZkwobixlKX0pO2NvbnN0IFhsZT0iQ29tbW9uOiIsa1k9YCR7WGxlfW9rYCxRbGU9YCR7WGxlfWNhbmNlbGAsQ1JlPSJDb250ZXh0TWVudTppdGVtcyIsSmxlPWAke0NSZX0ubm9JdGVtc2AsZWNlPWAke0NSZX0uaW5zZXJ0Um93QWJvdmVgLHRj''@;'; put 'put ''ZT1gJHtDUmV9Lmluc2VydFJvd0JlbG93YCxuY2U9YCR7Q1JlfS5pbnNlcnRDb2x1bW5PblRoZUxlZnRgLHJjZT1gJHtDUmV9Lmluc2VydENvbHVtbk9uVGhlUmlnaHRgLGljZT1gJHtDUmV9LnJlbW92ZVJvd2Asb2NlPWAke0NSZX0ucmVtb3ZlQ29sdW1uYCxhY2U9YCR7Q1JlfS51bmRvYCxz''@;'; put 'put ''Y2U9YCR7Q1JlfS5yZWRvYCxSWT1gJHtDUmV9LnJlYWRPbmx5YCxsY2U9YCR7Q1JlfS5jbGVhckNvbHVtbmAsY2NlPWAke0NSZX0uY29weWAsdWNlPWAke0NSZX0uY29weVdpdGhIZWFkZXJzYCxkY2U9YCR7Q1JlfS5jb3B5V2l0aEdyb3VwSGVhZGVyc2AsaGNlPWAke0NSZX0uY29weUhlYWRl''@;'; put 'put ''cnNPbmx5YCxmY2U9YCR7Q1JlfS5jdXRgLHBjZT1gJHtDUmV9LmV4cG9ydGAsZ2NlPWAke0NSZX0uZXhwb3J0RmlsZUNzdmAsbWNlPWAke0NSZX0uZXhwb3J0RmlsZVhsc3hgLHZjZT1gJHtDUmV9LmZyZWV6ZUNvbHVtbmAsX2NlPWAke0NSZX0udW5mcmVlemVDb2x1bW5gLHljZT1gJHtDUmV9''@;'; put 'put ''Lm1lcmdlQ2VsbHNgLGJjZT1gJHtDUmV9LnVubWVyZ2VDZWxsc2Asd2NlPWAke0NSZX0uYWRkQ29tbWVudGAsQ2NlPWAke0NSZX0uZWRpdENvbW1lbnRgLFNjZT1gJHtDUmV9LnJlbW92ZUNvbW1lbnRgLEVjZT1gJHtDUmV9LnJlYWRPbmx5Q29tbWVudGAsTWNlPWAke0NSZX0uYWxpZ25gLFRj''@;'; put 'put ''ZT1gJHtDUmV9LmFsaWduLmxlZnRgLHhjZT1gJHtDUmV9LmFsaWduLmNlbnRlcmAsQWNlPWAke0NSZX0uYWxpZ24ucmlnaHRgLGtjZT1gJHtDUmV9LmFsaWduLmp1c3RpZnlgLFJjZT1gJHtDUmV9LmFsaWduLnRvcGAsSWNlPWAke0NSZX0uYWxpZ24ubWlkZGxlYCxEY2U9YCR7Q1JlfS5hbGln''@;'; put 'put ''bi5ib3R0b21gLExjZT1gJHtDUmV9LmJvcmRlcnNgLE9jZT1gJHtDUmV9LmJvcmRlcnMudG9wYCxOY2U9YCR7Q1JlfS5ib3JkZXJzLnJpZ2h0YCxGY2U9YCR7Q1JlfS5ib3JkZXJzLmJvdHRvbWAsUGNlPWAke0NSZX0uYm9yZGVycy5sZWZ0YCxIY2U9YCR7Q1JlfS5ib3JkZXJzLnJlbW92ZWAs''@;'; put 'put ''VmNlPWAke0NSZX0ubmVzdGVkSGVhZGVycy5pbnNlcnRDaGlsZFJvd2AsQmNlPWAke0NSZX0ubmVzdGVkSGVhZGVycy5kZXRhY2hGcm9tUGFyZW50YCxqY2U9YCR7Q1JlfS5oaWRlQ29sdW1uYCxVY2U9YCR7Q1JlfS5zaG93Q29sdW1uYCx6Y2U9YCR7Q1JlfS5oaWRlUm93YCxXY2U9YCR7Q1Jl''@;'; put 'put ''fS5zaG93Um93YCxqZj0iRmlsdGVyczoiLGZkPWAke2pmfWNvbmRpdGlvbnNgLElZPWAke2ZkfS5ub25lYCxZY2U9YCR7ZmR9LmlzRW1wdHlgLFpjZT1gJHtmZH0uaXNOb3RFbXB0eWAsR2NlPWAke2ZkfS5pc0VxdWFsVG9gLCRjZT1gJHtmZH0uaXNOb3RFcXVhbFRvYCxxY2U9YCR7ZmR9LmJl''@;'; put 'put ''Z2luc1dpdGhgLEtjZT1gJHtmZH0uZW5kc1dpdGhgLFhjZT1gJHtmZH0uY29udGFpbnNgLFFjZT1gJHtmZH0uZG9lc05vdENvbnRhaW5gLE5rdD1gJHtmZH0uYnlWYWx1ZWAsSmNlPWAke2ZkfS5ncmVhdGVyVGhhbmAsZXVlPWAke2ZkfS5ncmVhdGVyVGhhbk9yRXF1YWxUb2AsdHVlPWAke2Zk''@;'; put 'put ''fS5sZXNzVGhhbmAsbnVlPWAke2ZkfS5sZXNzVGhhbk9yRXF1YWxUb2AsWUw9YCR7ZmR9LmlzQmV0d2VlbmAscnVlPWAke2ZkfS5pc05vdEJldHdlZW5gLFpMPWAke2ZkfS5hZnRlcmAsR0w9YCR7ZmR9LmFmdGVyT3JFcXVhbGAsJEw9YCR7ZmR9LmJlZm9yZWAscUw9YCR7ZmR9LmJlZm9yZU9y''@;'; put 'put ''RXF1YWxgLERZPWAke2ZkfS50b2RheWAsTFk9YCR7ZmR9LnRvbW9ycm93YCxPWT1gJHtmZH0ueWVzdGVyZGF5YCxpdWU9YCR7amZ9bGFiZWxzLmZpbHRlckJ5Q29uZGl0aW9uYCxvdWU9YCR7amZ9bGFiZWxzLmZpbHRlckJ5VmFsdWVgLGF1ZT1gJHtqZn1sYWJlbHMuY29uanVuY3Rpb25gLE5Z''@;'; put 'put ''PWAke2pmfWxhYmVscy5kaXNqdW5jdGlvbmAsRlk9YCR7amZ9dmFsdWVzLmJsYW5rQ2VsbHNgLHN1ZT1gJHtqZn1idXR0b25zLnNlbGVjdEFsbGAsbHVlPWAke2pmfWJ1dHRvbnMuY2xlYXJgLGN1ZT1gJHtqZn1idXR0b25zLm9rYCx1dWU9YCR7amZ9YnV0dG9ucy5jYW5jZWxgLGR1ZT1gJHtq''@;'; put 'put ''Zn1idXR0b25zLnBsYWNlaG9sZGVyLnNlYXJjaGAsaHVlPWAke2pmfWJ1dHRvbnMucGxhY2Vob2xkZXIudmFsdWVgLGZ1ZT1gJHtqZn1idXR0b25zLnBsYWNlaG9sZGVyLnNlY29uZFZhbHVlYCxzNj0iUGFnaW5hdGlvbjoiLHB1ZT1gJHtzNn1zZWN0aW9uLnBhZ2luYXRpb25gLGd1ZT1gJHtz''@;'; put 'put ''Nn0ucGFnZVNpemUuYXV0b2AsUFk9YCR7czZ9c2VjdGlvbi5wYWdlU2l6ZWAsbXVlPWAke3M2fXNlY3Rpb24uY291bnRlcmAsdnVlPWAke3M2fXNlY3Rpb24ubmF2aWdhdGlvbmAsX3VlPWAke3M2fWZpcnN0UGFnZWAseXVlPWAke3M2fXByZXZQYWdlYCxidWU9YCR7czZ9bmV4dFBhZ2VgLHd1''@;'; put 'put ''ZT1gJHtzNn1sYXN0UGFnZWAsQ3VlPSJDaGVja2JveFJlbmRlcmVyOiIsU3VlPWAke0N1ZX1jaGVja2VkYCxFdWU9YCR7Q3VlfXVuY2hlY2tlZGAsU1JlPSJMb2FkaW5nOiIsTXVlPWAke1NSZX10aXRsZWAsRVJlPSJOb3RpZmljYXRpb246IixUdWU9YCR7RVJlfWJ1dHRvbnMuY2xvc2VgLE1S''@;'; put 'put ''ZT0iRXhwb3J0RmlsZToiLHh1ZT1gJHtNUmV9ZGlhbG9nLnRpdGxlYCxyXz0iRW1wdHlEYXRhU3RhdGU6IixBdWU9YCR7cl99dGl0bGVgLGt1ZT1gJHtyX31kZXNjcmlwdGlvbmAsUnVlPWAke3JffXRpdGxlLmZpbHRlcnNgLEl1ZT1gJHtyX31kZXNjcmlwdGlvbi5maWx0ZXJzYCxEdWU9YCR7''@;'; put 'put ''cl99YnV0dG9ucy5maWx0ZXJzLnJlc2V0YCxMdWU9YCR7cl99dGl0bGUubG9hZGluZ2AsT3VlPWAke3JffWRlc2NyaXB0aW9uLmxvYWRpbmdgLFR3PSJEYXRhUHJvdmlkZXI6IixOdWU9YCR7VHd9ZXJyb3JzLmZldGNoYCxGdWU9YCR7VHd9ZXJyb3JzLmNyZWF0ZWAsUHVlPWAke1R3fWVycm9y''@;'; put 'put ''cy51cGRhdGVgLEh1ZT1gJHtUd31lcnJvcnMucmVtb3ZlYCxWdWU9YCR7VHd9ZXJyb3JzLnJlcXVlc3RGYWlsZWRgLEJ1ZT1gJHtUd31idXR0b25zLnJlZmV0Y2hgLFRSZT17bGFuZ3VhZ2VDb2RlOiJlbi1VUyIsW2tZXToiT0siLFtRbGVdOiJDYW5jZWwiLFtKbGVdOiJObyBhdmFpbGFibGUg''@;'; put 'put ''b3B0aW9ucyIsW2VjZV06Ikluc2VydCByb3cgYWJvdmUiLFt0Y2VdOiJJbnNlcnQgcm93IGJlbG93IixbbmNlXToiSW5zZXJ0IGNvbHVtbiBsZWZ0IixbcmNlXToiSW5zZXJ0IGNvbHVtbiByaWdodCIsW2ljZV06WyJSZW1vdmUgcm93IiwiUmVtb3ZlIHJvd3MiXSxbb2NlXTpbIlJlbW92ZSBj''@;'; put 'put ''b2x1bW4iLCJSZW1vdmUgY29sdW1ucyJdLFthY2VdOiJVbmRvIixbc2NlXToiUmVkbyIsW1JZXToiUmVhZCBvbmx5IixbbGNlXToiQ2xlYXIgY29sdW1uIixbTWNlXToiQWxpZ25tZW50IixbVGNlXToiTGVmdCIsW3hjZV06IkNlbnRlciIsW0FjZV06IlJpZ2h0Iixba2NlXToiSnVzdGlmeSIs''@;'; put 'put ''W1JjZV06IlRvcCIsW0ljZV06Ik1pZGRsZSIsW0RjZV06IkJvdHRvbSIsW3ZjZV06IkZyZWV6ZSBjb2x1bW4iLFtfY2VdOiJVbmZyZWV6ZSBjb2x1bW4iLFtMY2VdOiJCb3JkZXJzIixbT2NlXToiVG9wIixbTmNlXToiUmlnaHQiLFtGY2VdOiJCb3R0b20iLFtQY2VdOiJMZWZ0IixbSGNlXToi''@;'; put 'put ''UmVtb3ZlIGJvcmRlcihzKSIsW3djZV06IkFkZCBjb21tZW50IixbQ2NlXToiRWRpdCBjb21tZW50IixbU2NlXToiRGVsZXRlIGNvbW1lbnQiLFtFY2VdOiJSZWFkLW9ubHkgY29tbWVudCIsW3ljZV06Ik1lcmdlIGNlbGxzIixbYmNlXToiVW5tZXJnZSBjZWxscyIsW2NjZV06IkNvcHkiLFt1''@;'; put 'put ''Y2VdOlsiQ29weSB3aXRoIGhlYWRlciIsIkNvcHkgd2l0aCBoZWFkZXJzIl0sW2RjZV06WyJDb3B5IHdpdGggZ3JvdXAgaGVhZGVyIiwiQ29weSB3aXRoIGdyb3VwIGhlYWRlcnMiXSxbaGNlXTpbIkNvcHkgaGVhZGVyIG9ubHkiLCJDb3B5IGhlYWRlcnMgb25seSJdLFtmY2VdOiJDdXQiLFtw''@;'; put 'put ''Y2VdOiJFeHBvcnQiLFtnY2VdOiJUbyBDU1YiLFttY2VdOiJUbyBFeGNlbCIsW3h1ZV06IkV4cG9ydGluZ1x1MjAyNiIsW1ZjZV06Ikluc2VydCBjaGlsZCByb3ciLFtCY2VdOiJEZXRhY2ggZnJvbSBwYXJlbnQiLFtqY2VdOlsiSGlkZSBjb2x1bW4iLCJIaWRlIGNvbHVtbnMiXSxbVWNlXTpb''@;'; put 'put ''IlNob3cgY29sdW1uIiwiU2hvdyBjb2x1bW5zIl0sW3pjZV06WyJIaWRlIHJvdyIsIkhpZGUgcm93cyJdLFtXY2VdOlsiU2hvdyByb3ciLCJTaG93IHJvd3MiXSxbSVldOiJOb25lIixbWWNlXToiSXMgZW1wdHkiLFtaY2VdOiJJcyBub3QgZW1wdHkiLFtHY2VdOiJJcyBlcXVhbCB0byIsWyRj''@;'; put 'put ''ZV06IklzIG5vdCBlcXVhbCB0byIsW3FjZV06IkJlZ2lucyB3aXRoIixbS2NlXToiRW5kcyB3aXRoIixbWGNlXToiQ29udGFpbnMiLFtRY2VdOiJEb2VzIG5vdCBjb250YWluIixbSmNlXToiR3JlYXRlciB0aGFuIixbZXVlXToiR3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIixbdHVlXToiTGVz''@;'; put 'put ''cyB0aGFuIixbbnVlXToiTGVzcyB0aGFuIG9yIGVxdWFsIHRvIixbWUxdOiJJcyBiZXR3ZWVuIixbcnVlXToiSXMgbm90IGJldHdlZW4iLFtaTF06IkFmdGVyIixbR0xdOiJBZnRlciBvciBlcXVhbCB0byIsWyRMXToiQmVmb3JlIixbcUxdOiJCZWZvcmUgb3IgZXF1YWwgdG8iLFtEWV06IlRv''@;'; put 'put ''ZGF5IixbTFldOiJUb21vcnJvdyIsW09ZXToiWWVzdGVyZGF5IixbRlldOiJCbGFuayBjZWxscyIsW2l1ZV06IkZpbHRlciBieSBjb25kaXRpb24iLFtvdWVdOiJGaWx0ZXIgYnkgdmFsdWUiLFthdWVdOiJBbmQiLFtOWV06Ik9yIixbc3VlXToiU2VsZWN0IGFsbCIsW2x1ZV06IkNsZWFyIixb''@;'; put 'put ''Y3VlXToiT0siLFt1dWVdOiJDYW5jZWwiLFtkdWVdOiJTZWFyY2giLFtodWVdOiJWYWx1ZSIsW2Z1ZV06IlNlY29uZCB2YWx1ZSIsW3B1ZV06IlBhZ2luYXRpb24iLFtQWV06IlBhZ2Ugc2l6ZSIsW2d1ZV06IkF1dG8iLFttdWVdOiJbc3RhcnRdIC0gW2VuZF0gb2YgW3RvdGFsXSIsW3Z1ZV06''@;'; put 'put ''IlBhZ2UgW2N1cnJlbnRQYWdlXSBvZiBbdG90YWxQYWdlc10iLFtfdWVdOiJHbyB0byBmaXJzdCBwYWdlIixbeXVlXToiR28gdG8gcHJldmlvdXMgcGFnZSIsW2J1ZV06IkdvIHRvIG5leHQgcGFnZSIsW3d1ZV06IkdvIHRvIGxhc3QgcGFnZSIsW1N1ZV06IkNoZWNrZWQiLFtFdWVdOiJVbmNo''@;'; put 'put ''ZWNrZWQiLFtNdWVdOiJMb2FkaW5nLi4uIixbVHVlXToiQ2xvc2UiLFtBdWVdOiJObyBkYXRhIGF2YWlsYWJsZSIsW2t1ZV06IlRoZXJlXHUyMDE5cyBub3RoaW5nIHRvIGRpc3BsYXkgeWV0LiIsW1J1ZV06Ik5vIHJlc3VsdHMgZm91bmQiLFtJdWVdOiJJdCBsb29rcyBsaWtlIHlvdXIgY3Vy''@;'; put 'put ''cmVudCBmaWx0ZXJzIGFyZSBoaWRpbmcgYWxsIHJlc3VsdHMuIixbRHVlXToiUmVzZXQgZmlsdGVycyIsW0x1ZV06IkxvYWRpbmcgZGF0YSIsW091ZV06IlBsZWFzZSB3YWl0LiIsW051ZV06IkNvdWxkIG5vdCBsb2FkIGRhdGEiLFtGdWVdOiJDb3VsZCBub3QgY3JlYXRlIHJvd3MiLFtQdWVd''@;'; put 'put ''OiJDb3VsZCBub3QgdXBkYXRlIHJvd3MiLFtIdWVdOiJDb3VsZCBub3QgcmVtb3ZlIHJvd3MiLFtWdWVdOiJSZXF1ZXN0IGZhaWxlZCIsW0J1ZV06IlJlZmV0Y2gifSxqdWU9VFJlLmxhbmd1YWdlQ29kZSx7cmVnaXN0ZXI6UGt0LGdldEl0ZW06eFJlLGhhc0l0ZW06SGt0LGdldFZhbHVlczpW''@;'; put 'put ''a3R9PXpwKCJsYW5ndWFnZXNEaWN0aW9uYXJpZXMiKTtmdW5jdGlvbiBBUmUobixlKXtsZXQgdD1uLHI9ZTtyZXR1cm4gQ2EobikmJihyPW4sdD1TdHJpbmcoci5sYW5ndWFnZUNvZGUpKSxmdW5jdGlvbiBCa3QobixlKXtuIT09anVlJiZmdW5jdGlvbiBSa3QobixlKXthYyhlLCh0LHIpPT57''@;'; put 'put ''WHUobltyXSkmJihuW3JdPXQpfSl9KGUseFJlKGp1ZSkpfSh0LHIpLFBrdCh0LEFkKHIpKSxBZChyKX1mdW5jdGlvbiBrUmUobil7cmV0dXJuIFV1ZShuKT9BZCh4UmUobikpOm51bGx9ZnVuY3Rpb24gVXVlKG4pe3JldHVybiBIa3Qobil9ZnVuY3Rpb24gUlJlKG4sZSx0KXtjb25zdCByPWtS''@;'; put 'put ''ZShuKTtpZihudWxsPT09cilyZXR1cm4gbnVsbDtjb25zdCBpPXJbZV07aWYoWHUoaSkpcmV0dXJuIG51bGw7Y29uc3Qgbz1mdW5jdGlvbiBVa3QobixlKXtyZXR1cm4gZnVuY3Rpb24gT2t0KCl7cmV0dXJuIExrdCgpfSgpLnJlZHVjZSgodCxyKT0+cih0LGUpLG4pfShpLHQpO3JldHVybiBB''@;'; put 'put ''cnJheS5pc0FycmF5KG8pP29bMF06b31BUmUoVFJlKTtjb25zdCBJUmU9ImFjdGl2ZS1oZWFkZXIiLHp1ZT0iaGVhZGVyIixIWT0iZm9jdXMiO2NsYXNzIERSZXtpc0VtcHR5KCl7cmV0dXJuIG51bGw9PT10aGlzLmNlbGxSYW5nZX1hZGQoZSl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3RoaXMu''@;'; put 'put ''Y2VsbFJhbmdlPXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGUpOnRoaXMuY2VsbFJhbmdlLmV4cGFuZChlKSx0aGlzfXJlcGxhY2UoZSx0KXtpZighdGhpcy5pc0VtcHR5KCkpe2lmKHRoaXMuY2VsbFJhbmdlLmZyb20uaXNFcXVhbChlKSlyZXR1cm4gdGhpcy5jZWxsUmFuZ2UuZnJv''@;'; put 'put ''bT10LCEwO2lmKHRoaXMuY2VsbFJhbmdlLnRvLmlzRXF1YWwoZSkpcmV0dXJuIHRoaXMuY2VsbFJhbmdlLnRvPXQsITB9cmV0dXJuITF9Y2xlYXIoKXtyZXR1cm4gdGhpcy5jZWxsUmFuZ2U9bnVsbCx0aGlzfWdldENvcm5lcnMoKXtjb25zdCBlPXRoaXMuY2VsbFJhbmdlLmdldE91dGVyVG9w''@;'; put 'put ''U3RhcnRDb3JuZXIoKSx0PXRoaXMuY2VsbFJhbmdlLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7cmV0dXJuW2Uucm93Pz8wLGUuY29sPz8wLHQucm93Pz8wLHQuY29sPz8wXX1kZXN0cm95KCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJkZXN0cm95Iil9Y29uc3RydWN0b3IoZSx0KXt0aGlzLnNl''@;'; put 'put ''dHRpbmdzPWUsdGhpcy5jZWxsUmFuZ2U9dHx8bnVsbH19WWwoRFJlLF9oKTtjb25zdCAka3Q9RFJlLFM3PWNsYXNzIHFrdCBleHRlbmRzICRrdHthZGQoZSl7cmV0dXJuIG51bGw9PT10aGlzLnZpc3VhbENlbGxSYW5nZT90aGlzLnZpc3VhbENlbGxSYW5nZT10aGlzLnNldHRpbmdzLmNyZWF0''@;'; put 'put ''ZUNlbGxSYW5nZShlKTp0aGlzLnZpc3VhbENlbGxSYW5nZS5leHBhbmQoZSksdGhpc31jbGVhcigpe3JldHVybiB0aGlzLnZpc3VhbENlbGxSYW5nZT1udWxsLHN1cGVyLmNsZWFyKCl9dHJpbVRvVmlzaWJsZUNlbGxzUmFuZ2VPbmx5KGUpe2NvbnN0e2Zyb206dCx0bzpyfT1lLGk9Ik4tUyI9''@;'; put 'put ''PT1lLmdldFZlcnRpY2FsRGlyZWN0aW9uKCk/MTotMSxvPSJzdGFydC1lbmQiPT09ZS5nZXRJbmxpbmVEaXJlY3Rpb24oKT8xOi0xLGE9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKHQsaSxvKSxsPXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyhyLC1pLC1vKTtpZihudWxs''@;'; put 'put ''PT09YXx8bnVsbD09PWwpcmV0dXJuIG51bGw7Y29uc3QgdT1hLnJvdz8/MCxnPWwucm93Pz8wLEU9YS5jb2w/PzAsTz1sLmNvbD8/MDtyZXR1cm4gMT09PWkmJnU+Z3x8LTE9PT1pJiZ1PGd8fDE9PT1vJiZFPk98fC0xPT09byYmRTxPP251bGw6dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFu''@;'; put 'put ''Z2UoYSxhLGwpfWdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMoZSx0LHI9dCl7aWYobnVsbD09PWUucm93fHxudWxsPT09ZS5jb2wpcmV0dXJuIG51bGw7Y29uc3QgaT10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0aGlzLnNldHRpbmdzLnJvd0luZGV4TWFwcGVyLGUucm93LHQpO2lm''@;'; put 'put ''KG51bGw9PT1pKXJldHVybiBudWxsO2NvbnN0IG89dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodGhpcy5zZXR0aW5ncy5jb2x1bW5JbmRleE1hcHBlcixlLmNvbCxyKTtyZXR1cm4gbnVsbD09PW8/bnVsbDp0aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxDb29yZHMoaSxvKX1nZXROZWFy''@;'; put 'put ''ZXN0Tm90SGlkZGVuSW5kZXgoZSx0LHIpe3JldHVybiB0PDA/dDplLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0LHIpfWNvbW1pdCgpe2lmKG51bGw9PT10aGlzLnZpc3VhbENlbGxSYW5nZSlyZXR1cm4gdGhpcztjb25zdCBlPXRoaXMudHJpbVRvVmlzaWJsZUNlbGxzUmFuZ2VPbmx5KHRo''@;'; put 'put ''aXMudmlzdWFsQ2VsbFJhbmdlKTtyZXR1cm4gdGhpcy5jZWxsUmFuZ2U9bnVsbD09PWU/bnVsbDp0aGlzLmNyZWF0ZVJlbmRlcmFibGVDZWxsUmFuZ2UoZS5mcm9tLGUudG8pLHRoaXN9c3luY1dpdGgoZSl7Y29uc3QgdD1lLmZyb20uY2xvbmUoKS5ub3JtYWxpemUoKSxyPSJOLVMiPT09ZS5n''@;'; put 'put ''ZXRWZXJ0aWNhbERpcmVjdGlvbigpPzE6LTEsaT0iVy1FIj09PWUuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpPzE6LTEsbz10aGlzLnZpc3VhbENlbGxSYW5nZT90aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3Jkcyh0aGlzLnZpc3VhbENlbGxSYW5nZS5oaWdobGlnaHQpOm51''@;'; put 'put ''bGw7bGV0IGE9bnVsbDtpZigobnVsbD09PW98fG51bGw9PT1vLmNvbHx8bnVsbD09PW8ucm93KSYmKGE9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKHQscixpKSksbnVsbCE9PWEmJmUuaW5jbHVkZXMoYSkpe2NvbnN0IGw9ZS5oaWdobGlnaHQuY2xvbmUoKTtpZigobC5yb3c/Py0x''@;'; put 'put ''KT49MCYmKGwucm93PWEucm93KSwobC5jb2w/Py0xKT49MCYmKGwuY29sPWEuY29sKSxudWxsPT09dGhpcy5jZWxsUmFuZ2Upe2NvbnN0IHU9dGhpcy5zZXR0aW5ncy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMobCk7dGhpcy5jZWxsUmFuZ2U9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFu''@;'; put 'put ''Z2UodSl9ZS5zZXRIaWdobGlnaHQobCl9cmV0dXJuImZvY3VzIj09PXRoaXMuc2V0dGluZ3Muc2VsZWN0aW9uVHlwZSYmbnVsbCE9PW8mJm51bGw9PT1hJiZudWxsIT09dGhpcy52aXN1YWxDZWxsUmFuZ2UmJmUuc2V0SGlnaGxpZ2h0KHRoaXMudmlzdWFsQ2VsbFJhbmdlLmhpZ2hsaWdodCks''@;'; put 'put ''dGhpc31nZXRDb3JuZXJzKCl7Y29uc3R7ZnJvbTplLHRvOnR9PXRoaXMuY2VsbFJhbmdlO3JldHVybltNYXRoLm1pbihlLnJvdz8/MCx0LnJvdz8/MCksTWF0aC5taW4oZS5jb2w/PzAsdC5jb2w/PzApLE1hdGgubWF4KGUucm93Pz8wLHQucm93Pz8wKSxNYXRoLm1heChlLmNvbD8/MCx0LmNv''@;'; put 'put ''bD8/MCldfWdldFZpc3VhbENvcm5lcnMoKXtjb25zdCBlPXRoaXMuY2VsbFJhbmdlLHQ9dGhpcy5zZXR0aW5ncy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoZS5nZXRUb3BTdGFydENvcm5lcigpKSxyPXRoaXMuc2V0dGluZ3MucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKGUuZ2V0Qm90dG9t''@;'; put 'put ''RW5kQ29ybmVyKCkpO3JldHVyblt0LnJvdyx0LmNvbCxyLnJvdyxyLmNvbF19Y3JlYXRlUmVuZGVyYWJsZUNlbGxSYW5nZShlLHQpe2NvbnN0IHI9dGhpcy5zZXR0aW5ncy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoZSksaT10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3Jk''@;'; put 'put ''cyh0KTtyZXR1cm4gbnVsbD09PXIucm93fHxudWxsPT09ci5jb2x8fG51bGw9PT1pLnJvd3x8bnVsbD09PWkuY29sP251bGw6dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UocixyLGkpfWNvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSxudWxsKSx0aGlzLnZpc3VhbENlbGxSYW5nZT1udWxs''@;'; put 'put ''LHRoaXMudmlzdWFsQ2VsbFJhbmdlPXR8fG51bGwsdGhpcy5jb21taXQoKX19O2Z1bmN0aW9uIFl1ZSh7YWN0aXZlSGVhZGVyQ2xhc3NOYW1lOm4sLi4uZX0pe3JldHVybiBuZXcgUzcoe2NsYXNzTmFtZTpuLC4uLmUsc2VsZWN0aW9uVHlwZTpJUmV9KX1mdW5jdGlvbiBLa3Qoe2FyZWFDb3Ju''@;'; put 'put ''ZXJWaXNpYmxlOm4sLi4uZX0pe3JldHVybiBuZXcgUzcoe2NsYXNzTmFtZToiYXJlYSIsY3JlYXRlTGF5ZXJzOiEwLGJvcmRlcjp7d2lkdGg6MSxjb2xvcjoiIzRiODlmZiIsY29ybmVyVmlzaWJsZTpufSwuLi5lLHNlbGVjdGlvblR5cGU6ImFyZWEifSl9ZnVuY3Rpb24gWGt0KHsuLi5ufSl7''@;'; put 'put ''cmV0dXJuIG5ldyBTNyh7Y2xhc3NOYW1lOiJoaWdobGlnaHQiLC4uLm4sc2VsZWN0aW9uVHlwZToiYXJlYSJ9KX1mdW5jdGlvbiBRa3Qoe2NvbHVtbkNsYXNzTmFtZTpuLC4uLmV9KXtyZXR1cm4gbmV3IFM3KHtjbGFzc05hbWU6biwuLi5lLHNlbGVjdGlvblR5cGU6ImNvbHVtbiJ9KX1mdW5j''@;'; put 'put ''dGlvbiBMUmUoe2hlYWRlckNsYXNzTmFtZTpuLC4uLmV9KXtyZXR1cm4gbmV3IFM3KHtjbGFzc05hbWU6biwuLi5lLHNlbGVjdGlvblR5cGU6enVlfSl9ZnVuY3Rpb24gblJ0KHtyb3dDbGFzc05hbWU6biwuLi5lfSl7cmV0dXJuIG5ldyBTNyh7Y2xhc3NOYW1lOm4sLi4uZSxzZWxlY3Rpb25U''@;'; put 'put ''eXBlOiJyb3cifSl9ZnVuY3Rpb24gRTcobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHR9dmFyIGw2PW5ldyBXZWFrU2V0O2NsYXNzIG9SdHtpc0VuYWJsZWRGb3Io''@;'; put 'put ''ZSx0KXtsZXQgcj1lO2U9PT1IWSYmKHI9ImN1cnJlbnQiKTtjb25zdCBpPXRoaXMub3B0aW9ucy5kaXNhYmxlZENlbGxTZWxlY3Rpb247aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGkpcmV0dXJuITA7bGV0IG89aSh0LnJvdyx0LmNvbCk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBvJiYobz1bb10p''@;'; put 'put ''LCFvfHxBcnJheS5pc0FycmF5KG8pJiYhby5pbmNsdWRlcyhyKX11c2VMYXllckxldmVsKGU9MCl7cmV0dXJuIHRoaXMubGF5ZXJMZXZlbD1lLHRoaXN9Z2V0Rm9jdXMoKXtyZXR1cm4gdGhpcy5mb2N1c31nZXRGaWxsKCl7cmV0dXJuIHRoaXMuZmlsbH1jcmVhdGVMYXllcmVkQXJlYSgpe3Jl''@;'; put 'put ''dHVybiBFNyh0aGlzLGw2LE03KS5jYWxsKHRoaXMsdGhpcy5sYXllcmVkQXJlYXMsS2t0KX1nZXRMYXllcmVkQXJlYXMoKXtyZXR1cm5bLi4udGhpcy5sYXllcmVkQXJlYXMudmFsdWVzKCldfWNyZWF0ZUFyZWEoKXtyZXR1cm4gRTcodGhpcyxsNixNNykuY2FsbCh0aGlzLHRoaXMuYXJlYXMs''@;'; put 'put ''WGt0KX1nZXRBcmVhcygpe3JldHVyblsuLi50aGlzLmFyZWFzLnZhbHVlcygpXX1jcmVhdGVSb3dIZWFkZXIoKXtyZXR1cm4gRTcodGhpcyxsNixNNykuY2FsbCh0aGlzLHRoaXMucm93SGVhZGVycyxMUmUpfWdldFJvd0hlYWRlcnMoKXtyZXR1cm5bLi4udGhpcy5yb3dIZWFkZXJzLnZhbHVl''@;'; put 'put ''cygpXX1jcmVhdGVDb2x1bW5IZWFkZXIoKXtyZXR1cm4gRTcodGhpcyxsNixNNykuY2FsbCh0aGlzLHRoaXMuY29sdW1uSGVhZGVycyxMUmUpfWdldENvbHVtbkhlYWRlcnMoKXtyZXR1cm5bLi4udGhpcy5jb2x1bW5IZWFkZXJzLnZhbHVlcygpXX1jcmVhdGVBY3RpdmVSb3dIZWFkZXIoKXty''@;'; put 'put ''ZXR1cm4gRTcodGhpcyxsNixNNykuY2FsbCh0aGlzLHRoaXMuYWN0aXZlUm93SGVhZGVycyxZdWUpfWdldEFjdGl2ZVJvd0hlYWRlcnMoKXtyZXR1cm5bLi4udGhpcy5hY3RpdmVSb3dIZWFkZXJzLnZhbHVlcygpXX1jcmVhdGVBY3RpdmVDb2x1bW5IZWFkZXIoKXtyZXR1cm4gRTcodGhpcyxs''@;'; put 'put ''NixNNykuY2FsbCh0aGlzLHRoaXMuYWN0aXZlQ29sdW1uSGVhZGVycyxZdWUpfWdldEFjdGl2ZUNvbHVtbkhlYWRlcnMoKXtyZXR1cm5bLi4udGhpcy5hY3RpdmVDb2x1bW5IZWFkZXJzLnZhbHVlcygpXX1jcmVhdGVBY3RpdmVDb3JuZXJIZWFkZXIoKXtyZXR1cm4gRTcodGhpcyxsNixNNyku''@;'; put 'put ''Y2FsbCh0aGlzLHRoaXMuYWN0aXZlQ29ybmVySGVhZGVycyxZdWUpfWdldEFjdGl2ZUNvcm5lckhlYWRlcnMoKXtyZXR1cm5bLi4udGhpcy5hY3RpdmVDb3JuZXJIZWFkZXJzLnZhbHVlcygpXX1jcmVhdGVSb3dIaWdobGlnaHQoKXtyZXR1cm4gRTcodGhpcyxsNixNNykuY2FsbCh0aGlzLHRo''@;'; put 'put ''aXMucm93SGlnaGxpZ2h0cyxuUnQpfWdldFJvd0hpZ2hsaWdodHMoKXtyZXR1cm5bLi4udGhpcy5yb3dIaWdobGlnaHRzLnZhbHVlcygpXX1jcmVhdGVDb2x1bW5IaWdobGlnaHQoKXtyZXR1cm4gRTcodGhpcyxsNixNNykuY2FsbCh0aGlzLHRoaXMuY29sdW1uSGlnaGxpZ2h0cyxRa3QpfWdl''@;'; put 'put ''dENvbHVtbkhpZ2hsaWdodHMoKXtyZXR1cm5bLi4udGhpcy5jb2x1bW5IaWdobGlnaHRzLnZhbHVlcygpXX1nZXRDdXN0b21TZWxlY3Rpb25zKCl7cmV0dXJuWy4uLnRoaXMuY3VzdG9tU2VsZWN0aW9ucy52YWx1ZXMoKV19YWRkQ3VzdG9tU2VsZWN0aW9uKGUpe3RoaXMuY3VzdG9tU2VsZWN0''@;'; put 'put ''aW9ucy5wdXNoKGZ1bmN0aW9uIGVSdCh7Ym9yZGVyOm4sdmlzdWFsQ2VsbFJhbmdlOmUsLi4udH0pe3JldHVybiBuZXcgUzcoey4uLm4sLi4udCxzZWxlY3Rpb25UeXBlOiJjdXN0b20tc2VsZWN0aW9uIn0sZSl9KHsuLi50aGlzLm9wdGlvbnMsLi4uZX0pKX11cGRhdGVIaWdobGlnaHRDbGFz''@;'; put 'put ''c05hbWVzKGUpeyJyb3dDbGFzc05hbWUiaW4gZSYmKHRoaXMub3B0aW9ucy5yb3dDbGFzc05hbWU9ZS5yb3dDbGFzc05hbWUsWG4odGhpcy5yb3dIaWdobGlnaHRzLnZhbHVlcygpLHQ9Pnt0LnNldHRpbmdzLmNsYXNzTmFtZT1lLnJvd0NsYXNzTmFtZX0pKSwiY29sdW1uQ2xhc3NOYW1lImlu''@;'; put 'put ''IGUmJih0aGlzLm9wdGlvbnMuY29sdW1uQ2xhc3NOYW1lPWUuY29sdW1uQ2xhc3NOYW1lLFhuKHRoaXMuY29sdW1uSGlnaGxpZ2h0cy52YWx1ZXMoKSx0PT57dC5zZXR0aW5ncy5jbGFzc05hbWU9ZS5jb2x1bW5DbGFzc05hbWV9KSksImhlYWRlckNsYXNzTmFtZSJpbiBlJiYodGhpcy5vcHRp''@;'; put 'put ''b25zLmhlYWRlckNsYXNzTmFtZT1lLmhlYWRlckNsYXNzTmFtZSxYbih0aGlzLnJvd0hlYWRlcnMudmFsdWVzKCksdD0+e3Quc2V0dGluZ3MuY2xhc3NOYW1lPWUuaGVhZGVyQ2xhc3NOYW1lfSksWG4odGhpcy5jb2x1bW5IZWFkZXJzLnZhbHVlcygpLHQ9Pnt0LnNldHRpbmdzLmNsYXNzTmFt''@;'; put 'put ''ZT1lLmhlYWRlckNsYXNzTmFtZX0pKSwiYWN0aXZlSGVhZGVyQ2xhc3NOYW1lImluIGUmJih0aGlzLm9wdGlvbnMuYWN0aXZlSGVhZGVyQ2xhc3NOYW1lPWUuYWN0aXZlSGVhZGVyQ2xhc3NOYW1lLFhuKHRoaXMuYWN0aXZlUm93SGVhZGVycy52YWx1ZXMoKSx0PT57dC5zZXR0aW5ncy5jbGFz''@;'; put 'put ''c05hbWU9ZS5hY3RpdmVIZWFkZXJDbGFzc05hbWV9KSxYbih0aGlzLmFjdGl2ZUNvbHVtbkhlYWRlcnMudmFsdWVzKCksdD0+e3Quc2V0dGluZ3MuY2xhc3NOYW1lPWUuYWN0aXZlSGVhZGVyQ2xhc3NOYW1lfSksWG4odGhpcy5hY3RpdmVDb3JuZXJIZWFkZXJzLnZhbHVlcygpLHQ9Pnt0LnNl''@;'; put 'put ''dHRpbmdzLmNsYXNzTmFtZT1lLmFjdGl2ZUhlYWRlckNsYXNzTmFtZX0pKX1jbGVhcigpe3RoaXMuZm9jdXMuY2xlYXIoKSx0aGlzLmZpbGwuY2xlYXIoKSx0aGlzLmFyZWFzLmZvckVhY2goZT0+ZS5jbGVhcigpKSx0aGlzLmxheWVyZWRBcmVhcy5mb3JFYWNoKGU9PmUuY2xlYXIoKSksdGhp''@;'; put 'put ''cy5yb3dIZWFkZXJzLmZvckVhY2goZT0+ZS5jbGVhcigpKSx0aGlzLmNvbHVtbkhlYWRlcnMuZm9yRWFjaChlPT5lLmNsZWFyKCkpLHRoaXMuYWN0aXZlUm93SGVhZGVycy5mb3JFYWNoKGU9PmUuY2xlYXIoKSksdGhpcy5hY3RpdmVDb2x1bW5IZWFkZXJzLmZvckVhY2goZT0+ZS5jbGVhcigp''@;'; put 'put ''KSx0aGlzLmFjdGl2ZUNvcm5lckhlYWRlcnMuZm9yRWFjaChlPT5lLmNsZWFyKCkpLHRoaXMucm93SGlnaGxpZ2h0cy5mb3JFYWNoKGU9PmUuY2xlYXIoKSksdGhpcy5jb2x1bW5IaWdobGlnaHRzLmZvckVhY2goZT0+ZS5jbGVhcigpKX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVyblt0aGlz''@;'; put 'put ''LmZvY3VzLHRoaXMuZmlsbCwuLi50aGlzLmFyZWFzLnZhbHVlcygpLC4uLnRoaXMubGF5ZXJlZEFyZWFzLnZhbHVlcygpLC4uLnRoaXMucm93SGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLmNvbHVtbkhlYWRlcnMudmFsdWVzKCksLi4udGhpcy5hY3RpdmVSb3dIZWFkZXJzLnZhbHVlcygpLC4u''@;'; put 'put ''LnRoaXMuYWN0aXZlQ29sdW1uSGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLmFjdGl2ZUNvcm5lckhlYWRlcnMudmFsdWVzKCksLi4udGhpcy5yb3dIaWdobGlnaHRzLnZhbHVlcygpLC4uLnRoaXMuY29sdW1uSGlnaGxpZ2h0cy52YWx1ZXMoKSwuLi50aGlzLmN1c3RvbVNlbGVjdGlvbnNdW1N5''@;'; put 'put ''bWJvbC5pdGVyYXRvcl0oKX1jb25zdHJ1Y3RvcihlKXsoZnVuY3Rpb24gaVJ0KG4sZSl7KGZ1bmN0aW9uIHJSdChuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0''@;'; put 'put ''Iil9KShuLGUpLGUuYWRkKG4pfSkodGhpcyxsNiksdGhpcy5sYXllckxldmVsPTAsdGhpcy5sYXllcmVkQXJlYXM9bmV3IE1hcCx0aGlzLmFyZWFzPW5ldyBNYXAsdGhpcy5yb3dIZWFkZXJzPW5ldyBNYXAsdGhpcy5jb2x1bW5IZWFkZXJzPW5ldyBNYXAsdGhpcy5hY3RpdmVSb3dIZWFkZXJz''@;'; put 'put ''PW5ldyBNYXAsdGhpcy5hY3RpdmVDb2x1bW5IZWFkZXJzPW5ldyBNYXAsdGhpcy5hY3RpdmVDb3JuZXJIZWFkZXJzPW5ldyBNYXAsdGhpcy5yb3dIaWdobGlnaHRzPW5ldyBNYXAsdGhpcy5jb2x1bW5IaWdobGlnaHRzPW5ldyBNYXAsdGhpcy5jdXN0b21TZWxlY3Rpb25zPVtdLHRoaXMub3B0''@;'; put 'put ''aW9ucz1lLHRoaXMuZm9jdXM9ZnVuY3Rpb24gSmt0KHtjZWxsQ29ybmVyVmlzaWJsZTpuLC4uLmV9KXtyZXR1cm4gbmV3IFM3KHtjbGFzc05hbWU6ImN1cnJlbnQiLGhlYWRlckF0dHJpYnV0ZXM6W1siYXJpYS1zZWxlY3RlZCIsInRydWUiXV0sYm9yZGVyOnt3aWR0aDoyLGNvbG9yOiIjNGI4''@;'; put 'put ''OWZmIixjb3JuZXJWaXNpYmxlOm59LC4uLmUsc2VsZWN0aW9uVHlwZTpIWX0pfShlKSx0aGlzLmZpbGw9ZnVuY3Rpb24gdFJ0KHsuLi5ufSl7cmV0dXJuIG5ldyBTNyh7Y2xhc3NOYW1lOiJmaWxsIixib3JkZXI6e3dpZHRoOjEsY29sb3I6IiNmZjAwMDAifSwuLi5uLHNlbGVjdGlvblR5cGU6''@;'; put 'put ''ImZpbGwifSl9KGUpfX1mdW5jdGlvbiBNNyhuLGUpe2NvbnN0IHQ9dGhpcy5sYXllckxldmVsO2lmKG4uaGFzKHQpKXJldHVybiBuLmdldCh0KTtjb25zdCByPWUoe2xheWVyTGV2ZWw6dCwuLi50aGlzLm9wdGlvbnN9KTtyZXR1cm4gbi5zZXQodCxyKSxyfWNvbnN0IGFSdD1vUnQ7Y2xhc3Mg''@;'; put 'put ''WnVle2lzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuc2l6ZSgpfXNldChlKXtyZXR1cm4gdGhpcy5jbGVhcigpLHRoaXMucmFuZ2VzLnB1c2godGhpcy5jcmVhdGVDZWxsUmFuZ2UoZSkpLHRoaXN9YWRkKGUpe3JldHVybiB0aGlzLnJhbmdlcy5wdXNoKHRoaXMuY3JlYXRlQ2VsbFJhbmdlKGUp''@;'; put 'put ''KSx0aGlzfXB1c2goZSl7cmV0dXJuIHRoaXMucmFuZ2VzLnB1c2goZSksdGhpc31wb3AoKXtyZXR1cm4gdGhpcy5yYW5nZXMucG9wKCl9Y3VycmVudCgpe3JldHVybiB0aGlzLnBlZWtCeUluZGV4KHRoaXMuc2l6ZSgpLTEpfXByZXZpb3VzKCl7cmV0dXJuIHRoaXMucGVla0J5SW5kZXgodGhp''@;'; put 'put ''cy5zaXplKCktMil9aW5jbHVkZXMoZSx0PSgpPT4hMCl7cmV0dXJuIHRoaXMucmFuZ2VzLnNvbWUoKHIsaSk9PnIuaW5jbHVkZXMoZSkmJnQocixpKSl9ZmluZEFsbChlKXtjb25zdCB0PVtdO3JldHVybiB0aGlzLnJhbmdlcy5mb3JFYWNoKChyLGkpPT57ci5pc0VxdWFsKGUpJiZ0LnB1c2go''@;'; put 'put ''e3JhbmdlOnIsbGF5ZXI6aX0pfSksdH1yZW1vdmUoZSl7cmV0dXJuIHRoaXMucmFuZ2VzPXRoaXMucmFuZ2VzLmZpbHRlcih0PT4hZS5zb21lKHI9PnIuaXNFcXVhbCh0KSkpLHRoaXN9cmVtb3ZlTGF5ZXJzKGUpe3JldHVybiB0aGlzLnJhbmdlcz10aGlzLnJhbmdlcy5maWx0ZXIoKHQscik9''@;'; put 'put ''PiFlLmluY2x1ZGVzKHIpKSx0aGlzfWNsZWFyKCl7cmV0dXJuIHRoaXMucmFuZ2VzLmxlbmd0aD0wLHRoaXN9c2l6ZSgpe3JldHVybiB0aGlzLnJhbmdlcy5sZW5ndGh9Y2xvbmUoKXtjb25zdCBlPW5ldyBadWUodGhpcy5jcmVhdGVDZWxsUmFuZ2UpO3JldHVybiBlLnJhbmdlcz10aGlzLnJh''@;'; put 'put ''bmdlcy5tYXAodD0+dC5jbG9uZSgpKSxlfW1hcChlKXtyZXR1cm4gdGhpcy5yYW5nZXM9dGhpcy5yYW5nZXMubWFwKCh0LHIpPT5lKHQscikpLHRoaXN9cGVla0J5SW5kZXgoZT0wKXtsZXQgdDtyZXR1cm4gZT49MCYmZTx0aGlzLnNpemUoKSYmKHQ9dGhpcy5yYW5nZXNbZV0pLHR9W1N5bWJv''@;'; put 'put ''bC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5yYW5nZXNbU3ltYm9sLml0ZXJhdG9yXSgpfWNvbnN0cnVjdG9yKGUpe3RoaXMucmFuZ2VzPVtdLHRoaXMuY3JlYXRlQ2VsbFJhbmdlPWV9fWNvbnN0IHNSdD1adWU7ZnVuY3Rpb24gT1JlKG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBOUmUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVsZCBvbiBub24t''@;'; put 'put ''aW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQobil9ZnVuY3Rpb24gYjEobixlKXtyZXR1cm4gZnVuY3Rpb24gbFJ0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obixOUmUobixlLCJnZXQiKSl9ZnVuY3Rpb24gR3VlKG4sZSx0KXtPUmUobixlKSxlLnNldChuLHQpfWZ1''@;'; put 'put ''bmN0aW9uIGlfKG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gY1J0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0o''@;'; put 'put ''bixOUmUobixlLCJzZXQiKSx0KSx0fWZ1bmN0aW9uIGR1KG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiB0fWZ1bmN0aW9uIFQ3KG4sZSl7T1JlKG4sZSksZS5hZGQo''@;'; put 'put ''bil9dmFyIHg3PW5ldyBXZWFrTWFwLG9fPW5ldyBXZWFrTWFwLEIzPW5ldyBXZWFrTWFwLCR1ZT1uZXcgV2Vha1NldCxxdWU9bmV3IFdlYWtTZXQsS3VlPW5ldyBXZWFrU2V0LFZZPW5ldyBXZWFrU2V0LEtMPW5ldyBXZWFrU2V0LFhMPW5ldyBXZWFrU2V0LFFMPW5ldyBXZWFrU2V0LFh1ZT1u''@;'; put 'put ''ZXcgV2Vha1NldCx4dz1uZXcgV2Vha1NldDtjbGFzcyBRdWV7c2V0QWN0aXZlTGF5ZXJJbmRleChlKXtpXyh0aGlzLG9fLGUpfWdldEN1cnJlbnRTZWxlY3Rpb24oKXtyZXR1cm4gYjEodGhpcyx4NykucGVla0J5SW5kZXgoYjEodGhpcyxvXykpfXRyYW5zZm9ybVN0YXJ0KGUsdCxyPSExKXtp''@;'; put 'put ''Xyh0aGlzLEIzLHRoaXMuY2FsY3VsYXRlT2Zmc2V0KCkpO2NvbnN0IGk9dGhpcy50YWJsZUFwaS5jcmVhdGVDZWxsQ29vcmRzKGUsdCk7bGV0IG89dGhpcy5nZXRDdXJyZW50U2VsZWN0aW9uKCkuaGlnaGxpZ2h0O2NvbnN0IGE9dGhpcy50YWJsZUFwaS52aXN1YWxUb1JlbmRlcmFibGVDb29y''@;'; put 'put ''ZHMobyk7bGV0IGw9MCx1PTA7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVUcmFuc2Zvcm1TdGFydCIsaSksbnVsbCE9PWEucm93JiZudWxsIT09YS5jb2wpe2xldHt3aWR0aDpnLGhlaWdodDpFfT1kdSh0aGlzLFZZLEp1ZSkuY2FsbCh0aGlzKTtjb25zdHtyb3c6Tyxjb2w6Wn09ZHUo''@;'; put 'put ''dGhpcyxYdWUsVlJlKS5jYWxsKHRoaXMsbyksZWU9dGhpcy50YWJsZUFwaS5maXhlZFJvd3NCb3R0b20oKSx2ZT10aGlzLnRhYmxlQXBpLm1pblNwYXJlUm93cygpLE1lPXRoaXMudGFibGVBcGkubWluU3BhcmVDb2xzKCksSGU9dGhpcy50YWJsZUFwaS5hdXRvV3JhcFJvdygpLFdlPXRoaXMu''@;'; put 'put ''dGFibGVBcGkuYXV0b1dyYXBDb2woKSxhdD10aGlzLnRhYmxlQXBpLmNyZWF0ZUNlbGxDb29yZHMoKE8/PzApKyhpLnJvdz8/MCksKFo/PzApKyhpLmNvbD8/MCkpO2lmKChhdC5yb3c/PzApPj1FKXtjb25zdCBLdD1WZihyJiZ2ZT4wJiYwPT09ZWUpLHF0PShhdC5jb2w/PzApKzEsZ249cXQ+''@;'; put 'put ''PWcsVG49dGhpcy50YWJsZUFwaS5jcmVhdGVDZWxsQ29vcmRzKChhdC5yb3c/PzApLUUsZ24/cXQtZzpxdCk7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVDb2x1bW5XcmFwIixLdCxkdSh0aGlzLHh3LGxUKS5jYWxsKHRoaXMsVG4pLGduKSxLdC52YWx1ZSl0aGlzLnJ1bkxvY2FsSG9v''@;'; put 'put ''a3MoImluc2VydFJvd1JlcXVpcmUiLHRoaXMuY291bnRSZW5kZXJhYmxlUm93cygpKTtlbHNlIGlmKFdlKXtpZih0aGlzLnNob3VsZFN3aXRjaFNlbGVjdGlvbkxheWVyKCkmJmduJiZiMSh0aGlzLHg3KS5zaXplKCk+MSl7ZHUodGhpcywkdWUsRlJlKS5jYWxsKHRoaXMpO2NvbnN0IENuPWR1''@;'; put 'put ''KHRoaXMsS0wsQlkpLmNhbGwodGhpcywiZm9yd2FyZCIpO251bGwhPT1DbiYmVG4uYXNzaWduKENuKX1hdC5hc3NpZ24oVG4pfX1lbHNlIGlmKChhdC5yb3c/PzApPDApe2NvbnN0IEt0PVZmKFdlKSxxdD0oYXQuY29sPz8wKS0xLGduPXF0PDAsVG49dGhpcy50YWJsZUFwaS5jcmVhdGVDZWxs''@;'; put 'put ''Q29vcmRzKEUrKGF0LnJvdz8/MCksZ24/ZytxdDpxdCk7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVDb2x1bW5XcmFwIixLdCxkdSh0aGlzLHh3LGxUKS5jYWxsKHRoaXMsVG4pLGduKSxXZSl7aWYodGhpcy5zaG91bGRTd2l0Y2hTZWxlY3Rpb25MYXllcigpJiZnbiYmYjEodGhpcyx4''@;'; put 'put ''Nykuc2l6ZSgpPjEpe2R1KHRoaXMscXVlLFBSZSkuY2FsbCh0aGlzKTtjb25zdCBDbj1kdSh0aGlzLEtMLEJZKS5jYWxsKHRoaXMsImJhY2t3YXJkIik7bnVsbCE9PUNuJiZUbi5hc3NpZ24oQ24pfWF0LmFzc2lnbihUbil9fWlmKCh7d2lkdGg6ZyxoZWlnaHQ6RX09ZHUodGhpcyxWWSxKdWUp''@;'; put 'put ''LmNhbGwodGhpcykpLChhdC5jb2w/PzApPj1nKXtjb25zdCBLdD1WZihyJiZNZT4wKSxxdD0oYXQucm93Pz8wKSsxLGduPXF0Pj1FLFRuPXRoaXMudGFibGVBcGkuY3JlYXRlQ2VsbENvb3Jkcyhnbj9xdC1FOnF0LChhdC5jb2w/PzApLWcpO2lmKHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3Jl''@;'; put 'put ''Um93V3JhcCIsS3QsZHUodGhpcyx4dyxsVCkuY2FsbCh0aGlzLFRuKSxnbiksS3QudmFsdWUpdGhpcy5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRDb2xSZXF1aXJlIix0aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSk7ZWxzZSBpZihIZSl7aWYodGhpcy5zaG91bGRTd2l0Y2hTZWxlY3Rpb25M''@;'; put 'put ''YXllcigpJiZnbiYmYjEodGhpcyx4Nykuc2l6ZSgpPjEpe2R1KHRoaXMsJHVlLEZSZSkuY2FsbCh0aGlzKTtjb25zdCBDbj1kdSh0aGlzLEtMLEJZKS5jYWxsKHRoaXMsImZvcndhcmQiKTtudWxsIT09Q24mJlRuLmFzc2lnbihDbil9YXQuYXNzaWduKFRuKX19ZWxzZSBpZigoYXQuY29sPz8w''@;'; put 'put ''KTwwKXtjb25zdCBLdD1WZihIZSkscXQ9KGF0LnJvdz8/MCktMSxnbj1xdDwwLFRuPXRoaXMudGFibGVBcGkuY3JlYXRlQ2VsbENvb3Jkcyhnbj9FK3F0OnF0LGcrKGF0LmNvbD8/MCkpO2lmKHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlUm93V3JhcCIsS3QsZHUodGhpcyx4dyxsVCkuY2Fs''@;'; put 'put ''bCh0aGlzLFRuKSxnbiksSGUpe2lmKHRoaXMuc2hvdWxkU3dpdGNoU2VsZWN0aW9uTGF5ZXIoKSYmZ24mJmIxKHRoaXMseDcpLnNpemUoKT4xKXtkdSh0aGlzLHF1ZSxQUmUpLmNhbGwodGhpcyk7Y29uc3QgQ249ZHUodGhpcyxLTCxCWSkuY2FsbCh0aGlzLCJiYWNrd2FyZCIpO251bGwhPT1D''@;'; put 'put ''biYmVG4uYXNzaWduKENuKX1hdC5hc3NpZ24oVG4pfX1jb25zdHtyb3dEaXI6Q3QsY29sRGlyOkF0fT1kdSh0aGlzLEt1ZSxIUmUpLmNhbGwodGhpcyxhdCk7bD1DdCx1PUF0LG89ZHUodGhpcyx4dyxsVCkuY2FsbCh0aGlzLGF0KX1yZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclRy''@;'; put 'put ''YW5zZm9ybVN0YXJ0IixvLGwsdSkse3NlbGVjdGlvbkxheWVyOmIxKHRoaXMsb18pLHZpc3VhbENvb3JkczpvfX10cmFuc2Zvcm1FbmQoZSx0KXtpXyh0aGlzLEIzLHRoaXMuY2FsY3VsYXRlT2Zmc2V0KCkpO2NvbnN0IHI9dGhpcy50YWJsZUFwaS5jcmVhdGVDZWxsQ29vcmRzKGUsdCksaT10''@;'; put 'put ''aGlzLmdldEN1cnJlbnRTZWxlY3Rpb24oKSxvPXRoaXMudGFibGVBcGkudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGkuaGlnaGxpZ2h0KSxhPWR1KHRoaXMsWEwsalkpLmNhbGwodGhpcyxpLnRvLnJvdz8/MCxpLmZyb20ucm93Pz8wKSxsPWR1KHRoaXMsUUwsVVkpLmNhbGwodGhpcyxpLnRv''@;'; put 'put ''LmNvbD8/MCxpLmZyb20uY29sPz8wKSx1PWkudG8uY2xvbmUoKTtsZXQgZz0wLEU9MDtpZih0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVRyYW5zZm9ybUVuZCIsciksbnVsbCE9PW8ucm93JiZudWxsIT09by5jb2wmJm51bGwhPT1hJiZudWxsIT09bCl7Y29uc3R7cm93Ok8sY29sOlp9PWR1''@;'; put 'put ''KHRoaXMsWHVlLFZSZSkuY2FsbCh0aGlzLGkuaGlnaGxpZ2h0KSxlZT10aGlzLnRhYmxlQXBpLmNyZWF0ZUNlbGxDb29yZHMoYSsoci5yb3c/PzApLGwrKHIuY29sPz8wKSksdmU9aS5nZXRUb3BTdGFydENvcm5lcigpLE1lPWkuZ2V0VG9wRW5kQ29ybmVyKCksSGU9aS5nZXRCb3R0b21FbmRD''@;'; put 'put ''b3JuZXIoKTtpZigoci5jb2w/PzApPDAmJmw+PShaPz8wKSYmKGVlLmNvbD8/MCk8KFo/PzApKXtjb25zdCBBdD0oZWUuY29sPz8wKS0oWj8/MCksS3Q9ZHUodGhpcyxRTCxVWSkuY2FsbCh0aGlzLHZlLmNvbD8/MCxNZS5jb2w/PzApO2VlLmNvbD0oS3Q/PzApK0F0fWVsc2UgaWYoKHIuY29s''@;'; put 'put ''Pz8wKT4wJiZsPD0oWj8/MCkmJihlZS5jb2w/PzApPihaPz8wKSl7Y29uc3QgQXQ9ZHUodGhpcyxRTCxVWSkuY2FsbCh0aGlzLE1lLmNvbD8/MCx2ZS5jb2w/PzApLEt0PU1hdGgubWF4KChlZS5jb2w/PzApLShBdD8/MCksMSk7ZWUuY29sPShBdD8/MCkrS3R9aWYoKHIucm93Pz8wKTwwJiZh''@;'; put 'put ''Pj0oTz8/MCkmJihlZS5yb3c/PzApPChPPz8wKSl7Y29uc3QgQXQ9KGVlLnJvdz8/MCktKE8/PzApLEt0PWR1KHRoaXMsWEwsalkpLmNhbGwodGhpcyx2ZS5yb3c/PzAsSGUucm93Pz8wKTtlZS5yb3c9KEt0Pz8wKStBdH1lbHNlIGlmKChyLnJvdz8/MCk+MCYmYTw9KE8/PzApJiYoZWUucm93''@;'; put 'put ''Pz8wKT4oTz8/MCkpe2NvbnN0IEF0PWR1KHRoaXMsWEwsalkpLmNhbGwodGhpcyxIZS5yb3c/PzAsdmUucm93Pz8wKSxLdD1NYXRoLm1heCgoZWUucm93Pz8wKS0oQXQ/PzApLDEpO2VlLnJvdz0oQXQ/PzApK0t0fWNvbnN0e3Jvd0RpcjpXZSxjb2xEaXI6YXR9PWR1KHRoaXMsS3VlLEhSZSku''@;'; put 'put ''Y2FsbCh0aGlzLGVlKTtnPVdlLEU9YXQ7Y29uc3QgQ3Q9ZHUodGhpcyx4dyxsVCkuY2FsbCh0aGlzLGVlKTswPT09ci5yb3cmJjAhPT1yLmNvbD91LmNvbD1DdC5jb2w6MCE9PXIucm93JiYwPT09ci5jb2w/dS5yb3c9Q3Qucm93Oih1LnJvdz1DdC5yb3csdS5jb2w9Q3QuY29sKX1yZXR1cm4g''@;'; put 'put ''dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclRyYW5zZm9ybUVuZCIsdSxnLEUpLHtzZWxlY3Rpb25MYXllcjpiMSh0aGlzLG9fKSx2aXN1YWxDb29yZHM6dX19Y2FsY3VsYXRlT2Zmc2V0KCl7SnIoImBjYWxjdWxhdGVPZmZzZXRgIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWNvdW50UmVuZGVyYWJs''@;'; put 'put ''ZVJvd3MoKXtKcigiYGNvdW50UmVuZGVyYWJsZVJvd3NgIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKXtKcigiYGNvdW50UmVuZGVyYWJsZUNvbHVtbnNgIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXNob3VsZFN3aXRjaFNlbGVjdGlvbkxheWVyKCl7SnIoImBz''@;'; put 'put ''aG91bGRTd2l0Y2hTZWxlY3Rpb25MYXllcmAgaXMgbm90IGltcGxlbWVudGVkIil9Y29uc3RydWN0b3IoZSx0KXtUNyh0aGlzLCR1ZSksVDcodGhpcyxxdWUpLFQ3KHRoaXMsS3VlKSxUNyh0aGlzLFZZKSxUNyh0aGlzLEtMKSxUNyh0aGlzLFhMKSxUNyh0aGlzLFFMKSxUNyh0aGlzLFh1ZSks''@;'; put 'put ''VDcodGhpcyx4dyksR3VlKHRoaXMseDcse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEd1ZSh0aGlzLG9fLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxHdWUodGhpcyxCMyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksaV8odGhpcyxvXywwKSxpXyh0aGlzLEIzLHt4OjAseTow''@;'; put 'put ''fSksaV8odGhpcyx4NyxlKSx0aGlzLnRhYmxlQXBpPXR9fWZ1bmN0aW9uIEZSZSgpe2NvbnN0IG49YjEodGhpcyxvXykrMTt0aGlzLnNldEFjdGl2ZUxheWVySW5kZXgobj49YjEodGhpcyx4Nykuc2l6ZSgpPzA6biksaV8odGhpcyxCMyx0aGlzLmNhbGN1bGF0ZU9mZnNldCgpKX1mdW5jdGlv''@;'; put 'put ''biBQUmUoKXtjb25zdCBuPWIxKHRoaXMsb18pLTE7dGhpcy5zZXRBY3RpdmVMYXllckluZGV4KG48MD9iMSh0aGlzLHg3KS5zaXplKCktMTpuKSxpXyh0aGlzLEIzLHRoaXMuY2FsY3VsYXRlT2Zmc2V0KCkpfWZ1bmN0aW9uIEhSZShuKXtjb25zdHt3aWR0aDplLGhlaWdodDp0fT1kdSh0aGlz''@;'; put 'put ''LFZZLEp1ZSkuY2FsbCh0aGlzKTtsZXQgcj0wLGk9MDtyZXR1cm4obi5yb3c/PzApPDA/KHI9LTEsbi5yb3c9MCk6KG4ucm93Pz8wKT4wJiYobi5yb3c/PzApPj10JiYocj0xLG4ucm93PXQtMSksKG4uY29sPz8wKTwwPyhpPS0xLG4uY29sPTApOihuLmNvbD8/MCk+MCYmKG4uY29sPz8wKT49''@;'; put 'put ''ZSYmKGk9MSxuLmNvbD1lLTEpLHtyb3dEaXI6cixjb2xEaXI6aX19ZnVuY3Rpb24gSnVlKCl7cmV0dXJue3dpZHRoOmIxKHRoaXMsQjMpLngrdGhpcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksaGVpZ2h0OmIxKHRoaXMsQjMpLnkrdGhpcy5jb3VudFJlbmRlcmFibGVSb3dzKCl9fWZ1bmN0''@;'; put 'put ''aW9uIEJZKG4pe2lmKCFbImZvcndhcmQiLCJiYWNrd2FyZCJdLmluY2x1ZGVzKG4pKXJldHVybiBudWxsO2NvbnN0IGU9dGhpcy5nZXRDdXJyZW50U2VsZWN0aW9uKCkuZ2V0VG9wU3RhcnRDb3JuZXIoKSx0PXRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvbigpLmdldEJvdHRvbUVuZENvcm5lcigp''@;'; put 'put ''LFtyLGksbyxhXT0iZm9yd2FyZCI9PT1uP1tlLnJvdyx0LnJvdyxlLmNvbCx0LmNvbF06W3Qucm93LGUucm93LHQuY29sLGUuY29sXSxsPWR1KHRoaXMsWEwsalkpLmNhbGwodGhpcyxyPz8wLGk/PzApLHU9ZHUodGhpcyxRTCxVWSkuY2FsbCh0aGlzLG8/PzAsYT8/MCk7cmV0dXJuIG51bGw9''@;'; put 'put ''PT1sfHxudWxsPT09dT9udWxsOnRoaXMudGFibGVBcGkuY3JlYXRlQ2VsbENvb3JkcyhsLHUpfWZ1bmN0aW9uIGpZKG4sZSl7Y29uc3QgdD10aGlzLnRhYmxlQXBpLmZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3cobixlKTtyZXR1cm4gbnVsbD09PXQ/bnVsbDpiMSh0aGlzLEIzKS55''@;'; put 'put ''K3R9ZnVuY3Rpb24gVVkobixlKXtjb25zdCB0PXRoaXMudGFibGVBcGkuZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbihuLGUpO3JldHVybiBudWxsPT09dD9udWxsOmIxKHRoaXMsQjMpLngrdH1mdW5jdGlvbiBWUmUobil7Y29uc3R7cm93OmUsY29sOnR9PXRoaXMudGFibGVB''@;'; put 'put ''cGkudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKG4pO3JldHVybihudWxsPT09ZXx8bnVsbD09PXQpJiZKcigiUmVuZGVyYWJsZSBjb29yZHMgYXJlIG5vdCB2aXNpYmxlLiIpLHRoaXMudGFibGVBcGkuY3JlYXRlQ2VsbENvb3JkcyhiMSh0aGlzLEIzKS55K2UsYjEodGhpcyxCMykueCt0KX1m''@;'; put 'put ''dW5jdGlvbiBsVChuKXtjb25zdCBlPW4uY2xvbmUoKTtyZXR1cm4gZS5jb2w9KG4uY29sPz8wKS1iMSh0aGlzLEIzKS54LGUucm93PShuLnJvdz8/MCktYjEodGhpcyxCMykueSx0aGlzLnRhYmxlQXBpLnJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhlKX1ZbChRdWUsX2gpO2NsYXNzIHVSdCBl''@;'; put 'put ''eHRlbmRzIFF1ZXtjYWxjdWxhdGVPZmZzZXQoKXtyZXR1cm57eDp0aGlzLnRhYmxlQXBpLm5hdmlnYWJsZUhlYWRlcnMoKT90aGlzLnRhYmxlQXBpLmNvdW50Um93SGVhZGVycygpOjAseTp0aGlzLnRhYmxlQXBpLm5hdmlnYWJsZUhlYWRlcnMoKT90aGlzLnRhYmxlQXBpLmNvdW50Q29sSGVh''@;'; put 'put ''ZGVycygpOjB9fWNvdW50UmVuZGVyYWJsZVJvd3MoKXtyZXR1cm4gdGhpcy50YWJsZUFwaS5jb3VudFJlbmRlcmFibGVSb3dzKCl9Y291bnRSZW5kZXJhYmxlQ29sdW1ucygpe3JldHVybiB0aGlzLnRhYmxlQXBpLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKX1zaG91bGRTd2l0Y2hTZWxlY3Rp''@;'; put 'put ''b25MYXllcigpe3JldHVybiExfX1jbGFzcyBkUnQgZXh0ZW5kcyBRdWV7Y2FsY3VsYXRlT2Zmc2V0KCl7Y29uc3QgZT10aGlzLmdldEN1cnJlbnRTZWxlY3Rpb24oKSx7cm93OnQsY29sOnJ9PWUuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGk9dD8/MCxvPXI/PzAsYT10aGlzLnRhYmxlQXBp''@;'; put 'put ''LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsby0xKSxsPXRoaXMudGFibGVBcGkuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoMCxpLTEpLHU9ZS5oaWdobGlnaHQuaXNIZWFkZXIoKSxnPXU/TWF0aC5hYnMobyk6MCxFPXU/TWF0aC5hYnMoaSk6MDtyZXR1cm57eDpvPDA/Zzot''@;'; put 'put ''YSx5Omk8MD9FOi1sfX1jb3VudFJlbmRlcmFibGVSb3dzKCl7Y29uc3QgZT10aGlzLmdldEN1cnJlbnRTZWxlY3Rpb24oKTtyZXR1cm4gdGhpcy50YWJsZUFwaS5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZSgwLGUuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKS5yb3c/PzApfWNvdW50UmVu''@;'; put 'put ''ZGVyYWJsZUNvbHVtbnMoKXtjb25zdCBlPXRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvbigpO3JldHVybiB0aGlzLnRhYmxlQXBpLmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsZS5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLmNvbD8/MCl9dHJhbnNmb3JtRW5kKGUsdCl7SnIoImB0''@;'; put 'put ''cmFuc2Zvcm1FbmRgIGlzIG5vdCB2YWxpZCBmb3IgZm9jdXMgc2VsZWN0aW9uIHVzZSBgdHJhbnNmb3JtU3RhcnRgIGluc3RlYWQiKX1zaG91bGRTd2l0Y2hTZWxlY3Rpb25MYXllcigpe3JldHVybiEwfX1jb25zdCBoUnQ9WzMsMl0sZlJ0PVtbIm51bWJlciJdLFsibnVtYmVyIiwic3RyaW5n''@;'; put 'put ''Il0sWyJudW1iZXIiLCJ1bmRlZmluZWQiXSxbIm51bWJlciIsInN0cmluZyIsInVuZGVmaW5lZCJdXSx0ZGU9U3ltYm9sKCJyb290IiksalJlPVN5bWJvbCgiY2hpbGQiKTtmdW5jdGlvbiBjVChuLGU9dGRlKXtlIT09dGRlJiZlIT09alJlJiZKcigiVGhlIHNlY29uZCBhcmd1bWVudCBpcyB1''@;'; put 'put ''c2VkIGludGVybmFsbHkgb25seSBhbmQgY2Fubm90IGJlIG92ZXJ3cml0dGVuLiIpO2NvbnN0IHQ9QXJyYXkuaXNBcnJheShuKSxyPWU9PT10ZGU7bGV0IGk9MDtpZih0KXtjb25zdCBvPW5bMF07MD09PW4ubGVuZ3RoP2k9MTpyJiZvIGluc3RhbmNlb2Ygblk/aT0zOnImJkFycmF5LmlzQXJy''@;'; put 'put ''YXkobyk/aT1jVChvLGpSZSk6bi5sZW5ndGg+PTImJm4ubGVuZ3RoPD00JiYhbi5zb21lKChsLHUpPT4hZlJ0W3VdLmluY2x1ZGVzKHR5cGVvZiBsKSkmJihpPTIpfXJldHVybiBpfWZ1bmN0aW9uIEpMKG4se2NyZWF0ZUNlbGxDb29yZHM6ZSxjcmVhdGVDZWxsUmFuZ2U6dCxrZWVwRGlyZWN0''@;'; put 'put ''aW9uOnI9ITEscHJvcFRvQ29sOml9PXt9KXtyZXR1cm4gaFJ0LmluY2x1ZGVzKG4pfHxKcigiVW5zdXBwb3J0ZWQgc2VsZWN0aW9uIHJhbmdlcyBzY2hlbWEgdHlwZSB3YXMgcHJvdmlkZWQuIiksZnVuY3Rpb24obyl7Y29uc3QgYT0zPT09bjtsZXQgdT1hP28uZnJvbS5yb3c6b1swXSxnPWE/''@;'; put 'put ''by5mcm9tLmNvbDpvWzFdLEU9YT9vLnRvLnJvdzpvWzJdLE89YT9vLnRvLmNvbDpvWzNdOyJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoInN0cmluZyI9PXR5cGVvZiBnJiYoZz1pKGcpKSwic3RyaW5nIj09dHlwZW9mIE8mJihPPWkoTykpKSxYdShFKSYmKEU9dSksWHUoTykmJihPPWcpO2xldCBa''@;'; put 'put ''PWcsZWU9TztpZighcil7Y29uc3QgV2U9dSxhdD1FLEN0PVosQXQ9ZWU7dT1NYXRoLm1pbihXZT8/MCxhdD8/MCksWj1NYXRoLm1pbihDdD8/MCxBdD8/MCksRT1NYXRoLm1heChXZT8/MCxhdD8/MCksZWU9TWF0aC5tYXgoQ3Q/PzAsQXQ/PzApfWNvbnN0IHZlPWE/by5oaWdobGlnaHQuY2xv''@;'; put 'put ''bmUoKTplKHU/PzAsWj8/MCksTWU9ZSh1Pz8wLFo/PzApLEhlPWUoRT8/MCxlZT8/MCk7cmV0dXJuIHQodmUsTWUsSGUpfX1mdW5jdGlvbiBVUmUobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRz''@;'; put 'put ''IHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHpSZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBEZChuLGUpe3JldHVy''@;'; put 'put ''biBmdW5jdGlvbiBtUnQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLHpSZShuLGUsImdldCIpKX1mdW5jdGlvbiBBdyhuLGUsdCl7VVJlKG4sZSksZS5zZXQobix0KX1mdW5jdGlvbiBTMChuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIHZSdChuLGUsdCl7aWYoZS5z''@;'; put 'put ''ZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4selJlKG4sZSwic2V0IiksdCksdH1mdW5jdGlvbiBuZGUobil7cmV0dXJuIm9iamVj''@;'; put 'put ''dCI9PXR5cGVvZiBuJiZudWxsIT09biYmTnVtYmVyLmlzSW50ZWdlcihuLnJvdykmJk51bWJlci5pc0ludGVnZXIobi5jb2wpfWZ1bmN0aW9uIFdSZShuLGUsdCl7aWYoIXR8fGU8MClyZXR1cm4gZTtjb25zdCByPW4uZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGUsMSwhMCk7cmV0dXJuIG51''@;'; put 'put ''bGw9PT1yP2U6cn12YXIgWnA9bmV3IFdlYWtNYXAsdVQ9bmV3IFdlYWtNYXAsZU89bmV3IFdlYWtNYXAsQTc9bmV3IFdlYWtNYXAsdE89bmV3IFdlYWtNYXAsZFQ9bmV3IFdlYWtNYXAsbk89bmV3IFdlYWtNYXAsWVJlPW5ldyBXZWFrU2V0O2NsYXNzIFpSZXt1cGRhdGVIaWdobGlnaHRDbGFz''@;'; put 'put ''c05hbWVzKCl7dGhpcy5oaWdobGlnaHQudXBkYXRlSGlnaGxpZ2h0Q2xhc3NOYW1lcyh7cm93Q2xhc3NOYW1lOnRoaXMuc2V0dGluZ3MuY3VycmVudFJvd0NsYXNzTmFtZSxjb2x1bW5DbGFzc05hbWU6dGhpcy5zZXR0aW5ncy5jdXJyZW50Q29sQ2xhc3NOYW1lLGhlYWRlckNsYXNzTmFtZTp0''@;'; put 'put ''aGlzLnNldHRpbmdzLmN1cnJlbnRIZWFkZXJDbGFzc05hbWUsYWN0aXZlSGVhZGVyQ2xhc3NOYW1lOnRoaXMuc2V0dGluZ3MuYWN0aXZlSGVhZGVyQ2xhc3NOYW1lfSl9Z2V0U2VsZWN0ZWRSYW5nZSgpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2V9Z2V0QWN0aXZlU2VsZWN0ZWRSYW5nZSgp''@;'; put 'put ''e3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2UucGVla0J5SW5kZXgoRGQodGhpcyxuTykpfWdldEFjdGl2ZVNlbGVjdGlvbkxheWVySW5kZXgoKXtyZXR1cm4gRGQodGhpcyxuTyl9c2V0QWN0aXZlU2VsZWN0aW9uTGF5ZXJJbmRleChlKXtTMCh0aGlzLG5PLGUpfW1hcmtTb3VyY2UoZSl7UzAo''@;'; put 'put ''dGhpcyx0TyxlKX1tYXJrRW5kU291cmNlKCl7UzAodGhpcyx0TywidW5rbm93biIpfWdldFNlbGVjdGlvblNvdXJjZSgpe3JldHVybiBEZCh0aGlzLHRPKX1zZXRFeHBlY3RlZExheWVycyhlKXtTMCh0aGlzLGRULGUpfWJlZ2luKCl7dGhpcy5pblByb2dyZXNzPSEwfWZpbmlzaCgpe3RoaXMu''@;'; put 'put ''cnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3Rpb25GaW5pc2hlZCIsQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUmFuZ2UpKSx0aGlzLmluUHJvZ3Jlc3M9ITEsUzAodGhpcyxkVCwtMSl9aXNJblByb2dyZXNzKCl7cmV0dXJuIHRoaXMuaW5Qcm9ncmVzc31zZXRSYW5nZVN0YXJ0KGUsdCxyPSEx''@;'; put 'put ''LGk9ZSl7Y29uc3Qgbz0ibXVsdGlwbGUiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlLGE9WHUodCk/dGhpcy50YWJsZVByb3BzLmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKTp0LGw9ZS5jbG9uZSgpO1MwKHRoaXMsQTcsITEpLFMwKHRoaXMsZU8sITEpLHRoaXMu''@;'; put 'put ''cnVuTG9jYWxIb29rcygiYmVmb3JlU2V0UmFuZ2VTdGFydCIrKHI/Ik9ubHkiOiIiKSxsKSwoIW98fG8mJiFhJiZYdSh0KSkmJih0aGlzLnNlbGVjdGVkUmFuZ2UuY2xlYXIoKSx0aGlzLmhpZ2hsaWdodC5nZXRBcmVhcygpLmZvckVhY2godT0+dS5jbGVhcigpKSx0aGlzLmhpZ2hsaWdodC5n''@;'; put 'put ''ZXRMYXllcmVkQXJlYXMoKS5mb3JFYWNoKHU9PnUuY2xlYXIoKSksdGhpcy5oaWdobGlnaHQuZ2V0Um93SGVhZGVycygpLmZvckVhY2godT0+dS5jbGVhcigpKSx0aGlzLmhpZ2hsaWdodC5nZXRDb2x1bW5IZWFkZXJzKCkuZm9yRWFjaCh1PT51LmNsZWFyKCkpLHRoaXMuaGlnaGxpZ2h0Lmdl''@;'; put 'put ''dEFjdGl2ZVJvd0hlYWRlcnMoKS5mb3JFYWNoKHU9PnUuY2xlYXIoKSksdGhpcy5oaWdobGlnaHQuZ2V0QWN0aXZlQ29sdW1uSGVhZGVycygpLmZvckVhY2godT0+dS5jbGVhcigpKSx0aGlzLmhpZ2hsaWdodC5nZXRBY3RpdmVDb3JuZXJIZWFkZXJzKCkuZm9yRWFjaCh1PT51LmNsZWFyKCkp''@;'; put 'put ''LHRoaXMuaGlnaGxpZ2h0LmdldFJvd0hpZ2hsaWdodHMoKS5mb3JFYWNoKHU9PnUuY2xlYXIoKSksdGhpcy5oaWdobGlnaHQuZ2V0Q29sdW1uSGlnaGxpZ2h0cygpLmZvckVhY2godT0+dS5jbGVhcigpKSksdGhpcy5zZWxlY3RlZFJhbmdlLmFkZChsKS5jdXJyZW50KCk/LnNldEhpZ2hsaWdo''@;'; put 'put ''dChpLmNsb25lKCkpLDA9PT10aGlzLmdldExheWVyTGV2ZWwoKSYmKHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5jbGVhcigpLHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5jbGVhcigpKSxyfHx0aGlzLnNldFJhbmdlRW5kKGUpfXNldFJhbmdlU3RhcnRPbmx5KGUsdCxyPWUpe3RoaXMu''@;'; put 'put ''c2V0UmFuZ2VTdGFydChlLHQsITAscil9c2V0UmFuZ2VFbmQoZSx0PXRoaXMuZ2V0TGF5ZXJMZXZlbCgpKXtpZih0aGlzLnNlbGVjdGVkUmFuZ2UuaXNFbXB0eSgpKXJldHVybjt0aGlzLnNldEFjdGl2ZVNlbGVjdGlvbkxheWVySW5kZXgodCk7Y29uc3Qgcj1lLmNsb25lKCksaT10aGlzLnRh''@;'; put 'put ''YmxlUHJvcHMuY291bnRSb3dzKCksbz10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksYT10aGlzLmdldEFjdGl2ZVNlbGVjdGVkUmFuZ2UoKT8uY2xvbmUoKS5zZXRUbyhlKS5pc1NpbmdsZUhlYWRlcigpO2lmKChpPjB8fG8+MCkmJigwPT09aSYmKHIuY29sPz8wKTwwJiYhYXx8MD09PW8m''@;'; put 'put ''JihyLnJvdz8/MCk8MCYmIWEpKXJldHVybjt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNldFJhbmdlRW5kIixyKSx0aGlzLmJlZ2luKCk7Y29uc3QgbD10aGlzLmdldEFjdGl2ZVNlbGVjdGVkUmFuZ2UoKTtpZighbClyZXR1cm47aWYodGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJz''@;'; put 'put ''fHxsLmhpZ2hsaWdodC5ub3JtYWxpemUoKSwic2luZ2xlIj09PXRoaXMuc2V0dGluZ3Muc2VsZWN0aW9uTW9kZSlsLnNldEZyb20obC5oaWdobGlnaHQpLGwuc2V0VG8obC5oaWdobGlnaHQpO2Vsc2V7Y29uc3QgZz1sLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSxFPWwuZ2V0VmVydGljYWxE''@;'; put 'put ''aXJlY3Rpb24oKSxPPXRoaXMuaXNNdWx0aXBsZSgpO2wuc2V0VG8ociksTyYmKGchPT1sLmdldEhvcml6b250YWxEaXJlY3Rpb24oKXx8MT09PWwuZ2V0V2lkdGgoKSYmIWwuaW5jbHVkZXMobC5oaWdobGlnaHQpKSYmbC5mcm9tLmFzc2lnbih7Y29sOmwuaGlnaGxpZ2h0LmNvbD8/dm9pZCAw''@;'; put 'put ''fSksTyYmKEUhPT1sLmdldFZlcnRpY2FsRGlyZWN0aW9uKCl8fDE9PT1sLmdldEhlaWdodCgpJiYhbC5pbmNsdWRlcyhsLmhpZ2hsaWdodCkpJiZsLmZyb20uYXNzaWduKHtyb3c6bC5oaWdobGlnaHQucm93Pz92b2lkIDB9KX1pPjAmJm8+MCYmKCF0aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhl''@;'; put 'put ''YWRlcnN8fHRoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVycyYmIWwuaXNTaW5nbGVIZWFkZXIoKSkmJmwudG8ubm9ybWFsaXplKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVIaWdobGlnaHRTZXQiKSx0aGlzLnNldFJhbmdlRm9jdXModGhpcy5nZXRBY3RpdmVTZWxlY3RlZFJhbmdl''@;'; put 'put ''KCk/LmhpZ2hsaWdodD8/bC5oaWdobGlnaHQsdCksdGhpcy5hcHBseUFuZENvbW1pdCh0aGlzLmdldEFjdGl2ZVNlbGVjdGVkUmFuZ2UoKT8/bCx0KTtjb25zdCB1PS0xPT09RGQodGhpcyxkVCl8fHRoaXMuc2VsZWN0ZWRSYW5nZS5zaXplKCk9PT1EZCh0aGlzLGRUKTt0aGlzLnJ1bkxvY2Fs''@;'; put 'put ''SG9va3MoImFmdGVyU2V0UmFuZ2VFbmQiLGUsdSl9YXBwbHlBbmRDb21taXQoZT10aGlzLmdldEFjdGl2ZVNlbGVjdGVkUmFuZ2UoKSx0PXRoaXMuZ2V0TGF5ZXJMZXZlbCgpKXtpZighZSlyZXR1cm47Y29uc3Qgcj10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksaT10aGlzLnRhYmxlUHJv''@;'; put 'put ''cHMuY291bnRDb2xzKCk7dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbCh0KTtjb25zdCBvPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFyZWEoKSxhPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUxheWVyZWRBcmVhKCksbD10aGlzLmhpZ2hsaWdodC5jcmVhdGVSb3dIZWFkZXIoKSx1PXRoaXMuaGln''@;'; put 'put ''aGxpZ2h0LmNyZWF0ZUNvbHVtbkhlYWRlcigpLGc9dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlUm93SGVhZGVyKCksRT10aGlzLmhpZ2hsaWdodC5jcmVhdGVBY3RpdmVDb2x1bW5IZWFkZXIoKSxPPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZUNvcm5lckhlYWRlcigpLFo9dGhpcy5o''@;'; put 'put ''aWdobGlnaHQuY3JlYXRlUm93SGlnaGxpZ2h0KCksZWU9dGhpcy5oaWdobGlnaHQuY3JlYXRlQ29sdW1uSGlnaGxpZ2h0KCk7aWYobz8uY2xlYXIoKSxhPy5jbGVhcigpLGw/LmNsZWFyKCksdT8uY2xlYXIoKSxnPy5jbGVhcigpLEU/LmNsZWFyKCksTz8uY2xlYXIoKSxaPy5jbGVhcigpLGVl''@;'; put 'put ''Py5jbGVhcigpLHRoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZvcigiYXJlYSIsZS5oaWdobGlnaHQpJiYodGhpcy5pc011bHRpcGxlKCl8fHQ+PTEpJiYobz8uYWRkKGUuZnJvbSkuYWRkKGUudG8pLmNvbW1pdCgpLGE/LmFkZChlLmZyb20pLmFkZChlLnRvKS5jb21taXQoKSwxPT09dCkpe2Nv''@;'; put 'put ''bnN0IHZlPXRoaXMuc2VsZWN0ZWRSYW5nZS5wZWVrQnlJbmRleCh0LTEpO3ZlJiYodGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbCh0LTEpLHRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFyZWEoKT8uYWRkKHZlLmZyb20pLmNvbW1pdCgpLnN5bmNXaXRoKHZlKSx0aGlzLmhpZ2hsaWdodC5jcmVh''@;'; put 'put ''dGVMYXllcmVkQXJlYSgpPy5hZGQodmUuZnJvbSkuY29tbWl0KCkuc3luY1dpdGgodmUpLHRoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwodCkpfXRoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZvcih6dWUsZS5oaWdobGlnaHQpJiZmdW5jdGlvbiBfUnQobixlLHQpe2lmKCFlLmhhcyhuKSl0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHR9KHRoaXMsWVJlLGJSdCkuY2FsbCh0aGlzLGUscixpLGwsdSxnLEUsTyxaLGVlKX1zZXRSYW5nZUZvY3VzKGUsdD10aGlzLmdldExheWVyTGV2ZWwoKSl7''@;'; put 'put ''aWYodGhpcy5zZWxlY3RlZFJhbmdlLmlzRW1wdHkoKSlyZXR1cm47dGhpcy5zZXRBY3RpdmVTZWxlY3Rpb25MYXllckluZGV4KHQpLERkKHRoaXMsWnApLnNldEFjdGl2ZUxheWVySW5kZXgodCksRGQodGhpcyx1VCkuc2V0QWN0aXZlTGF5ZXJJbmRleCh0KTtjb25zdCByPXRoaXMuZ2V0QWN0''@;'; put 'put ''aXZlU2VsZWN0ZWRSYW5nZSgpO2lmKHRoaXMuaW5Qcm9ncmVzc3x8dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZXRGb2N1cyIsZSksIXIpcmV0dXJuO2NvbnN0IGk9dGhpcy5oaWdobGlnaHQuZ2V0Rm9jdXMoKTtpLmNsZWFyKCksci5zZXRIaWdobGlnaHQoZSksdGhpcy5pblByb2dyZXNz''@;'; put 'put ''fHx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUhpZ2hsaWdodFNldCIpLHRoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZvcihIWSxyLmhpZ2hsaWdodCkmJmkuYWRkKHIuaGlnaGxpZ2h0KS5jb21taXQoKS5zeW5jV2l0aChyKSx0aGlzLmluUHJvZ3Jlc3N8fChTMCh0aGlzLGVPLCEwKSx0aGlz''@;'; put 'put ''LnJ1bkxvY2FsSG9va3MoImFmdGVyU2V0Rm9jdXMiLHIuaGlnaGxpZ2h0KSl9dHJhbnNmb3JtU3RhcnQoZSx0LHI9ITEpe2lmKCF0aGlzLmlzU2VsZWN0ZWQoKSlyZXR1cm47Y29uc3R7dmlzdWFsQ29vcmRzOml9PURkKHRoaXMsWnApLnRyYW5zZm9ybVN0YXJ0KGUsdCxyKTt0aGlzLnNldFJh''@;'; put 'put ''bmdlU3RhcnQoaSx2b2lkIDAsITEsaSl9dHJhbnNmb3JtRW5kKGUsdCl7aWYoIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdHt2aXN1YWxDb29yZHM6cixzZWxlY3Rpb25MYXllcjppfT1EZCh0aGlzLFpwKS50cmFuc2Zvcm1FbmQoZSx0KTt0aGlzLnNldFJhbmdlRW5kKHIsaSl9dHJh''@;'; put 'put ''bnNmb3JtRm9jdXMoZSx0KXtpZighdGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuO2NvbnN0e3NlbGVjdGlvbkxheWVyOnIsdmlzdWFsQ29vcmRzOml9PURkKHRoaXMsdVQpLnRyYW5zZm9ybVN0YXJ0KGUsdCk7dGhpcy5zZXRSYW5nZUZvY3VzKGkubm9ybWFsaXplKCkscil9c2hpZnRSb3dzKGUs''@;'; put 'put ''dCl7aWYoIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCByPXRoaXMuZ2V0QWN0aXZlU2VsZWN0ZWRSYW5nZSgpO2lmKHRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKCkpdGhpcy5zZWxlY3RBbGwoITAsITAse2Rpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiEwfSk7ZWxzZSBpZihyJiYodGhp''@;'; put 'put ''cy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8KHIuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLnJvdz8/MCk+PWUpKXtjb25zdHtmcm9tOmksdG86byxoaWdobGlnaHQ6YX09cixsPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSx1PXRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCks''@;'; put 'put ''Zz10aGlzLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLEU9Zz8tMTowLE89Zz8wOnQsWj1pLnJvdz09PW8ucm93LGVlPUhlPT5XUmUodGhpcy50YWJsZVByb3BzLnJvd0luZGV4TWFwcGVyLEhlLFopO3RoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLnBvcCgpO2NvbnN0IHZlPXRoaXMudGFibGVQ''@;'; put 'put ''cm9wcy5jcmVhdGVDZWxsQ29vcmRzKGVlKFZzKChpLnJvdz8/MCkrTyxFLGwtMSkpLGkuY29sPz8wKSxNZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhlZShWcygoby5yb3c/PzApK3QsRSxsLTEpKSxvLmNvbD8/MCk7dGhpcy5tYXJrU291cmNlKCJzaGlmdCIpLChhLnJvdz8/''@;'; put 'put ''MCk+PWU/dGhpcy5zZXRSYW5nZVN0YXJ0T25seSh2ZSwhMCx0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhlZShWcygoYS5yb3c/PzApK3QsMCxsLTEpKSxhLmNvbD8/MCkpOnRoaXMuc2V0UmFuZ2VTdGFydE9ubHkodmUsITApLHUmJnRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5h''@;'; put 'put ''ZGQodGhpcy5nZXRMYXllckxldmVsKCkpLGcmJnRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQoTWUpLHRoaXMubWFya0VuZFNvdXJjZSgpfX1zaGlmdENvbHVtbnMoZSx0KXtpZighdGhpcy5pc1NlbGVjdGVkKCkp''@;'; put 'put ''cmV0dXJuO2NvbnN0IHI9dGhpcy5nZXRBY3RpdmVTZWxlY3RlZFJhbmdlKCk7aWYodGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIoKSl0aGlzLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITB9KTtlbHNlIGlmKHImJih0aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigp''@;'; put 'put ''fHwoci5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkuY29sPz8wKT49ZSkpe2NvbnN0e2Zyb206aSx0bzpvLGhpZ2hsaWdodDphfT1yLGw9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLHU9dGhpcy5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxnPXRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVh''@;'; put 'put ''ZGVyKCksRT11Py0xOjAsTz11PzA6dCxaPWkuY29sPT09by5jb2wsZWU9SGU9PldSZSh0aGlzLnRhYmxlUHJvcHMuY29sdW1uSW5kZXhNYXBwZXIsSGUsWik7dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkucG9wKCk7Y29uc3QgdmU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoaS5y''@;'; put 'put ''b3c/PzAsZWUoVnMoKGkuY29sPz8wKStPLEUsbC0xKSkpLE1lPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKG8ucm93Pz8wLGVlKFZzKChvLmNvbD8/MCkrdCxFLGwtMSkpKTt0aGlzLm1hcmtTb3VyY2UoInNoaWZ0IiksKGEuY29sPz8wKT49ZT90aGlzLnNldFJhbmdlU3RhcnRP''@;'; put 'put ''bmx5KHZlLCEwLHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGEucm93Pz8wLGVlKFZzKChhLmNvbD8/MCkrdCwwLGwtMSkpKSk6dGhpcy5zZXRSYW5nZVN0YXJ0T25seSh2ZSwhMCksdSYmdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSks''@;'; put 'put ''ZyYmdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksdGhpcy5zZXRSYW5nZUVuZChNZSksdGhpcy5tYXJrRW5kU291cmNlKCl9fWdldExheWVyTGV2ZWwoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZFJhbmdlLnNpemUoKS0xfWlzU2VsZWN0ZWQoKXty''@;'; put 'put ''ZXR1cm4hdGhpcy5zZWxlY3RlZFJhbmdlLmlzRW1wdHkoKX1pc011bHRpcGxlKGU9dGhpcy5nZXRBY3RpdmVTZWxlY3RlZFJhbmdlKCkpe2lmKCF0aGlzLmlzU2VsZWN0ZWQoKXx8IWUpcmV0dXJuITE7Y29uc3QgdD1WZighZS5pc1NpbmdsZSgpKTtyZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tz''@;'; put 'put ''KCJhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLHQpLHQudmFsdWV9aXNGb2N1c1NlbGVjdGlvbkNoYW5nZWQoKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGVkKCkmJkRkKHRoaXMsZU8pfWlzU2VsZWN0ZWRCeVJvd0hlYWRlcihlPXRoaXMuZ2V0TGF5ZXJMZXZlbCgpKXtyZXR1cm4hdGhpcy5pc1Nl''@;'; put 'put ''bGVjdGVkQnlDb3JuZXIoKSYmKC0xPT09ZT90aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuc2l6ZT4wOnRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5oYXMoZSkpfWlzRW50aXJlUm93U2VsZWN0ZWQoZT10aGlzLmdldExheWVyTGV2ZWwoKSl7Y29uc3QgdD1pPT57Y29uc3R7Y29sOm99PWkuZ2V0''@;'; put 'put ''T3V0ZXJUb3BTdGFydENvcm5lcigpLGE9dGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpLGw9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpO3JldHVybihhPjAmJihvPz8wKTwwfHwwPT09YSkmJmkuZ2V0V2lkdGgoKT09PWx9O2lmKC0xPT09ZSlyZXR1cm4gQXJyYXkuZnJvbSh0''@;'; put 'put ''aGlzLnNlbGVjdGVkUmFuZ2UpLnNvbWUoaT0+dChpKSk7Y29uc3Qgcj10aGlzLnNlbGVjdGVkUmFuZ2UucGVla0J5SW5kZXgoZSk7cmV0dXJuISFyJiZ0KHIpfWlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcihlPXRoaXMuZ2V0TGF5ZXJMZXZlbCgpKXtyZXR1cm4hdGhpcy5pc1NlbGVjdGVkQnlD''@;'; put 'put ''b3JuZXIoKSYmKC0xPT09ZT90aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuc2l6ZT4wOnRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5oYXMoZSkpfWlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoZT10aGlzLmdldExheWVyTGV2ZWwoKSl7Y29uc3QgdD1pPT57Y29uc3R7cm93Om99PWkuZ2V0''@;'; put 'put ''T3V0ZXJUb3BTdGFydENvcm5lcigpLGE9dGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpLGw9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpO3JldHVybihhPjAmJihvPz8wKTwwfHwwPT09YSkmJmkuZ2V0SGVpZ2h0KCk9PT1sfTtpZigtMT09PWUpcmV0dXJuIEFycmF5LmZyb20o''@;'; put 'put ''dGhpcy5zZWxlY3RlZFJhbmdlKS5zb21lKGk9PnQoaSkpO2NvbnN0IHI9dGhpcy5zZWxlY3RlZFJhbmdlLnBlZWtCeUluZGV4KGUpO3JldHVybiEhciYmdChyKX1pc1NlbGVjdGVkQnlBbnlIZWFkZXIoKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoLTEpfHx0aGlzLmlzU2Vs''@;'; put 'put ''ZWN0ZWRCeUNvbHVtbkhlYWRlcigtMSl8fHRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKCl9aXNTZWxlY3RlZEJ5Q29ybmVyKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5oYXModGhpcy5nZXRMYXllckxldmVsKCkpJiZ0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuaGFzKHRo''@;'; put 'put ''aXMuZ2V0TGF5ZXJMZXZlbCgpKX1pbkluU2VsZWN0aW9uKGUpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2UuaW5jbHVkZXMoZSl9aXNDZWxsQ29ybmVyVmlzaWJsZSgpe3JldHVybiB0aGlzLnNldHRpbmdzLmZpbGxIYW5kbGUmJiF0aGlzLnRhYmxlUHJvcHMuaXNFZGl0b3JPcGVuZWQoKSYm''@;'; put 'put ''IXRoaXMuaXNNdWx0aXBsZSgpfWlzQ2VsbFZpc2libGUoZSl7Y29uc3QgdD10aGlzLnRhYmxlUHJvcHMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGUpO3JldHVybiBudWxsIT09dC5yb3cmJm51bGwhPT10LmNvbH1pc0FyZWFDb3JuZXJWaXNpYmxlKGUpe3JldHVybighTnVtYmVyLmlzSW50''@;'; put 'put ''ZWdlcihlKXx8ZT09PXRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSYmdGhpcy5zZXR0aW5ncy5maWxsSGFuZGxlJiYhdGhpcy50YWJsZVByb3BzLmlzRWRpdG9yT3BlbmVkKCkmJnRoaXMuaXNNdWx0aXBsZSgpfWNsZWFyKCl7dGhpcy5zZWxlY3RlZFJhbmdlLmNsZWFyKCksdGhpcy5oaWdobGlnaHQu''@;'; put 'put ''Y2xlYXIoKX1kZXNlbGVjdCgpe3RoaXMuaXNTZWxlY3RlZCgpJiYodGhpcy5pblByb2dyZXNzPSExLHRoaXMuY2xlYXIoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyRGVzZWxlY3QiKSl9c2VsZWN0QWxsKGU9ITEsdD0hMSxyPXtmb2N1c1Bvc2l0aW9uOiExLGRpc2FibGVIZWFkZXJzSGln''@;'; put 'put ''aGxpZ2h0OiExfSl7Y29uc3QgaT10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksbz10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksYT10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCksbD10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksdT10Py1sOjAsZz1lPy1h''@;'; put 'put ''OjA7aWYoMD09PXUmJjA9PT1nJiYoMD09PWl8fDA9PT1vKSlyZXR1cm47bGV0IEU9dGhpcy5nZXRBY3RpdmVTZWxlY3RlZFJhbmdlKCk/LmhpZ2hsaWdodDtjb25zdHtmb2N1c1Bvc2l0aW9uOk8sZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6Wn09cjtuZGUoTykmJihFPXRoaXMudGFibGVQcm9w''@;'; put 'put ''cy5jcmVhdGVDZWxsQ29vcmRzKFZzKE8ucm93LHUsaS0xKSxWcyhPLmNvbCxnLG8tMSkpKTtjb25zdCBlZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcyh1LGcpLHZlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGktMSxvLTEpO3RoaXMuY2xlYXIoKSx0aGlzLnJ1''@;'; put 'put ''bkxvY2FsSG9va3MoImJlZm9yZVNlbGVjdEFsbCIsZWUsdmUsRSksdGhpcy5zZXRSYW5nZVN0YXJ0T25seShlZSx2b2lkIDAsRSksUzAodGhpcyxBNyxaPz8hMSksZzwwJiZ0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSx1PDAmJnRoaXMuc2VsZWN0''@;'; put 'put ''ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQodmUpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3RBbGwiLGVlLHZlLEUpLHRoaXMuZmluaXNoKCl9c2VsZWN0Q2VsbHMoZSl7Y29uc3QgdD1jVChlKTtpZigxPT09dClyZXR1''@;'; put 'put ''cm4hMTswPT09dCYmSnIoeWNgVW5zdXBwb3J0ZWQgZm9ybWF0IG9mIHRoZSBzZWxlY3Rpb24gcmFuZ2VzIHdhcyBwYXNzZWQuIFRvIHNlbGVjdCBjZWxscyBwYXNzXHgyMAogICAgICAgIHRoZSBjb29yZGluYXRlcyBhcyBhbiBhcnJheSBvZiBhcnJheXMgKFtbcm93U3RhcnQsIGNvbHVtblN0''@;'; put 'put ''YXJ0L2NvbHVtblByb3BTdGFydCwgcm93RW5kLFx4MjAKICAgICAgICBjb2x1bW5FbmQvY29sdW1uUHJvcEVuZF1dKSBvciBhcyBhbiBhcnJheSBvZiBDZWxsUmFuZ2Ugb2JqZWN0cy5gKTtjb25zdCByPUpMKHQse2NyZWF0ZUNlbGxDb29yZHM6KC4uLmwpPT50aGlzLnRhYmxlUHJvcHMuY3Jl''@;'; put 'put ''YXRlQ2VsbENvb3JkcyguLi5sKSxjcmVhdGVDZWxsUmFuZ2U6KC4uLmwpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKC4uLmwpLHByb3BUb0NvbDpsPT50aGlzLnRhYmxlUHJvcHMucHJvcFRvQ29sKGwpLGtlZXBEaXJlY3Rpb246ITB9KSxpPXRoaXMuc2V0dGluZ3MubmF2aWdh''@;'; put 'put ''YmxlSGVhZGVycyxvPXtjb3VudFJvd3M6dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGNvdW50Q29sczp0aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksY291bnRSb3dIZWFkZXJzOmk/dGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpOjAsY291bnRDb2xIZWFkZXJzOmk/dGhp''@;'; put 'put ''cy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpOjB9LGE9IWUuc29tZShsPT57Y29uc3QgdT1yKGwpLGc9dS5pc1ZhbGlkKG8pO3JldHVybiEoZyYmIXUuY29udGFpbnNIZWFkZXJzKCl8fGcmJnUuY29udGFpbnNIZWFkZXJzKCkmJnUuaXNTaW5nbGVIZWFkZXIoKSl9KTtyZXR1cm4gYSYm''@;'; put 'put ''KHRoaXMuY2xlYXIoKSx0aGlzLnNldEV4cGVjdGVkTGF5ZXJzKGUubGVuZ3RoKSxlLmZvckVhY2gobD0+e2NvbnN0e2Zyb206dSx0bzpnfT1yKGwpO3RoaXMuc2V0UmFuZ2VTdGFydE9ubHkodS5jbG9uZSgpLCExKSx0aGlzLnNldFJhbmdlRW5kKGcuY2xvbmUoKSl9KSx0aGlzLmZpbmlzaCgp''@;'; put 'put ''KSxhfXNlbGVjdENvbHVtbnMoZSx0PWUscj0wKXtjb25zdCBpPSJzdHJpbmciPT10eXBlb2YgZT90aGlzLnRhYmxlUHJvcHMucHJvcFRvQ29sKGUpOmUsbz0ic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy50YWJsZVByb3BzLnByb3BUb0NvbCh0KTp0LGE9dGhpcy50YWJsZVByb3BzLmNvdW50Um93''@;'; put 'put ''cygpLGw9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLHU9dGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpLGc9MD09PXU/MDotdSxFPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGcsaSksTz10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhhLTEsbyks''@;'; put 'put ''Wj10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKEUsRSxPKS5pc1ZhbGlkKHtjb3VudFJvd3M6YSxjb3VudENvbHM6bCxjb3VudFJvd0hlYWRlcnM6MCxjb3VudENvbEhlYWRlcnM6dX0pO2lmKFope2xldCBlZT0wLHZlPTA7bmRlKHIpPyhlZT1WcyhyLnJvdz8/MCxnLGEtMSksdmU9''@;'; put 'put ''VnMoci5jb2w/PzAsTWF0aC5taW4oaSxvKSxNYXRoLm1heChpLG8pKSk6KGVlPVZzKCJudW1iZXIiPT10eXBlb2Ygcj9yOjAsZyxhLTEpLHZlPWkpO2NvbnN0IE1lPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGVlLHZlKSxIZT0wPT09dT8wOlZzKE1lLnJvdz8/MCxnLC0xKSxX''@;'; put 'put ''ZT1hLTEsYXQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoSGUsaSksQ3Q9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoV2Usbyk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZWxlY3RDb2x1bW5zIixhdCxDdCxNZSksdGhpcy5zZXRSYW5nZVN0YXJ0T25seShh''@;'; put 'put ''dCx2b2lkIDAsTWUpLHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQoQ3QpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3RDb2x1bW5zIixhdCxDdCxNZSksdGhpcy5maW5pc2goKX1yZXR1cm4gWn1zZWxl''@;'; put 'put ''Y3RSb3dzKGUsdD1lLHI9MCl7Y29uc3QgaT10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksbz10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksYT10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCksbD0wPT09YT8wOi1hLHU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29y''@;'; put 'put ''ZHMoZSxsKSxnPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKHQsby0xKSxFPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UodSx1LGcpLmlzVmFsaWQoe2NvdW50Um93czppLGNvdW50Q29sczpvLGNvdW50Um93SGVhZGVyczphLGNvdW50Q29sSGVhZGVyczowfSk7aWYo''@;'; put 'put ''RSl7bGV0IE89MCxaPTA7bmRlKHIpPyhPPVZzKHIucm93Pz8wLE1hdGgubWluKGUsdCksTWF0aC5tYXgoZSx0KSksWj1WcyhyLmNvbD8/MCxsLG8tMSkpOihPPWUsWj1WcygibnVtYmVyIj09dHlwZW9mIHI/cjowLGwsby0xKSk7Y29uc3QgZWU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxD''@;'; put 'put ''b29yZHMoTyxaKSx2ZT0wPT09YT8wOlZzKGVlLmNvbD8/MCxsLC0xKSxNZT1vLTEsSGU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoZSx2ZSksV2U9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHModCxNZSk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZWxlY3RS''@;'; put 'put ''b3dzIixIZSxXZSxlZSksdGhpcy5zZXRSYW5nZVN0YXJ0T25seShIZSx2b2lkIDAsZWUpLHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQoV2UpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3RSb3dzIixIZSxX''@;'; put 'put ''ZSxlZSksdGhpcy5maW5pc2goKX1yZXR1cm4gRX1pbXBvcnRTZWxlY3Rpb24oe3JhbmdlczplLGFjdGl2ZVJhbmdlOnQsYWN0aXZlU2VsZWN0aW9uTGF5ZXI6cixzZWxlY3RlZEJ5Um93SGVhZGVyOmksc2VsZWN0ZWRCeUNvbHVtbkhlYWRlcjpvLGRpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OmF9''@;'; put 'put ''KXswIT09ZS5sZW5ndGgmJih0aGlzLnNlbGVjdGVkUmFuZ2UuY2xlYXIoKSx0aGlzLmhpZ2hsaWdodC5jbGVhcigpLHRoaXMuaW5Qcm9ncmVzcz0hMSxTMCh0aGlzLEE3LGEpLHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlcj1uZXcgU2V0KGkpLHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlcj1u''@;'; put 'put ''ZXcgU2V0KG8pLHRoaXMuc2V0QWN0aXZlU2VsZWN0aW9uTGF5ZXJJbmRleCgwKSxlLmZvckVhY2goKGwsdSk9Pnt0aGlzLnNlbGVjdGVkUmFuZ2UucHVzaChsKSx0aGlzLmFwcGx5QW5kQ29tbWl0KGwsdSl9KSx0aGlzLnNldFJhbmdlRm9jdXModC5oaWdobGlnaHQsciksUzAodGhpcyxBNywh''@;'; put 'put ''MSksdGhpcy5pblByb2dyZXNzPSExKX1leHBvcnRTZWxlY3Rpb24oKXtyZXR1cm57cmFuZ2VzOkFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJhbmdlKS5tYXAoZT0+ZS5jbG9uZSgpKSxhY3RpdmVSYW5nZTp0aGlzLmdldEFjdGl2ZVNlbGVjdGVkUmFuZ2UoKSxhY3RpdmVTZWxlY3Rpb25MYXll''@;'; put 'put ''cjp0aGlzLmdldEFjdGl2ZVNlbGVjdGlvbkxheWVySW5kZXgoKSxzZWxlY3RlZEJ5Um93SGVhZGVyOkFycmF5LmZyb20odGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyKSxzZWxlY3RlZEJ5Q29sdW1uSGVhZGVyOkFycmF5LmZyb20odGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKSxkaXNhYmxl''@;'; put 'put ''SGVhZGVyc0hpZ2hsaWdodDpEZCh0aGlzLEE3KX19cmVmcmVzaCgpe2lmKCF0aGlzLmlzU2VsZWN0ZWQoKSlyZXR1cm47Y29uc3QgZT10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksdD10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCk7aWYoMD09PWV8fDA9PT10KXJldHVybiB2b2lkIHRo''@;'; put 'put ''aXMuZGVzZWxlY3QoKTtjb25zdCByPXRoaXMuc2VsZWN0ZWRSYW5nZS5yYW5nZXMubWFwKGw9PmwuY2xvbmUoKSk7InVua25vd24iPT09dGhpcy5nZXRTZWxlY3Rpb25Tb3VyY2UoKSYmdGhpcy5tYXJrU291cmNlKCJyZWZyZXNoIik7Y29uc3Qgbz1uZXcgU2V0KHRoaXMuc2VsZWN0ZWRCeVJv''@;'; put 'put ''d0hlYWRlciksYT1uZXcgU2V0KHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlcik7dGhpcy5jbGVhcigpLHRoaXMuc2V0RXhwZWN0ZWRMYXllcnMoci5sZW5ndGgpLHIuZm9yRWFjaChsPT57Y29uc3R7ZnJvbTp1LHRvOmcsaGlnaGxpZ2h0OkV9PWwsTz1lLTEsWj10LTE7RS5hc3NpZ24oe3Jv''@;'; put 'put ''dzpWcyhFLnJvdz8/MCx0aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnM/LTEvMDowLE8pLGNvbDpWcyhFLmNvbD8/MCx0aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnM/LTEvMDowLFopfSksdS5hc3NpZ24oe3JvdzpWcyh1LnJvdz8/MCwtMS8wLE8pLGNvbDpWcyh1LmNvbD8/MCwt''@;'; put 'put ''MS8wLFopfSksZy5hc3NpZ24oe3JvdzpWcyhnLnJvdz8/MCwtMS8wLE8pLGNvbDpWcyhnLmNvbD8/MCwtMS8wLFopfSksdGhpcy5zZXRSYW5nZVN0YXJ0T25seSh1LCEwLEUpLHRoaXMuc2V0UmFuZ2VFbmQoZyl9KSx0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXI9byx0aGlzLnNlbGVjdGVkQnlD''@;'; put 'put ''b2x1bW5IZWFkZXI9YSx0aGlzLmZpbmlzaCgpLHRoaXMubWFya0VuZFNvdXJjZSgpfWNvbW1pdCgpe2lmKHRoaXMuaGlnaGxpZ2h0LmdldEN1c3RvbVNlbGVjdGlvbnMoKS5mb3JFYWNoKGk9PntpLmNvbW1pdCgpfSksIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCB0PXRoaXMuZ2V0''@;'; put 'put ''TGF5ZXJMZXZlbCgpLHI9dGhpcy5nZXRBY3RpdmVTZWxlY3RlZFJhbmdlKCk7ciYmdGhpcy5oaWdobGlnaHQuaXNFbmFibGVkRm9yKEhZLHIuaGlnaGxpZ2h0KSYmdGhpcy5oaWdobGlnaHQuZ2V0Rm9jdXMoKS5jb21taXQoKS5zeW5jV2l0aChyKTtmb3IobGV0IGk9MDtpPHRoaXMuc2VsZWN0''@;'; put 'put ''ZWRSYW5nZS5zaXplKCk7aSs9MSl7dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChpKTtjb25zdCBvPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFyZWEoKSxhPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUxheWVyZWRBcmVhKCksbD10aGlzLmhpZ2hsaWdodC5jcmVhdGVSb3dIZWFkZXIoKSx1PXRo''@;'; put 'put ''aXMuaGlnaGxpZ2h0LmNyZWF0ZUNvbHVtbkhlYWRlcigpLGc9dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlUm93SGVhZGVyKCksRT10aGlzLmhpZ2hsaWdodC5jcmVhdGVBY3RpdmVDb2x1bW5IZWFkZXIoKSxPPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZUNvcm5lckhlYWRlcigpLFo9''@;'; put 'put ''dGhpcy5oaWdobGlnaHQuY3JlYXRlUm93SGlnaGxpZ2h0KCksZWU9dGhpcy5oaWdobGlnaHQuY3JlYXRlQ29sdW1uSGlnaGxpZ2h0KCk7bz8uY29tbWl0KCksYT8uY29tbWl0KCksbD8uY29tbWl0KCksdT8uY29tbWl0KCksZz8uY29tbWl0KCksRT8uY29tbWl0KCksTz8uY29tbWl0KCksWj8u''@;'; put 'put ''Y29tbWl0KCksZWU/LmNvbW1pdCgpfXRoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwodCl9Y29uc3RydWN0b3IoZSx0KXsoZnVuY3Rpb24geVJ0KG4sZSl7VVJlKG4sZSksZS5hZGQobil9KSh0aGlzLFlSZSksQXcodGhpcyxacCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksQXcodGhp''@;'; put 'put ''cyx1VCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksQXcodGhpcyxlTyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksQXcodGhpcyxBNyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksQXcodGhpcyx0Tyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksQXcodGhpcyxkVCx7d3Jp''@;'; put 'put ''dGFibGU6ITAsdmFsdWU6dm9pZCAwfSksQXcodGhpcyxuTyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdGhpcy5pblByb2dyZXNzPSExLHRoaXMuc2VsZWN0ZWRSYW5nZT1uZXcgc1J0KChyLGksbyk9PnRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UocixpLG8pKSx0aGlzLnNl''@;'; put 'put ''bGVjdGVkQnlSb3dIZWFkZXI9bmV3IFNldCx0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXI9bmV3IFNldCxTMCh0aGlzLGVPLCExKSxTMCh0aGlzLEE3LCExKSxTMCh0aGlzLHRPLCJ1bmtub3duIiksUzAodGhpcyxkVCwtMSksUzAodGhpcyxuTywwKSx0aGlzLnNldHRpbmdzPWUsdGhpcy50''@;'; put 'put ''YWJsZVByb3BzPXQsdGhpcy5oaWdobGlnaHQ9bmV3IGFSdCh7aGVhZGVyQ2xhc3NOYW1lOmUuY3VycmVudEhlYWRlckNsYXNzTmFtZSxhY3RpdmVIZWFkZXJDbGFzc05hbWU6ZS5hY3RpdmVIZWFkZXJDbGFzc05hbWUscm93Q2xhc3NOYW1lOmUuY3VycmVudFJvd0NsYXNzTmFtZSxjb2x1bW5D''@;'; put 'put ''bGFzc05hbWU6ZS5jdXJyZW50Q29sQ2xhc3NOYW1lLGNlbGxBdHRyaWJ1dGVzOltbImFyaWEtc2VsZWN0ZWQiLCJ0cnVlIl1dLHJvd0luZGV4TWFwcGVyOnRoaXMudGFibGVQcm9wcy5yb3dJbmRleE1hcHBlcixjb2x1bW5JbmRleE1hcHBlcjp0aGlzLnRhYmxlUHJvcHMuY29sdW1uSW5kZXhN''@;'; put 'put ''YXBwZXIsZGlzYWJsZWRDZWxsU2VsZWN0aW9uOihyLGkpPT50aGlzLnRhYmxlUHJvcHMuaXNEaXNhYmxlZENlbGxTZWxlY3Rpb24ocixpKSxjZWxsQ29ybmVyVmlzaWJsZTooKT0+dGhpcy5pc0NlbGxDb3JuZXJWaXNpYmxlKCksYXJlYUNvcm5lclZpc2libGU6cj0+dGhpcy5pc0FyZWFDb3Ju''@;'; put 'put ''ZXJWaXNpYmxlKHIpLHZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkczpyPT50aGlzLnRhYmxlUHJvcHMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKHIpLHJlbmRlcmFibGVUb1Zpc3VhbENvb3JkczpyPT50aGlzLnRhYmxlUHJvcHMucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHIpLGNyZWF0ZUNl''@;'; put 'put ''bGxDb29yZHM6KHIsaSk9PnRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKHIsaSksY3JlYXRlQ2VsbFJhbmdlOihyLGksbyk9PnRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UocixpLG8pfSksUzAodGhpcyxacCxuZXcgdVJ0KHRoaXMuc2VsZWN0ZWRSYW5nZSx7Li4udGhp''@;'; put 'put ''cy50YWJsZVByb3BzLG5hdmlnYWJsZUhlYWRlcnM6KCk9PiEhZS5uYXZpZ2FibGVIZWFkZXJzLGZpeGVkUm93c0JvdHRvbTooKT0+TnVtYmVyKGUuZml4ZWRSb3dzQm90dG9tKSxtaW5TcGFyZVJvd3M6KCk9Pk51bWJlcihlLm1pblNwYXJlUm93cyksbWluU3BhcmVDb2xzOigpPT5OdW1iZXIo''@;'; put 'put ''ZS5taW5TcGFyZUNvbHMpLGF1dG9XcmFwUm93OigpPT4hIWUuYXV0b1dyYXBSb3csYXV0b1dyYXBDb2w6KCk9PiEhZS5hdXRvV3JhcENvbH0pKSxTMCh0aGlzLHVULG5ldyBkUnQodGhpcy5zZWxlY3RlZFJhbmdlLHsuLi50aGlzLnRhYmxlUHJvcHMsbmF2aWdhYmxlSGVhZGVyczooKT0+ISFl''@;'; put 'put ''Lm5hdmlnYWJsZUhlYWRlcnMsZml4ZWRSb3dzQm90dG9tOigpPT4wLG1pblNwYXJlUm93czooKT0+MCxtaW5TcGFyZUNvbHM6KCk9PjAsYXV0b1dyYXBSb3c6KCk9PiEwLGF1dG9XcmFwQ29sOigpPT4hMH0pKSxEZCh0aGlzLFpwKS5hZGRMb2NhbEhvb2soImJlZm9yZVRyYW5zZm9ybVN0YXJ0''@;'; put 'put ''IiwoLi4ucik9PnRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLC4uLnIpKSxEZCh0aGlzLFpwKS5hZGRMb2NhbEhvb2soImFmdGVyVHJhbnNmb3JtU3RhcnQiLCguLi5yKT0+dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0''@;'; put 'put ''IiwuLi5yKSksRGQodGhpcyxacCkuYWRkTG9jYWxIb29rKCJiZWZvcmVUcmFuc2Zvcm1FbmQiLCguLi5yKT0+dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1FbmQiLC4uLnIpKSxEZCh0aGlzLFpwKS5hZGRMb2NhbEhvb2soImFmdGVyVHJhbnNmb3JtRW5kIiwoLi4u''@;'; put 'put ''cik9PnRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLC4uLnIpKSxEZCh0aGlzLFpwKS5hZGRMb2NhbEhvb2soImluc2VydFJvd1JlcXVpcmUiLCguLi5yKT0+dGhpcy5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRSb3dSZXF1aXJlIiwuLi5yKSksRGQodGhpcyxacCku''@;'; put 'put ''YWRkTG9jYWxIb29rKCJpbnNlcnRDb2xSZXF1aXJlIiwoLi4ucik9PnRoaXMucnVuTG9jYWxIb29rcygiaW5zZXJ0Q29sUmVxdWlyZSIsLi4ucikpLERkKHRoaXMsWnApLmFkZExvY2FsSG9vaygiYmVmb3JlUm93V3JhcCIsKC4uLnIpPT50aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVJvd1dy''@;'; put 'put ''YXAiLC4uLnIpKSxEZCh0aGlzLFpwKS5hZGRMb2NhbEhvb2soImJlZm9yZUNvbHVtbldyYXAiLCguLi5yKT0+dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVDb2x1bW5XcmFwIiwuLi5yKSksRGQodGhpcyx1VCkuYWRkTG9jYWxIb29rKCJiZWZvcmVUcmFuc2Zvcm1TdGFydCIsKC4uLnIpPT50''@;'; put 'put ''aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZU1vZGlmeVRyYW5zZm9ybUZvY3VzIiwuLi5yKSksRGQodGhpcyx1VCkuYWRkTG9jYWxIb29rKCJhZnRlclRyYW5zZm9ybVN0YXJ0IiwoLi4ucik9PnRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsLi4ucikpfX1m''@;'; put 'put ''dW5jdGlvbiBiUnQobixlLHQscixpLG8sYSxsLHUsZyl7aWYoIW4uaXNTaW5nbGVIZWFkZXIoKSl7Y29uc3QgWj10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heChuLmZyb20ucm93Pz8wLDApLC0xKSxlZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcyhu''@;'; put 'put ''LnRvLnJvdz8/MCwtMSksdmU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsTWF0aC5tYXgobi5mcm9tLmNvbD8/MCwwKSksTWU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsbi50by5jb2w/PzApOyJzaW5nbGUiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rp''@;'; put 'put ''b25Nb2RlPyhyPy5hZGQoWikuY29tbWl0KCksaT8uYWRkKHZlKS5jb21taXQoKSx1Py5hZGQoWikuY29tbWl0KCksZz8uYWRkKHZlKS5jb21taXQoKSk6KHI/LmFkZChaKS5hZGQoZWUpLmNvbW1pdCgpLGk/LmFkZCh2ZSkuYWRkKE1lKS5jb21taXQoKSx1Py5hZGQoWikuYWRkKGVlKS5jb21t''@;'; put 'put ''aXQoKSxnPy5hZGQodmUpLmFkZChNZSkuY29tbWl0KCkpfWNvbnN0IEU9IURkKHRoaXMsQTcpJiZ0aGlzLmlzRW50aXJlUm93U2VsZWN0ZWQoKSYmKHQ+MCYmdD09PW4uZ2V0V2lkdGgoKXx8MD09PXQmJnRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpLE89IURkKHRoaXMsQTcpJiZ0aGlz''@;'; put 'put ''LmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKSYmKGU+MCYmZT09PW4uZ2V0SGVpZ2h0KCl8fDA9PT1lJiZ0aGlzLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpKTtFJiZvPy5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgobi5mcm9tLnJvdz8/MCwwKSxNYXRo''@;'; put 'put ''Lm1pbigtdGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpLC0xKSkpLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heChuLnRvLnJvdz8/MCwwKSwtMSkpLmNvbW1pdCgpLE8mJmE/LmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhN''@;'; put 'put ''YXRoLm1pbigtdGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpLC0xKSxNYXRoLm1heChuLmZyb20uY29sPz8wLDApKSkuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC0xLE1hdGgubWF4KG4udG8uY29sPz8wLDApKSkuY29tbWl0KCksRSYmTyYmbD8uYWRkKHRo''@;'; put 'put ''aXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksLXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSkpLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSwtMSkpLmNvbW1pdCgpfVlsKFpSZSxf''@;'; put 'put ''aCk7Y29uc3Qgd1J0PVpSZSx7cmVnaXN0ZXI6Q1J0LGdldEl0ZW06U1J0LGhhc0l0ZW06R1JlLGdldE5hbWVzOkVSdH09enAoImNlbGxUeXBlcyIpO2Z1bmN0aW9uIHJkZShuKXtyZXR1cm4gR1JlKG4pfHxKcihgWW91IGRlY2xhcmVkIGNlbGwgdHlwZSAiJHtufSIgYXMgYSBzdHJpbmcgdGhh''@;'; put 'put ''dCBpcyBub3QgbWFwcGVkIHRvIGEga25vd24gb2JqZWN0LlxuICAgICAgICAgICAgICAgICBDZWxsIHR5cGUgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYSBzdHJpbmcgbWFwcGVkIHRvIGFuIG9iamVjdCByZWdpc3RlcmVkIGJ5XG4gICAgICAgICAgICAgICAgICJIYW5kc29udGFibGUuY2VsbFR5''@;'; put 'put ''cGVzLnJlZ2lzdGVyQ2VsbFR5cGUiIG1ldGhvZGApLFNSdChuKX1mdW5jdGlvbiBVZihuLGUpeyJzdHJpbmciIT10eXBlb2YgbiYmKG49KGU9bikuQ0VMTF9UWVBFKTtjb25zdHtlZGl0b3I6dCxyZW5kZXJlcjpyLHZhbGlkYXRvcjppfT1lO3QmJkowKG4sdCksciYmQzAobixyKSxpJiZlNihu''@;'; put 'put ''LGkpLENSdChuLGUpfWZ1bmN0aW9uIFlZKG4sZSx0PW4pe2NvbnN0IHI9InN0cmluZyI9PXR5cGVvZiBlLnR5cGU/cmRlKGUudHlwZSk6ZS50eXBlO2lmKG4uX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyYmYWMoZSwobyxhKT0+e24uX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQ''@;'; put 'put ''cm9wcy5kZWxldGUoYSl9KSwhQ2EocikpcmV0dXJuO3Q9PT1uJiYhbi5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzJiYobi5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzPW5ldyBTZXQpO2NvbnN0IGk9e307YWMociwobyxhKT0+eyhmdW5jdGlvbiBNUnQobixlKXtyZXR1''@;'; put 'put ''cm4iQ0VMTF9UWVBFIiE9PW4mJihlLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHM/LmhhcyhuKXx8IVJkKGUsbikpfSkoYSx0KSYmKGlbYV09byxuLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHM/LmFkZChhKSl9KSxZZChuLGkpfWZ1bmN0aW9uIFpZKG4sZSl7bigpfHxK''@;'; put 'put ''cihgQXNzZXJ0aW9uIGZhaWxlZDogJHtlfWApfWZ1bmN0aW9uIHJPKG4pe3JldHVybiBudWxsPT1ufWNvbnN0ICRSZT0oKT0+KHtfYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzOnZvaWQgMCxfdXNlckRlZmluZWRNZXRhUHJvcHM6dm9pZCAwLGFjdGl2ZUhlYWRlckNsYXNzTmFtZToi''@;'; put 'put ''aHRfX2FjdGl2ZV9oaWdobGlnaHQiLGFsbG93RW1wdHk6ITAsYWxsb3dIdG1sOiExLGFsbG93SW5zZXJ0Q29sdW1uOiEwLGFsbG93SW5zZXJ0Um93OiEwLGFsbG93SW52YWxpZDohMCxhbGxvd1JlbW92ZUNvbHVtbjohMCxhbGxvd1JlbW92ZVJvdzohMCxhcmlhVGFnczohMCxhdXRvQ29sdW1u''@;'; put 'put ''U2l6ZTp2b2lkIDAsYXV0b1Jvd1NpemU6dm9pZCAwLGF1dG9XcmFwQ29sOiExLGF1dG9XcmFwUm93OiExLGJpbmRSb3dzV2l0aEhlYWRlcnM6dm9pZCAwLGNlbGw6W10sY2VsbHM6dm9pZCAwLGNoZWNrZWRUZW1wbGF0ZTp2b2lkIDAsY2xhc3NOYW1lOnZvaWQgMCxjb2xIZWFkZXJzOm51bGws''@;'; put 'put ''Y29sbGFwc2libGVDb2x1bW5zOnZvaWQgMCxjb2x1bW5IZWFkZXJIZWlnaHQ6dm9pZCAwLGNvbHVtbnM6dm9pZCAwLGNvbHVtblNvcnRpbmc6dm9pZCAwLGNvbHVtblN1bW1hcnk6dm9pZCAwLGNvbFdpZHRoczp2b2lkIDAsY29tbWVudGVkQ2VsbENsYXNzTmFtZToiaHRDb21tZW50Q2VsbCIs''@;'; put 'put ''Y29tbWVudHM6ITEsY29udGV4dE1lbnU6dm9pZCAwLGNvcHlhYmxlOiEwLGNvcHlQYXN0ZTohMCxjdXJyZW50Q29sQ2xhc3NOYW1lOnZvaWQgMCxjdXJyZW50SGVhZGVyQ2xhc3NOYW1lOiJodF9faGlnaGxpZ2h0IixjdXJyZW50Um93Q2xhc3NOYW1lOnZvaWQgMCxjdXN0b21Cb3JkZXJzOiEx''@;'; put 'put ''LGRhdGE6dm9pZCAwLGRhdGFQcm92aWRlcjp2b2lkIDAsZGF0YURvdE5vdGF0aW9uOiEwLGRhdGFTY2hlbWE6dm9pZCAwLGRhdGVGb3JtYXQ6e3llYXI6Im51bWVyaWMiLG1vbnRoOiIyLWRpZ2l0IixkYXk6IjItZGlnaXQifSx0aW1lRm9ybWF0Ontob3VyOiIyLWRpZ2l0IixtaW51dGU6IjIt''@;'; put 'put ''ZGlnaXQifSxkZWZhdWx0RGF0ZTp2b2lkIDAsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjohMSxkaWFsb2c6ITEsZHJhZ1RvU2Nyb2xsOiEwLGRyb3Bkb3duTWVudTp2b2lkIDAsZWRpdG9yOnZvaWQgMCxlbXB0eURhdGFTdGF0ZTohMSxlbnRlckJlZ2luc0VkaXRpbmc6ITAsZW50ZXJDb21taXRz''@;'; put 'put ''OiEwLGVudGVyTW92ZXM6e2NvbDowLHJvdzoxfSxleHBvcnRGaWxlOnZvaWQgMCxmaWxsSGFuZGxlOnthdXRvSW5zZXJ0Um93OiExfSxmaWx0ZXI6ITAsZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZTohMSxmaWx0ZXJzOnZvaWQgMCxmaWx0ZXJTZWxlY3RlZEl0ZW1zOiEwLGZpeGVkQ29sdW1uc0xl''@;'; put 'put ''ZnQ6MCxmaXhlZENvbHVtbnNTdGFydDowLGZpeGVkUm93c0JvdHRvbTowLGZpeGVkUm93c1RvcDowLGZvcm11bGFzOnZvaWQgMCxmcmFnbWVudFNlbGVjdGlvbjohMSxoYXNoTGVuZ3RoOnZvaWQgMCxoYXNoUmV2ZWFsRGVsYXk6dm9pZCAwLGhhc2hTeW1ib2w6IioiLGhlYWRlckNsYXNzTmFt''@;'; put 'put ''ZTp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxoaWRkZW5Db2x1bW5zOnZvaWQgMCxoaWRkZW5Sb3dzOnZvaWQgMCxpbml0aWFsU3RhdGU6dm9pZCAwLGludmFsaWRDZWxsQ2xhc3NOYW1lOiJodEludmFsaWQiLGltZUZhc3RFZGl0OiExLGlzRW1wdHlDb2wobil7bGV0IGUsdDtjb25zdCByPSEhdGhp''@;'; put 'put ''cy5nZXRTZXR0aW5ncygpLmRhdGFTY2hlbWEsaT10aGlzLmdldFNjaGVtYSgpLG89dGhpcy5jb2xUb1Byb3AobiksYT10aGlzLmNvdW50Um93cygpO2ZvcihlPTA7ZTxhO2UrKylpZih0PXRoaXMuZ2V0RGF0YUF0Q2VsbChlLG4pLCExPT09QWwodCkpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7''@;'; put 'put ''aWYoITE9PT1nNyhpW29dLHQpKXJldHVybiExO2NvbnRpbnVlfWlmKHImJmlbb109PT10KWNvbnRpbnVlO3JldHVybiExfXJldHVybiEwfSxpc0VtcHR5Um93KG4pe2xldCBlLHQ7Y29uc3Qgcj0hIXRoaXMuZ2V0U2V0dGluZ3MoKS5kYXRhU2NoZW1hLGk9dGhpcy5nZXRTY2hlbWEoKSxvPXRo''@;'; put 'put ''aXMuY291bnRDb2xzKCk7Zm9yKGU9MDtlPG87ZSsrKWlmKHQ9dGhpcy5nZXREYXRhQXRDZWxsKG4sZSksITE9PT1BbCh0KSl7Y29uc3QgYT10aGlzLmNvbFRvUHJvcChlKTtpZigib2JqZWN0Ij09dHlwZW9mIHQpe2lmKCExPT09ZzcoaVthXSx0KSlyZXR1cm4hMTtjb250aW51ZX1pZihyJiZp''@;'; put 'put ''W2FdPT09dCljb250aW51ZTtyZXR1cm4hMX1yZXR1cm4hMH0sbGFiZWw6dm9pZCAwLGxhbmd1YWdlOiJlbi1VUyIsbGF5b3V0RGlyZWN0aW9uOiJpbmhlcml0IixsYXlvdXQ6dm9pZCAwLGxpY2Vuc2VLZXk6dm9pZCAwLGxvY2FsZToiZW4tVVMiLGxvYWRpbmc6ITEsbm90aWZpY2F0aW9uOiEx''@;'; put 'put ''LG1hbnVhbENvbHVtbkZyZWV6ZTp2b2lkIDAsbWFudWFsQ29sdW1uTW92ZTp2b2lkIDAsbWFudWFsQ29sdW1uUmVzaXplOnZvaWQgMCxtYW51YWxSb3dNb3ZlOnZvaWQgMCxtYW51YWxSb3dSZXNpemU6dm9pZCAwLG1heENvbHM6MS8wLG1heFJvd3M6MS8wLG1heFNlbGVjdGlvbnM6dm9pZCAw''@;'; put 'put ''LG1lcmdlQ2VsbHM6ITEsbWluQ29sczowLG1pblJvd0hlaWdodHM6dm9pZCAwLG1pblJvd3M6MCxtaW5TcGFyZUNvbHM6MCxtaW5TcGFyZVJvd3M6MCxtdWx0aUNvbHVtblNvcnRpbmc6dm9pZCAwLG5hdmlnYWJsZUhlYWRlcnM6ITEsdGFiTmF2aWdhdGlvbjohMCxuZXN0ZWRIZWFkZXJzOnZv''@;'; put 'put ''aWQgMCxuZXN0ZWRSb3dzOnZvaWQgMCxub1dvcmRXcmFwQ2xhc3NOYW1lOiJodE5vV3JhcCIsbnVtZXJpY0Zvcm1hdDp2b2lkIDAsb2JzZXJ2ZURPTVZpc2liaWxpdHk6ITAsb3V0c2lkZUNsaWNrRGVzZWxlY3RzOiEwLHBhZ2luYXRpb246dm9pZCAwLHBsYWNlaG9sZGVyOnZvaWQgMCxwbGFj''@;'; put 'put ''ZWhvbGRlckNlbGxDbGFzc05hbWU6Imh0UGxhY2Vob2xkZXIiLHByZXZlbnRPdmVyZmxvdzohMSxwcmV2ZW50V2hlZWw6ITEscmVhZE9ubHk6ITEscmVhZE9ubHlDZWxsQ2xhc3NOYW1lOiJodERpbW1lZCIscmVuZGVyQWxsUm93czohMSxyZW5kZXJBbGxDb2x1bW5zOiExLHJlbmRlcmVyOnZv''@;'; put 'put ''aWQgMCx2YWx1ZUZvcm1hdHRlcjp2b2lkIDAsdmFsdWVQYXJzZXI6dm9pZCAwLHJvd0hlYWRlcnM6dm9pZCAwLHJvd0hlYWRlcldpZHRoOnZvaWQgMCxyb3dIZWlnaHRzOnZvaWQgMCxzZWFyY2g6ITEsc2VhcmNoSW5wdXQ6ITAsc2VsZWN0aW9uTW9kZToibXVsdGlwbGUiLHNlbGVjdE9wdGlv''@;'; put 'put ''bnM6dm9pZCAwLHNraXBDb2x1bW5PblBhc3RlOiExLHNraXBSb3dPblBhc3RlOiExLHNvcnRCeVJlbGV2YW5jZTohMCxzb3VyY2VTb3J0RnVuY3Rpb246dm9pZCAwLHNvdXJjZTp2b2lkIDAsc3RhcnRDb2xzOjUsc3RhcnRSb3dzOjUsc3RyZXRjaEg6Im5vbmUiLHN0cmljdDp2b2lkIDAsdGFi''@;'; put 'put ''bGVDbGFzc05hbWU6dm9pZCAwLHRleHRFbGxpcHNpczohMSx0aGVtZU5hbWU6dm9pZCAwLHRoZW1lOnZvaWQgMCxpbmplY3RDb3JlQ3NzOiEwLHRhYk1vdmVzOntyb3c6MCxjb2w6MX0sdGl0bGU6dm9pZCAwLHRyaW1Ecm9wZG93bjohMCx0cmltUm93czp2b2lkIDAsdHJpbVdoaXRlc3BhY2U6''@;'; put 'put ''ITAsdHlwZToidGV4dCIsdW5jaGVja2VkVGVtcGxhdGU6dm9pZCAwLHVuZG86ITAsdmFsaWRhdG9yOnZvaWQgMCxzb3VyY2VEYXRhVmFsaWRhdG9yOnZvaWQgMCxzb3VyY2VEYXRhV2FybmluZ01lc3NhZ2U6dm9pZCAwLHZhbHVlR2V0dGVyOnZvaWQgMCx2YWx1ZVNldHRlcjp2b2lkIDAsdmll''@;'; put 'put ''d3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ6ImF1dG8iLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OiJhdXRvIix2aWV3cG9ydENvbHVtblJlbmRlcmluZ1RocmVzaG9sZDowLHZpZXdwb3J0Um93UmVuZGVyaW5nVGhyZXNob2xkOjAsdmlzaWJsZVJvd3M6MTAsd2lkdGg6dm9pZCAwLHdv''@;'; put 'put ''cmRXcmFwOiEwLHNhbml0aXplcjp2b2lkIDAscGFyc2VQYXN0ZWRWYWx1ZTohMX0pO2NsYXNzIEFSdHtnZXRNZXRhQ29uc3RydWN0b3IoKXtyZXR1cm4gdGhpcy5tZXRhQ3Rvcn1nZXRNZXRhKCl7cmV0dXJuIHRoaXMubWV0YX11cGRhdGVNZXRhKGUpe1lkKHRoaXMubWV0YSxlKSxZWSh0aGlz''@;'; put 'put ''Lm1ldGEsey4uLmUsdHlwZTplLnR5cGU/P3RoaXMubWV0YS50eXBlfSxlKX1jb25zdHJ1Y3RvcihlKXt0aGlzLm1ldGFDdG9yPWNsYXNze30sdGhpcy5tZXRhPXRoaXMubWV0YUN0b3IucHJvdG90eXBlLFlkKHRoaXMubWV0YSwkUmUoKSksdGhpcy5tZXRhLmluc3RhbmNlPWV9fWNsYXNzIGtS''@;'; put 'put ''dHtnZXRNZXRhKCl7cmV0dXJuIHRoaXMubWV0YX11cGRhdGVNZXRhKGUpe1lkKHRoaXMubWV0YSxlKSxZWSh0aGlzLm1ldGEsZSxlKX1jb25zdHJ1Y3RvcihlKXtjb25zdCB0PWUuZ2V0TWV0YUNvbnN0cnVjdG9yKCk7dGhpcy5tZXRhPW5ldyB0fX1jbGFzcyBHWXtvYnRhaW4oZSl7WlkoKCk9''@;'; put 'put ''PnB3KGUpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyLiIpO2NvbnN0IHQ9dGhpcy5fZ2V0U3RvcmFnZUluZGV4QnlLZXkoZSk7bGV0IHI7aWYodD49MClyPXRoaXMuZGF0YVt0XSx2b2lkIDA9PT1yJiYocj10aGlzLnZhbHVlRmFjdG9yeShlKSx0aGlzLmRhdGFbdF09cik7ZWxzZXty''@;'; put 'put ''PXRoaXMudmFsdWVGYWN0b3J5KGUpO2NvbnN0IGk9dGhpcy5ob2xlcy5zaXplPjA/dGhpcy5ob2xlcy52YWx1ZXMoKS5uZXh0KCkudmFsdWU6dm9pZCAwO3ZvaWQgMCE9PWk/KHRoaXMuaG9sZXMuZGVsZXRlKGkpLHRoaXMuZGF0YVtpXT1yLHRoaXMuaW5kZXhbZV09aSk6KHRoaXMuZGF0YS5w''@;'; put 'put ''dXNoKHIpLHRoaXMuaW5kZXhbZV09dGhpcy5kYXRhLmxlbmd0aC0xKX1yZXR1cm4gcn1pbnNlcnQoZSx0PTEpe1pZKCgpPT5wdyhlKXx8ck8oZSksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIgb3IgbnVsbC91bmRlZmluZWQgYXJndW1lbnQuIik7Y29uc3Qgcj1bXSxpPXRoaXMuZGF0''@;'; put 'put ''YS5sZW5ndGg7Zm9yKGxldCBhPTA7YTx0O2ErKylyLnB1c2goaSthKSx0aGlzLmRhdGEucHVzaCh2b2lkIDApO2NvbnN0IG89ck8oZSk/dGhpcy5pbmRleC5sZW5ndGg6ZTt0aGlzLmluZGV4PVsuLi50aGlzLmluZGV4LnNsaWNlKDAsbyksLi4uciwuLi50aGlzLmluZGV4LnNsaWNlKG8pXX1y''@;'; put 'put ''ZW1vdmUoZSx0PTEpe1pZKCgpPT5wdyhlKXx8ck8oZSksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIgb3IgbnVsbC91bmRlZmluZWQgYXJndW1lbnQuIik7Y29uc3Qgcj10aGlzLmluZGV4LnNwbGljZShyTyhlKT90aGlzLmluZGV4Lmxlbmd0aC10OmUsdCk7Zm9yKGxldCBpPTA7aTxy''@;'; put 'put ''Lmxlbmd0aDtpKyspe2NvbnN0IG89cltpXTsibnVtYmVyIj09dHlwZW9mIG8mJnRoaXMuaG9sZXMuYWRkKG8pfX1zaXplKCl7cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGgtdGhpcy5ob2xlcy5zaXplfXZhbHVlcygpe3JldHVybiB0aGlzLmRhdGEuZmlsdGVyKChlLHQpPT52b2lkIDAhPT1lJiYh''@;'; put 'put ''dGhpcy5ob2xlcy5oYXModCkpW1N5bWJvbC5pdGVyYXRvcl0oKX1lbnRyaWVzKCl7Y29uc3QgZT1bXTtmb3IobGV0IGk9MDtpPHRoaXMuZGF0YS5sZW5ndGg7aSsrKXtjb25zdCBvPXRoaXMuX2dldEtleUJ5U3RvcmFnZUluZGV4KGkpLGE9dGhpcy5kYXRhW2ldOy0xIT09byYmdm9pZCAwIT09''@;'; put 'put ''YSYmZS5wdXNoKFtvLGFdKX1sZXQgdD0wO2NvbnN0IHI9e25leHQoKXtpZih0PGUubGVuZ3RoKXtjb25zdCBpPWVbdF07cmV0dXJuIHQrPTEse3ZhbHVlOmksZG9uZTohMX19cmV0dXJue2RvbmU6ITAsdmFsdWU6dm9pZCAwfX0sW1N5bWJvbC5pdGVyYXRvcl06KCk9PnJ9O3JldHVybiByfWNs''@;'; put 'put ''ZWFyKCl7dGhpcy5kYXRhPVtdLHRoaXMuaW5kZXg9W10sdGhpcy5ob2xlcy5jbGVhcigpfV9nZXRTdG9yYWdlSW5kZXhCeUtleShlKXtyZXR1cm4gdGhpcy5pbmRleC5sZW5ndGg+ZT90aGlzLmluZGV4W2VdOi0xfV9nZXRLZXlCeVN0b3JhZ2VJbmRleChlKXtyZXR1cm4gdGhpcy5pbmRleC5p''@;'; put 'put ''bmRleE9mKGUpfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMuZW50cmllcygpfWNvbnN0cnVjdG9yKGUpe3RoaXMuZGF0YT1bXSx0aGlzLmluZGV4PVtdLHRoaXMuaG9sZXM9bmV3IFNldCx0aGlzLnZhbHVlRmFjdG9yeT1lfX1jb25zdCBSUnQ9WyJkYXRhIiwid2lkdGgiXTtjbGFz''@;'; put 'put ''cyBJUnR7dXBkYXRlTWV0YShlLHQpe2NvbnN0IHI9dGhpcy5nZXRNZXRhKGUpO1lkKHIsdCksWVkocix0KX1jcmVhdGVDb2x1bW4oZSx0KXt0aGlzLm1ldGFzLmluc2VydChlLHQpfXJlbW92ZUNvbHVtbihlLHQpe3RoaXMubWV0YXMucmVtb3ZlKGUsdCl9Z2V0TWV0YShlKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5tZXRhcy5vYnRhaW4oZSl9Z2V0TWV0YUNvbnN0cnVjdG9yKGUpe3JldHVybiB0aGlzLm1ldGFzLm9idGFpbihlKS5jb25zdHJ1Y3Rvcn1jbGVhckNhY2hlKCl7dGhpcy5tZXRhcy5jbGVhcigpfV9jcmVhdGVNZXRhKCl7cmV0dXJuIGZ1bmN0aW9uIFRSdChuLGU9W10pe2Z1bmN0aW9uIHQo''@;'; put 'put ''KXt9RHhlKHQsbik7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspdC5wcm90b3R5cGVbZVtyXV09dm9pZCAwO3JldHVybiB0fSh0aGlzLmdsb2JhbE1ldGEuZ2V0TWV0YUNvbnN0cnVjdG9yKCksUlJ0KS5wcm90b3R5cGV9Y29uc3RydWN0b3IoZSl7dGhpcy5tZXRhcz1uZXcgR1koKCk9PnRo''@;'; put 'put ''aXMuX2NyZWF0ZU1ldGEoKSksdGhpcy5nbG9iYWxNZXRhPWUsdGhpcy5tZXRhcz1uZXcgR1koKCk9PnRoaXMuX2NyZWF0ZU1ldGEoKSl9fWZ1bmN0aW9uIHFSZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxk''@;'; put 'put ''IG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiAkWShuLGUpe3JldHVybiBmdW5jdGlvbiBMUnQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLHFSZShuLGUsImdldCIpKX1mdW5jdGlvbiBpZGUobixlLHQpe3JldHVybiBmdW5jdGlv''@;'; put 'put ''biBPUnQobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLHFSZShuLGUsInNldCIpLHQpLHR9dmFyIGFfPW5l''@;'; put 'put ''dyBXZWFrTWFwO2NsYXNzIEZSdHtlbmFibGVVc2VyRGVmaW5lZE1ldGFSZWNvcmRpbmcoKXskWSh0aGlzLGFfKT4wJiZpZGUodGhpcyxhXywkWSh0aGlzLGFfKS0xKX1kaXNhYmxlVXNlckRlZmluZWRNZXRhUmVjb3JkaW5nKCl7aWRlKHRoaXMsYV8sJFkodGhpcyxhXykrMSl9dXBkYXRlTWV0''@;'; put 'put ''YShlLHQscil7Y29uc3QgaT10aGlzLmdldE1ldGEoZSx0KTtZZChpLHIpLFlZKGkscil9Y3JlYXRlUm93KGUsdCl7dGhpcy5tZXRhcy5pbnNlcnQoZSx0KX1jcmVhdGVDb2x1bW4oZSx0KXtmb3IobGV0IHI9MDtyPHRoaXMubWV0YXMuc2l6ZSgpO3IrKyl0aGlzLm1ldGFzLm9idGFpbihyKS5p''@;'; put 'put ''bnNlcnQoZSx0KX1yZW1vdmVSb3coZSx0KXt0aGlzLm1ldGFzLnJlbW92ZShlLHQpfXJlbW92ZUNvbHVtbihlLHQpe2ZvcihsZXQgcj0wO3I8dGhpcy5tZXRhcy5zaXplKCk7cisrKXRoaXMubWV0YXMub2J0YWluKHIpLnJlbW92ZShlLHQpfWdldE1ldGEoZSx0LHIpe2NvbnN0IGk9dGhpcy5t''@;'; put 'put ''ZXRhcy5vYnRhaW4oZSkub2J0YWluKHQpO3JldHVybiB2b2lkIDA9PT1yP2k6aVtyXX1zZXRNZXRhKGUsdCxyLGkpe2NvbnN0IG89dGhpcy5tZXRhcy5vYnRhaW4oZSkub2J0YWluKHQpO28uX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcz8uZGVsZXRlKHIpLG9bcl09aSwwPT09JFko''@;'; put 'put ''dGhpcyxhXyk/KHZvaWQgMD09PW8uX3VzZXJEZWZpbmVkTWV0YVByb3BzJiYoby5fdXNlckRlZmluZWRNZXRhUHJvcHM9bmV3IFNldCksby5fdXNlckRlZmluZWRNZXRhUHJvcHMuYWRkKHIpKTpvLl91c2VyRGVmaW5lZE1ldGFQcm9wcz8uZGVsZXRlKHIpfXJlbW92ZU1ldGEoZSx0LHIpe2Nv''@;'; put 'put ''bnN0IGk9dGhpcy5tZXRhcy5vYnRhaW4oZSkub2J0YWluKHQpO2RlbGV0ZSBpW3JdLGkuX3VzZXJEZWZpbmVkTWV0YVByb3BzPy5kZWxldGUocil9Z2V0TWV0YXMoKXtjb25zdCBlPVtdLHQ9QXJyYXkuZnJvbSh0aGlzLm1ldGFzLnZhbHVlcygpKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3Ir''@;'; put 'put ''Kylabyh0W3JdKSYmZS5wdXNoKC4uLkFycmF5LmZyb20odFtyXS52YWx1ZXMoKSkpO3JldHVybiBlfWdldE1ldGFzQXRSb3coZSl7WlkoKCk9PnB3KGUpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyLiIpO2NvbnN0IHQ9bmV3IE1hcCh0aGlzLm1ldGFzKTtyZXR1cm4gdC5oYXMoZSk/''@;'; put 'put ''QXJyYXkuZnJvbSh0LmdldChlKSkuc29ydCgoW3JdLFtpXSk9PnItaSkubWFwKChbLHJdKT0+cik6W119Z2V0VXNlckRlZmluZWRNZXRhcygpe2NvbnN0IGU9W107Zm9yKGNvbnN0W3Qscl1vZiB0aGlzLm1ldGFzKWZvcihjb25zdFtpLG9db2Ygcil7Y29uc3QgYT1vLl91c2VyRGVmaW5lZE1l''@;'; put 'put ''dGFQcm9wczt2b2lkIDAhPT1hJiZhLmZvckVhY2gobD0+e1JkKG8sbCkmJmUucHVzaCh7cGh5c2ljYWxSb3c6dCxwaHlzaWNhbENvbHVtbjppLGtleTpsLHZhbHVlOm9bbF19KX0pfXJldHVybiBlfWNsZWFyQ2FjaGUoKXt0aGlzLm1ldGFzLmNsZWFyKCl9X2NyZWF0ZVJvdygpe3JldHVybiBu''@;'; put 'put ''ZXcgR1koZT0+dGhpcy5fY3JlYXRlTWV0YShlKSl9X2NyZWF0ZU1ldGEoZSl7cmV0dXJuIG5ldyh0aGlzLmNvbHVtbk1ldGEuZ2V0TWV0YUNvbnN0cnVjdG9yKGUpKX1jb25zdHJ1Y3RvcihlKXsoZnVuY3Rpb24gTlJ0KG4sZSx0KXsoZnVuY3Rpb24gRFJ0KG4sZSl7aWYoZS5oYXMobikpdGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sZSksZS5zZXQobix0KX0pKHRoaXMsYV8se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHRoaXMubWV0YXM9bmV3IEdZKCgpPT50aGlz''@;'; put 'put ''Ll9jcmVhdGVSb3coKSksaWRlKHRoaXMsYV8sMCksdGhpcy5jb2x1bW5NZXRhPWV9fWNsYXNzIEtSZXtnZXRHbG9iYWxNZXRhKCl7cmV0dXJuIHRoaXMuZ2xvYmFsTWV0YS5nZXRNZXRhKCl9dXBkYXRlR2xvYmFsTWV0YShlKXt0aGlzLmdsb2JhbE1ldGEudXBkYXRlTWV0YShlKX1nZXRUYWJs''@;'; put 'put ''ZU1ldGEoKXtyZXR1cm4gdGhpcy50YWJsZU1ldGEuZ2V0TWV0YSgpfXVwZGF0ZVRhYmxlTWV0YShlKXt0aGlzLnRhYmxlTWV0YS51cGRhdGVNZXRhKGUpfWdldENvbHVtbk1ldGEoZSl7cmV0dXJuIHRoaXMuY29sdW1uTWV0YS5nZXRNZXRhKGUpfXVwZGF0ZUNvbHVtbk1ldGEoZSx0KXt0aGlz''@;'; put 'put ''LmNvbHVtbk1ldGEudXBkYXRlTWV0YShlLHQpfWdldENlbGxNZXRhKGUsdCxyKXtjb25zdCBpPXRoaXMuY2VsbE1ldGEuZ2V0TWV0YShlLHQpO3JldHVybiBpLnZpc3VhbFJvdz1yLnZpc3VhbFJvdyxpLnZpc3VhbENvbD1yLnZpc3VhbENvbHVtbixpLnJvdz1lLGkuY29sPXQsci5za2lwTWV0''@;'; put 'put ''YUV4dGVuc2lvbnx8dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckdldENlbGxNZXRhIixpKSxpfWdldENlbGxNZXRhS2V5VmFsdWUoZSx0LHIpe3JldHVybiJzdHJpbmciIT10eXBlb2YgciYmSnIoIlRoZSBwYXNzZWQgY2VsbCBtZXRhIG9iamVjdCBrZXkgaXMgbm90IGEgc3RyaW5nIiksdGhp''@;'; put 'put ''cy5jZWxsTWV0YS5nZXRNZXRhKGUsdCxyKX1zZXRDZWxsTWV0YShlLHQscixpKXt0aGlzLmNlbGxNZXRhLnNldE1ldGEoZSx0LHIsaSl9dXBkYXRlQ2VsbE1ldGEoZSx0LHIpe3RoaXMuY2VsbE1ldGEudXBkYXRlTWV0YShlLHQscil9cmVtb3ZlQ2VsbE1ldGEoZSx0LHIpe3RoaXMuY2VsbE1l''@;'; put 'put ''dGEucmVtb3ZlTWV0YShlLHQscil9Z2V0Q2VsbHNNZXRhKCl7cmV0dXJuIHRoaXMuY2VsbE1ldGEuZ2V0TWV0YXMoKX1nZXRDZWxsc01ldGFBdFJvdyhlKXtyZXR1cm4gdGhpcy5jZWxsTWV0YS5nZXRNZXRhc0F0Um93KGUpfWdldFVzZXJEZWZpbmVkQ2VsbE1ldGFzKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y2VsbE1ldGEuZ2V0VXNlckRlZmluZWRNZXRhcygpfWVuYWJsZVVzZXJEZWZpbmVkTWV0YVJlY29yZGluZygpe3RoaXMuY2VsbE1ldGEuZW5hYmxlVXNlckRlZmluZWRNZXRhUmVjb3JkaW5nKCl9ZGlzYWJsZVVzZXJEZWZpbmVkTWV0YVJlY29yZGluZygpe3RoaXMuY2VsbE1ldGEuZGlzYWJs''@;'; put 'put ''ZVVzZXJEZWZpbmVkTWV0YVJlY29yZGluZygpfWNyZWF0ZVJvdyhlLHQ9MSl7dGhpcy5jZWxsTWV0YS5jcmVhdGVSb3coZSx0KX1yZW1vdmVSb3coZSx0PTEpe3RoaXMuY2VsbE1ldGEucmVtb3ZlUm93KGUsdCl9Y3JlYXRlQ29sdW1uKGUsdD0xKXt0aGlzLmNlbGxNZXRhLmNyZWF0ZUNvbHVt''@;'; put 'put ''bihlLHQpLHRoaXMuY29sdW1uTWV0YS5jcmVhdGVDb2x1bW4oZSx0KX1yZW1vdmVDb2x1bW4oZSx0PTEpe3RoaXMuY2VsbE1ldGEucmVtb3ZlQ29sdW1uKGUsdCksdGhpcy5jb2x1bW5NZXRhLnJlbW92ZUNvbHVtbihlLHQpfWNsZWFyQ2VsbHNDYWNoZSgpe3RoaXMuY2VsbE1ldGEuY2xlYXJD''@;'; put 'put ''YWNoZSgpfWNsZWFyQ2FjaGUoKXt0aGlzLmNlbGxNZXRhLmNsZWFyQ2FjaGUoKSx0aGlzLmNvbHVtbk1ldGEuY2xlYXJDYWNoZSgpfWNvbnN0cnVjdG9yKGUsdD17fSxyPVtdKXt0aGlzLmhvdD1lLHRoaXMuZ2xvYmFsTWV0YT1uZXcgQVJ0KGUpLHRoaXMudGFibGVNZXRhPW5ldyBrUnQodGhp''@;'; put 'put ''cy5nbG9iYWxNZXRhKSx0aGlzLmNvbHVtbk1ldGE9bmV3IElSdCh0aGlzLmdsb2JhbE1ldGEpLHRoaXMuY2VsbE1ldGE9bmV3IEZSdCh0aGlzLmNvbHVtbk1ldGEpLHIuZm9yRWFjaChpPT5uZXcgaSh0aGlzKSksdGhpcy5nbG9iYWxNZXRhLnVwZGF0ZU1ldGEodCl9fVlsKEtSZSxfaCk7Y2xh''@;'; put 'put ''c3MgUFJ0e2V4dGVuZENlbGxNZXRhKGUpe2NvbnN0IHQ9ZS5yb3cscj1lLmNvbDtpZih0aGlzLm1ldGFTeW5jTWVtby5nZXQodCk/LmhhcyhyKSlyZXR1cm47Y29uc3QgaT1lLnZpc3VhbFJvdyxvPWUudmlzdWFsQ29sLGE9dGhpcy5tZXRhTWFuYWdlci5ob3QsbD1hLmNvbFRvUHJvcChvKTtl''@;'; put 'put ''LnByb3A9bCxhLnJ1bkhvb2tzKCJiZWZvcmVHZXRDZWxsTWV0YSIsaSxvLGUpO2NvbnN0IHU9UmQoZSwidHlwZSIpP2UudHlwZTpudWxsO2xldCBnPV9hKGUuY2VsbHMpP2UuY2VsbHModCxyLGwpOm51bGw7dSYmKGc/Zy50eXBlPWcudHlwZT8/dTpnPXt0eXBlOnV9KSxnJiZ0aGlzLm1ldGFN''@;'; put 'put ''YW5hZ2VyLnVwZGF0ZUNlbGxNZXRhKHQscixnKSxhLnJ1bkhvb2tzKCJhZnRlckdldENlbGxNZXRhIixpLG8sZSksdGhpcy5tZXRhU3luY01lbW8uaGFzKHQpfHx0aGlzLm1ldGFTeW5jTWVtby5zZXQodCxuZXcgU2V0KSx0aGlzLm1ldGFTeW5jTWVtby5nZXQodCkuYWRkKHIpfWNvbnN0cnVj''@;'; put 'put ''dG9yKGUpe3RoaXMubWV0YVN5bmNNZW1vPW5ldyBNYXAsdGhpcy5tZXRhTWFuYWdlcj1lLGUuYWRkTG9jYWxIb29rKCJhZnRlckdldENlbGxNZXRhIiwoLi4udCk9Pnt0aGlzLmV4dGVuZENlbGxNZXRhKHRbMF0pfSksR28uZ2V0U2luZ2xldG9uKCkuYWRkKCJiZWZvcmVSZW5kZXIiLHQ9Pnt0''@;'; put 'put ''JiZ0aGlzLm1ldGFTeW5jTWVtby5jbGVhcigpfSx0aGlzLm1ldGFNYW5hZ2VyLmhvdCl9fWZ1bmN0aW9uIFhSZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBl''@;'; put 'put ''LmdldChuKX12YXIgb2RlPW5ldyBXZWFrTWFwO2NsYXNzIFdSdHtleHRlbmRNZXRhUHJvcHMoKXt0aGlzLnByb3BEZXNjcmlwdG9ycy5mb3JFYWNoKChlLHQpPT57Y29uc3R7aW5pdE9ubHk6cix0YXJnZXQ6aSxvbkNoYW5nZTpvfT1lLGE9InN0cmluZyI9PXR5cGVvZiBpLGw9YT9pOnQsdT1g''@;'; put 'put ''XyR7bH1gO3RoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhW3VdPXRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhW2xdLG8/KHRoaXMuaW5zdGFsbFByb3BXYXRjaGVyKHQsdSxvKSxhJiZ0aGlzLmluc3RhbGxQcm9wV2F0Y2hlcihpLHUsbykpOnImJih0aGlzLmluc3RhbGxQ''@;'; put 'put ''cm9wV2F0Y2hlcih0LHUsZnVuY3Rpb24galJ0KG4sZSl7cmV0dXJuIGZ1bmN0aW9uIFZSdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sWFJlKG4sZSwiZ2V0IikpfSh0aGlzLG9kZSkpLHRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhLl9pbml0T25s''@;'; put 'put ''eVNldHRpbmdzfHwodGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGEuX2luaXRPbmx5U2V0dGluZ3M9W10pLHRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhLl9pbml0T25seVNldHRpbmdzLnB1c2godCkpfSl9aW5zdGFsbFByb3BXYXRjaGVyKGUsdCxyKXtjb25zdHt1c2Fn''@;'; put 'put ''ZVRyYWNrZXI6aX09dGhpcyxvPXIuYmluZCh0aGlzKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGEsZSx7Z2V0KCl7cmV0dXJuIHRoaXNbdF19LHNldChhKXtjb25zdCBsPSFpLmhhcyhlKTtpLmFkZChlKSxvKGUsYSxsKSx0aGlzW3RdPWF9''@;'; put 'put ''LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9Y29uc3RydWN0b3IoZSl7KGZ1bmN0aW9uIFVSdChuLGUsdCl7KGZ1bmN0aW9uIEhSdChuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMg''@;'; put 'put ''dHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLGUpLGUuc2V0KG4sdCl9KSh0aGlzLG9kZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdGhpcy51c2FnZVRyYWNrZXI9bmV3IFNldCx0aGlzLnByb3BEZXNjcmlwdG9ycz1uZXcgTWFwKFtbImFyaWFUYWdzIix7aW5pdE9ubHk6ITB9XSxbImZp''@;'; put 'put ''eGVkQ29sdW1uc0xlZnQiLHt0YXJnZXQ6ImZpeGVkQ29sdW1uc1N0YXJ0IixvbkNoYW5nZSh0KXt0aGlzLm1ldGFNYW5hZ2VyLmhvdC5pc1J0bCgpJiYiZml4ZWRDb2x1bW5zTGVmdCI9PT10JiZKcigiVGhlIGBmaXhlZENvbHVtbnNMZWZ0YCBpcyBub3Qgc3VwcG9ydGVkIGZvciBSVEwuIFBs''@;'; put 'put ''ZWFzZSB1c2Ugb3B0aW9uIGBmaXhlZENvbHVtbnNTdGFydGAuIiksdGhpcy51c2FnZVRyYWNrZXIuaGFzKCJmaXhlZENvbHVtbnNMZWZ0IikmJnRoaXMudXNhZ2VUcmFja2VyLmhhcygiZml4ZWRDb2x1bW5zU3RhcnQiKSYmSnIoIlRoZSBgZml4ZWRDb2x1bW5zTGVmdGAgYW5kIGBmaXhlZENv''@;'; put 'put ''bHVtbnNTdGFydGAgc2hvdWxkIG5vdCBiZSB1c2VkIHRvZ2V0aGVyLiBQbGVhc2UgdXNlIG9ubHkgdGhlIG9wdGlvbiBgZml4ZWRDb2x1bW5zU3RhcnRgLiIpfX1dLFsibGF5b3V0RGlyZWN0aW9uIix7aW5pdE9ubHk6ITB9XSxbInJlbmRlckFsbENvbHVtbnMiLHtpbml0T25seTohMH1dLFsi''@;'; put 'put ''cmVuZGVyQWxsUm93cyIse2luaXRPbmx5OiEwfV1dKSxmdW5jdGlvbiB6UnQobixlLHQpe3JldHVybiBmdW5jdGlvbiBCUnQobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVh''@;'; put 'put ''ZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLFhSZShuLGUsInNldCIpLHQpLHR9KHRoaXMsb2RlLCh0LHIsaSk9PntpfHxKcihgVGhlIFxgJHt0fVxgIG9wdGlvbiBjYW4gbm90IGJlIHVwZGF0ZWQgYWZ0ZXIgdGhlIEhhbmRzb250YWJsZSBpcyBpbml0aWFsaXplZC5gKX0p''@;'; put 'put ''LHRoaXMubWV0YU1hbmFnZXI9ZSx0aGlzLmV4dGVuZE1ldGFQcm9wcygpfX1jb25zdCBaUnQ9Y2xhc3MgWVJ0e21vZGlmeVJvd0RhdGEoZSl7bGV0IHQ7cmV0dXJuIHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVJvd0RhdGEiKSYmKHQ9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVJvd0RhdGEi''@;'; put 'put ''LGUpKSx2b2lkIDA9PT10fHxOdW1iZXIuaXNJbnRlZ2VyKHQpP3RoaXMuZGF0YVtlXTp0fWdldERhdGEoZT0hMSl7cmV0dXJuIHRoaXMuZGF0YT8ubGVuZ3RoP2V8fHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVNvdXJjZURhdGEiKXx8dGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5Um93RGF0YSIp''@;'; put 'put ''P3RoaXMuZ2V0QnlSYW5nZShudWxsLG51bGwsZSk6dGhpcy5kYXRhLm1hcCh0UmUpOnRoaXMuZGF0YX1zZXREYXRhKGUpe3RoaXMuZGF0YT1lfWdldEF0Q29sdW1uKGUpe2NvbnN0IHQ9W107cmV0dXJuIFhuKHRoaXMuZGF0YSwocixpKT0+e2NvbnN0IG89dGhpcy5nZXRBdENlbGwoaSxlKTt0''@;'; put 'put ''LnB1c2gobyl9KSx0fWdldEF0Um93KGUsdCxyLGk9ITEpe2NvbnN0IG89dm9pZCAwPT09dCYmdm9pZCAwPT09cix7ZGF0YURvdE5vdGF0aW9uOmF9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7bGV0IGw9bnVsbCx1PW51bGw7aWYobD10aGlzLm1vZGlmeVJvd0RhdGEoZSksQXJyYXkuaXNBcnJh''@;'; put 'put ''eShsKSl1PVtdLG8/bC5mb3JFYWNoKChnLEUpPT57dVtFXT10aGlzLmdldEF0UGh5c2ljYWxDZWxsKGUsRSxsKX0pOlZhKHQscixnPT57dVtnLXRdPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwoZSxnLGwpfSk7ZWxzZSBpZihDYShsKXx8X2EobCkpaWYodT1pP1tdOnt9LCFvfHxpKXtjb25zdCBF''@;'; put 'put ''PXRoaXMuY291bnRGaXJzdFJvd0tleXMoKS0xO1ZhKDAsRSxPPT57Y29uc3QgWj10aGlzLmNvbFRvUHJvcChPKTtpZihPPj0odHx8MCkmJk88PShyfHxFKSYmIU51bWJlci5pc0ludGVnZXIoWikpe2NvbnN0IGVlPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwoZSxaLGwpO2k/dS5wdXNoKGVlKTph''@;'; put 'put ''P251bGwhPT11JiZsTCh1LFosZWUpOnVbWl09ZWV9fSl9ZWxzZSBhYyhsLChnLEUpPT57Y29uc3QgTz10aGlzLmdldEF0UGh5c2ljYWxDZWxsKGUsRSxsKTthP251bGwhPT11JiZsTCh1LEUsTyk6dVtFXT1PfSk7cmV0dXJuIHV9c2V0QXRDZWxsKGUsdCxyKXtsZXQgaTtpZigic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGUpe2NvbnN0IGE9TnVtYmVyKGUpO2lmKE51bWJlci5pc05hTihhKXx8IU51bWJlci5pc0ludGVnZXIoYSl8fGE8MClyZXR1cm47aT1hfWVsc2V7aWYoIm51bWJlciIhPXR5cGVvZiBlfHwhTnVtYmVyLmlzSW50ZWdlcihlKXx8ZTwwKXJldHVybjtpPWV9aWYoaT49dGhpcy5jb3Vu''@;'; put 'put ''dFJvd3MoKXx8Im51bWJlciI9PXR5cGVvZiB0JiZ0Pj10aGlzLmNvdW50Rmlyc3RSb3dLZXlzKCkpcmV0dXJuO2lmKHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVNvdXJjZURhdGEiKSl7Y29uc3QgYT1WZihyKTt0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5U291cmNlRGF0YSIsaSx0LGEsInNl''@;'; put 'put ''dCIpLGEuaXNUb3VjaGVkKCkmJihyPWEudmFsdWUpfWNvbnN0IG89dGhpcy5tb2RpZnlSb3dEYXRhKGkpO2lmKE51bWJlci5pc0ludGVnZXIodCkpQXJyYXkuaXNBcnJheShvKT9vW3RdPXI6Q2EobykmJmxMKG8sU3RyaW5nKHQpLHIpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShvKSl7Y29uc3Qg''@;'; put 'put ''YT1OdW1iZXIodCk7IU51bWJlci5pc05hTihhKSYmTnVtYmVyLmlzSW50ZWdlcihhKSYmYT49MCYmYTx0aGlzLmNvdW50Rmlyc3RSb3dLZXlzKCkmJihvW2FdPXIpfWVsc2UgQ2EobykmJmxMKG8sU3RyaW5nKHQpLHIpfWdldEF0UGh5c2ljYWxDZWxsKGUsdCxyKXtsZXQgaT1udWxsO2lmKHIp''@;'; put 'put ''aWYoInN0cmluZyI9PXR5cGVvZiB0KXtjb25zdHtkYXRhRG90Tm90YXRpb246b309dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtpPW8/c0wocix0KTpyW3RdfWVsc2UgaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90KHIpOnJbdF07aWYodGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5U291cmNlRGF0YSIp''@;'; put 'put ''KXtjb25zdCBvPVZmKGkpO3RoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlTb3VyY2VEYXRhIixlLHQsbywiZ2V0Iiksby5pc1RvdWNoZWQoKSYmKGk9by52YWx1ZSl9cmV0dXJuIGl9Z2V0QXRDZWxsKGUsdCl7Y29uc3Qgcj10aGlzLm1vZGlmeVJvd0RhdGEoZSk7cmV0dXJuIHRoaXMuZ2V0QXRQ''@;'; put 'put ''aHlzaWNhbENlbGwoZSx0aGlzLmNvbFRvUHJvcCh0KSxyKX1nZXRCeVJhbmdlKGU9bnVsbCx0PW51bGwscj0hMSl7bGV0IGk9ITEsbz1udWxsLGE9bnVsbCxsPW51bGwsdT1udWxsO251bGw9PT1lfHxudWxsPT09dD8oaT0hMCxvPTAsbD10aGlzLmNvdW50Um93cygpLTEpOihvPU1hdGgubWlu''@;'; put 'put ''KGUucm93LHQucm93KSxhPU1hdGgubWluKGUuY29sLHQuY29sKSxsPU1hdGgubWF4KGUucm93LHQucm93KSx1PU1hdGgubWF4KGUuY29sLHQuY29sKSk7Y29uc3QgZz1bXTtyZXR1cm4gVmEobyxsLEU9PntnLnB1c2goaT90aGlzLmdldEF0Um93KEUsdm9pZCAwLHZvaWQgMCxyKTp0aGlzLmdl''@;'; put 'put ''dEF0Um93KEUsYSx1LHIpKX0pLGd9Z2V0Q29weWFibGUoZSx0KXtjb25zdCByPXRoaXMucHJvcFRvQ29sKHQpO3JldHVybiJudW1iZXIiPT10eXBlb2YgciYmdGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZSxyKS5jb3B5YWJsZT90aGlzLmdldEF0Q2VsbCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGUp''@;'; put 'put ''LHIpOiIifWNvdW50Um93cygpe2lmKHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVNvdXJjZUxlbmd0aCIpKXtjb25zdCBlPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlTb3VyY2VMZW5ndGgiKTtpZigibnVtYmVyIj09dHlwZW9mIGUmJk51bWJlci5pc0ludGVnZXIoZSkpcmV0dXJuIGV9cmV0''@;'; put 'put ''dXJuIHRoaXMuZGF0YS5sZW5ndGh9Y291bnRGaXJzdFJvd0tleXMoKXtyZXR1cm4gamxlKHRoaXMuZGF0YT8/W10pfWRlc3Ryb3koKXt0aGlzLmRhdGE9bnVsbCx0aGlzLmhvdD1udWxsfWNvbnN0cnVjdG9yKGUsdD1bXSl7dGhpcy5kYXRhVHlwZT0iYXJyYXkiLHRoaXMuY29sVG9Qcm9wPXI9''@;'; put 'put ''Pnt9LHRoaXMucHJvcFRvQ29sPXI9Pnt9LHRoaXMuaG90PWUsdGhpcy5kYXRhPXR9fSxRUmU9L14oXHJcbnxcblxyfFxyfFxuKS8sR1J0PS9eW15cdFxyXG5dKy8sSlJlPS9eXHQvO2Z1bmN0aW9uICRSdChuKXtsZXQgZT0wO2Zvcig7ZTxuLmxlbmd0aDspe2lmKCciJz09PW5bZV0pe2lmKCci''@;'; put 'put ''Jz09PW5bZSsxXSl7ZSs9Mjtjb250aW51ZX1jb25zdCB0PW5bZSsxXTtpZih2b2lkIDA9PT10fHwiXHQiPT09dHx8IlxyIj09PXR8fCJcbiI9PT10KXJldHVybiBlfWUrPTF9cmV0dXJuLTF9ZnVuY3Rpb24gcVkobil7bGV0IGUsdCxyLGksYSxvPSIiO2ZvcihlPTAsdD1uLmxlbmd0aDtlPHQ7''@;'; put 'put ''ZSs9MSl7Zm9yKGk9bltlXS5sZW5ndGgscj0wO3I8aTtyKz0xKXI+MCYmKG8rPSJcdCIpLGE9bltlXVtyXSwic3RyaW5nIj09dHlwZW9mIGE/YS5pbmRleE9mKCJcbiIpPi0xP28rPWAiJHthLnJlcGxhY2VBbGwoJyInLCciIicpfSJgOm8rPWE6bys9bnVsbD09YT8iIjphO2UhPT10LTEmJihv''@;'; put 'put ''Kz0iXG4iKX1yZXR1cm4gb31mdW5jdGlvbiBhZGUobixlKXtjb25zdHtpbnN0YW5jZTp0LHZpc3VhbFJvdzpyLHZpc3VhbENvbDppLHZhbHVlU2V0dGVyOm99PWU7cmV0dXJuIF9hKG8pP28uY2FsbCh0LG4scixpLGUpOm59ZnVuY3Rpb24gS1kobixlKXtjb25zdHtpbnN0YW5jZTp0LHZpc3Vh''@;'; put 'put ''bFJvdzpyLHZpc3VhbENvbDppLHZhbHVlR2V0dGVyOm99PWU7cmV0dXJuIF9hKG8pP28uY2FsbCh0LG4scixpLGUpOm59ZnVuY3Rpb24gc2RlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0''@;'; put 'put ''YW5jZSIpO3JldHVybiB0fWZ1bmN0aW9uIGxkZShuLGUpeyhmdW5jdGlvbiBLUnQobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobixlKSxlLmFkZChu''@;'; put 'put ''KX12YXIgZUllPW5ldyBXZWFrU2V0LHRJZT1uZXcgV2Vha1NldCxuSWU9bmV3IFdlYWtTZXQ7Y2xhc3MgaFR7c3RhdGljIGdldCBERVNUSU5BVElPTl9SRU5ERVJFUigpe3JldHVybiAxfXN0YXRpYyBnZXQgREVTVElOQVRJT05fQ0xJUEJPQVJEX0dFTkVSQVRPUigpe3JldHVybiAyfWNyZWF0''@;'; put 'put ''ZU1hcCgpe2NvbnN0IGU9dGhpcy5nZXRTY2hlbWEoKTt0eXBlb2YgZT4idSImJkpyKCJ0cnlpbmcgdG8gY3JlYXRlIGBjb2x1bW5zYCBkZWZpbml0aW9uIGJ1dCB5b3UgZGlkbid0IHByb3ZpZGUgYHNjaGVtYWAgbm9yIGBkYXRhYCIpO2NvbnN0IHQ9dGhpcy50YWJsZU1ldGEuY29sdW1uczt0''@;'; put 'put ''aGlzLmNvbFRvUHJvcENhY2hlPVtdLHRoaXMucHJvcFRvQ29sQ2FjaGU9bmV3IE1hcCx0P3NkZSh0aGlzLGVJZSxYUnQpLmNhbGwodGhpcyx0LGUpOnRoaXMucmVjdXJzaXZlRHVja0NvbHVtbnMoZSl9Y291bnRGaXJzdFJvd0tleXMoKXtyZXR1cm4gamxlKHRoaXMuZGF0YVNvdXJjZT8/W10p''@;'; put 'put ''fXJlY3Vyc2l2ZUR1Y2tDb2x1bW5zKGUsdCxyKXtsZXQgaT10Pz8wO2NvbnN0IG89cj8/IiI7bGV0IGE7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmIUFycmF5LmlzQXJyYXkoZSkmJmFjKGUsKGwsdSk9PntudWxsPT09bD8oYT1vK3UsdGhpcy5jb2xUb1Byb3BDYWNoZS5w''@;'; put 'put ''dXNoKGEpLHRoaXMucHJvcFRvQ29sQ2FjaGUuc2V0KGEsaSksaSs9MSk6Im9iamVjdCI9PXR5cGVvZiBsJiZudWxsIT09bCYmKGk9dGhpcy5yZWN1cnNpdmVEdWNrQ29sdW1ucyhsLGksYCR7dX0uYCkpfSksaX1jb2xUb1Byb3AoZSl7aWYoITE9PT1OdW1iZXIuaXNJbnRlZ2VyKGUpKXJldHVy''@;'; put 'put ''biBlO2NvbnN0IHQ9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihlKTtyZXR1cm4gbnVsbD09PXQ/ZTp0aGlzLmNvbFRvUHJvcENhY2hlJiZabyh0aGlzLmNvbFRvUHJvcENhY2hlW3RdKT90aGlzLmNvbFRvUHJvcENhY2hlW3RdOnR9cHJvcFRvQ29sKGUpe2NvbnN0IHQ9dGhpcy5wcm9wVG9D''@;'; put 'put ''b2xDYWNoZS5nZXQoZSk7aWYodm9pZCAwIT09dClyZXR1cm4gdGhpcy5ob3QudG9WaXN1YWxDb2x1bW4odCk7aWYoIm51bWJlciIhPXR5cGVvZiBlKXJldHVybiBlO2NvbnN0IHI9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oZSk7cmV0dXJuIG51bGwhPT1yP3I6ZX1nZXRTY2hlbWEoKXtjb25z''@;'; put 'put ''dCBlPXRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWE7cmV0dXJuIGU/ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZSgpOmU6dGhpcy5kdWNrU2NoZW1hfWNyZWF0ZUR1Y2tTY2hlbWEoKXtyZXR1cm4gdGhpcy5kYXRhU291cmNlJiZ0aGlzLmRhdGFTb3VyY2VbMF0/T00odGhpcy5kYXRhU291cmNlWzBd''@;'; put 'put ''KTp7fX1yZWZyZXNoRHVja1NjaGVtYSgpe3RoaXMuZHVja1NjaGVtYT10aGlzLmNyZWF0ZUR1Y2tTY2hlbWEoKX1jcmVhdGVSb3coZSx0PTEse3NvdXJjZTpyLG1vZGU6aT0iYWJvdmUifT17fSl7Y29uc3Qgbz10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtsZXQgYT1vLGw9MCx1PWU7aWYo''@;'; put 'put ''KCJudW1iZXIiIT10eXBlb2YgdXx8dT49bykmJih1PW8pLHU8dGhpcy5ob3QuY291bnRSb3dzKCkmJihhPXRoaXMuaG90LnRvUGh5c2ljYWxSb3codSkpLCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsdSx0LHIpfHxudWxsPT09YSlyZXR1cm57ZGVsdGE6MH07Y29u''@;'; put 'put ''c3QgRT10aGlzLnRhYmxlTWV0YS5tYXhSb3dzLE89dGhpcy5nZXRTY2hlbWEoKS5sZW5ndGgsWj1bXTtmb3IoO2w8dCYmbytsPChFPz8xLzApOyl7bGV0IHZlPW51bGw7aWYoImFycmF5Ij09PXRoaXMuaG90LmRhdGFUeXBlKXRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWE/dmU9QWQodGhpcy5n''@;'; put 'put ''ZXRTY2hlbWEoKSk6KHZlPVtdLFZhKE8tMSwoKT0+dmUucHVzaChudWxsKSkpO2Vsc2UgaWYoImZ1bmN0aW9uIj09PXRoaXMuaG90LmRhdGFUeXBlKXtjb25zdCBNZT10aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hOyJmdW5jdGlvbiIhPXR5cGVvZiBNZSYmSnIoImBkYXRhU2NoZW1hYCBtdXN0''@;'; put 'put ''IGJlIGEgZnVuY3Rpb24gd2hlbiBgZGF0YVR5cGVgIGlzIGBmdW5jdGlvbmAiKSx2ZT1NZSh1K2wpfWVsc2UgdmU9e30sTFcodmUsdGhpcy5nZXRTY2hlbWEoKSk7Wi5wdXNoKHZlKSxsKz0xfXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXModSxsKSwiYmVsb3ciPT09aSYm''@;'; put 'put ''KGE9TWF0aC5taW4oYSsxLG8pKSx0aGlzLnNwbGljZURhdGEoYSwwLFopO2NvbnN0IGVlPXRoaXMuaG90LnRvVmlzdWFsUm93KGEpO3JldHVybiB0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKT09PVoubGVuZ3RoJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pbml0VG9MZW5ndGgodGhp''@;'; put 'put ''cy5ob3QuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkpLGw+MCYmKG51bGw9PWU/dGhpcy5tZXRhTWFuYWdlci5jcmVhdGVSb3cobnVsbCxsKToiYXV0byIhPT1yJiZ0aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZVJvdyhhLHQpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLGVlLGws''@;'; put 'put ''cikse2RlbHRhOmwsc3RhcnRQaHlzaWNhbEluZGV4OmF9fWNyZWF0ZUNvbChlLHQ9MSx7c291cmNlOnIsbW9kZTppPSJzdGFydCJ9PXt9KXt0aGlzLmhvdC5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKXx8SnIoIkNhbm5vdCBjcmVhdGUgbmV3IGNvbHVtbi4gV2hlbiBkYXRhIHNvdXJj''@;'; put 'put ''ZSBpbiBhbiBvYmplY3QsIHlvdSBjYW4gb25seSBoYXZlIGFzIG11Y2ggY29sdW1ucyBhcyBkZWZpbmVkIGluIGZpcnN0IGRhdGEgcm93LCBkYXRhIHNjaGVtYSBvciBpbiB0aGUgJ2NvbHVtbnMnIHNldHRpbmcuSWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBhZGQgbmV3IGNvbHVtbnMsIHlv''@;'; put 'put ''dSBoYXZlIHRvIHVzZSBhcnJheSBkYXRhc291cmNlLiIpO2NvbnN0IG89dGhpcy5kYXRhU291cmNlPz9bXSxhPXRoaXMudGFibGVNZXRhLm1heENvbHMsbD10aGlzLmhvdC5jb3VudFNvdXJjZUNvbHMoKSx1PXRoaXMuaG90LmNvdW50Q29scygpLGc9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dz''@;'; put 'put ''KCksRT0ibnVtYmVyIj09dHlwZW9mIGUmJmU8PWw/ZTp1O2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZUNvbCIsRSx0LHIpKXJldHVybntkZWx0YTowfTtjb25zdCBPPUU8dT90aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKEUpOmwsWj0iZW5kIj09PWk/TWF0aC5taW4o''@;'; put 'put ''TysxLGwpOk87bGV0IGVlPTA7Zm9yKGxldCB2ZT1aO2VlPHQmJnUrZWU8KGE/PzEvMCk7dmUrKyxlZSsrKXNkZSh0aGlzLHRJZSxRUnQpLmNhbGwodGhpcyxvLHZlLEUsdStlZSxnKTtyZXR1cm4gZWU+MCYmKG51bGw9PWU/dGhpcy5tZXRhTWFuYWdlci5jcmVhdGVDb2x1bW4obnVsbCxlZSk6''@;'; put 'put ''ImF1dG8iIT09ciYmdGhpcy5tZXRhTWFuYWdlci5jcmVhdGVDb2x1bW4oWix0KSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaW5zZXJ0SW5kZXhlcyhFLGVlLGkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNyZWF0ZUNvbCIsdGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oWiksZWUsciks''@;'; put 'put ''dGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpLHtkZWx0YTplZSxzdGFydFBoeXNpY2FsSW5kZXg6Wn19cmVtb3ZlUm93KGUsdD0xLHIpe2xldCBpPU51bWJlci5pc0ludGVnZXIoZSk/ZTotdDtjb25zdCBvPXRoaXMudmlzdWFsUm93c1RvUGh5c2ljYWwoaSx0KSxhPXRoaXMuaG90LmNvdW50Um93''@;'; put 'put ''cygpO2lmKGk9KGEraSklYSwhMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVSb3ciLGksby5sZW5ndGgsbyxyKSlyZXR1cm4hMTtjb25zdCB1PW8ubGVuZ3RoO2lmKHRoaXMuZmlsdGVyRGF0YShpLHUsbyksaTx0aGlzLmhvdC5jb3VudFJvd3MoKSl7dGhpcy5ob3Qucm93SW5k''@;'; put 'put ''ZXhNYXBwZXIucmVtb3ZlSW5kZXhlcyhvKTtjb25zdCBFPVpvKHRoaXMudGFibGVNZXRhLmNvbHVtbnMpfHxabyh0aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hKXx8dGhpcy50YWJsZU1ldGEuY29sSGVhZGVyczswPT09dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4''@;'; put 'put ''ZXNMZW5ndGgoKSYmIUUmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShbXSl9cmV0dXJuIG8uc2xpY2UoMCkuc29ydCgoRSxPKT0+Ty1FKS5mb3JFYWNoKEU9Pnt0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZVJvdyhFLDEpfSksdGhpcy5ob3QucnVuSG9va3Mo''@;'; put 'put ''ImFmdGVyUmVtb3ZlUm93IixpLHUsbyxyKSwhMH1yZW1vdmVDb2woZSx0PTEscil7KCJvYmplY3QiPT09dGhpcy5ob3QuZGF0YVR5cGV8fHRoaXMudGFibGVNZXRhLmNvbHVtbnMpJiZKcigiY2Fubm90IHJlbW92ZSBjb2x1bW4gd2l0aCBvYmplY3QgZGF0YSBzb3VyY2Ugb3IgY29sdW1ucyBv''@;'; put 'put ''cHRpb24gc3BlY2lmaWVkIik7bGV0IGk9Im51bWJlciIhPXR5cGVvZiBlPy10OmU7aT0odGhpcy5ob3QuY291bnRDb2xzKCkraSkldGhpcy5ob3QuY291bnRDb2xzKCk7Y29uc3Qgbz10aGlzLnZpc3VhbENvbHVtbnNUb1BoeXNpY2FsKGksdCksYT1vLnNsaWNlKDApLnNvcnQoKE8sWik9Plot''@;'; put 'put ''Tyk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlQ29sIixpLHQsbyxyKSlyZXR1cm4hMTtsZXQgdT0hMDtjb25zdCBnPWEubGVuZ3RoLEU9dGhpcy5kYXRhU291cmNlPz9bXTtmb3IobGV0IE89MDtPPGc7TysrKXUmJm9bMF0hPT1vW09dLU8mJih1PSExKTtyZXR1cm4g''@;'; put 'put ''c2RlKHRoaXMsbkllLEpSdCkuY2FsbCh0aGlzLEUsdSxvLGEsdCksaTx0aGlzLmhvdC5jb3VudENvbHMoKSYmKHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlbW92ZUluZGV4ZXMobyksIXRoaXMudGFibGVNZXRhLnJvd0hlYWRlcnMmJjA9PT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBl''@;'; put 'put ''ci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpJiZ0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UoW10pKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZW1vdmVDb2wiLGksdCxvLHIpLHRoaXMucmVmcmVzaER1Y2tTY2hlbWEoKSwhMH1zcGxpY2VDb2woZSx0''@;'; put 'put ''LHIsLi4uaSl7Y29uc3Qgbz10aGlzLmhvdC5nZXREYXRhQXRDb2woZSksYT1vLnNsaWNlKHQsdCtyKTtwc2UoaSxvLnNsaWNlKHQrcikpO2xldCB1PTA7Zm9yKDt1PHI7KWkucHVzaChudWxsKSx1Kz0xO3JldHVybiB3eGUoaSksdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkodCxlLGksdm9p''@;'; put 'put ''ZCAwLHZvaWQgMCwic3BsaWNlQ29sIiksYX1zcGxpY2VSb3coZSx0LHIsLi4uaSl7Y29uc3Qgbz10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRSb3coZSksYT1vLnNsaWNlKHQsdCtyKTtwc2UoaSxvLnNsaWNlKHQrcikpO2xldCB1PTA7Zm9yKDt1PHI7KWkucHVzaChudWxsKSx1Kz0xO3JldHVy''@;'; put 'put ''biB0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheShlLHQsW2ldLHZvaWQgMCx2b2lkIDAsInNwbGljZVJvdyIpLGF9c3BsaWNlRGF0YShlLHQscil7aWYoITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRGF0YVNwbGljZSIsZSx0LHIpKXtjb25zdCBvPVsuLi50aGlzLmRhdGFTb3VyY2Uu''@;'; put 'put ''c2xpY2UoMCxlKSwuLi5yLC4uLnRoaXMuZGF0YVNvdXJjZS5zbGljZShlKV07dGhpcy5kYXRhU291cmNlLmxlbmd0aD0wLG8uZm9yRWFjaChhPT50aGlzLmRhdGFTb3VyY2UucHVzaChhKSl9fWZpbHRlckRhdGEoZSx0LHIpe2xldCBpPXRoaXMuaG90LnJ1bkhvb2tzKCJmaWx0ZXJEYXRhIixl''@;'; put 'put ''LHQscik7ITE9PT1BcnJheS5pc0FycmF5KGkpJiYoaT10aGlzLmRhdGFTb3VyY2UuZmlsdGVyKChvLGEpPT4tMT09PXIuaW5kZXhPZihhKSkpLHRoaXMuZGF0YVNvdXJjZS5sZW5ndGg9MCxBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLmRhdGFTb3VyY2UsaSl9Z2V0KGUsdCl7Y29u''@;'; put 'put ''c3Qgcj10aGlzLmhvdC50b1BoeXNpY2FsUm93KGUpO2xldCBpPXRoaXMuZGF0YVNvdXJjZVtyXTtjb25zdCBvPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlSb3dEYXRhIixyKTtpPSJudW1iZXIiIT10eXBlb2Ygbz9vOmk7Y29uc3R7ZGF0YURvdE5vdGF0aW9uOmF9PXRoaXMuaG90LmdldFNl''@;'; put 'put ''dHRpbmdzKCk7bGV0IGw9bnVsbDtpZihpJiZSZChpLHQpKWw9aVt0XTtlbHNlIGlmKGEmJiJzdHJpbmciPT10eXBlb2YgdCYmdC5pbmRleE9mKCIuIik+LTEpe2xldCBFPWk7aWYoIUUpcmV0dXJuIG51bGw7Y29uc3QgTz10LnNwbGl0KCIuIik7Zm9yKGxldCBaPTAsZWU9Ty5sZW5ndGg7Wjxl''@;'; put 'put ''ZTtaKyspaWYoRT1FW09bWl1dLHR5cGVvZiBFPiJ1IilyZXR1cm4gbnVsbDtsPUV9ZWxzZSJmdW5jdGlvbiI9PXR5cGVvZiB0JiYobD10KHRoaXMuZGF0YVNvdXJjZS5zbGljZShyLHIrMSlbMF0pKTtjb25zdCB1PXRoaXMucHJvcFRvQ29sKHQpLGc9Im51bWJlciI9PXR5cGVvZiB1P3RoaXMu''@;'; put 'put ''aG90LnRvUGh5c2ljYWxDb2x1bW4odSk6bnVsbDtpZihwdyhyKSYmcHcoZykmJihsPUtZKGwsdGhpcy5tZXRhTWFuYWdlci5nZXRDZWxsTWV0YShyLGcse3Zpc3VhbFJvdzplLHZpc3VhbENvbHVtbjp1LHNraXBNZXRhRXh0ZW5zaW9uOiEwfSkpKSx0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlE''@;'; put 'put ''YXRhIikpe2NvbnN0IEU9VmYobCk7dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeURhdGEiLGUsdSxFLCJnZXQiKSxFLmlzVG91Y2hlZCgpJiYobD1FLnZhbHVlKX1yZXR1cm4gbH1nZXRDb3B5YWJsZShlLHQpe2NvbnN0IHI9dGhpcy5wcm9wVG9Db2wodCk7cmV0dXJuIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiByJiZ0aGlzLmhvdC5nZXRDZWxsTWV0YShlLHIpLmNvcHlhYmxlP3RoaXMuZ2V0KGUsdCk6IiJ9c2V0KGUsdCxyKXtjb25zdCBpPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coZSk7bGV0IG89cixhPXRoaXMuZGF0YVNvdXJjZVtpXTtjb25zdCBsPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlS''@;'; put 'put ''b3dEYXRhIixpKTtpZihhPSJudW1iZXIiIT10eXBlb2YgbD9sOmEsdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5RGF0YSIpKXtjb25zdCBnPVZmKG8pO3RoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlEYXRhIixlLHRoaXMucHJvcFRvQ29sKHQpLGcsInNldCIpLGcuaXNUb3VjaGVkKCkmJihvPWcu''@;'; put 'put ''dmFsdWUpfWNvbnN0e2RhdGFEb3ROb3RhdGlvbjp1fT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2lmKGEmJlJkKGEsdCkpYVt0XT1vO2Vsc2UgaWYodSYmInN0cmluZyI9PXR5cGVvZiB0JiZ0LmluZGV4T2YoIi4iKT4tMSl7bGV0IE8sZz1hLEU9MDtjb25zdCBaPXQuc3BsaXQoIi4iKTtmb3Io''@;'; put 'put ''RT0wLE89Wi5sZW5ndGgtMTtFPE87RSsrKXtpZigiX19wcm90b19fIj09PVpbRV18fCJjb25zdHJ1Y3RvciI9PT1aW0VdfHwicHJvdG90eXBlIj09PVpbRV0pcmV0dXJuO3R5cGVvZiBnW1pbRV1dPiJ1IiYmKGdbWltFXV09e30pLGc9Z1taW0VdXX1nW1pbRV1dPW99ZWxzZSBpZigiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgdCl0KHRoaXMuZGF0YVNvdXJjZS5zbGljZShpLGkrMSlbMF0sbyk7ZWxzZXtpZigiX19wcm90b19fIj09PXR8fCJjb25zdHJ1Y3RvciI9PT10fHwicHJvdG90eXBlIj09PXQpcmV0dXJuO2FbdF09b319dmlzdWFsUm93c1RvUGh5c2ljYWwoZSx0KXtjb25zdCByPXRoaXMu''@;'; put 'put ''aG90LmNvdW50Um93cygpLGk9W107bGV0IGwsbz0ocitlKSVyLGE9dDtmb3IoO288ciYmYTspbD10aGlzLmhvdC50b1BoeXNpY2FsUm93KG8pLGkucHVzaChsKSxhLT0xLG8rPTE7cmV0dXJuIGl9dmlzdWFsQ29sdW1uc1RvUGh5c2ljYWwoZSx0KXtjb25zdCByPXRoaXMuaG90LmNvdW50Q29s''@;'; put 'put ''cygpLGk9W107bGV0IG89KHIrZSklcixhPXQ7Zm9yKDtvPHImJmE7KXtjb25zdCBsPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obyk7aS5wdXNoKGwpLGEtPTEsbys9MX1yZXR1cm4gaX1jbGVhcigpe2ZvcihsZXQgZT0wO2U8dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7ZSsrKWZvcihs''@;'; put 'put ''ZXQgdD0wO3Q8dGhpcy5ob3QuY291bnRDb2xzKCk7dCsrKXRoaXMuc2V0KGUsdGhpcy5jb2xUb1Byb3AodCksIiIpfWdldExlbmd0aCgpe2NvbnN0IGU9dGhpcy50YWJsZU1ldGEubWF4Um93cztsZXQgdDt0PShlPz8wKTwwfHwwPT09ZT8wOmV8fDEvMDtjb25zdCByPXRoaXMuaG90LnJvd0lu''@;'; put 'put ''ZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCk7cmV0dXJuIE1hdGgubWluKHIsdCl9Z2V0QWxsKCl7Y29uc3QgZT17cm93OjAsY29sOjB9LHQ9e3JvdzpNYXRoLm1heCh0aGlzLmhvdC5jb3VudFJvd3MoKS0xLDApLGNvbDpNYXRoLm1heCh0aGlzLmhvdC5jb3VudENvbHMo''@;'; put 'put ''KS0xLDApfTtyZXR1cm4gZS5yb3ctdC5yb3chPT0wfHx0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKT90aGlzLmdldFJhbmdlKGUsdCxoVC5ERVNUSU5BVElPTl9SRU5ERVJFUik6W119Y291bnRDYWNoZWRDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sVG9Qcm9wQ2FjaGUubGVuZ3RofWdldFJh''@;'; put 'put ''bmdlKGUsdCxyKXtjb25zdCBpPVtdO2xldCBvLGEsbDtjb25zdCB1PXRoaXMudGFibGVNZXRhLm1heFJvd3MsZz10aGlzLnRhYmxlTWV0YS5tYXhDb2xzO2lmKDA9PT11fHwwPT09ZylyZXR1cm5bXTtjb25zdCBFPXI9PT1oVC5ERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SP3RoaXMu''@;'; put 'put ''Z2V0Q29weWFibGU6dGhpcy5nZXQsTz1NYXRoLm1pbihNYXRoLm1heCgodT8/MS8wKS0xLDApLE1hdGgubWF4KGUucm93LHQucm93KSksWj1NYXRoLm1pbihNYXRoLm1heCgoZz8/MS8wKS0xLDApLE1hdGgubWF4KGUuY29sLHQuY29sKSk7Zm9yKG89TWF0aC5taW4oZS5yb3csdC5yb3cpO288''@;'; put 'put ''PU87bysrKXtsPVtdO2NvbnN0IGVlPW8+PTA/dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhvKTpvO2ZvcihhPU1hdGgubWluKGUuY29sLHQuY29sKTthPD1aJiZudWxsIT09ZWU7YSsrKWwucHVzaChFLmNhbGwodGhpcyxvLHRoaXMuY29sVG9Qcm9wKGEpKSk7bnVsbCE9PWVlJiZpLnB1c2gobCl9''@;'; put 'put ''cmV0dXJuIGl9Z2V0VGV4dChlLHQpe3JldHVybiBxWSh0aGlzLmdldFJhbmdlKGUsdCxoVC5ERVNUSU5BVElPTl9SRU5ERVJFUikpfWdldENvcHlhYmxlVGV4dChlLHQpe3JldHVybiBxWSh0aGlzLmdldFJhbmdlKGUsdCxoVC5ERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SKSl9ZGVz''@;'; put 'put ''dHJveSgpe3RoaXMuaG90PW51bGwsdGhpcy5tZXRhTWFuYWdlcj1udWxsLHRoaXMuZGF0YVNvdXJjZT1udWxsLHRoaXMuZHVja1NjaGVtYT1udWxsLHRoaXMuY29sVG9Qcm9wQ2FjaGUubGVuZ3RoPTAsdGhpcy5wcm9wVG9Db2xDYWNoZS5jbGVhcigpLHRoaXMucHJvcFRvQ29sQ2FjaGU9dm9p''@;'; put 'put ''ZCAwfWNvbnN0cnVjdG9yKGUsdCxyKXtsZGUodGhpcyxlSWUpLGxkZSh0aGlzLHRJZSksbGRlKHRoaXMsbkllKSx0aGlzLmhvdD1lLHRoaXMubWV0YU1hbmFnZXI9cix0aGlzLnRhYmxlTWV0YT1yLmdldFRhYmxlTWV0YSgpLHRoaXMuZGF0YVNvdXJjZT10LHRoaXMuY29sVG9Qcm9wQ2FjaGU9''@;'; put 'put ''W10sdGhpcy5wcm9wVG9Db2xDYWNoZT1uZXcgTWFwLHRoaXMucmVmcmVzaER1Y2tTY2hlbWEoKSx0aGlzLmNyZWF0ZU1hcCgpfX1mdW5jdGlvbiBYUnQobixlKXtsZXQgdD0wLHI9MDtjb25zdCBpPSJmdW5jdGlvbiI9PXR5cGVvZiBuO2lmKGkpe2NvbnN0IG89T1coZSk7dD1vPjA/bzp0aGlz''@;'; put 'put ''LmNvdW50Rmlyc3RSb3dLZXlzKCl9ZWxzZSB0PU1hdGgubWluKHRoaXMudGFibGVNZXRhLm1heENvbHM/PzEvMCxuLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzx0O28rKyl7Y29uc3QgYT1pP24obyk6bltvXTtpZihDYShhKSl7aWYodHlwZW9mIGEuZGF0YTwidSIpe2NvbnN0IGw9aT9yOm8sdT1h''@;'; put 'put ''LmRhdGE7dGhpcy5jb2xUb1Byb3BDYWNoZVtsXT11LHRoaXMucHJvcFRvQ29sQ2FjaGUuc2V0KHUsbCl9cis9MX19fWZ1bmN0aW9uIFFSdChuLGUsdCxyLGkpe2lmKCJudW1iZXIiIT10eXBlb2YgdHx8dD49cilpZihpPjApZm9yKGxldCBvPTA7bzxpO28rPTEpdHlwZW9mIG5bb10+InUiJiYo''@;'; put 'put ''bltvXT1bXSksbltvXS5wdXNoKG51bGwpO2Vsc2Ugbi5wdXNoKFtudWxsXSk7ZWxzZSBmb3IobGV0IG89MDtvPGk7bysrKW5bb10uc3BsaWNlKGUsMCxudWxsKX1mdW5jdGlvbiBKUnQobixlLHQscixpKXtpZihlKWZvcihsZXQgbz0wLGE9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7bzxh''@;'; put 'put ''O28rKyluW29dLnNwbGljZSh0WzBdLGkpLDA9PT1vJiZ0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZUNvbHVtbih0WzBdLGkpO2Vsc2V7Y29uc3Qgbz1yLmxlbmd0aDtmb3IobGV0IGE9MCxsPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO2E8bDthKyspZm9yKGxldCB1PTA7dTxvO3UrKyluW2Fd''@;'; put 'put ''LnNwbGljZShyW3VdLDEpLDA9PT1hJiZ0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZUNvbHVtbihyW3VdLDEpfX1jb25zdCBpTz1oVDtmdW5jdGlvbiBySWUobixlLHQscixpLG8sYSl7Y29uc3QgbD1uLnNvdXJjZURhdGFWYWxpZGF0b3I7aWYoIV9hKGwpfHwhMD09PWwoZSxuLGEpKXJldHVybjsh''@;'; put 'put ''MT09PW4uYWxsb3dJbnZhbGlkJiZpLnNldEF0Q2VsbCh0LHIsbnVsbCk7Y29uc3QgZz1uLnNvdXJjZURhdGFXYXJuaW5nTWVzc2FnZTtpZihnKXtjb25zdCBFPW8uZ2V0KGcpPz9bXTtFLnB1c2goe3Jvdzp0LGNvbDpyLHZhbHVlOmUsbWVzc2FnZTpnfSksby5zZXQoZyxFKX19ZnVuY3Rpb24g''@;'; put 'put ''aUllKG4sZSx0LHIsaSxvKXtjb25zdHtyb3dJbmRleE1hcHBlcjphLGNvbHVtbkluZGV4TWFwcGVyOmx9PW47Zm9yKGxldCB1PTA7dTx0O3UrPTEpZm9yKGxldCBnPTA7ZzxyO2crPTEpe2NvbnN0IEU9YS5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh1KSxPPWwuZ2V0VmlzdWFsRnJvbVBo''@;'; put 'put ''eXNpY2FsSW5kZXgoZyk7aWYobnVsbD09PUV8fG51bGw9PT1PKWNvbnRpbnVlO2NvbnN0IFo9bi5nZXRDZWxsTWV0YShFLE8pO19hKFouc291cmNlRGF0YVZhbGlkYXRvcikmJnJJZShaLGUuZ2V0QXRDZWxsKHUsZyksdSxnLGUsaSxvKX19ZnVuY3Rpb24gb0llKG4sZSl7Y29uc3QgdD1uLmNv''@;'; put 'put ''dW50U291cmNlUm93cygpLHI9bi5jb3VudFNvdXJjZUNvbHMoKTtpZigwPT09dHx8MD09PXIpcmV0dXJuO2NvbnN0IGk9bi5nZXRTZXR0aW5ncygpLG89bi5fZ2V0RGF0YVNvdXJjZSgpLGE9bmV3IE1hcDtpZihmdW5jdGlvbiBySXQobixlKXtyZXR1cm4gX2EoZS5jZWxscyl8fEFycmF5Lmlz''@;'; put 'put ''QXJyYXkoZS5jZWxsKSYmZS5jZWxsLmxlbmd0aD4wfHxuLmhhc0hvb2soImJlZm9yZUdldENlbGxNZXRhIil8fG4uaGFzSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIpfHxuLl9nZXRNZXRhTWFuYWdlcigpLmdldFVzZXJEZWZpbmVkQ2VsbE1ldGFzKCkubGVuZ3RoPjB9KG4saSkpaUllKG4sbyx0''@;'; put 'put ''LHIsYSxlKTtlbHNle2NvbnN0e2Z1bGxTY2FuOmwsY29sdW1uczp1fT1mdW5jdGlvbiB0SXQobixlKXtjb25zdCB0PW4ucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgoMCk7aWYobnVsbD09PXQpcmV0dXJue2Z1bGxTY2FuOiEwLGNvbHVtbnM6W119O2NvbnN0IHI9''@;'; put 'put ''W107Zm9yKGxldCBpPTA7aTxlO2krPTEpe2NvbnN0IG89bi5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChpKTtpZihudWxsPT09byljb250aW51ZTtjb25zdCBhPW4uZ2V0Q2VsbE1ldGEodCxvKSxsPWEuc291cmNlRGF0YVZhbGlkYXRvcjtpZihfYShsKSl7''@;'; put 'put ''aWYoITAhPT1sLnJvd0luZGVwZW5kZW50KXJldHVybntmdWxsU2NhbjohMCxjb2x1bW5zOltdfTtyLnB1c2goe3BoeXNpY2FsQ29sdW1uOmksY2VsbE1ldGE6YX0pfX1yZXR1cm57ZnVsbFNjYW46ITEsY29sdW1uczpyfX0obixyKTtsP2lJZShuLG8sdCxyLGEsZSk6ZnVuY3Rpb24gbkl0KG4s''@;'; put 'put ''ZSx0LHIsaSxvKXtmb3IobGV0IGE9MDthPHQ7YSs9MSlpZihudWxsIT09cihhKSlmb3IobGV0IGw9MDtsPG4ubGVuZ3RoO2wrPTEpe2NvbnN0e3BoeXNpY2FsQ29sdW1uOnUsY2VsbE1ldGE6Z309bltsXTtySWUoZyxlLmdldEF0Q2VsbChhLHUpLGEsdSxlLGksbyl9fSh1LG8sdCxFPT5uLnJv''@;'; put 'put ''d0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KEUpLGEsZSl9YS5mb3JFYWNoKChsLHUpPT57YUllKHUsbCl9KX1mdW5jdGlvbiBhSWUobixlKXshZnVuY3Rpb24gblR0KHtsb2dGdW5jdGlvbjpuPXRUdCxtZXNzYWdlOmU9IiIsaXRlbXM6dD1bXSxtYXhTYW1wbGU6cj01''@;'; put 'put ''LGl0ZW1Gb3JtYXR0ZXI6aT1vPT5gJHtvfWB9PXt9KXtpZighQXJyYXkuaXNBcnJheSh0KXx8MD09PXQubGVuZ3RoKXJldHVybjtjb25zdCBvPXQubGVuZ3RoLGw9bz5yP2AgIC0gLi4uYW5kICR7by1yfSBtb3JlYDoiIjtuKGZMKGUse2l0ZW1zQ291bnQ6YCR7b30gY2VsbCR7bz4xPyJzIjoi''@;'; put 'put ''In1gLGFmZmVjdGVkQ2VsbHM6WyJBZmZlY3RlZCBjZWxsczoiLC4uLnQuc2xpY2UoMCxyKS5tYXAoZz0+YCAgLSAke2koZyl9YCksLi4ubD9bbF06W11dLmpvaW4oIlxuIil9KSl9KHtsb2dGdW5jdGlvbjpIYSxtZXNzYWdlOm4saXRlbXM6ZSxpdGVtRm9ybWF0dGVyOnQ9Pntjb25zdHtyb3c6''@;'; put 'put ''cixjb2w6aSx2YWx1ZTpvfT10LGE9UGwobyk7cmV0dXJuYHJvdyAke3J9LCBjb2wgJHtpfSwgdmFsdWU6ICIke2EubGVuZ3RoPjY0P2Ake2Euc2xpY2UoMCw2NCl9Li4uYDphfSJgfX0pfWZ1bmN0aW9uIHNJZShuLGUsdCxyKXtjb25zdHtob3RJbnN0YW5jZTppLGRhdGFNYXA6byxkYXRhU291''@;'; put 'put ''cmNlOmEsaW50ZXJuYWxTb3VyY2U6bCxzb3VyY2U6dSxtZXRhTWFuYWdlcjpnLGZpcnN0UnVuOkV9PXIsTz1LMChsKSxaPWkuZ2V0U2V0dGluZ3MoKTtpLmRhdGFUeXBlPUFycmF5LmlzQXJyYXkoWi5kYXRhU2NoZW1hKT8iYXJyYXkiOl9hKFouZGF0YVNjaGVtYSk/ImZ1bmN0aW9uIjoib2Jq''@;'; put 'put ''ZWN0IixvJiZvLmRlc3Ryb3koKSxuPWkucnVuSG9va3MoYGJlZm9yZSR7T31gLG4sRSx1KTtjb25zdCBlZT1uZXcgaU8oaSxuLGcpO2UoZWUpLCJvYmplY3QiPT10eXBlb2YgbiYmbnVsbCE9PW4/bi5wdXNoJiZuLnNwbGljZXx8KG49W25dKTpudWxsPT09bj9uPWZ1bmN0aW9uIGlJdChuLGUs''@;'; put 'put ''dCl7Y29uc3Qgcj1lLmdldFNjaGVtYSgpLGk9W107Zm9yKGxldCBvPTAsYT10LnN0YXJ0Um93cztvPGE7bysrKXtsZXQgbDtpZigib2JqZWN0IiE9PW4uZGF0YVR5cGUmJiJmdW5jdGlvbiIhPT1uLmRhdGFUeXBlfHwhdC5kYXRhU2NoZW1hKWlmKCJhcnJheSI9PT1uLmRhdGFUeXBlKWw9QWQo''@;'; put 'put ''clswXSk7ZWxzZXtsPVtdO2ZvcihsZXQgdT0wLGc9dC5zdGFydENvbHM7dTxnO3UrKylsLnB1c2gobnVsbCl9ZWxzZSBsPUFkKHIpO2kucHVzaChsKX1yZXR1cm4gaX0oaSxlZSxaKTpKcihgJHtsfSBvbmx5IGFjY2VwdHMgYXJyYXkgb2Ygb2JqZWN0cyBvciBhcnJheSBvZiBhcnJheXMgKCR7''@;'; put 'put ''dHlwZW9mIG59IGdpdmVuKWApLEFycmF5LmlzQXJyYXkoblswXSkmJihpLmRhdGFUeXBlPSJhcnJheSIpLFouZGF0YT1uLGVlLmRhdGFTb3VyY2U9bixhLmRhdGE9bixhLmRhdGFUeXBlPWkuZGF0YVR5cGUsYS5jb2xUb1Byb3A9dmU9PmVlLmNvbFRvUHJvcCh2ZSksYS5wcm9wVG9Db2w9dmU9''@;'; put 'put ''PmVlLnByb3BUb0NvbCh2ZSksYS5jb3VudENhY2hlZENvbHVtbnM9ZWUuY291bnRDYWNoZWRDb2x1bW5zLmJpbmQoZWUpLHQoZWUpLEV8fG9JZShpLGwpLGkucnVuSG9va3MoYGFmdGVyJHtPfWAsbixFLHUpLEV8fChpLnJ1bkhvb2tzKCJhZnRlckNoYW5nZSIsbnVsbCxsKSxpLnZpZXcuYWRq''@;'; put 'put ''dXN0RWxlbWVudHNTaXplKCksaS5yZW5kZXIoKSksaS5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZLbyhpLnJvb3RFbGVtZW50LFtneGUoLTEpLGRzZShpLmNvdW50Q29scygpKyhpLnZpZXc/aS5jb3VudFJvd0hlYWRlcnMoKTowKSldKX1mdW5jdGlvbiBsSWUobixlKXtpZihlLmhhcyhuKSl0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGNJZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRl''@;'; put 'put ''IGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiB1SWUobixlKXtyZXR1cm4gZnVuY3Rpb24gb0l0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obixjSWUobixlLCJnZXQiKSl9ZnVuY3Rpb24gZEllKG4sZSx0KXtsSWUobixl''@;'; put 'put ''KSxlLnNldChuLHQpfWZ1bmN0aW9uIGhJZShuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIGFJdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVs''@;'; put 'put ''ZCIpO2UudmFsdWU9dH19KG4sY0llKG4sZSwic2V0IiksdCksdH1mdW5jdGlvbiBYWShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiBmSWUobixl''@;'; put 'put ''KXtsSWUobixlKSxlLmFkZChuKX12YXIgY2RlPW5ldyBXZWFrTWFwLHVkZT1uZXcgV2Vha01hcCxkZGU9bmV3IFdlYWtTZXQsaGRlPW5ldyBXZWFrU2V0O2NsYXNzIHNJdHt0b1JlbmRlcmFibGUoZSl7Y29uc3QgdD0iTi1TIj09PWUuZ2V0VmVydGljYWxEaXJlY3Rpb24oKT8xOi0xLHI9Ilct''@;'; put 'put ''RSI9PT1lLmdldEhvcml6b250YWxEaXJlY3Rpb24oKT8xOi0xLGk9WFkodGhpcyxkZGUscEllKS5jYWxsKHRoaXMsZS5mcm9tLHQscik7aWYobnVsbD09PWkpcmV0dXJuIG51bGw7Y29uc3Qgbz1YWSh0aGlzLGRkZSxwSWUpLmNhbGwodGhpcyxlLnRvLC10LC1yKTtpZihudWxsPT09bylyZXR1''@;'; put 'put ''cm4gbnVsbDtjb25zdCBhPWUuY2xvbmUoKTtyZXR1cm4gYS5mcm9tPWksYS50bz1vLGEuaW5jbHVkZXMoZS5oaWdobGlnaHQpfHwoYS5oaWdobGlnaHQ9aSksYX1jb25zdHJ1Y3Rvcih7cm93SW5kZXhNYXBwZXI6ZSxjb2x1bW5JbmRleE1hcHBlcjp0fSl7ZkllKHRoaXMsZGRlKSxmSWUodGhp''@;'; put 'put ''cyxoZGUpLGRJZSh0aGlzLGNkZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZEllKHRoaXMsdWRlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxoSWUodGhpcyxjZGUsZSksaEllKHRoaXMsdWRlLHQpfX1mdW5jdGlvbiBwSWUobixlLHQ9ZSl7aWYobnVsbD09PW4ucm93fHxudWxs''@;'; put 'put ''PT09bi5jb2wpcmV0dXJuIG51bGw7Y29uc3Qgcj1YWSh0aGlzLGhkZSxnSWUpLmNhbGwodGhpcyx1SWUodGhpcyxjZGUpLG4ucm93LGUpO2lmKG51bGw9PT1yKXJldHVybiBudWxsO2NvbnN0IGk9WFkodGhpcyxoZGUsZ0llKS5jYWxsKHRoaXMsdUllKHRoaXMsdWRlKSxuLmNvbCx0KTtyZXR1''@;'; put 'put ''cm4gbnVsbD09PWk/bnVsbDpuLmNsb25lKCkuYXNzaWduKHtyb3c6cixjb2w6aX0pfWZ1bmN0aW9uIGdJZShuLGUsdCl7cmV0dXJuIGU8MD9lOm4uZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGUsdCl9ZnVuY3Rpb24gZlQobil7aHMobikmJm4uc2Nyb2xsSW50b1ZpZXcoe2Jsb2NrOiJuZWFy''@;'; put 'put ''ZXN0IixpbmxpbmU6Im5lYXJlc3QifSl9ZnVuY3Rpb24gUVkobil7Y29uc3R7c2VsZWN0aW9uOmUsdmlldzp0fT1uLHI9bi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksaT1lLmdldFNlbGVjdGlvblNvdXJjZSgpLG89dC5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpPz8tMSxhPXQuZ2V0''@;'; put 'put ''TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbigpPz8tMSxsPXI/LmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sPz8tMSx1PXI/LmdldEJvdHRvbUVuZENvcm5lcigpLmNvbD8/LTEsZz1sPD1vLEU9dT49YSxPPXQuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKT8/LTEsWj10LmdldExhc3RGdWxseVZpc2li''@;'; put 'put ''bGVSb3coKT8/LTEsZWU9cj8uZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3c/Py0xLHZlPXI/LmdldEJvdHRvbUVuZENvcm5lcigpLnJvdz8/LTEsTWU9ZWU8PU8sSGU9dmU+PVo7cmV0dXJue2dldENvbXB1dGVkQ29sdW1uVGFyZ2V0OldlPT4ibW91c2UiPT09aXx8ImtleWJvYXJkIj09PWk/V2Uu''@;'; put 'put ''Y29sPz8tMTpnJiZFP3I/LmhpZ2hsaWdodC5jb2w/Py0xOmc/bDpFP3U6V2UuY29sPz8tMSxnZXRDb21wdXRlZFJvd1RhcmdldDpXZT0+Im1vdXNlIj09PWl8fCJrZXlib2FyZCI9PT1pP1dlLnJvdz8/LTE6TWUmJkhlP3I/LmhpZ2hsaWdodC5yb3c/Py0xOk1lP2VlOkhlP3ZlOldlLnJvdz8/''@;'; put 'put ''LTF9fWZ1bmN0aW9uIG1JZShuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gdkllKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIFJjKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIG1JdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sdkllKG4sZSwi''@;'; put 'put ''Z2V0IikpfWZ1bmN0aW9uIGt3KG4sZSx0KXttSWUobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIGozKG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gdkl0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0''@;'; put 'put ''ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obix2SWUobixlLCJzZXQiKSx0KSx0fWZ1bmN0aW9uIGs3KG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0''@;'; put 'put ''YW5jZSIpO3JldHVybiB0fWZ1bmN0aW9uIHBUKG4sZSl7bUllKG4sZSksZS5hZGQobil9Y29uc3QgZ1Q9T2JqZWN0LmZyZWV6ZSh7Q0VMTDoiY2VsbCIsTUlYRUQ6Im1peGVkIn0pO3ZhciBxZD1uZXcgV2Vha01hcCxKWT1uZXcgV2Vha01hcCxvTz1uZXcgV2Vha01hcCxhTz1uZXcgV2Vha01h''@;'; put 'put ''cCxzTz1uZXcgV2Vha01hcCxsTz1uZXcgV2Vha01hcCxtVD1uZXcgV2Vha01hcCxlWj1uZXcgV2Vha1NldCxfSWU9bmV3IFdlYWtTZXQseUllPW5ldyBXZWFrU2V0LGZkZT1uZXcgV2Vha1NldCxiSWU9bmV3IFdlYWtTZXQsd0llPW5ldyBXZWFrU2V0O2NsYXNzIF9JdHtpbml0KCl7Y29uc3Qg''@;'; put 'put ''ZT1SYyh0aGlzLHFkKS5nZXRTZXR0aW5ncygpO2ozKHRoaXMsSlksZS5pbWVGYXN0RWRpdD9nVC5NSVhFRDpnVC5DRUxMKSxSYyh0aGlzLHFkKS5hZGRIb29rKCJhZnRlclVwZGF0ZVNldHRpbmdzIiwoLi4udCk9Pms3KHRoaXMsd0llLENJdCkuY2FsbCh0aGlzLHRbMF0pKSxSYyh0aGlzLHFk''@;'; put 'put ''KS5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsKC4uLnQpPT5rNyh0aGlzLGZkZSxDSWUpLmNhbGwodGhpcykpLFJjKHRoaXMscWQpLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uRm9jdXNTZXQiLCguLi50KT0+azcodGhpcyxmZGUsQ0llKS5jYWxsKHRoaXMpKSxSYyh0aGlzLHFkKS5hZGRIb29r''@;'; put 'put ''KCJhZnRlclNlbGVjdGlvbkVuZCIsKC4uLnQpPT5rNyh0aGlzLHlJZSxiSXQpLmNhbGwodGhpcykpLFJjKHRoaXMscWQpLmFkZEhvb2soImFmdGVyUmVuZGVyIiwoLi4udCk9Pms3KHRoaXMsYkllLHdJdCkuY2FsbCh0aGlzKSl9Z2V0Rm9jdXNNb2RlKCl7cmV0dXJuIFJjKHRoaXMsSlkpfXNl''@;'; put 'put ''dEZvY3VzTW9kZShlKXtPYmplY3QudmFsdWVzKGdUKS5pbmNsdWRlcyhlKT9qMyh0aGlzLEpZLGUpOkhhKGAiJHtlfSIgaXMgbm90IGEgdmFsaWQgZm9jdXMgbW9kZS5gKX1nZXRSZWZvY3VzRGVsYXkoKXtyZXR1cm4gUmModGhpcyxvTyl9c2V0UmVmb2N1c0RlbGF5KGUpe2ozKHRoaXMsb08s''@;'; put 'put ''ZSl9c2V0UmVmb2N1c0VsZW1lbnRHZXR0ZXIoZSl7ajModGhpcyxhTyxlKX1zdXNwZW5kKCl7ajModGhpcyxtVCwhMCl9cmVzdW1lKCl7ajModGhpcyxtVCwhMSl9Z2V0UmVmb2N1c0VsZW1lbnQoKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUmModGhpcyxhTyk/UmModGhpcyxhTykuY2Fs''@;'; put 'put ''bCh0aGlzKTpSYyh0aGlzLHFkKS5nZXRBY3RpdmVFZGl0b3IoKT8uVEVYVEFSRUF9Zm9jdXNFbGVtZW50KGUsdCl7cmV0dXJuISghaHMoZSl8fCFlLmlzQ29ubmVjdGVkfHwoZS5mb2N1cyh0KSwwKSl9Zm9jdXNPbkhpZ2hsaWdodGVkQ2VsbChlKXtjb25zdCB0PXI9Pntjb25zdCBpPVJjKHRo''@;'; put 'put ''aXMscWQpLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKT8uaGlnaGxpZ2h0O2lmKCFpKXJldHVybjtsZXQgbz1SYyh0aGlzLHFkKS5ydW5Ib29rcygibW9kaWZ5Rm9jdXNlZEVsZW1lbnQiLGkucm93LGkuY29sLHIpO2hzKG8pfHwobz1yKSxvJiYhUmModGhpcyxxZCkuZ2V0QWN0aXZlRWRpdG9y''@;'; put 'put ''KCk/LmlzT3BlbmVkPy4oKSYmdGhpcy5mb2N1c0VsZW1lbnQobyx7cHJldmVudFNjcm9sbDohMH0pfTtlP3QoZSk6azcodGhpcyxlWixwZGUpLmNhbGwodGhpcyxyPT50KHIpKX1yZWZvY3VzVG9FZGl0b3JUZXh0YXJlYShlPVJjKHRoaXMsb08pKXtSYyh0aGlzLHFkKS5nZXRTZXR0aW5ncygp''@;'; put 'put ''LmltZUZhc3RFZGl0JiYhUmModGhpcyxxZCkuZ2V0QWN0aXZlRWRpdG9yKCk/LmlzT3BlbmVkPy4oKSYmKFJjKHRoaXMscWQpLmdldEFjdGl2ZUVkaXRvcigpPy5yZWZyZXNoVmFsdWU/LigpLFJjKHRoaXMsc08pLmhhcyhlKXx8UmModGhpcyxzTykuc2V0KGUsQk0oKCk9PntSYyh0aGlzLHFk''@;'; put 'put ''KS5pc0Rlc3Ryb3llZHx8dGhpcy5nZXRSZWZvY3VzRWxlbWVudCgpPy5zZWxlY3QoKX0sZSkpLFJjKHRoaXMsc08pLmdldChlKSgpKX1jb25zdHJ1Y3RvcihlKXtwVCh0aGlzLGVaKSxwVCh0aGlzLF9JZSkscFQodGhpcyx5SWUpLHBUKHRoaXMsZmRlKSxwVCh0aGlzLGJJZSkscFQodGhpcyx3''@;'; put 'put ''SWUpLGt3KHRoaXMscWQse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGt3KHRoaXMsSlkse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGt3KHRoaXMsb08se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGt3KHRoaXMsYU8se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGt3KHRo''@;'; put 'put ''aXMsc08se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGt3KHRoaXMsbE8se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGt3KHRoaXMsbVQse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGozKHRoaXMsb08sMSksajModGhpcyxhTyxudWxsKSxqMyh0aGlzLHNPLG5ldyBNYXApLGoz''@;'; put 'put ''KHRoaXMsbE8sITEpLGozKHRoaXMsbVQsITEpLGozKHRoaXMscWQsZSl9fWZ1bmN0aW9uIHBkZShuKXtjb25zdCBlPVJjKHRoaXMscWQpLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKT8uaGlnaGxpZ2h0O2lmKCFlfHwhUmModGhpcyxxZCkuc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoZSkpcmV0''@;'; put 'put ''dXJuIHZvaWQgbihudWxsKTtpZihudWxsPT09ZS5yb3d8fG51bGw9PT1lLmNvbClyZXR1cm4gdm9pZCBuKG51bGwpO2NvbnN0e3Jvdzp0LGNvbDpyfT1lLGk9UmModGhpcyxxZCkuZ2V0Q2VsbCh0LHIsITApO251bGw9PT1pP1JjKHRoaXMscWQpLmFkZEhvb2tPbmNlKCJhZnRlclNjcm9sbCIs''@;'; put 'put ''KCk9PntuKFJjKHRoaXMscWQpLmdldENlbGwodCxyLCEwKSl9KTpuKGkpfWZ1bmN0aW9uIHlJdCgpe2NvbnN0IG49UmModGhpcyxtVCk7azcodGhpcyxlWixwZGUpLmNhbGwodGhpcyxlPT57Y29uc3QgdD1SYyh0aGlzLHFkKS5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudDtuJiZ0JiZWTSh0''@;'; put 'put ''KXx8KHQmJlZNKHQpJiZ0LmJsdXIoKSx0aGlzLmZvY3VzT25IaWdobGlnaHRlZENlbGwoZSkpfSl9ZnVuY3Rpb24gYkl0KCl7aWYoUmModGhpcyxtVCkpe2NvbnN0IG49UmModGhpcyxxZCkucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7aWYobiYmVk0obikpcmV0dXJufWs3KHRoaXMsZVos''@;'; put 'put ''cGRlKS5jYWxsKHRoaXMsbj0+e3RoaXMuZ2V0Rm9jdXNNb2RlKCk9PT1nVC5NSVhFRCYmIlREIj09PW4/Lm5vZGVOYW1lJiZ0aGlzLnJlZm9jdXNUb0VkaXRvclRleHRhcmVhKCl9KX1mdW5jdGlvbiBDSWUoKXtqMyh0aGlzLGxPLCEwKX1mdW5jdGlvbiB3SXQoKXtSYyh0aGlzLGxPKSYmKGoz''@;'; put 'put ''KHRoaXMsbE8sITEpLGs3KHRoaXMsX0llLHlJdCkuY2FsbCh0aGlzKSl9ZnVuY3Rpb24gQ0l0KG4peyJib29sZWFuIj09dHlwZW9mIG4uaW1lRmFzdEVkaXQmJnRoaXMuc2V0Rm9jdXNNb2RlKG4uaW1lRmFzdEVkaXQ/Z1QuTUlYRUQ6Z1QuQ0VMTCl9Y29uc3QgU0l0PU9iamVjdC5mcmVlemUo''@;'; put 'put ''e0lOTElORToiaW5saW5lIixNT0RBTDoibW9kYWwifSksYzY9T2JqZWN0LmZyZWV6ZSh7VU5LTk9XTjoidW5rbm93biIsQ0xJQ0s6ImNsaWNrIixUQUJfRlJPTV9BQk9WRToidGFiX2Zyb21fYWJvdmUiLFRBQl9GUk9NX0JFTE9XOiJ0YWJfZnJvbV9iZWxvdyJ9KTtmdW5jdGlvbiBTSWUobixl''@;'; put 'put ''KXtjb25zdCByPW4ucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiByLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHIuY2xhc3NMaXN0LmFkZCgiaHRGb2N1c0NhdGNoZXIiKSxyLmRhdGFzZXQuaHRGb2N1c1NvdXJjZT1lLHJ9ZnVuY3Rpb24gQUl0KG4pe2NvbnN0IGU9Q0wo''@;'; put 'put ''e2Vycm9ySWRFeGlzdHM6dmU9PmBUaGUgIiR7dmV9IiBmb2N1cyBzY29wZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuYH0pLHQ9bi5nZXRTaG9ydGN1dE1hbmFnZXIoKTtsZXQgcj1udWxsO2Z1bmN0aW9uIGcodmUsTWU9YzYuVU5LTk9XTil7ciE9PXZlJiYobnVsbCE9PXImJkUocikscj12ZSxy''@;'; put 'put ''LmFjdGl2YXRlKE1lKSx0LnNldEFjdGl2ZUNvbnRleHROYW1lKHZlLmdldFNob3J0Y3V0c0NvbnRleHROYW1lKCkpKX1mdW5jdGlvbiBFKHZlKXtPKCkscj09PXZlJiYocj1udWxsLHZlLmRlYWN0aXZhdGUoKSl9ZnVuY3Rpb24gTygpe2NvbnN0IHZlPWUuZ2V0VmFsdWVzKCksTWU9dmUuZmls''@;'; put 'put ''dGVyKEhlPT5IZS5ydW5Pbmx5SWYoKSYmIm1vZGFsIj09PUhlLmdldFR5cGUoKSk7dmUuZm9yRWFjaChIZT0+e01lLmxlbmd0aD4wJiZNZS5pbmNsdWRlcyhIZSl8fDA9PT1NZS5sZW5ndGh8fEhlLmhhc0NvbnRhaW5lckRldGFjaGVkKCk/SGUuZW5hYmxlKCk6SGUuZGlzYWJsZSgpLEhlPT09''@;'; put 'put ''cj9IZS5jb250YWlucyhuLnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50KT9IZS5kZWFjdGl2YXRlRm9jdXNDYXRjaGVycygpOkhlLmFjdGl2YXRlRm9jdXNDYXRjaGVycygpOkhlLnJ1bk9ubHlJZigpP0hlLmFjdGl2YXRlRm9jdXNDYXRjaGVycygpOkhlLmRlYWN0aXZhdGVGb2N1c0NhdGNo''@;'; put 'put ''ZXJzKCl9KX1mdW5jdGlvbiBaKHZlLE1lKXtpZighdmUuaXNDb25uZWN0ZWR8fCFVdih2ZSkpcmV0dXJuO2NvbnN0IEhlPWUuZ2V0VmFsdWVzKCkuZmlsdGVyKGF0PT5hdC5ydW5Pbmx5SWYoKSk7bGV0IFdlPSExO0hlLmZvckVhY2goYXQ9PnshV2UmJmF0LmNvbnRhaW5zKHZlKSYmKFdlPSEw''@;'; put 'put ''LE1lIT09YzYuVU5LTk9XTiYmbi5saXN0ZW4oKSxnKGF0LE1lKSl9KSwhV2UmJnImJihFKHIpLG4udW5saXN0ZW4oKSl9Y29uc3QgZWU9ZnVuY3Rpb24geEl0KG4sZT17fSl7bGV0IHQ9ITE7ZnVuY3Rpb24gcihFKXt0fHxlLm9uRm9jdXM/LihFKX1mdW5jdGlvbiBpKEUpe2Uub25DbGljaz8u''@;'; put 'put ''KEUpfWZ1bmN0aW9uIG8oRSl7IlRhYiI9PT1FLmtleSYmZS5vblRhYktleURvd24/LihFKX1mdW5jdGlvbiBhKCl7dD0hMH1mdW5jdGlvbiBsKCl7dD0hMX1yZXR1cm57bW91bnQ6KCk9PntsZXQgRT1uO2Zvcig7RTspe2NvbnN0e2RvY3VtZW50RWxlbWVudDpPfT1FLmRvY3VtZW50O08uYWRk''@;'; put 'put ''RXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsciksTy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsaSksTy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixvKSxPLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsYSksTy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixsKSxFPXY3KEUpfX0s''@;'; put 'put ''dW5tb3VudDooKT0+e2xldCBFPW47Zm9yKDtFOyl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50Ok99PUUuZG9jdW1lbnQ7Ty5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1c2luIixyKSxPLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixpKSxPLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24i''@;'; put 'put ''LG8pLE8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixhKSxPLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGwpLEU9djcoRSl9fX19KG4ucm9vdFdpbmRvdyx7b25Gb2N1czp2ZT0+e1ooQWEodmUpLEFhKHZlKS5kYXRhc2V0Lmh0Rm9jdXNTb3VyY2U/P2M2LlVOS05PV04p''@;'; put 'put ''fSxvbkNsaWNrOnZlPT57WihBYSh2ZSksYzYuQ0xJQ0spfSxvblRhYktleURvd246KCk9PntPKCl9fSk7cmV0dXJuIGVlLm1vdW50KCkse2dldEFjdGl2ZVNjb3BlSWQ6ZnVuY3Rpb24gaSgpe3JldHVybiByP2UuZ2V0SWQocik6bnVsbH0scmVnaXN0ZXJTY29wZTpmdW5jdGlvbiBvKHZlLE1l''@;'; put 'put ''LEhlPXt9KXtlLmhhc0l0ZW0odmUpJiZKcihgU2NvcGUgd2l0aCBpZCAiJHt2ZX0iIGFscmVhZHkgcmVnaXN0ZXJlZGApO2NvbnN0IFdlPWZ1bmN0aW9uIFRJdChuLGUsdD17fSl7Y29uc3Qgcj17c2hvcnRjdXRzQ29udGV4dE5hbWU6ImdyaWQiLHR5cGU6U0l0LklOTElORSxjb250YWluczpl''@;'; put 'put ''ZT0+ZWU9PT1lfHxlLmNvbnRhaW5zKGVlKSxydW5Pbmx5SWY6KCk9PiEwLGVuYWJsZUZvY3VzQ2F0Y2hlcnM6ITAsLi4udH0saT0hMT09PXIuZW5hYmxlRm9jdXNDYXRjaGVycz9udWxsOmZ1bmN0aW9uIE1JdChuLGUpe2NvbnN0IHQ9U0llKG4sYzYuVEFCX0ZST01fQUJPVkUpLHI9U0llKG4s''@;'; put 'put ''YzYuVEFCX0ZST01fQkVMT1cpO3JldHVybiBlLnByZXBlbmQodCksZS5hcHBlbmQocikse2FjdGl2YXRlKCl7dC50YWJJbmRleD0wLHIudGFiSW5kZXg9MH0sZGVhY3RpdmF0ZSgpe3QudGFiSW5kZXg9LTEsci50YWJJbmRleD0tMX0sZGVzdHJveSgpe3QucmVtb3ZlKCksci5yZW1vdmUoKX19''@;'; put 'put ''fShuLGUpO3JldHVybntnZXRUeXBlOigpPT5yLnR5cGUsaGFzQ29udGFpbmVyRGV0YWNoZWQ6KCk9PiFuLnJvb3RXcmFwcGVyRWxlbWVudC5jb250YWlucyhlKSxnZXRTaG9ydGN1dHNDb250ZXh0TmFtZTooKT0+ci5zaG9ydGN1dHNDb250ZXh0TmFtZSxydW5Pbmx5SWY6KCk9PnIucnVuT25s''@;'; put 'put ''eUlmKCksY29udGFpbnM6ZWU9PnIuY29udGFpbnMoZWUpLGFjdGl2YXRlOihlZT1jNi5VTktOT1dOKT0+e3Iub25BY3RpdmF0ZT8uKGVlKX0sZGVhY3RpdmF0ZTooKT0+e3Iub25EZWFjdGl2YXRlPy4oKX0sYWN0aXZhdGVGb2N1c0NhdGNoZXJzOigpPT57aT8uYWN0aXZhdGUoKX0sZGVhY3Rp''@;'; put 'put ''dmF0ZUZvY3VzQ2F0Y2hlcnM6KCk9PntpPy5kZWFjdGl2YXRlKCl9LGVuYWJsZTooKT0+e2UucmVtb3ZlQXR0cmlidXRlKCJpbmVydCIpfSxkaXNhYmxlOigpPT57ZS5zZXRBdHRyaWJ1dGUoImluZXJ0IiwidHJ1ZSIpfSxkZXN0cm95OigpPT57aT8uZGVzdHJveSgpfX19KG4sTWUsSGUpO2Uu''@;'; put 'put ''YWRkSXRlbSh2ZSxXZSksdC5nZXRPckNyZWF0ZUNvbnRleHQoV2UuZ2V0U2hvcnRjdXRzQ29udGV4dE5hbWUoKSl9LHVucmVnaXN0ZXJTY29wZTpmdW5jdGlvbiBhKHZlKXtlLmhhc0l0ZW0odmUpfHxKcihgU2NvcGUgd2l0aCBpZCAiJHt2ZX0iIG5vdCBmb3VuZGApLGUuZ2V0SXRlbSh2ZSku''@;'; put 'put ''ZGVzdHJveSgpLGUucmVtb3ZlSXRlbSh2ZSl9LGFjdGl2YXRlU2NvcGU6KHZlLE1lKT0+ZnVuY3Rpb24gbCh2ZSxNZT1jNi5VTktOT1dOKXtlLmhhc0l0ZW0odmUpfHxKcihgU2NvcGUgd2l0aCBpZCAiJHt2ZX0iIG5vdCBmb3VuZGApO2NvbnN0IEhlPU1lPz9jNi5VTktOT1dOO2coZS5nZXRJ''@;'; put 'put ''dGVtKHZlKSxIZSl9KHZlLE1lKSxkZWFjdGl2YXRlU2NvcGU6dmU9PmZ1bmN0aW9uIHUodmUpe2UuaGFzSXRlbSh2ZSl8fEpyKGBTY29wZSB3aXRoIGlkICIke3ZlfSIgbm90IGZvdW5kYCksRShlLmdldEl0ZW0odmUpKX0odmUpLGRlc3Ryb3k6KCk9PmVlLnVubW91bnQoKX19ZnVuY3Rpb24g''@;'; put 'put ''Z2RlKG4pe2NvbnN0e3Jvd0luZGV4TWFwcGVyOmUsY29sdW1uSW5kZXhNYXBwZXI6dH09bix7bmF2aWdhYmxlSGVhZGVyczpyfT1uLmdldFNldHRpbmdzKCksaT1yJiZuLmNvdW50Q29sSGVhZGVycygpPjA/LW4uY291bnRDb2xIZWFkZXJzKCk6MCxvPXImJm4uY291bnRSb3dIZWFkZXJzKCk+''@;'; put 'put ''MD8tbi5jb3VudFJvd0hlYWRlcnMoKTowLGE9MD09PWk/ZS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGkpOmksbD0wPT09bz90LmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobyk6bztyZXR1cm4gbnVsbD09PWF8fG51bGw9PT1sP251bGw6bi5fY3JlYXRlQ2VsbENvb3Jkcyhh''@;'; put 'put ''LGwpfWZ1bmN0aW9uIG1kZShuKXtjb25zdHtyb3dJbmRleE1hcHBlcjplLGNvbHVtbkluZGV4TWFwcGVyOnR9PW4se25hdmlnYWJsZUhlYWRlcnM6cn09bi5nZXRTZXR0aW5ncygpO2xldCBpPWUuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKS0xLG89dC5nZXRSZW5kZXJhYmxlSW5kZXhl''@;'; put 'put ''c0xlbmd0aCgpLTE7aWYoaTwwKXtpZighcnx8MD09PW4uY291bnRDb2xIZWFkZXJzKCkpcmV0dXJuIG51bGw7aT0tMX1pZihvPDApe2lmKCFyfHwwPT09bi5jb3VudENvbEhlYWRlcnMoKSlyZXR1cm4gbnVsbDtvPS0xfXJldHVybiBuLl9jcmVhdGVDZWxsQ29vcmRzKGUuZ2V0VmlzdWFsRnJv''@;'; put 'put ''bVJlbmRlcmFibGVJbmRleChpKT8/aSx0LmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobyk/P28pfWNvbnN0IGNPPSJncmlkRGVmYXVsdCIsc189ImdyaWQiLHRaPSJncmlkLnRhYk5hdmlnYXRpb24iLFI3PSJlZGl0b3JNYW5hZ2VyLmhhbmRsaW5nRWRpdG9yIjtmdW5jdGlvbiBJSXQo''@;'; put 'put ''bil7Y29uc3QgZT1mdW5jdGlvbiBrSXQobil7cmV0dXJuIGU9PntpZighZSlyZXR1cm4gbnVsbDtjb25zdHtyb3dJbmRleE1hcHBlcjp0LGNvbHVtbkluZGV4TWFwcGVyOnJ9PW47aWYodC5pc0hpZGRlbihlLnJvdyl8fHIuaXNIaWRkZW4oZS5jb2wpKXJldHVybiBudWxsO2NvbnN0IGk9Z2Rl''@;'; put 'put ''KG4pLG89bWRlKG4pO3JldHVybiBudWxsPT09aXx8bnVsbD09PW8/bnVsbDooZS5yb3c9VnMoZS5yb3csaS5yb3c/P2Uucm93LG8ucm93Pz9lLnJvdyksZS5jb2w9VnMoZS5jb2wsaS5jb2w/P2UuY29sLG8uY29sPz9lLmNvbCksZSl9fShuKSx0PXt3cmFwcGVkOiExLGZsaXBwZWQ6ITF9O2xl''@;'; put 'put ''dCByLGk9ITAsbz0hMTtuLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIiwoKT0+e2kmJihyPW4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpPy5oaWdobGlnaHQpfSksbi5hZGRIb29rKCJiZWZvcmVSb3dXcmFwIiwodSxnLEUpPT57dC53cmFwcGVkPSEwLHQuZmxpcHBlZD1FfSksbi5hZGRIb29r''@;'; put 'put ''KCJiZWZvcmVFbXB0eURhdGFTdGF0ZVNob3ciLCgpPT57bz0hMH0pLG4uYWRkSG9vaygiYmVmb3JlRW1wdHlEYXRhU3RhdGVIaWRlIiwoKT0+e289ITF9KSxuLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoc18pPy5hZGRTaG9ydGN1dHMoW3trZXlzOltbIlRhYiJdLFsiU2hpZnQi''@;'; put 'put ''LCJUYWIiXV0scHJldmVudERlZmF1bHQ6ITEsc3RvcFByb3BhZ2F0aW9uOiExLHJlbGF0aXZlVG9Hcm91cDpjTyxncm91cDp0Wixwb3NpdGlvbjoiYmVmb3JlIixjYWxsYmFjaygpe2NvbnN0e3RhYk5hdmlnYXRpb246dX09bi5nZXRTZXR0aW5ncygpO24uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2''@;'; put 'put ''ZSgpJiYhdSYmKGk9ITEpfX0se2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxzdG9wUHJvcGFnYXRpb246ITEscmVsYXRpdmVUb0dyb3VwOmNPLGdyb3VwOnRaLGNhbGxiYWNrKHUpe2NvbnN0e3RhYk5hdmlnYXRpb246ZyxhdXRvV3JhcFJvdzpFfT1u''@;'; put 'put ''LmdldFNldHRpbmdzKCk7aT0hMCwoIWd8fCFuLnNlbGVjdGlvbi5pc1NlbGVjdGVkKCl8fEUmJnQud3JhcHBlZCYmdC5mbGlwcGVkfHwhRSYmdC53cmFwcGVkKSYmKEUmJnQud3JhcHBlZCYmdC5mbGlwcGVkJiYocj11LnNoaWZ0S2V5P2dkZShuKTptZGUobikpLHQud3JhcHBlZD0hMSx0LmZs''@;'; put 'put ''aXBwZWQ9ITEpfSxwb3NpdGlvbjoiYWZ0ZXIifV0pO2NvbnN0IGw9bi5yb290R3JpZENvbnRlbnRFbGVtZW50Pz9uLnJvb3RFbGVtZW50O24uZ2V0Rm9jdXNTY29wZU1hbmFnZXIoKS5yZWdpc3RlclNjb3BlKCJncmlkIixsLHtjb250YWluczp1PT4hKGwhPT11JiYhbC5jb250YWlucyh1KSl8''@;'; put 'put ''fG51bGw9PT11LmNsb3Nlc3QoIi5odE1lbnUiKSYmbi5yb290UG9ydGFsRWxlbWVudC5jb250YWlucyh1KSxydW5Pbmx5SWY6KCk9Pntjb25zdHtuYXZpZ2FibGVIZWFkZXJzOnV9PW4uZ2V0U2V0dGluZ3MoKTtyZXR1cm4hKChvfHwhdSkmJjA9PT1uLmNvdW50UmVuZGVyZWRSb3dzKCkmJjA9''@;'; put 'put ''PT1uLmNvdW50UmVuZGVyZWRDb2xzKCkmJm4uY291bnRSb3dIZWFkZXJzKCk+MCYmbi5jb3VudENvbEhlYWRlcnMoKT4wfHwhKCF1JiZuLmNvdW50UmVuZGVyZWRSb3dzKCk+MCYmbi5jb3VudFJlbmRlcmVkQ29scygpPjB8fHUmJihuLmNvdW50Um93SGVhZGVycygpPjB8fG4uY291bnRDb2xI''@;'; put 'put ''ZWFkZXJzKCk+MCkpKX0sb25BY3RpdmF0ZTp1PT57aWYoInRhYl9mcm9tX2Fib3ZlIj09PXUpe2NvbnN0IGc9ZShyKT8/Z2RlKG4pO2lmKGcpe2NvbnN0IEU9bi5ydW5Ib29rcygibW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb24iLCJmcm9tX2Fib3ZlIixnKSx7cm93Ok8sY29sOlp9PWc7ITEh''@;'; put 'put ''PT1FJiZudWxsIT09TyYmbnVsbCE9PVomJihuLnNlbGVjdENlbGwoTyxaKSxuLmdldEZvY3VzTWFuYWdlcigpLmZvY3VzT25IaWdobGlnaHRlZENlbGwoKSl9fWVsc2UgaWYoInRhYl9mcm9tX2JlbG93Ij09PXUpe2NvbnN0IGc9ZShyKT8/bWRlKG4pO2lmKGcpe2NvbnN0IEU9bi5ydW5Ib29r''@;'; put 'put ''cygibW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb24iLCJmcm9tX2JlbG93IixnKSx7cm93Ok8sY29sOlp9PWc7ITEhPT1FJiZudWxsIT09TyYmbnVsbCE9PVomJm4uc2VsZWN0Q2VsbChPLFopfX19fSl9Y29uc3QgRUllPW5ldyBNYXAoW1siICIsInNwYWNlIl0sWyJzcGFjZWJhciIsInNwYWNl''@;'; put 'put ''Il0sWyJzY3JvbGwiLCJzY3JvbGxsb2NrIl0sWyJkZWwiLCJkZWxldGUiXSxbImVzYyIsImVzY2FwZSJdLFsibWVkaWFuZXh0dHJhY2siLCJtZWRpYXRyYWNrbmV4dCJdLFsibWVkaWFwcmV2aW91c3RyYWNrIiwibWVkaWF0cmFja3ByZXZpb3VzIl0sWyJ2b2x1bWV1cCIsImF1ZGlvdm9sdW1l''@;'; put 'put ''dXAiXSxbInZvbHVtZWRvd24iLCJhdWRpb3ZvbHVtZWRvd24iXSxbInZvbHVtZW11dGUiLCJhdWRpb3ZvbHVtZW11dGUiXSxbIm11bHRpcGx5IiwiKiJdLFsiYWRkIiwiKyJdLFsiZGl2aWRlIiwiLyJdLFsic3VidHJhY3QiLCItIl0sWyJsZWZ0IiwiYXJyb3dsZWZ0Il0sWyJyaWdodCIsImFy''@;'; put 'put ''cm93cmlnaHQiXSxbInVwIiwiYXJyb3d1cCJdLFsiZG93biIsImFycm93ZG93biJdXSksblo9bj0+bi5tYXAoZT0+e2NvbnN0IHQ9ZS50b0xvd2VyQ2FzZSgpO3JldHVybiBFSWUuaGFzKHQpP0VJZS5nZXQodCk/P3Q6dH0pLnNvcnQoKGUsdCk9PmUubG9jYWxlQ29tcGFyZSh0KSkuam9pbigi''@;'; put 'put ''KyIpLE1JZT1uZXcgTWFwKFtbOTYsIm51bXBhZDAiXSxbOTcsIm51bXBhZDEiXSxbOTgsIm51bXBhZDIiXSxbOTksIm51bXBhZDMiXSxbMTAwLCJudW1wYWQ0Il0sWzEwMSwibnVtcGFkNSJdLFsxMDIsIm51bXBhZDYiXSxbMTAzLCJudW1wYWQ3Il0sWzEwNCwibnVtcGFkOCJdLFsxMDUsIm51''@;'; put 'put ''bXBhZDkiXSxbMTA2LCJtdWx0aXBseSJdLFsxMDcsImFkZCJdLFsxMDgsImRlY2ltYWwiXSxbMTA5LCJzdWJ0cmFjdCJdLFsxMTAsImRlY2ltYWwiXSxbMTExLCJkaXZpZGUiXSxbMTEyLCJmMSJdLFsxMTMsImYyIl0sWzExNCwiZjMiXSxbMTE1LCJmNCJdLFsxMTYsImY1Il0sWzExNywiZjYi''@;'; put 'put ''XSxbMTE4LCJmNyJdLFsxMTksImY4Il0sWzEyMCwiZjkiXSxbMTIxLCJmMTAiXSxbMTIyLCJmMTEiXSxbMTIzLCJmMTIiXSxbMTg2LCJzZW1pY29sb24iXSxbMTg3LCJlcXVhbCJdLFsxODgsImNvbW1hIl0sWzE4OSwibWludXMiXSxbMTkwLCJwZXJpb2QiXSxbMTkxLCJzbGFzaCJdLFsxOTIs''@;'; put 'put ''ImJhY2txdW90ZSJdLFsyMTksImJyYWNrZXRsZWZ0Il0sWzIyMCwiYmFja3NsYXNoIl0sWzIyMSwiYnJhY2tldHJpZ2h0Il0sWzIyMiwicXVvdGUiXV0pLHVPPSh7d2hpY2g6bixrZXk6ZX0pPT57aWYoTUllLmhhcyhuKSlyZXR1cm4gTUllLmdldChuKT8/ZS50b0xvd2VyQ2FzZSgpO2NvbnN0''@;'; put 'put ''IHQ9U3RyaW5nLmZyb21DaGFyQ29kZShuKS50b0xvd2VyQ2FzZSgpO3JldHVybi9eW2EtejAtOV0kLy50ZXN0KHQpP3Q6ZS50b0xvd2VyQ2FzZSgpfSxPSXQ9WyJtZXRhIiwiYWx0Iiwic2hpZnQiLCJjb250cm9sIl0sZE89bj0+T0l0LmluY2x1ZGVzKG4pLHZUPShuLGU9ITEpPT57Y29uc3Qg''@;'; put 'put ''dD1bXTtyZXR1cm4gbi5hbHRLZXkmJnQucHVzaCgiYWx0IiksZSYmKG4uY3RybEtleXx8bi5tZXRhS2V5KT90LnB1c2goImNvbnRyb2wvbWV0YSIpOihuLmN0cmxLZXkmJnQucHVzaCgiY29udHJvbCIpLG4ubWV0YUtleSYmdC5wdXNoKCJtZXRhIikpLG4uc2hpZnRLZXkmJnQucHVzaCgic2hp''@;'; put 'put ''ZnQiKSx0fSxUSWU9U3ltYm9sKCJzaG9ydGN1dC1jb250ZXh0Iik7ZnVuY3Rpb24geEllKG4pe3JldHVybiBDYShuKSYmbi5fX2tpbmRPZj09PVRJZX1jb25zdCBoTz1mdW5jdGlvbiBQSXQoKXtjb25zdCBuPW5ldyBTZXQ7cmV0dXJue3ByZXNzKGUpe24uYWRkKGUpfSxyZWxlYXNlKGUpe24u''@;'; put 'put ''ZGVsZXRlKGUpfSxyZWxlYXNlQWxsKCl7bi5jbGVhcigpfSxpc1ByZXNzZWQ6ZT0+bi5oYXMoZSl9fSgpLGZPPW5ldyBXZWFrTWFwLEFJZT1uPT57aWYoInN0cmluZyI9PXR5cGVvZiBuLmtleSl7Y29uc3QgZT11TyhuKTtkTyhlKSYmaE8ucHJlc3MoZSl9fSxrSWU9bj0+e2lmKCJzdHJpbmci''@;'; put 'put ''PT10eXBlb2Ygbi5rZXkpe2NvbnN0IGU9dU8obik7ZE8oZSkmJmhPLnJlbGVhc2UoZSl9fSxCSXQ9e25hbWU6ImVkaXRvckNsb3NlQW5kU2F2ZSIsY2FsbGJhY2sobil7bi5fZ2V0RWRpdG9yTWFuYWdlcigpLmNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5nZXMoKX19LFJJZT17X2hvb2tzU3RvcmFn''@;'; put 'put ''ZTpPYmplY3QuY3JlYXRlKG51bGwpLGFkZEhvb2sobixlKXtyZXR1cm4gdGhpcy5faG9va3NTdG9yYWdlW25dfHwodGhpcy5faG9va3NTdG9yYWdlW25dPVtdKSx0aGlzLmhvdC5hZGRIb29rKG4sZSksdGhpcy5faG9va3NTdG9yYWdlW25dLnB1c2goZSksdGhpc30scmVtb3ZlSG9va3NCeUtl''@;'; put 'put ''eShuKXtYbih0aGlzLl9ob29rc1N0b3JhZ2Vbbl18fFtdLGU9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKG4sZSl9KX0sY2xlYXJIb29rcygpe2FjKHRoaXMuX2hvb2tzU3RvcmFnZSwobixlKT0+dGhpcy5yZW1vdmVIb29rc0J5S2V5KGUpKSx0aGlzLl9ob29rc1N0b3JhZ2U9e319fTtLNShSSWUs''@;'; put 'put ''Ik1JWElOX05BTUUiLCJob29rc1JlZlJlZ2lzdGVyZXIiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgVUl0PVJJZTtmdW5jdGlvbiBJSWUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24g''@;'; put 'put ''bm9uLWluc3RhbmNlIik7cmV0dXJuIHR9ZnVuY3Rpb24gREllKG4sZSl7KGZ1bmN0aW9uIHpJdChuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLGUp''@;'; put 'put ''LGUuYWRkKG4pfWNvbnN0IFZoPU9iamVjdC5mcmVlemUoe1ZJUkdJTjoiU1RBVEVfVklSR0lOIixFRElUSU5HOiJTVEFURV9FRElUSU5HIixXQUlUSU5HOiJTVEFURV9XQUlUSU5HIixGSU5JU0hFRDoiU1RBVEVfRklOSVNIRUQifSk7dmFyIExJZT1uZXcgV2Vha1NldCxPSWU9bmV3IFdlYWtT''@;'; put 'put ''ZXQ7Y2xhc3MgSTd7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJiYXNlIn1fZmlyZUNhbGxiYWNrcyhlKXt0aGlzLl9jbG9zZUNhbGxiYWNrJiYodGhpcy5fY2xvc2VDYWxsYmFjayhlKSx0aGlzLl9jbG9zZUNhbGxiYWNrPW51bGwpfWluaXQoKXt9Z2V0VmFsdWUoKXtKcigiRWRp''@;'; put 'put ''dG9yIGdldFZhbHVlKCkgbWV0aG9kIHVuaW1wbGVtZW50ZWQiKX1zZXRWYWx1ZShlKXtKcigiRWRpdG9yIHNldFZhbHVlKCkgbWV0aG9kIHVuaW1wbGVtZW50ZWQiKX1vcGVuKGUpe0pyKCJFZGl0b3Igb3BlbigpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9Y2xvc2UoKXtKcigiRWRpdG9yIGNs''@;'; put 'put ''b3NlKCkgbWV0aG9kIHVuaW1wbGVtZW50ZWQiKX1mb2N1cygpe0pyKCJFZGl0b3IgZm9jdXMoKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIpfXByZXBhcmUoZSx0LHIsaSxvLGEpe3RoaXMuVEQ9aSx0aGlzLnJvdz1lLHRoaXMuY29sPXQsdGhpcy5wcm9wPXIsdGhpcy5vcmlnaW5hbFZhbHVlPW8s''@;'; put 'put ''dGhpcy5jZWxsUHJvcGVydGllcz1hLHRoaXMuc3RhdGU9dGhpcy5pc09wZW5lZCgpP3RoaXMuc3RhdGU6VmguVklSR0lOfWV4dGVuZCgpe3JldHVybiBjbGFzcyBleHRlbmRzIHRoaXMuY29uc3RydWN0b3J7fX1zYXZlVmFsdWUoZSx0KXtsZXQgcixpLG8sYTtpZih0KXtjb25zdCB1PXRoaXMu''@;'; put 'put ''aG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxnPXU/LmdldFRvcFN0YXJ0Q29ybmVyKCksRT11Py5nZXRCb3R0b21FbmRDb3JuZXIoKTtyPWc/LnJvdz8/dGhpcy5yb3csaT1nPy5jb2w/P3RoaXMuY29sLG89RT8ucm93Pz90aGlzLnJvdyxhPUU/LmNvbD8/dGhpcy5jb2x9ZWxzZVtyLGks''@;'; put 'put ''byxhXT1bdGhpcy5yb3csdGhpcy5jb2wsbnVsbCxudWxsXTtjb25zdCBsPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixyLGksITEsIm1ldGEiKTtBcnJheS5pc0FycmF5KGwpJiYoW3IsaV09bCksdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkocixpLGUsbyxhLCJl''@;'; put 'put ''ZGl0Iil9YmVnaW5FZGl0aW5nKGUsdCl7aWYodGhpcy5zdGF0ZSE9PVZoLlZJUkdJTilyZXR1cm47aWYobnVsbD09PXRoaXMucm93fHxudWxsPT09dGhpcy5jb2wpcmV0dXJuIHZvaWQgSGEoIkVkaXRvciBvcGVuZWQgd2l0aG91dCB2YWxpZCBjZWxsIGNvb3JkaW5hdGVzLiIpO2NvbnN0IHI9''@;'; put 'put ''dGhpcy5ob3QsaT1yLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5yb3cpLG89ci5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRoaXMuY29sKTtpZihudWxsIT09aSYmbnVsbCE9PW8mJnIudmlldy5zY3JvbGxW''@;'; put 'put ''aWV3cG9ydCh7cm93OmksY29sOm99KSx0aGlzLnN0YXRlPVZoLkVESVRJTkcsdGhpcy5pc0luRnVsbEVkaXRNb2RlKCkpe2NvbnN0IGE9S1kodGhpcy5vcmlnaW5hbFZhbHVlLHRoaXMuaG90LmdldENlbGxNZXRhKHRoaXMucm93LHRoaXMuY29sKSksbD0ic3RyaW5nIj09dHlwZW9mIGU/ZTpQ''@;'; put 'put ''bChhKTt0aGlzLnNldFZhbHVlKGwpfXRoaXMub3Blbih0KSx0aGlzLl9vcGVuZWQ9ITAsdGhpcy5mb2N1cygpLHIudmlldy5yZW5kZXIoKSxyLnJ1bkhvb2tzKCJhZnRlckJlZ2luRWRpdGluZyIsdGhpcy5yb3csdGhpcy5jb2wpLHRoaXMuYWRkSG9vaygiYmVmb3JlRGlhbG9nU2hvdyIsKCk9''@;'; put 'put ''PnRoaXMuY2FuY2VsQ2hhbmdlcygpKX1maW5pc2hFZGl0aW5nKGUsdCxyKXtpZihyKXtjb25zdCBvPXRoaXMuX2Nsb3NlQ2FsbGJhY2s7dGhpcy5fY2xvc2VDYWxsYmFjaz1hPT57byYmbyhhKSxyKGEpLHRoaXMuaG90LnZpZXcucmVuZGVyKCl9fWlmKCF0aGlzLmlzV2FpdGluZygpKXtpZih0''@;'; put 'put ''aGlzLnN0YXRlPT09VmguVklSR0lOKXJldHVybiB2b2lkIHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlzLl9maXJlQ2FsbGJhY2tzKCEwKX0pO2lmKHRoaXMuc3RhdGU9PT1WaC5FRElUSU5HKXtpZihlKXJldHVybiB0aGlzLmNhbmNlbENoYW5nZXMoKSx2b2lkIHRoaXMuaG90''@;'; put 'put ''LnZpZXcucmVuZGVyKCk7bGV0IG89dGhpcy5nZXRWYWx1ZSgpO3RoaXMuY2VsbFByb3BlcnRpZXMudHJpbVdoaXRlc3BhY2UmJihvPSJzdHJpbmciPT10eXBlb2Ygbz9TdHJpbmcucHJvdG90eXBlLnRyaW0uY2FsbChvfHwiIik6byksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuY2VsbFByb3Bl''@;'; put 'put ''cnRpZXMudmFsdWVQYXJzZXImJihvPXRoaXMuY2VsbFByb3BlcnRpZXMudmFsdWVQYXJzZXIobyx0aGlzLmNlbGxQcm9wZXJ0aWVzKSksdGhpcy5zdGF0ZT1WaC5XQUlUSU5HLHRoaXMuc2F2ZVZhbHVlKFtbb11dLHQpLHRoaXMuaG90LmdldENlbGxWYWxpZGF0b3IodGhpcy5jZWxsUHJvcGVy''@;'; put 'put ''dGllcyk/dGhpcy5ob3QuYWRkSG9va09uY2UoInBvc3RBZnRlclZhbGlkYXRlIixhPT57dGhpcy5zdGF0ZT1WaC5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3IoYSl9KToodGhpcy5zdGF0ZT1WaC5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3IoITApKX19fWNhbmNlbENoYW5nZXMoKXt0''@;'; put 'put ''aGlzLnN0YXRlPVZoLkZJTklTSEVELHRoaXMuZGlzY2FyZEVkaXRvcigpfWRpc2NhcmRFZGl0b3IoZSl7aWYodGhpcy5zdGF0ZT09PVZoLkZJTklTSEVEKWlmKCExPT09ZSYmITAhPT10aGlzLmNlbGxQcm9wZXJ0aWVzLmFsbG93SW52YWxpZCl7aWYobnVsbD09PXRoaXMucm93fHxudWxsPT09''@;'; put 'put ''dGhpcy5jb2wpcmV0dXJuO3RoaXMuaG90LnNlbGVjdENlbGwodGhpcy5yb3csdGhpcy5jb2wpLHRoaXMuZm9jdXMoKSx0aGlzLnN0YXRlPVZoLkVESVRJTkcsdGhpcy5fZmlyZUNhbGxiYWNrcyghMSl9ZWxzZSB0aGlzLmNsb3NlKCksdGhpcy5fb3BlbmVkPSExLHRoaXMuX2Z1bGxFZGl0TW9k''@;'; put 'put ''ZT0hMSx0aGlzLnN0YXRlPVZoLlZJUkdJTix0aGlzLl9maXJlQ2FsbGJhY2tzKCEwKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpfWVuYWJsZUZ1bGxFZGl0TW9kZSgpe3RoaXMuX2Z1bGxFZGl0TW9kZT0hMH1pc0luRnVsbEVkaXRN''@;'; put 'put ''b2RlKCl7cmV0dXJuIHRoaXMuX2Z1bGxFZGl0TW9kZX1pc09wZW5lZCgpe3JldHVybiB0aGlzLl9vcGVuZWR9aXNXYWl0aW5nKCl7cmV0dXJuIHRoaXMuc3RhdGU9PT1WaC5XQUlUSU5HfWdldEVkaXRlZENlbGxSZWN0KCl7Y29uc3QgZT10aGlzLmdldEVkaXRlZENlbGwoKTtpZighZSlyZXR1''@;'; put 'put ''cm47Y29uc3R7d3RPdmVybGF5czp0LHd0Vmlld3BvcnQ6cn09dGhpcy5ob3Qudmlldy5fd3QsaT10aGlzLmhvdC5yb290V2luZG93LG89WDAoZSksYT1aZChlKSxsPVgwKHRoaXMuaG90LnJvb3RFbGVtZW50KSx1PVpkKHRoaXMuaG90LnJvb3RFbGVtZW50KSxnPXQudG9wT3ZlcmxheT8uaG9s''@;'; put 'put ''ZGVyLEU9dC5pbmxpbmVTdGFydE92ZXJsYXk/LmhvbGRlcixPPWchPT1pP2cuc2Nyb2xsVG9wOjAsWj1FIT09aT9FLnNjcm9sbExlZnQ6MCxlZT1pLmlubmVyV2lkdGgtbC5sZWZ0LXUse3d0VGFibGU6dmV9PXQuZ2V0UGFyZW50T3ZlcmxheShlKT8/dGhpcy5ob3Qudmlldy5fd3QsTWU9dmUu''@;'; put 'put ''bmFtZSxIZT1bIm1hc3RlciIsImlubGluZV9zdGFydCJdLmluY2x1ZGVzKE1lKT9POjAsV2U9WyJtYXN0ZXIiLCJ0b3AiLCJib3R0b20iXS5pbmNsdWRlcyhNZSk/WjowO2xldCBDdD1vLnRvcC1sLnRvcC0oby50b3A9PT1sLnRvcD8wOjEpLUhlLEF0PTA7QXQ9dGhpcy5ob3QuaXNSdGwoKT9p''@;'; put 'put ''LmlubmVyV2lkdGgtby5sZWZ0LWEtZWUtMStXZTpvLmxlZnQtbC5sZWZ0LTEtV2UsWyJ0b3AiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKE1lKSYmKEN0Kz10LnRvcE92ZXJsYXk/LmdldE92ZXJsYXlPZmZzZXQoKT8/MCksWyJpbmxpbmVfc3RhcnQiLCJ0b3BfaW5saW5l''@;'; put 'put ''X3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKE1lKSYmKEF0Kz1NYXRoLmFicyh0LmlubGluZVN0YXJ0T3ZlcmxheT8uZ2V0T3ZlcmxheU9mZnNldCgpPz8wKSk7Y29uc3QgS3Q9dGhpcy5ob3QuaGFzQ29sSGVhZGVycygpLHF0PXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVG''@;'; put 'put ''cm9tVmlzdWFsSW5kZXgodGhpcy5yb3c/PzApLGduPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5jb2w/PzApLENuPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCktdGhpcy5ob3Qu''@;'; put 'put ''dmlldy5fd3QuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik7KEt0JiYocXQ/PzApPD0wfHxxdD09PUNuKSYmKEN0Kz0xKSwoZ24/PzApPD0wJiYoQXQrPTEpO2NvbnN0IHFyPXIucm93c1JlbmRlckNhbGN1bGF0b3I/LnN0YXJ0UG9zaXRpb24/PzAsJG49ci5jb2x1bW5zUmVuZGVyQ2Fs''@;'; put 'put ''Y3VsYXRvcj8uc3RhcnRQb3NpdGlvbj8/MCxUcj1NYXRoLmFicyh0LmlubGluZVN0YXJ0T3ZlcmxheT8uZ2V0U2Nyb2xsUG9zaXRpb24oKT8/MCkscmk9dC50b3BPdmVybGF5Py5nZXRTY3JvbGxQb3NpdGlvbigpPz8wLGZuPUdkKHRoaXMuaG90LnJvb3REb2N1bWVudCkseXI9SUllKHRoaXMs''@;'; put 'put ''TEllLFlJdCkuY2FsbCh0aGlzLGUsTWUscXIscmksZm4pLEFuPUlJZSh0aGlzLE9JZSxaSXQpLmNhbGwodGhpcyxlLE1lLHZlLGEsJG4sVHIpLEhyPWkuZ2V0Q29tcHV0ZWRTdHlsZShlKSx0aT10aGlzLmhvdC5pc1J0bCgpPyJib3JkZXJSaWdodFdpZHRoIjoiYm9yZGVyTGVmdFdpZHRoIixm''@;'; put 'put ''cj1OdW1iZXIucGFyc2VJbnQoSHJbdGldLDEwKT4wPzA6MSxlaT1OdW1iZXIucGFyc2VJbnQoSHIuYm9yZGVyVG9wV2lkdGgsMTApPjA/MDoxLFBvPVpkKGUpK2ZyLEhvPUhoKGUpK2VpLHhpPWcmJlJzZShnKT9mbjowLFRvPUUmJklzZShFKT9mbjowLHdzPXRoaXMuaG90LnZpZXcubWF4aW11''@;'; put 'put ''bVZpc2libGVFbGVtZW50V2lkdGgoQW4pLXhpK2ZyO3JldHVybnt0b3A6Q3Qsc3RhcnQ6QXQsaGVpZ2h0OkhvLG1heEhlaWdodDpNYXRoLm1heCh0aGlzLmhvdC52aWV3Lm1heGltdW1WaXNpYmxlRWxlbWVudEhlaWdodCh5cj8/MCktVG8rZWksdGhpcy5ob3Quc3R5bGVzSGFuZGxlci5nZXRE''@;'; put 'put ''ZWZhdWx0Um93SGVpZ2h0KCk/PzApLHdpZHRoOlBvLG1heFdpZHRoOndzfX1nZXRFZGl0ZWRDZWxsc0xheWVyQ2xhc3MoKXtzd2l0Y2godGhpcy5jaGVja0VkaXRvclNlY3Rpb24oKSl7Y2FzZSJpbmxpbmUtc3RhcnQiOnJldHVybiJodF9jbG9uZV9sZWZ0IGh0X2Nsb25lX2lubGluZV9zdGFy''@;'; put 'put ''dCI7Y2FzZSJib3R0b20iOnJldHVybiJodF9jbG9uZV9ib3R0b20iO2Nhc2UiYm90dG9tLWlubGluZS1zdGFydC1jb3JuZXIiOnJldHVybiJodF9jbG9uZV9ib3R0b21fbGVmdF9jb3JuZXIgaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiO2Nhc2UidG9wIjpyZXR1cm4iaHRf''@;'; put 'put ''Y2xvbmVfdG9wIjtjYXNlInRvcC1pbmxpbmUtc3RhcnQtY29ybmVyIjpyZXR1cm4iaHRfY2xvbmVfdG9wX2xlZnRfY29ybmVyIGh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyIjtkZWZhdWx0OnJldHVybiJodF9jbG9uZV9tYXN0ZXIifX1nZXRFZGl0ZWRDZWxsKCl7cmV0dXJuIG51''@;'; put 'put ''bGw9PT10aGlzLnJvd3x8bnVsbD09PXRoaXMuY29sP251bGw6dGhpcy5ob3QuZ2V0Q2VsbCh0aGlzLnJvdyx0aGlzLmNvbCwhMCl9Y2hlY2tFZGl0b3JTZWN0aW9uKCl7aWYobnVsbD09PXRoaXMucm93fHxudWxsPT09dGhpcy5jb2wpcmV0dXJuIiI7Y29uc3QgZT10aGlzLmhvdC5jb3VudFJv''@;'; put 'put ''d3MoKSx0PXRoaXMuaG90LmdldFNldHRpbmdzKCk7bGV0IHI9IiI7cmV0dXJuIHRoaXMucm93PCh0LmZpeGVkUm93c1RvcD8/MCk/cj10aGlzLmNvbDwodC5maXhlZENvbHVtbnNTdGFydD8/MCk/InRvcC1pbmxpbmUtc3RhcnQtY29ybmVyIjoidG9wIjp0LmZpeGVkUm93c0JvdHRvbSYmdGhp''@;'; put 'put ''cy5yb3c+PWUtdC5maXhlZFJvd3NCb3R0b20/cj10aGlzLmNvbDwodC5maXhlZENvbHVtbnNTdGFydD8/MCk/ImJvdHRvbS1pbmxpbmUtc3RhcnQtY29ybmVyIjoiYm90dG9tIjp0aGlzLmNvbDwodC5maXhlZENvbHVtbnNTdGFydD8/MCkmJihyPSJpbmxpbmUtc3RhcnQiKSxyfWNvbnN0cnVj''@;'; put 'put ''dG9yKGUpe0RJZSh0aGlzLExJZSksREllKHRoaXMsT0llKSx0aGlzLnN0YXRlPVZoLlZJUkdJTix0aGlzLl9vcGVuZWQ9ITEsdGhpcy5fZnVsbEVkaXRNb2RlPSExLHRoaXMuX2Nsb3NlQ2FsbGJhY2s9bnVsbCx0aGlzLl9jbG9zZUFmdGVyRGF0YUNoYW5nZT0hMCx0aGlzLlREPW51bGwsdGhp''@;'; put 'put ''cy5yb3c9bnVsbCx0aGlzLmNvbD1udWxsLHRoaXMucHJvcD1udWxsLHRoaXMub3JpZ2luYWxWYWx1ZT1udWxsLHRoaXMuaG90PWUsdGhpcy5pbml0KCl9fWZ1bmN0aW9uIFlJdChuLGUsdCxyLGkpe2xldCBvPW4ub2Zmc2V0VG9wO2NvbnN0e3d0T3ZlcmxheXM6YX09dGhpcy5ob3Qudmlldy5f''@;'; put 'put ''d3Q7aWYoWyJpbmxpbmVfc3RhcnQiLCJtYXN0ZXIiXS5pbmNsdWRlcyhlKSYmKG8rPXQtciksWyJib3R0b20iLCJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKGUpJiZhLmJvdHRvbU92ZXJsYXk/LmNsb25lKXtjb25zdHt3dFZpZXdwb3J0Omwsd3RUYWJsZTp1fT1hLmJv''@;'; put 'put ''dHRvbU92ZXJsYXkuY2xvbmU7bys9bC5nZXRXb3Jrc3BhY2VIZWlnaHQoKS11LmdldEhlaWdodCgpLWl9cmV0dXJuIG99ZnVuY3Rpb24gWkl0KG4sZSx0LHIsaSxvKXtsZXQgYT1uLm9mZnNldExlZnQ7cmV0dXJuIHRoaXMuaG90LmlzUnRsKCk/KGE9YT49MD90LmdldFdpZHRoKCktbi5vZmZz''@;'; put 'put ''ZXRMZWZ0Ok1hdGguYWJzKGEpLGErPWktby1yKTpbInRvcCIsIm1hc3RlciIsImJvdHRvbSJdLmluY2x1ZGVzKGUpJiYoYSs9aS1vKSxhfVlsKEk3LFVJdCk7Y29uc3QgR0l0PXtuYW1lOiJlZGl0b3JDbG9zZUFuZFNhdmVCeUFycm93S2V5cyIsY2FsbGJhY2sobixlLHQpe2NvbnN0IHI9bi5f''@;'; put 'put ''Z2V0RWRpdG9yTWFuYWdlcigpLGk9ci5nZXRBY3RpdmVFZGl0b3IoKTtpPy5pc0luRnVsbEVkaXRNb2RlKCkmJmk/LnN0YXRlPT09VmguRURJVElOR3x8KHIuY2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcygpLG4uZ2V0U2VsZWN0ZWQoKSYmKHQuaW5jbHVkZXMoImFycm93ZG93biIpP24uc2Vs''@;'; put 'put ''ZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDEsMCk6dC5pbmNsdWRlcygiYXJyb3d1cCIpP24uc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC0xLDApOnQuaW5jbHVkZXMoImFycm93bGVmdCIpP24uc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDAsLTEqbi5nZXREaXJlY3Rpb25GYWN0b3IoKSk6dC5p''@;'; put 'put ''bmNsdWRlcygiYXJyb3dyaWdodCIpJiZuLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgwLG4uZ2V0RGlyZWN0aW9uRmFjdG9yKCkpKSxlLnByZXZlbnREZWZhdWx0KCkpfX0sJEl0PXtuYW1lOiJlZGl0b3JDbG9zZUFuZFNhdmVCeUVudGVyIixjYWxsYmFjayhuLGUpe2NvbnN0IHQ9bi5fZ2V0''@;'; put 'put ''RWRpdG9yTWFuYWdlcigpO3QuY2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcyhlLmN0cmxLZXl8fGUubWV0YUtleSksdC5tb3ZlU2VsZWN0aW9uQWZ0ZXJFbnRlcihlKX19LHFJdD17bmFtZToiZWRpdG9yQ2xvc2VXaXRob3V0U2F2aW5nIixjYWxsYmFjayhuKXtjb25zdCBlPW4uX2dldEVkaXRv''@;'; put 'put ''ck1hbmFnZXIoKTtlLmNsb3NlRWRpdG9yQW5kUmVzdG9yZU9yaWdpbmFsVmFsdWUobi5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkpLGUuYWN0aXZlRWRpdG9yPy5mb2N1cygpfX0sS0l0PXtuYW1lOiJlZGl0b3JGYXN0T3BlbiIsY2FsbGJhY2sobixlKXtuLmdldFNlbGVj''@;'; put 'put ''dGVkUmFuZ2VBY3RpdmUoKT8uaGlnaGxpZ2h0Py5pc0hlYWRlcigpfHxuLl9nZXRFZGl0b3JNYW5hZ2VyKCkub3BlbkVkaXRvcihudWxsLGUsITApfX0sWEl0PXtuYW1lOiJlZGl0b3JPcGVuIixjYWxsYmFjayhuLGUsdCl7Y29uc3R7c2VsZWN0aW9uOnJ9PW4saT1uLl9nZXRFZGl0b3JNYW5h''@;'; put 'put ''Z2VyKCksbz1uLmdldFNlbGVjdGVkUmFuZ2UoKSxhPW4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLGw9YT8uaGlnaGxpZ2h0O2lmKChvPy5zb21lKHU9PnIuaXNNdWx0aXBsZSh1KSl8fChvPy5sZW5ndGg/PzApPjEpJiYhYT8uaXNIZWFkZXIoKSYmbi5jb3VudFJlbmRlcmVkQ29scygpPjAm''@;'; put 'put ''Jm4uY291bnRSZW5kZXJlZFJvd3MoKT4wKXtjb25zdCB1PW4uZ2V0U2V0dGluZ3MoKSxnPSJmdW5jdGlvbiI9PXR5cGVvZiB1LmVudGVyTW92ZXM/dS5lbnRlck1vdmVzKGUpOnUuZW50ZXJNb3ZlcztyZXR1cm4gdm9pZCh0LmluY2x1ZGVzKCJzaGlmdCIpP3IudHJhbnNmb3JtRm9jdXMoLShn''@;'; put 'put ''Py5yb3c/PzApLC0oZz8uY29sPz8wKSk6ci50cmFuc2Zvcm1Gb2N1cyhnPy5yb3c/PzAsZz8uY29sPz8wKSl9bD8uaXNIZWFkZXIoKXx8KG4uZ2V0U2V0dGluZ3MoKS5lbnRlckJlZ2luc0VkaXRpbmc/aS5jZWxsUHJvcGVydGllcy5yZWFkT25seT9pLm1vdmVTZWxlY3Rpb25BZnRlckVudGVy''@;'; put 'put ''KGUpOmkub3BlbkVkaXRvcihudWxsLGUsITApOmkubW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIoZSksRjMoZSkpfX0sSkl0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvbkRvd24iLGNhbGxiYWNrKG4pe2NvbnN0e3NlbGVjdGlvbjplfT1uLHQ9bi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk/''@;'; put 'put ''LmhpZ2hsaWdodDshZS5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmIWUuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJih0Py5pc0NlbGwoKXx8dD8uaXNIZWFkZXIoKSYmZS5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSkmJihlLm1hcmtTb3VyY2UoImtleWJvYXJkIiksZS50cmFuc2Zvcm1FbmQo''@;'; put 'put ''MSwwKSxlLm1hcmtFbmRTb3VyY2UoKSl9fSxlRHQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uRG93bkJ5Vmlld3BvcnRIZWlnaHQiLGNhbGxiYWNrKG4pe2NvbnN0e3NlbGVjdGlvbjplLHJvd0luZGV4TWFwcGVyOnR9PW4scj1uLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighcily''@;'; put 'put ''ZXR1cm47Y29uc3R7dG86aX09cixvPWkucm93Pz8wLGE9TWF0aC5taW4obytuLmNvdW50VmlzaWJsZVJvd3MoKSxuLmNvdW50Um93cygpLTEpLGw9dC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYSwtMSk7aWYobnVsbCE9PWwpe2NvbnN0IHU9bi5fY3JlYXRlQ2VsbENvb3JkcyhsLGkuY29s''@;'; put 'put ''Pz8wKSxnPW8tKG4uZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKT8/MCksRT1NYXRoLm1pbigodS5yb3c/PzApLWcsbi5jb3VudFJvd3MoKS0xKTtlLm1hcmtTb3VyY2UoImtleWJvYXJkIiksZS5zZXRSYW5nZUVuZCh1LG4uZ2V0QWN0aXZlU2VsZWN0aW9uTGF5ZXJJbmRleCgpKSxlLm1hcmtF''@;'; put 'put ''bmRTb3VyY2UoKSxuLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzpFLHZlcnRpY2FsU25hcDoidG9wIixob3Jpem9udGFsU25hcDoic3RhcnQifSl9fX0sdER0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvbkxlZnQiLGNhbGxiYWNrKG4pe2NvbnN0e3NlbGVjdGlvbjplfT1uLHQ9bi5nZXRTZWxl''@;'; put 'put ''Y3RlZFJhbmdlQWN0aXZlKCk/LmhpZ2hsaWdodDshZS5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIWUuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJih0Py5pc0NlbGwoKXx8dD8uaXNIZWFkZXIoKSYmZS5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSkmJihlLm1hcmtTb3VyY2UoImtleWJvYXJk''@;'; put 'put ''IiksZS50cmFuc2Zvcm1FbmQoMCwtMSpuLmdldERpcmVjdGlvbkZhY3RvcigpKSxlLm1hcmtFbmRTb3VyY2UoKSl9fSxuRHQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uUmlnaHQiLGNhbGxiYWNrKG4pe2NvbnN0e3NlbGVjdGlvbjplfT1uLHQ9bi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZl''@;'; put 'put ''KCk/LmhpZ2hsaWdodDshZS5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIWUuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJih0Py5pc0NlbGwoKXx8dD8uaXNIZWFkZXIoKSYmZS5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSkmJihlLm1hcmtTb3VyY2UoImtleWJvYXJkIiksZS50cmFuc2Zvcm1F''@;'; put 'put ''bmQoMCxuLmdldERpcmVjdGlvbkZhY3RvcigpKSxlLm1hcmtFbmRTb3VyY2UoKSl9fSxyRHQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Db2x1bW5zIixjYWxsYmFjayhuKXtjb25zdHtzZWxlY3Rpb246ZX09bix0PW4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCF0KXJldHVy''@;'; put 'put ''bjtjb25zdHtoaWdobGlnaHQ6cixmcm9tOmksdG86b309dDtlLm1hcmtTb3VyY2UoImtleWJvYXJkIiksZS5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKT9lLnNlbGVjdEFsbCghMCwhMCk6bi5zZWxlY3RDb2x1bW5zKGkuY29sPz8wLG8uY29sPz8wLHIpLGUubWFya0VuZFNvdXJjZSgpfX0saUR0''@;'; put 'put ''PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdEJvdHRvbSIsY2FsbGJhY2sobil7Y29uc3R7c2VsZWN0aW9uOmUscm93SW5kZXhNYXBwZXI6dH09bixyPW4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFyKXJldHVybjtjb25zdHtoaWdobGlnaHQ6aSxmcm9tOm8sdG86YX09''@;'; put 'put ''cixsPWkuaXNIZWFkZXIoKSYmZS5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKTtpZihpLmlzQ2VsbCgpfHxsKXtjb25zdCB1PXQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KG4uY291bnRSb3dzKCktMSwtMSksZz1vLmNsb25lKCk7Zy5yb3c9aS5yb3csZS5tYXJrU291cmNlKCJrZXlib2FyZCIp''@;'; put 'put ''LGUuc2V0UmFuZ2VTdGFydChnLHZvaWQgMCwhMSxpLmNsb25lKCkpLGwmJmUuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQoZS5nZXRMYXllckxldmVsKCkpLGUuc2V0UmFuZ2VFbmQobi5fY3JlYXRlQ2VsbENvb3Jkcyh1Pz8wLGEuY29sPz8wKSksZS5tYXJrRW5kU291cmNlKCl9fX0sb0R0PXtu''@;'; put 'put ''YW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdElubGluZUVuZCIsY2FsbGJhY2sobil7Y29uc3R7c2VsZWN0aW9uOmUsY29sdW1uSW5kZXhNYXBwZXI6dH09bixyPW4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFyKXJldHVybjtjb25zdHtoaWdobGlnaHQ6aSxmcm9tOm8sdG86''@;'; put 'put ''YX09cjtpZighZS5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIWUuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJmkuaXNDZWxsKCkpe2NvbnN0IGw9dC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobi5jb3VudENvbHMoKS0xLC0xKSx1PW8uY2xvbmUoKTt1LmNvbD1pLmNvbCxlLm1hcmtTb3VyY2Uo''@;'; put 'put ''ImtleWJvYXJkIiksZS5zZXRSYW5nZVN0YXJ0KHUsdm9pZCAwLCExLGkuY2xvbmUoKSksZS5zZXRSYW5nZUVuZChuLl9jcmVhdGVDZWxsQ29vcmRzKGEucm93Pz8wLGw/PzApKSxlLm1hcmtFbmRTb3VyY2UoKX19fSxhRHQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0SW5saW5l''@;'; put 'put ''U3RhcnQiLGNhbGxiYWNrKG4pe2NvbnN0e3NlbGVjdGlvbjplLGNvbHVtbkluZGV4TWFwcGVyOnR9PW4scj1uLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighcilyZXR1cm47Y29uc3R7aGlnaGxpZ2h0OmksZnJvbTpvLHRvOmF9PXI7aWYoIWUuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkm''@;'; put 'put ''JiFlLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiZpLmlzQ2VsbCgpKXtjb25zdCBsPU51bWJlcihuLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQpfHwwLHU9dC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCwxKSxnPW8uY2xvbmUoKTtnLmNvbD1pLmNvbCxlLm1hcmtTb3VyY2UoImtl''@;'; put 'put ''eWJvYXJkIiksZS5zZXRSYW5nZVN0YXJ0KGcsdm9pZCAwLCExLGkuY2xvbmUoKSksZS5zZXRSYW5nZUVuZChuLl9jcmVhdGVDZWxsQ29vcmRzKGEucm93Pz8wLHU/PzApKSxlLm1hcmtFbmRTb3VyY2UoKX19fSxzRHQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0TGVmdCIsY2Fs''@;'; put 'put ''bGJhY2sobil7Y29uc3R7c2VsZWN0aW9uOmUsY29sdW1uSW5kZXhNYXBwZXI6dH09bixyPW4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFyKXJldHVybjtjb25zdHtoaWdobGlnaHQ6aSxmcm9tOm8sdG86YX09cixsPWkuaXNIZWFkZXIoKSYmZS5pc1NlbGVjdGVkQnlDb2x1bW5IZWFk''@;'; put 'put ''ZXIoKTtpZihpLmlzQ2VsbCgpfHxsKXtjb25zdCB1PW4uaXNSdGwoKT90LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChuLmNvdW50Q29scygpLTEsLTEpOnQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KDAsMSksZz1vLmNsb25lKCk7Zy5jb2w9aS5jb2wsZS5tYXJrU291cmNlKCJrZXlib2Fy''@;'; put 'put ''ZCIpLGUuc2V0UmFuZ2VTdGFydChnLHZvaWQgMCwhMSxpLmNsb25lKCkpLGwmJmUuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQoZS5nZXRMYXllckxldmVsKCkpLGUuc2V0UmFuZ2VFbmQobi5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdz8/MCx1Pz8wKSksZS5tYXJrRW5kU291cmNlKCl9fX0s''@;'; put 'put ''bER0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdFJpZ2h0IixjYWxsYmFjayhuKXtjb25zdHtzZWxlY3Rpb246ZSxjb2x1bW5JbmRleE1hcHBlcjp0fT1uLHI9bi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIXIpcmV0dXJuO2NvbnN0e2hpZ2hsaWdodDppLGZyb206byx0''@;'; put 'put ''bzphfT1yLGw9aS5pc0hlYWRlcigpJiZlLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpO2lmKGkuaXNDZWxsKCl8fGwpe2NvbnN0IHU9bi5pc1J0bCgpP3QuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KDAsMSk6dC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobi5jb3VudENvbHMoKS0xLC0x''@;'; put 'put ''KSxnPW8uY2xvbmUoKTtnLmNvbD1pLmNvbCxlLm1hcmtTb3VyY2UoImtleWJvYXJkIiksZS5zZXRSYW5nZVN0YXJ0KGcsdm9pZCAwLCExLGkuY2xvbmUoKSksbCYmZS5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZChlLmdldExheWVyTGV2ZWwoKSksZS5zZXRSYW5nZUVuZChuLl9jcmVhdGVD''@;'; put 'put ''ZWxsQ29vcmRzKGEucm93Pz8wLHU/PzApKSxlLm1hcmtFbmRTb3VyY2UoKX19fSxjRHQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0VG9wIixjYWxsYmFjayhuKXtjb25zdHtzZWxlY3Rpb246ZSxyb3dJbmRleE1hcHBlcjp0fT1uLHI9bi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZl''@;'; put 'put ''KCk7aWYoIXIpcmV0dXJuO2NvbnN0e2hpZ2hsaWdodDppLGZyb206byx0bzphfT1yLGw9aS5pc0hlYWRlcigpJiZlLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO2lmKGkuaXNDZWxsKCl8fGwpe2NvbnN0IHU9dC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoMCwxKSxnPW8uY2xvbmUoKTtnLnJv''@;'; put 'put ''dz1pLnJvdyxlLm1hcmtTb3VyY2UoImtleWJvYXJkIiksZS5zZXRSYW5nZVN0YXJ0KGcsdm9pZCAwLCExLGkuY2xvbmUoKSksbCYmZS5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZChlLmdldExheWVyTGV2ZWwoKSksZS5zZXRSYW5nZUVuZChuLl9jcmVhdGVDZWxsQ29vcmRzKHU/PzAsYS5jb2w/''@;'; put 'put ''PzApKSxlLm1hcmtFbmRTb3VyY2UoKX19fSx1RHQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Sb3dzIixjYWxsYmFjayhuKXtjb25zdHtzZWxlY3Rpb246ZX09bix0PW4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCF0KXJldHVybiB2b2lkIGUubWFya0VuZFNvdXJjZSgpO2Nv''@;'; put 'put ''bnN0e2hpZ2hsaWdodDpyLGZyb206aSx0bzpvfT10O2UubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxlLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpP2Uuc2VsZWN0QWxsKCEwLCEwKTpuLnNlbGVjdFJvd3MoaS5yb3c/PzAsby5yb3c/PzAsciksZS5tYXJrRW5kU291cmNlKCl9fSxkRHQ9e25h''@;'; put 'put ''bWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVXAiLGNhbGxiYWNrKG4pe2NvbnN0e3NlbGVjdGlvbjplfT1uLHQ9bi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk/LmhpZ2hsaWdodDshZS5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmIWUuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJih0Py5pc0Nl''@;'; put 'put ''bGwoKXx8dD8uaXNIZWFkZXIoKSYmZS5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSkmJihlLm1hcmtTb3VyY2UoImtleWJvYXJkIiksZS50cmFuc2Zvcm1FbmQoLTEsMCksZS5tYXJrRW5kU291cmNlKCkpfX0saER0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblVwQnlWaWV3cG9ydEhlaWdo''@;'; put 'put ''dCIsY2FsbGJhY2sobil7Y29uc3R7c2VsZWN0aW9uOmUscm93SW5kZXhNYXBwZXI6dH09bixyPW4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFyKXJldHVybjtjb25zdHt0bzppfT1yLG89aS5yb3c/PzAsYT1NYXRoLm1heChvLW4uY291bnRWaXNpYmxlUm93cygpLDApLGw9dC5nZXRO''@;'; put 'put ''ZWFyZXN0Tm90SGlkZGVuSW5kZXgoYSwxKTtpZihudWxsIT09bCl7Y29uc3QgdT1uLl9jcmVhdGVDZWxsQ29vcmRzKGwsaS5jb2w/PzApLGc9by0obi5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpPz8wKSxFPU1hdGgubWF4KCh1LnJvdz8/MCktZywwKTtlLm1hcmtTb3VyY2UoImtleWJvYXJk''@;'; put 'put ''IiksZS5zZXRSYW5nZUVuZCh1LG4uZ2V0QWN0aXZlU2VsZWN0aW9uTGF5ZXJJbmRleCgpKSxlLm1hcmtFbmRTb3VyY2UoKSxuLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzpFLHZlcnRpY2FsU25hcDoidG9wIixob3Jpem9udGFsU25hcDoic3RhcnQifSl9fX0scER0PXtuYW1lOiJtb3ZlQ2VsbFNl''@;'; put 'put ''bGVjdGlvbkRvd24iLGNhbGxiYWNrKHtzZWxlY3Rpb246bn0pe24ubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxuLnRyYW5zZm9ybVN0YXJ0KDEsMCksbi5tYXJrRW5kU291cmNlKCl9fSxnRHQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uRG93bkJ5Vmlld3BvcnRIZWlnaHQiLGNhbGxiYWNrKG4p''@;'; put 'put ''e2NvbnN0e3NlbGVjdGlvbjplfT1uLHtuYXZpZ2FibGVIZWFkZXJzOnR9PW4uZ2V0U2V0dGluZ3MoKSxyPXQ/bi5jb3VudENvbEhlYWRlcnMoKTowLGk9bi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk/LmhpZ2hsaWdodC5yb3c/PzA7bGV0IG89bi5jb3VudFZpc2libGVSb3dzKCkrcjtvPTA9''@;'; put 'put ''PT1vPzE6byxpPT09bi5jb3VudFJvd3MoKS0xP289MTppK28+bi5jb3VudFJvd3MoKSYmKG89bi5jb3VudFJvd3MoKS1pLTEpLGUubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxlLnRyYW5zZm9ybVN0YXJ0KG8sMCksZS5tYXJrRW5kU291cmNlKCk7Y29uc3QgYT1uLmdldFNldHRpbmdzKCkuZml4''@;'; put 'put ''ZWRSb3dzQm90dG9tPz8wLGw9bi5jb3VudFJvd3MoKSx1PW4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpPy5oaWdobGlnaHQucm93Pz8wO3U8MD9uLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzowfSk6YT4wJiZ1Pj1sLWEmJm4uc2Nyb2xsVmlld3BvcnRUbyh7cm93OmwtYS0xLHZlcnRpY2FsU25h''@;'; put 'put ''cDoiYm90dG9tIn0pfX0sbUR0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvbklubGluZUVuZCIsY2FsbGJhY2sobixlKXtjb25zdHtzZWxlY3Rpb246dH09bixyPW4uZ2V0U2V0dGluZ3MoKSxpPW4uZ2V0U2VsZWN0ZWRSYW5nZSgpLG89bi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksYT0iZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2Ygci50YWJNb3Zlcz9yLnRhYk1vdmVzKGUpOnIudGFiTW92ZXM7dC5tYXJrU291cmNlKCJrZXlib2FyZCIpLChpPy5zb21lKGw9PnQuaXNNdWx0aXBsZShsKSl8fChpPy5sZW5ndGg/PzApPjEpJiYhbz8uaXNIZWFkZXIoKSYmbi5jb3VudFJlbmRlcmVkQ29scygpPjAm''@;'; put 'put ''Jm4uY291bnRSZW5kZXJlZFJvd3MoKT4wP3QudHJhbnNmb3JtRm9jdXMoLShhPy5yb3c/PzApLC0oYT8uY29sPz8wKSk6dC50cmFuc2Zvcm1TdGFydCgtKGE/LnJvdz8/MCksLShhPy5jb2w/PzApKSx0Lm1hcmtFbmRTb3VyY2UoKX19LHZEdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Jbmxp''@;'; put 'put ''bmVTdGFydCIsY2FsbGJhY2sobixlKXtjb25zdHtzZWxlY3Rpb246dH09bixyPW4uZ2V0U2V0dGluZ3MoKSxpPW4uZ2V0U2VsZWN0ZWRSYW5nZSgpLG89bi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksYT0iZnVuY3Rpb24iPT10eXBlb2Ygci50YWJNb3Zlcz9yLnRhYk1vdmVzKGUpOnIudGFi''@;'; put 'put ''TW92ZXM7dC5tYXJrU291cmNlKCJrZXlib2FyZCIpLChpPy5zb21lKGw9PnQuaXNNdWx0aXBsZShsKSl8fChpPy5sZW5ndGg/PzApPjEpJiYhbz8uaXNIZWFkZXIoKSYmbi5jb3VudFJlbmRlcmVkQ29scygpPjAmJm4uY291bnRSZW5kZXJlZFJvd3MoKT4wP3QudHJhbnNmb3JtRm9jdXMoYT8u''@;'; put 'put ''cm93Pz8wLGE/LmNvbD8/MCk6dC50cmFuc2Zvcm1TdGFydChhPy5yb3c/PzAsYT8uY29sPz8wKSx0Lm1hcmtFbmRTb3VyY2UoKX19LF9EdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25MZWZ0IixjYWxsYmFjayhuKXtjb25zdHtzZWxlY3Rpb246ZX09bjtlLm1hcmtTb3VyY2UoImtleWJvYXJk''@;'; put 'put ''IiksZS50cmFuc2Zvcm1TdGFydCgwLC0xKm4uZ2V0RGlyZWN0aW9uRmFjdG9yKCkpLGUubWFya0VuZFNvdXJjZSgpfX0seUR0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblJpZ2h0IixjYWxsYmFjayhuKXtjb25zdHtzZWxlY3Rpb246ZX09bjtlLm1hcmtTb3VyY2UoImtleWJvYXJkIiksZS50''@;'; put 'put ''cmFuc2Zvcm1TdGFydCgwLG4uZ2V0RGlyZWN0aW9uRmFjdG9yKCkpLGUubWFya0VuZFNvdXJjZSgpfX0sYkR0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbSIsY2FsbGJhY2sobil7Y29uc3R7c2VsZWN0aW9uOmV9PW4sdD1uLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKT8u''@;'; put 'put ''aGlnaGxpZ2h0LmNvbD8/MDtsZXQgcj1uLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChuLmNvdW50Um93cygpLTEsLTEpO251bGw9PT1yJiYocj0tMSksZS5zZXRSYW5nZVN0YXJ0KG4uX2NyZWF0ZUNlbGxDb29yZHMocix0KSl9fSx3RHQ9e25hbWU6Im1vdmVDZWxs''@;'; put 'put ''U2VsZWN0aW9uVG9Nb3N0Qm90dG9tSW5saW5lRW5kIixjYWxsYmFjayhuKXtjb25zdHtzZWxlY3Rpb246ZSxyb3dJbmRleE1hcHBlcjp0LGNvbHVtbkluZGV4TWFwcGVyOnJ9PW4saT1OdW1iZXIobi5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbSl8fDAsbz10LmdldE5lYXJlc3ROb3RI''@;'; put 'put ''aWRkZW5JbmRleChuLmNvdW50Um93cygpLWktMSwtMSksYT1yLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChuLmNvdW50Q29scygpLTEsLTEpO2UubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxlLnNldFJhbmdlU3RhcnQobi5fY3JlYXRlQ2VsbENvb3JkcyhvPz8tMSxhPz8tMSkpLGUubWFya0Vu''@;'; put 'put ''ZFNvdXJjZSgpfX0sQ0R0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdElubGluZUVuZCIsY2FsbGJhY2sobil7Y29uc3R7c2VsZWN0aW9uOmUsY29sdW1uSW5kZXhNYXBwZXI6dH09bjtlLm1hcmtTb3VyY2UoImtleWJvYXJkIiksZS5zZXRSYW5nZVN0YXJ0KG4uX2NyZWF0ZUNlbGxD''@;'; put 'put ''b29yZHMobi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk/LmhpZ2hsaWdodC5yb3c/PzAsdC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobi5jb3VudENvbHMoKS0xLC0xKT8/MCkpLGUubWFya0VuZFNvdXJjZSgpfX0sU0R0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdElubGluZVN0''@;'; put 'put ''YXJ0IixjYWxsYmFjayhuKXtjb25zdHtzZWxlY3Rpb246ZSxjb2x1bW5JbmRleE1hcHBlcjp0fT1uLHI9TnVtYmVyKG4uZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCl8fDAsaT1uLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKT8uaGlnaGxpZ2h0LnJvdz8/MCxvPXQuZ2V0TmVhcmVz''@;'; put 'put ''dE5vdEhpZGRlbkluZGV4KHIsMSk7ZS5tYXJrU291cmNlKCJrZXlib2FyZCIpLGUuc2V0UmFuZ2VTdGFydChuLl9jcmVhdGVDZWxsQ29vcmRzKGksbz8/MCkpLGUubWFya0VuZFNvdXJjZSgpfX0sRUR0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdExlZnQiLGNhbGxiYWNrKG4pe2Nv''@;'; put 'put ''bnN0e3NlbGVjdGlvbjplLGNvbHVtbkluZGV4TWFwcGVyOnR9PW4scj1uLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKT8uaGlnaGxpZ2h0LnJvdz8/MDtsZXQgaT1uLmlzUnRsKCk/dC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobi5jb3VudENvbHMoKS0xLC0xKTp0LmdldE5lYXJlc3ROb3RI''@;'; put 'put ''aWRkZW5JbmRleCgwLDEpO251bGw9PT1pJiYoaT1uLmlzUnRsKCk/LTE6LW4uY291bnRSb3dIZWFkZXJzKCkpLGUubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxlLnNldFJhbmdlU3RhcnQobi5fY3JlYXRlQ2VsbENvb3JkcyhyLGkpKSxlLm1hcmtFbmRTb3VyY2UoKX19LE1EdD17bmFtZToibW92''@;'; put 'put ''ZUNlbGxTZWxlY3Rpb25Ub01vc3RSaWdodCIsY2FsbGJhY2sobil7Y29uc3R7c2VsZWN0aW9uOmUsY29sdW1uSW5kZXhNYXBwZXI6dH09bixyPW4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpPy5oaWdobGlnaHQucm93Pz8wO2xldCBpPW4uaXNSdGwoKT90LmdldE5lYXJlc3ROb3RIaWRkZW5J''@;'; put 'put ''bmRleCgwLDEpOnQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KG4uY291bnRDb2xzKCktMSwtMSk7bnVsbD09PWkmJihpPW4uaXNSdGwoKT8tbi5jb3VudFJvd0hlYWRlcnMoKTotMSksZS5tYXJrU291cmNlKCJrZXlib2FyZCIpLGUuc2V0UmFuZ2VTdGFydChuLl9jcmVhdGVDZWxsQ29vcmRz''@;'; put 'put ''KHIsaSkpLGUubWFya0VuZFNvdXJjZSgpfX0sVER0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFRvcCIsY2FsbGJhY2sobil7Y29uc3R7c2VsZWN0aW9uOmV9PW4sdD1uLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKT8uaGlnaGxpZ2h0LmNvbD8/MDtsZXQgcj1uLnJvd0luZGV4TWFw''@;'; put 'put ''cGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCgwLDEpO251bGw9PT1yJiYocj0tbi5jb3VudENvbEhlYWRlcnMoKSksZS5tYXJrU291cmNlKCJrZXlib2FyZCIpLGUuc2V0UmFuZ2VTdGFydChuLl9jcmVhdGVDZWxsQ29vcmRzKHIsdCkpLGUubWFya0VuZFNvdXJjZSgpfX0seER0PXtuYW1l''@;'; put 'put ''OiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFRvcElubGluZVN0YXJ0IixjYWxsYmFjayhuKXtjb25zdHtzZWxlY3Rpb246ZSxyb3dJbmRleE1hcHBlcjp0LGNvbHVtbkluZGV4TWFwcGVyOnJ9PW4saT1OdW1iZXIobi5nZXRTZXR0aW5ncygpLmZpeGVkUm93c1RvcCl8fDAsbz1OdW1iZXIobi5n''@;'; put 'put ''ZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0KXx8MCxhPXQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGksMSksbD1yLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChvLDEpO2UubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxlLnNldFJhbmdlU3RhcnQobi5fY3JlYXRlQ2VsbENvb3Jkcyhh''@;'; put 'put ''Pz8wLGw/PzApKSxlLm1hcmtFbmRTb3VyY2UoKX19LEFEdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25VcCIsY2FsbGJhY2soe3NlbGVjdGlvbjpufSl7bi5tYXJrU291cmNlKCJrZXlib2FyZCIpLG4udHJhbnNmb3JtU3RhcnQoLTEsMCksbi5tYXJrRW5kU291cmNlKCl9fSxrRHQ9e25hbWU6''@;'; put 'put ''Im1vdmVDZWxsU2VsZWN0aW9uVXBCeVZpZXdwb3J0SGlnaHQiLGNhbGxiYWNrKG4pe2NvbnN0e3NlbGVjdGlvbjplfT1uLHtuYXZpZ2FibGVIZWFkZXJzOnR9PW4uZ2V0U2V0dGluZ3MoKSxyPXQ/bi5jb3VudENvbEhlYWRlcnMoKTowLGk9bi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk/Lmhp''@;'; put 'put ''Z2hsaWdodC5yb3c/PzA7bGV0IG89bi5jb3VudFZpc2libGVSb3dzKCkrcjtvPTA9PT1vPy0xOi1vLGk9PT0tcj9vPS0xOmkrbzxyJiYobz0tKGkrcikpLGUubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxlLnRyYW5zZm9ybVN0YXJ0KG8sMCksZS5tYXJrRW5kU291cmNlKCk7Y29uc3QgYT1uLmdl''@;'; put 'put ''dFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wPz8wOyhuLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKT8uaGlnaGxpZ2h0LnJvdz8/MCk8YSYmbi5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6YSx2ZXJ0aWNhbFNuYXA6InRvcCJ9KX19LElEdD17bmFtZToiZW1wdHlTZWxlY3RlZENlbGxzIixjYWxsYmFj''@;'; put 'put ''ayhuKXtuLmVtcHR5U2VsZWN0ZWRDZWxscygpLG4uX2dldEVkaXRvck1hbmFnZXIoKS5wcmVwYXJlRWRpdG9yKCl9fSxERHQ9e25hbWU6InNjcm9sbFRvRm9jdXNlZENlbGwiLGNhbGxiYWNrKG4pe2NvbnN0IGU9bi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk/LmhpZ2hsaWdodDtpZighZSly''@;'; put 'put ''ZXR1cm47Y29uc3QgdD1uLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCktMSxyPW4uZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKS0xLGk9bi5nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCkrMSxvPW4uZ2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbigpKzEsYT1uLl9jcmVhdGVDZWxsQ29vcmRz''@;'; put 'put ''KHQsciksbD1uLl9jcmVhdGVDZWxsQ29vcmRzKGksbyk7aWYoIW4uX2NyZWF0ZUNlbGxSYW5nZShhLGEsbCkuaW5jbHVkZXMoZSkmJigoZS5yb3c/Py0xKT49MHx8KGUuY29sPz8tMSk+PTApKXtjb25zdCBnPXt9O2lmKChlLmNvbD8/LTEpPj0wKXtjb25zdCBFPU1hdGguZmxvb3Iobi5jb3Vu''@;'; put 'put ''dFZpc2libGVDb2xzKCkvMik7Zy5jb2w9TWF0aC5tYXgoKGUuY29sPz8wKS1FLDApfWlmKChlLnJvdz8/LTEpPj0wKXtjb25zdCBFPU1hdGguZmxvb3Iobi5jb3VudFZpc2libGVSb3dzKCkvMik7Zy5yb3c9TWF0aC5tYXgoKGUucm93Pz8wKS1FLDApfW4uc2Nyb2xsVmlld3BvcnRUbyh7Li4u''@;'; put 'put ''Zyx2ZXJ0aWNhbFNuYXA6InRvcCIsaG9yaXpvbnRhbFNuYXA6InN0YXJ0In0pfX19LExEdD17bmFtZToic2VsZWN0QWxsQ2VsbHMiLGNhbGxiYWNrKHtzZWxlY3Rpb246bn0pe24ubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxuLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGln''@;'; put 'put ''aHQ6ITB9KSxuLm1hcmtFbmRTb3VyY2UoKX19LE9EdD17bmFtZToic2VsZWN0QWxsQ2VsbHNBbmRIZWFkZXJzIixjYWxsYmFjayh7c2VsZWN0aW9uOm59KXtuLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbi5zZWxlY3RBbGwoITAsITAse2Rpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiExfSksbi5t''@;'; put 'put ''YXJrRW5kU291cmNlKCl9fSxORHQ9e25hbWU6InBvcHVsYXRlU2VsZWN0ZWRDZWxsc0RhdGEiLGNhbGxiYWNrKG4pe2NvbnN0IGU9bi5nZXRTZWxlY3RlZFJhbmdlKCk7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9ZVtlLmxlbmd0aC0xXS5oaWdobGlnaHQubm9ybWFsaXplKCkscj10LnJvdz8/MCxp''@;'; put 'put ''PXQuY29sPz8wLG89bi5nZXREYXRhQXRDZWxsKHIsaSksYT1uZXcgTWFwO2ZvcihsZXQgbD0wO2w8ZS5sZW5ndGg7bCsrKWVbbF0uZm9yQWxsKCh1LGcpPT57aWYodT49MCYmZz49MCYmKHUhPT1yfHxnIT09aSkpe2NvbnN0e3JlYWRPbmx5OkV9PW4uZ2V0Q2VsbE1ldGEodSxnKTtFfHxhLnNl''@;'; put 'put ''dChgJHt1fXgke2d9YCxbdSxnLG9dKX19KTtuLnNldERhdGFBdENlbGwoQXJyYXkuZnJvbShhLnZhbHVlcygpKSl9fSxGRHQ9e25hbWU6InRhYk5hdmlnYXRpb24iLGNhbGxiYWNrKG4pe2NvbnN0IGU9e3dyYXBwZWQ6ITEsZmxpcHBlZDohMX07bGV0IHQ9ITEscj0hMTtyZXR1cm4gbi5hZGRI''@;'; put 'put ''b29rKCJhZnRlclNlbGVjdGlvbiIsKGksbyxhLGwsdSk9Pnt0JiYoZS53cmFwcGVkJiZlLmZsaXBwZWR8fHIpJiYocj0hMSx1LnZhbHVlPSEwKX0pLG4uYWRkSG9vaygiYmVmb3JlUm93V3JhcCIsKGksbyxhKT0+e2Uud3JhcHBlZD0hMCxlLmZsaXBwZWQ9YX0pLHtiZWZvcmUoKXtjb25zdHt0''@;'; put 'put ''YWJOYXZpZ2F0aW9uOml9PW4uZ2V0U2V0dGluZ3MoKTt0PSEwLGl8fChyPSEwKX0sYWZ0ZXIoaSl7Y29uc3R7dGFiTmF2aWdhdGlvbjpvLGF1dG9XcmFwUm93OmF9PW4uZ2V0U2V0dGluZ3MoKTtpZih0PSExLCFvfHwhbi5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpfHxhJiZlLndyYXBwZWQmJmUu''@;'; put 'put ''ZmxpcHBlZHx8IWEmJmUud3JhcHBlZClyZXR1cm4gZS53cmFwcGVkPSExLGUuZmxpcHBlZD0hMSxuLmRlc2VsZWN0Q2VsbCgpLCExO2kucHJldmVudERlZmF1bHQoKX19fX0sUER0PVsuLi5mdW5jdGlvbiBRSXQoKXtyZXR1cm5bQkl0LEdJdCwkSXQscUl0LEtJdCxYSXRdfSgpLC4uLmZ1bmN0''@;'; put 'put ''aW9uIGZEdCgpe3JldHVybltKSXQsZUR0LHREdCxuRHQsckR0LGlEdCxvRHQsYUR0LHNEdCxsRHQsY0R0LHVEdCxkRHQsaER0XX0oKSwuLi5mdW5jdGlvbiBSRHQoKXtyZXR1cm5bcER0LGdEdCxtRHQsdkR0LF9EdCx5RHQsYkR0LHdEdCxDRHQsU0R0LEVEdCxNRHQsVER0LHhEdCxBRHQsa0R0''@;'; put 'put ''XX0oKSxJRHQsRER0LExEdCxPRHQsTkR0LEZEdF07ZnVuY3Rpb24gTkllKG4pe2NvbnN0IGU9e307cmV0dXJuIFBEdC5mb3JFYWNoKCh7bmFtZTp0LGNhbGxiYWNrOnJ9KT0+e2VbdF09KC4uLmkpPT5yKG4sLi4uaSl9KSxlfWZ1bmN0aW9uIEhEdChuKXtjb25zdCBlPW4uZ2V0U2hvcnRjdXRN''@;'; put 'put ''YW5hZ2VyKCkuYWRkQ29udGV4dCgiZWRpdG9yIiksdD1OSWUobikscj17Z3JvdXA6Ujd9O2UuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJFbnRlciJdLFsiRW50ZXIiLCJTaGlmdCJdXSxjYWxsYmFjazooaSxvKT0+dC5lZGl0b3JDbG9zZUFuZFNhdmVCeUVudGVyKGksbyl9LHtrZXlzOltbIkVu''@;'; put 'put ''dGVyIiwiQ29udHJvbC9NZXRhIl0sWyJFbnRlciIsIkNvbnRyb2wvTWV0YSIsIlNoaWZ0Il1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOihpLG8pPT50LmVkaXRvckNsb3NlQW5kU2F2ZUJ5RW50ZXIoaSxvKX0se2tleXM6W1siVGFiIl0sWyJUYWIiLCJTaGlmdCJdLFsiUGFnZURvd24iXSxb''@;'; put 'put ''IlBhZ2VVcCJdXSxmb3J3YXJkVG9Db250ZXh0Om4uZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dChzXyksY2FsbGJhY2s6KGksbyk9PnQuZWRpdG9yQ2xvc2VBbmRTYXZlKGksbyl9LHtrZXlzOltbIkFycm93RG93biJdLFsiQXJyb3dVcCJdLFsiQXJyb3dMZWZ0Il0sWyJBcnJvd1Jp''@;'; put 'put ''Z2h0Il1dLHByZXZlbnREZWZhdWx0OiExLGNhbGxiYWNrOihpLG8pPT50LmVkaXRvckNsb3NlQW5kU2F2ZUJ5QXJyb3dLZXlzKGksbyl9LHtrZXlzOltbIkVzY2FwZSJdLFsiRXNjYXBlIiwiQ29udHJvbC9NZXRhIl1dLGNhbGxiYWNrOigpPT50LmVkaXRvckNsb3NlV2l0aG91dFNhdmluZygp''@;'; put 'put ''fV0scil9ZnVuY3Rpb24gVkR0KG4pe2NvbnN0IGU9bi5nZXRTaG9ydGN1dE1hbmFnZXIoKS5hZGRDb250ZXh0KHNfKSx0PU5JZShuKSxyPXtydW5Pbmx5SWY6KCk9Pntjb25zdHtuYXZpZ2FibGVIZWFkZXJzOm99PW4uZ2V0U2V0dGluZ3MoKTtyZXR1cm4gWm8obi5nZXRTZWxlY3RlZCgpKSYm''@;'; put 'put ''KG98fCFvJiZuLmNvdW50UmVuZGVyZWRSb3dzKCk+MCYmbi5jb3VudFJlbmRlcmVkQ29scygpPjApfSxncm91cDpjT307ZS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkYyIl1dLGNhbGxiYWNrOm89PnQuZWRpdG9yRmFzdE9wZW4obyl9LHtrZXlzOltbIkVudGVyIl0sWyJFbnRlciIsIlNoaWZ0''@;'; put 'put ''Il1dLGNhbGxiYWNrOihvLGEpPT50LmVkaXRvck9wZW4obyxhKX0se2tleXM6W1siQmFja3NwYWNlIl0sWyJEZWxldGUiXV0sY2FsbGJhY2s6KCk9PnQuZW1wdHlTZWxlY3RlZENlbGxzKCl9XSx7Z3JvdXA6UjcscnVuT25seUlmOigpPT5abyhuLmdldFNlbGVjdGVkKCkpfSksZS5hZGRTaG9y''@;'; put 'put ''dGN1dHMoW3trZXlzOltbIkNvbnRyb2wvTWV0YSIsIkEiXV0sY2FsbGJhY2s6KCk9PnQuc2VsZWN0QWxsQ2VsbHMoKSxydW5Pbmx5SWY6KCk9PlpvKG4uZ2V0U2VsZWN0ZWQoKSkmJiFuLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKT8uaGlnaGxpZ2h0LmlzSGVhZGVyKCl9LHtrZXlzOltbIkNv''@;'; put 'put ''bnRyb2wvTWV0YSIsIkEiXV0sY2FsbGJhY2s6KCk9Pnt9LHJ1bk9ubHlJZjooKT0+ISghWm8obi5nZXRTZWxlY3RlZCgpKXx8IW4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpPy5oaWdobGlnaHQuaXNIZWFkZXIoKSkscHJldmVudERlZmF1bHQ6ITB9LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIs''@;'; put 'put ''IlNoaWZ0IiwiU3BhY2UiXV0sY2FsbGJhY2s6KCk9PnQuc2VsZWN0QWxsQ2VsbHNBbmRIZWFkZXJzKCl9LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT50LnBvcHVsYXRlU2VsZWN0ZWRDZWxsc0RhdGEoKSxydW5Pbmx5SWY6KCk9PlpvKG4uZ2V0U2VsZWN0''@;'; put 'put ''ZWQoKSkmJiFuLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKT8uaGlnaGxpZ2h0LmlzSGVhZGVyKCkmJihuLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKT8uZ2V0Q2VsbHNDb3VudCgpPz8wKT4xfSx7a2V5czpbWyJDb250cm9sIiwiU3BhY2UiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9''@;'; put 'put ''PnQuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub0NvbHVtbnMoKX0se2tleXM6W1siU2hpZnQiLCJTcGFjZSJdXSxzdG9wUHJvcGFnYXRpb246ITAsY2FsbGJhY2s6KCk9PnQuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub1Jvd3MoKX0se2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+dC5tb3Zl''@;'; put 'put ''Q2VsbFNlbGVjdGlvblVwKCl9LHtrZXlzOltbIkFycm93VXAiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PnQubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RUb3AoKX0se2tleXM6W1siQXJyb3dVcCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT50LmV4dGVuZENl''@;'; put 'put ''bGxzU2VsZWN0aW9uVXAoKX0se2tleXM6W1siQXJyb3dVcCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT50LmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0VG9wKCkscnVuT25seUlmOigpPT5abyhuLmdldFNlbGVjdGVkKCkpJiYhKG4uc2Vs''@;'; put 'put ''ZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxuLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSl9LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+dC5tb3ZlQ2VsbFNlbGVjdGlvbkRvd24oKX0se2tleXM6W1siQXJyb3dEb3duIiwiQ29udHJvbC9NZXRh''@;'; put 'put ''Il1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT50Lm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0Qm90dG9tKCl9LHtrZXlzOltbIkFycm93RG93biIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT50LmV4dGVuZENlbGxzU2VsZWN0aW9uRG93bigpfSx7a2V5czpbWyJBcnJvd0Rvd24iLCJTaGlm''@;'; put 'put ''dCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+dC5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdEJvdHRvbSgpLHJ1bk9ubHlJZjooKT0+Wm8obi5nZXRTZWxlY3RlZCgpKSYmIShuLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8bi5zZWxlY3Rp''@;'; put 'put ''b24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpfSx7a2V5czpbWyJBcnJvd0xlZnQiXV0sY2FsbGJhY2s6KCk9PnQubW92ZUNlbGxTZWxlY3Rpb25MZWZ0KCl9LHtrZXlzOltbIkFycm93TGVmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+dC5tb3Zl''@;'; put 'put ''Q2VsbFNlbGVjdGlvblRvTW9zdExlZnQoKX0se2tleXM6W1siQXJyb3dMZWZ0IiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PnQuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25MZWZ0KCl9LHtrZXlzOltbIkFycm93TGVmdCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxi''@;'; put 'put ''YWNrOigpPT50LmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0TGVmdCgpLHJ1bk9ubHlJZjooKT0+Wm8obi5nZXRTZWxlY3RlZCgpKSYmIShuLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8bi5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpfSx7a2V5czpbWyJBcnJv''@;'; put 'put ''d1JpZ2h0Il1dLGNhbGxiYWNrOigpPT50Lm1vdmVDZWxsU2VsZWN0aW9uUmlnaHQoKX0se2tleXM6W1siQXJyb3dSaWdodCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+dC5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFJpZ2h0KCl9LHtrZXlzOltbIkFycm93''@;'; put 'put ''UmlnaHQiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+dC5leHRlbmRDZWxsc1NlbGVjdGlvblJpZ2h0KCl9LHtrZXlzOltbIkFycm93UmlnaHQiLCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+dC5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdFJp''@;'; put 'put ''Z2h0KCkscnVuT25seUlmOigpPT5abyhuLmdldFNlbGVjdGVkKCkpJiYhKG4uc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxuLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSl9LHtrZXlzOltbIkhvbWUiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PnQubW92''@;'; put 'put ''ZUNlbGxTZWxlY3Rpb25Ub01vc3RJbmxpbmVTdGFydCgpLHJ1bk9ubHlJZjooKT0+Wm8obi5nZXRTZWxlY3RlZCgpKSYmbi52aWV3LmlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJIb21lIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PnQuZXh0ZW5kQ2Vs''@;'; put 'put ''bHNTZWxlY3Rpb25Ub01vc3RJbmxpbmVTdGFydCgpfSx7a2V5czpbWyJIb21lIiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT50Lm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0VG9wSW5saW5lU3RhcnQoKSxydW5Pbmx5SWY6KCk9PlpvKG4uZ2V0U2VsZWN0ZWQo''@;'; put 'put ''KSkmJm4udmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siRW5kIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT50Lm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0SW5saW5lRW5kKCkscnVuT25seUlmOigpPT5abyhuLmdldFNlbGVjdGVkKCkp''@;'; put 'put ''JiZuLnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtrZXlzOltbIkVuZCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT50LmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0SW5saW5lRW5kKCl9LHtrZXlzOltbIkVuZCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJl''@;'; put 'put ''Q3RybDohMCxjYWxsYmFjazooKT0+dC5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbUlubGluZUVuZCgpLHJ1bk9ubHlJZjooKT0+Wm8obi5nZXRTZWxlY3RlZCgpKSYmbi52aWV3LmlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJQYWdlVXAiXV0s''@;'; put 'put ''Y2FsbGJhY2s6KCk9PnQubW92ZUNlbGxTZWxlY3Rpb25VcEJ5Vmlld3BvcnRIaWdodCgpfSx7a2V5czpbWyJQYWdlVXAiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+dC5leHRlbmRDZWxsc1NlbGVjdGlvblVwQnlWaWV3cG9ydEhlaWdodCgpfSx7a2V5czpbWyJQYWdlRG93biJdXSxjYWxsYmFj''@;'; put 'put ''azooKT0+dC5tb3ZlQ2VsbFNlbGVjdGlvbkRvd25CeVZpZXdwb3J0SGVpZ2h0KCl9LHtrZXlzOltbIlBhZ2VEb3duIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PnQuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Eb3duQnlWaWV3cG9ydEhlaWdodCgpfSx7a2V5czpbWyJUYWIiXV0scHJldmVudERlZmF1''@;'; put 'put ''bHQ6ITEsY2FsbGJhY2s6bz0+dC5tb3ZlQ2VsbFNlbGVjdGlvbklubGluZVN0YXJ0KG8pfSx7a2V5czpbWyJTaGlmdCIsIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxjYWxsYmFjazpvPT50Lm1vdmVDZWxsU2VsZWN0aW9uSW5saW5lRW5kKG8pfSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJC''@;'; put 'put ''YWNrc3BhY2UiXV0sY2FsbGJhY2s6KCk9PnQuc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgpfV0scik7Y29uc3QgaT10LnRhYk5hdmlnYXRpb24oKTtlLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxzdG9wUHJvcGFnYXRpb246ITEs''@;'; put 'put ''cmVsYXRpdmVUb0dyb3VwOmNPLGdyb3VwOnRaLHBvc2l0aW9uOiJiZWZvcmUiLGNhbGxiYWNrOm89PmkuYmVmb3JlKG8pfSx7a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLHByZXZlbnREZWZhdWx0OiExLHN0b3BQcm9wYWdhdGlvbjohMSxyZWxhdGl2ZVRvR3JvdXA6Y08sZ3JvdXA6''@;'; put 'put ''dFosY2FsbGJhY2s6bz0+aS5hZnRlcihvKSxwb3NpdGlvbjoiYWZ0ZXIifV0pfWZ1bmN0aW9uIHJaKG4pe2NvbnN0e2NsYXNzTmFtZXM6ZX09R3hlKG4sL2h0LXRoZW1lLVthLXpBLVowLTlfLV0rLyk7cmV0dXJuIGUucG9wKCl9ZnVuY3Rpb24gRkllKG4sZSl7aWYoZS5oYXMobikpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBQSWUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVs''@;'; put 'put ''ZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQobil9ZnVuY3Rpb24gQmgobixlKXtyZXR1cm4gZnVuY3Rpb24gVUR0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obixQSWUobixlLCJnZXQiKSl9ZnVuY3Rpb24gbF8obixlLHQpe0ZJZShuLGUpLGUuc2V0''@;'; put 'put ''KG4sdCl9ZnVuY3Rpb24gTTQobixlLHQpe3JldHVybiBmdW5jdGlvbiB6RHQobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZh''@;'; put 'put ''bHVlPXR9fShuLFBJZShuLGUsInNldCIpLHQpLHR9ZnVuY3Rpb24gdTYobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHR9ZnVuY3Rpb24gUncobixlKXtGSWUobixl''@;'; put 'put ''KSxlLmFkZChuKX1jb25zdCBISWU9ImhhbmRzb250YWJsZS1jb3JlLXN0eWxlcyI7dmFyIGlaPW5ldyBXZWFrTWFwLHBPPW5ldyBXZWFrTWFwLG9aPW5ldyBXZWFrTWFwLGFaPW5ldyBXZWFrTWFwLGNfPW5ldyBXZWFrTWFwLF9UPW5ldyBXZWFrTWFwLHlUPW5ldyBXZWFrTWFwLHZkZT1uZXcg''@;'; put 'put ''V2Vha01hcCxWSWU9bmV3IFdlYWtTZXQsQkllPW5ldyBXZWFrU2V0LF9kZT1uZXcgV2Vha1NldCxqSWU9bmV3IFdlYWtTZXQsVUllPW5ldyBXZWFrU2V0LHlkZT1uZXcgV2Vha1NldCxiZGU9bmV3IFdlYWtTZXQ7Y2xhc3MgV0R0e2dldENTU1ZhcmlhYmxlVmFsdWUoZSl7aWYoQmgodGhpcyxf''@;'; put 'put ''VClbYC0taHQtJHtlfWBdKXJldHVybiBCaCh0aGlzLF9UKVtgLS1odC0ke2V9YF07Y29uc3QgdD11Nih0aGlzLFVJZSwkRHQpLmNhbGwodGhpcyxgLS1odC0ke2V9YCk/P3U2KHRoaXMseWRlLFdJZSkuY2FsbCh0aGlzLGAtLWh0LSR7ZX1gKTtyZXR1cm4gbnVsbCE9PXQ/KEJoKHRoaXMsX1Qp''@;'; put 'put ''W2AtLWh0LSR7ZX1gXT10LHQpOnZvaWQgMH1nZXRTdHlsZUZvclREKGUpe3JldHVybiBCaCh0aGlzLHlUKT8udGQ/LltlXX1nZXREZWZhdWx0Um93SGVpZ2h0KGUpe2NvbnN0IHQ9dTYodGhpcyxCSWUsWkR0KS5jYWxsKHRoaXMpO3JldHVybiB2b2lkIDAhPT1lJiZlPT09QmgodGhpcyxpWiku''@;'; put 'put ''dmlldy5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpPyh0Pz8wKSsxOnR9YXJlQ2VsbHNCb3JkZXJCb3goKXtyZXR1cm4iYm9yZGVyLWJveCI9PT10aGlzLmdldFN0eWxlRm9yVEQoImJveC1zaXppbmciKX11c2VUaGVtZShlKXsic3RyaW5nIj09dHlwZW9mIGUmJi9odC10aGVtZS0uKi8u''@;'; put 'put ''dGVzdChlKT8odTYodGhpcyxiZGUsWUllKS5jYWxsKHRoaXMpLGUhPT1CaCh0aGlzLHBPKSYmTTQodGhpcyxwTyxlKSxCaCh0aGlzLHZkZSkuY2FsbCh0aGlzLEJoKHRoaXMscE8pKSx1Nih0aGlzLF9kZSx6SWUpLmNhbGwodGhpcykpOkhhKGAke2V9IGlzbid0IGEgdmFsaWQgdGhlbWUgbmFt''@;'; put 'put ''ZS4gUGxlYXNlIGVuc3VyZSBpdCBmb2xsb3dzIHRoZSBmb3JtYXQgaHQtdGhlbWUtPHRoZW1lLW5hbWU+LmApfWdldFRoZW1lTmFtZSgpe3JldHVybiBCaCh0aGlzLHBPKX1jbGVhckNhY2hlKCl7dTYodGhpcyxiZGUsWUllKS5jYWxsKHRoaXMpLHU2KHRoaXMsX2RlLHpJZSkuY2FsbCh0aGlz''@;'; put 'put ''KX1jb25zdHJ1Y3Rvcih7aG90OmUscm9vdEVsZW1lbnQ6dCxyb290RG9jdW1lbnQ6cixvblRoZW1lQ2hhbmdlOmk9YT0+e30saW5qZWN0Q29yZUNzczpvPSEwfSl7UncodGhpcyxWSWUpLFJ3KHRoaXMsQkllKSxSdyh0aGlzLF9kZSksUncodGhpcyxqSWUpLFJ3KHRoaXMsVUllKSxSdyh0aGlz''@;'; put 'put ''LHlkZSksUncodGhpcyxiZGUpLGxfKHRoaXMsaVose3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGxfKHRoaXMscE8se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGxfKHRoaXMsb1ose3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGxfKHRoaXMsYVose3dyaXRhYmxlOiEwLHZhbHVl''@;'; put 'put ''OnZvaWQgMH0pLGxfKHRoaXMsY18se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGxfKHRoaXMsX1Qse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGxfKHRoaXMseVQse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGxfKHRoaXMsdmRlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9''@;'; put 'put ''KSxNNCh0aGlzLGFaLG51bGwpLE00KHRoaXMsX1Qse30pLE00KHRoaXMseVQse30pLE00KHRoaXMsaVosZSksTTQodGhpcyxvWix0KSxNNCh0aGlzLGNfLHIpLE00KHRoaXMsdmRlLGkpLG8mJnU2KHRoaXMsVkllLFlEdCkuY2FsbCh0aGlzKX19ZnVuY3Rpb24gWUR0KCl7aWYoIUJoKHRoaXMs''@;'; put 'put ''aVopfHwhQmgodGhpcyxjXyl8fCFCaCh0aGlzLGNfKS5oZWFkKXJldHVybjtjb25zdCBuPUJoKHRoaXMsY18pLmdldEVsZW1lbnRCeUlkKEhJZSk7aWYobiYmbiBpbnN0YW5jZW9mIEhUTUxTdHlsZUVsZW1lbnQpcmV0dXJuO2NvbnN0IGU9QmgodGhpcyxjXykuY3JlYXRlRWxlbWVudCgic3R5''@;'; put 'put ''bGUiKTtlLmlkPUhJZSxlLnRleHRDb250ZW50PScvKiFcbiAqIENvcHlyaWdodCAoYykgSEFORFNPTkNPREUgc3AuIHogby4gby5cbiAqXG4gKiBIQU5EU09OVEFCTEUgaXMgYSBzb2Z0d2FyZSBkaXN0cmlidXRlZCBieSBIQU5EU09OQ09ERSBzcC4geiBvLiBvLiwgYSBQb2xpc2ggY29ycG9y''@;'; put 'put ''YXRpb24gYmFzZWQgaW5cbiAqIEdkeW5pYSwgUG9sYW5kLCBhdCBBbGVqYSBad3ljaWVzdHdhIDk2LTk4LCByZWdpc3RlcmVkIGJ5IHRoZSBEaXN0cmljdCBDb3VydCBpbiBHZGFuc2sgdW5kZXIgbnVtYmVyXG4gKiA1Mzg2NTEsIEVVIHRheCBJRCBudW1iZXI6IFBMNTg2MjI5NDAwMiwgc2hh''@;'; put 'put ''cmUgY2FwaXRhbDogUExOIDYyLDgwMC4wMC5cbiAqXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXdzLCBpbmNsdWRpbmcgaW50ZXJuYXRpb25hbCB0cmVhdGllcywgYW5kIGR1YWwtXG4gKiBsaWNlbnNlZCAtIGRlcGVuZGluZyBvbiB3''@;'; put 'put ''aGV0aGVyIHlvdXIgdXNlIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLCBtZWFuaW5nIGludGVuZGVkIGZvciBvclxuICogcmVzdWx0aW5nIGluIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgb3Igbm90LlxuICpcbiAqIElmIHlvdXIgdXNlIGlzIHN0cmlj''@;'; put 'put ''dGx5IHBlcnNvbmFsIG9yIHNvbGVseSBmb3IgZXZhbHVhdGlvbiBwdXJwb3NlcywgbWVhbmluZyBmb3IgdGhlIHB1cnBvc2VzIG9mIHRlc3RpbmdcbiAqIHRoZSBzdWl0YWJpbGl0eSwgcGVyZm9ybWFuY2UsIGFuZCB1c2VmdWxuZXNzIG9mIHRoaXMgc29mdHdhcmUgb3V0c2lkZSB0aGUgcHJv''@;'; put 'put ''ZHVjdGlvbiBlbnZpcm9ubWVudCxcbiAqIHlvdSBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgaW5jbHVkZWQgaW4gdGhlICJoYW5kc29udGFibGUtbm9uLWNvbW1lcmNpYWwtbGljZW5zZS5wZGYiIGZpbGUuXG4gKlxuICogWW91ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBmb3IgY29t''@;'; put 'put ''bWVyY2lhbCBwdXJwb3NlcyBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiBhbiBhcHBsaWNhYmxlXG4gKiBsaWNlbnNlIGFncmVlbWVudC5cbiAqXG4gKiBJbiBhbnkgY2FzZSwgeW91IG11c3Qgbm90IG1ha2UgYW55IHN1Y2ggdXNlIG9mIHRoaXMgc29mdHdhcmUgYXMgdG8g''@;'; put 'put ''ZGV2ZWxvcCBzb2Z0d2FyZSB3aGljaCBtYXkgYmVcbiAqIGNvbnNpZGVyZWQgY29tcGV0aXRpdmUgd2l0aCB0aGlzIHNvZnR3YXJlLlxuICpcbiAqIFVOTEVTUyBFWFBSRVNTTFkgQUdSRUVEIE9USEVSV0lTRSwgSEFORFNPTkNPREUgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBPTiBBTiAiQVMg''@;'; put 'put ''SVMiXG4gKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEFORCBJTiBOTyBFVkVOVCBBTkQgVU5ERVIgTk9cbiAqIExFR0FMIFRIRU9SWSwgU0hBTEwgSEFORFNPTkNPREUgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5H''@;'; put 'put ''IEFOWSBESVJFQ1QsXG4gKiBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgQVJJU0lORyBGUk9NXG4gKiBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSElTIFNPRlRXQVJFLlxuICpcbiAqIFZlcnNpb246IDE4''@;'; put 'put ''LjAuMFxuICogUmVsZWFzZSBkYXRlOiAzMC8wNi8yMDI2IChidWlsdCBhdCAzMC8wNi8yMDI2IDA4OjQ1OjMxKVxuICovXG4uaHQtcm9vdC13cmFwcGVye2ZvbnQtZmFtaWx5OnZhcigtLWh0LWZvbnQtZmFtaWx5KSwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwiU2Vnb2UgVUki''@;'; put 'put ''LHNhbnMtc2VyaWY7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZX06aXMoLmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LWJvdHRvbT4uaHQtc2xvdC1lbGVtZW50KSAuaHQtd3JhcHBlcjpub3QoLmh0SG9yaXpvbnRh''@;'; put 'put ''bGx5U2Nyb2xsYWJsZUJ5V2luZG93KSAuaHRfbWFzdGVyIC53dEhvbGRlciwuaHQtcm9vdC13cmFwcGVyOmhhcyg+Lmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQpIC5odC13cmFwcGVyOm5vdCguaHRWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KSAuaHRfbWFzdGVyIC53dEhv''@;'; put 'put ''bGRlciwuaHQtcm9vdC13cmFwcGVyOmhhcyg+Lmh0LXNsb3QtdG9wPi5odC1zbG90LWVsZW1lbnQpIC5odC13cmFwcGVyOm5vdCguaHRIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3cpIC5odF9tYXN0ZXIgLnd0SG9sZGVyLC5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC10b3A+''@;'; put 'put ''Lmh0LXNsb3QtZWxlbWVudCkgLmh0LXdyYXBwZXI6bm90KC5odFZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3cpIC5odF9tYXN0ZXIgLnd0SG9sZGVyKXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWJhY2tncm91bmQtY29sb3IpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHZhcigt''@;'; put 'put ''LWh0LWJvcmRlci1jb2xvcil9Lmh0Rm9jdXNDYXRjaGVye29wYWNpdHk6MDt6LWluZGV4Oi0xO2JvcmRlcjowO291dGxpbmU6MDt3aWR0aDowO2hlaWdodDowO21hcmdpbjowO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uaHQtZ3JpZHtmbGV4''@;'; put 'put ''OmF1dG87bWluLWhlaWdodDowO3Bvc2l0aW9uOnJlbGF0aXZlfS5odC1ncmlkLWNvbnRlbnR7aGVpZ2h0OjEwMCV9Lmh0LXNsb3QtdG9wLC5odC1zbG90LWJvdHRvbXtmbGV4Om5vbmV9Lmh0LXNsb3QtZWxlbWVudHtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjFweCBzb2xpZCB2YXIo''@;'; put 'put ''LS1odC1ib3JkZXItY29sb3IpO3dpZHRoOjEwMCV9Lmh0LXNsb3QtdG9wPi5odC1zbG90LWVsZW1lbnQ6bm90KDpmaXJzdC1vZi10eXBlKXtib3JkZXItdG9wLXdpZHRoOjB9Lmh0LXNsb3QtdG9wPi5odC1zbG90LWVsZW1lbnQ6bGFzdC1vZi10eXBlLC5odC1zbG90LWJvdHRvbT4uaHQtc2xv''@;'; put 'put ''dC1lbGVtZW50Om5vdCg6bGFzdC1vZi10eXBlKXtib3JkZXItYm90dG9tLXdpZHRoOjB9Lmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQ6Zmlyc3Qtb2YtdHlwZXtib3JkZXItdG9wLXdpZHRoOjB9Lmh0U2Nyb2xsYmFyVGVzdHtzY3JvbGxiYXItd2lkdGg6YXV0bztzY3JvbGxiYXIt''@;'; put 'put ''Y29sb3I6dmFyKC0taHQtc2Nyb2xsYmFyLXRodW1iLWNvbG9yKXZhcigtLWh0LXNjcm9sbGJhci10cmFjay1jb2xvcil9Lmh0U2Nyb2xsYmFyU2FmYXJpVGVzdDo6LXdlYmtpdC1zY3JvbGxiYXJ7d2lkdGg6OXB4O2hlaWdodDo5cHh9LmhhbmRzb250YWJsZXtmb250LWZhbWlseTp2YXIoLS1o''@;'; put 'put ''dC1mb250LWZhbWlseSksLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsIlNlZ29lIFVJIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZTp2YXIoLS1odC1mb250LXNpemUpO2xpbmUtaGVpZ2h0OnZhcigtLWh0LWxpbmUtaGVpZ2h0KTtmb250LXdlaWdodDp2YXIoLS1odC1mb250LXdlaWdo''@;'; put 'put ''dCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0taHQtbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWh0LWZvcmVncm91bmQtY29sb3IpO3RvdWNoLWFjdGlvbjptYW5pcHVsYXRpb247cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZSAud3RIb2xkZXJ7c2Nyb2xsYmFyLXdpZHRoOmF1dG87''@;'; put 'put ''c2Nyb2xsYmFyLWNvbG9yOnZhcigtLWh0LXNjcm9sbGJhci10aHVtYi1jb2xvcil2YXIoLS1odC1zY3JvbGxiYXItdHJhY2stY29sb3IpfS5oYW5kc29udGFibGUgLnd0SG9sZGVyOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo5cHg7aGVpZ2h0OjlweH0uaGFuZHNvbnRhYmxlIC53dEhvbGRl''@;'; put 'put ''cjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2t7YmFja2dyb3VuZDp2YXIoLS1odC1zY3JvbGxiYXItdHJhY2stY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0taHQtc2Nyb2xsYmFyLWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUgLnd0SG9sZGVyOjotd2Via2l0LXNjcm9sbGJhci10aHVt''@;'; put 'put ''YntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LXNjcm9sbGJhci10aHVtYi1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1odC1zY3JvbGxiYXItYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZSAud3RIb2xkZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lcntiYWNrZ3JvdW5kOnZhcigt''@;'; put 'put ''LWh0LXNjcm9sbGJhci10cmFjay1jb2xvcil9LmhhbmRzb250YWJsZSAud3RIb2xkZXI6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5n''@;'; put 'put ''KGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKTo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVye2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWh0LXNjcm9sbGJhci1ib3Jk''@;'; put 'put ''ZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlIC53dEhvbGRlcjppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6''@;'; put 'put ''bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSk6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lcntib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWh0LXNjcm9sbGJhci1ib3JkZXItcmFkaXVzKX0uaGFuZHNv''@;'; put 'put ''bnRhYmxlLmh0LXdyYXBwZXJ7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXI6bm90KC5odEZpcnN0RGF0YXNldENvbHVtbk5vdFJlbmRlcmVkKSB0ZDpmaXJzdC1vZi10eXBle2JvcmRlci1pbmxpbmUtc3RhcnQtd2lkdGg6MXB4fS5oYW5kc29udGFibGUu''@;'; put 'put ''aHRHaG9zdFRhYmxlLmh0TmVzdGVkSGVhZGVycyB0YWJsZXtib3JkZXItc3BhY2luZzowO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX0uaGFuZHNvbnRhYmxlLmh0R2hvc3RUYWJsZSB0YWJsZSB0aGVhZCB0aHtib3JkZXItYm90dG9tLXdpZHRoOjB9LmhhbmRzb250YWJsZS5odEdob3N0VGFi''@;'; put 'put ''bGUgdGFibGUgdGJvZHkgdHI6Zmlyc3Qtb2YtdHlwZSB0aDpmaXJzdC1jaGlsZCwuaGFuZHNvbnRhYmxlLmh0R2hvc3RUYWJsZSB0YWJsZSB0Ym9keSB0cjpmaXJzdC1vZi10eXBlIHRkOmZpcnN0LWNoaWxke2hlaWdodDpjYWxjKHZhcigtLWh0LWNlbGwtdmVydGljYWwtcGFkZGluZykqMiAr''@;'; put 'put ''IHZhcigtLWh0LWxpbmUtaGVpZ2h0KSArIDFweCl9LmhhbmRzb250YWJsZS5odEdob3N0VGFibGUgdGFibGUgdGJvZHkgdHIgdGgsLmhhbmRzb250YWJsZS5odEdob3N0VGFibGUgdGFibGUgdGJvZHkgdHIgdGR7aGVpZ2h0OmNhbGModmFyKC0taHQtY2VsbC12ZXJ0aWNhbC1wYWRkaW5nKSoy''@;'; put 'put ''ICsgdmFyKC0taHQtbGluZS1oZWlnaHQpICsgMXB4KTtib3JkZXItdG9wLXdpZHRoOjB9LmhhbmRzb250YWJsZTpub3QoLmh0SG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KS5odEhhc1Njcm9sbFggLmh0X21hc3RlciAud3RIb2xkZXIsLmhhbmRzb250YWJsZTpub3QoLmh0SG9yaXpv''@;'; put 'put ''bnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KS5odEhhc1Njcm9sbFkgLmh0X21hc3RlciAud3RIb2xkZXIsLmhhbmRzb250YWJsZTpub3QoLmh0VmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdykuaHRIYXNTY3JvbGxYIC5odF9tYXN0ZXIgLnd0SG9sZGVyLC5oYW5kc29udGFibGU6bm90KC5o''@;'; put 'put ''dFZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3cpLmh0SGFzU2Nyb2xsWSAuaHRfbWFzdGVyIC53dEhvbGRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWJhY2tncm91bmQtY29sb3IpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHZhcigtLWh0LWJvcmRlci1jb2xvcil9LmhhbmRz''@;'; put 'put ''b250YWJsZSB0ci5odF9fcm93X2V2ZW4gdGh7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1yb3ctaGVhZGVyLWV2ZW4tYmFja2dyb3VuZC1jb2xvcil9LmhhbmRzb250YWJsZSB0ci5odF9fcm93X2V2ZW4gdGR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1yb3ctY2VsbC1ldmVuLWJhY2tn''@;'; put 'put ''cm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgdHIuaHRfX3Jvd19vZGQgdGh7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1yb3ctaGVhZGVyLW9kZC1iYWNrZ3JvdW5kLWNvbG9yKX0uaGFuZHNvbnRhYmxlIHRyLmh0X19yb3dfb2RkIHRke2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtcm93''@;'; put 'put ''LWNlbGwtb2RkLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgdGgsLmhhbmRzb250YWJsZSB0ZHtoZWlnaHQ6Y2FsYyh2YXIoLS1odC1jZWxsLXZlcnRpY2FsLXBhZGRpbmcpKjIgKyB2YXIoLS1odC1saW5lLWhlaWdodCkgKyAxcHgpO3BhZGRpbmc6dmFyKC0taHQtY2VsbC12ZXJ0''@;'; put 'put ''aWNhbC1wYWRkaW5nKXZhcigtLWh0LWNlbGwtaG9yaXpvbnRhbC1wYWRkaW5nKTt2ZXJ0aWNhbC1hbGlnbjp0b3A7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1pbmxpbmUtd2lkdGg6MCAxcHg7Zm9udC1zaXplOnZhcigtLWh0LWZvbnQtc2l6ZSk7bGluZS1oZWlnaHQ6dmFyKC0taHQtbGlu''@;'; put 'put ''ZS1oZWlnaHQpO3doaXRlLXNwYWNlOnByZS13cmFwO2VtcHR5LWNlbGxzOnNob3c7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLWh0LWZvcmVncm91bmQtY29sb3IpO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLXdpZHRoOjFweDtib3JkZXItdG9wLWNvbG9yOnZh''@;'; put 'put ''cigtLWh0LWNlbGwtdmVydGljYWwtYm9yZGVyLWNvbG9yKTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWh0LWNlbGwtdmVydGljYWwtYm9yZGVyLWNvbG9yKTtib3JkZXItaW5saW5lLXN0YXJ0LWNvbG9yOnZhcigtLWh0LWNlbGwtaG9yaXpvbnRhbC1ib3JkZXItY29sb3IpO2JvcmRlci1p''@;'; put 'put ''bmxpbmUtZW5kLWNvbG9yOnZhcigtLWh0LWNlbGwtaG9yaXpvbnRhbC1ib3JkZXItY29sb3IpO291dGxpbmU6MDtvdmVyZmxvdzpoaWRkZW59LmhhbmRzb250YWJsZSB0aC5pbnZpc2libGVTZWxlY3Rpb24sLmhhbmRzb250YWJsZSB0ZC5pbnZpc2libGVTZWxlY3Rpb257b3V0bGluZTpub25l''@;'; put 'put ''fS5oYW5kc29udGFibGUgdGguaW52aXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb24sLmhhbmRzb250YWJsZSB0ZC5pbnZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbntiYWNrZ3JvdW5kOjAgMH0uaGFuZHNvbnRhYmxlIHRoe3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtd2VpZ2h0OnZhcigtLWh0''@;'; put 'put ''LWhlYWRlci1mb250LXdlaWdodCk7d2hpdGUtc3BhY2U6bm93cmFwO2NvbG9yOnZhcigtLWh0LWhlYWRlci1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yKTtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzp2aXNpYmxl''@;'; put 'put ''fS5oYW5kc29udGFibGUgdGg6bGFzdC1jaGlsZHtib3JkZXItaW5saW5lLXdpZHRoOjAgMXB4O2JvcmRlci1ib3R0b20td2lkdGg6MXB4O2JvcmRlci1pbmxpbmUtZW5kLWNvbG9yOnZhcigtLWh0LWJvcmRlci1jb2xvcil9LmhhbmRzb250YWJsZSB0aDpsYXN0LWNoaWxkLmh0X19hY3RpdmVf''@;'; put 'put ''aGlnaGxpZ2h0e2JvcmRlci1pbmxpbmUtZW5kLWNvbG9yOnZhcigtLWh0LWhlYWRlci1hY3RpdmUtYm9yZGVyLWNvbG9yKX0uaGFuZHNvbnRhYmxlIHRoOmZpcnN0LWNoaWxke2JvcmRlci1pbmxpbmUtc3RhcnQtY29sb3I6dmFyKC0taHQtYm9yZGVyLWNvbG9yKX0uaGFuZHNvbnRhYmxlIHRo''@;'; put 'put ''OmZpcnN0LWNoaWxkLmh0X19hY3RpdmVfaGlnaGxpZ2h0e2JvcmRlci1pbmxpbmUtc3RhcnQtY29sb3I6dmFyKC0taHQtaGVhZGVyLWFjdGl2ZS1ib3JkZXItY29sb3IpfS5oYW5kc29udGFibGUgdGg6Zmlyc3QtY2hpbGQsLmhhbmRzb250YWJsZSB0aDpudGgtY2hpbGQoMil7Ym9yZGVyLWlu''@;'; put 'put ''bGluZS1zdGFydC13aWR0aDoxcHh9LmhhbmRzb250YWJsZSB0aC5jdXJyZW50e2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHZhcigtLWh0LWNlbGwtc2VsZWN0aW9uLWJvcmRlci1jb2xvcil9LmhhbmRzb250YWJsZSB0aC5hY3RpdmV7Y29sb3I6dmFyKC0taHQtaGVhZGVyLWFjdGl2ZS1m''@;'; put 'put ''b3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWhlYWRlci1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcil9LmhhbmRzb250YWJsZSB0aC5odF9faGlnaGxpZ2h0e2NvbG9yOnZhcigtLWh0LWhlYWRlci1oaWdobGlnaHRlZC1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWh0LWhlYWRlci1oaWdobGlnaHRlZC1iYWNrZ3JvdW5kLWNvbG9yKX0uaGFuZHNvbnRhYmxlIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0e2JvcmRlci1jb2xvcjp2YXIoLS1odC1oZWFkZXItYWN0aXZlLWJvcmRlci1jb2xvcik7Y29sb3I6dmFyKC0taHQtaGVhZGVy''@;'; put 'put ''LWFjdGl2ZS1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWhlYWRlci1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcil9LmhhbmRzb250YWJsZSB0Ym9keSB0ci5odF9fcm93X29kZCB0aC5odF9faGlnaGxpZ2h0LC5oYW5kc29udGFibGUgdGJvZHkgdHIuaHRfX3Jv''@;'; put 'put ''d19ldmVuIHRoLmh0X19oaWdobGlnaHR7Y29sb3I6dmFyKC0taHQtaGVhZGVyLXJvdy1oaWdobGlnaHRlZC1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWhlYWRlci1yb3ctaGlnaGxpZ2h0ZWQtYmFja2dyb3VuZC1jb2xvcil9LmhhbmRzb250YWJsZSB0Ym9k''@;'; put 'put ''eSB0ci5odF9fcm93X29kZCB0aC5odF9fYWN0aXZlX2hpZ2hsaWdodCwuaGFuZHNvbnRhYmxlIHRib2R5IHRyLmh0X19yb3dfZXZlbiB0aC5odF9fYWN0aXZlX2hpZ2hsaWdodHtjb2xvcjp2YXIoLS1odC1oZWFkZXItcm93LWFjdGl2ZS1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWh0LWhlYWRlci1yb3ctYWN0aXZlLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgdGJvZHkgdHI6Zmlyc3Qtb2YtdHlwZSB0aDpmaXJzdC1jaGlsZDplbXB0eTphZnRlciwuaGFuZHNvbnRhYmxlIHRib2R5IHRyOmZpcnN0LW9mLXR5cGUgdGQ6Zmlyc3QtY2hpbGQ6''@;'; put 'put ''ZW1wdHk6YWZ0ZXJ7Y29udGVudDoiIjttaW4taGVpZ2h0OnZhcigtLWh0LWxpbmUtaGVpZ2h0KTtkaXNwbGF5OmJsb2NrfS5oYW5kc29udGFibGUgdGJvZHkgdHIgdGh7Y29sb3I6dmFyKC0taHQtaGVhZGVyLXJvdy1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0''@;'; put 'put ''LWhlYWRlci1yb3ctYmFja2dyb3VuZC1jb2xvcik7cGFkZGluZzowfS5oYW5kc29udGFibGUgdGJvZHkgdHIgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHR7Ym94LXNoYWRvdzowIC0xcHggMCAwIHZhcigtLWh0LWhlYWRlci1hY3RpdmUtYm9yZGVyLWNvbG9yKX0uaGFuZHNvbnRhYmxlIHRib2R5''@;'; put 'put ''IHRyIHRoIC5yZWxhdGl2ZXtwYWRkaW5nOnZhcigtLWh0LWNlbGwtdmVydGljYWwtcGFkZGluZyl2YXIoLS1odC1jZWxsLWhvcml6b250YWwtcGFkZGluZyk7bWluLWhlaWdodDoxMDAlfS5oYW5kc29udGFibGUgdGJvZHkgdHIgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLWlubGluZS1zdGFydC1j''@;'; put 'put ''b2xvcjp2YXIoLS1odC1ib3JkZXItY29sb3IpfS5oYW5kc29udGFibGUgdGJvZHkgdHIgdGQ6bGFzdC1jaGlsZHtib3JkZXItaW5saW5lLWVuZC1jb2xvcjp2YXIoLS1odC1ib3JkZXItY29sb3IpfS5oYW5kc29udGFibGUgdGhlYWQgdHIgdGh7cGFkZGluZzowfS5oYW5kc29udGFibGUgdGhl''@;'; put 'put ''YWQgdHIgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHR7Ym94LXNoYWRvdzotMXB4IDAgMCAwIHZhcigtLWh0LWhlYWRlci1hY3RpdmUtYm9yZGVyLWNvbG9yKX0uaGFuZHNvbnRhYmxlIHRoZWFkIHRyIHRoIC5yZWxhdGl2ZXtwYWRkaW5nOnZhcigtLWh0LWNlbGwtdmVydGljYWwtcGFkZGluZyl2''@;'; put 'put ''YXIoLS1odC1jZWxsLWhvcml6b250YWwtcGFkZGluZyk7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MnB4O2Rpc3BsYXk6ZmxleH0uaGFuZHNvbnRhYmxlIHRoZWFkIHRyIHRoIC5yZWxhdGl2ZSAuY29sSGVhZGVye3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7dmVy''@;'; put 'put ''dGljYWwtYWxpZ246dG9wO2ZsZXg6YXV0bzttaW4td2lkdGg6MDtvdmVyZmxvdzpoaWRkZW59LmhhbmRzb250YWJsZSB0cjpmaXJzdC1jaGlsZCB0aCwuaGFuZHNvbnRhYmxlIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3AtY29sb3I6dmFyKC0taHQtYm9yZGVyLWNvbG9yKTtib3JkZXIt''@;'; put 'put ''dG9wLXdpZHRoOjFweH0uaGFuZHNvbnRhYmxlIHRyOmZpcnN0LWNoaWxkIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0LC5oYW5kc29udGFibGUgdHI6Zmlyc3QtY2hpbGQgdGQuaHRfX2FjdGl2ZV9oaWdobGlnaHR7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1odC1oZWFkZXItYWN0aXZlLWJvcmRl''@;'; put 'put ''ci1jb2xvcil9LmhhbmRzb250YWJsZSB0cjpsYXN0LWNoaWxkIHRoLC5oYW5kc29udGFibGUgdHI6bGFzdC1jaGlsZCB0ZHtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWh0LWJvcmRlci1jb2xvcil9LmhhbmRzb250YWJsZSB0cjpsYXN0LWNoaWxkIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0''@;'; put 'put ''LC5oYW5kc29udGFibGUgdHI6bGFzdC1jaGlsZCB0ZC5odF9fYWN0aXZlX2hpZ2hsaWdodHtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWh0LWhlYWRlci1hY3RpdmUtYm9yZGVyLWNvbG9yKX0uaGFuZHNvbnRhYmxlIGRpdltjbGFzc149aHRfY2xvbmVdIHRoZWFkIC5odF9faGlnaGxpZ2h0''@;'; put 'put ''IC5yZWxhdGl2ZTphZnRlcntjb250ZW50OiIiO2hlaWdodDp2YXIoLS1odC1oZWFkZXItaGlnaGxpZ2h0ZWQtc2hhZG93LXNpemUpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtYWNjZW50LWNvbG9yKTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTotMXB4O2xlZnQ6''@;'; put 'put ''LTFweDtyaWdodDotMXB4fS5oYW5kc29udGFibGUgZGl2W2NsYXNzXj1odF9jbG9uZV0gdGhlYWQgdHI6b25seS1vZi10eXBlIC5odF9faGlnaGxpZ2h0IC5yZWxhdGl2ZTphZnRlcntib3R0b206MH0uaGFuZHNvbnRhYmxlIGRpdltjbGFzc149aHRfY2xvbmVdIHRib2R5IC5odF9faGlnaGxp''@;'; put 'put ''Z2h0IC5yZWxhdGl2ZTphZnRlcntjb250ZW50OiIiO3dpZHRoOnZhcigtLWh0LWhlYWRlci1oaWdobGlnaHRlZC1zaGFkb3ctc2l6ZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1hY2NlbnQtY29sb3IpO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOi0xcHg7Ym90dG9t''@;'; put 'put ''Oi0xcHg7cmlnaHQ6LTFweH0uaGFuZHNvbnRhYmxlIGRpdltjbGFzc149aHRfY2xvbmVdIHRkOmZpcnN0LW9mLXR5cGV7Ym9yZGVyLWlubGluZS1zdGFydC13aWR0aDoxcHh9LmhhbmRzb250YWJsZSB0aGVhZCB0cjpub3QoOmxhc3QtY2hpbGQpIHRoe292ZXJmbG93OmhpZGRlbn0uaGFuZHNv''@;'; put 'put ''bnRhYmxlIC5oaWRle2Rpc3BsYXk6bm9uZX0uaGFuZHNvbnRhYmxlIC5yZWxhdGl2ZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZSAud3RIaWRlcnt3aWR0aDowfS5oYW5kc29udGFibGUgLnd0U3ByZWFkZXJ7d2lkdGg6MDtoZWlnaHQ6YXV0''@;'; put 'put ''bztwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIC5odEF1dG9TaXple3Zpc2liaWxpdHk6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotOTkwMDBweDtsZWZ0Oi05OTAwMHB4fS5oYW5kc29udGFibGUgLmh0VGV4dEVsbGlwc2lze3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hp''@;'; put 'put ''dGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlIHRhYmxlLC5oYW5kc29udGFibGUgdGJvZHksLmhhbmRzb250YWJsZSB0aGVhZCwuaGFuZHNvbnRhYmxlIGlucHV0LC5oYW5kc29udGFibGUgdGV4dGFyZWEsLmhhbmRzb250YWJsZSBkaXZ7Ym94LXNpemluZzpj''@;'; put 'put ''b250ZW50LWJveH0uaGFuZHNvbnRhYmxlIGlucHV0LC5oYW5kc29udGFibGUgdGV4dGFyZWF7bWluLWhlaWdodDppbml0aWFsfS5oYW5kc29udGFibGUgLmh0Q29yZXtib3JkZXItc3BhY2luZzowO2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTt0YWJsZS1sYXlvdXQ6Zml4ZWQ7Y3Vyc29yOmRl''@;'; put 'put ''ZmF1bHQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItd2lkdGg6MDtvdXRsaW5lLXdpZHRoOjA7d2lkdGg6MDttYXJnaW46MH0uaGFuZHNvbnRhYmxlIGNvbCwuaGFuZHNvbnRhYmxlIGNvbC5yb3dIZWFkZXJ7d2lkdGg6NjRweH0uaGFuZHNvbnRh''@;'; put 'put ''YmxlIGNvbC5oaWRkZW57d2lkdGg6MCFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlciwuaGFuZHNvbnRhYmxlIHNwYW4ucm93SGVhZGVye2ZvbnQtc2l6ZTp2YXIoLS1odC1mb250LXNpemUpO2xpbmUtaGVpZ2h0OnZhcigtLWh0LWxpbmUtaGVpZ2h0KTtkaXNwbGF5Omlu''@;'; put 'put ''bGluZS1ibG9ja30uaGFuZHNvbnRhYmxlIHRyLmhpZGRlbiwuaGFuZHNvbnRhYmxlIHRyLmhpZGRlbiB0ZCwuaGFuZHNvbnRhYmxlIHRyLmhpZGRlbiB0aHtkaXNwbGF5Om5vbmV9LmhhbmRzb250YWJsZSBhe2NvbG9yOnZhcigtLWh0LWxpbmstY29sb3IpfS5oYW5kc29udGFibGUgYTpob3Zl''@;'; put 'put ''cntjb2xvcjp2YXIoLS1odC1saW5rLWhvdmVyLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odF9jbG9uZV90b3AgdGg6bnRoLWNoaWxkKDIpLC5oYW5kc29udGFibGUgLmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyIHRoOm50aC1jaGlsZCgyKXtib3JkZXItaW5saW5lLXdpZHRoOjAg''@;'; put 'put ''MXB4fS5oYW5kc29udGFibGUuaHRSb3dIZWFkZXJzIHRoZWFkIHRyIHRoOm50aC1jaGlsZCgyKXtib3JkZXItaW5saW5lLXN0YXJ0LXdpZHRoOjFweH0uaGFuZHNvbnRhYmxlIC5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlcklubGluZVN0YXJ0KTpub3QoLmVtcHR5Q29sdW1ucykgdGJvZHkg''@;'; put 'put ''dHIgdGgsLmhhbmRzb250YWJsZSAuaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpIHRoZWFkIHRyIHRoOmZpcnN0LWNoaWxkLC5oYW5kc29udGFibGUgLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVySW5saW5lU3RhcnQpOm5vdCguZW1w''@;'; put 'put ''dHlDb2x1bW5zKX4uaGFuZHNvbnRhYmxlOm5vdCguaHRHaG9zdFRhYmxlKSB0Ym9keSB0ciB0aCwuaGFuZHNvbnRhYmxlIC5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlcklubGluZVN0YXJ0KTpub3QoLmVtcHR5Q29sdW1ucyl+LmhhbmRzb250YWJsZTpub3QoLmh0X2Nsb25lX3RvcCk6bm90''@;'; put 'put ''KC5odEdob3N0VGFibGUpIHRoZWFkIHRyIHRoOmZpcnN0LWNoaWxke2JvcmRlci1pbmxpbmUtd2lkdGg6MXB4IDB9LmhhbmRzb250YWJsZSAuaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJUb3ApOm5vdCguaW5uZXJCb3JkZXJCb3R0b20pIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGgsLmhhbmRz''@;'; put 'put ''b250YWJsZSAuaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJUb3ApOm5vdCguaW5uZXJCb3JkZXJCb3R0b20pfi5oYW5kc29udGFibGUgdGhlYWQgdHI6bGFzdC1jaGlsZCB0aCwuaGFuZHNvbnRhYmxlIC5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlclRvcCk6bm90KC5pbm5lckJvcmRlckJv''@;'; put 'put ''dHRvbSkgdGhlYWQgdHIubGFzdENoaWxkIHRoLC5oYW5kc29udGFibGUgLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKX4uaGFuZHNvbnRhYmxlIHRoZWFkIHRyLmxhc3RDaGlsZCB0aHtib3JkZXItYm90dG9tLXdpZHRoOjB9LmhhbmRzb250''@;'; put 'put ''YWJsZS5odEF1dG9Sb3dTaXplIC5odF9tYXN0ZXIuaW5uZXJCb3JkZXJUb3AgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGgsLmhhbmRzb250YWJsZS5odEF1dG9Sb3dTaXplIC5odF9tYXN0ZXIuaW5uZXJCb3JkZXJUb3AgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQsLmhhbmRzb250YWJsZS5odEF1''@;'; put 'put ''dG9Sb3dTaXplIC5odF9tYXN0ZXIuaW5uZXJCb3JkZXJUb3B+Lmh0X2Nsb25lX2lubGluZV9zdGFydCB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0aCwuaGFuZHNvbnRhYmxlLmh0QXV0b1Jvd1NpemUgLmh0X21hc3Rlci5pbm5lckJvcmRlclRvcH4uaHRfY2xvbmVfaW5saW5lX3N0YXJ0IHRib2R5''@;'; put 'put ''IHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3Atd2lkdGg6MH0uaGFuZHNvbnRhYmxlIC5odF9tYXN0ZXIgdGFibGUuaHRDb3JlPnRoZWFkLC5oYW5kc29udGFibGUgLmh0X21hc3RlciB0YWJsZS5odENvcmU+dGJvZHk+dHI+dGgsLmhhbmRzb250YWJsZSAuaHRfY2xvbmVfaW5saW5lX3N0''@;'; put 'put ''YXJ0IHRhYmxlLmh0Q29yZT50aGVhZHt2aXNpYmlsaXR5OmhpZGRlbn0uaHRfbWFzdGVyLC5odF9jbG9uZV9pbmxpbmVfc3RhcnQsLmh0X2Nsb25lX3RvcCwuaHRfY2xvbmVfYm90dG9tLC5odF9tYXN0ZXIgLnd0SG9sZGVyLC5odF9jbG9uZV9pbmxpbmVfc3RhcnQgLnd0SG9sZGVyLC5odF9j''@;'; put 'put ''bG9uZV90b3AgLnd0SG9sZGVyLC5odF9jbG9uZV9ib3R0b20gLnd0SG9sZGVye292ZXJmbG93OmhpZGRlbn0uaHRfbWFzdGVyIC53dEhvbGRlcntvdmVyZmxvdzphdXRvfVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGRbZGlyPWx0cl17Ym9yZGVyLWlubGluZS13aWR0aDoxcHggMH1bZGlyPXJ0''@;'; put 'put ''bF0uaGFuZHNvbnRhYmxlIHRib2R5IHRyIHRkW2Rpcj1sdHJdOmxhc3QtY2hpbGR7Ym9yZGVyLWlubGluZS1zdGFydC1jb2xvcjp2YXIoLS1odC1ib3JkZXItY29sb3IpfVtkaXI9cnRsXS5oYW5kc29udGFibGUgZGl2W2NsYXNzXj1odF9jbG9uZV0gdGJvZHkgLmh0X19oaWdobGlnaHQgLnJl''@;'; put 'put ''bGF0aXZlOmFmdGVye2xlZnQ6LTFweDtyaWdodDphdXRvfS5oYW5kc29udGFibGUuaHQtd3JhcHBlcntib3JkZXItcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlcjpub3QoLmh0Q29sdW1uSGVhZGVycykgLmh0X21hc3RlciAuaHRDb3JlIHRi''@;'; put 'put ''b2R5IHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6''@;'; put 'put ''bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXI6bm90KC5odENvbHVtbkhlYWRlcnMp''@;'; put 'put ''IC5odF9tYXN0ZXIgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZDppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6''@;'; put 'put ''bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVy''@;'; put 'put ''Om5vdCguaHRDb2x1bW5IZWFkZXJzKSAuaHRfbWFzdGVyIC5odENvcmUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZDpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSks''@;'; put 'put ''OmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5o''@;'; put 'put ''YW5kc29udGFibGUuaHQtd3JhcHBlcjpub3QoLmh0Q29sdW1uSGVhZGVycykgLmh0X21hc3RlciAuaHRDb3JlIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hpbGQ6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2Ip''@;'; put 'put ''LDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0t''@;'; put 'put ''aHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyOm5vdCguaHRDb2x1bW5IZWFkZXJzKSAuaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZDpub3QoOmxhbmcoYWUpLDpsYW5nKGFy''@;'; put 'put ''KSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5n''@;'; put 'put ''KHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyOm5vdCguaHRDb2x1bW5IZWFkZXJzKSAuaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIgLmh0Q29yZSB0Ym9keSB0cjpmaXJz''@;'; put 'put ''dC1jaGlsZCB0ZDpmaXJzdC1jaGlsZDppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDps''@;'; put 'put ''YW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyOm5vdCguaHRDb2x1bW5IZWFkZXJzKSAuaHRfY2xvbmVf''@;'; put 'put ''dG9wIC5odENvcmUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQ6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1''@;'; put 'put ''KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlcjpub3QoLmh0''@;'; put 'put ''Q29sdW1uSGVhZGVycykgLmh0X2Nsb25lX3RvcCAuaHRDb3JlIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5n''@;'; put 'put ''KGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX0uaGFuZHNv''@;'; put 'put ''bnRhYmxlLmh0LXdyYXBwZXI6bm90KC5odENvbHVtbkhlYWRlcnMpIC5odF9jbG9uZV90b3AgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiks''@;'; put 'put ''OmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0t''@;'; put 'put ''aHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyOm5vdCguaHRDb2x1bW5IZWFkZXJzKSAuaHRfY2xvbmVfdG9wIC5odENvcmUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZDppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNj''@;'; put 'put ''KSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVy''@;'; put 'put ''LXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX06aXMoLmhhbmRzb250YWJsZS5odC13cmFwcGVyOm5vdCguaHRDb2x1bW5IZWFkZXJzKSAuaHRfY2xvbmVfaW5saW5lX3N0YXJ0IC5odENvcmUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQ6bm90KDps''@;'; put 'put ''YW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2Qp''@;'; put 'put ''LDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKSwuaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXI6bm90KC5odENvbHVtbkhlYWRlcnMpIC5odF9jbG9uZV9pbmxpbmVfc3RhcnQgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZDpub3QoOmxhbmcoYWUpLDpsYW5n''@;'; put 'put ''KGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDps''@;'; put 'put ''YW5nKHVyKSw6bGFuZyh5aSkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfTppcyguaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXI6bm90KC5odENvbHVtbkhlYWRlcnMpIC5odF9jbG9uZV9pbmxpbmVfc3RhcnQgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1j''@;'; put 'put ''aGlsZCB0aDpmaXJzdC1jaGlsZDppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5n''@;'; put 'put ''KHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSksLmhhbmRzb250YWJsZS5odC13cmFwcGVyOm5vdCguaHRDb2x1bW5IZWFkZXJzKSAuaHRfY2xvbmVfaW5saW5lX3N0YXJ0IC5odENvcmUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3Qt''@;'; put 'put ''Y2hpbGQ6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBz''@;'; put 'put ''KSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X21hc3RlciAud3RIb2xkZXIsLmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5o''@;'; put 'put ''dF9tYXN0ZXIgLmh0Q29yZXtib3JkZXItcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfbWFzdGVyIC5odENvcmUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQ6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmco''@;'; put 'put ''YXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxh''@;'; put 'put ''bmcoeWkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfbWFzdGVyIC5odENvcmUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQ6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhh''@;'; put 'put ''cmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFu''@;'; put 'put ''Zyh5aSkpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfbWFzdGVyIC5odENvcmUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6bm90KC5oaWRkZW5IZWFkZXIpOm5vdCg6aGFzKH50aDpub3QoLmhpZGRl''@;'; put 'put ''bkhlYWRlcikpKTpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDps''@;'; put 'put ''YW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfbWFzdGVyIC5odENvcmUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6''@;'; put 'put ''bm90KC5oaWRkZW5IZWFkZXIpOm5vdCg6aGFzKH50aDpub3QoLmhpZGRlbkhlYWRlcikpKTppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFu''@;'; put 'put ''ZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0''@;'; put 'put ''X21hc3RlciAuaHRDb3JlIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQ6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5n''@;'; put 'put ''KGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlciAu''@;'; put 'put ''aHRfbWFzdGVyIC5odENvcmUgdGhlYWQgdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZDppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFu''@;'; put 'put ''ZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVy''@;'; put 'put ''IC5odF9tYXN0ZXIgLmh0Q29yZSB0aGVhZCB0cjpsYXN0LWNoaWxkIHRoOm5vdCguaGlkZGVuSGVhZGVyKTpub3QoOmhhcyh+dGg6bm90KC5oaWRkZW5IZWFkZXIpKSk6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6''@;'; put 'put ''bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIo''@;'; put 'put ''LS1odC1ib3JkZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X21hc3RlciAuaHRDb3JlIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGg6bm90KC5oaWRkZW5IZWFkZXIpOm5vdCg6aGFzKH50aDpub3QoLmhpZGRlbkhlYWRlcikpKTppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDps''@;'; put 'put ''YW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIp''@;'; put 'put ''LDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X21hc3RlciAuaHRDb3JlIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQ6bm90KDpsYW5nKGFlKSw6bGFuZyhhciks''@;'; put 'put ''OmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1''@;'; put 'put ''ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfbWFzdGVyIC5odENvcmUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZDppcyg6bGFuZyhhZSksOmxhbmcoYXIp''@;'; put 'put ''LDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmco''@;'; put 'put ''dXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9tYXN0ZXIgLmh0Q29yZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQ6bm90KDpsYW5nKGFlKSw6bGFuZyhh''@;'; put 'put ''ciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFu''@;'; put 'put ''Zyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X21hc3RlciAuaHRDb3JlIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZDppcyg6bGFuZyhhZSksOmxhbmco''@;'; put 'put ''YXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxh''@;'; put 'put ''bmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyIC5odENvcmU6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmco''@;'; put 'put ''YXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxh''@;'; put 'put ''bmcoeWkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIgLmh0Q29yZTppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNj''@;'; put 'put ''KSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVy''@;'; put 'put ''LXRvcC1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciAuaHRDb3JlIHRoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkOm5vdCg6bGFuZyhhZSksOmxhbmco''@;'; put 'put ''YXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxh''@;'; put 'put ''bmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyIC5odENvcmUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hp''@;'; put 'put ''bGQ6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6''@;'; put 'put ''bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfY2xvbmVfdG9wIC5odENvcmU6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmco''@;'; put 'put ''YXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxh''@;'; put 'put ''bmcoeWkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfY2xvbmVfdG9wIC5odENvcmU6aXMoOmxhbmcoYWUpLDps''@;'; put 'put ''YW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcp''@;'; put 'put ''LDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV90b3AgLmh0Q29yZSB0''@;'; put 'put ''aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZDpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biks''@;'; put 'put ''OmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV90b3AgLmh0Q29y''@;'; put 'put ''ZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZDppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpu''@;'; put 'put ''KSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV90b3AgLmh0''@;'; put 'put ''Q29yZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpub3QoLmhpZGRlbkhlYWRlcik6bm90KDpoYXMofnRoOm5vdCguaGlkZGVuSGVhZGVyKSkpOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5n''@;'; put 'put ''KGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1''@;'; put 'put ''cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV90b3AgLmh0Q29yZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpub3QoLmhpZGRlbkhlYWRlcik6bm90KDpoYXMofnRoOm5vdCguaGlkZGVuSGVhZGVyKSkpOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFu''@;'; put 'put ''ZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXti''@;'; put 'put ''b3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfY2xvbmVfaW5saW5lX3N0YXJ0IC5odENvcmU6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmco''@;'; put 'put ''Y2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZh''@;'; put 'put ''cigtLWh0LWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV9pbmxpbmVfc3RhcnQgLmh0Q29yZTppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxh''@;'; put 'put ''bmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7''@;'; put 'put ''Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV9pbmxpbmVfc3RhcnQgLmh0Q29yZSB0aGVhZCB0cjpm''@;'; put 'put ''aXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZDpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFv''@;'; put 'put ''KSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV9pbmxpbmVfc3RhcnQgLmh0Q29y''@;'; put 'put ''ZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZDppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpu''@;'; put 'put ''KSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9OmlzKC5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfY2xvbmVfaW5s''@;'; put 'put ''aW5lX3N0YXJ0IC5odENvcmUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZDpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxh''@;'; put 'put ''bmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpLC5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfY2xvbmVfaW5saW5lX3N0YXJ0IC5odENvcmUgdGJvZHkgdHI6bGFzdC1jaGls''@;'; put 'put ''ZCB0ZDpmaXJzdC1jaGlsZDpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhw''@;'; put 'put ''bmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpKXtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfTppcyguaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X2Nsb25lX2lubGluZV9zdGFydCAuaHRDb3Jl''@;'; put 'put ''IHRib2R5IHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQ6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biks''@;'; put 'put ''OmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpLC5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfY2xvbmVfaW5saW5lX3N0YXJ0IC5odENvcmUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZDpp''@;'; put 'put ''cyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5n''@;'; put 'put ''KHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSkpe2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIgLmh0Q29yZTpub3QoOmxh''@;'; put 'put ''bmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCks''@;'; put 'put ''OmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciAuaHRDb3JlOmlzKDpsYW5nKGFlKSw6''@;'; put 'put ''bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVn''@;'; put 'put ''KSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX06aXMoLmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciAuaHRDb3JlIHRyOmxhc3QtY2hpbGQgdGg6''@;'; put 'put ''Zmlyc3QtY2hpbGQ6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6''@;'; put 'put ''bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKSwuaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIC5odENvcmUgdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZDpub3QoOmxhbmcoYWUpLDps''@;'; put 'put ''YW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcp''@;'; put 'put ''LDpsYW5nKHVyKSw6bGFuZyh5aSkpKXtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfTppcyguaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIC5odENvcmUgdHI6bGFzdC1jaGlsZCB0aDpm''@;'; put 'put ''aXJzdC1jaGlsZDppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxh''@;'; put 'put ''bmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSksLmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciAuaHRDb3JlIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQ6aXMoOmxhbmcoYWUpLDpsYW5n''@;'; put 'put ''KGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDps''@;'; put 'put ''YW5nKHVyKSw6bGFuZyh5aSkpKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X2Nsb25lX2JvdHRvbSAuaHRDb3JlOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNj''@;'; put 'put ''KSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVy''@;'; put 'put ''LWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X2Nsb25lX2JvdHRvbSAuaHRDb3JlOmlzKDpsYW5nKGFlKSw6bGFuZyhh''@;'; put 'put ''ciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFu''@;'; put 'put ''Zyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfTppcyguaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X2Nsb25lX2JvdHRvbSAu''@;'; put 'put ''aHRDb3JlIHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQ6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4p''@;'; put 'put ''LDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKSwuaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X2Nsb25lX2JvdHRvbSAuaHRDb3JlIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQ6bm90KDpsYW5nKGFl''@;'; put 'put ''KSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5n''@;'; put 'put ''KHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKSl7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX06aXMoLmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV9ib3R0b20gLmh0Q29yZSB0cjpsYXN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkOmlzKDps''@;'; put 'put ''YW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2Qp''@;'; put 'put ''LDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKSwuaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X2Nsb25lX2JvdHRvbSAuaHRDb3JlIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQ6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFp''@;'; put 'put ''KSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpKXtib3JkZXItYm90dG9tLXJp''@;'; put 'put ''Z2h0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX06aXMoLmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV9ib3R0b20gLmh0Q29yZSB0cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQ6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDps''@;'; put 'put ''YW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKSwuaGFuZHNvbnRh''@;'; put 'put ''YmxlLmh0LXdyYXBwZXIgLmh0X2Nsb25lX2JvdHRvbSAuaHRDb3JlIHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZDpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xr''@;'; put 'put ''KSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX06aXMoLmhh''@;'; put 'put ''bmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV9ib3R0b20gLmh0Q29yZSB0cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQ6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxh''@;'; put 'put ''bmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpLC5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfY2xvbmVfYm90dG9tIC5odENvcmUgdHI6''@;'; put 'put ''bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyks''@;'; put 'put ''OmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKSl7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIuaHRIYXNTY3JvbGxYOm5vdCguaHRIb3Jpem9u''@;'; put 'put ''dGFsbHlTY3JvbGxhYmxlQnlXaW5kb3cpIC5odENvcmU6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDps''@;'; put 'put ''YW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKSwuaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIuaHRIYXNTY3JvbGxYOm5vdCguaHRIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3cpIC5odENvcmU6aXMoOmxhbmco''@;'; put 'put ''YWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxh''@;'; put 'put ''bmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfTppcyguaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIuaHRIYXNTY3JvbGxYOm5vdCguaHRIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3cp''@;'; put 'put ''IC5odENvcmUgdGhlYWQgdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZDpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDps''@;'; put 'put ''YW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpLC5oYW5kc29udGFibGUuaHQtd3JhcHBlci5odEhhc1Njcm9sbFg6bm90KC5odEhvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29y''@;'; put 'put ''ZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpu''@;'; put 'put ''KSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSksLmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWDpub3QoLmh0SG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KSAuaHRDb3JlIHRib2R5''@;'; put 'put ''IHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQ6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5n''@;'; put 'put ''KG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKSl7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfTppcyguaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIuaHRIYXNTY3JvbGxYOm5vdCguaHRIb3Jpem9udGFsbHlTY3JvbGxh''@;'; put 'put ''YmxlQnlXaW5kb3cpIC5odENvcmUgdGhlYWQgdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZDppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6''@;'; put 'put ''bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSksLmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWDpub3QoLmh0SG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2lu''@;'; put 'put ''ZG93KSAuaHRDb3JlIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQ6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3Up''@;'; put 'put ''LDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpLC5oYW5kc29udGFibGUuaHQtd3JhcHBlci5odEhhc1Njcm9sbFg6bm90KC5odEhvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0''@;'; put 'put ''Q29yZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyht''@;'; put 'put ''em4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKSl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH06aXMoLmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWDpub3QoLmh0SG9yaXpvbnRh''@;'; put 'put ''bGx5U2Nyb2xsYWJsZUJ5V2luZG93KSAuaHRDb3JlIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGg6bm90KC5oaWRkZW5IZWFkZXIpOm5vdCg6aGFzKH50aDpub3QoLmhpZGRlbkhlYWRlcikpKSwuaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIuaHRIYXNTY3JvbGxYOm5vdCguaHRIb3Jpem9udGFsbHlT''@;'; put 'put ''Y3JvbGxhYmxlQnlXaW5kb3cpIC5odENvcmUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLC5oYW5kc29udGFibGUuaHQtd3JhcHBlci5odEhhc1Njcm9sbFg6bm90KC5odEhvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29yZSB0Ym9keSB0cjpsYXN0LWNoaWxk''@;'; put 'put ''IHRoOmxhc3QtY2hpbGQpOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBu''@;'; put 'put ''YiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH06aXMoLmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWDpub3QoLmh0SG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KSAu''@;'; put 'put ''aHRDb3JlIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGg6bm90KC5oaWRkZW5IZWFkZXIpOm5vdCg6aGFzKH50aDpub3QoLmhpZGRlbkhlYWRlcikpKSwuaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIuaHRIYXNTY3JvbGxYOm5vdCguaHRIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3cpIC5odENv''@;'; put 'put ''cmUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLC5oYW5kc29udGFibGUuaHQtd3JhcHBlci5odEhhc1Njcm9sbFg6bm90KC5odEhvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29yZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQpOmlzKDpsYW5n''@;'; put 'put ''KGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDps''@;'; put 'put ''YW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWTpub3QoLmh0VmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29yZTpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6''@;'; put 'put ''bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVy''@;'; put 'put ''KSw6bGFuZyh5aSkpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIuaHRIYXNTY3JvbGxZOm5vdCguaHRWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KSAuaHRDb3JlOmlzKDpsYW5nKGFlKSw6''@;'; put 'put ''bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVn''@;'; put 'put ''KSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfTppcyguaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIuaHRIYXNTY3JvbGxZOm5vdCguaHRWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KSAuaHRDb3JlIHRo''@;'; put 'put ''ZWFkIHRyOmZpcnN0LWNoaWxkIHRoOm5vdCguaGlkZGVuSGVhZGVyKTpub3QoOmhhcyh+dGg6bm90KC5oaWRkZW5IZWFkZXIpKSksLmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWTpub3QoLmh0VmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29yZSB0Ym9keSB0''@;'; put 'put ''cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLC5oYW5kc29udGFibGUuaHQtd3JhcHBlci5odEhhc1Njcm9sbFk6bm90KC5odFZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3cpIC5odENvcmUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCk6bm90KDpsYW5nKGFlKSw6bGFu''@;'; put 'put ''ZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6''@;'; put 'put ''bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowfTppcyguaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIuaHRIYXNTY3JvbGxZOm5vdCguaHRWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KSAuaHRDb3JlIHRoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOm5vdCguaGlk''@;'; put 'put ''ZGVuSGVhZGVyKTpub3QoOmhhcyh+dGg6bm90KC5oaWRkZW5IZWFkZXIpKSksLmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWTpub3QoLmh0VmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLC5o''@;'; put 'put ''YW5kc29udGFibGUuaHQtd3JhcHBlci5odEhhc1Njcm9sbFk6bm90KC5odFZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3cpIC5odENvcmUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCk6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxh''@;'; put 'put ''bmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3At''@;'; put 'put ''bGVmdC1yYWRpdXM6MH06aXMoLmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWTpub3QoLmh0VmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29yZSB0aGVhZCB0cjpsYXN0LWNoaWxkIHRoOm5vdCguaGlkZGVuSGVhZGVyKTpub3QoOmhhcyh+dGg6bm90KC5oaWRk''@;'; put 'put ''ZW5IZWFkZXIpKSksLmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWTpub3QoLmh0VmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29yZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsLmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xs''@;'; put 'put ''WTpub3QoLmh0VmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29yZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQpOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5n''@;'; put 'put ''KGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH06aXMoLmhhbmRzb250YWJs''@;'; put 'put ''ZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWTpub3QoLmh0VmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29yZSB0aGVhZCB0cjpsYXN0LWNoaWxkIHRoOm5vdCguaGlkZGVuSGVhZGVyKTpub3QoOmhhcyh+dGg6bm90KC5oaWRkZW5IZWFkZXIpKSksLmhhbmRzb250YWJsZS5odC13''@;'; put 'put ''cmFwcGVyLmh0SGFzU2Nyb2xsWTpub3QoLmh0VmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29yZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsLmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWTpub3QoLmh0VmVydGljYWxseVNjcm9sbGFibGVC''@;'; put 'put ''eVdpbmRvdykgLmh0Q29yZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQpOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5n''@;'; put 'put ''KGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9Lmh0LXJvb3Qtd3JhcHBlcntib3JkZXItcmFkaXVzOnZhcigtLWh0LWJvcmRlci1y''@;'; put 'put ''YWRpdXMpfS5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC1ib3R0b20+Lmh0LXNsb3QtZWxlbWVudCkgLmh0LXdyYXBwZXI6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDps''@;'; put 'put ''YW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRp''@;'; put 'put ''dXM6MH0uaHQtcm9vdC13cmFwcGVyOmhhcyg+Lmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQpIC5odC13cmFwcGVyOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5n''@;'; put 'put ''KGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6''@;'; put 'put ''MH0uaHQtcm9vdC13cmFwcGVyOmhhcyg+Lmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQpIC5odF9tYXN0ZXIgLnd0SG9sZGVyOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZh''@;'; put 'put ''KSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQt''@;'; put 'put ''cmFkaXVzOjB9Lmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LWJvdHRvbT4uaHQtc2xvdC1lbGVtZW50KSAuaHRfbWFzdGVyIC53dEhvbGRlcjppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDps''@;'; put 'put ''YW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9t''@;'; put 'put ''LWxlZnQtcmFkaXVzOjB9Lmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LWJvdHRvbT4uaHQtc2xvdC1lbGVtZW50KSAuaHRDb3JlOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZh''@;'; put 'put ''KSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQt''@;'; put 'put ''cmFkaXVzOjB9Lmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LWJvdHRvbT4uaHQtc2xvdC1lbGVtZW50KSAuaHRDb3JlOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5n''@;'; put 'put ''KGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6''@;'; put 'put ''MH06aXMoLmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LWJvdHRvbT4uaHQtc2xvdC1lbGVtZW50KSAuaHRDb3JlIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsLmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LWJvdHRvbT4uaHQtc2xvdC1lbGVtZW50KSAuaHRD''@;'; put 'put ''b3JlIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsLmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LWJvdHRvbT4uaHQtc2xvdC1lbGVtZW50KSAuaHRDb3JlIHRib2R5IHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDps''@;'; put 'put ''YW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIp''@;'; put 'put ''LDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfTppcyguaHQtcm9vdC13cmFwcGVyOmhhcyg+Lmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQpIC5odENvcmUgdGhlYWQgdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwuaHQtcm9vdC13cmFwcGVyOmhhcyg+''@;'; put 'put ''Lmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQpIC5odENvcmUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwuaHQtcm9vdC13cmFwcGVyOmhhcyg+Lmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQpIC5odENvcmUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0aDpm''@;'; put 'put ''aXJzdC1jaGlsZCk6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDps''@;'; put 'put ''YW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9OmlzKC5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC1ib3R0b20+Lmh0LXNsb3QtZWxlbWVudCkgLmh0Q29yZSB0aGVhZCB0cjpsYXN0LWNoaWxk''@;'; put 'put ''IHRoOm5vdCguaGlkZGVuSGVhZGVyKTpub3QoOmhhcyh+dGg6bm90KC5oaWRkZW5IZWFkZXIpKSksLmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LWJvdHRvbT4uaHQtc2xvdC1lbGVtZW50KSAuaHRDb3JlIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwuaHQtcm9vdC13''@;'; put 'put ''cmFwcGVyOmhhcyg+Lmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQpIC5odENvcmUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0aDpsYXN0LWNoaWxkKTpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2''@;'; put 'put ''KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9OmlzKC5odC1y''@;'; put 'put ''b290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC1ib3R0b20+Lmh0LXNsb3QtZWxlbWVudCkgLmh0Q29yZSB0aGVhZCB0cjpsYXN0LWNoaWxkIHRoOm5vdCguaGlkZGVuSGVhZGVyKTpub3QoOmhhcyh+dGg6bm90KC5oaWRkZW5IZWFkZXIpKSksLmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90''@;'; put 'put ''LWJvdHRvbT4uaHQtc2xvdC1lbGVtZW50KSAuaHRDb3JlIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwuaHQtcm9vdC13cmFwcGVyOmhhcyg+Lmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQpIC5odENvcmUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0aDpsYXN0LWNoaWxk''@;'; put 'put ''KTppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDps''@;'; put 'put ''YW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC10b3A+Lmh0LXNsb3QtZWxlbWVudCkgLmh0LXdyYXBwZXI6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJj''@;'; put 'put ''KSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmco''@;'; put 'put ''eWkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0uaHQtcm9vdC13cmFwcGVyOmhhcyg+Lmh0LXNsb3QtdG9wPi5odC1zbG90LWVsZW1lbnQpIC5odC13cmFwcGVyOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2Mp''@;'; put 'put ''LDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXIt''@;'; put 'put ''dG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0uaHQtcm9vdC13cmFwcGVyOmhhcyg+Lmh0LXNsb3QtdG9wPi5odC1zbG90LWVsZW1lbnQpIC5odF9tYXN0ZXIgLnd0SG9sZGVyOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6''@;'; put 'put ''bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRv''@;'; put 'put ''cC1sZWZ0LXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9Lmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LXRvcD4uaHQtc2xvdC1lbGVtZW50KSAuaHRfbWFzdGVyIC53dEhvbGRlcjppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFu''@;'; put 'put ''ZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1s''@;'; put 'put ''ZWZ0LXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9Lmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LXRvcD4uaHQtc2xvdC1lbGVtZW50KSAuaHRDb3JlOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNr''@;'; put 'put ''YiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2Jv''@;'; put 'put ''cmRlci10b3AtcmlnaHQtcmFkaXVzOjB9Lmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LXRvcD4uaHQtc2xvdC1lbGVtZW50KSAuaHRDb3JlOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxh''@;'; put 'put ''bmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1y''@;'; put 'put ''YWRpdXM6MH06aXMoLmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LXRvcD4uaHQtc2xvdC1lbGVtZW50KSAuaHRDb3JlIHRoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC10b3A+Lmh0LXNsb3QtZWxlbWVudCkgLmh0''@;'; put 'put ''Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwuaHQtcm9vdC13cmFwcGVyOmhhcyg+Lmh0LXNsb3QtdG9wPi5odC1zbG90LWVsZW1lbnQpIC5odENvcmUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDps''@;'; put 'put ''YW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIp''@;'; put 'put ''LDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowfTppcyguaHQtcm9vdC13cmFwcGVyOmhhcyg+Lmh0LXNsb3QtdG9wPi5odC1zbG90LWVsZW1lbnQpIC5odENvcmUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsLmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1z''@;'; put 'put ''bG90LXRvcD4uaHQtc2xvdC1lbGVtZW50KSAuaHRDb3JlIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLC5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC10b3A+Lmh0LXNsb3QtZWxlbWVudCkgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGls''@;'; put 'put ''ZCk6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6''@;'; put 'put ''bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9OmlzKC5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC10b3A+Lmh0LXNsb3QtZWxlbWVudCkgLmh0Q29yZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpub3QoLmhpZGRl''@;'; put 'put ''bkhlYWRlcik6bm90KDpoYXMofnRoOm5vdCguaGlkZGVuSGVhZGVyKSkpLC5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC10b3A+Lmh0LXNsb3QtZWxlbWVudCkgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLC5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQt''@;'; put 'put ''c2xvdC10b3A+Lmh0LXNsb3QtZWxlbWVudCkgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkKTpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmco''@;'; put 'put ''Z2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9OmlzKC5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQt''@;'; put 'put ''c2xvdC10b3A+Lmh0LXNsb3QtZWxlbWVudCkgLmh0Q29yZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpub3QoLmhpZGRlbkhlYWRlcik6bm90KDpoYXMofnRoOm5vdCguaGlkZGVuSGVhZGVyKSkpLC5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC10b3A+Lmh0LXNsb3QtZWxlbWVudCkg''@;'; put 'put ''Lmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLC5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC10b3A+Lmh0LXNsb3QtZWxlbWVudCkgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkKTppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDps''@;'; put 'put ''YW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIp''@;'; put 'put ''LDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowfS5odC1yb290LXdyYXBwZXIgLmh0LXNsb3QtZWxlbWVudHtib3JkZXItcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5odC1yb290LXdyYXBwZXIgLmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQ6bm90KDps''@;'; put 'put ''YXN0LW9mLXR5cGUpe2JvcmRlci1yYWRpdXM6MH0uaHQtcm9vdC13cmFwcGVyIC5odC1zbG90LWJvdHRvbT4uaHQtc2xvdC1lbGVtZW50Omxhc3Qtb2YtdHlwZTpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5n''@;'; put 'put ''KGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpLC5odC1yb290LXdyYXBwZXIgLmh0LXNsb3QtYm90dG9tPi5o''@;'; put 'put ''dC1zbG90LWVsZW1lbnQ6bGFzdC1vZi10eXBlOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5x''@;'; put 'put ''byksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0uaHQtcm9vdC13cmFwcGVyIC5odC1zbG90LXRvcD4uaHQtc2xvdC1lbGVtZW50Om5v''@;'; put 'put ''dCg6Zmlyc3Qtb2YtdHlwZSl7Ym9yZGVyLXJhZGl1czowfS5odC1yb290LXdyYXBwZXIgLmh0LXNsb3QtdG9wPi5odC1zbG90LWVsZW1lbnQ6Zmlyc3Qtb2YtdHlwZTpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDps''@;'; put 'put ''YW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpLC5odC1yb290LXdyYXBwZXIgLmh0LXNsb3QtdG9wPi5o''@;'; put 'put ''dC1zbG90LWVsZW1lbnQ6Zmlyc3Qtb2YtdHlwZTppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhu''@;'; put 'put ''cW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmhhbmRzb250YWJsZS5tb2JpbGUsLmhhbmRzb250YWJsZS5tb2JpbGUg''@;'; put 'put ''Lnd0SG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjojMDAwMDstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0uaGFuZHNvbnRhYmxlLm1vYmlsZSAuaGFuZHNvbnRhYmxlSW5wdXQ6Zm9jdXN7''@;'; put 'put ''Ym94LXNoYWRvdzppbnNldCAwIDAgMCAycHggdmFyKC0taHQtYWNjZW50LWNvbG9yKTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0uaGFuZHNvbnRhYmxlIC50b3BTZWxlY3Rpb25IYW5kbGUsLmhhbmRzb250YWJsZSAudG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEsLmhhbmRzb250YWJsZSAu''@;'; put 'put ''Ym90dG9tU2VsZWN0aW9uSGFuZGxlLC5oYW5kc29udGFibGUgLmJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhe2luc2V0LWlubGluZS1zdGFydDotMTAwMDBweDtpbnNldC1pbmxpbmUtZW5kOnVuc2V0O3otaW5kZXg6OTk5OTt0b3A6LTEwMDAwcHh9LmhhbmRzb250YWJsZS5oaWRlLXR3''@;'; put 'put ''ZWVue2FuaW1hdGlvbjouMnMgZm9yd2FyZHMgb3BhY2l0eS1oaWRlfS5oYW5kc29udGFibGUuc2hvdy10d2VlbnthbmltYXRpb246LjNzIGZvcndhcmRzIG9wYWNpdHktc2hvd30uaHRfY2xvbmVfbWFzdGVye3otaW5kZXg6MTAwfS5odF9jbG9uZV9pbmxpbmVfc3RhcnR7ei1pbmRleDoxMjB9''@;'; put 'put ''Lmh0X2Nsb25lX2JvdHRvbXt6LWluZGV4OjEzMH0uaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXJ7ei1pbmRleDoxNTB9Lmh0X2Nsb25lX3RvcHt6LWluZGV4OjE2MH0uaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXJ7ei1pbmRleDoxODB9Lmh0X2VkaXRvcl9oaWRk''@;'; put 'put ''ZW57ei1pbmRleDotMX0uaHRfZWRpdG9yX3Zpc2libGV7ei1pbmRleDoyMDB9LmhhbmRzb250YWJsZSB0ZC5hcmVhe3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgdGQuYXJlYTpiZWZvcmV7Y29udGVudDoiIjtiYWNrZ3JvdW5kOnZhcigtLWh0LWNlbGwtc2VsZWN0aW9uLWJhY2tn''@;'; put 'put ''cm91bmQtY29sb3IsIzFhNDJlOCk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MH0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtMXtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtMTpiZWZvcmV7Y29udGVudDoiIjtiYWNrZ3JvdW5kOnZhcigtLWh0LWNlbGwtc2VsZWN0aW9u''@;'; put 'put ''LWJhY2tncm91bmQtY29sb3IsIzFhNDJlOCk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MH0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtMntwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtMjpiZWZvcmV7Y29udGVudDoiIjtiYWNrZ3JvdW5kOnZhcigtLWh0LWNlbGwtc2Vs''@;'; put 'put ''ZWN0aW9uLWJhY2tncm91bmQtY29sb3IsIzFhNDJlOCk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MH0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtM3twb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtMzpiZWZvcmV7Y29udGVudDoiIjtiYWNrZ3JvdW5kOnZhcigtLWh0LWNl''@;'; put 'put ''bGwtc2VsZWN0aW9uLWJhY2tncm91bmQtY29sb3IsIzFhNDJlOCk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MH0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNHtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNDpiZWZvcmV7Y29udGVudDoiIjtiYWNrZ3JvdW5kOnZhcigt''@;'; put 'put ''LWh0LWNlbGwtc2VsZWN0aW9uLWJhY2tncm91bmQtY29sb3IsIzFhNDJlOCk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MH0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNXtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNTpiZWZvcmV7Y29udGVudDoiIjtiYWNrZ3JvdW5k''@;'; put 'put ''OnZhcigtLWh0LWNlbGwtc2VsZWN0aW9uLWJhY2tncm91bmQtY29sb3IsIzFhNDJlOCk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MH0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNntwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNjpiZWZvcmV7Y29udGVudDoiIjtiYWNr''@;'; put 'put ''Z3JvdW5kOnZhcigtLWh0LWNlbGwtc2VsZWN0aW9uLWJhY2tncm91bmQtY29sb3IsIzFhNDJlOCk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MH0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtN3twb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNzpiZWZvcmV7Y29udGVudDoi''@;'; put 'put ''IjtiYWNrZ3JvdW5kOnZhcigtLWh0LWNlbGwtc2VsZWN0aW9uLWJhY2tncm91bmQtY29sb3IsIzFhNDJlOCk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MH0uaGFuZHNvbnRhYmxlIHRkLmFyZWE6YmVmb3Jle29wYWNpdHk6LjE0fS5oYW5kc29udGFibGUgdGQuYXJlYS0xOmJlZm9yZXtvcGFj''@;'; put 'put ''aXR5Oi4yMX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtMjpiZWZvcmV7b3BhY2l0eTouMjh9LmhhbmRzb250YWJsZSB0ZC5hcmVhLTM6YmVmb3Jle29wYWNpdHk6LjM1fS5oYW5kc29udGFibGUgdGQuYXJlYS00OmJlZm9yZXtvcGFjaXR5Oi40Mn0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNTpiZWZv''@;'; put 'put ''cmV7b3BhY2l0eTouNDl9LmhhbmRzb250YWJsZSB0ZC5hcmVhLTY6YmVmb3Jle29wYWNpdHk6LjU2fS5oYW5kc29udGFibGUgdGQuYXJlYS03OmJlZm9yZXtvcGFjaXR5Oi42M30uaGFuZHNvbnRhYmxlIHRkLmFyZWF7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWh0LWJv''@;'; put 'put ''cmRlci1jb2xvciksdmFyKC0taHQtZm9yZWdyb3VuZC1jb2xvcikxMCUpfS5oYW5kc29udGFibGUgLnd0Qm9yZGVye2ZvbnQtc2l6ZTowO3Bvc2l0aW9uOmFic29sdXRlfS5oYW5kc29udGFibGUgLnd0Qm9yZGVyOmZpcnN0LWNoaWxkLC5oYW5kc29udGFibGUgLnd0Qm9yZGVyOm50aC1jaGls''@;'; put 'put ''ZCgzKXt6LWluZGV4OjJ9LmhhbmRzb250YWJsZSAud3RCb3JkZXI6bnRoLWNoaWxkKDIpLC5oYW5kc29udGFibGUgLnd0Qm9yZGVyOm50aC1jaGlsZCg0KXt6LWluZGV4OjF9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuaGlkZGVue2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmhhbmRzb250YWJs''@;'; put 'put ''ZSAud3RCb3JkZXIuY3VycmVudHt6LWluZGV4OjEwO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtY2VsbC1zZWxlY3Rpb24tYm9yZGVyLWNvbG9yKSFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuYXJlYXt6LWluZGV4Ojg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1jZWxs''@;'; put 'put ''LXNlbGVjdGlvbi1ib3JkZXItY29sb3IpIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIC53dEJvcmRlci5maWxse3otaW5kZXg6NjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWNlbGwtYXV0b2ZpbGwtZmlsbC1ib3JkZXItY29sb3IsIzY4Njk2YykhaW1wb3J0YW50fS5oYW5kc29udGFibGUg''@;'; put 'put ''Lnd0Qm9yZGVyLmNvcm5lcntjdXJzb3I6Y3Jvc3NoYWlyO3otaW5kZXg6MTA7Zm9udC1zaXplOjA7Ym9yZGVyLXJhZGl1czp2YXIoLS1odC1jZWxsLWF1dG9maWxsLWJvcmRlci1yYWRpdXMpIWltcG9ydGFudDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWNlbGwtYXV0b2ZpbGwtYmFja2dy''@;'; put 'put ''b3VuZC1jb2xvciwjMWE0MmU4KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOnZhcigtLWh0LWNlbGwtYXV0b2ZpbGwtYm9yZGVyLWNvbG9yKSFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuY29ybmVyOmFmdGVye2NvbnRlbnQ6IiI7Ym9yZGVyLXJhZGl1czp2YXIoLS1odC1jZWxs''@;'; put 'put ''LWF1dG9maWxsLWJvcmRlci1yYWRpdXMpO2luc2V0Om1pbigwcHgsKHZhcigtLWh0LWNlbGwtYXV0b2ZpbGwtc2l6ZSkgLSB2YXIoLS1odC1jZWxsLWF1dG9maWxsLWhpdC1hcmVhLXNpemUpKS8yKTtiYWNrZ3JvdW5kOjAgMDtwb3NpdGlvbjphYnNvbHV0ZX0uaGFuZHNvbnRhYmxlIC53dEJv''@;'; put 'put ''cmRlci5jb3JuZXIud3RDb3JuZXJJbmxpbmVFbmRFZGdlOmFmdGVye2luc2V0LWlubGluZS1lbmQ6MH0uaGFuZHNvbnRhYmxlIC53dEJvcmRlci5jb3JuZXIud3RDb3JuZXJCbG9ja0VuZEVkZ2U6YWZ0ZXJ7aW5zZXQtYmxvY2stZW5kOjB9LmhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mb3tmb250''@;'; put 'put ''LWZhbWlseTp2YXIoLS1odC1mb250LWZhbWlseSksLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsIlNlZ29lIFVJIixzYW5zLXNlcmlmO3BhZGRpbmc6dmFyKC0taHQtbGljZW5zZS12ZXJ0aWNhbC1wYWRkaW5nLDE2cHgpdmFyKC0taHQtbGljZW5zZS1ob3Jpem9udGFsLXBhZGRp''@;'; put 'put ''bmcsMTZweCk7Zm9udC1zaXplOnZhcigtLWh0LWZvbnQtc2l6ZS1zbWFsbCk7bGluZS1oZWlnaHQ6dmFyKC0taHQtbGluZS1oZWlnaHQtc21hbGwpO2NvbG9yOnZhcigtLWh0LWxpY2Vuc2UtZm9yZWdyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1saWNlbnNlLWJhY2tn''@;'; put 'put ''cm91bmQtY29sb3IsI2Y3ZjdmOSk7dGV4dC1hbGlnbjpsZWZ0fS5ob3QtZGlzcGxheS1saWNlbnNlLWluZm8gYXtmb250LXNpemU6dmFyKC0taHQtbGljZW5zZS1mb250LXNpemUpO2NvbG9yOnZhcigtLWh0LWxpbmstY29sb3IpfS5ob3QtZGlzcGxheS1saWNlbnNlLWluZm8gYTpob3Zlcntj''@;'; put 'put ''b2xvcjp2YXIoLS1odC1saW5rLWhvdmVyLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odEF1dG9jb21wbGV0ZUFycm93e2N1cnNvcjpkZWZhdWx0O3dpZHRoOnZhcigtLWh0LWljb24tc2l6ZSk7aGVpZ2h0OnZhcigtLWh0LWljb24tc2l6ZSk7ZmxvYXQ6cmlnaHQ7dG9wOmNhbGMoKHZhcigtLWh0''@;'; put 'put ''LWxpbmUtaGVpZ2h0KSAtIHZhcigtLWh0LWljb24tc2l6ZSkpLzIpO21hcmdpbi1pbmxpbmUtc3RhcnQ6Y2FsYyh2YXIoLS1odC1nYXAtc2l6ZSkqMik7bWFyZ2luLWlubGluZS1lbmQ6MXB4O2ZvbnQtc2l6ZTowO3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgLmh0QXV0b2NvbXBs''@;'; put 'put ''ZXRlQXJyb3c6YWZ0ZXJ7Y29udGVudDoiIjtvcGFjaXR5Oi42O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowfVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0QXV0b2NvbXBsZXRlQXJyb3d7ZmxvYXQ6bGVmdH0uaGFuZHNvbnRhYmxlIC5odENoZWNrYm94UmVu''@;'; put 'put ''ZGVyZXJJbnB1dHt3aWR0aDp2YXIoLS1odC1jaGVja2JveC1zaXplKTtoZWlnaHQ6dmFyKC0taHQtY2hlY2tib3gtc2l6ZSk7dmVydGljYWwtYWxpZ246bWlkZGxlO2N1cnNvcjpwb2ludGVyO21hcmdpbjowO291dGxpbmU6bm9uZTttYXJnaW4tdG9wOi0ycHg7ZGlzcGxheTppbmxpbmUtYmxv''@;'; put 'put ''Y2s7cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXQ6Zmlyc3QtY2hpbGR7bWFyZ2luLWlubGluZS1lbmQ6dmFyKC0taHQtZ2FwLXNpemUpfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0Omxhc3QtY2hpbGR7bWFyZ2lu''@;'; put 'put ''LWlubGluZS1zdGFydDp2YXIoLS1odC1nYXAtc2l6ZSl9LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXQ6YmVmb3Jle2NvbnRlbnQ6IiI7d2lkdGg6dmFyKC0taHQtY2hlY2tib3gtc2l6ZSk7aGVpZ2h0OnZhcigtLWh0LWNoZWNrYm94LXNpemUpO2JvcmRlci1yYWRpdXM6''@;'; put 'put ''dmFyKC0taHQtY2hlY2tib3gtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1odC1jaGVja2JveC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtY2hlY2tib3gtYmFja2dyb3VuZC1jb2xvcik7Ym94LXNpemluZzpib3JkZXItYm94O3BvaW50ZXIt''@;'; put 'put ''ZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjphbGwgdmFyKC0taHQtdGFibGUtdHJhbnNpdGlvbillYXNlLWluLW91dDtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXQ6YWZ0ZXJ7Y29u''@;'; put 'put ''dGVudDoiIjtjb2xvcjp2YXIoLS1odC1jaGVja2JveC1pY29uLWNvbG9yKTtwb2ludGVyLWV2ZW50czpub25lO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3dpZHRoOnZhcigtLWh0LWNoZWNrYm94LXNpemUpIWltcG9ydGFudDtoZWlnaHQ6dmFyKC0taHQt''@;'; put 'put ''Y2hlY2tib3gtc2l6ZSkhaW1wb3J0YW50fS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0OmNoZWNrZWQ6YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1odC1jaGVja2JveC1jaGVja2VkLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1jaGVja2Jv''@;'; put 'put ''eC1jaGVja2VkLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0OmNoZWNrZWQ6YWZ0ZXJ7Y29sb3I6dmFyKC0taHQtY2hlY2tib3gtY2hlY2tlZC1pY29uLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odENoZWNrYm94UmVuZGVyZXJJbnB1dDpj''@;'; put 'put ''aGVja2VkOmRpc2FibGVkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0taHQtY2hlY2tib3gtY2hlY2tlZC1kaXNhYmxlZC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtY2hlY2tib3gtY2hlY2tlZC1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKX0uaGFuZHNvbnRh''@;'; put 'put ''YmxlIC5odENoZWNrYm94UmVuZGVyZXJJbnB1dDpjaGVja2VkOmRpc2FibGVkOmFmdGVye2NvbG9yOnZhcigtLWh0LWNoZWNrYm94LWNoZWNrZWQtZGlzYWJsZWQtaWNvbi1jb2xvcil9LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXQ6Y2hlY2tlZDpmb2N1czpiZWZvcmV7''@;'; put 'put ''Ym9yZGVyLWNvbG9yOnZhcigtLWh0LWNoZWNrYm94LWNoZWNrZWQtZm9jdXMtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWNoZWNrYm94LWNoZWNrZWQtZm9jdXMtYmFja2dyb3VuZC1jb2xvcil9LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXQ6''@;'; put 'put ''Y2hlY2tlZDpmb2N1czphZnRlcntjb2xvcjp2YXIoLS1odC1jaGVja2JveC1jaGVja2VkLWZvY3VzLWljb24tY29sb3IpfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0OmZvY3VzOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0taHQtY2hlY2tib3gtZm9jdXMtYm9yZGVy''@;'; put 'put ''LWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWNoZWNrYm94LWZvY3VzLWJhY2tncm91bmQtY29sb3IpO291dGxpbmU6MXB4IHNvbGlkIHZhcigtLWh0LWNoZWNrYm94LWZvY3VzLXJpbmctY29sb3IpfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0OmZvY3Vz''@;'; put 'put ''OmFmdGVye2NvbG9yOnZhcigtLWh0LWNoZWNrYm94LWZvY3VzLWljb24tY29sb3IpfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0OmRpc2FibGVke2N1cnNvcjppbml0aWFsfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0OmRpc2FibGVkOmJlZm9y''@;'; put 'put ''ZXtib3JkZXItY29sb3I6dmFyKC0taHQtY2hlY2tib3gtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWNoZWNrYm94LWRpc2FibGVkLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0OmRpc2FibGVk''@;'; put 'put ''OmFmdGVye2NvbG9yOnZhcigtLWh0LWNoZWNrYm94LWRpc2FibGVkLWljb24tY29sb3IpfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0OmluZGV0ZXJtaW5hdGU6YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1odC1jaGVja2JveC1pbmRldGVybWluYXRlLWJvcmRlci1j''@;'; put 'put ''b2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1jaGVja2JveC1pbmRldGVybWluYXRlLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0OmluZGV0ZXJtaW5hdGU6YWZ0ZXJ7Y29sb3I6dmFyKC0taHQtY2hlY2tib3gtaW5kZXRlcm1p''@;'; put 'put ''bmF0ZS1pY29uLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odENoZWNrYm94UmVuZGVyZXJJbnB1dDppbmRldGVybWluYXRlOmRpc2FibGVkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0taHQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1kaXNhYmxlZC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0taHQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odENoZWNrYm94UmVuZGVyZXJJbnB1dDppbmRldGVybWluYXRlOmRpc2FibGVkOmFmdGVye2NvbG9yOnZhcigtLWh0LWNoZWNrYm94LWluZGV0ZXJt''@;'; put 'put ''aW5hdGUtZGlzYWJsZWQtaWNvbi1jb2xvcil9LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXQ6aW5kZXRlcm1pbmF0ZTpmb2N1czpiZWZvcmV7Ym9yZGVyLWNvbG9yOnZhcigtLWh0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtZm9jdXMtYm9yZGVyLWNvbG9yKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWh0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtZm9jdXMtYmFja2dyb3VuZC1jb2xvcil9LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXQ6aW5kZXRlcm1pbmF0ZTpmb2N1czphZnRlcntjb2xvcjp2YXIoLS1odC1jaGVja2JveC1pbmRldGVybWlu''@;'; put 'put ''YXRlLWZvY3VzLWljb24tY29sb3IpfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0Lm5vVmFsdWV7b3BhY2l0eTouNX0uaGFuZHNvbnRhYmxlIC5odENoZWNrYm94UmVuZGVyZXJMYWJlbHtmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0O2N1cnNvcjpw''@;'; put 'put ''b2ludGVyO2NvbG9yOmluaGVyaXQ7bWFyZ2luOjA7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVyTGFiZWwuZnVsbFdpZHRoe3dpZHRoOjEwMCV9LmhhbmRzb250YWJsZSAuaHRQbGFjZWhvbGRlcntjb2xvcjp2''@;'; put 'put ''YXIoLS1odC1wbGFjZWhvbGRlci1jb2xvcil9LmhhbmRzb250YWJsZSAuaHREaW1tZWR7Y29sb3I6dmFyKC0taHQtcmVhZC1vbmx5LWNvbG9yKSFpbXBvcnRhbnQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1jZWxsLXJlYWQtb25seS1iYWNrZ3JvdW5kLWNvbG9yKSFpbXBvcnRhbnR9Lmhh''@;'; put 'put ''bmRzb250YWJsZSAuaHRMZWZ0e3RleHQtYWxpZ246bGVmdH0uaGFuZHNvbnRhYmxlIC5odENlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0uaGFuZHNvbnRhYmxlIC5odFJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LmhhbmRzb250YWJsZSAuaHRKdXN0aWZ5e3RleHQtYWxpZ246anVzdGlmeX0uaGFu''@;'; put 'put ''ZHNvbnRhYmxlIC5odFRvcHt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmhhbmRzb250YWJsZSAuaHRNaWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfS5oYW5kc29udGFibGUgLmh0Qm90dG9te3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0uaGFuZHNvbnRhYmxlIC5odEludmFsaWR7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1odC1jZWxsLWVycm9yLWJhY2tncm91bmQtY29sb3IpIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIC5odE5vV3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LmhhbmRzb250YWJsZSAuaHRTZWFyY2hSZXN1bHR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1jZWxsLXN1Y2Nlc3Mt''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcikhaW1wb3J0YW50fS5oYW5kc29udGFibGUgLmh0LW11bHRpLXNlbGVjdC1yZW5kZXJlcntwYWRkaW5nOnZhcigtLWh0LWNlbGwtdmVydGljYWwtcGFkZGluZyl2YXIoLS1odC1jZWxsLWhvcml6b250YWwtcGFkZGluZyk7b3ZlcmZsb3c6aGlkZGVufS5oYW5kc29u''@;'; put 'put ''dGFibGUgLmh0LW11bHRpLXNlbGVjdC1jaGlwcy1jb250YWluZXJ7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDp2YXIoLS1odC1nYXAtc2l6ZSk7ZmxleC13cmFwOm5vd3JhcDttYXgtd2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVufS5oYW5kc29udGFibGUgLmh0LW11bHRp''@;'; put 'put ''LXNlbGVjdC1jaGlwe2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6dmFyKC0taHQtZ2FwLXNpemUpO3BhZGRpbmc6dmFyKC0taHQtY2hpcC12ZXJ0aWNhbC1wYWRkaW5nKWNhbGMoKHZhcigtLWh0LWxpbmUtaGVpZ2h0KSAtIHZhcigtLWh0LWljb24tc2l6ZSkpLzIpdmFyKC0taHQtY2hpcC12ZXJ0''@;'; put 'put ''aWNhbC1wYWRkaW5nKXZhcigtLWh0LWNoaXAtaG9yaXpvbnRhbC1wYWRkaW5nKTtib3JkZXItcmFkaXVzOnZhcigtLWh0LWNoaXAtYm9yZGVyLXJhZGl1cyk7YmFja2dyb3VuZDp2YXIoLS1odC1jaGlwLWJhY2tncm91bmQpO3doaXRlLXNwYWNlOm5vd3JhcDtib3gtc2l6aW5nOmJvcmRlci1i''@;'; put 'put ''b3g7ZmxleC1zaHJpbms6MDttYXgtd2lkdGg6MTAwcHg7ZGlzcGxheTppbmxpbmUtZmxleH0uaGFuZHNvbnRhYmxlIC5odC1tdWx0aS1zZWxlY3QtY2hpcC1sYWJlbHt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2NvbG9yOnZhcigtLWh0LWZvcmVncm91bmQtY29sb3IpO2ZvbnQtc3R5bGU6bm9y''@;'; put 'put ''bWFsO2ZvbnQtd2VpZ2h0OnZhcigtLWh0LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1odC1saW5lLWhlaWdodCw0MHB4KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1odC1sZXR0ZXItc3BhY2luZywwKTtwYWRkaW5nOjAgdmFyKC0taHQtY2hpcC1nYXApO292ZXJmbG93OmhpZGRlbn0u''@;'; put 'put ''aGFuZHNvbnRhYmxlIC5odC1tdWx0aS1zZWxlY3QtY2hpcC1yZW1vdmV7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6dmFyKC0taHQtaWNvbi1idXR0b24taWNvbi1jb2xvcik7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpj''@;'; put 'put ''b250YWluO2ZsZXgtc2hyaW5rOjA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowO2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDp2YXIoLS1odC1pY29uLXNpemUpIWltcG9ydGFudDtoZWlnaHQ6dmFyKC0taHQtaWNvbi1zaXpl''@;'; put 'put ''KSFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAuaHQtbXVsdGktc2VsZWN0LWNoaXAtcmVtb3ZlOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowfS5oYW5kc29udGFibGUgLmh0LW11bHRpLXNlbGVjdC1jaGlwLXJlbW92ZTpob3Zl''@;'; put 'put ''cntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWljb24tYnV0dG9uLWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgLmh0LW11bHRpLXNlbGVjdC1vdmVyZmxvd3twYWRkaW5nOnZhcigtLWh0LWNoaXAtdmVydGljYWwtcGFkZGluZyl2YXIoLS1odC1jaGlwLWhvcml6b250''@;'; put 'put ''YWwtcGFkZGluZyk7YmFja2dyb3VuZDp2YXIoLS1odC1jaGlwLWJhY2tncm91bmQpO2JvcmRlci1yYWRpdXM6dmFyKC0taHQtY2hpcC1ib3JkZXItcmFkaXVzKTtjb2xvcjp2YXIoLS1odC1mb3JlZ3JvdW5kLWNvbG9yKTt3aGl0ZS1zcGFjZTpub3dyYXA7ZmxleC1zaHJpbms6MDtqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4fS5oYW5kc29udGFibGVJbnB1dEhvbGRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9LmhhbmRzb250YWJsZUlucHV0SG9sZGVyIC5oYW5kc29udGFibGVJbnB1dHtwYWRkaW5nOmNh''@;'; put 'put ''bGModmFyKC0taHQtY2VsbC12ZXJ0aWNhbC1wYWRkaW5nLDRweCkgKyAxcHgpY2FsYyh2YXIoLS1odC1jZWxsLWhvcml6b250YWwtcGFkZGluZyw4cHgpICsgMXB4KTtjb2xvcjp2YXIoLS1odC1jZWxsLWVkaXRvci1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0''@;'; put 'put ''LWNlbGwtZWRpdG9yLWJhY2tncm91bmQtY29sb3IsI2ZmZik7Ym94LXNoYWRvdzppbnNldCAwIDAgMCB2YXIoLS1odC1jZWxsLWVkaXRvci1ib3JkZXItd2lkdGgsMnB4KXZhcigtLWh0LWNlbGwtZWRpdG9yLWJvcmRlci1jb2xvciwjMWE0MmU4KSwwIDAgdmFyKC0taHQtY2VsbC1lZGl0b3It''@;'; put 'put ''c2hhZG93LWJsdXItcmFkaXVzLDApMCB2YXIoLS1odC1jZWxsLWVkaXRvci1zaGFkb3ctY29sb3IsdHJhbnNwYXJlbnQpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjA7b3V0bGluZS13aWR0aDowO21hcmdpbjowO2Rpc3BsYXk6YmxvY2s7Zm9udC1m''@;'; put 'put ''YW1pbHk6aW5oZXJpdCFpbXBvcnRhbnQ7Zm9udC1zaXplOmluaGVyaXQhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OmluaGVyaXQhaW1wb3J0YW50Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlSW5wdXRIb2xkZXIgLmhhbmRzb250YWJsZUlucHV0OmZvY3Vz''@;'; put 'put ''e291dGxpbmU6bm9uZX0uaHRTZWxlY3RFZGl0b3J7cG9zaXRpb246YWJzb2x1dGV9Lmh0U2VsZWN0RWRpdG9yIHNlbGVjdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3BhZGRpbmc6Y2FsYyh2YXIoLS1odC1jZWxsLXZlcnRpY2FsLXBhZGRpbmcsNHB4KSArIDFweCljYWxjKHZhcigtLWh0LWNl''@;'; put 'put ''bGwtaG9yaXpvbnRhbC1wYWRkaW5nLDhweCkgKyAxcHgpO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2NvbG9yOnZhcigtLWh0LWNlbGwtZWRpdG9yLWZvcmVncm91bmQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtY2VsbC1lZGl0b3ItYmFja2dy''@;'; put 'put ''b3VuZC1jb2xvciwjZmZmKTtib3gtc2hhZG93Omluc2V0IDAgMCAwIHZhcigtLWh0LWNlbGwtZWRpdG9yLWJvcmRlci13aWR0aCwycHgpdmFyKC0taHQtY2VsbC1lZGl0b3ItYm9yZGVyLWNvbG9yLCMxYTQyZTgpLDAgMCB2YXIoLS1odC1jZWxsLWVkaXRvci1zaGFkb3ctYmx1ci1yYWRpdXMs''@;'; put 'put ''MCkwIHZhcigtLWh0LWNlbGwtZWRpdG9yLXNoYWRvdy1jb2xvcix0cmFuc3BhcmVudCk7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6MDttYXJnaW46MDtwYWRkaW5nLWlubGluZS1lbmQ6MjZweDtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO292ZXJm''@;'; put 'put ''bG93OmhpZGRlbjtmb250LWZhbWlseTppbmhlcml0IWltcG9ydGFudDtmb250LXNpemU6aW5oZXJpdCFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6aW5oZXJpdCFpbXBvcnRhbnQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmUhaW1wb3J0YW50fS5odFNlbGVjdEVkaXRvciBzZWxlY3Q6Zm9jdXN7b3V0''@;'; put 'put ''bGluZTpub25lfS5odFNlbGVjdEVkaXRvciAuaHRBdXRvY29tcGxldGVBcnJvd3t6LWluZGV4OjE7cG9pbnRlci1ldmVudHM6bm9uZTttYXJnaW4taW5saW5lLWVuZDo0cHg7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0uaGFuZHNvbnRhYmxlLmxpc3Rib3h7Ym94LXNoYWRv''@;'; put 'put ''dzp2YXIoLS1odC1tZW51LXNoYWRvdy14LDApdmFyKC0taHQtbWVudS1zaGFkb3cteSwwKXZhcigtLWh0LW1lbnUtc2hhZG93LWJsdXIsOHB4KWNvbG9yLW1peChpbiBzcmdiLHZhcigtLWh0LW1lbnUtc2hhZG93LWNvbG9yLCMwMDApdmFyKC0taHQtbWVudS1zaGFkb3ctb3BhY2l0eSwxMDAl''@;'; put 'put ''KSx0cmFuc3BhcmVudCk7Ym9yZGVyOnZhcigtLWh0LW1lbnUtYm9yZGVyLXdpZHRoLDFweClzb2xpZCB2YXIoLS1odC1tZW51LWJvcmRlci1jb2xvciwjZTVlNWU5KTttYXJnaW46MH0uaGFuZHNvbnRhYmxlLmxpc3Rib3ggLmh0X21hc3RlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWJh''@;'; put 'put ''Y2tncm91bmQtY29sb3IpO292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlLmxpc3Rib3ggLnd0SG9sZGVye292ZXJmbG93OmF1dG87Ym9yZGVyLXJhZGl1czowIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlLmxpc3Rib3ggLnd0SGlkZXIsLmhhbmRzb250YWJsZS5saXN0Ym94IC5odENvcmV7''@;'; put 'put ''Ym9yZGVyLXJhZGl1czowIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGFibGV7b3ZlcmZsb3c6aGlkZGVufS5oYW5kc29udGFibGUubGlzdGJveCB0YWJsZSB0aCwuaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGFibGUgdHI6Zmlyc3QtY2hpbGQgdGgsLmhhbmRzb250YWJsZS5saXN0''@;'; put 'put ''Ym94IHRhYmxlIHRyOmxhc3QtY2hpbGQgdGgsLmhhbmRzb250YWJsZS5saXN0Ym94IHRhYmxlIHRyOmZpcnN0LWNoaWxkIHRkLC5oYW5kc29udGFibGUubGlzdGJveCB0YWJsZSB0ZHtib3JkZXItY29sb3I6IzAwMDAhaW1wb3J0YW50fS5oYW5kc29udGFibGUubGlzdGJveCB0YWJsZSB0aCwu''@;'; put 'put ''aGFuZHNvbnRhYmxlLmxpc3Rib3ggdGFibGUgdGR7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7Ym9yZGVyLXJhZGl1czowIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGFibGUgLnd0Qm9yZGVye3Zpc2liaWxpdHk6aGlkZGVufS5oYW5kc29udGFi''@;'; put 'put ''bGUubGlzdGJveCB0YWJsZSBzdHJvbmd7Y29sb3I6aW5oZXJpdDtmb250LXdlaWdodDo3MDB9LmhhbmRzb250YWJsZS5saXN0Ym94IHRhYmxlIHRyIHRkOmhvdmVyIHRke2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0taHQtbWVudS1pdGVtLWhvdmVy''@;'; put 'put ''LWNvbG9yKXZhcigtLWh0LW1lbnUtaXRlbS1ob3Zlci1jb2xvci1vcGFjaXR5LDEwMCUpLHRyYW5zcGFyZW50KSFpbXBvcnRhbnQ7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGFibGUgdGR7dHJhbnNpdGlvbjp2YXIoLS1odC10YWJsZS10cmFuc2l0''@;'; put 'put ''aW9uKWJhY2tncm91bmQgZWFzZS1pbi1vdXR9LmhhbmRzb250YWJsZS5saXN0Ym94IHRhYmxlIHRkOmhvdmVye2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0taHQtbWVudS1pdGVtLWhvdmVyLWNvbG9yKXZhcigtLWh0LW1lbnUtaXRlbS1o''@;'; put 'put ''b3Zlci1jb2xvci1vcGFjaXR5LDEwMCUpLHRyYW5zcGFyZW50KSFpbXBvcnRhbnR9LmhhbmRzb250YWJsZS5saXN0Ym94IHRhYmxlIHRkLmN1cnJlbnQ6bm90KFthcmlhLWV4cGFuZGVkPXRydWVdKXtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCB2YXIoLS1odC1hY2NlbnQtY29sb3IpfS5o''@;'; put 'put ''YW5kc29udGFibGUubGlzdGJveCB0YWJsZSB0ZC5odERpbW1lZHtjdXJzb3I6ZGVmYXVsdDtmb250LXN0eWxlOmluaGVyaXQ7Y29sb3I6aW5oZXJpdCFpbXBvcnRhbnR9LmhhbmRzb250YWJsZS5saXN0Ym94IHRhYmxlIHRkLmh0RGltbWVkOm5vdCguaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGFi''@;'; put 'put ''bGUgdGQ6aG92ZXIpe2JhY2tncm91bmQtY29sb3I6aW5oZXJpdCFpbXBvcnRhbnR9LmhhbmRzb250YWJsZS5saXN0Ym94IHRhYmxlIHRoZWFkIHRoe3RleHQtYWxpZ246bGVmdDtoZWlnaHQ6YXV0byFpbXBvcnRhbnR9LmhhbmRzb250YWJsZS5saXN0Ym94IHRhYmxlIHRoZWFkIHRoIC5yZWxh''@;'; put 'put ''dGl2ZXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLWh0LWNlbGwtdmVydGljYWwtcGFkZGluZykgKyB2YXIoLS1odC1nYXAtc2l6ZSkpO3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0taHQtY2VsbC12ZXJ0aWNhbC1wYWRkaW5nKSArIHZhcigtLWh0LWdhcC1zaXplKSl9LmhhbmRzb250YWJsZS5s''@;'; put 'put ''aXN0Ym94IC5odF9jbG9uZV90b3AgLnd0SGlkZXJ7b3ZlcmZsb3c6aGlkZGVufS5oYW5kc29udGFibGUubGlzdGJveCAuaHRfY2xvbmVfdG9wIHRhYmxle2JvcmRlci1yYWRpdXM6MH0uaGFuZHNvbnRhYmxlLmxpc3Rib3ggLmh0Qm9yZGVycyBkaXZ7YmFja2dyb3VuZDowIDAhaW1wb3J0YW50''@;'; put 'put ''fS5oYW5kc29udGFibGUuYXV0b2NvbXBsZXRlRWRpdG9yIHRyLmh0X19yb3dfZXZlbiB0aCwuaGFuZHNvbnRhYmxlLmF1dG9jb21wbGV0ZUVkaXRvciB0ci5odF9fcm93X2V2ZW4gdGQsLmhhbmRzb250YWJsZS5hdXRvY29tcGxldGVFZGl0b3IgdHIuaHRfX3Jvd19vZGQgdGgsLmhhbmRzb250''@;'; put 'put ''YWJsZS5hdXRvY29tcGxldGVFZGl0b3IgdHIuaHRfX3Jvd19vZGQgdGR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1iYWNrZ3JvdW5kLWNvbG9yLCNmZmYpfVtkaXI9cnRsXS5oYW5kc29udGFibGUubGlzdGJveCB0YWJsZSB0aGVhZCB0aHt0ZXh0LWFsaWduOnJpZ2h0fS5oYW5kc29udGFi''@;'; put 'put ''bGVFZGl0b3J7cG9zaXRpb246YWJzb2x1dGV9LmhhbmRzb250YWJsZUVkaXRvciAuaHQtbXVsdGktc2VsZWN0LWVkaXRvcntib3gtc2hhZG93OnZhcigtLWh0LW1lbnUtc2hhZG93LXgsMCl2YXIoLS1odC1tZW51LXNoYWRvdy15LDApdmFyKC0taHQtbWVudS1zaGFkb3ctYmx1ciw4cHgpY29s''@;'; put 'put ''b3ItbWl4KGluIHNyZ2IsdmFyKC0taHQtbWVudS1zaGFkb3ctY29sb3IsIzAwMCl2YXIoLS1odC1tZW51LXNoYWRvdy1vcGFjaXR5LDEwMCUpLHRyYW5zcGFyZW50KTtzY3JvbGxiYXItd2lkdGg6YXV0bztzY3JvbGxiYXItY29sb3I6dmFyKC0taHQtc2Nyb2xsYmFyLXRodW1iLWNvbG9yKXZh''@;'; put 'put ''cigtLWh0LXNjcm9sbGJhci10cmFjay1jb2xvcik7Ym9yZGVyLXJhZGl1czowIDAgdmFyKC0taHQtbWVudS1ib3JkZXItcmFkaXVzKXZhcigtLWh0LW1lbnUtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyOnZhcigtLWh0LW1lbnUtYm9yZGVyLXdpZHRoKXNvbGlkIHZhcigtLWh0LW1lbnUtYm9yZGVy''@;'; put 'put ''LWNvbG9yKTtiYWNrZ3JvdW5kOnZhcigtLWh0LWJhY2tncm91bmQtY29sb3IpO3dpZHRoOm1heC1jb250ZW50O21pbi13aWR0aDoxMjBweDtwYWRkaW5nOnZhcigtLWh0LW1lbnUtdmVydGljYWwtcGFkZGluZyl2YXIoLS1odC1tZW51LWhvcml6b250YWwtcGFkZGluZyk7b3ZlcmZsb3cteTph''@;'; put 'put ''dXRvfS5oYW5kc29udGFibGVFZGl0b3IgLmh0LW11bHRpLXNlbGVjdC1lZGl0b3IgLmh0LW11bHRpLXNlbGVjdC1lZGl0b3Itc2VhcmNoLWlucHV0LXdyYXBwZXJ7cGFkZGluZzp2YXIoLS1odC1tZW51LWl0ZW0tdmVydGljYWwtcGFkZGluZyl2YXIoLS1odC1tZW51LWl0ZW0taG9yaXpvbnRh''@;'; put 'put ''bC1wYWRkaW5nKTthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOnZhcigtLWh0LWdhcC1zaXplKTthbGlnbi1zZWxmOnN0cmV0Y2g7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGVFZGl0b3IgLmh0LW11bHRpLXNlbGVjdC1lZGl0b3IgLmh0LW11bHRpLXNlbGVjdC1l''@;'; put 'put ''ZGl0b3Itc2VhcmNoLWljb257bGVmdDpjYWxjKHZhcigtLWh0LW1lbnUtaXRlbS1ob3Jpem9udGFsLXBhZGRpbmcpICsgMTBweCk7b3BhY2l0eTouNTtwb2ludGVyLWV2ZW50czpub25lO3otaW5kZXg6MTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBl''@;'; put 'put ''YXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfS5oYW5kc29udGFibGVFZGl0b3IgLmh0LW11bHRpLXNlbGVjdC1lZGl0b3IgaW5wdXQuaHQtbXVsdGktc2Vs''@;'; put 'put ''ZWN0LWVkaXRvci1zZWFyY2gtaW5wdXR7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6dmFyKC0taHQtaW5wdXQtYm9yZGVyLXJhZGl1cyk7d2lkdGg6MTAwJTtjb2xvcjp2YXIoLS1odC1pbnB1dC1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0''@;'; put 'put ''LWlucHV0LWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjoxcHggc29saWQgdmFyKC0taHQtaW5wdXQtYm9yZGVyLWNvbG9yKTt0cmFuc2l0aW9uOnZhcigtLWh0LXRhYmxlLXRyYW5zaXRpb24pYWxsIGVhc2UtaW4tb3V0O2xpbmUtaGVpZ2h0OnZhcigtLWh0LWxpbmUtaGVpZ2h0KTtmb250LXNp''@;'; put 'put ''emU6dmFyKC0taHQtZm9udC1zaXplKTtwYWRkaW5nOnZhcigtLWh0LWlucHV0LXZlcnRpY2FsLXBhZGRpbmcpdmFyKC0taHQtbWVudS1pdGVtLWhvcml6b250YWwtcGFkZGluZyl2YXIoLS1odC1pbnB1dC12ZXJ0aWNhbC1wYWRkaW5nKTMycHh9LmhhbmRzb250YWJsZUVkaXRvciAuaHQtbXVs''@;'; put 'put ''dGktc2VsZWN0LWVkaXRvciBpbnB1dC5odC1tdWx0aS1zZWxlY3QtZWRpdG9yLXNlYXJjaC1pbnB1dDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0taHQtaW5wdXQtaG92ZXItYm9yZGVyLWNvbG9yKTtjb2xvcjp2YXIoLS1odC1pbnB1dC1ob3Zlci1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWh0LWlucHV0LWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFibGVFZGl0b3IgLmh0LW11bHRpLXNlbGVjdC1lZGl0b3IgaW5wdXQuaHQtbXVsdGktc2VsZWN0LWVkaXRvci1zZWFyY2gtaW5wdXQ6ZGlzYWJsZWR7Ym9yZGVyLWNvbG9yOnZhcigtLWh0''@;'; put 'put ''LWlucHV0LWRpc2FibGVkLWJvcmRlci1jb2xvcik7Y29sb3I6dmFyKC0taHQtaW5wdXQtZGlzYWJsZWQtZm9yZWdyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1pbnB1dC1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKX0uaGFuZHNvbnRhYmxlRWRpdG9yIC5odC1tdWx0''@;'; put 'put ''aS1zZWxlY3QtZWRpdG9yIGlucHV0Lmh0LW11bHRpLXNlbGVjdC1lZGl0b3Itc2VhcmNoLWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjp2YXIoLS1odC1pbnB1dC1mb2N1cy1ib3JkZXItY29sb3IpO2NvbG9yOnZhcigtLWh0LWlucHV0LWZvY3VzLWZvcmVncm91bmQtY29sb3IpO2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6dmFyKC0taHQtaW5wdXQtZm9jdXMtYmFja2dyb3VuZC1jb2xvcik7b3V0bGluZS1vZmZzZXQ6MDtib3gtc2hhZG93Om5vbmU7b3V0bGluZTpub25lfS5oYW5kc29udGFibGVFZGl0b3IgLmh0LW11bHRpLXNlbGVjdC1lZGl0b3IgaW5wdXQuaHQtbXVsdGktc2VsZWN0LWVkaXRv''@;'; put 'put ''ci1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWh0LWZvcmVncm91bmQtY29sb3IpO29wYWNpdHk6LjZ9LmhhbmRzb250YWJsZUVkaXRvciAuaHQtbXVsdGktc2VsZWN0LWVkaXRvciAuaHQtbXVsdGktc2VsZWN0LWVkaXRvci1zZXBhcmF0b3J7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1odC1tZW51LWJvcmRlci1jb2xvcik7d2lkdGg6MTAwJTtoZWlnaHQ6MXB4O21hcmdpbjp2YXIoLS1odC1tZW51LXZlcnRpY2FsLXBhZGRpbmcpMCB2YXIoLS1odC1tZW51LXZlcnRpY2FsLXBhZGRpbmcpMDtwYWRkaW5nOjB9LmhhbmRzb250YWJsZUVkaXRvciAuaHQtbXVsdGkt''@;'; put 'put ''c2VsZWN0LWVkaXRvciB1bHt3aWR0aDoxMDAlO3BhZGRpbmc6dmFyKC0taHQtZ2FwLXNpemUpdmFyKC0taHQtbWVudS1ob3Jpem9udGFsLXBhZGRpbmcpO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O21hcmdpbjowO2xpc3Qtc3R5bGU6bm9uZTtkaXNwbGF5''@;'; put 'put ''OmZsZXh9LmhhbmRzb250YWJsZUVkaXRvciAuaHQtbXVsdGktc2VsZWN0LWVkaXRvciB1bCBsaXtiYWNrZ3JvdW5kOnZhcigtLWh0LWJhY2tncm91bmQtY29sb3IpO3BhZGRpbmc6dmFyKC0taHQtbWVudS1pdGVtLXZlcnRpY2FsLXBhZGRpbmcpdmFyKC0taHQtbWVudS1pdGVtLWhvcml6b250''@;'; put 'put ''YWwtcGFkZGluZyk7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7YWxpZ24tc2VsZjpzdHJldGNoO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9LmhhbmRzb250YWJsZUVkaXRvciAuaHQtbXVsdGktc2VsZWN0LWVkaXRvciB1''@;'; put 'put ''bCBsaSAqe2N1cnNvcjpwb2ludGVyfS5oYW5kc29udGFibGVFZGl0b3IgLmh0LW11bHRpLXNlbGVjdC1lZGl0b3IgdWwgbGkuaHQtbXVsdGktc2VsZWN0LWVkaXRvci1pdGVtLXNlbGVjdGVke2JhY2tncm91bmQ6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0taHQtbWVudS1pdGVtLWFjdGl2ZS1j''@;'; put 'put ''b2xvcil2YXIoLS1odC1tZW51LWl0ZW0tYWN0aXZlLWNvbG9yLW9wYWNpdHksMTAwJSksdHJhbnNwYXJlbnQpfS5oYW5kc29udGFibGVFZGl0b3IgLmh0LW11bHRpLXNlbGVjdC1lZGl0b3IgdWwgbGkgZGl2e2ZsZXg6MSAwIDA7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0uaGFu''@;'; put 'put ''ZHNvbnRhYmxlRWRpdG9yIC5odC1tdWx0aS1zZWxlY3QtZWRpdG9yIHVsIGxpIGRpdiBpbnB1dHstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7d2lkdGg6dmFyKC0taHQtY2hlY2tib3gtc2l6ZSk7aGVpZ2h0OnZhcigtLWh0LWNoZWNrYm94LXNpemUpO21hcmdpbjow''@;'; put 'put ''O3BhZGRpbmc6MDtkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZUVkaXRvciAuaHQtbXVsdGktc2VsZWN0LWVkaXRvciB1bCBsaSBkaXYgaW5wdXQ6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MH0u''@;'; put 'put ''aGFuZHNvbnRhYmxlRWRpdG9yIC5odC1tdWx0aS1zZWxlY3QtZWRpdG9yIHVsIGxpIGRpdiBpbnB1dDpiZWZvcmV7Y29udGVudDoiIjtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6dmFyKC0taHQtY2hlY2tib3gtc2l6ZSk7aGVpZ2h0OnZhcigtLWh0LWNoZWNrYm94LXNpemUpO2JvcmRl''@;'; put 'put ''ci1yYWRpdXM6dmFyKC0taHQtY2hlY2tib3gtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1odC1jaGVja2JveC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQ6dmFyKC0taHQtY2hlY2tib3gtYmFja2dyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7YmFj''@;'; put 'put ''a2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowfS5oYW5kc29udGFibGVFZGl0b3IgLmh0LW11bHRpLXNlbGVjdC1lZGl0b3IgdWwgbGkgZGl2IGlucHV0OmNoZWNrZWQ6YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1o''@;'; put 'put ''dC1jaGVja2JveC1jaGVja2VkLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZDp2YXIoLS1odC1jaGVja2JveC1jaGVja2VkLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFibGVFZGl0b3IgLmh0LW11bHRpLXNlbGVjdC1lZGl0b3IgdWwgbGkgZGl2IGlucHV0OmNoZWNrZWQ6YWZ0ZXJ7Y29s''@;'; put 'put ''b3I6dmFyKC0taHQtY2hlY2tib3gtY2hlY2tlZC1pY29uLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn0uaGFuZHNvbnRhYmxlRWRpdG9yIC5odC1tdWx0aS1zZWxlY3QtZWRpdG9yIHVsIGxpIGRpdiBpbnB1dDpmb2N1c3tvdXRsaW5lOm5vbmV9LmhhbmRzb250YWJsZUVk''@;'; put 'put ''aXRvciAuaHQtbXVsdGktc2VsZWN0LWVkaXRvciB1bCBsaSBkaXYgbGFiZWx7Y29sb3I6dmFyKC0taHQtZm9yZWdyb3VuZC1jb2xvcik7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztmb250LXNpemU6dmFyKC0taHQtZm9udC1zaXplKTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo0MDA7''@;'; put 'put ''bGluZS1oZWlnaHQ6dmFyKC0taHQtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWh0LWxldHRlci1zcGFjaW5nKTt3aWR0aDoxMDAlO3BhZGRpbmc6MCAwIDAgY2FsYyh2YXIoLS1odC1nYXAtc2l6ZSkqMik7b3ZlcmZsb3c6aGlkZGVufS5oYW5kc29udGFibGVFZGl0b3IgLmh0''@;'; put 'put ''LW11bHRpLXNlbGVjdC1lZGl0b3IgdWwgbGk6aG92ZXJ7YmFja2dyb3VuZDpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1odC1tZW51LWl0ZW0taG92ZXItY29sb3IpdmFyKC0taHQtbWVudS1pdGVtLWhvdmVyLWNvbG9yLW9wYWNpdHksMTAwJSksdHJhbnNwYXJlbnQpfS5oYW5kc29udGFibGVF''@;'; put 'put ''ZGl0b3IgLmh0LW11bHRpLXNlbGVjdC1lZGl0b3IgdWwgbGk6aGFzKGlucHV0OmZvY3VzKXtiYWNrZ3JvdW5kOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWh0LW1lbnUtaXRlbS1ob3Zlci1jb2xvcil2YXIoLS1odC1tZW51LWl0ZW0taG92ZXItY29sb3Itb3BhY2l0eSwxMDAlKSx0cmFuc3Bh''@;'; put 'put ''cmVudCl9LmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdENhcHRpb257d2lkdGg6MTAwJTtwYWRkaW5nOnZhcigtLWh0LWlucHV0LXZlcnRpY2FsLXBhZGRpbmcpdmFyKC0taHQtaW5wdXQtaG9yaXpvbnRhbC1wYWRkaW5nKTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTp2YXIoLS1odC1m''@;'; put 'put ''b250LXNpemUpO2xpbmUtaGVpZ2h0OnZhcigtLWh0LWxpbmUtaGVpZ2h0KTtmb250LXdlaWdodDp2YXIoLS1odC1mb250LXdlaWdodCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1odC1pbnB1dC1ib3JkZXItcmFkaXVzKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y3Vyc29yOnBvaW50ZXI7Ym9yZGVy''@;'; put 'put ''OnZhcigtLWh0LWlucHV0LWJvcmRlci13aWR0aClzb2xpZCB2YXIoLS1odC1pbnB1dC1ib3JkZXItY29sb3IpO2NvbG9yOnZhcigtLWh0LWlucHV0LWZvcmVncm91bmQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtaW5wdXQtYmFja2dyb3VuZC1jb2xvcik7dGV4dC1vdmVyZmxv''@;'; put 'put ''dzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7dHJhbnNpdGlvbjp2YXIoLS1odC10YWJsZS10cmFuc2l0aW9uKWFsbCBlYXNlLWluLW91dDttYXJnaW46MDtwYWRkaW5nLWlubGluZS1lbmQ6Y2FsYyh2YXIoLS1odC1pbnB1dC1ob3Jpem9udGFsLXBhZGRpbmcpICsgdmFyKC0taHQtaWNv''@;'; put 'put ''bi1zaXplKSk7b3ZlcmZsb3c6aGlkZGVuO291dGxpbmU6bm9uZSFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdENhcHRpb246YWZ0ZXJ7Y29udGVudDoiIjtyaWdodDpjYWxjKHZhcigtLWh0LWlucHV0LWhvcml6b250YWwtcGFkZGluZykgLSB2YXIoLS1odC1pY29uLXNpemUp''@;'; put 'put ''LzQpO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0Q2FwdGlvbjpob3Zlcntib3JkZXItY29sb3I6dmFyKC0taHQtaW5wdXQtaG92ZXItYm9yZGVyLWNvbG9yKTtjb2xvcjp2''@;'; put 'put ''YXIoLS1odC1pbnB1dC1ob3Zlci1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWlucHV0LWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RDYXB0aW9uOmRpc2FibGVke2JvcmRlci1jb2xvcjp2YXIoLS1odC1pbnB1dC1k''@;'; put 'put ''aXNhYmxlZC1ib3JkZXItY29sb3IpO2NvbG9yOnZhcigtLWh0LWlucHV0LWRpc2FibGVkLWZvcmVncm91bmQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtaW5wdXQtZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcil9LmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdENhcHRpb246Zm9j''@;'; put 'put ''dXN7Ym9yZGVyLWNvbG9yOnZhcigtLWh0LWlucHV0LWZvY3VzLWJvcmRlci1jb2xvcik7Y29sb3I6dmFyKC0taHQtaW5wdXQtZm9jdXMtZm9yZWdyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1pbnB1dC1mb2N1cy1iYWNrZ3JvdW5kLWNvbG9yKX0uaGFuZHNvbnRhYmxl''@;'; put 'put ''IC5odFVJU2VsZWN0e2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOnJlbGF0aXZlO291dGxpbmU6bm9uZSFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdDpmb2N1cyAuaHRVSVNlbGVjdENhcHRpb257Ym9yZGVyLWNvbG9yOnZhcigtLWh0LWlucHV0LWZvY3VzLWJvcmRlci1jb2xv''@;'; put 'put ''cik7Y29sb3I6dmFyKC0taHQtaW5wdXQtZm9jdXMtZm9yZWdyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1pbnB1dC1mb2N1cy1iYWNrZ3JvdW5kLWNvbG9yKX1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0Q2FwdGlvbjphZnRlcntyaWdodDphdXRvO2xl''@;'; put 'put ''ZnQ6Y2FsYyh2YXIoLS1odC1pbnB1dC1ob3Jpem9udGFsLXBhZGRpbmcpIC0gdmFyKC0taHQtaWNvbi1zaXplKS80KX0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51Q29uZGl0aW9uIC5odFVJSW5wdXQgaW5wdXQsLmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudVZhbHVlIC5odFVJTXVs''@;'; put 'put ''dGlwbGVTZWxlY3RTZWFyY2ggaW5wdXR7d2lkdGg6MTAwJTtwYWRkaW5nOnZhcigtLWh0LWlucHV0LXZlcnRpY2FsLXBhZGRpbmcpdmFyKC0taHQtaW5wdXQtaG9yaXpvbnRhbC1wYWRkaW5nKTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTp2YXIoLS1odC1mb250LXNpemUpO2xpbmUt''@;'; put 'put ''aGVpZ2h0OnZhcigtLWh0LWxpbmUtaGVpZ2h0KTtmb250LXdlaWdodDp2YXIoLS1odC1mb250LXdlaWdodCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1odC1pbnB1dC1ib3JkZXItcmFkaXVzKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyOnZhcigtLWh0LWlucHV0''@;'; put 'put ''LWJvcmRlci13aWR0aClzb2xpZCB2YXIoLS1odC1pbnB1dC1ib3JkZXItY29sb3IpO2NvbG9yOnZhcigtLWh0LWlucHV0LWZvcmVncm91bmQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtaW5wdXQtYmFja2dyb3VuZC1jb2xvcik7dHJhbnNpdGlvbjp2YXIoLS1odC10YWJsZS10''@;'; put 'put ''cmFuc2l0aW9uKWFsbCBlYXNlLWluLW91dDtvdXRsaW5lOm5vbmUhaW1wb3J0YW50fS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVDb25kaXRpb24gLmh0VUlJbnB1dCBpbnB1dDpob3ZlciwuaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51VmFsdWUgLmh0VUlNdWx0aXBsZVNlbGVjdFNl''@;'; put 'put ''YXJjaCBpbnB1dDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0taHQtaW5wdXQtaG92ZXItYm9yZGVyLWNvbG9yKTtjb2xvcjp2YXIoLS1odC1pbnB1dC1ob3Zlci1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWlucHV0LWhvdmVyLWJhY2tncm91bmQtY29sb3Ip''@;'; put 'put ''fS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVDb25kaXRpb24gLmh0VUlJbnB1dCBpbnB1dDpkaXNhYmxlZCwuaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51VmFsdWUgLmh0VUlNdWx0aXBsZVNlbGVjdFNlYXJjaCBpbnB1dDpkaXNhYmxlZHtib3JkZXItY29sb3I6dmFyKC0taHQtaW5w''@;'; put 'put ''dXQtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKTtjb2xvcjp2YXIoLS1odC1pbnB1dC1kaXNhYmxlZC1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWlucHV0LWRpc2FibGVkLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVDb25k''@;'; put 'put ''aXRpb24gLmh0VUlJbnB1dCBpbnB1dDpmb2N1cywuaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51VmFsdWUgLmh0VUlNdWx0aXBsZVNlbGVjdFNlYXJjaCBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6dmFyKC0taHQtaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yKTtjb2xvcjp2YXIoLS1odC1p''@;'; put 'put ''bnB1dC1mb2N1cy1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWlucHV0LWZvY3VzLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dHt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjA7cG9zaXRpb246cmVsYXRpdmU7b3V0bGluZTpu''@;'; put 'put ''b25lIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXRJY29ue3Bvc2l0aW9uOmFic29sdXRlfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uIGlucHV0LC5oYW5kc29udGFibGUgLmh0LWJ1dHRvbnttaW4td2lkdGg6NjRweDtwYWRkaW5nOnZhcigtLWh0LWJ1dHRv''@;'; put 'put ''bi12ZXJ0aWNhbC1wYWRkaW5nKXZhcigtLWh0LWJ1dHRvbi1ob3Jpem9udGFsLXBhZGRpbmcpO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOnZhcigtLWh0LWZvbnQtc2l6ZSk7bGluZS1oZWlnaHQ6dmFyKC0taHQtbGluZS1oZWlnaHQpO2ZvbnQtd2VpZ2h0OnZhcigtLWh0LWZvbnQt''@;'; put 'put ''d2VpZ2h0KTtib3JkZXItcmFkaXVzOnZhcigtLWh0LWJ1dHRvbi1ib3JkZXItcmFkaXVzKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjp2YXIoLS1odC10YWJsZS10cmFuc2l0aW9uKWFsbCBlYXNlLWluLW91dDtib3JkZXItc3R5bGU6c29saWQ7Ym9y''@;'; put 'put ''ZGVyLXdpZHRoOjFweDtvdXRsaW5lOm5vbmUhaW1wb3J0YW50fS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uQ2FuY2VsIGlucHV0LC5oYW5kc29udGFibGUgLmh0LWJ1dHRvbi0tc2Vjb25kYXJ5e2JvcmRlci1jb2xvcjp2YXIoLS1odC1zZWNvbmRhcnktYnV0dG9uLWJvcmRl''@;'; put 'put ''ci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1zZWNvbmRhcnktYnV0dG9uLWJhY2tncm91bmQtY29sb3IpO2NvbG9yOnZhcigtLWh0LXNlY29uZGFyeS1idXR0b24tZm9yZWdyb3VuZC1jb2xvcil9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b25DYW5jZWwgaW5w''@;'; put 'put ''dXQ6aG92ZXIsLmhhbmRzb250YWJsZSAuaHQtYnV0dG9uLS1zZWNvbmRhcnk6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWh0LXNlY29uZGFyeS1idXR0b24taG92ZXItYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LXNlY29uZGFyeS1idXR0b24taG92ZXItYmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcik7Y29sb3I6dmFyKC0taHQtc2Vjb25kYXJ5LWJ1dHRvbi1ob3Zlci1mb3JlZ3JvdW5kLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbkNhbmNlbCBpbnB1dDpkaXNhYmxlZCwuaGFuZHNvbnRhYmxlIC5odC1idXR0b24tLXNlY29uZGFyeTpkaXNh''@;'; put 'put ''YmxlZHtib3JkZXItY29sb3I6dmFyKC0taHQtc2Vjb25kYXJ5LWJ1dHRvbi1kaXNhYmxlZC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtc2Vjb25kYXJ5LWJ1dHRvbi1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1odC1zZWNvbmRhcnktYnV0''@;'; put 'put ''dG9uLWRpc2FibGVkLWZvcmVncm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uQ2FuY2VsIGlucHV0OmZvY3VzLC5oYW5kc29udGFibGUgLmh0LWJ1dHRvbi0tc2Vjb25kYXJ5OmZvY3Vze2JvcmRlci1jb2xvcjp2YXIoLS1odC1zZWNvbmRhcnktYnV0dG9u''@;'; put 'put ''LWZvY3VzLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1zZWNvbmRhcnktYnV0dG9uLWZvY3VzLWJhY2tncm91bmQtY29sb3IpO2NvbG9yOnZhcigtLWh0LXNlY29uZGFyeS1idXR0b24tZm9jdXMtZm9yZWdyb3VuZC1jb2xvcik7Ym94LXNoYWRvdzowIDAgMCAxcHgg''@;'; put 'put ''dmFyKC0taHQtYWNjZW50LWNvbG9yKX0uaHRVSUlucHV0Lmh0VUlCdXR0b25PSyBpbnB1dCwuaHQtYnV0dG9uLS1wcmltYXJ5e2JvcmRlci1jb2xvcjp2YXIoLS1odC1wcmltYXJ5LWJ1dHRvbi1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtcHJpbWFyeS1idXR0b24t''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0taHQtcHJpbWFyeS1idXR0b24tZm9yZWdyb3VuZC1jb2xvcil9Lmh0VUlJbnB1dC5odFVJQnV0dG9uT0sgaW5wdXQ6aG92ZXIsLmh0LWJ1dHRvbi0tcHJpbWFyeTpob3Zlcntib3JkZXItY29sb3I6dmFyKC0taHQtcHJpbWFyeS1idXR0b24t''@;'; put 'put ''aG92ZXItYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LXByaW1hcnktYnV0dG9uLWhvdmVyLWJhY2tncm91bmQtY29sb3IpO2NvbG9yOnZhcigtLWh0LXByaW1hcnktYnV0dG9uLWhvdmVyLWZvcmVncm91bmQtY29sb3IpfS5odFVJSW5wdXQuaHRVSUJ1dHRvbk9LIGlu''@;'; put 'put ''cHV0OmRpc2FibGVkLC5odC1idXR0b24tLXByaW1hcnk6ZGlzYWJsZWR7Ym9yZGVyLWNvbG9yOnZhcigtLWh0LXByaW1hcnktYnV0dG9uLWRpc2FibGVkLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1wcmltYXJ5LWJ1dHRvbi1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yKTtjb2xvcjp2YXIoLS1odC1wcmltYXJ5LWJ1dHRvbi1kaXNhYmxlZC1mb3JlZ3JvdW5kLWNvbG9yKX0uaHRVSUlucHV0Lmh0VUlCdXR0b25PSyBpbnB1dDpmb2N1cywuaHQtYnV0dG9uLS1wcmltYXJ5OmZvY3Vze2JvcmRlci1jb2xvcjp2YXIoLS1odC1wcmltYXJ5LWJ1dHRvbi1mb2N1''@;'; put 'put ''cy1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtcHJpbWFyeS1idXR0b24tZm9jdXMtYmFja2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0taHQtcHJpbWFyeS1idXR0b24tZm9jdXMtZm9yZWdyb3VuZC1jb2xvcik7Ym94LXNoYWRvdzowIDAgMCAxcHggdmFyKC0taHQt''@;'; put 'put ''YWNjZW50LWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odFVJUmFkaW97cGFkZGluZzp2YXIoLS1odC1nYXAtc2l6ZSljYWxjKDIqdmFyKC0taHQtZ2FwLXNpemUpKTthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOnZhcigtLWh0LWdhcC1zaXplKTtjdXJzb3I6cG9pbnRlcjttYXJnaW46MDtwYWRkaW5n''@;'; put 'put ''LWJvdHRvbTowO2Rpc3BsYXk6aW5saW5lLWZsZXg7cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZSAuaHRVSVJhZGlvOmZpcnN0LWNoaWxke3BhZGRpbmctaW5saW5lLXN0YXJ0OjB9LmhhbmRzb250YWJsZSAuaHRVSVJhZGlvPmlucHV0W3R5cGU9cmFkaW9de3dpZHRoOnZhcigtLWh0''@;'; put 'put ''LXJhZGlvLXNpemUpO2hlaWdodDp2YXIoLS1odC1yYWRpby1zaXplKTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyLXJhZGl1czpjYWxjKC41KnZhcigtLWh0LXJhZGlvLXNpemUpKTtvdXRsaW5lOm5vbmU7bWFyZ2luOjA7cG9z''@;'; put 'put ''aXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZSAuaHRVSVJhZGlvPmlucHV0W3R5cGU9cmFkaW9dOmJlZm9yZXtjb250ZW50OiIiO2JvcmRlci1yYWRpdXM6Y2FsYyguNSp2YXIoLS1odC1yYWRpby1zaXplKSk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1odC1yYWRpby1ib3JkZXItY29sb3Ip''@;'; put 'put ''O2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtcmFkaW8tYmFja2dyb3VuZC1jb2xvcik7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowfS5oYW5kc29udGFibGUgLmh0VUlSYWRpbz5pbnB1dFt0eXBlPXJhZGlvXTphZnRlcntjb250ZW50OiIiO2NvbG9yOnZhcigtLWh0''@;'; put 'put ''LXJhZGlvLWljb24tY29sb3IpO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGV9LmhhbmRzb250YWJsZSAuaHRVSVJhZGlvPmlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1odC1yYWRpby1jaGVja2VkLWJvcmRlci1jb2xvcik7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1odC1yYWRpby1jaGVja2VkLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgLmh0VUlSYWRpbz5pbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFmdGVye2NvbG9yOnZhcigtLWh0LXJhZGlvLWNoZWNrZWQtaWNvbi1jb2xvcil9LmhhbmRzb250YWJsZSAu''@;'; put 'put ''aHRVSVJhZGlvPmlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6ZGlzYWJsZWR7Y3Vyc29yOmluaXRpYWx9LmhhbmRzb250YWJsZSAuaHRVSVJhZGlvPmlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6ZGlzYWJsZWQ6YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1odC1yYWRpby1jaGVja2VkLWRp''@;'; put 'put ''c2FibGVkLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1yYWRpby1jaGVja2VkLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgLmh0VUlSYWRpbz5pbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmRpc2FibGVkOmFmdGVye2NvbG9yOnZhcigt''@;'; put 'put ''LWh0LXJhZGlvLWNoZWNrZWQtZGlzYWJsZWQtaWNvbi1jb2xvcil9LmhhbmRzb250YWJsZSAuaHRVSVJhZGlvPmlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6Zm9jdXM6YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1odC1yYWRpby1jaGVja2VkLWZvY3VzLWJvcmRlci1jb2xvcik7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1odC1yYWRpby1jaGVja2VkLWZvY3VzLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgLmh0VUlSYWRpbz5pbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmZvY3VzOmFmdGVye2NvbG9yOnZhcigtLWh0LXJhZGlvLWNoZWNrZWQtZm9jdXMtaWNvbi1jb2xv''@;'; put 'put ''cil9LmhhbmRzb250YWJsZSAuaHRVSVJhZGlvPmlucHV0W3R5cGU9cmFkaW9dOmRpc2FibGVke2N1cnNvcjppbml0aWFsfS5oYW5kc29udGFibGUgLmh0VUlSYWRpbz5pbnB1dFt0eXBlPXJhZGlvXTpkaXNhYmxlZDpiZWZvcmV7Ym9yZGVyLWNvbG9yOnZhcigtLWh0LXJhZGlvLWRpc2FibGVk''@;'; put 'put ''LWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1yYWRpby1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odFVJUmFkaW8+aW5wdXRbdHlwZT1yYWRpb106ZGlzYWJsZWQ6YWZ0ZXJ7Y29sb3I6dmFyKC0taHQtcmFkaW8tZGlzYWJsZWQtaWNv''@;'; put 'put ''bi1jb2xvcil9LmhhbmRzb250YWJsZSAuaHRVSVJhZGlvPmlucHV0W3R5cGU9cmFkaW9dOmZvY3VzOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0taHQtcmFkaW8tZm9jdXMtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LXJhZGlvLWZvY3VzLWJhY2tncm91bmQtY29s''@;'; put 'put ''b3IpO291dGxpbmU6MXB4IHNvbGlkIHZhcigtLWh0LXJhZGlvLWZvY3VzLXJpbmctY29sb3IpfS5oYW5kc29udGFibGUgLmh0VUlSYWRpbz5pbnB1dFt0eXBlPXJhZGlvXTpmb2N1czphZnRlcntjb2xvcjp2YXIoLS1odC1yYWRpby1mb2N1cy1pY29uLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5o''@;'; put 'put ''dFVJUmFkaW8gbGFiZWx7dmVydGljYWwtYWxpZ246bWlkZGxlO2N1cnNvcjpwb2ludGVyO2NvbG9yOmluaGVyaXR9LmhhbmRzb250YWJsZSAuaHRVSVJhZGlvIGxhYmVsOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MH0uaGFuZHNvbnRh''@;'; put 'put ''YmxlIC5jb2xsYXBzaWJsZUluZGljYXRvciwuaGFuZHNvbnRhYmxlIC5odF9uZXN0aW5nQnV0dG9ue3dpZHRoOnZhcigtLWh0LWljb24tYnV0dG9uLWhpdC1hcmVhLXNpemUpO2hlaWdodDp2YXIoLS1odC1pY29uLWJ1dHRvbi1oaXQtYXJlYS1zaXplKTttYXJnaW46Y2FsYygtMSoodmFyKC0t''@;'; put 'put ''aHQtaWNvbi1idXR0b24taGl0LWFyZWEtc2l6ZSkgLSB2YXIoLS1odC1pY29uLXNpemUpKS8yICsgMXB4KTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y3Vyc29yOnBvaW50ZXI7dGV4dC1pbmRlbnQ6LTEwMHB4O2ZsZXgtc2hyaW5rOjA7Zm9udC1zaXplOjA7cG9zaXRpb246cmVsYXRpdmU7b3Zl''@;'; put 'put ''cmZsb3c6dmlzaWJsZX0uaGFuZHNvbnRhYmxlIC5jb2xsYXBzaWJsZUluZGljYXRvcjpiZWZvcmUsLmhhbmRzb250YWJsZSAuaHRfbmVzdGluZ0J1dHRvbjpiZWZvcmV7Y29udGVudDoiIjt3aWR0aDp2YXIoLS1odC1pY29uLXNpemUpO2hlaWdodDp2YXIoLS1odC1pY29uLXNpemUpO21hcmdp''@;'; put 'put ''bi10b3A6Y2FsYygtLjUqdmFyKC0taHQtaWNvbi1zaXplKSk7bWFyZ2luLWxlZnQ6Y2FsYygtLjUqdmFyKC0taHQtaWNvbi1zaXplKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1odC1jb2xsYXBzZS1idXR0b24tYm9yZGVyLXJhZGl1cyk7dHJhbnNpdGlvbjp2YXIoLS1odC10YWJsZS10cmFuc2l0''@;'; put 'put ''aW9uKWFsbCBlYXNlLWluLW91dDt6LWluZGV4OjE7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlfS5oYW5kc29udGFibGUgLmNvbGxhcHNpYmxlSW5kaWNhdG9yOmFmdGVyLC5oYW5kc29udGFibGUgLmh0X25lc3RpbmdCdXR0b246YWZ0ZXJ7Y29udGVu''@;'; put 'put ''dDoiIjt3aWR0aDp2YXIoLS1odC1pY29uLXNpemUpO2hlaWdodDp2YXIoLS1odC1pY29uLXNpemUpO21hcmdpbi10b3A6Y2FsYygtLjUqdmFyKC0taHQtaWNvbi1zaXplKSk7bWFyZ2luLWxlZnQ6Y2FsYygtLjUqdmFyKC0taHQtaWNvbi1zaXplKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1odC1j''@;'; put 'put ''b2xsYXBzZS1idXR0b24tYm9yZGVyLXJhZGl1cyk7dHJhbnNpdGlvbjp2YXIoLS1odC10YWJsZS10cmFuc2l0aW9uKWFsbCBlYXNlLWluLW91dDt6LWluZGV4OjA7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlfS5oYW5kc29udGFibGUgLmNvbGxhcHNp''@;'; put 'put ''YmxlSW5kaWNhdG9yLmV4cGFuZGVkOmJlZm9yZSwuaGFuZHNvbnRhYmxlIC5jb2xsYXBzaWJsZUluZGljYXRvci5odF9uZXN0aW5nQ29sbGFwc2U6YmVmb3JlLC5oYW5kc29udGFibGUgLmh0X25lc3RpbmdCdXR0b24uZXhwYW5kZWQ6YmVmb3JlLC5oYW5kc29udGFibGUgLmh0X25lc3RpbmdC''@;'; put 'put ''dXR0b24uaHRfbmVzdGluZ0NvbGxhcHNlOmJlZm9yZXtjb2xvcjp2YXIoLS1odC1jb2xsYXBzZS1idXR0b24tb3Blbi1pY29uLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5jb2xsYXBzaWJsZUluZGljYXRvci5leHBhbmRlZDphZnRlciwuaGFuZHNvbnRhYmxlIC5jb2xsYXBzaWJsZUluZGljYXRv''@;'; put 'put ''ci5odF9uZXN0aW5nQ29sbGFwc2U6YWZ0ZXIsLmhhbmRzb250YWJsZSAuaHRfbmVzdGluZ0J1dHRvbi5leHBhbmRlZDphZnRlciwuaGFuZHNvbnRhYmxlIC5odF9uZXN0aW5nQnV0dG9uLmh0X25lc3RpbmdDb2xsYXBzZTphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWNvbGxhcHNl''@;'; put 'put ''LWJ1dHRvbi1vcGVuLWJhY2tncm91bmQtY29sb3IpO2JveC1zaGFkb3c6MCAwIDAgMXB4IHZhcigtLWh0LWNvbGxhcHNlLWJ1dHRvbi1vcGVuLWJvcmRlci1jb2xvcil9LmhhbmRzb250YWJsZSAuY29sbGFwc2libGVJbmRpY2F0b3IuZXhwYW5kZWQ6aG92ZXI6YmVmb3JlLC5oYW5kc29udGFi''@;'; put 'put ''bGUgLmNvbGxhcHNpYmxlSW5kaWNhdG9yLmh0X25lc3RpbmdDb2xsYXBzZTpob3ZlcjpiZWZvcmUsLmhhbmRzb250YWJsZSAuaHRfbmVzdGluZ0J1dHRvbi5leHBhbmRlZDpob3ZlcjpiZWZvcmUsLmhhbmRzb250YWJsZSAuaHRfbmVzdGluZ0J1dHRvbi5odF9uZXN0aW5nQ29sbGFwc2U6aG92''@;'; put 'put ''ZXI6YmVmb3Jle2NvbG9yOnZhcigtLWh0LWNvbGxhcHNlLWJ1dHRvbi1vcGVuLWhvdmVyLWljb24tY29sb3IpfS5oYW5kc29udGFibGUgLmNvbGxhcHNpYmxlSW5kaWNhdG9yLmV4cGFuZGVkOmhvdmVyOmFmdGVyLC5oYW5kc29udGFibGUgLmNvbGxhcHNpYmxlSW5kaWNhdG9yLmh0X25lc3Rp''@;'; put 'put ''bmdDb2xsYXBzZTpob3ZlcjphZnRlciwuaGFuZHNvbnRhYmxlIC5odF9uZXN0aW5nQnV0dG9uLmV4cGFuZGVkOmhvdmVyOmFmdGVyLC5oYW5kc29udGFibGUgLmh0X25lc3RpbmdCdXR0b24uaHRfbmVzdGluZ0NvbGxhcHNlOmhvdmVyOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQt''@;'; put 'put ''Y29sbGFwc2UtYnV0dG9uLW9wZW4taG92ZXItYmFja2dyb3VuZC1jb2xvcik7Ym94LXNoYWRvdzowIDAgMCAxcHggdmFyKC0taHQtY29sbGFwc2UtYnV0dG9uLW9wZW4taG92ZXItYm9yZGVyLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5jb2xsYXBzaWJsZUluZGljYXRvci5jb2xsYXBzZWQ6YmVm''@;'; put 'put ''b3JlLC5oYW5kc29udGFibGUgLmNvbGxhcHNpYmxlSW5kaWNhdG9yLmh0X25lc3RpbmdFeHBhbmQ6YmVmb3JlLC5oYW5kc29udGFibGUgLmh0X25lc3RpbmdCdXR0b24uY29sbGFwc2VkOmJlZm9yZSwuaGFuZHNvbnRhYmxlIC5odF9uZXN0aW5nQnV0dG9uLmh0X25lc3RpbmdFeHBhbmQ6YmVm''@;'; put 'put ''b3Jle2NvbG9yOnZhcigtLWh0LWNvbGxhcHNlLWJ1dHRvbi1jbG9zZS1pY29uLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5jb2xsYXBzaWJsZUluZGljYXRvci5jb2xsYXBzZWQ6YWZ0ZXIsLmhhbmRzb250YWJsZSAuY29sbGFwc2libGVJbmRpY2F0b3IuaHRfbmVzdGluZ0V4cGFuZDphZnRlciwu''@;'; put 'put ''aGFuZHNvbnRhYmxlIC5odF9uZXN0aW5nQnV0dG9uLmNvbGxhcHNlZDphZnRlciwuaGFuZHNvbnRhYmxlIC5odF9uZXN0aW5nQnV0dG9uLmh0X25lc3RpbmdFeHBhbmQ6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1jb2xsYXBzZS1idXR0b24tY2xvc2UtYmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cik7Ym94LXNoYWRvdzowIDAgMCAxcHggdmFyKC0taHQtY29sbGFwc2UtYnV0dG9uLWNsb3NlLWJvcmRlci1jb2xvcil9LmhhbmRzb250YWJsZSAuY29sbGFwc2libGVJbmRpY2F0b3IuY29sbGFwc2VkOmhvdmVyOmJlZm9yZSwuaGFuZHNvbnRhYmxlIC5jb2xsYXBzaWJsZUluZGljYXRvci5o''@;'; put 'put ''dF9uZXN0aW5nRXhwYW5kOmhvdmVyOmJlZm9yZSwuaGFuZHNvbnRhYmxlIC5odF9uZXN0aW5nQnV0dG9uLmNvbGxhcHNlZDpob3ZlcjpiZWZvcmUsLmhhbmRzb250YWJsZSAuaHRfbmVzdGluZ0J1dHRvbi5odF9uZXN0aW5nRXhwYW5kOmhvdmVyOmJlZm9yZXtjb2xvcjp2YXIoLS1odC1jb2xs''@;'; put 'put ''YXBzZS1idXR0b24tY2xvc2UtaG92ZXItaWNvbi1jb2xvcil9LmhhbmRzb250YWJsZSAuY29sbGFwc2libGVJbmRpY2F0b3IuY29sbGFwc2VkOmhvdmVyOmFmdGVyLC5oYW5kc29udGFibGUgLmNvbGxhcHNpYmxlSW5kaWNhdG9yLmh0X25lc3RpbmdFeHBhbmQ6aG92ZXI6YWZ0ZXIsLmhhbmRz''@;'; put 'put ''b250YWJsZSAuaHRfbmVzdGluZ0J1dHRvbi5jb2xsYXBzZWQ6aG92ZXI6YWZ0ZXIsLmhhbmRzb250YWJsZSAuaHRfbmVzdGluZ0J1dHRvbi5odF9uZXN0aW5nRXhwYW5kOmhvdmVyOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtY29sbGFwc2UtYnV0dG9uLWNsb3NlLWhvdmVyLWJh''@;'; put 'put ''Y2tncm91bmQtY29sb3IpO2JveC1zaGFkb3c6MCAwIDAgMXB4IHZhcigtLWh0LWNvbGxhcHNlLWJ1dHRvbi1jbG9zZS1ob3Zlci1ib3JkZXItY29sb3IpfS5oYW5kc29udGFibGUgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHQgLmNvbGxhcHNpYmxlSW5kaWNhdG9yLmNvbGxhcHNlZDpiZWZvcmUs''@;'; put 'put ''LmhhbmRzb250YWJsZSB0aC5odF9fYWN0aXZlX2hpZ2hsaWdodCAuY29sbGFwc2libGVJbmRpY2F0b3IuaHRfbmVzdGluZ0V4cGFuZDpiZWZvcmUsLmhhbmRzb250YWJsZSB0aC5odF9fYWN0aXZlX2hpZ2hsaWdodCAuaHRfbmVzdGluZ0J1dHRvbi5jb2xsYXBzZWQ6YmVmb3JlLC5oYW5kc29u''@;'; put 'put ''dGFibGUgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHQgLmh0X25lc3RpbmdCdXR0b24uaHRfbmVzdGluZ0V4cGFuZDpiZWZvcmV7Y29sb3I6dmFyKC0taHQtY29sbGFwc2UtYnV0dG9uLWNsb3NlLWljb24tYWN0aXZlLWNvbG9yKX0uaGFuZHNvbnRhYmxlIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0''@;'; put 'put ''IC5jb2xsYXBzaWJsZUluZGljYXRvci5jb2xsYXBzZWQ6aG92ZXI6YmVmb3JlLC5oYW5kc29udGFibGUgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHQgLmNvbGxhcHNpYmxlSW5kaWNhdG9yLmh0X25lc3RpbmdFeHBhbmQ6aG92ZXI6YmVmb3JlLC5oYW5kc29udGFibGUgdGguaHRfX2FjdGl2ZV9o''@;'; put 'put ''aWdobGlnaHQgLmh0X25lc3RpbmdCdXR0b24uY29sbGFwc2VkOmhvdmVyOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0IC5odF9uZXN0aW5nQnV0dG9uLmh0X25lc3RpbmdFeHBhbmQ6aG92ZXI6YmVmb3Jle2NvbG9yOnZhcigtLWh0LWNvbGxhcHNlLWJ1dHRv''@;'; put 'put ''bi1jbG9zZS1ob3Zlci1pY29uLWFjdGl2ZS1jb2xvcil9LmhhbmRzb250YWJsZSB0aC5odF9fYWN0aXZlX2hpZ2hsaWdodCAuY29sbGFwc2libGVJbmRpY2F0b3IuZXhwYW5kZWQ6YmVmb3JlLC5oYW5kc29udGFibGUgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHQgLmNvbGxhcHNpYmxlSW5kaWNh''@;'; put 'put ''dG9yLmh0X25lc3RpbmdDb2xsYXBzZTpiZWZvcmUsLmhhbmRzb250YWJsZSB0aC5odF9fYWN0aXZlX2hpZ2hsaWdodCAuaHRfbmVzdGluZ0J1dHRvbi5leHBhbmRlZDpiZWZvcmUsLmhhbmRzb250YWJsZSB0aC5odF9fYWN0aXZlX2hpZ2hsaWdodCAuaHRfbmVzdGluZ0J1dHRvbi5odF9uZXN0''@;'; put 'put ''aW5nQ29sbGFwc2U6YmVmb3Jle2NvbG9yOnZhcigtLWh0LWNvbGxhcHNlLWJ1dHRvbi1vcGVuLWljb24tYWN0aXZlLWNvbG9yKX0uaGFuZHNvbnRhYmxlIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0IC5jb2xsYXBzaWJsZUluZGljYXRvci5leHBhbmRlZDpob3ZlcjpiZWZvcmUsLmhhbmRzb250''@;'; put 'put ''YWJsZSB0aC5odF9fYWN0aXZlX2hpZ2hsaWdodCAuY29sbGFwc2libGVJbmRpY2F0b3IuaHRfbmVzdGluZ0NvbGxhcHNlOmhvdmVyOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0IC5odF9uZXN0aW5nQnV0dG9uLmV4cGFuZGVkOmhvdmVyOmJlZm9yZSwuaGFu''@;'; put 'put ''ZHNvbnRhYmxlIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0IC5odF9uZXN0aW5nQnV0dG9uLmh0X25lc3RpbmdDb2xsYXBzZTpob3ZlcjpiZWZvcmV7Y29sb3I6dmFyKC0taHQtY29sbGFwc2UtYnV0dG9uLW9wZW4taG92ZXItaWNvbi1hY3RpdmUtY29sb3IpfS5oYW5kc29udGFibGUgdGhlYWQg''@;'; put 'put ''dGguaHRSb3dzcGFuSGVhZGVyK3Roe2JvcmRlci1pbmxpbmUtc3RhcnQtd2lkdGg6MH0uaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmh0Um93c3BhbkhlYWRlcnt2ZXJ0aWNhbC1hbGlnbjpib3R0b207aGVpZ2h0OmF1dG87b3ZlcmZsb3c6dmlzaWJsZX0uaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmh0''@;'; put 'put ''Um93c3BhbkhlYWRlci5odF9fYWN0aXZlX2hpZ2hsaWdodHtib3JkZXItaW5saW5lLXN0YXJ0LWNvbG9yOnZhcigtLWh0LWhlYWRlci1hY3RpdmUtYm9yZGVyLWNvbG9yKTt6LWluZGV4OjF9LmhhbmRzb250YWJsZS5odFJvd0hlYWRlcnMuaHRIYXNSb3dzcGFuSGVhZGVycyB0aGVhZCB0cjps''@;'; put 'put ''YXN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8p''@;'; put 'put ''LDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5oYW5kc29udGFibGUuaHRSb3dIZWFkZXJzLmh0SGFzUm93c3BhbkhlYWRlcnMgdGhlYWQgdHI6bGFzdC1jaGlsZCB0aDpmaXJz''@;'; put 'put ''dC1jaGlsZDppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmco''@;'; put 'put ''cHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uaGFuZHNvbnRhYmxlLmh0SGFzUm93c3BhbkhlYWRlcnMgLmh0X2Nsb25lX2lubGluZV9zdGFydCAuaHRDb3JlIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRoOmZp''@;'; put 'put ''cnN0LWNoaWxkOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxh''@;'; put 'put ''bmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowfS5oYW5kc29udGFibGUuaHRIYXNSb3dzcGFuSGVhZGVycyAuaHRfY2xvbmVfaW5saW5lX3N0YXJ0IC5odENvcmUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGg6Zmly''@;'; put 'put ''c3QtY2hpbGQ6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5n''@;'; put 'put ''KHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9LmhhbmRzb250YWJsZSAuaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJUb3ApOm5vdCguaW5uZXJCb3JkZXJCb3R0b20pIHRoZWFkIHRoLmh0Um93c3BhbkJvdHRv''@;'; put 'put ''bUxldmVsLC5oYW5kc29udGFibGUgLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKX4uaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmh0Um93c3BhbkJvdHRvbUxldmVse2JvcmRlci1ib3R0b20td2lkdGg6MH0uaGFuZHNvbnRhYmxlIHRoZWFkIHRo''@;'; put 'put ''LmhpZGRlbkhlYWRlcjpub3QoOmZpcnN0LW9mLXR5cGUpe2Rpc3BsYXk6bm9uZX0uaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmhpZGRlbkhlYWRlclRleHQgLmNvbEhlYWRlcntvcGFjaXR5OjB9LmhhbmRzb250YWJsZSB0aC5odF9uZXN0aW5nTGV2ZWxzPi5yZWxhdGl2ZXthbGlnbi1pdGVtczpj''@;'; put 'put ''ZW50ZXI7Z2FwOjVweDtkaXNwbGF5OmZsZXh9LmhhbmRzb250YWJsZSB0aC5odF9uZXN0aW5nTGV2ZWxzIHNwYW46bGFzdC1jaGlsZHtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1odC1pY29uLXNpemUpICsgNXB4KX0uaGFuZHNvbnRhYmxlIHRoLmh0X25lc3RpbmdMZXZlbHMgc3Bhbi5odF9u''@;'; put 'put ''ZXN0aW5nTGV2ZWx7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmhhbmRzb250YWJsZSB0aC5odF9uZXN0aW5nTGV2ZWxzIHNwYW4uaHRfbmVzdGluZ0xldmVsX2VtcHR5e29yZGVyOi0yO3dpZHRoOjVweDtoZWlnaHQ6MXB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlfS5o''@;'; put 'put ''YW5kc29udGFibGUgdGguaHRfbmVzdGluZ0xldmVscyAuaHRfbmVzdGluZ0J1dHRvbntjdXJzb3I6cG9pbnRlcjtvcmRlcjotMTtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlbkNvbHVtbiwuaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuQ29sdW1ue3Bv''@;'; put 'put ''c2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuQ29sdW1uOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlbkNvbHVtbjphZnRlciwuaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuQ29sdW1uOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRoLmFmdGVy''@;'; put 'put ''SGlkZGVuQ29sdW1uOmFmdGVye2NvbG9yOnZhcigtLWh0LWhpZGRlbi1pbmRpY2F0b3ItY29sb3IpO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7d2lkdGg6MTBweCFpbXBvcnRhbnQ7aGVpZ2h0OjEwcHghaW1wb3J0YW50fS5oYW5kc29udGFi''@;'; put 'put ''bGUgdGguYmVmb3JlSGlkZGVuQ29sdW1uOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztyaWdodDotMnB4fS5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Db2x1bW46YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztsZWZ0Oi0ycHh9LmhhbmRzb250YWJsZSB0aC5odF9f''@;'; put 'put ''YWN0aXZlX2hpZ2hsaWdodC5iZWZvcmVIaWRkZW5Db2x1bW46YmVmb3JlLC5oYW5kc29udGFibGUgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHQuYmVmb3JlSGlkZGVuQ29sdW1uOmFmdGVyLC5oYW5kc29udGFibGUgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHQuYWZ0ZXJIaWRkZW5Db2x1bW46YmVm''@;'; put 'put ''b3JlLC5oYW5kc29udGFibGUgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHQuYWZ0ZXJIaWRkZW5Db2x1bW46YWZ0ZXJ7Y29sb3I6dmFyKC0taHQtaWNvbi1idXR0b24tYWN0aXZlLWljb24tY29sb3IsdmFyKC0taHQtaWNvbi1hY3RpdmUtYnV0dG9uLWljb24tY29sb3IpKX1bZGlyPXJ0bF0uaGFu''@;'; put 'put ''ZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlbkNvbHVtbjphZnRlcntyaWdodDppbml0aWFsO2xlZnQ6LTJweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKXJvdGF0ZSgxODBkZWcpfVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Db2x1bW46YmVmb3Jle3JpZ2h0Oi0ycHg7''@;'; put 'put ''bGVmdDppbml0aWFsO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpcm90YXRlKDE4MGRlZyl9LmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Sb3csLmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlblJvd3twb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRl''@;'; put 'put ''blJvdzpiZWZvcmUsLmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Sb3c6YWZ0ZXIsLmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlblJvdzpiZWZvcmUsLmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlblJvdzphZnRlcntjb2xvcjp2YXIoLS1odC1oaWRkZW4taW5kaWNhdG9yLWNvbG9y''@;'; put 'put ''KTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUpO3dpZHRoOjEwcHghaW1wb3J0YW50O2hlaWdodDoxMHB4IWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlblJvdzphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7Ym90''@;'; put 'put ''dG9tOi0ycHh9LmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlblJvdzpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO3RvcDotMnB4fS5oYW5kc29udGFibGUgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHQuYmVmb3JlSGlkZGVuUm93OmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRoLmh0X19h''@;'; put 'put ''Y3RpdmVfaGlnaGxpZ2h0LmJlZm9yZUhpZGRlblJvdzphZnRlciwuaGFuZHNvbnRhYmxlIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0LmFmdGVySGlkZGVuUm93OmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0LmFmdGVySGlkZGVuUm93OmFmdGVye2NvbG9yOnZh''@;'; put 'put ''cigtLWh0LWljb24tYnV0dG9uLWFjdGl2ZS1pY29uLWNvbG9yLHZhcigtLWh0LWljb24tYWN0aXZlLWJ1dHRvbi1pY29uLWNvbG9yKSl9LmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6dmFyKC0taHQtaWNvbi1idXR0b24taGl0LWFyZWEtc2l6''@;'; put 'put ''ZSk7aGVpZ2h0OnZhcigtLWh0LWljb24tYnV0dG9uLWhpdC1hcmVhLXNpemUpO21hcmdpbjpjYWxjKC0xKih2YXIoLS1odC1pY29uLWJ1dHRvbi1oaXQtYXJlYS1zaXplKSAtIHZhcigtLWh0LWljb24tc2l6ZSkpLzIgKyAxcHgpO2JveC1zaGFkb3c6bm9uZTtjb2xvcjppbmhlcml0O3otaW5k''@;'; put 'put ''ZXg6MTtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7ZmxleC1zaHJpbms6MDtwYWRkaW5nOjA7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6dmlzaWJsZX0uaGFuZHNvbnRhYmxlIC5jaGFuZ2VUeXBlOmJlZm9yZXtjb250ZW50OiIiO3dpZHRoOnZhcigtLWh0LWlj''@;'; put 'put ''b24tc2l6ZSk7aGVpZ2h0OnZhcigtLWh0LWljb24tc2l6ZSk7bWFyZ2luLXRvcDpjYWxjKC0uNSp2YXIoLS1odC1pY29uLXNpemUpKTttYXJnaW4tbGVmdDpjYWxjKC0uNSp2YXIoLS1odC1pY29uLXNpemUpKTtjb2xvcjp2YXIoLS1odC1pY29uLWJ1dHRvbi1pY29uLWNvbG9yKTt6LWluZGV4''@;'; put 'put ''OjE7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlfS5oYW5kc29udGFibGUgLmNoYW5nZVR5cGU6YWZ0ZXJ7Y29udGVudDoiIjt3aWR0aDp2YXIoLS1odC1pY29uLXNpemUpO2hlaWdodDp2YXIoLS1odC1pY29uLXNpemUpO21hcmdpbi10b3A6Y2FsYygt''@;'; put 'put ''LjUqdmFyKC0taHQtaWNvbi1zaXplKSk7bWFyZ2luLWxlZnQ6Y2FsYygtLjUqdmFyKC0taHQtaWNvbi1zaXplKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1odC1pY29uLWJ1dHRvbi1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OjAgMCAwIDFweCB2YXIoLS1odC1pY29uLWJ1dHRvbi1ib3JkZXIt''@;'; put 'put ''Y29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtaWNvbi1idXR0b24tYmFja2dyb3VuZC1jb2xvcik7ei1pbmRleDowO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJX0uaGFuZHNvbnRhYmxlIC5jaGFuZ2VUeXBlOmhvdmVye2N1cnNvcjpwb2lu''@;'; put 'put ''dGVyfS5oYW5kc29udGFibGUgLmNoYW5nZVR5cGU6aG92ZXI6YmVmb3Jle2NvbG9yOnZhcigtLWh0LWljb24tYnV0dG9uLWhvdmVyLWljb24tY29sb3IpfS5oYW5kc29udGFibGUgLmNoYW5nZVR5cGU6aG92ZXI6YWZ0ZXJ7Ym94LXNoYWRvdzowIDAgMCAxcHggdmFyKC0taHQtaWNvbi1idXR0''@;'; put 'put ''b24taG92ZXItYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWljb24tYnV0dG9uLWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgLmh0X19hY3RpdmVfaGlnaGxpZ2h0IC5jaGFuZ2VUeXBlOmJlZm9yZXtjb2xvcjp2YXIoLS1odC1pY29uLWJ1dHRv''@;'; put 'put ''bi1hY3RpdmUtaWNvbi1jb2xvcix2YXIoLS1odC1pY29uLWFjdGl2ZS1idXR0b24taWNvbi1jb2xvcikpfS5oYW5kc29udGFibGUgLmh0X19hY3RpdmVfaGlnaGxpZ2h0IC5jaGFuZ2VUeXBlOmFmdGVye2JveC1zaGFkb3c6MCAwIDAgMXB4IHZhcigtLWh0LWljb24tYnV0dG9uLWFjdGl2ZS1i''@;'; put 'put ''b3JkZXItY29sb3IsdmFyKC0taHQtaWNvbi1hY3RpdmUtYnV0dG9uLWJvcmRlci1jb2xvcikpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtaWNvbi1idXR0b24tYWN0aXZlLWJhY2tncm91bmQtY29sb3IsdmFyKC0taHQtaWNvbi1hY3RpdmUtYnV0dG9uLWJhY2tncm91bmQtY29sb3IpKX0u''@;'; put 'put ''aGFuZHNvbnRhYmxlIC5odF9fYWN0aXZlX2hpZ2hsaWdodCAuY2hhbmdlVHlwZTpob3ZlcjpiZWZvcmV7Y29sb3I6dmFyKC0taHQtaWNvbi1idXR0b24tYWN0aXZlLWhvdmVyLWljb24tY29sb3IsdmFyKC0taHQtaWNvbi1hY3RpdmUtYnV0dG9uLWhvdmVyLWljb24tY29sb3IpKX0uaGFuZHNv''@;'; put 'put ''bnRhYmxlIC5odF9fYWN0aXZlX2hpZ2hsaWdodCAuY2hhbmdlVHlwZTpob3ZlcjphZnRlcntib3gtc2hhZG93OjAgMCAwIDFweCB2YXIoLS1odC1pY29uLWJ1dHRvbi1hY3RpdmUtaG92ZXItYm9yZGVyLWNvbG9yLHZhcigtLWh0LWljb24tYWN0aXZlLWJ1dHRvbi1ob3Zlci1ib3JkZXItY29s''@;'; put 'put ''b3IpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWljb24tYnV0dG9uLWFjdGl2ZS1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yLHZhcigtLWh0LWljb24tYWN0aXZlLWJ1dHRvbi1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yKSl9LmhhbmRzb250YWJsZSB0aC5odEZpbHRlcnNBY3RpdmV7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1odC1oZWFkZXItZmlsdGVyLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgdGguaHRGaWx0ZXJzQWN0aXZlLmh0X19hY3RpdmVfaGlnaGxpZ2h0e2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0taHQtaGVhZGVyLWFjdGl2ZS1i''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yKSx2YXIoLS1odC1oZWFkZXItZmlsdGVyLWJhY2tncm91bmQtY29sb3IpMjAlKX0uaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51Pi5odF9tYXN0ZXIsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51Pi5odF9tYXN0ZXIsLmhhbmRzb250YWJsZS5odEZpbHRlcnND''@;'; put 'put ''b25kaXRpb25zTWVudT4uaHRfbWFzdGVye2JveC1zaGFkb3c6dmFyKC0taHQtbWVudS1zaGFkb3cteCwwKXZhcigtLWh0LW1lbnUtc2hhZG93LXksMCl2YXIoLS1odC1tZW51LXNoYWRvdy1ibHVyLDhweCljb2xvci1taXgoaW4gc3JnYix2YXIoLS1odC1tZW51LXNoYWRvdy1jb2xvciwjMDAw''@;'; put 'put ''KXZhcigtLWh0LW1lbnUtc2hhZG93LW9wYWNpdHksMTAwJSksdHJhbnNwYXJlbnQpO2JvcmRlcjp2YXIoLS1odC1tZW51LWJvcmRlci13aWR0aCwxcHgpc29saWQgdmFyKC0taHQtbWVudS1ib3JkZXItY29sb3IsI2U1ZTVlOSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1odC1tZW51LWJvcmRlci1y''@;'; put 'put ''YWRpdXMpO3BhZGRpbmc6dmFyKC0taHQtbWVudS12ZXJ0aWNhbC1wYWRkaW5nLDhweCl2YXIoLS1odC1tZW51LWhvcml6b250YWwtcGFkZGluZywwKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWJhY2tncm91bmQtY29sb3IsI2ZmZik7b3ZlcmZsb3c6aGlkZGVufS5oYW5kc29udGFibGUu''@;'; put 'put ''aHREcm9wZG93bk1lbnU6bm90KC5odEdob3N0VGFibGUpLC5oYW5kc29udGFibGUuaHRDb250ZXh0TWVudTpub3QoLmh0R2hvc3RUYWJsZSksLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudTpub3QoLmh0R2hvc3RUYWJsZSl7ei1pbmRleDoxMDYwO2Rpc3BsYXk6bm9uZTtw''@;'; put 'put ''b3NpdGlvbjphYnNvbHV0ZX0uaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV90b3AsLmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSAuaHRfY2xvbmVfYm90dG9tLC5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgLmh0X2Nsb25lX2lubGluZV9zdGFydCwuaGFuZHNv''@;'; put 'put ''bnRhYmxlLmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciwuaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgLmh0X2Nsb25lX3RvcCwu''@;'; put 'put ''aGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgLmh0X2Nsb25lX2JvdHRvbSwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgLmh0X2Nsb25lX2lubGluZV9zdGFydCwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgLmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyLC5oYW5kc29u''@;'; put 'put ''dGFibGUuaHRDb250ZXh0TWVudSAuaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSAuaHRfY2xvbmVfdG9wLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLmh0X2Nsb25lX2JvdHRvbSwu''@;'; put 'put ''aGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IC5odF9jbG9uZV9pbmxpbmVfc3RhcnQsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSAuaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25z''@;'; put 'put ''TWVudSAuaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXJ7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUuaHRDb3JlLC5oYW5kc29udGFibGUuaHRDb250ZXh0TWVudSB0YWJsZS5odENvcmUsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25k''@;'; put 'put ''aXRpb25zTWVudSB0YWJsZS5odENvcmV7b3ZlcmZsb3c6aGlkZGVufS5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgLmh0Q3VzdG9tTWVudVJlbmRlcmVyIC50YWJsZS5odENvcmUsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IC5odEN1c3RvbU1lbnVSZW5kZXJlciAudGFibGUuaHRD''@;'; put 'put ''b3JlLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLmh0Q3VzdG9tTWVudVJlbmRlcmVyIC50YWJsZS5odENvcmV7Ym94LXNoYWRvdzpub25lfS5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUuaGFuZHNvbnRhYmxlOmZvY3VzLC5oYW5kc29udGFibGUuaHRDb250ZXh0''@;'; put 'put ''TWVudS5oYW5kc29udGFibGU6Zm9jdXMsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudS5oYW5kc29udGFibGU6Zm9jdXN7b3V0bGluZTpub25lfS5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgLnd0Qm9yZGVyLC5oYW5kc29udGFibGUuaHRDb250ZXh0TWVudSAud3RC''@;'; put 'put ''b3JkZXIsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSAud3RCb3JkZXJ7dmlzaWJpbGl0eTpoaWRkZW59LmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSB0Ym9keSB0cjpmaXJzdC1vZi10eXBlIHRkOmZpcnN0LWNoaWxkLC5oYW5kc29udGFibGUuaHREcm9wZG93bk1l''@;'; put 'put ''bnUgdGJvZHkgdHI6Zmlyc3Qtb2YtdHlwZSB0aDpmaXJzdC1jaGlsZCwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgdGJvZHkgdHI6Zmlyc3Qtb2YtdHlwZSB0ZDpmaXJzdC1jaGlsZCwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgdGJvZHkgdHI6Zmlyc3Qtb2YtdHlwZSB0aDpmaXJz''@;'; put 'put ''dC1jaGlsZCwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRib2R5IHRyOmZpcnN0LW9mLXR5cGUgdGQ6Zmlyc3QtY2hpbGQsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0Ym9keSB0cjpmaXJzdC1vZi10eXBlIHRoOmZpcnN0LWNoaWxke2hlaWdo''@;'; put 'put ''dDpjYWxjKHZhcigtLWh0LWNlbGwtdmVydGljYWwtcGFkZGluZykqMiArIHZhcigtLWh0LWxpbmUtaGVpZ2h0KSArIDFweCl9LmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQs''@;'; put 'put ''LmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZHtwYWRkaW5nOnZhcigtLWh0LW1lbnUtaXRlbS12ZXJ0aWNhbC1wYWRkaW5nLDRweCl2YXIoLS1odC1tZW51LWl0ZW0taG9yaXpvbnRhbC1wYWRkaW5nLDhweCk7d2hpdGUtc3BhY2U6bm93cmFw''@;'; put 'put ''O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7YmFja2dyb3VuZDp2YXIoLS1odC1iYWNrZ3JvdW5kLWNvbG9yLCNmZmYpO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246dmFyKC0taHQtdGFibGUtdHJhbnNpdGlvbiliYWNrZ3JvdW5kIGVhc2UtaW4tb3V0O2JvcmRlci13aWR0aDowO3Bvc2l0aW9u''@;'; put 'put ''OnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkOmZpcnN0LWNoaWxkLC5oYW5kc29udGFibGUuaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpmaXJzdC1jaGlsZCwuaGFuZHNvbnRhYmxlLmh0RmlsdGVy''@;'; put 'put ''c0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkOmZpcnN0LWNoaWxke2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItaW5saW5lLWVuZC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtib3JkZXItaW5saW5lLXN0YXJ0LXdpZHRoOjB9LmhhbmRzb250YWJsZS5odERyb3Bkb3du''@;'; put 'put ''TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpbW1lZCwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaW1tZWQsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpbW1lZHtmb250LXN0eWxlOm5v''@;'; put 'put ''cm1hbDtjb2xvcjppbmhlcml0IWltcG9ydGFudDtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQhaW1wb3J0YW50fS5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQ6bm90KC5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRD''@;'; put 'put ''dXN0b21NZW51UmVuZGVyZXIsLmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVkLC5oYW5kc29udGFibGUuaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odEN1c3RvbU1lbnVSZW5kZXJlciwuaGFuZHNvbnRhYmxlLmh0Q29udGV4''@;'; put 'put ''dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZCwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0Q3VzdG9tTWVudVJlbmRlcmVyLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIg''@;'; put 'put ''dGQuaHREaXNhYmxlZCk6aG92ZXIsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkOm5vdCguaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0Q3VzdG9tTWVudVJlbmRlcmVyLC5oYW5kc29udGFibGUuaHREcm9wZG93bk1l''@;'; put 'put ''bnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZCwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRDdXN0b21NZW51UmVuZGVyZXIsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQsLmhhbmRzb250''@;'; put 'put ''YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odEN1c3RvbU1lbnVSZW5kZXJlciwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQpOmhvdmVyLC5oYW5kc29udGFibGUuaHRGaWx0ZXJz''@;'; put 'put ''Q29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQ6bm90KC5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRDdXN0b21NZW51UmVuZGVyZXIsLmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVkLC5o''@;'; put 'put ''YW5kc29udGFibGUuaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odEN1c3RvbU1lbnVSZW5kZXJlciwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZCwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxl''@;'; put 'put ''IHRib2R5IHRyIHRkLmh0Q3VzdG9tTWVudVJlbmRlcmVyLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZCk6aG92ZXJ7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1odC1tZW51''@;'; put 'put ''LWl0ZW0taG92ZXItY29sb3IpdmFyKC0taHQtbWVudS1pdGVtLWhvdmVyLWNvbG9yLW9wYWNpdHksMTAwJSksdHJhbnNwYXJlbnQpIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkOm5vdCguaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51''@;'; put 'put ''IHRhYmxlIHRib2R5IHRyIHRkLmh0Q3VzdG9tTWVudVJlbmRlcmVyLC5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZCwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRDdXN0b21NZW51UmVuZGVyZXIs''@;'; put 'put ''LmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odEN1c3RvbU1lbnVSZW5kZXJlciwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlv''@;'; put 'put ''bnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQpLmN1cnJlbnQ6bm90KFthcmlhLWV4cGFuZGVkPXRydWVdKSwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQ6bm90KC5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIg''@;'; put 'put ''dGQuaHRDdXN0b21NZW51UmVuZGVyZXIsLmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVkLC5oYW5kc29udGFibGUuaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odEN1c3RvbU1lbnVSZW5kZXJlciwuaGFuZHNvbnRhYmxlLmh0''@;'; put 'put ''Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZCwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0Q3VzdG9tTWVudVJlbmRlcmVyLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJv''@;'; put 'put ''ZHkgdHIgdGQuaHREaXNhYmxlZCkuY3VycmVudDpub3QoW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0pLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQ6bm90KC5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRD''@;'; put 'put ''dXN0b21NZW51UmVuZGVyZXIsLmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVkLC5oYW5kc29udGFibGUuaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odEN1c3RvbU1lbnVSZW5kZXJlciwuaGFuZHNvbnRhYmxlLmh0Q29udGV4''@;'; put 'put ''dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZCwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0Q3VzdG9tTWVudVJlbmRlcmVyLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIg''@;'; put 'put ''dGQuaHREaXNhYmxlZCkuY3VycmVudDpub3QoW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0pe2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHZhcigtLWh0LWFjY2VudC1jb2xvcil9LmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFN1Ym1lbnUgLmh0SXRlbVdy''@;'; put 'put ''YXBwZXIsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0U3VibWVudSAuaHRJdGVtV3JhcHBlciwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0U3VibWVudSAuaHRJdGVtV3JhcHBlcnttYXJnaW4t''@;'; put 'put ''aW5saW5lLWVuZDpjYWxjKDIqdmFyKC0taHQtZ2FwLXNpemUsNHB4KSArIHZhcigtLWh0LWljb24tc2l6ZSkpfS5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRTdWJtZW51IC5odEl0ZW1XcmFwcGVyOmFmdGVyLC5oYW5kc29udGFibGUuaHRDb250ZXh0''@;'; put 'put ''TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFN1Ym1lbnUgLmh0SXRlbVdyYXBwZXI6YWZ0ZXIsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFN1Ym1lbnUgLmh0SXRlbVdyYXBwZXI6YWZ0ZXJ7Y29udGVudDoiIjt0b3A6NTAlO3JpZ2h0''@;'; put 'put ''OmNhbGModmFyKC0taHQtbWVudS1pdGVtLWhvcml6b250YWwtcGFkZGluZykgKyB2YXIoLS1odC1nYXAtc2l6ZSkqMik7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0uaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IHRhYmxlIHRi''@;'; put 'put ''b2R5IHRyIHRkLmh0U2VwYXJhdG9yLC5oYW5kc29udGFibGUuaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFNlcGFyYXRvciwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0U2VwYXJhdG9ye2JvcmRlci10b3A6MXB4IHNv''@;'; put 'put ''bGlkIHZhcigtLWh0LWJvcmRlci1jb2xvcik7Y3Vyc29yOmRlZmF1bHQ7aGVpZ2h0OjA7cGFkZGluZzowfS5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZCwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQu''@;'; put 'put ''aHREaXNhYmxlZCwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWR7Y29sb3I6dmFyKC0taHQtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpkZWZhdWx0fS5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkg''@;'; put 'put ''dHIgdGQuaHREaXNhYmxlZDpob3ZlciwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZDpob3ZlciwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQ6aG92ZXJ7YmFja2dy''@;'; put 'put ''b3VuZDp2YXIoLS1odC1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1odC1kaXNhYmxlZC1jb2xvcil9LmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odEhpZGRlbiwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQu''@;'; put 'put ''aHRIaWRkZW4sLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odEhpZGRlbntkaXNwbGF5Om5vbmV9OmlzKC5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQ6aGFzKC5odEl0ZW1XcmFwcGVyIC5zZWxlY3Rl''@;'; put 'put ''ZCksLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkOmhhcyguaHRJdGVtV3JhcHBlciAuc2VsZWN0ZWQpLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQ6aGFzKC5odEl0ZW1XcmFwcGVyIC5zZWxlY3RlZCkp''@;'; put 'put ''e2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0taHQtbWVudS1pdGVtLWFjdGl2ZS1jb2xvcil2YXIoLS1odC1tZW51LWl0ZW0tYWN0aXZlLWNvbG9yLW9wYWNpdHksMTAwJSksdHJhbnNwYXJlbnQpfS5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJv''@;'; put 'put ''ZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXIsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVyLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXJ7bWFyZ2luLWlu''@;'; put 'put ''bGluZTpjYWxjKDIqdmFyKC0taHQtZ2FwLXNpemUsNHB4KSl9LmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCAuaHRJdGVtV3JhcHBlcjpiZWZvcmUsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVy''@;'; put 'put ''OmJlZm9yZSwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVyOmJlZm9yZXt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbTttYXJnaW4tcmlnaHQ6MTJweH0uaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IHRhYmxl''@;'; put 'put ''IHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVyIHNwYW4uc2VsZWN0ZWQsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVyIHNwYW4uc2VsZWN0ZWQsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9k''@;'; put 'put ''eSB0ciB0ZCAuaHRJdGVtV3JhcHBlciBzcGFuLnNlbGVjdGVke2ZvbnQtc2l6ZTowO2luc2V0OjB9LmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCAuaHRJdGVtV3JhcHBlciBzcGFuLnNlbGVjdGVkOmFmdGVyLC5oYW5kc29udGFibGUuaHRDb250ZXh0TWVu''@;'; put 'put ''dSB0YWJsZSB0Ym9keSB0ciB0ZCAuaHRJdGVtV3JhcHBlciBzcGFuLnNlbGVjdGVkOmFmdGVyLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXIgc3Bhbi5zZWxlY3RlZDphZnRlcntjb250ZW50OiIiO3RvcDo1MCU7''@;'; put 'put ''cmlnaHQ6Y2FsYyh2YXIoLS1odC1tZW51LWl0ZW0taG9yaXpvbnRhbC1wYWRkaW5nKSArIHZhcigtLWh0LWdhcC1zaXplKSoyKTtjb2xvcjp2YXIoLS1odC1hY2NlbnQtY29sb3IpO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lmhh''@;'; put 'put ''bmRzb250YWJsZS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBkaXYgc3Bhbi5zZWxlY3RlZCwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQgZGl2IHNwYW4uc2VsZWN0ZWQsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0''@;'; put 'put ''YWJsZSB0Ym9keSB0ciB0ZCBkaXYgc3Bhbi5zZWxlY3RlZHtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldC1pbmxpbmUtZW5kOjB9LmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCAuaHRVSUJ1dHRvbiwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgdGFibGUg''@;'; put 'put ''dGJvZHkgdHIgdGQgLmh0VUlCdXR0b24sLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCAuaHRVSUJ1dHRvbnt3aWR0aDpjYWxjKDUwJSAtIHZhcigtLWh0LWdhcC1zaXplKSl9LmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSB0YWJsZSB0''@;'; put 'put ''Ym9keSB0ciB0ZCAuaHRVSUJ1dHRvbiBpbnB1dCwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0VUlCdXR0b24gaW5wdXQsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCAuaHRVSUJ1dHRvbiBpbnB1''@;'; put 'put ''dHt3aWR0aDoxMDAlfS5oYW5kc29udGFibGUgLmh0VUlDbGVhckFsbCBhLC5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RBbGwgYXtwYWRkaW5nOnZhcigtLWh0LWdhcC1zaXplKTt0ZXh0LWRlY29yYXRpb246bm9uZTtkaXNwbGF5OmlubGluZS1ibG9ja30uaGFuZHNvbnRhYmxlIC5odFVJTXVs''@;'; put 'put ''dGlwbGVTZWxlY3QgLmh0X21hc3RlciAud3RIb2xkZXJ7YmFja2dyb3VuZDowIDA7Ym9yZGVyLXJhZGl1czowIWltcG9ydGFudDtvdmVyZmxvdy15OnNjcm9sbCFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAuaHRVSU11bHRpcGxlU2VsZWN0IC5odF9tYXN0ZXIgLnd0SG9sZGVyIC5odENvcmV7''@;'; put 'put ''Ym94LXNoYWRvdzpub25lfVtkaXI9cnRsXS5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRTdWJtZW51IC5odEl0ZW1XcmFwcGVyOmFmdGVyLFtkaXI9cnRsXS5oYW5kc29udGFibGUuaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFN1Ym1l''@;'; put 'put ''bnUgLmh0SXRlbVdyYXBwZXI6YWZ0ZXIsW2Rpcj1ydGxdLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFN1Ym1lbnUgLmh0SXRlbVdyYXBwZXI6YWZ0ZXJ7bGVmdDpjYWxjKDQqdmFyKC0taHQtZ2FwLXNpemUpKTtyaWdodDphdXRvO3Ry''@;'; put 'put ''YW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpcm90YXRlKDE4MGRlZyl9W2Rpcj1ydGxdLmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCAuaHRJdGVtV3JhcHBlciBzcGFuLnNlbGVjdGVkOmFmdGVyLFtkaXI9cnRsXS5oYW5kc29udGFibGUuaHRDb250ZXh0TWVu''@;'; put 'put ''dSB0YWJsZSB0Ym9keSB0ciB0ZCAuaHRJdGVtV3JhcHBlciBzcGFuLnNlbGVjdGVkOmFmdGVyLFtkaXI9cnRsXS5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXIgc3Bhbi5zZWxlY3RlZDphZnRlcntsZWZ0OmNhbGMo''@;'; put 'put ''NCp2YXIoLS1odC1nYXAtc2l6ZSkpO3JpZ2h0OmF1dG99LmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudTpub3QoLmh0R2hvc3RUYWJsZSl7ei1pbmRleDoxMDcwfS5oYW5kc29udGFibGUgLmh0X21hc3RlciB0YWJsZSB0ZC5odEN1c3RvbU1lbnVSZW5kZXJlcntjdXJzb3I6''@;'; put 'put ''YXV0b30uaGFuZHNvbnRhYmxlIC5odF9tYXN0ZXIgdGFibGUgdGQuaHRDdXN0b21NZW51UmVuZGVyZXIuaHRGaWx0ZXJzTWVudUFjdGlvbkJhcntwYWRkaW5nLXRvcDpjYWxjKHZhcigtLWh0LW1lbnUtaXRlbS12ZXJ0aWNhbC1wYWRkaW5nLDRweCkqMil9LmhhbmRzb250YWJsZSAuaHRGaWx0''@;'; put 'put ''ZXJzTWVudUxhYmVse2ZvbnQtc2l6ZTp2YXIoLS1odC1mb250LXNpemUtc21hbGwpO2xpbmUtaGVpZ2h0OnZhcigtLWh0LWxpbmUtaGVpZ2h0LXNtYWxsKTtmb250LXdlaWdodDp2YXIoLS1odC1mb250LXdlaWdodCk7bWFyZ2luLWJvdHRvbTpjYWxjKHZhcigtLWh0LWdhcC1zaXplLDJweCkq''@;'; put 'put ''Mil9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudUxhYmVsOmVtcHR5e2Rpc3BsYXk6bm9uZX0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51Q29uZGl0aW9ue3BhZGRpbmctdG9wOmNhbGModmFyKC0taHQtZ2FwLXNpemUsMnB4KSozKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFp''@;'; put 'put ''bXBvcnRhbnR9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudUNvbmRpdGlvbiAuYm9yZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWh0LWJvcmRlci1jb2xvcikhaW1wb3J0YW50fS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVDb25kaXRpb24gLmh0VUlJbnB1dHttYXJn''@;'; put 'put ''aW4tdG9wOmNhbGModmFyKC0taHQtZ2FwLXNpemUsMnB4KSoyKX0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51VmFsdWV7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1odC1nYXAtc2l6ZSwycHgpKjMpIWltcG9ydGFudDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1odC1ib3JkZXIt''@;'; put 'put ''Y29sb3IpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51T3BlcmF0b3Jze3BhZGRpbmctdG9wOmNhbGModmFyKC0taHQtZ2FwLXNpemUsMnB4KSoyKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9Lmhh''@;'; put 'put ''bmRzb250YWJsZSAuaHRVSVNlbGVjdGlvbkNvbnRyb2xze21hcmdpbjowIGNhbGModmFyKC0taHQtZ2FwLXNpemUsMnB4KSotMSk7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1odC1nYXAtc2l6ZSwycHgpKjIpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1odC1nYXAtc2l6ZSwycHgp''@;'; put 'put ''IWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIC5odFVJTXVsdGlwbGVTZWxlY3RIb3R7LS1odC1jZWxsLWhvcml6b250YWwtcGFkZGluZzpjYWxjKHZhcigtLWh0LW1lbnUtaXRlbS1ob3Jpem9udGFsLXBhZGRpbmcsMnB4KSArIHZhcigtLWh0LWdhcC1zaXplLDJweCkqMik7d2lkdGg6Y2FsYygx''@;'; put 'put ''MDAlICsgdmFyKC0taHQtbWVudS1pdGVtLWhvcml6b250YWwtcGFkZGluZywycHgpKjIgKyB2YXIoLS1odC1nYXAtc2l6ZSwycHgpKjQpO21hcmdpbjowIGNhbGMoKHZhcigtLWh0LW1lbnUtaXRlbS1ob3Jpem9udGFsLXBhZGRpbmcsMnB4KSArIHZhcigtLWh0LWdhcC1zaXplLDJweCkqMikq''@;'; put 'put ''LTEpO292ZXJmbG93OmluaXRpYWwhaW1wb3J0YW50fS5oYW5kc29udGFibGUgLmh0VUlNdWx0aXBsZVNlbGVjdEhvdDpiZWZvcmV7Y29udGVudDoiIjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWJvcmRlci1jb2xvcik7d2lkdGg6MTAwJTtoZWlnaHQ6MXB4O2Rpc3BsYXk6YmxvY2s7cG9z''@;'; put 'put ''aXRpb246YWJzb2x1dGU7dG9wOi0xcHg7bGVmdDowfS5oYW5kc29udGFibGUgLmh0VUlNdWx0aXBsZVNlbGVjdEhvdCAud3RIb2xkZXJ7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MDtvdmVyZmxvdy14OmhpZGRlbn0uaGFuZHNvbnRhYmxlIC5odFVJTXVsdGlwbGVTZWxlY3RIb3Qg''@;'; put 'put ''Lnd0SG9sZGVyIC53dFNwcmVhZGVye3BhZGRpbmc6Y2FsYyh2YXIoLS1odC1nYXAtc2l6ZSkqMikwfS5oYW5kc29udGFibGUgLmh0VUlNdWx0aXBsZVNlbGVjdEhvdCAud3RIb2xkZXIgdGR7cGFkZGluZzo0cHggdmFyKC0taHQtY2VsbC1ob3Jpem9udGFsLXBhZGRpbmcpO2hlaWdodDphdXRv''@;'; put 'put ''IWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIC5odFVJQ2xlYXJBbGwsLmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdEFsbHttYXJnaW4tcmlnaHQ6dmFyKC0taHQtZ2FwLXNpemUsNHB4KTttYXJnaW4tYm90dG9tOnZhcigtLWh0LWdhcC1zaXplLDRweCk7ZGlzcGxheTppbmxpbmUtYmxvY2t9Lmhh''@;'; put 'put ''bmRzb250YWJsZSAuaHRVSUNsZWFyQWxsIGEsLmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdEFsbCBhe2ZvbnQtc2l6ZTp2YXIoLS1odC1mb250LXNpemUpO2xpbmUtaGVpZ2h0OnZhcigtLWh0LWxpbmUtaGVpZ2h0KTtjb2xvcjp2YXIoLS1odC1saW5rLWNvbG9yKTtib3JkZXItcmFkaXVzOnZh''@;'; put 'put ''cigtLWh0LWJ1dHRvbi1ib3JkZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlIC5odFVJQ2xlYXJBbGwgYTpob3ZlciwuaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0QWxsIGE6aG92ZXJ7Y29sb3I6dmFyKC0taHQtbGluay1ob3Zlci1jb2xvcil9LmhhbmRzb250YWJsZSAuaHRVSUNsZWFyQWxsIGE6''@;'; put 'put ''Zm9jdXMsLmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdEFsbCBhOmZvY3Vze291dGxpbmU6MXB4IHNvbGlkIHZhcigtLWh0LWxpbmstaG92ZXItY29sb3IpfS5oYW5kc29udGFibGUgLmh0VUlNdWx0aXBsZVNlbGVjdCAuaHRfbWFzdGVyIC53dEhvbGRlcntvdmVyZmxvdzphdXRvfS5oYW5kc29u''@;'; put 'put ''dGFibGUgLmh0VUlNdWx0aXBsZVNlbGVjdCAuaHRfbWFzdGVyIC53dEhvbGRlciAud3RIaWRlciwuaGFuZHNvbnRhYmxlIC5odFVJTXVsdGlwbGVTZWxlY3QgLmh0X21hc3RlciAud3RIb2xkZXIgLmh0Q29yZSwuaGFuZHNvbnRhYmxlIC5odFVJTXVsdGlwbGVTZWxlY3QgLmh0X21hc3RlciAu''@;'; put 'put ''d3RIb2xkZXIgdHIsLmhhbmRzb250YWJsZSAuaHRVSU11bHRpcGxlU2VsZWN0IC5odF9tYXN0ZXIgLnd0SG9sZGVyIHRke2JhY2tncm91bmQ6MCAwfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9ue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5oYW5kc29u''@;'; put 'put ''dGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uT0t7bWFyZ2luLWlubGluZS1zdGFydDowO21hcmdpbi1pbmxpbmUtZW5kOmNhbGMoMip2YXIoLS1odC1nYXAtc2l6ZSwycHgpKX0uaGFuZHNvbnRhYmxlIC5odENvbW1lbnRDZWxse3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgLmh0''@;'; put 'put ''Q29tbWVudENlbGw6YWZ0ZXJ7Y29udGVudDoiIjt0b3A6MDtib3JkZXItaW5saW5lLXN0YXJ0OnZhcigtLWh0LWNvbW1lbnRzLWluZGljYXRvci1zaXplLDRweClzb2xpZCAjMDAwMDtib3JkZXItaW5saW5lLWVuZDpub25lO2JvcmRlci10b3A6dmFyKC0taHQtY29tbWVudHMtaW5kaWNhdG9y''@;'; put 'put ''LXNpemUsNHB4KXNvbGlkIHZhcigtLWh0LWNvbW1lbnRzLWluZGljYXRvci1jb2xvciwjMWE0MmU4KTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0LWlubGluZS1zdGFydDp1bnNldDtpbnNldC1pbmxpbmUtZW5kOjB9Lmh0Q29tbWVudHNDb250YWluZXIgLmh0Q29tbWVu''@;'; put 'put ''dHN7ei1pbmRleDoxMDU5O2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZX0uaHRDb21tZW50c0NvbnRhaW5lciAuaHRDb21tZW50VGV4dEFyZWF7Zm9udC1mYW1pbHk6dmFyKC0taHQtZm9udC1mYW1pbHkpLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCJTZWdvZSBVSSIs''@;'; put 'put ''c2Fucy1zZXJpZjtib3gtc2hhZG93OnZhcigtLWh0LW1lbnUtc2hhZG93LXgsMCl2YXIoLS1odC1tZW51LXNoYWRvdy15LDApdmFyKC0taHQtbWVudS1zaGFkb3ctYmx1ciw4cHgpY29sb3ItbWl4KGluIHNyZ2IsdmFyKC0taHQtbWVudS1zaGFkb3ctY29sb3IsIzAwMCl2YXIoLS1odC1tZW51''@;'; put 'put ''LXNoYWRvdy1vcGFjaXR5LDEwMCUpLHRyYW5zcGFyZW50KTt3aWR0aDoyNDBweDtoZWlnaHQ6ODhweDtmb250LXNpemU6dmFyKC0taHQtZm9udC1zaXplKTtsaW5lLWhlaWdodDp2YXIoLS1odC1saW5lLWhlaWdodCk7Zm9udC13ZWlnaHQ6dmFyKC0taHQtZm9udC13ZWlnaHQpO3BhZGRpbmc6''@;'; put 'put ''dmFyKC0taHQtY29tbWVudHMtdGV4dGFyZWEtdmVydGljYWwtcGFkZGluZyl2YXIoLS1odC1jb21tZW50cy10ZXh0YXJlYS1ob3Jpem9udGFsLXBhZGRpbmcpO2JvcmRlcjp2YXIoLS1odC1jb21tZW50cy10ZXh0YXJlYS1ib3JkZXItd2lkdGgsMXB4KXNvbGlkIHZhcigtLWh0LWNvbW1lbnRz''@;'; put 'put ''LXRleHRhcmVhLWJvcmRlci1jb2xvcix0cmFuc3BhcmVudCk7Ym9yZGVyLWlubGluZS1zdGFydDp2YXIoLS1odC1jb21tZW50cy10ZXh0YXJlYS1ib3JkZXItd2lkdGgsMXB4KXNvbGlkIHZhcigtLWh0LWNvbW1lbnRzLXRleHRhcmVhLWJvcmRlci1jb2xvciwjMWE0MmU4KTtjb2xvcjp2YXIo''@;'; put 'put ''LS1odC1jb21tZW50cy10ZXh0YXJlYS1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWNvbW1lbnRzLXRleHRhcmVhLWJhY2tncm91bmQtY29sb3IsI2ZmZik7Ym94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowIC0x''@;'; put 'put ''cHg7b3V0bGluZTowIWltcG9ydGFudH0uaHRDb21tZW50c0NvbnRhaW5lciAuaHRDb21tZW50VGV4dEFyZWE6Zm9jdXN7Ym9yZGVyOnZhcigtLWh0LWNvbW1lbnRzLXRleHRhcmVhLWZvY3VzLWJvcmRlci13aWR0aCwxcHgpc29saWQgdmFyKC0taHQtY29tbWVudHMtdGV4dGFyZWEtZm9jdXMt''@;'; put 'put ''Ym9yZGVyLWNvbG9yLCMxYTQyZTgpO2NvbG9yOnZhcigtLWh0LWNvbW1lbnRzLXRleHRhcmVhLWZvY3VzLWZvcmVncm91bmQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtY29tbWVudHMtdGV4dGFyZWEtZm9jdXMtYmFja2dyb3VuZC1jb2xvciwjZmZmKX0uaHRCb3JkZXJzIC53''@;'; put 'put ''dEJvcmRlci5odC1ib3JkZXItc3R5bGUtZGFzaGVkLXZlcnRpY2Fse2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdmFyKC0taHQtY3VzdG9tLWJvcmRlci1jb2xvcikwIDVweCx0cmFuc3BhcmVudCAwIDEwcHgpfS5odEJvcmRlcnMgLnd0Qm9y''@;'; put 'put ''ZGVyLmh0LWJvcmRlci1zdHlsZS1kYXNoZWQtaG9yaXpvbnRhbHtiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0taHQtY3VzdG9tLWJvcmRlci1jb2xvcikwIDVweCx0cmFuc3BhcmVudCAwIDEwcHgpfS5odEJvcmRlcnMgLnd0Qm9yZGVy''@;'; put 'put ''Lmh0LWJvcmRlci1zdHlsZS1kb3R0ZWQtaG9yaXpvbnRhbHtiYWNrZ3JvdW5kLWltYWdlOnJhZGlhbC1ncmFkaWVudChjaXJjbGUsdmFyKC0taHQtY3VzdG9tLWJvcmRlci1jb2xvciljYWxjKHZhcigtLWh0LWN1c3RvbS1ib3JkZXItc2l6ZSkvMiksdHJhbnNwYXJlbnQgMCk7YmFja2dyb3Vu''@;'; put 'put ''ZC1zaXplOmNhbGModmFyKC0taHQtY3VzdG9tLWJvcmRlci1zaXplKSoyKXZhcigtLWh0LWN1c3RvbS1ib3JkZXItc2l6ZSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Lmh0Qm9yZGVycyAud3RCb3JkZXIuaHQtYm9yZGVyLXN0eWxlLWRvdHRlZC12ZXJ0aWNhbHtiYWNrZ3JvdW5kLWlt''@;'; put 'put ''YWdlOnJhZGlhbC1ncmFkaWVudChjaXJjbGUsdmFyKC0taHQtY3VzdG9tLWJvcmRlci1jb2xvciljYWxjKHZhcigtLWh0LWN1c3RvbS1ib3JkZXItc2l6ZSkvMiksdHJhbnNwYXJlbnQgMCk7YmFja2dyb3VuZC1zaXplOnZhcigtLWh0LWN1c3RvbS1ib3JkZXItc2l6ZSljYWxjKHZhcigtLWh0''@;'; put 'put ''LWN1c3RvbS1ib3JkZXItc2l6ZSkqMik7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXl9LmhhbmRzb250YWJsZSAuY29sdW1uU29ydGluZzpub3QoLmluZGljYXRvckRpc2FibGVkKXtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIC5jb2x1bW5Tb3J0aW5nOm5vdCguaW5kaWNhdG9y''@;'; put 'put ''RGlzYWJsZWQpLnNvcnRBY3Rpb24uYXNjZW5kaW5nLC5oYW5kc29udGFibGUgLmNvbHVtblNvcnRpbmc6bm90KC5pbmRpY2F0b3JEaXNhYmxlZCkuc29ydEFjdGlvbi5kZXNjZW5kaW5ne3BhZGRpbmctaW5saW5lLWVuZDpjYWxjKHZhcigtLWh0LWljb24tc2l6ZSwxNnB4KSArIDJweCl9Lmhh''@;'; put 'put ''bmRzb250YWJsZSAuY29sdW1uU29ydGluZzpub3QoLmluZGljYXRvckRpc2FibGVkKS5zb3J0QWN0aW9uOmhvdmVye2N1cnNvcjpwb2ludGVyO3RleHQtZGVjb3JhdGlvbjpub25lfS5oYW5kc29udGFibGUgLmNvbHVtblNvcnRpbmc6bm90KC5pbmRpY2F0b3JEaXNhYmxlZCkuc29ydEFjdGlv''@;'; put 'put ''bjpiZWZvcmV7Y29udGVudDoiIjt3aWR0aDp2YXIoLS1odC1pY29uLXNpemUsMTZweCk7dGV4dC1hbGlnbjpyaWdodDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MnB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfS5oYW5kc29udGFibGUgLmh0Umln''@;'; put 'put ''aHQgLmNvbHVtblNvcnRpbmcuc29ydEFjdGlvbi5hc2NlbmRpbmcsLmhhbmRzb250YWJsZSAuaHRSaWdodCAuY29sdW1uU29ydGluZy5zb3J0QWN0aW9uLmRlc2NlbmRpbmd7cGFkZGluZy1pbmxpbmUtc3RhcnQ6Y2FsYyh2YXIoLS1odC1pY29uLXNpemUsMTZweCkgKyAycHgpO3BhZGRpbmct''@;'; put 'put ''aW5saW5lLWVuZDowfS5oYW5kc29udGFibGUgLmh0UmlnaHQgLmNvbHVtblNvcnRpbmcuc29ydEFjdGlvbjpiZWZvcmUsW2Rpcj1ydGxdIC5oYW5kc29udGFibGUgLmNvbHVtblNvcnRpbmcuc29ydEFjdGlvbjpiZWZvcmV7dGV4dC1hbGlnbjpsZWZ0O2xlZnQ6MnB4O3JpZ2h0OmF1dG99W2Rp''@;'; put 'put ''cj1ydGxdIC5oYW5kc29udGFibGUgLmh0UmlnaHQgLmNvbHVtblNvcnRpbmcuc29ydEFjdGlvbi5hc2NlbmRpbmcsW2Rpcj1ydGxdIC5oYW5kc29udGFibGUgLmh0UmlnaHQgLmNvbHVtblNvcnRpbmcuc29ydEFjdGlvbi5kZXNjZW5kaW5ne3BhZGRpbmctaW5saW5lLXN0YXJ0OjA7cGFkZGlu''@;'; put 'put ''Zy1pbmxpbmUtZW5kOmNhbGModmFyKC0taHQtaWNvbi1zaXplLDE2cHgpICsgMnB4KX1bZGlyPXJ0bF0gLmhhbmRzb250YWJsZSAuaHRMZWZ0IC5jb2x1bW5Tb3J0aW5nLnNvcnRBY3Rpb24uYXNjZW5kaW5nLFtkaXI9cnRsXSAuaGFuZHNvbnRhYmxlIC5odExlZnQgLmNvbHVtblNvcnRpbmcu''@;'; put 'put ''c29ydEFjdGlvbi5kZXNjZW5kaW5ne3BhZGRpbmctaW5saW5lLXN0YXJ0OmNhbGModmFyKC0taHQtaWNvbi1zaXplLDE2cHgpICsgMnB4KTtwYWRkaW5nLWlubGluZS1lbmQ6MH1bZGlyPXJ0bF0gLmhhbmRzb250YWJsZSAuaHRMZWZ0IC5jb2x1bW5Tb3J0aW5nLnNvcnRBY3Rpb246YmVmb3Jl''@;'; put 'put ''e3RleHQtYWxpZ246cmlnaHQ7bGVmdDphdXRvO3JpZ2h0OjJweH0uaHRHaG9zdFRhYmxlIC5odENvcmUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZzpub3QoLmluZGljYXRvckRpc2FibGVkKTpiZWZvcmV7Y29udGVudDoiKiI7cGFkZGluZy1pbmxpbmUtZW5kOmNhbGModmFyKC0taHQt''@;'; put 'put ''aWNvbi1zaXplLDE2cHgpICsgMnB4KTtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIC5jb2xIZWFkZXIuY29sdW1uU29ydGluZzphZnRlcntjb250ZW50OiIiO3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6OHB4O21hcmdpbi10b3A6NHB4O2ZvbnQt''@;'; put 'put ''c2l6ZTo4cHg7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9LmhhbmRzb250YWJsZSAuY29sSGVhZGVyLmNvbHVtblNvcnRpbmdbY2xhc3NePXNvcnQtXTphZnRlciwuaGFuZHNvbnRhYmxlIC5jb2xIZWFk''@;'; put 'put ''ZXIuY29sdW1uU29ydGluZ1tjbGFzcyo9XFwgc29ydC1dOmFmdGVye2NvbnRlbnQ6IisifS5oYW5kc29udGFibGUgLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtMTphZnRlcntjb250ZW50OiIxIn0uaGFuZHNvbnRhYmxlIC5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTI6YWZ0''@;'; put 'put ''ZXJ7Y29udGVudDoiMiJ9LmhhbmRzb250YWJsZSAuY29sSGVhZGVyLmNvbHVtblNvcnRpbmcuc29ydC0zOmFmdGVye2NvbnRlbnQ6IjMifS5oYW5kc29udGFibGUgLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtNDphZnRlcntjb250ZW50OiI0In0uaGFuZHNvbnRhYmxlIC5jb2xIZWFk''@;'; put 'put ''ZXIuY29sdW1uU29ydGluZy5zb3J0LTU6YWZ0ZXJ7Y29udGVudDoiNSJ9LmhhbmRzb250YWJsZSAuY29sSGVhZGVyLmNvbHVtblNvcnRpbmcuc29ydC02OmFmdGVye2NvbnRlbnQ6IjYifS5oYW5kc29udGFibGUgLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtNzphZnRlcntjb250ZW50''@;'; put 'put ''OiI3In0uaGFuZHNvbnRhYmxlIC5odFJpZ2h0IC5jb2xIZWFkZXIuY29sdW1uU29ydGluZzphZnRlcixbZGlyPXJ0bF0gLmhhbmRzb250YWJsZSAuY29sSGVhZGVyLmNvbHVtblNvcnRpbmc6YWZ0ZXJ7dGV4dC1hbGlnbjpsZWZ0O2xlZnQ6MDtyaWdodDphdXRvfVtkaXI9cnRsXSAuaGFuZHNv''@;'; put 'put ''bnRhYmxlIC5odExlZnQgLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nOmFmdGVye3RleHQtYWxpZ246cmlnaHQ7bGVmdDphdXRvO3JpZ2h0OjB9Lmh0R2hvc3RUYWJsZSB0aCBkaXY6aGFzKC5jaGFuZ2VUeXBlKSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nOm5vdCguaW5kaWNhdG9yRGlz''@;'; put 'put ''YWJsZWQpe3BhZGRpbmctaW5saW5lLWVuZDp2YXIoLS1odC1nYXAtc2l6ZSl9LmhhbmRzb250YWJsZSAuaHRSb3dIZWFkZXJzIC5odF9tYXN0ZXIuaW5uZXJCb3JkZXJJbmxpbmVTdGFydH4uaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIgdGg6bnRoLWNoaWxkKDIpLC5oYW5kc29u''@;'; put 'put ''dGFibGUgLmh0Um93SGVhZGVycyAuaHRfbWFzdGVyLmlubmVyQm9yZGVySW5saW5lU3RhcnR+Lmh0X2Nsb25lX2lubGluZV9zdGFydCB0ZDpmaXJzdC1vZi10eXBle2JvcmRlci1sZWZ0OjB9LmhhbmRzb250YWJsZSAuaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIgdGguaHRfX2Fj''@;'; put 'put ''dGl2ZV9oaWdobGlnaHR7Ym94LXNoYWRvdzpub25lfS5oYW5kc29udGFibGUgLm1hbnVhbENvbHVtblJlc2l6ZXJ7Y3Vyc29yOmNvbC1yZXNpemU7b3BhY2l0eTowO3otaW5kZXg6MjEwO2JhY2tncm91bmQ6MCAwO3dpZHRoOjEwcHg7bWFyZ2luOjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjB9''@;'; put 'put ''LmhhbmRzb250YWJsZSAubWFudWFsQ29sdW1uUmVzaXplcjpiZWZvcmUsLmhhbmRzb250YWJsZSAubWFudWFsQ29sdW1uUmVzaXplcjphZnRlcntjb250ZW50OiIiO2JhY2tncm91bmQ6dmFyKC0taHQtcmVzaXplLWluZGljYXRvci1jb2xvcik7Ym9yZGVyLXJhZGl1czoycHg7d2lkdGg6MnB4''@;'; put 'put ''O2hlaWdodDpjYWxjKDEwMCUgLSAxMnB4KTttYXgtaGVpZ2h0OjE2cHg7bWFyZ2luLXRvcDouNXB4O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjFweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0uaGFuZHNvbnRhYmxlIC5tYW51YWxDb2x1bW5SZXNp''@;'; put 'put ''emVyOmFmdGVye2xlZnQ6YXV0bztyaWdodDowfS5oYW5kc29udGFibGUgLm1hbnVhbENvbHVtblJlc2l6ZXI6aG92ZXIsLmhhbmRzb250YWJsZSAubWFudWFsQ29sdW1uUmVzaXplci5hY3RpdmV7b3BhY2l0eToxfS5oYW5kc29udGFibGUgLm1hbnVhbENvbHVtblJlc2l6ZXJHdWlkZXtpbnNl''@;'; put 'put ''dC1pbmxpbmUtZW5kOnVuc2V0O3dpZHRoOjA7Ym9yZGVyLWlubGluZS1lbmQ6MXB4IHNvbGlkIHZhcigtLWh0LWFjY2VudC1jb2xvcik7Ym9yZGVyLWlubGluZS1zdGFydDpub25lO21hcmdpbi1pbmxpbmUtc3RhcnQ6NXB4O21hcmdpbi1pbmxpbmUtZW5kOnVuc2V0O2Rpc3BsYXk6bm9uZTtw''@;'; put 'put ''b3NpdGlvbjphYnNvbHV0ZTt0b3A6MH0uaGFuZHNvbnRhYmxlIC5tYW51YWxDb2x1bW5SZXNpemVyR3VpZGUuYWN0aXZle3otaW5kZXg6MjA5O2Rpc3BsYXk6YmxvY2t9LmhhbmRzb250YWJsZSAubWFudWFsUm93UmVzaXplcnt6LWluZGV4OjIxMDtjdXJzb3I6cm93LXJlc2l6ZTtvcGFjaXR5''@;'; put 'put ''OjA7YmFja2dyb3VuZDowIDA7aGVpZ2h0OjEwcHg7bWFyZ2luOjA7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowfS5oYW5kc29udGFibGUgLm1hbnVhbFJvd1Jlc2l6ZXI6YmVmb3JlLC5oYW5kc29udGFibGUgLm1hbnVhbFJvd1Jlc2l6ZXI6YWZ0ZXJ7Y29udGVudDoiIjtiYWNrZ3JvdW5kOnZh''@;'; put 'put ''cigtLWh0LXJlc2l6ZS1pbmRpY2F0b3ItY29sb3IpO2JvcmRlci1yYWRpdXM6MnB4O3dpZHRoOmNhbGMoMTAwJSAtIDEycHgpO21heC13aWR0aDoxNnB4O2hlaWdodDoycHg7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MXB4O2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xh''@;'; put 'put ''dGUoLTUwJSl9LmhhbmRzb250YWJsZSAubWFudWFsUm93UmVzaXplcjphZnRlcnt0b3A6YXV0bztib3R0b206MH0uaGFuZHNvbnRhYmxlIC5tYW51YWxSb3dSZXNpemVyOmhvdmVyLC5oYW5kc29udGFibGUgLm1hbnVhbFJvd1Jlc2l6ZXIuYWN0aXZle29wYWNpdHk6MX0uaGFuZHNvbnRhYmxl''@;'; put 'put ''IC5tYW51YWxSb3dSZXNpemVyR3VpZGV7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0taHQtYWNjZW50LWNvbG9yKTtib3JkZXItdG9wOm5vbmU7aGVpZ2h0OjA7bWFyZ2luLXRvcDo1cHg7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MH0uaGFuZHNv''@;'; put 'put ''bnRhYmxlIC5tYW51YWxSb3dSZXNpemVyR3VpZGUuYWN0aXZle3otaW5kZXg6MjA5O2Rpc3BsYXk6YmxvY2t9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF06bm90KFtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxdKTpi''@;'; put 'put ''ZWZvcmV7b3BhY2l0eTowfS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC1tdWx0aXBsZV06YmVmb3JlLC5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3Mq''@;'; put 'put ''PWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC0wXTpiZWZvcmV7b3BhY2l0eTouMTR9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJn''@;'; put 'put ''ZWRDZWxsLTFdOmJlZm9yZXtvcGFjaXR5Oi4yMX0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtMl06YmVmb3Jle29wYWNpdHk6LjI4fS5oYW5kc29udGFibGUgdGJvZHkg''@;'; put 'put ''dGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC0zXTpiZWZvcmV7b3BhY2l0eTouMzV9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3Mq''@;'; put 'put ''PWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTRdOmJlZm9yZXtvcGFjaXR5Oi40Mn0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtNV06YmVmb3Jle29wYWNpdHk6LjQ5fS5o''@;'; put 'put ''YW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC02XTpiZWZvcmV7b3BhY2l0eTouNTZ9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3Mq''@;'; put 'put ''PWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTddOmJlZm9yZXtvcGFjaXR5Oi42M30uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsQ29sdW1uTW92ZS5hZnRlci1zZWxlY3Rpb24tLWNvbHVtbnMgdGhlYWQgdGguaHRfX2hpZ2hsaWdodCwuaGFuZHNvbnRhYmxlLmh0''@;'; put 'put ''X19tYW51YWxDb2x1bW5Nb3ZlLmFmdGVyLXNlbGVjdGlvbi0tY29sdW1ucyB0aGVhZCB0aC5odF9faGlnaGxpZ2h0e2N1cnNvcjptb3ZlO2N1cnNvcjotbW96LWdyYWI7Y3Vyc29yOi13ZWJraXQtZ3JhYjtjdXJzb3I6Z3JhYn0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsQ29sdW1uTW92ZS5v''@;'; put 'put ''bi1tb3ZpbmctLWNvbHVtbnMgKiwuaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsQ29sdW1uTW92ZS5vbi1tb3ZpbmctLWNvbHVtbnMgdGhlYWQgdGguaHRfX2hpZ2hsaWdodCwuaGFuZHNvbnRhYmxlLmh0X19tYW51YWxDb2x1bW5Nb3ZlLm9uLW1vdmluZy0tY29sdW1ucyAqLC5oYW5kc29udGFi''@;'; put 'put ''bGUuaHRfX21hbnVhbENvbHVtbk1vdmUub24tbW92aW5nLS1jb2x1bW5zIHRoZWFkIHRoLmh0X19oaWdobGlnaHR7Y3Vyc29yOm1vdmU7Y3Vyc29yOi1tb3otZ3JhYmJpbmc7Y3Vyc29yOi13ZWJraXQtZ3JhYmJpbmc7Y3Vyc29yOmdyYWJiaW5nfS5oYW5kc29udGFibGUgLmh0X19tYW51YWxD''@;'; put 'put ''b2x1bW5Nb3ZlLm9uLW1vdmluZy0tY29sdW1ucyAubWFudWFsQ29sdW1uUmVzaXplciwuaGFuZHNvbnRhYmxlLmh0X19tYW51YWxDb2x1bW5Nb3ZlLm9uLW1vdmluZy0tY29sdW1ucyAubWFudWFsQ29sdW1uUmVzaXplcntkaXNwbGF5Om5vbmV9LmhhbmRzb250YWJsZSAuaHRfX21hbnVhbENv''@;'; put 'put ''bHVtbk1vdmUtLWd1aWRlbGluZSwuaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsQ29sdW1uTW92ZS0tYmFja2xpZ2h0LC5oYW5kc29udGFibGUuaHRfX21hbnVhbENvbHVtbk1vdmUtLWd1aWRlbGluZSwuaGFuZHNvbnRhYmxlLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1iYWNrbGlnaHR7aGVpZ2h0''@;'; put 'put ''OjEwMCU7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlfS5oYW5kc29udGFibGUgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1ndWlkZWxpbmUsLmhhbmRzb250YWJsZS5odF9fbWFudWFsQ29sdW1uTW92ZS0tZ3VpZGVsaW5le3otaW5kZXg6MjA1O2JhY2tncm91bmQ6dmFyKC0taHQtbW92''@;'; put 'put ''ZS1pbmRpY2F0b3ItY29sb3IsIzFhNDJlOCk7d2lkdGg6MXB4O21hcmdpbi1pbmxpbmU6LS41cHggMDt0b3A6MH0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsQ29sdW1uTW92ZS0tYmFja2xpZ2h0LC5oYW5kc29udGFibGUuaHRfX21hbnVhbENvbHVtbk1vdmUtLWJhY2tsaWdodHt6LWluZGV4''@;'; put 'put ''OjIwNTtwb2ludGVyLWV2ZW50czpub25lO2JhY2tncm91bmQ6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0taHQtbW92ZS1iYWNrbGlnaHQtY29sb3IpdmFyKC0taHQtbW92ZS1iYWNrbGlnaHQtb3BhY2l0eSwxMDAlKSx0cmFuc3BhcmVudCk7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLm9u''@;'; put 'put ''LW1vdmluZy0tY29sdW1ucy5zaG93LXVpIC5odF9fbWFudWFsQ29sdW1uTW92ZS0tZ3VpZGVsaW5lLC5oYW5kc29udGFibGUgLm9uLW1vdmluZy0tY29sdW1ucyAuaHRfX21hbnVhbENvbHVtbk1vdmUtLWJhY2tsaWdodCwuaGFuZHNvbnRhYmxlLm9uLW1vdmluZy0tY29sdW1ucy5zaG93LXVp''@;'; put 'put ''IC5odF9fbWFudWFsQ29sdW1uTW92ZS0tZ3VpZGVsaW5lLC5oYW5kc29udGFibGUub24tbW92aW5nLS1jb2x1bW5zIC5odF9fbWFudWFsQ29sdW1uTW92ZS0tYmFja2xpZ2h0e2Rpc3BsYXk6YmxvY2t9LmhhbmRzb250YWJsZSAud3RIaWRlcntwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRh''@;'; put 'put ''YmxlIC5odF9fbWFudWFsUm93TW92ZS5hZnRlci1zZWxlY3Rpb24tLXJvd3MgdGJvZHkgdGguaHRfX2hpZ2hsaWdodCwuaGFuZHNvbnRhYmxlLmh0X19tYW51YWxSb3dNb3ZlLmFmdGVyLXNlbGVjdGlvbi0tcm93cyB0Ym9keSB0aC5odF9faGlnaGxpZ2h0e2N1cnNvcjptb3ZlO2N1cnNvcjot''@;'; put 'put ''bW96LWdyYWI7Y3Vyc29yOi13ZWJraXQtZ3JhYjtjdXJzb3I6Z3JhYn0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsUm93TW92ZS5vbi1tb3ZpbmctLXJvd3MgKiwuaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsUm93TW92ZS5vbi1tb3ZpbmctLXJvd3MgdGJvZHkgdGguaHRfX2hpZ2hsaWdodCwu''@;'; put 'put ''aGFuZHNvbnRhYmxlLmh0X19tYW51YWxSb3dNb3ZlLm9uLW1vdmluZy0tcm93cyAqLC5oYW5kc29udGFibGUuaHRfX21hbnVhbFJvd01vdmUub24tbW92aW5nLS1yb3dzIHRib2R5IHRoLmh0X19oaWdobGlnaHR7Y3Vyc29yOm1vdmU7Y3Vyc29yOi1tb3otZ3JhYmJpbmc7Y3Vyc29yOi13ZWJr''@;'; put 'put ''aXQtZ3JhYmJpbmc7Y3Vyc29yOmdyYWJiaW5nfS5oYW5kc29udGFibGUgLmh0X19tYW51YWxSb3dNb3ZlLm9uLW1vdmluZy0tcm93cyAubWFudWFsUm93UmVzaXplciwuaGFuZHNvbnRhYmxlLmh0X19tYW51YWxSb3dNb3ZlLm9uLW1vdmluZy0tcm93cyAubWFudWFsUm93UmVzaXplcntkaXNw''@;'; put 'put ''bGF5Om5vbmV9LmhhbmRzb250YWJsZSAuaHRfX21hbnVhbFJvd01vdmUtLWd1aWRlbGluZSwuaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsUm93TW92ZS0tYmFja2xpZ2h0LC5oYW5kc29udGFibGUuaHRfX21hbnVhbFJvd01vdmUtLWd1aWRlbGluZSwuaGFuZHNvbnRhYmxlLmh0X19tYW51YWxS''@;'; put 'put ''b3dNb3ZlLS1iYWNrbGlnaHR7d2lkdGg6MTAwJTtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGV9LmhhbmRzb250YWJsZSAuaHRfX21hbnVhbFJvd01vdmUtLWd1aWRlbGluZSwuaGFuZHNvbnRhYmxlLmh0X19tYW51YWxSb3dNb3ZlLS1ndWlkZWxpbmV7Ym9yZGVyLXRvcDoxcHggc29s''@;'; put 'put ''aWQgdmFyKC0taHQtbW92ZS1pbmRpY2F0b3ItY29sb3IpO3otaW5kZXg6MjA1O2xlZnQ6MH0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsUm93TW92ZS0tYmFja2xpZ2h0LC5oYW5kc29udGFibGUuaHRfX21hbnVhbFJvd01vdmUtLWJhY2tsaWdodHt6LWluZGV4OjIwNTtwb2ludGVyLWV2ZW50''@;'; put 'put ''czpub25lO2JhY2tncm91bmQ6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0taHQtbW92ZS1iYWNrbGlnaHQtY29sb3IpdmFyKC0taHQtbW92ZS1iYWNrbGlnaHQtb3BhY2l0eSwxMDAlKSx0cmFuc3BhcmVudCk7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLm9uLW1vdmluZy0tcm93cy5zaG93''@;'; put 'put ''LXVpIC5odF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5lLC5oYW5kc29udGFibGUgLm9uLW1vdmluZy0tcm93cyAuaHRfX21hbnVhbFJvd01vdmUtLWJhY2tsaWdodCwuaGFuZHNvbnRhYmxlLm9uLW1vdmluZy0tcm93cy5zaG93LXVpIC5odF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5lLC5o''@;'; put 'put ''YW5kc29udGFibGUub24tbW92aW5nLS1yb3dzIC5odF9fbWFudWFsUm93TW92ZS0tYmFja2xpZ2h0e2Rpc3BsYXk6YmxvY2t9Lmh0LWRpYWxvZ3tzY3JvbGxiYXItd2lkdGg6YXV0bztzY3JvbGxiYXItY29sb3I6dmFyKC0taHQtc2Nyb2xsYmFyLXRodW1iLWNvbG9yKXZhcigtLWh0LXNjcm9s''@;'; put 'put ''bGJhci10cmFjay1jb2xvcik7Zm9udC1zaXplOnZhcigtLWh0LWZvbnQtc2l6ZSk7bGluZS1oZWlnaHQ6dmFyKC0taHQtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWh0LWxldHRlci1zcGFjaW5nKTt6LWluZGV4OjEwNjA7b3BhY2l0eTowO2JvcmRlci1yYWRpdXM6dmFyKC0t''@;'; put 'put ''aHQtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1odC1ib3JkZXItY29sb3IpO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtvdmVyZmxvdy15OmF1dG87Ym94LXNpemluZzpib3JkZXItYm94IWlt''@;'; put 'put ''cG9ydGFudH0uaHQtZGlhbG9nW2Rpcj1ydGxde2xlZnQ6YXV0bztyaWdodDowfS5odC1kaWFsb2c6Zm9jdXN7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1odC1hY2NlbnQtY29sb3IpO291dGxpbmU6bm9uZX0uaHQtZGlhbG9nOmhhcyguaHRGb2N1c0NhdGNoZXI6Zm9jdXMpe2JvcmRlcjoxcHgg''@;'; put 'put ''c29saWQgdmFyKC0taHQtYWNjZW50LWNvbG9yKTtvdXRsaW5lOm5vbmV9Lmh0LWRpYWxvZyAqe2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnR9Lmh0LWRpYWxvZy0tYmFja2dyb3VuZC1zb2xpZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWRpYWxvZy1zb2xpZC1iYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yKX0uaHQtZGlhbG9nLS1iYWNrZ3JvdW5kLXNlbWktdHJhbnNwYXJlbnR7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1odC1kaWFsb2ctc2VtaS10cmFuc3BhcmVudC1iYWNrZ3JvdW5kLWNvbG9yKXZhcigtLWh0LWRpYWxvZy1zZW1pLXRyYW5zcGFyZW50''@;'; put 'put ''LWJhY2tncm91bmQtb3BhY2l0eSwxMDAlKSx0cmFuc3BhcmVudCl9Lmh0LWRpYWxvZy0tYW5pbWF0aW9ue3RyYW5zaXRpb246b3BhY2l0eSB2YXIoLS1odC10YWJsZS10cmFuc2l0aW9uKWVhc2UtaW4tb3V0fS5odC1kaWFsb2ctLXNob3d7b3BhY2l0eToxfS5odC1kaWFsb2dfX2NvbnRlbnQt''@;'; put 'put ''d3JhcHBlcnt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MTAwJTtwYWRkaW5nOmNhbGModmFyKC0taHQtZ2FwLXNpemUpKjQpO2JvcmRlci1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyk7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4fS5o''@;'; put 'put ''dC1kaWFsb2dfX2NvbnRlbnR7cGFkZGluZzp2YXIoLS1odC1kaWFsb2ctY29udGVudC1wYWRkaW5nLWhvcml6b250YWwpdmFyKC0taHQtZGlhbG9nLWNvbnRlbnQtcGFkZGluZy12ZXJ0aWNhbCk7bWF4LXdpZHRoOjQ4MHB4O2NvbG9yOnZhcigtLWh0LWZvcmVncm91bmQtY29sb3IpO3Bvc2l0''@;'; put 'put ''aW9uOnJlbGF0aXZlfS5odC1kaWFsb2dfX2NvbnRlbnQtLWJhY2tncm91bmR7Ym94LXNoYWRvdzp2YXIoLS1odC1zaGFkb3cteCwwKXZhcigtLWh0LXNoYWRvdy15LDApdmFyKC0taHQtc2hhZG93LWJsdXIsOHB4KWNvbG9yLW1peChpbiBzcmdiLHZhcigtLWh0LXNoYWRvdy1jb2xvciwjMDAw''@;'; put 'put ''KXZhcigtLWh0LXNoYWRvdy1vcGFjaXR5LDEwMCUpLHRyYW5zcGFyZW50KTtib3JkZXItcmFkaXVzOnZhcigtLWh0LWRpYWxvZy1jb250ZW50LWJvcmRlci1yYWRpdXMpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtZGlhbG9nLWNvbnRlbnQtYmFja2dyb3VuZC1jb2xvcil9Lmh0LWRpYWxv''@;'; put 'put ''Zy0tY29uZmlybSAuaHQtZGlhbG9nX19jb250ZW50LXdyYXBwZXJ7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzpjYWxjKHZhcigtLWh0LWdhcC1zaXplKSoyKX0uaHQtZGlhbG9nLS1jb25maXJtIC5odC1kaWFsb2dfX2NvbnRlbnQtd3JhcHBlci1pbm5lcnttYXgtd2lkdGg6NDgwcHg7cGFk''@;'; put 'put ''ZGluZzpjYWxjKHZhcigtLWh0LWdhcC1zaXplKSoyKTtib3JkZXItcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9Lmh0LWRpYWxvZy0tY29uZmly''@;'; put 'put ''bSAuaHQtZGlhbG9nX19jb250ZW50LXdyYXBwZXItaW5uZXItLWJhY2tncm91bmR7Ym94LXNoYWRvdzp2YXIoLS1odC1zaGFkb3cteCwwKXZhcigtLWh0LXNoYWRvdy15LDApdmFyKC0taHQtc2hhZG93LWJsdXIsOHB4KWNvbG9yLW1peChpbiBzcmdiLHZhcigtLWh0LXNoYWRvdy1jb2xvciwj''@;'; put 'put ''MDAwKXZhcigtLWh0LXNoYWRvdy1vcGFjaXR5LDEwMCUpLHRyYW5zcGFyZW50KTtib3JkZXItcmFkaXVzOnZhcigtLWh0LWRpYWxvZy1jb250ZW50LWJvcmRlci1yYWRpdXMpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtZGlhbG9nLWNvbnRlbnQtYmFja2dyb3VuZC1jb2xvcil9Lmh0LWRp''@;'; put 'put ''YWxvZy0tY29uZmlybSAuaHQtZGlhbG9nX19jb250ZW50LXdyYXBwZXItaW5uZXI6Zm9jdXN7Ym94LXNoYWRvdzowIDAgMCAxcHggdmFyKC0taHQtYWNjZW50LWNvbG9yKTtvdXRsaW5lOm5vbmV9Lmh0LWRpYWxvZy0tY29uZmlybSAuaHQtZGlhbG9nX19jb250ZW50e2p1c3RpZnktY29udGVu''@;'; put 'put ''dDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDp2YXIoLS1odC1nYXAtc2l6ZSk7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2Rpc3BsYXk6ZmxleH0uaHQtZGlhbG9nLS1jb25maXJtIC5odC1kaWFsb2dfX2NvbnRlbnQ6aGFzKC5odC1kaWFsb2dfX2J1dHRvbnMpe2dhcDpjYWxjKHZhcigt''@;'; put 'put ''LWh0LWdhcC1zaXplKSoyKX0uaHQtZGlhbG9nLS1jb25maXJtIC5odC1kaWFsb2dfX3RpdGxle2ZvbnQtc2l6ZTp2YXIoLS1odC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWh0LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1odC1saW5lLWhlaWdodCk7bWFyZ2luOjB9Lmh0''@;'; put 'put ''LWRpYWxvZy0tY29uZmlybSAuaHQtZGlhbG9nX19kZXNjcmlwdGlvbntjb2xvcjp2YXIoLS1odC1mb3JlZ3JvdW5kLXNlY29uZGFyeS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWh0LWZvbnQtc2l6ZS1zbWFsbCk7bGluZS1oZWlnaHQ6dmFyKC0taHQtbGluZS1oZWlnaHQtc21hbGwpO2ZvbnQt''@;'; put 'put ''d2VpZ2h0OnZhcigtLWh0LWZvbnQtd2VpZ2h0KTttYXJnaW46MH0uaHQtZGlhbG9nLS1jb25maXJtIC5odC1kaWFsb2dfX2J1dHRvbnN7anVzdGlmeS1jb250ZW50OmNlbnRlcjtnYXA6Y2FsYyh2YXIoLS1odC1nYXAtc2l6ZSkqMik7ZmxleC1mbG93OndyYXA7ZGlzcGxheTpmbGV4fS5odC1u''@;'; put 'put ''b3RpZmljYXRpb257ei1pbmRleDoxMDcwO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDtvdmVyZmxvdzp2aXNpYmxlfS5odC1ub3RpZmljYXRpb25fX3N0YWNre292ZXJzY3JvbGwtYmVoYXZpb3I6Y29udGFpbjtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJr''@;'; put 'put ''aXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO3Njcm9sbGJhci13aWR0aDphdXRvO3Njcm9sbGJhci1jb2xvcjp2YXIoLS1odC1zY3JvbGxiYXItdGh1bWItY29sb3IpdmFyKC0taHQtc2Nyb2xsYmFyLXRyYWNrLWNvbG9yKTtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjEwcHg7bWF4LXdp''@;'; put 'put ''ZHRoOm1pbig0MjBweCwxMDAlIC0gNDBweCk7bWluLWhlaWdodDowO3BhZGRpbmc6MTBweDtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7b3ZlcmZsb3c6aGlkZGVuIGF1dG99Lmh0LW5vdGlmaWNhdGlvbl9fc3RhY2stLXRvcC1zdGFydHt0b3A6MTBweDthbGlnbi1pdGVtczpmbGV4''@;'; put 'put ''LXN0YXJ0O21heC1oZWlnaHQ6Y2FsYygxMDAlIC0gNDBweCk7aW5zZXQtaW5saW5lLXN0YXJ0OjEwcHh9Lmh0LW5vdGlmaWNhdGlvbl9fc3RhY2stLXRvcC1lbmR7dG9wOjEwcHg7YWxpZ24taXRlbXM6ZmxleC1lbmQ7bWF4LWhlaWdodDpjYWxjKDEwMCUgLSA0MHB4KTtpbnNldC1pbmxpbmUt''@;'; put 'put ''ZW5kOjEwcHh9Lmh0LW5vdGlmaWNhdGlvbl9fc3RhY2stLWJvdHRvbS1zdGFydHtib3R0b206MTBweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O21heC1oZWlnaHQ6Y2FsYygxMDAlIC0gNDBweCk7aW5zZXQtaW5saW5lLXN0YXJ0OjEwcHh9Lmh0LW5vdGlmaWNhdGlvbl9fc3RhY2stLWJvdHRv''@;'; put 'put ''bS1lbmR7Ym90dG9tOjEwcHg7YWxpZ24taXRlbXM6ZmxleC1lbmQ7bWF4LWhlaWdodDpjYWxjKDEwMCUgLSA0MHB4KTtpbnNldC1pbmxpbmUtZW5kOjEwcHh9Lmh0LW5vdGlmaWNhdGlvbl9fdG9hc3R7Ym94LXNoYWRvdzp2YXIoLS1odC1zaGFkb3cteCwwKXZhcigtLWh0LXNoYWRvdy15LDAp''@;'; put 'put ''dmFyKC0taHQtc2hhZG93LWJsdXIsOHB4KWNvbG9yLW1peChpbiBzcmdiLHZhcigtLWh0LXNoYWRvdy1jb2xvciwjMDAwKXZhcigtLWh0LXNoYWRvdy1vcGFjaXR5LDEwMCUpLHRyYW5zcGFyZW50KTtwb2ludGVyLWV2ZW50czphdXRvO21heC13aWR0aDoxMDAlO2NvbG9yOnZhcigtLWh0LW5v''@;'; put 'put ''dGlmaWNhdGlvbi1mb3JlZ3JvdW5kLWNvbG9yLHZhcigtLWh0LWZvcmVncm91bmQtY29sb3IpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LW5vdGlmaWNhdGlvbi1iYWNrZ3JvdW5kLWNvbG9yLHZhcigtLWh0LWJhY2tncm91bmQtY29sb3IpKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWh0''@;'; put 'put ''LW5vdGlmaWNhdGlvbi1ib3JkZXItY29sb3IsdmFyKC0taHQtYm9yZGVyLWNvbG9yKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzLDRweCk7Zm9udC1zaXplOnZhcigtLWh0LWZvbnQtc2l6ZSk7bGluZS1oZWlnaHQ6dmFyKC0taHQtbGluZS1oZWlnaHQpO2xldHRlci1z''@;'; put 'put ''cGFjaW5nOnZhcigtLWh0LWxldHRlci1zcGFjaW5nKTtvdXRsaW5lOm5vbmU7ZmxleC1zaHJpbms6MDtkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmV9Lmh0LW5vdGlmaWNhdGlvbl9fdG9hc3Q6Zm9jdXMtdmlzaWJsZXtib3gtc2hhZG93OjAgMCAwIDFweCB2YXIoLS1odC1hY2NlbnQt''@;'; put 'put ''Y29sb3IpfS5odC1ub3RpZmljYXRpb25fX3RvYXN0LS1hbmltYXRle29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgdmFyKC0taHQtdGFibGUtdHJhbnNpdGlvbiwuMTVzKWVhc2Utb3V0LHRyYW5zZm9ybSB2YXIoLS1odC10YWJsZS10cmFuc2l0aW9uLC4xNXMpZWFzZS1vdXR9Lmh0LW5v''@;'; put 'put ''dGlmaWNhdGlvbl9fdG9hc3QtLWFuaW1hdGUuaHQtbm90aWZpY2F0aW9uX190b2FzdC0tc3RhY2stdG9wOm5vdCguaHQtbm90aWZpY2F0aW9uX190b2FzdC0tdmlzaWJsZSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTZweCl9Lmh0LW5vdGlmaWNhdGlvbl9fdG9hc3QtLWFuaW1hdGUuaHQtbm90''@;'; put 'put ''aWZpY2F0aW9uX190b2FzdC0tc3RhY2stYm90dG9tOm5vdCguaHQtbm90aWZpY2F0aW9uX190b2FzdC0tdmlzaWJsZSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoNnB4KX0uaHQtbm90aWZpY2F0aW9uX190b2FzdC0tdmlzaWJsZXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCl9Lmh0''@;'; put 'put ''LW5vdGlmaWNhdGlvbl9fdG9hc3QtLWluZm8gLmh0LW5vdGlmaWNhdGlvbl9fYWNjZW50e2Rpc3BsYXk6bm9uZX0uaHQtbm90aWZpY2F0aW9uX190b2FzdC0tc3VjY2VzcyAuaHQtbm90aWZpY2F0aW9uX19hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1ub3RpZmljYXRpb24tc3Vj''@;'; put 'put ''Y2Vzcy1hY2NlbnQsIzM3YmM2Yyl9Lmh0LW5vdGlmaWNhdGlvbl9fdG9hc3QtLXdhcm5pbmcgLmh0LW5vdGlmaWNhdGlvbl9fYWNjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtbm90aWZpY2F0aW9uLXdhcm5pbmctYWNjZW50LCNmYmU5NTIpfS5odC1ub3RpZmljYXRpb25fX3RvYXN0''@;'; put 'put ''LS1lcnJvciAuaHQtbm90aWZpY2F0aW9uX19hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1ub3RpZmljYXRpb24tZXJyb3ItYWNjZW50LCNmYTRkMzIpfS5odC1ub3RpZmljYXRpb25fX3RvYXN0LWlubmVye3dpZHRoOjEwMCU7bWluLXdpZHRoOjA7ZGlyZWN0aW9uOmluaGVyaXQ7''@;'; put 'put ''ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOnN0cmV0Y2g7Z2FwOjA7cGFkZGluZzoxMHB4O2Rpc3BsYXk6ZmxleH0uaHQtbm90aWZpY2F0aW9uX19hY2NlbnR7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6NHB4O2ZsZXg6MCAwIDRweDthbGlnbi1zZWxmOnN0cmV0''@;'; put 'put ''Y2g7bWFyZ2luLWlubGluZS1lbmQ6MTBweH0uaHQtbm90aWZpY2F0aW9uX19ib2R5e2ZsZXg6YXV0bzttaW4td2lkdGg6MH0uaHQtbm90aWZpY2F0aW9uX190aXRsZXttYXJnaW46MCAwIHZhcigtLWh0LWdhcC1zaXplKTtmb250LXNpemU6dmFyKC0taHQtZm9udC1zaXplKTtmb250LXdlaWdo''@;'; put 'put ''dDp2YXIoLS1odC1mb250LXdlaWdodCw2MDApfS5odC1ub3RpZmljYXRpb25fX21lc3NhZ2V7Zm9udC1zaXplOnZhcigtLWh0LWZvbnQtc2l6ZS1zbWFsbCk7d29yZC1icmVhazpicmVhay13b3JkO21hcmdpbjowfS5odC1ub3RpZmljYXRpb25fX2FjdGlvbnN7Z2FwOnZhcigtLWh0LWdhcC1z''@;'; put 'put ''aXplKTttYXJnaW4tdG9wOnZhcigtLWh0LWdhcC1zaXplKTtmbGV4LXdyYXA6d3JhcDtkaXNwbGF5OmZsZXh9Lmh0LW5vdGlmaWNhdGlvbl9fY2xvc2V7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOnZhcigtLWh0LWljb24tYnV0dG9uLWhpdC1hcmVhLXNpemUpO2hlaWdodDp2YXIoLS1o''@;'; put 'put ''dC1pY29uLWJ1dHRvbi1oaXQtYXJlYS1zaXplKTtjb2xvcjp2YXIoLS1odC1pY29uLWJ1dHRvbi1pY29uLWNvbG9yLGluaGVyaXQpO2N1cnNvcjpwb2ludGVyO2JvcmRlci1yYWRpdXM6dmFyKC0taHQtaWNvbi1idXR0b24tYm9yZGVyLXJhZGl1cyx2YXIoLS1odC1ib3JkZXItcmFkaXVzLDRw''@;'; put 'put ''eCkpO2JhY2tncm91bmQ6MCAwO2JvcmRlcjpub25lO2ZsZXg6bm9uZTthbGlnbi1zZWxmOmZsZXgtc3RhcnQ7bWFyZ2luLWlubGluZS1zdGFydDo0cHg7cGFkZGluZzowO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OnZpc2libGV9Lmh0LW5vdGlmaWNhdGlvbl9fY2xvc2U6YmVmb3Jle2Nv''@;'; put 'put ''bnRlbnQ6IiI7dG9wOjUwJTttYXJnaW4tdG9wOmNhbGMoLS41KnZhcigtLWh0LWljb24tc2l6ZSkpO21hcmdpbi1pbmxpbmUtc3RhcnQ6Y2FsYygtLjUqdmFyKC0taHQtaWNvbi1zaXplKSk7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtpbnNldC1pbmxpbmUtc3RhcnQ6NTAlfS5o''@;'; put 'put ''dC1ub3RpZmljYXRpb25fX2Nsb3NlOmhvdmVye2NvbG9yOnZhcigtLWh0LWljb24tYnV0dG9uLWhvdmVyLWljb24tY29sb3IsaW5oZXJpdCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1pY29uLWJ1dHRvbi1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yLGNvbG9yLW1peChpbiBzcmdiLHZhcigt''@;'; put 'put ''LWh0LWZvcmVncm91bmQtY29sb3IpOCUsdHJhbnNwYXJlbnQpKX0uaHQtbm90aWZpY2F0aW9uX19jbG9zZTpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWh0LWFjY2VudC1jb2xvcik7b3V0bGluZS1vZmZzZXQ6MnB4fS5oYW5kc29udGFibGUuaHQtcGFnaW5hdGlvbnt3''@;'; put 'put ''aWR0aDoxMDAlO2NvbG9yOnZhcigtLWh0LXBhZ2luYXRpb24tYmFyLWZvcmVncm91bmQtY29sb3IpO2JhY2tncm91bmQ6dmFyKC0taHQtcGFnaW5hdGlvbi1iYXItYmFja2dyb3VuZC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWh0LWZvbnQtc2l6ZSk7bGluZS1oZWlnaHQ6dmFyKC0taHQtbGlu''@;'; put 'put ''ZS1oZWlnaHQpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdy14OmF1dG99LmhhbmRzb250YWJsZS5odC1wYWdpbmF0aW9uOm5vdCguaHQtc2xvdC1lbGVtZW50KXtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWh0LWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1odC1ib3Jk''@;'; put 'put ''ZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXBhZ2luYXRpb24gLmh0LXBhZ2luYXRpb25fX2lubmVye2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6Y2FsYyh2YXIoLS1odC1nYXAtc2l6ZSkqNCk7cGFkZGluZy1pbmxpbmU6dmFyKC0taHQt''@;'; put 'put ''cGFnaW5hdGlvbi1iYXItaG9yaXpvbnRhbC1wYWRkaW5nKTtwYWRkaW5nLWJsb2NrOnZhcigtLWh0LXBhZ2luYXRpb24tYmFyLXZlcnRpY2FsLXBhZGRpbmcpO2ZsZXgtd3JhcDp3cmFwO21pbi13aWR0aDoyMzBweDtkaXNwbGF5OmZsZXh9LmhhbmRzb250YWJsZS5odC1wYWdpbmF0aW9uIC5o''@;'; put 'put ''dC1wYWdlLXNpemUtc2VjdGlvbnthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOmNhbGModmFyKC0taHQtZ2FwLXNpemUpKjIpO2Rpc3BsYXk6ZmxleH0uaGFuZHNvbnRhYmxlLmh0LXBhZ2luYXRpb24gLmh0LXBhZ2Utc2l6ZS1zZWN0aW9uX19sYWJlbHt3aGl0ZS1zcGFjZTpub3dyYXB9LmhhbmRz''@;'; put 'put ''b250YWJsZS5odC1wYWdpbmF0aW9uIC5odC1wYWdlLXNpemUtc2VjdGlvbl9fc2VsZWN0LXdyYXBwZXJ7Ym9yZGVyLXJhZGl1czp2YXIoLS1odC1pbnB1dC1ib3JkZXItcmFkaXVzKTtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlLmh0LXBhZ2luYXRpb24gLmh0LXBhZ2Utc2l6ZS1z''@;'; put 'put ''ZWN0aW9uX19zZWxlY3Qtd3JhcHBlciBzZWxlY3R7cGFkZGluZy1pbmxpbmUtc3RhcnQ6dmFyKC0taHQtZ2FwLXNpemUpO3BhZGRpbmctaW5saW5lLWVuZDpjYWxjKHZhcigtLWh0LWdhcC1zaXplKSArIHZhcigtLWh0LWljb24tc2l6ZSkpO3BhZGRpbmctdG9wOnZhcigtLWh0LWdhcC1zaXpl''@;'; put 'put ''KTtwYWRkaW5nLWJvdHRvbTp2YXIoLS1odC1nYXAtc2l6ZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1odC1pbnB1dC1ib3JkZXItcmFkaXVzKTtjb2xvcjp2YXIoLS1odC1pbnB1dC1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWlucHV0LWJhY2tncm91bmQtY29s''@;'; put 'put ''b3IpO2JvcmRlcjoxcHggc29saWQgdmFyKC0taHQtaW5wdXQtYm9yZGVyLWNvbG9yKTtsaW5lLWhlaWdodDpjYWxjKHZhcigtLWh0LWxpbmUtaGVpZ2h0KSAtIDRweCk7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7Zm9udC1zaXplOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXJ9LmhhbmRzb250YWJs''@;'; put 'put ''ZS5odC1wYWdpbmF0aW9uIC5odC1wYWdlLXNpemUtc2VjdGlvbl9fc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmRpc2FibGVke29wYWNpdHk6LjQ7Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6dmFyKC0taHQtaW5wdXQtZGlzYWJsZWQtZm9yZWdyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1odC1pbnB1dC1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0taHQtaW5wdXQtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uaGFuZHNvbnRhYmxlLmh0LXBhZ2luYXRpb24gLmh0LXBhZ2Utc2l6ZS1zZWN0aW9uX19zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6aG92''@;'; put 'put ''ZXI6bm90KDpkaXNhYmxlZCl7Y29sb3I6dmFyKC0taHQtaW5wdXQtaG92ZXItZm9yZWdyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1pbnB1dC1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0taHQtaW5wdXQtaG92ZXItYm9yZGVyLWNvbG9y''@;'; put 'put ''KX0uaGFuZHNvbnRhYmxlLmh0LXBhZ2luYXRpb24gLmh0LXBhZ2Utc2l6ZS1zZWN0aW9uX19zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6Zm9jdXN7Y29sb3I6dmFyKC0taHQtaW5wdXQtZm9jdXMtZm9yZWdyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1pbnB1dC1mb2N1cy1i''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0taHQtaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yKTtvdXRsaW5lOm5vbmV9LmhhbmRzb250YWJsZS5odC1wYWdpbmF0aW9uIC5odC1wYWdlLXNpemUtc2VjdGlvbl9fc2VsZWN0LXdyYXBwZXI6YWZ0ZXJ7Y29udGVudDoiIjtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWh0LWZvcmVncm91bmQtY29sb3IpO3BvaW50ZXItZXZlbnRzOm5vbmU7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtpbnNldC1ibG9jay1lbmQ6NTAlO2luc2V0LWlubGluZS1lbmQ6dmFyKC0taHQtZ2FwLXNpemUpO3RyYW5zZm9ybTp0cmFuc2xh''@;'; put 'put ''dGVZKDUwJSl9LmhhbmRzb250YWJsZS5odC1wYWdpbmF0aW9uIC5odC1wYWdlLWNvdW50ZXItc2VjdGlvbnttYXJnaW4taW5saW5lLWVuZDphdXRvfS5oYW5kc29udGFibGUuaHQtcGFnaW5hdGlvbiAuaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb257YWxpZ24taXRlbXM6Y2VudGVyO2dhcDox''@;'; put 'put ''cHg7ZGlzcGxheTpmbGV4fS5oYW5kc29udGFibGUuaHQtcGFnaW5hdGlvbiAuaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb25fX2J1dHRvbntmb250LXNpemU6aW5oZXJpdDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWh0LXBhZ2luYXRpb24tYnV0dG9uLWJvcmRlci1jb2xvcik7Y29sb3I6dmFy''@;'; put 'put ''KC0taHQtcGFnaW5hdGlvbi1idXR0b24tZm9yZWdyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1wYWdpbmF0aW9uLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWh0LWljb24tYnV0dG9uLWxhcmdlLWJvcmRlci1yYWRpdXMpO3BhZGRp''@;'; put 'put ''bmc6dmFyKC0taHQtaWNvbi1idXR0b24tbGFyZ2UtcGFkZGluZyk7Y3Vyc29yOnBvaW50ZXJ9LmhhbmRzb250YWJsZS5odC1wYWdpbmF0aW9uIC5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbl9fYnV0dG9uOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2t9LmhhbmRzb250YWJsZS5o''@;'; put 'put ''dC1wYWdpbmF0aW9uIC5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbl9fYnV0dG9uLS1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lO2NvbG9yOnZhcigtLWh0LXBhZ2luYXRpb24tYnV0dG9uLWRpc2FibGVkLWZvcmVncm91bmQtY29sb3IpO2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0taHQtcGFnaW5hdGlvbi1idXR0b24tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWh0LXBhZ2luYXRpb24tYnV0dG9uLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmhhbmRzb250YWJsZS5odC1wYWdpbmF0aW9uIC5odC1wYWdlLW5hdmln''@;'; put 'put ''YXRpb24tc2VjdGlvbl9fYnV0dG9uOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2JvcmRlci1jb2xvcjp2YXIoLS1odC1wYWdpbmF0aW9uLWJ1dHRvbi1ob3Zlci1ib3JkZXItY29sb3IpO2NvbG9yOnZhcigtLWh0LXBhZ2luYXRpb24tYnV0dG9uLWhvdmVyLWZvcmVncm91bmQtY29sb3IpO2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6dmFyKC0taHQtcGFnaW5hdGlvbi1idXR0b24taG92ZXItYmFja2dyb3VuZC1jb2xvcil9LmhhbmRzb250YWJsZS5odC1wYWdpbmF0aW9uIC5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbl9fYnV0dG9uOmZvY3Vze2JvcmRlci1jb2xvcjp2YXIoLS1odC1wYWdpbmF0aW9u''@;'; put 'put ''LWJ1dHRvbi1mb2N1cy1ib3JkZXItY29sb3IpO2NvbG9yOnZhcigtLWh0LXBhZ2luYXRpb24tYnV0dG9uLWZvY3VzLWZvcmVncm91bmQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtcGFnaW5hdGlvbi1idXR0b24tZm9jdXMtYmFja2dyb3VuZC1jb2xvcik7b3V0bGluZTpub25l''@;'; put 'put ''fS5oYW5kc29udGFibGUuaHQtcGFnaW5hdGlvbiAuaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb25fX2xhYmVse3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWFsaWduOmNlbnRlcjttaW4td2lkdGg6MTAwcHh9Lmh0LWxvYWRpbmdfX2ljb24tc3Zne3dpZHRoOnZhcigtLWh0LWljb24tc2l6ZSk7''@;'; put 'put ''aGVpZ2h0OnZhcigtLWh0LWljb24tc2l6ZSk7Y29sb3I6dmFyKC0taHQtYWNjZW50LWNvbG9yKTt0cmFuc2Zvcm0tb3JpZ2luOjUwJTthbmltYXRpb246MXMgbGluZWFyIGluZmluaXRlIGh0LWxvYWRpbmctc3BpbjtkaXNwbGF5OmJsb2NrfS5odC1sb2FkaW5nX19jb250ZW50e2FsaWduLWl0''@;'; put 'put ''ZW1zOmNlbnRlcjtnYXA6Y2FsYyh2YXIoLS1odC1nYXAtc2l6ZSkqMik7ZGlzcGxheTpmbGV4fS5odC1sb2FkaW5nX190aXRsZXtmb250LXNpemU6dmFyKC0taHQtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1odC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0taHQtbGluZS1o''@;'; put 'put ''ZWlnaHQpO21hcmdpbjowfS5odC1sb2FkaW5nX19kZXNjcmlwdGlvbntjb2xvcjp2YXIoLS1odC1mb3JlZ3JvdW5kLXNlY29uZGFyeS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWh0LWZvbnQtc2l6ZS1zbWFsbCk7bGluZS1oZWlnaHQ6dmFyKC0taHQtbGluZS1oZWlnaHQtc21hbGwpO2ZvbnQt''@;'; put 'put ''d2VpZ2h0OnZhcigtLWh0LWZvbnQtd2VpZ2h0KTttYXJnaW46MH1Aa2V5ZnJhbWVzIGh0LWxvYWRpbmctc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fS5odC1lbXB0eS1kYXRhLXN0YXRle3Njcm9sbGJhci13aWR0aDphdXRvO3Njcm9sbGJhci1jb2xvcjp2YXIoLS1odC1zY3Jv''@;'; put 'put ''bGxiYXItdGh1bWItY29sb3IpdmFyKC0taHQtc2Nyb2xsYmFyLXRyYWNrLWNvbG9yKTt6LWluZGV4Ojk5OTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWh0LWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7YmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjp2YXIoLS1odC1iYWNrZ3JvdW5kLWNvbG9yKTt3aWR0aDoxMDAlO2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7b3ZlcmZsb3cteTphdXRvfS5odC1lbXB0eS1kYXRhLXN0YXRlICp7Ym94LXNpemluZzpib3JkZXItYm94IWltcG9ydGFudH0uaHQt''@;'; put 'put ''ZW1wdHktZGF0YS1zdGF0ZV9fY29udGVudC13cmFwcGVye3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjEwMCU7bWluLWhlaWdodDoxMDAlO3BhZGRpbmc6Y2FsYyh2YXIoLS1odC1nYXAtc2l6ZSkqMik7Ym9yZGVyLXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKTtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9Lmh0LWVtcHR5LWRhdGEtc3RhdGVfX2NvbnRlbnQtd3JhcHBlci1pbm5lcnttYXgtd2lkdGg6NDgwcHg7cGFkZGluZzpjYWxjKHZhcigtLWh0LWdhcC1zaXplKSoyKTtib3JkZXItcmFkaXVzOnZhcigtLWh0LWJvcmRl''@;'; put 'put ''ci1yYWRpdXMpO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9Lmh0LWVtcHR5LWRhdGEtc3RhdGVfX2NvbnRlbnQtd3JhcHBlci1pbm5lcjpmb2N1c3tib3gtc2hhZG93OjAgMCAwIDFweCB2YXIoLS1o''@;'; put 'put ''dC1hY2NlbnQtY29sb3IpO291dGxpbmU6bm9uZX0uaHQtZW1wdHktZGF0YS1zdGF0ZV9fY29udGVudHtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6dmFyKC0taHQtZ2FwLXNpemUpO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtkaXNwbGF5OmZsZXh9Lmh0LWVt''@;'; put 'put ''cHR5LWRhdGEtc3RhdGVfX3RpdGxle2ZvbnQtc2l6ZTp2YXIoLS1odC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWh0LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1odC1saW5lLWhlaWdodCk7bWFyZ2luOjB9Lmh0LWVtcHR5LWRhdGEtc3RhdGVfX2Rlc2NyaXB0aW9ue2Nv''@;'; put 'put ''bG9yOnZhcigtLWh0LWZvcmVncm91bmQtc2Vjb25kYXJ5LWNvbG9yKTtmb250LXNpemU6dmFyKC0taHQtZm9udC1zaXplLXNtYWxsKTtsaW5lLWhlaWdodDp2YXIoLS1odC1saW5lLWhlaWdodC1zbWFsbCk7Zm9udC13ZWlnaHQ6dmFyKC0taHQtZm9udC13ZWlnaHQpO21hcmdpbjowfS5odC1l''@;'; put 'put ''bXB0eS1kYXRhLXN0YXRlX19idXR0b25ze2p1c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOmNhbGModmFyKC0taHQtZ2FwLXNpemUpKjIpO2ZsZXgtZmxvdzp3cmFwO2Rpc3BsYXk6ZmxleH0uaHQtZW1wdHktZGF0YS1zdGF0ZV9fYnV0dG9ucy0taGFzLWJ1dHRvbnN7bWFyZ2luLXRvcDpjYWxj''@;'; put 'put ''KHZhcigtLWh0LWdhcC1zaXplKSoyKX0uaHQtZW1wdHktZGF0YS1zdGF0ZV9fc3Bpbm5lcnt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O21hcmdpbi1ib3R0b206Y2FsYyh2YXIoLS1odC1nYXAtc2l6ZSkqMik7Ym9yZGVyOjJweCBzb2xpZCB2YXIoLS1odC1ib3JkZXItY29sb3IpO2JvcmRlci10''@;'; put 'put ''b3AtY29sb3I6dmFyKC0taHQtYWNjZW50LWNvbG9yKTtib3JkZXItcmFkaXVzOjUwJTtmbGV4LXNocmluazowO2FuaW1hdGlvbjouNzVzIGxpbmVhciBpbmZpbml0ZSBodC1lbXB0eS1kYXRhLXN0YXRlLXNwaW59QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7Lmh0LWVt''@;'; put 'put ''cHR5LWRhdGEtc3RhdGVfX3NwaW5uZXJ7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1odC1ib3JkZXItY29sb3IpO2FuaW1hdGlvbjpub25lfX0uaHQtZW1wdHktZGF0YS1zdGF0ZS0tbG9hZGluZyAuaHQtZW1wdHktZGF0YS1zdGF0ZV9fY29udGVudHtnYXA6Y2FsYyh2YXIoLS1odC1nYXAtc2l6''@;'; put 'put ''ZSkqLjUpfS5odC1lbXB0eS1kYXRhLXN0YXRlLS1kaXNhYmxlLXRvcC1ib3JkZXJ7Ym9yZGVyLXRvcC13aWR0aDowfS5odC1lbXB0eS1kYXRhLXN0YXRlLS1kaXNhYmxlLXRvcC1ib3JkZXI6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSks''@;'; put 'put ''OmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKSwuaHQtZW1wdHktZGF0YS1zdGF0''@;'; put 'put ''ZS0tZGlzYWJsZS10b3AtYm9yZGVyOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxh''@;'; put 'put ''bmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0uaHQtZW1wdHktZGF0YS1zdGF0ZS0tZGlzYWJsZS1pbmxpbmUtYm9yZGVye2JvcmRlci1pbmxp''@;'; put 'put ''bmUtc3RhcnQtd2lkdGg6MH0uaHQtZW1wdHktZGF0YS1zdGF0ZS0tZGlzYWJsZS1pbmxpbmUtYm9yZGVyOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5n''@;'; put 'put ''KGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uaHQtZW1wdHktZGF0''@;'; put 'put ''YS1zdGF0ZS0tZGlzYWJsZS1pbmxpbmUtYm9yZGVyOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5n''@;'; put 'put ''KG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9Lmh0LWVtcHR5LWRhdGEtc3RhdGUtLWRpc2FibGUtYm90dG9tLWJvcmRl''@;'; put 'put ''cntib3JkZXItYm90dG9tLXdpZHRoOjB9Lmh0LWVtcHR5LWRhdGEtc3RhdGUtLWRpc2FibGUtYm90dG9tLWJvcmRlcjpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xr''@;'; put 'put ''KSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpLC5odC1lbXB0eS1kYXRhLXN0YXRlLS1kaXNhYmxlLWJvdHRvbS1ib3JkZXI6aXMoOmxhbmcoYWUpLDps''@;'; put 'put ''YW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcp''@;'; put 'put ''LDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC1ib3R0b20+Lmh0LXNsb3QtZWxlbWVudCkgLmh0LWVtcHR5LWRhdGEtc3RhdGU6bm90KDpsYW5n''@;'; put 'put ''KGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDps''@;'; put 'put ''YW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uaHQtcm9vdC13cmFwcGVyOmhhcyg+Lmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQpIC5odC1lbXB0eS1kYXRhLXN0YXRlOmlz''@;'; put 'put ''KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmco''@;'; put 'put ''c2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH1Aa2V5ZnJhbWVzIGh0LWVtcHR5LWRhdGEtc3RhdGUtc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fScsQmgodGhp''@;'; put 'put ''cyxjXykuaGVhZC5hcHBlbmRDaGlsZChlKX1mdW5jdGlvbiBaRHQoKXtjb25zdCBuPXRoaXMuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgibGluZS1oZWlnaHQiKSxlPXRoaXMuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC12ZXJ0aWNhbC1wYWRkaW5nIiksdD1NYXRoLnJvdW5kKE51bWJlci5wYXJz''@;'; put 'put ''ZUZsb2F0KHRoaXMuZ2V0U3R5bGVGb3JURCgiYm9yZGVyLWJvdHRvbS13aWR0aCIpPz8iIikpO3JldHVybiBudWxsPT09bnx8bnVsbD09PWV8fGlzTmFOKHQpP251bGw6bisyKmUrdH1mdW5jdGlvbiB6SWUoKXtNNCh0aGlzLGFaLGdldENvbXB1dGVkU3R5bGUoQmgodGhpcyxvWikpKTtjb25z''@;'; put 'put ''dCBuPXU2KHRoaXMsakllLEdEdCkuY2FsbCh0aGlzLFsiYm94LXNpemluZyIsImJvcmRlci1ib3R0b20td2lkdGgiXSk7QmgodGhpcyx5VCkudGQ9ey4uLkJoKHRoaXMseVQpLnRkLCJib3gtc2l6aW5nIjpuWyJib3gtc2l6aW5nIl0sImJvcmRlci1ib3R0b20td2lkdGgiOm5bImJvcmRlci1i''@;'; put 'put ''b3R0b20td2lkdGgiXX19ZnVuY3Rpb24gR0R0KG4pe2NvbnN0IGU9QmgodGhpcyxjXyksdD1CaCh0aGlzLG9aKSxyPWUuY3JlYXRlRWxlbWVudCgidGFibGUiKSxpPWUuY3JlYXRlRWxlbWVudCgidGJvZHkiKSxvPWUuY3JlYXRlRWxlbWVudCgidHIiKSxhPWUuY3JlYXRlRWxlbWVudCgidHIi''@;'; put 'put ''KSxsPWUuY3JlYXRlRWxlbWVudCgidGQiKTthLmFwcGVuZENoaWxkKGwpLGkuYXBwZW5kQ2hpbGQobyksaS5hcHBlbmRDaGlsZChhKSxyLmFwcGVuZENoaWxkKGkpLHQuYXBwZW5kQ2hpbGQocik7Y29uc3QgdT1nZXRDb21wdXRlZFN0eWxlKGwpLGc9e307cmV0dXJuIG4uZm9yRWFjaChFPT57''@;'; put 'put ''Z1tFXT11LmdldFByb3BlcnR5VmFsdWUoRSl9KSx0LnJlbW92ZUNoaWxkKHIpLGd9ZnVuY3Rpb24gJER0KG4pe2NvbnN0IGU9TWF0aC5jZWlsKE51bWJlci5wYXJzZUZsb2F0KHU2KHRoaXMseWRlLFdJZSkuY2FsbCh0aGlzLG4pPz8iIikpO3JldHVybiBOdW1iZXIuaXNOYU4oZSk/bnVsbDpl''@;'; put 'put ''fWZ1bmN0aW9uIFdJZShuKXtjb25zdCBlPUJoKHRoaXMsYVopPy5nZXRQcm9wZXJ0eVZhbHVlKG4pPz9udWxsO3JldHVybiIiPT09ZT9udWxsOmV9ZnVuY3Rpb24gWUllKCl7TTQodGhpcyx5VCx7fSksTTQodGhpcyxfVCx7fSl9bGV0IEdwPW51bGwsc1o9MDtjb25zdCBRRHQ9e1RPUDoidG9w''@;'; put 'put ''IixCT1RUT006ImJvdHRvbSJ9LFpJZT0iaHQtc2xvdC1lbGVtZW50IixHSWU9ImxpY2Vuc2VOb3RpZmljYXRpb24iLEpEdD1gcGx1Z2luOiR7R0llfWAsJEllPSJob3QtZGlzcGxheS1saWNlbnNlLWluZm8iO2Z1bmN0aW9uIHFJZShuKXtyZXR1cm4gbi5yb290U2xvdEJvdHRvbUVsZW1lbnQ/''@;'; put 'put ''LnF1ZXJ5U2VsZWN0b3IoYC4keyRJZX1gKT8/bnVsbH1jb25zdCBDdT0obixlKT0+YHdpZHRoOiB2YXIoLS1odC1pY29uLXNpemUpO1xuICBoZWlnaHQ6IHZhcigtLWh0LWljb24tc2l6ZSk7XG4gIC13ZWJraXQtbWFzay1zaXplOiBjb250YWluO1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVy''@;'; put 'put ''bCgiJHtuW2VdfSIpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7YCxyTHQ9WyJmb250LWZhbWlseSJdLGlMdD1bInRva2Vucy4iLCJjb2xvcnMuIiwic2l6aW5nLiIsImRlbnNpdHkuIl07ZnVuY3Rpb24gYlQobixlKXtpZigic3RyaW5nIj09dHlwZW9mIG4mJmZ1bmN0aW9u''@;'; put 'put ''IG9MdChuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4mJmlMdC5zb21lKGU9Pm4uaW5jbHVkZXMoZSkpfShuKSlyZXR1cm4gZnVuY3Rpb24gYUx0KG4pe3JldHVybiBuLmluY2x1ZGVzKCJ0b2tlbnMuIik/YHZhcigtLWh0LSR7UE0obi5zcGxpdCgiLiIpLnNsaWNlKDEpLmpvaW4oIi0iKSl9''@;'; put 'put ''KWA6YHZhcigtLWh0LSR7UE0obi5zcGxpdCgiLiIpLmpvaW4oIi0iKSl9KWB9KG4pO2lmKEFycmF5LmlzQXJyYXkobikpe2lmKG4ubGVuZ3RoPj0yKXtjb25zdFt0LHJdPW47cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYic3RyaW5nIj09dHlwZW9mIHI/YGxpZ2h0LWRhcmsoJHtiVCh0LGUp''@;'; put 'put ''fSwgJHtiVChyLGUpfSlgOiJzdHJpbmciPT10eXBlb2YgdD9iVCh0LGUpOiJzdHJpbmciPT10eXBlb2Ygcj9iVChyLGUpOiIifXJldHVybiBiVChuWzBdLGUpfXJldHVybiBlJiZyTHQuaW5jbHVkZXMoZSk/U3RyaW5nKG4pOlBNKFN0cmluZyhuKSl9ZnVuY3Rpb24gbEx0KG4sZSx0KXtyZXR1''@;'; put 'put ''cm5gJHtmdW5jdGlvbiBzTHQobixlKXtyZXR1cm5gLS1odC0ke24/YCR7bn0tYDoiIn0ke1BNKGUpfWB9KG4sZSl9OiAke2JUKHQsZSl9O2B9ZnVuY3Rpb24gZ08obixlPSIiLHQ9IiIpe2xldCByPSIiO3JldHVybiBPYmplY3QuZW50cmllcyhuKS5mb3JFYWNoKChbaSxvXSk9Pntjb25zdCBh''@;'; put 'put ''PVBNKGkpLGw9dD9gJHt0fS0ke2F9YDphO0NhKG8pP3IrPWdPKG8sZSxsKTpyKz1gJHtsTHQoZSxsLG8pfVxuYH0pLHJ9ZnVuY3Rpb24gS0llKG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0''@;'; put 'put ''d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBYSWUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQobil9ZnVuY3Rpb24gUUllKG4sZSl7cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uIGNMdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sWEllKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIEpJZShuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIHVMdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUp''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4sWEllKG4sZSwic2V0IiksdCksdH1mdW5jdGlvbiBlRGUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8g''@;'; put 'put ''Z2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHR9dmFyIG1PPW5ldyBXZWFrTWFwLENkZT1uZXcgV2Vha1NldDtjbGFzcyBnTHR7Z2V0Q2xhc3NOYW1lKCl7cmV0dXJuIHRoaXMudGhlbWVDbGFzc05hbWV9dXBkYXRlKGUpe3ZhciB0O3RoaXMuaG90JiYodm9pZCAw''@;'; put 'put ''PT09ZS5nZXRUaGVtZUNvbmZpZyYmSnIoJ1tUaGVtZU1hbmFnZXJdIFRoZSAidGhlbWUiIG9wdGlvbiBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFRoZW1lQnVpbGRlci4nKSx0aGlzLnRoZW1lQ29uZmlnPWUuZ2V0VGhlbWVDb25maWcoKSx0aGlzLnRoZW1lQ2xhc3NOYW1lPWBodC10aGVtZS0k''@;'; put 'put ''e3RoaXMudGhlbWVDb25maWcubmFtZX1gLCJmdW5jdGlvbiI9PXR5cGVvZiBlLnN1YnNjcmliZSYmKG51bGw9PT0odD1RSWUodGhpcyxtTykpfHx2b2lkIDA9PT10fHx0LmNhbGwodGhpcyksSkllKHRoaXMsbU8sZS5zdWJzY3JpYmUobz0+e3RoaXMuaG90Py5zdHlsZXNIYW5kbGVyJiYodGhp''@;'; put 'put ''cy50aGVtZUNvbmZpZz1vLGVEZSh0aGlzLENkZSx0RGUpLmNhbGwodGhpcyksdGhpcy5ob3Quc3R5bGVzSGFuZGxlci5jbGVhckNhY2hlKCksdGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2V0VGhlbWUiLHRoaXMudGhlbWVDbGFzc05hbWUsITEpKX0pKSksdGhp''@;'; put 'put ''cy5tb3VudCgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNldFRoZW1lIix0aGlzLnRoZW1lQ2xhc3NOYW1lLCEwKSl9bW91bnQoKXtlRGUodGhpcyxDZGUsdERlKS5jYWxsKHRoaXMpfXVubW91bnQoKXt0aGlzLnRoZW1lU3R5bGVzJiZ0aGlzLnRoZW1lU3R5bGVzLnJlbW92ZSgpfWRlc3Ry''@;'; put 'put ''b3koKXt2YXIgZTtudWxsPT09KGU9UUllKHRoaXMsbU8pKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKHRoaXMpLHRoaXMudW5tb3VudCgpLHRoaXMuaG90LnRoZW1lTWFuYWdlcj1udWxsfWNvbnN0cnVjdG9yKHtob3Q6ZSx0aGVtZU9iamVjdDp0fSl7KGZ1bmN0aW9uIGhMdChuLGUpe0tJZShuLGUp''@;'; put 'put ''LGUuYWRkKG4pfSkodGhpcyxDZGUpLGZ1bmN0aW9uIGRMdChuLGUsdCl7S0llKG4sZSksZS5zZXQobix0KX0odGhpcyxtTyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdGhpcy50aGVtZVN0eWxlcz1udWxsLHRoaXMudGhlbWVDbGFzc05hbWU9IiIsdGhpcy50aGVtZUNvbmZpZz1udWxs''@;'; put 'put ''LEpJZSh0aGlzLG1PLG51bGwpLHRoaXMuaG90PWUsdGhpcy51cGRhdGUodCl9fWZ1bmN0aW9uIHREZSgpe2lmKCEodGhpcy50aGVtZUNvbmZpZyYmdGhpcy5ob3QmJnRoaXMuaG90LnJvb3REb2N1bWVudCYmdGhpcy5ob3Qucm9vdFdyYXBwZXJFbGVtZW50KSlyZXR1cm47Y29uc3Qgbj0iYXV0''@;'; put 'put ''byI9PT10aGlzLnRoZW1lQ29uZmlnLmNvbG9yU2NoZW1lPyJsaWdodCBkYXJrIjp0aGlzLnRoZW1lQ29uZmlnLmNvbG9yU2NoZW1lO3RoaXMudGhlbWVTdHlsZXN8fCh0aGlzLnRoZW1lU3R5bGVzPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLHRoaXMudGhl''@;'; put 'put ''bWVTdHlsZXMuc2V0QXR0cmlidXRlKCJkYXRhLWhvdC10aGVtZS1zdHlsZSIsInRydWUiKSksdGhpcy50aGVtZVN0eWxlcy50ZXh0Q29udGVudD1gOndoZXJlKC4ke3RoaXMudGhlbWVDbGFzc05hbWV9KSB7XG5gLHRoaXMudGhlbWVDb25maWcuc2l6aW5nJiYodGhpcy50aGVtZVN0eWxlcy50''@;'; put 'put ''ZXh0Q29udGVudCs9Z08odGhpcy50aGVtZUNvbmZpZy5zaXppbmcsInNpemluZyIpKSx0aGlzLnRoZW1lQ29uZmlnLmRlbnNpdHkmJnRoaXMudGhlbWVDb25maWcuZGVuc2l0eS50eXBlJiZ0aGlzLnRoZW1lQ29uZmlnLmRlbnNpdHkuc2l6ZXMmJnRoaXMudGhlbWVDb25maWcuZGVuc2l0eS5z''@;'; put 'put ''aXplc1t0aGlzLnRoZW1lQ29uZmlnLmRlbnNpdHkudHlwZV0mJih0aGlzLnRoZW1lU3R5bGVzLnRleHRDb250ZW50Kz1nTyh0aGlzLnRoZW1lQ29uZmlnLmRlbnNpdHkuc2l6ZXNbdGhpcy50aGVtZUNvbmZpZy5kZW5zaXR5LnR5cGVdLCJkZW5zaXR5IikpLHRoaXMudGhlbWVDb25maWcuY29s''@;'; put 'put ''b3JzJiYodGhpcy50aGVtZVN0eWxlcy50ZXh0Q29udGVudCs9Z08odGhpcy50aGVtZUNvbmZpZy5jb2xvcnMsImNvbG9ycyIpKSx0aGlzLnRoZW1lQ29uZmlnLnRva2VucyYmKHRoaXMudGhlbWVTdHlsZXMudGV4dENvbnRlbnQrPWdPKHRoaXMudGhlbWVDb25maWcudG9rZW5zKSksdGhpcy50''@;'; put 'put ''aGVtZUNvbmZpZy5pY29ucyYmKHRoaXMudGhlbWVTdHlsZXMudGV4dENvbnRlbnQrPShuPT5gLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0U3VibWVudSAuaHRJdGVtV3JhcHBlcjo6YWZ0ZXIsXG4uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFN1Ym1lbnUg''@;'; put 'put ''Lmh0SXRlbVdyYXBwZXI6OmFmdGVyLFxuLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0U3VibWVudSAuaHRJdGVtV3JhcHBlcjo6YWZ0ZXIsXG4ucGlrYS1zaW5nbGUgLnBpa2EtbmV4dCB7XG4gICR7Q3UobiwiYXJyb3dSaWdodCIpfVxufVxuXG4ucGlrYS1z''@;'; put 'put ''aW5nbGUgLnBpa2EtcHJldiB7XG4gICR7Q3UobiwiYXJyb3dMZWZ0Iil9XG59XG5cbi5odC1wYWdlLXNpemUtc2VjdGlvbl9fc2VsZWN0LXdyYXBwZXI6OmFmdGVyIHtcbiAgJHtDdShuLCJhcnJvd0Rvd24iKX1cbn1cblxuLmNoYW5nZVR5cGU6OmJlZm9yZSB7XG4gICR7Q3UobiwibWVudSIp''@;'; put 'put ''fVxufVxuXG4uaHRVSVNlbGVjdENhcHRpb246OmFmdGVyLFxuLmh0QXV0b2NvbXBsZXRlQXJyb3c6OmFmdGVyIHtcbiAgJHtDdShuLCJzZWxlY3RBcnJvdyIpfVxufVxuXG4uY29sdW1uU29ydGluZy5zb3J0QWN0aW9uLmFzY2VuZGluZzo6YmVmb3JlIHtcbiAgJHtDdShuLCJhcnJvd05hcnJv''@;'; put 'put ''d1VwIil9XG59XG5cbi5jb2x1bW5Tb3J0aW5nLnNvcnRBY3Rpb24uZGVzY2VuZGluZzo6YmVmb3JlIHtcbiAgJHtDdShuLCJhcnJvd05hcnJvd0Rvd24iKX1cbn1cblxuLmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uIC5odC1wYWdlLWZpcnN0OjpiZWZvcmUge1xuICAke0N1KG4sImFycm93''@;'; put 'put ''TGVmdFdpdGhCYXIiKX1cbn1cblxuW2Rpcj0icnRsIl0gLmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uIC5odC1wYWdlLWZpcnN0OjpiZWZvcmUge1xuICAke0N1KG4sImFycm93UmlnaHRXaXRoQmFyIil9XG59XG5cbi5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbiAuaHQtcGFnZS1wcmV2''@;'; put 'put ''OjpiZWZvcmUge1xuICAke0N1KG4sImFycm93TGVmdCIpfVxufVxuXG5bZGlyPSJydGwiXSAuaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb24gLmh0LXBhZ2UtcHJldjo6YmVmb3JlIHtcbiAgJHtDdShuLCJhcnJvd1JpZ2h0Iil9XG59XG5cbi5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbiAu''@;'; put 'put ''aHQtcGFnZS1uZXh0OjpiZWZvcmUge1xuICAke0N1KG4sImFycm93UmlnaHQiKX1cbn1cblxuW2Rpcj0icnRsIl0gLmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uIC5odC1wYWdlLW5leHQ6OmJlZm9yZSB7XG4gICR7Q3UobiwiYXJyb3dMZWZ0Iil9XG59XG5cbi5odC1wYWdlLW5hdmlnYXRp''@;'; put 'put ''b24tc2VjdGlvbiAuaHQtcGFnZS1sYXN0OjpiZWZvcmUge1xuICAke0N1KG4sImFycm93UmlnaHRXaXRoQmFyIil9XG59XG5cbltkaXI9InJ0bCJdIC5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbiAuaHQtcGFnZS1sYXN0OjpiZWZvcmUge1xuICAke0N1KG4sImFycm93TGVmdFdpdGhCYXIi''@;'; put 'put ''KX1cbn1cblxuLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVyIHNwYW4uc2VsZWN0ZWQ6OmFmdGVyLFxuLmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXIgc3Bhbi5zZWxlY3RlZDo6YWZ0ZXIsXG4uaHRGaWx0ZXJzQ29u''@;'; put 'put ''ZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXIgc3Bhbi5zZWxlY3RlZDo6YWZ0ZXIge1xuICAke0N1KG4sImNoZWNrIil9XG59XG5cbi5odENoZWNrYm94UmVuZGVyZXJJbnB1dCB7XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG59XG5cbi5odENoZWNrYm94UmVuZGVy''@;'; put 'put ''ZXJJbnB1dDo6YWZ0ZXIge1xuICAke0N1KG4sImNoZWNrYm94Iil9XG59XG5cbnRoLmJlZm9yZUhpZGRlbkNvbHVtbjo6YWZ0ZXIge1xuICAke0N1KG4sImNhcmV0SGlkZGVuTGVmdCIpfVxufVxuXG50aC5hZnRlckhpZGRlbkNvbHVtbjo6YmVmb3JlIHtcbiAgJHtDdShuLCJjYXJldEhpZGRl''@;'; put 'put ''blJpZ2h0Iil9XG59XG5cbnRoLmJlZm9yZUhpZGRlblJvdzo6YWZ0ZXIge1xuICAke0N1KG4sImNhcmV0SGlkZGVuVXAiKX1cbn1cblxudGguYWZ0ZXJIaWRkZW5Sb3c6OmJlZm9yZSB7XG4gICR7Q3UobiwiY2FyZXRIaWRkZW5Eb3duIil9XG59XG5cbi5jb2xsYXBzaWJsZUluZGljYXRvcjo6''@;'; put 'put ''YmVmb3JlLFxuLmh0X25lc3RpbmdCdXR0b246OmJlZm9yZSB7XG4gICR7Q3UobiwiY29sbGFwc2VPZmYiKX1cbn1cblxuLmNvbGxhcHNpYmxlSW5kaWNhdG9yLmNvbGxhcHNlZDo6YmVmb3JlLFxuLmh0X25lc3RpbmdCdXR0b24uaHRfbmVzdGluZ0V4cGFuZDo6YmVmb3JlIHtcbiAgJHtDdShu''@;'; put 'put ''LCJjb2xsYXBzZU9uIil9XG59XG5cbi5odFVJUmFkaW8gPiBpbnB1dFt0eXBlPSJyYWRpbyJdOjphZnRlciB7XG4gICR7Q3UobiwicmFkaW8iKX1cbn1cblxuLmh0LW11bHRpLXNlbGVjdC1jaGlwLXJlbW92ZTo6YmVmb3JlIHtcbiAgJHtDdShuLCJjaGlwQ2xvc2UiKX1cbn1cblxuLmh0LW5v''@;'; put 'put ''dGlmaWNhdGlvbl9fY2xvc2U6OmJlZm9yZSB7XG4gICR7Q3UobiwiY2hpcENsb3NlIil9XG59XG5cbi5odC1tdWx0aS1zZWxlY3QtZWRpdG9yLXNlYXJjaC1pY29uIHtcbiAgJHtDdShuLCJzZWFyY2giKX1cbn1cblxuLmh0LW11bHRpLXNlbGVjdC1lZGl0b3ItaXRlbS1zZWxlY3RlZCBpbnB1''@;'; put 'put ''dDo6YWZ0ZXIge1xuICAke0N1KG4sImNoZWNrYm94Iil9XG59YCkodGhpcy50aGVtZUNvbmZpZy5pY29ucykpLHRoaXMudGhlbWVTdHlsZXMudGV4dENvbnRlbnQrPSJ9XG4iLHRoaXMudGhlbWVTdHlsZXMudGV4dENvbnRlbnQrPWAuJHt0aGlzLnRoZW1lQ2xhc3NOYW1lfSB7XG5jb2xvci1z''@;'; put 'put ''Y2hlbWU6ICR7bn07XG59YCx0aGlzLnRoZW1lU3R5bGVzLnBhcmVudE5vZGUhPT10aGlzLmhvdC5yb290V3JhcHBlckVsZW1lbnQmJnRoaXMuaG90LnJvb3RXcmFwcGVyRWxlbWVudC5wcmVwZW5kKHRoaXMudGhlbWVTdHlsZXMpfWZ1bmN0aW9uIG5EZShuLGUpe2lmKGUuaGFzKG4pKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gckRlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmll''@;'; put 'put ''bGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIGpoKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIHZMdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sckRlKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIHZPKG4sZSx0KXtuRGUobixlKSxlLnNl''@;'; put 'put ''dChuLHQpfWZ1bmN0aW9uIEl3KG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gX0x0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52''@;'; put 'put ''YWx1ZT10fX0obixyRGUobixlLCJzZXQiKSx0KSx0fWZ1bmN0aW9uIGxaKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiB0fWZ1bmN0aW9uIGlEZShuLGUpe25EZShu''@;'; put 'put ''LGUpLGUuYWRkKG4pfXZhciBfTz1uZXcgV2Vha01hcCwkcD1uZXcgV2Vha01hcCx5Tz1uZXcgV2Vha01hcCxjWj1uZXcgV2Vha01hcCx3VD1uZXcgV2Vha01hcCxTZGU9bmV3IFdlYWtTZXQsRWRlPW5ldyBXZWFrU2V0O2NsYXNzIHlMdHtnZXRFbGVtZW50KCl7cmV0dXJuIGpoKHRoaXMsX08p''@;'; put 'put ''fWhhcyhlKXtyZXR1cm4gamgodGhpcywkcCkuaGFzKGUpfWFkZChlLHQscj0wKXtjb25zdCBpPWpoKHRoaXMsJHApLmdldChlKSxvPWk/aS5zZXE6amgodGhpcyx5Tyk7aSYmaS5lbGVtZW50LnJlbW92ZSgpLGpoKHRoaXMsd1QpJiZ0LmNsYXNzTGlzdC5hZGQoamgodGhpcyx3VCkpLGpoKHRo''@;'; put 'put ''aXMsJHApLnNldChlLHtlbGVtZW50OnQsd2VpZ2h0OnIsc2VxOm99KSxpfHxJdyh0aGlzLHlPLGpoKHRoaXMseU8pKzEpLGxaKHRoaXMsRWRlLGFEZSkuY2FsbCh0aGlzKX1yZW1vdmUoZSl7Y29uc3QgdD1qaCh0aGlzLCRwKS5nZXQoZSk7dCYmKGpoKHRoaXMsd1QpJiZ0LmVsZW1lbnQuY2xh''@;'; put 'put ''c3NMaXN0LnJlbW92ZShqaCh0aGlzLHdUKSksdC5lbGVtZW50LnJlbW92ZSgpLGpoKHRoaXMsJHApLmRlbGV0ZShlKSl9c2V0T3JkZXIoZSl7SXcodGhpcyxjWixBcnJheS5pc0FycmF5KGUpP2Uuc2xpY2UoKTpbXSksbFoodGhpcyxFZGUsYURlKS5jYWxsKHRoaXMpfWdldE9yZGVyKCl7cmV0''@;'; put 'put ''dXJuIGxaKHRoaXMsU2RlLG9EZSkuY2FsbCh0aGlzKX1jbGVhcigpe2poKHRoaXMsJHApLmZvckVhY2goZT0+ZS5lbGVtZW50LnJlbW92ZSgpKSxqaCh0aGlzLCRwKS5jbGVhcigpfWNvbnN0cnVjdG9yKGUse2l0ZW1DbGFzczp0PSIifT17fSl7aURlKHRoaXMsU2RlKSxpRGUodGhpcyxFZGUp''@;'; put 'put ''LHZPKHRoaXMsX08se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHZPKHRoaXMsJHAse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHZPKHRoaXMseU8se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHZPKHRoaXMsY1ose3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHZPKHRoaXMs''@;'; put 'put ''d1Qse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEl3KHRoaXMsJHAsbmV3IE1hcCksSXcodGhpcyx5TywwKSxJdyh0aGlzLGNaLFtdKSxJdyh0aGlzLF9PLGUpLEl3KHRoaXMsd1QsdCl9fWZ1bmN0aW9uIG9EZSgpe2NvbnN0IG49amgodGhpcyxjWik7cmV0dXJuIEFycmF5LmZyb20oamgo''@;'; put 'put ''dGhpcywkcCkua2V5cygpKS5zb3J0KChlLHQpPT57Y29uc3Qgcj1uLmluZGV4T2YoZSksaT1uLmluZGV4T2YodCk7aWYoLTEhPT1yfHwtMSE9PWkpcmV0dXJuKC0xPT09cj8xLzA6ciktKC0xPT09aT8xLzA6aSk7Y29uc3Qgbz1qaCh0aGlzLCRwKS5nZXQoZSksYT1qaCh0aGlzLCRwKS5nZXQo''@;'; put 'put ''dCk7cmV0dXJuIG8ud2VpZ2h0IT09YS53ZWlnaHQ/by53ZWlnaHQtYS53ZWlnaHQ6by5zZXEtYS5zZXF9KX1mdW5jdGlvbiBhRGUoKXtsZXQgbj1qaCh0aGlzLF9PKS5maXJzdENoaWxkO2xaKHRoaXMsU2RlLG9EZSkuY2FsbCh0aGlzKS5mb3JFYWNoKGU9Pntjb25zdCB0PWpoKHRoaXMsJHAp''@;'; put 'put ''LmdldChlKS5lbGVtZW50O3Q9PT1uP249bi5uZXh0U2libGluZzpqaCh0aGlzLF9PKS5pbnNlcnRCZWZvcmUodCxuKX0pfWZ1bmN0aW9uIHNEZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1p''@;'; put 'put ''bnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBsRGUobixlKXtyZXR1cm4gZnVuY3Rpb24gd0x0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obixzRGUobixlLCJnZXQiKSl9dmFyIHVaPW5ldyBXZWFrTWFwO2NsYXNzIE1MdHtnZXRTbG90KGUpe2Nv''@;'; put 'put ''bnN0IHQ9bERlKHRoaXMsdVopLmdldChlKTtyZXR1cm4gdHx8SnIoYFVua25vd24gbGF5b3V0IHNsb3QgIiR7ZX0iLmApLHR9cmVnaXN0ZXIoZSx0LHtzaWRlOnIsd2VpZ2h0Omk9MH0pe3RoaXMuZ2V0U2xvdChyKS5hZGQoZSx0LGkpfXVucmVnaXN0ZXIoZSx0KXt0aGlzLmdldFNsb3QodCku''@;'; put 'put ''cmVtb3ZlKGUpfWFwcGx5Q29uZmlnKGU9e30pe09iamVjdC52YWx1ZXMoUUR0KS5mb3JFYWNoKHQ9PnRoaXMuZ2V0U2xvdCh0KS5zZXRPcmRlcihlPy5bdF0/P1tdKSl9ZGVzdHJveSgpe2xEZSh0aGlzLHVaKS5mb3JFYWNoKGU9PmUuY2xlYXIoKSl9Y29uc3RydWN0b3IoZSl7KGZ1bmN0aW9u''@;'; put 'put ''IFNMdChuLGUsdCl7KGZ1bmN0aW9uIGJMdChuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLGUpLGUuc2V0KG4sdCl9KSh0aGlzLHVaLHt3cml0YWJs''@;'; put 'put ''ZTohMCx2YWx1ZTp2b2lkIDB9KSxmdW5jdGlvbiBFTHQobixlLHQpe3JldHVybiBmdW5jdGlvbiBDTHQobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZh''@;'; put 'put ''dGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLHNEZShuLGUsInNldCIpLHQpLHR9KHRoaXMsdVosbmV3IE1hcChPYmplY3Qua2V5cyhlKS5tYXAodD0+W3QsbmV3IHlMdChlW3RdLHtpdGVtQ2xhc3M6WkllfSldKSkpfX1jb25zdCBUTHQ9e3NpemVfMDoiMHB4IixzaXplXzBfNToiMnB4IixzaXpl''@;'; put 'put ''XzE6IjRweCIsc2l6ZV8yOiI4cHgiLHNpemVfMV81OiI2cHgiLHNpemVfMzoiMTJweCIsc2l6ZV80OiIxNnB4IixzaXplXzU6IjIwcHgiLHNpemVfNjoiMjRweCIsc2l6ZV83OiIyOHB4IixzaXplXzg6IjMycHgiLHNpemVfOToiMzZweCIsc2l6ZV8xMDoiNDBweCIsc2l6ZV8wXzI1OiIxcHgi''@;'; put 'put ''fSx4THQ9e2RlZmF1bHQ6e2NlbGxWZXJ0aWNhbDoic2l6aW5nLnNpemVfMSIsY2VsbEhvcml6b250YWw6InNpemluZy5zaXplXzIiLGJhcnNIb3Jpem9udGFsOiJzaXppbmcuc2l6ZV80IixiYXJzVmVydGljYWw6InNpemluZy5zaXplXzIiLGdhcDoic2l6aW5nLnNpemVfMSIsYnV0dG9uSG9y''@;'; put 'put ''aXpvbnRhbDoic2l6aW5nLnNpemVfMyIsYnV0dG9uVmVydGljYWw6InNpemluZy5zaXplXzFfNSIsZGlhbG9nSG9yaXpvbnRhbDoic2l6aW5nLnNpemVfMiIsZGlhbG9nVmVydGljYWw6InNpemluZy5zaXplXzIiLGlucHV0SG9yaXpvbnRhbDoic2l6aW5nLnNpemVfMyIsaW5wdXRWZXJ0aWNh''@;'; put 'put ''bDoic2l6aW5nLnNpemVfMV81IixtZW51VmVydGljYWw6InNpemluZy5zaXplXzIiLG1lbnVIb3Jpem9udGFsOiJzaXppbmcuc2l6ZV8wIixtZW51SXRlbVZlcnRpY2FsOiJzaXppbmcuc2l6ZV8xIixtZW51SXRlbUhvcml6b250YWw6InNpemluZy5zaXplXzMifSxjb21wYWN0OntjZWxsVmVy''@;'; put 'put ''dGljYWw6InNpemluZy5zaXplXzBfNSIsY2VsbEhvcml6b250YWw6InNpemluZy5zaXplXzFfNSIsYmFyc0hvcml6b250YWw6InNpemluZy5zaXplXzIiLGJhcnNWZXJ0aWNhbDoic2l6aW5nLnNpemVfMSIsZ2FwOiJzaXppbmcuc2l6ZV8wXzUiLGJ1dHRvbkhvcml6b250YWw6InNpemluZy5z''@;'; put 'put ''aXplXzIiLGJ1dHRvblZlcnRpY2FsOiJzaXppbmcuc2l6ZV8wXzUiLGRpYWxvZ0hvcml6b250YWw6InNpemluZy5zaXplXzFfNSIsZGlhbG9nVmVydGljYWw6InNpemluZy5zaXplXzFfNSIsaW5wdXRIb3Jpem9udGFsOiJzaXppbmcuc2l6ZV8yIixpbnB1dFZlcnRpY2FsOiJzaXppbmcuc2l6''@;'; put 'put ''ZV8wXzUiLG1lbnVWZXJ0aWNhbDoic2l6aW5nLnNpemVfMiIsbWVudUhvcml6b250YWw6InNpemluZy5zaXplXzAiLG1lbnVJdGVtVmVydGljYWw6InNpemluZy5zaXplXzBfNSIsbWVudUl0ZW1Ib3Jpem9udGFsOiJzaXppbmcuc2l6ZV8yIn0sY29tZm9ydGFibGU6e2NlbGxWZXJ0aWNhbDoi''@;'; put 'put ''c2l6aW5nLnNpemVfMiIsY2VsbEhvcml6b250YWw6InNpemluZy5zaXplXzMiLGJhcnNIb3Jpem9udGFsOiJzaXppbmcuc2l6ZV80IixiYXJzVmVydGljYWw6InNpemluZy5zaXplXzIiLGdhcDoic2l6aW5nLnNpemVfMV81IixidXR0b25Ib3Jpem9udGFsOiJzaXppbmcuc2l6ZV80IixidXR0''@;'; put 'put ''b25WZXJ0aWNhbDoic2l6aW5nLnNpemVfMiIsZGlhbG9nSG9yaXpvbnRhbDoic2l6aW5nLnNpemVfMyIsZGlhbG9nVmVydGljYWw6InNpemluZy5zaXplXzMiLGlucHV0SG9yaXpvbnRhbDoic2l6aW5nLnNpemVfNCIsaW5wdXRWZXJ0aWNhbDoic2l6aW5nLnNpemVfMiIsbWVudVZlcnRpY2Fs''@;'; put 'put ''OiJzaXppbmcuc2l6ZV8zIixtZW51SG9yaXpvbnRhbDoic2l6aW5nLnNpemVfMCIsbWVudUl0ZW1WZXJ0aWNhbDoic2l6aW5nLnNpemVfMiIsbWVudUl0ZW1Ib3Jpem9udGFsOiJzaXppbmcuc2l6ZV8yIn19LEFMdD1uZXcgU2V0KFsibmFtZSIsInNpemluZyIsImRlbnNpdHkiLCJpY29ucyIs''@;'; put 'put ''ImNvbG9ycyIsInRva2VucyIsImNvbG9yU2NoZW1lIl0pLGNEZT1uZXcgU2V0KFsibGlnaHQiLCJkYXJrIiwiYXV0byJdKSxNZGU9bmV3IFNldChbImRlZmF1bHQiLCJjb21wYWN0IiwiY29tZm9ydGFibGUiXSksa0x0PW5ldyBTZXQoWyJhcnJvd1JpZ2h0IiwiYXJyb3dSaWdodFdpdGhCYXIi''@;'; put 'put ''LCJhcnJvd0xlZnQiLCJhcnJvd0xlZnRXaXRoQmFyIiwiYXJyb3dEb3duIiwibWVudSIsInNlbGVjdEFycm93IiwiYXJyb3dOYXJyb3dVcCIsImFycm93TmFycm93RG93biIsImNoZWNrIiwiY2hlY2tib3giLCJjYXJldEhpZGRlbkxlZnQiLCJjYXJldEhpZGRlblJpZ2h0IiwiY2FyZXRIaWRk''@;'; put 'put ''ZW5VcCIsImNhcmV0SGlkZGVuRG93biIsImNvbGxhcHNlT2ZmIiwiY29sbGFwc2VPbiIsInJhZGlvIiwiY2hpcENsb3NlIiwic2VhcmNoIl0pLFJMdD1uZXcgU2V0KFsiZm9udEZhbWlseSIsImZvbnRTaXplIiwiZm9udFNpemVTbWFsbCIsImxpbmVIZWlnaHQiLCJsaW5lSGVpZ2h0U21hbGwi''@;'; put 'put ''LCJmb250V2VpZ2h0IiwibGV0dGVyU3BhY2luZyIsImdhcFNpemUiLCJpY29uU2l6ZSIsInRhYmxlVHJhbnNpdGlvbiIsImJvcmRlclJhZGl1cyIsImJvcmRlckNvbG9yIiwiYWNjZW50Q29sb3IiLCJmb3JlZ3JvdW5kQ29sb3IiLCJmb3JlZ3JvdW5kU2Vjb25kYXJ5Q29sb3IiLCJiYWNrZ3Jv''@;'; put 'put ''dW5kQ29sb3IiLCJiYWNrZ3JvdW5kU2Vjb25kYXJ5Q29sb3IiLCJwbGFjZWhvbGRlckNvbG9yIiwicmVhZE9ubHlDb2xvciIsImRpc2FibGVkQ29sb3IiLCJzaGFkb3dDb2xvciIsInNoYWRvd1giLCJzaGFkb3dZIiwic2hhZG93Qmx1ciIsInNoYWRvd09wYWNpdHkiLCJiYXJGb3JlZ3JvdW5k''@;'; put 'put ''Q29sb3IiLCJiYXJCYWNrZ3JvdW5kQ29sb3IiLCJiYXJIb3Jpem9udGFsUGFkZGluZyIsImJhclZlcnRpY2FsUGFkZGluZyIsImNlbGxIb3Jpem9udGFsQm9yZGVyQ29sb3IiLCJjZWxsVmVydGljYWxCb3JkZXJDb2xvciIsImNlbGxIb3Jpem9udGFsUGFkZGluZyIsImNlbGxWZXJ0aWNhbFBh''@;'; put 'put ''ZGRpbmciLCJyb3dIZWFkZXJPZGRCYWNrZ3JvdW5kQ29sb3IiLCJyb3dIZWFkZXJFdmVuQmFja2dyb3VuZENvbG9yIiwicm93Q2VsbE9kZEJhY2tncm91bmRDb2xvciIsInJvd0NlbGxFdmVuQmFja2dyb3VuZENvbG9yIiwiY2VsbEVkaXRvckJvcmRlcldpZHRoIiwiY2VsbEVkaXRvckJvcmRl''@;'; put 'put ''ckNvbG9yIiwiY2VsbEVkaXRvckZvcmVncm91bmRDb2xvciIsImNlbGxFZGl0b3JCYWNrZ3JvdW5kQ29sb3IiLCJjZWxsRWRpdG9yU2hhZG93Qmx1clJhZGl1cyIsImNlbGxFZGl0b3JTaGFkb3dDb2xvciIsImNlbGxTdWNjZXNzQmFja2dyb3VuZENvbG9yIiwiY2VsbEVycm9yQmFja2dyb3Vu''@;'; put 'put ''ZENvbG9yIiwiY2VsbFJlYWRPbmx5QmFja2dyb3VuZENvbG9yIiwiY2VsbFNlbGVjdGlvbkJvcmRlckNvbG9yIiwiY2VsbFNlbGVjdGlvbkJhY2tncm91bmRDb2xvciIsImNlbGxBdXRvZmlsbFNpemUiLCJjZWxsQXV0b2ZpbGxIaXRBcmVhU2l6ZSIsImNlbGxBdXRvZmlsbEJvcmRlcldpZHRo''@;'; put 'put ''IiwiY2VsbEF1dG9maWxsQm9yZGVyUmFkaXVzIiwiY2VsbEF1dG9maWxsQm9yZGVyQ29sb3IiLCJjZWxsQXV0b2ZpbGxCYWNrZ3JvdW5kQ29sb3IiLCJjZWxsQXV0b2ZpbGxGaWxsQm9yZGVyQ29sb3IiLCJjZWxsTW9iaWxlSGFuZGxlU2l6ZSIsImNlbGxNb2JpbGVIYW5kbGVCb3JkZXJXaWR0''@;'; put 'put ''aCIsImNlbGxNb2JpbGVIYW5kbGVCb3JkZXJSYWRpdXMiLCJjZWxsTW9iaWxlSGFuZGxlQm9yZGVyQ29sb3IiLCJjZWxsTW9iaWxlSGFuZGxlQmFja2dyb3VuZENvbG9yIiwiY2VsbE1vYmlsZUhhbmRsZUJhY2tncm91bmRPcGFjaXR5IiwicmVzaXplSW5kaWNhdG9yQ29sb3IiLCJtb3ZlQmFj''@;'; put 'put ''a2xpZ2h0Q29sb3IiLCJtb3ZlQmFja2xpZ2h0T3BhY2l0eSIsIm1vdmVJbmRpY2F0b3JDb2xvciIsImhpZGRlbkluZGljYXRvckNvbG9yIiwic2Nyb2xsYmFyQm9yZGVyUmFkaXVzIiwic2Nyb2xsYmFyVHJhY2tDb2xvciIsInNjcm9sbGJhclRodW1iQ29sb3IiLCJoZWFkZXJGb250V2VpZ2h0''@;'; put 'put ''IiwiaGVhZGVyRm9yZWdyb3VuZENvbG9yIiwiaGVhZGVyQmFja2dyb3VuZENvbG9yIiwiaGVhZGVySGlnaGxpZ2h0ZWRTaGFkb3dTaXplIiwiaGVhZGVySGlnaGxpZ2h0ZWRGb3JlZ3JvdW5kQ29sb3IiLCJoZWFkZXJIaWdobGlnaHRlZEJhY2tncm91bmRDb2xvciIsImhlYWRlckFjdGl2ZUJv''@;'; put 'put ''cmRlckNvbG9yIiwiaGVhZGVyQWN0aXZlRm9yZWdyb3VuZENvbG9yIiwiaGVhZGVyQWN0aXZlQmFja2dyb3VuZENvbG9yIiwiaGVhZGVyRmlsdGVyQmFja2dyb3VuZENvbG9yIiwiaGVhZGVyUm93Rm9yZWdyb3VuZENvbG9yIiwiaGVhZGVyUm93QmFja2dyb3VuZENvbG9yIiwiaGVhZGVyUm93''@;'; put 'put ''SGlnaGxpZ2h0ZWRGb3JlZ3JvdW5kQ29sb3IiLCJoZWFkZXJSb3dIaWdobGlnaHRlZEJhY2tncm91bmRDb2xvciIsImhlYWRlclJvd0FjdGl2ZUZvcmVncm91bmRDb2xvciIsImhlYWRlclJvd0FjdGl2ZUJhY2tncm91bmRDb2xvciIsImNoZWNrYm94U2l6ZSIsImNoZWNrYm94Qm9yZGVyUmFk''@;'; put 'put ''aXVzIiwiY2hlY2tib3hCb3JkZXJDb2xvciIsImNoZWNrYm94QmFja2dyb3VuZENvbG9yIiwiY2hlY2tib3hJY29uQ29sb3IiLCJjaGVja2JveEZvY3VzQm9yZGVyQ29sb3IiLCJjaGVja2JveEZvY3VzQmFja2dyb3VuZENvbG9yIiwiY2hlY2tib3hGb2N1c0ljb25Db2xvciIsImNoZWNrYm94''@;'; put 'put ''Rm9jdXNSaW5nQ29sb3IiLCJjaGVja2JveERpc2FibGVkQm9yZGVyQ29sb3IiLCJjaGVja2JveERpc2FibGVkQmFja2dyb3VuZENvbG9yIiwiY2hlY2tib3hEaXNhYmxlZEljb25Db2xvciIsImNoZWNrYm94Q2hlY2tlZEJvcmRlckNvbG9yIiwiY2hlY2tib3hDaGVja2VkQmFja2dyb3VuZENv''@;'; put 'put ''bG9yIiwiY2hlY2tib3hDaGVja2VkSWNvbkNvbG9yIiwiY2hlY2tib3hDaGVja2VkRm9jdXNCb3JkZXJDb2xvciIsImNoZWNrYm94Q2hlY2tlZEZvY3VzQmFja2dyb3VuZENvbG9yIiwiY2hlY2tib3hDaGVja2VkRm9jdXNJY29uQ29sb3IiLCJjaGVja2JveENoZWNrZWREaXNhYmxlZEJvcmRl''@;'; put 'put ''ckNvbG9yIiwiY2hlY2tib3hDaGVja2VkRGlzYWJsZWRCYWNrZ3JvdW5kQ29sb3IiLCJjaGVja2JveENoZWNrZWREaXNhYmxlZEljb25Db2xvciIsImNoZWNrYm94SW5kZXRlcm1pbmF0ZUJvcmRlckNvbG9yIiwiY2hlY2tib3hJbmRldGVybWluYXRlQmFja2dyb3VuZENvbG9yIiwiY2hlY2ti''@;'; put 'put ''b3hJbmRldGVybWluYXRlSWNvbkNvbG9yIiwiY2hlY2tib3hJbmRldGVybWluYXRlRm9jdXNCb3JkZXJDb2xvciIsImNoZWNrYm94SW5kZXRlcm1pbmF0ZUZvY3VzQmFja2dyb3VuZENvbG9yIiwiY2hlY2tib3hJbmRldGVybWluYXRlRm9jdXNJY29uQ29sb3IiLCJjaGVja2JveEluZGV0ZXJt''@;'; put 'put ''aW5hdGVEaXNhYmxlZEJvcmRlckNvbG9yIiwiY2hlY2tib3hJbmRldGVybWluYXRlRGlzYWJsZWRCYWNrZ3JvdW5kQ29sb3IiLCJjaGVja2JveEluZGV0ZXJtaW5hdGVEaXNhYmxlZEljb25Db2xvciIsInJhZGlvU2l6ZSIsInJhZGlvQm9yZGVyQ29sb3IiLCJyYWRpb0JhY2tncm91bmRDb2xv''@;'; put 'put ''ciIsInJhZGlvSWNvbkNvbG9yIiwicmFkaW9Gb2N1c0JvcmRlckNvbG9yIiwicmFkaW9Gb2N1c0JhY2tncm91bmRDb2xvciIsInJhZGlvRm9jdXNJY29uQ29sb3IiLCJyYWRpb0ZvY3VzUmluZ0NvbG9yIiwicmFkaW9EaXNhYmxlZEJvcmRlckNvbG9yIiwicmFkaW9EaXNhYmxlZEJhY2tncm91''@;'; put 'put ''bmRDb2xvciIsInJhZGlvRGlzYWJsZWRJY29uQ29sb3IiLCJyYWRpb0NoZWNrZWRCb3JkZXJDb2xvciIsInJhZGlvQ2hlY2tlZEJhY2tncm91bmRDb2xvciIsInJhZGlvQ2hlY2tlZEljb25Db2xvciIsInJhZGlvQ2hlY2tlZEZvY3VzQm9yZGVyQ29sb3IiLCJyYWRpb0NoZWNrZWRGb2N1c0Jh''@;'; put 'put ''Y2tncm91bmRDb2xvciIsInJhZGlvQ2hlY2tlZEZvY3VzSWNvbkNvbG9yIiwicmFkaW9DaGVja2VkRGlzYWJsZWRCb3JkZXJDb2xvciIsInJhZGlvQ2hlY2tlZERpc2FibGVkQmFja2dyb3VuZENvbG9yIiwicmFkaW9DaGVja2VkRGlzYWJsZWRJY29uQ29sb3IiLCJpY29uQnV0dG9uQm9yZGVy''@;'; put 'put ''UmFkaXVzIiwiaWNvbkJ1dHRvbkxhcmdlQm9yZGVyUmFkaXVzIiwiaWNvbkJ1dHRvbkxhcmdlUGFkZGluZyIsImljb25CdXR0b25Cb3JkZXJDb2xvciIsImljb25CdXR0b25CYWNrZ3JvdW5kQ29sb3IiLCJpY29uQnV0dG9uSWNvbkNvbG9yIiwiaWNvbkJ1dHRvbkhpdEFyZWFTaXplIiwiaWNv''@;'; put 'put ''bkJ1dHRvbkhvdmVyQm9yZGVyQ29sb3IiLCJpY29uQnV0dG9uSG92ZXJCYWNrZ3JvdW5kQ29sb3IiLCJpY29uQnV0dG9uSG92ZXJJY29uQ29sb3IiLCJpY29uQnV0dG9uQWN0aXZlQm9yZGVyQ29sb3IiLCJpY29uQnV0dG9uQWN0aXZlQmFja2dyb3VuZENvbG9yIiwiaWNvbkJ1dHRvbkFjdGl2''@;'; put 'put ''ZUljb25Db2xvciIsImljb25CdXR0b25BY3RpdmVIb3ZlckJvcmRlckNvbG9yIiwiaWNvbkJ1dHRvbkFjdGl2ZUhvdmVyQmFja2dyb3VuZENvbG9yIiwiaWNvbkJ1dHRvbkFjdGl2ZUhvdmVySWNvbkNvbG9yIiwiY29sbGFwc2VCdXR0b25Cb3JkZXJSYWRpdXMiLCJjb2xsYXBzZUJ1dHRvbk9w''@;'; put 'put ''ZW5Cb3JkZXJDb2xvciIsImNvbGxhcHNlQnV0dG9uT3BlbkJhY2tncm91bmRDb2xvciIsImNvbGxhcHNlQnV0dG9uT3Blbkljb25Db2xvciIsImNvbGxhcHNlQnV0dG9uT3Blbkljb25BY3RpdmVDb2xvciIsImNvbGxhcHNlQnV0dG9uT3BlbkhvdmVyQm9yZGVyQ29sb3IiLCJjb2xsYXBzZUJ1''@;'; put 'put ''dHRvbk9wZW5Ib3ZlckJhY2tncm91bmRDb2xvciIsImNvbGxhcHNlQnV0dG9uT3BlbkhvdmVySWNvbkNvbG9yIiwiY29sbGFwc2VCdXR0b25PcGVuSG92ZXJJY29uQWN0aXZlQ29sb3IiLCJjb2xsYXBzZUJ1dHRvbkNsb3NlQm9yZGVyQ29sb3IiLCJjb2xsYXBzZUJ1dHRvbkNsb3NlQmFja2dy''@;'; put 'put ''b3VuZENvbG9yIiwiY29sbGFwc2VCdXR0b25DbG9zZUljb25Db2xvciIsImNvbGxhcHNlQnV0dG9uQ2xvc2VJY29uQWN0aXZlQ29sb3IiLCJjb2xsYXBzZUJ1dHRvbkNsb3NlSG92ZXJCb3JkZXJDb2xvciIsImNvbGxhcHNlQnV0dG9uQ2xvc2VIb3ZlckJhY2tncm91bmRDb2xvciIsImNvbGxh''@;'; put 'put ''cHNlQnV0dG9uQ2xvc2VIb3Zlckljb25Db2xvciIsImNvbGxhcHNlQnV0dG9uQ2xvc2VIb3Zlckljb25BY3RpdmVDb2xvciIsImJ1dHRvbkJvcmRlclJhZGl1cyIsImJ1dHRvbkhvcml6b250YWxQYWRkaW5nIiwiYnV0dG9uVmVydGljYWxQYWRkaW5nIiwicHJpbWFyeUJ1dHRvbkJvcmRlckNv''@;'; put 'put ''bG9yIiwicHJpbWFyeUJ1dHRvbkZvcmVncm91bmRDb2xvciIsInByaW1hcnlCdXR0b25CYWNrZ3JvdW5kQ29sb3IiLCJwcmltYXJ5QnV0dG9uRGlzYWJsZWRCb3JkZXJDb2xvciIsInByaW1hcnlCdXR0b25EaXNhYmxlZEZvcmVncm91bmRDb2xvciIsInByaW1hcnlCdXR0b25EaXNhYmxlZEJh''@;'; put 'put ''Y2tncm91bmRDb2xvciIsInByaW1hcnlCdXR0b25Ib3ZlckJvcmRlckNvbG9yIiwicHJpbWFyeUJ1dHRvbkhvdmVyRm9yZWdyb3VuZENvbG9yIiwicHJpbWFyeUJ1dHRvbkhvdmVyQmFja2dyb3VuZENvbG9yIiwicHJpbWFyeUJ1dHRvbkZvY3VzQm9yZGVyQ29sb3IiLCJwcmltYXJ5QnV0dG9u''@;'; put 'put ''Rm9jdXNGb3JlZ3JvdW5kQ29sb3IiLCJwcmltYXJ5QnV0dG9uRm9jdXNCYWNrZ3JvdW5kQ29sb3IiLCJzZWNvbmRhcnlCdXR0b25Cb3JkZXJDb2xvciIsInNlY29uZGFyeUJ1dHRvbkZvcmVncm91bmRDb2xvciIsInNlY29uZGFyeUJ1dHRvbkJhY2tncm91bmRDb2xvciIsInNlY29uZGFyeUJ1''@;'; put 'put ''dHRvbkRpc2FibGVkQm9yZGVyQ29sb3IiLCJzZWNvbmRhcnlCdXR0b25EaXNhYmxlZEZvcmVncm91bmRDb2xvciIsInNlY29uZGFyeUJ1dHRvbkRpc2FibGVkQmFja2dyb3VuZENvbG9yIiwic2Vjb25kYXJ5QnV0dG9uSG92ZXJCb3JkZXJDb2xvciIsInNlY29uZGFyeUJ1dHRvbkhvdmVyRm9y''@;'; put 'put ''ZWdyb3VuZENvbG9yIiwic2Vjb25kYXJ5QnV0dG9uSG92ZXJCYWNrZ3JvdW5kQ29sb3IiLCJzZWNvbmRhcnlCdXR0b25Gb2N1c0JvcmRlckNvbG9yIiwic2Vjb25kYXJ5QnV0dG9uRm9jdXNGb3JlZ3JvdW5kQ29sb3IiLCJzZWNvbmRhcnlCdXR0b25Gb2N1c0JhY2tncm91bmRDb2xvciIsImNv''@;'; put 'put ''bW1lbnRzVGV4dGFyZWFIb3Jpem9udGFsUGFkZGluZyIsImNvbW1lbnRzVGV4dGFyZWFWZXJ0aWNhbFBhZGRpbmciLCJjb21tZW50c1RleHRhcmVhQm9yZGVyV2lkdGgiLCJjb21tZW50c1RleHRhcmVhQm9yZGVyQ29sb3IiLCJjb21tZW50c1RleHRhcmVhRm9yZWdyb3VuZENvbG9yIiwiY29t''@;'; put 'put ''bWVudHNUZXh0YXJlYUJhY2tncm91bmRDb2xvciIsImNvbW1lbnRzVGV4dGFyZWFGb2N1c0JvcmRlcldpZHRoIiwiY29tbWVudHNUZXh0YXJlYUZvY3VzQm9yZGVyQ29sb3IiLCJjb21tZW50c1RleHRhcmVhRm9jdXNGb3JlZ3JvdW5kQ29sb3IiLCJjb21tZW50c1RleHRhcmVhRm9jdXNCYWNr''@;'; put 'put ''Z3JvdW5kQ29sb3IiLCJjb21tZW50c0luZGljYXRvclNpemUiLCJjb21tZW50c0luZGljYXRvckNvbG9yIiwibGljZW5zZUhvcml6b250YWxQYWRkaW5nIiwibGljZW5zZVZlcnRpY2FsUGFkZGluZyIsImxpY2Vuc2VGb3JlZ3JvdW5kQ29sb3IiLCJsaWNlbnNlQmFja2dyb3VuZENvbG9yIiwi''@;'; put 'put ''bGlua0NvbG9yIiwibGlua0hvdmVyQ29sb3IiLCJpbnB1dEJvcmRlcldpZHRoIiwiaW5wdXRCb3JkZXJSYWRpdXMiLCJpbnB1dEhvcml6b250YWxQYWRkaW5nIiwiaW5wdXRWZXJ0aWNhbFBhZGRpbmciLCJpbnB1dEJvcmRlckNvbG9yIiwiaW5wdXRGb3JlZ3JvdW5kQ29sb3IiLCJpbnB1dEJh''@;'; put 'put ''Y2tncm91bmRDb2xvciIsImlucHV0SG92ZXJCb3JkZXJDb2xvciIsImlucHV0SG92ZXJGb3JlZ3JvdW5kQ29sb3IiLCJpbnB1dEhvdmVyQmFja2dyb3VuZENvbG9yIiwiaW5wdXREaXNhYmxlZEJvcmRlckNvbG9yIiwiaW5wdXREaXNhYmxlZEZvcmVncm91bmRDb2xvciIsImlucHV0RGlzYWJs''@;'; put 'put ''ZWRCYWNrZ3JvdW5kQ29sb3IiLCJpbnB1dEZvY3VzQm9yZGVyQ29sb3IiLCJpbnB1dEZvY3VzRm9yZWdyb3VuZENvbG9yIiwiaW5wdXRGb2N1c0JhY2tncm91bmRDb2xvciIsIm1lbnVCb3JkZXJXaWR0aCIsIm1lbnVCb3JkZXJSYWRpdXMiLCJtZW51SG9yaXpvbnRhbFBhZGRpbmciLCJtZW51''@;'; put 'put ''VmVydGljYWxQYWRkaW5nIiwibWVudUl0ZW1Ib3Jpem9udGFsUGFkZGluZyIsIm1lbnVJdGVtVmVydGljYWxQYWRkaW5nIiwibWVudUJvcmRlckNvbG9yIiwibWVudVNoYWRvd1giLCJtZW51U2hhZG93WSIsIm1lbnVTaGFkb3dCbHVyIiwibWVudVNoYWRvd0NvbG9yIiwibWVudVNoYWRvd09w''@;'; put 'put ''YWNpdHkiLCJtZW51SXRlbUhvdmVyQ29sb3IiLCJtZW51SXRlbUhvdmVyQ29sb3JPcGFjaXR5IiwibWVudUl0ZW1BY3RpdmVDb2xvciIsIm1lbnVJdGVtQWN0aXZlQ29sb3JPcGFjaXR5IiwiZGlhbG9nU2VtaVRyYW5zcGFyZW50QmFja2dyb3VuZENvbG9yIiwiZGlhbG9nU2VtaVRyYW5zcGFy''@;'; put 'put ''ZW50QmFja2dyb3VuZE9wYWNpdHkiLCJkaWFsb2dTb2xpZEJhY2tncm91bmRDb2xvciIsImRpYWxvZ0NvbnRlbnRQYWRkaW5nSG9yaXpvbnRhbCIsImRpYWxvZ0NvbnRlbnRQYWRkaW5nVmVydGljYWwiLCJkaWFsb2dDb250ZW50Qm9yZGVyUmFkaXVzIiwiZGlhbG9nQ29udGVudEJhY2tncm91''@;'; put 'put ''bmRDb2xvciIsIm5vdGlmaWNhdGlvbkZvcmVncm91bmRDb2xvciIsIm5vdGlmaWNhdGlvbkJhY2tncm91bmRDb2xvciIsIm5vdGlmaWNhdGlvbkJvcmRlckNvbG9yIiwibm90aWZpY2F0aW9uU3VjY2Vzc0FjY2VudCIsIm5vdGlmaWNhdGlvbldhcm5pbmdBY2NlbnQiLCJub3RpZmljYXRpb25F''@;'; put 'put ''cnJvckFjY2VudCIsInBhZ2luYXRpb25CYXJGb3JlZ3JvdW5kQ29sb3IiLCJwYWdpbmF0aW9uQmFyQmFja2dyb3VuZENvbG9yIiwicGFnaW5hdGlvbkJhckhvcml6b250YWxQYWRkaW5nIiwicGFnaW5hdGlvbkJhclZlcnRpY2FsUGFkZGluZyIsInBhZ2luYXRpb25CdXR0b25Cb3JkZXJDb2xv''@;'; put 'put ''ciIsInBhZ2luYXRpb25CdXR0b25Gb3JlZ3JvdW5kQ29sb3IiLCJwYWdpbmF0aW9uQnV0dG9uQmFja2dyb3VuZENvbG9yIiwicGFnaW5hdGlvbkJ1dHRvbkhvdmVyQm9yZGVyQ29sb3IiLCJwYWdpbmF0aW9uQnV0dG9uSG92ZXJGb3JlZ3JvdW5kQ29sb3IiLCJwYWdpbmF0aW9uQnV0dG9uSG92''@;'; put 'put ''ZXJCYWNrZ3JvdW5kQ29sb3IiLCJwYWdpbmF0aW9uQnV0dG9uRGlzYWJsZWRGb3JlZ3JvdW5kQ29sb3IiLCJwYWdpbmF0aW9uQnV0dG9uRGlzYWJsZWRCYWNrZ3JvdW5kQ29sb3IiLCJwYWdpbmF0aW9uQnV0dG9uRGlzYWJsZWRCb3JkZXJDb2xvciIsInBhZ2luYXRpb25CdXR0b25Gb2N1c0Jv''@;'; put 'put ''cmRlckNvbG9yIiwicGFnaW5hdGlvbkJ1dHRvbkZvY3VzRm9yZWdyb3VuZENvbG9yIiwicGFnaW5hdGlvbkJ1dHRvbkZvY3VzQmFja2dyb3VuZENvbG9yIiwiY2hpcEJhY2tncm91bmQiLCJjaGlwQm9yZGVyUmFkaXVzIiwiY2hpcFZlcnRpY2FsUGFkZGluZyIsImNoaXBIb3Jpem9udGFsUGFk''@;'; put 'put ''ZGluZyIsImNoaXBHYXAiXSk7ZnVuY3Rpb24gdURlKG4pe3JldHVybiBjRGUuaGFzKG4pfHxKcihgW1RoZW1lQnVpbGRlcl0gSW52YWxpZCBjb2xvciBzY2hlbWU6ICIke259Ii4gTXVzdCBiZSBvbmUgb2Y6ICR7Wy4uLmNEZV0uam9pbigiLCAiKX0uYCksbn1mdW5jdGlvbiBUZGUobil7cmV0''@;'; put 'put ''dXJuIE1kZS5oYXMobil8fEpyKGBbVGhlbWVCdWlsZGVyXSBJbnZhbGlkIGRlbnNpdHk6ICIke259Ii4gTXVzdCBiZSBvbmUgb2Y6ICR7Wy4uLk1kZV0uam9pbigiLCAiKX0uYCksbn1mdW5jdGlvbiBkRGUobixlKXtPYmplY3QuZW50cmllcyhuKS5mb3JFYWNoKChbdCxyXSk9Pntjb25zdCBp''@;'; put 'put ''PWAke2V9LiR7dH1gOyJzdHJpbmciIT10eXBlb2YgciYmKENhKHIpP2REZShyLGkpOkpyKGBbVGhlbWVCdWlsZGVyXSAke2l9IG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gb2JqZWN0LmApKX0pfWZ1bmN0aW9uIHhkZShuLGUsdCxyPXt9KXtjb25zdHt0eXBlOmk9ImtleSIsd2Fybk1pc3Npbmc6''@;'; put 'put ''bz0hMX09cjtpZihuKXtpZihPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGw9PntlLmhhcyhsKXx8SGEoYFtUaGVtZUJ1aWxkZXJdIFVua25vd24gJHtpfSBrZXk6ICIke2x9IiBpbiAke3R9LiBUaGlzIG1heSBiZSBhIGN1c3RvbSAke2l9IG9yIGEgdHlwby5gKX0pLG8pe2NvbnN0IGw9W107ZS5m''@;'; put 'put ''b3JFYWNoKHU9Pnt1IGluIG58fGwucHVzaCh1KX0pLGwubGVuZ3RoPjAmJkhhKGBbVGhlbWVCdWlsZGVyXSBNaXNzaW5nICR7aX0ocykgaW4gJHt0fTogJHtsLmpvaW4oIiwgIil9YCl9fWVsc2UgbyYmSGEoYFtUaGVtZUJ1aWxkZXJdIE5vICR7aX1zIHByb3ZpZGVkIGluICR7dH0uIEFsbCAk''@;'; put 'put ''e2l9cyBhcmUgbWlzc2luZy5gKX1mdW5jdGlvbiBoRGUobixlLHQ9e30pe2NvbnN0e3JlcXVpcmVkRmllbGRzOnI9W119PXQ7KCJvYmplY3QiIT10eXBlb2Ygbnx8bnVsbD09PW4pJiZKcihgW1RoZW1lQnVpbGRlcl0gJHtlfSBtdXN0IGJlIGFuIG9iamVjdC5gKTtjb25zdCBpPW4se25hbWU6''@;'; put 'put ''byxzaXppbmc6YSxkZW5zaXR5OmwsaWNvbnM6dSxjb2xvcnM6Zyx0b2tlbnM6RSxjb2xvclNjaGVtZTpPfT1pO3hkZShpLEFMdCxlLHt0eXBlOiJwYXJhbSJ9KSxyLmZvckVhY2goWj0+e3ZvaWQgMD09PWlbWl0mJkpyKGBbVGhlbWVCdWlsZGVyXSAke2V9LiR7Wn0gaXMgcmVxdWlyZWQuYCl9''@;'; put 'put ''KSx2b2lkIDAhPT1vJiZmdW5jdGlvbiBJTHQobixlKXsoInN0cmluZyIhPXR5cGVvZiBufHwiIj09PW4udHJpbSgpKSYmSnIoYFtUaGVtZUJ1aWxkZXJdICR7ZX0ubmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy5gKX0obyxlKSx2b2lkIDAhPT1hJiYoQ2EoYSl8fEpyKGBbVGhlbWVC''@;'; put 'put ''dWlsZGVyXSAke2V9LnNpemluZyBtdXN0IGJlIGFuIG9iamVjdC5gKSksdm9pZCAwIT09bCYmKCFDYShsKSYmInN0cmluZyIhPXR5cGVvZiBsJiZKcihgW1RoZW1lQnVpbGRlcl0gJHtlfS5kZW5zaXR5IG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gb2JqZWN0LmApLGZ1bmN0aW9uIExMdChuLGUp''@;'; put 'put ''e2lmKENhKG4pKXtjb25zdCB0PW47KCF0LnR5cGV8fCF0LnNpemVzKSYmSnIoYFtUaGVtZUJ1aWxkZXJdICR7ZX0gbXVzdCBiZSBhIHN0cmluZyBvciBhbiBvYmplY3Qgd2l0aCBhICd0eXBlJyBhbmQgJ3NpemVzJyBwcm9wZXJ0eS5gKSxUZGUoU3RyaW5nKHQudHlwZSkpLGZ1bmN0aW9uIERM''@;'; put 'put ''dChuLGUpe0NhKG4pJiYib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPT1uP09iamVjdC5rZXlzKG4pLmZvckVhY2godD0+e01kZS5oYXModCl8fEhhKGBbVGhlbWVCdWlsZGVyXSBVbmtub3duIGRlbnNpdHkgc2l6ZSBrZXk6ICIke3R9IiBpbiAke2V9LnNpemVzLiBUaGlzIG1heSBiZSBhIGN1''@;'; put 'put ''c3RvbSBkZW5zaXR5IHNpemUgb3IgYSB0eXBvLmApfSk6SnIoYFtUaGVtZUJ1aWxkZXJdICR7ZX0uc2l6ZXMgbXVzdCBiZSBhbiBvYmplY3QuYCl9KHQuc2l6ZXMsYCR7ZX0uc2l6ZXNgKX1lbHNlInN0cmluZyI9PXR5cGVvZiBuJiZUZGUobil9KGwsYCR7ZX0uZGVuc2l0eWApKSx2b2lkIDAh''@;'; put 'put ''PT11JiYoQ2EodSl8fEpyKGBbVGhlbWVCdWlsZGVyXSAke2V9Lmljb25zIG11c3QgYmUgYW4gb2JqZWN0LmApLHhkZSh1LGtMdCxgJHtlfS5pY29uc2Ase3R5cGU6Imljb24iLHdhcm5NaXNzaW5nOnIuaW5jbHVkZXMoImljb25zIil9KSksdm9pZCAwIT09ZyYmKENhKGcpfHxKcihgW1RoZW1l''@;'; put 'put ''QnVpbGRlcl0gJHtlfS5jb2xvcnMgbXVzdCBiZSBhbiBvYmplY3QuYCksZERlKGcsYCR7ZX0uY29sb3JzYCkpLHZvaWQgMCE9PUUmJihDYShFKXx8SnIoYFtUaGVtZUJ1aWxkZXJdICR7ZX0udG9rZW5zIG11c3QgYmUgYW4gb2JqZWN0LmApLHhkZShFLFJMdCxgJHtlfS50b2tlbnNgLHt0eXBl''@;'; put 'put ''OiJ0b2tlbiIsd2Fybk1pc3Npbmc6ci5pbmNsdWRlcygidG9rZW5zIil9KSksdm9pZCAwIT09TyYmdURlKFN0cmluZyhPKSl9ZnVuY3Rpb24gZkRlKG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50''@;'; put 'put ''cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBwRGUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQobil9ZnVuY3Rpb24gS2QobixlKXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24gT0x0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obixwRGUobixlLCJnZXQiKSl9ZnVuY3Rpb24gYk8obixlLHQpe2ZEZShuLGUpLGUuc2V0KG4sdCl9ZnVuY3Rpb24gVDQobixlLHQpe3JldHVybiBmdW5jdGlvbiBOTHQobixlLHQpe2lmKGUu''@;'; put 'put ''c2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLHBEZShuLGUsInNldCIpLHQpLHR9ZnVuY3Rpb24gQ1QobixlLHQpe2lmKCFlLmhh''@;'; put 'put ''cyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHR9ZnVuY3Rpb24gQWRlKG4sZSl7ZkRlKG4sZSksZS5hZGQobil9Y29uc3QgRkx0PVsic2l6aW5nIiwiaWNvbnMiLCJjb2xvcnMiLCJ0b2tlbnMi''@;'; put 'put ''XSxQTHQ9WyJuYW1lIiwiaWNvbnMiLCJjb2xvcnMiLCJ0b2tlbnMiXTt2YXIgcXA9bmV3IFdlYWtNYXAsU1Q9bmV3IFdlYWtNYXAsd089bmV3IFdlYWtNYXAsRHc9bmV3IFdlYWtNYXAsdV89bmV3IFdlYWtNYXAsZFo9bmV3IFdlYWtTZXQsZ0RlPW5ldyBXZWFrU2V0LGtkZT1uZXcgV2Vha1Nl''@;'; put 'put ''dDtjbGFzcyBITHR7c3Vic2NyaWJlKGUpe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBlJiZKcigiW1RoZW1lQnVpbGRlcl0gbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpLEtkKHRoaXMsd08pLmFkZChlKSwoKT0+S2QodGhpcyx3TykuZGVsZXRlKGUpfXBhcmFtcyhlKXtyZXR1cm4g''@;'; put 'put ''aERlKGUsInBhcmFtcyIpLENUKHRoaXMsa2RlLG1EZSkuY2FsbCh0aGlzLGUpLENUKHRoaXMsZFosUmRlKS5jYWxsKHRoaXMpLHRoaXN9c2V0Q29sb3JTY2hlbWUoZSl7cmV0dXJuIFQ0KHRoaXMsRHcsdURlKGUpKSxLZCh0aGlzLFNUKS5jb2xvclNjaGVtZT1LZCh0aGlzLER3KSxLZCh0aGlz''@;'; put 'put ''LHFwKS5jb2xvclNjaGVtZT1LZCh0aGlzLER3KSxDVCh0aGlzLGRaLFJkZSkuY2FsbCh0aGlzKSx0aGlzfXNldERlbnNpdHlUeXBlKGUpe3JldHVybiBUNCh0aGlzLHVfLFRkZShlKSksS2QodGhpcyxTVCkuZGVuc2l0eS50eXBlPUtkKHRoaXMsdV8pLEtkKHRoaXMscXApLmRlbnNpdHkudHlw''@;'; put 'put ''ZT1LZCh0aGlzLHVfKSxDVCh0aGlzLGRaLFJkZSkuY2FsbCh0aGlzKSx0aGlzfWdldFRoZW1lQ29uZmlnKCl7cmV0dXJuIEtkKHRoaXMsU1QpfWNvbnN0cnVjdG9yKGUpe0FkZSh0aGlzLGRaKSxBZGUodGhpcyxnRGUpLEFkZSh0aGlzLGtkZSksYk8odGhpcyxxcCx7d3JpdGFibGU6ITAsdmFs''@;'; put 'put ''dWU6dm9pZCAwfSksYk8odGhpcyxTVCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksYk8odGhpcyx3Tyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksYk8odGhpcyxEdyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksYk8odGhpcyx1Xyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAw''@;'; put 'put ''fSksVDQodGhpcyx3TyxuZXcgU2V0KSxUNCh0aGlzLER3LCJhdXRvIiksVDQodGhpcyx1XywiZGVmYXVsdCIpLGhEZShlLCJ0aGVtZUNvbmZpZyIse3JlcXVpcmVkRmllbGRzOlBMdH0pLFQ0KHRoaXMscXAse25hbWU6dm9pZCAwLHNpemluZzpUTHQsZGVuc2l0eTp7dHlwZTpLZCh0aGlzLHVf''@;'; put 'put ''KSxzaXplczp4THR9LGljb25zOnt9LGNvbG9yczp7fSx0b2tlbnM6e30sY29sb3JTY2hlbWU6S2QodGhpcyxEdyl9KSxDVCh0aGlzLGtkZSxtRGUpLmNhbGwodGhpcyxlKSxUNCh0aGlzLHFwLEtkKHRoaXMsU1QpKX19ZnVuY3Rpb24gUmRlKCl7Y29uc3Qgbj10aGlzLmdldFRoZW1lQ29uZmln''@;'; put 'put ''KCk7S2QodGhpcyx3TykuZm9yRWFjaChlPT5lKG4pKX1mdW5jdGlvbiBWTHQobixlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpe2NvbnN0IHQ9Tlcobi5kZW5zaXR5LGUpO24uZGVuc2l0eT10LHZvaWQgMCE9PWUudHlwZSYmKFQ0KHRoaXMsdV8sZS50eXBlKSxLZCh0aGlzLHFwKT8uZGVuc2l0''@;'; put 'put ''eSYmKEtkKHRoaXMscXApLmRlbnNpdHkudHlwZT1lLnR5cGUpKX1lbHNlIG4uZGVuc2l0eS50eXBlPWUsVDQodGhpcyx1XyxlKSxLZCh0aGlzLHFwKT8uZGVuc2l0eSYmKEtkKHRoaXMscXApLmRlbnNpdHkudHlwZT1lKX1mdW5jdGlvbiBtRGUobil7Y29uc3QgZT1BZChLZCh0aGlzLHFwKSks''@;'; put 'put ''dD1uO3ZvaWQgMCE9PW4ubmFtZSYmKHZvaWQgMCE9PUtkKHRoaXMscXApLm5hbWU/SGEoJ1tUaGVtZUJ1aWxkZXJdIFRoZSAibmFtZSIgcHJvcGVydHkgY2FuIG9ubHkgYmUgc2V0IGR1cmluZyBgcmVnaXN0ZXJUaGVtZSgpYCBhbmQgY2Fubm90IGJlIHVwZGF0ZWQgdmlhIGBwYXJhbXMoKWAu''@;'; put 'put ''Jyk6ZS5uYW1lPW4ubmFtZSksRkx0LmZvckVhY2gocj0+e3ZvaWQgMCE9PXRbcl0mJkNhKHRbcl0pJiYoZVtyXT1OVyhlW3JdLHRbcl0pKX0pLHZvaWQgMCE9PW4uZGVuc2l0eSYmQ1QodGhpcyxnRGUsVkx0KS5jYWxsKHRoaXMsZSxuLmRlbnNpdHkpLHZvaWQgMCE9PW4uY29sb3JTY2hlbWUm''@;'; put 'put ''JihlLmNvbG9yU2NoZW1lPW4uY29sb3JTY2hlbWUsVDQodGhpcyxEdyxuLmNvbG9yU2NoZW1lKSxLZCh0aGlzLHFwKT8uY29sb3JTY2hlbWUmJihLZCh0aGlzLHFwKS5jb2xvclNjaGVtZT1uLmNvbG9yU2NoZW1lKSksVDQodGhpcyxTVCxlKX1mdW5jdGlvbiB2RGUobil7cmV0dXJuIG5ldyBI''@;'; put 'put ''THQobil9Y29uc3R7aGFzSXRlbTpCTHQsZ2V0SXRlbTpqTHQsZ2V0TmFtZXM6VUx0LGdldFZhbHVlczp6THQscmVnaXN0ZXI6X0RlfT16cCgidGhlbWVzIik7ZnVuY3Rpb24gRVQobil7cmV0dXJuIEJMdChuKX1mdW5jdGlvbiBDTyhuKXtpZihFVChuKSlyZXR1cm4gakx0KG4pO0hhKGBUaGVt''@;'; put 'put ''ZSAiJHtufSIgaXMgbm90IHJlZ2lzdGVyZWQuIFBsZWFzZSBlbnN1cmUgaXQgaXMgcmVnaXN0ZXJlZCBiZWZvcmUgdXNpbmcgaXQuYCl9ZnVuY3Rpb24geURlKCl7cmV0dXJuIFVMdCgpfWZ1bmN0aW9uIGJEZSgpe3JldHVybiB6THQoKX1mdW5jdGlvbiB3RGUobixlKXtsZXQgdD1uLHI9QWQo''@;'; put 'put ''ZSk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuJiZDYShlKT9yLm5hbWU9bjoic3RyaW5nIiE9dHlwZW9mIG4mJkNhKG4pJiYocj1BZChuKSx0PXIubmFtZT8/IiIpLHt0aGVtZU5hbWU6dCx0aGVtZUNvbmZpZ09iamVjdDpyfX1mdW5jdGlvbiBTTyhuLGUpe2NvbnN0e3RoZW1lTmFtZTp0LHRo''@;'; put 'put ''ZW1lQ29uZmlnT2JqZWN0OnJ9PXdEZShuLGUpLGk9dkRlKHIpO3JldHVybiBFVCh0KT8oSGEoYFRoZW1lICIke3R9IiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuIFJlZ2lzdHJhdGlvbiBza2lwcGVkLmApLENPKHQpKTooX0RlKHQsaSksaSl9ZnVuY3Rpb24gQ0RlKG4sZSl7Y29uc3R7dGhlbWVO''@;'; put 'put ''YW1lOnQsdGhlbWVDb25maWdPYmplY3Q6cn09d0RlKG4sZSk7aWYoIUVUKHQpKXJldHVybiB2b2lkIEhhKGBUaGVtZSAiJHt0fSIgaXMgbm90IHJlZ2lzdGVyZWQuIENhbm5vdCByZWluaXRpYWxpemUgYSBub24tZXhpc3RlbnQgdGhlbWUuYCk7Y29uc3QgaT12RGUocik7cmV0dXJuIF9EZSh0''@;'; put 'put ''LGkpLGl9Y29uc3QgV0x0PXtuYW1lOiJtYWluIixkZW5zaXR5OiJkZWZhdWx0IixpY29uczp7YXJyb3dSaWdodDoiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxu''@;'; put 'put ''cz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNNi42NDY0OCAxMC45MzkzTDkuOTM5MzggNy42NDY0NEw2LjY0NjQ4IDQuMzUzNTQnIHN0cm9rZT0nY3VycmVudENvbG9yJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUz''@;'; put 'put ''RSUzQy9zdmclM0UlMEEiLGFycm93UmlnaHRXaXRoQmFyOiJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycl''@;'; put 'put ''M0UlM0NwYXRoIGQ9J000LjkyOTIgNC42NDE4OEw4LjI3OTM0IDcuOTkyMDNMNC45MjkyIDExLjM0MjJNMTEuMDcxMSA0LjA4MzUzVjExLjM0MjInIHN0cm9rZT0nY3VycmVudENvbG9yJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9zdmcl''@;'; put 'put ''M0UiLGFycm93TGVmdDoiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNOS40OTI2''@;'; put 'put ''OCAxMS4yOTI5TDYuMTk5NzggOC4wMDAwMUw5LjQ5MjY4IDQuNzA3MTInIHN0cm9rZT0nY3VycmVudENvbG9yJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9zdmclM0UlMEEiLGFycm93TGVmdFdpdGhCYXI6ImRhdGE6aW1hZ2Uvc3ZnK3ht''@;'; put 'put ''bDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTExLjA3MTMgNC42NDE4OEw3LjcyMTE1IDcuOTkyMDNMMTEuMDcx''@;'; put 'put ''MyAxMS4zNDIyTTQuOTI5MzYgNC4wODM1M0w0LjkyOTM2IDExLjM0MjInIHN0cm9rZT0nY3VycmVudENvbG9yJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9zdmclM0UiLGFycm93RG93bjoiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9''@;'; put 'put ''dXRmLTgsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBvcGFjaXR5PScwLjYnJTNFJTNDcGF0aCBkPSdNMTEuNTg1OSA2TDguMjkzMDQgOS4yOTI4OUw1''@;'; put 'put ''LjAwMDE1IDYnIHN0cm9rZT0nY3VycmVudENvbG9yJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRSIsbWVudToiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0''@;'; put 'put ''PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTEuMDAwMiA2LjY2NjYzQzExLjQyNjIgNi42NjY2MyAxMS42NDg3IDcuMTU5NjMgMTEuMzkxNyA3LjQ3ODEzTDExLjM1MzcgNy41MjAx''@;'; put 'put ''M0w4LjM1MzcyIDEwLjUyMDFDOC4yNjc2MiAxMC42MDYyIDguMTUzMDcgMTAuNjU3OSA4LjAzMTU2IDEwLjY2NTZDNy45MTAwNSAxMC42NzMyIDcuNzg5OTIgMTAuNjM2MyA3LjY5MzcyIDEwLjU2MTZMNy42NDY3MiAxMC41MjAxTDQuNjQ2NzIgNy41MjAxM0w0LjYwNTIyIDcuNDczMTNMNC41''@;'; put 'put ''NzgyMiA3LjQzNDYzTDQuNTUxMjIgNy4zODY2M0w0LjU0MjcyIDcuMzY4NjNMNC41MjkyMiA3LjMzNTEzTDQuNTEzMjIgNy4yODExM0w0LjUwODIyIDcuMjU0NjNMNC41MDMyMiA3LjIyNDYzTDQuNTAxMjIgNy4xOTYxM1Y3LjEzNzEzTDQuNTAzNzIgNy4xMDgxM0w0LjUwODIyIDcuMDc4MTNM''@;'; put 'put ''NC41MTMyMiA3LjA1MjEzTDQuNTI5MjIgNi45OTgxM0w0LjU0MjcyIDYuOTY0NjNMNC41Nzc3MiA2Ljg5ODYzTDQuNjEwMjIgNi44NTM2M0w0LjY0NjcyIDYuODEzMTNMNC42OTM3MiA2Ljc3MTYzTDQuNzMyMjIgNi43NDQ2M0w0Ljc4MDIyIDYuNzE3NjNMNC43OTgyMiA2LjcwOTEzTDQuODMx''@;'; put 'put ''NzIgNi42OTU2M0w0Ljg4NTcyIDYuNjc5NjNMNC45MTIyMiA2LjY3NDYzTDQuOTQyMjIgNi42Njk2M0w0Ljk3MDcyIDYuNjY3NjNMMTEuMDAwMiA2LjY2NjYzWicgZmlsbD0nY3VycmVudENvbG9yJy8lM0UlM0Mvc3ZnJTNFJTBBIixzZWxlY3RBcnJvdzoiZGF0YTppbWFnZS9zdmcreG1sO2No''@;'; put 'put ''YXJzZXQ9dXRmLTgsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTEuMDAwMiA2LjY2NjYzQzExLjQyNjIgNi42NjY2MyAxMS42NDg3IDcu''@;'; put 'put ''MTU5NjMgMTEuMzkxNyA3LjQ3ODEzTDExLjM1MzcgNy41MjAxM0w4LjM1MzcyIDEwLjUyMDFDOC4yNjc2MiAxMC42MDYyIDguMTUzMDcgMTAuNjU3OSA4LjAzMTU2IDEwLjY2NTZDNy45MTAwNSAxMC42NzMyIDcuNzg5OTIgMTAuNjM2MyA3LjY5MzcyIDEwLjU2MTZMNy42NDY3MiAxMC41MjAx''@;'; put 'put ''TDQuNjQ2NzIgNy41MjAxM0w0LjYwNTIyIDcuNDczMTNMNC41NzgyMiA3LjQzNDYzTDQuNTUxMjIgNy4zODY2M0w0LjU0MjcyIDcuMzY4NjNMNC41MjkyMiA3LjMzNTEzTDQuNTEzMjIgNy4yODExM0w0LjUwODIyIDcuMjU0NjNMNC41MDMyMiA3LjIyNDYzTDQuNTAxMjIgNy4xOTYxM1Y3LjEz''@;'; put 'put ''NzEzTDQuNTAzNzIgNy4xMDgxM0w0LjUwODIyIDcuMDc4MTNMNC41MTMyMiA3LjA1MjEzTDQuNTI5MjIgNi45OTgxM0w0LjU0MjcyIDYuOTY0NjNMNC41Nzc3MiA2Ljg5ODYzTDQuNjEwMjIgNi44NTM2M0w0LjY0NjcyIDYuODEzMTNMNC42OTM3MiA2Ljc3MTYzTDQuNzMyMjIgNi43NDQ2M0w0''@;'; put 'put ''Ljc4MDIyIDYuNzE3NjNMNC43OTgyMiA2LjcwOTEzTDQuODMxNzIgNi42OTU2M0w0Ljg4NTcyIDYuNjc5NjNMNC45MTIyMiA2LjY3NDYzTDQuOTQyMjIgNi42Njk2M0w0Ljk3MDcyIDYuNjY3NjNMMTEuMDAwMiA2LjY2NjYzWicgZmlsbD0nY3VycmVudENvbG9yJy8lM0UlM0Mvc3ZnJTNFJTBB''@;'; put 'put ''IixhcnJvd05hcnJvd1VwOiJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J004LjAw''@;'; put 'put ''MDA4IDEyLjY2NjdMOC4wMDAwOCAzLjMzMzM1TTguMDAwMDggMy4zMzMzNUw1LjMzMzQyIDYuMDAwMDJNOC4wMDAwOCAzLjMzMzM1TDEwLjY2NjcgNi4wMDAwMicgc3Ryb2tlPSdjdXJyZW50Q29sb3InIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNF''@;'; put 'put ''JTNDL3N2ZyUzRSUwQSIsYXJyb3dOYXJyb3dEb3duOiJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0Ul''@;'; put 'put ''M0NwYXRoIGQ9J004LjAwMDA0IDMuMzMzMzFWMTIuNjY2Nk04LjAwMDA0IDEyLjY2NjZMMTAuNjY2NyA5Ljk5OTk4TTguMDAwMDQgMTIuNjY2Nkw1LjMzMzM3IDkuOTk5OTgnIHN0cm9rZT0nY3VycmVudENvbG9yJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91''@;'; put 'put ''bmQnLyUzRSUzQy9zdmclM0UlMEEiLGNoZWNrOiJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0Nw''@;'; put 'put ''YXRoIGQ9J00zLjMzMzM3IDguMDAwMDJMNi42NjY3MSAxMS4zMzM0TDEzLjMzMzQgNC42NjY2OScgc3Ryb2tlPSdjdXJyZW50Q29sb3InIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRSUwQSIsY2hlY2tib3g6ImRhdGE6aW1hZ2Uv''@;'; put 'put ''c3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTUgOEw3IDEwTDExIDYnIHN0cm9rZT0nY3VycmVudENv''@;'; put 'put ''bG9yJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9zdmclM0UlMEEiLGNhcmV0SGlkZGVuTGVmdDoiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTAnIGhlaWdodD0nMTAnIHZpZXdCb3g9JzAgMCAxMCAxMCcgZmlsbD0nbm9u''@;'; put 'put ''ZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTYuMDg0ODIgMS4zNTc3MUw2LjExNTAzIDEuMzU1MUg2LjE3NjQ5TDYuMjA2NyAxLjM1NzcxTDYuMjM3OTUgMS4zNjIzOUw2LjI2NTAzIDEuMzY3Nkw2LjMyMTI4IDEuMzg0MjdMNi4zNTYxOCAxLjM5''@;'; put 'put ''ODMzTDYuNDI0OTMgMS40MzQ3OUw2LjQ3MTggMS40Njg2NEw2LjUxMzk5IDEuNTA2NjdMNi41NTcyMiAxLjU1NTYyTDYuNTg1MzQgMS41OTU3M0w2LjYxMzQ3IDEuNjQ1NzNMNi42MjIzMiAxLjY2NDQ4TDYuNjM2MzkgMS42OTkzN0w2LjY1MzA1IDEuNzU1NjJMNi42NTgyNiAxLjc4MzIzTDYu''@;'; put 'put ''NjYzNDcgMS44MTQ0OEw2LjY2NTU1IDEuODQ0MTdMNi42NjY1OSAxLjg3NDg5VjguMTI0ODlDNi42NjY1OSA4LjU2ODY0IDYuMTUzMDUgOC44MDA0MiA1LjgyMTI4IDguNTMyNzFMNS43Nzc1MyA4LjQ5MzEyTDIuNjUyNTMgNS4zNjgxMkMyLjU2Mjg2IDUuMjc4NDQgMi41MDg5OSA1LjE1OTEy''@;'; put 'put ''IDIuNTAxMDMgNS4wMzI1NEMyLjQ5MzA3IDQuOTA1OTYgMi41MzE1NyA0Ljc4MDgzIDIuNjA5MyA0LjY4MDYyTDIuNjUyNTMgNC42MzE2N0w1Ljc3NzUzIDEuNTA2NjdMNS44MjY0OSAxLjQ2MzQ0TDUuODY2NTkgMS40MzUzMUw1LjkxNjU5IDEuNDA3MTlMNS45MzUzNCAxLjM5ODMzTDUuOTcw''@;'; put 'put ''MjQgMS4zODQyN0w2LjAyNjQ5IDEuMzY3Nkw2LjA1NDA5IDEuMzYyMzlMNi4wODQ4MiAxLjM1NzcxWicgZmlsbD0nY3VycmVudENvbG9yJy8lM0UlM0Mvc3ZnJTNFIixjYXJldEhpZGRlblJpZ2h0OiJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxMCcgaGVpZ2h0PScxMCcgdmll''@;'; put 'put ''d0JveD0nMCAwIDEwIDEwJyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMy4zMzMzNyAxLjg3NDk5QzMuMzMzMzcgMS40MzEyNCAzLjg0NjkyIDEuMTk5NDcgNC4xNzg2OSAxLjQ2NzE4TDQuMjIyNDQgMS41MDY3Nkw3LjM0NzQ0''@;'; put 'put ''IDQuNjMxNzZDNy40MzcxMSA0LjcyMTQ1IDcuNDkwOTggNC44NDA3NyA3LjQ5ODk0IDQuOTY3MzVDNy41MDY5IDUuMDkzOTIgNy40Njg0IDUuMjE5MDUgNy4zOTA2NyA1LjMxOTI2TDcuMzQ3NDQgNS4zNjgyMkw0LjIyMjQ0IDguNDkzMjJMNC4xNzM0OCA4LjUzNjQ1TDQuMTMzMzcgOC41NjQ1''@;'; put 'put ''N0w0LjA4MzM3IDguNTkyN0w0LjA2NDYyIDguNjAxNTVMNC4wMjk3MyA4LjYxNTYyTDMuOTczNDggOC42MzIyOEwzLjk0NTg3IDguNjM3NDlMMy45MTQ2MiA4LjY0MjdMMy44ODQ5NCA4LjY0NDc4TDMuODU0MjEgOC42NDU4MkwzLjgyMzQ4IDguNjQ0NzhMMy43OTMyNyA4LjY0MjE4TDMuNzYy''@;'; put 'put ''MDIgOC42Mzc0OUwzLjczNDk0IDguNjMyMjhMMy42Nzg2OSA4LjYxNTYyTDMuNjQzNzkgOC42MDE1NUwzLjU3NTA0IDguNTY1MUwzLjUyODE3IDguNTMxMjRMMy40ODU5OCA4LjQ5MzIyTDMuNDQyNzUgOC40NDQyNkwzLjQxNDYyIDguNDA0MTZMMy4zODY1IDguMzU0MTZMMy4zNzc2NCA4LjMz''@;'; put 'put ''NTQxTDMuMzYzNTggOC4zMDA1MUwzLjM0NjkyIDguMjQ0MjZMMy4zNDE3MSA4LjIxNjY2TDMuMzM2NSA4LjE4NTQxTDMuMzM0NDIgOC4xNTU3MkwzLjMzMzM3IDEuODc0OTlaJyBmaWxsPSdjdXJyZW50Q29sb3InLyUzRSUzQy9zdmclM0UiLGNhcmV0SGlkZGVuVXA6ImRhdGE6aW1hZ2Uvc3Zn''@;'; put 'put ''K3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB3aWR0aD0nOCcgaGVpZ2h0PSc4JyB2aWV3Qm94PScwIDAgOCA4JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMy43NjQyNSAyLjQzMDk5QzMuODIxNjUgMi4zNzM2IDMuODk4MDEg''@;'; put 'put ''Mi4zMzkxMyAzLjk3OTAyIDIuMzM0MDNDNC4wNjAwMyAyLjMyODk0IDQuMTQwMTIgMi4zNTM1OCA0LjIwNDI1IDIuNDAzMzNMNC4yMzU1OCAyLjQzMDk5TDYuMjM1NTggNC40MzA5OUw2LjI2MzI1IDQuNDYyMzNMNi4yODEyNSA0LjQ4Nzk5TDYuMjk5MjUgNC41MTk5OUw2LjMwNDkyIDQuNTMx''@;'; put 'put ''OTlMNi4zMTM5MiA0LjU1NDMzTDYuMzI0NTggNC41OTAzM0w2LjMyNzkyIDQuNjA3OTlMNi4zMzEyNSA0LjYyNzk5TDYuMzMyNTggNC42NDY5OUw2LjMzMzI1IDQuNjY2NjZMNi4zMzI1OCA0LjY4NjMzTDYuMzMwOTIgNC43MDU2Nkw2LjMyNzkyIDQuNzI1NjZMNi4zMjQ1OCA0Ljc0Mjk5TDYu''@;'; put 'put ''MzEzOTIgNC43Nzg5OUw2LjMwNDkyIDQuODAxMzNMNi4yODE1OCA0Ljg0NTMzTDYuMjU5OTIgNC44NzUzM0w2LjIzNTU4IDQuOTAyMzNMNi4yMDQyNSA0LjkyOTk5TDYuMTc4NTggNC45NDc5OUw2LjE0NjU4IDQuOTY1OTlMNi4xMzQ1OCA0Ljk3MTY2TDYuMTEyMjUgNC45ODA2Nkw2LjA3NjI1''@;'; put 'put ''IDQuOTkxMzNMNi4wNTg1OCA0Ljk5NDY2TDYuMDM4NTggNC45OTc5OUw2LjAxOTU4IDQuOTk5MzNMNS45OTk5MiA0Ljk5OTk5SDEuOTk5OTJDMS43MTU5MiA0Ljk5OTk5IDEuNTY3NTggNC42NzEzMyAxLjczODkyIDQuNDU4OTlMMS43NjQyNSA0LjQzMDk5TDMuNzY0MjUgMi40MzA5OVonIGZp''@;'; put 'put ''bGw9J2N1cnJlbnRDb2xvcicvJTNFJTNDL3N2ZyUzRSUwQSIsY2FyZXRIaWRkZW5Eb3duOiJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0Nzdmcgd2lkdGg9JzgnIGhlaWdodD0nOCcgdmlld0JveD0nMCAwIDggOCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMu''@;'; put 'put ''b3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTUuOTk5OSAzQzYuMjgzOSAzIDYuNDMyMjQgMy4zMjg2NyA2LjI2MDkgMy41NDFMNi4yMzU1NyAzLjU2OUw0LjIzNTU3IDUuNTY5QzQuMTc4MTcgNS42MjYzOSA0LjEwMTgxIDUuNjYwODcgNC4wMjA4IDUuNjY1OTZDMy45Mzk3OSA1LjY3MTA2''@;'; put 'put ''IDMuODU5NyA1LjY0NjQyIDMuNzk1NTcgNS41OTY2N0wzLjc2NDI0IDUuNTY5TDEuNzY0MjQgMy41NjlMMS43MzY1NyAzLjUzNzY3TDEuNzE4NTcgMy41MTJMMS43MDA1NyAzLjQ4TDEuNjk0OSAzLjQ2OEwxLjY4NTkgMy40NDU2N0wxLjY3NTI0IDMuNDA5NjdMMS42NzE5IDMuMzkyTDEuNjY4''@;'; put 'put ''NTcgMy4zNzJMMS42NjcyNCAzLjM1M1YzLjMxMzY3TDEuNjY4OSAzLjI5NDMzTDEuNjcxOSAzLjI3NDMzTDEuNjc1MjQgMy4yNTdMMS42ODU5IDMuMjIxTDEuNjk0OSAzLjE5ODY3TDEuNzE4MjQgMy4xNTQ2N0wxLjczOTkgMy4xMjQ2N0wxLjc2NDI0IDMuMDk3NjdMMS43OTU1NyAzLjA3TDEu''@;'; put 'put ''ODIxMjQgMy4wNTJMMS44NTMyNCAzLjAzNEwxLjg2NTI0IDMuMDI4MzNMMS44ODc1NyAzLjAxOTMzTDEuOTIzNTcgMy4wMDg2N0wxLjk0MTI0IDMuMDA1MzNMMS45NjEyNCAzLjAwMkwxLjk4MDI0IDMuMDAwNjdMNS45OTk5IDNaJyBmaWxsPSdjdXJyZW50Q29sb3InLyUzRSUzQy9zdmclM0Ul''@;'; put 'put ''MEEiLGNvbGxhcHNlT2ZmOiJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J000LjMz''@;'; put 'put ''MzI1IDhIMTEuNjY2Nicgc3Ryb2tlPSdjdXJyZW50Q29sb3InIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRSUwQSIsY29sbGFwc2VPbjoiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHdpZHRoPScxNicg''@;'; put 'put ''aGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTcuNDk5ODggMTEuNjY2N0M3LjQ5OTg4IDExLjk0Mjgg''@;'; put 'put ''Ny43MjM3NCAxMi4xNjY3IDcuOTk5ODggMTIuMTY2N0M4LjI3NjAyIDEyLjE2NjcgOC40OTk4OCAxMS45NDI4IDguNDk5ODggMTEuNjY2N1Y4LjUwMDAySDExLjY2NjZDMTEuOTQyNyA4LjUwMDAyIDEyLjE2NjYgOC4yNzYxNiAxMi4xNjY2IDguMDAwMDJDMTIuMTY2NiA3LjcyMzg4IDExLjk0''@;'; put 'put ''MjcgNy41MDAwMiAxMS42NjY2IDcuNTAwMDJIOC40OTk4OFY0LjMzMzM3QzguNDk5ODggNC4wNTcyMyA4LjI3NjAyIDMuODMzMzcgNy45OTk4OCAzLjgzMzM3QzcuNzIzNzQgMy44MzMzNyA3LjQ5OTg4IDQuMDU3MjMgNy40OTk4OCA0LjMzMzM3VjcuNTAwMDJINC4zMzMyNUM0LjA1NzExIDcu''@;'; put 'put ''NTAwMDIgMy44MzMyNSA3LjcyMzg4IDMuODMzMjUgOC4wMDAwMkMzLjgzMzI1IDguMjc2MTYgNC4wNTcxMSA4LjUwMDAyIDQuMzMzMjUgOC41MDAwMkg3LjQ5OTg4VjExLjY2NjdaJyBmaWxsPSdjdXJyZW50Q29sb3InLyUzRSUzQy9zdmclM0UlMEEiLHJhZGlvOiJkYXRhOmltYWdlL3N2Zyt4''@;'; put 'put ''bWw7Y2hhcnNldD11dGYtOCwlM0Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NjaXJjbGUgY3g9JzgnIGN5PSc4JyByPSc0JyBmaWxsPSdjdXJyZW50Q29sb3In''@;'; put 'put ''LyUzRSUzQy9zdmclM0UlMEEiLGNoaXBDbG9zZToiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTND''@;'; put 'put ''cGF0aCBkPSdNMTIgNEw0IDEyTTQgNEwxMiAxMicgc3Ryb2tlPSdjdXJyZW50Q29sb3InIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRSUwQSIsc2VhcmNoOiJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8v''@;'; put 'put ''d3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzMyJyBoZWlnaHQ9JzMyJyB2aWV3Qm94PScwIDAgMzIgMzInIGZpbGw9J25vbmUnJTNFJTNDZyBvcGFjaXR5PScwLjUnJTNFJTNDcGF0aCBkPSdNMjggMjhMMjAgMjBNNCAxMy4zMzMzQzQgMTQuNTU5IDQuMjQxNDEgMTUuNzcyNyA0LjcxMDQ2''@;'; put 'put ''IDE2LjkwNUM1LjE3OTUgMTguMDM3NCA1Ljg2Njk5IDE5LjA2NjMgNi43MzM2NyAxOS45MzNDNy42MDAzNSAyMC43OTk3IDguNjI5MjUgMjEuNDg3MiA5Ljc2MTYyIDIxLjk1NjJDMTAuODk0IDIyLjQyNTMgMTIuMTA3NyAyMi42NjY3IDEzLjMzMzMgMjIuNjY2N0MxNC41NTkgMjIuNjY2NyAx''@;'; put 'put ''NS43NzI3IDIyLjQyNTMgMTYuOTA1IDIxLjk1NjJDMTguMDM3NCAyMS40ODcyIDE5LjA2NjMgMjAuNzk5NyAxOS45MzMgMTkuOTMzQzIwLjc5OTcgMTkuMDY2MyAyMS40ODcyIDE4LjAzNzQgMjEuOTU2MiAxNi45MDVDMjIuNDI1MyAxNS43NzI3IDIyLjY2NjcgMTQuNTU5IDIyLjY2NjcgMTMu''@;'; put 'put ''MzMzM0MyMi42NjY3IDEyLjEwNzcgMjIuNDI1MyAxMC44OTQgMjEuOTU2MiA5Ljc2MTYyQzIxLjQ4NzIgOC42MjkyNSAyMC43OTk3IDcuNjAwMzUgMTkuOTMzIDYuNzMzNjdDMTkuMDY2MyA1Ljg2Njk5IDE4LjAzNzQgNS4xNzk1IDE2LjkwNSA0LjcxMDQ2QzE1Ljc3MjcgNC4yNDE0MSAxNC41''@;'; put 'put ''NTkgNCAxMy4zMzMzIDRDMTIuMTA3NyA0IDEwLjg5NCA0LjI0MTQxIDkuNzYxNjIgNC43MTA0NkM4LjYyOTI1IDUuMTc5NSA3LjYwMDM1IDUuODY2OTkgNi43MzM2NyA2LjczMzY3QzUuODY2OTkgNy42MDAzNSA1LjE3OTUgOC42MjkyNSA0LjcxMDQ2IDkuNzYxNjJDNC4yNDE0MSAxMC44OTQg''@;'; put 'put ''NCAxMi4xMDc3IDQgMTMuMzMzM1onIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0MvZyUzRSUzQy9zdmclM0UifSxjb2xvcnM6e3doaXRlOiIjZmZmZmZmZmYiLGJsYWNrOiIjMDAwMDAw''@;'; put 'put ''ZmYiLHByaW1hcnk6ezEwMDoiIzYxODBmZmZmIiwyMDA6IiM1NTczZjBmZiIsMzAwOiIjNDY2OWY2ZmYiLDQwMDoiIzJlNTZmY2ZmIiw1MDA6IiMxYTQyZThmZiIsNjAwOiIjMTUzNWJjZmYifSxwYWxldHRlOns1MDoiI2Y3ZjdmOWZmIiwxMDA6IiNlN2U3ZTlmZiIsMjAwOiIjYjliOWJiZmYi''@;'; put 'put ''LDMwMDoiI2EzYTNhM2ZmIiw0MDA6IiM2ODY5NmNmZiIsNTAwOiIjNDA0MTQ0ZmYiLDYwMDoiIzMxMzEzMmZmIiw3MDA6IiMyODI4MjlmZiIsODAwOiIjMjIyMjIyZmYiLDkwMDoiIzFlMWUxZmZmIiw5NTA6IiMwNTA1MDZmZiJ9LHRyYW5zcGFyZW50OiIjZmZmZmZmMDAifSx0b2tlbnM6e2Zv''@;'; put 'put ''bnRGYW1pbHk6IkludGVyIixmb250U2l6ZToiMTRweCIsZm9udFNpemVTbWFsbDoiMTJweCIsbGluZUhlaWdodDoiMjBweCIsbGluZUhlaWdodFNtYWxsOiIxOHB4Iixmb250V2VpZ2h0OiI0MDAiLGxldHRlclNwYWNpbmc6IjBweCIsYm9yZGVyQ29sb3I6WyJjb2xvcnMucGFsZXR0ZS4xMDAi''@;'; put 'put ''LCJjb2xvcnMucGFsZXR0ZS43MDAiXSxhY2NlbnRDb2xvcjpbImNvbG9ycy5wcmltYXJ5LjUwMCIsImNvbG9ycy5wcmltYXJ5LjMwMCJdLGZvcmVncm91bmRDb2xvcjpbImNvbG9ycy5wYWxldHRlLjgwMCIsImNvbG9ycy5wYWxldHRlLjIwMCJdLGZvcmVncm91bmRTZWNvbmRhcnlDb2xvcjpb''@;'; put 'put ''ImNvbG9ycy5wYWxldHRlLjQwMCIsImNvbG9ycy5wYWxldHRlLjMwMCJdLGJhY2tncm91bmRDb2xvcjpbImNvbG9ycy53aGl0ZSIsImNvbG9ycy5wYWxldHRlLjk1MCJdLGJhY2tncm91bmRTZWNvbmRhcnlDb2xvcjpbImNvbG9ycy5wYWxldHRlLjUwIiwiY29sb3JzLnBhbGV0dGUuOTAwIl0s''@;'; put 'put ''cGxhY2Vob2xkZXJDb2xvcjpbImNvbG9ycy5wYWxldHRlLjMwMCIsImNvbG9ycy5wYWxldHRlLjQwMCJdLHJlYWRPbmx5Q29sb3I6WyJjb2xvcnMucGFsZXR0ZS40MDAiLCJjb2xvcnMucGFsZXR0ZS4zMDAiXSxkaXNhYmxlZENvbG9yOlsiY29sb3JzLnBhbGV0dGUuMzAwIiwiY29sb3JzLnBh''@;'; put 'put ''bGV0dGUuNDAwIl0sZ2FwU2l6ZToiZGVuc2l0eS5nYXAiLGljb25TaXplOiJzaXppbmcuc2l6ZV80Iix0YWJsZVRyYW5zaXRpb246IjAuMTVzIixib3JkZXJSYWRpdXM6InNpemluZy5zaXplXzEiLGJhckZvcmVncm91bmRDb2xvcjoidG9rZW5zLmZvcmVncm91bmRDb2xvciIsYmFyQmFja2dy''@;'; put 'put ''b3VuZENvbG9yOiJ0b2tlbnMuYmFja2dyb3VuZFNlY29uZGFyeUNvbG9yIixiYXJIb3Jpem9udGFsUGFkZGluZzoiZGVuc2l0eS5iYXJzSG9yaXpvbnRhbCIsYmFyVmVydGljYWxQYWRkaW5nOiJkZW5zaXR5LmJhcnNWZXJ0aWNhbCIsc2hhZG93Q29sb3I6WyJjb2xvcnMucGFsZXR0ZS44MDAi''@;'; put 'put ''LCJjb2xvcnMucGFsZXR0ZS4yMDAiXSxzaGFkb3dYOiJzaXppbmcuc2l6ZV8wIixzaGFkb3dZOiJzaXppbmcuc2l6ZV8yIixzaGFkb3dCbHVyOiJzaXppbmcuc2l6ZV80IixzaGFkb3dPcGFjaXR5OiI4JSIsY2VsbEhvcml6b250YWxQYWRkaW5nOiJkZW5zaXR5LmNlbGxIb3Jpem9udGFsIixj''@;'; put 'put ''ZWxsVmVydGljYWxQYWRkaW5nOiJkZW5zaXR5LmNlbGxWZXJ0aWNhbCIsY2VsbEhvcml6b250YWxCb3JkZXJDb2xvcjoidG9rZW5zLmJvcmRlckNvbG9yIixjZWxsVmVydGljYWxCb3JkZXJDb2xvcjoidG9rZW5zLmJvcmRlckNvbG9yIixjZWxsU2VsZWN0aW9uQm9yZGVyQ29sb3I6InRva2Vu''@;'; put 'put ''cy5hY2NlbnRDb2xvciIsY2VsbFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcjpbImNvbG9ycy5wcmltYXJ5LjQwMCIsImNvbG9ycy5wcmltYXJ5LjIwMCJdLGNlbGxTdWNjZXNzQmFja2dyb3VuZENvbG9yOiIjMzdiYzZjMzMiLGNlbGxFcnJvckJhY2tncm91bmRDb2xvcjoiI2ZhNGQzMjMzIixj''@;'; put 'put ''ZWxsUmVhZE9ubHlCYWNrZ3JvdW5kQ29sb3I6InRva2Vucy5iYWNrZ3JvdW5kU2Vjb25kYXJ5Q29sb3IiLGNlbGxBdXRvZmlsbFNpemU6InNpemluZy5zaXplXzFfNSIsY2VsbEF1dG9maWxsSGl0QXJlYVNpemU6InNpemluZy5zaXplXzMiLGNlbGxBdXRvZmlsbEJvcmRlcldpZHRoOiJzaXpp''@;'; put 'put ''bmcuc2l6ZV8wXzI1IixjZWxsQXV0b2ZpbGxCb3JkZXJSYWRpdXM6InNpemluZy5zaXplXzEiLGNlbGxBdXRvZmlsbEJvcmRlckNvbG9yOiJ0b2tlbnMuYmFja2dyb3VuZENvbG9yIixjZWxsQXV0b2ZpbGxCYWNrZ3JvdW5kQ29sb3I6InRva2Vucy5hY2NlbnRDb2xvciIsY2VsbEF1dG9maWxs''@;'; put 'put ''RmlsbEJvcmRlckNvbG9yOiJ0b2tlbnMuZm9yZWdyb3VuZENvbG9yIixjZWxsRWRpdG9yQm9yZGVyV2lkdGg6IjJweCIsY2VsbEVkaXRvckJvcmRlckNvbG9yOiJ0b2tlbnMuYWNjZW50Q29sb3IiLGNlbGxFZGl0b3JGb3JlZ3JvdW5kQ29sb3I6WyJjb2xvcnMucGFsZXR0ZS45NTAiLCJjb2xv''@;'; put 'put ''cnMud2hpdGUiXSxjZWxsRWRpdG9yQmFja2dyb3VuZENvbG9yOiJ0b2tlbnMuYmFja2dyb3VuZENvbG9yIixjZWxsRWRpdG9yU2hhZG93Qmx1clJhZGl1czoiMHB4IixjZWxsRWRpdG9yU2hhZG93Q29sb3I6InRva2Vucy5hY2NlbnRDb2xvciIsY2VsbE1vYmlsZUhhbmRsZVNpemU6InNpemlu''@;'; put 'put ''Zy5zaXplXzMiLGNlbGxNb2JpbGVIYW5kbGVCb3JkZXJXaWR0aDoic2l6aW5nLnNpemVfMF8yNSIsY2VsbE1vYmlsZUhhbmRsZUJvcmRlclJhZGl1czoic2l6aW5nLnNpemVfMyIsY2VsbE1vYmlsZUhhbmRsZUJvcmRlckNvbG9yOiJ0b2tlbnMuYWNjZW50Q29sb3IiLGNlbGxNb2JpbGVIYW5k''@;'; put 'put ''bGVCYWNrZ3JvdW5kQ29sb3I6InRva2Vucy5hY2NlbnRDb2xvciIsY2VsbE1vYmlsZUhhbmRsZUJhY2tncm91bmRPcGFjaXR5OiI0MCUiLGhlYWRlckZvbnRXZWlnaHQ6InRva2Vucy5mb250V2VpZ2h0IixoZWFkZXJGb3JlZ3JvdW5kQ29sb3I6InRva2Vucy5mb3JlZ3JvdW5kQ29sb3IiLGhl''@;'; put 'put ''YWRlckJhY2tncm91bmRDb2xvcjoidG9rZW5zLmJhY2tncm91bmRTZWNvbmRhcnlDb2xvciIsaGVhZGVySGlnaGxpZ2h0ZWRTaGFkb3dTaXplOiIwcHgiLGhlYWRlckhpZ2hsaWdodGVkRm9yZWdyb3VuZENvbG9yOlsiY29sb3JzLnBhbGV0dGUuOTUwIiwiY29sb3JzLndoaXRlIl0saGVhZGVy''@;'; put 'put ''SGlnaGxpZ2h0ZWRCYWNrZ3JvdW5kQ29sb3I6WyJjb2xvcnMucGFsZXR0ZS4xMDAiLCJjb2xvcnMucGFsZXR0ZS43MDAiXSxoZWFkZXJBY3RpdmVCb3JkZXJDb2xvcjpbImNvbG9ycy5wcmltYXJ5LjQwMCIsImNvbG9ycy5wcmltYXJ5LjIwMCJdLGhlYWRlckFjdGl2ZUZvcmVncm91bmRDb2xv''@;'; put 'put ''cjoiY29sb3JzLndoaXRlIixoZWFkZXJBY3RpdmVCYWNrZ3JvdW5kQ29sb3I6InRva2Vucy5hY2NlbnRDb2xvciIsaGVhZGVyRmlsdGVyQmFja2dyb3VuZENvbG9yOiJ0b2tlbnMuY2VsbFN1Y2Nlc3NCYWNrZ3JvdW5kQ29sb3IiLGhlYWRlclJvd0ZvcmVncm91bmRDb2xvcjoidG9rZW5zLmZv''@;'; put 'put ''cmVncm91bmRDb2xvciIsaGVhZGVyUm93QmFja2dyb3VuZENvbG9yOiJ0b2tlbnMuYmFja2dyb3VuZFNlY29uZGFyeUNvbG9yIixoZWFkZXJSb3dIaWdobGlnaHRlZEZvcmVncm91bmRDb2xvcjpbImNvbG9ycy5wYWxldHRlLjk1MCIsImNvbG9ycy53aGl0ZSJdLGhlYWRlclJvd0hpZ2hsaWdo''@;'; put 'put ''dGVkQmFja2dyb3VuZENvbG9yOlsiY29sb3JzLnBhbGV0dGUuMTAwIiwiY29sb3JzLnBhbGV0dGUuNzAwIl0saGVhZGVyUm93QWN0aXZlRm9yZWdyb3VuZENvbG9yOiJjb2xvcnMud2hpdGUiLGhlYWRlclJvd0FjdGl2ZUJhY2tncm91bmRDb2xvcjoidG9rZW5zLmFjY2VudENvbG9yIixyb3dI''@;'; put 'put ''ZWFkZXJPZGRCYWNrZ3JvdW5kQ29sb3I6InRva2Vucy5oZWFkZXJSb3dCYWNrZ3JvdW5kQ29sb3IiLHJvd0hlYWRlckV2ZW5CYWNrZ3JvdW5kQ29sb3I6InRva2Vucy5oZWFkZXJSb3dCYWNrZ3JvdW5kQ29sb3IiLHJvd0NlbGxPZGRCYWNrZ3JvdW5kQ29sb3I6InRva2Vucy5iYWNrZ3JvdW5k''@;'; put 'put ''Q29sb3IiLHJvd0NlbGxFdmVuQmFja2dyb3VuZENvbG9yOiJ0b2tlbnMuYmFja2dyb3VuZENvbG9yIixidXR0b25Cb3JkZXJSYWRpdXM6InNpemluZy5zaXplXzEiLGJ1dHRvbkhvcml6b250YWxQYWRkaW5nOiJkZW5zaXR5LmJ1dHRvbkhvcml6b250YWwiLGJ1dHRvblZlcnRpY2FsUGFkZGlu''@;'; put 'put ''ZzoiZGVuc2l0eS5idXR0b25WZXJ0aWNhbCIscHJpbWFyeUJ1dHRvbkJvcmRlckNvbG9yOiJjb2xvcnMudHJhbnNwYXJlbnQiLHByaW1hcnlCdXR0b25Gb3JlZ3JvdW5kQ29sb3I6ImNvbG9ycy53aGl0ZSIscHJpbWFyeUJ1dHRvbkJhY2tncm91bmRDb2xvcjoidG9rZW5zLmFjY2VudENvbG9y''@;'; put 'put ''IixwcmltYXJ5QnV0dG9uRGlzYWJsZWRCb3JkZXJDb2xvcjoiY29sb3JzLnRyYW5zcGFyZW50IixwcmltYXJ5QnV0dG9uRGlzYWJsZWRGb3JlZ3JvdW5kQ29sb3I6InRva2Vucy5kaXNhYmxlZENvbG9yIixwcmltYXJ5QnV0dG9uRGlzYWJsZWRCYWNrZ3JvdW5kQ29sb3I6WyJjb2xvcnMucGFs''@;'; put 'put ''ZXR0ZS4xMDAiLCJjb2xvcnMucGFsZXR0ZS43MDAiXSxwcmltYXJ5QnV0dG9uSG92ZXJCb3JkZXJDb2xvcjoiY29sb3JzLnRyYW5zcGFyZW50IixwcmltYXJ5QnV0dG9uSG92ZXJGb3JlZ3JvdW5kQ29sb3I6InRva2Vucy5iYWNrZ3JvdW5kQ29sb3IiLHByaW1hcnlCdXR0b25Ib3ZlckJhY2tn''@;'; put 'put ''cm91bmRDb2xvcjpbImNvbG9ycy5wcmltYXJ5LjYwMCIsImNvbG9ycy5wcmltYXJ5LjEwMCJdLHByaW1hcnlCdXR0b25Gb2N1c0JvcmRlckNvbG9yOiJ0b2tlbnMuYmFja2dyb3VuZENvbG9yIixwcmltYXJ5QnV0dG9uRm9jdXNGb3JlZ3JvdW5kQ29sb3I6InRva2Vucy5iYWNrZ3JvdW5kQ29s''@;'; put 'put ''b3IiLHByaW1hcnlCdXR0b25Gb2N1c0JhY2tncm91bmRDb2xvcjoidG9rZW5zLmFjY2VudENvbG9yIixzZWNvbmRhcnlCdXR0b25Cb3JkZXJDb2xvcjoidG9rZW5zLmJvcmRlckNvbG9yIixzZWNvbmRhcnlCdXR0b25Gb3JlZ3JvdW5kQ29sb3I6InRva2Vucy5mb3JlZ3JvdW5kQ29sb3IiLHNl''@;'; put 'put ''Y29uZGFyeUJ1dHRvbkJhY2tncm91bmRDb2xvcjoidG9rZW5zLmJhY2tncm91bmRDb2xvciIsc2Vjb25kYXJ5QnV0dG9uRGlzYWJsZWRCb3JkZXJDb2xvcjoidG9rZW5zLmJvcmRlckNvbG9yIixzZWNvbmRhcnlCdXR0b25EaXNhYmxlZEZvcmVncm91bmRDb2xvcjoidG9rZW5zLmRpc2FibGVk''@;'; put 'put ''Q29sb3IiLHNlY29uZGFyeUJ1dHRvbkRpc2FibGVkQmFja2dyb3VuZENvbG9yOlsiY29sb3JzLnBhbGV0dGUuMTAwIiwiY29sb3JzLnBhbGV0dGUuNzAwIl0sc2Vjb25kYXJ5QnV0dG9uSG92ZXJCb3JkZXJDb2xvcjoidG9rZW5zLmJvcmRlckNvbG9yIixzZWNvbmRhcnlCdXR0b25Ib3ZlckZv''@;'; put 'put ''cmVncm91bmRDb2xvcjoidG9rZW5zLmZvcmVncm91bmRDb2xvciIsc2Vjb25kYXJ5QnV0dG9uSG92ZXJCYWNrZ3JvdW5kQ29sb3I6WyJjb2xvcnMucGFsZXR0ZS4xMDAiLCJjb2xvcnMucGFsZXR0ZS43MDAiXSxzZWNvbmRhcnlCdXR0b25Gb2N1c0JvcmRlckNvbG9yOiJ0b2tlbnMuYm9yZGVy''@;'; put 'put ''Q29sb3IiLHNlY29uZGFyeUJ1dHRvbkZvY3VzRm9yZWdyb3VuZENvbG9yOiJ0b2tlbnMuZm9yZWdyb3VuZENvbG9yIixzZWNvbmRhcnlCdXR0b25Gb2N1c0JhY2tncm91bmRDb2xvcjoidG9rZW5zLmJhY2tncm91bmRDb2xvciIsaWNvbkJ1dHRvbkJvcmRlclJhZGl1czoic2l6aW5nLnNpemVf''@;'; put 'put ''MF81IixpY29uQnV0dG9uTGFyZ2VCb3JkZXJSYWRpdXM6InNpemluZy5zaXplXzEiLGljb25CdXR0b25MYXJnZVBhZGRpbmc6InNpemluZy5zaXplXzEiLGljb25CdXR0b25Cb3JkZXJDb2xvcjpbImNvbG9ycy5wYWxldHRlLjUwIiwiY29sb3JzLnBhbGV0dGUuOTAwIl0saWNvbkJ1dHRvbkJh''@;'; put 'put ''Y2tncm91bmRDb2xvcjoidG9rZW5zLmJhY2tncm91bmRTZWNvbmRhcnlDb2xvciIsaWNvbkJ1dHRvbkljb25Db2xvcjpbImNvbG9ycy5wYWxldHRlLjMwMCIsImNvbG9ycy5wYWxldHRlLjQwMCJdLGljb25CdXR0b25IaXRBcmVhU2l6ZToic2l6aW5nLnNpemVfNiIsaWNvbkJ1dHRvbkhvdmVy''@;'; put 'put ''Qm9yZGVyQ29sb3I6WyJjb2xvcnMucGFsZXR0ZS4xMDAiLCJjb2xvcnMucGFsZXR0ZS43MDAiXSxpY29uQnV0dG9uSG92ZXJCYWNrZ3JvdW5kQ29sb3I6WyJjb2xvcnMucGFsZXR0ZS4xMDAiLCJjb2xvcnMucGFsZXR0ZS43MDAiXSxpY29uQnV0dG9uSG92ZXJJY29uQ29sb3I6WyJjb2xvcnMu''@;'; put 'put ''cGFsZXR0ZS4zMDAiLCJjb2xvcnMucGFsZXR0ZS40MDAiXSxpY29uQnV0dG9uQWN0aXZlQm9yZGVyQ29sb3I6WyJjb2xvcnMucHJpbWFyeS40MDAiLCJjb2xvcnMucHJpbWFyeS4yMDAiXSxpY29uQnV0dG9uQWN0aXZlQmFja2dyb3VuZENvbG9yOiJ0b2tlbnMuYWNjZW50Q29sb3IiLGljb25C''@;'; put 'put ''dXR0b25BY3RpdmVJY29uQ29sb3I6ImNvbG9ycy53aGl0ZSIsaWNvbkJ1dHRvbkFjdGl2ZUhvdmVyQm9yZGVyQ29sb3I6WyJjb2xvcnMucHJpbWFyeS40MDAiLCJjb2xvcnMucHJpbWFyeS4yMDAiXSxpY29uQnV0dG9uQWN0aXZlSG92ZXJCYWNrZ3JvdW5kQ29sb3I6WyJjb2xvcnMucHJpbWFy''@;'; put 'put ''eS40MDAiLCJjb2xvcnMucHJpbWFyeS4yMDAiXSxpY29uQnV0dG9uQWN0aXZlSG92ZXJJY29uQ29sb3I6ImNvbG9ycy53aGl0ZSIsY29sbGFwc2VCdXR0b25Cb3JkZXJSYWRpdXM6InNpemluZy5zaXplXzEiLGNvbGxhcHNlQnV0dG9uT3BlbkJvcmRlckNvbG9yOlsiY29sb3JzLnBhbGV0dGUu''@;'; put 'put ''MjAwIiwiY29sb3JzLnBhbGV0dGUuNTAwIl0sY29sbGFwc2VCdXR0b25PcGVuQmFja2dyb3VuZENvbG9yOlsiY29sb3JzLndoaXRlIiwiY29sb3JzLnBhbGV0dGUuOTUwIl0sY29sbGFwc2VCdXR0b25PcGVuSWNvbkNvbG9yOlsiY29sb3JzLnBhbGV0dGUuNDAwIiwiY29sb3JzLnBhbGV0dGUu''@;'; put 'put ''MzAwIl0sY29sbGFwc2VCdXR0b25PcGVuSWNvbkFjdGl2ZUNvbG9yOlsiY29sb3JzLnBhbGV0dGUuNDAwIiwiY29sb3JzLnBhbGV0dGUuMzAwIl0sY29sbGFwc2VCdXR0b25PcGVuSG92ZXJCb3JkZXJDb2xvcjpbImNvbG9ycy5wYWxldHRlLjIwMCIsImNvbG9ycy5wYWxldHRlLjUwMCJdLGNv''@;'; put 'put ''bGxhcHNlQnV0dG9uT3BlbkhvdmVyQmFja2dyb3VuZENvbG9yOlsiY29sb3JzLnBhbGV0dGUuNTAiLCJjb2xvcnMucGFsZXR0ZS45MDAiXSxjb2xsYXBzZUJ1dHRvbk9wZW5Ib3Zlckljb25Db2xvcjpbImNvbG9ycy5wYWxldHRlLjQwMCIsImNvbG9ycy5wYWxldHRlLjMwMCJdLGNvbGxhcHNl''@;'; put 'put ''QnV0dG9uT3BlbkhvdmVySWNvbkFjdGl2ZUNvbG9yOlsiY29sb3JzLnBhbGV0dGUuNDAwIiwiY29sb3JzLnBhbGV0dGUuMzAwIl0sY29sbGFwc2VCdXR0b25DbG9zZUJvcmRlckNvbG9yOlsiY29sb3JzLnBhbGV0dGUuMjAwIiwiY29sb3JzLnBhbGV0dGUuNTAwIl0sY29sbGFwc2VCdXR0b25D''@;'; put 'put ''bG9zZUJhY2tncm91bmRDb2xvcjpbImNvbG9ycy5wYWxldHRlLjEwMCIsImNvbG9ycy5wYWxldHRlLjcwMCJdLGNvbGxhcHNlQnV0dG9uQ2xvc2VJY29uQ29sb3I6WyJjb2xvcnMucGFsZXR0ZS40MDAiLCJjb2xvcnMucGFsZXR0ZS4zMDAiXSxjb2xsYXBzZUJ1dHRvbkNsb3NlSWNvbkFjdGl2''@;'; put 'put ''ZUNvbG9yOlsiY29sb3JzLnBhbGV0dGUuNDAwIiwiY29sb3JzLnBhbGV0dGUuMzAwIl0sY29sbGFwc2VCdXR0b25DbG9zZUhvdmVyQm9yZGVyQ29sb3I6WyJjb2xvcnMucGFsZXR0ZS4yMDAiLCJjb2xvcnMucGFsZXR0ZS41MDAiXSxjb2xsYXBzZUJ1dHRvbkNsb3NlSG92ZXJCYWNrZ3JvdW5k''@;'; put 'put ''Q29sb3I6WyJjb2xvcnMucGFsZXR0ZS4xMDAiLCJjb2xvcnMucGFsZXR0ZS43MDAiXSxjb2xsYXBzZUJ1dHRvbkNsb3NlSG92ZXJJY29uQ29sb3I6WyJjb2xvcnMucGFsZXR0ZS40MDAiLCJjb2xvcnMucGFsZXR0ZS4zMDAiXSxjb2xsYXBzZUJ1dHRvbkNsb3NlSG92ZXJJY29uQWN0aXZlQ29s''@;'; put 'put ''b3I6WyJjb2xvcnMucGFsZXR0ZS40MDAiLCJjb2xvcnMucGFsZXR0ZS4zMDAiXSxsaW5rQ29sb3I6WyJjb2xvcnMucHJpbWFyeS42MDAiLCJjb2xvcnMucHJpbWFyeS4xMDAiXSxsaW5rSG92ZXJDb2xvcjoidG9rZW5zLmFjY2VudENvbG9yIixpbnB1dEJvcmRlcldpZHRoOiIxcHgiLGlucHV0''@;'; put 'put ''Qm9yZGVyUmFkaXVzOiJzaXppbmcuc2l6ZV8xIixpbnB1dEhvcml6b250YWxQYWRkaW5nOiJkZW5zaXR5LmlucHV0SG9yaXpvbnRhbCIsaW5wdXRWZXJ0aWNhbFBhZGRpbmc6ImRlbnNpdHkuaW5wdXRWZXJ0aWNhbCIsaW5wdXRCb3JkZXJDb2xvcjoidG9rZW5zLmJvcmRlckNvbG9yIixpbnB1''@;'; put 'put ''dEZvcmVncm91bmRDb2xvcjoidG9rZW5zLmZvcmVncm91bmRDb2xvciIsaW5wdXRCYWNrZ3JvdW5kQ29sb3I6InRva2Vucy5iYWNrZ3JvdW5kU2Vjb25kYXJ5Q29sb3IiLGlucHV0SG92ZXJCb3JkZXJDb2xvcjoidG9rZW5zLmJvcmRlckNvbG9yIixpbnB1dEhvdmVyRm9yZWdyb3VuZENvbG9y''@;'; put 'put ''OiJ0b2tlbnMuZm9yZWdyb3VuZENvbG9yIixpbnB1dEhvdmVyQmFja2dyb3VuZENvbG9yOiJ0b2tlbnMuYmFja2dyb3VuZENvbG9yIixpbnB1dERpc2FibGVkQm9yZGVyQ29sb3I6InRva2Vucy5ib3JkZXJDb2xvciIsaW5wdXREaXNhYmxlZEZvcmVncm91bmRDb2xvcjoidG9rZW5zLmRpc2Fi''@;'; put 'put ''bGVkQ29sb3IiLGlucHV0RGlzYWJsZWRCYWNrZ3JvdW5kQ29sb3I6WyJjb2xvcnMucGFsZXR0ZS4yMDAiLCJjb2xvcnMucGFsZXR0ZS41MDAiXSxpbnB1dEZvY3VzQm9yZGVyQ29sb3I6InRva2Vucy5hY2NlbnRDb2xvciIsaW5wdXRGb2N1c0ZvcmVncm91bmRDb2xvcjoidG9rZW5zLmZvcmVn''@;'; put 'put ''cm91bmRDb2xvciIsaW5wdXRGb2N1c0JhY2tncm91bmRDb2xvcjoidG9rZW5zLmJhY2tncm91bmRDb2xvciIsY2hlY2tib3hTaXplOiJ0b2tlbnMuaWNvblNpemUiLGNoZWNrYm94Qm9yZGVyUmFkaXVzOiJzaXppbmcuc2l6ZV8xIixjaGVja2JveEJvcmRlckNvbG9yOlsiY29sb3JzLnBhbGV0''@;'; put 'put ''dGUuMjAwIiwiY29sb3JzLnBhbGV0dGUuNTAwIl0sY2hlY2tib3hCYWNrZ3JvdW5kQ29sb3I6InRva2Vucy5iYWNrZ3JvdW5kQ29sb3IiLGNoZWNrYm94SWNvbkNvbG9yOiJjb2xvcnMudHJhbnNwYXJlbnQiLGNoZWNrYm94Rm9jdXNCb3JkZXJDb2xvcjpbImNvbG9ycy5wYWxldHRlLjIwMCIs''@;'; put 'put ''ImNvbG9ycy5wYWxldHRlLjUwMCJdLGNoZWNrYm94Rm9jdXNCYWNrZ3JvdW5kQ29sb3I6InRva2Vucy5iYWNrZ3JvdW5kQ29sb3IiLGNoZWNrYm94Rm9jdXNJY29uQ29sb3I6ImNvbG9ycy50cmFuc3BhcmVudCIsY2hlY2tib3hGb2N1c1JpbmdDb2xvcjoidG9rZW5zLmFjY2VudENvbG9yIixj''@;'; put 'put ''aGVja2JveERpc2FibGVkQm9yZGVyQ29sb3I6WyJjb2xvcnMucGFsZXR0ZS4yMDAiLCJjb2xvcnMucGFsZXR0ZS41MDAiXSxjaGVja2JveERpc2FibGVkQmFja2dyb3VuZENvbG9yOlsiY29sb3JzLnBhbGV0dGUuMTAwIiwiY29sb3JzLnBhbGV0dGUuNzAwIl0sY2hlY2tib3hEaXNhYmxlZElj''@;'; put 'put ''b25Db2xvcjoiY29sb3JzLnRyYW5zcGFyZW50IixjaGVja2JveENoZWNrZWRCb3JkZXJDb2xvcjpbImNvbG9ycy5wcmltYXJ5LjQwMCIsImNvbG9ycy5wcmltYXJ5LjIwMCJdLGNoZWNrYm94Q2hlY2tlZEJhY2tncm91bmRDb2xvcjoidG9rZW5zLmFjY2VudENvbG9yIixjaGVja2JveENoZWNr''@;'; put 'put ''ZWRJY29uQ29sb3I6ImNvbG9ycy53aGl0ZSIsY2hlY2tib3hDaGVja2VkRm9jdXNCb3JkZXJDb2xvcjoidG9rZW5zLmJhY2tncm91bmRDb2xvciIsY2hlY2tib3hDaGVja2VkRm9jdXNCYWNrZ3JvdW5kQ29sb3I6InRva2Vucy5hY2NlbnRDb2xvciIsY2hlY2tib3hDaGVja2VkRm9jdXNJY29u''@;'; put 'put ''Q29sb3I6ImNvbG9ycy53aGl0ZSIsY2hlY2tib3hDaGVja2VkRGlzYWJsZWRCb3JkZXJDb2xvcjpbImNvbG9ycy5wYWxldHRlLjIwMCIsImNvbG9ycy5wYWxldHRlLjUwMCJdLGNoZWNrYm94Q2hlY2tlZERpc2FibGVkQmFja2dyb3VuZENvbG9yOlsiY29sb3JzLnBhbGV0dGUuMTAwIiwiY29s''@;'; put 'put ''b3JzLnBhbGV0dGUuNzAwIl0sY2hlY2tib3hDaGVja2VkRGlzYWJsZWRJY29uQ29sb3I6InRva2Vucy5kaXNhYmxlZENvbG9yIixjaGVja2JveEluZGV0ZXJtaW5hdGVCb3JkZXJDb2xvcjpbImNvbG9ycy5wcmltYXJ5LjQwMCIsImNvbG9ycy5wcmltYXJ5LjIwMCJdLGNoZWNrYm94SW5kZXRl''@;'; put 'put ''cm1pbmF0ZUJhY2tncm91bmRDb2xvcjoidG9rZW5zLmFjY2VudENvbG9yIixjaGVja2JveEluZGV0ZXJtaW5hdGVJY29uQ29sb3I6ImNvbG9ycy53aGl0ZSIsY2hlY2tib3hJbmRldGVybWluYXRlRm9jdXNCb3JkZXJDb2xvcjoidG9rZW5zLmJhY2tncm91bmRDb2xvciIsY2hlY2tib3hJbmRl''@;'; put 'put ''dGVybWluYXRlRm9jdXNCYWNrZ3JvdW5kQ29sb3I6InRva2Vucy5hY2NlbnRDb2xvciIsY2hlY2tib3hJbmRldGVybWluYXRlRm9jdXNJY29uQ29sb3I6ImNvbG9ycy53aGl0ZSIsY2hlY2tib3hJbmRldGVybWluYXRlRGlzYWJsZWRCb3JkZXJDb2xvcjpbImNvbG9ycy5wYWxldHRlLjIwMCIs''@;'; put 'put ''ImNvbG9ycy5wYWxldHRlLjYwMCJdLGNoZWNrYm94SW5kZXRlcm1pbmF0ZURpc2FibGVkQmFja2dyb3VuZENvbG9yOlsiY29sb3JzLnBhbGV0dGUuMjAwIiwiY29sb3JzLnBhbGV0dGUuNTAwIl0sY2hlY2tib3hJbmRldGVybWluYXRlRGlzYWJsZWRJY29uQ29sb3I6InRva2Vucy5kaXNhYmxl''@;'; put 'put ''ZENvbG9yIixyYWRpb1NpemU6InRva2Vucy5pY29uU2l6ZSIscmFkaW9Cb3JkZXJDb2xvcjpbImNvbG9ycy5wYWxldHRlLjIwMCIsImNvbG9ycy5wYWxldHRlLjUwMCJdLHJhZGlvQmFja2dyb3VuZENvbG9yOiJ0b2tlbnMuYmFja2dyb3VuZENvbG9yIixyYWRpb0ljb25Db2xvcjoiY29sb3Jz''@;'; put 'put ''LnRyYW5zcGFyZW50IixyYWRpb0ZvY3VzQm9yZGVyQ29sb3I6InRva2Vucy5ib3JkZXJDb2xvciIscmFkaW9Gb2N1c0JhY2tncm91bmRDb2xvcjoidG9rZW5zLmJhY2tncm91bmRDb2xvciIscmFkaW9Gb2N1c0ljb25Db2xvcjoiY29sb3JzLnRyYW5zcGFyZW50IixyYWRpb0ZvY3VzUmluZ0Nv''@;'; put 'put ''bG9yOiJ0b2tlbnMuYWNjZW50Q29sb3IiLHJhZGlvRGlzYWJsZWRCb3JkZXJDb2xvcjpbImNvbG9ycy5wYWxldHRlLjIwMCIsImNvbG9ycy5wYWxldHRlLjUwMCJdLHJhZGlvRGlzYWJsZWRCYWNrZ3JvdW5kQ29sb3I6WyJjb2xvcnMucGFsZXR0ZS4xMDAiLCJjb2xvcnMucGFsZXR0ZS43MDAi''@;'; put 'put ''XSxyYWRpb0Rpc2FibGVkSWNvbkNvbG9yOiJjb2xvcnMudHJhbnNwYXJlbnQiLHJhZGlvQ2hlY2tlZEJvcmRlckNvbG9yOiJ0b2tlbnMuYWNjZW50Q29sb3IiLHJhZGlvQ2hlY2tlZEJhY2tncm91bmRDb2xvcjoidG9rZW5zLmJhY2tncm91bmRDb2xvciIscmFkaW9DaGVja2VkSWNvbkNvbG9y''@;'; put 'put ''OiJ0b2tlbnMuYWNjZW50Q29sb3IiLHJhZGlvQ2hlY2tlZEZvY3VzQm9yZGVyQ29sb3I6WyJjb2xvcnMucHJpbWFyeS40MDAiLCJjb2xvcnMucHJpbWFyeS4yMDAiXSxyYWRpb0NoZWNrZWRGb2N1c0JhY2tncm91bmRDb2xvcjoidG9rZW5zLmJhY2tncm91bmRDb2xvciIscmFkaW9DaGVja2Vk''@;'; put 'put ''Rm9jdXNJY29uQ29sb3I6WyJjb2xvcnMucHJpbWFyeS40MDAiLCJjb2xvcnMucHJpbWFyeS4yMDAiXSxyYWRpb0NoZWNrZWREaXNhYmxlZEJvcmRlckNvbG9yOlsiY29sb3JzLnBhbGV0dGUuMjAwIiwiY29sb3JzLnBhbGV0dGUuNTAwIl0scmFkaW9DaGVja2VkRGlzYWJsZWRCYWNrZ3JvdW5k''@;'; put 'put ''Q29sb3I6WyJjb2xvcnMucGFsZXR0ZS4xMDAiLCJjb2xvcnMucGFsZXR0ZS43MDAiXSxyYWRpb0NoZWNrZWREaXNhYmxlZEljb25Db2xvcjoidG9rZW5zLmRpc2FibGVkQ29sb3IiLG1vdmVCYWNrbGlnaHRDb2xvcjpbImNvbG9ycy5wYWxldHRlLjgwMCIsImNvbG9ycy5wYWxldHRlLjIwMCJd''@;'; put 'put ''LG1vdmVCYWNrbGlnaHRPcGFjaXR5OiI4JSIsbW92ZUluZGljYXRvckNvbG9yOiJ0b2tlbnMuYWNjZW50Q29sb3IiLHJlc2l6ZUluZGljYXRvckNvbG9yOlsiY29sb3JzLnBhbGV0dGUuMzAwIiwiY29sb3JzLnBhbGV0dGUuNDAwIl0saGlkZGVuSW5kaWNhdG9yQ29sb3I6WyJjb2xvcnMucGFs''@;'; put 'put ''ZXR0ZS4zMDAiLCJjb2xvcnMucGFsZXR0ZS40MDAiXSxtZW51Qm9yZGVyV2lkdGg6IjFweCIsbWVudUJvcmRlclJhZGl1czoic2l6aW5nLnNpemVfMSIsbWVudUhvcml6b250YWxQYWRkaW5nOiJkZW5zaXR5Lm1lbnVIb3Jpem9udGFsIixtZW51VmVydGljYWxQYWRkaW5nOiJkZW5zaXR5Lm1l''@;'; put 'put ''bnVWZXJ0aWNhbCIsbWVudUl0ZW1Ib3Jpem9udGFsUGFkZGluZzoiZGVuc2l0eS5tZW51SXRlbUhvcml6b250YWwiLG1lbnVJdGVtVmVydGljYWxQYWRkaW5nOiJkZW5zaXR5Lm1lbnVJdGVtVmVydGljYWwiLG1lbnVCb3JkZXJDb2xvcjoidG9rZW5zLmJvcmRlckNvbG9yIixtZW51U2hhZG93''@;'; put 'put ''WDoidG9rZW5zLnNoYWRvd1giLG1lbnVTaGFkb3dZOiJ0b2tlbnMuc2hhZG93WSIsbWVudVNoYWRvd0JsdXI6InRva2Vucy5zaGFkb3dCbHVyIixtZW51U2hhZG93Q29sb3I6WyJjb2xvcnMucGFsZXR0ZS45NTAiLCJjb2xvcnMud2hpdGUiXSxtZW51U2hhZG93T3BhY2l0eToiOCUiLG1lbnVJ''@;'; put 'put ''dGVtSG92ZXJDb2xvcjpbImNvbG9ycy5wYWxldHRlLjgwMCIsImNvbG9ycy5wYWxldHRlLjIwMCJdLG1lbnVJdGVtSG92ZXJDb2xvck9wYWNpdHk6IjQlIixtZW51SXRlbUFjdGl2ZUNvbG9yOiJ0b2tlbnMuYWNjZW50Q29sb3IiLG1lbnVJdGVtQWN0aXZlQ29sb3JPcGFjaXR5OiI4JSIsY29t''@;'; put 'put ''bWVudHNUZXh0YXJlYUhvcml6b250YWxQYWRkaW5nOiJkZW5zaXR5LmNlbGxIb3Jpem9udGFsIixjb21tZW50c1RleHRhcmVhVmVydGljYWxQYWRkaW5nOiJkZW5zaXR5LmNlbGxWZXJ0aWNhbCIsY29tbWVudHNUZXh0YXJlYUJvcmRlcldpZHRoOiIxcHgiLGNvbW1lbnRzVGV4dGFyZWFCb3Jk''@;'; put 'put ''ZXJDb2xvcjoiY29sb3JzLnRyYW5zcGFyZW50Iixjb21tZW50c1RleHRhcmVhRm9yZWdyb3VuZENvbG9yOiJ0b2tlbnMuZm9yZWdyb3VuZENvbG9yIixjb21tZW50c1RleHRhcmVhQmFja2dyb3VuZENvbG9yOiJ0b2tlbnMuYmFja2dyb3VuZFNlY29uZGFyeUNvbG9yIixjb21tZW50c1RleHRh''@;'; put 'put ''cmVhRm9jdXNCb3JkZXJXaWR0aDoiMXB4Iixjb21tZW50c1RleHRhcmVhRm9jdXNCb3JkZXJDb2xvcjoidG9rZW5zLmFjY2VudENvbG9yIixjb21tZW50c1RleHRhcmVhRm9jdXNGb3JlZ3JvdW5kQ29sb3I6InRva2Vucy5mb3JlZ3JvdW5kQ29sb3IiLGNvbW1lbnRzVGV4dGFyZWFGb2N1c0Jh''@;'; put 'put ''Y2tncm91bmRDb2xvcjoidG9rZW5zLmJhY2tncm91bmRDb2xvciIsY29tbWVudHNJbmRpY2F0b3JTaXplOiJzaXppbmcuc2l6ZV8xXzUiLGNvbW1lbnRzSW5kaWNhdG9yQ29sb3I6InRva2Vucy5hY2NlbnRDb2xvciIsbGljZW5zZUhvcml6b250YWxQYWRkaW5nOiJ0b2tlbnMuYmFySG9yaXpv''@;'; put 'put ''bnRhbFBhZGRpbmciLGxpY2Vuc2VWZXJ0aWNhbFBhZGRpbmc6InRva2Vucy5iYXJWZXJ0aWNhbFBhZGRpbmciLGxpY2Vuc2VGb3JlZ3JvdW5kQ29sb3I6InRva2Vucy5iYXJGb3JlZ3JvdW5kQ29sb3IiLGxpY2Vuc2VCYWNrZ3JvdW5kQ29sb3I6InRva2Vucy5iYXJCYWNrZ3JvdW5kQ29sb3Ii''@;'; put 'put ''LHBhZ2luYXRpb25CYXJGb3JlZ3JvdW5kQ29sb3I6InRva2Vucy5iYXJGb3JlZ3JvdW5kQ29sb3IiLHBhZ2luYXRpb25CYXJCYWNrZ3JvdW5kQ29sb3I6InRva2Vucy5iYXJCYWNrZ3JvdW5kQ29sb3IiLHBhZ2luYXRpb25CYXJIb3Jpem9udGFsUGFkZGluZzoidG9rZW5zLmJhckhvcml6b250''@;'; put 'put ''YWxQYWRkaW5nIixwYWdpbmF0aW9uQmFyVmVydGljYWxQYWRkaW5nOiJ0b2tlbnMuYmFyVmVydGljYWxQYWRkaW5nIixwYWdpbmF0aW9uQnV0dG9uQm9yZGVyQ29sb3I6InRva2Vucy5wYWdpbmF0aW9uQmFyQmFja2dyb3VuZENvbG9yIixwYWdpbmF0aW9uQnV0dG9uRm9yZWdyb3VuZENvbG9y''@;'; put 'put ''OiJ0b2tlbnMuZm9yZWdyb3VuZFNlY29uZGFyeUNvbG9yIixwYWdpbmF0aW9uQnV0dG9uQmFja2dyb3VuZENvbG9yOiJ0b2tlbnMucGFnaW5hdGlvbkJhckJhY2tncm91bmRDb2xvciIscGFnaW5hdGlvbkJ1dHRvbkhvdmVyQm9yZGVyQ29sb3I6WyJjb2xvcnMucGFsZXR0ZS4xMDAiLCJjb2xv''@;'; put 'put ''cnMucGFsZXR0ZS43MDAiXSxwYWdpbmF0aW9uQnV0dG9uSG92ZXJGb3JlZ3JvdW5kQ29sb3I6InRva2Vucy5mb3JlZ3JvdW5kQ29sb3IiLHBhZ2luYXRpb25CdXR0b25Ib3ZlckJhY2tncm91bmRDb2xvcjpbImNvbG9ycy5wYWxldHRlLjEwMCIsImNvbG9ycy5wYWxldHRlLjcwMCJdLHBhZ2lu''@;'; put 'put ''YXRpb25CdXR0b25EaXNhYmxlZEJvcmRlckNvbG9yOiJ0b2tlbnMucGFnaW5hdGlvbkJhckJhY2tncm91bmRDb2xvciIscGFnaW5hdGlvbkJ1dHRvbkRpc2FibGVkRm9yZWdyb3VuZENvbG9yOiJ0b2tlbnMuZGlzYWJsZWRDb2xvciIscGFnaW5hdGlvbkJ1dHRvbkRpc2FibGVkQmFja2dyb3Vu''@;'; put 'put ''ZENvbG9yOiJ0b2tlbnMucGFnaW5hdGlvbkJhckJhY2tncm91bmRDb2xvciIscGFnaW5hdGlvbkJ1dHRvbkZvY3VzQm9yZGVyQ29sb3I6InRva2Vucy5hY2NlbnRDb2xvciIscGFnaW5hdGlvbkJ1dHRvbkZvY3VzRm9yZWdyb3VuZENvbG9yOiJ0b2tlbnMuZm9yZWdyb3VuZENvbG9yIixwYWdp''@;'; put 'put ''bmF0aW9uQnV0dG9uRm9jdXNCYWNrZ3JvdW5kQ29sb3I6InRva2Vucy5wYWdpbmF0aW9uQmFyQmFja2dyb3VuZENvbG9yIixkaWFsb2dTZW1pVHJhbnNwYXJlbnRCYWNrZ3JvdW5kQ29sb3I6WyJjb2xvcnMud2hpdGUiLCJjb2xvcnMucGFsZXR0ZS45NTAiXSxkaWFsb2dTZW1pVHJhbnNwYXJl''@;'; put 'put ''bnRCYWNrZ3JvdW5kT3BhY2l0eToiODAlIixkaWFsb2dTb2xpZEJhY2tncm91bmRDb2xvcjpbImNvbG9ycy53aGl0ZSIsImNvbG9ycy5wYWxldHRlLjk1MCJdLGRpYWxvZ0NvbnRlbnRQYWRkaW5nSG9yaXpvbnRhbDoiZGVuc2l0eS5kaWFsb2dIb3Jpem9udGFsIixkaWFsb2dDb250ZW50UGFk''@;'; put 'put ''ZGluZ1ZlcnRpY2FsOiJkZW5zaXR5LmRpYWxvZ1ZlcnRpY2FsIixkaWFsb2dDb250ZW50Qm9yZGVyUmFkaXVzOiJzaXppbmcuc2l6ZV8yIixkaWFsb2dDb250ZW50QmFja2dyb3VuZENvbG9yOiJ0b2tlbnMuYmFja2dyb3VuZFNlY29uZGFyeUNvbG9yIixub3RpZmljYXRpb25Gb3JlZ3JvdW5k''@;'; put 'put ''Q29sb3I6InRva2Vucy5mb3JlZ3JvdW5kQ29sb3IiLG5vdGlmaWNhdGlvbkJhY2tncm91bmRDb2xvcjoidG9rZW5zLmJhY2tncm91bmRDb2xvciIsbm90aWZpY2F0aW9uQm9yZGVyQ29sb3I6InRva2Vucy5iYWNrZ3JvdW5kQ29sb3IiLG5vdGlmaWNhdGlvblN1Y2Nlc3NBY2NlbnQ6IiMzN2Jj''@;'; put 'put ''NmNmZiIsbm90aWZpY2F0aW9uV2FybmluZ0FjY2VudDoiI2ZiZTk1MmZmIixub3RpZmljYXRpb25FcnJvckFjY2VudDoiI2ZhNGQzMmZmIixjaGlwQmFja2dyb3VuZDoidG9rZW5zLmJhY2tncm91bmRTZWNvbmRhcnlDb2xvciIsY2hpcEJvcmRlclJhZGl1czoic2l6aW5nLnNpemVfMF81Iixj''@;'; put 'put ''aGlwVmVydGljYWxQYWRkaW5nOiJzaXppbmcuc2l6ZV8wIixjaGlwSG9yaXpvbnRhbFBhZGRpbmc6InNpemluZy5zaXplXzBfNSIsY2hpcEdhcDoic2l6aW5nLnNpemVfMSIsc2Nyb2xsYmFyQm9yZGVyUmFkaXVzOiJzaXppbmcuc2l6ZV8yIixzY3JvbGxiYXJUcmFja0NvbG9yOiJ0b2tlbnMu''@;'; put 'put ''YmFja2dyb3VuZFNlY29uZGFyeUNvbG9yIixzY3JvbGxiYXJUaHVtYkNvbG9yOlsiY29sb3JzLnBhbGV0dGUuMzAwIiwiY29sb3JzLnBhbGV0dGUuNDAwIl19fTtsZXQgSWRlPW51bGw7ZnVuY3Rpb24gU0RlKG4pe2lmKDA9PT1uLmxlbmd0aClyZXR1cm5bXTtjb25zdCBlPVsuLi5uXTtyZXR1''@;'; put 'put ''cm4gZS5zb3J0KChbcl0sW2ldKT0+cj09PWk/MDpyPmk/MTotMSksbTEoZSwocixbaSxvXSk9Pntjb25zdCBhPXJbci5sZW5ndGgtMV0sW2wsdV09YSxnPWwrdTtpZihpPD1nKXtjb25zdCBFPU1hdGgubWF4KG8tKGctaSksMCk7YVsxXSs9RX1lbHNlIHIucHVzaChbaSxvXSk7cmV0dXJuIHJ9''@;'; put 'put ''LFtlWzBdXSl9Y29uc3QgRGRlPW5ldyBNYXA7ZnVuY3Rpb24gTVQobixlLHQscixpLG8sYSl7Y29uc3QgbD1hLmFyaWFUYWdzLHU9W10sZz1bXSxFPVtdLE89W107YS5faXNCYXNlUmVuZGVyZXJDYWxsZWQ9ITAsYS5jbGFzc05hbWUmJllyKGUsYS5jbGFzc05hbWUpLGEucmVhZE9ubHk/KHUu''@;'; put 'put ''cHVzaChhLnJlYWRPbmx5Q2VsbENsYXNzTmFtZSksbCYmTy5wdXNoKFsiYXJpYS1yZWFkb25seSIsInRydWUiXSkpOmwmJkUucHVzaCgiYXJpYS1yZWFkb25seSIpLCExPT09YS52YWxpZCYmYS5pbnZhbGlkQ2VsbENsYXNzTmFtZT8odS5wdXNoKGEuaW52YWxpZENlbGxDbGFzc05hbWUpLGwm''@;'; put 'put ''Jk8ucHVzaChbImFyaWEtaW52YWxpZCIsInRydWUiXSkpOihnLnB1c2goYS5pbnZhbGlkQ2VsbENsYXNzTmFtZSksbCYmRS5wdXNoKCJhcmlhLWludmFsaWQiKSksITE9PT1hLndvcmRXcmFwJiZhLm5vV29yZFdyYXBDbGFzc05hbWUmJnUucHVzaChhLm5vV29yZFdyYXBDbGFzc05hbWUpLEFs''@;'; put 'put ''KG8pJiZhLnBsYWNlaG9sZGVyJiZ1LnB1c2goYS5wbGFjZWhvbGRlckNlbGxDbGFzc05hbWUpLGEudGV4dEVsbGlwc2lzJiZ1LnB1c2goImh0VGV4dEVsbGlwc2lzIiksa28oZSxnKSxZcihlLHUpLHc0KGUsRSksS28oZSxPKX1mdW5jdGlvbiBFRGUobixlLHQpe24uYWRkRXZlbnRMaXN0ZW5l''@;'; put 'put ''cihlLHQsITEpfWZ1bmN0aW9uIE1EZShuLGUsdCl7bi5yZW1vdmVFdmVudExpc3RlbmVyKGUsdCwhMSl9ZnVuY3Rpb24gaFoobil7cmV0dXJuIG4ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKG4pfWZ1bmN0aW9uIFREZShuLGU9e30pe2NvbnN0IHQ9e21pbkhl''@;'; put 'put ''aWdodDoyMDAsbWF4SGVpZ2h0OjMwMCxtaW5XaWR0aDoxMDAsbWF4V2lkdGg6MzAwLHRleHRDb250ZW50Olo9PloudmFsdWUsLi4uZX0scj1uLmJvZHksaT1uLmNyZWF0ZVRleHROb2RlKCIiKSxvPW4uY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCBhO2Z1bmN0aW9uIGwoKXtpLnRleHRDb250''@;'; put 'put ''ZW50PXQudGV4dENvbnRlbnQoYSksby5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLG8uc3R5bGUuZm9udFNpemU9aFooYSkuZm9udFNpemUsby5zdHlsZS5mb250RmFtaWx5PWhaKGEpLmZvbnRGYW1pbHksby5zdHlsZS53aGl0ZVNwYWNlPSJwcmUiLHIuYXBwZW5kQ2hpbGQobyk7Y29uc3Qg''@;'; put 'put ''Wj1OdW1iZXIucGFyc2VJbnQoaFooYSk/LnBhZGRpbmdJbmxpbmVTdGFydHx8IjAiLDEwKSxlZT1OdW1iZXIucGFyc2VJbnQoaFooYSk/LnBhZGRpbmdJbmxpbmVFbmR8fCIwIiwxMCksdmU9by5jbGllbnRXaWR0aCtaK2VlKzE7ci5yZW1vdmVDaGlsZChvKTtjb25zdCBNZT1hLnN0eWxlO01l''@;'; put 'put ''LmhlaWdodD1gJHt0Lm1pbkhlaWdodH1weGAsTWUud2lkdGg9dC5taW5XaWR0aD52ZT9gJHt0Lm1pbldpZHRofXB4YDp2ZT50Lm1heFdpZHRoP2Ake3QubWF4V2lkdGh9cHhgOmAke3ZlfXB4YDtjb25zdCBIZT1hLnNjcm9sbEhlaWdodD9hLnNjcm9sbEhlaWdodC0xOjA7dC5taW5IZWlnaHQ+''@;'; put 'put ''SGU/TWUuaGVpZ2h0PWAke3QubWluSGVpZ2h0fXB4YDp0Lm1heEhlaWdodDxIZT8oTWUuaGVpZ2h0PWAke3QubWF4SGVpZ2h0fXB4YCxNZS5vdmVyZmxvd1k9InZpc2libGUiKTpNZS5oZWlnaHQ9YCR7SGV9cHhgfWZ1bmN0aW9uIHUoKXtuLmRlZmF1bHRWaWV3LnNldFRpbWVvdXQobCwwKX1m''@;'; put 'put ''dW5jdGlvbiBnKFosZWUpe2lmKCJpbmhlcml0Ij09PVopcmV0dXJuIGVlO2NvbnN0IHZlPU51bWJlci5wYXJzZUludChTdHJpbmcoWiksMTApO3JldHVybiBpc05hTih2ZSk/dm9pZCAwOnZlfXJldHVybntpbml0OmZ1bmN0aW9uIE8oWixlZSx2ZT0hMSl7YT1aLGZ1bmN0aW9uIEUoWil7aWYo''@;'; put 'put ''WiYmWi5taW5IZWlnaHQpe2NvbnN0IGVlPWcoWi5taW5IZWlnaHQsYS5jbGllbnRIZWlnaHQpO3ZvaWQgMCE9PWVlJiYodC5taW5IZWlnaHQ9ZWUpfWlmKFomJloubWF4SGVpZ2h0KXtjb25zdCBlZT1nKFoubWF4SGVpZ2h0LGEuY2xpZW50SGVpZ2h0KTt2b2lkIDAhPT1lZSYmKHQubWF4SGVp''@;'; put 'put ''Z2h0PWVlKX1pZihaJiZaLm1pbldpZHRoKXtjb25zdCBlZT1nKFoubWluV2lkdGgsYS5jbGllbnRXaWR0aCk7dm9pZCAwIT09ZWUmJih0Lm1pbldpZHRoPWVlKX1pZihaJiZaLm1heFdpZHRoKXtjb25zdCBlZT1nKFoubWF4V2lkdGgsYS5jbGllbnRXaWR0aCk7dm9pZCAwIT09ZWUmJih0Lm1h''@;'; put 'put ''eFdpZHRoPWVlKX1vLmZpcnN0Q2hpbGR8fChvLmNsYXNzTmFtZT0iYXV0b1Jlc2l6ZSIsby5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siLG8uYXBwZW5kQ2hpbGQoaSkpfShlZSksIlRFWFRBUkVBIj09PWEubm9kZU5hbWUmJihhLnN0eWxlLnJlc2l6ZT0ibm9uZSIsYS5zdHlsZS5oZWln''@;'; put 'put ''aHQ9YCR7dC5taW5IZWlnaHR9cHhgLGEuc3R5bGUubWluV2lkdGg9YCR7dC5taW5XaWR0aH1weGAsYS5zdHlsZS5tYXhXaWR0aD1gJHt0Lm1heFdpZHRofXB4YCxhLnN0eWxlLm92ZXJmbG93WT0iaGlkZGVuIiksdmUmJihFRGUoYSwiaW5wdXQiLGwpLEVEZShhLCJrZXlkb3duIix1KSksbCgp''@;'; put 'put ''fSxyZXNpemU6bCx1bk9ic2VydmUoKXtNRGUoYSwiaW5wdXQiLGwpLE1EZShhLCJrZXlkb3duIix1KX19fWZ1bmN0aW9uIHhEZShuLGUpe2NvbnN0IHQ9eHNlKGUpLHI9ZS52YWx1ZS5zcGxpdCgiXG4iKTtsZXQgaT10LG89MDtmb3IobGV0IGE9MDthPHIubGVuZ3RoO2ErKyl7MCE9PWEmJihv''@;'; put 'put ''Kz1yW2EtMV0ubGVuZ3RoKzEpO2NvbnN0IHU9bytyW2FdLmxlbmd0aDtpZigiaG9tZSI9PT1uP2k9bzoiZW5kIj09PW4mJihpPXUpLHQ8PXUpYnJlYWt9dkwoZSxpLGkpfU1ULlJFTkRFUkVSX1RZUEU9ImJhc2UiO2NvbnN0IGZaPSJodF9lZGl0b3JfaGlkZGVuIixBRGU9InRleHRFZGl0b3Ii''@;'; put 'put ''O2NsYXNzIGRfIGV4dGVuZHMgSTd7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJ0ZXh0In1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLlRFWFRBUkVBLnZhbHVlfXNldFZhbHVlKGUpe3RoaXMuVEVYVEFSRUEudmFsdWU9ZX1vcGVuKCl7dGhpcy5fb3BlbmVkPSEwLHRoaXMucmVmcmVz''@;'; put 'put ''aERpbWVuc2lvbnMoKSx0aGlzLnNob3dFZGl0YWJsZUVsZW1lbnQoKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZWRpdG9yIiksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpfWNsb3NlKCl7dGhpcy5fb3BlbmVkPSExLHRoaXMuYXV0b1Jlc2l6''@;'; put 'put ''ZS51bk9ic2VydmUoKSxwTCh0aGlzLmhvdC5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudCx0aGlzLmhvdC5yb290RWxlbWVudCkmJnRoaXMuaG90Lmxpc3RlbigpLHRoaXMuaGlkZUVkaXRhYmxlRWxlbWVudCgpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpfXByZXBhcmUoZSx0LHIsaSxv''@;'; put 'put ''LGEpe2NvbnN0IGw9dGhpcy5zdGF0ZTtpZihzdXBlci5wcmVwYXJlKGUsdCxyLGksbyxhKSwhYS5yZWFkT25seSl7dGhpcy5yZWZyZXNoRGltZW5zaW9ucyghMCk7Y29uc3R7YWxsb3dJbnZhbGlkOnV9PWE7dSYmIXRoaXMuaXNPcGVuZWQoKSYmKHRoaXMuVEVYVEFSRUEudmFsdWU9IiIpLGwh''@;'; put 'put ''PT1WaC5GSU5JU0hFRCYmIXRoaXMuaXNPcGVuZWQoKSYmdGhpcy5oaWRlRWRpdGFibGVFbGVtZW50KCl9fWJlZ2luRWRpdGluZyhlLHQpe3RoaXMuc3RhdGU9PT1WaC5WSVJHSU4mJih0aGlzLlRFWFRBUkVBLnZhbHVlPSIiLHN1cGVyLmJlZ2luRWRpdGluZyhlLHQpKX1mb2N1cygpe3RoaXMu''@;'; put 'put ''VEVYVEFSRUEuc2VsZWN0KCksdkwodGhpcy5URVhUQVJFQSx0aGlzLlRFWFRBUkVBLnZhbHVlLmxlbmd0aCx0aGlzLlRFWFRBUkVBLnZhbHVlLmxlbmd0aCl9Y3JlYXRlRWxlbWVudHMoZT0idGV4dGFyZWEiKXtjb25zdHtyb290RG9jdW1lbnQ6dH09dGhpcy5ob3Q7dGhpcy5URVhUQVJFQT10''@;'; put 'put ''LmNyZWF0ZUVsZW1lbnQoZSksS28odGhpcy5URVhUQVJFQSxbWyJkYXRhLWhvdC1pbnB1dCIsIiJdLGI0KC0xKV0pLFlyKHRoaXMuVEVYVEFSRUEsImhhbmRzb250YWJsZUlucHV0IiksdGhpcy50ZXh0YXJlYVN0eWxlPXRoaXMuVEVYVEFSRUEuc3R5bGUsdGhpcy50ZXh0YXJlYVN0eWxlLndp''@;'; put 'put ''ZHRoPSIwIix0aGlzLnRleHRhcmVhU3R5bGUuaGVpZ2h0PSIwIix0aGlzLnRleHRhcmVhU3R5bGUub3ZlcmZsb3dZPSJ2aXNpYmxlIix0aGlzLlRFWFRBUkVBX1BBUkVOVD10LmNyZWF0ZUVsZW1lbnQoIkRJViIpLFlyKHRoaXMuVEVYVEFSRUFfUEFSRU5ULCJoYW5kc29udGFibGVJbnB1dEhv''@;'; put 'put ''bGRlciIpLExhKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcykmJmtvKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcyksWXIodGhpcy5URVhUQVJFQV9QQVJFTlQsZlopLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZT10aGlzLlRFWFRBUkVBX1BBUkVOVC5z''@;'; put 'put ''dHlsZSx0aGlzLlRFWFRBUkVBX1BBUkVOVC5hcHBlbmRDaGlsZCh0aGlzLlRFWFRBUkVBKSx0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLlRFWFRBUkVBX1BBUkVOVCl9aGlkZUVkaXRhYmxlRWxlbWVudCgpe2p4ZSgpJiYodGhpcy50ZXh0YXJlYVN0eWxlLnRleHRJbmRl''@;'; put 'put ''bnQ9Ii05OTk5OXB4IiksdGhpcy50ZXh0YXJlYVN0eWxlLm92ZXJmbG93WT0idmlzaWJsZSIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm9wYWNpdHk9IjAiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5oZWlnaHQ9IjFweCIsa28odGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNs''@;'; put 'put ''YXNzKSxZcih0aGlzLlRFWFRBUkVBX1BBUkVOVCxmWil9c2hvd0VkaXRhYmxlRWxlbWVudCgpe3RoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5oZWlnaHQ9IiIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm92ZXJmbG93PSIiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5wb3NpdGlvbj0iIix0''@;'; put 'put ''aGlzLnRleHRhcmVhUGFyZW50U3R5bGVbdGhpcy5ob3QuaXNSdGwoKT8ibGVmdCI6InJpZ2h0Il09ImF1dG8iLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5vcGFjaXR5PSIxIix0aGlzLnRleHRhcmVhU3R5bGUudGV4dEluZGVudD0iIjtjb25zdCBlPXRoaXMuVEVYVEFSRUFfUEFSRU5ULmNo''@;'; put 'put ''aWxkTm9kZXM7bGV0IHQ9ITE7VmEoZS5sZW5ndGgtMSxyPT57aWYoTGEoZVtyXSwiaGFuZHNvbnRhYmxlRWRpdG9yIikpcmV0dXJuIHQ9ITAsITF9KSxMYSh0aGlzLlRFWFRBUkVBX1BBUkVOVCxmWikmJmtvKHRoaXMuVEVYVEFSRUFfUEFSRU5ULGZaKSx0Pyh0aGlzLmxheWVyQ2xhc3M9Imh0''@;'; put 'put ''X2VkaXRvcl92aXNpYmxlIixZcih0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpKToodGhpcy5sYXllckNsYXNzPXRoaXMuZ2V0RWRpdGVkQ2VsbHNMYXllckNsYXNzKCksWXIodGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSl9cmVmcmVzaFZhbHVlKCl7''@;'; put 'put ''Y29uc3QgZT10aGlzLmhvdC50b1BoeXNpY2FsUm93KHRoaXMucm93KSx0PXRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwoZSx0aGlzLmNvbCk7dGhpcy5vcmlnaW5hbFZhbHVlPXQsdGhpcy5zZXRWYWx1ZSh0KSx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCl9cmVmcmVzaERpbWVuc2lvbnMo''@;'; put 'put ''ZT0hMSl7aWYodGhpcy5zdGF0ZSE9PVZoLkVESVRJTkcmJiFlKXJldHVybjtpZih0aGlzLlREPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpLCF0aGlzLlREKXJldHVybiB2b2lkKGV8fHRoaXMuY2xvc2UoKSk7Y29uc3QgdD10aGlzLmdldEVkaXRlZENlbGxSZWN0KCk7aWYoIXQpcmV0dXJuO2NvbnN0''@;'; put 'put ''e3RvcDpyLHN0YXJ0Omksd2lkdGg6byxtYXhXaWR0aDphLGhlaWdodDpsLG1heEhlaWdodDp1fT10O3RoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS50b3A9YCR7cn1weGAsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlW3RoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJdPWAke2l9cHhgLHRo''@;'; put 'put ''aXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpO2NvbnN0IGc9dGhpcy5ob3Qucm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuVEQpO3RoaXMuVEVYVEFSRUEuc3R5bGUuZm9udFNpemU9Zy5mb250U2l6ZSx0aGlzLlRFWFRBUkVBLnN0eWxlLmZvbnRGYW1pbHk9Zy5mb250RmFtaWx5LHRo''@;'; put 'put ''aXMuVEVYVEFSRUEuc3R5bGUuYmFja2dyb3VuZENvbG9yPXRoaXMuVEQuc3R5bGUuYmFja2dyb3VuZENvbG9yLHRoaXMuYXV0b1Jlc2l6ZS5pbml0KHRoaXMuVEVYVEFSRUEse21pbldpZHRoOk1hdGgubWluKG8sYSksbWluSGVpZ2h0Ok1hdGgubWluKGwsdSksbWF4V2lkdGg6YSxtYXhIZWln''@;'; put 'put ''aHQ6dX0sITApfWJpbmRFdmVudHMoKXt5c2UoKSYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlRFWFRBUkVBLCJmb2N1c291dCIsKCk9PnRoaXMuZmluaXNoRWRpdGluZyghMSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCgpPT50aGlz''@;'; put 'put ''LnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29sdW1uUmVzaXplIiwoKT0+e3RoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLnN0YXRlPT09''@;'; put 'put ''VmguRURJVElORyYmdGhpcy5mb2N1cygpfSksdGhpcy5hZGRIb29rKCJhZnRlclJvd1Jlc2l6ZSIsKCk9Pnt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5zdGF0ZT09PVZoLkVESVRJTkcmJnRoaXMuZm9jdXMoKX0pfWRlc3Ryb3koKXt0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCks''@;'; put 'put ''dGhpcy5jbGVhckhvb2tzKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCB0PXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLGk9KCk9Pnt0aGlzLmhvdC5yb290RG9jdW1lbnQuZXhlY0NvbW1hbmQoImluc2VydFRleHQiLCExLCJcbiIpfTt0LmFk''@;'; put 'put ''ZFNob3J0Y3V0cyhbe2tleXM6W1siQ29udHJvbCIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT4oaSgpLCExKSxydW5Pbmx5SWY6bz0+IXRoaXMuaG90LnNlbGVjdGlvbi5pc011bHRpcGxlKCkmJiFvPy5hbHRLZXl9LHtrZXlzOltbIk1ldGEiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+KGkoKSwh''@;'; put 'put ''MSkscnVuT25seUlmOigpPT4hdGhpcy5ob3Quc2VsZWN0aW9uLmlzTXVsdGlwbGUoKX0se2tleXM6W1siQWx0IiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9PihpKCksITEpfSx7a2V5czpbWyJIb21lIl1dLGNhbGxiYWNrOihvLGEpPT57eERlKGE/LlswXT8/IiIsdGhpcy5URVhUQVJFQSl9fSx7''@;'; put 'put ''a2V5czpbWyJFbmQiXV0sY2FsbGJhY2s6KG8sYSk9Pnt4RGUoYT8uWzBdPz8iIix0aGlzLlRFWFRBUkVBKX19XSx7cnVuT25seUlmOigpPT5abyh0aGlzLmhvdC5nZXRTZWxlY3RlZCgpKSxncm91cDpBRGV9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5h''@;'; put 'put ''Z2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChBRGUpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBXMih0aGlzKSx0aGlzLmF1dG9SZXNpemU9VERlKHRoaXMuaG90LnJvb3REb2N1bWVudCksdGhpcy5ldmVudE1h''@;'; put 'put ''bmFnZXI9bmV3IFcyKHRoaXMpLHRoaXMuY3JlYXRlRWxlbWVudHMoKSx0aGlzLmJpbmRFdmVudHMoKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJEZXN0cm95IiwoKT0+dGhpcy5kZXN0cm95KCkpfX1mdW5jdGlvbiBENyhuLGUsdCxyLGksbyxhKXtsZXQgbD1vO0FsKGwpJiZhLnBsYWNl''@;'; put 'put ''aG9sZGVyJiYobD1hLnBsYWNlaG9sZGVyKTtjb25zdCB1PVBsKGwpO2xldCBnPXU7YS50cmltV2hpdGVzcGFjZSYmKGc9dS50cmltKCkpLHk3KGUsZyl9RDcuUkVOREVSRVJfVFlQRT0idGV4dCI7Y29uc3Qga0RlPXtDRUxMX1RZUEU6InRleHQiLGVkaXRvcjpkXyxyZW5kZXJlcjpEN30sUkRl''@;'; put 'put ''PWZ1bmN0aW9uIFlMdChuLGUsdD0hMSl7bGV0IHI9dGhpcztjb25zdCBpPW5ldyBXMihyKTtsZXQgbyxhLGwsdSxnLEUsTz0hMDtjb25zdCBaPXsuLi5lLmluaXRpYWxTdGF0ZSwuLi5lfTsoZnVuY3Rpb24gcmt0KG4pe3JldHVybiBuPT09UGxlfSkodCkmJmZ1bmN0aW9uIG5rdChuKXtaa2Uu''@;'; put 'put ''c2V0KG4sITApfSh0aGlzKSx0aGlzLnJvb3RDb250YWluZXI9bix0aGlzLnJvb3RXcmFwcGVyRWxlbWVudD1udWxsLHRoaXMucm9vdEdyaWRFbGVtZW50PW51bGwsdGhpcy5yb290R3JpZENvbnRlbnRFbGVtZW50PW51bGwsdGhpcy5yb290U2xvdFRvcEVsZW1lbnQ9bnVsbCx0aGlzLnJvb3RT''@;'; put 'put ''bG90Qm90dG9tRWxlbWVudD1udWxsLHRoaXMucm9vdE92ZXJsYXlzRWxlbWVudD1udWxsLHRoaXMucm9vdFBvcnRhbEVsZW1lbnQ9bnVsbCx0aGlzLnJvb3RFbGVtZW50PXIyKHRoaXMpP24ub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTpuLHRoaXMucm9vdERvY3VtZW50PW4u''@;'; put 'put ''b3duZXJEb2N1bWVudCx0aGlzLnJvb3RXaW5kb3c9dGhpcy5yb290RG9jdW1lbnQuZGVmYXVsdFZpZXcscjIodGhpcykmJih0aGlzLnJvb3RXcmFwcGVyRWxlbWVudD10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnJvb3RTbG90VG9wRWxlbWVudD10aGlzLnJv''@;'; put 'put ''b3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnJvb3RHcmlkRWxlbWVudD10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnJvb3RHcmlkQ29udGVudEVsZW1lbnQ9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5y''@;'; put 'put ''b290T3ZlcmxheXNFbGVtZW50PXRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMucm9vdFNsb3RCb3R0b21FbGVtZW50PXRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMucm9vdFBvcnRhbEVsZW1lbnQ9dGhpcy5yb290RG9jdW1lbnQu''@;'; put 'put ''Y3JlYXRlRWxlbWVudCgiZGl2IiksWXIodGhpcy5yb290RWxlbWVudCxbImh0LXdyYXBwZXIiLCJoYW5kc29udGFibGUiXSksWXIodGhpcy5yb290V3JhcHBlckVsZW1lbnQsImh0LXJvb3Qtd3JhcHBlciIpLFlyKHRoaXMucm9vdFNsb3RUb3BFbGVtZW50LCJodC1zbG90LXRvcCIpLFlyKHRo''@;'; put 'put ''aXMucm9vdEdyaWRFbGVtZW50LCJodC1ncmlkIiksWXIodGhpcy5yb290R3JpZENvbnRlbnRFbGVtZW50LCJodC1ncmlkLWNvbnRlbnQiKSxZcih0aGlzLnJvb3RPdmVybGF5c0VsZW1lbnQsImh0LW92ZXJsYXkiKSxZcih0aGlzLnJvb3RTbG90Qm90dG9tRWxlbWVudCwiaHQtc2xvdC1ib3R0''@;'; put 'put ''b20iKSx0aGlzLnJvb3RHcmlkQ29udGVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5yb290RWxlbWVudCksdGhpcy5yb290R3JpZEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5yb290R3JpZENvbnRlbnRFbGVtZW50KSx0aGlzLnJvb3RXcmFwcGVyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlz''@;'; put 'put ''LnJvb3RTbG90VG9wRWxlbWVudCksdGhpcy5yb290V3JhcHBlckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5yb290R3JpZEVsZW1lbnQpLHRoaXMucm9vdFdyYXBwZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMucm9vdFNsb3RCb3R0b21FbGVtZW50KSx0aGlzLnJvb3RXcmFwcGVyRWxlbWVu''@;'; put 'put ''dC5hcHBlbmRDaGlsZCh0aGlzLnJvb3RPdmVybGF5c0VsZW1lbnQpLHRoaXMucm9vdENvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnJvb3RXcmFwcGVyRWxlbWVudCksdGhpcy5yb290V3JhcHBlckVsZW1lbnQuX19ob3RJbnN0YW5jZT10aGlzLFlyKHRoaXMucm9vdFBvcnRhbEVsZW1lbnQs''@;'; put 'put ''Imh0LXBvcnRhbCIpLHRoaXMucm9vdERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5yb290UG9ydGFsRWxlbWVudCkpLHRoaXMuaXNEZXN0cm95ZWQ9ITEsdGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyPTAsdGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPTA7Y29uc3QgZWU9''@;'; put 'put ''Wj8ubGF5b3V0RGlyZWN0aW9uPz8iaW5oZXJpdCIsdmU9WyJydGwiLCJsdHIiXS5pbmNsdWRlcyhlZSk/ZWU6dGhpcy5yb290V2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5yb290RWxlbWVudCkuZGlyZWN0aW9uO3RoaXMucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJkaXIiLHZlKSx0''@;'; put 'put ''aGlzLnJvb3RXcmFwcGVyRWxlbWVudD8uc2V0QXR0cmlidXRlKCJkaXIiLHZlKSx0aGlzLmlzUnRsPWZ1bmN0aW9uKCl7cmV0dXJuInJ0bCI9PT12ZX0sdGhpcy5pc0x0cj1mdW5jdGlvbigpe3JldHVybiFyLmlzUnRsKCl9LHRoaXMuZ2V0RGlyZWN0aW9uRmFjdG9yPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHIuaXNMdHIoKT8xOi0xfSx0aGlzLnN0eWxlc0hhbmRsZXI9bmV3IFdEdCh7aG90OnIscm9vdEVsZW1lbnQ6ci5yb290RWxlbWVudCxyb290RG9jdW1lbnQ6ci5yb290RG9jdW1lbnQsb25UaGVtZUNoYW5nZTp1dD0+e3IyKHRoaXMpJiYoa28odGhpcy5yb290V3JhcHBlckVsZW1lbnQs''@;'; put 'put ''L2h0LXRoZW1lLS4qL2cpLGtvKHRoaXMucm9vdFBvcnRhbEVsZW1lbnQsL2h0LXRoZW1lLS4qL2cpLHV0JiYoWXIodGhpcy5yb290V3JhcHBlckVsZW1lbnQsdXQpLFlyKHRoaXMucm9vdFBvcnRhbEVsZW1lbnQsdXQpLGdldENvbXB1dGVkU3R5bGUodGhpcy5yb290V3JhcHBlckVsZW1lbnQp''@;'; put 'put ''LmdldFByb3BlcnR5VmFsdWUoIi0taHQtbGluZS1oZWlnaHQiKXx8SGEoYFRoZSAiJHt1dH0iIHRoZW1lIGlzIGVuYWJsZWQsIGJ1dCBpdHMgc3R5bGVzaGVldHMgYXJlIG1pc3Npbmcgb3Igbm90IGltcG9ydGVkIGNvcnJlY3RseS4gSW1wb3J0IHRoZSBjb3JyZWN0IENTUyBmaWxlcyBpbiBv''@;'; put 'put ''cmRlciB0byB1c2UgdGhhdCB0aGVtZS5gKSksdGhpcy52aWV3Py5fd3Q/LnNlbGVjdGlvbk1hbmFnZXI/LnJlZnJlc2hBbGxCb3JkZXJIYW5kbGVTdHlsZXMoKSl9LGluamVjdENvcmVDc3M6ImJvb2xlYW4iIT10eXBlb2YgZT8uaW5qZWN0Q29yZUNzc3x8ZS5pbmplY3RDb3JlQ3NzfSksdGhp''@;'; put 'put ''cy50aGVtZU1hbmFnZXI9bnVsbCxaLmxhbmd1YWdlPWZ1bmN0aW9uIHprdChuKXtsZXQgZT1fUmUobik7cmV0dXJuIFV1ZShlKXx8KGU9anVlLHlSZShuKSksZX0oWi5sYW5ndWFnZSk7Y29uc3QgTWU9T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKFopLmZpbHRlcigoW3V0XSk9''@;'; put 'put ''PiEoR28uZ2V0U2luZ2xldG9uKCkuaXNSZWdpc3RlcmVkKHV0KXx8R28uZ2V0U2luZ2xldG9uKCkuaXNEZXByZWNhdGVkKHV0KSkpKSxIZT1uZXcgS1JlKHIsTWUsW1BSdCxXUnRdKSxXZT1IZS5nZXRUYWJsZU1ldGEoKSxhdD1IZS5nZXRHbG9iYWxNZXRhKCksQ3Q9Q0woKTt0aGlzLmNvbnRh''@;'; put 'put ''aW5lcj10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnJvb3RFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmNvbnRhaW5lcix0aGlzLnJvb3RFbGVtZW50LmZpcnN0Q2hpbGQpLHRoaXMuZ3VpZD1gaHRfJHtWVygpfWAsRGRlLnNldCh0aGlzLmd1aWQsdGhpcyks''@;'; put 'put ''dGhpcy5jb2x1bW5JbmRleE1hcHBlcj1uZXcgS2xlLHRoaXMucm93SW5kZXhNYXBwZXI9bmV3IEtsZSx0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiaW5kZXhlc1NlcXVlbmNlQ2hhbmdlIix1dD0+e3IucnVuSG9va3MoImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLHV0''@;'; put 'put ''KX0pLHRoaXMucm93SW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJpbmRleGVzU2VxdWVuY2VDaGFuZ2UiLHV0PT57ci5ydW5Ib29rcygiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsdXQpfSksaS5hZGRFdmVudExpc3RlbmVyKHRoaXMucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudCwiY29t''@;'; put 'put ''cG9zaXRpb25zdGFydCIsdXQ9PntyLnJ1bkhvb2tzKCJiZWZvcmVDb21wb3NpdGlvblN0YXJ0Iix1dCl9KSxhPW5ldyBaUnQocik7Y29uc3QgQXQ9enAodGhpcy5ndWlkKTtBdC5yZWdpc3RlcigiY2VsbFJhbmdlTWFwcGVyIixuZXcgc0l0KHtyb3dJbmRleE1hcHBlcjp0aGlzLnJvd0luZGV4''@;'; put 'put ''TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOnRoaXMuY29sdW1uSW5kZXhNYXBwZXJ9KSksKCF0aGlzLnJvb3RFbGVtZW50LmlkfHwiaHRfIj09PXRoaXMucm9vdEVsZW1lbnQuaWQuc3Vic3RyaW5nKDAsMykpJiYodGhpcy5yb290RWxlbWVudC5pZD10aGlzLmd1aWQpO2xldCBDbj1uZXcgd1J0''@;'; put 'put ''KFdlLHtyb3dJbmRleE1hcHBlcjpyLnJvd0luZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOnIuY29sdW1uSW5kZXhNYXBwZXIsY291bnRDb2xzOigpPT5yLmNvdW50Q29scygpLGNvdW50Um93czooKT0+ci5jb3VudFJvd3MoKSxwcm9wVG9Db2w6dXQ9Pm8ucHJvcFRvQ29sKHV0KSxpc0Vk''@;'; put 'put ''aXRvck9wZW5lZDooKT0+e2NvbnN0IHV0PXIuZ2V0QWN0aXZlRWRpdG9yKCk7cmV0dXJuISF1dCYmdXQuaXNPcGVuZWQoKX0sY291bnRSZW5kZXJhYmxlQ29sdW1uczooKT0+ci52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxjb3VudFJlbmRlcmFibGVSb3dzOigpPT5yLnZpZXcuY291''@;'; put 'put ''bnRSZW5kZXJhYmxlUm93cygpLGNvdW50Um93SGVhZGVyczooKT0+ci5jb3VudFJvd0hlYWRlcnMoKSxjb3VudENvbEhlYWRlcnM6KCk9PnIuY291bnRDb2xIZWFkZXJzKCksY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2U6KHV0LEh0KT0+ci52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJh''@;'; put 'put ''bmdlKHV0LEh0KSxjb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZToodXQsSHQpPT5yLnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UodXQsSHQpLGdldFNob3J0Y3V0TWFuYWdlcjooKT0+ci5nZXRTaG9ydGN1dE1hbmFnZXIoKSxjcmVhdGVDZWxsQ29vcmRzOih1dCxIdCk9''@;'; put 'put ''PnIuX2NyZWF0ZUNlbGxDb29yZHModXQsSHQpLGNyZWF0ZUNlbGxSYW5nZToodXQsSHQsZG4pPT5yLl9jcmVhdGVDZWxsUmFuZ2UodXQsSHQsZG4pLHZpc3VhbFRvUmVuZGVyYWJsZUNvb3Jkczp1dD0+e2NvbnN0e3JvdzpIdCxjb2w6ZG59PXV0O3JldHVybiByLl9jcmVhdGVDZWxsQ29vcmRz''@;'; put 'put ''KEh0Pj0wP3Iucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChIdCk6SHQsZG4+PTA/ci5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGRuKTpkbil9LHJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkczp1dD0+e2NvbnN0e3JvdzpI''@;'; put 'put ''dCxjb2w6ZG59PXV0O3JldHVybiByLl9jcmVhdGVDZWxsQ29vcmRzKEh0Pj0wP3Iucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChIdCk6SHQsZG4+PTA/ci5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGRuKTpkbil9LGZp''@;'; put 'put ''bmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3c6KHV0LEh0KT0+e2NvbnN0IGRuPUh0PnV0PzE6LTEsVm49TWF0aC5taW4odXQsSHQpLElyPU1hdGgubWF4KHV0LEh0KSxuaT1yLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh1dCxkbik7cmV0dXJuIG51bGw9PT1u''@;'; put 'put ''aXx8MT09PWRuJiZuaT5Jcnx8LTE9PT1kbiYmbmk8Vm4/bnVsbDpuaT49MD9yLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgobmkpOm5pfSxmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlQ29sdW1uOih1dCxIdCk9Pntjb25zdCBkbj1IdD51dD8xOi0xLFZu''@;'; put 'put ''PU1hdGgubWluKHV0LEh0KSxJcj1NYXRoLm1heCh1dCxIdCksbmk9ci5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodXQsZG4pO3JldHVybiBudWxsPT09bml8fDE9PT1kbiYmbmk+SXJ8fC0xPT09ZG4mJm5pPFZuP251bGw6bmk+PTA/ci5jb2x1bW5JbmRleE1h''@;'; put 'put ''cHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KG5pKTpuaX0saXNEaXNhYmxlZENlbGxTZWxlY3Rpb246KHV0LEh0KT0+dXQ8MHx8SHQ8MD9yLmdldFNldHRpbmdzKCkuZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjpyLmdldENlbGxNZXRhKHV0LEh0KS5kaXNhYmxlVmlzdWFsU2VsZWN0''@;'; put 'put ''aW9ufSk7dGhpcy5zZWxlY3Rpb249Q247Y29uc3QgcXI9KHtoaWRkZW5JbmRleGVzQ2hhbmdlZDp1dH0pPT57dGhpcy5mb3JjZUZ1bGxSZW5kZXI9ITAsdXQmJnRoaXMuc2VsZWN0aW9uLmNvbW1pdCgpfTtmdW5jdGlvbiBUcih1dCxIdCl7Y29uc3QgZG49ImNsYXNzTmFtZSI9PT11dD9yLnJv''@;'; put 'put ''b3RFbGVtZW50OnIudGFibGU7aWYoTyl2b2lkIDAhPT1IdCYmWXIoZG4sSHQpO2Vsc2V7bGV0IFZuPVtdLElyPVtdO2lmKGF0W3V0XSl7Y29uc3QgRmk9YXRbdXRdO1ZuPUFycmF5LmlzQXJyYXkoRmkpP0ZpOm1zZShTdHJpbmcoRmkpKX1IdCYmKElyPUFycmF5LmlzQXJyYXkoSHQpP0h0Om1z''@;'; put 'put ''ZShIdCkpO2NvbnN0IG5pPXJMKFZuLElyKSxqcj1yTChJcixWbik7bmkubGVuZ3RoJiZrbyhkbixuaSksanIubGVuZ3RoJiZZcihkbixqcil9YXRbdXRdPUh0fWZ1bmN0aW9uIHJpKHV0KXtsZXQgSHQ7dHlwZW9mIHV0PiJ1Ij8oSHQ9RVQoIm1haW4iKT9DTygibWFpbiIpOlNPKFdMdCksSHQ9''@;'; put 'put ''Q08oIm1haW4iKSk6SHQ9ImZ1bmN0aW9uIiE9dHlwZW9mIHV0LmdldFRoZW1lQ29uZmlnP1NPKHV0KTp1dCxyLnRoZW1lTWFuYWdlcj1mdW5jdGlvbiBtTHQoe2hvdDpuLHRoZW1lT2JqZWN0OmV9KXtyZXR1cm4gbmV3IGdMdCh7aG90Om4sdGhlbWVPYmplY3Q6ZX0pfSh7aG90OnIsdGhlbWVP''@;'; put 'put ''YmplY3Q6SHR9KX1mdW5jdGlvbiBmbigpe2xldCB1dD0hMTtyZXR1cm57dmFsaWRhdG9yc0luUXVldWU6MCx2YWxpZDohMCxhZGRWYWxpZGF0b3JUb1F1ZXVlKCl7dGhpcy52YWxpZGF0b3JzSW5RdWV1ZSs9MSx1dD0hMX0scmVtb3ZlVmFsaWRhdG9yRm9ybVF1ZXVlKCl7dGhpcy52YWxpZGF0''@;'; put 'put ''b3JzSW5RdWV1ZT10aGlzLnZhbGlkYXRvcnNJblF1ZXVlLTE8MD8wOnRoaXMudmFsaWRhdG9yc0luUXVldWUtMSx0aGlzLmNoZWNrSWZRdWV1ZUlzRW1wdHkoKX0sb25RdWV1ZUVtcHR5KEh0KXt9LGNoZWNrSWZRdWV1ZUlzRW1wdHkoKXswPT09dGhpcy52YWxpZGF0b3JzSW5RdWV1ZSYmITE9''@;'; put 'put ''PT11dCYmKHV0PSEwLHRoaXMub25RdWV1ZUVtcHR5KHRoaXMudmFsaWQpKX19fWZ1bmN0aW9uIHlyKHV0LEh0KXtyZXR1cm4hIUh0Py5pc09wZW5lZCgpJiZKa2UodXQsSHQucm93LEh0LnByb3ApfWZ1bmN0aW9uIEFuKHV0LEh0LGRuKXtpZighdXQubGVuZ3RoKXJldHVybiB2b2lkIGRuKCk7''@;'; put 'put ''Y29uc3QgVm49ci5nZXRBY3RpdmVFZGl0b3IoKSxJcj1mbigpO2xldCBuaT0hMDtjb25zdCBqcj0oW2dvLFlvLCxTb10pPT57Y29uc3QgUmE9dXQuZmluZEluZGV4KChbVm8sYmxdKT0+Vm89PT1nbyYmYmw9PT1Zbyk7LTEhPT1SYSYmKHV0W1JhXVszXT1Tbyl9LEZpPShnbyxZbyk9Pnsic3Ry''@;'; put 'put ''aW5nIiE9dHlwZW9mIFlvfHwhWW8uZW5kc1dpdGgoIlZhbGlkYXRvciIpfHxnbz8uZm9yRWFjaChqcil9O3IuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLEZpKSxJci5vblF1ZXVlRW1wdHk9KCk9PntyLnJlbW92ZUhvb2soImFmdGVyQ2hhbmdlIixGaSksVm4mJm5pJiZWbi5fY2xvc2VBZnRlckRh''@;'; put 'put ''dGFDaGFuZ2UmJnlyKHV0LFZuKSYmVm4uY2FuY2VsQ2hhbmdlcygpLGRuKCl9O2ZvcihsZXQgZ289dXQubGVuZ3RoLTE7Z28+PTA7Z28tLSl7Y29uc3RbWW8sU28sLFJhXT11dFtnb10sVm89by5wcm9wVG9Db2woU28pO2xldCBibDtibD1OdW1iZXIuaXNJbnRlZ2VyKFZvKT9yLmdldENlbGxN''@;'; put 'put ''ZXRhKFlvLFZvKTp7Li4uT2JqZWN0LmdldFByb3RvdHlwZU9mKFdlKSwuLi5XZX0sci5nZXRDZWxsVmFsaWRhdG9yKGJsKSYmKElyLmFkZFZhbGlkYXRvclRvUXVldWUoKSxyLnZhbGlkYXRlQ2VsbChSYSxibCxmdW5jdGlvbihEMSxUaCl7cmV0dXJuIGZ1bmN0aW9uKGYyKXsiYm9vbGVhbiIh''@;'; put 'put ''PXR5cGVvZiBmMiYmSnIoIlZhbGlkYXRpb24gZXJyb3I6IHJlc3VsdCBpcyBub3QgYm9vbGVhbiIpLCExPT09ZjImJiExPT09VGguYWxsb3dJbnZhbGlkJiYobmk9ITEsdXQuc3BsaWNlKEQxLDEpLFRoLnZhbGlkPSEwKSxJci5yZW1vdmVWYWxpZGF0b3JGb3JtUXVldWUoKX19KGdvLGJsKSxI''@;'; put 'put ''dCkpfUlyLmNoZWNrSWZRdWV1ZUlzRW1wdHkoKX1mdW5jdGlvbiBIcih1dCxIdCl7Zm9yKGxldCBqcj11dC5sZW5ndGgtMTtqcj49MDtqci0tKXtsZXQgRmk9ITE7aWYobnVsbCE9PXV0W2pyXSl7aWYobnVsbCE9dXRbanJdWzJdfHxudWxsIT11dFtqcl1bM10pe2lmKFdlLmFsbG93SW5zZXJ0''@;'; put 'put ''Um93KWZvcig7dXRbanJdWzBdPnIuY291bnRSb3dzKCktMTspe2NvbnN0e2RlbHRhOmdvfT1vLmNyZWF0ZVJvdyh2b2lkIDAsdm9pZCAwLHtzb3VyY2U6ImF1dG8ifSk7aWYoMD09PWdvKXtGaT0hMDticmVha319aWYoImFycmF5Ij09PXIuZGF0YVR5cGUmJighV2UuY29sdW1uc3x8MD09PVdl''@;'; put 'put ''LmNvbHVtbnMubGVuZ3RoKSYmV2UuYWxsb3dJbnNlcnRDb2x1bW4pZm9yKDtOdW1iZXIoby5wcm9wVG9Db2wodXRbanJdWzFdKSk+ci5jb3VudENvbHMoKS0xOyl7Y29uc3R7ZGVsdGE6Z299PW8uY3JlYXRlQ29sKHZvaWQgMCx2b2lkIDAse3NvdXJjZToiYXV0byJ9KTtpZigwPT09Z28pe0Zp''@;'; put 'put ''PSEwO2JyZWFrfX1GaXx8by5zZXQodXRbanJdWzBdLHV0W2pyXVsxXSx1dFtqcl1bM10pfX1lbHNlIHV0LnNwbGljZShqciwxKX1jb25zdCBkbj11dC5sZW5ndGg+MCxWbj11LmdldEFjdGl2ZUVkaXRvcigpLElyPVZuPy5fY2xvc2VBZnRlckRhdGFDaGFuZ2Usbmk9eXIodXQsVm4pO2RuPyhs''@;'; put 'put ''LmFkanVzdFJvd3NBbmRDb2xzKCksci5ydW5Ib29rcygiYmVmb3JlQ2hhbmdlUmVuZGVyIix1dCxIdCksVm4/LmlzT3BlbmVkKCkmJklyJiZuaSYmdS5jbG9zZUVkaXRvcigpLHIudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSxyLnJlbmRlcigpLChWbj8uaXNPcGVuZWQoKSYmSXImJm5pfHwh''@;'; put 'put ''Vm4/LmlzT3BlbmVkKCkpJiZ1LnByZXBhcmVFZGl0b3IoKSxyLnJ1bkhvb2tzKCJhZnRlckNoYW5nZSIsdXQsSHR8fCJlZGl0IiksVm4mJnZvaWQgMCE9PVZuLnJlZnJlc2hWYWx1ZSYmKCFWbi5pc09wZW5lZCgpfHxuaSkmJlZuLnJlZnJlc2hWYWx1ZSgpKTpyLnJlbmRlcigpfWZ1bmN0aW9u''@;'; put 'put ''IHRpKHV0LEh0LGRuKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh1dCk/dXQ6W1t1dCxIdCxkbl1dfWZ1bmN0aW9uIGZyKHV0LEh0KXtjb25zdCBkbj1yLnJ1bkhvb2tzKCJiZWZvcmVDaGFuZ2UiLHV0LEh0fHwiZWRpdCIpLFZuPXV0LmZpbHRlcihJcj0+bnVsbCE9PUlyKTtpZighMT09PWRufHww''@;'; put 'put ''PT09Vm4ubGVuZ3RoKXJldHVybiByLmdldEFjdGl2ZUVkaXRvcigpPy5jYW5jZWxDaGFuZ2VzKCksW107Zm9yKGxldCBJcj1Wbi5sZW5ndGgtMTtJcj49MDtJci0tKXtjb25zdFtuaSxqciwsRmldPVZuW0lyXSxnbz1vLnByb3BUb0NvbChqcik7bGV0IFlvO1lvPU51bWJlci5pc0ludGVnZXIo''@;'; put 'put ''Z28pP3IuZ2V0Q2VsbE1ldGEobmksZ28pOnsuLi5PYmplY3QuZ2V0UHJvdG90eXBlT2YoV2UpLC4uLldlfSxWbltJcl1bM109YWRlKEZpLFlvKX1yZXR1cm4gVm59dGhpcy5jb2x1bW5JbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIsdXQ9Pntxcih1dCksdGhpcy5ydW5I''@;'; put 'put ''b29rcygiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNhY2hlVXBkYXRlIix1dCl9KSx0aGlzLnJvd0luZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiY2FjaGVVcGRhdGVkIix1dD0+e3FyKHV0KSx0aGlzLnJ1bkhvb2tzKCJhZnRlclJvd1NlcXVlbmNlQ2FjaGVVcGRhdGUiLHV0KX0pLHRoaXMuc2VsZWN0''@;'; put 'put ''aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJTZXRSYW5nZUVuZCIsKHV0LEh0KT0+e2NvbnN0IGRuPVZmKCExKSxWbj10aGlzLnNlbGVjdGlvbi5nZXRTZWxlY3RlZFJhbmdlKCkse2Zyb206SXIsdG86bml9PVZuLmN1cnJlbnQoKSxqcj1Wbi5zaXplKCktMTt0aGlzLnJ1bkhvb2tzKCJhZnRlclNl''@;'; put 'put ''bGVjdGlvbiIsSXIucm93LElyLmNvbCxuaS5yb3csbmkuY29sLGRuLGpyKSx0aGlzLnJ1bkhvb2tzKCJhZnRlclNlbGVjdGlvbkJ5UHJvcCIsSXIucm93LHIuY29sVG9Qcm9wKElyLmNvbCksbmkucm93LHIuY29sVG9Qcm9wKG5pLmNvbCksZG4sanIpO2NvbnN0IEZpPUNuLmdldFNlbGVjdGlv''@;'; put 'put ''blNvdXJjZSgpO0h0JiYhWyJsb2FkRGF0YSIsInVwZGF0ZURhdGEiLCJkZXNlbGVjdCIsInNoaWZ0Il0uaW5jbHVkZXMoRmkpJiYoIWRuLmlzVG91Y2hlZCgpfHxkbi5pc1RvdWNoZWQoKSYmIWRuLnZhbHVlKSYmRS5zY3JvbGxUbyh1dCk7Y29uc3QgWW89Q24uaXNTZWxlY3RlZEJ5Um93SGVh''@;'; put 'put ''ZGVyKCksU289Q24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7WW8mJlNvP1lyKHRoaXMucm9vdEVsZW1lbnQsWyJodF9fc2VsZWN0aW9uLS1yb3dzIiwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyJdKTpZbz8oa28odGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyIp''@;'; put 'put ''LFlyKHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLXJvd3MiKSk6U28/KGtvKHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLXJvd3MiKSxZcih0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIikpOmtvKHRoaXMucm9vdEVsZW1lbnQsWyJodF9f''@;'; put 'put ''c2VsZWN0aW9uLS1yb3dzIiwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyJdKSxbInNoaWZ0IiwicmVmcmVzaCIsImxvYWREYXRhIiwidXBkYXRlRGF0YSIsImRlc2VsZWN0Il0uaW5jbHVkZXMoRmkpfHx1LmNsb3NlRWRpdG9yKCksWyJyZWZyZXNoIiwibG9hZERhdGEiLCJ1cGRhdGVEYXRhIiwi''@;'; put 'put ''ZGVzZWxlY3QiXS5pbmNsdWRlcyhGaSl8fChyLnZpZXcucmVuZGVyKCksdS5wcmVwYXJlRWRpdG9yKCkpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRGb2N1cyIsdXQ9Pnt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVTZWxlY3Rpb25Gb2N1c1NldCIsdXQucm93LHV0LmNv''@;'; put 'put ''bCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyU2V0Rm9jdXMiLHV0PT57Y29uc3QgSHQ9VmYoITEpO3RoaXMucnVuSG9va3MoImFmdGVyU2VsZWN0aW9uRm9jdXNTZXQiLHV0LnJvdyx1dC5jb2wsSHQpLCghSHQuaXNUb3VjaGVkKCl8fEh0LmlzVG91Y2hlZCgpJiYhSHQu''@;'; put 'put ''dmFsdWUpJiZFLnNjcm9sbFRvKHV0KSx1LmNsb3NlRWRpdG9yKCksci52aWV3LnJlbmRlcigpLHUucHJlcGFyZUVkaXRvcigpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdGlvbkZpbmlzaGVkIix1dD0+e2NvbnN0IEh0PXV0Lmxlbmd0aC0xLHtmcm9tOmRuLHRv''@;'; put 'put ''OlZufT11dFtIdF07dGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25FbmQiLGRuLnJvdyxkbi5jb2wsVm4ucm93LFZuLmNvbCxIdCksdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AiLGRuLnJvdyxyLmNvbFRvUHJvcChkbi5jb2wpLFZuLnJvdyxyLmNvbFRvUHJvcChW''@;'; put 'put ''bi5jb2wpLEh0KSxbInJlZnJlc2giLCJkZXNlbGVjdCJdLmluY2x1ZGVzKENuLmdldFNlbGVjdGlvblNvdXJjZSgpKSYmKHIudmlldy5yZW5kZXIoKSx1LnByZXBhcmVFZGl0b3IoKSl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVySXNNdWx0aXBsZVNlbGVjdGlvbiIsdXQ9''@;'; put 'put ''Pntjb25zdCBIdD10aGlzLnJ1bkhvb2tzKCJhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLHV0LnZhbHVlKTt1dC52YWx1ZSYmKHV0LnZhbHVlPUh0KX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJEZXNlbGVjdCIsKCk9Pnt1LmNsb3NlRWRpdG9yKCksci52aWV3LnJlbmRl''@;'; put 'put ''cigpLGtvKHRoaXMucm9vdEVsZW1lbnQsWyJodF9fc2VsZWN0aW9uLS1yb3dzIiwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyJdKSx0aGlzLnJ1bkhvb2tzKCJhZnRlckRlc2VsZWN0Iil9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZUhpZ2hsaWdodFNldCIsKCk9PnIucnVu''@;'; put 'put ''SG9va3MoImJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldCIpKS5hZGRMb2NhbEhvb2soImJlZm9yZVNldFJhbmdlU3RhcnQiLCguLi51dCk9PnIucnVuSG9va3MoImJlZm9yZVNldFJhbmdlU3RhcnQiLC4uLnV0KSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsKC4u''@;'; put 'put ''LnV0KT0+ci5ydW5Ib29rcygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLC4uLnV0KSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRSYW5nZUVuZCIsKC4uLnV0KT0+ci5ydW5Ib29rcygiYmVmb3JlU2V0UmFuZ2VFbmQiLC4uLnV0KSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZWxlY3RDb2x1bW5z''@;'; put 'put ''IiwoLi4udXQpPT5yLnJ1bkhvb2tzKCJiZWZvcmVTZWxlY3RDb2x1bW5zIiwuLi51dCkpLmFkZExvY2FsSG9vaygiYWZ0ZXJTZWxlY3RDb2x1bW5zIiwoLi4udXQpPT5yLnJ1bkhvb2tzKCJhZnRlclNlbGVjdENvbHVtbnMiLC4uLnV0KSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZWxlY3RSb3dz''@;'; put 'put ''IiwoLi4udXQpPT5yLnJ1bkhvb2tzKCJiZWZvcmVTZWxlY3RSb3dzIiwuLi51dCkpLmFkZExvY2FsSG9vaygiYWZ0ZXJTZWxlY3RSb3dzIiwoLi4udXQpPT5yLnJ1bkhvb2tzKCJhZnRlclNlbGVjdFJvd3MiLC4uLnV0KSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZWxlY3RBbGwiLCguLi51dCk9''@;'; put 'put ''PnIucnVuSG9va3MoImJlZm9yZVNlbGVjdEFsbCIsLi4udXQpKS5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0QWxsIiwoLi4udXQpPT5yLnJ1bkhvb2tzKCJhZnRlclNlbGVjdEFsbCIsLi4udXQpKS5hZGRMb2NhbEhvb2soImJlZm9yZU1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwoLi4udXQpPT5y''@;'; put 'put ''LnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsLi4udXQpKS5hZGRMb2NhbEhvb2soImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLCguLi51dCk9PnIucnVuSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLC4uLnV0KSkuYWRkTG9jYWxIb29rKCJiZWZvcmVNb2RpZnlU''@;'; put 'put ''cmFuc2Zvcm1Gb2N1cyIsKC4uLnV0KT0+ci5ydW5Ib29rcygibW9kaWZ5VHJhbnNmb3JtRm9jdXMiLC4uLnV0KSkuYWRkTG9jYWxIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzIiwoLi4udXQpPT5yLnJ1bkhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzIiwuLi51dCkpLmFk''@;'; put 'put ''ZExvY2FsSG9vaygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtRW5kIiwoLi4udXQpPT5yLnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zvcm1FbmQiLC4uLnV0KSkuYWRkTG9jYWxIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsKC4uLnV0KT0+ci5ydW5Ib29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zv''@;'; put 'put ''cm1FbmQiLC4uLnV0KSkuYWRkTG9jYWxIb29rKCJiZWZvcmVSb3dXcmFwIiwoLi4udXQpPT5yLnJ1bkhvb2tzKCJiZWZvcmVSb3dXcmFwIiwuLi51dCkpLmFkZExvY2FsSG9vaygiYmVmb3JlQ29sdW1uV3JhcCIsKC4uLnV0KT0+ci5ydW5Ib29rcygiYmVmb3JlQ29sdW1uV3JhcCIsLi4udXQp''@;'; put 'put ''KS5hZGRMb2NhbEhvb2soImluc2VydFJvd1JlcXVpcmUiLHV0PT5yLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIix1dCwxLCJhdXRvIikpLmFkZExvY2FsSG9vaygiaW5zZXJ0Q29sUmVxdWlyZSIsdXQ9PnIuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLHV0LDEsImF1dG8iKSksbD17YWx0ZXIo''@;'; put 'put ''dXQsSHQsZG49MSxWbixJcil7aWYoITEhPT1yLnJ1bkhvb2tzKCJiZWZvcmVBbHRlciIsdXQsSHQsZG4sVm4sSXIpKXtzd2l0Y2godXQpe2Nhc2UiaW5zZXJ0X3Jvd19iZWxvdyI6Y2FzZSJpbnNlcnRfcm93X2Fib3ZlIjpjb25zdCBqcj1yLmNvdW50U291cmNlUm93cygpO2lmKFdlLm1heFJv''@;'; put 'put ''d3M9PT1qcilyZXR1cm47Y29uc3QgRmk9Imluc2VydF9yb3dfYmVsb3ciPT09dXQ/ImJlbG93IjoiYWJvdmUiLFlvPSJudW1iZXIiPT10eXBlb2YgSHQ/SHQ6ImJlbG93Ij09PUZpP2pyOjAse2RlbHRhOlNvLHN0YXJ0UGh5c2ljYWxJbmRleDpSYX09by5jcmVhdGVSb3coWW8sZG4se3NvdXJj''@;'; put 'put ''ZTpWbixtb2RlOkZpfSk7Q24uc2hpZnRSb3dzKHIudG9WaXN1YWxSb3coUmEpLFNvKTticmVhaztjYXNlImluc2VydF9jb2xfc3RhcnQiOmNhc2UiaW5zZXJ0X2NvbF9lbmQiOmNvbnN0IFZvPSJpbnNlcnRfY29sX2VuZCI9PT11dD8iZW5kIjoic3RhcnQiLGJsPSJlbmQiPT09Vm8/ci5jb3Vu''@;'; put 'put ''dFNvdXJjZUNvbHMoKTowLEQxPSJudW1iZXIiPT10eXBlb2YgSHQ/SHQ6Ymwse2RlbHRhOlRoLHN0YXJ0UGh5c2ljYWxJbmRleDpmMn09by5jcmVhdGVDb2woRDEsZG4se3NvdXJjZTpWbixtb2RlOlZvfSk7aWYoVGgpe2lmKEFycmF5LmlzQXJyYXkoV2UuY29sSGVhZGVycykpe2NvbnN0IEdh''@;'; put 'put ''PVtyLnRvVmlzdWFsQ29sdW1uKGYyKSwwXTtHYS5sZW5ndGgrPVRoLEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkoV2UuY29sSGVhZGVycyxHYSl9Q24uc2hpZnRDb2x1bW5zKHIudG9WaXN1YWxDb2x1bW4oZjIpLFRoKX1icmVhaztjYXNlInJlbW92ZV9yb3ciOmNvbnN0IGc5PUdhPT57''@;'; put 'put ''bGV0IF9nPTA7WG4oR2EsKFtfZCxMMV0pPT57Y29uc3QgYzM9QWwoX2QpP3IuY291bnRSb3dzKCktMTpNYXRoLm1heChfZC1fZywwKTtpZihOdW1iZXIuaXNJbnRlZ2VyKF9kKSYmKF9kPU1hdGgubWF4KF9kLV9nLDApKSwhby5yZW1vdmVSb3coX2QsTDEsVm4pKXJldHVybjtpZihDbi5pc1Nl''@;'; put 'put ''bGVjdGVkKCkpe2NvbnN0e3JvdzpPMX09ci5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkuaGlnaGxpZ2h0O08xPj1fZCYmTzE8PV9kK0wxLTEmJnUuY2xvc2VFZGl0b3IoITApfWNvbnN0IHY5PXIuY291bnRSb3dzKCksb3A9V2UuZml4ZWRSb3dzVG9wO29wPj1jMysxJiYoV2UuZml4ZWRSb3dz''@;'; put 'put ''VG9wLT1NYXRoLm1pbihMMSxvcC1jMykpO2NvbnN0IGZmPVdlLmZpeGVkUm93c0JvdHRvbTtpZihmZiYmYzM+PXY5LWZmJiYoV2UuZml4ZWRSb3dzQm90dG9tLT1NYXRoLm1pbihMMSxmZikpLDA9PT12OSlDbi5kZXNlbGVjdCgpO2Vsc2UgaWYoIkNvbnRleHRNZW51LnJlbW92ZVJvdyI9PT1W''@;'; put 'put ''bil7Y29uc3QgTzE9Q24uZ2V0U2VsZWN0ZWRSYW5nZSgpLGU1PU8xLnBvcCgpO08xLmNsZWFyKCkuc2V0KGU1LmZyb20pLmN1cnJlbnQoKS5zZXRUbyhlNS50byksQ24ucmVmcmVzaCgpfWVsc2UgQ24uc2hpZnRSb3dzKF9kLC1MMSk7X2crPUwxfSl9O0FycmF5LmlzQXJyYXkoSHQpP2c5KFNE''@;'; put 'put ''ZShIdCkpOmc5KFtbSHQsZG5dXSk7YnJlYWs7Y2FzZSJyZW1vdmVfY29sIjpjb25zdCBzeT1HYT0+e2xldCBfZz0wO1huKEdhLChbX2QsTDFdKT0+e2NvbnN0IGMzPUFsKF9kKT9yLmNvdW50Q29scygpLTE6TWF0aC5tYXgoX2QtX2csMCk7bGV0IG05PXIudG9QaHlzaWNhbENvbHVtbihjMyk7''@;'; put 'put ''aWYoTnVtYmVyLmlzSW50ZWdlcihfZCkmJihfZD1NYXRoLm1heChfZC1fZywwKSksIW8ucmVtb3ZlQ29sKF9kLEwxLFZuKSlyZXR1cm47aWYoQ24uaXNTZWxlY3RlZCgpKXtjb25zdHtjb2w6TzF9PXIuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLmhpZ2hsaWdodDtPMT49X2QmJk8xPD1fZCtM''@;'; put 'put ''MS0xJiZ1LmNsb3NlRWRpdG9yKCEwKX1pZigwPT09ci5jb3VudENvbHMoKSlDbi5kZXNlbGVjdCgpO2Vsc2UgaWYoIkNvbnRleHRNZW51LnJlbW92ZUNvbHVtbiI9PT1Wbil7Y29uc3QgTzE9Q24uZ2V0U2VsZWN0ZWRSYW5nZSgpLGU1PU8xLnBvcCgpO08xLmNsZWFyKCkuc2V0KGU1LmZyb20p''@;'; put 'put ''LmN1cnJlbnQoKS5zZXRUbyhlNS50byksQ24ucmVmcmVzaCgpfWVsc2UgQ24uc2hpZnRDb2x1bW5zKF9kLC1MMSk7Y29uc3QgZmY9V2UuZml4ZWRDb2x1bW5zU3RhcnQ7ZmY+PWMzKzEmJihXZS5maXhlZENvbHVtbnNTdGFydC09TWF0aC5taW4oTDEsZmYtYzMpKSxBcnJheS5pc0FycmF5KFdl''@;'; put 'put ''LmNvbEhlYWRlcnMpJiYodHlwZW9mIG05PiJ1IiYmKG05PS0xKSxXZS5jb2xIZWFkZXJzLnNwbGljZShtOSxMMSkpLF9nKz1MMX0pfTtBcnJheS5pc0FycmF5KEh0KT9zeShTRGUoSHQpKTpzeShbW0h0LGRuXV0pO2JyZWFrO2RlZmF1bHQ6SnIoYFRoZXJlIGlzIG5vIHN1Y2ggYWN0aW9uICIk''@;'; put 'put ''e3V0fSJgKX1Jcnx8bC5hZGp1c3RSb3dzQW5kQ29scygpLHIudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSxyLnZpZXcucmVuZGVyKCl9fSxhZGp1c3RSb3dzQW5kQ29scygpe2NvbnN0IHV0PVdlLm1pblJvd3MsSHQ9V2UubWluU3BhcmVSb3dzLGRuPVdlLm1pbkNvbHMsVm49V2UubWluU3Bh''@;'; put 'put ''cmVDb2xzO2lmKHV0KXtjb25zdCBJcj1yLmNvdW50Um93cygpO0lyPHV0JiZvLmNyZWF0ZVJvdyhJcix1dC1Jcix7c291cmNlOiJhdXRvIn0pfWlmKEh0KXtjb25zdCBJcj1yLmNvdW50RW1wdHlSb3dzKCEwKTtpZihJcjxIdCl7Y29uc3QganI9TWF0aC5taW4oSHQtSXIsV2UubWF4Um93cy1y''@;'; put 'put ''LmNvdW50U291cmNlUm93cygpKTtvLmNyZWF0ZVJvdyhyLmNvdW50Um93cygpLGpyLHtzb3VyY2U6ImF1dG8ifSl9fXtsZXQgSXI9MDsoZG58fFZuKSYmKElyPXIuY291bnRFbXB0eUNvbHMoITApKTtsZXQgbmk9ci5jb3VudENvbHMoKTtpZihkbiYmIVdlLmNvbHVtbnMmJm5pPGRuKXtjb25z''@;'; put 'put ''dCBqcj1kbi1uaTtJcis9anIsby5jcmVhdGVDb2wobmksanIse3NvdXJjZToiYXV0byJ9KX1pZihWbiYmIVdlLmNvbHVtbnMmJiJhcnJheSI9PT1yLmRhdGFUeXBlJiZJcjxWbil7bmk9ci5jb3VudENvbHMoKTtjb25zdCBGaT1NYXRoLm1pbihWbi1JcixXZS5tYXhDb2xzLW5pKTtvLmNyZWF0''@;'; put 'put ''ZUNvbChuaSxGaSx7c291cmNlOiJhdXRvIn0pfX19LHBvcHVsYXRlRnJvbUFycmF5KHV0LEh0LGRuLFZuLElyKXtsZXQgbmksanIsRmksZ287Y29uc3QgWW89W10sU289e30sUmE9W10sVm89dXQucm93LGJsPXV0LmNvbDtpZihqcj1IdC5sZW5ndGgsMD09PWpyKXJldHVybiExO2xldCBEMT0w''@;'; put 'put ''LFRoPTA7c3dpdGNoKENhKGRuKSYmKEQxPWRuLmNvbC1ibCsxLFRoPWRuLnJvdy1WbysxKSxJcil7Y2FzZSJzaGlmdF9kb3duIjpjb25zdCBmMj1uTChIdCksZzk9ZjIubGVuZ3RoLHN5PU1hdGgubWF4KGc5LEQxKSxHYT1yLmdldERhdGEoKS5zbGljZShWbyksX2c9bkwoR2EpLnNsaWNlKGJs''@;'; put 'put ''LGJsK3N5KTtmb3IoRmk9MDtGaTxzeTtGaSs9MSlpZihGaTxnOSl7Zm9yKG5pPTAsanI9ZjJbRmldLmxlbmd0aDtuaTxUaC1qcjtuaSs9MSlmMltGaV0ucHVzaChmMltGaV1bbmklanJdKTtSYS5wdXNoKGYyW0ZpXS5jb25jYXQoRmk8X2cubGVuZ3RoP19nW0ZpXTpuZXcgQXJyYXkoR2EubGVu''@;'; put 'put ''Z3RoKS5maWxsKG51bGwpKSl9ZWxzZSBSYS5wdXNoKGYyW0ZpJWc5XS5jb25jYXQoX2dbRmldKSk7ci5wb3B1bGF0ZUZyb21BcnJheShWbyxibCxuTChSYSkpO2JyZWFrO2Nhc2Uic2hpZnRfcmlnaHQiOmNvbnN0IF9kPUh0Lmxlbmd0aCxMMT1NYXRoLm1heChfZCxUaCksYzM9ci5nZXREYXRh''@;'; put 'put ''KCkuc2xpY2UoVm8pLm1hcCh0OD0+dDguc2xpY2UoYmwpKTtmb3Iobmk9MDtuaTxMMTtuaSs9MSlpZihuaTxfZCl7Zm9yKEZpPTAsZ289SHRbbmldLmxlbmd0aDtGaTxEMS1nbztGaSs9MSlIdFtuaV0ucHVzaChIdFtuaV1bRmklZ29dKTtpZihuaTxjMy5sZW5ndGgpZm9yKGxldCB0OD0wO3Q4''@;'; put 'put ''PGMzW25pXS5sZW5ndGg7dDgrPTEpSHRbbmldLnB1c2goYzNbbmldW3Q4XSk7ZWxzZSBIdFtuaV0ucHVzaCguLi5uZXcgQXJyYXkoYzNbMF0ubGVuZ3RoKS5maWxsKG51bGwpKX1lbHNlIEh0LnB1c2goSHRbbmklanJdLnNsaWNlKDAsTDEpLmNvbmNhdChjM1tuaV0pKTtyLnBvcHVsYXRlRnJv''@;'; put 'put ''bUFycmF5KFZvLGJsLEh0KTticmVhaztkZWZhdWx0OlNvLnJvdz11dC5yb3csU28uY29sPXV0LmNvbDtsZXQgZmYsbTk9MCx2OT0wLG9wPSEwO2NvbnN0IE8xPSJBdXRvZmlsbC5maWxsIj09PVZufHwiYXV0b2ZpbGwuZmlsbCI9PT1WbixlNT1mdW5jdGlvbihDQSxseT1udWxsKXtjb25zdCBf''@;'; put 'put ''OT1IdFtDQSVIdC5sZW5ndGhdO3JldHVybiBudWxsIT09bHk/XzlbbHklXzkubGVuZ3RoXTpfOX0sdFg9SHQubGVuZ3RoLExQPWRuP2RuLnJvdy11dC5yb3crMTowO2Zvcihqcj1kbj9MUDpNYXRoLm1heCh0WCxMUCksbmk9MDtuaTxqciYmIShkbiYmU28ucm93PmRuLnJvdyYmTFA+dFh8fCFX''@;'; put 'put ''ZS5hbGxvd0luc2VydFJvdyYmU28ucm93PnIuY291bnRSb3dzKCktMXx8U28ucm93Pj1XZS5tYXhSb3dzKTtuaSsrKXtjb25zdCBDQT1PMT9uaTpuaS1tOSxseT1lNShDQSkubGVuZ3RoLF85PWRuP2RuLmNvbC11dC5jb2wrMTowO2lmKGdvPWRuP185Ok1hdGgubWF4KGx5LF85KSxTby5jb2w9''@;'; put 'put ''dXQuY29sLGZmPXIuZ2V0Q2VsbE1ldGEoU28ucm93LFNvLmNvbCksIkNvcHlQYXN0ZS5wYXN0ZSIhPT1WbiYmIkF1dG9maWxsLmZpbGwiIT09Vm4mJiJhdXRvZmlsbC5maWxsIiE9PVZufHwhZmYuc2tpcFJvd09uUGFzdGUpe2Zvcih2OT0wLEZpPTA7Rmk8Z28mJiEoZG4mJlNvLmNvbD5kbi5j''@;'; put 'put ''b2wmJl85Pmx5fHwhV2UuYWxsb3dJbnNlcnRDb2x1bW4mJlNvLmNvbD5yLmNvdW50Q29scygpLTF8fFNvLmNvbD49V2UubWF4Q29scyk7RmkrKyl7aWYoZmY9ci5nZXRDZWxsTWV0YShTby5yb3csU28uY29sKSwoIkNvcHlQYXN0ZS5wYXN0ZSI9PT1Wbnx8IkF1dG9maWxsLmZpbGwiPT09Vm58''@;'; put 'put ''fCJhdXRvZmlsbC5maWxsIj09PVZuKSYmZmYuc2tpcENvbHVtbk9uUGFzdGUpe3Y5Kz0xLFNvLmNvbCs9MSwiQ29weVBhc3RlLnBhc3RlIj09PVZuJiYoZ28rPTEpO2NvbnRpbnVlfWlmKGZmLnJlYWRPbmx5JiYiVW5kb1JlZG8udW5kbyIhPT1Wbil7U28uY29sKz0xO2NvbnRpbnVlfWNvbnN0''@;'; put 'put ''IE9QPSEhZmYudmFsdWVTZXR0ZXI7bGV0IHAyPWU1KENBLE8xP0ZpOkZpLXY5KSxEMD1yLmdldFNvdXJjZURhdGFBdENlbGwoU28ucm93LFNvLmNvbCk/P251bGw7aWYobnVsbCE9PXAyJiYib2JqZWN0Ij09dHlwZW9mIHAyKWlmKEFycmF5LmlzQXJyYXkocDIpJiZudWxsPT09RDAmJihEMD1b''@;'; put 'put ''XSksT1B8fCJvYmplY3QiPT10eXBlb2YgRDAmJm51bGwhPT1EMCl7aWYobnVsbCE9PUQwKXtjb25zdCBuWD1PTShBcnJheS5pc0FycmF5KEQwKT9EMDpEMFswXXx8RDApLHJYPU9NKEFycmF5LmlzQXJyYXkocDIpP3AyOnAyWzBdfHxwMik7T1B8fCJlZGl0Ij09PVZufHxnNyhuWCxyWCl8fEFy''@;'; put 'put ''cmF5LmlzQXJyYXkoblgpJiZBcnJheS5pc0FycmF5KHJYKT9wMj1BZChwMik6b3A9ITF9fWVsc2Ugb3A9ITEsZmYucGFyc2VQYXN0ZWRWYWx1ZSYmIkNvcHlQYXN0ZS5wYXN0ZSI9PT1WbiYmKG9wPSEwKSwiZWRpdCI9PT1WbiYmKG9wPSEwLHAyPUFkKHAyKSk7ZWxzZSFPUCYmbnVsbCE9PUQw''@;'; put 'put ''JiYib2JqZWN0Ij09dHlwZW9mIEQwJiYob3A9ITEpO29wJiZZby5wdXNoKFtTby5yb3csU28uY29sLHAyXSksb3A9ITAsU28uY29sKz0xfVNvLnJvdys9MX1lbHNlIG05Kz0xLFNvLnJvdys9MSwiQ29weVBhc3RlLnBhc3RlIj09PVZuJiYoanIrPTEpfXIuc2V0RGF0YUF0Q2VsbChZbyxudWxs''@;'; put 'put ''LG51bGwsVm58fCJwb3B1bGF0ZUZyb21BcnJheSIpfX19LHRoaXMuaW5pdD1mdW5jdGlvbigpe2NvbnN0IHV0PVdlLnRoZW1lLEh0PVdlLnRoZW1lTmFtZSxkbj1yWihyLnJvb3RDb250YWluZXIpO2lmKHIyKHIpJiYhZG4mJihDYSh1dCl8fCF1dCYmIUh0KSYmcmkodXQpLGEuc2V0RGF0YShX''@;'; put 'put ''ZS5kYXRhKSxyLnJ1bkhvb2tzKCJiZWZvcmVJbml0IiksKFE1KCl8fFBXKCkpJiZZcihyLnJvb3RFbGVtZW50LCJtb2JpbGUiKSx0aGlzLnVwZGF0ZVNldHRpbmdzKFosITApLHRoaXMudmlldz1uZXcgY2t0KHRoaXMpLHU9VVR0LmdldEluc3RhbmNlKHIsV2UsQ24pLEU9ZnVuY3Rpb24gZ0l0''@;'; put 'put ''KG4pe2NvbnN0e3NlbGVjdGlvbjplfT1uO2xldCB0PSExLHI9ITE7cmV0dXJue3Jlc3VtZSgpe3I9ITF9LHN1c3BlbmQoKXtyPSEwfSxza2lwTmV4dFNjcm9sbEN5Y2xlKCl7dD0hMH0sc2Nyb2xsVG8oaSl7aWYodHx8cilyZXR1cm4gdm9pZCh0PSExKTtsZXQgbztlLmlzRm9jdXNTZWxlY3Rp''@;'; put 'put ''b25DaGFuZ2VkKCk/bz1mdW5jdGlvbiB1SXQobil7cmV0dXJuIGU9PntuLnNjcm9sbFZpZXdwb3J0VG8oZS50b09iamVjdCgpLCgpPT57Y29uc3QgdD1uLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighdClyZXR1cm47Y29uc3R7cm93OnIsY29sOml9PXQuaGlnaGxpZ2h0O251bGwhPT1y''@;'; put 'put ''JiZudWxsIT09aSYmZlQobi5nZXRDZWxsKHIsaSwhMCkpfSl9fShuKTplLmlzU2VsZWN0ZWRCeUNvcm5lcigpP289KCk9Pnt9OmUuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk/bz1mdW5jdGlvbiBmSXQobil7cmV0dXJuIGU9Pntjb25zdCB0PVFZKG4pLmdldENvbXB1dGVkUm93VGFyZ2V0KGUp''@;'; put 'put ''O24uc2Nyb2xsVmlld3BvcnRUbyh7cm93OnR9LCgpPT57Y29uc3Qgcj0hIW4uZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzO2ZUKG4uZ2V0Q2VsbCh0LHI/LTE6MCwhMCkpfSl9fShuKTplLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpP289ZnVuY3Rpb24gbEl0KG4pe3JldHVybiBlPT57Y29u''@;'; put 'put ''c3QgdD1RWShuKS5nZXRDb21wdXRlZENvbHVtblRhcmdldChlKTtuLnNjcm9sbFZpZXdwb3J0VG8oe2NvbDp0fSwoKT0+e2NvbnN0IHI9ISFuLmdldFNldHRpbmdzKCkuY29sSGVhZGVycztmVChuLmdldENlbGwocj8tMTowLHQsITApKX0pfX0obik6MT09PWUuZ2V0U2VsZWN0ZWRSYW5nZSgp''@;'; put 'put ''LnNpemUoKSYmZS5pc011bHRpcGxlKCk/bz1mdW5jdGlvbiBkSXQobil7cmV0dXJuIGU9Pntjb25zdCB0PVFZKG4pLHI9e3Jvdzp0LmdldENvbXB1dGVkUm93VGFyZ2V0KGUpLGNvbDp0LmdldENvbXB1dGVkQ29sdW1uVGFyZ2V0KGUpfTtuLnNjcm9sbFZpZXdwb3J0VG8ociwoKT0+e2NvbnN0''@;'; put 'put ''e3JvdzppLGNvbDpvfT1yO2ZUKG4uZ2V0Q2VsbChpLG8sITApKX0pfX0obik6MSE9PWUuZ2V0U2VsZWN0ZWRSYW5nZSgpLnNpemUoKXx8ZS5pc011bHRpcGxlKCk/ZS5nZXRTZWxlY3RlZFJhbmdlKCkuc2l6ZSgpPjEmJihvPWZ1bmN0aW9uIGhJdChuKXtyZXR1cm4gZT0+e2NvbnN0IHQ9UVko''@;'; put 'put ''bikscj17cm93OnQuZ2V0Q29tcHV0ZWRSb3dUYXJnZXQoZSksY29sOnQuZ2V0Q29tcHV0ZWRDb2x1bW5UYXJnZXQoZSl9O24uc2Nyb2xsVmlld3BvcnRUbyhyLCgpPT57Y29uc3R7cm93OmksY29sOm99PXI7ZlQobi5nZXRDZWxsKGksbywhMCkpfSl9fShuKSk6bz1mdW5jdGlvbiBwSXQobil7''@;'; put 'put ''cmV0dXJuIGU9Pntjb25zdCB0PW4uc2VsZWN0aW9uLmdldFNlbGVjdGlvblNvdXJjZSgpLHtyb3c6cixjb2w6aX09ZSxvPSgpPT57ZlQobi5nZXRDZWxsKHIsaSwhMCkpfTtpZihyPDAmJmk+PTApbi5zY3JvbGxWaWV3cG9ydFRvKHtjb2w6aX0sbyk7ZWxzZSBpZihpPDAmJnI+PTApbi5zY3Jv''@;'; put 'put ''bGxWaWV3cG9ydFRvKHtyb3c6cn0sbyk7ZWxzZXtpZigibW91c2UiPT09dCYmKGk9PT1uLnZpZXcuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXx8cj09PW4udmlldy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpKSlyZXR1cm47bi5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6cixj''@;'; put 'put ''b2w6aX0sbyl9fX0obiksbz8uKGkpfX19KHIpLGcuaW5pdCgpLHIyKHRoaXMpKXsoZnVuY3Rpb24gcUR0KG4pe2lmKCFHcCl7R3A9bi5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLEdwLnNldEF0dHJpYnV0ZSgicm9sZSIsInN0YXR1cyIpLEdwLnNldEF0dHJpYnV0ZSgiYXJp''@;'; put 'put ''YS1saXZlIiwiYXNzZXJ0aXZlIiksR3Auc2V0QXR0cmlidXRlKCJhcmlhLWF0b21pYyIsInRydWUiKTtjb25zdCB0PUdwLnN0eWxlO3QucG9zaXRpb249ImFic29sdXRlIix0LndpZHRoPSIxcHgiLHQuaGVpZ2h0PSIxcHgiLHQubWFyZ2luPSItMXB4Iix0Lm92ZXJmbG93PSJoaWRkZW4iLHQu''@;'; put 'put ''Y2xpcFBhdGg9InJlY3QoMCAwIDAgMCkiLHQud2hpdGVTcGFjZT0ibm93cmFwIixuLmFwcGVuZENoaWxkKEdwKX1zWis9MX0pKHIucm9vdFBvcnRhbEVsZW1lbnQpLGZ1bmN0aW9uIHRMdChuKXtjb25zdCBlPW4ucm9vdFNsb3RCb3R0b21FbGVtZW50O2lmKCFlKXJldHVybjtjb25zdCB0PW4u''@;'; put 'put ''Z2V0U2V0dGluZ3MoKS5saWNlbnNlS2V5LHI9dHlwZW9mIHByb2Nlc3M8InUiJiZwcm9jZXNzLmVudj8uSE9UX1JFTEVBU0VfREFURT8iMzAvMDYvMjAyNiI6IiIsaT1JeGUoe2NsYXNzTmFtZTokSWUsa2V5OnQsZWxlbWVudDplLHJlbGVhc2VEYXRlOnJ9KTtpJiYoaS5jbGFzc0xpc3QuYWRk''@;'; put 'put ''KFpJZSksZS5hcHBlbmRDaGlsZChpKSxuLmdldEZvY3VzU2NvcGVNYW5hZ2VyKCkucmVnaXN0ZXJTY29wZShHSWUsaSx7c2hvcnRjdXRzQ29udGV4dE5hbWU6SkR0LHJ1bk9ubHlJZjooKT0+bnVsbCE9PXFJZShuKSxvbkFjdGl2YXRlOm89Pntjb25zdCBhPWZ1bmN0aW9uIGVMdChuKXtjb25z''@;'; put 'put ''dCBlPXFJZShuKTtyZXR1cm4gZT9BcnJheS5mcm9tKGUucXVlcnlTZWxlY3RvckFsbCgiYVtocmVmXSIpKTpbXX0obik7YS5sZW5ndGg+MCYmKCJ0YWJfZnJvbV9hYm92ZSI9PT1vP2EuYXQoMCk/LmZvY3VzKCk6InRhYl9mcm9tX2JlbG93Ij09PW8mJmEuYXQoLTEpPy5mb2N1cygpKX19KSl9''@;'; put 'put ''KHIpO2NvbnN0IFZuPXt0b3A6LTEsYm90dG9tOi0xfTt0aGlzLmFkZEhvb2soImFmdGVyUmVuZGVyIiwoKT0+e2lmKHIuaXNEZXN0cm95ZWQpcmV0dXJuO2NvbnN0e3ZpZXc6bml9PXI7aWYoIW5pKXJldHVybjtsZXQganI9bmkuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKT9u''@;'; put 'put ''aS5nZXRUb3RhbFRhYmxlV2lkdGgoKTpuaS5nZXRXb3Jrc3BhY2VXaWR0aCgpOzA9PT1qciYmci5yb290V3JhcHBlckVsZW1lbnQmJihqcj1yLnJvb3RXcmFwcGVyRWxlbWVudC5vZmZzZXRXaWR0aCksci5yb290U2xvdEJvdHRvbUVsZW1lbnQmJmpyIT09Vm4uYm90dG9tJiYoVm4uYm90dG9t''@;'; put 'put ''PWpyLHIucm9vdFNsb3RCb3R0b21FbGVtZW50LnN0eWxlLndpZHRoPWAke2pyfXB4YCksci5yb290U2xvdFRvcEVsZW1lbnQmJmpyIT09Vm4udG9wJiYoVm4udG9wPWpyLHIucm9vdFNsb3RUb3BFbGVtZW50LnN0eWxlLndpZHRoPWAke2pyfXB4YCl9KX1yLnJ1bkhvb2tzKCJpbml0IiksdGhp''@;'; put 'put ''cy5yZW5kZXIoKSxPJiZudWxsPT09ci5yb290RWxlbWVudC5vZmZzZXRQYXJlbnQmJm9BZShyLnJvb3RFbGVtZW50LCgpPT57ci52aWV3Ll93dC53dE92ZXJsYXlzLnVwZGF0ZUxhc3RTcHJlYWRlclNpemUoKSxyLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksci5yZW5kZXIoKX0pLCJvYmpl''@;'; put 'put ''Y3QiPT10eXBlb2YgTyYmKHIucnVuSG9va3MoImFmdGVyQ2hhbmdlIixPWzBdLE9bMV0pLE89ITEpLHIucnVuSG9va3MoImFmdGVySW5pdCIpfSx0aGlzLl9jcmVhdGVDZWxsQ29vcmRzPWZ1bmN0aW9uKHV0LEh0KXtyZXR1cm4gci52aWV3Ll93dC5jcmVhdGVDZWxsQ29vcmRzKHV0LEh0KX0s''@;'; put 'put ''dGhpcy5fY3JlYXRlQ2VsbFJhbmdlPWZ1bmN0aW9uKHV0LEh0LGRuKXtyZXR1cm4gci52aWV3Ll93dC5jcmVhdGVDZWxsUmFuZ2UodXQsSHQsZG4pfSx0aGlzLnZhbGlkYXRlQ2VsbD1mdW5jdGlvbih1dCxIdCxkbixWbil7bGV0IElyPXIuZ2V0Q2VsbFZhbGlkYXRvcihIdCk7ZnVuY3Rpb24g''@;'; put 'put ''bmkoanIsRmk9ITApe2lmKCFGaXx8ITA9PT1IdC5oaWRkZW4pcmV0dXJuIHZvaWQgZG4oanIpO2NvbnN0IGdvPUh0LnZpc3VhbENvbCxZbz1IdC52aXN1YWxSb3csU289ci5nZXRDZWxsKFlvLGdvLCEwKTtpZihTbyYmIlRIIiE9PVNvLm5vZGVOYW1lKXtjb25zdCBSYT1yLnJvd0luZGV4TWFw''@;'; put 'put ''cGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoWW8pLFZvPXIuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChnbyk7ci52aWV3Ll93dC5nZXRTZXR0aW5nKCJjZWxsUmVuZGVyZXIiLFJhLFZvLFNvKX1kbihqcil9aWYoVHhlKElyKSYmKElyPWZ1''@;'; put 'put ''bmN0aW9uKGpyKXtyZXR1cm4gZnVuY3Rpb24oRmksZ28pe2dvKGpyLnRlc3QoRmkpKX19KElyKSksX2EoSXIpKXtjb25zdCBqcj1fYShIdC5wcm9wKT9IdC52aXN1YWxDb2w6SHQucHJvcDt1dD1yLnJ1bkhvb2tzKCJiZWZvcmVWYWxpZGF0ZSIsdXQsSHQudmlzdWFsUm93LGpyLFZuKSxyLl9y''@;'; put 'put ''ZWdpc3Rlck1pY3JvdGFzaygoKT0+e0lyLmNhbGwoSHQsdXQsRmk9PntyJiYoRmk9ci5ydW5Ib29rcygiYWZ0ZXJWYWxpZGF0ZSIsRmksdXQsSHQudmlzdWFsUm93LGpyLFZuKSxIdC52YWxpZD1GaSxuaShGaSksci5ydW5Ib29rcygicG9zdEFmdGVyVmFsaWRhdGUiLEZpLHV0LEh0LnZpc3Vh''@;'; put 'put ''bFJvdyxqcixWbikpfSl9KX1lbHNlIHIuX3JlZ2lzdGVyTWljcm90YXNrKCgpPT57SHQudmFsaWQ9ITAsbmkoSHQudmFsaWQsITEpfSl9LHRoaXMuc2V0RGF0YUF0Q2VsbD1mdW5jdGlvbih1dCxIdCxkbixWbil7Y29uc3QgSXI9dGkodXQsSHQsZG4pLG5pPVtdO2xldCBGaSxnbyxZbyxqcj1W''@;'; put 'put ''bjtmb3IoRmk9MCxnbz1Jci5sZW5ndGg7Rmk8Z287RmkrKyl7Y29uc3RbUmEsVm8sYmxdPUlyW0ZpXTsib2JqZWN0IiE9dHlwZW9mIElyW0ZpXSYmSnIoIk1ldGhvZCBgc2V0RGF0YUF0Q2VsbGAgYWNjZXB0cyByb3cgbnVtYmVyIG9yIGNoYW5nZXMgYXJyYXkgb2YgYXJyYXlzIGFzIGl0cyBm''@;'; put 'put ''aXJzdCBwYXJhbWV0ZXIiKSwibnVtYmVyIiE9dHlwZW9mIElyW0ZpXVsxXSYmSnIoIk1ldGhvZCBgc2V0RGF0YUF0Q2VsbGAgYWNjZXB0cyByb3cgYW5kIGNvbHVtbiBudW1iZXIgYXMgaXRzIHBhcmFtZXRlcnMuIElmIHlvdSB3YW50IHRvIHVzZSBvYmplY3QgcHJvcGVydHkgbmFtZSwgdXNl''@;'; put 'put ''IG1ldGhvZCBgc2V0RGF0YUF0Um93UHJvcGAiKTtjb25zdCBEMT0ibnVtYmVyIj09dHlwZW9mIFZvP1ZvOjA7WW89RDE+PXRoaXMuY291bnRDb2xzKCk/RDE6by5jb2xUb1Byb3AoRDEpLG5pLnB1c2goW1JhLFlvLGEuZ2V0QXRDZWxsKHRoaXMudG9QaHlzaWNhbFJvdyhSYSksVm8pLGJsXSl9''@;'; put 'put ''IWpyJiYib2JqZWN0Ij09dHlwZW9mIHV0JiYoanI9SHQpO2NvbnN0IFNvPWZyKG5pLGpyKTtyLnJ1bkhvb2tzKCJhZnRlclNldERhdGFBdENlbGwiLFNvLGpyKSxBbihTbyxqciwoKT0+e0hyKFNvLGpyKX0pfSx0aGlzLnNldERhdGFBdFJvd1Byb3A9ZnVuY3Rpb24odXQsSHQsZG4sVm4pe2Nv''@;'; put 'put ''bnN0IElyPXRpKHV0LEh0LGRuKSxuaT1bXTtsZXQgRmksZ28sanI9Vm47Zm9yKEZpPTAsZ289SXIubGVuZ3RoO0ZpPGdvO0ZpKyspe2NvbnN0W1NvLFJhLFZvXT1JcltGaV07bmkucHVzaChbU28sUmEsYS5nZXRBdENlbGwodGhpcy50b1BoeXNpY2FsUm93KFNvKSxSYSksVm9dKX0hanImJiJv''@;'; put 'put ''YmplY3QiPT10eXBlb2YgdXQmJihqcj1IdCk7Y29uc3QgWW89ZnIobmksanIpO3IucnVuSG9va3MoImFmdGVyU2V0RGF0YUF0Um93UHJvcCIsWW8sanIpLEFuKFlvLGpyLCgpPT57SHIoWW8sanIpfSl9LHRoaXMubGlzdGVuPWZ1bmN0aW9uKCl7ciYmIXIuaXNMaXN0ZW5pbmcoKSYmKERkZS5m''@;'; put 'put ''b3JFYWNoKHV0PT57ciE9PXV0JiZ1dC51bmxpc3RlbigpfSksSWRlPXIuZ3VpZCxyLnJ1bkhvb2tzKCJhZnRlckxpc3RlbiIpKX0sdGhpcy51bmxpc3Rlbj1mdW5jdGlvbigpe3RoaXMuaXNMaXN0ZW5pbmcoKSYmKElkZT1udWxsLHIucnVuSG9va3MoImFmdGVyVW5saXN0ZW4iKSl9LHRoaXMu''@;'; put 'put ''aXNMaXN0ZW5pbmc9ZnVuY3Rpb24oKXtyZXR1cm4gSWRlPT09ci5ndWlkfSx0aGlzLmRlc3Ryb3lFZGl0b3I9ZnVuY3Rpb24odXQ9ITEsSHQ9ITApe3UuY2xvc2VFZGl0b3IodXQpLHIudmlldy5yZW5kZXIoKSxIdCYmQ24uaXNTZWxlY3RlZCgpJiZ1LnByZXBhcmVFZGl0b3IoKX0sdGhpcy5w''@;'; put 'put ''b3B1bGF0ZUZyb21BcnJheT1mdW5jdGlvbih1dCxIdCxkbixWbixJcixuaSxqcil7Im9iamVjdCI9PXR5cGVvZiBkbiYmIm9iamVjdCI9PXR5cGVvZiBkblswXXx8SnIoInBvcHVsYXRlRnJvbUFycmF5IHBhcmFtZXRlciBgaW5wdXRgIG11c3QgYmUgYW4gYXJyYXkgb2YgYXJyYXlzIik7Y29u''@;'; put 'put ''c3QgRmk9Im51bWJlciI9PXR5cGVvZiBWbj9yLl9jcmVhdGVDZWxsQ29vcmRzKFZuLElyKTp2b2lkIDA7cmV0dXJuIGwucG9wdWxhdGVGcm9tQXJyYXkoci5fY3JlYXRlQ2VsbENvb3Jkcyh1dCxIdCksZG4sRmksbmksanIpfSx0aGlzLnNwbGljZUNvbD1mdW5jdGlvbih1dCxIdCxkbiwuLi5W''@;'; put 'put ''bil7cmV0dXJuIG8uc3BsaWNlQ29sKHV0LEh0LGRuLC4uLlZuKX0sdGhpcy5zcGxpY2VSb3c9ZnVuY3Rpb24odXQsSHQsZG4sLi4uVm4pe3JldHVybiBvLnNwbGljZVJvdyh1dCxIdCxkbiwuLi5Wbil9LHRoaXMuZ2V0U2VsZWN0ZWQ9ZnVuY3Rpb24oKXtpZihDbi5pc1NlbGVjdGVkKCkpcmV0''@;'; put 'put ''dXJuIF9jKENuLmdldFNlbGVjdGVkUmFuZ2UoKS5yYW5nZXMsKHtmcm9tOnV0LHRvOkh0fSk9Plt1dC5yb3csdXQuY29sLEh0LnJvdyxIdC5jb2xdKX0sdGhpcy5nZXRTZWxlY3RlZExhc3Q9ZnVuY3Rpb24oKXtjb25zdCB1dD1yLmdldFNlbGVjdGVkKCk7bGV0IEh0O3JldHVybiB1dCYmdXQu''@;'; put 'put ''bGVuZ3RoPjAmJihIdD11dFt1dC5sZW5ndGgtMV0pLEh0fSx0aGlzLmdldFNlbGVjdGVkQWN0aXZlPWZ1bmN0aW9uKCl7Y29uc3QgdXQ9ci5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIXV0KXJldHVybjtjb25zdHtmcm9tOkh0LHRvOmRufT11dDtyZXR1cm5bSHQucm93LEh0LmNvbCxk''@;'; put 'put ''bi5yb3csZG4uY29sXX0sdGhpcy5nZXRTZWxlY3RlZFJhbmdlPWZ1bmN0aW9uKCl7aWYoQ24uaXNTZWxlY3RlZCgpKXJldHVybiBBcnJheS5mcm9tKENuLmdldFNlbGVjdGVkUmFuZ2UoKSl9LHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Q9ZnVuY3Rpb24oKXtjb25zdCB1dD1yLmdldFNlbGVj''@;'; put 'put ''dGVkUmFuZ2UoKTtsZXQgSHQ7cmV0dXJuIHV0JiZ1dC5sZW5ndGg+MCYmKEh0PXV0W3V0Lmxlbmd0aC0xXSksSHR9LHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZT1mdW5jdGlvbigpe3JldHVybiBDbi5nZXRBY3RpdmVTZWxlY3RlZFJhbmdlKCl9LHRoaXMuZ2V0QWN0aXZlU2VsZWN0aW9u''@;'; put 'put ''TGF5ZXJJbmRleD1mdW5jdGlvbigpe3JldHVybiBDbi5nZXRBY3RpdmVTZWxlY3Rpb25MYXllckluZGV4KCl9LHRoaXMuZW1wdHlTZWxlY3RlZENlbGxzPWZ1bmN0aW9uKHV0KXtpZighQ24uaXNTZWxlY3RlZCgpfHwwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCkp''@;'; put 'put ''cmV0dXJuO2NvbnN0IEh0PVtdO1huKENuLmdldFNlbGVjdGVkUmFuZ2UoKSxkbj0+e2lmKGRuLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuO2NvbnN0IFZuPWRuLmdldFRvcFN0YXJ0Q29ybmVyKCksSXI9ZG4uZ2V0Qm90dG9tRW5kQ29ybmVyKCksbmk9TWF0aC5tYXgoVm4ucm93LDApLGpyPU1h''@;'; put 'put ''dGgubWluKElyLnJvdyx0aGlzLmNvdW50Um93cygpLTEpLEZpPU1hdGgubWF4KFZuLmNvbCwwKSxnbz1NYXRoLm1pbihJci5jb2wsdGhpcy5jb3VudENvbHMoKS0xKTtuaT5qcnx8Rmk+Z298fFZhKG5pLGpyLFNvPT57VmEoRmksZ28sUmE9Pnt0aGlzLmdldENlbGxNZXRhKFNvLFJhKS5yZWFk''@;'; put 'put ''T25seXx8SHQucHVzaChbU28sUmEsbnVsbF0pfSl9KX0pLEh0Lmxlbmd0aD4wJiZ0aGlzLnNldERhdGFBdENlbGwoSHQsdXQpfSx0aGlzLmlzUmVuZGVyU3VzcGVuZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlcj4wfSx0aGlzLnN1c3BlbmRSZW5kZXI9''@;'; put 'put ''ZnVuY3Rpb24oKXt0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXIrPTF9LHRoaXMucmVzdW1lUmVuZGVyPWZ1bmN0aW9uKCl7Y29uc3QgdXQ9dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyLTE7dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyPU1hdGgubWF4KHV0LDApLCF0aGlzLmlzUmVu''@;'; put 'put ''ZGVyU3VzcGVuZGVkKCkmJnV0PT09dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyJiZyLnZpZXcucmVuZGVyKCl9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy52aWV3JiYodGhpcy5mb3JjZUZ1bGxSZW5kZXI9ITAsdGhpcy5pc1JlbmRlclN1c3BlbmRlZCgpfHxyLnZpZXcucmVuZGVy''@;'; put 'put ''KCkpfSx0aGlzLmJhdGNoUmVuZGVyPWZ1bmN0aW9uKHV0KXtyLnN1c3BlbmRSZW5kZXIoKTtjb25zdCBIdD11dCgpO3JldHVybiByLnJlc3VtZVJlbmRlcigpLEh0fSx0aGlzLmlzRXhlY3V0aW9uU3VzcGVuZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291''@;'; put 'put ''bnRlcj4wfSx0aGlzLnN1c3BlbmRFeGVjdXRpb249ZnVuY3Rpb24oKXt0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXIrPTEsdGhpcy5jb2x1bW5JbmRleE1hcHBlci5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMucm93SW5kZXhNYXBwZXIuc3VzcGVuZE9wZXJhdGlvbnMoKX0sdGhpcy5y''@;'; put 'put ''ZXN1bWVFeGVjdXRpb249ZnVuY3Rpb24odXQ9ITEpe2NvbnN0IEh0PXRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlci0xO3RoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcj1NYXRoLm1heChIdCwwKSwoIXRoaXMuaXNFeGVjdXRpb25TdXNwZW5kZWQoKSYmSHQ9PT10aGlzLmV4ZWN1''@;'; put 'put ''dGlvblN1c3BlbmRlZENvdW50ZXJ8fHV0KSYmKHRoaXMuY29sdW1uSW5kZXhNYXBwZXIucmVzdW1lT3BlcmF0aW9ucygpLHRoaXMucm93SW5kZXhNYXBwZXIucmVzdW1lT3BlcmF0aW9ucygpKX0sdGhpcy5iYXRjaEV4ZWN1dGlvbj1mdW5jdGlvbih1dCxIdD0hMSl7ci5zdXNwZW5kRXhlY3V0''@;'; put 'put ''aW9uKCk7Y29uc3QgZG49dXQoKTtyZXR1cm4gci5yZXN1bWVFeGVjdXRpb24oSHQpLGRufSx0aGlzLmJhdGNoPWZ1bmN0aW9uKHV0KXtyLnN1c3BlbmRSZW5kZXIoKSxyLnN1c3BlbmRFeGVjdXRpb24oKTtjb25zdCBIdD11dCgpO3JldHVybiByLnJlc3VtZUV4ZWN1dGlvbigpLHIucmVzdW1l''@;'; put 'put ''UmVuZGVyKCksSHR9LHRoaXMucmVmcmVzaERpbWVuc2lvbnM9ZnVuY3Rpb24oKXtpZighci52aWV3KXJldHVybjtjb25zdCB1dD1yLnZpZXcse3dpZHRoOkh0LGhlaWdodDpkbn09dXQuZ2V0TGFzdFNpemUoKSx7d2lkdGg6Vm4saGVpZ2h0OklyfT1yLnJvb3RFbGVtZW50LmdldEJvdW5kaW5n''@;'; put 'put ''Q2xpZW50UmVjdCgpLG5pPVZuIT09SHR8fElyIT09ZG47ITEhPT1yLnJ1bkhvb2tzKCJiZWZvcmVSZWZyZXNoRGltZW5zaW9ucyIse3dpZHRoOkh0LGhlaWdodDpkbn0se3dpZHRoOlZuLGhlaWdodDpJcn0sbmkpJiYoKG5pfHx1dC5fd3Qud3RPdmVybGF5cy5zY3JvbGxhYmxlRWxlbWVudD09''@;'; put 'put ''PXIucm9vdFdpbmRvdykmJih1dC5zZXRMYXN0U2l6ZShWbixJciksdXQuYWRqdXN0RWxlbWVudHNTaXplKCksci5yZW5kZXIoKSksci5ydW5Ib29rcygiYWZ0ZXJSZWZyZXNoRGltZW5zaW9ucyIse3dpZHRoOkh0LGhlaWdodDpkbn0se3dpZHRoOlZuLGhlaWdodDpJcn0sbmkpKX0sdGhpcy51''@;'; put 'put ''cGRhdGVEYXRhPWZ1bmN0aW9uKHV0LEh0KXtzSWUodXQsZG49PntvPWRufSxkbj0+e289ZG4sci5jb2x1bW5JbmRleE1hcHBlci5maXRUb0xlbmd0aCh0aGlzLmdldEluaXRpYWxDb2x1bW5Db3VudCgpKSxyLnJvd0luZGV4TWFwcGVyLmZpdFRvTGVuZ3RoKHRoaXMuY291bnRTb3VyY2VSb3dz''@;'; put 'put ''KCkpLGwuYWRqdXN0Um93c0FuZENvbHMoKSxDbi5tYXJrU291cmNlKCJ1cGRhdGVEYXRhIiksQ24ucmVmcmVzaCgpLENuLm1hcmtFbmRTb3VyY2UoKX0se2hvdEluc3RhbmNlOnIsZGF0YU1hcDpvLGRhdGFTb3VyY2U6YSxpbnRlcm5hbFNvdXJjZToidXBkYXRlRGF0YSIsc291cmNlOkh0LG1l''@;'; put 'put ''dGFNYW5hZ2VyOkhlLGZpcnN0UnVuOk99KX0sdGhpcy5sb2FkRGF0YT1mdW5jdGlvbih1dCxIdCl7c0llKHV0LGRuPT57bz1kbn0sKCk9PntIZS5jbGVhckNlbGxzQ2FjaGUoKSxyLmluaXRJbmRleE1hcHBlcnMoKSxsLmFkanVzdFJvd3NBbmRDb2xzKCksQ24ubWFya1NvdXJjZSgibG9hZERh''@;'; put 'put ''dGEiKSxDbi5yZWZyZXNoKCksQ24ubWFya0VuZFNvdXJjZSgpLE8mJihPPVtudWxsLCJsb2FkRGF0YSJdKX0se2hvdEluc3RhbmNlOnIsZGF0YU1hcDpvLGRhdGFTb3VyY2U6YSxpbnRlcm5hbFNvdXJjZToibG9hZERhdGEiLHNvdXJjZTpIdCxtZXRhTWFuYWdlcjpIZSxmaXJzdFJ1bjpPfSl9''@;'; put 'put ''LHRoaXMuZ2V0SW5pdGlhbENvbHVtbkNvdW50PWZ1bmN0aW9uKCl7Y29uc3QgdXQ9V2UuY29sdW1ucztsZXQgSHQ9MDtpZihBcnJheS5pc0FycmF5KHV0KSlIdD11dC5sZW5ndGg7ZWxzZSBpZihfYSh1dCkpaWYoImFycmF5Ij09PXIuZGF0YVR5cGUpe2NvbnN0IGRuPXIuY291bnRTb3VyY2VD''@;'; put 'put ''b2xzKCk7Zm9yKGxldCBWbj0wO1ZuPGRuO1ZuKz0xKXV0KFZuKSYmKEh0Kz0xKX1lbHNlKCJvYmplY3QiPT09ci5kYXRhVHlwZXx8ImZ1bmN0aW9uIj09PXIuZGF0YVR5cGUpJiYoSHQ9by5jb2xUb1Byb3BDYWNoZS5sZW5ndGgpO2Vsc2UgaWYoWm8oV2UuZGF0YVNjaGVtYSkpe2NvbnN0IGRu''@;'; put 'put ''PW8uZ2V0U2NoZW1hKCk7SHQ9QXJyYXkuaXNBcnJheShkbik/ZG4ubGVuZ3RoOk9XKGRuKX1lbHNlIEh0PXIuY291bnRTb3VyY2VDb2xzKCk7cmV0dXJuIEh0fSx0aGlzLmluaXRJbmRleE1hcHBlcnM9ZnVuY3Rpb24oKXt0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmluaXRUb0xlbmd0aCh0aGlz''@;'; put 'put ''LmdldEluaXRpYWxDb2x1bW5Db3VudCgpKSx0aGlzLnJvd0luZGV4TWFwcGVyLmluaXRUb0xlbmd0aCh0aGlzLmNvdW50U291cmNlUm93cygpKX0sdGhpcy5nZXREYXRhPWZ1bmN0aW9uKHV0LEh0LGRuLFZuKXtyZXR1cm4gWHUodXQpP28uZ2V0QWxsKCk6by5nZXRSYW5nZShyLl9jcmVhdGVD''@;'; put 'put ''ZWxsQ29vcmRzKHV0LEh0KSxyLl9jcmVhdGVDZWxsQ29vcmRzKGRuLFZuKSxpTy5ERVNUSU5BVElPTl9SRU5ERVJFUil9LHRoaXMuZ2V0Q29weWFibGVUZXh0PWZ1bmN0aW9uKHV0LEh0LGRuLFZuKXtyZXR1cm4gby5nZXRDb3B5YWJsZVRleHQoci5fY3JlYXRlQ2VsbENvb3Jkcyh1dCxIdCks''@;'; put 'put ''ci5fY3JlYXRlQ2VsbENvb3JkcyhkbixWbikpfSx0aGlzLmdldENvcHlhYmxlRGF0YT1mdW5jdGlvbih1dCxIdCl7cmV0dXJuIG8uZ2V0Q29weWFibGUodXQsby5jb2xUb1Byb3AoSHQpKX0sdGhpcy5nZXRDb3B5YWJsZVNvdXJjZURhdGE9ZnVuY3Rpb24odXQsSHQpe3JldHVybiBhLmdldENv''@;'; put 'put ''cHlhYmxlKHV0LG8uY29sVG9Qcm9wKEh0KSl9LHRoaXMuZ2V0U2NoZW1hPWZ1bmN0aW9uKCl7cmV0dXJuIG8uZ2V0U2NoZW1hKCl9LHRoaXMudXBkYXRlU2V0dGluZ3M9ZnVuY3Rpb24odXQsSHQ9ITEpe2NvbnN0IGRuPShPP3IubG9hZERhdGE6ci51cGRhdGVEYXRhKS5iaW5kKHRoaXMpO2xl''@;'; put 'put ''dCBWbixJcjtmb3IoVm4gaW4gWm8odXQucm93cykmJkpyKCdUaGUgInJvd3MiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gRG8geW91IG1lYW4gc3RhcnRSb3dzLCBtaW5Sb3dzIG9yIG1heFJvd3M/JyksWm8odXQuY29scykmJkpyKCdUaGUgImNvbHMiIHNldHRpbmcgaXMgbm8g''@;'; put 'put ''bG9uZ2VyIHN1cHBvcnRlZC4gRG8geW91IG1lYW4gc3RhcnRDb2xzLCBtaW5Db2xzIG9yIG1heENvbHM/JyksWm8odXQuZ2FudHRDaGFydCkmJkpyKCdTaW5jZSA4LjAuMCB0aGUgImdhbnR0Q2hhcnQiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4nKSxabyh1dC5yb3dIZWlnaHRz''@;'; put 'put ''KSYmWm8odXQubWluUm93SGVpZ2h0cykmJkhhKCJCb3RoIGByb3dIZWlnaHRzYCBhbmQgYG1pblJvd0hlaWdodHNgIGFyZSBkZWZpbmVkIGluIHlvdXIgY29uZmlndXJhdGlvbi4gQXMgb25lIGlzIHRoZSBhbGlhcyBvZiB0aGUgb3RoZXIsIG9ubHkgb25lIG9mIHRoZW0gY2FuIGJlIHVzZWQg''@;'; put 'put ''YXQgYSB0aW1lLiBgcm93SGVpZ2h0c2Agd2lsbCBiZSB1c2VkIGFzIHRoZSByb3cgaGVpZ2h0IGNvbmZpZ3VyYXRpb24uIiksdXQpaWYoImRhdGEiIT09Vm4mJiJsYW5ndWFnZSIhPT1WbilpZigiY2xhc3NOYW1lIj09PVZuKVRyKCJjbGFzc05hbWUiLHV0LmNsYXNzTmFtZSk7ZWxzZSBpZigi''@;'; put 'put ''dGFibGVDbGFzc05hbWUiPT09Vm4mJnIudGFibGUpVHIoInRhYmxlQ2xhc3NOYW1lIix1dC50YWJsZUNsYXNzTmFtZSksci52aWV3Ll93dC53dE92ZXJsYXlzLnN5bmNPdmVybGF5VGFibGVDbGFzc05hbWVzKCk7ZWxzZSBpZihHby5nZXRTaW5nbGV0b24oKS5pc1JlZ2lzdGVyZWQoVm4pfHxH''@;'; put 'put ''by5nZXRTaW5nbGV0b24oKS5pc0RlcHJlY2F0ZWQoVm4pKXtjb25zdCBWbz11dFtWbl07X2EoVm8pPyhHby5nZXRTaW5nbGV0b24oKS5hZGRBc0ZpeGVkKFZuLFZvLHIpLFdlW1ZuXT1Wbyk6QXJyYXkuaXNBcnJheShWbykmJihHby5nZXRTaW5nbGV0b24oKS5hZGQoVm4sVm8sciksV2VbVm5d''@;'; put 'put ''PVZvKX1lbHNlIUh0JiZSZCh1dCxWbikmJihhdFtWbl09dXRbVm5dKTtjb25zdCBuaT1yWihyLnJvb3RDb250YWluZXIpLGpyPVJkKHV0LCJ0aGVtZU5hbWUiKSxGaT1SZCh1dCwidGhlbWUiKTtpZihqciYmRmkmJkhhKCJCb3RoIGB0aGVtZWAgYW5kIGB0aGVtZU5hbWVgIGFyZSBkZWZpbmVk''@;'; put 'put ''IGluIHlvdXIgY29uZmlndXJhdGlvbi4gVGhlc2Ugb3B0aW9ucyBhcmUgYWxpYXNlcyBhbmQgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIFRoZSBgdGhlbWVOYW1lYCBvcHRpb24gd2lsbCBiZSBpZ25vcmVkLiIpLEh0KXtsZXQgVm87RmkmJiJzdHJpbmciPT10eXBlb2YgdXQudGhlbWU/Vm89''@;'; put 'put ''dXQudGhlbWU6anImJiJzdHJpbmciPT10eXBlb2YgdXQudGhlbWVOYW1lJiZ1dC50aGVtZU5hbWUmJiFGaT8oVm89dXQudGhlbWVOYW1lLFdlLnRoZW1lPXV0LnRoZW1lTmFtZSxXZS50aGVtZU5hbWU9dm9pZCAwKTpuaT9Wbz1uaTpyLnRoZW1lTWFuYWdlciYmKFZvPXIudGhlbWVNYW5hZ2Vy''@;'; put 'put ''LmdldENsYXNzTmFtZSgpKSxyLnVzZVRoZW1lKFZvPz9udWxsKX1lbHNle2NvbnN0IFZvPXIuZ2V0Q3VycmVudFRoZW1lTmFtZSgpO2lmKEZpJiYic3RyaW5nIj09dHlwZW9mIHV0LnRoZW1lJiZWbyE9PXV0LnRoZW1lKXIudGhlbWVNYW5hZ2VyPy51bm1vdW50KCksci50aGVtZU1hbmFnZXI9''@;'; put 'put ''bnVsbCxyLnVzZVRoZW1lKHV0LnRoZW1lKTtlbHNlIGlmKGpyJiYhRmkmJlZvIT09dXQudGhlbWVOYW1lKXIudGhlbWVNYW5hZ2VyPy51bm1vdW50KCksci50aGVtZU1hbmFnZXI9bnVsbCxXZS50aGVtZT11dC50aGVtZU5hbWUsV2UudGhlbWVOYW1lPXZvaWQgMCxyLnVzZVRoZW1lKHV0LnRo''@;'; put 'put ''ZW1lTmFtZSk7ZWxzZSBpZihyMihyKSYmIW5pJiZDYSh1dC50aGVtZSkpaWYobnVsbD09PXIudGhlbWVNYW5hZ2VyKXJpKHV0LnRoZW1lKSxyLnVzZVRoZW1lKHIudGhlbWVNYW5hZ2VyLmdldENsYXNzTmFtZSgpKTtlbHNle2xldCBibDtibD0iZnVuY3Rpb24iIT10eXBlb2YgdXQudGhlbWUu''@;'; put 'put ''Z2V0VGhlbWVDb25maWc/U08odXQudGhlbWUpOnV0LnRoZW1lLHIudGhlbWVNYW5hZ2VyLnVwZGF0ZShibCksci51c2VUaGVtZShyLnRoZW1lTWFuYWdlci5nZXRDbGFzc05hbWUoKSl9fSEwPT09ci5ydW5Ib29rcygiaGFzRXh0ZXJuYWxEYXRhU291cmNlIik/KHV0LmRhdGEmJkhhKCdUaGUg''@;'; put 'put ''ImRhdGEiIHNldHRpbmcgaXMgaWdub3JlZCB3aGVuICJoYXNFeHRlcm5hbERhdGFTb3VyY2UiIHJldHVybnMgYHRydWVgLicpLEh0fHxSZCh1dCwiZGF0YSIpfHxSZCh1dCwiZGF0YVByb3ZpZGVyIik/ZG4oW10sInVwZGF0ZVNldHRpbmdzIik6dm9pZCAwIT09dXQuY29sdW1ucyYmKG8uY3Jl''@;'; put 'put ''YXRlTWFwKCksci5pbml0SW5kZXhNYXBwZXJzKCkpKTp2b2lkIDA9PT11dC5kYXRhJiZ2b2lkIDA9PT1XZS5kYXRhP2RuKG51bGwsInVwZGF0ZVNldHRpbmdzIik6dm9pZCAwIT09dXQuZGF0YT9kbih1dC5kYXRhLCJ1cGRhdGVTZXR0aW5ncyIpOnZvaWQgMCE9PXV0LmNvbHVtbnMmJihvLmNy''@;'; put 'put ''ZWF0ZU1hcCgpLHIuaW5pdEluZGV4TWFwcGVycygpKSwhTyYmdXQubGFuZ3VhZ2UmJmZ1bmN0aW9uICRuKHV0KXtjb25zdCBIdD1fUmUodXQpO1V1ZShIdCk/KHIucnVuSG9va3MoImJlZm9yZUxhbmd1YWdlQ2hhbmdlIixIdCksYXQubGFuZ3VhZ2U9SHQsci5ydW5Ib29rcygiYWZ0ZXJMYW5n''@;'; put 'put ''dWFnZUNoYW5nZSIsSHQpKTp5UmUodXQpfSh1dC5sYW5ndWFnZSk7Y29uc3QgZ289ci5jb3VudENvbHMoKSxZbz1XZS5jb2x1bW5zO2lmKHZvaWQgMCE9PXV0LmNlbGx8fHZvaWQgMCE9PXV0LmNlbGxzfHx2b2lkIDAhPT11dC5jb2x1bW5zKXtjb25zdCBWbz1IZS5nZXRVc2VyRGVmaW5lZENl''@;'; put 'put ''bGxNZXRhcygpO0hlLmNsZWFyQ2FjaGUoKSxWby5mb3JFYWNoKCh7cGh5c2ljYWxSb3c6YmwscGh5c2ljYWxDb2x1bW46RDEsa2V5OlRoLHZhbHVlOmYyfSk9PntIZS5zZXRDZWxsTWV0YShibCxEMSxUaCxmMil9KX1pZihnbz4wKWZvcihWbj0wLElyPTA7Vm48Z287Vm4rKyl7aWYoWW8pe2Nv''@;'; put 'put ''bnN0IFZvPV9hKFlvKT9ZbyhWbik6WW9bSXJdO1ZvJiZIZS51cGRhdGVDb2x1bW5NZXRhKElyLFZvKX1Jcis9MX1pZihabyh1dC5jZWxsKSl7SGUuZGlzYWJsZVVzZXJEZWZpbmVkTWV0YVJlY29yZGluZygpO3RyeXt1dC5jZWxsLmZvckVhY2goVm89PntyLnNldENlbGxNZXRhT2JqZWN0KFZv''@;'; put 'put ''LnJvdyxWby5jb2wsVm8pfSl9ZmluYWxseXtIZS5lbmFibGVVc2VyRGVmaW5lZE1ldGFSZWNvcmRpbmcoKX19ci5ydW5Ib29rcygiYWZ0ZXJDZWxsTWV0YVJlc2V0IiksTyYmb0llKHIsImluaXQiKTtsZXQgU289ci5yb290RWxlbWVudC5zdHlsZS5oZWlnaHQ7IiIhPT1TbyYmKFNvPXBhcnNl''@;'; put 'put ''SW50KHIucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKSksSHQmJnIucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpJiYoci5yb290RWxlbWVudC5kYXRhc2V0LmluaXRpYWxzdHlsZT1yLnJvb3RFbGVtZW50LmdldEF0dHJpYnV0ZSgic3R5bGUiKT8/IiIpO2xldCBSYT11dC5o''@;'; put 'put ''ZWlnaHQ7aWYodHlwZW9mIHV0LmhlaWdodDwidSIpaWYoX2EoUmEpJiYoUmE9UmEoKSksUmE9ci5ydW5Ib29rcygiYmVmb3JlSGVpZ2h0Q2hhbmdlIixSYSksbnVsbD09PVJhKXtjb25zdCBWbz1yLnJvb3RFbGVtZW50LmRhdGFzZXQuaW5pdGlhbHN0eWxlO1ZvJiYoVm8uaW5kZXhPZigiaGVp''@;'; put 'put ''Z2h0Iik+LTF8fFZvLmluZGV4T2YoIm92ZXJmbG93Iik+LTEpP3Iucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdHlsZSIsVm8pOihyLnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodD0iIixyLnJvb3RFbGVtZW50LnN0eWxlLm92ZXJmbG93PSIiKX1lbHNlIHZvaWQgMCE9PVJhJiYoci5yb290''@;'; put 'put ''RWxlbWVudC5zdHlsZS5oZWlnaHQ9aXNOYU4oUmEpP2Ake1JhfWA6YCR7UmF9cHhgLHIucm9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9ImNsaXAiKTtpZih0eXBlb2YgdXQud2lkdGg8InUiKXtsZXQgVm89dXQud2lkdGg7X2EoVm8pJiYoVm89Vm8oKSksVm89ci5ydW5Ib29rcygiYmVmb3Jl''@;'; put 'put ''V2lkdGhDaGFuZ2UiLFZvKSxyLnJvb3RFbGVtZW50LnN0eWxlLndpZHRoPWlzTmFOKFZvKT9gJHtWb31gOmAke1ZvfXB4YH1pZih0eXBlb2YgdXQuaGVpZ2h0PCJ1Inx8dHlwZW9mIHV0LndpZHRoPCJ1Iil7Y29uc3QgYmw9ci5yb290RWxlbWVudC5zdHlsZS53aWR0aDtpZighci5yb290RWxl''@;'; put 'put ''bWVudC5zdHlsZS5oZWlnaHQpe2NvbnN0IEQxPXIucm9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3dYOygiIj09PUQxfHwiY2xpcCI9PT1EMSkmJihyLnJvb3RFbGVtZW50LnN0eWxlLm92ZXJmbG93WD1ibCYmImF1dG8iIT09Ymw/ImNsaXAiOiIiKX19SHR8fChyLnZpZXcmJihyLnZpZXcuX3d0''@;'; put 'put ''Lnd0Vmlld3BvcnQucmVzZXRIYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkKCksci52aWV3Ll93dC5leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpLHIudmlldy5pbnZhbGlkYXRlSW5kZXhTaXplc0NhY2hlKCkpLENuLnVwZGF0ZUhpZ2hsaWdodENsYXNzTmFtZXMoKSxyLnJ1bkhv''@;'; put 'put ''b2tzKCJhZnRlclVwZGF0ZVNldHRpbmdzIix1dCkpLGwuYWRqdXN0Um93c0FuZENvbHMoKSxyLnZpZXcmJiFPJiYoci5yZW5kZXIoKSxyLnZpZXcuX3d0Lnd0T3ZlcmxheXMuYWRqdXN0RWxlbWVudHNTaXplKCkpLCFIdCYmci52aWV3JiYoIiI9PT1Tb3x8IiI9PT1SYXx8dm9pZCAwPT09UmEp''@;'; put 'put ''JiZTbyE9PVJhJiZyLnZpZXcuX3d0Lnd0T3ZlcmxheXMudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50cygpLHIyKHIpJiZ3cz8uYXBwbHlDb25maWcoV2UubGF5b3V0KX0sdGhpcy5nZXRWYWx1ZT1mdW5jdGlvbigpe2NvbnN0IHV0PXIuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKFdl''@;'; put 'put ''LmdldFZhbHVlKXtpZihfYShXZS5nZXRWYWx1ZSkpcmV0dXJuIFdlLmdldFZhbHVlLmNhbGwocik7aWYodXQmJiJzdHJpbmciPT10eXBlb2YgV2UuZ2V0VmFsdWUpe2NvbnN0IEh0PXV0LmhpZ2hsaWdodC5yb3c/PzA7cmV0dXJuIHIuZ2V0RGF0YSgpW0h0XVtXZS5nZXRWYWx1ZV19fWVsc2Ug''@;'; put 'put ''aWYodXQpcmV0dXJuIHIuZ2V0RGF0YUF0Q2VsbCh1dC5oaWdobGlnaHQucm93LHV0LmhpZ2hsaWdodC5jb2wpO3JldHVybiBudWxsfSx0aGlzLmdldFNldHRpbmdzPWZ1bmN0aW9uKCl7cmV0dXJuIFdlfSx0aGlzLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RBbGwoKSx0aGlzLmVtcHR5''@;'; put 'put ''U2VsZWN0ZWRDZWxscygpLHRoaXMuZGVzZWxlY3RDZWxsKCl9LHRoaXMuYWx0ZXI9ZnVuY3Rpb24odXQsSHQsZG4sVm4sSXIpe2wuYWx0ZXIodXQsSHQsZG4sVm4sSXIpfSx0aGlzLmdldENlbGw9ZnVuY3Rpb24odXQsSHQsZG49ITEpe2xldCBWbj1IdCxJcj11dDtpZihIdD49MCl7aWYoci5j''@;'; put 'put ''b2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbihyLnRvUGh5c2ljYWxDb2x1bW4oSHQpKSlyZXR1cm4gbnVsbDtWbj1yLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoSHQpfWlmKHV0Pj0wKXtpZihyLnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKHIudG9QaHlz''@;'; put 'put ''aWNhbFJvdyh1dCkpKXJldHVybiBudWxsO0lyPXIucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh1dCl9cmV0dXJuIG51bGw9PT1Jcnx8bnVsbD09PVZufHx2b2lkIDA9PT1Jcnx8dm9pZCAwPT09Vm4/bnVsbDpyLnZpZXcuZ2V0Q2VsbEF0Q29vcmRzKHIuX2Ny''@;'; put 'put ''ZWF0ZUNlbGxDb29yZHMoSXIsVm4pLGRuKX0sdGhpcy5nZXRDb29yZHM9ZnVuY3Rpb24odXQpe2NvbnN0IEh0PXIudmlldy5fd3Qud3RUYWJsZS5nZXRDb29yZHModXQpO2lmKG51bGw9PT1IdClyZXR1cm4gbnVsbDtjb25zdHtyb3c6ZG4sY29sOlZufT1IdDtsZXQgSXI9ZG4sbmk9Vm47cmV0''@;'; put 'put ''dXJuIG51bGwhPT1kbiYmZG4+PTAmJihJcj1yLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZG4pKSxudWxsIT09Vm4mJlZuPj0wJiYobmk9ci5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KFZuKSksci5fY3JlYXRlQ2Vs''@;'; put 'put ''bENvb3JkcyhJcixuaSl9LHRoaXMuY29sVG9Qcm9wPWZ1bmN0aW9uKHV0KXtyZXR1cm4gby5jb2xUb1Byb3AodXQpfSx0aGlzLnByb3BUb0NvbD1mdW5jdGlvbih1dCl7cmV0dXJuIG8ucHJvcFRvQ29sKHV0KX0sdGhpcy50b1Zpc3VhbFJvdz11dD0+ci5yb3dJbmRleE1hcHBlci5nZXRWaXN1''@;'; put 'put ''YWxGcm9tUGh5c2ljYWxJbmRleCh1dCksdGhpcy50b1Zpc3VhbENvbHVtbj11dD0+ci5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh1dCksdGhpcy50b1BoeXNpY2FsUm93PXV0PT5yLnJvd0luZGV4TWFwcGVyLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4''@;'; put 'put ''KHV0KSx0aGlzLnRvUGh5c2ljYWxDb2x1bW49dXQ9PnIuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgodXQpLHRoaXMuZ2V0RGF0YUF0Q2VsbD1mdW5jdGlvbih1dCxIdCl7cmV0dXJuIG8uZ2V0KHV0LG8uY29sVG9Qcm9wKEh0KSl9LHRoaXMuZ2V0RGF0YUF0''@;'; put 'put ''Um93UHJvcD1mdW5jdGlvbih1dCxIdCl7cmV0dXJuIG8uZ2V0KHV0LEh0KX0sdGhpcy5nZXREYXRhQXRDb2w9ZnVuY3Rpb24odXQpe2NvbnN0IEh0PVtdLGRuPW8uZ2V0UmFuZ2Uoci5fY3JlYXRlQ2VsbENvb3JkcygwLHV0KSxyLl9jcmVhdGVDZWxsQ29vcmRzKFdlLmRhdGEubGVuZ3RoLTEs''@;'; put 'put ''dXQpLGlPLkRFU1RJTkFUSU9OX1JFTkRFUkVSKTtmb3IobGV0IFZuPTA7Vm48ZG4ubGVuZ3RoO1ZuKz0xKWZvcihsZXQgSXI9MDtJcjxkbltWbl0ubGVuZ3RoO0lyKz0xKUh0LnB1c2goZG5bVm5dW0lyXSk7cmV0dXJuIEh0fSx0aGlzLmdldERhdGFBdFByb3A9ZnVuY3Rpb24odXQpe2NvbnN0''@;'; put 'put ''IEh0PVtdLGRuPW8uZ2V0UmFuZ2Uoci5fY3JlYXRlQ2VsbENvb3JkcygwLG8ucHJvcFRvQ29sKHV0KSksci5fY3JlYXRlQ2VsbENvb3JkcyhXZS5kYXRhLmxlbmd0aC0xLG8ucHJvcFRvQ29sKHV0KSksaU8uREVTVElOQVRJT05fUkVOREVSRVIpO2ZvcihsZXQgVm49MDtWbjxkbi5sZW5ndGg7''@;'; put 'put ''Vm4rPTEpZm9yKGxldCBJcj0wO0lyPGRuW1ZuXS5sZW5ndGg7SXIrPTEpSHQucHVzaChkbltWbl1bSXJdKTtyZXR1cm4gSHR9LHRoaXMuZ2V0U291cmNlRGF0YT1mdW5jdGlvbih1dCxIdCxkbixWbil7bGV0IElyO3JldHVybiBJcj12b2lkIDA9PT11dD9hLmdldERhdGEoKTphLmdldEJ5UmFu''@;'; put 'put ''Z2Uoci5fY3JlYXRlQ2VsbENvb3Jkcyh1dCxIdD8/bnVsbCksci5fY3JlYXRlQ2VsbENvb3Jkcyhkbj8/bnVsbCxWbj8/bnVsbCkpLElyfSx0aGlzLmdldFNvdXJjZURhdGFBcnJheT1mdW5jdGlvbih1dCxIdCxkbixWbil7bGV0IElyO3JldHVybiBJcj12b2lkIDA9PT11dD9hLmdldERhdGEo''@;'; put 'put ''ITApOmEuZ2V0QnlSYW5nZShyLl9jcmVhdGVDZWxsQ29vcmRzKHV0LEh0Pz9udWxsKSxyLl9jcmVhdGVDZWxsQ29vcmRzKGRuPz9udWxsLFZuPz9udWxsKSwhMCksSXJ9LHRoaXMuZ2V0U291cmNlRGF0YUF0Q29sPWZ1bmN0aW9uKHV0KXtyZXR1cm4gYS5nZXRBdENvbHVtbih1dCl9LHRoaXMu''@;'; put 'put ''c2V0U291cmNlRGF0YUF0Q2VsbD1mdW5jdGlvbih1dCxIdCxkbixWbil7Y29uc3QgSXI9dGkodXQsSHQsZG4pLG5pPXIuaGFzSG9vaygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIiksanI9W10sRmk9KFlvLFNvKT0+e2NvbnN0IFJhPXIudG9WaXN1YWxSb3coWW8pLFZvPXIudG9WaXN1YWxD''@;'; put 'put ''b2x1bW4oU28pO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKFZvKT9yLmdldENlbGxNZXRhKFJhLFZvKTp7Li4uT2JqZWN0LmdldFByb3RvdHlwZU9mKFdlKSwuLi5XZX19O25pJiZYbihJciwoW1lvLFNvLFJhXSk9Pntjb25zdCBWbz1hZGUoUmEsRmkoWW8sU28pKTtqci5wdXNoKFtZbyxTbyxh''@;'; put 'put ''LmdldEF0Q2VsbChZbyxTbyksVm9dKX0pLFhuKElyLChbWW8sU28sUmFdKT0+e2NvbnN0IFZvPUZpKFlvLFNvKSxibD1hZGUoUmEsVm8pOyhmdW5jdGlvbiBlSXQobixlLHQpe2NvbnN0IHI9ZS5zb3VyY2VEYXRhVmFsaWRhdG9yO2lmKCFfYShyKXx8ITA9PT1yKG4sZSx0KSlyZXR1cm4hMDtj''@;'; put 'put ''b25zdHtyb3c6byxjb2w6YSxzb3VyY2VEYXRhV2FybmluZ01lc3NhZ2U6bCxhbGxvd0ludmFsaWQ6dX09ZTtyZXR1cm4gbCYmYUllKGwsW3tyb3c6byxjb2w6YSx2YWx1ZTpufV0pLCEwPT09dX0pKGJsLFZvLFZuPz8ic2V0U291cmNlRGF0YUF0Q2VsbCIpJiZhLnNldEF0Q2VsbChZbyxTbyxi''@;'; put 'put ''bCl9KSxuaSYmdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIixqcixWbiksdGhpcy5yZW5kZXIoKTtjb25zdCBnbz1yLmdldEFjdGl2ZUVkaXRvcigpO2dvJiZabyhnby5yZWZyZXNoVmFsdWUpJiZnby5yZWZyZXNoVmFsdWUoKX0sdGhpcy5nZXRTb3VyY2VEYXRhQXRS''@;'; put 'put ''b3c9ZnVuY3Rpb24odXQpe3JldHVybiBhLmdldEF0Um93KHV0KX0sdGhpcy5nZXRTb3VyY2VEYXRhQXRDZWxsPWZ1bmN0aW9uKHV0LEh0KXtyZXR1cm4gYS5nZXRBdENlbGwodXQsSHQpfSx0aGlzLmdldERhdGFBdFJvdz1mdW5jdGlvbih1dCl7cmV0dXJuIG8uZ2V0UmFuZ2Uoci5fY3JlYXRl''@;'; put 'put ''Q2VsbENvb3Jkcyh1dCwwKSxyLl9jcmVhdGVDZWxsQ29vcmRzKHV0LHRoaXMuY291bnRDb2xzKCktMSksaU8uREVTVElOQVRJT05fUkVOREVSRVIpWzBdfHxbXX0sdGhpcy5nZXREYXRhVHlwZT1mdW5jdGlvbih1dCxIdCxkbixWbil7Y29uc3QgSXI9dm9pZCAwPT09dXQ/WzAsMCxyLmNvdW50''@;'; put 'put ''Um93cygpLHIuY291bnRDb2xzKCldOlt1dCxIdCxkbixWbl0sW25pLGpyXT1JcjtsZXRbLCxGaSxnb109SXIsWW89bnVsbCxTbz1udWxsO3ZvaWQgMD09PUZpJiYoRmk9bmkpLHZvaWQgMD09PWdvJiYoZ289anIpO2xldCBSYT0ibWl4ZWQiO3JldHVybiBWYShNYXRoLm1heChNYXRoLm1pbihu''@;'; put 'put ''aSxGaSksMCksTWF0aC5tYXgobmksRmkpLFZvPT57bGV0IGJsPSEwO3JldHVybiBWYShNYXRoLm1heChNYXRoLm1pbihqcixnbyksMCksTWF0aC5tYXgoanIsZ28pLEQxPT4oU289ci5nZXRDZWxsTWV0YShWbyxEMSkudHlwZT8/bnVsbCxZbz9ibD1Zbz09PVNvOllvPVNvLGJsKSksUmE9Ymw/''@;'; put 'put ''U28/PyJtaXhlZCI6Im1peGVkIixibH0pLFJhfSx0aGlzLnJlbW92ZUNlbGxNZXRhPWZ1bmN0aW9uKHV0LEh0LGRuKXtjb25zdFtWbixJcl09W3IudG9QaHlzaWNhbFJvdyh1dCksci50b1BoeXNpY2FsQ29sdW1uKEh0KV07bGV0IG5pPUhlLmdldENlbGxNZXRhS2V5VmFsdWUoVm4sSXIsZG4p''@;'; put 'put ''OyExIT09ci5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlQ2VsbE1ldGEiLHV0LEh0LGRuLG5pKSYmKEhlLnJlbW92ZUNlbGxNZXRhKFZuLElyLGRuKSxyLnJ1bkhvb2tzKCJhZnRlclJlbW92ZUNlbGxNZXRhIix1dCxIdCxkbixuaSkpLG5pPW51bGx9LHRoaXMuc3BsaWNlQ2VsbHNNZXRhPWZ1bmN0''@;'; put 'put ''aW9uKHV0LEh0PTAsLi4uZG4pe2RuLmxlbmd0aD4wJiYhQXJyYXkuaXNBcnJheShkblswXSkmJkpyKCJUaGUgM3JkIGFyZ3VtZW50IChjZWxsTWV0YVJvd3MpIGhhcyB0byBiZSBwYXNzZWQgYXMgYW4gYXJyYXkgb2YgY2VsbCBtZXRhIG9iamVjdHMgYXJyYXkuIiksSHQ+MCYmSGUucmVtb3Zl''@;'; put 'put ''Um93KHIudG9QaHlzaWNhbFJvdyh1dCksSHQpLGRuLmxlbmd0aD4wJiZYbihkbi5yZXZlcnNlKCksVm49PntIZS5jcmVhdGVSb3coci50b1BoeXNpY2FsUm93KHV0KSksWG4oVm4sKElyLG5pKT0+e3RoaXMuc2V0Q2VsbE1ldGFPYmplY3QodXQsbmksSXIpfSl9KSxyLnJlbmRlcigpfSx0aGlz''@;'; put 'put ''LnNldENlbGxNZXRhT2JqZWN0PWZ1bmN0aW9uKHV0LEh0LGRuKXsib2JqZWN0Ij09dHlwZW9mIGRuJiZhYyhkbiwoVm4sSXIpPT57dGhpcy5zZXRDZWxsTWV0YSh1dCxIdCxJcixWbil9KX0sdGhpcy5zZXRDZWxsTWV0YT1mdW5jdGlvbih1dCxIdCxkbixWbil7aWYoITE9PT1yLnJ1bkhvb2tz''@;'; put 'put ''KCJiZWZvcmVTZXRDZWxsTWV0YSIsdXQsSHQsZG4sVm4pKXJldHVybjtsZXQgbmk9dXQsanI9SHQ7dXQ8ci5jb3VudFJvd3MoKSYmKG5pPXIudG9QaHlzaWNhbFJvdyh1dCkpLEh0PHIuY291bnRDb2xzKCkmJihqcj1yLnRvUGh5c2ljYWxDb2x1bW4oSHQpKSxIZS5zZXRDZWxsTWV0YShuaSxq''@;'; put 'put ''cixkbixWbiksci5ydW5Ib29rcygiYWZ0ZXJTZXRDZWxsTWV0YSIsdXQsSHQsZG4sVm4pfSx0aGlzLmdldENlbGxzTWV0YT1mdW5jdGlvbigpe3JldHVybiBIZS5nZXRDZWxsc01ldGEoKX0sdGhpcy5nZXRDZWxsTWV0YT1mdW5jdGlvbih1dCxIdCxkbj17c2tpcE1ldGFFeHRlbnNpb246ITF9''@;'; put 'put ''KXtsZXQgVm49ci50b1BoeXNpY2FsUm93KHV0KSxJcj1yLnRvUGh5c2ljYWxDb2x1bW4oSHQpO3JldHVybiBudWxsPT09Vm4mJihWbj11dCksbnVsbD09PUlyJiYoSXI9SHQpLEhlLmdldENlbGxNZXRhKFZuLElyLHt2aXN1YWxSb3c6dXQsdmlzdWFsQ29sdW1uOkh0LC4uLmRufSl9LHRoaXMu''@;'; put 'put ''Z2V0Q29sdW1uTWV0YT1mdW5jdGlvbih1dCl7cmV0dXJuIEhlLmdldENvbHVtbk1ldGEoci50b1BoeXNpY2FsQ29sdW1uKHV0KSl9LHRoaXMuZ2V0Q2VsbE1ldGFBdFJvdz1mdW5jdGlvbih1dCl7cmV0dXJuIEhlLmdldENlbGxzTWV0YUF0Um93KHV0KX0sdGhpcy5pc0NvbHVtbk1vZGlmaWNh''@;'; put 'put ''dGlvbkFsbG93ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hKCJvYmplY3QiPT09ci5kYXRhVHlwZXx8V2UuY29sdW1ucyl9LHRoaXMuZ2V0Q2VsbFJlbmRlcmVyPWZ1bmN0aW9uKHV0LEh0KXtjb25zdCBkbj0ibnVtYmVyIj09dHlwZW9mIHV0P3IuZ2V0Q2VsbE1ldGEodXQsSHQpLnJlbmRlcmVyOnV0''@;'; put 'put ''LnJlbmRlcmVyO3JldHVybiJzdHJpbmciPT10eXBlb2YgZG4/JFcoZG4pOlh1KGRuKT8kVygidGV4dCIpOmRufSx0aGlzLmdldENlbGxFZGl0b3I9ZnVuY3Rpb24odXQsSHQpe2NvbnN0IGRuPSJudW1iZXIiPT10eXBlb2YgdXQ/ci5nZXRDZWxsTWV0YSh1dCxIdCkuZWRpdG9yOnV0LmVkaXRv''@;'; put 'put ''cjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGRuP1pXKGRuKTpYdShkbik/WlcoInRleHQiKTpkbn0sdGhpcy5nZXRDZWxsVmFsaWRhdG9yPWZ1bmN0aW9uKHV0LEh0KXtjb25zdCBkbj0ibnVtYmVyIj09dHlwZW9mIHV0P3IuZ2V0Q2VsbE1ldGEodXQsSHQpLnZhbGlkYXRvcjp1dC52YWxpZGF0''@;'; put 'put ''b3I7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBkbj9zbGUoZG4pOmRufSx0aGlzLnZhbGlkYXRlQ2VsbHM9ZnVuY3Rpb24odXQpe3RoaXMuX3ZhbGlkYXRlQ2VsbHModXQpfSx0aGlzLnZhbGlkYXRlUm93cz1mdW5jdGlvbih1dCxIdCl7QXJyYXkuaXNBcnJheSh1dCl8fEpyKCJ2YWxpZGF0ZVJv''@;'; put 'put ''d3MgcGFyYW1ldGVyIGByb3dzYCBtdXN0IGJlIGFuIGFycmF5IiksdGhpcy5fdmFsaWRhdGVDZWxscyhIdCx1dCl9LHRoaXMudmFsaWRhdGVDb2x1bW5zPWZ1bmN0aW9uKHV0LEh0KXtBcnJheS5pc0FycmF5KHV0KXx8SnIoInZhbGlkYXRlQ29sdW1ucyBwYXJhbWV0ZXIgYGNvbHVtbnNgIG11''@;'; put 'put ''c3QgYmUgYW4gYXJyYXkiKSx0aGlzLl92YWxpZGF0ZUNlbGxzKEh0LHZvaWQgMCx1dCl9LHRoaXMuX3ZhbGlkYXRlQ2VsbHM9ZnVuY3Rpb24odXQsSHQsZG4pe2NvbnN0IFZuPWZuKCk7dXQmJihWbi5vblF1ZXVlRW1wdHk9dXQpO2xldCBJcj1yLmNvdW50Um93cygpLTE7Zm9yKDtJcj49MDsp''@;'; put 'put ''e2lmKHZvaWQgMCE9PUh0JiYtMT09PUh0LmluZGV4T2YoSXIpKXtJci09MTtjb250aW51ZX1sZXQgbmk9ci5jb3VudENvbHMoKS0xO2Zvcig7bmk+PTA7KXZvaWQgMD09PWRufHwtMSE9PWRuLmluZGV4T2YobmkpPyhWbi5hZGRWYWxpZGF0b3JUb1F1ZXVlKCksci52YWxpZGF0ZUNlbGwoci5n''@;'; put 'put ''ZXREYXRhQXRDZWxsKElyLG5pKSxyLmdldENlbGxNZXRhKElyLG5pKSxqcj0+eyJib29sZWFuIiE9dHlwZW9mIGpyJiZKcigiVmFsaWRhdGlvbiBlcnJvcjogcmVzdWx0IGlzIG5vdCBib29sZWFuIiksITE9PT1qciYmKFZuLnZhbGlkPSExKSxWbi5yZW1vdmVWYWxpZGF0b3JGb3JtUXVldWUo''@;'; put 'put ''KX0sInZhbGlkYXRlQ2VsbHMiKSxuaS09MSk6bmktPTE7SXItPTF9Vm4uY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfSx0aGlzLmdldFJvd0hlYWRlcj1mdW5jdGlvbih1dCl7bGV0IEh0PVdlLnJvd0hlYWRlcnMsZG49dXQ7aWYodm9pZCAwIT09ZG4mJihkbj1yLnJ1bkhvb2tzKCJtb2RpZnlSb3dI''@;'; put 'put ''ZWFkZXIiLGRuKSksdm9pZCAwPT09ZG4pe2NvbnN0IFZuPVtdO1ZhKHIuY291bnRSb3dzKCktMSxJcj0+e1ZuLnB1c2goci5nZXRSb3dIZWFkZXIoSXIpKX0pLEh0PVZufWVsc2UgQXJyYXkuaXNBcnJheShIdCkmJnZvaWQgMCE9PUh0W2RuXT9IdD1IdFtkbl06X2EoSHQpP0h0PUh0KGRuKTpI''@;'; put 'put ''dCYmInN0cmluZyIhPXR5cGVvZiBIdCYmIm51bWJlciIhPXR5cGVvZiBIdCYmKEh0PWRuKzEpO3JldHVybiBIdH0sdGhpcy5oYXNSb3dIZWFkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuISFXZS5yb3dIZWFkZXJzfSx0aGlzLmhhc0NvbEhlYWRlcnM9ZnVuY3Rpb24oKXtpZihudWxsIT1XZS5jb2xI''@;'; put 'put ''ZWFkZXJzKXJldHVybiEhV2UuY29sSGVhZGVycztmb3IobGV0IHV0PTAsSHQ9ci5jb3VudENvbHMoKTt1dDxIdDt1dCsrKWlmKHIuZ2V0Q29sSGVhZGVyKHV0KSlyZXR1cm4hMDtyZXR1cm4hMX0sdGhpcy5nZXRDb2xIZWFkZXI9ZnVuY3Rpb24odXQsSHQ9LTEpe2NvbnN0IGRuPXIucnVuSG9v''@;'; put 'put ''a3MoIm1vZGlmeUNvbEhlYWRlciIsdXQpO2lmKHZvaWQgMD09PWRuKXtjb25zdCBnbz1bXSxZbz1yLmNvdW50Q29scygpO2ZvcihsZXQgU289MDtTbzxZbztTbysrKWdvLnB1c2goci5nZXRDb2xIZWFkZXIoU28pKTtyZXR1cm4gZ299bGV0IFZuPVdlLmNvbEhlYWRlcnM7Y29uc3QgSXI9V2Uu''@;'; put 'put ''Y29sdW1ucyxqcj1yLnRvUGh5c2ljYWxDb2x1bW4oZG4pLEZpPWZ1bmN0aW9uKGdvKXtjb25zdCBZbz1bXSxTbz1yLmNvdW50Q29scygpO2xldCBSYT0wO2Zvcig7UmE8U287UmErKylfYShJcikmJklyKFJhKSYmWW8ucHVzaChSYSk7cmV0dXJuIFlvW2dvXX0oanIpO3JldHVybiExPT09V2Uu''@;'; put 'put ''Y29sSGVhZGVycz9Wbj1udWxsOklyJiZfYShJcikmJklyKEZpKSYmSXIoRmkpLnRpdGxlP1ZuPUlyKEZpKS50aXRsZTpJciYmIV9hKElyKSYmSXJbanJdJiZJcltqcl0udGl0bGU/Vm49SXJbanJdLnRpdGxlOkFycmF5LmlzQXJyYXkoV2UuY29sSGVhZGVycykmJnZvaWQgMCE9PVdlLmNvbEhl''@;'; put 'put ''YWRlcnNbanJdP1ZuPVdlLmNvbEhlYWRlcnNbanJdOl9hKFdlLmNvbEhlYWRlcnMpP1ZuPVdlLmNvbEhlYWRlcnMoanIpOldlLmNvbEhlYWRlcnMmJiJzdHJpbmciIT10eXBlb2YgV2UuY29sSGVhZGVycyYmIm51bWJlciIhPXR5cGVvZiBXZS5jb2xIZWFkZXJzJiYoVm49Q1koZG4pKSxWbj1y''@;'; put 'put ''LnJ1bkhvb2tzKCJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsVm4sdXQsSHQpLFZufSx0aGlzLl9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncz1mdW5jdGlvbih1dCl7bGV0IEh0O2lmKHV0Pj0wJiYoSHQ9ci5nZXRDZWxsTWV0YSgwLHV0KS53aWR0aCksKHZvaWQgMD09PUh0fHxIdD09PVdlLndp''@;'; put 'put ''ZHRoKSYmKEh0PVdlLmNvbFdpZHRocyksbnVsbCE9SHQpe3N3aXRjaCh0eXBlb2YgSHQpe2Nhc2Uib2JqZWN0IjpIdD1IdFt1dF07YnJlYWs7Y2FzZSJmdW5jdGlvbiI6SHQ9SHQodXQpfSJzdHJpbmciPT10eXBlb2YgSHQmJihIdD1OdW1iZXIucGFyc2VJbnQoSHQsMTApKX1yZXR1cm4gSHR9''@;'; put 'put ''LHRoaXMuZ2V0Q29sV2lkdGg9ZnVuY3Rpb24odXQsSHQpe2xldCBkbj1yLl9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncyh1dCk7cmV0dXJuIGRuPXIucnVuSG9va3MoIm1vZGlmeUNvbFdpZHRoIixkbix1dCxIdCksdm9pZCAwPT09ZG4mJihkbj01MCksZG59LHRoaXMuX2dldFJvd0hlaWdodEZy''@;'; put 'put ''b21TZXR0aW5ncz1mdW5jdGlvbih1dCl7Y29uc3QgSHQ9ci5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQodXQpO2xldCBkbj1XZS5yb3dIZWlnaHRzPz9XZS5taW5Sb3dIZWlnaHRzO2lmKG51bGwhPWRuKXtzd2l0Y2godHlwZW9mIGRuKXtjYXNlIm9iamVjdCI6ZG49ZG5bdXRd''@;'; put 'put ''O2JyZWFrO2Nhc2UiZnVuY3Rpb24iOmRuPWRuKHV0KX0ic3RyaW5nIj09dHlwZW9mIGRuJiYoZG49TnVtYmVyLnBhcnNlSW50KGRuLDEwKSl9cmV0dXJuIG51bGwhPWRuJiZudWxsIT09SHQmJmRuPEh0P0h0OmRufSx0aGlzLmdldFJvd0hlaWdodD1mdW5jdGlvbih1dCxIdCl7bGV0IGRuPXIu''@;'; put 'put ''X2dldFJvd0hlaWdodEZyb21TZXR0aW5ncyh1dCk7cmV0dXJuIGRuPXIucnVuSG9va3MoIm1vZGlmeVJvd0hlaWdodCIsZG4sdXQsSHQpLGRufSx0aGlzLmNvdW50U291cmNlUm93cz1mdW5jdGlvbigpe3JldHVybiBhLmNvdW50Um93cygpfSx0aGlzLmNvdW50U291cmNlQ29scz1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBhLmNvdW50Rmlyc3RSb3dLZXlzKCl9LHRoaXMuY291bnRSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIG8uZ2V0TGVuZ3RoKCl9LHRoaXMuY291bnRDb2xzPWZ1bmN0aW9uKCl7Y29uc3QgdXQ9V2UubWF4Q29scyxIdD1yLmNvbHVtbkluZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJ''@;'; put 'put ''bmRleGVzTGVuZ3RoKCk7cmV0dXJuIE1hdGgubWluKHV0LEh0KX0sdGhpcy5jb3VudFJlbmRlcmVkUm93cz1mdW5jdGlvbigpe2NvbnN0IHV0PXIudmlldztyZXR1cm4gdXQuX3d0LmRyYXduP3V0Ll93dC53dFRhYmxlLmdldFJlbmRlcmVkUm93c0NvdW50KCk6LTF9LHRoaXMuY291bnRWaXNp''@;'; put 'put ''YmxlUm93cz1mdW5jdGlvbigpe2NvbnN0IHV0PXIudmlldztyZXR1cm4gdXQuX3d0LmRyYXduP3V0Ll93dC53dFRhYmxlLmdldFZpc2libGVSb3dzQ291bnQoKTotMX0sdGhpcy5jb3VudFJlbmRlcmVkQ29scz1mdW5jdGlvbigpe2NvbnN0IHV0PXIudmlldztyZXR1cm4gdXQuX3d0LmRyYXdu''@;'; put 'put ''P3V0Ll93dC53dFRhYmxlLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk6LTF9LHRoaXMuY291bnRWaXNpYmxlQ29scz1mdW5jdGlvbigpe2NvbnN0IHV0PXIudmlldztyZXR1cm4gdXQuX3d0LmRyYXduP3V0Ll93dC53dFRhYmxlLmdldFZpc2libGVDb2x1bW5zQ291bnQoKTotMX0sdGhpcy5j''@;'; put 'put ''b3VudFJvd0hlYWRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gci52aWV3LmdldFJvd0hlYWRlcnNDb3VudCgpfSx0aGlzLmNvdW50Q29sSGVhZGVycz1mdW5jdGlvbigpe3JldHVybiByLnZpZXcuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCl9LHRoaXMuY291bnRFbXB0eVJvd3M9ZnVuY3Rpb24odXQ9''@;'; put 'put ''ITEpe2xldCBIdD0wO3JldHVybiB0bGUoci5jb3VudFJvd3MoKS0xLGRuPT57aWYoci5pc0VtcHR5Um93KGRuKSlIdCs9MTtlbHNlIGlmKCEwPT09dXQpcmV0dXJuITF9KSxIdH0sdGhpcy5jb3VudEVtcHR5Q29scz1mdW5jdGlvbih1dD0hMSl7bGV0IEh0PTA7cmV0dXJuIHRsZShyLmNvdW50''@;'; put 'put ''Q29scygpLTEsZG49PntpZihyLmlzRW1wdHlDb2woZG4pKUh0Kz0xO2Vsc2UgaWYoITA9PT11dClyZXR1cm4hMX0pLEh0fSx0aGlzLmlzRW1wdHlSb3c9ZnVuY3Rpb24odXQpe3JldHVybiBXZS5pc0VtcHR5Um93LmNhbGwocix1dCl9LHRoaXMuaXNFbXB0eUNvbD1mdW5jdGlvbih1dCl7cmV0''@;'; put 'put ''dXJuIFdlLmlzRW1wdHlDb2wuY2FsbChyLHV0KX0sdGhpcy5zZWxlY3RDZWxsPWZ1bmN0aW9uKHV0LEh0LGRuLFZuLElyPSEwLG5pPSEwKXtpZihYdSh1dCl8fFh1KEh0KSlyZXR1cm4hMTtjb25zdCBnbz1bW251bGw9PXV0fHxOdW1iZXIuaXNOYU4oTnVtYmVyKHV0KSk/MDpOdW1iZXIodXQp''@;'; put 'put ''LG51bGw9PUh0fHwibnVtYmVyIj09dHlwZW9mIEh0JiZOdW1iZXIuaXNOYU4oSHQpPzA6SHQsWHUoZG4pP3ZvaWQgMDpkbixYdShWbik/dm9pZCAwOlZuXV07cmV0dXJuIHIuc2VsZWN0Q2VsbHMoZ28sSXIsbmkpfSx0aGlzLnNlbGVjdENlbGxzPWZ1bmN0aW9uKHV0PVtbXV0sSHQ9ITAsZG49''@;'; put 'put ''ITApe2xldCBWbjshMT09PUh0JiZFLnN1c3BlbmQoKSwhMT09PWRuJiZnLnN1c3BlbmQoKTt0cnl7Vm49Q24uc2VsZWN0Q2VsbHModXQpfWZpbmFsbHl7RS5yZXN1bWUoKSxnLnJlc3VtZSgpfXJldHVybiBWbiYmZG4mJnIubGlzdGVuKCksVm59LHRoaXMuc2VsZWN0Q29sdW1ucz1mdW5jdGlv''@;'; put 'put ''bih1dCxIdD11dCxkbil7cmV0dXJuIENuLnNlbGVjdENvbHVtbnModXQsSHQsZG4pfSx0aGlzLnNlbGVjdFJvd3M9ZnVuY3Rpb24odXQsSHQ9dXQsZG4pe3JldHVybiBDbi5zZWxlY3RSb3dzKHV0LEh0LGRuKX0sdGhpcy5kZXNlbGVjdENlbGw9ZnVuY3Rpb24oKXtDbi5kZXNlbGVjdCgpfSx0''@;'; put 'put ''aGlzLnNlbGVjdEFsbD1mdW5jdGlvbih1dD0hMCxIdD11dCxkbil7RS5za2lwTmV4dFNjcm9sbEN5Y2xlKCksQ24uc2VsZWN0QWxsKHV0LEh0LGRuKX07Y29uc3QgZWk9KHV0LEh0KT0+dXQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEh0LDEsITApO3RoaXMuc2Nyb2xsVmlld3BvcnRUbz1m''@;'; put 'put ''dW5jdGlvbih1dCxIdCl7Im51bWJlciI9PXR5cGVvZiB1dCYmKHV0PXtyb3c6YXJndW1lbnRzWzBdLGNvbDphcmd1bWVudHNbMV0sdmVydGljYWxTbmFwOmFyZ3VtZW50c1syXT8iYm90dG9tIjoidG9wIixob3Jpem9udGFsU25hcDphcmd1bWVudHNbM10/ImVuZCI6InN0YXJ0Iixjb25zaWRl''@;'; put 'put ''ckhpZGRlbkluZGV4ZXM6YXJndW1lbnRzWzRdPz8hMH0pO2NvbnN0e3Jvdzpkbixjb2w6Vm4sY29uc2lkZXJIaWRkZW5JbmRleGVzOklyfT11dD8/e307bGV0IG5pPWRuLGpyPVZuO2lmKF9hKEh0KSYmdGhpcy5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGwiLEh0KSx2b2lkIDA9PT1Jcnx8SXIp''@;'; put 'put ''e2NvbnN0IFNvPSgodXQsSHQpPT57Y29uc3QgZG49dm9pZCAwIT09dXQmJk51bWJlci5pc0ludGVnZXIodXQpJiZ1dD49MCxWbj12b2lkIDAhPT1IdCYmTnVtYmVyLmlzSW50ZWdlcihIdCkmJkh0Pj0wLElyPWRuP2VpKHIucm93SW5kZXhNYXBwZXIsdXQpOnZvaWQgMCxuaT1Wbj9laShyLmNv''@;'; put 'put ''bHVtbkluZGV4TWFwcGVyLEh0KTp2b2lkIDA7cmV0dXJuIG51bGwhPT1JciYmbnVsbCE9PW5pJiZ7cmVuZGVyYWJsZVJvdzpkbj9yLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoSXIpPz92b2lkIDA6dXQscmVuZGVyYWJsZUNvbHVtbjpWbj9yLmNvbHVtbklu''@;'; put 'put ''ZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgobmkpPz92b2lkIDA6SHR9fSkoZG4sVm4pO2lmKCExPT09U28pcmV0dXJuITE7bmk9U28ucmVuZGVyYWJsZVJvdyxqcj1Tby5yZW5kZXJhYmxlQ29sdW1ufWNvbnN0IEZpPU51bWJlci5pc0ludGVnZXIobmkpLGdvPU51bWJl''@;'; put 'put ''ci5pc0ludGVnZXIoanIpO2xldCBZbz0hMTtyZXR1cm4gRmkmJm5pPj0wJiZnbyYmanI+PTA/WW89ci52aWV3LnNjcm9sbFZpZXdwb3J0KHIuX2NyZWF0ZUNlbGxDb29yZHMobmksanIpLHV0Lmhvcml6b250YWxTbmFwLHV0LnZlcnRpY2FsU25hcCk6RmkmJm5pPj0wJiYoZ28mJmpyPDB8fCFn''@;'; put 'put ''byk/WW89ci52aWV3LnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShuaSx1dC52ZXJ0aWNhbFNuYXApOmdvJiZqcj49MCYmKEZpJiZuaTwwfHwhRmkpJiYoWW89ci52aWV3LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGpyLHV0Lmhvcml6b250YWxTbmFwKSksX2EoSHQpJiYoWW8/dGhpcy52''@;'; put 'put ''aWV3LnJlbmRlcigpOih0aGlzLnJlbW92ZUhvb2soImFmdGVyU2Nyb2xsIixIdCksdGhpcy5fcmVnaXN0ZXJNaWNyb3Rhc2soKCk9Pkh0KCkpKSksWW99LHRoaXMuc2Nyb2xsVG9Gb2N1c2VkQ2VsbD1mdW5jdGlvbih1dCl7aWYoIXIuc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSlyZXR1cm4hMTtf''@;'; put 'put ''YSh1dCkmJnIuYWRkSG9va09uY2UoImFmdGVyU2Nyb2xsIix1dCk7Y29uc3R7aGlnaGxpZ2h0Okh0fT1yLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxkbj1yLnNjcm9sbFZpZXdwb3J0VG8oSHQudG9PYmplY3QoKSk7cmV0dXJuIGRuP3Iudmlldy5yZW5kZXIoKTpfYSh1dCkmJihyLnJlbW92''@;'; put 'put ''ZUhvb2soImFmdGVyU2Nyb2xsIix1dCksci5fcmVnaXN0ZXJNaWNyb3Rhc2soKCk9PnV0KCkpKSxkbn0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7ci5fY2xlYXJUaW1lb3V0cygpLHIuX2NsZWFyTWljcm90YXNrcygpLHIudmlldyYmci52aWV3LmRlc3Ryb3koKSxhJiZhLmRlc3Ryb3koKSxh''@;'; put 'put ''PW51bGwscjIodGhpcykmJihmdW5jdGlvbiBLRHQoKXswIT09c1omJigxPT09c1omJihHcC5yZW1vdmUoKSxHcD1udWxsKSxzWi09MSl9KCksdGhpcy5nZXRGb2N1c1Njb3BlTWFuYWdlcigpLmRlc3Ryb3koKSx3cz8uZGVzdHJveSgpLHIudGhlbWVNYW5hZ2VyPy5kZXN0cm95KCkpLHRoaXMu''@;'; put 'put ''Z2V0U2hvcnRjdXRNYW5hZ2VyKCkuZGVzdHJveSgpLEF0LmNsZWFyKCksSGUuY2xlYXJDYWNoZSgpLERkZS5kZWxldGUodGhpcy5ndWlkKSxpLmRlc3Ryb3koKSx1JiZ1LmRlc3Ryb3koKSxyLnJvb3RDb250YWluZXImJkM0KHIucm9vdENvbnRhaW5lciksci5yb290UG9ydGFsRWxlbWVudCYm''@;'; put 'put ''ci5yb290UG9ydGFsRWxlbWVudC5yZW1vdmUoKSxyLmJhdGNoRXhlY3V0aW9uKCgpPT57ci5yb3dJbmRleE1hcHBlci5kZXN0cm95KCksci5jb2x1bW5JbmRleE1hcHBlci5kZXN0cm95KCksQ3QuZ2V0SXRlbXMoKS5mb3JFYWNoKChbLHV0XSk9Pnt1dC5kZXN0cm95KCl9KSxDdC5jbGVhcigp''@;'; put 'put ''LHIucnVuSG9va3MoImFmdGVyRGVzdHJveSIpfSwhMCksR28uZ2V0U2luZ2xldG9uKCkuZGVzdHJveShyKSxhYyhyLCh1dCxIdCxkbik9PntfYSh1dCk/ZG5bSHRdPWZ1bmN0aW9uIEhvKHV0KXtyZXR1cm4oKT0+e0pyKGBUaGUgIiR7dXR9IiBtZXRob2QgY2Fubm90IGJlIGNhbGxlZCBiZWNh''@;'; put 'put ''dXNlIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGhhcyBiZWVuIGRlc3Ryb3llZGApfX0oSHQpOiJndWlkIiE9PUh0JiYoZG5bSHRdPW51bGwpfSksci5pc0Rlc3Ryb3llZD0hMCxvJiZvLmRlc3Ryb3koKSxvPW51bGwsbD1udWxsLENuPW51bGwsdT1udWxsLHI9bnVsbH0sdGhpcy5nZXRB''@;'; put 'put ''Y3RpdmVFZGl0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gdT8uZ2V0QWN0aXZlRWRpdG9yKCl9LHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gci52aWV3LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93KCl9LHRoaXMuZ2V0TGFzdFJlbmRlcmVkVmlzaWJs''@;'; put 'put ''ZVJvdz1mdW5jdGlvbigpe3JldHVybiByLnZpZXcuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZVJvdygpfSx0aGlzLmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIHIudmlldy5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldExhc3RS''@;'; put 'put ''ZW5kZXJlZFZpc2libGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gci52aWV3LmdldExhc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKX0sdGhpcy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiByLnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKX0sdGhpcy5n''@;'; put 'put ''ZXRMYXN0RnVsbHlWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIHIudmlldy5nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCl9LHRoaXMuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gci52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCl9LHRoaXMu''@;'; put 'put ''Z2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiByLnZpZXcuZ2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiByLnZpZXcuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93''@;'; put 'put ''KCl9LHRoaXMuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gci52aWV3LmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl9LHRoaXMuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIHIudmlldy5nZXRGaXJzdFBhcnRp''@;'; put 'put ''YWxseVZpc2libGVDb2x1bW4oKX0sdGhpcy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiByLnZpZXcuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKX0sdGhpcy5nZXRQbHVnaW49ZnVuY3Rpb24odXQpe3JldHVybiBDdC5nZXRJdGVtKEswKHV0''@;'; put 'put ''KSl9LHRoaXMuZ2V0UGx1Z2luTmFtZT1mdW5jdGlvbih1dCl7cmV0dXJuIEN0LmdldElkKHV0KX0sdGhpcy5nZXRJbnN0YW5jZT1mdW5jdGlvbigpe3JldHVybiByfSx0aGlzLmFkZEhvb2s9ZnVuY3Rpb24odXQsSHQsZG4pe0dvLmdldFNpbmdsZXRvbigpLmFkZCh1dCxIdCxyLGRuKX0sdGhp''@;'; put 'put ''cy5oYXNIb29rPWZ1bmN0aW9uKHV0KXtyZXR1cm4gR28uZ2V0U2luZ2xldG9uKCkuaGFzKHV0LHIpfHxHby5nZXRTaW5nbGV0b24oKS5oYXModXQpfSx0aGlzLmFkZEhvb2tPbmNlPWZ1bmN0aW9uKHV0LEh0LGRuKXtHby5nZXRTaW5nbGV0b24oKS5vbmNlKHV0LEh0LHIsZG4pfSx0aGlzLnJl''@;'; put 'put ''bW92ZUhvb2s9ZnVuY3Rpb24odXQsSHQpe0dvLmdldFNpbmdsZXRvbigpLnJlbW92ZSh1dCxIdCxyKX0sdGhpcy5ydW5Ib29rcz1mdW5jdGlvbih1dCxIdCxkbixWbixJcixuaSxqcil7cmV0dXJuIEdvLmdldFNpbmdsZXRvbigpLnJ1bihyLHV0LEh0LGRuLFZuLElyLG5pLGpyKX0sdGhpcy5n''@;'; put 'put ''ZXRUcmFuc2xhdGVkUGhyYXNlPWZ1bmN0aW9uKHV0LEh0KXtyZXR1cm4gUlJlKFdlLmxhbmd1YWdlLHV0LEh0KX0sdGhpcy50b0hUTUw9KCk9PnFzZSh0aGlzKSx0aGlzLnRvVGFibGVFbGVtZW50PSgpPT57Y29uc3QgSHQ9ci5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0''@;'; put 'put ''dXJuIEh0Lmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIscXNlKHIpKSxIdC5maXJzdEVsZW1lbnRDaGlsZH0sdGhpcy50aW1lb3V0cz1bXSx0aGlzLnVzZVRoZW1lPXV0PT57Y29uc3QgSHQ9ISFPO3RoaXMuc3R5bGVzSGFuZGxlci51c2VUaGVtZSh1dD8/dm9pZCAwKTtjb25zdCBk''@;'; put 'put ''bj10aGlzLnN0eWxlc0hhbmRsZXIuZ2V0VGhlbWVOYW1lKCk7IUh0JiZkbiYmKHJaKHRoaXMucm9vdENvbnRhaW5lcikmJihrbyh0aGlzLnJvb3RDb250YWluZXIsL2h0LXRoZW1lLS4qL2cpLFlyKHRoaXMucm9vdENvbnRhaW5lcixkbikpLHIucmVuZGVyKCksci5zY3JvbGxWaWV3cG9ydFRv''@;'; put 'put ''KDAsMCkpLHRoaXMucnVuSG9va3MoImFmdGVyU2V0VGhlbWUiLGRuLEh0KX0sdGhpcy5nZXRDdXJyZW50VGhlbWVOYW1lPSgpPT5yLnN0eWxlc0hhbmRsZXIuZ2V0VGhlbWVOYW1lKCk/P251bGwsdGhpcy5nZXRUYWJsZUhlaWdodD0oKT0+ci5yb290RWxlbWVudC5vZmZzZXRIZWlnaHQsdGhp''@;'; put 'put ''cy5nZXRUYWJsZVdpZHRoPSgpPT5yLnJvb3RFbGVtZW50Lm9mZnNldFdpZHRoLHRoaXMuX3JlZ2lzdGVyVGltZW91dD1mdW5jdGlvbih1dCxIdD0wKXtsZXQgZG49dXQ7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGRuJiYoZG49c2V0VGltZW91dChkbixIdCkpLHRoaXMudGltZW91dHMucHVz''@;'; put 'put ''aChkbiksZG59LHRoaXMuX2NsZWFyVGltZW91dHM9ZnVuY3Rpb24oKXtYbih0aGlzLnRpbWVvdXRzLHV0PT57Y2xlYXJUaW1lb3V0KHV0KX0pfSx0aGlzLm1pY3JvdGFza3M9W10sdGhpcy5fcmVnaXN0ZXJNaWNyb3Rhc2s9ZnVuY3Rpb24odXQpe2NvbnN0IEh0PXtjYW5jZWxsZWQ6ITF9O3Ro''@;'; put 'put ''aXMubWljcm90YXNrcy5wdXNoKEh0KSx0aGlzLnJvb3RXaW5kb3cucXVldWVNaWNyb3Rhc2soKCk9PntIdC5jYW5jZWxsZWR8fHV0KCl9KX0sdGhpcy5fY2xlYXJNaWNyb3Rhc2tzPWZ1bmN0aW9uKCl7WG4odGhpcy5taWNyb3Rhc2tzLHV0PT57dXQuY2FuY2VsbGVkPSEwfSksdGhpcy5taWNy''@;'; put 'put ''b3Rhc2tzLmxlbmd0aD0wfSx0aGlzLl9nZXRFZGl0b3JNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHV9LHRoaXMuX2dldERhdGFTb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gYX0sdGhpcy5fZ2V0TWV0YU1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gSGV9O2NvbnN0IHhpPSgoe293bmVyV2lu''@;'; put 'put ''ZG93Om4saGFuZGxlRXZlbnQ6ZSxiZWZvcmVLZXlEb3duOnQsYWZ0ZXJLZXlEb3duOnJ9KT0+e2NvbnN0IGk9Q0woe2Vycm9ySWRFeGlzdHM6V2U9PmBUaGUgIiR7V2V9IiBjb250ZXh0IG5hbWUgaXMgYWxyZWFkeSByZWdpc3RlcmVkLmB9KTtsZXQgbz0iZ3JpZCI7Y29uc3QgYT0oV2UsYXQ9''@;'; put 'put ''InRhYmxlIik9Pntjb25zdCBDdD0oKG4sZT0idGFibGUiKT0+e2NvbnN0IHQ9Q0woe2Vycm9ySWRFeGlzdHM6Zz0+YFRoZSAiJHtnfSIgc2hvcnRjdXQgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGluIHRoZSAiJHtufSIgY29udGV4dC5gfSkscj0oe2tleXM6ZyxjYWxsYmFjazpFLGdyb3VwOk8s''@;'; put 'put ''cnVuT25seUlmOlo9KCk9PiEwLGNhcHR1cmVDdHJsOmVlPSExLHByZXZlbnREZWZhdWx0OnZlPSEwLHN0b3BQcm9wYWdhdGlvbjpNZT0hMSxyZWxhdGl2ZVRvR3JvdXA6SGUscG9zaXRpb246V2UsZm9yd2FyZFRvQ29udGV4dDphdH09e30pPT57WHUoTykmJkpyKCJZb3UgbmVlZCB0byBkZWZp''@;'; put 'put ''bmUgdGhlIHNob3J0Y3V0J3MgZ3JvdXAuIiksITE9PT1fYShFKSYmSnIoIlRoZSBzaG9ydGN1dCdzIGNhbGxiYWNrIG5lZWRzIHRvIGJlIGEgZnVuY3Rpb24uIiksITE9PT1BcnJheS5pc0FycmF5KGcpJiZKcih5Y2BQYXNzIHRoZSBzaG9ydGN1dFwncyBrZXlzIGFzIGFuIGFycmF5IG9mIGFy''@;'; put 'put ''cmF5cyxceDIwCiAgICAgIHVzaW5nIHRoZSBLZXlib2FyZEV2ZW50LmtleSBwcm9wZXJ0aWVzOlx4MjAKICAgICAgZGVjbGFyZSBodHRwczogLy9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQva2V5L0tleV9WYWx1ZXMuYCk7Y29uc3QgQ3Q9''@;'; put 'put ''e2NhbGxiYWNrOkUsZ3JvdXA6TyxydW5Pbmx5SWY6WixjYXB0dXJlQ3RybDplZSxwcmV2ZW50RGVmYXVsdDp2ZSxzdG9wUHJvcGFnYXRpb246TWV9O1pvKEhlKSYmKEN0LnJlbGF0aXZlVG9Hcm91cD1IZSxDdC5wb3NpdGlvbj1XZSkseEllKGF0KSYmKEN0LmZvcndhcmRUb0NvbnRleHQ9YXQp''@;'; put 'put ''LGcuZm9yRWFjaChBdD0+e2NvbnN0IEt0PW5aKEF0KTtpZih0Lmhhc0l0ZW0oS3QpKXtjb25zdCBnbj10LmdldEl0ZW0oS3QpO2xldCBUbj1nbi5maW5kSW5kZXgoQ249PkNuLmdyb3VwPT09SGUpOy0xIT09VG4/ImJlZm9yZSI9PT1XZT9Ubi09MTpUbis9MTpUbj1nbi5sZW5ndGgsZ24uc3Bs''@;'; put 'put ''aWNlKFRuLDAsQ3QpfWVsc2UgdC5hZGRJdGVtKEt0LFtDdF0pfSl9LG89Zz0+e2NvbnN0IEU9blooZyk7dC5yZW1vdmVJdGVtKEUpfTtyZXR1cm57X19raW5kT2Y6VEllLHNjb3BlOmUsYWRkU2hvcnRjdXQ6cixhZGRTaG9ydGN1dHM6KGcsRT17fSk9PntnLmZvckVhY2goTz0+e2FjKEUsKFos''@;'; put 'put ''ZWUpPT57ITE9PT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoTyxlZSkmJihPW2VlXT1FW2VlXSl9KSxyKE8pfSl9LGdldFNob3J0Y3V0czpnPT57Y29uc3QgRT1uWihnKSxPPXQuZ2V0SXRlbShFKTtyZXR1cm4gWm8oTyk/Ty5zbGljZSgpOltdfSxoYXNTaG9ydGN1dDpn''@;'; put 'put ''PT57Y29uc3QgRT1uWihnKTtyZXR1cm4gdC5oYXNJdGVtKEUpfSxyZW1vdmVTaG9ydGN1dHNCeUtleXM6byxyZW1vdmVTaG9ydGN1dHNCeUdyb3VwOmc9Pnt0LmdldEl0ZW1zKCkuZm9yRWFjaCgoW08sWl0pPT57Y29uc3QgZWU9Wix2ZT1lZS5maWx0ZXIoTWU9Pk1lLmdyb3VwIT09Zyk7MD09''@;'; put 'put ''PXZlLmxlbmd0aD9vKChuPT5uLnNwbGl0KCIrIikpKE8pKTooZWUubGVuZ3RoPTAsZWUucHVzaCguLi52ZSkpfSl9fX0pKFdlLGF0KTtyZXR1cm4gaS5hZGRJdGVtKFdlLEN0KSxDdH0sbD0oKT0+byx1PVdlPT5pLmdldEl0ZW0oV2UpO2xldCBPPSExO2NvbnN0IFo9KFdlLGF0LEN0PWwoKSk9''@;'; put 'put ''Pntjb25zdCBBdD14SWUoQ3QpP0N0OnUoQ3QpO2xldCBLdD0hMTtpZighQXQ/Lmhhc1Nob3J0Y3V0KGF0KSlyZXR1cm4gS3Q7Y29uc3QgcXQ9QXQ/LmdldFNob3J0Y3V0cyhhdCk/P1tdO2ZvcihsZXQgZ249MDtnbjxxdC5sZW5ndGg7Z24rKyl7Y29uc3R7Y2FsbGJhY2s6VG4scnVuT25seUlm''@;'; put 'put ''OkNuLHByZXZlbnREZWZhdWx0OnFyLHN0b3BQcm9wYWdhdGlvbjokbixjYXB0dXJlQ3RybDpUcixmb3J3YXJkVG9Db250ZXh0OnJpfT1xdFtnbl07aWYoITA9PT1Dbj8uKFdlKSl7aWYoTz1Ucj8/ITEsS3Q9ITE9PT1UbihXZSxhdCksTz0hMSxxciYmV2UucHJldmVudERlZmF1bHQoKSwkbiYm''@;'; put 'put ''KEYzKFdlKSxXZS5zdG9wUHJvcGFnYXRpb24oKSksS3QpYnJlYWs7cmkmJlooV2UsYXQscmkpfX1yZXR1cm4gS3R9LE1lPWZ1bmN0aW9uIEhJdChuLGUsdCxyLGksbz1udWxsKXtjb25zdCBhPUU9PntpZighMSE9PWUoRSkpe2lmKCExPT09dChFKXx8MjI5PT09RS5rZXlDb2RlfHwic3RyaW5n''@;'; put 'put ''IiE9dHlwZW9mIEUua2V5fHxKNShFKSlyZXR1cm47Y29uc3QgV2U9dU8oRSk7bGV0IGF0PVtdO2RPKFdlKXx8KGF0PXZUKEUpKTtjb25zdCBDdD1bV2VdLmNvbmNhdChhdCk7bGV0IEF0PWkoRSxDdCk7cmV0dXJuIUF0JiYobHcoKSYmYXQuaW5jbHVkZXMoIm1ldGEiKXx8IWx3KCkmJmF0Lmlu''@;'; put 'put ''Y2x1ZGVzKCJjb250cm9sIikpJiYoQXQ9aShFLFtXZV0uY29uY2F0KHZUKEUsITApKSkpLHZvaWQgcihFKX1pZighMT09PV9hKG8pfHwyMjk9PT1FLmtleUNvZGV8fCJzdHJpbmciIT10eXBlb2YgRS5rZXl8fEo1KEUpKXJldHVybjtjb25zdCBaPXVPKEUpO2xldCBlZT1bXTtkTyhaKXx8KGVl''@;'; put 'put ''PXZUKEUpKTtjb25zdCB2ZT1bWl0uY29uY2F0KGVlKTtsZXQgTWU9byhFLHZlKTshTWUmJihsdygpJiZlZS5pbmNsdWRlcygibWV0YSIpfHwhbHcoKSYmZWUuaW5jbHVkZXMoImNvbnRyb2wiKSkmJihNZT1vKEUsW1pdLmNvbmNhdCh2VChFLCEwKSkpKSxyKEUpfSxsPSgpPT57aE8ucmVsZWFz''@;'; put 'put ''ZUFsbCgpfTtyZXR1cm57bW91bnQ6KCk9PntsZXQgRT1uO2Zvcig7RTspe2NvbnN0e2RvY3VtZW50RWxlbWVudDpPfT1FLmRvY3VtZW50LFo9Zk8uZ2V0KE8pPz8wOzA9PT1aJiYoTy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixBSWUpLE8uYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLGtJ''@;'; put 'put ''ZSkpLGZPLnNldChPLForMSksTy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixhKSxPLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGwpLEU9djcoRSl9fSx1bm1vdW50OigpPT57bGV0IEU9bjtmb3IoO0U7KXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6T309RS5kb2N1bWVudCxaPWZPLmdldChP''@;'; put 'put ''KT8/MDtaPD0xPyhPLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLEFJZSksTy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsa0llKSxmTy5kZWxldGUoTykpOmZPLnNldChPLFotMSksTy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixhKSxPLnJlbW92ZUV2ZW50TGlzdGVu''@;'; put 'put ''ZXIoImJsdXIiLGwpLEU9djcoRSl9fSxpc1ByZXNzZWQ6RT0+aE8uaXNQcmVzc2VkKEUpLHJlbGVhc2VQcmVzc2VkS2V5czooKT0+aE8ucmVsZWFzZUFsbCgpfX0obixXZT0+e2NvbnN0IGF0PWwoKSxDdD11KGF0KTtyZXR1cm4gZShXZSxDdD8uc2NvcGU/PyJ0YWJsZSIpfSx0LHIsWiwoV2Us''@;'; put 'put ''YXQpPT57Y29uc3QgQ3Q9aS5nZXRJdGVtcygpO2ZvcihsZXQgQXQ9MDtBdDxDdC5sZW5ndGg7QXQrPTEpe2NvbnN0WyxLdF09Q3RbQXRdO2lmKCJnbG9iYWwiPT09S3Quc2NvcGUmJlooV2UsYXQsS3QpKXJldHVybiEwfXJldHVybiExfSk7cmV0dXJuIE1lLm1vdW50KCkse2FkZENvbnRleHQ6''@;'; put 'put ''YSxnZXRBY3RpdmVDb250ZXh0TmFtZTpsLGdldENvbnRleHQ6dSxnZXRPckNyZWF0ZUNvbnRleHQ6KFdlLGF0PSJ0YWJsZSIpPT51KFdlKT8/YShXZSxhdCksc2V0QWN0aXZlQ29udGV4dE5hbWU6V2U9PntpLmhhc0l0ZW0oV2UpfHxKcih5Y2BZb3UndmUgdHJpZWQgdG8gYWN0aXZhdGUgdGhl''@;'; put 'put ''ICIke1dlfSIgc2hvcnRjdXQgY29udGV4dFx4MjAKICAgICAgICB0aGF0IGRvZXMgbm90IGV4aXN0LiBCZWZvcmUgYWN0aXZhdGlvbiwgcmVnaXN0ZXIgdGhlIGNvbnRleHQgdXNpbmcgdGhlICJhZGRDb250ZXh0IiBtZXRob2QuYCksbz1XZX0saGFzRXZlbnRTaG9ydGN1dDooV2UsYXQpPT57''@;'; put 'put ''Y29uc3QgQ3Q9dShXZSk7cmV0dXJuISFDdCYmKChuLGUpPT57aWYoInN0cmluZyIhPXR5cGVvZiBuLmtleSlyZXR1cm5bXTtjb25zdCB0PXVPKG4pLHI9ZE8odCksaT1yP1tdOnZUKG4pLGE9W1t0XS5jb25jYXQoaSldO3JldHVybiByfHwoImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUoKT9pLmlu''@;'; put 'put ''Y2x1ZGVzKCJtZXRhIik6aS5pbmNsdWRlcygiY29udHJvbCIpKSYmYS5wdXNoKFt0XS5jb25jYXQodlQobiwhMCkpKSxhfSkoYXQsbHcpLnNvbWUoS3Q9PkN0Lmhhc1Nob3J0Y3V0KEt0KSl9LGlzQ3RybFByZXNzZWQ6KCk9PiFPJiYoTWUuaXNQcmVzc2VkKCJjb250cm9sIil8fE1lLmlzUHJl''@;'; put 'put ''c3NlZCgibWV0YSIpKSxyZWxlYXNlUHJlc3NlZEtleXM6KCk9Pk1lLnJlbGVhc2VQcmVzc2VkS2V5cygpLGRlc3Ryb3k6KCk9Pk1lLnVubW91bnQoKX19KSh7aGFuZGxlRXZlbnQ6KHV0LEh0KT0+Imdsb2JhbCI9PT1IdHx8ci5pc0xpc3RlbmluZygpLGJlZm9yZUtleURvd246dXQ9PnIucnVu''@;'; put 'put ''SG9va3MoImJlZm9yZUtleURvd24iLHV0KSxhZnRlcktleURvd246dXQ9Pnt0aGlzLmlzRGVzdHJveWVkfHxyLnJ1bkhvb2tzKCJhZnRlckRvY3VtZW50S2V5RG93biIsdXQpfSxvd25lcldpbmRvdzp0aGlzLnJvb3RXaW5kb3d9KTt0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93''@;'; put 'put ''biIsdXQ9PnshMT09PXV0LmN0cmxLZXkmJiExPT09dXQubWV0YUtleSYmeGkucmVsZWFzZVByZXNzZWRLZXlzKCl9KSx0aGlzLmdldFNob3J0Y3V0TWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiB4aX0sZz1uZXcgX0l0KHIpO2NvbnN0IFRvPXIyKHRoaXMpP0FJdChyKTpudWxsLHdzPXIyKHRo''@;'; put 'put ''aXMpP25ldyBNTHQoe3RvcDpyLnJvb3RTbG90VG9wRWxlbWVudCxib3R0b206ci5yb290U2xvdEJvdHRvbUVsZW1lbnR9KTpudWxsO3RoaXMuZ2V0Rm9jdXNNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIGd9LHRoaXMuZ2V0Rm9jdXNTY29wZU1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gcjIo''@;'; put 'put ''cil8fEpyKCJUaGUgRm9jdXNTY29wZU1hbmFnZXIgaXMgb25seSBhdmFpbGFibGUgZm9yIHRoZSBtYWluIEhhbmRzb250YWJsZSBpbnN0YW5jZS4iKSxUb30sdGhpcy5nZXRMYXlvdXRNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHIyKHIpfHxKcigiVGhlIExheW91dE1hbmFnZXIgaXMgb25s''@;'; put 'put ''eSBhdmFpbGFibGUgZm9yIHRoZSBtYWluIEhhbmRzb250YWJsZSBpbnN0YW5jZS4iKSx3c307Y29uc3QgdHM9Wi50aGVtZSxrYT1aLnRoZW1lTmFtZSxhbz1yWihyLnJvb3RDb250YWluZXIpO3IyKHIpJiYhYW8mJihDYSh0cyl8fCF0cyYmIWthKSYmcmkodHMpLGFsZSgpLmZvckVhY2godXQ9''@;'; put 'put ''Pntjb25zdCBIdD1TTCh1dCk7SHQmJkN0LmFkZEl0ZW0odXQsbmV3IEh0KHRoaXMpKX0pLGZ1bmN0aW9uIEJEdChuKXtbVkR0LEhEdF0uZm9yRWFjaChlPT5lKG4pKX0ocikscjIodGhpcykmJmZ1bmN0aW9uIERJdChuKXtbSUl0XS5mb3JFYWNoKGU9PmUobikpfShyKSx4aS5zZXRBY3RpdmVD''@;'; put 'put ''b250ZXh0TmFtZSgiZ3JpZCIpLEdvLmdldFNpbmdsZXRvbigpLnJ1bihyLCJjb25zdHJ1Y3QiKX07VWYoa0RlKSxDMChNVCk7Y29uc3QgVTM9ZnVuY3Rpb24oZSx0KXtjb25zdCByPW5ldyBSRGUoZSx0fHx7fSxQbGUpO3JldHVybiByLmluaXQoKSxyfTtVMy5lZGl0b3JzPXtCYXNlRWRpdG9y''@;'; put 'put ''Okk3LFRleHRFZGl0b3I6ZF99LFUzLmRvbT17ZW1wdHk6QzR9LFUzLmhlbHBlcj17fSxVMy5Db3JlPWZ1bmN0aW9uKG4sZT17fSl7cmV0dXJuIG5ldyBSRGUobixlLFBsZSl9LFUzLkRlZmF1bHRTZXR0aW5ncz0kUmUoKSxVMy5ob29rcz1Hby5nZXRTaW5nbGV0b24oKSxVMy5DZWxsQ29vcmRz''@;'; put 'put ''PXRZLFUzLkNlbGxSYW5nZT1uWSxVMy5wYWNrYWdlTmFtZT0iaGFuZHNvbnRhYmxlIixVMy5idWlsZERhdGU9IjMwLzA2LzIwMjYgMDg6NDU6MzMiLFUzLnZlcnNpb249IjE4LjAuMCIsVTMubGFuZ3VhZ2VzPXtkaWN0aW9uYXJ5S2V5czpOLGdldExhbmd1YWdlRGljdGlvbmFyeTprUmUsZ2V0''@;'; put 'put ''TGFuZ3VhZ2VzRGljdGlvbmFyaWVzOmZ1bmN0aW9uIGprdCgpe3JldHVybiBWa3QoKX0scmVnaXN0ZXJMYW5ndWFnZURpY3Rpb25hcnk6QVJlLGdldFRyYW5zbGF0ZWRQaHJhc2U6UlJlfSxVMy50aGVtZXM9e2hhc1RoZW1lOkVULGdldFRoZW1lOkNPLGdldFRoZW1lTmFtZXM6eURlLGdldFRo''@;'; put 'put ''ZW1lczpiRGUscmVnaXN0ZXJUaGVtZTpTTyxyZWluaXRUaGVtZTpDRGV9O2NvbnN0IEtwPVUzLFFMdD1uPT57Y29uc3QgZT1JNy5wcm90b3R5cGUuZXh0ZW5kKCksdD1bImNsb3NlIiwiZm9jdXMiLCJnZXRWYWx1ZSIsIm9wZW4iLCJzZXRWYWx1ZSJdLHI9T2JqZWN0LmdldE93blByb3BlcnR5''@;'; put 'put ''TmFtZXMoSTcucHJvdG90eXBlKSxpPWUucHJvdG90eXBlO3JldHVybiByLmZvckVhY2gobz0+e2lmKG5bb10pe2NvbnN0IGE9ZS5wcm90b3R5cGVbb107aVtvXT1mdW5jdGlvbiguLi5sKXtyZXR1cm4gdC5pbmNsdWRlcyhvKXx8YS5hcHBseSh0aGlzLGwpLG5bb10odGhpcywuLi5sKX19fSks''@;'; put 'put ''T2JqZWN0LmtleXMobikuZm9yRWFjaChvPT57ci5pbmNsdWRlcyhvKXx8KGlbb109ZnVuY3Rpb24oLi4uYSl7cmV0dXJuIG5bb10odGhpcywuLi5hKX0pfSksZX0sSURlPSh7aW5pdDpuLGFmdGVyT3BlbjplLGFmdGVySW5pdDp0LGFmdGVyQ2xvc2U6cixiZWZvcmVPcGVuOmksZ2V0VmFsdWU6''@;'; put 'put ''byxzZXRWYWx1ZTphLG9uRm9jdXM6bCxzaG9ydGN1dHM6dSx2YWx1ZTpnLHJlbmRlcjpFLGNvbmZpZzpPLHNob3J0Y3V0c0dyb3VwOloscG9zaXRpb246ZWUsLi4udmV9KT0+UUx0KHtpbml0KEhlKXtPYmplY3QuYXNzaWduKEhlLHt2YWx1ZTpnLGNvbmZpZzpPLHJlbmRlcjpFLHBvc2l0aW9u''@;'; put 'put ''OmVlLC4uLnZlfSksSGUuX29wZW5lZD0hMSxIZS5jb250YWluZXI9SGUuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxIZS5jb250YWluZXIuc3R5bGUuZGlzcGxheT0ibm9uZSIsInBvcnRhbCI9PT1lZT9IZS5ob3Qucm9vdFBvcnRhbEVsZW1lbnQuYXBwZW5kQ2hpbGQo''@;'; put 'put ''SGUuY29udGFpbmVyKTpIZS5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQoSGUuY29udGFpbmVyKSxuKEhlKSxIZS5pbnB1dHx8SnIoIklucHV0IGlzIG5vdCBhc3NpZ25lZC4gQXNzaWduIGl0IGluIHRoZSBpbml0IGNhbGxiYWNrLiIpLEhlLmNvbnRhaW5lci5hcHBlbmRDaGlsZChIZS5p''@;'; put 'put ''bnB1dCksImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQoSGUpLEhlLnByZXZlbnRDbG9zZUVsZW1lbnQmJkhlLnByZXZlbnRDbG9zZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmKEhlLmV2ZW50TWFuYWdlcj1uZXcgVzIoSGUuaG90KSxIZS5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0''@;'; put 'put ''ZW5lcihIZS5wcmV2ZW50Q2xvc2VFbGVtZW50LCJtb3VzZWRvd24iLFdlPT57V2Uuc3RvcFByb3BhZ2F0aW9uKCl9KSksSGUuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCgpPT5IZS5yZWZyZXNoRGltZW5zaW9ucz8uKCkpLEhlLmFkZEhvb2soImFmdGVyU2Nyb2xsVmVydGlj''@;'; put 'put ''YWxseSIsKCk9PkhlLnJlZnJlc2hEaW1lbnNpb25zPy4oKSl9LGdldFZhbHVlOkhlPT4iZnVuY3Rpb24iPT10eXBlb2Ygbz9vKEhlKTpIZS52YWx1ZSxzZXRWYWx1ZShIZSxXZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGE/YShIZSxXZSk6SGUudmFsdWU9V2UsImZ1bmN0aW9uIj09dHlwZW9mIEUm''@;'; put 'put ''JkUoSGUpfSxyZWZyZXNoRGltZW5zaW9ucyhIZSl7aWYoSGUuVEQ9SGUuZ2V0RWRpdGVkQ2VsbCgpLCFIZS5URClyZXR1cm4gdm9pZCBIZS5jbG9zZSgpO2lmKCFIZS5fb3BlbmVkKXJldHVybjtjb25zdCBXZT1IZS5jb250YWluZXIuc3R5bGU7aWYoV2UuZGlzcGxheT0iYmxvY2siLFdlLnBv''@;'; put 'put ''c2l0aW9uPSJhYnNvbHV0ZSIsInBvcnRhbCI9PT1lZSl7Y29uc3QgYXQ9SGUuVEQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7V2UudG9wPWAke0hlLmhvdC5yb290V2luZG93LnBhZ2VZT2Zmc2V0K2F0LnRvcH1weGAsV2VbSGUuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJdPWAke0hlLmhv''@;'; put 'put ''dC5yb290V2luZG93LnBhZ2VYT2Zmc2V0K2F0W0hlLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQiXX1weGB9ZWxzZXtjb25zdCBhdD1IZS5nZXRFZGl0ZWRDZWxsUmVjdCgpO2lmKCFhdClyZXR1cm47V2UudG9wPWAke2F0LnRvcH1weGAsV2VbSGUuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVm''@;'; put 'put ''dCJdPWAke2F0LnN0YXJ0fXB4YCxXZS53aWR0aD1gJHthdC53aWR0aH1weGAsV2UuaGVpZ2h0PWAke2F0LmhlaWdodH1weGB9fSxvcGVuKEhlLFdlKXtIZS5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgiaHRfY2xvbmVfbWFzdGVyIiksSGUuX29wZW5lZD0hMCxIZS5yZWZyZXNoRGltZW5zaW9u''@;'; put 'put ''cz8uKCksSGUuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJlZGl0b3IiKSwoSGU9Pntjb25zdCBhdD1IZS5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIiksQ3Q9e2dyb3VwOlp9O3UmJmF0LmFkZFNob3J0Y3V0cyh1Lm1h''@;'; put 'put ''cChBdD0+KHsuLi5BdCxyZWxhdGl2ZVRvR3JvdXA6QXQucmVsYXRpdmVUb0dyb3VwPz8iZWRpdG9yTWFuYWdlci5oYW5kbGluZ0VkaXRvciIscG9zaXRpb246QXQucG9zaXRpb24/PyJiZWZvcmUiLGNhbGxiYWNrOkt0PT5BdC5jYWxsYmFjayhIZSxLdCl9KSksQ3QpfSkoSGUpLGUmJmUoSGUs''@;'; put 'put ''V2UpfSxmb2N1cyhIZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGw/bChIZSk6SGUuY29udGFpbmVyPy5xdWVyeVNlbGVjdG9yKCdidXR0b24sIFtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFt0YWJpbmRleF06bm90KFt0YWJpbmRleD0iLTEiXSknKT8uZm9jdXMoKX0sY2xvc2UoSGUp''@;'; put 'put ''e0hlLl9vcGVuZWQ9ITEsSGUuY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLEhlLmNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJodF9jbG9uZV9tYXN0ZXIiKSxIZS5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRzQnlH''@;'; put 'put ''cm91cChaPz8iIiksImZ1bmN0aW9uIj09dHlwZW9mIHImJnIoSGUpfSxwcmVwYXJlKEhlLFdlLGF0LEN0LEF0LEt0LHF0KXsiZnVuY3Rpb24iPT10eXBlb2YgaT9pKEhlLHtyb3c6V2UsY29sOmF0LHByb3A6Q3QsdGQ6QXQsb3JpZ2luYWxWYWx1ZTpLdCxjZWxsUHJvcGVydGllczpxdH0pOkhl''@;'; put 'put ''LnNldFZhbHVlKEt0KX19KSxERGU9bj0+KGUsdCxyLGksbyxhLGwpPT5uKHtpbnN0YW5jZTplLHRkOnQscm93OnIsY29sdW1uOmkscHJvcDpvLHZhbHVlOmEsY2VsbFByb3BlcnRpZXM6bH0pLEpMdD1bImlucHV0UGxhY2Vob2xkZXIiXTtmdW5jdGlvbiBlT3QobixlKXt9Y29uc3QgdE90PVsi''@;'; put 'put ''Y29udGFpbmVyIl07bGV0IExEZT0oKCk9PntjbGFzcyBue3RvcDtsZWZ0O2hlaWdodDt3aWR0aDtzZXQgaXNWaXNpYmxlKHQpe3RoaXMuX2lzVmlzaWJsZT10fXBsYWNlaG9sZGVyQ3VzdG9tQ2xhc3M9ImhhbmRzb250YWJsZUlucHV0SG9sZGVyIGh0X2Nsb25lX21hc3RlciI7c2V0IGNvbXBv''@;'; put 'put ''bmVudFJlZih0KXt0JiZ0aGlzLmNvbnRhaW5lci5pbnNlcnQodC5ob3N0Vmlldyl9Y29udGFpbmVyO2dldCBkaXNwbGF5KCl7cmV0dXJuIHRoaXMuX2lzVmlzaWJsZT8iYmxvY2siOiJub25lIn1faXNWaXNpYmxlPSExO2RldGFjaEVkaXRvcigpe3RoaXMuY29udGFpbmVyLmRldGFjaCgpfXN0''@;'; put 'put ''YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NWNtcD1Qcih7dHlwZTpuLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKHIsaSl7aWYoMSZyJiZXbyhKTHQsNyxEcyksMiZyKXtsZXQgbztjaShvPXVp''@;'; put 'put ''KCkpJiYoaS5jb250YWluZXI9by5maXJzdCl9fSxpbnB1dHM6e3RvcDoidG9wIixsZWZ0OiJsZWZ0IixoZWlnaHQ6ImhlaWdodCIsd2lkdGg6IndpZHRoIixpc1Zpc2libGU6ImlzVmlzaWJsZSIscGxhY2Vob2xkZXJDdXN0b21DbGFzczoicGxhY2Vob2xkZXJDdXN0b21DbGFzcyIsY29tcG9u''@;'; put 'put ''ZW50UmVmOiJjb21wb25lbnRSZWYifSxkZWNsczozLHZhcnM6MTYsY29uc3RzOltbImlucHV0UGxhY2Vob2xkZXIiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXsxJnImJigkUigwLCJkaXYiKSxFdGUoMSxlT3QsMCwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLGNkKSxxUigpKSwyJnImJihC''@;'; put 'put ''aihpLnBsYWNlaG9sZGVyQ3VzdG9tQ2xhc3MpLE8yKCJkaXNwbGF5IixpLmRpc3BsYXkpKCJ3aWR0aCIsaS53aWR0aCwicHgiKSgiaGVpZ2h0IixpLmhlaWdodCwicHgiKSgibWF4LXdpZHRoIixpLndpZHRoLCJweCIpKCJtYXgtaGVpZ2h0IixpLmhlaWdodCwicHgiKSgidG9wIixpLnRvcCwi''@;'; put 'put ''cHgiKSgibGVmdCIsaS5sZWZ0LCJweCIpKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSl9cmV0dXJuIG59KSgpO2NsYXNzIG5PdCBleHRlbmRzIEtwLmVkaXRvcnMuQmFzZUVkaXRvcntfY29tcG9uZW50UmVmO19lZGl0b3JQbGFjZUhvbGRlclJlZjtfaXNQbGFjZWhvbGRl''@;'; put 'put ''clJlYWR5PSExO19maW5pc2hFZGl0U3Vic2NyaXB0aW9uO19jYW5jZWxFZGl0U3Vic2NyaXB0aW9uO2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyUm93UmVzaXplIix0aGlzLm9uQWZ0ZXJSb3dSZXNpemUuYmluZCh0aGlzKSksdGhpcy5ob3QuYWRkSG9v''@;'; put 'put ''aygiYWZ0ZXJDb2x1bW5SZXNpemUiLHRoaXMub25BZnRlckNvbHVtblJlc2l6ZS5iaW5kKHRoaXMpKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckRlc3Ryb3kiLHRoaXMub25BZnRlckRlc3Ryb3kuYmluZCh0aGlzKSl9cHJlcGFyZShlLHQscixpLG8sYSl7aWYoIXRoaXMuaXNPcGVuZWQoKSl7''@;'; put 'put ''c3VwZXIucHJlcGFyZShlLHQscixpLG8sYSk7Y29uc3QgbD10aGlzLmhvdC5nZXRDb2x1bW5NZXRhKHQpO3RoaXMuX2lzUGxhY2Vob2xkZXJSZWFkeXx8KHRoaXMuY3JlYXRlRWRpdG9yUGxhY2Vob2xkZXIobC5fZW52aXJvbm1lbnRJbmplY3RvciksdGhpcy5faXNQbGFjZWhvbGRlclJlYWR5''@;'; put 'put ''PSEwKSx0aGlzLl9jb21wb25lbnRSZWY9bC5fZWRpdG9yQ29tcG9uZW50UmVmZXJlbmNlLHRoaXMuY2xlYW51cFN1YnNjcmlwdGlvbnMoKSx0aGlzLl9maW5pc2hFZGl0U3Vic2NyaXB0aW9uPXRoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5maW5pc2hFZGl0LnBpcGUoTXAoMSkpLnN1YnNj''@;'; put 'put ''cmliZSgoKT0+e3RoaXMuZmluaXNoRWRpdGluZygpfSksdGhpcy5fY2FuY2VsRWRpdFN1YnNjcmlwdGlvbj10aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2UuY2FuY2VsRWRpdC5waXBlKE1wKDEpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNhbmNlbENoYW5nZXMoKX0pfX1jbG9zZSgpe3RoaXMu''@;'; put 'put ''aXNPcGVuZWQoKSYmKHRoaXMucmVzZXRFZGl0b3JTdGF0ZSgpLHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmPy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWY/Lmluc3RhbmNlLmRldGFjaEVkaXRvcigpLHRoaXMuX2NvbXBvbmVu''@;'; put 'put ''dFJlZj8uaW5zdGFuY2Uub25DbG9zZSgpKX1mb2N1cygpe3RoaXMuX2NvbXBvbmVudFJlZj8uaW5zdGFuY2Uub25Gb2N1cygpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudFJlZj8uaW5zdGFuY2U/LmdldFZhbHVlKCl9b3BlbihlKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFn''@;'; put 'put ''ZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZWRpdG9yIiksdGhpcy5hcHBseVByb3BzVG9FZGl0b3IoKSx0aGlzLl9jb21wb25lbnRSZWY/Lmluc3RhbmNlLm9uT3BlbihlKX1zZXRWYWx1ZShlKXt0aGlzLl9jb21wb25lbnRSZWY/Lmluc3RhbmNlPy5zZXRWYWx1ZShlKSx0aGlzLl9jb21w''@;'; put 'put ''b25lbnRSZWY/LmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKX1hcHBseVByb3BzVG9FZGl0b3IoKXtpZighdGhpcy5fY29tcG9uZW50UmVmfHwhdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYpcmV0dXJuO2NvbnN0IGU9dGhpcy5nZXRFZGl0ZWRDZWxsUmVjdCgpO3RoaXMuaXNJ''@;'; put 'put ''bkZ1bGxFZGl0TW9kZSgpfHx0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2Uuc2V0VmFsdWUobnVsbCksdGhpcy5fY29tcG9uZW50UmVmLnNldElucHV0KCJvcmlnaW5hbFZhbHVlIix0aGlzLm9yaWdpbmFsVmFsdWUpLHRoaXMuX2NvbXBvbmVudFJlZi5zZXRJbnB1dCgicm93Iix0aGlzLnJv''@;'; put 'put ''dyksdGhpcy5fY29tcG9uZW50UmVmLnNldElucHV0KCJjb2x1bW4iLHRoaXMuY29sKSx0aGlzLl9jb21wb25lbnRSZWYuc2V0SW5wdXQoInByb3AiLHRoaXMucHJvcCksdGhpcy5fY29tcG9uZW50UmVmLnNldElucHV0KCJjZWxsUHJvcGVydGllcyIsdGhpcy5jZWxsUHJvcGVydGllcyksdGhp''@;'; put 'put ''cy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoInRvcCIsZS50b3ApLHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJsZWZ0IixlLnN0YXJ0KSx0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgiaGVpZ2h0IixlLmhlaWdodCksdGhpcy5fZWRpdG9y''@;'; put 'put ''UGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoIndpZHRoIixlLndpZHRoKSx0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgiaXNWaXNpYmxlIiwhMCksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoImNvbXBvbmVudFJlZiIsdGhpcy5fY29tcG9uZW50UmVmKSx0''@;'; put 'put ''aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9Y3JlYXRlRWRpdG9yUGxhY2Vob2xkZXIoZSl7dGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWY9ZkkoTERlLHtlbnZpcm9ubWVudEluamVjdG9yOmV9KSx0aGlzLmhvdC5yb290RWxlbWVu''@;'; put 'put ''dC5hcHBlbmRDaGlsZCh0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KX1vbkFmdGVyQ29sdW1uUmVzaXplKCl7dGhpcy5pc09wZW5lZCgpJiZ0aGlzLmFwcGx5UHJvcHNUb0VkaXRvcigpfW9uQWZ0ZXJSb3dSZXNpemUoKXt0aGlzLmlzT3BlbmVkKCkm''@;'; put 'put ''JnRoaXMuYXBwbHlQcm9wc1RvRWRpdG9yKCl9b25BZnRlckRlc3Ryb3koKXt0aGlzLmNsZWFudXBTdWJzY3JpcHRpb25zKCksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWY/LmRlc3Ryb3koKX1jbGVhbnVwU3Vic2NyaXB0aW9ucygpe3RoaXMuX2ZpbmlzaEVkaXRTdWJzY3JpcHRpb24mJih0''@;'; put 'put ''aGlzLl9maW5pc2hFZGl0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZmluaXNoRWRpdFN1YnNjcmlwdGlvbj12b2lkIDApLHRoaXMuX2NhbmNlbEVkaXRTdWJzY3JpcHRpb24mJih0aGlzLl9jYW5jZWxFZGl0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY2FuY2Vs''@;'; put 'put ''RWRpdFN1YnNjcmlwdGlvbj12b2lkIDApfXJlc2V0RWRpdG9yU3RhdGUoKXt0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZiYmKHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJ0b3AiLHZvaWQgMCksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoImxlZnQi''@;'; put 'put ''LHZvaWQgMCksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoImhlaWdodCIsdm9pZCAwKSx0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgid2lkdGgiLHZvaWQgMCksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoImlzVmlzaWJsZSIsITEp''@;'; put 'put ''LHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJjb21wb25lbnRSZWYiLHZvaWQgMCkpfX1sZXQgT0RlPSgoKT0+e2NsYXNzIG57dmFsdWU9IiI7aW5zdGFuY2U7dGQ7cm93O2NvbDtwcm9wO2NlbGxQcm9wZXJ0aWVzO2dldFByb3BzKCl7cmV0dXJuIHRoaXMuY2VsbFByb3Bl''@;'; put 'put ''cnRpZXM/LnJlbmRlcmVyUHJvcHM/P3t9fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NWRpcj0kcih7dHlwZTpuLGlucHV0czp7dmFsdWU6InZhbHVlIixpbnN0YW5jZToiaW5zdGFuY2UiLHRkOiJ0ZCIscm93OiJyb3ciLGNvbDoi''@;'; put 'put ''Y29sIixwcm9wOiJwcm9wIixjZWxsUHJvcGVydGllczoiY2VsbFByb3BlcnRpZXMifX0pfXJldHVybiBufSkoKTtjbGFzcyBUVCBleHRlbmRzIE9EZXtzdGF0aWMgUkVOREVSRVJfTUFSS0VSPVN5bWJvbCgiSG90Q2VsbFJlbmRlcmVyQ29tcG9uZW50Iik7c3RhdGljIFx1MDI3NWZhYz0oKCk9''@;'; put 'put ''PntsZXQgZTtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuKGV8fChlPXdhKFRUKSkpKHJ8fFRUKX19KSgpO3N0YXRpYyBcdTAyNzVjbXA9UHIoe3R5cGU6VFQsc2VsZWN0b3JzOltbImhvdC1jZWxsLXJlbmRlcmVyIl1dLGZlYXR1cmVzOltGb10sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVu''@;'; put 'put ''Y3Rpb24odCxyKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pfWxldCBORGU9KCgpPT57Y2xhc3MgbntoZWlnaHRGaXRQYXJlbnRDb250YWluZXI9MTAwO3dpZHRoRml0UGFyZW50Q29udGFpbmVyPTEwMDtyb3c7Y29sdW1uO3Byb3A7b3JpZ2luYWxWYWx1ZTtjZWxsUHJv''@;'; put 'put ''cGVydGllcztmaW5pc2hFZGl0PW5ldyBLcjtjYW5jZWxFZGl0PW5ldyBLcjt2YWx1ZTtnZXRWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXNldFZhbHVlKHQpe3RoaXMudmFsdWU9dH1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVk''@;'; put 'put ''aXI9JHIoe3R5cGU6bixob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihyLGkpezImciYmTzIoImhlaWdodCIsaS5oZWlnaHRGaXRQYXJlbnRDb250YWluZXIsIiUiKSgid2lkdGgiLGkud2lkdGhGaXRQYXJlbnRDb250YWluZXIsIiUiKX0saW5wdXRzOntyb3c6InJvdyIsY29sdW1u''@;'; put 'put ''OiJjb2x1bW4iLHByb3A6InByb3AiLG9yaWdpbmFsVmFsdWU6Im9yaWdpbmFsVmFsdWUiLGNlbGxQcm9wZXJ0aWVzOiJjZWxsUHJvcGVydGllcyJ9LG91dHB1dHM6e2ZpbmlzaEVkaXQ6ImZpbmlzaEVkaXQiLGNhbmNlbEVkaXQ6ImNhbmNlbEVkaXQifX0pfXJldHVybiBufSkoKTtjbGFzcyBF''@;'; put 'put ''TyBleHRlbmRzIE5EZXtzdGF0aWMgRURJVE9SX01BUktFUj1TeW1ib2woIkhvdENlbGxFZGl0b3JDb21wb25lbnQiKTt0YWJpbmRleD0tMTtkYXRhSG90SW5wdXQ9IiI7aGFuZHNvbnRhYmxlSW5wdXRDbGFzcz0hMDtvbkNsb3NlKCl7fW9uT3BlbihlKXt9c3RhdGljIFx1MDI3NWZhYz0oKCk9''@;'; put 'put ''PntsZXQgZTtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuKGV8fChlPXdhKEVPKSkpKHJ8fEVPKX19KSgpO3N0YXRpYyBcdTAyNzVkaXI9JHIoe3R5cGU6RU8saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxyKXsyJnQmJihScigidGFiaW5kZXgiLHIudGFiaW5kZXgpKCJkYXRh''@;'; put 'put ''LWhvdC1pbnB1dCIsci5kYXRhSG90SW5wdXQpLHdyKCJoYW5kc29udGFibGVJbnB1dCIsci5oYW5kc29udGFibGVJbnB1dENsYXNzKSl9LGZlYXR1cmVzOltGb119KX1mdW5jdGlvbiBMZGUobil7aWYoIW4uX2NvbXBvbmVudFJlZnx8IW4uX2VkaXRvclBsYWNlSG9sZGVyUmVmKXJldHVybjtu''@;'; put 'put ''Ll9jb21wb25lbnRSZWYuc2V0SW5wdXQoIm9yaWdpbmFsVmFsdWUiLG4ub3JpZ2luYWxWYWx1ZSksbi5fY29tcG9uZW50UmVmLnNldElucHV0KCJyb3ciLG4ucm93KSxuLl9jb21wb25lbnRSZWYuc2V0SW5wdXQoImNvbHVtbiIsbi5jb2wpLG4uX2NvbXBvbmVudFJlZi5zZXRJbnB1dCgicHJv''@;'; put 'put ''cCIsbi5wcm9wKSxuLl9jb21wb25lbnRSZWYuc2V0SW5wdXQoImNlbGxQcm9wZXJ0aWVzIixuLmNlbGxQcm9wZXJ0aWVzKTtjb25zdCBlPW4uaG90LmdldENlbGwobi5yb3csbi5jb2wpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtuLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgi''@;'; put 'put ''cGxhY2Vob2xkZXJDdXN0b21DbGFzcyIsIiIpLG4uX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJoZWlnaHQiLGU/LmhlaWdodD8/MCksbi5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoIndpZHRoIixlPy53aWR0aD8/MCksbi5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0''@;'; put 'put ''SW5wdXQoImlzVmlzaWJsZSIsITApLG4uX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJjb21wb25lbnRSZWYiLG4uX2NvbXBvbmVudFJlZiksbi5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfWZ1bmN0aW9uIEZEZShuKXtuLl9m''@;'; put 'put ''aW5pc2hFZGl0U3Vic2NyaXB0aW9uJiYobi5fZmluaXNoRWRpdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLG4uX2ZpbmlzaEVkaXRTdWJzY3JpcHRpb249dm9pZCAwKSxuLl9jYW5jZWxFZGl0U3Vic2NyaXB0aW9uJiYobi5fY2FuY2VsRWRpdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgp''@;'; put 'put ''LG4uX2NhbmNlbEVkaXRTdWJzY3JpcHRpb249dm9pZCAwKX1jbGFzcyB4VCBleHRlbmRzIE9EZXtzdGF0aWMgUkVOREVSRVJfTUFSS0VSPVN5bWJvbCgiSG90Q2VsbFJlbmRlcmVyQWR2YW5jZWRDb21wb25lbnQiKTtzdGF0aWMgXHUwMjc1ZmFjPSgoKT0+e2xldCBlO3JldHVybiBmdW5jdGlv''@;'; put 'put ''bihyKXtyZXR1cm4oZXx8KGU9d2EoeFQpKSkocnx8eFQpfX0pKCk7c3RhdGljIFx1MDI3NWNtcD1Qcih7dHlwZTp4VCxzZWxlY3RvcnM6W1siaG90LWNlbGwtcmVuZGVyZXItYWR2YW5jZWQiXV0sZmVhdHVyZXM6W0ZvXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbih0LHIpe30s''@;'; put 'put ''ZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSl9Y2xhc3MgTU8gZXh0ZW5kcyBORGV7c3RhdGljIEVESVRPUl9NQVJLRVI9U3ltYm9sKCJIb3RDZWxsRWRpdG9yQWR2YW5jZWRDb21wb25lbnQiKTtvbkZvY3VzKGUpe31wb3NpdGlvbj0iY29udGFpbmVyIjtzaG9ydGN1dHM7c2hv''@;'; put 'put ''cnRjdXRzR3JvdXA7Y29uZmlnO2FmdGVyT3BlbihlLHQpe31hZnRlckNsb3NlKGUpe31hZnRlckluaXQoZSl7fWJlZm9yZU9wZW4oZSx7fSl7fXN0YXRpYyBcdTAyNzVmYWM9KCgpPT57bGV0IGU7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybihlfHwoZT13YShNTykpKShyfHxNTyl9fSkoKTtz''@;'; put 'put ''dGF0aWMgXHUwMjc1ZGlyPSRyKHt0eXBlOk1PLGZlYXR1cmVzOltGb119KX1jb25zdCBsT3Q9WyJpbnN0YW5jZSIsInRkIiwicm93IiwiY29sIiwicHJvcCIsInZhbHVlIiwiY2VsbFByb3BlcnRpZXMiXTtmdW5jdGlvbiBQRGUobil7cmV0dXJuIG4/LlJFTkRFUkVSX01BUktFUj09PVRULlJF''@;'; put 'put ''TkRFUkVSX01BUktFUn1mdW5jdGlvbiBIRGUobil7cmV0dXJuIG4/LlJFTkRFUkVSX01BUktFUj09PXhULlJFTkRFUkVSX01BUktFUn1sZXQgVkRlPSgoKT0+e2NsYXNzIG57YXBwUmVmO2Vudmlyb25tZW50SW5qZWN0b3I7X3RkQ29tcG9uZW50UmVmcz1uZXcgV2Vha01hcDtfdGRFbWJlZGRl''@;'; put 'put ''ZFZpZXdzPW5ldyBXZWFrTWFwO19pbnN0YW5jZUNvbXBvbmVudFJlZnM9bmV3IFdlYWtNYXA7X2luc3RhbmNlRW1iZWRkZWRWaWV3cz1uZXcgV2Vha01hcDtfaG9va2VkSW5zdGFuY2VzPW5ldyBXZWFrU2V0O2NvbnN0cnVjdG9yKHQscil7dGhpcy5hcHBSZWY9dCx0aGlzLmVudmlyb25tZW50''@;'; put 'put ''SW5qZWN0b3I9cn1jcmVhdGVSZW5kZXJlckZyb21Db21wb25lbnQodCxyPXt9LGk9ITEpe2xldCBvPSExO3JldHVybihhLGwsdSxnLEUsTyxaKT0+e2NvbnN0IGVlPXt2YWx1ZTpPLGluc3RhbmNlOmEsdGQ6bCxyb3c6dSxjb2w6Zyxwcm9wOkUsY2VsbFByb3BlcnRpZXM6Wn07aWYoWi5yZW5k''@;'; put 'put ''ZXJlclByb3BzPXIsTVQuY2FsbCh0aGlzLGEsbCx1LGcsRSxPLFopLHRoaXMucmVnaXN0ZXJTd2VlcEhvb2soYSksZnVuY3Rpb24gY090KG4pe3JldHVybiEhbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4uY3JlYXRlRW1iZWRkZWRWaWV3fSh0KSl7dGhpcy5yZXBsYWNlQ2VsbENvbnRlbnQoYSxs''@;'; put 'put ''KTtjb25zdCB2ZT10aGlzLmF0dGFjaFRlbXBsYXRlVG9FbGVtZW50KHQsbCxlZSk7dGhpcy50cmFja0VtYmVkZGVkVmlldyhhLGwsdmUpfWVsc2UgUERlKHQpP3RoaXMucmVuZGVyQ29tcG9uZW50KGwsdCxlZSk6Y29uc29sZS53YXJuKCJUaGUgcHJvdmlkZWQgcmVuZGVyZXIgY29tcG9uZW50''@;'; put 'put ''IHdhcyBub3QgcmVjb2duaXplZCBhcyBhIHZhbGlkIGN1c3RvbSByZW5kZXJlci4gSXQgbXVzdCBlaXRoZXIgZXh0ZW5kIEhvdENlbGxSZW5kZXJlckNvbXBvbmVudCBvciBiZSBhIHZhbGlkIFRlbXBsYXRlUmVmLiBQbGVhc2UgZW5zdXJlIHRoYXQgeW91ciBjdXN0b20gcmVuZGVyZXIgaXMg''@;'; put 'put ''aW1wbGVtZW50ZWQgY29ycmVjdGx5IGFuZCBpbXBvcnRlZCBmcm9tIHRoZSBwcm9wZXIgc291cmNlLiIpO3JldHVybiBpJiYhbyYmUERlKHQpJiYoS3AucmVuZGVyZXJzLnJlZ2lzdGVyUmVuZGVyZXIodC5uYW1lLHQpLG89ITApLGx9fWNyZWF0ZVJlbmRlcmVyV2l0aEZhY3RvcnkodCxyPXt9''@;'; put 'put ''LGk9ITEpe2xldCBvPSExO3JldHVybiBERGUoKHtpbnN0YW5jZTphLHRkOmwscm93OnUsY29sdW1uOmcscHJvcDpFLHZhbHVlOk8sY2VsbFByb3BlcnRpZXM6Wn0pPT57Y29uc3QgZWU9e3ZhbHVlOk8saW5zdGFuY2U6YSx0ZDpsLHJvdzp1LGNvbDpnLHByb3A6RSxjZWxsUHJvcGVydGllczpa''@;'; put 'put ''fTtaLnJlbmRlcmVyUHJvcHM9cixNVC5jYWxsKHRoaXMsYSxsLHUsZyxFLE8sWiksdGhpcy5yZWdpc3RlclN3ZWVwSG9vayhhKSxIRGUodCk/dGhpcy5yZW5kZXJDb21wb25lbnQobCx0LGVlKTpjb25zb2xlLndhcm4oIlRoZSBwcm92aWRlZCByZW5kZXJlciBjb21wb25lbnQgd2FzIG5vdCBy''@;'; put 'put ''ZWNvZ25pemVkIGFzIGEgdmFsaWQgY3VzdG9tIHJlbmRlcmVyLiBJdCBtdXN0IGVpdGhlciBleHRlbmQgSG90Q2VsbFJlbmRlcmVyQWR2YW5jZWRDb21wb25lbnQuIFBsZWFzZSBlbnN1cmUgdGhhdCB5b3VyIGN1c3RvbSByZW5kZXJlciBpcyBpbXBsZW1lbnRlZCBjb3JyZWN0bHkgYW5kIGlt''@;'; put 'put ''cG9ydGVkIGZyb20gdGhlIHByb3BlciBzb3VyY2UuIiksaSYmIW8mJkhEZSh0KSYmKEMwKHQubmFtZSx0KSxvPSEwKX0pfWNsZWFudXBDb250YWluZXIodCxyKXtjb25zdCBpPXI/dGhpcy5faW5zdGFuY2VDb21wb25lbnRSZWZzLmdldChyKTp2b2lkIDAsbz1yP3RoaXMuX2luc3RhbmNlRW1i''@;'; put 'put ''ZWRkZWRWaWV3cy5nZXQocik6dm9pZCAwO3QucXVlcnlTZWxlY3RvckFsbCgidGQiKS5mb3JFYWNoKGE9Pntjb25zdCBsPXRoaXMuX3RkQ29tcG9uZW50UmVmcy5nZXQoYSk7bCYmKHRoaXMuZGVzdHJveUNvbXBvbmVudChsKSx0aGlzLl90ZENvbXBvbmVudFJlZnMuZGVsZXRlKGEpLGk/LmRl''@;'; put 'put ''bGV0ZShsKSk7Y29uc3QgdT10aGlzLl90ZEVtYmVkZGVkVmlld3MuZ2V0KGEpO3UmJih0aGlzLmRlc3Ryb3lFbWJlZGRlZFZpZXcodSksdGhpcy5fdGRFbWJlZGRlZFZpZXdzLmRlbGV0ZShhKSxvPy5kZWxldGUodSkpfSksaT8uZm9yRWFjaChhPT50aGlzLmRlc3Ryb3lDb21wb25lbnQoYSkp''@;'; put 'put ''LG8/LmZvckVhY2goYT0+dGhpcy5kZXN0cm95RW1iZWRkZWRWaWV3KGEpKSxyJiYodGhpcy5faW5zdGFuY2VDb21wb25lbnRSZWZzLmRlbGV0ZShyKSx0aGlzLl9pbnN0YW5jZUVtYmVkZGVkVmlld3MuZGVsZXRlKHIpKX1yZWdpc3RlclN3ZWVwSG9vayh0KXt0aGlzLl9ob29rZWRJbnN0YW5j''@;'; put 'put ''ZXMuaGFzKHQpfHwiZnVuY3Rpb24iIT10eXBlb2YgdD8uYWRkSG9va3x8KHRoaXMuX2hvb2tlZEluc3RhbmNlcy5hZGQodCksdC5hZGRIb29rKCJhZnRlclZpZXdSZW5kZXIiLCgpPT50aGlzLnN3ZWVwRGV0YWNoZWRWaWV3cyh0KSkpfXN3ZWVwRGV0YWNoZWRWaWV3cyh0KXtjb25zdCByPXRo''@;'; put 'put ''aXMuX2luc3RhbmNlQ29tcG9uZW50UmVmcy5nZXQodCk7cj8uZm9yRWFjaChvPT57dGhpcy5pc1ZpZXdDb25uZWN0ZWQoby5ob3N0Vmlldyl8fCh0aGlzLmRlc3Ryb3lDb21wb25lbnQobyksci5kZWxldGUobykpfSk7Y29uc3QgaT10aGlzLl9pbnN0YW5jZUVtYmVkZGVkVmlld3MuZ2V0KHQp''@;'; put 'put ''O2k/LmZvckVhY2gobz0+e3RoaXMuaXNWaWV3Q29ubmVjdGVkKG8pfHwodGhpcy5kZXN0cm95RW1iZWRkZWRWaWV3KG8pLGkuZGVsZXRlKG8pKX0pfWlzVmlld0Nvbm5lY3RlZCh0KXtyZXR1cm4gdC5yb290Tm9kZXMuc29tZShyPT4hIXI/LmlzQ29ubmVjdGVkKX1yZXBsYWNlQ2VsbENvbnRl''@;'; put 'put ''bnQodCxyKXtjb25zdCBpPXRoaXMuX3RkQ29tcG9uZW50UmVmcy5nZXQocik7aSYmKHRoaXMuZGVzdHJveUNvbXBvbmVudChpKSx0aGlzLl90ZENvbXBvbmVudFJlZnMuZGVsZXRlKHIpLHRoaXMuX2luc3RhbmNlQ29tcG9uZW50UmVmcy5nZXQodCk/LmRlbGV0ZShpKSk7Y29uc3Qgbz10aGlz''@;'; put 'put ''Ll90ZEVtYmVkZGVkVmlld3MuZ2V0KHIpO28mJih0aGlzLmRlc3Ryb3lFbWJlZGRlZFZpZXcobyksdGhpcy5fdGRFbWJlZGRlZFZpZXdzLmRlbGV0ZShyKSx0aGlzLl9pbnN0YW5jZUVtYmVkZGVkVmlld3MuZ2V0KHQpPy5kZWxldGUobykpLHIuaW5uZXJIVE1MPSIifXRyYWNrQ29tcG9uZW50''@;'; put 'put ''UmVmKHQscixpKXt0aGlzLl90ZENvbXBvbmVudFJlZnMuc2V0KHIsaSksdGhpcy5yZWdpc3RyeUZvcih0aGlzLl9pbnN0YW5jZUNvbXBvbmVudFJlZnMsdCkuYWRkKGkpfXRyYWNrRW1iZWRkZWRWaWV3KHQscixpKXt0aGlzLl90ZEVtYmVkZGVkVmlld3Muc2V0KHIsaSksdGhpcy5yZWdpc3Ry''@;'; put 'put ''eUZvcih0aGlzLl9pbnN0YW5jZUVtYmVkZGVkVmlld3MsdCkuYWRkKGkpfXJlZ2lzdHJ5Rm9yKHQscil7bGV0IGk9dC5nZXQocik7cmV0dXJuIGl8fChpPW5ldyBTZXQsdC5zZXQocixpKSksaX1hdHRhY2hUZW1wbGF0ZVRvRWxlbWVudCh0LHIsaSl7Y29uc3Qgbz10LmNyZWF0ZUVtYmVkZGVk''@;'; put 'put ''Vmlldyh7JGltcGxpY2l0OmkudmFsdWUsLi4uaX0pO3JldHVybiBvLmRldGVjdENoYW5nZXMoKSxvLnJvb3ROb2Rlcy5mb3JFYWNoKGE9PntyLmFwcGVuZENoaWxkKGEpfSksb31jcmVhdGVDb21wb25lbnQodCxyKXtjb25zdCBpPWZJKHQse2Vudmlyb25tZW50SW5qZWN0b3I6dGhpcy5lbnZp''@;'; put 'put ''cm9ubWVudEluamVjdG9yfSk7cmV0dXJuIHRoaXMuYXBwbHlJbnB1dHMoaSxyKSxpLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KGkuaG9zdFZpZXcpLGl9cmVuZGVyQ29tcG9uZW50KHQscixpKXtjb25zdCBvPXRoaXMuX3RkQ29tcG9u''@;'; put 'put ''ZW50UmVmcy5nZXQodCk7aWYobyYmby5jb21wb25lbnRUeXBlPT09ciYmdGhpcy5pc1ZpZXdDb25uZWN0ZWQoby5ob3N0VmlldykpcmV0dXJuIHRoaXMuYXBwbHlJbnB1dHMobyxpKSx2b2lkIG8uY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO3RoaXMucmVwbGFjZUNlbGxDb250''@;'; put 'put ''ZW50KGkuaW5zdGFuY2UsdCk7Y29uc3QgYT10aGlzLmNyZWF0ZUNvbXBvbmVudChyLGkpO3RoaXMuYXR0YWNoQ29tcG9uZW50VG9FbGVtZW50KGEsdCksdGhpcy50cmFja0NvbXBvbmVudFJlZihpLmluc3RhbmNlLHQsYSl9YXBwbHlJbnB1dHModCxyKXtsT3QuZm9yRWFjaChpPT57dC5zZXRJ''@;'; put 'put ''bnB1dChpLHJbaV0pfSl9YXR0YWNoQ29tcG9uZW50VG9FbGVtZW50KHQscil7dC5ob3N0Vmlldy5yb290Tm9kZXMuZm9yRWFjaChpPT57ci5hcHBlbmRDaGlsZChpKX0pfWRlc3Ryb3lDb21wb25lbnQodCl7Y29uc3Qgcj10Lmhvc3RWaWV3O3IuZGVzdHJveWVkfHwodGhpcy5hcHBSZWYuZGV0''@;'; put 'put ''YWNoVmlldyhyKSx0LmRlc3Ryb3koKSl9ZGVzdHJveUVtYmVkZGVkVmlldyh0KXt0LmRlc3Ryb3llZHx8dC5kZXN0cm95KCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKG9yKFdnKSxvcihubCkpfTtzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixm''@;'; put 'put ''YWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59KSgpO2NvbnN0IHVPdD1uZXcgU2V0KEtwLmhvb2tzLmdldFJlZ2lzdGVyZWQoKSksQkRlPVN5bWJvbCgiaG90Wm9uZVdyYXBwZWQiKTtsZXQgakRlPSgoKT0+e2NsYXNzIG57ZHluYW1pY0NvbXBvbmVudFNl''@;'; put 'put ''cnZpY2U7ZW52aXJvbm1lbnRJbmplY3RvcjtuZ1pvbmU7Y29uc3RydWN0b3IodCxyLGkpe3RoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2U9dCx0aGlzLmVudmlyb25tZW50SW5qZWN0b3I9cix0aGlzLm5nWm9uZT1pfWFwcGx5Q3VzdG9tU2V0dGluZ3ModCxyKXtjb25zdCBpPXsuLi50fTty''@;'; put 'put ''ZXR1cm4gQXJyYXkuaXNBcnJheShpLmNvbHVtbnMpJiYoaS5jb2x1bW5zPWkuY29sdW1ucy5tYXAobz0+KHsuLi5vfSkpKSx0aGlzLnVwZGF0ZUNvbHVtblJlbmRlcmVyRm9yR2l2ZW5DdXN0b21SZW5kZXJlcihpKSx0aGlzLnVwZGF0ZUNvbHVtbkVkaXRvckZvckdpdmVuQ3VzdG9tRWRpdG9y''@;'; put 'put ''KGksciksdGhpcy51cGRhdGVDb2x1bW5WYWxpZGF0b3JGb3JHaXZlbkN1c3RvbVZhbGlkYXRvcihpKSx0aGlzLndyYXBIb29rc0luTmdab25lKGkpLGl9d3JhcEhvb2tzSW5OZ1pvbmUodCl7Y29uc3Qgcj10aGlzLm5nWm9uZTtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PntpZighdU90Lmhh''@;'; put 'put ''cyhpKSlyZXR1cm47Y29uc3Qgbz10W2ldO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBvJiYhb1tCRGVdKXtjb25zdCBhPWZ1bmN0aW9uKC4uLmwpe3JldHVybiByLnJ1bigoKT0+by5hcHBseSh0aGlzLGwpKX07YVtCRGVdPSEwLHRbaV09YX19KX11cGRhdGVDb2x1bW5SZW5kZXJlckZvckdpdmVu''@;'; put 'put ''Q3VzdG9tUmVuZGVyZXIodCl7QXJyYXkuaXNBcnJheSh0Py5jb2x1bW5zKSYmdD8uY29sdW1ucz8uZmlsdGVyKHI9PnRoaXMuaXNDdXN0b21SZW5kZXJlcihyLnJlbmRlcmVyKSk/LmZvckVhY2gocj0+e2NvbnN0IGk9ci5yZW5kZXJlcixvPXIucmVuZGVyZXJQcm9wcz8/e307dGhpcy5pc0Fk''@;'; put 'put ''dmFuY2VkUmVuZGVyZXJDb21wb25lbnRSZWZUeXBlKGkpP3IucmVuZGVyZXI9dGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5jcmVhdGVSZW5kZXJlcldpdGhGYWN0b3J5KGksbyk6KHRoaXMuaXNSZW5kZXJlckNvbXBvbmVudFJlZlR5cGUoaSl8fHRoaXMuaXNUZW1wbGF0ZVJlZihpKSkm''@;'; put 'put ''JihyLnJlbmRlcmVyPXRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuY3JlYXRlUmVuZGVyZXJGcm9tQ29tcG9uZW50KGksbykpfSl9dXBkYXRlQ29sdW1uRWRpdG9yRm9yR2l2ZW5DdXN0b21FZGl0b3IodCxyKXtBcnJheS5pc0FycmF5KHQ/LmNvbHVtbnMpJiZ0LmNvbHVtbnMuZm9yRWFj''@;'; put 'put ''aCgoaSxvKT0+e2NvbnN0IGE9dGhpcy5pc0FkdmFuY2VkRWRpdG9yQ29tcG9uZW50UmVmVHlwZShpLmVkaXRvciksbD10aGlzLmlzRWRpdG9yQ29tcG9uZW50UmVmVHlwZShpLmVkaXRvcik7aWYoIWEmJiFsKXJldHVybjtjb25zdCB1PWkuZWRpdG9yLEU9aSxPPXRoaXMucmV1c2FibGVFZGl0''@;'; put 'put ''b3JSZWYocj8uW29dLGksdSk/P2ZJKHUse2Vudmlyb25tZW50SW5qZWN0b3I6dGhpcy5lbnZpcm9ubWVudEluamVjdG9yfSk7RS5fZWRpdG9yQ29tcG9uZW50UmVmZXJlbmNlPU8sYT9pLmVkaXRvcj0obj0+SURlKHtwb3NpdGlvbjpuLmluc3RhbmNlLnBvc2l0aW9uLHNob3J0Y3V0czpuLmlu''@;'; put 'put ''c3RhbmNlLnNob3J0Y3V0cyxjb25maWc6bi5pbnN0YW5jZS5jb25maWcsaW5pdChlKXtlLl9jb21wb25lbnRSZWY9bixlLl9lZGl0b3JQbGFjZUhvbGRlclJlZj12b2lkIDAsZS5fZmluaXNoRWRpdFN1YnNjcmlwdGlvbj12b2lkIDAsZS5fY2FuY2VsRWRpdFN1YnNjcmlwdGlvbj12b2lkIDAs''@;'; put 'put ''ZnVuY3Rpb24gaU90KG4sZSl7ZSYmKG4uX2VkaXRvclBsYWNlSG9sZGVyUmVmPWZJKExEZSx7ZW52aXJvbm1lbnRJbmplY3RvcjplfSkpfShlLGUuaG90Ll9hbmd1bGFyRW52aXJvbm1lbnRJbmplY3RvciksZS5pbnB1dD1lLl9lZGl0b3JQbGFjZUhvbGRlclJlZj8ubG9jYXRpb24ubmF0aXZl''@;'; put 'put ''RWxlbWVudD8/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZS5fYWZ0ZXJSb3dSZXNpemVDYWxsYmFjaz0oKT0+e2UuaXNPcGVuZWQoKSYmTGRlKGUpfSxlLl9hZnRlckNvbHVtblJlc2l6ZUNhbGxiYWNrPSgpPT57ZS5pc09wZW5lZCgpJiZMZGUoZSl9LGUuX2FmdGVyRGVzdHJveUNh''@;'; put 'put ''bGxiYWNrPSgpPT57RkRlKGUpLGUuX2VkaXRvclBsYWNlSG9sZGVyUmVmJiZlLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5kZXN0cm95KCl9LGUuaG90LmFkZEhvb2soImFmdGVyUm93UmVzaXplIixlLl9hZnRlclJvd1Jlc2l6ZUNhbGxiYWNrKSxlLmhvdC5hZGRIb29rKCJhZnRlckNvbHVtblJl''@;'; put 'put ''c2l6ZSIsZS5fYWZ0ZXJDb2x1bW5SZXNpemVDYWxsYmFjayksZS5ob3QuYWRkSG9vaygiYWZ0ZXJEZXN0cm95IixlLl9hZnRlckRlc3Ryb3lDYWxsYmFjayl9LGFmdGVySW5pdDplPT5lLl9jb21wb25lbnRSZWYuaW5zdGFuY2UuYWZ0ZXJJbml0Py4oZSksYmVmb3JlT3BlbjooZSx0KT0+e0ZE''@;'; put 'put ''ZShlKSxMZGUoZSksZS5fZmluaXNoRWRpdFN1YnNjcmlwdGlvbj1lLl9jb21wb25lbnRSZWYuaW5zdGFuY2UuZmluaXNoRWRpdC5waXBlKE1wKDEpKS5zdWJzY3JpYmUoKCk9PntlLmZpbmlzaEVkaXRpbmcoKX0pLGUuX2NhbmNlbEVkaXRTdWJzY3JpcHRpb249ZS5fY29tcG9uZW50UmVmLmlu''@;'; put 'put ''c3RhbmNlLmNhbmNlbEVkaXQucGlwZShNcCgxKSkuc3Vic2NyaWJlKCgpPT57ZS5jYW5jZWxDaGFuZ2VzKCl9KSxlLl9jb21wb25lbnRSZWYuaW5zdGFuY2UuYmVmb3JlT3Blbj8uKGUsdCl9LGFmdGVyT3BlbjooZSx0KT0+e2UuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5hZnRlck9wZW4/Lihl''@;'; put 'put ''LHQpfSxvbkZvY3VzOmU9PmUuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5vbkZvY3VzPy4oZSksYWZ0ZXJDbG9zZTplPT57KGZ1bmN0aW9uIG9PdChuKXtuLl9lZGl0b3JQbGFjZUhvbGRlclJlZiYmKG4uX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJ0b3AiLHZvaWQgMCksbi5fZWRp''@;'; put 'put ''dG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoImxlZnQiLHZvaWQgMCksbi5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoImhlaWdodCIsdm9pZCAwKSxuLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgid2lkdGgiLHZvaWQgMCksbi5fZWRpdG9yUGxhY2VIb2xkZXJSZWYu''@;'; put 'put ''c2V0SW5wdXQoImlzVmlzaWJsZSIsITEpLG4uX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJjb21wb25lbnRSZWYiLHZvaWQgMCkpfSkoZSksZS5fZWRpdG9yUGxhY2VIb2xkZXJSZWY/LmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSxlLl9lZGl0b3JQbGFjZUhvbGRl''@;'; put 'put ''clJlZj8uaW5zdGFuY2UuZGV0YWNoRWRpdG9yKCksZS5fY29tcG9uZW50UmVmLmluc3RhbmNlLmFmdGVyQ2xvc2U/LihlKX0sZ2V0VmFsdWU6ZT0+ZS5fY29tcG9uZW50UmVmLmluc3RhbmNlLmdldFZhbHVlKCksc2V0VmFsdWU6KGUsdCk9PntlLnZhbHVlPXQsZS5fY29tcG9uZW50UmVmLmlu''@;'; put 'put ''c3RhbmNlLnNldFZhbHVlKHQpLGUuX2NvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9fSkpKE8pOihFLl9lbnZpcm9ubWVudEluamVjdG9yPXRoaXMuZW52aXJvbm1lbnRJbmplY3RvcixpLmVkaXRvcj1uT3QpfSl9cmV1c2FibGVFZGl0b3JSZWYodCxyLGkp''@;'; put 'put ''e2NvbnN0IG89dD8uX2VkaXRvckNvbXBvbmVudFJlZmVyZW5jZTtyZXR1cm4gbyYmby5jb21wb25lbnRUeXBlPT09aSYmdD8uZGF0YT09PXIuZGF0YT9vOnZvaWQgMH11cGRhdGVDb2x1bW5WYWxpZGF0b3JGb3JHaXZlbkN1c3RvbVZhbGlkYXRvcih0KXtBcnJheS5pc0FycmF5KHQ/LmNvbHVt''@;'; put 'put ''bnMpJiZ0Py5jb2x1bW5zPy5maWx0ZXIocj0+dGhpcy5pc0N1c3RvbVZhbGlkYXRvckZuKHIudmFsaWRhdG9yKSk/LmZvckVhY2gocj0+e2NvbnN0IGk9ci52YWxpZGF0b3I7ci52YWxpZGF0b3I9KG8sYSk9PnthKGkobykpfX0pfWlzQ3VzdG9tVmFsaWRhdG9yRm4odCl7cmV0dXJuImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIHQmJjE9PT10Lmxlbmd0aH1pc0VkaXRvckNvbXBvbmVudFJlZlR5cGUodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJiEhdD8uXHUwMjc1Y21wJiZ0Py5FRElUT1JfTUFSS0VSPT09RU8uRURJVE9SX01BUktFUn1pc0FkdmFuY2VkRWRpdG9yQ29tcG9uZW50UmVm''@;'; put 'put ''VHlwZSh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmISF0Py5cdTAyNzVjbXAmJnQ/LkVESVRPUl9NQVJLRVI9PT1NTy5FRElUT1JfTUFSS0VSfWlzUmVuZGVyZXJDb21wb25lbnRSZWZUeXBlKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiYhIXQ/Llx1MDI3NWNtcCYmdD8u''@;'; put 'put ''UkVOREVSRVJfTUFSS0VSPT09VFQuUkVOREVSRVJfTUFSS0VSfWlzQWR2YW5jZWRSZW5kZXJlckNvbXBvbmVudFJlZlR5cGUodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJiEhdD8uXHUwMjc1Y21wJiZ0Py5SRU5ERVJFUl9NQVJLRVI9PT14VC5SRU5ERVJFUl9NQVJLRVJ9aXNUZW1w''@;'; put 'put ''bGF0ZVJlZih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY3JlYXRlRW1iZWRkZWRWaWV3fWlzQ3VzdG9tUmVuZGVyZXIodCl7cmV0dXJuIHRoaXMuaXNSZW5kZXJlckNvbXBvbmVudFJlZlR5cGUodCl8fHRoaXMuaXNUZW1wbGF0ZVJlZih0KXx8dGhpcy5pc0FkdmFuY2VkUmVu''@;'; put 'put ''ZGVyZXJDb21wb25lbnRSZWZUeXBlKHQpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShvcihWRGUpLG9yKG5sKSxvcihnYSkpfTtzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSl9cmV0dXJuIG59KSgpO2NvbnN0''@;'; put 'put ''IGhPdD1uZXcgRXIoIkhPVF9HTE9CQUxfQ09ORklHIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+KHt9KX0pO2xldCBmT3Q9KCgpPT57Y2xhc3MgbntkZWZhdWx0Q29uZmlnPXt9O2NvbmZpZ1N1YmplY3Q9bmV3ICRpKHRoaXMuZGVmYXVsdENvbmZpZyk7Z2V0IGNvbmZpZyQoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jb25maWdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpfWNvbnN0cnVjdG9yKHQpe3RoaXMuZGVmYXVsdENvbmZpZz17Li4udGhpcy5kZWZhdWx0Q29uZmlnLC4uLnR9LHRoaXMuY29uZmlnU3ViamVjdC5uZXh0KHRoaXMuZGVmYXVsdENvbmZpZyl9c2V0Q29uZmlnKHQpe3RoaXMu''@;'; put 'put ''Y29uZmlnU3ViamVjdC5uZXh0KHsuLi50aGlzLmRlZmF1bHRDb25maWcsLi4udH0pfWdldENvbmZpZygpe3JldHVybiB0aGlzLmNvbmZpZ1N1YmplY3QudmFsdWV9cmVzZXRDb25maWcoKXt0aGlzLmNvbmZpZ1N1YmplY3QubmV4dCh7Li4udGhpcy5kZWZhdWx0Q29uZmlnfSl9c3RhdGljIFx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKG9yKGhPdCkpfTtzdGF0aWMgXHUwMjc1cHJvdj1Kbih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59KSgpLEw3PSgoKT0+e2NsYXNzIG57X2hvdFNldHRpbmdzUmVzb2x2''@;'; put 'put ''ZXI7X2hvdENvbmZpZztuZ1pvbmU7ZW52aXJvbm1lbnRJbmplY3RvcjtfZHluYW1pY0NvbXBvbmVudFNlcnZpY2U7ZGF0YT1udWxsO3NldHRpbmdzPXt9O2NvbnRhaW5lcjtfX2hvdEluc3RhbmNlPW51bGw7X2Rlc3Ryb3lSZWY9c24oTTIpO2NvbnN0cnVjdG9yKHQscixpLG8sYSl7dGhpcy5f''@;'; put 'put ''aG90U2V0dGluZ3NSZXNvbHZlcj10LHRoaXMuX2hvdENvbmZpZz1yLHRoaXMubmdab25lPWksdGhpcy5lbnZpcm9ubWVudEluamVjdG9yPW8sdGhpcy5fZHluYW1pY0NvbXBvbmVudFNlcnZpY2U9YX1nZXQgaG90SW5zdGFuY2UoKXtyZXR1cm4gdGhpcy5fX2hvdEluc3RhbmNlJiZ0aGlzLl9f''@;'; put 'put ''aG90SW5zdGFuY2UuaXNEZXN0cm95ZWQ/KGNvbnNvbGUud2FybigiVGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudCB3YXMgZGVzdHJveWVkIGFuZCBjYW5ub3QgYmUgdXNlZCBwcm9wZXJseS4iKSxudWxsKTp0aGlzLl9faG90SW5zdGFuY2V9c2V0IGhv''@;'; put 'put ''dEluc3RhbmNlKHQpe3RoaXMuX19ob3RJbnN0YW5jZT10fW5nQWZ0ZXJWaWV3SW5pdCgpe2xldCB0PXRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIuYXBwbHlDdXN0b21TZXR0aW5ncyh0aGlzLnNldHRpbmdzKTtjb25zdCByPXRoaXMuZ2V0TmVnb3RpYXRlZFNldHRpbmdzKHQpO3Q9ey4uLnQs''@;'; put 'put ''Li4uciwuLi5udWxsIT10aGlzLmRhdGE/e2RhdGE6dGhpcy5kYXRhfTp7fX0sdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmhvdEluc3RhbmNlPW5ldyBLcC5Db3JlKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsdCksdGhpcy5ob3RJbnN0YW5jZS5fYW5ndWxh''@;'; put 'put ''ckVudmlyb25tZW50SW5qZWN0b3I9dGhpcy5lbnZpcm9ubWVudEluamVjdG9yLHRoaXMuaG90SW5zdGFuY2UuaW5pdCgpfSksdGhpcy5faG90Q29uZmlnLmNvbmZpZyQucGlwZShmdW5jdGlvbiBYTHQobil7cmV0dXJuIHN1KChlLHQpPT5uPD10KX0oMSksZnVuY3Rpb24gdXhlKG4pe258fChu''@;'; put 'put ''PXNuKE0yKSk7Y29uc3QgZT1uZXcgaG8odD0+e2lmKCFuLmRlc3Ryb3llZClyZXR1cm4gbi5vbkRlc3Ryb3kodC5uZXh0LmJpbmQodCkpO3QubmV4dCgpfSk7cmV0dXJuIHQ9PnQucGlwZSh2MChlKSl9KHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoaT0+e2lmKHRoaXMuaG90SW5zdGFu''@;'; put 'put ''Y2Upe2NvbnN0IG89dGhpcy5nZXROZWdvdGlhdGVkU2V0dGluZ3ModGhpcy5zZXR0aW5ncyk7dGhpcy51cGRhdGVIb3RUYWJsZShvKX19KX1uZ09uQ2hhbmdlcyh0KXtpZihudWxsIT09dGhpcy5ob3RJbnN0YW5jZSl7aWYodC5zZXR0aW5ncyYmIXQuc2V0dGluZ3MuZmlyc3RDaGFuZ2Upe2Nv''@;'; put 'put ''bnN0IHI9dGhpcy5fX2hvdEluc3RhbmNlPy5nZXRTZXR0aW5ncygpLmNvbHVtbnMsaT1BcnJheS5pc0FycmF5KHIpP3I6dm9pZCAwLG89dGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5hcHBseUN1c3RvbVNldHRpbmdzKHQuc2V0dGluZ3MuY3VycmVudFZhbHVlLGkpO2lmKHRoaXMudXBkYXRl''@;'; put 'put ''SG90VGFibGUobyksaSYmQXJyYXkuaXNBcnJheShvLmNvbHVtbnMpKXtjb25zdCBhPW5ldyBTZXQoby5jb2x1bW5zLm1hcChsPT5sLl9lZGl0b3JDb21wb25lbnRSZWZlcmVuY2UpLmZpbHRlcihsPT4hIWwpKTtpLmZvckVhY2gobD0+e2wuX2VkaXRvckNvbXBvbmVudFJlZmVyZW5jZSYmIWEu''@;'; put 'put ''aGFzKGwuX2VkaXRvckNvbXBvbmVudFJlZmVyZW5jZSkmJmwuX2VkaXRvckNvbXBvbmVudFJlZmVyZW5jZS5kZXN0cm95KCl9KX19dC5kYXRhJiYhdC5kYXRhLmZpcnN0Q2hhbmdlJiZ0aGlzLmhvdEluc3RhbmNlPy51cGRhdGVEYXRhKHQuZGF0YS5jdXJyZW50VmFsdWUpfX1uZ09uRGVzdHJv''@;'; put 'put ''eSgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aWYoIXRoaXMuX19ob3RJbnN0YW5jZXx8dGhpcy5fX2hvdEluc3RhbmNlLmlzRGVzdHJveWVkKXJldHVybjt0aGlzLmNvbnRhaW5lciYmdGhpcy5fZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuY2xlYW51cENvbnRhaW5lcih0''@;'; put 'put ''aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LHRoaXMuX19ob3RJbnN0YW5jZSk7Y29uc3QgdD10aGlzLl9faG90SW5zdGFuY2UuZ2V0U2V0dGluZ3MoKS5jb2x1bW5zO3QmJkFycmF5LmlzQXJyYXkodCkmJnQuZm9yRWFjaChyPT57ci5fZWRpdG9yQ29tcG9uZW50UmVmZXJlbmNlJiZyLl9l''@;'; put 'put ''ZGl0b3JDb21wb25lbnRSZWZlcmVuY2UuZGVzdHJveSgpfSksdGhpcy5fX2hvdEluc3RhbmNlLmRlc3Ryb3koKX0pfXVwZGF0ZUhvdFRhYmxlKHQpe2lmKCF0aGlzLmhvdEluc3RhbmNlKXJldHVybjtjb25zdCByPW5ldyBTZXQodGhpcy5ob3RJbnN0YW5jZS5nZXRTZXR0aW5ncygpPy5faW5p''@;'; put 'put ''dE9ubHlTZXR0aW5ncz8/W10pLGk9e307Zm9yKGNvbnN0IG8gb2YgT2JqZWN0LmtleXModCkpci5oYXMobyl8fChpW29dPXRbb10pO3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5ob3RJbnN0YW5jZT8udXBkYXRlU2V0dGluZ3MoaSwhMSl9KX1nZXROZWdvdGlhdGVk''@;'; put 'put ''U2V0dGluZ3ModCl7Y29uc3Qgcj10aGlzLl9ob3RDb25maWcuZ2V0Q29uZmlnKCksaT17fTtpLmxpY2Vuc2VLZXk9dC5saWNlbnNlS2V5Pz9yLmxpY2Vuc2UsaS5sYW5ndWFnZT10Lmxhbmd1YWdlPz9yLmxhbmd1YWdlO2NvbnN0IG89dC50aGVtZT8/ci50aGVtZSxhPXQudGhlbWVOYW1lPz9y''@;'; put 'put ''LnRoZW1lTmFtZTtyZXR1cm4gdm9pZCAwIT09bz9pLnRoZW1lPW86YSYmKGkudGhlbWVOYW1lPWEpLHRoaXMuX19ob3RJbnN0YW5jZXx8KGkubGF5b3V0RGlyZWN0aW9uPXQubGF5b3V0RGlyZWN0aW9uPz9yLmxheW91dERpcmVjdGlvbiksaX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIp''@;'; put 'put ''e3JldHVybiBuZXcocnx8bikoemUoakRlKSx6ZShmT3QpLHplKGdhKSx6ZShubCksemUoVkRlKSl9O3N0YXRpYyBcdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1siaG90LXRhYmxlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihyLGkpe2lmKDEmciYmV28odE90LDUpLDImcil7bGV0IG87''@;'; put 'put ''Y2kobz11aSgpKSYmKGkuY29udGFpbmVyPW8uZmlyc3QpfX0saW5wdXRzOntkYXRhOiJkYXRhIixzZXR0aW5nczoic2V0dGluZ3MifSxmZWF0dXJlczpbYm8oW2pEZV0pLGl1XSxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY29udGFpbmVyIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHIsaSl7''@;'; put 'put ''MSZyJiZEaigwLCJkaXYiLG51bGwsMCl9LHN0eWxlczpbIjpob3N0e2Rpc3BsYXk6YmxvY2t9XG4iXSxlbmNhcHN1bGF0aW9uOjJ9KX1yZXR1cm4gbn0pKCksTHc9KCgpPT57Y2xhc3MgbntzdGF0aWMgdmVyc2lvbj0iMTguMC4wIjtzdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVy''@;'; put 'put ''biBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVtb2Q9R2koe3R5cGU6bn0pO3N0YXRpYyBcdTAyNzVpbmo9bWkoe30pfXJldHVybiBufSkoKTtjb25zdCBVRGU9ImhhbmRzb250YWJsZUVkaXRvciI7Y2xhc3MgT2RlIGV4dGVuZHMgZF97c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJo''@;'; put 'put ''YW5kc29udGFibGUifW9wZW4oKXtzdXBlci5vcGVuKCk7Y29uc3QgZT10aGlzLmh0Q29udGFpbmVyLnN0eWxlO3RoaXMuaHRFZGl0b3ImJih0aGlzLmh0RWRpdG9yLnJvb3RQb3J0YWxFbGVtZW50PW51bGwsdGhpcy5odEVkaXRvci5kZXN0cm95KCksZS53aWR0aD0iIixlLmhlaWdodD0iIixl''@;'; put 'put ''Lm92ZXJmbG93PSIiKSwibm9uZSI9PT1lLmRpc3BsYXkmJihlLmRpc3BsYXk9IiIpLHRoaXMuaHRFZGl0b3I9bmV3IHRoaXMuaG90LmNvbnN0cnVjdG9yKHRoaXMuaHRDb250YWluZXIsdGhpcy5odE9wdGlvbnMpLHRoaXMuaHRFZGl0b3Iucm9vdFBvcnRhbEVsZW1lbnQ9dGhpcy5ob3Qucm9v''@;'; put 'put ''dFBvcnRhbEVsZW1lbnQsdGhpcy5odEVkaXRvci5pbml0KCksdGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS5kaXNwbGF5PSIiLHRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0P3RoaXMuaHRFZGl0b3Iuc2VsZWN0Q2VsbCgwLDApOnRoaXMuaHRFZGl0b3IuZGVzZWxlY3RDZWxsKCks''@;'; put 'put ''dkwodGhpcy5URVhUQVJFQSwwLHRoaXMuVEVYVEFSRUEudmFsdWUubGVuZ3RoKSx0aGlzLmh0RWRpdG9yLnVwZGF0ZVNldHRpbmdzKHt3aWR0aDp0aGlzLmdldFRhcmdldERyb3Bkb3duV2lkdGgoKSxoZWlnaHQ6dGhpcy5nZXRUYXJnZXREcm9wZG93bkhlaWdodCgpfSksdGhpcy5yZWZyZXNo''@;'; put 'put ''RGltZW5zaW9ucygpLHRoaXMuZmxpcERyb3Bkb3duVmVydGljYWxseUlmTmVlZGVkKCksdGhpcy5mbGlwRHJvcGRvd25Ib3Jpem9udGFsbHlJZk5lZWRlZCgpfWNsb3NlKCl7dGhpcy5odEVkaXRvciYmKHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUuZGlzcGxheT0ibm9uZSIpLHRo''@;'; put 'put ''aXMucmVtb3ZlSG9va3NCeUtleSgiYmVmb3JlS2V5RG93biIpLHN1cGVyLmNsb3NlKCl9cHJlcGFyZShlLHQscixpLG8sYSl7c3VwZXIucHJlcGFyZShlLHQscixpLG8sYSk7Y29uc3R7aG90Omx9PXRoaXMsdT10aGlzLnNldFZhbHVlLmJpbmQodGhpcyksZz17c3RhcnRSb3dzOjAsc3RhcnRD''@;'; put 'put ''b2xzOjAsbWluUm93czowLG1pbkNvbHM6MCxjbGFzc05hbWU6Imxpc3Rib3giLGNvcHlQYXN0ZTohMSxhdXRvQ29sdW1uU2l6ZTohMSxhdXRvUm93U2l6ZTohMSxyZWFkT25seTohMCxmaWxsSGFuZGxlOiExLGF1dG9XcmFwQ29sOiExLGF1dG9XcmFwUm93OiExLGFyaWFUYWdzOiExLHRoZW1l''@;'; put 'put ''TmFtZTp0aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCksYWZ0ZXJPbkNlbGxNb3VzZURvd24oRSxPKXtpZihPLnJvdzwwfHxPLmNvbDwwKXJldHVybjtjb25zdCBaPXRoaXMuZ2V0RGF0YUF0Q2VsbChPLnJvdyxPLmNvbCk7dm9pZCAwIT09WiYmdShaKSxsLmRlc3Ryb3lFZGl0b3IoKX0s''@;'; put 'put ''cHJldmVudFdoZWVsOiEwLGxheW91dERpcmVjdGlvbjp0aGlzLmhvdC5pc1J0bCgpPyJydGwiOiJsdHIifTt0aGlzLmNlbGxQcm9wZXJ0aWVzLmhhbmRzb250YWJsZSYmWWQoZyxhLmhhbmRzb250YWJsZSksdGhpcy5odE9wdGlvbnM9Z31iZWdpbkVkaXRpbmcoZSx0KXtjb25zdCByPXRoaXMu''@;'; put 'put ''aG90LmdldFNldHRpbmdzKCkub25CZWdpbkVkaXRpbmc7ciYmITE9PT1yKCl8fHN1cGVyLmJlZ2luRWRpdGluZyhlLHQpfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKTtjb25zdCBlPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTtlLmNs''@;'; put 'put ''YXNzTmFtZT0iaGFuZHNvbnRhYmxlRWRpdG9yIix0aGlzLlRFWFRBUkVBX1BBUkVOVC5hcHBlbmRDaGlsZChlKSx0aGlzLmh0Q29udGFpbmVyPWUsdGhpcy5hc3NpZ25Ib29rcygpfWZpbmlzaEVkaXRpbmcoZSx0LHIpe2lmKHRoaXMuaHRFZGl0b3ImJnRoaXMuaHRFZGl0b3IuaXNMaXN0ZW5p''@;'; put 'put ''bmcoKSYmdGhpcy5ob3QubGlzdGVuKCksdGhpcy5odEVkaXRvciYmdGhpcy5odEVkaXRvci5nZXRTZWxlY3RlZEFjdGl2ZSgpKXtjb25zdCBpPXRoaXMuaHRFZGl0b3IuZ2V0VmFsdWUoKTt2b2lkIDAhPT1pJiZ0aGlzLnNldFZhbHVlKGkpfXN1cGVyLmZpbmlzaEVkaXRpbmcoZSx0LHIpfWZs''@;'; put 'put ''aXBEcm9wZG93blZlcnRpY2FsbHlJZk5lZWRlZCgpe2NvbnN0e3ZpZXc6ZX09dGhpcy5ob3QsdD10aGlzLmdldEVkaXRlZENlbGxSZWN0KCk7aWYoIXQpcmV0dXJue2lzRmxpcHBlZDohMSxzcGFjZUFib3ZlOjAsc3BhY2VCZWxvdzowfTtsZXQgcj10LnRvcDtpZihlLmlzVmVydGljYWxseVNj''@;'; put 'put ''cm9sbGFibGVCeVdpbmRvdygpKXtjb25zdCBsPWUuZ2V0VGFibGVPZmZzZXQoKS50b3AtdGhpcy5ob3Qucm9vdFdpbmRvdy5zY3JvbGxZO3I9TWF0aC5tYXgocitsLDApfWNvbnN0IGk9dGhpcy5nZXREcm9wZG93bkhlaWdodCgpLG89ZS5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1yLXQuaGVpZ2h0''@;'; put 'put ''LGE9aT5vJiZyPm8rdC5oZWlnaHQ7cmV0dXJuIGE/dGhpcy5mbGlwRHJvcGRvd25WZXJ0aWNhbGx5KCk6dGhpcy51bmZsaXBEcm9wZG93blZlcnRpY2FsbHkoKSx7aXNGbGlwcGVkOmEsc3BhY2VBYm92ZTpyLHNwYWNlQmVsb3c6b319ZmxpcERyb3Bkb3duVmVydGljYWxseSgpe2NvbnN0IGU9''@;'; put 'put ''dGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZTtlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZS50b3A9LXRoaXMuZ2V0RHJvcGRvd25IZWlnaHQoKSsicHgiLHRoaXMuaXNGbGlwcGVkVmVydGljYWxseT0hMH11bmZsaXBEcm9wZG93blZlcnRpY2FsbHkoKXtjb25zdCBlPXRoaXMuaHRFZGl0''@;'; put 'put ''b3Iucm9vdEVsZW1lbnQuc3R5bGU7ZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGUudG9wPSIiLHRoaXMuaXNGbGlwcGVkVmVydGljYWxseT0hMX1mbGlwRHJvcGRvd25Ib3Jpem9udGFsbHlJZk5lZWRlZCgpe2NvbnN0e3ZpZXc6ZX09dGhpcy5ob3QsdD10aGlzLmdldEVkaXRlZENlbGxSZWN0KCk7''@;'; put 'put ''aWYoIXQpcmV0dXJue2lzRmxpcHBlZDohMSxzcGFjZUlubGluZVN0YXJ0OjAsc3BhY2VJbmxpbmVFbmQ6MH07bGV0IHI9dC5zdGFydCt0LndpZHRoLGk9ZS5nZXRXb3Jrc3BhY2VXaWR0aCgpO2lmKGUuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSl7Y29uc3QgdT1lLmdldFRh''@;'; put 'put ''YmxlT2Zmc2V0KCkubGVmdC10aGlzLmhvdC5yb290V2luZG93LnNjcm9sbFg7cj1NYXRoLm1heChyK3UsMCksaT10aGlzLmhvdC5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRofWNvbnN0IG89dGhpcy5nZXREcm9wZG93bldpZHRoKCksYT1pLXIrdC53aWR0aCxsPW8+''@;'; put 'put ''YSYmcj5hO3JldHVybiBsP3RoaXMuZmxpcERyb3Bkb3duSG9yaXpvbnRhbGx5KCk6dGhpcy51bmZsaXBEcm9wZG93bkhvcml6b250YWxseSgpLHtpc0ZsaXBwZWQ6bCxzcGFjZUlubGluZVN0YXJ0OnIsc3BhY2VJbmxpbmVFbmQ6YX19ZmxpcERyb3Bkb3duSG9yaXpvbnRhbGx5KCl7Y29uc3Qg''@;'; put 'put ''ZT10aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLHt3aWR0aDp0fT10aGlzLmdldEVkaXRlZENlbGxSZWN0KCk/P3t3aWR0aDowfTtlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZVt0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQiXT0tKHRoaXMuZ2V0RHJvcGRvd25XaWR0aCgpLXQp''@;'; put 'put ''KyJweCIsdGhpcy5pc0ZsaXBwZWRIb3Jpem9udGFsbHk9ITB9dW5mbGlwRHJvcGRvd25Ib3Jpem9udGFsbHkoKXtjb25zdCBlPXRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGU7ZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGVbdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09IiIs''@;'; put 'put ''dGhpcy5pc0ZsaXBwZWRIb3Jpem9udGFsbHk9ITF9Z2V0RHJvcGRvd25IZWlnaHQoKXtyZXR1cm4gdGhpcy5odEVkaXRvci5nZXRUYWJsZUhlaWdodCgpfWdldERyb3Bkb3duV2lkdGgoKXtyZXR1cm4gdGhpcy5odEVkaXRvci5nZXRUYWJsZVdpZHRoKCl9Z2V0VGFyZ2V0RHJvcGRvd25XaWR0''@;'; put 'put ''aCgpe3JldHVybiB0aGlzLmh0RWRpdG9yLnZpZXcuZ2V0VGFibGVXaWR0aCgpfWdldFRhcmdldERyb3Bkb3duSGVpZ2h0KCl7cmV0dXJuIHRoaXMuaHRFZGl0b3Iudmlldy5nZXRUYWJsZUhlaWdodCgpKzF9YXNzaWduSG9va3MoKXt0aGlzLmhvdC5hZGRIb29rKCJhZnRlckRlc3Ryb3kiLCgp''@;'; put 'put ''PT57dGhpcy5odEVkaXRvciYmKHRoaXMuaHRFZGl0b3Iucm9vdFBvcnRhbEVsZW1lbnQ9bnVsbCx0aGlzLmh0RWRpdG9yLmRlc3Ryb3koKSl9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclNldFRoZW1lIiwoZSx0KT0+e3R8fHRoaXMuY2xvc2UoKX0pfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29u''@;'; put 'put ''c3QgdD10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKTtzdXBlci5yZWdpc3RlclNob3J0Y3V0cygpO2NvbnN0IGk9KG8sYSk9Pntjb25zdCBsPXRoaXMuaHRFZGl0b3I7aWYodm9pZCAwIT09byYmKG88MHx8dGhpcy5pc0ZsaXBwZWRWZXJ0aWNhbGx5''@;'; put 'put ''JiZvPmwuY291bnRSb3dzKCktMT9sLmRlc2VsZWN0Q2VsbCgpOmwuc2VsZWN0Q2VsbChvLDApLGwuZ2V0RGF0YSgpLmxlbmd0aCkpcmV0dXJuIGEucHJldmVudERlZmF1bHQoKSxGMyhhKSx0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLlRFWFRBUkVBLmZvY3VzKCksITF9O3QuYWRkU2hvcnRjdXRz''@;'; put 'put ''KFt7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOm89Pntjb25zdCBhPXRoaXMuaHRFZGl0b3I7bGV0IGwsdTtpZighYS5nZXRTZWxlY3RlZEFjdGl2ZSgpJiZ0aGlzLmlzRmxpcHBlZFZlcnRpY2FsbHkpbD1hLmNvdW50Um93cygpLTE7ZWxzZSBpZihhLmdldFNlbGVjdGVkQWN0aXZlKCkp''@;'; put 'put ''e2NvbnN0IGc9YS5nZXRTZWxlY3RlZEFjdGl2ZSgpO3RoaXMuaXNGbGlwcGVkVmVydGljYWxseT8odT1nWzBdLGw9TWF0aC5tYXgoMCx1LTEpKToodT1nWzBdLGw9dS0xKX1yZXR1cm4gaShsLG8pfSxwcmV2ZW50RGVmYXVsdDohMX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOm89''@;'; put 'put ''Pntjb25zdCBhPXRoaXMuaHRFZGl0b3I7bGV0IGwsdTtpZihhLmdldFNlbGVjdGVkQWN0aXZlKCl8fHRoaXMuaXNGbGlwcGVkVmVydGljYWxseSl7aWYoYS5nZXRTZWxlY3RlZEFjdGl2ZSgpKXtjb25zdCBnPWEuZ2V0U2VsZWN0ZWRBY3RpdmUoKTtpZih0aGlzLmlzRmxpcHBlZFZlcnRpY2Fs''@;'; put 'put ''bHkpbD1nWzBdKzE7ZWxzZSBpZighdGhpcy5pc0ZsaXBwZWRWZXJ0aWNhbGx5KXtjb25zdCBFPWEuY291bnRSb3dzKCktMTt1PWdbMF0sbD1NYXRoLm1pbihFLHUrMSl9fX1lbHNlIGw9MDtyZXR1cm4gaShsLG8pfSxwcmV2ZW50RGVmYXVsdDohMX1dLHtncm91cDpVRGUscmVsYXRpdmVUb0dy''@;'; put 'put ''b3VwOlI3LHBvc2l0aW9uOiJiZWZvcmUifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3N1cGVyLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKFVEZSl9Y29uc3RydWN0''@;'; put 'put ''b3IoLi4uZSl7c3VwZXIoLi4uZSksdGhpcy5pc0ZsaXBwZWRWZXJ0aWNhbGx5PSExLHRoaXMuaXNGbGlwcGVkSG9yaXpvbnRhbGx5PSExfX1mdW5jdGlvbiB6RGUobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRl''@;'; put 'put ''IGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFdEZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBOZGUo''@;'; put 'put ''bixlKXtyZXR1cm4gZnVuY3Rpb24gbU90KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obixXRGUobixlLCJnZXQiKSl9ZnVuY3Rpb24gWURlKG4sZSx0KXt6RGUobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIFpEZShuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIHZPdChu''@;'; put 'put ''LGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4sV0RlKG4sZSwic2V0IiksdCksdH1mdW5jdGlvbiBBVChuLGUs''@;'; put 'put ''dCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiBHRGUobixlKXt6RGUobixlKSxlLmFkZChuKX12YXIgcFo9bmV3IFdlYWtNYXAsRmRlPW5ldyBXZWFrTWFw''@;'; put 'put ''LFBkZT1uZXcgV2Vha1NldCxUTz1uZXcgV2Vha1NldDtjbGFzcyBIZGUgZXh0ZW5kcyBPZGV7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJhdXRvY29tcGxldGUifWdldFZhbHVlKCl7Y29uc3QgZT10aGlzLnJhd0Nob2ljZXMuZmluZCh0PT57Y29uc3Qgcj10aGlzLnN0cmlwVmFs''@;'; put 'put ''dWVJZk5lZWRlZCh0KTtyZXR1cm4oQVQodGhpcyxUTyxnWikuY2FsbCh0aGlzLHIpP3IudmFsdWU6cik9PT10aGlzLlRFWFRBUkVBLnZhbHVlfSk7cmV0dXJuIFpvKGUpP2U6dGhpcy5URVhUQVJFQS52YWx1ZX1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCksWXIodGhp''@;'; put 'put ''cy5odENvbnRhaW5lciwiYXV0b2NvbXBsZXRlRWRpdG9yIiksWXIodGhpcy5odENvbnRhaW5lciwtMT09PXRoaXMuaG90LnJvb3RXaW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoIk1hYyIpPyIiOiJodE1hY1Njcm9sbCIpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3Mm''@;'; put 'put ''JktvKHRoaXMuVEVYVEFSRUEsW1sidHlwZSIsInRleHQiXSxbInJvbGUiLCJjb21ib2JveCJdLHB4ZSgibGlzdGJveCIpLFsiYXJpYS1hdXRvY29tcGxldGUiLCJsaXN0Il1dKX1wcmVwYXJlKGUsdCxyLGksbyxhKXtzdXBlci5wcmVwYXJlKGUsdCxyLGksbyxhKSx0aGlzLmhvdC5nZXRTZXR0''@;'; put 'put ''aW5ncygpLmFyaWFUYWdzJiZLbyh0aGlzLlRFWFRBUkVBLFthbSgiZmFsc2UiKSxJTXQoYCR7TmRlKHRoaXMscFopfS1saXN0Ym94LSR7ZX0tJHt0fWApXSksdGhpcy5odE9wdGlvbnM9ey4uLnRoaXMuaHRPcHRpb25zLHZhbHVlR2V0dGVyOmw9PkFUKHRoaXMsVE8sZ1opLmNhbGwodGhpcyxs''@;'; put 'put ''KT9sLnZhbHVlOmx9fW9wZW4oKXtzdXBlci5vcGVuKCk7Y29uc3QgZT10aGlzLmNlbGxQcm9wZXJ0aWVzLnRyaW1Ecm9wZG93bix0PXZvaWQgMD09PWV8fGUscj10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzLGk9QXJyYXkuaXNBcnJheSh0aGlzLmNlbGxQcm9wZXJ0aWVzLnNvdXJj''@;'; put 'put ''ZSk/dGhpcy5jZWxsUHJvcGVydGllcy5zb3VyY2U6bnVsbCxvPWk/Lmxlbmd0aCx7cm93OmEsY29sOmx9PXRoaXM7aWYodGhpcy5zaG93RWRpdGFibGVFbGVtZW50KCksdGhpcy5mb2N1cygpLHRoaXMuYWRkSG9vaygiYmVmb3JlS2V5RG93biIsdT0+dGhpcy5vbkJlZm9yZUtleURvd24odSkp''@;'; put 'put ''LHRoaXMuaHRFZGl0b3IuYWRkSG9vaygiYWZ0ZXJTY3JvbGwiLE5kZSh0aGlzLEZkZSkpLHRoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe2NvbFdpZHRoczp0P1taZCh0aGlzLlRFWFRBUkVBKS0yXTp2b2lkIDAsYXV0b0NvbHVtblNpemU6ITAscmVuZGVyZXI6KHUsZyxFLE8sWixlZSx2''@;'; put 'put ''ZSk9PntENygwLGcsMCwwLDAsZWUsdmUpO2NvbnN0e2ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU6TWUsYWxsb3dIdG1sOkhlfT10aGlzLmNlbGxQcm9wZXJ0aWVzLFdlPXRoaXMuY2VsbFByb3BlcnRpZXMubG9jYWxlLGF0PXRoaXMucXVlcnksQ3Q9UGwoZWUpO2lmKEhlKWcuaW5uZXJIVE1MPUN0''@;'; put 'put ''O2Vsc2UgaWYoQ3QmJmF0JiZhdC5sZW5ndGg+MCl7Y29uc3QgQXQ9ITA9PT1NZT9DdC5pbmRleE9mKGF0KTp2MShDdCxXZSkuaW5kZXhPZih2MShhdCxXZSkpO2lmKC0xIT09QXQpe2NvbnN0IEt0PUN0LnNsaWNlKEF0LEF0K2F0Lmxlbmd0aCkse3Jvb3REb2N1bWVudDpxdH09dTtnLmlubmVy''@;'; put 'put ''SFRNTD0iIixnLmFwcGVuZENoaWxkKHF0LmNyZWF0ZVRleHROb2RlKEN0LnNsaWNlKDAsQXQpKSk7Y29uc3QgZ249cXQuY3JlYXRlRWxlbWVudCgic3Ryb25nIik7Z24udGV4dENvbnRlbnQ9S3QsZy5hcHBlbmRDaGlsZChnbiksZy5hcHBlbmRDaGlsZChxdC5jcmVhdGVUZXh0Tm9kZShDdC5z''@;'; put 'put ''bGljZShBdCthdC5sZW5ndGgpKSl9fXImJktvKGcsW1sicm9sZSIsIm9wdGlvbiJdLC4uLmk/W05NdChvPz8wKV06W10sLi4uaT9bRk10KGkuaW5kZXhPZihlZSkrMSldOltdLFsiaWQiLGAke3RoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuaWR9XyR7RX0tJHtPfWBdXSl9LGFmdGVyU2VsZWN0''@;'; put 'put ''aW9uRW5kOih1LGcpPT57aWYocil7Y29uc3QgRT1aPT57S28oWixbWyJhcmlhLXNlbGVjdGVkIiwidHJ1ZSJdXSksS28odGhpcy5URVhUQVJFQSwuLi4obj0+WyJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLG5dKShaLmlkKSl9LE89dGhpcy5odEVkaXRvci5nZXRDZWxsKHUsZywhMCk7bnVsbCE9''@;'; put 'put ''PU8/RShPKTp0aGlzLmh0RWRpdG9yLmFkZEhvb2tPbmNlKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT57Y29uc3QgWj10aGlzLmh0RWRpdG9yLmdldENlbGwodSxnLCEwKTtudWxsIT09WiYmRShaKX0pfX19KSxyKXtjb25zdCB1PVsicm9sZSIsInByZXNlbnRhdGlvbiJdO0tvKHRoaXMu''@;'; put 'put ''aHRFZGl0b3Iudmlldy5fd3Qud3RPdmVybGF5cy53dFRhYmxlLlRBQkxFLHVbMF0sdVsxXSksS28odGhpcy5odEVkaXRvci5yb290RWxlbWVudCxbWyJyb2xlIiwibGlzdGJveCJdLExNdCgicG9saXRlIiksT010KCJ0ZXh0IiksWyJpZCIsYCR7TmRlKHRoaXMscFopfS1saXN0Ym94LSR7YX0t''@;'; put 'put ''JHtsfWBdXSksS28odGhpcy5URVhUQVJFQSwuLi5hbSgidHJ1ZSIpKX10aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5xdWVyeUNob2ljZXModGhpcy5URVhUQVJFQS52YWx1ZSl9KX1jbG9zZSgpe3RoaXMucmVtb3ZlSG9va3NCeUtleSgiYmVmb3JlS2V5RG93biIpLHN1cGVy''@;'; put 'put ''LmNsb3NlKCksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmS28odGhpcy5URVhUQVJFQSxbYW0oImZhbHNlIildKX1kaXNjYXJkRWRpdG9yKGUpe3N1cGVyLmRpc2NhcmRFZGl0b3IoZSksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX1xdWVyeUNob2ljZXMoZSl7Y29uc3QgdD10aGlz''@;'; put 'put ''LmNlbGxQcm9wZXJ0aWVzLnNvdXJjZTt0aGlzLnF1ZXJ5PWUsImZ1bmN0aW9uIj09dHlwZW9mIHQ/dC5jYWxsKHRoaXMuY2VsbFByb3BlcnRpZXMsZSxyPT57dGhpcy5yYXdDaG9pY2VzPXIsdGhpcy51cGRhdGVDaG9pY2VzTGlzdCh0aGlzLnN0cmlwVmFsdWVzSWZOZWVkZWQocikpfSk6QXJy''@;'; put 'put ''YXkuaXNBcnJheSh0KT8odGhpcy5yYXdDaG9pY2VzPXQsdGhpcy51cGRhdGVDaG9pY2VzTGlzdCh0aGlzLnN0cmlwVmFsdWVzSWZOZWVkZWQodCkpKTp0aGlzLnVwZGF0ZUNob2ljZXNMaXN0KFtdKX11cGRhdGVDaG9pY2VzTGlzdChlKXtjb25zdCB0PXhzZSh0aGlzLlRFWFRBUkVBKSxyPXJB''@;'; put 'put ''ZSh0aGlzLlRFWFRBUkVBKSxpPXRoaXMuY2VsbFByb3BlcnRpZXMuc29ydEJ5UmVsZXZhbmNlLG89dGhpcy5jZWxsUHJvcGVydGllcy5maWx0ZXIsYT10aGlzLnN0cmlwVmFsdWVJZk5lZWRlZCh0aGlzLmdldFZhbHVlKCkpLGw9QVQodGhpcyxUTyxnWikuY2FsbCh0aGlzLGEpP2EudmFsdWU6''@;'; put 'put ''YTtsZXQgdT1udWxsLGc9ZTtpfHwoZz1nLnRvU29ydGVkKCh2ZSxNZSk9PlBsKHZlKS5sb2NhbGVDb21wYXJlKFBsKE1lKSkpKTtjb25zdCBFPVtdLE89dGhpcy5jZWxsUHJvcGVydGllcy5sb2NhbGUsWj10aGlzLmNlbGxQcm9wZXJ0aWVzLmZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUsZWU9Wj9s''@;'; put 'put ''OnYxKFN0cmluZyhsKSxPKTtmb3IobGV0IHZlPTA7dmU8Zy5sZW5ndGg7dmUrKyl7Y29uc3QgTWU9QVQodGhpcyxUTyxnWikuY2FsbCh0aGlzLGdbdmVdKT9zbShQbChnW3ZlXS52YWx1ZSkpOnNtKFBsKGdbdmVdKSk7aWYoLTEhPT0oWj9NZTp2MShNZSxPKSkuaW5kZXhPZihTdHJpbmcoZWUp''@;'; put 'put ''KSYmKEUucHVzaCh2ZSksITE9PT1vKSlicmVha30hMT09PW8/U3RyaW5nKGEpLmxlbmd0aD4wJiYodT1FWzBdKTooZz1FLm1hcCh2ZT0+Z1t2ZV0pLHU9Zy5pbmRleE9mKGVlKT4tMT9nLmluZGV4T2YoZWUpOjApLHRoaXMuc3RyaXBwZWRDaG9pY2VzPWcsdGhpcy5odEVkaXRvci5yb290RWxl''@;'; put 'put ''bWVudC5zdHlsZS5kaXNwbGF5PTA9PT1nLmxlbmd0aD8ibm9uZSI6IiIsdGhpcy5odEVkaXRvci5sb2FkRGF0YShuTChbZ10pKSxnLmxlbmd0aD4wJiYodGhpcy51cGRhdGVEcm9wZG93bkRpbWVuc2lvbnMoKSx0aGlzLmZsaXBEcm9wZG93blZlcnRpY2FsbHlJZk5lZWRlZCgpLHRoaXMuZmxp''@;'; put 'put ''cERyb3Bkb3duSG9yaXpvbnRhbGx5SWZOZWVkZWQoKSwhMD09PXRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0JiZ0aGlzLmhpZ2hsaWdodEJlc3RNYXRjaGluZ0Nob2ljZSh1Pz92b2lkIDApKSx0aGlzLmhvdC5saXN0ZW4oKSx2TCh0aGlzLlRFWFRBUkVBLHQsdD09PXI/dm9pZCAwOnIpfWZs''@;'; put 'put ''aXBEcm9wZG93blZlcnRpY2FsbHlJZk5lZWRlZCgpe2NvbnN0IGU9c3VwZXIuZmxpcERyb3Bkb3duVmVydGljYWxseUlmTmVlZGVkKCkse2lzRmxpcHBlZDp0LHNwYWNlQWJvdmU6cixzcGFjZUJlbG93Oml9PWU7cmV0dXJuIHRoaXMubGltaXREcm9wZG93bklmTmVlZGVkKHQ/cjppKSxlfWxp''@;'; put 'put ''bWl0RHJvcGRvd25JZk5lZWRlZChlKXtjb25zdCB0PXRoaXMuZ2V0RHJvcGRvd25IZWlnaHQoKTtpZih0PmUpe2xldCByPTAsaT0wLG89MDtkb3tpPXRoaXMuaHRFZGl0b3Iuc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCk/PzAscis9aX13aGlsZShyPGUpO289ci1pLHRoaXMu''@;'; put 'put ''aXNGbGlwcGVkVmVydGljYWxseSYmKHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUudG9wPXBhcnNlSW50KHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUudG9wLDEwKSt0LW8rInB4IiksdGhpcy5zZXREcm9wZG93bkhlaWdodChyLWkpfX11cGRhdGVEcm9wZG93bkRpbWVu''@;'; put 'put ''c2lvbnMoKXtjb25zdCBlPWlBZSgpLHQ9dGhpcy5nZXRUYXJnZXRFZGl0b3JXaWR0aCgpK2Uscj10aGlzLmdldFRhcmdldEVkaXRvckhlaWdodCgpK2U7dGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7d2lkdGg6dCxoZWlnaHQ6cn0pLEFUKHRoaXMsUGRlLCREZSkuY2FsbCh0aGlzKSx0''@;'; put 'put ''aGlzLmh0RWRpdG9yLnZpZXcuX3d0Lnd0VGFibGUuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpfXNldERyb3Bkb3duSGVpZ2h0KGUpe3RoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe2hlaWdodDplfSksQVQodGhpcyxQZGUsJERlKS5jYWxsKHRoaXMpLHRoaXMuaHRF''@;'; put 'put ''ZGl0b3Iudmlldy5fd3Qud3RUYWJsZS5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCl9aGlnaGxpZ2h0QmVzdE1hdGNoaW5nQ2hvaWNlKGUpeyJudW1iZXIiPT10eXBlb2YgZT90aGlzLmh0RWRpdG9yLnNlbGVjdENlbGwoZSwwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCExKTp0''@;'; put 'put ''aGlzLmh0RWRpdG9yLmRlc2VsZWN0Q2VsbCgpfWdldFRhcmdldEVkaXRvckhlaWdodCgpe2xldCBlPTA7aWYoIXRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUoKSl7Y29uc3QgaT10aGlzLmh0Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5odENvcmUiKTtpZihpKXtjb25zdCBvPXRoaXMu''@;'; put 'put ''aG90LnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShpKTtlPXBhcnNlSW50KG8uYm9yZGVyVG9wV2lkdGgsMTApK3BhcnNlSW50KG8uYm9yZGVyQm90dG9tV2lkdGgsMTApfX1jb25zdCB0PU1hdGgubWluKHRoaXMuY2VsbFByb3BlcnRpZXMudmlzaWJsZVJvd3MsdGhpcy5zdHJpcHBlZENo''@;'; put 'put ''b2ljZXMubGVuZ3RoKTtyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOnR9LChpLG8pPT5vKS5yZWR1Y2UoKGksbyk9PmkrKCh0aGlzLmhvdC5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQoKT8/MCkrKDA9PT1vPzE6MCkpLDApK2V9Z2V0VGFyZ2V0RWRpdG9yV2lkdGgoKXtsZXQg''@;'; put 'put ''ZT0wO2lmKCF0aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCkpe2NvbnN0IHQ9dGhpcy5odENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIuaHRDb3JlIik7aWYodCl7Y29uc3Qgcj10aGlzLmhvdC5yb290V2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7ZT1wYXJzZUludChyLmJvcmRlcklu''@;'; put 'put ''bGluZVN0YXJ0V2lkdGgsMTApK3BhcnNlSW50KHIuYm9yZGVySW5saW5lRW5kV2lkdGgsMTApfX1yZXR1cm4gdGhpcy5odEVkaXRvci5nZXRDb2xXaWR0aCgwKStlfXN0cmlwVmFsdWVJZk5lZWRlZChlKXtyZXR1cm4gdGhpcy5zdHJpcFZhbHVlc0lmTmVlZGVkKFtlXSlbMF19c3RyaXBWYWx1''@;'; put 'put ''ZXNJZk5lZWRlZChlKXtjb25zdHthbGxvd0h0bWw6dH09dGhpcy5jZWxsUHJvcGVydGllcyxyPWk9PlBsKHQ/aTpzbShTdHJpbmcoaSkpKTtyZXR1cm4gZS5ldmVyeShpPT5iMChpKSk/ZS5tYXAoaT0+e2NvbnN0IG89aTtyZXR1cm57a2V5OnIoby5rZXkpLHZhbHVlOnIoby52YWx1ZSl9fSk6''@;'; put 'put ''ZS5tYXAoaT0+cihpKSl9b25CZWZvcmVLZXlEb3duKGUpe2lmKFBzZShlLmtleUNvZGUpfHxlLmtleUNvZGU9PT1FYS5CQUNLU1BBQ0V8fGUua2V5Q29kZT09PUVhLkRFTEVURXx8ZS5rZXlDb2RlPT09RWEuSU5TRVJUKXtsZXQgdD0xMDtpZihlLmtleUNvZGU9PT1FYS5DJiYoZS5jdHJsS2V5''@;'; put 'put ''fHxlLm1ldGFLZXkpKXJldHVybjt0aGlzLmlzT3BlbmVkKCl8fCh0Kz0xMCksdGhpcy5odEVkaXRvciYmdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMucXVlcnlDaG9pY2VzKHRoaXMuVEVYVEFSRUEudmFsdWUpfSx0KX19Y29uc3RydWN0b3IoLi4uZSl7c3VwZXIoLi4uZSks''@;'; put 'put ''R0RlKHRoaXMsUGRlKSxHRGUodGhpcyxUTyksWURlKHRoaXMscFose3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFlEZSh0aGlzLEZkZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdGhpcy5xdWVyeT1udWxsLHRoaXMuc3RyaXBwZWRDaG9pY2VzPVtdLHRoaXMucmF3Q2hvaWNlcz1b''@;'; put 'put ''XSxaRGUodGhpcyxwWix0aGlzLmhvdC5ndWlkLnNsaWNlKDAsOSkpLFpEZSh0aGlzLEZkZSxCTSgoKT0+e3RoaXMuZm9jdXMoKX0sMTAwKSl9fWZ1bmN0aW9uICREZSgpe3RoaXMuaHRFZGl0b3Iudmlldy5oYXNWZXJ0aWNhbFNjcm9sbCgpJiZ0aGlzLmh0RWRpdG9yLnVwZGF0ZVNldHRpbmdz''@;'; put 'put ''KHt3aWR0aDp0aGlzLmdldFRhcmdldEVkaXRvcldpZHRoKCkrR2QodGhpcy5ob3Qucm9vdERvY3VtZW50KX0pfWZ1bmN0aW9uIGdaKG4pe2NvbnN0IGU9bjtyZXR1cm4gQ2EobikmJlpvKGUua2V5KSYmWm8oZS52YWx1ZSl9Y2xhc3MgcURlIGV4dGVuZHMgSTd7c3RhdGljIGdldCBFRElUT1Jf''@;'; put 'put ''VFlQRSgpe3JldHVybiJjaGVja2JveCJ9YmVnaW5FZGl0aW5nKGUsdCl7aWYodCYmIm1vdXNldXAiPT09dC50eXBlJiYiVEQiPT09QWEodCkubm9kZU5hbWUpe2NvbnN0IHI9dGhpcy5URC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJjaGVja2JveCJdJyk7TGEociwiaHRCYWRWYWx1ZSIp''@;'; put 'put ''fHxyLmNsaWNrKCl9fWZpbmlzaEVkaXRpbmcoKXt9aW5pdCgpe31vcGVuKCl7fWNsb3NlKCl7fWdldFZhbHVlKCl7fXNldFZhbHVlKCl7fWZvY3VzKCl7fX1jb25zdCBWZGU9L15cZHs0fS0oMFsxLTldfDFbMC0yXSktKDBbMS05XXxbMTJdXGR8M1swMV0pJC87ZnVuY3Rpb24gYk90KG4pe2Nv''@;'; put 'put ''bnN0IGU9bmV3IERhdGUobik7cmV0dXJuIE51bWJlci5pc05hTihuZXcgRGF0ZShgJHtufVQwMDowMGApLmdldERhdGUoKSk/ZTpuZXcgRGF0ZShlLmdldFRpbWUoKSs2ZTQqZS5nZXRUaW1lem9uZU9mZnNldCgpKX1mdW5jdGlvbiBzYyhuKXtpZihBbChuKSlyZXR1cm4gbnVsbDtpZigic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIG4mJlZkZS50ZXN0KG4pKXtjb25zdFtlLHQscl09bi5zcGxpdCgiLSIpLm1hcChOdW1iZXIpO3JldHVybiBuZXcgRGF0ZShlLHQtMSxyKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB4TyhuKXtpZigic3RyaW5nIiE9dHlwZW9mIG58fCFWZGUudGVzdChuKSlyZXR1cm4hMTtj''@;'; put 'put ''b25zdCBlPW5ldyBEYXRlKG4pO3JldHVybiFOdW1iZXIuaXNOYU4oZS5nZXRUaW1lKCkpJiZuPT09ZS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApfWNvbnN0IEJkZT0vXihbMDFdXGR8MlswLTNdKTooWzAtNV1cZCkoPzo6KFswLTVdXGQpKD86XC4oXGR7MSwzfSkpPyk/JC87ZnVuY3Rpb24g''@;'; put 'put ''emYobil7aWYoQWwobil8fCJzdHJpbmciIT10eXBlb2YgbilyZXR1cm4gbnVsbDtjb25zdCBlPUJkZS5leGVjKG4pO2lmKCFlKXJldHVybiBudWxsO2NvbnN0IHQ9TnVtYmVyKGVbMV0pLHI9TnVtYmVyKGVbMl0pLGk9dm9pZCAwIT09ZVszXT9OdW1iZXIoZVszXSk6MCxvPWVbNF0sYT12b2lk''@;'; put 'put ''IDAhPT1vP051bWJlcihvLnBhZEVuZCgzLCIwIikuc2xpY2UoMCwzKSk6MDtyZXR1cm4gbmV3IERhdGUoMTk3MCwwLDEsdCxyLGksYSl9ZnVuY3Rpb24gbVoobil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuJiZCZGUudGVzdChuKX1mdW5jdGlvbiBqZGUoKXtjb25zdCBuPW5ldyBEYXRlO3Jl''@;'; put 'put ''dHVybiBuZXcgRGF0ZShuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgpKX1mdW5jdGlvbiBVZGUobil7Y29uc3QgZT1qZGUoKTtyZXR1cm4gZS5zZXREYXRlKGUuZ2V0RGF0ZSgpK24pLGV9ZnVuY3Rpb24gdloobixlKXtyZXR1cm4gbi5nZXRGdWxsWWVhcigpPT09ZS5n''@;'; put 'put ''ZXRGdWxsWWVhcigpJiZuLmdldE1vbnRoKCk9PT1lLmdldE1vbnRoKCkmJm4uZ2V0RGF0ZSgpPT09ZS5nZXREYXRlKCl9Y2xhc3MgemRlIGV4dGVuZHMgZF97c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJkYXRlIn1pbml0KCl7c3VwZXIuaW5pdCgpLHRoaXMuaG90LmFkZEhvb2so''@;'; put 'put ''ImFmdGVyU2V0VGhlbWUiLChlLHQpPT57dHx8dGhpcy5jbG9zZSgpfSl9cHJlcGFyZShlLHQscixpLG8sYSl7c3VwZXIucHJlcGFyZShlLHQscixpLG8sYSksdm9pZCAwIT09YS5kYXRlUGlja2VyQ29uZmlnJiZDc2UodGhpcy5ob3Qucm9vdEVsZW1lbnQsImRhdGVQaWNrZXJDb25maWciLCdU''@;'; put 'put ''aGUgImRhdGVQaWNrZXJDb25maWciIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiBUaGUgbmF0aXZlIGRhdGUgaW5wdXQgaXMgdXNlZCBpbnN0ZWFkIG9mIFBpa2FkYXkuJyk7Y29uc3QgbD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGUpO3RoaXMub3JpZ2luYWxWYWx1ZT10aGlzLmhvdC5nZXRT''@;'; put 'put ''b3VyY2VEYXRhQXRDZWxsKGwsdCl9Y3JlYXRlRWxlbWVudHMoZSl7c3VwZXIuY3JlYXRlRWxlbWVudHMoImlucHV0IiksdGhpcy5URVhUQVJFQS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJkYXRlIil9c2V0VmFsdWUoZSl7aWYoQWwoZSkmJihlPXRoaXMuY2VsbFByb3BlcnRpZXMuZGVmYXVsdERh''@;'; put 'put ''dGUpLCF4TyhlKSlyZXR1cm4gSGEoeWNgRGF0ZUVkaXRvcjogdmFsdWUgbXVzdCBiZSBpbiBJU08gZGF0ZSBmb3JtYXQgKCJZWVlZLU1NLUREIilceDIwCiAgICAgICAgcmVxdWlyZWQgYnkgdGhlIG5hdGl2ZSBkYXRlIGlucHV0LiBSZWNlaXZlZDpgLGUpLHZvaWQgc3VwZXIuc2V0VmFsdWUo''@;'; put 'put ''IiIpO3N1cGVyLnNldFZhbHVlKGUpfWZvY3VzKCl7dGhpcy5URVhUQVJFQS5zZWxlY3QoKX1vcGVuKCl7c3VwZXIub3BlbigpO3RyeXt0aGlzLlRFWFRBUkVBLnNob3dQaWNrZXIoKX1jYXRjaHt9fX1jbGFzcyBLRGUgZXh0ZW5kcyBIZGV7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVy''@;'; put 'put ''biJkcm9wZG93biJ9cHJlcGFyZShlLHQscixpLG8sYSl7YS5maWx0ZXI9ITEsYS5zdHJpY3Q9ITAsc3VwZXIucHJlcGFyZShlLHQscixpLG8sYSl9ZmluaXNoRWRpdGluZyhlLHQscil7aWYodGhpcy5pc09wZW5lZCgpKXtjb25zdCBpPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUo''@;'; put 'put ''KTsoWHUoaSl8fFpvKGkpJiYhaS5pbmNsdWRlcyh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh0aGlzLnJvdyx0aGlzLmNvbCkpKSYmKGU9ITApfXN1cGVyLmZpbmlzaEVkaXRpbmcoZSx0LHIpfX1jbGFzcyBYRGUgZXh0ZW5kcyB6ZGV7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVy''@;'; put 'put ''biJpbnRsLWRhdGUifX1jbGFzcyBXZGUgZXh0ZW5kcyBkX3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuInRpbWUifWluaXQoKXtzdXBlci5pbml0KCksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJTZXRUaGVtZSIsKGUsdCk9Pnt0fHx0aGlzLmNsb3NlKCl9KX1jcmVhdGVFbGVtZW50''@;'; put 'put ''cyhlKXtzdXBlci5jcmVhdGVFbGVtZW50cygiaW5wdXQiKSx0aGlzLlRFWFRBUkVBLnNldEF0dHJpYnV0ZSgidHlwZSIsInRpbWUiKSx0aGlzLlRFWFRBUkVBLnNldEF0dHJpYnV0ZSgiZGlyIiwibHRyIil9c2V0VmFsdWUoZSl7aWYoIW1aKGUpKXJldHVybiBIYSh5Y2BUaW1lRWRpdG9yOiB2''@;'; put 'put ''YWx1ZSBtdXN0IGJlIGluIDI0LWhvdXIgdGltZSBmb3JtYXQgKCJISDptbSIsICJISDptbTpzcyIgb3IgIkhIOm1tOnNzLlNTUyIpXHgyMAogICAgICAgIHJlcXVpcmVkIGJ5IHRoZSBuYXRpdmUgdGltZSBpbnB1dC4gUmVjZWl2ZWQ6YCxlKSx2b2lkIHN1cGVyLnNldFZhbHVlKCIiKTtzdXBl''@;'; put 'put ''ci5zZXRWYWx1ZShlKX1mb2N1cygpe3RoaXMuVEVYVEFSRUEuc2VsZWN0KCl9b3Blbigpe3N1cGVyLm9wZW4oKTt0cnl7dGhpcy5URVhUQVJFQS5zaG93UGlja2VyKCl9Y2F0Y2h7fX19Y2xhc3MgUURlIGV4dGVuZHMgV2Rle3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iaW50bC10''@;'; put 'put ''aW1lIn19Y2xhc3MgSkRlIGV4dGVuZHMgZF97c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJudW1lcmljIn19ZnVuY3Rpb24gZUxlKG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0''@;'; put 'put ''d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB0TGUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQobil9ZnVuY3Rpb24gamMobixlKXtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24geE90KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obix0TGUobixlLCJnZXQiKSl9ZnVuY3Rpb24gX1oobixlLHQpe2VMZShuLGUpLGUuc2V0KG4sdCl9ZnVuY3Rpb24geWgobixlLHQpe3JldHVybiBmdW5jdGlvbiBBT3QobixlLHQpe2lmKGUuc2V0''@;'; put 'put ''KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLHRMZShuLGUsInNldCIpLHQpLHR9dmFyIHBkPW5ldyBXZWFrTWFwLEsxPW5ldyBXZWFr''@;'; put 'put ''TWFwLE93PW5ldyBXZWFrTWFwLGtUPW5ldyBXZWFrTWFwLG5MZT1uZXcgV2Vha1NldDtjbGFzcyByTGUgZXh0ZW5kcyBkX3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuInBhc3N3b3JkIn1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5URVhUQVJF''@;'; put 'put ''QT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSx0aGlzLlRFWFRBUkVBLnNldEF0dHJpYnV0ZSgidHlwZSIsInBhc3N3b3JkIiksdGhpcy5URVhUQVJFQS5kYXRhc2V0LmhvdElucHV0PSIiLHRoaXMuVEVYVEFSRUEuY2xhc3NOYW1lPSJoYW5kc29udGFibGVJ''@;'; put 'put ''bnB1dCIsdGhpcy50ZXh0YXJlYVN0eWxlPXRoaXMuVEVYVEFSRUEuc3R5bGUsdGhpcy50ZXh0YXJlYVN0eWxlLndpZHRoPSIwIix0aGlzLnRleHRhcmVhU3R5bGUuaGVpZ2h0PSIwIixDNCh0aGlzLlRFWFRBUkVBX1BBUkVOVCk7Y29uc3QgZT1iNCgtMSk7dGhpcy5URVhUQVJFQS5zZXRBdHRy''@;'; put 'put ''aWJ1dGUoZVswXSxTdHJpbmcoZVsxXSkpLHRoaXMuVEVYVEFSRUFfUEFSRU5ULmFwcGVuZENoaWxkKHRoaXMuVEVYVEFSRUEpfW9wZW4oKXtzdXBlci5vcGVuKCk7Y29uc3QgZT10aGlzLmNlbGxQcm9wZXJ0aWVzLmhhc2hSZXZlYWxEZWxheSx0PVN0cmluZyh0aGlzLmNlbGxQcm9wZXJ0aWVz''@;'; put 'put ''Lmhhc2hTeW1ib2x8fCIqIik7aWYoZT4wKXt5aCh0aGlzLGtULCEwKTtjb25zdCByPXRbMF07dGhpcy5URVhUQVJFQS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0IiksdGhpcy5URVhUQVJFQS5zZXRBdHRyaWJ1dGUoImF1dG9jb21wbGV0ZSIsIm9mZiIpLHRoaXMuVEVYVEFSRUEuc2V0QXR0''@;'; put 'put ''cmlidXRlKCJzcGVsbGNoZWNrIiwiZmFsc2UiKSx0aGlzLlRFWFRBUkVBLnNldEF0dHJpYnV0ZSgiYXV0b2NhcGl0YWxpemUiLCJvZmYiKSx0aGlzLlRFWFRBUkVBLnNldEF0dHJpYnV0ZSgiYXV0b2NvcnJlY3QiLCJvZmYiKSx0aGlzLlRFWFRBUkVBLnZhbHVlPXIucmVwZWF0KGpjKHRoaXMs''@;'; put 'put ''cGQpLmxlbmd0aCkseWgodGhpcyxPdyxpPT5mdW5jdGlvbiBrT3QobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHR9KHRoaXMsbkxlLERPdCkuY2FsbCh0aGlzLGks''@;'; put 'put ''cixlKSksdGhpcy5URVhUQVJFQS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsamModGhpcyxPdykpfX1jbG9zZSgpe2pjKHRoaXMsT3cpJiYodGhpcy5URVhUQVJFQS5yZW1vdmVFdmVudExpc3RlbmVyKCJpbnB1dCIsamModGhpcyxPdykpLHloKHRoaXMsT3csbnVsbCkpLG51bGwhPT1qYyh0''@;'; put 'put ''aGlzLEsxKSYmKGNsZWFyVGltZW91dChqYyh0aGlzLEsxKSkseWgodGhpcyxLMSxudWxsKSkseWgodGhpcyxrVCwhMSkseWgodGhpcyxwZCwiIiksdGhpcy5URVhUQVJFQS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJwYXNzd29yZCIpLHRoaXMuVEVYVEFSRUEucmVtb3ZlQXR0cmlidXRlKCJhdXRv''@;'; put 'put ''Y29tcGxldGUiKSx0aGlzLlRFWFRBUkVBLnJlbW92ZUF0dHJpYnV0ZSgic3BlbGxjaGVjayIpLHRoaXMuVEVYVEFSRUEucmVtb3ZlQXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6ZSIpLHRoaXMuVEVYVEFSRUEucmVtb3ZlQXR0cmlidXRlKCJhdXRvY29ycmVjdCIpLHN1cGVyLmNsb3NlKCl9Z2V0''@;'; put 'put ''VmFsdWUoKXtyZXR1cm4gamModGhpcyxrVCk/amModGhpcyxwZCk6c3VwZXIuZ2V0VmFsdWUoKX1zZXRWYWx1ZShlKXtpZihqYyh0aGlzLGtUKSl7eWgodGhpcyxwZCxlPz8iIik7Y29uc3QgdD1TdHJpbmcodGhpcy5jZWxsUHJvcGVydGllcy5oYXNoU3ltYm9sfHwiKiIpWzBdO3RoaXMuVEVY''@;'; put 'put ''VEFSRUEudmFsdWU9dC5yZXBlYXQoamModGhpcyxwZCkubGVuZ3RoKX1lbHNlIHRoaXMuY2VsbFByb3BlcnRpZXM/Lmhhc2hSZXZlYWxEZWxheT4wP3loKHRoaXMscGQsZT8/IiIpOnN1cGVyLnNldFZhbHVlKGUpfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLGZ1bmN0aW9uIFJPdChu''@;'; put 'put ''LGUpe2VMZShuLGUpLGUuYWRkKG4pfSh0aGlzLG5MZSksX1oodGhpcyxwZCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksX1oodGhpcyxLMSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksX1oodGhpcyxPdyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksX1oodGhpcyxrVCx7d3Jp''@;'; put 'put ''dGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdGhpcy5hdXRvUmVzaXplPVREZSh0aGlzLmhvdC5yb290RG9jdW1lbnQse3RleHRDb250ZW50OnQ9PiJcdTIwMjIiLnJlcGVhdCh0LnZhbHVlLmxlbmd0aCl9KSx5aCh0aGlzLHBkLCIiKSx5aCh0aGlzLEsxLG51bGwpLHloKHRoaXMsT3csbnVsbCks''@;'; put 'put ''eWgodGhpcyxrVCwhMSl9fWZ1bmN0aW9uIERPdChuLGUsdCl7Y29uc3R7aW5wdXRUeXBlOnIsZGF0YTppfT1uO2lmKCFpfHwiaW5zZXJ0VGV4dCIhPT1yJiYiaW5zZXJ0RnJvbVBhc3RlIiE9PXImJiJpbnNlcnRGcm9tRHJvcCIhPT1yJiYiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0IiE9PXImJiJp''@;'; put 'put ''bnNlcnRDb21wb3NpdGlvblRleHQiIT09cilpZihyPy5zdGFydHNXaXRoKCJkZWxldGUiKSl7Y29uc3QgYT1qYyh0aGlzLHBkKS5sZW5ndGgsbD10aGlzLlRFWFRBUkVBLnNlbGVjdGlvblN0YXJ0Pz8wLHU9YS10aGlzLlRFWFRBUkVBLnZhbHVlLmxlbmd0aDt5aCh0aGlzLHBkLGpjKHRoaXMs''@;'; put 'put ''cGQpLnNsaWNlKDAsbCkramModGhpcyxwZCkuc2xpY2UobCt1KSksdGhpcy5URVhUQVJFQS52YWx1ZT1lLnJlcGVhdChqYyh0aGlzLHBkKS5sZW5ndGgpLHRoaXMuVEVYVEFSRUEuc2V0U2VsZWN0aW9uUmFuZ2UobCxsKSxudWxsIT09amModGhpcyxLMSkmJihjbGVhclRpbWVvdXQoamModGhp''@;'; put 'put ''cyxLMSkpLHloKHRoaXMsSzEsbnVsbCkpfWVsc2V7Y29uc3QgYT1qYyh0aGlzLHBkKS5sZW5ndGgsbD10aGlzLlRFWFRBUkVBLnZhbHVlO2lmKGwubGVuZ3RoPmEpe2NvbnN0IHU9bC5zbGljZShhKTt5aCh0aGlzLHBkLGpjKHRoaXMscGQpK3UpLHRoaXMuVEVYVEFSRUEudmFsdWU9ZS5yZXBl''@;'; put 'put ''YXQoYSkrdSxudWxsIT09amModGhpcyxLMSkmJmNsZWFyVGltZW91dChqYyh0aGlzLEsxKSkseWgodGhpcyxLMSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5URVhUQVJFQS52YWx1ZT1lLnJlcGVhdChqYyh0aGlzLHBkKS5sZW5ndGgpLHloKHRoaXMsSzEsbnVsbCl9LHQp''@;'; put 'put ''KX1lbHNlIHloKHRoaXMscGQsamModGhpcyxwZCkuc2xpY2UoMCxsLmxlbmd0aCkpLHRoaXMuVEVYVEFSRUEudmFsdWU9ZS5yZXBlYXQoamModGhpcyxwZCkubGVuZ3RoKSxudWxsIT09amModGhpcyxLMSkmJihjbGVhclRpbWVvdXQoamModGhpcyxLMSkpLHloKHRoaXMsSzEsbnVsbCkpfWVs''@;'; put 'put ''c2V7Y29uc3QgYT10aGlzLlRFWFRBUkVBLnNlbGVjdGlvblN0YXJ0Pz8wLGw9YS1pLmxlbmd0aCx1PXRoaXMuVEVYVEFSRUEudmFsdWUubGVuZ3RoLWE7eWgodGhpcyxwZCxqYyh0aGlzLHBkKS5zbGljZSgwLGwpK2kramModGhpcyxwZCkuc2xpY2UoamModGhpcyxwZCkubGVuZ3RoLXUpKSx0''@;'; put 'put ''aGlzLlRFWFRBUkVBLnZhbHVlPWUucmVwZWF0KGwpK2krZS5yZXBlYXQodSksdGhpcy5URVhUQVJFQS5zZXRTZWxlY3Rpb25SYW5nZShhLGEpLG51bGwhPT1qYyh0aGlzLEsxKSYmY2xlYXJUaW1lb3V0KGpjKHRoaXMsSzEpKSx5aCh0aGlzLEsxLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQo''@;'; put 'put ''KCk9Pntjb25zdCBnPXRoaXMuVEVYVEFSRUEuc2VsZWN0aW9uU3RhcnQ7dGhpcy5URVhUQVJFQS52YWx1ZT1lLnJlcGVhdChqYyh0aGlzLHBkKS5sZW5ndGgpLHRoaXMuVEVYVEFSRUEuc2V0U2VsZWN0aW9uUmFuZ2UoZyxnKSx5aCh0aGlzLEsxLG51bGwpfSx0KSl9fWNvbnN0IFlkZT0iaHRf''@;'; put 'put ''ZWRpdG9yX3Zpc2libGUiLGlMZT0ic2VsZWN0RWRpdG9yIjtjbGFzcyBvTGUgZXh0ZW5kcyBJN3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuInNlbGVjdCJ9aW5pdCgpe3RoaXMuc2VsZWN0V3JhcHBlcj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiks''@;'; put 'put ''dGhpcy5zZWxlY3Q9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLHRoaXMuc2VsZWN0LmRhdGFzZXQuaG90SW5wdXQ9InRydWUiLHRoaXMuc2VsZWN0V3JhcHBlci5zdHlsZS5kaXNwbGF5PSJub25lIjtjb25zdCBlPXRoaXMuaG90LnJvb3REb2N1bWVudC5j''@;'; put 'put ''cmVhdGVFbGVtZW50KCJESVYiKSx0PXRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7ZS5jbGFzc05hbWU9Imh0QXV0b2NvbXBsZXRlQXJyb3ciLHQmJmUuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxlLmFwcGVuZENoaWxkKHRoaXMuaG90LnJvb3REb2N1bWVudC5j''@;'; put 'put ''cmVhdGVUZXh0Tm9kZSgiXHUyNWJjIikpLFlyKHRoaXMuc2VsZWN0V3JhcHBlciwiaHRTZWxlY3RFZGl0b3IiKSx0aGlzLnNlbGVjdFdyYXBwZXIuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3QpLHRoaXMuc2VsZWN0V3JhcHBlci5pbnNlcnRCZWZvcmUoZSx0aGlzLnNlbGVjdFdyYXBwZXIuZmly''@;'; put 'put ''c3RDaGlsZCksdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3RXcmFwcGVyKSx0aGlzLnJlZ2lzdGVySG9va3MoKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJEZXN0cm95IiwoKT0+dGhpcy5kZXN0cm95KCkpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuc2Vs''@;'; put 'put ''ZWN0LnZhbHVlfXNldFZhbHVlKGUpe3RoaXMuc2VsZWN0LnZhbHVlPW51bGw9PWU/IiI6U3RyaW5nKGUpfW9wZW4oKXt0aGlzLl9vcGVuZWQ9ITAsdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuc2VsZWN0V3JhcHBlci5zdHlsZS5kaXNwbGF5PSIiLHRoaXMuaG90LmdldFNob3J0Y3V0''@;'; put 'put ''TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJlZGl0b3IiKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCl9Y2xvc2UoKXt0aGlzLl9vcGVuZWQ9ITEsdGhpcy5zZWxlY3RXcmFwcGVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLExhKHRoaXMuc2VsZWN0V3JhcHBlcixZZGUpJiZrbyh0aGlz''@;'; put 'put ''LnNlbGVjdFdyYXBwZXIsWWRlKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLnJlbW92ZUhvb2tzQnlLZXkoImJlZm9yZURpYWxvZ1Nob3ciKX1mb2N1cygpe3RoaXMuc2VsZWN0LmZvY3VzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9u''@;'; put 'put ''dGFsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29sdW1uUmVzaXplIiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygp''@;'; put 'put ''KSx0aGlzLmFkZEhvb2soImFmdGVyUm93UmVzaXplIiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKX1wcmVwYXJlKGUsdCxyLGksbyxhKXtzdXBlci5wcmVwYXJlKGUsdCxyLGksbyxhKTtjb25zdCBsPXRoaXMuY2VsbFByb3BlcnRpZXMuc2VsZWN0T3B0aW9ucztsZXQgdTt1PXRoaXMu''@;'; put 'put ''cHJlcGFyZU9wdGlvbnMoImZ1bmN0aW9uIj09dHlwZW9mIGw/bCh0aGlzLnJvdyx0aGlzLmNvbCx0aGlzLnByb3ApOmwpLEM0KHRoaXMuc2VsZWN0KTtjb25zdHtzYW5pdGl6ZXI6Z309dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtpZihBcnJheS5pc0FycmF5KHUpKWZvcihsZXQgRT0wO0U8dS5s''@;'; put 'put ''ZW5ndGg7RSsrKXtjb25zdCBPPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJPUFRJT04iKTtPLnZhbHVlPVN0cmluZyh1W0VdKSxfNyhPLFN0cmluZyh1W0VdKSxnLCJzZWxlY3RFZGl0b3IiLHRoaXMuaG90LnJvb3RFbGVtZW50KSx0aGlzLnNlbGVjdC5hcHBlbmRDaGls''@;'; put 'put ''ZChPKX1lbHNlIGFjKHUsKEUsTyk9Pntjb25zdCBaPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJPUFRJT04iKTtaLnZhbHVlPU8sXzcoWixTdHJpbmcoRSksZywic2VsZWN0RWRpdG9yIix0aGlzLmhvdC5yb290RWxlbWVudCksdGhpcy5zZWxlY3QuYXBwZW5kQ2hpbGQo''@;'; put 'put ''Wil9KX1wcmVwYXJlT3B0aW9ucyhlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKXx8Im9iamVjdCI9PXR5cGVvZiBlP2U6e319cmVmcmVzaFZhbHVlKCl7Y29uc3QgZT10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMucm93LHRoaXMucHJvcCk7dGhpcy5vcmlnaW5hbFZhbHVlPWUs''@;'; put 'put ''dGhpcy5zZXRWYWx1ZShlKSx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCl9cmVmcmVzaERpbWVuc2lvbnMoKXtpZih0aGlzLnN0YXRlIT09VmguRURJVElORylyZXR1cm47aWYodGhpcy5URD10aGlzLmdldEVkaXRlZENlbGwoKSwhdGhpcy5URClyZXR1cm4gdm9pZCB0aGlzLmNsb3NlKCk7Y29u''@;'; put 'put ''c3QgZT10aGlzLmdldEVkaXRlZENlbGxSZWN0KCk7aWYoIWUpcmV0dXJuO2NvbnN0e3RvcDp0LHN0YXJ0OnIsd2lkdGg6aSxoZWlnaHQ6b309ZSxhPXRoaXMuc2VsZWN0V3JhcHBlci5zdHlsZTthLmhlaWdodD1gJHtvfXB4YCxhLndpZHRoPWAke2l9cHhgLGEudG9wPWAke3R9cHhgLGFbdGhp''@;'; put 'put ''cy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09YCR7cn1weGAsYS5tYXJnaW49IjBweCIsWXIodGhpcy5zZWxlY3RXcmFwcGVyLFlkZSl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCB0PXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLHI9e2dy''@;'; put 'put ''b3VwOmlMZX07dGhpcy5pc0luRnVsbEVkaXRNb2RlKCkmJnQuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgaT10aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4LTE7aT49MCYmKHRoaXMuc2VsZWN0W2ldLnNlbGVjdGVkPSEwKX19LHtrZXlzOltb''@;'; put 'put ''IkFycm93RG93biJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGk9dGhpcy5zZWxlY3Quc2VsZWN0ZWRJbmRleCsxO2k8PXRoaXMuc2VsZWN0Lmxlbmd0aC0xJiYodGhpcy5zZWxlY3RbaV0uc2VsZWN0ZWQ9ITApfX1dLHIpfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1''@;'; put 'put ''dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKGlMZSl9ZGVzdHJveSgpe3RoaXMuY2xlYXJIb29rcygpfX1mdW5jdGlvbiBSVChuKXtyZXR1cm4gbi5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJjaGVja2JveCJdJyl9ZnVuY3Rpb24gYUxl''@;'; put 'put ''KG4sZSl7cmV0dXJuIGIwKGUpP0FycmF5LmlzQXJyYXkobikmJm4uc29tZSh0PT5iMCh0KT9nNyh0LGUpOnQ9PT1lKTpuLmluY2x1ZGVzKGUpfXZhciBzTGU9bmV3IFdlYWtTZXQ7Y2xhc3MgbExle2dldElucHV0RWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0fXNldFZhbHVlKGUpe3RoaXMu''@;'; put 'put ''aW5wdXQudmFsdWU9ZX10b2dnbGUoZSl7dGhpcy5lbmFibGVkPWUsdGhpcy5pbnB1dCYmKGU/dGhpcy5saXN0ZW4oKTp0aGlzLnVubGlzdGVuKCkpfWxpc3Rlbigpe3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5pbnB1dCwiaW5wdXQiLHRoaXMub25JbnB1dCl9dW5s''@;'; put 'put ''aXN0ZW4oKXt0aGlzLmV2ZW50TWFuYWdlci5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMuaW5wdXQsImlucHV0Iix0aGlzLm9uSW5wdXQpfV9vbklucHV0KCl7KGZ1bmN0aW9uIFBPdChuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJp''@;'; put 'put ''dmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH0pKHRoaXMsc0xlLFZPdCkuY2FsbCh0aGlzLHRoaXMuaW5wdXQudmFsdWUpfWNvbnN0cnVjdG9yKHtpbnB1dDplLGV2ZW50TWFuYWdlcjp0fSl7KGZ1bmN0aW9uIEhPdChuLGUpeyhmdW5jdGlvbiBGT3QobixlKXtpZihlLmhh''@;'; put 'put ''cyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobixlKSxlLmFkZChuKX0pKHRoaXMsc0xlKSx0aGlzLm9uSW5wdXQ9dGhpcy5fb25JbnB1dC5iaW5kKHRoaXMpLHRoaXMuaW5w''@;'; put 'put ''dXQ9ZSx0aGlzLmV2ZW50TWFuYWdlcj10LHRoaXMuZW5hYmxlZD0hMH19ZnVuY3Rpb24gVk90KG4pe3RoaXMucnVuTG9jYWxIb29rcygidHJpZ2dlckZpbHRlciIsbil9WWwobExlLF9oKTtjb25zdCBJVD0iaHQtbXVsdGktc2VsZWN0LWVkaXRvciIsQk90PWAke0lUfS1zZWFyY2gtaW5wdXQt''@;'; put 'put ''d3JhcHBlcmAsak90PWAke0lUfS1zZWFyY2gtaWNvbmAsY0xlPWAke0lUfS1zZWFyY2gtaW5wdXRgLFVPdD1gJHtJVH0tc2VwYXJhdG9yYCxZT3Q9YCR7SVR9LWl0ZW0tYCxaZGU9YCR7SVR9LWl0ZW0tc2VsZWN0ZWRgO2Z1bmN0aW9uIHVMZShuKXtjb25zdCBlPVJUKG4pO1lyKG4sWmRlKSxl''@;'; put 'put ''JiYhZS5jaGVja2VkJiYoZS5jaGVja2VkPSEwKX1mdW5jdGlvbiBkTGUobil7Y29uc3QgZT1SVChuKTtrbyhuLFpkZSksZSYmZS5jaGVja2VkJiYoZS5jaGVja2VkPSExKX1mdW5jdGlvbiBoTGUoe2Ryb3Bkb3duTGlzdEVsZW1lbnQ6bixpbmRleDplfSl7Y29uc3QgdD1uLmNoaWxkcmVuW2Vd''@;'; put 'put ''O2lmKHQpe2NvbnN0IHI9UlQodCk7ciYmci5ibHVyKCl9fWZ1bmN0aW9uIGZMZShuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gcExlKG4s''@;'; put 'put ''ZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIHNpKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIHJOdChuLGUpe3JldHVybiBlLmdldD9lLmdl''@;'; put 'put ''dC5jYWxsKG4pOmUudmFsdWV9KG4scExlKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIGQ2KG4sZSx0KXtmTGUobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIEUwKG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gaU50KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJs''@;'; put 'put ''ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixwTGUobixlLCJzZXQiKSx0KSx0fWZ1bmN0aW9uIFdmKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRv''@;'; put 'put ''IGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiB0fWZ1bmN0aW9uIGg2KG4sZSl7ZkxlKG4sZSksZS5hZGQobil9dmFyIERUPW5ldyBXZWFrTWFwLFN1PW5ldyBXZWFrTWFwLGdkPW5ldyBXZWFrTWFwLE83PW5ldyBXZWFrTWFwLGhfPW5ldyBXZWFrTWFwLGY2PW5l''@;'; put 'put ''dyBXZWFrTWFwLE53PW5ldyBXZWFrTWFwLGkyPW5ldyBXZWFrTWFwLEZ3PW5ldyBXZWFrTWFwLHhzPW5ldyBXZWFrTWFwLEFPPW5ldyBXZWFrU2V0LGdMZT1uZXcgV2Vha1NldCxtTGU9bmV3IFdlYWtTZXQsR2RlPW5ldyBXZWFrU2V0LHZMZT1uZXcgV2Vha1NldCwkZGU9bmV3IFdlYWtTZXQs''@;'; put 'put ''X0xlPW5ldyBXZWFrU2V0LHlMZT1uZXcgV2Vha1NldCxiTGU9bmV3IFdlYWtTZXQsd0xlPW5ldyBXZWFrU2V0O2NsYXNzIENMZXtpbml0KCl7aWYoIXNpKHRoaXMsaTIpfHwhc2kodGhpcyxTdSkpcmV0dXJuO0UwKHRoaXMsZ2QsZnVuY3Rpb24gS090KHtyb290Om59KXtyZXR1cm4gbi5jcmVh''@;'; put 'put ''dGVFbGVtZW50KCJ1bCIpfSh7cm9vdDpzaSh0aGlzLGkyKX0pKSxFMCh0aGlzLE83LGZ1bmN0aW9uICRPdCh7cm9vdDpufSl7Y29uc3QgZT1uLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIEtvKGUsW04zKCJTZWFyY2ggb3B0aW9ucyIpLFsidHlwZSIsInRleHQiXSxbInNpemUiLDNd''@;'; put 'put ''LFsicGxhY2Vob2xkZXIiLCJTZWFyY2guLi4iXSxbImlkIixjTGVdXSksWXIoZSxjTGUpLGV9KHtyb290OnNpKHRoaXMsaTIpfSkpO2NvbnN0IGU9ZnVuY3Rpb24gR090KHtyb290Om59KXtjb25zdCBlPW4uY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIFlyKGUsak90KSxLbyhlLFtbImFy''@;'; put 'put ''aWEtaGlkZGVuIiwidHJ1ZSJdXSksZX0oe3Jvb3Q6c2kodGhpcyxpMil9KTtFMCh0aGlzLGY2LGZ1bmN0aW9uIFpPdCh7cm9vdDpufSl7Y29uc3QgZT1uLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBlLmNsYXNzTmFtZT1CT3QsZX0oe3Jvb3Q6c2kodGhpcyxpMil9KSksRTAodGhpcyxo''@;'; put 'put ''XyxmdW5jdGlvbiBxT3Qoe3Jvb3Q6bn0pe2NvbnN0IGU9bi5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gZS5jbGFzc05hbWU9VU90LGV9KHtyb290OnNpKHRoaXMsaTIpfSkpLHNpKHRoaXMsZjYpLmFwcGVuZENoaWxkKGUpLHNpKHRoaXMsZjYpLmFwcGVuZENoaWxkKHNpKHRoaXMsTzcp''@;'; put 'put ''KSxzaSh0aGlzLFN1KS5hcHBlbmRDaGlsZChzaSh0aGlzLGY2KSksc2kodGhpcyxTdSkuYXBwZW5kQ2hpbGQoc2kodGhpcyxoXykpLHNpKHRoaXMsU3UpLmFwcGVuZENoaWxkKHNpKHRoaXMsZ2QpKSxFMCh0aGlzLE53LG5ldyBsTGUoe2lucHV0OnNpKHRoaXMsTzcpLGV2ZW50TWFuYWdlcjpz''@;'; put 'put ''aSh0aGlzLEZ3KX0pKX1zZXRWaXNpYmxlUm93c051bWJlclNldHRpbmcoZSl7c2kodGhpcyx4cykudmlzaWJsZVJvd3NOdW1iZXJTZXR0aW5nPWV9c2V0U291cmNlU29ydEZ1bmN0aW9uKGUpe3NpKHRoaXMseHMpLnNvdXJjZVNvcnRGdW5jdGlvbj1lPz9udWxsfXNldFNlYXJjaElucHV0Vmlz''@;'; put 'put ''aWJpbGl0eShlPSEwKXshc2kodGhpcyxmNil8fCFzaSh0aGlzLGhfKXx8IXNpKHRoaXMsTncpfHwoc2kodGhpcyxmNikuc3R5bGUuZGlzcGxheT1lPyIiOiJub25lIixzaSh0aGlzLGhfKS5zdHlsZS5kaXNwbGF5PWU/IiI6Im5vbmUiLHNpKHRoaXMsTncpLnRvZ2dsZShlKSl9ZmlsbERyb3Bk''@;'; put 'put ''b3duKGUsdD1bXSl7dGhpcy5yZW1vdmVBbGxEcm9wZG93bkl0ZW1zKCksc2kodGhpcyx4cykuY3VycmVudGx5U2VsZWN0ZWRJdGVtSW5kZXg9MCxBcnJheS5pc0FycmF5KHQpfHwodD1bXSk7bGV0IHI9ZTtzaSh0aGlzLHhzKS5zb3VyY2VTb3J0RnVuY3Rpb24mJihyPXNpKHRoaXMseHMpLnNv''@;'; put 'put ''dXJjZVNvcnRGdW5jdGlvbihlLnNsaWNlKCkpKSxzaSh0aGlzLGkyKSYmc2kodGhpcyxnZCkmJm51bGwhPT1zaSh0aGlzLERUKSYmKHIuZm9yRWFjaCgoaSxvKT0+e2NvbnN0IGE9Im9iamVjdCI9PXR5cGVvZiBpJiZudWxsIT09aSYmInZhbHVlImluIGk/aS52YWx1ZTppO1dmKHRoaXMsX0xl''@;'; put 'put ''LGxOdCkuY2FsbCh0aGlzLHtyb290RG9jdW1lbnQ6c2kodGhpcyxpMiksaXRlbUtleToib2JqZWN0Ij09dHlwZW9mIGkmJm51bGwhPT1pJiYia2V5ImluIGk/aS5rZXk6dm9pZCAwLGl0ZW1WYWx1ZTpTdHJpbmcoYT8/aSksaW5kZXhXaXRoaW5MaXN0Om8sY2hlY2tlZDphTGUodCxpKSxkaXNh''@;'; put 'put ''YmxlZDpzaSh0aGlzLHhzKS5hcmVDaGVja2JveGVzRGlzYWJsZWR9KX0pLHNpKHRoaXMseHMpLmVudHJpZXNDb3VudD1yLmxlbmd0aCx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyRHJvcGRvd25GaWxsIikpfXVwZGF0ZURpbWVuc2lvbnMoZSx0PSExKXtjb25zdCByPVdmKHRoaXMsR2RlLFNM''@;'; put 'put ''ZSkuY2FsbCh0aGlzKSxpPVdmKHRoaXMsZ0xlLG9OdCkuY2FsbCh0aGlzLGUpLG89aT9lLnNwYWNlQWJvdmU6ZS5zcGFjZUJlbG93O2lmKCF0JiZpJiYoc2kodGhpcyx4cykuZmxpcHBlZFZlcnRpY2FsbHk9ITApLHNpKHRoaXMseHMpLmVudHJpZXNDb3VudD4wJiZvPHRoaXMuZ2V0SGVpZ2h0''@;'; put 'put ''KCEwKSl7Y29uc3QgYT1NYXRoLm1heChNYXRoLmZsb29yKChvLVdmKHRoaXMsJGRlLEVMZSkuY2FsbCh0aGlzKSkvciktMSwxKTtzaSh0aGlzLHhzKS5hY3R1YWxSZW5kZXJlZEl0ZW1zQ291bnQ9c2kodGhpcyx4cykudmlzaWJsZVJvd3NOdW1iZXJTZXR0aW5nP01hdGgubWluKGEsc2kodGhp''@;'; put 'put ''cyx4cykudmlzaWJsZVJvd3NOdW1iZXJTZXR0aW5nKTphfWVsc2Ugc2kodGhpcyx4cykuYWN0dWFsUmVuZGVyZWRJdGVtc0NvdW50PU1hdGgubWluKHNpKHRoaXMseHMpLmVudHJpZXNDb3VudCxzaSh0aGlzLHhzKS52aXNpYmxlUm93c051bWJlclNldHRpbmc/P3NpKHRoaXMseHMpLmVudHJp''@;'; put 'put ''ZXNDb3VudCk7c2kodGhpcyxTdSkmJihzaSh0aGlzLHhzKS5hY3R1YWxSZW5kZXJlZEl0ZW1zQ291bnQmJnNpKHRoaXMseHMpLmVudHJpZXNDb3VudD5zaSh0aGlzLHhzKS5hY3R1YWxSZW5kZXJlZEl0ZW1zQ291bnQ/c2kodGhpcyxTdSkuc3R5bGUuaGVpZ2h0PWAke3RoaXMuZ2V0SGVpZ2h0''@;'; put 'put ''KCl9cHhgOnNpKHRoaXMsU3UpLnN0eWxlLmhlaWdodD0iIixXZih0aGlzLG1MZSxhTnQpLmNhbGwodGhpcyxlKSxzaSh0aGlzLFN1KS5zY3JvbGxUb3A9MCl9Z2V0RHJvcGRvd25XaWR0aCgpe3JldHVybiBzaSh0aGlzLGdkKT9mdW5jdGlvbiBYT3Qoe2Ryb3Bkb3duTGlzdEVsZW1lbnQ6bn0p''@;'; put 'put ''e3JldHVybiBuLm9mZnNldFdpZHRofSh7ZHJvcGRvd25MaXN0RWxlbWVudDpzaSh0aGlzLGdkKX0pOjB9ZGVzZWxlY3RBbGxJdGVtcygpe3NpKHRoaXMsZ2QpJiZmdW5jdGlvbiBRT3Qoe2Ryb3Bkb3duTGlzdEVsZW1lbnQ6bn0pe24ucXVlcnlTZWxlY3RvckFsbChgLiR7WmRlfWApLmZvckVh''@;'; put 'put ''Y2goZT0+ZExlKGUpKX0oe2Ryb3Bkb3duTGlzdEVsZW1lbnQ6c2kodGhpcyxnZCl9KX1mb2N1c0ZpcnN0SXRlbSgpe3NpKHRoaXMseHMpLmVudHJpZXNDb3VudD4wJiZXZih0aGlzLEFPLHlaKS5jYWxsKHRoaXMsMCl9Zm9jdXNJdGVtKGUpe1dmKHRoaXMsQU8seVopLmNhbGwodGhpcyxlKX1m''@;'; put 'put ''b2N1c1ByZXZpb3VzSXRlbSgpe2lmKHNpKHRoaXMsZ2QpKXtpZigwPT09c2kodGhpcyx4cykuY3VycmVudGx5U2VsZWN0ZWRJdGVtSW5kZXgpcmV0dXJuIHZvaWQgdGhpcy5mb2N1c1NlYXJjaElucHV0KCk7aExlKHtkcm9wZG93bkxpc3RFbGVtZW50OnNpKHRoaXMsZ2QpLGluZGV4OnNpKHRo''@;'; put 'put ''aXMseHMpLmN1cnJlbnRseVNlbGVjdGVkSXRlbUluZGV4fSksV2YodGhpcyxBTyx5WikuY2FsbCh0aGlzLHNpKHRoaXMseHMpLmN1cnJlbnRseVNlbGVjdGVkSXRlbUluZGV4LTEpfX1mb2N1c05leHRJdGVtKCl7c2kodGhpcyxnZCkmJnNpKHRoaXMseHMpLmN1cnJlbnRseVNlbGVjdGVkSXRl''@;'; put 'put ''bUluZGV4IT09c2kodGhpcyx4cykuZW50cmllc0NvdW50LTEmJihoTGUoe2Ryb3Bkb3duTGlzdEVsZW1lbnQ6c2kodGhpcyxnZCksaW5kZXg6c2kodGhpcyx4cykuY3VycmVudGx5U2VsZWN0ZWRJdGVtSW5kZXh9KSxXZih0aGlzLEFPLHlaKS5jYWxsKHRoaXMsc2kodGhpcyx4cykuY3VycmVu''@;'; put 'put ''dGx5U2VsZWN0ZWRJdGVtSW5kZXgrMSkpfWZvY3VzU2VhcmNoSW5wdXQoKXtzaSh0aGlzLE83KSYmc2kodGhpcyxPNykuZm9jdXMoKX1yZXNldCgpe3RoaXMucmVtb3ZlQWxsRHJvcGRvd25JdGVtcygpLFdmKHRoaXMsd0xlLGROdCkuY2FsbCh0aGlzKSxzaSh0aGlzLE83KSYmKHNpKHRoaXMs''@;'; put 'put ''TzcpLnZhbHVlPSIiKSxzaSh0aGlzLFN1KSYmKHNpKHRoaXMsU3UpLnN0eWxlLnBvc2l0aW9uPSIiLHNpKHRoaXMsU3UpLnN0eWxlLnRvcD0iIixzaSh0aGlzLFN1KS5zdHlsZS5oZWlnaHQ9IiIsc2kodGhpcyxTdSkuc2Nyb2xsVG9wPTApfWlzRmxpcHBlZFZlcnRpY2FsbHkoKXtyZXR1cm4g''@;'; put 'put ''c2kodGhpcyx4cykuZmxpcHBlZFZlcnRpY2FsbHl9Z2V0SGVpZ2h0KGU9ITEsdD0hMSl7aWYoIXNpKHRoaXMsaTIpfHwhc2kodGhpcyxTdSkpcmV0dXJuIDA7Y29uc3Qgcj1zaSh0aGlzLGkyKS5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHNpKHRoaXMsU3UpKTtyZXR1cm4gV2YodGhp''@;'; put 'put ''cyx2TGUsc050KS5jYWxsKHRoaXMsZSkrV2YodGhpcywkZGUsRUxlKS5jYWxsKHRoaXMpKyghMD09PXQ/MipwYXJzZUludChyLmdldFByb3BlcnR5VmFsdWUoIi0taHQtbWVudS12ZXJ0aWNhbC1wYWRkaW5nIiksMTApOjApfWdldElucHV0Q29udHJvbGxlcigpe3JldHVybiBzaSh0aGlzLE53''@;'; put 'put ''KX1yZW1vdmVBbGxEcm9wZG93bkl0ZW1zKCl7c2kodGhpcyxnZCkmJihBcnJheS5mcm9tKHNpKHRoaXMsZ2QpLmNoaWxkcmVuKS5mb3JFYWNoKGU9PldmKHRoaXMsYkxlLHVOdCkuY2FsbCh0aGlzLGUpKSxzaSh0aGlzLHhzKS5jaGVja2JveENoYW5nZUxpc3RlbmVycy5jbGVhcigpLHNpKHRo''@;'; put 'put ''aXMsZ2QpLmlubmVySFRNTD0iIil9ZGlzYWJsZUNoZWNrYm94ZXMoKXtzaSh0aGlzLHhzKS5hcmVDaGVja2JveGVzRGlzYWJsZWQ9ITAsc2kodGhpcyxnZCkmJmZ1bmN0aW9uIGVOdCh7ZHJvcGRvd25MaXN0RWxlbWVudDpufSl7bi5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPSJjaGVj''@;'; put 'put ''a2JveCJdOm5vdCg6Y2hlY2tlZCknKS5mb3JFYWNoKGU9PntlLmRhdGFzZXQuZGlzYWJsZWQ9InRydWUifSl9KHtkcm9wZG93bkxpc3RFbGVtZW50OnNpKHRoaXMsZ2QpfSl9ZW5hYmxlQ2hlY2tib3hlcygpe3NpKHRoaXMseHMpLmFyZUNoZWNrYm94ZXNEaXNhYmxlZD0hMSxzaSh0aGlzLGdk''@;'; put 'put ''KSYmZnVuY3Rpb24gdE50KHtkcm9wZG93bkxpc3RFbGVtZW50Om59KXtuLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKS5mb3JFYWNoKGU9PntlLmRhdGFzZXQuZGlzYWJsZWQ9ImZhbHNlIn0pfSh7ZHJvcGRvd25MaXN0RWxlbWVudDpzaSh0aGlzLGdkKX0pfWNv''@;'; put 'put ''bnN0cnVjdG9yKGUsdCl7aDYodGhpcyxBTyksaDYodGhpcyxnTGUpLGg2KHRoaXMsbUxlKSxoNih0aGlzLEdkZSksaDYodGhpcyx2TGUpLGg2KHRoaXMsJGRlKSxoNih0aGlzLF9MZSksaDYodGhpcyx5TGUpLGg2KHRoaXMsYkxlKSxoNih0aGlzLHdMZSksZDYodGhpcyxEVCx7d3JpdGFibGU6''@;'; put 'put ''ITAsdmFsdWU6dm9pZCAwfSksZDYodGhpcyxTdSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZDYodGhpcyxnZCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZDYodGhpcyxPNyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZDYodGhpcyxoXyx7d3JpdGFibGU6ITAsdmFsdWU6''@;'; put 'put ''dm9pZCAwfSksZDYodGhpcyxmNix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZDYodGhpcyxOdyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZDYodGhpcyxpMix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZDYodGhpcyxGdyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSks''@;'; put 'put ''ZDYodGhpcyx4cyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRTAodGhpcyxEVCxudWxsKSxFMCh0aGlzLFN1LG51bGwpLEUwKHRoaXMsZ2QsbnVsbCksRTAodGhpcyxPNyxudWxsKSxFMCh0aGlzLGhfLG51bGwpLEUwKHRoaXMsZjYsbnVsbCksRTAodGhpcyxOdyxudWxsKSxFMCh0aGlz''@;'; put 'put ''LGkyLG51bGwpLEUwKHRoaXMsRncsbmV3IFcyKHRoaXMpKSxFMCh0aGlzLHhzLHt2aXNpYmxlUm93c051bWJlclNldHRpbmc6bnVsbCxlbnRyaWVzQ291bnQ6MCxmbGlwcGVkVmVydGljYWxseTohMSxjdXJyZW50bHlTZWxlY3RlZEl0ZW1JbmRleDowLGNoZWNrYm94Q2hhbmdlTGlzdGVuZXJz''@;'; put 'put ''Om5ldyBNYXAsYXJlQ2hlY2tib3hlc0Rpc2FibGVkOiExLHNvdXJjZVNvcnRGdW5jdGlvbjpudWxsfSksRTAodGhpcyxTdSxlKSxFMCh0aGlzLGkyLHNpKHRoaXMsU3UpLm93bmVyRG9jdW1lbnQpLEUwKHRoaXMsRFQsdCksdGhpcy5pbml0KCl9fWZ1bmN0aW9uIHlaKG4pe3NpKHRoaXMseHMp''@;'; put 'put ''LmN1cnJlbnRseVNlbGVjdGVkSXRlbUluZGV4PW4sc2kodGhpcyxnZCkmJmZ1bmN0aW9uIEpPdCh7ZHJvcGRvd25MaXN0RWxlbWVudDpuLGluZGV4OmV9KXtjb25zdCB0PW4uY2hpbGRyZW5bZV07aWYodCl7Y29uc3Qgcj1SVCh0KTtyJiZyLmZvY3VzKCl9fSh7ZHJvcGRvd25MaXN0RWxlbWVu''@;'; put 'put ''dDpzaSh0aGlzLGdkKSxpbmRleDpufSl9ZnVuY3Rpb24gb050KG4pe2NvbnN0e3NwYWNlQWJvdmU6ZSxzcGFjZUJlbG93OnQsY2VsbEhlaWdodDpyfT1uO3JldHVybiB0aGlzLmdldEhlaWdodCghMCk+dCYmZT50K3J9ZnVuY3Rpb24gYU50KG4pe2lmKCFzaSh0aGlzLFN1KSlyZXR1cm47Y29u''@;'; put 'put ''c3R7Y2VsbEhlaWdodDplfT1uO3NpKHRoaXMseHMpLmZsaXBwZWRWZXJ0aWNhbGx5PyhzaSh0aGlzLFN1KS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHNpKHRoaXMsU3UpLnN0eWxlLnRvcD0tdGhpcy5nZXRIZWlnaHQoITEsITApLWUtMisicHgiKTooc2kodGhpcyxTdSkuc3R5bGUucG9z''@;'; put 'put ''aXRpb249IiIsc2kodGhpcyxTdSkuc3R5bGUudG9wPSIiKX1mdW5jdGlvbiBTTGUoKXtpZighc2kodGhpcyxpMil8fCFzaSh0aGlzLFN1KSlyZXR1cm4gMDtjb25zdCBuPXNpKHRoaXMsaTIpLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoc2kodGhpcyxTdSkpO3JldHVybiAyKnBhcnNl''@;'; put 'put ''SW50KG4uZ2V0UHJvcGVydHlWYWx1ZSgiLS1odC1tZW51LWl0ZW0tdmVydGljYWwtcGFkZGluZyIpLDEwKStwYXJzZUludChuLmdldFByb3BlcnR5VmFsdWUoIi0taHQtbGluZS1oZWlnaHQiKSwxMCl9ZnVuY3Rpb24gc050KG4pe2NvbnN0IGU9c2kodGhpcyx4cykuZW50cmllc0NvdW50O3Jl''@;'; put 'put ''dHVybihuP2U6c2kodGhpcyx4cykuYWN0dWFsUmVuZGVyZWRJdGVtc0NvdW50Pz9lKSpXZih0aGlzLEdkZSxTTGUpLmNhbGwodGhpcyl9ZnVuY3Rpb24gRUxlKCl7aWYoIShzaSh0aGlzLE53KT8uZW5hYmxlZCYmc2kodGhpcyxmNikmJnNpKHRoaXMsaF8pJiZzaSh0aGlzLGkyKSYmc2kodGhp''@;'; put 'put ''cyxTdSkpKXJldHVybiAwO2NvbnN0IG49c2kodGhpcyxpMikuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShzaSh0aGlzLFN1KSk7cmV0dXJuIHNpKHRoaXMsZjYpLm9mZnNldEhlaWdodCsoc2kodGhpcyxoXykub2Zmc2V0SGVpZ2h0KzIqcGFyc2VJbnQobi5nZXRQcm9wZXJ0eVZhbHVl''@;'; put 'put ''KCItLWh0LW1lbnUtdmVydGljYWwtcGFkZGluZyIpLDEwKSl9ZnVuY3Rpb24gbE50KHtyb290RG9jdW1lbnQ6bixpdGVtS2V5OmUsaXRlbVZhbHVlOnQsaW5kZXhXaXRoaW5MaXN0OnIsY2hlY2tlZDppPSExLGRpc2FibGVkOm89ITF9KXtpZighc2kodGhpcyxnZCl8fG51bGw9PT1zaSh0aGlz''@;'; put 'put ''LERUKSlyZXR1cm47Y29uc3QgYT1mdW5jdGlvbiBuTnQoe3Jvb3REb2N1bWVudDpuLGluc3RhbmNlSWQ6ZSxpdGVtS2V5OnQsaXRlbVZhbHVlOnIsaW5kZXhXaXRoaW5MaXN0OmksY2hlY2tlZDpvPSExLGRpc2FibGVkOmE9ITF9KXtjb25zdCBsPW4uY3JlYXRlRWxlbWVudCgibGkiKSx1PW4u''@;'; put 'put ''Y3JlYXRlRWxlbWVudCgiZGl2IiksZz1uLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksRT1uLmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7cmV0dXJuIGcuaWQ9YCR7ZX0tJHtZT3R9JHtpfWAsZy50eXBlPSJjaGVja2JveCIsZy5kYXRhc2V0LnZhbHVlPXIsZy5kYXRhc2V0LmluZGV4PVN0cmluZyhp''@;'; put 'put ''KSxnLmRhdGFzZXQuZGlzYWJsZWQ9YSYmIW8/InRydWUiOiJmYWxzZSIsdCYmKGcuZGF0YXNldC5rZXk9dCksRS5odG1sRm9yPWcuaWQsRS50ZXh0Q29udGVudD1yLHUuYXBwZW5kQ2hpbGQoZyksdS5hcHBlbmRDaGlsZChFKSxsLmFwcGVuZENoaWxkKHUpLGx9KHtyb290RG9jdW1lbnQ6bixp''@;'; put 'put ''bnN0YW5jZUlkOnNpKHRoaXMsRFQpLGl0ZW1LZXk6ZSxpdGVtVmFsdWU6dCxpbmRleFdpdGhpbkxpc3Q6cixjaGVja2VkOmksZGlzYWJsZWQ6b30pO2kmJnVMZShhKSxXZih0aGlzLHlMZSxjTnQpLmNhbGwodGhpcyxhKSxzaSh0aGlzLGdkKS5hcHBlbmRDaGlsZChhKX1mdW5jdGlvbiBjTnQo''@;'; put 'put ''bil7Y29uc3QgZT1SVChuKTtpZighZXx8IXNpKHRoaXMsZ2QpKXJldHVybjtjb25zdCB0PSgpPT57InRydWUiPT09ZS5kYXRhc2V0LmRpc2FibGVkJiZlLmNoZWNrZWQ/ZS5jaGVja2VkPSExOmUuY2hlY2tlZD8odUxlKG4pLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJEcm9wZG93bkl0ZW1D''@;'; put 'put ''aGVja2VkIixlLmRhdGFzZXQua2V5LGUuZGF0YXNldC52YWx1ZSkpOihkTGUobiksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckRyb3Bkb3duSXRlbVVuY2hlY2tlZCIsZS5kYXRhc2V0LmtleSxlLmRhdGFzZXQudmFsdWUpKX0scj1pPT57Y29uc3Qgbz1BYShpKTtvPT09ZXx8InRydWUiPT09''@;'; put 'put ''ZS5kYXRhc2V0LmRpc2FibGVkfHwiTEFCRUwiPT09by50YWdOYW1lfHwoZS5jaGVja2VkPSFlLmNoZWNrZWQsZS5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgiY2hhbmdlIikpKX07c2kodGhpcyx4cykuY2hlY2tib3hDaGFuZ2VMaXN0ZW5lcnMuc2V0KGUse2NoYW5nZTp0LGNsaWNrOnJ9KSxz''@;'; put 'put ''aSh0aGlzLEZ3KS5hZGRFdmVudExpc3RlbmVyKGUsImNoYW5nZSIsdCksc2kodGhpcyxGdykuYWRkRXZlbnRMaXN0ZW5lcihuLCJjbGljayIscil9ZnVuY3Rpb24gdU50KG4pe2NvbnN0IGU9UlQobik7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9c2kodGhpcyx4cykuY2hlY2tib3hDaGFuZ2VMaXN0''@;'; put 'put ''ZW5lcnMuZ2V0KGUpO3QmJihzaSh0aGlzLEZ3KS5yZW1vdmVFdmVudExpc3RlbmVyKGUsImNoYW5nZSIsdC5jaGFuZ2UpLHNpKHRoaXMsRncpLnJlbW92ZUV2ZW50TGlzdGVuZXIobiwiY2xpY2siLHQuY2xpY2spLHNpKHRoaXMseHMpLmNoZWNrYm94Q2hhbmdlTGlzdGVuZXJzLmRlbGV0ZShl''@;'; put 'put ''KSl9ZnVuY3Rpb24gZE50KCl7c2kodGhpcyx4cykudmlzaWJsZVJvd3NOdW1iZXJTZXR0aW5nPW51bGwsc2kodGhpcyx4cykuZW50cmllc0NvdW50PTAsc2kodGhpcyx4cykuZmxpcHBlZFZlcnRpY2FsbHk9ITEsc2kodGhpcyx4cykuY3VycmVudGx5U2VsZWN0ZWRJdGVtSW5kZXg9MCxzaSh0''@;'; put 'put ''aGlzLHhzKS5jaGVja2JveENoYW5nZUxpc3RlbmVycy5jbGVhcigpLHNpKHRoaXMseHMpLmFyZUNoZWNrYm94ZXNEaXNhYmxlZD0hMSxzaSh0aGlzLHhzKS5zb3VyY2VTb3J0RnVuY3Rpb249bnVsbH1ZbChDTGUsX2gpO2NsYXNzIHFkZXtzZXRNYXhTZWxlY3Rpb25Db3VudChlKXt0aGlzLm1h''@;'; put 'put ''eFNlbGVjdGlvbnNDb3VudD1lfWFkZChlKXt0aGlzLnNlbGVjdGVkSXRlbXMuc2l6ZT49dGhpcy5tYXhTZWxlY3Rpb25zQ291bnR8fChBcnJheS5pc0FycmF5KGUpP2UuZm9yRWFjaCh0PT50aGlzLnNlbGVjdGVkSXRlbXMuYWRkKHQpKTp0aGlzLnNlbGVjdGVkSXRlbXMuYWRkKGUpKX1yZW1v''@;'; put 'put ''dmUoZSl7aWYoIWIwKGUpKXJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMuZGVsZXRlKGUpO3tjb25zdCByPUFycmF5LmZyb20odGhpcy5zZWxlY3RlZEl0ZW1zKS5maW5kKGk9Pmc3KGksZSkpO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcy5kZWxldGUociksITB9cmV0''@;'; put 'put ''dXJuITF9aGFzKGUpe3JldHVybiBhTGUodGhpcy5nZXRJdGVtc0FycmF5KCksZSl9Y2xlYXIoKXt0aGlzLnNlbGVjdGVkSXRlbXMuY2xlYXIoKX1nZXRTaXplKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcy5zaXplfWdldEl0ZW1zQXJyYXkoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnNl''@;'; put 'put ''bGVjdGVkSXRlbXMpfWNvbnN0cnVjdG9yKGUpe3RoaXMuc2VsZWN0ZWRJdGVtcz1BcnJheS5pc0FycmF5KGUpP25ldyBTZXQoZSk6bmV3IFNldCx0aGlzLm1heFNlbGVjdGlvbnNDb3VudD0xLzB9fWZ1bmN0aW9uIE1MZShuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNh''@;'; put 'put ''bm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gVExlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNl''@;'; put 'put ''Iik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIFVoKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIGhOdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sVExlKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIHhMZShuLGUsdCl7TUxlKG4sZSksZS5zZXQobix0KX1mdW5jdGlvbiBr''@;'; put 'put ''TyhuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIGZOdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4sVExlKG4s''@;'; put 'put ''ZSwic2V0IiksdCksdH1mdW5jdGlvbiBabChuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiBZZihuLGUpe01MZShuLGUpLGUuYWRkKG4pfWNvbnN0''@;'; put 'put ''IEFMZT0ibXVsdGlzZWxlY3QiLEtkZT0ibXVsdGlzZWxlY3RFZGl0b3IiO3ZhciBvMj1uZXcgV2Vha01hcCx4ND1uZXcgV2Vha01hcCxSTz1uZXcgV2Vha1NldCxrTGU9bmV3IFdlYWtTZXQsUkxlPW5ldyBXZWFrU2V0LElMZT1uZXcgV2Vha1NldCxETGU9bmV3IFdlYWtTZXQsYlo9bmV3IFdl''@;'; put 'put ''YWtTZXQsWGRlPW5ldyBXZWFrU2V0LFFkZT1uZXcgV2Vha1NldCxKZGU9bmV3IFdlYWtTZXQsZWhlPW5ldyBXZWFrU2V0LExMZT1uZXcgV2Vha1NldCxPTGU9bmV3IFdlYWtTZXQsdGhlPW5ldyBXZWFrU2V0LFhwPW5ldyBXZWFrU2V0LE5MZT1uZXcgV2Vha1NldDtjbGFzcyBGTGUgZXh0ZW5k''@;'; put 'put ''cyBJN3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuIEFMZX1jcmVhdGVFbGVtZW50cygpe2NvbnN0e3Jvb3REb2N1bWVudDplfT10aGlzLmhvdDtrTyh0aGlzLHg0LGUuY3JlYXRlRWxlbWVudCgiZGl2IikpLFVoKHRoaXMseDQpLnN0eWxlLmRpc3BsYXk9Im5vbmUiLFlyKFVoKHRo''@;'; put 'put ''aXMseDQpLCJoYW5kc29udGFibGVFZGl0b3IiKSx0aGlzLmRyb3Bkb3duQ29udGFpbmVyRWxlbWVudD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksWXIodGhpcy5kcm9wZG93bkNvbnRhaW5lckVsZW1lbnQsImh0LW11bHRpLXNlbGVjdC1lZGl0b3IgaGFuZHNv''@;'; put 'put ''bnRhYmxlRWRpdG9yIiksS28odGhpcy5kcm9wZG93bkNvbnRhaW5lckVsZW1lbnQsW04zKCJTZWxlY3Qgb3B0aW9ucyIpLFsicm9sZSIsImdyb3VwIl1dKSxVaCh0aGlzLHg0KS5hcHBlbmRDaGlsZCh0aGlzLmRyb3Bkb3duQ29udGFpbmVyRWxlbWVudCksdGhpcy5ob3Qucm9vdEVsZW1lbnQu''@;'; put 'put ''YXBwZW5kQ2hpbGQoVWgodGhpcyx4NCkpLHRoaXMuZHJvcGRvd25Db250cm9sbGVyPW5ldyBDTGUodGhpcy5kcm9wZG93bkNvbnRhaW5lckVsZW1lbnQsdGhpcy5ob3QuZ3VpZCl9cHJlcGFyZShlLHQscixpLG8sYSl7c3VwZXIucHJlcGFyZShlLHQscixpLG8sYSk7Y29uc3QgbD1mdW5jdGlv''@;'; put 'put ''biBPT3Qobil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuJiZic2Uobik/SlNPTi5wYXJzZShuKTpufShvKSxnPWZ1bmN0aW9uIE5PdChuLGUpe3JldHVybiBFeGUobixlLCh0LHIpPT5KU09OLnN0cmluZ2lmeSh0KT09PUpTT04uc3RyaW5naWZ5KHIpKX0oQXJyYXkuaXNBcnJheShsKT9sOlts''@;'; put 'put ''XSxabCh0aGlzLFJPLHdaKS5jYWxsKHRoaXMpKTt0aGlzLmRyb3Bkb3duQ29udHJvbGxlci5yZXNldCgpLGcubGVuZ3RoPj1abCh0aGlzLFhwLGhtKS5jYWxsKHRoaXMsIm1heFNlbGVjdGlvbnMiKSYmWmwodGhpcyxiWixuaGUpLmNhbGwodGhpcyksWmwodGhpcyx0aGUsakxlKS5jYWxsKHRo''@;'; put 'put ''aXMsZyksdGhpcy5kcm9wZG93bkNvbnRyb2xsZXIuc2V0U291cmNlU29ydEZ1bmN0aW9uKFpsKHRoaXMsWHAsaG0pLmNhbGwodGhpcywic291cmNlU29ydEZ1bmN0aW9uIik/P251bGwpLHRoaXMuZHJvcGRvd25Db250cm9sbGVyLmZpbGxEcm9wZG93bihabCh0aGlzLFJPLHdaKS5jYWxsKHRo''@;'; put 'put ''aXMpLGcpLHRoaXMuZHJvcGRvd25Db250cm9sbGVyLnNldFZpc2libGVSb3dzTnVtYmVyU2V0dGluZyhabCh0aGlzLFhwLGhtKS5jYWxsKHRoaXMsInZpc2libGVSb3dzIikpLHRoaXMuZHJvcGRvd25Db250cm9sbGVyLnNldFNlYXJjaElucHV0VmlzaWJpbGl0eShabCh0aGlzLFhwLGhtKS5j''@;'; put 'put ''YWxsKHRoaXMsInNlYXJjaElucHV0IikpLHZvaWQgMCE9PWEubWF4U2VsZWN0aW9ucyYmVWgodGhpcyxvMikuc2V0TWF4U2VsZWN0aW9uQ291bnQoWmwodGhpcyxYcCxobSkuY2FsbCh0aGlzLCJtYXhTZWxlY3Rpb25zIikpfWZpbmlzaEVkaXRpbmcoZSx0LHIpe3N1cGVyLmZpbmlzaEVkaXRp''@;'; put 'put ''bmcoZSx0LHIpfWJpbmRFdmVudHMoKXt0aGlzLmRyb3Bkb3duQ29udHJvbGxlci5hZGRMb2NhbEhvb2soImFmdGVyRHJvcGRvd25JdGVtQ2hlY2tlZCIsKGUsdCk9PntabCh0aGlzLExMZSx3TnQpLmNhbGwodGhpcyxlLHQpLFVoKHRoaXMsbzIpLmdldFNpemUoKT49WmwodGhpcyxYcCxobSku''@;'; put 'put ''Y2FsbCh0aGlzLCJtYXhTZWxlY3Rpb25zIikmJlpsKHRoaXMsYlosbmhlKS5jYWxsKHRoaXMpfSksdGhpcy5kcm9wZG93bkNvbnRyb2xsZXIuYWRkTG9jYWxIb29rKCJhZnRlckRyb3Bkb3duSXRlbVVuY2hlY2tlZCIsKGUsdCk9PntabCh0aGlzLE9MZSxDTnQpLmNhbGwodGhpcyxlLHQpLFVo''@;'; put 'put ''KHRoaXMsbzIpLmdldFNpemUoKTxabCh0aGlzLFhwLGhtKS5jYWxsKHRoaXMsIm1heFNlbGVjdGlvbnMiKSYmWmwodGhpcyxYZGUsUExlKS5jYWxsKHRoaXMpfSksdGhpcy5hZGRIb29rKCJhZnRlckRlc3Ryb3kiLCgpPT50aGlzLmRlc3Ryb3koKSksdGhpcy5hZGRIb29rKCJhZnRlclNldFNv''@;'; put 'put ''dXJjZURhdGFBdENlbGwiLChlLHQpPT5abCh0aGlzLE5MZSxTTnQpLmNhbGwodGhpcyxlLHQpKSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsVmVydGljYWxseSIsKCk9''@;'; put 'put ''PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5kcm9wZG93bkNvbnRyb2xsZXIuZ2V0SW5wdXRDb250cm9sbGVyKCkuYWRkTG9jYWxIb29rKCJ0cmlnZ2VyRmlsdGVyIixlPT5abCh0aGlzLFFkZSxITGUpLmNhbGwodGhpcyxlKSl9b3BlbihlKXtjb25zdCB0PWUmJiJrZXlDb2RlImlu''@;'; put 'put ''IGU/ZS5rZXlDb2RlOjAscj1lJiYia2V5ImluIGU/ZS5rZXk6IiI7aWYodCYmUHNlKHQpKXtjb25zdCBpPTE9PT1yLmxlbmd0aD9yOlN0cmluZy5mcm9tQ2hhckNvZGUodCk7dGhpcy5kcm9wZG93bkNvbnRyb2xsZXIuZ2V0SW5wdXRDb250cm9sbGVyKCkuZW5hYmxlZCYmKHRoaXMuZHJvcGRv''@;'; put 'put ''d25Db250cm9sbGVyLmdldElucHV0Q29udHJvbGxlcigpLnNldFZhbHVlKGkpLFpsKHRoaXMsUWRlLEhMZSkuY2FsbCh0aGlzLGkpKSxlPy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZW5hYmxlRnVsbEVkaXRNb2RlKCl9WmwodGhpcyxJTGUseU50KS5jYWxsKHRoaXMpLHRoaXMucmVmcmVzaERp''@;'; put 'put ''bWVuc2lvbnMoKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZWRpdG9yIiksWmwodGhpcyxrTGUsdk50KS5jYWxsKHRoaXMpLHRoaXMuZHJvcGRvd25Db250cm9sbGVyLmdldElucHV0Q29udHJvbGxlcigpLmxpc3RlbigpLHRoaXMuZHJvcGRv''@;'; put 'put ''d25Db250cm9sbGVyLnVwZGF0ZURpbWVuc2lvbnMoWmwodGhpcyxKZGUsVkxlKS5jYWxsKHRoaXMpKX1jbG9zZSgpe1psKHRoaXMsRExlLGJOdCkuY2FsbCh0aGlzKSxabCh0aGlzLFJMZSxfTnQpLmNhbGwodGhpcyksdGhpcy5kcm9wZG93bkNvbnRyb2xsZXIuZ2V0SW5wdXRDb250cm9sbGVy''@;'; put 'put ''KCkudW5saXN0ZW4oKX1nZXRWYWx1ZSgpe3JldHVybiBVaCh0aGlzLG8yKS5nZXRJdGVtc0FycmF5KCl9c2V0VmFsdWUoKXt9cmVmcmVzaERpbWVuc2lvbnMoKXtpZighdGhpcy5nZXRFZGl0ZWRDZWxsKCkpcmV0dXJuIHZvaWQgdGhpcy5jbG9zZSgpO2NvbnN0e3RvcDplLHN0YXJ0OnQsaGVp''@;'; put 'put ''Z2h0OnJ9PXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKSxpPVVoKHRoaXMseDQpLnN0eWxlO2kudG9wPWAke2Urcn1weGAsaVt0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQiXT1gJHt0fXB4YCxZcihVaCh0aGlzLHg0KSwiaHRfZWRpdG9yX3Zpc2libGUiKX1mb2N1cygpeyExPT09Wmwo''@;'; put 'put ''dGhpcyxYcCxobSkuY2FsbCh0aGlzLCJzZWFyY2hJbnB1dCIpP3RoaXMuZHJvcGRvd25Db250cm9sbGVyLmZvY3VzRmlyc3RJdGVtKCk6dGhpcy5kcm9wZG93bkNvbnRyb2xsZXIuZm9jdXNTZWFyY2hJbnB1dCgpfWdldElucHV0RWxlbWVudCgpe3JldHVybiB0aGlzLmRyb3Bkb3duQ29udHJv''@;'; put 'put ''bGxlci5nZXRJbnB1dENvbnRyb2xsZXIoKS5nZXRJbnB1dEVsZW1lbnQoKX1kZXN0cm95KCl7dGhpcy5jbG9zZSgpLHRoaXMuZHJvcGRvd25Db250cm9sbGVyLnJlc2V0KCl9Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksWWYodGhpcyxSTyksWWYodGhpcyxrTGUpLFlmKHRoaXMsUkxlKSxZZih0''@;'; put 'put ''aGlzLElMZSksWWYodGhpcyxETGUpLFlmKHRoaXMsYlopLFlmKHRoaXMsWGRlKSxZZih0aGlzLFFkZSksWWYodGhpcyxKZGUpLFlmKHRoaXMsZWhlKSxZZih0aGlzLExMZSksWWYodGhpcyxPTGUpLFlmKHRoaXMsdGhlKSxZZih0aGlzLFhwKSxZZih0aGlzLE5MZSkseExlKHRoaXMsbzIse3dy''@;'; put 'put ''aXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHhMZSh0aGlzLHg0LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0aGlzLl9jbG9zZUFmdGVyRGF0YUNoYW5nZT0hMSxrTyh0aGlzLG8yLG5ldyBxZGUpLGtPKHRoaXMseDQsbnVsbCksdGhpcy5kcm9wZG93bkNvbnRhaW5lckVsZW1lbnQ9bnVs''@;'; put 'put ''bCx0aGlzLmRyb3Bkb3duQ29udHJvbGxlcj1udWxsLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBXMih0aGlzKSx0aGlzLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5iaW5kRXZlbnRzKCl9fWZ1bmN0aW9uIHdaKCl7cmV0dXJuIHRoaXMuY2VsbFByb3BlcnRpZXMuc291cmNlPz9bXX1mdW5jdGlvbiB2''@;'; put 'put ''TnQoKXtjb25zdCBlPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpO2UuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOigpPT57dGhpcy5kcm9wZG93bkNvbnRyb2xsZXIuZm9jdXNQcmV2aW91c0l0ZW0oKX19LHtrZXlz''@;'; put 'put ''OltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+e3RoaXMuaG90LnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5nZXRJbnB1dEVsZW1lbnQoKT90aGlzLmRyb3Bkb3duQ29udHJvbGxlci5mb2N1c0ZpcnN0SXRlbSgpOnRoaXMuZHJvcGRvd25Db250cm9sbGVyLmZvY3VzTmV4''@;'; put 'put ''dEl0ZW0oKX19XSx7Z3JvdXA6S2RlfSksZS5hZGRTaG9ydGN1dHMoW3trZXlzOltbImVudGVyIl0sWyJzaGlmdCIsImVudGVyIl0sWyJjb250cm9sL21ldGEiLCJlbnRlciJdLFsiY29udHJvbC9tZXRhIiwic2hpZnQiLCJlbnRlciJdXSxydW5Pbmx5SWY6KCk9PiFabCh0aGlzLFhwLGhtKS5j''@;'; put 'put ''YWxsKHRoaXMsImVudGVyQ29tbWl0cyIpLGNhbGxiYWNrOnQ9Pntjb25zdCByPXRoaXMuaG90LnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50O3JldHVybiByIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCYmImNoZWNrYm94Ij09PXIudHlwZSYmKHIuY2hlY2tlZD0hci5jaGVja2VkLHIu''@;'; put 'put ''ZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoImNoYW5nZSIpKSksdC5wcmV2ZW50RGVmYXVsdCgpLCExfX0se2tleXM6W1sic3BhY2UiXV0scnVuT25seUlmOigpPT4hWmwodGhpcyxYcCxobSkuY2FsbCh0aGlzLCJlbnRlckNvbW1pdHMiKSxjYWxsYmFjazp0PT57dC5wcmV2ZW50RGVmYXVsdCgp''@;'; put 'put ''fX1dLHtncm91cDpLZGUscmVsYXRpdmVUb0dyb3VwOlI3LHBvc2l0aW9uOiJiZWZvcmUifSl9ZnVuY3Rpb24gX050KCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChLZGUpfWZ1bmN0aW9uIHlOdCgpe1Vo''@;'; put 'put ''KHRoaXMseDQpLnN0eWxlLmRpc3BsYXk9IiJ9ZnVuY3Rpb24gYk50KCl7VWgodGhpcyx4NCkuc3R5bGUuZGlzcGxheT0ibm9uZSJ9ZnVuY3Rpb24gbmhlKCl7dGhpcy5kcm9wZG93bkNvbnRyb2xsZXIuZGlzYWJsZUNoZWNrYm94ZXMoKX1mdW5jdGlvbiBQTGUoKXt0aGlzLmRyb3Bkb3duQ29u''@;'; put 'put ''dHJvbGxlci5lbmFibGVDaGVja2JveGVzKCl9ZnVuY3Rpb24gSExlKG4sZT1abCh0aGlzLFhwLGhtKS5jYWxsKHRoaXMsImZpbHRlclNlbGVjdGVkSXRlbXMiKT8/ITApe2NvbnN0IHQ9WmwodGhpcyxSTyx3WikuY2FsbCh0aGlzKS5maWx0ZXIocj0+e2NvbnN0IGk9Im9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiByJiZudWxsIT09ciYmInZhbHVlImluIHI/ci52YWx1ZTpyO3JldHVybiEoZXx8IVVoKHRoaXMsbzIpLmhhcyhyKSl8fCh0aGlzLmNlbGxQcm9wZXJ0aWVzLmZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU/U3RyaW5nKGkpLmluY2x1ZGVzKG4pOlN0cmluZyhpKS50b0xvd2VyQ2FzZSgpLmluY2x1''@;'; put 'put ''ZGVzKG4udG9Mb3dlckNhc2UoKSkpfSk7dGhpcy5kcm9wZG93bkNvbnRyb2xsZXIuZmlsbERyb3Bkb3duKHQsVWgodGhpcyxvMikuZ2V0SXRlbXNBcnJheSgpKSx0aGlzLmRyb3Bkb3duQ29udHJvbGxlci51cGRhdGVEaW1lbnNpb25zKFpsKHRoaXMsSmRlLFZMZSkuY2FsbCh0aGlzKSwhMCl9''@;'; put 'put ''ZnVuY3Rpb24gVkxlKCl7Y29uc3Qgbj10aGlzLmdldEVkaXRlZENlbGxSZWN0KCksZT10aGlzLmhvdC52aWV3LmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpLHQ9dGhpcy5ob3Qudmlldy5nZXRXb3Jrc3BhY2VIZWlnaHQoKTtsZXQgcj1uLnRvcDtpZihlKXtjb25zdCBvPXRoaXMu''@;'; put 'put ''aG90LnZpZXcuZ2V0VGFibGVPZmZzZXQoKS50b3AtdGhpcy5ob3Qucm9vdFdpbmRvdy5zY3JvbGxZO3I9TWF0aC5tYXgocitvLDApfXJldHVybntzcGFjZUFib3ZlOnIsc3BhY2VCZWxvdzp0LXItbi5oZWlnaHQsY2VsbEhlaWdodDpuLmhlaWdodH19ZnVuY3Rpb24gQkxlKCl7Y29uc3Qgbj1V''@;'; put 'put ''aCh0aGlzLG8yKS5nZXRJdGVtc0FycmF5KCk7dGhpcy5zYXZlVmFsdWUoW1tuXV0pfWZ1bmN0aW9uIHdOdChuLGUpe24/VWgodGhpcyxvMikuYWRkKHtrZXk6bix2YWx1ZTplfSk6VWgodGhpcyxvMikuYWRkKGUpLFpsKHRoaXMsZWhlLEJMZSkuY2FsbCh0aGlzKSx0aGlzLnJlZnJlc2hEaW1l''@;'; put 'put ''bnNpb25zKCl9ZnVuY3Rpb24gQ050KG4sZSl7bj9VaCh0aGlzLG8yKS5yZW1vdmUoe2tleTpuLHZhbHVlOmV9KTpVaCh0aGlzLG8yKS5yZW1vdmUoZSksWmwodGhpcyxlaGUsQkxlKS5jYWxsKHRoaXMpLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKX1mdW5jdGlvbiBqTGUobil7a08odGhpcyxv''@;'; put 'put ''MixuLmxlbmd0aD4wP25ldyBxZGUobik6bmV3IHFkZSl9ZnVuY3Rpb24gaG0obil7cmV0dXJuIHRoaXMuY2VsbFByb3BlcnRpZXNbbl19ZnVuY3Rpb24gU050KG4sZSl7dGhpcy5pc09wZW5lZCgpJiZlPT09YCR7QUxlfS1yZW5kZXJlcmAmJnBhcnNlSW50KFN0cmluZyhuWzBdWzBdKSwxMCk9''@;'; put 'put ''PT10aGlzLmNlbGxQcm9wZXJ0aWVzLnZpc3VhbFJvdyYmcGFyc2VJbnQoU3RyaW5nKG5bMF1bMV0pLDEwKT09PXRoaXMuY2VsbFByb3BlcnRpZXMudmlzdWFsQ29sJiYoWmwodGhpcyx0aGUsakxlKS5jYWxsKHRoaXMsblswXVszXSksdGhpcy5kcm9wZG93bkNvbnRyb2xsZXIuZmlsbERyb3Bk''@;'; put 'put ''b3duKFpsKHRoaXMsUk8sd1opLmNhbGwodGhpcyksVWgodGhpcyxvMikuZ2V0SXRlbXNBcnJheSgpKSx0aGlzLmRyb3Bkb3duQ29udHJvbGxlci5mb2N1c0l0ZW0oMCksVWgodGhpcyxvMikuZ2V0U2l6ZSgpPj1abCh0aGlzLFhwLGhtKS5jYWxsKHRoaXMsIm1heFNlbGVjdGlvbnMiKT9abCh0''@;'; put 'put ''aGlzLGJaLG5oZSkuY2FsbCh0aGlzKTpabCh0aGlzLFhkZSxQTGUpLmNhbGwodGhpcykpfWZ1bmN0aW9uIHJoZShuLGUsdCxyLGksbyxhKXtfNyhlLG8/PyIiLCExKX1mdW5jdGlvbiBJTyhuLGUsdCxyLGksbyxhKXtjb25zdHtyb290RG9jdW1lbnQ6bH09bix1PWEuYWxsb3dIdG1sP3JoZTpE''@;'; put 'put ''NyxnPWwuY3JlYXRlRWxlbWVudCgiRElWIiksRT1uLmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7aWYoZy5jbGFzc05hbWU9Imh0QXV0b2NvbXBsZXRlQXJyb3ciLEUmJmcuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxnLmFwcGVuZENoaWxkKGwuY3JlYXRlVGV4dE5vZGUoIlx1''@;'; put 'put ''MjViYyIpKSx1LmFwcGx5KHRoaXMsW24sZSx0LHIsaSxvLGFdKSxlLmZpcnN0Q2hpbGR8fGUuYXBwZW5kQ2hpbGQobC5jcmVhdGVUZXh0Tm9kZSgiXHhhMCIpKSxlLmluc2VydEJlZm9yZShnLGUuZmlyc3RDaGlsZCksWXIoZSwiaHRBdXRvY29tcGxldGUiKSwhbi5hY0Fycm93TGlzdGVuZXIp''@;'; put 'put ''e2NvbnN0IE89bmV3IFcyKG4pO24uYWNBcnJvd0xpc3RlbmVyPWZ1bmN0aW9uKFope0xhKEFhKFopLCJodEF1dG9jb21wbGV0ZUFycm93IikmJm4udmlldy5fd3QuZ2V0U2V0dGluZygib25DZWxsRGJsQ2xpY2siLG51bGwsbi5fY3JlYXRlQ2VsbENvb3Jkcyh0LHIpLGUpfSxPLmFkZEV2ZW50''@;'; put 'put ''TGlzdGVuZXIobi5yb290RWxlbWVudCwibW91c2Vkb3duIixuLmFjQXJyb3dMaXN0ZW5lciksbi5hZGRIb29rT25jZSgiYWZ0ZXJEZXN0cm95IiwoKT0+e08uZGVzdHJveSgpfSl9fWZ1bmN0aW9uIGloZShuLGUsdCxyLGksbyxhKXtJTy5hcHBseSh0aGlzLFtuLGUsdCxyLGksbyxhXSl9cmhl''@;'; put 'put ''LlJFTkRFUkVSX1RZUEU9Imh0bWwiLElPLlJFTkRFUkVSX1RZUEU9ImF1dG9jb21wbGV0ZSIsaWhlLlJFTkRFUkVSX1RZUEU9ImRyb3Bkb3duIjtjb25zdCBETz0iI2JhZC12YWx1ZSMiLFFwPSJodC1sb2FkaW5nIixVTGU9bmV3IFdlYWtNYXAsekxlPW5ldyBXZWFrTWFwLExUPSJkYXRhLXJv''@;'; put 'put ''dyIsT1Q9ImRhdGEtY29sIjtmdW5jdGlvbiBvaGUobixlLHQscixpLG8sYSl7Y29uc3R7cm9vdERvY3VtZW50Omx9PW4sdT1uLmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7IWZ1bmN0aW9uIFJOdChuKXtsZXQgZT16TGUuZ2V0KG4pO2lmKCFlKXtjb25zdHtyb290RWxlbWVudDp0fT1uO2U9bmV3''@;'; put 'put ''IFcyKG4pLGUuYWRkRXZlbnRMaXN0ZW5lcih0LCJjbGljayIscj0+ZnVuY3Rpb24gT050KG4sZSl7Y29uc3QgdD1BYShuKTtpZighYWhlKHQpfHwhdC5oYXNBdHRyaWJ1dGUoTFQpfHwhdC5oYXNBdHRyaWJ1dGUoT1QpKXJldHVybjtjb25zdCByPU51bWJlci5wYXJzZUludCh0LmdldEF0dHJp''@;'; put 'put ''YnV0ZShMVCksMTApLGk9TnVtYmVyLnBhcnNlSW50KHQuZ2V0QXR0cmlidXRlKE9UKSwxMCk7ZS5nZXRDZWxsTWV0YShyLGkpLnJlYWRPbmx5JiZuLnByZXZlbnREZWZhdWx0KCl9KHIsbikpLGUuYWRkRXZlbnRMaXN0ZW5lcih0LCJtb3VzZXVwIixyPT5mdW5jdGlvbiBMTnQobixlKXtjb25z''@;'; put 'put ''dCB0PUFhKG4pO2FoZSh0KSYmKCF0Lmhhc0F0dHJpYnV0ZShMVCl8fCF0Lmhhc0F0dHJpYnV0ZShPVCl8fHNldFRpbWVvdXQoZS5saXN0ZW4sMTApKX0ocixuKSksZS5hZGRFdmVudExpc3RlbmVyKHQsImNoYW5nZSIscj0+ZnVuY3Rpb24gTk50KG4sZSl7Y29uc3QgdD1BYShuKTtpZighYWhl''@;'; put 'put ''KHQpfHwhdC5oYXNBdHRyaWJ1dGUoTFQpfHwhdC5oYXNBdHRyaWJ1dGUoT1QpKXJldHVybjtjb25zdCByPU51bWJlci5wYXJzZUludCh0LmdldEF0dHJpYnV0ZShMVCksMTApLGk9TnVtYmVyLnBhcnNlSW50KHQuZ2V0QXR0cmlidXRlKE9UKSwxMCksbz1lLmdldENlbGxNZXRhKHIsaSk7aWYo''@;'; put 'put ''IW8ucmVhZE9ubHkpe2xldCBhPW51bGw7YT10LmNoZWNrZWQ/dm9pZCAwPT09by51bmNoZWNrZWRUZW1wbGF0ZXx8by5jaGVja2VkVGVtcGxhdGU6dm9pZCAwIT09by51bmNoZWNrZWRUZW1wbGF0ZSYmby51bmNoZWNrZWRUZW1wbGF0ZSxlLnNldERhdGFBdENlbGwocixpLGEpfX0ocixuKSks''@;'; put 'put ''ekxlLnNldChuLGUpfX0obik7Y29uc3QgZz1mdW5jdGlvbiBJTnQobil7Y29uc3QgZT1uLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIGUuY2xhc3NOYW1lPSJodENoZWNrYm94UmVuZGVyZXJJbnB1dCIsZS50eXBlPSJjaGVja2JveCIsZS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4Iiwi''@;'; put 'put ''LTEiKSxlLmNsb25lTm9kZSghMSl9KGwpO2xldCBFPWc7Y29uc3QgTz1hLmxhYmVsO2xldCBaPSExO3R5cGVvZiBhLmNoZWNrZWRUZW1wbGF0ZT4idSImJihhLmNoZWNrZWRUZW1wbGF0ZT0hMCksdHlwZW9mIGEudW5jaGVja2VkVGVtcGxhdGU+InUiJiYoYS51bmNoZWNrZWRUZW1wbGF0ZT0h''@;'; put 'put ''MSksQzQoZSk7Y29uc3QgZWU9YS5sb2NhbGU7ZnVuY3Rpb24gV2UoQ3Q9ITEpe2NvbnN0IEF0PW4uZ2V0U2VsZWN0ZWRSYW5nZSgpLEt0PVtdLHF0PW5ldyBNYXA7bGV0IGduPVtdLFRuPTA7aWYoQXQpe2ZvcihsZXQgQ249MDtDbjxBdC5sZW5ndGg7Q24rKyl7Y29uc3R7cm93OnFyLGNvbDok''@;'; put 'put ''bn09QXRbQ25dLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpUcixjb2w6cml9PUF0W0NuXS5nZXRCb3R0b21FbmRDb3JuZXIoKTtpZihudWxsIT09cXImJm51bGwhPT0kbiYmbnVsbCE9PVRyJiZudWxsIT09cmkpe2ZvcihsZXQgZm49cXI7Zm48PVRyO2ZuKz0xKWZvcihsZXQgeXI9JG47eXI8''@;'; put 'put ''PXJpO3lyKz0xKXtjb25zdCBBbj1uLmdldENlbGxNZXRhKGZuLHlyKTtpZihBbi5oaWRkZW4pY29udGludWU7Y29uc3QgSHI9e2NoZWNrZWRUZW1wbGF0ZTpBbi5jaGVja2VkVGVtcGxhdGUsdW5jaGVja2VkVGVtcGxhdGU6QW4udW5jaGVja2VkVGVtcGxhdGV9O2lmKCJjaGVja2JveCIhPT1B''@;'; put 'put ''bi50eXBlKXshMD09PUN0JiYhQW4ucmVhZE9ubHkmJihxdC5oYXMoS3QubGVuZ3RoKT9xdC5zZXQoS3QubGVuZ3RoLFsuLi5xdC5nZXQoS3QubGVuZ3RoKSxbZm4seXIsbnVsbF1dKTpxdC5zZXQoS3QubGVuZ3RoLFtbZm4seXIsbnVsbF1dKSk7Y29udGludWV9aWYoITA9PT1Bbi5yZWFkT25s''@;'; put 'put ''eSljb250aW51ZTt0eXBlb2YgQW4uY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKEFuLmNoZWNrZWRUZW1wbGF0ZT0hMCksdHlwZW9mIEFuLnVuY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKEFuLnVuY2hlY2tlZFRlbXBsYXRlPSExKTtjb25zdCB0aT1uLmdldERhdGFBdENlbGwoZm4seXIpOyExPT09Q3Q/''@;'; put 'put ''W0FuLmNoZWNrZWRUZW1wbGF0ZSxTdHJpbmcoQW4uY2hlY2tlZFRlbXBsYXRlKV0uaW5jbHVkZXModGkpP2duLnB1c2goW2ZuLHlyLEFuLnVuY2hlY2tlZFRlbXBsYXRlLEhyXSk6W0FuLnVuY2hlY2tlZFRlbXBsYXRlLFN0cmluZyhBbi51bmNoZWNrZWRUZW1wbGF0ZSksbnVsbCx2b2lkIDBd''@;'; put 'put ''LmluY2x1ZGVzKHRpKSYmZ24ucHVzaChbZm4seXIsQW4uY2hlY2tlZFRlbXBsYXRlLEhyXSk6Z24ucHVzaChbZm4seXIsQW4udW5jaGVja2VkVGVtcGxhdGUsSHJdKSxUbis9MX1LdC5wdXNoKFRuKSxUbj0wfX1pZihnbj1nbi5ldmVyeSgoWywsQ25dKT0+Q249PT1nblswXVsyXSk/Z24ubWFw''@;'; put 'put ''KChbQ24scXIsJG5dKT0+W0NuLHFyLCRuXSk6Z24ubWFwKChbQ24scXIsLCRuXSk9PltDbixxciwkbj8uY2hlY2tlZFRlbXBsYXRlXSksZ24ubGVuZ3RoPjApe2NvbnN0IENuPVtdO2lmKEt0LmZvckVhY2goKHFyLCRuKT0+e2xldCBUcj1nbi5zcGxpY2UoMCxxcik7aWYocXQuc2l6ZSYmcXQu''@;'; put 'put ''aGFzKCRuKSl7Y29uc3Qgcmk9cXQuZ2V0KCRuKT8/W107VHI9Wy4uLlRyLC4uLnJpXX1Dbi5wdXNoKFRyKX0pLEN0KXtjb25zdCBxcj1bXTtDbi5mb3JFYWNoKCRuPT57JG4uZm9yRWFjaChUcj0+e3FyLnB1c2goVHIpfSl9KSxxci5sZW5ndGg+MCYmbi5zZXREYXRhQXRDZWxsKHFyKX1lbHNl''@;'; put 'put ''IENuLmZvckVhY2gocXI9Pntxci5sZW5ndGg+MCYmbi5zZXREYXRhQXRDZWxsKHFyKX0pfX19ZnVuY3Rpb24gYXQoKXtjb25zdCBDdD1uLmdldFNlbGVjdGVkUmFuZ2UoKTtpZihDdCl7Zm9yKGxldCBBdD0wO0F0PEN0Lmxlbmd0aDtBdCsrKXtjb25zdCBLdD1DdFtBdF0uZ2V0VG9wU3RhcnRD''@;'; put 'put ''b3JuZXIoKSxxdD1DdFtBdF0uZ2V0Qm90dG9tRW5kQ29ybmVyKCk7aWYobnVsbCE9PUt0LnJvdyYmbnVsbCE9PUt0LmNvbCYmbnVsbCE9PXF0LnJvdyYmbnVsbCE9PXF0LmNvbClmb3IobGV0IGduPUt0LnJvdztnbjw9cXQucm93O2duKyspZm9yKGxldCBUbj1LdC5jb2w7VG48PXF0LmNvbDtU''@;'; put 'put ''bisrKXtpZihuLmdldENlbGxNZXRhKGduLFRuKS5yZWFkT25seSljb250aW51ZTtjb25zdCBxcj1uLmdldENlbGwoZ24sVG4pO2lmKGhzKHFyKSYmcXIucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbdHlwZT1jaGVja2JveF0iKS5sZW5ndGg+MClyZXR1cm4hMH19cmV0dXJuITF9fShmdW5jdGlv''@;'; put 'put ''biB2ZSgpe289PT1hLmNoZWNrZWRUZW1wbGF0ZXx8djEoUGwobyksZWUpPT09djEoUGwoYS5jaGVja2VkVGVtcGxhdGUpLGVlKT9nLmNoZWNrZWQ9ITA6bz09PWEudW5jaGVja2VkVGVtcGxhdGV8fHYxKFBsKG8pLGVlKT09PXYxKFBsKGEudW5jaGVja2VkVGVtcGxhdGUpLGVlKT9nLmNoZWNr''@;'; put 'put ''ZWQ9ITE6QWwobyk/WXIoZywibm9WYWx1ZSIpOihnLnN0eWxlLmRpc3BsYXk9Im5vbmUiLFlyKGcsImh0QmFkVmFsdWUiKSxaPSEwKSxLbyhnLFtbTFQsdF0sW09ULHJdXSksdSYmS28oZyxbTjMobi5nZXRUcmFuc2xhdGVkUGhyYXNlKGcuY2hlY2tlZD9TdWU6RXVlKSkseXhlKGcuY2hlY2tl''@;'; put 'put ''ZCksWyJyb2xlIiwiY2hlY2tib3giXV0pfSkoKSxmdW5jdGlvbiBNZSgpe2lmKCFaJiZPKXtsZXQgQ3Q9IiI7aWYoTy52YWx1ZSlDdD1TdHJpbmcoImZ1bmN0aW9uIj09dHlwZW9mIE8udmFsdWU/KDAsTy52YWx1ZSkodCxyLGksbyk6Ty52YWx1ZSk7ZWxzZSBpZihPLnByb3BlcnR5KXtjb25z''@;'; put 'put ''dCBLdD1uLmdldERhdGFBdFJvd1Byb3AodCxTdHJpbmcoTy5wcm9wZXJ0eSkpO0N0PW51bGwhPT1LdD9TdHJpbmcoS3QpOiIifWNvbnN0IEF0PWZ1bmN0aW9uIEROdChuLGUsdCl7Y29uc3Qgcj1uLmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7ci5jbGFzc05hbWU9Imh0Q2hlY2tib3hSZW5kZXJl''@;'; put 'put ''ckxhYmVsICIrKHQ/ImZ1bGxXaWR0aCI6IiIpO2NvbnN0IGk9bi5jcmVhdGVUZXh0Tm9kZShlKTtpZih0KXtjb25zdCBvPW4uY3JlYXRlRWxlbWVudCgic3BhbiIpO28uYXBwZW5kQ2hpbGQoaSksci5hcHBlbmRDaGlsZChvKX1lbHNlIHIuYXBwZW5kQ2hpbGQoaSk7cmV0dXJuIHIuY2xvbmVO''@;'; put 'put ''b2RlKCEwKX0obCxDdCwhMCE9PU8uc2VwYXJhdGVkKTsiYmVmb3JlIj09PU8ucG9zaXRpb24/Ty5zZXBhcmF0ZWQ/KGUuYXBwZW5kQ2hpbGQoQXQpLGUuYXBwZW5kQ2hpbGQoZykpOihBdC5hcHBlbmRDaGlsZChnKSxFPUF0KTooIU8ucG9zaXRpb258fCJhZnRlciI9PT1PLnBvc2l0aW9uKSYm''@;'; put 'put ''KE8uc2VwYXJhdGVkPyhlLmFwcGVuZENoaWxkKGcpLGUuYXBwZW5kQ2hpbGQoQXQpKTooQXQuaW5zZXJ0QmVmb3JlKGcsQXQuZmlyc3RDaGlsZCksRT1BdCkpfX0oKSwoIU98fE8mJiFPLnNlcGFyYXRlZCkmJmUuYXBwZW5kQ2hpbGQoRSksWiYmZS5hcHBlbmRDaGlsZChsLmNyZWF0ZVRleHRO''@;'; put 'put ''b2RlKERPKSksVUxlLmhhcyhuKXx8KFVMZS5zZXQobiwhMCksZnVuY3Rpb24gSGUoKXtjb25zdCBBdD1uLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKSxLdD17Z3JvdXA6ImNoZWNrYm94UmVuZGVyZXIiLHJlbGF0aXZlVG9Hcm91cDpSNyxwb3NpdGlvbjoiYmVmb3Jl''@;'; put 'put ''In07QXQ/LmFkZFNob3J0Y3V0cyhbe2tleXM6W1sic3BhY2UiXV0sY2FsbGJhY2s6KCk9PihXZSgpLCFhdCgpKSxydW5Pbmx5SWY6KCk9PiEhbi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk/LmhpZ2hsaWdodC5pc0NlbGwoKX0se2tleXM6W1siZW50ZXIiXV0sY2FsbGJhY2s6KCk9PihXZSgp''@;'; put 'put ''LCFhdCgpKSxydW5Pbmx5SWY6KCk9Pntjb25zdCBxdD1uLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtyZXR1cm4hKCFuLmdldFNldHRpbmdzKCkuZW50ZXJCZWdpbnNFZGl0aW5nfHwhcXQ/LmhpZ2hsaWdodC5pc0NlbGwoKXx8bi5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpKX19LHtrZXlzOltb''@;'; put 'put ''ImRlbGV0ZSJdLFsiYmFja3NwYWNlIl1dLGNhbGxiYWNrOigpPT4oV2UoITApLCFhdCgpKSxydW5Pbmx5SWY6KCk9PiEhbi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk/LmhpZ2hsaWdodC5pc0NlbGwoKX1dLEt0KX0oKSl9ZnVuY3Rpb24gYWhlKG4pe3JldHVybiJJTlBVVCI9PT1uLnRhZ05h''@;'; put 'put ''bWUmJiJjaGVja2JveCI9PT1uLmdldEF0dHJpYnV0ZSgidHlwZSIpfWZ1bmN0aW9uIHNoZShuLGUsdCxyLGksbyxhKXtJTy5hcHBseSh0aGlzLFtuLGUsdCxyLGksbyxhXSl9R28uZ2V0U2luZ2xldG9uKCkuYWRkKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiLGZ1bmN0aW9uKG4sZSx0KXtj''@;'; put 'put ''b25zdHtsYWJlbDpyLHR5cGU6aSxyb3c6byxjb2x1bW46YSxwcm9wOmx9PWU7aWYoImNoZWNrYm94IiE9PWl8fCFyKXJldHVybjtjb25zdCB1PXIse3ZhbHVlOmcscHJvcGVydHk6RX09dTtsZXQgTz10O2lmKGcpTz0iZnVuY3Rpb24iPT10eXBlb2YgZz9nKG8sYSxsLHQpOmc7ZWxzZSBpZihF''@;'; put 'put ''KXtjb25zdCBaPXRoaXMuZ2V0RGF0YUF0Um93UHJvcChvLFN0cmluZyhFKSk7Tz1udWxsIT09Wj9aOnR9cmV0dXJuYCR7UGwoTykubGVuZ3RofWB9KSxvaGUuUkVOREVSRVJfVFlQRT0iY2hlY2tib3giLHNoZS5SRU5ERVJFUl9UWVBFPSJoYW5kc29udGFibGUiO2NvbnN0IEhOdD17eWVhcjoi''@;'; put 'put ''bnVtZXJpYyIsbW9udGg6IjItZGlnaXQiLGRheToiMi1kaWdpdCJ9LFlMZT1uZXcgV2Vha1NldDtmdW5jdGlvbiBDWihuLGUpe2NvbnN0e2RhdGVGb3JtYXQ6dCxsb2NhbGU6cixhbGxvd0VtcHR5OmksaW5zdGFuY2U6b309ZTtpZihBbChuKSlyZXR1cm4gaT9uOkRPO2lmKCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgdClyZXR1cm4gbyYmIVlMZS5oYXMobykmJihZTGUuYWRkKG8pLEhhKCJUaGUgZGF0ZUZvcm1hdCBvcHRpb24gYXMgYSBzdHJpbmcgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGFuIEludGwuRGF0ZVRpbWVGb3JtYXRPcHRpb25zIG9iamVjdCBpbnN0ZWFkLiIpKSxuO2NvbnN0IGE9c2Mo''@;'; put 'put ''bik7aWYobnVsbD09PWEpcmV0dXJuIERPO2NvbnN0IGw9Q2EodCk/dDpITnQ7cmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHIsbCkuZm9ybWF0KGEpfWZ1bmN0aW9uIGxoZShuLGUsdCxyLGksbyxhKXtENy5hcHBseSh0aGlzLFtuLGUsdCxyLGksbyxhXSl9bGhlLnZhbHVlRm9ybWF0''@;'; put 'put ''dGVyPUNaLGxoZS5SRU5ERVJFUl9UWVBFPSJkYXRlIjtjb25zdCBjaGU9bGhlO2Z1bmN0aW9uIHVoZShuLGUsdCxyLGksbyxhKXtjaGUuYXBwbHkodGhpcyxbbixlLHQscixpLG8sYV0pfXVoZS52YWx1ZUZvcm1hdHRlcj1DWix1aGUuUkVOREVSRVJfVFlQRT0iaW50bC1kYXRlIjtjb25zdCBa''@;'; put 'put ''TGU9dWhlLGpOdD17aG91cjoibnVtZXJpYyIsbWludXRlOiIyLWRpZ2l0In0sR0xlPW5ldyBXZWFrU2V0O2Z1bmN0aW9uIGRoZShuLGUpe2NvbnN0e3RpbWVGb3JtYXQ6dCxsb2NhbGU6cixhbGxvd0VtcHR5OmksaW5zdGFuY2U6b309ZTtpZihBbChuKSlyZXR1cm4gaT9uOkRPO2NvbnN0IGE9''@;'; put 'put ''emYobik7aWYobnVsbD09PWEpcmV0dXJuIERPOyJzdHJpbmciPT10eXBlb2YgdCYmbyYmIUdMZS5oYXMobykmJihHTGUuYWRkKG8pLEhhKCJUaGUgdGltZUZvcm1hdCBvcHRpb24gYXMgYSBzdHJpbmcgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGFuIEludGwuRGF0ZVRpbWVGb3JtYXRPcHRpb25z''@;'; put 'put ''IG9iamVjdCBpbnN0ZWFkLiIpKTtjb25zdCBsPUNhKHQpP3Q6ak50O3JldHVybiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChyLGwpLmZvcm1hdChhKX1mdW5jdGlvbiBoaGUobixlLHQscixpLG8sYSl7RDcuYXBwbHkodGhpcyxbbixlLHQscixpLG8sYV0pLGUuZGlyPSJsdHIifWhoZS52YWx1''@;'; put 'put ''ZUZvcm1hdHRlcj1kaGUsaGhlLlJFTkRFUkVSX1RZUEU9InRpbWUiO2NvbnN0IGZoZT1oaGU7ZnVuY3Rpb24gJExlKG4sZSx0LHIsaSxvLGEpe2ZoZS5hcHBseSh0aGlzLFtuLGUsdCxyLGksbyxhXSl9JExlLlJFTkRFUkVSX1RZUEU9ImludGwtdGltZSI7Y29uc3QgcUxlPSRMZSx6TnQ9e3Vz''@;'; put 'put ''ZUdyb3VwaW5nOiExLG1heGltdW1GcmFjdGlvbkRpZ2l0czoyMH0sS0xlPW5ldyBNYXAsWExlPW5ldyBXZWFrU2V0O2Z1bmN0aW9uIFFMZShuLGUpe3JldHVybiB3MChuKSYmKG49ZnVuY3Rpb24gV050KG4sZSl7Y29uc3R7bnVtZXJpY0Zvcm1hdDp0LGxvY2FsZTpyfT1lLGk9dD8/ek50LG89''@;'; put 'put ''YCR7cj8/IiJ9OiR7SlNPTi5zdHJpbmdpZnkoaSl9YDtsZXQgYT1LTGUuZ2V0KG8pO3JldHVybiB2b2lkIDA9PT1hJiYoYT1uZXcgSW50bC5OdW1iZXJGb3JtYXQocixpKSxLTGUuc2V0KG8sYSkpLGEuZm9ybWF0KG4pfShuLGUpKSxufWZ1bmN0aW9uIFNaKG4sZSx0LHIsaSxvLGEpe2NvbnN0''@;'; put 'put ''IGw9YS5udW1lcmljRm9ybWF0O2lmKHZvaWQgMCE9PWw/LnBhdHRlcm58fHZvaWQgMCE9PWw/LmN1bHR1cmUpe2NvbnN0IGc9YS5pbnN0YW5jZTtYTGUuaGFzKGcpfHwoWExlLmFkZChnKSxIYSgiVGhlIG51bWVyaWNGb3JtYXQucGF0dGVybiBhbmQgbnVtZXJpY0Zvcm1hdC5jdWx0dXJlIG9w''@;'; put 'put ''dGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQuIFVzZSBJbnRsLk51bWJlckZvcm1hdCBvcHRpb25zIGluc3RlYWQgKG51bWVyaWNGb3JtYXQ6IHsgc3R5bGUsIGN1cnJlbmN5LCAuLi4gfSkuIikpfWlmKHcwKG4uZ2V0RGF0YUF0Q2VsbCh0LHIpKSl7bGV0IGc9W107aWYoQXJyYXkuaXNBcnJheShh''@;'; put 'put ''LmNsYXNzTmFtZSkpZz1hLmNsYXNzTmFtZTtlbHNle2NvbnN0IEU9YS5jbGFzc05hbWU/PyIiO0UubGVuZ3RoJiYoZz1FLnNwbGl0KCIgIikpfWcuaW5kZXhPZigiaHRMZWZ0Iik8MCYmZy5pbmRleE9mKCJodENlbnRlciIpPDAmJmcuaW5kZXhPZigiaHRSaWdodCIpPDAmJmcuaW5kZXhPZigi''@;'; put 'put ''aHRKdXN0aWZ5Iik8MCYmZy5wdXNoKCJodFJpZ2h0IiksZy5pbmRleE9mKCJodE51bWVyaWMiKTwwJiZnLnB1c2goImh0TnVtZXJpYyIpLGEuY2xhc3NOYW1lPWcuam9pbigiICIpLGUuZGlyPSJsdHIifUQ3LmFwcGx5KHRoaXMsW24sZSx0LHIsaSxvLGFdKX1mdW5jdGlvbiBFWihuLGUsdCxy''@;'; put 'put ''LGksbyl7XzcoZSxvKX1mdW5jdGlvbiBwaGUobixlLHQscixpLG8sYSl7RDcuYXBwbHkodGhpcyxbbixlLHQscixpLG8sYV0pfWZ1bmN0aW9uIExPKG4sZSl7Y29uc3Qgcj1vPT57aWYoKG89Pntjb25zdCBhPW87cmV0dXJuIENhKG8pJiZabyhhLmtleSkmJlpvKGEudmFsdWUpfSkobykpe2Nv''@;'; put 'put ''bnN0IGE9bztyZXR1cm4gcihhLmtleSkmJnIoYS52YWx1ZSl9cmV0dXJuIG51bGw9PW99O2xldCBpPW47cihpKSYmKGk9IiIpLCIiIT09aT90aGlzLnN0cmljdCYmdGhpcy5zb3VyY2U/ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuc291cmNlP3RoaXMuc291cmNlKGksSkxlKGksZSkpOkpMZShp''@;'; put 'put ''LGUpKHRoaXMuc291cmNlKTplKCEwKTplKCEhdGhpcy5hbGxvd0VtcHR5KX1mdW5jdGlvbiBKTGUobixlKXtjb25zdCB0PW47cmV0dXJuIGZ1bmN0aW9uKHIpe2xldCBpPSExO2ZvcihsZXQgbz0wLGE9ci5sZW5ndGg7bzxhO28rKylpZihnNyh0LHJbb10pKXtpPSEwO2JyZWFrfWUoaSl9fWZ1''@;'; put 'put ''bmN0aW9uIGdoZShuLGUpe3JldHVybiEhKGUuYWxsb3dFbXB0eSYmQWwobil8fCJzdHJpbmciPT10eXBlb2YgbiYmbi5zdGFydHNXaXRoKCI9IikpfHx4TyhuKX1mdW5jdGlvbiBNWihuLGUpe3RoaXMuYWxsb3dFbXB0eSYmQWwobik/ZSghMCk6ZSh4TyhuKSl9ZnVuY3Rpb24gbWhlKG4sZSl7''@;'; put 'put ''TE8uYXBwbHkodGhpcyxbbixlXSl9ZnVuY3Rpb24gVFoobixlKXtNWi5jYWxsKHRoaXMsbixlKX1mdW5jdGlvbiB2aGUobixlKXtyZXR1cm4hIShlLmFsbG93RW1wdHkmJkFsKG4pfHwic3RyaW5nIj09dHlwZW9mIG4mJm4uc3RhcnRzV2l0aCgiPSIpKXx8bVoobil9ZnVuY3Rpb24geFoobixl''@;'; put 'put ''KXt0aGlzLmFsbG93RW1wdHkmJkFsKG4pP2UoITApOmUobVoobikpfWZ1bmN0aW9uIEFaKG4sZSl7eFouY2FsbCh0aGlzLG4sZSl9ZnVuY3Rpb24gX2hlKG4sZSl7bGV0IHQ9bjtudWxsPT10JiYodD0iIiksdGhpcy5hbGxvd0VtcHR5JiYiIj09PXQ/ZSghMCk6KHRoaXMuYWxsb3dFbXB0eXx8''@;'; put 'put ''IiIhPT10KSYmQXJyYXkuaXNBcnJheSh0KT8wIT09dC5sZW5ndGgmJnRoaXMuc291cmNlPyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnNvdXJjZT90aGlzLnNvdXJjZSh0LGVPZSh0LGUpKTplT2UodCxlKSh0aGlzLnNvdXJjZSk6ZSghMCk6ZSghMSl9ZnVuY3Rpb24gZU9lKG4sZSl7Y29uc3Qg''@;'; put 'put ''dD1uO3JldHVybiBmdW5jdGlvbihyKXtsZXQgaT0hMDtmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTtvKyspe2xldCBsPSExO2ZvcihsZXQgdT0wLGc9ci5sZW5ndGg7dTxnO3UrKyl7aWYoYjAodFtvXSkmJiFiMChyW3VdKXx8IWIwKHRbb10pJiZiMChyW3VdKSl7bD0hMTticmVha30oYjAo''@;'; put 'put ''dFtvXSkmJmIwKHJbdV0pJiZnNyh0W29dLHJbdV0pfHwic3RyaW5nIj09dHlwZW9mIHRbb10mJiJzdHJpbmciPT10eXBlb2Ygclt1XSYmdFtvXT09PXJbdV0pJiYobD0hMCl9aWYoIWwpe2k9ITE7YnJlYWt9fWUoaSl9fWZ1bmN0aW9uIHloZShuLGUpe2xldCB0PW47bnVsbD09dCYmKHQ9IiIp''@;'; put 'put ''LGUoISghdGhpcy5hbGxvd0VtcHR5fHwiIiE9PXQpfHwiIiE9PXQmJncwKG4pKX1mdW5jdGlvbiB0T2Uobil7Y29uc3QgZT1uO3JldHVybiBDYShuKSYmdm9pZCAwIT09ZS52YWx1ZT9lLnZhbHVlOm59ZnVuY3Rpb24gbk9lKG4sZSx0KXtyZXR1cm4gYjAodGhpcy5nZXRTb3VyY2VEYXRhQXRD''@;'; put 'put ''ZWxsKHRoaXMudG9QaHlzaWNhbFJvdyhlKSx0aGlzLnRvUGh5c2ljYWxDb2x1bW4odCkpKT9iMChuKT9uOntrZXk6bix2YWx1ZTpufTpufVNaLnZhbHVlRm9ybWF0dGVyPVFMZSxTWi5SRU5ERVJFUl9UWVBFPSJudW1lcmljIixFWi52YWx1ZUZvcm1hdHRlcj1mdW5jdGlvbiBHTnQobixlKXtj''@;'; put 'put ''b25zdCB0PWUuaGFzaExlbmd0aHx8UGwobikubGVuZ3RoLHI9U3RyaW5nKGUuaGFzaFN5bWJvbD8/IioiKTtsZXQgaT0iIjtmb3IobGV0IG89MDtvPHQ7bysrKWkrPXI7cmV0dXJuIGl9LEVaLlJFTkRFUkVSX1RZUEU9InBhc3N3b3JkIixwaGUuUkVOREVSRVJfVFlQRT0ic2VsZWN0IixMTy5W''@;'; put 'put ''QUxJREFUT1JfVFlQRT0iYXV0b2NvbXBsZXRlIixnaGUucm93SW5kZXBlbmRlbnQ9ITAsTVouVkFMSURBVE9SX1RZUEU9ImRhdGUiLG1oZS5WQUxJREFUT1JfVFlQRT0iZHJvcGRvd24iLFRaLlZBTElEQVRPUl9UWVBFPSJpbnRsLWRhdGUiLHZoZS5yb3dJbmRlcGVuZGVudD0hMCx4Wi5WQUxJ''@;'; put 'put ''REFUT1JfVFlQRT0idGltZSIsQVouVkFMSURBVE9SX1RZUEU9ImludGwtdGltZSIsX2hlLlZBTElEQVRPUl9UWVBFPSJtdWx0aXNlbGVjdCIseWhlLlZBTElEQVRPUl9UWVBFPSJudW1lcmljIjtjb25zdCBjRnQ9e0NFTExfVFlQRToiYXV0b2NvbXBsZXRlIixlZGl0b3I6SGRlLHJlbmRlcmVy''@;'; put 'put ''OklPLHZhbGlkYXRvcjpMTyx2YWx1ZUdldHRlcjp0T2UsdmFsdWVTZXR0ZXI6bk9lLHBhcnNlUGFzdGVkVmFsdWU6ITB9LGRGdD17Q0VMTF9UWVBFOiJjaGVja2JveCIsZWRpdG9yOnFEZSxyZW5kZXJlcjpvaGUsdmFsdWVTZXR0ZXI6ZnVuY3Rpb24gdUZ0KG4sZSx0KXtjb25zdHtjaGVja2Vk''@;'; put 'put ''VGVtcGxhdGU6cix1bmNoZWNrZWRUZW1wbGF0ZTppfT10aGlzLmdldENlbGxNZXRhKGUsdCksbz1QbChuKSxhPW89PT1QbChyKSxsPW89PT1QbChpKTtyZXR1cm4gYXx8bD9hP3I6aTpufX0saEZ0PXtDRUxMX1RZUEU6ImRhdGUiLGVkaXRvcjp6ZGUscmVuZGVyZXI6Y2hlLHZhbGlkYXRvcjpN''@;'; put 'put ''Wixzb3VyY2VEYXRhVmFsaWRhdG9yOmdoZSxzb3VyY2VEYXRhV2FybmluZ01lc3NhZ2U6J1NvdXJjZSBkYXRhIHdhcm5pbmcgKFtpdGVtc0NvdW50XSkuIEludmFsaWQgdmFsdWUgZm9yICJkYXRlIiBjZWxsIHR5cGUuXG5cblthZmZlY3RlZENlbGxzXVxuXG5FeHBlY3RlZCBhIHZhbHVlIGNv''@;'; put 'put ''bXBhdGlibGUgd2l0aCB0aGUgSVNPIDg2MDEgZGF0ZSBmb3JtYXQgKCJZWVlZLU1NLUREIikuJyx2YWx1ZUZvcm1hdHRlcjpDWn0sZ0Z0PXtDRUxMX1RZUEU6ImRyb3Bkb3duIixlZGl0b3I6S0RlLHJlbmRlcmVyOmloZSx2YWxpZGF0b3I6bWhlLGZpbHRlcjohMSxzdHJpY3Q6ITAsdmFsdWVH''@;'; put 'put ''ZXR0ZXI6ZnVuY3Rpb24gZkZ0KG4pe3JldHVybiB0T2UuY2FsbCh0aGlzLG4pfSx2YWx1ZVNldHRlcjpmdW5jdGlvbiBwRnQobixlLHQscil7cmV0dXJuIG5PZS5jYWxsKHRoaXMsbixlLHQpfSxwYXJzZVBhc3RlZFZhbHVlOiEwfSxtRnQ9e0NFTExfVFlQRToiaGFuZHNvbnRhYmxlIixlZGl0''@;'; put 'put ''b3I6T2RlLHJlbmRlcmVyOnNoZX0sdkZ0PXtDRUxMX1RZUEU6ImludGwtZGF0ZSIsZWRpdG9yOlhEZSxyZW5kZXJlcjpaTGUsdmFsaWRhdG9yOlRaLHNvdXJjZURhdGFWYWxpZGF0b3I6Z2hlLHNvdXJjZURhdGFXYXJuaW5nTWVzc2FnZTonU291cmNlIGRhdGEgd2FybmluZyAoW2l0ZW1zQ291''@;'; put 'put ''bnRdKS4gSW52YWxpZCB2YWx1ZSBmb3IgImludGwtZGF0ZSIgY2VsbCB0eXBlLlxuXG5bYWZmZWN0ZWRDZWxsc11cblxuRXhwZWN0ZWQgYSB2YWx1ZSBjb21wYXRpYmxlIHdpdGggdGhlIElTTyA4NjAxIGRhdGUgZm9ybWF0ICgiWVlZWS1NTS1ERCIpLicsdmFsdWVGb3JtYXR0ZXI6Q1p9LF9G''@;'; put 'put ''dD17Q0VMTF9UWVBFOiJpbnRsLXRpbWUiLGVkaXRvcjpRRGUscmVuZGVyZXI6cUxlLHZhbGlkYXRvcjpBWixzb3VyY2VEYXRhVmFsaWRhdG9yOnZoZSxzb3VyY2VEYXRhV2FybmluZ01lc3NhZ2U6J1NvdXJjZSBkYXRhIHdhcm5pbmcgKFtpdGVtc0NvdW50XSkuIEludmFsaWQgdmFsdWUgZm9y''@;'; put 'put ''ICJpbnRsLXRpbWUiIGNlbGwgdHlwZS5cblxuW2FmZmVjdGVkQ2VsbHNdXG5cbkV4cGVjdGVkIGEgdmFsdWUgY29tcGF0aWJsZSB3aXRoIHRoZSAyNC1ob3VyIHRpbWUgZm9ybWF0ICgiSEg6bW0iLCAiSEg6bW06c3MiIG9yICJISDptbTpzcy5TU1MiKS4nLHZhbHVlRm9ybWF0dGVyOmRoZX0s''@;'; put 'put ''a1o9Imh0LW11bHRpLXNlbGVjdCIsYmhlPWAke2tafS1jaGlwYCx3aGU9YCR7a1p9LWNoaXAtcmVtb3ZlYCx5RnQ9YCR7a1p9LWNoaXAtbGFiZWxgLHJPZT1gJHtrWn0tb3ZlcmZsb3dgLGlPZT1uZXcgV2Vha1NldCxQdz1uZXcgV2Vha01hcCxDaGU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gU2hl''@;'; put 'put ''KG4sZSl7cmV0dXJuIGIwKG4pP25bZV06bn1mdW5jdGlvbiBvT2Uobil7aWYobnVsbD09bnx8IiI9PT1uKXJldHVybltdO2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIG47aWYoInN0cmluZyI9PXR5cGVvZiBuKXRyeXtjb25zdCBlPUpTT04ucGFyc2UobiksdD1lO3JldHVybiBBcnJheS5p''@;'; put 'put ''c0FycmF5KGUpP3Q6W2VdfWNhdGNoe3JldHVybiBuLnRyaW0oKT9bbl06W119cmV0dXJuW25dfWZ1bmN0aW9uIGFPZShuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9NeGUobi5tYXAoZT0+YjAoZSk/ZS52YWx1ZTplKSwiLCAiKTpufWNvbnN0IERGdD17Q0VMTF9UWVBFOiJtdWx0aXNlbGVj''@;'; put 'put ''dCIsX2NvbXBsZXhEYXRhRm9ybWF0OiEwLGVkaXRvcjpGTGUscmVuZGVyZXI6ZnVuY3Rpb24gUkZ0KG4sZSx0LHIsaSxvLGEpe01UKDAsZSwwLDAsMCxvLGEpO2xldCBsPW87aWYoQWwobCkmJmEucGxhY2Vob2xkZXIpcmV0dXJuIGw9YS5wbGFjZWhvbGRlcixsPVBsKGwpLHZvaWQgeTcoZSxs''@;'; put 'put ''KTtjb25zdHtyb290RG9jdW1lbnQ6dX09bixnPW4uZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyxFPW4udG9QaHlzaWNhbFJvdyh0KSxPPSJzdHJpbmciPT10eXBlb2Ygcj9yOm4udG9QaHlzaWNhbENvbHVtbihyKSxlZT1vT2Uobi5nZXRTb3VyY2VEYXRhQXRDZWxsKEUsTykpO2lmKEM0KGUpLFly''@;'; put 'put ''KGUsImh0LW11bHRpLXNlbGVjdC1yZW5kZXJlciIpLDA9PT1lZS5sZW5ndGgpcmV0dXJuIHZvaWQgZS5hcHBlbmRDaGlsZCh1LmNyZWF0ZVRleHROb2RlKCIiKSk7Y29uc3QgdmU9dS5jcmVhdGVFbGVtZW50KCJkaXYiKTt2ZS5jbGFzc05hbWU9Imh0LW11bHRpLXNlbGVjdC1jaGlwcy1jb250''@;'; put 'put ''YWluZXIiLGVlLmZvckVhY2goSGU9Pntjb25zdCBXZT1mdW5jdGlvbiBiRnQobixlLHQscixpKXtjb25zdCBvPW4uY3JlYXRlRWxlbWVudCgic3BhbiIpLGE9U2hlKGUsInZhbHVlIik7WXIobyxiaGUpLG8uZGF0YXNldC5yb3c9U3RyaW5nKHIpLG8uZGF0YXNldC5wcm9wPVN0cmluZyhpKSxv''@;'; put 'put ''LnRpdGxlPWE7Y29uc3QgbD1uLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtZcihsLHlGdCksbC50ZXh0Q29udGVudD1hLG8uYXBwZW5kQ2hpbGQobCk7Y29uc3QgdT1uLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtyZXR1cm4gWXIodSx3aGUpLHQmJnUuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIs''@;'; put 'put ''InRydWUiKSxvLmRhdGFzZXQua2V5PVNoZShlLCJrZXkiKSxvLmFwcGVuZENoaWxkKHUpLG99KHUsSGUsZz8/ITEsdCxpKTt2ZS5hcHBlbmRDaGlsZChXZSl9KSxlLmFwcGVuZENoaWxkKHZlKSxmdW5jdGlvbiBDRnQobixlKXtDaGUuaGFzKG4pfHwoQ2hlLnNldChuLG5ldyBXMihuKSksQ2hl''@;'; put 'put ''LmdldChuKS5hZGRFdmVudExpc3RlbmVyKG4ucm9vdEVsZW1lbnQsImNsaWNrIixyPT57aWYoIUxhKEFhKHIpLHdoZSkpcmV0dXJuO3IucHJldmVudERlZmF1bHQoKSxyLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IGk9QWEocikuY2xvc2VzdChgLiR7YmhlfWApO2lmKCFpKXJldHVybjtjb25z''@;'; put 'put ''dCBhPWkuZGF0YXNldC5wcm9wLGw9bi50b1BoeXNpY2FsUm93KE51bWJlcihpLmRhdGFzZXQucm93Pz8wKSksdT0ic3RyaW5nIj09dHlwZW9mIGE/YTpuLnRvUGh5c2ljYWxDb2x1bW4oTnVtYmVyKGEpKSxnPW4ucHJvcFRvQ29sKGE/PyIiKSxFPW4uZ2V0U291cmNlRGF0YUF0Q2VsbChsLGcp''@;'; put 'put ''LE89aS5kYXRhc2V0LmtleSxaPWZ1bmN0aW9uIFRGdChuLGUpe3JldHVybiBuLmZpbHRlcih0PT5TaGUodCwia2V5IikhPT1lKX0ob09lKEUpLE8pO24uc2V0U291cmNlRGF0YUF0Q2VsbChsLHUsWixgJHtlfS1yZW5kZXJlcmApLG4ucmVuZGVyKCl9KSxuLmFkZEhvb2soImJlZm9yZU9uQ2Vs''@;'; put 'put ''bE1vdXNlRG93biIsKC4uLnIpPT57Y29uc3QgaT1yWzBdO0xhKEFhKGkpLHdoZSkmJkYzKGkpfSkpfShuLCJtdWx0aXNlbGVjdCIpO2NvbnN0IE1lPWZ1bmN0aW9uIFNGdChuLGUpe2NvbnN0IHQ9bi5nZXRDb2xXaWR0aChlKTtpZihQdy5oYXMobikpe2NvbnN0IHI9UHcuZ2V0KG4pO3JbZV0/''@;'; put 'put ''LndpZHRoIT09dCYmUHcuc2V0KG4sey4uLnIsW2VdOnt3aWR0aDp0fX0pfWVsc2UgUHcuc2V0KG4se1tlXTp7d2lkdGg6dH19KTtyZXR1cm4gaU9lLmhhcyhuKXx8KG4uYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwoLi4ucik9Pntjb25zdCBpPXJbMF0sbz1yWzFdLGE9UHcuZ2V0KG4p''@;'; put 'put ''O2E/LltvXT8ud2lkdGghPT1pJiZQdy5zZXQobix7Li4uYSxbb106e3dpZHRoOml9fSl9KSxpT2UuYWRkKG4pKSxQdy5nZXQobik/LltlXT8ud2lkdGg/P3R9KG4scik7IWZ1bmN0aW9uIE1GdChuLGUsdCl7IWZ1bmN0aW9uIEVGdChuLGUsdCl7Y29uc3Qgcj1uLGk9ZS5xdWVyeVNlbGVjdG9y''@;'; put 'put ''QWxsKGAuJHtiaGV9YCk7Zm9yKGxldCBaPTA7WjxpLmxlbmd0aDtaKyspaVtaXS5zdHlsZS5kaXNwbGF5PSIiO2lmKG51bGw9PT1yfHwwPT09aS5sZW5ndGgpcmV0dXJuO2xldCBvPWUucXVlcnlTZWxlY3RvcihgLiR7ck9lfWApO28/KG8uc3R5bGUuZGlzcGxheT0iIixvLnN0eWxlLnZpc2li''@;'; put 'put ''aWxpdHk9ImhpZGRlbiIpOihvPWZ1bmN0aW9uIHdGdChuLGUpe2NvbnN0IHQ9bi5jcmVhdGVFbGVtZW50KCJzcGFuIik7cmV0dXJuIFlyKHQsck9lKSx0LnRleHRDb250ZW50PWArJHtlfWAsdH0odCxpLmxlbmd0aCksby5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGUuYXBwZW5kQ2hpbGQo''@;'; put 'put ''bykpO2NvbnN0IGE9dC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGUpLGw9cGFyc2VGbG9hdChhLmdhcCl8fDAsdT1vLm9mZnNldFdpZHRoO2xldCBnPTAsRT0wO2ZvcihsZXQgWj0wO1o8aS5sZW5ndGg7WisrKXtjb25zdCBNZT1nK2lbWl0ub2Zmc2V0V2lkdGgrKFo8aS5sZW5ndGgt''@;'; put 'put ''MT9sOjApO2lmKCEoTWU8PXItKFo8aS5sZW5ndGgtMT91K2w6MCkpKWJyZWFrO2c9TWUsRSs9MX1jb25zdCBPPWkubGVuZ3RoLUU7aWYoTz4wKXtmb3IobGV0IFo9RTtaPGkubGVuZ3RoO1orKylpW1pdLnN0eWxlLmRpc3BsYXk9Im5vbmUiO28udGV4dENvbnRlbnQ9YCske099YCxvLnN0eWxl''@;'; put 'put ''LnZpc2liaWxpdHk9InZpc2libGUifWVsc2Ugby5zdHlsZS5kaXNwbGF5PSJub25lIn0obixlLHQpfShNZSx2ZSx1KX0sdmFsaWRhdG9yOl9oZSx2YWx1ZUdldHRlcjphT2UsdmFsdWVTZXR0ZXI6ZnVuY3Rpb24gSUZ0KG4sZSx0KXtpZihBcnJheS5pc0FycmF5KG4pKXtjb25zdCByPXRoaXMu''@;'; put 'put ''Z2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLnRvUGh5c2ljYWxSb3coZSksdCk7aWYoQXJyYXkuaXNBcnJheShyKSYmci5sZW5ndGg+MCYmYjAoclswXSkpcmV0dXJuIG4ubWFwKGk9PmIwKGkpP2k6e2tleTppLHZhbHVlOml9KX1yZXR1cm4gbn0scGFyc2VQYXN0ZWRWYWx1ZTohMH0sTkZ0PXtD''@;'; put 'put ''RUxMX1RZUEU6Im51bWVyaWMiLGVkaXRvcjpKRGUscmVuZGVyZXI6U1osdmFsaWRhdG9yOnloZSxkYXRhVHlwZToibnVtYmVyIix2YWx1ZVNldHRlcjpmdW5jdGlvbiBPRnQobixlLHQscil7aWYoInN0cmluZyIhPXR5cGVvZiBuKXJldHVybiBuO2NvbnN0IGk9ZnVuY3Rpb24gTEZ0KG4pe2Nv''@;'; put 'put ''bnN0IGU9bj8ubnVtZXJpY0Zvcm1hdCx0PWU/LmN1bHR1cmU/P24/LmxvY2FsZTtpZigic3RyaW5nIj09dHlwZW9mIHQmJnQubGVuZ3RoPjApdHJ5e2NvbnN0IGk9bmV3IEludGwuTnVtYmVyRm9ybWF0KHQpLmZvcm1hdFRvUGFydHMoMS4xKS5maW5kKCh7dHlwZTpvfSk9PiJkZWNpbWFsIj09''@;'; put 'put ''PW8pO2lmKCIuIj09PWk/LnZhbHVlfHwiLCI9PT1pPy52YWx1ZSlyZXR1cm4gaS52YWx1ZX1jYXRjaHt9Y29uc3Qgcj1lPy5wYXR0ZXJuO2lmKCJzdHJpbmciPT10eXBlb2Ygcil7Y29uc3QgaT1yLmxhc3RJbmRleE9mKCIuIiksbz1yLmxhc3RJbmRleE9mKCIsIik7aWYoaT4tMSYmbz4tMSly''@;'; put 'put ''ZXR1cm4gaT5vPyIuIjoiLCI7aWYobz4tMSYmLTE9PT1pfHxpPi0xJiYtMT09PW8pcmV0dXJuIi4ifX0ocik7aWYoT0FlKG4pfHxRc2UobixpKXx8SnNlKG4saSl8fGVsZShuLGkpKXtjb25zdCBvPU5BZShuLHtkZWNpbWFsU2VwYXJhdG9yOml9KTtyZXR1cm4gck8obyk/bjpvfXJldHVybiBu''@;'; put 'put ''fSx2YWx1ZUZvcm1hdHRlcjpRTGV9LEZGdD17Q0VMTF9UWVBFOiJwYXNzd29yZCIsZWRpdG9yOnJMZSxyZW5kZXJlcjpFWixjb3B5YWJsZTohMX0sUEZ0PXtDRUxMX1RZUEU6InNlbGVjdCIsZWRpdG9yOm9MZSxyZW5kZXJlcjpwaGV9LEhGdD17Q0VMTF9UWVBFOiJ0aW1lIixlZGl0b3I6V2Rl''@;'; put 'put ''LHJlbmRlcmVyOmZoZSx2YWxpZGF0b3I6eFosc291cmNlRGF0YVZhbGlkYXRvcjp2aGUsc291cmNlRGF0YVdhcm5pbmdNZXNzYWdlOidTb3VyY2UgZGF0YSB3YXJuaW5nIChbaXRlbXNDb3VudF0pLiBJbnZhbGlkIHZhbHVlIGZvciAidGltZSIgY2VsbCB0eXBlLlxuXG5bYWZmZWN0ZWRDZWxs''@;'; put 'put ''c11cblxuRXhwZWN0ZWQgYSB2YWx1ZSBjb21wYXRpYmxlIHdpdGggdGhlIDI0LWhvdXIgdGltZSBmb3JtYXQgKCJISDptbSIsICJISDptbTpzcyIgb3IgIkhIOm1tOnNzLlNTUyIpLicsdmFsdWVGb3JtYXR0ZXI6ZGhlfSxPTz1bXTtmdW5jdGlvbiBCRnQobixlKXtyZXR1cm4hIW5bZV19ZnVu''@;'; put 'put ''Y3Rpb24gc09lKG4sZSl7aWYoQXJyYXkuaXNBcnJheShuKSl7InN0cmluZyIhPXR5cGVvZiBlJiZKcigicmVnaXN0ZXJDb25mbGljdChibG9ja2VkVGFyZ2V0S2V5c1tdLCBpbmNvbXBhdGlibGVTZXR0aW5nS2V5cykgZXhwZWN0cyBpbmNvbXBhdGlibGVTZXR0aW5nS2V5cyB0byBiZSBhIHN0''@;'; put 'put ''cmluZy4iKTtmb3IobGV0IHI9MDtyPG4ubGVuZ3RoO3IrPTEpT08ucHVzaCh7YmxvY2tlZEtleTpuW3JdLGluY29tcGF0aWJsZVNldHRpbmdLZXk6ZX0pO3JldHVybn0ic3RyaW5nIiE9dHlwZW9mIG4mJkpyKCJyZWdpc3RlckNvbmZsaWN0IGV4cGVjdHMgYSBzdHJpbmcgYmxvY2tlZCB0YXJn''@;'; put 'put ''ZXQga2V5IHdoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IGlzIG5vdCBhbiBhcnJheS4iKTtjb25zdCB0PW47aWYoQXJyYXkuaXNBcnJheShlKSlmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrPTEpe2NvbnN0IGk9ZVtyXTsic3RyaW5nIiE9dHlwZW9mIGkmJkpyKCJyZWdpc3RlckNvbmZsaWN0KGJs''@;'; put 'put ''b2NrZWRUYXJnZXRLZXksIGluY29tcGF0aWJsZVNldHRpbmdLZXlzKSBleHBlY3RzIGluY29tcGF0aWJsZVNldHRpbmdLZXlzIHRvIGJlIGEgc3RyaW5nIGFycmF5LiIpLE9PLnB1c2goe2Jsb2NrZWRLZXk6dCxpbmNvbXBhdGlibGVTZXR0aW5nS2V5Oml9KX1lbHNlInN0cmluZyIhPXR5cGVv''@;'; put 'put ''ZiBlP0pyKCJJbnZhbGlkIHJlZ2lzdGVyQ29uZmxpY3QgYXJndW1lbnRzLiIpOk9PLnB1c2goe2Jsb2NrZWRLZXk6dCxpbmNvbXBhdGlibGVTZXR0aW5nS2V5OmV9KX1mdW5jdGlvbiBsT2UobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0''@;'; put 'put ''aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGNPZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChu''@;'; put 'put ''KX1mdW5jdGlvbiBYZChuLGUpe3JldHVybiBmdW5jdGlvbiBVRnQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLGNPZShuLGUsImdldCIpKX1mdW5jdGlvbiB1T2UobixlLHQpe2xPZShuLGUpLGUuc2V0KG4sdCl9ZnVuY3Rpb24gTlQobixlLHQpe3JldHVybiBm''@;'; put 'put ''dW5jdGlvbiB6RnQobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLGNPZShuLGUsInNldCIpLHQpLHR9ZnVu''@;'; put 'put ''Y3Rpb24gZE9lKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiB0fWZ1bmN0aW9uIGhPZShuLGUpe2xPZShuLGUpLGUuYWRkKG4pfWNvbnN0IGZPZT1uZXcgTWFwKFtb''@;'; put 'put ''InBsdWdpbiIsZnVuY3Rpb24gdHh0KG4pe3JldHVybiEhU0wobil9XSxbImNlbGwtdHlwZSIsR1JlXSxbImVkaXRvciIsTUFlXSxbInJlbmRlcmVyIixWQWVdLFsidmFsaWRhdG9yIixCQWVdXSkscE9lPVN5bWJvbCgibWFpblNldHRpbmciKSxSWj1bXTtsZXQgSHc9bnVsbDt2YXIgUWQ9bmV3''@;'; put 'put ''IFdlYWtNYXAsZl89bmV3IFdlYWtNYXAsZ09lPW5ldyBXZWFrU2V0LG1PZT1uZXcgV2Vha1NldDtjbGFzcyBhbHtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4iYmFzZSJ9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bdGhpcy5QTFVHSU5fS0VZXX1zdGF0aWMgZ2V0IERF''@;'; put 'put ''RkFVTFRfU0VUVElOR1MoKXtyZXR1cm57fX1zdGF0aWMgZ2V0IFNFVFRJTkdTX1ZBTElEQVRPUlMoKXtyZXR1cm4gbnVsbH1pbml0KCl7dGhpcy5wbHVnaW5OYW1lPXRoaXMuaG90LmdldFBsdWdpbk5hbWUodGhpcyksdGhpcy51cGRhdGVQbHVnaW5TZXR0aW5ncyh0aGlzLmhvdC5nZXRTZXR0''@;'; put 'put ''aW5ncygpW3RoaXMuY29uc3RydWN0b3IuUExVR0lOX0tFWV0pO2NvbnN0IGU9dGhpcy5jb25zdHJ1Y3Rvci5QTFVHSU5fREVQUyx0PUFycmF5LmlzQXJyYXkoZSk/ZTpbXTtpZih0Lmxlbmd0aD4wKXtjb25zdCBpPVtdO2lmKHQuZm9yRWFjaChvPT57Y29uc3RbYSxsXT1vLnNwbGl0KCI6Iik7''@;'; put 'put ''Zk9lLmhhcyhhKXx8SnIoYFVua25vd24gcGx1Z2luIGRlcGVuZGVuY3kgdHlwZSAiJHthfSIgd2FzIGZvdW5kLmApLGZPZS5nZXQoYSkobCl8fGkucHVzaChgIC0gJHtsfSAoJHthfSlgKX0pLGkubGVuZ3RoPjApe2NvbnN0IG89W2BUaGUgJHt0aGlzLnBsdWdpbk5hbWV9IHBsdWdpbiByZXF1''@;'; put 'put ''aXJlcyB0aGUgZm9sbG93aW5nIG1vZHVsZXM6XG5gLGAke2kuam9pbigiXG4iKX1cbmBdLmpvaW4oIiIpO1JaLnB1c2gobyl9fWlmKEh3fHwoSHc9YWxlKCkpLEh3LmluZGV4T2YodGhpcy5wbHVnaW5OYW1lKT49MCYmSHcuc3BsaWNlKEh3LmluZGV4T2YodGhpcy5wbHVnaW5OYW1lKSwxKSx0''@;'; put 'put ''aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLCgpPT57aWYodGhpcy5pc0VuYWJsZWQmJnRoaXMuaXNFbmFibGVkKCkpe2lmKHRoaXMuaXNIYXJkQ29uZmxpY3RCbG9ja2VkKCkpcmV0dXJuIHZvaWQodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLmNvbnN0''@;'; put 'put ''cnVjdG9yLlBMVUdJTl9LRVldPSExKTt0aGlzLmVuYWJsZVBsdWdpbigpfX0pLDA9PT1Idy5sZW5ndGgpe2lmKFJaLmxlbmd0aD4wKXtjb25zdCBpPVtgJHtSWi5qb2luKCJcbiIpfVxuYCwiWW91IGhhdmUgdG8gaW1wb3J0IGFuZCByZWdpc3RlciB0aGVtIG1hbnVhbGx5LiJdLmpvaW4oIiIp''@;'; put 'put ''O1JaLmxlbmd0aD0wLEpyKGkpfXRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIpfXRoaXMuaW5pdGlhbGl6ZWQ9ITB9aXNIYXJkQ29uZmxpY3RCbG9ja2VkKCl7Y29uc3QgZT10aGlzLmNvbnN0cnVjdG9yLlBMVUdJTl9LRVksdD1mdW5jdGlvbiBqRnQobixlKXtm''@;'; put 'put ''b3IobGV0IHQ9MDt0PE9PLmxlbmd0aDt0Kz0xKXtjb25zdCByPU9PW3RdO2lmKHIuYmxvY2tlZEtleT09PWUmJkJGdChuLHIuaW5jb21wYXRpYmxlU2V0dGluZ0tleSkpcmV0dXJuIHJ9cmV0dXJuIG51bGx9KHRoaXMuaG90LmdldFNldHRpbmdzKCksZSk7aWYodCl7Y29uc3R7aW5jb21wYXRp''@;'; put 'put ''YmxlU2V0dGluZ0tleTpyfT10O3JldHVybiBIYSh5Y2BUaGUgXGAke2V9XGAgcGx1Z2luIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIFxgJHtyfVxgIG9wdGlvbi5ceDIwCiAgICAgICAgVGhpcyBjb21iaW5hdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiBUaGUgcGx1Z2luIHdpbGwgcmVtYWluIGRp''@;'; put 'put ''c2FibGVkLmApLCEwfXJldHVybiExfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZD0hMH1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ldmVudE1hbmFnZXI/LmNsZWFyKCksdGhpcy5jbGVhckhvb2tzKCksdGhpcy5lbmFibGVkPSExfWdldFNldHRpbmcoZSl7Y29uc3QgdD10aGlzLmNvbnN0cnVj''@;'; put 'put ''dG9yLkRFRkFVTFRfU0VUVElOR1Mscj10aGlzLmNvbnN0cnVjdG9yLlNFVFRJTkdTX1ZBTElEQVRPUlM7aWYodm9pZCAwPT09ZSlyZXR1cm4ga2QoWGQodGhpcyxRZCkpP2NMKFhkKHRoaXMsUWQpLHQpOlhkKHRoaXMsUWQpO2xldCBpO2lmKChBcnJheS5pc0FycmF5KFhkKHRoaXMsUWQpKXx8''@;'; put 'put ''a2QoWGQodGhpcyxRZCkpKSYmdFtwT2VdPT09ZSlpPUFycmF5LmlzQXJyYXkoWGQodGhpcyxRZCkpP1hkKHRoaXMsUWQpOlhkKHRoaXMsUWQpW2VdPz90W2VdO2Vsc2UgaWYoZS5pbmNsdWRlcygiLiIpKXtjb25zdCBvPWtkKFhkKHRoaXMsUWQpKT9zTChYZCh0aGlzLFFkKSxlKTp2b2lkIDAs''@;'; put 'put ''YT1zTCh0LGUpO2k9a2Qobyk/Y0wobyxrZChhKT9hOnt9KTp2b2lkIDAhPT1vP286YX1lbHNlIGk9a2QoWGQodGhpcyxRZCkpP2NMKFhkKHRoaXMsUWQpLHQpW2VdOnRbZV07aWYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJnImJiJvYmplY3QiPT10eXBlb2Ygcil7Y29uc3Qgbz1yW2VdO2lmKG8m''@;'; put 'put ''JiJmdW5jdGlvbiI9PXR5cGVvZiBvKXtjb25zdCBhPWk7cmV0dXJuIGRPZSh0aGlzLGdPZSxZRnQpLmNhbGwodGhpcyxhLG8sZSl9fXJldHVybiBpfXVwZGF0ZVBsdWdpblNldHRpbmdzKGUpe2NvbnN0IHQ9dGhpcy5jb25zdHJ1Y3Rvci5TRVRUSU5HU19WQUxJREFUT1JTO2lmKHQmJiJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiB0JiYib2JqZWN0IiE9dHlwZW9mIGUpcmV0dXJuITE9PT10KGUpP3ZvaWQgSGEoYCR7dGhpcy5wbHVnaW5OYW1lfSBQbHVnaW46IG9wdGlvbiBpcyBub3QgdmFsaWQgYW5kIGl0IHdpbGwgYmUgaWdub3JlZC5gKTooTlQodGhpcyxRZCxlKSxYZCh0aGlzLFFkKSk7aWYo''@;'; put 'put ''dCYmIm9iamVjdCI9PXR5cGVvZiB0JiZrZChlKSl7a2QoWGQodGhpcyxRZCkpfHxOVCh0aGlzLFFkLHsuLi50aGlzLmNvbnN0cnVjdG9yLkRFRkFVTFRfU0VUVElOR1N9KTtjb25zdCByPWtkKFhkKHRoaXMsUWQpKT9YZCh0aGlzLFFkKTp7fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFj''@;'; put 'put ''aChpPT57aWYoIShpIGluIGUpKXJldHVybjtjb25zdCBvPXRbaV07ITEhPT0oIW98fG8oZVtpXSkpP3JbaV09ZVtpXTpIYShgJHt0aGlzLnBsdWdpbk5hbWV9IFBsdWdpbjogIiR7aX0iIG9wdGlvbiBpcyBub3QgdmFsaWQgYW5kIGl0IHdpbGwgYmUgaWdub3JlZC5gKX0pLFhkKHRoaXMsUWQp''@;'; put 'put ''fXJldHVybiBOVCh0aGlzLFFkLGUpLGV9YWRkSG9vayhlLHQscil7WGQodGhpcyxmXylbZV09WGQodGhpcyxmXylbZV18fFtdO2NvbnN0IGk9WGQodGhpcyxmXylbZV07dGhpcy5ob3QuYWRkSG9vayhlLHQsciksaS5wdXNoKHQpLFhkKHRoaXMsZl8pW2VdPWl9cmVtb3ZlSG9va3MoZSl7WG4o''@;'; put 'put ''WGQodGhpcyxmXylbZV18fFtdLHQ9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKGUsdCl9KX1jbGVhckhvb2tzKCl7Y29uc3QgZT1YZCh0aGlzLGZfKTthYyhlLCh0LHIpPT50aGlzLnJlbW92ZUhvb2tzKHIpKSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHQ9PmRlbGV0ZSBlW3RdKX1jYWxsT25QbHVn''@;'; put 'put ''aW5zUmVhZHkoZSl7dGhpcy5pc1BsdWdpbnNSZWFkeT9lKCk6dGhpcy5wbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3MucHVzaChlKX1vbkFmdGVyUGx1Z2luc0luaXRpYWxpemVkKCl7WG4odGhpcy5wbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3MsZT0+ZSgpKSx0aGlzLnBsdWdpbnNJbml0''@;'; put 'put ''aWFsaXplZENhbGxiYWNrcy5sZW5ndGg9MCx0aGlzLmlzUGx1Z2luc1JlYWR5PSEwfW9uVXBkYXRlU2V0dGluZ3MoZSl7aWYoIXRoaXMuaXNFbmFibGVkKXJldHVybjtjb25zdCB0PWRPZSh0aGlzLG1PZSxaRnQpLmNhbGwodGhpcyxlKTtpZih0aGlzLmVuYWJsZWQmJiF0aGlzLmlzRW5hYmxl''@;'; put 'put ''ZCgpJiZ0aGlzLmRpc2FibGVQbHVnaW4oKSwhdGhpcy5lbmFibGVkJiZ0aGlzLmlzRW5hYmxlZCgpKXtpZih0aGlzLmlzSGFyZENvbmZsaWN0QmxvY2tlZCgpKXJldHVybjt0aGlzLmVuYWJsZVBsdWdpbigpfXRoaXMuZW5hYmxlZCYmdGhpcy5pc0VuYWJsZWQoKSYmdGhpcy5pc0hhcmRDb25m''@;'; put 'put ''bGljdEJsb2NrZWQoKT90aGlzLmRpc2FibGVQbHVnaW4oKTp0aGlzLmVuYWJsZWQmJnRoaXMuaXNFbmFibGVkKCkmJnQmJih0aGlzLnVwZGF0ZVBsdWdpblNldHRpbmdzKGVbdGhpcy5jb25zdHJ1Y3Rvci5QTFVHSU5fS0VZXSksdGhpcy51cGRhdGVQbHVnaW4oZSkpfXVwZGF0ZVBsdWdpbihl''@;'; put 'put ''KXt9ZGVzdHJveSgpe05UKHRoaXMsUWQsbnVsbCksdGhpcy5ldmVudE1hbmFnZXI/LmRlc3Ryb3koKSx0aGlzLmNsZWFySG9va3MoKSxhYyh0aGlzLChlLHQpPT57ImhvdCIhPT10JiZSZWZsZWN0LnNldCh0aGlzLHQsbnVsbCl9KSxkZWxldGUgdGhpcy50LFJlZmxlY3QuZGVsZXRlUHJvcGVy''@;'; put 'put ''dHkodGhpcywiaG90Iil9Y29uc3RydWN0b3IoZSl7aE9lKHRoaXMsZ09lKSxoT2UodGhpcyxtT2UpLHVPZSh0aGlzLFFkLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx1T2UodGhpcyxmXyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksTlQodGhpcyxRZCxudWxsKSx0aGlzLmV2ZW50''@;'; put 'put ''TWFuYWdlcj1uZXcgVzIodGhpcyksdGhpcy5wbHVnaW5OYW1lPW51bGwsdGhpcy5wbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3M9W10sdGhpcy5pc1BsdWdpbnNSZWFkeT0hMSx0aGlzLmVuYWJsZWQ9ITEsdGhpcy5pbml0aWFsaXplZD0hMSxOVCh0aGlzLGZfLHt9KSxLNSh0aGlzLCJob3Qi''@;'; put 'put ''LGUse3dyaXRhYmxlOiExfSksSHc9bnVsbCx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsKCk9PnRoaXMub25BZnRlclBsdWdpbnNJbml0aWFsaXplZCgpKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclVwZGF0ZVNldHRpbmdzIix0PT57dGhpcy5vblVwZGF0ZVNl''@;'; put 'put ''dHRpbmdzKHQpfSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlSW5pdCIsKCk9PnRoaXMuaW5pdCgpKX19ZnVuY3Rpb24gWUZ0KG4sZSx0KXtyZXR1cm4oLi4ucik9Pntjb25zdCBpPW4oLi4ucik7aWYoITE9PT1lKGkpKXtjb25zdCBhPXIubWFwKHU9PiJzdHJpbmciPT10eXBlb2YgdT9gIiR7''@;'; put 'put ''dX0iYDoiIikuam9pbigiLCAiKTtyZXR1cm4gdm9pZCBIYShgJHt0aGlzLnBsdWdpbk5hbWV9IFBsdWdpbjogIiR7dH0iIGZ1bmN0aW9uICgke3IubGVuZ3RoPjA/YToiIn0pIHJlc3VsdCAgICAgICAgICAgICAgICBpcyBub3QgdmFsaWQgYW5kIHdpbGwgYmUgaWdub3JlZC5gKX1yZXR1cm4g''@;'; put 'put ''aX19ZnVuY3Rpb24gWkZ0KG4pe2lmKCFuKXJldHVybiExO2NvbnN0IGU9dGhpcy5jb25zdHJ1Y3Rvci5TRVRUSU5HX0tFWVM7aWYoImJvb2xlYW4iPT10eXBlb2YgZSlyZXR1cm4gZTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKylpZih2b2lkIDAhPT1uW2VbdF1dKXJldHVybiEwO3JldHVy''@;'; put 'put ''biExfWNvbnN0IEVoZT1jbGFzcyBHRnR7YWRkUm93KGUsdCl7dGhpcy5jb2x1bW5zLmxlbmd0aCYmSnIoIkRvZXNuJ3Qgc3VwcG9ydCBtdWx0aS1kaW1lbnNpb25hbCB0YWJsZSIpLHRoaXMucm93cy5sZW5ndGh8fCh0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhv''@;'; put 'put ''dC5yb290RWxlbWVudC5jbGFzc05hbWUpKTtjb25zdCByPXtyb3c6ZX07dGhpcy5yb3dzLnB1c2gociksdGhpcy5zYW1wbGVzPXQsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy50YWJsZS5jb2xHcm91cC5hcHBlbmRDaGlsZCh0aGlz''@;'; put 'put ''LmNyZWF0ZUNvbEdyb3Vwc0NvbChlKSksdGhpcy50YWJsZS50ci5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZVJvdyhlKSksdGhpcy5jb250YWluZXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLHIudGFibGU9dGhpcy50YWJsZS50YWJsZX1hZGRDb2x1bW5IZWFk''@;'; put 'put ''ZXJzUm93KGUpe2lmKG51bGwhPXRoaXMuaG90LmdldENvbEhlYWRlcigwKSl7Y29uc3Qgcj17cm93Oi0xfTt0aGlzLnJvd3MucHVzaChyKSx0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpLHRoaXMuc2FtcGxlcz1lLHRo''@;'; put 'put ''aXMudGFibGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50YWJsZS5jbGFzc05hbWUpLHRoaXMudGFibGUuY29sR3JvdXAuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xHcm91cHNDb2woKSksdGhpcy5hcHBlbmRDb2x1bW5IZWFkZXJzUm93KCksdGhpcy5jb250YWluZXIuY29udGFpbmVy''@;'; put 'put ''LmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLHIudGFibGU9dGhpcy50YWJsZS50YWJsZX19YWRkQ29sdW1uKGUsdCl7dGhpcy5yb3dzLmxlbmd0aCYmSnIoIkRvZXNuJ3Qgc3VwcG9ydCBtdWx0aS1kaW1lbnNpb25hbCB0YWJsZSIpLHRoaXMuY29sdW1ucy5sZW5ndGh8fCh0aGlz''@;'; put 'put ''LmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpKTtjb25zdCByPXtjb2w6ZX07dGhpcy5jb2x1bW5zLnB1c2gociksdGhpcy5zYW1wbGVzPXQsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNz''@;'; put 'put ''TmFtZSksdGhpcy5nZXRTZXR0aW5nKCJ1c2VIZWFkZXJzIikmJm51bGwhPT10aGlzLmhvdC5nZXRDb2xIZWFkZXIoZSkmJnRoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKGUsdGhpcy50YWJsZS50aCx2b2lkIDAsLTEpLHRoaXMudGFibGUudEJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jcmVh''@;'; put 'put ''dGVDb2woZSkpLHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLmZyYWdtZW50KSxyLnRhYmxlPXRoaXMudGFibGUudGFibGV9Z2V0SGVpZ2h0cyhlKXt0aGlzLmluamVjdGVkfHx0aGlzLmluamVjdFRhYmxlKCksWG4odGhpcy5yb3dzLHQ9Pntjb25zdHto''@;'; put 'put ''ZWlnaHQ6cn09dC50YWJsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlKHQucm93LE1hdGgucm91bmQocikpfSl9Z2V0V2lkdGhzKGUpe3RoaXMuaW5qZWN0ZWR8fHRoaXMuaW5qZWN0VGFibGUoKSxYbih0aGlzLmNvbHVtbnMsdD0+e2NvbnN0e3dpZHRoOnJ9PXQudGFibGUuZ2V0Qm91bmRp''@;'; put 'put ''bmdDbGllbnRSZWN0KCk7ZSh0LmNvbCxNYXRoLmNlaWwocikpfSl9c2V0U2V0dGluZ3MoZSl7dGhpcy5zZXR0aW5ncz1lfXNldFNldHRpbmcoZSx0KXt0aGlzLnNldHRpbmdzfHwodGhpcy5zZXR0aW5ncz17dXNlSGVhZGVyczohMH0pLHRoaXMuc2V0dGluZ3NbZV09dH1nZXRTZXR0aW5ncygp''@;'; put 'put ''e3JldHVybiB0aGlzLnNldHRpbmdzfWdldFNldHRpbmcoZSl7cmV0dXJuIHRoaXMuc2V0dGluZ3M/dGhpcy5zZXR0aW5nc1tlXTpudWxsfWNyZWF0ZUNvbEdyb3Vwc0NvbChlKXtjb25zdCB0PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7cmV0dXJuIHRo''@;'; put 'put ''aXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSYmdC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEVsZW1lbnQoLTEsLTEpKSx0aGlzLnNhbXBsZXMuZm9yRWFjaChyPT57WG4oci5zdHJpbmdzLGk9Pnt0LmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sRWxlbWVudChpLmNvbCxlKSl9KX0pLHR9Y3Jl''@;'; put 'put ''YXRlUm93KGUpe2NvbnN0IHQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LHI9dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaT10LmNyZWF0ZUVsZW1lbnQoInRoIik7cmV0dXJuIHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSYmKHRoaXMuaG90LnZpZXcuYXBwZW5kUm93SGVhZGVyKGUsaSksci5h''@;'; put 'put ''cHBlbmRDaGlsZChpKSksdGhpcy5zYW1wbGVzLmZvckVhY2gobz0+e1huKG8uc3RyaW5ncyxhPT57Y29uc3QgbD1hLmNvbCx1PXRoaXMuaG90LmdldENlbGxNZXRhKGUsbCksZz10aGlzLmhvdC5nZXRDZWxsUmVuZGVyZXIodSksRT10LmNyZWF0ZUVsZW1lbnQoInRkIik7RS5zZXRBdHRyaWJ1''@;'; put 'put ''dGUoImdob3N0LXRhYmxlIiwiMSIpLGcodGhpcy5ob3QsRSxlLGwsdGhpcy5ob3QuY29sVG9Qcm9wKGwpLGEudmFsdWUsdSksci5hcHBlbmRDaGlsZChFKX0pfSkscn1hcHBlbmRDb2x1bW5IZWFkZXJzUm93KCl7Y29uc3QgZT10aGlzLmhvdC5yb290RG9jdW1lbnQsdD1lLmNyZWF0ZURvY3Vt''@;'; put 'put ''ZW50RnJhZ21lbnQoKSxyPVtdO2lmKHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSl7Y29uc3QgaT1lLmNyZWF0ZUVsZW1lbnQoInRoIik7ci5wdXNoKFstMSxpXSksdC5hcHBlbmRDaGlsZChpKX10aGlzLnNhbXBsZXMuZm9yRWFjaChpPT57WG4oaS5zdHJpbmdzLG89Pntjb25zdCBhPW8uY29s''@;'; put 'put ''LGw9ZS5jcmVhdGVFbGVtZW50KCJ0aCIpO3IucHVzaChbYSxsXSksdC5hcHBlbmRDaGlsZChsKX0pfSksdGhpcy50YWJsZS50SGVhZC5hcHBlbmRDaGlsZCh0KSxYbihyLGk9Pntjb25zdFtvLGFdPWk7dGhpcy5ob3Qudmlldy5hcHBlbmRDb2xIZWFkZXIobyxhKX0pfWNyZWF0ZUNvbChlKXtj''@;'; put 'put ''b25zdCB0PXRoaXMuaG90LnJvb3REb2N1bWVudCxyPXQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO3JldHVybiB0aGlzLnNhbXBsZXMuZm9yRWFjaChpPT57WG4oaS5zdHJpbmdzLG89Pntjb25zdCBhPW8ucm93LGw9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoYSxlKSx1PXRoaXMuaG90LmdldENl''@;'; put 'put ''bGxSZW5kZXJlcihsKSxnPXQuY3JlYXRlRWxlbWVudCgidGQiKSxFPXQuY3JlYXRlRWxlbWVudCgidHIiKTtnLnNldEF0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiLCIxIiksdSh0aGlzLmhvdCxnLGEsZSx0aGlzLmhvdC5jb2xUb1Byb3AoZSksby52YWx1ZSxsKSxFLmFwcGVuZENoaWxkKGcpLHIu''@;'; put 'put ''YXBwZW5kQ2hpbGQoRSl9KX0pLHJ9Y2xlYW4oKXt0aGlzLnJvd3MubGVuZ3RoPTAsdGhpcy5yb3dzWy0xXT12b2lkIDAsdGhpcy5jb2x1bW5zLmxlbmd0aD0wLHRoaXMuc2FtcGxlcyYmdGhpcy5zYW1wbGVzLmNsZWFyKCksdGhpcy5zYW1wbGVzPW51bGwsdGhpcy5yZW1vdmVUYWJsZSgpfWlu''@;'; put 'put ''amVjdFRhYmxlKGU9bnVsbCl7dGhpcy5pbmplY3RlZHx8KChlfHx0aGlzLmhvdC5yb290RWxlbWVudCkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXIuZnJhZ21lbnQpLHRoaXMuaW5qZWN0ZWQ9ITApfXJlbW92ZVRhYmxlKCl7dGhpcy5pbmplY3RlZCYmdGhpcy5jb250YWluZXIuY29udGFp''@;'; put 'put ''bmVyLnBhcmVudE5vZGUmJih0aGlzLmNvbnRhaW5lci5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lci5jb250YWluZXIpLHRoaXMuY29udGFpbmVyPW51bGwsdGhpcy5pbmplY3RlZD0hMSl9Y3JlYXRlQ29sRWxlbWVudChlLHQpe2NvbnN0IHI9dGhpcy5o''@;'; put 'put ''b3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNvbCIpO2xldCBpPTA7dD49MCYmZT49MCYmKGk9TnVtYmVyKHRoaXMuaG90LmdldENlbGxNZXRhKHQsZSkuY29sc3BhbikpO2xldCBvPXRoaXMuaG90LmdldENvbFdpZHRoKGUpO2lmKGk+MSlmb3IobGV0IGE9ZSsxO2E8ZStpO2ErKylv''@;'; put 'put ''Kz10aGlzLmhvdC5nZXRDb2xXaWR0aChhKTtyZXR1cm4gci5zdHlsZS53aWR0aD1gJHtvfXB4YCxyfWNyZWF0ZVRhYmxlKGU9IiIpe2NvbnN0IHQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LHI9dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaT10LmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksbz10''@;'; put 'put ''LmNyZWF0ZUVsZW1lbnQoInRoZWFkIiksYT10LmNyZWF0ZUVsZW1lbnQoInRib2R5IiksbD10LmNyZWF0ZUVsZW1lbnQoImNvbGdyb3VwIiksdT10LmNyZWF0ZUVsZW1lbnQoInRyIiksZz10LmNyZWF0ZUVsZW1lbnQoInRoIik7cmV0dXJuIHRoaXMuaXNWZXJ0aWNhbCgpJiZpLmFwcGVuZENo''@;'; put 'put ''aWxkKGwpLHRoaXMuaXNIb3Jpem9udGFsKCkmJih1LmFwcGVuZENoaWxkKGcpLG8uYXBwZW5kQ2hpbGQodSksaS5zdHlsZS50YWJsZUxheW91dD0iYXV0byIsaS5zdHlsZS53aWR0aD0iYXV0byIpLGkuYXBwZW5kQ2hpbGQobyksdGhpcy5pc1ZlcnRpY2FsKCkmJmEuYXBwZW5kQ2hpbGQodSks''@;'; put 'put ''aS5hcHBlbmRDaGlsZChhKSxZcihpLGUpLHIuYXBwZW5kQ2hpbGQoaSkse2ZyYWdtZW50OnIsdGFibGU6aSx0SGVhZDpvLHRCb2R5OmEsY29sR3JvdXA6bCx0cjp1LHRoOmd9fWNyZWF0ZUNvbnRhaW5lcihlPSIiKXtjb25zdCB0PXRoaXMuaG90LnJvb3REb2N1bWVudCxyPXQuY3JlYXRlRG9j''@;'; put 'put ''dW1lbnRGcmFnbWVudCgpLGk9dC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gWXIoaSxgaHRHaG9zdFRhYmxlIGh0QXV0b1NpemUgJHtlLnRyaW0oKX1gKSxyLmFwcGVuZENoaWxkKGkpLHtmcmFnbWVudDpyLGNvbnRhaW5lcjppfX1pc1ZlcnRpY2FsKCl7cmV0dXJuISghdGhpcy5yb3dz''@;'; put 'put ''Lmxlbmd0aHx8dGhpcy5jb2x1bW5zLmxlbmd0aCl9aXNIb3Jpem9udGFsKCl7cmV0dXJuISghdGhpcy5jb2x1bW5zLmxlbmd0aHx8dGhpcy5yb3dzLmxlbmd0aCl9Y29uc3RydWN0b3IoZSl7dGhpcy5ob3Q9bnVsbCx0aGlzLmNvbnRhaW5lcj1udWxsLHRoaXMuaW5qZWN0ZWQ9ITEsdGhpcy5y''@;'; put 'put ''b3dzPVtdLHRoaXMuY29sdW1ucz1bXSx0aGlzLnNhbXBsZXM9bnVsbCx0aGlzLnNldHRpbmdzPXt1c2VIZWFkZXJzOiEwfSx0aGlzLnRhYmxlPW51bGwsdGhpcy5ob3Q9ZX19O2NsYXNzIE1oZXtzdGF0aWMgZ2V0IFNBTVBMRV9DT1VOVCgpe3JldHVybiAzfWdldFNhbXBsZUNvdW50KCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuY3VzdG9tU2FtcGxlQ291bnQ/dGhpcy5jdXN0b21TYW1wbGVDb3VudDpNaGUuU0FNUExFX0NPVU5UfXNldFNhbXBsZUNvdW50KGUpe3RoaXMuY3VzdG9tU2FtcGxlQ291bnQ9ZX1zZXRBbGxvd0R1cGxpY2F0ZXMoZSl7dGhpcy5hbGxvd0R1cGxpY2F0ZXM9ZX1zZXRJbmNsdWRl''@;'; put 'put ''SGlkZGVuKGUpe3RoaXMuaW5jbHVkZUhpZGRlbj1lfWdlbmVyYXRlUm93U2FtcGxlcyhlLHQpe3JldHVybiB0aGlzLmdlbmVyYXRlU2FtcGxlcygicm93Iix0LGUpfWdlbmVyYXRlQ29sdW1uU2FtcGxlcyhlLHQpe3JldHVybiB0aGlzLmdlbmVyYXRlU2FtcGxlcygiY29sIix0LGUpfWdlbmVy''@;'; put 'put ''YXRlU2FtcGxlcyhlLHQscil7Y29uc3QgaT1uZXcgTWFwLHtmcm9tOm8sdG86YX09Im51bWJlciI9PXR5cGVvZiByP3tmcm9tOnIsdG86cn06cjtyZXR1cm4gVmEobyxhLGw9Pntjb25zdCB1PXRoaXMuZ2VuZXJhdGVTYW1wbGUoZSx0LGwpO2kuc2V0KGwsdSl9KSxpfWdlbmVyYXRlU2FtcGxl''@;'; put 'put ''KGUsdCxyKXsicm93IiE9PWUmJiJjb2wiIT09ZSYmSnIoIlVuc3VwcG9ydGVkIHNhbXBsZSB0eXBlIik7Y29uc3QgaT1uZXcgTWFwLG89InJvdyI9PT1lPyJjb2wiOiJyb3ciLGE9W107cmV0dXJuIFZhKHQuZnJvbSx0LnRvLGw9Pntjb25zdCB1PSJyb3ciPT09ZT90aGlzLmRhdGFGYWN0b3J5''@;'; put 'put ''KHIsbCx0aGlzKTp0aGlzLmRhdGFGYWN0b3J5KGwscix0aGlzKTtpZighMT09PXUpcmV0dXJuO2NvbnN0e3ZhbHVlOmcsYnVuZGxlU2VlZDpFfT11LE89InN0cmluZyI9PXR5cGVvZiBFJiZFLmxlbmd0aD4wO2xldCBaO1o9Tz9FOmtkKGcpP2Ake09iamVjdC5rZXlzKGcpLmxlbmd0aH1gOkFy''@;'; put 'put ''cmF5LmlzQXJyYXkoZyk/YCR7Zy5sZW5ndGh9YDpgJHtQbChnKS5sZW5ndGh9YCxpLmhhcyhaKXx8aS5zZXQoWix7bmVlZGVkOnRoaXMuZ2V0U2FtcGxlQ291bnQoKSxzdHJpbmdzOltdfSk7Y29uc3QgZWU9aS5nZXQoWik7ZWUmJmVlLm5lZWRlZCYmKCEoYS5pbmRleE9mKGcpPi0xKXx8dGhp''@;'; put 'put ''cy5hbGxvd0R1cGxpY2F0ZXN8fE8pJiYoZWUuc3RyaW5ncy5wdXNoKHt2YWx1ZTpnLFtvXTpsfSksYS5wdXNoKGcpLGVlLm5lZWRlZC09MSl9KSxpfWNvbnN0cnVjdG9yKGUpe3RoaXMuc2FtcGxlcz1udWxsLHRoaXMuZGF0YUZhY3Rvcnk9bnVsbCx0aGlzLmN1c3RvbVNhbXBsZUNvdW50PW51''@;'; put 'put ''bGwsdGhpcy5hbGxvd0R1cGxpY2F0ZXM9ITEsdGhpcy5pbmNsdWRlSGlkZGVuPSExLHRoaXMuZGF0YUZhY3Rvcnk9ZX19Y29uc3Qgdk9lPU1oZTtmdW5jdGlvbiBfT2UobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2''@;'; put 'put ''YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHlPZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBh''@;'; put 'put ''MihuLGUpe3JldHVybiBmdW5jdGlvbiAkRnQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLHlPZShuLGUsImdldCIpKX1mdW5jdGlvbiBwNihuLGUsdCl7X09lKG4sZSksZS5zZXQobix0KX1mdW5jdGlvbiBHMihuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIHFGdChu''@;'; put 'put ''LGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4seU9lKG4sZSwic2V0IiksdCksdH1mdW5jdGlvbiBOTyhuLGUs''@;'; put 'put ''dCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiBUaGUobixlKXtfT2UobixlKSxlLmFkZChuKX1Hby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigibW9kaWZ5''@;'; put 'put ''QXV0b0NvbHVtblNpemVTZWVkIik7Y29uc3QgeGhlPSJhdXRvQ29sdW1uU2l6ZSI7dmFyIElaPW5ldyBXZWFrTWFwLFZ3PW5ldyBXZWFrTWFwLEJ3PW5ldyBXZWFrTWFwLEZUPW5ldyBXZWFrTWFwLGJPZT1uZXcgV2Vha1NldCxBaGU9bmV3IFdlYWtTZXQsa2hlPW5ldyBXZWFrU2V0LFJoZT1u''@;'; put 'put ''ZXcgV2Vha01hcCxJaGU9bmV3IFdlYWtNYXAsRGhlPW5ldyBXZWFrTWFwLERaPW5ldyBXZWFrTWFwLExoZT1uZXcgV2Vha01hcCxPaGU9bmV3IFdlYWtNYXA7Y2xhc3MgRk8gZXh0ZW5kcyBhbHtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4geGhlfXN0YXRpYyBnZXQgUExVR0lOX1BS''@;'; put 'put ''SU9SSVRZKCl7cmV0dXJuIDEwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue3VzZUhlYWRlcnM6ITAsc2FtcGxpbmdSYXRpbzpudWxsLGFsbG93U2FtcGxlRHVwbGljYXRlczohMX19c3RhdGljIGdldCBDQUxD''@;'; put 'put ''VUxBVElPTl9TVEVQKCl7cmV0dXJuIDUwfXN0YXRpYyBnZXQgU1lOQ19DQUxDVUxBVElPTl9MSU1JVCgpe3JldHVybiA1MH1pc0VuYWJsZWQoKXtyZXR1cm4hMSE9PXRoaXMuaG90LmdldFNldHRpbmdzKClbeGhlXSYmIXRoaXMuaG90LmdldFNldHRpbmdzKCkuY29sV2lkdGhzfWVuYWJsZVBs''@;'; put 'put ''dWdpbigpe2lmKHRoaXMuZW5hYmxlZClyZXR1cm47dGhpcy5naG9zdFRhYmxlLnNldFNldHRpbmcoInVzZUhlYWRlcnMiLHRoaXMuZ2V0U2V0dGluZygidXNlSGVhZGVycyIpKSx0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0QWxsb3dEdXBsaWNhdGVzKHRoaXMuZ2V0U2V0dGluZygiYWxsb3dT''@;'; put 'put ''YW1wbGVEdXBsaWNhdGVzIikpO2NvbnN0IGU9dGhpcy5nZXRTZXR0aW5nKCJzYW1wbGluZ1JhdGlvIik7ZSYmIWlzTmFOKGUpJiZ0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0U2FtcGxlQ291bnQocGFyc2VJbnQoU3RyaW5nKGUpLDEwKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixh''@;'; put 'put ''Mih0aGlzLEloZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ2hhbmdlUmVuZGVyIixhMih0aGlzLERoZSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIsYTIodGhpcyxPaGUpKSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbmRlciIsYTIodGhpcyxSaGUpKSx0aGlzLmFk''@;'; put 'put ''ZEhvb2soIm1vZGlmeUNvbFdpZHRoIiwodCxyKT0+dGhpcy5nZXRDb2x1bW5XaWR0aChyLHQpLC0xMCksdGhpcy5hZGRIb29rKCJpbml0IixhMih0aGlzLExoZSkpLEcyKHRoaXMsRlQsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIub2JzZXJ2ZU1hcENoYW5nZSh0aGlzLmNvbHVtbldpZHRo''@;'; put 'put ''c01hcCwoKT0+e3RoaXMuaG90LnZpZXc/LmludmFsaWRhdGVDb2x1bW5XaWR0aENhY2hlKCl9KSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7RzIodGhpcyxCdyx0aGlzLmZpbmRDb2x1bW5zV2hlcmVIZWFkZXJXYXNDaGFuZ2VkKCkpLHN1cGVyLnVwZGF0ZVBsdWdpbigp''@;'; put 'put ''fWRpc2FibGVQbHVnaW4oKXthMih0aGlzLEZUKSYmKGEyKHRoaXMsRlQpLmNhbGwodGhpcyksRzIodGhpcyxGVCxudWxsKSksc3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIixhMih0aGlzLERaKSl9Y2FsY3VsYXRlVmlzaWJsZUNvbHVtbnNX''@;'; put 'put ''aWR0aCgpe2lmKCF0aGlzLmhvdC5jb3VudFJvd3MoKSlyZXR1cm47Y29uc3QgZT10aGlzLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpLHQ9dGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpOy0xIT09ZSYmLTEhPT10JiZ0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aCh7ZnJvbTplLHRvOnR9LHZv''@;'; put 'put ''aWQgMCx0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIpfWNhbGN1bGF0ZUNvbHVtbnNXaWR0aChlPXtmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sdD17ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LHI9ITEpe2NvbnN0IGk9Im51bWJlciI9PXR5cGVvZiBlP3tmcm9t''@;'; put 'put ''OmUsdG86ZX06ZSxvPSJudW1iZXIiPT10eXBlb2YgdD97ZnJvbTp0LHRvOnR9OnQ7VmEoaS5mcm9tLGkudG8sYT0+e2xldCBsPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYSk7bnVsbD09PWwmJihsPWEpLChyfHxudWxsPT09dGhpcy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVBdEluZGV4''@;'; put 'put ''KGwpJiYhdGhpcy5ob3QuX2dldENvbFdpZHRoRnJvbVNldHRpbmdzKGwpKSYmTk8odGhpcyxBaGUsd09lKS5jYWxsKHRoaXMsYSxvKX0pLHRoaXMuZ2hvc3RUYWJsZS5jb2x1bW5zLmxlbmd0aCYmKE5PKHRoaXMsa2hlLENPZSkuY2FsbCh0aGlzKSx0aGlzLm1lYXN1cmVkQ29sdW1ucz1pLnRv''@;'; put 'put ''KzEsdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aChlPXtmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX0sdD0hMSl7bGV0IHI9MDtjb25zdCBpPXRoaXMuaG90LmNvdW50Q29scygpLTE7bGV0IG89MDt0aGlzLmluUHJvZ3Jlc3M9ITA7Y29u''@;'; put 'put ''c3QgYT0oKT0+e2lmKCF0aGlzLmhvdClyZXR1cm4gZEwobyksdm9pZCh0aGlzLmluUHJvZ3Jlc3M9ITEpO3RoaXMuY2FsY3VsYXRlQ29sdW1uc1dpZHRoKHtmcm9tOnIsdG86TWF0aC5taW4ocitGTy5DQUxDVUxBVElPTl9TVEVQLGkpfSxlLHQpLHI9citGTy5DQUxDVUxBVElPTl9TVEVQKzEs''@;'; put 'put ''cjxpP289dUwoYSk6KGRMKG8pLHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpKX0sbD10aGlzLmdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCk7bD49MCYmKHRoaXMuY2FsY3VsYXRlQ29sdW1uc1dpZHRoKHtmcm9tOjAsdG86bH0sZSx0KSxyPWwr''@;'; put 'put ''MSkscjxpP2EoKTp0aGlzLmluUHJvZ3Jlc3M9ITF9cmVjYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKXt0aGlzLmhvdC52aWV3LmlzVmlzaWJsZSgpJiZ0aGlzLmNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCh7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LCEwKX1nZXRTeW5jQ2Fs''@;'; put 'put ''Y3VsYXRpb25MaW1pdCgpe2NvbnN0IGU9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt4aGVdO2xldCB0PUZPLlNZTkNfQ0FMQ1VMQVRJT05fTElNSVQ7Y29uc3Qgcj10aGlzLmhvdC5jb3VudENvbHMoKS0xO2lmKENhKGUpKXtjb25zdCBpPWUuc3luY0xpbWl0O2lmKCJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''aSYmd3NlKGkpKXQ9bmxlKHIsaSk7ZWxzZXtjb25zdCBvPU51bWJlcihpKTt0PU51bWJlci5pc0Zpbml0ZShvKT9NYXRoLnRydW5jKG8pOjB9fXJldHVybiBNYXRoLm1pbih0LHIpfWdldENvbHVtbldpZHRoKGUsdCxyPSEwKXtsZXQgaT10O3JldHVybiB2b2lkIDA9PT1pJiYoaT10aGlzLmNv''@;'; put 'put ''bHVtbldpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihlKSksciYmIm51bWJlciI9PXR5cGVvZiBpJiYoaT1NYXRoLm1heChpLDUwKSkpLGl9Z2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNp''@;'; put 'put ''YmxlQ29sdW1uKCk/Py0xfWdldExhc3RWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuaG90LmdldExhc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKT8/LTF9ZmluZENvbHVtbnNXaGVyZUhlYWRlcldhc0NoYW5nZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0Q29sSGVhZGVyKCkucmVkdWNlKChy''@;'; put 'put ''LGksbyk9Pntjb25zdCBhPWEyKHRoaXMsVncpLmxlbmd0aDtpZihhLTE8b3x8YTIodGhpcyxWdylbb10hPT1pKXtjb25zdCBsPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKG8pO251bGwhPT1sJiZyLnB1c2gobCl9cmV0dXJuIGEtMTxvP2EyKHRoaXMsVncpLnB1c2goaSk6YTIodGhpcyxWdylb''@;'; put 'put ''b109aSxyfSxbXSl9Y2xlYXJDYWNoZShlKXtBcnJheS5pc0FycmF5KGUpP3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57ZS5mb3JFYWNoKHQ9Pnt0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgodCxudWxsKX0pfSwhMCk6dGhpcy5jb2x1bW5XaWR0aHNNYXAuY2xlYXIo''@;'; put 'put ''KX1pc05lZWRSZWNhbGN1bGF0ZSgpe3JldHVybiEhdGhpcy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVzKCkuc2xpY2UoMCx0aGlzLm1lYXN1cmVkQ29sdW1ucykuZmlsdGVyKGU9Pm51bGw9PT1lKS5sZW5ndGh9ZGVzdHJveSgpe3RoaXMuZ2hvc3RUYWJsZS5jbGVhbigpLHN1cGVyLmRlc3Ry''@;'; put 'put ''b3koKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlKSxUaGUodGhpcyxiT2UpLFRoZSh0aGlzLEFoZSksVGhlKHRoaXMsa2hlKSxwNih0aGlzLElaLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxwNih0aGlzLFZ3LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxwNih0aGlzLEJ3LHt3cml0''@;'; put 'put ''YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxwNih0aGlzLEZULHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxwNih0aGlzLFJoZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSkscDYodGhpcyxJaGUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHA2KHRoaXMsRGhlLHt3cml0YWJsZToh''@;'; put 'put ''MCx2YWx1ZTp2b2lkIDB9KSxwNih0aGlzLERaLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxwNih0aGlzLExoZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSkscDYodGhpcyxPaGUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHRoaXMuZ2hvc3RUYWJsZT1uZXcgRWhlKHRoaXMu''@;'; put 'put ''aG90KSx0aGlzLnNhbXBsZXNHZW5lcmF0b3I9bmV3IHZPZSgodCxyKT0+e2NvbnN0IGk9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyh0KSxvPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4ocik7aWYodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4oaSl8fHRoaXMuaG90LmNvbHVtbklu''@;'; put 'put ''ZGV4TWFwcGVyLmlzSGlkZGVuKG8pKXJldHVybiExO2NvbnN0IGE9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEodCxyKTtsZXQgbD0iIix1PSIiO2lmKGEuaGlkZGVuKXJldHVybiExO2Euc3Bhbm5lZHx8KHU9dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbCh0LHIpLGw9dSwiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''YS52YWx1ZUZvcm1hdHRlciYmKGw9YS52YWx1ZUZvcm1hdHRlcihsLGEpLHU9bCkpO2xldCBnPSIiO3JldHVybiB0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiKSYmKGc9U3RyaW5nKHRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQi''@;'; put 'put ''LGcsYSx1KT8/ZykpLHt2YWx1ZTpsLGJ1bmRsZVNlZWQ6Z319KSx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5tZWFzdXJlZENvbHVtbnM9MCx0aGlzLmNvbHVtbldpZHRoc01hcD1uZXcgbl8sRzIodGhpcyxJWiwhMSksRzIodGhpcyxWdyxbXSksRzIodGhpcyxCdyxbXSksRzIodGhpcyxGVCxu''@;'; put 'put ''dWxsKSxHMih0aGlzLFJoZSwoKT0+e3RoaXMuY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnNXaWR0aCgpLHRoaXMuaW5Qcm9ncmVzc3x8KE5PKHRoaXMsYk9lLFFGdCkuY2FsbCh0aGlzLGEyKHRoaXMsQncpKSxHMih0aGlzLEJ3LFtdKSl9KSxHMih0aGlzLEloZSwodCxyKT0+e3J8fHRoaXMucmVj''@;'; put 'put ''YWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKX0pLEcyKHRoaXMsRGhlLHQ9Pntjb25zdCByPXQucmVkdWNlKChpLFssb10pPT57Y29uc3QgYT10aGlzLmhvdC5wcm9wVG9Db2wobyk7cmV0dXJuIG51bGwhPT1hJiZOdW1iZXIuaXNJbnRlZ2VyKGEpJiYtMT09PWkuaW5kZXhPZihhKSYmaS5wdXNo''@;'; put 'put ''KGEpLGl9LFtdKTthMih0aGlzLEJ3KS5wdXNoKC4uLnIpfSksRzIodGhpcyxEWiwodCxyLGkpPT57bGV0IG89dDtyZXR1cm4gaSYmKHRoaXMuY2FsY3VsYXRlQ29sdW1uc1dpZHRoKHIsdm9pZCAwLCEwKSxvPXRoaXMuZ2V0Q29sdW1uV2lkdGgocix2b2lkIDAsITEpPz9vKSxvfSksRzIodGhp''@;'; put 'put ''cyxMaGUsKCk9PntHMih0aGlzLFZ3LHRoaXMuaG90LmdldENvbEhlYWRlcigpKSx0aGlzLnJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCksRzIodGhpcyxJWiwhMCl9KSxHMih0aGlzLE9oZSx0PT57aWYoIWEyKHRoaXMsSVopKXJldHVybjtjb25zdCBpPXRoaXMuaG90LmdldFBsdWdpbigi''@;'; put 'put ''Zm9ybXVsYXMiKT8uc2hlZXRJZCxvPXQucmVkdWNlKChhLGwpPT57Y29uc3QgdT1sO2lmKG51bGwhPWkmJnUuYWRkcmVzcz8uc2hlZXQhPT1pKXJldHVybiBhO2NvbnN0IGc9TnVtYmVyKHUuYWRkcmVzcz8uY29sKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGcpKXtjb25zdCBFPXRoaXMuaG90LnRv''@;'; put 'put ''VmlzdWFsQ29sdW1uKGcpO251bGwhPT1FJiYtMT09PWEuaW5kZXhPZihFKSYmYS5wdXNoKEUpfXJldHVybiBhfSxbXSk7YTIodGhpcyxCdykucHVzaCguLi5vKX0pLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJhdXRvQ29sdW1uU2l6ZSIsdGhpcy5jb2x1bW5XaWR0''@;'; put 'put ''aHNNYXApLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIixhMih0aGlzLERaKSl9fWZ1bmN0aW9uIFFGdChuKXtjb25zdCBlPXtmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX07bi5mb3JFYWNoKHQ9Pntjb25zdCByPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odCk7''@;'; put 'put ''bnVsbCE9PXImJih0aGlzLmhvdC5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3Mocil8fE5PKHRoaXMsQWhlLHdPZSkuY2FsbCh0aGlzLHQsZSkpfSksdGhpcy5naG9zdFRhYmxlLmNvbHVtbnMubGVuZ3RoJiYoTk8odGhpcyxraGUsQ09lKS5jYWxsKHRoaXMpLHRoaXMuZ2hvc3RUYWJsZS5jbGVh''@;'; put 'put ''bigpKX1mdW5jdGlvbiB3T2UobixlKXt0aGlzLnNhbXBsZXNHZW5lcmF0b3IuZ2VuZXJhdGVDb2x1bW5TYW1wbGVzKG4sZSkuZm9yRWFjaCgocixpKT0+dGhpcy5naG9zdFRhYmxlLmFkZENvbHVtbihpLHIpKX1mdW5jdGlvbiBDT2UoKXt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3Ro''@;'; put 'put ''aXMuZ2hvc3RUYWJsZS5nZXRXaWR0aHMoKG4sZSk9Pntjb25zdCB0PXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obik7dGhpcy5jb2x1bW5XaWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KHQsZSl9KX0sITApfWZ1bmN0aW9uIFNPZShuLGUsdCxyLGkpe2xldCBvPTA7Zm9yKGxldCBhPXQ7YTw9''@;'; put 'put ''cjthKyspe2NvbnN0IGw9bi5nZXRDZWxsKGUsYSwhMCk7aWYoIWwpY29udGludWU7Y29uc3QgdT1sLm9mZnNldFdpZHRoO2lmKGk8byt1KXJldHVybiBhO28rPXU7Y29uc3R7Y29sc3BhbjpnfT1uLmdldENlbGxNZXRhKGUsYSk7dm9pZCAwIT09ZyYmZz4xJiYoYSs9Zy0xKX1yZXR1cm4gbnVs''@;'; put 'put ''bH1mdW5jdGlvbiBOaGUobixlLHQscixpKXtsZXQgbz0wO2ZvcihsZXQgYT10O2E8PXI7YSsrKXtjb25zdCBsPW4uZ2V0Q2VsbChhLGUsITApO2lmKCFsKWNvbnRpbnVlO2NvbnN0IHU9bC5vZmZzZXRIZWlnaHQ7aWYoaTxvK3UpcmV0dXJuIGE7bys9dTtjb25zdHtyb3dzcGFuOmd9PW4uZ2V0''@;'; put 'put ''Q2VsbE1ldGEoYSxlKTt2b2lkIDAhPT1nJiZnPjEmJihhKz1nLTEpfXJldHVybiBudWxsfWZ1bmN0aW9uIEVPZShuLGUsdCl7Y29uc3R7dmlldzpyLGNvbHVtbkluZGV4TWFwcGVyOmkscm93SW5kZXhNYXBwZXI6b309bixhPW4uaXNSdGwoKSxsPXIuY291bnROb3RIaWRkZW5GaXhlZENvbHVt''@;'; put 'put ''bnNTdGFydCgpLHU9ci5jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpLGc9ci5jb3VudE5vdEhpZGRlbkZpeGVkUm93c0JvdHRvbSgpLEU9bi5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKSxPPW4uZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKSxaPW4uZ2V0Rmlyc3RQYXJ0aWFs''@;'; put 'put ''bHlWaXNpYmxlQ29sdW1uKCksZWU9bi5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpLHZlPW4ucm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksTWU9bi5oYXNDb2xIZWFkZXJzKCk/ci5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTowLEhlPW4uaGFzUm93SGVhZGVycygp''@;'; put 'put ''P3IuZ2V0Um93SGVhZGVyV2lkdGgoKTowLHtyb290V2luZG93OldlfT1uLGF0PXIuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKT9NYXRoLm1pbigwLHZlLmxlZnQpOnZlLmxlZnQsQ3Q9ci5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKT9NYXRoLm1pbigwLHZlLnRv''@;'; put 'put ''cCk6dmUudG9wLEF0PXIuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKT9XZS5pbm5lcldpZHRoOnZlLmxlZnQrci5nZXRWaWV3cG9ydFdpZHRoKCkrSGUsS3Q9ci5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKT9XZS5pbm5lckhlaWdodDp2ZS50b3Arci5nZXRWaWV3''@;'; put 'put ''cG9ydEhlaWdodCgpK01lLHF0PVZzKGUsYXQsQXQpLGduPVZzKHQsQ3QsS3QpO2xldCBUbj1udWxsO2lmKGw+MCl7Y29uc3QgcXI9aS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KDApLCRuPWkuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLTEpLFRyPW51bGwhPT1xcj9pLmdl''@;'; put 'put ''dE5lYXJlc3ROb3RIaWRkZW5JbmRleChxciwxKTpudWxsO2lmKG51bGwhPT1UciYmbnVsbCE9PSRuKXtjb25zdCByaT1uLmdldENlbGwoRSxUciwhMCk7aWYocmkgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCl7Y29uc3QgZm49cmkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7VG49U09lKG4sRSxU''@;'; put 'put ''ciwkbixhP2ZuLnJpZ2h0LXF0OnF0LWZuLmxlZnQpfX19aWYobnVsbD09PVRuKXtjb25zdCBxcj1uLmdldENlbGwoRSxaLCEwKTtpZihxciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KXtjb25zdCAkbj1xci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxUcj1hPyRuLnJpZ2h0LXF0OnF0LSRuLmxl''@;'; put 'put ''ZnQ7VG49U09lKG4sRSxaLGVlLFRyKSxudWxsPT09VG4mJihUbj1UcjwwP1o/PzA6ZWU/P24uY291bnRDb2xzKCktMSl9ZWxzZSBUbj1aPz8wfWxldCBDbj1udWxsO2lmKHU+MCl7Y29uc3QgcXI9by5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KDApLCRuPW8uZ2V0VmlzdWFsRnJvbVJl''@;'; put 'put ''bmRlcmFibGVJbmRleCh1LTEpLFRyPW51bGwhPT1xcj9vLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChxciwxKTpudWxsO2lmKG51bGwhPT1UciYmbnVsbCE9PSRuKXtjb25zdCByaT1uLmdldENlbGwoVHIsWiwhMCk7cmkgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmKENuPU5oZShuLFosVHIs''@;'; put 'put ''JG4sZ24tcmkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wKSl9fWlmKG51bGw9PT1DbiYmZz4wKXtjb25zdCBxcj1vLmdldE5vdEhpZGRlbkluZGV4ZXNMZW5ndGgoKSwkbj1vLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgocXItZyksVHI9by5nZXRWaXN1YWxGcm9tUmVuZGVyYWJs''@;'; put 'put ''ZUluZGV4KHFyLTEpLHJpPW51bGwhPT0kbj9vLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCgkbiwxKTpudWxsLGZuPW51bGwhPT1Ucj9vLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChUciwtMSk6bnVsbDtpZihudWxsIT09cmkmJm51bGwhPT1mbil7Y29uc3QgeXI9bi5nZXRDZWxsKHJpLFos''@;'; put 'put ''ITApO2lmKHlyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpe2NvbnN0IEhyPWduLXlyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtIcj49MCYmKENuPU5oZShuLFoscmksZm4sSHIpLG51bGw9PT1DbiYmKENuPWZuKSl9fX1pZihudWxsPT09Q24pe2NvbnN0IHFyPW4uZ2V0Q2VsbChFLFos''@;'; put 'put ''ITApO2lmKHFyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpe2NvbnN0IFRyPWduLXFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtDbj1OaGUobixaLEUsTyxUciksbnVsbD09PUNuJiYoQ249VHI8MD9FPz8wOk8/P24uY291bnRSb3dzKCktMSl9ZWxzZSBDbj1FPz8wfXJldHVybihudWxs''@;'; put 'put ''PT09Q258fG51bGw9PT1UbikmJkpyKCJGYWlsZWQgdG8gcmVzb2x2ZSBjZWxsIGNvb3JkaW5hdGVzIGZyb20gbW91c2UgcG9zaXRpb24uIiksbi5fY3JlYXRlQ2VsbENvb3JkcyhDbixUbil9Y29uc3QgTU9lPU9iamVjdC5mcmVlemUoe2hvcml6b250YWw6Imhvcml6b250YWwiLHZlcnRpY2Fs''@;'; put 'put ''OiJ2ZXJ0aWNhbCJ9KTtmdW5jdGlvbiBUT2UobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHhPZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBONyhuLGUpe3JldHVybiBmdW5jdGlvbiBlUHQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShu''@;'; put 'put ''LHhPZShuLGUsImdldCIpKX1mdW5jdGlvbiBQTyhuLGUsdCl7VE9lKG4sZSksZS5zZXQobix0KX1mdW5jdGlvbiBKcChuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIHRQdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4seE9lKG4sZSwic2V0IiksdCksdH1mdW5jdGlvbiBqdyhuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBv''@;'; put 'put ''biBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiBQVChuLGUpe1RPZShuLGUpLGUuYWRkKG4pfUdvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJtb2RpZnlBdXRvZmlsbFJhbmdlIiksR28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUF1dG9maWxsIiksR28uZ2V0U2lu''@;'; put 'put ''Z2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQXV0b2ZpbGwiKTtjb25zdCBGaGU9ImZpbGxIYW5kbGUiO3ZhciB6Mz1uZXcgV2Vha01hcCxMWj1uZXcgV2Vha01hcCxBT2U9bmV3IFdlYWtTZXQsa09lPW5ldyBXZWFrU2V0LFJPZT1uZXcgV2Vha1NldCxQaGU9bmV3IFdlYWtNYXAsSGhlPW5ldyBX''@;'; put 'put ''ZWFrTWFwLElPZT1uZXcgV2Vha1NldCxET2U9bmV3IFdlYWtTZXQsVmhlPW5ldyBXZWFrU2V0LEJoZT1uZXcgV2Vha01hcDtjbGFzcyBhUHQgZXh0ZW5kcyBhbHtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4iYXV0b2ZpbGwifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0''@;'; put 'put ''dXJuIDIwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW0ZoZV19c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue2RpcmVjdGlvbjp2b2lkIDAsYXV0b0luc2VydFJvdzohMH19c3RhdGljIGdldCBTRVRUSU5HU19WQUxJREFUT1JTKCl7cmV0dXJue2RpcmVjdGlv''@;'; put 'put ''bjplPT52b2lkIDA9PT1lfHwic3RyaW5nIj09dHlwZW9mIGUmJk9iamVjdC52YWx1ZXMoTU9lKS5pbmNsdWRlcyhlKSxhdXRvSW5zZXJ0Um93OmU9PiJib29sZWFuIj09dHlwZW9mIGV9fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtGaGVdfWVuYWJsZVBsdWdp''@;'; put 'put ''bigpe2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3QgZT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0ZoZV0sdD17fTsic3RyaW5nIj09dHlwZW9mIGU/dC5kaXJlY3Rpb249ZTplJiYib2JqZWN0Ij09dHlwZW9mIGUmJk9iamVjdC5hc3NpZ24odCxlKSx0aGlzLnVwZGF0ZVBsdWdpblNldHRp''@;'; put 'put ''bmdzKHQpLHRoaXMuZGlyZWN0aW9ucz10aGlzLmdldFNldHRpbmcoImRpcmVjdGlvbiIpP1t0aGlzLmdldFNldHRpbmcoImRpcmVjdGlvbiIpXTpPYmplY3QudmFsdWVzKE1PZSksdGhpcy5hdXRvSW5zZXJ0Um93PXRoaXMuZ2V0U2V0dGluZygiYXV0b0luc2VydFJvdyIpLDE9PT10aGlzLmRp''@;'; put 'put ''cmVjdGlvbnMubGVuZ3RoJiZ0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXMoImhvcml6b250YWwiKSYmKHRoaXMuYXV0b0luc2VydFJvdz0hMSksdGhpcy5yZWdpc3RlckV2ZW50cygpLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLE43KHRoaXMsSGhlKSksdGhpcy5h''@;'; put 'put ''ZGRIb29rKCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIixONyh0aGlzLFBoZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VPdmVyIiwocixpKT0+ancodGhpcyxJT2UsdVB0KS5jYWxsKHRoaXMsaSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGwiLE43KHRoaXMsQmhlKSks''@;'; put 'put ''c3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpfWdldFNlbGVjdGlvbkRhdGEoZT0hMSl7Y29uc3Qg''@;'; put 'put ''dD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCF0KXJldHVybltdO2NvbnN0e3JvdzpyLGNvbDppfT10LmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpvLGNvbDphfT10LmdldEJvdHRvbUVuZENvcm5lcigpLGw9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUNvcHlhYmxlUmFu''@;'; put 'put ''Z2UiLFt7c3RhcnRSb3c6cixzdGFydENvbDppLGVuZFJvdzpvLGVuZENvbDphfV0pLHU9W10sZz1bXSxFPVtdO3JldHVybiBYbihsLE89Pntmb3IobGV0IFo9Ty5zdGFydFJvdztaPD1PLmVuZFJvdztaKz0xKS0xPT09dS5pbmRleE9mKFopJiZ1LnB1c2goWik7Zm9yKGxldCBaPU8uc3RhcnRD''@;'; put 'put ''b2w7Wjw9Ty5lbmRDb2w7Wis9MSktMT09PWcuaW5kZXhPZihaKSYmZy5wdXNoKFopfSksWG4odSxPPT57Y29uc3QgWj1bXTtYbihnLGVlPT57Y29uc3QgdmU9TyxNZT1lZSxIZT1lP3RoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwodmUsTWUpOm51bGw7ZSYmKENhKEhlKXx8QXJyYXkuaXNB''@;'; put 'put ''cnJheShIZSkpP1oucHVzaCh0aGlzLmhvdC5nZXRDb3B5YWJsZVNvdXJjZURhdGEodmUsTWUpKTpaLnB1c2godGhpcy5ob3QuZ2V0Q29weWFibGVEYXRhKHZlLE1lKSl9KSxFLnB1c2goWil9KSxFfWZpbGxJbigpe2lmKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmlz''@;'; put 'put ''RW1wdHkoKSlyZXR1cm4hMTtjb25zdFtlLHQscixpXT10aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5nZXRWaXN1YWxDb3JuZXJzKCksbz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFvKXJldHVybiExO2NvbnN0IGE9by5nZXRUb3BTdGFydENvcm5l''@;'; put 'put ''cigpLGw9by5nZXRCb3R0b21FbmRDb3JuZXIoKTt0aGlzLnJlc2V0U2VsZWN0aW9uT2ZEcmFnZ2VkQXJlYSgpO2NvbnN0IHU9W2Eucm93Pz8wLGEuY29sPz8wLGwucm93Pz8wLGwuY29sPz8wXSxnPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlBdXRvZmlsbFJhbmdlIixbTWF0aC5taW4oYS5y''@;'; put 'put ''b3c/PzAsZT8/MCksTWF0aC5taW4oYS5jb2w/PzAsdD8/MCksTWF0aC5tYXgobC5yb3c/PzAscj8/MCksTWF0aC5tYXgobC5jb2w/PzAsaT8/MCldLHUpLHtkaXJlY3Rpb25PZkRyYWc6RSxzdGFydE9mRHJhZ0Nvb3JkczpPLGVuZE9mRHJhZ0Nvb3JkczpafT1mdW5jdGlvbiBKRnQobixlLHQp''@;'; put 'put ''e2xldCByLGksbztyZXR1cm4gZVswXT09PW5bMF0mJmVbMV08blsxXT8obz0ibGVmdCIscj10KGVbMF0sZVsxXSksaT10KGVbMl0sblsxXS0xKSk6ZVsyXT09PW5bMl0mJmVbMF09PT1uWzBdJiZlWzNdPm5bM10/KG89InJpZ2h0IixyPXQoZVswXSxuWzNdKzEpLGk9dChlWzJdLGVbM10pKTpl''@;'; put 'put ''WzBdPG5bMF0mJmVbMV09PT1uWzFdPyhvPSJ1cCIscj10KGVbMF0sZVsxXSksaT10KG5bMF0tMSxlWzNdKSk6ZVsyXT5uWzJdJiZlWzFdPT09blsxXSYmKG89ImRvd24iLHI9dChuWzJdKzEsZVsxXSksaT10KGVbMl0sZVszXSkpLHImJnIubm9ybWFsaXplKCksaSYmaS5ub3JtYWxpemUoKSx7''@;'; put 'put ''ZGlyZWN0aW9uT2ZEcmFnOm8sc3RhcnRPZkRyYWdDb29yZHM6cixlbmRPZkRyYWdDb29yZHM6aX19KHUsZywoZWUsdmUpPT50aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhlZSx2ZSkpO2lmKE8mJlomJm51bGwhPT1PLnJvdyYmbnVsbCE9PU8uY29sJiZudWxsIT09Wi5yb3cmJm51bGwhPT1a''@;'; put 'put ''LmNvbCYmTy5yb3c+LTEmJk8uY29sPi0xKXtjb25zdCBlZT1PLnJvdyx2ZT1PLmNvbCxNZT1aLnJvdyxIZT1aLmNvbCxXZT17cm93OmVlLGNvbDp2ZX0sYXQ9e3JvdzpNZSxjb2w6SGV9LEN0PXRoaXMuZ2V0U2VsZWN0aW9uRGF0YSgpLEF0PXRoaXMuZ2V0U2VsZWN0aW9uRGF0YSghMCksS3Q9''@;'; put 'put ''by5jbG9uZSgpLHF0PXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoTyxPLFopLGduPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVBdXRvZmlsbCIsQ3QsS3QscXQsRSk7aWYoITE9PT1nbilyZXR1cm4gdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKSx0aGlz''@;'; put 'put ''LmhvdC5yZW5kZXIoKSwhMTtsZXQgVG49Z247Y29uc3QgQ249Z247VG49ancodGhpcyxBT2Usc1B0KS5jYWxsKHRoaXMsQ24sVG4sRSxlZSxNZSx2ZSxIZSksVG49ancodGhpcyxrT2UsbFB0KS5jYWxsKHRoaXMsVG4sQXQsV2UsYXQsRSksdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoZWUs''@;'; put 'put ''dmUsVG4sTWUsSGUsYCR7dGhpcy5wbHVnaW5OYW1lfS5maWxsYCx2b2lkIDApLHRoaXMuc2V0U2VsZWN0aW9uKGcsS3QpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckF1dG9maWxsIixUbixLdCxxdCxFKSx0aGlzLmhvdC5yZW5kZXIoKX1lbHNlIHRoaXMuaG90LnZpZXcucmVuZGVyKCk7cmV0''@;'; put 'put ''dXJuITB9YWRkUm93KCl7dGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMuaG90LmFsdGVyKCJpbnNlcnRfcm93X2JlbG93Iix2b2lkIDAsMSxgJHt0aGlzLnBsdWdpbk5hbWV9LmZpbGxgKSx0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITF9LDIwMCl9YWRkTmV3Um93SWZOZWVkZWQoKXtp''@;'; put 'put ''ZighdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuaXNFbXB0eSgpJiYhMT09PXRoaXMuYWRkaW5nU3RhcnRlZCYmdGhpcy5hdXRvSW5zZXJ0Um93KXtjb25zdCBlPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk/LmdldEJvdHRvbUVuZENvcm5lcigpLnJvdz8/''@;'; put 'put ''bnVsbCx0PXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmdldFZpc3VhbENvcm5lcnMoKSxyPXRoaXMuaG90LmNvdW50Um93cygpO251bGwhPT1lJiZlPHItMSYmdFsyXT09PXItMSYmKHRoaXMuYWRkaW5nU3RhcnRlZD0hMCx0aGlzLmFkZFJvdygpKX19Z2V0SW5kZXhP''@;'; put 'put ''Zkxhc3RBZGphY2VudEZpbGxlZEluUm93KGUpe2NvbnN0IHQ9dGhpcy5ob3QuZ2V0RGF0YSgpLHI9dGhpcy5ob3QuY291bnRSb3dzKCk7bGV0IGk7Zm9yKGxldCBvPWVbMl0rMTtvPHI7bysrKXtmb3IobGV0IHU9ZVsxXTt1PD1lWzNdO3UrKylpZighQWwodFtvXVt1XSkpcmV0dXJuLTE7Y29u''@;'; put 'put ''c3QgbD10W29dW2VbM10rMV07KCFBbCh0W29dW2VbMV0tMV0pfHwhQWwobCkpJiYoaT1vKX1yZXR1cm4gaX1hZGRTZWxlY3Rpb25Gcm9tU3RhcnRBcmVhVG9TcGVjaWZpY1Jvd0luZGV4KGUsdCl7dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKS5hZGQodGhp''@;'; put 'put ''cy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZVswXSxlWzFdKSkuYWRkKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHQsZVszXSkpLmNvbW1pdCgpfXNldFNlbGVjdGlvbihlLHQpe2NvbnN0IHI9X2MoZSxaPT5NYXRoLm1heChaLDApKSxpPXJbMF0sbz1yWzFdLGE9clsyXSxsPXJbM107bGV0''@;'; put 'put ''IHU9aSxnPW8sRT1hLE89bDtpZih0KXtjb25zdHtyb3c6Wixjb2w6ZWV9PXQuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OnZlLGNvbDpNZX09dC5nZXRCb3R0b21FbmRDb3JuZXIoKSxIZT1aPz8wLFdlPWVlPz8wO3U9aTxIZT9hOmE+KHZlPz8wKXx8dC5mcm9tLnJvdz09PUhlP2k6YSxnPW88''@;'; put 'put ''V2U/bDpsPihNZT8/MCl8fHQuZnJvbS5jb2w9PT1XZT9vOmwsRT11PT09aT9hOmksTz1nPT09bz9sOm99dGhpcy5ob3Quc2VsZWN0Q2VsbCh1LGcsRSxPLCExLCExKX1zZWxlY3RBZGphY2VudCgpe2NvbnN0IGU9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighZSlyZXR1cm4h''@;'; put 'put ''MTtjb25zdCB0PWUuZ2V0VG9wU3RhcnRDb3JuZXIoKSxyPWUuZ2V0Qm90dG9tRW5kQ29ybmVyKCksaT1bdC5yb3c/PzAsdC5jb2w/PzAsci5yb3c/PzAsci5jb2w/PzBdLG89dGhpcy5nZXRJbmRleE9mTGFzdEFkamFjZW50RmlsbGVkSW5Sb3coaSk7cmV0dXJuLTEhPT1vJiZ2b2lkIDAhPT1v''@;'; put 'put ''JiYodGhpcy5hZGRTZWxlY3Rpb25Gcm9tU3RhcnRBcmVhVG9TcGVjaWZpY1Jvd0luZGV4KGksbyksITApfXJlc2V0U2VsZWN0aW9uT2ZEcmFnZ2VkQXJlYSgpe3RoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTAsdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKX1y''@;'; put 'put ''ZWRyYXdCb3JkZXJzKGUpe2NvbnN0IHQ9dGhpcy5kaXJlY3Rpb25zLHI9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighcnx8IWV8fG51bGw9PT1lLnJvd3x8bnVsbD09PWUuY29sKXJldHVybjtjb25zdCBpPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGUucm93LGUuY29s''@;'; put 'put ''KSxvPXIuZ2V0Qm90dG9tRW5kQ29ybmVyKCksYT1yLmdldFRvcFN0YXJ0Q29ybmVyKCksbD1yLmdldEJvdHRvbUVuZENvcm5lcigpLHU9KGkucm93Pz8wKTwoYS5yb3c/PzApfHwoaS5yb3c/PzApPihsLnJvdz8/MCksZz0oaS5jb2w/PzApPChhLmNvbD8/MCl8fChpLmNvbD8/MCk+KGwuY29s''@;'; put 'put ''Pz8wKTtyLmluY2x1ZGVzKGkpJiZKcCh0aGlzLHozLG51bGwpLCJ2ZXJ0aWNhbCI9PT1ONyh0aGlzLHozKSYmIXUmJmc/dC5pbmNsdWRlcygiaG9yaXpvbnRhbCIpJiZKcCh0aGlzLHozLCJob3Jpem9udGFsIik6Imhvcml6b250YWwiPT09TjcodGhpcyx6MykmJiFnJiZ1JiZ0LmluY2x1ZGVz''@;'; put 'put ''KCJ2ZXJ0aWNhbCIpJiZKcCh0aGlzLHozLCJ2ZXJ0aWNhbCIpO2xldCBPPW8ucm93LFo9by5jb2w7bnVsbD09PU43KHRoaXMsejMpJiYodSYmIWcmJnQuaW5jbHVkZXMoInZlcnRpY2FsIik/SnAodGhpcyx6MywidmVydGljYWwiKTpnJiYhdSYmdC5pbmNsdWRlcygiaG9yaXpvbnRhbCIpJiZK''@;'; put 'put ''cCh0aGlzLHozLCJob3Jpem9udGFsIikpLCJ2ZXJ0aWNhbCI9PT1ONyh0aGlzLHozKSYmdC5pbmNsdWRlcygidmVydGljYWwiKT8oTz1pLnJvdz8/MCxaPWEuY29sPz8wKToiaG9yaXpvbnRhbCI9PT1ONyh0aGlzLHozKSYmdC5pbmNsdWRlcygiaG9yaXpvbnRhbCIpJiYoTz1hLnJvdz8/MCxa''@;'; put 'put ''PWkuY29sPz8wKTtjb25zdCBlZT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhPPz8wLFo/PzApO3RoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmNsZWFyKCkuYWRkKHIuZnJvbSkuYWRkKHIudG8pLmFkZChlZSkuY29tbWl0KCksdGhpcy5ob3Qudmlldy5yZW5kZXIo''@;'; put 'put ''KX1nZXRJZk1vdXNlV2FzRHJhZ2dlZE91dHNpZGUoZSl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50OnR9PXRoaXMuaG90LnJvb3REb2N1bWVudCxyPVgwKHRoaXMuaG90LnRhYmxlKS50b3AtKHRoaXMuaG90LnJvb3RXaW5kb3cucGFnZVlPZmZzZXR8fHQuc2Nyb2xsVG9wKStIaCh0aGlzLmhvdC50''@;'; put 'put ''YWJsZSksaT1YMCh0aGlzLmhvdC50YWJsZSkubGVmdC0odGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWE9mZnNldHx8dC5zY3JvbGxMZWZ0KStaZCh0aGlzLmhvdC50YWJsZSk7cmV0dXJuIGUuY2xpZW50WT5yJiZlLmNsaWVudFg8PWl9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtkb2N1bWVudEVs''@;'; put 'put ''ZW1lbnQ6ZX09dGhpcy5ob3Qucm9vdERvY3VtZW50O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZSwibW91c2V1cCIsKCk9Pmp3KHRoaXMsRE9lLGRQdCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihlLCJtb3VzZW1vdmUiLHQ9Pmp3''@;'; put 'put ''KHRoaXMsVmhlLExPZSkuY2FsbCh0aGlzLHQpKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLFBUKHRoaXMsQU9lKSxQVCh0aGlzLGtPZSksUFQodGhpcyxST2UpLFBUKHRoaXMsSU9lKSxQVCh0aGlzLERPZSksUFQodGhpcyxWaGUpLFBP''@;'; put 'put ''KHRoaXMsejMse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFBPKHRoaXMsTFose3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFBPKHRoaXMsUGhlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxQTyh0aGlzLEhoZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUE8odGhpcyxC''@;'; put 'put ''aGUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHRoaXMuYWRkaW5nU3RhcnRlZD0hMSx0aGlzLm1vdXNlRG93bk9uQ2VsbENvcm5lcj0hMSx0aGlzLm1vdXNlRHJhZ091dHNpZGU9ITEsdGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM9MCx0aGlzLmRpcmVjdGlvbnM9W10sdGhpcy5hdXRvSW5z''@;'; put 'put ''ZXJ0Um93PSExLEpwKHRoaXMsejMsbnVsbCksSnAodGhpcyxMWix7Y2xpZW50WDowLGNsaWVudFk6MH0pLEpwKHRoaXMsUGhlLCgpPT57dGhpcy5zZWxlY3RBZGphY2VudCgpJiZ0aGlzLmZpbGxJbigpfSksSnAodGhpcyxIaGUsKCk9Pnt0aGlzLmhhbmRsZURyYWdnZWRDZWxscz0xLHRoaXMu''@;'; put 'put ''bW91c2VEb3duT25DZWxsQ29ybmVyPSEwLEpwKHRoaXMsejMsbnVsbCl9KSxKcCh0aGlzLEJoZSwoKT0+e3RoaXMubW91c2VEb3duT25DZWxsQ29ybmVyJiZqdyh0aGlzLFZoZSxMT2UpLmNhbGwodGhpcyxONyh0aGlzLExaKSl9KX19ZnVuY3Rpb24gc1B0KG4sZSx0LHIsaSxvLGEpe2lmKCJ1''@;'; put 'put ''cCIhPT10JiYibGVmdCIhPT10fHwxPT09bi5sZW5ndGgmJjA9PT1uWzBdLmxlbmd0aClyZXR1cm4gZTtjb25zdCBsPVtdO2lmKCJ1cCI9PT10KXtjb25zdCB1PWktcisxLGc9dSVuLmxlbmd0aDtmb3IobGV0IEU9MDtFPHU7RSsrKWwucHVzaChuWyhFKyhuLmxlbmd0aC1nKSklbi5sZW5ndGhd''@;'; put 'put ''KX1lbHNle2NvbnN0IHU9YS1vKzEsZz11JW5bMF0ubGVuZ3RoO2ZvcihsZXQgRT0wO0U8bi5sZW5ndGg7RSsrKXtsLnB1c2goW10pO2ZvcihsZXQgTz0wO088dTtPKyspbFtFXS5wdXNoKG5bRV1bKE8rKG5bRV0ubGVuZ3RoLWcpKSVuW0VdLmxlbmd0aF0pfX1yZXR1cm4gbH1mdW5jdGlvbiBs''@;'; put 'put ''UHQobixlLHQscixpKXtpZighZS5zb21lKGw9Pmwuc29tZSh1PT5DYSh1KXx8QXJyYXkuaXNBcnJheSh1KSkpKXJldHVybiBuO2NvbnN0IGE9ancodGhpcyxST2UsY1B0KS5jYWxsKHRoaXMsbixlLHQscixpKTtyZXR1cm4gYS5sZW5ndGg/YTpufWZ1bmN0aW9uIGNQdChuLGUsdCxyLGkpe2Nv''@;'; put 'put ''bnN0IG89W107Zm9yKGxldCBhPU1hdGgubWluKHQucm93LHIucm93KTthPD1NYXRoLm1heCh0LnJvdyxyLnJvdyk7YSs9MSl7by5wdXNoKFtdKTtmb3IobGV0IGw9TWF0aC5taW4odC5jb2wsci5jb2wpO2w8PU1hdGgubWF4KHQuY29sLHIuY29sKTtsKz0xKXtjb25zdCB1PXRoaXMuaG90Lmdl''@;'; put 'put ''dFNvdXJjZURhdGFBdENlbGwoYSxsKSxnPXRoaXMuaG90LmdldENlbGxNZXRhKGEsbCksRT1nLnNvdXJjZSxPPUFycmF5LmlzQXJyYXkoRSk/RVswXTp2b2lkIDAsWj1nLl9jb21wbGV4RGF0YUZvcm1hdHx8Q2EoTyl8fEFycmF5LmlzQXJyYXkoTyksZWU9YS1NYXRoLm1pbih0LnJvdyxyLnJv''@;'; put 'put ''dyksdmU9bC1NYXRoLm1pbih0LmNvbCxyLmNvbCksTWU9ZWUlZS5sZW5ndGgsV2U9dmUlZVswXS5sZW5ndGg7b1tlZV1bdmVdPUNhKHUpfHxBcnJheS5pc0FycmF5KHUpfHxaP2VbTWVdW1dlXTpuW01lXVtXZV19fXJldHVybiBvfWZ1bmN0aW9uIHVQdChuKXt0aGlzLm1vdXNlRG93bk9uQ2Vs''@;'; put 'put ''bENvcm5lciYmIXRoaXMuaG90LnZpZXcuaXNNb3VzZURvd24oKSYmdGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHMmJih0aGlzLmhhbmRsZURyYWdnZWRDZWxscys9MSx0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5pc0VtcHR5KCkmJnRoaXMucmVkcmF3Qm9yZGVycyhuKSx0''@;'; put 'put ''aGlzLmFkZE5ld1Jvd0lmTmVlZGVkKCkpfWZ1bmN0aW9uIGRQdCgpe3RoaXMuaGFuZGxlRHJhZ2dlZENlbGxzJiYodGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM+MSYmdGhpcy5maWxsSW4oKSx0aGlzLmhhbmRsZURyYWdnZWRDZWxscz0wLHRoaXMubW91c2VEb3duT25DZWxsQ29ybmVyPSExLEpw''@;'; put 'put ''KHRoaXMsejMsbnVsbCkpfWZ1bmN0aW9uIExPZShuKXtpZih0aGlzLm1vdXNlRG93bk9uQ2VsbENvcm5lcil7Y29uc3R7Y2xpZW50WDp0LGNsaWVudFk6cn09bixpPUVPZSh0aGlzLmhvdCx0LHIpO0pwKHRoaXMsTFose2NsaWVudFg6dCxjbGllbnRZOnJ9KSx0aGlzLnJlZHJhd0JvcmRlcnMo''@;'; put 'put ''aSl9Y29uc3QgZT10aGlzLmdldElmTW91c2VXYXNEcmFnZ2VkT3V0c2lkZShuKTshMT09PXRoaXMuYWRkaW5nU3RhcnRlZCYmdGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM+MCYmZT8odGhpcy5tb3VzZURyYWdPdXRzaWRlPSEwLHRoaXMuYWRkaW5nU3RhcnRlZD0hMCk6dGhpcy5tb3VzZURyYWdP''@;'; put 'put ''dXRzaWRlPSExLHRoaXMubW91c2VEcmFnT3V0c2lkZSYmdGhpcy5hdXRvSW5zZXJ0Um93JiZ0aGlzLmFkZFJvdygpfWZ1bmN0aW9uIE9PZShuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdp''@;'; put 'put ''Y2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gTk9lKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIFczKG4sZSl7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uIGhQdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sTk9lKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIGc2KG4sZSx0KXtPT2UobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIFkzKG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gZlB0KG4sZSx0KXtpZihlLnNldCll''@;'; put 'put ''LnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixOT2UobixlLCJzZXQiKSx0KSx0fWZ1bmN0aW9uIGpoZShuLGUsdCl7aWYoIWUuaGFzKG4p''@;'; put 'put ''KXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiBGT2UobixlKXtPT2UobixlKSxlLmFkZChuKX1jb25zdCBVaGU9ImF1dG9Sb3dTaXplIixQT2U9Imh0Rmlyc3REYXRhc2V0Q29sdW1u''@;'; put 'put ''Tm90UmVuZGVyZWQiLEhPZT0iaHRBdXRvUm93U2l6ZSI7dmFyIEhUPW5ldyBXZWFrTWFwLFZUPW5ldyBXZWFrTWFwLE9aPW5ldyBXZWFrTWFwLFZPZT1uZXcgV2Vha1NldCx6aGU9bmV3IFdlYWtTZXQsV2hlPW5ldyBXZWFrTWFwLFloZT1uZXcgV2Vha01hcCxOWj1uZXcgV2Vha01hcCxaaGU9''@;'; put 'put ''bmV3IFdlYWtNYXAsR2hlPW5ldyBXZWFrTWFwLCRoZT1uZXcgV2Vha01hcCxxaGU9bmV3IFdlYWtNYXA7Y2xhc3MgSE8gZXh0ZW5kcyBhbHtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gVWhlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDQwfXN0YXRpYyBnZXQg''@;'; put 'put ''U0VUVElOR19LRVlTKCl7cmV0dXJuITB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue3VzZUhlYWRlcnM6ITAsc2FtcGxpbmdSYXRpbzpudWxsLGFsbG93U2FtcGxlRHVwbGljYXRlczohMX19c3RhdGljIGdldCBDQUxDVUxBVElPTl9TVEVQKCl7cmV0dXJuIDUwfXN0YXRp''@;'; put 'put ''YyBnZXQgU1lOQ19DQUxDVUxBVElPTl9MSU1JVCgpe3JldHVybiA1MDB9aXNFbmFibGVkKCl7Y29uc3QgZT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW1VoZV07cmV0dXJuITA9PT1lfHxDYShlKX1lbmFibGVQbHVnaW4oKXtpZih0aGlzLmVuYWJsZWQpcmV0dXJuO3RoaXMuc2FtcGxlc0dlbmVy''@;'; put 'put ''YXRvci5zZXRBbGxvd0R1cGxpY2F0ZXModGhpcy5nZXRTZXR0aW5nKCJhbGxvd1NhbXBsZUR1cGxpY2F0ZXMiKSk7Y29uc3QgZT10aGlzLmdldFNldHRpbmcoInNhbXBsaW5nUmF0aW8iKTtlJiYhaXNOYU4oZSkmJnRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRTYW1wbGVDb3VudChlKSx0aGlz''@;'; put 'put ''LmFkZEhvb2soImFmdGVyTG9hZERhdGEiLFczKHRoaXMsWmhlKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDaGFuZ2VSZW5kZXIiLFczKHRoaXMsR2hlKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUiLCgpPT50aGlzLnJlY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpKSx0aGlzLmFk''@;'; put 'put ''ZEhvb2soImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLFczKHRoaXMscWhlKSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3UmVuZGVyIixXMyh0aGlzLFdoZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVuZGVyIixXMyh0aGlzLFloZSkpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVpZ2h0''@;'; put 'put ''IiwodCxyKT0+dGhpcy5nZXRSb3dIZWlnaHQocix0KSksdGhpcy5hZGRIb29rKCJpbml0IixXMyh0aGlzLCRoZSkpLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0IiwoKT0+dGhpcy5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKSksWTModGhpcyxWVCx0aGlzLmhvdC5yb3dJ''@;'; put 'put ''bmRleE1hcHBlci5vYnNlcnZlTWFwQ2hhbmdlKHRoaXMucm93SGVpZ2h0c01hcCwoKT0+e3RoaXMuaG90LnZpZXc/LmludmFsaWRhdGVSb3dIZWlnaHRDYWNoZSgpfSkpLFlyKHRoaXMuaG90LnJvb3RFbGVtZW50LEhPZSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe1cz''@;'; put 'put ''KHRoaXMsVlQpJiYoVzModGhpcyxWVCkuY2FsbCh0aGlzKSxZMyh0aGlzLFZULG51bGwpKSx0aGlzLmhlYWRlckhlaWdodD1udWxsLGtvKHRoaXMuaG90LnJvb3RFbGVtZW50LEhPZSksc3VwZXIuZGlzYWJsZVBsdWdpbigpLGpoZSh0aGlzLHpoZSxCT2UpLmNhbGwodGhpcywhMSksdGhpcy5h''@;'; put 'put ''ZGRIb29rKCJiZWZvcmVSb3dSZXNpemUiLFczKHRoaXMsTlopKX1jYWxjdWxhdGVWaXNpYmxlUm93c0hlaWdodCgpe2lmKCF0aGlzLmhvdC5jb3VudENvbHMoKSlyZXR1cm47Y29uc3QgZT10aGlzLmdldEZpcnN0VmlzaWJsZVJvdygpLHQ9dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpOy0xIT09''@;'; put 'put ''ZSYmLTEhPT10JiZ0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206ZSx0bzp0fSx2b2lkIDAsdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyKX1jYWxjdWxhdGVSb3dzSGVpZ2h0KGU9e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfSx0PXtmcm9tOjAsdG86dGhpcy5ob3QuY291''@;'; put 'put ''bnRDb2xzKCktMX0scj0hMSl7Y29uc3QgaT0ibnVtYmVyIj09dHlwZW9mIGU/e2Zyb206ZSx0bzplfTplLG89Im51bWJlciI9PXR5cGVvZiB0P3tmcm9tOnQsdG86dH06dDtpZihudWxsIT09dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKDApKXtjb25zdCBhPXRoaXMuc2FtcGxlc0dlbmVyYXRvci5n''@;'; put 'put ''ZW5lcmF0ZVJvd1NhbXBsZXMoLTEsbyk7dGhpcy5naG9zdFRhYmxlLmFkZENvbHVtbkhlYWRlcnNSb3coYS5nZXQoLTEpKX1WYShpLmZyb20saS50byxhPT57bGV0IGw9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhhKTtudWxsPT09bCYmKGw9YSksKHJ8fG51bGw9PT10aGlzLnJvd0hlaWdodHNN''@;'; put 'put ''YXAuZ2V0VmFsdWVBdEluZGV4KGwpKSYmdGhpcy5zYW1wbGVzR2VuZXJhdG9yLmdlbmVyYXRlUm93U2FtcGxlcyhhLG8pLmZvckVhY2goKGcsRSk9PnRoaXMuZ2hvc3RUYWJsZS5hZGRSb3coRSxnKSl9KSx0aGlzLmdob3N0VGFibGUucm93cy5sZW5ndGgmJih0aGlzLmhvdC5iYXRjaEV4ZWN1''@;'; put 'put ''dGlvbigoKT0+e3RoaXMuZ2hvc3RUYWJsZS5nZXRIZWlnaHRzKChhLGwpPT57YTwwP3RoaXMuaGVhZGVySGVpZ2h0PWw6dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGEpLGwpfSl9LCEwKSx0aGlzLm1lYXN1cmVkUm93cz1pLnRvKzEs''@;'; put 'put ''dGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoZT17ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Q29scygpLTF9LHQ9ITEpe2xldCByPTA7Y29uc3QgaT10aGlzLmhvdC5jb3VudFJvd3MoKS0xO2xldCBvPTA7dGhpcy5pblByb2dyZXNzPSEwO2NvbnN0IGE9''@;'; put 'put ''KCk9PntpZighdGhpcy5ob3QpcmV0dXJuIGRMKG8pLHZvaWQodGhpcy5pblByb2dyZXNzPSExKTt0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206cix0bzpNYXRoLm1pbihyK0hPLkNBTENVTEFUSU9OX1NURVAsaSl9LGUsdCkscj1yK0hPLkNBTENVTEFUSU9OX1NURVArMSxyPGk/bz11''@;'; put 'put ''TChhKTooZEwobyksdGhpcy5pblByb2dyZXNzPSExLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCkpfSxsPXRoaXMuZ2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKTtsPj0wJiYodGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KHtmcm9tOjAsdG86bH0sZSx0KSxyPWwrMSkscjxpP2Eo''@;'; put 'put ''KToodGhpcy5pblByb2dyZXNzPSExLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCkpfXJlY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpe3RoaXMuaG90LnZpZXcuaXNWaXNpYmxlKCkmJnRoaXMuY2FsY3VsYXRlQWxsUm93c0hlaWdodCh7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50''@;'; put 'put ''Q29scygpLTF9LCEwKX1nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpe2NvbnN0IGU9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtVaGVdO2xldCB0PUhPLlNZTkNfQ0FMQ1VMQVRJT05fTElNSVQ7Y29uc3Qgcj10aGlzLmhvdC5jb3VudFJvd3MoKS0xO2lmKENhKGUpKWlmKHQ9dGhpcy5nZXRTZXR0''@;'; put 'put ''aW5nKCJzeW5jTGltaXQiKSx3c2UodCkpdD1ubGUocix0KTtlbHNle2NvbnN0IGk9TnVtYmVyKHQpO3Q9TnVtYmVyLmlzRmluaXRlKGkpP01hdGgudHJ1bmMoaSk6MH1yZXR1cm4gTWF0aC5taW4odCxyKX1nZXRSb3dIZWlnaHQoZSx0PXRoaXMuaG90LnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVs''@;'; put 'put ''dFJvd0hlaWdodChlKT8/MCl7aWYoZTwwKXJldHVybiB0aGlzLmhlYWRlckhlaWdodD8/dDtjb25zdCByPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coZSk7aWYodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4ocikpcmV0dXJuIHQ7Y29uc3QgaT10aGlzLnJvd0hlaWdodHNNYXAuZ2V0''@;'; put 'put ''VmFsdWVBdEluZGV4KHIpO2xldCBvPXQ7cmV0dXJuIG51bGwhPWkmJmk+dCYmKG89aSxlPT09dGhpcy5ob3Qudmlldy5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpJiYobys9MSkpLG99Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMuaGVhZGVySGVpZ2h0fWdldEZpcnN0''@;'; put 'put ''VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpPz8tMX1nZXRMYXN0VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlUm93KCk/Py0xfWNsZWFyQ2FjaGUoZSl7dGhpcy5oZWFkZXJIZWlnaHQ9bnVs''@;'; put 'put ''bCxBcnJheS5pc0FycmF5KGUpP3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57ZS5mb3JFYWNoKHQ9Pnt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KHQsbnVsbCl9KX0sITApOnRoaXMucm93SGVpZ2h0c01hcC5jbGVhcigpfWNsZWFyQ2FjaGVCeVJhbmdlKGUpe2NvbnN0''@;'; put 'put ''e2Zyb206dCx0bzpyfT0ibnVtYmVyIj09dHlwZW9mIGU/e2Zyb206ZSx0bzplfTplO3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57VmEoTWF0aC5taW4odCxyKSxNYXRoLm1heCh0LHIpLGk9Pnt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGksbnVsbCl9KX0sITApfWlz''@;'; put 'put ''TmVlZFJlY2FsY3VsYXRlKCl7cmV0dXJuISF0aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVzKCkuc2xpY2UoMCx0aGlzLm1lYXN1cmVkUm93cykuZmlsdGVyKGU9Pm51bGw9PT1lKS5sZW5ndGh9ZGVzdHJveSgpe3RoaXMuZ2hvc3RUYWJsZS5jbGVhbigpLHN1cGVyLmRlc3Ryb3koKX1jb25z''@;'; put 'put ''dHJ1Y3RvcihlKXtzdXBlcihlKSxGT2UodGhpcyxWT2UpLEZPZSh0aGlzLHpoZSksZzYodGhpcyxIVCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZzYodGhpcyxWVCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZzYodGhpcyxPWix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSks''@;'; put 'put ''ZzYodGhpcyxXaGUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGc2KHRoaXMsWWhlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxnNih0aGlzLE5aLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxnNih0aGlzLFpoZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZzYodGhp''@;'; put 'put ''cyxHaGUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGc2KHRoaXMsJGhlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxnNih0aGlzLHFoZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdGhpcy5oZWFkZXJIZWlnaHQ9bnVsbCx0aGlzLmdob3N0VGFibGU9bmV3IEVoZSh0aGlz''@;'; put 'put ''LmhvdCksdGhpcy5zYW1wbGVzR2VuZXJhdG9yPW5ldyB2T2UoKHQscik9Pntjb25zdCBpPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4ocik7aWYodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4oaSkpcmV0dXJuITE7bGV0IG8sYTtyZXR1cm4hKHQ+PTAmJnI+PTAmJihvPXRo''@;'; put 'put ''aXMuaG90LmdldENlbGxNZXRhKHQsciksby5oaWRkZW4pKSYmKHQ+PTA/KGE9dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbCh0LHIpLCJmdW5jdGlvbiI9PXR5cGVvZiBvPy52YWx1ZUZvcm1hdHRlciYmKGE9by52YWx1ZUZvcm1hdHRlcihhLG8pKSk6LTE9PT10JiYoYT10aGlzLmhvdC5nZXRDb2xI''@;'; put 'put ''ZWFkZXIocikpLHt2YWx1ZTphfSl9KSx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5tZWFzdXJlZFJvd3M9MCx0aGlzLnJvd0hlaWdodHNNYXA9bmV3IG5fLFkzKHRoaXMsSFQsW10pLFkzKHRoaXMsVlQsbnVsbCksWTModGhpcyxPWiwhMSksWTModGhpcyxXaGUsKCk9PntqaGUodGhpcyx6aGUs''@;'; put 'put ''Qk9lKS5jYWxsKHRoaXMpfSksWTModGhpcyxZaGUsKCk9Pnt0aGlzLmNhbGN1bGF0ZVZpc2libGVSb3dzSGVpZ2h0KCksdGhpcy5pblByb2dyZXNzfHwoamhlKHRoaXMsVk9lLG1QdCkuY2FsbCh0aGlzLFczKHRoaXMsSFQpKSxZMyh0aGlzLEhULFtdKSl9KSxZMyh0aGlzLE5aLCh0LHIsaSk9''@;'; put 'put ''PntsZXQgbz10O3JldHVybiBpJiYodGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KHIsdm9pZCAwLCEwKSxvPXRoaXMuZ2V0Um93SGVpZ2h0KHIpKSxvfSksWTModGhpcyxaaGUsKHQscik9PntyfHx0aGlzLnJlY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpfSksWTModGhpcyxHaGUsdD0+e2NvbnN0''@;'; put 'put ''IHI9dC5yZWR1Y2UoKGksW29dKT0+e2NvbnN0IGE9TnVtYmVyKG8pO3JldHVybi0xPT09aS5pbmRleE9mKGEpJiZpLnB1c2goYSksaX0sW10pO1czKHRoaXMsSFQpLnB1c2goLi4ucil9KSxZMyh0aGlzLCRoZSwoKT0+e3RoaXMucmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCksWTModGhpcyxP''@;'; put 'put ''WiwhMCl9KSxZMyh0aGlzLHFoZSx0PT57aWYoIVczKHRoaXMsT1opKXJldHVybjtjb25zdCBpPXRoaXMuaG90LmdldFBsdWdpbigiZm9ybXVsYXMiKT8uc2hlZXRJZCxvPXQucmVkdWNlKChhLGwpPT57Y29uc3QgdT1sO2lmKG51bGwhPWkmJnUuYWRkcmVzcz8uc2hlZXQhPT1pKXJldHVybiBh''@;'; put 'put ''O2NvbnN0IGc9TnVtYmVyKHUuYWRkcmVzcz8ucm93KTtpZihOdW1iZXIuaXNJbnRlZ2VyKGcpKXtjb25zdCBFPXRoaXMuaG90LnRvVmlzdWFsUm93KGcpO251bGwhPT1FJiYtMT09PWEuaW5kZXhPZihFKSYmYS5wdXNoKEUpfXJldHVybiBhfSxbXSk7VzModGhpcyxIVCkucHVzaCguLi5vKX0p''@;'; put 'put ''LHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJhdXRvUm93U2l6ZSIsdGhpcy5yb3dIZWlnaHRzTWFwKSx0aGlzLmFkZEhvb2soImJlZm9yZVJvd1Jlc2l6ZSIsVzModGhpcyxOWikpfX1mdW5jdGlvbiBtUHQobil7Y29uc3QgZT17ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50''@;'; put 'put ''Q29scygpLTF9O24uZm9yRWFjaCh0PT57dGhpcy5zYW1wbGVzR2VuZXJhdG9yLmdlbmVyYXRlUm93U2FtcGxlcyh0LGUpLmZvckVhY2goKGksbyk9PnRoaXMuZ2hvc3RUYWJsZS5hZGRSb3cobyxpKSl9KSx0aGlzLmdob3N0VGFibGUucm93cy5sZW5ndGgmJih0aGlzLmhvdC5iYXRjaEV4ZWN1''@;'; put 'put ''dGlvbigoKT0+e3RoaXMuZ2hvc3RUYWJsZS5nZXRIZWlnaHRzKCh0LHIpPT57Y29uc3QgaT10aGlzLmhvdC50b1BoeXNpY2FsUm93KHQpO3RoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgoaSxyKX0pfSwhMCksdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWZ1bmN0aW9uIEJPZShu''@;'; put 'put ''KXtjb25zdCBlPXRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCksdD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChlKTshMT09PW58fHQ9PT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRQaHlzaWNhbEZyb21S''@;'; put 'put ''ZW5kZXJhYmxlSW5kZXgoMCk/a28odGhpcy5ob3Qucm9vdEVsZW1lbnQsUE9lKTpZcih0aGlzLmhvdC5yb290RWxlbWVudCxQT2UpfWZ1bmN0aW9uIGpPZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9u''@;'; put 'put ''IG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1jb25zdCBVT2U9ImJpbmRSb3dzV2l0aEhlYWRlcnMiLHpPZT1uZXcgTWFwKFtbImxvb3NlIixjbGFzcyB2UHQgZXh0ZW5kcyBFd3tpbnNlcnQoZSx0KXtjb25zdCByPVdsZSh0aGlzLmluZGV4ZWRWYWx1ZXMsdCk7dGhpcy5pbmRleGVk''@;'; put 'put ''VmFsdWVzPVNZKHIsMCx0LHRoaXMuaW5pdFZhbHVlT3JGbiksc3VwZXIuaW5zZXJ0KGUsdCl9cmVtb3ZlKGUpe2NvbnN0IHQ9RVkodGhpcy5pbmRleGVkVmFsdWVzLGUpO3RoaXMuaW5kZXhlZFZhbHVlcz16bGUodCxlKSxzdXBlci5yZW1vdmUoZSl9Y29uc3RydWN0b3IoKXtzdXBlcihlPT5l''@;'; put 'put ''KX19XSxbInN0cmljdCIsY2xhc3MgeVB0IGV4dGVuZHMgRXd7aW5zZXJ0KGUsdCl7dGhpcy5pbmRleGVkVmFsdWVzPVNZKHRoaXMuaW5kZXhlZFZhbHVlcywwLHQsKHIsaSk9PnRoaXMuZ2V0TmV4dFZhbHVlKGkpKSxzdXBlci5pbnNlcnQoZSx0KX1yZW1vdmUoZSl7dGhpcy5pbmRleGVkVmFs''@;'; put 'put ''dWVzPUVZKHRoaXMuaW5kZXhlZFZhbHVlcyxlKSxzdXBlci5yZW1vdmUoZSl9Z2V0TmV4dFZhbHVlKGUpe3JldHVybiBNYXRoLm1heCguLi50aGlzLmdldFZhbHVlcygpKSsxK2V9Y29uc3RydWN0b3IoKXtzdXBlcihlPT5lKX19XV0pO3ZhciBLaGU9bmV3IFdlYWtNYXA7Y2xhc3Mga1B0IGV4''@;'; put 'put ''dGVuZHMgYWx7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFVPZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1VPZV19ZW5hYmxlUGx1Z2luKCl7aWYodGhpcy5lbmFibGVkKXJl''@;'; put 'put ''dHVybjtjb25zdCB0PXpPZS5nZXQodGhpcy5nZXRTZXR0aW5nKCkpPz96T2UuZ2V0KCJsb29zZSIpO3QmJih0aGlzLmhlYWRlckluZGV4ZXM9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoImJpbmRSb3dzV2l0aEhlYWRlcnMiLG5ldyB0KSx0aGlzLmFkZEhvb2soIm1vZGlm''@;'; put 'put ''eVJvd0hlYWRlciIsZnVuY3Rpb24gRVB0KG4sZSl7cmV0dXJuIGZ1bmN0aW9uIENQdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sak9lKG4sZSwiZ2V0IikpfSh0aGlzLEtoZSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5o''@;'; put 'put ''b3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCgiYmluZFJvd3NXaXRoSGVhZGVycyIpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLGZ1bmN0aW9uIE1QdChuLGUsdCl7KGZ1bmN0aW9uIHdQ''@;'; put 'put ''dChuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLGUpLGUuc2V0KG4sdCl9KHRoaXMsS2hlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0aGlz''@;'; put 'put ''LmhlYWRlckluZGV4ZXM9bnVsbCxmdW5jdGlvbiBUUHQobixlLHQpe3JldHVybiBmdW5jdGlvbiBTUHQobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZh''@;'; put 'put ''dGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLGpPZShuLGUsInNldCIpLHQpLHR9KHRoaXMsS2hlLHQ9PnRoaXMuaGVhZGVySW5kZXhlcy5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyh0KSkpfX1mdW5jdGlvbiBXT2UobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFlPZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5v''@;'; put 'put ''bi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBtNihuLGUpe3JldHVybiBmdW5jdGlvbiBSUHQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLFlPZShuLGUsImdldCIpKX1mdW5jdGlvbiBVdyhuLGUsdCl7V09lKG4sZSksZS5zZXQobix0KX1m''@;'; put 'put ''dW5jdGlvbiBlZyhuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIElQdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19''@;'; put 'put ''KG4sWU9lKG4sZSwic2V0IiksdCksdH1mdW5jdGlvbiBWTyhuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiBYaGUobixlKXtXT2UobixlKSxlLmFk''@;'; put 'put ''ZChuKX1jb25zdCBGWj0iY29sbGFwc2libGVDb2x1bW5zIixMUHQ9WyJuZXN0ZWRIZWFkZXJzIl0sQlQ9ImNvbGxhcHNpYmxlSW5kaWNhdG9yIixaT2U9ImNvbGxhcHNpYmxlQ29sdW1ucy52aXNpYmxlV2hlbiIsR09lPUZaLCRPZT1uZXcgTWFwKFtbImNvbGxhcHNlIix7aGlkZUNvbHVtbjoh''@;'; put 'put ''MCxiZWZvcmVIb29rOiJiZWZvcmVDb2x1bW5Db2xsYXBzZSIsYWZ0ZXJIb29rOiJhZnRlckNvbHVtbkNvbGxhcHNlIn1dLFsiZXhwYW5kIix7aGlkZUNvbHVtbjohMSxiZWZvcmVIb29rOiJiZWZvcmVDb2x1bW5FeHBhbmQiLGFmdGVySG9vazoiYWZ0ZXJDb2x1bW5FeHBhbmQifV1dKTt2YXIg''@;'; put 'put ''enc9bmV3IFdlYWtNYXAsV3c9bmV3IFdlYWtNYXAscU9lPW5ldyBXZWFrU2V0LEtPZT1uZXcgV2Vha1NldCxQWj1uZXcgV2Vha1NldCxIWj1uZXcgV2Vha01hcCxRaGU9bmV3IFdlYWtNYXAsSmhlPW5ldyBXZWFrTWFwLGUxZT1uZXcgV2Vha01hcCx0MWU9bmV3IFdlYWtNYXA7Y2xhc3MgT1B0''@;'; put 'put ''IGV4dGVuZHMgYWx7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEZafXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI5MH1zdGF0aWMgZ2V0IFBMVUdJTl9ERVBTKCl7cmV0dXJuWyJwbHVnaW46TmVzdGVkSGVhZGVycyJdfXN0YXRpYyBnZXQgU0VUVElOR19LRVlT''@;'; put 'put ''KCl7cmV0dXJuW0ZaLC4uLkxQdF19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0ZaXX1lbmFibGVQbHVnaW4oKXtpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0e25lc3RlZEhlYWRlcnM6ZX09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtlfHxIYSgiWW91IG5l''@;'; put 'put ''ZWQgdG8gY29uZmlndXJlIHRoZSBOZXN0ZWQgSGVhZGVycyBwbHVnaW4gaW4gb3JkZXIgdG8gdXNlIGNvbGxhcHNpYmxlIGhlYWRlcnMuIiksdGhpcy5wbHVnaW5OYW1lJiZlZyh0aGlzLHp3LHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUFuZFJlZ2lzdGVySW5kZXhNYXAodGhp''@;'; put 'put ''cy5wbHVnaW5OYW1lLCJoaWRpbmciKSksZWcodGhpcyxXdyx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKFpPZSwiaGlkaW5nIikpLHRoaXMubmVzdGVkSGVhZGVyc1BsdWdpbj10aGlzLmhvdC5nZXRQbHVnaW4oIm5lc3RlZEhlYWRlcnMiKSx0''@;'; put 'put ''aGlzLmhlYWRlclN0YXRlTWFuYWdlcj10aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW4uZ2V0U3RhdGVNYW5hZ2VyKCksdGhpcy5hZGRIb29rKCJpbml0IixtNih0aGlzLGUxZSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsbTYodGhpcyx0MWUpKSx0aGlzLmFkZEhvb2soImFmdGVyR2V0''@;'; put 'put ''Q29sSGVhZGVyIixtNih0aGlzLFFoZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixtNih0aGlzLEpoZSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVDb2wiLG02KHRoaXMsSFopKSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlQ29sIixtNih0aGlzLEhaKSksdGhp''@;'; put 'put ''cy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpLHRoaXMudXBkYXRlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7aWYodGhpcy5ob3Qudmlldyl7aWYoIXRoaXMubmVzdGVkSGVhZGVyc1BsdWdpbj8uZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycyl7Y29uc3R7Y29sbGFw''@;'; put 'put ''c2libGVDb2x1bW5zOmV9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7ImJvb2xlYW4iPT10eXBlb2YgZT90aGlzLmhlYWRlclN0YXRlTWFuYWdlcj8ubWFwU3RhdGUodD0+KHtjb2xsYXBzaWJsZTpOdW1iZXIodC5vcmlnQ29sc3Bhbik+MX0pKTpBcnJheS5pc0FycmF5KGUpJiYodGhpcy5oZWFk''@;'; put 'put ''ZXJTdGF0ZU1hbmFnZXI/Lm1hcFN0YXRlKCgpPT4oe2NvbGxhcHNpYmxlOiExfSkpLHRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyPy5tZXJnZVN0YXRlV2l0aChlKSl9Vk8odGhpcyxQWixuMWUpLmNhbGwodGhpcyksc3VwZXIudXBkYXRlUGx1Z2luKCl9fWRpc2FibGVQbHVnaW4oKXt0aGlzLnBs''@;'; put 'put ''dWdpbk5hbWUmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKFpPZSksZWcodGhpcyx6dyxudWxsKSxlZyh0aGlzLFd3LG51bGwpLHRoaXMubmVzdGVkSGVhZGVy''@;'; put 'put ''c1BsdWdpbj1udWxsLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuY2xlYXJCdXR0b25zKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpPy5hZGRTaG9ydGN1dCh7''@;'; put 'put ''a2V5czpbWyJFbnRlciJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGU9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFlKXJldHVybjtjb25zdHtyb3c6dCxjb2w6cn09ZS5oaWdobGlnaHQ7aWYobnVsbD09PXR8fG51bGw9PT1yKXJldHVybjtjb25zdCBpPXRoaXMuaGVhZGVy''@;'; put 'put ''U3RhdGVNYW5hZ2VyPy5nZXRIZWFkZXJUcmVlTm9kZURhdGEodCxyKT8/e2NvbGxhcHNpYmxlOiExLGlzQ29sbGFwc2VkOiExLGNvbHVtbkluZGV4OjAsaGVhZGVyTGV2ZWw6MH0se2NvbGxhcHNpYmxlOm8saXNDb2xsYXBzZWQ6YSxjb2x1bW5JbmRleDpsfT1pO3JldHVybiBvPyhhP3RoaXMu''@;'; put 'put ''ZXhwYW5kU2VjdGlvbih7cm93OnQsY29sOmx9KTp0aGlzLmNvbGxhcHNlU2VjdGlvbih7cm93OnQsY29sOmx9KSwhMSk6dm9pZCAwfSxydW5Pbmx5SWY6KCk9PiEoIXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKT8uaXNTaW5nbGUoKXx8IXRoaXMuaG90LmdldFNlbGVjdGVkUmFu''@;'; put 'put ''Z2VBY3RpdmUoKT8uaGlnaGxpZ2h0LmlzSGVhZGVyKCkpLGdyb3VwOkdPZSxyZWxhdGl2ZVRvR3JvdXA6UjcscG9zaXRpb246ImJlZm9yZSJ9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpPy5yZW1vdmVTaG9y''@;'; put 'put ''dGN1dHNCeUdyb3VwKEdPZSl9Y2xlYXJCdXR0b25zKCl7aWYoIXRoaXMuaG90LnZpZXcpcmV0dXJuO2NvbnN0IGU9dGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aCx0PXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuVEhFQUQscj10aGlzLmhvdC52''@;'; put 'put ''aWV3Ll93dC53dE92ZXJsYXlzLnRvcE92ZXJsYXk/LmNsb25lPy53dFRhYmxlLlRIRUFEPz9udWxsLGk9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk/dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5l''@;'; put 'put ''ck92ZXJsYXkuY2xvbmU/Lnd0VGFibGUuVEhFQUQ/P251bGw6bnVsbCxvPWZ1bmN0aW9uKGEpe2EmJmEucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpfTshdHx8IXJ8fFZhKDAsZS0xLGE9Pntjb25zdCBsPXQuY2hpbGROb2Rlc1thXSx1PXIuY2hpbGROb2Rlc1thXSxn''@;'; put 'put ''PWk/aS5jaGlsZE5vZGVzW2FdOm51bGw7VmEoMCxsLmNoaWxkTm9kZXMubGVuZ3RoLTEsRT0+e2xldCBPPWwuY2hpbGROb2Rlc1tFXS5xdWVyeVNlbGVjdG9yKGAuJHtCVH1gKTtvKE8pLHUmJnUuY2hpbGROb2Rlc1tFXSYmKE89dS5jaGlsZE5vZGVzW0VdLnF1ZXJ5U2VsZWN0b3IoYC4ke0JU''@;'; put 'put ''fWApLG8oTykpLGkmJmcmJmcuY2hpbGROb2Rlc1tFXSYmKE89Zy5jaGlsZE5vZGVzW0VdLnF1ZXJ5U2VsZWN0b3IoYC4ke0JUfWApLG8oTykpfSl9KX1leHBhbmRTZWN0aW9uKGUpe3RoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtlXSwiZXhwYW5kIil9Y29sbGFwc2VTZWN0aW9uKGUp''@;'; put 'put ''e3RoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtlXSwiY29sbGFwc2UiKX10b2dnbGVBbGxDb2xsYXBzaWJsZVNlY3Rpb25zKGUpe2NvbnN0IHQ9dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXI/Lm1hcE5vZGVzKHI9Pntjb25zdHtjb2xsYXBzaWJsZTppLG9yaWdDb2xzcGFuOm8saGVhZGVy''@;'; put 'put ''TGV2ZWw6YSxjb2x1bW5JbmRleDpsLGlzQ29sbGFwc2VkOnV9PXI7aWYoITA9PT1pJiZOdW1iZXIobyk+MSYmKHUmJiJleHBhbmQiPT09ZXx8IXUmJiJjb2xsYXBzZSI9PT1lKSlyZXR1cm57cm93OnRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyPy5sZXZlbFRvUm93Q29vcmRzKE51bWJlcihhKSk/''@;'; put 'put ''PzAsY29sOmx9fSk7dGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24odCxlKX1jb2xsYXBzZUFsbCgpe3RoaXMudG9nZ2xlQWxsQ29sbGFwc2libGVTZWN0aW9ucygiY29sbGFwc2UiKX1leHBhbmRBbGwoKXt0aGlzLnRvZ2dsZUFsbENvbGxhcHNpYmxlU2VjdGlvbnMoImV4cGFuZCIpfXRv''@;'; put 'put ''Z2dsZUNvbGxhcHNpYmxlU2VjdGlvbihlLHQpe2lmKCh2b2lkIDA9PT10fHwhJE9lLmhhcyh0KSkmJkpyKGBVbnN1cHBvcnRlZCBhY3Rpb24gaXMgcGFzc2VkICgke3R9KS5gKSwhQXJyYXkuaXNBcnJheShlKSlyZXR1cm47Y29uc3Qgcj1IdihlLCh7cm93OldlfSk9PldlPDApLGk9Vk8odGhp''@;'; put 'put ''cyxxT2UsTlB0KS5jYWxsKHRoaXMscix0KSxvPVtdLGE9W10sbD10aGlzLmhlYWRlclN0YXRlTWFuYWdlcj8uZ2V0VmlzaWJsZVdoZW5IaWRkZW5Db2x1bW5zKCk/P1tdO2kmJlhuKHIsKHtyb3c6V2UsY29sOmF0fSk9Pntjb25zdHthZmZlY3RlZENvbHVtbnM6Q3Qscm9sbGJhY2tNb2RpZmlj''@;'; put 'put ''YXRpb246QXR9PXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyPy50cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbih0LFdlLGF0KT8/e2NvbHNwYW5Db21wZW5zYXRpb246MCxhZmZlY3RlZENvbHVtbnM6W10scm9sbGJhY2tNb2RpZmljYXRpb246KCk9Pnt9fTtvLnB1c2goQXQpLEN0Lmxlbmd0aD4wJiZh''@;'; put 'put ''LnB1c2goLi4uQ3QpfSk7Y29uc3QgdT10aGlzLmdldENvbGxhcHNlZENvbHVtbnMoKTtsZXQgZz1bXTsiY29sbGFwc2UiPT09dD9nPWdzZShbLi4udSwuLi5hXSk6ImV4cGFuZCI9PT10JiYoZz1Idih1LFdlPT4hYS5pbmNsdWRlcyhXZSkpKTtjb25zdCBFPSRPZS5nZXQodCk7aWYoITE9PT10''@;'; put 'put ''aGlzLmhvdC5ydW5Ib29rcyhFLmJlZm9yZUhvb2ssdSxnLGkpKXJldHVybiB2b2lkIFhuKG8sV2U9PntXZSgpfSk7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntYbihhLFdlPT57bTYodGhpcyx6dyk/LnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKFdlKSxF''@;'; put 'put ''LmhpZGVDb2x1bW4pfSl9LCEwKTtjb25zdCBaPXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyPy5nZXRWaXNpYmxlV2hlbkhpZGRlbkNvbHVtbnMoKT8/W10sZWU9ckwoWixsKSx2ZT1lZS5sZW5ndGg+MHx8Wi5sZW5ndGghPT1sLmxlbmd0aDt2ZSYmVk8odGhpcyxQWixuMWUpLmNhbGwodGhpcyxa''@;'; put 'put ''KTtjb25zdCBNZT10aGlzLmdldENvbGxhcHNlZENvbHVtbnMoKS5sZW5ndGghPT11Lmxlbmd0aHx8dmUsSGU9ImNvbGxhcHNlIj09PXQ/Z3NlKFsuLi5hLC4uLmVlXSk6ZWU7TWUmJkhlLmxlbmd0aD4wJiZWTyh0aGlzLEtPZSxGUHQpLmNhbGwodGhpcyxIZSksdGhpcy5ob3QucnVuSG9va3Mo''@;'; put 'put ''RS5hZnRlckhvb2ssdSxnLGksTWUpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ob3QucmVuZGVyKCl9Z2V0Q29sbGFwc2VkQ29sdW1ucygpe3JldHVybiBtNih0aGlzLHp3KT8uZ2V0SGlkZGVuSW5kZXhlcygpPz9bXX1kZXN0cm95KCl7ZWcodGhpcyx6dyxudWxs''@;'; put 'put ''KSxlZyh0aGlzLFd3LG51bGwpLHN1cGVyLmRlc3Ryb3koKX1jb25zdHJ1Y3RvciguLi5lKXtzdXBlciguLi5lKSxYaGUodGhpcyxxT2UpLFhoZSh0aGlzLEtPZSksWGhlKHRoaXMsUFopLFV3KHRoaXMsencse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFV3KHRoaXMsV3cse3dyaXRhYmxl''@;'; put 'put ''OiEwLHZhbHVlOnZvaWQgMH0pLFV3KHRoaXMsSFose3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFV3KHRoaXMsUWhlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxVdyh0aGlzLEpoZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksVXcodGhpcyxlMWUse3dyaXRhYmxlOiEwLHZh''@;'; put 'put ''bHVlOnZvaWQgMH0pLFV3KHRoaXMsdDFlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW49bnVsbCx0aGlzLmhlYWRlclN0YXRlTWFuYWdlcj1udWxsLGVnKHRoaXMsencsbnVsbCksZWcodGhpcyxXdyxudWxsKSxlZyh0aGlzLEhaLCgpPT57Vk8o''@;'; put 'put ''dGhpcyxQWixuMWUpLmNhbGwodGhpcyl9KSxlZyh0aGlzLFFoZSwodCxyLGkpPT57Y29uc3Qgbz10aGlzLmhlYWRlclN0YXRlTWFuYWdlcj8uZ2V0SGVhZGVyU2V0dGluZ3MoaSx0KSx7Y29sbGFwc2libGU6YSxvcmlnQ29sc3BhbjpsLGlzQ29sbGFwc2VkOnV9PW8/P3t9LGc9ITA9PT1hJiYo''@;'; put 'put ''bD8/MCk+MSYmdD49KHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ/PzApLEU9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncztsZXQgTz1yLnF1ZXJ5U2VsZWN0b3IoYC4ke0JUfWApO2lmKHc0KHIsW2FtKCIiKVswXV0pLGcpe098fChPPXRoaXMuaG90LnJv''@;'; put 'put ''b3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxZcihPLEJUKSxyLnF1ZXJ5U2VsZWN0b3IoImRpdjpmaXJzdC1jaGlsZCIpPy5hcHBlbmRDaGlsZChPKSk7Y29uc3QgWj1PO2tvKFosWyJjb2xsYXBzZWQiLCJleHBhbmRlZCJdKSx1PyhZcihaLCJjb2xsYXBzZWQiKSx5NyhaLCIrIiks''@;'; put 'put ''RSYmS28ociwuLi5hbSghMSkpKTooWXIoWiwiZXhwYW5kZWQiKSx5NyhaLCItIiksRSYmS28ociwuLi5hbSghMCkpKSxFJiZLbyhaLCJhcmlhLWhpZGRlbiIsInRydWUiKX1lbHNlIE8/LnJlbW92ZSgpfSksZWcodGhpcyxKaGUsKHQscik9Pntjb25zdCBpPUFhKHQpO0xhKGksQlQpJiYoTGEo''@;'; put 'put ''aSwiZXhwYW5kZWQiKT8odGhpcy5ldmVudE1hbmFnZXIuZmlyZUV2ZW50KGksIm1vdXNldXAiKSx0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihbcl0sImNvbGxhcHNlIikpOkxhKGksImNvbGxhcHNlZCIpJiYodGhpcy5ldmVudE1hbmFnZXIuZmlyZUV2ZW50KGksIm1vdXNldXAiKSx0''@;'; put 'put ''aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihbcl0sImV4cGFuZCIpKSxGMyh0KSl9KSxlZyh0aGlzLGUxZSwoKT0+e3RoaXMudXBkYXRlUGx1Z2luKCl9KSxlZyh0aGlzLHQxZSwodCxyKT0+e3J8fHRoaXMudXBkYXRlUGx1Z2luKCl9KX19ZnVuY3Rpb24gTlB0KG4sZSl7aWYoMD09PW4u''@;'; put 'put ''bGVuZ3RoKXJldHVybiExO2xldCB0PSEwO3JldHVybiBYbihuLCh7cm93OnIsY29sOml9KT0+e2NvbnN0e2NvbGxhcHNpYmxlOm8saXNDb2xsYXBzZWQ6YX09dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXI/LmdldEhlYWRlclRyZWVOb2RlRGF0YShyLGkpPz97fTtpZighb3x8YSYmImNvbGxhcHNl''@;'; put 'put ''Ij09PWV8fCFhJiYiZXhwYW5kIj09PWUpcmV0dXJuIHQ9ITEsITF9KSx0fWZ1bmN0aW9uIEZQdChuKXtjb25zdCBlPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighZSlyZXR1cm47Y29uc3R7cm93OnQsY29sOnJ9PWUuaGlnaGxpZ2h0O2lmKG51bGwhPT10JiZudWxsIT09''@;'; put 'put ''ciYmKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKHQpfHx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbihyKSkmJm4uaW5jbHVkZXMocikpe2NvbnN0IG89dD49MD90aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodCwxLCEw''@;'; put 'put ''KTp0LGE9cj49MD90aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgociwxLCEwKTpyO251bGwhPT1vJiZudWxsIT09YSYmdGhpcy5ob3Quc2VsZWN0Q2VsbChvLGEpfX1mdW5jdGlvbiBuMWUobj10aGlzLmhlYWRlclN0YXRlTWFuYWdlcj8uZ2V0Vmlz''@;'; put 'put ''aWJsZVdoZW5IaWRkZW5Db2x1bW5zKCk/P1tdKXtpZighbTYodGhpcyxXdykpcmV0dXJuO2NvbnN0IGU9bTYodGhpcyxXdyksdD1fYyhuLG89PnRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obykpLHI9ZS5nZXRIaWRkZW5JbmRleGVzKCk7dC5sZW5ndGg9PT1yLmxlbmd0aCYmMD09PXJMKHQs''@;'; put 'put ''cikubGVuZ3RofHx0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e2UuY2xlYXIoKSxYbih0LG89PntlLnNldFZhbHVlQXRJbmRleChvLCEwKX0pfSwhMCl9Y29uc3QgUFB0PVsic29ydEVtcHR5Q2VsbHMiLCJpbmRpY2F0b3IiLCJoZWFkZXJBY3Rpb24iLCJjb21wYXJlRnVuY3Rpb25GYWN0''@;'; put 'put ''b3J5Il07Y2xhc3MgalB0e3VwZGF0ZUFsbENvbHVtbnNQcm9wZXJ0aWVzKGUpe0NhKGUpJiZhYyhlLCh0LHIpPT57UFB0LmluY2x1ZGVzKHIpJiYodGhpc1tyXT10KX0pfWdldEFsbENvbHVtbnNQcm9wZXJ0aWVzKCl7Y29uc3QgZT17c29ydEVtcHR5Q2VsbHM6dGhpcy5zb3J0RW1wdHlDZWxs''@;'; put 'put ''cyxpbmRpY2F0b3I6dGhpcy5pbmRpY2F0b3IsaGVhZGVyQWN0aW9uOnRoaXMuaGVhZGVyQWN0aW9ufTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5JiYoZS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5PXRoaXMuY29tcGFyZUZ1bmN0aW9uRmFjdG9y''@;'; put 'put ''eSksZX1nZXRTb3J0T3JkZXJPZkNvbHVtbihlKXtyZXR1cm4gdGhpcy5zb3J0aW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGUpKT8uc29ydE9yZGVyfWdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZShlKXtyZXR1cm4gZT10aGlzLmhvdC50b1Bo''@;'; put 'put ''eXNpY2FsQ29sdW1uKGUpLHRoaXMuc29ydGluZ1N0YXRlcy5nZXRFbnRyaWVzKCkuZmluZEluZGV4KChbdF0pPT50PT09ZSl9Z2V0TnVtYmVyT2ZTb3J0ZWRDb2x1bW5zKCl7cmV0dXJuIHRoaXMuc29ydGluZ1N0YXRlcy5nZXRMZW5ndGgoKX1pc0xpc3RPZlNvcnRlZENvbHVtbnNFbXB0eSgp''@;'; put 'put ''e3JldHVybiAwPT09dGhpcy5nZXROdW1iZXJPZlNvcnRlZENvbHVtbnMoKX1pc0NvbHVtblNvcnRlZChlKXtyZXR1cm4gQ2EodGhpcy5zb3J0aW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGUpKSl9Z2V0U29ydFN0YXRlcygpe3JldHVybiBudWxs''@;'; put 'put ''PT09dGhpcy5zb3J0aW5nU3RhdGVzP1tdOnRoaXMuc29ydGluZ1N0YXRlcy5nZXRFbnRyaWVzKCkubWFwKChbdCxyXSk9Pih7Y29sdW1uOnRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKHQpLC4uLnJ9KSl9Z2V0Q29sdW1uU29ydFN0YXRlKGUpe2NvbnN0IHQ9dGhpcy5nZXRTb3J0T3JkZXJPZkNv''@;'; put 'put ''bHVtbihlKTtpZih2b2lkIDAhPT10KXJldHVybntjb2x1bW46ZSxzb3J0T3JkZXI6dH19c2V0U29ydFN0YXRlcyhlKXt0aGlzLnNvcnRpbmdTdGF0ZXMuY2xlYXIoKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrPTEpe2NvbnN0IHI9ZVt0XTt0aGlzLnNvcnRpbmdTdGF0ZXMuc2V0VmFsdWVB''@;'; put 'put ''dEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oci5jb2x1bW4pLHtzb3J0T3JkZXI6ci5zb3J0T3JkZXJ9KX19ZGVzdHJveSgpe3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5tYXBOYW1lKSxSZWZsZWN0LnNldCh0aGlzLCJzb3J0aW5nU3RhdGVz''@;'; put 'put ''IixudWxsKX1jb25zdHJ1Y3RvcihlLHQpe3RoaXMuc29ydGluZ1N0YXRlcz1uZXcgVFksdGhpcy5zb3J0RW1wdHlDZWxscz0hMSx0aGlzLmluZGljYXRvcj0hMCx0aGlzLmhlYWRlckFjdGlvbj0hMCx0aGlzLmhvdD1lLHRoaXMubWFwTmFtZT10LHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVy''@;'; put 'put ''LnJlZ2lzdGVyTWFwKHQsdGhpcy5zb3J0aW5nU3RhdGVzKX19ZnVuY3Rpb24gWE9lKG4sZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2Ygbj9OdW1iZXIobik6InN0cmluZyI9PXR5cGVvZiBuP3YxKG4sZSk6bn1mdW5jdGlvbiBRT2UobixlLHQpe2NvbnN0IHI9ZS5sb2NhbGU7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKGksbyl7Y29uc3R7c29ydEVtcHR5Q2VsbHM6YX09dCxsPVhPZShpLHIpLHU9WE9lKG8scik7cmV0dXJuIGw9PT11P3RnOkFsKGwpP0FsKHUpP3RnOmEmJiJhc2MiPT09bj9odTpmdTpBbCh1KT9hJiYiYXNjIj09PW4/ZnU6aHU6ZnVuY3Rpb24gVVB0KG4sZSx0KXtjb25zdCByPWlz''@;'; put 'put ''TmFOKG4pLGk9aXNOYU4oZSk7aWYociYmIWkpcmV0dXJuImFzYyI9PT10P2Z1Omh1O2lmKCFyJiZpKXJldHVybiJhc2MiPT09dD9odTpmdTtsZXQgbz1uLGE9ZTtyZXR1cm4hciYmIWkmJihvPXBhcnNlRmxvYXQoU3RyaW5nKG4pKSxhPXBhcnNlRmxvYXQoU3RyaW5nKGUpKSksbzxhPyJhc2Mi''@;'; put 'put ''PT09dD9odTpmdTpvPmE/ImFzYyI9PT10P2Z1Omh1OnRnfShsLHUsbil9fWNvbnN0e3JlZ2lzdGVyOll3LGdldEl0ZW06ZU5lLGhhc0l0ZW06ckh0fT16cCgic29ydGluZy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5Iikse3JlZ2lzdGVyOnROZSxnZXRJdGVtOmlIdH09enAoInNvcnRpbmcubWFp''@;'; put 'put ''blNvcnRDb21wYXJhdG9yIik7ZnVuY3Rpb24gbk5lKG4pe3JldHVybiBySHQobik/ZU5lKG4pOmVOZSgiZGVmYXVsdCIpfVl3KCJjaGVja2JveCIsZnVuY3Rpb24gR1B0KG4sZSx0KXtjb25zdCByPWUuY2hlY2tlZFRlbXBsYXRlLGk9ZS51bmNoZWNrZWRUZW1wbGF0ZSx7c29ydEVtcHR5Q2Vs''@;'; put 'put ''bHM6b309dDtyZXR1cm4gZnVuY3Rpb24oYSxsKXtjb25zdCB1PUFsKGEpLGc9QWwobCksRT11P2k6YSxPPWc/aTpsO2lmKCExPT09byl7aWYodSYmITE9PT1nKXJldHVybiBmdTtpZighMT09PXUmJmcpcmV0dXJuIGh1fWNvbnN0IHZlPWZ1bmN0aW9uIFpQdChuLGUsdCxyLGksbyxhKXtyZXR1''@;'; put 'put ''cm4hMT09PW4mJmU/ImFzYyI9PT10P2h1OmZ1Om4mJiExPT09ZT8iYXNjIj09PXQ/ZnU6aHU6ITE9PT1uJiYhMT09PWU/UU9lKHQscixpKShvLGEpOm51bGx9KEU9PT1pfHxFPT09cixPPT09aXx8Tz09PXIsbixlLHQsYSxsKTtyZXR1cm4gbnVsbCE9PXZlP3ZlOmZ1bmN0aW9uIFlQdChuLGUs''@;'; put 'put ''dCxyLGkpe3JldHVybiBuPT09ciYmZT09PXQ/ImFzYyI9PT1pP2h1OmZ1Om49PT10JiZlPT09cj8iYXNjIj09PWk/ZnU6aHU6dGd9KEUsTyxyLGksbil9fSksWXcoImRhdGUiLGZ1bmN0aW9uIHFQdChuLGUsdCl7cmV0dXJuIGxOZShuLHQpfSksWXcoImludGwtZGF0ZSIsZnVuY3Rpb24gWFB0''@;'; put 'put ''KG4sZSx0KXtyZXR1cm4gbE5lKG4sdCl9KSxZdygiZGVmYXVsdCIsUU9lKSxZdygibnVtZXJpYyIsZnVuY3Rpb24gelB0KG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixpKXtjb25zdCBvPXBhcnNlRmxvYXQociksYT1wYXJzZUZsb2F0KGkpLHtzb3J0RW1wdHlDZWxsczpsfT10O2lmKG89PT1h''@;'; put 'put ''fHxpc05hTihvKSYmaXNOYU4oYSkpcmV0dXJuIHRnO2lmKGwpe2lmKEFsKHIpKXJldHVybiJhc2MiPT09bj9odTpmdTtpZihBbChpKSlyZXR1cm4iYXNjIj09PW4/ZnU6aHV9cmV0dXJuIGlzTmFOKG8pP2Z1OmlzTmFOKGEpP2h1Om88YT8iYXNjIj09PW4/aHU6ZnU6bz5hPyJhc2MiPT09bj9m''@;'; put 'put ''dTpodTp0Z319KSxZdygidGltZSIsZnVuY3Rpb24gSlB0KG4sZSx0KXtyZXR1cm4gY05lKG4sdCl9KSxZdygiaW50bC10aW1lIixmdW5jdGlvbiB0SHQobixlLHQpe3JldHVybiBjTmUobix0KX0pO2NvbnN0IHRnPTAsaHU9LTEsZnU9MSxWWj0iYXNjIixCWj0iZGVzYyI7ZnVuY3Rpb24gaU5l''@;'; put 'put ''KG4pe2lmKCExPT09Q2EobikpcmV0dXJuITE7Y29uc3R7Y29sdW1uOmUsc29ydE9yZGVyOnR9PW47cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJltWWixCWl0uaW5jbHVkZXModCl9ZnVuY3Rpb24gb05lKG4pe2lmKG4hPT1CWilyZXR1cm4gbj09PVZaP0JaOlZafWZ1bmN0aW9uIGFOZShu''@;'; put 'put ''KXtyZXR1cm4gbi5xdWVyeVNlbGVjdG9yKCIuY29sSGVhZGVyIil9ZnVuY3Rpb24gc05lKG4sZSl7cmV0dXJuIShuPDApJiZjdyhlKX1mdW5jdGlvbiByMWUobixlLHQpe2lmKGU8MHx8bj49MHx8enYodCkpcmV0dXJuITE7aWYoLTE9PT1uKXJldHVybiEwO2NvbnN0IHI9ImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIEFhKHQpPy5jbG9zZXN0P0FhKHQpLmNsb3Nlc3QoInRoIik6bnVsbDtyZXR1cm4gbnVsbCE9PXImJmN3KHIpfWZ1bmN0aW9uIGxOZShuLGUpe3JldHVybiBmdW5jdGlvbih0LHIpe2NvbnN0e3NvcnRFbXB0eUNlbGxzOml9PWU7aWYodD09PXIpcmV0dXJuIHRnO2lmKEFsKHQpKXJl''@;'; put 'put ''dHVybiBBbChyKT90ZzppJiYiYXNjIj09PW4/aHU6ZnU7aWYoQWwocikpcmV0dXJuIGkmJiJhc2MiPT09bj9mdTpodTtjb25zdCBvPXNjKHQpLGE9c2Mocik7cmV0dXJuIG51bGw9PT1vP2Z1Om51bGw9PT1hP2h1OmE+bz8iYXNjIj09PW4/aHU6ZnU6YTxvPyJhc2MiPT09bj9mdTpodTp0Z319''@;'; put 'put ''ZnVuY3Rpb24gY05lKG4sZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7Y29uc3R7c29ydEVtcHR5Q2VsbHM6aX09ZTtpZih0PT09cilyZXR1cm4gdGc7aWYoQWwodCkpcmV0dXJuIEFsKHIpP3RnOmkmJiJhc2MiPT09bj9odTpmdTtpZihBbChyKSlyZXR1cm4gaSYmImFzYyI9PT1uP2Z1Omh1O2Nv''@;'; put 'put ''bnN0IG89emYodCksYT16ZihyKTtyZXR1cm4gbnVsbD09PW8/ZnU6bnVsbD09PWE/aHU6YT5vPyJhc2MiPT09bj9odTpmdTphPG8/ImFzYyI9PT1uP2Z1Omh1OnRnfX1jb25zdCB1TmU9ImluZGljYXRvckRpc2FibGVkIixkTmU9ImNvbHVtblNvcnRpbmciLGhOZT0ic29ydEFjdGlvbiIsZk5l''@;'; put 'put ''PW5ldyBNYXAoW1tWWiwiYXNjZW5kaW5nIl0sW0JaLCJkZXNjZW5kaW5nIl1dKTtmdW5jdGlvbiBwTmUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQo''@;'; put 'put ''bil9ZnVuY3Rpb24gWncobixlKXtyZXR1cm4gZnVuY3Rpb24gcEh0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obixwTmUobixlLCJnZXQiKSl9ZnVuY3Rpb24gQk8obixlLHQpeyhmdW5jdGlvbiBmSHQobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIGpPKG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gZ0h0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtp''@;'; put 'put ''ZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixwTmUobixlLCJzZXQiKSx0KSx0fWNvbnN0IGpaPSJjb2x1bW5Tb3J0aW5nIixVWj0iYXBwZW5kIixnTmU9alo7dE5lKGpaLGZ1''@;'; put 'put ''bmN0aW9uIGhIdChuLGUpe3JldHVybiBmdW5jdGlvbih0LHIpe2NvbnN0WywuLi5pXT10LFssLi4ub109cjtyZXR1cm4gZnVuY3Rpb24oKXtjb25zdCB1PW5bMF0sZz1lWzBdLEU9aVswXSxPPW9bMF0sWj1nLGVlPVouY29sdW1uU29ydGluZztyZXR1cm4oZWU/LmNvbXBhcmVGdW5jdGlvbkZh''@;'; put 'put ''Y3Rvcnk/ZWUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeTpuTmUoWi50eXBlPz8iIikpKHUsZyxlZSkoRSxPKX0oKX19KSxHby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29sdW1uU29ydCIpLEdvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtblNvcnQiKTtjb25z''@;'; put 'put ''dCBVTz1uZXcgV2Vha01hcDt2YXIgek89bmV3IFdlYWtNYXAsaTFlPW5ldyBXZWFrTWFwLG8xZT1uZXcgV2Vha01hcCxhMWU9bmV3IFdlYWtNYXAsczFlPW5ldyBXZWFrTWFwO2NsYXNzIG1OZSBleHRlbmRzIGFse3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBqWn1zdGF0aWMgZ2V0''@;'; put 'put ''IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA1MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldfWVuYWJsZVBsdWdpbigpe2lmKFVPLmhhcyh0aGlzLmhvdCkmJlVPLmdldCh0aGlzLmhvdCkhPT10aGlzLnBsdWdpbktleSlyZXR1cm4g''@;'; put 'put ''dGhpcy5ob3QudXBkYXRlU2V0dGluZ3Moe1t0aGlzLnBsdWdpbktleV06ITF9KSx2b2lkIGZ1bmN0aW9uIHNIdChuLGUpe0hhKHljYFBsdWdpbnMgXGBjb2x1bW5Tb3J0aW5nXGAgYW5kIFxgbXVsdGlDb2x1bW5Tb3J0aW5nXGAgc2hvdWxkIG5vdCBiZSBlbmFibGVkIHNpbXVsdGFuZW91c2x5''@;'; put 'put ''Llx4MjAKICAgIE9ubHkgXGAke259XGAgd2lsbCB3b3JrLiBUaGUgXGAke2V9XGAgcGx1Z2luIHdpbGwgcmVtYWluIGRpc2FibGVkLmApfShVTy5nZXQodGhpcy5ob3QpLHRoaXMucGx1Z2luS2V5KTt0aGlzLmVuYWJsZWR8fChVTy5zZXQodGhpcy5ob3QsdGhpcy5wbHVnaW5LZXkpLHRoaXMu''@;'; put 'put ''Y29sdW1uU3RhdGVzTWFuYWdlcj1uZXcgalB0KHRoaXMuaG90LGAke3RoaXMucGx1Z2luS2V5fS5zb3J0aW5nU3RhdGVzYCksdGhpcy5jb2x1bW5NZXRhQ2FjaGU9bmV3IG5fKGU9PntsZXQgdD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihlKTtyZXR1cm4gbnVsbD09PXQmJih0PWUpLHRoaXMu''@;'; put 'put ''Z2V0TWVyZ2VkUGx1Z2luU2V0dGluZ3ModCl9KSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcChgJHt0aGlzLnBsdWdpbktleX0uY29sdW1uTWV0YWAsdGhpcy5jb2x1bW5NZXRhQ2FjaGUpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLFp3KHRoaXMsaTFl''@;'; put 'put ''KSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLFp3KHRoaXMsczFlKSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1vdXNlRG93biIsKGUsdCk9PnRoaXMub25BZnRlck9uQ2VsbE1vdXNlRG93bihlLHQpKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsWncodGhpcyx6''@;'; put 'put ''TykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsWncodGhpcyxvMWUpKSx0aGlzLmFkZEhvb2soImFmdGVyRGF0YVByb3ZpZGVyRmV0Y2giLFp3KHRoaXMsYTFlKSwtMSksdGhpcy5ob3QudmlldyYmWncodGhpcyx6TykuY2FsbCh0aGlzKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCks''@;'; put 'put ''c3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXtjb25zdCBlPSh0LHIpPT57Y29uc3QgaT1hTmUocik7ITE9PT1zTmUodCxyKXx8bnVsbD09PWl8fHRoaXMudXBkYXRlSGVhZGVyQ2xhc3NlcyhpKX07VU8uZGVsZXRlKHRoaXMuaG90KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRl''@;'; put 'put ''ckdldENvbEhlYWRlciIsZSksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsKCk9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKCJhZnRlckdldENvbEhlYWRlciIsZSl9KSx0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e251bGwhPT10aGlzLmluZGV4ZXNTZXF1ZW5jZUNh''@;'; put 'put ''Y2hlJiYodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUuZ2V0VmFsdWVzKCkpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5LZXkpLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2Fj''@;'; put 'put ''aGU9bnVsbCl9LCEwKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKGAke3RoaXMucGx1Z2luS2V5fS5jb2x1bW5NZXRhYCksdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyPy5kZXN0cm95KCksdGhpcy5jb2x1bW5NZXRhQ2FjaGU9bnVsbCx0aGlzLmNvbHVtblN0YXRl''@;'; put 'put ''c01hbmFnZXI9bnVsbCx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIik/LmFkZFNob3J0Y3V0KHtrZXlzOltbIkVudGVyIl1dLGNh''@;'; put 'put ''bGxiYWNrOigpPT57Y29uc3QgZT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIWUpcmV0dXJuITE7Y29uc3R7aGlnaGxpZ2h0OnR9PWU7cmV0dXJuIHRoaXMuc29ydCh0aGlzLmdldENvbHVtbk5leHRDb25maWcodC5jb2w/PzApKSwhMX0scnVuT25seUlmOigpPT57Y29u''@;'; put 'put ''c3QgZT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk/LmhpZ2hsaWdodCx0PWUmJm51bGwhPT1lLnJvdyYmbnVsbCE9PWUuY29sP3RoaXMuaG90LmdldENlbGwoZS5yb3csZS5jb2wsITApOm51bGw7cmV0dXJuISEoZSYmdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgp''@;'; put 'put ''Py5pc1NpbmdsZSgpJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShlKSYmbnVsbCE9PWUucm93JiZlLnJvdzwwJiZudWxsIT09ZS5jb2wmJmUuY29sPj0wJiZ0JiZjdyh0KSl9LHJlbGF0aXZlVG9Hcm91cDpSNyxwb3NpdGlvbjoiYmVmb3JlIixncm91cDpnTmV9KX11bnJlZ2lz''@;'; put 'put ''dGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpPy5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKGdOZSl9c29ydChlKXtjb25zdCB0PXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRTb3J0U3RhdGVzKCkscj10aGlzLmdldE5vcm1h''@;'; put 'put ''bGl6ZWRTb3J0Q29uZmlncyhlKSxpPXRoaXMuYXJlVmFsaWRTb3J0Q29uZmlncyhyKTshMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5Tb3J0Iix0LHIsaSkmJigwPT09dC5sZW5ndGgmJm51bGw9PT10aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlJiYodGhpcy5pbmRleGVzU2Vx''@;'; put 'put ''dWVuY2VDYWNoZT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbktleSxuZXcgb1JlKSx0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlLnNldFZhbHVlcyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSkpLGkmJih0aGlzLmNv''@;'; put 'put ''bHVtblN0YXRlc01hbmFnZXI/LnNldFNvcnRTdGF0ZXMociksdGhpcy5zb3J0QnlQcmVzZXRTb3J0U3RhdGVzKHIpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5Tb3J0Iix0LGk/cjp0LGkpLGkmJnRoaXMuaG90LnJlbmRlcigpKX1jbGVhclNvcnQoKXt0aGlzLnNvcnQoW10pfWlz''@;'; put 'put ''U29ydGVkKCl7cmV0dXJuIHRoaXMuZW5hYmxlZCYmIXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcj8uaXNMaXN0T2ZTb3J0ZWRDb2x1bW5zRW1wdHkoKX1nZXRTb3J0Q29uZmlnKGUpe3JldHVybiB2b2lkIDAhPT1lP3RoaXMuY29sdW1uU3RhdGVzTWFuYWdlcj8uZ2V0Q29sdW1uU29ydFN0YXRl''@;'; put 'put ''KGUpOnRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcj8uZ2V0U29ydFN0YXRlcygpfXNldFNvcnRDb25maWcoZSl7Y29uc3QgdD10aGlzLmdldE5vcm1hbGl6ZWRTb3J0Q29uZmlncyhlKTt0aGlzLmFyZVZhbGlkU29ydENvbmZpZ3ModCkmJnRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcj8uc2V0U29y''@;'; put 'put ''dFN0YXRlcyh0KX1nZXROb3JtYWxpemVkU29ydENvbmZpZ3MoZT1bXSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5zbGljZSgwLDEpOltlXX1hcmVWYWxpZFNvcnRDb25maWdzKGUpe2NvbnN0IHQ9dGhpcy5ob3QuY291bnRDb2xzKCk7cmV0dXJuIGZ1bmN0aW9uIGFIdChuKXtpZihuLnNv''@;'; put 'put ''bWUocj0+ITE9PT1pTmUocikpKXJldHVybiExO2NvbnN0IHQ9bi5maWx0ZXIoaU5lKS5tYXAocj0+ci5jb2x1bW4pO3JldHVybiBuZXcgU2V0KHQpLnNpemU9PT10Lmxlbmd0aH0oZSkmJmUuZXZlcnkoKHtjb2x1bW46cn0pPT5yPD10JiZyPj0wKX1nZXRDb2x1bW5OZXh0Q29uZmlnKGUpe2Nv''@;'; put 'put ''bnN0IHQ9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyPy5nZXRTb3J0T3JkZXJPZkNvbHVtbihlKTtpZihabyh0KSl7Y29uc3QgaT1vTmUodCk7cmV0dXJuIHZvaWQgMCE9PWk/e2NvbHVtbjplLHNvcnRPcmRlcjppfTp2b2lkIDB9Y29uc3Qgcj10aGlzLmhvdC5jb3VudENvbHMoKTtpZihOdW1i''@;'; put 'put ''ZXIuaXNJbnRlZ2VyKGUpJiZlPj0wJiZlPHIpcmV0dXJue2NvbHVtbjplLHNvcnRPcmRlcjpvTmUoKT8/ImFzYyJ9fWdldE5leHRTb3J0Q29uZmlnKGUsdD1VWil7Y29uc3Qgcj10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0SW5kZXhPZkNvbHVtbkluU29ydFF1ZXVlKGUpLGk9LTEhPT1y''@;'; put 'put ''LG89dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldFNvcnRTdGF0ZXMoKSxhPXRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhlKTtpZihpKXtpZihYdShhKSlyZXR1cm5bLi4uby5zbGljZSgwLHIpLC4uLm8uc2xpY2UocisxKV07aWYodD09PVVaKXJldHVyblsuLi5vLnNsaWNlKDAsciksLi4u''@;'; put 'put ''by5zbGljZShyKzEpLGFdO2lmKCJyZXBsYWNlIj09PXQpcmV0dXJuWy4uLm8uc2xpY2UoMCxyKSxhLC4uLm8uc2xpY2UocisxKV19cmV0dXJuIHZvaWQgMCE9PWE/by5jb25jYXQoYSk6b31nZXRQbHVnaW5Db2x1bW5Db25maWcoZSl7aWYoQ2EoZSkpe2NvbnN0IHQ9ZVt0aGlzLnBsdWdpbktl''@;'; put 'put ''eV07aWYoQ2EodCkpcmV0dXJuIHR9cmV0dXJue319Z2V0TWVyZ2VkUGx1Z2luU2V0dGluZ3MoZSl7Y29uc3QgdD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XSxyPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcj8uZ2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKT8/e30saT10''@;'; put 'put ''aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGUpLG89T2JqZWN0LmdldFByb3RvdHlwZU9mKGkpO2lmKEFycmF5LmlzQXJyYXkoby5jb2x1bW5zKSlyZXR1cm4gT2JqZWN0LmFzc2lnbihyLHQsdGhpcy5nZXRQbHVnaW5Db2x1bW5Db25maWcoby5jb2x1bW5zW2VdKSk7aWYoX2Eoby5jb2x1bW5zKSl7''@;'; put 'put ''Y29uc3QgYT1vLmNvbHVtbnMoZSk7cmV0dXJuIE9iamVjdC5hc3NpZ24ocix0LHRoaXMuZ2V0UGx1Z2luQ29sdW1uQ29uZmlnKGEpKX1yZXR1cm4gT2JqZWN0LmFzc2lnbihyLHQpfWdldEZpcnN0Q2VsbFNldHRpbmdzKGUpe2NvbnN0IHQ9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxlKSxyPU9i''@;'; put 'put ''amVjdC5jcmVhdGUodCk7cmV0dXJuIHJbdGhpcy5wbHVnaW5LZXldPXRoaXMuY29sdW1uTWV0YUNhY2hlPy5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihlKSkscn1nZXROdW1iZXJPZlJvd3NUb1NvcnQoZSl7Y29uc3QgdD10aGlzLmhvdC5nZXRTZXR0aW5ncygp''@;'; put 'put ''LHI9dC5maXhlZFJvd3NCb3R0b218fDA7cmV0dXJuKHQubWF4Um93cz8/MS8wKTw9ZT9NYXRoLm1heCgwLCh0Lm1heFJvd3M/PzApLXIpOk1hdGgubWF4KDAsZS0odC5taW5TcGFyZVJvd3M/PzApLXIpfXNvcnRCeVByZXNldFNvcnRTdGF0ZXMoZSl7aWYodGhpcy5ob3Qucm93SW5kZXhNYXBw''@;'; put 'put ''ZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUuZ2V0VmFsdWVzKCkpLDA9PT1lLmxlbmd0aClyZXR1cm47Y29uc3QgdD1bXSxyPXRoaXMuaG90LmNvdW50Um93cygpLG89dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3B8fDAsYT10aGlzLmdl''@;'; put 'put ''dE51bWJlck9mUm93c1RvU29ydChyKSxsPVo9Pl9jKGUsZWU9PnRoaXMuaG90LmdldERhdGFBdENlbGwoWixlZS5jb2x1bW4pKTtmb3IobGV0IFo9bztaPGE7Wis9MSl0LnB1c2goW3RoaXMuaG90LnRvUGh5c2ljYWxSb3coWiksLi4ubChaKV0pO2NvbnN0IHU9X2ModCxaPT5aWzBdKTshZnVu''@;'; put 'put ''Y3Rpb24gb0h0KG4sZSwuLi50KXtjb25zdCByPWlIdChlKTtuLnNvcnQociguLi50KSl9KHQsdGhpcy5wbHVnaW5LZXksX2MoZSxaPT5aLnNvcnRPcmRlciksX2MoZSxaPT50aGlzLmdldEZpcnN0Q2VsbFNldHRpbmdzKFouY29sdW1uKSkpO2ZvcihsZXQgWj1hO1o8cjtaKz0xKXQucHVzaChb''@;'; put 'put ''WiwuLi5sKFopXSk7Y29uc3QgZz1fYyh0LFo9PlpbMF0pLEU9bmV3IE1hcChfYyh1LChaLGVlKT0+W1osZ1tlZV1dKSksTz1fYyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxaPT5FLmdldChaKT8/Wik7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5k''@;'; put 'put ''ZXhlc1NlcXVlbmNlKE8pfXNvcnRCeVNldHRpbmdzKGUpe2lmKGtkKGUpKXt0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIudXBkYXRlQWxsQ29sdW1uc1Byb3BlcnRpZXMoZSk7Y29uc3R7aW5pdGlhbENvbmZpZzp0fT1lOyhBcnJheS5pc0FycmF5KHQpfHxrZCh0KSkmJnRoaXMuc29ydCh0KX1l''@;'; put 'put ''bHNlIHRoaXMuaG90LnJlbmRlcigpfXVwZGF0ZUhlYWRlckNsYXNzZXMoZSx0LHIsaSxvKXtrbyhlLGZ1bmN0aW9uIGRIdCgpe3JldHVybiBBcnJheS5mcm9tKGZOZS52YWx1ZXMoKSkuY29uY2F0KGhOZSx1TmUsZE5lKX0oKSksITEhPT10aGlzLmVuYWJsZWQmJnZvaWQgMCE9PXQmJnZvaWQg''@;'; put 'put ''MCE9PXImJllyKGUsZnVuY3Rpb24gdUh0KG4sZSx0LHIpe2NvbnN0IGk9W2ROZV07aWYociYmaS5wdXNoKGhOZSksITE9PT10KXJldHVybiBpLnB1c2godU5lKSxpO2NvbnN0IG89bi5nZXRTb3J0T3JkZXJPZkNvbHVtbihlKTtpZih2b2lkIDAhPT1vKXtjb25zdCBhPWZOZS5nZXQobyk7dm9p''@;'; put 'put ''ZCAwIT09YSYmaS5wdXNoKGEpfXJldHVybiBpfSh0LHIsaT8/ITEsbz8/ITEpKX1vblVwZGF0ZVNldHRpbmdzKGUpe3N1cGVyLm9uVXBkYXRlU2V0dGluZ3MoZSksbnVsbCE9PXRoaXMuY29sdW1uTWV0YUNhY2hlJiZ0aGlzLmNvbHVtbk1ldGFDYWNoZS5pbml0KHRoaXMuaG90LmNvbHVtbklu''@;'; put 'put ''ZGV4TWFwcGVyLmdldE51bWJlck9mSW5kZXhlcygpKTtjb25zdCB0PWVbdGhpcy5wbHVnaW5LZXldO1pvKHQpJiZ0aGlzLnNvcnRCeVNldHRpbmdzKHQpfXdhc0NsaWNrYWJsZUhlYWRlckNsaWNrZWQoZSx0KXtyZXR1cm4gdGhpcy5nZXRGaXJzdENlbGxTZXR0aW5ncyh0KVt0aGlzLnBsdWdp''@;'; put 'put ''bktleV0uaGVhZGVyQWN0aW9uJiZMYShBYShlKSwiY29sSGVhZGVyIil9b25BZnRlck9uQ2VsbE1vdXNlRG93bihlLHQpe2lmKCExIT09cjFlKHQucm93LHQuY29sLGUpJiZ0aGlzLndhc0NsaWNrYWJsZUhlYWRlckNsaWNrZWQoZSx0LmNvbCkpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdl''@;'; put 'put ''cigpLmlzQ3RybFByZXNzZWQoKSYmKHRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpLHRoaXMuaG90LnNlbGVjdENvbHVtbnModC5jb2wpKTtjb25zdCByPXRoaXMuaG90LmdldEFjdGl2ZUVkaXRvcigpLGk9dGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKHQuY29sKTtyPy5pc09wZW5lZCgpJiZ0aGlz''@;'; put 'put ''LmhvdC5nZXRDZWxsVmFsaWRhdG9yKHIucm93LHIuY29sKT90aGlzLmhvdC5hZGRIb29rT25jZSgicG9zdEFmdGVyVmFsaWRhdGUiLCgpPT57dGhpcy5zb3J0KGkpfSk6dGhpcy5zb3J0KGkpfX1kZXN0cm95KCl7dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyPy5kZXN0cm95KCksc3VwZXIuZGVz''@;'; put 'put ''dHJveSgpfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLEJPKHRoaXMsek8se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEJPKHRoaXMsaTFlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxCTyh0aGlzLG8xZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksQk8odGhpcyxh''@;'; put 'put ''MWUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEJPKHRoaXMsczFlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0aGlzLmNvbHVtblN0YXRlc01hbmFnZXI9bnVsbCx0aGlzLmNvbHVtbk1ldGFDYWNoZT1udWxsLHRoaXMucGx1Z2luS2V5PWpaLHRoaXMuaW5kZXhlc1NlcXVlbmNl''@;'; put 'put ''Q2FjaGU9bnVsbCxqTyh0aGlzLHpPLCgpPT57Y29uc3QgdD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XTt0aGlzLnNvcnRCeVNldHRpbmdzKHQpfSksak8odGhpcyxpMWUsKHQscik9Pntjb25zdCBpPWFOZShyKTtpZighMT09PXNOZSh0LHIpfHxudWxsPT09aSlyZXR1''@;'; put 'put ''cm47Y29uc3QgYT10aGlzLmdldEZpcnN0Q2VsbFNldHRpbmdzKHQpW3RoaXMucGx1Z2luS2V5XTtpZih0aGlzLnVwZGF0ZUhlYWRlckNsYXNzZXMoaSx0aGlzLmNvbHVtblN0YXRlc01hbmFnZXI/P3ZvaWQgMCx0LGEuaW5kaWNhdG9yLGEuaGVhZGVyQWN0aW9uKSx0aGlzLmhvdC5nZXRTZXR0''@;'; put 'put ''aW5ncygpLmFyaWFUYWdzKXtjb25zdCBnPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcj8uZ2V0U29ydE9yZGVyT2ZDb2x1bW4odCk7S28ociwuLi4obj0+WyJhcmlhLXNvcnQiLG5dKShnP2Ake2d9ZW5kaW5nYDoibm9uZSIpKX19KSxqTyh0aGlzLG8xZSx0PT57ITA9PT10JiZ0aGlzLmhvdC52''@;'; put 'put ''aWV3JiZadyh0aGlzLHpPKS5jYWxsKHRoaXMpfSksak8odGhpcyxhMWUsdD0+e3RoaXMuc2V0U29ydENvbmZpZyh0Py5jb2x1bW5Tb3J0Q29uZmlnPz9bXSl9KSxqTyh0aGlzLHMxZSwodCxyLGksbyk9PnshMSE9PXIxZShyLnJvdyxyLmNvbCx0KSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJD''@;'; put 'put ''bGlja2VkKHQsci5jb2wpJiZ0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkmJihvLmNvbHVtbj0hMCl9KX19ZnVuY3Rpb24gbDFlKG4pe3JldHVybiBudWxsPT1ufHxpc05hTihuKX1jb25zdCBiSHQ9Y2xhc3MgeUh0e2luaXRFbmRwb2ludHMoKXt0aGlzLmVu''@;'; put 'put ''ZHBvaW50cz10aGlzLnBhcnNlU2V0dGluZ3MoKSx0aGlzLnJlZnJlc2hBbGxFbmRwb2ludHMoKX1nZXRFbmRwb2ludChlKXtyZXR1cm4iZnVuY3Rpb24iPT09dGhpcy5zZXR0aW5nc1R5cGU/dGhpcy5maWxsTWlzc2luZ0VuZHBvaW50RGF0YSh0aGlzLnNldHRpbmdzKVtlXTp0aGlzLmVuZHBv''@;'; put 'put ''aW50c1tlXX1nZXRBbGxFbmRwb2ludHMoKXtyZXR1cm4iZnVuY3Rpb24iPT09dGhpcy5zZXR0aW5nc1R5cGU/dGhpcy5maWxsTWlzc2luZ0VuZHBvaW50RGF0YSh0aGlzLnNldHRpbmdzKTp0aGlzLmVuZHBvaW50c31maWxsTWlzc2luZ0VuZHBvaW50RGF0YShlKXtyZXR1cm4gdGhpcy5wYXJz''@;'; put 'put ''ZVNldHRpbmdzKGUuY2FsbCh0aGlzKSl9cGFyc2VTZXR0aW5ncyhlKXtjb25zdCB0PVtdO2xldCByPWU7aWYocnx8ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuc2V0dGluZ3MpcmV0dXJuIHJ8fChyPXRoaXMuc2V0dGluZ3MpLFhuKHIsaT0+e2NvbnN0IG89e307dGhpcy5hc3NpZ25TZXR0aW5n''@;'; put 'put ''KGksbywicmFuZ2VzIixbWzAsdGhpcy5ob3QuY291bnRSb3dzKCktMV1dKSx0aGlzLmFzc2lnblNldHRpbmcoaSxvLCJyZXZlcnNlZFJvd0Nvb3JkcyIsITEpLHRoaXMuYXNzaWduU2V0dGluZyhpLG8sImRlc3RpbmF0aW9uUm93IixuZXcgRXJyb3IoIlxuICAgICAgICBZb3UgbXVzdCBwcm92''@;'; put 'put ''aWRlIGEgZGVzdGluYXRpb24gcm93IGZvciB0aGUgQ29sdW1uIFN1bW1hcnkgcGx1Z2luIGluIG9yZGVyIHRvIHdvcmsgcHJvcGVybHkhXG4gICAgICAiKSksdGhpcy5hc3NpZ25TZXR0aW5nKGksbywiZGVzdGluYXRpb25Db2x1bW4iLG5ldyBFcnJvcigiXG4gICAgICAgIFlvdSBtdXN0IHBy''@;'; put 'put ''b3ZpZGUgYSBkZXN0aW5hdGlvbiBjb2x1bW4gZm9yIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW4gaW4gb3JkZXIgdG8gd29yayBwcm9wZXJseSFcbiAgICAgICIpKSx0aGlzLmFzc2lnblNldHRpbmcoaSxvLCJzb3VyY2VDb2x1bW4iLGkuZGVzdGluYXRpb25Db2x1bW4pLHRoaXMuYXNzaWdu''@;'; put 'put ''U2V0dGluZyhpLG8sInR5cGUiLCJzdW0iKSx0aGlzLmFzc2lnblNldHRpbmcoaSxvLCJmb3JjZU51bWVyaWMiLCExKSx0aGlzLmFzc2lnblNldHRpbmcoaSxvLCJzdXBwcmVzc0RhdGFUeXBlRXJyb3JzIiwhMCksdGhpcy5hc3NpZ25TZXR0aW5nKGksbywiY3VzdG9tRnVuY3Rpb24iLG51bGwp''@;'; put 'put ''LHRoaXMuYXNzaWduU2V0dGluZyhpLG8sInJlYWRPbmx5IiwhMCksdGhpcy5hc3NpZ25TZXR0aW5nKGksbywicm91bmRGbG9hdCIsITEpLHQucHVzaChvKX0pLHQ7dGhpcy5zZXR0aW5nc1R5cGU9ImZ1bmN0aW9uIn1hc3NpZ25TZXR0aW5nKGUsdCxyLGkpe2lmKCJyYW5nZXMiIT09cnx8dm9p''@;'; put 'put ''ZCAwIT09ZVtyXSl7aWYoInJhbmdlcyIhPT1yfHwwIT09ZVtyXS5sZW5ndGgpaWYodm9pZCAwPT09ZVtyXSl7aWYoaSBpbnN0YW5jZW9mIEVycm9yKXRocm93IGk7dFtyXT1pfWVsc2UgdFtyXT0iZGVzdGluYXRpb25Sb3ciPT09ciYmdC5yZXZlcnNlZFJvd0Nvb3Jkcz90aGlzLmhvdC5jb3Vu''@;'; put 'put ''dFJvd3MoKS1lW3JdLTE6ZVtyXX1lbHNlIHRbcl09aX1yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbihlLHQscil7aWYoImZ1bmN0aW9uIiE9PXRoaXMuc2V0dGluZ3NUeXBlKXJldHVybjtjb25zdCBpPWUuaW5kZXhPZigicm93Iik+LTE/InJvdyI6ImNvbCIsbz10aGlzLmdl''@;'; put 'put ''dEFsbEVuZHBvaW50cygpO1huKG8sYT0+eyJyb3ciPT09aSYmYS5kZXN0aW5hdGlvblJvdz49dCYmKCJpbnNlcnRfcm93Ij09PWU/YS5hbHRlclJvd09mZnNldD1yOiJyZW1vdmVfcm93Ij09PWUmJihhLmFsdGVyUm93T2Zmc2V0PS0xKnIpKSwiY29sIj09PWkmJmEuZGVzdGluYXRpb25Db2x1''@;'; put 'put ''bW4+PXQmJigiaW5zZXJ0X2NvbCI9PT1lP2EuYWx0ZXJDb2x1bW5PZmZzZXQ9cjoicmVtb3ZlX2NvbCI9PT1lJiYoYS5hbHRlckNvbHVtbk9mZnNldD0tMSpyKSl9KSx0aGlzLnJlc2V0QWxsRW5kcG9pbnRzKG8sITEpfXJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oZSx0LHIs''@;'; put 'put ''aSxvLGE9ITApe2lmKCJhdXRvIj09PW8pcmV0dXJuO2lmKCJmdW5jdGlvbiI9PT10aGlzLnNldHRpbmdzVHlwZSl7Y29uc3QgWj0oKT0+KHRoaXMuaG90LnJlbW92ZUhvb2soImJlZm9yZVZpZXdSZW5kZXIiLFopLHRoaXMucmVmcmVzaEFsbEVuZHBvaW50cygpKTtyZXR1cm4gdm9pZCB0aGlz''@;'; put 'put ''LmhvdC5hZGRIb29rT25jZSgiYmVmb3JlVmlld1JlbmRlciIsWil9Y29uc3QgbD1lLmluZGV4T2YoInJvdyIpPi0xPyJyb3ciOiJjb2wiLHU9ZS5pbmRleE9mKCJyZW1vdmUiKT4tMT8tMToxLGc9dGhpcy5nZXRBbGxFbmRwb2ludHMoKSxFPTA9PT1lLmluZGV4T2YoIm1vdmVfcm93IiksTz10''@;'; put 'put ''O1huKGcsWj0+eyJyb3ciPT09bCYmWi5kZXN0aW5hdGlvblJvdz49TyYmKFouYWx0ZXJSb3dPZmZzZXQ9dSpyKSwiY29sIj09PWwmJlouZGVzdGluYXRpb25Db2x1bW4+PU8mJihaLmFsdGVyQ29sdW1uT2Zmc2V0PXUqcil9KSx0aGlzLnJlc2V0QWxsRW5kcG9pbnRzKGcsIUUpLFhuKGcsRT9a''@;'; put 'put ''PT57dGhpcy5leHRlbmRFbmRwb2ludFJhbmdlcyhaLE8saT8uWzBdPz8wLGk/Lmxlbmd0aD8/MCksdGhpcy5yZWNyZWF0ZVBoeXNpY2FsUmFuZ2VzKFopLHRoaXMuY2xlYXJPZmZzZXRJbmZvcm1hdGlvbihaKX06Wj0+e3RoaXMuc2hpZnRFbmRwb2ludENvb3JkaW5hdGVzKFosTyl9KSxhJiZ0''@;'; put 'put ''aGlzLnJlZnJlc2hBbGxFbmRwb2ludHMoKX1jbGVhck9mZnNldEluZm9ybWF0aW9uKGUpe2UuYWx0ZXJSb3dPZmZzZXQ9dm9pZCAwLGUuYWx0ZXJDb2x1bW5PZmZzZXQ9dm9pZCAwfWV4dGVuZEVuZHBvaW50UmFuZ2VzKGUsdCxyLGkpe1huKGUucmFuZ2VzLG89PntvWzFdJiYodD49b1swXSYm''@;'; put 'put ''dDw9b1sxXT9yPm9bMV0/b1sxXSs9aTpyPG9bMF0mJihvWzBdLT1pKTpyPj1vWzBdJiZyPD1vWzFdJiYob1sxXS09aSx0PD1vWzBdJiYob1swXSs9MSxvWzFdKz0xKSkpfSl9cmVjcmVhdGVQaHlzaWNhbFJhbmdlcyhlKXtjb25zdCByPVtdLGk9W107WG4oZS5yYW5nZXMsbz0+e2NvbnN0IGE9''@;'; put 'put ''W107aWYob1sxXSlmb3IobGV0IGw9b1swXTtsPD1vWzFdO2wrKylhLnB1c2godGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSk7ZWxzZSBhLnB1c2godGhpcy5ob3QudG9QaHlzaWNhbFJvdyhvWzBdKSk7aS5wdXNoKGEpfSksWG4oaSxvPT57bGV0IGE9W107WG4obywobCx1KT0+ezA9PT11P2Eu''@;'; put 'put ''cHVzaChsKTpvW3VdIT09b1t1LTFdKzEmJihhLnB1c2gob1t1LTFdKSxyLnB1c2goYSksYT1bXSxhLnB1c2gobCkpLHU9PT1vLmxlbmd0aC0xJiYoYS5wdXNoKGwpLHIucHVzaChhKSl9KX0pLGUucmFuZ2VzPXJ9c2hpZnRFbmRwb2ludENvb3JkaW5hdGVzKGUsdCl7ZS5hbHRlclJvd09mZnNl''@;'; put 'put ''dCYmMCE9PWUuYWx0ZXJSb3dPZmZzZXQ/KGUuZGVzdGluYXRpb25Sb3crPWUuYWx0ZXJSb3dPZmZzZXR8fDAsWG4oZS5yYW5nZXMscj0+e1huKHIsKGksbyk9PntpPj10JiYocltvXSs9ZS5hbHRlclJvd09mZnNldHx8MCl9KX0pKTplLmFsdGVyQ29sdW1uT2Zmc2V0JiYwIT09ZS5hbHRlckNv''@;'; put 'put ''bHVtbk9mZnNldCYmKGUuZGVzdGluYXRpb25Db2x1bW4rPWUuYWx0ZXJDb2x1bW5PZmZzZXR8fDAsZS5zb3VyY2VDb2x1bW4rPWUuYWx0ZXJDb2x1bW5PZmZzZXR8fDApfXJlc2V0QWxsRW5kcG9pbnRzKGU9dGhpcy5nZXRBbGxFbmRwb2ludHMoKSx0PSEwKXtlLnNvbWUoaT0+e2NvbnN0IGE9''@;'; put 'put ''aS5hbHRlckNvbHVtbk9mZnNldHx8MDtyZXR1cm4gaS5kZXN0aW5hdGlvblJvdysoaS5hbHRlclJvd09mZnNldHx8MCk+PXRoaXMuaG90LmNvdW50Um93cygpfHxpLmRlc3RpbmF0aW9uQ29sdW1uK2E+PXRoaXMuaG90LmNvdW50Q29scygpfSl8fCh0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSxY''@;'; put 'put ''bihlLGk9Pnt0aGlzLnJlc2V0RW5kcG9pbnRWYWx1ZShpLHQpfSksdGhpcy5jZWxsc1RvU2V0Q2FjaGUubGVuZ3RoJiZ0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMuY2VsbHNUb1NldENhY2hlLG51bGwsdm9pZCAwLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2Fj''@;'; put 'put ''aGU9W10pfXJlZnJlc2hBbGxFbmRwb2ludHMoKXt0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSxYbih0aGlzLmdldEFsbEVuZHBvaW50cygpLGU9Pnt0aGlzLmN1cnJlbnRFbmRwb2ludD1lLHRoaXMucGx1Z2luLmNhbGN1bGF0ZShlKSx0aGlzLnNldEVuZHBvaW50VmFsdWUoZSwiaW5pdCIpfSks''@;'; put 'put ''dGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbCx0aGlzLmNlbGxzVG9TZXRDYWNoZS5sZW5ndGgmJnRoaXMuaG90LnNldERhdGFBdENlbGwodGhpcy5jZWxsc1RvU2V0Q2FjaGUsbnVsbCx2b2lkIDAsIkNvbHVtblN1bW1hcnkucmVzZXQiKSx0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXX1yZWZyZXNo''@;'; put 'put ''Q2hhbmdlZEVuZHBvaW50cyhlKXtjb25zdCB0PVtdO3RoaXMuY2VsbHNUb1NldENhY2hlPVtdLFhuKGUsKHIsaSxvKT0+e2Ake3JbMl18fCIifWAhPWAke3JbM119YCYmWG4odGhpcy5nZXRBbGxFbmRwb2ludHMoKSwobCx1KT0+e3RoaXMuaG90LnByb3BUb0NvbChvW2ldWzFdKT09PWwuc291''@;'; put 'put ''cmNlQ29sdW1uJiYtMT09PXQuaW5kZXhPZih1KSYmdC5wdXNoKHUpfSl9KSxYbih0LHI9Pnt0aGlzLnJlZnJlc2hFbmRwb2ludCh0aGlzLmdldEVuZHBvaW50KHIpKX0pLHRoaXMuY2VsbHNUb1NldENhY2hlLmxlbmd0aCYmdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbCh0aGlzLmNlbGxzVG9TZXRD''@;'; put 'put ''YWNoZSxudWxsLHZvaWQgMCwiQ29sdW1uU3VtbWFyeS5yZXNldCIpLHRoaXMuY2VsbHNUb1NldENhY2hlPVtdfXJlZnJlc2hFbmRwb2ludHNCeVNvdXJjZUNvbHVtbnMoZSl7Y29uc3QgdD1lIGluc3RhbmNlb2YgU2V0P2U6bmV3IFNldChlKSxyPXRoaXMuZ2V0QWxsRW5kcG9pbnRzKCkuZmls''@;'; put 'put ''dGVyKGk9PnQuaGFzKGkuc291cmNlQ29sdW1uKSk7MCE9PXIubGVuZ3RoJiYodGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10sWG4ocixpPT57dGhpcy5yZWZyZXNoRW5kcG9pbnQoaSl9KSx0aGlzLmNlbGxzVG9TZXRDYWNoZS5sZW5ndGgmJnRoaXMuaG90LnNldERhdGFBdENlbGwodGhpcy5jZWxs''@;'; put 'put ''c1RvU2V0Q2FjaGUsbnVsbCx2b2lkIDAsIkNvbHVtblN1bW1hcnkucmVzZXQiKSx0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSl9cmVmcmVzaENlbGxNZXRhcygpe3RoaXMuZW5kcG9pbnRzLmZvckVhY2goZT0+e2NvbnN0IHQ9dGhpcy5ob3QudG9WaXN1YWxSb3coZS5kZXN0aW5hdGlvblJvdyk7''@;'; put 'put ''aWYobnVsbCE9PXQpe2NvbnN0IHI9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEodCxlLmRlc3RpbmF0aW9uQ29sdW1uKTtyLnJlYWRPbmx5PWUucmVhZE9ubHksci5jbGFzc05hbWU9ImNvbHVtblN1bW1hcnlSZXN1bHQifX0pfXJlZnJlc2hFbmRwb2ludChlKXt0aGlzLmN1cnJlbnRFbmRwb2ludD1l''@;'; put 'put ''LHRoaXMucGx1Z2luLmNhbGN1bGF0ZShlKSx0aGlzLnNldEVuZHBvaW50VmFsdWUoZSx2b2lkIDApLHRoaXMuY3VycmVudEVuZHBvaW50PW51bGx9cmVzZXRFbmRwb2ludFZhbHVlKGUsdD0hMCl7Y29uc3QgaT1lLmFsdGVyQ29sdW1uT2Zmc2V0fHwwO3RoaXMuY2VsbHNUb1NldENhY2hlLnB1''@;'; put 'put ''c2goW3RoaXMuaG90LnRvVmlzdWFsUm93KGUuZGVzdGluYXRpb25Sb3crKHQmJmUuYWx0ZXJSb3dPZmZzZXR8fDApKSx0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihlLmRlc3RpbmF0aW9uQ29sdW1uKyh0P2k6MCkpLCIiXSl9c2V0RW5kcG9pbnRWYWx1ZShlLHQscj0hMSl7Y29uc3QgaT10aGlz''@;'; put 'put ''LmhvdC50b1Zpc3VhbFJvdyhlLmRlc3RpbmF0aW9uUm93KTtpZihlLmRlc3RpbmF0aW9uUm93Pj10aGlzLmhvdC5jb3VudFJvd3MoKXx8ZS5kZXN0aW5hdGlvbkNvbHVtbj49dGhpcy5ob3QuY291bnRDb2xzKCkpcmV0dXJuIHZvaWQgdGhpcy50aHJvd091dE9mQm91bmRzV2FybmluZygpO2Nv''@;'; put 'put ''bnN0IG89dGhpcy5ob3QudG9WaXN1YWxSb3coZS5kZXN0aW5hdGlvblJvdyk7aWYobnVsbCE9PW8pe2NvbnN0IGE9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobyxlLmRlc3RpbmF0aW9uQ29sdW1uKTsoImluaXQiPT09dHx8YS5yZWFkT25seSE9PWUucmVhZE9ubHkpJiYoYS5yZWFkT25seT1lLnJl''@;'; put 'put ''YWRPbmx5LGEuY2xhc3NOYW1lPSJjb2x1bW5TdW1tYXJ5UmVzdWx0Iil9ZS5yZXN1bHQ9ZnVuY3Rpb24gX0h0KG4sZSl7aWYoIm51bWJlciIhPXR5cGVvZiBuKXJldHVybiBuO3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJudW1iZXIiOnJldHVybiBuLnRvRml4ZWQoTWF0aC5taW4oTWF0aC5tYXgo''@;'; put 'put ''MCxlKSwxMDApKTtjYXNlImJvb2xlYW4iOnJldHVybiBlP01hdGgucm91bmQobikudG9TdHJpbmcoKTpuO2Nhc2Uic3RyaW5nIjppZigiYXV0byI9PT1lKXtjb25zdCByPU1hdGgucm91bmQobikudG9TdHJpbmcoKS5sZW5ndGg7cmV0dXJuIG4udG9GaXhlZCg4LXIpfXJldHVybiBuO2RlZmF1''@;'; put 'put ''bHQ6cmV0dXJuIG59fShlLnJlc3VsdCxlLnJvdW5kRmxvYXQpLHI/dGhpcy5ob3Quc2V0RGF0YUF0Q2VsbChpLGUuZGVzdGluYXRpb25Db2x1bW4sZS5yZXN1bHQsIkNvbHVtblN1bW1hcnkuc2V0Iik6dGhpcy5jZWxsc1RvU2V0Q2FjaGUucHVzaChbaSxlLmRlc3RpbmF0aW9uQ29sdW1uLGUu''@;'; put 'put ''cmVzdWx0XSksZS5hbHRlclJvd09mZnNldD12b2lkIDAsZS5hbHRlckNvbHVtbk9mZnNldD12b2lkIDB9dGhyb3dPdXRPZkJvdW5kc1dhcm5pbmcoKXtIYSgiT25lIG9mIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW5zJyBkZXN0aW5hdGlvbiBwb2ludHMgeW91IHByb3ZpZGVkIGlzIGJleW9u''@;'; put 'put ''ZCB0aGUgdGFibGUgYm91bmRhcmllcyEiKX1jb25zdHJ1Y3RvcihlLHQpe3RoaXMuZW5kcG9pbnRzPVtdLHRoaXMuc2V0dGluZ3NUeXBlPSJhcnJheSIsdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbCx0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSx0aGlzLnBsdWdpbj1lLHRoaXMuaG90PXRoaXMu''@;'; put 'put ''cGx1Z2luLmhvdCx0aGlzLnNldHRpbmdzPXR9fTtmdW5jdGlvbiB2TmUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQobil9ZnVuY3Rpb24gcF8obixl''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24gQ0h0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obix2TmUobixlLCJnZXQiKSl9ZnVuY3Rpb24gZ18obixlLHQpeyhmdW5jdGlvbiB3SHQobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlh''@;'; put 'put ''bGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIHY2KG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gU0h0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obix2TmUobixlLCJzZXQiKSx0KSx0fWNvbnN0IGMxZT0iY29sdW1uU3VtbWFyeSI7dmFyIFdPPW5ldyBXZWFrTWFwLHUxZT1uZXcgV2Vha01hcCxkMWU9bmV3IFdl''@;'; put 'put ''YWtNYXAsaDFlPW5ldyBXZWFrTWFwLGYxZT1uZXcgV2Vha01hcCxwMWU9bmV3IFdlYWtNYXAsZzFlPW5ldyBXZWFrTWFwLG0xZT1uZXcgV2Vha01hcDtjbGFzcyBNSHQgZXh0ZW5kcyBhbHtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gYzFlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9S''@;'; put 'put ''SVRZKCl7cmV0dXJuIDIyMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbYzFlXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnNldHRpbmdzPXRoaXMuaG90LmdldFNldHRpbmdzKClbYzFlXSx0aGlzLmVuZHBvaW50cz1uZXcgYkh0KHRoaXMs''@;'; put 'put ''dGhpcy5zZXR0aW5ncyksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLHBfKHRoaXMsdTFlKSksdGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIscF8odGhpcyxoMWUpKSx0aGlzLmFkZEhvb2soImFmdGVyVXBkYXRlU2V0dGluZ3MiLHBfKHRoaXMsZDFlKSksdGhpcy5hZGRIb29rKCJhZnRlckxv''@;'; put 'put ''YWREYXRhIixwXyh0aGlzLGYxZSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJVcGRhdGVEYXRhIixwXyh0aGlzLHAxZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlUm93IiwoZSx0KT0+e3RoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRf''@;'; put 'put ''cm93IixlLHQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVDb2wiLChlLHQpPT57dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9jb2wiLGUsdCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsKGUsdCk9Pnt0aGlz''@;'; put 'put ''LmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX3JvdyIsZSx0KX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ29sIiwoZSx0KT0+e3RoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVf''@;'; put 'put ''Y29sIixlLHQpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsKGUsdCxyKT0+e3RoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9yb3ciLGUsdCxudWxsLHIpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsKGUsdCxy''@;'; put 'put ''KT0+e3RoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9jb2wiLGUsdCxudWxsLHIpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsKGUsdCxyLGkpPT50aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRl''@;'; put 'put ''cmF0aW9uKCJyZW1vdmVfcm93IixlLHQscixpKSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZUNvbCIsKGUsdCxyLGkpPT50aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfY29sIixlLHQscixpKSksdGhpcy5hZGRIb29rKCJhZnRlclJv''@;'; put 'put ''d01vdmUiLHBfKHRoaXMsbTFlKSksdGhpcy5hZGRIb29rKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixwXyh0aGlzLGcxZSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5lbmRwb2ludHM9bnVsbCx0aGlzLnNldHRpbmdzPW51bGwsdGhpcy5jdXJyZW50''@;'; put 'put ''RW5kcG9pbnQ9bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmVuZHBvaW50cy5pbml0RW5kcG9pbnRzKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9Y2FsY3VsYXRlKGUpe3N3aXRjaChl''@;'; put 'put ''LnR5cGUudG9Mb3dlckNhc2UoKSl7Y2FzZSJzdW0iOmUucmVzdWx0PXRoaXMuY2FsY3VsYXRlU3VtKGUpO2JyZWFrO2Nhc2UibWluIjpjYXNlIm1heCI6ZS5yZXN1bHQ9dGhpcy5jYWxjdWxhdGVNaW5NYXgoZSxlLnR5cGUpO2JyZWFrO2Nhc2UiY291bnQiOmUucmVzdWx0PXRoaXMuY291bnRF''@;'; put 'put ''bnRyaWVzKGUpO2JyZWFrO2Nhc2UiYXZlcmFnZSI6ZS5yZXN1bHQ9dGhpcy5jYWxjdWxhdGVBdmVyYWdlKGUpO2JyZWFrO2Nhc2UiY3VzdG9tIjplLnJlc3VsdD1lLmN1c3RvbUZ1bmN0aW9uLmNhbGwodGhpcyxlKX19Y2FsY3VsYXRlU3VtKGUpe2xldCB0PTA7Zm9yKGNvbnN0IHIgb2YgZS5y''@;'; put 'put ''YW5nZXMpdCs9dGhpcy5nZXRQYXJ0aWFsU3VtKHIsZS5zb3VyY2VDb2x1bW4pO3JldHVybiB0fWdldFBhcnRpYWxTdW0oZSx0KXtsZXQgcj0wLGk9ZVsxXXx8ZVswXSxvPW51bGwsYT0wO2Rve2NvbnN0IGw9dGhpcy5nZXRDZWxsVmFsdWUoaSx0KTtpZihvPWwxZShsKT9udWxsOk51bWJlcihs''@;'; put 'put ''KSxudWxsIT09byl7Y29uc3QgdT0oYCR7b31gLnNwbGl0KCIuIilbMV18fFtdKS5sZW5ndGh8fDE7dT5hJiYoYT11KX1yKz1vPz8wLGktPTF9d2hpbGUoaT49ZVswXSk7cmV0dXJuIE1hdGgucm91bmQocioxMCoqYSkvMTAqKmF9Y2FsY3VsYXRlTWluTWF4KGUsdCl7bGV0IHI9bnVsbDtmb3Io''@;'; put 'put ''Y29uc3QgaSBvZiBlLnJhbmdlcyl7Y29uc3Qgbz10aGlzLmdldFBhcnRpYWxNaW5NYXgoaSxlLnNvdXJjZUNvbHVtbix0KTtpZihudWxsPT09ciYmbnVsbCE9PW8mJihyPW8pLG51bGwhPT1vKXN3aXRjaCh0KXtjYXNlIm1pbiI6cj1NYXRoLm1pbihyLG8pO2JyZWFrO2Nhc2UibWF4IjpyPU1h''@;'; put 'put ''dGgubWF4KHIsbyl9fXJldHVybiBudWxsPT09cj8iTm90IGVub3VnaCBkYXRhIjpyfWdldFBhcnRpYWxNaW5NYXgoZSx0LHIpe2xldCBhLGk9bnVsbCxvPWVbMV18fGVbMF07ZG97Y29uc3QgbD10aGlzLmdldENlbGxWYWx1ZShvLHQpO2lmKGE9bDFlKGwpP251bGw6TnVtYmVyKGwpLG51bGw9''@;'; put 'put ''PT1pKWk9YTtlbHNlIGlmKG51bGwhPT1hKXN3aXRjaChyKXtjYXNlIm1pbiI6aT1NYXRoLm1pbihpLGEpO2JyZWFrO2Nhc2UibWF4IjppPU1hdGgubWF4KGksYSl9by09MX13aGlsZShvPj1lWzBdKTtyZXR1cm4gaX1jb3VudEVtcHR5KGUsdCl7bGV0IHIsaT0wLG89ZVsxXXx8ZVswXTtkb3ty''@;'; put 'put ''PXRoaXMuZ2V0Q2VsbFZhbHVlKG8sdCkscj1sMWUocik/bnVsbDpyLG51bGw9PT1yJiYoaSs9MSksby09MX13aGlsZShvPj1lWzBdKTtyZXR1cm4gaX1jb3VudEVudHJpZXMoZSl7bGV0IHQ9MDtjb25zdCByPWUucmFuZ2VzO2Zvcihjb25zdCBpIG9mIHIpdCs9dm9pZCAwPT09aVsxXT8xOmlb''@;'; put 'put ''MV0taVswXSsxLHQtPXRoaXMuY291bnRFbXB0eShpLGUuc291cmNlQ29sdW1uKTtyZXR1cm4gdH1jYWxjdWxhdGVBdmVyYWdlKGUpe3JldHVybiB0aGlzLmNhbGN1bGF0ZVN1bShlKS90aGlzLmNvdW50RW50cmllcyhlKX1nZXRDZWxsVmFsdWUoZSx0KXtjb25zdCByPXRoaXMuaG90LnRvVmlz''@;'; put 'put ''dWFsUm93KGUpO2xldCBpPW51bGwhPT1yP3RoaXMuaG90LmdldERhdGFBdENlbGwocix0KTp0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKGUsdCksbz0iIjtyZXR1cm4gbnVsbCE9PXImJihvPXRoaXMuaG90LmdldENlbGxNZXRhKHIsdCkuY2xhc3NOYW1lfHwiIiksby5pbmRleE9mKCJj''@;'; put 'put ''b2x1bW5TdW1tYXJ5UmVzdWx0Iik+LTE/bnVsbDoodGhpcy5lbmRwb2ludHMuY3VycmVudEVuZHBvaW50LmZvcmNlTnVtZXJpYyYmKCJzdHJpbmciPT10eXBlb2YgaSYmKGk9aS5yZXBsYWNlKC8sLywiLiIpKSxpPXBhcnNlRmxvYXQoaSkpLGlzTmFOKE51bWJlcihpKSkmJih0aGlzLmVuZHBv''@;'; put 'put ''aW50cy5jdXJyZW50RW5kcG9pbnQuc3VwcHJlc3NEYXRhVHlwZUVycm9yc3x8SnIoeWNgQ29sdW1uU3VtbWFyeSBwbHVnaW46IGNlbGwgYXQgKCR7ZX0sICR7dH0pIGlzIG5vdCBpbiBhXHgyMAogICAgICAgICAgbnVtZXJpYyBmb3JtYXQuIENhbm5vdCBkbyB0aGUgY2FsY3VsYXRpb24uYCkp''@;'; put 'put ''LGkpfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLGdfKHRoaXMsV08se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGdfKHRoaXMsdTFlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxnXyh0aGlzLGQxZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZ18odGhpcyxoMWUs''@;'; put 'put ''e3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGdfKHRoaXMsZjFlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxnXyh0aGlzLHAxZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZ18odGhpcyxnMWUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGdfKHRoaXMsbTFlLHt3cml0''@;'; put 'put ''YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0aGlzLmVuZHBvaW50cz1udWxsLHY2KHRoaXMsV08sITEpLHY2KHRoaXMsdTFlLCgpPT57dGhpcy5lbmRwb2ludHMuaW5pdEVuZHBvaW50cygpfSksdjYodGhpcyxkMWUsdD0+e3ZvaWQgMCE9PXQuY29sdW1ucyYmdGhpcy5lbmRwb2ludHMucmVmcmVz''@;'; put 'put ''aENlbGxNZXRhcygpfSksdjYodGhpcyxoMWUsKHQscik9Pnt0JiYiQ29sdW1uU3VtbWFyeS5yZXNldCIhPT1yJiYiQ29sdW1uU3VtbWFyeS5zZXQiIT09ciYmImxvYWREYXRhIiE9PXImJnRoaXMuZW5kcG9pbnRzLnJlZnJlc2hDaGFuZ2VkRW5kcG9pbnRzKHQpfSksdjYodGhpcyxmMWUsKHQs''@;'; put 'put ''cik9PntyfHx0aGlzLmVuZHBvaW50cy5yZWZyZXNoQWxsRW5kcG9pbnRzKCl9KSx2Nih0aGlzLHAxZSwodCxyKT0+e3J8fHRoaXMuZW5kcG9pbnRzLnJlZnJlc2hBbGxFbmRwb2ludHMoKX0pLHY2KHRoaXMsZzFlLHQ9PntpZihwXyh0aGlzLFdPKXx8IXRoaXMuZW5kcG9pbnRzfHwhdD8ubGVu''@;'; put 'put ''Z3RoKXJldHVybjtjb25zdCByPXRoaXMuaG90LmdldFBsdWdpbigiZm9ybXVsYXMiKTtpZighcj8uZW5hYmxlZClyZXR1cm47Y29uc3QgaT1yLnNoZWV0SWQsbz1uZXcgU2V0O2lmKHQuZm9yRWFjaChsPT57bD8uYWRkcmVzcz8uc2hlZXQ9PT1pJiZvLmFkZChsLmFkZHJlc3MuY29sKX0pLDA9''@;'; put 'put ''PT1vLnNpemUpcmV0dXJuO2NvbnN0IGE9bmV3IFNldDtpZih0aGlzLmVuZHBvaW50cy5nZXRBbGxFbmRwb2ludHMoKS5mb3JFYWNoKGw9Pntjb25zdCB1PXIuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwuc291cmNlQ29sdW1uPz8wKTtvLmhhcyh1KSYmYS5h''@;'; put 'put ''ZGQobC5zb3VyY2VDb2x1bW4/PzApfSksMCE9PWEuc2l6ZSl7djYodGhpcyxXTywhMCk7dHJ5e3RoaXMuZW5kcG9pbnRzLnJlZnJlc2hFbmRwb2ludHNCeVNvdXJjZUNvbHVtbnMoYSl9ZmluYWxseXt2Nih0aGlzLFdPLCExKX19fSksdjYodGhpcyxtMWUsKHQscik9Pnt0aGlzLmVuZHBvaW50''@;'; put 'put ''cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigibW92ZV9yb3ciLHRbMF0sdC5sZW5ndGgpLHRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oIm1vdmVfcm93IixyLHQubGVuZ3RoLHQsdGhpcy5wbHVnaW5OYW1lKX0pfX1mdW5jdGlv''@;'; put 'put ''biBfTmUobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHlOZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0''@;'; put 'put ''dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBtXyhuLGUpe3JldHVybiBmdW5jdGlvbiBUSHQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLHlOZShuLGUsImdldCIpKX1mdW5j''@;'; put 'put ''dGlvbiB2MWUobixlLHQpe19OZShuLGUpLGUuc2V0KG4sdCl9ZnVuY3Rpb24galQobixlLHQpe3JldHVybiBmdW5jdGlvbiB4SHQobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQg''@;'; put 'put ''cmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLHlOZShuLGUsInNldCIpLHQpLHR9dmFyIFlPPW5ldyBXZWFrTWFwLEd3PW5ldyBXZWFrTWFwLFpPPW5ldyBXZWFrTWFwLGJOZT1uZXcgV2Vha1NldDtjbGFzcyB3TmV7c2V0T2JzZXJ2ZWRFbGVtZW50KGUpe2pUKHRoaXMs''@;'; put 'put ''R3csZSl9dW5vYnNlcnZlKCl7bV8odGhpcyxHdykmJm1fKHRoaXMsWk8pLnVub2JzZXJ2ZShtXyh0aGlzLEd3KSl9b2JzZXJ2ZSgpe2pUKHRoaXMsWU8sITApLG1fKHRoaXMsR3cpJiZtXyh0aGlzLFpPKS5vYnNlcnZlKG1fKHRoaXMsR3cpKX1kZXN0cm95KCl7bV8odGhpcyxaTykuZGlzY29u''@;'; put 'put ''bmVjdCgpfWNvbnN0cnVjdG9yKCl7KGZ1bmN0aW9uIGtIdChuLGUpe19OZShuLGUpLGUuYWRkKG4pfSkodGhpcyxiTmUpLHYxZSh0aGlzLFlPLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx2MWUodGhpcyxHdyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdjFlKHRoaXMsWk8se3dy''@;'; put 'put ''aXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGpUKHRoaXMsWU8sITApLGpUKHRoaXMsR3csbnVsbCksalQodGhpcyxaTyxuZXcgUmVzaXplT2JzZXJ2ZXIoZT0+ZnVuY3Rpb24gQUh0KG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2''@;'; put 'put ''YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiB0fSh0aGlzLGJOZSxSSHQpLmNhbGwodGhpcyxlKSkpfX1mdW5jdGlvbiBSSHQobil7IW1fKHRoaXMsWU8pJiZBcnJheS5pc0FycmF5KG4pJiZuLmxlbmd0aD9uLmZvckVhY2goKHtib3JkZXJCb3hTaXplOmV9KT0+e2NvbnN0e2lu''@;'; put 'put ''bGluZVNpemU6dCxibG9ja1NpemU6cn09ZVswXTt0aGlzLnJ1bkxvY2FsSG9va3MoInJlc2l6ZSIsdCxyKX0pOmpUKHRoaXMsWU8sITEpfWZ1bmN0aW9uIENOZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxk''@;'; put 'put ''IG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBiYyhuLGUpe3JldHVybiBmdW5jdGlvbiBESHQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLENOZShuLGUsImdldCIpKX1mdW5jdGlvbiB2XyhuLGUsdCl7KGZ1bmN0aW9uIElIdChu''@;'; put 'put ''LGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLGUpLGUuc2V0KG4sdCl9ZnVuY3Rpb24gJDIobixlLHQpe3JldHVybiBmdW5jdGlvbiBMSHQobixlLHQp''@;'; put 'put ''e2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLENOZShuLGUsInNldCIpLHQpLHR9WWwod05lLF9oKTt2YXIgVVQ9bmV3''@;'; put 'put ''IFdlYWtNYXAsXzFlPW5ldyBXZWFrTWFwLHpaPW5ldyBXZWFrTWFwLEE0PW5ldyBXZWFrTWFwLEY3PW5ldyBXZWFrTWFwLGZtPW5ldyBXZWFrTWFwLEdPPW5ldyBXZWFrTWFwLCR3PW5ldyBXZWFrTWFwO2NsYXNzIHF3e3N0YXRpYyBnZXQgQ0xBU1NfRURJVE9SX0NPTlRBSU5FUigpe3JldHVy''@;'; put 'put ''biJodENvbW1lbnRzQ29udGFpbmVyIn1zdGF0aWMgZ2V0IENMQVNTX0VESVRPUigpe3JldHVybiJodENvbW1lbnRzIn1zdGF0aWMgZ2V0IENMQVNTX0lOUFVUKCl7cmV0dXJuImh0Q29tbWVudFRleHRBcmVhIn1zdGF0aWMgZ2V0IENMQVNTX0NFTEwoKXtyZXR1cm4iaHRDb21tZW50Q2VsbCJ9''@;'; put 'put ''c2V0UG9zaXRpb24oZSx0KXtiYyh0aGlzLGZtKSYmKGJjKHRoaXMsZm0pLmxlZnQ9YCR7ZX1weGAsYmModGhpcyxmbSkudG9wPWAke3R9cHhgKX1zZXRTaXplKGUsdCl7aWYoZSYmdCl7Y29uc3Qgcj10aGlzLmdldElucHV0RWxlbWVudCgpO3Iuc3R5bGUud2lkdGg9YCR7ZX1weGAsci5zdHls''@;'; put 'put ''ZS5oZWlnaHQ9YCR7dH1weGB9fWdldFNpemUoKXtyZXR1cm57d2lkdGg6WmQodGhpcy5nZXRJbnB1dEVsZW1lbnQoKSksaGVpZ2h0OkhoKHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkpfX1vYnNlcnZlU2l6ZSgpe2JjKHRoaXMsJHcpLm9ic2VydmUoKX1yZXNldFNpemUoKXtjb25zdCBlPXRoaXMu''@;'; put 'put ''Z2V0SW5wdXRFbGVtZW50KCk7ZS5zdHlsZS53aWR0aD0iIixlLnN0eWxlLmhlaWdodD0iIn1zZXRSZWFkT25seVN0YXRlKGUpe3RoaXMuZ2V0SW5wdXRFbGVtZW50KCkucmVhZE9ubHk9ZX1zaG93KCl7YmModGhpcyxmbSkmJihiYyh0aGlzLGZtKS5kaXNwbGF5PSJibG9jayIpLCQyKHRoaXMs''@;'; put 'put ''R08sITEpfWhpZGUoKXtiYyh0aGlzLCR3KS51bm9ic2VydmUoKSxiYyh0aGlzLEdPKXx8YmModGhpcyxmbSkmJihiYyh0aGlzLGZtKS5kaXNwbGF5PSJub25lIiksJDIodGhpcyxHTywhMCl9aXNWaXNpYmxlKCl7cmV0dXJuImJsb2NrIj09PWJjKHRoaXMsZm0pPy5kaXNwbGF5fXNldFZhbHVl''@;'; put 'put ''KGU9IiIpe2NvbnN0IHQ9ZXx8IiI7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS52YWx1ZT10fWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkudmFsdWV9aXNGb2N1c2VkKCl7cmV0dXJuIGJjKHRoaXMsVVQpLmFjdGl2ZUVsZW1lbnQ9PT10aGlzLmdldElucHV0RWxlbWVu''@;'; put 'put ''dCgpfWZvY3VzKCl7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS5mb2N1cygpfWNyZWF0ZUVkaXRvcigpe2NvbnN0IGU9YmModGhpcyxVVCkuY3JlYXRlRWxlbWVudCgiZGl2IiksdD1iYyh0aGlzLFVUKS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO3JldHVybiBlLnN0eWxlLmRpc3BsYXk9Im5v''@;'; put 'put ''bmUiLCQyKHRoaXMsQTQsYmModGhpcyxVVCkuY3JlYXRlRWxlbWVudCgiZGl2IikpLGJjKHRoaXMsQTQpLnNldEF0dHJpYnV0ZSgiZGlyIixiYyh0aGlzLHpaKT8icnRsIjoibHRyIiksWXIoYmModGhpcyxBNCkscXcuQ0xBU1NfRURJVE9SX0NPTlRBSU5FUiksYmModGhpcyxfMWUpLmFwcGVu''@;'; put 'put ''ZENoaWxkKGJjKHRoaXMsQTQpKSxZcihlLHF3LkNMQVNTX0VESVRPUiksWXIodCxxdy5DTEFTU19JTlBVVCksdC5kYXRhc2V0LmhvdElucHV0PSJ0cnVlIixlLmFwcGVuZENoaWxkKHQpLGJjKHRoaXMsQTQpLmFwcGVuZENoaWxkKGUpLGV9Z2V0SW5wdXRFbGVtZW50KCl7cmV0dXJuIGJjKHRo''@;'; put 'put ''aXMsRjcpPy5xdWVyeVNlbGVjdG9yKGAuJHtxdy5DTEFTU19JTlBVVH1gKT8/bnVsbH1nZXRFZGl0b3JFbGVtZW50KCl7cmV0dXJuIGJjKHRoaXMsRjcpfWRlc3Ryb3koKXtjb25zdCBlPWJjKHRoaXMsQTQpP2JjKHRoaXMsQTQpLnBhcmVudE5vZGU6bnVsbDtiYyh0aGlzLEY3KT8ucGFyZW50''@;'; put 'put ''Tm9kZT8ucmVtb3ZlQ2hpbGQoYmModGhpcyxGNykpLCQyKHRoaXMsRjcsbnVsbCksJDIodGhpcyxmbSxudWxsKSxiYyh0aGlzLCR3KS5kZXN0cm95KCksZSYmYmModGhpcyxBNCkmJmUucmVtb3ZlQ2hpbGQoYmModGhpcyxBNCkpfWNvbnN0cnVjdG9yKGUsdCxyKXt2Xyh0aGlzLFVULHt3cml0''@;'; put 'put ''YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx2Xyh0aGlzLF8xZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdl8odGhpcyx6Wix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdl8odGhpcyxBNCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdl8odGhpcyxGNyx7d3JpdGFibGU6ITAs''@;'; put 'put ''dmFsdWU6dm9pZCAwfSksdl8odGhpcyxmbSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdl8odGhpcyxHTyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdl8odGhpcywkdyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksJDIodGhpcyx6WiwhMSksJDIodGhpcyxBNCxudWxsKSwk''@;'; put 'put ''Mih0aGlzLEY3LG51bGwpLCQyKHRoaXMsZm0sbnVsbCksJDIodGhpcyxHTywhMCksJDIodGhpcywkdyxuZXcgd05lKSwkMih0aGlzLFVULGUpLCQyKHRoaXMsXzFlLHIpLCQyKHRoaXMselosdCksJDIodGhpcyxGNyx0aGlzLmNyZWF0ZUVkaXRvcigpKSwkMih0aGlzLGZtLGJjKHRoaXMsRjcp''@;'; put 'put ''LnN0eWxlKSxiYyh0aGlzLCR3KS5zZXRPYnNlcnZlZEVsZW1lbnQodGhpcy5nZXRJbnB1dEVsZW1lbnQoKSksYmModGhpcywkdykuYWRkTG9jYWxIb29rKCJyZXNpemUiLCguLi5pKT0+e3RoaXMucnVuTG9jYWxIb29rcygicmVzaXplIiwuLi5pKX0pLHRoaXMuaGlkZSgpfX1ZbChxdyxfaCk7''@;'; put 'put ''Y29uc3QgT0h0PXF3O2NsYXNzIFNOZXtoaWRlKCl7dGhpcy53YXNMYXN0QWN0aW9uU2hvdz0hMSx0aGlzLmhpZGluZ1RpbWVyPXNldFRpbWVvdXQoKCk9PnshMT09PXRoaXMud2FzTGFzdEFjdGlvblNob3cmJnRoaXMucnVuTG9jYWxIb29rcygiaGlkZSIpfSwyNTApfXNob3coZSl7dGhpcy53''@;'; put 'put ''YXNMYXN0QWN0aW9uU2hvdz0hMCx0aGlzLnNob3dEZWJvdW5jZWQ/LihlKX1jYW5jZWxIaWRpbmcoKXt0aGlzLndhc0xhc3RBY3Rpb25TaG93PSEwLGNsZWFyVGltZW91dCh0aGlzLmhpZGluZ1RpbWVyPz92b2lkIDApLHRoaXMuaGlkaW5nVGltZXI9bnVsbH11cGRhdGVEZWxheShlPTI1MCl7''@;'; put 'put ''dGhpcy5zaG93RGVib3VuY2VkPUJNKHQ9Pnt0aGlzLndhc0xhc3RBY3Rpb25TaG93JiZ0aGlzLnJ1bkxvY2FsSG9va3MoInNob3ciLHQuZnJvbS5yb3csdC5mcm9tLmNvbCl9LGUpfWRlc3Ryb3koKXt0aGlzLmNsZWFyTG9jYWxIb29rcygpfWNvbnN0cnVjdG9yKGUpe3RoaXMud2FzTGFzdEFj''@;'; put 'put ''dGlvblNob3c9ITAsdGhpcy5zaG93RGVib3VuY2VkPW51bGwsdGhpcy5oaWRpbmdUaW1lcj1udWxsLHRoaXMudXBkYXRlRGVsYXkoZSl9fVlsKFNOZSxfaCk7Y29uc3QgUEh0PVNOZSx2cz0iLS0tLS0tLS0tIjtmdW5jdGlvbiBLdyhuLGUpe2NvbnN0IHQ9e307cmV0dXJuIFhuKG4scj0+e3Iu''@;'; put 'put ''Zm9yQWxsKChpLG8pPT57aT49MCYmbz49MCYmKHRbaV18fCh0W2ldPVtdKSx0W2ldW29dPWUoaSxvKSl9KX0pLHR9ZnVuY3Rpb24gX18obixlLHQscixpKXtYbihuLG89PntvLmZvckFsbCgoYSxsKT0+e2E+PTAmJmw+PTAmJmZ1bmN0aW9uIFpIdChuLGUsdCxyLGksbyl7Y29uc3QgYT1pKG4s''@;'; put 'put ''ZSk7bGV0IGw9cjthLmNsYXNzTmFtZSYmKGw9InZlcnRpY2FsIj09PXQ/ZnVuY3Rpb24gV0h0KG4sZSl7cmV0dXJuLTEhPT1uLmluZGV4T2YoZSk/bjpgJHtuLnJlcGxhY2UoImh0VG9wIiwiIikucmVwbGFjZSgiaHRNaWRkbGUiLCIiKS5yZXBsYWNlKCJodEJvdHRvbSIsIiIpLnJlcGxhY2Uo''@;'; put 'put ''IiAgIiwiIil9ICR7ZX1gfShhLmNsYXNzTmFtZSxyKTpmdW5jdGlvbiBZSHQobixlKXtyZXR1cm4tMSE9PW4uaW5kZXhPZihlKT9uOmAke24ucmVwbGFjZSgiaHRMZWZ0IiwiIikucmVwbGFjZSgiaHRDZW50ZXIiLCIiKS5yZXBsYWNlKCJodFJpZ2h0IiwiIikucmVwbGFjZSgiaHRKdXN0aWZ5''@;'; put 'put ''IiwiIikucmVwbGFjZSgiICAiLCIiKX0gJHtlfWB9KGEuY2xhc3NOYW1lLHIpKSxvKG4sZSwiY2xhc3NOYW1lIixsKX0oYSxsLGUsdCxyLGkpfSl9KX1mdW5jdGlvbiBNTmUobil7cmV0dXJuYDxzcGFuIGNsYXNzPSJzZWxlY3RlZCI+XHUyNzEzPC9zcGFuPiR7bn1gfWZ1bmN0aW9uIFdaKG4s''@;'; put 'put ''ZSl7bGV0IHQ9ITE7cmV0dXJuIEFycmF5LmlzQXJyYXkobikmJlhuKG4scj0+KHIuZm9yQWxsKChpLG8pPT57aWYoaT49MCYmbz49MCYmZShpLG8pKXJldHVybiB0PSEwLCExfSksdCkpLHR9ZnVuY3Rpb24gWVoobixlKXtjb25zdCB0PXt0b3A6MCxsZWZ0OjB9O2lmKGUhPT1uLm93bmVyRG9j''@;'; put 'put ''dW1lbnQpe2NvbnN0e2ZyYW1lRWxlbWVudDpyfT1lLmRlZmF1bHRWaWV3LHt0b3A6aSxsZWZ0Om99PXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dC50b3A9aSx0LmxlZnQ9b31yZXR1cm4gdH1mdW5jdGlvbiBUTmUobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5u''@;'; put 'put ''b3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHhOZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIp''@;'; put 'put ''O3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBpcyhuLGUpe3JldHVybiBmdW5jdGlvbiAkSHQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLHhOZShuLGUsImdldCIpKX1mdW5jdGlvbiBuZyhuLGUsdCl7VE5lKG4sZSksZS5zZXQobix0KX1mdW5jdGlvbiBKZChu''@;'; put 'put ''LGUsdCl7cmV0dXJuIGZ1bmN0aW9uIHFIdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4seE5lKG4sZSwi''@;'; put 'put ''c2V0IiksdCksdH1mdW5jdGlvbiBrNChuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiB6VChuLGUpe1ROZShuLGUpLGUuYWRkKG4pfWNvbnN0IFpa''@;'; put 'put ''PSJjb21tZW50cyIsV1Q9ImNvbW1lbnQiLCRPPSJ2YWx1ZSIsQU5lPSJzdHlsZSIsR1o9InJlYWRPbmx5IixxTz1aWiwkWj1gcGx1Z2luOiR7Wlp9YDt2YXIgd2M9bmV3IFdlYWtNYXAsUjQ9bmV3IFdlYWtNYXAsS089bmV3IFdlYWtNYXAsWE89bmV3IFdlYWtNYXAsUU89bmV3IFdlYWtNYXAs''@;'; put 'put ''cVo9bmV3IFdlYWtNYXAsSk89bmV3IFdlYWtNYXAseTFlPW5ldyBXZWFrTWFwLGIxZT1uZXcgV2Vha01hcCx3MWU9bmV3IFdlYWtNYXAsa05lPW5ldyBXZWFrU2V0LFJOZT1uZXcgV2Vha1NldCxJTmU9bmV3IFdlYWtTZXQsRE5lPW5ldyBXZWFrU2V0LEMxZT1uZXcgV2Vha01hcCxMTmU9bmV3''@;'; put 'put ''IFdlYWtTZXQsS1o9bmV3IFdlYWtNYXAsUzFlPW5ldyBXZWFrTWFwLFh3PW5ldyBXZWFrU2V0O2NsYXNzIFFIdCBleHRlbmRzIGFse3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBaWn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA2MH1zdGF0aWMgZ2V0IERFRkFV''@;'; put 'put ''TFRfU0VUVElOR1MoKXtyZXR1cm57ZGlzcGxheURlbGF5OjI1MH19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1paXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fChpcyh0aGlzLHdjKXx8KEpkKHRoaXMsd2MsbmV3IE9IdCh0aGlzLmhvdC5yb290RG9j''@;'; put 'put ''dW1lbnQsdGhpcy5ob3QuaXNSdGwoKSx0aGlzLmhvdC5yb290UG9ydGFsRWxlbWVudCkpLGlzKHRoaXMsd2MpPy5hZGRMb2NhbEhvb2soInJlc2l6ZSIsKGUsdCk9Pms0KHRoaXMsTE5lLHJWdCkuY2FsbCh0aGlzLGUsdCkpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyU2V0VGhlbWUiLChlLHQp''@;'; put 'put ''PT57dHx8dGhpcy5oaWRlKCl9KSksaXModGhpcyxSNCl8fEpkKHRoaXMsUjQsbmV3IFBIdCh0aGlzLmdldFNldHRpbmcoImRpc3BsYXlEZWxheSIpKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGU9PnRoaXMuYWRkVG9Db250ZXh0TWVudShlKSksdGhp''@;'; put 'put ''cy5hZGRIb29rKCJhZnRlclJlbmRlcmVyIiwoZSx0LHIsaSxvLGEpPT5rNCh0aGlzLFJOZSxlVnQpLmNhbGwodGhpcyxlLGEpKSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsIixpcyh0aGlzLFMxZSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJCZWdpbkVkaXRpbmciLCgpPT50aGlzLmhpZGUoKSks''@;'; put 'put ''dGhpcy5hZGRIb29rKCJhZnRlckRvY3VtZW50S2V5RG93biIsaXModGhpcyxLWikpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29tcG9zaXRpb25TdGFydCIsaXModGhpcyxLWikpLGlzKHRoaXMsUjQpPy5hZGRMb2NhbEhvb2soImhpZGUiLCgpPT50aGlzLmhpZGUoKSksaXModGhpcyxSNCk/LmFk''@;'; put 'put ''ZExvY2FsSG9vaygic2hvdyIsKGUsdCk9PnRoaXMuc2hvd0F0Q2VsbChlLHQpKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXtpcyh0aGlzLFI0KT8udXBkYXRlRGVsYXkodGhpcy5n''@;'; put 'put ''ZXRTZXR0aW5nKCJkaXNwbGF5RGVsYXkiKSksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGU9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5h''@;'; put 'put ''Z2VyKCksdD1lLmdldENvbnRleHQoImdyaWQiKSxyPWUuYWRkQ29udGV4dCgkWik7dD8uYWRkU2hvcnRjdXQoe2tleXM6W1siQ29udHJvbCIsIkFsdCIsIk0iXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBpPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtKZCh0aGlzLFhPLCEwKSx0''@;'; put 'put ''aGlzLmhvdC5zY3JvbGxUb0ZvY3VzZWRDZWxsKCgpPT57aSYmdGhpcy5zZXRSYW5nZShpKSx0aGlzLnNob3coKSx0aGlzLmZvY3VzRWRpdG9yKCksZS5zZXRBY3RpdmVDb250ZXh0TmFtZSgkWiksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e0pkKHRoaXMsWE8sITEpfSl9KX0sc3Rv''@;'; put 'put ''cFByb3BhZ2F0aW9uOiEwLHJ1bk9ubHlJZjooKT0+ISF0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk/LmhpZ2hsaWdodC5pc0NlbGwoKSxncm91cDpxT30pLHIuYWRkU2hvcnRjdXQoe2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOigpPT57aXModGhpcyx3Yyk/LnNldFZhbHVl''@;'; put 'put ''KGlzKHRoaXMsSk8pKSx0aGlzLmhpZGUoKSxlLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIil9LHJ1bk9ubHlJZjooKT0+ISghaXModGhpcyx3Yyk/LmlzVmlzaWJsZSgpfHwhaXModGhpcyx3Yyk/LmlzRm9jdXNlZCgpKSxncm91cDpxT30pLHIuYWRkU2hvcnRjdXQoe2tleXM6W1siQ29u''@;'; put 'put ''dHJvbC9NZXRhIiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmhpZGUoKSxlLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIil9LHJ1bk9ubHlJZjooKT0+ISghaXModGhpcyx3Yyk/LmlzVmlzaWJsZSgpfHwhaXModGhpcyx3Yyk/LmlzRm9jdXNlZCgpKSxncm91cDpxT30pLHIuYWRk''@;'; put 'put ''U2hvcnRjdXQoe2tleXM6W1siU2hpZnQiLCJUYWIiXSxbIlRhYiJdXSxmb3J3YXJkVG9Db250ZXh0OmUuZ2V0Q29udGV4dCgiZ3JpZCIpLGNhbGxiYWNrOigpPT57SmQodGhpcyxRTywhMCksaXModGhpcyx3Yyk/LnNldFZhbHVlKGlzKHRoaXMsd2MpPy5nZXRWYWx1ZSgpKSx0aGlzLnNldENv''@;'; put 'put ''bW1lbnQoKSx0aGlzLmhpZGUoKSxlLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIil9LGdyb3VwOnFPfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKT8ucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChxTyl9cmVn''@;'; put 'put ''aXN0ZXJMaXN0ZW5lcnMoKXtjb25zdHtyb290RG9jdW1lbnQ6ZX09dGhpcy5ob3QsdD10aGlzLmdldEVkaXRvcklucHV0RWxlbWVudCgpO3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZSwibW91c2VvdmVyIixpcyh0aGlzLHcxZSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2''@;'; put 'put ''ZW50TGlzdGVuZXIoZSwibW91c2Vkb3duIixpcyh0aGlzLHkxZSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZSwibW91c2V1cCIsKCk9Pms0KHRoaXMsa05lLEpIdCkuY2FsbCh0aGlzKSksdCYmKHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodCwiZm9j''@;'; put 'put ''dXMiLCgpPT5rNCh0aGlzLEROZSxuVnQpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodCwiYmx1ciIsKCk9Pms0KHRoaXMsSU5lLHRWdCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0LCJrZXlkb3duIixpcyh0''@;'; put 'put ''aGlzLEMxZSkpKTtjb25zdCByPXRoaXMuZ2V0RWRpdG9ySW5wdXRFbGVtZW50KCk7ciYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihyLCJtb3VzZWRvd24iLGlzKHRoaXMsYjFlKSl9c2V0UmFuZ2UoZSl7dGhpcy5yYW5nZT1lfWNsZWFyUmFuZ2UoKXt0aGlzLnJhbmdlPXt9''@;'; put 'put ''fXRhcmdldElzQ2VsbFdpdGhDb21tZW50KGUpe2NvbnN0IHQ9VnYoQWEoZSksWyJURCJdKTtyZXR1cm4hISh0JiZMYSh0LCJodENvbW1lbnRDZWxsIikmJlZ2KHQsW3RoaXMuaG90LnJvb3RFbGVtZW50XSkpfXRhcmdldElzQ29tbWVudFRleHRBcmVhKGUpe3JldHVybiB0aGlzLmdldEVkaXRv''@;'; put 'put ''cklucHV0RWxlbWVudCgpPT09ZS50YXJnZXR9c2V0Q29tbWVudChlKXt0aGlzLnJhbmdlLmZyb218fEpyKCdCZWZvcmUgdXNpbmcgdGhpcyBtZXRob2QsIGZpcnN0IHNldCBjZWxsIHJhbmdlIChob3QuZ2V0UGx1Z2luKCJjb21tZW50Iikuc2V0UmFuZ2UoKSknKTtjb25zdCB0PWlzKHRoaXMs''@;'; put 'put ''d2MpPy5nZXRWYWx1ZSgpO2xldCByPSIiO251bGwhPWU/cj1lOm51bGwhPXQmJihyPXQpO2NvbnN0e3JvdzppLGNvbDpvfT1rNCh0aGlzLFh3LFlUKS5jYWxsKHRoaXMpO3RoaXMudXBkYXRlQ29tbWVudE1ldGEoaSxvLHtbJE9dOnJ9KSx0aGlzLmhvdC5yZW5kZXIoKX1zZXRDb21tZW50QXRD''@;'; put 'put ''ZWxsKGUsdCxyKXt0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGUsdCl9KSx0aGlzLnNldENvbW1lbnQocil9cmVtb3ZlQ29tbWVudChlPSEwKXt0aGlzLnJhbmdlLmZyb218fEpyKCdCZWZvcmUgdXNpbmcgdGhpcyBtZXRob2QsIGZpcnN0IHNldCBjZWxs''@;'; put 'put ''IHJhbmdlIChob3QuZ2V0UGx1Z2luKCJjb21tZW50Iikuc2V0UmFuZ2UoKSknKTtjb25zdHtyb3c6dCxjb2w6cn09azQodGhpcyxYdyxZVCkuY2FsbCh0aGlzKTt0aGlzLmhvdC5zZXRDZWxsTWV0YSh0LHIsV1Qsdm9pZCAwKSxlJiZ0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhpZGUoKX1yZW1v''@;'; put 'put ''dmVDb21tZW50QXRDZWxsKGUsdCxyPSEwKXt0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGUsdCl9KSx0aGlzLnJlbW92ZUNvbW1lbnQocil9Z2V0Q29tbWVudCgpe2NvbnN0e3JvdzplLGNvbDp0fT1rNCh0aGlzLFh3LFlUKS5jYWxsKHRoaXMpO3JldHVy''@;'; put 'put ''biB0aGlzLmdldENvbW1lbnRNZXRhKGUsdCwkTyl9Z2V0Q29tbWVudEF0Q2VsbChlLHQpe3JldHVybiB0aGlzLmdldENvbW1lbnRNZXRhKGUsdCwkTyl9c2hvdygpe3RoaXMucmFuZ2UuZnJvbXx8SnIoJ0JlZm9yZSB1c2luZyB0aGlzIG1ldGhvZCwgZmlyc3Qgc2V0IGNlbGwgcmFuZ2UgKGhv''@;'; put 'put ''dC5nZXRQbHVnaW4oImNvbW1lbnQiKS5zZXRSYW5nZSgpKScpO2NvbnN0e3JvdzplLGNvbDp0fT1rNCh0aGlzLFh3LFlUKS5jYWxsKHRoaXMpO2lmKGU8MHx8ZT50aGlzLmhvdC5jb3VudFJvd3MoKS0xfHx0PDB8fHQ+dGhpcy5ob3QuY291bnRDb2xzKCktMSlyZXR1cm4hMTtjb25zdCByPXRo''@;'; put 'put ''aXMuaG90LmdldENlbGxNZXRhKGUsdCk7aXModGhpcyxSNCk/LmNhbmNlbEhpZGluZygpO2NvbnN0IGk9cltXVF07cmV0dXJuIGlzKHRoaXMsd2MpPy5zZXRWYWx1ZSgoaT9pWyRPXTpudWxsKT8/IiIpLGlzKHRoaXMsd2MpPy5zaG93KCksdGhpcy5yZWZyZXNoRWRpdG9yKCEwKSwhMH1zaG93''@;'; put 'put ''QXRDZWxsKGUsdCl7cmV0dXJuIHRoaXMuc2V0UmFuZ2Uoe2Zyb206dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZSx0KX0pLHRoaXMuc2hvdygpfWhpZGUoKXtpcyh0aGlzLHdjKT8uaGlkZSgpfXJlZnJlc2hFZGl0b3IoZT0hMSl7aWYoIShlfHx0aGlzLnJhbmdlLmZyb20mJmlzKHRoaXMs''@;'; put 'put ''d2MpPy5pc1Zpc2libGUoKSl8fCFpcyh0aGlzLHdjKSlyZXR1cm47Y29uc3R7cm93SW5kZXhNYXBwZXI6dCxjb2x1bW5JbmRleE1hcHBlcjpyfT10aGlzLmhvdCx7cm93OmksY29sOm99PWs0KHRoaXMsWHcsWVQpLmNhbGwodGhpcyk7bGV0IGE9dC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbElu''@;'; put 'put ''ZGV4KGkpLGw9ci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KG8pO2NvbnN0IHU9bnVsbD09PWE7aWYoaXModGhpcyx3Yykuc2V0UG9zaXRpb24oMCwwKSxudWxsPT09YSl7Y29uc3QgUG89dC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoaSwtMSk7YT1udWxsIT09UG8/dC5nZXRSZW5k''@;'; put 'put ''ZXJhYmxlRnJvbVZpc3VhbEluZGV4KFBvKTpudWxsfWlmKG51bGw9PT1sKXtjb25zdCBQbz1yLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChvLC0xKTtsPW51bGwhPT1Qbz9yLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoUG8pOm51bGx9Y29uc3QgZz1udWxsPT09YSxFPW51bGw9PT1s''@;'; put 'put ''O2E9YT8/MCxsPWw/PzA7Y29uc3R7cm9vdFdpbmRvdzpPLHZpZXc6e193dDpafX09dGhpcy5ob3Qse3d0VGFibGU6ZWV9PVosdmU9Wi5nZXRDZWxsKHtyb3c6YSxjb2w6bH0sITApLEhlPXRoaXMuaG90LmdldENlbGxNZXRhKGksbykuY29sc3Bhbj8/MSxXZT10aGlzLmdldENvbW1lbnRNZXRh''@;'; put 'put ''KGksbywic3R5bGUiKTtXZT9pcyh0aGlzLHdjKS5zZXRTaXplKFdlLndpZHRoLFdlLmhlaWdodCk6aXModGhpcyx3YykucmVzZXRTaXplKCk7Y29uc3QgYXQ9RT8wOmZ1bmN0aW9uIEhIdChuLGUsdCl7cmV0dXJuIG4+MT9aZChlKTp0fShIZSx2ZSxlZS5nZXRDb2x1bW5XaWR0aChsKSksQ3Q9''@;'; put 'put ''dSYmIWc/SGgodmUpOjAse2xlZnQ6QXQsdG9wOkt0LHdpZHRoOnF0LGhlaWdodDpnbn09dmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkse3dpZHRoOlRuLGhlaWdodDpDbn09aXModGhpcyx3YykuZ2V0U2l6ZSgpLHtpbm5lcldpZHRoOnFyLGlubmVySGVpZ2h0OiRufT10aGlzLmhvdC5yb290''@;'; put 'put ''V2luZG93LFRyPXRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQscmk9R2QodGhpcy5ob3Qucm9vdERvY3VtZW50KSxmbj1Sc2UodGhpcy5ob3Qucm9vdFdpbmRvdyk/cmk6MCx5cj1Jc2UodGhpcy5ob3Qucm9vdFdpbmRvdyk/cmk6MDtsZXQgSHI9QXQrTy5zY3JvbGxYK2F0''@;'; put 'put ''LShIZT4xPzE6MCksdGk9S3QrTy5zY3JvbGxZK0N0O3RoaXMuaG90LmlzUnRsKCkmJihIci09VG4rYXQpLHRoaXMuaG90LmlzTHRyKCkmJkF0K3F0K1RuPnFyLWZuP0hyPUF0K08uc2Nyb2xsWC1Ubi0xOnRoaXMuaG90LmlzUnRsKCkmJkhyPC0oVHIuc2Nyb2xsV2lkdGgtVHIuY2xpZW50V2lk''@;'; put 'put ''dGgpJiYoSHI9QXQrTy5zY3JvbGxYK2F0KzEpLEt0K0NuPiRuLXlyJiYodGktPUNuLWduKzEpO2NvbnN0IGZyPWZ1bmN0aW9uIFZIdChuLGUsdD04KXtjb25zdHtpbm5lcldpZHRoOnIsaW5uZXJIZWlnaHQ6aSx2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoOm89MCxob3Jpem9udGFsU2Nyb2xsYmFy''@;'; put 'put ''V2lkdGg6YT0wfT1lLGw9TWF0aC5tYXgoMCxyLW8tMip0KSx1PU1hdGgubWF4KDAsaS1hLTIqdCk7cmV0dXJue3dpZHRoOk1hdGgubWluKG4ud2lkdGgsbCksaGVpZ2h0Ok1hdGgubWluKG4uaGVpZ2h0LHUpfX0oe3dpZHRoOlRuLGhlaWdodDpDbn0se2lubmVyV2lkdGg6cXIsaW5uZXJIZWln''@;'; put 'put ''aHQ6JG4sdmVydGljYWxTY3JvbGxiYXJXaWR0aDpmbixob3Jpem9udGFsU2Nyb2xsYmFyV2lkdGg6eXJ9KTsoZnIud2lkdGghPT1Ubnx8ZnIuaGVpZ2h0IT09Q24pJiZpcyh0aGlzLHdjKS5zZXRTaXplKGZyLndpZHRoLGZyLmhlaWdodCk7Y29uc3QgZWk9ZnVuY3Rpb24gQkh0KG4sZSx0PTgp''@;'; put 'put ''e2NvbnN0e2lubmVyV2lkdGg6cixpbm5lckhlaWdodDppLHNjcm9sbFg6byxzY3JvbGxZOmEsdmVydGljYWxTY3JvbGxiYXJXaWR0aDpsPTAsaG9yaXpvbnRhbFNjcm9sbGJhcldpZHRoOnU9MH09ZSxnPW8sRT1hLE89bytyLWwsWj1hK2ktdTtsZXR7eDplZSx5OnZlfT1uO3JldHVybiBlZTxn''@;'; put 'put ''P2VlPWcrdDplZStuLndpZHRoPk8mJihlZT1NYXRoLm1heChnK3QsTy1uLndpZHRoLXQpKSx2ZTxFP3ZlPUUrdDp2ZStuLmhlaWdodD5aJiYodmU9TWF0aC5tYXgoRSt0LFotbi5oZWlnaHQtdCkpLHt4OmVlLHk6dmV9fSh7eDpIcix5OnRpLHdpZHRoOmZyLndpZHRoLGhlaWdodDpmci5oZWln''@;'; put 'put ''aHR9LHtpbm5lcldpZHRoOnFyLGlubmVySGVpZ2h0OiRuLHNjcm9sbFg6Ty5zY3JvbGxYLHNjcm9sbFk6Ty5zY3JvbGxZLHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGg6Zm4saG9yaXpvbnRhbFNjcm9sbGJhcldpZHRoOnlyfSk7aXModGhpcyx3Yykuc2V0UG9zaXRpb24oZWkueCxlaS55KSxpcyh0''@;'; put 'put ''aGlzLHdjKS5zZXRSZWFkT25seVN0YXRlKHRoaXMuZ2V0Q29tbWVudE1ldGEoaSxvLEdaKT8/ITEpLGlzKHRoaXMsd2MpLm9ic2VydmVTaXplKCl9Zm9jdXNFZGl0b3IoKXtpcyh0aGlzLHdjKT8uZm9jdXMoKX11cGRhdGVDb21tZW50TWV0YShlLHQscil7Y29uc3QgaT10aGlzLmhvdC5nZXRD''@;'; put 'put ''ZWxsTWV0YShlLHQpW1dUXTtsZXQgbztpPyhvPUFkKGkpLExXKG8scikpOm89cix0aGlzLmhvdC5zZXRDZWxsTWV0YShlLHQsV1Qsbyl9Z2V0Q29tbWVudE1ldGEoZSx0LHIpe2NvbnN0IG89dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZSx0KVtXVF07aWYobylyZXR1cm4gb1tyXX1hZGRUb0NvbnRl''@;'; put 'put ''eHRNZW51KGUpe2UuaXRlbXMucHVzaCh7bmFtZTp2c30sZnVuY3Rpb24gVUh0KG4pe3JldHVybntrZXk6ImNvbW1lbnRzQWRkRWRpdCIsbmFtZSgpe2NvbnN0IGU9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk/LmhpZ2hsaWdodDtyZXR1cm4gZT8uaXNDZWxsKCkmJm51bGwhPT1lLnJv''@;'; put 'put ''dyYmbnVsbCE9PWUuY29sJiZuLmdldENvbW1lbnRBdENlbGwoZS5yb3csZS5jb2wpP3RoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDY2UpOnRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh3Y2UpfSxjYWxsYmFjaygpe2NvbnN0IGU9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7ZSYmbi5z''@;'; put 'put ''ZXRSYW5nZSh7ZnJvbTplLmZyb20sdG86ZS50b30pLG4uc2hvdygpLG4uZm9jdXNFZGl0b3IoKX0sZGlzYWJsZWQoKXtjb25zdCBlPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO3JldHVybiEhKCFlfHxlLmhpZ2hsaWdodC5pc0hlYWRlcigpfHx0aGlzLnNlbGVjdGlvbi5pc0VudGly''@;'; put 'put ''ZVJvd1NlbGVjdGVkKCkmJnRoaXMuc2VsZWN0aW9uLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKXx8MD09PXRoaXMuY291bnRSZW5kZXJlZFJvd3MoKXx8MD09PXRoaXMuY291bnRSZW5kZXJlZENvbHMoKSl9fX0odGhpcyksZnVuY3Rpb24gekh0KG4pe3JldHVybntrZXk6ImNvbW1lbnRzUmVt''@;'; put 'put ''b3ZlIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShTY2UpfSxjYWxsYmFjaygpe2NvbnN0IGU9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7ZSYmKGUuZm9yQWxsKCh0LHIpPT57dD49MCYmcj49MCYmbi5yZW1vdmVDb21tZW50QXRDZWxsKHQsciwhMSl9KSx0''@;'; put 'put ''aGlzLnJlbmRlcigpKX0sZGlzYWJsZWQoKXtjb25zdCBlPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO3JldHVybiEhKCFlfHxlLmhpZ2hsaWdodC5pc0hlYWRlcigpfHx0aGlzLnNlbGVjdGlvbi5pc0VudGlyZVJvd1NlbGVjdGVkKCkmJnRoaXMuc2VsZWN0aW9uLmlzRW50aXJlQ29s''@;'; put 'put ''dW1uU2VsZWN0ZWQoKXx8MD09PXRoaXMuY291bnRSZW5kZXJlZFJvd3MoKXx8MD09PXRoaXMuY291bnRSZW5kZXJlZENvbHMoKSl9fX0odGhpcyksZnVuY3Rpb24gR0h0KG4pe3JldHVybntrZXk6ImNvbW1lbnRzUmVhZE9ubHkiLG5hbWUoKXtjb25zdCBlPXRoaXMuZ2V0VHJhbnNsYXRlZFBo''@;'; put 'put ''cmFzZShFY2UpO3JldHVybiBXWih0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKT8/W10sKHIsaSk9PiEhbi5nZXRDb21tZW50TWV0YShyLGksR1opKT9NTmUoZSk6ZX0sY2FsbGJhY2soKXtjb25zdCBlPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2UmJmUuZm9yQWxsKCh0LHIpPT57aWYo''@;'; put 'put ''dD49MCYmcj49MCl7Y29uc3QgaT0hIW4uZ2V0Q29tbWVudE1ldGEodCxyLEdaKTtuLnVwZGF0ZUNvbW1lbnRNZXRhKHQscix7W0daXTohaX0pfX0pfSxkaXNhYmxlZCgpe2NvbnN0IGU9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7cmV0dXJuISEoIWV8fGUuaGlnaGxpZ2h0LmlzSGVh''@;'; put 'put ''ZGVyKCl8fCFuLmdldENvbW1lbnRBdENlbGwoZS5oaWdobGlnaHQucm93LGUuaGlnaGxpZ2h0LmNvbCl8fHRoaXMuc2VsZWN0aW9uLmlzRW50aXJlUm93U2VsZWN0ZWQoKSYmdGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkUm93''@;'; put 'put ''cygpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkQ29scygpKX19fSh0aGlzKSl9Z2V0RWRpdG9ySW5wdXRFbGVtZW50KCl7cmV0dXJuIGlzKHRoaXMsd2MpPy5nZXRJbnB1dEVsZW1lbnQoKT8/bnVsbH1kZXN0cm95KCl7aXModGhpcyx3Yyk/LmRlc3Ryb3koKSxpcyh0aGlzLFI0KT8uZGVzdHJv''@;'; put 'put ''eSgpLHN1cGVyLmRlc3Ryb3koKX1jb25zdHJ1Y3RvciguLi5lKXtzdXBlciguLi5lKSx6VCh0aGlzLGtOZSkselQodGhpcyxSTmUpLHpUKHRoaXMsSU5lKSx6VCh0aGlzLEROZSkselQodGhpcyxMTmUpLHpUKHRoaXMsWHcpLG5nKHRoaXMsd2Mse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0p''@;'; put 'put ''LG5nKHRoaXMsUjQse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLG5nKHRoaXMsS08se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLG5nKHRoaXMsWE8se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLG5nKHRoaXMsUU8se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLG5nKHRoaXMs''@;'; put 'put ''cVose3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLG5nKHRoaXMsSk8se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLG5nKHRoaXMseTFlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxuZyh0aGlzLGIxZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksbmcodGhpcyx3MWUse3dy''@;'; put 'put ''aXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLG5nKHRoaXMsQzFlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxuZyh0aGlzLEtaLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxuZyh0aGlzLFMxZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdGhpcy5yYW5nZT17fSxKZCh0aGlz''@;'; put 'put ''LHdjLG51bGwpLEpkKHRoaXMsUjQsbnVsbCksSmQodGhpcyxLTywhMSksSmQodGhpcyxYTywhMSksSmQodGhpcyxRTywhMSksSmQodGhpcyxxWixudWxsKSxKZCh0aGlzLEpPLCIiKSxKZCh0aGlzLHkxZSx0PT57aWYodGhpcy5ob3QudmlldyYmdGhpcy5ob3Qudmlldy5fd3QmJiFpcyh0aGlz''@;'; put 'put ''LEtPKSYmIXRoaXMudGFyZ2V0SXNDb21tZW50VGV4dEFyZWEodCkpe2NvbnN0IHI9VnYoQWEodCksWyJURCJdKTtsZXQgaT1udWxsO3ImJihpPXRoaXMuaG90LmdldENvb3JkcyhyKSksKCFyfHx0aGlzLnJhbmdlLmZyb20mJmkmJih0aGlzLnJhbmdlLmZyb20ucm93IT09aS5yb3d8fHRoaXMu''@;'; put 'put ''cmFuZ2UuZnJvbS5jb2whPT1pLmNvbCkpJiZ0aGlzLmhpZGUoKX19KSxKZCh0aGlzLGIxZSx0PT57dC5zdG9wUHJvcGFnYXRpb24oKX0pLEpkKHRoaXMsdzFlLHQ9Pntjb25zdHtyb290RG9jdW1lbnQ6cn09dGhpcy5ob3QsaT1BYSh0KTtpZighKGlzKHRoaXMsS08pfHxpcyh0aGlzLHdjKT8u''@;'; put 'put ''aXNGb2N1c2VkKCl8fExhKGksInd0Qm9yZGVyIil8fGlzKHRoaXMscVopPT09aSkmJmlzKHRoaXMsd2MpKWlmKEpkKHRoaXMscVosci5lbGVtZW50RnJvbVBvaW50KHQuY2xpZW50WCx0LmNsaWVudFkpKSx0aGlzLnRhcmdldElzQ2VsbFdpdGhDb21tZW50KHQpKXtjb25zdCBvPXRoaXMuaG90''@;'; put 'put ''LmdldENvb3JkcyhpKTtpZihvKXtjb25zdCBhPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2Uobyk7aXModGhpcyxSNCk/LnNob3coYSl9fWVsc2UgQnYoaSxyKSYmIXRoaXMudGFyZ2V0SXNDb21tZW50VGV4dEFyZWEodCkmJmlzKHRoaXMsUjQpPy5oaWRlKCl9KSxKZCh0aGlzLEMxZSx0PT57''@;'; put 'put ''aXModGhpcyx3Yyk/LmlzVmlzaWJsZSgpJiYodGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaGFzRXZlbnRTaG9ydGN1dCgkWix0KXx8dC5zdG9wUHJvcGFnYXRpb24oKSl9KSxKZCh0aGlzLEtaLHQ9Pntpcyh0aGlzLHdjKT8uaXNGb2N1c2VkKCkmJkYzKHQpfSksSmQodGhpcyxTMWUs''@;'; put 'put ''KCk9Pntpcyh0aGlzLFhPKXx8dGhpcy5oaWRlKCl9KX19ZnVuY3Rpb24gSkh0KCl7SmQodGhpcyxLTywhMSl9ZnVuY3Rpb24gZVZ0KG4sZSl7Y29uc3QgdD1lW1dUXTtpZihmdW5jdGlvbiBYSHQobil7cmV0dXJuIG51bGwhPT1uJiYib2JqZWN0Ij09dHlwZW9mIG59KHQpJiZ0WyRPXSl7Y29u''@;'; put 'put ''c3Qgcj1lLmNvbW1lbnRlZENlbGxDbGFzc05hbWU7InN0cmluZyI9PXR5cGVvZiByJiZZcihuLHIpfX1mdW5jdGlvbiB0VnQoKXtpcyh0aGlzLFFPKT9KZCh0aGlzLFFPLCExKTooSmQodGhpcyxKTywiIiksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5h''@;'; put 'put ''bWUoImdyaWQiKSx0aGlzLnNldENvbW1lbnQoKSl9ZnVuY3Rpb24gblZ0KCl7SmQodGhpcyxKTyx0aGlzLmdldENvbW1lbnQoKT8/IiIpLHRoaXMuaG90Lmxpc3RlbigpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCRaKX1mdW5jdGlvbiByVnQo''@;'; put 'put ''bixlKXtjb25zdHtyb3c6dCxjb2w6cn09azQodGhpcyxYdyxZVCkuY2FsbCh0aGlzKTt0aGlzLnVwZGF0ZUNvbW1lbnRNZXRhKHQscix7W0FOZV06e3dpZHRoOm4saGVpZ2h0OmV9fSl9ZnVuY3Rpb24gWVQoKXtpZih0aGlzLnJhbmdlIGluc3RhbmNlb2Ygblkpe2NvbnN0e3JvdzpuLGNvbDpl''@;'; put 'put ''fT10aGlzLnJhbmdlLmhpZ2hsaWdodDtyZXR1cm57cm93Om4/PzAsY29sOmU/PzB9fXJldHVybntyb3c6dGhpcy5yYW5nZS5mcm9tLnJvdz8/MCxjb2w6dGhpcy5yYW5nZS5mcm9tLmNvbD8/MH19Y2xhc3MgT05le3JlZ2lzdGVyQ29tbWFuZChlLHQpe3RoaXMuY29tbWFuZHNbZV09dH1zZXRD''@;'; put 'put ''b21tb25DYWxsYmFjayhlKXt0aGlzLmNvbW1vbkNhbGxiYWNrPWV9ZXhlY3V0ZShlLC4uLnQpe2NvbnN0IHI9ZS5zcGxpdCgiOiIpLGk9clswXSxvPTI9PT1yLmxlbmd0aD9yWzFdOm51bGw7bGV0IGE9dGhpcy5jb21tYW5kc1tpXTtpZihhfHxKcihgTWVudSBjb21tYW5kICcke2l9JyBub3Qg''@;'; put 'put ''ZXhpc3RzLmApLG8mJmEuc3VibWVudSYmKGE9ZnVuY3Rpb24gaVZ0KG4sZSl7bGV0IHQ7cmV0dXJuIFhuKGUscj0+e2NvbnN0IGk9ci5rZXk/ci5rZXkuc3BsaXQoIjoiKTpudWxsO2lmKEFycmF5LmlzQXJyYXkoaSkmJmlbMV09PT1uKXJldHVybiB0PXIsITF9KSx0fShvLGEuc3VibWVudS5p''@;'; put 'put ''dGVtcykpLCEwPT09YS5kaXNhYmxlZHx8ImZ1bmN0aW9uIj09dHlwZW9mIGEuZGlzYWJsZWQmJiEwPT09YS5kaXNhYmxlZC5jYWxsKHRoaXMuaG90KXx8UmQoYSwic3VibWVudSIpKXJldHVybjtjb25zdCBsPVtdOyJmdW5jdGlvbiI9PXR5cGVvZiBhLmNhbGxiYWNrJiZsLnB1c2goYS5jYWxs''@;'; put 'put ''YmFjayksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuY29tbW9uQ2FsbGJhY2smJmwucHVzaCh0aGlzLmNvbW1vbkNhbGxiYWNrKSx0LnVuc2hpZnQoci5qb2luKCI6IikpLFhuKGwsdT0+dS5hcHBseSh0aGlzLmhvdCx0KSl9Y29uc3RydWN0b3IoZSl7dGhpcy5jb21tYW5kcz17fSx0aGlzLmNv''@;'; put 'put ''bW1vbkNhbGxiYWNrPW51bGwsdGhpcy5ob3Q9ZX19Y29uc3QgcG09ImFsaWdubWVudCIsWFo9ImNsZWFyX2NvbHVtbiIsZU49ImNvbF9sZWZ0Iix0Tj0iY29sX3JpZ2h0IixuTj0ibWFrZV9yZWFkX29ubHkiLFFaPSJyZWRvIixyTj0icmVtb3ZlX2NvbCIsSlo9InJlbW92ZV9yb3ciLGVHPSJy''@;'; put 'put ''b3dfYWJvdmUiLHRHPSJyb3dfYmVsb3ciLGlOPSJub19pdGVtcyIsbkc9InVuZG8iLE5OZT1bZUcsdEcsZU4sdE4sWFosSlosck4sbkcsUVosbk4scG0sdnMsaU5dLEZOZT17W3ZzXTpmdW5jdGlvbiBqSHQoKXtyZXR1cm57bmFtZTp2c319LFtpTl06ZnVuY3Rpb24gZ1Z0KCl7cmV0dXJue2tl''@;'; put 'put ''eTppTixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShKbGUpfSxkaXNhYmxlZDohMCxpc0NvbW1hbmQ6ITF9fSxbZUddOmZ1bmN0aW9uIGZWdCgpe3JldHVybntrZXk6ZUcsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoZWNlKX0sY2FsbGJhY2so''@;'; put 'put ''KXtjb25zdCBuPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFuKXJldHVybjtjb25zdCBlPW4uZ2V0VG9wTGVmdENvcm5lcigpO251bGwhPT1lLnJvdyYmdGhpcy5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsZS5yb3csMSwiQ29udGV4dE1lbnUucm93QWJvdmUiKX0sZGlzYWJs''@;'; put 'put ''ZWQoKXtjb25zdCBuPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO3JldHVybiEhKCFufHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8bi5pc1NpbmdsZUhlYWRlcigpJiZudWxsIT09bi5oaWdobGlnaHQucm93JiZuLmhpZ2hsaWdodC5yb3c8MHx8dGhp''@;'; put 'put ''cy5jb3VudFNvdXJjZVJvd3MoKT49KHRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzPz8xLzApKXx8ISF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmMD09PXRoaXMuY291bnRSb3dzKCl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRS''@;'; put 'put ''b3d9fX0sW3RHXTpmdW5jdGlvbiBwVnQoKXtyZXR1cm57a2V5OnRHLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHRjZSl9LGNhbGxiYWNrKCl7Y29uc3Qgbj10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighbilyZXR1cm47Y29uc3QgZT1uLmdldEJvdHRv''@;'; put 'put ''bVJpZ2h0Q29ybmVyKCk7bnVsbCE9PWUucm93JiZ0aGlzLmFsdGVyKCJpbnNlcnRfcm93X2JlbG93IixlLnJvdywxLCJDb250ZXh0TWVudS5yb3dCZWxvdyIpfSxkaXNhYmxlZCgpe2NvbnN0IG49dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7cmV0dXJuISEoIW58fHRoaXMuc2VsZWN0''@;'; put 'put ''aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHxuLmlzU2luZ2xlSGVhZGVyKCkmJm51bGwhPT1uLmhpZ2hsaWdodC5yb3cmJm4uaGlnaGxpZ2h0LnJvdzwwfHx0aGlzLmNvdW50U291cmNlUm93cygpPj0odGhpcy5nZXRTZXR0aW5ncygpLm1heFJvd3M/PzEvMCkpfSxoaWRkZW4oKXty''@;'; put 'put ''ZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93SW5zZXJ0Um93fX19LFtlTl06ZnVuY3Rpb24gc1Z0KCl7cmV0dXJue2tleTplTixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShuY2UpfSxjYWxsYmFjaygpe2NvbnN0IG49dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0''@;'; put 'put ''aXZlKCk7aWYoIW4pcmV0dXJuO2NvbnN0IGU9bi5nZXRUb3BMZWZ0Q29ybmVyKCksdD10aGlzLmlzUnRsKCk/Imluc2VydF9jb2xfZW5kIjoiaW5zZXJ0X2NvbF9zdGFydCI7bnVsbCE9PWUuY29sJiZ0aGlzLmFsdGVyKHQsZS5jb2wsMSwiQ29udGV4dE1lbnUuY29sdW1uTGVmdCIpfSxkaXNh''@;'; put 'put ''YmxlZCgpe2lmKCF0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpKXJldHVybiEwO2NvbnN0IG49dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7cmV0dXJuISEoIW58fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHxuLmlzU2luZ2xlSGVhZGVyKCkm''@;'; put 'put ''JihuLmhpZ2hsaWdodC5jb2w/PzApPDB8fHRoaXMuY291bnRTb3VyY2VDb2xzKCk+PSh0aGlzLmdldFNldHRpbmdzKCkubWF4Q29scz8/MS8wKSl8fCEhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJjA9PT10aGlzLmNvdW50Q29scygpfSxoaWRkZW4oKXtyZXR1cm4hdGhp''@;'; put 'put ''cy5nZXRTZXR0aW5ncygpLmFsbG93SW5zZXJ0Q29sdW1ufX19LFt0Tl06ZnVuY3Rpb24gbFZ0KCl7cmV0dXJue2tleTp0TixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShyY2UpfSxjYWxsYmFjaygpe2NvbnN0IG49dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7''@;'; put 'put ''aWYoIW4pcmV0dXJuO2NvbnN0IGU9bi5nZXRUb3BSaWdodENvcm5lcigpLHQ9dGhpcy5pc1J0bCgpPyJpbnNlcnRfY29sX3N0YXJ0IjoiaW5zZXJ0X2NvbF9lbmQiO251bGwhPT1lLmNvbCYmdGhpcy5hbHRlcih0LGUuY29sLDEsIkNvbnRleHRNZW51LmNvbHVtblJpZ2h0Iil9LGRpc2FibGVk''@;'; put 'put ''KCl7aWYoIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpcmV0dXJuITA7Y29uc3Qgbj10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtyZXR1cm4hISghbnx8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fG4uaXNTaW5nbGVIZWFkZXIoKSYmKG4u''@;'; put 'put ''aGlnaGxpZ2h0LmNvbD8/MCk8MHx8dGhpcy5jb3VudFNvdXJjZUNvbHMoKT49KHRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhDb2xzPz8xLzApKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydENvbHVtbn19fSxbWFpdOmZ1bmN0aW9uIGFWdCgpe3JldHVybntr''@;'; put 'put ''ZXk6WFosbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UobGNlKX0sY2FsbGJhY2sobixlKXtjb25zdCB0PWVbMF0uc3RhcnQuY29sLHI9ZVswXS5lbmQuY29sO3RoaXMuY291bnRSb3dzKCkmJnRoaXMucG9wdWxhdGVGcm9tQXJyYXkoMCx0LFtbbnVsbF1dLE1hdGgubWF4''@;'; put 'put ''KGVbMF0uc3RhcnQucm93LGVbMF0uZW5kLnJvdyksciwiQ29udGV4dE1lbnUuY2xlYXJDb2x1bW4iKX0sZGlzYWJsZWQoKXtjb25zdCBuPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFufHxuLmlzU2luZ2xlSGVhZGVyKCkmJihudWxsPT09bi5oaWdobGlnaHQuY29sfHxuLmhp''@;'; put 'put ''Z2hsaWdodC5jb2w8MCl8fCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSlyZXR1cm4hMDtsZXQgZT0hMTtyZXR1cm4gbi5mb3JBbGwoKHQscik9PntpZih0PDB8fHI8MClyZXR1cm4hMDtjb25zdHtyZWFkT25seTppfT10aGlzLmdldENlbGxNZXRhKHQscik7cmV0''@;'; put 'put ''dXJuISFpfHwoZT0hMCwhMSl9KSwhZX19fSxbSlpdOmZ1bmN0aW9uIGhWdCgpe3JldHVybntrZXk6SlosbmFtZSgpe2NvbnN0IG49dGhpcy5nZXRTZWxlY3RlZCgpO2xldCBlPTA7aWYobilpZihuLmxlbmd0aD4xKWU9MTtlbHNle2NvbnN0W3QsLHJdPW5bMF07dC1yIT09MCYmKGU9MSl9cmV0''@;'; put 'put ''dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShpY2UsZSl9LGNhbGxiYWNrKCl7dGhpcy5hbHRlcigicmVtb3ZlX3JvdyIsZnVuY3Rpb24gZ1J0KG4pe2NvbnN0IGU9Y1Qobi5nZXRTZWxlY3RlZCgpKTtpZigwPT09ZXx8MT09PWUpcmV0dXJuW107Y29uc3QgdD1KTChlLHtjcmVhdGVDZWxs''@;'; put 'put ''Q29vcmRzOm4uX2NyZWF0ZUNlbGxDb29yZHMuYmluZChuKSxjcmVhdGVDZWxsUmFuZ2U6bi5fY3JlYXRlQ2VsbFJhbmdlLmJpbmQobil9KSxyPW5ldyBTZXQ7cmV0dXJuIFhuKG4uZ2V0U2VsZWN0ZWQoKT8/W10sYT0+e2NvbnN0e2Zyb206bCx0bzp1fT10KGEpLGc9TWF0aC5tYXgobC5yb3c/''@;'; put 'put ''PzAsMCk7WG4oQXJyYXkuZnJvbShuZXcgQXJyYXkoKHUucm93Pz8wKS1nKzEpLChPLFopPT5nK1opLE89PntyLmhhcyhPKXx8ci5hZGQoTyl9KX0pLG0xKEFycmF5LmZyb20ocikuc29ydCgoYSxsKT0+YS1sKSwoYSxsLHUsZyk9PigwIT09dSYmbD09PWdbdS0xXSsxP2FbYS5sZW5ndGgtMV1b''@;'; put 'put ''MV0rPTE6YS5wdXNoKFtsLDFdKSxhKSxbXSl9KHRoaXMpLDEsIkNvbnRleHRNZW51LnJlbW92ZVJvdyIpfSxkaXNhYmxlZCgpe2NvbnN0IG49dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIW58fG4uaXNTaW5nbGVIZWFkZXIoKSYmbnVsbCE9PW4uaGlnaGxpZ2h0LnJvdyYmbi5o''@;'; put 'put ''aWdobGlnaHQucm93PDApcmV0dXJuITA7Y29uc3QgZT10aGlzLmNvdW50Um93cygpO3JldHVybiB0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKT8wPT09ZTp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8MD09PWV9LGhpZGRlbigpe3JldHVybiF0''@;'; put 'put ''aGlzLmdldFNldHRpbmdzKCkuYWxsb3dSZW1vdmVSb3d9fX0sW3JOXTpmdW5jdGlvbiBkVnQoKXtyZXR1cm57a2V5OnJOLG5hbWUoKXtjb25zdCBuPXRoaXMuZ2V0U2VsZWN0ZWQoKTtsZXQgZT0wO2lmKG4paWYobi5sZW5ndGg+MSllPTE7ZWxzZXtjb25zdFssdCwscl09blswXTt0LXIhPT0w''@;'; put 'put ''JiYoZT0xKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKG9jZSxlKX0sY2FsbGJhY2soKXt0aGlzLmFsdGVyKCJyZW1vdmVfY29sIixmdW5jdGlvbiBwUnQobil7Y29uc3QgZT1jVChuLmdldFNlbGVjdGVkKCkpO2lmKDA9PT1lfHwxPT09ZSlyZXR1cm5bXTtjb25zdCB0PUpMKGUs''@;'; put 'put ''e2NyZWF0ZUNlbGxDb29yZHM6bi5fY3JlYXRlQ2VsbENvb3Jkcy5iaW5kKG4pLGNyZWF0ZUNlbGxSYW5nZTpuLl9jcmVhdGVDZWxsUmFuZ2UuYmluZChuKX0pLHI9bmV3IFNldDtyZXR1cm4gWG4obi5nZXRTZWxlY3RlZCgpPz9bXSxhPT57Y29uc3R7ZnJvbTpsLHRvOnV9PXQoYSksZz1NYXRo''@;'; put 'put ''Lm1heChsLmNvbD8/MCwwKTtYbihBcnJheS5mcm9tKG5ldyBBcnJheSgodS5jb2w/PzApLWcrMSksKE8sWik9PmcrWiksTz0+e3IuaGFzKE8pfHxyLmFkZChPKX0pfSksbTEoQXJyYXkuZnJvbShyKS5zb3J0KChhLGwpPT5hLWwpLChhLGwsdSxnKT0+KDAhPT11JiZsPT09Z1t1LTFdKzE/YVth''@;'; put 'put ''Lmxlbmd0aC0xXVsxXSs9MTphLnB1c2goW2wsMV0pLGEpLFtdKX0odGhpcyksdm9pZCAwLCJDb250ZXh0TWVudS5yZW1vdmVDb2x1bW4iKX0sZGlzYWJsZWQoKXtpZighdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKSlyZXR1cm4hMDtjb25zdCBuPXRoaXMuZ2V0U2VsZWN0ZWRS''@;'; put 'put ''YW5nZUFjdGl2ZSgpO2lmKCFufHxuLmlzU2luZ2xlSGVhZGVyKCkmJm51bGwhPT1uLmhpZ2hsaWdodC5jb2wmJm4uaGlnaGxpZ2h0LmNvbDwwKXJldHVybiEwO2NvbnN0IGU9dGhpcy5jb3VudENvbHMoKTtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCk/MD09PWU6''@;'; put 'put ''dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fDA9PT1lfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93UmVtb3ZlQ29sdW1ufX19LFtuR106ZnVuY3Rpb24gbVZ0KCl7cmV0dXJue2tleTpuRyxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNs''@;'; put 'put ''YXRlZFBocmFzZShhY2UpfSxjYWxsYmFjaygpe3RoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpLnVuZG8oKX0saGlkZGVuKCl7Y29uc3Qgbj10aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKTtyZXR1cm4hbnx8IW4uaXNFbmFibGVkKCl9LGRpc2FibGVkKCl7cmV0dXJuIXRoaXMuZ2V0UGx1Z2lu''@;'; put 'put ''KCJ1bmRvUmVkbyIpLmlzVW5kb0F2YWlsYWJsZSgpfX19LFtRWl06ZnVuY3Rpb24gdVZ0KCl7cmV0dXJue2tleTpRWixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShzY2UpfSxjYWxsYmFjaygpe3RoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpLnJlZG8oKX0saGlkZGVu''@;'; put 'put ''KCl7Y29uc3Qgbj10aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKTtyZXR1cm4hbnx8IW4uaXNFbmFibGVkKCl9LGRpc2FibGVkKCl7cmV0dXJuIXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpLmlzUmVkb0F2YWlsYWJsZSgpfX19LFtuTl06ZnVuY3Rpb24gY1Z0KCl7cmV0dXJue2tleTpuTixj''@;'; put 'put ''aGVja2FibGU6ITAsYXJpYUNoZWNrZWQoKXtyZXR1cm4gV1oodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk/P1tdLChlLHQpPT4hIXRoaXMuZ2V0Q2VsbE1ldGEoZSx0KS5yZWFkT25seSl9LGFyaWFMYWJlbCgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoUlkpfSxuYW1lKCl7bGV0''@;'; put 'put ''IG49dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFJZKTtyZXR1cm4gV1oodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk/P1tdLCh0LHIpPT4hIXRoaXMuZ2V0Q2VsbE1ldGEodCxyKS5yZWFkT25seSkmJihuPU1OZShuKSksbn0sY2FsbGJhY2soKXtjb25zdCBuPXRoaXMuZ2V0U2VsZWN0ZWRSYW5n''@;'; put 'put ''ZSgpPz9bXSxlPVdaKG4sKHQscik9PiEhdGhpcy5nZXRDZWxsTWV0YSh0LHIpLnJlYWRPbmx5KTtmb3IoY29uc3QgdCBvZiBuKXQuZm9yQWxsKChyLGkpPT57cj49MCYmaT49MCYmdGhpcy5zZXRDZWxsTWV0YShyLGksInJlYWRPbmx5IiwhZSl9KTt0aGlzLnJlbmRlcigpfSxkaXNhYmxlZCgp''@;'; put 'put ''e2NvbnN0IG49dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7cmV0dXJuIShuJiYhbi5pc1NpbmdsZUhlYWRlcigpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJjAhPT10aGlzLmNvdW50Um93cygpJiYwIT09dGhpcy5jb3VudENvbHMoKSYmdGhpcy5nZXRTZWxl''@;'; put 'put ''Y3RlZFJhbmdlKCk/Lmxlbmd0aCl9fX0sW3BtXTpmdW5jdGlvbiBvVnQoKXtyZXR1cm57a2V5OnBtLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKE1jZSl9LGRpc2FibGVkKCl7aWYoMD09PXRoaXMuY291bnRSb3dzKCl8fDA9PT10aGlzLmNvdW50Q29scygpKXJldHVy''@;'; put 'put ''biEwO2NvbnN0IG49dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7cmV0dXJuIShuJiYhbi5pc1NpbmdsZUhlYWRlcigpJiZ0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSYmIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX0sc3VibWVudTp7aXRlbXM6W3trZXk6YCR7cG19''@;'; put 'put ''OmxlZnRgLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFRjZSl9LGNhbGxiYWNrKCl7Y29uc3Qgbj10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKT8/W10sZT1LdyhuLChpLG8pPT50aGlzLmdldENlbGxNZXRhKGksbykuY2xhc3NOYW1lKSx0PSJob3Jpem9udGFsIixyPSJo''@;'; put 'put ''dExlZnQiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGUsbix0LHIpLF9fKG4sdCxyLChpLG8pPT50aGlzLmdldENlbGxNZXRhKGksbyksKGksbyxhLGwpPT50aGlzLnNldENlbGxNZXRhKGksbyxhLGwpKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHtw''@;'; put 'put ''bX06Y2VudGVyYCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh4Y2UpfSxjYWxsYmFjaygpe2NvbnN0IG49dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk/P1tdLGU9S3cobiwoaSxvKT0+dGhpcy5nZXRDZWxsTWV0YShpLG8pLmNsYXNzTmFtZSksdD0iaG9yaXpvbnRhbCIs''@;'; put 'put ''cj0iaHRDZW50ZXIiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGUsbix0LHIpLF9fKG4sdCxyLChpLG8pPT50aGlzLmdldENlbGxNZXRhKGksbyksKGksbyxhLGwpPT50aGlzLnNldENlbGxNZXRhKGksbyxhLGwpKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tl''@;'; put 'put ''eTpgJHtwbX06cmlnaHRgLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEFjZSl9LGNhbGxiYWNrKCl7Y29uc3Qgbj10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKT8/W10sZT1LdyhuLChpLG8pPT50aGlzLmdldENlbGxNZXRhKGksbykuY2xhc3NOYW1lKSx0PSJob3Jpem9u''@;'; put 'put ''dGFsIixyPSJodFJpZ2h0Ijt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixlLG4sdCxyKSxfXyhuLHQsciwoaSxvKT0+dGhpcy5nZXRDZWxsTWV0YShpLG8pLChpLG8sYSxsKT0+dGhpcy5zZXRDZWxsTWV0YShpLG8sYSxsKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9''@;'; put 'put ''LHtrZXk6YCR7cG19Omp1c3RpZnlgLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGtjZSl9LGNhbGxiYWNrKCl7Y29uc3Qgbj10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKT8/W10sZT1LdyhuLChpLG8pPT50aGlzLmdldENlbGxNZXRhKGksbykuY2xhc3NOYW1lKSx0PSJo''@;'; put 'put ''b3Jpem9udGFsIixyPSJodEp1c3RpZnkiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGUsbix0LHIpLF9fKG4sdCxyLChpLG8pPT50aGlzLmdldENlbGxNZXRhKGksbyksKGksbyxhLGwpPT50aGlzLnNldENlbGxNZXRhKGksbyxhLGwpKSx0aGlzLnJlbmRlcigpfSxkaXNh''@;'; put 'put ''YmxlZDohMX0se25hbWU6dnN9LHtrZXk6YCR7cG19OnRvcGAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoUmNlKX0sY2FsbGJhY2soKXtjb25zdCBuPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpPz9bXSxlPUt3KG4sKGksbyk9PnRoaXMuZ2V0Q2VsbE1ldGEoaSxvKS5j''@;'; put 'put ''bGFzc05hbWUpLHQ9InZlcnRpY2FsIixyPSJodFRvcCI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsZSxuLHQsciksX18obix0LHIsKGksbyk9PnRoaXMuZ2V0Q2VsbE1ldGEoaSxvKSwoaSxvLGEsbCk9PnRoaXMuc2V0Q2VsbE1ldGEoaSxvLGEsbCkpLHRoaXMucmVuZGVy''@;'; put 'put ''KCl9LGRpc2FibGVkOiExfSx7a2V5OmAke3BtfTptaWRkbGVgLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEljZSl9LGNhbGxiYWNrKCl7Y29uc3Qgbj10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKT8/W10sZT1LdyhuLChpLG8pPT50aGlzLmdldENlbGxNZXRhKGksbyku''@;'; put 'put ''Y2xhc3NOYW1lKSx0PSJ2ZXJ0aWNhbCIscj0iaHRNaWRkbGUiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGUsbix0LHIpLF9fKG4sdCxyLChpLG8pPT50aGlzLmdldENlbGxNZXRhKGksbyksKGksbyxhLGwpPT50aGlzLnNldENlbGxNZXRhKGksbyxhLGwpKSx0aGlzLnJl''@;'; put 'put ''bmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHtwbX06Ym90dG9tYCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShEY2UpfSxjYWxsYmFjaygpe2NvbnN0IG49dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk/P1tdLGU9S3cobiwoaSxvKT0+dGhpcy5nZXRDZWxsTWV0YShp''@;'; put 'put ''LG8pLmNsYXNzTmFtZSksdD0idmVydGljYWwiLHI9Imh0Qm90dG9tIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixlLG4sdCxyKSxfXyhuLHQsciwoaSxvKT0+dGhpcy5nZXRDZWxsTWV0YShpLG8pLChpLG8sYSxsKT0+dGhpcy5zZXRDZWxsTWV0YShpLG8sYSxsKSksdGhp''@;'; put 'put ''cy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9XX19fX07ZnVuY3Rpb24gUE5lKCl7Y29uc3Qgbj17fTtyZXR1cm4gYWMoRk5lLChlLHQpPT57blt0XT1lKCl9KSxufWNsYXNzIEhOZXtzZXRQcmVkZWZpbmVkSXRlbXMoZSl7Y29uc3QgdD17fTt0aGlzLmRlZmF1bHRPcmRlclBhdHRlcm4ubGVuZ3Ro''@;'; put 'put ''PTAsYWMoZSwocixpKT0+e2NvbnN0IG89cjtsZXQgYT0iIjtpZihvLm5hbWU9PT12cyl0W3ZzXT1vLGE9dnM7ZWxzZSBpZihpc05hTihwYXJzZUludChpLDEwKSkpby5rZXk9dm9pZCAwPT09by5rZXk/aTpvLmtleSx0W2ldPW8sYT1TdHJpbmcoby5rZXk/PyIiKTtlbHNle2NvbnN0IGw9U3Ry''@;'; put 'put ''aW5nKG8ua2V5Pz8iIik7aWYodFtsXSlyZXR1cm4gdm9pZCBZZCh0W2xdLG8pO3RbbF09byxhPWx9dGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLnB1c2goYSl9KSx0aGlzLnByZWRlZmluZWRJdGVtcz10fWdldEl0ZW1zKGU9bnVsbCl7cmV0dXJuIGZ1bmN0aW9uIHZWdChuPW51bGwsZT1bXSx0''@;'; put 'put ''PXt9KXtjb25zdCByPVtdO2xldCBpPW47cmV0dXJuIGkmJmkuaXRlbXM/aT1pLml0ZW1zOkFycmF5LmlzQXJyYXkoaSl8fChpPWUpLENhKGkpP2FjKGksKG8sYSk9PntsZXQgbD10WyJzdHJpbmciPT10eXBlb2Ygbz9vOmFdO2x8fChsPW8pLENhKG8pP1lkKGwsbyk6InN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBsJiYobD17bmFtZTpsfSksdm9pZCAwPT09bC5rZXkmJihsLmtleT1hKSxyLnB1c2gobCl9KTpYbihpLChvLGEpPT57bGV0IGw9dFtvXTshbCYmTk5lLmluZGV4T2Yobyk+PTB8fChsfHwobD17bmFtZTpvLGtleTpgJHthfWB9KSxDYShvKSYmWWQobCxvKSx2b2lkIDA9PT1sLmtleSYmKGwu''@;'; put 'put ''a2V5PWEpLHIucHVzaChsKSl9KSxyfShlLHRoaXMuZGVmYXVsdE9yZGVyUGF0dGVybix0aGlzLnByZWRlZmluZWRJdGVtcyl9Y29uc3RydWN0b3IoZSx0PW51bGwpe3RoaXMucHJlZGVmaW5lZEl0ZW1zPVBOZSgpLHRoaXMuaG90PWUsdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuPXR8fFtdfX1j''@;'; put 'put ''bGFzcyBfVnR7Z2V0U291cmNlVHlwZShlKXtsZXQgdD0ibGl0ZXJhbCI7cmV0dXJuIGUgaW5zdGFuY2VvZiBFdmVudCYmKHQ9ImV2ZW50IiksdH1maXRzQWJvdmUoZSl7cmV0dXJuIHRoaXMudG9wUmVsYXRpdmU+PWUub2Zmc2V0SGVpZ2h0fWZpdHNCZWxvdyhlLHQ9dGhpcy5yb290V2luZG93''@;'; put 'put ''LmlubmVySGVpZ2h0KXtyZXR1cm4gdGhpcy50b3BSZWxhdGl2ZStlLm9mZnNldEhlaWdodDw9dH1maXRzT25SaWdodChlLHQ9dGhpcy5yb290V2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCl7cmV0dXJuIHRoaXMubGVmdFJlbGF0aXZlK3RoaXMuY2VsbFdpZHRo''@;'; put 'put ''K2Uub2Zmc2V0V2lkdGg8PXR9Zml0c09uTGVmdChlKXtyZXR1cm4gdGhpcy5sZWZ0UmVsYXRpdmU+PWUub2Zmc2V0V2lkdGh9Y29uc3RydWN0b3IoZSx0KXtjb25zdCByPXQuc2Nyb2xsWSxpPXQuc2Nyb2xsWDtsZXQgbz0wLGE9MCxsPTAsdT0wLGc9MCxFPTA7aWYodGhpcy5yb290V2luZG93''@;'; put 'put ''PXQsdGhpcy50eXBlPXRoaXMuZ2V0U291cmNlVHlwZShlKSwibGl0ZXJhbCI9PT10aGlzLnR5cGUpe2NvbnN0IE89ZTtvPXBhcnNlSW50KFN0cmluZyhPLnRvcCksMTApLGw9cGFyc2VJbnQoU3RyaW5nKE8ubGVmdCksMTApLGc9Ty5oZWlnaHR8fDAsRT1PLndpZHRofHwwLGE9byx1PWwsbys9''@;'; put 'put ''cixsKz1pfWVsc2UgaWYoImV2ZW50Ij09PXRoaXMudHlwZSl7Y29uc3QgTz1lO289cGFyc2VJbnQoU3RyaW5nKE8ucGFnZVkpLDEwKSxsPXBhcnNlSW50KFN0cmluZyhPLnBhZ2VYKSwxMCksZz1BYShPKS5jbGllbnRIZWlnaHQsRT1BYShPKS5jbGllbnRXaWR0aCxhPW8tcix1PWwtaX10aGlz''@;'; put 'put ''LnRvcD1vLHRoaXMudG9wUmVsYXRpdmU9YSx0aGlzLmxlZnQ9bCx0aGlzLmxlZnRSZWxhdGl2ZT11LHRoaXMuc2Nyb2xsVG9wPXIsdGhpcy5zY3JvbGxMZWZ0PWksdGhpcy5jZWxsSGVpZ2h0PWcsdGhpcy5jZWxsV2lkdGg9RX19ZnVuY3Rpb24gVk5lKG4sZSx0KXtpZighZS5oYXMobikpdGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIEdzKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIGJWdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4s''@;'; put 'put ''Vk5lKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIG9OKG4sZSx0KXsoZnVuY3Rpb24geVZ0KG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sZSksZS5zZXQo''@;'; put 'put ''bix0KX1mdW5jdGlvbiBQNyhuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIHdWdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFs''@;'; put 'put ''dWU9dH19KG4sVk5lKG4sZSwic2V0IiksdCksdH12YXIgcTI9bmV3IFdlYWtNYXAsWmY9bmV3IFdlYWtNYXAsR2Y9bmV3IFdlYWtNYXAsckc9bmV3IFdlYWtNYXAsUXc9bmV3IFdlYWtNYXA7Y2xhc3MgQ1Z0e3NldE9mZnNldChlLHQ9MCl7cmV0dXJuIEdzKHRoaXMsUXcpW2VdPXQsdGhpc31z''@;'; put 'put ''ZXRFbGVtZW50KGUpe3JldHVybiBQNyh0aGlzLHEyLGUpLHRoaXN9c2V0UGFyZW50RWxlbWVudChlKXtyZXR1cm4gUDcodGhpcyxaZixlKSx0aGlzfXVwZGF0ZVBvc2l0aW9uKGUpe1A3KHRoaXMsR2YsbmV3IF9WdChlLEdzKHRoaXMscTIpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpKSxH''@;'; put 'put ''cyh0aGlzLHJHKT8oR3ModGhpcyxHZikuZml0c0JlbG93KEdzKHRoaXMscTIpKT90aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoKTpHcyh0aGlzLEdmKS5maXRzQWJvdmUoR3ModGhpcyxxMikpP3RoaXMuc2V0UG9zaXRpb25BYm92ZUN1cnNvcigpOnRoaXMuc2V0UG9zaXRpb25CZWxvd0N1''@;'; put 'put ''cnNvcigpLHRoaXMudXBkYXRlSG9yaXpvbnRhbFBvc2l0aW9uKCkpOih0aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoKSx0aGlzLnNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKCkpfXVwZGF0ZUhvcml6b250YWxQb3NpdGlvbigpeyJydGwiPT09R3ModGhpcyxxMikuZGlyP0dzKHRoaXMs''@;'; put 'put ''R2YpLmZpdHNPbkxlZnQoR3ModGhpcyxxMikpP3RoaXMuc2V0UG9zaXRpb25PbkxlZnRPZkN1cnNvcigpOnRoaXMuc2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IoKTpHcyh0aGlzLEdmKS5maXRzT25SaWdodChHcyh0aGlzLHEyKSk/dGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcigp''@;'; put 'put ''OnRoaXMuc2V0UG9zaXRpb25PbkxlZnRPZkN1cnNvcigpfXNldFBvc2l0aW9uQWJvdmVDdXJzb3IoKXtsZXQgZT1Hcyh0aGlzLFF3KS5hYm92ZStHcyh0aGlzLEdmKS50b3AtR3ModGhpcyxxMikub2Zmc2V0SGVpZ2h0O2lmKEdzKHRoaXMsWmYpKXtjb25zdCByPUdzKHRoaXMsWmYpLm93bmVy''@;'; put 'put ''RG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShHcyh0aGlzLFpmKS5xdWVyeVNlbGVjdG9yKCIuaHRfbWFzdGVyIikpLGk9TnVtYmVyLnBhcnNlSW50KHIucGFkZGluZ1RvcCwxMCksbz1OdW1iZXIucGFyc2VJbnQoci5ib3JkZXJUb3AsMTApO2U9R3ModGhpcyxHZikudG9w''@;'; put 'put ''K0dzKHRoaXMsR2YpLmNlbGxIZWlnaHQtR3ModGhpcyxxMikuc2Nyb2xsSGVpZ2h0K2krb31Hcyh0aGlzLHEyKS5zdHlsZS50b3A9YCR7ZX1weGB9c2V0UG9zaXRpb25CZWxvd0N1cnNvcigpe2xldCBlPUdzKHRoaXMsUXcpLmJlbG93K0dzKHRoaXMsR2YpLnRvcCsxO2lmKEdzKHRoaXMsWmYp''@;'; put 'put ''KXtjb25zdCByPUdzKHRoaXMsWmYpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShHcyh0aGlzLFpmKS5xdWVyeVNlbGVjdG9yKCIuaHRfbWFzdGVyIikpLGk9TnVtYmVyLnBhcnNlSW50KHIucGFkZGluZ1RvcCwxMCksbz1OdW1iZXIucGFyc2VJbnQoci5ib3Jk''@;'; put 'put ''ZXJUb3AsMTApO2U9R3ModGhpcyxHZikudG9wLWktb31Hcyh0aGlzLHEyKS5zdHlsZS50b3A9YCR7ZX1weGB9c2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IoKXtsZXQgZT1Hcyh0aGlzLEdmKS5sZWZ0O2lmKEdzKHRoaXMsWmYpKXtjb25zdCB0PUdzKHRoaXMsWmYpLm93bmVyRG9jdW1lbnQu''@;'; put 'put ''ZGVmYXVsdFZpZXcscj1OdW1iZXIucGFyc2VJbnQodC5nZXRDb21wdXRlZFN0eWxlKEdzKHRoaXMsWmYpLnF1ZXJ5U2VsZWN0b3IoIi5odENvcmUiKSkuYm9yZGVyUmlnaHRXaWR0aCwxMCk7ZSs9R3ModGhpcyxHZikuY2VsbFdpZHRoK3J9ZWxzZSBlKz1Hcyh0aGlzLFF3KS5yaWdodDtHcyh0''@;'; put 'put ''aGlzLHEyKS5zdHlsZS5sZWZ0PWAke2V9cHhgfXNldFBvc2l0aW9uT25MZWZ0T2ZDdXJzb3IoKXtsZXQgZT1Hcyh0aGlzLFF3KS5sZWZ0K0dzKHRoaXMsR2YpLmxlZnQtR3ModGhpcyxxMikub2Zmc2V0V2lkdGg7aWYoR3ModGhpcyxaZikpe2NvbnN0IHQ9R3ModGhpcyxaZikub3duZXJEb2N1''@;'; put 'put ''bWVudC5kZWZhdWx0VmlldztlLT1OdW1iZXIucGFyc2VJbnQodC5nZXRDb21wdXRlZFN0eWxlKEdzKHRoaXMsWmYpLnF1ZXJ5U2VsZWN0b3IoIi5odENvcmUiKSkuYm9yZGVyTGVmdFdpZHRoLDEwKX1Hcyh0aGlzLHEyKS5zdHlsZS5sZWZ0PWAke2V9cHhgfWNvbnN0cnVjdG9yKGUpe29OKHRo''@;'; put 'put ''aXMscTIse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLG9OKHRoaXMsWmYse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLG9OKHRoaXMsR2Yse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLG9OKHRoaXMsckcse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLG9OKHRoaXMsUXcse3dy''@;'; put 'put ''aXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFA3KHRoaXMscTIsbnVsbCksUDcodGhpcyxaZixudWxsKSxQNyh0aGlzLEdmLG51bGwpLFA3KHRoaXMsckcsITEpLFA3KHRoaXMsUXcse2Fib3ZlOjAsYmVsb3c6MCxsZWZ0OjAscmlnaHQ6MH0pLFA3KHRoaXMsckcsZSl9fWZ1bmN0aW9uIEJOZSh7''@;'; put 'put ''aW5pdGlhbFBhZ2U6bj0tMSxzaXplOmU9KCk9PjAsb25JdGVtU2VsZWN0OnQ9KCk9Pnt9LG9uQ2xlYXI6cj0oKT0+e319KXtjb25zdCBpPW5ldyBTZXQ7bGV0IG89VnMobiwtMSx2ZSgpLTEpO2Z1bmN0aW9uIGEoSGUsV2Upe2NvbnN0IGF0PXZlKCktMTtyZXR1cm4gSGU8MCYmKEhlPWF0KSxI''@;'; put 'put ''ZT5hdCYmKEhlPTApLGkuaGFzKEhlKT8tMTooaS5hZGQoSGUpLCExPT09dChIZSwhMSkmJihIZT1hKDE9PT1XZT8rK0hlOi0tSGUsV2UpKSxIZSl9ZnVuY3Rpb24gdmUoKXtyZXR1cm4gTWF0aC5tYXgoZSgpLDApfXJldHVybntzZXRDdXJyZW50UGFnZTpmdW5jdGlvbiBsKEhlKXtIZT4tMSYm''@;'; put 'put ''SGU8dmUoKSYmITEhPT10KEhlLCEwKSYmKG89SGUpfSxzZXRQYWdlQ3Vyc29yQXQ6ZnVuY3Rpb24gdShIZSl7SGU+LTEmJkhlPHZlKCkmJihvPUhlKX0sZ2V0Q3VycmVudFBhZ2U6ZnVuY3Rpb24gZygpe3JldHVybiBvfSx0b0ZpcnN0SXRlbTpmdW5jdGlvbiBFKCl7dmUoKT4wJiYoaS5jbGVh''@;'; put 'put ''cigpLG89YSgwLDEpKX0sdG9MYXN0SXRlbTpmdW5jdGlvbiBPKCl7dmUoKT4wJiYoaS5jbGVhcigpLG89YSh2ZSgpLTEsLTEpKX0sdG9OZXh0SXRlbTpmdW5jdGlvbiBaKCl7dmUoKT4wJiYoaS5jbGVhcigpLG89YSgrK28sMSkpfSx0b1ByZXZpb3VzSXRlbTpmdW5jdGlvbiBlZSgpe3ZlKCk+''@;'; put 'put ''MCYmKGkuY2xlYXIoKSxvPWEoLS1vLC0xKSl9LGdldFNpemU6dmUsY2xlYXI6ZnVuY3Rpb24gTWUoKXtpLmNsZWFyKCksbz1uLHIoKX19fWZ1bmN0aW9uIEUxZShuKXtyZXR1cm4gUmQobiwic3VibWVudSIpfWZ1bmN0aW9uIE0xZShuKXtyZXR1cm4gbmV3IFJlZ0V4cCh2cywiaSIpLnRlc3Qo''@;'; put 'put ''bi5uYW1lPz8iIil9ZnVuY3Rpb24gaUcobixlKXtyZXR1cm4hMD09PW4uZGlzYWJsZWR8fCJmdW5jdGlvbiI9PXR5cGVvZiBuLmRpc2FibGVkJiYhMD09PW4uZGlzYWJsZWQuY2FsbChlKX1mdW5jdGlvbiBqTmUobil7cmV0dXJuIFJkKG4sImRpc2FibGVTZWxlY3Rpb24iKX1mdW5jdGlvbiBV''@;'; put 'put ''TmUobixlKXtjb25zdCB0PW4uc2xpY2UoMCk7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aCYmdFtyXS5uYW1lPT09ZTspdC5zaGlmdCgpO3JldHVybiB0fWZ1bmN0aW9uIERWdChuKXtyZXR1cm4hMD09PW4uY2hlY2thYmxlfWZ1bmN0aW9uIEZWdChuKXtyZXR1cm4oZSx0LHIsaSxvLGEsbCk9Pntj''@;'; put 'put ''b25zdCB1PWUuZ2V0U291cmNlRGF0YUF0Um93KHIpLGc9bi5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksRT0iZnVuY3Rpb24iPT10eXBlb2YgYT9hLmNhbGwobik6YSxPPSJmdW5jdGlvbiI9PXR5cGVvZiB1LmFyaWFMYWJlbD91LmFyaWFMYWJlbC5jYWxsKG4pOnUuYXJpYUxh''@;'; put 'put ''YmVsLFo9ImZ1bmN0aW9uIj09dHlwZW9mIHUuYXJpYUNoZWNrZWQ/dS5hcmlhQ2hlY2tlZC5jYWxsKG4pOnUuYXJpYUNoZWNrZWQ7aWYobC5yZWFkT25seUNlbGxDbGFzc05hbWU9IiIsQzQodCksWXIoZywiaHRJdGVtV3JhcHBlciIpLG4uZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyl7Y29uc3Qg''@;'; put 'put ''ZWU9IWlHKHUsbikmJiFqTmUodSkmJiFNMWUodSk7S28odCxbLi4uRFZ0KHUpP1tbInJvbGUiLCJtZW51aXRlbWNoZWNrYm94Il0sTjMoTykseXhlKFopXTpbWyJyb2xlIiwibWVudWl0ZW0iXSxOMyhFKV0sLi4uZWU/W2I0KC0xKV06W10sLi4uaUcodSxuKT9bdEwoKV06W10sLi4uRTFlKHUp''@;'; put 'put ''P1thbSghMSldOltdXSl9aWYodC5jbGFzc05hbWU9IiIsdC5hcHBlbmRDaGlsZChnKSxNMWUodSkpWXIodCwiaHRTZXBhcmF0b3IiKTtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiB1LnJlbmRlcmVyKVlyKHQsImh0Q3VzdG9tTWVudVJlbmRlcmVyIiksdC5hcHBlbmRDaGlsZCh1LnJlbmRl''@;'; put 'put ''cmVyKGUsZyxyLGksbyxFKSk7ZWxzZXtjb25zdCBlZT1uLmdldFNldHRpbmdzKCkuc2FuaXRpemVyO183KGcsU3RyaW5nKEUpLGVlLCJjb250ZXh0TWVudSIsbi5yb290RWxlbWVudCl9aUcodSxuKT9Zcih0LCJodERpc2FibGVkIik6ak5lKHUpP1lyKHQsImh0U2VsZWN0aW9uRGlzYWJsZWQi''@;'; put 'put ''KTpFMWUodSkmJllyKHQsImh0U3VibWVudSIpfX1mdW5jdGlvbiBXTmUobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFlOZShuLGUsdCl7''@;'; put 'put ''aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBKdyhuLGUpe3JldHVybiBmdW5jdGlvbiBQVnQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2Fs''@;'; put 'put ''bChuKTplLnZhbHVlfShuLFlOZShuLGUsImdldCIpKX1mdW5jdGlvbiB4MWUobixlLHQpe1dOZShuLGUpLGUuc2V0KG4sdCl9ZnVuY3Rpb24gYU4obixlLHQpe3JldHVybiBmdW5jdGlvbiBIVnQobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLFlOZShuLGUsInNldCIpLHQpLHR9ZnVuY3Rpb24gb0cobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0''@;'; put 'put ''IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHR9dmFyIFpUPW5ldyBXZWFrTWFwLHNOPW5ldyBXZWFrTWFwLGFHPW5ldyBXZWFrTWFwLGxOPW5ldyBXZWFrU2V0O2NsYXNzIEdUe2dldCB0YWJsZUJvcmRlcldpZHRoKCl7cmV0dXJuIHZvaWQgMD09PUp3KHRoaXMsYUcp''@;'; put 'put ''JiZ0aGlzLmhvdE1lbnUmJmFOKHRoaXMsYUcscGFyc2VJbnQodGhpcy5ob3RNZW51LnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmhvdE1lbnUudmlldy5fd3Qud3RUYWJsZS5UQUJMRSkuYm9yZGVyV2lkdGgsMTApKSxKdyh0aGlzLGFHKX1yZWdpc3RlckV2ZW50cygpe2xldCBl''@;'; put 'put ''PXRoaXMuaG90LnJvb3RXaW5kb3c7Zm9yKDtlOyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGUuZG9jdW1lbnQsIm1vdXNlZG93biIsdD0+dGhpcy5vbkRvY3VtZW50TW91c2VEb3duKHQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGUuZG9jdW1lbnQs''@;'; put 'put ''InRvdWNoc3RhcnQiLHQ9PnRoaXMub25Eb2N1bWVudE1vdXNlRG93bih0KSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihlLmRvY3VtZW50LCJjb250ZXh0bWVudSIsdD0+dGhpcy5vbkRvY3VtZW50Q29udGV4dE1lbnUodCkpLGU9djcoZSl9c2V0TWVudUl0ZW1zKGUpe3Ro''@;'; put 'put ''aXMubWVudUl0ZW1zPWV9Z2V0TmF2aWdhdG9yKCl7cmV0dXJuIEp3KHRoaXMsWlQpfWdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpe3JldHVybiBKdyh0aGlzLHNOKX1nZXRTZWxlY3RlZEl0ZW0oKXtpZighdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSlyZXR1cm4gbnVsbDtjb25zdCBlPXRoaXMu''@;'; put 'put ''aG90TWVudS5nZXRTZWxlY3RlZEFjdGl2ZSgpWzBdO3JldHVybiBvRyh0aGlzLGxOLHNHKS5jYWxsKHRoaXMsZSl9Z2V0SXRlbVBvc2l0aW9uQnlLZXkoZSl7cmV0dXJuKHRoaXMuaG90TWVudT8uZ2V0U291cmNlRGF0YSgpPz90aGlzLm1lbnVJdGVtcz8/W10pLmZpbmRJbmRleChyPT5yLmtl''@;'; put 'put ''eT09PWUpfWhhc1NlbGVjdGVkSXRlbSgpe3JldHVybiBBcnJheS5pc0FycmF5KHRoaXMuaG90TWVudS5nZXRTZWxlY3RlZEFjdGl2ZSgpKX1pc1N1Yk1lbnUoKXtyZXR1cm4gbnVsbCE9PXRoaXMucGFyZW50TWVudX1vcGVuKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVPcGVuIiksdGhp''@;'; put 'put ''cy5jb250YWluZXIucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpLHRoaXMuY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjtjb25zdCBlPUJNKCguLi5sKT0+dGhpcy5vcGVuU3ViTWVudShsWzBdKSwzMDApLHQ9TnVtYmVyKHRoaXMub3B0aW9ucy5taW5XaWR0aCl8fDIxNTtsZXQgcj0h''@;'; put 'put ''MSxpPUh2KHRoaXMubWVudUl0ZW1zLGw9PihsLmtleT09PWlOJiYocj0hMCksZnVuY3Rpb24gQVZ0KG4sZSl7cmV0dXJuIW4uaGlkZGVufHwhKCJmdW5jdGlvbiI9PXR5cGVvZiBuLmhpZGRlbiYmbi5oaWRkZW4uY2FsbChlKSl9KGwsdGhpcy5ob3QpKSk7aWYoaS5sZW5ndGg8MSYmIXIpaS5w''@;'; put 'put ''dXNoKFBOZSgpW2lOXSk7ZWxzZSBpZigwPT09aS5sZW5ndGgpcmV0dXJuO2k9ZnVuY3Rpb24gSVZ0KG4sZT12cyl7bGV0IHQ9bi5zbGljZSgwKTtyZXR1cm4gdD1VTmUodCxlKSx0PWZ1bmN0aW9uIGtWdChuLGUpe2xldCB0PW4uc2xpY2UoMCk7cmV0dXJuIHQucmV2ZXJzZSgpLHQ9VU5lKHQs''@;'; put 'put ''ZSksdC5yZXZlcnNlKCksdH0odCxlKSx0PWZ1bmN0aW9uIFJWdChuKXtjb25zdCBlPVtdO3JldHVybiBYbihuLCh0LHIpPT57Y29uc3QgaT10O3I+MD9lW2UubGVuZ3RoLTFdLm5hbWUhPT1pLm5hbWUmJmUucHVzaChpKTplLnB1c2goaSl9KSxlfSh0KSx0fShpKTtsZXQgbz0hMTtjb25zdCBh''@;'; put 'put ''PXtkYXRhOmksY29sSGVhZGVyczohMSxhdXRvQ29sdW1uU2l6ZTohMCxhdXRvV3JhcFJvdzohMSxtb2RpZnlDb2xXaWR0aDpsPT5abyhsKSYmbDx0P3Q6bCxhdXRvUm93U2l6ZTohMSxyZWFkT25seTohMCxlZGl0b3I6ITEsY29weVBhc3RlOiExLGhpZGRlblJvd3M6ITAsbWF4Q29sczoxLGNv''@;'; put 'put ''bHVtbnM6W3tkYXRhOiJuYW1lIixyZW5kZXJlcjpGVnQodGhpcy5ob3QpfV0scmVuZGVyQWxsUm93czohMCxmcmFnbWVudFNlbGVjdGlvbjohMSxvdXRzaWRlQ2xpY2tEZXNlbGVjdHM6ITEsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjoiYXJlYSIsbGF5b3V0RGlyZWN0aW9uOnRoaXMuaG90Lmlz''@;'; put 'put ''UnRsKCk/InJ0bCI6Imx0ciIsYXJpYVRhZ3M6ITEsdGhlbWVOYW1lOnRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUoKSxtb2RpZnlSb3dIZWlnaHQ6KGwsdSk9Pntjb25zdCBnPW9HKHRoaXMsbE4sc0cpLmNhbGwodGhpcyx1KTtyZXR1cm4gZyYmZy5uYW1lPT09dnM/MTpsfSxiZWZvcmVS''@;'; put 'put ''ZWZyZXNoRGltZW5zaW9uczooKT0+ITEsYmVmb3JlT25DZWxsTW91c2VPdmVyOihsLHUpPT57SncodGhpcyxaVCkuc2V0UGFnZUN1cnNvckF0KHUucm93KX0sYWZ0ZXJPbkNlbGxNb3VzZU92ZXI6KGwsdSk9Pnt0aGlzLmlzQWxsU3ViTWVudXNDbG9zZWQoKT9lKHUucm93KTp0aGlzLm9wZW5T''@;'; put 'put ''dWJNZW51KHUucm93KX0sYWZ0ZXJPbkNlbGxDb250ZXh0TWVudTpsPT57bC5wcmV2ZW50RGVmYXVsdCgpLEhXKCkmJm8mJnRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJnRoaXMuY2xvc2UoITApfSxhZnRlclNlbGVjdGlvbjoobCx1LGcsRSxPKT0+e3RoaXMuaG90TWVudS52aWV3LmlzTW91c2VE''@;'; put 'put ''b3duKCkmJihPLnZhbHVlPSEwKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0aW9uQ2hhbmdlIix0aGlzLmdldFNlbGVjdGVkSXRlbSgpKX0sYmVmb3JlT25DZWxsTW91c2VVcDpsPT57dGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmKG89IXRoaXMuaXNDb21tYW5kUGFzc2l2ZSh0aGlz''@;'; put 'put ''LmdldFNlbGVjdGVkSXRlbSgpKSx0aGlzLmV4ZWN1dGVDb21tYW5kKGwpKX0sYWZ0ZXJPbkNlbGxNb3VzZVVwOmw9PnsoIUhXKCl8fCF6dihsKSkmJm8mJnRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJihRNSgpfHxQVygpP3RoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PnRoaXMuY2xvc2Uo''@;'; put 'put ''ITApLDMyNSk6dGhpcy5jbG9zZSghMCkpfSxhZnRlclVubGlzdGVuOigpPT57IXRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJnRoaXMuaXNPcGVuZWQoKSYmdGhpcy5ob3RNZW51Lmxpc3RlbigpfX07dGhpcy5vcmlnT3V0c2lkZUNsaWNrRGVzZWxlY3RzPXRoaXMuaG90LmdldFNldHRpbmdzKCku''@;'; put 'put ''b3V0c2lkZUNsaWNrRGVzZWxlY3RzLHRoaXMuaG90LmdldFNldHRpbmdzKCkub3V0c2lkZUNsaWNrRGVzZWxlY3RzPSExLHRoaXMuaG90TWVudT1uZXcgdGhpcy5ob3QuY29uc3RydWN0b3IodGhpcy5jb250YWluZXIsYSksdGhpcy5ob3RNZW51LmFkZEhvb2soImFmdGVySW5pdCIsKCk9PnRo''@;'; put 'put ''aXMub25BZnRlckluaXQoKSksdGhpcy5ob3RNZW51LmluaXQoKSxhTih0aGlzLFpULGZ1bmN0aW9uIExWdChuKXtyZXR1cm4gQk5lKHtzaXplOigpPT5uLmNvdW50Um93cygpLG9uSXRlbVNlbGVjdChlLHQpe2NvbnN0IHI9bi5nZXRDZWxsKGUsMCk7aWYoIXJ8fGZ1bmN0aW9uIEVWdChuKXty''@;'; put 'put ''ZXR1cm4gTGEobiwiaHRTZXBhcmF0b3IiKX0ocil8fGZ1bmN0aW9uIFRWdChuKXtyZXR1cm4gTGEobiwiaHREaXNhYmxlZCIpfShyKXx8ZnVuY3Rpb24geFZ0KG4pe3JldHVybiBMYShuLCJodFNlbGVjdGlvbkRpc2FibGVkIil9KHIpKXJldHVybiExO24uc2VsZWN0Q2VsbChlLDAsLi4udD9b''@;'; put 'put ''ZSwwLCExLCExXTpbXSl9LG9uQ2xlYXIoKXtuLmRlc2VsZWN0Q2VsbCgpfX0pfSh0aGlzLmhvdE1lbnUpKSxhTih0aGlzLHNOLGZ1bmN0aW9uIE5WdChuLGU9W10pe2NvbnN0IHQ9W107ZnVuY3Rpb24gcihnLEUpe2woRSkuYWRkU2hvcnRjdXRzKGcse2dyb3VwOiJtZW51In0pfWZ1bmN0aW9u''@;'; put 'put ''IGkoZyxFKXtjb25zdCBPPWwoRSk7Zy5mb3JFYWNoKCh7a2V5czpafSk9PntaLmZvckVhY2goZWU9Pk8ucmVtb3ZlU2hvcnRjdXRzQnlLZXlzKGVlKSl9KSx0LnB1c2goe3Nob3J0Y3V0czpnLGNvbnRleHROYW1lOkU/PyJtZW51In0pLHIoZyxFKX1mdW5jdGlvbiBhKGcpe3JldHVybiBnP2Bt''@;'; put 'put ''ZW51OiR7Z31gOiJtZW51In1mdW5jdGlvbiBsKGcpe2NvbnN0IEU9bi5ob3RNZW51LmdldFNob3J0Y3V0TWFuYWdlcigpLE89YShnKTtyZXR1cm4gRS5nZXRDb250ZXh0KE8pPz9FLmFkZENvbnRleHQoTyl9cmV0dXJuIHIoZnVuY3Rpb24gT1Z0KG4pe2NvbnN0IGU9bi5ob3QsdD1uLmhvdE1l''@;'; put 'put ''bnUscj1lLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKTtyZXR1cm5be2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSwuLi5yP3tmb3J3YXJkVG9Db250ZXh0OnJ9Ont9LGNhbGxiYWNrOigpPT5uLmNsb3NlKCEwKX0se2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRh''@;'; put 'put ''YiJdXSxjYWxsYmFjazooaSxvKT0+e2NvbnN0IGE9ZS5nZXRTZXR0aW5ncygpLGw9ImZ1bmN0aW9uIj09dHlwZW9mIGEudGFiTW92ZXM/YS50YWJNb3ZlcyhpKTphLnRhYk1vdmVzO2wmJihvPy5pbmNsdWRlcygic2hpZnQiKT9lLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgtbC5yb3csLWwu''@;'; put 'put ''Y29sKTplLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydChsLnJvdyxsLmNvbCkpLG4uY2xvc2UoITApfX0se2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOigpPT5uLmNsb3NlKCl9LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+bi5nZXROYXZpZ2F0b3IoKT8udG9OZXh0SXRl''@;'; put 'put ''bSgpfSx7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOigpPT5uLmdldE5hdmlnYXRvcigpPy50b1ByZXZpb3VzSXRlbSgpfSx7a2V5czpbW2UuaXNSdGwoKT8iQXJyb3dMZWZ0IjoiQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGk9dD8uZ2V0U2VsZWN0ZWRBY3RpdmUoKTtp''@;'; put 'put ''ZihpKXtjb25zdCBvPW4ub3BlblN1Yk1lbnUoaVswXSk7byYmby5nZXROYXZpZ2F0b3IoKT8udG9GaXJzdEl0ZW0oKX19fSx7a2V5czpbW2UuaXNSdGwoKT8iQXJyb3dSaWdodCI6IkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e3Q/LmdldFNlbGVjdGVkQWN0aXZlKCkmJm4uaXNTdWJNZW51''@;'; put 'put ''KCkmJihuLmNsb3NlKCksbi5pc1N1Yk1lbnUoKSYmbi5wYXJlbnRNZW51Py5ob3RNZW51Py5saXN0ZW4oKSl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJBcnJvd1VwIl0sWyJIb21lIl1dLGNhbGxiYWNrOigpPT5uLmdldE5hdmlnYXRvcigpPy50b0ZpcnN0SXRlbSgpfSx7a2V5czpbWyJD''@;'; put 'put ''b250cm9sL01ldGEiLCJBcnJvd0Rvd24iXSxbIkVuZCJdXSxjYWxsYmFjazooKT0+bi5nZXROYXZpZ2F0b3IoKT8udG9MYXN0SXRlbSgpfSx7a2V5czpbWyJFbnRlciJdLFsiU3BhY2UiXV0sY2FsbGJhY2s6aT0+e2NvbnN0IG89dD8uZ2V0U2VsZWN0ZWRBY3RpdmUoKTtpZihvKWlmKHQ/Lmdl''@;'; put 'put ''dFNvdXJjZURhdGFBdFJvdyhvWzBdKT8uc3VibWVudSl7Y29uc3QgYT1uLm9wZW5TdWJNZW51KG9bMF0pO2EmJmEuZ2V0TmF2aWdhdG9yKCk/LnRvRmlyc3RJdGVtKCl9ZWxzZSBuLmV4ZWN1dGVDb21tYW5kKGkpLG4uY2xvc2UoITApfX0se2tleXM6W1siUGFnZVVwIl1dLGNhbGxiYWNrOigp''@;'; put 'put ''PT57dD8uZ2V0U2VsZWN0ZWRBY3RpdmUoKT90Py5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLXQuY291bnRWaXNpYmxlUm93cygpLDApOm4uZ2V0TmF2aWdhdG9yKCk/LnRvRmlyc3RJdGVtKCl9fSx7a2V5czpbWyJQYWdlRG93biJdXSxjYWxsYmFjazooKT0+e3Q/LmdldFNlbGVjdGVkQWN0''@;'; put 'put ''aXZlKCk/dD8uc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KHQuY291bnRWaXNpYmxlUm93cygpLDApOm4uZ2V0TmF2aWdhdG9yKCk/LnRvTGFzdEl0ZW0oKX19XX0obikpLGUuZm9yRWFjaCgoe3Nob3J0Y3V0czpnLGNvbnRleHROYW1lOkV9KT0+e2koZyxFKX0pLHthZGRDdXN0b21TaG9ydGN1''@;'; put 'put ''dHM6aSxnZXRDdXN0b21TaG9ydGN1dHM6ZnVuY3Rpb24gbygpe3JldHVyblsuLi50XX0sZ2V0Q29udGV4dDpsLGxpc3RlbjpmdW5jdGlvbiB1KGcpe24uaG90TWVudS5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZShhKGcpKX19fSh0aGlzKSksSncodGhpcyxzTiku''@;'; put 'put ''bGlzdGVuKCksdGhpcy5mb2N1cygpLHRoaXMuaXNTdWJNZW51KCkmJnRoaXMuYWRkTG9jYWxIb29rKCJhZnRlck9wZW4iLCgpPT50aGlzLnBhcmVudE1lbnUucnVuTG9jYWxIb29rcygiYWZ0ZXJTdWJtZW51T3BlbiIsdGhpcykpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJPcGVuIix0aGlz''@;'; put 'put ''KX1jbG9zZShlPSExKXtpZih0aGlzLmlzT3BlbmVkKCkpaWYoZSYmdGhpcy5pc1N1Yk1lbnUoKSl0aGlzLnBhcmVudE1lbnUuY2xvc2UoKTtlbHNlIGlmKEp3KHRoaXMsWlQpLmNsZWFyKCksdGhpcy5jbG9zZUFsbFN1Yk1lbnVzKCksdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheT0ibm9u''@;'; put 'put ''ZSIsdGhpcy5ob3RNZW51LmRlc3Ryb3koKSx0aGlzLmhvdE1lbnU9bnVsbCx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLm91dHNpZGVDbGlja0Rlc2VsZWN0cz10aGlzLm9yaWdPdXRzaWRlQ2xpY2tEZXNlbGVjdHMsdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNsb3NlIiksdGhpcy5pc1N1Yk1l''@;'; put 'put ''bnUoKSl7aWYodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyl7Y29uc3QgdD10aGlzLnBhcmVudE1lbnUuaG90TWVudS5nZXRTZWxlY3RlZEFjdGl2ZSgpO2lmKHQpe2NvbnN0IHI9dGhpcy5wYXJlbnRNZW51LmhvdE1lbnUuZ2V0Q2VsbCh0WzBdLDApO3ImJktvKHIsW2FtKCExKV0p''@;'; put 'put ''fX10aGlzLnBhcmVudE1lbnUuaG90TWVudS5saXN0ZW4oKX19b3BlblN1Yk1lbnUoZSl7aWYoIXRoaXMuaG90TWVudSlyZXR1cm4hMTtjb25zdCB0PXRoaXMuaG90TWVudS5nZXRDZWxsKGUsMCk7aWYodGhpcy5jbG9zZUFsbFN1Yk1lbnVzKCksIXR8fCFmdW5jdGlvbiBNVnQobil7cmV0dXJu''@;'; put 'put ''IExhKG4sImh0U3VibWVudSIpfSh0KSlyZXR1cm4hMTtjb25zdCByPW9HKHRoaXMsbE4sc0cpLmNhbGwodGhpcyxlKSxpPW5ldyBHVCh0aGlzLmhvdCx7cGFyZW50OnRoaXMsbmFtZToiZnVuY3Rpb24iPT10eXBlb2Ygci5uYW1lP3IubmFtZS5jYWxsKHRoaXMuaG90KTpyLm5hbWUsY2xhc3NO''@;'; put 'put ''YW1lOnRoaXMub3B0aW9ucy5jbGFzc05hbWUsa2VlcEluVmlld3BvcnQ6ITAsY29udGFpbmVyOnRoaXMub3B0aW9ucy5jb250YWluZXJ9KTtyZXR1cm4gaS5zZXRNZW51SXRlbXMoci5zdWJtZW51Lml0ZW1zKSxpLm9wZW4oKSxpLnNldFBvc2l0aW9uKHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0''@;'; put 'put ''KCkpLHRoaXMuaG90U3ViTWVudXNbci5rZXldPWksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmS28odCxbYW0oITApXSksaX1jbG9zZVN1Yk1lbnUoZSl7Y29uc3QgdD1vRyh0aGlzLGxOLHNHKS5jYWxsKHRoaXMsZSkscj10aGlzLmhvdFN1Yk1lbnVzW3Qua2V5XTtpZihyKXty''@;'; put 'put ''LmRlc3Ryb3koKSxkZWxldGUgdGhpcy5ob3RTdWJNZW51c1t0LmtleV07Y29uc3QgaT10aGlzLmhvdE1lbnUuZ2V0Q2VsbChlLDApO2kmJnRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJktvKGksW2FtKCExKV0pfX1jbG9zZUFsbFN1Yk1lbnVzKCl7WG4odGhpcy5ob3RNZW51Lmdl''@;'; put 'put ''dERhdGEoKSwoZSx0KT0+dGhpcy5jbG9zZVN1Yk1lbnUodCkpfWlzQWxsU3ViTWVudXNDbG9zZWQoKXtyZXR1cm4gMD09PU9iamVjdC5rZXlzKHRoaXMuaG90U3ViTWVudXMpLmxlbmd0aH1mb2N1cygpe3RoaXMuaXNPcGVuZWQoKSYmKHRoaXMuaG90TWVudS5yb290RWxlbWVudC5mb2N1cyh7''@;'; put 'put ''cHJldmVudFNjcm9sbDohMH0pLHRoaXMuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCkubGlzdGVuKCksdGhpcy5ob3RNZW51Lmxpc3RlbigpKX1kZXN0cm95KCl7Y29uc3QgZT10aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlO3RoaXMuY2xlYXJMb2NhbEhvb2tzKCksdGhpcy5jbG9zZSgpLHRo''@;'; put 'put ''aXMucGFyZW50TWVudT1udWxsLHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSxlJiZlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKX1pc09wZW5lZCgpe3JldHVybiBudWxsIT09dGhpcy5ob3RNZW51fWV4ZWN1dGVDb21tYW5kKGUpe2lmKCF0aGlzLmlzT3BlbmVkKCl8fCF0aGlzLmhh''@;'; put 'put ''c1NlbGVjdGVkSXRlbSgpKXJldHVybjtjb25zdCB0PXRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCk7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJzZWxlY3QiLHQsZSksdGhpcy5pc0NvbW1hbmRQYXNzaXZlKHQpKXJldHVybjtjb25zdCByPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2UoKSxpPXI/ZnVu''@;'; put 'put ''Y3Rpb24gU1Z0KG4pe3JldHVybiBfYyhuLGU9Pih7c3RhcnQ6ZS5nZXRUb3BTdGFydENvcm5lcigpLGVuZDplLmdldEJvdHRvbUVuZENvcm5lcigpfSkpfShyKTpbXTt0aGlzLnJ1bkxvY2FsSG9va3MoImV4ZWN1dGVDb21tYW5kIix0LmtleSxpLGUpLHRoaXMuaXNTdWJNZW51KCkmJnRoaXMu''@;'; put 'put ''cGFyZW50TWVudS5ydW5Mb2NhbEhvb2tzKCJleGVjdXRlQ29tbWFuZCIsdC5rZXksaSxlKX1pc0NvbW1hbmRQYXNzaXZlKGUpe3JldHVybiExPT09ZS5pc0NvbW1hbmR8fE0xZShlKXx8aUcoZSx0aGlzLmhvdCl8fEUxZShlKX1zZXRPZmZzZXQoZSx0PTApe3RoaXMucG9zaXRpb25lci5zZXRP''@;'; put 'put ''ZmZzZXQoZSx0KX1zZXRQb3NpdGlvbihlKXt0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLnBvc2l0aW9uZXIuc2V0UGFyZW50RWxlbWVudCh0aGlzLnBhcmVudE1lbnUuY29udGFpbmVyKSx0aGlzLnBvc2l0aW9uZXIuc2V0RWxlbWVudCh0aGlzLmNvbnRhaW5lcikudXBkYXRlUG9zaXRpb24oZSl9''@;'; put 'put ''dXBkYXRlTWVudURpbWVuc2lvbnMoKXtjb25zdHt3dFRhYmxlOmV9PXRoaXMuaG90TWVudS52aWV3Ll93dCx0PXRoaXMuaG90TWVudS5nZXRTZXR0aW5ncygpLmRhdGEscj1lLmhpZGVyLnN0eWxlLGk9ZS5ob2xkZXIuc3R5bGUsbz1wYXJzZUludChyLndpZHRoLDEwKSxhPW0xKHQ/P1tdLChs''@;'; put 'put ''LHUsZyk9Pntjb25zdCBFPXRoaXMuaG90TWVudS5nZXRDZWxsKGcsMCksTz1FP0hoKEUpOjAsWj1mdW5jdGlvbiBCVnQobil7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT09biYmIm5hbWUiaW4gbn0odSkmJnUubmFtZT09PXZzO3JldHVybiBsKyhaPzE6Tyl9LDApO2kud2lkdGg9''@;'; put 'put ''YCR7b31weGAsaS5oZWlnaHQ9YCR7YX1weGAsci5oZWlnaHQ9aS5oZWlnaHR9Y3JlYXRlQ29udGFpbmVyKGU9bnVsbCl7Y29uc3QgdD10aGlzLm9wdGlvbnMuY29udGFpbmVyLHI9dC5vd25lckRvY3VtZW50O2xldCBpPWUsbz1udWxsO3JldHVybiBpJiYoaT1pLnJlcGxhY2UoL1teQS1aYS16''@;'; put 'put ''MC05XS9nLCJfIiksaT1gJHt0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfVN1Yl8ke2l9YCxvPXIucXVlcnlTZWxlY3RvcihgLiR7dGhpcy5vcHRpb25zLmNsYXNzTmFtZX0uJHtpfWApKSxvfHwobz1yLmNyZWF0ZUVsZW1lbnQoImRpdiIpLFlyKG8sYGh0TWVudSBoYW5kc29udGFibGUgJHt0aGlz''@;'; put 'put ''Lm9wdGlvbnMuY2xhc3NOYW1lfWApLGkmJllyKG8saSksdC5hcHBlbmRDaGlsZChvKSksb31vbkFmdGVySW5pdCgpe3RoaXMudXBkYXRlTWVudURpbWVuc2lvbnMoKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZLbyh0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQsW1sicm9sZSIs''@;'; put 'put ''Im1lbnUiXSxiNCgtMSldKX1vbkRvY3VtZW50TW91c2VEb3duKGUpe3RoaXMuaXNPcGVuZWQoKSYmKHRoaXMub3B0aW9ucy5zdGFuZGFsb25lJiZ0aGlzLmhvdE1lbnUmJiFCdihBYShlKSx0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQpfHwodGhpcy5pc0FsbFN1Yk1lbnVzQ2xvc2VkKCl8fHRo''@;'; put 'put ''aXMuaXNTdWJNZW51KCkpJiYhQnYoQWEoZSksIi5odE1lbnUiKSkmJnRoaXMuY2xvc2UoITApfW9uRG9jdW1lbnRDb250ZXh0TWVudShlKXt0aGlzLmlzT3BlbmVkKCkmJkxhKEFhKGUpLCJodENvcmUiKSYmQnYoQWEoZSksdGhpcy5ob3RNZW51LnJvb3RFbGVtZW50KSYmZS5wcmV2ZW50RGVm''@;'; put 'put ''YXVsdCgpfWNvbnN0cnVjdG9yKGUsdCl7KGZ1bmN0aW9uIFZWdChuLGUpe1dOZShuLGUpLGUuYWRkKG4pfSkodGhpcyxsTikseDFlKHRoaXMsWlQse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHgxZSh0aGlzLHNOLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx4MWUodGhpcyxhRyx7''@;'; put 'put ''d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdGhpcy5ob3RNZW51PW51bGwsdGhpcy5ob3RTdWJNZW51cz17fSx0aGlzLm1lbnVJdGVtcz1udWxsLHRoaXMub3JpZ091dHNpZGVDbGlja0Rlc2VsZWN0cz12b2lkIDAsYU4odGhpcyxaVCxudWxsKSxhTih0aGlzLHNOLG51bGwpLHRoaXMuaG90''@;'; put 'put ''PWUsdGhpcy5vcHRpb25zPXtwYXJlbnQ6bnVsbCxuYW1lOm51bGwsY2xhc3NOYW1lOiIiLGtlZXBJblZpZXdwb3J0OiEwLHN0YW5kYWxvbmU6ITEsbWluV2lkdGg6MjE1LGNvbnRhaW5lcjp0aGlzLmhvdC5yb290UG9ydGFsRWxlbWVudCwuLi50fSx0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0''@;'; put 'put ''ZUNvbnRhaW5lcih0aGlzLm9wdGlvbnMubmFtZSksdGhpcy5wb3NpdGlvbmVyPW5ldyBDVnQodGhpcy5vcHRpb25zLmtlZXBJblZpZXdwb3J0KSx0aGlzLnBhcmVudE1lbnU9dGhpcy5vcHRpb25zLnBhcmVudHx8bnVsbCx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgVzIodGhpcyksdGhpcy5yZWdp''@;'; put 'put ''c3RlckV2ZW50cygpLHRoaXMuaXNTdWJNZW51KCkmJnRoaXMuYWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdGlvbkNoYW5nZSIsKC4uLnIpPT50aGlzLnBhcmVudE1lbnUucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3Rpb25DaGFuZ2UiLC4uLnIpKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclNl''@;'; put 'put ''dFRoZW1lIiwocixpKT0+e2lmKHRoaXMub3B0aW9ucy5jb250YWluZXIhPT10aGlzLmhvdC5yb290UG9ydGFsRWxlbWVudCl7Y29uc3Qgbz10aGlzLm9wdGlvbnMuY29udGFpbmVyO2tvKG8sL2h0LXRoZW1lLS4qL2cpLFlyKG8scil9aXx8dGhpcy5jbG9zZSgpfSl9fWZ1bmN0aW9uIHNHKG4p''@;'; put 'put ''e2NvbnN0IGU9dGhpcy5ob3RNZW51Py5nZXRTb3VyY2VEYXRhQXRSb3cobik7cmV0dXJuIGV8fG51bGx9ZnVuY3Rpb24gR05lKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7''@;'; put 'put ''cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIEExZShuLGUpe3JldHVybiBmdW5jdGlvbiBVVnQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLEdOZShuLGUsImdldCIpKX1mdW5jdGlvbiBrMWUobixlLHQpeyhmdW5jdGlvbiBqVnQobixlKXtpZihlLmhhcyhuKSl0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIFIxZShuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIHpWdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQu''@;'; put 'put ''Y2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4sR05lKG4sZSwic2V0IiksdCksdH1ZbChHVCxfaCk7Y29uc3QgY049ImNvbnRleHRNZW51IiwkTmU9''@;'; put 'put ''Y047R28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIpLEdvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb250ZXh0TWVudVNob3ciKSxHby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudVNob3ci''@;'; put 'put ''KSxHby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudUhpZGUiKSxHby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudUV4ZWN1dGUiKTt2YXIgSTFlPW5ldyBXZWFrTWFwLEQxZT1uZXcgV2Vha01hcCxMMWU9bmV3IFdlYWtNYXA7bGV0IFlW''@;'; put 'put ''dD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgYWx7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGNOfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDcwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpBdXRvQ29sdW1uU2l6ZSJdfXN0YXRpYyBn''@;'; put 'put ''ZXQgREVGQVVMVF9JVEVNUygpe3JldHVybltlRyx0Ryx2cyxlTix0Tix2cyxKWixyTix2cyxuRyxRWix2cyxuTix2cyxwbV19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2NOXX1lbmFibGVQbHVnaW4oKXtpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IHQ9''@;'; put 'put ''dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtjTl0scj0ib2JqZWN0IiE9dHlwZW9mIHR8fG51bGw9PT10fHxBcnJheS5pc0FycmF5KHQpP251bGw6dDtyJiYiZnVuY3Rpb24iPT10eXBlb2Ygci5jYWxsYmFjayYmdGhpcy5jb21tYW5kRXhlY3V0b3Iuc2V0Q29tbW9uQ2FsbGJhY2soci5jYWxsYmFj''@;'; put 'put ''ayksdGhpcy5tZW51PW5ldyBHVCh0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodENvbnRleHRNZW51IixrZWVwSW5WaWV3cG9ydDohMCxjb250YWluZXI6cj8udWlDb250YWluZXJ8fHRoaXMuaG90LnJvb3RQb3J0YWxFbGVtZW50fSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVuIixB''@;'; put 'put ''MWUodGhpcyxEMWUpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIixBMWUodGhpcyxMMWUpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJleGVjdXRlQ29tbWFuZCIsKC4uLmkpPT57dGhpcy5leGVjdXRlQ29tbWFuZC5jYWxsKHRoaXMsLi4uaSl9KSx0aGlzLmFkZEhvb2so''@;'; put 'put ''ImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLEExZSh0aGlzLEkxZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlRGlhbG9nU2hvdyIsKCk9PnRoaXMuY2xvc2UoKSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBs''@;'; put 'put ''dWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJih0aGlzLm1lbnUuZGVzdHJveSgpLHRoaXMubWVudT1udWxsKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5kaXNhYmxl''@;'; put 'put ''UGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIik/LmFkZFNob3J0Y3V0KHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIlNoaWZ0IiwiQmFja3NsYXNoIl0sWyJTaGlmdCIsIkYxMCJdXSxjYWxsYmFjazooKT0+''@;'; put 'put ''e2NvbnN0IHQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCF0KXJldHVybjtjb25zdHtoaWdobGlnaHQ6cn09dDtpZihudWxsPT09ci5yb3d8fG51bGw9PT1yLmNvbClyZXR1cm47dGhpcy5ob3Quc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgpO2NvbnN0IGk9dGhpcy5ob3QuZ2V0''@;'; put 'put ''Q2VsbChyLnJvdyxyLmNvbCwhMCk7aWYoIWkpcmV0dXJuO2NvbnN0IG89aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPVlaKHRoaXMubWVudS5jb250YWluZXIsdGhpcy5ob3Qucm9vdERvY3VtZW50KTt0aGlzLm9wZW4oe2xlZnQ6by5sZWZ0K2EubGVmdCx0b3A6by50b3ArYS50b3AtMStv''@;'; put 'put ''LmhlaWdodH0se2xlZnQ6by53aWR0aCxhYm92ZTotby5oZWlnaHR9KSx0aGlzLm1lbnUuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX0scnVuT25seUlmOigpPT57Y29uc3QgdD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk/LmhpZ2hsaWdodDtyZXR1cm4hIXQmJnRoaXMu''@;'; put 'put ''aG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKHQpJiYhdGhpcy5tZW51LmlzT3BlbmVkKCl9LGdyb3VwOiROZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIik/LnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoJE5l''@;'; put 'put ''KX1vcGVuKHQscj17YWJvdmU6MCxiZWxvdzowLGxlZnQ6MCxyaWdodDowfSl7dGhpcy5tZW51Py5pc09wZW5lZCgpfHwodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbnRleHRNZW51U2hvdyIsdGhpcyksdGhpcy5wcmVwYXJlTWVudUl0ZW1zKCksdGhpcy5tZW51Lm9wZW4oKSxhYyhyLChp''@;'; put 'put ''LG8pPT57dGhpcy5tZW51LnNldE9mZnNldChvLGkpfSksdGhpcy5tZW51LnNldFBvc2l0aW9uKHQpKX1jbG9zZSgpe3RoaXMubWVudT8uY2xvc2UoKSx0aGlzLml0ZW1zRmFjdG9yeT1udWxsfWV4ZWN1dGVDb21tYW5kKHQsLi4ucil7bnVsbD09PXRoaXMuaXRlbXNGYWN0b3J5JiZ0aGlzLnBy''@;'; put 'put ''ZXBhcmVNZW51SXRlbXMoKSx0aGlzLmNvbW1hbmRFeGVjdXRvci5leGVjdXRlKHQsLi4ucil9cHJlcGFyZU1lbnVJdGVtcygpe3RoaXMuaXRlbXNGYWN0b3J5PW5ldyBITmUodGhpcy5ob3Qsbi5ERUZBVUxUX0lURU1TKTtjb25zdCB0PXRoaXMuaG90LmdldFNldHRpbmdzKClbY05dLHI9e2l0''@;'; put 'put ''ZW1zOnRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKHQpfTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixyKSx0aGlzLml0ZW1zRmFjdG9yeS5zZXRQcmVkZWZpbmVkSXRlbXMoci5pdGVtcyk7Y29uc3QgaT10aGlzLml0ZW1zRmFjdG9yeS5nZXRJ''@;'; put 'put ''dGVtcyh0KTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtcyIsaSksdGhpcy5tZW51LnNldE1lbnVJdGVtcyhpKSxYbihpLG89Pnt0aGlzLmNvbW1hbmRFeGVjdXRvci5yZWdpc3RlckNvbW1hbmQoU3RyaW5nKG8ua2V5Pz8iIiksbyl9KX1kZXN0cm95KCl7dGhp''@;'; put 'put ''cy5jbG9zZSgpLHRoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksazFlKHRoaXMsSTFlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxrMWUodGhpcyxEMWUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQg''@;'; put 'put ''MH0pLGsxZSh0aGlzLEwxZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdGhpcy5jb21tYW5kRXhlY3V0b3I9bmV3IE9OZSh0aGlzLmhvdCksdGhpcy5pdGVtc0ZhY3Rvcnk9bnVsbCx0aGlzLm1lbnU9bnVsbCxSMWUodGhpcyxJMWUscj0+e2NvbnN0IGk9dGhpcy5ob3QuZ2V0U2V0dGlu''@;'; put 'put ''Z3MoKSxvPWkucm93SGVhZGVycyxhPWkuY29sSGVhZGVycyx1PUFhKHIpO2lmKHRoaXMuY2xvc2UoKSxMYSh1LCJoYW5kc29udGFibGVJbnB1dCIpfHwoci5wcmV2ZW50RGVmYXVsdCgpLHIuc3RvcFByb3BhZ2F0aW9uKCksIShvfHxhfHxmdW5jdGlvbiBsKEUpe2NvbnN0IE89RS5wYXJlbnRO''@;'; put 'put ''b2RlO3JldHVybiJURCI9PT1FLm5vZGVOYW1lfHxocyhPKSYmIlREIj09PU8ubm9kZU5hbWV9KHUpfHxMYSh1LCJjdXJyZW50IikmJkxhKHUsInd0Qm9yZGVyIikpKSlyZXR1cm47Y29uc3QgZz1ZWih0aGlzLm1lbnUuY29udGFpbmVyLHRoaXMuaG90LnJvb3REb2N1bWVudCk7dGhpcy5vcGVu''@;'; put 'put ''KHt0b3A6ci5jbGllbnRZK2cudG9wLGxlZnQ6ci5jbGllbnRYK2cubGVmdH0pfSksUjFlKHRoaXMsRDFlLCgpPT57dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29udGV4dE1lbnVTaG93Iix0aGlzKX0pLFIxZSh0aGlzLEwxZSwoKT0+e3RoaXMuaG90Lmxpc3RlbigpLHRoaXMuaG90LnJ1bkhv''@;'; put 'put ''b2tzKCJhZnRlckNvbnRleHRNZW51SGlkZSIsdGhpcyl9KX19cmV0dXJuIG4uU0VQQVJBVE9SPXtuYW1lOnZzfSxufSkoKTtjbGFzcyBYVnR7c2V0RGF0YShlLHQpe3RoaXMuZGF0YVtlXT10fWdldERhdGEoZSl7cmV0dXJuIHRoaXMuZGF0YVtlXXx8dm9pZCAwfWNvbnN0cnVjdG9yKCl7dGhp''@;'; put 'put ''cy5kYXRhPXt9fX1jbGFzcyBRVnR7cHJldmVudERlZmF1bHQoKXt9Y29tcG9zZWRQYXRoKCl7cmV0dXJuW119Y29uc3RydWN0b3IoKXt0aGlzLmNsaXBib2FyZERhdGE9bmV3IFhWdH19ZnVuY3Rpb24gcU5lKG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGlu''@;'; put 'put ''aXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBLTmUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1''@;'; put 'put ''cm4gZS5nZXQobil9ZnVuY3Rpb24gJGYobixlKXtyZXR1cm4gZnVuY3Rpb24gSlZ0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obixLTmUobixlLCJnZXQiKSl9ZnVuY3Rpb24gJFQobixlLHQpe3FOZShuLGUpLGUuc2V0KG4sdCl9ZnVuY3Rpb24gcVQobixlLHQp''@;'; put 'put ''e3JldHVybiBmdW5jdGlvbiBlQnQobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLEtOZShuLGUsInNldCIp''@;'; put 'put ''LHQpLHR9ZnVuY3Rpb24gbEcobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHR9ZnVuY3Rpb24gWE5lKG4sZSl7cU5lKG4sZSksZS5hZGQobil9dmFyIHlfPW5ldyBX''@;'; put 'put ''ZWFrTWFwLE8xZT1uZXcgV2Vha01hcCx1Tj1uZXcgV2Vha01hcCxOMWU9bmV3IFdlYWtNYXAsRjFlPW5ldyBXZWFrTWFwLGROPW5ldyBXZWFrTWFwLGNHPW5ldyBXZWFrU2V0LFFOZT1uZXcgV2Vha1NldDtjbGFzcyB0QnR7c2V0U2VsZWN0ZWRSYW5nZShlKXtxVCh0aGlzLHlfLGUpfWdldENl''@;'; put 'put ''bGxzUmFuZ2UoKXtpZigwPT09JGYodGhpcyxPMWUpLmNhbGwodGhpcyl8fDA9PT0kZih0aGlzLHVOKS5jYWxsKHRoaXMpKXJldHVybiBudWxsO2NvbnN0e3JvdzplLGNvbDp0fT0kZih0aGlzLHlfKS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6cixjb2w6aX09JGYodGhpcyx5XykuZ2V0Qm90''@;'; put 'put ''dG9tRW5kQ29ybmVyKCk7aWYobnVsbD09PWV8fG51bGw9PT10fHxudWxsPT09cnx8bnVsbD09PWkpcmV0dXJuIG51bGw7Y29uc3Qgbz1sRyh0aGlzLFFOZSxuQnQpLmNhbGwodGhpcyxlLHIpLGE9bEcodGhpcyxjRyxQMWUpLmNhbGwodGhpcyx0LGkpO3JldHVybntpc1JhbmdlVHJpbW1lZDpy''@;'; put 'put ''IT09b3x8aSE9PWEsc3RhcnRSb3c6ZSxzdGFydENvbDp0LGVuZFJvdzpvLGVuZENvbDphfX1nZXRNb3N0Qm90dG9tQ29sdW1uSGVhZGVyc1JhbmdlKCl7aWYoMD09PSRmKHRoaXMsdU4pLmNhbGwodGhpcyl8fDA9PT0kZih0aGlzLGROKS5jYWxsKHRoaXMpKXJldHVybiBudWxsO2NvbnN0e2Nv''@;'; put 'put ''bDplfT0kZih0aGlzLHlfKS5nZXRUb3BTdGFydENvcm5lcigpLHtjb2w6dH09JGYodGhpcyx5XykuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7aWYobnVsbD09PWV8fG51bGw9PT10KXJldHVybiBudWxsO2NvbnN0IHI9bEcodGhpcyxjRyxQMWUpLmNhbGwodGhpcyxlLHQpO3JldHVybntpc1Jhbmdl''@;'; put 'put ''VHJpbW1lZDp0IT09cixzdGFydFJvdzotMSxzdGFydENvbDplLGVuZFJvdzotMSxlbmRDb2w6cn19Z2V0QWxsQ29sdW1uSGVhZGVyc1JhbmdlKCl7aWYoMD09PSRmKHRoaXMsdU4pLmNhbGwodGhpcyl8fDA9PT0kZih0aGlzLGROKS5jYWxsKHRoaXMpKXJldHVybiBudWxsO2NvbnN0e2NvbDpl''@;'; put 'put ''fT0kZih0aGlzLHlfKS5nZXRUb3BTdGFydENvcm5lcigpLHtjb2w6dH09JGYodGhpcyx5XykuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7aWYobnVsbD09PWV8fG51bGw9PT10KXJldHVybiBudWxsO2NvbnN0IHI9bEcodGhpcyxjRyxQMWUpLmNhbGwodGhpcyxlLHQpO3JldHVybntpc1JhbmdlVHJp''@;'; put 'put ''bW1lZDp0IT09cixzdGFydFJvdzotJGYodGhpcyxkTikuY2FsbCh0aGlzKSxzdGFydENvbDplLGVuZFJvdzotMSxlbmRDb2w6cn19Y29uc3RydWN0b3Ioe2NvdW50Um93czplLGNvdW50Q29sdW1uczp0LHJvd3NMaW1pdDpyLGNvbHVtbnNMaW1pdDppLGNvdW50Q29sdW1uSGVhZGVyczpvfSl7''@;'; put 'put ''WE5lKHRoaXMsY0cpLFhOZSh0aGlzLFFOZSksJFQodGhpcyx5Xyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksJFQodGhpcyxPMWUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLCRUKHRoaXMsdU4se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLCRUKHRoaXMsTjFlLHt3cml0YWJs''@;'; put 'put ''ZTohMCx2YWx1ZTp2b2lkIDB9KSwkVCh0aGlzLEYxZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksJFQodGhpcyxkTix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSkscVQodGhpcyxPMWUsZSkscVQodGhpcyx1Tix0KSxxVCh0aGlzLE4xZSxyKSxxVCh0aGlzLEYxZSxpKSxxVCh0aGlz''@;'; put 'put ''LGROLG8pfX1mdW5jdGlvbiBQMWUobixlKXtyZXR1cm4gTWF0aC5taW4oZSxNYXRoLm1heChuKyRmKHRoaXMsRjFlKS5jYWxsKHRoaXMpLTEsbikpfWZ1bmN0aW9uIG5CdChuLGUpe3JldHVybiBNYXRoLm1pbihlLE1hdGgubWF4KG4rJGYodGhpcyxOMWUpLmNhbGwodGhpcyktMSxuKSl9ZnVu''@;'; put 'put ''Y3Rpb24gSk5lKG4pe2NvbnN0IGU9W10sdD1bXTtyZXR1cm4gWG4obixyPT57Y29uc3QgaT1yO1ZhKE1hdGgubWluKGkuc3RhcnRSb3csaS5lbmRSb3cpLE1hdGgubWF4KGkuc3RhcnRSb3csaS5lbmRSb3cpLGc9PnstMT09PWUuaW5kZXhPZihnKSYmZS5wdXNoKGcpfSksVmEoTWF0aC5taW4o''@;'; put 'put ''aS5zdGFydENvbCxpLmVuZENvbCksTWF0aC5tYXgoaS5zdGFydENvbCxpLmVuZENvbCksZz0+ey0xPT09dC5pbmRleE9mKGcpJiZ0LnB1c2goZyl9KX0pLHtyb3dzOmUsY29sdW1uczp0fX1mdW5jdGlvbiBlRmUobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qg''@;'; put 'put ''aW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHRGZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3Jl''@;'; put 'put ''dHVybiBlLmdldChuKX1mdW5jdGlvbiB3MShuLGUpe3JldHVybiBmdW5jdGlvbiByQnQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLHRGZShuLGUsImdldCIpKX1mdW5jdGlvbiBaMyhuLGUsdCl7ZUZlKG4sZSksZS5zZXQobix0KX1mdW5jdGlvbiBtZChuLGUs''@;'; put 'put ''dCl7cmV0dXJuIGZ1bmN0aW9uIGlCdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4sdEZlKG4sZSwic2V0''@;'; put 'put ''IiksdCksdH1mdW5jdGlvbiBINyhuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiBLVChuLGUpe2VGZShuLGUpLGUuYWRkKG4pfUdvLmdldFNpbmds''@;'; put 'put ''ZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvcHlMaW1pdCIpLEdvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJtb2RpZnlDb3B5YWJsZVJhbmdlIiksR28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUN1dCIpLEdvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckN1dCIpLEdv''@;'; put 'put ''LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVQYXN0ZSIpLEdvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclBhc3RlIiksR28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvcHkiKSxHby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb3B5Iik7Y29u''@;'; put 'put ''c3QgSDFlPSJjb3B5UGFzdGUiLGFCdD1bImZyYWdtZW50U2VsZWN0aW9uIl0sbkZlPSJhcHBsaWNhdGlvbi9odC1zb3VyY2UtZGF0YS1qc29uLWh0bWwiLHJGZT1bJzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iSGFuZHNvbnRhYmxlIi8+JywnPHN0eWxlIHR5cGU9InRleHQvY3Nz''@;'; put 'put ''Ij50ZHt3aGl0ZS1zcGFjZTpub3JtYWx9YnJ7bXNvLWRhdGEtcGxhY2VtZW50OnNhbWUtY2VsbH08L3N0eWxlPiddLmpvaW4oIiIpO3ZhciB1Rz1uZXcgV2Vha01hcCxkRz1uZXcgV2Vha01hcCxoRz1uZXcgV2Vha01hcCxlQz1uZXcgV2Vha01hcCxoTj1uZXcgV2Vha01hcCxmTj1uZXcgV2Vh''@;'; put 'put ''a01hcCx0Qz1uZXcgV2Vha01hcCxwTj1uZXcgV2Vha01hcCxWMWU9bmV3IFdlYWtTZXQsaUZlPW5ldyBXZWFrU2V0LG9GZT1uZXcgV2Vha1NldCxCMWU9bmV3IFdlYWtTZXQsYUZlPW5ldyBXZWFrU2V0LGoxZT1uZXcgV2Vha1NldCxVMWU9bmV3IFdlYWtNYXAsejFlPW5ldyBXZWFrTWFwLFcx''@;'; put 'put ''ZT1uZXcgV2Vha01hcCxZMWU9bmV3IFdlYWtNYXAsWjFlPW5ldyBXZWFrTWFwLEcxZT1uZXcgV2Vha01hcDtjbGFzcyBzQnQgZXh0ZW5kcyBhbHtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gSDFlfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW0gxZSwuLi5hQnRdfXN0''@;'; put 'put ''YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDgwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntwYXN0ZU1vZGU6Im92ZXJ3cml0ZSIscm93c0xpbWl0OjEvMCxjb2x1bW5zTGltaXQ6MS8wLGNvcHlDb2x1bW5IZWFkZXJzOiExLGNvcHlDb2x1bW5Hcm91cEhl''@;'; put 'put ''YWRlcnM6ITEsY29weUNvbHVtbkhlYWRlcnNPbmx5OiExfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbSDFlXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnBhc3RlTW9kZT10aGlzLmdldFNldHRpbmcoInBhc3RlTW9kZSIpPz90aGlzLnBh''@;'; put 'put ''c3RlTW9kZSx0aGlzLnJvd3NMaW1pdD1pc05hTih0aGlzLmdldFNldHRpbmcoInJvd3NMaW1pdCIpKT90aGlzLnJvd3NMaW1pdDp0aGlzLmdldFNldHRpbmcoInJvd3NMaW1pdCIpLHRoaXMuY29sdW1uc0xpbWl0PWlzTmFOKHRoaXMuZ2V0U2V0dGluZygiY29sdW1uc0xpbWl0IikpP3RoaXMu''@;'; put 'put ''Y29sdW1uc0xpbWl0OnRoaXMuZ2V0U2V0dGluZygiY29sdW1uc0xpbWl0IiksbWQodGhpcyx1Ryx0aGlzLmdldFNldHRpbmcoImNvcHlDb2x1bW5IZWFkZXJzIikpLG1kKHRoaXMsZEcsdGhpcy5nZXRTZXR0aW5nKCJjb3B5Q29sdW1uR3JvdXBIZWFkZXJzIikpLG1kKHRoaXMsaEcsdGhpcy5n''@;'; put 'put ''ZXRTZXR0aW5nKCJjb3B5Q29sdW1uSGVhZGVyc09ubHkiKSksdGhpcy51aUNvbnRhaW5lcj10aGlzLmdldFNldHRpbmcoInVpQ29udGFpbmVyIik/P3RoaXMudWlDb250YWluZXIsdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLHcxKHRoaXMsVTFlKSksdGhp''@;'; put 'put ''cy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsdzEodGhpcyx6MWUpKSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uRW5kIix3MSh0aGlzLFcxZSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LCJjb3B5IixlPT50aGlzLm9uQ29w''@;'; put 'put ''eShlKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQsImN1dCIsZT0+dGhpcy5vbkN1dChlKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQsInBhc3RlIixlPT50aGlzLm9uUGFz''@;'; put 'put ''dGUoZSkpLGhMKCkmJih0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LCJtb3VzZWVudGVyIix3MSh0aGlzLFkxZSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHks''@;'; put 'put ''Im1vdXNlbGVhdmUiLHcxKHRoaXMsWjFlKSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsdzEodGhpcyxHMWUpKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1''@;'; put 'put ''Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1jb3B5KGU9ImNlbGxzLW9ubHkiKXttZCh0aGlzLGVDLGUpLG1kKHRoaXMsaE4sITApLEg3KHRoaXMsVjFlLHNGZSkuY2FsbCh0aGlzLCJjb3B5Iil9Y29weUNlbGxzT25seSgpe3RoaXMuY29weSgiY2VsbHMtb25s''@;'; put 'put ''eSIpfWNvcHlDb2x1bW5IZWFkZXJzT25seSgpe3RoaXMuY29weSgiY29sdW1uLWhlYWRlcnMtb25seSIpfWNvcHlXaXRoQWxsQ29sdW1uSGVhZGVycygpe3RoaXMuY29weSgid2l0aC1jb2x1bW4tZ3JvdXAtaGVhZGVycyIpfWNvcHlXaXRoQ29sdW1uSGVhZGVycygpe3RoaXMuY29weSgid2l0''@;'; put 'put ''aC1jb2x1bW4taGVhZGVycyIpfWN1dCgpe21kKHRoaXMsZk4sITApLEg3KHRoaXMsVjFlLHNGZSkuY2FsbCh0aGlzLCJjdXQiKX1nZXRSYW5nZWRDb3B5YWJsZURhdGEoZSl7cmV0dXJuIHFZKHRoaXMuZ2V0UmFuZ2VkRGF0YShlKSl9Z2V0UmFuZ2VkRGF0YShlLHQ9ITEpe2NvbnN0IHI9W10s''@;'; put 'put ''e3Jvd3M6aSxjb2x1bW5zOm99PUpOZShlKTtyZXR1cm4gWG4oaSxhPT57Y29uc3QgbD1bXTtYbihvLHU9PntpZihhPDApbC5wdXNoKHRoaXMuaG90LmdldENvbEhlYWRlcih1LGEpKTtlbHNle2xldCBnPXQ/dGhpcy5ob3QuZ2V0Q29weWFibGVTb3VyY2VEYXRhKGEsdSk6dGhpcy5ob3QuZ2V0''@;'; put 'put ''Q29weWFibGVEYXRhKGEsdSk7dCYmKENhKGcpfHxBcnJheS5pc0FycmF5KGcpKSYmKGc9SlNPTi5zdHJpbmdpZnkoZykpLGwucHVzaChnKX19KSxyLnB1c2gobCl9KSxyfXBhc3RlKGU9IiIsdD1lKXtpZighZSYmIXQpcmV0dXJuO2NvbnN0IHI9bmV3IFFWdDtlJiZyLmNsaXBib2FyZERhdGEu''@;'; put 'put ''c2V0RGF0YSgidGV4dC9wbGFpbiIsZSksdCYmci5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvaHRtbCIsdCksdGhpcy5vblBhc3RlKHIpfXNldENvcHlhYmxlVGV4dCgpe2NvbnN0IGU9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFlKXJldHVybjtpZihlLmlzU2lu''@;'; put 'put ''Z2xlSGVhZGVyKCkpcmV0dXJuIHZvaWQodGhpcy5jb3B5YWJsZVJhbmdlcz1bXSk7dzEodGhpcyx0Qykuc2V0U2VsZWN0ZWRSYW5nZShlKTtjb25zdCB0PW5ldyBNYXAoW1siaGVhZGVycyIsbnVsbF0sWyJjZWxscyIsbnVsbF1dKTsiY29sdW1uLWhlYWRlcnMtb25seSI9PT13MSh0aGlzLGVD''@;'; put 'put ''KT90LnNldCgiaGVhZGVycyIsdzEodGhpcyx0QykuZ2V0TW9zdEJvdHRvbUNvbHVtbkhlYWRlcnNSYW5nZSgpKTooIndpdGgtY29sdW1uLWhlYWRlcnMiPT09dzEodGhpcyxlQyk/dC5zZXQoImhlYWRlcnMiLHcxKHRoaXMsdEMpLmdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKSk6''@;'; put 'put ''IndpdGgtY29sdW1uLWdyb3VwLWhlYWRlcnMiPT09dzEodGhpcyxlQykmJnQuc2V0KCJoZWFkZXJzIix3MSh0aGlzLHRDKS5nZXRBbGxDb2x1bW5IZWFkZXJzUmFuZ2UoKSksdC5zZXQoImNlbGxzIix3MSh0aGlzLHRDKS5nZXRDZWxsc1JhbmdlKCkpKSx0aGlzLmNvcHlhYmxlUmFuZ2VzPUFy''@;'; put 'put ''cmF5LmZyb20odC52YWx1ZXMoKSkuZmlsdGVyKGk9Pm51bGwhPT1pKS5tYXAoKHtzdGFydFJvdzppLHN0YXJ0Q29sOm8sZW5kUm93OmEsZW5kQ29sOmx9KT0+KHtzdGFydFJvdzppLHN0YXJ0Q29sOm8sZW5kUm93OmEsZW5kQ29sOmx9KSksdGhpcy5jb3B5YWJsZVJhbmdlcz10aGlzLmhvdC5y''@;'; put 'put ''dW5Ib29rcygibW9kaWZ5Q29weWFibGVSYW5nZSIsdGhpcy5jb3B5YWJsZVJhbmdlcyk7Y29uc3Qgcj10LmdldCgiY2VsbHMiKTtpZihudWxsIT1yJiZyLmlzUmFuZ2VUcmltbWVkKXtjb25zdHtzdGFydFJvdzppLHN0YXJ0Q29sOm8sZW5kUm93OmEsZW5kQ29sOmx9PXI7dGhpcy5ob3QucnVu''@;'; put 'put ''SG9va3MoImFmdGVyQ29weUxpbWl0IixhLWkrMSxsLW8rMSx0aGlzLnJvd3NMaW1pdCx0aGlzLmNvbHVtbnNMaW1pdCl9fWlzRWRpdG9yT3BlbmVkKCl7cmV0dXJuIHRoaXMuaG90LmdldEFjdGl2ZUVkaXRvcigpPy5pc09wZW5lZCgpfXBvcHVsYXRlVmFsdWVzKHtwbGFpbkRhdGE6ZSxvcmln''@;'; put 'put ''aW5hbFBsYWluRGF0YTp0LHNvdXJjZURhdGE6cn0pe2lmKCFlLmxlbmd0aClyZXR1cm5bbnVsbCxudWxsLG51bGwsbnVsbF07Y29uc3QgaT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksbz1lLmxlbmd0aCxhPWVbMF0ubGVuZ3RoLGw9W107aWYoIWkpcmV0dXJuW251bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGxdO2NvbnN0e3Jvdzp1LGNvbDpnfT1pLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpFLGNvbDpPfT1pLmdldEJvdHRvbUVuZENvcm5lcigpO2lmKG51bGw9PT11fHxudWxsPT09Z3x8bnVsbD09PUV8fG51bGw9PT1PKXJldHVybltudWxsLG51bGwsbnVsbCxudWxsXTtsZXQg''@;'; put 'put ''Wj11LGVlPWcsdmU9dSxNZT1nO2Zvcig7bC5sZW5ndGg8b3x8Wjw9RTspe2NvbnN0e3NraXBSb3dPblBhc3RlOkhlLHZpc3VhbFJvdzpXZX09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoWixnKTtpZihaPVdlKzEsITA9PT1IZSljb250aW51ZTt2ZT1XZSxlZT1nO2NvbnN0IGF0PVtdLEN0PWwubGVu''@;'; put 'put ''Z3RoJW87Zm9yKDthdC5sZW5ndGg8YXx8ZWU8PU87KXtjb25zdHtza2lwQ29sdW1uT25QYXN0ZTpBdCx2aXN1YWxDb2w6S3QscGFyc2VQYXN0ZWRWYWx1ZTpxdH09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoV2UsZWUpLFRuPSh0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKFdlLGVlKSxhdC5s''@;'; put 'put ''ZW5ndGglYSk7aWYoZWU9S3QrMSwhMD09PUF0KWNvbnRpbnVlO01lPUt0O2NvbnN0IENuPXI/LltDdF0/LltUbl0scXI9dD8uW0N0XT8uW1RuXTtsZXQgJG49ZVtDdF1bVG5dO3F0JiZyJiZic2UoQ24pJiYkbj09PXFyJiYoJG49SlNPTi5wYXJzZShDbikpLGF0LnB1c2goJG4pfWwucHVzaChh''@;'; put 'put ''dCl9cmV0dXJuIG1kKHRoaXMscE4sITApLHRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KHUsZyxsLHZvaWQgMCx2b2lkIDAsIkNvcHlQYXN0ZS5wYXN0ZSIsdGhpcy5wYXN0ZU1vZGUpLFt1LGcsdmUsTWVdfW9uQ29weShlKXtjb25zdCB0PWUuY29tcG9zZWRQYXRoKClbMF0scj10aGlzLmhv''@;'; put 'put ''dC5nZXRGb2N1c01hbmFnZXIoKS5nZXRSZWZvY3VzRWxlbWVudCgpLGk9aHModCkmJiJob3RJbnB1dCJpbiB0LmRhdGFzZXQ7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCkmJiF3MSh0aGlzLGhOKXx8dGhpcy5pc0VkaXRvck9wZW5lZCgpfHxocyh0KSYmKGkmJnQhPT1yfHwhaSYmdCE9PXRo''@;'; put 'put ''aXMuaG90LnJvb3REb2N1bWVudC5ib2R5JiYhcEwodCx0aGlzLmhvdC5yb290RWxlbWVudCkpKXJldHVybjtlLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZXRDb3B5YWJsZVRleHQoKSxtZCh0aGlzLGhOLCExKTtjb25zdCBvPXRoaXMuZ2V0UmFuZ2VkRGF0YSh0aGlzLmNvcHlhYmxlUmFuZ2Vz''@;'; put 'put ''KSxhPXRoaXMuZ2V0UmFuZ2VkRGF0YSh0aGlzLmNvcHlhYmxlUmFuZ2VzLCEwKSxsPUg3KHRoaXMsaUZlLGxCdCkuY2FsbCh0aGlzLHRoaXMuY29weWFibGVSYW5nZXMpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb3B5IixvLHRoaXMuY29weWFibGVSYW5nZXMsbCkmJihINyh0aGlzLGox''@;'; put 'put ''ZSxjRmUpLmNhbGwodGhpcyxlLG8sYSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29weSIsbyx0aGlzLmNvcHlhYmxlUmFuZ2VzLGwpKSxtZCh0aGlzLGVDLCJjZWxscy1vbmx5Iil9b25DdXQoZSl7Y29uc3QgdD1lLmNvbXBvc2VkUGF0aCgpWzBdLHI9dGhpcy5ob3QuZ2V0Rm9jdXNNYW5h''@;'; put 'put ''Z2VyKCkuZ2V0UmVmb2N1c0VsZW1lbnQoKSxpPWhzKHQpJiYiaG90SW5wdXQiaW4gdC5kYXRhc2V0O2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpJiYhdzEodGhpcyxmTil8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKXx8aHModCkmJihpJiZ0IT09cnx8IWkmJnQhPT10aGlzLmhvdC5yb290RG9j''@;'; put 'put ''dW1lbnQuYm9keSYmIXBMKHQsdGhpcy5ob3Qucm9vdEVsZW1lbnQpKSlyZXR1cm47ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2V0Q29weWFibGVUZXh0KCksbWQodGhpcyxmTiwhMSk7Y29uc3Qgbz10aGlzLmdldFJhbmdlZERhdGEodGhpcy5jb3B5YWJsZVJhbmdlcyksYT10aGlzLmdldFJh''@;'; put 'put ''bmdlZERhdGEodGhpcy5jb3B5YWJsZVJhbmdlcywhMCk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUN1dCIsbyx0aGlzLmNvcHlhYmxlUmFuZ2VzKSYmKEg3KHRoaXMsajFlLGNGZSkuY2FsbCh0aGlzLGUsbyxhKSx0aGlzLmhvdC5lbXB0eVNlbGVjdGVkQ2VsbHMoIkNvcHlQYXN0ZS5jdXQi''@;'; put 'put ''KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDdXQiLG8sdGhpcy5jb3B5YWJsZVJhbmdlcykpfW9uUGFzdGUoZSl7Y29uc3QgdD1lLmNvbXBvc2VkUGF0aCgpWzBdLHI9dGhpcy5ob3QuZ2V0Rm9jdXNNYW5hZ2VyKCkuZ2V0UmVmb2N1c0VsZW1lbnQoKSxpPWhzKHQpJiYiaG90SW5wdXQiaW4g''@;'; put 'put ''dC5kYXRhc2V0O2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpfHx0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fCF0aGlzLmhvdC5nZXRTZWxlY3RlZCgpfHxocyh0KSYmKGkmJnQhPT1yfHwhaSYmdCE9PXRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5JiYhcEwodCx0aGlzLmhvdC5yb290RWxlbWVu''@;'; put 'put ''dCkpKXJldHVybjtlLnByZXZlbnREZWZhdWx0Py4oKTtjb25zdCBvPUg3KHRoaXMsYUZlLHVCdCkuY2FsbCh0aGlzLGUpLHtwYXN0ZWRTb3VyY2VEYXRhOmF9PW87bGV0e3Bhc3RlZERhdGE6bH09bztpZigic3RyaW5nIj09dHlwZW9mIGwmJihsPWZ1bmN0aW9uIHFSdChuKXtjb25zdCBlPVtb''@;'; put 'put ''IiJdXTtpZigwPT09bi5sZW5ndGgpcmV0dXJuIGU7bGV0IGksdD0wLHI9MDtmb3IoO24ubGVuZ3RoPjAmJmkhPT1uLmxlbmd0aDspaWYoaT1uLmxlbmd0aCxuLm1hdGNoKEpSZSkpbj1uLnJlcGxhY2UoSlJlLCIiKSx0Kz0xLGVbcl1bdF09IiI7ZWxzZSBpZihuLm1hdGNoKFFSZSkpbj1uLnJl''@;'; put 'put ''cGxhY2UoUVJlLCIiKSx0PTAscis9MSxlW3JdPVsiIl07ZWxzZXtsZXQgbz0iIjtpZihuLnN0YXJ0c1dpdGgoJyInKSl7Y29uc3QgYT0kUnQobi5zbGljZSgxKSk7aWYoLTEhPT1hKXtsZXQgbD0wO2NvbnN0IHU9bi5zbGljZSgxKTtmb3IoO2w8YTspJyInPT09dVtsXSYmJyInPT09dVtsKzFd''@;'; put 'put ''PyhvKz0nIicsbCs9Mik6KG8rPXVbbF0sbCs9MSk7bj1uLnNsaWNlKGErMil9ZWxzZXtsZXQgbD0wLHU9ITA7Zm9yKDt1Oyl7Y29uc3QgZz1uLnNsaWNlKDAsMSk7JyInPT09ZyYmKGwrPTEpLG8rPWcsKDA9PT0obj1uLnNsaWNlKDEpKS5sZW5ndGh8fG4ubWF0Y2goL15bXHRcclxuXS8pJiZs''@;'; put 'put ''JTI9PTApJiYodT0hMSl9bz1vLnJlcGxhY2UoL14iLywiIikucmVwbGFjZSgvIiQvLCIiKS5yZXBsYWNlKC9bIl0qL2csZz0+bmV3IEFycmF5KE1hdGguZmxvb3IoZy5sZW5ndGgvMikpLmZpbGwoJyInKS5qb2luKCIiKSl9fWVsc2V7Y29uc3QgYT1uLm1hdGNoKEdSdCk7bz1hP2FbMF06IiIs''@;'; put 'put ''bj1uLnNsaWNlKG8ubGVuZ3RoKX1lW3JdW3RdPW99cmV0dXJuIGV9KGwpKSx2b2lkIDA9PT1sfHxBcnJheS5pc0FycmF5KGwpJiYwPT09bC5sZW5ndGgpcmV0dXJuO2NvbnN0IHU9QWQobCk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUGFzdGUiLGwsdGhpcy5jb3B5YWJsZVJh''@;'; put 'put ''bmdlcykpcmV0dXJuO2NvbnN0W2csRSxPLFpdPXRoaXMucG9wdWxhdGVWYWx1ZXMoe3BsYWluRGF0YTpsLHNvdXJjZURhdGE6YSxvcmlnaW5hbFBsYWluRGF0YTp1fSk7bnVsbCE9PWcmJm51bGwhPT1FJiZudWxsIT09TyYmbnVsbCE9PVomJnRoaXMuaG90LnNlbGVjdENlbGwoZyxFLE1hdGgu''@;'; put 'put ''bWluKHRoaXMuaG90LmNvdW50Um93cygpLTEsTyksTWF0aC5taW4odGhpcy5ob3QuY291bnRDb2xzKCktMSxaKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGFzdGUiLGwsdGhpcy5jb3B5YWJsZVJhbmdlcyl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX1jb25zdHJ1Y3RvciguLi5lKXtz''@;'; put 'put ''dXBlciguLi5lKSxLVCh0aGlzLFYxZSksS1QodGhpcyxpRmUpLEtUKHRoaXMsb0ZlKSxLVCh0aGlzLEIxZSksS1QodGhpcyxhRmUpLEtUKHRoaXMsajFlKSxaMyh0aGlzLHVHLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxaMyh0aGlzLGRHLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9''@;'; put 'put ''KSxaMyh0aGlzLGhHLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxaMyh0aGlzLGVDLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxaMyh0aGlzLGhOLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxaMyh0aGlzLGZOLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxaMyh0aGlz''@;'; put 'put ''LHRDLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxaMyh0aGlzLHBOLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxaMyh0aGlzLFUxZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksWjModGhpcyx6MWUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFozKHRoaXMsVzFlLHt3''@;'; put 'put ''cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxaMyh0aGlzLFkxZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksWjModGhpcyxaMWUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFozKHRoaXMsRzFlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0aGlzLmNvbHVtbnNMaW1pdD0x''@;'; put 'put ''LzAsdGhpcy5yb3dzTGltaXQ9MS8wLHRoaXMucGFzdGVNb2RlPSJvdmVyd3JpdGUiLHRoaXMudWlDb250YWluZXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHksbWQodGhpcyx1RywhMSksbWQodGhpcyxkRywhMSksbWQodGhpcyxoRywhMSksbWQodGhpcyxlQywiY2VsbHMtb25seSIpLG1k''@;'; put 'put ''KHRoaXMsaE4sITEpLG1kKHRoaXMsZk4sITEpLG1kKHRoaXMsdEMsbmV3IHRCdCh7Y291bnRSb3dzOigpPT50aGlzLmhvdC5jb3VudFJvd3MoKSxjb3VudENvbHVtbnM6KCk9PnRoaXMuaG90LmNvdW50Q29scygpLHJvd3NMaW1pdDooKT0+dGhpcy5yb3dzTGltaXQsY29sdW1uc0xpbWl0Oigp''@;'; put 'put ''PT50aGlzLmNvbHVtbnNMaW1pdCxjb3VudENvbHVtbkhlYWRlcnM6KCk9PnRoaXMuaG90LnZpZXcuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCl9KSksbWQodGhpcyxwTiwhMSksdGhpcy5jb3B5YWJsZVJhbmdlcz1bXSxtZCh0aGlzLFUxZSx0PT57dC5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0t''@;'; put 'put ''LS0ifSxmdW5jdGlvbiBaVnQobil7cmV0dXJue2tleToiY29weSIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoY2NlKX0sY2FsbGJhY2soKXtuLmNvcHlDZWxsc09ubHkoKX0sZGlzYWJsZWQoKXtpZigwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRD''@;'; put 'put ''b2xzKCkpcmV0dXJuITA7Y29uc3QgZT10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighZXx8ZS5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2NvbnN0IHQ9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiF0fHx0Lmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksdzEodGhpcyx1''@;'; put 'put ''RykmJnQuaXRlbXMucHVzaChmdW5jdGlvbiBxVnQobil7cmV0dXJue2tleToiY29weV93aXRoX2NvbHVtbl9oZWFkZXJzIixuYW1lKCl7Y29uc3QgZT10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSx0PWU/VnMoZS5nZXRXaWR0aCgpLTEsMCwxKTowO3JldHVybiB0aGlzLmdldFRyYW5z''@;'; put 'put ''bGF0ZWRQaHJhc2UodWNlLHQpfSxjYWxsYmFjaygpe24uY29weVdpdGhDb2x1bW5IZWFkZXJzKCl9LGRpc2FibGVkKCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpKXJldHVybiEwO2NvbnN0IGU9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIWV8fGUuaXNTaW5nbGVIZWFkZXIo''@;'; put 'put ''KSlyZXR1cm4hMDtjb25zdCB0PXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hdHx8dC5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpLHcxKHRoaXMsZEcpJiZ0Lml0ZW1zLnB1c2goZnVuY3Rpb24gJFZ0KG4pe3JldHVybntrZXk6ImNvcHlfd2l0aF9jb2x1bW5fZ3JvdXBfaGVhZGVycyIs''@;'; put 'put ''bmFtZSgpe2NvbnN0IGU9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksdD1lP1ZzKGUuZ2V0V2lkdGgoKS0xLDAsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGRjZSx0KX0sY2FsbGJhY2soKXtuLmNvcHlXaXRoQWxsQ29sdW1uSGVhZGVycygpfSxkaXNhYmxlZCgp''@;'; put 'put ''e2lmKCF0aGlzLmhhc0NvbEhlYWRlcnMoKXx8IXRoaXMuZ2V0U2V0dGluZ3MoKS5uZXN0ZWRIZWFkZXJzKXJldHVybiEwO2NvbnN0IGU9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIWV8fGUuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm4hMDtjb25zdCB0PXRoaXMuZ2V0U2VsZWN0''@;'; put 'put ''ZWQoKTtyZXR1cm4hdHx8dC5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpLHcxKHRoaXMsaEcpJiZ0Lml0ZW1zLnB1c2goZnVuY3Rpb24gR1Z0KG4pe3JldHVybntrZXk6ImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSIsbmFtZSgpe2NvbnN0IGU9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0''@;'; put 'put ''aXZlKCksdD1lP1ZzKGUuZ2V0V2lkdGgoKS0xLDAsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGhjZSx0KX0sY2FsbGJhY2soKXtuLmNvcHlDb2x1bW5IZWFkZXJzT25seSgpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmhhc0NvbEhlYWRlcnMoKSlyZXR1cm4hMDtjb25zdCBl''@;'; put 'put ''PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFlfHxlLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuITA7Y29uc3QgdD10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIXR8fHQubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSx0Lml0ZW1zLnB1c2goZnVuY3Rpb24gS1Z0KG4pe3Jl''@;'; put 'put ''dHVybntrZXk6ImN1dCIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoZmNlKX0sY2FsbGJhY2soKXtuLmN1dCgpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4hMDtjb25zdCBlPXRoaXMuZ2V0U2Vs''@;'; put 'put ''ZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFlfHxlLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuITA7Y29uc3QgdD10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIXR8fHQubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKX0pLG1kKHRoaXMsejFlLCh0LHIsaSxvLGEpPT57dzEodGhpcyxwTikmJihh''@;'; put 'put ''LnZhbHVlPSEwKSxtZCh0aGlzLHBOLCExKX0pLG1kKHRoaXMsVzFlLCgpPT57dGhpcy5pc0VkaXRvck9wZW5lZCgpfHx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZyYWdtZW50U2VsZWN0aW9ufHx0aGlzLnNldENvcHlhYmxlVGV4dCgpfSksbWQodGhpcyxZMWUsKCk9PntINyh0aGlzLEIxZSxs''@;'; put 'put ''RmUpLmNhbGwodGhpcyl9KSxtZCh0aGlzLFoxZSwoKT0+e0g3KHRoaXMsb0ZlLGNCdCkuY2FsbCh0aGlzKX0pLG1kKHRoaXMsRzFlLCgpPT57SDcodGhpcyxCMWUsbEZlKS5jYWxsKHRoaXMpfSl9fWZ1bmN0aW9uIHNGZShuKXtpZihoTCgpKXtjb25zdCBlPXRoaXMuaG90LmdldFNlbGVjdGVk''@;'; put 'put ''UmFuZ2VBY3RpdmUoKTtpZihlKXtjb25zdHtyb3c6dCxjb2w6cn09ZS5oaWdobGlnaHQ7aWYobnVsbCE9PXQmJm51bGwhPT1yKXtjb25zdCBpPXRoaXMuaG90LmdldENlbGwodCxyLCEwKTtpJiZhQWUoaSwoKT0+e3RoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZChuKX0pfX19ZWxz''@;'; put 'put ''ZSB0aGlzLmhvdC5yb290RG9jdW1lbnQuZXhlY0NvbW1hbmQobil9ZnVuY3Rpb24gbEJ0KG4pe2NvbnN0e3Jvd3M6ZX09Sk5lKG4pO2xldCB0PTA7Zm9yKGxldCByPTA7cjxlLmxlbmd0aCYmIShlW3JdPj0wKTtyKyspdCs9MTtyZXR1cm57Y29sdW1uSGVhZGVyc0NvdW50OnR9fWZ1bmN0aW9u''@;'; put 'put ''IGNCdCgpe2lmKHRoaXMuaG90LmlzTGlzdGVuaW5nKCkpe2NvbnN0IG49dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKG4pe2NvbnN0e3JvdzplLGNvbDp0fT1uLmhpZ2hsaWdodDtpZihudWxsPT09ZXx8bnVsbD09PXQpcmV0dXJuO2NvbnN0IHI9dGhpcy5ob3QuZ2V0Q2Vs''@;'; put 'put ''bChlLHQsITApO3ImJkxzZShyKX19fWZ1bmN0aW9uIGxGZSgpe2lmKHRoaXMuaG90LmlzTGlzdGVuaW5nKCkpe2NvbnN0IG49dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKG4pe2NvbnN0e3JvdzplLGNvbDp0fT1uLmhpZ2hsaWdodDtpZihudWxsPT09ZXx8bnVsbD09PXQp''@;'; put 'put ''cmV0dXJuO2NvbnN0IHI9dGhpcy5ob3QuZ2V0Q2VsbChlLHQsITApO3I/Lmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikmJk9zZShyKX19fWZ1bmN0aW9uIHVCdChuKXtsZXQgZSx0O2lmKG4mJnR5cGVvZiBuLmNsaXBib2FyZERhdGE8InUiKXtjb25zdCByPW4uY2xpcGJvYXJkRGF0''@;'; put 'put ''YSxpPXIuZ2V0RGF0YShuRmUpO2kmJih0PVhzZShpLHRoaXMuaG90LnJvb3REb2N1bWVudCk/LmRhdGEpO2NvbnN0IG89ci5nZXREYXRhKCJ0ZXh0L2h0bWwiKT8/IiIsYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLnNhbml0aXplcjtvJiYiZnVuY3Rpb24iIT10eXBlb2YgYSYmQ3NlKHRoaXMu''@;'; put 'put ''aG90LnJvb3RFbGVtZW50LEVzZSwnSFRNTCBjb250ZW50IGlzIGJlaW5nIHBhc3RlZCB0byB0aGUgRE9NIHdpdGhvdXQgYSBzYW5pdGl6ZXIuIENvbmZpZ3VyZSB0aGUgInNhbml0aXplciIgb3B0aW9uIHRvIHByZXZlbnQgWFNTIHZ1bG5lcmFiaWxpdGllcy4nKTtjb25zdCBsPSJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBhP2EobywiQ29weVBhc3RlLnBhc3RlIik6bztsJiYvKDx0YWJsZSl8KDxUQUJMRSkvZy50ZXN0KGwpP2U9WHNlKGwsdGhpcy5ob3Qucm9vdERvY3VtZW50KT8uZGF0YTooZT1yLmdldERhdGEoInRleHQvcGxhaW4iKSwic3RyaW5nIj09dHlwZW9mIGUmJihlPWUucmVwbGFj''@;'; put 'put ''ZSgvKFxyXG58XHJ8XG4pJC8sIiIpKSl9ZWxzZSB0eXBlb2YgQ2xpcGJvYXJkRXZlbnQ+InUiJiZ0eXBlb2YgdGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhPCJ1IiYmKGU9dGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhLmdldERhdGEoIlRleHQiKSk7cmV0dXJue3Bh''@;'; put 'put ''c3RlZERhdGE6ZSxwYXN0ZWRTb3VyY2VEYXRhOnR9fWZ1bmN0aW9uIGNGZShuLGUsdCl7Y29uc3Qgcj1xWShlKTtpZihuJiZuLmNsaXBib2FyZERhdGEpe2NvbnN0IGk9S3NlKGUpLG89S3NlKHQpO24uY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIixyKSxuLmNsaXBib2FyZERh''@;'; put 'put ''dGEuc2V0RGF0YSgidGV4dC9odG1sIixbckZlLGldLmpvaW4oIiIpKSxuLmNsaXBib2FyZERhdGEuc2V0RGF0YShuRmUsW3JGZSxvXS5qb2luKCIiKSl9ZWxzZSB0eXBlb2YgQ2xpcGJvYXJkRXZlbnQ+InUiJiZ0aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGEuc2V0RGF0YSgiVGV4''@;'; put 'put ''dCIscil9ZnVuY3Rpb24gdUZlKG4sZSl7cmV0dXJuYGJvcmRlcl9yb3cke259Y29sJHtlfWB9ZnVuY3Rpb24gJDFlKG4pe2NvbnN0IGU9bjtyZXR1cm4oWm8oZS5zdGFydCl8fFpvKGUubGVmdCkpJiYoZS5zdGFydD1lLnN0YXJ0Pz9lLmxlZnQpLChabyhlLmVuZCl8fFpvKGUucmlnaHQpKSYm''@;'; put 'put ''KGUuZW5kPWUuZW5kPz9lLnJpZ2h0KSxkZWxldGUgZS5sZWZ0LGRlbGV0ZSBlLnJpZ2h0LG59ZnVuY3Rpb24gZ04obil7Y29uc3QgZT1uO3JldHVybiBabyhlLnN0YXJ0KSYmKGUubGVmdD1lLnN0YXJ0KSxabyhlLmVuZCkmJihlLnJpZ2h0PWUuZW5kKSxufWZ1bmN0aW9uIHExZShuLGUpe3Jl''@;'; put 'put ''dHVybntpZDp1RmUobixlKSxib3JkZXI6e3dpZHRoOjEsY29sb3I6IiMwMDAiLGNvcm5lclZpc2libGU6ITF9LHJvdzpuLGNvbDplLHRvcDp7aGlkZTohMH0sYm90dG9tOntoaWRlOiEwfSxzdGFydDp7aGlkZTohMH0sZW5kOntoaWRlOiEwfX19ZnVuY3Rpb24gZkcobixlLHQpeyFSZChlLHQp''@;'; put 'put ''fHwhWm8oZVt0XSl8fChlW3RdPyhDYShlW3RdKXx8KGVbdF09e3dpZHRoOjEsY29sb3I6IiMwMDAifSksblt0XT1lW3RdKTooZVt0XT17aGlkZTohMH0sblt0XT1lW3RdKSl9ZnVuY3Rpb24gVjcobixlKXtsZXQgdD0hMTtyZXR1cm4gWG4obi5nZXRTZWxlY3RlZFJhbmdlKCk/P1tdLHI9Pnty''@;'; put 'put ''LmZvckFsbCgoaSxvKT0+e2lmKGk8MHx8bzwwKXJldHVybjtjb25zdCBhPW4uZ2V0Q2VsbE1ldGEoaSxvKS5ib3JkZXJzO2lmKGEpe2lmKCFlKXJldHVybiB0PSEwLCExO3tjb25zdCBsPWE7aWYoIVJkKGxbZV0sImhpZGUiKXx8ITE9PT1sW2VdLmhpZGUpcmV0dXJuIHQ9ITAsITF9fX0pfSks''@;'; put 'put ''dH1mdW5jdGlvbiBwRyhuKXtyZXR1cm5gPHNwYW4gY2xhc3M9InNlbGVjdGVkIj5cdTI3MTM8L3NwYW4+JHtufWB9Y29uc3QgZ0J0PW5ldyBNYXAoW1sibGVmdCIsInN0YXJ0Il0sWyJyaWdodCIsImVuZCJdXSk7ZnVuY3Rpb24gdkJ0KG4pe3JldHVybntrZXk6ImJvcmRlcnM6dG9wIixuYW1l''@;'; put 'put ''KCl7bGV0IGU9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKE9jZSk7cmV0dXJuIFY3KHRoaXMsInRvcCIpJiYoZT1wRyhlKSksZX0sY2FsbGJhY2soZSx0KXtjb25zdCByPVY3KHRoaXMsInRvcCIpO24ucHJlcGFyZUJvcmRlcih0LCJ0b3AiLHIpfX19ZnVuY3Rpb24gX0J0KG4pe2NvbnN0IGU9''@;'; put 'put ''bi5ob3QuaXNSdGwoKT8ic3RhcnQiOiJlbmQiO3JldHVybntrZXk6ImJvcmRlcnM6cmlnaHQiLG5hbWUoKXtsZXQgdD10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoTmNlKTtyZXR1cm4gVjcodGhpcyxlKSYmKHQ9cEcodCkpLHR9LGNhbGxiYWNrKHQscil7Y29uc3QgaT1WNyh0aGlzLGUpO24u''@;'; put 'put ''cHJlcGFyZUJvcmRlcihyLGUsaSl9fX1mdW5jdGlvbiB5QnQobil7cmV0dXJue2tleToiYm9yZGVyczpib3R0b20iLG5hbWUoKXtsZXQgZT10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoRmNlKTtyZXR1cm4gVjcodGhpcywiYm90dG9tIikmJihlPXBHKGUpKSxlfSxjYWxsYmFjayhlLHQpe2Nv''@;'; put 'put ''bnN0IHI9VjcodGhpcywiYm90dG9tIik7bi5wcmVwYXJlQm9yZGVyKHQsImJvdHRvbSIscil9fX1mdW5jdGlvbiBiQnQobil7Y29uc3QgZT1uLmhvdC5pc1J0bCgpPyJlbmQiOiJzdGFydCI7cmV0dXJue2tleToiYm9yZGVyczpsZWZ0IixuYW1lKCl7bGV0IHQ9dGhpcy5nZXRUcmFuc2xhdGVk''@;'; put 'put ''UGhyYXNlKFBjZSk7cmV0dXJuIFY3KHRoaXMsZSkmJih0PXBHKHQpKSx0fSxjYWxsYmFjayh0LHIpe2NvbnN0IGk9VjcodGhpcyxlKTtuLnByZXBhcmVCb3JkZXIocixlLGkpfX19ZnVuY3Rpb24gd0J0KG4pe3JldHVybntrZXk6ImJvcmRlcnM6bm9fYm9yZGVycyIsbmFtZSgpe3JldHVybiB0''@;'; put 'put ''aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoSGNlKX0sY2FsbGJhY2soZSx0KXtuLnByZXBhcmVCb3JkZXIodCwibm9Cb3JkZXJzIix2b2lkIDApfSxkaXNhYmxlZCgpe3JldHVybiFWNyh0aGlzKX19fWZ1bmN0aW9uIEsxZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''ImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiBYMWUobixlKXsoZnVuY3Rpb24gQ0J0KG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBl''@;'; put 'put ''bGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sZSksZS5hZGQobil9Y29uc3QgZ0c9ImN1c3RvbUJvcmRlcnMiO2Z1bmN0aW9uIG1HKG4pe3JldHVybiJvYmplY3QiPT10eXBlb2YgbiYmbnVsbCE9PW59ZnVuY3Rpb24gaEZlKG4pe3JldHVybiBtRyhuKSYmIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBuLnJvdyYmIm51bWJlciI9PXR5cGVvZiBuLmNvbH1mdW5jdGlvbiBmRmUobil7cmV0dXJuInRvcCI9PT1ufHwiYm90dG9tIj09PW58fCJzdGFydCI9PT1ufHwiZW5kIj09PW59Y29uc3QgcEZlPVsiZGFzaGVkIiwiZG90dGVkIiwic29saWQiXTt2YXIgZ0ZlPW5ldyBXZWFrU2V0LG1GZT1u''@;'; put 'put ''ZXcgV2Vha1NldCx2RmU9bmV3IFdlYWtTZXQ7Y2xhc3MgTUJ0IGV4dGVuZHMgYWx7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGdHfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDkwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtn''@;'; put 'put ''R119ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGU9PksxZSh0aGlzLG1GZSx4QnQpLmNhbGwodGhpcyxlKSksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+SzFlKHRoaXMsdkZlLEFCdCkuY2FsbCh0aGlz''@;'; put 'put ''KSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhpZGVCb3JkZXJzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5jaGFuZ2VCb3JkZXJTZXR0aW5ncygp''@;'; put 'put ''LHN1cGVyLnVwZGF0ZVBsdWdpbigpfXNldEJvcmRlcnMoZSx0KXtsZXQgcj1bInRvcCIsImJvdHRvbSIsInN0YXJ0IiwiZW5kIl0saT1udWxsO3QmJih0aGlzLmNoZWNrU2V0dGluZ3NDb2hlc2lvbihbdF0pLHI9T2JqZWN0LmtleXModCksaT0kMWUodCkpO2NvbnN0IGE9SkwoY1QoZSkse2Ny''@;'; put 'put ''ZWF0ZUNlbGxDb29yZHM6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMuYmluZCh0aGlzLmhvdCksY3JlYXRlQ2VsbFJhbmdlOnRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UuYmluZCh0aGlzLmhvdCl9KTtYbihlLGw9PnthKGwpLmZvckFsbCgodSxnKT0+KFhuKHIsRT0+e3RoaXMucHJlcGFy''@;'; put 'put ''ZUJvcmRlckZyb21DdXN0b21BZGRlZCh1LGcsaSxmdW5jdGlvbiBtQnQobil7cmV0dXJuIGdCdC5nZXQobik/P259KEUpKX0pLCEwKSl9KSx0aGlzLmhvdC52aWV3LnJlbmRlcigpfWdldEJvcmRlcnMoZSl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIHRoaXMuc2F2ZWRCb3JkZXJzO2Nv''@;'; put 'put ''bnN0IHI9SkwoY1QoZSkse2NyZWF0ZUNlbGxDb29yZHM6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMuYmluZCh0aGlzLmhvdCksY3JlYXRlQ2VsbFJhbmdlOnRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UuYmluZCh0aGlzLmhvdCl9KSxpPVtdO3JldHVybiBYbihlLG89PntyKG8pLmZvckFs''@;'; put 'put ''bCgoYSxsKT0+KFhuKHRoaXMuc2F2ZWRCb3JkZXJzLHU9Pnt1LnJvdz09PWEmJnUuY29sPT09bCYmaS5wdXNoKGdOKHUpKX0pLCEwKSl9KSxpfWNsZWFyQm9yZGVycyhlKXtlP3RoaXMuc2V0Qm9yZGVycyhlKTooWG4odGhpcy5zYXZlZEJvcmRlcnMsdD0+e3RoaXMuY2xlYXJCb3JkZXJzRnJv''@;'; put 'put ''bVNlbGVjdGlvblNldHRpbmdzKHQuaWQpLHRoaXMuY2xlYXJOdWxsQ2VsbFJhbmdlKCksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEodC5yb3csdC5jb2wsImJvcmRlcnMiKX0pLHRoaXMuc2F2ZWRCb3JkZXJzLmxlbmd0aD0wKX1pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoZSx0KXt0aGlzLmNo''@;'; put 'put ''ZWNrU2F2ZWRCb3JkZXJzKGUpfHx0aGlzLnNhdmVkQm9yZGVycy5wdXNoKGUpO2NvbnN0IGk9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZS5yb3csZS5jb2wpLG89dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShpLGksaSk7dGhpcy5jaGVja0N1c3RvbVNlbGVjdGlvbnMoZSxvLHQpfHx0''@;'; put 'put ''aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmFkZEN1c3RvbVNlbGVjdGlvbih7Ym9yZGVyOmUsdmlzdWFsQ2VsbFJhbmdlOm99KX1wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkKGUsdCxyLGkpe2NvbnN0IG89dGhpcy5ob3QuY291bnRSb3dzKCksYT10aGlzLmhvdC5jb3VudENvbHMo''@;'; put 'put ''KTtpZihlPj1vfHx0Pj1hKXJldHVybjtsZXQgbD1xMWUoZSx0KTtyJiYobD1mdW5jdGlvbiBoQnQobixlKXtyZXR1cm4gUmQoZSwiYm9yZGVyIikmJmUuYm9yZGVyJiYobi5ib3JkZXI9ZS5ib3JkZXIpLGZHKG4sZSwidG9wIiksZkcobixlLCJib3R0b20iKSxmRyhuLGUsInN0YXJ0IiksZkco''@;'; put 'put ''bixlLCJlbmQiKSxufShsLHIpLFhuKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyx1PT57Y29uc3R7c2V0dGluZ3M6Z309dTtpZihsLmlkPT09Zy5pZCl7T2JqZWN0LmFzc2lnbihnLHIpO2NvbnN0IEU9ZztyZXR1cm4gbC5pZD1FLmlkLGwudG9wPUUudG9w''@;'; put 'put ''LGwuYm90dG9tPUUuYm90dG9tLGwuc3RhcnQ9RS5zdGFydCxsLmVuZD1FLmVuZCwhMX19KSksdGhpcy5ob3Quc2V0Q2VsbE1ldGEoZSx0LCJib3JkZXJzIixnTihsKSksdGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MobCxpKX1wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkUmFuZ2Uo''@;'; put 'put ''ZSx0KXtjb25zdCByPU1hdGgubWluKGUudG8ucm93LHRoaXMuaG90LmNvdW50Um93cygpLTEpLGk9TWF0aC5taW4oZS50by5jb2wsdGhpcy5ob3QuY291bnRDb2xzKCktMSk7VmEoZS5mcm9tLnJvdyxyLG89PntWYShlLmZyb20uY29sLGksYT0+e2NvbnN0IGw9cTFlKG8sYSk7bGV0IHU9MDtv''@;'; put 'put ''PT09ZS5mcm9tLnJvdyYmUmQodCwidG9wIikmJih1Kz0xLGwudG9wPXQudG9wKSxvPT09ZS50by5yb3cmJlJkKHQsImJvdHRvbSIpJiYodSs9MSxsLmJvdHRvbT10LmJvdHRvbSksYT09PWUuZnJvbS5jb2wmJlJkKHQsInN0YXJ0IikmJih1Kz0xLGwuc3RhcnQ9dC5zdGFydCksYT09PWUudG8u''@;'; put 'put ''Y29sJiZSZCh0LCJlbmQiKSYmKHUrPTEsbC5lbmQ9dC5lbmQpLHU+MCYmKHRoaXMuaG90LnNldENlbGxNZXRhKG8sYSwiYm9yZGVycyIsZ04obCkpLHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKGwsdm9pZCAwKSl9KX0pfXJlbW92ZUFsbEJvcmRlcnMoZSx0KXtjb25zdCByPXVGZShl''@;'; put 'put ''LHQpO3RoaXMuc3BsaWNlQm9yZGVyKHIpLHRoaXMuY2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKHIpLHRoaXMuY2xlYXJOdWxsQ2VsbFJhbmdlKCksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoZSx0LCJib3JkZXJzIil9c2V0Qm9yZGVyKGUsdCxyLGkpe2NvbnN0IG89dGhpcy5o''@;'; put 'put ''b3QuZ2V0Q2VsbE1ldGEoZSx0KS5ib3JkZXJzO2xldCBhO2E9ZnVuY3Rpb24gRUJ0KG4pe3JldHVybiBtRyhuKSYmInN0cmluZyI9PXR5cGVvZiBuLmlkJiYibnVtYmVyIj09dHlwZW9mIG4ucm93JiYibnVtYmVyIj09dHlwZW9mIG4uY29sfShvKT8kMWUobyk6cTFlKGUsdCksaT8oYVtyXT17''@;'; put 'put ''aGlkZTohMH0sND09PXRoaXMuY291bnRIaWRlKGEpP3RoaXMucmVtb3ZlQWxsQm9yZGVycyhlLHQpOih0aGlzLmNoZWNrQ3VzdG9tU2VsZWN0aW9uc0Zyb21Db250ZXh0TWVudShhLHIsaSl8fHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKGEsdm9pZCAwKSx0aGlzLmhvdC5zZXRDZWxs''@;'; put 'put ''TWV0YShlLHQsImJvcmRlcnMiLGdOKGEpKSkpOihhW3JdPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0sdGhpcy5jaGVja0N1c3RvbVNlbGVjdGlvbnNGcm9tQ29udGV4dE1lbnUoYSxyLGkpfHx0aGlzLmluc2VydEJvcmRlckludG9TZXR0aW5ncyhhLHZvaWQgMCksdGhpcy5ob3Quc2V0Q2VsbE1l''@;'; put 'put ''dGEoZSx0LCJib3JkZXJzIixnTihhKSkpfXByZXBhcmVCb3JkZXIoZSx0LHIpe1huKGUsaT0+e2lmKCFoRmUoaS5zdGFydCl8fCFoRmUoaS5lbmQpKXJldHVybjtjb25zdHtzdGFydDpvLGVuZDphfT17c3RhcnQ6aS5zdGFydCxlbmQ6aS5lbmR9O2lmKG8ucm93PT09YS5yb3cmJm8uY29sPT09''@;'; put 'put ''YS5jb2wpIm5vQm9yZGVycyI9PT10P3RoaXMucmVtb3ZlQWxsQm9yZGVycyhvLnJvdyxvLmNvbCk6dGhpcy5zZXRCb3JkZXIoby5yb3csby5jb2wsdCxyKTtlbHNlIHN3aXRjaCh0KXtjYXNlIm5vQm9yZGVycyI6VmEoby5jb2wsYS5jb2wsbD0+e1ZhKG8ucm93LGEucm93LHU9Pnt0aGlzLnJl''@;'; put 'put ''bW92ZUFsbEJvcmRlcnModSxsKX0pfSk7YnJlYWs7Y2FzZSJ0b3AiOlZhKG8uY29sLGEuY29sLGw9Pnt0aGlzLnNldEJvcmRlcihvLnJvdyxsLHQscil9KTticmVhaztjYXNlImJvdHRvbSI6VmEoby5jb2wsYS5jb2wsbD0+e3RoaXMuc2V0Qm9yZGVyKGEucm93LGwsdCxyKX0pO2JyZWFrO2Nh''@;'; put 'put ''c2Uic3RhcnQiOlZhKG8ucm93LGEucm93LGw9Pnt0aGlzLnNldEJvcmRlcihsLG8uY29sLHQscil9KTticmVhaztjYXNlImVuZCI6VmEoby5yb3csYS5yb3csbD0+e3RoaXMuc2V0Qm9yZGVyKGwsYS5jb2wsdCxyKX0pfX0pfWNyZWF0ZUN1c3RvbUJvcmRlcnMoZSl7WG4oZSx0PT57Y29uc3Qg''@;'; put 'put ''cj0kMWUodCk7ci5yYW5nZT90aGlzLnByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWRSYW5nZShyLnJhbmdlLHIpOnRoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZChyLnJvdz8/MCxyLmNvbD8/MCxyLHZvaWQgMCl9KX1jb3VudEhpZGUoZSl7Y29uc3R7dG9wOnQsYm90dG9tOnIs''@;'; put 'put ''c3RhcnQ6aSxlbmQ6b309ZTtyZXR1cm4gbTEoW3QscixpLG9dLChsLHUpPT57bGV0IGc9bDtyZXR1cm4gdSYmdS5oaWRlJiYoZys9MSksZ30sMCl9Y2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKGUpe2NvbnN0IHQ9X2ModGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0''@;'; put 'put ''b21TZWxlY3Rpb25zLHI9PnIuc2V0dGluZ3MuaWQpLmluZGV4T2YoZSk7dD4tMSYmdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zW3RdLmNsZWFyKCl9Y2xlYXJOdWxsQ2VsbFJhbmdlKCl7WG4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21T''@;'; put 'put ''ZWxlY3Rpb25zLChlLHQpPT57aWYobnVsbD09PWUuY2VsbFJhbmdlKXJldHVybiBlLmRlc3Ryb3koKSx0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMuc3BsaWNlKHQsMSksITF9KX1oaWRlQm9yZGVycygpe1huKHRoaXMuc2F2ZWRCb3JkZXJzLGU9Pnt0aGlz''@;'; put 'put ''LmNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhlLmlkKSx0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpfSl9c3BsaWNlQm9yZGVyKGUpe2NvbnN0IHQ9X2ModGhpcy5zYXZlZEJvcmRlcnMscj0+ci5pZCkuaW5kZXhPZihlKTt0Pi0xJiZ0aGlzLnNhdmVkQm9yZGVycy5zcGxpY2Uo''@;'; put 'put ''dCwxKX1jaGVja1NhdmVkQm9yZGVycyhlKXtsZXQgdD0hMTtyZXR1cm4gND09PXRoaXMuY291bnRIaWRlKGUpPyh0aGlzLnNwbGljZUJvcmRlcihlLmlkKSx0PSEwKTpYbih0aGlzLnNhdmVkQm9yZGVycywoaSxvKT0+e2lmKGUuaWQ9PT1pLmlkKXJldHVybiB0aGlzLnNhdmVkQm9yZGVyc1tv''@;'; put 'put ''XT1lLHQ9ITAsITF9KSx0fWNoZWNrQ3VzdG9tU2VsZWN0aW9uc0Zyb21Db250ZXh0TWVudShlLHQscil7bGV0IGk9ITE7cmV0dXJuIFhuKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxhPT57aWYoZS5pZD09PWEuc2V0dGluZ3MuaWQpe2NvbnN0IGw9dGhp''@;'; put 'put ''cy5ob3Qudmlldy5fd3Quc2VsZWN0aW9uTWFuYWdlci5nZXRCb3JkZXJJbnN0YW5jZXMoYSk7cmV0dXJuIGZGZSh0KSYmWG4obCx1PT57dS50b2dnbGVIaWRkZW5DbGFzcyh0LHI/PyExKX0pLGk9ITAsITF9fSksaX1jaGVja0N1c3RvbVNlbGVjdGlvbnMoZSx0LHIpe2NvbnN0IGk9dGhpcy5j''@;'; put 'put ''b3VudEhpZGUoZSk7bGV0IG89ITE7cmV0dXJuIDQ9PT1pPyh0aGlzLnJlbW92ZUFsbEJvcmRlcnMoZS5yb3csZS5jb2wpLG89ITApOlhuKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxhPT57aWYoZS5pZD09PWEuc2V0dGluZ3MuaWQpcmV0dXJuIGEudmlz''@;'; put 'put ''dWFsQ2VsbFJhbmdlPXQsYS5jb21taXQoKSxyJiZmRmUocikmJlhuKHRoaXMuaG90LnZpZXcuX3d0LnNlbGVjdGlvbk1hbmFnZXIuZ2V0Qm9yZGVySW5zdGFuY2VzKGEpLHU9Pnt1LmNoYW5nZUJvcmRlclN0eWxlKHIsZSl9KSxvPSEwLCExfSksb31jaGFuZ2VCb3JkZXJTZXR0aW5ncygpe2Nv''@;'; put 'put ''bnN0IGU9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtnR107aWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3QgdD1BZChlLmZpbHRlcihtRykpO3RoaXMuY2hlY2tTZXR0aW5nc0NvaGVzaW9uKHQpLHQubGVuZ3RofHwodGhpcy5zYXZlZEJvcmRlcnM9W10pLHRoaXMuY3JlYXRlQ3VzdG9tQm9yZGVy''@;'; put 'put ''cyh0KX1lbHNlIHZvaWQgMCE9PWUmJnRoaXMuY3JlYXRlQ3VzdG9tQm9yZGVycyh0aGlzLnNhdmVkQm9yZGVycyl9Y2hlY2tTZXR0aW5nc0NvaGVzaW9uKGUpe2NvbnN0IHQ9ZnVuY3Rpb24gZkJ0KG4pe3JldHVybiBuLnNvbWUoZT0+Wm8oZS5sZWZ0KXx8Wm8oZS5yaWdodCkpfShlKSxyPWZ1''@;'; put 'put ''bmN0aW9uIHBCdChuKXtyZXR1cm4gbi5zb21lKGU9PlpvKGUuc3RhcnQpfHxabyhlLmVuZCkpfShlKTt0JiZyJiZKcignVGhlICJsZWZ0Ii8icmlnaHQiIGFuZCAic3RhcnQiLyJlbmQiIG9wdGlvbnMgc2hvdWxkIG5vdCBiZSB1c2VkIHRvZ2V0aGVyLiBQbGVhc2UgdXNlIG9ubHkgdGhlIG9w''@;'; put 'put ''dGlvbiAic3RhcnQiLyJlbmQiLicpLHRoaXMuaG90LmlzUnRsKCkmJnQmJkpyKCdUaGUgImxlZnQiLyJyaWdodCIgcHJvcGVydGllcyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgUlRMLiBQbGVhc2UgdXNlIG9wdGlvbiAic3RhcnQiLyJlbmQiLicpLEsxZSh0aGlzLGdGZSxUQnQpLmNhbGwodGhp''@;'; put 'put ''cyxlKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLFgxZSh0aGlzLGdGZSksWDFlKHRoaXMsbUZlKSxYMWUodGhpcyx2RmUpLHRoaXMuc2F2ZWRCb3JkZXJzPVtdfX1mdW5jdGlvbiBUQnQobil7bi5mb3JFYWNoKGU9PntPYmplY3Qua2V5''@;'; put 'put ''cyhlKS5mb3JFYWNoKHQ9Pntjb25zdCByPWVbdF07aWYoIW1HKHIpKXJldHVybjtjb25zdHtzdHlsZTppfT1yO1pvKGkpJiYic3RyaW5nIj09dHlwZW9mIGkmJiFwRmUuaW5jbHVkZXMoaSk/KEhhKGBUaGUgIiR7aX0iIGJvcmRlciBzdHlsZSBpcyBub3Qgc3VwcG9ydGVkLiBQbGVhc2UgdXNl''@;'; put 'put ''IG9uZSBvZiB0aGUgZm9sbG93aW5nIHN0eWxlczogJHtwRmUuam9pbigiLCAiKX0uXG5UaGUgYm9yZGVyIHN0eWxlIHdpbGwgYmUgaWdub3JlZC5gKSxkZWxldGUgci5zdHlsZSk6Wm8oaSkmJiJzb2xpZCI9PT1pJiZkZWxldGUgci5zdHlsZX0pfSl9ZnVuY3Rpb24geEJ0KG4pe2lmKCF0aGlz''@;'; put 'put ''LmhvdC5nZXRTZXR0aW5ncygpW2dHXXx8Im9iamVjdCIhPXR5cGVvZiBufHxudWxsPT09bilyZXR1cm47Y29uc3QgZT1uLHtpdGVtczp0fT1lO0FycmF5LmlzQXJyYXkodCkmJnQucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0se2tleToiYm9yZGVycyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRy''@;'; put 'put ''YW5zbGF0ZWRQaHJhc2UoTGNlKX0sZGlzYWJsZWQoKXtjb25zdCByPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO3JldHVybiEociYmIXIuaXNTaW5nbGVIZWFkZXIoKSl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfSxzdWJtZW51OntpdGVtczpbdkJ0KHRoaXMp''@;'; put 'put ''LF9CdCh0aGlzKSx5QnQodGhpcyksYkJ0KHRoaXMpLHdCdCh0aGlzKV19fSl9ZnVuY3Rpb24gQUJ0KCl7dGhpcy5jaGFuZ2VCb3JkZXJTZXR0aW5ncygpfWNvbnN0IG1OPSJkYXRhUHJvdmlkZXIiLFJCdD17cm93SWQ6dm9pZCAwLGZldGNoUm93czp2b2lkIDAsb25Sb3dzQ3JlYXRlOnZvaWQg''@;'; put 'put ''MCxvblJvd3NVcGRhdGU6dm9pZCAwLG9uUm93c1JlbW92ZTp2b2lkIDB9LFExZT17cm93SWQ6bj0+InN0cmluZyI9PXR5cGVvZiBufHxfYShuKSxmZXRjaFJvd3M6bj0+X2Eobiksb25Sb3dzQ3JlYXRlOm49Pl9hKG4pLG9uUm93c1VwZGF0ZTpuPT5fYShuKSxvblJvd3NSZW1vdmU6bj0+X2Eo''@;'; put 'put ''bil9LF9GZT1PYmplY3QuZnJlZXplKHtwYWdlOjEscGFnZVNpemU6MTAsc29ydDpudWxsLGZpbHRlcnM6bnVsbH0pLHlGZT1uZXcgU2V0KFsiZWRpdCIsdm9pZCAwLCJDb3B5UGFzdGUucGFzdGUiLCJDb3B5UGFzdGUuY3V0IiwiQXV0b2ZpbGwuZmlsbCIsIkNvbnRleHRNZW51LmNsZWFyQ29s''@;'; put 'put ''dW1uIiwiRGF0YVByb3ZpZGVyLnJldmVydCJdKSxiRmU9IkRhdGFQcm92aWRlcjogY2Fubm90IHNlbmQgcm93IHVwZGF0ZSBiZWNhdXNlIGByb3dJZGAgcmVzb2x2ZXMgdG8gbnVsbCBvciB1bmRlZmluZWQgZm9yIHRoYXQgcm93LiI7ZnVuY3Rpb24gREJ0KG4pe3JldHVybmBEYXRhUHJvdmlk''@;'; put 'put ''ZXI6IGNhbm5vdCByZW1vdmUgcm93IGF0IHZpc3VhbCBpbmRleCAke259IGJlY2F1c2UgXGByb3dJZFxgIHJlc29sdmVzIHRvIG51bGwgb3IgdW5kZWZpbmVkLmB9ZnVuY3Rpb24gSjFlKG4sZSx0KXtpZighMT09PW4ucnVuSG9va3MoImJlZm9yZVJvd3NNdXRhdGlvbiIsZSx0KSlyZXR1cm4h''@;'; put 'put ''MX1mdW5jdGlvbiB3RmUobixlLHQpe24ucnVuSG9va3MoImFmdGVyUm93c011dGF0aW9uIixlLHQpfWZ1bmN0aW9uIFFUKG4sZSx0LHIpe24ucnVuSG9va3MoImFmdGVyUm93c011dGF0aW9uRXJyb3IiLGUsdCxyKX1mdW5jdGlvbiBfRyhuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIEZCdChuLGUp''@;'; put 'put ''e2lmKG51bGwhPWUpe2lmKF9hKGUpKXJldHVybiBlKG4pO2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gc0wobixlKX19KG4uZ2V0U291cmNlRGF0YUF0Um93KG4udG9QaHlzaWNhbFJvdyh0KSksZSl9ZnVuY3Rpb24geUcobil7cmV0dXJuIG51bGw9PW59ZnVuY3Rpb24gQ0ZlKG4sZSx0''@;'; put 'put ''KXtmb3IobGV0IHI9MDtyPG4uY291bnRSb3dzKCk7cis9MSlpZihfRyhuLGUscik9PT10KXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIFNGZShuLGUsdCl7Y29uc3Qgcj1PYmplY3QuZW50cmllcyh0KTtyZXR1cm4gMD09PXIubGVuZ3RoP1Byb21pc2UucmVzb2x2ZSghMCk6bmV3IFByb21p''@;'; put 'put ''c2UoaT0+e2xldCBvPXIubGVuZ3RoLGE9ITA7Y29uc3QgbD0oKT0+e28tPTEsMD09PW8mJmkoYSl9O3IuZm9yRWFjaCgoW3UsZ10pPT57Y29uc3QgRT1uLnByb3BUb0NvbCh1KTtpZih2b2lkIDA9PT1FfHxFPDApcmV0dXJuIHZvaWQgbCgpO2NvbnN0IE89bi5nZXRDZWxsTWV0YShlLEUpO24u''@;'; put 'put ''Z2V0Q2VsbFZhbGlkYXRvcihPKT9uLnZhbGlkYXRlQ2VsbChnLE8sWj0+eyExPT09WiYmITE9PT1PLmFsbG93SW52YWxpZCYmKGE9ITEpLGwoKX0sIkRhdGFQcm92aWRlci51cGRhdGVSb3dzIik6bCgpfSl9KX1mdW5jdGlvbiBlMGUoKXtyZXR1cm4gZTBlPUNyKGZ1bmN0aW9uKihuLGUsdCxy''@;'; put 'put ''PXt9KXtjb25zdCBpPWUuZ2V0T25Sb3dzVXBkYXRlKCk7aWYoIV9hKGkpKXJldHVybjtjb25zdCBvPXtyb3dzOnR9LHtyZXZlcnRPcHRpbWlzdGljOmF9PXIse29uUmVxdWVzdEZhaWxlZDpsfT1lO3RyeXt5aWVsZCBpKHQpfWNhdGNoKHUpe3JldHVybiBRVChuLCJ1cGRhdGUiLHUsbyksZS5s''@;'; put 'put ''b2dFcnJvcigiUm93IHVwZGF0ZSBmYWlsZWQ6Iix1KSxfYShhKSYmYSgpLG4ucmVuZGVyKCksdm9pZCBsPy4oInVwZGF0ZSIsdSl9dHJ5e3dGZShuLCJ1cGRhdGUiLG8pLHlpZWxkIGUuZmV0Y2hEYXRhKCl9Y2F0Y2godSl7UVQobiwidXBkYXRlIix1LG8pLGUubG9nRXJyb3IoIkRhdGEgcmVs''@;'; put 'put ''b2FkIGZhaWxlZDoiLHUpLF9hKGEpJiZhKCksbi5yZW5kZXIoKX19KSxlMGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHQwZSgpe3JldHVybiB0MGU9Q3IoZnVuY3Rpb24qKG4sZSx0KXtjb25zdHtnZXRSb3dJZE9wdGlvbjpyLGNvbW1pdFJvd3NVcGRhdGU6aX09ZSxvPXtyb3dz''@;'; put 'put ''OnR9O2lmKCExPT09SjFlKG4sInVwZGF0ZSIsbykpcmV0dXJuO2NvbnN0IGE9cigpO2lmKCh5aWVsZCBQcm9taXNlLmFsbCh0Lm1hcChmdW5jdGlvbigpe3ZhciB1PUNyKGZ1bmN0aW9uKihnKXtjb25zdCBFPUNGZShuLGEsZy5pZCk7cmV0dXJuIEU8MHx8U0ZlKG4sRSxnLmNoYW5nZXM/P3t9''@;'; put 'put ''KX0pO3JldHVybiBmdW5jdGlvbihnKXtyZXR1cm4gdS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSkpLnNvbWUodT0+IXUpKXJldHVybiBRVChuLCJ1cGRhdGUiLG5ldyBFcnJvcigiUm93IHVwZGF0ZSB2YWxpZGF0aW9uIGZhaWxlZCIpLG8pLHZvaWQgbTcoIlJvdyB1cGRhdGUgZmFpbGVk''@;'; put 'put ''OiB2YWxpZGF0aW9uIGZhaWxlZCBmb3Igb25lIG9yIG1vcmUgY2VsbHMiKTt5aWVsZCBpKHQpfSksdDBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBuMGUoKXtyZXR1cm4gbjBlPUNyKGZ1bmN0aW9uKihuLGUsdCl7Y29uc3R7Z2V0Um93SWRPcHRpb246cixjb21taXRSb3dzVXBk''@;'; put 'put ''YXRlOml9PWUsbz1uZXcgTWFwO3QuZm9yRWFjaChaPT57Y29uc3QgZWU9WlswXTtvLmhhcyhlZSl8fG8uc2V0KGVlLFtdKSxvLmdldChlZSkucHVzaChaKX0pO2NvbnN0IGE9Wy4uLm8ua2V5cygpXS5zb3J0KChaLGVlKT0+Wi1lZSksbD1yKCksdT1hLm1hcChaPT57Y29uc3R7Y2hhbmdlc09i''@;'; put 'put ''ajplZSxyb3dEYXRhOnZlfT1mdW5jdGlvbiBIQnQobixlKXtjb25zdCByPW4uZ2V0U291cmNlRGF0YUF0Um93KG4udG9QaHlzaWNhbFJvdyhlWzBdWzBdKSksaT1yJiYib2JqZWN0Ij09dHlwZW9mIHImJiFBcnJheS5pc0FycmF5KHIpLG89e307bGV0IGE7cmV0dXJuIGUuZm9yRWFjaCgoWyxs''@;'; put 'put ''LCx1XSk9Pntjb25zdCBnPSJudW1iZXIiPT10eXBlb2YgbD9sOm4ucHJvcFRvQ29sKGwpLEU9aT9uLmNvbFRvUHJvcChnKTpnO29bRV09dX0pLEFycmF5LmlzQXJyYXkocik/KGE9Wy4uLnJdLGUuZm9yRWFjaCgoWyxsLCx1XSk9Pntjb25zdCBnPSJudW1iZXIiPT10eXBlb2YgbD9sOm4ucHJv''@;'; put 'put ''cFRvQ29sKGwpO2FbZ109dX0pKTphPWk/ey4uLnIsLi4ub306ey4uLm99LHtjaGFuZ2VzT2JqOm8scm93RGF0YTphfX0obixvLmdldChaKSk7cmV0dXJue2lkOl9HKG4sbCxaKSxjaGFuZ2VzOmVlLHJvd0RhdGE6dmV9fSksZz17cm93czp1fSxFPSgpPT5mdW5jdGlvbiBWQnQobixlKXtlPy5s''@;'; put 'put ''ZW5ndGgmJm4uYmF0Y2goKCk9PntlLmZvckVhY2goKFt0LHIsaV0pPT57bi5zZXREYXRhQXRSb3dQcm9wKHQscixpLCJEYXRhUHJvdmlkZXIucmV2ZXJ0Iil9KX0pfShuLHQpO3JldHVybiB1LnNvbWUoWj0+eUcoWi5pZCkpPyhFKCksUVQobiwidXBkYXRlIixuZXcgRXJyb3IoYkZlKSxnKSxt''@;'; put 'put ''NygiUm93IHVwZGF0ZSBmYWlsZWQ6IixiRmUpLHZvaWQgbi5yZW5kZXIoKSk6ITEhPT1KMWUobiwidXBkYXRlIixnKT8oeWllbGQgUHJvbWlzZS5hbGwoYS5tYXAoKFosZWUpPT5TRmUobixaLHVbZWVdLmNoYW5nZXMpKSkpLnNvbWUoWj0+IVopPyhFKCksUVQobiwidXBkYXRlIixuZXcgRXJy''@;'; put 'put ''b3IoIlJvdyB1cGRhdGUgdmFsaWRhdGlvbiBmYWlsZWQiKSxnKSxtNygiUm93IHVwZGF0ZSBmYWlsZWQ6IHZhbGlkYXRpb24gZmFpbGVkIGZvciBvbmUgb3IgbW9yZSBjZWxscyIpLHZvaWQgbi5yZW5kZXIoKSk6dm9pZCh5aWVsZCBpKHUse3JldmVydE9wdGltaXN0aWM6RX0pKTp2b2lkIEUo''@;'; put 'put ''KX0pLG4wZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcUJ0KG4sZSx0LHIpe3JldHVybiJpbnNlcnRfcm93X2Fib3ZlIj09PWV8fCJpbnNlcnRfcm93X2JlbG93Ij09PWU/ZnVuY3Rpb24gR0J0KG4sZSx0LHIpe2NvbnN0e2hvdDppLGdldE9uUm93c0NyZWF0ZTpvLGdldFJvd0lk''@;'; put 'put ''OmEsY3JlYXRlUm93czpsfT1uO2lmKCFfYShvKCkpKXJldHVybjtjb25zdCB1PWkuY291bnRTb3VyY2VSb3dzKCk7aWYoaS5nZXRTZXR0aW5ncygpLm1heFJvd3M9PT11KXJldHVybjtjb25zdCBnPSJpbnNlcnRfcm93X2JlbG93Ij09PWU/ImJlbG93IjoiYWJvdmUiLEU9dD8/KCJiZWxvdyI9''@;'; put 'put ''PT1nP3U6MCk7cmV0dXJuIGwoe3Bvc2l0aW9uOmcscmVmZXJlbmNlUm93SWQ6Im51bWJlciI9PXR5cGVvZiBFJiZFPj0wP2EoRSk6dm9pZCAwLHJvd3NBbW91bnQ6Im51bWJlciI9PXR5cGVvZiByJiZyPj0xP3I6MX0pLCExfShuLGUsdCxyKToicmVtb3ZlX3JvdyI9PT1lP2Z1bmN0aW9uICRC''@;'; put 'put ''dChuLGUsdCl7Y29uc3R7aG90OnIsZ2V0T25Sb3dzUmVtb3ZlOmksZ2V0Um93SWRPcHRpb246byxyZW1vdmVSb3dzOmF9PW47aWYoIV9hKGkoKSkpcmV0dXJuO2NvbnN0IGw9ZnVuY3Rpb24gUEJ0KG4sZSx0LHIpe2NvbnN0IGk9W10sbz0oKT0+bi5jb3VudFJvd3MoKSxhPShsLHUpPT57Zm9y''@;'; put 'put ''KGxldCBnPTA7Zzx1O2crPTEpe2NvbnN0IEU9bCtnO2lmKEU+PTAmJkU8bygpKXtjb25zdCBPPV9HKG4sZSxFKTt5RyhPKSYmSnIoREJ0KEUpKSxpLnB1c2goTyl9fX07aWYoQXJyYXkuaXNBcnJheSh0KSl0LmZvckVhY2goKFtsLHVdKT0+e2NvbnN0IGc9bnVsbD09bD9NYXRoLm1heCgwLG8o''@;'; put 'put ''KS0odT8/MSkpOk1hdGgubWF4KDAsbCk7YShnLHU/PzEpfSk7ZWxzZXtjb25zdCBsPSJudW1iZXIiPT10eXBlb2YgciYmcj49MT9yOjEsdT1udWxsPT10P01hdGgubWF4KDAsbygpLWwpOk1hdGgubWF4KDAsdCk7YSh1LGwpfXJldHVybiBpfShyLG8oKSxlLHQpO3JldHVybiAwIT09bC5sZW5n''@;'; put 'put ''dGg/KGEobCksITEpOnZvaWQgMH0obix0LHIpOnZvaWQgMH1mdW5jdGlvbiBYQnQobil7cmV0dXJuIG51bGw9PT1uP251bGw6bi5tYXAoZT0+KHtwcm9wOmUucHJvcCxvcGVyYXRpb246ZS5vcGVyYXRpb24sY29uZGl0aW9uczooZS5jb25kaXRpb25zfHxbXSkubWFwKHQ9Pih7bmFtZTp0Lm5h''@;'; put 'put ''bWUsYXJnczpBcnJheS5pc0FycmF5KHQuYXJncyk/Wy4uLnQuYXJnc106W119KSl9KSl9ZnVuY3Rpb24gRUZlKG4sZSl7aWYoIUFycmF5LmlzQXJyYXkoZSl8fDA9PT1lLmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCB0PVtdO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKXtjb25zdCBpPWVb''@;'; put 'put ''cl0sbz1uLnRvVmlzdWFsQ29sdW1uKGkuY29sdW1uKSxhPW4uY29sVG9Qcm9wKG8pO251bGwhPWEmJnQucHVzaCh7cHJvcDpTdHJpbmcoYSksb3BlcmF0aW9uOmkub3BlcmF0aW9uLGNvbmRpdGlvbnM6aS5jb25kaXRpb25zLm1hcChsPT4oe25hbWU6bC5uYW1lLGFyZ3M6QXJyYXkuaXNBcnJh''@;'; put 'put ''eShsLmFyZ3MpP1suLi5sLmFyZ3NdOltdfSkpfSl9cmV0dXJuIDA9PT10Lmxlbmd0aD9udWxsOnR9Y29uc3Qgdk49InBhZ2luYXRpb24iO2NvbnN0IE1GZT0iY29sdW1uU29ydGluZyI7ZnVuY3Rpb24gSlQobixlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2NvbnN0IHQ9ZS50cmltKCk7dCYm''@;'; put 'put ''bi5wdXNoKHQpfX1mdW5jdGlvbiBURmUobixlKXtpZighbnx8Im9iamVjdCIhPXR5cGVvZiBufHxBcnJheS5pc0FycmF5KG4pKXJldHVybjtjb25zdCB0PW47SlQoZSx0Lm1lc3NhZ2UpLEpUKGUsdC5lcnJvciksInN0cmluZyI9PXR5cGVvZiB0LmRldGFpbCYmSlQoZSx0LmRldGFpbCl9ZnVu''@;'; put 'put ''Y3Rpb24geEZlKG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBBRmUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJhdHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQobil9ZnVuY3Rpb24gRXUobixlKXtyZXR1cm4gZnVuY3Rpb24gX2p0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obixBRmUobixlLCJnZXQiKSl9''@;'; put 'put ''ZnVuY3Rpb24gcmcobixlLHQpe3hGZShuLGUpLGUuc2V0KG4sdCl9ZnVuY3Rpb24gWDEobixlLHQpe3JldHVybiBmdW5jdGlvbiB5anQobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBz''@;'; put 'put ''ZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLEFGZShuLGUsInNldCIpLHQpLHR9ZnVuY3Rpb24gTHMobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7''@;'; put 'put ''cmV0dXJuIHR9ZnVuY3Rpb24gczIobixlKXt4RmUobixlKSxlLmFkZChuKX1zT2UoImRhdGFQcm92aWRlciIsWyJtYW51YWxSb3dNb3ZlIiwibWFudWFsQ29sdW1uTW92ZSIsInRyaW1Sb3dzIiwibXVsdGlDb2x1bW5Tb3J0aW5nIl0pO3ZhciBLMj1uZXcgV2Vha01hcCxfNj1uZXcgV2Vha01h''@;'; put 'put ''cCxyMGU9bmV3IFdlYWtNYXAsZXg9bmV3IFdlYWtTZXQsdHg9bmV3IFdlYWtTZXQsX049bmV3IFdlYWtTZXQsaTBlPW5ldyBXZWFrU2V0LHlOPW5ldyBXZWFrU2V0LG8wZT1uZXcgV2Vha1NldCxueD1uZXcgV2Vha1NldCxhMGU9bmV3IFdlYWtTZXQsa0ZlPW5ldyBXZWFrU2V0LFJGZT1uZXcg''@;'; put 'put ''V2Vha1NldCxJRmU9bmV3IFdlYWtTZXQsczBlPW5ldyBXZWFrU2V0LGwwZT1uZXcgV2Vha1NldCxiRz1uZXcgV2Vha1NldCx3Rz1uZXcgV2Vha1NldCxjMGU9bmV3IFdlYWtTZXQsdTBlPW5ldyBXZWFrU2V0LENHPW5ldyBXZWFrTWFwLGQwZT1uZXcgV2Vha01hcCxoMGU9bmV3IFdlYWtNYXAs''@;'; put 'put ''ZjBlPW5ldyBXZWFrTWFwLHAwZT1uZXcgV2Vha01hcCxnMGU9bmV3IFdlYWtNYXAsbTBlPW5ldyBXZWFrTWFwLHYwZT1uZXcgV2Vha01hcCxfMGU9bmV3IFdlYWtNYXAseTBlPW5ldyBXZWFrTWFwO2NsYXNzIGJqdCBleHRlbmRzIGFse3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBt''@;'; put 'put ''Tn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA5NTB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bbU5dfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybiBSQnR9c3RhdGljIGdldCBTRVRUSU5HU19WQUxJREFUT1JTKCl7cmV0dXJuIFExZX1p''@;'; put 'put ''c0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbbU5dfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KExzKHRoaXMsYTBlLE9GZSkuY2FsbCh0aGlzKSx0aGlzLmFkZEhvb2soImhhc0V4dGVybmFsRGF0YVNvdXJjZSIsRXUodGhpcyxDRykpLHRoaXMuYWRkSG9v''@;'; put 'put ''aygiYWZ0ZXJJbml0IixFdSh0aGlzLGQwZSkpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVhZGVyIixFdSh0aGlzLG0wZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uU29ydCIsRXUodGhpcyxnMGUpKSx0aGlzLmFkZEhvb2soImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsRXUodGhpcyx2''@;'; put 'put ''MGUpKSx0aGlzLmFkZEhvb2soImFmdGVyQ2hhbmdlIixFdSh0aGlzLF8wZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQWx0ZXIiLEV1KHRoaXMseTBlKSksdGhpcy5hZGRIb29rKCJhZnRlclBhZ2VDaGFuZ2UiLEV1KHRoaXMsaDBlKSksdGhpcy5hZGRIb29rKCJhZnRlclBhZ2VTaXplQ2hhbmdl''@;'; put 'put ''IixFdSh0aGlzLGYwZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlRmlsdGVyIixFdSh0aGlzLHAwZSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuaG90LnZpZXcmJnRoaXMuZmV0Y2hEYXRh''@;'; put 'put ''KCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe0xzKHRoaXMsbDBlLEZGZSkuY2FsbCh0aGlzKSxYMSh0aGlzLEsyLHsuLi5fRmV9KSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Z2V0UXVlcnlQYXJhbWV0ZXJzKCl7cmV0dXJuIExzKHRoaXMsbngsQ04pLmNhbGwodGhpcyxF''@;'; put 'put ''dSh0aGlzLEsyKSl9Z2V0Um93SWQoZSl7cmV0dXJuIF9HKHRoaXMuaG90LExzKHRoaXMsdHgsd04pLmNhbGwodGhpcyksZSl9ZmV0Y2hEYXRhKCl7dmFyIGU9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKHQ9e30pe2NvbnN0IHI9THMoZSxfTixTRykuY2FsbChlKTtpZighX2EocikpcmV0dXJu''@;'; put 'put ''IGUuaG90LnJlbmRlcigpLG51bGw7Y29uc3QgaT1McyhlLFJGZSxDanQpLmNhbGwoZSx0KSxvPUxzKGUsSUZlLFNqdCkuY2FsbChlKSx7c2lnbmFsOmF9PW87aWYoITE9PT1lLmhvdC5ydW5Ib29rcygiYmVmb3JlRGF0YVByb3ZpZGVyRmV0Y2giLGkpKXJldHVybiBYMShlLF82LG51bGwpLGUu''@;'; put 'put ''aG90LnJlbmRlcigpLG51bGw7Y29uc3QgbD1McyhlLG54LENOKS5jYWxsKGUsaSk7dHJ5e2NvbnN0IHU9eWllbGQgcihsLHtzaWduYWw6YX0pO2lmKGEuYWJvcnRlZClyZXR1cm4gTHMoZSxzMGUsTkZlKS5jYWxsKGUsaSx2b2lkIDApLG51bGw7Y29uc3QgZz1BcnJheS5pc0FycmF5KHU/LnJv''@;'; put 'put ''d3MpP3Uucm93czpbXSxFPSJudW1iZXIiPT10eXBlb2YgdT8udG90YWxSb3dzJiZ1LnRvdGFsUm93cz49MD91LnRvdGFsUm93czpnLmxlbmd0aCxPPUxzKGUsbngsQ04pLmNhbGwoZSxpKSxaPWZ1bmN0aW9uIHZqdChuLGUsdCl7Y29uc3QgaT1NYXRoLm1heCgxLE1hdGguY2VpbCh0LygibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIGUmJmU+PTE/ZToxMCkpKTtyZXR1cm4gTWF0aC5tYXgoMSxNYXRoLm1pbihuLGkpKX0oTy5wYWdlLE8ucGFnZVNpemUsRSk7aWYoWiE9PU8ucGFnZSlyZXR1cm4gZS5mZXRjaERhdGEoey4uLnQscGFnZTpaLHNraXBMb2FkaW5nOnQuc2tpcExvYWRpbmd9KTtYMShlLEsy''@;'; put 'put ''LE8pLGUuaG90LmxvYWREYXRhKGcsbU4pO2NvbnN0IGVlPWZ1bmN0aW9uIGhqdChuLGUpe2NvbnN0IHQ9ZnVuY3Rpb24gbGp0KG4sZSl7aWYobnVsbD09bnx8Im9iamVjdCIhPXR5cGVvZiBuKXJldHVybiBudWxsO2lmKCJzdHJpbmciIT10eXBlb2Ygbi5wcm9wKXJldHVybiBudWxsO2NvbnN0''@;'; put 'put ''IHI9bi5vcmRlcj8/bi5zb3J0T3JkZXI7aWYoImFzYyIhPT1yJiYiZGVzYyIhPT1yfHwiZnVuY3Rpb24iIT10eXBlb2YgZSlyZXR1cm4gbnVsbDtjb25zdCBpPWUobi5wcm9wKTtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIGk/bnVsbDp7Y29sdW1uOmksc29ydE9yZGVyOnJ9fShlLHI9Pm4ucHJv''@;'; put 'put ''cFRvQ29sKHIpKTtyZXR1cm4gdCYmIm9iamVjdCI9PXR5cGVvZiB0JiYiY29sdW1uImluIHQ/dDpbXX0oZS5ob3QsTy5zb3J0Pz9udWxsKSx2ZT1mdW5jdGlvbiBRQnQobixlKXtpZihudWxsPT1lKXJldHVybltdO2lmKCFBcnJheS5pc0FycmF5KGUpfHwwPT09ZS5sZW5ndGgpcmV0dXJuW107''@;'; put 'put ''Y29uc3QgdD1bXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7Y29uc3QgaT1lW3JdLG89bi5wcm9wVG9Db2woaS5wcm9wKTtpZihudWxsPT1vfHxvPDApY29udGludWU7Y29uc3QgYT1uLnRvUGh5c2ljYWxDb2x1bW4obyk7dC5wdXNoKHtjb2x1bW46YSxvcGVyYXRpb246aS5vcGVyYXRp''@;'; put 'put ''b24sY29uZGl0aW9uczooaS5jb25kaXRpb25zfHxbXSkubWFwKGw9Pih7bmFtZTpsLm5hbWU/PyIiLGFyZ3M6QXJyYXkuaXNBcnJheShsLmFyZ3MpP1suLi5sLmFyZ3NdOltdfSkpfSl9cmV0dXJuIHR9KGUuaG90LE8uZmlsdGVycz8/bnVsbCk7cmV0dXJuIGUuaG90LnJ1bkhvb2tzKCJhZnRl''@;'; put 'put ''ckRhdGFQcm92aWRlckZldGNoIix7Li4udSxyb3dzOmcsdG90YWxSb3dzOkUscXVlcnlQYXJhbWV0ZXJzOk8sY29sdW1uU29ydENvbmZpZzplZSxmaWx0ZXJzQ29uZGl0aW9uc1N0YWNrOnZlfSksZS5ob3QucmVuZGVyKCkse3Jvd3M6Zyx0b3RhbFJvd3M6RX19Y2F0Y2godSl7aWYoYS5hYm9y''@;'; put 'put ''dGVkfHx1IGluc3RhbmNlb2YgRXJyb3ImJiJBYm9ydEVycm9yIj09PXUubmFtZSlyZXR1cm4gTHMoZSxzMGUsTkZlKS5jYWxsKGUsaSx1KSxudWxsO3Rocm93IGUuaG90LnJ1bkhvb2tzKCJhZnRlckRhdGFQcm92aWRlckZldGNoRXJyb3IiLHUsTHMoZSxueCxDTikuY2FsbChlLGkpKSxMcyhl''@;'; put 'put ''LHdHLHcwZSkuY2FsbChlLCJmZXRjaCIsdSksdX1maW5hbGx5e0V1KGUsXzYpPT09byYmWDEoZSxfNixudWxsKX19KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y3JlYXRlUm93cygpe3ZhciBlPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKih0PXt9KXtjb25zdCByPUxzKGUsaTBlLERGZSkuY2Fs''@;'; put 'put ''bChlKTtpZighX2EocikpcmV0dXJuO2NvbnN0IGk9e3Bvc2l0aW9uOnQucG9zaXRpb24/PyJiZWxvdyIscmVmZXJlbmNlUm93SWQ6dC5yZWZlcmVuY2VSb3dJZCxyb3dzQW1vdW50OnQucm93c0Ftb3VudD8/MX0sbz17cm93c0NyZWF0ZTppfTtyZXR1cm4gTHMoZSx1MGUsSEZlKS5jYWxsKGUs''@;'; put 'put ''ImNyZWF0ZSIsbywoKT0+UHJvbWlzZS5yZXNvbHZlKHIoaSkpLENyKGZ1bmN0aW9uKigpe3lpZWxkIGUuZmV0Y2hEYXRhKHtza2lwTG9hZGluZzohMH0pfSkpfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJlbW92ZVJvd3MoZSl7dmFyIHQ9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7Y29u''@;'; put 'put ''c3Qgcj1Mcyh0LG8wZSxMRmUpLmNhbGwodCk7aWYoIV9hKHIpKXJldHVybjtjb25zdCBpPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07aS5mb3JFYWNoKGE9Pnt5RyhhKSYmSnIoIkRhdGFQcm92aWRlcjogYHJlbW92ZVJvd3NgIHJlcXVpcmVzIGV2ZXJ5IGlkIHRvIGJlIG5vbi1udWxsLiIpfSk7''@;'; put 'put ''Y29uc3Qgbz17cm93c1JlbW92ZTppfTtyZXR1cm4gTHModCx1MGUsSEZlKS5jYWxsKHQsInJlbW92ZSIsbywoKT0+cihpKSxDcihmdW5jdGlvbiooKXtjb25zdCBhPUV1KHQsSzIpLnBhZ2UsbD10LmhvdC5jb3VudFJvd3MoKTsoaS5sZW5ndGg+PWwmJmw+PTEmJmE+MXx8MD09PSh5aWVsZCB0''@;'; put 'put ''LmZldGNoRGF0YSh7c2tpcExvYWRpbmc6ITB9KSk/LnJvd3MubGVuZ3RoJiZhPjEpJiYoeWllbGQgdC5mZXRjaERhdGEoe3BhZ2U6YS0xLHNraXBMb2FkaW5nOiEwfSkpfSkpfSkoKX11cGRhdGVSb3dzKGUpe3ZhciB0PXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe2lmKCFfYShMcyh0LHlO''@;'; put 'put ''LEVHKS5jYWxsKHQpKXx8IUFycmF5LmlzQXJyYXkoZSl8fDA9PT1lLmxlbmd0aClyZXR1cm47ZS5mb3JFYWNoKGk9Pnt5RyhpLmlkKSYmSnIoIkRhdGFQcm92aWRlcjogYHVwZGF0ZVJvd3NgIHJlcXVpcmVzIGV2ZXJ5IGVudHJ5IHRvIGluY2x1ZGUgYSBub24tbnVsbCBgaWRgLiIpfSk7Y29u''@;'; put 'put ''c3Qgcj1mdW5jdGlvbiBVQnQobixlLHQpe3JldHVybiB0Lm1hcChyPT57Y29uc3QgaT1DRmUobixlLHIuaWQpO2xldCBvO3JldHVybiBvPWk+PTA/bi5nZXRTb3VyY2VEYXRhQXRSb3cobi50b1BoeXNpY2FsUm93KGkpKTp2b2lkIDAhPT1yLnJvd0RhdGE/ci5yb3dEYXRhOnt9LHtpZDpyLmlk''@;'; put 'put ''LGNoYW5nZXM6ci5jaGFuZ2VzLHJvd0RhdGE6byYmIm9iamVjdCI9PXR5cGVvZiBvP286e319fSl9KHQuaG90LExzKHQsdHgsd04pLmNhbGwodCksZSk7cmV0dXJuIExzKHQsYkcsYjBlKS5jYWxsKHQsKCk9PmZ1bmN0aW9uIFdCdChuLGUsdCl7cmV0dXJuIHQwZS5hcHBseSh0aGlzLGFyZ3Vt''@;'; put 'put ''ZW50cyl9KHQuaG90LHtnZXRSb3dJZE9wdGlvbjooKT0+THModCx0eCx3TikuY2FsbCh0KSxjb21taXRSb3dzVXBkYXRlOmk9PkxzKHQsYzBlLFBGZSkuY2FsbCh0LGkpfSxyKSl9KSgpfWRlc3Ryb3koKXtMcyh0aGlzLGwwZSxGRmUpLmNhbGwodGhpcyksc3VwZXIuZGVzdHJveSgpfWNvbnN0''@;'; put 'put ''cnVjdG9yKGUpe3ZhciB0O3N1cGVyKGUpLHQ9dGhpcyxzMih0aGlzLGV4KSxzMih0aGlzLHR4KSxzMih0aGlzLF9OKSxzMih0aGlzLGkwZSksczIodGhpcyx5TiksczIodGhpcyxvMGUpLHMyKHRoaXMsbngpLHMyKHRoaXMsYTBlKSxzMih0aGlzLGtGZSksczIodGhpcyxSRmUpLHMyKHRoaXMs''@;'; put 'put ''SUZlKSxzMih0aGlzLHMwZSksczIodGhpcyxsMGUpLHMyKHRoaXMsYkcpLHMyKHRoaXMsd0cpLHMyKHRoaXMsYzBlKSxzMih0aGlzLHUwZSkscmcodGhpcyxLMix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSkscmcodGhpcyxfNix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSkscmcodGhp''@;'; put 'put ''cyxyMGUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHJnKHRoaXMsQ0cse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHJnKHRoaXMsZDBlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxyZyh0aGlzLGgwZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSkscmcodGhpcyxmMGUs''@;'; put 'put ''e3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHJnKHRoaXMscDBlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxyZyh0aGlzLGcwZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSkscmcodGhpcyxtMGUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHJnKHRoaXMsdjBlLHt3cml0''@;'; put 'put ''YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxyZyh0aGlzLF8wZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSkscmcodGhpcyx5MGUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFgxKHRoaXMsSzIsey4uLl9GZX0pLFgxKHRoaXMsXzYsbnVsbCksWDEodGhpcyxyMGUse3RhaWw6UHJvbWlz''@;'; put 'put ''ZS5yZXNvbHZlKCl9KSxYMSh0aGlzLENHLCgpPT5mdW5jdGlvbiBwanQobil7aWYoIW58fCJvYmplY3QiIT10eXBlb2Ygbnx8QXJyYXkuaXNBcnJheShuKSlyZXR1cm4hMTtjb25zdCBlPW47cmV0dXJuIE9iamVjdC5rZXlzKFExZSkuZXZlcnkodD0+UTFlW3RdKGVbdF0pKX0odGhpcy5ob3Qu''@;'; put 'put ''Z2V0U2V0dGluZ3MoKS5kYXRhUHJvdmlkZXIpKSxYMSh0aGlzLGQwZSwoKT0+e3RoaXMuZmV0Y2hEYXRhKCl9KSxYMSh0aGlzLGgwZSwocixpKT0+e3ZhciBvOyFmdW5jdGlvbiBvanQobixlLHQpe2NvbnN0e2hvdDpyLGdldFF1ZXJ5UGFnZTppLGdvVG9QYWdlOm99PW47ci5nZXRQbHVnaW4o''@;'; put 'put ''dk4pPy5lbmFibGVkJiZ0IT09aSgpJiZvKHQpLmNhdGNoKCgpPT57Y29uc3QgbD1yLmdldFBsdWdpbih2Tik7bD8uZW5hYmxlZCYmbC5yZXZlcnRQYWdlVG8oZSl9KX0oe2hvdDp0aGlzLmhvdCxnZXRRdWVyeVBhZ2U6KCk9PkV1KHRoaXMsSzIpLnBhZ2UsZ29Ub1BhZ2U6KG89Q3IoZnVuY3Rp''@;'; put 'put ''b24qKGEpe3lpZWxkIHQuZmV0Y2hEYXRhKHtwYWdlOmF9KX0pLGZ1bmN0aW9uKGwpe3JldHVybiBvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSxyLGkpfSksWDEodGhpcyxmMGUsKHIsaSk9Pnt2YXIgbzshZnVuY3Rpb24gYWp0KG4sZSx0KXtjb25zdHtob3Q6cixnZXRRdWVyeVBhZ2U6aSxn''@;'; put 'put ''ZXRRdWVyeVBhZ2VTaXplOm8sc2V0UGFnZVNpemU6YX09bjtpZighci5nZXRQbHVnaW4odk4pPy5lbmFibGVkKXJldHVybjtjb25zdCB1PWZ1bmN0aW9uIG5qdChuLGUpe3JldHVybiJhdXRvIj09PW58fCJudW1iZXIiIT10eXBlb2Ygbnx8IU51bWJlci5pc0Zpbml0ZShuKXx8bjwxP2U6bn0o''@;'; put 'put ''dCwxMCk7dT09PW8oKSYmMT09PWkoKXx8YSh1KS5jYXRjaCgoKT0+e2NvbnN0IGc9ci5nZXRQbHVnaW4odk4pO2c/LmVuYWJsZWQmJmcucmV2ZXJ0UGFnZVNpemVUbyhlKX0pfSh7aG90OnRoaXMuaG90LGdldFF1ZXJ5UGFnZTooKT0+RXUodGhpcyxLMikucGFnZSxnZXRRdWVyeVBhZ2VTaXpl''@;'; put 'put ''OigpPT5FdSh0aGlzLEsyKS5wYWdlU2l6ZSxzZXRQYWdlU2l6ZToobz1DcihmdW5jdGlvbiooYSl7eWllbGQgdC5mZXRjaERhdGEoe3BhZ2VTaXplOmEscGFnZToxfSl9KSxmdW5jdGlvbihsKXtyZXR1cm4gby5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0scixpKX0pLFgxKHRoaXMscDBlLHI9''@;'; put 'put ''PmZ1bmN0aW9uIGVqdChuLGUpe2NvbnN0e2hvdDp0LGhhc0ZldGNoRm46cixhcHBseUZpbHRlcnNBbmRSZWZldGNoOml9PW47aWYocigpKXJldHVybiBpKEVGZSh0LGUpKSwhMX0oe2hvdDp0aGlzLmhvdCxoYXNGZXRjaEZuOigpPT5fYShMcyh0aGlzLF9OLFNHKS5jYWxsKHRoaXMpKSxhcHBs''@;'; put 'put ''eUZpbHRlcnNBbmRSZWZldGNoOmk9PntFdSh0aGlzLEsyKS5maWx0ZXJzPWk/P251bGwsRXUodGhpcyxLMikucGFnZT0xLHRoaXMuZmV0Y2hEYXRhKCl9fSxyKSksWDEodGhpcyxnMGUsKHIsaSxvKT0+ZnVuY3Rpb24gZmp0KG4sZSx0LHIpe2NvbnN0e2hvdDppLGhhc0ZldGNoRm46byxhcHBs''@;'; put 'put ''eVF1ZXJ5UGFyYW1ldGVyc0Zyb21QbHVnaW5zOmEsZmV0Y2hEYXRhOmx9PW47cmV0dXJuIG8oKSYmcj8oaS5nZXRQbHVnaW4oTUZlKS5zZXRTb3J0Q29uZmlnKHQpLGEoKSxsKHtza2lwTG9hZGluZzohMH0pLCExKTp2b2lkIDB9KHtob3Q6dGhpcy5ob3QsaGFzRmV0Y2hGbjooKT0+X2EoTHMo''@;'; put 'put ''dGhpcyxfTixTRykuY2FsbCh0aGlzKSksYXBwbHlRdWVyeVBhcmFtZXRlcnNGcm9tUGx1Z2luczooKT0+THModGhpcyxhMGUsT0ZlKS5jYWxsKHRoaXMpLGZldGNoRGF0YTphPT50aGlzLmZldGNoRGF0YShhKX0sMCxpLG8pKSxYMSh0aGlzLG0wZSxyPT5mdW5jdGlvbiBpanQobixlLHQ9MTAp''@;'; put 'put ''e2NvbnN0e3BhZ2U6cixwYWdlU2l6ZTppfT1uO3JldHVybihyLTEpKigibnVtYmVyIj09dHlwZW9mIGkmJmk+PTE/aTp0KStlfShFdSh0aGlzLEsyKSxyKSksWDEodGhpcyx2MGUsKHIsaSk9PntpZihfYShMcyh0aGlzLHlOLEVHKS5jYWxsKHRoaXMpKSYmeUZlLmhhcyhpKSlyZXR1cm4hMX0p''@;'; put 'put ''LFgxKHRoaXMsXzBlLChyLGkpPT57aWYoZnVuY3Rpb24gQkJ0KG4sZSx0KXtyZXR1cm4hbnx8IWU/Lmxlbmd0aHx8IkRhdGFQcm92aWRlci5yZXZlcnQiPT09dHx8IXlGZS5oYXModCl9KF9hKExzKHRoaXMseU4sRUcpLmNhbGwodGhpcykpLHIsaSkpcmV0dXJuO2NvbnN0IG89ZnVuY3Rpb24g''@;'; put 'put ''akJ0KG4sZSl7aWYoIWUpcmV0dXJuW107Y29uc3Qgcj1lLmZpbHRlcihpPT5pWzJdIT09aVszXSk7cmV0dXJuIDA9PT1yLmxlbmd0aD9bXTpyLmZpbHRlcihpPT57Y29uc3Qgbz1uLnByb3BUb0NvbChpWzFdKTtyZXR1cm4hKHZvaWQgMD09PW98fG88MCkmJiExIT09bi5nZXRDZWxsTWV0YShp''@;'; put 'put ''WzBdLG8pLnZhbGlkfSl9KHRoaXMuaG90LHIpOzAhPT1vLmxlbmd0aCYmTHModGhpcyxiRyxiMGUpLmNhbGwodGhpcywoKT0+ZnVuY3Rpb24gWUJ0KG4sZSx0KXtyZXR1cm4gbjBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0odGhpcy5ob3Qse2dldFJvd0lkT3B0aW9uOigpPT5Mcyh0aGlzLHR4''@;'; put 'put ''LHdOKS5jYWxsKHRoaXMpLGNvbW1pdFJvd3NVcGRhdGU6KGEsbCk9PkxzKHRoaXMsYzBlLFBGZSkuY2FsbCh0aGlzLGEsbCl9LG8pKX0pLFgxKHRoaXMseTBlLChyLGksbyk9PnFCdCh7aG90OnRoaXMuaG90LGdldE9uUm93c0NyZWF0ZTooKT0+THModGhpcyxpMGUsREZlKS5jYWxsKHRoaXMp''@;'; put 'put ''LGdldE9uUm93c1JlbW92ZTooKT0+THModGhpcyxvMGUsTEZlKS5jYWxsKHRoaXMpLGdldFJvd0lkT3B0aW9uOigpPT5Mcyh0aGlzLHR4LHdOKS5jYWxsKHRoaXMpLGdldFJvd0lkOmE9PnRoaXMuZ2V0Um93SWQoYSksY3JlYXRlUm93czphPT50aGlzLmNyZWF0ZVJvd3MoYSkscmVtb3ZlUm93''@;'; put 'put ''czphPT50aGlzLnJlbW92ZVJvd3MoYSl9LHIsaSxvKSksdGhpcy5hZGRIb29rKCJoYXNFeHRlcm5hbERhdGFTb3VyY2UiLEV1KHRoaXMsQ0cpKX19ZnVuY3Rpb24gYk4oKXtjb25zdCBuPXRoaXMuaG90LmdldFNldHRpbmdzKClbbU5dO3JldHVybiBuJiYib2JqZWN0Ij09dHlwZW9mIG4/bjp2''@;'; put 'put ''b2lkIDB9ZnVuY3Rpb24gd04oKXtjb25zdCBuPUxzKHRoaXMsZXgsYk4pLmNhbGwodGhpcyk7cmV0dXJuIG4/bi5yb3dJZDp2b2lkIDB9ZnVuY3Rpb24gU0coKXtjb25zdCBuPUxzKHRoaXMsZXgsYk4pLmNhbGwodGhpcyk7cmV0dXJuIG4mJl9hKG4uZmV0Y2hSb3dzKT9uLmZldGNoUm93czp2''@;'; put 'put ''b2lkIDB9ZnVuY3Rpb24gREZlKCl7Y29uc3Qgbj1Mcyh0aGlzLGV4LGJOKS5jYWxsKHRoaXMpO3JldHVybiBuJiZfYShuLm9uUm93c0NyZWF0ZSk/bi5vblJvd3NDcmVhdGU6dm9pZCAwfWZ1bmN0aW9uIEVHKCl7Y29uc3Qgbj1Mcyh0aGlzLGV4LGJOKS5jYWxsKHRoaXMpO3JldHVybiBuJiZf''@;'; put 'put ''YShuLm9uUm93c1VwZGF0ZSk/bi5vblJvd3NVcGRhdGU6dm9pZCAwfWZ1bmN0aW9uIExGZSgpe2NvbnN0IG49THModGhpcyxleCxiTikuY2FsbCh0aGlzKTtyZXR1cm4gbiYmX2Eobi5vblJvd3NSZW1vdmUpP24ub25Sb3dzUmVtb3ZlOnZvaWQgMH1mdW5jdGlvbiBDTihuKXtyZXR1cm57cGFn''@;'; put 'put ''ZTpuLnBhZ2UscGFnZVNpemU6bi5wYWdlU2l6ZSxzb3J0Om51bGw9PT1uLnNvcnQ/bnVsbDp7Li4ubi5zb3J0fSxmaWx0ZXJzOlhCdChuLmZpbHRlcnMpfX1mdW5jdGlvbiBPRmUoKXsoZnVuY3Rpb24gcmp0KG4sZSl7IWZ1bmN0aW9uIHRqdChuLGUpe2lmKCFuPy5lbmFibGVkKXJldHVybjtj''@;'; put 'put ''b25zdCB0PSJmdW5jdGlvbiI9PXR5cGVvZiBuLmdldEN1cnJlbnRQYWdlU2l6ZT9uLmdldEN1cnJlbnRQYWdlU2l6ZSgpOnZvaWQgMCxyPW4uZ2V0U2V0dGluZygicGFnZVNpemUiKSxpPW4uZ2V0U2V0dGluZygiaW5pdGlhbFBhZ2UiKSxvPSJmdW5jdGlvbiI9PXR5cGVvZiBuLmdldEN1cnJl''@;'; put 'put ''bnRQYWdlP24uZ2V0Q3VycmVudFBhZ2UoKTp2b2lkIDA7Im51bWJlciI9PXR5cGVvZiB0P2UucGFnZVNpemU9dDoibnVtYmVyIj09dHlwZW9mIHImJihlLnBhZ2VTaXplPXIpLCJudW1iZXIiPT10eXBlb2YgbyYmbz49MT9lLnBhZ2U9bzoibnVtYmVyIj09dHlwZW9mIGkmJmk+PTEmJihlLnBh''@;'; put 'put ''Z2U9aSl9KG4uZ2V0UGx1Z2luKHZOKSxlKX0pKHRoaXMuaG90LEV1KHRoaXMsSzIpKSxmdW5jdGlvbiB1anQobixlKXshZnVuY3Rpb24gY2p0KG4sZSx0KXtpZighbj8uZW5hYmxlZHx8ImZ1bmN0aW9uIiE9dHlwZW9mIHQpcmV0dXJuO2NvbnN0IHI9bi5nZXRTb3J0Q29uZmlnKCksaT1BcnJh''@;'; put 'put ''eS5pc0FycmF5KHIpP3JbMF06cjtlLnNvcnQ9aSYmIm51bWJlciI9PXR5cGVvZiBpLmNvbHVtbj97cHJvcDp0KGkuY29sdW1uKSxvcmRlcjppLnNvcnRPcmRlcn06bnVsbH0obi5nZXRQbHVnaW4oTUZlKSxlLHQ9PlN0cmluZyhuLmNvbFRvUHJvcCh0KSkpfSh0aGlzLmhvdCxFdSh0aGlzLEsy''@;'; put 'put ''KSksZnVuY3Rpb24gSkJ0KG4sZSx0KXtpZighX2EodCgpKSlyZXR1cm47Y29uc3Qgcj1uLmdldFBsdWdpbigiZmlsdGVycyIpO2lmKCFyfHwhci5lbmFibGVkKXJldHVybjtjb25zdCBpPUVGZShuLHIuZXhwb3J0Q29uZGl0aW9ucygpKTtlLmZpbHRlcnM9aT8/bnVsbH0odGhpcy5ob3QsRXUo''@;'; put 'put ''dGhpcyxLMiksKCk9PkxzKHRoaXMsX04sU0cpLmNhbGwodGhpcykpfWZ1bmN0aW9uIHdqdCgpe2lmKCFFdSh0aGlzLF82KSlyZXR1cm47Y29uc3Qgbj1uZXcgRXJyb3IoIkRhdGFQcm92aWRlciBmZXRjaCBzdXBlcnNlZGVkIGJ5IGEgbmV3ZXIgcmVxdWVzdCIpO24ubmFtZT0iQWJvcnRFcnJv''@;'; put 'put ''ciIsRXUodGhpcyxfNikuYWJvcnQobil9ZnVuY3Rpb24gQ2p0KG4pe2NvbnN0IGU9ey4uLkV1KHRoaXMsSzIpLC4uLm59O3JldHVybiBmdW5jdGlvbiBkanQobixlKXtuLnNvcnQ9ZnVuY3Rpb24gc2p0KG4sZSl7aWYobnVsbD09bnx8Im9iamVjdCIhPXR5cGVvZiBuKXJldHVybiBudWxsO2Nv''@;'; put 'put ''bnN0IHQ9bjtpZigibnVtYmVyIj09dHlwZW9mIHQuY29sdW1uJiYiZnVuY3Rpb24iPT10eXBlb2YgZSlyZXR1cm57cHJvcDplKHQuY29sdW1uKSxvcmRlcjp0LnNvcnRPcmRlcn07Y29uc3Qgcj10Lm9yZGVyPz90LnNvcnRPcmRlcjtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQucHJvcHx8ImFz''@;'; put 'put ''YyIhPT1yJiYiZGVzYyIhPT1yP251bGw6e3Byb3A6dC5wcm9wLG9yZGVyOnJ9fShuLnNvcnQsdD0+U3RyaW5nKGUuY29sVG9Qcm9wKHQpKSl9KGUsdGhpcy5ob3QpLCJudW1iZXIiPT10eXBlb2YgZS5wYWdlJiYhTnVtYmVyLmlzTmFOKGUucGFnZSkmJihlLnBhZ2U9TWF0aC5tYXgoMSxlLnBh''@;'; put 'put ''Z2UpKSxlfWZ1bmN0aW9uIFNqdCgpe0xzKHRoaXMsa0ZlLHdqdCkuY2FsbCh0aGlzKTtjb25zdCBuPW5ldyBBYm9ydENvbnRyb2xsZXI7cmV0dXJuIFgxKHRoaXMsXzYsbiksbn1mdW5jdGlvbiBORmUobixlKXtjb25zdCB0PUxzKHRoaXMsbngsQ04pLmNhbGwodGhpcyxuKTt0aGlzLmhvdC5y''@;'; put 'put ''dW5Ib29rcygiYWZ0ZXJEYXRhUHJvdmlkZXJGZXRjaEFib3J0Iix0LGUpfWZ1bmN0aW9uIEZGZSgpe0V1KHRoaXMsXzYpPy5hYm9ydCgpLFgxKHRoaXMsXzYsbnVsbCl9ZnVuY3Rpb24gYjBlKG4pe3JldHVybiBmdW5jdGlvbiBOQnQobixlKXtjb25zdCB0PW4udGFpbC50aGVuKGUpO3JldHVy''@;'; put 'put ''biBuLnRhaWw9dC5jYXRjaCgoKT0+e30pLHR9KEV1KHRoaXMscjBlKSxuKX1mdW5jdGlvbiB3MGUobixlKXtjb25zdCB0PXRoaXMuaG90LmdldFBsdWdpbigibm90aWZpY2F0aW9uIik7aWYoIXQ/LmVuYWJsZWQpcmV0dXJuO2NvbnN0IGk9dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZSh7''@;'; put 'put ''ZmV0Y2g6TnVlLGNyZWF0ZTpGdWUsdXBkYXRlOlB1ZSxyZW1vdmU6SHVlfVtuXT8/VnVlKSxvPWZ1bmN0aW9uIG1qdChuKXtjb25zdCBlPVtdO2lmKG51bGw9PW4pcmV0dXJuIlVua25vd24gZXJyb3IiO2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbi50cmltKCl8fCJVbmtub3duIGVy''@;'; put 'put ''cm9yIjtpZigib2JqZWN0IiE9dHlwZW9mIG4pcmV0dXJuIFN0cmluZyhuKTtjb25zdCB0PW4saT10LnJlc3BvbnNlPy5kYXRhPz90LmRhdGE/P3QuYm9keTtpZihudWxsIT1pKWlmKCJzdHJpbmciPT10eXBlb2YgaSl0cnl7VEZlKEpTT04ucGFyc2UoaSksZSl9Y2F0Y2h7SlQoZSxpKX1lbHNl''@;'; put 'put ''IFRGZShpLGUpOyJzdHJpbmciPT10eXBlb2YgdC5lcnJvciYmSlQoZSx0LmVycm9yKSwic3RyaW5nIj09dHlwZW9mIHQubWVzc2FnZSYmSlQoZSx0Lm1lc3NhZ2UpO2NvbnN0IG89ZS5maW5kKGE9PiFmdW5jdGlvbiBnanQobil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuJiYvXlxkezN9JC8u''@;'; put 'put ''dGVzdChuLnRyaW0oKSl9KGEpKTtyZXR1cm4gb3x8KGUubGVuZ3RoPjA/ZVswXTpTdHJpbmcobikpfShlKTtsZXQgYT0iIjtjb25zdCBsPXt2YXJpYW50OiJlcnJvciIsdGl0bGU6aSxtZXNzYWdlOm99OyJmZXRjaCI9PT1uJiYobC5kdXJhdGlvbj0wLGwuYWN0aW9ucz1be2xhYmVsOnRoaXMu''@;'; put 'put ''aG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoQnVlKSx0eXBlOiJwcmltYXJ5IixjYWxsYmFjazooKT0+e2EmJnQuaGlkZShhKSx0aGlzLmZldGNoRGF0YSgpfX1dKSxhPXQuc2hvd01lc3NhZ2UobCl9ZnVuY3Rpb24gUEZlKG4sZT17fSl7cmV0dXJuIGZ1bmN0aW9uIHpCdChuLGUsdCl7cmV0dXJu''@;'; put 'put ''IGUwZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KHRoaXMuaG90LHtnZXRPblJvd3NVcGRhdGU6KCk9PkxzKHRoaXMseU4sRUcpLmNhbGwodGhpcyksZmV0Y2hEYXRhOigpPT50aGlzLmZldGNoRGF0YSh7c2tpcExvYWRpbmc6ITB9KSxsb2dFcnJvcjptNyxvblJlcXVlc3RGYWlsZWQ6KHQscik9''@;'; put 'put ''PkxzKHRoaXMsd0csdzBlKS5jYWxsKHRoaXMsdCxyKX0sbixlKX1mdW5jdGlvbiBIRmUobixlLHQscil7cmV0dXJuIGZ1bmN0aW9uIFpCdChuLGUsdCxyLGkpe2NvbnN0e2VucXVldWVNdXRhdGlvbjpvLHJ1bkJlZm9yZVJvd3NNdXRhdGlvbjphLHJ1bkFmdGVyUm93c011dGF0aW9uOmwscnVu''@;'; put 'put ''QWZ0ZXJSb3dzTXV0YXRpb25FcnJvcjp1LGxvZ0Vycm9yOmcsb25SZXF1ZXN0RmFpbGVkOkV9PW47cmV0dXJuIG8oQ3IoZnVuY3Rpb24qKCl7aWYoITE9PT1hKGUsdCkpcmV0dXJuO2NvbnN0IE89ImNyZWF0ZSI9PT1lPyJSb3cgY3JlYXRlIjoiUm93IHJlbW92ZSI7dHJ5e3lpZWxkIHIoKX1j''@;'; put 'put ''YXRjaChaKXtyZXR1cm4gdShlLFosdCksZyhgJHtPfSBmYWlsZWQ6YCxaKSx2b2lkIEU/LihlLFopfXRyeXtsKGUsdCkseWllbGQgaSgpfWNhdGNoKFope3UoZSxaLHQpLGcoIkRhdGEgcmVsb2FkIGZhaWxlZDoiLFopfX0pKX0oe2VucXVldWVNdXRhdGlvbjppPT5Mcyh0aGlzLGJHLGIwZSku''@;'; put 'put ''Y2FsbCh0aGlzLGkpLHJ1bkJlZm9yZVJvd3NNdXRhdGlvbjooaSxvKT0+SjFlKHRoaXMuaG90LGksbykscnVuQWZ0ZXJSb3dzTXV0YXRpb246KGksbyk9PndGZSh0aGlzLmhvdCxpLG8pLHJ1bkFmdGVyUm93c011dGF0aW9uRXJyb3I6KGksbyxhKT0+UVQodGhpcy5ob3QsaSxvLGEpLGxvZ0Vy''@;'; put 'put ''cm9yOm03LG9uUmVxdWVzdEZhaWxlZDooaSxvKT0+THModGhpcyx3Ryx3MGUpLmNhbGwodGhpcyxpLG8pfSxuLGUsdCxyKX1mdW5jdGlvbiBWRmUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVsZCBvbiBub24t''@;'; put 'put ''aW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQobil9ZnVuY3Rpb24gSTQobixlKXtyZXR1cm4gZnVuY3Rpb24gVGp0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obixWRmUobixlLCJnZXQiKSl9ZnVuY3Rpb24gU04obixlLHQpeyhmdW5jdGlvbiBNanQobixlKXtpZihl''@;'; put 'put ''LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIHk2KG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24geGp0KG4sZSx0KXtpZihlLnNl''@;'; put 'put ''dCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixWRmUobixlLCJzZXQiKSx0KSx0fXZhciBuQz1uZXcgV2Vha01hcCxyQz1uZXcgV2Vh''@;'; put 'put ''a01hcCxFTj1uZXcgV2Vha01hcCxDMGU9bmV3IFdlYWtNYXAsTUc9bmV3IFdlYWtNYXA7Y2xhc3MgUzBle2dldCBpc0FjdGl2ZSgpe3JldHVybiBudWxsIT09STQodGhpcyxuQyl9Y29uZmlndXJlKGUpe3k2KHRoaXMsRU4sZSl9dXBkYXRlKGUpe3k2KHRoaXMsckMsZSksMD09PWU/dGhpcy5z''@;'; put 'put ''dG9wKCk6dGhpcy5pc0FjdGl2ZXx8STQodGhpcyxNRykuY2FsbCh0aGlzKX1zdG9wKCl7bnVsbCE9PUk0KHRoaXMsbkMpJiYoY2xlYXJUaW1lb3V0KEk0KHRoaXMsbkMpKSx5Nih0aGlzLG5DLG51bGwpKSx5Nih0aGlzLHJDLDApfWNvbnN0cnVjdG9yKGUpe1NOKHRoaXMsbkMse3dyaXRhYmxl''@;'; put 'put ''OiEwLHZhbHVlOnZvaWQgMH0pLFNOKHRoaXMsckMse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFNOKHRoaXMsRU4se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFNOKHRoaXMsQzBlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxTTih0aGlzLE1HLHt3cml0YWJsZTohMCx2YWx1''@;'; put 'put ''ZTp2b2lkIDB9KSx5Nih0aGlzLG5DLG51bGwpLHk2KHRoaXMsckMsMCkseTYodGhpcyxFTixudWxsKSx5Nih0aGlzLE1HLCgpPT57aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJ0aWNrIixJNCh0aGlzLHJDKSksMD09PUk0KHRoaXMsckMpKXJldHVybjtjb25zdCB0PWZ1bmN0aW9uIEVqdChuLGUs''@;'; put 'put ''dCxyPTIwMCl7Y29uc3Qgbz1NYXRoLm1pbihNYXRoLmFicyhuKSx0KS90LGE9ZS5tYXgtZS5taW47cmV0dXJuIE1hdGgucm91bmQoZS5tYXgtTWF0aC5sb2coMStvKnIpL01hdGgubG9nKDErcikqYSl9KEk0KHRoaXMsckMpLEk0KHRoaXMsRU4pLmludGVydmFsUmFuZ2UsSTQodGhpcyxFTiku''@;'; put 'put ''cmFtcERpc3RhbmNlKTt5Nih0aGlzLG5DLEk0KHRoaXMsQzBlKS5jYWxsKHRoaXMsSTQodGhpcyxNRyksdCkpfSkseTYodGhpcyxDMGUsZSl9fWZ1bmN0aW9uIEJGZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZp''@;'; put 'put ''ZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBHMyhuLGUpe3JldHVybiBmdW5jdGlvbiBranQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLEJGZShuLGUsImdldCIpKX1mdW5jdGlvbiBqRmUobixlLHQpeyhmdW5jdGlvbiBB''@;'; put 'put ''anQobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIFRHKG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gUmp0KG4s''@;'; put 'put ''ZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixCRmUobixlLCJzZXQiKSx0KSx0fVlsKFMwZSxfaCk7dmFyIGI2''@;'; put 'put ''PW5ldyBXZWFrTWFwLHc2PW5ldyBXZWFrTWFwO2NsYXNzIFVGZXtnZXQgaXNBY3RpdmUoKXtyZXR1cm4gRzModGhpcyxiNikuaXNBY3RpdmV8fEczKHRoaXMsdzYpLmlzQWN0aXZlfWdldCBpc0hvcml6b250YWxBY3RpdmUoKXtyZXR1cm4gRzModGhpcyxiNikuaXNBY3RpdmV9Z2V0IGlzVmVy''@;'; put 'put ''dGljYWxBY3RpdmUoKXtyZXR1cm4gRzModGhpcyx3NikuaXNBY3RpdmV9Y29uZmlndXJlKGUpe0czKHRoaXMsYjYpLmNvbmZpZ3VyZShlKSxHMyh0aGlzLHc2KS5jb25maWd1cmUoZSl9dXBkYXRlKHt4OmUseTp0fSl7RzModGhpcyxiNikudXBkYXRlKGUpLEczKHRoaXMsdzYpLnVwZGF0ZSh0''@;'; put 'put ''KX1zdG9wKCl7RzModGhpcyxiNikuc3RvcCgpLEczKHRoaXMsdzYpLnN0b3AoKX1zdG9wSG9yaXpvbnRhbCgpe0czKHRoaXMsYjYpLnN0b3AoKX1zdG9wVmVydGljYWwoKXtHMyh0aGlzLHc2KS5zdG9wKCl9ZGVzdHJveSgpe3RoaXMuc3RvcCgpLFRHKHRoaXMsYjYsbnVsbCksVEcodGhpcyx3''@;'; put 'put ''NixudWxsKX1jb25zdHJ1Y3RvcihlKXtqRmUodGhpcyxiNix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksakZlKHRoaXMsdzYse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFRHKHRoaXMsYjYsbmV3IFMwZShlKSksVEcodGhpcyx3NixuZXcgUzBlKGUpKSxHMyh0aGlzLGI2KS5hZGRM''@;'; put 'put ''b2NhbEhvb2soInRpY2siLHQ9PnRoaXMucnVuTG9jYWxIb29rcygic2Nyb2xsSG9yaXpvbnRhbCIsdCkpLEczKHRoaXMsdzYpLmFkZExvY2FsSG9vaygidGljayIsdD0+dGhpcy5ydW5Mb2NhbEhvb2tzKCJzY3JvbGxWZXJ0aWNhbCIsdCkpfX1mdW5jdGlvbiB6RmUobixlKXtpZihlLmhhcyhu''@;'; put 'put ''KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFdGZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2''@;'; put 'put ''YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBNMChuLGUpe3JldHVybiBmdW5jdGlvbiBJanQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLFdGZShuLGUsImdldCIpKX1mdW5jdGlvbiBiXyhuLGUsdCl7ekZlKG4s''@;'; put 'put ''ZSksZS5zZXQobix0KX1mdW5jdGlvbiBUMChuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIERqdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVs''@;'; put 'put ''ZCIpO2UudmFsdWU9dH19KG4sV0ZlKG4sZSwic2V0IiksdCksdH1mdW5jdGlvbiBNTihuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiB4RyhuLGUp''@;'; put 'put ''e3pGZShuLGUpLGUuYWRkKG4pfVlsKFVGZSxfaCk7Y29uc3QgWUZlPSJkcmFnVG9TY3JvbGwiO3ZhciBCNz1uZXcgV2Vha01hcCxyeD1uZXcgV2Vha01hcCxUTj1uZXcgV2Vha01hcCxpeD1uZXcgV2Vha01hcCxveD1uZXcgV2Vha01hcCxheD1uZXcgV2Vha01hcCxFMGU9bmV3IFdlYWtTZXQs''@;'; put 'put ''WkZlPW5ldyBXZWFrU2V0LEdGZT1uZXcgV2Vha1NldCxNMGU9bmV3IFdlYWtNYXAsJEZlPW5ldyBXZWFrU2V0LFQwZT1uZXcgV2Vha01hcDtjbGFzcyBPanQgZXh0ZW5kcyBhbHtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gWUZlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7''@;'; put 'put ''cmV0dXJuIDEwMH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57aW50ZXJ2YWw6e21pbjoyMCxtYXg6NTAwfSxyYW1wRGlzdGFuY2U6MTIwfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbWUZlXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJs''@;'; put 'put ''ZWR8fChNMCh0aGlzLEI3KS5jb25maWd1cmUoe2ludGVydmFsUmFuZ2U6dGhpcy5nZXRTZXR0aW5nKCJpbnRlcnZhbCIpLHJhbXBEaXN0YW5jZTp0aGlzLmdldFNldHRpbmcoInJhbXBEaXN0YW5jZSIpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLChlLHQscixpKT0+''@;'; put 'put ''e2NvbnN0IG89Im9iamVjdCI9PXR5cGVvZiBpJiZudWxsIT09aT9pOm51bGw7TU4odGhpcyxFMGUscUZlKS5jYWxsKHRoaXMsImNlbGwiLGUsbyl9KSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixlPT5NTih0aGlzLEUwZSxxRmUpLmNhbGwodGhpcywiY29ybmVy''@;'; put 'put ''IixlKSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsTTAodGhpcyxNMGUpKSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsIixNMCh0aGlzLFQwZSkpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1''@;'; put 'put ''Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7TTAodGhpcyxCNykuc3RvcCgpLHRoaXMudW5yZWdpc3RlckV2ZW50cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1zZXRCb3VuZGFyaWVzKGU9e2xlZnQ6MCxyaWdodDp0aGlzLmhv''@;'; put 'put ''dC5yb290V2luZG93LmlubmVyV2lkdGgsdG9wOjAsYm90dG9tOnRoaXMuaG90LnJvb3RXaW5kb3cuaW5uZXJIZWlnaHR9KXt0aGlzLmJvdW5kYXJpZXM9ZX1zZXRDYWxsYmFjayhlKXt0aGlzLmNhbGxiYWNrPWV9Y2hlY2soZSx0KXtsZXQgcj0wLGk9MDtjb25zdHtib3VuZGFyaWVzOm99PXRo''@;'; put 'put ''aXM7byYmKHQ8by50b3A/aT10LW8udG9wOnQ+by5ib3R0b20mJihpPXQtby5ib3R0b20pLGU8by5sZWZ0P3I9ZS1vLmxlZnQ6ZT5vLnJpZ2h0JiYocj1lLW8ucmlnaHQpKSxUMCh0aGlzLHJ4LDAhPT1pfHwwIT09ciksdGhpcy5jYWxsYmFjayYmdGhpcy5jYWxsYmFjayhyLGkpfWxpc3Rlbigp''@;'; put 'put ''e3RoaXMubGlzdGVuaW5nPSEwfXVubGlzdGVuKCl7dGhpcy5saXN0ZW5pbmc9ITEsVDAodGhpcyxUTixudWxsKSxUMCh0aGlzLGl4LG51bGwpLFQwKHRoaXMsb3gsbnVsbCksVDAodGhpcyxyeCwhMSksVDAodGhpcyxheCxudWxsKSxNMCh0aGlzLEI3KS5zdG9wKCl9aXNMaXN0ZW5pbmcoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5saXN0ZW5pbmd9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtyb290V2luZG93OmV9PXRoaXMuaG90O2xldCB0PWU7Zm9yKDt0Oyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHQuZG9jdW1lbnQsImNvbnRleHRtZW51IiwoKT0+dGhpcy51bmxpc3RlbigpKSx0''@;'; put 'put ''aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHQuZG9jdW1lbnQsIm1vdXNldXAiLCgpPT50aGlzLnVubGlzdGVuKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodC5kb2N1bWVudCwibW91c2Vtb3ZlIixyPT57TU4odGhpcywkRmUsUGp0KS5jYWxsKHRoaXMs''@;'; put 'put ''cil9KSx0PXY3KHQpfXVucmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpfWRlc3Ryb3koKXtNMCh0aGlzLEI3KS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLHhHKHRoaXMsRTBlKSx4Ryh0aGlzLFpGZSkseEco''@;'; put 'put ''dGhpcyxHRmUpLHhHKHRoaXMsJEZlKSxiXyh0aGlzLEI3LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxiXyh0aGlzLHJ4LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxiXyh0aGlzLFROLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxiXyh0aGlzLGl4LHt3cml0YWJsZTohMCx2''@;'; put 'put ''YWx1ZTp2b2lkIDB9KSxiXyh0aGlzLG94LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxiXyh0aGlzLGF4LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxiXyh0aGlzLE0wZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksYl8odGhpcyxUMGUse3dyaXRhYmxlOiEwLHZhbHVlOnZv''@;'; put 'put ''aWQgMH0pLHRoaXMuYm91bmRhcmllcz1udWxsLHRoaXMuY2FsbGJhY2s9bnVsbCx0aGlzLmxpc3RlbmluZz0hMSxUMCh0aGlzLEI3LG5ldyBVRmUoKHQscik9PnRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQodCxyKSkuYWRkTG9jYWxIb29rKCJzY3JvbGxIb3Jpem9udGFsIix0PT5NTih0aGlz''@;'; put 'put ''LFpGZSxOanQpLmNhbGwodGhpcyx0KSkuYWRkTG9jYWxIb29rKCJzY3JvbGxWZXJ0aWNhbCIsdD0+TU4odGhpcyxHRmUsRmp0KS5jYWxsKHRoaXMsdCkpKSxUMCh0aGlzLHJ4LCExKSxUMCh0aGlzLFROLG51bGwpLFQwKHRoaXMsaXgsbnVsbCksVDAodGhpcyxveCxudWxsKSxUMCh0aGlzLGF4''@;'; put 'put ''LG51bGwpLFQwKHRoaXMsTTBlLCh0LHIsaSxvLGEpPT57dGhpcy5saXN0ZW5pbmcmJk0wKHRoaXMscngpJiYoYS52YWx1ZT0hMCl9KSxUMCh0aGlzLFQwZSwoKT0+e2lmKCJjZWxsIiE9PU0wKHRoaXMsVE4pfHwhTTAodGhpcyxyeCl8fG51bGw9PT1NMCh0aGlzLGl4KXx8bnVsbD09PU0wKHRo''@;'; put 'put ''aXMsb3gpfHwic2luZ2xlIj09PXRoaXMuaG90LmdldFNldHRpbmdzKCkuc2VsZWN0aW9uTW9kZXx8TTAodGhpcyxheCk/LnJvd3x8TTAodGhpcyxheCk/LmNvbHVtbilyZXR1cm47Y29uc3R7c2VsZWN0aW9uOnQsdmlldzpyfT10aGlzLmhvdCxpPUVPZSh0aGlzLmhvdCxNMCh0aGlzLGl4KSxN''@;'; put 'put ''MCh0aGlzLG94KSk7aWYoIWkpcmV0dXJuO2xldCBvPWkucm93Pz8wLGE9aS5jb2w/PzA7Y29uc3QgbD1yLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCk/PzAsdT1yLmdldExhc3RGdWxseVZpc2libGVSb3coKT8/MCxnPXIuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKT8/MCxFPXIuZ2V0''@;'; put 'put ''TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbigpPz8wO28+dT9vPXU6bzxsJiYobz1sKSxhPkU/YT1FOmE8ZyYmKGE9ZyksdC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmKGE9dGhpcy5ob3QuY291bnRDb2xzKCktMSksdC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmKG89dGhpcy5ob3QuY291''@;'; put 'put ''bnRSb3dzKCktMSk7Y29uc3QgTz10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhvLGEpLFo9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtaJiZaLnRvLnJvdz09PU8ucm93JiZaLnRvLmNvbD09PU8uY29sfHx0LnNldFJhbmdlRW5kKE8pfSl9fWZ1bmN0aW9uIHFGZShuLGUsdD1u''@;'; put 'put ''dWxsKXtpZih6dihlKXx8ImNlbGwiPT09biYmInNpbmdsZSI9PT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLnNlbGVjdGlvbk1vZGUpcmV0dXJuO1QwKHRoaXMsVE4sbiksVDAodGhpcyxheCx0KTtjb25zdCByPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wT3ZlcmxheS5tYWluVGFi''@;'; put 'put ''bGVTY3JvbGxhYmxlRWxlbWVudDtpZihyPT09dGhpcy5ob3Qucm9vdFdpbmRvdyl0aGlzLnNldEJvdW5kYXJpZXMoKTtlbHNle2NvbnN0IGk9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLnNldEJvdW5kYXJpZXMoe2xlZnQ6aS5sZWZ0K3RoaXMuaG90LnZpZXcuZ2V0Um93SGVhZGVy''@;'; put 'put ''V2lkdGgoKSxyaWdodDppLnJpZ2h0LHRvcDppLnRvcCt0aGlzLmhvdC52aWV3LmdldENvbHVtbkhlYWRlckhlaWdodCgpLGJvdHRvbTppLmJvdHRvbX0pfXRoaXMuc2V0Q2FsbGJhY2soKGksbyk9Pntjb25zdHtzZWxlY3Rpb246YX09dGhpcy5ob3QsbD1hLmlzU2VsZWN0ZWRCeVJvd0hlYWRl''@;'; put 'put ''cigpPzA6aSx1PWEuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk/MDpvO00wKHRoaXMsQjcpLnVwZGF0ZSh7eDpsLHk6dX0pfSksdGhpcy5saXN0ZW4oKX1mdW5jdGlvbiBOanQobil7Y29uc3QgdD0odGhpcy5ob3QuaXNSdGwoKT9uPDA6bj4wKT90aGlzLmhvdC5nZXRMYXN0RnVsbHlWaXNp''@;'; put 'put ''YmxlQ29sdW1uKCkrMTp0aGlzLmhvdC5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKS0xO3RoaXMuaG90LnNjcm9sbFZpZXdwb3J0VG8oe2NvbDp0fSwoKT0+e30pfHxNMCh0aGlzLEI3KS5zdG9wSG9yaXpvbnRhbCgpfWZ1bmN0aW9uIEZqdChuKXtjb25zdCBlPXRoaXMuaG90Lmdl''@;'; put 'put ''dEZpcnN0RnVsbHlWaXNpYmxlUm93KCksdD10aGlzLmhvdC5nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCk7dGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh7cm93Om4+MD90KzE6ZS0xfSwoKT0+e30pfHxNMCh0aGlzLEI3KS5zdG9wVmVydGljYWwoKX1mdW5jdGlvbiBQanQobil7dGhpcy5pc0xp''@;'; put 'put ''c3RlbmluZygpJiYoVDAodGhpcyxpeCxuLmNsaWVudFgpLFQwKHRoaXMsb3gsbi5jbGllbnRZKSx0aGlzLmNoZWNrKG4uY2xpZW50WCxuLmNsaWVudFkpKX1mdW5jdGlvbiBLRmUobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2Ft''@;'; put 'put ''ZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFhGZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5j''@;'; put 'put ''dGlvbiBBRyhuLGUpe3JldHVybiBmdW5jdGlvbiBIanQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLFhGZShuLGUsImdldCIpKX1mdW5jdGlvbiBrRyhuLGUsdCl7S0ZlKG4sZSksZS5zZXQobix0KX1mdW5jdGlvbiBzeChuLGUsdCl7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''IFZqdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4sWEZlKG4sZSwic2V0IiksdCksdH1mdW5jdGlvbiB3''@;'; put 'put ''XyhuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiBseChuLGUpe0tGZShuLGUpLGUuYWRkKG4pfUdvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJh''@;'; put 'put ''ZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIiksR28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZURyb3Bkb3duTWVudVNob3ciKSxHby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVTaG93IiksR28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIo''@;'; put 'put ''ImFmdGVyRHJvcGRvd25NZW51SGlkZSIpLEdvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckRyb3Bkb3duTWVudUV4ZWN1dGUiKTtjb25zdCBSRz0iZHJvcGRvd25NZW51IixpQz0iY2hhbmdlVHlwZSIseDBlPVJHO3ZhciB4Tj1uZXcgV2Vha01hcCxBMGU9bmV3IFdlYWtTZXQsUUZl''@;'; put 'put ''PW5ldyBXZWFrU2V0LGswZT1uZXcgV2Vha1NldCxSMGU9bmV3IFdlYWtNYXAsSkZlPW5ldyBXZWFrU2V0LGVQZT1uZXcgV2Vha1NldCx0UGU9bmV3IFdlYWtTZXQsSTBlPW5ldyBXZWFrTWFwLEQwZT1uZXcgV2Vha01hcDtjbGFzcyBJRyBleHRlbmRzIGFse3N0YXRpYyBnZXQgUExVR0lOX0tF''@;'; put 'put ''WSgpe3JldHVybiBSR31zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMzB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkF1dG9Db2x1bW5TaXplIl19c3RhdGljIGdldCBERUZBVUxUX0lURU1TKCl7cmV0dXJuW2VOLHROLHZzLHJOLHZzLFhaLHZz''@;'; put 'put ''LG5OLHZzLHBtXX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbUkddfWVuYWJsZVBsdWdpbigpe2lmKHRoaXMuZW5hYmxlZClyZXR1cm47dGhpcy5pdGVtc0ZhY3Rvcnk9bmV3IEhOZSh0aGlzLmhvdCxJRy5ERUZBVUxUX0lURU1TKSx0aGlzLmFkZEhvb2soImJl''@;'; put 'put ''Zm9yZU9uQ2VsbE1vdXNlRG93biIsQUcodGhpcyxEMGUpKSx0aGlzLmFkZEhvb2soImJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5IixBRyh0aGlzLEkwZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlRGlhbG9nU2hvdyIsKCk9PnRoaXMuY2xvc2UoKSk7Y29uc3QgZT10aGlzLmhvdC5n''@;'; put 'put ''ZXRTZXR0aW5ncygpW1JHXSx0PWUscj17aXRlbXM6dGhpcy5pdGVtc0ZhY3RvcnkuZ2V0SXRlbXMoZSl9O3RoaXMucmVnaXN0ZXJFdmVudHMoKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5jYWxsYmFjayYmdGhpcy5jb21tYW5kRXhlY3V0b3Iuc2V0Q29tbW9uQ2FsbGJhY2sodC5jYWxsYmFjayks''@;'; put 'put ''dGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpLHRoaXMuY2FsbE9uUGx1Z2luc1JlYWR5KCgpPT57dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiLHIpLHRoaXMuaXRlbXNGYWN0b3J5LnNldFByZWRlZmluZWRJdGVt''@;'; put 'put ''cyhyLml0ZW1zKTtjb25zdCBpPXRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGUpO3RoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bmV3IEdUKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0RHJvcGRvd25NZW51IixrZWVwSW5WaWV3cG9ydDohMCxjb250YWluZXI6KCJv''@;'; put 'put ''YmplY3QiPT10eXBlb2YgZT90LnVpQ29udGFpbmVyOm51bGwpfHx0aGlzLmhvdC5yb290UG9ydGFsRWxlbWVudH0pLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtcyIsaSksdGhpcy5tZW51LnNldE1lbnVJdGVtcyhpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29r''@;'; put 'put ''KCJhZnRlck9wZW4iLCgpPT53Xyh0aGlzLEpGZSxVanQpLmNhbGwodGhpcykpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyU3VibWVudU9wZW4iLG89PndfKHRoaXMsZVBlLHpqdCkuY2FsbCh0aGlzLG8pKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+d18o''@;'; put 'put ''dGhpcyx0UGUsV2p0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJleGVjdXRlQ29tbWFuZCIsKG8sLi4uYSk9PnRoaXMuZXhlY3V0ZUNvbW1hbmQobywuLi5hKSksWG4oaSxvPT57dGhpcy5jb21tYW5kRXhlY3V0b3IucmVnaXN0ZXJDb21tYW5kKG8ua2V5LG8pfSl9KX11''@;'; put 'put ''cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1''@;'; put 'put ''cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGU9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLHQ9KCk9Pntjb25zdCByPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighcilyZXR1cm47Y29uc3R7''@;'; put 'put ''aGlnaGxpZ2h0Oml9PXIsbz1pLmlzSGVhZGVyKCk/dGhpcy5ob3QuZ2V0Q2VsbChpLnJvdz8/MCxpLmNvbD8/MCwhMCk6bnVsbCxhPWkuaXNIZWFkZXIoKSYmKGkuY29sPz8tMSk+PTAmJiEhbyYmY3cobyksbD1pLmlzSGVhZGVyKCkmJihpLmNvbD8/LTEpPj0wJiZvJiZMYShvLCJoaWRkZW5I''@;'; put 'put ''ZWFkZXIiKTtpZigoYXx8bHx8aS5pc0NlbGwoKSkmJihpLmNvbD8/LTEpPj0wKXtsZXQgZz1hfHxsP2kucm93Pz8tMTotMTt0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGkuY29sPz8wLGkuY29sPz8wLGcpO2NvbnN0IEU9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFFKXJl''@;'; put 'put ''dHVybjtjb25zdHtmcm9tOk99PUUsWj1ZWih0aGlzLm1lbnU/LmNvbnRhaW5lcj8/dGhpcy5ob3Qucm9vdEVsZW1lbnQsdGhpcy5ob3Qucm9vdERvY3VtZW50KTtsZXQgZWU9dGhpcy5ob3QuZ2V0Q2VsbChnLE8uY29sPz8wLCEwKT8ucXVlcnlTZWxlY3RvcihgLiR7aUN9YCk7aWYoIWVlKWZv''@;'; put 'put ''cihsZXQgYXQ9LXRoaXMuaG90LnZpZXcuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCk7YXQ8PS0xO2F0Kyspe2NvbnN0IEN0PXRoaXMuaG90LmdldENlbGwoYXQsTy5jb2w/PzAsITApPy5xdWVyeVNlbGVjdG9yKGAuJHtpQ31gKTtpZihDdCl7ZWU9Q3QsZz1hdCx0aGlzLmhvdC5zZWxlY3RDb2x1''@;'; put 'put ''bW5zKGkuY29sPz8wLGkuY29sPz8wLGcpO2JyZWFrfX1pZighZWUmJmwpZm9yKGxldCBhdD0oTy5jb2w/PzApLTE7YXQ+PTA7YXQtLSl7Y29uc3QgQ3Q9dGhpcy5ob3QuZ2V0Q2VsbChnLGF0LCEwKTtpZighQ3R8fExhKEN0LCJoaWRkZW5IZWFkZXIiKSljb250aW51ZTtjb25zdCBBdD1DdD8u''@;'; put 'put ''cXVlcnlTZWxlY3RvcihgLiR7aUN9YCk7QXQmJihlZT1BdCx0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGF0LGF0LGcpKTticmVha31pZighZWV8fCFocyhlZSkpcmV0dXJuO2NvbnN0IHZlPXdfKHRoaXMsazBlLHJQZSkuY2FsbCh0aGlzLGVlKSxNZT1lZS5jbG9zZXN0KCJ0aCIpLEhlPU1lJiZO''@;'; put 'put ''dW1iZXIucGFyc2VJbnQoTWUuZ2V0QXR0cmlidXRlKCJyb3dzcGFuIik/PyIxIiwxMCk+MSxXZT1IZT9NZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ArTWUuY2xpZW50SGVpZ2h0OnZlLmJvdHRvbTt0aGlzLm9wZW4oe2xlZnQ6dmUubGVmdCtaLmxlZnQsdG9wOldlK1oudG9wfSx7bGVm''@;'; put 'put ''dDp2ZS53aWR0aCxyaWdodDowLGFib3ZlOjAsYmVsb3c6SGU/LTE6M30pLHRoaXMubWVudT8uZ2V0TmF2aWdhdG9yKCk/LnRvRmlyc3RJdGVtKCl9fTtlPy5hZGRTaG9ydGN1dHMoW3trZXlzOltbIlNoaWZ0IiwiQWx0IiwiQXJyb3dEb3duIl0sWyJDb250cm9sL01ldGEiLCJFbnRlciJdXSxj''@;'; put 'put ''YWxsYmFjazp0LHJ1bk9ubHlJZjooKT0+e2NvbnN0IHI9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpPy5oaWdobGlnaHQsaT1yPy5pc0hlYWRlcigpP3RoaXMuaG90LmdldENlbGwoci5yb3c/PzAsci5jb2w/PzAsITApOm51bGwsbz1yPy5pc0hlYWRlcigpJiYoci5jb2w/Py0x''@;'; put 'put ''KT49MCYmaSYmTGEoaSwiaGlkZGVuSGVhZGVyIik7cmV0dXJuISghcnx8dGhpcy5tZW51Py5pc09wZW5lZCgpfHwhci5pc0hlYWRlcigpfHwhdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUocikmJiFvKX0sY2FwdHVyZUN0cmw6ITAsZ3JvdXA6eDBlfSx7a2V5czpbWyJTaGlmdCIs''@;'; put 'put ''IkFsdCIsIkFycm93RG93biJdXSxjYWxsYmFjazp0LHJ1bk9ubHlJZjooKT0+e2NvbnN0IHI9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpPy5oaWdobGlnaHQ7cmV0dXJuISghKHImJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKHIpJiZyLmlzQ2VsbCgpKXx8dGhp''@;'; put 'put ''cy5tZW51Py5pc09wZW5lZCgpKX0sZ3JvdXA6eDBlfV0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIik/LnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoeDBlKX1yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5h''@;'; put 'put ''Z2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQsImNsaWNrIixlPT53Xyh0aGlzLFFGZSxqanQpLmNhbGwodGhpcyxlKSl9b3BlbihlLHQ9e2Fib3ZlOjAsYmVsb3c6MCxsZWZ0OjAscmlnaHQ6MH0pe3RoaXMubWVudT8uaXNPcGVuZWQoKXx8KHRoaXMuaG90LnJ1bkhv''@;'; put 'put ''b2tzKCJiZWZvcmVEcm9wZG93bk1lbnVTaG93Iix0aGlzKSx0aGlzLm1lbnU/Lm9wZW4oKSxhYyh0LChyLGkpPT57dGhpcy5tZW51Py5zZXRPZmZzZXQoaSxyKX0pLHRoaXMubWVudT8uc2V0UG9zaXRpb24oZSkpfWNsb3NlKCl7dGhpcy5tZW51Py5jbG9zZSgpfWV4ZWN1dGVDb21tYW5kKGUs''@;'; put 'put ''Li4udCl7dGhpcy5jb21tYW5kRXhlY3V0b3IuZXhlY3V0ZShlLC4uLnQpfXNldExpc3RlbmluZyhlPSEwKXtpZih0aGlzLm1lbnU/LmlzT3BlbmVkKCkpe2NvbnN0IHQ9dGhpcy5tZW51LmhvdE1lbnU7ZT90Lmxpc3RlbigpOnQudW5saXN0ZW4oKX19ZGVzdHJveSgpe3RoaXMuY2xvc2UoKSx0''@;'; put 'put ''aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLGx4KHRoaXMsQTBlKSxseCh0aGlzLFFGZSksbHgodGhpcyxrMGUpLGx4KHRoaXMsSkZlKSxseCh0aGlzLGVQZSksbHgodGhpcyx0UGUpLGtHKHRoaXMseE4se3dyaXRh''@;'; put 'put ''YmxlOiEwLHZhbHVlOnZvaWQgMH0pLGtHKHRoaXMsUjBlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxrRyh0aGlzLEkwZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksa0codGhpcyxEMGUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHRoaXMuY29tbWFuZEV4ZWN1dG9yPW5l''@;'; put 'put ''dyBPTmUodGhpcy5ob3QpLHRoaXMuaXRlbXNGYWN0b3J5PW51bGwsdGhpcy5tZW51PW51bGwsc3godGhpcyx4TiwhMSksc3godGhpcyxSMGUsKHQscik9PntpZih0PDB8fCFjdyhyKSlyZXR1cm47Y29uc3QgaT1yLnF1ZXJ5U2VsZWN0b3IoYC4ke2lDfWApO2lmKHRoaXMuZW5hYmxlZCYmaSly''@;'; put 'put ''ZXR1cm47aWYoIXRoaXMuZW5hYmxlZClyZXR1cm4gdm9pZChpJiZpLnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKGkpKTtjb25zdCBvPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTtvLmNsYXNzTmFtZT1pQyxvLnR5cGU9ImJ1dHRvbiIsby50YWJJbmRleD0t''@;'; put 'put ''MSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiYoS28obyxbWyJhcmlhLWhpZGRlbiIsInRydWUiXSxOMygiICIpXSksS28ocixbcHhlKCJtZW51IildKSksby5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9O2NvbnN0IGE9ci5maXJzdENoaWxkO2lmKCFhKXJldHVybjtjb25z''@;'; put 'put ''dCBsPWEucXVlcnlTZWxlY3RvcigiLmNvbEhlYWRlciIpO2w/YS5pbnNlcnRCZWZvcmUobyxsLm5leHRTaWJsaW5nKTphLmFwcGVuZENoaWxkKG8pfSksc3godGhpcyxJMGUsdD0+QUcodGhpcyx4Tik/bnVsbDp0KSxzeCh0aGlzLEQwZSx0PT57TGEoQWEodCksaUMpJiZzeCh0aGlzLHhOLCEw''@;'; put 'put ''KX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixBRyh0aGlzLFIwZSkpfX1mdW5jdGlvbiBuUGUobil7bi5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKT8uYWRkQ3VzdG9tU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sL01ldGEiLCJBIl1dLGNhbGxiYWNrOigpPT4h''@;'; put 'put ''MX1dKX1mdW5jdGlvbiBqanQobil7Y29uc3QgZT1BYShuKTtpZihMYShlLGlDKSl7Y29uc3QgdD1ZWih0aGlzLm1lbnU/LmNvbnRhaW5lcj8/dGhpcy5ob3Qucm9vdEVsZW1lbnQsdGhpcy5ob3Qucm9vdERvY3VtZW50KSxyPXdfKHRoaXMsazBlLHJQZSkuY2FsbCh0aGlzLGUpO24uc3RvcFBy''@;'; put 'put ''b3BhZ2F0aW9uKCksc3godGhpcyx4TiwhMSksdGhpcy5vcGVuKHtsZWZ0OnIubGVmdCt0LmxlZnQsdG9wOnIuYm90dG9tK3QudG9wfSx7bGVmdDpyLndpZHRoLHJpZ2h0OjAsYWJvdmU6MCxiZWxvdzozfSl9fWZ1bmN0aW9uIHJQZShuKXtjb25zdCBlPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0''@;'; put 'put ''KCksdD10aGlzLmhvdC5yb290V2luZG93LmdldENvbXB1dGVkU3R5bGUobiwiOjpiZWZvcmUiKSxyPU51bWJlci5wYXJzZUZsb2F0KHQud2lkdGgpO2lmKE51bWJlci5pc0Zpbml0ZShyKSYmZS53aWR0aD49ciYmZS5oZWlnaHQ+PXIpe2NvbnN0IGk9ZS5sZWZ0KyhlLndpZHRoLXIpLzIsbz1l''@;'; put 'put ''LnRvcCsoZS5oZWlnaHQtcikvMjtyZXR1cm57dG9wOm8sbGVmdDppLHJpZ2h0Omkrcixib3R0b206bytyLHdpZHRoOnIsaGVpZ2h0OnJ9fXJldHVybnt0b3A6ZS50b3AsbGVmdDplLmxlZnQscmlnaHQ6ZS5yaWdodCxib3R0b206ZS5ib3R0b20sd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWln''@;'; put 'put ''aHR9fWZ1bmN0aW9uIFVqdCgpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRyb3Bkb3duTWVudVNob3ciLHRoaXMpLHdfKHRoaXMsQTBlLG5QZSkuY2FsbCh0aGlzLHRoaXMubWVudSl9ZnVuY3Rpb24gemp0KG4pe3dfKHRoaXMsQTBlLG5QZSkuY2FsbCh0aGlzLG4pfWZ1bmN0aW9uIFdqdCgp''@;'; put 'put ''e3RoaXMuaG90Lmxpc3RlbigpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiLHRoaXMpfUlHLlNFUEFSQVRPUj17bmFtZTp2c307Y29uc3QgaVBlPWNsYXNzIFlqdHtzZXRPcHRpb25zKGUpe3RoaXMub3B0aW9ucz1lJiYiY29sdW1uSGVhZGVycyJpbiBlJiYhKCJj''@;'; put 'put ''b2xIZWFkZXJzImluIGUpP3suLi5lLGNvbEhlYWRlcnM6ZS5jb2x1bW5IZWFkZXJzfTplfV9leHRyYWN0RGF0YU1hdHJpeChlKXtjb25zdHtzdGFydFJvdzp0LHN0YXJ0Q29sOnIsZW5kUm93OmksZW5kQ29sOm99PXRoaXMuX2dldERhdGFSYW5nZSgpLGE9dGhpcy5vcHRpb25zLGw9W107Zm9y''@;'; put 'put ''KGxldCB1PXQ7dTw9aTt1Kyspe2lmKCExPT09YS5leHBvcnRIaWRkZW5Sb3dzJiZ0aGlzLl9pc0hpZGRlblJvdyh1KSljb250aW51ZTtjb25zdCBnPVtdO2ZvcihsZXQgRT1yO0U8PW87RSsrKSExPT09YS5leHBvcnRIaWRkZW5Db2x1bW5zJiZ0aGlzLl9pc0hpZGRlbkNvbHVtbihFKXx8Zy5w''@;'; put 'put ''dXNoKGUodSxFKSk7bC5wdXNoKGcpfXJldHVybiBsfWdldERhdGEoKXtyZXR1cm4gdGhpcy5fZXh0cmFjdERhdGFNYXRyaXgoKGUsdCk9PnRoaXMuaG90LmdldERhdGFBdENlbGwoZSx0KSl9Z2V0Um93SGVhZGVycygpe2NvbnN0IGU9W107aWYodGhpcy5vcHRpb25zLnJvd0hlYWRlcnMpe2Nv''@;'; put 'put ''bnN0e3N0YXJ0Um93OnQsZW5kUm93OnJ9PXRoaXMuX2dldERhdGFSYW5nZSgpLGk9dGhpcy5ob3QuZ2V0Um93SGVhZGVyKCk7Zm9yKGxldCBvPXQ7bzw9cjtvKyspITE9PT10aGlzLm9wdGlvbnMuZXhwb3J0SGlkZGVuUm93cyYmdGhpcy5faXNIaWRkZW5Sb3cobyl8fGUucHVzaChpW29dKX1y''@;'; put 'put ''ZXR1cm4gZX1nZXRDb2x1bW5IZWFkZXJzKCl7Y29uc3QgZT1bXTtpZih0aGlzLm9wdGlvbnMuY29sSGVhZGVycyl7Y29uc3R7c3RhcnRDb2w6dCxlbmRDb2w6cn09dGhpcy5fZ2V0RGF0YVJhbmdlKCksaT10aGlzLmhvdC5nZXRDb2xIZWFkZXIoKTtmb3IobGV0IG89dDtvPD1yO28rKykhMT09''@;'; put 'put ''PXRoaXMub3B0aW9ucy5leHBvcnRIaWRkZW5Db2x1bW5zJiZ0aGlzLl9pc0hpZGRlbkNvbHVtbihvKXx8ZS5wdXNoKGlbb10pfXJldHVybiBlfV9nZXREYXRhUmFuZ2UoKXtjb25zdCBlPXRoaXMuaG90LmNvdW50Q29scygpLTEsdD10aGlzLmhvdC5jb3VudFJvd3MoKS0xO2xldFtyPTAsaT0w''@;'; put 'put ''LG89dCxhPWVdPXRoaXMub3B0aW9ucy5yYW5nZTtyZXR1cm4gcj1NYXRoLm1heChyLDApLGk9TWF0aC5tYXgoaSwwKSxvPU1hdGgubWluKG8sdCksYT1NYXRoLm1pbihhLGUpLHtzdGFydFJvdzpyLHN0YXJ0Q29sOmksZW5kUm93Om8sZW5kQ29sOmF9fWdldFNvdXJjZURhdGEoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fZXh0cmFjdERhdGFNYXRyaXgoKGUsdCk9PnRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwoZSx0KSl9Z2V0RXhjbHVkZWRIaWRkZW5Sb3dzKCl7Y29uc3QgZT1uZXcgU2V0O2lmKCExIT09dGhpcy5vcHRpb25zLmV4cG9ydEhpZGRlblJvd3MpcmV0dXJuIGU7Y29uc3R7c3RhcnRS''@;'; put 'put ''b3c6dCxlbmRSb3c6cn09dGhpcy5fZ2V0RGF0YVJhbmdlKCk7Zm9yKGxldCBpPXQ7aTw9cjtpKyspdGhpcy5faXNIaWRkZW5Sb3coaSkmJmUuYWRkKHRoaXMuaG90LnRvUGh5c2ljYWxSb3coaSkpO3JldHVybiBlfWdldEV4Y2x1ZGVkSGlkZGVuQ29sdW1ucygpe2NvbnN0IGU9bmV3IFNldDtp''@;'; put 'put ''ZighMSE9PXRoaXMub3B0aW9ucy5leHBvcnRIaWRkZW5Db2x1bW5zKXJldHVybiBlO2NvbnN0e3N0YXJ0Q29sOnQsZW5kQ29sOnJ9PXRoaXMuX2dldERhdGFSYW5nZSgpO2ZvcihsZXQgaT10O2k8PXI7aSsrKXRoaXMuX2lzSGlkZGVuQ29sdW1uKGkpJiZlLmFkZCh0aGlzLmhvdC50b1BoeXNp''@;'; put 'put ''Y2FsQ29sdW1uKGkpKTtyZXR1cm4gZX1nZXRIaWRkZW5Sb3dEYXRhSW5kaWNlcygpe2lmKCJoaWRlIiE9PXRoaXMub3B0aW9ucy5leHBvcnRIaWRkZW5Sb3dzKXJldHVybltdO2NvbnN0e3N0YXJ0Um93OmUsZW5kUm93OnR9PXRoaXMuX2dldERhdGFSYW5nZSgpLHI9W107bGV0IGk9MDtmb3Io''@;'; put 'put ''bGV0IG89ZTtvPD10O28rKyl0aGlzLl9pc0hpZGRlblJvdyhvKSYmci5wdXNoKGkpLGkrPTE7cmV0dXJuIHJ9Z2V0SGlkZGVuQ29sdW1uRGF0YUluZGljZXMoKXtpZigiaGlkZSIhPT10aGlzLm9wdGlvbnMuZXhwb3J0SGlkZGVuQ29sdW1ucylyZXR1cm5bXTtjb25zdHtzdGFydENvbDplLGVu''@;'; put 'put ''ZENvbDp0fT10aGlzLl9nZXREYXRhUmFuZ2UoKSxyPVtdO2xldCBpPTA7Zm9yKGxldCBvPWU7bzw9dDtvKyspdGhpcy5faXNIaWRkZW5Db2x1bW4obykmJnIucHVzaChpKSxpKz0xO3JldHVybiByfWdldEZvcm11bGFzU2VwYXJhdG9yKCl7Y29uc3QgZT10aGlzLmhvdC5nZXRQbHVnaW4oImZv''@;'; put 'put ''cm11bGFzIik7cmV0dXJuIGUmJmUuaXNFbmFibGVkKCk/ZS5lbmdpbmU/LmdldENvbmZpZygpPy5mdW5jdGlvbkFyZ1NlcGFyYXRvcj8/IiwiOiIsIn1nZXRDZWxsc01ldGEoKXtyZXR1cm4gdGhpcy5fZXh0cmFjdERhdGFNYXRyaXgoKGUsdCk9PnRoaXMuaG90LmdldENlbGxNZXRhKGUsdCkp''@;'; put 'put ''fWdldENlbGxFbGVtZW50cygpe3JldHVybiB0aGlzLl9leHRyYWN0RGF0YU1hdHJpeCgoZSx0KT0+dGhpcy5ob3QuZ2V0Q2VsbChlLHQpKX1nZXRNZXJnZUNlbGxzKCl7Y29uc3R7c3RhcnRSb3c6ZSxzdGFydENvbDp0LGVuZFJvdzpyLGVuZENvbDppfT10aGlzLl9nZXREYXRhUmFuZ2UoKSxv''@;'; put 'put ''PXRoaXMuaG90LmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2lmKCFvfHwhby5pc0VuYWJsZWQoKSlyZXR1cm5bXTtjb25zdCBsPVtdLHU9ITE9PT10aGlzLm9wdGlvbnMuZXhwb3J0SGlkZGVuUm93cyxnPSExPT09dGhpcy5vcHRpb25zLmV4cG9ydEhpZGRlbkNvbHVtbnMsRT1aPT4hdXx8IXRo''@;'; put 'put ''aXMuX2lzSGlkZGVuUm93KFopLE89Wj0+IWd8fCF0aGlzLl9pc0hpZGRlbkNvbHVtbihaKTtyZXR1cm4gby5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMuZm9yRWFjaChaPT57Y29uc3QgZWU9Wi5yb3crWi5yb3dzcGFuLTEsdmU9Wi5jb2wrWi5jb2xzcGFuLTE7aWYoWi5yb3c8''@;'; put 'put ''ZXx8ZWU+cnx8Wi5jb2w8dHx8dmU+aXx8IUUoWi5yb3cpfHwhTyhaLmNvbCkpcmV0dXJuO2NvbnN0IE1lPXRoaXMuX2NvdW50VmlzaWJsZUJlZm9yZShaLnJvdyxlLEUpLEhlPXRoaXMuX2NvdW50VmlzaWJsZUJlZm9yZShaLmNvbCx0LE8pLFdlPXRoaXMuX2NvdW50VmlzaWJsZUJlZm9yZShl''@;'; put 'put ''ZSsxLFoucm93LEUpLGF0PXRoaXMuX2NvdW50VmlzaWJsZUJlZm9yZSh2ZSsxLFouY29sLE8pO1dlPD0xJiZhdDw9MXx8bC5wdXNoKHtyb3c6TWUsY29sOkhlLHJvd3NwYW46V2UsY29sc3BhbjphdH0pfSksbH1nZXRDb2x1bW5zV2lkdGhzKCl7Y29uc3R7c3RhcnRDb2w6ZSxlbmRDb2w6dH09''@;'; put 'put ''dGhpcy5fZ2V0RGF0YVJhbmdlKCkscj10aGlzLm9wdGlvbnMsaT1bXTtmb3IobGV0IG89ZTtvPD10O28rKyl7aWYoITE9PT1yLmV4cG9ydEhpZGRlbkNvbHVtbnMmJnRoaXMuX2lzSGlkZGVuQ29sdW1uKG8pKWNvbnRpbnVlO2NvbnN0IGE9dGhpcy5faXNIaWRkZW5Db2x1bW4obyk/dGhpcy5f''@;'; put 'put ''Z2V0TmF0dXJhbENvbFdpZHRoKG8pOnRoaXMuaG90LmdldENvbFdpZHRoKG8pO2kucHVzaChhKX1yZXR1cm4gaX1nZXRSb3dzSGVpZ2h0cygpe2NvbnN0e3N0YXJ0Um93OmUsZW5kUm93OnR9PXRoaXMuX2dldERhdGFSYW5nZSgpLHI9dGhpcy5vcHRpb25zLGk9W107Zm9yKGxldCBvPWU7bzw9''@;'; put 'put ''dDtvKyspe2lmKCExPT09ci5leHBvcnRIaWRkZW5Sb3dzJiZ0aGlzLl9pc0hpZGRlblJvdyhvKSljb250aW51ZTtjb25zdCBhPXRoaXMuX2lzSGlkZGVuUm93KG8pP3RoaXMuX2dldE5hdHVyYWxSb3dIZWlnaHQobyk6dGhpcy5ob3QuZ2V0Um93SGVpZ2h0KG8pO2kucHVzaChhKX1yZXR1cm4g''@;'; put 'put ''aX1nZXRGcm96ZW5Sb3dzKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wfHwwfWdldEZyb3plbkNvbHVtbnMoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydHx8MH1nZXROZXN0ZWRDb2x1bW5IZWFkZXJzKCl7Y29uc3Qg''@;'; put 'put ''ZT10aGlzLmhvdC5nZXRQbHVnaW4oIm5lc3RlZEhlYWRlcnMiKTtpZighZXx8IWUuaXNFbmFibGVkKCkpcmV0dXJuIG51bGw7Y29uc3QgdD1lLmdldExheWVyc0NvdW50KCkse3N0YXJ0Q29sOnIsZW5kQ29sOml9PXRoaXMuX2dldERhdGFSYW5nZSgpLGE9ISF0aGlzLm9wdGlvbnMuZXhwb3J0''@;'; put 'put ''SGlkZGVuQ29sdW1ucyxsPVtdO2ZvcihsZXQgdT0wO3U8dDt1Kyspe2NvbnN0IGc9W107bGV0IEU9cjtmb3IoO0U8PWk7KWF8fCF0aGlzLl9pc0hpZGRlbkNvbHVtbihFKT9FPWE/dGhpcy5fYXBwZW5kTmVzdGVkSGVhZGVyV2l0aEhpZGRlbihlLHUsRSxpLGcpOnRoaXMuX2FwcGVuZE5lc3Rl''@;'; put 'put ''ZEhlYWRlcldpdGhvdXRIaWRkZW4oZSx1LEUsaSxnKTpFKz0xO2wucHVzaChnKX1yZXR1cm4gbH1fYXBwZW5kTmVzdGVkSGVhZGVyV2l0aEhpZGRlbihlLHQscixpLG8pe2NvbnN0IGE9ZS5nZXRTdGF0ZU1hbmFnZXIoKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEodCxyKTtpZighYXx8YS5jb2x1''@;'; put 'put ''bW5JbmRleD09PXIpe2NvbnN0IGw9YT8ub3JpZ0NvbHNwYW4/PzEsdT1NYXRoLm1pbihsLGktcisxKSxnPShhPy5oZWFkZXJDbGFzc05hbWVzPz9bXSkuam9pbigiICIpO3JldHVybiBvLnB1c2goe2xhYmVsOmE/LmxhYmVsPz8iIixjb2xzcGFuOnUsY2xhc3NOYW1lOmd9KSxyK2x9cmV0dXJu''@;'; put 'put ''IG8ucHVzaCh7bGFiZWw6IiIsY29sc3BhbjoxLGNsYXNzTmFtZToiIn0pLHIrMX1fYXBwZW5kTmVzdGVkSGVhZGVyV2l0aG91dEhpZGRlbihlLHQscixpLG8pe2NvbnN0IGE9ZS5nZXRIZWFkZXJTZXR0aW5ncyh0LHIpO2lmKCFhfHxhLmlzUm9vdCl7Y29uc3QgbD1hPy5jb2xzcGFuPz8xO2xl''@;'; put 'put ''dCB1PTA7Zm9yKGxldCBFPXI7RTxyK2wmJkU8PWk7RSsrKXRoaXMuX2lzSGlkZGVuQ29sdW1uKEUpfHwodSs9MSk7Y29uc3QgZz0oYT8uaGVhZGVyQ2xhc3NOYW1lcz8/W10pLmpvaW4oIiAiKTtyZXR1cm4gby5wdXNoKHtsYWJlbDphPy5sYWJlbD8/IiIsY29sc3Bhbjp1LGNsYXNzTmFtZTpn''@;'; put 'put ''fSkscitsfXJldHVybiBvLnB1c2goe2xhYmVsOiIiLGNvbHNwYW46MSxjbGFzc05hbWU6IiJ9KSxyKzF9Z2V0Q29sdW1uSGVhZGVyc0NsYXNzTmFtZXMoKXtpZighdGhpcy5vcHRpb25zLmNvbEhlYWRlcnMpcmV0dXJuW107Y29uc3R7c3RhcnRDb2w6ZSxlbmRDb2w6dH09dGhpcy5fZ2V0RGF0''@;'; put 'put ''YVJhbmdlKCkscj10aGlzLm9wdGlvbnMsaT1bXTtmb3IobGV0IG89ZTtvPD10O28rKyl7aWYoITE9PT1yLmV4cG9ydEhpZGRlbkNvbHVtbnMmJnRoaXMuX2lzSGlkZGVuQ29sdW1uKG8pKWNvbnRpbnVlO2NvbnN0IGE9dGhpcy5ob3QuZ2V0Q29sdW1uTWV0YShvKS5oZWFkZXJDbGFzc05hbWU7''@;'; put 'put ''bGV0IGw9IiI7QXJyYXkuaXNBcnJheShhKT9sPWEuam9pbigiICIpOiJzdHJpbmciPT10eXBlb2YgYSYmKGw9YSksaS5wdXNoKGwpfXJldHVybiBpfWdldExheW91dERpcmVjdGlvbigpe3JldHVybiJydGwiPT09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5sYXlvdXREaXJlY3Rpb24/InJ0bCI6''@;'; put 'put ''Imx0ciJ9Z2V0Q29sdW1uU3VtbWFyaWVzKCl7Y29uc3QgZT10aGlzLmhvdC5nZXRQbHVnaW4oImNvbHVtblN1bW1hcnkiKTtpZighZXx8IWUuaXNFbmFibGVkKCkpcmV0dXJuW107Y29uc3R7c3RhcnRSb3c6dCxzdGFydENvbDpyLGVuZFJvdzppLGVuZENvbDpvfT10aGlzLl9nZXREYXRhUmFu''@;'; put 'put ''Z2UoKSxhPWUuZW5kcG9pbnRzLmdldEFsbEVuZHBvaW50cygpLGw9bmV3IFNldDthLmZvckVhY2goZz0+e2lmKHZvaWQgMD09PWcuZGVzdGluYXRpb25Sb3cpcmV0dXJuO2NvbnN0IEU9dGhpcy5fcGh5c2ljYWxSb3dUb0RhdGFJbmRleChnLmRlc3RpbmF0aW9uUm93LHQsaSk7bnVsbCE9PUUm''@;'; put 'put ''JmwuYWRkKEUpfSk7Y29uc3QgdT1bXTtyZXR1cm4gYS5mb3JFYWNoKGc9Pntjb25zdCBFPXRoaXMuX3RyYW5zZm9ybUVuZHBvaW50VG9TdW1tYXJ5KGcsdCxpLHIsbyxsKTtudWxsIT09RSYmdS5wdXNoKEUpfSksdX1fdHJhbnNmb3JtRW5kcG9pbnRUb1N1bW1hcnkoZSx0LHIsaSxvLGEpe2lm''@;'; put 'put ''KHZvaWQgMD09PWUuZGVzdGluYXRpb25Sb3d8fHZvaWQgMD09PWUuZGVzdGluYXRpb25Db2x1bW4pcmV0dXJuIG51bGw7Y29uc3QgbD10aGlzLl9waHlzaWNhbFJvd1RvRGF0YUluZGV4KGUuZGVzdGluYXRpb25Sb3csdCxyKSx1PXRoaXMuX3BoeXNpY2FsQ29sVG9EYXRhSW5kZXgoZS5kZXN0''@;'; put 'put ''aW5hdGlvbkNvbHVtbixpLG8pO2lmKG51bGw9PT1sfHxudWxsPT09dSlyZXR1cm4gbnVsbDtjb25zdCBFPXRoaXMuX3BoeXNpY2FsQ29sVG9EYXRhSW5kZXgoZS5zb3VyY2VDb2x1bW4/P2UuZGVzdGluYXRpb25Db2x1bW4saSxvKTtpZihudWxsPT09RSlyZXR1cm4gbnVsbDtjb25zdCBPPWUu''@;'; put 'put ''cmFuZ2VzfHxbWzAsdGhpcy5ob3QuY291bnRSb3dzKCktMV1dLFo9W107cmV0dXJuIE8uZm9yRWFjaChlZT0+e2NvbnN0IE1lPXZvaWQgMCE9PWVlWzFdP2VlWzFdOmVlWzBdO2ZvcihsZXQgSGU9ZWVbMF07SGU8PU1lO0hlKyspe2NvbnN0IFdlPXRoaXMuX3BoeXNpY2FsUm93VG9EYXRhSW5k''@;'; put 'put ''ZXgoSGUsdCxyKTtpZihudWxsIT09V2UmJiFhLmhhcyhXZSkpe2lmKFoubGVuZ3RoPjApe2NvbnN0IGF0PVpbWi5sZW5ndGgtMV07aWYoYXRbMV0rMT09PVdlKXthdFsxXT1XZTtjb250aW51ZX19Wi5wdXNoKFtXZSxXZV0pfX19KSwwPT09Wi5sZW5ndGg/bnVsbDp7ZGVzdFJvdzpsLGRlc3RD''@;'; put 'put ''b2w6dSx0eXBlOlN0cmluZyhlLnR5cGV8fCJzdW0iKS50b0xvd2VyQ2FzZSgpLHNvdXJjZUNvbDpFLHNvdXJjZVJhbmdlczpafX1fY291bnRWaXNpYmxlQmVmb3JlKGUsdCxyKXtsZXQgaT0wO2ZvcihsZXQgbz10O288ZTtvKyspcihvKSYmKGkrPTEpO3JldHVybiBpfV9waHlzaWNhbFJvd1Rv''@;'; put 'put ''RGF0YUluZGV4KGUsdCxyKXtjb25zdCBpPXRoaXMuaG90LnRvVmlzdWFsUm93KGUpO3JldHVybiBudWxsPT09aXx8aTx0fHxpPnJ8fCExPT09dGhpcy5vcHRpb25zLmV4cG9ydEhpZGRlblJvd3MmJnRoaXMuX2lzSGlkZGVuUm93KGkpP251bGw6dGhpcy5fY291bnRWaXNpYmxlQmVmb3JlKGks''@;'; put 'put ''dCxvPT4hMSE9PXRoaXMub3B0aW9ucy5leHBvcnRIaWRkZW5Sb3dzfHwhdGhpcy5faXNIaWRkZW5Sb3cobykpfV9waHlzaWNhbENvbFRvRGF0YUluZGV4KGUsdCxyKXtjb25zdCBpPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGUpO3JldHVybiBudWxsPT09aXx8aTx0fHxpPnJ8fCExPT09dGhp''@;'; put 'put ''cy5vcHRpb25zLmV4cG9ydEhpZGRlbkNvbHVtbnMmJnRoaXMuX2lzSGlkZGVuQ29sdW1uKGkpP251bGw6dGhpcy5fY291bnRWaXNpYmxlQmVmb3JlKGksdCxvPT4hMSE9PXRoaXMub3B0aW9ucy5leHBvcnRIaWRkZW5Db2x1bW5zfHwhdGhpcy5faXNIaWRkZW5Db2x1bW4obykpfV9nZXROYXR1''@;'; put 'put ''cmFsQ29sV2lkdGgoZSl7Y29uc3QgdD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLHI9dGhpcy5ob3QuZ2V0Q29sdW1uTWV0YShlKS53aWR0aDtpZihudWxsIT1yKXJldHVybiByO2NvbnN0e2NvbFdpZHRoczppLGRlZmF1bHRDb2x1bW5XaWR0aDpvfT10LGE9bz8/NTA7cmV0dXJuIEFycmF5Lmlz''@;'; put 'put ''QXJyYXkoaSk/aVtlXT8/YToiZnVuY3Rpb24iPT10eXBlb2YgaT9pKGUpPz9hOiJudW1iZXIiPT10eXBlb2YgaT9pOmF9X2dldE5hdHVyYWxSb3dIZWlnaHQoZSl7Y29uc3QgdD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLHtyb3dIZWlnaHRzOnIsZGVmYXVsdFJvd0hlaWdodDppfT10LG89aT8/''@;'; put 'put ''MjM7cmV0dXJuIEFycmF5LmlzQXJyYXkocik/cltlXT8/bzoiZnVuY3Rpb24iPT10eXBlb2Ygcj9yKGUpPz9vOiJudW1iZXIiPT10eXBlb2Ygcj9yOm99X2lzSGlkZGVuUm93KGUpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsUm93''@;'; put 'put ''KGUpKX1faXNIaWRkZW5Db2x1bW4oZSl7cmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oZSkpfWNvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz17fSx0aGlzLmhvdD1lfX07Y2xhc3MgTDBle3N0YXRpYyBnZXQgREVG''@;'; put 'put ''QVVMVF9PUFRJT05TKCl7cmV0dXJue21pbWVUeXBlOiJ0ZXh0L3BsYWluIixmaWxlRXh0ZW5zaW9uOiJ0eHQiLGZpbGVuYW1lOiJIYW5kc29udGFibGUgW1lZWVldLVtNTV0tW0REXSIsZW5jb2Rpbmc6InV0Zi04Iixib206ITEsY29sSGVhZGVyczohMSxyb3dIZWFkZXJzOiExLGV4cG9ydEhp''@;'; put 'put ''ZGRlbkNvbHVtbnM6ITEsZXhwb3J0SGlkZGVuUm93czohMSxyYW5nZTpbXX19Z2V0IGJpbmFyeSgpe3JldHVybiExfWlzQmluYXJ5KCl7cmV0dXJuIHRoaXMuYmluYXJ5fWlzVGV4dCgpe3JldHVybiF0aGlzLmJpbmFyeX1leHBvcnQoKXtKcigiZXhwb3J0KCkgbXVzdCBiZSBpbXBsZW1lbnRl''@;'; put 'put ''ZCBieSBzdWJjbGFzcyIpfV9tZXJnZU9wdGlvbnMoZSl7bGV0IHI9cTUodGhpcy5jb25zdHJ1Y3Rvci5ERUZBVUxUX09QVElPTlMpO2NvbnN0IGk9bmV3IERhdGU7cmV0dXJuIHI9WWQocTUoTDBlLkRFRkFVTFRfT1BUSU9OUyksciksZSYmImNvbHVtbkhlYWRlcnMiaW4gZSYmISgiY29sSGVh''@;'; put 'put ''ZGVycyJpbiBlKSYmKGU9ey4uLmUsY29sSGVhZGVyczplLmNvbHVtbkhlYWRlcnN9KSxyPVlkKHIsZSksci5maWxlbmFtZT1mTChyLmZpbGVuYW1lLHtZWVlZOmkuZ2V0RnVsbFllYXIoKSxNTTpgJHtpLmdldE1vbnRoKCkrMX1gLnBhZFN0YXJ0KDIsIjAiKSxERDpgJHtpLmdldERhdGUoKX1g''@;'; put 'put ''LnBhZFN0YXJ0KDIsIjAiKX0pLHJ9Y29uc3RydWN0b3IoZSx0KXt0aGlzLmRhdGFQcm92aWRlcj1lLHRoaXMub3B0aW9ucz10aGlzLl9tZXJnZU9wdGlvbnModCksdGhpcy5kYXRhUHJvdmlkZXIuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpfX1jb25zdCBvUGU9TDBlO2Z1bmN0aW9uIGFQZShu''@;'; put 'put ''LGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiBzUGUobixlKXsoZnVuY3Rpb24gWmp0KG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sZSksZS5hZGQobil9dmFyIGNQZT1uZXcgV2Vha1NldCx1UGU9bmV3IFdlYWtTZXQ7ZnVuY3Rpb24gdFV0KG4pe3JldHVybiBuLnN0YXJ0c1dpdGgoIj0iKXx8bi5z''@;'; put 'put ''dGFydHNXaXRoKCIrIil8fG4uc3RhcnRzV2l0aCgiLSIpfHxuLnN0YXJ0c1dpdGgoIkAiKXx8bi5zdGFydHNXaXRoKCJcdCIpfHxuLnN0YXJ0c1dpdGgoIlxyIik/YCcke259YDpufWZ1bmN0aW9uIG5VdChuLGUpe3JldHVybiBlLnRlc3Qobik/YCcke259YDpufWNvbnN0IGlVdD17c3VtOiJT''@;'; put 'put ''VU0iLG1pbjoiTUlOIixtYXg6Ik1BWCIsY291bnQ6IkNPVU5UIixhdmVyYWdlOiJBVkVSQUdFIn07ZnVuY3Rpb24gQU4obil7bGV0IGU9IiIsdD1uO2Zvcig7dD4wOyllPVN0cmluZy5mcm9tQ2hhckNvZGUoNjUrKHQtMSklMjYpK2UsdD1NYXRoLmZsb29yKCh0LTEpLzI2KTtyZXR1cm4gZX1m''@;'; put 'put ''dW5jdGlvbiBkUGUobil7bGV0IGU9MDtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKyllPTI2KmUrKG4uY2hhckNvZGVBdCh0KS02NCk7cmV0dXJuIGV9ZnVuY3Rpb24gaFBlKG4sZSl7bGV0IHQ9MDtyZXR1cm4gbi5mb3JFYWNoKHI9PntyPGUmJih0Kz0xKX0pLHR9ZnVuY3Rpb24gbFV0KG4s''@;'; put 'put ''ZSx0LHIsaSxvKXtsZXQgYT1uLnN0YXJ0c1dpdGgoIj0iKT9uLnNsaWNlKDEpOm47Y29uc3QgbD0oaT8uc2l6ZT8/MCk+MCx1PShvPy5zaXplPz8wKT4wO3JldHVybigwIT09dHx8MCE9PXJ8fGx8fHUpJiYoYT1hLnJlcGxhY2UobmV3IFJlZ0V4cCgnKCIoPzpbXiJdfCIiKSoifFwnW15cJ10q''@;'; put 'put ''XCcpfCg/PCFcXGQpKFxcJD8pKFtBLVpdezEsM30pKFxcJD8pKFxcZHsxLDd9KSg/IVxcKCknLCJnIiksKGcsRSxPLFosZWUsdmUpPT57aWYodm9pZCAwIT09RSlyZXR1cm4gRTtjb25zdCBNZT1kUGUoWiktMSxIZT1OdW1iZXIucGFyc2VJbnQodmUsMTApLTEsV2U9dSYmbz9oUGUobyxNZSk6''@;'; put 'put ''MCxhdD1sJiZpP2hQZShpLEhlKTowLEN0PWRQZShaKStyLVdlLEF0PU51bWJlci5wYXJzZUludCh2ZSwxMCkrdC1hdDtyZXR1cm5gJHtPfSR7QU4oQ3QpfSR7ZWV9JHtBdH1gfSkpLGUmJiIsIiE9PWUmJihhPWZ1bmN0aW9uIHNVdChuLGUsdCl7bGV0IHI9IiIsaT0hMSxvPSIiO2ZvcihsZXQg''@;'; put 'put ''YT0wO2E8bi5sZW5ndGg7YSsrKXtjb25zdCBsPW5bYV07aT8ocis9bCxsPT09byYmKG5bYSsxXT09PW8/KHIrPW5bYSsxXSxhKz0xKTppPSExKSk6JyInPT09bHx8IiciPT09bD8oaT0hMCxvPWwscis9bCk6bi5zdGFydHNXaXRoKGUsYSk/KHIrPXQsYSs9ZS5sZW5ndGgtMSk6cis9bH1yZXR1''@;'; put 'put ''cm4gcn0oYSxlLCIsIikpLGF9ZnVuY3Rpb24gTzBlKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP24uZmlsdGVyKGU9PiJzdHJpbmciPT10eXBlb2YgZSYmZS5sZW5ndGg+MCk6InN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQoIiAiKS5maWx0ZXIoZT0+ZS5sZW5ndGg+MCk6W119Y29uc3Qg''@;'; put 'put ''TjBlPW5ldyBXZWFrTWFwLEYwZT1uZXcgV2Vha01hcCxERz1uZXcgU2V0KFsiaHRMZWZ0IiwiaHRSaWdodCIsImh0Q2VudGVyIiwiaHRKdXN0aWZ5IiwiaHRUb3AiLCJodE1pZGRsZSIsImh0Qm90dG9tIl0pO2Z1bmN0aW9uIExHKG4pe2lmKCFuKXJldHVybiBudWxsO2NvbnN0IGU9bi5tYXRj''@;'; put 'put ''aCgvcmdiYT9cKChcZCspLFxzKihcZCspLFxzKihcZCspKD86LFxzKihbXGQuXSspKT9cKS8pO3JldHVybiBlJiYwIT09KFpvKGVbNF0pP051bWJlci5wYXJzZUZsb2F0KGVbNF0pOjEpP2AjJHtOdW1iZXIucGFyc2VJbnQoZVsxXSwxMCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKX0k''@;'; put 'put ''e051bWJlci5wYXJzZUludChlWzJdLDEwKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpfSR7TnVtYmVyLnBhcnNlSW50KGVbM10sMTApLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIil9YC50b1VwcGVyQ2FzZSgpOm51bGx9ZnVuY3Rpb24gaFV0KG4sZSx0KXtjb25zdCByPWUuam9p''@;'; put 'put ''bigiICIpO2xldCBpPU4wZS5nZXQobik7aWYoaXx8KGk9bmV3IE1hcCxOMGUuc2V0KG4saSkpLGkuaGFzKHIpKXJldHVybiBpLmdldChyKT8/bnVsbDtjb25zdCBvPW4uY3JlYXRlRWxlbWVudCgiZGl2Iik7by5jbGFzc05hbWU9ImhhbmRzb250YWJsZSIsby5zdHlsZS5jc3NUZXh0PSJwb3Np''@;'; put 'put ''dGlvbjphYnNvbHV0ZTt0b3A6LTk5OTk5cHg7bGVmdDotOTk5OTlweDt2aXNpYmlsaXR5OmhpZGRlbjtwb2ludGVyLWV2ZW50czpub25lOyI7Y29uc3QgYT1uLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksbD1uLmNyZWF0ZUVsZW1lbnQoInRib2R5IiksdT1uLmNyZWF0ZUVsZW1lbnQoInRyIiks''@;'; put 'put ''Zz1uLmNyZWF0ZUVsZW1lbnQoInRkIik7Zy5jbGFzc05hbWU9cjtjb25zdCBFPW4uY3JlYXRlRWxlbWVudCgidGQiKTtFLmNsYXNzTmFtZT1lLmZpbHRlcih2ZT0+REcuaGFzKHZlKSkuam9pbigiICIpLHUuYXBwZW5kQ2hpbGQoZyksdS5hcHBlbmRDaGlsZChFKSxsLmFwcGVuZENoaWxkKHUp''@;'; put 'put ''LGEuYXBwZW5kQ2hpbGQobCksby5hcHBlbmRDaGlsZChhKSxuLmJvZHkuYXBwZW5kQ2hpbGQobyk7Y29uc3QgTz10LmdldENvbXB1dGVkU3R5bGUoZykuYmFja2dyb3VuZENvbG9yLFo9dC5nZXRDb21wdXRlZFN0eWxlKEUpLmJhY2tncm91bmRDb2xvcjtuLmJvZHkucmVtb3ZlQ2hpbGQobyk7''@;'; put 'put ''Y29uc3QgZWU9TyE9PVo/TEcoTyk6bnVsbDtyZXR1cm4gaS5zZXQocixlZSksZWV9ZnVuY3Rpb24gcFV0KG4sZSx0PW51bGwscj1udWxsKXtpZighbil7aWYoIXR8fCFyKXJldHVybiBudWxsO2NvbnN0IHU9TzBlKGUpO3JldHVybiB1LnNvbWUoZz0+IURHLmhhcyhnKSk/ZnVuY3Rpb24gZlV0''@;'; put 'put ''KG4sZSx0KXtjb25zdCByPXQuam9pbigiICIpO2xldCBpPUYwZS5nZXQobik7aWYoaXx8KGk9bmV3IE1hcCxGMGUuc2V0KG4saSkpLGkuaGFzKHIpKXJldHVybiBpLmdldChyKTtjb25zdCBvPW4uY3JlYXRlRWxlbWVudCgiZGl2Iik7by5jbGFzc05hbWU9ImhhbmRzb250YWJsZSIsby5zdHls''@;'; put 'put ''ZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTk5OTk5cHg7bGVmdDotOTk5OTlweDt2aXNpYmlsaXR5OmhpZGRlbjtwb2ludGVyLWV2ZW50czpub25lOyI7Y29uc3QgYT1uLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksbD1uLmNyZWF0ZUVsZW1lbnQoInRib2R5IiksdT1uLmNyZWF0''@;'; put 'put ''ZUVsZW1lbnQoInRyIiksZz1uLmNyZWF0ZUVsZW1lbnQoInRkIik7Zy5jbGFzc05hbWU9cjtjb25zdCBFPW4uY3JlYXRlRWxlbWVudCgidGQiKTtFLmNsYXNzTmFtZT10LmZpbHRlcihhdD0+REcuaGFzKGF0KSkuam9pbigiICIpLHUuYXBwZW5kQ2hpbGQoZyksdS5hcHBlbmRDaGlsZChFKSxs''@;'; put 'put ''LmFwcGVuZENoaWxkKHUpLGEuYXBwZW5kQ2hpbGQobCksby5hcHBlbmRDaGlsZChhKSxuLmJvZHkuYXBwZW5kQ2hpbGQobyk7Y29uc3QgTz1lLmdldENvbXB1dGVkU3R5bGUoZyksWj1lLmdldENvbXB1dGVkU3R5bGUoRSksZWU9Ty5iYWNrZ3JvdW5kQ29sb3IsdmU9Wi5iYWNrZ3JvdW5kQ29s''@;'; put 'put ''b3IsTWU9Ty5jb2xvcixIZT1aLmNvbG9yO24uYm9keS5yZW1vdmVDaGlsZChvKTtjb25zdCBXZT17Zm9udEJvbGQ6TnVtYmVyLnBhcnNlSW50KE8uZm9udFdlaWdodCwxMCk+PTcwMHx8ImJvbGQiPT09Ty5mb250V2VpZ2h0LGZvbnRJdGFsaWM6Iml0YWxpYyI9PT1PLmZvbnRTdHlsZSxmb250''@;'; put 'put ''VW5kZXJsaW5lOihPLnRleHREZWNvcmF0aW9uTGluZXx8Ty50ZXh0RGVjb3JhdGlvbnx8IiIpLmluY2x1ZGVzKCJ1bmRlcmxpbmUiKSxmb250Q29sb3I6TWUhPT1IZT9MRyhNZSk6bnVsbCxiYWNrZ3JvdW5kQ29sb3I6ZWUhPT12ZT9MRyhlZSk6bnVsbH07cmV0dXJuIGkuc2V0KHIsV2UpLFdl''@;'; put 'put ''fSh0LHIsdSk6bnVsbH1jb25zdCBpPW4ub3duZXJEb2N1bWVudD8uZGVmYXVsdFZpZXc7aWYoIWkpcmV0dXJuIG51bGw7Y29uc3Qgbz1pLmdldENvbXB1dGVkU3R5bGUobiksYT1PMGUoZSksbD1hLnNvbWUodT0+IURHLmhhcyh1KSk7cmV0dXJue2ZvbnRCb2xkOk51bWJlci5wYXJzZUludChv''@;'; put 'put ''LmZvbnRXZWlnaHQsMTApPj03MDB8fCJib2xkIj09PW8uZm9udFdlaWdodCxmb250SXRhbGljOiJpdGFsaWMiPT09by5mb250U3R5bGUsZm9udFVuZGVybGluZTooby50ZXh0RGVjb3JhdGlvbkxpbmV8fG8udGV4dERlY29yYXRpb258fCIiKS5pbmNsdWRlcygidW5kZXJsaW5lIiksZm9udENv''@;'; put 'put ''bG9yOmw/TEcoby5jb2xvcik6bnVsbCxiYWNrZ3JvdW5kQ29sb3I6bD9oVXQobi5vd25lckRvY3VtZW50LGEsaSk6bnVsbH19ZnVuY3Rpb24ga04obil7aWYoIW58fCJzdHJpbmciIT10eXBlb2YgbilyZXR1cm4iRkYwMDAwMDAiO2NvbnN0IGU9bi5zdGFydHNXaXRoKCIjIik/bi5zbGljZSgx''@;'; put 'put ''KTpuO3JldHVybiAzPT09ZS5sZW5ndGg/YEZGJHtlWzBdK2VbMF19JHtlWzFdK2VbMV19JHtlWzJdK2VbMl19YC50b1VwcGVyQ2FzZSgpOjY9PT1lLmxlbmd0aD9gRkYke2V9YC50b1VwcGVyQ2FzZSgpOjg9PT1lLmxlbmd0aD9lLnRvVXBwZXJDYXNlKCk6IkZGMDAwMDAwIn1mdW5jdGlvbiBm''@;'; put 'put ''UGUobil7cmV0dXJuIG4/cFBlKHtjbGFzc05hbWU6bn0pOm51bGx9ZnVuY3Rpb24gcFBlKG4pe2lmKCFuPy5jbGFzc05hbWUpcmV0dXJuIG51bGw7Y29uc3QgZT1PMGUobi5jbGFzc05hbWUpLHQ9e307cmV0dXJuIGUuaW5jbHVkZXMoImh0TGVmdCIpP3QuaG9yaXpvbnRhbD0ibGVmdCI6ZS5p''@;'; put 'put ''bmNsdWRlcygiaHRDZW50ZXIiKT90Lmhvcml6b250YWw9ImNlbnRlciI6ZS5pbmNsdWRlcygiaHRSaWdodCIpP3QuaG9yaXpvbnRhbD0icmlnaHQiOmUuaW5jbHVkZXMoImh0SnVzdGlmeSIpJiYodC5ob3Jpem9udGFsPSJqdXN0aWZ5IiksZS5pbmNsdWRlcygiaHRUb3AiKT90LnZlcnRpY2Fs''@;'; put 'put ''PSJ0b3AiOmUuaW5jbHVkZXMoImh0TWlkZGxlIik/dC52ZXJ0aWNhbD0ibWlkZGxlIjplLmluY2x1ZGVzKCJodEJvdHRvbSIpJiYodC52ZXJ0aWNhbD0iYm90dG9tIiksT2JqZWN0LmtleXModCkubGVuZ3RoPjA/dDpudWxsfWZ1bmN0aW9uIGdVdChuKXtyZXR1cm4gbj49Mz8idGhpY2siOjI9''@;'; put 'put ''PT1uPyJtZWRpdW0iOiJ0aGluIn1jb25zdCBiVXQ9RGF0ZS5VVEMoMTg5OSwxMSwzMCk7ZnVuY3Rpb24gQVV0KG4sZSl7aWYoIW4pcmV0dXJuIG51bGw7Y29uc3R7c3R5bGU6dCxjdXJyZW5jeTpyLG1pbmltdW1GcmFjdGlvbkRpZ2l0czppPTAsbWF4aW11bUZyYWN0aW9uRGlnaXRzOm8sdXNl''@;'; put 'put ''R3JvdXBpbmc6YT0hMH09bixsPW8/P2ksdT1sPjA/YC4keyIwIi5yZXBlYXQobCl9YDoiIixnPSExIT09YT8iIywjIzAiOiIwIjtpZigicGVyY2VudCI9PT10KXJldHVybmAke2d9JHt1fSVgO2lmKCJjdXJyZW5jeSI9PT10JiZyKXtjb25zdHtzeW1ib2w6RSxpc1ByZWZpeDpPfT1mdW5jdGlv''@;'; put 'put ''biB4VXQobixlKXt0cnl7Y29uc3QgdD1uZXcgSW50bC5OdW1iZXJGb3JtYXQoZXx8ImVuIix7c3R5bGU6ImN1cnJlbmN5IixjdXJyZW5jeTpuLG1pbmltdW1GcmFjdGlvbkRpZ2l0czowLG1heGltdW1GcmFjdGlvbkRpZ2l0czowfSkuZm9ybWF0VG9QYXJ0cygwKSxyPXQuZmluZChsPT4iY3Vy''@;'; put 'put ''cmVuY3kiPT09bC50eXBlKT8udmFsdWU/P24saT10LmZpbmRJbmRleChsPT4iY3VycmVuY3kiPT09bC50eXBlKSxvPXQuZmluZEluZGV4KGw9PiJpbnRlZ2VyIj09PWwudHlwZSk7cmV0dXJue3N5bWJvbDpyLGlzUHJlZml4Omk8b319Y2F0Y2h7cmV0dXJue3N5bWJvbDpuLGlzUHJlZml4OiEw''@;'; put 'put ''fX19KHIsZSk7cmV0dXJuIE8/YCR7RX0ke2d9JHt1fWA6YCR7Z30ke3V9JHtFfWB9cmV0dXJuYCR7Z30ke3V9YH1mdW5jdGlvbiBMZChuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2Ui''@;'; put 'put ''KTtyZXR1cm4gdH1mdW5jdGlvbiB6aChuLGUpeyhmdW5jdGlvbiBrVXQobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobixlKSxlLmFkZChuKX12YXIg''@;'; put 'put ''UDBlPW5ldyBXZWFrU2V0LGdQZT1uZXcgV2Vha1NldCxtUGU9bmV3IFdlYWtTZXQsdlBlPW5ldyBXZWFrU2V0LF9QZT1uZXcgV2Vha1NldCxPRz1uZXcgV2Vha1NldCx5UGU9bmV3IFdlYWtTZXQsYlBlPW5ldyBXZWFrU2V0LHdQZT1uZXcgV2Vha1NldCxDUGU9bmV3IFdlYWtTZXQsU1BlPW5l''@;'; put 'put ''dyBXZWFrU2V0LEVQZT1uZXcgV2Vha1NldCxNUGU9bmV3IFdlYWtTZXQsVFBlPW5ldyBXZWFrU2V0LHhQZT1uZXcgV2Vha1NldCxBUGU9bmV3IFdlYWtTZXQsa1BlPW5ldyBXZWFrU2V0LFJQZT1uZXcgV2Vha1NldCxJUGU9bmV3IFdlYWtTZXQsRFBlPW5ldyBXZWFrU2V0LExQZT1uZXcgV2Vh''@;'; put 'put ''a1NldDtmdW5jdGlvbiBPUGUobixlLHQscil7Y29uc3QgaT10LmdldERhdGEoKSxvPXQuZ2V0Q2VsbHNNZXRhKCksYT1MZCh0aGlzLExQZSxRVXQpLmNhbGwodGhpcyxuLG8pLGw9dC5nZXRDZWxsRWxlbWVudHMoKSx1PXQuZ2V0Q29sdW1uSGVhZGVycygpLGc9dC5nZXRDb2x1bW5IZWFkZXJz''@;'; put 'put ''Q2xhc3NOYW1lcygpLEU9dC5nZXRSb3dIZWFkZXJzKCksTz10LmdldENvbHVtbnNXaWR0aHMoKSxaPXQuZ2V0Um93c0hlaWdodHMoKSxlZT10LmdldE1lcmdlQ2VsbHMoKSx2ZT10LmdldEZyb3plblJvd3MoKSxNZT10LmdldEZyb3plbkNvbHVtbnMoKSxIZT10LmdldE5lc3RlZENvbHVtbkhl''@;'; put 'put ''YWRlcnMoKSxXZT0icnRsIj09PXQuZ2V0TGF5b3V0RGlyZWN0aW9uKCksYXQ9ci5leHBvcnRGb3JtdWxhcz8/ITEsQ3Q9bmV3IE1hcDt0LmdldENvbHVtblN1bW1hcmllcygpLmZvckVhY2god3M9PntDdC5zZXQoYCR7d3MuZGVzdFJvd306JHt3cy5kZXN0Q29sfWAsd3MpfSk7Y29uc3QgS3Q9''@;'; put 'put ''YXQ/dC5nZXRTb3VyY2VEYXRhKCk6bnVsbCxxdD1hdD90LmdldEZvcm11bGFzU2VwYXJhdG9yKCk6IiwiLGduPXUubGVuZ3RoPjAsVG49RS5sZW5ndGg+MCxDbj1udWxsIT09SGUmJmduO2xldCBxcj0wO0NuP3FyPUhlLmxlbmd0aDpnbiYmKHFyPTEpO2NvbnN0ICRuPXFyKzEsVHI9VG4/Mjox''@;'; put 'put ''LHJpPWF0P3QuZ2V0RXhjbHVkZWRIaWRkZW5Sb3dzKCk6bnVsbCxmbj1hdD90LmdldEV4Y2x1ZGVkSGlkZGVuQ29sdW1ucygpOm51bGwseXI9dC5nZXRIaWRkZW5Sb3dEYXRhSW5kaWNlcygpLEFuPXQuZ2V0SGlkZGVuQ29sdW1uRGF0YUluZGljZXMoKSx7cm9vdERvY3VtZW50OkhyLHJvb3RX''@;'; put 'put ''aW5kb3c6dGl9PXQuaG90O0xkKHRoaXMsVFBlLFlVdCkuY2FsbCh0aGlzLGUsTyxUbiksQW4ubGVuZ3RoPjAmJkxkKHRoaXMseFBlLFpVdCkuY2FsbCh0aGlzLGUsQW4sVG4pLExkKHRoaXMsa1BlLCRVdCkuY2FsbCh0aGlzLGUsdmUsTWUscXIsVG4sV2UpO2NvbnN0IGZyPUxkKHRoaXMsd1Bl''@;'; put 'put ''LEJVdCkuY2FsbCh0aGlzLHIuaGVhZGVyU3R5bGUpLGVpPUxkKHRoaXMsQ1BlLGpVdCkuY2FsbCh0aGlzLHIuaGVhZGVyU3R5bGUpO0NuPyhMZCh0aGlzLElQZSxLVXQpLmNhbGwodGhpcyxlLEhlLFRuLFRyLGZyLGVpKSxMZCh0aGlzLERQZSxYVXQpLmNhbGwodGhpcyxlLEhlLFRuLFRyKSk6''@;'; put 'put ''Z24mJkxkKHRoaXMsUlBlLHFVdCkuY2FsbCh0aGlzLGUsdSxnLFRuLFRyLGZyLGVpKTtjb25zdCBIbz0hKEN0LnNpemU+MCkmJm8uc29tZSh3cz0+d3Muc29tZSh0cz0+ITA9PT10cz8ucmVhZE9ubHkpKSx4aT17ZXhwb3J0Rm9ybXVsYXM6YXQsZm9ybXVsYXNTZXBhcmF0b3I6cXQsZGF0YVJv''@;'; put 'put ''d09mZnNldDokbixkYXRhQ29sT2Zmc2V0OlRyLGV4Y2x1ZGVkSGlkZGVuUm93czpyaSxleGNsdWRlZEhpZGRlbkNvbHM6Zm4sc3VtbWFyeU1hcDpDdCxzb3VyY2VEYXRhOkt0LGhhc1Jvd0hlYWRlcnM6VG4saGVhZGVyRmlsbDpmcixoZWFkZXJCb3JkZXI6ZWksaGFzUmVhZE9ubHlDZWxsczpI''@;'; put 'put ''byxyb290RG9jdW1lbnQ6SHIscm9vdFdpbmRvdzp0aSx2YWxpZGF0aW9uTWFwOmEsY2VsbHNNZXRhOm8sY2VsbEVsZW1lbnRzOmwscm93SGVhZGVyczpFLHJvd3NIZWlnaHRzOlp9O0xkKHRoaXMsZ1BlLE9VdCkuY2FsbCh0aGlzLGUsaSx4aSkseXIubGVuZ3RoPjAmJkxkKHRoaXMsQVBlLEdV''@;'; put 'put ''dCkuY2FsbCh0aGlzLGUseXIsJG4pLEhvJiZlLnByb3RlY3QoIiIse3NlbGVjdExvY2tlZENlbGxzOiEwLHNlbGVjdFVubG9ja2VkQ2VsbHM6ITAsZm9ybWF0Q29sdW1uczohMCxmb3JtYXRSb3dzOiEwLHNvcnQ6ITAsYXV0b0ZpbHRlcjohMH0pLGVlLmZvckVhY2god3M9Pntjb25zdCB0cz13''@;'; put 'put ''cy5yb3crJG4sa2E9d3MuY29sK1RyO2UubWVyZ2VDZWxscyh0cyxrYSx0cyt3cy5yb3dzcGFuLTEsa2Erd3MuY29sc3Bhbi0xKX0pO2NvbnN0e2NvbmRpdGlvbmFsRm9ybWF0dGluZzpUb309cjtyZXR1cm4gVG8mJlRvLmxlbmd0aD4wJiZMZCh0aGlzLEVQZSx6VXQpLmNhbGwodGhpcyxlLFRv''@;'; put 'put ''LCRuLFRyLGkubGVuZ3RoLGlbMF0/Lmxlbmd0aD8/MCksaS5sZW5ndGh9ZnVuY3Rpb24gT1V0KG4sZSx0KXtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7Y29uc3QgaT1lW3JdLGE9bi5nZXRSb3cocit0LmRhdGFSb3dPZmZzZXQpO2lmKFpvKHQucm93c0hlaWdodHNbcl0pJiYoYS5oZWln''@;'; put 'put ''aHQ9Ljc1KnQucm93c0hlaWdodHNbcl0pLHQuaGFzUm93SGVhZGVycyl7Y29uc3QgbD1hLmdldENlbGwoMSk7bC52YWx1ZT10LnJvd0hlYWRlcnNbcl0/P251bGwsdC5oZWFkZXJGaWxsJiYobC5maWxsPXQuaGVhZGVyRmlsbCksdC5oZWFkZXJCb3JkZXImJihsLmJvcmRlcj10LmhlYWRlckJv''@;'; put 'put ''cmRlcil9TGQodGhpcyxtUGUsTlV0KS5jYWxsKHRoaXMsYSxpLHIsdCksYS5jb21taXQoKX19ZnVuY3Rpb24gTlV0KG4sZSx0LHIpe2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtjb25zdCBvPWVbaV0sYT1uLmdldENlbGwoaStyLmRhdGFDb2xPZmZzZXQpLGw9ci5jZWxsc01ldGFbdF1b''@;'; put 'put ''aV0sdT1yLnN1bW1hcnlNYXAuZ2V0KGAke3R9OiR7aX1gKSxnPXIuc291cmNlRGF0YT8uW3RdW2ldLHt2YWx1ZTpFLG51bUZtdDpPfT1MZCh0aGlzLF9QZSxQVXQpLmNhbGwodGhpcyxvLGwsZyx1LHIpO2EudmFsdWU9RSxPJiYoYS5udW1GbXQ9Tyk7Y29uc3QgWj1wVXQoci5jZWxsRWxlbWVu''@;'; put 'put ''dHNbdF1baV0sbC5jbGFzc05hbWUsci5yb290RG9jdW1lbnQsci5yb290V2luZG93KTtMZCh0aGlzLHZQZSxGVXQpLmNhbGwodGhpcyxhLGwsWixyKSxyLmhhc1JlYWRPbmx5Q2VsbHMmJihhLnByb3RlY3Rpb249e2xvY2tlZDohMD09PWwucmVhZE9ubHl9KX19ZnVuY3Rpb24gRlV0KG4sZSx0''@;'; put 'put ''LHIpe2NvbnN0IGk9cFBlKGUpO2kmJihuLmFsaWdubWVudD1pKTtjb25zdCBvPWZ1bmN0aW9uIG1VdChuKXtpZighbj8uYm9yZGVycylyZXR1cm4gbnVsbDtjb25zdHtib3JkZXJzOmV9PW4sdD17fTtyZXR1cm5bInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdLmZvckVhY2gocj0+e2Vb''@;'; put 'put ''cl0mJmVbcl0ud2lkdGg+MCYmKHRbcl09e3N0eWxlOmdVdChlW3JdLndpZHRoKSxjb2xvcjp7YXJnYjprTihlW3JdLmNvbG9yKX19KX0pLE9iamVjdC5rZXlzKHQpLmxlbmd0aD4wP3Q6bnVsbH0oZSk7byYmKG4uYm9yZGVyPW8pO2NvbnN0IGE9ZnVuY3Rpb24gdlV0KG4sZT1udWxsKXtjb25z''@;'; put 'put ''dCB0PSEwPT09bj8ucmVhZE9ubHkscj1lPy5mb250Qm9sZHx8ITEsaT1lPy5mb250SXRhbGljfHwhMSxvPWU/LmZvbnRVbmRlcmxpbmV8fCExLGE9ZT8uZm9udENvbG9yPz9udWxsO2lmKCEocnx8aXx8b3x8YXx8dCkpcmV0dXJuIG51bGw7Y29uc3QgbD17fTtyZXR1cm4gciYmKGwuYm9sZD0h''@;'; put 'put ''MCksaSYmKGwuaXRhbGljPSEwKSxvJiYobC51bmRlcmxpbmU9ITApLGE/bC5jb2xvcj17YXJnYjprTihhKX06dCYmKGwuY29sb3I9e2FyZ2I6IkZGODA4MDgwIn0pLE9iamVjdC5rZXlzKGwpLmxlbmd0aD4wP2w6bnVsbH0oZSx0KTthJiYobi5mb250PWEpO2NvbnN0IGw9ZnVuY3Rpb24gX1V0''@;'; put 'put ''KG4sZT1udWxsKXtsZXQgdD1udWxsO3JldHVybiBlPy5iYWNrZ3JvdW5kQ29sb3I/dD1rTihlLmJhY2tncm91bmRDb2xvcik6ITA9PT1uPy5yZWFkT25seSYmKHQ9IkZGRjBGMEYwIiksdD97dHlwZToicGF0dGVybiIscGF0dGVybjoic29saWQiLGZnQ29sb3I6e2FyZ2I6dH19Om51bGx9KGUs''@;'; put 'put ''dCk7bCYmKG4uZmlsbD1sKTtjb25zdCBnPWZ1bmN0aW9uIHlVdChuLGUpe3JldHVybiBuJiZlJiYoImRyb3Bkb3duIj09PW4udHlwZXx8ImF1dG9jb21wbGV0ZSI9PT1uLnR5cGUpJiZBcnJheS5pc0FycmF5KG4uc291cmNlKT97dHlwZToibGlzdCIsYWxsb3dCbGFuazohMCxmb3JtdWxhZTpb''@;'; put 'put ''ZV19Om51bGx9KGUsQXJyYXkuaXNBcnJheShlLnNvdXJjZSk/ci52YWxpZGF0aW9uTWFwLmdldChKU09OLnN0cmluZ2lmeShlLnNvdXJjZSkpPz9udWxsOm51bGwpO2cmJihuLmRhdGFWYWxpZGF0aW9uPWcpLGUuY29tbWVudD8udmFsdWUmJihuLm5vdGU9U3RyaW5nKGUuY29tbWVudC52YWx1''@;'; put 'put ''ZSkpfWZ1bmN0aW9uIFBVdChuLGUsdCxyLGkpe2NvbnN0e2V4cG9ydEZvcm11bGFzOm8sZm9ybXVsYXNTZXBhcmF0b3I6YSxkYXRhUm93T2Zmc2V0OmwsZGF0YUNvbE9mZnNldDp1LGV4Y2x1ZGVkSGlkZGVuUm93czpnLGV4Y2x1ZGVkSGlkZGVuQ29sczpFfT1pO2lmKHImJm8pe2NvbnN0IE89''@;'; put 'put ''ZnVuY3Rpb24gYVV0KG4sZSx0KXtjb25zdCByPWlVdFtuLnR5cGVdO2lmKCFyKXJldHVybiBudWxsO2NvbnN0IGk9QU4obi5zb3VyY2VDb2wrdCk7cmV0dXJue2Zvcm11bGE6YCR7cn0oJHtuLnNvdXJjZVJhbmdlcy5tYXAoKFthLGxdKT0+e2NvbnN0IHU9YStlLGc9bCtlO3JldHVybiB1PT09''@;'; put 'put ''Zz9gJHtpfSR7dX1gOmAke2l9JHt1fToke2l9JHtnfWB9KS5qb2luKCIsIil9KWB9fShyLGwsdSksWj1MZCh0aGlzLE9HLEgwZSkuY2FsbCh0aGlzLG4sZSk7cmV0dXJue3ZhbHVlOk8/ey4uLk8scmVzdWx0Om59OlosbnVtRm10Om51bGx9fWlmKG8mJmZ1bmN0aW9uIG9VdChuKXtyZXR1cm4i''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIG4mJm4uc3RhcnRzV2l0aCgiPSIpfSh0KSlyZXR1cm57dmFsdWU6e2Zvcm11bGE6bFV0KHQsYSxsLTEsdS0xLGc/P3ZvaWQgMCxFPz92b2lkIDApfSxudW1GbXQ6bnVsbH07aWYoImRhdGUiPT09ZS50eXBlfHwiaW50bC1kYXRlIj09PWUudHlwZSl7Y29uc3QgTz1m''@;'; put 'put ''dW5jdGlvbiBTVXQobil7aWYoIW4pcmV0dXJuIG51bGw7Y29uc3QgZT1TdHJpbmcobikubWF0Y2goL14oXGR7NH0pLShcZHsyfSktKFxkezJ9KSQvKTtpZighZSlyZXR1cm4gbnVsbDtjb25zdCB0PXBhcnNlSW50KGVbMV0sMTApLHI9cGFyc2VJbnQoZVsyXSwxMCksaT1wYXJzZUludChlWzNd''@;'; put 'put ''LDEwKSxvPW5ldyBEYXRlKHQsci0xLGkpO3JldHVybiBOdW1iZXIuaXNOYU4oby5nZXRUaW1lKCkpP251bGw6ZnVuY3Rpb24gQ1V0KG4pe2NvbnN0IGU9RGF0ZS5VVEMobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSxuLmdldERhdGUoKSk7cmV0dXJuIE1hdGgucm91bmQoKGUtYlV0KS84''@;'; put 'put ''NjRlNSl9KG8pfShuKTtpZihudWxsIT09TylyZXR1cm57dmFsdWU6TyxudW1GbXQ6Im1tLWRkLXl5In19aWYoInRpbWUiPT09ZS50eXBlfHwiaW50bC10aW1lIj09PWUudHlwZSl7Y29uc3QgTz1mdW5jdGlvbiBFVXQobil7aWYoIW4pcmV0dXJuIG51bGw7Y29uc3QgZT1TdHJpbmcobikudHJp''@;'; put 'put ''bSgpLHQ9ZS5tYXRjaCgvXihcZHsxLDJ9KTooXGR7Mn0pKD86OihcZHsyfSkpPyQvKTtpZih0KXtjb25zdCBpPXBhcnNlSW50KHRbMV0sMTApLG89cGFyc2VJbnQodFsyXSwxMCksYT10WzNdP3BhcnNlSW50KHRbM10sMTApOjA7cmV0dXJuIGk+MjN8fG8+NTl8fGE+NTk/bnVsbDooMzYwMCpp''@;'; put 'put ''KzYwKm8rYSkvODY0MDB9Y29uc3Qgcj1lLm1hdGNoKC9eKFxkezEsMn0pOihcZHsyfSkoPzo6KFxkezJ9KSk/XHMqKEFNfFBNKSQvaSk7aWYocil7bGV0IGk9cGFyc2VJbnQoclsxXSwxMCk7Y29uc3Qgbz1wYXJzZUludChyWzJdLDEwKSxhPXJbM10/cGFyc2VJbnQoclszXSwxMCk6MCxsPXJb''@;'; put 'put ''NF0udG9VcHBlckNhc2UoKTtyZXR1cm4gaT4xMnx8bz41OXx8YT41OT9udWxsOigiQU0iPT09bCYmMTI9PT1pP2k9MDoiUE0iPT09bCYmMTIhPT1pJiYoaSs9MTIpLCgzNjAwKmkrNjAqbythKS84NjQwMCl9cmV0dXJuIG51bGx9KG4pO2lmKG51bGwhPT1PKXJldHVybnt2YWx1ZTpPLG51bUZt''@;'; put 'put ''dDoiaDptbTpzcyJ9fXJldHVybiJjaGVja2JveCI9PT1lLnR5cGU/e3ZhbHVlOkxkKHRoaXMseVBlLEhVdCkuY2FsbCh0aGlzLG4sZSksbnVtRm10Om51bGx9OiJtdWx0aXNlbGVjdCI9PT1lLnR5cGU/e3ZhbHVlOkxkKHRoaXMsYlBlLFZVdCkuY2FsbCh0aGlzLG4pLG51bUZtdDpudWxsfToi''@;'; put 'put ''bnVtZXJpYyI9PT1lLnR5cGU/e3ZhbHVlOkxkKHRoaXMsT0csSDBlKS5jYWxsKHRoaXMsbixlKSxudW1GbXQ6QVV0KGUubnVtZXJpY0Zvcm1hdCxlLmxvY2FsZSl9Ont2YWx1ZTpMZCh0aGlzLE9HLEgwZSkuY2FsbCh0aGlzLG4sZSksbnVtRm10Om51bGx9fWZ1bmN0aW9uIEgwZShuLGUpe2lm''@;'; put 'put ''KG51bGw9PW4pcmV0dXJuIG51bGw7aWYoIm51bWVyaWMiPT09ZS50eXBlKXtpZigibnVtYmVyIj09dHlwZW9mIG4pcmV0dXJuIG47Y29uc3QgdD1OdW1iZXIobik7cmV0dXJuIE51bWJlci5pc05hTih0KT9QbChuKTp0fXJldHVybiBQbChuKX1mdW5jdGlvbiBIVXQobixlKXtyZXR1cm4gbj09''@;'; put 'put ''PShlLmNoZWNrZWRUZW1wbGF0ZT8/ITApfWZ1bmN0aW9uIFZVdChuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT8wPT09bi5sZW5ndGg/bnVsbDpuLm1hcChlPT5TdHJpbmcobnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZT9lLnZhbHVlOmUpKS5qb2luKCIsICIpOm51bGw9PW4/bnVsbDpQ''@;'; put 'put ''bChuKX1mdW5jdGlvbiBCVXQobil7cmV0dXJuIG4/LmJhY2tncm91bmRDb2xvcj97dHlwZToicGF0dGVybiIscGF0dGVybjoic29saWQiLGZnQ29sb3I6e2FyZ2I6a04obi5iYWNrZ3JvdW5kQ29sb3IpfX06bnVsbH1mdW5jdGlvbiBqVXQobil7aWYoIW4/LmJvcmRlcilyZXR1cm4gbnVsbDtj''@;'; put 'put ''b25zdHtzdHlsZTplPSJ0aGluIixjb2xvcjp0fT1uLmJvcmRlcixyPXQ/e3N0eWxlOmUsY29sb3I6e2FyZ2I6a04odCl9fTp7c3R5bGU6ZX07cmV0dXJue3RvcDpyLGJvdHRvbTpyLGxlZnQ6cixyaWdodDpyfX1mdW5jdGlvbiBVVXQoKXtjb25zdHtjb21wcmVzc2lvbjpufT10aGlzLm9wdGlv''@;'; put 'put ''bnM7bGV0IGU9bnVsbDtyZXR1cm4hMD09PW4/ZT02OiJudW1iZXIiPT10eXBlb2YgbiYmbj49MSYmbjw9OSYmKGU9biksbnVsbD09PWU/e306e3ppcDp7Y29tcHJlc3Npb246IkRFRkxBVEUiLGNvbXByZXNzaW9uT3B0aW9uczp7bGV2ZWw6ZX19fX1mdW5jdGlvbiB6VXQobixlLHQscixpLG8p''@;'; put 'put ''ezA9PT1pfHwwPT09b3x8ZS5mb3JFYWNoKCh7cm93czphLGNvbHM6bCxydWxlczp1fSk9PntpZighdXx8MD09PXUubGVuZ3RoKXJldHVybjtjb25zdCBnPShhP2FbMF06MCkrdCxFPShhP2FbMV06aS0xKSt0LE89KGw/bFswXTowKStyLFo9KGw/bFsxXTpvLTEpK3I7bi5hZGRDb25kaXRpb25h''@;'; put 'put ''bEZvcm1hdHRpbmcoe3JlZjpMZCh0aGlzLE1QZSxXVXQpLmNhbGwodGhpcyxnLE8sRSxaKSxydWxlczp1fSl9KX1mdW5jdGlvbiBXVXQobixlLHQscil7cmV0dXJuYCR7QU4oZSl9JHtufToke0FOKHIpfSR7dH1gfWZ1bmN0aW9uIFlVdChuLGUsdCl7dCYmKG4uZ2V0Q29sdW1uKDEpLndpZHRo''@;'; put 'put ''PTUpO2NvbnN0IHI9dD8xOjA7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspbi5nZXRDb2x1bW4oaSsxK3IpLndpZHRoPU1hdGgubWF4KGVbaV0vNywxKX1mdW5jdGlvbiBaVXQobixlLHQpe2NvbnN0IHI9dD8xOjA7ZS5mb3JFYWNoKGk9PntuLmdldENvbHVtbihpKzErcikuaGlkZGVuPSEw''@;'; put 'put ''fSl9ZnVuY3Rpb24gR1V0KG4sZSx0KXtlLmZvckVhY2gocj0+e24uZ2V0Um93KHIrdCkuaGlkZGVuPSEwfSl9ZnVuY3Rpb24gJFV0KG4sZSx0LHIsaSxvKXtjb25zdCBhPWU+MHx8dD4wO2lmKCFhJiYhbylyZXR1cm47Y29uc3QgbD17fTtvJiYobC5yaWdodFRvTGVmdD0hMCksYSYmKGwuc3Rh''@;'; put 'put ''dGU9ImZyb3plbiIsbC54U3BsaXQ9dCsoaT8xOjApLGwueVNwbGl0PWUrciksbi52aWV3cz1bbF19ZnVuY3Rpb24gcVV0KG4sZSx0LHIsaSxvLGEpe2NvbnN0IGw9bi5nZXRSb3coMSk7aWYocil7Y29uc3QgdT1sLmdldENlbGwoMSk7dS52YWx1ZT0iIixvJiYodS5maWxsPW8pLGEmJih1LmJv''@;'; put 'put ''cmRlcj1hKX1mb3IobGV0IHU9MDt1PGUubGVuZ3RoO3UrKyl7Y29uc3QgZz1sLmdldENlbGwodStpKTtnLnZhbHVlPWVbdV0/P251bGw7Y29uc3QgRT1mUGUodFt1XSk7RSYmKGcuYWxpZ25tZW50PUUpLG8mJihnLmZpbGw9byksYSYmKGcuYm9yZGVyPWEpfWwuY29tbWl0KCl9ZnVuY3Rpb24g''@;'; put 'put ''S1V0KG4sZSx0LHIsaSxvKXtmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl7Y29uc3QgbD1lW2FdLHU9bi5nZXRSb3coYSsxKTtpZih0JiYwPT09YSl7Y29uc3QgRT11LmdldENlbGwoMSk7RS52YWx1ZT0iIixpJiYoRS5maWxsPWkpLG8mJihFLmJvcmRlcj1vKX1sZXQgZz1yO2wuZm9yRWFj''@;'; put 'put ''aChFPT57Y29uc3QgTz11LmdldENlbGwoZyk7Ty52YWx1ZT1FLmxhYmVsPz9udWxsO2NvbnN0IFo9ZlBlKEUuY2xhc3NOYW1lKTtaJiYoTy5hbGlnbm1lbnQ9WiksaSYmKE8uZmlsbD1pKSxvJiYoTy5ib3JkZXI9byksZys9RS5jb2xzcGFufSksdS5jb21taXQoKX19ZnVuY3Rpb24gWFV0KG4s''@;'; put 'put ''ZSx0LHIpe3QmJmUubGVuZ3RoPjEmJm4ubWVyZ2VDZWxscygxLDEsZS5sZW5ndGgsMSk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2NvbnN0IGE9aSsxO2xldCBsPXI7ZVtpXS5mb3JFYWNoKHU9Pnt1LmNvbHNwYW4+MSYmbi5tZXJnZUNlbGxzKGEsbCxhLGwrdS5jb2xzcGFuLTEpLGwr''@;'; put 'put ''PXUuY29sc3Bhbn0pfX1mdW5jdGlvbiBRVXQobixlKXtjb25zdCB0PW5ldyBNYXA7Zm9yKGxldCBnPTA7ZzxlLmxlbmd0aDtnKyspZm9yKGxldCBFPTA7RTxlW2ddLmxlbmd0aDtFKyspe2NvbnN0IE89ZVtnXVtFXTtpZigoImRyb3Bkb3duIj09PU8udHlwZXx8ImF1dG9jb21wbGV0ZSI9PT1P''@;'; put 'put ''LnR5cGUpJiZBcnJheS5pc0FycmF5KE8uc291cmNlKSYmTy5zb3VyY2UubGVuZ3RoPjApe2NvbnN0IGVlPUpTT04uc3RyaW5naWZ5KE8uc291cmNlKTt0LmhhcyhlZSl8fHQuc2V0KGVlLE8uc291cmNlKX19aWYoMD09PXQuc2l6ZSlyZXR1cm4gbmV3IE1hcDtjb25zdCByPW5ldyBTZXQobi53''@;'; put 'put ''b3Jrc2hlZXRzLm1hcChnPT5nLm5hbWUpKTtsZXQgaT0iX0hvdFZhbGlkYXRpb24iLG89MTtmb3IoO3IuaGFzKGkpOylpPWBfSG90VmFsaWRhdGlvbiR7b31gLG8rPTE7Y29uc3QgYT1uLmFkZFdvcmtzaGVldChpKTthLnN0YXRlPSJ2ZXJ5SGlkZGVuIjtjb25zdCBsPW5ldyBNYXA7bGV0IHU9''@;'; put 'put ''MTtyZXR1cm4gdC5mb3JFYWNoKChnLEUpPT57Zm9yKGxldCB2ZT0wO3ZlPGcubGVuZ3RoO3ZlKyspe2NvbnN0IE1lPWdbdmVdO2EuZ2V0Q2VsbCh2ZSsxLHUpLnZhbHVlPWIwKE1lKT9TdHJpbmcoTWUudmFsdWUpOlN0cmluZyhNZSl9Y29uc3QgTz1BTih1KSxlZT1gJyR7aS5yZXBsYWNlQWxs''@;'; put 'put ''KCInIiwiJyciKX0nISQke099JDE6JCR7T30kJHtnLmxlbmd0aH1gO2wuc2V0KEUsZWUpLHUrPTF9KSxsfWNvbnN0IGV6dD0iY3N2Iix0enQ9Inhsc3giLFYwZT17W2V6dF06Y2xhc3MgZVV0IGV4dGVuZHMgb1Ble3N0YXRpYyBnZXQgREVGQVVMVF9PUFRJT05TKCl7cmV0dXJue21pbWVUeXBl''@;'; put 'put ''OiJ0ZXh0L2NzdiIsZmlsZUV4dGVuc2lvbjoiY3N2Iixib206ITAsY29sdW1uRGVsaW1pdGVyOiIsIixyb3dEZWxpbWl0ZXI6IlxyXG4iLHNhbml0aXplVmFsdWVzOiExfX1fbWVyZ2VPcHRpb25zKGUpe2NvbnN0IHQ9c3VwZXIuX21lcmdlT3B0aW9ucyhlKSxyPXt9O3JldHVybiJoaWRlIj09''@;'; put 'put ''PXQuZXhwb3J0SGlkZGVuUm93cyYmKHIuZXhwb3J0SGlkZGVuUm93cz0hMSksImhpZGUiPT09dC5leHBvcnRIaWRkZW5Db2x1bW5zJiYoci5leHBvcnRIaWRkZW5Db2x1bW5zPSExKSxPYmplY3Qua2V5cyhyKS5sZW5ndGg+MD9ZZCh0LHIpOnR9ZXhwb3J0KCl7Y29uc3QgZT10aGlzLm9wdGlv''@;'; put 'put ''bnMsdD10aGlzLmRhdGFQcm92aWRlci5nZXREYXRhKCk7bGV0IHI9dGhpcy5kYXRhUHJvdmlkZXIuZ2V0Q29sdW1uSGVhZGVycygpO2NvbnN0IGk9ci5sZW5ndGg+MCxvPXRoaXMuZGF0YVByb3ZpZGVyLmdldFJvd0hlYWRlcnMoKSxhPW8ubGVuZ3RoPjA7bGV0IGw9ZS5ib20/Ilx1ZmVmZiI6''@;'; put 'put ''IiI7cmV0dXJuIGkmJihyPXIubWFwKHU9PnRoaXMuX2VzY2FwZUNlbGwodSx7Zm9yY2U6ITAsc2FuaXRpemVWYWx1ZTplLnNhbml0aXplVmFsdWVzfSkpLGEmJihsKz1lLmNvbHVtbkRlbGltaXRlciksbCs9ci5qb2luKGUuY29sdW1uRGVsaW1pdGVyKSxsKz1lLnJvd0RlbGltaXRlciksdC5m''@;'; put 'put ''b3JFYWNoKCh1LGcpPT57Zz4wJiYobCs9ZS5yb3dEZWxpbWl0ZXIpLGEmJihsKz10aGlzLl9lc2NhcGVDZWxsKG9bZ10se3Nhbml0aXplVmFsdWU6ZS5zYW5pdGl6ZVZhbHVlc30pLGwrPWUuY29sdW1uRGVsaW1pdGVyKTtjb25zdCBFPXUubWFwKE89PnRoaXMuX2VzY2FwZUNlbGwoTyx7c2Fu''@;'; put 'put ''aXRpemVWYWx1ZTplLnNhbml0aXplVmFsdWVzfSkpLmpvaW4oZS5jb2x1bW5EZWxpbWl0ZXIpO2wrPUV9KSxsfV9lc2NhcGVDZWxsKGUse2ZvcmNlOnQ9ITEsc2FuaXRpemVWYWx1ZTpyPSExfT17fSl7bGV0IGk9UGwoZSk7cmV0dXJuIiI9PT1pfHwociYmKHQ9ITApLHIgaW5zdGFuY2VvZiBS''@;'; put 'put ''ZWdFeHA/aT1hUGUodGhpcyx1UGUsblV0KS5jYWxsKHRoaXMsaSxyKToiZnVuY3Rpb24iPT10eXBlb2Ygcj9pPXIoaSk6ciYmKGk9YVBlKHRoaXMsY1BlLHRVdCkuY2FsbCh0aGlzLGkpKSwodHx8aS5pbmRleE9mKCJcciIpPj0wfHxpLmluZGV4T2YoJyInKT49MHx8aS5pbmRleE9mKCJcbiIp''@;'; put 'put ''Pj0wfHxpLmluZGV4T2YodGhpcy5vcHRpb25zLmNvbHVtbkRlbGltaXRlcik+PTApJiYoaT1pLnJlcGxhY2VBbGwoJyInLCciIicpLGk9YCIke2l9ImApKSxpfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLHNQZSh0aGlzLGNQZSksc1BlKHRoaXMsdVBlKX19LFt0enRdOmNsYXNzIExV''@;'; put 'put ''dCBleHRlbmRzIG9QZXtzdGF0aWMgZ2V0IEJJTkFSWSgpe3JldHVybiEwfWdldCBiaW5hcnkoKXtyZXR1cm4hMH1zdGF0aWMgZ2V0IERFRkFVTFRfT1BUSU9OUygpe3JldHVybnttaW1lVHlwZToiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNo''@;'; put 'put ''ZWV0bWwuc2hlZXQiLGZpbGVFeHRlbnNpb246Inhsc3giLGJvbTohMSxlbmdpbmU6bnVsbCxjb21wcmVzc2lvbjpudWxsLGNvbmRpdGlvbmFsRm9ybWF0dGluZzpbXSxleHBvcnRGb3JtdWxhczohMSxoZWFkZXJTdHlsZTp7YmFja2dyb3VuZENvbG9yOiIjRjJGMkYyIixib3JkZXI6e3N0eWxl''@;'; put 'put ''OiJ0aGluIn19fX1leHBvcnQoKXt2YXIgZT10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtjb25zdCB0PWUub3B0aW9ucy5lbmdpbmU7KCF0fHwiZnVuY3Rpb24iIT10eXBlb2YgdC5Xb3JrYm9vaykmJkpyKCJNaXNzaW5nIG9yIGludmFsaWQgRXhjZWxKUyBlbmdpbmUuIFBhc3MgdGhlIEV4''@;'; put 'put ''Y2VsSlMgbW9kdWxlIHZpYSB0aGUgYGVuZ2luZXNgIG9wdGlvbiBpbiB0aGUgZXhwb3J0RmlsZSBwbHVnaW4gc2V0dGluZ3M6IGBleHBvcnRGaWxlOiB7IGVuZ2luZXM6IHsgeGxzeDogRXhjZWxKUyB9IH1gLiIpO2NvbnN0IHI9ZS5vcHRpb25zLnNoZWV0czsociYmci5sZW5ndGg+MD9uZXcg''@;'; put 'put ''U2V0KHIubWFwKGE9PmEuaW5zdGFuY2Uucm9vdERvY3VtZW50KSk6bmV3IFNldChbZS5kYXRhUHJvdmlkZXIuaG90LnJvb3REb2N1bWVudF0pKS5mb3JFYWNoKGE9PmZ1bmN0aW9uIGRVdChuKXtOMGUuZGVsZXRlKG4pLEYwZS5kZWxldGUobil9KGEpKTtjb25zdCBvPW5ldyB0Lldvcmtib29r''@;'; put 'put ''O2lmKHImJnIubGVuZ3RoPjApe2NvbnN0IGE9bmV3IFNldDtyLmZvckVhY2gobD0+e2NvbnN0IHU9bmV3IGlQZShsLmluc3RhbmNlKSxnPSJjb2x1bW5IZWFkZXJzImluIGwmJiEoImNvbEhlYWRlcnMiaW4gbCk/ey4uLmwsY29sSGVhZGVyczpsLmNvbHVtbkhlYWRlcnN9OmwsRT17Li4uZS5v''@;'; put 'put ''cHRpb25zLC4uLmd9O3Uuc2V0T3B0aW9ucyhFKTtjb25zdCBPPWwubmFtZXx8IlNoZWV0IjtsZXQgWj1PLGVlPTE7Zm9yKDthLmhhcyhaKTspWj1gJHtPfSR7ZWV9YCxlZSs9MTthLmFkZChaKTtjb25zdCB2ZT1vLmFkZFdvcmtzaGVldChaKTtMZChlLFAwZSxPUGUpLmNhbGwoZSxvLHZlLHUs''@;'; put 'put ''RSl9KX1lbHNle2NvbnN0IGE9by5hZGRXb3Jrc2hlZXQoIlNoZWV0MSIpO0xkKGUsUDBlLE9QZSkuY2FsbChlLG8sYSxlLmRhdGFQcm92aWRlcixlLm9wdGlvbnMpfXJldHVybiBvLnhsc3gud3JpdGVCdWZmZXIoTGQoZSxTUGUsVVV0KS5jYWxsKGUpKX0pKCl9Y29uc3RydWN0b3IoLi4uZSl7''@;'; put 'put ''c3VwZXIoLi4uZSksemgodGhpcyxQMGUpLHpoKHRoaXMsZ1BlKSx6aCh0aGlzLG1QZSksemgodGhpcyx2UGUpLHpoKHRoaXMsX1BlKSx6aCh0aGlzLE9HKSx6aCh0aGlzLHlQZSksemgodGhpcyxiUGUpLHpoKHRoaXMsd1BlKSx6aCh0aGlzLENQZSksemgodGhpcyxTUGUpLHpoKHRoaXMsRVBl''@;'; put 'put ''KSx6aCh0aGlzLE1QZSksemgodGhpcyxUUGUpLHpoKHRoaXMseFBlKSx6aCh0aGlzLEFQZSksemgodGhpcyxrUGUpLHpoKHRoaXMsUlBlKSx6aCh0aGlzLElQZSksemgodGhpcyxEUGUpLHpoKHRoaXMsTFBlKX19fTtmdW5jdGlvbiBOUGUobil7Y29uc3QgZT1uLmdldFNldHRpbmdzKCksdD0h''@;'; put 'put ''KCFlLmNvbEhlYWRlcnMmJiFlLm5lc3RlZEhlYWRlcnMpLHI9ISFlLnJvd0hlYWRlcnMsaT1uLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksbz17Y29sSGVhZGVyczp0LHJvd0hlYWRlcnM6cn07cmV0dXJuIWl8fGkuaXNTaW5nbGVDZWxsKCl8fChpLmZyb20ucm93Pz8wKTwwJiYoaS5mcm9tLmNv''@;'; put 'put ''bD8/MCk8MD9vOnsuLi5vLHJhbmdlOltNYXRoLm1heCgwLE1hdGgubWluKGkuZnJvbS5yb3c/PzAsaS50by5yb3c/PzApKSxNYXRoLm1heCgwLE1hdGgubWluKGkuZnJvbS5jb2w/PzAsaS50by5jb2w/PzApKSxNYXRoLm1heChpLmZyb20ucm93Pz8wLGkudG8ucm93Pz8wKSxNYXRoLm1heChp''@;'; put 'put ''LmZyb20uY29sPz8wLGkudG8uY29sPz8wKV19fWZ1bmN0aW9uIGl6dChuKXtjb25zdHtmcmFnbWVudDplfT1zd2AKICAgIDxkaXYgY2xhc3M9IiR7UXB9X19jb250ZW50Ij4KICAgICAgPGkgY2xhc3M9IiR7UXB9X19pY29uIj4KICAgICAgICA8c3ZnIGNsYXNzPSIke1FwfV9faWNvbi1zdmci''@;'; put 'put ''CiAgICAgICAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAxNiAxNiI+CiAgICAgICAgICA8cGF0aCBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTUgOGE3IDcgMCAxIDEtMy41LTYuMDYyIj48''@;'; put 'put ''L3BhdGg+CiAgICAgICAgPC9zdmc+CiAgICAgIDwvaT4KICAgICAgPGRpdiBjbGFzcz0iJHtRcH1fX3RleHQiPgogICAgICAgIDxoMiBjbGFzcz0iJHtRcH1fX3RpdGxlIj4ke259PC9oMj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgO3JldHVybiBlfWZ1bmN0aW9uIEZQZShuLGUpe2lm''@;'; put 'put ''KGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gUFBlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIr''@;'; put 'put ''dCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIEhQZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1j''@;'; put 'put ''b25zdCBSTj0iZXhwb3J0RmlsZSI7ZnVuY3Rpb24gVlBlKG4pe3JldHVybiBmdW5jdGlvbiBoenQobil7cmV0dXJuIENhKG4pfShuKT9uOnZvaWQgMH12YXIgQjBlPW5ldyBXZWFrTWFwLGowZT1uZXcgV2Vha1NldDtjbGFzcyBmenQgZXh0ZW5kcyBhbHtzdGF0aWMgZ2V0IFBMVUdJTl9LRVko''@;'; put 'put ''KXtyZXR1cm4gUk59c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjQwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW1JOXX1pc0VuYWJsZWQoKXtyZXR1cm4hMH1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4''@;'; put 'put ''dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24gc3p0KG4sZSl7cmV0dXJuIGZ1bmN0aW9uIG96dChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sUFBlKG4sZSwiZ2V0IikpfSh0aGlzLEIwZSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2lu''@;'; put 'put ''KCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpfWV4cG9ydEFzU3RyaW5nKGUsdD17fSl7Y29uc3Qgcj10aGlzLl9jcmVhdGVUeXBlRm9ybWF0dGVyKGUsdCk7cmV0dXJuIHIuYmluYXJ5JiZKcihgRXhwb3J0IGZvcm1hdCB0eXBlICIke2V9IiBjYW5ub3QgYmUgZXhwb3J0ZWQgYXMgYSBzdHJpbmcg''@;'; put 'put ''KGJpbmFyeSBmb3JtYXQpLmApLHIuZXhwb3J0KCl9ZXhwb3J0QXNCbG9iKGUsdD17fSl7Y29uc3Qgcj10aGlzLl9jcmVhdGVUeXBlRm9ybWF0dGVyKGUsdCk7cmV0dXJuIHIuYmluYXJ5JiZKcihgZXhwb3J0QXNCbG9iKCkgZG9lcyBub3Qgc3VwcG9ydCBiaW5hcnkgZm9ybWF0cyBzdWNoIGFz''@;'; put 'put ''ICIke2V9Ii4gVXNlIGV4cG9ydEFzQmxvYkFzeW5jKCkgaW5zdGVhZC5gKSx0aGlzLl9jcmVhdGVCbG9iKHIpfWV4cG9ydEFzQmxvYkFzeW5jKGUpe3ZhciB0PXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKihyLGk9e30pe3JldHVybiB0Ll9jcmVhdGVCbG9iKHQuX2NyZWF0ZVR5cGVGb3JtYXR0''@;'; put 'put ''ZXIocixpKSl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZG93bmxvYWRGaWxlKGUsdD17fSl7Y29uc3Qgcj10aGlzLl9jcmVhdGVUeXBlRm9ybWF0dGVyKGUsdCk7ci5iaW5hcnkmJkpyKGBkb3dubG9hZEZpbGUoKSBkb2VzIG5vdCBzdXBwb3J0IGJpbmFyeSBmb3JtYXRzIHN1Y2ggYXMgIiR7''@;'; put 'put ''ZX0iLiBVc2UgZG93bmxvYWRGaWxlQXN5bmMoKSBpbnN0ZWFkLmApO2NvbnN0IGk9YCR7ci5vcHRpb25zLmZpbGVuYW1lfS4ke3Iub3B0aW9ucy5maWxlRXh0ZW5zaW9ufWA7SFBlKHRoaXMsajBlLEJQZSkuY2FsbCh0aGlzLHRoaXMuX2NyZWF0ZUJsb2IociksaSl9ZG93bmxvYWRGaWxlQXN5''@;'; put 'put ''bmMoZSl7dmFyIHQ9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKHIsaT17fSl7Y29uc3Qgbz10Ll9jcmVhdGVUeXBlRm9ybWF0dGVyKHIsaSksYT10LmhvdC5nZXRQbHVnaW4oImRpYWxvZyIpLGw9YT8uaXNFbmFibGVkKCkse3Jvb3RXaW5kb3c6dX09dC5ob3QsZz1gJHtvLm9wdGlvbnMuZmls''@;'; put 'put ''ZW5hbWV9LiR7by5vcHRpb25zLmZpbGVFeHRlbnNpb259YCxFPWZ1bmN0aW9uKCl7dmFyIE89Q3IoZnVuY3Rpb24qKCl7Y29uc3QgWj15aWVsZCBQcm9taXNlLnJlc29sdmUodC5fY3JlYXRlQmxvYihvKSk7SFBlKHQsajBlLEJQZSkuY2FsbCh0LFosZyl9KTtyZXR1cm4gZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gTy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpO2lmKGwmJm8uYmluYXJ5KXthLnNob3coe2NvbnRlbnQ6aXp0KHQuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoeHVlKSksY3VzdG9tQ2xhc3NOYW1lOlFwLGJhY2tncm91bmQ6InNlbWktdHJhbnNwYXJlbnQiLGNsb3NhYmxlOiExLGFu''@;'; put 'put ''aW1hdGlvbjohMX0pLHlpZWxkIG5ldyBQcm9taXNlKE89Pnt1LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3UucmVxdWVzdEFuaW1hdGlvbkZyYW1lKE8pfSl9KTt0cnl7eWllbGQgRSgpfWZpbmFsbHl7YS5oaWRlKCl9fWVsc2UgeWllbGQgRSgpfSkuYXBwbHkodGhpcyxhcmd1bWVudHMp''@;'; put 'put ''fXN1cHBvcnRzRXhwb3J0Rm9ybWF0KGUpe2lmKCFWMGVbZV0pcmV0dXJuITE7aWYoInhsc3giPT09ZSl7Y29uc3QgdD1WUGUodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtSTl0pO3JldHVybiB2b2lkIDAhPT10JiZDYSh0LmVuZ2luZXMpJiYhIXQuZW5naW5lcz8ueGxzeH1yZXR1cm4hMH1fY3Jl''@;'; put 'put ''YXRlVHlwZUZvcm1hdHRlcihlLHQ9e30pe1YwZVtlXXx8SnIoYEV4cG9ydCBmb3JtYXQgdHlwZSAiJHtlfSIgaXMgbm90IHN1cHBvcnRlZC5gKTtjb25zdCByPVZQZSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1JOXSksbz0ociYmQ2Eoci5lbmdpbmVzKT9yLmVuZ2luZXM6dm9pZCAwKT8uW2Vd''@;'; put 'put ''LGE9dm9pZCAwIT09bz97ZW5naW5lOm8sLi4udH06dCxsPWZ1bmN0aW9uIG56dChuLGUsdCl7Y29uc3Qgcj1WMGVbbl07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHI/bmV3IHIoZSx0KTpudWxsfShlLG5ldyBpUGUodGhpcy5ob3QpLGEpO3JldHVybiBudWxsPT09bCYmSnIoYEV4cG9ydCBm''@;'; put 'put ''b3JtYXQgdHlwZSAiJHtlfSIgaXMgbm90IHN1cHBvcnRlZC5gKSxsfV9jcmVhdGVCbG9iKGUpe3R5cGVvZiBCbG9iPiJ1IiYmSnIoIkJsb2IgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50LiIpO2NvbnN0IHQ9ZS5leHBvcnQoKSx7bWltZVR5cGU6cixlbmNvZGluZzppfT1l''@;'; put 'put ''Lm9wdGlvbnM7cmV0dXJuIHQgaW5zdGFuY2VvZiBQcm9taXNlP3QudGhlbihvPT5uZXcgQmxvYihbb10se3R5cGU6cn0pKTpuZXcgQmxvYihbdF0se3R5cGU6YCR7cn07Y2hhcnNldD0ke2l9YH0pfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLGZ1bmN0aW9uIHV6dChuLGUpe0ZQZShu''@;'; put 'put ''LGUpLGUuYWRkKG4pfSh0aGlzLGowZSksZnVuY3Rpb24gbHp0KG4sZSx0KXtGUGUobixlKSxlLnNldChuLHQpfSh0aGlzLEIwZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZnVuY3Rpb24gY3p0KG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gYXp0KG4sZSx0KXtpZihlLnNldCllLnNldC5j''@;'; put 'put ''YWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixQUGUobixlLCJzZXQiKSx0KSx0fSh0aGlzLEIwZSx0PT57Im9iamVjdCI9PXR5cGVvZiB0JiZudWxs''@;'; put 'put ''IT09dCYmdC5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSxmdW5jdGlvbiByenQobil7cmV0dXJue2tleToiZXhwb3J0X2ZpbGUiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHBjZSl9LGhpZGRlbigpe3JldHVybiB2b2lkIDA9PT10aGlzLmdldFNldHRpbmdz''@;'; put 'put ''KClbUk5dfSxzdWJtZW51OntpdGVtczpbe2tleToiZXhwb3J0X2ZpbGU6Y3N2IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShnY2UpfSxjYWxsYmFjaygpe24uZG93bmxvYWRGaWxlKCJjc3YiLE5QZSh0aGlzKSl9LGRpc2FibGVkOiExfSx7a2V5OiJleHBvcnRfZmls''@;'; put 'put ''ZTp4bHN4IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShtY2UpfSxjYWxsYmFjaygpe24uZG93bmxvYWRGaWxlQXN5bmMoInhsc3giLE5QZSh0aGlzKSkuY2F0Y2goZT0+e203KCJFeHBvcnRGaWxlOiBYTFNYIGV4cG9ydCBmYWlsZWQuIixlKX0pfSxoaWRkZW46KCk9''@;'; put 'put ''PiFuLnN1cHBvcnRzRXhwb3J0Rm9ybWF0KCJ4bHN4Iil9XX19fSh0aGlzKSl9KX19ZnVuY3Rpb24gQlBlKG4sZSl7Y29uc3R7cm9vdERvY3VtZW50OnQscm9vdFdpbmRvdzpyfT10aGlzLmhvdCxpPXIuVVJMfHxyLndlYmtpdFVSTCxvPWkuY3JlYXRlT2JqZWN0VVJMKG4pLGE9dC5jcmVhdGVF''@;'; put 'put ''bGVtZW50KCJhIik7YS5zdHlsZS5kaXNwbGF5PSJub25lIixhLnNldEF0dHJpYnV0ZSgiaHJlZiIsbyksYS5zZXRBdHRyaWJ1dGUoImRvd25sb2FkIixlKSx0LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCJjbGljayIpKSx0LmJvZHkucmVtb3Zl''@;'; put 'put ''Q2hpbGQoYSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e2kucmV2b2tlT2JqZWN0VVJMKG8pfSwxMDApfWNsYXNzIElOe2dldEVsZW1lbnRzKCl7cmV0dXJuIHRoaXMuZWxlbWVudHN9cmVzZXQoKXtYbih0aGlzLmVsZW1lbnRzLGU9PmUucmVzZXQoKSl9aGlkZSgpe3RoaXMuaGlk''@;'; put 'put ''ZGVuPSEwfXNob3coKXt0aGlzLmhpZGRlbj0hMX1pc0hpZGRlbigpe3JldHVybiBudWxsPT09dGhpcy5ob3R8fHRoaXMuaGlkZGVufXJlc3RvcmVTdGF0ZShlKXt0aGlzLnN0YXRlJiZ0aGlzLnNldFN0YXRlKHRoaXMuc3RhdGUuZ2V0VmFsdWVBdEluZGV4KGUpKX1zZXRTdGF0ZShlKXtKcigi''@;'; put 'put ''VGhlIHN0YXRlIHNldHRpbmcgbG9naWMgaXMgbm90IGltcGxlbWVudGVkIil9c2F2ZVN0YXRlKGUpe3RoaXMuc3RhdGUmJnRoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4KGUsdGhpcy5nZXRTdGF0ZSgpKX1nZXRTdGF0ZSgpe3JldHVybiBKcigiVGhlIHN0YXRlIGdhdGhlcmluZyBsb2dpYyBp''@;'; put 'put ''cyBub3QgaW1wbGVtZW50ZWQiKSx7fX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm4gSnIoIlRoZSBtZW51IGl0ZW0gZGVzY3JpcHRvciBsb2dpYyBpcyBub3QgaW1wbGVtZW50ZWQiKSx7fX1kZXN0cm95KCl7dGhpcy5ob3Q/LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAo''@;'; put 'put ''dGhpcy5zdGF0ZUlkKSx0aGlzLmNsZWFyTG9jYWxIb29rcygpLFhuKHRoaXMuZWxlbWVudHMsZT0+ZS5kZXN0cm95KCkpLHRoaXMuc3RhdGU9bnVsbCx0aGlzLmVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuaG90PW51bGx9Y29uc3RydWN0b3IoZSx7aWQ6dCxzdGF0ZWxlc3M6cj0hMH0pe3RoaXMu''@;'; put 'put ''ZWxlbWVudHM9W10sdGhpcy5oaWRkZW49ITEsdGhpcy5zdGF0ZUlkPSIiLHRoaXMuaG90PWUsdGhpcy5pZD10LHRoaXMuc3RhdGVJZD1gRmlsdGVycy5jb21wb25lbnQuJHt0aGlzLmlkfWAsdGhpcy5zdGF0ZT1yP251bGw6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAo''@;'; put 'put ''dGhpcy5zdGF0ZUlkLG5ldyBUWSl9fVlsKElOLF9oKTtjb25zdCBETj17fTtmdW5jdGlvbiBjeChuLGUpe0ROW25dfHxKcihgRmlsdGVyIGNvbmRpdGlvbiAiJHtufSIgZG9lcyBub3QgZXhpc3QuYCk7Y29uc3R7Y29uZGl0aW9uOnQsZGVzY3JpcHRvcjpyfT1ETltuXTtsZXQgaT1lO3JldHVy''@;'; put 'put ''biByLmlucHV0VmFsdWVzRGVjb3JhdG9yJiYoaT0oMCxyLmlucHV0VmFsdWVzRGVjb3JhdG9yKShpKSksZnVuY3Rpb24obyl7cmV0dXJuIHQuYXBwbHkoby5tZXRhLmluc3RhbmNlLFtvLGldKX19ZnVuY3Rpb24gb0Mobil7cmV0dXJuIEROW25dfHxKcihgRmlsdGVyIGNvbmRpdGlvbiAiJHtu''@;'; put 'put ''fSIgZG9lcyBub3QgZXhpc3QuYCksRE5bbl0uZGVzY3JpcHRvcn1mdW5jdGlvbiBrbChuLGUsdCl7dC5rZXk9bixETltuXT17Y29uZGl0aW9uOmUsZGVzY3JpcHRvcjp0fX1jb25zdCBiaD0ibm9uZSI7a2woYmgsZnVuY3Rpb24gcHp0KCl7cmV0dXJuITB9LHtuYW1lOklZLGlucHV0c0NvdW50''@;'; put 'put ''OjAsc2hvd09wZXJhdG9yczohMX0pO2NvbnN0IGFDPSJlbXB0eSI7a2woYUMsZnVuY3Rpb24gZ3p0KG4pe3JldHVybiBBbChuLnZhbHVlKX0se25hbWU6WWNlLGlucHV0c0NvdW50OjAsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IHV4PSJub3RfZW1wdHkiO2tsKHV4LGZ1bmN0aW9uIG16dChu''@;'; put 'put ''LGUpe3JldHVybiFjeChhQyxlKShuKX0se25hbWU6WmNlLGlucHV0c0NvdW50OjAsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IHNDPSJlcSI7a2woc0MsZnVuY3Rpb24gdnp0KG4sW2VdKXtyZXR1cm4gdjEoUGwobi52YWx1ZSksbi5tZXRhLmxvY2FsZSk9PT1QbChlKX0se25hbWU6R2NlLGlu''@;'; put 'put ''cHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IGR4PSJuZXEiO2tsKGR4LGZ1bmN0aW9uIF96dChuLGUpe3JldHVybiFjeChzQyxlKShuKX0se25hbWU6JGNlLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLGtsKCJndCIsZnVuY3Rpb24geXp0KG4sW2VdKXtsZXQg''@;'; put 'put ''dD1lO3JldHVybiJudW1lcmljIj09PW4ubWV0YS50eXBlJiYodD1wYXJzZUZsb2F0KHQpKSxuLnZhbHVlPnR9LHtuYW1lOkpjZSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxrbCgiZ3RlIixmdW5jdGlvbiBienQobixbZV0pe2xldCB0PWU7cmV0dXJuIm51bWVyaWMiPT09bi5t''@;'; put 'put ''ZXRhLnR5cGUmJih0PXBhcnNlRmxvYXQodCkpLG4udmFsdWU+PXR9LHtuYW1lOmV1ZSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxrbCgibHQiLGZ1bmN0aW9uIHd6dChuLFtlXSl7bGV0IHQ9ZTtyZXR1cm4ibnVtZXJpYyI9PT1uLm1ldGEudHlwZSYmKHQ9cGFyc2VGbG9hdCh0''@;'; put 'put ''KSksbi52YWx1ZTx0fSx7bmFtZTp0dWUsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksa2woImx0ZSIsZnVuY3Rpb24gQ3p0KG4sW2VdKXtsZXQgdD1lO3JldHVybiJudW1lcmljIj09PW4ubWV0YS50eXBlJiYodD1OdW1iZXIucGFyc2VGbG9hdCh0KSksbi52YWx1ZTw9dH0se25h''@;'; put 'put ''bWU6bnVlLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IE5HPSJiZXR3ZWVuIjtrbChORyxmdW5jdGlvbiBTenQobixbZSx0XSl7bGV0IHI9ZSxpPXQ7aWYoIm51bWVyaWMiPT09bi5tZXRhLnR5cGUpe2NvbnN0IG89cGFyc2VGbG9hdChyKSxhPXBhcnNlRmxvYXQoaSk7''@;'; put 'put ''cj1NYXRoLm1pbihvLGEpLGk9TWF0aC5tYXgobyxhKX1lbHNlIGlmKCJkYXRlIj09PW4ubWV0YS50eXBlKXtjb25zdCBvPXNjKG4udmFsdWUpLGE9c2MociksbD1zYyhpKTtyZXR1cm4gbnVsbCE9PW8mJm51bGwhPT1hJiZudWxsIT09bCYmby5nZXRUaW1lKCk+PWEuZ2V0VGltZSgpJiZvLmdl''@;'; put 'put ''dFRpbWUoKTw9bC5nZXRUaW1lKCl9cmV0dXJuIG4udmFsdWU+PXImJm4udmFsdWU8PWl9LHtuYW1lOllMLGlucHV0c0NvdW50OjIsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IFlQZT0ibm90X2JldHdlZW4iO2tsKFlQZSxmdW5jdGlvbiBFenQobixlKXtyZXR1cm4hY3goTkcsZSkobil9LHtu''@;'; put 'put ''YW1lOnJ1ZSxpbnB1dHNDb3VudDoyLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBVMGU9ImJlZ2luc193aXRoIjtrbChVMGUsZnVuY3Rpb24gTXp0KG4sW2VdKXtyZXR1cm4gdjEoUGwobi52YWx1ZSksbi5tZXRhLmxvY2FsZSkuc3RhcnRzV2l0aChQbChlKSl9LHtuYW1lOnFjZSxpbnB1dHND''@;'; put 'put ''b3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCB6MGU9ImVuZHNfd2l0aCI7a2woejBlLGZ1bmN0aW9uIFR6dChuLFtlXSl7cmV0dXJuIHYxKFBsKG4udmFsdWUpLG4ubWV0YS5sb2NhbGUpLmVuZHNXaXRoKFBsKGUpKX0se25hbWU6S2NlLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9y''@;'; put 'put ''czohMH0pO2NvbnN0IEZHPSJjb250YWlucyI7a2woRkcsZnVuY3Rpb24geHp0KG4sW2VdKXtyZXR1cm4gdjEoUGwobi52YWx1ZSksbi5tZXRhLmxvY2FsZSkuaW5kZXhPZihQbChlKSk+PTB9LHtuYW1lOlhjZSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBXMGU9Im5v''@;'; put 'put ''dF9jb250YWlucyI7a2woVzBlLGZ1bmN0aW9uIEF6dChuLGUpe3JldHVybiFjeChGRyxlKShuKX0se25hbWU6UWNlLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IFpQZT0iZGF0ZV9iZWZvcmUiO2tsKFpQZSxmdW5jdGlvbiBrenQobixbZV0pe2NvbnN0IHQ9c2Mobi52''@;'; put 'put ''YWx1ZSkscj1zYyhlKTtyZXR1cm4gbnVsbCE9PXQmJm51bGwhPT1yJiZ0LmdldFRpbWUoKTxyLmdldFRpbWUoKX0se25hbWU6JEwsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgR1BlPSJkYXRlX2JlZm9yZV9vcl9lcXVhbCI7a2woR1BlLGZ1bmN0aW9uIFJ6dChuLFtl''@;'; put 'put ''XSl7Y29uc3QgdD1zYyhuLnZhbHVlKSxyPXNjKGUpO3JldHVybiBudWxsIT09dCYmbnVsbCE9PXImJnQuZ2V0VGltZSgpPD1yLmdldFRpbWUoKX0se25hbWU6cUwsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgJFBlPSJkYXRlX2FmdGVyIjtrbCgkUGUsZnVuY3Rpb24g''@;'; put 'put ''SXp0KG4sW2VdKXtjb25zdCB0PXNjKG4udmFsdWUpLHI9c2MoZSk7cmV0dXJuIG51bGwhPT10JiZudWxsIT09ciYmdC5nZXRUaW1lKCk+ci5nZXRUaW1lKCl9LHtuYW1lOlpMLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IHFQZT0iZGF0ZV9hZnRlcl9vcl9lcXVhbCI7''@;'; put 'put ''a2wocVBlLGZ1bmN0aW9uIER6dChuLFtlXSl7Y29uc3QgdD1zYyhuLnZhbHVlKSxyPXNjKGUpO3JldHVybiBudWxsIT09dCYmbnVsbCE9PXImJnQuZ2V0VGltZSgpPj1yLmdldFRpbWUoKX0se25hbWU6R0wsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgS1BlPSJkYXRl''@;'; put 'put ''X3RvbW9ycm93IjtrbChLUGUsZnVuY3Rpb24gTHp0KG4pe2NvbnN0IGU9c2Mobi52YWx1ZSk7cmV0dXJuIG51bGwhPT1lJiZ2WihlLFVkZSgxKSl9LHtuYW1lOkxZLGlucHV0c0NvdW50OjB9KTtjb25zdCBYUGU9ImRhdGVfdG9kYXkiO2tsKFhQZSxmdW5jdGlvbiBPenQobil7Y29uc3QgZT1z''@;'; put 'put ''YyhuLnZhbHVlKTtyZXR1cm4gbnVsbCE9PWUmJnZaKGUsamRlKCkpfSx7bmFtZTpEWSxpbnB1dHNDb3VudDowfSk7Y29uc3QgUVBlPSJkYXRlX3llc3RlcmRheSI7a2woUVBlLGZ1bmN0aW9uIE56dChuKXtjb25zdCBlPXNjKG4udmFsdWUpO3JldHVybiBudWxsIT09ZSYmdlooZSxVZGUoLTEp''@;'; put 'put ''KX0se25hbWU6T1ksaW5wdXRzQ291bnQ6MH0pO2NvbnN0IEpQZT0iaW50bF9kYXRlX2JlZm9yZSI7a2woSlBlLGZ1bmN0aW9uIEZ6dChuLFtlXSl7Y29uc3QgdD1zYyhuLnZhbHVlKSxyPXNjKGUpO3JldHVybiBudWxsIT09dCYmbnVsbCE9PXImJnQ8cn0se25hbWU6JEwsaW5wdXRzQ291bnQ6''@;'; put 'put ''MSxzaG93T3BlcmF0b3JzOiEwLGlucHV0VHlwZToiZGF0ZSJ9KTtjb25zdCBlSGU9ImludGxfZGF0ZV9iZWZvcmVfb3JfZXF1YWwiO2tsKGVIZSxmdW5jdGlvbiBQenQobixbZV0pe2NvbnN0IHQ9c2Mobi52YWx1ZSkscj1zYyhlKTtyZXR1cm4gbnVsbCE9PXQmJm51bGwhPT1yJiZ0PD1yfSx7''@;'; put 'put ''bmFtZTpxTCxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITAsaW5wdXRUeXBlOiJkYXRlIn0pO2NvbnN0IHRIZT0iaW50bF9kYXRlX2FmdGVyIjtrbCh0SGUsZnVuY3Rpb24gSHp0KG4sW2VdKXtjb25zdCB0PXNjKG4udmFsdWUpLHI9c2MoZSk7cmV0dXJuIG51bGwhPT10JiZudWxsIT09''@;'; put 'put ''ciYmdD5yfSx7bmFtZTpaTCxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITAsaW5wdXRUeXBlOiJkYXRlIn0pO2NvbnN0IG5IZT0iaW50bF9kYXRlX2FmdGVyX29yX2VxdWFsIjtrbChuSGUsZnVuY3Rpb24gVnp0KG4sW2VdKXtjb25zdCB0PXNjKG4udmFsdWUpLHI9c2MoZSk7cmV0dXJu''@;'; put 'put ''IG51bGwhPT10JiZudWxsIT09ciYmdD49cn0se25hbWU6R0wsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwLGlucHV0VHlwZToiZGF0ZSJ9KTtjb25zdCBySGU9ImludGxfZGF0ZV9iZXR3ZWVuIjtrbChySGUsZnVuY3Rpb24gQnp0KG4sW2UsdF0pe2NvbnN0IHI9c2Mobi52YWx1ZSks''@;'; put 'put ''aT1zYyhlKSxvPXNjKHQpO3JldHVybiBudWxsIT09ciYmbnVsbCE9PWkmJm51bGwhPT1vJiZyPj1pJiZyPD1vfSx7bmFtZTpZTCxpbnB1dHNDb3VudDoyLHNob3dPcGVyYXRvcnM6ITAsaW5wdXRUeXBlOiJkYXRlIn0pO2NvbnN0IGlIZT0iaW50bF9kYXRlX3RvbW9ycm93IjtrbChpSGUsZnVu''@;'; put 'put ''Y3Rpb24ganp0KG4pe2NvbnN0IGU9c2Mobi52YWx1ZSk7aWYobnVsbD09PWUpcmV0dXJuITE7Y29uc3QgdD1uZXcgRGF0ZTtyZXR1cm4gdC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzEpLGUuZ2V0RnVsbFllYXIoKT09PXQuZ2V0RnVsbFllYXIoKSYmZS5nZXRNb250aCgpPT09dC5nZXRNb250aCgp''@;'; put 'put ''JiZlLmdldERhdGUoKT09PXQuZ2V0RGF0ZSgpfSx7bmFtZTpMWSxpbnB1dHNDb3VudDowLGlucHV0VHlwZToiZGF0ZSJ9KTtjb25zdCBvSGU9ImludGxfZGF0ZV90b2RheSI7a2wob0hlLGZ1bmN0aW9uIFV6dChuKXtjb25zdCBlPXNjKG4udmFsdWUpO2lmKG51bGw9PT1lKXJldHVybiExO2Nv''@;'; put 'put ''bnN0IHQ9bmV3IERhdGU7cmV0dXJuIGUuZ2V0RnVsbFllYXIoKT09PXQuZ2V0RnVsbFllYXIoKSYmZS5nZXRNb250aCgpPT09dC5nZXRNb250aCgpJiZlLmdldERhdGUoKT09PXQuZ2V0RGF0ZSgpfSx7bmFtZTpEWSxpbnB1dHNDb3VudDowLGlucHV0VHlwZToiZGF0ZSJ9KTtjb25zdCBhSGU9''@;'; put 'put ''ImludGxfZGF0ZV95ZXN0ZXJkYXkiO2tsKGFIZSxmdW5jdGlvbiB6enQobil7Y29uc3QgZT1zYyhuLnZhbHVlKTtpZihudWxsPT09ZSlyZXR1cm4hMTtjb25zdCB0PW5ldyBEYXRlO3JldHVybiB0LnNldERhdGUodC5nZXREYXRlKCktMSksZS5nZXRGdWxsWWVhcigpPT09dC5nZXRGdWxsWWVh''@;'; put 'put ''cigpJiZlLmdldE1vbnRoKCk9PT10LmdldE1vbnRoKCkmJmUuZ2V0RGF0ZSgpPT09dC5nZXREYXRlKCl9LHtuYW1lOk9ZLGlucHV0c0NvdW50OjAsaW5wdXRUeXBlOiJkYXRlIn0pO2NvbnN0IHNIZT0iaW50bF90aW1lX2JlZm9yZSI7a2woc0hlLGZ1bmN0aW9uIFd6dChuLFtlXSl7Y29uc3Qg''@;'; put 'put ''dD16ZihuLnZhbHVlKSxyPXpmKGUpO3JldHVybiBudWxsIT09dCYmbnVsbCE9PXImJnQ8cn0se25hbWU6JEwsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwLGlucHV0VHlwZToidGltZSJ9KTtjb25zdCBsSGU9ImludGxfdGltZV9iZWZvcmVfb3JfZXF1YWwiO2tsKGxIZSxmdW5jdGlv''@;'; put 'put ''biBZenQobixbZV0pe2NvbnN0IHQ9emYobi52YWx1ZSkscj16ZihlKTtyZXR1cm4gbnVsbCE9PXQmJm51bGwhPT1yJiZ0PD1yfSx7bmFtZTpxTCxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITAsaW5wdXRUeXBlOiJ0aW1lIn0pO2NvbnN0IGNIZT0iaW50bF90aW1lX2FmdGVyIjtrbChj''@;'; put 'put ''SGUsZnVuY3Rpb24gWnp0KG4sW2VdKXtjb25zdCB0PXpmKG4udmFsdWUpLHI9emYoZSk7cmV0dXJuIG51bGwhPT10JiZudWxsIT09ciYmdD5yfSx7bmFtZTpaTCxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITAsaW5wdXRUeXBlOiJ0aW1lIn0pO2NvbnN0IHVIZT0iaW50bF90aW1lX2Fm''@;'; put 'put ''dGVyX29yX2VxdWFsIjtrbCh1SGUsZnVuY3Rpb24gR3p0KG4sW2VdKXtjb25zdCB0PXpmKG4udmFsdWUpLHI9emYoZSk7cmV0dXJuIG51bGwhPT10JiZudWxsIT09ciYmdD49cn0se25hbWU6R0wsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwLGlucHV0VHlwZToidGltZSJ9KTtjb25z''@;'; put 'put ''dCBkSGU9ImludGxfdGltZV9iZXR3ZWVuIjtmdW5jdGlvbiBRenQobixlKXtsZXQgdD1uO3JldHVybiIiPT09dCYmKHQ9YCgke2V9KWApLHR9ZnVuY3Rpb24gTE4obil7Y29uc3QgZT1uZXcgU2V0KG4pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oYXModCl9fWZ1bmN0aW9uIFkwZShu''@;'; put 'put ''KXtyZXR1cm4gbj8/IiJ9ZnVuY3Rpb24gWjBlKG4sZSl7cmV0dXJuIEFycmF5LmZyb20obmV3IFNldChuKSkubWFwKHI9PlkwZShyKSkuc29ydChlPz8oKHIsaSk9PiJudW1iZXIiPT10eXBlb2YgciYmIm51bWJlciI9PXR5cGVvZiBpP3ItaTpyPT09aT8wOnI+aT8xOi0xKSl9ZnVuY3Rpb24g''@;'; put 'put ''aEhlKG4sZSx0LHIpe2NvbnN0IGk9W10sbz1uPT09ZTtsZXQgYTtyZXR1cm4gb3x8KGE9TE4oZSkpLG4uZm9yRWFjaChsPT57bGV0IHU9ITE7KG98fGEobCkpJiYodT0hMCk7Y29uc3QgZz17Y2hlY2tlZDp1LHZhbHVlOmwsdmlzdWFsVmFsdWU6UXp0KGwsdCl9O3ImJnIoZyksaS5wdXNoKGcp''@;'; put 'put ''fSksaX1rbChkSGUsZnVuY3Rpb24gJHp0KG4sW2UsdF0pe2NvbnN0IHI9emYobi52YWx1ZSksaT16ZihlKSxvPXpmKHQpO3JldHVybiBudWxsIT09ciYmbnVsbCE9PWkmJm51bGwhPT1vJiZyPj1pJiZyPD1vfSx7bmFtZTpZTCxpbnB1dHNDb3VudDoyLHNob3dPcGVyYXRvcnM6ITAsaW5wdXRU''@;'; put 'put ''eXBlOiJ0aW1lIn0pLGtsKCJmYWxzZSIsZnVuY3Rpb24gS3p0KCl7cmV0dXJuITF9LHtuYW1lOiJGYWxzZSJ9KSxPeGUoKTtjb25zdCBDXz0iYnlfdmFsdWUiO2tsKENfLGZ1bmN0aW9uIEp6dChuLFtlXSl7cmV0dXJuIGUobi52YWx1ZSl9LHtuYW1lOiJCeSB2YWx1ZSIsaW5wdXRzQ291bnQ6''@;'; put 'put ''MCxpbnB1dFZhbHVlc0RlY29yYXRvcjooW25dKT0+W0xOKG4pXSxzaG93T3BlcmF0b3JzOiExfSksa2woInRydWUiLGZ1bmN0aW9uIHRXdCgpe3JldHVybiEwfSx7bmFtZToiVHJ1ZSJ9KTtjb25zdCBPTj17fTtmdW5jdGlvbiByV3Qobil7cmV0dXJuIE9OW25dLm5hbWV9ZnVuY3Rpb24gRzBl''@;'; put 'put ''KG4sZSx0KXtPTltuXT17bmFtZTplLGZ1bmM6dH19Y29uc3QgRDQ9ImNvbmp1bmN0aW9uIjtHMGUoRDQsYXVlLGZ1bmN0aW9uIG9XdChuLGUpe3JldHVybiBuLmV2ZXJ5KHQ9PnQuZnVuYyhlKSl9KTtjb25zdCBQRz0iZGlzanVuY3Rpb24iO0cwZShQRyxOWSxmdW5jdGlvbiBzV3QobixlKXty''@;'; put 'put ''ZXR1cm4gbi5zb21lKHQ9PnQuZnVuYyhlKSl9KTtjb25zdCAkMGU9ImRpc2p1bmN0aW9uV2l0aEV4dHJhQ29uZGl0aW9uIjtHMGUoJDBlLE5ZLGZ1bmN0aW9uIGNXdChuLGUpe24ubGVuZ3RoPDMmJkpyKCJPcGVyYXRpb24gZG9lc24ndCB3b3JrIG9uIGxlc3MgdGhlbiB0aHJlZSBjb25kaXRp''@;'; put 'put ''b25zLiIpO2NvbnN0IHQ9bltuLmxlbmd0aC0xXTtyZXR1cm4gbi5zbGljZSgwLG4ubGVuZ3RoLTEpLnNvbWUoaT0+ISFpLmZ1bmMoZSkpJiYhIXQuZnVuYyhlKX0pO2NvbnN0IHVXdD0ibnVtZXJpYyIsZkhlPSJ0ZXh0IixkV3Q9ImRhdGUiLGhXdD0iaW50bC1kYXRlIixmV3Q9ImludGwtdGlt''@;'; put 'put ''ZSIscEhlPXtbdVd0XTpbYmgsdnMsYUMsdXgsdnMsc0MsZHgsdnMsImd0IiwiZ3RlIiwibHQiLCJsdGUiLE5HLFlQZV0sW2ZIZV06W2JoLHZzLGFDLHV4LHZzLHNDLGR4LHZzLFUwZSx6MGUsdnMsRkcsVzBlXSxbZFd0XTpbYmgsdnMsYUMsdXgsdnMsc0MsZHgsdnMsWlBlLEdQZSwkUGUscVBl''@;'; put 'put ''LE5HLHZzLEtQZSxYUGUsUVBlXSxbaFd0XTpbYmgsdnMsYUMsdXgsdnMsc0MsZHgsdnMsSlBlLGVIZSx0SGUsbkhlLHJIZSx2cyxpSGUsb0hlLGFIZV0sW2ZXdF06W2JoLHZzLGFDLHV4LHZzLHNDLGR4LHZzLFUwZSx6MGUsdnMsRkcsVzBlLHZzLHNIZSxsSGUsY0hlLHVIZSxkSGVdfSxLMGU9''@;'; put 'put ''ImJ1aWxkaW5nIixnSGU9WyJjbGljayIsImlucHV0Iiwia2V5ZG93biIsImtleXByZXNzIiwia2V5dXAiLCJmb2N1cyIsImJsdXIiLCJjaGFuZ2UiXTtjbGFzcyBpZ3tzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIHE1KHtjbGFzc05hbWU6IiIsdmFsdWU6IiIsdGFnTmFtZToiZGl2Iixj''@;'; put 'put ''aGlsZHJlbjpbXSx3cmFwSXQ6ITB9KX1zZXRWYWx1ZShlKXt0aGlzLm9wdGlvbnMudmFsdWU9ZSx0aGlzLnVwZGF0ZSgpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZX1nZXQgZWxlbWVudCgpe3JldHVybiB0aGlzLmJ1aWxkU3RhdGU9PT1LMGU/dGhpcy5fZWxlbWVudDoi''@;'; put 'put ''YnVpbHQiPT09dGhpcy5idWlsZFN0YXRlPyh0aGlzLnVwZGF0ZSgpLHRoaXMuX2VsZW1lbnQpOih0aGlzLmJ1aWxkU3RhdGU9SzBlLHRoaXMuYnVpbGQoKSx0aGlzLmJ1aWxkU3RhdGU9ImJ1aWx0Iix0aGlzLl9lbGVtZW50KX1pc0J1aWx0KCl7cmV0dXJuImJ1aWx0Ij09PXRoaXMuYnVpbGRT''@;'; put 'put ''dGF0ZX10cmFuc2xhdGVJZlBvc3NpYmxlKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmZS5zdGFydHNXaXRoKGpmKT90aGlzLmhvdD8uZ2V0VHJhbnNsYXRlZFBocmFzZShlKT8/ZTplfWJ1aWxkKCl7aWYoIXRoaXMuX2VsZW1lbnR8fCF0aGlzLmhvdClyZXR1cm47Y29uc3QgZT10aGlz''@;'; put 'put ''Ll9lbGVtZW50LHtldmVudE1hbmFnZXI6dH09dGhpcyxyPShpLG8pPT57dD8uYWRkRXZlbnRMaXN0ZW5lcihpLG8sYT0+dGhpcy5ydW5Mb2NhbEhvb2tzKG8sYSx0aGlzKSl9O2lmKHRoaXMuYnVpbGRTdGF0ZXx8KHRoaXMuYnVpbGRTdGF0ZT1LMGUpLGUuZGF0YXNldC5ob3RJbnB1dD0idHJ1''@;'; put 'put ''ZSIsdm9pZCAwIT09dGhpcy5vcHRpb25zLnRhYkluZGV4JiZlLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLFN0cmluZyh0aGlzLm9wdGlvbnMudGFiSW5kZXgpKSx2b2lkIDAhPT10aGlzLm9wdGlvbnMucm9sZSYmZS5zZXRBdHRyaWJ1dGUoInJvbGUiLHRoaXMub3B0aW9ucy5yb2xlKSx0aGlz''@;'; put 'put ''Lm9wdGlvbnMuY2xhc3NOYW1lJiZZcihlLHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLHRoaXMub3B0aW9ucy5jaGlsZHJlbj8ubGVuZ3RoKVhuKHRoaXMub3B0aW9ucy5jaGlsZHJlbixpPT57Y29uc3Qgbz1pLmVsZW1lbnQ7byYmZS5hcHBlbmRDaGlsZChvKX0pO2Vsc2UgaWYodGhpcy5vcHRp''@;'; put 'put ''b25zLndyYXBJdCl7Y29uc3QgaT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm9wdGlvbnMudGFnTmFtZT8/ImRpdiIpO2kuZGF0YXNldC5ob3RJbnB1dD0idHJ1ZSIsYWModGhpcy5vcHRpb25zLChvLGEpPT57dm9pZCAwIT09aVthXSYmImNsYXNzTmFtZSIhPT1h''@;'; put 'put ''JiYidGFnTmFtZSIhPT1hJiYiY2hpbGRyZW4iIT09YSYmKGlbYV09dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKG8pKX0pLGUuYXBwZW5kQ2hpbGQoaSksWG4oZ0hlLG89PnIoaSxvKSl9ZWxzZSBYbihnSGUsaT0+cihlLGkpKX11cGRhdGUoKXt9cmVzZXQoKXt0aGlzLm9wdGlvbnMudmFsdWU9''@;'; put 'put ''IiIsdGhpcy51cGRhdGUoKX1zaG93KCl7Y29uc3QgZT10aGlzLmVsZW1lbnQ7ZSYmKGUuc3R5bGUuZGlzcGxheT0iIil9aGlkZSgpe2NvbnN0IGU9dGhpcy5lbGVtZW50O2UmJihlLnN0eWxlLmRpc3BsYXk9Im5vbmUiKX1mb2N1cygpe31kZXN0cm95KCl7dGhpcy5ldmVudE1hbmFnZXI/LmRl''@;'; put 'put ''c3Ryb3koKSx0aGlzLmV2ZW50TWFuYWdlcj1udWxsLHRoaXMuaG90PW51bGwsdGhpcy5fZWxlbWVudD8ucGFyZW50Tm9kZSYmdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQ9bnVsbH1jb25zdHJ1Y3RvcihlLHQpe3RoaXMu''@;'; put 'put ''ZXZlbnRNYW5hZ2VyPW5ldyBXMih0aGlzKSx0aGlzLmhvdD1lLHRoaXMub3B0aW9ucz1ZZChpZy5ERUZBVUxUUyx0KSx0aGlzLl9lbGVtZW50PWUucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5vcHRpb25zLndyYXBJdD8iZGl2Ijp0aGlzLm9wdGlvbnMudGFnTmFtZT8/ImRpdiIp''@;'; put 'put ''fX1mdW5jdGlvbiBtSGUobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHZIZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBOTihuLGUpe3JldHVybiBmdW5jdGlvbiBnV3QobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLHZIZShuLGUsImdl''@;'; put 'put ''dCIpKX1mdW5jdGlvbiBfSGUobixlLHQpe3JldHVybiBmdW5jdGlvbiBtV3QobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZh''@;'; put 'put ''bHVlPXR9fShuLHZIZShuLGUsInNldCIpLHQpLHR9WWwoaWcsX2gpO3ZhciBTXz1uZXcgV2Vha01hcCx5SGU9bmV3IFdlYWtTZXQ7Y2xhc3MgRV8gZXh0ZW5kcyBpZ3tzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIHE1KHtwbGFjZWhvbGRlcjoiIix0eXBlOiJ0ZXh0Iix0YWdOYW1lOiJp''@;'; put 'put ''bnB1dCIsdGFiSW5kZXg6LTF9KX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5hZGRMb2NhbEhvb2soImtleXVwIixlPT5mdW5jdGlvbiBfV3QobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNl''@;'; put 'put ''Iik7cmV0dXJuIHR9KHRoaXMseUhlLGJXdCkuY2FsbCh0aGlzLGUpKX1idWlsZCgpe2lmKHN1cGVyLmJ1aWxkKCksIXRoaXMuX2VsZW1lbnR8fCF0aGlzLmhvdClyZXR1cm47Y29uc3QgZT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7X0hlKHRoaXMsU18sdGhp''@;'; put 'put ''cy5fZWxlbWVudC5maXJzdENoaWxkKSxZcih0aGlzLl9lbGVtZW50LCJodFVJSW5wdXQiKSxZcihlLCJodFVJSW5wdXRJY29uIiksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChlKSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe3RoaXMuaXNCdWlsdCgpJiZOTih0aGlzLFNfKSYmKE5OKHRoaXMs''@;'; put 'put ''U18pLnR5cGU9U3RyaW5nKHRoaXMub3B0aW9ucy50eXBlPz8idGV4dCIpLE5OKHRoaXMsU18pLnBsYWNlaG9sZGVyPVN0cmluZyh0aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKT8/IiIpLE5OKHRoaXMsU18pLnZhbHVlPVN0cmluZyh0aGlzLnRyYW5z''@;'; put 'put ''bGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnZhbHVlKT8/IiIpKX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZOTih0aGlzLFNfKT8uZm9jdXMoKX1jb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsWWQoRV8uREVGQVVMVFMsdCkpLGZ1bmN0aW9uIHlXdChuLGUpe21IZShuLGUpLGUuYWRkKG4p''@;'; put 'put ''fSh0aGlzLHlIZSksZnVuY3Rpb24gdld0KG4sZSx0KXttSGUobixlKSxlLnNldChuLHQpfSh0aGlzLFNfLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxfSGUodGhpcyxTXyxudWxsKSx0aGlzLnJlZ2lzdGVySG9va3MoKX19ZnVuY3Rpb24gYld0KG4pe3RoaXMub3B0aW9ucy52YWx1ZT1B''@;'; put 'put ''YShuKS52YWx1ZX1mdW5jdGlvbiBiSGUobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHdIZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBPZChuLGUpe3JldHVybiBmdW5jdGlvbiB3V3QobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLHdI''@;'; put 'put ''ZShuLGUsImdldCIpKX1mdW5jdGlvbiBGTihuLGUsdCl7YkhlKG4sZSksZS5zZXQobix0KX1mdW5jdGlvbiBMNChuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIENXdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''YXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4sd0hlKG4sZSwic2V0IiksdCksdH1mdW5jdGlvbiBYMGUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24g''@;'; put 'put ''bm9uLWluc3RhbmNlIik7cmV0dXJuIHR9ZnVuY3Rpb24gUTBlKG4sZSl7YkhlKG4sZSksZS5hZGQobil9dmFyIEMxPW5ldyBXZWFrTWFwLFBOPW5ldyBXZWFrTWFwLEhOPW5ldyBXZWFrTWFwLFZOPW5ldyBXZWFrTWFwLEJOPW5ldyBXZWFrTWFwLENIZT1uZXcgV2Vha1NldCxTSGU9bmV3IFdl''@;'; put 'put ''YWtTZXQsRUhlPW5ldyBXZWFrU2V0O2NsYXNzIGpOIGV4dGVuZHMgaWd7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBxNSh7Y2xhc3NOYW1lOiJodFVJU2VsZWN0Iix3cmFwSXQ6ITEsdGFiSW5kZXg6LTF9KX1nZXRNZW51KCl7cmV0dXJuIE9kKHRoaXMsQzEpfXJlZ2lzdGVySG9va3Mo''@;'; put 'put ''KXt0aGlzLmFkZExvY2FsSG9vaygiY2xpY2siLCgpPT5YMGUodGhpcyxFSGUsTVd0KS5jYWxsKHRoaXMpKX1zZXRJdGVtcyhlKXtMNCh0aGlzLFBOLHRoaXMudHJhbnNsYXRlTmFtZXMoZSkpLE9kKHRoaXMsQzEpJiZPZCh0aGlzLEMxKS5zZXRNZW51SXRlbXMoT2QodGhpcyxQTikpfXRyYW5z''@;'; put 'put ''bGF0ZU5hbWVzKGUpe3JldHVybiBYbihlLHQ9Pnt0Lm5hbWU9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHQubmFtZSl9KSxlfWJ1aWxkKCl7aWYoc3VwZXIuYnVpbGQoKSwhdGhpcy5ob3R8fCF0aGlzLl9lbGVtZW50KXJldHVybjtjb25zdCBlPXRoaXMuaG90LHQ9dGhpcy5fZWxlbWVudDtM''@;'; put 'put ''NCh0aGlzLEMxLG5ldyBHVChlLHtjbGFzc05hbWU6Imh0U2VsZWN0VUkgaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUiLGtlZXBJblZpZXdwb3J0OiExLHN0YW5kYWxvbmU6ITAsY29udGFpbmVyOnRoaXMub3B0aW9ucy5tZW51Q29udGFpbmVyfSkpLE9kKHRoaXMsQzEpLnNldE1lbnVJdGVtcyhP''@;'; put 'put ''ZCh0aGlzLFBOKSk7Y29uc3Qgcj1uZXcgaWcoZSx7Y2xhc3NOYW1lOiJodFVJU2VsZWN0Q2FwdGlvbiJ9KSxpPW5ldyBpZyhlLHtjbGFzc05hbWU6Imh0VUlTZWxlY3REcm9wZG93biJ9KTtpZihMNCh0aGlzLEhOLHIpLEw0KHRoaXMsVk4sci5lbGVtZW50KSxMNCh0aGlzLEJOLGkpLGUuZ2V0''@;'; put 'put ''U2V0dGluZ3MoKS5hcmlhVGFncyl7Y29uc3Qgbz1pLmVsZW1lbnQ7byYmS28obyxbWyJhcmlhLWhpZGRlbiIsInRydWUiXV0pLEtvKHQsW1sicm9sZSIsImxpc3Rib3giXV0pfVhuKFtyLGldLG89Pntjb25zdCBhPW8uZWxlbWVudDthJiZ0LmFwcGVuZENoaWxkKGEpfSksT2QodGhpcyxDMSku''@;'; put 'put ''YWRkTG9jYWxIb29rKCJzZWxlY3QiLG89PlgwZSh0aGlzLENIZSxTV3QpLmNhbGwodGhpcyxvKSksT2QodGhpcyxDMSkuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+WDBlKHRoaXMsU0hlLEVXdCkuY2FsbCh0aGlzKSksdGhpcy51cGRhdGUoKX11cGRhdGUoKXtpZighdGhpcy5pc0J1''@;'; put 'put ''aWx0KCkpcmV0dXJuO2xldCBlO2U9dGhpcy5vcHRpb25zLnZhbHVlP3RoaXMub3B0aW9ucy52YWx1ZS5uYW1lOk9kKHRoaXMsQzEpPy5ob3Q/LmdldFRyYW5zbGF0ZWRQaHJhc2UoSVkpLE9kKHRoaXMsVk4pJiYoT2QodGhpcyxWTikudGV4dENvbnRlbnQ9ZT8/bnVsbCksc3VwZXIudXBkYXRl''@;'; put 'put ''KCl9b3Blbk9wdGlvbnMoKXtjb25zdCBlPXRoaXMuZWxlbWVudDtpZighZSlyZXR1cm47Y29uc3QgdD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO09kKHRoaXMsQzEpJiYoT2QodGhpcyxDMSkub3BlbigpLE9kKHRoaXMsQzEpLnNldFBvc2l0aW9uKHtsZWZ0OnRoaXMuaG90Py5pc0x0cigp''@;'; put 'put ''P3QubGVmdC01OnQubGVmdC0zMSx0b3A6dC50b3AtMSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH0pLE9kKHRoaXMsQzEpPy5nZXROYXZpZ2F0b3IoKT8udG9GaXJzdEl0ZW0oKSxPZCh0aGlzLEMxKT8uZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCk/LmFkZEN1c3RvbVNob3J0Y3V0''@;'; put 'put ''cyhbe2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxjYWxsYmFjazpyPT57dGhpcy5jbG9zZU9wdGlvbnMoKSx0aGlzLnJ1bkxvY2FsSG9va3MoInRhYktleWRvd24iLHIpfX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxjYWxsYmFjazooKT0+ITF9XSkpfWNsb3NlT3B0aW9u''@;'; put 'put ''cygpe09kKHRoaXMsQzEpJiZPZCh0aGlzLEMxKS5jbG9zZSgpfWZvY3VzKCl7dGhpcy5pc0J1aWx0KCkmJnRoaXMuZWxlbWVudD8uZm9jdXMoKX1kZXN0cm95KCl7T2QodGhpcyxDMSkmJihPZCh0aGlzLEMxKS5kZXN0cm95KCksTDQodGhpcyxDMSxudWxsKSksT2QodGhpcyxITikmJk9kKHRo''@;'; put 'put ''aXMsSE4pLmRlc3Ryb3koKSxPZCh0aGlzLEJOKSYmT2QodGhpcyxCTikuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX1jb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsWWQoak4uREVGQVVMVFMsdCkpLFEwZSh0aGlzLENIZSksUTBlKHRoaXMsU0hlKSxRMGUodGhpcyxFSGUpLEZOKHRoaXMsQzEs''@;'; put 'put ''e3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEZOKHRoaXMsUE4se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEZOKHRoaXMsSE4se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEZOKHRoaXMsVk4se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEZOKHRoaXMsQk4se3dyaXRhYmxl''@;'; put 'put ''OiEwLHZhbHVlOnZvaWQgMH0pLEw0KHRoaXMsQzEsbnVsbCksTDQodGhpcyxQTixbXSksTDQodGhpcyxITixudWxsKSxMNCh0aGlzLFZOLG51bGwpLEw0KHRoaXMsQk4sbnVsbCksdGhpcy5yZWdpc3Rlckhvb2tzKCl9fWZ1bmN0aW9uIFNXdChuKXtuLm5hbWUhPT12cyYmKHRoaXMub3B0aW9u''@;'; put 'put ''cy52YWx1ZT1uLHRoaXMudXBkYXRlKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJzZWxlY3QiLHRoaXMub3B0aW9ucy52YWx1ZSkpfWZ1bmN0aW9uIEVXdCgpe3RoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbG9zZSIpfWZ1bmN0aW9uIE1XdCgpe3RoaXMub3Blbk9wdGlvbnMoKX1mdW5jdGlvbiBN''@;'; put 'put ''SGUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHR9ZnVuY3Rpb24gVEhlKG4sZSl7KGZ1bmN0aW9uIFRXdChuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLGUpLGUuYWRkKG4pfXZhciB4SGU9bmV3IFdlYWtTZXQsQUhlPW5ldyBXZWFrU2V0O2NsYXNzIEowZSBleHRlbmRzIElOe3JlZ2lzdGVySG9va3MoKXt0aGlz''@;'; put 'put ''LmdldFNlbGVjdEVsZW1lbnQoKS5hZGRMb2NhbEhvb2soInNlbGVjdCIsZT0+TUhlKHRoaXMseEhlLHhXdCkuY2FsbCh0aGlzLGUpKS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT50aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xvc2UiKSkuYWRkTG9jYWxIb29rKCJ0YWJLZXlkb3du''@;'; put 'put ''IixlPT50aGlzLnJ1bkxvY2FsSG9va3MoInNlbGVjdFRhYktleWRvd24iLGUpKSxYbih0aGlzLmdldElucHV0RWxlbWVudHMoKSxlPT57ZS5hZGRMb2NhbEhvb2soImtleWRvd24iLHQ9Pk1IZSh0aGlzLEFIZSxBV3QpLmNhbGwodGhpcyx0KSl9KX1zZXRTdGF0ZShlKXtpZih0aGlzLnJlc2V0''@;'; put 'put ''KCksIWUpcmV0dXJuO2NvbnN0IHQ9cTUoZS5jb21tYW5kKTsic3RyaW5nIj09dHlwZW9mIHQubmFtZSYmdC5uYW1lLnN0YXJ0c1dpdGgoZmQpJiYodC5uYW1lPXRoaXMuaG90Py5nZXRUcmFuc2xhdGVkUGhyYXNlKHQubmFtZSk/P3QubmFtZSksdGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuc2V0''@;'; put 'put ''VmFsdWUodCksWG4oZS5hcmdzLChyLGkpPT57aWYoaT4odC5pbnB1dHNDb3VudD8/MCktMSlyZXR1cm4hMTtjb25zdCBvPXRoaXMuZ2V0SW5wdXRFbGVtZW50KGkpO28uc2V0VmFsdWUociksb1sodC5pbnB1dHNDb3VudD8/MCk+aT8ic2hvdyI6ImhpZGUiXSgpLGl8fHRoaXMuaG90Py5fcmVn''@;'; put 'put ''aXN0ZXJUaW1lb3V0KCgpPT5vLmZvY3VzKCksMTApfSl9Z2V0U3RhdGUoKXtjb25zdCBlPXRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLmdldFZhbHVlKCl8fG9DKGJoKSx0PVtdO3JldHVybiBYbih0aGlzLmdldElucHV0RWxlbWVudHMoKSwocixpKT0+eyhlLmlucHV0c0NvdW50Pz8wKT5pJiZ0''@;'; put 'put ''LnB1c2goci5nZXRWYWx1ZSgpKX0pLHtjb21tYW5kOmUsYXJnczp0fX11cGRhdGVTdGF0ZShlLHQpe2NvbnN0IHI9b0MoZT9lLm5hbWU6YmgpO3RoaXMuc3RhdGU/LnNldFZhbHVlQXRJbmRleCh0LHtjb21tYW5kOnIsYXJnczplP2UuYXJnczpbXX0pLGV8fFhuKHRoaXMuZ2V0SW5wdXRFbGVt''@;'; put 'put ''ZW50cygpLGk9Pmkuc2V0VmFsdWUobnVsbCkpfWdldFNlbGVjdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5maW5kKGU9PmUgaW5zdGFuY2VvZiBqTil9Z2V0SW5wdXRFbGVtZW50KGU9MCl7cmV0dXJuIHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpW2VdfWdldElucHV0RWxlbWVudHMo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIoZT0+ZSBpbnN0YW5jZW9mIEVfKX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVu''@;'; put 'put ''KCkscmVuZGVyZXI6KGUsdCxyLGksbyxhKT0+e2hzKHQucGFyZW50Tm9kZSkmJihZcih0LnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVDb25kaXRpb24iKSx0aGlzLmFkZFNlcGFyYXRvciYmWXIodC5wYXJlbnROb2RlLCJib3JkZXIiKSk7Y29uc3QgbD10aGlzLmhvdD8ucm9vdERvY3VtZW50''@;'; put 'put ''LmNyZWF0ZUVsZW1lbnQoImRpdiIpPz90Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIFlyKGwsImh0RmlsdGVyc01lbnVMYWJlbCIpLGwudGV4dENvbnRlbnQ9YSx0LmFwcGVuZENoaWxkKGwpLHQucGFyZW50RWxlbWVudD8uaGFzQXR0cmlidXRlKCJnaG9zdC10''@;'; put 'put ''YWJsZSIpfHxYbih0aGlzLmVsZW1lbnRzLHU9Pntjb25zdCBnPXUuZWxlbWVudDtnJiZ0LmFwcGVuZENoaWxkKGcpfSksdH19fXJlc2V0KCl7Y29uc3QgZT10aGlzLmhvdD8uZ2V0UGx1Z2luKCJmaWx0ZXJzIikuZ2V0U2VsZWN0ZWRDb2x1bW4oKT8/bnVsbDtsZXQgdD1bb0MoYmgpXTtpZihu''@;'; put 'put ''dWxsIT09ZSl7Y29uc3R7dmlzdWFsSW5kZXg6cn09ZTt0PWZ1bmN0aW9uIHBXdChuKXtjb25zdCBlPVtdO2xldCB0PW47cmV0dXJuIHBIZVt0XXx8KHQ9InRleHQiKSxYbihwSGVbdF0scj0+e2xldCBpO2k9cj09PXZzP3tuYW1lOnZzfTp7Li4ub0Mocil9LGUucHVzaChpKX0pLGV9KHRoaXMu''@;'; put 'put ''aG90Py5nZXREYXRhVHlwZSgwLHIsdGhpcy5ob3QuY291bnRSb3dzKCkscik/PyJ0ZXh0Iil9WG4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCkscj0+ci5oaWRlKCkpLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLnNldEl0ZW1zKHQpLHN1cGVyLnJlc2V0KCksdGhpcy5nZXRTZWxlY3RFbGVtZW50''@;'; put 'put ''KCkuc2V0VmFsdWUodFswXSl9Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHtpZDp0LmlkLHN0YXRlbGVzczohMX0pLFRIZSh0aGlzLHhIZSksVEhlKHRoaXMsQUhlKSx0aGlzLm5hbWU9IiIsdGhpcy5hZGRTZXBhcmF0b3I9ITEsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmFkZFNlcGFyYXRvcj10''@;'; put 'put ''LmFkZFNlcGFyYXRvcix0aGlzLmVsZW1lbnRzLnB1c2gobmV3IGpOKGUse21lbnVDb250YWluZXI6dC5tZW51Q29udGFpbmVyfSkpLHRoaXMuZWxlbWVudHMucHVzaChuZXcgRV8oZSx7cGxhY2Vob2xkZXI6aHVlfSkpLHRoaXMuZWxlbWVudHMucHVzaChuZXcgRV8oZSx7cGxhY2Vob2xkZXI6''@;'; put 'put ''ZnVlfSkpLHRoaXMucmVnaXN0ZXJIb29rcygpfX1mdW5jdGlvbiB4V3Qobil7WG4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksKGUsdCk9PntlWyhuLmlucHV0c0NvdW50Pz8wKT50PyJzaG93IjoiaGlkZSJdKCksMD09PXQmJnRoaXMuaG90Py5fcmVnaXN0ZXJUaW1lb3V0KCgpPT5lLmZvY3Vz''@;'; put 'put ''KCksMTApfSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLG4pfWZ1bmN0aW9uIEFXdChuKXtodyhuLmtleUNvZGUsIkVTQ0FQRSIpJiYodGhpcy5ydW5Mb2NhbEhvb2tzKCJjYW5jZWwiKSxGMyhuKSl9ZnVuY3Rpb24ga0hlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIE1fKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIFJXdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sa0hlKG4sZSwiZ2V0''@;'; put 'put ''IikpfWZ1bmN0aW9uIFJIZShuLGUsdCl7KGZ1bmN0aW9uIGtXdChuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLGUpLGUuc2V0KG4sdCl9ZnVuY3Rp''@;'; put 'put ''b24gSEcobixlLHQpe3JldHVybiBmdW5jdGlvbiBJV3QobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLGtI''@;'; put 'put ''ZShuLGUsInNldCIpLHQpLHR9dmFyIGo3PW5ldyBXZWFrTWFwLFVOPW5ldyBXZWFrTWFwO2NsYXNzIFZHIGV4dGVuZHMgaWd7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBxNSh7dHlwZToicmFkaW8iLHRhZ05hbWU6ImlucHV0IixjbGFzc05hbWU6Imh0VUlSYWRpbyIsbGFiZWw6e319''@;'; put 'put ''KX1idWlsZCgpe2lmKHN1cGVyLmJ1aWxkKCksIXRoaXMuaG90fHwhdGhpcy5fZWxlbWVudClyZXR1cm47Y29uc3QgZT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKSx0PXRoaXMub3B0aW9ucy5sYWJlbDtlLnRleHRDb250ZW50PVN0cmluZyh0aGlzLnRyYW5z''@;'; put 'put ''bGF0ZUlmUG9zc2libGUodC50ZXh0Q29udGVudCk/PyIiKSxlLmh0bWxGb3I9U3RyaW5nKHRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0Lmh0bWxGb3IpPz8iIiksSEcodGhpcyxVTixlKSxIRyh0aGlzLGo3LHRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZCksTV8odGhpcyxqNykuY2hlY2tlZD10''@;'; put 'put ''aGlzLm9wdGlvbnMuY2hlY2tlZCx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGUpLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7aWYoIXRoaXMuaXNCdWlsdCgpKXJldHVybjtjb25zdCBlPXRoaXMub3B0aW9ucy5sYWJlbDtNXyh0aGlzLFVOKSYmKE1fKHRoaXMsVU4pLnRleHRDb250ZW50PVN0''@;'; put 'put ''cmluZyh0aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUoZS50ZXh0Q29udGVudCk/PyIiKSl9aXNDaGVja2VkKCl7cmV0dXJuISghdGhpcy5pc0J1aWx0KCl8fCFNXyh0aGlzLGo3KSkmJk1fKHRoaXMsajcpLmNoZWNrZWR9c2V0Q2hlY2tlZChlPSEwKXt0aGlzLmlzQnVpbHQoKSYmTV8odGhpcyxq''@;'; put 'put ''NykmJihNXyh0aGlzLGo3KS5jaGVja2VkPWUpfWZvY3VzKCl7dGhpcy5pc0J1aWx0KCkmJk1fKHRoaXMsajcpPy5mb2N1cygpfWNvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSxZZChWRy5ERUZBVUxUUyx0KSksUkhlKHRoaXMsajcse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFJIZSh0aGlz''@;'; put 'put ''LFVOLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxIRyh0aGlzLGo3LG51bGwpLEhHKHRoaXMsVU4sbnVsbCl9fXZhciBESGU9bmV3IFdlYWtTZXQ7Y2xhc3MgTld0IGV4dGVuZHMgSU57Z2V0TWVudUl0ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1l''@;'; put 'put ''LGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihlLHQpPT4oaHModC5wYXJlbnROb2RlKSYmWXIodC5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51T3BlcmF0b3JzIiksWG4odGhpcy5lbGVtZW50cyxyPT57Y29uc3Qg''@;'; put 'put ''aT1yLmVsZW1lbnQ7aSYmdC5hcHBlbmRDaGlsZChpKX0pLHQpfX1idWlsZE9wZXJhdG9yc0VsZW1lbnQoZSl7Y29uc3QgdD1bRDQsUEddO1huKHQscj0+e2NvbnN0IGk9bmV3IFZHKGUse25hbWU6Im9wZXJhdG9yIixsYWJlbDp7aHRtbEZvcjpyLHRleHRDb250ZW50OnJXdChyKX0sdmFsdWU6''@;'; put 'put ''cixjaGVja2VkOnI9PT10WzBdLGlkOnJ9KTtpLmFkZExvY2FsSG9vaygiY2hhbmdlIixvPT5mdW5jdGlvbiBMV3QobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHR9''@;'; put 'put ''KHRoaXMsREhlLEZXdCkuY2FsbCh0aGlzLG8pKSx0aGlzLmVsZW1lbnRzLnB1c2goaSl9KX1zZXRDaGVja2VkKGUpe3RoaXMuZWxlbWVudHMubGVuZ3RoPGUmJkpyKHljYFJhZGlvIGJ1dHRvbiB3aXRoIGluZGV4ICR7ZX0gZG9lc24ndCBleGlzdC5gKSxYbih0aGlzLmVsZW1lbnRzLCh0LHIp''@;'; put 'put ''PT57dC5zZXRDaGVja2VkKHI9PT1lKX0pfWdldEFjdGl2ZU9wZXJhdGlvbklkKCl7Y29uc3QgZT10aGlzLmVsZW1lbnRzLmZpbmQodD0+dCBpbnN0YW5jZW9mIFZHJiZ0LmlzQ2hlY2tlZCgpKTtyZXR1cm4gZT9TdHJpbmcoZS5nZXRWYWx1ZSgpPz9ENCk6RDR9Z2V0U3RhdGUoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5nZXRBY3RpdmVPcGVyYXRpb25JZCgpfXNldFN0YXRlKGUpe3RoaXMucmVzZXQoKSxlJiZ0aGlzLmdldEFjdGl2ZU9wZXJhdGlvbklkKCkhPT1lJiZYbih0aGlzLmVsZW1lbnRzLHQ9Pnt0LnNldENoZWNrZWQodC5nZXRWYWx1ZSgpPT09ZSl9KX11cGRhdGVTdGF0ZShlPUQ0LHQpe2xl''@;'; put 'put ''dCByPWU7cj09PSQwZSYmKHI9UEcpLHRoaXMuc3RhdGU/LnNldFZhbHVlQXRJbmRleCh0LHIpfXJlc2V0KCl7dGhpcy5zZXRDaGVja2VkKDApfWNvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx7aWQ6dC5pZCxzdGF0ZWxlc3M6ITF9KSxmdW5jdGlvbiBPV3QobixlKXsoZnVuY3Rpb24gRFd0KG4s''@;'; put 'put ''ZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sZSksZS5hZGQobil9KHRoaXMsREhlKSx0aGlzLm5hbWU9IiIsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmJ1''@;'; put 'put ''aWxkT3BlcmF0b3JzRWxlbWVudChlKX19ZnVuY3Rpb24gRld0KG4pe3RoaXMuc2V0U3RhdGUoQWEobikudmFsdWUpfWZ1bmN0aW9uIGUyZShuKXtpZihuJiYoImRhdGUiPT09bi50eXBlfHwiaW50bC1kYXRlIj09PW4udHlwZSkpcmV0dXJuIGZ1bmN0aW9uIFBXdCgpe3JldHVybihuLGUpPT57''@;'; put 'put ''Y29uc3Qgcj1lO2lmKCIiPT09biYmIiI9PT1yKXJldHVybiAwO2lmKCIiPT09bilyZXR1cm4tMTtpZigiIj09PXIpcmV0dXJuIDE7Y29uc3QgaT1zYyhuKSxvPXNjKHIpO3JldHVybiBudWxsPT09aSYmbnVsbD09PW8/MDpudWxsPT09aT8xOm51bGw9PT1vPy0xOmktb319KCl9ZnVuY3Rpb24g''@;'; put 'put ''TEhlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIHpOKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIFZXdChuLGUpe3JldHVybiBlLmdl''@;'; put 'put ''dD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sTEhlKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIE9IZShuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIEJXdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVk''@;'; put 'put ''IHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4sTEhlKG4sZSwic2V0IiksdCksdH12YXIgVF89bmV3IFdlYWtNYXA7Y2xhc3MgV04gZXh0ZW5kcyBpZ3tzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIHE1KHtocmVmOiIjIix0YWdOYW1lOiJhIix0YWJJ''@;'; put 'put ''bmRleDotMSxyb2xlOiJidXR0b24ifSl9YnVpbGQoKXtzdXBlci5idWlsZCgpLHRoaXMuX2VsZW1lbnQmJk9IZSh0aGlzLFRfLHRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZCl9dXBkYXRlKCl7aWYoIXRoaXMuaXNCdWlsdCgpKXJldHVybjtjb25zdCBlPXRoaXMub3B0aW9ucy50ZXh0Q29udGVu''@;'; put 'put ''dDt6Tih0aGlzLFRfKSYmKHpOKHRoaXMsVF8pLnRleHRDb250ZW50PVN0cmluZyh0aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUoZSkpKX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZ6Tih0aGlzLFRfKSYmek4odGhpcyxUXykuZm9jdXMoKX1hY3RpdmF0ZSgpe3pOKHRoaXMsVF8pPy5jbGljaygp''@;'; put 'put ''fWNvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSxZZChXTi5ERUZBVUxUUyx0KSksZnVuY3Rpb24gald0KG4sZSx0KXsoZnVuY3Rpb24gSFd0KG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2lj''@;'; put 'put ''ZSBvbiBhbiBvYmplY3QiKX0pKG4sZSksZS5zZXQobix0KX0odGhpcyxUXyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT0hlKHRoaXMsVF8sbnVsbCl9fWZ1bmN0aW9uIE5IZShuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBz''@;'; put 'put ''YW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gRkhlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1''@;'; put 'put ''bmN0aW9uIG9zKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIFVXdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sRkhlKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIGh4KG4sZSx0KXtOSGUobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIFgyKG4sZSx0KXtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24geld0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixGSGUobixlLCJzZXQiKSx0KSx0fWZ1bmN0aW9u''@;'; put 'put ''IEJHKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiB0fWZ1bmN0aW9uIGpHKG4sZSl7TkhlKG4sZSksZS5hZGQobil9Y29uc3QgUEhlPSJtdWx0aXBsZVNlbGVjdC5p''@;'; put 'put ''dGVtQm94Ijt2YXIgZ209bmV3IFdlYWtNYXAscHU9bmV3IFdlYWtNYXAsVUc9bmV3IFdlYWtNYXAsQzY9bmV3IFdlYWtNYXAsVTc9bmV3IFdlYWtNYXAsejc9bmV3IFdlYWtNYXAsSEhlPW5ldyBXZWFrU2V0LFZIZT1uZXcgV2Vha1NldCxCSGU9bmV3IFdlYWtTZXQsakhlPW5ldyBXZWFrU2V0''@;'; put 'put ''O2NsYXNzIFlOIGV4dGVuZHMgaWd7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBxNSh7Y2xhc3NOYW1lOiJodFVJTXVsdGlwbGVTZWxlY3QiLHZhbHVlOltdfSl9Z2V0SXRlbXNCb3goKXtyZXR1cm4gb3ModGhpcyxwdSl9cmVnaXN0ZXJIb29rcygpe29zKHRoaXMsQzYpPy5hZGRMb2Nh''@;'; put 'put ''bEhvb2soImtleWRvd24iLGU9PkJHKHRoaXMsVkhlLFlXdCkuY2FsbCh0aGlzLGUpKSxvcyh0aGlzLEM2KT8uYWRkTG9jYWxIb29rKCJpbnB1dCIsZT0+QkcodGhpcyxISGUsV1d0KS5jYWxsKHRoaXMsZSkpLG9zKHRoaXMsVTcpPy5hZGRMb2NhbEhvb2soImNsaWNrIixlPT5CRyh0aGlzLEJI''@;'; put 'put ''ZSxaV3QpLmNhbGwodGhpcyxlKSksb3ModGhpcyx6Nyk/LmFkZExvY2FsSG9vaygiY2xpY2siLGU9PkJHKHRoaXMsakhlLEdXdCkuY2FsbCh0aGlzLGUpKX1zZXRJdGVtcyhlKXtYMih0aGlzLGdtLGUpLG9zKHRoaXMscHUpPy5sb2FkRGF0YShvcyh0aGlzLGdtKSl9c2V0TG9jYWxlKGUpe1gy''@;'; put 'put ''KHRoaXMsVUcsZSl9Z2V0TG9jYWxlKCl7cmV0dXJuIG9zKHRoaXMsVUcpfWdldEl0ZW1zKCl7cmV0dXJuWy4uLm9zKHRoaXMsZ20pXX1nZXRWYWx1ZSgpe3JldHVybiBmdW5jdGlvbiBxV3Qobil7Y29uc3QgZT1bXTtyZXR1cm4gbi5mb3JFYWNoKHQ9Pnt0LmNoZWNrZWQmJmUucHVzaCh0LnZh''@;'; put 'put ''bHVlKX0pLGV9KG9zKHRoaXMsZ20pKX1nZXRTZWFyY2hJbnB1dEVsZW1lbnQoKXtyZXR1cm4gb3ModGhpcyxDNil9Z2V0U2VsZWN0QWxsRWxlbWVudCgpe3JldHVybiBvcyh0aGlzLFU3KX1nZXRDbGVhckFsbEVsZW1lbnQoKXtyZXR1cm4gb3ModGhpcyx6Nyl9aXNTZWxlY3RlZEFsbFZhbHVl''@;'; put 'put ''cygpe3JldHVybiBvcyh0aGlzLGdtKS5sZW5ndGg9PT10aGlzLmdldFZhbHVlKCkubGVuZ3RofWJ1aWxkKCl7aWYoc3VwZXIuYnVpbGQoKSwhdGhpcy5ob3R8fCF0aGlzLl9lbGVtZW50KXJldHVybjtjb25zdCBlPXRoaXMuaG90LHQ9dGhpcy5fZWxlbWVudCx7cm9vdERvY3VtZW50OnJ9PWUs''@;'; put 'put ''aT1yLmNyZWF0ZUVsZW1lbnQoImRpdiIpLG89bmV3IGlnKGUse2NsYXNzTmFtZToiaHRVSVNlbGVjdGlvbkNvbnRyb2xzIixjaGlsZHJlbjpbb3ModGhpcyxVNyksb3ModGhpcyx6NyldLmZpbHRlcihFPT5udWxsIT09RSl9KSxhPW9zKHRoaXMsQzYpPy5lbGVtZW50LGw9by5lbGVtZW50O2Em''@;'; put 'put ''JnQuYXBwZW5kQ2hpbGQoYSksbCYmdC5hcHBlbmRDaGlsZChsKSx0LmFwcGVuZENoaWxkKGkpLG9zKHRoaXMscHUpPy5kZXN0cm95KCksWXIoaSwiaHRVSU11bHRpcGxlU2VsZWN0SG90IiksWDIodGhpcyxwdSxuZXcgZS5jb25zdHJ1Y3RvcihpLHtkYXRhOltbXV0sY29sdW1uczpbe2RhdGE6''@;'; put 'put ''ImNoZWNrZWQiLHR5cGU6ImNoZWNrYm94IixsYWJlbDp7cHJvcGVydHk6InZpc3VhbFZhbHVlIixwb3NpdGlvbjoiYWZ0ZXIifX1dLGJlZm9yZVJlbmRlcmVyOihFLE8sWixlZSx2ZSxNZSk9PntFLnRpdGxlPU1lLmluc3RhbmNlLmdldERhdGFBdFJvd1Byb3AoTyxNZS5sYWJlbC5wcm9wZXJ0''@;'; put 'put ''eSl9LGFmdGVyTGlzdGVuOigpPT57dGhpcy5ydW5Mb2NhbEhvb2tzKCJmb2N1cyIsdGhpcyl9LGJlZm9yZU9uQ2VsbE1vdXNlVXA6KCk9Pntvcyh0aGlzLHB1KT8ubGlzdGVuKCl9LG1vZGlmeUNvbFdpZHRoOkU9Pntjb25zdCBPPShvcyh0aGlzLHB1KT8uY29udGFpbmVyLnNjcm9sbFdpZHRo''@;'; put 'put ''Pz8wKS1HZChyKTtyZXR1cm4gdm9pZCAwIT09RSYmRTxPP086RX0sYXV0b0NvbHVtblNpemU6ITAsYXV0b1Jvd1NpemU6ITEsaGlkZGVuUm93czohMCxtYXhDb2xzOjEsYXV0b1dyYXBDb2w6ITAsaGVpZ2h0OjExMCxjb3B5UGFzdGU6ITEsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjoiYXJlYSIs''@;'; put 'put ''ZmlsbEhhbmRsZTohMSxmcmFnbWVudFNlbGVjdGlvbjoiY2VsbCIsdGFiTW92ZXM6e3JvdzoxLGNvbDowfSx0aGVtZU5hbWU6ZS5nZXRDdXJyZW50VGhlbWVOYW1lKCksbGF5b3V0RGlyZWN0aW9uOmUuaXNSdGwoKT8icnRsIjoibHRyIn0pKSxvcyh0aGlzLHB1KS5pbml0KCk7Y29uc3QgZz1v''@;'; put 'put ''cyh0aGlzLHB1KS5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIik7ZyYmKGcucmVtb3ZlU2hvcnRjdXRzQnlLZXlzKFsiVGFiIl0pLGcucmVtb3ZlU2hvcnRjdXRzQnlLZXlzKFsiU2hpZnQiLCJUYWIiXSksZy5hZGRTaG9ydGN1dCh7a2V5czpbWyJFc2NhcGUiXV0sY2Fs''@;'; put 'put ''bGJhY2s6RT0+e3RoaXMucnVuTG9jYWxIb29rcygia2V5ZG93biIsRSx0aGlzKX0sZ3JvdXA6UEhlfSksZy5hZGRTaG9ydGN1dCh7a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLGNhbGxiYWNrOkU9Pntvcyh0aGlzLHB1KT8uZGVzZWxlY3RDZWxsKCksdGhpcy5ydW5Mb2NhbEhvb2tz''@;'; put 'put ''KCJrZXlkb3duIixFLHRoaXMpLHRoaXMucnVuTG9jYWxIb29rcygibGlzdFRhYktleWRvd24iLEUsdGhpcyl9LGdyb3VwOlBIZX0pKX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZvcyh0aGlzLHB1KT8ubGlzdGVuKCl9cmVzZXQoKXtvcyh0aGlzLEM2KT8ucmVzZXQoKSxvcyh0aGlzLFU3KT8u''@;'; put 'put ''cmVzZXQoKSxvcyh0aGlzLHo3KT8ucmVzZXQoKX11cGRhdGUoKXshdGhpcy5pc0J1aWx0KCl8fCFvcyh0aGlzLHB1KXx8MD09PW9zKHRoaXMscHUpLnJvb3RFbGVtZW50Lm9mZnNldEhlaWdodHx8KG9zKHRoaXMscHUpLnVwZGF0ZVNldHRpbmdzKHtkYXRhOiRXdChvcyh0aGlzLGdtKSx0aGlz''@;'; put 'put ''Lm9wdGlvbnMudmFsdWUpfSksc3VwZXIudXBkYXRlKCkpfWRlc3Ryb3koKXtvcyh0aGlzLHB1KT8uZGVzdHJveSgpLG9zKHRoaXMsQzYpPy5kZXN0cm95KCksb3ModGhpcyx6Nyk/LmRlc3Ryb3koKSxvcyh0aGlzLFU3KT8uZGVzdHJveSgpLFgyKHRoaXMsQzYsbnVsbCksWDIodGhpcyx6Nyxu''@;'; put 'put ''dWxsKSxYMih0aGlzLFU3LG51bGwpLFgyKHRoaXMscHUsbnVsbCksb3ModGhpcyxnbSkubGVuZ3RoPTAsc3VwZXIuZGVzdHJveSgpfWNvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSxZZChZTi5ERUZBVUxUUyx0KSksakcodGhpcyxISGUpLGpHKHRoaXMsVkhlKSxqRyh0aGlzLEJIZSksakcodGhp''@;'; put 'put ''cyxqSGUpLGh4KHRoaXMsZ20se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGh4KHRoaXMscHUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGh4KHRoaXMsVUcse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGh4KHRoaXMsQzYse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGh4''@;'; put 'put ''KHRoaXMsVTcse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGh4KHRoaXMsejcse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFgyKHRoaXMsZ20sW10pLFgyKHRoaXMscHUsbnVsbCksWDIodGhpcyxVRywiIiksWDIodGhpcyxDNixudWxsKSxYMih0aGlzLFU3LG51bGwpLFgyKHRoaXMs''@;'; put 'put ''ejcsbnVsbCksWDIodGhpcyxDNixuZXcgRV8oZSx7cGxhY2Vob2xkZXI6ZHVlLGNsYXNzTmFtZToiaHRVSU11bHRpcGxlU2VsZWN0U2VhcmNoIn0pKSxYMih0aGlzLFU3LG5ldyBXTihlLHt0ZXh0Q29udGVudDpzdWUsY2xhc3NOYW1lOiJodFVJU2VsZWN0QWxsIn0pKSxYMih0aGlzLHo3LG5l''@;'; put 'put ''dyBXTihlLHt0ZXh0Q29udGVudDpsdWUsY2xhc3NOYW1lOiJodFVJQ2xlYXJBbGwifSkpLHRoaXMucmVnaXN0ZXJIb29rcygpfX1mdW5jdGlvbiBXV3Qobil7Y29uc3QgdD12MShBYShuKS52YWx1ZS50cmltKCksdGhpcy5nZXRMb2NhbGUoKSk7aWYoImFwcGx5Ij09PXRoaXMub3B0aW9ucy5z''@;'; put 'put ''ZWFyY2hNb2RlKXtjb25zdCByPW9zKHRoaXMscHUpPy5nZXRQbHVnaW4oImhpZGRlblJvd3MiKSxpPVtdO3ImJnIuc2hvd1Jvd3Moci5nZXRIaWRkZW5Sb3dzKCkpLG9zKHRoaXMsZ20pLmZvckVhY2goKG8sYSk9PntvLmNoZWNrZWQ9djEoYCR7by52YWx1ZX1gLHRoaXMuZ2V0TG9jYWxlKCkp''@;'; put 'put ''LmluZGV4T2YodCk+PTAsby5jaGVja2VkfHxpLnB1c2goYSl9KSxyJiZyLmhpZGVSb3dzKGkpLG9zKHRoaXMscHUpPy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLG9zKHRoaXMscHUpPy5yZW5kZXIoKX1lbHNle2xldCByO3I9IiI9PT10P1suLi5vcyh0aGlzLGdtKV06b3ModGhpcyxnbSku''@;'; put 'put ''ZmlsdGVyKGk9PnYxKGAke2kudmFsdWV9YCx0aGlzLmdldExvY2FsZSgpKS5pbmRleE9mKHQpPj0wKSxvcyh0aGlzLHB1KT8ubG9hZERhdGEocil9fWZ1bmN0aW9uIFlXdChuKXt0aGlzLnJ1bkxvY2FsSG9va3MoImtleWRvd24iLG4sdGhpcyksaHcobi5rZXlDb2RlLCJBUlJPV19ET1dOIikm''@;'; put 'put ''JihuLnByZXZlbnREZWZhdWx0KCksRjMobiksb3ModGhpcyxwdSk/Lmxpc3RlbigpLG9zKHRoaXMscHUpPy5zZWxlY3RDZWxsKDAsMCkpfWZ1bmN0aW9uIFpXdChuKXtjb25zdCBlPVtdO24ucHJldmVudERlZmF1bHQoKSxvcyh0aGlzLHB1KSYmKG9zKHRoaXMscHUpLmdldFNvdXJjZURhdGEo''@;'; put 'put ''KS5mb3JFYWNoKCh0LHIpPT57dC5jaGVja2VkPSEwLGUucHVzaChCbGUodCxyKVswXSl9KSxvcyh0aGlzLHB1KS5zZXRTb3VyY2VEYXRhQXRDZWxsKGUpKX1mdW5jdGlvbiBHV3Qobil7Y29uc3QgZT1bXTtuLnByZXZlbnREZWZhdWx0KCksb3ModGhpcyxwdSkmJihvcyh0aGlzLHB1KS5nZXRT''@;'; put 'put ''b3VyY2VEYXRhKCkuZm9yRWFjaCgodCxyKT0+e3QuY2hlY2tlZD0hMSxlLnB1c2goQmxlKHQscilbMF0pfSksb3ModGhpcyxwdSkuc2V0U291cmNlRGF0YUF0Q2VsbChlKSl9ZnVuY3Rpb24gJFd0KG4sZSl7Y29uc3QgdD1MTihlKTtyZXR1cm4gbi5tYXAocj0+KHIuY2hlY2tlZD10KHIudmFs''@;'; put 'put ''dWUpLHIpKX1mdW5jdGlvbiB6RyhuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiB0MmUobixlKXsoZnVuY3Rpb24gS1d0KG4sZSl7aWYoZS5oYXMo''@;'; put 'put ''bikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sZSksZS5hZGQobil9dmFyIFVIZT1uZXcgV2Vha1NldCxuMmU9bmV3IFdlYWtTZXQsekhlPW5ldyBXZWFrU2V0O2NsYXNzIFhX''@;'; put 'put ''dCBleHRlbmRzIElOe3JlZ2lzdGVySG9va3MoKXt0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLmFkZExvY2FsSG9vaygia2V5ZG93biIsZT0+ekcodGhpcyxVSGUsUVd0KS5jYWxsKHRoaXMsZSkpLmFkZExvY2FsSG9vaygibGlzdFRhYktleWRvd24iLGU9PnRoaXMucnVuTG9jYWxI''@;'; put 'put ''b29rcygibGlzdFRhYktleWRvd24iLGUpKSx0aGlzLmhvdD8uYWRkSG9vaygibW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWUiLChlLHQpPT56Ryh0aGlzLHpIZSxKV3QpLmNhbGwodGhpcyxlLHQpKX1nZXRFbGVtZW50cygpe2NvbnN0IGU9dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1l''@;'; put 'put ''bnQoKTtyZXR1cm5bZS5nZXRTZWFyY2hJbnB1dEVsZW1lbnQoKSxlLmdldFNlbGVjdEFsbEVsZW1lbnQoKSxlLmdldENsZWFyQWxsRWxlbWVudCgpLHRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCldfXNldFN0YXRlKGUpe2lmKHRoaXMucmVzZXQoKSxlJiZlLmNvbW1hbmQua2V5PT09''@;'; put 'put ''Q18pe2NvbnN0IHQ9dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKTt0LnNldEl0ZW1zKGUuaXRlbXNTbmFwc2hvdCksdC5zZXRWYWx1ZShlLmFyZ3NbMF0pLHQuc2V0TG9jYWxlKGUubG9jYWxlKX19Z2V0U3RhdGUoKXtjb25zdCBlPXRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50''@;'; put 'put ''KCksdD1lLmdldEl0ZW1zKCk7cmV0dXJue2NvbW1hbmQ6e2tleTplLmlzU2VsZWN0ZWRBbGxWYWx1ZXMoKXx8IXQubGVuZ3RoP2JoOkNffSxhcmdzOltlLmdldFZhbHVlKCldLGl0ZW1zU25hcHNob3Q6dH19dXBkYXRlU3RhdGUoZSl7Y29uc3QgdD0ocixpLG8sYSxsKT0+e2NvbnN0W3VdPUh2''@;'; put 'put ''KGksTz0+Ty5uYW1lPT09Q18pLGc9e30sRT10aGlzLmhvdD8uZ2V0VHJhbnNsYXRlZFBocmFzZShGWSk/PyIiO2lmKHUpe2NvbnN0IE89YShyLGwpLFo9X2MoTyxBdD0+QXQudmFsdWUpLGVlPW5ldyBNYXAoTy5tYXAoQXQ9PltBdC52YWx1ZSx0aGlzLmhvdD8uZ2V0Q2VsbE1ldGEoQXQubWV0''@;'; put 'put ''YS52aXN1YWxSb3csQXQubWV0YS52aXN1YWxDb2wpXSkpLHZlPU9bMF0/Lm1ldGEsSGU9WjBlKFosZTJlKHZlKSk7byYmKHUuYXJnc1swXT1vKTtjb25zdCBXZT1bXSxhdD1oSGUoSGUsdS5hcmdzWzBdLEUsQXQ9PntBdC5jaGVja2VkJiZXZS5wdXNoKEF0LnZhbHVlKSx6Ryh0aGlzLG4yZSxX''@;'; put 'put ''SGUpLmNhbGwodGhpcyxBdCxlZSl9KSxDdD1lLmVkaXRlZENvbmRpdGlvblN0YWNrLmNvbHVtbjtnLmxvY2FsZT10aGlzLmhvdD8uZ2V0Q2VsbE1ldGEoMCxDdCkubG9jYWxlLGcuYXJncz1bV2VdLGcuY29tbWFuZD1vQyhDXyksZy5pdGVtc1NuYXBzaG90PWF0fWVsc2UgZy5hcmdzPVtdLGcu''@;'; put 'put ''Y29tbWFuZD1vQyhiaCk7dGhpcy5zdGF0ZT8uc2V0VmFsdWVBdEluZGV4KHIsZyl9O3QoZS5lZGl0ZWRDb25kaXRpb25TdGFjay5jb2x1bW4sZS5lZGl0ZWRDb25kaXRpb25TdGFjay5jb25kaXRpb25zLGUuY29uZGl0aW9uQXJnc0NoYW5nZSxlLmZpbHRlcmVkUm93c0ZhY3RvcnkpLGUuZGVw''@;'; put 'put ''ZW5kZW50Q29uZGl0aW9uU3RhY2tzLmxlbmd0aCYmdChlLmRlcGVuZGVudENvbmRpdGlvblN0YWNrc1swXS5jb2x1bW4sZS5kZXBlbmRlbnRDb25kaXRpb25TdGFja3NbMF0uY29uZGl0aW9ucyx2b2lkIDAsZS5maWx0ZXJlZFJvd3NGYWN0b3J5LGUuZWRpdGVkQ29uZGl0aW9uU3RhY2spfWdl''@;'; put 'put ''dE11bHRpcGxlU2VsZWN0RWxlbWVudCgpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbmQoZT0+ZSBpbnN0YW5jZW9mIFlOKX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlk''@;'; put 'put ''ZGVuOigpPT50aGlzLmlzSGlkZGVuKCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmhpZGRlbldoZW4mJnRoaXMuaGlkZGVuV2hlbigpLHJlbmRlcmVyOihlLHQscixpLG8sYSk9Pntocyh0LnBhcmVudE5vZGUpJiZZcih0LnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVWYWx1ZSIpO2NvbnN0''@;'; put 'put ''IGw9dGhpcy5ob3Q/LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKT8/dC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBZcihsLCJodEZpbHRlcnNNZW51TGFiZWwiKSxsLnRleHRDb250ZW50PWEsdC5hcHBlbmRDaGlsZChsKSx0LnBhcmVudEVsZW1l''@;'; put 'put ''bnQ/Lmhhc0F0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiKXx8WG4odGhpcy5lbGVtZW50cyx1PT57Y29uc3QgZz11LmVsZW1lbnQ7ZyYmdC5hcHBlbmRDaGlsZChnKX0pLHR9fX1yZXNldCgpe2NvbnN0IGU9dGhpcy5ob3Q/LmdldFRyYW5zbGF0ZWRQaHJhc2UoRlkpPz8iIix0PXRoaXMuX2dldENv''@;'; put 'put ''bHVtblZpc2libGVWYWx1ZXMoKSxyPXQubWFwKEU9PkUudmFsdWUpLGk9bmV3IE1hcCh0Lm1hcChFPT5bRS52YWx1ZSxFLm1ldGFdKSksbz10WzBdPy5tZXRhLGw9WjBlKHIsZTJlKG8pKSx1PWhIZShsLGwsZSxFPT57ekcodGhpcyxuMmUsV0hlKS5jYWxsKHRoaXMsRSxpKX0pO3RoaXMuZ2V0''@;'; put 'put ''TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuc2V0SXRlbXModSksc3VwZXIucmVzZXQoKSx0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLnNldFZhbHVlKGwpO2NvbnN0IGc9dGhpcy5ob3Q/LmdldFBsdWdpbigiZmlsdGVycyIpLmdldFNlbGVjdGVkQ29sdW1uKCk/P251bGw7bnVsbCE9''@;'; put 'put ''PWcmJnRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuc2V0TG9jYWxlKHRoaXMuaG90Py5nZXRDZWxsTWV0YSgwLGcudmlzdWFsSW5kZXgpLmxvY2FsZSl9X2dldENvbHVtblZpc2libGVWYWx1ZXMoKXtjb25zdCBlPXRoaXMuaG90Py5nZXRQbHVnaW4oImZpbHRlcnMiKS5nZXRTZWxl''@;'; put 'put ''Y3RlZENvbHVtbigpPz9udWxsO3JldHVybiBudWxsPT09ZT9bXTpfYyh0aGlzLmhvdD8uZ2V0RGF0YUF0Q29sKGUudmlzdWFsSW5kZXgpPz9bXSwodCxyKT0+KHt2YWx1ZTpZMGUodCksbWV0YTp0aGlzLmhvdD8uZ2V0Q2VsbE1ldGEocixlLnZpc3VhbEluZGV4KT8/e319KSl9Y29uc3RydWN0''@;'; put 'put ''b3IoZSx0KXtzdXBlcihlLHtpZDp0LmlkLHN0YXRlbGVzczohMX0pLHQyZSh0aGlzLFVIZSksdDJlKHRoaXMsbjJlKSx0MmUodGhpcyx6SGUpLHRoaXMubmFtZT0iIix0aGlzLm5hbWU9dC5uYW1lLHRoaXMuc2VhcmNoTW9kZT10LnNlYXJjaE1vZGUsdGhpcy5oaWRkZW5XaGVuPXQuaGlkZGVu''@;'; put 'put ''V2hlbix0aGlzLmVsZW1lbnRzLnB1c2gobmV3IFlOKGUse3NlYXJjaE1vZGU6dGhpcy5zZWFyY2hNb2RlfSkpLHRoaXMucmVnaXN0ZXJIb29rcygpfX1mdW5jdGlvbiBRV3Qobil7aHcobi5rZXlDb2RlLCJFU0NBUEUiKSYmKHRoaXMucnVuTG9jYWxIb29rcygiY2FuY2VsIiksRjMobikpLGh3''@;'; put 'put ''KG4ua2V5Q29kZSwiRU5URVIiKSYmKCJhcHBseSI9PT10aGlzLnNlYXJjaE1vZGUmJnRoaXMucnVuTG9jYWxIb29rcygiYWNjZXB0IiksRjMobikpfWZ1bmN0aW9uIFdIZShuLGUpe3RoaXMuaG90Py5oYXNIb29rKCJtb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZSIpJiYobi52aXN1YWxW''@;'; put 'put ''YWx1ZT10aGlzLmhvdD8ucnVuSG9va3MoIm1vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlIixuLnZpc3VhbFZhbHVlLGUuZ2V0KG4udmFsdWUpKSl9ZnVuY3Rpb24gSld0KG4sZSl7cmV0dXJuIGUudmFsdWVGb3JtYXR0ZXI/ZS52YWx1ZUZvcm1hdHRlcihuLGUpOm59dmFyIFlIZT1uZXcg''@;'; put 'put ''V2Vha1NldDtjbGFzcyBaTiBleHRlbmRzIElOe3N0YXRpYyBnZXQgQlVUVE9OX09LKCl7cmV0dXJuIm9rIn1zdGF0aWMgZ2V0IEJVVFRPTl9DQU5DRUwoKXtyZXR1cm4iY2FuY2VsIn1yZWdpc3Rlckhvb2tzKCl7WG4odGhpcy5lbGVtZW50cyxlPT57ZS5hZGRMb2NhbEhvb2soImNsaWNrIiwo''@;'; put 'put ''dCxyKT0+ZnVuY3Rpb24gdFl0KG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiB0fSh0aGlzLFlIZSxyWXQpLmNhbGwodGhpcyx0LHIpKX0pfWdldE1lbnVJdGVtRGVz''@;'; put 'put ''Y3JpcHRvcigpe3JldHVybntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxoaWRkZW46KCk9PnRoaXMuaXNIaWRkZW4oKSxyZW5kZXJlcjooZSx0KT0+KGhzKHQucGFyZW50Tm9kZSkmJllyKHQucGFyZW50Tm9kZSwiaHRGaWx0ZXJz''@;'; put 'put ''TWVudUFjdGlvbkJhciIpLFhuKHRoaXMuZWxlbWVudHMscj0+e2NvbnN0IGk9ci5lbGVtZW50O2kmJnQuYXBwZW5kQ2hpbGQoaSl9KSx0KX19YWNjZXB0KCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhY2NlcHQiKX1jYW5jZWwoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImNhbmNlbCIpfWNvbnN0cnVj''@;'; put 'put ''dG9yKGUsdCl7c3VwZXIoZSx7aWQ6dC5pZCxzdGF0ZWxlc3M6ITB9KSxmdW5jdGlvbiBuWXQobixlKXsoZnVuY3Rpb24gZVl0KG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBh''@;'; put 'put ''biBvYmplY3QiKX0pKG4sZSksZS5hZGQobil9KHRoaXMsWUhlKSx0aGlzLm5hbWU9IiIsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IEVfKGUse3R5cGU6ImJ1dHRvbiIsdmFsdWU6Y3VlLGNsYXNzTmFtZToiaHRVSUJ1dHRvbiBodFVJQnV0dG9uT0siLGlkZW50aWZp''@;'; put 'put ''ZXI6Wk4uQlVUVE9OX09LfSkpLHRoaXMuZWxlbWVudHMucHVzaChuZXcgRV8oZSx7dHlwZToiYnV0dG9uIix2YWx1ZTp1dWUsY2xhc3NOYW1lOiJodFVJQnV0dG9uIGh0VUlCdXR0b25DYW5jZWwiLGlkZW50aWZpZXI6Wk4uQlVUVE9OX0NBTkNFTH0pKSx0aGlzLnJlZ2lzdGVySG9va3MoKX19''@;'; put 'put ''ZnVuY3Rpb24gcll0KG4sZSl7ZS5vcHRpb25zLmlkZW50aWZpZXI9PT1aTi5CVVRUT05fT0s/dGhpcy5hY2NlcHQoKTp0aGlzLmNhbmNlbCgpfWNvbnN0IFpIZT0iQ29uZGl0aW9uQ29sbGVjdGlvbi5maWx0ZXJpbmdTdGF0ZXMiO2NsYXNzIEdIZXtpc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlz''@;'; put 'put ''LmdldEZpbHRlcmVkQ29sdW1ucygpLmxlbmd0aH1pc01hdGNoKGUsdCl7Y29uc3Qgcj10aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgodCksaT1yPy5jb25kaXRpb25zPz9bXSxvPXI/Lm9wZXJhdGlvbjtyZXR1cm4gdGhpcy5pc01hdGNoSW5Db25kaXRpb25zKGksZSxvKX1p''@;'; put 'put ''c01hdGNoSW5Db25kaXRpb25zKGUsdCxyPUQ0KXtyZXR1cm4hZS5sZW5ndGh8fGZ1bmN0aW9uIG5XdChuKXtPTltuXXx8SnIoYE9wZXJhdGlvbiB3aXRoIGlkICIke259IiBkb2VzIG5vdCBleGlzdC5gKTtjb25zdCBlPU9OW25dLmZ1bmM7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIGUo''@;'; put 'put ''dCxyKX19KHIpKGUsdCl9YWRkQ29uZGl0aW9uKGUsdCxyPUQ0LGkpe2NvbnN0IG89dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxlKS5sb2NhbGUsYT10LmFyZ3MubWFwKEU9PiJzdHJpbmciPT10eXBlb2YgRT92MShFLG8pOkUpLGw9dC5uYW1lfHx0LmNvbW1hbmQua2V5O3RoaXMucnVuTG9jYWxI''@;'; put 'put ''b29rcygiYmVmb3JlQWRkIixlKTtjb25zdCB1PXRoaXMuZ2V0T3BlcmF0aW9uKGUpO3U/dSE9PXImJkpyKHljYFRoZSBjb2x1bW4gb2YgaW5kZXggJHtlfSBoYXMgYmVlbiBhbHJlYWR5IGFwcGxpZWQgd2l0aCBhIFxgJHt1fVxgXHgyMAogICAgICAgIGZpbHRlciBvcGVyYXRpb24uIFVzZSBc''@;'; put 'put ''YHJlbW92ZUNvbmRpdGlvbnNcYCB0byBjbGVhciB0aGUgY3VycmVudCBjb25kaXRpb25zIGFuZCB0aGVuIGFkZCBuZXcgb25lcy5ceDIwCiAgICAgICAgTWluZCB0aGF0IHlvdSBjYW5ub3QgbWl4IGRpZmZlcmVudCB0eXBlcyBvZiBvcGVyYXRpb25zIChmb3IgaW5zdGFuY2UsIGlmIHlvdSB1''@;'; put 'put ''c2UgXGBjb25qdW5jdGlvblxgLFx4MjAKICAgICAgICB1c2UgaXQgY29uc2VxdWVudGx5IGZvciBhIHBhcnRpY3VsYXIgY29sdW1uKS5gKTpYdShPTltyXSkmJkpyKHljYFVuZXhwZWN0ZWQgb3BlcmF0aW9uIG5hbWVkIFxgJHtyfVxgLiBQb3NzaWJsZSBvbmVzIGFyZVx4MjAKICAgICAgICBc''@;'; put 'put ''YGRpc2p1bmN0aW9uXGAgYW5kIFxgY29uanVuY3Rpb25cYC5gKTtjb25zdCBnPXRoaXMuZ2V0Q29uZGl0aW9ucyhlKTswPT09Zy5sZW5ndGg/dGhpcy5maWx0ZXJpbmdTdGF0ZXMuc2V0VmFsdWVBdEluZGV4KGUse29wZXJhdGlvbjpyLGNvbmRpdGlvbnM6W3tuYW1lOmwsYXJnczphLGZ1bmM6''@;'; put 'put ''Y3gobCxhKX1dfSxpKTpnLnB1c2goe25hbWU6bCxhcmdzOmEsZnVuYzpjeChsLGEpfSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckFkZCIsZSl9Z2V0Q29uZGl0aW9ucyhlKXtyZXR1cm4gdGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KGUpPy5jb25kaXRpb25zPz9bXX1n''@;'; put 'put ''ZXRPcGVyYXRpb24oZSl7cmV0dXJuIHRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleChlKT8ub3BlcmF0aW9ufWdldEZpbHRlcmVkQ29sdW1ucygpe3JldHVybiB0aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRFbnRyaWVzKCkubWFwKChbZV0pPT5lKX1nZXRDb2x1bW5TdGFja1Bv''@;'; put 'put ''c2l0aW9uKGUpe3JldHVybiB0aGlzLmdldEZpbHRlcmVkQ29sdW1ucygpLmluZGV4T2YoZSl9ZXhwb3J0QWxsQ29uZGl0aW9ucygpe3JldHVybiB0aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRFbnRyaWVzKCkucmVkdWNlKChlLFt0LHJdKT0+e2NvbnN0e29wZXJhdGlvbjppLGNvbmRpdGlvbnM6''@;'; put 'put ''b309cjtyZXR1cm4gZS5wdXNoKHtjb2x1bW46dCxvcGVyYXRpb246aSxjb25kaXRpb25zOm8ubWFwKCh7bmFtZTphLGFyZ3M6bH0pPT4oe25hbWU6YSxhcmdzOlsuLi5sXX0pKX0pLGV9LFtdKX1pbXBvcnRBbGxDb25kaXRpb25zKGUpe3RoaXMuY2xlYW4oKSxlLmZvckVhY2godD0+e3QuY29u''@;'; put 'put ''ZGl0aW9ucy5mb3JFYWNoKHI9Pnt0aGlzLmFkZENvbmRpdGlvbih0LmNvbHVtbixyLHQub3BlcmF0aW9uKX0pfSl9cmVtb3ZlQ29uZGl0aW9ucyhlKXt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVJlbW92ZSIsZSksdGhpcy5maWx0ZXJpbmdTdGF0ZXMuY2xlYXJWYWx1ZShlKSx0aGlzLnJ1''@;'; put 'put ''bkxvY2FsSG9va3MoImFmdGVyUmVtb3ZlIixlKX1jbGVhbigpe3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlQ2xlYW4iKSx0aGlzLmZpbHRlcmluZ1N0YXRlcy5jbGVhcigpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbGVhbiIpfWhhc0NvbmRpdGlvbnMoZSx0KXtjb25zdCByPXRoaXMu''@;'; put 'put ''Z2V0Q29uZGl0aW9ucyhlKTtyZXR1cm4gdD9yLnNvbWUoaT0+aS5uYW1lPT09dCk6ci5sZW5ndGg+MH1kZXN0cm95KCl7dGhpcy5pc01hcFJlZ2lzdHJhYmxlJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKFpIZSksdGhpcy5jbGVhckxvY2FsSG9va3MoKSx0aGlz''@;'; put 'put ''LmZpbHRlcmluZ1N0YXRlcz1udWxsfWNvbnN0cnVjdG9yKGUsdD0hMCl7dGhpcy5maWx0ZXJpbmdTdGF0ZXM9bmV3IFRZLHRoaXMuaG90PWUsdGhpcy5pc01hcFJlZ2lzdHJhYmxlPXQsITA9PT10aGlzLmlzTWFwUmVnaXN0cmFibGU/dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0''@;'; put 'put ''ZXJNYXAoWkhlLHRoaXMuZmlsdGVyaW5nU3RhdGVzKTp0aGlzLmZpbHRlcmluZ1N0YXRlcy5pbml0KHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE51bWJlck9mSW5kZXhlcygpKX19WWwoR0hlLF9oKTtjb25zdCByMmU9R0hlLCRIZT1jbGFzcyBpWXR7ZmlsdGVyKCl7bGV0IGU9W107''@;'; put 'put ''cmV0dXJuIFhuKHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRGaWx0ZXJlZENvbHVtbnMoKSwodCxyKT0+e2xldCBpPXRoaXMuY29sdW1uRGF0YUZhY3RvcnkodCk7ciYmKGk9dGhpcy5fZ2V0SW50ZXJzZWN0RGF0YShpLGUpKSxlPXRoaXMuZmlsdGVyQnlDb2x1bW4odCxpKX0pLGV9Zmls''@;'; put 'put ''dGVyQnlDb2x1bW4oZSx0PVtdKXtjb25zdCByPVtdO3JldHVybiBYbih0LGk9Pnt2b2lkIDAhPT1pJiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaXNNYXRjaChpLGUpJiZyLnB1c2goaSl9KSxyfV9nZXRJbnRlcnNlY3REYXRhKGUsdCl7Y29uc3Qgcj1bXTtyZXR1cm4gWG4odCxpPT57Y29u''@;'; put 'put ''c3Qgbz1pLm1ldGEucm93O3ZvaWQgMCE9PWVbb10mJihyW29dPWVbb10pfSkscn1jb25zdHJ1Y3RvcihlLHQ9KCk9PltdKXt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249ZSx0aGlzLmNvbHVtbkRhdGFGYWN0b3J5PXR9fTtmdW5jdGlvbiBpMmUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHR9ZnVuY3Rpb24gbzJlKG4sZSl7KGZ1bmN0aW9uIG9ZdChuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBz''@;'; put 'put ''YW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLGUpLGUuYWRkKG4pfXZhciBxSGU9bmV3IFdlYWtTZXQsS0hlPW5ldyBXZWFrU2V0LFhIZT1uZXcgV2Vha1NldDtjbGFzcyBRSGV7Z3JvdXBDaGFuZ2VzKCl7dGhpcy5ncm91cGluZz0hMH1mbHVzaCgpe3RoaXMu''@;'; put 'put ''Z3JvdXBpbmc9ITEsWG4odGhpcy5jaGFuZ2VzLGU9Pnt0aGlzLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGUpfSksdGhpcy5jaGFuZ2VzLmxlbmd0aD0wfXVwZGF0ZVN0YXRlc0F0Q29sdW1uKGUsdCl7aWYodGhpcy5ncm91cGluZylyZXR1cm4gdm9pZCgtMT09PXRoaXMuY2hhbmdlcy5pbmRleE9m''@;'; put 'put ''KGUpJiZ0aGlzLmNoYW5nZXMucHVzaChlKSk7Y29uc3Qgcj10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZXhwb3J0QWxsQ29uZGl0aW9ucygpO2xldCBpPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGUpOy0xPT09aSYmKGk9dGhpcy5sYXRlc3RFZGl0''@;'; put 'put ''ZWRDb2x1bW5Qb3NpdGlvbik7Y29uc3Qgbz1yLnNsaWNlKDAsaSksYT1yLnNsaWNlKGkpO2EubGVuZ3RoJiZhWzBdLmNvbHVtbj09PWUmJmEuc2hpZnQoKTtjb25zdCBsPWxBZSgoZyxFLE89W10pPT57Y29uc3QgWj1uZXcgcjJlKHRoaXMuaG90LCExKSxlZT1bXS5jb25jYXQoZyxPKTtaLmlt''@;'; put 'put ''cG9ydEFsbENvbmRpdGlvbnMoZWUpO2NvbnN0IHZlPXRoaXMuY29sdW1uRGF0YUZhY3RvcnkoTnVtYmVyKEUpKTtsZXQgTWU7TWU9Wi5pc0VtcHR5KCk/dmU6bmV3ICRIZShaLHRoaXMuY29sdW1uRGF0YUZhY3RvcnkpLmZpbHRlcigpLE1lPV9jKE1lLFdlPT5XZS5tZXRhLnZpc3VhbFJvdyk7''@;'; put 'put ''Y29uc3QgSGU9TE4oTWUpO3JldHVybiBaLmRlc3Ryb3koKSxIdih2ZSxXZT0+SGUoV2UubWV0YS52aXN1YWxSb3cpKX0pKG8pLHU9Wy4uLnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRDb25kaXRpb25zKGUpXTt0aGlzLnJ1bkxvY2FsSG9va3MoInVwZGF0ZSIse2VkaXRlZENvbmRpdGlv''@;'; put 'put ''blN0YWNrOntjb2x1bW46ZSxjb25kaXRpb25zOnV9LGRlcGVuZGVudENvbmRpdGlvblN0YWNrczphLGZpbHRlcmVkUm93c0ZhY3Rvcnk6bCxjb25kaXRpb25BcmdzQ2hhbmdlOnR9KX1kZXN0cm95KCl7dGhpcy5jbGVhckxvY2FsSG9va3MoKSxhYyh0aGlzLChlLHQpPT57dGhpc1t0XT1udWxs''@;'; put 'put ''fSl9Y29uc3RydWN0b3IoZSx0LHI9KCk9PltdKXtvMmUodGhpcyxxSGUpLG8yZSh0aGlzLEtIZSksbzJlKHRoaXMsWEhlKSx0aGlzLmNoYW5nZXM9W10sdGhpcy5ncm91cGluZz0hMSx0aGlzLmxhdGVzdEVkaXRlZENvbHVtblBvc2l0aW9uPS0xLHRoaXMubGF0ZXN0T3JkZXJTdGFjaz1bXSx0''@;'; put 'put ''aGlzLmhvdD1lLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj10LHRoaXMuY29sdW1uRGF0YUZhY3Rvcnk9cix0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVSZW1vdmUiLGk9PmkyZSh0aGlzLHFIZSxhWXQpLmNhbGwodGhpcyxpKSksdGhpcy5jb25kaXRpb25D''@;'; put 'put ''b2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJSZW1vdmUiLGk9PnRoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4oaSkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyQWRkIixpPT50aGlzLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGkpKSx0aGlzLmNvbmRpdGlv''@;'; put 'put ''bkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVDbGVhbiIsKCk9PmkyZSh0aGlzLEtIZSxzWXQpLmNhbGwodGhpcykpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyQ2xlYW4iLCgpPT5pMmUodGhpcyxYSGUsbFl0KS5jYWxsKHRoaXMpKX19ZnVuY3Rp''@;'; put 'put ''b24gYVl0KG4pe3RoaXMubGF0ZXN0RWRpdGVkQ29sdW1uUG9zaXRpb249dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldENvbHVtblN0YWNrUG9zaXRpb24obil9ZnVuY3Rpb24gc1l0KCl7dGhpcy5sYXRlc3RPcmRlclN0YWNrPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRGaWx0ZXJl''@;'; put 'put ''ZENvbHVtbnMoKX1mdW5jdGlvbiBsWXQoKXtYbih0aGlzLmxhdGVzdE9yZGVyU3RhY2ssbj0+e3RoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4obil9KX1ZbChRSGUsX2gpO2NvbnN0IGNZdD1RSGUsR049ImZpbHRlcnMiO2Z1bmN0aW9uIEpIZShuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gZVZlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24g''@;'; put 'put ''bm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIE11KG4sZSl7cmV0dXJuIGZ1bmN0aW9uIGhZdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sZVZlKG4sZSwiZ2V0IikpfWZ1bmN0aW9uICQzKG4sZSx0KXtKSGUobixlKSxlLnNldChuLHQp''@;'; put 'put ''fWZ1bmN0aW9uIFMxKG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gZll0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10''@;'; put 'put ''fX0obixlVmUobixlLCJzZXQiKSx0KSx0fWZ1bmN0aW9uIHFmKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiB0fWZ1bmN0aW9uIGxDKG4sZSl7SkhlKG4sZSksZS5h''@;'; put 'put ''ZGQobil9Y29uc3QgYTJlPSJmaWx0ZXJzIix0VmU9YTJlO3ZhciB4Xz1uZXcgV2Vha01hcCxXRz1uZXcgV2Vha01hcCxTNj1uZXcgV2Vha01hcCxZRz1uZXcgV2Vha01hcCxXNz1uZXcgV2Vha01hcCxmeD1uZXcgV2Vha1NldCxzMmU9bmV3IFdlYWtTZXQsbDJlPW5ldyBXZWFrU2V0LGMyZT1u''@;'; put 'put ''ZXcgV2Vha01hcCx1MmU9bmV3IFdlYWtNYXAsZDJlPW5ldyBXZWFrTWFwLGgyZT1uZXcgV2Vha01hcCxmMmU9bmV3IFdlYWtNYXAscDJlPW5ldyBXZWFrTWFwLGcyZT1uZXcgV2Vha01hcCxtMmU9bmV3IFdlYWtNYXAsdjJlPW5ldyBXZWFrU2V0LG5WZT1uZXcgV2Vha1NldCxfMmU9bmV3IFdl''@;'; put 'put ''YWtTZXQseTJlPW5ldyBXZWFrTWFwLHJWZT1uZXcgV2Vha1NldDtjbGFzcyBnWXQgZXh0ZW5kcyBhbHtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gYTJlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI1MH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXty''@;'; put 'put ''ZXR1cm57c2VhcmNoTW9kZToic2hvdyJ9fXN0YXRpYyBnZXQgU0VUVElOR1NfVkFMSURBVE9SUygpe3JldHVybntzZWFyY2hNb2RlOmU9PiJzdHJpbmciPT10eXBlb2YgZSYmWyJzaG93IiwiYXBwbHkiXS5pbmNsdWRlcyhlKX19c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1''@;'; put 'put ''Z2luOkRyb3Bkb3duTWVudSIsInBsdWdpbjpIaWRkZW5Sb3dzIiwiY2VsbC10eXBlOmNoZWNrYm94Il19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2EyZV19ZW5hYmxlUGx1Z2luKCl7aWYodGhpcy5lbmFibGVkKXJldHVybjtTMSh0aGlzLFc3LCEwPT09dGhp''@;'; put 'put ''cy5ob3QucnVuSG9va3MoImhhc0V4dGVybmFsRGF0YVNvdXJjZSIpKSx0aGlzLmZpbHRlcnNSb3dzTWFwPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZT8/IiIsbmV3IGFUKSx0aGlzLmRyb3Bkb3duTWVudVBsdWdpbj10aGlzLmhvdC5nZXRQbHVn''@;'; put 'put ''aW4oImRyb3Bkb3duTWVudSIpO2NvbnN0IGU9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kcm9wZG93bk1lbnUsdD0ib2JqZWN0Ij09dHlwZW9mIGU/ZS51aUNvbnRhaW5lcjpudWxsLHI9aHModCk/dDp0aGlzLmhvdC5yb290UG9ydGFsRWxlbWVudCxpPWw9PihsLmFkZExvY2FsSG9vaygiYWNj''@;'; put 'put ''ZXB0IiwoKT0+cWYodGhpcyx2MmUsYVZlKS5jYWxsKHRoaXMsImFjY2VwdCIpKSxsLmFkZExvY2FsSG9vaygiY2FuY2VsIiwoKT0+cWYodGhpcyx2MmUsYVZlKS5jYWxsKHRoaXMsImNhbmNlbCIpKSxsLmFkZExvY2FsSG9vaygiY2hhbmdlIix1PT5xZih0aGlzLG5WZSxtWXQpLmNhbGwodGhp''@;'; put 'put ''cyxsLHUpKSxsKSxvPSgpPT5gJHt0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKGl1ZSl9OmAsYT0oKT0+YCR7dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShvdWUpfTpgO2lmKCF0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikpe2NvbnN0IGw9bmV3IEow''@;'; put 'put ''ZSh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV9jb25kaXRpb24iLG5hbWU6byxhZGRTZXBhcmF0b3I6ITEsbWVudUNvbnRhaW5lcjpyfSk7bC5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT5xZih0aGlzLF8yZSxzVmUpLmNhbGwodGhpcykpLHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRl''@;'; put 'put ''cl9ieV9jb25kaXRpb24iLGkobCkpfWlmKHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKXx8dGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX29wZXJhdG9ycyIsbmV3IE5XdCh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9vcGVyYXRvcnMiLG5hbWU6Ik9wZXJhdG9ycyJ9KSks''@;'; put 'put ''IXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikpe2NvbnN0IGw9bmV3IEowZSh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV9jb25kaXRpb24yIixuYW1lOiIiLGFkZFNlcGFyYXRvcjohMCxtZW51Q29udGFpbmVyOnJ9KTtsLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9z''@;'; put 'put ''ZSIsKCk9PnFmKHRoaXMsXzJlLHNWZSkuY2FsbCh0aGlzKSksdGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiLGkobCkpfWlmKCF0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKSl7Y29uc3QgbD10aGlzLmdldFNldHRpbmcoInNlYXJjaE1vZGUi''@;'; put 'put ''KTt0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYnlfdmFsdWUiLGkobmV3IFhXdCh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV92YWx1ZSIsbmFtZTphLHNlYXJjaE1vZGU6bCxoaWRkZW5XaGVuOigpPT5NdSh0aGlzLFc3KX0pKSl9aWYodGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2Fj''@;'; put 'put ''dGlvbl9iYXIiKXx8dGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX2FjdGlvbl9iYXIiLGkobmV3IFpOKHRoaXMuaG90LHtpZDoiZmlsdGVyX2FjdGlvbl9iYXIiLG5hbWU6IkFjdGlvbiBiYXIifSkpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb258fCh0aGlzLmNvbmRpdGlvbkNvbGxlY3Rp''@;'; put 'put ''b249bmV3IHIyZSh0aGlzLmhvdCkpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXJ8fCh0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyPW5ldyBjWXQodGhpcy5ob3QsdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLGw9PnRoaXMuZ2V0RGF0YU1hcEF0Q29sdW1uKGwpKSx0aGlzLmNvbmRp''@;'; put 'put ''dGlvblVwZGF0ZU9ic2VydmVyLmFkZExvY2FsSG9vaygidXBkYXRlIixsPT5xZih0aGlzLHJWZSx2WXQpLmNhbGwodGhpcyxsKSkpLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKGw9Pmw/LnNob3coKSksdGhpcy5hZGRIb29rKCJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIixNdSh0''@;'; put 'put ''aGlzLG0yZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIsTXUodGhpcyxnMmUpKSx0aGlzLmFkZEhvb2soImFmdGVyRHJvcGRvd25NZW51U2hvdyIsTXUodGhpcyxmMmUpKSx0aGlzLmFkZEhvb2soImFmdGVyRHJvcGRvd25NZW51SGlkZSIsTXUodGhpcyxwMmUpKSx0''@;'; put 'put ''aGlzLmFkZEhvb2soImFmdGVyQ2hhbmdlIixNdSh0aGlzLGMyZSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJVcGRhdGVEYXRhIixNdSh0aGlzLHUyZSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJEYXRhUHJvdmlkZXJGZXRjaCIsTXUodGhpcyxkMmUpKSx0aGlzLmFkZEhvb2soImFmdGVyRGF0YVByb3Zp''@;'; put 'put ''ZGVyRmV0Y2hFcnJvciIsTXUodGhpcyxoMmUpKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRyb3Bkb3duTWVudSYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4mJih0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5kaXNhYmxlUGx1Z2luKCksdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uZW5hYmxlUGx1''@;'; put 'put ''Z2luKCkpLCFNdSh0aGlzLHhfKSYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4/LmVuYWJsZWQpe2NvbnN0IGw9W3tmb2N1czooKT0+e2NvbnN0IGc9TXUodGhpcyx4Xyk7aWYoIWcpcmV0dXJuO2NvbnN0IEU9Zy5nZXRNZW51KCksTz1FLmdldE5hdmlnYXRvcigpLFo9Zy5nZXRMYXN0TWVudVBh''@;'; put 'put ''Z2UoKTtFLmZvY3VzKCksWj4wP08/LnNldEN1cnJlbnRQYWdlKFopOk8/LnRvRmlyc3RJdGVtKCl9fSwuLi5BcnJheS5mcm9tKHRoaXMuY29tcG9uZW50cykubWFwKChbLGddKT0+Zz8uZ2V0RWxlbWVudHMoKT8/W10pLmZsYXQoKV07UzEodGhpcyx4XyxmdW5jdGlvbiBkWXQobixlKXtsZXQg''@;'; put 'put ''cix0PS0xO2NvbnN0IGk9ZnVuY3Rpb24gdVl0KG4pe3JldHVybiBCTmUoe2luaXRpYWxQYWdlOjAsc2l6ZTooKT0+bi5sZW5ndGgsb25JdGVtU2VsZWN0Oih0LHIpPT57Y29uc3QgaT1uW3RdO2lmKGkgaW5zdGFuY2VvZiBZTilyZXR1cm4gcjtjb25zdCBvPWk7aWYoaHMoby5lbGVtZW50KSYm''@;'; put 'put ''IVV2KG8uZWxlbWVudCkpcmV0dXJuITE7aS5mb2N1cygpfX0pfShlKSxvPU89PigpPT57ci5pc09wZW5lZCgpJiZyLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmxpc3RlbihHTiksaS5zZXRDdXJyZW50UGFnZShlLmluZGV4T2YoTykpfTtmdW5jdGlvbiBhKE8pe2NvbnN0IFo9ci5nZXRL''@;'; put 'put ''ZXlib2FyZFNob3J0Y3V0c0N0cmwoKSxlZT1PLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpO2kuY2xlYXIoKSxlZS5hZGRDdXN0b21TaG9ydGN1dHMoW3trZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0sZm9yd2FyZFRvQ29udGV4dDpaLmdldENvbnRleHQoR04pLGNhbGxiYWNrOigp''@;'; put 'put ''PT57Ty5pc1N1Yk1lbnUoKSYmTy5jbG9zZSgpLFoubGlzdGVuKEdOKX19XSksIU8uaXNTdWJNZW51KCkmJlouYWRkQ3VzdG9tU2hvcnRjdXRzKFt7a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLGNhbGxiYWNrOnZlPT57Y29uc3QgTWU9ci5nZXROYXZpZ2F0b3IoKTtNZS5nZXRDdXJy''@;'; put 'put ''ZW50UGFnZSgpPi0xJiYodD1NZS5nZXRDdXJyZW50UGFnZSgpKSxNZS5jbGVhcigpLHZlLnNoaWZ0S2V5P2kudG9QcmV2aW91c0l0ZW0oKTppLnRvTmV4dEl0ZW0oKX19LHtrZXlzOltbIkVzY2FwZSJdXSxjYWxsYmFjazooKT0+e3IuY2xvc2UoKX19LHtrZXlzOltbIkVudGVyIl0sWyJTcGFj''@;'; put 'put ''ZSJdXSxwcmV2ZW50RGVmYXVsdDohMSxjYWxsYmFjazp2ZT0+e2NvbnN0IE1lPWVbaS5nZXRDdXJyZW50UGFnZSgpXTtNZSBpbnN0YW5jZW9mIGpOJiYoTWUub3Blbk9wdGlvbnMoKSx2ZS5wcmV2ZW50RGVmYXVsdCgpKSxNZSBpbnN0YW5jZW9mIFdOJiYoTWUuYWN0aXZhdGUoKSx2ZS5wcmV2''@;'; put 'put ''ZW50RGVmYXVsdCgpKSxNZSBpbnN0YW5jZW9mIGlnfHx2ZS5wcmV2ZW50RGVmYXVsdCgpfX1dLEdOKX1mdW5jdGlvbiB1KE8pe08uYWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdGlvbkNoYW5nZSIsWj0+e1oua2V5LnN0YXJ0c1dpdGgoImZpbHRlcl8iKXx8aS5jbGVhcigpfSksTy5hZGRMb2Nh''@;'; put 'put ''bEhvb2soImFmdGVyU3VibWVudU9wZW4iLGEpLE8uYWRkTG9jYWxIb29rKCJhZnRlck9wZW4iLGEpLHI9T31yZXR1cm4gZS5mb3JFYWNoKE89PntPIGluc3RhbmNlb2YgaWcmJihPLmFkZExvY2FsSG9vaygiY2xpY2siLG8oTykpLE8uYWRkTG9jYWxIb29rKCJmb2N1cyIsbyhPKSksTy5hZGRM''@;'; put 'put ''b2NhbEhvb2soImFmdGVyQ2xvc2UiLG8oTykpKX0pLHUobiksey4uLmksbGlzdGVuOmZ1bmN0aW9uIGwoKXtyLmZvY3VzKCksci5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKS5saXN0ZW4oR04pfSxzZXRNZW51OnUsZ2V0TWVudTpmdW5jdGlvbiBnKCl7cmV0dXJuIHJ9LGdldExhc3RNZW51''@;'; put 'put ''UGFnZTpmdW5jdGlvbiBFKCl7cmV0dXJuIHR9fX0odGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudSxsKSk7Y29uc3QgdT1nPT57TXUodGhpcyx4Xyk/Lmxpc3RlbigpLGcucHJldmVudERlZmF1bHQoKSxodyhnLmtleUNvZGUsIlRBQiIpJiYoZy5zaGlmdEtleT9NdSh0aGlzLHhfKT8udG9Q''@;'; put 'put ''cmV2aW91c0l0ZW0oKTpNdSh0aGlzLHhfKT8udG9OZXh0SXRlbSgpKX07dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X3ZhbHVlIik/LmFkZExvY2FsSG9vaygibGlzdFRhYktleWRvd24iLHUpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKT8uYWRkTG9j''@;'; put 'put ''YWxIb29rKCJzZWxlY3RUYWJLZXlkb3duIix1KX10aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2lu''@;'; put 'put ''KCl7dGhpcy5lbmFibGVkJiYodGhpcy5kcm9wZG93bk1lbnVQbHVnaW4/LmVuYWJsZWQmJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnU/LmNsZWFyTG9jYWxIb29rcygpLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKChlLHQpPT57ZT8uZGVzdHJveSgpLHRoaXMuY29tcG9uZW50cy5zZXQo''@;'; put 'put ''dCxudWxsKX0pLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj8uZGVzdHJveSgpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1udWxsLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lPz8iIikpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1''@;'; put 'put ''cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKT8uYWRkU2hvcnRjdXQoe2tleXM6W1siQWx0IiwiQSJdXSxzdG9wUHJvcGFnYXRpb246ITAsY2FsbGJhY2s6KCk9Pntjb25zdCBlPXRo''@;'; put 'put ''aXMuaG90LmdldFNlbGVjdGVkKCk7dGhpcy5jbGVhckNvbmRpdGlvbnMoKSx0aGlzLmZpbHRlcigpLGUmJnRoaXMuaG90LnNlbGVjdENlbGxzKGUpfSxncm91cDp0VmV9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3Jp''@;'; put 'put ''ZCIpPy5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKHRWZSl9YWRkQ29uZGl0aW9uKGUsdCxyLGk9RDQpe2lmKHQ9PT1DXyYmTXUodGhpcyxXNykpcmV0dXJuO2NvbnN0IG89dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihlKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24/LmFkZENvbmRpdGlvbihv''@;'; put 'put ''LHtjb21tYW5kOntrZXk6dH0sYXJnczpyfSxpKX1yZW1vdmVDb25kaXRpb25zKGUpe2NvbnN0IHQ9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihlKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24/LnJlbW92ZUNvbmRpdGlvbnModCl9Y2xlYXJDb25kaXRpb25zKGUpe2lmKHZvaWQgMD09PWUp''@;'; put 'put ''dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPy5jbGVhbigpO2Vsc2V7Y29uc3QgdD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGUpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj8ucmVtb3ZlQ29uZGl0aW9ucyh0KX19aW1wb3J0Q29uZGl0aW9ucyhlKXt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rp''@;'; put 'put ''b24/LmltcG9ydEFsbENvbmRpdGlvbnMoZSl9ZXhwb3J0Q29uZGl0aW9ucygpe3JldHVybiB0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24/LmV4cG9ydEFsbENvbmRpdGlvbnMoKT8/W119ZmlsdGVyKCl7Y29uc3R7bmF2aWdhYmxlSGVhZGVyczplfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLHQ9''@;'; put 'put ''IXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj8uaXNFbXB0eSgpLHI9dGhpcy5leHBvcnRDb25kaXRpb25zKCk7TXUodGhpcyxXNykmJlMxKHRoaXMsWUcsQWQoTXUodGhpcyxTNikpKTtjb25zdCBpPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVGaWx0ZXIiLHIsTXUodGhpcyxTNikpO2lmKCEx''@;'; put 'put ''IT09aSYmdCl7Y29uc3Qgbz1bXSxsPV9jKHRoaXMuX2NyZWF0ZURhdGFGaWx0ZXIoKS5maWx0ZXIoKSxnPT5nLm1ldGEucm93KSx1PUxOKGwpO3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhpcy5maWx0ZXJzUm93c01hcD8uY2xlYXIoKSxWYSh0aGlzLmhvdC5jb3VudFNvdXJjZVJv''@;'; put 'put ''d3MoKS0xLGc9Pnt1KGcpfHxvLnB1c2goZyl9KSxYbihvLGc9Pnt0aGlzLmZpbHRlcnNSb3dzTWFwPy5zZXRWYWx1ZUF0SW5kZXgoZywhMCl9KX0sITApLCFlJiYhbC5sZW5ndGgmJnRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpLFMxKHRoaXMsUzYsdGhpcy5leHBvcnRDb25kaXRpb25zKCkpfWVs''@;'; put 'put ''c2UhMT09PWl8fHQ/TXUodGhpcyxXNyk/UzEodGhpcyxTNix0aGlzLmV4cG9ydENvbmRpdGlvbnMoKSk6dGhpcy5pbXBvcnRDb25kaXRpb25zKE11KHRoaXMsUzYpKTooUzEodGhpcyxTNix0aGlzLmV4cG9ydENvbmRpdGlvbnMoKSksdGhpcy5maWx0ZXJzUm93c01hcD8uY2xlYXIoKSk7aWYo''@;'; put 'put ''dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSl7Y29uc3Qgbz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk/LmhpZ2hsaWdodC5jb2w7bnVsbCE9byYmdGhpcy5ob3Quc2VsZWN0Q2VsbChlPy0xOjAsbyl9ITEhPT1pJiYodGhpcy5ob3QucnVuSG9va3MoImFmdGVyRmls''@;'; put 'put ''dGVyIixyKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpKX1nZXRTZWxlY3RlZENvbHVtbigpe2NvbnN0IGU9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpPy5oaWdobGlnaHQ7cmV0dXJuIGUmJm51bGwhPT1lLmNvbD97dmlzdWFs''@;'; put 'put ''SW5kZXg6ZS5jb2wscGh5c2ljYWxJbmRleDp0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGUuY29sKX06bnVsbH1nZXREYXRhTWFwQXRDb2x1bW4oZSl7Y29uc3QgdD10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKSxyPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGUpLGk9W107Zm9yKGxldCBv''@;'; put 'put ''PTA7bzx0O28rKyl7Y29uc3QgYT10aGlzLmhvdC5fZ2V0TWV0YU1hbmFnZXIoKS5nZXRDZWxsTWV0YShvLGUse3Zpc3VhbFJvdzpvLHZpc3VhbENvbHVtbjplLHNraXBNZXRhRXh0ZW5zaW9uOiEwfSk7bGV0IGw9S1kodGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbChvLHIpLGEpO2lmKHRo''@;'; put 'put ''aXMuaG90Lmhhc0hvb2soIm1vZGlmeURhdGEiKSl7Y29uc3QgdT1WZihsKTt0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5RGF0YSIsbyxlLHUsImdldCIpLHUuaXNUb3VjaGVkKCkmJihsPXUudmFsdWUpfWkucHVzaCh7bWV0YTphLHZhbHVlOlkwZShsKX0pfXJldHVybiBpfXVwZGF0ZVZhbHVl''@;'; put 'put ''Q29tcG9uZW50Q29uZGl0aW9uKGUpe2NvbnN0IHQ9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oZSksYT1aMGUodGhpcy5ob3QuZ2V0RGF0YUF0Q29sKHQpLGUyZSh0aGlzLmhvdC5jb3VudFJvd3MoKT4wP3RoaXMuaG90LmdldENlbGxNZXRhKDAsdCk6bnVsbCkpO3RoaXMuY29uZGl0aW9uVXBk''@;'; put 'put ''YXRlT2JzZXJ2ZXI/LnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGUsYSl9cmVzdG9yZUNvbXBvbmVudHMoZSl7Y29uc3QgdD10aGlzLmdldFNlbGVjdGVkQ29sdW1uKCk/LnBoeXNpY2FsSW5kZXg/Py0xO2UuZm9yRWFjaChyPT57ci5pc0hpZGRlbigpfHxyLnJlc3RvcmVTdGF0ZSh0KX0pLHRoaXMu''@;'; put 'put ''dXBkYXRlRGVwZW5kZW50Q29tcG9uZW50c1Zpc2liaWxpdHkoKX1nZXRPcGVyYXRpb25CYXNlZE9uQXJndW1lbnRzKGUsdCxyLGkpe2xldCBvPWU7Y29uc3QgYT10LmNvbW1hbmQ/LmtleSxsPXIuY29tbWFuZD8ua2V5LHU9aS5jb21tYW5kPy5rZXk7cmV0dXJuIG89PT1QRyYmYSE9PWJoJiZs''@;'; put 'put ''IT09YmgmJnUhPT1iaD9vPSQwZTp1IT09YmgmJihhPT09Ymh8fGw9PT1iaCkmJihvPUQ0KSxvfXNldExpc3RlbmluZ0Ryb3Bkb3duTWVudSgpe3RoaXMuZHJvcGRvd25NZW51UGx1Z2luJiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5zZXRMaXN0ZW5pbmcoKX11cGRhdGVEZXBlbmRlbnRDb21w''@;'; put 'put ''b25lbnRzVmlzaWJpbGl0eSgpe2NvbnN0IGU9cWYodGhpcyxmeCwkTikuY2FsbCh0aGlzLCJmaWx0ZXJfYnlfY29uZGl0aW9uIiksdD17Y29tbWFuZDp7a2V5OmJofX0saT0oZT8uZ2V0U3RhdGUoKT8/dCkuY29tbWFuZCxvPVt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0''@;'; put 'put ''aW9uMiIpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKV0uZmlsdGVyKGE9Pm51bGwhPWEpO2k/LnNob3dPcGVyYXRvcnM/dGhpcy5zaG93Q29tcG9uZW50cyguLi5vKTp0aGlzLmhpZGVDb21wb25lbnRzKC4uLm8pfV9jcmVhdGVEYXRhRmlsdGVyKGU9dGhpcy5jb25k''@;'; put 'put ''aXRpb25Db2xsZWN0aW9uKXtyZXR1cm4gZXx8KGU9bmV3IHIyZSh0aGlzLmhvdCwhMSkpLG5ldyAkSGUoZSx0PT50aGlzLmdldERhdGFNYXBBdENvbHVtbih0KSl9Z2V0SW5kZXhlc09mQ29tcG9uZW50cyguLi5lKXtjb25zdCB0PXRoaXMuZHJvcGRvd25NZW51UGx1Z2luPy5tZW51O3JldHVy''@;'; put 'put ''biB0P2UubWFwKHI9PnQuZ2V0SXRlbVBvc2l0aW9uQnlLZXkoU3RyaW5nKHIuZ2V0TWVudUl0ZW1EZXNjcmlwdG9yKCkua2V5KSkpLmZpbHRlcihyPT4tMSE9PXIpOltdfWNoYW5nZUNvbXBvbmVudHNWaXNpYmlsaXR5KGU9ITAsLi4udCl7aWYoIXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXJl''@;'; put 'put ''dHVybjtjb25zdCByPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnU7aWYoIXIpcmV0dXJuO2NvbnN0IGk9ci5ob3RNZW51O2lmKCFpKXJldHVybjtjb25zdCBvPWkuZ2V0UGx1Z2luKCJoaWRkZW5Sb3dzIiksYT10aGlzLmdldEluZGV4ZXNPZkNvbXBvbmVudHMoLi4udCk7ZT9vLnNob3dS''@;'; put 'put ''b3dzKGEpOm8uaGlkZVJvd3MoYSksaS5yZW5kZXIoKX1oaWRlQ29tcG9uZW50cyguLi5lKXt0aGlzLmNoYW5nZUNvbXBvbmVudHNWaXNpYmlsaXR5KCExLC4uLmUpfXNob3dDb21wb25lbnRzKC4uLmUpe3RoaXMuY2hhbmdlQ29tcG9uZW50c1Zpc2liaWxpdHkoITAsLi4uZSl9ZGVzdHJveSgp''@;'; put 'put ''e3RoaXMuZW5hYmxlZCYmKHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKChlLHQpPT57bnVsbCE9PWUmJihlLmRlc3Ryb3koKSx0aGlzLmNvbXBvbmVudHMuc2V0KHQsbnVsbCkpfSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPy5kZXN0cm95KCksdGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZl''@;'; put 'put ''cj8uZGVzdHJveSgpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lPz8iIikpLHN1cGVyLmRlc3Ryb3koKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlKSxsQyh0aGlzLGZ4KSxsQyh0aGlzLHMyZSksbEModGhpcyxsMmUpLGxDKHRoaXMsdjJlKSxs''@;'; put 'put ''Qyh0aGlzLG5WZSksbEModGhpcyxfMmUpLGxDKHRoaXMsclZlKSwkMyh0aGlzLHhfLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSwkMyh0aGlzLFdHLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSwkMyh0aGlzLFM2LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSwkMyh0aGlzLFlH''@;'; put 'put ''LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSwkMyh0aGlzLFc3LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSwkMyh0aGlzLGMyZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksJDModGhpcyx1MmUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLCQzKHRoaXMsZDJlLHt3cml0''@;'; put 'put ''YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSwkMyh0aGlzLGgyZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksJDModGhpcyxmMmUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLCQzKHRoaXMscDJlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSwkMyh0aGlzLGcyZSx7d3JpdGFibGU6''@;'; put 'put ''ITAsdmFsdWU6dm9pZCAwfSksJDModGhpcyxtMmUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLCQzKHRoaXMseTJlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0aGlzLmRyb3Bkb3duTWVudVBsdWdpbj1udWxsLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1udWxsLHRoaXMuY29u''@;'; put 'put ''ZGl0aW9uVXBkYXRlT2JzZXJ2ZXI9bnVsbCx0aGlzLmNvbXBvbmVudHM9bmV3IE1hcChbWyJmaWx0ZXJfYnlfY29uZGl0aW9uIixudWxsXSxbImZpbHRlcl9vcGVyYXRvcnMiLG51bGxdLFsiZmlsdGVyX2J5X2NvbmRpdGlvbjIiLG51bGxdLFsiZmlsdGVyX2J5X3ZhbHVlIixudWxsXSxbImZp''@;'; put 'put ''bHRlcl9hY3Rpb25fYmFyIixudWxsXV0pLHRoaXMuZmlsdGVyc1Jvd3NNYXA9bnVsbCxTMSh0aGlzLFdHLG5ldyBXZWFrU2V0KSxTMSh0aGlzLFM2LFtdKSxTMSh0aGlzLFlHLFtdKSxTMSh0aGlzLFc3LCExKSxTMSh0aGlzLGMyZSx0PT57dCYmWG4odCxyPT57Y29uc3RbLGldPXIsbz10aGlz''@;'; put 'put ''LmhvdC5wcm9wVG9Db2woaSksYT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKG8pO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj8uaGFzQ29uZGl0aW9ucyhhKSYmdGhpcy51cGRhdGVWYWx1ZUNvbXBvbmVudENvbmRpdGlvbihhKX0pfSksUzEodGhpcyx1MmUsKHQscik9PntpZihyfHxNdSh0''@;'; put 'put ''aGlzLFc3KXx8IXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbilyZXR1cm47Y29uc3QgaT10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24/LmdldEZpbHRlcmVkQ29sdW1ucygpPz9bXTswIT09aS5sZW5ndGgmJlhuKGksbz0+e3RoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXI/LnVwZGF0ZVN0YXRl''@;'; put 'put ''c0F0Q29sdW1uKG8pfSl9KSxTMSh0aGlzLGQyZSx0PT57dGhpcy5pbXBvcnRDb25kaXRpb25zKHQ/LmZpbHRlcnNDb25kaXRpb25zU3RhY2s/P1tdKX0pLFMxKHRoaXMsaDJlLCgpPT57dGhpcy5pbXBvcnRDb25kaXRpb25zKE11KHRoaXMsWUcpKX0pLFMxKHRoaXMsZjJlLCgpPT57Y29uc3Qg''@;'; put 'put ''dD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbj8ubWVudTt0JiYodGhpcy5yZXN0b3JlQ29tcG9uZW50cyhBcnJheS5mcm9tKHRoaXMuY29tcG9uZW50cy52YWx1ZXMoKSkuZmlsdGVyKHI9Pm51bGwhPT1yKSksdC51cGRhdGVNZW51RGltZW5zaW9ucygpKX0pLFMxKHRoaXMscDJlLCgpPT57dGhp''@;'; put 'put ''cy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpPy5nZXRTZWxlY3RFbGVtZW50KCk/LmNsb3NlT3B0aW9ucygpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIik/LmdldFNlbGVjdEVsZW1lbnQoKT8uY2xvc2VPcHRpb25zKCl9KSxTMSh0aGlz''@;'; put 'put ''LGcyZSwoKT0+e2NvbnN0IHQ9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4/Lm1lbnU7dCYmKE11KHRoaXMsV0cpLmhhcyh0KXx8TXUodGhpcyx4Xyk/LnNldE1lbnUodCksTXUodGhpcyxXRykuYWRkKHQpKX0pLFMxKHRoaXMsbTJlLHQ9Pnt0Lml0ZW1zLnB1c2goe25hbWU6dnN9KSx0aGlzLmNv''@;'; put 'put ''bXBvbmVudHMuZm9yRWFjaChyPT57ciYmdC5pdGVtcy5wdXNoKHIuZ2V0TWVudUl0ZW1EZXNjcmlwdG9yKCkpfSl9KSxTMSh0aGlzLHkyZSwodCxyKT0+e2NvbnN0IGk9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbih0KTt0aGlzLmVuYWJsZWQmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj8u''@;'; put 'put ''aGFzQ29uZGl0aW9ucyhpKSYmY3cocik/WXIociwiaHRGaWx0ZXJzQWN0aXZlIik6a28ociwiaHRGaWx0ZXJzQWN0aXZlIil9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsTXUodGhpcyx5MmUpKX19ZnVuY3Rpb24gJE4obil7cmV0dXJuIHRoaXMuY29tcG9uZW50cy5n''@;'; put 'put ''ZXQobik/P251bGx9ZnVuY3Rpb24gaVZlKCl7cmV0dXJuIHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKT8/bnVsbH1mdW5jdGlvbiBvVmUoKXtyZXR1cm4gdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X3ZhbHVlIik/P251bGx9ZnVuY3Rpb24gYVZlKG4pe2lm''@;'; put 'put ''KCJhY2NlcHQiPT09bil7Y29uc3QgZT10aGlzLmdldFNlbGVjdGVkQ29sdW1uKCk7aWYobnVsbD09PWUpcmV0dXJuIHZvaWQgdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4/LmNsb3NlKCk7Y29uc3R7cGh5c2ljYWxJbmRleDp0fT1lLHI9e2NvbW1hbmQ6e2tleTpiaH0sYXJnczpbXX0saT1xZih0''@;'; put 'put ''aGlzLGZ4LCROKS5jYWxsKHRoaXMsImZpbHRlcl9ieV9jb25kaXRpb24iKT8uZ2V0U3RhdGUoKT8/cixvPXFmKHRoaXMsZngsJE4pLmNhbGwodGhpcywiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKT8uZ2V0U3RhdGUoKT8/cixhPXFmKHRoaXMsbDJlLG9WZSkuY2FsbCh0aGlzKT8uZ2V0U3RhdGUo''@;'; put 'put ''KT8/cixsPXRoaXMuZ2V0T3BlcmF0aW9uQmFzZWRPbkFyZ3VtZW50cyhxZih0aGlzLHMyZSxpVmUpLmNhbGwodGhpcyk/LmdldEFjdGl2ZU9wZXJhdGlvbklkKCk/P0Q0LGksbyxhKTt0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyPy5ncm91cENoYW5nZXMoKTtsZXQgdT10aGlzLmNvbmRp''@;'; put 'put ''dGlvbkNvbGxlY3Rpb24/LmdldENvbHVtblN0YWNrUG9zaXRpb24odCk7KHZvaWQgMD09PXV8fC0xPT09dSkmJih1PXZvaWQgMCksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPy5yZW1vdmVDb25kaXRpb25zKHQpO2NvbnN0IGc9aS5jb21tYW5kPy5rZXksRT1vLmNvbW1hbmQ/LmtleSxPPWEu''@;'; put 'put ''Y29tbWFuZD8ua2V5O2chPT1iaCYmKHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj8uYWRkQ29uZGl0aW9uKHQsaSxsLHUpLEUhPT1iaCYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPy5hZGRDb25kaXRpb24odCxvLGwsdSkpLE8hPT1iaCYmIU11KHRoaXMsVzcpJiZ0aGlzLmNvbmRpdGlvbkNv''@;'; put 'put ''bGxlY3Rpb24/LmFkZENvbmRpdGlvbih0LGEsbCx1KSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyPy5mbHVzaCgpLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKFo9Plo/LnNhdmVTdGF0ZSh0KSksdGhpcy5maWx0ZXIoKX10aGlzLmRyb3Bkb3duTWVudVBsdWdpbj8uY2xvc2UoKX1mdW5j''@;'; put 'put ''dGlvbiBtWXQobixlKXtjb25zdCB0PXRoaXMuZHJvcGRvd25NZW51UGx1Z2luPy5tZW51O3RoaXMudXBkYXRlRGVwZW5kZW50Q29tcG9uZW50c1Zpc2liaWxpdHkoKSxuLmNvbnN0cnVjdG9yPT09SjBlJiYhZS5pbnB1dHNDb3VudCYmdGhpcy5zZXRMaXN0ZW5pbmdEcm9wZG93bk1lbnUoKSx0''@;'; put 'put ''Py51cGRhdGVNZW51RGltZW5zaW9ucygpfWZ1bmN0aW9uIHNWZSgpe3RoaXMuc2V0TGlzdGVuaW5nRHJvcGRvd25NZW51KCl9ZnVuY3Rpb24gdll0KG4pe2lmKCF0aGlzLmRyb3Bkb3duTWVudVBsdWdpbj8uZW5hYmxlZClyZXR1cm47Y29uc3QgZT1uLmVkaXRlZENvbmRpdGlvblN0YWNrLHQ9''@;'; put 'put ''ZS5jb25kaXRpb25zLHI9ZS5jb2x1bW4saT1uLmNvbmRpdGlvbkFyZ3NDaGFuZ2U7QXJyYXkuaXNBcnJheShpKSYmUzEodGhpcyxTNixNdSh0aGlzLFM2KS5tYXAobD0+KGwuY29sdW1uPT09ciYmdC5sZW5ndGg+MCYmbC5jb25kaXRpb25zLmZvckVhY2godT0+eyJieV92YWx1ZSI9PT11Lm5h''@;'; put 'put ''bWUmJih1LmFyZ3M9W1suLi5pXV0pfSksbCkpKTtjb25zdCBvPXQuZmlsdGVyKGw9PmwubmFtZT09PUNfKSxhPXQuZmlsdGVyKGw9PmwubmFtZSE9PUNfKTtpZihvLmxlbmd0aD49Mnx8YS5sZW5ndGg+PTMpSGEoeWNgVGhlIGZpbHRlciBjb25kaXRpb25zIGhhdmUgYmVlbiBhcHBsaWVkIHBy''@;'; put 'put ''b3Blcmx5LCBidXQgY291bGRu4oCZdCBiZSBkaXNwbGF5ZWQgdmlzdWFsbHkuXHgyMAogICAgICAgIFRoZSBkcm9wZG93biBtZW51IHN1cHBvcnRzIGF0IG1vc3QgMiByZWd1bGFyIGNvbmRpdGlvbnMgYW5kIDEgJ2ZpbHRlciBieSB2YWx1ZScgY29uZGl0aW9uIHBlciBjb2x1bW4sXHgyMAog''@;'; put 'put ''ICAgICAgIGJ1dCBtb3JlIHdlcmUgcHJvdmlkZWQuIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBkb2N1bWVudGF0aW9uLmApO2Vsc2V7Y29uc3QgbD10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24/LmdldE9wZXJhdGlvbihyKTtxZih0aGlzLGZ4LCROKS5jYWxsKHRoaXMsImZpbHRlcl9ieV9j''@;'; put 'put ''b25kaXRpb24iKT8udXBkYXRlU3RhdGUoYVswXSxyKSxxZih0aGlzLGZ4LCROKS5jYWxsKHRoaXMsImZpbHRlcl9ieV9jb25kaXRpb24yIik/LnVwZGF0ZVN0YXRlKGFbMV0scikscWYodGhpcyxzMmUsaVZlKS5jYWxsKHRoaXMpPy51cGRhdGVTdGF0ZShsPz9ENCxyKSxxZih0aGlzLGwyZSxv''@;'; put 'put ''VmUpLmNhbGwodGhpcyk/LnVwZGF0ZVN0YXRlKG4pfX1jb25zdCBsVmU9ImludGVybmFsLXVzZS1pbi1oYW5kc29udGFibGUiLGIyZT17bGljZW5zZUtleTpsVmUsdXNlQXJyYXlBcml0aG1ldGljOiEwLHVzZUNvbHVtbkluZGV4OiExLHVzZVN0YXRzOiExLGV2YWx1YXRlTnVsbFRvWmVybzoh''@;'; put 'put ''MCxwcmVjaXNpb25FcHNpbG9uOjFlLTEzLHByZWNpc2lvblJvdW5kaW5nOjE0LHNtYXJ0Um91bmRpbmc6ITAsbGVhcFllYXIxOTAwOiExLG51bGxEYXRlOnt5ZWFyOjE4OTksbW9udGg6MTIsZGF5OjMwfSxudWxsWWVhcjozMCxkYXRlRm9ybWF0czpbIllZWVktTU0tREQiXSx0aW1lRm9ybWF0''@;'; put 'put ''czpbImhoOm1tIiwiaGg6bW06c3MiLCJoaDptbTpzcy5zc3MiXSxtYXRjaFdob2xlQ2VsbDohMCx1c2VSZWd1bGFyRXhwcmVzc2lvbnM6ITEsdXNlV2lsZGNhcmRzOiEwLGZ1bmN0aW9uQXJnU2VwYXJhdG9yOiIsIix0aG91c2FuZFNlcGFyYXRvcjoiIixkZWNpbWFsU2VwYXJhdG9yOiIuIixs''@;'; put 'put ''YW5ndWFnZToiZW5HQiJ9O2Z1bmN0aW9uIGNWZShuKXtjb25zdCBlPW5bUTJdO3JldHVybnttYXhDb2x1bW5zOm4ubWF4Q29sdW1ucyxtYXhSb3dzOm4ubWF4Um93cyxsYW5ndWFnZTplPy5sYW5ndWFnZT8ubGFuZ0NvZGV9fWZ1bmN0aW9uIHVWZShuKXtyZXR1cm4gT2JqZWN0LmtleXMobiku''@;'; put 'put ''cmVkdWNlKChlLHQpPT4oImh5cGVyZm9ybXVsYSIhPT10JiYoZVt0XT1uW3RdKSxlKSx7fSl9ZnVuY3Rpb24gWkcoKXtjb25zdCBuPSJlbmdpbmVfcmVsYXRpb25zaGlwIixlPXpwKFEyKTtyZXR1cm4gZS5oYXNJdGVtKG4pfHxlLnJlZ2lzdGVyKG4sbmV3IE1hcCksZS5nZXRJdGVtKG4pfWZ1''@;'; put 'put ''bmN0aW9uIHcyZSgpe2NvbnN0IG49InNoYXJlZF9lbmdpbmVfdXNhZ2UiLGU9enAoUTIpO3JldHVybiBlLmhhc0l0ZW0obil8fGUucmVnaXN0ZXIobixuZXcgTWFwKSxlLmdldEl0ZW0obil9ZnVuY3Rpb24gZFZlKG4sZSx0KXtjb25zdCByPWVbUTJdLGk9ZnVuY3Rpb24gX1l0KG4pe2NvbnN0''@;'; put 'put ''IHQ9bltRMl0/LmVuZ2luZSxyPXVWZSh0Py5oeXBlcmZvcm11bGE/dDp7fSksaT1jVmUobik7cmV0dXJuey4uLmIyZSwuLi5yLC4uLml9fShlKSxvPVpHKCksYT13MmUoKTsoZnVuY3Rpb24gQ1l0KG4sZSl7ZSYmZS5mb3JFYWNoKHQ9Pntjb25zdHtuYW1lOnIscGx1Z2luOmksdHJhbnNsYXRp''@;'; put 'put ''b25zOm99PXQ7dHJ5e24ucmVnaXN0ZXJGdW5jdGlvbihyLGksbyl9Y2F0Y2goYSl7SGEoYSBpbnN0YW5jZW9mIEVycm9yP2EubWVzc2FnZTpTdHJpbmcoYSkpfX0pfSkobixyLmZ1bmN0aW9ucyksZnVuY3Rpb24gU1l0KG4sZSl7aWYoZSl7Y29uc3R7bGFuZ0NvZGU6dH09ZTt0cnl7bi5yZWdp''@;'; put 'put ''c3Rlckxhbmd1YWdlKHQsZSl9Y2F0Y2gocil7SGEociBpbnN0YW5jZW9mIEVycm9yP3IubWVzc2FnZTpTdHJpbmcocikpfX19KG4sci5sYW5ndWFnZSk7Y29uc3QgbD1uLmJ1aWxkRW1wdHkoaSk7cmV0dXJuIG8uc2V0KGwsW3RdKSxhLnNldChsLFt0Lmd1aWRdKSxmdW5jdGlvbiBFWXQobixl''@;'; put 'put ''KXtlJiYobi5zdXNwZW5kRXZhbHVhdGlvbigpLGUuZm9yRWFjaCh0PT57Y29uc3R7bmFtZTpyLGV4cHJlc3Npb246aSxzY29wZTpvLG9wdGlvbnM6YX09dDt0cnl7bi5hZGROYW1lZEV4cHJlc3Npb24ocixpLG8sYSl9Y2F0Y2gobCl7SGEobCBpbnN0YW5jZW9mIEVycm9yP2wubWVzc2FnZTpT''@;'; put 'put ''dHJpbmcobCkpfX0pLG4ucmVzdW1lRXZhbHVhdGlvbigpKX0obCxyLm5hbWVkRXhwcmVzc2lvbnMpLGwub24oInNoZWV0QWRkZWQiLCgpPT57bC5yZWJ1aWxkQW5kUmVjYWxjdWxhdGUoKX0pLGwub24oInNoZWV0UmVtb3ZlZCIsKCk9PntsLnJlYnVpbGRBbmRSZWNhbGN1bGF0ZSgpfSksbH1m''@;'; put 'put ''dW5jdGlvbiBoVmUobil7Y29uc3QgZT1aRygpLHQ9MD09PWUuc2l6ZT9bXTpBcnJheS5mcm9tKGUuZ2V0KG4pPz9bXSk7cmV0dXJuIG5ldyBNYXAodC5tYXAocj0+e2NvbnN0IGk9cjtyZXR1cm5baS5nZXRQbHVnaW4oImZvcm11bGFzIikuc2hlZXRJZCxpXX0pKX1mdW5jdGlvbiBmVmUobixl''@;'; put 'put ''KXtpZihuKXtjb25zdCB0PVpHKCkscj10LmdldChuKSxpPXcyZSgpLG89aS5nZXQobik7ciYmci5pbmNsdWRlcyhlKSYmKHIuc3BsaWNlKHIuaW5kZXhPZihlKSwxKSwwPT09ci5sZW5ndGgmJnQuZGVsZXRlKG4pKSxvJiZvLmluY2x1ZGVzKGUuZ3VpZCkmJihvLnNwbGljZShvLmluZGV4T2Yo''@;'; put 'put ''ZS5ndWlkKSwxKSwwPT09by5sZW5ndGgmJihpLmRlbGV0ZShuKSxuLmRlc3Ryb3koKSkpfX1mdW5jdGlvbiBDMmUobixlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4mJiJkYXRlIj09PWV9ZnVuY3Rpb24gcFZlKG4pe3JldHVybiB4TyhuKX1mdW5jdGlvbiBTMmUobil7Y29uc3QgdD1uLU1h''@;'; put 'put ''dGguZmxvb3Iobikscj1NYXRoLnJvdW5kKDg2NDAwKnQpLGk9TWF0aC5mbG9vcihyLzM2MDApLG89TWF0aC5mbG9vcihyJTM2MDAvNjApLGE9ciU2MCxsPWAke1N0cmluZyhpKS5wYWRTdGFydCgyLCIwIil9OiR7U3RyaW5nKG8pLnBhZFN0YXJ0KDIsIjAiKX1gO3JldHVybiBhPjA/YCR7bH06''@;'; put 'put ''JHtTdHJpbmcoYSkucGFkU3RhcnQoMiwiMCIpfWA6bH1mdW5jdGlvbiBFMmUobil7Y29uc3QgdD1EYXRlLlVUQygxODk5LDExLDMwKSs4NjRlNSpuLHI9bmV3IERhdGUodCk7cmV0dXJuYCR7ci5nZXRVVENGdWxsWWVhcigpfS0ke1N0cmluZyhyLmdldFVUQ01vbnRoKCkrMSkucGFkU3RhcnQo''@;'; put 'put ''MiwiMCIpfS0ke1N0cmluZyhyLmdldFVUQ0RhdGUoKSkucGFkU3RhcnQoMiwiMCIpfWB9ZnVuY3Rpb24gZ1ZlKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP2FPZShuKTpufWZ1bmN0aW9uIE0yZShuLGUsdCl7Y29uc3Qgcj1mdW5jdGlvbiBSWXQobixlKXtjb25zdCB0PVtdO3JldHVybiBu''@;'; put 'put ''LmZvckVhY2gocj0+e2NvbnN0IGk9e2Zyb206cix0bzplfTt0LmZvckVhY2gobz0+e28uZnJvbT5pLmZyb20mJm8udG88PWkuZnJvbSYmby5mcm9tPm8udG8mJihpLmZyb20rPTEpfSksaS5mcm9tPj1lJiYoZSs9MSksdC5wdXNoKGkpfSksdH0obixmdW5jdGlvbiBrWXQobixlLHQpe2NvbnN0''@;'; put 'put ''IHI9QXJyYXkuZnJvbShBcnJheSh0KS5rZXlzKCkpLmZpbHRlcihpPT4hMT09PW4uaW5jbHVkZXMoaSkpO3JldHVybiAwPT09ZT9yW2VdPz8wOnJbZS0xXSsxfShuLGUsdCkpO3JldHVybiBmdW5jdGlvbiBJWXQobil7cmV0dXJuIG4uZm9yRWFjaCgoZSx0KT0+e24uc2xpY2UodCsxKS5mb3JF''@;'; put 'put ''YWNoKGk9PntpLmZyb20+ZS5mcm9tJiZpLmZyb208aS50byYmKGkuZnJvbS09MSl9KX0pLG59KHIpfWZ1bmN0aW9uIG1WZShuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4g''@;'; put 'put ''b2JqZWN0Iil9ZnVuY3Rpb24gdlZlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIEljKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIERZ''@;'; put 'put ''dChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sdlZlKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIGNDKG4sZSx0KXttVmUobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIE80KG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gTFl0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxs''@;'; put 'put ''KG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obix2VmUobixlLCJzZXQiKSx0KSx0fWZ1bmN0aW9uIF9WZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH12YXIgdUM9bmV3IFdlYWtNYXAsTjQ9bmV3IFdlYWtNYXAsS2Y9bmV3IFdlYWtNYXAscU49bmV3IFdlYWtNYXAsR0c9bmV3IFdlYWtNYXAsVDJlPW5ldyBXZWFrTWFw''@;'; put 'put ''LEtOPW5ldyBXZWFrTWFwLHgyZT1uZXcgV2Vha1NldDtmdW5jdGlvbiB5VmUoKXtjb25zdCBuPUljKHRoaXMsTjQpLmdldEluZGV4ZXNTZXF1ZW5jZSgpO2lmKG4uZXZlcnkoKHUsZyk9PnU9PT1nKXx8MD09PW4ubGVuZ3RoKXJldHVybjtjb25zdCB0PUljKHRoaXMsS2YpLmdldEVuZ2luZSgp''@;'; put 'put ''LHI9SWModGhpcyxLZikuZ2V0U2hlZXRJZCgpO2lmKG51bGw9PT10fHxudWxsPT09cilyZXR1cm4gdm9pZCBJYyh0aGlzLEtmKS5nZXRQb3N0cG9uZUFjdGlvbigpKCgpPT5fVmUodGhpcyx4MmUseVZlKS5jYWxsKHRoaXMpKTtjb25zdCBpPWBzZXQke0swKEljKHRoaXMsdUMpKX1PcmRlcmAs''@;'; put 'put ''bz10LmdldFNoZWV0RGltZW5zaW9ucyhyKSxhPSJyb3ciPT09SWModGhpcyx1Qyk/by5oZWlnaHQ6by53aWR0aCxsPUFycmF5LmZyb20oe2xlbmd0aDpuLmxlbmd0aH0sKHUsZyk9Pm4uaW5kZXhPZihnKSk7Zm9yKGxldCB1PWwubGVuZ3RoO3U8YTt1Kz0xKWwucHVzaCh1KTt0W2ldKHIsbCl9''@;'; put 'put ''Y29uc3QgYlZlPWNsYXNzIE5ZdHtzZXRSZW1vdmVkSGZJbmRleGVzKGUpe3JldHVybiBPNCh0aGlzLEtOLGUubWFwKHQ9Pntjb25zdCByPUljKHRoaXMsTjQpLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHQpO3JldHVybiB0aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgocj8/LTEp''@;'; put 'put ''fSkpLEljKHRoaXMsS04pfWdldFJlbW92ZWRIZkluZGV4ZXMoKXtyZXR1cm4gSWModGhpcyxLTil9Z2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChlKXtjb25zdCB0PUljKHRoaXMsTjQpLmdldEluZGV4ZXNTZXF1ZW5jZSgpLHI9SWModGhpcyxONCkuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKTty''@;'; put 'put ''ZXR1cm4gdC5pbmRleE9mKHJbZV0sZSl9Z2V0VmlzdWFsSW5kZXhGcm9tSGZJbmRleChlKXtjb25zdCB0PUljKHRoaXMsTjQpLmdldEluZGV4ZXNTZXF1ZW5jZSgpLHI9SWModGhpcyxONCkuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKSxpPXRbZV07cmV0dXJuIHZvaWQgMD09PWk/LTE6ci5pbmRl''@;'; put 'put ''eE9mKGkpfXN5bmNNb3ZlcyhlKXtjb25zdCByPWBtb3ZlJHtLMChJYyh0aGlzLHVDKSl9c2AsaT1JYyh0aGlzLEtmKS5nZXRFbmdpbmUoKTtpJiZpLmJhdGNoKCgpPT57ZS5mb3JFYWNoKG89PntvLmZyb20hPT1vLnRvJiZvLmZyb20rMSE9PW8udG8mJmlbcl0oSWModGhpcyxLZikuZ2V0U2hl''@;'; put 'put ''ZXRJZCgpLG8uZnJvbSwxLG8udG8pfSl9KX1zdG9yZU1vdmVzSW5mb3JtYXRpb24oZSx0LHIpeyExIT09ciYmKE80KHRoaXMsR0csZS5tYXAoaT0+dGhpcy5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGkpKSksTzQodGhpcyxUMmUsdGhpcy5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHQp''@;'; put 'put ''KSl9Y2FsY3VsYXRlQW5kU3luY01vdmVzKGUsdCl7aWYoSWModGhpcyxLZikuaXNQZXJmb3JtaW5nVW5kb1JlZG8oKXx8ITE9PT1lfHwhMT09PXQpcmV0dXJuO2NvbnN0IHI9TTJlKEljKHRoaXMsR0cpLEljKHRoaXMsVDJlKT8/MCxJYyh0aGlzLE40KS5nZXROdW1iZXJPZkluZGV4ZXMoKSk7''@;'; put 'put ''bnVsbD09PUljKHRoaXMsS2YpLmdldFNoZWV0SWQoKT9JYyh0aGlzLEtmKS5nZXRQb3N0cG9uZUFjdGlvbigoKT0+dGhpcy5zeW5jTW92ZXMocikpOnRoaXMuc3luY01vdmVzKHIpfWdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCl7Y29uc3QgZT1gc2V0JHtLMChJYyh0aGlzLHVDKSl9T3Jk''@;'; put 'put ''ZXJgO3JldHVybiB0PT57aWYoSWModGhpcyxLZikuaXNQZXJmb3JtaW5nVW5kb1JlZG8oKSlyZXR1cm47Y29uc3Qgcj1JYyh0aGlzLE40KS5nZXRJbmRleGVzU2VxdWVuY2UoKTtpZigidXBkYXRlIj09PXQmJnIubGVuZ3RoPjApe2NvbnN0IGk9SWModGhpcyxxTikubWFwKHU9PnIuaW5kZXhP''@;'; put 'put ''Zih1KSksbz1JYyh0aGlzLEtmKS5nZXRFbmdpbmUoKS5nZXRTaGVldERpbWVuc2lvbnMoSWModGhpcyxLZikuZ2V0U2hlZXRJZCgpKTtsZXQgYTthPSJyb3ciPT09SWModGhpcyx1Qyk/by5oZWlnaHQ6by53aWR0aDtmb3IobGV0IHU9aS5sZW5ndGg7dTxhO3UrPTEpaS5wdXNoKHUpO0ljKHRo''@;'; put 'put ''aXMsS2YpLmdldEVuZ2luZSgpW2VdKEljKHRoaXMsS2YpLmdldFNoZWV0SWQoKSxpKX1PNCh0aGlzLHFOLHIpfX1pbml0KCl7X1ZlKHRoaXMseDJlLHlWZSkuY2FsbCh0aGlzKSxPNCh0aGlzLHFOLEljKHRoaXMsTjQpLmdldEluZGV4ZXNTZXF1ZW5jZSgpKX1jb25zdHJ1Y3RvcihlLHQscil7''@;'; put 'put ''KGZ1bmN0aW9uIE9ZdChuLGUpe21WZShuLGUpLGUuYWRkKG4pfSkodGhpcyx4MmUpLGNDKHRoaXMsdUMse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGNDKHRoaXMsTjQse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGNDKHRoaXMsS2Yse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0p''@;'; put 'put ''LGNDKHRoaXMscU4se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGNDKHRoaXMsR0cse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGNDKHRoaXMsVDJlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxjQyh0aGlzLEtOLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPNCh0aGlz''@;'; put 'put ''LHFOLFtdKSxPNCh0aGlzLEdHLFtdKSxPNCh0aGlzLEtOLFtdKSxPNCh0aGlzLHVDLGUpLE80KHRoaXMsTjQsdCksTzQodGhpcyxLZixyKX19O2Z1bmN0aW9uIHdWZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZp''@;'; put 'put ''ZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBZNyhuLGUpe3JldHVybiBmdW5jdGlvbiBQWXQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLHdWZShuLGUsImdldCIpKX1mdW5jdGlvbiBkQyhuLGUsdCl7KGZ1bmN0aW9uIEZZ''@;'; put 'put ''dChuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLGUpLGUuc2V0KG4sdCl9ZnVuY3Rpb24gRjQobixlLHQpe3JldHVybiBmdW5jdGlvbiBIWXQobixl''@;'; put 'put ''LHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLHdWZShuLGUsInNldCIpLHQpLHR9dmFyICRHPW5ldyBXZWFrTWFw''@;'; put 'put ''LHFHPW5ldyBXZWFrTWFwLEEyZT1uZXcgV2Vha01hcCxLRz1uZXcgV2Vha01hcCxYRz1uZXcgV2Vha01hcCxRRz1uZXcgV2Vha01hcCxKRz1uZXcgV2Vha01hcDtjb25zdCBCWXQ9Y2xhc3MgVll0e2dldEZvckF4aXMoZSl7cmV0dXJuIFk3KHRoaXMsInJvdyI9PT1lPyRHOnFHKX1zZXRQZXJm''@;'; put 'put ''b3JtVW5kbyhlKXtGNCh0aGlzLEtHLGUpfXNldFBlcmZvcm1SZWRvKGUpe0Y0KHRoaXMsWEcsZSl9aXNQZXJmb3JtaW5nVW5kb1JlZG8oKXtyZXR1cm4gWTcodGhpcyxLRyl8fFk3KHRoaXMsWEcpfWdldFNoZWV0SWQoKXtyZXR1cm4gWTcodGhpcyxKRyl9Z2V0RW5naW5lKCl7cmV0dXJuIFk3''@;'; put 'put ''KHRoaXMsUUcpfWdldFBvc3Rwb25lQWN0aW9uKCl7cmV0dXJuIFk3KHRoaXMsQTJlKX1zZXR1cFN5bmNFbmRwb2ludChlLHQpe0Y0KHRoaXMsUUcsZSksRjQodGhpcyxKRyx0KSxZNyh0aGlzLCRHKS5pbml0KCksWTcodGhpcyxxRykuaW5pdCgpfWNvbnN0cnVjdG9yKGUsdCxyKXtkQyh0aGlz''@;'; put 'put ''LCRHLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxkQyh0aGlzLHFHLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxkQyh0aGlzLEEyZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZEModGhpcyxLRyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZEModGhpcyxYRyx7d3Jp''@;'; put 'put ''dGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZEModGhpcyxRRyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZEModGhpcyxKRyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRjQodGhpcyxLRywhMSksRjQodGhpcyxYRywhMSksRjQodGhpcyxRRyxudWxsKSxGNCh0aGlzLEpHLG51bGwp''@;'; put 'put ''LEY0KHRoaXMsJEcsbmV3IGJWZSgicm93IixlLHRoaXMpKSxGNCh0aGlzLHFHLG5ldyBiVmUoImNvbHVtbiIsdCx0aGlzKSksRjQodGhpcyxBMmUscil9fTtmdW5jdGlvbiBDVmUobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2Ft''@;'; put 'put ''ZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFNWZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5j''@;'; put 'put ''dGlvbiBsYyhuLGUpe3JldHVybiBmdW5jdGlvbiBqWXQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLFNWZShuLGUsImdldCIpKX1mdW5jdGlvbiBQdShuLGUsdCl7Q1ZlKG4sZSksZS5zZXQobix0KX1mdW5jdGlvbiBKbChuLGUsdCl7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''IFVZdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4sU1ZlKG4sZSwic2V0IiksdCksdH1mdW5jdGlvbiBx''@;'; put 'put ''MyhuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiBlJChuLGUpe0NWZShuLGUpLGUuYWRkKG4pfWZ1bmN0aW9uIGsyZShuKXtyZXR1cm4ib2JqZWN0''@;'; put 'put ''Ij09dHlwZW9mIG4mJm51bGwhPT1ufWZ1bmN0aW9uIEVWZShuKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPT1ufWZ1bmN0aW9uIE1WZShuKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPT1uJiYidmFsdWUiaW4gbn1jb25zdCBRMj0iZm9ybXVsYXMiLHpZdD1bIm1h''@;'; put 'put ''eFJvd3MiLCJtYXhDb2x1bW5zIiwibGFuZ3VhZ2UiXTtHby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZCIpLEdvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiKSxHby5nZXRTaW5nbGV0b24oKS5y''@;'; put 'put ''ZWdpc3RlcigiYWZ0ZXJTaGVldEFkZGVkIiksR28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyU2hlZXRSZW1vdmVkIiksR28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyU2hlZXRSZW5hbWVkIiksR28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRm9ybXVsYXNW''@;'; put 'put ''YWx1ZXNVcGRhdGUiKTtjb25zdCBweD1uPT4iVW5kb1JlZG8udW5kbyI9PT1ufHwiVW5kb1JlZG8ucmVkbyI9PT1ufHwiYXV0byI9PT1uO3ZhciBFNj1uZXcgV2Vha01hcCxYTj1uZXcgV2Vha01hcCxUVmU9bmV3IFdlYWtTZXQsUjJlPW5ldyBXZWFrTWFwLEkyZT1uZXcgV2Vha01hcCxEMmU9''@;'; put 'put ''bmV3IFdlYWtNYXAsTDJlPW5ldyBXZWFrTWFwLE8yZT1uZXcgV2Vha01hcCxOMmU9bmV3IFdlYWtNYXAsZ3g9bmV3IFdlYWtNYXAsbXg9bmV3IFdlYWtTZXQsdCQ9bmV3IFdlYWtTZXQsdng9bmV3IFdlYWtTZXQsRjJlPW5ldyBXZWFrTWFwLFAyZT1uZXcgV2Vha01hcCxuJD1uZXcgV2Vha01h''@;'; put 'put ''cCxIMmU9bmV3IFdlYWtNYXAsciQ9bmV3IFdlYWtNYXAsVjJlPW5ldyBXZWFrTWFwLEIyZT1uZXcgV2Vha01hcCxpJD1uZXcgV2Vha01hcCxqMmU9bmV3IFdlYWtNYXAsVTJlPW5ldyBXZWFrTWFwLHoyZT1uZXcgV2Vha01hcCxXMmU9bmV3IFdlYWtNYXAsWTJlPW5ldyBXZWFrTWFwLFoyZT1u''@;'; put 'put ''ZXcgV2Vha01hcCxHMmU9bmV3IFdlYWtNYXAsJDJlPW5ldyBXZWFrTWFwLHEyZT1uZXcgV2Vha01hcCxLMmU9bmV3IFdlYWtNYXA7Y2xhc3MgWVl0IGV4dGVuZHMgYWx7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFEyfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJu''@;'; put 'put ''IDI2MH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybltRMiwuLi56WXRdfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtRMl19ZW5hYmxlUGx1Z2luKCl7aWYoIXRoaXMuZW5hYmxlZCl7aWYodGhpcy5lbmdpbmU9ZnVuY3Rpb24gd1l0KG4pe2NvbnN0''@;'; put 'put ''IGU9bi5nZXRTZXR0aW5ncygpLHQ9ZVtRMl07aWYoIXR8fCEwPT09dClyZXR1cm4gbnVsbDtjb25zdCByPXQ/LmVuZ2luZTtpZih2b2lkIDA9PT1yKXJldHVybiBudWxsO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByLmh5cGVyZm9ybXVsYSlyZXR1cm4gZFZlKHIuaHlwZXJmb3JtdWxhLGUsbik7''@;'; put 'put ''aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpcmV0dXJuIGRWZShyLGUsbik7aWYoIm9iamVjdCI9PXR5cGVvZiByJiZYdShyLmh5cGVyZm9ybXVsYSkpe2NvbnN0IGk9WkcoKSxvPXcyZSgpLmdldChyKTtyZXR1cm4gaS5oYXMocil8fGkuc2V0KHIsW10pLGkuZ2V0KHIpLnB1c2gobiksbyYmby5w''@;'; put 'put ''dXNoKG4uZ3VpZCksci5nZXRDb25maWcoKS5saWNlbnNlS2V5fHxyLnVwZGF0ZUNvbmZpZyh7bGljZW5zZUtleTpsVmV9KSwoci5nZXRDb25maWcoKS5sZWFwWWVhcjE5MDAhPT1iMmUubGVhcFllYXIxOTAwfHwhMT09PWc3KHIuZ2V0Q29uZmlnKCkubnVsbERhdGUsYjJlLm51bGxEYXRlKSkm''@;'; put 'put ''JkhhKHljYElmIHlvdSB1c2UgSHlwZXJGb3JtdWxhIHdpdGggSGFuZHNvbnRhYmxlLCBrZWVwIHRoZSBkZWZhdWx0IFxgbGVhcFllYXIxOTAwXGAgYW5kIFxgbnVsbERhdGVcYCAKICAgICAgc2V0dGluZ3MuIE90aGVyd2lzZSwgSHlwZXJGb3JtdWxhJ3MgZGF0ZXMgbWF5IG5vdCBzeW5jIGNv''@;'; put 'put ''cnJlY3RseSB3aXRoIEhhbmRzb250YWJsZSdzIGRhdGVzLmApLHJ9cmV0dXJuIG51bGx9KHRoaXMuaG90KT8/dGhpcy5lbmdpbmUsIXRoaXMuZW5naW5lKXJldHVybiB2b2lkIEhhKCJNaXNzaW5nIHRoZSByZXF1aXJlZCBgZW5naW5lYCBrZXkgaW4gdGhlIEZvcm11bGFzIHNldHRpbmdzLiBQ''@;'; put 'put ''bGVhc2UgZmlsbCBpdCB3aXRoIGVpdGhlciBhbiBlbmdpbmUgY2xhc3Mgb3IgYW4gZW5naW5lIGluc3RhbmNlLiIpO2lmKG51bGwhPT10aGlzLnNoZWV0TmFtZSYmIXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSl7Y29uc3QgZT10aGlzLmFkZFNoZWV0KHRoaXMu''@;'; put 'put ''c2hlZXROYW1lLHEzKHRoaXMsdngsSk4pLmNhbGwodGhpcykpOyJzdHJpbmciPT10eXBlb2YgZSYmcTModGhpcyxteCxRTikuY2FsbCh0aGlzLGUpfXRoaXMuYWRkSG9vaygiYmVmb3JlTG9hZERhdGEiLGxjKHRoaXMsbiQpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGxjKHRoaXMs''@;'; put 'put ''ciQpKSx0aGlzLmFkZEhvb2soImJlZm9yZVVwZGF0ZURhdGEiLGxjKHRoaXMsbiQpKSx0aGlzLmFkZEhvb2soImFmdGVyVXBkYXRlRGF0YSIsbGModGhpcyxyJCkpLHRoaXMuYWRkSG9vaygibW9kaWZ5RGF0YSIsbGModGhpcyxWMmUpKSx0aGlzLmFkZEhvb2soIm1vZGlmeVNvdXJjZURhdGEi''@;'; put 'put ''LGxjKHRoaXMsQjJlKSksdGhpcy5hZGRIb29rKCJiZWZvcmVWYWxpZGF0ZSIsbGModGhpcyxGMmUpKSx0aGlzLmFkZEhvb2soImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsbGModGhpcyxqMmUpKSx0aGlzLmFkZEhvb2soImFmdGVyU2V0RGF0YUF0Q2VsbCIsbGModGhpcyxpJCkpLHRoaXMu''@;'; put 'put ''YWRkSG9vaygiYWZ0ZXJTZXREYXRhQXRSb3dQcm9wIixsYyh0aGlzLGkkKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVSb3ciLGxjKHRoaXMsVTJlKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVDb2wiLGxjKHRoaXMsejJlKSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIs''@;'; put 'put ''bGModGhpcyxaMmUpKSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIixsYyh0aGlzLEcyZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IixsYyh0aGlzLFcyZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ29sIixsYyh0aGlzLFkyZSkpLHRoaXMuYWRkSG9vaygiYWZ0''@;'; put 'put ''ZXJSZW1vdmVSb3ciLGxjKHRoaXMsJDJlKSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZUNvbCIsbGModGhpcyxxMmUpKSx0aGlzLmluZGV4U3luY2VyPW5ldyBCWXQodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsZT0+e3RoaXMuaG90LmFkZEhv''@;'; put 'put ''b2tPbmNlKCJpbml0IiwoKT0+e2UoKX0pfSksdGhpcy5yb3dBeGlzU3luY2VyPXRoaXMuaW5kZXhTeW5jZXIuZ2V0Rm9yQXhpcygicm93IiksdGhpcy5jb2x1bW5BeGlzU3luY2VyPXRoaXMuaW5kZXhTeW5jZXIuZ2V0Rm9yQXhpcygiY29sdW1uIiksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJS''@;'; put 'put ''b3dTZXF1ZW5jZUNoYW5nZSIsdGhpcy5yb3dBeGlzU3luY2VyLmdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCkpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLHRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRJbmRleGVzQ2hhbmdlU3luY01ldGhvZCgpKSx0''@;'; put 'put ''aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVSb3dNb3ZlIiwoZSx0LHIsaSk9Pnt0aGlzLnJvd0F4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKGUsdCxpKX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbHVtbk1vdmUiLChlLHQscixpKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5z''@;'; put 'put ''dG9yZU1vdmVzSW5mb3JtYXRpb24oZSx0LGkpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJSb3dNb3ZlIiwoZSx0LHIsaSxvKT0+e3RoaXMucm93QXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5jTW92ZXMoaSxvKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uTW92ZSIsKGUsdCxy''@;'; put 'put ''LGksbyk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKGksbyl9KSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVDb2x1bW5GcmVlemUiLChlLHQpPT57Y29uc3Qgcj10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0O3RoaXMuY29sdW1u''@;'; put 'put ''QXhpc1N5bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24oW2VdLHIsdCl9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckNvbHVtbkZyZWV6ZSIsKGUsdCk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKHQsdCl9KSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVD''@;'; put 'put ''b2x1bW5VbmZyZWV6ZSIsKGUsdCk9Pntjb25zdCByPXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ7dGhpcy5jb2x1bW5BeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihbZV0sci0xLHQpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5VbmZyZWV6''@;'; put 'put ''ZSIsKGUsdCk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKHQsdCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ2VsbE1ldGFSZXNldCIsbGModGhpcyxIMmUpKSx0aGlzLmFkZEhvb2soImJlZm9yZVVuZG8iLCgpPT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJm''@;'; put 'put ''b3JtVW5kbyghMCksdGhpcy5lbmdpbmUudW5kbygpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZWRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVJlZG8oITApLHRoaXMuZW5naW5lLnJlZG8oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVbmRvIiwoKT0+e3RoaXMuaW5kZXhTeW5j''@;'; put 'put ''ZXIuc2V0UGVyZm9ybVVuZG8oITEpfSksdGhpcy5hZGRIb29rKCJhZnRlclVuZG8iLCgpPT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtUmVkbyghMSl9KSx0aGlzLmFkZEhvb2soImFmdGVyRGV0YWNoQ2hpbGQiLGxjKHRoaXMsSzJlKSksdGhpcy5hZGRIb29rKCJiZWZvcmVBdXRvZmls''@;'; put 'put ''bCIsbGModGhpcyxQMmUpKSxsYyh0aGlzLGd4KT8uZm9yRWFjaCgoW2UsdF0pPT50aGlzLmVuZ2luZS5vbihlLHQpKSxzdXBlci5lbmFibGVQbHVnaW4oKX19ZGlzYWJsZVBsdWdpbigpe2xjKHRoaXMsZ3gpPy5mb3JFYWNoKChbZSx0XSk9PnRoaXMuZW5naW5lPy5vZmYoZSx0KSksdGhpcy5l''@;'; put 'put ''bmdpbmUmJmZWZSh0aGlzLmVuZ2luZSx0aGlzLmhvdCksdGhpcy5lbmdpbmU9bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKGUpe2NvbnN0IHQ9ZnVuY3Rpb24geVl0KG4pe2NvbnN0IHQ9bltRMl0/LmVuZ2luZTtyZXR1cm57Li4udVZlKHQ/Lmh5cGVyZm9ybXVsYT90''@;'; put 'put ''Ont9KSwuLi5jVmUobil9fSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpKTt0aGlzLmVuZ2luZSYmZnVuY3Rpb24gYll0KG4sZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnNvbWUodD0+dm9pZCAwIT09ZVt0XSYmZVt0XSE9PW5bdF0pfSh0aGlzLmVuZ2luZS5nZXRDb25maWcoKSx0KSYmdGhpcy5l''@;'; put 'put ''bmdpbmUudXBkYXRlQ29uZmlnKHQpO2NvbnN0IHI9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtRMl07aWYodm9pZCAwIT09ciYmImJvb2xlYW4iIT10eXBlb2YgciYmdm9pZCAwIT09ci5zaGVldE5hbWUmJnIuc2hlZXROYW1lIT09dGhpcy5zaGVldE5hbWUmJnRoaXMuc3dpdGNoU2hlZXQoci5z''@;'; put 'put ''aGVldE5hbWUpLCFlLmRhdGEmJm51bGw9PT10aGlzLnNoZWV0TmFtZSl7Y29uc3QgaT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW1EyXSxvPUVWZShpKT9pLnNoZWV0TmFtZTp2b2lkIDA7aWYobyYmdGhpcy5lbmdpbmU/LmRvZXNTaGVldEV4aXN0KG8pKXRoaXMuc3dpdGNoU2hlZXQobyk7ZWxz''@;'; put 'put ''ZXtjb25zdCBhPXRoaXMuYWRkU2hlZXQobz8/dm9pZCAwLHEzKHRoaXMsdngsSk4pLmNhbGwodGhpcykpOyJzdHJpbmciPT10eXBlb2YgYSYmcTModGhpcyxteCxRTikuY2FsbCh0aGlzLGEpfX1zdXBlci51cGRhdGVQbHVnaW4oZSl9ZGVzdHJveSgpe2xjKHRoaXMsZ3gpPy5mb3JFYWNoKChb''@;'; put 'put ''ZSx0XSk9PnRoaXMuZW5naW5lPy5vZmYoZSx0KSksSmwodGhpcyxneCxudWxsKSx0aGlzLmVuZ2luZSYmZlZlKHRoaXMuZW5naW5lLHRoaXMuaG90KSx0aGlzLmVuZ2luZT1udWxsLHN1cGVyLmRlc3Ryb3koKX1hZGRTaGVldChlLHQpe2lmKFpvKHQpJiYhVWxlKHQpKXJldHVybiBIYSgiVGhl''@;'; put 'put ''IHByb3ZpZGVkIGRhdGEgc2hvdWxkIGJlIGFuIGFycmF5IG9mIGFycmF5cy4iKSwhMTtpZihudWxsIT1lJiZ0aGlzLmVuZ2luZT8uZG9lc1NoZWV0RXhpc3QoZSkpcmV0dXJuIEhhKCJTaGVldCB3aXRoIHRoZSBwcm92aWRlZCBuYW1lIGFscmVhZHkgZXhpc3RzLiIpLCExO3RyeXtjb25zdCBy''@;'; put 'put ''PXRoaXMuZW5naW5lLmFkZFNoZWV0KGU/P3ZvaWQgMCk7cmV0dXJuIHQmJnRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLmVuZ2luZS5nZXRTaGVldElkKHIpLHQpLHJ9Y2F0Y2gocil7cmV0dXJuIEhhKHIgaW5zdGFuY2VvZiBFcnJvcj9yLm1lc3NhZ2U6U3RyaW5nKHIpKSwhMX19''@;'; put 'put ''c3dpdGNoU2hlZXQoZSl7aWYoIXRoaXMuZW5naW5lPy5kb2VzU2hlZXRFeGlzdChlKSlyZXR1cm4gdm9pZCBtNyhgVGhlIHNoZWV0IG5hbWVkIFxgJHtlfVxgIGRvZXMgbm90IGV4aXN0LCBzd2l0Y2ggYWJvcnRlZC5gKTtxMyh0aGlzLG14LFFOKS5jYWxsKHRoaXMsZSk7Y29uc3QgdD10aGlz''@;'; put 'put ''LmVuZ2luZS5nZXRTaGVldFNlcmlhbGl6ZWQodGhpcy5zaGVldElkKTt0Lmxlbmd0aD4wJiZ0aGlzLmhvdC5sb2FkRGF0YSh0LGAke0swKFEyKX0uc3dpdGNoU2hlZXRgKX1nZXRDZWxsVHlwZShlLHQscj10aGlzLnNoZWV0SWQpe2NvbnN0IGk9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhlKSxv''@;'; put 'put ''PXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odCk7cmV0dXJuIG51bGwhPT1pJiZudWxsIT09bz90aGlzLmVuZ2luZS5nZXRDZWxsVHlwZSh7c2hlZXQ6cixyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZSksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNl''@;'; put 'put ''ci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHQpfSk6IkVNUFRZIn1pc0Zvcm11bGFDZWxsVHlwZShlLHQscj10aGlzLnNoZWV0SWQpe3JldHVybiB0aGlzLmVuZ2luZS5kb2VzQ2VsbEhhdmVGb3JtdWxhKHtzaGVldDpyLHJvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21W''@;'; put 'put ''aXN1YWxJbmRleChlKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgodCl9KX1yZW5kZXJEZXBlbmRlbnRTaGVldHMoZSx0PSExKXtjb25zdCByPW5ldyBTZXQ7ZS5mb3JFYWNoKGk9Pntjb25zdCBvPWsyZShpKT9pLmFkZHJlc3M/LnNoZWV0OnZv''@;'; put 'put ''aWQgMDt2b2lkIDAhPT1vJiYhci5oYXMobykmJnIuYWRkKG8pfSksdGhpcy5lbmdpbmUmJmhWZSh0aGlzLmVuZ2luZSkuZm9yRWFjaCgoaSxvKT0+eyh0fHxvIT09dGhpcy5zaGVldElkKSYmci5oYXMobykmJihpLnJlbmRlcigpLGkudmlldz8uYWRqdXN0RWxlbWVudHNTaXplKCkpfSl9dmFs''@;'; put 'put ''aWRhdGVEZXBlbmRlbnRDZWxscyhlLHQ9W10pe2NvbnN0IHI9bz0+e2NvbnN0IGE9azJlKG8pP28uYWRkcmVzczp2b2lkIDAse3JvdzpsLGNvbDp1LHNoZWV0Omd9PWE/P3t9O3JldHVybiBabyhnKT9gJHtnfToke2x9eCR7dX1gOiIifSxpPW5ldyBTZXQodC5tYXAobz0+cihvKSkpO2UuZm9y''@;'; put 'put ''RWFjaChvPT57Y29uc3QgYT1rMmUobyk/by5hZGRyZXNzOnZvaWQgMCx7cm93OmwsY29sOnUsc2hlZXQ6Z309YT8/e307aWYodm9pZCAwPT09bHx8dm9pZCAwPT09dXx8bD49dGhpcy5ob3QuY291bnRSb3dzKCl8fHU+PXRoaXMuaG90LmNvdW50Q29scygpKXJldHVybjtjb25zdCBFPXIobyk7''@;'; put 'put ''aWYodm9pZCAwIT09ZyYmIWkuaGFzKEUpJiZ0aGlzLmVuZ2luZSl7Y29uc3QgTz1oVmUodGhpcy5lbmdpbmUpLmdldChnKTtpZighTylyZXR1cm47Ty52YWxpZGF0ZUNlbGwoTy5nZXREYXRhQXRDZWxsKGwsdSksTy5nZXRDZWxsTWV0YShsLHUpLCgpPT57fSl9fSl9c3luY0NoYW5nZVdpdGhF''@;'; put 'put ''bmdpbmUoZSx0LHIpe2NvbnN0IGk9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChlKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgodCksc2hlZXQ6dGhpcy5zaGVldElkfTtpZih0aGlzLmVuZ2luZT8u''@;'; put 'put ''aXNJdFBvc3NpYmxlVG9TZXRDZWxsQ29udGVudHMoaSkpcmV0dXJuIEMyZShyLHRoaXMuaG90LmdldENlbGxNZXRhKGUsdCkudHlwZSkmJihwVmUocil8fCExPT09ZnVuY3Rpb24gQVl0KG4pe3JldHVybiJzdHJpbmciPT10eXBlb2YgbiYmbi5zdGFydHNXaXRoKCI9Iil9KHIpJiYocj1gJyR7''@;'; put 'put ''cn1gKSksdGhpcy5lbmdpbmU/LnNldENlbGxDb250ZW50cyhpLHIpO0hhKGBOb3QgcG9zc2libGUgdG8gc2V0IGNlbGwgZGF0YSBhdCAke0pTT04uc3RyaW5naWZ5KGkpfWApfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLGUkKHRoaXMsVFZlKSxlJCh0aGlzLG14KSxlJCh0aGlzLHQk''@;'; put 'put ''KSxlJCh0aGlzLHZ4KSxQdSh0aGlzLEU2LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxQdSh0aGlzLFhOLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxQdSh0aGlzLFIyZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUHUodGhpcyxJMmUse3dyaXRhYmxlOiEwLHZhbHVlOnZv''@;'; put 'put ''aWQgMH0pLFB1KHRoaXMsRDJlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxQdSh0aGlzLEwyZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUHUodGhpcyxPMmUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFB1KHRoaXMsTjJlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9''@;'; put 'put ''KSxQdSh0aGlzLGd4LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxQdSh0aGlzLEYyZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUHUodGhpcyxQMmUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFB1KHRoaXMsbiQse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFB1KHRo''@;'; put 'put ''aXMsSDJlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxQdSh0aGlzLHIkLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxQdSh0aGlzLFYyZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUHUodGhpcyxCMmUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFB1KHRoaXMsaSQs''@;'; put 'put ''e3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFB1KHRoaXMsajJlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxQdSh0aGlzLFUyZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUHUodGhpcyx6MmUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFB1KHRoaXMsVzJlLHt3cml0''@;'; put 'put ''YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxQdSh0aGlzLFkyZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUHUodGhpcyxaMmUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFB1KHRoaXMsRzJlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxQdSh0aGlzLCQyZSx7d3JpdGFibGU6''@;'; put 'put ''ITAsdmFsdWU6dm9pZCAwfSksUHUodGhpcyxxMmUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFB1KHRoaXMsSzJlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxKbCh0aGlzLEU2LCExKSxKbCh0aGlzLFhOLCExKSxKbCh0aGlzLFIyZSx0PT57Y29uc3Qgcj10Lm1hcChpPT5xMyh0''@;'; put 'put ''aGlzLFRWZSxaWXQpLmNhbGwodGhpcyxpKSk7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLHIpfSksSmwodGhpcyxJMmUsKHQscik9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZCIsdCxyKX0pLEpsKHRoaXMsRDJlLCh0''@;'; put 'put ''LHIpPT57dGhpcy5ob3QucnVuSG9va3MoImFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIsdCxyKX0pLEpsKHRoaXMsTDJlLHQ9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTaGVldEFkZGVkIix0KX0pLEpsKHRoaXMsTzJlLCh0LHIpPT57cTModGhpcyxteCxRTikuY2FsbCh0aGlzLHIp''@;'; put 'put ''LHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNoZWV0UmVuYW1lZCIsdCxyKX0pLEpsKHRoaXMsTjJlLCh0LHIpPT57dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2hlZXRSZW1vdmVkIix0LHIpfSksSmwodGhpcyxneCxbWyJ2YWx1ZXNVcGRhdGVkIixsYyh0aGlzLFIyZSldLFsibmFtZWRFeHBy''@;'; put 'put ''ZXNzaW9uQWRkZWQiLGxjKHRoaXMsSTJlKV0sWyJuYW1lZEV4cHJlc3Npb25SZW1vdmVkIixsYyh0aGlzLEQyZSldLFsic2hlZXRBZGRlZCIsbGModGhpcyxMMmUpXSxbInNoZWV0UmVuYW1lZCIsbGModGhpcyxPMmUpXSxbInNoZWV0UmVtb3ZlZCIsbGModGhpcyxOMmUpXV0pLHRoaXMuc3Rh''@;'; put 'put ''dGljUmVnaXN0ZXI9enAoImZvcm11bGFzIiksdGhpcy5lbmdpbmU9bnVsbCx0aGlzLnNoZWV0SWQ9bnVsbCx0aGlzLnNoZWV0TmFtZT1udWxsLHRoaXMuaW5kZXhTeW5jZXI9bnVsbCx0aGlzLnJvd0F4aXNTeW5jZXI9bnVsbCx0aGlzLmNvbHVtbkF4aXNTeW5jZXI9bnVsbCxKbCh0aGlzLEYy''@;'; put 'put ''ZSwodCxyLGkpPT57Y29uc3Qgbz10aGlzLmhvdC5wcm9wVG9Db2woaSk7aWYodGhpcy5pc0Zvcm11bGFDZWxsVHlwZShyLG8pKXtjb25zdCBhPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgociksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRI''@;'; put 'put ''ZkluZGV4RnJvbVZpc3VhbEluZGV4KG8pLHNoZWV0OnRoaXMuc2hlZXRJZH0sbD10aGlzLmhvdC5nZXRDZWxsTWV0YShyLG8pO2xldCB1PXRoaXMuZW5naW5lLmdldENlbGxWYWx1ZShhKTtyZXR1cm4iZGF0ZSI9PT1sLnR5cGUmJncwKHUpP3U9RTJlKHUpOiJ0aW1lIj09PWwudHlwZSYmdzAo''@;'; put 'put ''dSkmJih1PVMyZSh1KSksTVZlKHUpP3UudmFsdWU6dX1yZXR1cm4gdH0pLEpsKHRoaXMsUDJlLCh0LHIsaSk9Pntjb25zdHtyb3c6byxjb2w6YX09ci5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6bCxjb2w6dX09ci5nZXRCb3R0b21FbmRDb3JuZXIoKSx7cm93OmcsY29sOkV9PWkuZ2V0VG9w''@;'; put 'put ''U3RhcnRDb3JuZXIoKSx7cm93Ok8sY29sOlp9PWkuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7aWYobnVsbD09PW98fG51bGw9PT1hfHxudWxsPT09bHx8bnVsbD09PXV8fG51bGw9PT1nfHxudWxsPT09RXx8bnVsbD09PU98fG51bGw9PT1aKXJldHVybjtjb25zdCBlZT10aGlzLnJvd0F4aXNTeW5j''@;'; put 'put ''ZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChvKSx2ZT10aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKSxNZT10aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxIZT10aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0''@;'; put 'put ''SGZJbmRleEZyb21WaXN1YWxJbmRleCh1KSxXZT10aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChnKSxhdD10aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChFKSxDdD10aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZy''@;'; put 'put ''b21WaXN1YWxJbmRleChPKSxBdD10aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChaKTtpZihudWxsPT09ZWV8fG51bGw9PT12ZXx8bnVsbD09PU1lfHxudWxsPT09SGV8fG51bGw9PT1XZXx8bnVsbD09PWF0fHxudWxsPT09Q3R8fG51bGw9PT1BdClyZXR1''@;'; put 'put ''cm47Y29uc3QgS3Q9e3N0YXJ0Ontyb3c6ZWUsY29sOnZlLHNoZWV0OnRoaXMuc2hlZXRJZH0sZW5kOntyb3c6TWUsY29sOkhlLHNoZWV0OnRoaXMuc2hlZXRJZH19LHF0PXtzdGFydDp7cm93OldlLGNvbDphdCxzaGVldDp0aGlzLnNoZWV0SWR9LGVuZDp7cm93OkN0LGNvbDpBdCxzaGVldDp0''@;'; put 'put ''aGlzLnNoZWV0SWR9fTtpZighMT09PXRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvU2V0Q2VsbENvbnRlbnRzKHF0KSlyZXR1cm4hMTtjb25zdCBnbj10aGlzLmVuZ2luZS5nZXRGaWxsUmFuZ2VEYXRhKEt0LHF0KSx7cm93OlRuLGNvbDpDbn09S3Quc3RhcnQse3Jvdzpxcixjb2w6JG59PUt0''@;'; put 'put ''LmVuZCxUcj1xci1UbisxLHJpPSRuLUNuKzE7Zm9yKGxldCBmbj0wO2ZuPGduLmxlbmd0aDtmbis9MSlmb3IobGV0IHlyPTA7eXI8Z25bZm5dLmxlbmd0aDt5cis9MSl7Y29uc3QgQW49Z25bZm5dW3lyXSxIcj1UbitmbiVUcix0aT1Dbit5ciVyaTtDMmUoQW4sdGhpcy5ob3QuZ2V0Q2VsbE1l''@;'; put 'put ''dGEoSHIsdGkpLnR5cGUpJiYoQW4uc3RhcnRzV2l0aCgiJyIpP2duW2ZuXVt5cl09QW4uc2xpY2UoMSk6ITE9PT10aGlzLmlzRm9ybXVsYUNlbGxUeXBlKEhyLHRpLHRoaXMuc2hlZXRJZCkmJihnbltmbl1beXJdPUFuKSl9cmV0dXJuIGdufSksSmwodGhpcyxuJCwodCxyLGk9IiIpPT57aS5p''@;'; put 'put ''bmNsdWRlcyhLMChRMikpfHxKbCh0aGlzLFhOLFh1KHRoaXMuaG90LmdldFNldHRpbmdzKCkuZGF0YSkpfSksSmwodGhpcyxIMmUsKCk9PntpZihsYyh0aGlzLFhOKSlyZXR1cm4gdm9pZChudWxsIT09dGhpcy5zaGVldE5hbWUmJnRoaXMuc3dpdGNoU2hlZXQodGhpcy5zaGVldE5hbWUpKTtj''@;'; put 'put ''b25zdCB0PXEzKHRoaXMsdngsSk4pLmNhbGwodGhpcyk7dC5mb3JFYWNoKChpLG8pPT57aS5mb3JFYWNoKChhLGwpPT57QzJlKGEsdGhpcy5ob3QuZ2V0Q2VsbE1ldGEobyxsLHtza2lwTWV0YUV4dGVuc2lvbjohMH0pLnR5cGUpJiYocFZlKGEpP3Rbb11bbF09YTphLnN0YXJ0c1dpdGgoIj0i''@;'; put 'put ''KXx8KHRbb11bbF09YCcke2F9YCkpfSl9KSxKbCh0aGlzLEU2LCEwKTtjb25zdCByPXRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLnNoZWV0SWQsdCk7dGhpcy5pbmRleFN5bmNlci5zZXR1cFN5bmNFbmRwb2ludCh0aGlzLmVuZ2luZSx0aGlzLnNoZWV0SWQpLHRoaXMucmVuZGVy''@;'; put 'put ''RGVwZW5kZW50U2hlZXRzKHIpLEpsKHRoaXMsRTYsITEpfSksSmwodGhpcyxyJCwodCxyLGk9IiIpPT57aWYoaS5pbmNsdWRlcyhLMChRMikpfHwhdGhpcy5lbmdpbmUpcmV0dXJuO2NvbnN0IG89dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtRMl0sYT1FVmUobyk/by5zaGVldE5hbWU6dm9pZCAw''@;'; put 'put ''LGw9ZnVuY3Rpb24gTVl0KG4sZSl7cmV0dXJuKFh1KGUpfHwhbi5kb2VzU2hlZXRFeGlzdChlKSkmJihlPW4uYWRkU2hlZXQoZSkpLGV9KHRoaXMuZW5naW5lLGEpO2lmKHEzKHRoaXMsbXgsUU4pLmNhbGwodGhpcyxsKSwidXBkYXRlU2V0dGluZ3MiIT09aSlpZihsYyh0aGlzLFhOKSludWxs''@;'; put 'put ''IT09dGhpcy5zaGVldE5hbWUmJnRoaXMuc3dpdGNoU2hlZXQodGhpcy5zaGVldE5hbWUpO2Vsc2V7Y29uc3QgdT1xMyh0aGlzLHZ4LEpOKS5jYWxsKHRoaXMpO2lmKHRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvUmVwbGFjZVNoZWV0Q29udGVudCh0aGlzLnNoZWV0SWQsdSkpe0psKHRoaXMs''@;'; put 'put ''RTYsITApO2NvbnN0IGc9dGhpcy5lbmdpbmUuc2V0U2hlZXRDb250ZW50KHRoaXMuc2hlZXRJZCx1KTt0aGlzLmluZGV4U3luY2VyLnNldHVwU3luY0VuZHBvaW50KHRoaXMuZW5naW5lLHRoaXMuc2hlZXRJZCksdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZyksSmwodGhpcyxFNiwhMSl9''@;'; put 'put ''fX0pLEpsKHRoaXMsVjJlLCh0LHIsaSxvKT0+e2lmKCJnZXQiIT09b3x8bGModGhpcyxFNil8fG51bGw9PT10aGlzLnNoZWV0TmFtZXx8IXRoaXMuZW5naW5lPy5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSl8fG51bGw9PT10fHxudWxsPT09cilyZXR1cm47Y29uc3QgYT10aGlzLmdl''@;'; put 'put ''dENlbGxUeXBlKHQscik7aWYoIlZBTFVFIj09PWF8fCJFTVBUWSI9PT1hKXJldHVybiB2b2lkKGkudmFsdWU9ZnVuY3Rpb24geFl0KG4pe3JldHVybiJzdHJpbmciPT10eXBlb2YgbiYmZnVuY3Rpb24gVFl0KG4pe3JldHVybiJzdHJpbmciPT10eXBlb2YgbiYmIiciPT09bi5jaGFyQXQoMCkm''@;'; put 'put ''JiI9Ij09PW4uY2hhckF0KDEpfShuKT9uLnN1YnN0cigxKTpufShpLnZhbHVlKSk7Y29uc3QgbD17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHQpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChyKSxz''@;'; put 'put ''aGVldDp0aGlzLnNoZWV0SWR9O2xldCB1PXRoaXMuZW5naW5lLmdldENlbGxWYWx1ZShsKTtjb25zdCBnPXRoaXMuaG90LmdldENlbGxNZXRhKHQscix7c2tpcE1ldGFFeHRlbnNpb246ITB9KTsiZGF0ZSI9PT1nLnR5cGUmJncwKHUpP3U9RTJlKHUpOiJ0aW1lIj09PWcudHlwZSYmdzAodSkm''@;'; put 'put ''Jih1PVMyZSh1KSksaS52YWx1ZT1NVmUodSk/dS52YWx1ZTp1fSksSmwodGhpcyxCMmUsKHQscixpLG8pPT57aWYoImdldCIhPT1vfHxsYyh0aGlzLEU2KXx8bnVsbD09PXRoaXMuc2hlZXROYW1lfHwhdGhpcy5lbmdpbmU/LmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSlyZXR1cm47''@;'; put 'put ''Y29uc3QgYT10aGlzLmhvdC50b1Zpc3VhbFJvdyh0KSxsPXRoaXMuaG90LnByb3BUb0NvbChyKTtpZihudWxsPT09YXx8bnVsbD09PWwpcmV0dXJuO2NvbnN0IHU9dGhpcy5nZXRDZWxsVHlwZShhLGwpO2lmKCJWQUxVRSI9PT11fHwiRU1QVFkiPT09dSlyZXR1cm47Y29uc3QgZz10aGlzLmVu''@;'; put 'put ''Z2luZS5nZXRTaGVldERpbWVuc2lvbnModGhpcy5lbmdpbmUuZ2V0U2hlZXRJZCh0aGlzLnNoZWV0TmFtZSkpO2lmKDA9PT1nLndpZHRoJiYwPT09Zy5oZWlnaHQpcmV0dXJuO2NvbnN0IEU9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKSxjb2w6''@;'; put 'put ''dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksc2hlZXQ6dGhpcy5zaGVldElkfTtpLnZhbHVlPXRoaXMuZW5naW5lLmdldENlbGxTZXJpYWxpemVkKEUpfSksSmwodGhpcyxpJCwodCxyKT0+e2lmKHB4KHIpfHwhdD8ubGVuZ3RoKXJldHVybjtjb25z''@;'; put 'put ''dCBpPVtdLG89W10sYT10aGlzLmVuZ2luZS5iYXRjaCgoKT0+e3QuZm9yRWFjaCgoW2wsdSwsZ10pPT57aWYoInN0cmluZyIhPXR5cGVvZiB1JiYibnVtYmVyIiE9dHlwZW9mIHUpcmV0dXJuO2NvbnN0IEU9dGhpcy5ob3QucHJvcFRvQ29sKHUpLE89dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhs''@;'; put 'put ''KSxaPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oRSksZWU9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoRSksc2hlZXQ6dGhpcy5zaGVldElkfTtn''@;'; put 'put ''PXEzKHRoaXMsdCQsWDJlKS5jYWxsKHRoaXMsTyxaLGcpLG51bGwhPT1PJiZudWxsIT09Wj90aGlzLnN5bmNDaGFuZ2VXaXRoRW5naW5lKGwsRSxnKTppLnB1c2goW2wsRSxnXSksby5wdXNoKHthZGRyZXNzOmVlfSl9KX0pO2kubGVuZ3RoJiZ0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJD''@;'; put 'put ''aGFuZ2UiLCgpPT57Y29uc3QgbD10aGlzLmVuZ2luZS5iYXRjaCgoKT0+e2kuZm9yRWFjaCgoW3UsZyxFXSk9Pnt0aGlzLnN5bmNDaGFuZ2VXaXRoRW5naW5lKHUsZyxFKX0pfSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMobCwhMCl9KSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhh''@;'; put 'put ''KSx0aGlzLnZhbGlkYXRlRGVwZW5kZW50Q2VsbHMoYSxvKX0pLEpsKHRoaXMsajJlLCh0LHIpPT57aWYocHgocikpcmV0dXJuO2NvbnN0IGk9W10sbz1bXTt0LmZvckVhY2goKFthLGwsLHVdKT0+e2lmKCJzdHJpbmciIT10eXBlb2YgbCYmIm51bWJlciIhPXR5cGVvZiBsKXJldHVybjtjb25z''@;'; put 'put ''dCBnPXRoaXMuaG90LnByb3BUb0NvbChsKTtpZighdzAoZykpcmV0dXJuO2NvbnN0IEU9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZyksc2hlZXQ6''@;'; put 'put ''dGhpcy5zaGVldElkfTt0aGlzLmVuZ2luZT8uaXNJdFBvc3NpYmxlVG9TZXRDZWxsQ29udGVudHMoRSk/KHU9Z1ZlKHUpLG8ucHVzaCh7YWRkcmVzczpFfSksaS5wdXNoKC4uLnRoaXMuZW5naW5lLnNldENlbGxDb250ZW50cyhFLHUpKSk6SGEoYE5vdCBwb3NzaWJsZSB0byBzZXQgc291cmNl''@;'; put 'put ''IGNlbGwgZGF0YSBhdCAke0pTT04uc3RyaW5naWZ5KEUpfWApfSksdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoaSksdGhpcy52YWxpZGF0ZURlcGVuZGVudENlbGxzKGksbyl9KSxKbCh0aGlzLFUyZSwodCxyKT0+e2xldCBpPXRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZp''@;'; put 'put ''c3VhbEluZGV4KHQpO2lmKHQ+PXRoaXMuaG90LmNvdW50Um93cygpJiYoaT10KSxudWxsPT09dGhpcy5zaGVldElkfHwhdGhpcy5lbmdpbmU/LmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKXx8IXRoaXMuZW5naW5lPy5pc0l0UG9zc2libGVUb0FkZFJvd3ModGhpcy5zaGVldElkLFtp''@;'; put 'put ''LHJdKSlyZXR1cm4hMX0pLEpsKHRoaXMsejJlLCh0LHIpPT57bGV0IGk9dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgodCk7aWYodD49dGhpcy5ob3QuY291bnRDb2xzKCkmJihpPXQpLG51bGw9PT10aGlzLnNoZWV0SWR8fCF0aGlzLmVuZ2luZT8uZG9l''@;'; put 'put ''c1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpfHwhdGhpcy5lbmdpbmU/LmlzSXRQb3NzaWJsZVRvQWRkQ29sdW1ucyh0aGlzLnNoZWV0SWQsW2kscl0pKXJldHVybiExfSksSmwodGhpcyxXMmUsKHQscixpKT0+ITEhPT10aGlzLnJvd0F4aXNTeW5jZXIuc2V0UmVtb3ZlZEhmSW5kZXhlcyhp''@;'; put 'put ''KS5ldmVyeShsPT50aGlzLmVuZ2luZT8uaXNJdFBvc3NpYmxlVG9SZW1vdmVSb3dzKHRoaXMuc2hlZXRJZCxbbCwxXSkpJiZ2b2lkIDApLEpsKHRoaXMsWTJlLCh0LHIsaSk9PiExIT09dGhpcy5jb2x1bW5BeGlzU3luY2VyLnNldFJlbW92ZWRIZkluZGV4ZXMoaSkuZXZlcnkobD0+dGhpcy5l''@;'; put 'put ''bmdpbmU/LmlzSXRQb3NzaWJsZVRvUmVtb3ZlQ29sdW1ucyh0aGlzLnNoZWV0SWQsW2wsMV0pKSYmdm9pZCAwKSxKbCh0aGlzLFoyZSwodCxyLGkpPT57aWYocHgoaSkpcmV0dXJuO2NvbnN0IG89dGhpcy5lbmdpbmUuYWRkUm93cyh0aGlzLnNoZWV0SWQsW3RoaXMucm93QXhpc1N5bmNlci5n''@;'; put 'put ''ZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHQpLHJdKTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhvKX0pLEpsKHRoaXMsRzJlLCh0LHIsaSk9PntpZihweChpKSlyZXR1cm47Y29uc3Qgbz10aGlzLmVuZ2luZS5hZGRDb2x1bW5zKHRoaXMuc2hlZXRJZCxbdGhpcy5jb2x1bW5BeGlzU3lu''@;'; put 'put ''Y2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgodCkscl0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKG8pfSksSmwodGhpcywkMmUsKHQscixpLG8pPT57aWYocHgobykpcmV0dXJuO2NvbnN0IGE9dGhpcy5yb3dBeGlzU3luY2VyLmdldFJlbW92ZWRIZkluZGV4ZXMoKS5zb3J0KCh1''@;'; put 'put ''LGcpPT5nLXUpLGw9dGhpcy5lbmdpbmUuYmF0Y2goKCk9PnthLmZvckVhY2godT0+e3RoaXMuZW5naW5lLnJlbW92ZVJvd3ModGhpcy5zaGVldElkLFt1LDFdKX0pfSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMobCl9KSxKbCh0aGlzLHEyZSwodCxyLGksbyk9PntpZihweChvKSlyZXR1''@;'; put 'put ''cm47Y29uc3QgYT10aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0UmVtb3ZlZEhmSW5kZXhlcygpLnNvcnQoKHUsZyk9PmctdSksbD10aGlzLmVuZ2luZS5iYXRjaCgoKT0+e2EuZm9yRWFjaCh1PT57dGhpcy5lbmdpbmUucmVtb3ZlQ29sdW1ucyh0aGlzLnNoZWV0SWQsW3UsMV0pfSl9KTt0aGlz''@;'; put 'put ''LnJlbmRlckRlcGVuZGVudFNoZWV0cyhsKX0pLEpsKHRoaXMsSzJlLCh0LHIsaSk9PntKbCh0aGlzLEU2LCEwKTtjb25zdCBvPXIuX19jaGlsZHJlbixhPUFycmF5LmlzQXJyYXkobyk/by5sZW5ndGg6MCxsPXEzKHRoaXMsdngsSk4pLmNhbGwodGhpcyxpLDAsaSthLHRoaXMuaG90LmNvdW50''@;'; put 'put ''U291cmNlQ29scygpKTtKbCh0aGlzLEU2LCExKSxsLmZvckVhY2goKHUsZyk9Pnt1LmZvckVhY2goKEUsTyk9Pnt0aGlzLmVuZ2luZT8uc2V0Q2VsbENvbnRlbnRzKHtjb2w6Tyxyb3c6aStnLHNoZWV0OnRoaXMuc2hlZXRJZH0sW1tFXV0pfSl9KX0pfX1mdW5jdGlvbiBaWXQobil7aWYoIW4u''@;'; put 'put ''YWRkcmVzc3x8bi5hZGRyZXNzLnNoZWV0IT09dGhpcy5zaGVldElkfHwibnVtYmVyIiE9dHlwZW9mIG4ubmV3VmFsdWUpcmV0dXJuIG47Y29uc3QgZT10aGlzLnJvd0F4aXNTeW5jZXIuZ2V0VmlzdWFsSW5kZXhGcm9tSGZJbmRleChuLmFkZHJlc3Mucm93KSx0PXRoaXMuY29sdW1uQXhpc1N5''@;'; put 'put ''bmNlci5nZXRWaXN1YWxJbmRleEZyb21IZkluZGV4KG4uYWRkcmVzcy5jb2wpO2lmKGU8MHx8dDwwKXJldHVybiBuO2NvbnN0IHI9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZSx0LHtza2lwTWV0YUV4dGVuc2lvbjohMH0pO2xldCBpO2lmKCJkYXRlIj09PXIudHlwZSlpPUUyZShuLm5ld1ZhbHVl''@;'; put 'put ''KTtlbHNle2lmKCJ0aW1lIiE9PXIudHlwZSlyZXR1cm4gbjtpPVMyZShuLm5ld1ZhbHVlKX1jb25zdCBvPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YobikpLG4pO3JldHVybiBvLm5ld1ZhbHVlPWksb31mdW5jdGlvbiBRTihuKXt0aGlzLnNoZWV0''@;'; put 'put ''TmFtZT1uLHRoaXMuc2hlZXRJZD10aGlzLmVuZ2luZT8uZ2V0U2hlZXRJZCh0aGlzLnNoZWV0TmFtZSk/P251bGx9ZnVuY3Rpb24gWDJlKG4sZSx0KXtpZihDYSh0KSYmbnVsbCE9PXQpe2NvbnN0IHI9dGhpcy5ob3QudG9WaXN1YWxSb3cobiksaT10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihl''@;'; put 'put ''KTt0aGlzLmhvdC5nZXRDZWxsTWV0YShyLGkpLG51bGwhPSh0PUtZKHQsdGhpcy5ob3QuZ2V0Q2VsbE1ldGEocixpKSkpJiYodD1PYmplY3QodCkudG9TdHJpbmcoKSl9cmV0dXJuIGdWZSh0KX1mdW5jdGlvbiBKTihuLGUsdCxyKXtjb25zdCBpPXRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJh''@;'; put 'put ''eShuLGUsdCxyKSxvPXRoaXMuaG90LmNvdW50Q29scygpLGE9dGhpcy5ob3QuY291bnRTb3VyY2VDb2xzKCk7aWYoIShvPGEmJlVsZSh0aGlzLmhvdC5nZXRTb3VyY2VEYXRhKCkpKSlyZXR1cm4gaS5tYXAoKGcsRSk9PihBcnJheS5pc0FycmF5KGcpP2c6W10pLm1hcCgoWixlZSk9PnEzKHRo''@;'; put 'put ''aXMsdCQsWDJlKS5jYWxsKHRoaXMsRSxlZSxaKSkpO2NvbnN0IHU9ZT8/MDtyZXR1cm4gaS5tYXAoKGcsRSk9Pntjb25zdCBPPVtdO2ZvcihsZXQgWj0wO1o8bztaKyspe2NvbnN0IGVlPXRoaXMuaG90LmNvbFRvUHJvcChaKTtpZigibnVtYmVyIiE9dHlwZW9mIGVlKWNvbnRpbnVlO2NvbnN0''@;'; put 'put ''IHZlPWVlLXU7dmU8MHx8dmU+PWcubGVuZ3RofHxPLnB1c2gocTModGhpcyx0JCxYMmUpLmNhbGwodGhpcyxFLFosZ1t2ZV0pKX1yZXR1cm4gT30pfWZ1bmN0aW9uIHhWZShuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHBy''@;'; put 'put ''aXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gQVZlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9u''@;'; put 'put ''IG1tKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIHFZdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sQVZlKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIF94KG4sZSx0KXt4VmUobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIEFfKG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gS1l0''@;'; put 'put ''KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixBVmUobixlLCJzZXQiKSx0KSx0fUdvLmdldFNpbmdsZXRv''@;'; put 'put ''bigpLnJlZ2lzdGVyKCJiZWZvcmVIaWRlQ29sdW1ucyIpLEdvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckhpZGVDb2x1bW5zIiksR28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVVuaGlkZUNvbHVtbnMiKSxHby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJV''@;'; put 'put ''bmhpZGVDb2x1bW5zIik7Y29uc3Qga1ZlPSJoaWRkZW5Db2x1bW5zIixlRj1TeW1ib2woInNraXBDb2x1bW5PblBhc3RlQnlIaWRkZW5Db2x1bW5zIik7dmFyIFA0PW5ldyBXZWFrTWFwLFEyZT1uZXcgV2Vha01hcCxKMmU9bmV3IFdlYWtNYXAsZWZlPW5ldyBXZWFrTWFwLHRmZT1uZXcgV2Vh''@;'; put 'put ''a01hcCxuZmU9bmV3IFdlYWtNYXAsUlZlPW5ldyBXZWFrU2V0O2NsYXNzIGVadCBleHRlbmRzIGFse3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBrVmV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzEwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3Jl''@;'; put 'put ''dHVybntjb3B5UGFzdGVFbmFibGVkOiEwLGluZGljYXRvcnM6ITEsY29sdW1uczpbXX19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2tWZV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwoQV8odGhpcyxQNCxuZXcgVkwpLG1tKHRoaXMsUDQpLmFkZExv''@;'; put 'put ''Y2FsSG9vaygiaW5pdCIsKCk9PmZ1bmN0aW9uIFhZdChuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH0odGhpcyxSVmUsdFp0KS5jYWxsKHRoaXMpKSx0aGlzLmhv''@;'; put 'put ''dC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWU/PyIiLG1tKHRoaXMsUDQpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsbW0odGhpcyxuZmUpKSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLG1tKHRoaXMs''@;'; put 'put ''SjJlKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsbW0odGhpcyxRMmUpLDIpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLG1tKHRoaXMsdGZlKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb3B5YWJsZVJhbmdlIixtbSh0aGlzLGVmZSkpLHN1cGVyLmVuYWJsZVBsdWdp''@;'; put 'put ''bigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlz''@;'; put 'put ''LnBsdWdpbk5hbWU/PyIiKSx0aGlzLnJlc2V0Q2VsbHNNZXRhKCl9c2hvd0NvbHVtbnMoZSl7Y29uc3QgdD10aGlzLmdldEhpZGRlbkNvbHVtbnMoKSxyPXRoaXMuaXNWYWxpZENvbmZpZyhlKTtsZXQgaT10O2NvbnN0IG89bW0odGhpcyxQNCkuZ2V0VmFsdWVzKCkuc2xpY2UoKSxhPWUubGVu''@;'; put 'put ''Z3RoPjA7ciYmYSYmKFhuKGUubWFwKGc9PnRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oZykpLGc9PntvW2ddPSExfSksaT1tMShvLChnLEUsTyk9PihFJiZnLnB1c2godGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oTykpLGcpLFtdKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5o''@;'; put 'put ''aWRlQ29sdW1ucyIsdCxpLHImJmEpJiYociYmYSYmbW0odGhpcyxQNCkuc2V0VmFsdWVzKG8pLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5oaWRlQ29sdW1ucyIsdCxpLHImJmEsciYmaS5sZW5ndGg8dC5sZW5ndGgpKX1zaG93''@;'; put 'put ''Q29sdW1uKC4uLmUpe3RoaXMuc2hvd0NvbHVtbnMoZSl9aGlkZUNvbHVtbnMoZSl7Y29uc3QgdD10aGlzLmdldEhpZGRlbkNvbHVtbnMoKSxyPXRoaXMuaXNWYWxpZENvbmZpZyhlKTtsZXQgaT10O3ImJihpPUFycmF5LmZyb20obmV3IFNldCh0LmNvbmNhdChlKSkpKSwhMSE9PXRoaXMuaG90''@;'; put 'put ''LnJ1bkhvb2tzKCJiZWZvcmVIaWRlQ29sdW1ucyIsdCxpLHIpJiYociYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntYbihlLGE9PnttbSh0aGlzLFA0KS5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhKSwhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhvb2tz''@;'; put 'put ''KCJhZnRlckhpZGVDb2x1bW5zIix0LGkscixyJiZpLmxlbmd0aD50Lmxlbmd0aCkpfWhpZGVDb2x1bW4oLi4uZSl7dGhpcy5oaWRlQ29sdW1ucyhlKX1nZXRIaWRkZW5Db2x1bW5zKCl7cmV0dXJuIF9jKG1tKHRoaXMsUDQpLmdldEhpZGRlbkluZGV4ZXMoKSxlPT50aGlzLmhvdC50b1Zpc3Vh''@;'; put 'put ''bENvbHVtbihlKSl9aXNIaWRkZW4oZSl7cmV0dXJuIG1tKHRoaXMsUDQpLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGUpKXx8ITF9aXNWYWxpZENvbmZpZyhlKXtjb25zdCB0PXRoaXMuaG90LmNvdW50Q29scygpO3JldHVybiEhKEFycmF5LmlzQXJyYXkoZSkm''@;'; put 'put ''JmUubGVuZ3RoPjApJiZlLmV2ZXJ5KHI9Pk51bWJlci5pc0ludGVnZXIocikmJnI+PTAmJnI8dCl9cmVzZXRDZWxsc01ldGEoKXtYbih0aGlzLmhvdC5nZXRDZWxsc01ldGEoKSxlPT57Y29uc3QgdD1lO3RbZUZdJiYoZGVsZXRlIHQuc2tpcENvbHVtbk9uUGFzdGUsZGVsZXRlIHRbZUZdKX0p''@;'; put 'put ''fWRlc3Ryb3koKXtBXyh0aGlzLFA0LG51bGwpLHN1cGVyLmRlc3Ryb3koKX1jb25zdHJ1Y3RvciguLi5lKXtzdXBlciguLi5lKSxmdW5jdGlvbiBRWXQobixlKXt4VmUobixlKSxlLmFkZChuKX0odGhpcyxSVmUpLF94KHRoaXMsUDQse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLF94KHRo''@;'; put 'put ''aXMsUTJlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxfeCh0aGlzLEoyZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksX3godGhpcyxlZmUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLF94KHRoaXMsdGZlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxfeCh0aGlzLG5m''@;'; put 'put ''ZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksQV8odGhpcyxQNCxudWxsKSxBXyh0aGlzLFEyZSwodCxyKT0+dGhpcy5pc0hpZGRlbihyKT8wOnRoaXMuZ2V0U2V0dGluZygiaW5kaWNhdG9ycyIpJiYodGhpcy5pc0hpZGRlbihyKzEpfHx0aGlzLmlzSGlkZGVuKHItMSkpJiYibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIHQmJnRoaXMuaG90Lmhhc0NvbEhlYWRlcnMoKT90KzE1OnZvaWQgMCksQV8odGhpcyxKMmUsKHQscixpKT0+e2lmKCExPT09dGhpcy5nZXRTZXR0aW5nKCJjb3B5UGFzdGVFbmFibGVkIikpe2NvbnN0IG89aTt0aGlzLmlzSGlkZGVuKHIpPyEwIT09aS5za2lwQ29sdW1uT25Q''@;'; put 'put ''YXN0ZSYmKGkuc2tpcENvbHVtbk9uUGFzdGU9ITAsb1tlRl09ITApOm9bZUZdJiYoZGVsZXRlIGkuc2tpcENvbHVtbk9uUGFzdGUsZGVsZXRlIG9bZUZdKX1pZih0aGlzLmlzSGlkZGVuKHItMSkpaS5jbGFzc05hbWU9aS5jbGFzc05hbWV8fCIiLC0xPT09aS5jbGFzc05hbWUuaW5kZXhPZigi''@;'; put 'put ''YWZ0ZXJIaWRkZW5Db2x1bW4iKSYmKGkuY2xhc3NOYW1lKz0iIGFmdGVySGlkZGVuQ29sdW1uIik7ZWxzZSBpZihpLmNsYXNzTmFtZSl7Y29uc3Qgbz1pLmNsYXNzTmFtZS5zcGxpdCgiICIpO2lmKG8ubGVuZ3RoPjApe2NvbnN0IGE9by5pbmRleE9mKCJhZnRlckhpZGRlbkNvbHVtbiIpO2E+''@;'; put 'put ''LTEmJm8uc3BsaWNlKGEsMSksaS5jbGFzc05hbWU9by5qb2luKCIgIil9fX0pLEFfKHRoaXMsZWZlLHQ9PntpZih0aGlzLmdldFNldHRpbmcoImNvcHlQYXN0ZUVuYWJsZWQiKSlyZXR1cm4gdDtjb25zdCByPVtdLGk9KG8sYSxsLHUpPT57ci5wdXNoKHtzdGFydFJvdzpvLGVuZFJvdzphLHN0''@;'; put 'put ''YXJ0Q29sOmwsZW5kQ29sOnV9KX07cmV0dXJuIFhuKHQsbz0+e2NvbnN0IGE9bztsZXQgbD0hMCx1PTA7VmEoYS5zdGFydENvbCxhLmVuZENvbCxnPT57dGhpcy5pc0hpZGRlbihnKT8obHx8aShhLnN0YXJ0Um93LGEuZW5kUm93LHUsZy0xKSxsPSEwKToobCYmKHU9ZyksZz09PWEuZW5kQ29s''@;'; put 'put ''JiZpKGEuc3RhcnRSb3csYS5lbmRSb3csdSxnKSxsPSExKX0pfSkscn0pLEFfKHRoaXMsdGZlLCh0LHIpPT57aWYoIXRoaXMuZ2V0U2V0dGluZygiaW5kaWNhdG9ycyIpfHx0PDApcmV0dXJuO2NvbnN0IGk9W107dD49MSYmdGhpcy5pc0hpZGRlbih0LTEpJiZpLnB1c2goImFmdGVySGlkZGVu''@;'; put 'put ''Q29sdW1uIiksdDx0aGlzLmhvdC5jb3VudENvbHMoKS0xJiZ0aGlzLmlzSGlkZGVuKHQrMSkmJmkucHVzaCgiYmVmb3JlSGlkZGVuQ29sdW1uIiksWXIocixpKX0pLEFfKHRoaXMsbmZlLHQ9Pnt0Lml0ZW1zLnB1c2goe25hbWU6dnN9LGZ1bmN0aW9uIEdZdChuKXtyZXR1cm57a2V5OiJoaWRk''@;'; put 'put ''ZW5fY29sdW1uc19oaWRlIixuYW1lKCl7Y29uc3QgZT10aGlzLmdldFNlbGVjdGVkQWN0aXZlKCk7bGV0IHQ9MDtpZihBcnJheS5pc0FycmF5KGUpKXtjb25zdFssciwsaV09ZTtyLWkhPT0wJiYodD0xKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGpjZSx0KX0sY2FsbGJhY2so''@;'; put 'put ''KXtjb25zdCBlPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFlKXJldHVybjtjb25zdHtmcm9tOnQsdG86cn09ZTtpZihudWxsPT09dC5jb2x8fG51bGw9PT1yLmNvbClyZXR1cm47Y29uc3QgaT1NYXRoLm1heChNYXRoLm1pbih0LmNvbCxyLmNvbCksMCksbz1NYXRoLm1heCh0''@;'; put 'put ''LmNvbCxyLmNvbCksYT1bXTtmb3IobGV0IGc9aTtnPD1vO2crPTEpYS5wdXNoKGcpO24uaGlkZUNvbHVtbnMoYSk7Y29uc3QgdT10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhW2EubGVuZ3RoLTFdLDEsITApO251bGwhPT11JiZOdW1iZXIuaXNJbnRl''@;'; put 'put ''Z2VyKHUpJiZ1Pj0wP3RoaXMuc2VsZWN0Q29sdW1ucyh1KTp0aGlzLmRlc2VsZWN0Q2VsbCgpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtyZXR1cm4hKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhl''@;'; put 'put ''YWRlcigpfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9fX0odGhpcyksZnVuY3Rpb24gJFl0KG4pe2NvbnN0IGU9W107cmV0dXJue2tleToiaGlkZGVuX2NvbHVtbnNfc2hvdyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoVWNlLGUubGVuZ3Ro''@;'; put 'put ''PjE/MTowKX0sY2FsbGJhY2soKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuO2xldCB0PWVbMF0scj1lW2UubGVuZ3RoLTFdO3Q9dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodC0xLC0xKT8/MCxyPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVz''@;'; put 'put ''dE5vdEhpZGRlbkluZGV4KHIrMSwxKT8/dGhpcy5jb3VudENvbHMoKS0xLG4uc2hvd0NvbHVtbnMoZSksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMucmVuZGVyKCksci10KzE9PT10aGlzLmNvdW50Q29scygpfHx0aGlzLnNlbGVjdENvbHVtbnModCxyKX0sZGlzYWJsZWQ6''@;'; put 'put ''ITEsaGlkZGVuKCl7Y29uc3QgdD1fYyhuLmdldEhpZGRlbkNvbHVtbnMoKSxPPT50aGlzLnRvUGh5c2ljYWxDb2x1bW4oTykpO2lmKCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHx0Lmxlbmd0''@;'; put 'put ''aDwxKXJldHVybiEwO2UubGVuZ3RoPTA7Y29uc3Qgcj10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighcilyZXR1cm4hMDtjb25zdCBpPXIuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsbz1yLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCxhPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIs''@;'; put 'put ''bD1udWxsIT09aT9hLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaSk6bnVsbCx1PW51bGwhPT1vP2EuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChvKTpudWxsLGc9YS5nZXROb3RUcmltbWVkSW5kZXhlcygpLEU9W107aWYoaSE9PW8pe2lmKG51bGw9PT1pfHxudWxsPT09byly''@;'; put 'put ''ZXR1cm4hMDtpZihvLWkrMT4odT8/MCktKGw/PzApKzEpe2NvbnN0IGVlPWcuc2xpY2UoaSxvKzEpO0UucHVzaCguLi5lZS5maWx0ZXIodmU9PnQuaW5jbHVkZXModmUpKSl9fWVsc2UgaWYoMD09PWwmJm51bGwhPT1pJiZsPGkpRS5wdXNoKC4uLmcuc2xpY2UoMCxpKSk7ZWxzZSBpZihudWxs''@;'; put 'put ''PT09bClFLnB1c2goLi4uZy5zbGljZSgwLHRoaXMuY291bnRDb2xzKCkpKTtlbHNle2NvbnN0IE89dGhpcy5jb3VudENvbHMoKS0xLFo9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTywtMSksZWU9bnVsbCE9PVo/YS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFopOm51bGw7bnVs''@;'; put 'put ''bCE9PXUmJm51bGwhPT1vJiZ1PT09ZWUmJk8+byYmRS5wdXNoKC4uLmcuc2xpY2UobysxKSl9cmV0dXJuIFhuKEUsTz0+e2UucHVzaCh0aGlzLnRvVmlzdWFsQ29sdW1uKE8pKX0pLDA9PT1lLmxlbmd0aH19fSh0aGlzKSl9KX19ZnVuY3Rpb24gdFp0KCl7Y29uc3Qgbj10aGlzLmdldFNldHRp''@;'; put 'put ''bmcoImNvbHVtbnMiKTtBcnJheS5pc0FycmF5KG4pJiZ0aGlzLmhpZGVDb2x1bW5zKG4pfWZ1bmN0aW9uIElWZShuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0''@;'; put 'put ''Iil9ZnVuY3Rpb24gRFZlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIHZtKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIGladChuLGUp''@;'; put 'put ''e3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sRFZlKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIHl4KG4sZSx0KXtJVmUobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIGtfKG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gb1p0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7''@;'; put 'put ''ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixEVmUobixlLCJzZXQiKSx0KSx0fUdvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVIaWRlUm93cyIpLEdv''@;'; put 'put ''LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckhpZGVSb3dzIiksR28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVVuaGlkZVJvd3MiKSxHby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJVbmhpZGVSb3dzIik7Y29uc3QgTFZlPSJoaWRkZW5Sb3dzIix0Rj1TeW1i''@;'; put 'put ''b2woInNraXBSb3dPblBhc3RlQnlIaWRkZW5Sb3dzIik7dmFyIEg0PW5ldyBXZWFrTWFwLHJmZT1uZXcgV2Vha01hcCxpZmU9bmV3IFdlYWtNYXAsb2ZlPW5ldyBXZWFrTWFwLGFmZT1uZXcgV2Vha01hcCxzZmU9bmV3IFdlYWtNYXAsT1ZlPW5ldyBXZWFrU2V0O2NsYXNzIGNadCBleHRlbmRz''@;'; put 'put ''IGFse3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBMVmV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzIwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntjb3B5UGFzdGVFbmFibGVkOiEwLGluZGljYXRvcnM6ITEscm93czpbXX19aXNFbmFi''@;'; put 'put ''bGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0xWZV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwoa18odGhpcyxINCxuZXcgVkwpLHZtKHRoaXMsSDQpLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9PmZ1bmN0aW9uIGFadChuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH0odGhpcyxPVmUsdVp0KS5jYWxsKHRoaXMpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsdm0odGhpcyxINCkp''@;'; put 'put ''LHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIix2bSh0aGlzLHNmZSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsdm0odGhpcyxpZmUpKSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlaWdodCIsdm0odGhpcyxyZmUpKSx0aGlzLmFkZEhvb2so''@;'; put 'put ''ImFmdGVyR2V0Um93SGVhZGVyIix2bSh0aGlzLGFmZSkpLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29weWFibGVSYW5nZSIsdm0odGhpcyxvZmUpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBl''@;'; put 'put ''ci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSx0aGlzLnJlc2V0Q2VsbHNNZXRhKCl9c2hvd1Jvd3MoZSl7Y29uc3QgdD10aGlzLmdldEhpZGRl''@;'; put 'put ''blJvd3MoKSxyPXRoaXMuaXNWYWxpZENvbmZpZyhlKTtsZXQgaT10O2NvbnN0IG89dm0odGhpcyxINCkuZ2V0VmFsdWVzKCkuc2xpY2UoKSxhPWUubGVuZ3RoPjA7ciYmYSYmKFhuKGUubWFwKGc9PnRoaXMuaG90LnRvUGh5c2ljYWxSb3coZykpLGc9PntvW2ddPSExfSksaT1tMShvLChnLEUs''@;'; put 'put ''Tyk9PihFJiZnLnB1c2godGhpcy5ob3QudG9WaXN1YWxSb3coTykpLGcpLFtdKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5oaWRlUm93cyIsdCxpLHImJmEpJiYociYmYSYmdm0odGhpcyxINCkuc2V0VmFsdWVzKG8pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuaGlkZVJv''@;'; put 'put ''d3MiLHQsaSxyJiZhLHImJmkubGVuZ3RoPHQubGVuZ3RoKSl9c2hvd1JvdyguLi5lKXt0aGlzLnNob3dSb3dzKGUpfWhpZGVSb3dzKGUpe2NvbnN0IHQ9dGhpcy5nZXRIaWRkZW5Sb3dzKCkscj10aGlzLmlzVmFsaWRDb25maWcoZSk7bGV0IGk9dDtyJiYoaT1BcnJheS5mcm9tKG5ldyBTZXQo''@;'; put 'put ''dC5jb25jYXQoZSkpKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlSGlkZVJvd3MiLHQsaSxyKSYmKHImJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57WG4oZSxhPT57dm0odGhpcyxINCkuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3coYSksITApfSl9''@;'; put 'put ''LCEwKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJIaWRlUm93cyIsdCxpLHIsciYmaS5sZW5ndGg+dC5sZW5ndGgpKX1oaWRlUm93KC4uLmUpe3RoaXMuaGlkZVJvd3MoZSl9Z2V0SGlkZGVuUm93cygpe3JldHVybiBfYyh2bSh0aGlzLEg0KS5nZXRIaWRkZW5JbmRleGVzKCksZT0+dGhpcy5o''@;'; put 'put ''b3QudG9WaXN1YWxSb3coZSkpfWlzSGlkZGVuKGUpe3JldHVybiB2bSh0aGlzLEg0KS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhlKSl8fCExfWlzVmFsaWRDb25maWcoZSl7Y29uc3QgdD10aGlzLmhvdC5jb3VudFJvd3MoKTtyZXR1cm4hIShBcnJheS5pc0FycmF5''@;'; put 'put ''KGUpJiZlLmxlbmd0aD4wKSYmZS5ldmVyeShyPT5OdW1iZXIuaXNJbnRlZ2VyKHIpJiZyPj0wJiZyPHQpfXJlc2V0Q2VsbHNNZXRhKCl7WG4odGhpcy5ob3QuZ2V0Q2VsbHNNZXRhKCksZT0+e2NvbnN0IHQ9ZTt0W3RGXSYmKGRlbGV0ZSB0LnNraXBSb3dPblBhc3RlLGRlbGV0ZSB0W3RGXSl9''@;'; put 'put ''KX1kZXN0cm95KCl7a18odGhpcyxINCxudWxsKSxzdXBlci5kZXN0cm95KCl9Y29uc3RydWN0b3IoLi4uZSl7c3VwZXIoLi4uZSksZnVuY3Rpb24gc1p0KG4sZSl7SVZlKG4sZSksZS5hZGQobil9KHRoaXMsT1ZlKSx5eCh0aGlzLEg0LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx5eCh0''@;'; put 'put ''aGlzLHJmZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSkseXgodGhpcyxpZmUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHl4KHRoaXMsb2ZlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx5eCh0aGlzLGFmZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSkseXgodGhpcyxz''@;'; put 'put ''ZmUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGtfKHRoaXMsSDQsbnVsbCksa18odGhpcyxyZmUsKHQscik9PnRoaXMuaXNIaWRkZW4ocik/MDp0KSxrXyh0aGlzLGlmZSwodCxyLGkpPT57aWYoITE9PT10aGlzLmdldFNldHRpbmcoImNvcHlQYXN0ZUVuYWJsZWQiKSl7Y29uc3Qgbz1p''@;'; put 'put ''O3RoaXMuaXNIaWRkZW4odCk/ITAhPT1pLnNraXBSb3dPblBhc3RlJiYoaS5za2lwUm93T25QYXN0ZT0hMCxvW3RGXT0hMCk6b1t0Rl0mJihkZWxldGUgaS5za2lwUm93T25QYXN0ZSxkZWxldGUgb1t0Rl0pfWlmKHRoaXMuaXNIaWRkZW4odC0xKSlpLmNsYXNzTmFtZT1pLmNsYXNzTmFtZXx8''@;'; put 'put ''IiIsLTE9PT1pLmNsYXNzTmFtZS5pbmRleE9mKCJhZnRlckhpZGRlblJvdyIpJiYoaS5jbGFzc05hbWUrPSIgYWZ0ZXJIaWRkZW5Sb3ciKTtlbHNlIGlmKGkuY2xhc3NOYW1lKXtjb25zdCBvPWkuY2xhc3NOYW1lLnNwbGl0KCIgIik7aWYoby5sZW5ndGg+MCl7Y29uc3QgYT1vLmluZGV4T2Yo''@;'; put 'put ''ImFmdGVySGlkZGVuUm93Iik7YT4tMSYmby5zcGxpY2UoYSwxKSxpLmNsYXNzTmFtZT1vLmpvaW4oIiAiKX19fSksa18odGhpcyxvZmUsdD0+e2lmKHRoaXMuZ2V0U2V0dGluZygiY29weVBhc3RlRW5hYmxlZCIpKXJldHVybiB0O2NvbnN0IHI9W10saT0obyxhLGwsdSk9PntyLnB1c2goe3N0''@;'; put 'put ''YXJ0Um93Om8sZW5kUm93OmEsc3RhcnRDb2w6bCxlbmRDb2w6dX0pfTtyZXR1cm4gWG4odCxvPT57Y29uc3QgYT1vO2xldCBsPSEwLHU9MDtWYShhLnN0YXJ0Um93LGEuZW5kUm93LGc9Pnt0aGlzLmlzSGlkZGVuKGcpPyhsfHxpKHUsZy0xLGEuc3RhcnRDb2wsYS5lbmRDb2wpLGw9ITApOihs''@;'; put 'put ''JiYodT1nKSxnPT09YS5lbmRSb3cmJmkodSxnLGEuc3RhcnRDb2wsYS5lbmRDb2wpLGw9ITEpfSl9KSxyfSksa18odGhpcyxhZmUsKHQscik9PntpZighdGhpcy5nZXRTZXR0aW5nKCJpbmRpY2F0b3JzIil8fHQ8MClyZXR1cm47Y29uc3QgaT1bXTt0Pj0xJiZ0aGlzLmlzSGlkZGVuKHQtMSkm''@;'; put 'put ''JmkucHVzaCgiYWZ0ZXJIaWRkZW5Sb3ciKSx0PHRoaXMuaG90LmNvdW50Um93cygpLTEmJnRoaXMuaXNIaWRkZW4odCsxKSYmaS5wdXNoKCJiZWZvcmVIaWRkZW5Sb3ciKSxZcihyLGkpfSksa18odGhpcyxzZmUsdD0+e3QuaXRlbXMucHVzaCh7bmFtZTp2c30sZnVuY3Rpb24gblp0KG4pe3Jl''@;'; put 'put ''dHVybntrZXk6ImhpZGRlbl9yb3dzX2hpZGUiLG5hbWUoKXtjb25zdCBlPXRoaXMuZ2V0U2VsZWN0ZWRBY3RpdmUoKTtsZXQgdD0wO2lmKEFycmF5LmlzQXJyYXkoZSkpe2NvbnN0W3IsLGldPWU7ci1pIT09MCYmKHQ9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh6Y2UsdCl9''@;'; put 'put ''LGNhbGxiYWNrKCl7Y29uc3QgZT10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighZSlyZXR1cm47Y29uc3R7ZnJvbTp0LHRvOnJ9PWU7aWYobnVsbD09PXQucm93fHxudWxsPT09ci5yb3cpcmV0dXJuO2NvbnN0IGk9TWF0aC5tYXgoTWF0aC5taW4odC5yb3csci5yb3cpLDApLG89''@;'; put 'put ''TWF0aC5tYXgodC5yb3csci5yb3cpLGE9W107Zm9yKGxldCBnPWk7Zzw9bztnKz0xKWEucHVzaChnKTtuLmhpZGVSb3dzKGEpO2NvbnN0IHU9dGhpcy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYVthLmxlbmd0aC0xXSwxLCEwKTtudWxsIT09dSYmTnVtYmVyLmlz''@;'; put 'put ''SW50ZWdlcih1KSYmdT49MD90aGlzLnNlbGVjdFJvd3ModSk6dGhpcy5kZXNlbGVjdENlbGwoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITEsaGlkZGVuKCl7cmV0dXJuISh0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFk''@;'; put 'put ''ZXIoKXx8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpfX19KHRoaXMpLGZ1bmN0aW9uIHJadChuKXtjb25zdCBlPVtdO3JldHVybntrZXk6ImhpZGRlbl9yb3dzX3Nob3ciLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFdjZSxlLmxlbmd0aD4xPzE6''@;'; put 'put ''MCl9LGNhbGxiYWNrKCl7aWYoMD09PWUubGVuZ3RoKXJldHVybjtsZXQgdD1lWzBdLHI9ZVtlLmxlbmd0aC0xXTt0PXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHQtMSwtMSk/PzAscj10aGlzLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5J''@;'; put 'put ''bmRleChyKzEsMSk/P3RoaXMuY291bnRSb3dzKCktMSxuLnNob3dSb3dzKGUpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLnJlbmRlcigpLHItdCsxPT09dGhpcy5jb3VudFJvd3MoKXx8dGhpcy5zZWxlY3RSb3dzKHQscil9LGRpc2FibGVkOiExLGhpZGRlbigpe2NvbnN0''@;'; put 'put ''IHQ9X2Mobi5nZXRIaWRkZW5Sb3dzKCksTz0+dGhpcy50b1BoeXNpY2FsUm93KE8pKTtpZighdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8dC5sZW5ndGg8MSlyZXR1cm4hMDtlLmxlbmd0aD0wO2Nv''@;'; put 'put ''bnN0IHI9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIXIpcmV0dXJuITA7Y29uc3QgaT1yLmdldFRvcFN0YXJ0Q29ybmVyKCkucm93LG89ci5nZXRCb3R0b21FbmRDb3JuZXIoKS5yb3csYT10aGlzLnJvd0luZGV4TWFwcGVyLGw9bnVsbCE9PWk/YS5nZXRSZW5kZXJhYmxlRnJv''@;'; put 'put ''bVZpc3VhbEluZGV4KGkpOm51bGwsdT1udWxsIT09bz9hLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgobyk6bnVsbCxnPWEuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKSxFPVtdO2lmKGkhPT1vKXtpZihudWxsPT09aXx8bnVsbD09PW8pcmV0dXJuITA7aWYoby1pKzE+KHU/PzApLShsPz8w''@;'; put 'put ''KSsxKXtjb25zdCBlZT1nLnNsaWNlKGksbysxKTtFLnB1c2goLi4uZWUuZmlsdGVyKHZlPT50LmluY2x1ZGVzKHZlKSkpfX1lbHNlIGlmKDA9PT1sJiZudWxsIT09aSYmbDxpKUUucHVzaCguLi5nLnNsaWNlKDAsaSkpO2Vsc2UgaWYobnVsbD09PWwpRS5wdXNoKC4uLmcuc2xpY2UoMCx0aGlz''@;'; put 'put ''LmNvdW50Um93cygpKSk7ZWxzZXtjb25zdCBPPXRoaXMuY291bnRSb3dzKCktMSxaPWEuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChhLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChPLC0xKT8/Tyk7aWYobnVsbD09PXUpcmV0dXJuITA7bnVsbCE9PW8mJnU9PT1aJiZPPm8mJkUucHVz''@;'; put 'put ''aCguLi5nLnNsaWNlKG8rMSkpfXJldHVybiBYbihFLE89PntlLnB1c2godGhpcy50b1Zpc3VhbFJvdyhPKSl9KSwwPT09ZS5sZW5ndGh9fX0odGhpcykpfSl9fWZ1bmN0aW9uIHVadCgpe2NvbnN0IG49dGhpcy5nZXRTZXR0aW5nKCJyb3dzIik7QXJyYXkuaXNBcnJheShuKSYmdGhpcy5oaWRl''@;'; put 'put ''Um93cyhuKX1mdW5jdGlvbiBOVmUobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEZWZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBvJChuLGUpe3JldHVybiBmdW5jdGlvbiBmWnQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLEZWZShu''@;'; put 'put ''LGUsImdldCIpKX1mdW5jdGlvbiBQVmUobixlLHQpe05WZShuLGUpLGUuc2V0KG4sdCl9ZnVuY3Rpb24gbkYobixlLHQpe3JldHVybiBmdW5jdGlvbiBwWnQobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0''@;'; put 'put ''dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLEZWZShuLGUsInNldCIpLHQpLHR9R28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtbkZyZWV6ZSIpLEdvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtbkZy''@;'; put 'put ''ZWV6ZSIpLEdvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIpLEdvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtblVuZnJlZXplIik7Y29uc3QgSFZlPSJtYW51YWxDb2x1bW5GcmVlemUiO3ZhciBSXz1uZXcgV2Vha01hcCxWVmU9bmV3''@;'; put 'put ''IFdlYWtTZXQsbGZlPW5ldyBXZWFrTWFwO2NsYXNzIF9adCBleHRlbmRzIGFse3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBIVmV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTEwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtI''@;'; put 'put ''VmVdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixlPT57KGZ1bmN0aW9uIGdadChuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBm''@;'; put 'put ''aWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH0pKHRoaXMsVlZlLHladCkuY2FsbCh0aGlzLGUpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5Nb3ZlIixvJCh0aGlzLGxmZSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7bkYodGhpcyxSXywhMSksc3Vw''@;'; put 'put ''ZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZnJlZXplQ29sdW1uKGUpe2NvbnN0IHQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxyPSh0LmZpeGVkQ29sdW1uc1N0YXJ0''@;'; put 'put ''Pz8wKTx0aGlzLmhvdC5jb3VudENvbHMoKSYmZT4odC5maXhlZENvbHVtbnNTdGFydD8/MCktMTtvJCh0aGlzLFJfKXx8bkYodGhpcyxSXywhMCksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uRnJlZXplIixlLHIpJiYociYmKHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVy''@;'; put 'put ''Lm1vdmVJbmRleGVzKGUsdC5maXhlZENvbHVtbnNTdGFydD8/MCksdC5fZml4ZWRDb2x1bW5zU3RhcnQrPTEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtbkZyZWV6ZSIsZSxyKSl9dW5mcmVlemVDb2x1bW4oZSl7Y29uc3QgdD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLHI9dC5maXhl''@;'; put 'put ''ZENvbHVtbnNTdGFydD8/MCxpPXI+MCYmZTw9ci0xO28kKHRoaXMsUl8pfHxuRih0aGlzLFJfLCEwKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIsZSxpKSYmKGkmJih0Ll9maXhlZENvbHVtbnNTdGFydC09MSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBl''@;'; put 'put ''ci5tb3ZlSW5kZXhlcyhlLHQuZml4ZWRDb2x1bW5zU3RhcnQ/PzApKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsZSxpKSl9Y29uc3RydWN0b3IoLi4uZSl7c3VwZXIoLi4uZSksZnVuY3Rpb24gbVp0KG4sZSl7TlZlKG4sZSksZS5hZGQobil9KHRoaXMsVlZlKSxQ''@;'; put 'put ''VmUodGhpcyxSXyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUFZlKHRoaXMsbGZlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxuRih0aGlzLFJfLCExKSxuRih0aGlzLGxmZSwodCxyKT0+e2lmKG8kKHRoaXMsUl8pKXtjb25zdCBpPXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4''@;'; put 'put ''ZWRDb2x1bW5zU3RhcnQ/PzA7aWYocjxpfHx0LnNvbWUobz0+bzxpKSlyZXR1cm4hMX19KX19ZnVuY3Rpb24geVp0KG4pe24uaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gZFp0KG4pe3JldHVybntrZXk6ImZyZWV6ZV9jb2x1bW4iLG5hbWUoKXtyZXR1cm4gdGhpcy5n''@;'; put 'put ''ZXRUcmFuc2xhdGVkUGhyYXNlKHZjZSl9LGNhbGxiYWNrKGUsdCl7Y29uc3Rbe3N0YXJ0Ontjb2w6cn19XT10O24uZnJlZXplQ29sdW1uKHIpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLnJlbmRlcigpfSxoaWRkZW4oKXtjb25zdCBlPXRoaXMuZ2V0U2VsZWN0ZWRSYW5n''@;'; put 'put ''ZSgpO2xldCB0PSExO3JldHVybih2b2lkIDA9PT1lfHxlLmxlbmd0aD4xfHxlWzBdLmZyb20uY29sIT09ZVswXS50by5jb2x8fGVbMF0uZnJvbS5jb2w8PSh0aGlzLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ/PzApLTEpJiYodD0hMCksdH19fSh0aGlzKSxmdW5jdGlvbiBoWnQo''@;'; put 'put ''bil7cmV0dXJue2tleToidW5mcmVlemVfY29sdW1uIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShfY2UpfSxjYWxsYmFjayhlLHQpe2NvbnN0W3tzdGFydDp7Y29sOnJ9fV09dDtuLnVuZnJlZXplQ29sdW1uKHIpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUo''@;'; put 'put ''KSx0aGlzLnJlbmRlcigpfSxoaWRkZW4oKXtjb25zdCBlPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2xldCB0PSExO2lmKHZvaWQgMD09PWUpdD0hMDtlbHNlIGlmKGUubGVuZ3RoPjEpdD0hMDtlbHNle2NvbnN0IHI9ZVswXS5mcm9tLmNvbCxpPWVbMF0udG8uY29sLG89dGhpcy5nZXRTZXR0''@;'; put 'put ''aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0Pz8wOyhyIT09aXx8bnVsbCE9PXImJnI+PW8pJiYodD0hMCl9cmV0dXJuIHR9fX0odGhpcykpfWNvbnN0IGJ4PSJweCIsVVZlPWNsYXNzIGJadHthcHBlbmRUbyhlKXtlLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuc3RhdGU9Mn1idWls''@;'; put 'put ''ZCgpezA9PT10aGlzLnN0YXRlJiYodGhpcy5fZWxlbWVudD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zdGF0ZT0xKX1kZXN0cm95KCl7dGhpcy5pc0FwcGVuZGVkKCkmJnRoaXMuX2VsZW1lbnQucGFyZW50RWxlbWVudD8ucmVtb3ZlQ2hpbGQodGhp''@;'; put 'put ''cy5fZWxlbWVudCksdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuc3RhdGU9MH1pc0FwcGVuZGVkKCl7cmV0dXJuIDI9PT10aGlzLnN0YXRlfWlzQnVpbHQoKXtyZXR1cm4gdGhpcy5zdGF0ZT49MX1zZXRQb3NpdGlvbihlLHQpe3cwKGUpJiYodGhpcy5fZWxlbWVudC5zdHlsZS50b3A9ZStieCks''@;'; put 'put ''dzAodCkmJih0aGlzLl9lbGVtZW50LnN0eWxlW3RoaXMuaW5saW5lUHJvcGVydHldPXQrYngpfWdldFBvc2l0aW9uKCl7Y29uc3QgZT10aGlzLl9lbGVtZW50LnN0eWxlO3JldHVybnt0b3A6ZS50b3A/TnVtYmVyLnBhcnNlSW50KGUudG9wLDEwKTowLHN0YXJ0OmVbdGhpcy5pbmxpbmVQcm9w''@;'; put 'put ''ZXJ0eV0/TnVtYmVyLnBhcnNlSW50KGVbdGhpcy5pbmxpbmVQcm9wZXJ0eV0sMTApOjB9fXNldFNpemUoZSx0KXt3MChlKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg9ZStieCksdzAodCkmJih0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodD10K2J4KX1nZXRTaXplKCl7cmV0dXJue3dp''@;'; put 'put ''ZHRoOnRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg/TnVtYmVyLnBhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGgsMTApOjAsaGVpZ2h0OnRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0P051bWJlci5wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodCwxMCk6MH19c2V0''@;'; put 'put ''T2Zmc2V0KGUsdCl7aWYodzAoZSkmJih0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcD1lK2J4KSx3MCh0KSl7Y29uc3Qgcj1gbWFyZ2luJHtLMCh0aGlzLmlubGluZVByb3BlcnR5KX1gO3RoaXMuX2VsZW1lbnQuc3R5bGVbcl09dCtieH19Z2V0T2Zmc2V0KCl7Y29uc3QgZT10aGlzLl9l''@;'; put 'put ''bGVtZW50LnN0eWxlLHQ9YG1hcmdpbiR7SzAodGhpcy5pbmxpbmVQcm9wZXJ0eSl9YDtyZXR1cm57dG9wOmUubWFyZ2luVG9wP051bWJlci5wYXJzZUludChlLm1hcmdpblRvcCwxMCk6MCxzdGFydDplW3RdP051bWJlci5wYXJzZUludChlW3RdLDEwKTowfX1jb25zdHJ1Y3RvcihlKXt0aGlz''@;'; put 'put ''Ll9lbGVtZW50PW51bGwsdGhpcy5zdGF0ZT0wLHRoaXMuaG90PWUsdGhpcy5pbmxpbmVQcm9wZXJ0eT1lLmlzUnRsKCk/InJpZ2h0IjoibGVmdCJ9fSxTWnQ9Y2xhc3MgQ1p0IGV4dGVuZHMgVVZle2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxZcih0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsQ29s''@;'; put 'put ''dW1uTW92ZS0tYmFja2xpZ2h0Iil9fSxUWnQ9Y2xhc3MgTVp0IGV4dGVuZHMgVVZle2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxZcih0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsQ29sdW1uTW92ZS0tZ3VpZGVsaW5lIil9fTtmdW5jdGlvbiB6VmUobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFdWZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9u''@;'; put 'put ''IG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBPYShuLGUpe3JldHVybiBmdW5jdGlvbiB4WnQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLFdWZShuLGUsImdldCIpKX1mdW5jdGlvbiBYZihuLGUsdCl7elZlKG4sZSksZS5zZXQobix0''@;'; put 'put ''KX1mdW5jdGlvbiBOZChuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIEFadChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9''@;'; put 'put ''dH19KG4sV1ZlKG4sZSwic2V0IiksdCksdH1mdW5jdGlvbiByRihuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiBpRihuLGUpe3pWZShuLGUpLGUu''@;'; put 'put ''YWRkKG4pfUdvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5Nb3ZlIiksR28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29sdW1uTW92ZSIpO2NvbnN0IHVmZT0ibWFudWFsQ29sdW1uTW92ZSIsWVZlPSJodF9fbWFudWFsQ29sdW1uTW92ZSIsYSQ9InNob3ct''@;'; put 'put ''dWkiLGRmZT0ib24tbW92aW5nLS1jb2x1bW5zIixoZmU9ImFmdGVyLXNlbGVjdGlvbi0tY29sdW1ucyI7dmFyIEoyPW5ldyBXZWFrTWFwLFo3PW5ldyBXZWFrTWFwLE02PW5ldyBXZWFrTWFwLG9GPW5ldyBXZWFrTWFwLFQ2PW5ldyBXZWFrTWFwLGVmPW5ldyBXZWFrTWFwLHMkPW5ldyBXZWFr''@;'; put 'put ''TWFwLGFGPW5ldyBXZWFrTWFwLGZmZT1uZXcgV2Vha01hcCxsJD1uZXcgV2Vha01hcCxjJD1uZXcgV2Vha01hcCxaVmU9bmV3IFdlYWtTZXQsR1ZlPW5ldyBXZWFrU2V0LHBmZT1uZXcgV2Vha01hcCwkVmU9bmV3IFdlYWtTZXQsZ2ZlPW5ldyBXZWFrTWFwLHFWZT1uZXcgV2Vha1NldCxLVmU9''@;'; put 'put ''bmV3IFdlYWtTZXQsbWZlPW5ldyBXZWFrTWFwLHZmZT1uZXcgV2Vha01hcDtjbGFzcyBSWnQgZXh0ZW5kcyBhbHtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gdWZlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDEyMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMu''@;'; put 'put ''aG90LmdldFNldHRpbmdzKClbdWZlXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsT2EodGhpcyxwZmUpKSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsT2EodGhpcyxnZmUpKSx0aGlzLmFkZEhv''@;'; put 'put ''b2soImJlZm9yZU9uQ2VsbE1vdXNlT3Zlck91dHNpZGUiLChlLHQscixpKT0+ckYodGhpcyxxVmUsT1p0KS5jYWxsKHRoaXMsaSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IixPYSh0aGlzLG1mZSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsT2EodGhpcyx2''@;'; put 'put ''ZmUpKSx0aGlzLmJ1aWxkUGx1Z2luVUkoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksWXIodGhpcy5ob3Qucm9vdEVsZW1lbnQsWVZlKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLm1vdmVC''@;'; put 'put ''eVNldHRpbmdzT3JMb2FkKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe2tvKHRoaXMuaG90LnJvb3RFbGVtZW50LFlWZSksdGhpcy51bnJlZ2lzdGVyRXZlbnRzKCksT2EodGhpcyxKMikuZGVzdHJveSgpLE9hKHRoaXMsWjcpLmRlc3Ryb3koKSxzdXBlci5kaXNhYmxl''@;'; put 'put ''UGx1Z2luKCl9bW92ZUNvbHVtbihlLHQpe3JldHVybiB0aGlzLm1vdmVDb2x1bW5zKFtlXSx0KX1tb3ZlQ29sdW1ucyhlLHQpe2NvbnN0IHI9T2EodGhpcyxzJCksaT10aGlzLmlzTW92ZVBvc3NpYmxlKGUsdCksbz10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uTW92ZSIsZSx0LHIs''@;'; put 'put ''aSk7aWYoTmQodGhpcyxzJCx2b2lkIDApLCExPT09bylyZXR1cm4hMTtpJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhlLHQpO2NvbnN0IGE9aSYmdGhpcy5pc0NvbHVtbk9yZGVyQ2hhbmdlZChlLHQpO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1''@;'; put 'put ''bW5Nb3ZlIixlLHQscixpLGEpLGF9ZHJhZ0NvbHVtbihlLHQpe3JldHVybiB0aGlzLmRyYWdDb2x1bW5zKFtlXSx0KX1kcmFnQ29sdW1ucyhlLHQpe2NvbnN0IHI9dGhpcy5jb3VudEZpbmFsSW5kZXgoZSx0KTtyZXR1cm4gTmQodGhpcyxzJCx0KSx0aGlzLm1vdmVDb2x1bW5zKGUscil9aXNN''@;'; put 'put ''b3ZlUG9zc2libGUoZSx0KXtjb25zdCByPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCksaT1lLmxlbmd0aCt0PnIsbz10PDAsYT1lLnNvbWUodT0+dTwwKSxsPWUuc29tZSh1PT51Pj1yKTtyZXR1cm4hKGl8fG98fGF8fGwpfWlzQ29sdW1u''@;'; put 'put ''T3JkZXJDaGFuZ2VkKGUsdCl7cmV0dXJuIGUuc29tZSgocixpKT0+ci1pIT09dCl9Y291bnRGaW5hbEluZGV4KGUsdCl7Y29uc3Qgcj1tMShlLChpLG8pPT5vPHQ/aSsxOmksMCk7cmV0dXJuIHQtcn1nZXRDb2x1bW5zV2lkdGgoZSx0KXtjb25zdCByPXRoaXMuaG90LmNvbHVtbkluZGV4TWFw''@;'; put 'put ''cGVyO2xldCBpPTA7Zm9yKGxldCBvPWU7bzw9dDtvKz0xKXtjb25zdCBhPXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChvKTtvPDA/aSs9dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgpfHwwOm51bGwhPT1hJiYoaSs9dGhpcy5ob3Qudmlldy5f''@;'; put 'put ''d3Qud3RUYWJsZS5nZXRDb2x1bW5XaWR0aChhKXx8MCl9cmV0dXJuIGl9bW92ZUJ5U2V0dGluZ3NPckxvYWQoKXtjb25zdCBlPXRoaXMuaG90LmdldFNldHRpbmdzKClbdWZlXTtBcnJheS5pc0FycmF5KGUpJiZ0aGlzLm1vdmVDb2x1bW5zKGUsMCl9aXNGaXhlZENvbHVtbnNTdGFydChlKXty''@;'; put 'put ''ZXR1cm4gZTwodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydD8/MCl9cHJlcGFyZUNvbHVtbnNUb01vdmluZyhlLHQpe2NvbnN0IHI9W107cmV0dXJuIFZhKGUsdCxpPT57ci5wdXNoKGkpfSkscn1yZWZyZXNoUG9zaXRpb25zKCl7Y29uc3QgZT10aGlzLmhvdC52aWV3''@;'; put 'put ''LmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCk/PzAsdD1PYSh0aGlzLGFGKT8/MCxyPU9hKHRoaXMsYyQpPz8wLGk9T2EodGhpcyxmZmUpPz8wO3RoaXMuaXNGaXhlZENvbHVtbnNTdGFydCh0KSYmZT4wJiZ0aGlzLmhvdC5zY3JvbGxWaWV3cG9ydFRvKHtjb2w6dGhpcy5ob3QuY29sdW1u''@;'; put 'put ''SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGUtMSwtMSk/P3ZvaWQgMH0pO2NvbnN0IG89dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxhPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuc2Nyb2xsYWJsZUVsZW1lbnQsbD1hIGluc3RhbmNlb2YgV2luZG93P2Euc2Ny''@;'; put 'put ''b2xsWDphLnNjcm9sbExlZnQ7bGV0IHU9dGhpcy5ob3Qudmlldy5USEVBRC5vZmZzZXRMZWZ0K3RoaXMuZ2V0Q29sdW1uc1dpZHRoKDAsdC0xKTtjb25zdCBnPW8uaGlkZXIub2Zmc2V0V2lkdGgsRT1vLlRCT0RZPy5vZmZzZXRMZWZ0Pz8wLE89T2EodGhpcyxKMikuZ2V0T2Zmc2V0KCkuc3Rh''@;'; put 'put ''cnQsWj1PYSh0aGlzLEoyKS5nZXRTaXplKCkud2lkdGg7bGV0IGVlPTA7Y29uc3QgdmU9ckYodGhpcyxaVmUsSVp0KS5jYWxsKHRoaXMsYSxsLGkpO09hKHRoaXMsbCQpJiYoZWU9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmU/Lnd0VGFibGUu''@;'; put 'put ''Z2V0Q29sdW1uSGVhZGVyKC0xKT8ub2Zmc2V0V2lkdGg/PzApLHRoaXMuaXNGaXhlZENvbHVtbnNTdGFydCh0KSYmKHUrPWwpLHUrPWVlLHU9ckYodGhpcyxHVmUsRFp0KS5jYWxsKHRoaXMsdCx1LHZlLGUscik7bGV0IE1lPXZlLEhlPXU7dmUrWitPPj1nP01lPWctWi1POnZlK088RStlZSYm''@;'; put 'put ''KE1lPUUrZWUrTWF0aC5hYnMoTykpLHU+PWctMT9IZT1nLTE6MD09PUhlP0hlPTE6YSBpbnN0YW5jZW9mIFdpbmRvdyYmdDxyJiYoSGUtPWk8PWEuc2Nyb2xsWD9pOjApLE9hKHRoaXMsSjIpLnNldFBvc2l0aW9uKHZvaWQgMCxNZSksT2EodGhpcyxaNykuc2V0UG9zaXRpb24odm9pZCAwLEhl''@;'; put 'put ''KX1yZWdpc3RlckV2ZW50cygpe2NvbnN0e2RvY3VtZW50RWxlbWVudDplfT10aGlzLmhvdC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihlLCJtb3VzZW1vdmUiLHQ9PnJGKHRoaXMsJFZlLExadCkuY2FsbCh0aGlzLHQpKSx0aGlzLmV2ZW50TWFuYWdl''@;'; put 'put ''ci5hZGRFdmVudExpc3RlbmVyKGUsIm1vdXNldXAiLCgpPT5yRih0aGlzLEtWZSxOWnQpLmNhbGwodGhpcykpfXVucmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpfWJ1aWxkUGx1Z2luVUkoKXtPYSh0aGlzLEoyKS5idWlsZCgpLE9hKHRoaXMsWjcpLmJ1aWxkKCl9''@;'; put 'put ''ZGVzdHJveSgpe09hKHRoaXMsSjIpLmRlc3Ryb3koKSxPYSh0aGlzLFo3KS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLGlGKHRoaXMsWlZlKSxpRih0aGlzLEdWZSksaUYodGhpcywkVmUpLGlGKHRoaXMscVZlKSxpRih0aGlzLEtWZSks''@;'; put 'put ''WGYodGhpcyxKMix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksWGYodGhpcyxaNyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksWGYodGhpcyxNNix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksWGYodGhpcyxvRix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksWGYodGhpcyxU''@;'; put 'put ''Nix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksWGYodGhpcyxlZix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksWGYodGhpcyxzJCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksWGYodGhpcyxhRix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksWGYodGhpcyxmZmUse3dyaXRh''@;'; put 'put ''YmxlOiEwLHZhbHVlOnZvaWQgMH0pLFhmKHRoaXMsbCQse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFhmKHRoaXMsYyQse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFhmKHRoaXMscGZlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxYZih0aGlzLGdmZSx7d3JpdGFibGU6ITAs''@;'; put 'put ''dmFsdWU6dm9pZCAwfSksWGYodGhpcyxtZmUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFhmKHRoaXMsdmZlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxOZCh0aGlzLEoyLG5ldyBTWnQodGhpcy5ob3QpKSxOZCh0aGlzLFo3LG5ldyBUWnQodGhpcy5ob3QpKSxOZCh0aGlzLE02''@;'; put 'put ''LFtdKSxOZCh0aGlzLG9GLDApLE5kKHRoaXMsVDYsITEpLE5kKHRoaXMsZWYse30pLE5kKHRoaXMscGZlLCh0LHIsaSxvKT0+e2NvbnN0IGE9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxsPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSx1PXRoaXMuaG90''@;'; put 'put ''LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxnPUxhKEFhKHQpLCJzb3J0QWN0aW9uIik7aWYoIXV8fCFsfHxPYSh0aGlzLFQ2KXx8MCE9PXQuYnV0dG9ufHxnKXJldHVybiBOZCh0aGlzLFQ2LCExKSxPYSh0aGlzLE02KS5sZW5ndGg9MCx2b2lkIGtvKHRoaXMuaG90LnJvb3RFbGVtZW50LFtk''@;'; put 'put ''ZmUsYSRdKTtjb25zdCBFPU9hKHRoaXMsWjcpLmlzQnVpbHQoKSYmIU9hKHRoaXMsWjcpLmlzQXBwZW5kZWQoKSxPPU9hKHRoaXMsSjIpLmlzQnVpbHQoKSYmIU9hKHRoaXMsSjIpLmlzQXBwZW5kZWQoKTtFJiZPJiYoT2EodGhpcyxaNykuYXBwZW5kVG8oYS5oaWRlciksT2EodGhpcyxKMiku''@;'; put 'put ''YXBwZW5kVG8oYS5oaWRlcikpO2NvbnN0e2Zyb206Wix0bzplZX09dSx2ZT1NYXRoLm1pbihaLmNvbD8/MCxlZS5jb2w/PzApLE1lPU1hdGgubWF4KFouY29sPz8wLGVlLmNvbD8/MCk7aWYoci5yb3c8MCYmci5jb2w+PXZlJiZyLmNvbDw9TWUpe28uY29sdW1uPSEwLE5kKHRoaXMsVDYsITAp''@;'; put 'put ''O2NvbnN0IEhlPWkuZmlyc3RDaGlsZD9mQWUodCxpLmZpcnN0Q2hpbGQpLng6dC5vZmZzZXRYO09hKHRoaXMsZWYpLmV2ZW50UGFnZVg9dC5wYWdlWCxOZCh0aGlzLGFGLHIuY29sKSxPYSh0aGlzLGVmKS5URD1pLE9hKHRoaXMsZWYpLmNvbD1yLmNvbCxOZCh0aGlzLE02LHRoaXMucHJlcGFy''@;'; put 'put ''ZUNvbHVtbnNUb01vdmluZyh2ZSxNZSkpLE5kKHRoaXMsbCQsISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnJvd0hlYWRlcnMpLE5kKHRoaXMsb0YsdGhpcy5ob3QuY291bnRDb2xzKCkpLE5kKHRoaXMsYyQsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCksTmQodGhp''@;'; put 'put ''cyxmZmUsWDAodGhpcy5ob3Qucm9vdEVsZW1lbnQpLmxlZnQpO2NvbnN0IFdlPU9hKHRoaXMsbCQpPy0xOjAsYXQ9YS5ob2xkZXIuc2Nyb2xsVG9wK2EuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KDApKzEsQ3Q9ci5jb2w8KE9hKHRoaXMsYyQpPz8wKSxBdD10aGlzLmhvdC52aWV3Ll93dC53dE92''@;'; put 'put ''ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCksS3Q9TWF0aC5hYnMoSGUtKHRoaXMuaG90LmlzUnRsKCk/aS5vZmZzZXRXaWR0aDowKSkscXQ9dGhpcy5nZXRDb2x1bW5zV2lkdGgodmUsci5jb2wtMSkrS3QsZ249dGhpcy5nZXRDb2x1bW5zV2lkdGgoV2UsdmUt''@;'; put 'put ''MSkrKEN0P0F0OjApK3F0O09hKHRoaXMsSjIpLnNldFBvc2l0aW9uKGF0LGduKSxPYSh0aGlzLEoyKS5zZXRTaXplKHRoaXMuZ2V0Q29sdW1uc1dpZHRoKHZlLE1lKSxhLmhpZGVyLm9mZnNldEhlaWdodC1hdCksT2EodGhpcyxKMikuc2V0T2Zmc2V0KDAsLXF0KSxZcih0aGlzLmhvdC5yb290''@;'; put 'put ''RWxlbWVudCxkZmUpfWVsc2Uga28odGhpcy5ob3Qucm9vdEVsZW1lbnQsaGZlKSxOZCh0aGlzLFQ2LCExKSxPYSh0aGlzLE02KS5sZW5ndGg9MH0pLE5kKHRoaXMsZ2ZlLCh0LHIsaSxvKT0+eyF0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCl8fCFPYSh0aGlzLFQ2KXx8KE9hKHRo''@;'; put 'put ''aXMsTTYpLmluZGV4T2Yoci5jb2wpPi0xP2tvKHRoaXMuaG90LnJvb3RFbGVtZW50LGEkKTpZcih0aGlzLmhvdC5yb290RWxlbWVudCxhJCksby5yb3c9ITAsby5jb2x1bW49ITAsby5jZWxsPSEwLE5kKHRoaXMsYUYsci5jb2wpLE9hKHRoaXMsZWYpLlREPWkpfSksTmQodGhpcyxtZmUsKCk9''@;'; put 'put ''Pntjb25zdCB0PXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsbz10LmdldENvbHVtbkhlYWRlckhlaWdodCgwKSsxK3QuaG9sZGVyLnNjcm9sbFRvcDtPYSh0aGlzLEoyKS5zZXRQb3NpdGlvbihvKSxPYSh0aGlzLEoyKS5zZXRTaXplKHZvaWQgMCx0LmhpZGVyLm9mZnNldEhlaWdodC1vKX0p''@;'; put 'put ''LE5kKHRoaXMsdmZlLCgpPT57dGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpfSl9fWZ1bmN0aW9uIEladChuLGUsdCl7aWYodGhpcy5ob3QuaXNSdGwoKSl7Y29uc3Qgcj10aGlzLmhvdC5yb290V2luZG93LGk9WmQodGhpcy5ob3Qucm9vdEVsZW1lbnQpLG89ci5pbm5lcldpZHRoLXQtaTty''@;'; put 'put ''ZXR1cm4gci5pbm5lcldpZHRoLU9hKHRoaXMsZWYpLmV2ZW50UGFnZVgtby0obiBpbnN0YW5jZW9mIFdpbmRvdz8wOmUpfXJldHVybiBPYSh0aGlzLGVmKS5ldmVudFBhZ2VYLSh0LShuIGluc3RhbmNlb2YgV2luZG93PzA6ZSkpfWZ1bmN0aW9uIERadChuLGUsdCxyLGkpe2lmKG48MClPYSh0''@;'; put 'put ''aGlzLGVmKS5jb2w9aT4wPzA6cj4wP3ItMTpyO2Vsc2UgaWYoT2EodGhpcyxlZikuVEQub2Zmc2V0V2lkdGgvMitlPD10KXtjb25zdCBvPW4+PU9hKHRoaXMsb0YpP09hKHRoaXMsb0YpLTE6bjtPYSh0aGlzLGVmKS5jb2w9bysxLGUrPU9hKHRoaXMsZWYpLlRELm9mZnNldFdpZHRofWVsc2Ug''@;'; put 'put ''T2EodGhpcyxlZikuY29sPW47cmV0dXJuIGV9ZnVuY3Rpb24gTFp0KG4pe09hKHRoaXMsVDYpJiYoT2EodGhpcyxlZikuZXZlbnRQYWdlWD1uLnBhZ2VYLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpKX1mdW5jdGlvbiBPWnQobil7T2EodGhpcyxUNikmJihuLnJvdz0hMCxuLmNvbHVtbj0hMCxu''@;'; put 'put ''LmNlbGw9ITApfWZ1bmN0aW9uIE5adCgpe2NvbnN0IG49T2EodGhpcyxlZikuY29sLGU9T2EodGhpcyxNNikubGVuZ3RoO2lmKE5kKHRoaXMsYUYsdm9pZCAwKSxOZCh0aGlzLFQ2LCExKSxrbyh0aGlzLmhvdC5yb290RWxlbWVudCxbZGZlLGEkLGhmZV0pLHRoaXMuaG90LnNlbGVjdGlvbi5p''@;'; put 'put ''c1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmWXIodGhpcy5ob3Qucm9vdEVsZW1lbnQsaGZlKSxlPDF8fHZvaWQgMD09PW4pcmV0dXJuO2NvbnN0IHQ9T2EodGhpcyxNNilbMF0scj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHQpLGk9dGhpcy5kcmFnQ29sdW1ucyhPYSh0aGlzLE02KSxu''@;'; put 'put ''KTtpZihPYSh0aGlzLE02KS5sZW5ndGg9MCwhMD09PWkpe3RoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ob3QucmVuZGVyKCk7Y29uc3Qgbz10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihyKTt0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKG8sbytlLTEpfX1mdW5jdGlvbiBY''@;'; put 'put ''VmUobixlPSJob3Jpem9udGFsIil7Y29uc3QgdD1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9InZlcnRpY2FsIj09PWU/dC5oZWlnaHQ6dC53aWR0aCxpPSJ2ZXJ0aWNhbCI9PT1lP24ub2Zmc2V0SGVpZ2h0Om4ub2Zmc2V0V2lkdGg7aWYoIU51bWJlci5pc0Zpbml0ZShyKXx8IU51bWJl''@;'; put 'put ''ci5pc0Zpbml0ZShpKXx8cjw9MHx8aTw9MHx8cj49aSYmci1pPD0xKXJldHVybiAxO2NvbnN0IG89ci9pO3JldHVybiBOdW1iZXIuaXNGaW5pdGUobykmJm8+MD9vOjF9ZnVuY3Rpb24gUVZlKG4sZSl7cmV0dXJuIU51bWJlci5pc0Zpbml0ZShlKXx8ZTw9MD9uOk1hdGgucm91bmQobi9lKX1m''@;'; put 'put ''dW5jdGlvbiBKVmUobixlKXtyZXR1cm4hbi5wYXJlbnROb2RlfHxlPjF9ZnVuY3Rpb24gZUJlKG4sZSl7cmV0dXJuISFuPy5wYXJlbnROb2RlJiZlPj0yfWZ1bmN0aW9uIHRCZShuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1l''@;'; put 'put ''IHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gbkJlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0''@;'; put 'put ''aW9uIHJvKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIEZadChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sbkJlKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIFdoKG4sZSx0KXt0QmUobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIE9zKG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24g''@;'; put 'put ''UFp0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixuQmUobixlLCJzZXQiKSx0KSx0fWZ1bmN0aW9uIHd4''@;'; put 'put ''KG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiB0fWZ1bmN0aW9uIEN4KG4sZSl7dEJlKG4sZSksZS5hZGQobil9Y29uc3QgdSQ9Im1hbnVhbENvbHVtblJlc2l6ZSI7''@;'; put 'put ''dmFyIHRmPW5ldyBXZWFrTWFwLFN4PW5ldyBXZWFrTWFwLEszPW5ldyBXZWFrTWFwLHNGPW5ldyBXZWFrTWFwLFgzPW5ldyBXZWFrTWFwLHJCZT1uZXcgV2Vha01hcCxHNz1uZXcgV2Vha01hcCxsRj1uZXcgV2Vha01hcCxkJD1uZXcgV2Vha01hcCxRZj1uZXcgV2Vha01hcCx4Nj1uZXcgV2Vh''@;'; put 'put ''a01hcCxJXz1uZXcgV2Vha01hcCxjRj1uZXcgV2Vha01hcCxEXz1uZXcgV2Vha01hcCx1Rj1uZXcgV2Vha01hcCxfbT1uZXcgV2Vha01hcCxFeD1uZXcgV2Vha01hcCxkRj1uZXcgV2Vha01hcCxpQmU9bmV3IFdlYWtTZXQsb0JlPW5ldyBXZWFrU2V0LGFCZT1uZXcgV2Vha1NldCxzQmU9bmV3''@;'; put 'put ''IFdlYWtTZXQsbEJlPW5ldyBXZWFrU2V0LGNCZT1uZXcgV2Vha1NldCxfZmU9bmV3IFdlYWtNYXAseWZlPW5ldyBXZWFrTWFwLGJmZT1uZXcgV2Vha01hcDtjbGFzcyBWWnQgZXh0ZW5kcyBhbHtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gdSR9c3RhdGljIGdldCBQTFVHSU5fUFJJ''@;'; put 'put ''T1JJVFkoKXtyZXR1cm4gMTMwfWdldCBpbmxpbmVEaXIoKXtyZXR1cm4gdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0In1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdSRdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KE9zKHRoaXMsX20sbmV3''@;'; put 'put ''IG5fKSxybyh0aGlzLF9tKS5hZGRMb2NhbEhvb2soImluaXQiLCgpPT53eCh0aGlzLGlCZSxCWnQpLmNhbGwodGhpcykpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSxybyh0aGlzLF9tKSksT3ModGhpcyxFeCx0aGlzLmhvdC5jb2x1bW5J''@;'; put 'put ''bmRleE1hcHBlci5vYnNlcnZlTWFwQ2hhbmdlKHJvKHRoaXMsX20pLCgpPT57dGhpcy5ob3Qudmlldz8uaW52YWxpZGF0ZUNvbHVtbldpZHRoQ2FjaGUoKX0pKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIixybyh0aGlzLF9mZSksMSksdGhpcy5hZGRIb29rKCJiZWZvcmVTdHJldGNo''@;'; put 'put ''aW5nQ29sdW1uV2lkdGgiLHJvKHRoaXMseWZlKSwxKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtblJlc2l6ZSIscm8odGhpcyxiZmUpKSx0aGlzLmJpbmRFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFi''@;'; put 'put ''bGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7cm8odGhpcyxFeCkmJihybyh0aGlzLEV4KS5jYWxsKHRoaXMpLE9zKHRoaXMsRXgsbnVsbCkpLE9zKHRoaXMsZEYscm8odGhpcyxfbSkuZ2V0VmFsdWVzKCkpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVy''@;'; put 'put ''LnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c2F2ZU1hbnVhbENvbHVtbldpZHRocygpe0JXKCJgc2F2ZU1hbnVhbENvbHVtbldpZHRocygpYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVs''@;'; put 'put ''ZWFzZS4gVGhlIFBlcnNpc3RlbnRTdGF0ZSBwbHVnaW4gaGFzIGJlZW4gcmVtb3ZlZC4iKX1sb2FkTWFudWFsQ29sdW1uV2lkdGhzKCl7cmV0dXJuIEJXKCJgbG9hZE1hbnVhbENvbHVtbldpZHRocygpYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFq''@;'; put 'put ''b3IgcmVsZWFzZS4gVGhlIFBlcnNpc3RlbnRTdGF0ZSBwbHVnaW4gaGFzIGJlZW4gcmVtb3ZlZC4iKSxbXX1zZXRNYW51YWxTaXplKGUsdCl7Y29uc3Qgcj1NYXRoLm1heCh0LDIwKSxpPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oZSk7cmV0dXJuIHJvKHRoaXMsX20pLnNldFZhbHVlQXRJ''@;'; put 'put ''bmRleChpLHIpLHJ9Y2xlYXJNYW51YWxTaXplKGUpe2NvbnN0IHQ9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihlKTtybyh0aGlzLF9tKS5zZXRWYWx1ZUF0SW5kZXgodCxudWxsKX1zZXR1cEhhbmRsZVBvc2l0aW9uKGUpe2lmKEpWZShlLHJvKHRoaXMsRF8pKSlyZXR1cm47T3ModGhpcyx0''@;'; put 'put ''ZixlKTtjb25zdHtfd3Q6dH09dGhpcy5ob3QudmlldyxyPXQud3RUYWJsZS5nZXRDb29yZHMocm8odGhpcyx0ZikpO2lmKCFyKXJldHVybjtjb25zdCBpPXIuY29sO2lmKG51bGw9PT1pfHxpPDApcmV0dXJuO2NvbnN0IG89SGgocm8odGhpcyx0ZikpLGE9aTx0LmdldFNldHRpbmcoImZpeGVk''@;'; put 'put ''Q29sdW1uc1N0YXJ0Iik7bGV0IGw7Y29uc3QgdT1yLnJvdz8/MCxnPXIuY29sPz8wO2EmJihsPXQud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24ocm8odGhpcyx0ZiksdSxnKSksbHx8KGw9dC53dE92ZXJsYXlzLnRvcE92ZXJs''@;'; put 'put ''YXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24ocm8odGhpcyx0ZiksdSxnKSksT3ModGhpcyxTeCx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGkpKSxPcyh0aGlzLEszLFtdKTtjb25zdCBFPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVj''@;'; put 'put ''dGVkQnlDb3JuZXIoKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpO3RoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkmJkUmJlhuKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2UoKT8/W10sWj0+e2NvbnN0IGVlPVouZ2V0VG9wU3RhcnRDb3JuZXIo''@;'; put 'put ''KS5jb2wsdmU9Wi5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2w7bnVsbD09PWVlfHxudWxsPT09dmV8fFZhKGVlLHZlLE1lPT57cm8odGhpcyxLMykuaW5jbHVkZXMoTWUpfHxybyh0aGlzLEszKS5wdXNoKE1lKX0pfSksbnVsbCE9PXJvKHRoaXMsU3gpJiYocm8odGhpcyxLMykuaW5jbHVkZXMo''@;'; put 'put ''cm8odGhpcyxTeCkpfHxPcyh0aGlzLEszLFtybyh0aGlzLFN4KV0pLGwmJihPcyh0aGlzLGxGLGwuc3RhcnQtNiksT3ModGhpcyxHNyxaZChybyh0aGlzLHRmKSkpLE9zKHRoaXMsZCQsWFZlKHJvKHRoaXMsdGYpKSkscm8odGhpcyxRZikuc3R5bGUudG9wPWAke2wudG9wfXB4YCxybyh0aGlz''@;'; put 'put ''LFFmKS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7cm8odGhpcyxsRikrcm8odGhpcyxHNyl9cHhgLHJvKHRoaXMsUWYpLnN0eWxlLmhlaWdodD1gJHtvfXB4YCx0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZChybyh0aGlzLFFmKSkpKX1yZWZyZXNoSGFuZGxlUG9zaXRpb24oKXty''@;'; put 'put ''byh0aGlzLFFmKS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7KHJvKHRoaXMsbEYpPz8wKSsocm8odGhpcyxzRik/PzApfXB4YH1zZXR1cEd1aWRlUG9zaXRpb24oKXtjb25zdCBlPUhoKHJvKHRoaXMsUWYpKSx0PU51bWJlci5wYXJzZUludChybyh0aGlzLFFmKS5zdHlsZS50b3AsMTApK2Us''@;'; put 'put ''cj10aGlzLmhvdC52aWV3LmdldFRhYmxlSGVpZ2h0KCk7WXIocm8odGhpcyxRZiksImFjdGl2ZSIpLFlyKHJvKHRoaXMseDYpLCJhY3RpdmUiKSxybyh0aGlzLHg2KS5zdHlsZS50b3A9YCR7dH1weGAsdGhpcy5yZWZyZXNoR3VpZGVQb3NpdGlvbigpLHJvKHRoaXMseDYpLnN0eWxlLmhlaWdo''@;'; put 'put ''dD1yLWUrInB4Iix0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZChybyh0aGlzLHg2KSl9cmVmcmVzaEd1aWRlUG9zaXRpb24oKXtybyh0aGlzLHg2KS5zdHlsZVt0aGlzLmlubGluZURpcl09cm8odGhpcyxRZikuc3R5bGVbdGhpcy5pbmxpbmVEaXJdfWhpZGVIYW5kbGVBbmRHdWlk''@;'; put 'put ''ZSgpe2tvKHJvKHRoaXMsUWYpLCJhY3RpdmUiKSxrbyhybyh0aGlzLHg2KSwiYWN0aXZlIil9Y2hlY2tJZkNvbHVtbkhlYWRlcihlKXtjb25zdCB0PVZ2KGUsWyJUSEVBRCJdLHRoaXMuaG90LnJvb3RFbGVtZW50KSx7dG9wT3ZlcmxheTpyLHRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTpp''@;'; put 'put ''fT10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzO3JldHVybltyLmNsb25lLnd0VGFibGUuVEhFQUQsaS5jbG9uZS53dFRhYmxlLlRIRUFEXS5pbmNsdWRlcyh0KX1nZXRDbG9zZXN0VEhQYXJlbnQoZSl7cmV0dXJuIlRBQkxFIiE9PWUudGFnTmFtZT8iVEgiPT09ZS50YWdOYW1lP2U6dGhp''@;'; put 'put ''cy5nZXRDbG9zZXN0VEhQYXJlbnQoZS5wYXJlbnROb2RlKTpudWxsfWFmdGVyTW91c2VEb3duVGltZW91dCgpe2NvbnN0IGU9ZUJlKHJvKHRoaXMsdGYpLHJvKHRoaXMsRF8pKSx0PSgpPT57dGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5yZW5kZXIoKX0scj0o''@;'; put 'put ''aSxvKT0+e2NvbnN0IGE9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblJlc2l6ZSIscm8odGhpcyxYMyksaSwhMCk7ITEhPT1hJiYoIm51bWJlciI9PXR5cGVvZiBhJiZPcyh0aGlzLFgzLGEpLHRoaXMuc2V0TWFudWFsU2l6ZShpLHJvKHRoaXMsWDMpPz8wKSx0aGlzLmhvdC5ydW5I''@;'; put 'put ''b29rcygiYWZ0ZXJDb2x1bW5SZXNpemUiLHJvKHRoaXMsWDMpLGksITApLG8mJnQoKSl9O3JvKHRoaXMsRF8pPj0yJiYocm8odGhpcyxLMykubGVuZ3RoPjE/KFhuKHJvKHRoaXMsSzMpLG89PntyKG8pfSksdCgpKTpYbihybyh0aGlzLEszKSxvPT57cihvLCEwKX0pKSxPcyh0aGlzLHVGLG51''@;'; put 'put ''bGwpLE9zKHRoaXMsRF8sMCksZSYmcm8odGhpcyx0ZikmJnRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihybyh0aGlzLHRmKSl9YmluZEV2ZW50cygpe2NvbnN0e3Jvb3RXaW5kb3c6ZSxyb290RWxlbWVudDp0fT10aGlzLmhvdDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHQs''@;'; put 'put ''Im1vdXNlb3ZlciIscj0+d3godGhpcyxvQmUsalp0KS5jYWxsKHRoaXMscikpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodCwibW91c2Vkb3duIixyPT53eCh0aGlzLGFCZSxVWnQpLmNhbGwodGhpcyxyKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihl''@;'; put 'put ''LCJtb3VzZW1vdmUiLHI9Pnd4KHRoaXMsc0JlLHpadCkuY2FsbCh0aGlzLHIpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGUsIm1vdXNldXAiLCgpPT53eCh0aGlzLGxCZSxXWnQpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIocm8o''@;'; put 'put ''dGhpcyxRZiksImNvbnRleHRtZW51IiwoKT0+d3godGhpcyxjQmUsWVp0KS5jYWxsKHRoaXMpKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLEN4KHRoaXMsaUJlKSxDeCh0aGlzLG9CZSksQ3godGhpcyxhQmUpLEN4KHRoaXMsc0JlKSxDeCh0aGlz''@;'; put 'put ''LGxCZSksQ3godGhpcyxjQmUpLFdoKHRoaXMsdGYse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFdoKHRoaXMsU3gse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFdoKHRoaXMsSzMse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFdoKHRoaXMsc0Yse3dyaXRhYmxlOiEwLHZhbHVl''@;'; put 'put ''OnZvaWQgMH0pLFdoKHRoaXMsWDMse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFdoKHRoaXMsckJlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxXaCh0aGlzLEc3LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxXaCh0aGlzLGxGLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9''@;'; put 'put ''KSxXaCh0aGlzLGQkLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxXaCh0aGlzLFFmLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxXaCh0aGlzLHg2LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxXaCh0aGlzLElfLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxXaCh0aGlz''@;'; put 'put ''LGNGLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxXaCh0aGlzLERfLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxXaCh0aGlzLHVGLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxXaCh0aGlzLF9tLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxXaCh0aGlzLEV4LHt3cml0''@;'; put 'put ''YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxXaCh0aGlzLGRGLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxXaCh0aGlzLF9mZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksV2godGhpcyx5ZmUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFdoKHRoaXMsYmZlLHt3cml0YWJsZToh''@;'; put 'put ''MCx2YWx1ZTp2b2lkIDB9KSxPcyh0aGlzLHRmLG51bGwpLE9zKHRoaXMsU3gsbnVsbCksT3ModGhpcyxLMyxbXSksT3ModGhpcyxzRixudWxsKSxPcyh0aGlzLFgzLG51bGwpLE9zKHRoaXMsckJlLG51bGwpLE9zKHRoaXMsRzcsbnVsbCksT3ModGhpcyxsRixudWxsKSxPcyh0aGlzLGQkLDEp''@;'; put 'put ''LE9zKHRoaXMsUWYsdGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpKSxPcyh0aGlzLHg2LHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSksT3ModGhpcyxJXyxudWxsKSxPcyh0aGlzLGNGLCExKSxPcyh0aGlzLERfLDApLE9zKHRoaXMs''@;'; put 'put ''dUYsbnVsbCksT3ModGhpcyxFeCxudWxsKSxPcyh0aGlzLF9mZSwodCxyKT0+e2xldCBpPXQ7aWYodGhpcy5lbmFibGVkKXtjb25zdCBvPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4ociksYT1ybyh0aGlzLF9tKS5nZXRWYWx1ZUF0SW5kZXgobyk7dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt1''@;'; put 'put ''JF0mJmEmJihpPWEpfXJldHVybiBpfSksT3ModGhpcyx5ZmUsKHQscik9Pntjb25zdCBpPXJvKHRoaXMsX20pLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHIpKTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGk/aTp0fSksT3ModGhpcyxiZmUsKCk9Pnt0aGlzLmhv''@;'; put 'put ''dC52aWV3Ll93dC53dFZpZXdwb3J0LnJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCgpfSksWXIocm8odGhpcyxRZiksIm1hbnVhbENvbHVtblJlc2l6ZXIiKSxZcihybyh0aGlzLHg2KSwibWFudWFsQ29sdW1uUmVzaXplckd1aWRlIil9fWZ1bmN0aW9uIEJadCgpe2NvbnN0''@;'; put 'put ''IG49dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt1JF07QXJyYXkuaXNBcnJheShuKT8odGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntuLmZvckVhY2goKGUsdCk9Pntybyh0aGlzLF9tKS5zZXRWYWx1ZUF0SW5kZXgodCxlKX0pfSwhMCksT3ModGhpcyxkRixuKSk6ITA9PT1uJiZBcnJheS5p''@;'; put 'put ''c0FycmF5KHJvKHRoaXMsZEYpKSYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pntybyh0aGlzLGRGKS5mb3JFYWNoKChlLHQpPT57cm8odGhpcyxfbSkuc2V0VmFsdWVBdEluZGV4KHQsZSl9KX0sITApfWZ1bmN0aW9uIGpadChuKXtpZighRHNlKEFhKG4pKSYmITAhPT1ybyh0aGlzLGNG''@;'; put 'put ''KSYmdGhpcy5jaGVja0lmQ29sdW1uSGVhZGVyKEFhKG4pKSl7Y29uc3QgZT10aGlzLmdldENsb3Nlc3RUSFBhcmVudChBYShuKSk7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9ZS5nZXRBdHRyaWJ1dGUoImNvbHNwYW4iKTtlJiYobnVsbD09PXR8fCIxIj09PXQpJiYocm8odGhpcyxJXyl8fHRoaXMu''@;'; put 'put ''c2V0dXBIYW5kbGVQb3NpdGlvbihlKSl9fWZ1bmN0aW9uIFVadChuKXtBYShuKS5wYXJlbnROb2RlPT09dGhpcy5ob3Qucm9vdEVsZW1lbnQmJkxhKEFhKG4pLCJtYW51YWxDb2x1bW5SZXNpemVyIikmJnJvKHRoaXMsdGYpJiYodGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKHJvKHRoaXMsdGYp''@;'; put 'put ''KSx0aGlzLnNldHVwR3VpZGVQb3NpdGlvbigpLE9zKHRoaXMsSV8sITApLG51bGw9PT1ybyh0aGlzLHVGKSYmT3ModGhpcyx1Rix0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT50aGlzLmFmdGVyTW91c2VEb3duVGltZW91dCgpLDUwMCkpLE9zKHRoaXMsRF8scm8odGhpcyxEXykrMSks''@;'; put 'put ''dGhpcy5zdGFydFg9bi5wYWdlWCxPcyh0aGlzLFgzLHJvKHRoaXMsRzcpKSl9ZnVuY3Rpb24gelp0KG4pe2lmKHJvKHRoaXMsSV8pKXtjb25zdCB0PVFWZSgobi5wYWdlWC10aGlzLnN0YXJ0WCkqdGhpcy5ob3QuZ2V0RGlyZWN0aW9uRmFjdG9yKCkscm8odGhpcyxkJCkpO09zKHRoaXMsc0Ys''@;'; put 'put ''KHJvKHRoaXMsRzcpPz8wKSt0KSxYbihybyh0aGlzLEszKSxyPT57T3ModGhpcyxYMyx0aGlzLnNldE1hbnVhbFNpemUocixybyh0aGlzLHNGKT8/MCkpfSksdGhpcy5yZWZyZXNoSGFuZGxlUG9zaXRpb24oKSx0aGlzLnJlZnJlc2hHdWlkZVBvc2l0aW9uKCl9fWZ1bmN0aW9uIFdadCgpe2Nv''@;'; put 'put ''bnN0IG49KCk9Pnt0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpfSxlPSh0LHIpPT57Y29uc3QgaT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uUmVzaXplIixybyh0aGlzLFgzKSx0LCExKTshMT09PWk/KHRoaXMuc2V0TWFudWFsU2l6''@;'; put 'put ''ZSh0LHJvKHRoaXMsRzcpPz8wKSxPcyh0aGlzLFgzLHJvKHRoaXMsRzcpKSk6Im51bWJlciI9PXR5cGVvZiBpJiYoT3ModGhpcyxYMyxpKSx0aGlzLnNldE1hbnVhbFNpemUodCxybyh0aGlzLFgzKSkpLHImJm4oKSwhMSE9PWkmJnRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtblJlc2l6''@;'; put 'put ''ZSIscm8odGhpcyxYMyksdCwhMSl9O3JvKHRoaXMsSV8pJiYodGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSxPcyh0aGlzLElfLCExKSxybyh0aGlzLFgzKSE9PXJvKHRoaXMsRzcpJiYocm8odGhpcyxLMykubGVuZ3RoPjE/KFhuKHJvKHRoaXMsSzMpLHI9PntlKHIpfSksbigpKTpYbihybyh0''@;'; put 'put ''aGlzLEszKSxyPT57ZShyLCEwKX0pKSxybyh0aGlzLHRmKSYmdGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKHJvKHRoaXMsdGYpKSl9ZnVuY3Rpb24gWVp0KCl7dGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGlsZChybyh0aGlzLFFmKSksdGhp''@;'; put 'put ''cy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQocm8odGhpcyx4NikpLE9zKHRoaXMsSV8sITEpLE9zKHRoaXMsY0YsITApLHRoaXMuaG90Ll9yZWdpc3Rlck1pY3JvdGFzaygoKT0+e09zKHRoaXMsY0YsITEpfSl9Y29uc3QgTXg9InB4IixoQmU9Y2xhc3MgWlp0e2FwcGVuZFRvKGUpe2Uu''@;'; put 'put ''YXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5zdGF0ZT0yfWJ1aWxkKCl7MD09PXRoaXMuc3RhdGUmJih0aGlzLl9lbGVtZW50PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnN0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmlzQXBwZW5kZWQoKSYm''@;'; put 'put ''dGhpcy5fZWxlbWVudC5wYXJlbnRFbGVtZW50Py5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5zdGF0ZT0wfWlzQXBwZW5kZWQoKXtyZXR1cm4gMj09PXRoaXMuc3RhdGV9aXNCdWlsdCgpe3JldHVybiB0aGlzLnN0YXRlPj0xfXNldFBvc2l0aW9u''@;'; put 'put ''KGUsdCl7bnVsbCE9ZSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUudG9wPWUrTXgpLG51bGwhPXQmJih0aGlzLl9lbGVtZW50LnN0eWxlLmxlZnQ9dCtNeCl9Z2V0UG9zaXRpb24oKXtyZXR1cm57dG9wOnRoaXMuX2VsZW1lbnQuc3R5bGUudG9wP051bWJlci5wYXJzZUludCh0aGlzLl9lbGVtZW50''@;'; put 'put ''LnN0eWxlLnRvcCwxMCk6MCxsZWZ0OnRoaXMuX2VsZW1lbnQuc3R5bGUubGVmdD9OdW1iZXIucGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5sZWZ0LDEwKTowfX1zZXRTaXplKGUsdCl7ZSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg9ZStNeCksdCYmKHRoaXMuX2VsZW1lbnQuc3R5''@;'; put 'put ''bGUuaGVpZ2h0PXQrTXgpfWdldFNpemUoKXtyZXR1cm57d2lkdGg6dGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD9OdW1iZXIucGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aCwxMCk6MCxoZWlnaHQ6dGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ/TnVtYmVyLnBhcnNlSW50KHRo''@;'; put 'put ''aXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKTowfX1zZXRPZmZzZXQoZSx0KXtlJiYodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3A9ZStNeCksdCYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luTGVmdD10K014KX1nZXRPZmZzZXQoKXtyZXR1cm57dG9wOnRoaXMuX2VsZW1lbnQu''@;'; put 'put ''c3R5bGUubWFyZ2luVG9wP051bWJlci5wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcCwxMCk6MCxsZWZ0OnRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luTGVmdD9OdW1iZXIucGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5MZWZ0LDEwKTowfX1jb25zdHJ1''@;'; put 'put ''Y3RvcihlKXt0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5zdGF0ZT0wLHRoaXMuaG90PWV9fSxxWnQ9Y2xhc3MgJFp0IGV4dGVuZHMgaEJle2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxZcih0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsUm93TW92ZS0tYmFja2xpZ2h0Iil9fSxRWnQ9Y2xhc3MgWFp0''@;'; put 'put ''IGV4dGVuZHMgaEJle2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxZcih0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5lIil9fTtmdW5jdGlvbiBmQmUobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBw''@;'; put 'put ''cml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHBCZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlv''@;'; put 'put ''biBmcyhuLGUpe3JldHVybiBmdW5jdGlvbiBKWnQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLHBCZShuLGUsImdldCIpKX1mdW5jdGlvbiBBNihuLGUsdCl7ZkJlKG4sZSksZS5zZXQobix0KX1mdW5jdGlvbiBKZihuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIGVH''@;'; put 'put ''dChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4scEJlKG4sZSwic2V0IiksdCksdH1mdW5jdGlvbiBDZmUo''@;'; put 'put ''bixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHR9ZnVuY3Rpb24gU2ZlKG4sZSl7ZkJlKG4sZSksZS5hZGQobil9R28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJl''@;'; put 'put ''Zm9yZVJvd01vdmUiKSxHby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJSb3dNb3ZlIik7Y29uc3QgaCQ9Im1hbnVhbFJvd01vdmUiLGdCZT0iaHRfX21hbnVhbFJvd01vdmUiLGYkPSJzaG93LXVpIixFZmU9Im9uLW1vdmluZy0tcm93cyIsTWZlPSJhZnRlci1zZWxlY3Rpb24tLXJv''@;'; put 'put ''d3MiO3ZhciBuZj1uZXcgV2Vha01hcCwkNz1uZXcgV2Vha01hcCxrNj1uZXcgV2Vha01hcCxxNz1uZXcgV2Vha01hcCxlMz1uZXcgV2Vha01hcCxwJD1uZXcgV2Vha01hcCxUZmU9bmV3IFdlYWtNYXAsbUJlPW5ldyBXZWFrU2V0LHhmZT1uZXcgV2Vha01hcCx2QmU9bmV3IFdlYWtTZXQsX0Jl''@;'; put 'put ''PW5ldyBXZWFrU2V0LEFmZT1uZXcgV2Vha01hcCxrZmU9bmV3IFdlYWtNYXA7Y2xhc3Mgbkd0IGV4dGVuZHMgYWx7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGgkfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE0MH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygp''@;'; put 'put ''e3JldHVybltoJF19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2gkXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnModGhpcyxUZmUpKSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2Vs''@;'; put 'put ''bE1vdXNlT3ZlciIsZnModGhpcyx4ZmUpKSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3Zlck91dHNpZGUiLChlLHQscixpKT0+Q2ZlKHRoaXMsdkJlLGlHdCkuY2FsbCh0aGlzLGkpKSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5Iixmcyh0aGlzLEFmZSkp''@;'; put 'put ''LHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnModGhpcyxrZmUpKSx0aGlzLmJ1aWxkUGx1Z2luVUkoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksWXIodGhpcy5ob3Qucm9vdEVsZW1lbnQsZ0JlKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxl''@;'; put 'put ''UGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLm1vdmVCeVNldHRpbmdzT3JMb2FkKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe2tvKHRoaXMuaG90LnJvb3RFbGVtZW50LGdCZSksdGhpcy51bnJlZ2lzdGVyRXZlbnRzKCksZnModGhpcyxuZikuZGVzdHJv''@;'; put 'put ''eSgpLGZzKHRoaXMsJDcpLmRlc3Ryb3koKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9bW92ZVJvdyhlLHQpe3JldHVybiB0aGlzLm1vdmVSb3dzKFtlXSx0KX1tb3ZlUm93cyhlLHQpe2NvbnN0IHI9ZnModGhpcyxwJCksaT10aGlzLmlzTW92ZVBvc3NpYmxlKGUsdCksbz10aGlzLmhvdC5ydW5I''@;'; put 'put ''b29rcygiYmVmb3JlUm93TW92ZSIsZSx0LHIsaSk7aWYoSmYodGhpcyxwJCx2b2lkIDApLCExPT09bylyZXR1cm4hMTtpJiZ0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhlLHQpO2NvbnN0IGE9aSYmdGhpcy5pc1Jvd09yZGVyQ2hhbmdlZChlLHQpO3JldHVybiB0aGlzLmhv''@;'; put 'put ''dC5ydW5Ib29rcygiYWZ0ZXJSb3dNb3ZlIixlLHQscixpLGEpLGF9ZHJhZ1JvdyhlLHQpe3JldHVybiB0aGlzLmRyYWdSb3dzKFtlXSx0KX1kcmFnUm93cyhlLHQpe2NvbnN0IHI9dGhpcy5jb3VudEZpbmFsSW5kZXgoZSx0KTtyZXR1cm4gSmYodGhpcyxwJCx0KSx0aGlzLm1vdmVSb3dzKGUs''@;'; put 'put ''cil9aXNNb3ZlUG9zc2libGUoZSx0KXtjb25zdCByPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCksaT1lLmxlbmd0aCt0PnIsbz10PDAsYT1lLnNvbWUodT0+dTwwKSxsPWUuc29tZSh1PT51Pj1yKTtyZXR1cm4hKGl8fG98fGF8fGwpfWlzUm93''@;'; put 'put ''T3JkZXJDaGFuZ2VkKGUsdCl7cmV0dXJuIGUuc29tZSgocixpKT0+ci1pIT09dCl9Y291bnRGaW5hbEluZGV4KGUsdCl7Y29uc3Qgcj1tMShlLChpLG8pPT5vPHQ/aSsxOmksMCk7cmV0dXJuIHQtcn1nZXRSb3dzSGVpZ2h0KGUsdCl7Y29uc3Qgcj10aGlzLmhvdC5yb3dJbmRleE1hcHBlcjts''@;'; put 'put ''ZXQgaT0wO2ZvcihsZXQgbz1lO288PXQ7bysrKXtjb25zdCBhPXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChvKTtpZihudWxsIT09YSl7Y29uc3QgdT10aGlzLmhvdC52aWV3Ll93dD8ud3RUYWJsZT8uZ2V0Um93SGVpZ2h0KGEpO2krPSh1Pz8wKXx8KHRoaXMuaG90LnN0eWxlc0hh''@;'; put 'put ''bmRsZXIuZ2V0RGVmYXVsdFJvd0hlaWdodCgpPz8wKX19cmV0dXJuIGl9bW92ZUJ5U2V0dGluZ3NPckxvYWQoKXtjb25zdCBlPXRoaXMuaG90LmdldFNldHRpbmdzKClbaCRdO0FycmF5LmlzQXJyYXkoZSkmJnRoaXMubW92ZVJvd3MoZSwwKX1pc0ZpeGVkUm93VG9wKGUpe3JldHVybiBlPCh0''@;'; put 'put ''aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c1RvcD8/MCl9aXNGaXhlZFJvd0JvdHRvbShlKXtyZXR1cm4gZT50aGlzLmhvdC5jb3VudFJvd3MoKS0xLSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbT8/MCl9cHJlcGFyZVJvd3NUb01vdmluZygpe2NvbnN0IGU9''@;'; put 'put ''dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLHQ9W107aWYoIWUpcmV0dXJuIHQ7Y29uc3R7ZnJvbTpyLHRvOml9PWU7cmV0dXJuIFZhKE1hdGgubWluKHIucm93Pz8wLGkucm93Pz8wKSxNYXRoLm1heChyLnJvdz8/MCxpLnJvdz8/MCksbD0+e3QucHVzaChsKX0pLHR9cmVmcmVz''@;'; put 'put ''aFBvc2l0aW9ucygpe2NvbnN0IGU9ZnModGhpcyxlMykuY29vcmRzLHQ9ZnModGhpcyxlMykuVEQ7aWYoIWV8fCF0KXJldHVybjtjb25zdCByPXRoaXMuaG90LmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksaT10aGlzLmhvdC5nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCksbz10aGlzLmhvdC5j''@;'; put 'put ''b3VudFJvd3MoKTtpZih0aGlzLmlzRml4ZWRSb3dUb3AoZS5yb3cpJiZyPjApe2NvbnN0IFRuPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChyLTEsLTEpO251bGwhPT1UbiYmdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyhUbil9aWYodGhpcy5pc0Zp''@;'; put 'put ''eGVkUm93Qm90dG9tKGUucm93KSYmaTxvKXtjb25zdCBUbj10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoaSsxLDEpO251bGwhPT1UbiYmdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyhUbix2b2lkIDAsITApfWNvbnN0IGE9dGhpcy5ob3Qudmlldy5f''@;'; put 'put ''d3Qud3RUYWJsZSxsPXRoaXMuaG90LnJvb3RFbGVtZW50LHU9WDAobCksZz1ITShsKSxFPWEuaG9sZGVyLnNjcm9sbFRvcCxPPWcgaW5zdGFuY2VvZiBIVE1MRWxlbWVudD9nLnNjcm9sbFRvcDowLFo9dS50b3AtTyxlZT0oZnModGhpcyxlMykuZXZlbnRQYWdlWT8/MCktWitFLHZlPWEuaGlk''@;'; put 'put ''ZXIub2Zmc2V0SGVpZ2h0LE1lPWEuVEJPRFk/Lm9mZnNldFRvcD8/MCxIZT1mcyh0aGlzLG5mKS5nZXRPZmZzZXQoKS50b3AsV2U9ZnModGhpcyxuZikuZ2V0U2l6ZSgpLmhlaWdodCxhdD10Lm9mZnNldEhlaWdodC8yLEN0PXQub2Zmc2V0SGVpZ2h0O2xldCBBdD10aGlzLmhvdC52aWV3LlRI''@;'; put 'put ''RUFELm9mZnNldEhlaWdodCt0aGlzLmdldFJvd3NIZWlnaHQoMCxlLnJvdy0xKTtjb25zdCBLdD1lZT49QXQrYXQ7dGhpcy5pc0ZpeGVkUm93VG9wKGUucm93KSYmKEF0Kz10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpKSxlLnJvdzww''@;'; put 'put ''P2ZzKHRoaXMsZTMpLnJvdz1yPjA/ci0xOnI6S3Q/KGZzKHRoaXMsZTMpLnJvdz1lLnJvdysxLEF0Kz0wPT09ZS5yb3c/Q3QtMTpDdCk6ZnModGhpcyxlMykucm93PWUucm93O2xldCBxdD1lZSxnbj1BdDtlZStXZStIZT49dmU/cXQ9dmUtV2UtSGU6ZWUrSGU8TWUmJihxdD1NZStNYXRoLmFi''@;'; put 'put ''cyhIZSkpLEF0Pj12ZS0xJiYoZ249dmUtMSksZnModGhpcyxuZikuc2V0UG9zaXRpb24ocXQpLGZzKHRoaXMsJDcpLnNldFBvc2l0aW9uKGduKX1yZWdpc3RlckV2ZW50cygpe2NvbnN0e2RvY3VtZW50RWxlbWVudDplfT10aGlzLmhvdC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIu''@;'; put 'put ''YWRkRXZlbnRMaXN0ZW5lcihlLCJtb3VzZW1vdmUiLHQ9PkNmZSh0aGlzLG1CZSxyR3QpLmNhbGwodGhpcyx0KSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihlLCJtb3VzZXVwIiwoKT0+Q2ZlKHRoaXMsX0JlLG9HdCkuY2FsbCh0aGlzKSl9dW5yZWdpc3RlckV2ZW50cygp''@;'; put 'put ''e3RoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyKCl9YnVpbGRQbHVnaW5VSSgpe2ZzKHRoaXMsbmYpLmJ1aWxkKCksZnModGhpcywkNykuYnVpbGQoKX1kZXN0cm95KCl7ZnModGhpcyxuZikuZGVzdHJveSgpLGZzKHRoaXMsJDcpLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9Y29uc3RydWN0b3Io''@;'; put 'put ''Li4uZSl7c3VwZXIoLi4uZSksU2ZlKHRoaXMsbUJlKSxTZmUodGhpcyx2QmUpLFNmZSh0aGlzLF9CZSksQTYodGhpcyxuZix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksQTYodGhpcywkNyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksQTYodGhpcyxrNix7d3JpdGFibGU6ITAsdmFs''@;'; put 'put ''dWU6dm9pZCAwfSksQTYodGhpcyxxNyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksQTYodGhpcyxlMyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksQTYodGhpcyxwJCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksQTYodGhpcyxUZmUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQg''@;'; put 'put ''MH0pLEE2KHRoaXMseGZlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxBNih0aGlzLEFmZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksQTYodGhpcyxrZmUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEpmKHRoaXMsbmYsbmV3IHFadCh0aGlzLmhvdCkpLEpmKHRoaXMsJDcs''@;'; put 'put ''bmV3IFFadCh0aGlzLmhvdCkpLEpmKHRoaXMsazYsW10pLEpmKHRoaXMsZTMse30pLEpmKHRoaXMsVGZlLCh0LHIsaSxvKT0+e2NvbnN0e3d0VGFibGU6YSx3dFZpZXdwb3J0Omx9PXRoaXMuaG90LnZpZXcuX3d0LHU9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigp''@;'; put 'put ''LGc9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFnfHwhdXx8ZnModGhpcyxxNyl8fDAhPT10LmJ1dHRvbilyZXR1cm4gSmYodGhpcyxxNywhMSksZnModGhpcyxrNikubGVuZ3RoPTAsdm9pZCBrbyh0aGlzLmhvdC5yb290RWxlbWVudCxbRWZlLGYkXSk7Y29uc3QgRT1m''@;'; put 'put ''cyh0aGlzLCQ3KS5pc0J1aWx0KCkmJiFmcyh0aGlzLCQ3KS5pc0FwcGVuZGVkKCksTz1mcyh0aGlzLG5mKS5pc0J1aWx0KCkmJiFmcyh0aGlzLG5mKS5pc0FwcGVuZGVkKCk7RSYmTyYmKGZzKHRoaXMsJDcpLmFwcGVuZFRvKGEuaGlkZXIpLGZzKHRoaXMsbmYpLmFwcGVuZFRvKGEuaGlkZXIp''@;'; put 'put ''KTtjb25zdHtmcm9tOlosdG86ZWV9PWcsdmU9TWF0aC5taW4oWi5yb3c/PzAsZWUucm93Pz8wKSxNZT1NYXRoLm1heChaLnJvdz8/MCxlZS5yb3c/PzApO2lmKHIuY29sPDAmJnIucm93Pj12ZSYmci5yb3c8PU1lKXtvLnJvdz0hMCxKZih0aGlzLHE3LCEwKSxmcyh0aGlzLGUzKS5ldmVudFBh''@;'; put 'put ''Z2VZPXQucGFnZVksZnModGhpcyxlMykuY29vcmRzPXIsZnModGhpcyxlMykuVEQ9aSxKZih0aGlzLGs2LHRoaXMucHJlcGFyZVJvd3NUb01vdmluZygpKTtjb25zdCBIZT1hLmhvbGRlci5zY3JvbGxMZWZ0K2wuZ2V0Um93SGVhZGVyV2lkdGgoKSxXZT10aGlzLmdldFJvd3NIZWlnaHQodmUs''@;'; put 'put ''ci5yb3ctMSkrKHQuY2xpZW50WS1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCk7ZnModGhpcyxuZikuc2V0UG9zaXRpb24obnVsbCxIZSksZnModGhpcyxuZikuc2V0U2l6ZShhLmhpZGVyLm9mZnNldFdpZHRoLUhlLHRoaXMuZ2V0Um93c0hlaWdodCh2ZSxNZSkpLGZzKHRoaXMsbmYp''@;'; put 'put ''LnNldE9mZnNldCgtV2UsbnVsbCksWXIodGhpcy5ob3Qucm9vdEVsZW1lbnQsRWZlKSx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKX1lbHNlIGtvKHRoaXMuaG90LnJvb3RFbGVtZW50LE1mZSksSmYodGhpcyxxNywhMSksZnModGhpcyxrNikubGVuZ3RoPTB9KSxKZih0aGlzLHhmZSwodCxyLGks''@;'; put 'put ''byk9PnshdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpfHwhZnModGhpcyxxNyl8fChmcyh0aGlzLGs2KS5pbmRleE9mKHIucm93KT4tMT9rbyh0aGlzLmhvdC5yb290RWxlbWVudCxmJCk6WXIodGhpcy5ob3Qucm9vdEVsZW1lbnQsZiQpLG8ucm93PSEwLG8uY29sdW1uPSEwLG8u''@;'; put 'put ''Y2VsbD0hMCxmcyh0aGlzLGUzKS5jb29yZHM9cixmcyh0aGlzLGUzKS5URD1pKX0pLEpmKHRoaXMsQWZlLCgpPT57Y29uc3QgdD10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLG89dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgpK3QuaG9sZGVyLnNjcm9s''@;'; put 'put ''bExlZnQ7ZnModGhpcyxuZikuc2V0UG9zaXRpb24obnVsbCxvKSxmcyh0aGlzLG5mKS5zZXRTaXplKHQuaGlkZXIub2Zmc2V0V2lkdGgtbyl9KSxKZih0aGlzLGtmZSwoKT0+e3RoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKX0pfX1mdW5jdGlvbiByR3Qobil7ZnModGhpcyxxNykmJihmcyh0''@;'; put 'put ''aGlzLGUzKS5ldmVudFBhZ2VZPW4ucGFnZVksdGhpcy5yZWZyZXNoUG9zaXRpb25zKCkpfWZ1bmN0aW9uIGlHdChuKXtmcyh0aGlzLHE3KSYmKG4ucm93PSEwLG4uY29sdW1uPSEwLG4uY2VsbD0hMCl9ZnVuY3Rpb24gb0d0KCl7Y29uc3Qgbj1mcyh0aGlzLGUzKS5yb3csZT1mcyh0aGlzLGs2''@;'; put 'put ''KS5sZW5ndGg7aWYoSmYodGhpcyxxNywhMSksa28odGhpcy5ob3Qucm9vdEVsZW1lbnQsW0VmZSxmJCxNZmVdKSx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJllyKHRoaXMuaG90LnJvb3RFbGVtZW50LE1mZSksZTwxfHx2b2lkIDA9PT1uKXJldHVybjtjb25z''@;'; put 'put ''dCB0PWZzKHRoaXMsazYpWzBdLHI9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyh0KSxpPXRoaXMuZHJhZ1Jvd3MoZnModGhpcyxrNiksbik7aWYoZnModGhpcyxrNikubGVuZ3RoPTAsITA9PT1pKXt0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpO2Nv''@;'; put 'put ''bnN0IG89dGhpcy5ob3QudG9WaXN1YWxSb3cocik7dGhpcy5ob3Quc2VsZWN0Um93cyhvLG8rZS0xKX19ZnVuY3Rpb24geUJlKG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBh''@;'; put 'put ''biBvYmplY3QiKX1mdW5jdGlvbiBiQmUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQobil9ZnVuY3Rpb24gbG8obixlKXtyZXR1cm4gZnVuY3Rpb24g''@;'; put 'put ''YUd0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obixiQmUobixlLCJnZXQiKSl9ZnVuY3Rpb24gUTEobixlLHQpe3lCZShuLGUpLGUuc2V0KG4sdCl9ZnVuY3Rpb24gTnMobixlLHQpe3JldHVybiBmdW5jdGlvbiBzR3QobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNh''@;'; put 'put ''bGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLGJCZShuLGUsInNldCIpLHQpLHR9ZnVuY3Rpb24gVHgobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHR9ZnVuY3Rpb24geHgobixlKXt5QmUobixlKSxlLmFkZChuKX1jb25zdCBnJD0ibWFudWFsUm93UmVzaXplIjt2YXIgdDM9bmV3IFdlYWtNYXAsQXg9bmV3IFdlYWtN''@;'; put 'put ''YXAsUTM9bmV3IFdlYWtNYXAsa3g9bmV3IFdlYWtNYXAsb2c9bmV3IFdlYWtNYXAsbSQ9bmV3IFdlYWtNYXAsSzc9bmV3IFdlYWtNYXAsaEY9bmV3IFdlYWtNYXAsdiQ9bmV3IFdlYWtNYXAscmY9bmV3IFdlYWtNYXAsVjQ9bmV3IFdlYWtNYXAsTF89bmV3IFdlYWtNYXAsZkY9bmV3IFdlYWtN''@;'; put 'put ''YXAsT189bmV3IFdlYWtNYXAscEY9bmV3IFdlYWtNYXAsUjY9bmV3IFdlYWtNYXAsUng9bmV3IFdlYWtNYXAsZ0Y9bmV3IFdlYWtNYXAsd0JlPW5ldyBXZWFrU2V0LENCZT1uZXcgV2Vha1NldCxTQmU9bmV3IFdlYWtTZXQsRUJlPW5ldyBXZWFrU2V0LE1CZT1uZXcgV2Vha1NldCxSZmU9bmV3''@;'; put 'put ''IFdlYWtNYXAsVEJlPW5ldyBXZWFrU2V0O2NsYXNzIGNHdCBleHRlbmRzIGFse3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBnJH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMH1nZXQgaW5saW5lRGlyKCl7cmV0dXJuIHRoaXMuaG90LmlzUnRsKCk/InJpZ2h0''@;'; put 'put ''IjoibGVmdCJ9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2ckXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fChOcyh0aGlzLFI2LG5ldyBuXyksbG8odGhpcyxSNikuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+VHgodGhpcyxUQmUsZ0d0KS5jYWxsKHRo''@;'; put 'put ''aXMpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsbG8odGhpcyxSNikpLE5zKHRoaXMsUngsdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIub2JzZXJ2ZU1hcENoYW5nZShsbyh0aGlzLFI2KSwoKT0+e3RoaXMuaG90LnZpZXc/LmludmFsaWRhdGVS''@;'; put 'put ''b3dIZWlnaHRDYWNoZSgpfSkpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVpZ2h0Iixsbyh0aGlzLFJmZSkpLHRoaXMuYmluZEV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVy''@;'; put 'put ''LnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtsbyh0aGlzLFJ4KSYmKGxvKHRoaXMsUngpLmNhbGwodGhpcyksTnModGhpcyxSeCxudWxsKSksTnModGhpcyxnRixsbyh0aGlzLFI2KS5nZXRWYWx1ZXMoKSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlz''@;'; put 'put ''LnBsdWdpbk5hbWUpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1zYXZlTWFudWFsUm93SGVpZ2h0cygpe0JXKCJgc2F2ZU1hbnVhbFJvd0hlaWdodHMoKWAgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuIFRoZSBQZXJzaXN0ZW50U3Rh''@;'; put 'put ''dGUgcGx1Z2luIGhhcyBiZWVuIHJlbW92ZWQuIil9bG9hZE1hbnVhbFJvd0hlaWdodHMoKXtyZXR1cm4gQlcoImBsb2FkTWFudWFsUm93SGVpZ2h0cygpYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gVGhlIFBlcnNpc3RlbnRT''@;'; put 'put ''dGF0ZSBwbHVnaW4gaGFzIGJlZW4gcmVtb3ZlZC4iKSxbXX1zZXRNYW51YWxTaXplKGUsdCl7Y29uc3Qgcj10aGlzLmhvdC50b1BoeXNpY2FsUm93KGUpLGk9TWF0aC5tYXgodCx0aGlzLmhvdC5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQoKT8/MCk7cmV0dXJuIG51bGwhPT1y''@;'; put 'put ''JiZsbyh0aGlzLFI2KS5zZXRWYWx1ZUF0SW5kZXgocixpKSxpfWdldExhc3REZXNpcmVkUm93SGVpZ2h0KCl7cmV0dXJuIGxvKHRoaXMsa3gpPz8wfXNldHVwSGFuZGxlUG9zaXRpb24oZSl7aWYoSlZlKGUsbG8odGhpcyxPXykpKXJldHVybjtOcyh0aGlzLHQzLGUpO2NvbnN0e3ZpZXc6dH09''@;'; put 'put ''dGhpcy5ob3Qse193dDpyfT10LGk9ci53dFRhYmxlLmdldENvb3Jkcyhsbyh0aGlzLHQzKSk7aWYoIWkpcmV0dXJuO2NvbnN0IG89aS5yb3c7aWYobnVsbD09PW98fG88MClyZXR1cm47Y29uc3QgYT1aZChsbyh0aGlzLHQzKSksbD1vPHIuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksdT1v''@;'; put 'put ''Pj10LmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcygwLDEpLXIuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik7bGV0IGc7Y29uc3QgRT1pLnJvdz8/MCxPPWkuY29sPz8wO2w/Zz1yLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0''@;'; put 'put ''aW9uKGxvKHRoaXMsdDMpLEUsTyk6dSYmKGc9ci53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbihsbyh0aGlzLHQzKSxFLE8pKSxnfHwoZz1yLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFJlbGF0aXZlQ2Vs''@;'; put 'put ''bFBvc2l0aW9uKGxvKHRoaXMsdDMpLEUsTykpLE5zKHRoaXMsQXgsdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChvKSksTnModGhpcyxRMyxbXSk7Y29uc3QgWj10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fHRoaXMu''@;'; put 'put ''aG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKTt0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpJiZaJiZYbih0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCk/P1tdLHZlPT57Y29uc3QgTWU9dmUuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3csSGU9dmUuZ2V0Qm90dG9t''@;'; put 'put ''U3RhcnRDb3JuZXIoKS5yb3c7bnVsbD09PU1lfHxudWxsPT09SGV8fFZhKE1lLEhlLFdlPT57bG8odGhpcyxRMykuaW5jbHVkZXMoV2UpfHxsbyh0aGlzLFEzKS5wdXNoKFdlKX0pfSksbnVsbCE9PWxvKHRoaXMsQXgpJiYobG8odGhpcyxRMykuaW5jbHVkZXMobG8odGhpcyxBeCkpfHxOcyh0''@;'; put 'put ''aGlzLFEzLFtsbyh0aGlzLEF4KV0pLGcmJihOcyh0aGlzLGhGLGcudG9wLTYpLE5zKHRoaXMsSzcsSGgobG8odGhpcyx0MykpKSxOcyh0aGlzLHYkLFhWZShsbyh0aGlzLHQzKSwidmVydGljYWwiKSksbG8odGhpcyxyZikuc3R5bGUudG9wPWAke2xvKHRoaXMsaEYpK2xvKHRoaXMsSzcpfXB4''@;'; put 'put ''YCxsbyh0aGlzLHJmKS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7Zy5zdGFydH1weGAsbG8odGhpcyxyZikuc3R5bGUud2lkdGg9YCR7YX1weGAsdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQobG8odGhpcyxyZikpKSl9cmVmcmVzaEhhbmRsZVBvc2l0aW9uKCl7bG8odGhpcyxy''@;'; put 'put ''Zikuc3R5bGUudG9wPWAkeyhsbyh0aGlzLGhGKT8/MCkrKGxvKHRoaXMsa3gpPz8wKX1weGB9c2V0dXBHdWlkZVBvc2l0aW9uKCl7Y29uc3QgZT1aZChsbyh0aGlzLHJmKSksdD1OdW1iZXIucGFyc2VJbnQobG8odGhpcyxyZikuc3R5bGVbdGhpcy5pbmxpbmVEaXJdLDEwKStlLHI9dGhpcy5o''@;'; put 'put ''b3Qudmlldy5nZXRUYWJsZVdpZHRoKCk7WXIobG8odGhpcyxyZiksImFjdGl2ZSIpLFlyKGxvKHRoaXMsVjQpLCJhY3RpdmUiKSxsbyh0aGlzLFY0KS5zdHlsZS50b3A9bG8odGhpcyxyZikuc3R5bGUudG9wLGxvKHRoaXMsVjQpLnN0eWxlW3RoaXMuaW5saW5lRGlyXT1gJHt0fXB4YCxsbyh0''@;'; put 'put ''aGlzLFY0KS5zdHlsZS53aWR0aD1yLWUrInB4Iix0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZChsbyh0aGlzLFY0KSl9cmVmcmVzaEd1aWRlUG9zaXRpb24oKXtsbyh0aGlzLFY0KS5zdHlsZS50b3A9bG8odGhpcyxyZikuc3R5bGUudG9wfWhpZGVIYW5kbGVBbmRHdWlkZSgpe2tv''@;'; put 'put ''KGxvKHRoaXMscmYpLCJhY3RpdmUiKSxrbyhsbyh0aGlzLFY0KSwiYWN0aXZlIil9Y2hlY2tJZlJvd0hlYWRlcihlKXtjb25zdCB0PVZ2KGUsWyJUQk9EWSJdLHRoaXMuaG90LnJvb3RFbGVtZW50KSx7aW5saW5lU3RhcnRPdmVybGF5OnIsdG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5Omks''@;'; put 'put ''Ym90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5Om99PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXM7cmV0dXJuW3IuY2xvbmU/Lnd0VGFibGUuVEJPRFksaS5jbG9uZT8ud3RUYWJsZS5UQk9EWSxvLmNsb25lPy53dFRhYmxlLlRCT0RZXS5pbmNsdWRlcyh0KX1nZXRDbG9zZXN0VEhQ''@;'; put 'put ''YXJlbnQoZSl7cmV0dXJuIlRBQkxFIiE9PWUudGFnTmFtZT8iVEgiPT09ZS50YWdOYW1lP2U6dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQoZS5wYXJlbnROb2RlKTpudWxsfWdldEFjdHVhbFJvd0hlaWdodChlKXtjb25zdCB0PXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0Um93SGVpZ2h0''@;'; put 'put ''KGUpO3JldHVybiB2b2lkIDAhPT10JiZudWxsIT09bG8odGhpcyxvZykmJmxvKHRoaXMsb2cpPHQ/dDpsbyh0aGlzLG9nKX1hZnRlck1vdXNlRG93blRpbWVvdXQoKXtjb25zdCBlPWVCZShsbyh0aGlzLHQzKSxsbyh0aGlzLE9fKSksdD0oKT0+e3RoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVu''@;'; put 'put ''dHNTaXplKCksdGhpcy5ob3QucmVuZGVyKCl9LHI9KGksbyk9Pntjb25zdCBhPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGkpLGksITApOyExIT09YSYmKCJudW1iZXIiPT10eXBlb2YgYSYmTnModGhpcyxvZyxhKSx0aGlzLnNl''@;'; put 'put ''dE1hbnVhbFNpemUoaSxsbyh0aGlzLG9nKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93UmVzaXplIix0aGlzLmdldEFjdHVhbFJvd0hlaWdodChpKSxpLCEwKSxvJiZ0KCkpfTtsbyh0aGlzLE9fKT49MiYmKGxvKHRoaXMsUTMpLmxlbmd0aD4xPyhYbihsbyh0aGlzLFEzKSxvPT57cihv''@;'; put 'put ''KX0pLHQoKSk6WG4obG8odGhpcyxRMyksbz0+e3IobywhMCl9KSksTnModGhpcyxwRixudWxsKSxOcyh0aGlzLE9fLDApLGUmJmxvKHRoaXMsdDMpJiZ0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24obG8odGhpcyx0MykpfWJpbmRFdmVudHMoKXtjb25zdHtyb290RWxlbWVudDplLHJvb3RXaW5k''@;'; put 'put ''b3c6dH09dGhpcy5ob3Q7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihlLCJtb3VzZW92ZXIiLHI9PlR4KHRoaXMsd0JlLHVHdCkuY2FsbCh0aGlzLHIpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGUsIm1vdXNlZG93biIscj0+VHgodGhpcyxDQmUsZEd0''@;'; put 'put ''KS5jYWxsKHRoaXMscikpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodCwibW91c2Vtb3ZlIixyPT5UeCh0aGlzLFNCZSxoR3QpLmNhbGwodGhpcyxyKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0LCJtb3VzZXVwIiwoKT0+VHgodGhpcyxFQmUsZkd0''@;'; put 'put ''KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGxvKHRoaXMscmYpLCJjb250ZXh0bWVudSIsKCk9PlR4KHRoaXMsTUJlLHBHdCkuY2FsbCh0aGlzKSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx4eCh0aGlz''@;'; put 'put ''LHdCZSkseHgodGhpcyxDQmUpLHh4KHRoaXMsU0JlKSx4eCh0aGlzLEVCZSkseHgodGhpcyxNQmUpLHh4KHRoaXMsVEJlKSxRMSh0aGlzLHQzLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxRMSh0aGlzLEF4LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxRMSh0aGlzLFEzLHt3cml0''@;'; put 'put ''YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxRMSh0aGlzLGt4LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxRMSh0aGlzLG9nLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxRMSh0aGlzLG0kLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxRMSh0aGlzLEs3LHt3cml0YWJsZTohMCx2''@;'; put 'put ''YWx1ZTp2b2lkIDB9KSxRMSh0aGlzLGhGLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxRMSh0aGlzLHYkLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxRMSh0aGlzLHJmLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxRMSh0aGlzLFY0LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lk''@;'; put 'put ''IDB9KSxRMSh0aGlzLExfLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxRMSh0aGlzLGZGLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxRMSh0aGlzLE9fLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxRMSh0aGlzLHBGLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxRMSh0''@;'; put 'put ''aGlzLFI2LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxRMSh0aGlzLFJ4LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxRMSh0aGlzLGdGLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxRMSh0aGlzLFJmZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksTnModGhpcyx0Myxu''@;'; put 'put ''dWxsKSxOcyh0aGlzLEF4LG51bGwpLE5zKHRoaXMsUTMsW10pLE5zKHRoaXMsa3gsbnVsbCksTnModGhpcyxvZyxudWxsKSxOcyh0aGlzLG0kLG51bGwpLE5zKHRoaXMsSzcsbnVsbCksTnModGhpcyxoRixudWxsKSxOcyh0aGlzLHYkLDEpLE5zKHRoaXMscmYsdGhpcy5ob3Qucm9vdERvY3Vt''@;'; put 'put ''ZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpKSxOcyh0aGlzLFY0LHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSksTnModGhpcyxMXywhMSksTnModGhpcyxmRiwhMSksTnModGhpcyxPXywwKSxOcyh0aGlzLHBGLG51bGwpLE5zKHRoaXMsUngsbnVsbCksTnModGhp''@;'; put 'put ''cyxSZmUsKHQscik9PntsZXQgaT10O2lmKHRoaXMuZW5hYmxlZCl7Y29uc3Qgbz10aGlzLmhvdC50b1BoeXNpY2FsUm93KHIpLGE9bG8odGhpcyxSNikuZ2V0VmFsdWVBdEluZGV4KG8pO3RoaXMuaG90LmdldFNldHRpbmdzKClbZyRdJiZhJiYoaT10aGlzLmhvdC5nZXRQbHVnaW4oImF1dG9S''@;'; put 'put ''b3dTaXplIik/LmlzRW5hYmxlZCgpP01hdGgubWF4KGEsaT8/MCk6YSl9cmV0dXJuIGl9KSxZcihsbyh0aGlzLHJmKSwibWFudWFsUm93UmVzaXplciIpLFlyKGxvKHRoaXMsVjQpLCJtYW51YWxSb3dSZXNpemVyR3VpZGUiKX19ZnVuY3Rpb24gdUd0KG4pe2lmKCFEc2UoQWEobikpJiYhMCE9''@;'; put 'put ''PWxvKHRoaXMsZkYpJiZ0aGlzLmNoZWNrSWZSb3dIZWFkZXIoQWEobikpKXtjb25zdCBlPXRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KEFhKG4pKTtlJiYobG8odGhpcyxMXyl8fHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihlKSl9fWZ1bmN0aW9uIGRHdChuKXtBYShuKS5wYXJlbnROb2RlPT09''@;'; put 'put ''dGhpcy5ob3Qucm9vdEVsZW1lbnQmJkxhKEFhKG4pLCJtYW51YWxSb3dSZXNpemVyIikmJih0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24obG8odGhpcyx0MykpLHRoaXMuc2V0dXBHdWlkZVBvc2l0aW9uKCksTnModGhpcyxMXywhMCksbnVsbD09PWxvKHRoaXMscEYpJiZOcyh0aGlzLHBGLHRo''@;'; put 'put ''aXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PnRoaXMuYWZ0ZXJNb3VzZURvd25UaW1lb3V0KCksNTAwKSksTnModGhpcyxPXyxsbyh0aGlzLE9fKSsxKSxOcyh0aGlzLG0kLG4ucGFnZVkpLE5zKHRoaXMsb2csbG8odGhpcyxLNykpKX1mdW5jdGlvbiBoR3Qobil7aWYobG8odGhpcyxMXykp''@;'; put 'put ''e2NvbnN0IHQ9UVZlKG4ucGFnZVktKGxvKHRoaXMsbSQpPz8wKSxsbyh0aGlzLHYkKSk7TnModGhpcyxreCwobG8odGhpcyxLNyk/PzApK3QpLFhuKGxvKHRoaXMsUTMpLHI9PntOcyh0aGlzLG9nLHRoaXMuc2V0TWFudWFsU2l6ZShyLGxvKHRoaXMsa3gpKSl9KSx0aGlzLnJlZnJlc2hIYW5k''@;'; put 'put ''bGVQb3NpdGlvbigpLHRoaXMucmVmcmVzaEd1aWRlUG9zaXRpb24oKX19ZnVuY3Rpb24gZkd0KCl7Y29uc3Qgbj0oKT0+e3RoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ob3QucmVuZGVyKCl9LGU9KHQscik9Pntjb25zdCBpPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZv''@;'; put 'put ''cmVSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KHQpLHQsITEpOyExPT09aT8odGhpcy5zZXRNYW51YWxTaXplKHQsbG8odGhpcyxLNykpLE5zKHRoaXMsb2csbG8odGhpcyxLNykpKToibnVtYmVyIj09dHlwZW9mIGkmJihOcyh0aGlzLG9nLGkpLHRoaXMuc2V0TWFudWFsU2l6''@;'; put 'put ''ZSh0LGxvKHRoaXMsb2cpKSksciYmbigpLCExIT09aSYmdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93UmVzaXplIix0aGlzLmdldEFjdHVhbFJvd0hlaWdodCh0KSx0LCExKX07bG8odGhpcyxMXykmJih0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgpLE5zKHRoaXMsTF8sITEpLGxvKHRoaXMs''@;'; put 'put ''b2cpIT09bG8odGhpcyxLNykmJihsbyh0aGlzLFEzKS5sZW5ndGg+MT8oWG4obG8odGhpcyxRMykscj0+e2Uocil9KSxuKCkpOlhuKGxvKHRoaXMsUTMpLHI9PntlKHIsITApfSkpLHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihsbyh0aGlzLHQzKSkpfWZ1bmN0aW9uIHBHdCgpe3RoaXMuaGlk''@;'; put 'put ''ZUhhbmRsZUFuZEd1aWRlKCksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQobG8odGhpcyxyZikpLHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKGxvKHRoaXMsVjQpKSxOcyh0aGlzLExfLCExKSxOcyh0aGlzLGZGLCEwKSx0aGlzLmhvdC5fcmVnaXN0ZXJNaWNyb3Rh''@;'; put 'put ''c2soKCk9PntOcyh0aGlzLGZGLCExKX0pfWZ1bmN0aW9uIGdHdCgpe2NvbnN0IG49dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtnJF07dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntBcnJheS5pc0FycmF5KG4pPyhuLmZvckVhY2goKGUsdCk9Pntsbyh0aGlzLFI2KS5zZXRWYWx1ZUF0SW5k''@;'; put 'put ''ZXgodCxlKX0pLE5zKHRoaXMsZ0YsbikpOiEwPT09biYmQXJyYXkuaXNBcnJheShsbyh0aGlzLGdGKSkmJmxvKHRoaXMsZ0YpLmZvckVhY2goKGUsdCk9Pntsbyh0aGlzLFI2KS5zZXRWYWx1ZUF0SW5kZXgodCxlKX0pfSwhMCl9ZnVuY3Rpb24geEJlKG4sZSx0KXtpZighZS5oYXMobikpdGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIEFCZShuLGUpe3JldHVybiBmdW5jdGlvbiB2R3QobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShu''@;'; put 'put ''LHhCZShuLGUsImdldCIpKX1mdW5jdGlvbiBtRihuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIF9HdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBm''@;'; put 'put ''aWVsZCIpO2UudmFsdWU9dH19KG4seEJlKG4sZSwic2V0IiksdCksdH12YXIgTl89bmV3IFdlYWtNYXA7Y29uc3QgSTY9Y2xhc3MgYkd0e3N0YXRpYyBORUdBVElWRV9WQUxVRVNfV0FSTklORyh7cm93OmUsY29sOnQscm93c3BhbjpyLGNvbHNwYW46aX0pe3JldHVybiB5Y2BUaGUgbWVyZ2Vk''@;'; put 'put ''IGNlbGwgZGVjbGFyZWQgd2l0aCB7cm93OiAke2V9LCBjb2w6ICR7dH0sXHgyMAogICAgICByb3dzcGFuOiAke3J9LCBjb2xzcGFuOiAke2l9fSBjb250YWlucyBuZWdhdGl2ZSB2YWx1ZXMsIHdoaWNoIGlzXHgyMAogICAgICBub3Qgc3VwcG9ydGVkLiBJdCB3aWxsIG5vdCBiZSBhZGRlZCB0''@;'; put 'put ''byB0aGUgY29sbGVjdGlvbi5gfXN0YXRpYyBJU19PVVRfT0ZfQk9VTkRTX1dBUk5JTkcoe3JvdzplLGNvbDp0fSl7cmV0dXJuIHljYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHtlfSwgJHt0fV0gaXMgcG9zaXRpb25lZFx4MjAKICAgICAgKG9yIHBvc2l0aW9uZWQgcGFydGlhbGx5''@;'; put 'put ''KSBvdXRzaWRlIG9mIHRoZSB0YWJsZSByYW5nZS4gSXQgd2FzIG5vdCBhZGRlZCB0byB0aGUgdGFibGUsIHBsZWFzZSBmaXggeW91ciBzZXR1cC5gfXN0YXRpYyBJU19TSU5HTEVfQ0VMTCh7cm93OmUsY29sOnR9KXtyZXR1cm4geWNgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2V9''@;'; put 'put ''LCAke3R9XSBoYXMgYm90aCAicm93c3BhbiJceDIwCiAgICAgIGFuZCAiY29sc3BhbiIgZGVjbGFyZWQgYXMgIjEiLCB3aGljaCBtYWtlcyBpdCBhIHNpbmdsZSBjZWxsLiBJdCBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uYH1zdGF0aWMgWkVST19TUEFOX1dBUk5JTkcoe3Jv''@;'; put 'put ''dzplLGNvbDp0fSl7cmV0dXJuIHljYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHtlfSwgJHt0fV0gaGFzICJyb3dzcGFuIlx4MjAKICAgICAgb3IgImNvbHNwYW4iIGRlY2xhcmVkIGFzICIwIiwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4gSXQgY2Fubm90IGJlIGFkZGVkIHRvIHRo''@;'; put 'put ''ZSBjb2xsZWN0aW9uLmB9c3RhdGljIGNvbnRhaW5zTmVnYXRpdmVWYWx1ZXMoe3JvdzplLGNvbDp0LHJvd3NwYW46cixjb2xzcGFuOml9KXtyZXR1cm4gZTwwfHx0PDB8fHI8MHx8aTwwfXN0YXRpYyBpc1NpbmdsZUNlbGwoe3Jvd3NwYW46ZSxjb2xzcGFuOnR9KXtyZXR1cm4gMT09PXQmJjE9''@;'; put 'put ''PT1lfXN0YXRpYyBjb250YWluc1plcm9TcGFuKHtyb3dzcGFuOmUsY29sc3Bhbjp0fSl7cmV0dXJuIDA9PT10fHwwPT09ZX1zdGF0aWMgaXNPdXRPZkJvdW5kcyhlLHQscil7cmV0dXJuIGUucm93PDB8fGUuY29sPDB8fGUucm93Pj10fHxlLnJvdytlLnJvd3NwYW4tMT49dHx8ZS5jb2w+PXJ8''@;'; put 'put ''fGUuY29sK2UuY29sc3Bhbi0xPj1yfW5vcm1hbGl6ZShlKXtjb25zdCB0PWUuY291bnRSb3dzKCkscj1lLmNvdW50Q29scygpO3RoaXMucm93PDA/dGhpcy5yb3c9MDp0aGlzLnJvdz50LTEmJih0aGlzLnJvdz10LTEpLHRoaXMuY29sPDA/dGhpcy5jb2w9MDp0aGlzLmNvbD5yLTEmJih0aGlz''@;'; put 'put ''LmNvbD1yLTEpLHRoaXMucm93K3RoaXMucm93c3Bhbj50LTEmJih0aGlzLnJvd3NwYW49dC10aGlzLnJvdyksdGhpcy5jb2wrdGhpcy5jb2xzcGFuPnItMSYmKHRoaXMuY29sc3Bhbj1yLXRoaXMuY29sKSxtRih0aGlzLE5fLG51bGwpfWluY2x1ZGVzKGUsdCl7cmV0dXJuIHRoaXMucm93PD1l''@;'; put 'put ''JiZ0aGlzLmNvbDw9dCYmdGhpcy5yb3crdGhpcy5yb3dzcGFuLTE+PWUmJnRoaXMuY29sK3RoaXMuY29sc3Bhbi0xPj10fWluY2x1ZGVzSG9yaXpvbnRhbGx5KGUpe3JldHVybiB0aGlzLmNvbDw9ZSYmdGhpcy5jb2wrdGhpcy5jb2xzcGFuLTE+PWV9aW5jbHVkZXNWZXJ0aWNhbGx5KGUpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnJvdzw9ZSYmdGhpcy5yb3crdGhpcy5yb3dzcGFuLTE+PWV9c2hpZnQoZSx0KXtjb25zdCByPWVbMF18fGVbMV0saT10K01hdGguYWJzKGVbMF18fGVbMV0pLTEsbz1lWzBdPyJjb2xzcGFuIjoicm93c3BhbiIsYT1lWzBdPyJjb2wiOiJyb3ciLGw9TWF0aC5taW4odCxpKSx1''@;'; put 'put ''PU1hdGgubWF4KHQsaSksZz10aGlzW2FdLEU9dGhpc1thXSt0aGlzW29dLTE7aWYoZz49dCYmKHRoaXNbYV0rPXIpLHI+MCl0PD1FJiZ0PmcmJih0aGlzW29dKz1yKTtlbHNlIGlmKHI8MCl7aWYobDw9ZyYmdT49RSlyZXR1cm4gdGhpcy5yZW1vdmVkPSEwLG1GKHRoaXMsTl8sbnVsbCksITE7''@;'; put 'put ''aWYoZz49bCYmZzw9dSl7Y29uc3QgTz11LWcrMSxaPU1hdGguYWJzKHIpLU87dGhpc1thXS09WityLHRoaXNbb10tPU99ZWxzZSBnPD1sJiZFPj11P3RoaXNbb10rPXI6Zzw9bCYmRT49bCYmRTx1JiYodGhpc1tvXS09RS1sKzEpfXJldHVybiBtRih0aGlzLE5fLG51bGwpLCEwfWlzRmFydGhl''@;'; put 'put ''cihlLHQpe3JldHVybiFlfHwoImRvd24iPT09dD9lLnJvdytlLnJvd3NwYW4tMTx0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMToidXAiPT09dD9lLnJvdz50aGlzLnJvdzoicmlnaHQiPT09dD9lLmNvbCtlLmNvbHNwYW4tMTx0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMToibGVmdCI9PT10P2UuY29s''@;'; put 'put ''PnRoaXMuY29sOm51bGwpfWdldExhc3RSb3coKXtyZXR1cm4gdGhpcy5yb3crdGhpcy5yb3dzcGFuLTF9Z2V0TGFzdENvbHVtbigpe3JldHVybiB0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMX1nZXRSYW5nZSgpe3JldHVybiBBQmUodGhpcyxOXyl8fG1GKHRoaXMsTl8sdGhpcy5jZWxsUmFuZ2VG''@;'; put 'put ''YWN0b3J5KHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5yb3csdGhpcy5jb2wpLHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5yb3csdGhpcy5jb2wpLHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5nZXRMYXN0Um93KCksdGhpcy5nZXRMYXN0Q29sdW1uKCkpKSksQUJlKHRoaXMs''@;'; put 'put ''Tl8pfWNvbnN0cnVjdG9yKGUsdCxyLGksbyxhKXsoZnVuY3Rpb24geUd0KG4sZSx0KXsoZnVuY3Rpb24gbUd0KG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3Qi''@;'; put 'put ''KX0pKG4sZSksZS5zZXQobix0KX0pKHRoaXMsTl8se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHRoaXMucmVtb3ZlZD0hMSxtRih0aGlzLE5fLG51bGwpLHRoaXMucm93PWUsdGhpcy5jb2w9dCx0aGlzLnJvd3NwYW49cix0aGlzLmNvbHNwYW49aSx0aGlzLmNlbGxDb29yZHNGYWN0b3J5''@;'; put 'put ''PW8sdGhpcy5jZWxsUmFuZ2VGYWN0b3J5PWF9fTtmdW5jdGlvbiBoQyhuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiBJZmUobixlKXsoZnVuY3Rp''@;'; put 'put ''b24gd0d0KG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sZSksZS5hZGQobil9dmFyIHZGPW5ldyBXZWFrU2V0LERmZT1uZXcgV2Vha1NldCxrQmU9''@;'; put 'put ''bmV3IFdlYWtTZXQ7Y2xhc3MgX0Z7c3RhdGljIElTX09WRVJMQVBQSU5HX1dBUk5JTkcoe3JvdzplLGNvbDp0fSl7cmV0dXJuIHljYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHtlfSwgJHt0fV0sIG92ZXJsYXBzXHgyMAogICAgICB3aXRoIHRoZSBvdGhlciBkZWNsYXJlZCBtZXJn''@;'; put 'put ''ZWQgY2VsbC4gVGhlIG92ZXJsYXBwaW5nIG1lcmdlZCBjZWxsIHdhcyBub3QgYWRkZWQgdG8gdGhlIHRhYmxlLCBwbGVhc2VceDIwCiAgICAgIGZpeCB5b3VyIHNldHVwLmB9Z2V0KGUsdCl7cmV0dXJuISF0aGlzLm1lcmdlZENlbGxzTWF0cml4LmhhcyhlKSYmKHRoaXMubWVyZ2VkQ2VsbHNN''@;'; put 'put ''YXRyaXguZ2V0KGUpLmdldCh0KT8/ITEpfWdldEJ5UmFuZ2UoZSl7Y29uc3R7cm93OnQsY29sOnJ9PWUuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OmksY29sOm99PWUuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7aWYobnVsbD09PXR8fG51bGw9PT1pfHxudWxsPT09cnx8bnVsbD09PW8pcmV0dXJu''@;'; put 'put ''ITE7Y29uc3QgYT10aGlzLm1lcmdlZENlbGxzLmxlbmd0aDtsZXQgbD0hMTtmb3IobGV0IHU9MDt1PGE7dSsrKXtjb25zdCBnPXRoaXMubWVyZ2VkQ2VsbHNbdV0se3JvdzpFLGNvbDpPLHJvd3NwYW46Wixjb2xzcGFuOmVlfT1nO2lmKEU+PXQmJkUrWi0xPD1pJiZPPj1yJiZPK2VlLTE8PW8p''@;'; put 'put ''e2w9ZzticmVha319cmV0dXJuIGx9ZmlsdGVyT3ZlcmxhcHBpbmdNZXJnZUNlbGxzKGUpe2NvbnN0IHQ9bmV3IFNldDtyZXR1cm4gdGhpcy5tZXJnZWRDZWxscy5mb3JFYWNoKGk9Pntjb25zdHtyb3c6byxjb2w6YSxjb2xzcGFuOmwscm93c3Bhbjp1fT1pO2ZvcihsZXQgZz1vO2c8byt1O2cr''@;'; put 'put ''Kylmb3IobGV0IEU9YTtFPGErbDtFKyspdC5hZGQoYHIke2d9LGMke0V9YCl9KSxlLmZpbHRlcihpPT57Y29uc3R7cm93Om8sY29sOmEsY29sc3BhbjpsLHJvd3NwYW46dX09aSxnPW5ldyBTZXQ7bGV0IEU9ITE7Zm9yKGxldCBPPW87TzxvK3U7TysrKXtmb3IobGV0IFo9YTtaPGErbDtaKysp''@;'; put 'put ''e2NvbnN0IGVlPWByJHtPfSxjJHtafWA7aWYodC5oYXMoZWUpKXtIYShfRi5JU19PVkVSTEFQUElOR19XQVJOSU5HKGkpKSxFPSEwO2JyZWFrfWcuYWRkKGVlKX1pZihFKWJyZWFrfXJldHVybiBFfHxnLmZvckVhY2goTz0+dC5hZGQoTykpLCFFfSl9Z2V0V2l0aGluUmFuZ2UoZSx0PSExKXtj''@;'; put 'put ''b25zdHtyb3c6cixjb2w6aX09ZS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6byxjb2w6YX09ZS5nZXRCb3R0b21FbmRDb3JuZXIoKTtpZihudWxsPT09cnx8bnVsbD09PW98fG51bGw9PT1pfHxudWxsPT09YSlyZXR1cm5bXTtjb25zdCBsPVtdO2ZvcihsZXQgdT1yO3U8PW87dSsrKWZvcihs''@;'; put 'put ''ZXQgZz1pO2c8PWE7ZysrKXtjb25zdCBFPXRoaXMuZ2V0KHUsZyk7RSYmKHR8fCF0JiZFLnJvdz09PXUmJkUuY29sPT09ZykmJmwucHVzaChFKX1yZXR1cm4gbH1hZGQoZSx0PSExKXtjb25zdCByPWUucm93LGk9ZS5jb2wsbD1uZXcgSTYocixpLGUucm93c3BhbixlLmNvbHNwYW4sdGhpcy5o''@;'; put 'put ''b3QuX2NyZWF0ZUNlbGxDb29yZHMsdGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSksdT10aGlzLmdldChyLGkpLGc9IXQmJnRoaXMuaXNPdmVybGFwcGluZyhsKTtyZXR1cm4gdXx8Zz8oZyYmSGEoX0YuSVNfT1ZFUkxBUFBJTkdfV0FSTklORyhsKSksITEpOih0aGlzLmhvdCYmbC5ub3JtYWxp''@;'; put 'put ''emUodGhpcy5ob3QpLHRoaXMubWVyZ2VkQ2VsbHMucHVzaChsKSxoQyh0aGlzLERmZSxSQmUpLmNhbGwodGhpcyxsKSxsKX1yZW1vdmUoZSx0KXtjb25zdCByPXRoaXMuZ2V0KGUsdCksaT1yP3RoaXMubWVyZ2VkQ2VsbHMuaW5kZXhPZihyKTotMTtyZXR1cm4hKCFyfHwtMT09PWkpJiYodGhp''@;'; put 'put ''cy5tZXJnZWRDZWxscy5zcGxpY2UoaSwxKSxoQyh0aGlzLGtCZSxDR3QpLmNhbGwodGhpcyxyKSxyKX1jbGVhcigpe1huKHRoaXMubWVyZ2VkQ2VsbHMsKHtyb3c6ZSxjb2w6dCxyb3dzcGFuOnIsY29sc3BhbjppfSk9PntWYShlLGUrcixvPT57VmEodCx0K2ksYT0+e2NvbnN0IGw9dGhpcy5o''@;'; put 'put ''b3QuZ2V0Q2VsbChvLGEpO2wmJihsLnJlbW92ZUF0dHJpYnV0ZSgicm93c3BhbiIpLGwucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksbC5zdHlsZS5kaXNwbGF5PSIiKX0pfSl9KSx0aGlzLm1lcmdlZENlbGxzLmxlbmd0aD0wLHRoaXMubWVyZ2VkQ2VsbHNNYXRyaXg9bmV3IE1hcH1pc092''@;'; put 'put ''ZXJsYXBwaW5nKGUpe2NvbnN0IHQ9ZS5nZXRSYW5nZSgpO2lmKCF0KXJldHVybiExO2ZvcihsZXQgcj0wO3I8dGhpcy5tZXJnZWRDZWxscy5sZW5ndGg7cisrKXtjb25zdCBvPXRoaXMubWVyZ2VkQ2VsbHNbcl0uZ2V0UmFuZ2UoKTtpZihvJiZvLm92ZXJsYXBzKHQpKXJldHVybiEwfXJldHVy''@;'; put 'put ''biExfWlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2VsbChlLHQpe2NvbnN0IHI9dGhpcy5nZXQoZSx0KTtpZighcilyZXR1cm4hMTtjb25zdHtyb3c6aSxjb2w6byxyb3dzcGFuOmEsY29sc3BhbjpsfT1yLHU9dGhpcy5ob3Qudmlldy5nZXRBY3RpdmVPdmVybGF5TmFtZSgpLGc9WyJ0b3AiLCJ0''@;'; put 'put ''b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKHUpPzA6dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKSxFPVsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiLCJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKHUpPzA6''@;'; put 'put ''dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSxPPVZzKGcsaSxpK2EtMSksWj1WcyhFLG8sbytsLTEpO3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTywxKT09PWUmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVy''@;'; put 'put ''LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChaLDEpPT09dH1nZXRGaXJzdFJlbmRlcmFibGVDb29yZHMoZSx0KXtjb25zdCByPXRoaXMuZ2V0KGUsdCk7aWYoIXJ8fHRoaXMuaXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxsKGUsdCkpcmV0dXJuIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRz''@;'; put 'put ''KGUsdCk7Y29uc3QgaT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoci5yb3csMSk/P3Iucm93LG89dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHIuY29sLDEpPz9yLmNvbDtyZXR1cm4gdGhpcy5ob3Qu''@;'; put 'put ''X2NyZWF0ZUNlbGxDb29yZHMoaSxvKX1nZXRTdGFydE1vc3RDb2x1bW5JbmRleChlLHQpe2NvbnN0IHI9aEModGhpcyx2RixfJCkuY2FsbCh0aGlzLGUsImNvbCIsLTEpO2xldCBpPXQ7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspaWYocltvXTw9dCl7aT1yW29dO2JyZWFrfXJldHVybiBp''@;'; put 'put ''fWdldEVuZE1vc3RDb2x1bW5JbmRleChlLHQpe2NvbnN0IHI9aEModGhpcyx2RixfJCkuY2FsbCh0aGlzLGUsImNvbCIsMSk7bGV0IGk9dDtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKylpZihyW29dPj10KXtpPXJbb107YnJlYWt9cmV0dXJuIGl9Z2V0VG9wTW9zdFJvd0luZGV4KGUsdCl7''@;'; put 'put ''Y29uc3Qgcj1oQyh0aGlzLHZGLF8kKS5jYWxsKHRoaXMsZSwicm93IiwtMSk7bGV0IGk9dDtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKylpZihyW29dPD10KXtpPXJbb107YnJlYWt9cmV0dXJuIGl9Z2V0Qm90dG9tTW9zdFJvd0luZGV4KGUsdCl7Y29uc3Qgcj1oQyh0aGlzLHZGLF8kKS5j''@;'; put 'put ''YWxsKHRoaXMsZSwicm93IiwxKTtsZXQgaT10O2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKWlmKHJbb10+PXQpe2k9cltvXTticmVha31yZXR1cm4gaX1zaGlmdENvbGxlY3Rpb25zKGUsdCxyKXtjb25zdCBpPVswLDBdO3N3aXRjaChlKXtjYXNlInJpZ2h0IjppWzBdKz1yO2JyZWFrO2Nh''@;'; put 'put ''c2UibGVmdCI6aVswXS09cjticmVhaztjYXNlImRvd24iOmlbMV0rPXI7YnJlYWs7Y2FzZSJ1cCI6aVsxXS09cn1jb25zdCBvPVtdO3RoaXMubWVyZ2VkQ2VsbHMuZm9yRWFjaChhPT57YS5zaGlmdChpLHQpLGEucmVtb3ZlZCYmby5wdXNoKGEpfSksby5mb3JFYWNoKGE9Pnt0aGlzLm1lcmdl''@;'; put 'put ''ZENlbGxzLnNwbGljZSh0aGlzLm1lcmdlZENlbGxzLmluZGV4T2YoYSksMSl9KSx0aGlzLm1lcmdlZENlbGxzTWF0cml4LmNsZWFyKCksdGhpcy5tZXJnZWRDZWxscy5mb3JFYWNoKGE9PntoQyh0aGlzLERmZSxSQmUpLmNhbGwodGhpcyxhKX0pfWNhcHR1cmVQaHlzaWNhbFNwYW5zKGUpe2Nv''@;'; put 'put ''bnN0IHQ9ImNvbHVtbiI9PT1lLHI9dD8iY29sIjoicm93IixpPXQ/ImNvbHNwYW4iOiJyb3dzcGFuIixvPXQ/bD0+dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTpsPT50aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpLGE9bmV3IE1hcDtyZXR1cm4gdGhpcy5tZXJnZWRDZWxscy5mb3JFYWNo''@;'; put 'put ''KGw9Pntjb25zdCB1PVtdO2ZvcihsZXQgZz0wO2c8bFtpXTtnKyspdS5wdXNoKG8obFtyXStnKSk7YS5zZXQobCx1KX0pLGF9c3RhdGljIGRldGVjdENvbnRpZ3VvdXNSdW5zKGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm5bXTtjb25zdCB0PVtdO2xldCByPWVbMF0saT0xO2ZvcihsZXQgbz0x''@;'; put 'put ''O288ZS5sZW5ndGg7bysrKWVbb109PT1lW28tMV0rMT9pKz0xOih0LnB1c2goe3N0YXJ0OnIsbGVuZ3RoOml9KSxyPWVbb10saT0xKTtyZXR1cm4gdC5wdXNoKHtzdGFydDpyLGxlbmd0aDppfSksdH10cmFuc2xhdGVBZnRlckF4aXNNb3ZlKGUsdCl7Y29uc3Qgcj0iY29sdW1uIj09PWUsaT1y''@;'; put 'put ''PyJjb2wiOiJyb3ciLG89cj8iY29sc3BhbiI6InJvd3NwYW4iLGE9cj8icm93IjoiY29sIixsPXI/InJvd3NwYW4iOiJjb2xzcGFuIix1PXI/RT0+dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oRSk6RT0+dGhpcy5ob3QudG9WaXN1YWxSb3coRSksZz1bXTt0aGlzLm1lcmdlZENlbGxzLmZvckVh''@;'; put 'put ''Y2goRT0+e2NvbnN0IE89dC5nZXQoRSk7aWYoIU8pcmV0dXJuIHZvaWQgZy5wdXNoKHtyb3c6RS5yb3csY29sOkUuY29sLHJvd3NwYW46RS5yb3dzcGFuLGNvbHNwYW46RS5jb2xzcGFufSk7Y29uc3QgWj1PLm1hcCh1KS5maWx0ZXIoZWU9Pm51bGwhPT1lZSYmZWU+PTApLnNvcnQoKGVlLHZl''@;'; put 'put ''KT0+ZWUtdmUpOzAhPT1aLmxlbmd0aCYmX0YuZGV0ZWN0Q29udGlndW91c1J1bnMoWikuZm9yRWFjaChlZT0+e2NvbnN0IHZlPXtbaV06ZWUuc3RhcnQsW29dOmVlLmxlbmd0aCxbYV06RVthXSxbbF06RVtsXX07MT09PXZlLmNvbHNwYW4mJjE9PT12ZS5yb3dzcGFufHxnLnB1c2godmUpfSl9''@;'; put 'put ''KSx0aGlzLm1lcmdlZENlbGxzLmxlbmd0aD0wLHRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguY2xlYXIoKSxnLmZvckVhY2goRT0+e3RoaXMuYWRkKEUsITApfSl9Y29uc3RydWN0b3IoZSl7SWZlKHRoaXMsdkYpLElmZSh0aGlzLERmZSksSWZlKHRoaXMsa0JlKSx0aGlzLm1lcmdlZENlbGxzPVtd''@;'; put 'put ''LHRoaXMubWVyZ2VkQ2VsbHNNYXRyaXg9bmV3IE1hcCx0aGlzLnBsdWdpbj1lLHRoaXMuaG90PWUuaG90fX1mdW5jdGlvbiBfJChuLGUsdD0xKXtjb25zdCByPW5ldyBNYXAsaT0xPT09dD9uLmdldFRvcFN0YXJ0Q29ybmVyKCk6bi5nZXRCb3R0b21FbmRDb3JuZXIoKSxvPTE9PT10P24uZ2V0''@;'; put 'put ''Qm90dG9tRW5kQ29ybmVyKCk6bi5nZXRUb3BTdGFydENvcm5lcigpLGw9aS5jb2w/PzAsdT1vLnJvdz8/MCxnPW8uY29sPz8wO2ZvcihsZXQgRT1pLnJvdz8/MDsxPT09dD9FPD11OkU+PXU7RSs9dClmb3IobGV0IE89bDsxPT09dD9PPD1nOk8+PWc7Tys9dCl7Y29uc3QgWj0icm93Ij09PWU/''@;'; put 'put ''RTpPLGVlPXRoaXMuZ2V0KEUsTyk7bGV0IHZlPVo7ZWUmJih2ZT0xPT09dD9lZVtlXStlZVtgJHtlfXNwYW5gXS0xOmVlW2VdKSxyLmhhcyhaKXx8ci5zZXQoWixuZXcgU2V0KSxyLmdldChaKS5hZGQodmUpfXJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoQXJyYXkuZnJvbShyLmVudHJpZXMo''@;'; put 'put ''KSkuZmlsdGVyKChbLEVdKT0+MT09PUUuc2l6ZSkuZmxhdE1hcCgoWyxFXSk9PkFycmF5LmZyb20oRSkpKSl9ZnVuY3Rpb24gUkJlKG4pe2ZvcihsZXQgZT1uLnJvdztlPG4ucm93K24ucm93c3BhbjtlKyspZm9yKGxldCB0PW4uY29sO3Q8bi5jb2wrbi5jb2xzcGFuO3QrKyl0aGlzLm1lcmdl''@;'; put 'put ''ZENlbGxzTWF0cml4LmhhcyhlKXx8dGhpcy5tZXJnZWRDZWxsc01hdHJpeC5zZXQoZSxuZXcgTWFwKSx0aGlzLm1lcmdlZENlbGxzTWF0cml4LmdldChlKS5zZXQodCxuKX1mdW5jdGlvbiBDR3Qobil7Zm9yKGxldCBlPW4ucm93O2U8bi5yb3crbi5yb3dzcGFuO2UrKylmb3IobGV0IHQ9bi5j''@;'; put 'put ''b2w7dDxuLmNvbCtuLmNvbHNwYW47dCsrKXRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguZ2V0KGUpPy5kZWxldGUodCl9Y29uc3QgU0d0PV9GLE1HdD1jbGFzcyBFR3R7Z2V0RGlyZWN0aW9uKGUsdCl7bGV0IHI9bnVsbDtyZXR1cm4gcj10WzBdPT09ZVswXSYmdFsxXT09PWVbMV0mJnRbM109PT1l''@;'; put 'put ''WzNdPyJkb3duIjp0WzJdPT09ZVsyXSYmdFsxXT09PWVbMV0mJnRbM109PT1lWzNdPyJ1cCI6dFsxXT09PWVbMV0mJnRbMl09PT1lWzJdPyJyaWdodCI6ImxlZnQiLHJ9c25hcERyYWdBcmVhKGUsdCxyLGkpe2NvbnN0IG89dC5zbGljZSgwKSxhPXRoaXMuZ2V0QXV0b2ZpbGxTaXplKGUsdCxy''@;'; put 'put ''KSxbbCx1LGcsRV09ZSxaPVsidXAiLCJkb3duIl0uaW5kZXhPZihyKT4tMT9nLWwrMTpFLXUrMSx2ZT1hLU1hdGguZmxvb3IoYS9aKSpaLE1lPXRoaXMuZ2V0RmFydGhlc3RDb2xsZWN0aW9uKGUsdCxyLGkpO2lmKE1lKWlmKCJkb3duIj09PXIpe2NvbnN0IEhlPU1lLnJvdytNZS5yb3dzcGFu''@;'; put 'put ''LWwtdmU7b1syXStIZT49dGhpcy5wbHVnaW4uaG90LmNvdW50Um93cygpP29bMl0tPXZlOm9bMl0rPXZlP0hlOjB9ZWxzZSBpZigicmlnaHQiPT09cil7Y29uc3QgSGU9TWUuY29sK01lLmNvbHNwYW4tdS12ZTtvWzNdK0hlPj10aGlzLnBsdWdpbi5ob3QuY291bnRDb2xzKCk/b1szXS09dmU6''@;'; put 'put ''b1szXSs9dmU/SGU6MH1lbHNlIGlmKCJ1cCI9PT1yKXtjb25zdCBIZT1nLXZlLU1lLnJvdysxO29bMF0rSGU8MD9vWzBdKz12ZTpvWzBdLT12ZT9IZTowfWVsc2UgaWYoImxlZnQiPT09cil7Y29uc3QgSGU9RS12ZS1NZS5jb2wrMTtvWzFdK0hlPDA/b1sxXSs9dmU6b1sxXS09dmU/SGU6MH1y''@;'; put 'put ''ZXR1cm4gdGhpcy51cGRhdGVDdXJyZW50RmlsbENhY2hlKHtiYXNlQXJlYTplLGRyYWdEaXJlY3Rpb246cixmb3VuZE1lcmdlZENlbGxzOmksZmlsbFNpemU6YSxkcmFnQXJlYTpvLGN5Y2xlTGVuZ3RoOlp9KSxvfXVwZGF0ZUN1cnJlbnRGaWxsQ2FjaGUoZSl7dGhpcy5jdXJyZW50RmlsbERh''@;'; put 'put ''dGF8fCh0aGlzLmN1cnJlbnRGaWxsRGF0YT17fSksWWQodGhpcy5jdXJyZW50RmlsbERhdGEsZSl9Z2V0QXV0b2ZpbGxTaXplKGUsdCxyKXtjb25zdFtpLG8sYSxsXT1lLFt1LGcsRSxPXT10O3N3aXRjaChyKXtjYXNlInVwIjpyZXR1cm4gaS11O2Nhc2UiZG93biI6cmV0dXJuIEUtYTtjYXNl''@;'; put 'put ''ImxlZnQiOnJldHVybiBvLWc7Y2FzZSJyaWdodCI6cmV0dXJuIE8tbDtkZWZhdWx0OnJldHVybiAwfX1nZXREcmFnQXJlYShlLHQscil7Y29uc3RbaSxvLGEsbF09ZSxbdSxnLEUsT109dDtzd2l0Y2gocil7Y2FzZSJ1cCI6cmV0dXJuW3UsZyxpLTEsbF07Y2FzZSJkb3duIjp7Y29uc3QgWj10''@;'; put 'put ''aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoRSxsKTtyZXR1cm5bYSsxLG8sRSsoWj9aLnJvd3NwYW4tMTowKSxsXX1jYXNlImxlZnQiOnJldHVyblt1LGcsYSxvLTFdO2Nhc2UicmlnaHQiOntjb25zdCBaPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChFLGwpO3JldHVybltp''@;'; put 'put ''LGwrKFo/Wi5jb2xzcGFuLTE6MCksRSxPXX1kZWZhdWx0OnJldHVyblswLDAsMCwwXX19Z2V0RmFydGhlc3RDb2xsZWN0aW9uKGUsdCxyLGkpe2NvbnN0W28sYSxsLHVdPWUsZz1bInVwIiwiZG93biJdLmluZGV4T2Yocik+LTEsRT1nP2w6dSxPPWc/bzphLFo9dGhpcy5nZXRBdXRvZmlsbFNp''@;'; put 'put ''emUoZSx0LHIpLGVlPWc/bC1vKzE6dS1hKzEsTWU9Wi1NYXRoLmZsb29yKFovZWUpKmVlO2xldCBIZT1udWxsLFdlPW51bGwsYXQ9bnVsbDtzd2l0Y2gocil7Y2FzZSJ1cCI6SGU9ImluY2x1ZGVzVmVydGljYWxseSIsYXQ9RS1NZSsxO2JyZWFrO2Nhc2UibGVmdCI6SGU9ImluY2x1ZGVzSG9y''@;'; put 'put ''aXpvbnRhbGx5IixhdD1FLU1lKzE7YnJlYWs7Y2FzZSJkb3duIjpIZT0iaW5jbHVkZXNWZXJ0aWNhbGx5IixhdD1PK01lLTE7YnJlYWs7Y2FzZSJyaWdodCI6SGU9ImluY2x1ZGVzSG9yaXpvbnRhbGx5IixhdD1PK01lLTF9cmV0dXJuIFhuKGksQ3Q9Pntjb25zdCBBdD1DdDtBdFtIZV0oYXQp''@;'; put 'put ''JiZBdC5pc0ZhcnRoZXIoV2UscikmJihXZT1BdCl9KSxXZX1yZWNyZWF0ZUFmdGVyRGF0YVBvcHVsYXRpb24oZSl7aWYoIXRoaXMuY3VycmVudEZpbGxEYXRhKXJldHVybjtjb25zdCB0PXRoaXMuZ2V0UmFuZ2VGcm9tQ2hhbmdlcyhlKSxyPXRoaXMuY3VycmVudEZpbGxEYXRhLmZvdW5kTWVy''@;'; put 'put ''Z2VkQ2VsbHMsaT10aGlzLmN1cnJlbnRGaWxsRGF0YS5kcmFnRGlyZWN0aW9uLG89KGcsRSk9Pntzd2l0Y2goaSl7Y2FzZSJ1cCI6cmV0dXJuIGcucm93LUU+PXQuZnJvbS5yb3c7Y2FzZSJkb3duIjpyZXR1cm4gZy5yb3crZy5yb3dzcGFuLTErRTw9dC50by5yb3c7Y2FzZSJsZWZ0IjpyZXR1''@;'; put 'put ''cm4gZy5jb2wtRT49dC5mcm9tLmNvbHVtbjtjYXNlInJpZ2h0IjpyZXR1cm4gZy5jb2wrZy5jb2xzcGFuLTErRTw9dC50by5jb2x1bW47ZGVmYXVsdDpyZXR1cm4gbnVsbH19O2xldCBhPTAsbD1udWxsLHU9MTtkb3tmb3IobGV0IGc9MDtnPHIubGVuZ3RoO2crPTEpe2lmKGw9cltnXSxhPXUq''@;'; put 'put ''dGhpcy5jdXJyZW50RmlsbERhdGEuY3ljbGVMZW5ndGgsbyhsLGEpKXN3aXRjaChpKXtjYXNlInVwIjp0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6bC5yb3ctYSxyb3dzcGFuOmwucm93c3Bhbixjb2w6bC5jb2wsY29sc3BhbjpsLmNvbHNwYW59LCEwKTticmVh''@;'; put 'put ''aztjYXNlImRvd24iOnRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe3JvdzpsLnJvdythLHJvd3NwYW46bC5yb3dzcGFuLGNvbDpsLmNvbCxjb2xzcGFuOmwuY29sc3Bhbn0sITApO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9u''@;'; put 'put ''LmFkZCh7cm93Omwucm93LHJvd3NwYW46bC5yb3dzcGFuLGNvbDpsLmNvbC1hLGNvbHNwYW46bC5jb2xzcGFufSwhMCk7YnJlYWs7Y2FzZSJyaWdodCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93Omwucm93LHJvd3NwYW46bC5yb3dzcGFuLGNvbDpsLmNvbCth''@;'; put 'put ''LGNvbHNwYW46bC5jb2xzcGFufSwhMCl9Zz09PXIubGVuZ3RoLTEmJih1Kz0xKX19d2hpbGUobnVsbCE9PWwmJm8obCxhKSk7dGhpcy5jdXJyZW50RmlsbERhdGE9bnVsbCx0aGlzLnBsdWdpbi5ob3QucmVuZGVyKCksci5sZW5ndGg+MCYmdGhpcy5wbHVnaW4uaWZDaHJvbWVGb3JjZVJlcGFp''@;'; put 'put ''bnQoKX1nZXRSYW5nZUZyb21DaGFuZ2VzKGUpe2xldCB0PW51bGwscj1udWxsLGk9bnVsbCxvPW51bGw7cmV0dXJuIFhuKGUsYT0+e2NvbnN0IHU9YVswXSxnPXRoaXMucGx1Z2luLmhvdC5wcm9wVG9Db2woYVsxXSk7KG51bGw9PT10fHx1PHQpJiYodD11KSwobnVsbD09PXJ8fHU+cikmJihy''@;'; put 'put ''PXUpLChudWxsPT09aXx8ZzxpKSYmKGk9ZyksKG51bGw9PT1vfHxnPm8pJiYobz1nKX0pLHtmcm9tOntyb3c6dD8/MCxjb2x1bW46aT8/MH0sdG86e3JvdzpyPz8wLGNvbHVtbjpvPz8wfX19ZHJhZ0FyZWFPdmVybGFwc0NvbGxlY3Rpb25zKGUsdCxyKXtjb25zdCBpPXRoaXMuZ2V0RHJhZ0Fy''@;'; put 'put ''ZWEoZSx0LHIpLFtvLGEsbCx1XT1pLGc9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsQ29vcmRzKG8sYSksRT10aGlzLnBsdWdpbi5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCx1KSxPPXRoaXMucGx1Z2luLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGcsZyxFKTtpZigwPT09dGhpcy5tZXJnZWRD''@;'; put 'put ''ZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UoTywhMCkubGVuZ3RoKXJldHVybiExO2NvbnN0IGVlPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKE8sITEpO3JldHVybiAwPT09ZWUubGVuZ3RofHwoInVwIj09PXJ8fCJkb3duIj09PXI/IWVlLmV2ZXJ5KCh7''@;'; put 'put ''Y29sc3Bhbjp2ZX0pPT52ZT09PU8uZ2V0V2lkdGgoKSk6IWVlLmV2ZXJ5KCh7cm93c3Bhbjp2ZX0pPT52ZT09PU8uZ2V0SGVpZ2h0KCkpKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmN1cnJlbnRGaWxsRGF0YT1udWxsLHRoaXMucGx1Z2luPWUsdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb249dGhp''@;'; put 'put ''cy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9ufX0seEd0PWNsYXNzIFRHdHtnZXRTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWUoZSx0LHIsaSl7Y29uc3Qgbz1NYXRoLm1pbihyWzBdLHJbMl0pLGE9TWF0aC5taW4oclsxXSxyWzNdKSxsPU1hdGgubWF4KHJbMF0sclsyXSksdT1NYXRo''@;'; put 'put ''Lm1heChyWzFdLHJbM10pO2lmKHZvaWQgMD09PWkpcmV0dXJuO2NvbnN0IGc9dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uO2lmKCFnLmlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2VsbChlLHQpKXJldHVybjtjb25zdCBPPWcuZ2V0KGUsdCk7aWYoIU8pcmV0dXJuO2NvbnN0IFo9''@;'; put 'put ''Ty5nZXRMYXN0Um93KCksZWU9Ty5nZXRMYXN0Q29sdW1uKCk7cmV0dXJuIG88PU8ucm93JiZhPD1PLmNvbCYmbD49WiYmdT49ZWU/YCR7dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tJHtpfWA6dGhpcy5pc01lcmdlQ2VsbEZ1bGx5U2VsZWN0ZWQoTyx0aGlzLmhvdC5n''@;'; put 'put ''ZXRTZWxlY3RlZFJhbmdlKCkpP2Ake3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LW11bHRpcGxlYDp2b2lkIDB9aXNNZXJnZUNlbGxGdWxseVNlbGVjdGVkKGUsdCl7Y29uc3Qgcj1bXTtpZighdHx8IWUpcmV0dXJuITE7Zm9yKGxldCBpPTA7aTxlLnJvd3NwYW47aSs9''@;'; put 'put ''MSlmb3IobGV0IG89MDtvPGUuY29sc3BhbjtvKz0xKXIucHVzaCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhlLnJvdytpLGUuY29sK28pKTtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krPTEpe2NvbnN0IG89W107Zm9yKGxldCBhPTA7YTx0Lmxlbmd0aDthKz0xKW9bYV09dFthXS5pbmNs''@;'; put 'put ''dWRlcyhyW2ldKTtpZighby5pbmNsdWRlcyghMCkpcmV0dXJuITF9cmV0dXJuITB9Z2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lVG9SZW1vdmUoKXtjb25zdCBlPVtdO2ZvcihsZXQgdD0wO3Q8PTc7dCs9MSllLnB1c2goYCR7dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNz''@;'; put 'put ''TmFtZX0tJHt0fWApO3JldHVybiBlLnB1c2goYCR7dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tbXVsdGlwbGVgKSxlfWNvbnN0cnVjdG9yKGUpe3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWU9ImZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsIix0aGlz''@;'; put 'put ''LnBsdWdpbj1lLHRoaXMuaG90PWUuaG90fX07Y2xhc3MgSUJle2NvbnN0cnVjdG9yKGUpe3RoaXMubmV4dD1udWxsLHRoaXMucHJldj1udWxsLHRoaXMuZGF0YT1lfX1jb25zdCB5JD1jbGFzcyBrR3R7cHVzaChlKXtjb25zdCB0PW5ldyBJQmUoZSk7aWYobnVsbD09PXRoaXMuZmlyc3QpdGhp''@;'; put 'put ''cy5maXJzdD10LHRoaXMubGFzdD10O2Vsc2V7Y29uc3Qgcj10aGlzLmxhc3Q7dGhpcy5sYXN0PXQsdC5wcmV2PXIsci5uZXh0PXR9cmV0dXJuIHR9dW5zaGlmdChlKXtjb25zdCB0PW5ldyBJQmUoZSk7aWYobnVsbD09PXRoaXMuZmlyc3QpdGhpcy5maXJzdD10LHRoaXMubGFzdD10O2Vsc2V7''@;'; put 'put ''Y29uc3Qgcj10aGlzLmZpcnN0O3RoaXMuZmlyc3Q9dCx0Lm5leHQ9cixyLnByZXY9dH19aW5vcmRlcihlKXtsZXQgdD10aGlzLmZpcnN0O2Zvcig7dDspe2NvbnN0IHI9ZSh0KTtpZih0PT09dGhpcy5sYXN0fHwhMD09PXIpYnJlYWs7dD10Lm5leHR9fXJlbW92ZShlKXtpZihudWxsPT09dGhp''@;'; put 'put ''cy5maXJzdClyZXR1cm4hMTtsZXQgcixpLHQ9dGhpcy5maXJzdDtmb3IoO3Q7KXtpZih0LmRhdGE9PT1lKXJldHVybiByPXQubmV4dCxpPXQucHJldixyJiYoci5wcmV2PWkpLGkmJihpLm5leHQ9ciksdD09PXRoaXMuZmlyc3QmJih0aGlzLmZpcnN0PXIpLHQ9PT10aGlzLmxhc3QmJih0aGlz''@;'; put 'put ''Lmxhc3Q9aSksITA7dD10Lm5leHR9cmV0dXJuITF9aGFzQ3ljbGUoKXtsZXQgZT10aGlzLmZpcnN0LHQ9dGhpcy5maXJzdDtmb3IoOzspe2lmKG51bGw9PT1lfHwoZT1lLm5leHQsbnVsbD09PWUpKXJldHVybiExO2lmKGU9ZS5uZXh0LHQ9dC5uZXh0LGU9PT10KXJldHVybiEwfX1wb3AoKXtp''@;'; put 'put ''ZihudWxsPT09dGhpcy5sYXN0KXJldHVybiBudWxsO2NvbnN0IGU9dGhpcy5sYXN0O3JldHVybiB0aGlzLmxhc3Q9dGhpcy5sYXN0LnByZXYsZX1zaGlmdCgpe2lmKG51bGw9PT10aGlzLmZpcnN0KXJldHVybiBudWxsO2NvbnN0IGU9dGhpcy5maXJzdDtyZXR1cm4gdGhpcy5maXJzdD10aGlz''@;'; put 'put ''LmZpcnN0Lm5leHQsZX1yZWN1cnNpdmVSZXZlcnNlKCl7aWYoIXRoaXMuZmlyc3QpcmV0dXJuOyhmdW5jdGlvbiBlKHIsaSl7aSYmKGUoaSxpLm5leHQpLGkubmV4dD1yKX0pKHRoaXMuZmlyc3QsdGhpcy5maXJzdC5uZXh0KSx0aGlzLmZpcnN0Lm5leHQ9bnVsbDtjb25zdCB0PXRoaXMuZmly''@;'; put 'put ''c3Q7dGhpcy5maXJzdD10aGlzLmxhc3QsdGhpcy5sYXN0PXR9cmV2ZXJzZSgpe2lmKCF0aGlzLmZpcnN0fHwhdGhpcy5maXJzdC5uZXh0KXJldHVybjtsZXQgZT10aGlzLmZpcnN0Lm5leHQsdD10aGlzLmZpcnN0LHI9bnVsbDtmb3IoO2U7KXI9ZS5uZXh0LGUubmV4dD10LHQucHJldj1lLHQ9''@;'; put 'put ''ZSxlPXI7dGhpcy5maXJzdC5uZXh0PW51bGwsdGhpcy5sYXN0LnByZXY9bnVsbCxyPXRoaXMuZmlyc3QsdGhpcy5maXJzdD10LHRoaXMubGFzdD1yfWNvbnN0cnVjdG9yKCl7dGhpcy5maXJzdD1udWxsLHRoaXMubGFzdD1udWxsfX07ZnVuY3Rpb24gREJlKG4sZSl7aWYoZS5oYXMobikpdGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBMQmUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBm''@;'; put 'put ''aWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQobil9ZnVuY3Rpb24gSGwobixlKXtyZXR1cm4gZnVuY3Rpb24gUkd0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obixMQmUobixlLCJnZXQiKSl9ZnVuY3Rpb24gZkMobixlLHQpe0RCZShuLGUpLGUu''@;'; put 'put ''c2V0KG4sdCl9ZnVuY3Rpb24gbDIobixlLHQpe3JldHVybiBmdW5jdGlvbiBJR3QobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtl''@;'; put 'put ''LnZhbHVlPXR9fShuLExCZShuLGUsInNldCIpLHQpLHR9ZnVuY3Rpb24gT0JlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiB0fXZhciB5bT1uZXcgV2Vha01hcCxi''@;'; put 'put ''bT1uZXcgV2Vha01hcCxhZz1uZXcgV2Vha01hcCxzZz1uZXcgV2Vha01hcCxMZmU9bmV3IFdlYWtNYXAsYiQ9bmV3IFdlYWtNYXAsdyQ9bmV3IFdlYWtNYXAsT2ZlPW5ldyBXZWFrU2V0O2NsYXNzIExHdHtnZXRDdXJyZW50VmVydGljYWxOb2RlKCl7cmV0dXJuIEhsKHRoaXMsc2cpPy5kYXRh''@;'; put 'put ''fWdldEZpcnN0VmVydGljYWxOb2RlKCl7cmV0dXJuIEhsKHRoaXMsYm0pLmZpcnN0Py5kYXRhfWdldE5leHRWZXJ0aWNhbE5vZGUoKXtyZXR1cm4gSGwodGhpcyxzZyk/Lm5leHQ/LmRhdGF9Z2V0UHJldlZlcnRpY2FsTm9kZSgpe3JldHVybiBIbCh0aGlzLHNnKT8ucHJldj8uZGF0YX1nZXRD''@;'; put 'put ''dXJyZW50SG9yaXpvbnRhbE5vZGUoKXtyZXR1cm4gSGwodGhpcyxhZyk/LmRhdGF9Z2V0Rmlyc3RIb3Jpem9udGFsTm9kZSgpe3JldHVybiBIbCh0aGlzLHltKS5maXJzdD8uZGF0YX1nZXROZXh0SG9yaXpvbnRhbE5vZGUoKXtyZXR1cm4gSGwodGhpcyxhZyk/Lm5leHQ/LmRhdGF9Z2V0UHJl''@;'; put 'put ''dkhvcml6b250YWxOb2RlKCl7cmV0dXJuIEhsKHRoaXMsYWcpPy5wcmV2Py5kYXRhfXNldFByZXZOb2RlQXNBY3RpdmUoKXtIbCh0aGlzLHNnKSYmbDIodGhpcyxzZyxIbCh0aGlzLHNnKS5wcmV2KSxIbCh0aGlzLGFnKSYmbDIodGhpcyxhZyxIbCh0aGlzLGFnKS5wcmV2KX1zZXROZXh0Tm9k''@;'; put 'put ''ZUFzQWN0aXZlKCl7SGwodGhpcyxzZykmJmwyKHRoaXMsc2csSGwodGhpcyxzZykubmV4dCksSGwodGhpcyxhZykmJmwyKHRoaXMsYWcsSGwodGhpcyxhZykubmV4dCl9YnVpbGRGb2N1c09yZGVyKGUpe2wyKHRoaXMseW0sbmV3IHkkKSxlLmZvckVhY2goKHQscik9Pntjb25zdCBpPW5ldyBX''@;'; put 'put ''ZWFrU2V0LG89dC5nZXRUb3BTdGFydENvcm5lcigpLGE9dC5nZXRCb3R0b21FbmRDb3JuZXIoKSx1PWEucm93Pz8wLGc9by5jb2w/PzAsRT1hLmNvbD8/MDtmb3IobGV0IE89by5yb3c/PzA7Tzw9dTtPKyspaWYoIUhsKHRoaXMsYiQpLmlzSGlkZGVuKE8pKWZvcihsZXQgWj1nO1o8PUU7Wisr''@;'; put 'put ''KXtpZihIbCh0aGlzLHckKS5pc0hpZGRlbihaKSljb250aW51ZTtjb25zdCBlZT1PQmUodGhpcyxPZmUsTkJlKS5jYWxsKHRoaXMse3NlbGVjdGVkUmFuZ2U6dCxzZWxlY3Rpb25MYXllcjpyLGxpc3RPcmRlcjpIbCh0aGlzLHltKSxtZXJnZUNlbGxzVmlzaXRvcjppLHJvdzpPLGNvbHVtbjpa''@;'; put 'put ''fSk7ZWUmJmwyKHRoaXMsYWcsZWUpfX0pLEhsKHRoaXMseW0pLmZpcnN0JiZIbCh0aGlzLHltKS5sYXN0JiYoSGwodGhpcyx5bSkuZmlyc3QucHJldj1IbCh0aGlzLHltKS5sYXN0LEhsKHRoaXMseW0pLmxhc3QubmV4dD1IbCh0aGlzLHltKS5maXJzdCksbDIodGhpcyxibSxuZXcgeSQpLGUu''@;'; put 'put ''Zm9yRWFjaCgodCxyKT0+e2NvbnN0IGk9bmV3IFdlYWtTZXQsbz10LmdldFRvcFN0YXJ0Q29ybmVyKCksYT10LmdldEJvdHRvbUVuZENvcm5lcigpLGw9by5yb3c/PzAsdT1hLnJvdz8/MCxFPWEuY29sPz8wO2ZvcihsZXQgTz1vLmNvbD8/MDtPPD1FO08rKylpZighSGwodGhpcyx3JCkuaXNI''@;'; put 'put ''aWRkZW4oTykpZm9yKGxldCBaPWw7Wjw9dTtaKyspe2lmKEhsKHRoaXMsYiQpLmlzSGlkZGVuKFopKWNvbnRpbnVlO2NvbnN0IGVlPU9CZSh0aGlzLE9mZSxOQmUpLmNhbGwodGhpcyx7c2VsZWN0ZWRSYW5nZTp0LHNlbGVjdGlvbkxheWVyOnIsbGlzdE9yZGVyOkhsKHRoaXMsYm0pLG1lcmdl''@;'; put 'put ''Q2VsbHNWaXNpdG9yOmkscm93OlosY29sdW1uOk99KTtlZSYmbDIodGhpcyxzZyxlZSl9fSksSGwodGhpcyxibSkuZmlyc3QmJkhsKHRoaXMsYm0pLmxhc3QmJihIbCh0aGlzLGJtKS5maXJzdC5wcmV2PUhsKHRoaXMsYm0pLmxhc3QsSGwodGhpcyxibSkubGFzdC5uZXh0PUhsKHRoaXMsYm0p''@;'; put 'put ''LmZpcnN0KX1zZXRBY3RpdmVOb2RlKGUsdCxyKXtyZXR1cm4gSGwodGhpcyx5bSkuaW5vcmRlcihpPT57Y29uc3R7c2VsZWN0aW9uTGF5ZXI6byxyb3dTdGFydDphLHJvd0VuZDpsLGNvbFN0YXJ0OnUsY29sRW5kOmd9PWkuZGF0YTtpZihvPT09ciYmZT49YSYmZTw9bCYmdD49dSYmdDw9Zyly''@;'; put 'put ''ZXR1cm4gbDIodGhpcyxhZyxpKSwhMH0pLEhsKHRoaXMsYm0pLmlub3JkZXIoaT0+e2NvbnN0e3NlbGVjdGlvbkxheWVyOm8scm93U3RhcnQ6YSxyb3dFbmQ6bCxjb2xTdGFydDp1LGNvbEVuZDpnfT1pLmRhdGE7aWYobz09PXImJmU+PWEmJmU8PWwmJnQ+PXUmJnQ8PWcpcmV0dXJuIGwyKHRo''@;'; put 'put ''aXMsc2csaSksITB9KSx0aGlzfWNvbnN0cnVjdG9yKHttZXJnZWRDZWxsc0dldHRlcjplLHJvd0luZGV4TWFwcGVyOnQsY29sdW1uSW5kZXhNYXBwZXI6cn0peyhmdW5jdGlvbiBER3QobixlKXtEQmUobixlKSxlLmFkZChuKX0pKHRoaXMsT2ZlKSxmQyh0aGlzLHltLHt3cml0YWJsZTohMCx2''@;'; put 'put ''YWx1ZTp2b2lkIDB9KSxmQyh0aGlzLGJtLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxmQyh0aGlzLGFnLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxmQyh0aGlzLHNnLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxmQyh0aGlzLExmZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9p''@;'; put 'put ''ZCAwfSksZkModGhpcyxiJCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZkModGhpcyx3JCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksbDIodGhpcyx5bSxuZXcgeSQpLGwyKHRoaXMsYm0sbmV3IHkkKSxsMih0aGlzLGFnLG51bGwpLGwyKHRoaXMsc2csbnVsbCksbDIodGhpcyxM''@;'; put 'put ''ZmUsZSksbDIodGhpcyxiJCx0KSxsMih0aGlzLHckLHIpfX1mdW5jdGlvbiBOQmUoe3NlbGVjdGVkUmFuZ2U6bixzZWxlY3Rpb25MYXllcjplLGxpc3RPcmRlcjp0LG1lcmdlQ2VsbHNWaXNpdG9yOnIscm93OmksY29sdW1uOm99KXtjb25zdCBhPW4uZ2V0VG9wU3RhcnRDb3JuZXIoKSxsPW4u''@;'; put 'put ''Z2V0Qm90dG9tRW5kQ29ybmVyKCksdT1hLnJvdz8/MCxnPWEuY29sPz8wLEU9bC5yb3c/PzAsTz1sLmNvbD8/MCxaPW4uaGlnaGxpZ2h0LmNsb25lKCkubm9ybWFsaXplKCksZWU9Wi5yb3c/PzAsdmU9Wi5jb2w/PzAsTWU9SGwodGhpcyxMZmUpLmNhbGwodGhpcyxpLG8pO2lmKE1lJiZyLmhh''@;'; put 'put ''cyhNZSkpcmV0dXJuIG51bGw7Y29uc3QgSGU9e3NlbGVjdGlvbkxheWVyOmUsY29sU3RhcnQ6byxjb2xFbmQ6byxyb3dTdGFydDppLHJvd0VuZDppfTtpZihNZSl7aWYoci5hZGQoTWUpLE1lLnJvdzx1fHxNZS5yb3crTWUucm93c3Bhbi0xPkV8fE1lLmNvbDxnfHxNZS5jb2wrTWUuY29sc3Bh''@;'; put 'put ''bi0xPk8pcmV0dXJuIG51bGw7SGUuY29sU3RhcnQ9TWUuY29sLEhlLmNvbEVuZD1NZS5jb2wrTWUuY29sc3Bhbi0xLEhlLnJvd1N0YXJ0PU1lLnJvdyxIZS5yb3dFbmQ9TWUucm93K01lLnJvd3NwYW4tMX1jb25zdCBXZT10LnB1c2goSGUpO3JldHVybiBpPT09ZWUmJm89PT12ZXx8TWUmJmVl''@;'; put 'put ''Pj1NZS5yb3cmJmVlPD1NZS5yb3crTWUucm93c3Bhbi0xJiZ2ZT49TWUuY29sJiZ2ZTw9TWUuY29sK01lLmNvbHNwYW4tMT9XZTpudWxsfWZ1bmN0aW9uIEZCZShuLGUsdCl7Y29uc3R7cm93SW5kZXhNYXBwZXI6cixzdHlsZXNIYW5kbGVyOml9PW47bGV0IG89MDtmb3IobGV0IGE9ZTthPGUr''@;'; put 'put ''dDthKyspci5pc0hpZGRlbihhKXx8KG8rPW4uZ2V0Um93SGVpZ2h0KGEpPz9pLmdldERlZmF1bHRSb3dIZWlnaHQoYSkpO3JldHVybiBvfWZ1bmN0aW9uIFBCZShuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUg''@;'; put 'put ''ZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gSEJlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIFhvKG4s''@;'; put 'put ''ZSl7cmV0dXJuIGZ1bmN0aW9uIEZHdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sSEJlKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIFJsKG4sZSx0KXtQQmUobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIHFhKG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gUEd0KG4sZSx0''@;'; put 'put ''KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixIQmUobixlLCJzZXQiKSx0KSx0fUdvLmdldFNpbmdsZXRvbigpLnJl''@;'; put 'put ''Z2lzdGVyKCJiZWZvcmVNZXJnZUNlbGxzIiksR28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyTWVyZ2VDZWxscyIpLEdvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbm1lcmdlQ2VsbHMiKSxHby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJVbm1lcmdlQ2Vs''@;'; put 'put ''bHMiKTtjb25zdCBOZmU9Im1lcmdlQ2VsbHMiLFZCZT1OZmU7dmFyIG9mPW5ldyBXZWFrTWFwLGxnPW5ldyBXZWFrTWFwLEI0PW5ldyBXZWFrTWFwLEZmZT1uZXcgV2Vha01hcCxENj1uZXcgV2Vha01hcCxJeD1uZXcgV2Vha01hcCxGXz1uZXcgV2Vha01hcCxQZmU9bmV3IFdlYWtNYXAsSGZl''@;'; put 'put ''PW5ldyBXZWFrTWFwLFZmZT1uZXcgV2Vha01hcCxCZmU9bmV3IFdlYWtNYXAsamZlPW5ldyBXZWFrTWFwLFVmZT1uZXcgV2Vha01hcCxDJD1uZXcgV2Vha01hcCxCQmU9bmV3IFdlYWtTZXQsUyQ9bmV3IFdlYWtNYXAsemZlPW5ldyBXZWFrTWFwLFdmZT1uZXcgV2Vha01hcCxZZmU9bmV3IFdl''@;'; put 'put ''YWtNYXAsWmZlPW5ldyBXZWFrTWFwLEdmZT1uZXcgV2Vha01hcCwkZmU9bmV3IFdlYWtNYXAscWZlPW5ldyBXZWFrTWFwLEtmZT1uZXcgV2Vha01hcCxYZmU9bmV3IFdlYWtNYXAsUWZlPW5ldyBXZWFrTWFwLEpmZT1uZXcgV2Vha01hcCxlM2U9bmV3IFdlYWtNYXAsdDNlPW5ldyBXZWFrTWFw''@;'; put 'put ''LG4zZT1uZXcgV2Vha01hcCxyM2U9bmV3IFdlYWtNYXAsRSQ9bmV3IFdlYWtNYXAsTSQ9bmV3IFdlYWtNYXAsaTNlPW5ldyBXZWFrTWFwLG8zZT1uZXcgV2Vha01hcCxhM2U9bmV3IFdlYWtNYXAsczNlPW5ldyBXZWFrTWFwLGwzZT1uZXcgV2Vha01hcCxjM2U9bmV3IFdlYWtNYXA7Y2xhc3Mg''@;'; put 'put ''akd0IGV4dGVuZHMgYWx7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIE5mZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNTB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue1twT2VdOiJjZWxscyIsdmlydHVhbGl6ZWQ6ITEsY2VsbHM6W119''@;'; put 'put ''fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtOZmVdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uPW5ldyBTR3QodGhpcyksdGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucz1uZXcgTUd0KHRoaXMpLHRoaXMu''@;'; put 'put ''c2VsZWN0aW9uQ2FsY3VsYXRpb25zPW5ldyB4R3QodGhpcyksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLFhvKHRoaXMsUGZlKSksdGhpcy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsWG8odGhpcyxWZmUpKSx0aGlzLmFkZEhvb2soIm1vZGlmeVRyYW5zZm9ybVN0YXJ0IixYbyh0''@;'; put 'put ''aGlzLEJmZSkpLHRoaXMuYWRkSG9vaygibW9kaWZ5VHJhbnNmb3JtRW5kIixYbyh0aGlzLGpmZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IixYbyh0aGlzLFVmZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsWG8odGhpcyxTJCkpLHRo''@;'; put 'put ''aXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLFhvKHRoaXMsUyQpKSx0aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdGlvbkZvY3VzU2V0IixYbyh0aGlzLHpmZSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldCIsWG8odGhpcyxXZmUpKSx0aGlzLmFkZEhv''@;'; put 'put ''b2soImFmdGVyU2VsZWN0aW9uRW5kIixYbyh0aGlzLFlmZSkpLHRoaXMuYWRkSG9vaygibW9kaWZ5R2V0Q2VsbENvb3JkcyIsWG8odGhpcyxDJCkpLHRoaXMuYWRkSG9vaygibW9kaWZ5R2V0Q29vcmRzRWxlbWVudCIsWG8odGhpcyxDJCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJc011bHRpcGxl''@;'; put 'put ''U2VsZWN0aW9uIixYbyh0aGlzLEhmZSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW5kZXJlciIsKGUsdCxyKT0+WG8odGhpcyxGZmUpLmFmdGVyKGUsdCxyKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGU9PmZ1bmN0aW9uIEhHdChuLGUsdCl7aWYoIWUu''@;'; put 'put ''aGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH0odGhpcyxCQmUsVUd0KS5jYWxsKHRoaXMsZSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsWG8odGhpcyxaZmUpKSx0aGlz''@;'; put 'put ''LmFkZEhvb2soImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLFhvKHRoaXMsR2ZlKSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixYbyh0aGlzLCRmZSkpLHRoaXMuYWRkSG9vaygibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsWG8o''@;'; put 'put ''dGhpcyxxZmUpKSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIixYbyh0aGlzLEtmZSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVDb2wiLFhvKHRoaXMsWGZlKSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsWG8odGhpcyxRZmUpKSx0aGlzLmFkZEhvb2soImFmdGVyUmVt''@;'; put 'put ''b3ZlUm93IixYbyh0aGlzLEpmZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uTW92ZSIsWG8odGhpcyxlM2UpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29sdW1uTW92ZSIsWG8odGhpcyx0M2UpKSx0aGlzLmFkZEhvb2soImJlZm9yZVJvd01vdmUiLFhvKHRoaXMsbjNlKSksdGhpcy5hZGRI''@;'; put 'put ''b29rKCJhZnRlclJvd01vdmUiLFhvKHRoaXMscjNlKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5GcmVlemUiLFhvKHRoaXMsRSQpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29sdW1uRnJlZXplIixYbyh0aGlzLE0kKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIsWG8o''@;'; put 'put ''dGhpcyxFJCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsWG8odGhpcyxNJCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLFhvKHRoaXMsaTNlKSksdGhpcy5hZGRIb29rKCJiZWZvcmVEcmF3Qm9yZGVycyIsWG8odGhpcyxvM2UpKSx0aGlzLmFkZEhvb2soImFmdGVy''@;'; put 'put ''RHJhd1NlbGVjdGlvbiIsWG8odGhpcyxhM2UpKSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIixYbyh0aGlzLHMzZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQmVnaW5FZGl0aW5nIixYbyh0aGlzLGwzZSkpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVpZ2h0QnlP''@;'; put 'put ''dmVybGF5TmFtZSIsWG8odGhpcyxjM2UpKSx0aGlzLmFkZEhvb2soImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsKGUsdCk9PntpZigiTWVyZ2VDZWxscyI9PT10KXJldHVybiExfSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7''@;'; put 'put ''dGhpcy5jbGVhckNvbGxlY3Rpb25zKCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QucmVuZGVyKCkscWEodGhpcyxGXywhMSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhp''@;'; put 'put ''cy5nZW5lcmF0ZUZyb21TZXR0aW5ncygpLHFhKHRoaXMsRl8sITApLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWlmQ2hyb21lRm9yY2VSZXBhaW50KCl7aWYoIVB4ZSgpKXJldHVybjtjb25zdCBlPVtdO2xldCB0PVtdO3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmZvckVh''@;'; put 'put ''Y2gocj0+e2NvbnN0e3JvdzppLHJvd3NwYW46b309cjtmb3IobGV0IGE9aSsxO2E8aStvO2ErKyl0LnB1c2goYSl9KSx0PVsuLi5uZXcgU2V0KHQpXSx0LmZvckVhY2gocj0+e2NvbnN0IGk9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChyKTtu''@;'; put 'put ''dWxsIT09aSYmdGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5nZXRPdmVybGF5cyghMCkubWFwKG89PiJtYXN0ZXIiPT09by5uYW1lP286by5jbG9uZS53dFRhYmxlKS5mb3JFYWNoKG89Pntjb25zdCBhPW8uZ2V0Um93KGkpO2EmJihhLnN0eWxlLmJhY2tncm91bmQ9dXcoYSwiYmFja2dy''@;'; put 'put ''b3VuZENvbG9yIik/LnJlcGxhY2UoIikiLCIsIDAuOTkpIik/PyIiLGUucHVzaChhKSl9KX0pLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PntlLmZvckVhY2gocj0+e3Iuc3R5bGUuYmFja2dyb3VuZD11dyhyLCJiYWNrZ3JvdW5kQ29sb3IiKT8ucmVwbGFjZSgiLCAwLjk5KSIsIiIp''@;'; put 'put ''Pz8iIn0pfSwxKX12YWxpZGF0ZVNldHRpbmcoZSl7cmV0dXJuISghZXx8KEk2LmNvbnRhaW5zTmVnYXRpdmVWYWx1ZXMoZSk/KEhhKEk2Lk5FR0FUSVZFX1ZBTFVFU19XQVJOSU5HKGUpKSwxKTpJNi5pc091dE9mQm91bmRzKGUsdGhpcy5ob3QuY291bnRSb3dzKCksdGhpcy5ob3QuY291bnRD''@;'; put 'put ''b2xzKCkpPyhIYShJNi5JU19PVVRfT0ZfQk9VTkRTX1dBUk5JTkcoZSkpLDEpOkk2LmlzU2luZ2xlQ2VsbChlKT8oSGEoSTYuSVNfU0lOR0xFX0NFTEwoZSkpLDEpOkk2LmNvbnRhaW5zWmVyb1NwYW4oZSkmJihIYShJNi5aRVJPX1NQQU5fV0FSTklORyhlKSksMSkpKX1nZW5lcmF0ZUZyb21T''@;'; put 'put ''ZXR0aW5ncygpe2NvbnN0IGU9dGhpcy5nZXRTZXR0aW5nKCJjZWxscyIpLmZpbHRlcihpPT50aGlzLnZhbGlkYXRlU2V0dGluZyhpKSksdD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5maWx0ZXJPdmVybGFwcGluZ01lcmdlQ2VsbHMoZSkscj1bXTt0LmZvckVhY2goaT0+e2NvbnN0e3Jv''@;'; put 'put ''dzpvLGNvbDphLHJvd3NwYW46bCxjb2xzcGFuOnV9PWksZz10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhvLGEpLEU9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobytsLTEsYSt1LTEpLE89dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShnLGcsRSk7dGhpcy5tZXJnZVJhbmdlKE8sITAs''@;'; put 'put ''ITApO2ZvcihsZXQgWj1vO1o8bytsO1orKylmb3IobGV0IGVlPWE7ZWU8YSt1O2VlKyspKFohPT1vfHxlZSE9PWEpJiZyLnB1c2goW1osZWUsbnVsbF0pfSksMCE9PXIubGVuZ3RoJiZ0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHIsdm9pZCAwLHZvaWQgMCx0aGlzLnBsdWdpbk5hbWU/P3ZvaWQg''@;'; put 'put ''MCl9Y2xlYXJDb2xsZWN0aW9ucygpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmNsZWFyKCl9Y2FuTWVyZ2VSYW5nZShlLHQ9ITEpe3JldHVybiEhdHx8dGhpcy52YWxpZGF0ZVNldHRpbmcoZSl9bWVyZ2VTZWxlY3Rpb24oZT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkp''@;'; put 'put ''e2lmKCFlKXJldHVybjtlLnNldERpcmVjdGlvbih0aGlzLmhvdC5pc1J0bCgpPyJORS1TVyI6Ik5XLVNFIik7Y29uc3R7ZnJvbTp0LHRvOnJ9PWU7dGhpcy51bm1lcmdlUmFuZ2UoZSwhMCksdGhpcy5tZXJnZVJhbmdlKGUpLG51bGwhPT10LnJvdyYmbnVsbCE9PXQuY29sJiZudWxsIT09ci5y''@;'; put 'put ''b3cmJm51bGwhPT1yLmNvbCYmdGhpcy5ob3Quc2VsZWN0Q2VsbCh0LnJvdyx0LmNvbCxyLnJvdyxyLmNvbCwhMSl9dW5tZXJnZVNlbGVjdGlvbihlPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl7aWYoIWUpcmV0dXJuO2NvbnN0e2Zyb206dCx0bzpyfT1lO3RoaXMudW5tZXJn''@;'; put 'put ''ZVJhbmdlKGUsITApLG51bGwhPT10LnJvdyYmbnVsbCE9PXQuY29sJiZudWxsIT09ci5yb3cmJm51bGwhPT1yLmNvbCYmdGhpcy5ob3Quc2VsZWN0Q2VsbCh0LnJvdyx0LmNvbCxyLnJvdyxyLmNvbCwhMSl9bWVyZ2VSYW5nZShlLHQ9ITEscj0hMSl7Y29uc3QgaT1lLmdldFRvcFN0YXJ0Q29y''@;'; put 'put ''bmVyKCksbz1lLmdldEJvdHRvbUVuZENvcm5lcigpO2lmKG51bGw9PT1pLnJvd3x8bnVsbD09PWkuY29sfHxudWxsPT09by5yb3d8fG51bGw9PT1vLmNvbClyZXR1cm4hMTtjb25zdCBhPXtyb3c6aS5yb3csY29sOmkuY29sLHJvd3NwYW46by5yb3ctaS5yb3crMSxjb2xzcGFuOm8uY29sLWku''@;'; put 'put ''Y29sKzF9LGw9W107bGV0IHU9bnVsbDtyZXR1cm4hIXRoaXMuY2FuTWVyZ2VSYW5nZShhLHQpJiYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU1lcmdlQ2VsbHMiLGUsdCksVmEoMCxhLnJvd3NwYW4tMSxFPT57VmEoMCxhLmNvbHNwYW4tMSxPPT57bGV0IFo9bnVsbDtsW0VdfHwobFtFXT1b''@;'; put 'put ''XSksMD09PUUmJjA9PT1PP1o9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGEucm93KSx0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEuY29sKSk6dGhpcy5ob3Quc2V0Q2VsbE1ldGEoYS5yb3crRSxhLmNvbCtPLCJoaWRkZW4iLCEwKSxsW0Vd''@;'; put 'put ''W09dPVp9KX0pLHRoaXMuaG90LnNldENlbGxNZXRhKGEucm93LGEuY29sLCJzcGFubmVkIiwhMCksIXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZChhLHQpfHwocj91PVthLnJvdyxhLmNvbCxsXTp0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheShhLnJvdyxhLmNvbCxsLHZvaWQgMCx2''@;'; put 'put ''b2lkIDAsdGhpcy5wbHVnaW5OYW1lPz92b2lkIDApLHR8fHRoaXMuaWZDaHJvbWVGb3JjZVJlcGFpbnQoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJNZXJnZUNlbGxzIixlLGEsdCksdSkpfXVubWVyZ2VSYW5nZShlLHQ9ITEpe2NvbnN0IHI9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24u''@;'; put 'put ''Z2V0V2l0aGluUmFuZ2UoZSk7MCE9PXIubGVuZ3RoJiYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVubWVyZ2VDZWxscyIsZSx0KSxYbihyLGk9Pnt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5yZW1vdmUoaS5yb3csaS5jb2wpLFZhKDAsaS5yb3dzcGFuLTEsbz0+e1ZhKDAsaS5jb2xz''@;'; put 'put ''cGFuLTEsYT0+e3RoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGkucm93K28saS5jb2wrYSwiaGlkZGVuIiksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoaS5yb3crbyxpLmNvbCthLCJjb3B5YWJsZSIpfSl9KSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShpLnJvdyxpLmNvbCwic3Bhbm5lZCIpfSks''@;'; put 'put ''dGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5tZXJnZUNlbGxzIixlLHQpLHRoaXMuaG90LnJlbmRlcigpKX10b2dnbGVNZXJnZShlKXtjb25zdHtmcm9tOnQsdG86cn09ZS5jbG9uZSgpLm5vcm1hbGl6ZSgpO2lmKG51bGw9PT10LnJvd3x8bnVsbD09PXQuY29sfHxudWxsPT09ci5yb3d8fG51''@;'; put 'put ''bGw9PT1yLmNvbClyZXR1cm47Y29uc3QgaT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQodC5yb3csdC5jb2wpOyExIT09aSYmaS5yb3c9PT10LnJvdyYmaS5jb2w9PT10LmNvbCYmaS5yb3craS5yb3dzcGFuLTE9PT1yLnJvdyYmaS5jb2wraS5jb2xzcGFuLTE9PT1yLmNvbD90aGlz''@;'; put 'put ''LnVubWVyZ2VSYW5nZShlKTp0aGlzLm1lcmdlU2VsZWN0aW9uKGUpfW1lcmdlKGUsdCxyLGkpe2NvbnN0IG89dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZSx0KSxhPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHIsaSk7dGhpcy5tZXJnZVJhbmdlKHRoaXMuaG90Ll9jcmVhdGVDZWxs''@;'; put 'put ''UmFuZ2UobyxvLGEpKX11bm1lcmdlKGUsdCxyLGkpe2NvbnN0IG89dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZSx0KSxhPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHIsaSk7dGhpcy51bm1lcmdlUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShvLG8sYSkpfXJlZ2lzdGVy''@;'; put 'put ''U2hvcnRjdXRzKCl7Y29uc3QgdD10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIik7dCYmdC5hZGRTaG9ydGN1dCh7a2V5czpbWyJDb250cm9sIiwibSJdXSxjYWxsYmFjazooKT0+e2NvbnN0IHI9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgp''@;'; put 'put ''O3ImJiFyLmlzU2luZ2xlSGVhZGVyKCkmJih0aGlzLnRvZ2dsZU1lcmdlKHIpLHRoaXMuaG90LnJlbmRlcigpKX0scnVuT25seUlmOnI9PiFyPy5hbHRLZXksZ3JvdXA6VkJlfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQo''@;'; put 'put ''ImdyaWQiKT8ucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChWQmUpfW1vZGlmeVZpZXdwb3J0Um93U3RhcnQoZSx0KXtjb25zdCByPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGk9ci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGUuc3RhcnRSb3cpPz8wO2ZvcihsZXQgbz0wO288dDtvKz0x''@;'; put 'put ''KXtjb25zdCBhPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChpLG8pO2lmKCExIT09YSl7Y29uc3QgbD1yLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLnJvdywxKSx1PW51bGwhPT1sP3IuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChsKTpudWxsO2lmKG51bGwhPT11JiZ1''@;'; put 'put ''PGUuc3RhcnRSb3cpcmV0dXJuIGUuc3RhcnRSb3c9dSx2b2lkIHRoaXMubW9kaWZ5Vmlld3BvcnRSb3dTdGFydChlLHQpfX19bW9kaWZ5Vmlld3BvcnRSb3dFbmQoZSx0KXtjb25zdCByPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGk9ci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGUu''@;'; put 'put ''ZW5kUm93KT8/MDtmb3IobGV0IG89MDtvPHQ7bys9MSl7Y29uc3QgYT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoaSxvKTtpZighMSE9PWEpe2NvbnN0IHU9ci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYS5yb3crYS5yb3dzcGFuLTEsLTEpO2lmKG51bGwhPT11KXtjb25zdCBn''@;'; put 'put ''PXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh1KTtpZihudWxsIT09ZyYmZz5lLmVuZFJvdylyZXR1cm4gZS5lbmRSb3c9Zyx2b2lkIHRoaXMubW9kaWZ5Vmlld3BvcnRSb3dFbmQoZSx0KX19fX1tb2RpZnlWaWV3cG9ydENvbHVtblN0YXJ0KGUsdCl7Y29uc3Qgcj10aGlzLmhvdC5j''@;'; put 'put ''b2x1bW5JbmRleE1hcHBlcixpPXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChlLnN0YXJ0Q29sdW1uKT8/MDtmb3IobGV0IG89MDtvPHQ7bys9MSl7Y29uc3QgYT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobyxpKTtpZighMSE9PWEpe2NvbnN0IGw9ci5nZXROZWFyZXN0''@;'; put 'put ''Tm90SGlkZGVuSW5kZXgoYS5jb2wsMSk7aWYobnVsbCE9PWwpe2NvbnN0IHU9ci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGwpO2lmKG51bGwhPT11JiZ1PGUuc3RhcnRDb2x1bW4pcmV0dXJuIGUuc3RhcnRDb2x1bW49dSx2b2lkIHRoaXMubW9kaWZ5Vmlld3BvcnRDb2x1bW5TdGFy''@;'; put 'put ''dChlLHQpfX19fW1vZGlmeVZpZXdwb3J0Q29sdW1uRW5kKGUsdCl7Y29uc3Qgcj10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixpPXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChlLmVuZENvbHVtbik/PzA7Zm9yKGxldCBvPTA7bzx0O28rPTEpe2NvbnN0IGE9dGhpcy5tZXJnZWRD''@;'; put 'put ''ZWxsc0NvbGxlY3Rpb24uZ2V0KG8saSk7aWYoITEhPT1hKXtjb25zdCB1PXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEuY29sK2EuY29sc3Bhbi0xLC0xKTtpZihudWxsIT09dSl7Y29uc3QgZz1yLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodSk7aWYobnVsbCE9PWcmJmc+ZS5l''@;'; put 'put ''bmRDb2x1bW4pcmV0dXJuIGUuZW5kQ29sdW1uPWcsdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uRW5kKGUsdCl9fX19dHJhbnNsYXRlTWVyZ2VkQ2VsbFRvUmVuZGVyYWJsZShlLHQscixpKXtjb25zdHtyb3dJbmRleE1hcHBlcjpvLGNvbHVtbkluZGV4TWFwcGVyOmF9PXRoaXMuaG90''@;'; put 'put ''O2xldCBsLHU7cmV0dXJuIGw9MD09PXQ/by5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZSwxKTpvLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChlK3QtMSwtMSksdT0wPT09aT9hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChyLDEpOmEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHIraS0x''@;'; put 'put ''LC0xKSxbZT49MCYmbnVsbCE9PWw/by5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGwpPz9lOmUscj49MCYmbnVsbCE9PXU/YS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHUpPz9yOnJdfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLGZ1bmN0aW9uIFZHdChuLGUpe1BC''@;'; put 'put ''ZShuLGUpLGUuYWRkKG4pfSh0aGlzLEJCZSksUmwodGhpcyxvZix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUmwodGhpcyxsZyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUmwodGhpcyxCNCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUmwodGhpcyxGZmUse3dyaXRhYmxl''@;'; put 'put ''OiEwLHZhbHVlOnZvaWQgMH0pLFJsKHRoaXMsRDYse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFJsKHRoaXMsSXgse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFJsKHRoaXMsRl8se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFJsKHRoaXMsUGZlLHt3cml0YWJsZTohMCx2YWx1''@;'; put 'put ''ZTp2b2lkIDB9KSxSbCh0aGlzLEhmZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUmwodGhpcyxWZmUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFJsKHRoaXMsQmZlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxSbCh0aGlzLGpmZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9p''@;'; put 'put ''ZCAwfSksUmwodGhpcyxVZmUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFJsKHRoaXMsQyQse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFJsKHRoaXMsUyQse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFJsKHRoaXMsemZlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxS''@;'; put 'put ''bCh0aGlzLFdmZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUmwodGhpcyxZZmUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFJsKHRoaXMsWmZlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxSbCh0aGlzLEdmZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUmwodGhp''@;'; put 'put ''cywkZmUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFJsKHRoaXMscWZlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxSbCh0aGlzLEtmZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUmwodGhpcyxYZmUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFJsKHRoaXMsUWZl''@;'; put 'put ''LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxSbCh0aGlzLEpmZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUmwodGhpcyxlM2Use3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFJsKHRoaXMsdDNlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxSbCh0aGlzLG4zZSx7d3Jp''@;'; put 'put ''dGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUmwodGhpcyxyM2Use3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFJsKHRoaXMsRSQse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFJsKHRoaXMsTSQse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFJsKHRoaXMsaTNlLHt3cml0YWJsZToh''@;'; put 'put ''MCx2YWx1ZTp2b2lkIDB9KSxSbCh0aGlzLG8zZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUmwodGhpcyxhM2Use3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFJsKHRoaXMsczNlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxSbCh0aGlzLGwzZSx7d3JpdGFibGU6ITAsdmFs''@;'; put 'put ''dWU6dm9pZCAwfSksUmwodGhpcyxjM2Use3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHFhKHRoaXMsb2YsbnVsbCkscWEodGhpcyxsZyx7cm93OjAsY29sOjB9KSxxYSh0aGlzLEI0LG5ldyBMR3Qoe21lcmdlZENlbGxzR2V0dGVyOih0LHIpPT50aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlv''@;'; put 'put ''bi5nZXQodCxyKSxyb3dJbmRleE1hcHBlcjp0aGlzLmhvdC5yb3dJbmRleE1hcHBlcixjb2x1bW5JbmRleE1hcHBlcjp0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcn0pKSxxYSh0aGlzLEZmZSxmdW5jdGlvbiBOR3Qobil7Y29uc3QgZT1uLmhvdCx7cm93SW5kZXhNYXBwZXI6dCxjb2x1bW5J''@;'; put 'put ''bmRleE1hcHBlcjpyfT1lLGk9bmV3IE1hcDtyZXR1cm57YmVmb3JlOmZ1bmN0aW9uIG8oKXt9LGFmdGVyOmZ1bmN0aW9uIGEobCx1LGcpe2NvbnN0IEU9bi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KHUsZyk7aWYoITE9PT1FKXJldHVybiBsLnJlbW92ZUF0dHJpYnV0ZSgicm93c3BhbiIp''@;'; put 'put ''LGwucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksaS5oYXModSkmJiFlLmdldFNldHRpbmdzKCkucm93SGVhZGVycyYmKGwuc3R5bGUuaGVpZ2h0PWAke2kuZ2V0KHUpfXB4YCxpLmRlbGV0ZSh1KSksdm9pZChsLnN0eWxlLmRpc3BsYXk9IiIpO2NvbnN0e3JvdzpPLGNvbDpaLGNvbHNwYW46''@;'; put 'put ''ZWUscm93c3Bhbjp2ZX09RSxbTWUsSGVdPW4udHJhbnNsYXRlTWVyZ2VkQ2VsbFRvUmVuZGVyYWJsZShPLHZlLFosZWUpLFdlPW4uZ2V0U2V0dGluZygidmlydHVhbGl6ZWQiKTtpZigwPT09WiYmIWUuZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzKXtjb25zdCBxcj1lLl9nZXRSb3dIZWlnaHRG''@;'; put 'put ''cm9tU2V0dGluZ3ModSk7aWYodm9pZCAwIT09cXIpe2NvbnN0IFRyPWUuc3R5bGVzSGFuZGxlci5hcmVDZWxsc0JvcmRlckJveCgpPzA6MTtpLnNldCh1LHFyLVRyKX1lbHNlIGlmKGhMKCkpe2NvbnN0ICRuPUZCZShlLE8sdmUpO2kuc2V0KHUsJG4vdmUpfX1jb25zdCBBdD1NZS0odC5nZXRS''@;'; put 'put ''ZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHUpPz8wKSsxLEt0PUhlLShyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZyk/PzApKzE7bGV0IHF0PXQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE8sMSksZ249ci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoWiwxKTtXZSYmKFtxdCxn''@;'; put 'put ''bl09ZnVuY3Rpb24gT0d0KG4sZSx0KXtjb25zdCByPW4udmlldy5nZXRBY3RpdmVPdmVybGF5TmFtZSgpO2lmKCFbInRvcCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMocikpe2NvbnN0IGk9bi5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpO251bGwhPT1lJiZudWxs''@;'; put 'put ''IT09aSYmKGU9TWF0aC5tYXgoZSxpKSl9aWYoIVsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiLCJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKHIpKXtjb25zdCBpPW4uZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKTtudWxsIT09dCYm''@;'; put 'put ''bnVsbCE9PWkmJih0PU1hdGgubWF4KHQsaSkpfXJldHVybltlLHRdfShlLHF0LGduKSk7Y29uc3QgVG49TWF0aC5taW4odmUsQXQpLENuPU1hdGgubWluKGVlLEt0KTtxdD09PXUmJmduPT09Zz8obC5zZXRBdHRyaWJ1dGUoInJvd3NwYW4iLFN0cmluZyhUbikpLGwuc2V0QXR0cmlidXRlKCJj''@;'; put 'put ''b2xzcGFuIixTdHJpbmcoQ24pKSk6KGwucmVtb3ZlQXR0cmlidXRlKCJyb3dzcGFuIiksbC5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxsLnN0eWxlLmRpc3BsYXk9Im5vbmUiKX19fSh0aGlzKSkscWEodGhpcyxENixudWxsKSxxYSh0aGlzLEl4LG51bGwpLHFhKHRoaXMsRl8sITEpLHFh''@;'; put 'put ''KHRoaXMsUGZlLCgpPT57dGhpcy5nZW5lcmF0ZUZyb21TZXR0aW5ncygpLHRoaXMuaG90LnJlbmRlcigpLHFhKHRoaXMsRl8sITApfSkscWEodGhpcyxIZmUsdD0+e2lmKHQpe2NvbnN0IHI9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMsaT10aGlzLmhvdC5nZXRTZWxl''@;'; put 'put ''Y3RlZFJhbmdlQWN0aXZlKCk7aWYoIWkpcmV0dXJuIHQ7Y29uc3Qgbz1pLmdldFRvcFN0YXJ0Q29ybmVyKCksYT1pLmdldEJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQgbD0wO2w8ci5sZW5ndGg7bCs9MSlpZihvLnJvdz09PXJbbF0ucm93JiZvLmNvbD09PXJbbF0uY29sJiZhLnJvdz09PXJb''@;'; put 'put ''bF0ucm93K3JbbF0ucm93c3Bhbi0xJiZhLmNvbD09PXJbbF0uY29sK3JbbF0uY29sc3Bhbi0xKXJldHVybiExfXJldHVybiB0fSkscWEodGhpcyxWZmUsdD0+e1hvKHRoaXMsbGcpLnJvdz10LnJvdyxYbyh0aGlzLGxnKS5jb2w9dC5jb2x9KSxxYSh0aGlzLEJmZSx0PT57Y29uc3Qgcj10aGlz''@;'; put 'put ''LmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIXIpcmV0dXJuO2NvbnN0e2hpZ2hsaWdodDppfT1yLHtjb2x1bW5JbmRleE1hcHBlcjpvLHJvd0luZGV4TWFwcGVyOmF9PXRoaXMuaG90O2lmKFhvKHRoaXMsb2YpJiYobnVsbCE9PVhvKHRoaXMsb2YpLnJvdyYmbnVsbCE9PWEuZ2V0''@;'; put 'put ''UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChYbyh0aGlzLG9mKS5yb3cpJiYoaS5yb3c9WG8odGhpcyxvZikucm93KSxudWxsIT09WG8odGhpcyxvZikuY29sJiZudWxsIT09by5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFhvKHRoaXMsb2YpLmNvbCkmJihpLmNvbD1Ybyh0aGlzLG9m''@;'; put 'put ''KS5jb2wpLHFhKHRoaXMsb2YsbnVsbCkpLG51bGw9PT1pLnJvd3x8bnVsbD09PWkuY29sKXJldHVybjtjb25zdCBsPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChpLnJvdyxpLmNvbCk7aWYoIWwpcmV0dXJuO2NvbnN0IHU9bC5jb2wsZz1sLmNvbCtsLmNvbHNwYW4tMTtpZih0LmNv''@;'; put 'put ''bDwwKXtjb25zdCBlZT1vLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChpLmNvbD49dSYmaS5jb2w8PWc/dS0xOmcsLTEpO3QuY29sPW51bGw9PT1lZT8tdGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZSgwLGkuY29sKTotTWF0aC5tYXgodGhpcy5ob3Qudmlldy5j''@;'; put 'put ''b3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShlZSxpLmNvbCktMSwxKX1lbHNlIGlmKHQuY29sPjApe2NvbnN0IGVlPW8uZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGkuY29sPj11JiZpLmNvbDw9Zz9nKzE6dSwxKTt0LmNvbD1udWxsPT09ZWU/dGhpcy5ob3Qudmlldy5jb3VudFJlbmRl''@;'; put 'put ''cmFibGVDb2x1bW5zSW5SYW5nZShpLmNvbCx0aGlzLmhvdC5jb3VudENvbHMoKSk6TWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShpLmNvbCxlZSktMSwxKX1jb25zdCBFPWwucm93LE89bC5yb3crbC5yb3dzcGFuLTE7aWYodC5yb3c8MCl7Y29u''@;'; put 'put ''c3QgZWU9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoaS5yb3c+PUUmJmkucm93PD1PP0UtMTpPLC0xKTt0LnJvdz1udWxsPT09ZWU/LXRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoMCxpLnJvdyk6LU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJh''@;'; put 'put ''YmxlUm93c0luUmFuZ2UoZWUsaS5yb3cpLTEsMSl9ZWxzZSBpZih0LnJvdz4wKXtjb25zdCBlZT1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChpLnJvdz49RSYmaS5yb3c8PU8/TysxOkUsMSk7dC5yb3c9bnVsbD09PWVlP3RoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFu''@;'; put 'put ''Z2UoaS5yb3csdGhpcy5ob3QuY291bnRSb3dzKCkpOk1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoaS5yb3csZWUpLTEsMSl9fSkscWEodGhpcyxqZmUsdD0+e2NvbnN0IHI9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFyKXJl''@;'; put 'put ''dHVybjtjb25zdCBpPXIuY2xvbmUoKSx7dG86b309cixhPW8ucm93Pz8wLGw9by5jb2w/PzAse2NvbHVtbkluZGV4TWFwcGVyOnUscm93SW5kZXhNYXBwZXI6Z309dGhpcy5ob3QsRT0oTyxaKT0+e2kuZXhwYW5kKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKE8sWikpO2ZvcihsZXQgZWU9''@;'; put 'put ''MDtlZTx0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscy5sZW5ndGg7ZWUrPTEpe2NvbnN0IHZlPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzW2VlXS5nZXRSYW5nZSgpO3ZlJiZpLmV4cGFuZEJ5UmFuZ2UodmUpfX07aWYodC5jb2w8MCl7bGV0IE89''@;'; put 'put ''dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0U3RhcnRNb3N0Q29sdW1uSW5kZXgocixsKSt0LmNvbDtFKGEsTyksIkUtVyI9PT1yLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmIkUtVyI9PT1pLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmKE89aS5nZXRUb3BTdGFydENvcm5lcigp''@;'; put 'put ''LmNvbD8/Tyk7Y29uc3QgWj11LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChPLDEpO251bGwhPT1aJiYodC5jb2w9LU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoWixsKS0xLDEpKX1lbHNlIGlmKHQuY29sPjApe2xldCBPPXRoaXMubWVyZ2Vk''@;'; put 'put ''Q2VsbHNDb2xsZWN0aW9uLmdldEVuZE1vc3RDb2x1bW5JbmRleChyLGwpK3QuY29sO0UoYSxPKSwiVy1FIj09PXIuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiYiVy1FIj09PWkuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiYoTz1pLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbD8/Tyk7Y29u''@;'; put 'put ''c3QgWj11LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChPLC0xKTtudWxsIT09WiYmKHQuY29sPU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UobCxaKS0xLDEpKX1pZih0LnJvdzwwKXtsZXQgTz10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5n''@;'; put 'put ''ZXRUb3BNb3N0Um93SW5kZXgocixhKSt0LnJvdztFKE8sbCksIlMtTiI9PT1yLmdldFZlcnRpY2FsRGlyZWN0aW9uKCkmJiJTLU4iPT09aS5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiYoTz1pLmdldFRvcFN0YXJ0Q29ybmVyKCkucm93Pz9PKTtjb25zdCBaPWcuZ2V0TmVhcmVzdE5vdEhpZGRl''@;'; put 'put ''bkluZGV4KE8sMSk7bnVsbCE9PVomJih0LnJvdz0tTWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShaLGEpLTEsMSkpfWVsc2UgaWYodC5yb3c+MCl7bGV0IE89dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0Qm90dG9tTW9zdFJvd0luZGV4KHIs''@;'; put 'put ''YSkrdC5yb3c7RShPLGwpLCJOLVMiPT09ci5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiYiTi1TIj09PWkuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmKE89aS5nZXRCb3R0b21TdGFydENvcm5lcigpLnJvdz8/Tyk7Y29uc3QgWj1nLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChPLC0xKTtudWxs''@;'; put 'put ''IT09WiYmKHQucm93PU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoYSxaKS0xLDEpKX19KSxxYSh0aGlzLFVmZSwoKT0+e2NvbnN0IHQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighdClyZXR1cm47Y29uc3R7aGlnaGxpZ2h0OnJ9''@;'; put 'put ''PXQ7aWYodGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpcmV0dXJuIHZvaWQgcWEodGhpcyxvZixyLmNsb25lKCkpO2ZvcihsZXQgbz0wO288dGhpcy5tZXJnZWRDZWxsc0NvbGxl''@;'; put 'put ''Y3Rpb24ubWVyZ2VkQ2VsbHMubGVuZ3RoO28rPTEpe2NvbnN0IGE9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHNbb10uZ2V0UmFuZ2UoKTthJiZ0LmV4cGFuZEJ5UmFuZ2UoYSwhMSl9Zm9yKGxldCBvPTA7bzx0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRD''@;'; put 'put ''ZWxscy5sZW5ndGg7bys9MSl7Y29uc3QgYT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxsc1tvXS5nZXRSYW5nZSgpO2EmJnQuZXhwYW5kQnlSYW5nZShhLCExKX1pZihudWxsPT09ci5yb3d8fG51bGw9PT1yLmNvbClyZXR1cm47Y29uc3QgaT10aGlzLm1lcmdlZENlbGxz''@;'; put 'put ''Q29sbGVjdGlvbi5nZXQoci5yb3csci5jb2wpO3FhKHRoaXMsb2Ysci5jbG9uZSgpKSxpJiZyLmFzc2lnbihpKX0pLHFhKHRoaXMsQyQsKHQscixpLG8pPT57aWYodDwwfHxyPDApcmV0dXJuO2NvbnN0IGE9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KHQscik7aWYoIWEpcmV0dXJu''@;'; put 'put ''O2NvbnN0e3JvdzpsLGNvbDp1LGNvbHNwYW46Zyxyb3dzcGFuOkV9PWEsTz1sLFo9dSxlZT1sK0UtMSx2ZT11K2ctMTtpZigicmVuZGVyIj09PW8mJnRoaXMuZ2V0U2V0dGluZygidmlydHVhbGl6ZWQiKSl7Y29uc3QgTWU9dGhpcy5ob3Qudmlldy5nZXRBY3RpdmVPdmVybGF5TmFtZSgpLEhl''@;'; put 'put ''PVsidG9wIiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhNZSk/MDp0aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpLFdlPVsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiLCJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciJdLmlu''@;'; put 'put ''Y2x1ZGVzKE1lKT8wOnRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCk7cmV0dXJuW1ZzKEhlLE8sZWUpLFZzKFdlLFosdmUpLFZzKHRoaXMuaG90LmdldExhc3RSZW5kZXJlZFZpc2libGVSb3coKSxPLGVlKSxWcyh0aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNpYmxl''@;'; put 'put ''Q29sdW1uKCksWix2ZSldfXJldHVybltPLFosZWUsdmVdfSkscWEodGhpcyxTJCwoKT0+e3FhKHRoaXMsb2YsbnVsbCl9KSxxYSh0aGlzLHpmZSwoKT0+e2lmKCFYbyh0aGlzLG9mKXx8WG8odGhpcyxvZikuaXNDZWxsKCkpcmV0dXJuO2NvbnN0IHQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5n''@;'; put 'put ''ZUFjdGl2ZSgpO2lmKCF0KXJldHVybjtjb25zdCByPXQuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSxpPXQuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpLG89WG8odGhpcyxvZikuY2xvbmUoKS5ub3JtYWxpemUoKTtudWxsPT09by5yb3d8fG51bGw9PT1vLmNvbHx8KFhvKHRoaXMsQjQpLnNldEFj''@;'; put 'put ''dGl2ZU5vZGUoby5yb3csby5jb2wpLFhvKHRoaXMsbGcpLnJvdz4wfHxYbyh0aGlzLGxnKS5jb2w+MD9Ybyh0aGlzLEI0KS5zZXRQcmV2Tm9kZUFzQWN0aXZlKCk6KCJFLVciPT09aSYmWG8odGhpcyxsZykuY29sPDB8fCJTLU4iPT09ciYmWG8odGhpcyxsZykucm93PDApJiZYbyh0aGlzLEI0''@;'; put 'put ''KS5zZXROZXh0Tm9kZUFzQWN0aXZlKCkpfSkscWEodGhpcyxXZmUsKHQscik9Pntjb25zdHtjb2x1bW5JbmRleE1hcHBlcjppLHJvd0luZGV4TWFwcGVyOm99PXRoaXMuaG90O2xldCBhPXRoaXMuaG90LmdldEFjdGl2ZVNlbGVjdGlvbkxheWVySW5kZXgoKSxsPW51bGwsdT1udWxsO2lmKFhv''@;'; put 'put ''KHRoaXMsbGcpLmNvbDwwKXtjb25zdHtyb3dFbmQ6Zyxjb2xFbmQ6RSxzZWxlY3Rpb25MYXllcjpPfT1Ybyh0aGlzLEI0KS5nZXRQcmV2SG9yaXpvbnRhbE5vZGUoKTt1PWkuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEUsLTEpLGw9by5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZywtMSks''@;'; put 'put ''YT1PfWVsc2UgaWYoWG8odGhpcyxsZykuY29sPjApe2NvbnN0e3Jvd1N0YXJ0OmcsY29sU3RhcnQ6RSxzZWxlY3Rpb25MYXllcjpPfT1Ybyh0aGlzLEI0KS5nZXROZXh0SG9yaXpvbnRhbE5vZGUoKTt1PWkuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEUsMSksbD1vLmdldE5lYXJlc3ROb3RI''@;'; put 'put ''aWRkZW5JbmRleChnLDEpLGE9T31lbHNlIGlmKFhvKHRoaXMsbGcpLnJvdzwwKXtjb25zdHtyb3dFbmQ6Zyxjb2xFbmQ6RSxzZWxlY3Rpb25MYXllcjpPfT1Ybyh0aGlzLEI0KS5nZXRQcmV2VmVydGljYWxOb2RlKCk7dT1pLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChFLC0xKSxsPW8uZ2V0''@;'; put 'put ''TmVhcmVzdE5vdEhpZGRlbkluZGV4KGcsLTEpLGE9T31lbHNlIGlmKFhvKHRoaXMsbGcpLnJvdz4wKXtjb25zdHtyb3dTdGFydDpnLGNvbFN0YXJ0OkUsc2VsZWN0aW9uTGF5ZXI6T309WG8odGhpcyxCNCkuZ2V0TmV4dFZlcnRpY2FsTm9kZSgpO3U9aS5nZXROZWFyZXN0Tm90SGlkZGVuSW5k''@;'; put 'put ''ZXgoRSwxKSxsPW8uZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGcsMSksYT1PfWlmKG51bGwhPT1sfHxudWxsIT09dSl7dGhpcy5ob3Quc2VsZWN0aW9uLnNldEFjdGl2ZVNlbGVjdGlvbkxheWVySW5kZXgoYSk7Y29uc3QgZz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksRT1s''@;'; put 'put ''Pz8wLE89dT8/MCxaPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKEUsTyksZWU9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KEUsTyksdmU9dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGb2N1cygpO3Q9RSxyPU8sZyYmZy5oaWdobGlnaHQuYXNzaWduKGVlP3tyb3c6''@;'; put 'put ''dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGVlLnJvdywxKT8/dm9pZCAwLGNvbDp0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZWUuY29sLDEpPz92b2lkIDB9OlopLHZlLmNsZWFyKCksdmUuYWRkKFop''@;'; put 'put ''LmNvbW1pdCgpfVhvKHRoaXMsQjQpLnNldEFjdGl2ZU5vZGUodCxyLGEpLHFhKHRoaXMsbGcse3JvdzowLGNvbDowfSl9KSxxYSh0aGlzLFlmZSwoKT0+e2NvbnN0IHQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpO3QmJlhvKHRoaXMsQjQpLmJ1aWxkRm9jdXNPcmRlcih0KX0pLHFhKHRo''@;'; put 'put ''aXMsWmZlLCh0LHIsaSk9Pntjb25zdCBvPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldCh0LHIpO28mJihvLnJvdyE9PXR8fG8uY29sIT09cj8oaS5jb3B5YWJsZT0hMSxpLmhpZGRlbj0hMCk6KGkucm93c3Bhbj1vLnJvd3NwYW4saS5jb2xzcGFuPW8uY29sc3BhbixpLnNwYW5uZWQ9''@;'; put 'put ''ITApKX0pLHFhKHRoaXMsR2ZlLHQ9PntpZih0aGlzLmdldFNldHRpbmcoInZpcnR1YWxpemVkIikpcmV0dXJuO2NvbnN0IHI9dGhpcy5ob3QuY291bnRDb2xzKCk7dGhpcy5tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KHQsciksdGhpcy5tb2RpZnlWaWV3cG9ydFJvd0VuZCh0LHIpfSkscWEodGhp''@;'; put 'put ''cywkZmUsdD0+e2lmKHRoaXMuZ2V0U2V0dGluZygidmlydHVhbGl6ZWQiKSlyZXR1cm47Y29uc3Qgcj10aGlzLmhvdC5jb3VudFJvd3MoKTt0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uU3RhcnQodCxyKSx0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uRW5kKHQscil9KSxxYSh0aGlzLHFmZSwo''@;'; put 'put ''dCxyKT0+e2NvbnN0IGk9dGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5nZXREaXJlY3Rpb24ocix0KTtpZih0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zLmRyYWdBcmVhT3ZlcmxhcHNDb2xsZWN0aW9ucyhyLHQsaSkpcmV0dXJuIHI7Y29uc3Qgbz10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jk''@;'; put 'put ''cyhyWzBdLHJbMV0pLGE9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoclsyXSxyWzNdKSxsPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UobyxvLGEpLHU9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UobCk7cmV0dXJuIDA9PT11Lmxlbmd0aD90OnRoaXMuYXV0''@;'; put 'put ''b2ZpbGxDYWxjdWxhdGlvbnMuc25hcERyYWdBcmVhKHIsdCxpLHUpfSkscWEodGhpcyxLZmUsKHQscik9Pnt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJyaWdodCIsdCxyKX0pLHFhKHRoaXMsWGZlLCh0LHIpPT57dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rp''@;'; put 'put ''b24uc2hpZnRDb2xsZWN0aW9ucygibGVmdCIsdCxyKX0pLHFhKHRoaXMsUWZlLCh0LHIsaSk9PnsiYXV0byIhPT1pJiZ0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJkb3duIix0LHIpfSkscWEodGhpcyxKZmUsKHQscik9Pnt0aGlzLm1lcmdlZENlbGxzQ29s''@;'; put 'put ''bGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJ1cCIsdCxyKX0pLHFhKHRoaXMsZTNlLCh0LHIsaSxvKT0+e28mJlhvKHRoaXMsRl8pP3FhKHRoaXMsRDYsdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uY2FwdHVyZVBoeXNpY2FsU3BhbnMoImNvbHVtbiIpKTpxYSh0aGlzLEQ2LG51bGwpfSks''@;'; put 'put ''cWEodGhpcyx0M2UsKHQscixpLG8sYSk9Pntjb25zdCBsPVhvKHRoaXMsRDYpO3FhKHRoaXMsRDYsbnVsbCksYSYmbCYmKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnRyYW5zbGF0ZUFmdGVyQXhpc01vdmUoImNvbHVtbiIsbCksdGhpcy5ob3QucmVuZGVyKCkpfSkscWEodGhpcyxuM2Us''@;'; put 'put ''KHQscixpLG8pPT57byYmWG8odGhpcyxGXyk/cWEodGhpcyxJeCx0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5jYXB0dXJlUGh5c2ljYWxTcGFucygicm93IikpOnFhKHRoaXMsSXgsbnVsbCl9KSxxYSh0aGlzLHIzZSwodCxyLGksbyxhKT0+e2NvbnN0IGw9WG8odGhpcyxJeCk7cWEodGhp''@;'; put 'put ''cyxJeCxudWxsKSxhJiZsJiYodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24udHJhbnNsYXRlQWZ0ZXJBeGlzTW92ZSgicm93IixsKSx0aGlzLmhvdC5yZW5kZXIoKSl9KSxxYSh0aGlzLEUkLCh0LHIpPT57ciYmWG8odGhpcyxGXyk/cWEodGhpcyxENix0aGlzLm1lcmdlZENlbGxzQ29sbGVj''@;'; put 'put ''dGlvbi5jYXB0dXJlUGh5c2ljYWxTcGFucygiY29sdW1uIikpOnFhKHRoaXMsRDYsbnVsbCl9KSxxYSh0aGlzLE0kLCh0LHIpPT57Y29uc3QgaT1Ybyh0aGlzLEQ2KTtxYSh0aGlzLEQ2LG51bGwpLHImJmkmJih0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi50cmFuc2xhdGVBZnRlckF4aXNN''@;'; put 'put ''b3ZlKCJjb2x1bW4iLGkpLHRoaXMuaG90LnJlbmRlcigpKX0pLHFhKHRoaXMsaTNlLCh0LHIpPT57IkF1dG9maWxsLmZpbGwiPT09ciYmdGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5yZWNyZWF0ZUFmdGVyRGF0YVBvcHVsYXRpb24odCl9KSxxYSh0aGlzLG8zZSwodCxyKT0+e2lmKHImJiJh''@;'; put 'put ''cmVhIj09PXIpe2NvbnN0IGk9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFpKXJldHVybjtYbih0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShpKSxhPT57aS5nZXRCb3R0b21FbmRDb3JuZXIoKS5yb3c9PT1hLmdldExhc3RSb3coKSYmaS5n''@;'; put 'put ''ZXRCb3R0b21FbmRDb3JuZXIoKS5jb2w9PT1hLmdldExhc3RDb2x1bW4oKSYmKHRbMl09YS5yb3csdFszXT1hLmNvbCl9KX19KSxxYSh0aGlzLGEzZSwodCxyLGksbyk9PntpZihpKXJldHVybiB0aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucy5nZXRTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05h''@;'; put 'put ''bWUodCxyLGksbyl9KSxxYSh0aGlzLHMzZSwoKT0+dGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuZ2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lVG9SZW1vdmUoKSkscWEodGhpcyxsM2UsKHQscixpLG8pPT57aWYoIShvIGluc3RhbmNlb2YgTW91c2VFdmVudCkpcmV0dXJuO2NvbnN0''@;'; put 'put ''IGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFhKXJldHVybjtjb25zdCBsPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldEJ5UmFuZ2UoYSk7aWYoIWwpcmV0dXJuO2NvbnN0IHU9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3csbC5jb2wpLGc9dGhp''@;'; put 'put ''cy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3crbC5yb3dzcGFuLTEsbC5jb2wrbC5jb2xzcGFuLTEpO3JldHVybiAwPT09dGhpcy5ob3Quc2VsZWN0aW9uLmdldExheWVyTGV2ZWwoKSYmYS5pc0VxdWFsKHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UodSx1LGcpKX0pLHFhKHRoaXMsYzNl''@;'; put 'put ''LCh0LHIsaSk9PntpZih0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnJvd0hlYWRlcnN8fCJib3R0b20iPT09aXx8ImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIj09PWkpcmV0dXJuIHQ7bGV0IG8sYTtpZigibWFzdGVyIj09PWkpbz10aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNv''@;'; put 'put ''bHVtbigpLGE9dGhpcy5ob3QuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpO2Vsc2V7Y29uc3QgTWU9dGhpcy5ob3Qudmlldy5nZXRPdmVybGF5QnlOYW1lKGkpPy5jbG9uZT8ud3RUYWJsZTtpZighTWUpcmV0dXJuIHQ7bz10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1''@;'; put 'put ''YWxGcm9tUmVuZGVyYWJsZUluZGV4KE1lLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSksYT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KE1lLmdldExhc3RSZW5kZXJlZENvbHVtbigpKX1pZihudWxsPT1vfHwhdGhpcy5tZXJnZWRDZWxs''@;'; put 'put ''c0NvbGxlY3Rpb24uZ2V0KHIsbykpcmV0dXJuIHQ7Y29uc3QgdT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhyLG8pLGc9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMocixhPz9vKSxFPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UodSx1LGcpLE89dGhpcy5tZXJnZWRDZWxsc0NvbGxl''@;'; put 'put ''Y3Rpb24uZ2V0V2l0aGluUmFuZ2UoRSwhMCksWj1PLnJlZHVjZSgodmUse3Jvd3NwYW46TWV9KT0+TWF0aC5tYXgodmUsTWUpLDEpO2xldCBlZT0wO3JldHVybiBPLmxlbmd0aD4xJiZPWzBdLnJvd3NwYW48WiYmKGVlPVotT1swXS5yb3dzcGFuKSxPLmZvckVhY2goKHtyb3dzcGFuOnZlfSk9''@;'; put 'put ''PntsZXQgTWU9MDtNZT0idG9wIj09PWl8fCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciI9PT1pP01hdGgubWluKFosdGhpcy5ob3Qudmlldy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpLXIpOnZlLWVlLHQ9TWF0aC5tYXgodD8/MCxGQmUodGhpcy5ob3QscixNZSkpfSksdH0pfX1mdW5j''@;'; put 'put ''dGlvbiBVR3Qobil7bi5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSxmdW5jdGlvbiBBR3Qobil7cmV0dXJue2tleToibWVyZ2VDZWxscyIsbmFtZSgpe2NvbnN0IGU9dGhpcy5nZXRTZWxlY3RlZEFjdGl2ZSgpO2lmKGUmJm4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uKXtjb25zdCB0PW4u''@;'; put 'put ''bWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChlWzBdLGVbMV0pO2lmKCExIT09dCYmdC5yb3c9PT1lWzBdJiZ0LmNvbD09PWVbMV0mJnQucm93K3Qucm93c3Bhbi0xPT09ZVsyXSYmdC5jb2wrdC5jb2xzcGFuLTE9PT1lWzNdKXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoYmNlKX1y''@;'; put 'put ''ZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHljZSl9LGNhbGxiYWNrKCl7Y29uc3QgZT10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighZSlyZXR1cm47ZS5zZXREaXJlY3Rpb24odGhpcy5pc1J0bCgpPyJORS1TVyI6Ik5XLVNFIik7Y29uc3R7ZnJvbTp0LHRvOnJ9PWU7''@;'; put 'put ''bi50b2dnbGVNZXJnZShlKSxudWxsIT09dC5yb3cmJm51bGwhPT10LmNvbCYmbnVsbCE9PXIucm93JiZudWxsIT09ci5jb2wmJnRoaXMuc2VsZWN0Q2VsbCh0LnJvdyx0LmNvbCxyLnJvdyxyLmNvbCwhMSl9LGRpc2FibGVkKCl7Y29uc3QgZT10aGlzLmdldFNlbGVjdGVkQWN0aXZlKCk7cmV0''@;'; put 'put ''dXJuIWV8fEk2LmlzU2luZ2xlQ2VsbCh7cm93OmVbMF0sY29sOmVbMV0scm93c3BhbjplWzJdLWVbMF0rMSxjb2xzcGFuOmVbM10tZVsxXSsxfSl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfSxoaWRkZW46ITF9fSh0aGlzKSl9Y29uc3QgeUY9Im11bHRpQ29sdW1uU29y''@;'; put 'put ''dGluZyIsVUJlPXlGO3ROZSh5RixmdW5jdGlvbiB6R3QobixlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtjb25zdFssLi4uaV09dCxbLC4uLm9dPXI7cmV0dXJuIGZ1bmN0aW9uIGEobCl7Y29uc3QgdT1uW2xdLGc9ZVtsXSxFPWlbbF0sTz1vW2xdLFo9Zy5tdWx0aUNvbHVtblNvcnRpbmcsdmU9''@;'; put 'put ''KFouY29tcGFyZUZ1bmN0aW9uRmFjdG9yeT9aLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk6bk5lKGcudHlwZSkpKHUsZyxaKShFLE8pO2lmKHZlPT09dGcpe2NvbnN0IE1lPWwrMTtpZih0eXBlb2YgZVtNZV08InUiKXJldHVybiBhKE1lKX1yZXR1cm4gdmV9KDApfX0pO2NsYXNzIEdHdCBleHRl''@;'; put 'put ''bmRzIG1OZXtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4geUZ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTcwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW3lGXX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhp''@;'; put 'put ''cy5wbHVnaW5LZXldfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8c3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3N1cGVyLnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QuZ2V0U2hvcnRj''@;'; put 'put ''dXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpPy5hZGRTaG9ydGN1dCh7a2V5czpbWyJTaGlmdCIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgZT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoZSl7Y29uc3R7aGlnaGxpZ2h0OnR9PWU7aWYoLTE9PT0odC5y''@;'; put 'put ''b3c/PzApJiYodC5jb2w/PzApPj0wKXtjb25zdCByPXRoaXMuZ2V0TmV4dFNvcnRDb25maWcodC5jb2w/PzAsVVopO3RoaXMuc29ydChyKX19cmV0dXJuITF9LHJ1bk9ubHlJZjooKT0+e2NvbnN0IGU9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpPy5oaWdobGlnaHQ7cmV0dXJu''@;'; put 'put ''ISEoZSYmdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpPy5pc1NpbmdsZSgpJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShlKSYmZS5pc0hlYWRlcigpKX0scmVsYXRpdmVUb0dyb3VwOlI3LHBvc2l0aW9uOiJiZWZvcmUiLGdyb3VwOlVCZX0pfXVucmVnaXN0ZXJT''@;'; put 'put ''aG9ydGN1dHMoKXtzdXBlci51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpPy5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKFVCZSl9c29ydChlKXtzdXBlci5zb3J0KGUpfWNsZWFyU29ydCgpe3N1cGVyLmNsZWFyU29y''@;'; put 'put ''dCgpfWlzU29ydGVkKCl7cmV0dXJuIHN1cGVyLmlzU29ydGVkKCl9Z2V0U29ydENvbmZpZyhlKXtyZXR1cm4gc3VwZXIuZ2V0U29ydENvbmZpZyhlKX1zZXRTb3J0Q29uZmlnKGUpe3N1cGVyLnNldFNvcnRDb25maWcoZSl9Z2V0Tm9ybWFsaXplZFNvcnRDb25maWdzKGUpe3JldHVybiBBcnJh''@;'; put 'put ''eS5pc0FycmF5KGUpP2U6dm9pZCAwIT09ZT9bZV06W119dXBkYXRlSGVhZGVyQ2xhc3NlcyhlLHQscixpLG8pe3N1cGVyLnVwZGF0ZUhlYWRlckNsYXNzZXMoZSx0LHIsaSxvKSxrbyhlLGZ1bmN0aW9uIFlHdChuKXtjb25zdCBlPW4uY2xhc3NOYW1lLnNwbGl0KCIgIiksdD1uZXcgUmVnRXhw''@;'; put 'put ''KCJec29ydC1bMC05XXsxLDJ9JCIpO3JldHVybiBlLmZpbHRlcihyPT50LnRlc3QocikpfShlKSksITEhPT10aGlzLmVuYWJsZWQmJnZvaWQgMCE9PXQmJnZvaWQgMCE9PXImJllyKGUsZnVuY3Rpb24gV0d0KG4sZSx0KXtjb25zdCByPVtdO3JldHVybiExPT09dHx8bi5pc0NvbHVtblNvcnRl''@;'; put 'put ''ZChlKSYmbi5nZXROdW1iZXJPZlNvcnRlZENvbHVtbnMoKT4xJiZyLnB1c2goYHNvcnQtJHtuLmdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZShlKSsxfWApLHJ9KHQscixpPz8hMSkpfW9uQWZ0ZXJPbkNlbGxNb3VzZURvd24oZSx0KXshMSE9PXIxZSh0LnJvdyx0LmNvbCxlKSYmdGhpcy53''@;'; put 'put ''YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGUsdC5jb2wpJiYodGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpPyh0aGlzLmhvdC5kZXNlbGVjdENlbGwoKSx0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKHQuY29sKSx0aGlzLnNvcnQodGhpcy5nZXROZXh0U29ydENv''@;'; put 'put ''bmZpZyh0LmNvbCxVWikpKTp0aGlzLnNvcnQodGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKHQuY29sKSkpfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLHRoaXMucGx1Z2luS2V5PXlGfX1jbGFzcyBLR3QgZXh0ZW5kcyBhbHtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4ibXVs''@;'; put 'put ''dGlwbGVTZWxlY3Rpb25IYW5kbGVzIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNjB9aXNFbmFibGVkKCl7cmV0dXJuIFE1KCl9ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1y''@;'; put 'put ''ZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0e3Jvb3RFbGVtZW50OmV9PXRoaXMuaG90LHQ9cj0+e2lmKDE9PT10aGlzLmRyYWdnZWQubGVuZ3RoKXJldHVybiB0aGlzLmRyYWdnZWQuc3BsaWNlKDAsdGhpcy5kcmFnZ2VkLmxlbmd0aCksITA7Y29uc3QgaT10aGlzLmRyYWdnZWQuaW5kZXhPZihy''@;'; put 'put ''KTtpZigtMT09PWkpcmV0dXJuITE7MD09PWk/dGhpcy5kcmFnZ2VkPXRoaXMuZHJhZ2dlZC5zbGljZSgwLDEpOjE9PT1pJiYodGhpcy5kcmFnZ2VkPXRoaXMuZHJhZ2dlZC5zbGljZSgtMSkpfTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGUsInRvdWNoc3RhcnQiLHI9Pnts''@;'; put 'put ''ZXQgaTtjb25zdCBvPUFhKHIpO3JldHVybiBMYShvLCJ0b3BTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhpPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxpJiYodGhpcy5kcmFnZ2VkLnB1c2goInRvcCIpLHRoaXMudG91Y2hTdGFydFJhbmdlPXt3aWR0aDppLmdldFdpZHRo''@;'; put 'put ''KCksaGVpZ2h0OmkuZ2V0SGVpZ2h0KCksZGlyZWN0aW9uOmkuZ2V0RGlyZWN0aW9uKCl9LHIucHJldmVudERlZmF1bHQoKSksITEpOkxhKG8sImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGk9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLGkmJih0aGlzLmRyYWdn''@;'; put 'put ''ZWQucHVzaCgiYm90dG9tIiksdGhpcy50b3VjaFN0YXJ0UmFuZ2U9e3dpZHRoOmkuZ2V0V2lkdGgoKSxoZWlnaHQ6aS5nZXRIZWlnaHQoKSxkaXJlY3Rpb246aS5nZXREaXJlY3Rpb24oKX0sci5wcmV2ZW50RGVmYXVsdCgpKSwhMSk6dm9pZCAwfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZl''@;'; put 'put ''bnRMaXN0ZW5lcihlLCJ0b3VjaGVuZCIscj0+e2NvbnN0IGk9QWEocik7cmV0dXJuIExhKGksInRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KHQoInRvcCIpLHRoaXMudG91Y2hTdGFydFJhbmdlPXZvaWQgMCxyLnByZXZlbnREZWZhdWx0KCksITEpOkxhKGksImJvdHRvbVNlbGVjdGlv''@;'; put 'put ''bkhhbmRsZS1IaXRBcmVhIik/KHQoImJvdHRvbSIpLHRoaXMudG91Y2hTdGFydFJhbmdlPXZvaWQgMCxyLnByZXZlbnREZWZhdWx0KCksITEpOnZvaWQgMH0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZSwidG91Y2htb3ZlIixyPT57Y29uc3R7cm9vdERvY3VtZW50Oml9''@;'; put 'put ''PXRoaXMuaG90O2xldCBvLGEsbCx1LGcsRTtpZigwPT09dGhpcy5kcmFnZ2VkLmxlbmd0aClyZXR1cm47Y29uc3QgTz1yLnRvdWNoZXNbMF0sWj1pLmVsZW1lbnRGcm9tUG9pbnQoTy5jbGllbnRYLE8uY2xpZW50WSk7aWYoWiYmWiE9PXRoaXMubGFzdFNldENlbGwpe2lmKCJURCI9PT1aLm5v''@;'; put 'put ''ZGVOYW1lfHwiVEgiPT09Wi5ub2RlTmFtZSl7aWYobz10aGlzLmhvdC5nZXRDb29yZHMoWiksIW98fCgtMT09PW8uY29sJiYoby5jb2w9MCksYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksIWEpKXJldHVybjtsPWEuZ2V0V2lkdGgoKSx1PWEuZ2V0SGVpZ2h0KCksZz1hLmdl''@;'; put 'put ''dERpcmVjdGlvbigpLDE9PT1sJiYxPT09dSYmdGhpcy5ob3Quc2VsZWN0aW9uLnNldFJhbmdlRW5kKG8pLEU9dGhpcy5nZXRDdXJyZW50UmFuZ2VDb29yZHMoYSxvLHRoaXMudG91Y2hTdGFydFJhbmdlLmRpcmVjdGlvbixnLHRoaXMuZHJhZ2dlZFswXSksbnVsbCE9PUUuc3RhcnQmJnRoaXMu''@;'; put 'put ''aG90LnNlbGVjdGlvbi5zZXRSYW5nZVN0YXJ0KEUuc3RhcnQpLHRoaXMuaG90LnNlbGVjdGlvbi5zZXRSYW5nZUVuZChFLmVuZCksdGhpcy5sYXN0U2V0Q2VsbD1afXIucHJldmVudERlZmF1bHQoKX19KX1nZXRDdXJyZW50UmFuZ2VDb29yZHMoZSx0LHIsaSxvKXtjb25zdCBhPWUuZ2V0VG9w''@;'; put 'put ''U3RhcnRDb3JuZXIoKSxsPWUuZ2V0Qm90dG9tRW5kQ29ybmVyKCksdT1lLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCksZz1lLmdldFRvcEVuZENvcm5lcigpO2xldCBFPXtzdGFydDpudWxsLGVuZDpudWxsfTtzd2l0Y2gocil7Y2FzZSJORS1TVyI6c3dpdGNoKGkpe2Nhc2UiTkUtU1ciOmNhc2Ui''@;'; put 'put ''TlctU0UiOkU9InRvcCI9PT1vP3tzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh0LnJvdz8/MCxlLmhpZ2hsaWdodC5jb2w/PzApLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh1LnJvdz8/MCx0LmNvbD8/MCl9OntzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jk''@;'; put 'put ''cyhlLmhpZ2hsaWdodC5yb3c/PzAsdC5jb2w/PzApLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh0LnJvdz8/MCxhLmNvbD8/MCl9O2JyZWFrO2Nhc2UiU0UtTlciOiJib3R0b20iPT09byYmKEU9e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93Pz8wLHQuY29s''@;'; put 'put ''Pz8wKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHModC5yb3c/PzAsYS5jb2w/PzApfSl9YnJlYWs7Y2FzZSJOVy1TRSI6c3dpdGNoKGkpe2Nhc2UiTkUtU1ciOiJ0b3AiPT09bz9FPXtzdGFydDp0LGVuZDp1fTpFLmVuZD10O2JyZWFrO2Nhc2UiTlctU0UiOiJ0b3AiPT09bz9FPXtz''@;'; put 'put ''dGFydDp0LGVuZDpsfTpFLmVuZD10O2JyZWFrO2Nhc2UiU0UtTlciOiJ0b3AiPT09bz9FPXtzdGFydDp0LGVuZDphfTpFLmVuZD10O2JyZWFrO2Nhc2UiU1ctTkUiOiJ0b3AiPT09bz9FPXtzdGFydDp0LGVuZDpnfTpFLmVuZD10fWJyZWFrO2Nhc2UiU1ctTkUiOnN3aXRjaChpKXtjYXNlIk5X''@;'; put 'put ''LVNFIjpFPSJib3R0b20iPT09bz97c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHModC5yb3c/PzAsYS5jb2w/PzApLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh1LnJvdz8/MCx0LmNvbD8/MCl9OntzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdz8/''@;'; put 'put ''MCx0LmNvbD8/MCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHQucm93Pz8wLGwuY29sPz8wKX07YnJlYWs7Y2FzZSJTVy1ORSI6RT0idG9wIj09PW8/e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGUuaGlnaGxpZ2h0LnJvdz8/MCx0LmNvbD8/MCksZW5kOnRoaXMu''@;'; put 'put ''aG90Ll9jcmVhdGVDZWxsQ29vcmRzKHQucm93Pz8wLGwuY29sPz8wKX06e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHQucm93Pz8wLGEuY29sPz8wKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3c/PzAsdC5jb2w/PzApfTticmVhaztjYXNlIlNFLU5XIjoi''@;'; put 'put ''Ym90dG9tIj09PW8/RT17c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHModC5yb3c/PzAsZy5jb2w/PzApLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdz8/MCx0LmNvbD8/MCl9OiJ0b3AiPT09byYmKEU9e3N0YXJ0OnUsZW5kOnR9KX1icmVhaztjYXNlIlNFLU5X''@;'; put 'put ''Ijpzd2l0Y2goaSl7Y2FzZSJOVy1TRSI6Y2FzZSJORS1TVyI6Y2FzZSJTVy1ORSI6InRvcCI9PT1vJiYoRS5lbmQ9dCk7YnJlYWs7Y2FzZSJTRS1OVyI6InRvcCI9PT1vP0UuZW5kPXQ6RT17c3RhcnQ6dCxlbmQ6YX19fXJldHVybiBFfWlzRHJhZ2dlZCgpe3JldHVybiB0aGlzLmRyYWdnZWQu''@;'; put 'put ''bGVuZ3RoPjB9Y29uc3RydWN0b3IoLi4uZSl7c3VwZXIoLi4uZSksdGhpcy5kcmFnZ2VkPVtdLHRoaXMubGFzdFNldENlbGw9bnVsbH19ZnVuY3Rpb24gcEMoe2xhYmVsOm49IiIsY29sc3BhbjplPTEsb3JpZ0NvbHNwYW46dD0xLHJvd3NwYW46cj0xLG9yaWdSb3dzcGFuOmk9MSxjb2xsYXBz''@;'; put 'put ''aWJsZTpvPSExLGNyb3NzSGlkZGVuQ29sdW1uczphPVtdLGlzQ29sbGFwc2VkOmw9ITEsaXNIaWRkZW46dT0hMSxpc1Jvb3Q6Zz0hMSxpc1BsYWNlaG9sZGVyOkU9ITEsaXNSb3dzcGFuUGxhY2Vob2xkZXI6Tz0hMSxoZWFkZXJDbGFzc05hbWVzOlo9W10sdmlzaWJsZVdoZW46ZWV9PXt9KXty''@;'; put 'put ''ZXR1cm57bGFiZWw6bixjb2xzcGFuOmUsb3JpZ0NvbHNwYW46dCxyb3dzcGFuOnIsb3JpZ1Jvd3NwYW46aSxjb2xsYXBzaWJsZTpvLGlzQ29sbGFwc2VkOmwsY3Jvc3NIaWRkZW5Db2x1bW5zOmEsaXNIaWRkZW46dSxpc1Jvb3Q6Zyxpc1BsYWNlaG9sZGVyOkUsaXNSb3dzcGFuUGxhY2Vob2xk''@;'; put 'put ''ZXI6TyxoZWFkZXJDbGFzc05hbWVzOlosdmlzaWJsZVdoZW46ZWV9fWZ1bmN0aW9uIFQkKCl7cmV0dXJue2xhYmVsOiIiLGlzUGxhY2Vob2xkZXI6ITB9fWNvbnN0IFhHdD1bImNvbGxhcHNlZCIsImV4cGFuZGVkIiwiYWx3YXlzIl07ZnVuY3Rpb24gekJlKG4sZSx0KXtpZighZS5oYXMobikp''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIGNnKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIGUkdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9''@;'; put 'put ''KG4sekJlKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIHUzZShuLGUsdCl7KGZ1bmN0aW9uIEpHdChuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLGUpLGUu''@;'; put 'put ''c2V0KG4sdCl9ZnVuY3Rpb24gWDcobixlLHQpe3JldHVybiBmdW5jdGlvbiB0JHQobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtl''@;'; put 'put ''LnZhbHVlPXR9fShuLHpCZShuLGUsInNldCIpLHQpLHR9Y29uc3QgV0JlPVsibGFiZWwiLCJjb2xsYXBzaWJsZSJdO3ZhciB1Zz1uZXcgV2Vha01hcCxQXz1uZXcgV2Vha01hcCx4JD1uZXcgV2Vha01hcDtjbGFzcyBuJHR7c2V0Q29sdW1uc0xpbWl0KGUpe1g3KHRoaXMseCQsZSl9c2V0RGF0''@;'; put 'put ''YShlPVtdKXtYNyh0aGlzLHVnLGZ1bmN0aW9uIFFHdChuLGU9MS8wKXtjb25zdCB0PVtdLHI9W107aWYoMD09PWUpcmV0dXJuIHQ7Y29uc3QgaT1sPT57aWYoIiI9PT1sKXJldHVybiEwO2lmKCFDYShsKSlyZXR1cm4hMTtjb25zdHtsYWJlbDp1LGNvbHNwYW46Zyxyb3dzcGFuOkUsaGVhZGVy''@;'; put 'put ''Q2xhc3NOYW1lOk8sdmlzaWJsZVdoZW46Wn09bDtyZXR1cm4hKCIiIT09UGwodSl8fHZvaWQgMCE9PWcmJjEhPT1nfHx2b2lkIDAhPT1FJiYxIT09RXx8dm9pZCAwIT09T3x8dm9pZCAwIT09Wil9LG89bD0+e2NvbnN0IHU9cEMoKTtpZihDYShsKSl7Y29uc3R7bGFiZWw6Zyxjb2xzcGFuOkUs''@;'; put 'put ''cm93c3BhbjpPLGhlYWRlckNsYXNzTmFtZTpaLHZpc2libGVXaGVuOmVlfT1sO3UubGFiZWw9UGwoZyksIm51bWJlciI9PXR5cGVvZiBFJiZFPjEmJih1LmNvbHNwYW49RSx1Lm9yaWdDb2xzcGFuPUUpLCJudW1iZXIiPT10eXBlb2YgTyYmTz4xJiYodS5yb3dzcGFuPU8sdS5vcmlnUm93c3Bh''@;'; put 'put ''bj1PKSwic3RyaW5nIj09dHlwZW9mIFomJih1LmhlYWRlckNsYXNzTmFtZXM9Wy4uLlouc3BsaXQoIiAiKV0pLCJzdHJpbmciPT10eXBlb2YgZWUmJlhHdC5pbmNsdWRlcyhlZSkmJih1LnZpc2libGVXaGVuPWVlKX1lbHNlIHUubGFiZWw9UGwobCk7cmV0dXJuIHV9O1huKG4sKGw9W10pPT57''@;'; put 'put ''Y29uc3QgdT1bXTtsZXQgZz0wLEU9MDtmb3IodC5wdXNoKHUpOyhnPGwubGVuZ3RofHxyW0VdPjApJiYhKEU+PWUpOyl7Y29uc3QgTz1sW2ddO2lmKHJbRV0+MCl7aShPKSYmKGcrPTEpLHUucHVzaChwQygpKSxyW0VdLT0xLEUrPTE7Y29udGludWV9aWYoZz49bC5sZW5ndGgpYnJlYWs7Y29u''@;'; put 'put ''c3QgZWU9byhPKTtsZXQgdmU9ZWUub3JpZ0NvbHNwYW47aWYoRSt2ZT49ZSYmKHZlLT1FK3ZlLWUsZWUuY29sc3Bhbj12ZSxlZS5vcmlnQ29sc3Bhbj12ZSksZWUub3JpZ1Jvd3NwYW4+MSlmb3IobGV0IE1lPTA7TWU8dmU7TWUrKylyW0UrTWVdPU1hdGgubWF4KHJbRStNZV0/PzAsZWUub3Jp''@;'; put 'put ''Z1Jvd3NwYW4tMSk7aWYodS5wdXNoKGVlKSxlZS5jb2xzcGFuPjEpZm9yKGxldCBNZT0wO01lPGVlLmNvbHNwYW4tMTtNZSsrKXUucHVzaChUJCgpKTtFKz12ZSxnKz0xfX0pO2NvbnN0IGE9TWF0aC5tYXgoLi4uX2ModCxsPT5sLmxlbmd0aCkpO3JldHVybiBYbih0LGw9Pntjb25zdCB1PWw7''@;'; put 'put ''aWYodS5sZW5ndGg8YSl7Y29uc3QgZz1fYyhuZXcgQXJyYXkoYS11Lmxlbmd0aCksKCk9PnBDKCkpO3Uuc3BsaWNlKHUubGVuZ3RoLDAsLi4uZyl9fSksdH0oZSxjZyh0aGlzLHgkKSkpLFg3KHRoaXMsUF8sY2codGhpcyx1ZykubGVuZ3RoKX1nZXREYXRhKCl7cmV0dXJuIGNnKHRoaXMsdWcp''@;'; put 'put ''fW1lcmdlV2l0aChlKXtYbihlLCh7cm93OnQsY29sOnIsLi4uaX0pPT57Y29uc3Qgbz10aGlzLmdldEhlYWRlclNldHRpbmdzKHQscik7bnVsbCE9PW8mJllkKG8saSxXQmUpfSl9bWFwKGUpe1huKGNnKHRoaXMsdWcpLHQ9PntYbih0LHI9Pntjb25zdCBpPWUoey4uLnJ9KTtDYShpKSYmWWQo''@;'; put 'put ''cixpLFdCZSl9KX0pfWdldEhlYWRlclNldHRpbmdzKGUsdCl7aWYoZT49Y2codGhpcyxQXyl8fGU8MClyZXR1cm4gbnVsbDtjb25zdCByPWNnKHRoaXMsdWcpW2VdO3JldHVybiExPT09QXJyYXkuaXNBcnJheShyKXx8dD49ci5sZW5ndGg/bnVsbDpyW3RdPz9udWxsfWdldEhlYWRlcnNTZXR0''@;'; put 'put ''aW5ncyhlLHQscj0xKXtjb25zdCBpPVtdO2lmKGU+PWNnKHRoaXMsUF8pfHxlPDApcmV0dXJuIGk7Y29uc3Qgbz1jZyh0aGlzLHVnKVtlXTtsZXQgYT0wO2ZvcihsZXQgbD10O2w8by5sZW5ndGg7bCsrKXtjb25zdCB1PW9bbF07aWYodS5pc1BsYWNlaG9sZGVyJiZKcigiVGhlIGZpcnN0IGNv''@;'; put 'put ''bHVtbiBzZXR0aW5ncyBjYW5ub3Qgb3ZlcmxhcCB0aGUgb3RoZXIgaGVhZGVyIGxheWVycyIpLGErPXUuY29sc3BhbixpLnB1c2godSksdS5jb2xzcGFuPjEmJihsKz11LmNvbHNwYW4tMSksYT09PXIpYnJlYWs7YT5yJiZKcigiVGhlIGxhc3QgY29sdW1uIHNldHRpbmdzIGNhbm5vdCBvdmVy''@;'; put 'put ''bGFwIHRoZSBvdGhlciBoZWFkZXIgbGF5ZXJzIil9cmV0dXJuIGl9aW5zZXJ0Q29sdW1ucyhlLHQpe1huKGNnKHRoaXMsdWcpLHI9PntpZihlPjAmJmU8ci5sZW5ndGgmJnJbZV0uaXNQbGFjZWhvbGRlcil7bGV0IGk9ZS0xO2Zvcig7aT4wJiZyW2ldLmlzUGxhY2Vob2xkZXI7KWktPTE7cltp''@;'; put 'put ''XS5jb2xzcGFuPShyW2ldLmNvbHNwYW4/PzEpK3QscltpXS5vcmlnQ29sc3Bhbj0ocltpXS5vcmlnQ29sc3Bhbj8/MSkrdDtjb25zdCBvPVtdO2ZvcihsZXQgYT0wO2E8dDthKyspby5wdXNoKFQkKCkpO3Iuc3BsaWNlKGUsMCwuLi5vKX1lbHNle2NvbnN0IGk9W107Zm9yKGxldCBvPTA7bzx0''@;'; put 'put ''O28rKylpLnB1c2gocEMoKSk7ci5zcGxpY2UoTWF0aC5taW4oZSxyLmxlbmd0aCksMCwuLi5pKX19KX1yZW1vdmVDb2x1bW5zKGUsdCl7Y29uc3Qgcj1lK3Q7WDcodGhpcyx1ZyxjZyh0aGlzLHVnKS5tYXAoaT0+e2NvbnN0IG89W107bGV0IGE9MDtmb3IoO2E8aS5sZW5ndGg7KXtjb25zdCBs''@;'; put 'put ''PWlbYV0sZz1hKyhsLmlzUGxhY2Vob2xkZXI/MTpsLm9yaWdDb2xzcGFuPz8xKS0xO2xldCBFPTA7Zm9yKGxldCBPPWE7Tzw9ZztPKyspKE88ZXx8Tz49cikmJihFKz0xKTtpZihFPjApe28ucHVzaChwQyh7Li4ubCxjb2xzcGFuOkUsb3JpZ0NvbHNwYW46RSxpc1BsYWNlaG9sZGVyOiExfSkp''@;'; put 'put ''O2ZvcihsZXQgTz0xO088RTtPKyspby5wdXNoKFQkKCkpfWE9ZysxfXJldHVybiBvfSkpfWdldExheWVyc0NvdW50KCl7cmV0dXJuIGNnKHRoaXMsUF8pfWdldENvbHVtbnNDb3VudCgpe3JldHVybiBjZyh0aGlzLFBfKT4wP2NnKHRoaXMsdWcpWzBdLmxlbmd0aDowfWNsZWFyKCl7WDcodGhp''@;'; put 'put ''cyx1ZyxbXSksWDcodGhpcyxQXywwKX1jb25zdHJ1Y3Rvcigpe3UzZSh0aGlzLHVnLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx1M2UodGhpcyxQXyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdTNlKHRoaXMseCQse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFg3KHRoaXMs''@;'; put 'put ''dWcsW10pLFg3KHRoaXMsUF8sMCksWDcodGhpcyx4JCwxLzApfX1jb25zdCBZQmU9IkRGLXByZS1vcmRlciIscUJlPW5ldyBNYXAoW1tZQmUsZnVuY3Rpb24gWkJlKG4sZSl7bGV0IHQ9bi5jYWxsKGUsdGhpcyk7Zm9yKGxldCByPTA7cjx0aGlzLmNoaWxkcy5sZW5ndGg7cisrKXtpZighMT09''@;'; put 'put ''PXQpcmV0dXJuITE7dD1aQmUuY2FsbCh0aGlzLmNoaWxkc1tyXSxuLGUpfXJldHVybiB0fV0sWyJERi1wb3N0LW9yZGVyIixmdW5jdGlvbiBHQmUobixlKXtmb3IobGV0IHQ9MDt0PHRoaXMuY2hpbGRzLmxlbmd0aDt0KyspaWYoITE9PT1HQmUuY2FsbCh0aGlzLmNoaWxkc1t0XSxuLGUpKXJl''@;'; put 'put ''dHVybiExO3JldHVybiBuLmNhbGwoZSx0aGlzKX1dLFsiQkYiLGZ1bmN0aW9uIGkkdChuLGUpe2NvbnN0IHQ9W3RoaXNdOyFmdW5jdGlvbiByKCl7aWYoMD09PXQubGVuZ3RoKXJldHVybjtjb25zdCBpPXQuc2hpZnQoKTt0LnB1c2goLi4uaS5jaGlsZHMpLCExIT09bi5jYWxsKGUsaSkmJnIo''@;'; put 'put ''KX0oKX1dXSk7Y2xhc3MgQSR7YWRkQ2hpbGQoZSl7ZS5wYXJlbnQ9dGhpcyx0aGlzLmNoaWxkcy5wdXNoKGUpfWNsb25lVHJlZShlPXRoaXMpe2NvbnN0IHQ9bmV3IEEkKHsuLi5lLmRhdGF9KTtmb3IobGV0IHI9MDtyPGUuY2hpbGRzLmxlbmd0aDtyKyspdC5hZGRDaGlsZCh0aGlzLmNsb25l''@;'; put 'put ''VHJlZShlLmNoaWxkc1tyXSkpO3JldHVybiB0fXJlcGxhY2VUcmVlV2l0aChlKXt0aGlzLmRhdGE9ey4uLmUuZGF0YX0sdGhpcy5jaGlsZHM9W107Zm9yKGxldCB0PTA7dDxlLmNoaWxkcy5sZW5ndGg7dCsrKXRoaXMuYWRkQ2hpbGQoZS5jaGlsZHNbdF0pfXdhbGtEb3duKGUsdD0iQkYiKXtx''@;'; put 'put ''QmUuaGFzKHQpfHxKcihgVHJhdmVyc2FsIHN0cmF0ZWd5ICIke3R9IiBkb2VzIG5vdCBleGlzdGApLHFCZS5nZXQodCkuY2FsbCh0aGlzLGUsdGhpcyl9d2Fsa1VwKGUpe2NvbnN0IHQ9cj0+eyExIT09ZS5jYWxsKHRoaXMscikmJm51bGwhPT1yLnBhcmVudCYmdChyLnBhcmVudCl9O3QodGhp''@;'; put 'put ''cyl9Y29uc3RydWN0b3IoZSl7dGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcz1bXSx0aGlzLmRhdGE9ZX19ZnVuY3Rpb24gS0JlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNl''@;'; put 'put ''Iik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIG4zKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIHMkdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sS0JlKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIGQzZShuLGUsdCl7KGZ1bmN0aW9uIGEkdChuLGUpe2lmKGUuaGFzKG4p''@;'; put 'put ''KXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLGUpLGUuc2V0KG4sdCl9ZnVuY3Rpb24gayQobixlLHQpe3JldHVybiBmdW5jdGlvbiBsJHQobixlLHQpe2lmKGUuc2V0KWUuc2V0''@;'; put 'put ''LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLEtCZShuLGUsInNldCIpLHQpLHR9dmFyIGdDPW5ldyBXZWFrTWFwLEhfPW5ldyBXZWFrTWFwLG1D''@;'; put 'put ''PW5ldyBXZWFrTWFwO2NsYXNzIGMkdHtnZXRSb290cygpe3JldHVybiBBcnJheS5mcm9tKG4zKHRoaXMsZ0MpLnZhbHVlcygpKX1nZXRSb290QnlDb2x1bW4oZSl7bGV0IHQ7cmV0dXJuIG4zKHRoaXMsSF8pLmhhcyhlKSYmKHQ9bjModGhpcyxnQykuZ2V0KG4zKHRoaXMsSF8pLmdldChlKSkp''@;'; put 'put ''LHR9Z2V0Tm9kZShlLHQpe2NvbnN0IHI9dGhpcy5nZXRSb290QnlDb2x1bW4odCk7aWYoIXIpcmV0dXJuO2NvbnN0IGk9dC1uMyh0aGlzLEhfKS5nZXQodCk7bGV0IGEsbz0wO3JldHVybiByLndhbGtEb3duKGw9Pntjb25zdHtvcmlnQ29sc3Bhbjp1LGhlYWRlckxldmVsOmd9PWwuZGF0YTtp''@;'; put 'put ''ZihlPT09Zyl7aWYoaT49byYmaTw9byt1LTEpcmV0dXJuIGE9bCxhLmRhdGEuaXNSb290PXQ9PT1hLmRhdGEuY29sdW1uSW5kZXgsITE7bys9dX19KSxhfXJlYnVpbGRUcmVlSW5kZXgoKXtsZXQgZT0wO24zKHRoaXMsSF8pLmNsZWFyKCksWG4objModGhpcyxnQyksKFssdF0pPT57Y29uc3R7''@;'; put 'put ''Y29sc3BhbjpyfT10LmRhdGE7Zm9yKGxldCBpPWU7aTxlK3I7aSsrKW4zKHRoaXMsSF8pLnNldChpLGUpO2UrPXJ9KX1idWlsZFRyZWUoKXt0aGlzLmNsZWFyKCk7Y29uc3QgZT1uMyh0aGlzLG1DKS5nZXRDb2x1bW5zQ291bnQoKTtsZXQgdD0wO2Zvcig7dDxlOyl7Y29uc3Qgcj1uMyh0aGlz''@;'; put 'put ''LG1DKS5nZXRIZWFkZXJTZXR0aW5ncygwLHQpLGk9bmV3IEEkKHsuLi5wQygpLGhlYWRlckxldmVsOjAsY29sdW1uSW5kZXg6dH0pO24zKHRoaXMsZ0MpLnNldCh0LGkpLHRoaXMuYnVpbGRMZWF2ZXMoaSx0LDAsci5vcmlnQ29sc3BhbiksdCs9ci5vcmlnQ29sc3Bhbn10aGlzLnJlYnVpbGRU''@;'; put 'put ''cmVlSW5kZXgoKX1idWlsZExlYXZlcyhlLHQscixpPTEpe2NvbnN0IG89bjModGhpcyxtQykuZ2V0SGVhZGVyc1NldHRpbmdzKHIsdCxpKTtyKz0xLFhuKG8sYT0+e2NvbnN0IGw9YSx1PXsuLi5sLGhlYWRlckxldmVsOnItMSxjb2x1bW5JbmRleDp0fTtsZXQgZzsxPT09cj8oZS5kYXRhPXUs''@;'; put 'put ''Zz1lKTooZz1uZXcgQSQodSksZS5hZGRDaGlsZChnKSkscjxuMyh0aGlzLG1DKS5nZXRMYXllcnNDb3VudCgpJiZ0aGlzLmJ1aWxkTGVhdmVzKGcsdCxyLGwub3JpZ0NvbHNwYW4pLHQrPWwub3JpZ0NvbHNwYW59KX1jbGVhcigpe24zKHRoaXMsZ0MpLmNsZWFyKCksbjModGhpcyxIXykuY2xl''@;'; put 'put ''YXIoKX1jb25zdHJ1Y3RvcihlKXtkM2UodGhpcyxnQyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZDNlKHRoaXMsSF8se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGQzZSh0aGlzLG1DLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxrJCh0aGlzLGdDLG5ldyBNYXApLGskKHRo''@;'; put 'put ''aXMsSF8sbmV3IE1hcCksayQodGhpcyxtQyxudWxsKSxrJCh0aGlzLG1DLGUpfX1mdW5jdGlvbiBSJChuLGUpe2NvbnN0e2RhdGE6dCxjaGlsZHM6cn09bjtpZih0LmlzQ29sbGFwc2VkKWlmKHIubGVuZ3RoPjApe2NvbnN0IGk9ci5maW5kKCh7ZGF0YTpvfSk9PiFvLmlzSGlkZGVuKTtpJiZS''@;'; put 'put ''JChpLGUpfWVsc2UgZm9yKGxldCBpPTA7aTx0LmNvbHNwYW47aSsrKWUodC5jb2x1bW5JbmRleCtpKTtlbHNlIGlmKDAhPT1yLmxlbmd0aClyLmZvckVhY2goaT0+UiQoaSxlKSk7ZWxzZSBmb3IobGV0IGk9MDtpPHQub3JpZ0NvbHNwYW47aSsrKWUodC5jb2x1bW5JbmRleCtpKX1mdW5jdGlv''@;'; put 'put ''biBoM2Uobil7cmV0dXJuIG4uY2hpbGRzLmxlbmd0aD4wJiZuLmNoaWxkcy5zb21lKCh7ZGF0YTplfSk9PnZvaWQgMCE9PWUudmlzaWJsZVdoZW4pfWZ1bmN0aW9uIGYzZSh7Y2hpbGRzOm59LGUpe2lmKDAhPT1uLmxlbmd0aClyZXR1cm4gblswXS5kYXRhW2VdfWZ1bmN0aW9uIEkkKG4pe3Jl''@;'; put 'put ''dHVybiBmM2Uobiwib3JpZ0NvbHNwYW4iKT09PW4uZGF0YS5vcmlnQ29sc3Bhbn1mdW5jdGlvbiBEJChuKXtjb25zdHtkYXRhOmUsY2hpbGRzOnR9PW47aWYoIWUuaXNDb2xsYXBzZWR8fGUuaXNIaWRkZW58fGUub3JpZ0NvbHNwYW48PTEpcmV0dXJue3JvbGxiYWNrTW9kaWZpY2F0aW9uOigp''@;'; put 'put ''PT57fSxhZmZlY3RlZENvbHVtbnM6W10sY29sc3BhbkNvbXBlbnNhdGlvbjowfTtpZihoM2UobikpcmV0dXJuIGUuaXNDb2xsYXBzZWQ9ITEse3JvbGxiYWNrTW9kaWZpY2F0aW9uOigpPT5MJChuKSxhZmZlY3RlZENvbHVtbnM6W10sY29sc3BhbkNvbXBlbnNhdGlvbjowfTtpZihJJChuKSly''@;'; put 'put ''ZXR1cm4gRCQodFswXSk7ZS5pc0NvbGxhcHNlZD0hMTtjb25zdCBpPXQuZmlsdGVyKCh7ZGF0YTpsfSk9PmwuY2xvbmVkVHJlZSksbz1uZXcgU2V0O2xldCBhPTA7aWYoaS5sZW5ndGg+MClYbihpLGw9PntsLnJlcGxhY2VUcmVlV2l0aChsLmRhdGEuY2xvbmVkVHJlZSk7Y29uc3QgZz1sLmRh''@;'; put 'put ''dGE7Zy5jbG9uZWRUcmVlPW51bGwsYSs9Zy5jb2xzcGFuLFIkKGwsRT0+e28uYWRkKEUpfSl9KTtlbHNlIGlmKDA9PT10Lmxlbmd0aCl7Y29uc3R7Y29sc3BhbjpsLG9yaWdDb2xzcGFuOnUsY29sdW1uSW5kZXg6Z309ZTthPXUtbDtmb3IobGV0IEU9MTtFPHU7RSsrKW8uYWRkKGcrRSl9cmV0''@;'; put 'put ''dXJuIG4ud2Fsa1VwKGw9Pntjb25zdHtkYXRhOnV9PWw7dS5jb2xzcGFuKz1hLHUuY29sc3Bhbj49dS5vcmlnQ29sc3Bhbj8odS5jb2xzcGFuPXUub3JpZ0NvbHNwYW4sdS5pc0NvbGxhcHNlZD0hMSk6SSQobCkmJih1LmlzQ29sbGFwc2VkPWYzZShsLCJpc0NvbGxhcHNlZCIpKX0pLHtyb2xs''@;'; put 'put ''YmFja01vZGlmaWNhdGlvbjooKT0+TCQobiksYWZmZWN0ZWRDb2x1bW5zOkFycmF5LmZyb20obyksY29sc3BhbkNvbXBlbnNhdGlvbjphfX1mdW5jdGlvbiBMJChuKXtjb25zdHtkYXRhOmUsY2hpbGRzOnR9PW47aWYoZS5pc0NvbGxhcHNlZHx8ZS5pc0hpZGRlbnx8ZS5vcmlnQ29sc3Bhbjw9''@;'; put 'put ''MSlyZXR1cm57cm9sbGJhY2tNb2RpZmljYXRpb246KCk9Pnt9LGFmZmVjdGVkQ29sdW1uczpbXSxjb2xzcGFuQ29tcGVuc2F0aW9uOjB9O2lmKGgzZShuKSlyZXR1cm4gZS5pc0NvbGxhcHNlZD0hMCx7cm9sbGJhY2tNb2RpZmljYXRpb246KCk9PkQkKG4pLGFmZmVjdGVkQ29sdW1uczpbXSxj''@;'; put 'put ''b2xzcGFuQ29tcGVuc2F0aW9uOjB9O2lmKEkkKG4pKXJldHVybiBMJCh0WzBdKTtjb25zdCBpPW5ldyBTZXQ7bGV0IG89MDtpZih0Lmxlbmd0aD4wKXtjb25zdCBhPXQuZmluZEluZGV4KCh7ZGF0YTp1fSk9PiF1LmlzSGlkZGVuKSxsPXQuZmlsdGVyKCh1LGcpPT5nPmEpO2lmKC0xPT09YXx8''@;'; put 'put ''MD09PWwubGVuZ3RoKXJldHVybntyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+e30sYWZmZWN0ZWRDb2x1bW5zOltdLGNvbHNwYW5Db21wZW5zYXRpb246MH07WG4obCx1PT57UiQodSxnPT57aS5hZGQoZyl9KSx1LmRhdGEuY2xvbmVkVHJlZT11LmNsb25lVHJlZSgpLHUud2Fsa0Rvd24oKHtk''@;'; put 'put ''YXRhOmd9KT0+e2cuaXNIaWRkZW49ITB9KX0pLG89ZS5jb2xzcGFuLXRbYV0uZGF0YS5jb2xzcGFufWVsc2V7Y29uc3R7b3JpZ0NvbHNwYW46YSxjb2x1bW5JbmRleDpsfT1lLHU9bmV3IFNldChlLmNyb3NzSGlkZGVuQ29sdW1ucyksZz1bXTtmb3IobGV0IEU9bDtFPGwrYTtFKyspdS5oYXMo''@;'; put 'put ''RSl8fGcucHVzaChFKTtpZihnLmxlbmd0aDw9MSlyZXR1cm57cm9sbGJhY2tNb2RpZmljYXRpb246KCk9Pnt9LGFmZmVjdGVkQ29sdW1uczpbXSxjb2xzcGFuQ29tcGVuc2F0aW9uOjB9O1huKGcuc2xpY2UoMSksRT0+e2kuYWRkKEUpfSksbz1nLmxlbmd0aC0xfXJldHVybiBlLmlzQ29sbGFw''@;'; put 'put ''c2VkPSEwLG4ud2Fsa1VwKGE9Pntjb25zdHtkYXRhOmx9PWE7bC5jb2xzcGFuLT1vLGwuY29sc3Bhbjw9MT8obC5jb2xzcGFuPTEsbC5pc0NvbGxhcHNlZD0hMCk6SSQoYSkmJihsLmlzQ29sbGFwc2VkPWYzZShhLCJpc0NvbGxhcHNlZCIpKX0pLHtyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+''@;'; put 'put ''RCQobiksYWZmZWN0ZWRDb2x1bW5zOkFycmF5LmZyb20oaSksY29sc3BhbkNvbXBlbnNhdGlvbjpvfX1jb25zdCB1JHQ9bmV3IE1hcChbWyJjb2xsYXBzZSIsTCRdLFsiZXhwYW5kIixEJF1dKTtmdW5jdGlvbiBwM2Uobil7Y29uc3QgZT1bXTtyZXR1cm4gWG4obix0PT57dC53YWxrRG93bihy''@;'; put 'put ''PT57Y29uc3QgaT1yLmRhdGEse29yaWdDb2xzcGFuOm8sY29sdW1uSW5kZXg6YSxoZWFkZXJMZXZlbDpsLGNyb3NzSGlkZGVuQ29sdW1uczp1fT1pLGc9ZnVuY3Rpb24gcCR0KG4sZSl7bGV0IHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkobltlXSk/dD1uW2VdOih0PVtdLG5bZV09dCksdH0oZSxs''@;'; put 'put ''KTtsZXQgRT0hMTtmb3IobGV0IE89YTtPPGErbztPKyspaWYodS5pbmNsdWRlcyhPKXx8RSlnLnB1c2goVCQoKSk7ZWxzZXtjb25zdCBlZT1mJHQoaSk7ZWUuaXNSb290PSEwLGcucHVzaChlZSksRT0hMH19KX0pLGZ1bmN0aW9uIGgkdChuKXtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl7''@;'; put 'put ''Y29uc3QgdD1uW2VdO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtjb25zdCBpPXRbcl07aWYoIWl8fCFpLmlzUm9vdHx8IWkub3JpZ1Jvd3NwYW58fGkub3JpZ1Jvd3NwYW48PTEpY29udGludWU7Y29uc3Qgbz1NYXRoLm1pbihpLm9yaWdSb3dzcGFuLG4ubGVuZ3RoLWUpLGE9aS5vcmln''@;'; put 'put ''Q29sc3Bhbnx8MTtmb3IobGV0IGw9MTtsPG87bCsrKXtjb25zdCB1PWUrbDtpZihuW3VdKWZvcihsZXQgZz1yO2c8cithJiZnPG5bdV0ubGVuZ3RoO2crKyluW3VdW2ddPXtsYWJlbDoiIixpc1BsYWNlaG9sZGVyOiEwLGlzUm93c3BhblBsYWNlaG9sZGVyOiEwfX19fX0oZSksZX1mdW5jdGlv''@;'; put 'put ''biBmJHQobil7Y29uc3R7Y3Jvc3NIaWRkZW5Db2x1bW5zOmUsLi4udH09cEMobik7cmV0dXJuIHR9ZnVuY3Rpb24gWEJlKG4sZSl7bi5mb3JFYWNoKHQ9Pnt0LndhbGtEb3duKHI9Pntjb25zdCBpPXIuZGF0YSx7Y29sdW1uSW5kZXg6byxvcmlnQ29sc3BhbjphfT1pLGw9W107Zm9yKGxldCB1''@;'; put 'put ''PW87dTxvK2E7dSsrKWUuaXNWaXNpYmxlKHUpfHxsLnB1c2godSk7aS5jcm9zc0hpZGRlbkNvbHVtbnM9bCxpLmNvbHNwYW49YS1sLmxlbmd0aCxpLmlzSGlkZGVuPTA9PT1pLmNvbHNwYW59KX0pfWZ1bmN0aW9uIFFCZShuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNh''@;'; put 'put ''bm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gSkJlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNl''@;'; put 'put ''Iik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIGd1KG4sZSl7cmV0dXJuIGZ1bmN0aW9uIGckdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sSkJlKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIE8kKG4sZSx0KXtRQmUobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIEw2''@;'; put 'put ''KG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gbSR0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixKQmUobixl''@;'; put 'put ''LCJzZXQiKSx0KSx0fWZ1bmN0aW9uIE82KG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiB0fWZ1bmN0aW9uIGJGKG4sZSl7UUJlKG4sZSksZS5hZGQobil9dmFyIGRn''@;'; put 'put ''PW5ldyBXZWFrTWFwLGMyPW5ldyBXZWFrTWFwLHZDPW5ldyBXZWFrTWFwLER4PW5ldyBXZWFrTWFwLHdGPW5ldyBXZWFrU2V0LGVqZT1uZXcgV2Vha1NldCx0amU9bmV3IFdlYWtTZXQsZzNlPW5ldyBXZWFrU2V0LG0zZT1uZXcgV2Vha1NldDtjbGFzcyB2JHR7c2V0U3RhdGUoZSl7Z3UodGhp''@;'; put 'put ''cyxkZykuc2V0RGF0YShlKTtsZXQgdD0hMTt0cnl7Z3UodGhpcyxjMikuYnVpbGRUcmVlKCl9Y2F0Y2h7Z3UodGhpcyxjMikuY2xlYXIoKSxndSh0aGlzLGRnKS5jbGVhcigpLHQ9ITB9cmV0dXJuIE82KHRoaXMsZzNlLG5qZSkuY2FsbCh0aGlzKSx0fXNldENvbHVtbnNMaW1pdChlKXtndSh0''@;'; put 'put ''aGlzLGRnKS5zZXRDb2x1bW5zTGltaXQoZSl9bWVyZ2VTdGF0ZVdpdGgoZSl7Y29uc3QgdD1fYyhlLCh7cm93OnIsLi4uaX0pPT4oe3JvdzpyPDA/dGhpcy5yb3dDb29yZHNUb0xldmVsKHIpPz9yOnIsLi4uaX0pKTtPNih0aGlzLHdGLE4kKS5jYWxsKHRoaXMsKCk9Pmd1KHRoaXMsZGcpLm1l''@;'; put 'put ''cmdlV2l0aCh0KSxyPT5yKX1tYXBTdGF0ZShlKXtPNih0aGlzLHdGLE4kKS5jYWxsKHRoaXMsKCk9Pmd1KHRoaXMsZGcpLm1hcChlKSx0PT50KX1pbnNlcnRDb2x1bW5zKGUsdCl7TzYodGhpcyx3RixOJCkuY2FsbCh0aGlzLCgpPT5ndSh0aGlzLGRnKS5pbnNlcnRDb2x1bW5zKGUsdCkscj0+''@;'; put 'put ''cj49ZT9yK3Q6cil9cmVtb3ZlQ29sdW1ucyhlLHQpe2NvbnN0IHI9ZSt0O082KHRoaXMsd0YsTiQpLmNhbGwodGhpcywoKT0+Z3UodGhpcyxkZykucmVtb3ZlQ29sdW1ucyhlLHQpLGk9Pmk8ZT9pOmk+PXI/aS10OmUpfW1hcE5vZGVzKGUpe3JldHVybiBtMShndSh0aGlzLGMyKS5nZXRSb290''@;'; put 'put ''cygpLCh0LHIpPT4oci53YWxrRG93bihpPT57Y29uc3Qgbz1lKGkuZGF0YSk7dm9pZCAwIT09byYmdC5wdXNoKG8pfSksdCksW10pfXRyaWdnZXJOb2RlTW9kaWZpY2F0aW9uKGUsdCxyKXt0PDAmJih0PXRoaXMucm93Q29vcmRzVG9MZXZlbCh0KT8/MCk7Y29uc3QgaT1ndSh0aGlzLGMyKS5n''@;'; put 'put ''ZXROb2RlKHQscik7bGV0IG87cmV0dXJuIGkmJihvPWZ1bmN0aW9uIGQkdChuLGUsdCl7Y29uc3Qgcj11JHQuZ2V0KG4pO3JldHVybiByfHxKcihgVGhlIG5vZGUgbW9kaWZpZXIgYWN0aW9uICgiJHtufSIpIGRvZXMgbm90IGV4aXN0LmApLHIoZSx0KX0oZSxpLHIpLEw2KHRoaXMsdkMscDNl''@;'; put 'put ''KGd1KHRoaXMsYzIpLmdldFJvb3RzKCkpKSksbz8/dm9pZCAwfXRyaWdnZXJDb2x1bW5Nb2RpZmljYXRpb24oZSx0KXtyZXR1cm4gdGhpcy50cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbihlLC0xLHQpfXN5bmNWaXNpYmlsaXR5KGUpe0w2KHRoaXMsRHgsZSksWEJlKGd1KHRoaXMsYzIpLmdldFJv''@;'; put 'put ''b3RzKCksZSksTDYodGhpcyx2QyxwM2UoZ3UodGhpcyxjMikuZ2V0Um9vdHMoKSkpfXJvd0Nvb3Jkc1RvTGV2ZWwoZSl7aWYoZT49MClyZXR1cm4gbnVsbDtjb25zdCB0PWUrTWF0aC5tYXgodGhpcy5nZXRMYXllcnNDb3VudCgpLDEpO3JldHVybiB0PDA/bnVsbDp0fWxldmVsVG9Sb3dDb29y''@;'; put 'put ''ZHMoZSl7aWYoZTwwKXJldHVybiBudWxsO2NvbnN0IHQ9ZS1NYXRoLm1heCh0aGlzLmdldExheWVyc0NvdW50KCksMSk7cmV0dXJuIHQ+PTA/bnVsbDp0fWdldEhlYWRlclNldHRpbmdzKGUsdCl7cmV0dXJuIGU8MCYmKGU9dGhpcy5yb3dDb29yZHNUb0xldmVsKGUpPz8wKSxudWxsPT09ZXx8''@;'; put 'put ''ZT49dGhpcy5nZXRMYXllcnNDb3VudCgpP251bGw6Z3UodGhpcyx2QylbZV0/Llt0XT8/bnVsbH1nZXRIZWFkZXJUcmVlTm9kZURhdGEoZSx0KXtjb25zdCByPXRoaXMuZ2V0SGVhZGVyVHJlZU5vZGUoZSx0KTtyZXR1cm4gcj97Li4uci5kYXRhfTpudWxsfWdldEhlYWRlclRyZWVOb2RlKGUs''@;'; put 'put ''dCl7bGV0IHI9ZTtyZXR1cm4gZTwwJiYocj10aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwoZSkpLG51bGw9PT1yfHxyPj10aGlzLmdldExheWVyc0NvdW50KCk/bnVsbDpndSh0aGlzLGMyKS5nZXROb2RlKHIsdCl8fG51bGx9ZmluZFRvcE1vc3RFbnRpcmVIZWFkZXJMZXZlbChlLHQ9ZSl7Y29uc3Qg''@;'; put 'put ''cj10LWUrMTtsZXQgaT0hMSxvPW51bGw7Zm9yKGxldCBhPWU7YTw9dDthKyspe2NvbnN0IGw9Z3UodGhpcyxjMikuZ2V0Um9vdEJ5Q29sdW1uKGEpO2lmKCFsKWJyZWFrO2k9ITAsbC53YWxrRG93bih1PT57Y29uc3R7Y29sdW1uSW5kZXg6ZyxoZWFkZXJMZXZlbDpFLG9yaWdDb2xzcGFuOk8s''@;'; put 'put ''aXNIaWRkZW46Wn09dS5kYXRhO1p8fE88PXImJmc+PWUmJmcrTy0xPD10JiYobnVsbD09PW98fEU8bykmJihvPUUpfSxZQmUpfXJldHVybiBpJiZudWxsPT09bz8tMTp0aGlzLmxldmVsVG9Sb3dDb29yZHMobz8/MCl9ZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoZSx0KXtjb25zdHtpc1Jvb3Q6''@;'; put 'put ''cn09dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhlLHQpPz97aXNSb290OiEwfTtpZihyKXJldHVybiB0O2xldCBpPXQtMTtmb3IoO2k+PTA7KXtjb25zdHtpc1Jvb3Q6b309dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhlLGkpPz97aXNSb290OiEwfTtpZihvKWJyZWFrO2ktPTF9cmV0dXJuIGl9Zmlu''@;'; put 'put ''ZFJpZ2h0TW9zdENvbHVtbkluZGV4KGUsdCl7Y29uc3R7aXNSb290OnIsb3JpZ0NvbHNwYW46aX09dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhlLHQpPz97aXNSb290OiEwLG9yaWdDb2xzcGFuOjF9O2lmKHIpcmV0dXJuIHQraS0xO2xldCBvPXQrMTtmb3IoO288dGhpcy5nZXRDb2x1bW5zQ291''@;'; put 'put ''bnQoKTspe2NvbnN0e2lzUm9vdDphfT10aGlzLmdldEhlYWRlclNldHRpbmdzKGUsbyk/P3tpc1Jvb3Q6ITB9O2lmKGEpYnJlYWs7bys9MX1yZXR1cm4gby0xfWdldExheWVyc0NvdW50KCl7cmV0dXJuIGd1KHRoaXMsZGcpLmdldExheWVyc0NvdW50KCl9Z2V0Q29sdW1uc0NvdW50KCl7cmV0''@;'; put 'put ''dXJuIGd1KHRoaXMsZGcpLmdldENvbHVtbnNDb3VudCgpfWdldFZpc2libGVXaGVuSGlkZGVuQ29sdW1ucygpe2NvbnN0IGU9W107cmV0dXJuIGd1KHRoaXMsYzIpLmdldFJvb3RzKCkuZm9yRWFjaCh0PT57dC53YWxrRG93bihyPT57Y29uc3QgaT1yLmNoaWxkcztpZighMCE9PXIuZGF0YS5j''@;'; put 'put ''b2xsYXBzaWJsZXx8MD09PWkubGVuZ3RofHwhaDNlKHIpKXJldHVybjtjb25zdCBvPSEwPT09ci5kYXRhLmlzQ29sbGFwc2VkLGE9aS5maWx0ZXIobD0+e2NvbnN0IHU9bC5kYXRhLnZpc2libGVXaGVuPz8iZXhwYW5kZWQiO3JldHVybiJleHBhbmRlZCI9PT11JiZvfHwiY29sbGFwc2VkIj09''@;'; put 'put ''PXUmJiFvfSk7YS5sZW5ndGg9PT1pLmxlbmd0aCYmYS5zaGlmdCgpLGEuZm9yRWFjaCgoe2RhdGE6e2NvbHVtbkluZGV4Omwsb3JpZ0NvbHNwYW46dX19KT0+e2ZvcihsZXQgZz0wO2c8dTtnKyspZS5wdXNoKGwrZyl9KX0pfSksZX1jbGVhcigpe0w2KHRoaXMsdkMsW10pLGd1KHRoaXMsZGcp''@;'; put 'put ''LmNsZWFyKCksZ3UodGhpcyxjMikuY2xlYXIoKSxMNih0aGlzLER4LG51bGwpfWNvbnN0cnVjdG9yKCl7YkYodGhpcyx3RiksYkYodGhpcyxlamUpLGJGKHRoaXMsdGplKSxiRih0aGlzLGczZSksYkYodGhpcyxtM2UpLE8kKHRoaXMsZGcse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE8k''@;'; put 'put ''KHRoaXMsYzIse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE8kKHRoaXMsdkMse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE8kKHRoaXMsRHgse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEw2KHRoaXMsZGcsbmV3IG4kdCksTDYodGhpcyxjMixuZXcgYyR0KGd1KHRoaXMsZGcp''@;'; put 'put ''KSksTDYodGhpcyx2QyxbW11dKSxMNih0aGlzLER4LG51bGwpfX1mdW5jdGlvbiBOJChuLGUpe2NvbnN0IHQ9TzYodGhpcyxlamUsXyR0KS5jYWxsKHRoaXMpO24oKSxndSh0aGlzLGMyKS5idWlsZFRyZWUoKSxPNih0aGlzLG0zZSxyamUpLmNhbGwodGhpcyksTzYodGhpcyx0amUseSR0KS5j''@;'; put 'put ''YWxsKHRoaXMsdCxlKSxPNih0aGlzLGczZSxuamUpLmNhbGwodGhpcyl9ZnVuY3Rpb24gXyR0KCl7Y29uc3Qgbj1bXTtyZXR1cm4gZ3UodGhpcyxjMikuZ2V0Um9vdHMoKS5mb3JFYWNoKGU9PntlLndhbGtEb3duKHQ9Pntjb25zdCByPXQuZGF0YTtyLmlzQ29sbGFwc2VkJiZuLnB1c2goe2hl''@;'; put 'put ''YWRlckxldmVsOnIuaGVhZGVyTGV2ZWwsY29sdW1uSW5kZXg6ci5jb2x1bW5JbmRleH0pfSl9KSxufWZ1bmN0aW9uIHkkdChuLGUpe24uZm9yRWFjaCgoe2hlYWRlckxldmVsOnQsY29sdW1uSW5kZXg6cn0pPT57dGhpcy50cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbigiY29sbGFwc2UiLHQsZShy''@;'; put 'put ''KSl9KX1mdW5jdGlvbiBuamUoKXtPNih0aGlzLG0zZSxyamUpLmNhbGwodGhpcyksTDYodGhpcyx2QyxwM2UoZ3UodGhpcyxjMikuZ2V0Um9vdHMoKSkpfWZ1bmN0aW9uIHJqZSgpe2d1KHRoaXMsRHgpJiZYQmUoZ3UodGhpcyxjMikuZ2V0Um9vdHMoKSxndSh0aGlzLER4KSl9ZnVuY3Rpb24g''@;'; put 'put ''aWplKG4pe3JldHVybntpc1Zpc2libGUoZSl7Y29uc3QgdD1uLmNvbHVtbkluZGV4TWFwcGVyLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KGUpO3JldHVybiBudWxsIT09dCYmIW4uY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4odCl9fX1mdW5jdGlvbiBGJChuLGUsdCl7aWYoIWUuaGFz''@;'; put 'put ''KG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiBQJChuLGUpeyhmdW5jdGlvbiBiJHQobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlh''@;'; put 'put ''bGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobixlKSxlLmFkZChuKX12YXIgb2plPW5ldyBXZWFrU2V0LGFqZT1uZXcgV2Vha1NldCxzamU9bmV3IFdlYWtTZXQsbGplPW5ldyBXZWFrU2V0O2Z1bmN0aW9uIEMkdCgpe2NvbnN0IG49bmV3IFNl''@;'; put 'put ''dCxlPXRoaXMuaG90LmNvdW50Q29scygpO2ZvcihsZXQgdD0wO3Q8ZTt0Kyspe2NvbnN0IHI9dGhpcy5oZWFkZXJzU3RhdGVNYW5hZ2VyLmdldEhlYWRlclRyZWVOb2RlKC0xLHQpO2lmKCFyKWNvbnRpbnVlO2xldCBpPSExO3Iud2Fsa1VwKG89PntpZighMD09PW8uZGF0YS5pc0NvbGxhcHNl''@;'; put 'put ''ZClyZXR1cm4gaT0hMCwhMX0pLGkmJm4uYWRkKHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odCkpfXJldHVybiBufWZ1bmN0aW9uIFMkdChuKXtjb25zdCBlPXRoaXMuaG90LmdldFNldHRpbmdzKCksdD0hIWUuZHJvcGRvd25NZW51LHI9ISFlLmNvbGxhcHNpYmxlQ29sdW1ucyxpPXRoaXMu''@;'; put 'put ''aG90LmNvdW50Q29scygpLG89ZS5zYW5pdGl6ZXI7bi5pbm5lckhUTUw9RiQodGhpcyxzamUsRSR0KS5jYWxsKHRoaXMsaSx0LHIsbyl9ZnVuY3Rpb24gRSR0KG4sZSx0LHIpe2xldCBpPSIiO2ZvcihsZXQgbz0wO288dGhpcy5sYXllcnNDb3VudDtvKyspe2xldCBhPSIiO2ZvcihsZXQgbD0w''@;'; put 'put ''O2w8bjtsKyspe2NvbnN0IHU9dGhpcy5oZWFkZXJzU3RhdGVNYW5hZ2VyLmdldEhlYWRlclNldHRpbmdzKG8sbCk7IXV8fHUuaXNQbGFjZWhvbGRlcnx8dS5pc0hpZGRlbnx8dS5pc1Jvd3NwYW5QbGFjZWhvbGRlcnx8KGErPWA8dGggZGF0YS1jb2x1bW49IiR7bH0iIGNvbHNwYW49IiR7dS5j''@;'; put 'put ''b2xzcGFufSIkeyh1LnJvd3NwYW4/PzApPjE/YCByb3dzcGFuPSIke3Uucm93c3Bhbn0iYDoiIn0+JHtGJCh0aGlzLGxqZSxNJHQpLmNhbGwodGhpcyx1LGUsdCxyKX08L3RoPmApfWkrPWA8dHI+JHthfTwvdHI+YH1yZXR1cm5gPHRhYmxlIGRhdGEtZ2hvc3QtdGFibGU9InJlbmRlcmVkIj48''@;'; put 'put ''dGhlYWQ+JHtpfTwvdGhlYWQ+PC90YWJsZT5gfWZ1bmN0aW9uIE0kdChuLGUsdCxyKXtyZXR1cm5gPGRpdiBjbGFzcz0icmVsYXRpdmUiPjxzcGFuIGNsYXNzPSJjb2xIZWFkZXIiPiR7ImZ1bmN0aW9uIj09dHlwZW9mIHI/cihuLmxhYmVsLCJpbm5lckhUTUwiKTpuLmxhYmVsfTwvc3Bhbj4k''@;'; put 'put ''e2U/JzxidXR0b24gY2xhc3M9ImNoYW5nZVR5cGUiPjwvYnV0dG9uPic6IiJ9JHt0JiYobi5vcmlnQ29sc3Bhbj4xfHxuLmNvbHNwYW4+MSk/JzxkaXYgY2xhc3M9ImNvbGxhcHNpYmxlSW5kaWNhdG9yIGV4cGFuZGVkIj4tPC9kaXY+JzoiIn08L2Rpdj5gfWNvbnN0IFQkdD1jbGFzcyB3JHR7''@;'; put 'put ''c2V0TGF5ZXJzQ291bnQoZSl7cmV0dXJuIHRoaXMubGF5ZXJzQ291bnQ9ZSx0aGlzfWdldFdpZHRoKGUpe3JldHVybiB0aGlzLndpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihlKSl9YnVpbGRXaWR0aHNNYXAoKXtjb25zdCBlPUYkKHRoaXMsb2pl''@;'; put 'put ''LEMkdCkuY2FsbCh0aGlzKSx0PWUuc2l6ZT4wLHI9dGhpcy5ob3QuZ2V0Q3VycmVudFRoZW1lTmFtZSgpLGk9bmV3IE1hcDt0JiZlLmZvckVhY2godT0+e2NvbnN0IGc9dGhpcy53aWR0aHNNYXAuZ2V0VmFsdWVBdEluZGV4KHUpO251bGwhPWcmJmkuc2V0KHUsZyl9KSx0aGlzLmNvbnRhaW5l''@;'; put 'put ''cj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgiaGFuZHNvbnRhYmxlIiwiaHRHaG9zdFRhYmxlIiwiaHRBdXRvU2l6ZSIsImh0TmVzdGVkSGVhZGVycyIpLHImJnRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5h''@;'; put 'put ''ZGQociksRiQodGhpcyxhamUsUyR0KS5jYWxsKHRoaXMsdGhpcy5jb250YWluZXIpLHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyKTtjb25zdCBvPXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWdob3N0LXRhYmxlPSJyZW5k''@;'; put 'put ''ZXJlZCJdJyk7aWYoIW8pcmV0dXJuIHRoaXMuY29udGFpbmVyLnJlbW92ZSgpLHZvaWQodGhpcy5jb250YWluZXI9bnVsbCk7Y29uc3QgYT1vLnF1ZXJ5U2VsZWN0b3JBbGwoInRoW2RhdGEtY29sdW1uXSIpLGw9bmV3IE1hcDtmb3IobGV0IHU9MDt1PGEubGVuZ3RoO3UrKyl7Y29uc3QgZz1h''@;'; put 'put ''W3VdO2lmKGcuY29sU3Bhbj4xfHx2b2lkIDA9PT1nLmRhdGFzZXQuY29sdW1uKWNvbnRpbnVlO2NvbnN0IEU9TnVtYmVyLnBhcnNlSW50KGcuZGF0YXNldC5jb2x1bW4sMTApO2wuc2V0KEUsZyl9dGhpcy53aWR0aHNNYXAuY2xlYXIoKSxsLmZvckVhY2goKHUsZyk9Pntjb25zdCBFPXRoaXMu''@;'; put 'put ''aG90LnRvUGh5c2ljYWxDb2x1bW4oZyk7aWYodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4oRSkpcmV0dXJuO2xldCBPO3QmJmUuaGFzKEUpJiYoTz1pLmdldChFKSksbnVsbD09TyYmKE89dS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCksdGhpcy53aWR0aHNNYXAu''@;'; put 'put ''c2V0VmFsdWVBdEluZGV4KEUsTyl9KSx0aGlzLmNvbnRhaW5lci5yZW1vdmUoKSx0aGlzLmNvbnRhaW5lcj1udWxsfWNsZWFyKCl7dGhpcy53aWR0aHNNYXAuY2xlYXIoKSx0aGlzLmNvbnRhaW5lcj1udWxsfWNvbnN0cnVjdG9yKHtob3Q6ZSxoZWFkZXJzU3RhdGVNYW5hZ2VyOnR9KXtQJCh0''@;'; put 'put ''aGlzLG9qZSksUCQodGhpcyxhamUpLFAkKHRoaXMsc2plKSxQJCh0aGlzLGxqZSksdGhpcy5sYXllcnNDb3VudD0wLHRoaXMuaG90PWUsdGhpcy5oZWFkZXJzU3RhdGVNYW5hZ2VyPXQsdGhpcy53aWR0aHNNYXA9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuY3JlYXRlQW5kUmVnaXN0ZXJJ''@;'; put 'put ''bmRleE1hcCgibmVzdGVkSGVhZGVycy53aWR0aHNNYXAiLCJwaHlzaWNhbEluZGV4VG9WYWx1ZSIpfX07ZnVuY3Rpb24gY2plKG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBh''@;'; put 'put ''biBvYmplY3QiKX1mdW5jdGlvbiB1amUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQobil9ZnVuY3Rpb24gWGkobixlKXtyZXR1cm4gZnVuY3Rpb24g''@;'; put 'put ''QSR0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obix1amUobixlLCJnZXQiKSl9ZnVuY3Rpb24gVWMobixlLHQpe2NqZShuLGUpLGUuc2V0KG4sdCl9ZnVuY3Rpb24gYXMobixlLHQpe3JldHVybiBmdW5jdGlvbiBrJHQobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNh''@;'; put 'put ''bGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLHVqZShuLGUsInNldCIpLHQpLHR9ZnVuY3Rpb24gUTcobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHR9ZnVuY3Rpb24gTHgobixlKXtjamUobixlKSxlLmFkZChuKX1jb25zdCBkamU9Im5lc3RlZEhlYWRlcnMiO3ZhciBzcz1uZXcgV2Vha01hcCxIJD1uZXcgV2Vha01h''@;'; put 'put ''cCxPeD1uZXcgV2Vha01hcCxDRj1uZXcgV2Vha01hcCxTRj1uZXcgV2Vha01hcCxKMz1uZXcgV2Vha01hcCxfQz1uZXcgV2Vha01hcCx5Qz1uZXcgV2Vha01hcCxFRj1uZXcgV2Vha01hcCxoamU9bmV3IFdlYWtTZXQsZmplPW5ldyBXZWFrU2V0LFZfPW5ldyBXZWFrTWFwLE1GPW5ldyBXZWFr''@;'; put 'put ''U2V0LHBqZT1uZXcgV2Vha1NldCxnamU9bmV3IFdlYWtTZXQsbWplPW5ldyBXZWFrU2V0LHYzZT1uZXcgV2Vha01hcCxfM2U9bmV3IFdlYWtNYXAseTNlPW5ldyBXZWFrTWFwLGIzZT1uZXcgV2Vha01hcCx3M2U9bmV3IFdlYWtNYXAsQzNlPW5ldyBXZWFrTWFwLFMzZT1uZXcgV2Vha01hcCxF''@;'; put 'put ''M2U9bmV3IFdlYWtNYXAsTTNlPW5ldyBXZWFrTWFwLFQzZT1uZXcgV2Vha01hcCx4M2U9bmV3IFdlYWtNYXAsQTNlPW5ldyBXZWFrTWFwLGszZT1uZXcgV2Vha01hcCxSM2U9bmV3IFdlYWtNYXAsSTNlPW5ldyBXZWFrTWFwLEQzZT1uZXcgV2Vha01hcCxMM2U9bmV3IFdlYWtNYXAsTzNlPW5l''@;'; put 'put ''dyBXZWFrTWFwLE4zZT1uZXcgV2Vha01hcCxGM2U9bmV3IFdlYWtNYXAsUDNlPW5ldyBXZWFrTWFwO2NsYXNzIEkkdCBleHRlbmRzIGFse3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBkamV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjgwfWlzRW5hYmxlZCgp''@;'; put 'put ''e3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtkamVdfWVuYWJsZVBsdWdpbigpe2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3R7bmVzdGVkSGVhZGVyczplfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpOyghQXJyYXkuaXNBcnJheShlKXx8IUFycmF5LmlzQXJyYXkoZVswXSkpJiZI''@;'; put 'put ''YSh5Y2BZb3VyIE5lc3RlZCBIZWFkZXJzIHBsdWdpbiBjb25maWd1cmF0aW9uIGlzIGludmFsaWQuIFRoZSBzZXR0aW5ncyBoYXMgdG8gYmVceDIwCiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NlZCBhcyBhbiBhcnJheSBvZiBhcnJheXMgZS5xLiBbWydBMScsIHsgbGFiZWw6ICdBMics''@;'; put 'put ''IGNvbHNwYW46IDIgfV1dYCksdGhpcy5hZGRIb29rKCJpbml0IixYaSh0aGlzLEwzZSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsWGkodGhpcyxPM2UpKSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIixYaSh0aGlzLE4zZSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVD''@;'; put 'put ''b2wiLFhpKHRoaXMsRjNlKSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLFhpKHRoaXMsYjNlKSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1vdXNlRG93biIsWGkodGhpcyx3M2UpKSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsWGkodGhpcyxD''@;'; put 'put ''M2UpKSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlVXAiLFhpKHRoaXMsUzNlKSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQiLFhpKHRoaXMsRTNlKSksdGhpcy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsWGkodGhpcyxNM2UpKSx0aGlz''@;'; put 'put ''LmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIixYaSh0aGlzLFZfKSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkZvY3VzU2V0IixYaSh0aGlzLFZfKSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsWGkodGhpcyx2M2UpKSx0aGlzLmFkZEhvb2so''@;'; put 'put ''ImFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzIixYaSh0aGlzLHgzZSkpLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sV2lkdGgiLFhpKHRoaXMsazNlKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQiLFhpKHRoaXMsUjNlKSksdGhpcy5hZGRIb29rKCJtb2RpZnlD''@;'; put 'put ''b2x1bW5IZWFkZXJWYWx1ZSIsWGkodGhpcyxJM2UpKSx0aGlzLmFkZEhvb2soImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsWGkodGhpcyxfM2UpKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvcHkiLFhpKHRoaXMseTNlKSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZWxlY3RDb2x1bW5z''@;'; put 'put ''IixYaSh0aGlzLFQzZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlVmlld1JlbmRlciIsWGkodGhpcyxQM2UpKSx0aGlzLmFkZEhvb2soImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLFhpKHRoaXMsQTNlKSksdGhpcy5hZGRIb29rKCJtb2RpZnlGb2N1c2VkRWxlbWVudCIs''@;'; put 'put ''WGkodGhpcyxEM2UpKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIsWGkodGhpcyxIJCkpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiY2FjaGVVcGRhdGVkIixYaSh0aGlzLFZfKSksdGhpcy5ob3Qucm93SW5k''@;'; put 'put ''ZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLFhpKHRoaXMsVl8pKSxzdXBlci5lbmFibGVQbHVnaW4oKSx0aGlzLnVwZGF0ZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe2lmKCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdHtuZXN0ZWRIZWFkZXJzOmV9PXRoaXMuaG90Lmdl''@;'; put 'put ''dFNldHRpbmdzKCk7YXModGhpcyxKMyxudWxsKSxhcyh0aGlzLF9DLG51bGwpLFhpKHRoaXMsc3MpLnNldENvbHVtbnNMaW1pdCh0aGlzLmhvdC5jb3VudENvbHMoKSksQXJyYXkuaXNBcnJheShlKSYmKHRoaXMuZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycz1YaSh0aGlzLHNzKS5zZXRTdGF0''@;'; put 'put ''ZShlKSksYXModGhpcyxFRixYaSh0aGlzLHNzKS5tYXBOb2Rlcygoe29yaWdSb3dzcGFuOnR9KT0+dD4xfHx2b2lkIDApLmxlbmd0aD4wKSxYaSh0aGlzLEVGKT9Zcih0aGlzLmhvdC5yb290RWxlbWVudCwiaHRIYXNSb3dzcGFuSGVhZGVycyIpOmtvKHRoaXMuaG90LnJvb3RFbGVtZW50LCJo''@;'; put 'put ''dEhhc1Jvd3NwYW5IZWFkZXJzIiksdGhpcy5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzJiZIYSh5Y2BZb3VyIE5lc3RlZCBIZWFkZXJzIHBsdWdpbiBzZXR1cCBjb250YWlucyBvdmVybGFwcGluZyBoZWFkZXJzLiBUaGlzIGtpbmQgb2YgY29uZmlndXJhdGlvblx4MjAKICAgICAgICAgICAg''@;'; put 'put ''ICAgICAgICAgICAgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuYCksdGhpcy5lbmFibGVkJiZYaSh0aGlzLHNzKS5zeW5jVmlzaWJpbGl0eShpamUodGhpcy5ob3QpKSxhcyh0aGlzLHlDLCEwKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5k''@;'; put 'put ''ZXhNYXBwZXIucmVtb3ZlTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLFhpKHRoaXMsVl8pKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZW1vdmVMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIsWGkodGhpcyxWXykpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlbW92ZUxvY2FsSG9v''@;'; put 'put ''aygiY2FjaGVVcGRhdGVkIixYaSh0aGlzLEgkKSksdGhpcy5jbGVhckNvbHNwYW5zKCksWGkodGhpcyxzcykuY2xlYXIoKSxhcyh0aGlzLEozLG51bGwpLGFzKHRoaXMsX0MsbnVsbCksa28odGhpcy5ob3Qucm9vdEVsZW1lbnQsImh0SGFzUm93c3BhbkhlYWRlcnMiKSx0aGlzLmdob3N0VGFi''@;'; put 'put ''bGUuY2xlYXIoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Z2V0U3RhdGVNYW5hZ2VyKCl7cmV0dXJuIFhpKHRoaXMsc3MpfWdldExheWVyc0NvdW50KCl7cmV0dXJuIFhpKHRoaXMsc3MpLmdldExheWVyc0NvdW50KCl9Z2V0SGVhZGVyU2V0dGluZ3MoZSx0KXtyZXR1cm4gWGkodGhpcyxzcyku''@;'; put 'put ''Z2V0SGVhZGVyU2V0dGluZ3MoZSx0KX1jbGVhckNvbHNwYW5zKCl7aWYoIXRoaXMuaG90LnZpZXcpcmV0dXJuO2NvbnN0e193dDplfT10aGlzLmhvdC52aWV3LHQ9ZS5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoLHI9ZS53dFRhYmxlLlRIRUFELGk9ZS53dE92ZXJsYXlzLnRv''@;'; put 'put ''cE92ZXJsYXkuY2xvbmU/Lnd0VGFibGUuVEhFQUQsbz1lLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5Py5jbG9uZT8ud3RUYWJsZS5USEVBRD8/bnVsbDtpZihyJiZpKWZvcihsZXQgYT0wO2E8dDthKyspe2NvbnN0IGw9ci5jaGlsZE5vZGVzW2FdO2lmKCFsKWJyZWFr''@;'; put 'put ''O2NvbnN0IHU9aS5jaGlsZE5vZGVzW2FdLGc9bz9vLmNoaWxkTm9kZXNbYV06bnVsbDtmb3IobGV0IEU9MCxPPWwuY2hpbGROb2Rlcy5sZW5ndGg7RTxPO0UrKyl7Y29uc3QgWj1sLmNoaWxkTm9kZXNbRV07aWYoWi5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxaLnJlbW92ZUF0dHJpYnV0''@;'; put 'put ''ZSgicm93c3BhbiIpLFouc3R5bGUuZGlzcGxheT0iIixrbyhaLCJoaWRkZW5IZWFkZXIiKSx1JiZ1LmNoaWxkTm9kZXNbRV0pe2NvbnN0IGVlPXUuY2hpbGROb2Rlc1tFXTtlZS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxlZS5yZW1vdmVBdHRyaWJ1dGUoInJvd3NwYW4iKSxlZS5zdHls''@;'; put 'put ''ZS5kaXNwbGF5PSIiLGtvKGVlLCJoaWRkZW5IZWFkZXIiKX1pZihvJiZnJiZnLmNoaWxkTm9kZXNbRV0pe2NvbnN0IGVlPWcuY2hpbGROb2Rlc1tFXTtlZS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxlZS5yZW1vdmVBdHRyaWJ1dGUoInJvd3NwYW4iKSxlZS5zdHlsZS5kaXNwbGF5PSIi''@;'; put 'put ''LGtvKGVlLCJoaWRkZW5IZWFkZXIiKX19fX1oZWFkZXJSZW5kZXJlckZhY3RvcnkoZSl7Y29uc3QgdD10aGlzLmhvdC52aWV3Ll93dC5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpO3JldHVybihyLGkpPT57Y29uc3R7Y29sdW1uSW5kZXhNYXBwZXI6b309dGhpcy5ob3Q7bGV0IGE9''@;'; put 'put ''by5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHIpO251bGw9PT1hJiYoYT1yKSxpLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLGkucmVtb3ZlQXR0cmlidXRlKCJyb3dzcGFuIiksaS5zdHlsZS5kaXNwbGF5PSIiLGtvKGksImhpZGRlbkhlYWRlciIpLGtvKGksImhpZGRlbkhlYWRl''@;'; put 'put ''clRleHQiKSxrbyhpLCJodFJvd3NwYW5IZWFkZXIiKSxrbyhpLCJodFJvd3NwYW5Cb3R0b21MZXZlbCIpO2NvbnN0IGw9WGkodGhpcyxzcykuZ2V0SGVhZGVyU2V0dGluZ3MoZSxhKT8/e30se2NvbHNwYW46dSxyb3dzcGFuOmcsaXNIaWRkZW46RSxpc1BsYWNlaG9sZGVyOk8saXNSb3dzcGFu''@;'; put 'put ''UGxhY2Vob2xkZXI6WixoZWFkZXJDbGFzc05hbWVzOmVlfT1sO2lmKFo/KFlyKGksImhpZGRlbkhlYWRlciIpLGkuc3R5bGUuZGlzcGxheT0ibm9uZSIpOk98fEU/WXIoaSwiaGlkZGVuSGVhZGVyIik6KFE3KHRoaXMsaGplLEQkdCkuY2FsbCh0aGlzLGksdSxhLHIsdCksUTcodGhpcyxmamUs''@;'; put 'put ''TCR0KS5jYWxsKHRoaXMsaSxnLGUpKSx0aGlzLmhvdC52aWV3LmFwcGVuZENvbEhlYWRlcihhLGksKE1lLEhlKT0+dGhpcy5nZXRDb2x1bW5IZWFkZXJWYWx1ZShNZSxIZSksZSksZSsoZz8/MSk9PT10aGlzLmdldExheWVyc0NvdW50KCl8fGtvKGksWyJiZWZvcmVIaWRkZW5Db2x1bW4iLCJh''@;'; put 'put ''ZnRlckhpZGRlbkNvbHVtbiJdKSwhTyYmIUUmJiFaKXtjb25zdCBNZT1pLnF1ZXJ5U2VsZWN0b3IoImRpdi5yZWxhdGl2ZSIpO01lJiZlZSYmZWUubGVuZ3RoPjAmJihrbyhNZSx0aGlzLmhvdC5nZXRDb2x1bW5NZXRhKGEpLmhlYWRlckNsYXNzTmFtZT8/W10pLFlyKE1lLGVlKSl9fX1nZXRD''@;'; put 'put ''b2x1bW5IZWFkZXJWYWx1ZShlLHQpe2NvbnN0e2lzSGlkZGVuOnIsaXNQbGFjZWhvbGRlcjppLGlzUm93c3BhblBsYWNlaG9sZGVyOm99PVhpKHRoaXMsc3MpLmdldEhlYWRlclNldHRpbmdzKHQsZSk/P3t9O3JldHVybiBpfHxyfHxvPyIiOnRoaXMuaG90LmdldENvbEhlYWRlcihlLHQpfWRl''@;'; put 'put ''c3Ryb3koKXtYaSh0aGlzLHNzKS5jbGVhcigpLGtvKHRoaXMuaG90LnJvb3RFbGVtZW50LCJodEhhc1Jvd3NwYW5IZWFkZXJzIiksc3VwZXIuZGVzdHJveSgpfV9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhlKXtpZighKGUucm93Pj0wfHxlLmNvbDwwKSlyZXR1cm4gWGkodGhpcyxz''@;'; put 'put ''cykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGUucm93LGUuY29sKX1jb25zdHJ1Y3RvciguLi5lKXtzdXBlciguLi5lKSxMeCh0aGlzLGhqZSksTHgodGhpcyxmamUpLEx4KHRoaXMsTUYpLEx4KHRoaXMscGplKSxMeCh0aGlzLGdqZSksTHgodGhpcyxtamUpLFVjKHRoaXMsc3Mse3dyaXRhYmxl''@;'; put 'put ''OiEwLHZhbHVlOnZvaWQgMH0pLFVjKHRoaXMsSCQse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFVjKHRoaXMsT3gse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFVjKHRoaXMsQ0Yse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFVjKHRoaXMsU0Yse3dyaXRhYmxlOiEwLHZhbHVl''@;'; put 'put ''OnZvaWQgMH0pLFVjKHRoaXMsSjMse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFVjKHRoaXMsX0Mse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFVjKHRoaXMseUMse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFVjKHRoaXMsRUYse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0p''@;'; put 'put ''LFVjKHRoaXMsVl8se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFVjKHRoaXMsdjNlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxVYyh0aGlzLF8zZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksVWModGhpcyx5M2Use3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFVjKHRo''@;'; put 'put ''aXMsYjNlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxVYyh0aGlzLHczZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksVWModGhpcyxDM2Use3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFVjKHRoaXMsUzNlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxVYyh0aGlzLEUz''@;'; put 'put ''ZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksVWModGhpcyxNM2Use3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFVjKHRoaXMsVDNlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxVYyh0aGlzLHgzZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksVWModGhpcyxBM2Use3dy''@;'; put 'put ''aXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFVjKHRoaXMsazNlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxVYyh0aGlzLFIzZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksVWModGhpcyxJM2Use3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFVjKHRoaXMsRDNlLHt3cml0YWJs''@;'; put 'put ''ZTohMCx2YWx1ZTp2b2lkIDB9KSxVYyh0aGlzLEwzZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksVWModGhpcyxPM2Use3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFVjKHRoaXMsTjNlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxVYyh0aGlzLEYzZSx7d3JpdGFibGU6ITAs''@;'; put 'put ''dmFsdWU6dm9pZCAwfSksVWModGhpcyxQM2Use3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGFzKHRoaXMsc3MsbmV3IHYkdCksYXModGhpcyxIJCwoe2hpZGRlbkluZGV4ZXNDaGFuZ2VkOnR9KT0+e3RoaXMuZW5hYmxlZCYmKFhpKHRoaXMsc3MpLnN5bmNWaXNpYmlsaXR5KGlqZSh0aGlz''@;'; put 'put ''LmhvdCkpLHQmJnRoaXMuZ2hvc3RUYWJsZS5idWlsZFdpZHRoc01hcCgpKX0pLGFzKHRoaXMsT3gsbnVsbCksYXModGhpcyxDRiwhMSksYXModGhpcyxTRixudWxsKSxhcyh0aGlzLEozLG51bGwpLGFzKHRoaXMsX0MsbnVsbCksYXModGhpcyx5QywhMSksdGhpcy5naG9zdFRhYmxlPW5ldyBU''@;'; put 'put ''JHQoe2hvdDp0aGlzLmhvdCxoZWFkZXJzU3RhdGVNYW5hZ2VyOlhpKHRoaXMsc3MpfSksdGhpcy5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzPSExLGFzKHRoaXMsRUYsITEpLGFzKHRoaXMsVl8sKCk9Pntjb25zdCB0PXRoaXMuaG90Py5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIXQp''@;'; put 'put ''cmV0dXJuO2NvbnN0e2hpZ2hsaWdodDpyfT10O2lmKG51bGwhPT1yLnJvdyYmbnVsbCE9PXIuY29sJiZyLmlzSGVhZGVyKCkmJnIuY29sPj0wJiZudWxsIT09ci5yb3cmJm51bGwhPT1yLmNvbCl7Y29uc3R7aXNSb3dzcGFuUGxhY2Vob2xkZXI6b309WGkodGhpcyxzcykuZ2V0SGVhZGVyU2V0''@;'; put 'put ''dGluZ3Moci5yb3csci5jb2wpPz97fSxhPW8/UTcodGhpcyxNRixWJCkuY2FsbCh0aGlzLHIucm93LHIuY29sKTpyLnJvdyxsPVhpKHRoaXMsc3MpLmZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KGEsci5jb2wpLHU9dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGb2N1cygpLGc9dS52''@;'; put 'put ''aXN1YWxDZWxsUmFuZ2U7aWYobnVsbD09PWcpcmV0dXJuO2cuaGlnaGxpZ2h0LnJvdz1hLGcuaGlnaGxpZ2h0LmNvbD1sLGcuZnJvbS5yb3c9YSxnLmZyb20uY29sPWwsZy50by5yb3c9YSxnLnRvLmNvbD1sLHUuY29tbWl0KCl9fSksYXModGhpcyx2M2UsKHQscik9Pntjb25zdCBpPXRoaXMu''@;'; put 'put ''aG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighaSlyZXR1cm4gdDtjb25zdHtoaWdobGlnaHQ6b309aSx7bmF2aWdhYmxlSGVhZGVyczphfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLGw9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLHU9YT9vLnJv''@;'; put 'put ''dzpYaSh0aGlzLFNGKT8ucm93LGc9bD90Om8uY29sLEU9bnVsbCE9dSYmbnVsbCE9ZyYmdTwwJiZnPj0wO2lmKGFzKHRoaXMsU0YsbnVsbCksIUV8fG51bGw9PXV8fG51bGw9PWcpcmV0dXJuIHQ7Y29uc3QgTz10aGlzLmhvdC5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpLFo9dGhpcy5o''@;'; put 'put ''b3QuZ2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbigpLGVlPVotTysxLHZlPVhpKHRoaXMsc3MpLmZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KHUsZyksTWU9WGkodGhpcyxzcykuZmluZFJpZ2h0TW9zdENvbHVtbkluZGV4KHUsZyksSGU9TWUtdmUrMTtpZih2ZTxPJiZNZT5aKXJldHVybiB2ZTtp''@;'; put 'put ''ZihsKXtsZXQgV2U9bnVsbDtyZXR1cm4gdmU+PU8mJk1lPlo/SGU+ZWU/KHIudmFsdWU9InN0YXJ0IixXZT12ZSk6KHIudmFsdWU9ImVuZCIsV2U9TWUpOnZlPE8mJk1lPD1aJiYoSGU+ZWU/KHIudmFsdWU9ImVuZCIsV2U9TWUpOihyLnZhbHVlPSJzdGFydCIsV2U9dmUpKSxXZX1yZXR1cm4g''@;'; put 'put ''dmU8PU8/dmU6TWV9KSxhcyh0aGlzLF8zZSwodCxyLGkpPT57Y29uc3Qgbz1YaSh0aGlzLHNzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEocix0KTtpZighbylyZXR1cm4gdDtjb25zdHtjb2x1bW5DdXJzb3I6YSxzZWxlY3Rpb25UeXBlOmwsc2VsZWN0aW9uV2lkdGg6dX09aSx7aXNSb290Omcs''@;'; put 'put ''Y29sc3BhbjpFPTF9PVhpKHRoaXMsc3MpLmdldEhlYWRlclNldHRpbmdzKHIsdCk/P3t9O2lmKGw9PT16dWUpe2lmKCFnKXJldHVybiBvLmNvbHVtbkluZGV4fWVsc2UgaWYobD09PUlSZSYmKEU+dS1hfHwhZykpcmV0dXJuIG51bGw7cmV0dXJuIHR9KSxhcyh0aGlzLHkzZSwodCxyLHtjb2x1''@;'; put 'put ''bW5IZWFkZXJzQ291bnQ6aX0pPT57aWYoMCE9PWkpZm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspe2NvbnN0e3N0YXJ0Um93OmEsc3RhcnRDb2w6bCxlbmRSb3c6dSxlbmRDb2w6Z309cltvXSxFPXUtYSsxO2lmKGE+PTB8fDE9PWwtZysxKWJyZWFrO2ZvcihsZXQgWj1sO1o8PWc7WisrKWZv''@;'; put 'put ''cihsZXQgZWU9YTtlZTw9dTtlZSsrKXtjb25zdCB2ZT1FK2VlLE1lPVotbDswIT09TWUmJiExPT09WGkodGhpcyxzcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGVlLFopPy5pc1Jvb3QmJih0W3ZlXVtNZV09IiIpfX19KSxhcyh0aGlzLGIzZSwodCxyLGksbyk9Pnthcyh0aGlzLEozLG51bGwp''@;'; put 'put ''LGFzKHRoaXMsX0MsbnVsbCksdGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMocikmJihvLmNvbHVtbj0hMCl9KSxhcyh0aGlzLHczZSwodCxyKT0+e2lmKG51bGw9PT1yLnJvd3x8bnVsbD09PXIuY29sKXJldHVybjtjb25zdCBvPXRoaXMuX2dldEhlYWRlclRyZWVOb2RlRGF0''@;'; put 'put ''YUJ5Q29vcmRzKHtyb3c6ci5yb3csY29sOnIuY29sfSk7aWYoIW8pcmV0dXJuO2FzKHRoaXMsT3gse3JvdzpyLnJvdyxjb2w6ci5jb2wsY2xvbmU6KCk9PnIuY2xvbmUoKX0pLGFzKHRoaXMsQ0YsITApO2NvbnN0e3NlbGVjdGlvbjphfT10aGlzLmhvdCxsPWEuaXNTZWxlY3RlZCgpP2EuZ2V0''@;'; put 'put ''U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKTpudWxsO2xldCB1PW51bGw7Y29uc3R7Y29sdW1uSW5kZXg6ZyxvcmlnQ29sc3BhbjpFfT1vLE89IWEuaW5JblNlbGVjdGlvbihyKTt0LnNoaWZ0S2V5JiZsP3U9KHIuY29sPz8wKTwobC5mcm9tLmNvbD8/MCk/W2wuZ2V0VG9wRW5kQ29ybmVyKCku''@;'; put 'put ''Y29sPz8wLGcsci5yb3c/PzBdOihyLmNvbD8/MCk+KGwuZnJvbS5jb2w/PzApP1tsLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sPz8wLGcrRS0xLHIucm93Pz8wXTpbZyxnK0UtMSxyLnJvdz8/MF06KHpXKHQpfHx6dih0KSYmT3x8aEFlKHQpKSYmKHU9W2csZytFLTEsci5yb3ddKSxudWxsIT09''@;'; put 'put ''dSYmYS5zZWxlY3RDb2x1bW5zKC4uLnUpfSksYXModGhpcyxDM2UsKHQscixpLG8pPT57aWYoIXRoaXMuaG90LnZpZXcuaXNNb3VzZURvd24oKXx8by5jb2x1bW4pcmV0dXJuO2NvbnN0IGE9dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMocik7aWYoIWEpcmV0dXJuO2NvbnN0''@;'; put 'put ''e2NvbHVtbkluZGV4Omwsb3JpZ0NvbHNwYW46dX09YSxnPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighZylyZXR1cm47Y29uc3QgRT1nLmdldFRvcFN0YXJ0Q29ybmVyKCksTz1nLmdldEJvdHRvbUVuZENvcm5lcigpLHtmcm9tOlp9PWc7by5jb2x1bW49ITAsby5jZWxs''@;'; put 'put ''PSEwO2NvbnN0IGVlPVZzKHIucm93Pz8wLC0xLzAsLTEpO2xldCB2ZTt2ZT0oci5jb2w/PzApPChaLmNvbD8/MCk/W08uY29sPz8wLGwsZWVdOihyLmNvbD8/MCk+KFouY29sPz8wKT9bRS5jb2w/PzAsbCt1LTEsZWVdOltsLGwrdS0xLGVlXSx0aGlzLmhvdC5zZWxlY3Rpb24uc2VsZWN0Q29s''@;'; put 'put ''dW1ucyguLi52ZSl9KSxhcyh0aGlzLFMzZSwoKT0+e2FzKHRoaXMsQ0YsITEpfSksYXModGhpcyxFM2UsKCk9Pntjb25zdHtuYXZpZ2FibGVIZWFkZXJzOnR9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7aWYoIXRoaXMuaG90LnZpZXcuaXNNb3VzZURvd24oKXx8IVhpKHRoaXMsQ0YpfHwhdCly''@;'; put 'put ''ZXR1cm47Y29uc3Qgcj10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFyKXJldHVybjtjb25zdCBpPXIuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsbz1yLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCxhPVhpKHRoaXMsc3MpLmdldEhlYWRlclRyZWVOb2RlRGF0YShYaSh0aGlz''@;'; put 'put ''LE94KS5yb3csWGkodGhpcyxPeCkuY29sKTtpZighYSlyZXR1cm47Y29uc3R7Y29sdW1uSW5kZXg6bCxvcmlnQ29sc3Bhbjp1fT1hO2lmKHIuc2V0SGlnaGxpZ2h0KFhpKHRoaXMsT3gpKSxudWxsIT09aSYmbnVsbCE9PW8mJih1PnIuZ2V0V2lkdGgoKXx8bDxpfHxsK3UtMT5vKSl7Y29uc3Qg''@;'; put 'put ''Zz1YaSh0aGlzLHNzKS5maW5kVG9wTW9zdEVudGlyZUhlYWRlckxldmVsKFZzKGksbCxsK3UtMSksVnMobyxsLGwrdS0xKSk7ci5oaWdobGlnaHQucm93PWcsci5oaWdobGlnaHQuY29sPXIuZnJvbS5jb2x9fSksYXModGhpcyxNM2UsdD0+e2NvbnN0IHI9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRS''@;'; put 'put ''YW5nZUFjdGl2ZSgpO2lmKCFyKXJldHVybjtjb25zdHtoaWdobGlnaHQ6aX09cix7cm93Om8sY29sOmF9PVhpKHRoaXMsX0MpPz97fTtOdW1iZXIuaXNJbnRlZ2VyKG8pJiZOdW1iZXIuaXNJbnRlZ2VyKGEpJiYoaS5yb3chPT1vfHxpLmNvbCE9PWEpJiZhcyh0aGlzLEozLG51bGwpO2NvbnN0''@;'; put 'put ''IGw9aS5yb3c/PzAsdT1pLmNvbD8/MCxnPXQucm93LEU9dC5jb2w7bGV0IE89dSt0LmNvbCxaPWwrdC5yb3c7aWYoMCE9PXQucm93JiZPPj0wKXtjb25zdCBNZT1NYXRoLnNpZ24odC5yb3cpLEhlPS0xLFdlPS10aGlzLmdldExheWVyc0NvdW50KCk7bGV0IGF0PVo7Zm9yKDthdDw9SGUmJmF0''@;'; put 'put ''Pj1XZTspe2NvbnN0e2lzUm93c3BhblBsYWNlaG9sZGVyOkN0fT1YaSh0aGlzLHNzKS5nZXRIZWFkZXJTZXR0aW5ncyhhdCxPKT8/e307aWYoIUN0KWJyZWFrO2F0Kz1NZX10LnJvdz1hdC1sLFo9YXR9aWYoMD09PWcmJjAhPT1FJiZsPDApe2lmKG51bGwhPT1YaSh0aGlzLEozKSl7Y29uc3Qg''@;'; put 'put ''S3Q9UTcodGhpcyxtamUsRiR0KS5jYWxsKHRoaXMsWGkodGhpcyxKMyksTyxNYXRoLnNpZ24oRSkpO251bGwhPT1LdCYmKE89S3QsWj1YaSh0aGlzLEozKSl9TzwwJiZFPDAmJm51bGwhPT1YaSh0aGlzLEozKSYmKFo9WGkodGhpcyxKMykpO2NvbnN0IE1lPVhpKHRoaXMsc3MpLmZpbmRMZWZ0''@;'; put 'put ''TW9zdENvbHVtbkluZGV4KGwsdSksSGU9WGkodGhpcyxzcykuZmluZFJpZ2h0TW9zdENvbHVtbkluZGV4KGwsdSkse2lzUm93c3BhblBsYWNlaG9sZGVyOldlfT1YaSh0aGlzLHNzKS5nZXRIZWFkZXJTZXR0aW5ncyhaLE8pPz97fTshKFo9PT1sJiZPPj1NZSYmTzw9SGUpJiYhKFo9PT1sJiZX''@;'; put 'put ''ZSYmRT4wJiZsPC0xKSYmKFo9UTcodGhpcyxNRixWJCkuY2FsbCh0aGlzLFosTykpLHQucm93PVotbCxRNyh0aGlzLHBqZSxPJHQpLmNhbGwodGhpcyxaLE8pPjEmJiFOdW1iZXIuaXNJbnRlZ2VyKFhpKHRoaXMsSjMpKSYmYXModGhpcyxKMyxmdW5jdGlvbiB4JHQobixlLHQscil7aWYobjw9''@;'; put 'put ''dClyZXR1cm4gbjtmb3IobGV0IGk9bisxO2k8PS0xO2krKyl7Y29uc3Qgbz1yKGksZSk7aWYoIW8pY29udGludWU7Y29uc3R7aXNQbGFjZWhvbGRlcjphLGlzUm93c3BhblBsYWNlaG9sZGVyOmwsaXNIaWRkZW46dX09bztpZighYSYmIWwmJiF1KXJldHVybiBpfXJldHVybiBufShsLE8sLXRo''@;'; put 'put ''aXMuZ2V0TGF5ZXJzQ291bnQoKSwoS3QscXQpPT57Y29uc3QgZ249WGkodGhpcyxzcykuZ2V0SGVhZGVyU2V0dGluZ3MoS3QscXQpO3JldHVybiBnbj97Li4uZ24saXNSb3dzcGFuUGxhY2Vob2xkZXI6Z24uaXNSb3dzcGFuUGxhY2Vob2xkZXI/PyExfTpudWxsfSkpfWNvbnN0IGVlPXRoaXMu''@;'; put 'put ''aG90Ll9jcmVhdGVDZWxsQ29vcmRzKFosTyksdmU9ZWUuaXNIZWFkZXIoKSYmKGVlLmNvbD8/LTEpPj0wO2lmKCghdmV8fDAhPT1nKSYmYXModGhpcyxKMyxudWxsKSx2ZSYmbnVsbCE9PWkucm93JiZudWxsIT09aS5jb2wmJm51bGwhPT1lZS5yb3cmJm51bGwhPT1lZS5jb2wpe2NvbnN0e2lz''@;'; put 'put ''Um93c3BhblBsYWNlaG9sZGVyOk1lfT1YaSh0aGlzLHNzKS5nZXRIZWFkZXJTZXR0aW5ncyhpLnJvdyxpLmNvbCk/P3t9LHtpc1Jvd3NwYW5QbGFjZWhvbGRlcjpIZX09WGkodGhpcyxzcykuZ2V0SGVhZGVyU2V0dGluZ3MoZWUucm93LGVlLmNvbCk/P3t9O2xldCBXZT1YaSh0aGlzLHNzKS5m''@;'; put 'put ''aW5kTGVmdE1vc3RDb2x1bW5JbmRleChlZS5yb3csZWUuY29sKSxhdD1YaSh0aGlzLHNzKS5maW5kUmlnaHRNb3N0Q29sdW1uSW5kZXgoZWUucm93LGVlLmNvbCk7aWYoSGUpe2NvbnN0IEN0PVE3KHRoaXMsTUYsViQpLmNhbGwodGhpcyxlZS5yb3csZWUuY29sKTtXZT1YaSh0aGlzLHNzKS5m''@;'; put 'put ''aW5kTGVmdE1vc3RDb2x1bW5JbmRleChDdCxlZS5jb2wpLGF0PVhpKHRoaXMsc3MpLmZpbmRSaWdodE1vc3RDb2x1bW5JbmRleChDdCxlZS5jb2wpfWlmKE1lKXtjb25zdCBDdD1RNyh0aGlzLE1GLFYkKS5jYWxsKHRoaXMsaS5yb3csaS5jb2wpO1dlPVhpKHRoaXMsc3MpLmZpbmRMZWZ0TW9z''@;'; put 'put ''dENvbHVtbkluZGV4KEN0LGkuY29sKSxhdD1YaSh0aGlzLHNzKS5maW5kUmlnaHRNb3N0Q29sdW1uSW5kZXgoQ3QsaS5jb2wpLEU8MD9XZT1NYXRoLm1heChXZSxNYXRoLm1pbihpLmNvbCxlZS5jb2wpKTpFPjAmJihhdD1NYXRoLm1pbihhdCxNYXRoLm1heChpLmNvbCxlZS5jb2wpKSl9aWYo''@;'; put 'put ''dC5jb2w8MCl7Y29uc3QgQXQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGkuY29sPj1XZSYmaS5jb2w8PWF0P1dlLTE6YXQsLTEpO3QuY29sPW51bGw9PT1BdD8tdGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZSgw''@;'; put 'put ''LGkuY29sKTotTWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShBdCxpLmNvbCktMSwxKX1lbHNlIGlmKHQuY29sPjApe2NvbnN0IEF0PXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChpLmNvbD49V2Um''@;'; put 'put ''JmkuY29sPD1hdD9hdCsxOldlLDEpO251bGw9PT1BdD8odC5jb2w9dGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShpLmNvbCx0aGlzLmhvdC5jb3VudENvbHMoKSksTWUmJih0LmNvbCs9MSxpLnJvdzwtMSYmKHQucm93PTEsdC5jb2w9LShpLmNvbCsxKSkpKTp0''@;'; put 'put ''LmNvbD1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGkuY29sLEF0KS0xLDEpfX1hcyh0aGlzLF9DLHtyb3c6bCt0LnJvdyxjb2w6dSt0LmNvbH0pfSksYXModGhpcyxUM2UsKHQscixpKT0+e2NvbnN0IG89dC5yb3csYT10aGlzLl9nZXRIZWFk''@;'; put 'put ''ZXJUcmVlTm9kZURhdGFCeUNvb3Jkcyh7cm93Om8sY29sOnQuY29sfSksbD10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3Jkcyh7cm93Om8sY29sOnIuY29sfSk7YXModGhpcyxTRixpLmNsb25lKCkpLHIuY29sPHQuY29sPyhhJiYodC5jb2w9YS5jb2x1bW5JbmRleCthLm9yaWdD''@;'; put 'put ''b2xzcGFuLTEpLGwmJihyLmNvbD1sLmNvbHVtbkluZGV4KSk6ci5jb2w+PXQuY29sJiYoYSYmKHQuY29sPWEuY29sdW1uSW5kZXgpLGwmJihyLmNvbD1sLmNvbHVtbkluZGV4K2wub3JpZ0NvbHNwYW4tMSkpfSksYXModGhpcyx4M2UsdD0+e2lmKFhpKHRoaXMsc3MpLmdldExheWVyc0NvdW50''@;'; put 'put ''KCk+MCl7dC5sZW5ndGg9MDtmb3IobGV0IHI9MDtyPFhpKHRoaXMsc3MpLmdldExheWVyc0NvdW50KCk7cisrKXQucHVzaCh0aGlzLmhlYWRlclJlbmRlcmVyRmFjdG9yeShyKSl9fSksYXModGhpcyxBM2UsdD0+e2NvbnN0IHI9WGkodGhpcyxzcykuZ2V0TGF5ZXJzQ291bnQoKTtsZXQgaT10''@;'; put 'put ''LnN0YXJ0Q29sdW1uLG89ISFyO2ZvcihsZXQgYT0wO2E8cjthKyspe2NvbnN0IGw9WGkodGhpcyxzcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoYSx0LnN0YXJ0Q29sdW1uKSx1PXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgobCk7aWYo''@;'; put 'put ''bD49MCYmKG89ITEpLHcwKHUpJiZudWxsIT09dSYmdTx0LnN0YXJ0Q29sdW1uKXtpPXU7YnJlYWt9fXQuc3RhcnRDb2x1bW49bz9YaSh0aGlzLHNzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEoMCxpKT8uY29sdW1uSW5kZXg/P2k6aX0pLGFzKHRoaXMsazNlLCh0LHIpPT57aWYoITE9PT10aGlz''@;'; put 'put ''LmhvdC5nZXRTZXR0aW5ncygpLmF1dG9Db2x1bW5TaXplKXJldHVybiB0O2NvbnN0IGk9dGhpcy5naG9zdFRhYmxlLmdldFdpZHRoKHIpPz8wO3JldHVybiB0Pmk/dDppfSksYXModGhpcyxSM2UsKCk9PntpZighWGkodGhpcyxFRikpcmV0dXJuO2NvbnN0IHQ9dGhpcy5ob3Qucm9vdFdpbmRv''@;'; put 'put ''dy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuaG90LnJvb3RFbGVtZW50KSxyPU51bWJlci5wYXJzZUZsb2F0KHQuZ2V0UHJvcGVydHlWYWx1ZSgiLS1odC1jZWxsLXZlcnRpY2FsLXBhZGRpbmciKSksaT1OdW1iZXIucGFyc2VGbG9hdCh0LmdldFByb3BlcnR5VmFsdWUoIi0taHQtbGluZS1oZWln''@;'; put 'put ''aHQiKSksbz1NYXRoLnJvdW5kKDIqcitpKzEpO3JldHVybiBOdW1iZXIuaXNGaW5pdGUobyk/bmV3IEFycmF5KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSkuZmlsbChvKTp2b2lkIDB9KSxhcyh0aGlzLEkzZSwodCxyLGkpPT57Y29uc3R7bGFiZWw6b309WGkodGhpcyxzcykuZ2V0SGVhZGVyVHJl''@;'; put 'put ''ZU5vZGVEYXRhKGkscik/P3tsYWJlbDoiIn07cmV0dXJuIG99KSxhcyh0aGlzLEQzZSwodCxyKT0+e2lmKHQ8MClyZXR1cm4gdGhpcy5ob3QuZ2V0Q2VsbCh0LFhpKHRoaXMsc3MpLmZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KHQsciksITApPz92b2lkIDB9KSxhcyh0aGlzLEwzZSwoKT0+e3Ro''@;'; put 'put ''aXMudXBkYXRlUGx1Z2luKCl9KSxhcyh0aGlzLE8zZSwodCxyKT0+e3J8fHRoaXMudXBkYXRlUGx1Z2luKCl9KSxhcyh0aGlzLE4zZSwodCxyKT0+e1hpKHRoaXMsc3MpLmluc2VydENvbHVtbnModCxyKSxhcyh0aGlzLHlDLCEwKX0pLGFzKHRoaXMsRjNlLCh0LHIpPT57WGkodGhpcyxzcyku''@;'; put 'put ''cmVtb3ZlQ29sdW1ucyh0LHIpLGFzKHRoaXMseUMsITApfSksYXModGhpcyxQM2UsKCk9PntYaSh0aGlzLHlDKSYmKHRoaXMuZ2hvc3RUYWJsZS5zZXRMYXllcnNDb3VudCh0aGlzLmdldExheWVyc0NvdW50KCkpLmJ1aWxkV2lkdGhzTWFwKCksYXModGhpcyx5QywhMSkpfSl9fWZ1bmN0aW9u''@;'; put 'put ''IEQkdChuLGUsdCxyLGkpe2lmKHZvaWQgMD09PWV8fGU8PTEpcmV0dXJuO2NvbnN0e3d0T3ZlcmxheXM6b309dGhpcy5ob3Qudmlldy5fd3QsYT1vLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT8uY2xvbmU/Lnd0VGFibGUuVEhFQUQ/LmNvbnRhaW5zKG4pLGw9by5pbmxpbmVTdGFydE92''@;'; put 'put ''ZXJsYXk/LmNsb25lPy53dFRhYmxlLlRIRUFEPy5jb250YWlucyhuKTtvLnRvcE92ZXJsYXk/LmNsb25lPy53dFRhYmxlLlRIRUFEPy5jb250YWlucyhuKSYmdDxpJiZZcihuLCJoaWRkZW5IZWFkZXJUZXh0Iik7Y29uc3QgZz1hfHxsP01hdGgubWluKGUsaS1yKTplO2c+MSYmbi5zZXRBdHRy''@;'; put 'put ''aWJ1dGUoImNvbHNwYW4iLFN0cmluZyhnKSl9ZnVuY3Rpb24gTCR0KG4sZSx0KXtpZih2b2lkIDA9PT1lfHxlPD0xKXJldHVybjtjb25zdCByPXQrZT09PXRoaXMuZ2V0TGF5ZXJzQ291bnQoKTtZcihuLCJodFJvd3NwYW5IZWFkZXIiKSxyJiZZcihuLCJodFJvd3NwYW5Cb3R0b21MZXZlbCIp''@;'; put 'put ''LG4uc2V0QXR0cmlidXRlKCJyb3dzcGFuIixTdHJpbmcoZSkpfWZ1bmN0aW9uIFYkKG4sZSl7Y29uc3QgdD0tdGhpcy5nZXRMYXllcnNDb3VudCgpO2ZvcihsZXQgcj1uO3I+PXQ7ci0tKXtjb25zdHtpc1Jvd3NwYW5QbGFjZWhvbGRlcjppfT1YaSh0aGlzLHNzKS5nZXRIZWFkZXJTZXR0aW5n''@;'; put 'put ''cyhyLGUpPz97fTtpZighaSlyZXR1cm4gcn1yZXR1cm4gbn1mdW5jdGlvbiBPJHQobixlKXtjb25zdCB0PVhpKHRoaXMsc3MpLmZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KG4sZSkse3Jvd3NwYW46cj0xfT1YaSh0aGlzLHNzKS5nZXRIZWFkZXJTZXR0aW5ncyhuLHQpPz97fTtyZXR1cm4gcn1m''@;'; put 'put ''dW5jdGlvbiBOJHQobixlKXtjb25zdCB0PVhpKHRoaXMsc3MpLmdldEhlYWRlclNldHRpbmdzKG4sZSk7aWYoIXQpcmV0dXJuITE7Y29uc3R7aXNQbGFjZWhvbGRlcjpyLGlzUm93c3BhblBsYWNlaG9sZGVyOmksaXNIaWRkZW46b309dDtyZXR1cm4gaT9uPC0xOiFyJiYhaSYmIW99ZnVuY3Rp''@;'; put 'put ''b24gRiR0KG4sZSx0KXtpZighWy0xLDFdLmluY2x1ZGVzKHQpKXJldHVybiBudWxsO2ZvcihsZXQgcj1lO3I+PTAmJnI8dGhpcy5ob3QuY291bnRDb2xzKCk7cis9dClpZihRNyh0aGlzLGdqZSxOJHQpLmNhbGwodGhpcyxuLHIpKXJldHVybiByO3JldHVybiBudWxsfWNvbnN0IEgkdD1jbGFz''@;'; put 'put ''cyBQJHR7c2V0RGF0YShlKXt0aGlzLmRhdGE9ZX1nZXREYXRhKCl7cmV0dXJuIHRoaXMuZGF0YX1nZXRSYXdTb3VyY2VEYXRhKCl7bGV0IGU9bnVsbDtyZXR1cm4gdGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSxlPXRoaXMuaG90LmdldFNvdXJjZURhdGEoKSx0aGlzLnBs''@;'; put 'put ''dWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksZX11cGRhdGVXaXRoRGF0YShlKXt0aGlzLnNldERhdGEoZSksdGhpcy5yZXdyaXRlQ2FjaGUoKX1yZXdyaXRlQ2FjaGUoKXt0aGlzLmNhY2hlPXtsZXZlbHM6W10sbGV2ZWxDb3VudDowLHJvd3M6W10sbm9kZUluZm86bmV3IFdlYWtNYXB9''@;'; put 'put ''LFZhKDAsdGhpcy5kYXRhLmxlbmd0aC0xLGU9Pnt0aGlzLmNhY2hlTm9kZSh0aGlzLmRhdGFbZV0sMCxudWxsKX0pfWNhY2hlTm9kZShlLHQscil7IWV8fCJvYmplY3QiIT10eXBlb2YgZXx8KHRoaXMuY2FjaGUubGV2ZWxzW3RdfHwodGhpcy5jYWNoZS5sZXZlbHNbdF09W10sdGhpcy5jYWNo''@;'; put 'put ''ZS5sZXZlbENvdW50Kz0xKSx0aGlzLmNhY2hlLmxldmVsc1t0XS5wdXNoKGUpLHRoaXMuY2FjaGUucm93cy5wdXNoKGUpLHRoaXMuY2FjaGUubm9kZUluZm8uc2V0KGUse3BhcmVudDpyLHJvdzp0aGlzLmNhY2hlLnJvd3MubGVuZ3RoLTEsbGV2ZWw6dH0pLHRoaXMuaGFzQ2hpbGRyZW4oZSkm''@;'; put 'put ''JmUuX19jaGlsZHJlbiYmWG4oZS5fX2NoaWxkcmVuLGk9Pnt0aGlzLmNhY2hlTm9kZShpLHQrMSxlKX0pKX1nZXREYXRhT2JqZWN0KGUpe3JldHVybiBudWxsPT1lP251bGw6dGhpcy5jYWNoZS5yb3dzW2VdfXJlYWRUcmVlTm9kZXMoZSx0LHIsaSl7bGV0IG89ITEsYT10O2lmKCJudW1iZXIi''@;'; put 'put ''IT10eXBlb2YgYSlyZXR1cm4gYTtsZXQgbD1lO3JldHVybiBsfHwobD17X19jaGlsZHJlbjp0aGlzLmRhdGF9LG89ITAsYS09MSksbnVsbCE9ciYmYT09PXI/e3Jlc3VsdDpsLGVuZDohMH06bnVsbCE9aSYmbD09PWk/e3Jlc3VsdDphLGVuZDohMH06KGErPTEsbC5fX2NoaWxkcmVuJiZYbihs''@;'; put 'put ''Ll9fY2hpbGRyZW4sdT0+e2lmKHRoaXMucGFyZW50UmVmZXJlbmNlLnNldCh1LG8/bnVsbDpsKSxhPXRoaXMucmVhZFRyZWVOb2Rlcyh1LGEscixpKSwibnVtYmVyIiE9dHlwZW9mIGEpcmV0dXJuITF9KSxhKX1tb2NrUGFyZW50KCl7Y29uc3QgZT10aGlzLm1vY2tOb2RlKCk7cmV0dXJuIGUu''@;'; put 'put ''X19jaGlsZHJlbj10aGlzLmRhdGEsZX1tb2NrTm9kZSgpe2NvbnN0IGU9e307cmV0dXJuIGFjKHRoaXMuZGF0YVswXSwodCxyKT0+e2Vbcl09bnVsbH0pLGV9Z2V0Um93SW5kZXgoZSl7cmV0dXJuIG51bGw9PWV8fCJvYmplY3QiIT10eXBlb2YgZT9udWxsOnRoaXMuY2FjaGUubm9kZUluZm8u''@;'; put 'put ''Z2V0KGUpLnJvd31nZXRSb3dJbmRleFdpdGhpblBhcmVudChlKXtsZXQgdD1udWxsO3Q9Im51bWJlciIhPXR5cGVvZiBlP2U6dGhpcy5nZXREYXRhT2JqZWN0KGUpO2NvbnN0IHI9dGhpcy5nZXRSb3dQYXJlbnQoZSk7cmV0dXJuIG51bGw9PXI/dGhpcy5kYXRhLmluZGV4T2YodCk6ci5fX2No''@;'; put 'put ''aWxkcmVuLmluZGV4T2YodCl9Y291bnRBbGxSb3dzKCl7cmV0dXJuIHRoaXMuY291bnRDaGlsZHJlbih7X19jaGlsZHJlbjp0aGlzLmRhdGF9KX1jb3VudENoaWxkcmVuKGUpe2xldCB0PTA7Y29uc3Qgcj0ibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5nZXREYXRhT2JqZWN0KGUpOmU7cmV0dXJu''@;'; put 'put ''IHImJnIuX19jaGlsZHJlbj8oWG4oci5fX2NoaWxkcmVuLGk9Pnt0Kz0xLGkuX19jaGlsZHJlbiYmKHQrPXRoaXMuY291bnRDaGlsZHJlbihpKSl9KSx0KTowfWdldFJvd1BhcmVudChlKXtsZXQgdDtyZXR1cm4gdD0ibnVtYmVyIiE9dHlwZW9mIGU/ZTp0aGlzLmdldERhdGFPYmplY3QoZSks''@;'; put 'put ''dGhpcy5nZXRSb3dPYmplY3RQYXJlbnQodCl9Z2V0Um93T2JqZWN0UGFyZW50KGUpe3JldHVybiBlJiYib2JqZWN0Ij09dHlwZW9mIGU/dGhpcy5jYWNoZS5ub2RlSW5mby5nZXQoZSkucGFyZW50Om51bGx9Z2V0Um93TGV2ZWwoZSl7bGV0IHQ9bnVsbDtyZXR1cm4gdD0ibnVtYmVyIiE9dHlw''@;'; put 'put ''ZW9mIGU/ZTp0aGlzLmdldERhdGFPYmplY3QoZSksdD90aGlzLmdldFJvd09iamVjdExldmVsKHQpOm51bGx9Z2V0Um93T2JqZWN0TGV2ZWwoZSl7cmV0dXJuIG51bGw9PWV8fCJvYmplY3QiIT10eXBlb2YgZT9udWxsOnRoaXMuY2FjaGUubm9kZUluZm8uZ2V0KGUpLmxldmVsfWhhc0NoaWxk''@;'; put 'put ''cmVuKGUpe2NvbnN0IHQ9Im51bWJlciI9PXR5cGVvZiBlP3RoaXMuZ2V0RGF0YU9iamVjdChlKTplO3JldHVybiEhKHQmJnQuX19jaGlsZHJlbiYmdC5fX2NoaWxkcmVuLmxlbmd0aCl9aXNDaGlsZChlKXtyZXR1cm4gbnVsbCE9PXRoaXMuZ2V0Um93UGFyZW50KGUpfWdldENoaWxkKGUsdCl7''@;'; put 'put ''cmV0dXJuIGUuX19jaGlsZHJlbj8uW3RdfHxudWxsfWlzUm93SGlnaGVzdExldmVsKGUpe3JldHVybiF0aGlzLmlzQ2hpbGQoZSl9aXNQYXJlbnQoZSl7Y29uc3QgdD0ibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5nZXREYXRhT2JqZWN0KGUpOmU7cmV0dXJuISghdHx8IXQuX19jaGlsZHJlbnx8''@;'; put 'put ''MD09PXQuX19jaGlsZHJlbi5sZW5ndGgpfWFkZENoaWxkKGUsdCl7bGV0IHI9dDt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQWRkQ2hpbGQiLGUscik7bGV0IGk9bnVsbDtlJiYoaT10aGlzLmdldFJvd0luZGV4KGUpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93IixpK3Ro''@;'; put 'put ''aXMuY291bnRDaGlsZHJlbihlKSsxLDEpO2xldCBvPWU7ZXx8KG89dGhpcy5tb2NrUGFyZW50KCkpLG8uX19jaGlsZHJlbnx8KG8uX19jaGlsZHJlbj1bXSkscnx8KHI9dGhpcy5tb2NrTm9kZSgpKSxvLl9fY2hpbGRyZW4ucHVzaChyKSx0aGlzLnJld3JpdGVDYWNoZSgpO2NvbnN0IGE9dGhp''@;'; put 'put ''cy5nZXRSb3dJbmRleChyKT8/MDt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKGEsMSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93IixhLDEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckFkZENoaWxkIixlLHIpfWFkZENoaWxkQXRJbmRleChlLHQscil7''@;'; put 'put ''bGV0IG8saT1yO2lmKGl8fChpPXRoaXMubW9ja05vZGUoKSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUFkZENoaWxkIixlLGksdCksZSl7Y29uc3QgYT10aGlzLmdldFJvd0luZGV4KGUpPz8wLGw9YSt0KzE7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsbCwxKSxlLl9f''@;'; put 'put ''Y2hpbGRyZW4uc3BsaWNlKHQsMCxpKSx0aGlzLnJld3JpdGVDYWNoZSgpLHRoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3Quc2V0U291cmNlRGF0YUF0Q2VsbChhLCJfX2NoaWxkcmVuIixlLl9fY2hpbGRyZW4sIk5lc3RlZFJvd3MuYWRkQ2hpbGRBdEluZGV4''@;'; put 'put ''IiksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaW5zZXJ0SW5kZXhlcyhsLDEpLHRoaXMucGx1Z2luLmVuYWJsZUNvcmVBUElNb2RpZmllcnMoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLGwsMSksbz1sfWVsc2UgdGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmll''@;'; put 'put ''cnMoKSx0aGlzLmhvdC5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsdCwxLCJOZXN0ZWRSb3dzLmFkZENoaWxkQXRJbmRleCIpLHRoaXMucGx1Z2luLmVuYWJsZUNvcmVBUElNb2RpZmllcnMoKSxvPXRoaXMuZ2V0Um93SW5kZXgodGhpcy5kYXRhW3RdKT8/MDtpPXRoaXMuZ2V0RGF0YU9iamVj''@;'; put 'put ''dChvKT8/bnVsbCx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJBZGRDaGlsZCIsZSxpLHQpfWFkZFNpYmxpbmcoZSx0PSJiZWxvdyIpe2NvbnN0IHI9dGhpcy50cmFuc2xhdGVUcmltbWVkUm93KGUpLGk9dGhpcy5nZXRSb3dQYXJlbnQociksbz10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50''@;'; put 'put ''KHIpO3N3aXRjaCh0KXtjYXNlImJlbG93Ijp0aGlzLmFkZENoaWxkQXRJbmRleChpLG8rMSxudWxsKTticmVhaztjYXNlImFib3ZlIjp0aGlzLmFkZENoaWxkQXRJbmRleChpLG8sbnVsbCl9fWRldGFjaEZyb21QYXJlbnQoZSx0PSEwKXtsZXQgcj1udWxsO2NvbnN0IGk9W107aWYoQXJyYXku''@;'; put 'put ''aXNBcnJheShlKT8oVmEoZVswXSxlWzJdLFo9Pntjb25zdCBlZT10aGlzLnRyYW5zbGF0ZVRyaW1tZWRSb3coWik7aS5wdXNoKHRoaXMuZ2V0RGF0YU9iamVjdChlZSkpfSksVmEoMCxpLmxlbmd0aC0yLFo9Pntjb25zdCBlZT1pW1pdO251bGwhPWVlJiZ0aGlzLmRldGFjaEZyb21QYXJlbnQo''@;'; put 'put ''ZWUsITEpfSkscj1pW2kubGVuZ3RoLTFdPz9udWxsKTpyPWUsIXIpcmV0dXJuO2NvbnN0IG89dGhpcy5nZXRSb3dJbmRleChyKT8/MCxhPXRoaXMuY291bnRDaGlsZHJlbihyKSxsPXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQociksdT10aGlzLmdldFJvd1BhcmVudChyKSxnPXRoaXMu''@;'; put 'put ''Z2V0Um93UGFyZW50KHUpLEU9dGhpcy5nZXRSb3dJbmRleChnKT8/MDtsZXQgTz1udWxsO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEZXRhY2hDaGlsZCIsdSxyKSxudWxsIT1sKXtjb25zdCBaPUFycmF5LmZyb20obmV3IEFycmF5KG8rYSsxKS5rZXlzKCkpLnNwbGljZSgtMSooYSsx''@;'; put 'put ''KSk7aWYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbW92ZVJvdyIsbyxhKzEsWix0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSx1Ll9fY2hpbGRyZW4uc3BsaWNlKGwsMSksdGhpcy5yZXdyaXRlQ2FjaGUoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZW1vdmVSb3ciLG8sYSsxLFosdGhp''@;'; put 'put ''cy5wbHVnaW4ucGx1Z2luTmFtZSksZyl7Tz1FK3RoaXMuY291bnRDaGlsZHJlbihnKTtjb25zdCBlZT10aGlzLmdldENoaWxkKGcsdGhpcy5jb3VudENoaWxkcmVuKGcpLTEpLHZlPXRoaXMuZ2V0Um93SW5kZXgoZWUpPz8wO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLHZl''@;'; put 'put ''KzEsYSsxLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLGcuX19jaGlsZHJlbi5wdXNoKHIpfWVsc2UgTz10aGlzLmhvdC5jb3VudFJvd3MoKSsxLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLE8tMixhKzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksdGhpcy5kYXRhLnB1c2go''@;'; put 'put ''cil9dGhpcy5yZXdyaXRlQ2FjaGUoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLE8tMixhKzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRGV0YWNoQ2hpbGQiLHUscix0aGlzLmdldFJvd0luZGV4KHIpKSx0JiZ0aGlzLmhvdC5y''@;'; put 'put ''ZW5kZXIoKX1maWx0ZXJEYXRhKGUsdCxyKXtjb25zdCBpPVtdO1huKHIsbz0+e2NvbnN0IGE9dGhpcy5nZXREYXRhT2JqZWN0KG8pO251bGwhPWEmJmkucHVzaChhKX0pLFhuKGksbz0+e2NvbnN0IGE9dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChvKSxsPXRoaXMuZ2V0Um93UGFyZW50''@;'; put 'put ''KG8pO251bGw9PT1sP3RoaXMuZGF0YS5zcGxpY2UoYSwxKTpsLl9fY2hpbGRyZW4uc3BsaWNlKGEsMSl9KSx0aGlzLnJld3JpdGVDYWNoZSgpfXNwbGljZURhdGEoZSx0LHIpe2NvbnN0IGk9dGhpcy5nZXREYXRhT2JqZWN0KGUtMSk7bGV0IG89bnVsbCxhPWU7aSYmaS5fX2NoaWxkcmVuJiYw''@;'; put 'put ''PT09aS5fX2NoaWxkcmVuLmxlbmd0aD8obz1pLGE9MCk6ZTx0aGlzLmNvdW50QWxsUm93cygpJiYobz10aGlzLmdldFJvd1BhcmVudChlKSxhPXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoZSkpLG8/cj9vLl9fY2hpbGRyZW4uc3BsaWNlKGEsdCwuLi5yKTpvLl9fY2hpbGRyZW4uc3Bs''@;'; put 'put ''aWNlKGEsdCk6cj90aGlzLmRhdGEuc3BsaWNlKGEsdCwuLi5yKTp0aGlzLmRhdGEuc3BsaWNlKGEsdCksdGhpcy5yZXdyaXRlQ2FjaGUoKX1zeW5jUm93V2l0aFJhd1NvdXJjZShlKXtsZXQgdD1lLHI9dDtkb3tyPXRoaXMuZ2V0Um93UGFyZW50KHIpLG51bGwhPT1yJiYodD1yKX13aGlsZShu''@;'; put 'put ''dWxsIT09cik7dGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSx0aGlzLmhvdC5zZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQodCksIl9fY2hpbGRyZW4iLHQuX19jaGlsZHJlbiwiTmVzdGVkUm93cy5zeW5jUm93V2l0aFJhd1NvdXJj''@;'; put 'put ''ZSIpLHRoaXMucGx1Z2luLmVuYWJsZUNvcmVBUElNb2RpZmllcnMoKX1tb3ZlUm93KGUsdCxyLGkpe2NvbnN0IG89dD09PXRoaXMuaG90LmNvdW50Um93cygpLGE9dGhpcy5nZXRSb3dQYXJlbnQoZSksbD10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGUpLHU9YS5fX2NoaWxkcmVuLnNs''@;'; put 'put ''aWNlKGwsbCsxKSxnPWU+dDtsZXQgRT10aGlzLmdldFJvd1BhcmVudChvP3QtMTp0KTtudWxsPT1FJiYoRT10aGlzLmdldFJvd1BhcmVudCh0LTEpKSxudWxsPT1FJiYoRT10aGlzLmdldERhdGFPYmplY3QodC0xKSksRT9FLl9fY2hpbGRyZW58fChFLl9fY2hpbGRyZW49W10pOihFPXRoaXMu''@;'; put 'put ''Z2V0RGF0YU9iamVjdCh0KSxFLl9fY2hpbGRyZW49W10pO2NvbnN0IE89b3x8cnx8aT9FLl9fY2hpbGRyZW4ubGVuZ3RoOnRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQodCksWj1hPT09RTtFLl9fY2hpbGRyZW4uc3BsaWNlKE8sMCx1WzBdKSxhLl9fY2hpbGRyZW4uc3BsaWNlKGwrKGcm''@;'; put 'put ''Jlo/MTowKSwxKSx0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKGEpLFp8fHRoaXMuc3luY1Jvd1dpdGhSYXdTb3VyY2UoRSl9dHJhbnNsYXRlVHJpbW1lZFJvdyhlKXtyZXR1cm4gdGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJP3RoaXMucGx1Z2luLmNvbGxhcHNpbmdVSS50cmFuc2xhdGVUcmlt''@;'; put 'put ''bWVkUm93KGUpOmV9dW50cmFuc2xhdGVUcmltbWVkUm93KGUpe3JldHVybiB0aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUk/dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLnVudHJhbnNsYXRlVHJpbW1lZFJvdyhlKTplfWNvbnN0cnVjdG9yKGUsdCl7dGhpcy5kYXRhPW51bGwsdGhpcy5wYXJlbnRS''@;'; put 'put ''ZWZlcmVuY2U9bmV3IFdlYWtNYXAsdGhpcy5jYWNoZT17bGV2ZWxzOltdLGxldmVsQ291bnQ6MCxyb3dzOltdLG5vZGVJbmZvOm5ldyBXZWFrTWFwfSx0aGlzLmhvdD10LHRoaXMucGx1Z2luPWV9fSxIM2U9Y2xhc3MgViR0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5ob3Q9dCx0aGlzLnBsdWdp''@;'; put 'put ''bj1lfX07Y2xhc3MgSjcgZXh0ZW5kcyBIM2V7c3RhdGljIGdldCBDU1NfQ0xBU1NFUygpe3JldHVybntpbmRpY2F0b3JDb250YWluZXI6Imh0X25lc3RpbmdMZXZlbHMiLHBhcmVudDoiaHRfbmVzdGluZ1BhcmVudCIsaW5kaWNhdG9yOiJodF9uZXN0aW5nTGV2ZWwiLGVtcHR5SW5kaWNhdG9y''@;'; put 'put ''OiJodF9uZXN0aW5nTGV2ZWxfZW1wdHkiLGJ1dHRvbjoiaHRfbmVzdGluZ0J1dHRvbiIsZXhwYW5kQnV0dG9uOiJodF9uZXN0aW5nRXhwYW5kIixjb2xsYXBzZUJ1dHRvbjoiaHRfbmVzdGluZ0NvbGxhcHNlIn19YXBwZW5kTGV2ZWxJbmRpY2F0b3JzKGUsdCl7Y29uc3Qgcj10aGlzLmhvdC50''@;'; put 'put ''b1BoeXNpY2FsUm93KGUpLGk9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KHIpO2lmKCFpKXJldHVybjtjb25zdCBvPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93TGV2ZWwociksYT10LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJESVYiKVswXSxsPWEucXVlcnlTZWxlY3Rvcigic3Bhbi5y''@;'; put 'put ''b3dIZWFkZXIiKSx1PWEucXVlcnlTZWxlY3RvckFsbCgnW2NsYXNzXj0iaHRfbmVzdGluZyJdJyksZz10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzO2lmKFhuKHUsRT0+e0UmJmEucmVtb3ZlQ2hpbGQoRSl9KSxZcih0LEo3LkNTU19DTEFTU0VTLmluZGljYXRvckNvbnRhaW5lciks''@;'; put 'put ''byl7Y29uc3R7cm9vdERvY3VtZW50OkV9PXRoaXMuaG90LE89bC5jbG9uZU5vZGUoITApO2EuaW5uZXJIVE1MPSIiLFZhKDAsby0xLCgpPT57Y29uc3QgWj1FLmNyZWF0ZUVsZW1lbnQoIlNQQU4iKTtZcihaLEo3LkNTU19DTEFTU0VTLmVtcHR5SW5kaWNhdG9yKSxhLmFwcGVuZENoaWxkKFop''@;'; put 'put ''fSksYS5hcHBlbmRDaGlsZChPKX1pZih0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGkpKXtjb25zdCBFPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTtnJiZLbyhFLFtbImFyaWEtaGlkZGVuIiwidHJ1ZSJdXSksWXIodCxKNy5DU1NfQ0xBU1NFUy5wYXJl''@;'; put 'put ''bnQpLHRoaXMuY29sbGFwc2luZ1VJLmFyZUNoaWxkcmVuQ29sbGFwc2VkKHIpPyhZcihFLGAke0o3LkNTU19DTEFTU0VTLmJ1dHRvbn0gJHtKNy5DU1NfQ0xBU1NFUy5leHBhbmRCdXR0b259YCksZyYmS28odCxbYW0oITEpXSkpOihZcihFLGAke0o3LkNTU19DTEFTU0VTLmJ1dHRvbn0gJHtK''@;'; put 'put ''Ny5DU1NfQ0xBU1NFUy5jb2xsYXBzZUJ1dHRvbn1gKSxnJiZLbyh0LFthbSghMCldKSksYS5hcHBlbmRDaGlsZChFKX19dXBkYXRlUm93SGVhZGVyV2lkdGgoZSl7bGV0IHQ9ZTt0fHwodD10aGlzLmRhdGFNYW5hZ2VyLmNhY2hlLmxldmVsQ291bnQpO2xldCByPTExO3I9Mip0aGlzLmhvdC5z''@;'; put 'put ''dHlsZXNIYW5kbGVyLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtaG9yaXpvbnRhbC1wYWRkaW5nIiksdGhpcy5yb3dIZWFkZXJXaWR0aENhY2hlPU1hdGgubWF4KDUwLHIrMTAqdCsyNSksdGhpcy5ob3QucmVuZGVyKCl9Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQpLHRoaXMuZGF0YU1h''@;'; put 'put ''bmFnZXI9dGhpcy5wbHVnaW4uZGF0YU1hbmFnZXIsdGhpcy5jb2xsYXBzaW5nVUk9dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLHRoaXMucm93SGVhZGVyV2lkdGhDYWNoZT1udWxsfX1jb25zdCB2amU9SjcsaiR0PWNsYXNzIEIkdCBleHRlbmRzIEgzZXtjb2xsYXBzZUNoaWxkcmVuKGUsdD0h''@;'; put 'put ''MCxyPSEwKXtjb25zdCBpPVtdO2xldCBvPW51bGwsYT1udWxsLGw9bnVsbDtyZXR1cm4gaXNOYU4oZSk/KG89ZSxhPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgobykpOihvPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChlKSxhPWUpLG8mJnRoaXMuZGF0YU1hbmFnZXIuaGFz''@;'; put 'put ''Q2hpbGRyZW4obykmJlhuKG8uX19jaGlsZHJlbix1PT57aS5wdXNoKHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgodSk/Py0xKX0pLGw9dGhpcy5jb2xsYXBzZVJvd3MoaSwhMCwhMSksciYmdGhpcy50cmltUm93cyhsKSx0JiZ0aGlzLnJlbmRlckFuZEFkanVzdCgpLC0xPT09dGhpcy5j''@;'; put 'put ''b2xsYXBzZWRSb3dzLmluZGV4T2YoYSkmJnRoaXMuY29sbGFwc2VkUm93cy5wdXNoKGEpLGx9Y29sbGFwc2VNdWx0aXBsZUNoaWxkcmVuKGUsdD0hMCxyPSEwKXtjb25zdCBpPVtdO1huKGUsbz0+e2kucHVzaCguLi50aGlzLmNvbGxhcHNlQ2hpbGRyZW4obywhMSwhMSkpfSksciYmdGhpcy50''@;'; put 'put ''cmltUm93cyhpKSx0JiZ0aGlzLnJlbmRlckFuZEFkanVzdCgpfWNvbGxhcHNlUm93KGUsdD0hMCl7dGhpcy5jb2xsYXBzZVJvd3MoW2VdLHQpfWNvbGxhcHNlUm93cyhlLHQ9ITAscj0hMSl7Y29uc3QgaT1bXTtyZXR1cm4gWG4oZSxvPT57aS5wdXNoKG8pLHQmJnRoaXMuY29sbGFwc2VDaGls''@;'; put 'put ''ZFJvd3MobyxpKX0pLHImJnRoaXMudHJpbVJvd3MoaSksaX1jb2xsYXBzZUNoaWxkUm93cyhlLHQ9W10scixpPSExKXt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGUpJiZYbih0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QoZSkuX19jaGlsZHJlbj8/W10sYT0+e2NvbnN0IGw9''@;'; put 'put ''dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChhKT8/LTE7dC5wdXNoKGwpLHRoaXMuY29sbGFwc2VDaGlsZFJvd3MobCx0KX0pLGkmJnRoaXMudHJpbVJvd3ModCl9ZXhwYW5kUm93KGUsdD0hMCl7dGhpcy5leHBhbmRSb3dzKFtlXSx0KX1leHBhbmRSb3dzKGUsdD0hMCxyPSExKXtjb25z''@;'; put 'put ''dCBpPVtdO3JldHVybiBYbihlLG89PntpLnB1c2gobyksdCYmdGhpcy5leHBhbmRDaGlsZFJvd3MobyxpKX0pLHImJnRoaXMudW50cmltUm93cyhpKSxpfWV4cGFuZENoaWxkUm93cyhlLHQ9W10scixpPSExKXt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGUpJiZYbih0aGlzLmRhdGFN''@;'; put 'put ''YW5hZ2VyLmdldERhdGFPYmplY3QoZSkuX19jaGlsZHJlbj8/W10sYT0+e2lmKCF0aGlzLmlzQW55UGFyZW50Q29sbGFwc2VkKGEpKXtjb25zdCBsPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoYSk/Py0xO3QucHVzaChsKSx0aGlzLmV4cGFuZENoaWxkUm93cyhsLHQpfX0pLGkmJnRo''@;'; put 'put ''aXMudW50cmltUm93cyh0KX1leHBhbmRDaGlsZHJlbihlLHQ9ITAscj0hMCl7Y29uc3QgaT1bXTtsZXQgbz1udWxsLGE9bnVsbCxsPW51bGw7cmV0dXJuIGlzTmFOKGUpPyhvPWUsYT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGUpKToobz10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFP''@;'; put 'put ''YmplY3QoZSksYT1lKSx0aGlzLmNvbGxhcHNlZFJvd3Muc3BsaWNlKHRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKGEpLDEpLG8mJnRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4obykmJlhuKG8uX19jaGlsZHJlbix1PT57Y29uc3QgZz10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4''@;'; put 'put ''KHUpPz8tMTtpLnB1c2goZyl9KSxsPXRoaXMuZXhwYW5kUm93cyhpLCEwLCExKSxyJiZ0aGlzLnVudHJpbVJvd3MobCksdCYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKSxsfWV4cGFuZE11bHRpcGxlQ2hpbGRyZW4oZSx0PSEwLHI9ITApe2NvbnN0IGk9W107WG4oZSxvPT57aS5wdXNoKC4uLnRo''@;'; put 'put ''aXMuZXhwYW5kQ2hpbGRyZW4obywhMSwhMSkpfSksciYmdGhpcy51bnRyaW1Sb3dzKGkpLHQmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCl9Y29sbGFwc2VBbGwoKXtjb25zdCBlPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpLHQ9W107WG4oZSxyPT57dGhpcy5kYXRhTWFuYWdlci5oYXNDaGls''@;'; put 'put ''ZHJlbihyKSYmdC5wdXNoKHIpfSksdGhpcy5jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4odCksdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1leHBhbmRBbGwoKXtjb25zdCBlPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpLHQ9W107WG4oZSxyPT57dGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJl''@;'; put 'put ''bihyKSYmdC5wdXNoKHIpfSksdGhpcy5leHBhbmRNdWx0aXBsZUNoaWxkcmVuKHQpLHRoaXMucmVuZGVyQW5kQWRqdXN0KCl9dHJpbVJvd3MoZSl7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntYbihlLHQ9Pnt0aGlzLnBsdWdpbi5jb2xsYXBzZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRl''@;'; put 'put ''eCh0LCEwKX0pfSwhMCl9dW50cmltUm93cyhlKXt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e1huKGUsdD0+e3RoaXMucGx1Z2luLmNvbGxhcHNlZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KHQsITEpfSl9LCEwKX1hcmVDaGlsZHJlbkNvbGxhcHNlZChlKXtsZXQgdD1pc05hTihlKT9l''@;'; put 'put ''OnRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChlKSxyPSEwO3JldHVybiBudWxsPT10JiYodD17X19jaGlsZHJlbjp0aGlzLmRhdGFNYW5hZ2VyLmRhdGF9KSx0JiZ0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKHQpJiZYbih0Ll9fY2hpbGRyZW4saT0+e2NvbnN0IG89dGhpcy5k''@;'; put 'put ''YXRhTWFuYWdlci5nZXRSb3dJbmRleChpKT8/LTE7aWYoIXRoaXMucGx1Z2luLmNvbGxhcHNlZFJvd3NNYXAuZ2V0VmFsdWVBdEluZGV4KG8pKXJldHVybiByPSExLCExfSkscn1pc0FueVBhcmVudENvbGxhcHNlZChlKXtsZXQgdD1lO2Zvcig7bnVsbCE9PXQ7KXt0PXRoaXMuZGF0YU1hbmFn''@;'; put 'put ''ZXIuZ2V0Um93UGFyZW50KHQpO2NvbnN0IHI9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleCh0KT8/LTE7aWYodGhpcy5jb2xsYXBzZWRSb3dzLmluZGV4T2Yocik+LTEpcmV0dXJuITB9cmV0dXJuITF9dG9nZ2xlU3RhdGUoZSx0LHIpe2lmKHQuY29sPj0wKXJldHVybjtjb25zdCBpPXRo''@;'; put 'put ''aXMudHJhbnNsYXRlVHJpbW1lZFJvdyh0LnJvdyk7TGEoQWEoZSksdmplLkNTU19DTEFTU0VTLmJ1dHRvbikmJih0aGlzLmFyZUNoaWxkcmVuQ29sbGFwc2VkKGkpP3RoaXMuZXhwYW5kQ2hpbGRyZW4oaSk6dGhpcy5jb2xsYXBzZUNoaWxkcmVuKGkpLEYzKGUpKX10cmFuc2xhdGVUcmltbWVk''@;'; put 'put ''Um93KGUpe3JldHVybiB0aGlzLmhvdC50b1BoeXNpY2FsUm93KGUpfXVudHJhbnNsYXRlVHJpbW1lZFJvdyhlKXtyZXR1cm4gdGhpcy5ob3QudG9WaXN1YWxSb3coZSl9cmVuZGVyQW5kQWRqdXN0KCl7dGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5yZW5kZXIo''@;'; put 'put ''KX1jb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCksdGhpcy5kYXRhTWFuYWdlcj10aGlzLnBsdWdpbi5kYXRhTWFuYWdlcix0aGlzLmNvbGxhcHNlZFJvd3M9W10sdGhpcy5jb2xsYXBzZWRSb3dzU3Rhc2g9e3N0YXNoOihyPSExKT0+e3RoaXMubGFzdENvbGxhcHNlZFJvd3M9dGhpcy5jb2xs''@;'; put 'put ''YXBzZWRSb3dzLnNsaWNlKDApLHRoaXMuZXhwYW5kTXVsdGlwbGVDaGlsZHJlbih0aGlzLmxhc3RDb2xsYXBzZWRSb3dzPz9bXSxyKX0sc2hpZnRTdGFzaDoocixpPXZvaWQgMCxvPTEpPT57Y29uc3QgYT1pPz8xLzA7WG4odGhpcy5sYXN0Q29sbGFwc2VkUm93cz8/W10sKGwsdSk9PntsPj1y''@;'; put 'put ''JiZsPGEmJih0aGlzLmxhc3RDb2xsYXBzZWRSb3dzW3VdPWwrbyl9KX0sYXBwbHlTdGFzaDoocj0hMCk9Pnt0aGlzLmNvbGxhcHNlTXVsdGlwbGVDaGlsZHJlbih0aGlzLmxhc3RDb2xsYXBzZWRSb3dzPz9bXSxyKSx0aGlzLmxhc3RDb2xsYXBzZWRSb3dzPXZvaWQgMH0sdHJpbVN0YXNoOihy''@;'; put 'put ''LGkpPT57VmEocixyK2ktMSxvPT57Y29uc3QgYT10aGlzLmxhc3RDb2xsYXBzZWRSb3dzLmluZGV4T2Yobyk7YT4tMSYmdGhpcy5sYXN0Q29sbGFwc2VkUm93cy5zcGxpY2UoYSwxKX0pfX19fTtmdW5jdGlvbiBfamUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJh''@;'; put 'put ''dHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQobil9dmFyIFYzZT1uZXcgV2Vha01hcDtjb25zdCBxJHQ9Y2xhc3MgJCR0IGV4dGVuZHMgSDNle2FwcGVuZE9wdGlvbnMoZSl7Y29uc3QgdD1be2tleToiYWRkX2NoaWxkIixuYW1l''@;'; put 'put ''KCl7cmV0dXJuIFN0cmluZyh0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoVmNlKSl9LGNhbGxiYWNrOigpPT57Y29uc3Qgcj10aGlzLmhvdC5nZXRTZWxlY3RlZEFjdGl2ZSgpLGk9dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KHI/LlswXT8/MCksbz10aGlzLmRhdGFNYW5h''@;'; put 'put ''Z2VyLmdldERhdGFPYmplY3QoaSk7dGhpcy5kYXRhTWFuYWdlci5hZGRDaGlsZChvKX0sZGlzYWJsZWQ6KCk9Pntjb25zdCByPXRoaXMuaG90LmdldFNlbGVjdGVkQWN0aXZlKCk7cmV0dXJuIXJ8fChyWzBdPz8wKTwwfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVh''@;'; put 'put ''ZGVyKCl8fHRoaXMuaG90LmNvdW50Um93cygpPj0odGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzPz8xLzApfX0se2tleToiZGV0YWNoX2Zyb21fcGFyZW50IixuYW1lKCl7cmV0dXJuIFN0cmluZyh0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQmNlKSl9LGNhbGxiYWNrOigpPT57dGhp''@;'; put 'put ''cy5kYXRhTWFuYWdlci5kZXRhY2hGcm9tUGFyZW50KHRoaXMuaG90LmdldFNlbGVjdGVkQWN0aXZlKCk/P1tdKX0sZGlzYWJsZWQ6KCk9Pntjb25zdCByPXRoaXMuaG90LmdldFNlbGVjdGVkQWN0aXZlKCksaT10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3cocj8uWzBdPz8w''@;'; put 'put ''KTtyZXR1cm4hdGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQoaSl8fCFyfHwoclswXT8/MCk8MHx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmhvdC5jb3VudFJvd3MoKT49KHRoaXMuaG90LmdldFNldHRpbmdzKCkubWF4Um93cz8/MS8w''@;'; put 'put ''KX19LHtuYW1lOiItLS0tLS0tLS0ifV07cmV0dXJuIFZhKDAsZS5pdGVtcy5sZW5ndGgtMSxyPT57aWYoMD09PXIpcmV0dXJuIFhuKHQsKGksbyk9PntlLml0ZW1zLnNwbGljZShyK28sMCxpKX0pLCExfSksdGhpcy5tb2RpZnlSb3dJbnNlcnRpbmdPcHRpb25zKGUpfW1vZGlmeVJvd0luc2Vy''@;'; put 'put ''dGluZ09wdGlvbnMoZSl7cmV0dXJuIFZhKDAsZS5pdGVtcy5sZW5ndGgtMSx0PT57Y29uc3Qgcj1mdW5jdGlvbiBZJHQobixlKXtyZXR1cm4gZnVuY3Rpb24geiR0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obixfamUobixlLCJnZXQiKSl9KHRoaXMsVjNlKVtl''@;'; put 'put ''Lml0ZW1zW3RdLmtleV07bnVsbCE9ciYmKGUuaXRlbXNbdF0uY2FsbGJhY2s9cil9KSxlfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLGZ1bmN0aW9uIFokdChuLGUsdCl7KGZ1bmN0aW9uIFUkdChuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0''@;'; put 'put ''aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLGUpLGUuc2V0KG4sdCl9KHRoaXMsVjNlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0aGlzLmRhdGFNYW5hZ2VyPXRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyLGZ1bmN0aW9uIEckdChu''@;'; put 'put ''LGUsdCl7cmV0dXJuIGZ1bmN0aW9uIFckdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4sX2plKG4sZSwi''@;'; put 'put ''c2V0IiksdCksdH0odGhpcyxWM2Use3Jvd19hYm92ZToodCxyKT0+e3RoaXMuZGF0YU1hbmFnZXIuYWRkU2libGluZyhyW3IubGVuZ3RoLTFdLnN0YXJ0LnJvdywiYWJvdmUiKX0scm93X2JlbG93Oih0LHIpPT57dGhpcy5kYXRhTWFuYWdlci5hZGRTaWJsaW5nKHJbci5sZW5ndGgtMV0uc3Rh''@;'; put 'put ''cnQucm93LCJiZWxvdyIpfX0pfX07Y2xhc3MgWCR0e29uQmVmb3JlUm93TW92ZShlLHQscixpKXtpZih0aGlzLmRpc3BsYXlBUElDb21wYXRpYmlsaXR5V2FybmluZyh7cm93czplLGZpbmFsSW5kZXg6dCxkcm9wSW5kZXg6cixtb3ZlUG9zc2libGU6aX0pKXJldHVybiExO3RoaXMubW92ZWRU''@;'; put 'put ''b0NvbGxhcHNlZD0hMTtjb25zdCBhPXI9PT10aGlzLmhvdC5jb3VudFJvd3MoKSxsPWE/dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk6dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KHI/PzApO2xldCB1PSEwO2NvbnN0IGc9ZS5tYXAodmU9PntpZighdSlyZXR1cm4tMTtj''@;'; put 'put ''b25zdCBNZT10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3codmUpO3JldHVybiB1PXRoaXMuc2hvdWxkQWxsb3dNb3ZpbmcoTWUsbCksTWV9KSxFPS0xPT09Zy5pbmRleE9mKGwpO2lmKCF1KXJldHVybiExO2lmKCFFKXJldHVybjtjb25zdCBPPXRoaXMuZ2V0QmFzZVBhcmVu''@;'; put 'put ''dChnKSxaPXRoaXMuZ2V0VGFyZ2V0UGFyZW50KGEsbCksZWU9Tz09PVo7cmV0dXJuIHRoaXMubW92ZWRUb0NvbGxhcHNlZD10aGlzLmNvbGxhcHNpbmdVSS5hcmVDaGlsZHJlbkNvbGxhcHNlZChaKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKSx0aGlzLnNo''@;'; put 'put ''aWZ0Q29sbGFwc2libGVQYXJlbnRzTG9jYXRpb25zKGcsbCxlZSksdGhpcy5tb3ZlUm93cyhnLGwsWiksdGhpcy5kYXRhTWFuYWdlci5yZXdyaXRlQ2FjaGUoKSx0aGlzLm1vdmVDZWxsc01ldGEoZyxsKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgh''@;'; put 'put ''MSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93TW92ZSIsZSx0LHIsaSxpJiZ0aGlzLmlzUm93T3JkZXJDaGFuZ2VkKGUsdCkpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuc2VsZWN0Q2VsbHMoZSxyKSwhMX1kaXNwbGF5QVBJQ29tcGF0aWJpbGl0eVdhcm5pbmcoZSl7Y29uc3R7cm93czp0''@;'; put 'put ''LGZpbmFsSW5kZXg6cixkcm9wSW5kZXg6aSxtb3ZlUG9zc2libGU6b309ZTtsZXQgYT0hMTtyZXR1cm4gWHUoaSkmJihIYSh5Y2BTaW5jZSB2ZXJzaW9uIDguMC4wIG9mIHRoZSBIYW5kc29udGFibGUgdGhlICdtb3ZlUm93cycgbWV0aG9kIGlzbid0IHVzZWQgZm9yIG1vdmluZyByb3dzXHgy''@;'; put 'put ''MAogICAgICB3aGVuIHRoZSBOZXN0ZWRSb3dzIHBsdWdpbiBpcyBlbmFibGVkLiBQbGVhc2UgdXNlIHRoZSAnZHJhZ1Jvd3MnIG1ldGhvZCBpbnN0ZWFkLmApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd01vdmUiLHQscixpLG8sITEpLGE9ITApLGF9c2hvdWxkQWxsb3dNb3ZpbmcoZSx0''@;'; put 'put ''KXtyZXR1cm4hKHRoaXMuZGF0YU1hbmFnZXIuaXNQYXJlbnQoZSl8fHRoaXMuZGF0YU1hbmFnZXIuaXNSb3dIaWdoZXN0TGV2ZWwoZSl8fGU9PT10fHwwPT09dCl9Z2V0QmFzZVBhcmVudChlKXtyZXR1cm4gdGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQoZVswXSl9Z2V0VGFyZ2V0UGFy''@;'; put 'put ''ZW50KGUsdCl7bGV0IHI9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQoZT90LTE6dCk7cmV0dXJuIG51bGw9PXImJihyPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KHQtMSkpLHJ9c2hpZnRDb2xsYXBzaWJsZVBhcmVudHNMb2NhdGlvbnMoZSx0LHIpe3J8fChNYXRoLm1heCgu''@;'; put 'put ''Li5lKTw9dD90aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChlWzBdLHQsLTEqZS5sZW5ndGgpOnRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKHQsZVswXSxlLmxlbmd0aCkpfW1vdmVSb3dzKGUsdCxyKXtjb25zdCBp''@;'; put 'put ''PXQ9PT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KHIpK3RoaXMuZGF0YU1hbmFnZXIuY291bnRDaGlsZHJlbihyKSsxO3RoaXMuaG90LmJhdGNoUmVuZGVyKCgpPT57ZS5mb3JFYWNoKG89Pnt0aGlzLmRhdGFNYW5hZ2VyLm1vdmVSb3cobyx0LHRoaXMubW92ZWRUb0NvbGxhcHNlZCxp''@;'; put 'put ''KX0pfSl9bW92ZUNlbGxzTWV0YShlLHQpe2NvbnN0IHI9W10saT1NYXRoLm1heCguLi5lKTx0O2UuZm9yRWFjaChvPT57ci5wdXNoKHRoaXMuaG90LmdldENlbGxNZXRhQXRSb3cobykpfSksdGhpcy5ob3Quc3BsaWNlQ2VsbHNNZXRhKGVbMF0sZS5sZW5ndGgpLHRoaXMuaG90LnNwbGljZUNl''@;'; put 'put ''bGxzTWV0YSh0LShpP3IubGVuZ3RoOjApLDAsLi4ucil9c2VsZWN0Q2VsbHMoZSx0KXtjb25zdCByPWUubGVuZ3RoO2xldCBpPTAsbz0wO2lmKHRoaXMubW92ZWRUb0NvbGxhcHNlZCl7bGV0IGE9bnVsbDtjb25zdCBsPXQ/PzA7YT10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRS''@;'; put 'put ''b3coKGVbci0xXT8/MCk8bD9sLXI6bCk7Y29uc3QgdT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChudWxsPT09YT90aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKS0xOmEtMSksZz10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KHUpPz8wO2k9dGhpcy5kYXRhTWFuYWdlci51bnRy''@;'; put 'put ''YW5zbGF0ZVRyaW1tZWRSb3coZyksbz1pfWVsc2UoZVtyLTFdPz8wKTwodD8/MCk/KG89KHQ/PzApLTEsaT1vLXIrMSk6KGk9dD8/MCxvPWkrci0xKTt0aGlzLmhvdC5zZWxlY3RDZWxscyhbW2ksMCxvLHRoaXMuaG90LmNvdW50Q29scygpLTFdXSwhMSl9aXNSb3dPcmRlckNoYW5nZWQoZSx0''@;'; put 'put ''KXtyZXR1cm4gZS5zb21lKChyLGkpPT5yLWkhPT10KX1jb25zdHJ1Y3RvcihlKXt0aGlzLm1vdmVkVG9Db2xsYXBzZWQ9ITEsdGhpcy5wbHVnaW49ZSx0aGlzLmhvdD1lLmhvdCx0aGlzLmRhdGFNYW5hZ2VyPWUuZGF0YU1hbmFnZXIsdGhpcy5jb2xsYXBzaW5nVUk9ZS5jb2xsYXBzaW5nVUl9''@;'; put 'put ''fWZ1bmN0aW9uIHlqZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBlaChuLGUpe3JldHVybiBmdW5jdGlvbiBKJHQobixlKXty''@;'; put 'put ''ZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLHlqZShuLGUsImdldCIpKX1mdW5jdGlvbiBFMShuLGUsdCl7KGZ1bmN0aW9uIFEkdChuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVu''@;'; put 'put ''dHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLGUpLGUuc2V0KG4sdCl9ZnVuY3Rpb24gdmQobixlLHQpe3JldHVybiBmdW5jdGlvbiBlcXQobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0''@;'; put 'put ''byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLHlqZShuLGUsInNldCIpLHQpLHR9Y29uc3QgQiQ9Im5lc3RlZFJvd3MiLGJqZT1CJDt2YXIgVEY9bmV3IFdlYWtNYXAsYkM9bmV3IFdlYWtNYXAsaiQ9bmV3IFdlYWtNYXAsQjNlPW5ldyBXZWFrTWFwLGozZT1u''@;'; put 'put ''ZXcgV2Vha01hcCxVM2U9bmV3IFdlYWtNYXAsejNlPW5ldyBXZWFrTWFwLFczZT1uZXcgV2Vha01hcCxZM2U9bmV3IFdlYWtNYXAsWjNlPW5ldyBXZWFrTWFwLEczZT1uZXcgV2Vha01hcCwkM2U9bmV3IFdlYWtNYXAscTNlPW5ldyBXZWFrTWFwLEszZT1uZXcgV2Vha01hcCxYM2U9bmV3IFdl''@;'; put 'put ''YWtNYXAsUTNlPW5ldyBXZWFrTWFwLEozZT1uZXcgV2Vha01hcCxlcGU9bmV3IFdlYWtNYXAsdHBlPW5ldyBXZWFrTWFwLFUkPW5ldyBXZWFrTWFwO2NsYXNzIHJxdCBleHRlbmRzIGFse3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBCJH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklU''@;'; put 'put ''WSgpe3JldHVybiAzMDB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0IkXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmNvbGxhcHNlZFJvd3NNYXA9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoIm5lc3RlZFJvd3MiLG5l''@;'; put 'put ''dyBhVCksdGhpcy5kYXRhTWFuYWdlcj1uZXcgSCR0KHRoaXMsdGhpcy5ob3QpLHRoaXMuY29sbGFwc2luZ1VJPW5ldyBqJHQodGhpcyx0aGlzLmhvdCksdGhpcy5oZWFkZXJzVUk9bmV3IHZqZSh0aGlzLHRoaXMuaG90KSx0aGlzLmNvbnRleHRNZW51VUk9bmV3IHEkdCh0aGlzLHRoaXMuaG90''@;'; put 'put ''KSx0aGlzLnJvd01vdmVDb250cm9sbGVyPW5ldyBYJHQodGhpcyksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLGVoKHRoaXMsSjNlKSksdGhpcy5hZGRIb29rKCJhZnRlclJlbmRlciIsZWgodGhpcyxlcGUpKSx0aGlzLmFkZEhvb2soImJlZm9yZVZpZXdSZW5kZXIiLGVoKHRoaXMsdHBlKSks''@;'; put 'put ''dGhpcy5hZGRIb29rKCJtb2RpZnlSb3dEYXRhIix0aGlzLm9uTW9kaWZ5Um93RGF0YS5iaW5kKHRoaXMpKSx0aGlzLmFkZEhvb2soIm1vZGlmeVNvdXJjZUxlbmd0aCIsdGhpcy5vbk1vZGlmeVNvdXJjZUxlbmd0aC5iaW5kKHRoaXMpKSx0aGlzLmFkZEhvb2soImJlZm9yZURhdGFTcGxpY2Ui''@;'; put 'put ''LHRoaXMub25CZWZvcmVEYXRhU3BsaWNlLmJpbmQodGhpcykpLHRoaXMuYWRkSG9vaygiZmlsdGVyRGF0YSIsZWgodGhpcyxVM2UpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZWgodGhpcyx6M2UpKSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Um93SGVh''@;'; put 'put ''ZGVyIixlaCh0aGlzLFczZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixlaCh0aGlzLGozZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IixlaCh0aGlzLEczZSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGVoKHRoaXMsWjNlKSksdGhpcy5h''@;'; put 'put ''ZGRIb29rKCJiZWZvcmVBZGRDaGlsZCIsZWgodGhpcywkM2UpKSx0aGlzLmFkZEhvb2soImFmdGVyQWRkQ2hpbGQiLGVoKHRoaXMscTNlKSksdGhpcy5hZGRIb29rKCJiZWZvcmVEZXRhY2hDaGlsZCIsZWgodGhpcyxLM2UpKSx0aGlzLmFkZEhvb2soImFmdGVyRGV0YWNoQ2hpbGQiLGVoKHRo''@;'; put 'put ''aXMsWDNlKSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWFkZXJXaWR0aCIsZWgodGhpcyxZM2UpKSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IixlaCh0aGlzLFEzZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlUm93TW92ZSIsZWgodGhpcyxCM2UpKSx0aGlzLmFkZEhvb2soImJlZm9y''@;'; put 'put ''ZUxvYWREYXRhIixlaCh0aGlzLFUkKSksdGhpcy5hZGRIb29rKCJiZWZvcmVVcGRhdGVEYXRhIixlaCh0aGlzLFUkKSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rl''@;'; put 'put ''ck1hcCgibmVzdGVkUm93cyIpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKTtjb25zdCBlPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpO3RoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5k''@;'; put 'put ''YXRhTWFuYWdlci51cGRhdGVXaXRoRGF0YShlKSxzdXBlci51cGRhdGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKT8uYWRkU2hvcnRjdXQoe2tleXM6W1siRW50ZXIiXV0sY2FsbGJhY2s6KCk9Pntj''@;'; put 'put ''b25zdCBlPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighZSlyZXR1cm4hMTtjb25zdHtoaWdobGlnaHQ6dH09ZSxyPXRoaXMuY29sbGFwc2luZ1VJLnRyYW5zbGF0ZVRyaW1tZWRSb3codC5yb3c/PzApO3JldHVybiB0aGlzLmNvbGxhcHNpbmdVSS5hcmVDaGlsZHJlbkNv''@;'; put 'put ''bGxhcHNlZChyKT90aGlzLmNvbGxhcHNpbmdVSS5leHBhbmRDaGlsZHJlbihyKTp0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZUNoaWxkcmVuKHIpLCExfSxydW5Pbmx5SWY6KCk9Pntjb25zdCBlPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKT8uaGlnaGxpZ2h0O3JldHVybiEh''@;'; put 'put ''KGUmJnRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKT8uaXNTaW5nbGUoKSYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoZSkmJi0xPT09ZS5jb2wmJm51bGwhPT1lLnJvdyYmZS5yb3c+PTApfSxncm91cDpiamUscmVsYXRpdmVUb0dyb3VwOlI3LHBvc2l0aW9uOiJi''@;'; put 'put ''ZWZvcmUifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKT8ucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChiamUpfWRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCl7dmQodGhpcyxiQywhMCl9ZW5hYmxlQ29yZUFQSU1v''@;'; put 'put ''ZGlmaWVycygpe3ZkKHRoaXMsYkMsITEpfW9uTW9kaWZ5Um93RGF0YShlKXtpZighZWgodGhpcyxiQykpcmV0dXJuIHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChlKX1vbk1vZGlmeVNvdXJjZUxlbmd0aCgpe2lmKCFlaCh0aGlzLGJDKSlyZXR1cm4gdGhpcy5kYXRhTWFuYWdlci5j''@;'; put 'put ''b3VudEFsbFJvd3MoKX1vbkJlZm9yZURhdGFTcGxpY2UoZSx0LHIpe3JldHVybiEoIWVoKHRoaXMsYkMpJiYhdGhpcy5kYXRhTWFuYWdlci5pc1Jvd0hpZ2hlc3RMZXZlbChlKSYmKHRoaXMuZGF0YU1hbmFnZXIuc3BsaWNlRGF0YShlLHQsW3JdKSwxKSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ry''@;'; put 'put ''b3koKX1jb25zdHJ1Y3RvciguLi5lKXtzdXBlciguLi5lKSxFMSh0aGlzLFRGLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxFMSh0aGlzLGJDLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxFMSh0aGlzLGokLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxFMSh0aGlzLEIzZSx7''@;'; put 'put ''d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRTEodGhpcyxqM2Use3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEUxKHRoaXMsVTNlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxFMSh0aGlzLHozZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRTEodGhpcyxXM2Use3dyaXRh''@;'; put 'put ''YmxlOiEwLHZhbHVlOnZvaWQgMH0pLEUxKHRoaXMsWTNlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxFMSh0aGlzLFozZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRTEodGhpcyxHM2Use3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEUxKHRoaXMsJDNlLHt3cml0YWJsZToh''@;'; put 'put ''MCx2YWx1ZTp2b2lkIDB9KSxFMSh0aGlzLHEzZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRTEodGhpcyxLM2Use3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEUxKHRoaXMsWDNlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxFMSh0aGlzLFEzZSx7d3JpdGFibGU6ITAsdmFs''@;'; put 'put ''dWU6dm9pZCAwfSksRTEodGhpcyxKM2Use3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEUxKHRoaXMsZXBlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxFMSh0aGlzLHRwZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRTEodGhpcyxVJCx7d3JpdGFibGU6ITAsdmFsdWU6dm9p''@;'; put 'put ''ZCAwfSksdGhpcy5kYXRhTWFuYWdlcj1udWxsLHRoaXMuaGVhZGVyc1VJPW51bGwsdGhpcy5jb2xsYXBzaW5nVUk9bnVsbCx0aGlzLmNvbnRleHRNZW51VUk9bnVsbCx0aGlzLnJvd01vdmVDb250cm9sbGVyPW51bGwsdGhpcy5jb2xsYXBzZWRSb3dzTWFwPW51bGwsdmQodGhpcyxURiwhMSks''@;'; put 'put ''dmQodGhpcyxiQywhMSksdmQodGhpcyxqJCwhMCksdmQodGhpcyxCM2UsKHQscixpLG8pPT50aGlzLnJvd01vdmVDb250cm9sbGVyLm9uQmVmb3JlUm93TW92ZSh0LHIsaSxvKSksdmQodGhpcyxqM2UsKHQscixpKT0+e3RoaXMuY29sbGFwc2luZ1VJLnRvZ2dsZVN0YXRlKHQscixpKX0pLHZk''@;'; put 'put ''KHRoaXMsVTNlLCh0LHIsaSk9Pih0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2gudHJpbVN0YXNoKGlbMF0sciksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rh''@;'; put 'put ''c2goaVswXSxudWxsLC0xKnIpLHRoaXMuZGF0YU1hbmFnZXIuZmlsdGVyRGF0YSh0LHIsaSksdmQodGhpcyxURiwhMCksdGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCkuc2xpY2UoKSkpLHZkKHRoaXMsejNlLHQ9PnRoaXMuY29udGV4dE1lbnVVSS5hcHBlbmRPcHRpb25zKHQpKSx2ZCh0aGlz''@;'; put 'put ''LFczZSwodCxyKT0+e3RoaXMuaGVhZGVyc1VJLmFwcGVuZExldmVsSW5kaWNhdG9ycyh0LHIpfSksdmQodGhpcyxZM2UsdD0+TWF0aC5tYXgodGhpcy5oZWFkZXJzVUkucm93SGVhZGVyV2lkdGhDYWNoZT8/MCx0KSksdmQodGhpcyxaM2UsKHQscixpLG8pPT57byE9PXRoaXMucGx1Z2luTmFt''@;'; put 'put ''ZSYmdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3ZkKHRoaXMsVEYsITEpLHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKX0pfSksdmQodGhpcyxHM2UsKHQscixpKT0+e2Nv''@;'; put 'put ''bnN0IG89QXJyYXkuZnJvbShpLnJlZHVjZSgoYSxsKT0+e2lmKHRoaXMuZGF0YU1hbmFnZXIuaXNQYXJlbnQobCkpe2NvbnN0IHU9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpPy5fX2NoaWxkcmVuO3JldHVybiBhLmFkZChsKSxBcnJheS5pc0FycmF5KHUpJiZ1LmZvckVhY2go''@;'; put 'put ''Zz0+e2NvbnN0IEU9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChnKTtudWxsIT09RSYmYS5hZGQoRSl9KSxhfXJldHVybiBhLmFkZChsKX0sbmV3IFNldCkpO2kubGVuZ3RoPTAsaS5wdXNoKC4uLm8pfSksdmQodGhpcywkM2UsKCk9Pnt0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRS''@;'; put 'put ''b3dzU3Rhc2guc3Rhc2goKX0pLHZkKHRoaXMscTNlLCh0LHIpPT57Y29uc3QgaT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KHIpO251bGwhPT1pJiZ0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChpKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBz''@;'; put 'put ''ZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpLHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKHZvaWQgMCl9KSx2ZCh0aGlzLEszZSwoKT0+e3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpfSksdmQodGhpcyxYM2UsKHQscixpKT0+e3RoaXMuY29s''@;'; put 'put ''bGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKGksbnVsbCwtMSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKSx0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCh2b2lkIDApfSksdmQodGhpcyxRM2UsKCk9Pnt0''@;'; put 'put ''aGlzLmRhdGFNYW5hZ2VyLnJld3JpdGVDYWNoZSgpfSksdmQodGhpcyxKM2UsKCk9Pnt0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCh2b2lkIDApfSksdmQodGhpcyxlcGUsKCk9PntlaCh0aGlzLGokKSYmdGhpcy5ob3QudmlldyYmKHZkKHRoaXMsaiQsITEpLHRoaXMuaG90''@;'; put 'put ''LnJvb3RXaW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5ob3QmJnRoaXMuaG90LnZpZXcmJiF0aGlzLmhvdC5pc0Rlc3Ryb3llZCYmdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoITApfSkpfSksdmQodGhpcyx0cGUsKHQscik9PntlaCh0aGlzLFRGKSYmKHIu''@;'; put 'put ''c2tpcFJlbmRlcj0hMCl9KSx2ZCh0aGlzLFUkLHQ9PntpZighZnVuY3Rpb24gSyR0KG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pJiYoMD09PW4ubGVuZ3RofHxlUmUobikpfSh0KSlyZXR1cm4gbTcoIlRoZSBOZXN0ZWQgUm93cyBwbHVnaW4gcmVxdWlyZXMgYW4gQXJyYXkgb2YgT2JqZWN0''@;'; put 'put ''cyBhcyBhIGRhdGFzZXQgdG8gYmUgcHJvdmlkZWQuIFRoZSBwbHVnaW4gaGFzIGJlZW4gZGlzYWJsZWQuIiksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtCJF09ITEsdm9pZCB0aGlzLmRpc2FibGVQbHVnaW4oKTt0aGlzLmRhdGFNYW5hZ2VyLnNldERhdGEodCksdGhpcy5kYXRhTWFuYWdlci5y''@;'; put 'put ''ZXdyaXRlQ2FjaGUoKX0pfX1mdW5jdGlvbiB3amUobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIENqZShuLGUsdCl7aWYoIWUuaGFzKG4p''@;'; put 'put ''KXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBDYyhuLGUpe3JldHVybiBmdW5jdGlvbiBpcXQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVl''@;'; put 'put ''fShuLENqZShuLGUsImdldCIpKX1mdW5jdGlvbiB3QyhuLGUsdCl7d2plKG4sZSksZS5zZXQobix0KX1mdW5jdGlvbiBqNChuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIG9xdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4sQ2plKG4sZSwic2V0IiksdCksdH1mdW5jdGlvbiBucGUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmll''@;'; put 'put ''bGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHR9dmFyIHhGPW5ldyBXZWFrTWFwLE54PW5ldyBXZWFrTWFwLHokPW5ldyBXZWFrTWFwLHIzPW5ldyBXZWFrTWFwLEZ4PW5ldyBXZWFrTWFwLHdtPW5ldyBXZWFrTWFwLHJwZT1uZXcgV2Vha01hcCxXJD1uZXcgV2Vha1NldDtjbGFzcyBTamV7''@;'; put 'put ''aW5zdGFsbCgpe2lmKENjKHRoaXMscjMpPy5jb250YWluZXIpcmV0dXJuO2NvbnN0IGU9c3dgJHsnXG48ZGl2IGRhdGEtcmVmPSJjb250YWluZXIiIGNsYXNzPSJodC1wYWdpbmF0aW9uIGhhbmRzb250YWJsZSI+XG4gIDxkaXYgY2xhc3M9Imh0LXBhZ2luYXRpb25fX2lubmVyIj5cbiAgICA8''@;'; put 'put ''ZGl2IGRhdGEtcmVmPSJwYWdlU2l6ZVNlY3Rpb24iIGNsYXNzPSJodC1wYWdlLXNpemUtc2VjdGlvbiI+XG4gICAgICA8c3BhbiBkYXRhLXJlZj0icGFnZVNpemVMYWJlbCIgY2xhc3M9Imh0LXBhZ2Utc2l6ZS1zZWN0aW9uX19sYWJlbCI+PC9zcGFuPlxuICAgICAgPGRpdiBjbGFzcz0iaHQt''@;'; put 'put ''cGFnZS1zaXplLXNlY3Rpb25fX3NlbGVjdC13cmFwcGVyIj5cbiAgICAgICAgPHNlbGVjdCBkYXRhLXJlZj0icGFnZVNpemVTZWxlY3QiIG5hbWU9InBhZ2VTaXplIiBkYXRhLWhvdC1pbnB1dD48L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZGF0YS1yZWY9''@;'; put 'put ''InBhZ2VDb3VudGVyU2VjdGlvbiIgY2xhc3M9Imh0LXBhZ2UtY291bnRlci1zZWN0aW9uIj48L2Rpdj5cbiAgICA8bmF2IGRhdGEtcmVmPSJwYWdlTmF2U2VjdGlvbiIgY2xhc3M9Imh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uIj5cbiAgICAgIDxidXR0b24gZGF0YS1yZWY9ImZpcnN0IiBj''@;'; put 'put ''bGFzcz0iaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb25fX2J1dHRvbiBodC1wYWdlLWZpcnN0Ij48L2J1dHRvbj5cbiAgICAgIDxidXR0b24gZGF0YS1yZWY9InByZXYiIGNsYXNzPSJodC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbl9fYnV0dG9uIGh0LXBhZ2UtcHJldiI+PC9idXR0b24+XG4g''@;'; put 'put ''ICAgICA8c3BhbiBkYXRhLXJlZj0icGFnZU5hdkxhYmVsIiBjbGFzcz0iaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb25fX2xhYmVsIj48L3NwYW4+XG4gICAgICA8YnV0dG9uIGRhdGEtcmVmPSJuZXh0IiBjbGFzcz0iaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb25fX2J1dHRvbiBodC1wYWdl''@;'; put 'put ''LW5leHQiPjwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBkYXRhLXJlZj0ibGFzdCIgY2xhc3M9Imh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uX19idXR0b24gaHQtcGFnZS1sYXN0Ij48L2J1dHRvbj5cbiAgICA8L25hdj5cbiAgPC9kaXY+XG48L2Rpdj5cbid9YCx7Y29udGFpbmVyOnQsZmly''@;'; put 'put ''c3Q6cixwcmV2OmksbmV4dDpvLGxhc3Q6YSxwYWdlU2l6ZVNlbGVjdDpsfT1lLnJlZnM7ajQodGhpcyxyMyxlLnJlZnMpLHQuc2V0QXR0cmlidXRlKCJkaXIiLENjKHRoaXMseiQpPyJydGwiOiJsdHIiKSx0LnRhYkluZGV4PS0xO2NvbnN0IGc9KEUsTyxaKT0+e08uYWRkRXZlbnRMaXN0ZW5l''@;'; put 'put ''cihFLGVlPT57KEU9PkUuY3VycmVudFRhcmdldC5kaXNhYmxlZCkoZWUpfHxaKCl9KX07ZygiY2xpY2siLHIsKCk9PnRoaXMucnVuTG9jYWxIb29rcygiZmlyc3RQYWdlQ2xpY2siKSksZygiY2xpY2siLGksKCk9PnRoaXMucnVuTG9jYWxIb29rcygicHJldlBhZ2VDbGljayIpKSxnKCJjbGlj''@;'; put 'put ''ayIsbywoKT0+dGhpcy5ydW5Mb2NhbEhvb2tzKCJuZXh0UGFnZUNsaWNrIikpLGcoImNsaWNrIixhLCgpPT50aGlzLnJ1bkxvY2FsSG9va3MoImxhc3RQYWdlQ2xpY2siKSksbC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCgpPT57Y29uc3QgRT0iYXV0byI9PT1sLnZhbHVlPyJhdXRvIjpO''@;'; put 'put ''dW1iZXIucGFyc2VJbnQobC52YWx1ZSwxMCk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJwYWdlU2l6ZUNoYW5nZSIsRSl9KSx0aGlzLnNldENvdW50ZXJTZWN0aW9uVmlzaWJpbGl0eSghMSksdGhpcy5zZXROYXZpZ2F0aW9uU2VjdGlvblZpc2liaWxpdHkoITEpLHRoaXMuc2V0UGFnZVNpemVTZWN0''@;'; put 'put ''aW9uVmlzaWJpbGl0eSghMSksQ2ModGhpcyxOeCkmJihDYyh0aGlzLE54KS5hcHBlbmRDaGlsZChlLmZyYWdtZW50KSxZcih0LFtDYyh0aGlzLEZ4KT8/IiIsImhhbmRzb250YWJsZSJdKSl9Z2V0Q29udGFpbmVyKCl7cmV0dXJuIENjKHRoaXMscjMpLmNvbnRhaW5lcn1nZXRGb2N1c2FibGVF''@;'; put 'put ''bGVtZW50cygpe2NvbnN0e2ZpcnN0OmUscHJldjp0LG5leHQ6cixsYXN0OmkscGFnZVNpemVTZWxlY3Q6b309Q2ModGhpcyxyMyk7cmV0dXJuW28sZSx0LHIsaV0uZmlsdGVyKGE9PiFhLmRpc2FibGVkKX11cGRhdGVUaGVtZShlKXtpZihqNCh0aGlzLEZ4LGUpLENjKHRoaXMsTngpKXtjb25z''@;'; put 'put ''dHtjb250YWluZXI6dH09Q2ModGhpcyxyMyk7a28odCwvaHQtdGhlbWUtLiovZyksQ2ModGhpcyxGeCkmJllyKHQsQ2ModGhpcyxGeCkpfXJldHVybiB0aGlzfWdldEhlaWdodCgpe3JldHVybiBDYyh0aGlzLHIzKS5jb250YWluZXIub2Zmc2V0SGVpZ2h0fXVwZGF0ZVN0YXRlKHtjdXJyZW50''@;'; put 'put ''UGFnZTplLHRvdGFsUGFnZXM6dCxmaXJzdFZpc2libGVSb3dJbmRleDpyLGxhc3RWaXNpYmxlUm93SW5kZXg6aSx0b3RhbFJlbmRlcmVkUm93czpvLHBhZ2VTaXplTGlzdDphLHBhZ2VTaXplOmwsYXV0b1BhZ2VTaXplOnUsY291bnRlclN0YXJ0Um93OmcsY291bnRlckVuZFJvdzpFfSl7Y29u''@;'; put 'put ''c3R7Zmlyc3Q6TyxwcmV2OlosbmV4dDplZSxsYXN0OnZlLHBhZ2VDb3VudGVyU2VjdGlvbjpNZSxwYWdlTmF2U2VjdGlvbjpIZSxwYWdlTmF2TGFiZWw6V2UscGFnZVNpemVTZWxlY3Q6YXQscGFnZVNpemVMYWJlbDpDdH09Q2ModGhpcyxyMyksQXQ9Zz8/cisxLEt0PUU/P2krMSxxdD1DYyh0''@;'; put 'put ''aGlzLHdtKS5jYWxsKHRoaXMsbXVlLHtzdGFydDpBdCxlbmQ6S3QsdG90YWw6b30pLGduPUNjKHRoaXMsd20pLmNhbGwodGhpcyx2dWUse2N1cnJlbnRQYWdlOmUsdG90YWxQYWdlczp0fSksVG49Q2ModGhpcyx3bSkuY2FsbCh0aGlzLFBZKTtNZS50ZXh0Q29udGVudD1xdCxXZS50ZXh0Q29u''@;'; put 'put ''dGVudD1nbixhdC50ZXh0Q29udGVudD0iIixDdC50ZXh0Q29udGVudD1gJHtUbn06YCxLbyhIZSxbTjMoQ2ModGhpcyx3bSkuY2FsbCh0aGlzLHB1ZSkpXSksS28oYXQsW04zKENjKHRoaXMsd20pLmNhbGwodGhpcyxQWSkpXSksQ2ModGhpcyxycGUpLmNhbGwodGhpcyxnbiksYS5mb3JFYWNo''@;'; put 'put ''KCRuPT57Y29uc3QgVHI9ImF1dG8iPT09JG4/Q2ModGhpcyx3bSkuY2FsbCh0aGlzLGd1ZSk6JG4scmk9bmV3IE9wdGlvbihTdHJpbmcoVHI/PyIiKSxTdHJpbmcoJG4/PyIiKSk7KHUmJiJhdXRvIj09PSRufHwhdSYmJG49PT1sKSYmKHJpLnNlbGVjdGVkPSEwKSxhdC5hZGQocmkpfSk7Y29u''@;'; put 'put ''c3QgQ249MT09PWUscXI9ZT09PXQ7aWYoIm5vbmUiIT09SGUuc3R5bGUuZGlzcGxheSl7Y29uc3QgJG49Q2ModGhpcyx4Rikub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50O0NuPyhZcihPLCJodC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbl9fYnV0dG9uLS1kaXNhYmxlZCIpLFlyKFosImh0''@;'; put 'put ''LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uX19idXR0b24tLWRpc2FibGVkIiksTy5kaXNhYmxlZD0hMCxaLmRpc2FibGVkPSEwKTooa28oTywiaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb25fX2J1dHRvbi0tZGlzYWJsZWQiKSxrbyhaLCJodC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbl9fYnV0''@;'; put 'put ''dG9uLS1kaXNhYmxlZCIpLE8uZGlzYWJsZWQ9ITEsWi5kaXNhYmxlZD0hMSkscXI/KFlyKGVlLCJodC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbl9fYnV0dG9uLS1kaXNhYmxlZCIpLFlyKHZlLCJodC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbl9fYnV0dG9uLS1kaXNhYmxlZCIpLGVlLmRpc2Fi''@;'; put 'put ''bGVkPSEwLHZlLmRpc2FibGVkPSEwKTooa28oZWUsImh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uX19idXR0b24tLWRpc2FibGVkIiksa28odmUsImh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uX19idXR0b24tLWRpc2FibGVkIiksZWUuZGlzYWJsZWQ9ITEsdmUuZGlzYWJsZWQ9ITEpLFtP''@;'; put 'put ''LFosZWUsdmVdLmluY2x1ZGVzKCRuKSYmKFouZGlzYWJsZWQ/ZWUuZm9jdXMoKTplZS5kaXNhYmxlZCYmWi5mb2N1cygpKX1yZXR1cm4gS28oTyxbTjMoQ2ModGhpcyx3bSkuY2FsbCh0aGlzLF91ZSkpLHRMKENuKV0pLEtvKFosW04zKENjKHRoaXMsd20pLmNhbGwodGhpcyx5dWUpKSx0TChD''@;'; put 'put ''bildKSxLbyhlZSxbTjMoQ2ModGhpcyx3bSkuY2FsbCh0aGlzLGJ1ZSkpLHRMKHFyKV0pLEtvKHZlLFtOMyhDYyh0aGlzLHdtKS5jYWxsKHRoaXMsd3VlKSksdEwocXIpXSksdGhpc31zZXRQYWdlU2l6ZVNlY3Rpb25WaXNpYmlsaXR5KGUpe2NvbnN0e3BhZ2VTaXplU2VjdGlvbjp0LHBhZ2VT''@;'; put 'put ''aXplU2VsZWN0OnJ9PUNjKHRoaXMscjMpO3JldHVybiB0LnN0eWxlLmRpc3BsYXk9ZT8iIjoibm9uZSIsci5kaXNhYmxlZD0hZSxucGUodGhpcyxXJCxpcGUpLmNhbGwodGhpcyksdGhpc31zZXRDb3VudGVyU2VjdGlvblZpc2liaWxpdHkoZSl7cmV0dXJuIENjKHRoaXMscjMpLnBhZ2VDb3Vu''@;'; put 'put ''dGVyU2VjdGlvbi5zdHlsZS5kaXNwbGF5PWU/IiI6Im5vbmUiLG5wZSh0aGlzLFckLGlwZSkuY2FsbCh0aGlzKSx0aGlzfXNldE5hdmlnYXRpb25TZWN0aW9uVmlzaWJpbGl0eShlKXtjb25zdHtwYWdlTmF2U2VjdGlvbjp0LGZpcnN0OnIscHJldjppLG5leHQ6byxsYXN0OmF9PUNjKHRoaXMs''@;'; put 'put ''cjMpO3JldHVybiB0LnN0eWxlLmRpc3BsYXk9ZT8iIjoibm9uZSIsci5kaXNhYmxlZD0hZSxpLmRpc2FibGVkPSFlLG8uZGlzYWJsZWQ9IWUsYS5kaXNhYmxlZD0hZSxucGUodGhpcyxXJCxpcGUpLmNhbGwodGhpcyksdGhpc31kZXN0cm95KCl7Q2ModGhpcyxyMyk/LmNvbnRhaW5lci5yZW1v''@;'; put 'put ''dmUoKSxqNCh0aGlzLHIzLG51bGwpfWNvbnN0cnVjdG9yKHtyb290RWxlbWVudDplLHVpQ29udGFpbmVyOnQsaXNSdGw6cix0aGVtZU5hbWU6aSxwaHJhc2VUcmFuc2xhdG9yOm8sYTExeUFubm91bmNlcjphfSl7KGZ1bmN0aW9uIGFxdChuLGUpe3dqZShuLGUpLGUuYWRkKG4pfSkodGhpcyxX''@;'; put 'put ''JCksd0ModGhpcyx4Rix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksd0ModGhpcyxOeCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksd0ModGhpcyx6JCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksd0ModGhpcyxyMyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksd0ModGhp''@;'; put 'put ''cyxGeCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksd0ModGhpcyx3bSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksd0ModGhpcyxycGUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLGo0KHRoaXMseiQsITEpLGo0KHRoaXMscjMsbnVsbCksajQodGhpcyx4RixlKSxqNCh0aGlz''@;'; put 'put ''LE54LHQpLGo0KHRoaXMseiQsciksajQodGhpcyxGeCxpKSxqNCh0aGlzLHdtLG8pLGo0KHRoaXMscnBlLGEpLHRoaXMuaW5zdGFsbCgpfX1mdW5jdGlvbiBpcGUoKXtjb25zdHtjb250YWluZXI6bixwYWdlU2l6ZVNlY3Rpb246ZSxwYWdlQ291bnRlclNlY3Rpb246dCxwYWdlTmF2U2VjdGlv''@;'; put 'put ''bjpyfT1DYyh0aGlzLHIzKSxpPSJub25lIiE9PWUuc3R5bGUuZGlzcGxheXx8Im5vbmUiIT09dC5zdHlsZS5kaXNwbGF5fHwibm9uZSIhPT1yLnN0eWxlLmRpc3BsYXk7Q2ModGhpcyxOeCl8fChpP1lyKENjKHRoaXMseEYpLnF1ZXJ5U2VsZWN0b3IoIi5odC13cmFwcGVyIiksImh0UGFnaW5h''@;'; put 'put ''dGlvbiIpOmtvKENjKHRoaXMseEYpLnF1ZXJ5U2VsZWN0b3IoIi5odC13cmFwcGVyIiksImh0UGFnaW5hdGlvbiIpKSxuLnN0eWxlLmRpc3BsYXk9aT8iIjoibm9uZSJ9WWwoU2plLF9oKTtjb25zdCBFamU9bmV3IE1hcChbWyJmaXhlZCIsY2xhc3MgbHF0e2NhbGN1bGF0ZSh7cGFnZVNpemU6''@;'; put 'put ''ZSx0b3RhbEl0ZW1zOnR9KXt0aGlzLnBhZ2VTaXplPU1hdGgubWF4KGUsMSksdGhpcy50b3RhbEl0ZW1zPXQsdGhpcy50b3RhbFBhZ2VzPU1hdGgubWF4KDEsTWF0aC5jZWlsKHRoaXMudG90YWxJdGVtcy90aGlzLnBhZ2VTaXplKSl9Z2V0VG90YWxQYWdlcygpe3JldHVybiB0aGlzLnRvdGFs''@;'; put 'put ''UGFnZXN9Z2V0U3RhdGUoZSl7aWYoKGUtPTEpPDB8fGU+PXRoaXMuZ2V0VG90YWxQYWdlcygpKXJldHVybjtjb25zdCB0PWUqdGhpcy5wYWdlU2l6ZTtyZXR1cm57c3RhcnRJbmRleDp0LGVuZEluZGV4Ok1hdGgubWF4KDAsTWF0aC5taW4odCt0aGlzLnBhZ2VTaXplLTEsdGhpcy50b3RhbEl0''@;'; put 'put ''ZW1zLTEpKSxwYWdlU2l6ZTp0aGlzLnBhZ2VTaXplfX1jb25zdHJ1Y3Rvcigpe3RoaXMucGFnZVNpemU9MSx0aGlzLnRvdGFsSXRlbXM9MCx0aGlzLnRvdGFsUGFnZXM9MH19XSxbImF1dG8iLGNsYXNzIGNxdHtjYWxjdWxhdGUoe2l0ZW1zU2l6ZVByb3ZpZGVyOmUsdmlld3BvcnRTaXplUHJv''@;'; put 'put ''dmlkZXI6dH0pe2NvbnN0IHI9ZSgpLGk9dCgpLG89W107bGV0IGE9MCxsPTAsdT0wO2ZvcihsZXQgZz0wO2c8ci5sZW5ndGg7ZysrKXtjb25zdCBFPXJbZ107dT4wJiZsK0U+PWkmJihvLnB1c2goe3N0YXJ0SW5kZXg6YSxlbmRJbmRleDpnLTEscGFnZVNpemU6dX0pLGE9ZyxsPTAsdT0wKSxs''@;'; put 'put ''Kz1FLHUrPTF9by5wdXNoKHtzdGFydEluZGV4OmEsZW5kSW5kZXg6TWF0aC5tYXgoMCxyLmxlbmd0aC0xKSxwYWdlU2l6ZTp1fSksdGhpcy5wYWdlcz1vfWdldFRvdGFsUGFnZXMoKXtyZXR1cm4gdGhpcy5wYWdlcy5sZW5ndGh9Z2V0U3RhdGUoZSl7aWYoISgoZS09MSk8MHx8ZT49dGhpcy5n''@;'; put 'put ''ZXRUb3RhbFBhZ2VzKCkpKXJldHVybiB0aGlzLnBhZ2VzW2VdfWNvbnN0cnVjdG9yKCl7dGhpcy5wYWdlcz1bXX19XV0pO2Z1bmN0aW9uIE1qZShuKXtyZXR1cm4gRWplLmhhcyhuKXx8SnIoYFVua25vd24gcGFnaW5hdGlvbiBzdHJhdGVneSB0eXBlOiAke259YCksbmV3KEVqZS5nZXQobikp''@;'; put 'put ''fWZ1bmN0aW9uIFRqZShuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24geGplKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIHZvKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIHVxdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4seGplKG4sZSwiZ2V0''@;'; put 'put ''IikpfWZ1bmN0aW9uIE0xKG4sZSx0KXtUamUobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIHNsKG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gZHF0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQg''@;'; put 'put ''dG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obix4amUobixlLCJzZXQiKSx0KSx0fWZ1bmN0aW9uIHdoKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5j''@;'; put 'put ''ZSIpO3JldHVybiB0fWZ1bmN0aW9uIENDKG4sZSl7VGplKG4sZSksZS5hZGQobil9c09lKCJwYWdpbmF0aW9uIixbIm5lc3RlZFJvd3MiLCJtZXJnZUNlbGxzIiwiZml4ZWRSb3dzVG9wIiwiZml4ZWRSb3dzQm90dG9tIl0pO2NvbnN0IEJfPSJwYWdpbmF0aW9uIixmcXQ9YHBsdWdpbjoke0Jf''@;'; put 'put ''fWAsQWplPXljYFRoZSBcYGF1dG9cYCBwYWdlIHNpemUgc2V0dGluZyByZXF1aXJlcyB0aGUgXGBhdXRvUm93U2l6ZVxgXHgyMAogIHBsdWdpbiB0byBiZSBlbmFibGVkLiBTZXQgdGhlIFxgYXV0b1Jvd1NpemU6IHRydWVcYCBpbiB0aGUgY29uZmlndXJhdGlvbiB0byBlbnN1cmUgY29ycmVj''@;'; put 'put ''dCBiZWhhdmlvci5gO3ZhciBQeD1uZXcgV2Vha01hcCxRdT1uZXcgV2Vha01hcCxKMT1uZXcgV2Vha01hcCxDaD1uZXcgV2Vha01hcCxlcD1uZXcgV2Vha01hcCxBRj1uZXcgV2Vha01hcCxrRj1uZXcgV2Vha01hcCxTQz1uZXcgV2Vha01hcCxSRj1uZXcgV2Vha01hcCxvcGU9bmV3IFdlYWtN''@;'; put 'put ''YXAsWSQ9bmV3IFdlYWtTZXQsSUY9bmV3IFdlYWtTZXQsZTk9bmV3IFdlYWtTZXQsYXBlPW5ldyBXZWFrU2V0LFokPW5ldyBXZWFrU2V0LGtqZT1uZXcgV2Vha1NldCxSamU9bmV3IFdlYWtTZXQsRyQ9bmV3IFdlYWtNYXAsc3BlPW5ldyBXZWFrTWFwLGxwZT1uZXcgV2Vha01hcCxjcGU9bmV3''@;'; put 'put ''IFdlYWtNYXAsdXBlPW5ldyBXZWFrTWFwLGRwZT1uZXcgV2Vha01hcCxocGU9bmV3IFdlYWtNYXAsZnBlPW5ldyBXZWFrTWFwLHBwZT1uZXcgV2Vha01hcCwkJD1uZXcgV2Vha01hcDtjbGFzcyBncXQgZXh0ZW5kcyBhbHtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gQl99c3RhdGlj''@;'; put 'put ''IGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gOTAwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntwYWdlU2l6ZToxMCxwYWdlU2l6ZUxpc3Q6WyJhdXRvIiw1LDEwLDIwLDUwLDEwMF0saW5pdGlhbFBhZ2U6MSxzaG93UGFnZVNpemU6ITAsc2hvd0NvdW50ZXI6ITAs''@;'; put 'put ''c2hvd05hdmlnYXRpb246ITAsdWlDb250YWluZXI6bnVsbH19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0JfXX1lbmFibGVQbHVnaW4oKXtpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGU9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtCX107dm9pZCAwIT09''@;'; put 'put ''ZT8uaW5pdGlhbFBhZ2UmJnNsKHRoaXMsUXUsdGhpcy5nZXRTZXR0aW5nKCJpbml0aWFsUGFnZSIpKSx2b2lkIDAhPT1lPy5wYWdlU2l6ZSYmc2wodGhpcyxKMSx0aGlzLmdldFNldHRpbmcoInBhZ2VTaXplIikpLHNsKHRoaXMsU0MsITA9PT10aGlzLmhvdC5ydW5Ib29rcygiaGFzRXh0ZXJu''@;'; put 'put ''YWxEYXRhU291cmNlIikpLHNsKHRoaXMsUkYsbnVsbCksc2wodGhpcyxQeCx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKHRoaXMucGx1Z2luTmFtZSwiaGlkaW5nIiwhMSkpLCJhdXRvIj09PXZvKHRoaXMsSjEpJiYhdGhpcy5ob3QuZ2V0UGx1Z2lu''@;'; put 'put ''KCJhdXRvUm93U2l6ZSIpPy5lbmFibGVkJiZIYShBamUpLHNsKHRoaXMsZXAsTWplKCJhdXRvIj09PXZvKHRoaXMsSjEpPyJhdXRvIjoiZml4ZWQiKSksdm8odGhpcyxDaCl8fChzbCh0aGlzLENoLG5ldyBTamUoe3Jvb3RFbGVtZW50OnRoaXMuaG90LnJvb3RHcmlkRWxlbWVudCx1aUNvbnRh''@;'; put 'put ''aW5lcjp0aGlzLmdldFNldHRpbmcoInVpQ29udGFpbmVyIiksaXNSdGw6dGhpcy5ob3QuaXNSdGwoKSx0aGVtZU5hbWU6dGhpcy5ob3QuZ2V0Q3VycmVudFRoZW1lTmFtZSgpLHBocmFzZVRyYW5zbGF0b3I6KHQscik9PnRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UodCxyKSxhMTF5QW5u''@;'; put 'put ''b3VuY2VyOnQ9PmZ1bmN0aW9uIFhEdChuKXtHcCYmKEdwLnRleHRDb250ZW50PSIiLHNldFRpbWVvdXQoKCk9PntHcCYmKEdwLnRleHRDb250ZW50PW4pfSwxMDApKX0oU3RyaW5nKHQ/PyIiKSl9KSksd2godGhpcyxhcGUsSWplKS5jYWxsKHRoaXMpLHZvKHRoaXMsQ2gpLmFkZExvY2FsSG9v''@;'; put 'put ''aygiZmlyc3RQYWdlQ2xpY2siLCgpPT50aGlzLmZpcnN0UGFnZSgpKS5hZGRMb2NhbEhvb2soInByZXZQYWdlQ2xpY2siLCgpPT50aGlzLnByZXZQYWdlKCkpLmFkZExvY2FsSG9vaygibmV4dFBhZ2VDbGljayIsKCk9PnRoaXMubmV4dFBhZ2UoKSkuYWRkTG9jYWxIb29rKCJsYXN0UGFnZUNs''@;'; put 'put ''aWNrIiwoKT0+dGhpcy5sYXN0UGFnZSgpKS5hZGRMb2NhbEhvb2soInBhZ2VTaXplQ2hhbmdlIix0PT50aGlzLnNldFBhZ2VTaXplKHQpKSkscjIodGhpcy5ob3QpJiYhdGhpcy5nZXRTZXR0aW5nKCJ1aUNvbnRhaW5lciIpJiZ0aGlzLmhvdC5nZXRMYXlvdXRNYW5hZ2VyKCkucmVnaXN0ZXIo''@;'; put 'put ''Ql8sdm8odGhpcyxDaCkuZ2V0Q29udGFpbmVyKCkse3NpZGU6ImJvdHRvbSIsd2VpZ2h0OjEwMH0pLHRoaXMuYWRkSG9vaygiaW5pdCIsdm8odGhpcyxocGUpLC0xKSx0aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdEFsbCIsdm8odGhpcyxHJCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlU2VsZWN0''@;'; put 'put ''Q29sdW1ucyIsdm8odGhpcyxHJCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VFbmQiLHZvKHRoaXMsc3BlKSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQiLHZvKHRoaXMsbHBlKSksdGhpcy5hZGRIb29rKCJiZWZvcmVQYXN0ZSIsdm8odGhpcyxjcGUp''@;'; put 'put ''KSx0aGlzLmFkZEhvb2soImFmdGVyVmlld1JlbmRlciIsdm8odGhpcyx1cGUpKSx0aGlzLmFkZEhvb2soImFmdGVyTGFuZ3VhZ2VDaGFuZ2UiLHZvKHRoaXMsZnBlKSksdGhpcy5hZGRIb29rKCJiZWZvcmVIZWlnaHRDaGFuZ2UiLHZvKHRoaXMsZHBlKSksdGhpcy5hZGRIb29rKCJhZnRlclNl''@;'; put 'put ''dFRoZW1lIix2byh0aGlzLHBwZSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJEYXRhUHJvdmlkZXJGZXRjaCIsdm8odGhpcyxvcGUpLC0xKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIsdm8odGhpcywkJCkpLHdoKHRoaXMsa2plLG1xdCkuY2FsbCh0''@;'; put 'put ''aGlzKSxzdXBlci5lbmFibGVQbHVnaW4oKX1yZXZlcnRQYWdlVG8oZSl7Y29uc3QgdD12byh0aGlzLFF1KTt3aCh0aGlzLFkkLGdwZSkuY2FsbCh0aGlzLGUpLHRoaXMuaG90LnNjcm9sbFZpZXdwb3J0VG8oe3JvdzowfSksd2godGhpcyxlOSxqXykuY2FsbCh0aGlzKSx0aGlzLmhvdC5ydW5I''@;'; put 'put ''b29rcygiYWZ0ZXJQYWdlQ2hhbmdlIix0LGUpfXJldmVydFBhZ2VTaXplVG8oZSl7Y29uc3QgdD12byh0aGlzLEoxKTt3aCh0aGlzLElGLHEkKS5jYWxsKHRoaXMsZSksd2godGhpcyxlOSxqXykuY2FsbCh0aGlzKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJQYWdlU2l6ZUNoYW5nZSIsdCxl''@;'; put 'put ''KX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHdoKHRoaXMsZTksal8pLmNhbGwodGhpcyksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlbW92ZUxvY2FsSG9vaygiY2Fj''@;'; put 'put ''aGVVcGRhdGVkIix2byh0aGlzLCQkKSkudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLHdoKHRoaXMsUmplLHZxdCkuY2FsbCh0aGlzKSxyMih0aGlzLmhvdCkmJnRoaXMuaG90LmdldExheW91dE1hbmFnZXIoKS51bnJlZ2lzdGVyKEJfLCJib3R0b20iKSx2byh0aGlzLENoKT8uZGVz''@;'; put 'put ''dHJveSgpLHNsKHRoaXMsQ2gsbnVsbCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWdldFBhZ2luYXRpb25EYXRhKCl7Y29uc3QgZT12byh0aGlzLGVwKT8uZ2V0VG90YWxQYWdlcygpPz8wO2xldCB0PS0xLHI9LTE7aWYodm8odGhpcyxTQykpe2NvbnN0IG89dGhpcy5ob3QuY291bnRSb3dzKCk7''@;'; put 'put ''bz4wJiYodD0wLHI9by0xKX1lbHNle2NvbnN0IG89dm8odGhpcyxlcCk/LmdldFN0YXRlKHZvKHRoaXMsUXUpKTtpZighbylyZXR1cm57Y3VycmVudFBhZ2U6dm8odGhpcyxRdSksdG90YWxQYWdlczowLHBhZ2VTaXplOjAscGFnZVNpemVMaXN0OltdLGF1dG9QYWdlU2l6ZTohMSxudW1iZXJP''@;'; put 'put ''ZlJlbmRlcmVkUm93czowLGZpcnN0VmlzaWJsZVJvd0luZGV4OnQsbGFzdFZpc2libGVSb3dJbmRleDpyfTtjb25zdHtwYWdlU2l6ZTphLHN0YXJ0SW5kZXg6bH09byx1PXRoaXMuaG90LmNvdW50Um93cygpO2xldCBnPTAsRT1sO2Zvcig7ZzxhJiYhKEU+PXUpOyl0aGlzLmhvdC5yb3dJbmRl''@;'; put 'put ''eE1hcHBlci5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsUm93KEUpKXx8KC0xPT09dCYmKHQ9RSkscj1FLGcrPTEpLEUrPTF9Y29uc3QgaT12byh0aGlzLGVwKT8uZ2V0U3RhdGUodm8odGhpcyxRdSkpO3JldHVybntjdXJyZW50UGFnZTp2byh0aGlzLFF1KSx0b3RhbFBhZ2VzOmUscGFn''@;'; put 'put ''ZVNpemU6aT8ucGFnZVNpemU/P3ZvKHRoaXMsSjEpLHBhZ2VTaXplTGlzdDpbLi4udGhpcy5nZXRTZXR0aW5nKCJwYWdlU2l6ZUxpc3QiKT8/W11dLGF1dG9QYWdlU2l6ZToiYXV0byI9PT12byh0aGlzLEoxKSxudW1iZXJPZlJlbmRlcmVkUm93czp0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5n''@;'; put 'put ''ZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpLGZpcnN0VmlzaWJsZVJvd0luZGV4OnQsbGFzdFZpc2libGVSb3dJbmRleDpyfX1nZXRDdXJyZW50UGFnZSgpe3JldHVybiB2byh0aGlzLFF1KX1nZXRDdXJyZW50UGFnZVNpemUoKXtyZXR1cm4gdm8odGhpcyxKMSl9c2V0UGFnZShlKXtjb25z''@;'; put 'put ''dCB0PXZvKHRoaXMsUXUpOyExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVBhZ2VDaGFuZ2UiLHQsZSkmJih3aCh0aGlzLFkkLGdwZSkuY2FsbCh0aGlzLGUpLHdoKHRoaXMsZTksal8pLmNhbGwodGhpcyksdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh7cm93OjB9KSx0aGlzLmhvdC5y''@;'; put 'put ''dW5Ib29rcygiYWZ0ZXJQYWdlQ2hhbmdlIix0LHZvKHRoaXMsUXUpKSl9cmVzZXRQYWdlKCl7dGhpcy5zZXRQYWdlKHRoaXMuZ2V0U2V0dGluZygiaW5pdGlhbFBhZ2UiKSl9c2V0UGFnZVNpemUoZSl7Y29uc3QgdD12byh0aGlzLEoxKTshMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVQ''@;'; put 'put ''YWdlU2l6ZUNoYW5nZSIsdCxlKSYmKCJhdXRvIj09PWUmJiF0aGlzLmhvdC5nZXRQbHVnaW4oImF1dG9Sb3dTaXplIik/LmVuYWJsZWQmJkhhKEFqZSksd2godGhpcyxJRixxJCkuY2FsbCh0aGlzLGUpLHdoKHRoaXMsZTksal8pLmNhbGwodGhpcyksdGhpcy5ob3QucnVuSG9va3MoImFmdGVy''@;'; put 'put ''UGFnZVNpemVDaGFuZ2UiLHQsdm8odGhpcyxKMSkpKX1yZXNldFBhZ2VTaXplKCl7dGhpcy5zZXRQYWdlU2l6ZSh0aGlzLmdldFNldHRpbmcoInBhZ2VTaXplIikpfXJlc2V0UGFnaW5hdGlvbigpe3RoaXMucmVzZXRQYWdlKCksdGhpcy5yZXNldFBhZ2VTaXplKCksd2godGhpcyxhcGUsSWpl''@;'; put 'put ''KS5jYWxsKHRoaXMpfW5leHRQYWdlKCl7dGhpcy5zZXRQYWdlKHZvKHRoaXMsUXUpKzEpfXByZXZQYWdlKCl7dGhpcy5zZXRQYWdlKHZvKHRoaXMsUXUpLTEpfWZpcnN0UGFnZSgpe3RoaXMuc2V0UGFnZSgxKX1sYXN0UGFnZSgpe3RoaXMuc2V0UGFnZSh2byh0aGlzLGVwKT8uZ2V0VG90YWxQ''@;'; put 'put ''YWdlcygpPz8xKX1oYXNQcmV2aW91c1BhZ2UoKXtyZXR1cm4gdm8odGhpcyxRdSk+MX1oYXNOZXh0UGFnZSgpe3JldHVybiB2byh0aGlzLFF1KTwodm8odGhpcyxlcCk/LmdldFRvdGFsUGFnZXMoKT8/MCl9Z2V0Q3VycmVudFBhZ2VEYXRhKCl7Y29uc3R7Zmlyc3RWaXNpYmxlUm93SW5kZXg6''@;'; put 'put ''ZSxsYXN0VmlzaWJsZVJvd0luZGV4OnR9PXRoaXMuZ2V0UGFnaW5hdGlvbkRhdGEoKTtyZXR1cm4tMT09PWV8fC0xPT09dD9bXTp0aGlzLmhvdC5nZXREYXRhKGUsMCx0LHRoaXMuaG90LmNvdW50Q29scygpLTEpfXNob3dQYWdlU2l6ZVNlY3Rpb24oKXt2byh0aGlzLENoKT8uc2V0UGFnZVNp''@;'; put 'put ''emVTZWN0aW9uVmlzaWJpbGl0eSghMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGFnZVNpemVWaXNpYmlsaXR5Q2hhbmdlIiwhMCl9aGlkZVBhZ2VTaXplU2VjdGlvbigpe3ZvKHRoaXMsQ2gpPy5zZXRQYWdlU2l6ZVNlY3Rpb25WaXNpYmlsaXR5KCExKSx0aGlzLmhvdC5ydW5Ib29rcygi''@;'; put 'put ''YWZ0ZXJQYWdlU2l6ZVZpc2liaWxpdHlDaGFuZ2UiLCExKX1zaG93UGFnZUNvdW50ZXJTZWN0aW9uKCl7dm8odGhpcyxDaCk/LnNldENvdW50ZXJTZWN0aW9uVmlzaWJpbGl0eSghMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGFnZUNvdW50ZXJWaXNpYmlsaXR5Q2hhbmdlIiwhMCl9aGlk''@;'; put 'put ''ZVBhZ2VDb3VudGVyU2VjdGlvbigpe3ZvKHRoaXMsQ2gpPy5zZXRDb3VudGVyU2VjdGlvblZpc2liaWxpdHkoITEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBhZ2VDb3VudGVyVmlzaWJpbGl0eUNoYW5nZSIsITEpfXNob3dQYWdlTmF2aWdhdGlvblNlY3Rpb24oKXt2byh0aGlzLENoKT8u''@;'; put 'put ''c2V0TmF2aWdhdGlvblNlY3Rpb25WaXNpYmlsaXR5KCEwKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJQYWdlTmF2aWdhdGlvblZpc2liaWxpdHlDaGFuZ2UiLCEwKX1oaWRlUGFnZU5hdmlnYXRpb25TZWN0aW9uKCl7dm8odGhpcyxDaCk/LnNldE5hdmlnYXRpb25TZWN0aW9uVmlzaWJpbGl0''@;'; put 'put ''eSghMSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGFnZU5hdmlnYXRpb25WaXNpYmlsaXR5Q2hhbmdlIiwhMSl9ZGVzdHJveSgpe3NsKHRoaXMsUHgsbnVsbCksc2wodGhpcyxlcCxudWxsKSx2byh0aGlzLENoKT8uZGVzdHJveSgpLHNsKHRoaXMsQ2gsbnVsbCksc3VwZXIuZGVzdHJveSgp''@;'; put 'put ''fWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLENDKHRoaXMsWSQpLENDKHRoaXMsSUYpLENDKHRoaXMsZTkpLENDKHRoaXMsYXBlKSxDQyh0aGlzLFokKSxDQyh0aGlzLGtqZSksQ0ModGhpcyxSamUpLE0xKHRoaXMsUHgse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE0xKHRoaXMs''@;'; put 'put ''UXUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE0xKHRoaXMsSjEse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE0xKHRoaXMsQ2gse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE0xKHRoaXMsZXAse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE0xKHRoaXMsQUYse3dyaXRh''@;'; put 'put ''YmxlOiEwLHZhbHVlOnZvaWQgMH0pLE0xKHRoaXMsa0Yse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE0xKHRoaXMsU0Mse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE0xKHRoaXMsUkYse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE0xKHRoaXMsb3BlLHt3cml0YWJsZTohMCx2''@;'; put 'put ''YWx1ZTp2b2lkIDB9KSxNMSh0aGlzLEckLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxNMSh0aGlzLHNwZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksTTEodGhpcyxscGUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE0xKHRoaXMsY3BlLHt3cml0YWJsZTohMCx2YWx1ZTp2''@;'; put 'put ''b2lkIDB9KSxNMSh0aGlzLHVwZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksTTEodGhpcyxkcGUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE0xKHRoaXMsaHBlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxNMSh0aGlzLGZwZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAw''@;'; put 'put ''fSksTTEodGhpcyxwcGUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE0xKHRoaXMsJCQse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHNsKHRoaXMsUHgsbnVsbCksc2wodGhpcyxRdSwxKSxzbCh0aGlzLEoxLDEwKSxzbCh0aGlzLENoLG51bGwpLHNsKHRoaXMsZXAsbnVsbCksc2wo''@;'; put 'put ''dGhpcyxBRiwhMSksc2wodGhpcyxrRiwhMSksc2wodGhpcyxTQywhMSksc2wodGhpcyxSRixudWxsKSxzbCh0aGlzLG9wZSwoe3F1ZXJ5UGFyYW1ldGVyczp0LHRvdGFsUm93czpyfSk9PntpZighdm8odGhpcyxTQykpcmV0dXJuO2NvbnN0IGk9dm8odGhpcyxRdSksbz12byh0aGlzLEoxKSx7''@;'; put 'put ''cGFnZTphLHBhZ2VTaXplOmx9PXQ7Im51bWJlciI9PXR5cGVvZiBhJiZhPj0xJiZ3aCh0aGlzLFkkLGdwZSkuY2FsbCh0aGlzLGEpLCJhdXRvIj09PWw/d2godGhpcyxJRixxJCkuY2FsbCh0aGlzLCJhdXRvIik6Im51bWJlciI9PXR5cGVvZiBsJiZsPj0xJiZ3aCh0aGlzLElGLHEkKS5jYWxs''@;'; put 'put ''KHRoaXMsbCksdm8odGhpcyxTQykmJiJudW1iZXIiPT10eXBlb2YgciYmcj49MCYmc2wodGhpcyxSRixyKSx3aCh0aGlzLGU5LGpfKS5jYWxsKHRoaXMpLGkhPT12byh0aGlzLFF1KSYmdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGFnZUNoYW5nZSIsaSx2byh0aGlzLFF1KSksbyE9PXZvKHRo''@;'; put 'put ''aXMsSjEpJiZ0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJQYWdlU2l6ZUNoYW5nZSIsbyx2byh0aGlzLEoxKSl9KSxzbCh0aGlzLEckLCh0LHIpPT57Y29uc3R7Zmlyc3RWaXNpYmxlUm93SW5kZXg6aSxsYXN0VmlzaWJsZVJvd0luZGV4Om99PXRoaXMuZ2V0UGFnaW5hdGlvbkRhdGEoKTsodm8o''@;'; put 'put ''dGhpcyxRdSk+MXx8dC5yb3c+PTApJiYodC5yb3c9aSksci5yb3c9b30pLHNsKHRoaXMsc3BlLHQ9PntpZih0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpe2NvbnN0e2xhc3RWaXNpYmxlUm93SW5kZXg6cn09dGhpcy5nZXRQYWdpbmF0aW9uRGF0YSgpO3Qu''@;'; put 'put ''cm93PXJ9fSksc2wodGhpcyxscGUsKCk9PntpZighdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5uYXZpZ2FibGVIZWFkZXJzKXJldHVybjtjb25zdCB0PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYodCYmIXQuaXNTaW5nbGUoKSl7Y29uc3R7aGlnaGxpZ2h0OnJ9PXQsaT10Lmdl''@;'; put 'put ''dFRvcFN0YXJ0Q29ybmVyKCkucm93LG89dC5nZXRCb3R0b21FbmRDb3JuZXIoKS5yb3c7bnVsbCE9PXIucm93JiZudWxsIT09aSYmbnVsbCE9PW8mJihyLnJvdz1WcyhyLnJvdyxpLG8pKX19KSxzbCh0aGlzLGNwZSwodCxyKT0+e2NvbnN0e2ZpcnN0VmlzaWJsZVJvd0luZGV4OmksbGFzdFZp''@;'; put 'put ''c2libGVSb3dJbmRleDpvfT10aGlzLmdldFBhZ2luYXRpb25EYXRhKCk7aWYoLTE9PT1pfHwtMT09PW8pcmV0dXJuITE7ci5mb3JFYWNoKCh7c3RhcnRSb3c6YX0pPT57aWYoMD09PXQubGVuZ3RoKXJldHVybjtjb25zdCBsPU1hdGgubWluKHQubGVuZ3RoLShvLWErMSksdC5sZW5ndGgpO3Qu''@;'; put 'put ''c3BsaWNlKDAsbCl9KX0pLHNsKHRoaXMsdXBlLCgpPT57ImF1dG8iIT09dm8odGhpcyxKMSl8fHZvKHRoaXMsa0YpP3NsKHRoaXMsa0YsITEpOihzbCh0aGlzLGtGLCEwKSx3aCh0aGlzLGU5LGpfKS5jYWxsKHRoaXMpKX0pLHNsKHRoaXMsZHBlLHQ9PnRoaXMuZ2V0U2V0dGluZygidWlDb250''@;'; put 'put ''YWluZXIiKXx8ISgibnVtYmVyIj09dHlwZW9mIHR8fCJzdHJpbmciPT10eXBlb2YgdCYmL15cZCskLy50ZXN0KHQpfHwic3RyaW5nIj09dHlwZW9mIHQmJnQuZW5kc1dpdGgoInB4IikpP3Q6YGNhbGMoJHsic3RyaW5nIj09dHlwZW9mIHQmJnQuZW5kc1dpdGgoInB4Iik/dDpgJHt0fXB4YH0g''@;'; put 'put ''LSAke3ZvKHRoaXMsQ2gpPy5nZXRIZWlnaHQoKX1weClgKSxzbCh0aGlzLGhwZSwoKT0+eyJhdXRvIiE9PXZvKHRoaXMsSjEpJiZ3aCh0aGlzLFokLG1wZSkuY2FsbCh0aGlzKX0pLHNsKHRoaXMsZnBlLCgpPT57d2godGhpcyxlOSxqXykuY2FsbCh0aGlzKX0pLHNsKHRoaXMscHBlLHQ9Pnt2''@;'; put 'put ''byh0aGlzLENoKT8udXBkYXRlVGhlbWUodCl9KSxzbCh0aGlzLCQkLCgpPT57IXZvKHRoaXMsQUYpJiZ0aGlzLmhvdD8udmlldyYmd2godGhpcyxaJCxtcGUpLmNhbGwodGhpcyl9KX19ZnVuY3Rpb24gZ3BlKG4pe3NsKHRoaXMsUXUsbil9ZnVuY3Rpb24gcSQobil7c2wodGhpcyxlcCxNamUo''@;'; put 'put ''ImF1dG8iPT09bj8iYXV0byI6ImZpeGVkIikpLHNsKHRoaXMsSjEsbil9ZnVuY3Rpb24gal8oKXt3aCh0aGlzLFokLG1wZSkuY2FsbCh0aGlzKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpfWZ1bmN0aW9uIElqZSgpe3RoaXMuZ2V0U2V0dGlu''@;'; put 'put ''Zygic2hvd1BhZ2VTaXplIik/dGhpcy5zaG93UGFnZVNpemVTZWN0aW9uKCk6dGhpcy5oaWRlUGFnZVNpemVTZWN0aW9uKCksdGhpcy5nZXRTZXR0aW5nKCJzaG93Q291bnRlciIpP3RoaXMuc2hvd1BhZ2VDb3VudGVyU2VjdGlvbigpOnRoaXMuaGlkZVBhZ2VDb3VudGVyU2VjdGlvbigpLHRo''@;'; put 'put ''aXMuZ2V0U2V0dGluZygic2hvd05hdmlnYXRpb24iKT90aGlzLnNob3dQYWdlTmF2aWdhdGlvblNlY3Rpb24oKTp0aGlzLmhpZGVQYWdlTmF2aWdhdGlvblNlY3Rpb24oKX1mdW5jdGlvbiBtcGUoKXtzbCh0aGlzLEFGLCEwKSx2byh0aGlzLFB4KT8uY2xlYXIoKTtjb25zdCBuPXRoaXMuaG90''@;'; put 'put ''LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVJbmRleGVzKCksZT1uLmxlbmd0aCx7c3R5bGVzSGFuZGxlcjp0fT10aGlzLmhvdCxyPXZvKHRoaXMsU0MpLGk9cj92byh0aGlzLFJGKT8/ZTplO3ZvKHRoaXMsZXApPy5jYWxjdWxhdGUoe3BhZ2VTaXplOnZvKHRoaXMsSjEpLHRvdGFsSXRl''@;'; put 'put ''bXM6aSx2aWV3cG9ydFNpemVQcm92aWRlcjooKT0+e2NvbnN0IHU9dGhpcy5ob3QudmlldztpZih1LmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpKXtjb25zdCBFPWdldENvbXB1dGVkU3R5bGUodGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkpLE89TnVtYmVyLnBhcnNlSW50KEUu''@;'; put 'put ''bWFyZ2luVG9wLDEwKStOdW1iZXIucGFyc2VJbnQoRS5tYXJnaW5Cb3R0b20sMTApLFo9dGhpcy5ob3QuaGFzQ29sSGVhZGVycygpP3UuX3d0Lnd0Vmlld3BvcnQuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCk6MCxlZT12byh0aGlzLENoKT8uZ2V0SGVpZ2h0KCk7cmV0dXJuIHUuZ2V0V29ya3Nw''@;'; put 'put ''YWNlSGVpZ2h0KCktKGVlPz8wKS1aLU99Y29uc3QgZz11Lmhhc0hvcml6b250YWxTY3JvbGwoKT9HZCgpOjA7cmV0dXJuIHUuZ2V0Vmlld3BvcnRIZWlnaHQoKS1nfSxpdGVtc1NpemVQcm92aWRlcjooKT0+dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUluZGV4ZXMoKS5t''@;'; put 'put ''YXAoZz0+e2NvbnN0IEU9dGhpcy5ob3QudG9WaXN1YWxSb3coZyk7cmV0dXJuIHRoaXMuaG90LmdldFJvd0hlaWdodChFKT8/dC5nZXREZWZhdWx0Um93SGVpZ2h0KEUpfSl9KTtjb25zdCBvPXZvKHRoaXMsZXApPy5nZXRUb3RhbFBhZ2VzKCk7aWYoc2wodGhpcyxRdSxWcyh2byh0aGlzLFF1''@;'; put 'put ''KSwxLG8/PzEpKSwhciYmbi5sZW5ndGg+MCl7Y29uc3QgdT12byh0aGlzLGVwKT8uZ2V0U3RhdGUodm8odGhpcyxRdSkpO2lmKHUpe2NvbnN0e3N0YXJ0SW5kZXg6ZyxwYWdlU2l6ZTpFfT11O24uc3BsaWNlKGcsRSl9fSFyJiZuLmxlbmd0aD4wP3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgp''@;'; put 'put ''PT57bi5mb3JFYWNoKHU9PnZvKHRoaXMsUHgpPy5zZXRWYWx1ZUF0SW5kZXgodSwhMCkpfSwhMCk6cnx8dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudXBkYXRlQ2FjaGUoITApLHNsKHRoaXMsQUYsITEpO2NvbnN0IGw9ey4uLnRoaXMuZ2V0UGFnaW5hdGlvbkRhdGEoKSx0b3RhbFJlbmRlcmVk''@;'; put 'put ''Um93czpyP2k6ZX07aWYocil7Y29uc3QgdT1pLGc9dm8odGhpcyxlcCk/LmdldFN0YXRlKHZvKHRoaXMsUXUpKT8ucGFnZVNpemU/P3ZvKHRoaXMsSjEpO2wuY291bnRlclN0YXJ0Um93PSh2byh0aGlzLFF1KS0xKSpnKzEsbC5jb3VudGVyRW5kUm93PU1hdGgubWluKHZvKHRoaXMsUXUpKmcs''@;'; put 'put ''dSl9dm8odGhpcyxDaCk/LnVwZGF0ZVN0YXRlKGwpfWZ1bmN0aW9uIG1xdCgpe2NvbnN0IG49dm8odGhpcyxDaCk/LmdldENvbnRhaW5lcigpO24mJnRoaXMuaG90LmdldEZvY3VzU2NvcGVNYW5hZ2VyKCkucmVnaXN0ZXJTY29wZShCXyxuLHtzaG9ydGN1dHNDb250ZXh0TmFtZTpmcXQscnVu''@;'; put 'put ''T25seUlmOigpPT4hIXRoaXMuZ2V0U2V0dGluZygic2hvd1BhZ2VTaXplIil8fCEhdGhpcy5nZXRTZXR0aW5nKCJzaG93TmF2aWdhdGlvbiIpLG9uQWN0aXZhdGU6ZT0+e2NvbnN0IHQ9dm8odGhpcyxDaCk/LmdldEZvY3VzYWJsZUVsZW1lbnRzKCk7dCYmdC5sZW5ndGg+MCYmKCJ0YWJfZnJv''@;'; put 'put ''bV9hYm92ZSI9PT1lP3QuYXQoMCk/LmZvY3VzKCk6InRhYl9mcm9tX2JlbG93Ij09PWUmJnQuYXQoLTEpPy5mb2N1cygpKX19KX1mdW5jdGlvbiB2cXQoKXt0aGlzLmhvdC5nZXRGb2N1c1Njb3BlTWFuYWdlcigpLnVucmVnaXN0ZXJTY29wZShCXyl9ZnVuY3Rpb24gRGplKG4sZSx0KXtpZigh''@;'; put 'put ''ZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIExqZShuLGUpe3JldHVybiBmdW5jdGlvbiBicXQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChu''@;'; put 'put ''KTplLnZhbHVlfShuLERqZShuLGUsImdldCIpKX1jb25zdCB2cGU9InNlYXJjaCIsVHF0PWZ1bmN0aW9uKG4sZSx0LHIsaSl7bi5nZXRDZWxsTWV0YShlLHQpLmlzU2VhcmNoUmVzdWx0PWl9LHhxdD1mdW5jdGlvbihuLGUsdCl7aWYoWHUobil8fG51bGw9PT1ufHwhbi50b0xvY2FsZUxvd2Vy''@;'; put 'put ''Q2FzZXx8MD09PW4ubGVuZ3RofHxYdShlKXx8bnVsbD09PWUpcmV0dXJuITE7Y29uc3Qgcj10LmxvY2FsZTtyZXR1cm4tMSE9PXYxKFN0cmluZyhlKSxyKS5pbmRleE9mKHYxKG4scikpfTt2YXIgSyQ9bmV3IFdlYWtNYXA7Y2xhc3MgQXF0IGV4dGVuZHMgYWx7c3RhdGljIGdldCBQTFVHSU5f''@;'; put 'put ''S0VZKCl7cmV0dXJuIHZwZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxOTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3ZwZV19ZW5hYmxlUGx1Z2luKCl7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBlPXRoaXMuaG90LmdldFNl''@;'; put 'put ''dHRpbmdzKClbdnBlXTt0aGlzLnVwZGF0ZVBsdWdpblNldHRpbmdzKGUpLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVuZGVyZXIiLExqZSh0aGlzLEskKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe2NvbnN0IGU9KHQscixpLG8sYSxsKT0+TGplKHRoaXMsSyQpLmNhbGwo''@;'; put 'put ''dGhpcyx0LHIsaSxvLGEsbCk7dGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlUmVuZGVyZXIiLGUpLHRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLCgpPT57dGhpcy5ob3QucmVtb3ZlSG9vaygiYmVmb3JlUmVuZGVyZXIiLGUpfSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVw''@;'; put 'put ''ZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9cXVlcnkoZSx0PXRoaXMuZ2V0Q2FsbGJhY2soKSxyPXRoaXMuZ2V0UXVlcnlNZXRob2QoKSl7Y29uc3QgaT10aGlzLmhvdC5jb3VudFJvd3MoKSxvPXRoaXMu''@;'; put 'put ''aG90LmNvdW50Q29scygpLGE9W10sbD10aGlzLmhvdDtyZXR1cm4gVmEoMCxpLTEsdT0+e1ZhKDAsby0xLGc9Pntjb25zdCBFPXRoaXMuaG90LmdldERhdGFBdENlbGwodSxnKSxPPXRoaXMuaG90LmdldENlbGxNZXRhKHUsZyksWj1PLnNlYXJjaCxlZT1aPy5jYWxsYmFjaz8/dCxNZT0oWj8u''@;'; put 'put ''cXVlcnlNZXRob2Q/P3IpKGUsRSxPKTtNZSYmYS5wdXNoKHtyb3c6dSxjb2w6ZyxkYXRhOkV9KSxlZSYmZWUobCx1LGcsRSxNZSl9KX0pLGF9Z2V0Q2FsbGJhY2soKXtyZXR1cm4gdGhpcy5jYWxsYmFja31zZXRDYWxsYmFjayhlKXt0aGlzLmNhbGxiYWNrPWV9Z2V0UXVlcnlNZXRob2QoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5xdWVyeU1ldGhvZH1zZXRRdWVyeU1ldGhvZChlKXt0aGlzLnF1ZXJ5TWV0aG9kPWV9Z2V0U2VhcmNoUmVzdWx0Q2xhc3MoKXtyZXR1cm4gdGhpcy5zZWFyY2hSZXN1bHRDbGFzc31zZXRTZWFyY2hSZXN1bHRDbGFzcyhlKXt0aGlzLnNlYXJjaFJlc3VsdENsYXNzPWV9dXBk''@;'; put 'put ''YXRlUGx1Z2luU2V0dGluZ3MoZSl7Q2EoZSkmJihlLnNlYXJjaFJlc3VsdENsYXNzJiZ0aGlzLnNldFNlYXJjaFJlc3VsdENsYXNzKFN0cmluZyhlLnNlYXJjaFJlc3VsdENsYXNzKSksZS5xdWVyeU1ldGhvZCYmdGhpcy5zZXRRdWVyeU1ldGhvZChlLnF1ZXJ5TWV0aG9kKSxlLmNhbGxiYWNr''@;'; put 'put ''JiZ0aGlzLnNldENhbGxiYWNrKGUuY2FsbGJhY2spKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLGZ1bmN0aW9uIENxdChuLGUsdCl7KGZ1bmN0aW9uIHlxdChuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5v''@;'; put 'put ''dCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLGUpLGUuc2V0KG4sdCl9KHRoaXMsSyQse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHRoaXMuY2FsbGJhY2s9VHF0LHRoaXMucXVlcnlNZXRob2Q9eHF0LHRoaXMuc2VhcmNo''@;'; put 'put ''UmVzdWx0Q2xhc3M9Imh0U2VhcmNoUmVzdWx0IixmdW5jdGlvbiBTcXQobixlLHQpe3JldHVybiBmdW5jdGlvbiB3cXQobixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBv''@;'; put 'put ''bmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLERqZShuLGUsInNldCIpLHQpLHR9KHRoaXMsSyQsKHQscixpLG8sYSxsKT0+e2NvbnN0IHU9bC5jbGFzc05hbWV8fFtdO2xldCBnPVtdOyJzdHJpbmciPT10eXBlb2YgdT9nPXUuc3BsaXQoIiAiKTpBcnJheS5pc0FycmF5KHUpJiZn''@;'; put 'put ''LnB1c2goLi4udSksdGhpcy5pc0VuYWJsZWQoKSYmbC5pc1NlYXJjaFJlc3VsdD9nLmluY2x1ZGVzKHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3MpfHxnLnB1c2goYCR7dGhpcy5zZWFyY2hSZXN1bHRDbGFzc31gKTpnLmluY2x1ZGVzKHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3MpJiZnLnNwbGljZShn''@;'; put 'put ''LmluZGV4T2YodGhpcy5zZWFyY2hSZXN1bHRDbGFzcyksMSksbC5jbGFzc05hbWU9Zy5qb2luKCIgIil9KX19Y2xhc3MgT2ple3ByZXBhcmUoe3ZpZXdwb3J0V2lkdGg6ZX0pe3RoaXMudmlld3BvcnRXaWR0aD1lLHRoaXMuYmFzZVdpZHRocy5jbGVhcigpLHRoaXMuc3RyZXRjaGVkV2lkdGhz''@;'; put 'put ''LmNsZWFyKCl9c2V0Q29sdW1uQmFzZVdpZHRoKGUsdCl7dGhpcy5iYXNlV2lkdGhzLnNldChlLHQpfWNhbGN1bGF0ZSgpe31nZXRXaWR0aHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnN0cmV0Y2hlZFdpZHRocyl9Y29uc3RydWN0b3IoZSl7dGhpcy52aWV3cG9ydFdpZHRoPTAsdGhpcy5i''@;'; put 'put ''YXNlV2lkdGhzPW5ldyBNYXAsdGhpcy5zdHJldGNoZWRXaWR0aHM9bmV3IE1hcCx0aGlzLm92ZXJ3cml0ZUNvbHVtbldpZHRoRm49ZX19Y2xhc3Mga3F0IGV4dGVuZHMgT2ple2NhbGN1bGF0ZSgpe2NvbnN0IGU9QXJyYXkuZnJvbSh0aGlzLmJhc2VXaWR0aHMpLnJlZHVjZSgoTyxbLFpdKT0+''@;'; put 'put ''TytaLDApO2lmKHRoaXMudmlld3BvcnRXaWR0aC1lPDApcmV0dXJuIHZvaWQgdGhpcy5zdHJldGNoZWRXaWR0aHMuY2xlYXIoKTtjb25zdCByPXRoaXMudmlld3BvcnRXaWR0aC9lLGk9W10sbz1bXTtsZXQgYT10aGlzLnZpZXdwb3J0V2lkdGgsbD0wO2lmKHRoaXMuYmFzZVdpZHRocy5mb3JF''@;'; put 'put ''YWNoKChPLFopPT57Y29uc3QgZWU9TWF0aC5yb3VuZChPKnIpLHZlPXRoaXMub3ZlcndyaXRlQ29sdW1uV2lkdGhGbihlZSxaKTtlZT09PXZlJiZlZT49NTA/KGkucHVzaChbWix2ZV0pLGwrPXZlKTplZSE9PXZlJiYoaS5wdXNoKFtaLHZlXSksby5wdXNoKFopLGEtPXZlKX0pLGE8PTUwKXJl''@;'; put 'put ''dHVybiB2b2lkIHRoaXMuc3RyZXRjaGVkV2lkdGhzLmNsZWFyKCk7Y29uc3QgdT1hL2w7bGV0IGc9LTEsRT0wO2kuZm9yRWFjaCgoW08sWl0sZWUpPT57bGV0IHZlPVo7by5pbmNsdWRlcyhPKXx8KHZlPU1hdGgucm91bmQoWip1KSksdGhpcy5zdHJldGNoZWRXaWR0aHMuc2V0KE8sdmUpLGc9''@;'; put 'put ''TyxlZTxpLmxlbmd0aC0xJiYoRSs9dmUpfSksdGhpcy5zdHJldGNoZWRXaWR0aHMuc2l6ZT4xJiZ0aGlzLnN0cmV0Y2hlZFdpZHRocy5zZXQoZyxNYXRoLnJvdW5kKHRoaXMudmlld3BvcnRXaWR0aC1FKSl9fWZ1bmN0aW9uIE5qZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBYJChuLGUpe3JldHVybiBmdW5jdGlvbiBJcXQobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLE5qZShuLGUsImdl''@;'; put 'put ''dCIpKX1mdW5jdGlvbiBGamUobixlLHQpeyhmdW5jdGlvbiBScXQobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobixlKSxlLnNldChuLHQpfWZ1bmN0''@;'; put 'put ''aW9uIEh4KG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gRHF0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixO''@;'; put 'put ''amUobixlLCJzZXQiKSx0KSx0fXZhciBWeD1uZXcgV2Vha01hcCxCeD1uZXcgV2Vha01hcDtjbGFzcyBMcXQgZXh0ZW5kcyBPamV7cHJlcGFyZShlKXtzdXBlci5wcmVwYXJlKGUpLEh4KHRoaXMsVngsMCksSHgodGhpcyxCeCwtMSl9c2V0Q29sdW1uQmFzZVdpZHRoKGUsdCl7c3VwZXIuc2V0''@;'; put 'put ''Q29sdW1uQmFzZVdpZHRoKGUsdCksSHgodGhpcyxCeCxlKSxIeCh0aGlzLFZ4LHQpfWNhbGN1bGF0ZSgpe2lmKC0xPT09WCQodGhpcyxCeCkpcmV0dXJuO2NvbnN0IGU9QXJyYXkuZnJvbSh0aGlzLmJhc2VXaWR0aHMpLnJlZHVjZSgocixbLGldKT0+citpLDApLHQ9dGhpcy52aWV3cG9ydFdp''@;'; put 'put ''ZHRoLWUrWCQodGhpcyxWeCk7dDxYJCh0aGlzLFZ4KT90aGlzLnN0cmV0Y2hlZFdpZHRocy5jbGVhcigpOnRoaXMuc3RyZXRjaGVkV2lkdGhzLnNldChYJCh0aGlzLEJ4KSx0KX1jb25zdHJ1Y3RvciguLi5lKXtzdXBlciguLi5lKSxGamUodGhpcyxWeCx7d3JpdGFibGU6ITAsdmFsdWU6dm9p''@;'; put 'put ''ZCAwfSksRmplKHRoaXMsQngse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEh4KHRoaXMsVngsMCksSHgodGhpcyxCeCwtMSl9fWZ1bmN0aW9uIFBqZShuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxl''@;'; put 'put ''bWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gSGplKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIEZkKG4sZSl7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uIE9xdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sSGplKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIFEkKG4sZSx0KXtQamUobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIERGKG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gTnF0KG4sZSx0KXtp''@;'; put 'put ''ZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixIamUobixlLCJzZXQiKSx0KSx0fWZ1bmN0aW9uIEokKG4sZSx0KXtpZigh''@;'; put 'put ''ZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiB0fWZ1bmN0aW9uIF9wZShuLGUpe1BqZShuLGUpLGUuYWRkKG4pfXZhciB4MD1uZXcgV2Vha01hcCxqeD1uZXcgV2Vha01hcCxlcT1uZXcg''@;'; put 'put ''V2Vha01hcCxMRj1uZXcgV2Vha01hcCxWamU9bmV3IFdlYWtTZXQsQmplPW5ldyBXZWFrU2V0LHlwZT1uZXcgV2Vha1NldDtjbGFzcyBQcXR7dXNlU3RyYXRlZ3koZSl7REYodGhpcyxMRiwic3RyaW5nIj09dHlwZW9mIGUmJkZkKHRoaXMsZXEpLmhhcyhlKT9lOiJub25lIil9cmVmcmVzaFN0''@;'; put 'put ''cmV0Y2hpbmcoKXsibm9uZSIhPT1GZCh0aGlzLExGKT9GZCh0aGlzLHgwKS5iYXRjaEV4ZWN1dGlvbigoKT0+e0ZkKHRoaXMsangpLmNsZWFyKCk7Y29uc3QgZT1GZCh0aGlzLGVxKS5nZXQoRmQodGhpcyxMRikpO2lmKCFlKXJldHVybjtsZXQgcj1GZCh0aGlzLHgwKS52aWV3LmdldFZpZXdw''@;'; put 'put ''b3J0V2lkdGgoKTtKJCh0aGlzLFZqZSxIcXQpLmNhbGwodGhpcykmJihyLT1HZChGZCh0aGlzLHgwKS5yb290RG9jdW1lbnQpKSxlLnByZXBhcmUoe3ZpZXdwb3J0V2lkdGg6cn0pO2ZvcihsZXQgaT0wO2k8RmQodGhpcyx4MCkuY291bnRDb2xzKCk7aSsrKUZkKHRoaXMseDApLmNvbHVtbklu''@;'; put 'put ''ZGV4TWFwcGVyLmlzSGlkZGVuKEZkKHRoaXMseDApLnRvUGh5c2ljYWxDb2x1bW4oaSkpfHxlLnNldENvbHVtbkJhc2VXaWR0aChpLEokKHRoaXMsQmplLFZxdCkuY2FsbCh0aGlzLGkpKTtlLmNhbGN1bGF0ZSgpLGUuZ2V0V2lkdGhzKCkuZm9yRWFjaCgoW2ksb10pPT57RmQodGhpcyxqeCku''@;'; put 'put ''c2V0VmFsdWVBdEluZGV4KEZkKHRoaXMseDApLnRvUGh5c2ljYWxDb2x1bW4oaSksbyl9KX0sITApOkZkKHRoaXMsangpLmNsZWFyKCl9Z2V0U3RyZXRjaGVkV2lkdGgoZSl7cmV0dXJuIEZkKHRoaXMsangpLmdldFZhbHVlQXRJbmRleChGZCh0aGlzLHgwKS50b1BoeXNpY2FsQ29sdW1uKGUp''@;'; put 'put ''KX1jb25zdHJ1Y3RvcihlKXtfcGUodGhpcyxWamUpLF9wZSh0aGlzLEJqZSksX3BlKHRoaXMseXBlKSxRJCh0aGlzLHgwLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxRJCh0aGlzLGp4LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxRJCh0aGlzLGVxLHt3cml0YWJsZTohMCx2YWx1''@;'; put 'put ''ZTp2b2lkIDB9KSxRJCh0aGlzLExGLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxERih0aGlzLGVxLG5ldyBNYXAoW1siYWxsIixuZXcga3F0KEokKHRoaXMseXBlLGpqZSkuYmluZCh0aGlzKSldLFsibGFzdCIsbmV3IExxdChKJCh0aGlzLHlwZSxqamUpLmJpbmQodGhpcykpXV0pKSxE''@;'; put 'put ''Rih0aGlzLExGLCJub25lIiksREYodGhpcyx4MCxlKSxERih0aGlzLGp4LEZkKHRoaXMseDApLmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUFuZFJlZ2lzdGVySW5kZXhNYXAoInN0cmV0Y2hDb2x1bW5zIiwicGh5c2ljYWxJbmRleFRvVmFsdWUiKSl9fWZ1bmN0aW9uIEhxdCgpe2NvbnN0e3Zp''@;'; put 'put ''ZXc6bixzdHlsZXNIYW5kbGVyOmV9PUZkKHRoaXMseDApO2lmKG4uaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkpcmV0dXJuITE7Y29uc3QgdD1uLmdldFZpZXdwb3J0SGVpZ2h0KCkscj1GZCh0aGlzLHgwKS5jb3VudFJvd3MoKSxpPWUuZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2xl''@;'; put 'put ''dCBvPTAsYT0hMTtmb3IobGV0IGw9MDtsPHI7bCsrKWlmKCFGZCh0aGlzLHgwKS5yb3dJbmRleE1hcHBlci5pc0hpZGRlbihGZCh0aGlzLHgwKS50b1BoeXNpY2FsUm93KGwpKSYmKG8rPUZkKHRoaXMseDApLmdldFJvd0hlaWdodChsKT8/aSxvPnQpKXthPSEwO2JyZWFrfXJldHVybiBhfWZ1''@;'; put 'put ''bmN0aW9uIFZxdChuKXtyZXR1cm4gRmQodGhpcyx4MCkuZ2V0Q29sV2lkdGgobiwiU3RyZXRjaENvbHVtbnMiKT8/NTB9ZnVuY3Rpb24gamplKG4sZSl7cmV0dXJuIEZkKHRoaXMseDApLnJ1bkhvb2tzKCJiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgiLG4sZSl9ZnVuY3Rpb24gVWplKG4s''@;'; put 'put ''ZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIFU0KG4sZSl7cmV0dXJuIGZ1bmN0aW9uIGpxdChuLGUpe3JldHVybiBlLmdldD9lLmdl''@;'; put 'put ''dC5jYWxsKG4pOmUudmFsdWV9KG4sVWplKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIE9GKG4sZSx0KXsoZnVuY3Rpb24gQnF0KG4sZSl7aWYoZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBv''@;'; put 'put ''YmplY3QiKX0pKG4sZSksZS5zZXQobix0KX1mdW5jdGlvbiBVXyhuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIFVxdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkg''@;'; put 'put ''cHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4sVWplKG4sZSwic2V0IiksdCksdH12YXIgRUM9bmV3IFdlYWtNYXAsTkY9bmV3IFdlYWtNYXAsVXg9bmV3IFdlYWtNYXAsYnBlPW5ldyBXZWFrTWFwLHdwZT1uZXcgV2Vha01hcDtjbGFzcyBZcXQgZXh0ZW5kcyBhbHtzdGF0aWMgZ2V0IFBM''@;'; put 'put ''VUdJTl9LRVkoKXtyZXR1cm4ic3RyZXRjaENvbHVtbnMifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE1NX1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfWlzRW5hYmxlZCgpe3JldHVyblsiYWxsIiwibGFzdCJdLmluY2x1ZGVzKHRoaXMuaG90LmdldFNl''@;'; put 'put ''dHRpbmdzKCkuc3RyZXRjaEg/PyIiKX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fChVNCh0aGlzLEVDKS51c2VTdHJhdGVneSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnN0cmV0Y2hIKSxVNCh0aGlzLFV4KS5vYnNlcnZlKHRoaXMuaG90LnJvb3RFbGVtZW50KSx0aGlzLmFkZEhvb2so''@;'; put 'put ''ImJlZm9yZVJlbmRlciIsVTQodGhpcyx3cGUpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIixVNCh0aGlzLGJwZSksMTApLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXtVNCh0aGlzLEVDKS51c2VTdHJhdGVneSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnN0cmV0''@;'; put 'put ''Y2hIKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLFU0KHRoaXMsVXgpLnVub2JzZXJ2ZSh0aGlzLmhvdC5yb290RWxlbWVudCl9Z2V0Q29sdW1uV2lkdGgoZSl7cmV0dXJuIFU0KHRoaXMsRUMpLmdldFN0cmV0Y2hlZFdpZHRoKGUp''@;'; put 'put ''fWRlc3Ryb3koKXtVNCh0aGlzLFV4KS5kaXNjb25uZWN0KCksVV8odGhpcyxVeCxudWxsKSxVXyh0aGlzLEVDLG51bGwpLHN1cGVyLmRlc3Ryb3koKX1jb25zdHJ1Y3RvciguLi5lKXtzdXBlciguLi5lKSxPRih0aGlzLEVDLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPRih0aGlzLE5G''@;'; put 'put ''LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPRih0aGlzLFV4LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPRih0aGlzLGJwZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT0YodGhpcyx3cGUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFVfKHRoaXMsRUMsbmV3IFBx''@;'; put 'put ''dCh0aGlzLmhvdCkpLFVfKHRoaXMsTkYsbnVsbCksVV8odGhpcyxVeCxuZXcgUmVzaXplT2JzZXJ2ZXIodD0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuaG90Py52aWV3Py5pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpJiZ0LmZvckVhY2goKHtjb250ZW50UmVj''@;'; put 'put ''dDpyfSk9PntudWxsIT09VTQodGhpcyxORikmJlU0KHRoaXMsTkYpIT09ci53aWR0aCYmKHRoaXMuaG90Py52aWV3Py5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdD8ucmVmcmVzaERpbWVuc2lvbnMoKSksVV8odGhpcyxORixyLndpZHRoKX0pfSl9KSksVV8odGhpcyxicGUsKHQscixp''@;'; put 'put ''KT0+e2lmKGk9PT10aGlzLnBsdWdpbk5hbWUpcmV0dXJuO2NvbnN0IG89dGhpcy5nZXRDb2x1bW5XaWR0aChyKTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIG8/bzp0fSksVV8odGhpcyx3cGUsdD0+e3QmJlU0KHRoaXMsRUMpLnJlZnJlc2hTdHJldGNoaW5nKCl9KX19ZnVuY3Rpb24gemplKG4s''@;'; put 'put ''ZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIENwZShuLGUpe3JldHVybiBmdW5jdGlvbiBHcXQobixlKXtyZXR1cm4gZS5nZXQ/ZS5n''@;'; put 'put ''ZXQuY2FsbChuKTplLnZhbHVlfShuLHpqZShuLGUsImdldCIpKX1mdW5jdGlvbiBTcGUobixlLHQpeyhmdW5jdGlvbiBacXQobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFu''@;'; put 'put ''IG9iamVjdCIpfSkobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIEVwZShuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uICRxdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9u''@;'; put 'put ''bHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4semplKG4sZSwic2V0IiksdCksdH12YXIgTXBlPW5ldyBXZWFrTWFwLFRwZT1uZXcgV2Vha01hcCx4cGU9bmV3IFdlYWtNYXA7Y2xhc3MgWHF0IGV4dGVuZHMgYWx7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuInRvdWNoU2Ny''@;'; put 'put ''b2xsIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMDB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm4hMH1pc0VuYWJsZWQoKXtyZXR1cm4gX3NlKCl9ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlclZpZXdSZW5kZXIi''@;'; put 'put ''LENwZSh0aGlzLE1wZSkpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5sb2NrZWRDb2xsZWN0aW9uPSExLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0''@;'; put 'put ''ZXJFdmVudHMoKXt0aGlzLmFkZEhvb2soImJlZm9yZVRvdWNoU2Nyb2xsIixDcGUodGhpcyxUcGUpKSx0aGlzLmFkZEhvb2soImFmdGVyTW9tZW50dW1TY3JvbGwiLENwZSh0aGlzLHhwZSkpfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLFNwZSh0aGlzLE1wZSx7d3JpdGFibGU6ITAs''@;'; put 'put ''dmFsdWU6dm9pZCAwfSksU3BlKHRoaXMsVHBlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxTcGUodGhpcyx4cGUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHRoaXMuc2Nyb2xsYmFycz1bXSx0aGlzLmNsb25lcz1bXSx0aGlzLmxvY2tlZENvbGxlY3Rpb249ITEsdGhpcy5mcmVl''@;'; put 'put ''emVPdmVybGF5cz0hMSxFcGUodGhpcyxNcGUsKCk9PntpZih0aGlzLmxvY2tlZENvbGxlY3Rpb24pcmV0dXJuO2NvbnN0e3RvcE92ZXJsYXk6dCxib3R0b21PdmVybGF5OnIsaW5saW5lU3RhcnRPdmVybGF5OmksdG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5Om8sYm90dG9tSW5saW5lU3Rh''@;'; put 'put ''cnRDb3JuZXJPdmVybGF5OmF9PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXM7dGhpcy5sb2NrZWRDb2xsZWN0aW9uPSEwLHRoaXMuc2Nyb2xsYmFycy5sZW5ndGg9MCx0aGlzLnNjcm9sbGJhcnMucHVzaCh0KSxyLmNsb25lJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChyKSx0aGlzLnNjcm9s''@;'; put 'put ''bGJhcnMucHVzaChpKSxvJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChvKSxhJiZhLmNsb25lJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChhKSx0aGlzLmNsb25lcz1bXSx0Lm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmNsb25lcy5wdXNoKHQuY2xvbmU/Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLHIu''@;'; put 'put ''bmVlZEZ1bGxSZW5kZXImJnRoaXMuY2xvbmVzLnB1c2goci5jbG9uZT8ud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksaS5uZWVkRnVsbFJlbmRlciYmdGhpcy5jbG9uZXMucHVzaChpLmNsb25lPy53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxvJiZ0aGlzLmNsb25lcy5wdXNoKG8uY2xv''@;'; put 'put ''bmU/Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLGEmJmEuY2xvbmUmJnRoaXMuY2xvbmVzLnB1c2goYS5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKX0pLEVwZSh0aGlzLFRwZSwoKT0+e3RoaXMuZnJlZXplT3ZlcmxheXM9ITAsWG4odGhpcy5jbG9uZXMsdD0+e1lyKHQsImhp''@;'; put 'put ''ZGUtdHdlZW4iKX0pfSksRXBlKHRoaXMseHBlLCgpPT57dGhpcy5mcmVlemVPdmVybGF5cz0hMSxYbih0aGlzLmNsb25lcyx0PT57a28odCwiaGlkZS10d2VlbiIpLFlyKHQsInNob3ctdHdlZW4iKX0pLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PntYbih0aGlzLmNsb25lcyx0PT57''@;'; put 'put ''a28odCwic2hvdy10d2VlbiIpfSl9LDQwMCksWG4odGhpcy5zY3JvbGxiYXJzLHQ9Pnt0LnJlZnJlc2goKSx0LnJlc2V0Rml4ZWRQb3NpdGlvbigpfSksdGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5zeW5jU2Nyb2xsV2l0aE1hc3RlcigpfSl9fWZ1bmN0aW9uIFdqZShuLGUsdCl7aWYo''@;'; put 'put ''IWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1jb25zdCBGRj0idHJpbVJvd3MiO3ZhciBBcGU9bmV3IFdlYWtNYXA7Y2xhc3Mgb0t0IGV4dGVuZHMgYWx7c3RhdGlj''@;'; put 'put ''IGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEZGfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMzMH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybltGRl19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0ZGXX1lbmFibGVQbHVnaW4o''@;'; put 'put ''KXt0aGlzLmVuYWJsZWR8fCh0aGlzLnRyaW1tZWRSb3dzTWFwPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJ0cmltUm93cyIsbmV3IGFUKSx0aGlzLnRyaW1tZWRSb3dzTWFwLmFkZExvY2FsSG9vaygiaW5pdCIsZnVuY3Rpb24gdEt0KG4sZSl7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''IEpxdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sV2plKG4sZSwiZ2V0IikpfSh0aGlzLEFwZSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXtjb25zdCBlPXRoaXMuaG90LmdldFNldHRpbmdzKClbRkZdO0FycmF5LmlzQXJyYXkoZSkm''@;'; put 'put ''JnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhpcy50cmltbWVkUm93c01hcC5jbGVhcigpLFhuKGUsdD0+e3RoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KHQsITApfSl9LCEwKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93''@;'; put 'put ''SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCgidHJpbVJvd3MiKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Z2V0VHJpbW1lZFJvd3MoKXtyZXR1cm4gdGhpcy50cmltbWVkUm93c01hcC5nZXRUcmltbWVkSW5kZXhlcygpfXRyaW1Sb3dzKGUpe2NvbnN0IHQ9dGhpcy5nZXRUcmltbWVkUm93cygp''@;'; put 'put ''LHI9dGhpcy5pc1ZhbGlkQ29uZmlnKGUpO2xldCBpPXQ7ciYmKGk9QXJyYXkuZnJvbShuZXcgU2V0KHQuY29uY2F0KGUpKSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVRyaW1Sb3ciLHQsaSxyKSYmKHImJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57WG4oZSxhPT57dGhp''@;'; put 'put ''cy50cmltbWVkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoYSwhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclRyaW1Sb3ciLHQsaSxyLHImJmkubGVuZ3RoPnQubGVuZ3RoKSl9dHJpbVJvdyguLi5lKXt0aGlzLnRyaW1Sb3dzKGUpfXVudHJpbVJvd3MoZSl7Y29uc3QgdD10aGlz''@;'; put 'put ''LmdldFRyaW1tZWRSb3dzKCkscj10aGlzLmlzVmFsaWRDb25maWcoZSk7bGV0IGk9dDtjb25zdCBvPXRoaXMudHJpbW1lZFJvd3NNYXAuZ2V0VmFsdWVzKCkuc2xpY2UoKSxhPWUubGVuZ3RoPjA7ciYmYSYmKFhuKGUsdT0+e29bdV09ITF9KSxpPW0xKG8sKHUsZyxFKT0+KGcmJnUucHVzaChF''@;'; put 'put ''KSx1KSxbXSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVudHJpbVJvdyIsdCxpLHImJmEpJiYociYmYSYmdGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZXMobyksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW50cmltUm93Iix0LGksciYmYSxyJiZpLmxlbmd0aDx0Lmxlbmd0''@;'; put 'put ''aCkpfXVudHJpbVJvdyguLi5lKXt0aGlzLnVudHJpbVJvd3MoZSl9aXNUcmltbWVkKGUpe3JldHVybiB0aGlzLnRyaW1tZWRSb3dzTWFwLmdldFZhbHVlQXRJbmRleChlKXx8ITF9dW50cmltQWxsKCl7dGhpcy51bnRyaW1Sb3dzKHRoaXMuZ2V0VHJpbW1lZFJvd3MoKSl9aXNWYWxpZENvbmZp''@;'; put 'put ''ZyhlKXtjb25zdCB0PXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO3JldHVybiBlLmV2ZXJ5KHI9Pk51bWJlci5pc0ludGVnZXIocikmJnI+PTAmJnI8dCl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX1jb25zdHJ1Y3RvciguLi5lKXtzdXBlciguLi5lKSxmdW5jdGlvbiBuS3QobixlLHQp''@;'; put 'put ''eyhmdW5jdGlvbiBRcXQobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobixlKSxlLnNldChuLHQpfSh0aGlzLEFwZSx7d3JpdGFibGU6ITAsdmFsdWU6''@;'; put 'put ''dm9pZCAwfSksdGhpcy50cmltbWVkUm93c01hcD1udWxsLGZ1bmN0aW9uIHJLdChuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIGVLdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCBy''@;'; put 'put ''ZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4sV2plKG4sZSwic2V0IiksdCksdH0odGhpcyxBcGUsKCk9Pntjb25zdCB0PXRoaXMuaG90LmdldFNldHRpbmdzKClbRkZdO0FycmF5LmlzQXJyYXkodCkmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57WG4odCxyPT57''@;'; put 'put ''dGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgociwhMCl9KX0sITApfSl9fWNsYXNzIENte3VuZG8oLi4uZSl7SnIoIk5vdCBpbXBsZW1lbnRlZCIpfXJlZG8oLi4uZSl7SnIoIk5vdCBpbXBsZW1lbnRlZCIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuYWN0aW9uVHlwZT0iIix0aGlz''@;'; put 'put ''LmFjdGlvblR5cGU9ZX19Y2xhc3Mga3BlIGV4dGVuZHMgQ217c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMoZSx0KXtlLmFkZEhvb2soImJlZm9yZUNlbGxBbGlnbm1lbnQiLChyLGksbyxhKT0+e3QuZG9uZSgoKT0+bmV3IGtwZSh7c3RhdGVCZWZvcmU6cixyYW5nZTppLHR5cGU6byxh''@;'; put 'put ''bGlnbm1lbnQ6YX0pKX0pfXVuZG8oZSx0KXtYbih0aGlzLnJhbmdlLHI9PntyLmZvckFsbCgoaSxvKT0+KGk+PTAmJm8+PTAmJmUuc2V0Q2VsbE1ldGEoaSxvLCJjbGFzc05hbWUiLHRoaXMuc3RhdGVCZWZvcmVbaV1bb118fCIgaHRMZWZ0IiksITApKX0pLGUuYWRkSG9va09uY2UoImFmdGVy''@;'; put 'put ''Vmlld1JlbmRlciIsdCksZS5yZW5kZXIoKX1yZWRvKGUsdCl7X18odGhpcy5yYW5nZSx0aGlzLnR5cGUsdGhpcy5hbGlnbm1lbnQsKHIsaSk9PmUuZ2V0Q2VsbE1ldGEocixpKSwocixpLG8sYSk9PmUuc2V0Q2VsbE1ldGEocixpLG8sYSkpLGUuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRl''@;'; put 'put ''ciIsdCksZS5yZW5kZXIoKX1jb25zdHJ1Y3Rvcih7c3RhdGVCZWZvcmU6ZSxyYW5nZTp0LHR5cGU6cixhbGlnbm1lbnQ6aX0pe3N1cGVyKCJjZWxsX2FsaWdubWVudCIpLHRoaXMuc3RhdGVCZWZvcmU9ZSx0aGlzLnJhbmdlPXQsdGhpcy50eXBlPXIsdGhpcy5hbGlnbm1lbnQ9aX19Y2xhc3Mg''@;'; put 'put ''UnBlIGV4dGVuZHMgQ217c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMoZSx0KXtlLmFkZEhvb2soImJlZm9yZUNvbHVtbk1vdmUiLChyLGkpPT57ITEhPT1yJiZ0LmRvbmUoKCk9Pm5ldyBScGUoe2NvbHVtbnM6cixmaW5hbEluZGV4Oml9KSl9KX11bmRvKGUsdCl7Y29uc3Qgcj1lLmdl''@;'; put 'put ''dFBsdWdpbigibWFudWFsQ29sdW1uTW92ZSIpO2UuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsdCksTTJlKHRoaXMuY29sdW1ucyx0aGlzLmZpbmFsQ29sdW1uSW5kZXgsZS5jb2x1bW5JbmRleE1hcHBlci5nZXROdW1iZXJPZkluZGV4ZXMoKSkucmV2ZXJzZSgpLmZvckVhY2goKHtm''@;'; put 'put ''cm9tOm8sdG86YX0pPT57bzxhJiYoYS09MSksci5tb3ZlQ29sdW1uKGEsbyl9KSxlLnJlbmRlcigpLGUuZGVzZWxlY3RDZWxsKCksZS5zZWxlY3RDb2x1bW5zKHRoaXMuY29sdW1uc1swXSx0aGlzLmNvbHVtbnNbMF0rdGhpcy5jb2x1bW5zLmxlbmd0aC0xKX1yZWRvKGUsdCl7Y29uc3Qgcj1l''@;'; put 'put ''LmdldFBsdWdpbigibWFudWFsQ29sdW1uTW92ZSIpO2UuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsdCksci5tb3ZlQ29sdW1ucyh0aGlzLmNvbHVtbnMuc2xpY2UoKSx0aGlzLmZpbmFsQ29sdW1uSW5kZXgpLGUucmVuZGVyKCksZS5kZXNlbGVjdENlbGwoKSxlLnNlbGVjdENvbHVt''@;'; put 'put ''bnModGhpcy5maW5hbENvbHVtbkluZGV4LHRoaXMuZmluYWxDb2x1bW5JbmRleCt0aGlzLmNvbHVtbnMubGVuZ3RoLTEpfWNvbnN0cnVjdG9yKHtjb2x1bW5zOmUsZmluYWxJbmRleDp0fSl7c3VwZXIoImNvbF9tb3ZlIiksdGhpcy5jb2x1bW5zPWUuc2xpY2UoKSx0aGlzLmZpbmFsQ29sdW1u''@;'; put 'put ''SW5kZXg9dH19Y2xhc3MgSXBlIGV4dGVuZHMgQ217c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMoZSx0KXtlLmFkZEhvb2soImJlZm9yZUNvbHVtblNvcnQiLChyLGksbyk9PntvJiZ0LmRvbmUoKCk9Pm5ldyBJcGUoe2N1cnJlbnRTb3J0U3RhdGU6cixuZXdTb3J0U3RhdGU6aX0pKX0p''@;'; put 'put ''fXVuZG8oZSx0KXtjb25zdCByPWUuZ2V0UGx1Z2luKCJjb2x1bW5Tb3J0aW5nIiksaT1lLmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIiksbz1pLmlzRW5hYmxlZCgpP2k6cjt0aGlzLnByZXZpb3VzU29ydFN0YXRlLmxlbmd0aD9vLnNvcnQodGhpcy5wcmV2aW91c1NvcnRTdGF0ZSk6''@;'; put 'put ''by5jbGVhclNvcnQoKSx0KCl9cmVkbyhlLHQpe2NvbnN0IHI9ZS5nZXRQbHVnaW4oImNvbHVtblNvcnRpbmciKSxpPWUuZ2V0UGx1Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKTsoaS5pc0VuYWJsZWQoKT9pOnIpLnNvcnQodGhpcy5uZXh0U29ydFN0YXRlKSx0KCl9Y29uc3RydWN0b3Ioe2N1''@;'; put 'put ''cnJlbnRTb3J0U3RhdGU6ZSxuZXdTb3J0U3RhdGU6dH0pe3N1cGVyKCJjb2xfc29ydCIpLHRoaXMucHJldmlvdXNTb3J0U3RhdGU9ZSx0aGlzLm5leHRTb3J0U3RhdGU9dH19Y2xhc3MgRHBlIGV4dGVuZHMgQ217c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMoZSx0KXtlLmFkZEhvb2so''@;'; put 'put ''ImFmdGVyQ3JlYXRlQ29sIiwocixpLG8pPT57dC5kb25lKCgpPT5uZXcgRHBlKHtpbmRleDpyLGFtb3VudDppfSksbyl9KX11bmRvKGUsdCl7ZS5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVDb2wiLHQpLGUuYWx0ZXIoInJlbW92ZV9jb2wiLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9S''@;'; put 'put ''ZWRvLnVuZG8iKX1yZWRvKGUsdCl7ZS5hZGRIb29rT25jZSgiYWZ0ZXJDcmVhdGVDb2wiLHQpLGUuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnJlZG8iKX1jb25zdHJ1Y3Rvcih7aW5kZXg6ZSxhbW91bnQ6dH0pe3N1cGVyKCJpbnNl''@;'; put 'put ''cnRfY29sIiksdGhpcy5pbmRleD1lLHRoaXMuYW1vdW50PXR9fWNsYXNzIExwZSBleHRlbmRzIENte3N0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGUsdCl7ZS5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsKHIsaSxvKT0+e3QuZG9uZSgoKT0+bmV3IExwZSh7aW5kZXg6cixhbW91bnQ6''@;'; put 'put ''aX0pLG8pfSl9dW5kbyhlLHQpe2NvbnN0IHI9ZS5jb3VudFJvd3MoKSxpPWUuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZVJvd3M7dGhpcy5pbmRleD49ciYmdGhpcy5pbmRleC0oaT8/MCk8ciYmKHRoaXMuaW5kZXgtPWk/PzApLGUuYWRkSG9va09uY2UoImFmdGVyUmVtb3ZlUm93Iix0KSxlLmFs''@;'; put 'put ''dGVyKCJyZW1vdmVfcm93Iix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby51bmRvIil9cmVkbyhlLHQpe2UuYWRkSG9va09uY2UoImFmdGVyQ3JlYXRlUm93Iix0KSxlLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby5yZWRv''@;'; put 'put ''Iil9Y29uc3RydWN0b3Ioe2luZGV4OmUsYW1vdW50OnR9KXtzdXBlcigiaW5zZXJ0X3JvdyIpLHRoaXMuaW5kZXg9ZSx0aGlzLmFtb3VudD10fX1jbGFzcyBPcGUgZXh0ZW5kcyBDbXtzdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhlLHQpe2NvbnN0IHI9dDtlLmFkZEhvb2soImJlZm9y''@;'; put 'put ''ZUNoYW5nZSIsZnVuY3Rpb24oaSxvKXtpZighaXx8IWkubGVuZ3RoKXJldHVybjtjb25zdCBsPWkuZmlsdGVyKE89Pm51bGwhPU8mJkFycmF5LmlzQXJyYXkoTykpO2lmKDA9PT1sLmxlbmd0aClyZXR1cm47bC5maW5kKE89Pntjb25zdFssLFosZWVdPU87cmV0dXJuIFohPT1lZX0pO2NvbnN0''@;'; put 'put ''IGc9bC5sZW5ndGg7ci5kb25lKCgpPT57Y29uc3QgTz1sLm1hcChlZT0+Wy4uLmVlXSk7Ty5mb3JFYWNoKGVlPT57ZWVbMV09ZS5wcm9wVG9Db2woZWVbMV0pfSk7Y29uc3QgWj1nPjE/dGhpcy5nZXRTZWxlY3RlZCgpOltbT1swXVswXSxPWzBdWzFdXV07cmV0dXJuIG5ldyBPcGUoe2NoYW5n''@;'; put 'put ''ZXM6TyxzZWxlY3RlZDpaLGNvdW50Q29sczplLmNvdW50Q29scygpLGNvdW50Um93czplLmNvdW50Um93cygpfSl9LG8pfSwxZTMpfXVuZG8oZSx0KXtjb25zdCByPUFkKHRoaXMuY2hhbmdlcyk7Zm9yKGxldCBpPTAsbz1yLmxlbmd0aDtpPG87aSsrKXJbaV0uc3BsaWNlKDMsMSk7ZS5hZGRI''@;'; put 'put ''b29rT25jZSgiYWZ0ZXJDaGFuZ2UiLCgpPT57Y29uc3QgaT1lLmNvdW50Um93cygpLXRoaXMuY291bnRSb3dzO2k+MCYmZS5hbHRlcigicmVtb3ZlX3JvdyIsdm9pZCAwLGksIlVuZG9SZWRvLnVuZG8iKTtjb25zdCBvPWUuY291bnRDb2xzKCktdGhpcy5jb3VudENvbHM7bz4wJiZlLmlzQ29s''@;'; put 'put ''dW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpJiZlLmFsdGVyKCJyZW1vdmVfY29sIix2b2lkIDAsbywiVW5kb1JlZG8udW5kbyIpLGUuc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgpLGUuc2VsZWN0Q2VsbHModGhpcy5zZWxlY3RlZCwhMSwhMSksdCgpfSksZS5zZXREYXRhQXRDZWxsKHIsbnVsbCxudWxs''@;'; put 'put ''LCJVbmRvUmVkby51bmRvIil9cmVkbyhlLHQpe2NvbnN0IHI9QWQodGhpcy5jaGFuZ2VzKTtmb3IobGV0IGk9MCxvPXIubGVuZ3RoO2k8bztpKyspcltpXS5zcGxpY2UoMiwxKTtlLmFkZEhvb2tPbmNlKCJhZnRlckNoYW5nZSIsKCk9PntlLnNlbGVjdENlbGxzKHRoaXMuc2VsZWN0ZWQsITEs''@;'; put 'put ''ITEpLHQoKX0pLGUuc2V0RGF0YUF0Q2VsbChyLG51bGwsbnVsbCwiVW5kb1JlZG8ucmVkbyIpfWNvbnN0cnVjdG9yKHtjaGFuZ2VzOmUsc2VsZWN0ZWQ6dCxjb3VudENvbHM6cixjb3VudFJvd3M6aX0pe3N1cGVyKCJjaGFuZ2UiKSx0aGlzLmNoYW5nZXM9ZSx0aGlzLnNlbGVjdGVkPXQsdGhp''@;'; put 'put ''cy5jb3VudENvbHM9cix0aGlzLmNvdW50Um93cz1pfX1jbGFzcyBOcGUgZXh0ZW5kcyBDbXtzdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhlLHQpe2UuYWRkSG9vaygiYmVmb3JlRmlsdGVyIiwocixpKT0+e3QuZG9uZSgoKT0+bmV3IE5wZSh7Y29uZGl0aW9uc1N0YWNrOnIscHJldmlv''@;'; put 'put ''dXNDb25kaXRpb25zU3RhY2s6aX0pKX0pfXVuZG8oZSx0KXtjb25zdCByPWUuZ2V0UGx1Z2luKCJmaWx0ZXJzIik7ZS5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIix0KSxyLmltcG9ydENvbmRpdGlvbnModGhpcy5wcmV2aW91c0NvbmRpdGlvbnNTdGFjayksci5maWx0ZXIoKX1yZWRv''@;'; put 'put ''KGUsdCl7Y29uc3Qgcj1lLmdldFBsdWdpbigiZmlsdGVycyIpO2UuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsdCksci5pbXBvcnRDb25kaXRpb25zKHRoaXMuY29uZGl0aW9uc1N0YWNrKSxyLmZpbHRlcigpfWNvbnN0cnVjdG9yKHtjb25kaXRpb25zU3RhY2s6ZSxwcmV2aW91c0Nv''@;'; put 'put ''bmRpdGlvbnNTdGFjazp0fSl7c3VwZXIoImZpbHRlciIpLHRoaXMuY29uZGl0aW9uc1N0YWNrPWUsdGhpcy5wcmV2aW91c0NvbmRpdGlvbnNTdGFjaz10fX1jbGFzcyBGcGUgZXh0ZW5kcyBDbXtzdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhlLHQpe2UuYWRkSG9vaygiYmVmb3JlTWVy''@;'; put 'put ''Z2VDZWxscyIsKHIsaSk9PntpZihpKXJldHVybjtjb25zdCBvPXIsYT1vLmdldFRvcFN0YXJ0Q29ybmVyKCksbD1vLmdldEJvdHRvbUVuZENvcm5lcigpLHU9ZS5nZXREYXRhKGEucm93Pz92b2lkIDAsYS5jb2w/P3ZvaWQgMCxsLnJvdz8/dm9pZCAwLGwuY29sPz92b2lkIDApO3QuZG9uZSgo''@;'; put 'put ''KT0+bmV3IEZwZSh7ZGF0YTp1LGNlbGxSYW5nZTpvfSkpfSl9dW5kbyhlLHQpe2NvbnN0IHI9ZS5nZXRQbHVnaW4oIm1lcmdlQ2VsbHMiKTtlLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLHQpLHIudW5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlLCEwKTtjb25zdCBpPXRoaXMuY2Vs''@;'; put 'put ''bFJhbmdlLmdldFRvcFN0YXJ0Q29ybmVyKCk7ZS5wb3B1bGF0ZUZyb21BcnJheShpLnJvdz8/MCxpLmNvbD8/MCx0aGlzLmRhdGEsdm9pZCAwLHZvaWQgMCwiTWVyZ2VDZWxscyIpfXJlZG8oZSx0KXtjb25zdCByPWUuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7ZS5hZGRIb29rT25jZSgiYWZ0''@;'; put 'put ''ZXJWaWV3UmVuZGVyIix0KSxyLm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UpfWNvbnN0cnVjdG9yKHtkYXRhOmUsY2VsbFJhbmdlOnR9KXtzdXBlcigibWVyZ2VfY2VsbHMiKSx0aGlzLmNlbGxSYW5nZT10LHRoaXMuZGF0YT1lfX1mdW5jdGlvbiBZamUobixlLHQscixpKXtjb25zdCBvPVtd''@;'; put 'put ''O3JldHVybiBWYShyLGksYT0+e1ZhKGUsdCxsPT57Y29uc3QgdT1uLmdldENlbGxNZXRhKGwsYSk7by5wdXNoKFt1LnZpc3VhbFJvdyx1LnZpc3VhbENvbCx1XSl9KX0pLG99Y2xhc3MgUHBlIGV4dGVuZHMgQ217c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMoZSx0KXtlLmFkZEhvb2so''@;'; put 'put ''ImJlZm9yZVJlbW92ZUNvbCIsKHIsaSxvLGEpPT57dC5kb25lKCgpPT57Y29uc3QgdT1lLmdldFNvdXJjZURhdGFBcnJheSgpLGc9KGUuY291bnRDb2xzKCkrciklZS5jb3VudENvbHMoKSxFPWcraS0xLE89W10sWj1bXSxlZT1bXTtpZihWYSh1Lmxlbmd0aC0xLE1lPT57Ty5wdXNoKCgoTWUs''@;'; put 'put ''SGUsV2UpPT57Y29uc3QgYXQ9W107cmV0dXJuIFZhKEhlLFdlLEN0PT57YXQucHVzaChNZVtlLnRvUGh5c2ljYWxDb2x1bW4oQ3QpXSl9KSxhdH0pKHVbTWVdLGcsRSkpfSksVmEoaS0xLE1lPT57ZWUucHVzaChlLnRvUGh5c2ljYWxDb2x1bW4oZytNZSkpfSksQXJyYXkuaXNBcnJheShlLmdl''@;'; put 'put ''dFNldHRpbmdzKCkuY29sSGVhZGVycykpe2NvbnN0IE1lPWUuZ2V0U2V0dGluZ3MoKS5jb2xIZWFkZXJzO1ZhKGktMSxIZT0+e1oucHVzaChNZVtlLnRvUGh5c2ljYWxDb2x1bW4oZytIZSldfHxudWxsKX0pfXJldHVybiBuZXcgUHBlKHtpbmRleDpnLGluZGV4ZXM6ZWUsZGF0YTpPLGFtb3Vu''@;'; put 'put ''dDppLGhlYWRlcnM6Wixjb2x1bW5Qb3NpdGlvbnM6ZS5jb2x1bW5JbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxyb3dQb3NpdGlvbnM6ZS5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxmaXhlZENvbHVtbnNTdGFydDplLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1''@;'; put 'put ''bW5zU3RhcnQ/PzAscmVtb3ZlZENlbGxNZXRhczpZamUoZSwwLGUuY291bnRSb3dzKCksZyxFKX0pfSxhKX0pfXVuZG8oZSx0KXtlLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ9dGhpcy5maXhlZENvbHVtbnNTdGFydDtjb25zdCBpPXRoaXMuaW5kZXhlcy5zbGljZSgwKS5zb3J0''@;'; put 'put ''KChFLE8pPT5FLU8pLG89KEUsTyxaKT0+Wlt0aGlzLmluZGV4ZXMuaW5kZXhPZihpW09dKV0sYT10aGlzLmRhdGEubGVuZ3RoLGw9W107Zm9yKGxldCBFPTA7RTxhO0UrKylsLnB1c2goX2ModGhpcy5kYXRhW0VdLG8pKTtjb25zdCB1PV9jKHRoaXMuaGVhZGVycyxvKSxnPVtdO2UuY29sdW1u''@;'; put 'put ''SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuY29sdW1uUG9zaXRpb25zKSxlLmFsdGVyKCJpbnNlcnRfY29sX3N0YXJ0IixlLnRvVmlzdWFsQ29sdW1uKHRoaXMuaW5kZXhlc1swXSksdGhpcy5pbmRleGVzLmxlbmd0aCwiVW5kb1JlZG8udW5kbyIpLGUuYmF0Y2hFeGVjdXRp''@;'; put 'put ''b24oKCk9PntlLnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLnJvd1Bvc2l0aW9ucyksZS5jb2x1bW5JbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5jb2x1bW5Qb3NpdGlvbnMpfSwhMCksWG4oZS5nZXRTb3VyY2VEYXRhQXJyYXkoKSwoRSxPKT0+e2Nv''@;'; put 'put ''bnN0IFo9RTtYbihpLChlZSx2ZSk9PntaW2VlXT1sW09dW3ZlXSxnLnB1c2goW08sZWUsWltlZV1dKX0pfSksdHlwZW9mIHRoaXMuaGVhZGVyczwidSImJlhuKHUsKEUsTyk9PntlLmdldFNldHRpbmdzKCkuY29sSGVhZGVyc1tpW09dXT1FfSksdGhpcy5yZW1vdmVkQ2VsbE1ldGFzLmZvckVh''@;'; put 'put ''Y2goRT0+e2NvbnN0W08sWixlZV09RTtlLnNldENlbGxNZXRhT2JqZWN0KE8sWixlZSl9KSxlLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLHQpLGUuc2V0U291cmNlRGF0YUF0Q2VsbChnLHZvaWQgMCx2b2lkIDAsIlVuZG9SZWRvLnVuZG8iKX1yZWRvKGUsdCl7ZS5hZGRIb29rT25j''@;'; put 'put ''ZSgiYWZ0ZXJSZW1vdmVDb2wiLHQpLGUuYWx0ZXIoInJlbW92ZV9jb2wiLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnJlZG8iKX1jb25zdHJ1Y3Rvcih7aW5kZXg6ZSxpbmRleGVzOnQsZGF0YTpyLGFtb3VudDppLGhlYWRlcnM6byxjb2x1bW5Qb3NpdGlvbnM6YSxyb3dQb3Np''@;'; put 'put ''dGlvbnM6bCxmaXhlZENvbHVtbnNTdGFydDp1LHJlbW92ZWRDZWxsTWV0YXM6Z30pe3N1cGVyKCJyZW1vdmVfY29sIiksdGhpcy5pbmRleD1lLHRoaXMuaW5kZXhlcz10LHRoaXMuZGF0YT1yLHRoaXMuYW1vdW50PWksdGhpcy5oZWFkZXJzPW8sdGhpcy5jb2x1bW5Qb3NpdGlvbnM9YS5zbGlj''@;'; put 'put ''ZSgwKSx0aGlzLnJvd1Bvc2l0aW9ucz1sLnNsaWNlKDApLHRoaXMuZml4ZWRDb2x1bW5zU3RhcnQ9dSx0aGlzLnJlbW92ZWRDZWxsTWV0YXM9Z319Y2xhc3MgSHBlIGV4dGVuZHMgQ217c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMoZSx0KXtlLmFkZEhvb2soImJlZm9yZVJlbW92ZVJv''@;'; put 'put ''dyIsKHIsaSxvLGEpPT57dC5kb25lKCgpPT57Y29uc3QgdT1lLnRvUGh5c2ljYWxSb3cociksZz11K2ktMSxFPVtdO2ZvcihsZXQgTz0wO088aTtPKyspe2NvbnN0IFo9QWQoZS5nZXRTb3VyY2VEYXRhQXRSb3codStPKSk7WiYmIm9iamVjdCI9PXR5cGVvZiBaJiYhQXJyYXkuaXNBcnJheSha''@;'; put 'put ''KSYmZGVsZXRlIFouX19jaGlsZHJlbixFLnB1c2goWil9cmV0dXJuIG5ldyBIcGUoe2luZGV4OnUsZGF0YTpFLGZpeGVkUm93c0JvdHRvbTplLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tPz8wLGZpeGVkUm93c1RvcDplLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wPz8wLHJvd0lu''@;'; put 'put ''ZGV4ZXNTZXF1ZW5jZTplLnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLHJlbW92ZWRDZWxsTWV0YXM6WWplKGUsdSxnLDAsZS5jb3VudENvbHMoKS0xKSxyZW1vdmVkTWVyZ2VkQ2VsbHM6YUt0KGUscixpKX0pfSxhKX0pfXVuZG8oZSx0KXtjb25zdCByPWUuZ2V0U2V0dGlu''@;'; put 'put ''Z3MoKSxpPVtdO3IuZml4ZWRSb3dzQm90dG9tPXRoaXMuZml4ZWRSb3dzQm90dG9tLHIuZml4ZWRSb3dzVG9wPXRoaXMuZml4ZWRSb3dzVG9wLHRoaXMuZGF0YS5mb3JFYWNoKChvLGEpPT57Y29uc3QgbD1vO09iamVjdC5rZXlzKGwpLmZvckVhY2godT0+e2NvbnN0IGc9TnVtYmVyLnBhcnNl''@;'; put 'put ''SW50KHUsMTApO2kucHVzaChbdGhpcy5pbmRleCthLGlzTmFOKGcpP3U6ZyxsW3VdXSl9KX0pLGUucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMucm93SW5kZXhlc1NlcXVlbmNlKSxlLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIixlLnRvVmlzdWFsUm93KHRoaXMuaW5k''@;'; put 'put ''ZXgpLHRoaXMuZGF0YS5sZW5ndGgsIlVuZG9SZWRvLnVuZG8iKSxlLnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLnJvd0luZGV4ZXNTZXF1ZW5jZSksdGhpcy5yZW1vdmVkQ2VsbE1ldGFzLmZvckVhY2gobz0+e2NvbnN0W2EsbCx1XT1vO2Uuc2V0Q2VsbE1ldGFPYmpl''@;'; put 'put ''Y3QoYSxsLHUpfSksZnVuY3Rpb24gc0t0KG4sZSl7aWYoIWV8fDA9PT1lLmxlbmd0aClyZXR1cm47Y29uc3QgdD1uLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO3Q/LmVuYWJsZWQmJmUuZm9yRWFjaCgoe3JvdzpyLGNvbDppLHJvd3NwYW46byxjb2xzcGFuOmF9KT0+e2NvbnN0IGw9citvLTEs''@;'; put 'put ''dT1pK2EtMSxnPW4uX2NyZWF0ZUNlbGxDb29yZHMocixpKSxFPW4uX2NyZWF0ZUNlbGxDb29yZHMobCx1KSxPPW4uX2NyZWF0ZUNlbGxSYW5nZShnLGcsRSk7dC51bm1lcmdlUmFuZ2UoTywhMCksdC5tZXJnZShyLGksbCx1KX0pfShlLHRoaXMucmVtb3ZlZE1lcmdlZENlbGxzKSxlLmFkZEhv''@;'; put 'put ''b2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLHQpLGUuc2V0U291cmNlRGF0YUF0Q2VsbChpLHZvaWQgMCx2b2lkIDAsIlVuZG9SZWRvLnVuZG8iKX1yZWRvKGUsdCl7ZS5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVSb3ciLHQpLGUuYWx0ZXIoInJlbW92ZV9yb3ciLGUudG9WaXN1YWxSb3codGhp''@;'; put 'put ''cy5pbmRleCksdGhpcy5kYXRhLmxlbmd0aCwiVW5kb1JlZG8ucmVkbyIpfWNvbnN0cnVjdG9yKHtpbmRleDplLGRhdGE6dCxmaXhlZFJvd3NCb3R0b206cixmaXhlZFJvd3NUb3A6aSxyb3dJbmRleGVzU2VxdWVuY2U6byxyZW1vdmVkQ2VsbE1ldGFzOmEscmVtb3ZlZE1lcmdlZENlbGxzOmx9''@;'; put 'put ''KXtzdXBlcigicmVtb3ZlX3JvdyIpLHRoaXMuaW5kZXg9ZSx0aGlzLmRhdGE9dCx0aGlzLmZpeGVkUm93c0JvdHRvbT1yLHRoaXMuZml4ZWRSb3dzVG9wPWksdGhpcy5yb3dJbmRleGVzU2VxdWVuY2U9byx0aGlzLnJlbW92ZWRDZWxsTWV0YXM9YSx0aGlzLnJlbW92ZWRNZXJnZWRDZWxscz1s''@;'; put 'put ''fX1mdW5jdGlvbiBhS3QobixlLHQpe2NvbnN0IHI9bi5nZXRQbHVnaW4oIm1lcmdlQ2VsbHMiKTtpZighcj8uZW5hYmxlZClyZXR1cm5bXTtjb25zdCBpPWUrdC0xLG89W107cmV0dXJuIHIubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uPy5tZXJnZWRDZWxscy5mb3JFYWNoKCh7cm93OmEsY29sOmws''@;'; put 'put ''cm93c3Bhbjp1LGNvbHNwYW46Z30pPT57YTw9aSYmYSt1LTE+PWUmJm8ucHVzaCh7cm93OmEsY29sOmwscm93c3Bhbjp1LGNvbHNwYW46Z30pfSksb31jbGFzcyBWcGUgZXh0ZW5kcyBDbXtzdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhlLHQpe2UuYWRkSG9vaygiYmVmb3JlUm93TW92''@;'; put 'put ''ZSIsKHIsaSk9PnshMSE9PXImJnQuZG9uZSgoKT0+bmV3IFZwZSh7cm93czpyLGZpbmFsSW5kZXg6aX0pKX0pfXVuZG8oZSx0KXtjb25zdCByPWUuZ2V0UGx1Z2luKCJtYW51YWxSb3dNb3ZlIik7ZS5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIix0KSxNMmUodGhpcy5yb3dzLHRoaXMu''@;'; put 'put ''ZmluYWxSb3dJbmRleCxlLnJvd0luZGV4TWFwcGVyLmdldE51bWJlck9mSW5kZXhlcygpKS5yZXZlcnNlKCkuZm9yRWFjaCgoe2Zyb206byx0bzphfSk9PntvPGEmJihhLT0xKSxyLm1vdmVSb3coYSxvKX0pLGUucmVuZGVyKCksZS5kZXNlbGVjdENlbGwoKSxlLnNlbGVjdFJvd3ModGhpcy5y''@;'; put 'put ''b3dzWzBdLHRoaXMucm93c1swXSt0aGlzLnJvd3MubGVuZ3RoLTEpfXJlZG8oZSx0KXtjb25zdCByPWUuZ2V0UGx1Z2luKCJtYW51YWxSb3dNb3ZlIik7ZS5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIix0KSxyLm1vdmVSb3dzKHRoaXMucm93cy5zbGljZSgpLHRoaXMuZmluYWxSb3dJ''@;'; put 'put ''bmRleCksZS5yZW5kZXIoKSxlLmRlc2VsZWN0Q2VsbCgpLGUuc2VsZWN0Um93cyh0aGlzLmZpbmFsUm93SW5kZXgsdGhpcy5maW5hbFJvd0luZGV4K3RoaXMucm93cy5sZW5ndGgtMSl9Y29uc3RydWN0b3Ioe3Jvd3M6ZSxmaW5hbEluZGV4OnR9KXtzdXBlcigicm93X21vdmUiKSx0aGlzLnJv''@;'; put 'put ''d3M9ZS5zbGljZSgpLHRoaXMuZmluYWxSb3dJbmRleD10fX1jbGFzcyBCcGUgZXh0ZW5kcyBDbXtzdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhlLHQpe2UuYWRkSG9vaygiYWZ0ZXJVbm1lcmdlQ2VsbHMiLChyLGkpPT57aXx8dC5kb25lKCgpPT5uZXcgQnBlKHtjZWxsUmFuZ2U6cn0p''@;'; put 'put ''KX0pfXVuZG8oZSx0KXtjb25zdCByPWUuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7ZS5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIix0KSxyLm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UsITApfXJlZG8oZSx0KXtjb25zdCByPWUuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7ZS5hZGRI''@;'; put 'put ''b29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIix0KSxyLnVubWVyZ2VSYW5nZSh0aGlzLmNlbGxSYW5nZSwhMCksZS5yZW5kZXIoKX1jb25zdHJ1Y3Rvcih7Y2VsbFJhbmdlOmV9KXtzdXBlcigidW5tZXJnZV9jZWxscyIpLHRoaXMuY2VsbFJhbmdlPWV9fWZ1bmN0aW9uIFpqZShuLGUsdCl7aWYo''@;'; put 'put ''IWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1Hby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlVW5kbyIpLEdvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVy''@;'; put 'put ''KCJhZnRlclVuZG8iKSxHby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlUmVkbyIpLEdvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclJlZG8iKTt2YXIganBlPW5ldyBXZWFrTWFwO2NsYXNzIHZLdCBleHRlbmRzIGFse3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVy''@;'; put 'put ''biJ1bmRvUmVkbyJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMWUzfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnVuZG99ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwo''@;'; put 'put ''dGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsZnVuY3Rpb24gaEt0KG4sZSl7cmV0dXJuIGZ1bmN0aW9uIHVLdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sWmplKG4sZSwiZ2V0IikpfSh0aGlzLGpwZSkpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBl''@;'; put 'put ''ci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKSx0aGlzLmNsZWFyKCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCB0PXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQo''@;'; put 'put ''ImdyaWQiKTt0Py5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkNvbnRyb2wvTWV0YSIsInoiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLnVuZG8oKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsInkiXSxbIkNvbnRyb2wvTWV0YSIsIlNoaWZ0IiwieiJdXSxjYWxsYmFjazooKT0+e3RoaXMucmVkbygp''@;'; put 'put ''fX1dLHtydW5Pbmx5SWY6bz0+IW8/LmFsdEtleSxncm91cDoidW5kb1JlZG8ifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKT8ucmVtb3ZlU2hvcnRjdXRzQnlHcm91cCgidW5kb1JlZG8iKX1kb25lKGUsdCl7''@;'; put 'put ''aWYodGhpcy5pZ25vcmVOZXdBY3Rpb25zfHwiVW5kb1JlZG8udW5kbyI9PT10fHwiVW5kb1JlZG8ucmVkbyI9PT10fHwiYXV0byI9PT10KXJldHVybjtjb25zdCBpPXRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKTtpZighMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmRvU3RhY2tDaGFu''@;'; put 'put ''Z2UiLGksdCkpcmV0dXJuO2NvbnN0IGE9ZSgpLGw9dGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCk7bnVsbCE9PWEmJnRoaXMuZG9uZUFjdGlvbnMucHVzaChhKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGksdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKSx0aGlz''@;'; put 'put ''LmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixsKSx0aGlzLnVuZG9uZUFjdGlvbnMubGVuZ3RoPTAsdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixsLHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpKX11bmRvKCl7aWYoIXRoaXMuaXNVbmRvQXZh''@;'; put 'put ''aWxhYmxlKCkpcmV0dXJuO2NvbnN0IGU9dGhpcy5kb25lQWN0aW9ucy5zbGljZSgpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLGUpO2NvbnN0IHQ9dGhpcy5kb25lQWN0aW9ucy5wb3AoKTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2Ui''@;'; put 'put ''LGUsdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKTtjb25zdCByPUFkKHQpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuZG8iLHIpKXJldHVybjt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITA7Y29uc3Qgbz10aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmhvdC5ydW5I''@;'; put 'put ''b29rcygiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixvKSx0LnVuZG8odGhpcy5ob3QsKCk9Pnt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITEsdGhpcy51bmRvbmVBY3Rpb25zLnB1c2godCl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLG8sdGhpcy51bmRvbmVBY3Rp''@;'; put 'put ''b25zLnNsaWNlKCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuZG8iLHIpfXJlZG8oKXtpZighdGhpcy5pc1JlZG9BdmFpbGFibGUoKSlyZXR1cm47Y29uc3QgZT10aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixl''@;'; put 'put ''KTtjb25zdCB0PXRoaXMudW5kb25lQWN0aW9ucy5wb3AoKTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLGUsdGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCkpO2NvbnN0IHI9QWQodCk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkbyIscikpcmV0''@;'; put 'put ''dXJuO3RoaXMuaWdub3JlTmV3QWN0aW9ucz0hMDtjb25zdCBvPXRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixvKSx0LnJlZG8odGhpcy5ob3QsKCk9Pnt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITEsdGhpcy5kb25lQWN0''@;'; put 'put ''aW9ucy5wdXNoKHQpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixvLHRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVkbyIscil9aXNVbmRvQXZhaWxhYmxlKCl7cmV0dXJuIHRoaXMuZG9uZUFjdGlvbnMubGVuZ3Ro''@;'; put 'put ''PjB9aXNSZWRvQXZhaWxhYmxlKCl7cmV0dXJuIHRoaXMudW5kb25lQWN0aW9ucy5sZW5ndGg+MH1jbGVhcigpe3RoaXMuZG9uZUFjdGlvbnMubGVuZ3RoPTAsdGhpcy51bmRvbmVBY3Rpb25zLmxlbmd0aD0wfWRlc3Ryb3koKXt0aGlzLmNsZWFyKCksdGhpcy5kb25lQWN0aW9ucz1bXSx0aGlz''@;'; put 'put ''LnVuZG9uZUFjdGlvbnM9W10sc3VwZXIuZGVzdHJveSgpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLGZ1bmN0aW9uIGZLdChuLGUsdCl7KGZ1bmN0aW9uIGNLdChuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUg''@;'; put 'put ''ZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLGUpLGUuc2V0KG4sdCl9KHRoaXMsanBlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0aGlzLmRvbmVBY3Rpb25zPVtdLHRoaXMudW5kb25lQWN0aW9ucz1bXSx0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITEsZnVuY3Rpb24gcEt0''@;'; put 'put ''KG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gZEt0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixaamUobixl''@;'; put 'put ''LCJzZXQiKSx0KSx0fSh0aGlzLGpwZSwodCxyKT0+eyJsb2FkRGF0YSI9PT1yJiZ0aGlzLmNsZWFyKCl9KSxmdW5jdGlvbiBsS3QobixlKXtba3BlLFJwZSxJcGUsRHBlLExwZSxPcGUsTnBlLEZwZSxQcGUsSHBlLFZwZSxCcGVdLmZvckVhY2godD0+dC5zdGFydFJlZ2lzdGVyaW5nRXZlbnRz''@;'; put 'put ''KG4sZSkpfShlLHRoaXMpfX1jb25zdCBBMD0iaHQtZGlhbG9nIixQRj1uZXcgTWFwKFtbImJhc2UiLGZ1bmN0aW9uIF9LdCgpe2xldCBlPW51bGw7Y29uc3QgdD17fTtyZXR1cm57VEVNUExBVEVfTkFNRToiYmFzZSIsZGlhbG9nQTExWU9wdGlvbnM6KCk9Pih7cm9sZToiZGlhbG9nIn0pLGNv''@;'; put 'put ''bXBpbGU6ZnVuY3Rpb24gcigpe2NvbnN0IG89c3dgJHtmdW5jdGlvbiBuKCl7cmV0dXJuYFxuICAgICAgPGRpdiBkYXRhLXJlZj0iY29udGVudEVsZW1lbnQiIGNsYXNzPSIke0EwfV9fY29udGVudCI+PC9kaXY+XG4gICAgYH0oKX1gO3JldHVybiBPYmplY3QuYXNzaWduKHQsby5yZWZzKSxl''@;'; put 'put ''PW8uZnJhZ21lbnQsb30sZm9jdXNhYmxlRWxlbWVudHM6ZnVuY3Rpb24gaSgpe3JldHVybiBudWxsPT09ZSYmSnIoIkNvbXBpbGUgdGhlIHRlbXBsYXRlIGZpcnN0LiIpLFtdfX19XSxbImNvbmZpcm0iLGZ1bmN0aW9uIHlLdCh7aWQ6bj0iIix0aXRsZTplPSIiLGRlc2NyaXB0aW9uOnQ9IiIs''@;'; put 'put ''YnV0dG9uczpyPVtdfSl7bGV0IG89bnVsbDtjb25zdCBhPXt9O3JldHVybntURU1QTEFURV9OQU1FOiJjb25maXJtIixkaWFsb2dBMTFZT3B0aW9uczooKT0+KHtyb2xlOiJhbGVydGRpYWxvZyIsYXJpYUxhYmVsbGVkYnk6YCR7bn0tZGlhbG9nLWNvbmZpcm0tdGl0bGVgLGFyaWFEZXNjcmli''@;'; put 'put ''ZWRieTp0P2Ake259LWRpYWxvZy1jb25maXJtLWRlc2NyaXB0aW9uYDp2b2lkIDB9KSxjb21waWxlOmZ1bmN0aW9uIGwoKXtjb25zdCBnPXN3YCR7ZnVuY3Rpb24gaSgpe3JldHVybmBcbiAgICAgIDxkaXYgdGFiaW5kZXg9Ii0xIiBkYXRhLXJlZj0iY29udGVudEVsZW1lbnQiIGNsYXNzPSIk''@;'; put 'put ''e0EwfV9fY29udGVudC13cmFwcGVyLWlubmVyIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iJHtBMH1fX2NvbnRlbnQiPlxuICAgICAgICAgIDxoMlxuICAgICAgICAgICAgaWQ9IiR7bn0tZGlhbG9nLWNvbmZpcm0tdGl0bGUiXG4gICAgICAgICAgICBjbGFzcz0iJHtBMH1fX3RpdGxlIj4ke3Nt''@;'; put 'put ''KGUpfTwvaDI+XG4gICAgICAgICAgPHBcbiAgICAgICAgICAgIGlkPSIke259LWRpYWxvZy1jb25maXJtLWRlc2NyaXB0aW9uIlxuICAgICAgICAgICAgY2xhc3M9IiR7QTB9X19kZXNjcmlwdGlvbiI+JHtzbSh0KX08L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICAke3IubGVuZ3RoPjA/''@;'; put 'put ''YFxuICAgICAgICAgIDxkaXYgZGF0YS1yZWY9ImJ1dHRvbnNDb250YWluZXIiIGNsYXNzPSIke0EwfV9fYnV0dG9ucyI+XG4gICAgICAgICAgICAke3IubWFwKGc9PmBcbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaHQtYnV0dG9uIGh0LWJ1dHRvbi0tJHtnLnR5cGV9Ij4ke3NtKGcu''@;'; put 'put ''dGV4dCl9PC9idXR0b24+XG4gICAgICAgICAgICBgKS5qb2luKCIiKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgYDoiIn1cbiAgICAgIDwvZGl2PlxuICAgIGB9KCl9YDtyZXR1cm4gT2JqZWN0LmFzc2lnbihhLGcucmVmcyksbz1nLmZyYWdtZW50LGd9LGZvY3VzYWJsZUVsZW1lbnRz''@;'; put 'put ''OmZ1bmN0aW9uIHUoKXtudWxsPT09byYmSnIoIkNvbXBpbGUgdGhlIHRlbXBsYXRlIGZpcnN0LiIpO2NvbnN0e2NvbnRlbnRFbGVtZW50OmcsYnV0dG9uc0NvbnRhaW5lcjpFfT1hLE89W107cmV0dXJuIEU/Ty5wdXNoKC4uLkFycmF5LmZyb20oRS5jaGlsZHJlbikpOk8ucHVzaChnKSxPfX19''@;'; put 'put ''XV0pO2Z1bmN0aW9uICRqZShuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gcWplKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIEh1KG4sZSl7cmV0dXJuIGZ1bmN0aW9uIGJLdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4scWplKG4sZSwi''@;'; put 'put ''Z2V0IikpfWZ1bmN0aW9uIE1DKG4sZSx0KXskamUobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIGFmKG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gd0t0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0''@;'; put 'put ''ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixxamUobixlLCJzZXQiKSx0KSx0fWZ1bmN0aW9uIEtqZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5z''@;'; put 'put ''dGFuY2UiKTtyZXR1cm4gdH1mdW5jdGlvbiBYamUobixlKXskamUobixlKSxlLmFkZChuKX1jb25zdCBDS3Q9YFxuPGRpdiBkYXRhLXJlZj0iZGlhbG9nRWxlbWVudCIgY2xhc3M9IiR7QTB9Ij5cbiAgPGRpdiBkYXRhLXJlZj0iZGlhbG9nV3JhcHBlckVsZW1lbnQiIGNsYXNzPSIke0EwfV9f''@;'; put 'put ''Y29udGVudC13cmFwcGVyIj5cbjwvZGl2PlxuYDt2YXIgSEY9bmV3IFdlYWtNYXAsaTM9bmV3IFdlYWtNYXAsdHE9bmV3IFdlYWtNYXAseng9bmV3IFdlYWtNYXAsejQ9bmV3IFdlYWtNYXAsVkY9bmV3IFdlYWtNYXAsbnE9bmV3IFdlYWtNYXAsUWplPW5ldyBXZWFrU2V0LEpqZT1uZXcgV2Vh''@;'; put 'put ''a1NldDtjbGFzcyBlVWV7dXNlVGVtcGxhdGUoZSx0PXt9KXtQRi5oYXMoZSkmJiJiYXNlIiE9PWV8fEpyKHljYEludmFsaWQgdGVtcGxhdGU6ICR7ZX0uXHgyMAogICAgICAgIFZhbGlkIHRlbXBsYXRlcyBhcmU6ICR7QXJyYXkuZnJvbShQRi5rZXlzKCkpLmZpbHRlcihpPT4iYmFzZSIhPT1p''@;'; put 'put ''KS5qb2luKCIsICIpfS5gKSxhZih0aGlzLHo0LFBGLmdldChlKSh0KSksYWYodGhpcyxWRiwodC5idXR0b25zPz9bXSkubWFwKHI9PnIuY2FsbGJhY2spKX11c2VEZWZhdWx0VGVtcGxhdGUoKXthZih0aGlzLHo0LFBGLmdldCgiYmFzZSIpKCkpLGFmKHRoaXMsVkYsW10pfWluc3RhbGwoKXtp''@;'; put 'put ''ZihIdSh0aGlzLGkzKT8uZGlhbG9nRWxlbWVudClyZXR1cm47Y29uc3QgZT1zd2Ake0NLdH1gO2FmKHRoaXMsaTMsZS5yZWZzKTtjb25zdHtkaWFsb2dFbGVtZW50OnR9PUh1KHRoaXMsaTMpO0tvKHQsW1siYXJpYS1tb2RhbCIsInRydWUiXSxbImRpciIsSHUodGhpcyx0cSk/InJ0bCI6Imx0''@;'; put 'put ''ciJdXSksdC5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uc3RhcnQiLCgpPT5LamUodGhpcyxKamUsRUt0KS5jYWxsKHRoaXMpKSx0LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLCgpPT5LamUodGhpcyxRamUsU0t0KS5jYWxsKHRoaXMpKSxIdSh0aGlzLEhGKSYmSHUodGhp''@;'; put 'put ''cyxIRikuYXBwZW5kQ2hpbGQoZS5mcmFnbWVudCl9Z2V0Q29udGFpbmVyKCl7cmV0dXJuIEh1KHRoaXMsaTMpLmRpYWxvZ0VsZW1lbnR9Z2V0Rm9jdXNhYmxlRWxlbWVudHMoKXtyZXR1cm4gSHUodGhpcyx6NCkuZm9jdXNhYmxlRWxlbWVudHMoKX11cGRhdGVEaWFsb2coe2lzVmlzaWJsZTpl''@;'; put 'put ''LGNvbnRlbnQ6dCxjdXN0b21DbGFzc05hbWU6cixiYWNrZ3JvdW5kOmksY29udGVudEJhY2tncm91bmQ6byxhbmltYXRpb246YSxhMTF5Omx9KXtjb25zdCB1PUh1KHRoaXMsejQpLmNvbXBpbGUoKSx7ZGlhbG9nRWxlbWVudDpnLGRpYWxvZ1dyYXBwZXJFbGVtZW50OkV9PUh1KHRoaXMsaTMp''@;'; put 'put ''LE89bDtFLmlubmVySFRNTD0iIixFLmFwcGVuZENoaWxkKHUuZnJhZ21lbnQpLE9iamVjdC5hc3NpZ24oSHUodGhpcyxpMyksdS5yZWZzKTtjb25zdHtjb250ZW50RWxlbWVudDpaLGJ1dHRvbnNDb250YWluZXI6ZWV9PUh1KHRoaXMsaTMpOyJiYXNlIiE9PUh1KHRoaXMsejQpLlRFTVBMQVRF''@;'; put 'put ''X05BTUUmJk9iamVjdC5hc3NpZ24oTyxIdSh0aGlzLHo0KS5kaWFsb2dBMTFZT3B0aW9ucygpKTtjb25zdCB2ZT1yP2AgJHtyfWA6IiIsTWU9aT9gICR7QTB9LS1iYWNrZ3JvdW5kLSR7aX1gOiIiLEhlPWE/YCAke0EwfS0tYW5pbWF0aW9uYDoiIixXZT1lP2AgJHtBMH0tLXNob3dgOiIiO3Jl''@;'; put 'put ''dHVybiBnLmNsYXNzTmFtZT1bQTAsYCR7QTB9LS0ke0h1KHRoaXMsejQpLlRFTVBMQVRFX05BTUV9YCwiaGFuZHNvbnRhYmxlIix2ZSxNZSxIZSxXZV0uam9pbigiICIpLCJiYXNlIj09PUh1KHRoaXMsejQpLlRFTVBMQVRFX05BTUUmJktvKGcsW2I0KC0xKV0pLEtvKGcsWyJhbGVydGRpYWxv''@;'; put 'put ''ZyI9PT1PLnJvbGU/WyJyb2xlIiwiYWxlcnRkaWFsb2ciXTpbInJvbGUiLCJkaWFsb2ciXV0pLE8uYXJpYUxhYmVsJiYhTy5hcmlhTGFiZWxsZWRieT9LbyhnLFtOMyhPLmFyaWFMYWJlbCldKTp3NChnLCJhcmlhLWxhYmVsIiksTy5hcmlhTGFiZWxsZWRieT9LbyhnLFtUTXQoTy5hcmlhTGFi''@;'; put 'put ''ZWxsZWRieSldKTp3NChnLCJhcmlhLWxhYmVsbGVkYnkiKSxPLmFyaWFEZXNjcmliZWRieT9LbyhnLFt4TXQoTy5hcmlhRGVzY3JpYmVkYnkpXSk6dzQoZywiYXJpYS1kZXNjcmliZWRieSIpLFlyKFosYCR7QTB9X19jb250ZW50JHtvP2AgJHtBMH1fX2NvbnRlbnQtLWJhY2tncm91bmRgOiIi''@;'; put 'put ''fWApLCJiYXNlIj09PUh1KHRoaXMsejQpLlRFTVBMQVRFX05BTUU/KFouaW5uZXJIVE1MPSIiLCJzdHJpbmciPT10eXBlb2YgdD9fNyhaLHQsSHUodGhpcyxucSk/KEN0LEF0KT0+SHUodGhpcyxucSkuY2FsbCh0aGlzLEN0KT8/Q3Q6dm9pZCAwLCJkaWFsb2ciLEh1KHRoaXMsSEYpKTooaHMo''@;'; put 'put ''dCl8fHQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSYmWi5hcHBlbmRDaGlsZCh0KSk6ZWUmJkFycmF5LmZyb20oZWUuY2hpbGRyZW4pLmZvckVhY2goKEN0LEF0KT0+e2NvbnN0IEt0PUh1KHRoaXMsVkYpW0F0XTtLdCYmQ3QuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLEt0KX0pLHRo''@;'; put 'put ''aXN9c2hvd0RpYWxvZyhlKXtjb25zdHtkaWFsb2dFbGVtZW50OnR9PUh1KHRoaXMsaTMpO3JldHVybiB0LnN0eWxlLmRpc3BsYXk9ImJsb2NrIixZcih0LGAke0EwfS0tc2hvd2ApLGFmKHRoaXMsengsITEpLHRoaXN9aGlkZURpYWxvZyhlKXtjb25zdHtkaWFsb2dFbGVtZW50OnR9PUh1KHRo''@;'; put 'put ''aXMsaTMpO3JldHVybiBrbyh0LGAke0EwfS0tc2hvd2ApLChlJiYhSHUodGhpcyx6eCl8fCFlKSYmKHQuc3R5bGUuZGlzcGxheT0ibm9uZSIpLGFmKHRoaXMsengsITEpLHRoaXN9Zm9jdXNEaWFsb2coKXtIdSh0aGlzLGkzKS5kaWFsb2dFbGVtZW50LmZvY3VzKCl9dXBkYXRlV2lkdGgoZSl7''@;'; put 'put ''cmV0dXJuIEh1KHRoaXMsaTMpLmRpYWxvZ0VsZW1lbnQuc3R5bGUud2lkdGg9YCR7ZX1weGAsdGhpc31kZXN0cm95RGlhbG9nKCl7SHUodGhpcyxpMyk/LmRpYWxvZ0VsZW1lbnQucmVtb3ZlKCksYWYodGhpcyxpMyx2b2lkIDApfWNvbnN0cnVjdG9yKHtvdmVybGF5Q29udGFpbmVyOmUsaXNS''@;'; put 'put ''dGw6dCxzYW5pdGl6ZXI6cn0pe1hqZSh0aGlzLFFqZSksWGplKHRoaXMsSmplKSxNQyh0aGlzLEhGLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxNQyh0aGlzLGkzLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxNQyh0aGlzLHRxLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxN''@;'; put 'put ''Qyh0aGlzLHp4LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxNQyh0aGlzLHo0LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxNQyh0aGlzLFZGLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxNQyh0aGlzLG5xLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxhZih0aGlzLHRx''@;'; put 'put ''LCExKSxhZih0aGlzLHp4LCExKSxhZih0aGlzLHo0LFBGLmdldCgiYmFzZSIpKCkpLGFmKHRoaXMsVkYsW10pLGFmKHRoaXMsSEYsZSksYWYodGhpcyx0cSx0KSxhZih0aGlzLG5xLHIpLHRoaXMuaW5zdGFsbCgpfX1mdW5jdGlvbiBTS3QoKXtjb25zdHtkaWFsb2dFbGVtZW50Om59PUh1KHRo''@;'; put 'put ''aXMsaTMpO0xhKG4sYCR7QTB9LS1zaG93YCl8fChuLnN0eWxlLmRpc3BsYXk9Im5vbmUiKX1mdW5jdGlvbiBFS3QoKXthZih0aGlzLHp4LCEwKX1mdW5jdGlvbiB0VWUobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2''@;'; put 'put ''YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIG5VZShuLGUsdCl7aWYoIWUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3QrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldChuKX1mdW5jdGlvbiBU''@;'; put 'put ''MShuLGUpe3JldHVybiBmdW5jdGlvbiBNS3QobixlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbChuKTplLnZhbHVlfShuLG5VZShuLGUsImdldCIpKX1mdW5jdGlvbiBVcGUobixlLHQpe3RVZShuLGUpLGUuc2V0KG4sdCl9ZnVuY3Rpb24gaGcobixlLHQpe3JldHVybiBmdW5jdGlvbiBUS3Qo''@;'; put 'put ''bixlLHQpe2lmKGUuc2V0KWUuc2V0LmNhbGwobix0KTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXR9fShuLG5VZShuLGUsInNldCIpLHQpLHR9ZnVuY3Rpb24gQkYobixl''@;'; put 'put ''LHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHR9ZnVuY3Rpb24gakYobixlKXt0VWUobixlKSxlLmFkZChuKX1ZbChlVWUsX2gpO2NvbnN0IHpfPSJkaWFsb2ciLHpwZT16''@;'; put 'put ''XyxycT1gcGx1Z2luOiR7el99YDt2YXIgZTA9bmV3IFdlYWtNYXAsVEM9bmV3IFdlYWtNYXAsTjY9bmV3IFdlYWtNYXAsclVlPW5ldyBXZWFrU2V0LGlVZT1uZXcgV2Vha1NldCxvVWU9bmV3IFdlYWtTZXQsYVVlPW5ldyBXZWFrU2V0LHNVZT1uZXcgV2Vha1NldDtjbGFzcyBpcSBleHRlbmRz''@;'; put 'put ''IGFse3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB6X31zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzNjB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue3RlbXBsYXRlOm51bGwsY29udGVudDoiIixjdXN0b21DbGFzc05hbWU6IiIsYmFja2dy''@;'; put 'put ''b3VuZDoic29saWQiLGNvbnRlbnRCYWNrZ3JvdW5kOiExLGFuaW1hdGlvbjohMCxjbG9zYWJsZTohMSxhMTF5Ontyb2xlOiJkaWFsb2ciLGFyaWFMYWJlbDoiRGlhbG9nIixhcmlhTGFiZWxsZWRieToiIixhcmlhRGVzY3JpYmVkYnk6IiJ9fX1zdGF0aWMgZ2V0IFNFVFRJTkdTX1ZBTElEQVRP''@;'; put 'put ''UlMoKXtyZXR1cm57dGVtcGxhdGU6ZT0+a2QoZSkmJnR5cGVvZlsiYWxlcnQiLCJjb25maXJtIl0uaW5jbHVkZXMoU3RyaW5nKGUudHlwZSkpJiYic3RyaW5nIj09dHlwZW9mIGUudGl0bGUmJih0eXBlb2YgZT8uZGVzY3JpcHRpb24+InUifHwic3RyaW5nIj09dHlwZW9mIGU/LmRlc2NyaXB0''@;'; put 'put ''aW9uKSYmKHR5cGVvZiBlPy5idXR0b25zPiJ1Inx8QXJyYXkuaXNBcnJheShlPy5idXR0b25zKSYmZS5idXR0b25zLmV2ZXJ5KHQ9PmtkKHQpJiYic3RyaW5nIj09dHlwZW9mIHQudGV4dCYmWyJwcmltYXJ5Iiwic2Vjb25kYXJ5Il0uaW5jbHVkZXMoU3RyaW5nKHQudHlwZSkpJiYodHlwZW9m''@;'; put 'put ''IHQuY2FsbGJhY2s+InUifHwiZnVuY3Rpb24iPT10eXBlb2YgdC5jYWxsYmFjaykpKSxjb250ZW50OmU9PiJzdHJpbmciPT10eXBlb2YgZXx8aHMoZSl8fHR5cGVvZiBEb2N1bWVudEZyYWdtZW50PCJ1IiYmZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQsY3VzdG9tQ2xhc3NOYW1lOmU9''@;'; put 'put ''PiJzdHJpbmciPT10eXBlb2YgZSxiYWNrZ3JvdW5kOmU9PiJzdHJpbmciPT10eXBlb2YgZSYmWyJzb2xpZCIsInNlbWktdHJhbnNwYXJlbnQiXS5pbmNsdWRlcyhlKSxjb250ZW50QmFja2dyb3VuZDplPT4iYm9vbGVhbiI9PXR5cGVvZiBlLGFuaW1hdGlvbjplPT4iYm9vbGVhbiI9PXR5cGVv''@;'; put 'put ''ZiBlLGNsb3NhYmxlOmU9PiJib29sZWFuIj09dHlwZW9mIGUsYTExeTplPT5rZChlKSYmKHR5cGVvZiBlPy5yb2xlPiJ1Inx8InN0cmluZyI9PXR5cGVvZiBlPy5yb2xlJiZbImRpYWxvZyIsImFsZXJ0ZGlhbG9nIl0uaW5jbHVkZXMoZS5yb2xlKSkmJih0eXBlb2YgZT8uYXJpYUxhYmVsPiJ1''@;'; put 'put ''Inx8InN0cmluZyI9PXR5cGVvZiBlPy5hcmlhTGFiZWwpJiYodHlwZW9mIGU/LmFyaWFMYWJlbGxlZGJ5PiJ1Inx8InN0cmluZyI9PXR5cGVvZiBlPy5hcmlhTGFiZWxsZWRieSkmJih0eXBlb2YgZT8uYXJpYURlc2NyaWJlZGJ5PiJ1Inx8InN0cmluZyI9PXR5cGVvZiBlPy5hcmlhRGVzY3Jp''@;'; put 'put ''YmVkYnkpfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbel9dfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KFQxKHRoaXMsZTApfHxoZyh0aGlzLGUwLG5ldyBlVWUoe292ZXJsYXlDb250YWluZXI6dGhpcy5ob3Qucm9vdE92ZXJsYXlzRWxlbWVudCxz''@;'; put 'put ''YW5pdGl6ZXI6dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5zYW5pdGl6ZXIsaXNSdGw6dGhpcy5ob3QuaXNSdGwoKX0pKSxCRih0aGlzLHJVZSxBS3QpLmNhbGwodGhpcyksQkYodGhpcyxvVWUsUkt0KS5jYWxsKHRoaXMpLHRoaXMuYWRkSG9vaygiYWZ0ZXJWaWV3UmVuZGVyIiwoKT0+QkYodGhp''@;'; put 'put ''cyxzVWUsREt0KS5jYWxsKHRoaXMpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5oaWRlKCksQkYodGhpcyxpVWUsa0t0''@;'; put 'put ''KS5jYWxsKHRoaXMpLEJGKHRoaXMsYVVlLElLdCkuY2FsbCh0aGlzKSxUMSh0aGlzLGUwKT8uZGVzdHJveURpYWxvZygpLGhnKHRoaXMsZTAsbnVsbCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWlzVmlzaWJsZSgpe3JldHVybiBUMSh0aGlzLFRDKX1zaG93KGU9e30pe2lmKHRoaXMuZW5hYmxl''@;'; put 'put ''ZCl7aWYodGhpcy5pc1Zpc2libGUoKSlyZXR1cm4gdm9pZCB0aGlzLnVwZGF0ZShlKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRGlhbG9nU2hvdyIpLHRoaXMudXBkYXRlKGUpLFQxKHRoaXMsZTApLnNob3dEaWFsb2codGhpcy5nZXRTZXR0aW5nKCJhbmltYXRpb24iKSksaGcodGhpcyxU''@;'; put 'put ''QywhMCksdGhpcy5ob3QuZ2V0Rm9jdXNTY29wZU1hbmFnZXIoKS5hY3RpdmF0ZVNjb3BlKHpfKSxoZyh0aGlzLE42LHRoaXMuaG90LnNlbGVjdGlvbi5leHBvcnRTZWxlY3Rpb24oKSksdGhpcy5ob3QuZGVzZWxlY3RDZWxsKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRGlhbG9nU2hvdyIp''@;'; put 'put ''fX1oaWRlKCl7aWYodGhpcy5pc1Zpc2libGUoKSl7aWYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURpYWxvZ0hpZGUiKSxUMSh0aGlzLGUwKS5oaWRlRGlhbG9nKHRoaXMuZ2V0U2V0dGluZygiYW5pbWF0aW9uIikpLGhnKHRoaXMsVEMsITEpLHRoaXMuaG90LmdldEZvY3VzU2NvcGVNYW5h''@;'; put 'put ''Z2VyKCkuZGVhY3RpdmF0ZVNjb3BlKHpfKSxUMSh0aGlzLE42KSYmVDEodGhpcyxONikucmFuZ2VzLmxlbmd0aD4wJiZUMSh0aGlzLE42KS5hY3RpdmVSYW5nZSl7Y29uc3QgZT1UMSh0aGlzLE42KTt0aGlzLmhvdC5zZWxlY3Rpb24uaW1wb3J0U2VsZWN0aW9uKHtyYW5nZXM6ZS5yYW5nZXMs''@;'; put 'put ''YWN0aXZlUmFuZ2U6ZS5hY3RpdmVSYW5nZSxhY3RpdmVTZWxlY3Rpb25MYXllcjplLmFjdGl2ZVNlbGVjdGlvbkxheWVyLHNlbGVjdGVkQnlSb3dIZWFkZXI6ZS5zZWxlY3RlZEJ5Um93SGVhZGVyLHNlbGVjdGVkQnlDb2x1bW5IZWFkZXI6ZS5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLGRpc2Fi''@;'; put 'put ''bGVIZWFkZXJzSGlnaGxpZ2h0OmUuZGlzYWJsZUhlYWRlcnNIaWdobGlnaHR9KSx0aGlzLmhvdC52aWV3LnJlbmRlcigpLGhnKHRoaXMsTjYsbnVsbCl9ZWxzZSB0aGlzLmhvdC52aWV3LnJlbmRlcigpLGhnKHRoaXMsTjYsbnVsbCk7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRGlhbG9nSGlk''@;'; put 'put ''ZSIpfX11cGRhdGUoZSl7aWYoIXRoaXMuZW5hYmxlZClyZXR1cm47dGhpcy51cGRhdGVQbHVnaW5TZXR0aW5ncyhlKTtjb25zdCB0PXRoaXMuZ2V0U2V0dGluZygidGVtcGxhdGUiKTtpZih0IT09aXEuREVGQVVMVF9TRVRUSU5HUy50ZW1wbGF0ZSYmdGhpcy5nZXRTZXR0aW5nKCJjb250ZW50''@;'; put 'put ''IikhPT1pcS5ERUZBVUxUX1NFVFRJTkdTLmNvbnRlbnQmJkpyKCJUaGUgYHRlbXBsYXRlYCBvcHRpb24gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCB0aGUgYGNvbnRlbnRgIG9wdGlvbi4iKSx0KXtjb25zdCByPXQ7VDEodGhpcyxlMCkudXNlVGVtcGxhdGUoci50eXBlLHtpZDp0aGlz''@;'; put 'put ''LmhvdC5ndWlkLC4uLnJ9KX1lbHNlIFQxKHRoaXMsZTApLnVzZURlZmF1bHRUZW1wbGF0ZSgpO1QxKHRoaXMsZTApLnVwZGF0ZURpYWxvZyh7aXNWaXNpYmxlOnRoaXMuaXNWaXNpYmxlKCksY29udGVudDp0aGlzLmdldFNldHRpbmcoImNvbnRlbnQiKSxjdXN0b21DbGFzc05hbWU6dGhpcy5n''@;'; put 'put ''ZXRTZXR0aW5nKCJjdXN0b21DbGFzc05hbWUiKSxiYWNrZ3JvdW5kOnRoaXMuZ2V0U2V0dGluZygiYmFja2dyb3VuZCIpLGNvbnRlbnRCYWNrZ3JvdW5kOnRoaXMuZ2V0U2V0dGluZygiY29udGVudEJhY2tncm91bmQiKSxhbmltYXRpb246dGhpcy5nZXRTZXR0aW5nKCJhbmltYXRpb24iKSxh''@;'; put 'put ''MTF5OnRoaXMuZ2V0U2V0dGluZygiYTExeSIpfSl9c2hvd0FsZXJ0KGUsdCl7Y29uc3R7dGl0bGU6cj0iQWxlcnQiLGRlc2NyaXB0aW9uOml9PUNhKGUpP2U6e3RpdGxlOmV9O3RoaXMuc2hvdyh7dGVtcGxhdGU6e3R5cGU6ImNvbmZpcm0iLHRpdGxlOnIsZGVzY3JpcHRpb246aSxidXR0b25z''@;'; put 'put ''Olt7dGV4dDp0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKGtZKSx0eXBlOiJwcmltYXJ5IixjYWxsYmFjazooLi4ubyk9PnQ/LiguLi5vKX1dfSxjb250ZW50QmFja2dyb3VuZDohMSxiYWNrZ3JvdW5kOiJzb2xpZCIsYW5pbWF0aW9uOiEwLGNsb3NhYmxlOiExfSl9c2hvd0NvbmZpcm0o''@;'; put 'put ''ZSx0LHIpe2NvbnN0e3RpdGxlOmk9IkNvbmZpcm0iLGRlc2NyaXB0aW9uOm99PUNhKGUpP2U6e3RpdGxlOmV9O3RoaXMuc2hvdyh7dGVtcGxhdGU6e3R5cGU6ImNvbmZpcm0iLHRpdGxlOmksZGVzY3JpcHRpb246byxidXR0b25zOlt7dGV4dDp0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNl''@;'; put 'put ''KFFsZSksdHlwZToic2Vjb25kYXJ5IixjYWxsYmFjazooLi4uYSk9PnI/LiguLi5hKX0se3RleHQ6dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShrWSksdHlwZToicHJpbWFyeSIsY2FsbGJhY2s6KC4uLmEpPT50Py4oLi4uYSl9XX0sY29udGVudEJhY2tncm91bmQ6ITAsYmFja2dyb3Vu''@;'; put 'put ''ZDoic2VtaS10cmFuc3BhcmVudCIsYW5pbWF0aW9uOiEwLGNsb3NhYmxlOiExfSl9Zm9jdXMoKXtUMSh0aGlzLGUwKS5mb2N1c0RpYWxvZygpfWRlc3Ryb3koKXtUMSh0aGlzLGUwKT8uZGVzdHJveURpYWxvZygpLGhnKHRoaXMsZTAsbnVsbCksaGcodGhpcyxUQywhMSksaGcodGhpcyxONixu''@;'; put 'put ''dWxsKSxzdXBlci5kZXN0cm95KCl9Y29uc3RydWN0b3IoLi4uZSl7c3VwZXIoLi4uZSksakYodGhpcyxyVWUpLGpGKHRoaXMsaVVlKSxqRih0aGlzLG9VZSksakYodGhpcyxhVWUpLGpGKHRoaXMsc1VlKSxVcGUodGhpcyxlMCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksVXBlKHRoaXMs''@;'; put 'put ''VEMse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFVwZSh0aGlzLE42LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxoZyh0aGlzLGUwLG51bGwpLGhnKHRoaXMsVEMsITEpLGhnKHRoaXMsTjYsbnVsbCl9fWZ1bmN0aW9uIEFLdCgpe2NvbnN0IG49dGhpcy5ob3QuZ2V0U2hvcnRjdXRN''@;'; put 'put ''YW5hZ2VyKCksZT1uLmdldENvbnRleHQocnEpPz9uLmFkZENvbnRleHQocnEpO2UuYWRkU2hvcnRjdXQoe2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOigpPT57dGhpcy5oaWRlKCl9LHJ1bk9ubHlJZjooKT0+VDEodGhpcyxUQykmJiEhdGhpcy5nZXRTZXR0aW5nKCJjbG9zYWJsZSIpLGdy''@;'; put 'put ''b3VwOnpwZX0pLGUuYWRkU2hvcnRjdXQoe2tleXM6W1siU2hpZnQiLCJUYWIiXSxbIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxjYWxsYmFjazp0PT57dGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMuaG90LnJ1bkhvb2tzKHQuc2hpZnRLZXk/ImRpYWxvZ0ZvY3VzUHJldmlv''@;'; put 'put ''dXNFbGVtZW50IjoiZGlhbG9nRm9jdXNOZXh0RWxlbWVudCIpfSl9LGdyb3VwOnpwZX0pfWZ1bmN0aW9uIGtLdCgpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQocnEpPy5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKHpwZSl9ZnVuY3Rpb24gUkt0KCl7dGhpcy5ob3Qu''@;'; put 'put ''Z2V0Rm9jdXNTY29wZU1hbmFnZXIoKS5yZWdpc3RlclNjb3BlKHpfLFQxKHRoaXMsZTApLmdldENvbnRhaW5lcigpLHtzaG9ydGN1dHNDb250ZXh0TmFtZTpycSx0eXBlOiJtb2RhbCIscnVuT25seUlmOigpPT50aGlzLmlzVmlzaWJsZSgpLG9uQWN0aXZhdGU6bj0+e2NvbnN0IGU9dGhpcy5o''@;'; put 'put ''b3QuaXNMaXN0ZW5pbmcoKSx0PVQxKHRoaXMsZTApLmdldEZvY3VzYWJsZUVsZW1lbnRzKCk7dC5sZW5ndGg+MD8idGFiX2Zyb21fYWJvdmUiPT09bj90LmF0KDApPy5mb2N1cygpOiJ0YWJfZnJvbV9iZWxvdyI9PT1uJiZ0LmF0KC0xKT8uZm9jdXMoKToidGFiX2Zyb21fYWJvdmUiIT09biYm''@;'; put 'put ''InRhYl9mcm9tX2JlbG93IiE9PW4mJmUmJiFUMSh0aGlzLGUwKS5nZXRDb250YWluZXIoKS5jb250YWlucyh0aGlzLmhvdC5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudCkmJlQxKHRoaXMsZTApLmdldENvbnRhaW5lcigpLmZvY3VzKCksZSYmdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRGlh''@;'; put 'put ''bG9nRm9jdXMiLCJ1bmtub3duIj09PW4/InNob3ciOm4pfX0pfWZ1bmN0aW9uIElLdCgpe3RoaXMuaG90LmdldEZvY3VzU2NvcGVNYW5hZ2VyKCkudW5yZWdpc3RlclNjb3BlKHpfKX1mdW5jdGlvbiBES3QoKXtjb25zdHt2aWV3Om59PXRoaXMuaG90LGU9bi5pc0hvcml6b250YWxseVNjcm9s''@;'; put 'put ''bGFibGVCeVdpbmRvdygpP24uZ2V0VG90YWxUYWJsZVdpZHRoKCk6bi5nZXRXb3Jrc3BhY2VXaWR0aCgpO1QxKHRoaXMsZTApLnVwZGF0ZVdpZHRoKGUpfWZ1bmN0aW9uIGxVZShuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1l''@;'; put 'put ''IHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gY1VlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0''@;'; put 'put ''aW9uIGZnKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIE9LdChuLGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sY1VlKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIFdwZShuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uIE5LdChuLGUsdCl7aWYoZS5zZXQpZS5zZXQuY2FsbChuLHQpO2Vs''@;'; put 'put ''c2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9dH19KG4sY1VlKG4sZSwic2V0IiksdCksdH1jb25zdCBXeD0ibG9hZGluZyI7dmFyIHUyPW5ldyBXZWFrTWFwLHVVZT1uZXcgV2Vh''@;'; put 'put ''a1NldDtjbGFzcyBCS3QgZXh0ZW5kcyBhbHtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gV3h9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzUwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntpY29uOmA8c3ZnIGNsYXNzPSIke1FwfV9faWNv''@;'; put 'put ''bi1zdmciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTUgOGE3IDcgMCAxIDEtMy41LTYuMDYyIj48L3BhdGg+PC9zdmc+YCx0''@;'; put 'put ''aXRsZTp2b2lkIDAsZGVzY3JpcHRpb246IiJ9fXN0YXRpYyBnZXQgU0VUVElOR1NfVkFMSURBVE9SUygpe3JldHVybntpY29uOmU9PiJzdHJpbmciPT10eXBlb2YgZSx0aXRsZTplPT4ic3RyaW5nIj09dHlwZW9mIGUsZGVzY3JpcHRpb246ZT0+InN0cmluZyI9PXR5cGVvZiBlfX1pc0VuYWJs''@;'; put 'put ''ZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbV3hdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KG51bGw9PT1mZyh0aGlzLHUyKSYmKFdwZSh0aGlzLHUyLHRoaXMuaG90LmdldFBsdWdpbigiZGlhbG9nIikpLGZnKHRoaXMsdTIpPy5pc0VuYWJsZWQoKXx8KHRoaXMu''@;'; put 'put ''aG90LmdldFNldHRpbmdzKCkuZGlhbG9nPSEwKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckRpYWxvZ0ZvY3VzIiwoKT0+ZnVuY3Rpb24gUEt0KG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0''@;'; put 'put ''YW5jZSIpO3JldHVybiB0fSh0aGlzLHVVZSxqS3QpLmNhbGwodGhpcykpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5o''@;'; put 'put ''aWRlKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWlzVmlzaWJsZSgpe3JldHVybiBmZyh0aGlzLHUyKT8uaXNWaXNpYmxlKCk/PyExfXNob3coZT17fSl7dGhpcy5pc0VuYWJsZWQoKSYmZmcodGhpcyx1MikmJmZnKHRoaXMsdTIpPy5pc0VuYWJsZWQoKSYmKHRoaXMuaXNWaXNpYmxlKCk/dGhp''@;'; put 'put ''cy51cGRhdGUoZSk6ITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlTG9hZGluZ1Nob3ciKSYmKHRoaXMudXBkYXRlKGUpLGZnKHRoaXMsdTIpLnNob3coKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJMb2FkaW5nU2hvdyIpKSl9aGlkZSgpeyFmZyh0aGlzLHUyKXx8IWZnKHRoaXMsdTIp''@;'; put 'put ''Py5pc0VuYWJsZWQoKXx8IXRoaXMuaXNWaXNpYmxlKCl8fCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUxvYWRpbmdIaWRlIil8fChmZyh0aGlzLHUyKS5oaWRlKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyTG9hZGluZ0hpZGUiKSl9dXBkYXRlKGUpe2lmKCF0aGlzLmlzRW5hYmxl''@;'; put 'put ''ZCgpfHwhZmcodGhpcyx1Mil8fCFmZyh0aGlzLHUyKT8uaXNFbmFibGVkKCkpcmV0dXJuO3RoaXMudXBkYXRlUGx1Z2luU2V0dGluZ3MoZSk7Y29uc3QgdD10aGlzLmhvdC5ndWlkLHI9dGhpcy5nZXRTZXR0aW5nKCJpY29uIiksaT10aGlzLmdldFNldHRpbmcoInRpdGxlIik/P3RoaXMuaG90''@;'; put 'put ''LmdldFRyYW5zbGF0ZWRQaHJhc2UoTXVlKSxvPXRoaXMuZ2V0U2V0dGluZygiZGVzY3JpcHRpb24iKSxhPWZ1bmN0aW9uIExLdCh7aWQ6bixpY29uOmUsdGl0bGU6dCxkZXNjcmlwdGlvbjpyfSl7cmV0dXJuYFxuICAgIDxkaXYgY2xhc3M9IiR7UXB9X19jb250ZW50Ij5cbiAgICAgIDxpIGNs''@;'; put 'put ''YXNzPSIke1FwfV9faWNvbiI+JHtlfTwvaT5cbiAgICAgIDxkaXYgY2xhc3M9IiR7UXB9X190ZXh0Ij5cbiAgICAgICAgPGgyIGlkPSIke259LSR7V3h9LXRpdGxlIiBjbGFzcz0iJHtRcH1fX3RpdGxlIj4ke3R9PC9oMj5cbiAgICAgICAgJHtyP2A8cCBpZD0iJHtufS0ke1d4fS1kZXNjcmlw''@;'; put 'put ''dGlvbiIgY2xhc3M9IiR7UXB9X19kZXNjcmlwdGlvbiI+JHtyfTwvcD5gOiIifVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGB9KHtpZDp0LGljb246cix0aXRsZTppLGRlc2NyaXB0aW9uOm99KTtmZyh0aGlzLHUyKS51cGRhdGUoe2NvbnRlbnQ6YSxjdXN0b21DbGFzc05hbWU6UXAs''@;'; put 'put ''YmFja2dyb3VuZDowPT09dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk/InNvbGlkIjoic2VtaS10cmFuc3BhcmVudCIsYTExeTp7cm9sZToiYWxlcnRkaWFsb2ciLGFyaWFMYWJlbGxlZGJ5OmAke3R9LSR7V3h9LXRpdGxlYCxhcmlhRGVzY3JpYmVkYnk6bz9gJHt0fS0ke1d4fS1kZXNjcmlw''@;'; put 'put ''dGlvbmA6dm9pZCAwfX0pfWRlc3Ryb3koKXtXcGUodGhpcyx1MixudWxsKSxzdXBlci5kZXN0cm95KCl9Y29uc3RydWN0b3IoLi4uZSl7c3VwZXIoLi4uZSksZnVuY3Rpb24gSEt0KG4sZSl7bFVlKG4sZSksZS5hZGQobil9KHRoaXMsdVVlKSxmdW5jdGlvbiBGS3QobixlLHQpe2xVZShuLGUp''@;'; put 'put ''LGUuc2V0KG4sdCl9KHRoaXMsdTIse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFdwZSh0aGlzLHUyLG51bGwpfX1mdW5jdGlvbiBqS3QoKXtmZyh0aGlzLHUyKS5mb2N1cygpfWNvbnN0IHgxPSJodC1ub3RpZmljYXRpb24iLFl4PVsidG9wLXN0YXJ0IiwidG9wLWVuZCIsImJvdHRvbS1z''@;'; put 'put ''dGFydCIsImJvdHRvbS1lbmQiXTtmdW5jdGlvbiBkVWUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQobil9ZnVuY3Rpb24gbzMobixlKXtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24gV0t0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obixkVWUobixlLCJnZXQiKSl9ZnVuY3Rpb24gVUYobixlLHQpeyhmdW5jdGlvbiB6S3QobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUg''@;'; put 'put ''c2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIEY2KG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gWUt0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixkVWUobixlLCJzZXQiKSx0KSx0fXZhciB4Qz1uZXcgV2Vha01hcCxvcT1uZXcgV2Vha01hcCx6Rj1uZXcgV2Vha01hcCx0OT1uZXcgV2Vha01hcCxXRj1uZXcgV2Vha01hcDtj''@;'; put 'put ''bGFzcyBhcXtpbnN0YWxsKCl7aWYobzModGhpcyx0OSkpcmV0dXJuO2NvbnN0IGU9bzModGhpcyx4Qykub3duZXJEb2N1bWVudCx0PWUuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9YCR7eDF9IGhhbmRzb250YWJsZWAsdC5zZXRBdHRyaWJ1dGUoImRpciIsbzModGhpcyx6Rik/''@;'; put 'put ''InJ0bCI6Imx0ciIpLFl4LmZvckVhY2gocj0+e2NvbnN0IGk9ZS5jcmVhdGVFbGVtZW50KCJkaXYiKTtpLmNsYXNzTmFtZT1gJHt4MX1fX3N0YWNrICR7eDF9X19zdGFjay0tJHtyfWAsaS5kYXRhc2V0Lmh0Tm90aWZpY2F0aW9uUG9zaXRpb249cixpLnRhYkluZGV4PS0xLHQuYXBwZW5kQ2hp''@;'; put 'put ''bGQoaSksbzModGhpcyxXRikuc2V0KHIsaSl9KSxvMyh0aGlzLHhDKS5hcHBlbmRDaGlsZCh0KSxGNih0aGlzLHQ5LHQpfWdldEhvc3QoKXtyZXR1cm4gbzModGhpcyx0OSl9Z2V0U3RhY2soZSl7cmV0dXJuIG8zKHRoaXMsV0YpLmdldChlKX1zZXRSdGwoZSl7RjYodGhpcyx6RixlKSxvMyh0''@;'; put 'put ''aGlzLHQ5KSYmbzModGhpcyx0OSkuc2V0QXR0cmlidXRlKCJkaXIiLGU/InJ0bCI6Imx0ciIpfXNldFNhbml0aXplcihlKXtGNih0aGlzLG9xLGUpfWNyZWF0ZVRvYXN0RWxlbWVudChlLHQscil7Y29uc3QgaT1vMyh0aGlzLHhDKS5vd25lckRvY3VtZW50LG89aS5jcmVhdGVFbGVtZW50KCJk''@;'; put 'put ''aXYiKSxhPSJlcnJvciI9PT1lLnZhcmlhbnQ7by5jbGFzc05hbWU9YCR7eDF9X190b2FzdCAke3gxfV9fdG9hc3QtLSR7ZS52YXJpYW50fWAsby5kYXRhc2V0Lmh0Tm90aWZpY2F0aW9uSWQ9ZS5pZCxvLnNldEF0dHJpYnV0ZSgicm9sZSIsYT8iYWxlcnQiOiJzdGF0dXMiKSxvLnNldEF0dHJp''@;'; put 'put ''YnV0ZSgiYXJpYS1saXZlIixhPyJhc3NlcnRpdmUiOiJwb2xpdGUiKSxvLnNldEF0dHJpYnV0ZSgiYXJpYS1hdG9taWMiLCJ0cnVlIiksciYmKG8uY2xhc3NMaXN0LmFkZChgJHt4MX1fX3RvYXN0LS1hbmltYXRlYCksby5jbGFzc0xpc3QuYWRkKGUucG9zaXRpb24uc3RhcnRzV2l0aCgidG9w''@;'; put 'put ''Iik/YCR7eDF9X190b2FzdC0tc3RhY2stdG9wYDpgJHt4MX1fX3RvYXN0LS1zdGFjay1ib3R0b21gKSk7Y29uc3QgbD1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuY2xhc3NOYW1lPWAke3gxfV9fdG9hc3QtaW5uZXJgO2NvbnN0IHU9aS5jcmVhdGVFbGVtZW50KCJkaXYiKTt1LmNsYXNzTmFt''@;'; put 'put ''ZT1gJHt4MX1fX2FjY2VudGAsdS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLGwuYXBwZW5kQ2hpbGQodSk7Y29uc3QgZz1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2lmKGcuY2xhc3NOYW1lPWAke3gxfV9fYm9keWAsZS50aXRsZSl7Y29uc3QgWj1pLmNyZWF0ZUVsZW1lbnQo''@;'; put 'put ''ImRpdiIpO1ouY2xhc3NOYW1lPWAke3gxfV9fdGl0bGVgLFoudGV4dENvbnRlbnQ9c20oZS50aXRsZSksZy5hcHBlbmRDaGlsZChaKX1jb25zdCBFPWkuY3JlYXRlRWxlbWVudCgiZGl2Iik7aWYoRS5jbGFzc05hbWU9YCR7eDF9X19tZXNzYWdlYCwic3RyaW5nIj09dHlwZW9mIGUubWVzc2Fn''@;'; put 'put ''ZT9fNyhFLGUubWVzc2FnZSxvMyh0aGlzLG9xKSwibm90aWZpY2F0aW9uIixvMyh0aGlzLHhDKSk6RS5hcHBlbmRDaGlsZChlLm1lc3NhZ2UpLGcuYXBwZW5kQ2hpbGQoRSksZS5hY3Rpb25zPy5sZW5ndGgpe2NvbnN0IFo9aS5jcmVhdGVFbGVtZW50KCJkaXYiKTtaLmNsYXNzTmFtZT1gJHt4''@;'; put 'put ''MX1fX2FjdGlvbnNgLGUuYWN0aW9ucy5mb3JFYWNoKChlZSx2ZSk9Pntjb25zdCBNZT1pLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO01lLnR5cGU9ImJ1dHRvbiIsTWUuY2xhc3NOYW1lPSJodC1idXR0b24gaHQtYnV0dG9uLS0iKygicHJpbWFyeSI9PT1lZS50eXBlPyJwcmltYXJ5Ijoic2Vj''@;'; put 'put ''b25kYXJ5IiksTWUudGV4dENvbnRlbnQ9c20oZWUubGFiZWwpLE1lLmRhdGFzZXQuaHROb3RpZmljYXRpb25BY3Rpb249U3RyaW5nKHZlKSxaLmFwcGVuZENoaWxkKE1lKX0pLGcuYXBwZW5kQ2hpbGQoWil9aWYobC5hcHBlbmRDaGlsZChnKSxlLmNsb3NhYmxlKXtjb25zdCBaPWkuY3JlYXRl''@;'; put 'put ''RWxlbWVudCgiYnV0dG9uIik7Wi50eXBlPSJidXR0b24iLFouY2xhc3NOYW1lPWAke3gxfV9fY2xvc2VgLFouc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIix0KSxsLmFwcGVuZENoaWxkKFopfW8uYXBwZW5kQ2hpbGQobCksby50YWJJbmRleD0tMSxsLnF1ZXJ5U2VsZWN0b3JBbGwoImJ1dHRv''@;'; put 'put ''biIpLmZvckVhY2goWj0+e1oudGFiSW5kZXg9LTF9KTtjb25zdCBPPW8zKHRoaXMseEMpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7cmV0dXJuIHI/Ty5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntPLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e28uY2xhc3NMaXN0LmFkZChgJHt4''@;'; put 'put ''MX1fX3RvYXN0LS12aXNpYmxlYCl9KX0pOm8uY2xhc3NMaXN0LmFkZChgJHt4MX1fX3RvYXN0LS12aXNpYmxlYCkse2VsZW1lbnQ6b319c3RhdGljIGdldEZvY3VzYWJsZXMoZSl7Y29uc3QgdD1BcnJheS5mcm9tKGUucXVlcnlTZWxlY3RvckFsbCgiYnV0dG9uIikpLmZpbHRlcihyPT4hci5k''@;'; put 'put ''aXNhYmxlZCk7cmV0dXJuIHQubGVuZ3RoPjA/dDpbZV19c3RhdGljIHNldFNlcXVlbnRpYWxGb2N1c1dpdGhpbkhvc3QoZSx0KXtpZighZSlyZXR1cm47Y29uc3Qgcj10PzA6LTE7ZS5xdWVyeVNlbGVjdG9yQWxsKGAuJHt4MX1fX3RvYXN0YCkuZm9yRWFjaChpPT57Y29uc3Qgbz1pLGE9QXJy''@;'; put 'put ''YXkuZnJvbShvLnF1ZXJ5U2VsZWN0b3JBbGwoImJ1dHRvbiIpKS5maWx0ZXIobD0+IWwuZGlzYWJsZWQpO2EuZm9yRWFjaChsPT57bC50YWJJbmRleD1yfSksby50YWJJbmRleD0wPT09YS5sZW5ndGg/cjotMX0pfWRlc3Ryb3koKXtvMyh0aGlzLHQ5KT8ucmVtb3ZlKCksRjYodGhpcyx0OSxu''@;'; put 'put ''dWxsKSxvMyh0aGlzLFdGKS5jbGVhcigpfWNvbnN0cnVjdG9yKHtvdmVybGF5RWxlbWVudDplLHNhbml0aXplcjp0LGlzUnRsOnJ9KXtVRih0aGlzLHhDLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxVRih0aGlzLG9xLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxVRih0aGlzLHpG''@;'; put 'put ''LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxVRih0aGlzLHQ5LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxVRih0aGlzLFdGLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxGNih0aGlzLHpGLCExKSxGNih0aGlzLHQ5LG51bGwpLEY2KHRoaXMsV0YsbmV3IE1hcCksRjYodGhp''@;'; put 'put ''cyx4QyxlKSxGNih0aGlzLG9xLHQpLEY2KHRoaXMsekYscil9fWZ1bmN0aW9uIGhVZShuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gZlVl''@;'; put 'put ''KG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIHlhKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIFpLdChuLGUpe3JldHVybiBlLmdldD9l''@;'; put 'put ''LmdldC5jYWxsKG4pOmUudmFsdWV9KG4sZlVlKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIFc0KG4sZSx0KXtoVWUobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIEdsKG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gR0t0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0''@;'; put 'put ''YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixmVWUobixlLCJzZXQiKSx0KSx0fWZ1bmN0aW9uIEJhKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVk''@;'; put 'put ''IHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiB0fWZ1bmN0aW9uIFZsKG4sZSl7aFVlKG4sZSksZS5hZGQobil9Y29uc3Qgc2Y9Im5vdGlmaWNhdGlvbiIsc3E9YHBsdWdpbjoke3NmfWAscFVlPWBwbHVnaW46JHtzZn06Z2xvYmFsYCxBQz1zZixxS3Q9bmV3''@;'; put 'put ''IFNldChZeCksS0t0PW5ldyBTZXQoWyJpbmZvIiwic3VjY2VzcyIsIndhcm5pbmciLCJlcnJvciJdKTt2YXIgVHU9bmV3IFdlYWtNYXAsWWg9bmV3IFdlYWtNYXAsbjk9bmV3IFdlYWtNYXAsU209bmV3IFdlYWtNYXAscjk9bmV3IFdlYWtNYXAsWUY9bmV3IFdlYWtNYXAsWng9bmV3IFdlYWtN''@;'; put 'put ''YXAsa0M9bmV3IFdlYWtNYXAsUkM9bmV3IFdlYWtNYXAsWXBlPW5ldyBXZWFrU2V0LG1VZT1uZXcgV2Vha1NldCxacGU9bmV3IFdlYWtNYXAsdlVlPW5ldyBXZWFrU2V0LEdwZT1uZXcgV2Vha1NldCwkcGU9bmV3IFdlYWtTZXQsX1VlPW5ldyBXZWFrU2V0LHlVZT1uZXcgV2Vha1NldCxaRj1u''@;'; put 'put ''ZXcgV2Vha1NldCxscT1uZXcgV2Vha1NldCxiVWU9bmV3IFdlYWtTZXQscXBlPW5ldyBXZWFrU2V0LEtwZT1uZXcgV2Vha1NldCxYcGU9bmV3IFdlYWtTZXQsd1VlPW5ldyBXZWFrU2V0LENVZT1uZXcgV2Vha1NldCxRcGU9bmV3IFdlYWtTZXQsSnBlPW5ldyBXZWFrTWFwLGVnZT1uZXcgV2Vh''@;'; put 'put ''a1NldCxTVWU9bmV3IFdlYWtTZXQsdGdlPW5ldyBXZWFrU2V0LEVVZT1uZXcgV2Vha1NldCxNVWU9bmV3IFdlYWtTZXQsVFVlPW5ldyBXZWFrU2V0LG5nZT1uZXcgV2Vha1NldCx4VWU9bmV3IFdlYWtTZXQsQVVlPW5ldyBXZWFrU2V0LHJnZT1uZXcgV2Vha1NldCxpZ2U9bmV3IFdlYWtTZXQs''@;'; put 'put ''a1VlPW5ldyBXZWFrU2V0LFJVZT1uZXcgV2Vha1NldCxJVWU9bmV3IFdlYWtTZXQsRFVlPW5ldyBXZWFrU2V0LExVZT1uZXcgV2Vha1NldCxPVWU9bmV3IFdlYWtTZXQsTlVlPW5ldyBXZWFrU2V0LEdGPW5ldyBXZWFrU2V0LEZVZT1uZXcgV2Vha1NldCxvZ2U9bmV3IFdlYWtTZXQ7Y2xhc3Mg''@;'; put 'put ''WEt0IGV4dGVuZHMgYWx7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHNmfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDM3NX1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57c3RhY2tMaW1pdDoxMCxhbmltYXRpb246ITB9fXN0YXRpYyBnZXQg''@;'; put 'put ''U0VUVElOR1NfVkFMSURBVE9SUygpe3JldHVybntzdGFja0xpbWl0OmU9PiJudW1iZXIiPT10eXBlb2YgZSYmZT4wJiZOdW1iZXIuaXNJbnRlZ2VyKGUpLGFuaW1hdGlvbjplPT4iYm9vbGVhbiI9PXR5cGVvZiBlfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClb''@;'; put 'put ''c2ZdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHlhKHRoaXMsVHUpfHxHbCh0aGlzLFR1LG5ldyBhcSh7b3ZlcmxheUVsZW1lbnQ6dGhpcy5ob3Qucm9vdE92ZXJsYXlzRWxlbWVudCxzYW5pdGl6ZXI6dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5zYW5pdGl6ZXIsaXNSdGw6dGhpcy5o''@;'; put 'put ''b3QuaXNSdGwoKX0pKSx5YSh0aGlzLFR1KS5pbnN0YWxsKCksQmEodGhpcyx3VWUsclh0KS5jYWxsKHRoaXMpLEJhKHRoaXMsQ1VlLGlYdCkuY2FsbCh0aGlzKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudCwiZm9jdXNpbiIseWEodGhp''@;'; put 'put ''cyxKcGUpLCEwKSx0aGlzLmFkZEhvb2soImFmdGVyVXBkYXRlU2V0dGluZ3MiLHlhKHRoaXMsWnBlKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQsInZpc2liaWxpdHljaGFuZ2UiLCgpPT57QmEodGhpcyxvZ2UscVVlKS5jYWxsKHRo''@;'; put 'put ''aXMpJiZCYSh0aGlzLEdGLHVxKS5jYWxsKHRoaXMpfSksc3VwZXIuZW5hYmxlUGx1Z2luKCksR2wodGhpcyxSQyxCYSh0aGlzLFlwZSxQVWUpLmNhbGwodGhpcykpKX11cGRhdGVQbHVnaW4oZSl7Y29uc3QgdD1CYSh0aGlzLFlwZSxQVWUpLmNhbGwodGhpcyk7ZSYmIm9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiBlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxzZikmJm51bGwhPT15YSh0aGlzLFJDKSYmQmEodGhpcyxtVWUsUUt0KS5jYWxsKHRoaXMseWEodGhpcyxSQyksdCl8fCh0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpKSxzdXBlci51cGRh''@;'; put 'put ''dGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5oaWRlQWxsKCksQmEodGhpcyxRcGUselVlKS5jYWxsKHRoaXMpLEJhKHRoaXMsbmdlLFpVZSkuY2FsbCh0aGlzKSxzdXBlci5kaXNhYmxlUGx1Z2luKCkseWEodGhpcyxUdSk/LmRlc3Ryb3koKSxHbCh0aGlzLFR1LG51bGwpLEdsKHRo''@;'; put 'put ''aXMsU20sbnVsbCksR2wodGhpcyxyOSwhMSksR2wodGhpcyxSQyxudWxsKX1zaG93TWVzc2FnZShlKXtpZighdGhpcy5lbmFibGVkKXJldHVybiIiO2NvbnN0IHQ9QmEodGhpcyx2VWUsSkt0KS5jYWxsKHRoaXMsZSk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlTm90aWZpY2F0''@;'; put 'put ''aW9uU2hvdyIsdCkpcmV0dXJuIiI7Y29uc3Qgcj10aGlzLmdldFNldHRpbmcoInN0YWNrTGltaXQiKTtyZXR1cm4gQmEodGhpcyxHcGUsSFVlKS5jYWxsKHRoaXMsdC5wb3NpdGlvbik+PXI/KHlhKHRoaXMsbjkpW3QucG9zaXRpb25dLnB1c2godCksdC5pZCk6KEJhKHRoaXMsJHBlLFZVZSku''@;'; put 'put ''Y2FsbCh0aGlzLHQpLHQuaWQpfWhpZGUoZSl7aWYoIXRoaXMuZW5hYmxlZHx8IWUpcmV0dXJuO2NvbnN0IHQ9eWEodGhpcyxZaCkuZ2V0KGUpO2lmKCF0KXJldHVybiB2b2lkIEJhKHRoaXMsTlVlLHZYdCkuY2FsbCh0aGlzLGUpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU5v''@;'; put 'put ''dGlmaWNhdGlvbkhpZGUiLGUpKXJldHVybiB2b2lkKHQuZHVyYXRpb25Ncz4wJiZ0LnJlbWFpbmluZ01zPD0wJiYodC5yZW1haW5pbmdNcz10LmR1cmF0aW9uTXMpKTtjb25zdCBpPXRoaXMuaG90LnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50LG89aSBpbnN0YW5jZW9mIHRoaXMuaG90LnJv''@;'; put 'put ''b3RXaW5kb3cuSFRNTEVsZW1lbnQmJnQuZWxlbWVudC5jb250YWlucyhpKTtCYSh0aGlzLHhVZSxjWHQpLmNhbGwodGhpcyx0LCEwKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJOb3RpZmljYXRpb25IaWRlIixlKSxCYSh0aGlzLE9VZSxtWHQpLmNhbGwodGhpcyx0Lm9wdGlvbnMucG9zaXRp''@;'; put 'put ''b24pLEJhKHRoaXMsTFVlLGdYdCkuY2FsbCh0aGlzLG8pfWhpZGVBbGwoKXt0aGlzLmVuYWJsZWQmJihZeC5mb3JFYWNoKHQ9Pnt5YSh0aGlzLG45KVt0XS5sZW5ndGg9MH0pLFsuLi55YSh0aGlzLFloKS5rZXlzKCldLmZvckVhY2godD0+dGhpcy5oaWRlKHQpKSl9aXNWaXNpYmxlKGUpe3Jl''@;'; put 'put ''dHVybiB2b2lkIDA9PT1lP3lhKHRoaXMsWWgpLnNpemU+MDp5YSh0aGlzLFloKS5oYXMoZSl9Z2V0UXVldWVTaXplKCl7cmV0dXJuIFl4LnJlZHVjZSgoZSx0KT0+ZSt5YSh0aGlzLG45KVt0XS5sZW5ndGgsMCl9ZGVzdHJveSgpe1l4LmZvckVhY2goZT0+e3lhKHRoaXMsbjkpW2VdLmxlbmd0''@;'; put 'put ''aD0wfSkseWEodGhpcyxZaCkuY2xlYXIoKSxCYSh0aGlzLFFwZSx6VWUpLmNhbGwodGhpcyksQmEodGhpcyxuZ2UsWlVlKS5jYWxsKHRoaXMpLHlhKHRoaXMsVHUpPy5kZXN0cm95KCksR2wodGhpcyxUdSxudWxsKSxHbCh0aGlzLFNtLG51bGwpLEdsKHRoaXMscjksITEpLEdsKHRoaXMsUkMs''@;'; put 'put ''bnVsbCksc3VwZXIuZGVzdHJveSgpfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLFZsKHRoaXMsWXBlKSxWbCh0aGlzLG1VZSksVmwodGhpcyx2VWUpLFZsKHRoaXMsR3BlKSxWbCh0aGlzLCRwZSksVmwodGhpcyxfVWUpLFZsKHRoaXMseVVlKSxWbCh0aGlzLFpGKSxWbCh0aGlzLGxx''@;'; put 'put ''KSxWbCh0aGlzLGJVZSksVmwodGhpcyxxcGUpLFZsKHRoaXMsS3BlKSxWbCh0aGlzLFhwZSksVmwodGhpcyx3VWUpLFZsKHRoaXMsQ1VlKSxWbCh0aGlzLFFwZSksVmwodGhpcyxlZ2UpLFZsKHRoaXMsU1VlKSxWbCh0aGlzLHRnZSksVmwodGhpcyxFVWUpLFZsKHRoaXMsTVVlKSxWbCh0aGlz''@;'; put 'put ''LFRVZSksVmwodGhpcyxuZ2UpLFZsKHRoaXMseFVlKSxWbCh0aGlzLEFVZSksVmwodGhpcyxyZ2UpLFZsKHRoaXMsaWdlKSxWbCh0aGlzLGtVZSksVmwodGhpcyxSVWUpLFZsKHRoaXMsSVVlKSxWbCh0aGlzLERVZSksVmwodGhpcyxMVWUpLFZsKHRoaXMsT1VlKSxWbCh0aGlzLE5VZSksVmwo''@;'; put 'put ''dGhpcyxHRiksVmwodGhpcyxGVWUpLFZsKHRoaXMsb2dlKSxXNCh0aGlzLFR1LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxXNCh0aGlzLFloLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxXNCh0aGlzLG45LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxXNCh0aGlzLFNtLHt3''@;'; put 'put ''cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxXNCh0aGlzLHI5LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxXNCh0aGlzLFlGLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxXNCh0aGlzLFp4LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxXNCh0aGlzLGtDLHt3cml0YWJsZToh''@;'; put 'put ''MCx2YWx1ZTp2b2lkIDB9KSxXNCh0aGlzLFJDLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxXNCh0aGlzLFpwZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksVzQodGhpcyxKcGUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEdsKHRoaXMsVHUsbnVsbCksR2wodGhpcyxZaCxu''@;'; put 'put ''ZXcgTWFwKSxHbCh0aGlzLG45LHsidG9wLXN0YXJ0IjpbXSwidG9wLWVuZCI6W10sImJvdHRvbS1zdGFydCI6W10sImJvdHRvbS1lbmQiOltdfSksR2wodGhpcyxTbSxudWxsKSxHbCh0aGlzLHI5LCExKSxHbCh0aGlzLFlGLCExKSxHbCh0aGlzLFp4LCExKSxHbCh0aGlzLGtDLCExKSxHbCh0''@;'; put 'put ''aGlzLFJDLG51bGwpLEdsKHRoaXMsWnBlLCgpPT57aWYoIXRoaXMuZW5hYmxlZHx8IXlhKHRoaXMsVHUpKXJldHVybjtjb25zdCByPXRoaXMuaG90LnJvb3RFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7InJ0bCI9PT1yfHwibHRyIj09PXI/eWEodGhpcyxUdSkuc2V0UnRsKCJydGwiPT09''@;'; put 'put ''cik6eWEodGhpcyxUdSkuc2V0UnRsKHRoaXMuaG90LmlzUnRsKCkpLHlhKHRoaXMsVHUpLnNldFNhbml0aXplcih0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnNhbml0aXplcil9KSxHbCh0aGlzLEpwZSx0PT57aWYoMD09PXlhKHRoaXMsWWgpLnNpemUpcmV0dXJuO2NvbnN0IHI9eWEodGhpcyxU''@;'; put 'put ''dSk/LmdldEhvc3QoKSxpPXQudGFyZ2V0O2lmKGkgaW5zdGFuY2VvZiB0aGlzLmhvdC5yb290V2luZG93LkhUTUxFbGVtZW50JiZyKXtpZihyLmNvbnRhaW5zKGkpKXtpZihudWxsIT09eWEodGhpcyxTbSkpcmV0dXJuO2NvbnN0IG89dC5yZWxhdGVkVGFyZ2V0O3JldHVybiB2b2lkKG8gaW5z''@;'; put 'put ''dGFuY2VvZiB0aGlzLmhvdC5yb290V2luZG93LkhUTUxFbGVtZW50JiZ0aGlzLmhvdC5yb290V3JhcHBlckVsZW1lbnQuY29udGFpbnMobykmJiFyLmNvbnRhaW5zKG8pJiZHbCh0aGlzLFNtLG8pKX1CYSh0aGlzLFpGLGNxKS5jYWxsKHRoaXMpfX0pfX1mdW5jdGlvbiBQVWUoKXtyZXR1cm57''@;'; put 'put ''c3RhY2tMaW1pdDp0aGlzLmdldFNldHRpbmcoInN0YWNrTGltaXQiKSxhbmltYXRpb246dGhpcy5nZXRTZXR0aW5nKCJhbmltYXRpb24iKX19ZnVuY3Rpb24gUUt0KG4sZSl7cmV0dXJuIG4uc3RhY2tMaW1pdD09PWUuc3RhY2tMaW1pdCYmbi5hbmltYXRpb249PT1lLmFuaW1hdGlvbn1mdW5j''@;'; put 'put ''dGlvbiBKS3Qobil7KCFDYShuKXx8InN0cmluZyIhPXR5cGVvZiBuLm1lc3NhZ2UmJiEodHlwZW9mIEhUTUxFbGVtZW50PCJ1IiYmbi5tZXNzYWdlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSYmSnIoIk5vdGlmaWNhdGlvbi5zaG93TWVzc2FnZSBleHBlY3RzIGFuIG9iamVjdCB3aXRoIGEg''@;'; put 'put ''YG1lc3NhZ2VgIHN0cmluZyBvciBIVE1MRWxlbWVudC4iKTtjb25zdCBlPWBodG4tJHtWVygpfWAsdD1uLnZhcmlhbnQmJktLdC5oYXMobi52YXJpYW50KT9uLnZhcmlhbnQ6ImluZm8iLHI9bi5wb3NpdGlvbiYmcUt0LmhhcyhuLnBvc2l0aW9uKT9uLnBvc2l0aW9uOiJib3R0b20tZW5kIixp''@;'; put 'put ''PSJudW1iZXIiPT10eXBlb2Ygbi5kdXJhdGlvbiYmbi5kdXJhdGlvbj49MD9uLmR1cmF0aW9uOjRlMyxvPSJib29sZWFuIiE9dHlwZW9mIG4uY2xvc2FibGV8fG4uY2xvc2FibGUsYT1BcnJheS5pc0FycmF5KG4uYWN0aW9ucyk/bi5hY3Rpb25zLm1hcChsPT4oKCFDYShsKXx8InN0cmluZyIh''@;'; put 'put ''PXR5cGVvZiBsLmxhYmVsfHwiZnVuY3Rpb24iIT10eXBlb2YgbC5jYWxsYmFjaykmJkpyKCJFYWNoIG5vdGlmaWNhdGlvbiBhY3Rpb24gbmVlZHMgYGxhYmVsYCAoc3RyaW5nKSBhbmQgYGNhbGxiYWNrYCAoZnVuY3Rpb24pLiIpLHtsYWJlbDpsLmxhYmVsLHR5cGU6InByaW1hcnkiPT09bC50''@;'; put 'put ''eXBlPyJwcmltYXJ5Ijoic2Vjb25kYXJ5IixjYWxsYmFjazpsLmNhbGxiYWNrfSkpOltdO3JldHVybntpZDplLHZhcmlhbnQ6dCx0aXRsZToic3RyaW5nIj09dHlwZW9mIG4udGl0bGU/bi50aXRsZTp2b2lkIDAsbWVzc2FnZTpuLm1lc3NhZ2UsZHVyYXRpb246aSxwb3NpdGlvbjpyLGNsb3Nh''@;'; put 'put ''YmxlOm8sYWN0aW9uczphfX1mdW5jdGlvbiBIVWUobil7bGV0IGU9MDtyZXR1cm4geWEodGhpcyxZaCkuZm9yRWFjaCh0PT57dC5vcHRpb25zLnBvc2l0aW9uPT09biYmKGUrPTEpfSksZX1mdW5jdGlvbiBWVWUobil7Y29uc3QgZT10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKFR1ZSks''@;'; put 'put ''dD10aGlzLmdldFNldHRpbmcoImFuaW1hdGlvbiIpLHtlbGVtZW50OnJ9PXlhKHRoaXMsVHUpLmNyZWF0ZVRvYXN0RWxlbWVudChuLGUsdCksaT15YSh0aGlzLFR1KS5nZXRTdGFjayhuLnBvc2l0aW9uKTtpfHxKcihgVW5rbm93biBub3RpZmljYXRpb24gcG9zaXRpb24gIiR7bi5wb3NpdGlv''@;'; put 'put ''bn0iLmApLG4ucG9zaXRpb24uc3RhcnRzV2l0aCgidG9wIik/aS5wcmVwZW5kKHIpOmkuYXBwZW5kQ2hpbGQociksbi5wb3NpdGlvbi5zdGFydHNXaXRoKCJib3R0b20iKSYmdGhpcy5ob3Qucm9vdFdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmVuYWJsZWQmJihpLnNj''@;'; put 'put ''cm9sbFRvcD1pLnNjcm9sbEhlaWdodCl9KTtjb25zdCBvPW4uZHVyYXRpb24sYT17aWQ6bi5pZCxvcHRpb25zOm4sZWxlbWVudDpyLGR1cmF0aW9uTXM6byxyZW1haW5pbmdNczpvLHBhdXNlZDohMX07eWEodGhpcyxZaCkuc2V0KG4uaWQsYSksQmEodGhpcyxfVWUsZVh0KS5jYWxsKHRoaXMs''@;'; put 'put ''YSkseWEodGhpcyxyOSkmJkJhKHRoaXMsbHEsYWdlKS5jYWxsKHRoaXMpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck5vdGlmaWNhdGlvblNob3ciLG4uaWQsbiksbz4wJiZCYSh0aGlzLEdGLHVxKS5jYWxsKHRoaXMpfWZ1bmN0aW9uIGVYdChuKXtuLnRvYXN0RXZlbnREaXNwb3NlcnM9W3Ro''@;'; put 'put ''aXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobi5lbGVtZW50LCJjbGljayIsZT0+e0JhKHRoaXMseVVlLHRYdCkuY2FsbCh0aGlzLGUsbil9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKG4uZWxlbWVudCwibW91c2VlbnRlciIsKCk9PntuLnBhdXNlZD0hMH0p''@;'; put 'put ''LHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobi5lbGVtZW50LCJtb3VzZWxlYXZlIiwoKT0+e24ucGF1c2VkPSExLG4uZHVyYXRpb25Ncz4wJiYhdGhpcy5ob3Qucm9vdERvY3VtZW50LmhpZGRlbiYmQmEodGhpcyxHRix1cSkuY2FsbCh0aGlzKX0pXX1mdW5jdGlvbiB0WHQo''@;'; put 'put ''bixlKXtjb25zdCB0PW4udGFyZ2V0O2lmKCEodCBpbnN0YW5jZW9mIHRoaXMuaG90LnJvb3RXaW5kb3cuSFRNTEVsZW1lbnQpKXJldHVybjtpZih0LmNsb3Nlc3QoYC4ke3gxfV9fY2xvc2VgKSlyZXR1cm4gdm9pZCB0aGlzLmhpZGUoZS5pZCk7Y29uc3Qgcj10LmNsb3Nlc3QoIltkYXRhLWh0''@;'; put 'put ''LW5vdGlmaWNhdGlvbi1hY3Rpb25dIik7aWYoIXJ8fCFlLmVsZW1lbnQuY29udGFpbnMocikpcmV0dXJuO2NvbnN0IGk9TnVtYmVyLnBhcnNlSW50KHIuZGF0YXNldC5odE5vdGlmaWNhdGlvbkFjdGlvbj8/IiIsMTApLG89ZS5vcHRpb25zLmFjdGlvbnNbaV07byYmby5jYWxsYmFjaygpfWZ1''@;'; put 'put ''bmN0aW9uIGNxKCl7Y29uc3Qgbj15YSh0aGlzLFR1KT8uZ2V0SG9zdCgpO24mJmFxLnNldFNlcXVlbnRpYWxGb2N1c1dpdGhpbkhvc3QobiwhMSksR2wodGhpcyxyOSwhMSl9ZnVuY3Rpb24gYWdlKCl7Y29uc3Qgbj15YSh0aGlzLFR1KT8uZ2V0SG9zdCgpOyFufHwwPT09eWEodGhpcyxZaCku''@;'; put 'put ''c2l6ZXx8KGFxLnNldFNlcXVlbnRpYWxGb2N1c1dpdGhpbkhvc3QobiwhMCksR2wodGhpcyxyOSwhMCkpfWZ1bmN0aW9uIG5YdCgpe2NvbnN0IG49eWEodGhpcyxUdSk/LmdldEhvc3QoKTtpZighbnx8MD09PXlhKHRoaXMsWWgpLnNpemUpcmV0dXJuO2NvbnN0IHQ9dGhpcy5ob3Qucm9vdERv''@;'; put 'put ''Y3VtZW50LmFjdGl2ZUVsZW1lbnQ7dCBpbnN0YW5jZW9mIHRoaXMuaG90LnJvb3RXaW5kb3cuSFRNTEVsZW1lbnQmJiFuLmNvbnRhaW5zKHQpJiZHbCh0aGlzLFNtLHQpLHRoaXMuaG90Lmxpc3RlbigpLHRoaXMuaG90LmdldEZvY3VzU2NvcGVNYW5hZ2VyKCkuYWN0aXZhdGVTY29wZShzZil9''@;'; put 'put ''ZnVuY3Rpb24gQlVlKCl7Y29uc3Qgbj10aGlzLmhvdC5nZXRGb2N1c1Njb3BlTWFuYWdlcigpO24uZ2V0QWN0aXZlU2NvcGVJZCgpIT09c18mJm4uYWN0aXZhdGVTY29wZShzXyl9ZnVuY3Rpb24galVlKCl7Y29uc3Qgbj10aGlzLmhvdC5nZXRGb2N1c1Njb3BlTWFuYWdlcigpO2lmKEdsKHRo''@;'; put 'put ''aXMsa0MsITApLG4uZ2V0QWN0aXZlU2NvcGVJZCgpPT09c2Ypbi5kZWFjdGl2YXRlU2NvcGUoc2YpO2Vsc2V7R2wodGhpcyxrQywhMSksQmEodGhpcyxaRixjcSkuY2FsbCh0aGlzKTtjb25zdCBlPXlhKHRoaXMsU20pO0dsKHRoaXMsU20sbnVsbCksZT8uaXNDb25uZWN0ZWQmJnRoaXMuaG90''@;'; put 'put ''LmdldEZvY3VzTWFuYWdlcigpLmZvY3VzRWxlbWVudChlLHtwcmV2ZW50U2Nyb2xsOiEwfSksQmEodGhpcyxxcGUsQlVlKS5jYWxsKHRoaXMpfX1mdW5jdGlvbiBVVWUoKXtjb25zdCBuPXRoaXMuaG90LnJvb3REb2N1bWVudDt5YSh0aGlzLFR1KT8uZ2V0SG9zdCgpPy5jb250YWlucyhuLmFj''@;'; put 'put ''dGl2ZUVsZW1lbnQpJiZCYSh0aGlzLEtwZSxqVWUpLmNhbGwodGhpcyl9ZnVuY3Rpb24gclh0KCl7eWEodGhpcyxaeCl8fCh0aGlzLmhvdC5nZXRGb2N1c1Njb3BlTWFuYWdlcigpLnJlZ2lzdGVyU2NvcGUoc2YseWEodGhpcyxUdSkuZ2V0SG9zdCgpLHtzaG9ydGN1dHNDb250ZXh0TmFtZTpz''@;'; put 'put ''cSxydW5Pbmx5SWY6KCk9PnlhKHRoaXMsWWgpLnNpemU+MCxlbmFibGVGb2N1c0NhdGNoZXJzOiExLG9uQWN0aXZhdGU6KCk9Pnt5YSh0aGlzLFR1KT8uZ2V0SG9zdCgpJiYoQmEodGhpcyxscSxhZ2UpLmNhbGwodGhpcyksQmEodGhpcyxrVWUsZFh0KS5jYWxsKHRoaXMpKX0sb25EZWFjdGl2''@;'; put 'put ''YXRlOigpPT57aWYoQmEodGhpcyxaRixjcSkuY2FsbCh0aGlzKSx5YSh0aGlzLGtDKSl7R2wodGhpcyxrQywhMSk7Y29uc3QgZT15YSh0aGlzLFNtKTtHbCh0aGlzLFNtLG51bGwpLGU/LmlzQ29ubmVjdGVkJiZ0aGlzLmhvdC5nZXRGb2N1c01hbmFnZXIoKS5mb2N1c0VsZW1lbnQoZSx7cHJl''@;'; put 'put ''dmVudFNjcm9sbDohMH0pLEJhKHRoaXMscXBlLEJVZSkuY2FsbCh0aGlzKX19fSksR2wodGhpcyxaeCwhMCkpfWZ1bmN0aW9uIGlYdCgpe2NvbnN0IG49dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksZT1uLmdldENvbnRleHQoc3EpPz9uLmFkZENvbnRleHQoc3EpLHQ9bi5nZXRPckNy''@;'; put 'put ''ZWF0ZUNvbnRleHQocFVlLCJnbG9iYWwiKSxyPW4uZ2V0Q29udGV4dChzXyksaT17a2V5czpbWyJmNiJdXSxwcmV2ZW50RGVmYXVsdDohMCxjYWxsYmFjazooKT0+e0JhKHRoaXMsYlVlLG5YdCkuY2FsbCh0aGlzKX0scnVuT25seUlmOigpPT5CYSh0aGlzLElVZSxmWHQpLmNhbGwodGhpcyks''@;'; put 'put ''Z3JvdXA6QUN9O3QuYWRkU2hvcnRjdXQoaSksciYmci5hZGRTaG9ydGN1dChpKSxlLmFkZFNob3J0Y3V0KHtrZXlzOltbIkVzY2FwZSJdXSxjYWxsYmFjazooKT0+QmEodGhpcyxYcGUsVVVlKS5jYWxsKHRoaXMpLHJ1bk9ubHlJZjooKT0+ITA9PT15YSh0aGlzLFR1KT8uZ2V0SG9zdCgpPy5j''@;'; put 'put ''b250YWlucyh0aGlzLmhvdC5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudCksZ3JvdXA6QUN9KSxlLmFkZFNob3J0Y3V0KHtrZXlzOltbIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMCxjYWxsYmFjazooKT0+QmEodGhpcyxUVWUsbFh0KS5jYWxsKHRoaXMpLHJ1bk9ubHlJZjooKT0+QmEodGhp''@;'; put 'put ''cyxFVWUsYVh0KS5jYWxsKHRoaXMpLGdyb3VwOkFDfSksZS5hZGRTaG9ydGN1dCh7a2V5czpbWyJTaGlmdCIsIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMCxjYWxsYmFjazooKT0+QmEodGhpcyxYcGUsVVVlKS5jYWxsKHRoaXMpLHJ1bk9ubHlJZjooKT0+QmEodGhpcyxNVWUsc1h0KS5jYWxs''@;'; put 'put ''KHRoaXMpLGdyb3VwOkFDfSl9ZnVuY3Rpb24gelVlKCl7Y29uc3Qgbj10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKTtuLmdldENvbnRleHQoc3EpPy5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKEFDKSxuLmdldENvbnRleHQocFVlKT8ucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChBQyksbi5n''@;'; put 'put ''ZXRDb250ZXh0KHNfKT8ucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChBQyl9ZnVuY3Rpb24gV1VlKCl7Y29uc3Qgbj15YSh0aGlzLFR1KT8uZ2V0SG9zdCgpO2lmKCFuKXJldHVybltdO2NvbnN0IGU9Wy4uLm4ucXVlcnlTZWxlY3RvckFsbChgLiR7eDF9X190b2FzdGApXSx0PVtdO2ZvcihsZXQg''@;'; put 'put ''cj0wO3I8ZS5sZW5ndGg7cis9MSl0LnB1c2goLi4uYXEuZ2V0Rm9jdXNhYmxlcyhlW3JdKSk7cmV0dXJuIHR9ZnVuY3Rpb24gb1h0KCl7cmV0dXJuIEJhKHRoaXMsZWdlLFdVZSkuY2FsbCh0aGlzKVswXX1mdW5jdGlvbiBZVWUoKXtpZigwPT09eWEodGhpcyxZaCkuc2l6ZSlyZXR1cm4gbnVs''@;'; put 'put ''bDtjb25zdCBuPXRoaXMuaG90LnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50LGU9eWEodGhpcyxUdSk/LmdldEhvc3QoKTtpZighKG4gaW5zdGFuY2VvZiB0aGlzLmhvdC5yb290V2luZG93LkhUTUxFbGVtZW50JiZlPy5jb250YWlucyhuKSkpcmV0dXJuIG51bGw7Y29uc3QgdD1CYSh0aGlz''@;'; put 'put ''LGVnZSxXVWUpLmNhbGwodGhpcyk7aWYoMD09PXQubGVuZ3RoKXJldHVybiBudWxsO2NvbnN0IHI9dC5pbmRleE9mKG4pO3JldHVybi0xPT09cj9udWxsOih5YSh0aGlzLHI5KXx8QmEodGhpcyxscSxhZ2UpLmNhbGwodGhpcykse2xpc3Q6dCxpZHg6cn0pfWZ1bmN0aW9uIGFYdCgpe2NvbnN0''@;'; put 'put ''IG49QmEodGhpcyx0Z2UsWVVlKS5jYWxsKHRoaXMpO3JldHVybiBudWxsIT09biYmbi5pZHg9PT1uLmxpc3QubGVuZ3RoLTF9ZnVuY3Rpb24gc1h0KCl7Y29uc3Qgbj1CYSh0aGlzLHRnZSxZVWUpLmNhbGwodGhpcyk7cmV0dXJuIG51bGwhPT1uJiYwPT09bi5pZHh9ZnVuY3Rpb24gbFh0KCl7''@;'; put 'put ''Y29uc3Qgbj10aGlzLmhvdC5nZXRGb2N1c1Njb3BlTWFuYWdlcigpO0dsKHRoaXMsa0MsITEpLG4uZ2V0QWN0aXZlU2NvcGVJZCgpPT09c2Y/bi5kZWFjdGl2YXRlU2NvcGUoc2YpOkJhKHRoaXMsWkYsY3EpLmNhbGwodGhpcyksdGhpcy5ob3QubGlzdGVuKCksbi5hY3RpdmF0ZVNjb3BlKHNf''@;'; put 'put ''LGM2LlRBQl9GUk9NX0FCT1ZFKSxHbCh0aGlzLFNtLG51bGwpfWZ1bmN0aW9uIFpVZSgpe3lhKHRoaXMsWngpJiYodGhpcy5ob3QuZ2V0Rm9jdXNTY29wZU1hbmFnZXIoKS51bnJlZ2lzdGVyU2NvcGUoc2YpLEdsKHRoaXMsWngsITEpKX1mdW5jdGlvbiBjWHQobixlKXtuLnRvYXN0RXZlbnRE''@;'; put 'put ''aXNwb3NlcnMmJihuLnRvYXN0RXZlbnREaXNwb3NlcnMuZm9yRWFjaCh0PT50KCkpLG4udG9hc3RFdmVudERpc3Bvc2Vycz1udWxsKSx5YSh0aGlzLFloKS5kZWxldGUobi5pZCksZSYmbi5lbGVtZW50LnJlbW92ZSgpfWZ1bmN0aW9uIHVYdChuKXtjb25zdCBlPXlhKHRoaXMsVHUpPy5nZXRI''@;'; put 'put ''b3N0KCk7cmV0dXJuISFlJiZuIGluc3RhbmNlb2YgdGhpcy5ob3Qucm9vdFdpbmRvdy5IVE1MRWxlbWVudCYmZS5jb250YWlucyhuKX1mdW5jdGlvbiBHVWUobil7bGV0IGU9ITE7cmV0dXJuIHlhKHRoaXMsWWgpLmZvckVhY2godD0+e3QuZWxlbWVudC5jb250YWlucyhuKSYmKGU9ITApfSks''@;'; put 'put ''ZX1mdW5jdGlvbiAkVWUoKXt0aGlzLmhvdC5saXN0ZW4oKTtjb25zdCBuPXRoaXMuaG90LmdldEZvY3VzU2NvcGVNYW5hZ2VyKCk7bi5nZXRBY3RpdmVTY29wZUlkKCk9PT1zZiYmbi5kZWFjdGl2YXRlU2NvcGUoc2YpLG4uYWN0aXZhdGVTY29wZShzZil9ZnVuY3Rpb24gZFh0KCl7Y29uc3Qg''@;'; put 'put ''bj10aGlzLmhvdC5yb290RG9jdW1lbnQ7aWYoIXRoaXMuZW5hYmxlZHx8MD09PXlhKHRoaXMsWWgpLnNpemV8fEJhKHRoaXMscmdlLEdVZSkuY2FsbCh0aGlzLG4uYWN0aXZlRWxlbWVudCkpcmV0dXJuO2NvbnN0IGU9QmEodGhpcyxTVWUsb1h0KS5jYWxsKHRoaXMpO2UmJnRoaXMuaG90Lmdl''@;'; put 'put ''dEZvY3VzTWFuYWdlcigpLmZvY3VzRWxlbWVudChlKX1mdW5jdGlvbiBoWHQobil7aWYoIShuIGluc3RhbmNlb2YgdGhpcy5ob3Qucm9vdFdpbmRvdy5IVE1MRWxlbWVudCkpcmV0dXJuITE7Y29uc3QgZT1uLmNsb3Nlc3QoIi5odC1yb290LXdyYXBwZXIiKTtyZXR1cm4gbnVsbCE9PWU/ZT09''@;'; put 'put ''PXRoaXMuaG90LnJvb3RXcmFwcGVyRWxlbWVudDp0aGlzLmhvdC5yb290RG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmh0LXJvb3Qtd3JhcHBlciIpLmxlbmd0aDw9MX1mdW5jdGlvbiBmWHQoKXtpZighdGhpcy5lbmFibGVkfHwwPT09eWEodGhpcyxZaCkuc2l6ZSlyZXR1cm4hMTtjb25z''@;'; put 'put ''dCBuPXlhKHRoaXMsVHUpPy5nZXRIb3N0KCk7aWYoIW4pcmV0dXJuITE7Y29uc3QgZT10aGlzLmhvdC5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudDtyZXR1cm4hKGUgaW5zdGFuY2VvZiB0aGlzLmhvdC5yb290V2luZG93LkhUTUxFbGVtZW50JiZuLmNvbnRhaW5zKGUpKSYmQmEodGhpcyxS''@;'; put 'put ''VWUsaFh0KS5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gcFh0KCl7QmEodGhpcyxLcGUsalVlKS5jYWxsKHRoaXMpfWZ1bmN0aW9uIGdYdChuPSExKXtjb25zdCBlPXRoaXMuaG90LnJvb3REb2N1bWVudCx0PXlhKHRoaXMsVHUpPy5nZXRIb3N0KCkscj1lLmFjdGl2ZUVsZW1lbnQ7aWYoeWEodGhp''@;'; put 'put ''cyxZaCkuc2l6ZT4wKXtjb25zdCBsPXIgaW5zdGFuY2VvZiB0aGlzLmhvdC5yb290V2luZG93LkhUTUxFbGVtZW50JiYhMD09PXQ/LmNvbnRhaW5zKHIpO3JldHVybiB2b2lkKChsJiYhQmEodGhpcyxyZ2UsR1VlKS5jYWxsKHRoaXMscil8fCFsJiZuKSYmQmEodGhpcyxpZ2UsJFVlKS5jYWxs''@;'; put 'put ''KHRoaXMpKX1jb25zdCBpPXlhKHRoaXMscjkpLG89QmEodGhpcyxBVWUsdVh0KS5jYWxsKHRoaXMsZS5hY3RpdmVFbGVtZW50KTsoaXx8bnx8bykmJkJhKHRoaXMsRFVlLHBYdCkuY2FsbCh0aGlzKX1mdW5jdGlvbiBtWHQobil7Y29uc3QgZT10aGlzLmdldFNldHRpbmcoInN0YWNrTGltaXQi''@;'; put 'put ''KSx0PW47Zm9yKDt5YSh0aGlzLG45KVt0XS5sZW5ndGg+MCYmQmEodGhpcyxHcGUsSFVlKS5jYWxsKHRoaXMsbik8ZTspe2NvbnN0IHI9eWEodGhpcyxuOSlbdF0uc2hpZnQoKTtCYSh0aGlzLCRwZSxWVWUpLmNhbGwodGhpcyxyKX19ZnVuY3Rpb24gdlh0KG4pe1l4LmZvckVhY2goZT0+e2Nv''@;'; put 'put ''bnN0IHQ9eWEodGhpcyxuOSlbZV0scj10LmZpbmRJbmRleChpPT5pLmlkPT09bik7cj49MCYmdC5zcGxpY2UociwxKX0pfWZ1bmN0aW9uIHVxKCl7eWEodGhpcyxZRil8fCF0aGlzLmVuYWJsZWR8fChHbCh0aGlzLFlGLCEwKSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57R2wodGhp''@;'; put 'put ''cyxZRiwhMSksdGhpcy5lbmFibGVkJiYoQmEodGhpcyxGVWUsX1h0KS5jYWxsKHRoaXMpLEJhKHRoaXMsb2dlLHFVZSkuY2FsbCh0aGlzKSYmQmEodGhpcyxHRix1cSkuY2FsbCh0aGlzKSl9LDIwMCkpfWZ1bmN0aW9uIF9YdCgpe2NvbnN0IGU9IXRoaXMuaG90LnJvb3REb2N1bWVudC5oaWRk''@;'; put 'put ''ZW4sdD1bXTt5YSh0aGlzLFloKS5mb3JFYWNoKHI9PntyLmR1cmF0aW9uTXM8PTB8fHIucGF1c2VkfHwhZXx8KHIucmVtYWluaW5nTXMtPTIwMCxyLnJlbWFpbmluZ01zPD0wJiZ0LnB1c2goci5pZCkpfSksdC5mb3JFYWNoKHI9PnRoaXMuaGlkZShyKSl9ZnVuY3Rpb24gcVVlKCl7aWYodGhp''@;'; put 'put ''cy5ob3Qucm9vdERvY3VtZW50LmhpZGRlbilyZXR1cm4hMTtsZXQgZT0hMTtyZXR1cm4geWEodGhpcyxZaCkuZm9yRWFjaCh0PT57dC5kdXJhdGlvbk1zPjAmJiF0LnBhdXNlZCYmKGU9ITApfSksZX1mdW5jdGlvbiBLVWUobixlLHQpe2lmKCFlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJhdHRlbXB0ZWQgdG8gIit0KyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQobil9ZnVuY3Rpb24gQTEobixlKXtyZXR1cm4gZnVuY3Rpb24gYlh0KG4sZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwobik6ZS52YWx1ZX0obixLVWUobixlLCJnZXQiKSl9''@;'; put 'put ''ZnVuY3Rpb24gZHEobixlLHQpeyhmdW5jdGlvbiB5WHQobixlKXtpZihlLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIFA2''@;'; put 'put ''KG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gd1h0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixLVWUobixl''@;'; put 'put ''LCJzZXQiKSx0KSx0fWNvbnN0IGswPSJodC1lbXB0eS1kYXRhLXN0YXRlIixTWHQ9YDxkaXYgZGF0YS1yZWY9ImVtcHR5RGF0YVN0YXRlRWxlbWVudCIgY2xhc3M9IiR7azB9IGhhbmRzb250YWJsZSI+XG4gIDxkaXYgY2xhc3M9IiR7azB9X19jb250ZW50LXdyYXBwZXIiPlxuICAgIDxkaXYg''@;'; put 'put ''ZGF0YS1yZWY9ImVtcHR5RGF0YVN0YXRlSW5uZXIiIGNsYXNzPSIke2swfV9fY29udGVudC13cmFwcGVyLWlubmVyIj48L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5gO3ZhciBocT1uZXcgV2Vha01hcCxzZ2U9bmV3IFdlYWtNYXAsdDA9bmV3IFdlYWtNYXAsV189bmV3IFdlYWtNYXA7Y2xhc3Mg''@;'; put 'put ''QVh0e2luc3RhbGwoKXtpZihBMSh0aGlzLHQwKT8uZW1wdHlEYXRhU3RhdGVFbGVtZW50KXJldHVybjtjb25zdCBlPXN3YCR7U1h0fWA7UDYodGhpcyx0MCxlLnJlZnMpO2NvbnN0e2VtcHR5RGF0YVN0YXRlSW5uZXI6dCxlbXB0eURhdGFTdGF0ZUVsZW1lbnQ6cn09QTEodGhpcyx0MCk7S28o''@;'; put 'put ''dCxbYjQoLTEpXSksS28ocixbYjQoLTEpXSksQTEodGhpcyxocSkmJkExKHRoaXMsaHEpLmFwcGVuZENoaWxkKGUuZnJhZ21lbnQpfWdldEVsZW1lbnQoKXtyZXR1cm4gQTEodGhpcyx0MCk/LmVtcHR5RGF0YVN0YXRlRWxlbWVudH1nZXRGb2N1c2FibGVFbGVtZW50cygpe2NvbnN0e2VtcHR5''@;'; put 'put ''RGF0YVN0YXRlQnV0dG9uczplLGVtcHR5RGF0YVN0YXRlSW5uZXI6dH09QTEodGhpcyx0MCkscj1BcnJheS5mcm9tKGU/LmNoaWxkcmVuPz9bXSk7cmV0dXJuIDA9PT1yLmxlbmd0aD9bdF06cn1zaG93KCl7QTEodGhpcyx0MCk/LmVtcHR5RGF0YVN0YXRlRWxlbWVudCYmKEExKHRoaXMsdDAp''@;'; put 'put ''LmVtcHR5RGF0YVN0YXRlRWxlbWVudC5zdHlsZS5kaXNwbGF5PSJibG9jayIpfWhpZGUoKXtBMSh0aGlzLHQwKT8uZW1wdHlEYXRhU3RhdGVFbGVtZW50JiYoQTEodGhpcyxXXyk/LnJlbW92ZSgpLFA2KHRoaXMsV18sbnVsbCksQTEodGhpcyx0MCkuZW1wdHlEYXRhU3RhdGVFbGVtZW50LnN0''@;'; put 'put ''eWxlLmRpc3BsYXk9Im5vbmUiKX11cGRhdGVDb250ZW50KGUsdD0hMSl7Y29uc3R7ZW1wdHlEYXRhU3RhdGVFbGVtZW50OnIsZW1wdHlEYXRhU3RhdGVJbm5lcjppfT1BMSh0aGlzLHQwKTtsZXQgbztvPSJzdHJpbmciPT10eXBlb2YgZT97dGl0bGU6ZX06e3RpdGxlOmU/LnRpdGxlLGRlc2Ny''@;'; put 'put ''aXB0aW9uOmU/LmRlc2NyaXB0aW9uLGJ1dHRvbnM6ZT8uYnV0dG9uc307Y29uc3QgYT1zd2Akeygoe3RpdGxlOm4sZGVzY3JpcHRpb246ZSxidXR0b25zOnR9LHI9ITEpPT5gXG4gICR7cj9gPGRpdiBjbGFzcz0iJHtrMH1fX3NwaW5uZXIiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2Rpdj5gOiIi''@;'; put 'put ''fVxuICA8ZGl2IGNsYXNzPSIke2swfV9fY29udGVudCI+XG4gICAgJHtuP2A8aDIgY2xhc3M9IiR7azB9X190aXRsZSI+JHtzbShuKX08L2gyPmA6IiJ9XG4gICAgJHtlP2A8cCBjbGFzcz0iJHtrMH1fX2Rlc2NyaXB0aW9uIj4ke3NtKGUpfTwvcD5gOiIifVxuICA8L2Rpdj5cbiAgPGRpdlxu''@;'; put 'put ''ICAgIGRhdGEtcmVmPSJlbXB0eURhdGFTdGF0ZUJ1dHRvbnMiXG4gICAgY2xhc3M9IiR7azB9X19idXR0b25zJHt0Py5sZW5ndGgmJnQubGVuZ3RoPjA/YCAke2swfV9fYnV0dG9ucy0taGFzLWJ1dHRvbnNgOiIifSJcbiAgPiR7IXImJnQ/Lmxlbmd0aCYmdC5sZW5ndGg+MD90Lm1hcChvPT5g''@;'; put 'put ''PGJ1dHRvbiBjbGFzcz0iaHQtYnV0dG9uIGh0LWJ1dHRvbi0tJHtvLnR5cGV9Ij4ke3NtKG8udGV4dCl9PC9idXR0b24+YCkuam9pbigiIik6IiJ9PC9kaXY+YCkobyx0KX1gO3Q/KFlyKHIsYCR7azB9LS1sb2FkaW5nYCksS28oaSxbWyJhcmlhLWJ1c3kiLCJ0cnVlIl1dKSk6KGtvKHIsYCR7''@;'; put 'put ''azB9LS1sb2FkaW5nYCksdzQoaSwiYXJpYS1idXN5IikpLFA2KHRoaXMsdDAsey4uLkExKHRoaXMsdDApLC4uLmEucmVmc30pLGkuaW5uZXJIVE1MPSIiLGkuYXBwZW5kQ2hpbGQoYS5mcmFnbWVudCksIXQmJm8uYnV0dG9ucz8ubGVuZ3RoJiZvLmJ1dHRvbnMubGVuZ3RoPjAmJkFycmF5LmZy''@;'; put 'put ''b20oQTEodGhpcyx0MCkuZW1wdHlEYXRhU3RhdGVCdXR0b25zLmNoaWxkcmVuKS5mb3JFYWNoKChsLHUpPT57bC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsby5idXR0b25zW3VdLmNhbGxiYWNrKX0pfXVwZGF0ZUNsYXNzTmFtZXMoZSl7Y29uc3R7ZW1wdHlEYXRhU3RhdGVFbGVtZW50OnR9''@;'; put 'put ''PUExKHRoaXMsdDApO2UuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpPjAmJmUuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCk+MD9Zcih0LGAke2swfS0tZGlzYWJsZS10b3AtYm9yZGVyYCk6a28odCxgJHtrMH0tLWRpc2FibGUtdG9wLWJvcmRlcmApLGUuY291bnRSZW5kZXJhYmxlUm93cygpPjAm''@;'; put 'put ''JmUuZ2V0Um93SGVhZGVyc0NvdW50KCk+MD9Zcih0LGAke2swfS0tZGlzYWJsZS1pbmxpbmUtYm9yZGVyYCk6a28odCxgJHtrMH0tLWRpc2FibGUtaW5saW5lLWJvcmRlcmApLGUuaGFzSG9yaXpvbnRhbFNjcm9sbCgpJiYhZS5pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpP1ly''@;'; put 'put ''KHQsYCR7azB9LS1kaXNhYmxlLWJvdHRvbS1ib3JkZXJgKTprbyh0LGAke2swfS0tZGlzYWJsZS1ib3R0b20tYm9yZGVyYCl9dXBkYXRlU2l6ZShlLHQ9ITEpe2NvbnN0e2VtcHR5RGF0YVN0YXRlRWxlbWVudDpyfT1BMSh0aGlzLHQwKSxpPWUuaGFzSG9yaXpvbnRhbFNjcm9sbCgpP0dkKGUu''@;'; put 'put ''aG90LnJvb3REb2N1bWVudCk6MCxvPWUuY291bnRSZW5kZXJhYmxlUm93cygpLGE9ZS5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksbD1lLmdldENvbHVtbkhlYWRlcnNDb3VudCgpLGc9bz4wfHwhMD09PXQmJmE+MDtyLnN0eWxlLnRvcD1hPjA/YCR7ZS5nZXRDb2x1bW5IZWFkZXJIZWlnaHQo''@;'; put 'put ''KX1weGA6IjBweCIsci5zdHlsZS5pbnNldElubGluZVN0YXJ0PSIwcHgiO2NvbnN0IEU9e2VsZW1lbnQ6QTEodGhpcyxXXyl9OyhmdW5jdGlvbiBNWHQobixlLHQscixpKXtpZigwIT09dClyZXR1cm4gaS5lbGVtZW50Py5yZW1vdmUoKSx2b2lkKGkuZWxlbWVudD1udWxsKTtpLmVsZW1lbnR8''@;'; put 'put ''fChpLmVsZW1lbnQ9bi5jcmVhdGVFbGVtZW50KCJkaXYiKSxpLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChgJHtyfS1wbGFjZWhvbGRlcmApLGUuX3d0Lnd0VGFibGUuaG9sZGVyLmFwcGVuZENoaWxkKGkuZWxlbWVudCkpLGkuZWxlbWVudC5zdHlsZS53aWR0aD0iMTAwJSIsaS5lbGVtZW50LnN0''@;'; put 'put ''eWxlLmhlaWdodD0iMTUwcHgifSkoQTEodGhpcyxzZ2UpLGUsbyxrMCxFKSxQNih0aGlzLFdfLEUuZWxlbWVudCk7Y29uc3QgTz1mdW5jdGlvbiBUWHQobixlLHQpe2xldCByPW4uZ2V0V29ya3NwYWNlV2lkdGgoKTtyZXR1cm4gbi5pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygp''@;'; put 'put ''P2U+MD9yPW4uZ2V0VG90YWxUYWJsZVdpZHRoKCk6dCYmKHI9bi5nZXRWaWV3cG9ydFdpZHRoKCkpOm4uZ2V0VGFibGVXaWR0aCgpLW4uZ2V0Um93SGVhZGVyV2lkdGgoKTxuLmdldFZpZXdwb3J0V2lkdGgoKSYmZT4wJiYocj1uLmdldFRhYmxlV2lkdGgoKSkscn0oZSxhLGcpLFo9ZnVuY3Rp''@;'; put 'put ''b24geFh0KG4sZSx0LHIpe2xldCBpPW4uZ2V0VGFibGVIZWlnaHQoKTtyZXR1cm4gbi5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKXx8bi5oYXNWZXJ0aWNhbFNjcm9sbCgpP2k9ZT4wP24uaG90LmdldFRhYmxlSGVpZ2h0KCktbi5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTpuLmhv''@;'; put 'put ''dC5nZXRUYWJsZUhlaWdodCgpOnQ+MCYmZT4wP2k9bi5nZXRWaWV3cG9ydEhlaWdodCgpLXI6dD4wJiYwPT09ZSYmKGk9bi5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1yKSxpfShlLGEsbCxpKTtyLnN0eWxlLndpZHRoPWAke099cHhgLHIuc3R5bGUuaGVpZ2h0PWAke1p9cHhgfWRlc3Ryb3koKXtB''@;'; put 'put ''MSh0aGlzLHQwKT8uZW1wdHlEYXRhU3RhdGVFbGVtZW50Py5yZW1vdmUoKSxBMSh0aGlzLFdfKT8ucmVtb3ZlKCksUDYodGhpcyxXXyxudWxsKSxQNih0aGlzLHQwLG51bGwpfWNvbnN0cnVjdG9yKHtncmlkQ29udGFpbmVyOmUscm9vdERvY3VtZW50OnR9KXtkcSh0aGlzLGhxLHt3cml0YWJs''@;'; put 'put ''ZTohMCx2YWx1ZTp2b2lkIDB9KSxkcSh0aGlzLHNnZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZHEodGhpcyx0MCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksZHEodGhpcyxXXyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUDYodGhpcyx0MCxudWxsKSxQNih0aGlzLFdf''@;'; put 'put ''LG51bGwpLFA2KHRoaXMsaHEsZSksUDYodGhpcyxzZ2UsdCksdGhpcy5pbnN0YWxsKCl9fWZ1bmN0aW9uIFhVZShuLGUpe2lmKGUuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0''@;'; put 'put ''Iil9ZnVuY3Rpb24gUVVlKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrdCsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KG4pfWZ1bmN0aW9uIERjKG4sZSl7cmV0dXJuIGZ1bmN0aW9uIGtYdChuLGUp''@;'; put 'put ''e3JldHVybiBlLmdldD9lLmdldC5jYWxsKG4pOmUudmFsdWV9KG4sUVVlKG4sZSwiZ2V0IikpfWZ1bmN0aW9uIFlfKG4sZSx0KXtYVWUobixlKSxlLnNldChuLHQpfWZ1bmN0aW9uIHRoKG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24gUlh0KG4sZSx0KXtpZihlLnNldCllLnNldC5jYWxsKG4sdCk7''@;'; put 'put ''ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT10fX0obixRVWUobixlLCJzZXQiKSx0KSx0fWZ1bmN0aW9uIFBkKG4sZSx0KXtpZighZS5oYXMobikpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiB0fWZ1bmN0aW9uIFk0KG4sZSl7WFVlKG4sZSksZS5hZGQobil9Y29uc3QgSUM9ImVtcHR5RGF0YVN0YXRlIiwkRj1PYmplY3QuZnJlZXplKHtVTktOT1dOOiJ1bmtub3duIixGSUxU''@;'; put 'put ''RVJTOiJmaWx0ZXJzIixMT0FESU5HOiJsb2FkaW5nIn0pLExYdD1gcGx1Z2luOiR7SUN9YDt2YXIgaTk9bmV3IFdlYWtNYXAsazE9bmV3IFdlYWtNYXAscUY9bmV3IFdlYWtNYXAsbzk9bmV3IFdlYWtNYXAsWjQ9bmV3IFdlYWtNYXAsSlVlPW5ldyBXZWFrU2V0LGV6ZT1uZXcgV2Vha1NldCxs''@;'; put 'put ''Z2U9bmV3IFdlYWtTZXQsdHplPW5ldyBXZWFrU2V0LG56ZT1uZXcgV2Vha1NldCxmcT1uZXcgV2Vha1NldCxEQz1uZXcgV2Vha1NldCxjZ2U9bmV3IFdlYWtTZXQsS0Y9bmV3IFdlYWtTZXQsdWdlPW5ldyBXZWFrU2V0LHJ6ZT1uZXcgV2Vha1NldCxkZ2U9bmV3IFdlYWtNYXAsaGdlPW5ldyBX''@;'; put 'put ''ZWFrTWFwLGZnZT1uZXcgV2Vha01hcDtjbGFzcyBPWHQgZXh0ZW5kcyBhbHtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gSUN9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzcwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybnttZXNzYWdlOnZv''@;'; put 'put ''aWQgMH19c3RhdGljIGdldCBTRVRUSU5HU19WQUxJREFUT1JTKCl7cmV0dXJue21lc3NhZ2U6ZT0+InN0cmluZyI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZXx8dm9pZCAwPT09ZXx8ISFmdW5jdGlvbiBJWHQobil7cmV0dXJuIENhKG4pfShlKSYmKHR5cGVvZiBlLnRpdGxlPiJ1''@;'; put 'put ''Inx8InN0cmluZyI9PXR5cGVvZiBlLnRpdGxlKSYmKHR5cGVvZiBlLmRlc2NyaXB0aW9uPiJ1Inx8InN0cmluZyI9PXR5cGVvZiBlLmRlc2NyaXB0aW9uKSYmKHR5cGVvZiBlLmJ1dHRvbnM+InUifHxBcnJheS5pc0FycmF5KGUuYnV0dG9ucykmJmUuYnV0dG9ucy5ldmVyeSh0PT4ib2JqZWN0''@;'; put 'put ''Ij09dHlwZW9mIHQmJiJzdHJpbmciPT10eXBlb2YgdC50ZXh0JiYic3RyaW5nIj09dHlwZW9mIHQudHlwZSYmWyJwcmltYXJ5Iiwic2Vjb25kYXJ5Il0uaW5jbHVkZXModC50eXBlKSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY2FsbGJhY2spKX19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhv''@;'; put 'put ''dC5nZXRTZXR0aW5ncygpW0lDXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fChEYyh0aGlzLGsxKXx8KHRoKHRoaXMsazEsbmV3IEFYdCh7Z3JpZENvbnRhaW5lcjp0aGlzLmhvdC5yb290R3JpZEVsZW1lbnQscm9vdERvY3VtZW50OnRoaXMuaG90LnJvb3REb2N1bWVudH0pKSxQZCh0''@;'; put 'put ''aGlzLHR6ZSxQWHQpLmNhbGwodGhpcyksUGQodGhpcyxKVWUsTlh0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsRGModGhpcyxkZ2UpKSx0aGlzLmFkZEhvb2soImFmdGVyUmVuZGVyIixEYyh0aGlzLGhnZSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSb3dTZXF1ZW5jZUNh''@;'; put 'put ''Y2hlVXBkYXRlIiwoKT0+e1BkKHRoaXMsREMsR3gpLmNhbGwodGhpcyl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ29sdW1uU2VxdWVuY2VDYWNoZVVwZGF0ZSIsKCk9PntQZCh0aGlzLERDLEd4KS5jYWxsKHRoaXMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVGaWx0ZXIiLERjKHRoaXMsZmdlKSks''@;'; put 'put ''dGhpcy5hZGRIb29rKCJiZWZvcmVEYXRhUHJvdmlkZXJGZXRjaCIsZT0+e2Uuc2tpcExvYWRpbmd8fFBkKHRoaXMsZXplLEZYdCkuY2FsbCh0aGlzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJEYXRhUHJvdmlkZXJGZXRjaCIsKCk9PlBkKHRoaXMsbGdlLGl6ZSkuY2FsbCh0aGlzKSksdGhpcy5h''@;'; put 'put ''ZGRIb29rKCJhZnRlckRhdGFQcm92aWRlckZldGNoRXJyb3IiLCgpPT5QZCh0aGlzLGxnZSxpemUpLmNhbGwodGhpcykpLHN1cGVyLmVuYWJsZVBsdWdpbigpLFBkKHRoaXMsREMsR3gpLmNhbGwodGhpcykpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxl''@;'; put 'put ''UGx1Z2luKCksUGQodGhpcyxLRixwcSkuY2FsbCh0aGlzKSx0aGlzLmlzVmlzaWJsZSgpJiZEYyh0aGlzLGsxKT8uc2hvdygpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aCh0aGlzLFo0LCExKSxQZCh0aGlzLG56ZSxIWHQpLmNhbGwodGhpcyksRGModGhpcyxrMSk/''@;'; put 'put ''LmRlc3Ryb3koKSx0aCh0aGlzLGsxLG51bGwpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1pc1Zpc2libGUoKXtyZXR1cm4gRGModGhpcyxpOSl9ZGVzdHJveSgpe3RoKHRoaXMsWjQsITEpLHRoKHRoaXMsaTksITEpLERjKHRoaXMsazEpPy5kZXN0cm95KCksdGgodGhpcyxrMSxudWxsKSx0aCh0''@;'; put 'put ''aGlzLHFGLCExKSx0aCh0aGlzLG85LG51bGwpLHN1cGVyLmRlc3Ryb3koKX1jb25zdHJ1Y3RvciguLi5lKXtzdXBlciguLi5lKSxZNCh0aGlzLEpVZSksWTQodGhpcyxlemUpLFk0KHRoaXMsbGdlKSxZNCh0aGlzLHR6ZSksWTQodGhpcyxuemUpLFk0KHRoaXMsZnEpLFk0KHRoaXMsREMpLFk0''@;'; put 'put ''KHRoaXMsY2dlKSxZNCh0aGlzLEtGKSxZNCh0aGlzLHVnZSksWTQodGhpcyxyemUpLFlfKHRoaXMsaTkse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFlfKHRoaXMsazEse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFlfKHRoaXMscUYse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0p''@;'; put 'put ''LFlfKHRoaXMsbzkse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFlfKHRoaXMsWjQse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLFlfKHRoaXMsZGdlLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxZXyh0aGlzLGhnZSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksWV8odGhp''@;'; put 'put ''cyxmZ2Use3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHRoKHRoaXMsaTksITEpLHRoKHRoaXMsazEsbnVsbCksdGgodGhpcyxxRiwhMSksdGgodGhpcyxvOSxudWxsKSx0aCh0aGlzLFo0LCExKSx0aCh0aGlzLGRnZSwoKT0+e1BkKHRoaXMsREMsR3gpLmNhbGwodGhpcyksdGhpcy5ob3Qu''@;'; put 'put ''cmVuZGVyKCl9KSx0aCh0aGlzLGhnZSwoKT0+e0RjKHRoaXMsazEpPy5nZXRFbGVtZW50KCkmJnRoaXMuaXNWaXNpYmxlKCkmJnRoaXMuaG90LnZpZXcmJihEYyh0aGlzLGsxKS51cGRhdGVTaXplKHRoaXMuaG90LnZpZXcsRGModGhpcyxaNCkpLERjKHRoaXMsazEpLnVwZGF0ZUNsYXNzTmFt''@;'; put 'put ''ZXModGhpcy5ob3QudmlldykpfSksdGgodGhpcyxmZ2UsdD0+e3RoKHRoaXMscUYsdD8ubGVuZ3RoPjApLHRoaXMuaXNWaXNpYmxlKCkmJlBkKHRoaXMsS0YscHEpLmNhbGwodGhpcyl9KX19ZnVuY3Rpb24gTlh0KCl7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihEYyh0aGlz''@;'; put 'put ''LGsxKS5nZXRFbGVtZW50KCksIndoZWVsIixuPT57UGQodGhpcyxyemUsVlh0KS5jYWxsKHRoaXMsbil9KX1mdW5jdGlvbiBGWHQoKXtEYyh0aGlzLFo0KXx8KHRoKHRoaXMsWjQsITApLFBkKHRoaXMsREMsR3gpLmNhbGwodGhpcykpfWZ1bmN0aW9uIGl6ZSgpe0RjKHRoaXMsWjQpJiYodGgo''@;'; put 'put ''dGhpcyxaNCwhMSksUGQodGhpcyx1Z2UsYXplKS5jYWxsKHRoaXMpLFBkKHRoaXMsREMsR3gpLmNhbGwodGhpcyksdGhpcy5ob3QucmVuZGVyKCkpfWZ1bmN0aW9uIFBYdCgpe3RoaXMuaG90LmdldEZvY3VzU2NvcGVNYW5hZ2VyKCkucmVnaXN0ZXJTY29wZShJQyxEYyh0aGlzLGsxKS5nZXRF''@;'; put 'put ''bGVtZW50KCkse3Nob3J0Y3V0c0NvbnRleHROYW1lOkxYdCxydW5Pbmx5SWY6KCk9PnRoaXMuaXNWaXNpYmxlKCksb25BY3RpdmF0ZTpuPT57Y29uc3QgZT1EYyh0aGlzLGsxKT8uZ2V0Rm9jdXNhYmxlRWxlbWVudHMoKT8/W107ZS5sZW5ndGg+MCYmKCJ0YWJfZnJvbV9hYm92ZSI9PT1uP2Uu''@;'; put 'put ''YXQoMCk/LmZvY3VzKCk6InRhYl9mcm9tX2JlbG93Ij09PW4mJmUuYXQoLTEpPy5mb2N1cygpKX19KX1mdW5jdGlvbiBIWHQoKXt0aGlzLmhvdC5nZXRGb2N1c1Njb3BlTWFuYWdlcigpLnVucmVnaXN0ZXJTY29wZShJQyl9ZnVuY3Rpb24gcGdlKG4pe2NvbnN0IGU9dGhpcy5nZXRTZXR0aW5n''@;'; put 'put ''KCJtZXNzYWdlIik7bGV0IHQ7aWYodD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lKG4pOmUsInN0cmluZyI9PXR5cGVvZiB0JiYodD17dGl0bGU6dH0pLCF0Py50aXRsZSYmIXQ/LmRlc2NyaXB0aW9uJiYhdD8uYnV0dG9ucyl7Y29uc3Qgcj17fTtyZXR1cm4gbj09PSRGLkZJTFRFUlM/KHIudGl0''@;'; put 'put ''bGU9dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShSdWUpLHIuZGVzY3JpcHRpb249dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShJdWUpLHIuYnV0dG9ucz1be3RleHQ6dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShEdWUpLHR5cGU6InNlY29uZGFyeSIsY2FsbGJhY2s6KCk9''@;'; put 'put ''Pntjb25zdCBpPXRoaXMuaG90LmdldFBsdWdpbigiZmlsdGVycyIpO2kmJihpLmNsZWFyQ29uZGl0aW9ucygpLGkuZmlsdGVyKCkpfX1dKTpuPT09JEYuTE9BRElORz8oci50aXRsZT10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKEx1ZSksci5kZXNjcmlwdGlvbj10aGlzLmhvdC5nZXRU''@;'; put 'put ''cmFuc2xhdGVkUGhyYXNlKE91ZSkpOihyLnRpdGxlPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoQXVlKSxyLmRlc2NyaXB0aW9uPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2Uoa3VlKSkscn1yZXR1cm4gdH1mdW5jdGlvbiBHeCgpe2lmKHRoaXMuaG90LnZpZXcpe2lmKERjKHRo''@;'; put 'put ''aXMsWjQpKXJldHVybiB2b2lkKERjKHRoaXMsaTkpP1BkKHRoaXMsS0YscHEpLmNhbGwodGhpcyk6UGQodGhpcyxjZ2Usb3plKS5jYWxsKHRoaXMpKTswPT09dGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCl8fDA9PT10aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZVJv''@;'; put 'put ''d3MoKT9QZCh0aGlzLGNnZSxvemUpLmNhbGwodGhpcyk6UGQodGhpcyx1Z2UsYXplKS5jYWxsKHRoaXMpfX1mdW5jdGlvbiBvemUoKXtEYyh0aGlzLGk5KXx8KHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVFbXB0eURhdGFTdGF0ZVNob3ciKSxQZCh0aGlzLEtGLHBxKS5jYWxsKHRoaXMpLERj''@;'; put 'put ''KHRoaXMsazEpPy5zaG93KCksdGgodGhpcyxpOSwhMCksdGgodGhpcyxvOSx0aGlzLmhvdC5zZWxlY3Rpb24uZXhwb3J0U2VsZWN0aW9uKCkpLHRoaXMuaG90LmdldEZvY3VzU2NvcGVNYW5hZ2VyKCkuYWN0aXZhdGVTY29wZShJQyksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRW1wdHlEYXRh''@;'; put 'put ''U3RhdGVTaG93IikpfWZ1bmN0aW9uIHBxKCl7RGModGhpcyxaNCk/RGModGhpcyxrMSk/LnVwZGF0ZUNvbnRlbnQoUGQodGhpcyxmcSxwZ2UpLmNhbGwodGhpcywkRi5MT0FESU5HKSwhMCk6RGModGhpcyxxRik/RGModGhpcyxrMSk/LnVwZGF0ZUNvbnRlbnQoUGQodGhpcyxmcSxwZ2UpLmNh''@;'; put 'put ''bGwodGhpcywkRi5GSUxURVJTKSwhMSk6RGModGhpcyxrMSk/LnVwZGF0ZUNvbnRlbnQoUGQodGhpcyxmcSxwZ2UpLmNhbGwodGhpcywkRi5VTktOT1dOKSwhMSl9ZnVuY3Rpb24gYXplKCl7RGModGhpcyxpOSkmJih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRW1wdHlEYXRhU3RhdGVIaWRl''@;'; put 'put ''IiksRGModGhpcyxrMSk/LmhpZGUoKSx0aCh0aGlzLGk5LCExKSx0aGlzLmhvdC5nZXRGb2N1c1Njb3BlTWFuYWdlcigpLmRlYWN0aXZhdGVTY29wZShJQyksRGModGhpcyxvOSkmJkRjKHRoaXMsbzkpLnJhbmdlcy5sZW5ndGg+MD8odGhpcy5ob3Quc2VsZWN0aW9uLmltcG9ydFNlbGVjdGlv''@;'; put 'put ''bih7Li4uRGModGhpcyxvOSksYWN0aXZlUmFuZ2U6RGModGhpcyxvOSkuYWN0aXZlUmFuZ2V9KSx0aGlzLmhvdC52aWV3LnJlbmRlcigpLHRoKHRoaXMsbzksbnVsbCkpOnRoaXMuaG90LnNlbGVjdENlbGwoMCwwLHZvaWQgMCx2b2lkIDAsITEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckVt''@;'; put 'put ''cHR5RGF0YVN0YXRlSGlkZSIpKX1mdW5jdGlvbiBWWHQobil7Y29uc3QgdD1uLndoZWVsRGVsdGFYPz8wLHI9TnVtYmVyLmlzTmFOKG4uZGVsdGFYKT8tMSp0Om4uZGVsdGFYOzAhPT1yJiZ0aGlzLmhvdC52aWV3Lmhhc0hvcml6b250YWxTY3JvbGwoKSYmIXRoaXMuaG90LnZpZXcuaXNIb3Jp''@;'; put 'put ''em9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSYmKHRoaXMuaG90LnZpZXcuc2V0VGFibGVTY3JvbGxQb3NpdGlvbih7bGVmdDp0aGlzLmhvdC52aWV3LmdldFRhYmxlU2Nyb2xsUG9zaXRpb24oKS5sZWZ0K3J9KSxuLnByZXZlbnREZWZhdWx0KCkpfWZ1bmN0aW9uIFhGKCl7KGZ1bmN0aW9u''@;'; put 'put ''IEVOdCgpe0owKEk3KSxKMChIZGUpLEowKHFEZSksSjAoemRlKSxKMChLRGUpLEowKE9kZSksSjAoWERlKSxKMChRRGUpLEowKEpEZSksSjAockxlKSxKMChvTGUpLEowKGRfKSxKMChXZGUpLEowKEZMZSl9KSgpLGZ1bmN0aW9uIHFOdCgpe0MwKElPKSxDMChNVCksQzAob2hlKSxDMChpaGUp''@;'; put 'put ''LEMwKHNoZSksQzAocmhlKSxDMChaTGUpLEMwKHFMZSksQzAoU1opLEMwKEVaKSxDMChwaGUpLEMwKEQ3KSxDMChmaGUpLEMwKGNoZSl9KCksZnVuY3Rpb24gbEZ0KCl7ZTYoTE8pLGU2KG1oZSksZTYoTVopLGU2KFRaKSxlNihBWiksZTYoX2hlKSxlNih5aGUpLGU2KHhaKX0oKSxmdW5jdGlv''@;'; put 'put ''biBWRnQoKXtVZihjRnQpLFVmKGRGdCksVWYoaEZ0KSxVZihnRnQpLFVmKG1GdCksVWYodkZ0KSxVZihfRnQpLFVmKERGdCksVWYoTkZ0KSxVZihGRnQpLFVmKFBGdCksVWYoa0RlKSxVZihIRnQpfSgpLGZ1bmN0aW9uIEJYdCgpe29sKEZPKSxvbChhUHQpLG9sKEhPKSxvbChrUHQpLG9sKE9Q''@;'; put 'put ''dCksb2wobU5lKSxvbChNSHQpLG9sKFFIdCksb2woWVZ0KSxvbChzQnQpLG9sKE1CdCksb2woYmp0KSxvbChPanQpLG9sKElHKSxvbChmenQpLG9sKGdZdCksb2woWVl0KSxvbChlWnQpLG9sKGNadCksb2woX1p0KSxvbChSWnQpLG9sKFZadCksb2wobkd0KSxvbChjR3QpLG9sKGpHdCksb2wo''@;'; put 'put ''R0d0KSxvbChLR3QpLG9sKEkkdCksb2wocnF0KSxvbChncXQpLG9sKEFxdCksb2woWXF0KSxvbChYcXQpLG9sKG9LdCksb2wodkt0KSxvbChpcSksb2woQkt0KSxvbChYS3QpLG9sKE9YdCl9KCl9bGV0IEVtPSgoKT0+e3ZhciBuO2NsYXNzIGV7c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSl9LHRoaXMuXHUwMjc1bW9kPUdpKHt0eXBlOmV9KSx0aGlzLlx1MDI3NWluaj1taSh7aW1wb3J0czpbcW9dfSkpfXJldHVybiBuKCksZX0pKCksJHg9KCgpPT57dmFyIG47Y2xhc3MgZXtuZ09uSW5pdCgpe31zdGF0aWMjZT1uPSgpPT4o''@;'; put 'put ''dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKX0sdGhpcy5cdTAyNzVtb2Q9R2koe3R5cGU6ZX0pLHRoaXMuXHUwMjc1aW5qPW1pKHtwcm92aWRlcnM6W21UZV0saW1wb3J0czpbcW8saGQsV2QscTAsRW1dfSkpfXJldHVybiBuKCksZX0pKCksUUY9KCgpPT57dmFy''@;'; put 'put ''IG47Y2xhc3MgZXtzdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKX0sdGhpcy5cdTAyNzVtb2Q9R2koe3R5cGU6ZX0pLHRoaXMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltxb119KSl9cmV0dXJuIG4oKSxlfSkoKSxzemU9KCgpPT57dmFy''@;'; put 'put ''IG47Y2xhc3MgZXtzdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKX0sdGhpcy5cdTAyNzVtb2Q9R2koe3R5cGU6ZX0pLHRoaXMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltxbyxxMCxxbyxoZF19KSl9cmV0dXJuIG4oKSxlfSkoKSxMQz0o''@;'; put 'put ''KCk9Pnt2YXIgbjtjbGFzcyBle3N0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpfSx0aGlzLlx1MDI3NW1vZD1HaSh7dHlwZTplfSksdGhpcy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3FvLGhkLHEwLFdkLCR4LFFGLEVtLHN6ZV19KSl9''@;'; put 'put ''cmV0dXJuIG4oKSxlfSkoKTtmdW5jdGlvbiBsemUobil7cmV0dXJuIG4ucmVwbGFjZSgvWyUmO10vZywiIil9Y2xhc3MgZ2dle2NvbnN0cnVjdG9yKCl7dGhpcy5xdWV1ZT1bXX1hZGRUb1F1ZXVlKGUpe3RoaXMucXVldWUucHVzaCguLi5lKX19Y29uc3Qgalh0PW5ldyBTZXQoWyJkYXRlIiwi''@;'; put 'put ''dGltZSIsImRhdGV0aW1lIiwiaW50bC1kYXRlIiwiaW50bC10aW1lIiwiaW50bC1kYXRldGltZSJdKTtmdW5jdGlvbiBtZ2UoKXtyZXR1cm4gbWdlPUNyKGZ1bmN0aW9uKihuLGUsdCxyPTApe2NvbnN0IGk9bi5nZXRQbHVnaW4oImV4cG9ydEZpbGUiKSxvPXtmaWxlbmFtZTp0fHwiZXhwb3J0''@;'; put 'put ''Iixjb2xIZWFkZXJzOiEwfSxhPW4uZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxsPW4uY291bnRSb3dzKCktMSx1PW4uY291bnRDb2xzKCktMSxnPSEhYSYmYS5mcm9tLnJvdzwwJiZhLmZyb20uY29sPDA7aWYoYSYmIWEuaXNTaW5nbGVDZWxsKCkmJiFnKXtjb25zdCBlZT1NYXRoLm1heCgwLE1h''@;'; put 'put ''dGgubWluKGEuZnJvbS5yb3csYS50by5yb3cpKSx2ZT1NYXRoLm1heCgwLE1hdGgubWluKGEuZnJvbS5jb2wsYS50by5jb2wpKSxNZT1NYXRoLm1heChhLmZyb20ucm93LGEudG8ucm93KSxIZT1NYXRoLm1heChhLmZyb20uY29sLGEudG8uY29sKTtvLnJhbmdlPVtlZSxNYXRoLm1heCh2ZSxy''@;'; put 'put ''KSxNZSxIZV19aWYoIW8ucmFuZ2UmJnI+MCYmKG8ucmFuZ2U9WzAscixsLHVdKSwiY3N2Ij09PWUpcmV0dXJuIHZvaWQgaS5kb3dubG9hZEZpbGUoImNzdiIsbyk7Y29uc3QgRT1bXSxPPW5ldyBTZXQsWj0oZWUsdmUsTWUpPT57aWYoTy5oYXMoTWUpKXJldHVybjtPLmFkZChNZSk7Y29uc3Qg''@;'; put 'put ''SGU9alh0LmhhcyhNZS50eXBlKSxXZT0ic3RyaW5nIj09dHlwZW9mIE1lLmNsYXNzTmFtZSYmIiIhPT1NZS5jbGFzc05hbWUsYXQ9ITA9PT1NZS5yZWFkT25seTshSGUmJiFXZSYmIWF0fHwoRS5wdXNoKHttZXRhOk1lLHR5cGU6TWUudHlwZSxjbGFzc05hbWU6TWUuY2xhc3NOYW1lLHJlYWRP''@;'; put 'put ''bmx5Ok1lLnJlYWRPbmx5fSksSGUmJihNZS50eXBlPSJ0ZXh0IiksV2UmJihNZS5jbGFzc05hbWU9IiIpLGF0JiYoTWUucmVhZE9ubHk9ITEpKX07bi5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIixaKTt0cnl7Y29uc3QgZWU9eWllbGQgaC5lKDg4NykudGhlbihoLnQuYmluZChoLDkyODg3''@;'; put 'put ''LDIzKSksdmU9ZWUuZGVmYXVsdD8/ZWU7eWllbGQgaS5kb3dubG9hZEZpbGVBc3luYygieGxzeCIsey4uLm8sZW5naW5lOnZlfSl9ZmluYWxseXtuLnJlbW92ZUhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLFopLEUuZm9yRWFjaCgoe21ldGE6ZWUsdHlwZTp2ZSxjbGFzc05hbWU6TWUscmVhZE9u''@;'; put 'put ''bHk6SGV9KT0+e2VlLnR5cGU9dmUsZWUuY2xhc3NOYW1lPU1lLGVlLnJlYWRPbmx5PUhlfSl9fSksbWdlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB2Z2UobixlPTApe2NvbnN0IHQ9cj0+ZnVuY3Rpb24oKXshZnVuY3Rpb24gVVh0KG4sZSx0KXttZ2UuYXBwbHkodGhpcyxhcmd1''@;'; put 'put ''bWVudHMpfSh0aGlzLHIsbigpLGUpfTtyZXR1cm57bmFtZToiRXhwb3J0IixoaWRkZW46ITEsc3VibWVudTp7aXRlbXM6W3trZXk6ImV4cG9ydF9maWxlOmNzdiIsbmFtZToiQ1NWIixjYWxsYmFjazp0KCJjc3YiKX0se2tleToiZXhwb3J0X2ZpbGU6eGxzeCIsbmFtZToiRXhjZWwgKC54bHN4''@;'; put 'put ''KSIsY2FsbGJhY2s6dCgieGxzeCIpfV19fX1YRigpLGZ1bmN0aW9uIHpYdChuKXtjb25zdCBlPSEodHlwZW9mIHdpbmRvdz4idSIpJiZ3aW5kb3cualF1ZXJ5O2UmJihlLmZuLmhhbmRzb250YWJsZT1mdW5jdGlvbih0LC4uLnIpe2NvbnN0IGk9dGhpcy5maXJzdCgpO2xldCBhLG89aS5kYXRh''@;'; put 'put ''KCJoYW5kc29udGFibGUiKTtpZigic3RyaW5nIiE9dHlwZW9mIHQpe2NvbnN0IGw9dHx8e307cmV0dXJuIG8/by51cGRhdGVTZXR0aW5ncyhsKToobz1uZXcgbi5Db3JlKGlbMF0sbCksaS5kYXRhKCJoYW5kc29udGFibGUiLG8pLG8uaW5pdCgpKSxpfXJldHVybiBvJiYodHlwZW9mIG9bdF08''@;'; put 'put ''InUiPyhhPW9bdF0uY2FsbChvLC4uLnIpLCJkZXN0cm95Ij09PXQmJmkucmVtb3ZlRGF0YSgpKTpKcihgSGFuZHNvbnRhYmxlIGRvIG5vdCBwcm92aWRlIGFjdGlvbjogJHt0fWApKSxhfSl9KEtwKTtjb25zdCBfbD1LcDtfbC5fX0dob3N0VGFibGU9RWhlLF9sLl9nZXRMaXN0ZW5lcnNDb3Vu''@;'; put 'put ''dGVyPWZ1bmN0aW9uIFZUdCgpe3JldHVybiBHV30sX2wuX2dldFJlZ2lzdGVyZWRNYXBzQ291bnRlcj1mdW5jdGlvbiBta3QoKXtyZXR1cm4gWWxlfSxfbC5FdmVudE1hbmFnZXI9VzI7Y29uc3QgV1h0PVt5LEMsVix6LHMsdixMLGMsSCxBLHcsUixVXSxZWHQ9W1MseF07X2wuaGVscGVyPXt9''@;'; put 'put ''LF9sLmRvbT17fSxYbihXWHQsbj0+e1huKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG4pLGU9PnsiXyIhPT1lLmNoYXJBdCgwKSYmKF9sLmhlbHBlcltlXT1uW2VdKX0pfSksWG4oWVh0LG49PntYbihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKSxlPT57Il8iIT09ZS5jaGFyQXQo''@;'; put 'put ''MCkmJihfbC5kb21bZV09bltlXSl9KX0pLF9sLmNlbGxUeXBlcz1fbC5jZWxsVHlwZXM/P3t9LFhuKEVSdCgpLG49PntfbC5jZWxsVHlwZXNbbl09cmRlKG4pfSksX2wuY2VsbFR5cGVzLnJlZ2lzdGVyQ2VsbFR5cGU9VWYsX2wuY2VsbFR5cGVzLmdldENlbGxUeXBlPXJkZSxfbC5lZGl0b3Jz''@;'; put 'put ''PV9sLmVkaXRvcnM/P3t9LFhuKE9UdCgpLG49PntfbC5lZGl0b3JzW2Ake0swKG4pfUVkaXRvcmBdPVpXKG4pfSksX2wuZWRpdG9ycy5yZWdpc3RlckVkaXRvcj1KMCxfbC5lZGl0b3JzLmdldEVkaXRvcj1aVyxfbC5lZGl0b3JzLmVkaXRvckZhY3Rvcnk9SURlLF9sLnJlbmRlcmVycz1fbC5y''@;'; put 'put ''ZW5kZXJlcnM/P3t9LFhuKGF4dCgpLG49Pntjb25zdCBlPSRXKG4pOyJiYXNlIj09PW4mJihfbC5yZW5kZXJlcnMuY2VsbERlY29yYXRvcj1lKSxfbC5yZW5kZXJlcnNbYCR7SzAobil9UmVuZGVyZXJgXT1lfSksX2wucmVuZGVyZXJzLnJlZ2lzdGVyUmVuZGVyZXI9QzAsX2wucmVuZGVyZXJz''@;'; put 'put ''LmdldFJlbmRlcmVyPSRXLF9sLnJlbmRlcmVycy5yZW5kZXJlckZhY3Rvcnk9RERlLF9sLnZhbGlkYXRvcnM9X2wudmFsaWRhdG9ycz8/e30sWG4oY3h0KCksbj0+e19sLnZhbGlkYXRvcnNbYCR7SzAobil9VmFsaWRhdG9yYF09c2xlKG4pfSksX2wudmFsaWRhdG9ycy5yZWdpc3RlclZhbGlk''@;'; put 'put ''YXRvcj1lNixfbC52YWxpZGF0b3JzLmdldFZhbGlkYXRvcj1zbGUsX2wucGx1Z2lucz1fbC5wbHVnaW5zPz97fSxYbihhbGUoKSxuPT57X2wucGx1Z2luc1tuXT1TTChuKX0pLF9sLnBsdWdpbnNbYCR7SzAoYWwuUExVR0lOX0tFWSl9UGx1Z2luYF09YWwsX2wucGx1Z2lucy5yZWdpc3RlclBs''@;'; put 'put ''dWdpbj1vbCxfbC5wbHVnaW5zLmdldFBsdWdpbj1TTCxfbC50aGVtZXM9X2wudGhlbWVzPz97fSxLcC50aGVtZXMuaGFzVGhlbWU9RVQsS3AudGhlbWVzLmdldFRoZW1lPUNPLEtwLnRoZW1lcy5nZXRUaGVtZU5hbWVzPXlEZSxLcC50aGVtZXMuZ2V0VGhlbWVzPWJEZSxLcC50aGVtZXMucmVn''@;'; put 'put ''aXN0ZXJUaGVtZT1TTyxLcC50aGVtZXMucmVpbml0VGhlbWU9Q0RlO2NvbnN0IHBnPUtwLE1tPSJkYy5yb3dfc3RhdHVzIixaWHQ9e2RhdGE6TW0sdHlwZToidGV4dCIscmVhZE9ubHk6ITB9LEpGPShuLGUsdCk9Pntjb25zdCByPW5ldyBSZWdFeHAoYCg/PD1efFxccykkeyhuPT5uLnJlcGxh''@;'; put 'put ''Y2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIikpKGUpfSg/PSR8XFxzKWAsImciKTtyZXR1cm4gbi5yZXBsYWNlKHIsKCk9PnQpfSxjemU9bj0+YCIke1N0cmluZyhuPz8iIikucmVwbGFjZSgvIi9nLCciIicpfSJgLHV6ZT0obixlKT0+e2NvbnN0IHQ9bi5zdGFydHNXaXRoKCI9Iiks''@;'; put 'put ''cj10P24uc2xpY2UoMSk6bixpPS8iW14iXSoifCdbXiddKicvZztsZXQgbCxvPSIiLGE9MDtjb25zdCB1PWc9PntsZXQgRT1KRihnLCJEQy5VU0VSX05BTUUiLGN6ZShlLnVzZXJOYW1lKSk7RT1KRihFLCJEQy5PUklHX1ZBTFVFIixjemUoZS5vcmlnVmFsdWUpKTtjb25zdCBPPWUuY29sdW1u''@;'; put 'put ''TmFtZXMuaW5kZXhPZihNbSk7aWYoLTEhPT1PKXtjb25zdCBaPWAke3BnLmhlbHBlci5zcHJlYWRzaGVldENvbHVtbkxhYmVsKE8pfSR7ZS5yb3dJbmRleCsxfWA7RT1KRihFLCJEQy5ST1dfU1RBVFVTIixaKX1yZXR1cm4gZS5jb2x1bW5OYW1lcy5mb3JFYWNoKChaLGVlKT0+e2NvbnN0IHZl''@;'; put 'put ''PWAke3BnLmhlbHBlci5zcHJlYWRzaGVldENvbHVtbkxhYmVsKGVlKX0ke2Uucm93SW5kZXgrMX1gO0U9SkYoRSxaLHZlKX0pLEV9O2Zvcig7bD1pLmV4ZWMocik7KW8rPXUoci5zbGljZShhLGwuaW5kZXgpKSxvKz1sWzBdLGE9bC5pbmRleCtsWzBdLmxlbmd0aDtyZXR1cm4gbys9dShyLnNs''@;'; put 'put ''aWNlKGEpKSx0P2A9JHtvfWA6b30sZ3E9KG4sZSx0KT0+e2NvbnN0IHI9W10saT1hPT4tMT09PWF8fG51bGw9PT1hP3ZvaWQgMDphLG89YT0+LTE9PT1hfHxudWxsPT09YT92b2lkIDA6YTtmb3IoY29uc3QgYSBvZiBuKXtjb25zdCBsPWkoYS5mcm9tLnJvdyk/PzAsdT1pKGEudG8ucm93KT8/''@;'; put 'put ''ZS0xLGc9byhhLmZyb20uY29sKT8/MCxFPW8oYS50by5jb2wpPz90LTEsTz1NYXRoLm1pbihsLHUpLFo9TWF0aC5tYXgobCx1KSxlZT1NYXRoLm1pbihnLEUpLHZlPU1hdGgubWF4KGcsRSk7Zm9yKGxldCBNZT1PO01lPD1aO01lKyspZm9yKGxldCBIZT1lZTtIZTw9dmU7SGUrKylyLnB1c2go''@;'; put 'put ''e3JvdzpNZSxjb2w6SGV9KX1yZXR1cm4gcn0scVh0PVsibW91c2Vkb3duIiwibW91c2V1cCIsImNvbnRleHRtZW51Iiwic2VsZWN0c3RhcnQiXSxfZ2U9e2RhdGE6Il9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIsdHlwZToiZHJvcGRvd24iLHNvdXJjZTpbIk5vIiwiWWVzIl19LGR6''@;'; put 'put ''ZT1uPT5uLmZpbHRlcihlPT4oIkhBUkRGT1JNVUxBIj09PWUuUlVMRV9UWVBFfHwiU09GVEZPUk1VTEEiPT09ZS5SVUxFX1RZUEUpJiYhL0RDXC4oVVNFUl9OQU1FfE9SSUdfVkFMVUV8Uk9XX1NUQVRVUykvLnRlc3QoZS5SVUxFX1ZBTFVFKSkubWFwKGU9PmUuQkFTRV9DT0wpLHRRdD0obixl''@;'; put 'put ''KT0+e2lmKCFlKXJldHVybiBuO2NvbnN0IHQ9TnVtYmVyKG4pO3JldHVybiBOdW1iZXIuaXNOYU4odCk/bjp0fSxoemU9KG4sZSx0KT0+e2NvbnN0IHI9bi5zdGFydHNXaXRoKCI9IiksaT1yP24uc2xpY2UoMSk6bixvPS8iW14iXSoifCdbXiddKicvZztsZXQgdSxhPSIiLGw9MDtjb25zdCBn''@;'; put 'put ''PUU9PntsZXQgTz1FO3JldHVybiBlLmZvckVhY2goKFosZWUpPT57Y29uc3QgdmU9YCR7cGcuaGVscGVyLnNwcmVhZHNoZWV0Q29sdW1uTGFiZWwoZWUpfSR7dCsxfWA7Tz1KRihPLFosdmUpfSksT307Zm9yKDt1PW8uZXhlYyhpKTspYSs9ZyhpLnNsaWNlKGwsdS5pbmRleCkpLGErPXVbMF0s''@;'; put 'put ''bD11LmluZGV4K3VbMF0ubGVuZ3RoO3JldHVybiBhKz1nKGkuc2xpY2UobCkpLHI/YD0ke2F9YDphfSx5Z2U9KG4sZSx0KT0+e2ZvcihsZXQgciBvZiBuKXtjb25zdCBpPWUuZmluZChhPT5hLmRhdGE9PT1yLk5BTUUpLG89dC52YXJzW3IuTkFNRV07byYmKHIuVFlQRT1bIkRBVEUiLCJEQVRF''@;'; put 'put ''VElNRSIsIlRJTUUiXS5pbmNsdWRlcyhyLkREVFlQRSk/Im51bSI6by50eXBlKSxpJiZyLkRFU0MmJihpLmRlc2M9ci5ERVNDKSxpJiZvPy5sZW5ndGgmJihpLmxlbmd0aD1wYXJzZUludChvLmxlbmd0aCkpLGkmJnIuQ0xTX1JVTEUmJihpLmNsc1J1bGU9ci5DTFNfUlVMRSksaSYmbz8udHlw''@;'; put 'put ''ZSYmKGkuc2FzVHlwZT1vLnR5cGUpfXJldHVybiBlfSxvUXQ9bj0+e2lmKG4pdHJ5e3JldHVybiBKU09OLnBhcnNlKG4pfWNhdGNoe3JldHVybn19LGJnZT0obixlPSExKT0+bnVsbD09bnx8IiI9PT1ufHxlJiYiLiI9PT1uLHdnZT1uPT57Y29uc3QgZT0vXlwvKC4qKVwvKFthLXpdKikkL3Mu''@;'; put 'put ''ZXhlYyhuKTtpZighZSlyZXR1cm4gbmV3IFJlZ0V4cChuKTtsZXRbLHQscl09ZTtjb25zdCBpPS9eXChcP2lcKS8uZXhlYyh0KTtyZXR1cm4gaSYmKHQ9dC5zbGljZShpWzBdLmxlbmd0aCksci5pbmNsdWRlcygiaSIpfHwocis9ImkiKSksdD10LnJlcGxhY2UoL1xcUShbXHNcU10qPylcXEUv''@;'; put 'put ''ZywobyxhKT0+KG49Pm4ucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKSkoYSkpLHQ9dC5yZXBsYWNlKC9cXEEvZywiXiIpLnJlcGxhY2UoL1xcei9nLCIoPyFbXFxzXFxTXSkiKSxuZXcgUmVnRXhwKHQscil9LG1xPW49PntpZihudWxsPT1ufHwiIj09PW4pcmV0dXJuWzAs''@;'; put 'put ''MV07aWYoInN0cmluZyI9PXR5cGVvZiBuKXtjb25zdCB0PW4udHJpbSgpLnRvVXBwZXJDYXNlKCk7aWYoIi4iPT09dHx8IiI9PT10KXJldHVyblswLDFdO2lmKCIuXyI9PT10fHwiXyI9PT10KXJldHVyblswLDBdO2lmKC9eXC4/W0EtWl0kLy50ZXN0KHQpKXJldHVyblswLHQuY2hhckNvZGVB''@;'; put 'put ''dCh0Lmxlbmd0aC0xKS02NSsyXTtjb25zdCByPXBhcnNlRmxvYXQodCk7cmV0dXJuIGlzTmFOKHIpP251bGw6WzEscl19Y29uc3QgZT1OdW1iZXIobik7cmV0dXJuIGlzTmFOKGUpP251bGw6WzEsZV19LGZ6ZT0obixlKT0+blswXSE9PWVbMF0/blswXS1lWzBdOm5bMV0tZVsxXSxwemU9e0NB''@;'; put 'put ''U0U6KG4sZSk9Pntzd2l0Y2goZSl7Y2FzZSJVUENBU0UiOnJldHVybiEhW3ZvaWQgMCxudWxsXS5pbmNsdWRlcyhuKXx8InN0cmluZyI9PXR5cGVvZiBuJiZuLnRvU3RyaW5nKCk9PT1uLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKTtjYXNlIkxPV0NBU0UiOnJldHVybiEhW3ZvaWQgMCxudWxs''@;'; put 'put ''XS5pbmNsdWRlcyhuKXx8InN0cmluZyI9PXR5cGVvZiBuJiZuLnRvU3RyaW5nKCk9PT1uLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKX1yZXR1cm4hMH0sTUlOVkFMOihuLGUpPT57Y29uc3QgdD1tcShuKSxyPW1xKGUpO3JldHVybiEoIXR8fCFyKSYmZnplKHQscik+PTB9LE1BWFZBTDoobixl''@;'; put 'put ''KT0+e2NvbnN0IHQ9bXEobikscj1tcShlKTtyZXR1cm4hKCF0fHwhcikmJmZ6ZSh0LHIpPD0wfSxOT1ROVUxMOihuLGUsdD0hMSk9PiEobnVsbD09bnx8dCYmKDAseTQuaXNTcGVjaWFsTWlzc2luZykobikpJiZuLnRvU3RyaW5nKCkubGVuZ3RoPjAsSEFSRFJFR0VYOihuLGUsdD0hMSk9Pntp''@;'; put 'put ''ZihiZ2Uobix0KSlyZXR1cm4hMDt0cnl7cmV0dXJuIHdnZShlLnRvU3RyaW5nKCkpLnRlc3Qobi50b1N0cmluZygpKX1jYXRjaHtyZXR1cm4gY29uc29sZS53YXJuKGBIQVJEUkVHRVggLSBpbnZhbGlkIHBhdHRlcm4sIHRyZWF0ZWQgYXMgYWx3YXlzLXZhbGlkOiAke2V9YCksITB9fX07ZnVu''@;'; put 'put ''Y3Rpb24gbFF0KG4sZSl7aWYobnVsbD09bnx8IWlzTmFOKG4pJiZpc0Zpbml0ZShuKSlyZXR1cm4gZSYmZSghMCksITA7Y29uc3QgdD0oMCx5NC5pc1NwZWNpYWxNaXNzaW5nKShuKTtyZXR1cm4gZSYmZSh0KSx0fWNvbnN0IGNRdD0vXlxkezR9LVxkezJ9LVxkezJ9IFxkezJ9OlxkezJ9Olxk''@;'; put 'put ''ezJ9JC87ZnVuY3Rpb24gZ3plKG4sZSl7Y29uc3QgdD10aGlzPy5hbGxvd0VtcHR5Pz8hMDtlKG51bGwhPW4mJiIiIT09bj8ic3RyaW5nIj09dHlwZW9mIG4mJmNRdC50ZXN0KG4pOnQpfWNvbnN0IGRRdD17ZGF0ZToiaW50bC1kYXRlIix0aW1lOiJpbnRsLXRpbWUiLGRhdGV0aW1lOiJpbnRs''@;'; put 'put ''LWRhdGV0aW1lIn07Y2xhc3MgZlF0IGV4dGVuZHMgcGcuZWRpdG9ycy5BdXRvY29tcGxldGVFZGl0b3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSl9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpfW9wZW4oKXtzdXBlci5vcGVuKCksdGhpcy5pc0NlbGxOdW1lcmljKCk/''@;'; put 'put ''dGhpcy5odENvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJudW1lcmljTGlzdGJveCIpOnRoaXMuaHRDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibnVtZXJpY0xpc3Rib3giKX1pc0NlbGxOdW1lcmljKCl7cmV0dXJuIHRoaXMuY2VsbFByb3BlcnRpZXM/LmNsYXNzTmFtZT8uaW5jbHVkZXMo''@;'; put 'put ''Imh0TnVtZXJpYyIpfX1jb25zdCBtemU9bj0+bixwUXQ9L14oXGR7NH0tXGR7Mn0tXGR7Mn0pIChcZHsyfTpcZHsyfSg/OjpcZHsyfSk/KSQvLGdRdD1wZy5lZGl0b3JzLmdldEVkaXRvcigidGV4dCIpLG1RdD1wZy5yZW5kZXJlcnMuZ2V0UmVuZGVyZXIoInRleHQiKTtjbGFzcyB2UXQgZXh0''@;'; put 'put ''ZW5kcyBnUXR7Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygiaW5wdXQiKSx0aGlzLlRFWFRBUkVBLnNldEF0dHJpYnV0ZSgidHlwZSIsImRhdGV0aW1lLWxvY2FsIiksdGhpcy5URVhUQVJFQS5zZXRBdHRyaWJ1dGUoInN0ZXAiLCIxIil9c2V0VmFsdWUoZSl7Y29uc3Qg''@;'; put 'put ''dD0ic3RyaW5nIj09dHlwZW9mIGU/ZS5tYXRjaChwUXQpOm51bGw7c3VwZXIuc2V0VmFsdWUodD9gJHt0WzFdfVQke3RbMl19YDplKX1nZXRWYWx1ZSgpe2NvbnN0IGU9c3VwZXIuZ2V0VmFsdWUoKTtpZigic3RyaW5nIiE9dHlwZW9mIGV8fC0xPT09ZS5pbmRleE9mKCJUIikpcmV0dXJuIGU7''@;'; put 'put ''Y29uc3RbdCxyXT1lLnNwbGl0KCJUIik7cmV0dXJuYCR7dH0gJHs1PT09ci5sZW5ndGg/YCR7cn06MDBgOnJ9YH1vcGVuKCl7c3VwZXIub3BlbigpO3RyeXt0aGlzLlRFWFRBUkVBLnNob3dQaWNrZXIoKX1jYXRjaHt9fWZvY3VzKCl7dGhpcy5URVhUQVJFQS5mb2N1cygpfX1jb25zdCB2emU9''@;'; put 'put ''bj0+e2NvbnN0IGU9cGcuY2VsbFR5cGVzLmdldENlbGxUeXBlKG4pO3BnLmNlbGxUeXBlcy5yZWdpc3RlckNlbGxUeXBlKG4sey4uLmUsdmFsdWVGb3JtYXR0ZXI6bXplfSl9LENnZT1uPT5TdHJpbmcobj8/IiIpLnJlcGxhY2UoL1smPD4iJ10vZyxlPT4oeyImIjoiJmFtcDsiLCI8IjoiJmx0''@;'; put 'put ''OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImIzM5OyJ9W2VdKSksX3plPW49PntsZXQgZT1udWxsO3RyeXtjb25zdCByPW4/SlNPTi5wYXJzZShuKTp7fTtlPW5ldyBJbnRsLk51bWJlckZvcm1hdCh3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlLHIpfWNhdGNoe2NvbnNvbGUud2Fy''@;'; put 'put ''bihgTlVNQkVSX0ZPUk1BVCAtIGludmFsaWQgSW50bC5OdW1iZXJGb3JtYXQgb3B0aW9uczogJHtufWApLGU9bnVsbH1jb25zdCB0PXBnLnJlbmRlcmVycy5nZXRSZW5kZXJlcigidGV4dCIpO3JldHVybihyLGksbyxhLGwsdSxnKT0+e3QocixpLG8sYSxsLHUsZyk7Y29uc3QgRT1OdW1iZXIo''@;'; put 'put ''dSk7cmV0dXJuIGUmJm51bGwhPXUmJiIiIT09dSYmIWlzTmFOKEUpJiYoaS50ZXh0Q29udGVudD1lLmZvcm1hdChFKSksaX19LHlRdD0obixlLHQscixpLG8sYSk9PihFZ2UoZSksZS5pbm5lckhUTUw9YCR7Q2dlKG8pfSA8Y2RzLWljb24gc2hhcGU9ImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiBz''@;'; put 'put ''dGF0dXM9Indhcm5pbmciPjwvY2RzLWljb24+YCxlKSxTZ2U9KG4sZSx0LHIsaSxvLGEpPT4oRWdlKGUpLGUuaW5uZXJIVE1MPUNnZShvKSxlKSxiUXQ9KG4sZSx0LHIsaSxvLGEpPT4oRWdlKGUpLGUuaW5uZXJIVE1MPWAke0NnZShvKX0gPHNwYW4gY2xhc3M9InNwaW5uZXIgc3Bpbm5lci1z''@;'; put 'put ''bSB2ZXJ0aWNhbC1hbGlnbi1taWRkbGUiPjwvc3Bhbj5gLGUpLEVnZT1uPT57bi5jbGFzc0xpc3QuY29udGFpbnMoImh0RGFyayIpfHxuLmNsYXNzTGlzdC5hZGQoImh0RGFyayIpfSx5emU9KG4sZSk9Pnt0cnl7cmV0dXJuIG4/d2dlKG4pOm51bGx9Y2F0Y2h7cmV0dXJuIGNvbnNvbGUud2Fy''@;'; put 'put ''bihgJHtlfSAtIGludmFsaWQgcGF0dGVybiwgd2FybmluZyBkaXNhYmxlZDogJHtufWApLG51bGx9fSx3UXQ9KG4sZSx0PSExKT0+e2NvbnN0IHI9eXplKGUsIkhBUkRSRUdFWCIpLGk9cj9udWxsOnl6ZShuLCJTT0ZUUkVHRVgiKSxvPXBnLnJlbmRlcmVycy5nZXRSZW5kZXJlcigidGV4dCIp''@;'; put 'put ''O3JldHVybihhLGwsdSxnLEUsTyxaKT0+e28oYSxsLHUsZyxFLE8sWik7Y29uc3QgZWU9IlllcyI9PT1hLmdldERhdGFBdFJvd1Byb3AodSwiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiksdmU9YmdlKE8sdCksTWU9ISFyJiYhdmUmJiFyLnRlc3QoTy50b1N0cmluZygpKSxIZT0h''@;'; put 'put ''IWkmJiF2ZSYmIWkudGVzdChPLnRvU3RyaW5nKCkpO3JldHVybiBlZXx8KE1lP2wudGl0bGU9YFJFR0VYOiAke2V9YDpIZSYmKGwuY2xhc3NMaXN0LmFkZCgiZGMtd2FybmluZy1jZWxsIiksbC50aXRsZT1gUkVHRVg6ICR7bn1gKSksbH19O2NsYXNzIGJ6ZXtjb25zdHJ1Y3RvcihlLHQscixp''@;'; put 'put ''LG8sYSl7dGhpcy5ydWxlcz1bXSx0aGlzLmRxcnVsZXM9W10sdGhpcy5kcWRhdGE9W10sdGhpcy5oaWRkZW5Db2x1bW5zPVtdLHRoaXMucHJpbWFyeUtleXM9W10sdGhpcy5leGVjdXRlSG90VmFsaWRhdG9yPSh1LGcsRSk9Pntjb25zdCBPPXsuLi51LHZhbGlkYXRvcjp2b2lkIDAscm93OjAs''@;'; put 'put ''Y29sOjAsaW5zdGFuY2U6bmV3IHBnKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHt9KSx2aXN1YWxSb3c6MCx2aXN1YWxDb2w6MCxwcm9wOjB9O251bGw9PWcmJihnPSIiKSx1JiZ1LnZhbGlkYXRvciYmImZ1bmN0aW9uIj09dHlwZW9mIHUudmFsaWRhdG9yP3UudmFsaWRhdG9yLmNh''@;'; put 'put ''bGwoTyxnLFo9PntFJiZFKFopfSk6RSYmRSghMSl9LHRoaXMucmVnaXN0ZXJDdXN0b21FZGl0b3JzKCksdGhpcy5zYXNwYXJhbXM9ZSx0aGlzLmhvdEluc3RhbmNlPWE7Y29uc3QgbD1uZXcgTWFwKFtbX2dlLmRhdGEsey4uLl9nZX1dXSk7Zm9yKGNvbnN0IHUgb2Ygcil7Y29uc3QgZz1vUXQo''@;'; put 'put ''dS5DT0xUWVBFKTtnJiZsLnNldCh1Lk5BTUUsZyl9dGhpcy5ydWxlcz1lLkNPTEhFQURFUlMuc3BsaXQoIiwiKS5tYXAodT0+bC5nZXQodSk/P3tkYXRhOnV9KSx0aGlzLnJ1bGVzPXlnZShyLHRoaXMucnVsZXMsdCksdGhpcy5ydWxlcz0obj0+e2ZvcihsZXQgZSBvZiBuKSJudW1lcmljIj09''@;'; put 'put ''PWUudHlwZSYmKGUubnVtZXJpY0Zvcm1hdD17dXNlR3JvdXBpbmc6ITEsbWF4aW11bUZyYWN0aW9uRGlnaXRzOjIwfSxlLmxvY2FsZT13aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlKTtyZXR1cm4gbn0pKHRoaXMucnVsZXMpLHRoaXMucnVsZXM9KG49Pntmb3IoY29uc3QgZSBvZiBuKXtjb25z''@;'; put 'put ''dCB0PWUudHlwZT9kUXRbZS50eXBlXTp2b2lkIDA7dCYmKGUudHlwZT10KX1yZXR1cm4gbn0pKHRoaXMucnVsZXMpLHRoaXMucnVsZXMucHVzaCh7Li4uWlh0fSksdGhpcy5oaWRkZW5Db2x1bW5zLnB1c2godGhpcy5ydWxlcy5sZW5ndGgtMSksdGhpcy5kcXJ1bGVzPVsuLi5pXSx0aGlzLmRx''@;'; put 'put ''ZGF0YT1vLHRoaXMucHJpbWFyeUtleXM9ZS5QSy5zcGxpdCgiICIpLHRoaXMuYWRkUHJpbWFyeUtleU5vdE51bGxSdWxlcygpLHRoaXMudXBkYXRlRHFEYXRhKCksdGhpcy5zZXR1cFZhbGlkYXRpb25zKCl9YWRkUHJpbWFyeUtleU5vdE51bGxSdWxlcygpe2Zvcihjb25zdCBlIG9mIHRoaXMu''@;'; put 'put ''cHJpbWFyeUtleXMpZSYmdGhpcy5ydWxlcy5zb21lKHI9PnIuZGF0YT09PWUpJiYodGhpcy5kcXJ1bGVzLnNvbWUocj0+ci5CQVNFX0NPTD09PWUmJiJOT1ROVUxMIj09PXIuUlVMRV9UWVBFKXx8dGhpcy5kcXJ1bGVzLnB1c2goe0JBU0VfQ09MOmUsUlVMRV9UWVBFOiJOT1ROVUxMIixSVUxF''@;'; put 'put ''X1ZBTFVFOiIiLFg6MX0pKX1yZWdpc3RlckN1c3RvbUVkaXRvcnMoKXtwZy5lZGl0b3JzLnJlZ2lzdGVyRWRpdG9yKCJhdXRvY29tcGxldGUuY3VzdG9tIixmUXQpLHZ6ZSgiaW50bC1kYXRlIiksdnplKCJpbnRsLXRpbWUiKSxwZy5jZWxsVHlwZXMucmVnaXN0ZXJDZWxsVHlwZSgiaW50bC1k''@;'; put 'put ''YXRldGltZSIse2VkaXRvcjp2UXQscmVuZGVyZXI6bVF0LHZhbGlkYXRvcjpnemUsdmFsdWVGb3JtYXR0ZXI6bXplfSl9Z2V0UnVsZXMoKXtyZXR1cm4gdGhpcy5ydWxlc31nZXRSdWxlKGUpe2NvbnN0IHQ9dGhpcy5nZXRSdWxlSW5kZXgoZSk7cmV0dXJuIHRoaXMucnVsZXNbdF19Z2V0SGlk''@;'; put 'put ''ZGVuQ29sdW1ucygpe3JldHVybiB0aGlzLmhpZGRlbkNvbHVtbnN9dXBkYXRlUnVsZShlLHQpe2xldCByPXRoaXMuZ2V0UnVsZUluZGV4KGUpO3RoaXMucnVsZXNbcl09ey4uLnRoaXMucnVsZXNbcl0sLi4udH19cmVtb3ZlUnVsZShlKXtjb25zdCB0PXRoaXMuZ2V0UnVsZUluZGV4KGUpO3Ro''@;'; put 'put ''aXMucnVsZXMuc3BsaWNlKHQsMSl9Z2V0RHFEZXRhaWxzKGUpe3JldHVybiBlP3RoaXMuZHFydWxlcy5maWx0ZXIodD0+dC5CQVNFX0NPTD09PWUpOnRoaXMuZHFydWxlc31pc0RxQ29sKGUpe3JldHVybiEhdGhpcy5kcXJ1bGVzLmZpbmQodD0+dC5CQVNFX0NPTD09PWUpfWhhc0RxUnVsZXMo''@;'; put 'put ''ZSx0LHI9ITEpe3JldHVybiByP3RoaXMuZHFydWxlcy5maWx0ZXIoaT0+aS5CQVNFX0NPTD09PWUmJnQuaW5jbHVkZXMoaS5SVUxFX1RZUEUpKS5sZW5ndGg9PT10Lmxlbmd0aDohIXRoaXMuZHFydWxlcy5maW5kKGk9PmkuQkFTRV9DT0w9PT1lJiZ0LmluY2x1ZGVzKGkuUlVMRV9UWVBFKSl9''@;'; put 'put ''Z2V0Tm90TnVsbERlZmF1bHRWYWx1ZShlKXtjb25zdCB0PXRoaXMuZ2V0UnVsZShlKTtyZXR1cm4gZnVuY3Rpb24gaVF0KG4sZSx0KXtjb25zdCByPWUuZmluZChpPT5pLkJBU0VfQ09MPT09biYmIk5PVE5VTEwiPT09aS5SVUxFX1RZUEUpO2lmKHI/LlJVTEVfVkFMVUUmJjAhPT1yLlJVTEVf''@;'; put 'put ''VkFMVUUudHJpbSgpLmxlbmd0aClyZXR1cm4ibnVtZXJpYyIhPT10fHxpc05hTihOdW1iZXIoci5SVUxFX1ZBTFVFKSk/ci5SVUxFX1ZBTFVFOk51bWJlcihyLlJVTEVfVkFMVUUpfShlLHRoaXMuZHFydWxlcyx0Py50eXBlKX1nZXRSb3VuZERpZ2l0cyhlKXtjb25zdCB0PXRoaXMuZHFydWxl''@;'; put 'put ''cy5maW5kKGk9PmkuQkFTRV9DT0w9PT1lJiYiUk9VTkQiPT09aS5SVUxFX1RZUEUpO2lmKCF0KXJldHVybjtjb25zdCByPXBhcnNlSW50KHQuUlVMRV9WQUxVRSwxMCk7cmV0dXJuIGlzTmFOKHIpP3ZvaWQgMDpyfWdldFJlZ2V4UnVsZVZhbHVlcyhlKXtjb25zdCB0PXRoaXMuZHFydWxlcy5m''@;'; put 'put ''aW5kKGk9PmkuQkFTRV9DT0w9PT1lJiYiSEFSRFJFR0VYIj09PWkuUlVMRV9UWVBFKSxyPXRoaXMuZHFydWxlcy5maW5kKGk9PmkuQkFTRV9DT0w9PT1lJiYiU09GVFJFR0VYIj09PWkuUlVMRV9UWVBFKTtyZXR1cm57aGFyZFJlZ2V4VmFsdWU6dD8uUlVMRV9WQUxVRSxzb2Z0UmVnZXhWYWx1''@;'; put 'put ''ZTpyPy5SVUxFX1ZBTFVFfX1nZXRGb3JtdWxhUnVsZVZhbHVlKGUpe3JldHVybiB0aGlzLmRxcnVsZXMuZmluZChyPT5yLkJBU0VfQ09MPT09ZSYmKCJIQVJERk9STVVMQSI9PT1yLlJVTEVfVFlQRXx8IlNPRlRGT1JNVUxBIj09PXIuUlVMRV9UWVBFKSk/LlJVTEVfVkFMVUV9Z2V0RHFEcm9w''@;'; put 'put ''ZG93blNvdXJjZShlKXtsZXQgdD1bXTtyZXR1cm4gdGhpcy5kcXJ1bGVzLmZvckVhY2gocj0+e3IuQkFTRV9DT0wudG9TdHJpbmcoKT09PWUuZGF0YSYmZS5kYXRhLnRvU3RyaW5nKCkmJlsiSEFSRFNFTEVDVCIsIlNPRlRTRUxFQ1QiLCJIQVJEU0VMRUNUX0hPT0siLCJTT0ZUU0VMRUNUX0hP''@;'; put 'put ''T0siXS5pbmNsdWRlcyhyLlJVTEVfVFlQRS50b1N0cmluZygpKSYmdGhpcy5kcWRhdGEuZmlsdGVyKGk9PmkuQkFTRV9DT0w9PT1yLkJBU0VfQ09MKS5mb3JFYWNoKGk9PntpZihlLnR5cGUmJiJudW1lcmljIj09PWUudHlwZSl7Y29uc3Qgbz1pLlJVTEVfREFUQTt0LnB1c2goKDAseTQuaXNT''@;'; put 'put ''cGVjaWFsTWlzc2luZykobyk/bzpOdW1iZXIobykpfWVsc2UgdC5wdXNoKGkuUlVMRV9EQVRBKX0pfSksdH1mYWlsc1NvZnRSZWdleChlLHQpe2NvbnN0IHI9Im51bWVyaWMiPT09dGhpcy5ydWxlcy5maW5kKGE9PmEuZGF0YT09PWUpPy50eXBlO2lmKGJnZSh0LHIpfHx0aGlzLmRxcnVsZXMu''@;'; put 'put ''ZmluZChhPT5hLkJBU0VfQ09MPT09ZSYmIkhBUkRSRUdFWCI9PT1hLlJVTEVfVFlQRSkpcmV0dXJuITE7Y29uc3Qgbz10aGlzLmRxcnVsZXMuZmluZChhPT5hLkJBU0VfQ09MPT09ZSYmIlNPRlRSRUdFWCI9PT1hLlJVTEVfVFlQRSk7aWYoIW8pcmV0dXJuITE7dHJ5e3JldHVybiF3Z2Uoby5S''@;'; put 'put ''VUxFX1ZBTFVFKS50ZXN0KHQudG9TdHJpbmcoKSl9Y2F0Y2h7cmV0dXJuITF9fXVwZGF0ZURxRGF0YSgpe3RoaXMuZHFkYXRhLmxlbmd0aD4wJiYoKCk9Pntjb25zdCBlPVtdO3JldHVybiB0aGlzLmRxZGF0YS5mb3JFYWNoKHQ9PntlLmluY2x1ZGVzKHQuQkFTRV9DT0wpfHxlLnB1c2godC5C''@;'; put 'put ''QVNFX0NPTCl9KSxlfSkoKS5mb3JFYWNoKHQ9PntsZXQgcj0hMTt0aGlzLmRxcnVsZXMubGVuZ3RoPjAmJnRoaXMuZHFydWxlcy5mb3JFYWNoKGk9PntpLkJBU0VfQ09MPT09dCYmKCJTT0ZUU0VMRUNUIj09PWkuUlVMRV9UWVBFfHwiSEFSRFNFTEVDVCI9PT1pLlJVTEVfVFlQRSkmJihyPSEw''@;'; put 'put ''KX0pLHJ8fHRoaXMuZHFydWxlcy5wdXNoKHtCQVNFX0NPTDp0LFJVTEVfVFlQRToiU09GVFNFTEVDVCIsUlVMRV9WQUxVRTp0LFg6MX0pfSl9c2V0dXBWYWxpZGF0aW9ucygpe2ZvcihsZXQgZT0wO2U8dGhpcy5ydWxlcy5sZW5ndGg7ZSsrKXtjb25zdCB0PXRoaXMucnVsZXNbZV0uZGF0YXx8''@;'; put 'put ''IiI7aWYoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIhPT10KXtpZih0aGlzLmlzRHFDb2wodCkpe2xldCBpPXRoaXMuZ2V0RHFEcm9wZG93blNvdXJjZSh0aGlzLnJ1bGVzW2VdKTtpZihpLmxlbmd0aD4wJiYodGhpcy5ydWxlc1tlXS5zb3VyY2U9aSx0aGlzLnJ1bGVzW2VdLmVk''@;'; put 'put ''aXRvcj0iYXV0b2NvbXBsZXRlLmN1c3RvbSIsdGhpcy5ydWxlc1tlXS5yZW5kZXJlcj0iYXV0b2NvbXBsZXRlIix0aGlzLnJ1bGVzW2VdLmZpbHRlcj0hMSwibnVtIiE9PXRoaXMucnVsZXNbZV0uc2FzVHlwZSYmKHRoaXMucnVsZXNbZV0udHlwZT0iYXV0b2NvbXBsZXRlIikpLHRoaXMuaGFz''@;'; put 'put ''RHFSdWxlcyh0LFsiU09GVFNFTEVDVCJdKSYmKHRoaXMucnVsZXNbZV0uc3RyaWN0PSExKSx0aGlzLmhhc0RxUnVsZXModCxbIkhBUkRTRUxFQ1QiXSkmJih0aGlzLnJ1bGVzW2VdLnN0cmljdD0hMCksdGhpcy5oYXNEcVJ1bGVzKHQsWyJTT0ZUU0VMRUNUX0hPT0siXSkmJih0aGlzLnJ1bGVz''@;'; put 'put ''W2VdLnN0cmljdD0hMSksdGhpcy5oYXNEcVJ1bGVzKHQsWyJIQVJEU0VMRUNUX0hPT0siXSkmJih0aGlzLnJ1bGVzW2VdLnN0cmljdD0hMCksdGhpcy5oYXNEcVJ1bGVzKHQsWyJOT1ROVUxMIl0pJiYodGhpcy5ydWxlc1tlXS5hbGxvd0VtcHR5PSExKSx0aGlzLmhhc0RxUnVsZXModCxbIlJF''@;'; put 'put ''QURPTkxZIl0pJiYodGhpcy5ydWxlc1tlXS5yZWFkT25seT0hMCksdGhpcy5oYXNEcVJ1bGVzKHQsWyJIQVJERk9STVVMQSJdKSYmKHRoaXMucnVsZXNbZV0ucmVhZE9ubHk9ITApLHRoaXMuaGFzRHFSdWxlcyh0LFsiSElEREVOIl0pJiZ0aGlzLmhpZGRlbkNvbHVtbnMucHVzaChlKSx0aGlz''@;'; put 'put ''Lmhhc0RxUnVsZXModCxbIk5VTUJFUl9GT1JNQVQiXSkpe2NvbnN0IG89dGhpcy5nZXREcURldGFpbHModCkuZmluZChhPT4iTlVNQkVSX0ZPUk1BVCI9PT1hLlJVTEVfVFlQRSk7dGhpcy5ydWxlc1tlXS5yZW5kZXJlcj1femUobz8uUlVMRV9WQUxVRSksdGhpcy5ydWxlc1tlXS5udW1lcmlj''@;'; put 'put ''Rm9ybWF0PXZvaWQgMH1pZih0aGlzLmhhc0RxUnVsZXModCxbIkhBUkRSRUdFWCIsIlNPRlRSRUdFWCJdKSl7Y29uc3R7aGFyZFJlZ2V4VmFsdWU6byxzb2Z0UmVnZXhWYWx1ZTphfT10aGlzLmdldFJlZ2V4UnVsZVZhbHVlcyh0KTt0aGlzLnJ1bGVzW2VdLnJlbmRlcmVyPXdRdChhLG8sIm51''@;'; put 'put ''bWVyaWMiPT09dGhpcy5ydWxlc1tlXS50eXBlKX19dGhpcy5zZXREZWZhdWx0VmFsaWRhdG9yKHRoaXMsZSksdGhpcy5zZXRDb2x1bW5MZXZlbFNlY3VyaXR5KGUpfX10aGlzLnNhc3BhcmFtcz8uQ0xTX0ZMQUcmJnRoaXMuaGlkZGVuQ29sdW1ucy5wdXNoKDApfXNldERlZmF1bHRWYWxpZGF0''@;'; put 'put ''b3IoZSx0KXt0aGlzLnJ1bGVzW3RdLnZhbGlkYXRvcj1mdW5jdGlvbihyLGkpe2NvbnN0IG89ZS5ydWxlc1t0XS5kYXRhPy50b1N0cmluZygpLGE9ZS5ydWxlc1t0XS50eXBlfHwiIjtsZXQgbD1udWxsO2lmKCJZZXMiIT09dGhpcy5pbnN0YW5jZT8uZ2V0RGF0YUF0Um93UHJvcD8uKHRoaXMu''@;'; put 'put ''cm93LCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iKXx8ZS5wcmltYXJ5S2V5cy5pbmNsdWRlcyhvfHwiIikpcmV0dXJuImF1dG9jb21wbGV0ZSIhPT10aGlzLmVkaXRvciYmImF1dG9jb21wbGV0ZS5jdXN0b20iIT09dGhpcy5lZGl0b3J8fChlLmdldEhhbmRzb250YWJsZVZhbGlk''@;'; put 'put ''YXRvcigiYXV0b2NvbXBsZXRlIikuY2FsbCh0aGlzLHIsZz0+e2w9Z30pLGwpPyhlLmdldEhhbmRzb250YWJsZVZhbGlkYXRvcihhKS5jYWxsKHRoaXMscixnPT57bD1nfSksbD9lLmxlbmd0aENoZWNrKHIsZS5ydWxlc1t0XS5sZW5ndGgsYSk/ZS5pc0RxQ29sKG98fCIiKSYmISgobixlLHQ9''@;'; put 'put ''ITEpPT57Zm9yKGxldCByIG9mIG4paWYocHplW3IuUlVMRV9UWVBFXSYmIXB6ZVtyLlJVTEVfVFlQRV0oZSxyLlJVTEVfVkFMVUUsdCkpcmV0dXJuIGNvbnNvbGUud2FybihgRFEgSW52YWxpZCBSZWFzb246ICR7ci5SVUxFX1RZUEV9XG5WYWx1ZTogJHtlfSlcblJ1bGUgVmFsdWU6ICR7ci5S''@;'; put 'put ''VUxFX1ZBTFVFLmxlbmd0aD4wJiYiICIhPT1yLlJVTEVfVkFMVUU/ci5SVUxFX1ZBTFVFOiJOb3QgZGVmaW5lZCJ9YCksITE7cmV0dXJuITB9KShlLmdldERxRGV0YWlscyhvfHwiIiksciwibnVtZXJpYyI9PT1hKT8oY29uc29sZS53YXJuKGBEUSBWYWxpZGF0aW9uIC0gaW52YWxpZCAoVmFs''@;'; put 'put ''dWU6ICR7cn0pYCksdm9pZCBpKCExKSk6dm9pZCBpKCEwKTooY29uc29sZS53YXJuKGBMZW5ndGggVmFsaWRhdGlvbiAtIGludmFsaWQgKFZhbHVlOiAke3J9KWApLHZvaWQgaSghMSkpOihjb25zb2xlLndhcm4oYEhPVCBOYXRpdmUgVmFsaWRhdGlvbiAtIGludmFsaWQgKFZhbHVlOiAke3J9''@;'; put 'put ''KWApLHZvaWQgaSghMSkpKTooY29uc29sZS53YXJuKGBIT1QgTmF0aXZlIFZhbGlkYXRpb24gKGF1dG9jb21wbGV0ZSkgLSBpbnZhbGlkIChWYWx1ZTogJHtyfSlgKSx2b2lkIGkoITEpKTtpKCEwKX19bGVuZ3RoQ2hlY2soZSx0LHIpe2lmKCgwLHk0LmlzU3BlY2lhbE1pc3NpbmcpKGUpfHxu''@;'; put 'put ''dWxsPT1lfHxudWxsPT10KXJldHVybiEwO2lmKCJudW1lcmljIj09PXIpe2lmKDg9PT10KXJldHVybiEwO2lmKHQ8M3x8dD44fHwhTnVtYmVyLmlzSW50ZWdlcih0KSlyZXR1cm4gY29uc29sZS53YXJuKCJpbnZhbGlkIGxlbmd0aCBmcm9tIFNBUywgcnVsZSBsZW5ndGggY2FuIG9ubHkgYmUg''@;'; put 'put ''YW4gaW50ZWdlciBiZXR3ZWVuIDMtOCIpLCExO2NvbnN0IGk9TnVtYmVyKGUpPT09ZSYmZSUxIT0wO2lmKHQ8OCYmaSlyZXR1cm4gY29uc29sZS53YXJuKCJyZWR1Y2VkIGxlbmd0aCBudW1lcmljcyBjYW5ub3QgY29udGFpbiBkZWNpbWFscyBlbHNlIHByZWNpc2lvbiB3aWxsIGJlIGFmZmVj''@;'; put 'put ''dGVkIiksITE7c3dpdGNoKHQpe2Nhc2UgMzpyZXR1cm4gZTw9ODE5MjtjYXNlIDQ6cmV0dXJuIGU8PTIwOTcxNTI7Y2FzZSA1OnJldHVybiBlPD01MzY4NzA5MTI7Y2FzZSA2OnJldHVybiBlPD0xMzc0Mzg5NTM0NzI7Y2FzZSA3OnJldHVybiBlPD0zNTE4NDM3MjA4ODgzMn19cmV0dXJuIGUu''@;'; put 'put ''dG9TdHJpbmcoKS5sZW5ndGg8PXR9Z2V0SGFuZHNvbnRhYmxlVmFsaWRhdG9yKGUpe3N3aXRjaChlKXtjYXNlImF1dG9jb21wbGV0ZSI6cmV0dXJuIExPO2Nhc2UibnVtZXJpYyI6cmV0dXJuIGxRdDtjYXNlImludGwtZGF0ZSI6cmV0dXJuIFRaO2Nhc2UiaW50bC10aW1lIjpyZXR1cm4gQVo7''@;'; put 'put ''Y2FzZSJpbnRsLWRhdGV0aW1lIjpyZXR1cm4gZ3plO2RlZmF1bHQ6cmV0dXJuKHQscik9PnI/cighMCk6bnVsbH19Z2V0UnVsZUluZGV4KGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZT9lOnRoaXMucnVsZXMuZmluZEluZGV4KHQ9PnQuZGF0YT09PWUpfXNldENvbHVtbkxldmVsU2VjdXJp''@;'; put 'put ''dHkoZSl7aWYoIXRoaXMuc2FzcGFyYW1zPy5DTFNfRkxBRylyZXR1cm47Y29uc3QgdD10aGlzLnJ1bGVzW2VdO2lmKHRoaXMucHJpbWFyeUtleXMuaW5jbHVkZXModC5kYXRhKSYmKHQuY2xzUnVsZT0iUkVBRCIpLCJISURFIj09PXQuY2xzUnVsZSYmdGhpcy5oaWRkZW5Db2x1bW5zLnB1c2go''@;'; put 'put ''ZSksIlJFQUQiPT09dC5jbHNSdWxlJiYodC5yZWFkT25seT0hMCksIkVESVQiPT09dC5jbHNSdWxlKXt0LnJlYWRPbmx5PSExO2NvbnN0IHI9dGhpcy5oaWRkZW5Db2x1bW5zLmluZGV4T2YoZSk7LTEhPT1yJiZ0aGlzLmhpZGRlbkNvbHVtbnMuc3BsaWNlKHIsMSl9fX1jb25zdCBDUXQ9WyJO''@;'; put 'put ''T1ROVUxMIiwiUkVBRE9OTFkiLCJISURERU4iXSx2cT17bnVtZXJpYzoiIixkZWZhdWx0OiIifTtmdW5jdGlvbiBFUXQobixlLHQpe2lmKHQmJmU/LmRhdGEpe2NvbnN0IHI9ZnVuY3Rpb24gU1F0KG4sZSx0KXtjb25zdCByPWUuZmluZChpPT5pLkJBU0VfQ09MPT09biYmQ1F0LmluY2x1ZGVz''@;'; put 'put ''KGkuUlVMRV9UWVBFKSYmbnVsbCE9aS5SVUxFX1ZBTFVFJiZpLlJVTEVfVkFMVUUudHJpbSgpLmxlbmd0aD4wKTtpZihyKXJldHVybiJudW1lcmljIiE9PXR8fGlzTmFOKE51bWJlcihyLlJVTEVfVkFMVUUpKT9yLlJVTEVfVkFMVUU6TnVtYmVyKHIuUlVMRV9WQUxVRSl9KGUuZGF0YSx0LG4p''@;'; put 'put ''O2lmKHZvaWQgMCE9PXIpcmV0dXJuIHJ9aWYoIW4pcmV0dXJuIHZxLmRlZmF1bHQ7c3dpdGNoKG4pe2Nhc2UiZHJvcGRvd24iOmNhc2UiYXV0b2NvbXBsZXRlIjpyZXR1cm4gZSYmZS5zb3VyY2U/ZS5zb3VyY2VbMF06W107ZGVmYXVsdDpyZXR1cm4gdnEuaGFzT3duUHJvcGVydHkobik/dnFb''@;'; put 'put ''bl06dnEuZGVmYXVsdH19ZnVuY3Rpb24gTVF0KG4sZSl7aWYoIWlzRmluaXRlKG4pfHwhaXNGaW5pdGUoZSkpcmV0dXJuIG47Y29uc3QgdD1NYXRoLnBvdygxMCxlKTtyZXR1cm4gTWF0aC5zaWduKG4pKk1hdGgucm91bmQoTWF0aC5hYnMobikqdCkvdH1mdW5jdGlvbiBNZ2Uobil7cmV0dXJu''@;'; put 'put ''IG51bGw9PW58fDA9PT1uLnRvU3RyaW5nKCkudHJpbSgpLmxlbmd0aH1jb25zdCBfcT1uPT5uLmZpbHRlcihlPT4iSEFSREZPUk1VTEEiPT09ZS5SVUxFX1RZUEV8fCJTT0ZURk9STVVMQSI9PT1lLlJVTEVfVFlQRSkubWFwKGU9PmUuQkFTRV9DT0wpLHlxPShuLGUpPT4iQyI9PT1uLmZpbmQo''@;'; put 'put ''dD0+dC5OQU1FPT09ZSk/LkREVFlQRSx3emU9bj0+InN0cmluZyI9PXR5cGVvZiBuJiZuLnN0YXJ0c1dpdGgoIj0iKT97dmFsdWU6YCcke259YCx3YXNFc2NhcGVkOiEwfTp7dmFsdWU6bix3YXNFc2NhcGVkOiExfSxDemU9bj0+InN0cmluZyIhPXR5cGVvZiBufHwiJyIhPT1uLmNoYXJBdCgw''@;'; put 'put ''KXx8Ij0iIT09bi5jaGFyQXQoMSk/bjpuLnNsaWNlKDEpLHF4PShuLGUpPT5lLm1hcCh0PT5TdHJpbmcoblt0XSkpLmpvaW4oIiAiKSxUZ2U9KG4sZSx0KT0+e24uaGFzKGUpfHxuLnNldChlLG5ldyBTZXQpLG4uZ2V0KGUpLmFkZCh0KX0seGdlPShuLGUsdCk9Pm4uZ2V0KGUpPy5oYXModCk/''@;'; put 'put ''PyExLFN6ZT0obixlLHQpPT57bi5nZXQoZSk/LmRlbGV0ZSh0KX07dmFyIFpoPWZ1bmN0aW9uKG4pe3JldHVybiBuLlJFTEFUSVZFPSJSRUxBVElWRSIsbi5BQlNPTFVURT0iQUJTT0xVVEUiLG59KFpofHx7fSk7Y2xhc3MgYTN7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMudHlwZT1lLHRoaXMu''@;'; put 'put ''Y29sPXQsdGhpcy5zaGVldD1yfXN0YXRpYyBhYnNvbHV0ZShlLHQpe3JldHVybiBuZXcgYTMoWmguQUJTT0xVVEUsZSx0KX1zdGF0aWMgcmVsYXRpdmUoZSx0KXtyZXR1cm4gbmV3IGEzKFpoLlJFTEFUSVZFLGUsdCl9c3RhdGljIGNvbXBhcmVCeUFic29sdXRlQWRkcmVzcyhlKXtyZXR1cm4o''@;'; put 'put ''dCxyKT0+dC50b1NpbXBsZUNvbHVtbkFkZHJlc3MoZSkuY29sLXIudG9TaW1wbGVDb2x1bW5BZGRyZXNzKGUpLmNvbH1pc0NvbHVtbkFic29sdXRlKCl7cmV0dXJuIHRoaXMudHlwZT09PVpoLkFCU09MVVRFfWlzQ29sdW1uUmVsYXRpdmUoKXtyZXR1cm4gdGhpcy50eXBlPT09WmguUkVMQVRJ''@;'; put 'put ''VkV9aXNBYnNvbHV0ZSgpe3JldHVybiB0aGlzLnR5cGU9PT1aaC5BQlNPTFVURSYmdm9pZCAwIT09dGhpcy5zaGVldH1tb3ZlZChlLHQscil7cmV0dXJuIG5ldyBhMyh0aGlzLnR5cGUsdGhpcy5jb2wrdCx2b2lkIDA9PT10aGlzLnNoZWV0P3ZvaWQgMDplKX1zaGlmdGVkQnlDb2x1bW5zKGUp''@;'; put 'put ''e3JldHVybiBuZXcgYTModGhpcy50eXBlLHRoaXMuY29sK2UsdGhpcy5zaGVldCl9dG9TaW1wbGVDb2x1bW5BZGRyZXNzKGUpe2NvbnN0IHQ9JDQodGhpcyxlKTtsZXQgcj10aGlzLmNvbDtyZXR1cm4gdGhpcy5pc0NvbHVtblJlbGF0aXZlKCkmJihyPWUuY29sK3RoaXMuY29sKSxzV2UodCxy''@;'; put 'put ''KX1zaGlmdFJlbGF0aXZlRGltZW5zaW9ucyhlLHQpe2NvbnN0IHI9dGhpcy5pc0NvbHVtblJlbGF0aXZlKCk/dGhpcy5jb2wrZTp0aGlzLmNvbDtyZXR1cm4gbmV3IGEzKHRoaXMudHlwZSxyLHRoaXMuc2hlZXQpfXNoaWZ0QWJzb2x1dGVEaW1lbnNpb25zKGUsdCl7Y29uc3Qgcj10aGlzLmlz''@;'; put 'put ''Q29sdW1uQWJzb2x1dGUoKT90aGlzLmNvbCtlOnRoaXMuY29sO3JldHVybiBuZXcgYTModGhpcy50eXBlLHIsdGhpcy5zaGVldCl9d2l0aFNoZWV0KGUpe3JldHVybiBuZXcgYTModGhpcy50eXBlLHRoaXMuY29sLGUpfWlzSW52YWxpZChlKXtyZXR1cm4gdGhpcy50b1NpbXBsZUNvbHVtbkFk''@;'; put 'put ''ZHJlc3MoZSkuY29sPDB9aGFzaChlKXtjb25zdCB0PWUmJnZvaWQgMCE9PXRoaXMuc2hlZXQ/YCMke3RoaXMuc2hlZXR9YDoiIjtzd2l0Y2godGhpcy50eXBlKXtjYXNlIFpoLlJFTEFUSVZFOnJldHVybmAke3R9I0NPTFIke3RoaXMuY29sfWA7Y2FzZSBaaC5BQlNPTFVURTpyZXR1cm5gJHt0''@;'; put 'put ''fSNDT0xBJHt0aGlzLmNvbH1gfX11bnBhcnNlKGUpe2NvbnN0IHQ9dGhpcy50b1NpbXBsZUNvbHVtbkFkZHJlc3MoZSk7aWYoUUp0KHQpKXJldHVybjtjb25zdCByPUVxKHQuY29sKTtyZXR1cm5gJHt0aGlzLnR5cGU9PT1aaC5BQlNPTFVURT8iJCI6IiJ9JHtyfWB9ZXhjZWVkc1NoZWV0U2l6''@;'; put 'put ''ZUxpbWl0cyhlKXtyZXR1cm4gdGhpcy5jb2w+PWV9fWNsYXNzIGxme2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLnR5cGU9ZSx0aGlzLnJvdz10LHRoaXMuc2hlZXQ9cn1zdGF0aWMgYWJzb2x1dGUoZSx0KXtyZXR1cm4gbmV3IGxmKFpoLkFCU09MVVRFLGUsdCl9c3RhdGljIHJlbGF0aXZlKGUs''@;'; put 'put ''dCl7cmV0dXJuIG5ldyBsZihaaC5SRUxBVElWRSxlLHQpfXN0YXRpYyBjb21wYXJlQnlBYnNvbHV0ZUFkZHJlc3MoZSl7cmV0dXJuKHQscik9PnQudG9TaW1wbGVSb3dBZGRyZXNzKGUpLnJvdy1yLnRvU2ltcGxlUm93QWRkcmVzcyhlKS5yb3d9aXNSb3dBYnNvbHV0ZSgpe3JldHVybiB0aGlz''@;'; put 'put ''LnR5cGU9PT1aaC5BQlNPTFVURX1pc1Jvd1JlbGF0aXZlKCl7cmV0dXJuIHRoaXMudHlwZT09PVpoLlJFTEFUSVZFfWlzQWJzb2x1dGUoKXtyZXR1cm4gdGhpcy50eXBlPT09WmguQUJTT0xVVEUmJnZvaWQgMCE9PXRoaXMuc2hlZXR9bW92ZWQoZSx0LHIpe3JldHVybiBuZXcgbGYodGhpcy50''@;'; put 'put ''eXBlLHRoaXMucm93K3Isdm9pZCAwPT09dGhpcy5zaGVldD92b2lkIDA6ZSl9c2hpZnRlZEJ5Um93cyhlKXtyZXR1cm4gbmV3IGxmKHRoaXMudHlwZSx0aGlzLnJvdytlLHRoaXMuc2hlZXQpfXRvU2ltcGxlUm93QWRkcmVzcyhlKXtjb25zdCB0PSQ0KHRoaXMsZSk7bGV0IHI9dGhpcy5yb3c7''@;'; put 'put ''cmV0dXJuIHRoaXMuaXNSb3dSZWxhdGl2ZSgpJiYocj1lLnJvdyt0aGlzLnJvdyksYVdlKHQscil9c2hpZnRSZWxhdGl2ZURpbWVuc2lvbnMoZSx0KXtjb25zdCByPXRoaXMuaXNSb3dSZWxhdGl2ZSgpP3RoaXMucm93K3Q6dGhpcy5yb3c7cmV0dXJuIG5ldyBsZih0aGlzLnR5cGUscix0aGlz''@;'; put 'put ''LnNoZWV0KX1zaGlmdEFic29sdXRlRGltZW5zaW9ucyhlLHQpe2NvbnN0IHI9dGhpcy5pc1Jvd0Fic29sdXRlKCk/dGhpcy5yb3crdDp0aGlzLnJvdztyZXR1cm4gbmV3IGxmKHRoaXMudHlwZSxyLHRoaXMuc2hlZXQpfXdpdGhTaGVldChlKXtyZXR1cm4gbmV3IGxmKHRoaXMudHlwZSx0aGlz''@;'; put 'put ''LnJvdyxlKX1pc0ludmFsaWQoZSl7cmV0dXJuIHRoaXMudG9TaW1wbGVSb3dBZGRyZXNzKGUpLnJvdzwwfWhhc2goZSl7Y29uc3QgdD1lJiZ2b2lkIDAhPT10aGlzLnNoZWV0P2AjJHt0aGlzLnNoZWV0fWA6IiI7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSBaaC5SRUxBVElWRTpyZXR1cm5gJHt0''@;'; put 'put ''fSNST1dSJHt0aGlzLnJvd31gO2Nhc2UgWmguQUJTT0xVVEU6cmV0dXJuYCR7dH0jUk9XQSR7dGhpcy5yb3d9YH19dW5wYXJzZShlKXtjb25zdCB0PXRoaXMudG9TaW1wbGVSb3dBZGRyZXNzKGUpO3JldHVybiBYSnQodCk/dm9pZCAwOmAke3RoaXMudHlwZT09PVpoLkFCU09MVVRFPyIkIjoi''@;'; put 'put ''In0ke3Qucm93KzF9YH1leGNlZWRzU2hlZXRTaXplTGltaXRzKGUpe3JldHVybiB0aGlzLnJvdz49ZX19dmFyIG11PWZ1bmN0aW9uKG4pe3JldHVybiBuLkNFTExfUkVGRVJFTkNFX1JFTEFUSVZFPSJDRUxMX1JFRkVSRU5DRSIsbi5DRUxMX1JFRkVSRU5DRV9BQlNPTFVURT0iQ0VMTF9SRUZF''@;'; put 'put ''UkVOQ0VfQUJTT0xVVEUiLG4uQ0VMTF9SRUZFUkVOQ0VfQUJTT0xVVEVfQ09MPSJDRUxMX1JFRkVSRU5DRV9BQlNPTFVURV9DT0wiLG4uQ0VMTF9SRUZFUkVOQ0VfQUJTT0xVVEVfUk9XPSJDRUxMX1JFRkVSRU5DRV9BQlNPTFVURV9ST1ciLG59KG11fHx7fSk7Y2xhc3MgeHV7Y29uc3RydWN0''@;'; put 'put ''b3IoZSx0LHIsaSl7dGhpcy5jb2w9ZSx0aGlzLnJvdz10LHRoaXMudHlwZT1yLHRoaXMuc2hlZXQ9aX1zdGF0aWMgZnJvbUNvbEFuZFJvdyhlLHQscil7cmV0dXJuKGUuaXNDb2x1bW5BYnNvbHV0ZSgpJiZ0LmlzUm93QWJzb2x1dGUoKT94dS5hYnNvbHV0ZS5iaW5kKHRoaXMpOmUuaXNDb2x1''@;'; put 'put ''bW5BYnNvbHV0ZSgpP3h1LmFic29sdXRlQ29sLmJpbmQodGhpcyk6dC5pc1Jvd0Fic29sdXRlKCk/eHUuYWJzb2x1dGVSb3cuYmluZCh0aGlzKTp4dS5yZWxhdGl2ZS5iaW5kKHRoaXMpKShlLmNvbCx0LnJvdyxyKX1zdGF0aWMgcmVsYXRpdmUoZSx0LHIpe3JldHVybiBuZXcgeHUoZSx0LG11''@;'; put 'put ''LkNFTExfUkVGRVJFTkNFX1JFTEFUSVZFLHIpfXN0YXRpYyBhYnNvbHV0ZShlLHQscil7cmV0dXJuIG5ldyB4dShlLHQsbXUuQ0VMTF9SRUZFUkVOQ0VfQUJTT0xVVEUscil9c3RhdGljIGFic29sdXRlQ29sKGUsdCxyKXtyZXR1cm4gbmV3IHh1KGUsdCxtdS5DRUxMX1JFRkVSRU5DRV9BQlNP''@;'; put 'put ''TFVURV9DT0wscil9c3RhdGljIGFic29sdXRlUm93KGUsdCxyKXtyZXR1cm4gbmV3IHh1KGUsdCxtdS5DRUxMX1JFRkVSRU5DRV9BQlNPTFVURV9ST1cscil9dG9TaW1wbGVDZWxsQWRkcmVzcyhlKXtjb25zdCB0PSQ0KHRoaXMsZSk7cmV0dXJuIHRoaXMudHlwZT09PW11LkNFTExfUkVGRVJF''@;'; put 'put ''TkNFX0FCU09MVVRFP0JvKHQsdGhpcy5jb2wsdGhpcy5yb3cpOnRoaXMudHlwZT09PW11LkNFTExfUkVGRVJFTkNFX0FCU09MVVRFX1JPVz9Cbyh0LGUuY29sK3RoaXMuY29sLHRoaXMucm93KTpCbyh0LHRoaXMudHlwZT09PW11LkNFTExfUkVGRVJFTkNFX0FCU09MVVRFX0NPTD90aGlzLmNv''@;'; put 'put ''bDplLmNvbCt0aGlzLmNvbCxlLnJvdyt0aGlzLnJvdyl9dG9Db2x1bW5BZGRyZXNzKCl7Y29uc3QgZT10aGlzLmlzQ29sdW1uUmVsYXRpdmUoKT9aaC5SRUxBVElWRTpaaC5BQlNPTFVURTtyZXR1cm4gbmV3IGEzKGUsdGhpcy5jb2wsdGhpcy5zaGVldCl9dG9Sb3dBZGRyZXNzKCl7Y29uc3Qg''@;'; put 'put ''ZT10aGlzLmlzUm93UmVsYXRpdmUoKT9aaC5SRUxBVElWRTpaaC5BQlNPTFVURTtyZXR1cm4gbmV3IGxmKGUsdGhpcy5yb3csdGhpcy5zaGVldCl9dG9TaW1wbGVDb2x1bW5BZGRyZXNzKGUpe2NvbnN0IHQ9JDQodGhpcyxlKTtsZXQgcj10aGlzLmNvbDtyZXR1cm4gdGhpcy5pc0NvbHVtblJl''@;'; put 'put ''bGF0aXZlKCkmJihyKz1lLmNvbCksc1dlKHQscil9dG9TaW1wbGVSb3dBZGRyZXNzKGUpe2NvbnN0IHQ9JDQodGhpcyxlKTtsZXQgcj10aGlzLnJvdztyZXR1cm4gdGhpcy5pc1Jvd1JlbGF0aXZlKCkmJihyKz1lLnJvdyksYVdlKHQscil9aXNSb3dBYnNvbHV0ZSgpe3JldHVybiB0aGlzLnR5''@;'; put 'put ''cGU9PT1tdS5DRUxMX1JFRkVSRU5DRV9BQlNPTFVURXx8dGhpcy50eXBlPT09bXUuQ0VMTF9SRUZFUkVOQ0VfQUJTT0xVVEVfUk9XfWlzQ29sdW1uQWJzb2x1dGUoKXtyZXR1cm4gdGhpcy50eXBlPT09bXUuQ0VMTF9SRUZFUkVOQ0VfQUJTT0xVVEV8fHRoaXMudHlwZT09PW11LkNFTExfUkVG''@;'; put 'put ''RVJFTkNFX0FCU09MVVRFX0NPTH1pc0NvbHVtblJlbGF0aXZlKCl7cmV0dXJuIHRoaXMudHlwZT09PW11LkNFTExfUkVGRVJFTkNFX1JFTEFUSVZFfHx0aGlzLnR5cGU9PT1tdS5DRUxMX1JFRkVSRU5DRV9BQlNPTFVURV9ST1d9aXNSb3dSZWxhdGl2ZSgpe3JldHVybiB0aGlzLnR5cGU9PT1t''@;'; put 'put ''dS5DRUxMX1JFRkVSRU5DRV9SRUxBVElWRXx8dGhpcy50eXBlPT09bXUuQ0VMTF9SRUZFUkVOQ0VfQUJTT0xVVEVfQ09MfWlzQWJzb2x1dGUoKXtyZXR1cm4gdGhpcy50eXBlPT09bXUuQ0VMTF9SRUZFUkVOQ0VfQUJTT0xVVEUmJnZvaWQgMCE9PXRoaXMuc2hlZXR9c2hpZnRlZEJ5Um93cyhl''@;'; put 'put ''KXtyZXR1cm4gbmV3IHh1KHRoaXMuY29sLHRoaXMucm93K2UsdGhpcy50eXBlLHRoaXMuc2hlZXQpfXNoaWZ0ZWRCeUNvbHVtbnMoZSl7cmV0dXJuIG5ldyB4dSh0aGlzLmNvbCtlLHRoaXMucm93LHRoaXMudHlwZSx0aGlzLnNoZWV0KX1tb3ZlZChlLHQscil7cmV0dXJuIG5ldyB4dSh0aGlz''@;'; put 'put ''LmNvbCt0LHRoaXMucm93K3IsdGhpcy50eXBlLHZvaWQgMD09PXRoaXMuc2hlZXQ/dm9pZCAwOmUpfXdpdGhTaGVldChlKXtyZXR1cm4gbmV3IHh1KHRoaXMuY29sLHRoaXMucm93LHRoaXMudHlwZSxlKX1pc0ludmFsaWQoZSl7cmV0dXJuIG5wKHRoaXMudG9TaW1wbGVDZWxsQWRkcmVzcyhl''@;'; put 'put ''KSl9c2hpZnRSZWxhdGl2ZURpbWVuc2lvbnMoZSx0KXtjb25zdCByPXRoaXMuaXNDb2x1bW5BYnNvbHV0ZSgpP3RoaXMuY29sOnRoaXMuY29sK2UsaT10aGlzLmlzUm93QWJzb2x1dGUoKT90aGlzLnJvdzp0aGlzLnJvdyt0O3JldHVybiBuZXcgeHUocixpLHRoaXMudHlwZSx0aGlzLnNoZWV0''@;'; put 'put ''KX1zaGlmdEFic29sdXRlRGltZW5zaW9ucyhlLHQpe2NvbnN0IHI9dGhpcy5pc0NvbHVtblJlbGF0aXZlKCk/dGhpcy5jb2w6dGhpcy5jb2wrZSxpPXRoaXMuaXNSb3dSZWxhdGl2ZSgpP3RoaXMucm93OnRoaXMucm93K3Q7cmV0dXJuIG5ldyB4dShyLGksdGhpcy50eXBlLHRoaXMuc2hlZXQp''@;'; put 'put ''fWhhc2goZSl7Y29uc3QgdD1lJiZ2b2lkIDAhPT10aGlzLnNoZWV0P2AjJHt0aGlzLnNoZWV0fWA6IiI7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSBtdS5DRUxMX1JFRkVSRU5DRV9SRUxBVElWRTpyZXR1cm5gJHt0fSMke3RoaXMucm93fVIke3RoaXMuY29sfWA7Y2FzZSBtdS5DRUxMX1JFRkVS''@;'; put 'put ''RU5DRV9BQlNPTFVURTpyZXR1cm5gJHt0fSMke3RoaXMucm93fUEke3RoaXMuY29sfWA7Y2FzZSBtdS5DRUxMX1JFRkVSRU5DRV9BQlNPTFVURV9DT0w6cmV0dXJuYCR7dH0jJHt0aGlzLnJvd31BQyR7dGhpcy5jb2x9YDtjYXNlIG11LkNFTExfUkVGRVJFTkNFX0FCU09MVVRFX1JPVzpyZXR1''@;'; put 'put ''cm5gJHt0fSMke3RoaXMucm93fUFSJHt0aGlzLmNvbH1gfX11bnBhcnNlKGUpe2NvbnN0IHQ9dGhpcy50b1NpbXBsZUNlbGxBZGRyZXNzKGUpO2lmKG5wKHQpKXJldHVybjtjb25zdCByPUVxKHQuY29sKTtyZXR1cm5gJHt0aGlzLnR5cGU9PT1tdS5DRUxMX1JFRkVSRU5DRV9BQlNPTFVURXx8''@;'; put 'put ''dGhpcy50eXBlPT09bXUuQ0VMTF9SRUZFUkVOQ0VfQUJTT0xVVEVfQ09MPyIkIjoiIn0ke3J9JHt0aGlzLnR5cGU9PT1tdS5DRUxMX1JFRkVSRU5DRV9BQlNPTFVURXx8dGhpcy50eXBlPT09bXUuQ0VMTF9SRUZFUkVOQ0VfQUJTT0xVVEVfUk9XPyIkIjoiIn0ke3Qucm93KzF9YH1leGNlZWRz''@;'; put 'put ''U2hlZXRTaXplTGltaXRzKGUsdCl7cmV0dXJuIHRoaXMucm93Pj10fHx0aGlzLmNvbD49ZX19Y29uc3QgczM9IiQiLGJxPSJBLVphLXpceGMwLVx1MDJhZiIsQWdlPWAke2JxfTAtOV8uYCxFemU9YFske2JxfTAtOV9dK2AsS3g9YCgke0V6ZX18JygoKD8hJykufCcnKSopJykhYCxNemU9YCgk''@;'; put 'put ''e0t4fSk/XFwke3MzfT9bQS1aYS16XStcXCR7czN9P1swLTldK2AsVHplPWAoJHtLeH0pP1xcJHtzM30/W0EtWmEtel0rYCx4emU9YCgke0t4fSk/XFwke3MzfT9bMC05XStgLEF6ZT0iW3JSXVswLTldKltjQ11bMC05XSoiLGtRdD1gKCR7TXplfSlbXiR7QWdlfV1gLGt6ZT1gWyR7YnF9X11b''@;'; put 'put ''JHtBZ2V9XSpgLFJRdD1bIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiXSxSemU9Wy4uLkFycmF5LmZyb20oQXJyYXkoMjYpKS5tYXAoKG4sZSk9PmUrNjUpLC4uLkFycmF5LmZyb20oQXJyYXkoMjYpKS5tYXAoKG4sZSk9PmUrOTcpLC4uLkFycmF5LmZyb20oQXJyYXko''@;'; put 'put ''NDk2KSkubWFwKChuLGUpPT5lKzE5MildLm1hcChuPT5TdHJpbmcuZnJvbUNoYXJDb2RlKG4pKSxJemU9bmV3IFJlZ0V4cChgXigke0t4fSk/KFxcJHtzM30/KShbQS1aYS16XSspKFxcJHtzM30/KShbMC05XSspJGApLElRdD1uZXcgUmVnRXhwKGBeKCR7S3h9KT8oXFwke3MzfT8pKFtBLVph''@;'; put 'put ''LXpdKykkYCksRFF0PW5ldyBSZWdFeHAoYF4oJHtLeH0pPyhcXCR7czN9PykoWzAtOV0rKSRgKSxMUXQ9bmV3IFJlZ0V4cChgXiR7RXplfSRgKSxYeD0obixlLHQpPT57Y29uc3Qgcj1JemUuZXhlYyhlKSxpPVJnZShyWzZdKTtsZXQgbz1NcShyLG4pO2lmKHZvaWQgMD09PW8pcmV0dXJuO251''@;'; put 'put ''bGw9PT1vJiYobz12b2lkIDApO2NvbnN0IGE9TnVtYmVyKHJbOF0pLTE7cmV0dXJuIHJbNV09PT1zMyYmcls3XT09PXMzP3h1LmFic29sdXRlKGksYSxvKTpyWzVdPT09czM/eHUuYWJzb2x1dGVDb2woaSxhLXQucm93LG8pOnJbN109PT1zMz94dS5hYnNvbHV0ZVJvdyhpLXQuY29sLGEsbyk6''@;'; put 'put ''eHUucmVsYXRpdmUoaS10LmNvbCxhLXQucm93LG8pfSx3cT0obixlLHQpPT57Y29uc3Qgcj1JUXQuZXhlYyhlKTtsZXQgaT1NcShyLG4pO2lmKHZvaWQgMD09PWkpcmV0dXJuO251bGw9PT1pJiYoaT12b2lkIDApO2NvbnN0IG89UmdlKHJbNl0pO3JldHVybiByWzVdPT09czM/YTMuYWJzb2x1''@;'; put 'put ''dGUobyxpKTphMy5yZWxhdGl2ZShvLXQuY29sLGkpfSxDcT0obixlLHQpPT57Y29uc3Qgcj1EUXQuZXhlYyhlKTtsZXQgaT1NcShyLG4pO2lmKHZvaWQgMD09PWkpcmV0dXJuO251bGw9PT1pJiYoaT12b2lkIDApO2NvbnN0IG89TnVtYmVyKHJbNl0pLTE7cmV0dXJuIHJbNV09PT1zMz9sZi5h''@;'; put 'put ''YnNvbHV0ZShvLGkpOmxmLnJlbGF0aXZlKG8tdC5yb3csaSl9LGtnZT0obixlLHQpPT57Y29uc3Qgcj1JemUuZXhlYyhlKTtpZighcilyZXR1cm47Y29uc3QgaT1SZ2Uocls2XSk7bGV0IG89TXEocixuKTtpZih2b2lkIDA9PT1vKXJldHVybjtudWxsPT09byYmKG89dCk7Y29uc3QgYT1OdW1i''@;'; put 'put ''ZXIocls4XSktMTtyZXR1cm4gQm8obyxpLGEpfSxTcT0obixlLHQpPT57Y29uc3Qgcj1FcShlLmNvbCksaT1EemUoZS5zaGVldCxuKTtpZih2b2lkIDAhPT1pKXJldHVybiB0IT09ZS5zaGVldD9gJHtpfSEke3J9JHtlLnJvdysxfWA6YCR7cn0ke2Uucm93KzF9YH07ZnVuY3Rpb24gUmdlKG4p''@;'; put 'put ''e3JldHVybiAxPT09bi5sZW5ndGg/bi50b1VwcGVyQ2FzZSgpLmNoYXJDb2RlQXQoMCktNjU6bi5zcGxpdCgiIikucmVkdWNlKChlLHQpPT4yNiplKyh0LnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdCgwKS02NCksMCktMX1mdW5jdGlvbiBFcShuKXtsZXQgZT0iIjtmb3IoO24+PTA7KWU9U3Ry''@;'; put 'put ''aW5nLmZyb21DaGFyQ29kZShuJTI2Kzk3KStlLG49TWF0aC5mbG9vcihuLzI2KS0xO3JldHVybiBlLnRvVXBwZXJDYXNlKCl9ZnVuY3Rpb24gRHplKG4sZSl7bGV0IHQ9ZShuKTtpZih2b2lkIDAhPT10KXJldHVybiBMUXQudGVzdCh0KT90Oih0PXQucmVwbGFjZSgvJy9nLCInJyIpLGAnJHt0''@;'; put 'put ''fSdgKX1mdW5jdGlvbiBNcShuLGUpe3ZhciB0O2xldCByPW51bGwhPT0odD1uWzNdKSYmdm9pZCAwIT09dD90Om5bMl07cmV0dXJuIHI/KHI9ci5yZXBsYWNlKC8nJy9nLCInIiksZShyKSk6bnVsbH12YXIgbmE9aCgzMzYxNCk7Y29uc3QgTHplPShuLGUpPT4oe3R5cGU6bixtZXNzYWdlOmV9''@;'; put 'put ''KTt2YXIgR2g9ZnVuY3Rpb24obil7cmV0dXJuIG4uTGV4aW5nRXJyb3I9IkxleGluZ0Vycm9yIixuLlBhcnNlckVycm9yPSJQYXJzaW5nRXJyb3IiLG4uU3RhdGljT2Zmc2V0RXJyb3I9IlN0YXRpY09mZnNldEVycm9yIixuLlN0YXRpY09mZnNldE91dE9mUmFuZ2VFcnJvcj0iU3RhdGljT2Zm''@;'; put 'put ''c2V0T3V0T2ZSYW5nZUVycm9yIixuLlJhbmdlT2Zmc2V0Tm90QWxsb3dlZD0iUmFuZ2VPZmZzZXROb3RBbGxvd2VkIixuLkludmFsaWRSYW5nZVNpemU9IkludmFsaWRSYW5nZVNpemUiLG59KEdofHx7fSkscm49ZnVuY3Rpb24obil7cmV0dXJuIG4uRU1QVFk9IkVNUFRZIixuLk5VTUJFUj0i''@;'; put 'put ''TlVNQkVSIixuLlNUUklORz0iU1RSSU5HIixuLk1JTlVTX1VOQVJZX09QPSJNSU5VU19VTkFSWV9PUCIsbi5QTFVTX1VOQVJZX09QPSJQTFVTX1VOQVJZX09QIixuLlBFUkNFTlRfT1A9IlBFUkNFTlRfT1AiLG4uQ09OQ0FURU5BVEVfT1A9IkNPTkNBVEVOQVRFX09QIixuLkVRVUFMU19PUD0i''@;'; put 'put ''RVFVQUxTX09QIixuLk5PVF9FUVVBTF9PUD0iTk9UX0VRVUFMX09QIixuLkdSRUFURVJfVEhBTl9PUD0iR1JFQVRFUl9USEFOX09QIixuLkxFU1NfVEhBTl9PUD0iTEVTU19USEFOX09QIixuLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9PUD0iR1JFQVRFUl9USEFOX09SX0VRVUFMX09QIixuLkxF''@;'; put 'put ''U1NfVEhBTl9PUl9FUVVBTF9PUD0iTEVTU19USEFOX09SX0VRVUFMX09QIixuLlBMVVNfT1A9IlBMVVNfT1AiLG4uTUlOVVNfT1A9Ik1JTlVTX09QIixuLlRJTUVTX09QPSJUSU1FU19PUCIsbi5ESVZfT1A9IkRJVl9PUCIsbi5QT1dFUl9PUD0iUE9XRVJfT1AiLG4uRlVOQ1RJT05fQ0FMTD0i''@;'; put 'put ''RlVOQ1RJT05fQ0FMTCIsbi5OQU1FRF9FWFBSRVNTSU9OPSJOQU1FRF9FWFBSRVNTSU9OIixuLlBBUkVOVEhFU0lTPSJQQVJFTlRIRVNFUyIsbi5DRUxMX1JFRkVSRU5DRT0iQ0VMTF9SRUZFUkVOQ0UiLG4uQ0VMTF9SQU5HRT0iQ0VMTF9SQU5HRSIsbi5DT0xVTU5fUkFOR0U9IkNPTFVNTl9S''@;'; put 'put ''QU5HRSIsbi5ST1dfUkFOR0U9IlJPV19SQU5HRSIsbi5FUlJPUj0iRVJST1IiLG4uRVJST1JfV0lUSF9SQVdfSU5QVVQ9IkVSUk9SX1dJVEhfUkFXX0lOUFVUIixuLkFSUkFZPSJBUlJBWSIsbn0ocm58fHt9KSxHND1mdW5jdGlvbihuKXtyZXR1cm4gbltuLlJFTEFUSVZFPTBdPSJSRUxBVElW''@;'; put 'put ''RSIsbltuLlNUQVJUX0FCU09MVVRFPTFdPSJTVEFSVF9BQlNPTFVURSIsbltuLkJPVEhfQUJTT0xVVEU9Ml09IkJPVEhfQUJTT0xVVEUiLG59KEc0fHx7fSk7Y29uc3QgRlF0PW49Pih7dHlwZTpybi5FTVBUWSxsZWFkaW5nV2hpdGVzcGFjZTpuPy5pbWFnZX0pLE96ZT0obixlKT0+KHt0eXBl''@;'; put 'put ''OnJuLkNFTExfUkVGRVJFTkNFLHJlZmVyZW5jZTpuLGxlYWRpbmdXaGl0ZXNwYWNlOmU/LmltYWdlfSksTnplPShuLGUsdCxyKT0+KERnZShuLGUsdCkse3R5cGU6cm4uQ0VMTF9SQU5HRSxzdGFydDpuLGVuZDplLHNoZWV0UmVmZXJlbmNlVHlwZTp0LGxlYWRpbmdXaGl0ZXNwYWNlOnJ9KSxG''@;'; put 'put ''emU9KG4sZSx0KT0+KHt0eXBlOnJuLkFSUkFZLGFyZ3M6bixsZWFkaW5nV2hpdGVzcGFjZTplPy5pbWFnZSxpbnRlcm5hbFdoaXRlc3BhY2U6dD8uaW1hZ2V9KSxINj0obixlKT0+KHt0eXBlOnJuLkVSUk9SLGVycm9yOm4sbGVhZGluZ1doaXRlc3BhY2U6ZT8uaW1hZ2V9KSxReD0obixlLHQp''@;'; put 'put ''PT4oe3R5cGU6cm4uRVJST1JfV0lUSF9SQVdfSU5QVVQsZXJyb3I6ZSxyYXdJbnB1dDpuLGxlYWRpbmdXaGl0ZXNwYWNlOnQ/LmltYWdlfSksSWdlPSgpPT4oe3R5cGU6cm4uRVJST1IsZXJyb3I6UHQucGFyc2luZ0Vycm9yKCl9KTtmdW5jdGlvbiBEZ2UobixlLHQpe2lmKHZvaWQgMCE9PW4u''@;'; put 'put ''c2hlZXQmJnZvaWQgMD09PWUuc2hlZXR8fHZvaWQgMD09PW4uc2hlZXQmJnZvaWQgMCE9PWUuc2hlZXQpdGhyb3cgbmV3IEVycm9yKCJTdGFydCBhZGRyZXNzIGluY29uc2lzdGVudCB3aXRoIGVuZCBhZGRyZXNzIik7aWYodm9pZCAwPT09bi5zaGVldCYmdCE9PUc0LlJFTEFUSVZFfHx2b2lk''@;'; put 'put ''IDAhPT1uLnNoZWV0JiZ0PT09RzQuUkVMQVRJVkUpdGhyb3cgbmV3IEVycm9yKCJTaGVldCBhZGRyZXNzIGluY29uc2lzdGVudCB3aXRoIHNoZWV0IHJlZmVyZW5jZSB0eXBlIil9ZnVuY3Rpb24gZWMobixlKXtyZXR1cm4oZT8/IiIpK259Y29uc3QgUHplPXtbcm4uUExVU19PUF06IisiLFty''@;'; put 'put ''bi5NSU5VU19PUF06Ii0iLFtybi5USU1FU19PUF06IioiLFtybi5ESVZfT1BdOiIvIixbcm4uQ09OQ0FURU5BVEVfT1BdOiImIixbcm4uUE9XRVJfT1BdOiJeIixbcm4uRVFVQUxTX09QXToiPSIsW3JuLk5PVF9FUVVBTF9PUF06Ijw+Iixbcm4uR1JFQVRFUl9USEFOX09QXToiPiIsW3JuLkdS''@;'; put 'put ''RUFURVJfVEhBTl9PUl9FUVVBTF9PUF06Ij49Iixbcm4uTEVTU19USEFOX09QXToiPCIsW3JuLkxFU1NfVEhBTl9PUl9FUVVBTF9PUF06Ijw9In07Y2xhc3MgYUp0e2NvbnN0cnVjdG9yKGUpe3RoaXMuZnVuY3Rpb25SZWdpc3RyeT1lLHRoaXMuY2FjaGU9bmV3IE1hcH1zZXQoZSx0KXtjb25z''@;'; put 'put ''dCBpPSgobixlLHQscik9Pih7YXN0Om4scmVsYXRpdmVEZXBlbmRlbmNpZXM6ZSxoYXNWb2xhdGlsZUZ1bmN0aW9uOnQsaGFzU3RydWN0dXJhbENoYW5nZUZ1bmN0aW9uOnJ9KSkodCxrcSh0LHRoaXMuZnVuY3Rpb25SZWdpc3RyeSksWl8odCx0aGlzLmZ1bmN0aW9uUmVnaXN0cnkuaXNGdW5j''@;'; put 'put ''dGlvblZvbGF0aWxlKSxaXyh0LHRoaXMuZnVuY3Rpb25SZWdpc3RyeS5pc0Z1bmN0aW9uRGVwZW5kZW50T25TaGVldFN0cnVjdHVyZUNoYW5nZSkpO3JldHVybiB0aGlzLmNhY2hlLnNldChlLGkpLGl9Z2V0KGUpe3JldHVybiB0aGlzLmNhY2hlLmdldChlKX1tYXliZVNldEFuZFRoZW5HZXQo''@;'; put 'put ''ZSx0KXtjb25zdCByPXRoaXMuY2FjaGUuZ2V0KGUpO3JldHVybiB2b2lkIDAhPT1yP3IuYXN0Oih0aGlzLnNldChlLHQpLHQpfX1jb25zdCBaXz0obixlKT0+e3N3aXRjaChuLnR5cGUpe2Nhc2Ugcm4uRU1QVFk6Y2FzZSBybi5OVU1CRVI6Y2FzZSBybi5TVFJJTkc6Y2FzZSBybi5FUlJPUjpj''@;'; put 'put ''YXNlIHJuLkVSUk9SX1dJVEhfUkFXX0lOUFVUOmNhc2Ugcm4uQ0VMTF9SRUZFUkVOQ0U6Y2FzZSBybi5DRUxMX1JBTkdFOmNhc2Ugcm4uQ09MVU1OX1JBTkdFOmNhc2Ugcm4uUk9XX1JBTkdFOmNhc2Ugcm4uTkFNRURfRVhQUkVTU0lPTjpyZXR1cm4hMTtjYXNlIHJuLlBFUkNFTlRfT1A6Y2Fz''@;'; put 'put ''ZSBybi5QTFVTX1VOQVJZX09QOmNhc2Ugcm4uTUlOVVNfVU5BUllfT1A6cmV0dXJuIFpfKG4udmFsdWUsZSk7Y2FzZSBybi5DT05DQVRFTkFURV9PUDpjYXNlIHJuLkVRVUFMU19PUDpjYXNlIHJuLk5PVF9FUVVBTF9PUDpjYXNlIHJuLkxFU1NfVEhBTl9PUDpjYXNlIHJuLkdSRUFURVJfVEhB''@;'; put 'put ''Tl9PUDpjYXNlIHJuLkxFU1NfVEhBTl9PUl9FUVVBTF9PUDpjYXNlIHJuLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9PUDpjYXNlIHJuLk1JTlVTX09QOmNhc2Ugcm4uUExVU19PUDpjYXNlIHJuLlRJTUVTX09QOmNhc2Ugcm4uRElWX09QOmNhc2Ugcm4uUE9XRVJfT1A6cmV0dXJuIFpfKG4ubGVm''@;'; put 'put ''dCxlKXx8Wl8obi5yaWdodCxlKTtjYXNlIHJuLlBBUkVOVEhFU0lTOnJldHVybiBaXyhuLmV4cHJlc3Npb24sZSk7Y2FzZSBybi5GVU5DVElPTl9DQUxMOnJldHVybiEhZShuLnByb2NlZHVyZU5hbWUpfHxuLmFyZ3Muc29tZSh0PT5aXyh0LGUpKTtjYXNlIHJuLkFSUkFZOnJldHVybiBuLmFy''@;'; put 'put ''Z3Muc29tZSh0PT50LnNvbWUocj0+Wl8ocixlKSkpfX07bGV0IGRyPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLkRpc3RpbmN0U2lnbnM9IkRpc3RpbmN0IHNpZ25zLiIsbi5Xcm9uZ0FyZ051bWJlcj0iV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cy4iLG4uRW1wdHlBcmc9IkVtcHR5IGZ1bmN0''@;'; put 'put ''aW9uIGFyZ3VtZW50LiIsbi5FbXB0eUFycmF5PSJFbXB0eSBhcnJheSBub3QgYWxsb3dlZC4iLG4uQXJyYXlEaW1lbnNpb25zPSJBcnJheSBkaW1lbnNpb25zIGFyZSBub3QgY29tcGF0aWJsZS4iLG4uTm9TcGFjZUZvckFycmF5UmVzdWx0PSJObyBzcGFjZSBmb3IgYXJyYXkgcmVzdWx0LiIs''@;'; put 'put ''bi5WYWx1ZVNtYWxsPSJWYWx1ZSB0b28gc21hbGwuIixuLlZhbHVlTGFyZ2U9IlZhbHVlIHRvbyBsYXJnZS4iLG4uQmFkQ3JpdGVyaW9uPSJJbmNvcnJlY3QgY3JpdGVyaW9uLiIsbi5SYW5nZU1hbnlTaGVldHM9IlJhbmdlIHNwYW5zIG1vcmUgdGhhbiBvbmUgc2hlZXQuIixuLkNlbGxSYW5n''@;'; put 'put ''ZUV4cGVjdGVkPSJDZWxsIHJhbmdlIGV4cGVjdGVkLiIsbi5Xcm9uZ0RpbWVuc2lvbj0iV3JvbmcgcmFuZ2UgZGltZW5zaW9uLiIsbi5TY2FsYXJFeHBlY3RlZD0iQ2VsbCByYW5nZSBub3QgYWxsb3dlZC4iLG4uTnVtYmVyQ29lcmNpb249IlZhbHVlIGNhbm5vdCBiZSBjb2VyY2VkIHRvIG51''@;'; put 'put ''bWJlci4iLG4uTnVtYmVyRXhwZWN0ZWQ9Ik51bWJlciBhcmd1bWVudCBleHBlY3RlZC4iLG4uSW50ZWdlckV4cGVjdGVkPSJWYWx1ZSBuZWVkcyB0byBiZSBhbiBpbnRlZ2VyLiIsbi5CYWRNb2RlPSJNb2RlIG5vdCByZWNvZ25pemVkLiIsbi5EYXRlQm91bmRzPSJEYXRlIG91dHNpZGUgb2Yg''@;'; put 'put ''Ym91bmRzLiIsbi5PdXRPZlNoZWV0PSJSZXN1bHRpbmcgcmVmZXJlbmNlIGlzIG91dCBvZiB0aGUgc2hlZXQuIixuLldyb25nVHlwZT0iV3JvbmcgdHlwZSBvZiBhcmd1bWVudC4iLG4uTmFOPSJOYU4gb3IgaW5maW5pdGUgdmFsdWUgZW5jb3VudGVyZWQuIixuLkVxdWFsTGVuZ3RoPSJSYW5n''@;'; put 'put ''ZXMgbmVlZCB0byBiZSBvZiBlcXVhbCBsZW5ndGguIixuLk5lZ2F0aXZlPSJWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuIixuLk5vdEJpbmFyeT0iU3RyaW5nIGRvZXMgbm90IHJlcHJlc2VudCBhIGJpbmFyeSBudW1iZXIuIixuLk5vdE9jdGFsPSJTdHJpbmcgZG9lcyBub3QgcmVwcmVzZW50''@;'; put 'put ''IGFuIG9jdGFsIG51bWJlci4iLG4uTm90SGV4PSJTdHJpbmcgZG9lcyBub3QgcmVwcmVzZW50IGEgaGV4YWRlY2ltYWwgbnVtYmVyLiIsbi5FbmRTdGFydFBlcmlvZD0iRW5kIHBlcmlvZCBuZWVkcyB0byBiZSBhdCBsZWFzdCBzdGFydCBwZXJpb2QuIixuLkNlbGxSZWZFeHBlY3RlZD0iQ2Vs''@;'; put 'put ''bCByZWZlcmVuY2UgZXhwZWN0ZWQuIixuLkVtcHR5UmFuZ2U9IkVtcHR5IHJhbmdlIG5vdCBhbGxvd2VkLiIsbi5CYWRSZWY9IkFkZHJlc3MgaXMgbm90IGNvcnJlY3QuIixuLk51bWJlclJhbmdlPSJOdW1iZXItb25seSByYW5nZSBleHBlY3RlZC4iLG4uVmFsdWVOb3RGb3VuZD0iVmFsdWUg''@;'; put 'put ''bm90IGZvdW5kLiIsbi5WYWx1ZUJhc2VMYXJnZT0iVmFsdWUgaW4gYmFzZSB0b28gbGFyZ2UuIixuLlZhbHVlQmFzZVNtYWxsPSJWYWx1ZSBpbiBiYXNlIHRvbyBzbWFsbC4iLG4uVmFsdWVCYXNlTG9uZz0iVmFsdWUgaW4gYmFzZSB0b28gbG9uZy4iLG4uTmVnYXRpdmVMZW5ndGg9Ikxlbmd0''@;'; put 'put ''aCBjYW5ub3QgYmUgbmVnYXRpdmUuIixuLlBhdHRlcm5Ob3RGb3VuZD0iUGF0dGVybiBub3QgZm91bmQuIixuLk9uZVZhbHVlPSJOZWVkcyBhdCBsZWFzdCBvbmUgdmFsdWUuIixuLlR3b1ZhbHVlcz0iUmFuZ2UgbmVlZHMgdG8gY29udGFpbiBhdCBsZWFzdCB0d28gZWxlbWVudHMuIixuLlRo''@;'; put 'put ''cmVlVmFsdWVzPSJSYW5nZSBuZWVkcyB0byBjb250YWluIGF0IGxlYXN0IHRocmVlIGVsZW1lbnRzLiIsbi5JbmRleEJvdW5kcz0iSW5kZXggb3V0IG9mIGJvdW5kcy4iLG4uSW5kZXhMYXJnZT0iSW5kZXggdG9vIGxhcmdlLiIsbi5Gb3JtdWxhPSJFeHBlY3RlZCBmb3JtdWxhLiIsbi5OZWdh''@;'; put 'put ''dGl2ZUNvdW50PSJDb3VudCBjYW5ub3QgYmUgbmVnYXRpdmUuIixuLlBhcnNlRXJyb3I9IlBhcnNpbmcgZXJyb3IuIixuLlNoZWV0UmVmPSJTaGVldCBkb2VzIG5vdCBleGlzdC4iLG4uUGVyaW9kTG9uZz0iUGVyaW9kIG51bWJlciBjYW5ub3QgZXhjZWVkIGxpZmUgbGVuZ3RoLiIsbi5JbnZh''@;'; put 'put ''bGlkRGF0ZT0iSW52YWxpZCBkYXRlLiIsbi5CaXRzaGlmdExvbmc9IlJlc3VsdCBvZiBiaXRzaGlmdCBpcyB0b28gbG9uZy4iLG4uRW1wdHlTdHJpbmc9IkVtcHR5LXN0cmluZyBhcmd1bWVudCBub3QgYWxsb3dlZC4iLG4uTGVuZ3RoQm91bmRzPSJMZW5ndGggb3V0IG9mIGJvdW5kcy4iLG4u''@;'; put 'put ''TmVnYXRpdmVUaW1lPSJUaW1lIGNhbm5vdCBiZSBuZWdhdGl2ZS4iLG4uTm9EZWZhdWx0PSJObyBkZWZhdWx0IG9wdGlvbi4iLG4uTm9Db25kaXRpb25NZXQ9Ik5vbmUgb2YgdGhlIGNvbmRpdGlvbnMgd2VyZSBtZXQuIixuLlNlbGVjdG9yPSJTZWxlY3RvciBjYW5ub3QgZXhjZWVkIHRoZSBu''@;'; put 'put ''dW1iZXIgb2YgYXJndW1lbnRzLiIsbi5TdGFydEVuZERhdGU9IlN0YXJ0IGRhdGUgbmVlZHMgdG8gYmUgZWFybGllciB0aGFuIGVuZCBkYXRlLiIsbi5JbmNvcnJlY3REYXRlVGltZT0iU3RyaW5nIGRvZXMgbm90IHJlcHJlc2VudCBjb3JyZWN0IERhdGVUaW1lLiIsbi5DaGFyYWN0ZXJDb2Rl''@;'; put 'put ''Qm91bmRzPSJDaGFyYWN0ZXIgY29kZSBvdXQgb2YgYm91bmRzLiIsbi5Ob25aZXJvPSJBcmd1bWVudCBjYW5ub3QgYmUgMC4iLG4uTGVzc1RoYW5PbmU9IkFyZ3VtZW50IGNhbm5vdCBiZSBsZXNzIHRoYW4gMS4iLG4uV2Vla2VuZFN0cmluZz0iSW5jb3JyZWN0IHdlZWtlbmQgYml0bWFzayBz''@;'; put 'put ''dHJpbmcuIixuLkludmFsaWRSb21hbj0iSW52YWxpZCByb21hbiBudW1lcmFsLiIsbi5Xcm9uZ09yZGVyPSJXcm9uZyBvcmRlciBvZiB2YWx1ZXMuIixuLkNvbXBsZXhOdW1iZXJFeHBlY3RlZD0iQ29tcGxleCBudW1iZXIgZXhwZWN0ZWQuIixuLlNob3VsZEJlSW9ySj0iU2hvdWxkIGJlICdp''@;'; put 'put ''JyBvciAnaicuIixuLlNpemVNaXNtYXRjaD0iQXJyYXkgZGltZW5zaW9ucyBtaXNtYXRjaGVkLiIsbi5GdW5jdGlvbk5hbWU9ZT0+YEZ1bmN0aW9uIG5hbWUgJHtlfSBub3QgcmVjb2duaXplZC5gLG4uTmFtZWRFeHByZXNzaW9uTmFtZT1lPT5gTmFtZWQgZXhwcmVzc2lvbiAke2V9IG5vdCBy''@;'; put 'put ''ZWNvZ25pemVkLmAsbi5MaWNlbnNlS2V5PWU9PmBMaWNlbnNlIGtleSBpcyAke2V9LmAsbn0pKCk7Y29uc3QgdFA9KDAsbmEuY3JlYXRlVG9rZW4pKHtuYW1lOiJBZGRpdGlvbk9wIixwYXR0ZXJuOm5hLkxleGVyLk5BfSksTGdlPSgwLG5hLmNyZWF0ZVRva2VuKSh7bmFtZToiUGx1c09wIixw''@;'; put 'put ''YXR0ZXJuOi9cKy8sY2F0ZWdvcmllczp0UH0pLE9nZT0oMCxuYS5jcmVhdGVUb2tlbikoe25hbWU6Ik1pbnVzT3AiLHBhdHRlcm46Ly0vLGNhdGVnb3JpZXM6dFB9KSxUcT0oMCxuYS5jcmVhdGVUb2tlbikoe25hbWU6Ik11bHRpcGxpY2F0aW9uT3AiLHBhdHRlcm46bmEuTGV4ZXIuTkF9KSxI''@;'; put 'put ''emU9KDAsbmEuY3JlYXRlVG9rZW4pKHtuYW1lOiJUaW1lc09wIixwYXR0ZXJuOi9cKi8sY2F0ZWdvcmllczpUcX0pLFZ6ZT0oMCxuYS5jcmVhdGVUb2tlbikoe25hbWU6IkRpdk9wIixwYXR0ZXJuOi9cLy8sY2F0ZWdvcmllczpUcX0pLE5nZT0oMCxuYS5jcmVhdGVUb2tlbikoe25hbWU6IlBv''@;'; put 'put ''d2VyT3AiLHBhdHRlcm46L1xeL30pLEJ6ZT0oMCxuYS5jcmVhdGVUb2tlbikoe25hbWU6IlBlcmNlbnRPcCIscGF0dGVybjovJS99KSxHXz0oMCxuYS5jcmVhdGVUb2tlbikoe25hbWU6IkJvb2xlYW5PcCIscGF0dGVybjpuYS5MZXhlci5OQX0pLEZnZT0oMCxuYS5jcmVhdGVUb2tlbikoe25h''@;'; put 'put ''bWU6IkVxdWFsc09wIixwYXR0ZXJuOi89LyxjYXRlZ29yaWVzOkdffSksanplPSgwLG5hLmNyZWF0ZVRva2VuKSh7bmFtZToiTm90RXF1YWxPcCIscGF0dGVybjovPD4vLGNhdGVnb3JpZXM6R199KSxVemU9KDAsbmEuY3JlYXRlVG9rZW4pKHtuYW1lOiJHcmVhdGVyVGhhbk9wIixwYXR0ZXJu''@;'; put 'put ''Oi8+LyxjYXRlZ29yaWVzOkdffSksenplPSgwLG5hLmNyZWF0ZVRva2VuKSh7bmFtZToiTGVzc1RoYW5PcCIscGF0dGVybjovPC8sY2F0ZWdvcmllczpHX30pLFd6ZT0oMCxuYS5jcmVhdGVUb2tlbikoe25hbWU6IkdyZWF0ZXJUaGFuT3JFcXVhbE9wIixwYXR0ZXJuOi8+PS8sY2F0ZWdvcmll''@;'; put 'put ''czpHX30pLFl6ZT0oMCxuYS5jcmVhdGVUb2tlbikoe25hbWU6Ikxlc3NUaGFuT3JFcXVhbE9wIixwYXR0ZXJuOi88PS8sY2F0ZWdvcmllczpHX30pLFp6ZT0oMCxuYS5jcmVhdGVUb2tlbikoe25hbWU6IkNvbmNhdGVuYXRlT3AiLHBhdHRlcm46LyYvfSksUGdlPSgwLG5hLmNyZWF0ZVRva2Vu''@;'; put 'put ''KSh7bmFtZToiTFBhcmVuIixwYXR0ZXJuOi9cKC99KSx4cT0oMCxuYS5jcmVhdGVUb2tlbikoe25hbWU6IlJQYXJlbiIscGF0dGVybjovXCkvfSksR3plPSgwLG5hLmNyZWF0ZVRva2VuKSh7bmFtZToiQXJyYXlMUGFyZW4iLHBhdHRlcm46L3svfSksJHplPSgwLG5hLmNyZWF0ZVRva2VuKSh7''@;'; put 'put ''bmFtZToiQXJyYXlSUGFyZW4iLHBhdHRlcm46L30vfSkscXplPSgwLG5hLmNyZWF0ZVRva2VuKSh7bmFtZToiU3RyaW5nTGl0ZXJhbCIscGF0dGVybjovIihbXiJcXF0qKFxcLlteIlxcXSopKikiL30pLEt6ZT0oMCxuYS5jcmVhdGVUb2tlbikoe25hbWU6IkVycm9yTGl0ZXJhbCIscGF0dGVy''@;'; put 'put ''bjovI1tBLVphLXowLTlcL10rWz8hXT8vfSksblA9KDAsbmEuY3JlYXRlVG9rZW4pKHtuYW1lOiJSYW5nZVNlcGFyYXRvciIscGF0dGVybjpuZXcgUmVnRXhwKCI6Iil9KSxIZ2U9KDAsbmEuY3JlYXRlVG9rZW4pKHtuYW1lOiJDb2x1bW5SYW5nZSIscGF0dGVybjpuZXcgUmVnRXhwKGAke1R6''@;'; put 'put ''ZX06JHtUemV9YCl9KSxWZ2U9KDAsbmEuY3JlYXRlVG9rZW4pKHtuYW1lOiJSb3dSYW5nZSIscGF0dGVybjpuZXcgUmVnRXhwKGAke3h6ZX06JHt4emV9YCl9KSxCZ2U9KDAsbmEuY3JlYXRlVG9rZW4pKHtuYW1lOiJQcm9jZWR1cmVOYW1lIixwYXR0ZXJuOm5ldyBSZWdFeHAoYChbJHticX1d''@;'; put 'put ''WyR7QWdlfV0qKVxcKGApfSksamdlPW5ldyBjbGFzcyBzSnR7Y29uc3RydWN0b3IoKXt0aGlzLlBPU1NJQkxFX1NUQVJUX0NIQVJBQ1RFUlM9Wy4uLlJ6ZSwuLi5SUXQsczMsIiciLCJfIl0sdGhpcy5jZWxsUmVmZXJlbmNlUmVnZXhwPW5ldyBSZWdFeHAoa1F0LCJ5Iil9bWF0Y2goZSx0KXt0''@;'; put 'put ''aGlzLmNlbGxSZWZlcmVuY2VSZWdleHAubGFzdEluZGV4PXQ7Y29uc3Qgcj10aGlzLmNlbGxSZWZlcmVuY2VSZWdleHAuZXhlYyhlKyJAIik7cmV0dXJuIG51bGw9PXJ8fG51bGw9PXJbMV0/bnVsbDooclswXT1yWzFdLHIpfX0sJF89KDAsbmEuY3JlYXRlVG9rZW4pKHtuYW1lOiJDZWxsUmVm''@;'; put 'put ''ZXJlbmNlIixwYXR0ZXJuOmpnZS5tYXRjaC5iaW5kKGpnZSksc3RhcnRfY2hhcnNfaGludDpqZ2UuUE9TU0lCTEVfU1RBUlRfQ0hBUkFDVEVSUyxsaW5lX2JyZWFrczohMX0pLFVnZT1uZXcgY2xhc3MgbEp0e2NvbnN0cnVjdG9yKCl7dGhpcy5QT1NTSUJMRV9TVEFSVF9DSEFSQUNURVJTPVsu''@;'; put 'put ''Li5SemUsIl8iXSx0aGlzLm5hbWVkRXhwcmVzc2lvblJlZ2V4cD1uZXcgUmVnRXhwKGt6ZSwieSIpLHRoaXMucjFjMUNlbGxSZWZSZWdleHA9bmV3IFJlZ0V4cChgXiR7QXplfSRgKX1tYXRjaChlLHQpe3RoaXMubmFtZWRFeHByZXNzaW9uUmVnZXhwLmxhc3RJbmRleD10O2NvbnN0IHI9dGhp''@;'; put 'put ''cy5uYW1lZEV4cHJlc3Npb25SZWdleHAuZXhlYyhlKTtyZXR1cm4gbnVsbD09cnx8bnVsbD09clswXXx8dGhpcy5yMWMxQ2VsbFJlZlJlZ2V4cC50ZXN0KHJbMF0pP251bGw6cn19LFh6ZT0oMCxuYS5jcmVhdGVUb2tlbikoe25hbWU6Ik5hbWVkRXhwcmVzc2lvbiIscGF0dGVybjpVZ2UubWF0''@;'; put 'put ''Y2guYmluZChVZ2UpLHN0YXJ0X2NoYXJzX2hpbnQ6VWdlLlBPU1NJQkxFX1NUQVJUX0NIQVJBQ1RFUlMsbGluZV9icmVha3M6ITF9KSx6Z2U9bj0+e2NvbnN0IGU9bi50cmFuc2xhdGlvblBhY2thZ2UuZ2V0RnVuY3Rpb25UcmFuc2xhdGlvbigiT0ZGU0VUIiksdD1uLmVycm9yTWFwcGluZyxy''@;'; put 'put ''PW4udHJhbnNsYXRpb25QYWNrYWdlLmJ1aWxkRnVuY3Rpb25NYXBwaW5nKCksaT1uZXcgUmVnRXhwKCJzdGFuZGFyZCI9PT1uLmlnbm9yZVdoaXRlU3BhY2U/IlsgXFx0XFxuXFxyXSsiOiJcXHMrIiksbz0oMCxuYS5jcmVhdGVUb2tlbikoe25hbWU6IldoaXRlU3BhY2UiLHBhdHRlcm46aX0p''@;'; put 'put ''LGE9KDAsbmEuY3JlYXRlVG9rZW4pKHtuYW1lOiJBcnJheVJvd1NlcCIscGF0dGVybjpuLmFycmF5Um93U2VwYXJhdG9yfSksbD0oMCxuYS5jcmVhdGVUb2tlbikoe25hbWU6IkFycmF5Q29sU2VwIixwYXR0ZXJuOm4uYXJyYXlDb2x1bW5TZXBhcmF0b3J9KSx1PSgwLG5hLmNyZWF0ZVRva2Vu''@;'; put 'put ''KSh7bmFtZToiTnVtYmVyTGl0ZXJhbCIscGF0dGVybjpuZXcgUmVnRXhwKGAoKFske24uZGVjaW1hbFNlcGFyYXRvcn1dXFxkKyl8KFxcZCsoWyR7bi5kZWNpbWFsU2VwYXJhdG9yfV1cXGQqKT8pKShlWystXT9cXGQrKT9gKX0pLGc9KDAsbmEuY3JlYXRlVG9rZW4pKHtuYW1lOiJPZmZzZXRQ''@;'; put 'put ''cm9jZWR1cmVOYW1lIixwYXR0ZXJuOm5ldyBSZWdFeHAoZSwiaSIpfSk7bGV0IEUsTztyZXR1cm4gbi5mdW5jdGlvbkFyZ1NlcGFyYXRvcj09PW4uYXJyYXlDb2x1bW5TZXBhcmF0b3I/KEU9bCxPPVtdKTpuLmZ1bmN0aW9uQXJnU2VwYXJhdG9yPT09bi5hcnJheVJvd1NlcGFyYXRvcj8oRT1h''@;'; put 'put ''LE89W10pOihFPSgwLG5hLmNyZWF0ZVRva2VuKSh7bmFtZToiQXJnU2VwYXJhdG9yIixwYXR0ZXJuOm4uZnVuY3Rpb25BcmdTZXBhcmF0b3J9KSxPPVtFXSkse0FyZ1NlcGFyYXRvcjpFLE51bWJlckxpdGVyYWw6dSxPZmZzZXRQcm9jZWR1cmVOYW1lOmcsQXJyYXlSb3dTZXBhcmF0b3I6YSxB''@;'; put 'put ''cnJheUNvbFNlcGFyYXRvcjpsLFdoaXRlU3BhY2U6byxhbGxUb2tlbnM6W28sTGdlLE9nZSxIemUsVnplLE5nZSxGZ2UsanplLEJ6ZSxXemUsWXplLFV6ZSx6emUsUGdlLHhxLEd6ZSwkemUsZyxCZ2UsblAsLi4uTyxIZ2UsVmdlLHUscXplLEt6ZSxaemUsR18sdFAsVHEsJF8sWHplLGEsbF0s''@;'; put 'put ''ZXJyb3JNYXBwaW5nOnQsZnVuY3Rpb25NYXBwaW5nOnIsZGVjaW1hbFNlcGFyYXRvcjpuLmRlY2ltYWxTZXBhcmF0b3IsbWF4Q29sdW1uczpuLm1heENvbHVtbnMsbWF4Um93czpuLm1heFJvd3N9fTtjbGFzcyBKeCBleHRlbmRzIG5hLkVtYmVkZGVkQWN0aW9uc1BhcnNlcntjb25zdHJ1Y3Rv''@;'; put 'put ''cihlLHQpe3N1cGVyKGUuYWxsVG9rZW5zLHtvdXRwdXRDc3Q6ITEsbWF4TG9va2FoZWFkOjd9KSx0aGlzLmJvb2xlYW5FeHByZXNzaW9uT3JFbXB0eT10aGlzLlJVTEUoImJvb2xlYW5FeHByZXNzaW9uT3JFbXB0eSIsKCk9PnRoaXMuT1IoW3tBTFQ6KCk9PnRoaXMuU1VCUlVMRSh0aGlzLmJv''@;'; put 'put ''b2xlYW5FeHByZXNzaW9uKX0se0FMVDooMCxuYS5FTVBUWV9BTFQpKEZRdCgpKX1dKSksdGhpcy5wcm9jZWR1cmVFeHByZXNzaW9uPXRoaXMuUlVMRSgicHJvY2VkdXJlRXhwcmVzc2lvbiIsKCk9Pnt2YXIgcjtjb25zdCBpPXRoaXMuQ09OU1VNRShCZ2UpLG89aS5pbWFnZS50b1VwcGVyQ2Fz''@;'; put 'put ''ZSgpLnNsaWNlKDAsLTEpLGE9bnVsbCE9PShyPXRoaXMubGV4ZXJDb25maWcuZnVuY3Rpb25NYXBwaW5nW29dKSYmdm9pZCAwIT09cj9yOm8sbD1bXTtsZXQgdT10aGlzLlNVQlJVTEUodGhpcy5ib29sZWFuRXhwcmVzc2lvbk9yRW1wdHkpO3RoaXMuTUFOWSgoKT0+e3ZhciBFO2NvbnN0IE89''@;'; put 'put ''dGhpcy5DT05TVU1FKHRoaXMubGV4ZXJDb25maWcuQXJnU2VwYXJhdG9yKTt1LnR5cGU9PT1ybi5FTVBUWSYmKHUubGVhZGluZ1doaXRlc3BhY2U9bnVsbD09PShFPU8ubGVhZGluZ1doaXRlc3BhY2UpfHx2b2lkIDA9PT1FP3ZvaWQgMDpFLmltYWdlKSxsLnB1c2godSksdT10aGlzLlNVQlJV''@;'; put 'put ''TEUyKHRoaXMuYm9vbGVhbkV4cHJlc3Npb25PckVtcHR5KX0pLGwucHVzaCh1KSwxPT09bC5sZW5ndGgmJmxbMF0udHlwZT09PXJuLkVNUFRZJiYobC5sZW5ndGg9MCk7Y29uc3QgZz10aGlzLkNPTlNVTUUoeHEpO3JldHVybigobixlLHQscik9Pih7dHlwZTpybi5GVU5DVElPTl9DQUxMLHBy''@;'; put 'put ''b2NlZHVyZU5hbWU6bixhcmdzOmUsbGVhZGluZ1doaXRlc3BhY2U6dD8uaW1hZ2UsaW50ZXJuYWxXaGl0ZXNwYWNlOnI/LmltYWdlLGh5cGVybGluazp2b2lkIDB9KSkoYSxsLGkubGVhZGluZ1doaXRlc3BhY2UsZy5sZWFkaW5nV2hpdGVzcGFjZSl9KSx0aGlzLm5hbWVkRXhwcmVzc2lvbkV4''@;'; put 'put ''cHJlc3Npb249dGhpcy5SVUxFKCJuYW1lZEV4cHJlc3Npb25FeHByZXNzaW9uIiwoKT0+e2NvbnN0IHI9dGhpcy5DT05TVU1FKFh6ZSk7cmV0dXJuKChuLGUpPT4oe3R5cGU6cm4uTkFNRURfRVhQUkVTU0lPTixleHByZXNzaW9uTmFtZTpuLGxlYWRpbmdXaGl0ZXNwYWNlOmU/LmltYWdlfSkp''@;'; put 'put ''KHIuaW1hZ2Usci5sZWFkaW5nV2hpdGVzcGFjZSl9KSx0aGlzLm9mZnNldFByb2NlZHVyZUV4cHJlc3Npb249dGhpcy5SVUxFKCJvZmZzZXRQcm9jZWR1cmVFeHByZXNzaW9uIiwoKT0+e2NvbnN0IHI9W107cmV0dXJuIHRoaXMuQ09OU1VNRSh0aGlzLmxleGVyQ29uZmlnLk9mZnNldFByb2Nl''@;'; put 'put ''ZHVyZU5hbWUpLHRoaXMuQ09OU1VNRShQZ2UpLHRoaXMuTUFOWV9TRVAoe1NFUDp0aGlzLmxleGVyQ29uZmlnLkFyZ1NlcGFyYXRvcixERUY6KCk9PntyLnB1c2godGhpcy5TVUJSVUxFKHRoaXMuYm9vbGVhbkV4cHJlc3Npb24pKX19KSx0aGlzLkNPTlNVTUUoeHEpLHRoaXMuaGFuZGxlT2Zm''@;'; put 'put ''c2V0SGV1cmlzdGljKHIpfSksdGhpcy5jb2x1bW5SYW5nZUV4cHJlc3Npb249dGhpcy5SVUxFKCJjb2x1bW5SYW5nZUV4cHJlc3Npb24iLCgpPT57Y29uc3Qgcj10aGlzLkNPTlNVTUUoSGdlKSxbaSxvXT1yLmltYWdlLnNwbGl0KCI6IiksYT10aGlzLkFDVElPTigoKT0+d3EodGhpcy5zaGVl''@;'; put 'put ''dE1hcHBpbmcsaSx0aGlzLmZvcm11bGFBZGRyZXNzKSksbD10aGlzLkFDVElPTigoKT0+d3EodGhpcy5zaGVldE1hcHBpbmcsbyx0aGlzLmZvcm11bGFBZGRyZXNzKSk7aWYodm9pZCAwPT09YXx8dm9pZCAwPT09bClyZXR1cm4gSDYobmV3IFB0KHRuLlJFRikpO2lmKGEuZXhjZWVkc1NoZWV0''@;'; put 'put ''U2l6ZUxpbWl0cyh0aGlzLmxleGVyQ29uZmlnLm1heENvbHVtbnMpfHxsLmV4Y2VlZHNTaGVldFNpemVMaW1pdHModGhpcy5sZXhlckNvbmZpZy5tYXhDb2x1bW5zKSlyZXR1cm4gUXgoci5pbWFnZSxuZXcgUHQodG4uTkFNRSksci5sZWFkaW5nV2hpdGVzcGFjZSk7aWYodm9pZCAwPT09YS5z''@;'; put 'put ''aGVldCYmdm9pZCAwIT09bC5zaGVldClyZXR1cm4gdGhpcy5wYXJzaW5nRXJyb3IoR2guUGFyc2VyRXJyb3IsIk1hbGZvcm1lZCByYW5nZSBleHByZXNzaW9uIik7Y29uc3R7Zmlyc3RFbmQ6dSxzZWNvbmRFbmQ6ZyxzaGVldFJlZlR5cGU6RX09SnguZml4U2hlZXRJZHNGb3JSYW5nZUVuZHMo''@;'; put 'put ''YSxsKTtyZXR1cm4oKG4sZSx0LHIpPT4oRGdlKG4sZSx0KSx7dHlwZTpybi5DT0xVTU5fUkFOR0Usc3RhcnQ6bixlbmQ6ZSxzaGVldFJlZmVyZW5jZVR5cGU6dCxsZWFkaW5nV2hpdGVzcGFjZTpyPy5pbWFnZX0pKSh1LGcsRSxyLmxlYWRpbmdXaGl0ZXNwYWNlKX0pLHRoaXMucm93UmFuZ2VF''@;'; put 'put ''eHByZXNzaW9uPXRoaXMuUlVMRSgicm93UmFuZ2VFeHByZXNzaW9uIiwoKT0+e2NvbnN0IHI9dGhpcy5DT05TVU1FKFZnZSksW2ksb109ci5pbWFnZS5zcGxpdCgiOiIpLGE9dGhpcy5BQ1RJT04oKCk9PkNxKHRoaXMuc2hlZXRNYXBwaW5nLGksdGhpcy5mb3JtdWxhQWRkcmVzcykpLGw9dGhp''@;'; put 'put ''cy5BQ1RJT04oKCk9PkNxKHRoaXMuc2hlZXRNYXBwaW5nLG8sdGhpcy5mb3JtdWxhQWRkcmVzcykpO2lmKHZvaWQgMD09PWF8fHZvaWQgMD09PWwpcmV0dXJuIEg2KG5ldyBQdCh0bi5SRUYpKTtpZihhLmV4Y2VlZHNTaGVldFNpemVMaW1pdHModGhpcy5sZXhlckNvbmZpZy5tYXhSb3dzKXx8''@;'; put 'put ''bC5leGNlZWRzU2hlZXRTaXplTGltaXRzKHRoaXMubGV4ZXJDb25maWcubWF4Um93cykpcmV0dXJuIFF4KHIuaW1hZ2UsbmV3IFB0KHRuLk5BTUUpLHIubGVhZGluZ1doaXRlc3BhY2UpO2lmKHZvaWQgMD09PWEuc2hlZXQmJnZvaWQgMCE9PWwuc2hlZXQpcmV0dXJuIHRoaXMucGFyc2luZ0Vy''@;'; put 'put ''cm9yKEdoLlBhcnNlckVycm9yLCJNYWxmb3JtZWQgcmFuZ2UgZXhwcmVzc2lvbiIpO2NvbnN0e2ZpcnN0RW5kOnUsc2Vjb25kRW5kOmcsc2hlZXRSZWZUeXBlOkV9PUp4LmZpeFNoZWV0SWRzRm9yUmFuZ2VFbmRzKGEsbCk7cmV0dXJuKChuLGUsdCxyKT0+KERnZShuLGUsdCkse3R5cGU6cm4u''@;'; put 'put ''Uk9XX1JBTkdFLHN0YXJ0Om4sZW5kOmUsc2hlZXRSZWZlcmVuY2VUeXBlOnQsbGVhZGluZ1doaXRlc3BhY2U6cj8uaW1hZ2V9KSkodSxnLEUsci5sZWFkaW5nV2hpdGVzcGFjZSl9KSx0aGlzLmNlbGxSZWZlcmVuY2U9dGhpcy5SVUxFKCJjZWxsUmVmZXJlbmNlIiwoKT0+e2NvbnN0IHI9dGhp''@;'; put 'put ''cy5DT05TVU1FKCRfKSxpPXRoaXMuQUNUSU9OKCgpPT5YeCh0aGlzLnNoZWV0TWFwcGluZyxyLmltYWdlLHRoaXMuZm9ybXVsYUFkZHJlc3MpKTtyZXR1cm4gdm9pZCAwPT09aT9ReChyLmltYWdlLG5ldyBQdCh0bi5SRUYpLHIubGVhZGluZ1doaXRlc3BhY2UpOmkuZXhjZWVkc1NoZWV0U2l6''@;'; put 'put ''ZUxpbWl0cyh0aGlzLmxleGVyQ29uZmlnLm1heENvbHVtbnMsdGhpcy5sZXhlckNvbmZpZy5tYXhSb3dzKT9ReChyLmltYWdlLG5ldyBQdCh0bi5OQU1FKSxyLmxlYWRpbmdXaGl0ZXNwYWNlKTpPemUoaSxyLmxlYWRpbmdXaGl0ZXNwYWNlKX0pLHRoaXMuZW5kUmFuZ2VSZWZlcmVuY2U9dGhp''@;'; put 'put ''cy5SVUxFKCJlbmRSYW5nZVJlZmVyZW5jZSIscj0+e3ZhciBpO2NvbnN0IG89dGhpcy5DT05TVU1FKCRfKSxhPXRoaXMuQUNUSU9OKCgpPT5YeCh0aGlzLnNoZWV0TWFwcGluZyxyLmltYWdlLHRoaXMuZm9ybXVsYUFkZHJlc3MpKSxsPXRoaXMuQUNUSU9OKCgpPT5YeCh0aGlzLnNoZWV0TWFw''@;'; put 'put ''cGluZyxvLmltYWdlLHRoaXMuZm9ybXVsYUFkZHJlc3MpKTtyZXR1cm4gdm9pZCAwPT09YXx8dm9pZCAwPT09bD90aGlzLkFDVElPTigoKT0+UXgoYCR7ci5pbWFnZX06JHtvLmltYWdlfWAsbmV3IFB0KHRuLlJFRiksci5sZWFkaW5nV2hpdGVzcGFjZSkpOmEuZXhjZWVkc1NoZWV0U2l6ZUxp''@;'; put 'put ''bWl0cyh0aGlzLmxleGVyQ29uZmlnLm1heENvbHVtbnMsdGhpcy5sZXhlckNvbmZpZy5tYXhSb3dzKXx8bC5leGNlZWRzU2hlZXRTaXplTGltaXRzKHRoaXMubGV4ZXJDb25maWcubWF4Q29sdW1ucyx0aGlzLmxleGVyQ29uZmlnLm1heFJvd3MpP3RoaXMuQUNUSU9OKCgpPT5ReChgJHtyLmlt''@;'; put 'put ''YWdlfToke28uaW1hZ2V9YCxuZXcgUHQodG4uTkFNRSksci5sZWFkaW5nV2hpdGVzcGFjZSkpOnRoaXMuYnVpbGRDZWxsUmFuZ2UoYSxsLG51bGw9PT0oaT1yLmxlYWRpbmdXaGl0ZXNwYWNlKXx8dm9pZCAwPT09aT92b2lkIDA6aS5pbWFnZSl9KSx0aGlzLmVuZE9mUmFuZ2VFeHByZXNzaW9u''@;'; put 'put ''PXRoaXMuUlVMRSgiZW5kT2ZSYW5nZUV4cHJlc3Npb24iLHI9PnRoaXMuT1IoW3tBTFQ6KCk9PnRoaXMuU1VCUlVMRSh0aGlzLmVuZFJhbmdlUmVmZXJlbmNlLHtBUkdTOltyXX0pfSx7QUxUOigpPT57dmFyIGk7Y29uc3Qgbz10aGlzLlNVQlJVTEUodGhpcy5vZmZzZXRQcm9jZWR1cmVFeHBy''@;'; put 'put ''ZXNzaW9uKSxhPXRoaXMuQUNUSU9OKCgpPT5YeCh0aGlzLnNoZWV0TWFwcGluZyxyLmltYWdlLHRoaXMuZm9ybXVsYUFkZHJlc3MpKTtyZXR1cm4gdm9pZCAwPT09YT9INihuZXcgUHQodG4uUkVGKSk6by50eXBlPT09cm4uQ0VMTF9SRUZFUkVOQ0U/dGhpcy5idWlsZENlbGxSYW5nZShhLG8u''@;'; put 'put ''cmVmZXJlbmNlLG51bGw9PT0oaT1yLmxlYWRpbmdXaGl0ZXNwYWNlKXx8dm9pZCAwPT09aT92b2lkIDA6aS5pbWFnZSk6dGhpcy5wYXJzaW5nRXJyb3IoR2guUmFuZ2VPZmZzZXROb3RBbGxvd2VkLCJSYW5nZSBvZmZzZXQgbm90IGFsbG93ZWQgaGVyZSIpfX1dKSksdGhpcy5jZWxsUmFuZ2VF''@;'; put 'put ''eHByZXNzaW9uPXRoaXMuUlVMRSgiY2VsbFJhbmdlRXhwcmVzc2lvbiIsKCk9Pntjb25zdCByPXRoaXMuQ09OU1VNRSgkXyk7cmV0dXJuIHRoaXMuQ09OU1VNRTIoblApLHRoaXMuU1VCUlVMRSh0aGlzLmVuZE9mUmFuZ2VFeHByZXNzaW9uLHtBUkdTOltyXX0pfSksdGhpcy5lbmRSYW5nZVdp''@;'; put 'put ''dGhPZmZzZXRTdGFydFJlZmVyZW5jZT10aGlzLlJVTEUoImVuZFJhbmdlV2l0aE9mZnNldFN0YXJ0UmVmZXJlbmNlIixyPT57Y29uc3QgaT10aGlzLkNPTlNVTUUoJF8pLG89dGhpcy5BQ1RJT04oKCk9Plh4KHRoaXMuc2hlZXRNYXBwaW5nLGkuaW1hZ2UsdGhpcy5mb3JtdWxhQWRkcmVzcykp''@;'; put 'put ''O3JldHVybiB2b2lkIDA9PT1vP3RoaXMuQUNUSU9OKCgpPT5INihuZXcgUHQodG4uUkVGKSkpOnRoaXMuYnVpbGRDZWxsUmFuZ2Uoci5yZWZlcmVuY2UsbyxyLmxlYWRpbmdXaGl0ZXNwYWNlKX0pLHRoaXMuZW5kT2ZSYW5nZVdpdGhPZmZzZXRTdGFydEV4cHJlc3Npb249dGhpcy5SVUxFKCJl''@;'; put 'put ''bmRPZlJhbmdlV2l0aE9mZnNldFN0YXJ0RXhwcmVzc2lvbiIscj0+dGhpcy5PUihbe0FMVDooKT0+dGhpcy5TVUJSVUxFKHRoaXMuZW5kUmFuZ2VXaXRoT2Zmc2V0U3RhcnRSZWZlcmVuY2Use0FSR1M6W3JdfSl9LHtBTFQ6KCk9Pntjb25zdCBpPXRoaXMuU1VCUlVMRSh0aGlzLm9mZnNldFBy''@;'; put 'put ''b2NlZHVyZUV4cHJlc3Npb24pO3JldHVybiBpLnR5cGU9PT1ybi5DRUxMX1JFRkVSRU5DRT90aGlzLmJ1aWxkQ2VsbFJhbmdlKHIucmVmZXJlbmNlLGkucmVmZXJlbmNlLHIubGVhZGluZ1doaXRlc3BhY2UpOnRoaXMucGFyc2luZ0Vycm9yKEdoLlJhbmdlT2Zmc2V0Tm90QWxsb3dlZCwiUmFu''@;'; put 'put ''Z2Ugb2Zmc2V0IG5vdCBhbGxvd2VkIGhlcmUiKX19XSkpLHRoaXMub2Zmc2V0RXhwcmVzc2lvbj10aGlzLlJVTEUoIm9mZnNldEV4cHJlc3Npb24iLCgpPT57Y29uc3Qgcj10aGlzLlNVQlJVTEUodGhpcy5vZmZzZXRQcm9jZWR1cmVFeHByZXNzaW9uKTtsZXQgaTtyZXR1cm4gdGhpcy5PUFRJ''@;'; put 'put ''T04oKCk9Pnt0aGlzLkNPTlNVTUUoblApLGk9ci50eXBlPT09cm4uQ0VMTF9SQU5HRT90aGlzLnBhcnNpbmdFcnJvcihHaC5SYW5nZU9mZnNldE5vdEFsbG93ZWQsIlJhbmdlIG9mZnNldCBub3QgYWxsb3dlZCBoZXJlIik6dGhpcy5TVUJSVUxFKHRoaXMuZW5kT2ZSYW5nZVdpdGhPZmZzZXRT''@;'; put 'put ''dGFydEV4cHJlc3Npb24se0FSR1M6W3JdfSl9KSx2b2lkIDAhPT1pP2k6cn0pLHRoaXMuaW5zaWRlQXJyYXlFeHByZXNzaW9uPXRoaXMuUlVMRSgiaW5zaWRlQXJyYXlFeHByZXNzaW9uIiwoKT0+e2NvbnN0IHI9W1tdXTtyZXR1cm4gcltyLmxlbmd0aC0xXS5wdXNoKHRoaXMuU1VCUlVMRSh0''@;'; put 'put ''aGlzLmJvb2xlYW5FeHByZXNzaW9uKSksdGhpcy5NQU5ZKCgpPT57dGhpcy5PUihbe0FMVDooKT0+e3RoaXMuQ09OU1VNRSh0aGlzLmxleGVyQ29uZmlnLkFycmF5Q29sU2VwYXJhdG9yKSxyW3IubGVuZ3RoLTFdLnB1c2godGhpcy5TVUJSVUxFMih0aGlzLmJvb2xlYW5FeHByZXNzaW9uKSl9''@;'; put 'put ''fSx7QUxUOigpPT57dGhpcy5DT05TVU1FKHRoaXMubGV4ZXJDb25maWcuQXJyYXlSb3dTZXBhcmF0b3IpLHIucHVzaChbXSkscltyLmxlbmd0aC0xXS5wdXNoKHRoaXMuU1VCUlVMRTModGhpcy5ib29sZWFuRXhwcmVzc2lvbikpfX1dKX0pLEZ6ZShyKX0pLHRoaXMucGFyZW50aGVzaXNFeHBy''@;'; put 'put ''ZXNzaW9uPXRoaXMuUlVMRSgicGFyZW50aGVzaXNFeHByZXNzaW9uIiwoKT0+e2NvbnN0IHI9dGhpcy5DT05TVU1FKFBnZSksaT10aGlzLlNVQlJVTEUodGhpcy5ib29sZWFuRXhwcmVzc2lvbiksbz10aGlzLkNPTlNVTUUoeHEpO3JldHVybigobixlLHQpPT4oe3R5cGU6cm4uUEFSRU5USEVT''@;'; put 'put ''SVMsZXhwcmVzc2lvbjpuLGxlYWRpbmdXaGl0ZXNwYWNlOmU/LmltYWdlLGludGVybmFsV2hpdGVzcGFjZTp0Py5pbWFnZX0pKShpLHIubGVhZGluZ1doaXRlc3BhY2Usby5sZWFkaW5nV2hpdGVzcGFjZSl9KSx0aGlzLmFycmF5RXhwcmVzc2lvbj10aGlzLlJVTEUoImFycmF5RXhwcmVzc2lv''@;'; put 'put ''biIsKCk9PnRoaXMuT1IoW3tBTFQ6KCk9Pntjb25zdCByPXRoaXMuQ09OU1VNRShHemUpLGk9dGhpcy5TVUJSVUxFKHRoaXMuaW5zaWRlQXJyYXlFeHByZXNzaW9uKSxvPXRoaXMuQ09OU1VNRSgkemUpO3JldHVybiBGemUoaS5hcmdzLHIubGVhZGluZ1doaXRlc3BhY2Usby5sZWFkaW5nV2hp''@;'; put 'put ''dGVzcGFjZSl9fSx7QUxUOigpPT50aGlzLlNVQlJVTEUodGhpcy5wYXJlbnRoZXNpc0V4cHJlc3Npb24pfV0pKSx0aGlzLm51bWVyaWNTdHJpbmdUb051bWJlcj1yPT57Y29uc3QgaT1yLnJlcGxhY2UodGhpcy5sZXhlckNvbmZpZy5kZWNpbWFsU2VwYXJhdG9yLCIuIik7cmV0dXJuIE51bWJl''@;'; put 'put ''cihpKX0sdGhpcy5wb3NpdGl2ZUF0b21pY0V4cHJlc3Npb249dGhpcy5SVUxFKCJwb3NpdGl2ZUF0b21pY0V4cHJlc3Npb24iLCgpPT57dmFyIHI7cmV0dXJuIHRoaXMuT1IobnVsbCE9PShyPXRoaXMuYXRvbWljRXhwQ2FjaGUpJiZ2b2lkIDAhPT1yP3I6dGhpcy5hdG9taWNFeHBDYWNoZT1b''@;'; put 'put ''e0FMVDooKT0+dGhpcy5TVUJSVUxFKHRoaXMuYXJyYXlFeHByZXNzaW9uKX0se0FMVDooKT0+dGhpcy5TVUJSVUxFKHRoaXMuY2VsbFJhbmdlRXhwcmVzc2lvbil9LHtBTFQ6KCk9PnRoaXMuU1VCUlVMRSh0aGlzLmNvbHVtblJhbmdlRXhwcmVzc2lvbil9LHtBTFQ6KCk9PnRoaXMuU1VCUlVM''@;'; put 'put ''RSh0aGlzLnJvd1JhbmdlRXhwcmVzc2lvbil9LHtBTFQ6KCk9PnRoaXMuU1VCUlVMRSh0aGlzLm9mZnNldEV4cHJlc3Npb24pfSx7QUxUOigpPT50aGlzLlNVQlJVTEUodGhpcy5jZWxsUmVmZXJlbmNlKX0se0FMVDooKT0+dGhpcy5TVUJSVUxFKHRoaXMucHJvY2VkdXJlRXhwcmVzc2lvbil9''@;'; put 'put ''LHtBTFQ6KCk9PnRoaXMuU1VCUlVMRSh0aGlzLm5hbWVkRXhwcmVzc2lvbkV4cHJlc3Npb24pfSx7QUxUOigpPT57Y29uc3QgaT10aGlzLkNPTlNVTUUodGhpcy5sZXhlckNvbmZpZy5OdW1iZXJMaXRlcmFsKTtyZXR1cm4oKG4sZSk9Pih7dHlwZTpybi5OVU1CRVIsdmFsdWU6bixsZWFkaW5n''@;'; put 'put ''V2hpdGVzcGFjZTplPy5pbWFnZX0pKSh0aGlzLm51bWVyaWNTdHJpbmdUb051bWJlcihpLmltYWdlKSxpLmxlYWRpbmdXaGl0ZXNwYWNlKX19LHtBTFQ6KCk9PihuPT57dmFyIGU7cmV0dXJue3R5cGU6cm4uU1RSSU5HLHZhbHVlOm4uaW1hZ2Uuc2xpY2UoMSwtMSksbGVhZGluZ1doaXRlc3Bh''@;'; put 'put ''Y2U6bnVsbD09PShlPW4ubGVhZGluZ1doaXRlc3BhY2UpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmltYWdlfX0pKHRoaXMuQ09OU1VNRShxemUpKX0se0FMVDooKT0+e2NvbnN0IGk9dGhpcy5DT05TVU1FKEt6ZSksbz1pLmltYWdlLnRvVXBwZXJDYXNlKCksYT10aGlzLmxleGVyQ29uZmlnLmVy''@;'; put 'put ''cm9yTWFwcGluZ1tvXTtyZXR1cm4gYT9INihuZXcgUHQoYSksaS5sZWFkaW5nV2hpdGVzcGFjZSk6dGhpcy5wYXJzaW5nRXJyb3IoR2guUGFyc2VyRXJyb3IsIlVua25vd24gZXJyb3IgbGl0ZXJhbCIpfX1dKX0pLHRoaXMucmlnaHRVbmFyeU9wQXRvbWljRXhwcmVzc2lvbj10aGlzLlJVTEUo''@;'; put 'put ''InJpZ2h0VW5hcnlPcEF0b21pY0V4cHJlc3Npb24iLCgpPT57Y29uc3Qgcj10aGlzLlNVQlJVTEUodGhpcy5wb3NpdGl2ZUF0b21pY0V4cHJlc3Npb24pLGk9dGhpcy5PUFRJT04oKCk9PnRoaXMuQ09OU1VNRShCemUpKTtyZXR1cm4gaT8oKG4sZSk9Pih7dHlwZTpybi5QRVJDRU5UX09QLHZh''@;'; put 'put ''bHVlOm4sbGVhZGluZ1doaXRlc3BhY2U6ZT8uaW1hZ2V9KSkocixpLmxlYWRpbmdXaGl0ZXNwYWNlKTpyfSksdGhpcy5hdG9taWNFeHByZXNzaW9uPXRoaXMuUlVMRSgiYXRvbWljRXhwcmVzc2lvbiIsKCk9PnRoaXMuT1IoW3tBTFQ6KCk9Pntjb25zdCByPXRoaXMuQ09OU1VNRSh0UCksaT10''@;'; put 'put ''aGlzLlNVQlJVTEUodGhpcy5hdG9taWNFeHByZXNzaW9uKTtyZXR1cm4oMCxuYS50b2tlbk1hdGNoZXIpKHIsTGdlKT8oKG4sZSk9Pih7dHlwZTpybi5QTFVTX1VOQVJZX09QLHZhbHVlOm4sbGVhZGluZ1doaXRlc3BhY2U6ZT8uaW1hZ2V9KSkoaSxyLmxlYWRpbmdXaGl0ZXNwYWNlKTooMCxu''@;'; put 'put ''YS50b2tlbk1hdGNoZXIpKHIsT2dlKT8oKG4sZSk9Pih7dHlwZTpybi5NSU5VU19VTkFSWV9PUCx2YWx1ZTpuLGxlYWRpbmdXaGl0ZXNwYWNlOmU/LmltYWdlfSkpKGksci5sZWFkaW5nV2hpdGVzcGFjZSk6KHRoaXMuY3VzdG9tUGFyc2luZ0Vycm9yPUx6ZShHaC5QYXJzZXJFcnJvciwiTWlz''@;'; put 'put ''bWF0Y2hlZCB0b2tlbiB0eXBlIiksdGhpcy5jdXN0b21QYXJzaW5nRXJyb3IpfX0se0FMVDooKT0+dGhpcy5TVUJSVUxFMih0aGlzLnJpZ2h0VW5hcnlPcEF0b21pY0V4cHJlc3Npb24pfV0pKSx0aGlzLnBvd2VyRXhwcmVzc2lvbj10aGlzLlJVTEUoInBvd2VyRXhwcmVzc2lvbiIsKCk9Pnts''@;'; put 'put ''ZXQgcj10aGlzLlNVQlJVTEUodGhpcy5hdG9taWNFeHByZXNzaW9uKTtyZXR1cm4gdGhpcy5NQU5ZKCgpPT57Y29uc3QgaT10aGlzLkNPTlNVTUUoTmdlKSxvPXRoaXMuU1VCUlVMRTIodGhpcy5hdG9taWNFeHByZXNzaW9uKTsoMCxuYS50b2tlbk1hdGNoZXIpKGksTmdlKT9yPSgobixlLHQp''@;'; put 'put ''PT4oe3R5cGU6cm4uUE9XRVJfT1AsbGVmdDpuLHJpZ2h0OmUsbGVhZGluZ1doaXRlc3BhY2U6dD8uaW1hZ2V9KSkocixvLGkubGVhZGluZ1doaXRlc3BhY2UpOnRoaXMuQUNUSU9OKCgpPT57dGhyb3cgRXJyb3IoIk9wZXJhdG9yIG5vdCBzdXBwb3J0ZWQiKX0pfSkscn0pLHRoaXMubXVsdGlw''@;'; put 'put ''bGljYXRpb25FeHByZXNzaW9uPXRoaXMuUlVMRSgibXVsdGlwbGljYXRpb25FeHByZXNzaW9uIiwoKT0+e2xldCByPXRoaXMuU1VCUlVMRSh0aGlzLnBvd2VyRXhwcmVzc2lvbik7cmV0dXJuIHRoaXMuTUFOWSgoKT0+e2NvbnN0IGk9dGhpcy5DT05TVU1FKFRxKSxvPXRoaXMuU1VCUlVMRTIo''@;'; put 'put ''dGhpcy5wb3dlckV4cHJlc3Npb24pOygwLG5hLnRva2VuTWF0Y2hlcikoaSxIemUpP3I9KChuLGUsdCk9Pih7dHlwZTpybi5USU1FU19PUCxsZWZ0Om4scmlnaHQ6ZSxsZWFkaW5nV2hpdGVzcGFjZTp0Py5pbWFnZX0pKShyLG8saS5sZWFkaW5nV2hpdGVzcGFjZSk6KDAsbmEudG9rZW5NYXRj''@;'; put 'put ''aGVyKShpLFZ6ZSk/cj0oKG4sZSx0KT0+KHt0eXBlOnJuLkRJVl9PUCxsZWZ0Om4scmlnaHQ6ZSxsZWFkaW5nV2hpdGVzcGFjZTp0Py5pbWFnZX0pKShyLG8saS5sZWFkaW5nV2hpdGVzcGFjZSk6dGhpcy5BQ1RJT04oKCk9Pnt0aHJvdyBFcnJvcigiT3BlcmF0b3Igbm90IHN1cHBvcnRlZCIp''@;'; put 'put ''fSl9KSxyfSksdGhpcy5hZGRpdGlvbkV4cHJlc3Npb249dGhpcy5SVUxFKCJhZGRpdGlvbkV4cHJlc3Npb24iLCgpPT57bGV0IHI9dGhpcy5TVUJSVUxFKHRoaXMubXVsdGlwbGljYXRpb25FeHByZXNzaW9uKTtyZXR1cm4gdGhpcy5NQU5ZKCgpPT57Y29uc3QgaT10aGlzLkNPTlNVTUUodFAp''@;'; put 'put ''LG89dGhpcy5TVUJSVUxFMih0aGlzLm11bHRpcGxpY2F0aW9uRXhwcmVzc2lvbik7KDAsbmEudG9rZW5NYXRjaGVyKShpLExnZSk/cj0oKG4sZSx0KT0+KHt0eXBlOnJuLlBMVVNfT1AsbGVmdDpuLHJpZ2h0OmUsbGVhZGluZ1doaXRlc3BhY2U6dD8uaW1hZ2V9KSkocixvLGkubGVhZGluZ1do''@;'; put 'put ''aXRlc3BhY2UpOigwLG5hLnRva2VuTWF0Y2hlcikoaSxPZ2UpP3I9KChuLGUsdCk9Pih7dHlwZTpybi5NSU5VU19PUCxsZWZ0Om4scmlnaHQ6ZSxsZWFkaW5nV2hpdGVzcGFjZTp0Py5pbWFnZX0pKShyLG8saS5sZWFkaW5nV2hpdGVzcGFjZSk6dGhpcy5BQ1RJT04oKCk9Pnt0aHJvdyBFcnJv''@;'; put 'put ''cigiT3BlcmF0b3Igbm90IHN1cHBvcnRlZCIpfSl9KSxyfSksdGhpcy5jb25jYXRlbmF0ZUV4cHJlc3Npb249dGhpcy5SVUxFKCJjb25jYXRlbmF0ZUV4cHJlc3Npb24iLCgpPT57bGV0IHI9dGhpcy5TVUJSVUxFKHRoaXMuYWRkaXRpb25FeHByZXNzaW9uKTtyZXR1cm4gdGhpcy5NQU5ZKCgp''@;'; put 'put ''PT57Y29uc3QgaT10aGlzLkNPTlNVTUUoWnplKSxvPXRoaXMuU1VCUlVMRTIodGhpcy5hZGRpdGlvbkV4cHJlc3Npb24pO3I9KChuLGUsdCk9Pih7dHlwZTpybi5DT05DQVRFTkFURV9PUCxsZWZ0Om4scmlnaHQ6ZSxsZWFkaW5nV2hpdGVzcGFjZTp0Py5pbWFnZX0pKShyLG8saS5sZWFkaW5n''@;'; put 'put ''V2hpdGVzcGFjZSl9KSxyfSksdGhpcy5ib29sZWFuRXhwcmVzc2lvbj10aGlzLlJVTEUoImJvb2xlYW5FeHByZXNzaW9uIiwoKT0+e2xldCByPXRoaXMuU1VCUlVMRSh0aGlzLmNvbmNhdGVuYXRlRXhwcmVzc2lvbik7cmV0dXJuIHRoaXMuTUFOWSgoKT0+e2NvbnN0IGk9dGhpcy5DT05TVU1F''@;'; put 'put ''KEdfKSxvPXRoaXMuU1VCUlVMRTIodGhpcy5jb25jYXRlbmF0ZUV4cHJlc3Npb24pOygwLG5hLnRva2VuTWF0Y2hlcikoaSxGZ2UpP3I9KChuLGUsdCk9Pih7dHlwZTpybi5FUVVBTFNfT1AsbGVmdDpuLHJpZ2h0OmUsbGVhZGluZ1doaXRlc3BhY2U6dD8uaW1hZ2V9KSkocixvLGkubGVhZGlu''@;'; put 'put ''Z1doaXRlc3BhY2UpOigwLG5hLnRva2VuTWF0Y2hlcikoaSxqemUpP3I9KChuLGUsdCk9Pih7dHlwZTpybi5OT1RfRVFVQUxfT1AsbGVmdDpuLHJpZ2h0OmUsbGVhZGluZ1doaXRlc3BhY2U6dD8uaW1hZ2V9KSkocixvLGkubGVhZGluZ1doaXRlc3BhY2UpOigwLG5hLnRva2VuTWF0Y2hlciko''@;'; put 'put ''aSxVemUpP3I9KChuLGUsdCk9Pih7dHlwZTpybi5HUkVBVEVSX1RIQU5fT1AsbGVmdDpuLHJpZ2h0OmUsbGVhZGluZ1doaXRlc3BhY2U6dD8uaW1hZ2V9KSkocixvLGkubGVhZGluZ1doaXRlc3BhY2UpOigwLG5hLnRva2VuTWF0Y2hlcikoaSx6emUpP3I9KChuLGUsdCk9Pih7dHlwZTpybi5M''@;'; put 'put ''RVNTX1RIQU5fT1AsbGVmdDpuLHJpZ2h0OmUsbGVhZGluZ1doaXRlc3BhY2U6dD8uaW1hZ2V9KSkocixvLGkubGVhZGluZ1doaXRlc3BhY2UpOigwLG5hLnRva2VuTWF0Y2hlcikoaSxXemUpP3I9KChuLGUsdCk9Pih7dHlwZTpybi5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfT1AsbGVmdDpuLHJp''@;'; put 'put ''Z2h0OmUsbGVhZGluZ1doaXRlc3BhY2U6dD8uaW1hZ2V9KSkocixvLGkubGVhZGluZ1doaXRlc3BhY2UpOigwLG5hLnRva2VuTWF0Y2hlcikoaSxZemUpP3I9KChuLGUsdCk9Pih7dHlwZTpybi5MRVNTX1RIQU5fT1JfRVFVQUxfT1AsbGVmdDpuLHJpZ2h0OmUsbGVhZGluZ1doaXRlc3BhY2U6''@;'; put 'put ''dD8uaW1hZ2V9KSkocixvLGkubGVhZGluZ1doaXRlc3BhY2UpOnRoaXMuQUNUSU9OKCgpPT57dGhyb3cgRXJyb3IoIk9wZXJhdG9yIG5vdCBzdXBwb3J0ZWQiKX0pfSkscn0pLHRoaXMuZm9ybXVsYT10aGlzLlJVTEUoImZvcm11bGEiLCgpPT4odGhpcy5DT05TVU1FKEZnZSksdGhpcy5TVUJS''@;'; put 'put ''VUxFKHRoaXMuYm9vbGVhbkV4cHJlc3Npb24pKSksdGhpcy5sZXhlckNvbmZpZz1lLHRoaXMuc2hlZXRNYXBwaW5nPXQsdGhpcy5mb3JtdWxhQWRkcmVzcz1CbygwLDAsMCksdGhpcy5wZXJmb3JtU2VsZkFuYWx5c2lzKCl9cGFyc2VGcm9tVG9rZW5zKGUsdCl7dGhpcy5pbnB1dD1lO2xldCBy''@;'; put 'put ''PXRoaXMuZm9ybXVsYVdpdGhDb250ZXh0KHQpLGk9W107cmV0dXJuIHRoaXMuY3VzdG9tUGFyc2luZ0Vycm9yJiZpLnB1c2godGhpcy5jdXN0b21QYXJzaW5nRXJyb3IpLGk9aS5jb25jYXQodGhpcy5lcnJvcnMubWFwKG89Pih7dHlwZTpHaC5QYXJzZXJFcnJvcixtZXNzYWdlOm8ubWVzc2Fn''@;'; put 'put ''ZX0pKSksaS5sZW5ndGg+MCYmKHI9SWdlKCkpLHthc3Q6cixlcnJvcnM6aX19cmVzZXQoKXtzdXBlci5yZXNldCgpLHRoaXMuY3VzdG9tUGFyc2luZ0Vycm9yPXZvaWQgMH1mb3JtdWxhV2l0aENvbnRleHQoZSl7cmV0dXJuIHRoaXMuZm9ybXVsYUFkZHJlc3M9ZSx0aGlzLmZvcm11bGEoKX1i''@;'; put 'put ''dWlsZENlbGxSYW5nZShlLHQscil7aWYodm9pZCAwPT09ZS5zaGVldCYmdm9pZCAwIT09dC5zaGVldClyZXR1cm4gdGhpcy5wYXJzaW5nRXJyb3IoR2guUGFyc2VyRXJyb3IsIk1hbGZvcm1lZCByYW5nZSBleHByZXNzaW9uIik7Y29uc3R7Zmlyc3RFbmQ6aSxzZWNvbmRFbmQ6byxzaGVldFJl''@;'; put 'put ''ZlR5cGU6YX09SnguZml4U2hlZXRJZHNGb3JSYW5nZUVuZHMoZSx0KTtyZXR1cm4gTnplKGksbyxhLHIpfXN0YXRpYyBmaXhTaGVldElkc0ZvclJhbmdlRW5kcyhlLHQpe2NvbnN0IHI9SngucmFuZ2VTaGVldFJlZmVyZW5jZVR5cGUoZS5zaGVldCx0LnNoZWV0KTtyZXR1cm57Zmlyc3RFbmQ6''@;'; put 'put ''ZSxzZWNvbmRFbmQ6dm9pZCAwIT09ZS5zaGVldCYmdm9pZCAwPT09dC5zaGVldD90LndpdGhTaGVldChlLnNoZWV0KTp0LHNoZWV0UmVmVHlwZTpyfX1oYW5kbGVPZmZzZXRIZXVyaXN0aWMoZSl7Y29uc3QgdD1lWzBdO2lmKHQudHlwZSE9PXJuLkNFTExfUkVGRVJFTkNFKXJldHVybiB0aGlz''@;'; put 'put ''LnBhcnNpbmdFcnJvcihHaC5TdGF0aWNPZmZzZXRFcnJvciwiRmlyc3QgYXJndW1lbnQgdG8gT0ZGU0VUIGlzIG5vdCBhIHJlZmVyZW5jZSIpO2NvbnN0IHI9ZVsxXTtsZXQgaTtpZihyLnR5cGU9PT1ybi5OVU1CRVImJk51bWJlci5pc0ludGVnZXIoci52YWx1ZSkpaT1yLnZhbHVlO2Vsc2Ug''@;'; put 'put ''aWYoci50eXBlPT09cm4uUExVU19VTkFSWV9PUCYmci52YWx1ZS50eXBlPT09cm4uTlVNQkVSJiZOdW1iZXIuaXNJbnRlZ2VyKHIudmFsdWUudmFsdWUpKWk9ci52YWx1ZS52YWx1ZTtlbHNle2lmKHIudHlwZSE9PXJuLk1JTlVTX1VOQVJZX09QfHxyLnZhbHVlLnR5cGUhPT1ybi5OVU1CRVJ8''@;'; put 'put ''fCFOdW1iZXIuaXNJbnRlZ2VyKHIudmFsdWUudmFsdWUpKXJldHVybiB0aGlzLnBhcnNpbmdFcnJvcihHaC5TdGF0aWNPZmZzZXRFcnJvciwiU2Vjb25kIGFyZ3VtZW50IHRvIE9GRlNFVCBpcyBub3QgYSBzdGF0aWMgbnVtYmVyIik7aT0tci52YWx1ZS52YWx1ZX1jb25zdCBvPWVbMl07bGV0''@;'; put 'put ''IGE7aWYoby50eXBlPT09cm4uTlVNQkVSJiZOdW1iZXIuaXNJbnRlZ2VyKG8udmFsdWUpKWE9by52YWx1ZTtlbHNlIGlmKG8udHlwZT09PXJuLlBMVVNfVU5BUllfT1AmJm8udmFsdWUudHlwZT09PXJuLk5VTUJFUiYmTnVtYmVyLmlzSW50ZWdlcihvLnZhbHVlLnZhbHVlKSlhPW8udmFsdWUu''@;'; put 'put ''dmFsdWU7ZWxzZXtpZihvLnR5cGUhPT1ybi5NSU5VU19VTkFSWV9PUHx8by52YWx1ZS50eXBlIT09cm4uTlVNQkVSfHwhTnVtYmVyLmlzSW50ZWdlcihvLnZhbHVlLnZhbHVlKSlyZXR1cm4gdGhpcy5wYXJzaW5nRXJyb3IoR2guU3RhdGljT2Zmc2V0RXJyb3IsIlRoaXJkIGFyZ3VtZW50IHRv''@;'; put 'put ''IE9GRlNFVCBpcyBub3QgYSBzdGF0aWMgbnVtYmVyIik7YT0tby52YWx1ZS52YWx1ZX1jb25zdCBsPWVbM107bGV0IHU7aWYodm9pZCAwPT09bCl1PTE7ZWxzZXtpZihsLnR5cGUhPT1ybi5OVU1CRVIpcmV0dXJuIHRoaXMucGFyc2luZ0Vycm9yKEdoLlN0YXRpY09mZnNldEVycm9yLCJGb3Vy''@;'; put 'put ''dGggYXJndW1lbnQgdG8gT0ZGU0VUIGlzIG5vdCBhIHN0YXRpYyBudW1iZXIiKTtpZih1PWwudmFsdWUsdTwxKXJldHVybiB0aGlzLnBhcnNpbmdFcnJvcihHaC5TdGF0aWNPZmZzZXRFcnJvciwiRm91cnRoIGFyZ3VtZW50IHRvIE9GRlNFVCBpcyB0b28gc21hbGwgbnVtYmVyIik7aWYoIU51''@;'; put 'put ''bWJlci5pc0ludGVnZXIodSkpcmV0dXJuIHRoaXMucGFyc2luZ0Vycm9yKEdoLlN0YXRpY09mZnNldEVycm9yLCJGb3VydGggYXJndW1lbnQgdG8gT0ZGU0VUIGlzIG5vdCBpbnRlZ2VyIil9Y29uc3QgZz1lWzRdO2xldCBFO2lmKHZvaWQgMD09PWcpRT0xO2Vsc2V7aWYoZy50eXBlIT09cm4u''@;'; put 'put ''TlVNQkVSKXJldHVybiB0aGlzLnBhcnNpbmdFcnJvcihHaC5TdGF0aWNPZmZzZXRFcnJvciwiRmlmdGggYXJndW1lbnQgdG8gT0ZGU0VUIGlzIG5vdCBhIHN0YXRpYyBudW1iZXIiKTtpZihFPWcudmFsdWUsRTwxKXJldHVybiB0aGlzLnBhcnNpbmdFcnJvcihHaC5TdGF0aWNPZmZzZXRFcnJv''@;'; put 'put ''ciwiRmlmdGggYXJndW1lbnQgdG8gT0ZGU0VUIGlzIHRvbyBzbWFsbCBudW1iZXIiKTtpZighTnVtYmVyLmlzSW50ZWdlcihFKSlyZXR1cm4gdGhpcy5wYXJzaW5nRXJyb3IoR2guU3RhdGljT2Zmc2V0RXJyb3IsIkZpZnRoIGFyZ3VtZW50IHRvIE9GRlNFVCBpcyBub3QgaW50ZWdlciIpfWNv''@;'; put 'put ''bnN0IE89bmV3IHh1KHQucmVmZXJlbmNlLmNvbCthLHQucmVmZXJlbmNlLnJvdytpLHQucmVmZXJlbmNlLnR5cGUpO2xldCBaPU8uY29sLGVlPU8ucm93O2lmKCh0LnJlZmVyZW5jZS50eXBlPT09bXUuQ0VMTF9SRUZFUkVOQ0VfUkVMQVRJVkV8fHQucmVmZXJlbmNlLnR5cGU9PT1tdS5DRUxM''@;'; put 'put ''X1JFRkVSRU5DRV9BQlNPTFVURV9DT0wpJiYoZWUrPXRoaXMuZm9ybXVsYUFkZHJlc3Mucm93KSwodC5yZWZlcmVuY2UudHlwZT09PW11LkNFTExfUkVGRVJFTkNFX1JFTEFUSVZFfHx0LnJlZmVyZW5jZS50eXBlPT09bXUuQ0VMTF9SRUZFUkVOQ0VfQUJTT0xVVEVfUk9XKSYmKForPXRoaXMu''@;'; put 'put ''Zm9ybXVsYUFkZHJlc3MuY29sKSxaPDB8fGVlPDApcmV0dXJuIEg2KG5ldyBQdCh0bi5SRUYsZHIuT3V0T2ZTaGVldCkpO2lmKDE9PT1FJiYxPT09dSlyZXR1cm4gT3plKE8pO3tjb25zdCB2ZT1uZXcgeHUoTy5jb2wrRS0xLE8ucm93K3UtMSxPLnR5cGUpO3JldHVybiBOemUoTyx2ZSxHNC5S''@;'; put 'put ''RUxBVElWRSl9fXBhcnNpbmdFcnJvcihlLHQpe3JldHVybiB0aGlzLmN1c3RvbVBhcnNpbmdFcnJvcj1MemUoZSx0KSxJZ2UoKX1zdGF0aWMgcmFuZ2VTaGVldFJlZmVyZW5jZVR5cGUoZSx0KXtyZXR1cm4gdm9pZCAwPT09ZT9HNC5SRUxBVElWRTp2b2lkIDA9PT10P0c0LlNUQVJUX0FCU09M''@;'; put 'put ''VVRFOkc0LkJPVEhfQUJTT0xVVEV9fWNsYXNzIEFxe2NvbnN0cnVjdG9yKGUpe3RoaXMubGV4ZXJDb25maWc9ZSx0aGlzLmxleGVyPW5ldyBuYS5MZXhlcihlLmFsbFRva2Vucyx7ZW5zdXJlT3B0aW1pemF0aW9uczohMH0pfXRva2VuaXplRm9ybXVsYShlKXtjb25zdCB0PXRoaXMubGV4ZXIu''@;'; put 'put ''dG9rZW5pemUoZSk7bGV0IHI9dC50b2tlbnM7cmV0dXJuIHI9dGhpcy50cmltVHJhaWxpbmdXaGl0ZXNwYWNlcyhyKSxyPXRoaXMuc2tpcFdoaXRlc3BhY2VzSW5zaWRlUmFuZ2VzKHIpLHI9dGhpcy5za2lwV2hpdGVzcGFjZXNCZWZvcmVBcmdTZXBhcmF0b3JzKHIpLHQudG9rZW5zPXIsdH1z''@;'; put 'put ''a2lwV2hpdGVzcGFjZXNJbnNpZGVSYW5nZXMoZSl7cmV0dXJuIEFxLmZpbHRlclRva2Vuc0J5TmVpZ2hib3JzKGUsKHQscixpKT0+KCgwLG5hLnRva2VuTWF0Y2hlcikodCwkXyl8fCgwLG5hLnRva2VuTWF0Y2hlcikodCxuUCkpJiYoMCxuYS50b2tlbk1hdGNoZXIpKHIsdGhpcy5sZXhlckNv''@;'; put 'put ''bmZpZy5XaGl0ZVNwYWNlKSYmKCgwLG5hLnRva2VuTWF0Y2hlcikoaSwkXyl8fCgwLG5hLnRva2VuTWF0Y2hlcikoaSxuUCkpKX1za2lwV2hpdGVzcGFjZXNCZWZvcmVBcmdTZXBhcmF0b3JzKGUpe3JldHVybiBBcS5maWx0ZXJUb2tlbnNCeU5laWdoYm9ycyhlLCh0LHIsaSk9PiEoMCxuYS50''@;'; put 'put ''b2tlbk1hdGNoZXIpKHQsdGhpcy5sZXhlckNvbmZpZy5BcmdTZXBhcmF0b3IpJiYoMCxuYS50b2tlbk1hdGNoZXIpKHIsdGhpcy5sZXhlckNvbmZpZy5XaGl0ZVNwYWNlKSYmKDAsbmEudG9rZW5NYXRjaGVyKShpLHRoaXMubGV4ZXJDb25maWcuQXJnU2VwYXJhdG9yKSl9c3RhdGljIGZpbHRl''@;'; put 'put ''clRva2Vuc0J5TmVpZ2hib3JzKGUsdCl7aWYoZS5sZW5ndGg8MylyZXR1cm4gZTtsZXQgcj0wO2NvbnN0IGk9W2VbcisrXV07Zm9yKDtyPGUubGVuZ3RoLTE7KXQoZVtyLTFdLGVbcl0sZVtyKzFdKXx8aS5wdXNoKGVbcl0pLCsrcjtyZXR1cm4gaS5wdXNoKGVbcl0pLGl9dHJpbVRyYWlsaW5n''@;'; put 'put ''V2hpdGVzcGFjZXMoZSl7cmV0dXJuIGUubGVuZ3RoPjAmJigwLG5hLnRva2VuTWF0Y2hlcikoZVtlLmxlbmd0aC0xXSx0aGlzLmxleGVyQ29uZmlnLldoaXRlU3BhY2UpJiZlLnBvcCgpLGV9fWNsYXNzIFF6ZXtjb25zdHJ1Y3RvcihlLHQscixpKXt0aGlzLmNvbmZpZz1lLHRoaXMubGV4ZXJD''@;'; put 'put ''b25maWc9dCx0aGlzLnNoZWV0TWFwcGluZ0ZuPXIsdGhpcy5uYW1lZEV4cHJlc3Npb25zPWl9dW5wYXJzZShlLHQpe3JldHVybiI9Iit0aGlzLnVucGFyc2VBc3QoZSx0KX11bnBhcnNlQXN0KGUsdCl7dmFyIHIsaTtzd2l0Y2goZS50eXBlKXtjYXNlIHJuLkVNUFRZOnJldHVybiBlYygiIixl''@;'; put 'put ''LmxlYWRpbmdXaGl0ZXNwYWNlKTtjYXNlIHJuLk5VTUJFUjpyZXR1cm4gZWMoSnplKGUudmFsdWUsdGhpcy5jb25maWcuZGVjaW1hbFNlcGFyYXRvciksZS5sZWFkaW5nV2hpdGVzcGFjZSk7Y2FzZSBybi5TVFJJTkc6cmV0dXJuIGVjKCciJytlLnZhbHVlKyciJyxlLmxlYWRpbmdXaGl0ZXNw''@;'; put 'put ''YWNlKTtjYXNlIHJuLkZVTkNUSU9OX0NBTEw6e2NvbnN0IG89ZS5hcmdzLm1hcCh1PT52b2lkIDAhPT11P3RoaXMudW5wYXJzZUFzdCh1LHQpOiIiKS5qb2luKHRoaXMuY29uZmlnLmZ1bmN0aW9uQXJnU2VwYXJhdG9yKSxsPSh0aGlzLmNvbmZpZy50cmFuc2xhdGlvblBhY2thZ2UuaXNGdW5j''@;'; put 'put ''dGlvblRyYW5zbGF0ZWQoZS5wcm9jZWR1cmVOYW1lKT90aGlzLmNvbmZpZy50cmFuc2xhdGlvblBhY2thZ2UuZ2V0RnVuY3Rpb25UcmFuc2xhdGlvbihlLnByb2NlZHVyZU5hbWUpOmUucHJvY2VkdXJlTmFtZSkrIigiK28rZWMoIikiLGUuaW50ZXJuYWxXaGl0ZXNwYWNlKTtyZXR1cm4gZWMo''@;'; put 'put ''bCxlLmxlYWRpbmdXaGl0ZXNwYWNlKX1jYXNlIHJuLk5BTUVEX0VYUFJFU1NJT046cmV0dXJuIGVjKChudWxsPT09KHI9dGhpcy5uYW1lZEV4cHJlc3Npb25zLm5lYXJlc3ROYW1lZEV4cHJlc3Npb24oZS5leHByZXNzaW9uTmFtZSx0LnNoZWV0KSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZGlz''@;'; put 'put ''cGxheU5hbWUpfHxlLmV4cHJlc3Npb25OYW1lLGUubGVhZGluZ1doaXRlc3BhY2UpO2Nhc2Ugcm4uQ0VMTF9SRUZFUkVOQ0U6e2xldCBvO3JldHVybiBvPXZvaWQgMCE9PWUucmVmZXJlbmNlLnNoZWV0P3RoaXMudW5wYXJzZVNoZWV0TmFtZShlLnJlZmVyZW5jZS5zaGVldCkrIiEiOiIiLG8r''@;'; put 'put ''PW51bGwhPT0oaT1lLnJlZmVyZW5jZS51bnBhcnNlKHQpKSYmdm9pZCAwIT09aT9pOnRoaXMuY29uZmlnLnRyYW5zbGF0aW9uUGFja2FnZS5nZXRFcnJvclRyYW5zbGF0aW9uKHRuLlJFRiksZWMobyxlLmxlYWRpbmdXaGl0ZXNwYWNlKX1jYXNlIHJuLkNPTFVNTl9SQU5HRTpjYXNlIHJuLlJP''@;'; put 'put ''V19SQU5HRTpjYXNlIHJuLkNFTExfUkFOR0U6cmV0dXJuIGVjKHRoaXMuZm9ybWF0UmFuZ2UoZSx0KSxlLmxlYWRpbmdXaGl0ZXNwYWNlKTtjYXNlIHJuLlBMVVNfVU5BUllfT1A6e2NvbnN0IG89dGhpcy51bnBhcnNlQXN0KGUudmFsdWUsdCk7cmV0dXJuIGVjKCIrIixlLmxlYWRpbmdXaGl0''@;'; put 'put ''ZXNwYWNlKStvfWNhc2Ugcm4uTUlOVVNfVU5BUllfT1A6e2NvbnN0IG89dGhpcy51bnBhcnNlQXN0KGUudmFsdWUsdCk7cmV0dXJuIGVjKCItIixlLmxlYWRpbmdXaGl0ZXNwYWNlKStvfWNhc2Ugcm4uUEVSQ0VOVF9PUDpyZXR1cm4gdGhpcy51bnBhcnNlQXN0KGUudmFsdWUsdCkrZWMoIiUi''@;'; put 'put ''LGUubGVhZGluZ1doaXRlc3BhY2UpO2Nhc2Ugcm4uRVJST1I6cmV0dXJuIGVjKHRoaXMuY29uZmlnLnRyYW5zbGF0aW9uUGFja2FnZS5nZXRFcnJvclRyYW5zbGF0aW9uKGUuZXJyb3I/ZS5lcnJvci50eXBlOnRuLkVSUk9SKSxlLmxlYWRpbmdXaGl0ZXNwYWNlKTtjYXNlIHJuLkVSUk9SX1dJ''@;'; put 'put ''VEhfUkFXX0lOUFVUOnJldHVybiBlYyhlLnJhd0lucHV0LGUubGVhZGluZ1doaXRlc3BhY2UpO2Nhc2Ugcm4uUEFSRU5USEVTSVM6e2NvbnN0IGE9IigiK3RoaXMudW5wYXJzZUFzdChlLmV4cHJlc3Npb24sdCkrZWMoIikiLGUuaW50ZXJuYWxXaGl0ZXNwYWNlKTtyZXR1cm4gZWMoYSxlLmxl''@;'; put 'put ''YWRpbmdXaGl0ZXNwYWNlKX1jYXNlIHJuLkFSUkFZOntjb25zdCBvPSJ7IitlLmFyZ3MubWFwKGE9PmEubWFwKGw9PnRoaXMudW5wYXJzZUFzdChsLHQpKS5qb2luKHRoaXMuY29uZmlnLmFycmF5Q29sdW1uU2VwYXJhdG9yKSkuam9pbih0aGlzLmNvbmZpZy5hcnJheVJvd1NlcGFyYXRvcikr''@;'; put 'put ''ZWMoIn0iLGUuaW50ZXJuYWxXaGl0ZXNwYWNlKTtyZXR1cm4gZWMobyxlLmxlYWRpbmdXaGl0ZXNwYWNlKX1kZWZhdWx0Ontjb25zdCBvPXRoaXMudW5wYXJzZUFzdChlLmxlZnQsdCksYT10aGlzLnVucGFyc2VBc3QoZS5yaWdodCx0KTtyZXR1cm4gbytlYyhQemVbZS50eXBlXSxlLmxlYWRp''@;'; put 'put ''bmdXaGl0ZXNwYWNlKSthfX19dW5wYXJzZVNoZWV0TmFtZShlKXtjb25zdCB0PUR6ZShlLHRoaXMuc2hlZXRNYXBwaW5nRm4pO2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IFNoKGUpO3JldHVybiB0fWZvcm1hdFJhbmdlKGUsdCl7bGV0IHI9IiIsaT0iIjt2b2lkIDAhPT1lLnN0YXJ0LnNoZWV0''@;'; put 'put ''JiZlLnNoZWV0UmVmZXJlbmNlVHlwZSE9PUc0LlJFTEFUSVZFJiYocj10aGlzLnVucGFyc2VTaGVldE5hbWUoZS5zdGFydC5zaGVldCkrIiEiKSx2b2lkIDAhPT1lLmVuZC5zaGVldCYmZS5zaGVldFJlZmVyZW5jZVR5cGU9PT1HNC5CT1RIX0FCU09MVVRFJiYoaT10aGlzLnVucGFyc2VTaGVl''@;'; put 'put ''dE5hbWUoZS5lbmQuc2hlZXQpKyIhIik7Y29uc3Qgbz1lLnN0YXJ0LnVucGFyc2UodCksYT1lLmVuZC51bnBhcnNlKHQpO3JldHVybiB2b2lkIDA9PT1vfHx2b2lkIDA9PT1hP3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUGFja2FnZS5nZXRFcnJvclRyYW5zbGF0aW9uKHRuLlJFRik6YCR7cn0k''@;'; put 'put ''e299OiR7aX0ke2F9YH19ZnVuY3Rpb24gSnplKG4sZSl7cmV0dXJuIG4udG9TdHJpbmcoKS5yZXBsYWNlKCIuIixlKX1jbGFzcyByUHtjb25zdHJ1Y3RvcihlLHQscil7dGhpcy5jb25maWc9ZSx0aGlzLmZ1bmN0aW9uUmVnaXN0cnk9dCx0aGlzLnNoZWV0TWFwcGluZz1yLHRoaXMuc3RhdHND''@;'; put 'put ''YWNoZVVzZWQ9MCx0aGlzLmxleGVyQ29uZmlnPXpnZShlKSx0aGlzLmxleGVyPW5ldyBBcSh0aGlzLmxleGVyQ29uZmlnKSx0aGlzLmZvcm11bGFQYXJzZXI9bmV3IEp4KHRoaXMubGV4ZXJDb25maWcsdGhpcy5zaGVldE1hcHBpbmcpLHRoaXMuY2FjaGU9bmV3IGFKdCh0aGlzLmZ1bmN0aW9u''@;'; put 'put ''UmVnaXN0cnkpfXBhcnNlKGUsdCl7dGhpcy5mb3JtdWxhQWRkcmVzcz10O2NvbnN0IHI9dGhpcy50b2tlbml6ZUZvcm11bGEoZSk7aWYoci5lcnJvcnMubGVuZ3RoPjApe2NvbnN0IE89ci5lcnJvcnMubWFwKFo9Pih7dHlwZTpHaC5MZXhpbmdFcnJvcixtZXNzYWdlOloubWVzc2FnZX0pKTty''@;'; put 'put ''ZXR1cm57YXN0OklnZSgpLGVycm9yczpPLGhhc1ZvbGF0aWxlRnVuY3Rpb246ITEsaGFzU3RydWN0dXJhbENoYW5nZUZ1bmN0aW9uOiExLGRlcGVuZGVuY2llczpbXX19Y29uc3QgaT10aGlzLmNvbXB1dGVIYXNoRnJvbVRva2VucyhyLnRva2Vucyx0KTtsZXQgbz10aGlzLmNhY2hlLmdldChp''@;'; put 'put ''KTtpZih2b2lkIDAhPT1vKSsrdGhpcy5zdGF0c0NhY2hlVXNlZDtlbHNle2NvbnN0IE89dGhpcy5iaW5kV2hpdGVzcGFjZXNUb1Rva2VucyhyLnRva2VucyksWj10aGlzLmZvcm11bGFQYXJzZXIucGFyc2VGcm9tVG9rZW5zKE8sdCk7aWYoWi5lcnJvcnMubGVuZ3RoPjApcmV0dXJuIE9iamVj''@;'; put 'put ''dC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxaKSx7aGFzVm9sYXRpbGVGdW5jdGlvbjohMSxoYXNTdHJ1Y3R1cmFsQ2hhbmdlRnVuY3Rpb246ITEsZGVwZW5kZW5jaWVzOltdfSk7bz10aGlzLmNhY2hlLnNldChpLFouYXN0KX1jb25zdHthc3Q6YSxoYXNWb2xhdGlsZUZ1bmN0aW9uOmwsaGFz''@;'; put 'put ''U3RydWN0dXJhbENoYW5nZUZ1bmN0aW9uOnV9PW8sZz10aGlzLmNvbnZlcnRSZXZlcnNlZFJhbmdlc1RvUmVndWxhclJhbmdlcyhhKTtyZXR1cm57YXN0OmcsZXJyb3JzOltdLGhhc1ZvbGF0aWxlRnVuY3Rpb246bCxoYXNTdHJ1Y3R1cmFsQ2hhbmdlRnVuY3Rpb246dSxkZXBlbmRlbmNpZXM6''@;'; put 'put ''a3EoZyx0aGlzLmZ1bmN0aW9uUmVnaXN0cnkpfX1jb252ZXJ0UmV2ZXJzZWRSYW5nZXNUb1JlZ3VsYXJSYW5nZXMoZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSBybi5FTVBUWTpjYXNlIHJuLk5VTUJFUjpjYXNlIHJuLlNUUklORzpjYXNlIHJuLkVSUk9SOmNhc2Ugcm4uRVJST1JfV0lUSF9SQVdf''@;'; put 'put ''SU5QVVQ6Y2FzZSBybi5DRUxMX1JFRkVSRU5DRTpjYXNlIHJuLk5BTUVEX0VYUFJFU1NJT046cmV0dXJuIGU7Y2FzZSBybi5DRUxMX1JBTkdFOntjb25zdHtzdGFydDp0LGVuZDpyfT1lLGk9dGhpcy5vcmRlckNlbGxSYW5nZUVuZHModCxyKTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3Qu''@;'; put 'put ''YXNzaWduKHt9LGUpLHtzdGFydDppLnN0YXJ0LGVuZDppLmVuZH0pfWNhc2Ugcm4uQ09MVU1OX1JBTkdFOntjb25zdHtzdGFydDp0LGVuZDpyfT1lLGk9dGhpcy5vcmRlckNvbHVtblJhbmdlRW5kcyh0LHIpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse3N0YXJ0''@;'; put 'put ''Omkuc3RhcnQsZW5kOmkuZW5kfSl9Y2FzZSBybi5ST1dfUkFOR0U6e2NvbnN0e3N0YXJ0OnQsZW5kOnJ9PWUsaT10aGlzLm9yZGVyUm93UmFuZ2VFbmRzKHQscik7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7c3RhcnQ6aS5zdGFydCxlbmQ6aS5lbmR9KX1jYXNl''@;'; put 'put ''IHJuLlBFUkNFTlRfT1A6Y2FzZSBybi5QTFVTX1VOQVJZX09QOmNhc2Ugcm4uTUlOVVNfVU5BUllfT1A6e2NvbnN0IHQ9dGhpcy5jb252ZXJ0UmV2ZXJzZWRSYW5nZXNUb1JlZ3VsYXJSYW5nZXMoZS52YWx1ZSk7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7dmFs''@;'; put 'put ''dWU6dH0pfWNhc2Ugcm4uQ09OQ0FURU5BVEVfT1A6Y2FzZSBybi5FUVVBTFNfT1A6Y2FzZSBybi5OT1RfRVFVQUxfT1A6Y2FzZSBybi5MRVNTX1RIQU5fT1A6Y2FzZSBybi5HUkVBVEVSX1RIQU5fT1A6Y2FzZSBybi5MRVNTX1RIQU5fT1JfRVFVQUxfT1A6Y2FzZSBybi5HUkVBVEVSX1RIQU5f''@;'; put 'put ''T1JfRVFVQUxfT1A6Y2FzZSBybi5NSU5VU19PUDpjYXNlIHJuLlBMVVNfT1A6Y2FzZSBybi5USU1FU19PUDpjYXNlIHJuLkRJVl9PUDpjYXNlIHJuLlBPV0VSX09QOntjb25zdCB0PXRoaXMuY29udmVydFJldmVyc2VkUmFuZ2VzVG9SZWd1bGFyUmFuZ2VzKGUubGVmdCkscj10aGlzLmNvbnZl''@;'; put 'put ''cnRSZXZlcnNlZFJhbmdlc1RvUmVndWxhclJhbmdlcyhlLnJpZ2h0KTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtsZWZ0OnQscmlnaHQ6cn0pfWNhc2Ugcm4uUEFSRU5USEVTSVM6e2NvbnN0IHQ9dGhpcy5jb252ZXJ0UmV2ZXJzZWRSYW5nZXNUb1JlZ3VsYXJS''@;'; put 'put ''YW5nZXMoZS5leHByZXNzaW9uKTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtleHByZXNzaW9uOnR9KX1jYXNlIHJuLkZVTkNUSU9OX0NBTEw6e2NvbnN0IHQ9ZS5hcmdzLm1hcChyPT50aGlzLmNvbnZlcnRSZXZlcnNlZFJhbmdlc1RvUmVndWxhclJhbmdlcyhy''@;'; put 'put ''KSk7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7YXJnczp0fSl9Y2FzZSBybi5BUlJBWTp7Y29uc3QgdD1lLmFyZ3MubWFwKHI9PnIubWFwKGk9PnRoaXMuY29udmVydFJldmVyc2VkUmFuZ2VzVG9SZWd1bGFyUmFuZ2VzKGkpKSk7cmV0dXJuIE9iamVjdC5hc3Np''@;'; put 'put ''Z24oT2JqZWN0LmFzc2lnbih7fSxlKSx7YXJnczp0fSl9fX1vcmRlckNlbGxSYW5nZUVuZHMoZSx0KXtjb25zdCByPVtlLHRdLFtpLG9dPXIubWFwKEU9PkUudG9Db2x1bW5BZGRyZXNzKCkpLnNvcnQoYTMuY29tcGFyZUJ5QWJzb2x1dGVBZGRyZXNzKHRoaXMuZm9ybXVsYUFkZHJlc3MpKSxb''@;'; put 'put ''YSxsXT1yLm1hcChFPT5FLnRvUm93QWRkcmVzcygpKS5zb3J0KGxmLmNvbXBhcmVCeUFic29sdXRlQWRkcmVzcyh0aGlzLmZvcm11bGFBZGRyZXNzKSksW3UsZ109ci5tYXAoRT0+RS5zaGVldCkuc29ydChyUC5jb21wYXJlU2hlZXRJZHMuYmluZCh0aGlzKSk7cmV0dXJue3N0YXJ0Onh1LmZy''@;'; put 'put ''b21Db2xBbmRSb3coaSxhLHUpLGVuZDp4dS5mcm9tQ29sQW5kUm93KG8sbCxnKX19b3JkZXJDb2x1bW5SYW5nZUVuZHMoZSx0KXtjb25zdCByPVtlLHRdLFtpLG9dPXIuc29ydChhMy5jb21wYXJlQnlBYnNvbHV0ZUFkZHJlc3ModGhpcy5mb3JtdWxhQWRkcmVzcykpLFthLGxdPXIubWFwKHU9''@;'; put 'put ''PnUuc2hlZXQpLnNvcnQoclAuY29tcGFyZVNoZWV0SWRzLmJpbmQodGhpcykpO3JldHVybntzdGFydDpuZXcgYTMoaS50eXBlLGkuY29sLGEpLGVuZDpuZXcgYTMoby50eXBlLG8uY29sLGwpfX1vcmRlclJvd1JhbmdlRW5kcyhlLHQpe2NvbnN0IHI9W2UsdF0sW2ksb109ci5zb3J0KGxmLmNv''@;'; put 'put ''bXBhcmVCeUFic29sdXRlQWRkcmVzcyh0aGlzLmZvcm11bGFBZGRyZXNzKSksW2EsbF09ci5tYXAodT0+dS5zaGVldCkuc29ydChyUC5jb21wYXJlU2hlZXRJZHMuYmluZCh0aGlzKSk7cmV0dXJue3N0YXJ0Om5ldyBsZihpLnR5cGUsaS5yb3csYSksZW5kOm5ldyBsZihvLnR5cGUsby5yb3cs''@;'; put 'put ''bCl9fXN0YXRpYyBjb21wYXJlU2hlZXRJZHMoZSx0KXtyZXR1cm4oZT1lPz8xLzApLSh0Pz8xLzApfWZldGNoQ2FjaGVkUmVzdWx0Rm9yQXN0KGUpe2NvbnN0IHQ9dGhpcy5jb21wdXRlSGFzaEZyb21Bc3QoZSk7cmV0dXJuIHRoaXMuZmV0Y2hDYWNoZWRSZXN1bHQodCl9ZmV0Y2hDYWNoZWRS''@;'; put 'put ''ZXN1bHQoZSl7Y29uc3QgdD10aGlzLmNhY2hlLmdldChlKTtpZih2b2lkIDA9PT10KXRocm93IG5ldyBFcnJvcigiVGhlcmUgaXMgbm8gQVNUIHdpdGggc3VjaCBrZXkgaW4gdGhlIGNhY2hlIik7e2NvbnN0e2FzdDpyLGhhc1ZvbGF0aWxlRnVuY3Rpb246aSxoYXNTdHJ1Y3R1cmFsQ2hhbmdl''@;'; put 'put ''RnVuY3Rpb246byxyZWxhdGl2ZURlcGVuZGVuY2llczphfT10O3JldHVybnthc3Q6cixlcnJvcnM6W10saGFzVm9sYXRpbGVGdW5jdGlvbjppLGhhc1N0cnVjdHVyYWxDaGFuZ2VGdW5jdGlvbjpvLGRlcGVuZGVuY2llczphfX19Y29tcHV0ZUhhc2hGcm9tVG9rZW5zKGUsdCl7dmFyIHI7bGV0''@;'; put 'put ''IGk9IiIsbz0wO2Zvcig7bzxlLmxlbmd0aDspe2NvbnN0IGE9ZVtvXTtpZigoMCxuYS50b2tlbk1hdGNoZXIpKGEsJF8pKXtjb25zdCBsPVh4KHRoaXMuc2hlZXRNYXBwaW5nLGEuaW1hZ2UsdCk7aT1pLmNvbmNhdCh2b2lkIDA9PT1sP2EuaW1hZ2U6bC5oYXNoKCEwKSl9ZWxzZSBpZigoMCxu''@;'; put 'put ''YS50b2tlbk1hdGNoZXIpKGEsQmdlKSl7Y29uc3QgbD1hLmltYWdlLnRvVXBwZXJDYXNlKCkuc2xpY2UoMCwtMSksdT1udWxsIT09KHI9dGhpcy5sZXhlckNvbmZpZy5mdW5jdGlvbk1hcHBpbmdbbF0pJiZ2b2lkIDAhPT1yP3I6bDtpPWkuY29uY2F0KHUsIigiKX1lbHNlIGlmKCgwLG5hLnRv''@;'; put 'put ''a2VuTWF0Y2hlcikoYSxIZ2UpKXtjb25zdFtsLHVdPWEuaW1hZ2Uuc3BsaXQoIjoiKSxnPXdxKHRoaXMuc2hlZXRNYXBwaW5nLGwsdCksRT13cSh0aGlzLnNoZWV0TWFwcGluZyx1LHQpO2k9dm9pZCAwPT09Z3x8dm9pZCAwPT09RT9pLmNvbmNhdCgiIVJFRiIpOmkuY29uY2F0KGcuaGFzaCgh''@;'; put 'put ''MCksIjoiLEUuaGFzaCghMCkpfWVsc2UgaWYoKDAsbmEudG9rZW5NYXRjaGVyKShhLFZnZSkpe2NvbnN0W2wsdV09YS5pbWFnZS5zcGxpdCgiOiIpLGc9Q3EodGhpcy5zaGVldE1hcHBpbmcsbCx0KSxFPUNxKHRoaXMuc2hlZXRNYXBwaW5nLHUsdCk7aT12b2lkIDA9PT1nfHx2b2lkIDA9PT1F''@;'; put 'put ''P2kuY29uY2F0KCIhUkVGIik6aS5jb25jYXQoZy5oYXNoKCEwKSwiOiIsRS5oYXNoKCEwKSl9ZWxzZSBpPWkuY29uY2F0KGEuaW1hZ2UpO28rK31yZXR1cm4gaX1yZW1lbWJlck5ld0FzdChlKXtjb25zdCB0PXRoaXMuY29tcHV0ZUhhc2hGcm9tQXN0KGUpO3JldHVybiB0aGlzLmNhY2hlLm1h''@;'; put 'put ''eWJlU2V0QW5kVGhlbkdldCh0LGUpfWNvbXB1dGVIYXNoRnJvbUFzdChlKXtyZXR1cm4iPSIrdGhpcy5jb21wdXRlSGFzaE9mQXN0Tm9kZShlKX1jb21wdXRlSGFzaE9mQXN0Tm9kZShlKXtzd2l0Y2goZS50eXBlKXtjYXNlIHJuLkVNUFRZOnJldHVybiBlLmxlYWRpbmdXaGl0ZXNwYWNlfHwi''@;'; put 'put ''IjtjYXNlIHJuLk5VTUJFUjpyZXR1cm4gZWMoSnplKGUudmFsdWUsdGhpcy5jb25maWcuZGVjaW1hbFNlcGFyYXRvciksZS5sZWFkaW5nV2hpdGVzcGFjZSk7Y2FzZSBybi5TVFJJTkc6cmV0dXJuIGVjKCciJytlLnZhbHVlKyciJyxlLmxlYWRpbmdXaGl0ZXNwYWNlKTtjYXNlIHJuLk5BTUVE''@;'; put 'put ''X0VYUFJFU1NJT046cmV0dXJuIGVjKGUuZXhwcmVzc2lvbk5hbWUsZS5sZWFkaW5nV2hpdGVzcGFjZSk7Y2FzZSBybi5GVU5DVElPTl9DQUxMOntjb25zdCB0PWUuYXJncy5tYXAoaT0+dGhpcy5jb21wdXRlSGFzaE9mQXN0Tm9kZShpKSkuam9pbih0aGlzLmNvbmZpZy5mdW5jdGlvbkFyZ1Nl''@;'; put 'put ''cGFyYXRvcikscj1lLnByb2NlZHVyZU5hbWUrIigiK3QrZWMoIikiLGUuaW50ZXJuYWxXaGl0ZXNwYWNlKTtyZXR1cm4gZWMocixlLmxlYWRpbmdXaGl0ZXNwYWNlKX1jYXNlIHJuLkNFTExfUkVGRVJFTkNFOnJldHVybiBlYyhlLnJlZmVyZW5jZS5oYXNoKCEwKSxlLmxlYWRpbmdXaGl0ZXNw''@;'; put 'put ''YWNlKTtjYXNlIHJuLkNPTFVNTl9SQU5HRTpjYXNlIHJuLlJPV19SQU5HRTpjYXNlIHJuLkNFTExfUkFOR0U6cmV0dXJuIGVjKGUuc3RhcnQuaGFzaChlLnNoZWV0UmVmZXJlbmNlVHlwZSE9PUc0LlJFTEFUSVZFKSsiOiIrZS5lbmQuaGFzaChlLnNoZWV0UmVmZXJlbmNlVHlwZT09PUc0LkJP''@;'; put 'put ''VEhfQUJTT0xVVEUpLGUubGVhZGluZ1doaXRlc3BhY2UpO2Nhc2Ugcm4uTUlOVVNfVU5BUllfT1A6cmV0dXJuIGVjKCItIit0aGlzLmNvbXB1dGVIYXNoT2ZBc3ROb2RlKGUudmFsdWUpLGUubGVhZGluZ1doaXRlc3BhY2UpO2Nhc2Ugcm4uUExVU19VTkFSWV9PUDpyZXR1cm4gZWMoIisiK3Ro''@;'; put 'put ''aXMuY29tcHV0ZUhhc2hPZkFzdE5vZGUoZS52YWx1ZSksZS5sZWFkaW5nV2hpdGVzcGFjZSk7Y2FzZSBybi5QRVJDRU5UX09QOnJldHVybiB0aGlzLmNvbXB1dGVIYXNoT2ZBc3ROb2RlKGUudmFsdWUpK2VjKCIlIixlLmxlYWRpbmdXaGl0ZXNwYWNlKTtjYXNlIHJuLkVSUk9SOnJldHVybiBl''@;'; put 'put ''Yyh0aGlzLmNvbmZpZy50cmFuc2xhdGlvblBhY2thZ2UuZ2V0RXJyb3JUcmFuc2xhdGlvbihlLmVycm9yP2UuZXJyb3IudHlwZTp0bi5FUlJPUiksZS5sZWFkaW5nV2hpdGVzcGFjZSk7Y2FzZSBybi5FUlJPUl9XSVRIX1JBV19JTlBVVDpyZXR1cm4gZWMoZS5yYXdJbnB1dCxlLmxlYWRpbmdX''@;'; put 'put ''aGl0ZXNwYWNlKTtjYXNlIHJuLkFSUkFZOnJldHVybiBlYygieyIrZS5hcmdzLm1hcChyPT5yLm1hcChpPT50aGlzLmNvbXB1dGVIYXNoT2ZBc3ROb2RlKGkpKS5qb2luKCIsIikpLmpvaW4oIjsiKStlYygifSIsZS5pbnRlcm5hbFdoaXRlc3BhY2UpLGUubGVhZGluZ1doaXRlc3BhY2UpO2Nh''@;'; put 'put ''c2Ugcm4uUEFSRU5USEVTSVM6e2NvbnN0IHI9IigiK3RoaXMuY29tcHV0ZUhhc2hPZkFzdE5vZGUoZS5leHByZXNzaW9uKStlYygiKSIsZS5pbnRlcm5hbFdoaXRlc3BhY2UpO3JldHVybiBlYyhyLGUubGVhZGluZ1doaXRlc3BhY2UpfWRlZmF1bHQ6cmV0dXJuIHRoaXMuY29tcHV0ZUhhc2hP''@;'; put 'put ''ZkFzdE5vZGUoZS5sZWZ0KStlYyhQemVbZS50eXBlXSxlLmxlYWRpbmdXaGl0ZXNwYWNlKSt0aGlzLmNvbXB1dGVIYXNoT2ZBc3ROb2RlKGUucmlnaHQpfX1iaW5kV2hpdGVzcGFjZXNUb1Rva2VucyhlKXtjb25zdCB0PVtdLHI9ZVswXTsoMCxuYS50b2tlbk1hdGNoZXIpKHIsdGhpcy5sZXhl''@;'; put 'put ''ckNvbmZpZy5XaGl0ZVNwYWNlKXx8dC5wdXNoKHIpO2ZvcihsZXQgaT0xO2k8ZS5sZW5ndGg7KytpKXtjb25zdCBvPWVbaV07aWYoKDAsbmEudG9rZW5NYXRjaGVyKShvLHRoaXMubGV4ZXJDb25maWcuV2hpdGVTcGFjZSkpY29udGludWU7Y29uc3QgYT1lW2ktMV07KDAsbmEudG9rZW5NYXRj''@;'; put 'put ''aGVyKShhLHRoaXMubGV4ZXJDb25maWcuV2hpdGVTcGFjZSkmJihvLmxlYWRpbmdXaGl0ZXNwYWNlPWEpLHQucHVzaChvKX1yZXR1cm4gdH10b2tlbml6ZUZvcm11bGEoZSl7cmV0dXJuIHRoaXMubGV4ZXIudG9rZW5pemVGb3JtdWxhKGUpfX1jb25zdCBlQT0obixlLHQscik9Pntzd2l0Y2go''@;'; put 'put ''bi50eXBlKXtjYXNlIHJuLkVNUFRZOmNhc2Ugcm4uTlVNQkVSOmNhc2Ugcm4uU1RSSU5HOmNhc2Ugcm4uRVJST1I6cmV0dXJuO2Nhc2Ugcm4uTkFNRURfRVhQUkVTU0lPTjpyZXR1cm4gdm9pZChyJiZ0LnB1c2gobmV3IGE5KG4uZXhwcmVzc2lvbk5hbWUpKSk7Y2FzZSBybi5DRUxMX1JFRkVS''@;'; put 'put ''RU5DRTpyZXR1cm4gdm9pZChyJiZ0LnB1c2gobmV3IGVXZShuLnJlZmVyZW5jZSkpKTtjYXNlIHJuLkNFTExfUkFOR0U6cmV0dXJuIHZvaWQociYmbi5zdGFydC5zaGVldD09PW4uZW5kLnNoZWV0JiZ0LnB1c2gobmV3IGNKdChuLnN0YXJ0LG4uZW5kKSkpO2Nhc2Ugcm4uQ09MVU1OX1JBTkdF''@;'; put 'put ''OnJldHVybiB2b2lkKHImJm4uc3RhcnQuc2hlZXQ9PT1uLmVuZC5zaGVldCYmdC5wdXNoKG5ldyB1SnQobi5zdGFydCxuLmVuZCkpKTtjYXNlIHJuLlJPV19SQU5HRTpyZXR1cm4gdm9pZChyJiZuLnN0YXJ0LnNoZWV0PT09bi5lbmQuc2hlZXQmJnQucHVzaChuZXcgZEp0KG4uc3RhcnQsbi5l''@;'; put 'put ''bmQpKSk7Y2FzZSBybi5QRVJDRU5UX09QOmNhc2Ugcm4uUExVU19VTkFSWV9PUDpjYXNlIHJuLk1JTlVTX1VOQVJZX09QOnJldHVybiB2b2lkIGVBKG4udmFsdWUsZSx0LCEwKTtjYXNlIHJuLkNPTkNBVEVOQVRFX09QOmNhc2Ugcm4uRVFVQUxTX09QOmNhc2Ugcm4uTk9UX0VRVUFMX09QOmNh''@;'; put 'put ''c2Ugcm4uTEVTU19USEFOX09QOmNhc2Ugcm4uR1JFQVRFUl9USEFOX09QOmNhc2Ugcm4uTEVTU19USEFOX09SX0VRVUFMX09QOmNhc2Ugcm4uR1JFQVRFUl9USEFOX09SX0VRVUFMX09QOmNhc2Ugcm4uTUlOVVNfT1A6Y2FzZSBybi5QTFVTX09QOmNhc2Ugcm4uVElNRVNfT1A6Y2FzZSBybi5E''@;'; put 'put ''SVZfT1A6Y2FzZSBybi5QT1dFUl9PUDpyZXR1cm4gZUEobi5sZWZ0LGUsdCwhMCksdm9pZCBlQShuLnJpZ2h0LGUsdCwhMCk7Y2FzZSBybi5QQVJFTlRIRVNJUzpyZXR1cm4gdm9pZCBlQShuLmV4cHJlc3Npb24sZSx0LHIpO2Nhc2Ugcm4uRlVOQ1RJT05fQ0FMTDp7Y29uc3QgaT0hZS5kb2Vz''@;'; put 'put ''RnVuY3Rpb25OZWVkQXJndW1lbnRUb0JlQ29tcHV0ZWQobi5wcm9jZWR1cmVOYW1lKTtyZXR1cm4gdm9pZCBuLmFyZ3MuZm9yRWFjaChvPT5lQShvLGUsdCxpKSl9fX0sa3E9KG4sZSk9Pntjb25zdCB0PW5ldyBBcnJheTtyZXR1cm4gZUEobixlLHQsITApLHR9O2NsYXNzIGVXZXtjb25zdHJ1''@;'; put 'put ''Y3RvcihlKXt0aGlzLmRlcGVuZGVuY3k9ZX1hYnNvbHV0aXplKGUpe3JldHVybiB0aGlzLmRlcGVuZGVuY3kudG9TaW1wbGVDZWxsQWRkcmVzcyhlKX19Y2xhc3MgY0p0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5zdGFydD1lLHRoaXMuZW5kPXR9YWJzb2x1dGl6ZShlKXtyZXR1cm4gbmV3IGJh''@;'; put 'put ''KHRoaXMuc3RhcnQudG9TaW1wbGVDZWxsQWRkcmVzcyhlKSx0aGlzLmVuZC50b1NpbXBsZUNlbGxBZGRyZXNzKGUpKX19Y2xhc3MgdUp0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5zdGFydD1lLHRoaXMuZW5kPXR9YWJzb2x1dGl6ZShlKXtjb25zdCB0PXRoaXMuc3RhcnQudG9TaW1wbGVDb2x1''@;'; put 'put ''bW5BZGRyZXNzKGUpLHI9dGhpcy5lbmQudG9TaW1wbGVDb2x1bW5BZGRyZXNzKGUpO3JldHVybiBuZXcgczkodC5zaGVldCx0LmNvbCxyLmNvbCl9fWNsYXNzIGRKdHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuc3RhcnQ9ZSx0aGlzLmVuZD10fWFic29sdXRpemUoZSl7Y29uc3QgdD10aGlzLnN0''@;'; put 'put ''YXJ0LnRvU2ltcGxlUm93QWRkcmVzcyhlKSxyPXRoaXMuZW5kLnRvU2ltcGxlUm93QWRkcmVzcyhlKTtyZXR1cm4gbmV3IGw5KHQuc2hlZXQsdC5yb3csci5yb3cpfX1jbGFzcyBhOXtjb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWU9ZX1hYnNvbHV0aXplKGUpe3JldHVybiB0aGlzfX1jb25zdCBW''@;'; put 'put ''Nj0obixlKT0+bi5tYXAodD0+dC5hYnNvbHV0aXplKGUpKSxsbD1TeW1ib2woIkVtcHR5IHZhbHVlIik7ZnVuY3Rpb24gTG8obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBCNj9uLnZhbDpufWNsYXNzIEI2e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy52YWw9ZSx0aGlzLmZvcm1hdD10fWZyb21OdW1i''@;'; put 'put ''ZXIoZSl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKGUpfX1mdW5jdGlvbiBXZ2UobixlKXtpZigibnVtYmVyIj09dHlwZW9mIG4pcmV0dXJuIGU7e2NvbnN0IHQ9bi5mcm9tTnVtYmVyKGUpO3JldHVybiB0LmZvcm1hdD1uLmZvcm1hdCx0fX1jbGFzcyBZZ2UgZXh0ZW5kcyBCNntnZXRE''@;'; put 'put ''ZXRhaWxlZFR5cGUoKXtyZXR1cm4gb2EuTlVNQkVSX0RBVEV9fWNsYXNzIFpnZSBleHRlbmRzIEI2e2dldERldGFpbGVkVHlwZSgpe3JldHVybiBvYS5OVU1CRVJfQ1VSUkVOQ1l9fWNsYXNzIEdnZSBleHRlbmRzIEI2e2dldERldGFpbGVkVHlwZSgpe3JldHVybiBvYS5OVU1CRVJfVElNRX19''@;'; put 'put ''Y2xhc3MgJGdlIGV4dGVuZHMgQjZ7Z2V0RGV0YWlsZWRUeXBlKCl7cmV0dXJuIG9hLk5VTUJFUl9EQVRFVElNRX19Y2xhc3MgUnEgZXh0ZW5kcyBCNntnZXREZXRhaWxlZFR5cGUoKXtyZXR1cm4gb2EuTlVNQkVSX1BFUkNFTlR9fWZ1bmN0aW9uIGNjKG4pe3JldHVybiJudW1iZXIiPT10eXBl''@;'; put 'put ''b2Ygbnx8biBpbnN0YW5jZW9mIEI2fXZhciBvYT1mdW5jdGlvbihuKXtyZXR1cm4gbi5OVU1CRVJfUkFXPSJOVU1CRVJfUkFXIixuLk5VTUJFUl9EQVRFPSJOVU1CRVJfREFURSIsbi5OVU1CRVJfVElNRT0iTlVNQkVSX1RJTUUiLG4uTlVNQkVSX0RBVEVUSU1FPSJOVU1CRVJfREFURVRJTUUi''@;'; put 'put ''LG4uTlVNQkVSX0NVUlJFTkNZPSJOVU1CRVJfQ1VSUkVOQ1kiLG4uTlVNQkVSX1BFUkNFTlQ9Ik5VTUJFUl9QRVJDRU5UIixufShvYXx8e30pO2Z1bmN0aW9uIElxKG4pe3JldHVybiBuIGluc3RhbmNlb2YgQjY/e3R5cGU6bi5nZXREZXRhaWxlZFR5cGUoKSxmb3JtYXQ6bi5mb3JtYXR9Ont0''@;'; put 'put ''eXBlOm9hLk5VTUJFUl9SQVd9fWNsYXNzIGxhe2NvbnN0cnVjdG9yKGUsdCxyLGkpe3RoaXMuX2RhdGE9ZSx0aGlzLnJhbmdlPXQsdGhpcy5kZXBlbmRlbmN5R3JhcGg9cix0aGlzLl9oYXNPbmx5TnVtYmVycz1pLHRoaXMuc2l6ZT12b2lkIDA9PT1lP25ldyB5bCh0LmVmZmVjdGl2ZVdpZHRo''@;'; put 'put ''KHIpLHQuZWZmZWN0aXZlSGVpZ2h0KHIpKTpuZXcgeWwoZVswXS5sZW5ndGgsZS5sZW5ndGgpfWdldCBkYXRhKCl7cmV0dXJuIHRoaXMuZW5zdXJlVGhhdENvbXB1dGVkKCksdGhpcy5fZGF0YX1zdGF0aWMgZnJvbVJhbmdlKGUsdCxyKXtyZXR1cm4gbmV3IGxhKGUsdCxyLCEwKX1zdGF0aWMg''@;'; put 'put ''b25seU51bWJlcnMoZSl7cmV0dXJuIG5ldyBsYShlLHZvaWQgMCx2b2lkIDAsITApfXN0YXRpYyBvbmx5VmFsdWVzKGUpe3JldHVybiBuZXcgbGEoZSx2b2lkIDAsdm9pZCAwLHZvaWQgMCl9c3RhdGljIG9ubHlSYW5nZShlLHQpe3JldHVybiBuZXcgbGEodm9pZCAwLGUsdCx2b2lkIDApfXN0''@;'; put 'put ''YXRpYyBmcm9tU2NhbGFyKGUpe3JldHVybiBuZXcgbGEoW1tlXV0sdm9pZCAwLHZvaWQgMCx2b2lkIDApfWlzQWRIb2MoKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5yYW5nZX13aWR0aCgpe3JldHVybiB0aGlzLnNpemUud2lkdGh9aGVpZ2h0KCl7cmV0dXJuIHRoaXMuc2l6ZS5oZWlnaHR9dmFs''@;'; put 'put ''dWVzRnJvbVRvcExlZnRDb3JuZXIoKXt0aGlzLmVuc3VyZVRoYXRDb21wdXRlZCgpO2NvbnN0IGU9W107Zm9yKGxldCB0PTA7dDx0aGlzLl9kYXRhLmxlbmd0aDt0KyspZm9yKGxldCByPTA7cjx0aGlzLl9kYXRhWzBdLmxlbmd0aDtyKyspZS5wdXNoKHRoaXMuX2RhdGFbdF1bcl0pO3JldHVy''@;'; put 'put ''biBlfSplZmZlY3RpdmVBZGRyZXNzZXNGcm9tRGF0YShlKXtmb3IobGV0IHQ9MDt0PHRoaXMuZGF0YS5sZW5ndGg7Kyt0KXtjb25zdCByPXRoaXMuZGF0YVt0XTtmb3IobGV0IGk9MDtpPHIubGVuZ3RoOysraSl5aWVsZCBCbyhlLnNoZWV0LGUuY29sK2ksZS5yb3crdCl9fSplbnRyaWVzRnJv''@;'; put 'put ''bVRvcExlZnRDb3JuZXIoZSl7dGhpcy5lbnN1cmVUaGF0Q29tcHV0ZWQoKTtmb3IobGV0IHQ9MDt0PHRoaXMuc2l6ZS5oZWlnaHQ7Kyt0KWZvcihsZXQgcj0wO3I8dGhpcy5zaXplLndpZHRoOysrcil5aWVsZFt0aGlzLl9kYXRhW3RdW3JdLEJvKGUuc2hlZXQsZS5jb2wrcixlLnJvdyt0KV19''@;'; put 'put ''Kml0ZXJhdGVWYWx1ZXNGcm9tVG9wTGVmdENvcm5lcigpe3lpZWxkKnRoaXMudmFsdWVzRnJvbVRvcExlZnRDb3JuZXIoKX1udW1iZXJPZkVsZW1lbnRzKCl7cmV0dXJuIHRoaXMuc2l6ZS53aWR0aCp0aGlzLnNpemUuaGVpZ2h0fWhhc09ubHlOdW1iZXJzKCl7aWYodm9pZCAwPT09dGhpcy5f''@;'; put 'put ''aGFzT25seU51bWJlcnMpe3RoaXMuX2hhc09ubHlOdW1iZXJzPSEwO2Zvcihjb25zdCBlIG9mIHRoaXMuZGF0YSlmb3IoY29uc3QgdCBvZiBlKWlmKCJudW1iZXIiIT10eXBlb2YgdClyZXR1cm4gdGhpcy5faGFzT25seU51bWJlcnM9ITEsITF9cmV0dXJuIHRoaXMuX2hhc09ubHlOdW1iZXJz''@;'; put 'put ''fXJhd051bWJlcnMoKXtyZXR1cm4gdGhpcy5fZGF0YX1yYXdEYXRhKCl7dmFyIGU7cmV0dXJuIHRoaXMuZW5zdXJlVGhhdENvbXB1dGVkKCksbnVsbCE9PShlPXRoaXMuX2RhdGEpJiZ2b2lkIDAhPT1lP2U6W119c2FtZURpbWVuc2lvbnNBcyhlKXtyZXR1cm4gdGhpcy53aWR0aCgpPT09ZS53''@;'; put 'put ''aWR0aCgpJiZ0aGlzLmhlaWdodCgpPT09ZS5oZWlnaHQoKX1lbnN1cmVUaGF0Q29tcHV0ZWQoKXt2b2lkIDA9PT10aGlzLl9kYXRhJiYodGhpcy5faGFzT25seU51bWJlcnM9ITAsdGhpcy5fZGF0YT10aGlzLnJhbmdlLmFkZHJlc3Nlc0FycmF5TWFwKHRoaXMuZGVwZW5kZW5jeUdyYXBoLGU9''@;'; put 'put ''Pntjb25zdCB0PXRoaXMuZGVwZW5kZW5jeUdyYXBoLmdldENlbGxWYWx1ZShlKTtyZXR1cm4gdCBpbnN0YW5jZW9mIGxhPyh0aGlzLl9oYXNPbmx5TnVtYmVycz0hMSxuZXcgUHQodG4uVkFMVUUsZHIuU2NhbGFyRXhwZWN0ZWQpKTooY2ModCl8fCh0aGlzLl9oYXNPbmx5TnVtYmVycz0hMSks''@;'; put 'put ''dCl9KSl9fWNsYXNzIHFfe2NvbnN0cnVjdG9yKCl7dGhpcy5jaGFuZ2VzPW5ldyBNYXB9c3RhdGljIGVtcHR5KCl7cmV0dXJuIG5ldyBxX31hZGRBbGwoZSl7Zm9yKGNvbnN0IHQgb2YgZS5jaGFuZ2VzLnZhbHVlcygpKXRoaXMuYWRkKHQuYWRkcmVzcyx0KTtyZXR1cm4gdGhpc31hZGRDaGFu''@;'; put 'put ''Z2UoZSx0LHIpe3RoaXMuYWRkSW50ZXJwcmV0ZXJWYWx1ZShlLHQscil9ZXhwb3J0Q2hhbmdlcyhlKXtsZXQgdD1bXTtyZXR1cm4gdGhpcy5jaGFuZ2VzLmZvckVhY2gocj0+e2NvbnN0IGk9ZS5leHBvcnRDaGFuZ2Uocik7QXJyYXkuaXNBcnJheShpKT90PXQuY29uY2F0KGkpOnQucHVzaChp''@;'; put 'put ''KX0pLHR9Z2V0Q2hhbmdlcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuY2hhbmdlcy52YWx1ZXMoKSl9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5jaGFuZ2VzLnNpemV9YWRkKGUsdCl7Y29uc3Qgcj10LnZhbHVlO2lmKHIgaW5zdGFuY2VvZiBsYSlmb3IoY29uc3QgaSBvZiByLmVmZmVj''@;'; put 'put ''dGl2ZUFkZHJlc3Nlc0Zyb21EYXRhKGUpKXRoaXMuY2hhbmdlcy5kZWxldGUoY1AoaSkpO3RoaXMuY2hhbmdlcy5zZXQoY1AoZSksdCl9YWRkSW50ZXJwcmV0ZXJWYWx1ZShlLHQscil7dGhpcy5hZGQodCx7YWRkcmVzczp0LHZhbHVlOmUsb2xkVmFsdWU6cn0pfX1jbGFzcyB0cHtjb25zdHJ1''@;'; put 'put ''Y3RvcihlLHQscil7aWYodGhpcy5zaGVldD1lLHRoaXMucm93U3RhcnQ9dCx0aGlzLnJvd0VuZD1yLHQ8MCl0aHJvdyBFcnJvcigiU3RhcnRpbmcgcm93IGNhbnQgYmUgbGVzcyB0aGFuIDAiKTtpZihyPHQpdGhyb3cgRXJyb3IoIlJvdyBzcGFuIGNhbnQgZW5kIGJlZm9yZSBzdGFydCIpfWdl''@;'; put 'put ''dCBudW1iZXJPZlJvd3MoKXtyZXR1cm4gdGhpcy5yb3dFbmQtdGhpcy5yb3dTdGFydCsxfWdldCBzdGFydCgpe3JldHVybiB0aGlzLnJvd1N0YXJ0fWdldCBlbmQoKXtyZXR1cm4gdGhpcy5yb3dFbmR9c3RhdGljIGZyb21OdW1iZXJPZlJvd3MoZSx0LHIpe3JldHVybiBuZXcgdHAoZSx0LHQr''@;'; put 'put ''ci0xKX1zdGF0aWMgZnJvbVJvd1N0YXJ0QW5kRW5kKGUsdCxyKXtyZXR1cm4gbmV3IHRwKGUsdCxyKX0qcm93cygpe2ZvcihsZXQgZT10aGlzLnJvd1N0YXJ0O2U8PXRoaXMucm93RW5kOysrZSl5aWVsZCBlfWludGVyc2VjdChlKXtpZih0aGlzLnNoZWV0IT09ZS5zaGVldCl0aHJvdyBFcnJv''@;'; put 'put ''cigiQ2FuJ3QgaW50ZXJzZWN0IHNwYW5zIGZyb20gZGlmZmVyZW50IHNoZWV0cyIpO2NvbnN0IHQ9TWF0aC5tYXgodGhpcy5yb3dTdGFydCxlLnJvd1N0YXJ0KSxyPU1hdGgubWluKHRoaXMucm93RW5kLGUucm93RW5kKTtyZXR1cm4gdD5yP251bGw6bmV3IHRwKHRoaXMuc2hlZXQsdCxyKX1m''@;'; put 'put ''aXJzdFJvdygpe3JldHVybiBuZXcgdHAodGhpcy5zaGVldCx0aGlzLnJvd1N0YXJ0LHRoaXMucm93U3RhcnQpfX1jbGFzcyBnZ3tjb25zdHJ1Y3RvcihlLHQscil7aWYodGhpcy5zaGVldD1lLHRoaXMuY29sdW1uU3RhcnQ9dCx0aGlzLmNvbHVtbkVuZD1yLHQ8MCl0aHJvdyBFcnJvcigiU3Rh''@;'; put 'put ''cnRpbmcgY29sdW1uIGNhbnQgYmUgbGVzcyB0aGFuIDAiKTtpZihyPHQpdGhyb3cgRXJyb3IoIkNvbHVtbiBzcGFuIGNhbnQgZW5kIGJlZm9yZSBzdGFydCIpfWdldCBudW1iZXJPZkNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2x1bW5FbmQtdGhpcy5jb2x1bW5TdGFydCsxfWdldCBzdGFydCgp''@;'; put 'put ''e3JldHVybiB0aGlzLmNvbHVtblN0YXJ0fWdldCBlbmQoKXtyZXR1cm4gdGhpcy5jb2x1bW5FbmR9c3RhdGljIGZyb21OdW1iZXJPZkNvbHVtbnMoZSx0LHIpe3JldHVybiBuZXcgZ2coZSx0LHQrci0xKX1zdGF0aWMgZnJvbUNvbHVtblN0YXJ0QW5kRW5kKGUsdCxyKXtyZXR1cm4gbmV3IGdn''@;'; put 'put ''KGUsdCxyKX0qY29sdW1ucygpe2ZvcihsZXQgZT10aGlzLmNvbHVtblN0YXJ0O2U8PXRoaXMuY29sdW1uRW5kOysrZSl5aWVsZCBlfWludGVyc2VjdChlKXtpZih0aGlzLnNoZWV0IT09ZS5zaGVldCl0aHJvdyBFcnJvcigiQ2FuJ3QgaW50ZXJzZWN0IHNwYW5zIGZyb20gZGlmZmVyZW50IHNo''@;'; put 'put ''ZWV0cyIpO2NvbnN0IHQ9TWF0aC5tYXgodGhpcy5jb2x1bW5TdGFydCxlLmNvbHVtblN0YXJ0KSxyPU1hdGgubWluKHRoaXMuY29sdW1uRW5kLGUuY29sdW1uRW5kKTtyZXR1cm4gdD5yP251bGw6bmV3IGdnKHRoaXMuc2hlZXQsdCxyKX1maXJzdENvbHVtbigpe3JldHVybiBuZXcgZ2codGhp''@;'; put 'put ''cy5zaGVldCx0aGlzLmNvbHVtblN0YXJ0LHRoaXMuY29sdW1uU3RhcnQpfX12YXIgQXM9ZnVuY3Rpb24obil7cmV0dXJuIG4uQlVJTERfRU5HSU5FX1RPVEFMPSJCVUlMRF9FTkdJTkVfVE9UQUwiLG4uUEFSU0VSPSJQQVJTRVIiLG4uR1JBUEhfQlVJTEQ9IkdSQVBIX0JVSUxEIixuLkNPTExF''@;'; put 'put ''Q1RfREVQRU5ERU5DSUVTPSJDT0xMRUNUX0RFUEVOREVOQ0lFUyIsbi5QUk9DRVNTX0RFUEVOREVOQ0lFUz0iUFJPQ0VTU19ERVBFTkRFTkNJRVMiLG4uVE9QX1NPUlQ9IlRPUF9TT1JUIixuLkJVSUxEX0NPTFVNTl9JTkRFWD0iQlVJTERfQ09MVU1OX0lOREVYIixuLkVWQUxVQVRJT049IkVW''@;'; put 'put ''QUxVQVRJT04iLG4uVkxPT0tVUD0iVkxPT0tVUCIsbi5UUkFOU0ZPUk1fQVNUUz0iVFJBTlNGT1JNX0FTVFMiLG4uVFJBTlNGT1JNX0FTVFNfUE9TVFBPTkVEPSJUUkFOU0ZPUk1fQVNUU19QT1NUUE9ORUQiLG4uQURKVVNUSU5HX0FERFJFU1NfTUFQUElORz0iQURKVVNUSU5HX0FERFJFU1Nf''@;'; put 'put ''TUFQUElORyIsbi5BREpVU1RJTkdfQVJSQVlfTUFQUElORz0iQURKVVNUSU5HX0FSUkFZX01BUFBJTkciLG4uQURKVVNUSU5HX1JBTkdFUz0iQURKVVNUSU5HX1JBTkdFUyIsbi5BREpVU1RJTkdfR1JBUEg9IkFESlVTVElOR19HUkFQSCIsbi5DUklURVJJT05fRlVOQ1RJT05fRlVMTF9DQUNI''@;'; put 'put ''RV9VU0VEPSJDUklURVJJT05fRlVOQ1RJT05fRlVMTF9DQUNIRV9VU0VEIixuLkNSSVRFUklPTl9GVU5DVElPTl9QQVJUSUFMX0NBQ0hFX1VTRUQ9IkNSSVRFUklPTl9GVU5DVElPTl9QQVJUSUFMX0NBQ0hFX1VTRUQiLG59KEFzfHx7fSk7Y2xhc3MgdFdle2NvbnN0cnVjdG9yKCl7dGhpcy5z''@;'; put 'put ''dGF0cz1uZXcgTWFwKFtbQXMuQ1JJVEVSSU9OX0ZVTkNUSU9OX0ZVTExfQ0FDSEVfVVNFRCwwXSxbQXMuQ1JJVEVSSU9OX0ZVTkNUSU9OX1BBUlRJQUxfQ0FDSEVfVVNFRCwwXV0pLHRoaXMuc3RhcnRUaW1lcz1uZXcgTWFwfWluY3JlbWVudENyaXRlcmlvbkZ1bmN0aW9uRnVsbENhY2hlVXNl''@;'; put 'put ''ZCgpe3ZhciBlO2NvbnN0IHQ9KG51bGwhPT0oZT10aGlzLnN0YXRzLmdldChBcy5DUklURVJJT05fRlVOQ1RJT05fRlVMTF9DQUNIRV9VU0VEKSkmJnZvaWQgMCE9PWU/ZTowKSsxO3RoaXMuc3RhdHMuc2V0KEFzLkNSSVRFUklPTl9GVU5DVElPTl9GVUxMX0NBQ0hFX1VTRUQsdCl9aW5jcmVt''@;'; put 'put ''ZW50Q3JpdGVyaW9uRnVuY3Rpb25QYXJ0aWFsQ2FjaGVVc2VkKCl7dmFyIGU7Y29uc3QgdD0obnVsbCE9PShlPXRoaXMuc3RhdHMuZ2V0KEFzLkNSSVRFUklPTl9GVU5DVElPTl9QQVJUSUFMX0NBQ0hFX1VTRUQpKSYmdm9pZCAwIT09ZT9lOjApKzE7dGhpcy5zdGF0cy5zZXQoQXMuQ1JJVEVS''@;'; put 'put ''SU9OX0ZVTkNUSU9OX1BBUlRJQUxfQ0FDSEVfVVNFRCx0KX1yZXNldCgpe3RoaXMuc3RhdHMuY2xlYXIoKSx0aGlzLnN0YXJ0VGltZXMuY2xlYXIoKSx0aGlzLnN0YXRzLnNldChBcy5DUklURVJJT05fRlVOQ1RJT05fRlVMTF9DQUNIRV9VU0VELDApLHRoaXMuc3RhdHMuc2V0KEFzLkNSSVRF''@;'; put 'put ''UklPTl9GVU5DVElPTl9QQVJUSUFMX0NBQ0hFX1VTRUQsMCl9c3RhcnQoZSl7aWYodGhpcy5zdGFydFRpbWVzLmdldChlKSl0aHJvdyBFcnJvcihgU3RhdGlzdGljcyAke2V9IGFscmVhZHkgc3RhcnRlZGApO3RoaXMuc3RhcnRUaW1lcy5zZXQoZSxEYXRlLm5vdygpKX1lbmQoZSl7dmFyIHQ7''@;'; put 'put ''Y29uc3Qgcj1EYXRlLm5vdygpLGk9dGhpcy5zdGFydFRpbWVzLmdldChlKTtpZighaSl0aHJvdyBFcnJvcihgU3RhdGlzdGljcyAke2V9IG5vdCBzdGFydGVkYCk7e2xldCBvPW51bGwhPT0odD10aGlzLnN0YXRzLmdldChlKSkmJnZvaWQgMCE9PXQ/dDowO28rPXItaSx0aGlzLnN0YXRzLnNl''@;'; put 'put ''dChlLG8pLHRoaXMuc3RhcnRUaW1lcy5kZWxldGUoZSl9fW1lYXN1cmUoZSx0KXt0aGlzLnN0YXJ0KGUpO2NvbnN0IHI9dCgpO3JldHVybiB0aGlzLmVuZChlKSxyfXNuYXBzaG90KCl7cmV0dXJuIG5ldyBNYXAodGhpcy5zdGF0cyl9fWNsYXNzIGdKdCBleHRlbmRzIHRXZXtpbmNyZW1lbnRD''@;'; put 'put ''cml0ZXJpb25GdW5jdGlvbkZ1bGxDYWNoZVVzZWQoKXt9aW5jcmVtZW50Q3JpdGVyaW9uRnVuY3Rpb25QYXJ0aWFsQ2FjaGVVc2VkKCl7fXN0YXJ0KGUpe31lbmQoZSl7fX1jbGFzcyBTaCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe3N1cGVyKGBUaGVyZSdzIG5vIHNoZWV0IHdpdGgg''@;'; put 'put ''aWQgPSAke2V9YCl9fWNsYXNzIG1KdCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe3N1cGVyKGBUaGVyZSdzIG5vIHNoZWV0IHdpdGggbmFtZSAnJHtlfSdgKX19Y2xhc3MgRHEgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtzdXBlcihgU2hlZXQgd2l0aCBuYW1lICR7ZX0gYWxy''@;'; put 'put ''ZWFkeSBleGlzdHNgKX19Y2xhc3MgdEEgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJTaGVldCBzaXplIGxpbWl0IGV4Y2VlZGVkIil9fWNsYXNzIHFnZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIlRoaXMgaXMgbm90IGEgZm9ybXVsYSIpfX1jbGFzcyB2''@;'; put 'put ''SnQgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtzdXBlcihgQWRkcmVzcyAocm93ID0gJHtlLnJvd30sIGNvbCA9ICR7ZS5jb2x9KSBpcyBpbnZhbGlkYCl9fWNsYXNzIG4wIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoYEludmFsaWQgYXJndW1lbnRzLCBleHBlY3Rl''@;'; put 'put ''ZCAke2V9YCl9fWNsYXNzIGlQIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihgU2hlZXRzICR7ZX0gYW5kICR7dH0gYXJlIG5vdCBlcXVhbC5gKX19Y2xhc3MgX0p0IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoYE5hbWUgb2YgTmFtZWQgRXhwcmVzc2lv''@;'; put 'put ''biAnJHtlfScgaXMgYWxyZWFkeSBwcmVzZW50YCl9fWNsYXNzIHlKdCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe3N1cGVyKGBOYW1lIG9mIE5hbWVkIEV4cHJlc3Npb24gJyR7ZX0nIGlzIGludmFsaWRgKX19Y2xhc3MgTHEgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtzdXBl''@;'; put 'put ''cihgTmFtZWQgRXhwcmVzc2lvbiAnJHtlfScgZG9lcyBub3QgZXhpc3RgKX19Y2xhc3MgYkp0IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiVGhlcmUgaXMgbm8gb3BlcmF0aW9uIHRvIHVuZG8iKX19Y2xhc3Mgd0p0IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBl''@;'; put 'put ''cigiVGhlcmUgaXMgbm8gb3BlcmF0aW9uIHRvIHJlZG8iKX19Y2xhc3MgQ0p0IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiVGhlcmUgaXMgbm90aGluZyB0byBwYXN0ZSIpfX1mdW5jdGlvbiBTSnQobixlKXtzd2l0Y2godHlwZW9mIGUpe2Nhc2UiZnVuY3Rpb24iOmNhc2Ui''@;'; put 'put ''c3ltYm9sIjpyZXR1cm4gZS50b1N0cmluZygpO2Nhc2UiYmlnaW50IjpyZXR1cm4iQmlnSW50KCIrZS50b1N0cmluZygpKyIpIjtkZWZhdWx0OnJldHVybiBlIGluc3RhbmNlb2YgUmVnRXhwPyJSZWdFeHAoIitlLnRvU3RyaW5nKCkrIikiOmV9fWNsYXNzIEVKdCBleHRlbmRzIEVycm9ye2Nv''@;'; put 'put ''bnN0cnVjdG9yKGUpe3N1cGVyKGBVbmFibGUgdG8gcGFyc2UgdmFsdWU6ICR7SlNPTi5zdHJpbmdpZnkoZSxTSnQsNCl9YCl9fWNsYXNzIFNjIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihgRXhwZWN0ZWQgdmFsdWUgb2YgdHlwZTogJHtlfSBmb3IgY29uZmlnIHBhcmFt''@;'; put 'put ''ZXRlcjogJHt0fWApfX1jbGFzcyBNSnQgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtzdXBlcihgQ29uZmlnIHBhcmFtZXRlciAke2V9IGNhbm5vdCBiZSBlbXB0eS5gKX19Y2xhc3MgVEp0IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihgQ29uZmlnIHBhcmFtZXRl''@;'; put 'put ''ciAke2V9IHNob3VsZCBiZSBhdCBsZWFzdCAke3R9YCl9fWNsYXNzIHhKdCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoYENvbmZpZyBwYXJhbWV0ZXIgJHtlfSBzaG91bGQgYmUgYXQgbW9zdCAke3R9YCl9fWNsYXNzIEFKdCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9y''@;'; put 'put ''KGUsdCl7c3VwZXIoYEV4cGVjdGVkIG9uZSBvZiAke2V9IGZvciBjb25maWcgcGFyYW1ldGVyOiAke3R9YCl9fWNsYXNzIGtKdCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkNvbXB1dGF0aW9ucyBhcmUgc3VzcGVuZGVkIil9fWNsYXNzIG9QIGV4dGVuZHMgRXJyb3J7Y29u''@;'; put 'put ''c3RydWN0b3IoZSl7c3VwZXIoYFRyYW5zbGF0aW9uIGZvciAke2V9IGlzIG1pc3NpbmcgaW4gdGhlIHRyYW5zbGF0aW9uIHBhY2thZ2UgeW91J3JlIHVzaW5nLmApfX1jbGFzcyBSSnQgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtzdXBlcihgQ2Fubm90IHJlZ2lzdGVyIHRyYW5zbGF0''@;'; put 'put ''aW9uIGZvciBmdW5jdGlvbiB3aXRoIGlkOiAke2V9YCl9fWNsYXNzIG5XZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkxhbmd1YWdlIG5vdCByZWdpc3RlcmVkLiIpfX1jbGFzcyBJSnQgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJMYW5ndWFnZSBhbHJl''@;'; put 'put ''YWR5IHJlZ2lzdGVyZWQuIil9fWNsYXNzIGFQIGV4dGVuZHMgRXJyb3J7c3RhdGljIGZ1bmN0aW9uTm90RGVjbGFyZWRJblBsdWdpbihlLHQpe3JldHVybiBuZXcgYVAoYEZ1bmN0aW9uIHdpdGggaWQgJHtlfSBub3QgZGVjbGFyZWQgaW4gcGx1Z2luICR7dH1gKX1zdGF0aWMgZnVuY3Rpb25N''@;'; put 'put ''ZXRob2ROb3RGb3VuZChlLHQpe3JldHVybiBuZXcgYVAoYEZ1bmN0aW9uIG1ldGhvZCAke2V9IG5vdCBmb3VuZCBpbiBwbHVnaW4gJHt0fWApfX1jbGFzcyBPQyBleHRlbmRzIEVycm9ye3N0YXRpYyBjYW5ub3RSZWdpc3RlckZ1bmN0aW9uV2l0aElkKGUpe3JldHVybiBuZXcgT0MoYENhbm5v''@;'; put 'put ''dCByZWdpc3RlciBmdW5jdGlvbiB3aXRoIGlkICR7ZX1gKX1zdGF0aWMgY2Fubm90VW5yZWdpc3RlckZ1bmN0aW9uV2l0aElkKGUpe3JldHVybiBuZXcgT0MoYENhbm5vdCB1bnJlZ2lzdGVyIGZ1bmN0aW9uIHdpdGggaWQgJHtlfWApfXN0YXRpYyBjYW5ub3RVbnJlZ2lzdGVyUHJvdGVjdGVk''@;'; put 'put ''UGx1Z2luKCl7cmV0dXJuIG5ldyBPQygiQ2Fubm90IHVucmVnaXN0ZXIgcHJvdGVjdGVkIHBsdWdpbiIpfX1jbGFzcyBzUCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkNhbm5vdCBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uLCBzb3VyY2UgbG9jYXRpb24gaGFzIGFuIGFycmF5''@;'; put 'put ''IGluc2lkZS4iKX19Y2xhc3MgS2dlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiQ2Fubm90IHBlcmZvcm0gdGhpcyBvcGVyYXRpb24sIHRhcmdldCBsb2NhdGlvbiBoYXMgYW4gYXJyYXkgaW5zaWRlLiIpfX1jbGFzcyByV2UgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigp''@;'; put 'put ''e3N1cGVyKCJSZWxhdGl2ZSBhZGRyZXNzZXMgbm90IGFsbG93ZWQgaW4gbmFtZWQgZXhwcmVzc2lvbnMuIil9fWNsYXNzIERKdCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoYEFsaWFzIGlkICR7ZX0gaW4gcGx1Z2luICR7dH0gYWxyZWFkeSBkZWZpbmVkIGFzIGEgZnVu''@;'; put 'put ''Y3Rpb24gb3IgYWxpYXMuYCl9fWNsYXNzIExKdHtjb25zdHJ1Y3RvcihlKXt0aGlzLnBvbGljeT1lLHRoaXMubWFwcGluZz1uZXcgTWFwfWdldENlbGwoZSl7Y29uc3QgdD10aGlzLm1hcHBpbmcuZ2V0KGUuc2hlZXQpO2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IFNoKGUuc2hlZXQpO3JldHVy''@;'; put 'put ''biB0LmdldENlbGwoZSl9ZmV0Y2hDZWxsKGUpe2NvbnN0IHQ9dGhpcy5tYXBwaW5nLmdldChlLnNoZWV0KTtpZih2b2lkIDA9PT10KXRocm93IG5ldyBTaChlLnNoZWV0KTtjb25zdCByPXQuZ2V0Q2VsbChlKTtpZighcil0aHJvdyBFcnJvcigiVmVydGV4IGZvciBhZGRyZXNzIG1pc3Npbmcg''@;'; put 'put ''aW4gQWRkcmVzc01hcHBpbmciKTtyZXR1cm4gcn1zdHJhdGVneUZvcihlKXtjb25zdCB0PXRoaXMubWFwcGluZy5nZXQoZSk7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgU2goZSk7cmV0dXJuIHR9YWRkU2hlZXQoZSx0KXtpZih0aGlzLm1hcHBpbmcuaGFzKGUpKXRocm93IEVycm9yKCJTaGVl''@;'; put 'put ''dCBhbHJlYWR5IGFkZGVkIik7dGhpcy5tYXBwaW5nLnNldChlLHQpfWF1dG9BZGRTaGVldChlLHQpe2NvbnN0e2hlaWdodDpyLHdpZHRoOmksZmlsbDpvfT10LGE9dGhpcy5wb2xpY3kuY2FsbChvKTt0aGlzLmFkZFNoZWV0KGUsbmV3IGEoaSxyKSl9Z2V0Q2VsbFZhbHVlKGUpe2NvbnN0IHQ9''@;'; put 'put ''dGhpcy5nZXRDZWxsKGUpO3JldHVybiB2b2lkIDA9PT10P2xsOnQgaW5zdGFuY2VvZiAkaD90LmdldEFycmF5Q2VsbFZhbHVlKGUpOnQuZ2V0Q2VsbFZhbHVlKCl9Z2V0UmF3VmFsdWUoZSl7Y29uc3QgdD10aGlzLmdldENlbGwoZSk7cmV0dXJuIHQgaW5zdGFuY2VvZiBRXz90LmdldFZhbHVl''@;'; put 'put ''cygpLnJhd1ZhbHVlOnQgaW5zdGFuY2VvZiAkaD90LmdldEFycmF5Q2VsbFJhd1ZhbHVlKGUpOm51bGx9c2V0Q2VsbChlLHQpe2NvbnN0IHI9dGhpcy5tYXBwaW5nLmdldChlLnNoZWV0KTtpZighcil0aHJvdyBFcnJvcigiU2hlZXQgbm90IGluaXRpYWxpemVkIik7ci5zZXRDZWxsKGUsdCl9''@;'; put 'put ''bW92ZUNlbGwoZSx0KXtjb25zdCByPXRoaXMubWFwcGluZy5nZXQoZS5zaGVldCk7aWYoIXIpdGhyb3cgRXJyb3IoIlNoZWV0IG5vdCBpbml0aWFsaXplZC4iKTtpZihlLnNoZWV0IT09dC5zaGVldCl0aHJvdyBFcnJvcigiQ2Fubm90IG1vdmUgY2VsbHMgYmV0d2VlbiBzaGVldHMuIik7aWYo''@;'; put 'put ''ci5oYXModCkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbW92ZSBjZWxsLiBEZXN0aW5hdGlvbiBhbHJlYWR5IG9jY3VwaWVkLiIpO2NvbnN0IGk9ci5nZXRDZWxsKGUpO2lmKHZvaWQgMD09PWkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbW92ZSBjZWxsLiBObyBjZWxsIHdpdGggc3VjaCBh''@;'; put 'put ''ZGRyZXNzLiIpO3RoaXMuc2V0Q2VsbCh0LGkpLHRoaXMucmVtb3ZlQ2VsbChlKX1yZW1vdmVDZWxsKGUpe2NvbnN0IHQ9dGhpcy5tYXBwaW5nLmdldChlLnNoZWV0KTtpZighdCl0aHJvdyBFcnJvcigiU2hlZXQgbm90IGluaXRpYWxpemVkIik7dC5yZW1vdmVDZWxsKGUpfWhhcyhlKXtjb25z''@;'; put 'put ''dCB0PXRoaXMubWFwcGluZy5nZXQoZS5zaGVldCk7cmV0dXJuIHZvaWQgMCE9PXQmJnQuaGFzKGUpfWdldEhlaWdodChlKXtjb25zdCB0PXRoaXMubWFwcGluZy5nZXQoZSk7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgU2goZSk7cmV0dXJuIHQuZ2V0SGVpZ2h0KCl9Z2V0V2lkdGgoZSl7Y29u''@;'; put 'put ''c3QgdD10aGlzLm1hcHBpbmcuZ2V0KGUpO2lmKCF0KXRocm93IG5ldyBTaChlKTtyZXR1cm4gdC5nZXRXaWR0aCgpfWFkZFJvd3MoZSx0LHIpe2NvbnN0IGk9dGhpcy5tYXBwaW5nLmdldChlKTtpZih2b2lkIDA9PT1pKXRocm93IG5ldyBTaChlKTtpLmFkZFJvd3ModCxyKX1yZW1vdmVSb3dz''@;'; put 'put ''KGUpe2NvbnN0IHQ9dGhpcy5tYXBwaW5nLmdldChlLnNoZWV0KTtpZih2b2lkIDA9PT10KXRocm93IG5ldyBTaChlLnNoZWV0KTt0LnJlbW92ZVJvd3MoZSl9cmVtb3ZlU2hlZXQoZSl7dGhpcy5tYXBwaW5nLmRlbGV0ZShlKX1hZGRDb2x1bW5zKGUsdCxyKXtjb25zdCBpPXRoaXMubWFwcGlu''@;'; put 'put ''Zy5nZXQoZSk7aWYodm9pZCAwPT09aSl0aHJvdyBuZXcgU2goZSk7aS5hZGRDb2x1bW5zKHQscil9cmVtb3ZlQ29sdW1ucyhlKXtjb25zdCB0PXRoaXMubWFwcGluZy5nZXQoZS5zaGVldCk7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgU2goZS5zaGVldCk7dC5yZW1vdmVDb2x1bW5zKGUpfSp2''@;'; put 'put ''ZXJ0aWNlc0Zyb21Sb3dzU3BhbihlKXt5aWVsZCp0aGlzLm1hcHBpbmcuZ2V0KGUuc2hlZXQpLnZlcnRpY2VzRnJvbVJvd3NTcGFuKGUpfSp2ZXJ0aWNlc0Zyb21Db2x1bW5zU3BhbihlKXt5aWVsZCp0aGlzLm1hcHBpbmcuZ2V0KGUuc2hlZXQpLnZlcnRpY2VzRnJvbUNvbHVtbnNTcGFuKGUp''@;'; put 'put ''fSplbnRyaWVzRnJvbVJvd3NTcGFuKGUpe3lpZWxkKnRoaXMubWFwcGluZy5nZXQoZS5zaGVldCkuZW50cmllc0Zyb21Sb3dzU3BhbihlKX0qZW50cmllc0Zyb21Db2x1bW5zU3BhbihlKXt5aWVsZCp0aGlzLm1hcHBpbmcuZ2V0KGUuc2hlZXQpLmVudHJpZXNGcm9tQ29sdW1uc1NwYW4oZSl9''@;'; put 'put ''KmVudHJpZXMoKXtmb3IoY29uc3RbZSx0XW9mIHRoaXMubWFwcGluZy5lbnRyaWVzKCkpeWllbGQqdC5nZXRFbnRyaWVzKGUpfSpzaGVldEVudHJpZXMoZSl7Y29uc3QgdD10aGlzLm1hcHBpbmcuZ2V0KGUpO2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IFNoKGUpO3lpZWxkKnQuZ2V0RW50cmll''@;'; put 'put ''cyhlKX19Y2xhc3MgT0p0e2NvbnN0cnVjdG9yKCl7dGhpcy5hcnJheU1hcHBpbmc9bmV3IE1hcH1nZXRBcnJheShlKXtjb25zdCB0PXRoaXMuZ2V0QXJyYXlCeUNvcm5lcihlLnN0YXJ0KTtpZih0Py5nZXRSYW5nZSgpLnNhbWVBcyhlKSlyZXR1cm4gdH1nZXRBcnJheUJ5Q29ybmVyKGUpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmFycmF5TWFwcGluZy5nZXQoY1AoZSkpfXNldEFycmF5KGUsdCl7dGhpcy5hcnJheU1hcHBpbmcuc2V0KGNQKGUuc3RhcnQpLHQpfXJlbW92ZUFycmF5KGUpe3RoaXMuYXJyYXlNYXBwaW5nLmRlbGV0ZSgic3RyaW5nIj09dHlwZW9mIGU/ZTpjUChlLnN0YXJ0KSl9Y291bnQo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5hcnJheU1hcHBpbmcuc2l6ZX0qYXJyYXlzSW5Sb3dzKGUpe2Zvcihjb25zdFt0LHJdb2YgdGhpcy5hcnJheU1hcHBpbmcuZW50cmllcygpKXIuc3BhbnNUaHJvdWdoU2hlZXRSb3dzKGUuc2hlZXQsZS5yb3dTdGFydCxlLnJvd0VuZCkmJih5aWVsZFt0LHJdKX0qYXJy''@;'; put 'put ''YXlzSW5Db2xzKGUpe2Zvcihjb25zdFt0LHJdb2YgdGhpcy5hcnJheU1hcHBpbmcuZW50cmllcygpKXIuc3BhbnNUaHJvdWdoU2hlZXRDb2x1bW4oZS5zaGVldCxlLmNvbHVtblN0YXJ0LGUuY29sdW1uRW5kKSYmKHlpZWxkW3Qscl0pfWlzRm9ybXVsYUFycmF5SW5Sb3coZSx0KXtmb3IoY29u''@;'; put 'put ''c3QgciBvZiB0aGlzLmFycmF5TWFwcGluZy52YWx1ZXMoKSlpZihyLnNwYW5zVGhyb3VnaFNoZWV0Um93cyhlLHQpKXJldHVybiEwO3JldHVybiExfWlzRm9ybXVsYUFycmF5SW5BbGxSb3dzKGUpe2xldCB0PSEwO2Zvcihjb25zdCByIG9mIGUucm93cygpKXRoaXMuaXNGb3JtdWxhQXJyYXlJ''@;'; put 'put ''blJvdyhlLnNoZWV0LHIpfHwodD0hMSk7cmV0dXJuIHR9aXNGb3JtdWxhQXJyYXlJbkNvbHVtbihlLHQpe2Zvcihjb25zdCByIG9mIHRoaXMuYXJyYXlNYXBwaW5nLnZhbHVlcygpKWlmKHIuc3BhbnNUaHJvdWdoU2hlZXRDb2x1bW4oZSx0KSlyZXR1cm4hMDtyZXR1cm4hMX1pc0Zvcm11bGFB''@;'; put 'put ''cnJheUluQWxsQ29sdW1ucyhlKXtsZXQgdD0hMDtmb3IoY29uc3QgciBvZiBlLmNvbHVtbnMoKSl0aGlzLmlzRm9ybXVsYUFycmF5SW5Db2x1bW4oZS5zaGVldCxyKXx8KHQ9ITEpO3JldHVybiB0fWlzRm9ybXVsYUFycmF5SW5SYW5nZShlKXtmb3IoY29uc3QgdCBvZiB0aGlzLmFycmF5TWFw''@;'; put 'put ''cGluZy52YWx1ZXMoKSlpZih0LmdldFJhbmdlKCkuZG9lc092ZXJsYXAoZSkpcmV0dXJuITA7cmV0dXJuITF9aXNGb3JtdWxhQXJyYXlBdEFkZHJlc3MoZSl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5hcnJheU1hcHBpbmcudmFsdWVzKCkpaWYodC5nZXRSYW5nZSgpLmFkZHJlc3NJblJhbmdlKGUp''@;'; put 'put ''KXJldHVybiEwO3JldHVybiExfW1vdmVBcnJheVZlcnRpY2VzQWZ0ZXJSb3dCeVJvd3MoZSx0LHIpe3RoaXMudXBkYXRlQXJyYXlWZXJ0aWNlc0luU2hlZXQoZSwoaSxvKT0+e2NvbnN0IGE9by5nZXRSYW5nZSgpO3JldHVybiB0PD1hLnN0YXJ0LnJvdz9bYS5zaGlmdGVkKDAsciksb106dm9p''@;'; put 'put ''ZCAwfSl9bW92ZUFycmF5VmVydGljZXNBZnRlckNvbHVtbkJ5Q29sdW1ucyhlLHQscil7dGhpcy51cGRhdGVBcnJheVZlcnRpY2VzSW5TaGVldChlLChpLG8pPT57Y29uc3QgYT1vLmdldFJhbmdlKCk7cmV0dXJuIHQ8PWEuc3RhcnQuY29sP1thLnNoaWZ0ZWQociwwKSxvXTp2b2lkIDB9KX11''@;'; put 'put ''cGRhdGVBcnJheVZlcnRpY2VzSW5TaGVldChlLHQpe2NvbnN0IHI9QXJyYXkoKTtmb3IoY29uc3RbaSxvXW9mIHRoaXMuYXJyYXlNYXBwaW5nLmVudHJpZXMoKSl7aWYoby5zaGVldCE9PWUpY29udGludWU7Y29uc3QgYT10KGksbyk7dm9pZCAwIT09YSYmKHRoaXMucmVtb3ZlQXJyYXkoaSks''@;'; put 'put ''ci5wdXNoKGEpKX1yLmZvckVhY2goKFtpLG9dKT0+e3RoaXMuc2V0QXJyYXkoaSxvKX0pfX1jbGFzcyBsUHtjb25zdHJ1Y3RvcihlKXt0aGlzLnNpemU9ZX13aWR0aCgpe3JldHVybiB0aGlzLnNpemUud2lkdGh9aGVpZ2h0KCl7cmV0dXJuIHRoaXMuc2l6ZS5oZWlnaHR9Z2V0KGUsdCl7dGhy''@;'; put 'put ''b3cgRXJyb3IoIkFycmF5IG5vdCBjb21wdXRlZCB5ZXQuIil9c2ltcGxlUmFuZ2VWYWx1ZSgpe3Rocm93IEVycm9yKCJBcnJheSBub3QgY29tcHV0ZWQgeWV0LiIpfX1jbGFzcyBuQXtjb25zdHJ1Y3RvcihlKXtpZih0aGlzLnNpemU9bmV3IHlsKGUubGVuZ3RoPjA/ZVswXS5sZW5ndGg6MCxl''@;'; put 'put ''Lmxlbmd0aCksdGhpcy5hcnJheT1lLHRoaXMuc2l6ZS53aWR0aDw9MHx8dGhpcy5zaXplLmhlaWdodDw9MCl0aHJvdyBFcnJvcigiSW5jb3JyZWN0IGFycmF5IHNpemUiKX1zdGF0aWMgZnJvbUludGVycHJldGVyVmFsdWUoZSl7cmV0dXJuIG5ldyBuQShlIGluc3RhbmNlb2YgbGE/ZS5kYXRh''@;'; put 'put ''OltbZV1dKX1zaW1wbGVSYW5nZVZhbHVlKCl7cmV0dXJuIGxhLm9ubHlWYWx1ZXModGhpcy5hcnJheSl9YWRkUm93cyhlLHQpe3RoaXMuYXJyYXkuc3BsaWNlKGUsMCwuLi50aGlzLm51bGxBcnJheXModCx0aGlzLndpZHRoKCkpKSx0aGlzLnNpemUuaGVpZ2h0Kz10fWFkZENvbHVtbnMoZSx0''@;'; put 'put ''KXtmb3IobGV0IHI9MDtyPHRoaXMuaGVpZ2h0KCk7cisrKXRoaXMuYXJyYXlbcl0uc3BsaWNlKGUsMCwuLi5uZXcgQXJyYXkodCkuZmlsbChsbCkpO3RoaXMuc2l6ZS53aWR0aCs9dH1yZW1vdmVSb3dzKGUsdCl7aWYodGhpcy5vdXRPZkJvdW5kKDAsZSl8fHRoaXMub3V0T2ZCb3VuZCgwLHQp''@;'; put 'put ''KXRocm93IEVycm9yKCJBcnJheSBpbmRleCBvdXQgb2YgYm91bmQiKTtjb25zdCByPXQtZSsxO3RoaXMuYXJyYXkuc3BsaWNlKGUsciksdGhpcy5zaXplLmhlaWdodC09cn1yZW1vdmVDb2x1bW5zKGUsdCl7aWYodGhpcy5vdXRPZkJvdW5kKGUsMCl8fHRoaXMub3V0T2ZCb3VuZCh0LDApKXRo''@;'; put 'put ''cm93IEVycm9yKCJBcnJheSBpbmRleCBvdXQgb2YgYm91bmQiKTtjb25zdCByPXQtZSsxO2Zvcihjb25zdCBpIG9mIHRoaXMuYXJyYXkpaS5zcGxpY2UoZSxyKTt0aGlzLnNpemUud2lkdGgtPXJ9bnVsbEFycmF5cyhlLHQpe2NvbnN0IHI9W107Zm9yKGxldCBpPTA7aTxlOysraSlyLnB1c2go''@;'; put 'put ''bmV3IEFycmF5KHQpLmZpbGwobGwpKTtyZXR1cm4gcn1nZXQoZSx0KXtpZih0aGlzLm91dE9mQm91bmQoZSx0KSl0aHJvdyBFcnJvcigiQXJyYXkgaW5kZXggb3V0IG9mIGJvdW5kIik7cmV0dXJuIHRoaXMuYXJyYXlbdF1bZV19c2V0KGUsdCxyKXtpZih0aGlzLm91dE9mQm91bmQoZSx0KSl0''@;'; put 'put ''aHJvdyBFcnJvcigiQXJyYXkgaW5kZXggb3V0IG9mIGJvdW5kIik7dGhpcy5hcnJheVt0XVtlXT1yfXdpZHRoKCl7cmV0dXJuIHRoaXMuc2l6ZS53aWR0aH1oZWlnaHQoKXtyZXR1cm4gdGhpcy5zaXplLmhlaWdodH1yYXcoKXtyZXR1cm4gdGhpcy5hcnJheX1yZXNpemUoZSl7aWYodGhpcy5o''@;'; put 'put ''ZWlnaHQoKTxlLmhlaWdodCYmaXNGaW5pdGUoZS5oZWlnaHQpJiZ0aGlzLmFkZFJvd3ModGhpcy5oZWlnaHQoKSxlLmhlaWdodC10aGlzLmhlaWdodCgpKSx0aGlzLmhlaWdodCgpPmUuaGVpZ2h0fHwodGhpcy53aWR0aCgpPGUud2lkdGgmJmlzRmluaXRlKGUud2lkdGgpJiZ0aGlzLmFkZENv''@;'; put 'put ''bHVtbnModGhpcy53aWR0aCgpLGUud2lkdGgtdGhpcy53aWR0aCgpKSx0aGlzLndpZHRoKCk+ZS53aWR0aCkpdGhyb3cgRXJyb3IoIlJlc2l6aW5nIHRvIHNtYWxsZXIgYXJyYXkiKX1vdXRPZkJvdW5kKGUsdCl7cmV0dXJuIGU8MHx8dDwwfHx0PnRoaXMuc2l6ZS5oZWlnaHQtMXx8ZT50aGlz''@;'; put 'put ''LnNpemUud2lkdGgtMX19Y2xhc3MgWGdle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5lcnJvcj1lLHRoaXMuc2l6ZT10fWdldChlLHQpe3JldHVybiB0aGlzLmVycm9yfXdpZHRoKCl7cmV0dXJuIHRoaXMuc2l6ZS53aWR0aH1oZWlnaHQoKXtyZXR1cm4gdGhpcy5zaXplLmhlaWdodH1zaW1wbGVS''@;'; put 'put ''YW5nZVZhbHVlKCl7cmV0dXJuIHRoaXMuZXJyb3J9fWNsYXNzIG1ne2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLmZvcm11bGE9ZSx0aGlzLmNlbGxBZGRyZXNzPXQsdGhpcy52ZXJzaW9uPXJ9Z2V0IHdpZHRoKCl7cmV0dXJuIDF9Z2V0IGhlaWdodCgpe3JldHVybiAxfXN0YXRpYyBmcm9tQXN0''@;'; put 'put ''KGUsdCxyLGkpe3JldHVybiByLmlzU2NhbGFyKCk/bmV3IGo2KGUsdCxpKTpuZXcgJGgoZSx0LHIsaSl9Z2V0Rm9ybXVsYShlKXtyZXR1cm4gdGhpcy5lbnN1cmVSZWNlbnREYXRhKGUpLHRoaXMuZm9ybXVsYX1lbnN1cmVSZWNlbnREYXRhKGUpe2lmKHRoaXMudmVyc2lvbiE9ZS52ZXJzaW9u''@;'; put 'put ''KCkpe2NvbnN0W3QscixpXT1lLmFwcGx5VHJhbnNmb3JtYXRpb25zKHRoaXMuZm9ybXVsYSx0aGlzLmNlbGxBZGRyZXNzLHRoaXMudmVyc2lvbik7dGhpcy5mb3JtdWxhPXQsdGhpcy5jZWxsQWRkcmVzcz1yLHRoaXMudmVyc2lvbj1pfX1nZXRBZGRyZXNzKGUpe3JldHVybiB0aGlzLmVuc3Vy''@;'; put 'put ''ZVJlY2VudERhdGEoZSksdGhpcy5jZWxsQWRkcmVzc319Y2xhc3MgJGggZXh0ZW5kcyBtZ3tjb25zdHJ1Y3RvcihlLHQscixpPTApe3N1cGVyKGUsdCxpKSx0aGlzLmFycmF5PXIuaXNSZWY/bmV3IFhnZShuZXcgUHQodG4uUkVGLGRyLk5vU3BhY2VGb3JBcnJheVJlc3VsdCkseWwuZXJyb3Io''@;'; put 'put ''KSk6bmV3IGxQKHIpfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLmFycmF5LndpZHRoKCl9Z2V0IGhlaWdodCgpe3JldHVybiB0aGlzLmFycmF5LmhlaWdodCgpfWdldCBzaGVldCgpe3JldHVybiB0aGlzLmNlbGxBZGRyZXNzLnNoZWV0fWdldCBsZWZ0Q29ybmVyKCl7cmV0dXJuIHRoaXMuY2Vs''@;'; put 'put ''bEFkZHJlc3N9c2V0Q2VsbFZhbHVlKGUpe2lmKGUgaW5zdGFuY2VvZiBQdClyZXR1cm4gdGhpcy5zZXRFcnJvclZhbHVlKGUpLGU7Y29uc3QgdD1uQS5mcm9tSW50ZXJwcmV0ZXJWYWx1ZShlKTtyZXR1cm4gdC5yZXNpemUodGhpcy5hcnJheS5zaXplKSx0aGlzLmFycmF5PXQsZX1nZXRDZWxs''@;'; put 'put ''VmFsdWUoKXtpZih0aGlzLmFycmF5IGluc3RhbmNlb2YgbFApdGhyb3cgRXJyb3IoIkFycmF5IG5vdCBjb21wdXRlZCB5ZXQuIik7cmV0dXJuIHRoaXMuYXJyYXkuc2ltcGxlUmFuZ2VWYWx1ZSgpfXZhbHVlT3JVbmRlZigpe2lmKCEodGhpcy5hcnJheSBpbnN0YW5jZW9mIGxQKSlyZXR1cm4g''@;'; put 'put ''dGhpcy5hcnJheS5zaW1wbGVSYW5nZVZhbHVlKCl9Z2V0QXJyYXlDZWxsVmFsdWUoZSl7Y29uc3QgdD1lLmNvbC10aGlzLmNlbGxBZGRyZXNzLmNvbCxyPWUucm93LXRoaXMuY2VsbEFkZHJlc3Mucm93O3RyeXtyZXR1cm4gdGhpcy5hcnJheS5nZXQodCxyKX1jYXRjaHtyZXR1cm4gbmV3IFB0''@;'; put 'put ''KHRuLlJFRil9fWdldEFycmF5Q2VsbFJhd1ZhbHVlKGUpe2NvbnN0IHQ9dGhpcy5nZXRBcnJheUNlbGxWYWx1ZShlKTtpZighKHQgaW5zdGFuY2VvZiBQdHx8dD09PWxsKSlyZXR1cm4gTG8odCl9c2V0QXJyYXlDZWxsVmFsdWUoZSx0KXt0aGlzLmFycmF5IGluc3RhbmNlb2YgbkEmJnRoaXMu''@;'; put 'put ''YXJyYXkuc2V0KGUuY29sLXRoaXMuY2VsbEFkZHJlc3MuY29sLGUucm93LXRoaXMuY2VsbEFkZHJlc3Mucm93LHQpfXNldE5vU3BhY2UoKXtyZXR1cm4gdGhpcy5hcnJheT1uZXcgWGdlKG5ldyBQdCh0bi5TUElMTCxkci5Ob1NwYWNlRm9yQXJyYXlSZXN1bHQpLHlsLmVycm9yKCkpLHRoaXMu''@;'; put 'put ''Z2V0Q2VsbFZhbHVlKCl9Z2V0UmFuZ2UoKXtyZXR1cm4gYmEuc3BhbkZyb20odGhpcy5jZWxsQWRkcmVzcyx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KX1nZXRSYW5nZU9yVW5kZWYoKXtyZXR1cm4gYmEuc3BhbkZyb21PclVuZGVmKHRoaXMuY2VsbEFkZHJlc3MsdGhpcy53aWR0aCx0aGlzLmhl''@;'; put 'put ''aWdodCl9c2V0QWRkcmVzcyhlKXt0aGlzLmNlbGxBZGRyZXNzPWV9c2V0Rm9ybXVsYShlKXt0aGlzLmZvcm11bGE9ZX1zcGFuc1Rocm91Z2hTaGVldFJvd3MoZSx0LHI9dCl7cmV0dXJuIHRoaXMuY2VsbEFkZHJlc3Muc2hlZXQ9PT1lJiZ0aGlzLmNlbGxBZGRyZXNzLnJvdzw9ciYmdDx0aGlz''@;'; put 'put ''LmNlbGxBZGRyZXNzLnJvdyt0aGlzLmhlaWdodH1zcGFuc1Rocm91Z2hTaGVldENvbHVtbihlLHQscj10KXtyZXR1cm4gdGhpcy5jZWxsQWRkcmVzcy5zaGVldD09PWUmJnRoaXMuY2VsbEFkZHJlc3MuY29sPD1yJiZ0PHRoaXMuY2VsbEFkZHJlc3MuY29sK3RoaXMud2lkdGh9aXNDb21wdXRl''@;'; put 'put ''ZCgpe3JldHVybiEodGhpcy5hcnJheSBpbnN0YW5jZW9mIGxQKX1jb2x1bW5zRnJvbUFycmF5KCl7cmV0dXJuIGdnLmZyb21OdW1iZXJPZkNvbHVtbnModGhpcy5jZWxsQWRkcmVzcy5zaGVldCx0aGlzLmNlbGxBZGRyZXNzLmNvbCx0aGlzLndpZHRoKX1yb3dzRnJvbUFycmF5KCl7cmV0dXJu''@;'; put 'put ''IHRwLmZyb21OdW1iZXJPZlJvd3ModGhpcy5jZWxsQWRkcmVzcy5zaGVldCx0aGlzLmNlbGxBZGRyZXNzLnJvdyx0aGlzLmhlaWdodCl9ZW5zdXJlUmVjZW50RGF0YShlKXt9aXNMZWZ0Q29ybmVyKGUpe3JldHVybiB1UCh0aGlzLmNlbGxBZGRyZXNzLGUpfXNldEVycm9yVmFsdWUoZSl7dGhp''@;'; put 'put ''cy5hcnJheT1uZXcgWGdlKGUsdGhpcy5hcnJheS5zaXplKX19Y2xhc3MgajYgZXh0ZW5kcyBtZ3tjb25zdHJ1Y3RvcihlLHQscil7c3VwZXIoZSx0LHIpfXZhbHVlT3JVbmRlZigpe3JldHVybiB0aGlzLmNhY2hlZENlbGxWYWx1ZX1zZXRDZWxsVmFsdWUoZSl7cmV0dXJuIHRoaXMuY2FjaGVk''@;'; put 'put ''Q2VsbFZhbHVlPWUsdGhpcy5jYWNoZWRDZWxsVmFsdWV9Z2V0Q2VsbFZhbHVlKCl7aWYodm9pZCAwIT09dGhpcy5jYWNoZWRDZWxsVmFsdWUpcmV0dXJuIHRoaXMuY2FjaGVkQ2VsbFZhbHVlO3Rocm93IEVycm9yKCJWYWx1ZSBvZiB0aGUgZm9ybXVsYSBjZWxsIGlzIG5vdCBjb21wdXRlZC4i''@;'; put 'put ''KX1pc0NvbXB1dGVkKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuY2FjaGVkQ2VsbFZhbHVlfX1jbGFzcyBjZntjb25zdHJ1Y3RvcihlKXt0aGlzLnJhbmdlPWUsdGhpcy5mdW5jdGlvbkNhY2hlPW5ldyBNYXAsdGhpcy5jcml0ZXJpb25GdW5jdGlvbkNhY2hlPW5ldyBNYXAsdGhpcy5kZXBlbmRl''@;'; put 'put ''bnRDYWNoZVJhbmdlcz1uZXcgU2V0LHRoaXMuYnJ1dGVGb3JjZT0hMX1nZXQgc3RhcnQoKXtyZXR1cm4gdGhpcy5yYW5nZS5zdGFydH1nZXQgZW5kKCl7cmV0dXJuIHRoaXMucmFuZ2UuZW5kfWdldCBzaGVldCgpe3JldHVybiB0aGlzLnJhbmdlLnN0YXJ0LnNoZWV0fWdldEZ1bmN0aW9uVmFs''@;'; put 'put ''dWUoZSl7cmV0dXJuIHRoaXMuZnVuY3Rpb25DYWNoZS5nZXQoZSl9c2V0RnVuY3Rpb25WYWx1ZShlLHQpe3RoaXMuZnVuY3Rpb25DYWNoZS5zZXQoZSx0KX1nZXRDcml0ZXJpb25GdW5jdGlvblZhbHVlKGUsdCl7dmFyIHI7cmV0dXJuIG51bGw9PT0ocj10aGlzLmdldENyaXRlcmlvbkZ1bmN0''@;'; put 'put ''aW9uVmFsdWVzKGUpLmdldCh0KSl8fHZvaWQgMD09PXI/dm9pZCAwOnJbMF19Z2V0Q3JpdGVyaW9uRnVuY3Rpb25WYWx1ZXMoZSl7dmFyIHQ7cmV0dXJuIG51bGwhPT0odD10aGlzLmNyaXRlcmlvbkZ1bmN0aW9uQ2FjaGUuZ2V0KGUpKSYmdm9pZCAwIT09dD90Om5ldyBNYXB9c2V0Q3JpdGVy''@;'; put 'put ''aW9uRnVuY3Rpb25WYWx1ZXMoZSx0KXt0aGlzLmNyaXRlcmlvbkZ1bmN0aW9uQ2FjaGUuc2V0KGUsdCl9YWRkRGVwZW5kZW50Q2FjaGVSYW5nZShlKXtlIT09dGhpcyYmdGhpcy5kZXBlbmRlbnRDYWNoZVJhbmdlcy5hZGQoZSl9Y2xlYXJDYWNoZSgpe3RoaXMuZnVuY3Rpb25DYWNoZS5jbGVh''@;'; put 'put ''cigpLHRoaXMuY3JpdGVyaW9uRnVuY3Rpb25DYWNoZS5jbGVhcigpLHRoaXMuZGVwZW5kZW50Q2FjaGVSYW5nZXMuZm9yRWFjaChlPT5lLmNyaXRlcmlvbkZ1bmN0aW9uQ2FjaGUuY2xlYXIoKSksdGhpcy5kZXBlbmRlbnRDYWNoZVJhbmdlcy5jbGVhcigpfWdldFN0YXJ0KCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuc3RhcnR9Z2V0RW5kKCl7cmV0dXJuIHRoaXMuZW5kfX1jb25zdCBOSnQ9KG4sZSx0LHIsaSk9PntpZihlIGluc3RhbmNlb2YgY2Ype2NvbnN0IGw9ZS5yYW5nZS5pbnRlcnNlY3Rpb25XaXRoKHQpO3JldHVybiB2b2lkIDAhPT1sP0FycmF5LmZyb20obC5hZGRyZXNzZXMoaSkpOltdfWxl''@;'; put 'put ''dCBvLGE7cmV0dXJuIGUgaW5zdGFuY2VvZiBtZz8obz1lLmdldEZvcm11bGEociksYT1lLmdldEFkZHJlc3Mociksa3EobyxuKS5maWx0ZXIobD0+bCBpbnN0YW5jZW9mIGVXZSkubWFwKGw9PmwuZGVwZW5kZW5jeS50b1NpbXBsZUNlbGxBZGRyZXNzKGEpKS5maWx0ZXIobD0+dC5hZGRyZXNz''@;'; put 'put ''SW5SYW5nZShsKSkpOltdfTt2YXIgS189ZnVuY3Rpb24obil7cmV0dXJuIG5bbi5PTl9TVEFDSz0wXT0iT05fU1RBQ0siLG5bbi5QUk9DRVNTRUQ9MV09IlBST0NFU1NFRCIsbltuLlBPUFBFRD0yXT0iUE9QUEVEIixufShLX3x8e30pO2NsYXNzIEZKdHtjb25zdHJ1Y3RvcihlPVtdLHQ9W10p''@;'; put 'put ''e3RoaXMubm9kZXNTcGFyc2VBcnJheT1lLHRoaXMuZWRnZXNTcGFyc2VBcnJheT10LHRoaXMuZW50cmFuY2VUaW1lPVtdLHRoaXMubG93PVtdLHRoaXMucGFyZW50PVtdLHRoaXMuaW5TQ0M9W10sdGhpcy5ub2RlU3RhdHVzPVtdLHRoaXMub3JkZXI9W10sdGhpcy5zY2NOb25TaW5nbGV0b25z''@;'; put 'put ''PVtdLHRoaXMudGltZUNvdW50ZXI9MH1nZXRUb3BTb3J0ZWRXaXRoU2NjU3ViZ3JhcGhGcm9tKGUsdCxyKXtjb25zdCBpPWUucmV2ZXJzZSgpO3JldHVybiBpLmZvckVhY2gobz0+dGhpcy5ydW5ERlMobykpLHRoaXMucG9zdHByb2Nlc3MoaSxyLHQpfWdldEFkamFjZW50Tm9kZUlkcyhlKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5lZGdlc1NwYXJzZUFycmF5W2VdLmZpbHRlcih0PT52b2lkIDAhPT10JiZ0aGlzLm5vZGVzU3BhcnNlQXJyYXlbdF0pfXJ1bkRGUyhlKXtpZih2b2lkIDAhPT10aGlzLm5vZGVTdGF0dXNbZV0pcmV0dXJuO3RoaXMubm9kZVN0YXR1c1tlXT1LXy5PTl9TVEFDSztjb25zdCB0''@;'; put 'put ''PVtlXSxyPVtdO2Zvcig7dC5sZW5ndGg+MDspe2NvbnN0IGk9dFt0Lmxlbmd0aC0xXTtzd2l0Y2godGhpcy5ub2RlU3RhdHVzW2ldKXtjYXNlIEtfLk9OX1NUQUNLOnRoaXMuaGFuZGxlT25TdGFjayhpLHIsdCk7YnJlYWs7Y2FzZSBLXy5QUk9DRVNTRUQ6dGhpcy5oYW5kbGVQcm9jZXNzZWQo''@;'; put 'put ''aSxyLHQpO2JyZWFrO2Nhc2UgS18uUE9QUEVEOnQucG9wKCl9fX1oYW5kbGVPblN0YWNrKGUsdCxyKXt0aGlzLmVudHJhbmNlVGltZVtlXT10aGlzLnRpbWVDb3VudGVyLHRoaXMubG93W2VdPXRoaXMudGltZUNvdW50ZXIsdGhpcy50aW1lQ291bnRlcisrLHQucHVzaChlKSx0aGlzLmdldEFk''@;'; put 'put ''amFjZW50Tm9kZUlkcyhlKS5mb3JFYWNoKGk9Pnt2b2lkIDA9PT10aGlzLmVudHJhbmNlVGltZVtpXSYmKHIucHVzaChpKSx0aGlzLnBhcmVudFtpXT1lLHRoaXMubm9kZVN0YXR1c1tpXT1LXy5PTl9TVEFDSyl9KSx0aGlzLm5vZGVTdGF0dXNbZV09S18uUFJPQ0VTU0VEfWhhbmRsZVByb2Nl''@;'; put 'put ''c3NlZChlLHQscil7bGV0IGk9dGhpcy5lbnRyYW5jZVRpbWVbZV07aWYodGhpcy5nZXRBZGphY2VudE5vZGVJZHMoZSkuZm9yRWFjaChvPT57dGhpcy5pblNDQ1tvXXx8KGk9dGhpcy5wYXJlbnRbb109PT1lP01hdGgubWluKGksdGhpcy5sb3dbb10pOk1hdGgubWluKGksdGhpcy5lbnRyYW5j''@;'; put 'put ''ZVRpbWVbb10pKX0pLHRoaXMubG93W2VdPWksaT09PXRoaXMuZW50cmFuY2VUaW1lW2VdKXtjb25zdCBvPVtdO2Rve28ucHVzaCh0W3QubGVuZ3RoLTFdKSx0LnBvcCgpfXdoaWxlKG9bby5sZW5ndGgtMV0hPT1lKTtvLmZvckVhY2goYT0+e3RoaXMuaW5TQ0NbYV09ITB9KSx0aGlzLm9yZGVy''@;'; put 'put ''LnB1c2goLi4ubyksby5sZW5ndGg+MSYmby5mb3JFYWNoKGE9Pnt0aGlzLnNjY05vblNpbmdsZXRvbnNbYV09ITB9KX1yLnBvcCgpLHRoaXMubm9kZVN0YXR1c1tlXT1LXy5QT1BQRUR9cG9zdHByb2Nlc3MoZSx0LHIpe2NvbnN0IGk9W107ZS5mb3JFYWNoKGw9PntpW2xdPSEwfSk7Y29uc3Qg''@;'; put 'put ''bz1bXSxhPVtdO3JldHVybiB0aGlzLm9yZGVyLnJldmVyc2UoKSx0aGlzLm9yZGVyLmZvckVhY2gobD0+e2NvbnN0IHU9dGhpcy5nZXRBZGphY2VudE5vZGVJZHMobCk7dGhpcy5zY2NOb25TaW5nbGV0b25zW2xdfHx1LmluY2x1ZGVzKGwpPyhhLnB1c2godGhpcy5ub2Rlc1NwYXJzZUFycmF5''@;'; put 'put ''W2xdKSx0KHRoaXMubm9kZXNTcGFyc2VBcnJheVtsXSksdS5mb3JFYWNoKGc9PmlbZ109ITApKTooby5wdXNoKHRoaXMubm9kZXNTcGFyc2VBcnJheVtsXSksaVtsXSYmcih0aGlzLm5vZGVzU3BhcnNlQXJyYXlbbF0pJiZ1LmZvckVhY2goZz0+aVtnXT0hMCkpfSkse3NvcnRlZDpvLGN5Y2xl''@;'; put 'put ''ZDphfX19Y2xhc3MgUEp0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5yYXdWYWx1ZT1lLHRoaXMucHJvY2Vzc0ZuPXQsdGhpcy5wcm9jZXNzZWRWYWx1ZT1udWxsfWdldFByb2Nlc3NlZFZhbHVlKCl7cmV0dXJuIG51bGw9PT10aGlzLnByb2Nlc3NlZFZhbHVlJiYodGhpcy5wcm9jZXNzZWRWYWx1''@;'; put 'put ''ZT10aGlzLnByb2Nlc3NGbih0aGlzLnJhd1ZhbHVlKSksdGhpcy5wcm9jZXNzZWRWYWx1ZX1tYXJrQXNNb2RpZmllZCgpe3RoaXMucHJvY2Vzc2VkVmFsdWU9bnVsbH19Y2xhc3MgSEp0e2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVwZW5kZW5jeVF1ZXJ5PWUsdGhpcy5ub2Rlc1NwYXJzZUFycmF5''@;'; put 'put ''PVtdLHRoaXMuZWRnZXNTcGFyc2VBcnJheT1bXSx0aGlzLm5vZGVzSWRzPW5ldyBNYXAsdGhpcy5kaXJ0eUFuZFZvbGF0aWxlTm9kZUlkcz1uZXcgUEp0KHtkaXJ0eTpbXSx2b2xhdGlsZTpbXX0sdD0+dGhpcy5wcm9jZXNzRGlydHlBbmRWb2xhdGlsZU5vZGVJZHModCkpLHRoaXMuaW5maW5p''@;'; put 'put ''dGVSYW5nZUlkcz1uZXcgU2V0LHRoaXMuY2hhbmdpbmdXaXRoU3RydWN0dXJlTm9kZUlkcz1bXSx0aGlzLm5leHRJZD0wfWdldE5vZGVzKCl7cmV0dXJuIHRoaXMubm9kZXNTcGFyc2VBcnJheS5maWx0ZXIoZT0+dm9pZCAwIT09ZSl9aGFzTm9kZShlKXtyZXR1cm4gdGhpcy5ub2Rlc0lkcy5o''@;'; put 'put ''YXMoZSl9ZXhpc3RzRWRnZShlLHQpe2NvbnN0IHI9dGhpcy5nZXROb2RlSWQoZSksaT10aGlzLmdldE5vZGVJZCh0KTtyZXR1cm4gdm9pZCAwIT09ciYmdm9pZCAwIT09aSYmdGhpcy5lZGdlc1NwYXJzZUFycmF5W3JdLmluY2x1ZGVzKGkpfWFkamFjZW50Tm9kZXMoZSl7Y29uc3QgdD10aGlz''@;'; put 'put ''LmdldE5vZGVJZChlKTtpZih2b2lkIDA9PT10KXRocm93IHRoaXMubWlzc2luZ05vZGVFcnJvcihlKTtyZXR1cm4gbmV3IFNldCh0aGlzLmVkZ2VzU3BhcnNlQXJyYXlbdF0uZmlsdGVyKHI9PnZvaWQgMCE9PXIpLm1hcChyPT50aGlzLm5vZGVzU3BhcnNlQXJyYXlbcl0pKX1hZGphY2VudE5v''@;'; put 'put ''ZGVzQ291bnQoZSl7Y29uc3QgdD10aGlzLmdldE5vZGVJZChlKTtpZih2b2lkIDA9PT10KXRocm93IHRoaXMubWlzc2luZ05vZGVFcnJvcihlKTtyZXR1cm4gdGhpcy5maXhFZGdlc0FycmF5Rm9yTm9kZSh0KS5sZW5ndGh9YWRkTm9kZUFuZFJldHVybklkKGUpe2NvbnN0IHQ9dGhpcy5ub2Rl''@;'; put 'put ''c0lkcy5nZXQoZSk7aWYodm9pZCAwIT09dClyZXR1cm4gdDtjb25zdCByPXRoaXMubmV4dElkO3JldHVybiB0aGlzLm5leHRJZCsrLHRoaXMubm9kZXNTcGFyc2VBcnJheVtyXT1lLHRoaXMuZWRnZXNTcGFyc2VBcnJheVtyXT1bXSx0aGlzLm5vZGVzSWRzLnNldChlLHIpLHJ9YWRkRWRnZShl''@;'; put 'put ''LHQpe2NvbnN0IHI9dGhpcy5nZXROb2RlSWRJZk5vdE51bWJlcihlKSxpPXRoaXMuZ2V0Tm9kZUlkSWZOb3ROdW1iZXIodCk7aWYodm9pZCAwPT09cil0aHJvdyB0aGlzLm1pc3NpbmdOb2RlRXJyb3IoZSk7aWYodm9pZCAwPT09aSl0aHJvdyB0aGlzLm1pc3NpbmdOb2RlRXJyb3IodCk7dGhp''@;'; put 'put ''cy5lZGdlc1NwYXJzZUFycmF5W3JdLmluY2x1ZGVzKGkpfHx0aGlzLmVkZ2VzU3BhcnNlQXJyYXlbcl0ucHVzaChpKX1yZW1vdmVOb2RlKGUpe2NvbnN0IHQ9dGhpcy5nZXROb2RlSWQoZSk7aWYodm9pZCAwPT09dCl0aHJvdyB0aGlzLm1pc3NpbmdOb2RlRXJyb3IoZSk7dGhpcy5lZGdlc1Nw''@;'; put 'put ''YXJzZUFycmF5W3RdLmxlbmd0aD4wJiYodGhpcy5lZGdlc1NwYXJzZUFycmF5W3RdLmZvckVhY2goaT0+dGhpcy5kaXJ0eUFuZFZvbGF0aWxlTm9kZUlkcy5yYXdWYWx1ZS5kaXJ0eS5wdXNoKGkpKSx0aGlzLmRpcnR5QW5kVm9sYXRpbGVOb2RlSWRzLm1hcmtBc01vZGlmaWVkKCkpO2NvbnN0''@;'; put 'put ''IHI9dGhpcy5yZW1vdmVEZXBlbmRlbmNpZXMoZSk7cmV0dXJuIGRlbGV0ZSB0aGlzLm5vZGVzU3BhcnNlQXJyYXlbdF0sZGVsZXRlIHRoaXMuZWRnZXNTcGFyc2VBcnJheVt0XSx0aGlzLmluZmluaXRlUmFuZ2VJZHMuZGVsZXRlKHQpLHRoaXMubm9kZXNJZHMuZGVsZXRlKGUpLHJ9cmVtb3Zl''@;'; put 'put ''RWRnZShlLHQpe2NvbnN0IHI9dGhpcy5nZXROb2RlSWRJZk5vdE51bWJlcihlKSxpPXRoaXMuZ2V0Tm9kZUlkSWZOb3ROdW1iZXIodCk7aWYodm9pZCAwPT09cil0aHJvdyB0aGlzLm1pc3NpbmdOb2RlRXJyb3IoZSk7aWYodm9pZCAwPT09aSl0aHJvdyB0aGlzLm1pc3NpbmdOb2RlRXJyb3Io''@;'; put 'put ''dCk7Y29uc3Qgbz10aGlzLmVkZ2VzU3BhcnNlQXJyYXlbcl0uaW5kZXhPZihpKTtpZigtMT09PW8pdGhyb3cgbmV3IEVycm9yKCJFZGdlIGRvZXMgbm90IGV4aXN0Iik7ZGVsZXRlIHRoaXMuZWRnZXNTcGFyc2VBcnJheVtyXVtvXX1yZW1vdmVFZGdlSWZFeGlzdHMoZSx0KXtjb25zdCByPXRo''@;'; put 'put ''aXMuZ2V0Tm9kZUlkKGUpLGk9dGhpcy5nZXROb2RlSWQodCk7aWYodm9pZCAwPT09cnx8dm9pZCAwPT09aSlyZXR1cm47Y29uc3Qgbz10aGlzLmVkZ2VzU3BhcnNlQXJyYXlbcl0uaW5kZXhPZihpKTstMSE9PW8mJmRlbGV0ZSB0aGlzLmVkZ2VzU3BhcnNlQXJyYXlbcl1bb119dG9wU29ydFdp''@;'; put 'put ''dGhTY2MoKXtyZXR1cm4gdGhpcy5nZXRUb3BTb3J0ZWRXaXRoU2NjU3ViZ3JhcGhGcm9tKHRoaXMuZ2V0Tm9kZXMoKSwoKT0+ITAsKCk9Pnt9KX1nZXRUb3BTb3J0ZWRXaXRoU2NjU3ViZ3JhcGhGcm9tKGUsdCxyKXtjb25zdCBpPW5ldyBGSnQodGhpcy5ub2Rlc1NwYXJzZUFycmF5LHRoaXMu''@;'; put 'put ''ZWRnZXNTcGFyc2VBcnJheSksbz1lLm1hcChhPT50aGlzLmdldE5vZGVJZChhKSkuZmlsdGVyKGE9PnZvaWQgMCE9PWEpO3JldHVybiBpLmdldFRvcFNvcnRlZFdpdGhTY2NTdWJncmFwaEZyb20obyx0LHIpfW1hcmtOb2RlQXNWb2xhdGlsZShlKXtjb25zdCB0PXRoaXMuZ2V0Tm9kZUlkKGUp''@;'; put 'put ''O3ZvaWQgMCE9PXQmJih0aGlzLmRpcnR5QW5kVm9sYXRpbGVOb2RlSWRzLnJhd1ZhbHVlLnZvbGF0aWxlLnB1c2godCksdGhpcy5kaXJ0eUFuZFZvbGF0aWxlTm9kZUlkcy5tYXJrQXNNb2RpZmllZCgpKX1tYXJrTm9kZUFzRGlydHkoZSl7Y29uc3QgdD10aGlzLmdldE5vZGVJZChlKTt2b2lk''@;'; put 'put ''IDAhPT10JiYodGhpcy5kaXJ0eUFuZFZvbGF0aWxlTm9kZUlkcy5yYXdWYWx1ZS5kaXJ0eS5wdXNoKHQpLHRoaXMuZGlydHlBbmRWb2xhdGlsZU5vZGVJZHMubWFya0FzTW9kaWZpZWQoKSl9Z2V0RGlydHlBbmRWb2xhdGlsZU5vZGVzKCl7cmV0dXJuIHRoaXMuZGlydHlBbmRWb2xhdGlsZU5v''@;'; put 'put ''ZGVJZHMuZ2V0UHJvY2Vzc2VkVmFsdWUoKX1jbGVhckRpcnR5Tm9kZXMoKXt0aGlzLmRpcnR5QW5kVm9sYXRpbGVOb2RlSWRzLnJhd1ZhbHVlLmRpcnR5PVtdLHRoaXMuZGlydHlBbmRWb2xhdGlsZU5vZGVJZHMubWFya0FzTW9kaWZpZWQoKX1tYXJrTm9kZUFzQ2hhbmdpbmdXaXRoU3RydWN0''@;'; put 'put ''dXJlKGUpe2NvbnN0IHQ9dGhpcy5nZXROb2RlSWQoZSk7dm9pZCAwIT09dCYmdGhpcy5jaGFuZ2luZ1dpdGhTdHJ1Y3R1cmVOb2RlSWRzLnB1c2godCl9bWFya0NoYW5naW5nV2l0aFN0cnVjdHVyZU5vZGVzQXNEaXJ0eSgpe3RoaXMuY2hhbmdpbmdXaXRoU3RydWN0dXJlTm9kZUlkcy5sZW5n''@;'; put 'put ''dGg8PTB8fCh0aGlzLmRpcnR5QW5kVm9sYXRpbGVOb2RlSWRzLnJhd1ZhbHVlLmRpcnR5PVsuLi50aGlzLmRpcnR5QW5kVm9sYXRpbGVOb2RlSWRzLnJhd1ZhbHVlLmRpcnR5LC4uLnRoaXMuY2hhbmdpbmdXaXRoU3RydWN0dXJlTm9kZUlkc10sdGhpcy5kaXJ0eUFuZFZvbGF0aWxlTm9kZUlk''@;'; put 'put ''cy5tYXJrQXNNb2RpZmllZCgpKX1tYXJrTm9kZUFzSW5maW5pdGVSYW5nZShlKXtjb25zdCB0PXRoaXMuZ2V0Tm9kZUlkSWZOb3ROdW1iZXIoZSk7dm9pZCAwIT09dCYmdGhpcy5pbmZpbml0ZVJhbmdlSWRzLmFkZCh0KX1nZXRJbmZpbml0ZVJhbmdlcygpe3JldHVyblsuLi50aGlzLmluZmlu''@;'; put 'put ''aXRlUmFuZ2VJZHNdLm1hcChlPT4oe25vZGU6dGhpcy5ub2Rlc1NwYXJzZUFycmF5W2VdLGlkOmV9KSl9Z2V0Tm9kZUlkKGUpe3JldHVybiB0aGlzLm5vZGVzSWRzLmdldChlKX1nZXROb2RlSWRJZk5vdE51bWJlcihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/ZTp0aGlzLm5vZGVzSWRz''@;'; put 'put ''LmdldChlKX1maXhFZGdlc0FycmF5Rm9yTm9kZShlKXtyZXR1cm4gdGhpcy5lZGdlc1NwYXJzZUFycmF5W2VdPXRoaXMuZWRnZXNTcGFyc2VBcnJheVtlXS5maWx0ZXIocj0+dm9pZCAwIT09ciYmdGhpcy5ub2Rlc1NwYXJzZUFycmF5W3JdKSx0aGlzLmVkZ2VzU3BhcnNlQXJyYXlbZV19cmVt''@;'; put 'put ''b3ZlRGVwZW5kZW5jaWVzKGUpe2NvbnN0IHQ9dGhpcy5kZXBlbmRlbmN5UXVlcnkoZSk7cmV0dXJuIHQuZm9yRWFjaCgoW3IsaV0pPT57dGhpcy5yZW1vdmVFZGdlSWZFeGlzdHMoaSxlKX0pLHR9cHJvY2Vzc0RpcnR5QW5kVm9sYXRpbGVOb2RlSWRzKHtkaXJ0eTplLHZvbGF0aWxlOnR9KXty''@;'; put 'put ''ZXR1cm5bLi4ubmV3IFNldChbLi4uZSwuLi50XSldLm1hcChyPT50aGlzLm5vZGVzU3BhcnNlQXJyYXlbcl0pLmZpbHRlcihyPT52b2lkIDAhPT1yKX1taXNzaW5nTm9kZUVycm9yKGUpe3JldHVybiBuZXcgRXJyb3IoYFVua25vd24gbm9kZSAke2V9YCl9fWNsYXNzIFZKdHtjb25zdHJ1Y3Rv''@;'; put 'put ''cigpe3RoaXMucmFuZ2VNYXBwaW5nPW5ldyBNYXB9Z2V0TWFwcGluZ1NpemUoZSl7dmFyIHQscjtyZXR1cm4gbnVsbCE9PShyPW51bGw9PT0odD10aGlzLnJhbmdlTWFwcGluZy5nZXQoZSkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LnNpemUpJiZ2b2lkIDAhPT1yP3I6MH1zZXRSYW5nZShlKXts''@;'; put 'put ''ZXQgdD10aGlzLnJhbmdlTWFwcGluZy5nZXQoZS5nZXRTdGFydCgpLnNoZWV0KTt2b2lkIDA9PT10JiYodD1uZXcgTWFwLHRoaXMucmFuZ2VNYXBwaW5nLnNldChlLmdldFN0YXJ0KCkuc2hlZXQsdCkpO2NvbnN0IHI9T3EoZS5nZXRTdGFydCgpLGUuZ2V0RW5kKCkpO3Quc2V0KHIsZSl9cmVt''@;'; put 'put ''b3ZlUmFuZ2UoZSl7Y29uc3QgdD1lLmdldFN0YXJ0KCkuc2hlZXQscj10aGlzLnJhbmdlTWFwcGluZy5nZXQodCk7aWYodm9pZCAwPT09cilyZXR1cm47Y29uc3QgaT1PcShlLmdldFN0YXJ0KCksZS5nZXRFbmQoKSk7ci5kZWxldGUoaSksMD09PXIuc2l6ZSYmdGhpcy5yYW5nZU1hcHBpbmcu''@;'; put 'put ''ZGVsZXRlKHQpfWdldFJhbmdlKGUsdCl7Y29uc3Qgcj10aGlzLnJhbmdlTWFwcGluZy5nZXQoZS5zaGVldCksaT1PcShlLHQpO3JldHVybiByPy5nZXQoaSl9ZmV0Y2hSYW5nZShlLHQpe2NvbnN0IHI9dGhpcy5nZXRSYW5nZShlLHQpO2lmKCFyKXRocm93IEVycm9yKCJSYW5nZSBkb2VzIG5v''@;'; put 'put ''dCBleGlzdCIpO3JldHVybiByfXRydW5jYXRlUmFuZ2VzKGUsdCl7Y29uc3Qgcj1BcnJheSgpLGk9QXJyYXkoKSxvPUFycmF5KCksYT1lLnNoZWV0O2Zvcihjb25zdFt1LGddb2YgdGhpcy5lbnRyaWVzRnJvbVNoZWV0KGUuc2hlZXQpKXtjb25zdCBFPWcucmFuZ2U7ZS5zdGFydDw9dChnLnJh''@;'; put 'put ''bmdlLmVuZCkmJihFLnJlbW92ZVNwYW4oZSksRS5zaG91bGRCZVJlbW92ZWQoKT8odGhpcy5yZW1vdmVCeUtleShhLHUpLHIucHVzaChnKSk6aS5wdXNoKFt1LGddKSxvLnB1c2goZykpfWNvbnN0IGw9W107aS5zb3J0KCh1LGcpPT5qSnQodVsxXSxnWzFdLHQpKTtmb3IoY29uc3RbdSxnXW9m''@;'; put 'put ''IGkpe2NvbnN0IEU9Qkp0KGcucmFuZ2UpO2lmKEU9PT11KWNvbnRpbnVlO2NvbnN0IE89dGhpcy5nZXRCeUtleShhLEUpO3RoaXMucmVtb3ZlQnlLZXkoYSx1KSx2b2lkIDAhPT1PJiZnIT1PP2wucHVzaChbTyxnXSk6dGhpcy5zZXRSYW5nZShnKX1yZXR1cm57dmVydGljZXNUb1JlbW92ZTpy''@;'; put 'put ''LHZlcnRpY2VzVG9NZXJnZTpsLHZlcnRpY2VzV2l0aENoYW5nZWRTaXplOm99fW1vdmVBbGxSYW5nZXNJblNoZWV0QWZ0ZXJSb3dCeVJvd3MoZSx0LHIpe3JldHVybiB0aGlzLnVwZGF0ZVZlcnRpY2VzRnJvbVNoZWV0KGUsKGksbyk9PnQ8PW8uc3RhcnQucm93PyhvLnJhbmdlLnNoaWZ0QnlS''@;'; put 'put ''b3dzKHIpLHtjaGFuZ2VkU2l6ZTohMSx2ZXJ0ZXg6b30pOnQ+by5zdGFydC5yb3cmJnQ8PW8uZW5kLnJvdz8oby5yYW5nZS5leHBhbmRCeVJvd3Mocikse2NoYW5nZWRTaXplOiEwLHZlcnRleDpvfSk6dm9pZCAwKX1tb3ZlQWxsUmFuZ2VzSW5TaGVldEFmdGVyQ29sdW1uQnlDb2x1bW5zKGUs''@;'; put 'put ''dCxyKXtyZXR1cm4gdGhpcy51cGRhdGVWZXJ0aWNlc0Zyb21TaGVldChlLChpLG8pPT50PD1vLnN0YXJ0LmNvbD8oby5yYW5nZS5zaGlmdEJ5Q29sdW1ucyhyKSx7Y2hhbmdlZFNpemU6ITEsdmVydGV4Om99KTp0Pm8uc3RhcnQuY29sJiZ0PD1vLmVuZC5jb2w/KG8ucmFuZ2UuZXhwYW5kQnlD''@;'; put 'put ''b2x1bW5zKHIpLHtjaGFuZ2VkU2l6ZTohMCx2ZXJ0ZXg6b30pOnZvaWQgMCl9bW92ZVJhbmdlc0luc2lkZVNvdXJjZVJhbmdlKGUsdCxyLGkpe3RoaXMudXBkYXRlVmVydGljZXNGcm9tU2hlZXQoZS5zaGVldCwobyxhKT0+e2lmKGUuY29udGFpbnNSYW5nZShhLnJhbmdlKSlyZXR1cm4gYS5y''@;'; put 'put ''YW5nZS5zaGlmdEJ5Q29sdW1ucyh0KSxhLnJhbmdlLnNoaWZ0QnlSb3dzKHIpLGEucmFuZ2UubW92ZVRvU2hlZXQoaSkse2NoYW5nZWRTaXplOiExLHZlcnRleDphfX0pfXJlbW92ZVJhbmdlc0luU2hlZXQoZSl7aWYodGhpcy5yYW5nZU1hcHBpbmcuaGFzKGUpKXtjb25zdCB0PXRoaXMucmFu''@;'; put 'put ''Z2VNYXBwaW5nLmdldChlKS52YWx1ZXMoKTtyZXR1cm4gdGhpcy5yYW5nZU1hcHBpbmcuZGVsZXRlKGUpLHR9cmV0dXJuW11bU3ltYm9sLml0ZXJhdG9yXSgpfSpyYW5nZXNJblNoZWV0KGUpe2NvbnN0IHQ9dGhpcy5yYW5nZU1hcHBpbmcuZ2V0KGUpO3QmJih5aWVsZCp0LnZhbHVlcygpKX0q''@;'; put 'put ''cmFuZ2VWZXJ0aWNlc0NvbnRhaW5lZEluUmFuZ2UoZSl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5yYW5nZXNJblNoZWV0KGUuc2hlZXQpKWUuY29udGFpbnNSYW5nZSh0LnJhbmdlKSYmKHlpZWxkIHQpfWZpbmRTbWFsbGVyUmFuZ2UoZSl7aWYoZS5oZWlnaHQoKT4xJiZOdW1iZXIuaXNGaW5pdGUo''@;'; put 'put ''ZS5oZWlnaHQoKSkpe2NvbnN0IHQ9Qm8oZS5lbmQuc2hlZXQsZS5lbmQuY29sLGUuZW5kLnJvdy0xKSxyPXRoaXMuZ2V0UmFuZ2UoZS5zdGFydCx0KTtpZih2b2lkIDAhPT1yKXJldHVybntzbWFsbGVyUmFuZ2VWZXJ0ZXg6cixyZXN0UmFuZ2U6YmEuZnJvbVNpbXBsZUNlbGxBZGRyZXNzZXMo''@;'; put 'put ''Qm8oZS5zdGFydC5zaGVldCxlLnN0YXJ0LmNvbCxlLmVuZC5yb3cpLGUuZW5kKX19cmV0dXJue3Jlc3RSYW5nZTplfX0qZW50cmllc0Zyb21TaGVldChlKXtjb25zdCB0PXRoaXMucmFuZ2VNYXBwaW5nLmdldChlKTt0JiYoeWllbGQqdC5lbnRyaWVzKCkpfXJlbW92ZUJ5S2V5KGUsdCl7dGhp''@;'; put 'put ''cy5yYW5nZU1hcHBpbmcuZ2V0KGUpLmRlbGV0ZSh0KX1nZXRCeUtleShlLHQpe3ZhciByO3JldHVybiBudWxsPT09KHI9dGhpcy5yYW5nZU1hcHBpbmcuZ2V0KGUpKXx8dm9pZCAwPT09cj92b2lkIDA6ci5nZXQodCl9dXBkYXRlVmVydGljZXNGcm9tU2hlZXQoZSx0KXtjb25zdCByPUFycmF5''@;'; put 'put ''KCk7Zm9yKGNvbnN0W2ksb11vZiB0aGlzLmVudHJpZXNGcm9tU2hlZXQoZSkpe2NvbnN0IGE9dChpLG8pO3ZvaWQgMCE9PWEmJih0aGlzLnJlbW92ZUJ5S2V5KGUsaSksci5wdXNoKGEpKX1yZXR1cm4gci5mb3JFYWNoKGk9Pnt0aGlzLnNldFJhbmdlKGkudmVydGV4KX0pLHt2ZXJ0aWNlc1dp''@;'; put 'put ''dGhDaGFuZ2VkU2l6ZTpyLmZpbHRlcihpPT5pLmNoYW5nZWRTaXplKS5tYXAoaT0+aS52ZXJ0ZXgpfX19ZnVuY3Rpb24gT3EobixlKXtyZXR1cm5gJHtuLmNvbH0sJHtuLnJvd30sJHtlLmNvbH0sJHtlLnJvd31gfWZ1bmN0aW9uIEJKdChuKXtyZXR1cm4gT3Eobi5zdGFydCxuLmVuZCl9Y29u''@;'; put 'put ''c3Qgakp0PShuLGUsdCk9Pntjb25zdCByPXQobi5yYW5nZS5zdGFydCksaT10KG4ucmFuZ2Uuc3RhcnQpO3JldHVybiByPT09aT90KG4ucmFuZ2UuZW5kKS10KGUucmFuZ2UuZW5kKTpyLWl9O2NsYXNzIFVKdHtjb25zdHJ1Y3RvcihlLHQscil7dGhpcy5mdW5jdGlvbnM9ZSx0aGlzLmVycm9y''@;'; put 'put ''cz10LHRoaXMudWk9cix0aGlzLl9wcm90ZWN0ZWRUcmFuc2xhdGlvbnM9e1ZFUlNJT046IlZFUlNJT04ifSx0aGlzLmNoZWNrVUkoKSx0aGlzLmNoZWNrRXJyb3JzKCksdGhpcy5jaGVja0Z1bmN0aW9uVHJhbnNsYXRpb25zKHRoaXMuZnVuY3Rpb25zKSxPYmplY3QuYXNzaWduKHRoaXMuZnVu''@;'; put 'put ''Y3Rpb25zLHRoaXMuX3Byb3RlY3RlZFRyYW5zbGF0aW9ucyl9ZXh0ZW5kRnVuY3Rpb25zKGUpe3RoaXMuY2hlY2tGdW5jdGlvblRyYW5zbGF0aW9ucyhlKSxPYmplY3QuYXNzaWduKHRoaXMuZnVuY3Rpb25zLGUpfWJ1aWxkRnVuY3Rpb25NYXBwaW5nKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRo''@;'; put 'put ''aXMuZnVuY3Rpb25zKS5yZWR1Y2UoKGUsdCk9PihlW3RoaXMuZnVuY3Rpb25zW3RdXT10LGUpLHt9KX1idWlsZEVycm9yTWFwcGluZygpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmVycm9ycykucmVkdWNlKChlLHQpPT4oZVt0aGlzLmVycm9yc1t0XV09dCxlKSx7fSl9aXNGdW5jdGlvblRy''@;'; put 'put ''YW5zbGF0ZWQoZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuZnVuY3Rpb25zW2VdfWdldEZ1bmN0aW9uVHJhbnNsYXRpb25zKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IHIgb2YgZSl0aGlzLmlzRnVuY3Rpb25UcmFuc2xhdGVkKHIpJiZ0LnB1c2godGhpcy5mdW5jdGlvbnNbcl0pO3JldHVybiB0''@;'; put 'put ''fWdldEZ1bmN0aW9uVHJhbnNsYXRpb24oZSl7Y29uc3QgdD10aGlzLmZ1bmN0aW9uc1tlXTtpZih2b2lkIDA9PT10KXRocm93IG5ldyBvUChgZnVuY3Rpb25zLiR7ZX1gKTtyZXR1cm4gdH1nZXRNYXliZUZ1bmN0aW9uVHJhbnNsYXRpb24oZSl7cmV0dXJuIHRoaXMuZnVuY3Rpb25zW2VdfWdl''@;'; put 'put ''dEVycm9yVHJhbnNsYXRpb24oZSl7aWYoZT09PXRuLkxJQylyZXR1cm5gIyR7dG4uTElDfSFgO2NvbnN0IHQ9dGhpcy5lcnJvcnNbZV07aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgb1AoYGVycm9ycy4ke2V9YCk7cmV0dXJuIHR9Z2V0VUlUcmFuc2xhdGlvbihlKXtjb25zdCB0PXRoaXMudWlb''@;'; put 'put ''ZV07aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgb1AoYHVpLiR7ZX1gKTtyZXR1cm4gdH1jaGVja1VJKCl7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LnZhbHVlcyhOcSkpaWYoIShlIGluIHRoaXMudWkpKXRocm93IG5ldyBvUChgdWkuJHtlfWApfWNoZWNrRXJyb3JzKCl7Zm9yKGNvbnN0IGUgb2Yg''@;'; put 'put ''T2JqZWN0LnZhbHVlcyh0bikpaWYoIShlIGluIHRoaXMuZXJyb3JzKSYmZSE9PXRuLkxJQyl0aHJvdyBuZXcgb1AoYGVycm9ycy4ke2V9YCl9Y2hlY2tGdW5jdGlvblRyYW5zbGF0aW9ucyhlKXtjb25zdCB0PW5ldyBTZXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkpO2Zvcihjb25z''@;'; put 'put ''dCByIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX3Byb3RlY3RlZFRyYW5zbGF0aW9ucykpaWYodC5oYXMocikpdGhyb3cgbmV3IFJKdChyKX19dmFyIE5xPWZ1bmN0aW9uKG4pe3JldHVybiBuLk5FV19TSEVFVF9QUkVGSVg9Ik5FV19TSEVFVF9QUkVGSVgiLG59KE5xfHx7''@;'; put 'put ''fSk7ZnVuY3Rpb24gckEobil7cmV0dXJuIG4udG9Mb3dlckNhc2UoKX1jbGFzcyBXSnR7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmlkPWUsdGhpcy5kaXNwbGF5TmFtZT10fWdldCBjYW5vbmljYWxOYW1lKCl7cmV0dXJuIHJBKHRoaXMuZGlzcGxheU5hbWUpfX1jbGFzcyBZSnR7Y29uc3RydWN0''@;'; put 'put ''b3IoZSl7dGhpcy5sYW5ndWFnZXM9ZSx0aGlzLm1hcHBpbmdGcm9tQ2Fub25pY2FsTmFtZT1uZXcgTWFwLHRoaXMubWFwcGluZ0Zyb21JZD1uZXcgTWFwLHRoaXMubGFzdFNoZWV0SWQ9LTEsdGhpcy5mZXRjaD10PT57Y29uc3Qgcj10aGlzLm1hcHBpbmdGcm9tQ2Fub25pY2FsTmFtZS5nZXQo''@;'; put 'put ''ckEodCkpO2lmKHZvaWQgMD09PXIpdGhyb3cgbmV3IG1KdCh0KTtyZXR1cm4gci5pZH0sdGhpcy5nZXQ9dD0+e3ZhciByO3JldHVybiBudWxsPT09KHI9dGhpcy5tYXBwaW5nRnJvbUNhbm9uaWNhbE5hbWUuZ2V0KHJBKHQpKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuaWR9LHRoaXMuZmV0Y2hE''@;'; put 'put ''aXNwbGF5TmFtZT10PT50aGlzLmZldGNoU2hlZXRCeUlkKHQpLmRpc3BsYXlOYW1lLHRoaXMuc2hlZXROYW1lUHJlZml4PWUuZ2V0VUlUcmFuc2xhdGlvbihOcS5ORVdfU0hFRVRfUFJFRklYKX1hZGRTaGVldChlPWAke3RoaXMuc2hlZXROYW1lUHJlZml4fSR7dGhpcy5sYXN0U2hlZXRJZCsy''@;'; put 'put ''fWApe2NvbnN0IHQ9ckEoZSk7aWYodGhpcy5tYXBwaW5nRnJvbUNhbm9uaWNhbE5hbWUuaGFzKHQpKXRocm93IG5ldyBEcShlKTt0aGlzLmxhc3RTaGVldElkKys7Y29uc3Qgcj1uZXcgV0p0KHRoaXMubGFzdFNoZWV0SWQsZSk7cmV0dXJuIHRoaXMuc3RvcmUociksci5pZH1yZW1vdmVTaGVl''@;'; put 'put ''dChlKXtjb25zdCB0PXRoaXMuZmV0Y2hTaGVldEJ5SWQoZSk7ZT09dGhpcy5sYXN0U2hlZXRJZCYmLS10aGlzLmxhc3RTaGVldElkLHRoaXMubWFwcGluZ0Zyb21DYW5vbmljYWxOYW1lLmRlbGV0ZSh0LmNhbm9uaWNhbE5hbWUpLHRoaXMubWFwcGluZ0Zyb21JZC5kZWxldGUodC5pZCl9Z2V0''@;'; put 'put ''RGlzcGxheU5hbWUoZSl7dmFyIHQ7cmV0dXJuIG51bGw9PT0odD10aGlzLm1hcHBpbmdGcm9tSWQuZ2V0KGUpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5kaXNwbGF5TmFtZX0qZGlzcGxheU5hbWVzKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5tYXBwaW5nRnJvbUNhbm9uaWNhbE5hbWUudmFsdWVz''@;'; put 'put ''KCkpeWllbGQgZS5kaXNwbGF5TmFtZX1udW1iZXJPZlNoZWV0cygpe3JldHVybiB0aGlzLm1hcHBpbmdGcm9tQ2Fub25pY2FsTmFtZS5zaXplfWhhc1NoZWV0V2l0aElkKGUpe3JldHVybiB0aGlzLm1hcHBpbmdGcm9tSWQuaGFzKGUpfWhhc1NoZWV0V2l0aE5hbWUoZSl7cmV0dXJuIHRoaXMu''@;'; put 'put ''bWFwcGluZ0Zyb21DYW5vbmljYWxOYW1lLmhhcyhyQShlKSl9cmVuYW1lU2hlZXQoZSx0KXtjb25zdCByPXRoaXMuZmV0Y2hTaGVldEJ5SWQoZSksaT1yLmRpc3BsYXlOYW1lO2lmKGk9PT10KXJldHVybjtjb25zdCBvPXRoaXMubWFwcGluZ0Zyb21DYW5vbmljYWxOYW1lLmdldChyQSh0KSk7''@;'; put 'put ''aWYodm9pZCAwIT09byYmby5pZCE9PXIuaWQpdGhyb3cgbmV3IERxKHQpO3JldHVybiB0aGlzLm1hcHBpbmdGcm9tQ2Fub25pY2FsTmFtZS5kZWxldGUoci5jYW5vbmljYWxOYW1lKSxyLmRpc3BsYXlOYW1lPXQsdGhpcy5zdG9yZShyKSxpfXNoZWV0TmFtZXMoKXtyZXR1cm4gQXJyYXkuZnJv''@;'; put 'put ''bSh0aGlzLm1hcHBpbmdGcm9tSWQudmFsdWVzKCkpLm1hcChlPT5lLmRpc3BsYXlOYW1lKX1zdG9yZShlKXt0aGlzLm1hcHBpbmdGcm9tSWQuc2V0KGUuaWQsZSksdGhpcy5tYXBwaW5nRnJvbUNhbm9uaWNhbE5hbWUuc2V0KGUuY2Fub25pY2FsTmFtZSxlKX1mZXRjaFNoZWV0QnlJZChlKXtj''@;'; put 'put ''b25zdCB0PXRoaXMubWFwcGluZ0Zyb21JZC5nZXQoZSk7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgU2goZSk7cmV0dXJuIHR9fWNsYXNzIFFnZXtjb25zdHJ1Y3RvcihlLHQscixpLG8sYSxsLHUpe3RoaXMuYWRkcmVzc01hcHBpbmc9ZSx0aGlzLnJhbmdlTWFwcGluZz10LHRoaXMuc2hlZXRN''@;'; put 'put ''YXBwaW5nPXIsdGhpcy5hcnJheU1hcHBpbmc9aSx0aGlzLnN0YXRzPW8sdGhpcy5sYXppbHlUcmFuc2Zvcm1pbmdBc3RTZXJ2aWNlPWEsdGhpcy5mdW5jdGlvblJlZ2lzdHJ5PWwsdGhpcy5uYW1lZEV4cHJlc3Npb25zPXUsdGhpcy5jaGFuZ2VzPXFfLmVtcHR5KCksdGhpcy5kZXBlbmRlbmN5''@;'; put 'put ''UXVlcnlBZGRyZXNzZXM9Zz0+e2lmKGcgaW5zdGFuY2VvZiBjZilyZXR1cm4gdGhpcy5yYW5nZURlcGVuZGVuY3lRdWVyeShnKS5tYXAoKFtFLE9dKT0+RSk7e2NvbnN0IEU9dGhpcy5mb3JtdWxhRGVwZW5kZW5jeVF1ZXJ5KGcpO2lmKHZvaWQgMCE9PUUpe2NvbnN0W08sWl09RTtyZXR1cm4g''@;'; put 'put ''Wi5tYXAoZWU9PmVlIGluc3RhbmNlb2YgYTk/dGhpcy5uYW1lZEV4cHJlc3Npb25zLm5hbWVkRXhwcmVzc2lvbk9yUGxhY2Vob2xkZXIoZWUubmFtZSxPLnNoZWV0KS5hZGRyZXNzOkVoKGVlKT9lZTplbWUoZWUuc3RhcnQsZWUuZW5kKSl9cmV0dXJuW119fSx0aGlzLmRlcGVuZGVuY3lRdWVy''@;'; put 'put ''eVZlcnRpY2VzPWc9PntpZihnIGluc3RhbmNlb2YgY2YpcmV0dXJuIHRoaXMucmFuZ2VEZXBlbmRlbmN5UXVlcnkoZyk7e2NvbnN0IEU9dGhpcy5mb3JtdWxhRGVwZW5kZW5jeVF1ZXJ5KGcpO2lmKHZvaWQgMCE9PUUpe2NvbnN0W08sWl09RTtyZXR1cm4gWi5tYXAoZWU9PntpZihlZSBpbnN0''@;'; put 'put ''YW5jZW9mIGJhKXJldHVybltlZS5zdGFydCx0aGlzLnJhbmdlTWFwcGluZy5mZXRjaFJhbmdlKGVlLnN0YXJ0LGVlLmVuZCldO2lmKGVlIGluc3RhbmNlb2YgYTkpe2NvbnN0IHZlPXRoaXMubmFtZWRFeHByZXNzaW9ucy5uYW1lZEV4cHJlc3Npb25PclBsYWNlaG9sZGVyKGVlLm5hbWUsTy5z''@;'; put 'put ''aGVldCk7cmV0dXJuW3ZlLmFkZHJlc3MsdGhpcy5hZGRyZXNzTWFwcGluZy5mZXRjaENlbGwodmUuYWRkcmVzcyldfXJldHVybltlZSx0aGlzLmFkZHJlc3NNYXBwaW5nLmZldGNoQ2VsbChlZSldfSl9cmV0dXJuW119fSx0aGlzLnJhbmdlRGVwZW5kZW5jeVF1ZXJ5PWc9Pntjb25zdCBFPVtd''@;'; put 'put ''LHtzbWFsbGVyUmFuZ2VWZXJ0ZXg6TyxyZXN0UmFuZ2U6Wn09dGhpcy5yYW5nZU1hcHBpbmcuZmluZFNtYWxsZXJSYW5nZShnLnJhbmdlKTtsZXQgZWU7dm9pZCAwIT09TyYmdGhpcy5ncmFwaC5hZGphY2VudE5vZGVzKE8pLmhhcyhnKT8oZWU9WixFLnB1c2goW25ldyBiYShPLnN0YXJ0LE8u''@;'; put 'put ''ZW5kKSxPXSkpOmVlPWcucmFuZ2U7Zm9yKGNvbnN0IHZlIG9mIGVlLmFkZHJlc3Nlcyh0aGlzKSl7Y29uc3QgTWU9dGhpcy5hZGRyZXNzTWFwcGluZy5nZXRDZWxsKHZlKTt2b2lkIDAhPT1NZSYmRS5wdXNoKFt2ZSxNZV0pfXJldHVybiBFfSx0aGlzLmZvcm11bGFEZXBlbmRlbmN5UXVlcnk9''@;'; put 'put ''Zz0+e2xldCBFLE87aWYoIShnIGluc3RhbmNlb2YgbWcpKXJldHVybjtPPWcuZ2V0QWRkcmVzcyh0aGlzLmxhemlseVRyYW5zZm9ybWluZ0FzdFNlcnZpY2UpLEU9Zy5nZXRGb3JtdWxhKHRoaXMubGF6aWx5VHJhbnNmb3JtaW5nQXN0U2VydmljZSk7Y29uc3QgWj1rcShFLHRoaXMuZnVuY3Rp''@;'; put 'put ''b25SZWdpc3RyeSk7cmV0dXJuW08sVjYoWixPKV19LHRoaXMuZ3JhcGg9bmV3IEhKdCh0aGlzLmRlcGVuZGVuY3lRdWVyeVZlcnRpY2VzKX1zdGF0aWMgYnVpbGRFbXB0eShlLHQscixpLG8pe3JldHVybiBuZXcgUWdlKG5ldyBMSnQodC5jaG9vc2VBZGRyZXNzTWFwcGluZ1BvbGljeSksbmV3''@;'; put 'put ''IFZKdCxuZXcgWUp0KHQudHJhbnNsYXRpb25QYWNrYWdlKSxuZXcgT0p0LG8sZSxyLGkpfXNldEZvcm11bGFUb0NlbGwoZSx0LHIsaSxvLGEpe2NvbnN0IGw9bWcuZnJvbUFzdCh0LGUsaSx0aGlzLmxhemlseVRyYW5zZm9ybWluZ0FzdFNlcnZpY2UudmVyc2lvbigpKTtyZXR1cm4gdGhpcy5l''@;'; put 'put ''eGNoYW5nZU9yQWRkRm9ybXVsYVZlcnRleChsKSx0aGlzLnByb2Nlc3NDZWxsRGVwZW5kZW5jaWVzKHIsbCksdGhpcy5ncmFwaC5tYXJrTm9kZUFzRGlydHkobCksbyYmdGhpcy5tYXJrQXNWb2xhdGlsZShsKSxhJiZ0aGlzLm1hcmtBc0RlcGVuZGVudE9uU3RydWN0dXJlQ2hhbmdlKGwpLHRo''@;'; put 'put ''aXMuY29ycmVjdEluZmluaXRlUmFuZ2VzRGVwZW5kZW5jeShlKSx0aGlzLmdldEFuZENsZWFyQ29udGVudENoYW5nZXMoKX1zZXRQYXJzaW5nRXJyb3JUb0NlbGwoZSx0KXtjb25zdCByPXRoaXMuc2hyaW5rUG9zc2libGVBcnJheUFuZEdldENlbGwoZSk7cmV0dXJuIHRoaXMuZXhjaGFuZ2VP''@;'; put 'put ''ckFkZEdyYXBoTm9kZShyLHQpLHRoaXMuYWRkcmVzc01hcHBpbmcuc2V0Q2VsbChlLHQpLHRoaXMuZ3JhcGgubWFya05vZGVBc0RpcnR5KHQpLHRoaXMuY29ycmVjdEluZmluaXRlUmFuZ2VzRGVwZW5kZW5jeShlKSx0aGlzLmdldEFuZENsZWFyQ29udGVudENoYW5nZXMoKX1zZXRWYWx1ZVRv''@;'; put 'put ''Q2VsbChlLHQpe2NvbnN0IHI9dGhpcy5zaHJpbmtQb3NzaWJsZUFycmF5QW5kR2V0Q2VsbChlKTtpZihyIGluc3RhbmNlb2YgJGgmJnRoaXMuYXJyYXlNYXBwaW5nLnJlbW92ZUFycmF5KHIuZ2V0UmFuZ2UoKSksciBpbnN0YW5jZW9mIFFfKXIuZ2V0VmFsdWVzKCkucmF3VmFsdWUhPT10LnJh''@;'; put 'put ''d1ZhbHVlJiYoci5zZXRWYWx1ZXModCksdGhpcy5ncmFwaC5tYXJrTm9kZUFzRGlydHkocikpO2Vsc2V7Y29uc3QgaT1uZXcgUV8odC5wYXJzZWRWYWx1ZSx0LnJhd1ZhbHVlKTt0aGlzLmV4Y2hhbmdlT3JBZGRHcmFwaE5vZGUocixpKSx0aGlzLmFkZHJlc3NNYXBwaW5nLnNldENlbGwoZSxp''@;'; put 'put ''KSx0aGlzLmdyYXBoLm1hcmtOb2RlQXNEaXJ0eShpKX1yZXR1cm4gdGhpcy5jb3JyZWN0SW5maW5pdGVSYW5nZXNEZXBlbmRlbmN5KGUpLHRoaXMuZ2V0QW5kQ2xlYXJDb250ZW50Q2hhbmdlcygpfXNldENlbGxFbXB0eShlKXtjb25zdCB0PXRoaXMuc2hyaW5rUG9zc2libGVBcnJheUFuZEdl''@;'; put 'put ''dENlbGwoZSk7aWYodm9pZCAwPT09dClyZXR1cm4gcV8uZW1wdHkoKTtpZih0aGlzLmdyYXBoLmFkamFjZW50Tm9kZXModCkuc2l6ZT4wKXtjb25zdCByPW5ldyBYXzt0aGlzLmV4Y2hhbmdlR3JhcGhOb2RlKHQsciksMD09PXRoaXMuZ3JhcGguYWRqYWNlbnROb2Rlc0NvdW50KHIpPyh0aGlz''@;'; put 'put ''LnJlbW92ZVZlcnRleChyKSx0aGlzLmFkZHJlc3NNYXBwaW5nLnJlbW92ZUNlbGwoZSkpOih0aGlzLmdyYXBoLm1hcmtOb2RlQXNEaXJ0eShyKSx0aGlzLmFkZHJlc3NNYXBwaW5nLnNldENlbGwoZSxyKSl9ZWxzZSB0aGlzLnJlbW92ZVZlcnRleCh0KSx0aGlzLmFkZHJlc3NNYXBwaW5nLnJl''@;'; put 'put ''bW92ZUNlbGwoZSk7cmV0dXJuIHRoaXMuZ2V0QW5kQ2xlYXJDb250ZW50Q2hhbmdlcygpfWNsZWFyRGlydHlWZXJ0aWNlcygpe3RoaXMuZ3JhcGguY2xlYXJEaXJ0eU5vZGVzKCl9dmVydGljZXNUb1JlY29tcHV0ZSgpe3JldHVybiB0aGlzLmdyYXBoLmdldERpcnR5QW5kVm9sYXRpbGVOb2Rl''@;'; put 'put ''cygpfXByb2Nlc3NDZWxsRGVwZW5kZW5jaWVzKGUsdCl7Y29uc3Qgcj10aGlzLmdyYXBoLmdldE5vZGVJZCh0KTtlLmZvckVhY2goaT0+e2lmKGkgaW5zdGFuY2VvZiBiYSl7Y29uc3Qgbz1pO2xldCBhPXRoaXMuZ2V0UmFuZ2Uoby5zdGFydCxvLmVuZCk7dm9pZCAwPT09YSYmKGE9bmV3IGNm''@;'; put 'put ''KG8pLHRoaXMucmFuZ2VNYXBwaW5nLnNldFJhbmdlKGEpKSx0aGlzLmdyYXBoLmFkZE5vZGVBbmRSZXR1cm5JZChhKTtjb25zdCBsPXRoaXMuZ3JhcGguZ2V0Tm9kZUlkKGEpO28uaXNGaW5pdGUoKXx8dGhpcy5ncmFwaC5tYXJrTm9kZUFzSW5maW5pdGVSYW5nZShsKTtjb25zdHtzbWFsbGVy''@;'; put 'put ''UmFuZ2VWZXJ0ZXg6dSxyZXN0UmFuZ2U6Z309dGhpcy5yYW5nZU1hcHBpbmcuZmluZFNtYWxsZXJSYW5nZShvKTtpZih2b2lkIDAhPT11KXtpZih0aGlzLmdyYXBoLmFkZEVkZ2UodSxsKSxhLmJydXRlRm9yY2Upe2EuYnJ1dGVGb3JjZT0hMTtmb3IoY29uc3QgTyBvZiBvLmFkZHJlc3Nlcyh0''@;'; put 'put ''aGlzKSl0aGlzLmdyYXBoLnJlbW92ZUVkZ2UodGhpcy5mZXRjaENlbGwoTyksbCl9fWVsc2UgYS5icnV0ZUZvcmNlPSEwO2NvbnN0IEU9dGhpcy5hcnJheU1hcHBpbmcuZ2V0QXJyYXkoZyk7aWYodm9pZCAwIT09RSl0aGlzLmdyYXBoLmFkZEVkZ2UoRSxsKTtlbHNlIGZvcihjb25zdCBPIG9m''@;'; put 'put ''IGcuYWRkcmVzc2VzKHRoaXMpKXtjb25zdHt2ZXJ0ZXg6WixpZDplZX09dGhpcy5mZXRjaENlbGxPckNyZWF0ZUVtcHR5KE8pO3RoaXMuZ3JhcGguYWRkRWRnZShlZT8/WixsKX10aGlzLmdyYXBoLmFkZEVkZ2UobCxyKSxvLmlzRmluaXRlKCkmJnRoaXMuY29ycmVjdEluZmluaXRlUmFuZ2Vz''@;'; put 'put ''RGVwZW5kZW5jaWVzQnlSYW5nZVZlcnRleChhKX1lbHNlIGlmKGkgaW5zdGFuY2VvZiBhOSl7Y29uc3Qgbz10LmdldEFkZHJlc3ModGhpcy5sYXppbHlUcmFuc2Zvcm1pbmdBc3RTZXJ2aWNlKS5zaGVldCx7dmVydGV4OmEsaWQ6bH09dGhpcy5mZXRjaE5hbWVkRXhwcmVzc2lvblZlcnRleChp''@;'; put 'put ''Lm5hbWUsbyk7dGhpcy5ncmFwaC5hZGRFZGdlKGw/P2Escil9ZWxzZXtjb25zdHt2ZXJ0ZXg6byxpZDphfT10aGlzLmZldGNoQ2VsbE9yQ3JlYXRlRW1wdHkoaSk7dGhpcy5ncmFwaC5hZGRFZGdlKGE/P28scil9fSl9ZmV0Y2hOYW1lZEV4cHJlc3Npb25WZXJ0ZXgoZSx0KXtjb25zdCByPXRo''@;'; put 'put ''aXMubmFtZWRFeHByZXNzaW9ucy5uYW1lZEV4cHJlc3Npb25PclBsYWNlaG9sZGVyKGUsdCk7cmV0dXJuIHRoaXMuZmV0Y2hDZWxsT3JDcmVhdGVFbXB0eShyLmFkZHJlc3MpfWV4Y2hhbmdlTm9kZShlLHQpe2NvbnN0IHI9dGhpcy5mZXRjaENlbGxPckNyZWF0ZUVtcHR5KGUpLnZlcnRleCxp''@;'; put 'put ''PXRoaXMuZmV0Y2hDZWxsT3JDcmVhdGVFbXB0eSh0KS52ZXJ0ZXg7dGhpcy5hZGRyZXNzTWFwcGluZy5yZW1vdmVDZWxsKGUpLHRoaXMuZXhjaGFuZ2VHcmFwaE5vZGUocixpKX1mZXRjaENlbGxPckNyZWF0ZUVtcHR5KGUpe2NvbnN0IHQ9dGhpcy5hZGRyZXNzTWFwcGluZy5nZXRDZWxsKGUp''@;'; put 'put ''O2lmKHZvaWQgMCE9PXQpcmV0dXJue3ZlcnRleDp0LGlkOnZvaWQgMH07Y29uc3Qgcj1uZXcgWF8saT10aGlzLmdyYXBoLmFkZE5vZGVBbmRSZXR1cm5JZChyKTtyZXR1cm4gdGhpcy5hZGRyZXNzTWFwcGluZy5zZXRDZWxsKGUscikse3ZlcnRleDpyLGlkOml9fXJlbW92ZVJvd3MoZSl7dGhp''@;'; put 'put ''cy5zdGF0cy5tZWFzdXJlKEFzLkFESlVTVElOR19HUkFQSCwoKT0+e2Zvcihjb25zdFtyLGldb2YgdGhpcy5hZGRyZXNzTWFwcGluZy5lbnRyaWVzRnJvbVJvd3NTcGFuKGUpKXtmb3IoY29uc3QgbyBvZiB0aGlzLmdyYXBoLmFkamFjZW50Tm9kZXMoaSkpdGhpcy5ncmFwaC5tYXJrTm9kZUFz''@;'; put 'put ''RGlydHkobyk7aWYoaSBpbnN0YW5jZW9mICRoKXtpZighaS5pc0xlZnRDb3JuZXIocikpY29udGludWU7dGhpcy5zaHJpbmtBcnJheVRvQ29ybmVyKGkpLHRoaXMuYXJyYXlNYXBwaW5nLnJlbW92ZUFycmF5KGkuZ2V0UmFuZ2UoKSl9dGhpcy5yZW1vdmVWZXJ0ZXgoaSl9fSksdGhpcy5zdGF0''@;'; put 'put ''cy5tZWFzdXJlKEFzLkFESlVTVElOR19BRERSRVNTX01BUFBJTkcsKCk9Pnt0aGlzLmFkZHJlc3NNYXBwaW5nLnJlbW92ZVJvd3MoZSl9KTtjb25zdCB0PXRoaXMuc3RhdHMubWVhc3VyZShBcy5BREpVU1RJTkdfUkFOR0VTLCgpPT57Y29uc3Qgcj10aGlzLnRydW5jYXRlUmFuZ2VzKGUsaT0+''@;'; put 'put ''aS5yb3cpO3JldHVybiB0aGlzLmdldEFycmF5VmVydGljZXNSZWxhdGVkVG9SYW5nZXMocil9KTtyZXR1cm4gdGhpcy5zdGF0cy5tZWFzdXJlKEFzLkFESlVTVElOR19BUlJBWV9NQVBQSU5HLCgpPT57dGhpcy5maXhBcnJheXNBZnRlclJlbW92aW5nUm93cyhlLnNoZWV0LGUucm93U3RhcnQs''@;'; put 'put ''ZS5udW1iZXJPZlJvd3MpfSksdGhpcy5hZGRTdHJ1Y3R1cmFsTm9kZXNUb0NoYW5nZVNldCgpLHthZmZlY3RlZEFycmF5czp0LGNvbnRlbnRDaGFuZ2VzOnRoaXMuZ2V0QW5kQ2xlYXJDb250ZW50Q2hhbmdlcygpfX1yZW1vdmVTaGVldChlKXt0aGlzLmNsZWFyU2hlZXQoZSk7Zm9yKGNvbnN0''@;'; put 'put ''W3Qscl1vZiB0aGlzLmFkZHJlc3NNYXBwaW5nLnNoZWV0RW50cmllcyhlKSl7Zm9yKGNvbnN0IGkgb2YgdGhpcy5ncmFwaC5hZGphY2VudE5vZGVzKHIpKXRoaXMuZ3JhcGgubWFya05vZGVBc0RpcnR5KGkpO3RoaXMucmVtb3ZlVmVydGV4KHIpLHRoaXMuYWRkcmVzc01hcHBpbmcucmVtb3Zl''@;'; put 'put ''Q2VsbCh0KX10aGlzLnN0YXRzLm1lYXN1cmUoQXMuQURKVVNUSU5HX1JBTkdFUywoKT0+e2NvbnN0IHQ9dGhpcy5yYW5nZU1hcHBpbmcucmVtb3ZlUmFuZ2VzSW5TaGVldChlKTtmb3IoY29uc3QgciBvZiB0KXRoaXMucmVtb3ZlVmVydGV4KHIpO3RoaXMuc3RhdHMubWVhc3VyZShBcy5BREpV''@;'; put 'put ''U1RJTkdfQUREUkVTU19NQVBQSU5HLCgpPT57dGhpcy5hZGRyZXNzTWFwcGluZy5yZW1vdmVTaGVldChlKX0pfSl9Y2xlYXJTaGVldChlKXtjb25zdCB0PW5ldyBTZXQ7Zm9yKGNvbnN0W3IsaV1vZiB0aGlzLmFkZHJlc3NNYXBwaW5nLnNoZWV0RW50cmllcyhlKSlpIGluc3RhbmNlb2YgJGg/''@;'; put 'put ''dC5hZGQoaSk6dGhpcy5zZXRDZWxsRW1wdHkocik7Zm9yKGNvbnN0IHIgb2YgdC52YWx1ZXMoKSl0aGlzLnNldEFycmF5RW1wdHkocik7dGhpcy5hZGRTdHJ1Y3R1cmFsTm9kZXNUb0NoYW5nZVNldCgpfXJlbW92ZUNvbHVtbnMoZSl7dGhpcy5zdGF0cy5tZWFzdXJlKEFzLkFESlVTVElOR19H''@;'; put 'put ''UkFQSCwoKT0+e2Zvcihjb25zdFtyLGldb2YgdGhpcy5hZGRyZXNzTWFwcGluZy5lbnRyaWVzRnJvbUNvbHVtbnNTcGFuKGUpKXtmb3IoY29uc3QgbyBvZiB0aGlzLmdyYXBoLmFkamFjZW50Tm9kZXMoaSkpdGhpcy5ncmFwaC5tYXJrTm9kZUFzRGlydHkobyk7aWYoaSBpbnN0YW5jZW9mICRo''@;'; put 'put ''KXtpZighaS5pc0xlZnRDb3JuZXIocikpY29udGludWU7dGhpcy5zaHJpbmtBcnJheVRvQ29ybmVyKGkpLHRoaXMuYXJyYXlNYXBwaW5nLnJlbW92ZUFycmF5KGkuZ2V0UmFuZ2UoKSl9dGhpcy5yZW1vdmVWZXJ0ZXgoaSl9fSksdGhpcy5zdGF0cy5tZWFzdXJlKEFzLkFESlVTVElOR19BRERS''@;'; put 'put ''RVNTX01BUFBJTkcsKCk9Pnt0aGlzLmFkZHJlc3NNYXBwaW5nLnJlbW92ZUNvbHVtbnMoZSl9KTtjb25zdCB0PXRoaXMuc3RhdHMubWVhc3VyZShBcy5BREpVU1RJTkdfUkFOR0VTLCgpPT57Y29uc3Qgcj10aGlzLnRydW5jYXRlUmFuZ2VzKGUsaT0+aS5jb2wpO3JldHVybiB0aGlzLmdldEFy''@;'; put 'put ''cmF5VmVydGljZXNSZWxhdGVkVG9SYW5nZXMocil9KTtyZXR1cm4gdGhpcy5zdGF0cy5tZWFzdXJlKEFzLkFESlVTVElOR19BUlJBWV9NQVBQSU5HLCgpPT50aGlzLmZpeEFycmF5c0FmdGVyUmVtb3ZpbmdDb2x1bW5zKGUuc2hlZXQsZS5jb2x1bW5TdGFydCxlLm51bWJlck9mQ29sdW1ucykp''@;'; put 'put ''LHRoaXMuYWRkU3RydWN0dXJhbE5vZGVzVG9DaGFuZ2VTZXQoKSx7YWZmZWN0ZWRBcnJheXM6dCxjb250ZW50Q2hhbmdlczp0aGlzLmdldEFuZENsZWFyQ29udGVudENoYW5nZXMoKX19YWRkUm93cyhlKXt0aGlzLnN0YXRzLm1lYXN1cmUoQXMuQURKVVNUSU5HX0FERFJFU1NfTUFQUElORywo''@;'; put 'put ''KT0+e3RoaXMuYWRkcmVzc01hcHBpbmcuYWRkUm93cyhlLnNoZWV0LGUucm93U3RhcnQsZS5udW1iZXJPZlJvd3MpfSk7Y29uc3QgdD10aGlzLnN0YXRzLm1lYXN1cmUoQXMuQURKVVNUSU5HX1JBTkdFUywoKT0+e2NvbnN0IHI9dGhpcy5yYW5nZU1hcHBpbmcubW92ZUFsbFJhbmdlc0luU2hl''@;'; put 'put ''ZXRBZnRlclJvd0J5Um93cyhlLnNoZWV0LGUucm93U3RhcnQsZS5udW1iZXJPZlJvd3MpO3JldHVybiB0aGlzLmZpeFJhbmdlc1doZW5BZGRpbmdSb3dzKGUuc2hlZXQsZS5yb3dTdGFydCxlLm51bWJlck9mUm93cyksdGhpcy5nZXRBcnJheVZlcnRpY2VzUmVsYXRlZFRvUmFuZ2VzKHIudmVy''@;'; put 'put ''dGljZXNXaXRoQ2hhbmdlZFNpemUpfSk7dGhpcy5zdGF0cy5tZWFzdXJlKEFzLkFESlVTVElOR19BUlJBWV9NQVBQSU5HLCgpPT57dGhpcy5maXhBcnJheXNBZnRlckFkZGluZ1JvdyhlLnNoZWV0LGUucm93U3RhcnQsZS5udW1iZXJPZlJvd3MpfSk7Zm9yKGNvbnN0IHIgb2YgdGhpcy5hZGRy''@;'; put 'put ''ZXNzTWFwcGluZy52ZXJ0aWNlc0Zyb21Sb3dzU3BhbihlKSl0aGlzLmdyYXBoLm1hcmtOb2RlQXNEaXJ0eShyKTtyZXR1cm4gdGhpcy5hZGRTdHJ1Y3R1cmFsTm9kZXNUb0NoYW5nZVNldCgpLHthZmZlY3RlZEFycmF5czp0fX1hZGRDb2x1bW5zKGUpe3RoaXMuc3RhdHMubWVhc3VyZShBcy5B''@;'; put 'put ''REpVU1RJTkdfQUREUkVTU19NQVBQSU5HLCgpPT57dGhpcy5hZGRyZXNzTWFwcGluZy5hZGRDb2x1bW5zKGUuc2hlZXQsZS5jb2x1bW5TdGFydCxlLm51bWJlck9mQ29sdW1ucyl9KTtjb25zdCB0PXRoaXMuc3RhdHMubWVhc3VyZShBcy5BREpVU1RJTkdfUkFOR0VTLCgpPT57Y29uc3Qgcj10''@;'; put 'put ''aGlzLnJhbmdlTWFwcGluZy5tb3ZlQWxsUmFuZ2VzSW5TaGVldEFmdGVyQ29sdW1uQnlDb2x1bW5zKGUuc2hlZXQsZS5jb2x1bW5TdGFydCxlLm51bWJlck9mQ29sdW1ucyk7cmV0dXJuIHRoaXMuZml4UmFuZ2VzV2hlbkFkZGluZ0NvbHVtbnMoZS5zaGVldCxlLmNvbHVtblN0YXJ0LGUubnVt''@;'; put 'put ''YmVyT2ZDb2x1bW5zKSx0aGlzLmdldEFycmF5VmVydGljZXNSZWxhdGVkVG9SYW5nZXMoci52ZXJ0aWNlc1dpdGhDaGFuZ2VkU2l6ZSl9KTt0aGlzLnN0YXRzLm1lYXN1cmUoQXMuQURKVVNUSU5HX0FSUkFZX01BUFBJTkcsKCk9PnRoaXMuZml4QXJyYXlzQWZ0ZXJBZGRpbmdDb2x1bW4oZS5z''@;'; put 'put ''aGVldCxlLmNvbHVtblN0YXJ0LGUubnVtYmVyT2ZDb2x1bW5zKSk7Zm9yKGNvbnN0IHIgb2YgdGhpcy5hZGRyZXNzTWFwcGluZy52ZXJ0aWNlc0Zyb21Db2x1bW5zU3BhbihlKSl0aGlzLmdyYXBoLm1hcmtOb2RlQXNEaXJ0eShyKTtyZXR1cm4gdGhpcy5hZGRTdHJ1Y3R1cmFsTm9kZXNUb0No''@;'; put 'put ''YW5nZVNldCgpLHthZmZlY3RlZEFycmF5czp0LGNvbnRlbnRDaGFuZ2VzOnRoaXMuZ2V0QW5kQ2xlYXJDb250ZW50Q2hhbmdlcygpfX1pc1RoZXJlU3BhY2VGb3JBcnJheShlKXtjb25zdCB0PWUuZ2V0UmFuZ2VPclVuZGVmKCk7aWYodm9pZCAwPT09dClyZXR1cm4hMTtmb3IoY29uc3QgciBv''@;'; put 'put ''ZiB0LmFkZHJlc3Nlcyh0aGlzKSl7Y29uc3QgaT10aGlzLmFkZHJlc3NNYXBwaW5nLmdldENlbGwocik7aWYodm9pZCAwIT09aSYmIShpIGluc3RhbmNlb2YgWF8pJiZpIT09ZSlyZXR1cm4hMX1yZXR1cm4hMH1tb3ZlQ2VsbHMoZSx0LHIsaSl7Zm9yKGNvbnN0IG8gb2YgZS5hZGRyZXNzZXNX''@;'; put 'put ''aXRoRGlyZWN0aW9uKHQscix0aGlzKSl7Y29uc3QgYT1CbyhpLG8uY29sK3Qsby5yb3crcik7bGV0IGw9dGhpcy5hZGRyZXNzTWFwcGluZy5nZXRDZWxsKG8pO2NvbnN0IHU9dGhpcy5hZGRyZXNzTWFwcGluZy5nZXRDZWxsKGEpO2lmKHRoaXMuYWRkcmVzc01hcHBpbmcucmVtb3ZlQ2VsbChv''@;'; put 'put ''KSx2b2lkIDAhPT1sKXtsZXQgZzt0aGlzLmdyYXBoLm1hcmtOb2RlQXNEaXJ0eShsKSx0aGlzLmFkZHJlc3NNYXBwaW5nLnNldENlbGwoYSxsKTtmb3IoY29uc3QgRSBvZiB0aGlzLmdyYXBoLmFkamFjZW50Tm9kZXMobCkpRSBpbnN0YW5jZW9mIGNmJiYhZS5jb250YWluc1JhbmdlKEUucmFu''@;'; put 'put ''Z2UpJiYoZz1nPz90aGlzLmZldGNoQ2VsbE9yQ3JlYXRlRW1wdHkobykudmVydGV4LHRoaXMuZ3JhcGguYWRkRWRnZShnLEUpLHRoaXMuZ3JhcGgucmVtb3ZlRWRnZShsLEUpKTtnJiYodGhpcy5ncmFwaC5tYXJrTm9kZUFzRGlydHkoZyksdGhpcy5hZGRyZXNzTWFwcGluZy5zZXRDZWxsKG8s''@;'; put 'put ''ZykpfWlmKHZvaWQgMCE9PXUpe3ZvaWQgMD09PWwmJnRoaXMuYWRkcmVzc01hcHBpbmcucmVtb3ZlQ2VsbChhKTtmb3IoY29uc3QgZyBvZiB0aGlzLmdyYXBoLmFkamFjZW50Tm9kZXModSkpbD1sPz90aGlzLmZldGNoQ2VsbE9yQ3JlYXRlRW1wdHkoYSkudmVydGV4LHRoaXMuZ3JhcGguYWRk''@;'; put 'put ''RWRnZShsLGcpLHRoaXMuZ3JhcGgubWFya05vZGVBc0RpcnR5KGwpO3RoaXMucmVtb3ZlVmVydGV4KHUpfX1mb3IoY29uc3QgbyBvZiB0aGlzLnJhbmdlTWFwcGluZy5yYW5nZVZlcnRpY2VzQ29udGFpbmVkSW5SYW5nZShlKSlmb3IoY29uc3QgYSBvZiB0aGlzLmdyYXBoLmFkamFjZW50Tm9k''@;'; put 'put ''ZXMobykpaWYoYSBpbnN0YW5jZW9mIGNmJiYhZS5jb250YWluc1JhbmdlKGEucmFuZ2UpKXt0aGlzLmdyYXBoLnJlbW92ZUVkZ2UobyxhKTtmb3IoY29uc3QgbCBvZiBvLnJhbmdlLmFkZHJlc3Nlcyh0aGlzKSl7Y29uc3R7dmVydGV4OnUsaWQ6Z309dGhpcy5mZXRjaENlbGxPckNyZWF0ZUVt''@;'; put 'put ''cHR5KGwpO3RoaXMuZ3JhcGguYWRkRWRnZShnPz91LGEpLHRoaXMuYWRkcmVzc01hcHBpbmcuc2V0Q2VsbChsLHUpLHRoaXMuZ3JhcGgubWFya05vZGVBc0RpcnR5KHUpfX10aGlzLnJhbmdlTWFwcGluZy5tb3ZlUmFuZ2VzSW5zaWRlU291cmNlUmFuZ2UoZSx0LHIsaSl9c2V0QXJyYXlFbXB0''@;'; put 'put ''eShlKXtjb25zdCB0PWJhLnNwYW5Gcm9tKGUuZ2V0QWRkcmVzcyh0aGlzLmxhemlseVRyYW5zZm9ybWluZ0FzdFNlcnZpY2UpLGUud2lkdGgsZS5oZWlnaHQpLHI9dGhpcy5ncmFwaC5hZGphY2VudE5vZGVzKGUpO2Zvcihjb25zdCBpIG9mIHQuYWRkcmVzc2VzKHRoaXMpKXRoaXMuYWRkcmVz''@;'; put 'put ''c01hcHBpbmcucmVtb3ZlQ2VsbChpKTtmb3IoY29uc3QgaSBvZiByLnZhbHVlcygpKXtjb25zdCBvPU5KdCh0aGlzLmZ1bmN0aW9uUmVnaXN0cnksaSxlLmdldFJhbmdlKCksdGhpcy5sYXppbHlUcmFuc2Zvcm1pbmdBc3RTZXJ2aWNlLHRoaXMpO2Zvcihjb25zdCBhIG9mIG8pe2NvbnN0e3Zl''@;'; put 'put ''cnRleDpsLGlkOnV9PXRoaXMuZmV0Y2hDZWxsT3JDcmVhdGVFbXB0eShhKTt0aGlzLmdyYXBoLmFkZEVkZ2UodT8/bCxpKX1vLmxlbmd0aD4wJiZ0aGlzLmdyYXBoLm1hcmtOb2RlQXNEaXJ0eShpKX10aGlzLnJlbW92ZVZlcnRleChlKSx0aGlzLmFycmF5TWFwcGluZy5yZW1vdmVBcnJheShl''@;'; put 'put ''LmdldFJhbmdlKCkpfWFkZFZlcnRleChlLHQpe3RoaXMuZ3JhcGguYWRkTm9kZUFuZFJldHVybklkKHQpLHRoaXMuYWRkcmVzc01hcHBpbmcuc2V0Q2VsbChlLHQpfWFkZEFycmF5VmVydGV4KGUsdCl7dGhpcy5ncmFwaC5hZGROb2RlQW5kUmV0dXJuSWQodCksdGhpcy5zZXRBZGRyZXNzTWFw''@;'; put 'put ''cGluZ0ZvckFycmF5VmVydGV4KHQsZSl9KmFycmF5Rm9ybXVsYU5vZGVzKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5ncmFwaC5nZXROb2RlcygpKWUgaW5zdGFuY2VvZiAkaCYmKHlpZWxkIGUpfSplbnRyaWVzRnJvbVJvd3NTcGFuKGUpe3lpZWxkKnRoaXMuYWRkcmVzc01hcHBpbmcuZW50cmll''@;'; put 'put ''c0Zyb21Sb3dzU3BhbihlKX0qZW50cmllc0Zyb21Db2x1bW5zU3BhbihlKXt5aWVsZCp0aGlzLmFkZHJlc3NNYXBwaW5nLmVudHJpZXNGcm9tQ29sdW1uc1NwYW4oZSl9ZmV0Y2hDZWxsKGUpe3JldHVybiB0aGlzLmFkZHJlc3NNYXBwaW5nLmZldGNoQ2VsbChlKX1nZXRDZWxsKGUpe3JldHVy''@;'; put 'put ''biB0aGlzLmFkZHJlc3NNYXBwaW5nLmdldENlbGwoZSl9Z2V0Q2VsbFZhbHVlKGUpe3JldHVybiB0aGlzLmFkZHJlc3NNYXBwaW5nLmdldENlbGxWYWx1ZShlKX1nZXRSYXdWYWx1ZShlKXtyZXR1cm4gdGhpcy5hZGRyZXNzTWFwcGluZy5nZXRSYXdWYWx1ZShlKX1nZXRTY2FsYXJWYWx1ZShl''@;'; put 'put ''KXtjb25zdCB0PXRoaXMuYWRkcmVzc01hcHBpbmcuZ2V0Q2VsbFZhbHVlKGUpO3JldHVybiB0IGluc3RhbmNlb2YgbGE/bmV3IFB0KHRuLlZBTFVFLGRyLlNjYWxhckV4cGVjdGVkKTp0fWV4aXN0c0VkZ2UoZSx0KXtyZXR1cm4gdGhpcy5ncmFwaC5leGlzdHNFZGdlKGUsdCl9Z2V0U2hlZXRJ''@;'; put 'put ''ZChlKXtyZXR1cm4gdGhpcy5zaGVldE1hcHBpbmcuZmV0Y2goZSl9Z2V0U2hlZXRIZWlnaHQoZSl7cmV0dXJuIHRoaXMuYWRkcmVzc01hcHBpbmcuZ2V0SGVpZ2h0KGUpfWdldFNoZWV0V2lkdGgoZSl7cmV0dXJuIHRoaXMuYWRkcmVzc01hcHBpbmcuZ2V0V2lkdGgoZSl9Z2V0QXJyYXkoZSl7''@;'; put 'put ''cmV0dXJuIHRoaXMuYXJyYXlNYXBwaW5nLmdldEFycmF5KGUpfWdldFJhbmdlKGUsdCl7cmV0dXJuIHRoaXMucmFuZ2VNYXBwaW5nLmdldFJhbmdlKGUsdCl9dG9wU29ydFdpdGhTY2MoKXtyZXR1cm4gdGhpcy5ncmFwaC50b3BTb3J0V2l0aFNjYygpfW1hcmtBc1ZvbGF0aWxlKGUpe3RoaXMu''@;'; put 'put ''Z3JhcGgubWFya05vZGVBc1ZvbGF0aWxlKGUpfW1hcmtBc0RlcGVuZGVudE9uU3RydWN0dXJlQ2hhbmdlKGUpe3RoaXMuZ3JhcGgubWFya05vZGVBc0NoYW5naW5nV2l0aFN0cnVjdHVyZShlKX1mb3JjZUFwcGx5UG9zdHBvbmVkVHJhbnNmb3JtYXRpb25zKCl7Zm9yKGNvbnN0IGUgb2YgdGhp''@;'; put 'put ''cy5ncmFwaC5nZXROb2RlcygpKWUgaW5zdGFuY2VvZiBqNiYmZS5lbnN1cmVSZWNlbnREYXRhKHRoaXMubGF6aWx5VHJhbnNmb3JtaW5nQXN0U2VydmljZSl9KnJhd1ZhbHVlc0Zyb21SYW5nZShlKXtmb3IoY29uc3QgdCBvZiBlLmFkZHJlc3Nlcyh0aGlzKSl7Y29uc3Qgcj10aGlzLmdldFNj''@;'; put 'put ''YWxhclZhbHVlKHQpO3IhPT1sbCYmKHlpZWxkW0xvKHIpLHRdKX19Y29tcHV0ZUxpc3RPZlZhbHVlc0luUmFuZ2UoZSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgciBvZiBlLmFkZHJlc3Nlcyh0aGlzKSl7Y29uc3QgaT10aGlzLmdldFNjYWxhclZhbHVlKHIpO3QucHVzaChpKX1yZXR1cm4gdH1z''@;'; put 'put ''aHJpbmtBcnJheVRvQ29ybmVyKGUpe3RoaXMuY2xlYW5BZGRyZXNzTWFwcGluZ1VuZGVyQXJyYXkoZSk7Zm9yKGNvbnN0IHQgb2YgdGhpcy5hZGphY2VudEFycmF5VmVydGljZXMoZSkpe2xldCByO3I9dCBpbnN0YW5jZW9mIG1nP3RoaXMuZm9ybXVsYURpcmVjdERlcGVuZGVuY2llc1RvQXJy''@;'; put 'put ''YXkodCxlKTp0aGlzLnJhbmdlRGlyZWN0RGVwZW5kZW5jaWVzVG9BcnJheSh0LGUpO2xldCBpPSExO2Zvcihjb25zdFtvLGFdb2YgcillLmlzTGVmdENvcm5lcihvKSYmKGk9ITApLHRoaXMuZ3JhcGguYWRkRWRnZShhLHQpLHRoaXMuZ3JhcGgubWFya05vZGVBc0RpcnR5KGEpO2l8fHRoaXMu''@;'; put 'put ''Z3JhcGgucmVtb3ZlRWRnZShlLHQpfXRoaXMuZ3JhcGgubWFya05vZGVBc0RpcnR5KGUpfWlzQXJyYXlJbnRlcm5hbENlbGwoZSl7Y29uc3QgdD10aGlzLmdldENlbGwoZSk7cmV0dXJuIHQgaW5zdGFuY2VvZiAkaCYmIXQuaXNMZWZ0Q29ybmVyKGUpfWdldEFuZENsZWFyQ29udGVudENoYW5n''@;'; put 'put ''ZXMoKXtjb25zdCBlPXRoaXMuY2hhbmdlcztyZXR1cm4gdGhpcy5jaGFuZ2VzPXFfLmVtcHR5KCksZX1nZXRBZGphY2VudE5vZGVzQWRkcmVzc2VzKGUpe2NvbnN0IHQ9dGhpcy5ncmFwaC5hZGphY2VudE5vZGVzKGUpLHI9W107cmV0dXJuIHQuZm9yRWFjaChpPT57Y29uc3Qgbz1pO3IucHVz''@;'; put 'put ''aChvIGluc3RhbmNlb2YgY2Y/ZW1lKG8uc3RhcnQsby5lbmQpOm8uZ2V0QWRkcmVzcyh0aGlzLmxhemlseVRyYW5zZm9ybWluZ0FzdFNlcnZpY2UpKX0pLHJ9ZXhjaGFuZ2VHcmFwaE5vZGUoZSx0KXt0aGlzLmdyYXBoLmFkZE5vZGVBbmRSZXR1cm5JZCh0KTtjb25zdCByPXRoaXMuZ3JhcGgu''@;'; put 'put ''YWRqYWNlbnROb2RlcyhlKTt0aGlzLnJlbW92ZVZlcnRleChlKSxyLmZvckVhY2goaT0+e3RoaXMuZ3JhcGguaGFzTm9kZShpKSYmdGhpcy5ncmFwaC5hZGRFZGdlKHQsaSl9KX1zZXRBcnJheShlLHQpe3RoaXMuYXJyYXlNYXBwaW5nLnNldEFycmF5KGUsdCl9Y29ycmVjdEluZmluaXRlUmFu''@;'; put 'put ''Z2VzRGVwZW5kZW5jeShlKXtjb25zdCB0PXRoaXMuZ3JhcGguZ2V0SW5maW5pdGVSYW5nZXMoKS5maWx0ZXIoKHtub2RlOmF9KT0+YS5yYW5nZS5hZGRyZXNzSW5SYW5nZShlKSk7aWYodC5sZW5ndGg8PTApcmV0dXJuO2NvbnN0e3ZlcnRleDpyLGlkOml9PXRoaXMuZmV0Y2hDZWxsT3JDcmVh''@;'; put 'put ''dGVFbXB0eShlKSxvPWk/P3RoaXMuZ3JhcGguZ2V0Tm9kZUlkKHIpO3QuZm9yRWFjaCgoe2lkOmF9KT0+e3RoaXMuZ3JhcGguYWRkRWRnZShvLGEpfSl9ZXhjaGFuZ2VPckFkZEdyYXBoTm9kZShlLHQpe2U/dGhpcy5leGNoYW5nZUdyYXBoTm9kZShlLHQpOnRoaXMuZ3JhcGguYWRkTm9kZUFu''@;'; put 'put ''ZFJldHVybklkKHQpfWdldEFycmF5VmVydGljZXNSZWxhdGVkVG9SYW5nZXMoZSl7Y29uc3QgdD1uZXcgU2V0O3JldHVybiBlLmZvckVhY2gocj0+e3RoaXMuZ3JhcGguaGFzTm9kZShyKSYmdGhpcy5ncmFwaC5hZGphY2VudE5vZGVzKHIpLmZvckVhY2goaT0+e2kgaW5zdGFuY2VvZiAkaCYm''@;'; put 'put ''dC5hZGQoaSl9KX0pLHR9Y29ycmVjdEluZmluaXRlUmFuZ2VzRGVwZW5kZW5jaWVzQnlSYW5nZVZlcnRleChlKXt0aGlzLmdyYXBoLmdldEluZmluaXRlUmFuZ2VzKCkuZm9yRWFjaCgoe2lkOnQsbm9kZTpyfSk9Pntjb25zdCBpPWUucmFuZ2UuaW50ZXJzZWN0aW9uV2l0aChyLnJhbmdlKTt2''@;'; put 'put ''b2lkIDAhPT1pJiZpLmFkZHJlc3Nlcyh0aGlzKS5mb3JFYWNoKG89Pntjb25zdHt2ZXJ0ZXg6YSxpZDpsfT10aGlzLmZldGNoQ2VsbE9yQ3JlYXRlRW1wdHkobyk7dGhpcy5ncmFwaC5hZGRFZGdlKGw/P2EsdCl9KX0pfWNsZWFuQWRkcmVzc01hcHBpbmdVbmRlckFycmF5KGUpe2NvbnN0IHQ9''@;'; put 'put ''ZS5nZXRSYW5nZSgpO2Zvcihjb25zdCByIG9mIHQuYWRkcmVzc2VzKHRoaXMpKXtjb25zdCBpPWUuZ2V0QXJyYXlDZWxsVmFsdWUocik7dGhpcy5nZXRDZWxsKHIpPT09ZT9lLmlzTGVmdENvcm5lcihyKT90aGlzLmNoYW5nZXMuYWRkQ2hhbmdlKG5ldyBQdCh0bi5SRUYpLHIsaSk6KHRoaXMu''@;'; put 'put ''YWRkcmVzc01hcHBpbmcucmVtb3ZlQ2VsbChyKSx0aGlzLmNoYW5nZXMuYWRkQ2hhbmdlKGxsLHIsaSkpOnRoaXMuY2hhbmdlcy5hZGRDaGFuZ2UobGwscixpKX19KmZvcm11bGFEaXJlY3REZXBlbmRlbmNpZXNUb0FycmF5KGUsdCl7dmFyIHI7Y29uc3RbLGldPW51bGwhPT0ocj10aGlzLmZv''@;'; put 'put ''cm11bGFEZXBlbmRlbmN5UXVlcnkoZSkpJiZ2b2lkIDAhPT1yP3I6W107aWYodm9pZCAwIT09aSlmb3IoY29uc3QgbyBvZiBpKWlmKCEobyBpbnN0YW5jZW9mIGE5fHxvIGluc3RhbmNlb2YgYmEpJiZ0LmdldFJhbmdlKCkuYWRkcmVzc0luUmFuZ2Uobykpe2NvbnN0IGE9dGhpcy5mZXRjaENl''@;'; put 'put ''bGxPckNyZWF0ZUVtcHR5KG8pLnZlcnRleDt5aWVsZFtvLGFdfX0qcmFuZ2VEaXJlY3REZXBlbmRlbmNpZXNUb0FycmF5KGUsdCl7Y29uc3R7cmVzdFJhbmdlOnJ9PXRoaXMucmFuZ2VNYXBwaW5nLmZpbmRTbWFsbGVyUmFuZ2UoZS5yYW5nZSk7Zm9yKGNvbnN0IGkgb2Ygci5hZGRyZXNzZXMo''@;'; put 'put ''dGhpcykpaWYodC5nZXRSYW5nZSgpLmFkZHJlc3NJblJhbmdlKGkpKXtjb25zdCBvPXRoaXMuZmV0Y2hDZWxsT3JDcmVhdGVFbXB0eShpKS52ZXJ0ZXg7eWllbGRbaSxvXX19KmFkamFjZW50QXJyYXlWZXJ0aWNlcyhlKXtjb25zdCB0PXRoaXMuZ3JhcGguYWRqYWNlbnROb2RlcyhlKTtmb3Io''@;'; put 'put ''Y29uc3QgciBvZiB0KShyIGluc3RhbmNlb2YgbWd8fHIgaW5zdGFuY2VvZiBjZikmJih5aWVsZCByKX1hZGRTdHJ1Y3R1cmFsTm9kZXNUb0NoYW5nZVNldCgpe3RoaXMuZ3JhcGgubWFya0NoYW5naW5nV2l0aFN0cnVjdHVyZU5vZGVzQXNEaXJ0eSgpfWZpeFJhbmdlc1doZW5BZGRpbmdSb3dz''@;'; put 'put ''KGUsdCxyKXtjb25zdCBpPUFycmF5LmZyb20odGhpcy5yYW5nZU1hcHBpbmcucmFuZ2VzSW5TaGVldChlKSk7Zm9yKGNvbnN0IG8gb2YgaSlpZihvLnJhbmdlLmluY2x1ZGVzUm93KHQrcikpaWYoby5icnV0ZUZvcmNlKXtjb25zdCBhPW8ucmFuZ2UucmFuZ2VXaXRoU2FtZVdpZHRoKHQscik7''@;'; put 'put ''Zm9yKGNvbnN0IGwgb2YgYS5hZGRyZXNzZXModGhpcykpe2NvbnN0e3ZlcnRleDp1LGlkOmd9PXRoaXMuZmV0Y2hDZWxsT3JDcmVhdGVFbXB0eShsKTt0aGlzLmdyYXBoLmFkZEVkZ2UoZz8/dSxvKX19ZWxzZXtsZXQgYT1vLGw9dGhpcy5yYW5nZU1hcHBpbmcuZmluZFNtYWxsZXJSYW5nZShh''@;'; put 'put ''LnJhbmdlKTtpZih2b2lkIDAhPT1sLnNtYWxsZXJSYW5nZVZlcnRleCljb250aW51ZTtmb3IoO3ZvaWQgMD09PWwuc21hbGxlclJhbmdlVmVydGV4Oyl7Y29uc3QgdT1uZXcgY2YoYmEuc3BhbkZyb20oYS5yYW5nZS5zdGFydCxhLnJhbmdlLndpZHRoKCksYS5yYW5nZS5oZWlnaHQoKS0xKSk7''@;'; put 'put ''dGhpcy5yYW5nZU1hcHBpbmcuc2V0UmFuZ2UodSksdGhpcy5ncmFwaC5hZGROb2RlQW5kUmV0dXJuSWQodSk7Y29uc3QgZz1uZXcgYmEoQm8oYS5yYW5nZS5zdGFydC5zaGVldCxhLnJhbmdlLnN0YXJ0LmNvbCxhLnJhbmdlLmVuZC5yb3cpLGEucmFuZ2UuZW5kKTt0aGlzLmFkZEFsbEZyb21S''@;'; put 'put ''YW5nZShnLGEpLHRoaXMuZ3JhcGguYWRkRWRnZSh1LGEpLGE9dSxsPXRoaXMucmFuZ2VNYXBwaW5nLmZpbmRTbWFsbGVyUmFuZ2UoYS5yYW5nZSl9dGhpcy5ncmFwaC5hZGRFZGdlKGwuc21hbGxlclJhbmdlVmVydGV4LGEpLHRoaXMuYWRkQWxsRnJvbVJhbmdlKGwucmVzdFJhbmdlLGEpLHRo''@;'; put 'put ''aXMuZ3JhcGgucmVtb3ZlRWRnZShsLnNtYWxsZXJSYW5nZVZlcnRleCxvKX19YWRkQWxsRnJvbVJhbmdlKGUsdCl7Zm9yKGNvbnN0IHIgb2YgZS5hZGRyZXNzZXModGhpcykpe2NvbnN0e3ZlcnRleDppLGlkOm99PXRoaXMuZmV0Y2hDZWxsT3JDcmVhdGVFbXB0eShyKTt0aGlzLmdyYXBoLmFk''@;'; put 'put ''ZEVkZ2Uobz8/aSx0KX19Zml4UmFuZ2VzV2hlbkFkZGluZ0NvbHVtbnMoZSx0LHIpe2Zvcihjb25zdCBpIG9mIHRoaXMucmFuZ2VNYXBwaW5nLnJhbmdlc0luU2hlZXQoZSkpaWYoaS5yYW5nZS5pbmNsdWRlc0NvbHVtbih0K3IpKXtsZXQgbztvPWkuYnJ1dGVGb3JjZT9pLnJhbmdlLnJhbmdl''@;'; put 'put ''V2l0aFNhbWVIZWlnaHQodCxyKTpiYS5zcGFuRnJvbShCbyhlLHQsaS5yYW5nZS5lbmQucm93KSxyLDEpO2Zvcihjb25zdCBhIG9mIG8uYWRkcmVzc2VzKHRoaXMpKXtjb25zdHt2ZXJ0ZXg6bCxpZDp1fT10aGlzLmZldGNoQ2VsbE9yQ3JlYXRlRW1wdHkoYSk7dGhpcy5ncmFwaC5hZGRFZGdl''@;'; put 'put ''KHU/P2wsaSl9fX1leGNoYW5nZU9yQWRkRm9ybXVsYVZlcnRleChlKXtjb25zdCB0PWUuZ2V0QWRkcmVzcyh0aGlzLmxhemlseVRyYW5zZm9ybWluZ0FzdFNlcnZpY2UpLHI9YmEuc3BhbkZyb20odCxlLndpZHRoLGUuaGVpZ2h0KSxpPXRoaXMuc2hyaW5rUG9zc2libGVBcnJheUFuZEdldENl''@;'; put 'put ''bGwodCk7aWYoZSBpbnN0YW5jZW9mICRoJiZ0aGlzLnNldEFycmF5KHIsZSksdGhpcy5leGNoYW5nZU9yQWRkR3JhcGhOb2RlKGksZSksdGhpcy5hZGRyZXNzTWFwcGluZy5zZXRDZWxsKHQsZSksZSBpbnN0YW5jZW9mICRoKXtpZighdGhpcy5pc1RoZXJlU3BhY2VGb3JBcnJheShlKSlyZXR1''@;'; put 'put ''cm47Zm9yKGNvbnN0IG8gb2Ygci5hZGRyZXNzZXModGhpcykpe2lmKGUuaXNMZWZ0Q29ybmVyKG8pKWNvbnRpbnVlO2NvbnN0IGE9dGhpcy5nZXRDZWxsKG8pO3RoaXMuZXhjaGFuZ2VPckFkZEdyYXBoTm9kZShhLGUpfX1mb3IoY29uc3QgbyBvZiByLmFkZHJlc3Nlcyh0aGlzKSl0aGlzLmFk''@;'; put 'put ''ZHJlc3NNYXBwaW5nLnNldENlbGwobyxlKX1zZXRBZGRyZXNzTWFwcGluZ0ZvckFycmF5VmVydGV4KGUsdCl7aWYodGhpcy5hZGRyZXNzTWFwcGluZy5zZXRDZWxsKHQsZSksIShlIGluc3RhbmNlb2YgJGgpKXJldHVybjtjb25zdCByPWJhLnNwYW5Gcm9tT3JVbmRlZih0LGUud2lkdGgsZS5o''@;'; put 'put ''ZWlnaHQpO2lmKHZvaWQgMCE9PXImJih0aGlzLnNldEFycmF5KHIsZSksdGhpcy5pc1RoZXJlU3BhY2VGb3JBcnJheShlKSkpZm9yKGNvbnN0IGkgb2Ygci5hZGRyZXNzZXModGhpcykpdGhpcy5hZGRyZXNzTWFwcGluZy5zZXRDZWxsKGksZSl9dHJ1bmNhdGVSYW5nZXMoZSx0KXtjb25zdHt2''@;'; put 'put ''ZXJ0aWNlc1RvUmVtb3ZlOnIsdmVydGljZXNUb01lcmdlOmksdmVydGljZXNXaXRoQ2hhbmdlZFNpemU6b309dGhpcy5yYW5nZU1hcHBpbmcudHJ1bmNhdGVSYW5nZXMoZSx0KTtmb3IoY29uc3RbYSxsXW9mIGkpdGhpcy5tZXJnZVJhbmdlVmVydGljZXMoYSxsKTtmb3IoY29uc3QgYSBvZiBy''@;'; put 'put ''KXRoaXMucmVtb3ZlVmVydGV4QW5kQ2xlYW51cERlcGVuZGVuY2llcyhhKTtyZXR1cm4gb31maXhBcnJheXNBZnRlckFkZGluZ1JvdyhlLHQscil7aWYodGhpcy5hcnJheU1hcHBpbmcubW92ZUFycmF5VmVydGljZXNBZnRlclJvd0J5Um93cyhlLHQsciksISh0PD0wKSlmb3IoY29uc3RbLGld''@;'; put 'put ''b2YgdGhpcy5hcnJheU1hcHBpbmcuYXJyYXlzSW5Sb3dzKHRwLmZyb21Sb3dTdGFydEFuZEVuZChlLHQtMSx0LTEpKSl7Y29uc3Qgbz1pLmdldFJhbmdlKCk7Zm9yKGxldCBhPW8uc3RhcnQuY29sO2E8PW8uZW5kLmNvbDsrK2EpZm9yKGxldCBsPXQ7bDw9by5lbmQucm93OysrbCl7Y29uc3Qg''@;'; put 'put ''dT1CbyhlLGEsbCksZz1CbyhlLGEsbCtyKSxFPWkuZ2V0QXJyYXlDZWxsVmFsdWUodSk7dGhpcy5hZGRyZXNzTWFwcGluZy5tb3ZlQ2VsbChnLHUpLHRoaXMuY2hhbmdlcy5hZGRDaGFuZ2UobGwsZyxFKX19fWZpeEFycmF5c0FmdGVyUmVtb3ZpbmdSb3dzKGUsdCxyKXtpZih0aGlzLmFycmF5''@;'; put 'put ''TWFwcGluZy5tb3ZlQXJyYXlWZXJ0aWNlc0FmdGVyUm93QnlSb3dzKGUsdCwtciksISh0PD0wKSlmb3IoY29uc3RbLGldb2YgdGhpcy5hcnJheU1hcHBpbmcuYXJyYXlzSW5Sb3dzKHRwLmZyb21Sb3dTdGFydEFuZEVuZChlLHQtMSx0LTEpKSlpZih0aGlzLmlzVGhlcmVTcGFjZUZvckFycmF5''@;'; put 'put ''KGkpKWZvcihjb25zdCBvIG9mIGkuZ2V0UmFuZ2UoKS5hZGRyZXNzZXModGhpcykpdGhpcy5hZGRyZXNzTWFwcGluZy5zZXRDZWxsKG8saSk7ZWxzZSB0aGlzLnNldE5vU3BhY2VJZkFycmF5KGkpfWZpeEFycmF5c0FmdGVyQWRkaW5nQ29sdW1uKGUsdCxyKXtpZih0aGlzLmFycmF5TWFwcGlu''@;'; put 'put ''Zy5tb3ZlQXJyYXlWZXJ0aWNlc0FmdGVyQ29sdW1uQnlDb2x1bW5zKGUsdCxyKSwhKHQ8PTApKWZvcihjb25zdFssaV1vZiB0aGlzLmFycmF5TWFwcGluZy5hcnJheXNJbkNvbHMoZ2cuZnJvbUNvbHVtblN0YXJ0QW5kRW5kKGUsdC0xLHQtMSkpKXtjb25zdCBvPWkuZ2V0UmFuZ2UoKTtmb3Io''@;'; put 'put ''bGV0IGE9by5zdGFydC5yb3c7YTw9by5lbmQucm93OysrYSlmb3IobGV0IGw9dDtsPD1vLmVuZC5jb2w7KytsKXtjb25zdCB1PUJvKGUsbCxhKSxnPUJvKGUsbCtyLGEpLEU9aS5nZXRBcnJheUNlbGxWYWx1ZSh1KTt0aGlzLmFkZHJlc3NNYXBwaW5nLm1vdmVDZWxsKGcsdSksdGhpcy5jaGFu''@;'; put 'put ''Z2VzLmFkZENoYW5nZShsbCxnLEUpfX19Zml4QXJyYXlzQWZ0ZXJSZW1vdmluZ0NvbHVtbnMoZSx0LHIpe2lmKHRoaXMuYXJyYXlNYXBwaW5nLm1vdmVBcnJheVZlcnRpY2VzQWZ0ZXJDb2x1bW5CeUNvbHVtbnMoZSx0LC1yKSwhKHQ8PTApKWZvcihjb25zdFssaV1vZiB0aGlzLmFycmF5TWFw''@;'; put 'put ''cGluZy5hcnJheXNJbkNvbHMoZ2cuZnJvbUNvbHVtblN0YXJ0QW5kRW5kKGUsdC0xLHQtMSkpKWlmKHRoaXMuaXNUaGVyZVNwYWNlRm9yQXJyYXkoaSkpZm9yKGNvbnN0IG8gb2YgaS5nZXRSYW5nZSgpLmFkZHJlc3Nlcyh0aGlzKSl0aGlzLmFkZHJlc3NNYXBwaW5nLnNldENlbGwobyxpKTtl''@;'; put 'put ''bHNlIHRoaXMuc2V0Tm9TcGFjZUlmQXJyYXkoaSl9c2hyaW5rUG9zc2libGVBcnJheUFuZEdldENlbGwoZSl7Y29uc3QgdD10aGlzLmdldENlbGwoZSk7cmV0dXJuIHQgaW5zdGFuY2VvZiAkaD8odGhpcy5zZXROb1NwYWNlSWZBcnJheSh0KSx0aGlzLmdldENlbGwoZSkpOnR9c2V0Tm9TcGFj''@;'; put 'put ''ZUlmQXJyYXkoZSl7ZSBpbnN0YW5jZW9mICRoJiYodGhpcy5zaHJpbmtBcnJheVRvQ29ybmVyKGUpLGUuc2V0Tm9TcGFjZSgpKX1yZW1vdmVWZXJ0ZXgoZSl7dGhpcy5yZW1vdmVWZXJ0ZXhBbmRDbGVhbnVwRGVwZW5kZW5jaWVzKGUpLGUgaW5zdGFuY2VvZiBjZiYmdGhpcy5yYW5nZU1hcHBp''@;'; put 'put ''bmcucmVtb3ZlUmFuZ2UoZSl9bWVyZ2VSYW5nZVZlcnRpY2VzKGUsdCl7Y29uc3Qgcj10aGlzLmdyYXBoLmFkamFjZW50Tm9kZXModCk7dGhpcy5yZW1vdmVWZXJ0ZXhBbmRDbGVhbnVwRGVwZW5kZW5jaWVzKHQpLHRoaXMuZ3JhcGgucmVtb3ZlRWRnZUlmRXhpc3RzKGUsdCksci5mb3JFYWNo''@;'; put 'put ''KGk9Pnt0aGlzLmdyYXBoLmhhc05vZGUoaSkmJnRoaXMuZ3JhcGguYWRkRWRnZShlLGkpfSl9cmVtb3ZlVmVydGV4QW5kQ2xlYW51cERlcGVuZGVuY2llcyhlKXtjb25zdCB0PW5ldyBTZXQodGhpcy5ncmFwaC5yZW1vdmVOb2RlKGUpKTtmb3IoO3Quc2l6ZT4wOyl7Y29uc3Qgcj10LnZhbHVl''@;'; put 'put ''cygpLm5leHQoKS52YWx1ZTt0LmRlbGV0ZShyKTtjb25zdFtpLG9dPXI7dGhpcy5ncmFwaC5oYXNOb2RlKG8pJiYwPT09dGhpcy5ncmFwaC5hZGphY2VudE5vZGVzQ291bnQobykmJigobyBpbnN0YW5jZW9mIGNmfHxvIGluc3RhbmNlb2YgWF8pJiZ0aGlzLmdyYXBoLnJlbW92ZU5vZGUobyku''@;'; put 'put ''Zm9yRWFjaChhPT50LmFkZChhKSksbyBpbnN0YW5jZW9mIGNmP3RoaXMucmFuZ2VNYXBwaW5nLnJlbW92ZVJhbmdlKG8pOm8gaW5zdGFuY2VvZiBYXyYmdGhpcy5hZGRyZXNzTWFwcGluZy5yZW1vdmVDZWxsKGkpKX19fWNsYXNzIFhfe2NvbnN0cnVjdG9yKCl7fWdldENlbGxWYWx1ZSgpe3Jl''@;'; put 'put ''dHVybiBsbH19Y2xhc3MgUV97Y29uc3RydWN0b3IoZSx0KXt0aGlzLnBhcnNlZFZhbHVlPWUsdGhpcy5yYXdWYWx1ZT10fWdldFZhbHVlcygpe3JldHVybntwYXJzZWRWYWx1ZTp0aGlzLnBhcnNlZFZhbHVlLHJhd1ZhbHVlOnRoaXMucmF3VmFsdWV9fXNldFZhbHVlcyhlKXt0aGlzLnBhcnNl''@;'; put 'put ''ZFZhbHVlPWUucGFyc2VkVmFsdWUsdGhpcy5yYXdWYWx1ZT1lLnJhd1ZhbHVlfWdldENlbGxWYWx1ZSgpe3JldHVybiB0aGlzLnBhcnNlZFZhbHVlfXNldENlbGxWYWx1ZShlKXt0aHJvdyBFcnJvcigiU2V0Q2VsbFZhbHVlIGlzIGRlcHJlY2F0ZWQgZm9yIFZhbHVlQ2VsbFZlcnRleCIpfX1j''@;'; put 'put ''bGFzcyBpQXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZXJyb3JzPWUsdGhpcy5yYXdJbnB1dD10fWdldENlbGxWYWx1ZSgpe2NvbnN0IGU9dGhpcy5lcnJvcnMubWFwKHQ9PnQubWVzc2FnZSkuZmluZCh0PT50KTtyZXR1cm4gUHQucGFyc2luZ0Vycm9yKGUpfWdldEZvcm11bGEoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5yYXdJbnB1dH19Y2xhc3MgWkp0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy53aWR0aD1lLHRoaXMuaGVpZ2h0PXQsdGhpcy5tYXBwaW5nPW5ldyBNYXB9Z2V0Q2VsbChlKXt2YXIgdDtyZXR1cm4gbnVsbD09PSh0PXRoaXMubWFwcGluZy5nZXQoZS5jb2wpKXx8dm9pZCAwPT09dD92b2lk''@;'; put 'put ''IDA6dC5nZXQoZS5yb3cpfXNldENlbGwoZSx0KXt0aGlzLndpZHRoPU1hdGgubWF4KHRoaXMud2lkdGgsZS5jb2wrMSksdGhpcy5oZWlnaHQ9TWF0aC5tYXgodGhpcy5oZWlnaHQsZS5yb3crMSk7bGV0IHI9dGhpcy5tYXBwaW5nLmdldChlLmNvbCk7cnx8KHI9bmV3IE1hcCx0aGlzLm1hcHBp''@;'; put 'put ''bmcuc2V0KGUuY29sLHIpKSxyLnNldChlLnJvdyx0KX1oYXMoZSl7dmFyIHQ7cmV0dXJuIShudWxsPT09KHQ9dGhpcy5tYXBwaW5nLmdldChlLmNvbCkpfHx2b2lkIDA9PT10fHwhdC5nZXQoZS5yb3cpKX1nZXRIZWlnaHQoKXtyZXR1cm4gdGhpcy5oZWlnaHR9Z2V0V2lkdGgoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy53aWR0aH1yZW1vdmVDZWxsKGUpe3ZhciB0O251bGw9PT0odD10aGlzLm1hcHBpbmcuZ2V0KGUuY29sKSl8fHZvaWQgMD09PXR8fHQuZGVsZXRlKGUucm93KX1hZGRSb3dzKGUsdCl7dGhpcy5tYXBwaW5nLmZvckVhY2gocj0+e2NvbnN0IGk9bmV3IE1hcDtyLmZvckVhY2goKG8sYSk9''@;'; put 'put ''PnthPj1lJiYoaS5zZXQoYSt0LG8pLHIuZGVsZXRlKGEpKX0pLGkuZm9yRWFjaCgobyxhKT0+e3Iuc2V0KGEsbyl9KX0pLHRoaXMuaGVpZ2h0Kz10fWFkZENvbHVtbnMoZSx0KXtjb25zdCByPW5ldyBNYXA7dGhpcy5tYXBwaW5nLmZvckVhY2goKGksbyk9PntvPj1lJiYoci5zZXQobyt0LGkp''@;'; put 'put ''LHRoaXMubWFwcGluZy5kZWxldGUobykpfSksci5mb3JFYWNoKChpLG8pPT57dGhpcy5tYXBwaW5nLnNldChvLGkpfSksdGhpcy53aWR0aCs9dH1yZW1vdmVSb3dzKGUpe3RoaXMubWFwcGluZy5mb3JFYWNoKGk9Pntjb25zdCBvPW5ldyBNYXA7aS5mb3JFYWNoKChhLGwpPT57bD49ZS5yb3dT''@;'; put 'put ''dGFydCYmKGkuZGVsZXRlKGwpLGw+ZS5yb3dFbmQmJm8uc2V0KGwtZS5udW1iZXJPZlJvd3MsYSkpfSksby5mb3JFYWNoKChhLGwpPT57aS5zZXQobCxhKX0pfSk7Y29uc3QgdD1NYXRoLm1pbih0aGlzLmhlaWdodC0xLGUucm93RW5kKSxyPU1hdGgubWF4KDAsdC1lLnJvd1N0YXJ0KzEpO3Ro''@;'; put 'put ''aXMuaGVpZ2h0PU1hdGgubWF4KDAsdGhpcy5oZWlnaHQtcil9cmVtb3ZlQ29sdW1ucyhlKXtjb25zdCB0PW5ldyBNYXA7dGhpcy5tYXBwaW5nLmZvckVhY2goKG8sYSk9PnthPj1lLmNvbHVtblN0YXJ0JiYodGhpcy5tYXBwaW5nLmRlbGV0ZShhKSxhPmUuY29sdW1uRW5kJiZ0LnNldChhLWUu''@;'; put 'put ''bnVtYmVyT2ZDb2x1bW5zLG8pKX0pLHQuZm9yRWFjaCgobyxhKT0+e3RoaXMubWFwcGluZy5zZXQoYSxvKX0pO2NvbnN0IHI9TWF0aC5taW4odGhpcy53aWR0aC0xLGUuY29sdW1uRW5kKSxpPU1hdGgubWF4KDAsci1lLmNvbHVtblN0YXJ0KzEpO3RoaXMud2lkdGg9TWF0aC5tYXgoMCx0aGlz''@;'; put 'put ''LndpZHRoLWkpfSpnZXRFbnRyaWVzKGUpe2Zvcihjb25zdFt0LHJdb2YgdGhpcy5tYXBwaW5nKWZvcihjb25zdFtpLG9db2Ygcil5aWVsZFtCbyhlLHQsaSksb119KnZlcnRpY2VzRnJvbUNvbHVtbihlKXtjb25zdCB0PXRoaXMubWFwcGluZy5nZXQoZSk7aWYodm9pZCAwIT09dClmb3IoY29u''@;'; put 'put ''c3RbcixpXW9mIHQpeWllbGQgaX0qdmVydGljZXNGcm9tUm93KGUpe2Zvcihjb25zdCB0IG9mIHRoaXMubWFwcGluZy52YWx1ZXMoKSl7Y29uc3Qgcj10LmdldChlKTt2b2lkIDAhPT1yJiYoeWllbGQgcil9fSp2ZXJ0aWNlc0Zyb21Db2x1bW5zU3BhbihlKXtmb3IoY29uc3QgdCBvZiBlLmNv''@;'; put 'put ''bHVtbnMoKSl7Y29uc3Qgcj10aGlzLm1hcHBpbmcuZ2V0KHQpO2lmKHZvaWQgMCE9PXIpZm9yKGNvbnN0W2ksb11vZiByKXlpZWxkIG99fSp2ZXJ0aWNlc0Zyb21Sb3dzU3BhbihlKXtmb3IoY29uc3QgdCBvZiB0aGlzLm1hcHBpbmcudmFsdWVzKCkpZm9yKGNvbnN0IHIgb2YgZS5yb3dzKCkp''@;'; put 'put ''e2NvbnN0IGk9dC5nZXQocik7dm9pZCAwIT09aSYmKHlpZWxkIGkpfX0qZW50cmllc0Zyb21Sb3dzU3BhbihlKXtmb3IoY29uc3RbdCxyXW9mIHRoaXMubWFwcGluZy5lbnRyaWVzKCkpZm9yKGNvbnN0IGkgb2YgZS5yb3dzKCkpe2NvbnN0IG89ci5nZXQoaSk7dm9pZCAwIT09byYmKHlpZWxk''@;'; put 'put ''W0JvKGUuc2hlZXQsdCxpKSxvXSl9fSplbnRyaWVzRnJvbUNvbHVtbnNTcGFuKGUpe2Zvcihjb25zdCB0IG9mIGUuY29sdW1ucygpKXtjb25zdCByPXRoaXMubWFwcGluZy5nZXQodCk7aWYodm9pZCAwIT09cilmb3IoY29uc3RbaSxvXW9mIHIuZW50cmllcygpKXlpZWxkW0JvKGUuc2hlZXQs''@;'; put 'put ''dCxpKSxvXX19KnZlcnRpY2VzKCl7Zm9yKGNvbnN0W2UsdF1vZiB0aGlzLm1hcHBpbmcpZm9yKGNvbnN0W3IsaV1vZiB0KXZvaWQgMCE9PWkmJih5aWVsZCBpKX19Y2xhc3MgR0p0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy53aWR0aD1lLHRoaXMuaGVpZ2h0PXQsdGhpcy5tYXBwaW5nPW5ldyBB''@;'; put 'put ''cnJheSh0KTtmb3IobGV0IHI9MDtyPHQ7cisrKXRoaXMubWFwcGluZ1tyXT1uZXcgQXJyYXkoZSl9Z2V0Q2VsbChlKXtyZXR1cm4gdGhpcy5nZXRDZWxsVmVydGV4KGUuY29sLGUucm93KX1zZXRDZWxsKGUsdCl7dGhpcy53aWR0aD1NYXRoLm1heCh0aGlzLndpZHRoLGUuY29sKzEpLHRoaXMu''@;'; put 'put ''aGVpZ2h0PU1hdGgubWF4KHRoaXMuaGVpZ2h0LGUucm93KzEpLHRoaXMubWFwcGluZ1tlLnJvd118fCh0aGlzLm1hcHBpbmdbZS5yb3ddPW5ldyBBcnJheSh0aGlzLndpZHRoKSksdGhpcy5tYXBwaW5nW2Uucm93XVtlLmNvbF09dH1oYXMoZSl7Y29uc3QgdD10aGlzLm1hcHBpbmdbZS5yb3dd''@;'; put 'put ''O3JldHVybiEhdCYmISF0W2UuY29sXX1nZXRIZWlnaHQoKXtyZXR1cm4gdGhpcy5oZWlnaHR9Z2V0V2lkdGgoKXtyZXR1cm4gdGhpcy53aWR0aH1yZW1vdmVDZWxsKGUpe3ZvaWQgMCE9PXRoaXMubWFwcGluZ1tlLnJvd10mJmRlbGV0ZSB0aGlzLm1hcHBpbmdbZS5yb3ddW2UuY29sXX1hZGRS''@;'; put 'put ''b3dzKGUsdCl7Y29uc3Qgcj1bXTtmb3IobGV0IGk9MDtpPHQ7aSsrKXIucHVzaChuZXcgQXJyYXkodGhpcy53aWR0aCkpO3RoaXMubWFwcGluZy5zcGxpY2UoZSwwLC4uLnIpLHRoaXMuaGVpZ2h0Kz10fWFkZENvbHVtbnMoZSx0KXtmb3IobGV0IHI9MDtyPHRoaXMuaGVpZ2h0O3IrKyl2b2lk''@;'; put 'put ''IDAhPT10aGlzLm1hcHBpbmdbcl0mJnRoaXMubWFwcGluZ1tyXS5zcGxpY2UoZSwwLC4uLm5ldyBBcnJheSh0KSk7dGhpcy53aWR0aCs9dH1yZW1vdmVSb3dzKGUpe3RoaXMubWFwcGluZy5zcGxpY2UoZS5yb3dTdGFydCxlLm51bWJlck9mUm93cyk7Y29uc3QgdD1NYXRoLm1pbih0aGlzLmhl''@;'; put 'put ''aWdodC0xLGUucm93RW5kKSxyPU1hdGgubWF4KDAsdC1lLnJvd1N0YXJ0KzEpO3RoaXMuaGVpZ2h0PU1hdGgubWF4KDAsdGhpcy5oZWlnaHQtcil9cmVtb3ZlQ29sdW1ucyhlKXtmb3IobGV0IGk9MDtpPHRoaXMuaGVpZ2h0O2krKyl2b2lkIDAhPT10aGlzLm1hcHBpbmdbaV0mJnRoaXMubWFw''@;'; put 'put ''cGluZ1tpXS5zcGxpY2UoZS5jb2x1bW5TdGFydCxlLm51bWJlck9mQ29sdW1ucyk7Y29uc3QgdD1NYXRoLm1pbih0aGlzLndpZHRoLTEsZS5jb2x1bW5FbmQpLHI9TWF0aC5tYXgoMCx0LWUuY29sdW1uU3RhcnQrMSk7dGhpcy53aWR0aD1NYXRoLm1heCgwLHRoaXMud2lkdGgtcil9KmdldEVu''@;'; put 'put ''dHJpZXMoZSl7Zm9yKGxldCB0PTA7dDx0aGlzLmhlaWdodDsrK3QpZm9yKGxldCByPTA7cjx0aGlzLndpZHRoOysrcil7Y29uc3QgaT10aGlzLmdldENlbGxWZXJ0ZXgocix0KTtpJiYoeWllbGRbQm8oZSxyLHQpLGldKX19KnZlcnRpY2VzRnJvbUNvbHVtbihlKXtmb3IobGV0IHQ9MDt0PHRo''@;'; put 'put ''aXMuaGVpZ2h0OysrdCl7Y29uc3Qgcj10aGlzLmdldENlbGxWZXJ0ZXgoZSx0KTtyJiYoeWllbGQgcil9fSp2ZXJ0aWNlc0Zyb21Sb3coZSl7Zm9yKGxldCB0PTA7dDx0aGlzLndpZHRoOysrdCl7Y29uc3Qgcj10aGlzLmdldENlbGxWZXJ0ZXgodCxlKTtyJiYoeWllbGQgcil9fSp2ZXJ0aWNl''@;'; put 'put ''c0Zyb21Db2x1bW5zU3BhbihlKXtmb3IobGV0IHQ9ZS5jb2x1bW5TdGFydDt0PD1lLmNvbHVtbkVuZDsrK3QpZm9yKGxldCByPTA7cjx0aGlzLmhlaWdodDsrK3Ipe2NvbnN0IGk9dGhpcy5nZXRDZWxsVmVydGV4KHQscik7aSYmKHlpZWxkIGkpfX0qdmVydGljZXNGcm9tUm93c1NwYW4oZSl7''@;'; put 'put ''Zm9yKGxldCB0PTA7dDx0aGlzLndpZHRoOysrdClmb3IobGV0IHI9ZS5yb3dTdGFydDtyPD1lLnJvd0VuZDsrK3Ipe2NvbnN0IGk9dGhpcy5nZXRDZWxsVmVydGV4KHQscik7aSYmKHlpZWxkIGkpfX0qZW50cmllc0Zyb21Sb3dzU3BhbihlKXtmb3IobGV0IHQ9MDt0PHRoaXMud2lkdGg7Kyt0''@;'; put 'put ''KWZvcihsZXQgcj1lLnJvd1N0YXJ0O3I8PWUucm93RW5kOysrcil7Y29uc3QgaT10aGlzLmdldENlbGxWZXJ0ZXgodCxyKTtpJiYoeWllbGRbQm8oZS5zaGVldCx0LHIpLGldKX19KmVudHJpZXNGcm9tQ29sdW1uc1NwYW4oZSl7Zm9yKGxldCB0PWUuY29sdW1uU3RhcnQ7dDw9ZS5jb2x1bW5F''@;'; put 'put ''bmQ7Kyt0KWZvcihsZXQgcj0wO3I8dGhpcy5oZWlnaHQ7KytyKXtjb25zdCBpPXRoaXMuZ2V0Q2VsbFZlcnRleCh0LHIpO2kmJih5aWVsZFtCbyhlLnNoZWV0LHQsciksaV0pfX0qdmVydGljZXMoKXtmb3IobGV0IGU9MDtlPHRoaXMuaGVpZ2h0OysrZSlmb3IobGV0IHQ9MDt0PHRoaXMud2lk''@;'; put 'put ''dGg7Kyt0KXtjb25zdCByPXRoaXMuZ2V0Q2VsbFZlcnRleCh0LGUpO3ImJih5aWVsZCByKX19Z2V0Q2VsbFZlcnRleChlLHQpe3ZhciByO3JldHVybiBudWxsPT09KHI9dGhpcy5tYXBwaW5nW3RdKXx8dm9pZCAwPT09cj92b2lkIDA6cltlXX19dmFyIHRuPWZ1bmN0aW9uKG4pe3JldHVybiBu''@;'; put 'put ''LkRJVl9CWV9aRVJPPSJESVZfQllfWkVSTyIsbi5OQU1FPSJOQU1FIixuLlZBTFVFPSJWQUxVRSIsbi5OVU09Ik5VTSIsbi5OQT0iTkEiLG4uQ1lDTEU9IkNZQ0xFIixuLlJFRj0iUkVGIixuLlNQSUxMPSJTUElMTCIsbi5MSUM9IkxJQyIsbi5FUlJPUj0iRVJST1IiLG59KHRufHx7fSksVG09''@;'; put 'put ''ZnVuY3Rpb24obil7cmV0dXJuIG4uRk9STVVMQT0iRk9STVVMQSIsbi5WQUxVRT0iVkFMVUUiLG4uQVJSQVk9IkFSUkFZIixuLkVNUFRZPSJFTVBUWSIsbi5BUlJBWUZPUk1VTEE9IkFSUkFZRk9STVVMQSIsbn0oVG18fHt9KSxKZ2U9ZnVuY3Rpb24obil7cmV0dXJuIG4uRU1QVFk9IkVNUFRZ''@;'; put 'put ''IixuLk5VTUJFUj0iTlVNQkVSIixuLlNUUklORz0iU1RSSU5HIixuLkJPT0xFQU49IkJPT0xFQU4iLG4uRVJST1I9IkVSUk9SIixufShKZ2V8fHt9KSxpV2U9ZnVuY3Rpb24obil7cmV0dXJuIG4uTlVNQkVSPSJOVU1CRVIiLG59KGlXZXx8e30pO2NvbnN0IFU2PU9iamVjdC5hc3NpZ24oT2Jq''@;'; put 'put ''ZWN0LmFzc2lnbih7fSxKZ2UpLGlXZSksb1dlPShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSmdlKSxvYSksbj0+e3N3aXRjaChuKXtjYXNlIFU2LkVNUFRZOnJldHVybiAwO2Nhc2UgVTYuTlVNQkVSOnJldHVybiAxO2Nhc2UgVTYuU1RSSU5HOnJldHVybiAyO2Nhc2UgVTYuQk9P''@;'; put 'put ''TEVBTjpyZXR1cm4gMztjYXNlIFU2LkVSUk9SOnJldHVybiA0fXRocm93IG5ldyBFcnJvcigiQ2VsbCB2YWx1ZSBub3QgY29tcHV0ZWQiKX0pLEZxPW49PntpZihuPT09bGwpcmV0dXJuIFU2LkVNUFRZO2lmKG4gaW5zdGFuY2VvZiBQdHx8biBpbnN0YW5jZW9mIGxhKXJldHVybiBVNi5FUlJP''@;'; put 'put ''UjtpZigic3RyaW5nIj09dHlwZW9mIG4pcmV0dXJuIFU2LlNUUklORztpZihjYyhuKSlyZXR1cm4gVTYuTlVNQkVSO2lmKCJib29sZWFuIj09dHlwZW9mIG4pcmV0dXJuIFU2LkJPT0xFQU47dGhyb3cgbmV3IEVycm9yKCJDZWxsIHZhbHVlIG5vdCBjb21wdXRlZCIpfTtjbGFzcyBQdHtjb25z''@;'; put 'put ''dHJ1Y3RvcihlLHQscil7dGhpcy50eXBlPWUsdGhpcy5tZXNzYWdlPXQsdGhpcy5yb290PXJ9c3RhdGljIHBhcnNpbmdFcnJvcihlKXtyZXR1cm4gbmV3IFB0KHRuLkVSUk9SLGAke2RyLlBhcnNlRXJyb3J9JHtlPyIgIitlOiIifWApfWF0dGFjaFJvb3RWZXJ0ZXgoZSl7cmV0dXJuIHZvaWQg''@;'; put 'put ''MD09PXRoaXMucm9vdD9uZXcgUHQodGhpcy50eXBlLHRoaXMubWVzc2FnZSxlKTp0aGlzfX1jb25zdCBhV2U9KG4sZSk9Pih7c2hlZXQ6bixyb3c6ZX0pLFhKdD1uPT5uLnJvdzwwLHNXZT0obixlKT0+KHtzaGVldDpuLGNvbDplfSksUUp0PW49Pm4uY29sPDAsQm89KG4sZSx0KT0+KHtzaGVl''@;'; put 'put ''dDpuLGNvbDplLHJvdzp0fSksbnA9bj0+bi5jb2w8MHx8bi5yb3c8MCxKSnQ9KG4sZSx0LHIpPT5CbyhlLG4uY29sK3Qsbi5yb3crciksY1A9bj0+YCR7bi5zaGVldH0sJHtuLnJvd30sJHtuLmNvbH1gO2Z1bmN0aW9uIEVoKG4pe3ZhciBlLHQscjtyZXR1cm4gbiYmKCJvYmplY3QiPT10eXBl''@;'; put 'put ''b2Ygbnx8ImZ1bmN0aW9uIj09dHlwZW9mIG4pJiYibnVtYmVyIj09dHlwZW9mKG51bGw9PT0oZT1uKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5zaGVldCkmJiJudW1iZXIiPT10eXBlb2YobnVsbD09PSh0PW4pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNvbCkmJiJudW1iZXIiPT10eXBlb2YobnVs''@;'; put 'put ''bD09PShyPW4pfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnJvdyl9Y29uc3QgJDQ9KG4sZSk9Pnt2YXIgdDtyZXR1cm4gbnVsbCE9PSh0PW4uc2hlZXQpJiZ2b2lkIDAhPT10P3Q6ZS5zaGVldH0sdVA9KG4sZSk9Pm4uc2hlZXQ9PT1lLnNoZWV0JiZuLmNvbD09PWUuY29sJiZuLnJvdz09PWUucm93''@;'; put 'put ''O2Z1bmN0aW9uIHZnKG4pe3JldHVybiEoIW58fCJvYmplY3QiIT10eXBlb2YgbiYmImZ1bmN0aW9uIiE9dHlwZW9mIG4pJiYic3RhcnQiaW4gbiYmRWgobi5zdGFydCkmJiJlbmQiaW4gbiYmRWgobi5lbmQpfWNvbnN0IGVtZT0obixlKT0+KHtzdGFydDpuLGVuZDplfSk7Y2xhc3MgYmF7Y29u''@;'; put 'put ''c3RydWN0b3IoZSx0KXtpZihlLnNoZWV0IT09dC5zaGVldCl0aHJvdyBuZXcgaVAoZS5zaGVldCx0LnNoZWV0KTt0aGlzLnN0YXJ0PUJvKGUuc2hlZXQsZS5jb2wsZS5yb3cpLHRoaXMuZW5kPUJvKHQuc2hlZXQsdC5jb2wsdC5yb3cpfWdldCBzaGVldCgpe3JldHVybiB0aGlzLnN0YXJ0LnNo''@;'; put 'put ''ZWV0fXN0YXRpYyBmcm9tU2ltcGxlQ2VsbEFkZHJlc3NlcyhlLHQpe2lmKGUuc2hlZXQhPT10LnNoZWV0KXRocm93IG5ldyBpUChlLnNoZWV0LHQuc2hlZXQpO2NvbnN0IHI9dC5jb2wtZS5jb2wsaT10LnJvdy1lLnJvdztyZXR1cm4gTnVtYmVyLmlzRmluaXRlKGkpJiZOdW1iZXIuaXNGaW5p''@;'; put 'put ''dGUocik/bmV3IGJhKGUsdCk6TnVtYmVyLmlzRmluaXRlKGkpP25ldyBsOShlLnNoZWV0LGUucm93LHQucm93KTpuZXcgczkoZS5zaGVldCxlLmNvbCx0LmNvbCl9c3RhdGljIGZyb21Bc3QoZSx0KXtyZXR1cm4gZS50eXBlPT09cm4uQ0VMTF9SQU5HRT9iYS5mcm9tQ2VsbFJhbmdlKGUsdCk6''@;'; put 'put ''ZS50eXBlPT09cm4uQ09MVU1OX1JBTkdFP3M5LmZyb21Db2x1bW5SYW5nZShlLHQpOmw5LmZyb21Sb3dSYW5nZUFzdChlLHQpfXN0YXRpYyBmcm9tQXN0T3JVbmRlZihlLHQpe3RyeXtyZXR1cm4gYmEuZnJvbUFzdChlLHQpfWNhdGNoe3JldHVybn19c3RhdGljIGZyb21DZWxsUmFuZ2UoZSx0''@;'; put 'put ''KXtyZXR1cm4gbmV3IGJhKGUuc3RhcnQudG9TaW1wbGVDZWxsQWRkcmVzcyh0KSxlLmVuZC50b1NpbXBsZUNlbGxBZGRyZXNzKHQpKX1zdGF0aWMgc3BhbkZyb20oZSx0LHIpe2NvbnN0IGk9YmEuc3BhbkZyb21PclVuZGVmKGUsdCxyKTtpZih2b2lkIDA9PT1pKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''QWJzb2x1dGVDZWxsUmFuZ2U6IFdyb25nIHJhbmdlIHNpemUiKTtyZXR1cm4gaX1zdGF0aWMgc3BhbkZyb21PclVuZGVmKGUsdCxyKXtyZXR1cm4hTnVtYmVyLmlzRmluaXRlKHQpJiZOdW1iZXIuaXNGaW5pdGUocik/MCE9PWUuY29sP3ZvaWQgMDpuZXcgbDkoZS5zaGVldCxlLnJvdyxlLnJv''@;'; put 'put ''dytyLTEpOiFOdW1iZXIuaXNGaW5pdGUocikmJk51bWJlci5pc0Zpbml0ZSh0KT8wIT09ZS5yb3c/dm9pZCAwOm5ldyBzOShlLnNoZWV0LGUuY29sLGUuY29sK3QtMSk6TnVtYmVyLmlzRmluaXRlKHIpJiZOdW1iZXIuaXNGaW5pdGUodCk/bmV3IGJhKGUsQm8oZS5zaGVldCxlLmNvbCt0LTEs''@;'; put 'put ''ZS5yb3crci0xKSk6dm9pZCAwfXN0YXRpYyBmcm9tQ29vcmRpbmF0ZXMoZSx0LHIsaSxvKXtyZXR1cm4gbmV3IGJhKEJvKGUsdCxyKSxCbyhlLGksbykpfWlzRmluaXRlKCl7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0aGlzLnNpemUoKSl9ZG9lc092ZXJsYXAoZSl7cmV0dXJuISh0aGlzLnN0''@;'; put 'put ''YXJ0LnNoZWV0IT1lLnN0YXJ0LnNoZWV0fHx0aGlzLmVuZC5yb3c8ZS5zdGFydC5yb3d8fHRoaXMuc3RhcnQucm93PmUuZW5kLnJvd3x8dGhpcy5lbmQuY29sPGUuc3RhcnQuY29sfHx0aGlzLnN0YXJ0LmNvbD5lLmVuZC5jb2wpfWFkZHJlc3NJblJhbmdlKGUpe3JldHVybiB0aGlzLnNoZWV0''@;'; put 'put ''PT09ZS5zaGVldCYmdGhpcy5zdGFydC5yb3c8PWUucm93JiZ0aGlzLmVuZC5yb3c+PWUucm93JiZ0aGlzLnN0YXJ0LmNvbDw9ZS5jb2wmJnRoaXMuZW5kLmNvbD49ZS5jb2x9Y29sdW1uSW5SYW5nZShlKXtyZXR1cm4gdGhpcy5zaGVldD09PWUuc2hlZXQmJnRoaXMuc3RhcnQuY29sPD1lLmNv''@;'; put 'put ''bCYmdGhpcy5lbmQuY29sPj1lLmNvbH1yb3dJblJhbmdlKGUpe3JldHVybiB0aGlzLnNoZWV0PT09ZS5zaGVldCYmdGhpcy5zdGFydC5yb3c8PWUucm93JiZ0aGlzLmVuZC5yb3c+PWUucm93fWNvbnRhaW5zUmFuZ2UoZSl7cmV0dXJuIHRoaXMuYWRkcmVzc0luUmFuZ2UoZS5zdGFydCkmJnRo''@;'; put 'put ''aXMuYWRkcmVzc0luUmFuZ2UoZS5lbmQpfWludGVyc2VjdGlvbldpdGgoZSl7aWYodGhpcy5zaGVldCE9PWUuc3RhcnQuc2hlZXQpcmV0dXJuO2NvbnN0IHQ9TWF0aC5tYXgodGhpcy5zdGFydC5yb3csZS5zdGFydC5yb3cpLHI9TWF0aC5taW4odGhpcy5lbmQucm93LGUuZW5kLnJvdyksaT1N''@;'; put 'put ''YXRoLm1heCh0aGlzLnN0YXJ0LmNvbCxlLnN0YXJ0LmNvbCksbz1NYXRoLm1pbih0aGlzLmVuZC5jb2wsZS5lbmQuY29sKTtyZXR1cm4gdD5yfHxpPm8/dm9pZCAwOm5ldyBiYShCbyh0aGlzLnNoZWV0LGksdCksQm8odGhpcy5zaGVldCxvLHIpKX1pbmNsdWRlc1JvdyhlKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5zdGFydC5yb3c8ZSYmdGhpcy5lbmQucm93Pj1lfWluY2x1ZGVzQ29sdW1uKGUpe3JldHVybiB0aGlzLnN0YXJ0LmNvbDxlJiZ0aGlzLmVuZC5jb2w+PWV9c2hpZnRCeVJvd3MoZSl7dGhpcy5zdGFydC5yb3crPWUsdGhpcy5lbmQucm93Kz1lfWV4cGFuZEJ5Um93cyhlKXt0aGlzLmVuZC5y''@;'; put 'put ''b3crPWV9c2hpZnRCeUNvbHVtbnMoZSl7dGhpcy5zdGFydC5jb2wrPWUsdGhpcy5lbmQuY29sKz1lfXNoaWZ0ZWQoZSx0KXtyZXR1cm4gYmEuc3BhbkZyb20oQm8odGhpcy5zaGVldCx0aGlzLnN0YXJ0LmNvbCtlLHRoaXMuc3RhcnQucm93K3QpLHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgp''@;'; put 'put ''KX1leHBhbmRCeUNvbHVtbnMoZSl7dGhpcy5lbmQuY29sKz1lfW1vdmVUb1NoZWV0KGUpe3RoaXMuc3RhcnQuc2hlZXQ9ZSx0aGlzLmVuZC5zaGVldD1lfXJlbW92ZVNwYW4oZSl7ZSBpbnN0YW5jZW9mIHRwP3RoaXMucmVtb3ZlUm93cyhlLnN0YXJ0LGUuZW5kKTp0aGlzLnJlbW92ZUNvbHVt''@;'; put 'put ''bnMoZS5zdGFydCxlLmVuZCl9c2hvdWxkQmVSZW1vdmVkKCl7cmV0dXJuIHRoaXMud2lkdGgoKTw9MHx8dGhpcy5oZWlnaHQoKTw9MH1yYW5nZVdpdGhTYW1lV2lkdGgoZSx0KXtyZXR1cm4gYmEuc3BhbkZyb20oQm8odGhpcy5zaGVldCx0aGlzLnN0YXJ0LmNvbCxlKSx0aGlzLndpZHRoKCks''@;'; put 'put ''dCl9cmFuZ2VXaXRoU2FtZUhlaWdodChlLHQpe3JldHVybiBiYS5zcGFuRnJvbShCbyh0aGlzLnNoZWV0LGUsdGhpcy5zdGFydC5yb3cpLHQsdGhpcy5oZWlnaHQoKSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLnN0YXJ0LnNoZWV0fSwke3RoaXMuc3RhcnQuY29sfSwke3RoaXMuc3RhcnQu''@;'; put 'put ''cm93fSwke3RoaXMuZW5kLmNvbH0sJHt0aGlzLmVuZC5yb3d9YH13aWR0aCgpe3JldHVybiB0aGlzLmVuZC5jb2wtdGhpcy5zdGFydC5jb2wrMX1oZWlnaHQoKXtyZXR1cm4gdGhpcy5lbmQucm93LXRoaXMuc3RhcnQucm93KzF9c2l6ZSgpe3JldHVybiB0aGlzLmhlaWdodCgpKnRoaXMud2lk''@;'; put 'put ''dGgoKX1hcnJheU9mQWRkcmVzc2VzSW5SYW5nZSgpe2NvbnN0IGU9W107Zm9yKGxldCB0PTA7dDx0aGlzLmhlaWdodCgpOysrdCl7ZVt0XT1bXTtmb3IobGV0IHI9MDtyPHRoaXMud2lkdGgoKTsrK3Ipe2NvbnN0IGk9Qm8odGhpcy5zaGVldCx0aGlzLnN0YXJ0LmNvbCtyLHRoaXMuc3RhcnQu''@;'; put 'put ''cm93K3QpO2VbdF0ucHVzaChpKX19cmV0dXJuIGV9d2l0aFN0YXJ0KGUpe3JldHVybiBuZXcgYmEoZSx0aGlzLmVuZCl9c2FtZURpbWVuc2lvbnNBcyhlKXtyZXR1cm4gdGhpcy53aWR0aCgpPT09ZS53aWR0aCgpJiZ0aGlzLmhlaWdodCgpPT09ZS5oZWlnaHQoKX1zYW1lQXMoZSl7cmV0dXJu''@;'; put 'put ''IHVQKHRoaXMuc3RhcnQsZS5zdGFydCkmJnVQKHRoaXMuZW5kLGUuZW5kKX1hZGRyZXNzZXNBcnJheU1hcChlLHQpe2NvbnN0IHI9W107bGV0IGk9dGhpcy5zdGFydC5yb3c7Zm9yKDtpPD10aGlzLmVmZmVjdGl2ZUVuZFJvdyhlKTspe2xldCBvPXRoaXMuc3RhcnQuY29sO2NvbnN0IGE9W107''@;'; put 'put ''Zm9yKDtvPD10aGlzLmVmZmVjdGl2ZUVuZENvbHVtbihlKTspYS5wdXNoKHQoQm8odGhpcy5zdGFydC5zaGVldCxvLGkpKSksbysrO3IucHVzaChhKSxpKyt9cmV0dXJuIHJ9YWRkcmVzc2VzKGUpe2NvbnN0IHQ9W107bGV0IHI9dGhpcy5zdGFydC5yb3c7Y29uc3QgaT10aGlzLmVmZmVjdGl2''@;'; put 'put ''ZUVuZFJvdyhlKSxvPXRoaXMuZWZmZWN0aXZlRW5kQ29sdW1uKGUpO2Zvcig7cjw9aTspe2xldCBhPXRoaXMuc3RhcnQuY29sO2Zvcig7YTw9bzspdC5wdXNoKEJvKHRoaXMuc3RhcnQuc2hlZXQsYSxyKSksYSsrO3IrK31yZXR1cm4gdH0qYWRkcmVzc2VzV2l0aERpcmVjdGlvbihlLHQscil7''@;'; put 'put ''aWYoZT4wKWlmKHQ+MCl7bGV0IGk9dGhpcy5lZmZlY3RpdmVFbmRSb3cocik7Zm9yKDtpPj10aGlzLnN0YXJ0LnJvdzspe2xldCBvPXRoaXMuZWZmZWN0aXZlRW5kQ29sdW1uKHIpO2Zvcig7bz49dGhpcy5zdGFydC5jb2w7KXlpZWxkIEJvKHRoaXMuc3RhcnQuc2hlZXQsbyxpKSxvLT0xO2kt''@;'; put 'put ''PTF9fWVsc2V7bGV0IGk9dGhpcy5zdGFydC5yb3c7Zm9yKDtpPD10aGlzLmVmZmVjdGl2ZUVuZFJvdyhyKTspe2xldCBvPXRoaXMuZWZmZWN0aXZlRW5kQ29sdW1uKHIpO2Zvcig7bz49dGhpcy5zdGFydC5jb2w7KXlpZWxkIEJvKHRoaXMuc3RhcnQuc2hlZXQsbyxpKSxvLT0xO2krPTF9fWVs''@;'; put 'put ''c2UgaWYodD4wKXtsZXQgaT10aGlzLmVmZmVjdGl2ZUVuZFJvdyhyKTtmb3IoO2k+PXRoaXMuc3RhcnQucm93Oyl7bGV0IG89dGhpcy5zdGFydC5jb2w7Zm9yKDtvPD10aGlzLmVmZmVjdGl2ZUVuZENvbHVtbihyKTspeWllbGQgQm8odGhpcy5zdGFydC5zaGVldCxvLGkpLG8rPTE7aS09MX19''@;'; put 'put ''ZWxzZXtsZXQgaT10aGlzLnN0YXJ0LnJvdztmb3IoO2k8PXRoaXMuZWZmZWN0aXZlRW5kUm93KHIpOyl7bGV0IG89dGhpcy5zdGFydC5jb2w7Zm9yKDtvPD10aGlzLmVmZmVjdGl2ZUVuZENvbHVtbihyKTspeWllbGQgQm8odGhpcy5zdGFydC5zaGVldCxvLGkpLG8rPTE7aSs9MX19fWdldEFk''@;'; put 'put ''ZHJlc3MoZSx0KXtpZihlPDB8fHQ8MHx8dD50aGlzLmhlaWdodCgpLTF8fGU+dGhpcy53aWR0aCgpLTEpdGhyb3cgRXJyb3IoIkluZGV4IG91dCBvZiBib3VuZCIpO3JldHVybiBCbyh0aGlzLnN0YXJ0LnNoZWV0LHRoaXMuc3RhcnQuY29sK2UsdGhpcy5zdGFydC5yb3crdCl9ZXhjZWVkc1No''@;'; put 'put ''ZWV0U2l6ZUxpbWl0cyhlLHQpe3JldHVybiB0aGlzLmVuZC5jb2w+PWV8fHRoaXMuZW5kLnJvdz49dH1lZmZlY3RpdmVFbmRDb2x1bW4oZSl7cmV0dXJuIHRoaXMuZW5kLmNvbH1lZmZlY3RpdmVFbmRSb3coZSl7cmV0dXJuIHRoaXMuZW5kLnJvd31lZmZlY3RpdmVXaWR0aChlKXtyZXR1cm4g''@;'; put 'put ''dGhpcy53aWR0aCgpfWVmZmVjdGl2ZUhlaWdodChlKXtyZXR1cm4gdGhpcy5oZWlnaHQoKX1yZW1vdmVSb3dzKGUsdCl7aWYoIShlPnRoaXMuZW5kLnJvdykpe2lmKHQ8dGhpcy5zdGFydC5yb3cpcmV0dXJuIHRoaXMuc2hpZnRCeVJvd3MoLSh0LWUrMSkpO2U8PXRoaXMuc3RhcnQucm93JiYo''@;'; put 'put ''dGhpcy5zdGFydC5yb3c9ZSksdGhpcy5lbmQucm93LT1NYXRoLm1pbih0LHRoaXMuZW5kLnJvdyktZSsxfX1yZW1vdmVDb2x1bW5zKGUsdCl7aWYoIShlPnRoaXMuZW5kLmNvbCkpe2lmKHQ8dGhpcy5zdGFydC5jb2wpcmV0dXJuIHRoaXMuc2hpZnRCeUNvbHVtbnMoLSh0LWUrMSkpO2U8PXRo''@;'; put 'put ''aXMuc3RhcnQuY29sJiYodGhpcy5zdGFydC5jb2w9ZSksdGhpcy5lbmQuY29sLT1NYXRoLm1pbih0LHRoaXMuZW5kLmNvbCktZSsxfX19Y2xhc3MgczkgZXh0ZW5kcyBiYXtjb25zdHJ1Y3RvcihlLHQscil7c3VwZXIoQm8oZSx0LDApLEJvKGUscixOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkp''@;'; put 'put ''KX1zdGF0aWMgZnJvbUNvbHVtblJhbmdlKGUsdCl7Y29uc3Qgcj1lLnN0YXJ0LnRvU2ltcGxlQ29sdW1uQWRkcmVzcyh0KSxpPWUuZW5kLnRvU2ltcGxlQ29sdW1uQWRkcmVzcyh0KTtpZihyLnNoZWV0IT09aS5zaGVldCl0aHJvdyBuZXcgaVAoci5zaGVldCxpLnNoZWV0KTtyZXR1cm4gbmV3''@;'; put 'put ''IHM5KHIuc2hlZXQsci5jb2wsaS5jb2wpfXNob3VsZEJlUmVtb3ZlZCgpe3JldHVybiB0aGlzLndpZHRoKCk8PTB9c2hpZnRCeVJvd3MoZSl7fWV4cGFuZEJ5Um93cyhlKXt9c2hpZnRlZChlLHQpe3JldHVybiBuZXcgczkodGhpcy5zaGVldCx0aGlzLnN0YXJ0LmNvbCtlLHRoaXMuZW5kLmNv''@;'; put 'put ''bCtlKX1yYW5nZVdpdGhTYW1lSGVpZ2h0KGUsdCl7cmV0dXJuIG5ldyBzOSh0aGlzLnNoZWV0LGUsZSt0LTEpfWV4Y2VlZHNTaGVldFNpemVMaW1pdHMoZSx0KXtyZXR1cm4gdGhpcy5lbmQuY29sPj1lfWVmZmVjdGl2ZUVuZFJvdyhlKXtyZXR1cm4gdGhpcy5lZmZlY3RpdmVIZWlnaHQoZSkt''@;'; put 'put ''MX1lZmZlY3RpdmVIZWlnaHQoZSl7cmV0dXJuIGUuZ2V0U2hlZXRIZWlnaHQodGhpcy5zaGVldCl9cmVtb3ZlUm93cyhlLHQpe319Y2xhc3MgbDkgZXh0ZW5kcyBiYXtjb25zdHJ1Y3RvcihlLHQscil7c3VwZXIoQm8oZSwwLHQpLEJvKGUsTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHIpKX1z''@;'; put 'put ''dGF0aWMgZnJvbVJvd1JhbmdlQXN0KGUsdCl7Y29uc3Qgcj1lLnN0YXJ0LnRvU2ltcGxlUm93QWRkcmVzcyh0KSxpPWUuZW5kLnRvU2ltcGxlUm93QWRkcmVzcyh0KTtpZihyLnNoZWV0IT09aS5zaGVldCl0aHJvdyBuZXcgaVAoci5zaGVldCxpLnNoZWV0KTtyZXR1cm4gbmV3IGw5KHIuc2hl''@;'; put 'put ''ZXQsci5yb3csaS5yb3cpfXNob3VsZEJlUmVtb3ZlZCgpe3JldHVybiB0aGlzLmhlaWdodCgpPD0wfXNoaWZ0QnlDb2x1bW5zKGUpe31leHBhbmRCeUNvbHVtbnMoZSl7fXNoaWZ0ZWQoZSx0KXtyZXR1cm4gbmV3IGw5KHRoaXMuc2hlZXQsdGhpcy5zdGFydC5yb3crdCx0aGlzLmVuZC5yb3cr''@;'; put 'put ''dCl9cmFuZ2VXaXRoU2FtZVdpZHRoKGUsdCl7cmV0dXJuIG5ldyBsOSh0aGlzLnNoZWV0LGUsZSt0LTEpfWV4Y2VlZHNTaGVldFNpemVMaW1pdHMoZSx0KXtyZXR1cm4gdGhpcy5lbmQucm93Pj10fWVmZmVjdGl2ZUVuZENvbHVtbihlKXtyZXR1cm4gdGhpcy5lZmZlY3RpdmVXaWR0aChlKS0x''@;'; put 'put ''fWVmZmVjdGl2ZVdpZHRoKGUpe3JldHVybiBlLmdldFNoZWV0V2lkdGgodGhpcy5zaGVldCl9cmVtb3ZlQ29sdW1ucyhlLHQpe319Y2xhc3MgejZ7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMuZm9ybXVsYUFkZHJlc3M9ZSx0aGlzLmFycmF5c0ZsYWc9dCx0aGlzLmZvcm11bGFWZXJ0ZXg9cn19''@;'; put 'put ''Y29uc3Qgb2VuPS9eXHMqKFsrLV0/KVxzKigoW1xkXC4sXSsoZVsrLV0/XGQrKT8pXHMqKFtpal0/KXwoW2lqXSkpXHMqKChbKy1dKVxzKihbKy1dPylccyooKFtcZFwuLF0rKGVbKy1dP1xkKyk/KVxzKihbaWpdPyl8KFtpal0pKSk/JC87Y2xhc3MgYWVue2NvbnN0cnVjdG9yKGUsdCxyKXt0''@;'; put 'put ''aGlzLmNvbmZpZz1lLHRoaXMuZGF0ZVRpbWVIZWxwZXI9dCx0aGlzLm51bWJlckxpdGVyYWxzSGVscGVyPXIsdGhpcy5sdD0oaSxvKT0+dGhpcy5jb21wYXJlKGksbyk8MCx0aGlzLmxlcT0oaSxvKT0+dGhpcy5jb21wYXJlKGksbyk8PTAsdGhpcy5ndD0oaSxvKT0+dGhpcy5jb21wYXJlKGks''@;'; put 'put ''byk+MCx0aGlzLmdlcT0oaSxvKT0+dGhpcy5jb21wYXJlKGksbyk+PTAsdGhpcy5lcT0oaSxvKT0+MD09PXRoaXMuY29tcGFyZShpLG8pLHRoaXMubmVxPShpLG8pPT4wIT09dGhpcy5jb21wYXJlKGksbyksdGhpcy5wb3c9KGksbyk9Pk1hdGgucG93KExvKGkpLExvKG8pKSx0aGlzLmFkZFdp''@;'; put 'put ''dGhFcHNpbG9uUmF3PShpLG8pPT57Y29uc3QgYT1pK287cmV0dXJuIE1hdGguYWJzKGEpPHRoaXMuYWN0dWFsRXBzKk1hdGguYWJzKGkpPzA6YX0sdGhpcy5hZGRXaXRoRXBzaWxvbj0oaSxvKT0+e2NvbnN0IGE9Z1dlKGksbyk7cmV0dXJuIHRoaXMuRXh0ZW5kZWROdW1iZXJGYWN0b3J5KHRo''@;'; put 'put ''aXMuYWRkV2l0aEVwc2lsb25SYXcoTG8oaSksTG8obykpLGEpfSx0aGlzLnVuYXJ5TWludXM9aT0+V2dlKGksLUxvKGkpKSx0aGlzLnVuYXJ5UGx1cz1pPT5pLHRoaXMudW5hcnlQZXJjZW50PWk9Pm5ldyBScShMbyhpKS8xMDApLHRoaXMuY29uY2F0PShpLG8pPT5pLmNvbmNhdChvKSx0aGlz''@;'; put 'put ''Lm5vbnN0cmljdGFkZD0oaSxvKT0+aSBpbnN0YW5jZW9mIFB0P2k6byBpbnN0YW5jZW9mIFB0P286Im51bWJlciI9PXR5cGVvZiBpPyJudW1iZXIiPT10eXBlb2Ygbz90aGlzLmFkZFdpdGhFcHNpbG9uUmF3KGksbyk6aToibnVtYmVyIj09dHlwZW9mIG8/bzowLHRoaXMuc3VidHJhY3Q9KGks''@;'; put 'put ''byk9Pntjb25zdCBhPWdXZShpLG8pLGw9TG8oaSk7bGV0IGc9bC1MbyhvKTtyZXR1cm4gTWF0aC5hYnMoZyk8dGhpcy5hY3R1YWxFcHMqTWF0aC5hYnMobCkmJihnPTApLHRoaXMuRXh0ZW5kZWROdW1iZXJGYWN0b3J5KGcsYSl9LHRoaXMuZGl2aWRlPShpLG8pPT57Y29uc3QgYT1MbyhpKSxs''@;'; put 'put ''PUxvKG8pO2lmKDA9PT1sKXJldHVybiBuZXcgUHQodG4uRElWX0JZX1pFUk8pO3tjb25zdCB1PW1XZShpLG8pO3JldHVybiB0aGlzLkV4dGVuZGVkTnVtYmVyRmFjdG9yeShhL2wsdSl9fSx0aGlzLm11bHRpcGx5PShpLG8pPT57Y29uc3QgYT1tV2UoaSxvKTtyZXR1cm4gdGhpcy5FeHRlbmRl''@;'; put 'put ''ZE51bWJlckZhY3RvcnkoTG8oaSkqTG8obyksYSl9LHRoaXMubWFueVRvRXhhY3RDb21wbGV4PWk9Pntjb25zdCBvPVtdO2Zvcihjb25zdCBhIG9mIGkpe2lmKGEgaW5zdGFuY2VvZiBQdClyZXR1cm4gYTtpZihjYyhhKXx8InN0cmluZyI9PXR5cGVvZiBhKXtjb25zdCBsPXRoaXMuY29lcmNl''@;'; put 'put ''U2NhbGFyVG9Db21wbGV4KGEpO2wgaW5zdGFuY2VvZiBQdHx8by5wdXNoKGwpfX1yZXR1cm4gb30sdGhpcy5jb2VyY2VOdW1iZXJzRXhhY3RSYW5nZXM9aT0+dGhpcy5tYW55VG9OdW1iZXJzKGksdGhpcy5tYW55VG9FeGFjdE51bWJlcnMpLHRoaXMuY29lcmNlTnVtYmVyc0NvZXJjZVJhbmdl''@;'; put 'put ''c0Ryb3BOdWxscz1pPT50aGlzLm1hbnlUb051bWJlcnMoaSx0aGlzLm1hbnlUb0NvZXJjZWROdW1iZXJzRHJvcE51bGxzKSx0aGlzLm1hbnlUb0V4YWN0TnVtYmVycz1pPT57Y29uc3Qgbz1bXTtmb3IoY29uc3QgYSBvZiBpKXtpZihhIGluc3RhbmNlb2YgUHQpcmV0dXJuIGE7Y2MoYSkmJm8u''@;'; put 'put ''cHVzaChMbyhhKSl9cmV0dXJuIG99LHRoaXMubWFueVRvT25seU51bWJlcnNEcm9wTnVsbHM9aT0+e2NvbnN0IG89W107Zm9yKGNvbnN0IGEgb2YgaSl7aWYoYSBpbnN0YW5jZW9mIFB0KXJldHVybiBhO2lmKGNjKGEpKW8ucHVzaChMbyhhKSk7ZWxzZSBpZihhIT09bGwpcmV0dXJuIG5ldyBQ''@;'; put 'put ''dCh0bi5WQUxVRSxkci5OdW1iZXJFeHBlY3RlZCl9cmV0dXJuIG99LHRoaXMubWFueVRvQ29lcmNlZE51bWJlcnNEcm9wTnVsbHM9aT0+e2NvbnN0IG89W107Zm9yKGNvbnN0IGEgb2YgaSl7aWYoYSBpbnN0YW5jZW9mIFB0KXJldHVybiBhO2lmKGE9PT1sbCljb250aW51ZTtjb25zdCBsPXRo''@;'; put 'put ''aXMuY29lcmNlU2NhbGFyVG9OdW1iZXJPckVycm9yKGEpO2NjKGwpJiZvLnB1c2goTG8obCkpfXJldHVybiBvfSx0aGlzLmNvbGxhdG9yPWZ1bmN0aW9uIHRlbihuKXtyZXR1cm4gbmV3IEludGwuQ29sbGF0b3Iobi5sb2NhbGVMYW5nLHtzZW5zaXRpdml0eTpuLmNhc2VTZW5zaXRpdmU/bi5h''@;'; put 'put ''Y2NlbnRTZW5zaXRpdmU/InZhcmlhbnQiOiJjYXNlIjpuLmFjY2VudFNlbnNpdGl2ZT8iYWNjZW50IjoiYmFzZSIsY2FzZUZpcnN0Om4uY2FzZUZpcnN0LGlnbm9yZVB1bmN0dWF0aW9uOm4uaWdub3JlUHVuY3R1YXRpb259KX0oZSksdGhpcy5hY3R1YWxFcHM9ZS5zbWFydFJvdW5kaW5nP2Uu''@;'; put 'put ''cHJlY2lzaW9uRXBzaWxvbjowfWVxTWF0Y2hlckZ1bmN0aW9uKGUpe2NvbnN0IHQ9dGhpcy5idWlsZFJlZ2V4KGUpO3JldHVybiByPT4ic3RyaW5nIj09dHlwZW9mIHImJnQudGVzdCh0aGlzLm5vcm1hbGl6ZVN0cmluZyhyKSl9bmVxTWF0Y2hlckZ1bmN0aW9uKGUpe2NvbnN0IHQ9dGhpcy5i''@;'; put 'put ''dWlsZFJlZ2V4KGUpO3JldHVybiByPT4ic3RyaW5nIiE9dHlwZW9mIHJ8fCF0LnRlc3QodGhpcy5ub3JtYWxpemVTdHJpbmcocikpfXNlYXJjaFN0cmluZyhlLHQpe3ZhciByO2NvbnN0IG89dGhpcy5idWlsZFJlZ2V4KGUsITEpLmV4ZWModCk7cmV0dXJuIG51bGwhPT0ocj1vPy5pbmRleCkm''@;'; put 'put ''JnZvaWQgMCE9PXI/cjotMX1yZXF1aXJlc1JlZ2V4KGUpe2lmKCF0aGlzLmNvbmZpZy51c2VSZWd1bGFyRXhwcmVzc2lvbnMmJiF0aGlzLmNvbmZpZy51c2VXaWxkY2FyZHMpcmV0dXJuIXRoaXMuY29uZmlnLm1hdGNoV2hvbGVDZWxsO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtjb25z''@;'; put 'put ''dCByPWUuY2hhckF0KHQpO2lmKGRQKHIpfHx0aGlzLmNvbmZpZy51c2VSZWd1bGFyRXhwcmVzc2lvbnMmJmhQKHIpKXJldHVybiEwfXJldHVybiExfWZsb2F0Q21wKGUsdCl7Y29uc3Qgcj1MbyhlKSxpPUxvKHQpLG89MSt0aGlzLmFjdHVhbEVwcztyZXR1cm4gaT49MCYmcipvPj1pJiZyPD1p''@;'; put 'put ''Km98fGk8PTAmJnIqbzw9aSYmcj49aSpvPzA6cj5pPzE6LTF9Y29lcmNlU2NhbGFyVG9OdW1iZXJPckVycm9yKGUpe3ZhciB0O3JldHVybiBlIGluc3RhbmNlb2YgUHQ/ZTpudWxsIT09KHQ9dGhpcy5jb2VyY2VUb01heWJlTnVtYmVyKGUpKSYmdm9pZCAwIT09dD90Om5ldyBQdCh0bi5WQUxV''@;'; put 'put ''RSxkci5OdW1iZXJDb2VyY2lvbil9Y29lcmNlVG9NYXliZU51bWJlcihlKXt2YXIgdDtyZXR1cm4gbnVsbCE9PSh0PXRoaXMuY29lcmNlTm9uRGF0ZVNjYWxhclRvTWF5YmVOdW1iZXIoZSkpJiZ2b2lkIDAhPT10P3Q6InN0cmluZyI9PXR5cGVvZiBlP3RoaXMuZGF0ZVRpbWVIZWxwZXIuZGF0''@;'; put 'put ''ZVN0cmluZ1RvRGF0ZU51bWJlcihlKTp2b2lkIDB9Y29lcmNlTm9uRGF0ZVNjYWxhclRvTWF5YmVOdW1iZXIoZSl7aWYoZT09PWxsKXJldHVybiAwO2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoIiI9PT1lKXJldHVybiAwO2NvbnN0IHQ9dGhpcy5jb2VyY2VTdHJpbmdUb01heWJlUGVyY2Vu''@;'; put 'put ''dE51bWJlcihlKTtpZih2b2lkIDAhPT10KXJldHVybiB0O2NvbnN0IHI9dGhpcy5jb2VyY2VTdHJpbmdUb01heWJlQ3VycmVuY3lOdW1iZXIoZSk7cmV0dXJuIHZvaWQgMCE9PXI/cjp0aGlzLm51bWJlckxpdGVyYWxzSGVscGVyLm51bWVyaWNTdHJpbmdUb01heWJlTnVtYmVyKGUudHJpbSgp''@;'; put 'put ''KX1yZXR1cm4gY2MoZSk/ZToiYm9vbGVhbiI9PXR5cGVvZiBlP051bWJlcihlKTp2b2lkIDB9Y29lcmNlU3RyaW5nVG9NYXliZVBlcmNlbnROdW1iZXIoZSl7Y29uc3QgdD1lLnRyaW0oKTtpZih0LmVuZHNXaXRoKCIlIikpe2NvbnN0IHI9dC5zbGljZSgwLHQubGVuZ3RoLTEpLnRyaW0oKSxp''@;'; put 'put ''PXRoaXMubnVtYmVyTGl0ZXJhbHNIZWxwZXIubnVtZXJpY1N0cmluZ1RvTWF5YmVOdW1iZXIocik7aWYodm9pZCAwIT09aSlyZXR1cm4gbmV3IFJxKGkvMTAwKX19Y29lcmNlU3RyaW5nVG9NYXliZUN1cnJlbmN5TnVtYmVyKGUpe2NvbnN0IHQ9dGhpcy5jdXJyZW5jeU1hdGNoZXIoZS50cmlt''@;'; put 'put ''KCkpO2lmKHZvaWQgMCE9PXQpe2NvbnN0W3IsaV09dCxvPXRoaXMubnVtYmVyTGl0ZXJhbHNIZWxwZXIubnVtZXJpY1N0cmluZ1RvTWF5YmVOdW1iZXIoaSk7aWYodm9pZCAwIT09bylyZXR1cm4gbmV3IFpnZShvLHIpfX1jdXJyZW5jeU1hdGNoZXIoZSl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5j''@;'; put 'put ''b25maWcuY3VycmVuY3lTeW1ib2wpe2lmKGUuc3RhcnRzV2l0aCh0KSlyZXR1cm5bdCxlLnNsaWNlKHQubGVuZ3RoKS50cmltKCldO2lmKGUuZW5kc1dpdGgodCkpcmV0dXJuW3QsZS5zbGljZSgwLGUubGVuZ3RoLXQubGVuZ3RoKS50cmltKCldfX1jb2VyY2VDb21wbGV4RXhhY3RSYW5nZXMo''@;'; put 'put ''ZSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgaSBvZiBlKWlmKGkgaW5zdGFuY2VvZiBsYSl0LnB1c2goaSk7ZWxzZSBpZihpIT09bGwpe2NvbnN0IG89dGhpcy5jb2VyY2VTY2FsYXJUb0NvbXBsZXgoaSk7aWYobyBpbnN0YW5jZW9mIFB0KXJldHVybiBvO3QucHVzaChvKX1jb25zdCByPVtdO2Zv''@;'; put 'put ''cihjb25zdCBpIG9mIHQpaWYoaSBpbnN0YW5jZW9mIGxhKXtjb25zdCBvPXRoaXMubWFueVRvRXhhY3RDb21wbGV4KGkudmFsdWVzRnJvbVRvcExlZnRDb3JuZXIoKSk7aWYobyBpbnN0YW5jZW9mIFB0KXJldHVybiBvO3IucHVzaCguLi5vKX1lbHNlIHIucHVzaChpKTtyZXR1cm4gcn1jb2Vy''@;'; put 'put ''Y2VTY2FsYXJUb0NvbXBsZXgoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBQdD9lOmU9PT1sbD9bMCwwXTpjYyhlKT9bTG8oZSksMF06InN0cmluZyI9PXR5cGVvZiBlP3RoaXMuY29lcmNlU3RyaW5nVG9Db21wbGV4KGUpOm5ldyBQdCh0bi5OVU0sZHIuQ29tcGxleE51bWJlckV4cGVjdGVkKX1F''@;'; put 'put ''eHRlbmRlZE51bWJlckZhY3RvcnkoZSx0KXtjb25zdHt0eXBlOnIsZm9ybWF0Oml9PXQ7c3dpdGNoKHIpe2Nhc2Ugb2EuTlVNQkVSX1JBVzpyZXR1cm4gZTtjYXNlIG9hLk5VTUJFUl9DVVJSRU5DWTpyZXR1cm4gbmV3IFpnZShlLGk/P3RoaXMuY29uZmlnLmN1cnJlbmN5U3ltYm9sWzBdKTtj''@;'; put 'put ''YXNlIG9hLk5VTUJFUl9EQVRFOnJldHVybiBuZXcgWWdlKGUsaSk7Y2FzZSBvYS5OVU1CRVJfREFURVRJTUU6cmV0dXJuIG5ldyAkZ2UoZSxpKTtjYXNlIG9hLk5VTUJFUl9USU1FOnJldHVybiBuZXcgR2dlKGUsaSk7Y2FzZSBvYS5OVU1CRVJfUEVSQ0VOVDpyZXR1cm4gbmV3IFJxKGUsaSl9''@;'; put 'put ''fWJ1aWxkUmVnZXgoZSx0PSEwKXtlPXRoaXMubm9ybWFsaXplU3RyaW5nKGUpO2xldCByLGk9dGhpcy5jb25maWcudXNlV2lsZGNhcmRzLG89dGhpcy5jb25maWcudXNlUmVndWxhckV4cHJlc3Npb25zO2lmKG8pdHJ5e1JlZ0V4cChlKX1jYXRjaHtvPSExLGk9ITF9cmV0dXJuIHI9bz9mdW5j''@;'; put 'put ''dGlvbiB1ZW4obixlKXtsZXQgdD0iIjtmb3IobGV0IHI9MDtyPG4ubGVuZ3RoO3IrKyl7Y29uc3QgaT1uLmNoYXJBdChyKTtkUChpKXx8aFAoaSl8fGU/dCs9aTp0Kz1pLnRvTG93ZXJDYXNlKCl9cmV0dXJuIHR9KGUsdGhpcy5jb25maWcuY2FzZVNlbnNpdGl2ZSk6aT9mdW5jdGlvbiBsZW4o''@;'; put 'put ''bixlKXtsZXQgdD0iIjtmb3IobGV0IHI9MDtyPG4ubGVuZ3RoO3IrKyl7Y29uc3QgaT1uLmNoYXJBdChyKTtpZigifiI9PT1pKXtpZihyPT1uLmxlbmd0aC0xKXt0Kz0ifiI7Y29udGludWV9Y29uc3Qgbz1uLmNoYXJBdChyKzEpO2RQKG8pfHxoUChvKT8odCs9IlxcIitvLHIrKyk6KHQrPW8s''@;'; put 'put ''cisrKX1lbHNlIGRQKGkpP3QrPSIuIitpOmhQKGkpP3QrPSJcXCIraTp0Kz1lP2k6aS50b0xvd2VyQ2FzZSgpfXJldHVybiB0fShlLHRoaXMuY29uZmlnLmNhc2VTZW5zaXRpdmUpOmZ1bmN0aW9uIGNlbihuLGUpe2xldCB0PSIiO2ZvcihsZXQgcj0wO3I8bi5sZW5ndGg7cisrKXtjb25zdCBp''@;'; put 'put ''PW4uY2hhckF0KHIpO2RQKGkpfHxoUChpKT90Kz0iXFwiK2k6dCs9ZT9pOmkudG9Mb3dlckNhc2UoKX1yZXR1cm4gdH0oZSx0aGlzLmNvbmZpZy5jYXNlU2Vuc2l0aXZlKSx0aGlzLmNvbmZpZy5tYXRjaFdob2xlQ2VsbCYmdD9SZWdFeHAoIl4oIityKyIpJCIpOlJlZ0V4cChyKX1ub3JtYWxp''@;'; put 'put ''emVTdHJpbmcoZSl7cmV0dXJuIHRoaXMuY29uZmlnLmNhc2VTZW5zaXRpdmV8fChlPWUudG9Mb3dlckNhc2UoKSksdGhpcy5jb25maWcuYWNjZW50U2Vuc2l0aXZlfHwoZT12V2UoZSwibmZkIikucmVwbGFjZSgvW1x1MDMwMC1cdTAzNmZdL2csIiIpKSxlfWNvbXBhcmUoZSx0KXtpZigic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIGV8fCJzdHJpbmciPT10eXBlb2YgdCl7Y29uc3Qgcj0ic3RyaW5nIj09dHlwZW9mIGU/dGhpcy5kYXRlVGltZUhlbHBlci5kYXRlU3RyaW5nVG9EYXRlTnVtYmVyKGUpOmUsaT0ic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5kYXRlVGltZUhlbHBlci5kYXRlU3RyaW5nVG9E''@;'; put 'put ''YXRlTnVtYmVyKHQpOnQ7aWYoY2MocikmJmNjKGkpKXJldHVybiB0aGlzLmZsb2F0Q21wKHIsaSl9cmV0dXJuIGU9PT1sbD9lPXVXZSh0KTp0PT09bGwmJih0PXVXZShlKSksInN0cmluZyI9PXR5cGVvZiBlJiYic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5zdHJpbmdDbXAoZSx0KToiYm9vbGVh''@;'; put 'put ''biI9PXR5cGVvZiBlJiYiYm9vbGVhbiI9PXR5cGVvZiB0P2hXZSh0bWUoZSksdG1lKHQpKTpjYyhlKSYmY2ModCk/dGhpcy5mbG9hdENtcChlLHQpOmU9PT1sbCYmdD09PWxsPzA6aFdlKG9XZShGcShlKSksb1dlKEZxKHQpKSl9c3RyaW5nQ21wKGUsdCl7cmV0dXJuIHRoaXMuY29sbGF0b3Iu''@;'; put 'put ''Y29tcGFyZShlLHQpfW1hbnlUb051bWJlcnMoZSx0KXtjb25zdCByPVtdO2Zvcihjb25zdCBvIG9mIGUpaWYobyBpbnN0YW5jZW9mIGxhKXIucHVzaChvKTtlbHNle2NvbnN0IGE9TG8odGhpcy5jb2VyY2VTY2FsYXJUb051bWJlck9yRXJyb3IobykpO2lmKGEgaW5zdGFuY2VvZiBQdClyZXR1''@;'; put 'put ''cm4gYTtyLnB1c2goYSl9Y29uc3QgaT1bXTtmb3IoY29uc3QgbyBvZiByKWlmKG8gaW5zdGFuY2VvZiBsYSl7Y29uc3QgYT10KG8udmFsdWVzRnJvbVRvcExlZnRDb3JuZXIoKSk7aWYoYSBpbnN0YW5jZW9mIFB0KXJldHVybiBhO2kucHVzaCguLi5hKX1lbHNlIGkucHVzaChvKTtyZXR1cm4g''@;'; put 'put ''aX1jb2VyY2VTdHJpbmdUb0NvbXBsZXgoZSl7Y29uc3QgdD1vZW4uZXhlYyhlKTtpZihudWxsPT09dClyZXR1cm4gbmV3IFB0KHRuLk5VTSxkci5Db21wbGV4TnVtYmVyRXhwZWN0ZWQpO2xldCByLGk7cmV0dXJuIHI9dm9pZCAwIT09dFs2XT8iLSI9PT10WzFdP1swLC0xXTpbMCwxXTp0aGlz''@;'; put 'put ''LnBhcnNlQ29tcGxleFRva2VuKHRbMV0rdFszXSx0WzVdKSxyIGluc3RhbmNlb2YgUHR8fHZvaWQgMD09PXRbOF0/cjooaT12b2lkIDAhPT10WzE0XT8iLSI9PT10WzldP1swLC0xXTpbMCwxXTp0aGlzLnBhcnNlQ29tcGxleFRva2VuKHRbOV0rdFsxMV0sdFsxM10pLGkgaW5zdGFuY2VvZiBQ''@;'; put 'put ''dD9pOiIiIT09dFs1XXx8IiI9PT10WzEzXT9uZXcgUHQodG4uTlVNLGRyLkNvbXBsZXhOdW1iZXJFeHBlY3RlZCk6IisiPT09dFs4XT9bclswXStpWzBdLHJbMV0raVsxXV06W3JbMF0taVswXSxyWzFdLWlbMV1dKX1wYXJzZUNvbXBsZXhUb2tlbihlLHQpe2NvbnN0IHI9TG8odGhpcy5jb2Vy''@;'; put 'put ''Y2VOb25EYXRlU2NhbGFyVG9NYXliZU51bWJlcihlKSk7cmV0dXJuIHZvaWQgMD09PXI/bmV3IFB0KHRuLk5VTSxkci5Db21wbGV4TnVtYmVyRXhwZWN0ZWQpOiIiPT09dD9bciwwXTpbMCxyXX19ZnVuY3Rpb24gTWgoW24sZV0sdCl7aWYoIWlzRmluaXRlKG4pfHwhaXNGaW5pdGUoZSkpcmV0''@;'; put 'put ''dXJuIG5ldyBQdCh0bi5OVU0sZHIuTmFOKTtpZih0PXQ/PyJpIiwwPT09ZSlyZXR1cm5gJHtufWA7Y29uc3Qgcj1gJHstMT09PWV8fDE9PT1lPyIiOk1hdGguYWJzKGUpfSR7dH1gO3JldHVybiAwPT09bj9gJHtlPDA/Ii0iOiIifSR7cn1gOmAke259JHtlPDA/Ii0iOiIrIn0ke3J9YH1mdW5j''@;'; put 'put ''dGlvbiBjV2Uobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBsYT9uOmxhLmZyb21TY2FsYXIobil9ZnVuY3Rpb24gdG1lKG4pe3JldHVybiBOdW1iZXIobil9ZnVuY3Rpb24gdVdlKG4pe3JldHVybiJzdHJpbmciPT10eXBlb2Ygbj8iIjpjYyhuKT8wOiJib29sZWFuIiE9dHlwZW9mIG4mJmxsfWZ1''@;'; put 'put ''bmN0aW9uIGRXZShuKXtpZihuIGluc3RhbmNlb2YgUHR8fCJib29sZWFuIj09dHlwZW9mIG4pcmV0dXJuIG47aWYobj09PWxsKXJldHVybiExO2lmKGNjKG4pKXJldHVybiAwIT09TG8obik7e2NvbnN0IGU9bi50b1VwcGVyQ2FzZSgpO3JldHVybiJUUlVFIj09PWV8fCJGQUxTRSIhPT1lJiYi''@;'; put 'put ''IiE9PWUmJnZvaWQgMH19ZnVuY3Rpb24gbm1lKG4pe3JldHVybiBuIGluc3RhbmNlb2YgUHR8fCJzdHJpbmciPT10eXBlb2Ygbj9uOm49PT1sbD8iIjpjYyhuKT9MbyhuKS50b1N0cmluZygpOm4/IlRSVUUiOiJGQUxTRSJ9ZnVuY3Rpb24gcm1lKG4pe3JldHVybiBuPT09bGw/MDpufWZ1bmN0''@;'; put 'put ''aW9uIGhXZShuLGUpe2NvbnN0IHQ9TG8obikscj1MbyhlKTtyZXR1cm4gdD5yPzE6dDxyPy0xOjB9ZnVuY3Rpb24gZldlKG4pe3JldHVybiBpc05hTihuKXx8bj09PTEvMHx8bj09PS0xLzB9ZnVuY3Rpb24gcFdlKG4pe3JldHVybiAwPT09bj8wOm59ZnVuY3Rpb24gZFAobil7cmV0dXJuWyIq''@;'; put 'put ''IiwiPyJdLmluY2x1ZGVzKG4pfWNvbnN0IHNlbj1bInsiLCJ9IiwiWyIsIl0iLCIoIiwiKSIsIjwiLCI+IiwiPSIsIi4iLCIrIiwiLSIsIiwiLCJcXCIsIiQiLCJeIiwiISJdO2Z1bmN0aW9uIGhQKG4pe3JldHVybiBzZW4uaW5jbHVkZXMobil9ZnVuY3Rpb24gZ1dlKG4sZSl7Y29uc3R7dHlw''@;'; put 'put ''ZTp0LGZvcm1hdDpyfT1JcShuKSx7dHlwZTppLGZvcm1hdDpvfT1JcShlKTtpZih0PT09b2EuTlVNQkVSX1JBVylyZXR1cm57dHlwZTppLGZvcm1hdDpvfTtpZihpPT09b2EuTlVNQkVSX1JBVylyZXR1cm57dHlwZTp0LGZvcm1hdDpyfTtpZighKHQhPT1vYS5OVU1CRVJfREFURVRJTUUmJnQh''@;'; put 'put ''PT1vYS5OVU1CRVJfREFURXx8aSE9PW9hLk5VTUJFUl9EQVRFVElNRSYmaSE9PW9hLk5VTUJFUl9EQVRFKSlyZXR1cm57dHlwZTpvYS5OVU1CRVJfUkFXfTtpZih0PT09b2EuTlVNQkVSX1RJTUUpe2lmKGk9PT1vYS5OVU1CRVJfREFURSlyZXR1cm57dHlwZTpvYS5OVU1CRVJfREFURVRJTUUs''@;'; put 'put ''Zm9ybWF0OmAke299ICR7cn1gfTtpZihpPT09b2EuTlVNQkVSX0RBVEVUSU1FKXJldHVybnt0eXBlOm9hLk5VTUJFUl9EQVRFVElNRSxmb3JtYXQ6b319aWYoaT09PW9hLk5VTUJFUl9USU1FKXtpZih0PT09b2EuTlVNQkVSX0RBVEUpcmV0dXJue3R5cGU6b2EuTlVNQkVSX0RBVEVUSU1FLGZv''@;'; put 'put ''cm1hdDpgJHtyfSAke299YH07aWYodD09PW9hLk5VTUJFUl9EQVRFVElNRSlyZXR1cm57dHlwZTpvYS5OVU1CRVJfREFURVRJTUUsZm9ybWF0OnJ9fXJldHVybnt0eXBlOnQsZm9ybWF0OnJ9fWZ1bmN0aW9uIG1XZShuLGUpe2xldHt0eXBlOnQsZm9ybWF0OnJ9PUlxKG4pLHt0eXBlOmksZm9y''@;'; put 'put ''bWF0Om99PUlxKGUpO3JldHVybiB0PT09b2EuTlVNQkVSX1BFUkNFTlQmJih0PW9hLk5VTUJFUl9SQVcscj12b2lkIDApLGk9PT1vYS5OVU1CRVJfUEVSQ0VOVCYmKGk9b2EuTlVNQkVSX1JBVyxvPXZvaWQgMCksdD09PW9hLk5VTUJFUl9SQVc/e3R5cGU6aSxmb3JtYXQ6b306aT09PW9hLk5V''@;'; put 'put ''TUJFUl9SQVc/e3R5cGU6dCxmb3JtYXQ6cn06e3R5cGU6b2EuTlVNQkVSX1JBV319ZnVuY3Rpb24gZlAobil7cmV0dXJuIHZXZShuLnRvTG93ZXJDYXNlKCksIm5mZCIpLnJlcGxhY2UoL1tcdTAzMDAtXHUwMzZmXS9nLCIiKX1mdW5jdGlvbiBQcShuLGUpe3ZhciB0O2lmKG4uaXNBZEhvYygp''@;'; put 'put ''KXJldHVybiBudWxsPT09KHQ9bi5kYXRhWzBdKXx8dm9pZCAwPT09dD92b2lkIDA6dFswXTtjb25zdCByPW4ucmFuZ2U7aWYoZS5mb3JtdWxhQWRkcmVzcy5zaGVldD09PXIuc2hlZXQpaWYoMT09PXIud2lkdGgoKSl7Y29uc3QgaT1lLmZvcm11bGFBZGRyZXNzLnJvdy1yLnN0YXJ0LnJvdztp''@;'; put 'put ''ZihpPj0wJiZpPHIuaGVpZ2h0KCkpcmV0dXJuIG4uZGF0YVtpXVswXX1lbHNlIGlmKDE9PT1yLmhlaWdodCgpKXtjb25zdCBpPWUuZm9ybXVsYUFkZHJlc3MuY29sLXIuc3RhcnQuY29sO2lmKGk+PTAmJmk8ci53aWR0aCgpKXJldHVybiBuLmRhdGFbMF1baV19fWZ1bmN0aW9uIHZXZShuLGUp''@;'; put 'put ''e3JldHVybiBuLm5vcm1hbGl6ZShlLnRvVXBwZXJDYXNlKCkpfXZhciBldD1mdW5jdGlvbihuKXtyZXR1cm4gbi5TVFJJTkc9IlNUUklORyIsbi5OVU1CRVI9Ik5VTUJFUiIsbi5CT09MRUFOPSJCT09MRUFOIixuLlNDQUxBUj0iU0NBTEFSIixuLk5PRVJST1I9Ik5PRVJST1IiLG4uUkFOR0U9''@;'; put 'put ''IlJBTkdFIixuLklOVEVHRVI9IklOVEVHRVIiLG4uQ09NUExFWD0iQ09NUExFWCIsbi5BTlk9IkFOWSIsbn0oZXR8fHt9KTtjbGFzcyBCc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmNvZXJjZVNjYWxhclRvTnVtYmVyT3JFcnJvcj10PT50aGlzLmFyaXRobWV0aWNIZWxwZXIuY29lcmNlU2NhbGFy''@;'; put 'put ''VG9OdW1iZXJPckVycm9yKHQpLHRoaXMucnVuRnVuY3Rpb249KHQscixpLG8pPT57Y29uc3QgYT10aGlzLmV2YWx1YXRlQXJndW1lbnRzKHQscixpKSxsPWEubWFwKChbdmUsTWVdKT0+dmUpLHU9YS5tYXAoKFt2ZSxNZV0pPT5NZSksZz10aGlzLmJ1aWxkTWV0YWRhdGFGb3JFYWNoQXJndW1l''@;'; put 'put ''bnRWYWx1ZShsLmxlbmd0aCxpKSxFPXIuYXJyYXlzRmxhZyYmIWkudmVjdG9yaXphdGlvbkZvcmJpZGRlbjtpZighdGhpcy5pc051bWJlck9mQXJndW1lbnRWYWx1ZXNWYWxpZChnLGwubGVuZ3RoKSlyZXR1cm4gbmV3IFB0KHRuLk5BLGRyLldyb25nQXJnTnVtYmVyKTtjb25zdFtPLFpdPUU/''@;'; put 'put ''dGhpcy5jYWxjdWxhdGVTaXplT2ZWZWN0b3JpemVkUmVzdWx0QXJyYXkobCxnKTpbMSwxXTtpZigxPT09TyYmMT09PVope2NvbnN0IHZlPXRoaXMudmVjdG9yaXplQW5kQnJvYWRjYXN0QXJndW1lbnRzSWZOZWNlc3NhcnkoRSxsLGcsMCwwKTtyZXR1cm4gdGhpcy5jYWxjdWxhdGVTaW5nbGVD''@;'; put 'put ''ZWxsT2ZSZXN1bHRBcnJheShyLHZlLGcsdSxvLGkucmV0dXJuTnVtYmVyVHlwZSl9Y29uc3QgZWU9Wy4uLkFycmF5KE8pLmtleXMoKV0ubWFwKHZlPT5bLi4uQXJyYXkoWikua2V5cygpXS5tYXAoTWU9Pntjb25zdCBIZT10aGlzLnZlY3Rvcml6ZUFuZEJyb2FkY2FzdEFyZ3VtZW50c0lmTmVj''@;'; put 'put ''ZXNzYXJ5KEUsbCxnLHZlLE1lKSxXZT10aGlzLmNhbGN1bGF0ZVNpbmdsZUNlbGxPZlJlc3VsdEFycmF5KHIsSGUsZyx1LG8saS5yZXR1cm5OdW1iZXJUeXBlKTtpZihXZSBpbnN0YW5jZW9mIGxhKXRocm93IG5ldyBFcnJvcigiRnVuY3Rpb24gcmV0dXJuaW5nIGFycmF5IGNhbm5vdCBiZSB2''@;'; put 'put ''ZWN0b3JpemVkLiIpO3JldHVybiBXZX0pKTtyZXR1cm4gbGEub25seVZhbHVlcyhlZSl9LHRoaXMucnVuRnVuY3Rpb25XaXRoUmVmZXJlbmNlQXJndW1lbnQ9KHQscixpLG8sYSxsPSgpPT5uZXcgUHQodG4uTkEsZHIuQ2VsbFJlZkV4cGVjdGVkKSk9PntpZigwPT09dC5sZW5ndGgpcmV0dXJu''@;'; put 'put ''IHRoaXMucmV0dXJuTnVtYmVyV3JhcHBlcihvKCksaS5yZXR1cm5OdW1iZXJUeXBlKTtpZih0Lmxlbmd0aD4xKXJldHVybiBuZXcgUHQodG4uTkEsZHIuV3JvbmdBcmdOdW1iZXIpO2xldCBnLHU9dFswXTtmb3IoO3UudHlwZT09PXJuLlBBUkVOVEhFU0lTOyl1PXUuZXhwcmVzc2lvbjtpZih1''@;'; put 'put ''LnR5cGU9PT1ybi5DRUxMX1JFRkVSRU5DRSlnPXUucmVmZXJlbmNlLnRvU2ltcGxlQ2VsbEFkZHJlc3Moci5mb3JtdWxhQWRkcmVzcyk7ZWxzZSBpZih1LnR5cGU9PT1ybi5DRUxMX1JBTkdFfHx1LnR5cGU9PT1ybi5DT0xVTU5fUkFOR0V8fHUudHlwZT09PXJuLlJPV19SQU5HRSl0cnl7Zz1i''@;'; put 'put ''YS5mcm9tQXN0KHUsci5mb3JtdWxhQWRkcmVzcykuc3RhcnR9Y2F0Y2h7cmV0dXJuIG5ldyBQdCh0bi5SRUYsZHIuQ2VsbFJlZkV4cGVjdGVkKX1yZXR1cm4gdm9pZCAwIT09Zz90aGlzLnJldHVybk51bWJlcldyYXBwZXIoYShnKSxpLnJldHVybk51bWJlclR5cGUpOnRoaXMucnVuRnVuY3Rp''@;'; put 'put ''b24odCxyLGksbCl9LHRoaXMuaW50ZXJwcmV0ZXI9ZSx0aGlzLmRlcGVuZGVuY3lHcmFwaD1lLmRlcGVuZGVuY3lHcmFwaCx0aGlzLmNvbHVtblNlYXJjaD1lLmNvbHVtblNlYXJjaCx0aGlzLmNvbmZpZz1lLmNvbmZpZyx0aGlzLnNlcmlhbGl6YXRpb249ZS5zZXJpYWxpemF0aW9uLHRoaXMu''@;'; put 'put ''YXJyYXlTaXplUHJlZGljdG9yPWUuYXJyYXlTaXplUHJlZGljdG9yLHRoaXMuZGF0ZVRpbWVIZWxwZXI9ZS5kYXRlVGltZUhlbHBlcix0aGlzLmFyaXRobWV0aWNIZWxwZXI9ZS5hcml0aG1ldGljSGVscGVyfWV2YWx1YXRlQXN0KGUsdCl7cmV0dXJuIHRoaXMuaW50ZXJwcmV0ZXIuZXZhbHVh''@;'; put 'put ''dGVBc3QoZSx0KX1hcnJheVNpemVGb3JBc3QoZSx0KXtyZXR1cm4gdGhpcy5hcnJheVNpemVQcmVkaWN0b3IuY2hlY2tBcnJheVNpemVGb3JBc3QoZSx0KX1saXN0T2ZTY2FsYXJWYWx1ZXMoZSx0KXtjb25zdCByPVtdO2Zvcihjb25zdCBpIG9mIGUpe2NvbnN0IG89dGhpcy5ldmFsdWF0ZUFz''@;'; put 'put ''dChpLHQpO2lmKG8gaW5zdGFuY2VvZiBsYSlmb3IoY29uc3QgYSBvZiBvLnZhbHVlc0Zyb21Ub3BMZWZ0Q29ybmVyKCkpci5wdXNoKFthLCEwXSk7ZWxzZSByLnB1c2goW28sITFdKX1yZXR1cm4gcn1jb2VyY2VUb1R5cGUoZSx0LHIpe2xldCBpO2lmKGUgaW5zdGFuY2VvZiBsYSlzd2l0Y2go''@;'; put 'put ''dC5hcmd1bWVudFR5cGUpe2Nhc2UgZXQuUkFOR0U6Y2FzZSBldC5BTlk6aT1lO2JyZWFrO2RlZmF1bHQ6e2NvbnN0IG89UHEoZSxyKTtpZih2b2lkIDA9PT1vKXJldHVybjtlPW99fWlmKCEoZSBpbnN0YW5jZW9mIGxhKSlzd2l0Y2godC5hcmd1bWVudFR5cGUpe2Nhc2UgZXQuSU5URUdFUjpj''@;'; put 'put ''YXNlIGV0Lk5VTUJFUjpjb25zdCBvPXRoaXMuY29lcmNlU2NhbGFyVG9OdW1iZXJPckVycm9yKGUpO2lmKCFjYyhvKSl7aT1vO2JyZWFrfWNvbnN0IGE9TG8obyk7aWYodm9pZCAwIT09dC5tYXhWYWx1ZSYmYT50Lm1heFZhbHVlKXJldHVybiBuZXcgUHQodG4uTlVNLGRyLlZhbHVlTGFyZ2Up''@;'; put 'put ''O2lmKHZvaWQgMCE9PXQubWluVmFsdWUmJmE8dC5taW5WYWx1ZSlyZXR1cm4gbmV3IFB0KHRuLk5VTSxkci5WYWx1ZVNtYWxsKTtpZih2b2lkIDAhPT10Lmxlc3NUaGFuJiZhPj10Lmxlc3NUaGFuKXJldHVybiBuZXcgUHQodG4uTlVNLGRyLlZhbHVlTGFyZ2UpO2lmKHZvaWQgMCE9PXQuZ3Jl''@;'; put 'put ''YXRlclRoYW4mJmE8PXQuZ3JlYXRlclRoYW4pcmV0dXJuIG5ldyBQdCh0bi5OVU0sZHIuVmFsdWVTbWFsbCk7aWYodC5hcmd1bWVudFR5cGU9PT1ldC5JTlRFR0VSJiYhTnVtYmVyLmlzSW50ZWdlcihhKSlyZXR1cm4gbmV3IFB0KHRuLk5VTSxkci5JbnRlZ2VyRXhwZWN0ZWQpO2k9bzticmVh''@;'; put 'put ''aztjYXNlIGV0LlNUUklORzppPW5tZShlKTticmVhaztjYXNlIGV0LkJPT0xFQU46aT1kV2UoZSk7YnJlYWs7Y2FzZSBldC5TQ0FMQVI6Y2FzZSBldC5OT0VSUk9SOmNhc2UgZXQuQU5ZOmk9ZTticmVhaztjYXNlIGV0LlJBTkdFOmlmKGUgaW5zdGFuY2VvZiBQdClyZXR1cm4gZTtpPWNXZShl''@;'; put 'put ''KTticmVhaztjYXNlIGV0LkNPTVBMRVg6cmV0dXJuIHRoaXMuYXJpdGhtZXRpY0hlbHBlci5jb2VyY2VTY2FsYXJUb0NvbXBsZXgoTG8oZSkpfXJldHVybiB0LnBhc3NTdWJ0eXBlfHx2b2lkIDA9PT1pP2k6TG8oaSl9Y2FsY3VsYXRlU2luZ2xlQ2VsbE9mUmVzdWx0QXJyYXkoZSx0LHIsaSxv''@;'; put 'put ''LGEpe2NvbnN0IGw9dGhpcy5jb2VyY2VBcmd1bWVudHNUb1JlcXVpcmVkVHlwZXMoZSx0LHIsaSk7aWYobCBpbnN0YW5jZW9mIFB0KXJldHVybiBsO2NvbnN0IHU9byguLi5sKTtyZXR1cm4gdGhpcy5yZXR1cm5OdW1iZXJXcmFwcGVyKHUsYSl9Y29lcmNlQXJndW1lbnRzVG9SZXF1aXJlZFR5''@;'; put 'put ''cGVzKGUsdCxyLGkpe2NvbnN0IG89W107Zm9yKGxldCBhPTA7YTxyLmxlbmd0aDthKyspe2NvbnN0IGw9clthXSx1PXZvaWQgMCE9PXRbYV0/dFthXTpsPy5kZWZhdWx0VmFsdWU7aWYodm9pZCAwPT09dSl7by5wdXNoKHZvaWQgMCk7Y29udGludWV9Y29uc3QgZz10aGlzLmNvZXJjZVRvVHlw''@;'; put 'put ''ZSh1LGwsZSk7aWYodm9pZCAwPT09ZyYmIWlbYV0pcmV0dXJuIG5ldyBQdCh0bi5WQUxVRSxkci5Xcm9uZ1R5cGUpO2lmKGcgaW5zdGFuY2VvZiBQdCYmbC5hcmd1bWVudFR5cGUhPT1ldC5TQ0FMQVIpcmV0dXJuIGc7by5wdXNoKGcpfXJldHVybiBvfXZlY3Rvcml6ZUFuZEJyb2FkY2FzdEFy''@;'; put 'put ''Z3VtZW50c0lmTmVjZXNzYXJ5KGUsdCxyLGksbyl7cmV0dXJuIHQubWFwKChhLGwpPT5lJiZ0aGlzLmlzUmFuZ2VQYXNzZWRBc0FTY2FsYXJBcmd1bWVudChhLHJbbF0pP3RoaXMudmVjdG9yaXplQW5kQnJvYWRjYXN0UmFuZ2VBcmd1bWVudChhLGksbyk6YSl9dmVjdG9yaXplQW5kQnJvYWRj''@;'; put 'put ''YXN0UmFuZ2VBcmd1bWVudChlLHQscil7dmFyIGk7Y29uc3Qgbz0xPT09ZS5oZWlnaHQoKT8wOnQsYT0xPT09ZS53aWR0aCgpPzA6cjtyZXR1cm4gbnVsbD09PShpPWUuZGF0YVtvXSl8fHZvaWQgMD09PWk/dm9pZCAwOmlbYV19ZXZhbHVhdGVBcmd1bWVudHMoZSx0LHIpe3JldHVybiByLmV4''@;'; put 'put ''cGFuZFJhbmdlcz90aGlzLmxpc3RPZlNjYWxhclZhbHVlcyhlLHQpOmUubWFwKGk9Plt0aGlzLmV2YWx1YXRlQXN0KGksdCksITFdKX1idWlsZE1ldGFkYXRhRm9yRWFjaEFyZ3VtZW50VmFsdWUoZSx0KXtjb25zdCByPXQucGFyYW1ldGVycz9bLi4udC5wYXJhbWV0ZXJzXTpbXTtpZih2b2lk''@;'; put 'put ''IDAhPT10LnJlcGVhdExhc3RBcmdzJiZOdW1iZXIuaXNJbnRlZ2VyKHQucmVwZWF0TGFzdEFyZ3MpJiZ0LnJlcGVhdExhc3RBcmdzPjApZm9yKDtlPnIubGVuZ3RoOylyLnB1c2goLi4uci5zbGljZShyLmxlbmd0aC10LnJlcGVhdExhc3RBcmdzKSk7cmV0dXJuIHJ9aXNOdW1iZXJPZkFyZ3Vt''@;'; put 'put ''ZW50VmFsdWVzVmFsaWQoZSx0KXtyZXR1cm4hKHQ+ZS5sZW5ndGgpJiYoISh0PGUubGVuZ3RoKXx8ZS5zbGljZSh0KS5ldmVyeShvPT5vPy5vcHRpb25hbEFyZ3x8dm9pZCAwIT09bz8uZGVmYXVsdFZhbHVlKSl9Y2FsY3VsYXRlU2l6ZU9mVmVjdG9yaXplZFJlc3VsdEFycmF5KGUsdCl7Y29u''@;'; put 'put ''c3Qgcj1lLmZpbHRlcigoYSxsKT0+dGhpcy5pc1JhbmdlUGFzc2VkQXNBU2NhbGFyQXJndW1lbnQoYSx0W2xdKSk7cmV0dXJuW01hdGgubWF4KDEsLi4uci5tYXAoYT0+YS5oZWlnaHQoKSkpLE1hdGgubWF4KDEsLi4uci5tYXAoYT0+YS53aWR0aCgpKSldfWlzUmFuZ2VQYXNzZWRBc0FTY2Fs''@;'; put 'put ''YXJBcmd1bWVudChlLHQpe3JldHVybiBudWxsIT1lJiZudWxsIT10JiZlIGluc3RhbmNlb2YgbGEmJiFbZXQuUkFOR0UsZXQuQU5ZXS5pbmNsdWRlcyh0LmFyZ3VtZW50VHlwZSl9bWV0YWRhdGEoZSl7Y29uc3QgdD10aGlzLmNvbnN0cnVjdG9yLmltcGxlbWVudGVkRnVuY3Rpb25zW2VdO2lm''@;'; put 'put ''KHZvaWQgMCE9PXQpcmV0dXJuIHQ7dGhyb3cgbmV3IEVycm9yKGBObyBtZXRhZGF0YSBmb3IgZnVuY3Rpb24gJHtlfS5gKX1yZXR1cm5OdW1iZXJXcmFwcGVyKGUsdCxyKXtyZXR1cm4gdm9pZCAwIT09dCYmY2MoZSk/dGhpcy5hcml0aG1ldGljSGVscGVyLkV4dGVuZGVkTnVtYmVyRmFjdG9y''@;'; put 'put ''eShMbyhlKSx7dHlwZTp0LGZvcm1hdDpyfSk6ZX19Y2xhc3MgeWx7Y29uc3RydWN0b3IoZSx0LHI9ITEpe3RoaXMud2lkdGg9ZSx0aGlzLmhlaWdodD10LHRoaXMuaXNSZWY9cn1zdGF0aWMgZXJyb3IoKXtyZXR1cm4gbmV3IHlsKDEsMSwhMCl9c3RhdGljIHNjYWxhcigpe3JldHVybiBuZXcg''@;'; put 'put ''eWwoMSwxLCExKX1pc1NjYWxhcigpe3JldHVybiAxPT09dGhpcy53aWR0aCYmMT09PXRoaXMuaGVpZ2h0fHx0aGlzLmlzUmVmfX1jbGFzcyBmZW57Y29uc3RydWN0b3IoZSx0KXt0aGlzLmNvbmZpZz1lLHRoaXMuZnVuY3Rpb25SZWdpc3RyeT10fWNoZWNrQXJyYXlTaXplKGUsdCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuY2hlY2tBcnJheVNpemVGb3JBc3QoZSx7Zm9ybXVsYUFkZHJlc3M6dCxhcnJheXNGbGFnOnRoaXMuY29uZmlnLnVzZUFycmF5QXJpdGhtZXRpY30pfWNoZWNrQXJyYXlTaXplRm9yQXN0KGUsdCl7c3dpdGNoKGUudHlwZSl7Y2FzZSBybi5GVU5DVElPTl9DQUxMOnJldHVybiB0aGlz''@;'; put 'put ''LmNoZWNrQXJyYXlTaXplRm9yRnVuY3Rpb24oZSx0KTtjYXNlIHJuLkNPTFVNTl9SQU5HRTpjYXNlIHJuLlJPV19SQU5HRTpjYXNlIHJuLkNFTExfUkFOR0U6e2NvbnN0IHI9YmEuZnJvbUFzdE9yVW5kZWYoZSx0LmZvcm11bGFBZGRyZXNzKTtyZXR1cm4gdm9pZCAwPT09cj95bC5lcnJvcigp''@;'; put 'put ''Om5ldyB5bChyLndpZHRoKCksci5oZWlnaHQoKSwhMCl9Y2FzZSBybi5BUlJBWTp7Y29uc3Qgcj1bXSxpPVtdO2Zvcihjb25zdCBsIG9mIGUuYXJncyl7Y29uc3QgdT1sLm1hcChPPT50aGlzLmNoZWNrQXJyYXlTaXplRm9yQXN0KE8sdCkpLGc9TWF0aC5taW4oLi4udS5tYXAoTz0+Ty5oZWln''@;'; put 'put ''aHQpKSxFPXUucmVkdWNlKChPLFopPT5PK1oud2lkdGgsMCk7ci5wdXNoKGcpLGkucHVzaChFKX1jb25zdCBvPXIucmVkdWNlKChsLHUpPT5sK3UsMCksYT1NYXRoLm1pbiguLi5pKTtyZXR1cm4gbmV3IHlsKGEsbyl9Y2FzZSBybi5TVFJJTkc6Y2FzZSBybi5OVU1CRVI6cmV0dXJuIHlsLnNj''@;'; put 'put ''YWxhcigpO2Nhc2Ugcm4uQ0VMTF9SRUZFUkVOQ0U6cmV0dXJuIG5ldyB5bCgxLDEsITApO2Nhc2Ugcm4uRElWX09QOmNhc2Ugcm4uQ09OQ0FURU5BVEVfT1A6Y2FzZSBybi5FUVVBTFNfT1A6Y2FzZSBybi5HUkVBVEVSX1RIQU5fT1A6Y2FzZSBybi5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfT1A6''@;'; put 'put ''Y2FzZSBybi5MRVNTX1RIQU5fT1A6Y2FzZSBybi5MRVNTX1RIQU5fT1JfRVFVQUxfT1A6Y2FzZSBybi5NSU5VU19PUDpjYXNlIHJuLk5PVF9FUVVBTF9PUDpjYXNlIHJuLlBMVVNfT1A6Y2FzZSBybi5QT1dFUl9PUDpjYXNlIHJuLlRJTUVTX09QOntjb25zdCByPXRoaXMuY2hlY2tBcnJheVNp''@;'; put 'put ''emVGb3JBc3QoZS5sZWZ0LHQpLGk9dGhpcy5jaGVja0FycmF5U2l6ZUZvckFzdChlLnJpZ2h0LHQpO3JldHVybiF0LmFycmF5c0ZsYWcmJihyLmhlaWdodD4xfHxyLndpZHRoPjF8fGkuaGVpZ2h0PjF8fGkud2lkdGg+MSk/eWwuZXJyb3IoKTpmdW5jdGlvbiBkZW4obixlKXtyZXR1cm4gbmV3''@;'; put 'put ''IHlsKE1hdGgubWF4KG4ud2lkdGgsZS53aWR0aCksTWF0aC5tYXgobi5oZWlnaHQsZS5oZWlnaHQpKX0ocixpKX1jYXNlIHJuLk1JTlVTX1VOQVJZX09QOmNhc2Ugcm4uUExVU19VTkFSWV9PUDpjYXNlIHJuLlBFUkNFTlRfT1A6e2NvbnN0IHI9dGhpcy5jaGVja0FycmF5U2l6ZUZvckFzdChl''@;'; put 'put ''LnZhbHVlLHQpO3JldHVybiF0LmFycmF5c0ZsYWcmJihyLmhlaWdodD4xfHxyLndpZHRoPjEpP3lsLmVycm9yKCk6ZnVuY3Rpb24gaGVuKG4pe3JldHVybiBuZXcgeWwobi53aWR0aCxuLmhlaWdodCl9KHIpfWNhc2Ugcm4uUEFSRU5USEVTSVM6cmV0dXJuIHRoaXMuY2hlY2tBcnJheVNpemVG''@;'; put 'put ''b3JBc3QoZS5leHByZXNzaW9uLHQpO2RlZmF1bHQ6cmV0dXJuIHlsLmVycm9yKCl9fWNoZWNrQXJyYXlTaXplRm9yRnVuY3Rpb24oZSx0KXtjb25zdCByPXRoaXMuZnVuY3Rpb25SZWdpc3RyeS5nZXRBcnJheVNpemVGdW5jdGlvbihlLnByb2NlZHVyZU5hbWUpO2lmKHZvaWQgMCE9PXIpcmV0''@;'; put 'put ''dXJuIHIoZSx0KTtjb25zdCBpPXRoaXMuZnVuY3Rpb25SZWdpc3RyeS5nZXRNZXRhZGF0YShlLnByb2NlZHVyZU5hbWUpO2lmKHZvaWQgMD09PWl8fGkuZXhwYW5kUmFuZ2VzfHwhdC5hcnJheXNGbGFnfHxpLnZlY3Rvcml6YXRpb25Gb3JiaWRkZW58fHZvaWQgMD09PWkucGFyYW1ldGVycyly''@;'; put 'put ''ZXR1cm4gbmV3IHlsKDEsMSk7Y29uc3Qgbz1lLmFyZ3MubWFwKGc9Pnt2YXIgRTtyZXR1cm4gdGhpcy5jaGVja0FycmF5U2l6ZUZvckFzdChnLG5ldyB6Nih0LmZvcm11bGFBZGRyZXNzLHQuYXJyYXlzRmxhZ3x8bnVsbCE9PShFPWk/LmFycmF5RnVuY3Rpb24pJiZ2b2lkIDAhPT1FJiZFKSl9''@;'; put 'put ''KSxhPVsuLi5pLnBhcmFtZXRlcnNdO2lmKHZvaWQgMCE9PWkucmVwZWF0TGFzdEFyZ3MmJmEubGVuZ3RoPG8ubGVuZ3RoJiYoby5sZW5ndGgtYS5sZW5ndGgpJWkucmVwZWF0TGFzdEFyZ3MhPT0wKXJldHVybiB5bC5lcnJvcigpO2Zvcig7YS5sZW5ndGg8by5sZW5ndGg7KXtpZih2b2lkIDA9''@;'; put 'put ''PT1pLnJlcGVhdExhc3RBcmdzKXJldHVybiB5bC5lcnJvcigpO2EucHVzaCguLi5hLnNsaWNlKGEubGVuZ3RoLWkucmVwZWF0TGFzdEFyZ3MpKX1sZXQgbD0xLHU9MTtmb3IobGV0IGc9MDtnPG8ubGVuZ3RoO2crKylhW2ddLmFyZ3VtZW50VHlwZSE9PWV0LlJBTkdFJiZhW2ddLmFyZ3VtZW50''@;'; put 'put ''VHlwZSE9PWV0LkFOWSYmKHU9TWF0aC5tYXgodSxvW2ddLmhlaWdodCksbD1NYXRoLm1heChsLG9bZ10ud2lkdGgpKTtyZXR1cm4gbmV3IHlsKGwsdSl9fWZ1bmN0aW9uIHpjKG4sZSx0KXtpZih0eXBlb2Ygbj4idSIpcmV0dXJuIGgyLmRlZmF1bHRDb25maWdbdF07aWYoInN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBlKXtpZih0eXBlb2Ygbj09PWUpcmV0dXJuIG47dGhyb3cgbmV3IFNjKGUsdCl9aWYoZS5pbmNsdWRlcyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgQUp0KGUubWFwKHI9PmAnJHtyfSdgKS5qb2luKCIgIiksdCl9ZnVuY3Rpb24gb0EobixlLHQpe2lmKG48dCl0aHJvdyBuZXcgVEp0KGUs''@;'; put 'put ''dCl9ZnVuY3Rpb24gSHEobixlLHQscil7aWYoZShuKSlyZXR1cm4gbjtpZih0eXBlb2Ygbj4idSIpcmV0dXJuIGgyLmRlZmF1bHRDb25maWdbcl07dGhyb3cgbmV3IFNjKHQscil9ZnVuY3Rpb24gX1dlKC4uLm4pe2NvbnN0IGU9bmV3IE1hcDtuLmZvckVhY2gocj0+e2NvbnN0IGk9ZS5nZXQo''@;'; put 'put ''ci52YWx1ZSl8fFtdO2kucHVzaChyLm5hbWUpLGUuc2V0KHIudmFsdWUsaSl9KTtjb25zdCB0PVtdO2Zvcihjb25zdCByIG9mIGUudmFsdWVzKCkpci5sZW5ndGg+MSYmdC5wdXNoKHIpO2lmKHQubGVuZ3RoPjApe3QuZm9yRWFjaChpPT5pLnNvcnQoKSk7Y29uc3Qgcj10Lm1hcChpPT5gWyR7''@;'; put 'put ''aX1dYCkuam9pbigiOyAiKTt0aHJvdyBuZXcgRXJyb3IoYENvbmZpZyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIFBhcmFtZXRlcnMgaW4gY29uZmxpY3Q6ICR7cn1gKX19ZnVuY3Rpb24gdG8obixlLHQpe2lmKHR5cGVvZiBuIT09ZSl0aHJvdyBuZXcgU2MoZSx0KX1jb25zdCBpbWU9bmV3IFJl''@;'; put 'put ''Z0V4cCgiXnNzKFxcLihzK3wwKykpPyQiKSxnZW49bmV3IFJlZ0V4cCgiXlswLTkvLlxcLTogXStbYXBdP20/JCIpLG1lbj1uZXcgUmVnRXhwKCJcXHMrIikseVdlPW5ldyBSZWdFeHAoIlsgLy4tXSIpLHZlbj1TV2UoZnVuY3Rpb24gYmVuKG4pe2NvbnN0IGU9bi50b0xvd2VyQ2FzZSgpLnRy''@;'; put 'put ''aW0oKSxyPShlLmVuZHNXaXRoKCJhbS9wbSIpP2Uuc3Vic3RyaW5nKDAsZS5sZW5ndGgtNSk6ZS5lbmRzV2l0aCgiYS9wIik/ZS5zdWJzdHJpbmcoMCxuLmxlbmd0aC0zKTplKS50cmltKCkuc3BsaXQoIjoiKTtyZXR1cm57aXRlbXNDb3VudDpyLmxlbmd0aCxob3VySXRlbTpyLmluZGV4T2Yo''@;'; put 'put ''ImhoIiksbWludXRlSXRlbTpyLmluZGV4T2YoIm1tIiksc2Vjb25kSXRlbTpyLmZpbmRJbmRleChpPT5pbWUudGVzdChpKSl9fSksX2VuPVNXZShmdW5jdGlvbiB3ZW4obil7Y29uc3QgZT1uLnRvTG93ZXJDYXNlKCkudHJpbSgpLnNwbGl0KHlXZSk7cmV0dXJue2l0ZW1zQ291bnQ6ZS5sZW5n''@;'; put 'put ''dGgsZGF5SXRlbTplLmluZGV4T2YoImRkIiksbW9udGhJdGVtOmUuaW5kZXhPZigibW0iKSxzaG9ydFllYXJJdGVtOmUuaW5kZXhPZigieXkiKSxsb25nWWVhckl0ZW06ZS5pbmRleE9mKCJ5eXl5Iil9fSk7ZnVuY3Rpb24gd1dlKG4sZSl7dmFyIHQscixpO2lmKHZvaWQgMD09PWUpcmV0dXJu''@;'; put 'put ''O2NvbnN0e2l0ZW1zQ291bnQ6byxob3VySXRlbTphLG1pbnV0ZUl0ZW06bCxzZWNvbmRJdGVtOnV9PXZlbihlKTtsZXQgZztpZigiYW0iPT09bltuLmxlbmd0aC0xXXx8ImEiPT09bltuLmxlbmd0aC0xXT8oZz0hMSxuLnBvcCgpKTooInBtIj09PW5bbi5sZW5ndGgtMV18fCJwIj09PW5bbi5s''@;'; put 'put ''ZW5ndGgtMV0pJiYoZz0hMCxuLnBvcCgpKSxuLmxlbmd0aCE9PW8pcmV0dXJuO2NvbnN0IEU9TnVtYmVyKG51bGwhPT0odD1uW3VdKSYmdm9pZCAwIT09dD90OiIwIik7aWYoIU51bWJlci5pc0Zpbml0ZShFKSlyZXR1cm47Y29uc3QgTz1NYXRoLnJvdW5kKDFlMypFKS8xZTMsWj1OdW1iZXIo''@;'; put 'put ''bnVsbCE9PShyPW5bbF0pJiZ2b2lkIDAhPT1yP3I6IjAiKTtpZighTnVtYmVyLmlzRmluaXRlKFopfHwhTnVtYmVyLmlzSW50ZWdlcihaKSlyZXR1cm47Y29uc3QgZWU9TnVtYmVyKG51bGwhPT0oaT1uW2FdKSYmdm9pZCAwIT09aT9pOiIwIik7cmV0dXJuIU51bWJlci5pc0Zpbml0ZShlZSl8''@;'; put 'put ''fCFOdW1iZXIuaXNJbnRlZ2VyKGVlKXx8dm9pZCAwIT09ZyYmKGVlPDB8fGVlPjEyKT92b2lkIDA6e2hvdXJzOnZvaWQgMCE9PWc/ZWUlMTIrKGc/MTI6MCk6ZWUsbWludXRlczpaLHNlY29uZHM6T319ZnVuY3Rpb24gQ1dlKG4sZSl7dmFyIHQ7aWYodm9pZCAwPT09ZSlyZXR1cm47Y29uc3R7''@;'; put 'put ''aXRlbXNDb3VudDpyLGRheUl0ZW06aSxtb250aEl0ZW06byxzaG9ydFllYXJJdGVtOmEsbG9uZ1llYXJJdGVtOmx9PV9lbihlKTtpZihuLmxlbmd0aCE9PXIpcmV0dXJuO2NvbnN0IHU9TnVtYmVyKG5baV0pO2lmKCFOdW1iZXIuaXNGaW5pdGUodSl8fCFOdW1iZXIuaXNJbnRlZ2VyKHUpKXJl''@;'; put 'put ''dHVybjtjb25zdCBnPU51bWJlcihuW29dKTtpZighTnVtYmVyLmlzRmluaXRlKGcpfHwhTnVtYmVyLmlzSW50ZWdlcihnKXx8bltsXSYmblthXSlyZXR1cm47Y29uc3QgRT1OdW1iZXIobnVsbCE9PSh0PW5bbF0pJiZ2b2lkIDAhPT10P3Q6blthXSk7cmV0dXJuIU51bWJlci5pc0Zpbml0ZShF''@;'; put 'put ''KXx8IU51bWJlci5pc0ludGVnZXIoRSl8fG5bbF0mJihFPDFlM3x8RT45OTk5KXx8blthXSYmKEU8MHx8RT45OSk/dm9pZCAwOnt5ZWFyOkUsbW9udGg6ZyxkYXk6dX19ZnVuY3Rpb24gU1dlKG4pe2NvbnN0IGU9e307cmV0dXJuIHQ9Pntjb25zdCByPWVbdF07aWYodm9pZCAwIT09cilyZXR1''@;'; put 'put ''cm4gcjtjb25zdCBpPW4odCk7cmV0dXJuIGVbdF09aSxpfX1jb25zdCBhbWU9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxhQT1bMCwzMSw1OSw5MCwxMjAsMTUxLDE4MSwyMTIsMjQzLDI3MywzMDQsMzM0XTtmdW5jdGlvbiBwUChuKXtyZXR1cm4hKCFufHwib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mIG4mJiJmdW5jdGlvbiIhPXR5cGVvZiBuKSYmInllYXIiaW4gbiYmIm51bWJlciI9PXR5cGVvZiBuLnllYXImJiJtb250aCJpbiBuJiYibnVtYmVyIj09dHlwZW9mIG4ubW9udGgmJiJkYXkiaW4gbiYmIm51bWJlciI9PXR5cGVvZiBuLmRheX1mdW5jdGlvbiBFV2Uobil7cmV0''@;'; put 'put ''dXJuISghbnx8Im9iamVjdCIhPXR5cGVvZiBuJiYiZnVuY3Rpb24iIT10eXBlb2YgbikmJiJob3VycyJpbiBuJiYibnVtYmVyIj09dHlwZW9mIG4uaG91cnMmJiJtaW51dGVzImluIG4mJiJudW1iZXIiPT10eXBlb2Ygbi5taW51dGVzJiYic2Vjb25kcyJpbiBuJiYibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IG4uc2Vjb25kc31jb25zdCBTZW49e3llYXI6OTk5OSxtb250aDoxMixkYXk6MzF9O2NsYXNzIEVlbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbmZpZz1lLHRoaXMubWluRGF0ZUFic29sdXRlVmFsdWU9dGhpcy5kYXRlVG9OdW1iZXJGcm9tWmVybyhlLm51bGxEYXRlKSx0aGlzLm1heERhdGVW''@;'; put 'put ''YWx1ZT10aGlzLmRhdGVUb051bWJlcihTZW4pLHRoaXMubGVhcFllYXIxOTAwPWUubGVhcFllYXIxOTAwLHRoaXMuZXBvY2hZZWFyWmVybz0hdGhpcy5sZWFwWWVhcjE5MDAmJjA8PXRoaXMuZGF0ZVRvTnVtYmVyKHt5ZWFyOjE5MDAsbW9udGg6MixkYXk6Mjh9KT90aGlzLm51bWJlclRvU2lt''@;'; put 'put ''cGxlRGF0ZSgyKS55ZWFyOnRoaXMubnVtYmVyVG9TaW1wbGVEYXRlKDEpLnllYXIsdGhpcy5wYXJzZURhdGVUaW1lPWUucGFyc2VEYXRlVGltZX1nZXRXaXRoaW5Cb3VuZHMoZSl7cmV0dXJuIGU8PXRoaXMubWF4RGF0ZVZhbHVlJiZlPj0wP2U6dm9pZCAwfWRhdGVTdHJpbmdUb0RhdGVOdW1i''@;'; put 'put ''ZXIoZSl7Y29uc3R7ZGF0ZVRpbWU6dCxkYXRlRm9ybWF0OnI9IiIsdGltZUZvcm1hdDppPSIifT10aGlzLnBhcnNlRGF0ZVRpbWVGcm9tQ29uZmlnRm9ybWF0cyhlKTtpZih2b2lkIDAhPT10KXJldHVybiBFV2UodCk/cFAodCk/bmV3ICRnZShsQSh0KSt0aGlzLmRhdGVUb051bWJlcih0KSxy''@;'; put 'put ''KyIgIitpKTpuZXcgR2dlKGxBKHQpLGkpOnBQKHQpP25ldyBZZ2UodGhpcy5kYXRlVG9OdW1iZXIodCkscik6MH1wYXJzZURhdGVUaW1lRnJvbUNvbmZpZ0Zvcm1hdHMoZSl7cmV0dXJuIHRoaXMucGFyc2VEYXRlVGltZUZyb21Gb3JtYXRzKGUsdGhpcy5jb25maWcuZGF0ZUZvcm1hdHMsdGhp''@;'; put 'put ''cy5jb25maWcudGltZUZvcm1hdHMpfWdldE51bGxZZWFyKCl7cmV0dXJuIHRoaXMuY29uZmlnLm51bGxZZWFyfWdldEVwb2NoWWVhclplcm8oKXtyZXR1cm4gdGhpcy5lcG9jaFllYXJaZXJvfWlzVmFsaWREYXRlKGUpe3JldHVybiEoaXNOYU4oZS55ZWFyKXx8aXNOYU4oZS5tb250aCl8fGlz''@;'; put 'put ''TmFOKGUuZGF5KXx8ZS5kYXkhPT1NYXRoLnJvdW5kKGUuZGF5KXx8ZS5tb250aCE9PU1hdGgucm91bmQoZS5tb250aCl8fGUueWVhciE9PU1hdGgucm91bmQoZS55ZWFyKXx8ZS55ZWFyPDE1ODJ8fGUubW9udGg8MXx8ZS5tb250aD4xMnx8ZS5kYXk8MSkmJih0aGlzLmlzTGVhcFllYXIoZS55''@;'; put 'put ''ZWFyKSYmMj09PWUubW9udGg/ZS5kYXk8PTI5OmUuZGF5PD1hbWVbZS5tb250aC0xXSl9ZGF0ZVRvTnVtYmVyKGUpe3JldHVybiB0aGlzLmRhdGVUb051bWJlckZyb21aZXJvKGUpLXRoaXMubWluRGF0ZUFic29sdXRlVmFsdWV9cmVsYXRpdmVOdW1iZXJUb0Fic29sdXRlTnVtYmVyKGUpe3Jl''@;'; put 'put ''dHVybiBlK3RoaXMubWluRGF0ZUFic29sdXRlVmFsdWUtKHRoaXMubGVhcFllYXIxOTAwPzE6MCl9bnVtYmVyVG9TaW1wbGVEYXRlKGUpe2NvbnN0IHQ9TWF0aC5mbG9vcihlKSt0aGlzLm1pbkRhdGVBYnNvbHV0ZVZhbHVlO2xldCByPU1hdGguZmxvb3IodC8zNjUuMjQyNSk7dGhpcy5kYXRl''@;'; put 'put ''VG9OdW1iZXJGcm9tWmVybyh7eWVhcjpyKzEsbW9udGg6MSxkYXk6MX0pPD10P3IrKzp0aGlzLmRhdGVUb051bWJlckZyb21aZXJvKHt5ZWFyOnItMSxtb250aDoxLGRheToxfSk+dCYmci0tO2NvbnN0IGk9dC10aGlzLmRhdGVUb051bWJlckZyb21aZXJvKHt5ZWFyOnIsbW9udGg6MSxkYXk6''@;'; put 'put ''MX0pLG89ZnVuY3Rpb24gTWVuKG4pe2xldCBlPTA7cmV0dXJuIGFBW2UrNl08PW4mJihlKz02KSxhQVtlKzNdPD1uJiYoZSs9MyksYUFbZSsyXTw9bj9lKz0yOmFBW2UrMV08PW4mJihlKz0xKSxlfShpLSh0aGlzLmlzTGVhcFllYXIocikmJmk+PTU5PzE6MCkpO3JldHVybnt5ZWFyOnIsbW9u''@;'; put 'put ''dGg6bysxLGRheTppLWFBW29dLSh0aGlzLmlzTGVhcFllYXIocikmJm8+MT8xOjApKzF9fW51bWJlclRvU2ltcGxlRGF0ZVRpbWUoZSl7Y29uc3QgdD1zQShlJTEpLHI9TWF0aC5mbG9vcih0LmhvdXJzLzI0KTt0LmhvdXJzPXQuaG91cnMlMjQ7Y29uc3QgaT10aGlzLm51bWJlclRvU2ltcGxl''@;'; put 'put ''RGF0ZShNYXRoLmZsb29yKGUpK3IpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSksdCl9bGVhcFllYXJzQ291bnQoZSl7cmV0dXJuIE1hdGguZmxvb3IoZS80KS1NYXRoLmZsb29yKGUvMTAwKStNYXRoLmZsb29yKGUvNDAwKSsodGhpcy5jb25maWcubGVhcFllYXIx''@;'; put 'put ''OTAwJiZlPj0xOTAwPzE6MCl9ZGF5c0luTW9udGgoZSx0KXtyZXR1cm4gdGhpcy5pc0xlYXBZZWFyKGUpJiYyPT09dD8yOTphbWVbdC0xXX1lbmRPZk1vbnRoKGUpe3JldHVybnt5ZWFyOmUueWVhcixtb250aDplLm1vbnRoLGRheTp0aGlzLmRheXNJbk1vbnRoKGUueWVhcixlLm1vbnRoKX19''@;'; put 'put ''dG9CYXNpc1VTKGUsdCl7cmV0dXJuIDMxPT09ZS5kYXkmJihlLmRheT0zMCksMzA9PT1lLmRheSYmMzE9PT10LmRheSYmKHQuZGF5PTMwKSwyPT09ZS5tb250aCYmZS5kYXk9PT10aGlzLmRheXNJbk1vbnRoKGUueWVhcixlLm1vbnRoKSYmKGUuZGF5PTMwLDI9PT10Lm1vbnRoJiZ0LmRheT09''@;'; put 'put ''PXRoaXMuZGF5c0luTW9udGgodC55ZWFyLHQubW9udGgpJiYodC5kYXk9MzApKSxbZSx0XX15ZWFyTGVuZ3RoRm9yQmFzaXMoZSx0KXtyZXR1cm4gZS55ZWFyIT09dC55ZWFyP2UueWVhcisxIT09dC55ZWFyfHxlLm1vbnRoPHQubW9udGh8fGUubW9udGg9PT10Lm1vbnRoJiZlLmRheTx0LmRh''@;'; put 'put ''eT8odGhpcy5sZWFwWWVhcnNDb3VudCh0LnllYXIpLXRoaXMubGVhcFllYXJzQ291bnQoZS55ZWFyLTEpKS8odC55ZWFyLWUueWVhcisxKSszNjU6dGhpcy5jb3VudExlYXBEYXlzKHQpIT09dGhpcy5jb3VudExlYXBEYXlzKHt5ZWFyOmUueWVhcixtb250aDplLm1vbnRoLGRheTplLmRheS0x''@;'; put 'put ''fSk/MzY2OjM2NTp0aGlzLmlzTGVhcFllYXIoZS55ZWFyKT8zNjY6MzY1fXBhcnNlU2luZ2xlRm9ybWF0KGUsdCxyKXtjb25zdCBpPXRoaXMucGFyc2VEYXRlVGltZShlLHQscik7aWYoIXBQKGkpfHwoaS55ZWFyPj0wJiZpLnllYXI8MTAwJiYoaS55ZWFyPHRoaXMuZ2V0TnVsbFllYXIoKT9p''@;'; put 'put ''LnllYXIrPTJlMzppLnllYXIrPTE5MDApLHRoaXMuaXNWYWxpZERhdGUoaSkpKXJldHVybiBpfXBhcnNlRGF0ZVRpbWVGcm9tRm9ybWF0cyhlLHQscil7Y29uc3QgaT0wPT09dC5sZW5ndGg/W3ZvaWQgMF06dCxvPTA9PT1yLmxlbmd0aD9bdm9pZCAwXTpyO2Zvcihjb25zdCBhIG9mIGkpZm9y''@;'; put 'put ''KGNvbnN0IGwgb2Ygbyl7Y29uc3QgdT10aGlzLnBhcnNlU2luZ2xlRm9ybWF0KGUsYSxsKTtpZih2b2lkIDAhPT11KXJldHVybntkYXRlVGltZTp1LHRpbWVGb3JtYXQ6bCxkYXRlRm9ybWF0OmF9fXJldHVybnt9fWNvdW50TGVhcERheXMoZSl7cmV0dXJuIHRoaXMubGVhcFllYXJzQ291bnQo''@;'; put 'put ''ZS5tb250aD4yfHwyPT09ZS5tb250aCYmZS5kYXk+PTI5P2UueWVhcjplLnllYXItMSl9ZGF0ZVRvTnVtYmVyRnJvbVplcm8oZSl7cmV0dXJuIDM2NSplLnllYXIrYUFbZS5tb250aC0xXStlLmRheS0xK3RoaXMubGVhcFllYXJzQ291bnQoZS5tb250aDw9Mj9lLnllYXItMTplLnllYXIpfWlz''@;'; put 'put ''TGVhcFllYXIoZSl7cmV0dXJuIShlJTQpJiYoISEoZSUxMDApfHwhKGUlNDAwKXx8MTkwMD09PWUmJnRoaXMuY29uZmlnLmxlYXBZZWFyMTkwMCl9fWZ1bmN0aW9uIE1XZShuLGUpe2NvbnN0IHQ9MTIqbi55ZWFyK24ubW9udGgtMStlO3JldHVybnt5ZWFyOk1hdGguZmxvb3IodC8xMiksbW9u''@;'; put 'put ''dGg6dCUxMisxLGRheTpuLmRheX19ZnVuY3Rpb24gbG1lKG4pe3JldHVybiBNYXRoLnJvdW5kKDM2MDAqbioyNCkvODY0MDB9ZnVuY3Rpb24gc0Eobil7Y29uc3QgZT0yNCpuKjYwKjYwLHQ9ZnVuY3Rpb24geGVuKG4sZT0xKXtyZXR1cm4gTWF0aC5yb3VuZChuKmUpL2V9KGUlNjAsMWU1KSU2''@;'; put 'put ''MCxyPShlLXQpLzYwLGk9TWF0aC5yb3VuZChyJTYwKSU2MDtyZXR1cm57aG91cnM6TWF0aC5yb3VuZCgoci1pKS82MCksbWludXRlczppLHNlY29uZHM6dH19ZnVuY3Rpb24gbEEobil7cmV0dXJuKChuLnNlY29uZHMvNjArbi5taW51dGVzKS82MCtuLmhvdXJzKS8yNH1mdW5jdGlvbiBUV2Uo''@;'; put 'put ''bil7cmV0dXJue3llYXI6bi55ZWFyLG1vbnRoOm4ubW9udGgsZGF5Ok1hdGgubWluKDMwLG4uZGF5KX19Y29uc3QgQVdlPS8oXFwufGRkfEREfGR8RHxtbXxNTXxtfE18WVlZWXxZWXx5eXl5fHl5fEhIfGhofEh8aHxzcyhcLigwK3xzKykpP3xzfEFNXC9QTXxhbVwvcG18QVwvUHxhXC9wfFxb''@;'; put 'put ''bW1dfFxbTU1dfFxbaGhdfFxbSEhdKS9nLGtXZT0vKFxcLnxbIzBdKyhcLlsjMF0qKT8pL2c7dmFyIFc2PWZ1bmN0aW9uKG4pe3JldHVybiBuLkZPUk1BVD0iRk9STUFUIixuLkZSRUVfVEVYVD0iRlJFRV9URVhUIixufShXNnx8e30pO2Z1bmN0aW9uIGpxKG4sZSl7cmV0dXJue3R5cGU6bix2''@;'; put 'put ''YWx1ZTplfX12YXIgVXE9ZnVuY3Rpb24obil7cmV0dXJuIG4uREFURT0iREFURSIsbi5OVU1CRVI9Ik5VTUJFUiIsbi5TVFJJTkc9IlNUUklORyIsbn0oVXF8fHt9KTtmdW5jdGlvbiBSV2UobixlKXtjb25zdCB0PVtdO2xldCByPTA7Zm9yKGxldCBvPTA7bzxuLmxlbmd0aDsrK28pe2NvbnN0''@;'; put 'put ''IGE9bltvXTtpZihhLmluZGV4IT09cil7Y29uc3QgbD1lLnN1YnN0cihyLGEuaW5kZXgtcik7dC5wdXNoKGpxKFc2LkZSRUVfVEVYVCxsKSl9YVswXS5zdGFydHNXaXRoKCJcXCIpP3QucHVzaChqcShXNi5GUkVFX1RFWFQsYVswXSkpOnQucHVzaChqcShXNi5GT1JNQVQsYVswXSkpLHI9YS5p''@;'; put 'put ''bmRleCthWzBdLmxlbmd0aH1jb25zdCBpPW5bbi5sZW5ndGgtMV07aWYoaS5pbmRleCtpWzBdLmxlbmd0aDxlLmxlbmd0aCl7Y29uc3Qgbz1lLnN1YnN0cihpLmluZGV4K2lbMF0ubGVuZ3RoLGUubGVuZ3RoKTt0LnB1c2goanEoVzYuRlJFRV9URVhULG8pKX1yZXR1cm4gdH1mdW5jdGlvbiBj''@;'; put 'put ''bWUobil7Y29uc3QgZT1mdW5jdGlvbiBSZW4obil7QVdlLmxhc3RJbmRleD0wO2NvbnN0IGU9W107bGV0IHQ7ZG97dD1BV2UuZXhlYyhuKSxudWxsIT09dCYmZS5wdXNoKHQpfXdoaWxlKHQpO3JldHVybiBlfShuKTtpZighZS5ldmVyeSh0PT5EV2UodCkpKXJldHVybnt0eXBlOlVxLkRBVEUs''@;'; put 'put ''dG9rZW5zOlJXZShlLG4pfX1mdW5jdGlvbiBEV2Uobil7cmV0dXJuIG5bMF0uc3RhcnRzV2l0aCgiXFwiKX1mdW5jdGlvbiBEZW4obixlLHQscil7Y29uc3QgaT10LnN0cmluZ2lmeURhdGVUaW1lKHIubnVtYmVyVG9TaW1wbGVEYXRlVGltZShuKSxlKTtpZih2b2lkIDAhPT1pKXJldHVybiBp''@;'; put 'put ''O2NvbnN0IG89dC5zdHJpbmdpZnlEdXJhdGlvbihzQShuKSxlKTtpZih2b2lkIDAhPT1vKXJldHVybiBvO2NvbnN0IGE9ZnVuY3Rpb24gSVdlKG4pe2NvbnN0IGU9ZnVuY3Rpb24gSWVuKG4pe2tXZS5sYXN0SW5kZXg9MDtjb25zdCBlPWtXZS5leGVjKG4pO3JldHVybiBudWxsIT09ZT9bZV06''@;'; put 'put ''W119KG4pO2lmKCFlLmV2ZXJ5KHQ9PkRXZSh0KSkpcmV0dXJue3R5cGU6VXEuTlVNQkVSLHRva2VuczpSV2UoZSxuKX19KGUpO3JldHVybiB2b2lkIDAhPT1hP2Z1bmN0aW9uIE9lbihuLGUpe2xldCB0PSIiO2ZvcihsZXQgcj0wO3I8bi5sZW5ndGg7KytyKXtjb25zdCBpPW5bcl07aWYoaS50''@;'; put 'put ''eXBlPT09VzYuRlJFRV9URVhUKXt0Kz1pLnZhbHVlO2NvbnRpbnVlfWNvbnN0IG89aS52YWx1ZS5zcGxpdCgiLiIpLGE9b1swXSxsPW9bMV18fCIiLHU9b1sxXT8iLiI6IiIsZz1OdW1iZXIoZS50b0ZpeGVkKGwubGVuZ3RoKSkudG9TdHJpbmcoKS5zcGxpdCgiLiIpO2xldCBFPWdbMF18fCIi''@;'; put 'put ''LE89Z1sxXXx8IiI7YS5sZW5ndGg+RS5sZW5ndGgmJihFPXJwKEUsTFdlKGEuc3Vic3RyKDAsYS5sZW5ndGgtRS5sZW5ndGgpLCIwIikrRS5sZW5ndGgpKSxPPUxlbihPLExXZShsLnN1YnN0cihPLmxlbmd0aCxsLmxlbmd0aC1PLmxlbmd0aCksIjAiKStPLmxlbmd0aCksdCs9RSt1K099cmV0''@;'; put 'put ''dXJuIHR9KGEudG9rZW5zLG4pOmV9ZnVuY3Rpb24gcnAobixlKXtsZXQgdD1gJHtufWA7Zm9yKDt0Lmxlbmd0aDxlOyl0PSIwIit0O3JldHVybiB0fWZ1bmN0aW9uIExlbihuLGUpe2xldCB0PWAke259YDtmb3IoO3QubGVuZ3RoPGU7KXQrPSIwIjtyZXR1cm4gdH1mdW5jdGlvbiBMV2Uobixl''@;'; put 'put ''KXtyZXR1cm4gbi5zcGxpdChlKS5sZW5ndGgtMX1jb25zdCB1bWU9Imxlbmd0aCIsZ1A9bj0+cGFyc2VJbnQobiwxNiksT1dlPW49PnBhcnNlSW50KG4sMTApLGRtZT1uPT4obisiIikucmVwbGFjZSgvXC0vZywiIiksenE9KG4sZSx0KT0+bi5zdWJzdHIoZSx0KSxxND1uPT5uLmNvZGVQb2lu''@;'; put 'put ''dEF0KDApLTY1LFZlbj17aW52YWxpZDooKT0+IlRoZSBsaWNlbnNlIGtleSBmb3IgSHlwZXJGb3JtdWxhIGlzIGludmFsaWQuIixleHBpcmVkOih7a2V5VmFsaWRpdHlEYXRlOm59KT0+YFRoZSBsaWNlbnNlIGtleSBmb3IgSHlwZXJGb3JtdWxhIGV4cGlyZWQgb24gJHtufSwgYW5kIGlzIG5v''@;'; put 'put ''dCB2YWxpZCBmb3IgdGhlIGluc3RhbGxlZCB2ZXJzaW9uLmAsbWlzc2luZzooKT0+IlRoZSBsaWNlbnNlIGtleSBmb3IgSHlwZXJGb3JtdWxhIGlzIG1pc3NpbmcuIn07bGV0IE5XZT0hMTtmdW5jdGlvbiBCZW4obil7Y29uc3QgZT17dGVtcGxhdGU6Im1pc3NpbmciLHZhcnM6e319O2lmKCJn''@;'; put 'put ''cGwtdjMiPT09bnx8ImludGVybmFsLXVzZS1pbi1oYW5kc29udGFibGUiPT09billLnRlbXBsYXRlPSJ2YWxpZCI7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIG4mJmZ1bmN0aW9uIEhlbihuKXtpZigobj0obisiIikucmVwbGFjZSgvXC0vZywiIikpW3VtZV0hPT1xNCgiWiIpKXJldHVybiEx''@;'; put 'put ''O2xldCBlPTA7cmV0dXJuIDA9PT1bWzAscTQoIkciKSsxXSxbcTQoIkgiKSxxNCgiSCIpLTFdLFtxNCgiRyIpK3E0KCJIIikscTQoIkciKV1dLnJlZHVjZSgodCxbcixpXSxvKT0+KHR8PShPV2UoYCR7T1dlKGdQKHpxKG4sZStyLSgwPT09bz8wOjIpLGkrKG8/MjowKSkpKyhnUCh6cShuLGUr''@;'; put 'put ''citpLDIpKStbXSkucGFkU3RhcnQoMiwiMCIpKX1gKSU5N3x8Mik+PjEsZSs9Mix0KSxxNCgiQSIpKX0obikpe2NvbnN0W3QscixpXT0iMTgvMDcvMjAyNCIuc3BsaXQoIi8iKSxvPU1hdGguZmxvb3IobmV3IERhdGUoYCR7cn0vJHt0fS8ke2l9YCkuZ2V0VGltZSgpLzg2NGU1KSxhPWZ1bmN0''@;'; put 'put ''aW9uIFBlbihuKXtyZXR1cm4gMjU9PT1kbWUobilbdW1lXT9nUCh6cShkbWUobiksZ1AoIjEyIikscTQoIkYiKSkpLyhnUCh6cShkbWUobikscTQoIkMiKSxxNCgiWSIpPj40KSl8fDErKCFbXVt1bWVdPDwzKSk6MH0obik7ZS52YXJzLmtleVZhbGlkaXR5RGF0ZT1mdW5jdGlvbiBqZW4obil7''@;'; put 'put ''cmV0dXJuYCR7WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdW24uZ2V0TW9udGgoKV19ICR7bi5nZXREYXRlKCl9LCAke24uZ2V0RnVsbFll''@;'; put 'put ''YXIoKX1gfShuZXcgRGF0ZSg4NjRlNSooYSsxKSkpLGUudGVtcGxhdGU9bz5hPyJleHBpcmVkIjoidmFsaWQifWVsc2UiIiE9PW4mJihlLnRlbXBsYXRlPSJpbnZhbGlkIik7cmV0dXJuIU5XZSYmInZhbGlkIiE9PWUudGVtcGxhdGUmJihjb25zb2xlLndhcm4oVmVuW2UudGVtcGxhdGVdKGUu''@;'; put 'put ''dmFycykpLE5XZT0hMCksZS50ZW1wbGF0ZX12YXIgSGQ7IWZ1bmN0aW9uKG4pe24uTnVtYmVyPWNsYXNzIGV7Y29uc3RydWN0b3IodSl7dGhpcy52YWx1ZT11LHRoaXMudmFsdWU9V2dlKHRoaXMudmFsdWUscFdlKExvKHRoaXMudmFsdWUpKSl9fSxuLlN0cmluZz1jbGFzcyB0e2NvbnN0cnVj''@;'; put 'put ''dG9yKHUpe3RoaXMudmFsdWU9dX19LG4uQm9vbGVhbj1jbGFzcyBye2NvbnN0cnVjdG9yKHUpe3RoaXMudmFsdWU9dX19O2NsYXNzIGl7c3RhdGljIGdldFNpbmdsZXRvbkluc3RhbmNlKCl7cmV0dXJuIGkuaW5zdGFuY2V8fChpLmluc3RhbmNlPW5ldyBpKSxpLmluc3RhbmNlfX1uLkVtcHR5''@;'; put 'put ''PWksbi5Gb3JtdWxhPWNsYXNzIG97Y29uc3RydWN0b3IodSl7dGhpcy5mb3JtdWxhPXV9fSxuLkVycm9yPWNsYXNzIGF7Y29uc3RydWN0b3IodSxnKXt0aGlzLnZhbHVlPW5ldyBQdCh1LGcpfX19KEhkfHwoSGQ9e30pKTtjbGFzcyBZZW57Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMuY29uZmln''@;'; put 'put ''PWUsdGhpcy5kYXRlSGVscGVyPXQsdGhpcy5udW1iZXJMaXRlcmFsc0hlbHBlcj1yfXBhcnNlKGUpe2lmKG51bGw9PWUpcmV0dXJuIEhkLkVtcHR5LmdldFNpbmdsZXRvbkluc3RhbmNlKCk7aWYoIm51bWJlciI9PXR5cGVvZiBlKXJldHVybiBmV2UoZSk/bmV3IEhkLkVycm9yKHRuLk5VTSxk''@;'; put 'put ''ci5WYWx1ZUxhcmdlKTpuZXcgSGQuTnVtYmVyKGUpO2lmKCJib29sZWFuIj09dHlwZW9mIGUpcmV0dXJuIG5ldyBIZC5Cb29sZWFuKGUpO2lmKGUgaW5zdGFuY2VvZiBEYXRlKXtjb25zdCBpPXRoaXMuZGF0ZUhlbHBlci5kYXRlVG9OdW1iZXIoe2RheTplLmdldERhdGUoKSxtb250aDplLmdl''@;'; put 'put ''dE1vbnRoKCkrMSx5ZWFyOmUuZ2V0RnVsbFllYXIoKX0pK2xBKHtob3VyczplLmdldEhvdXJzKCksbWludXRlczplLmdldE1pbnV0ZXMoKSxzZWNvbmRzOmUuZ2V0U2Vjb25kcygpK2UuZ2V0TWlsbGlzZWNvbmRzKCkvMWUzfSk7cmV0dXJuIGk8MD9uZXcgSGQuRXJyb3IodG4uTlVNLGRyLkRh''@;'; put 'put ''dGVCb3VuZHMpOm5ldyBIZC5OdW1iZXIoaSUxPT0wP25ldyBZZ2UoaSwiRGF0ZSgpIik6aTwxP25ldyBHZ2UoaSwiRGF0ZSgpIik6bmV3ICRnZShpLCJEYXRlKCkiKSl9aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZihmdW5jdGlvbiB6ZW4obil7Y29uc3QgZT1uLnRvTG93ZXJDYXNlKCk7cmV0''@;'; put 'put ''dXJuInRydWUiPT09ZXx8ImZhbHNlIj09PWV9KGUpKXJldHVybiBuZXcgSGQuQm9vbGVhbigidHJ1ZSI9PT1lLnRvTG93ZXJDYXNlKCkpO2lmKGZ1bmN0aW9uIFVlbihuKXtyZXR1cm4gbi5zdGFydHNXaXRoKCI9Iil9KGUpKXJldHVybiBuZXcgSGQuRm9ybXVsYShlKTtpZihmdW5jdGlvbiBX''@;'; put 'put ''ZW4obixlKXtjb25zdCB0PW4udG9VcHBlckNhc2UoKTtyZXR1cm4vI1tBLVphLXowLTlcL10rWz8hXT8vLnRlc3QodCkmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfShlLHRoaXMuY29uZmlnLmVycm9yTWFwcGluZykpcmV0dXJuIG5ldyBIZC5FcnJvcih0aGlz''@;'; put 'put ''LmNvbmZpZy5lcnJvck1hcHBpbmdbZS50b1VwcGVyQ2FzZSgpXSk7e2xldCBpLHQ9ZS50cmltKCkscj0wO2lmKHQuZW5kc1dpdGgoIiUiKSlyPTEsdD10LnNsaWNlKDAsdC5sZW5ndGgtMSk7ZWxzZXtjb25zdCBsPXRoaXMuY3VycmVuY3lNYXRjaGVyKHQpO3ZvaWQgMCE9PWwmJihyPTIsW2ks''@;'; put 'put ''dF09bCl9Y29uc3Qgbz10aGlzLm51bWJlckxpdGVyYWxzSGVscGVyLm51bWVyaWNTdHJpbmdUb01heWJlTnVtYmVyKHQpO2lmKHZvaWQgMCE9PW8pe2xldCBsO3JldHVybiBsPTE9PT1yP25ldyBScShvLzEwMCk6Mj09PXI/bmV3IFpnZShvLGkpOm8sbmV3IEhkLk51bWJlcihsKX1jb25zdCBh''@;'; put 'put ''PXRoaXMuZGF0ZUhlbHBlci5kYXRlU3RyaW5nVG9EYXRlTnVtYmVyKHQpO3JldHVybiB2b2lkIDAhPT1hP25ldyBIZC5OdW1iZXIoYSk6bmV3IEhkLlN0cmluZyhlLnN0YXJ0c1dpdGgoIiciKT9lLnNsaWNlKDEpOmUpfX10aHJvdyBuZXcgRUp0KGUpfWN1cnJlbmN5TWF0Y2hlcihlKXtmb3Io''@;'; put 'put ''Y29uc3QgdCBvZiB0aGlzLmNvbmZpZy5jdXJyZW5jeVN5bWJvbCl7aWYoZS5zdGFydHNXaXRoKHQpKXJldHVyblt0LGUuc2xpY2UodC5sZW5ndGgpXTtpZihlLmVuZHNXaXRoKHQpKXJldHVyblt0LGUuc2xpY2UoMCxlLmxlbmd0aC10Lmxlbmd0aCldfX19dmFyIGNBPWZ1bmN0aW9uKG4pe3Jl''@;'; put 'put ''dHVybiBuW24uQ09QWT0wXT0iQ09QWSIsbltuLkNVVD0xXT0iQ1VUIixufShjQXx8e30pLHVmPWZ1bmN0aW9uKG4pe3JldHVybiBuW24uVkFMVUU9MF09IlZBTFVFIixuW24uRU1QVFk9MV09IkVNUFRZIixuW24uRk9STVVMQT0yXT0iRk9STVVMQSIsbltuLlBBUlNJTkdfRVJST1I9M109IlBB''@;'; put 'put ''UlNJTkdfRVJST1IiLG59KHVmfHx7fSk7Y2xhc3MgRldle2NvbnN0cnVjdG9yKGUsdCxyLGksbyl7dGhpcy5zb3VyY2VMZWZ0Q29ybmVyPWUsdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PXIsdGhpcy50eXBlPWksdGhpcy5jb250ZW50PW99KmdldENvbnRlbnQoZSl7aWYodm9pZCAwIT09dGhp''@;'; put 'put ''cy5jb250ZW50KWZvcihsZXQgdD0wO3Q8dGhpcy5oZWlnaHQ7Kyt0KWZvcihsZXQgcj0wO3I8dGhpcy53aWR0aDsrK3IpeWllbGRbQm8oZS5zaGVldCxlLmNvbCtyLGUucm93K3QpLHRoaXMuY29udGVudFt0XVtyXV19fWNsYXNzIFplbntjb25zdHJ1Y3RvcihlLHQscil7dGhpcy5kZXBlbmRl''@;'; put 'put ''bmN5R3JhcGg9dCx0aGlzLm9wZXJhdGlvbnM9cix0aGlzLm1heFJvd3M9ZS5tYXhSb3dzLHRoaXMubWF4Q29sdW1ucz1lLm1heENvbHVtbnN9Y3V0KGUsdCxyKXt0aGlzLmNsaXBib2FyZD1uZXcgRldlKGUsdCxyLGNBLkNVVCl9Y29weShlLHQscil7Y29uc3QgaT1bXTtmb3IobGV0IG89MDtv''@;'; put 'put ''PHI7KytvKXtpW29dPVtdO2ZvcihsZXQgYT0wO2E8dDsrK2Epe2NvbnN0IGw9dGhpcy5vcGVyYXRpb25zLmdldENsaXBib2FyZENlbGwoQm8oZS5zaGVldCxlLmNvbCthLGUucm93K28pKTtpW29dLnB1c2gobCl9fXRoaXMuY2xpcGJvYXJkPW5ldyBGV2UoZSx0LHIsY0EuQ09QWSxpKX1hYm9y''@;'; put 'put ''dEN1dCgpe3RoaXMuY2xpcGJvYXJkJiZ0aGlzLmNsaXBib2FyZC50eXBlPT09Y0EuQ1VUJiZ0aGlzLmNsZWFyKCl9Y2xlYXIoKXt0aGlzLmNsaXBib2FyZD12b2lkIDB9ZW5zdXJlSXRJc1Bvc3NpYmxlVG9Db3B5UGFzdGUoZSl7aWYodm9pZCAwPT09dGhpcy5jbGlwYm9hcmQpcmV0dXJuO2lm''@;'; put 'put ''KG5wKGUpfHwhdGhpcy5kZXBlbmRlbmN5R3JhcGguc2hlZXRNYXBwaW5nLmhhc1NoZWV0V2l0aElkKGUuc2hlZXQpKXRocm93IG5ldyBuMCgiYSB2YWxpZCB0YXJnZXQgYWRkcmVzcy4iKTtjb25zdCB0PWJhLnNwYW5Gcm9tKGUsdGhpcy5jbGlwYm9hcmQud2lkdGgsdGhpcy5jbGlwYm9hcmQu''@;'; put 'put ''aGVpZ2h0KTtpZih0LmV4Y2VlZHNTaGVldFNpemVMaW1pdHModGhpcy5tYXhDb2x1bW5zLHRoaXMubWF4Um93cykpdGhyb3cgbmV3IHRBO2lmKHRoaXMuZGVwZW5kZW5jeUdyYXBoLmFycmF5TWFwcGluZy5pc0Zvcm11bGFBcnJheUluUmFuZ2UodCkpdGhyb3cgbmV3IEVycm9yKCJJdCBpcyBu''@;'; put 'put ''b3QgcG9zc2libGUgdG8gcGFzdGUgb250byBhbiBhcnJheSIpfWlzQ3V0Q2xpcGJvYXJkKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuY2xpcGJvYXJkJiZ0aGlzLmNsaXBib2FyZC50eXBlPT09Y0EuQ1VUfWlzQ29weUNsaXBib2FyZCgpe3JldHVybiB2b2lkIDAhPT10aGlzLmNsaXBib2FyZCYm''@;'; put 'put ''dGhpcy5jbGlwYm9hcmQudHlwZT09PWNBLkNPUFl9fWNsYXNzIFdxe2NvbnN0cnVjdG9yKGUsdCxyLGkpe3RoaXMuZGlzcGxheU5hbWU9ZSx0aGlzLmFkZHJlc3M9dCx0aGlzLmFkZGVkPXIsdGhpcy5vcHRpb25zPWl9bm9ybWFsaXplRXhwcmVzc2lvbk5hbWUoKXtyZXR1cm4gdGhpcy5kaXNw''@;'; put 'put ''bGF5TmFtZS50b0xvd2VyQ2FzZSgpfWNvcHkoKXtyZXR1cm4gbmV3IFdxKHRoaXMuZGlzcGxheU5hbWUsdGhpcy5hZGRyZXNzLHRoaXMuYWRkZWQsdGhpcy5vcHRpb25zKX19Y2xhc3MgR2Vue2NvbnN0cnVjdG9yKCl7dGhpcy5tYXBwaW5nPW5ldyBNYXB9aGFzKGUpe3JldHVybiB0aGlzLm1h''@;'; put 'put ''cHBpbmcuaGFzKHRoaXMubm9ybWFsaXplRXhwcmVzc2lvbk5hbWUoZSkpfWlzTmFtZUF2YWlsYWJsZShlKXtjb25zdCB0PXRoaXMubm9ybWFsaXplRXhwcmVzc2lvbk5hbWUoZSkscj10aGlzLm1hcHBpbmcuZ2V0KHQpO3JldHVybiEociYmci5hZGRlZCl9YWRkKGUpe3RoaXMubWFwcGluZy5z''@;'; put 'put ''ZXQoZS5ub3JtYWxpemVFeHByZXNzaW9uTmFtZSgpLGUpfWdldChlKXtyZXR1cm4gdGhpcy5tYXBwaW5nLmdldCh0aGlzLm5vcm1hbGl6ZUV4cHJlc3Npb25OYW1lKGUpKX1nZXRFeGlzdGluZyhlKXtjb25zdCB0PXRoaXMubWFwcGluZy5nZXQodGhpcy5ub3JtYWxpemVFeHByZXNzaW9uTmFt''@;'; put 'put ''ZShlKSk7aWYodCYmdC5hZGRlZClyZXR1cm4gdH1yZW1vdmUoZSl7Y29uc3QgdD10aGlzLm5vcm1hbGl6ZUV4cHJlc3Npb25OYW1lKGUpLHI9dGhpcy5tYXBwaW5nLmdldCh0KTtyJiYoci5hZGRlZD0hMSl9Z2V0QWxsTmFtZWRFeHByZXNzaW9ucygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMu''@;'; put 'put ''bWFwcGluZy52YWx1ZXMoKSkuZmlsdGVyKGU9PmUuYWRkZWQpfW5vcm1hbGl6ZUV4cHJlc3Npb25OYW1lKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCl9fWNsYXNzIFBXZXtjb25zdHJ1Y3Rvcigpe3RoaXMubWFwcGluZz1uZXcgTWFwfWFkZChlKXt0aGlzLm1hcHBpbmcuc2V0KHRoaXMubm9y''@;'; put 'put ''bWFsaXplRXhwcmVzc2lvbk5hbWUoZS5kaXNwbGF5TmFtZSksZSl9Z2V0KGUpe3JldHVybiB0aGlzLm1hcHBpbmcuZ2V0KHRoaXMubm9ybWFsaXplRXhwcmVzc2lvbk5hbWUoZSkpfWhhcyhlKXtyZXR1cm4gdGhpcy5tYXBwaW5nLmhhcyh0aGlzLm5vcm1hbGl6ZUV4cHJlc3Npb25OYW1lKGUp''@;'; put 'put ''KX1nZXRBbGxOYW1lZEV4cHJlc3Npb25zKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5tYXBwaW5nLnZhbHVlcygpKS5maWx0ZXIoZT0+ZS5hZGRlZCl9aXNOYW1lQXZhaWxhYmxlKGUpe2NvbnN0IHQ9dGhpcy5ub3JtYWxpemVFeHByZXNzaW9uTmFtZShlKTtyZXR1cm4hdGhpcy5tYXBwaW5n''@;'; put 'put ''Lmhhcyh0KX1yZW1vdmUoZSl7Y29uc3QgdD10aGlzLm5vcm1hbGl6ZUV4cHJlc3Npb25OYW1lKGUpO3RoaXMubWFwcGluZy5nZXQodCkmJnRoaXMubWFwcGluZy5kZWxldGUodCl9bm9ybWFsaXplRXhwcmVzc2lvbk5hbWUoZSl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKX19bGV0IFlxPSgoKT0+''@;'; put 'put ''e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm5leHROYW1lZEV4cHJlc3Npb25Sb3c9MCx0aGlzLndvcmtib29rU3RvcmU9bmV3IEdlbix0aGlzLndvcmtzaGVldFN0b3Jlcz1uZXcgTWFwLHRoaXMuYWRkcmVzc0NhY2hlPW5ldyBNYXB9aXNOYW1lQXZhaWxhYmxlKHQscil7dmFyIGksbzty''@;'; put 'put ''ZXR1cm4gdm9pZCAwPT09cj90aGlzLndvcmtib29rU3RvcmUuaXNOYW1lQXZhaWxhYmxlKHQpOm51bGw9PT0obz1udWxsPT09KGk9dGhpcy53b3Jrc2hlZXRTdG9yZShyKSl8fHZvaWQgMD09PWk/dm9pZCAwOmkuaXNOYW1lQXZhaWxhYmxlKHQpKXx8dm9pZCAwPT09b3x8b31uYW1lZEV4cHJl''@;'; put 'put ''c3Npb25JbkFkZHJlc3ModCl7Y29uc3Qgcj10aGlzLmFkZHJlc3NDYWNoZS5nZXQodCk7aWYociYmci5hZGRlZClyZXR1cm4gcn1uYW1lZEV4cHJlc3Npb25Gb3JTY29wZSh0LHIpe3ZhciBpO3JldHVybiB2b2lkIDA9PT1yP3RoaXMud29ya2Jvb2tTdG9yZS5nZXRFeGlzdGluZyh0KTpudWxs''@;'; put 'put ''PT09KGk9dGhpcy53b3Jrc2hlZXRTdG9yZShyKSl8fHZvaWQgMD09PWk/dm9pZCAwOmkuZ2V0KHQpfW5lYXJlc3ROYW1lZEV4cHJlc3Npb24odCxyKXt2YXIgaSxvO3JldHVybiBudWxsIT09KG89bnVsbD09PShpPXRoaXMud29ya3NoZWV0U3RvcmUocikpfHx2b2lkIDA9PT1pP3ZvaWQgMDpp''@;'; put 'put ''LmdldCh0KSkmJnZvaWQgMCE9PW8/bzp0aGlzLndvcmtib29rU3RvcmUuZ2V0RXhpc3RpbmcodCl9aXNFeHByZXNzaW9uSW5TY29wZSh0LHIpe3ZhciBpLG87cmV0dXJuIG51bGwhPT0obz1udWxsPT09KGk9dGhpcy53b3Jrc2hlZXRTdG9yZShyKSl8fHZvaWQgMD09PWk/dm9pZCAwOmkuaGFz''@;'; put 'put ''KHQpKSYmdm9pZCAwIT09byYmb31pc05hbWVWYWxpZCh0KXtjb25zdCByPW5ldyBSZWdFeHAoYF4ke016ZX0kYCksaT1uZXcgUmVnRXhwKGBeJHtBemV9JGApLG89bmV3IFJlZ0V4cChgXiR7a3plfSRgKTtyZXR1cm4hci50ZXN0KHQpJiYhaS50ZXN0KHQpJiZvLnRlc3QodCl9YWRkTmFtZWRF''@;'; put 'put ''eHByZXNzaW9uKHQscixpKXtjb25zdCBvPXZvaWQgMD09PXI/dGhpcy53b3JrYm9va1N0b3JlOnRoaXMud29ya3NoZWV0U3RvcmVPckNyZWF0ZShyKTtsZXQgYT1vLmdldCh0KTtyZXR1cm4gdm9pZCAwIT09YT8oYS5hZGRlZD0hMCxhLmRpc3BsYXlOYW1lPXQsYS5vcHRpb25zPWkpOihhPW5l''@;'; put 'put ''dyBXcSh0LHRoaXMubmV4dEFkZHJlc3MoKSwhMCxpKSxvLmFkZChhKSksdGhpcy5hZGRyZXNzQ2FjaGUuc2V0KGEuYWRkcmVzcy5yb3csYSksYX1yZXN0b3JlTmFtZWRFeHByZXNzaW9uKHQscil7Y29uc3QgaT12b2lkIDA9PT1yP3RoaXMud29ya2Jvb2tTdG9yZTp0aGlzLndvcmtzaGVldFN0''@;'; put 'put ''b3JlT3JDcmVhdGUocik7cmV0dXJuIHQuYWRkZWQ9ITAsaS5hZGQodCksdGhpcy5hZGRyZXNzQ2FjaGUuc2V0KHQuYWRkcmVzcy5yb3csdCksdH1uYW1lZEV4cHJlc3Npb25PclBsYWNlaG9sZGVyKHQscil7dmFyIGk7cmV0dXJuIG51bGwhPT0oaT10aGlzLndvcmtzaGVldFN0b3JlT3JDcmVh''@;'; put 'put ''dGUocikuZ2V0KHQpKSYmdm9pZCAwIT09aT9pOnRoaXMud29ya2Jvb2tOYW1lZEV4cHJlc3Npb25PclBsYWNlaG9sZGVyKHQpfXdvcmtib29rTmFtZWRFeHByZXNzaW9uT3JQbGFjZWhvbGRlcih0KXtsZXQgcj10aGlzLndvcmtib29rU3RvcmUuZ2V0KHQpO3JldHVybiB2b2lkIDA9PT1yJiYo''@;'; put 'put ''cj1uZXcgV3EodCx0aGlzLm5leHRBZGRyZXNzKCksITEpLHRoaXMud29ya2Jvb2tTdG9yZS5hZGQocikpLHJ9cmVtb3ZlKHQscil7bGV0IGk7aT12b2lkIDA9PT1yP3RoaXMud29ya2Jvb2tTdG9yZTp0aGlzLndvcmtzaGVldFN0b3JlKHIpO2NvbnN0IG89aT8uZ2V0KHQpO2lmKHZvaWQgMD09''@;'; put 'put ''PWl8fHZvaWQgMD09PW98fCFvLmFkZGVkKXRocm93IEVycm9yKCJOYW1lZCBleHByZXNzaW9uIGRvZXMgbm90IGV4aXN0Iik7aS5yZW1vdmUodCksaSBpbnN0YW5jZW9mIFBXZSYmMD09PWkubWFwcGluZy5zaXplJiZ0aGlzLndvcmtzaGVldFN0b3Jlcy5kZWxldGUociksdGhpcy5hZGRyZXNz''@;'; put 'put ''Q2FjaGUuZGVsZXRlKG8uYWRkcmVzcy5yb3cpfWdldEFsbE5hbWVkRXhwcmVzc2lvbnNOYW1lc0luU2NvcGUodCl7cmV0dXJuIHRoaXMuZ2V0QWxsTmFtZWRFeHByZXNzaW9ucygpLmZpbHRlcigoe3Njb3BlOnJ9KT0+cj09PXQpLm1hcChyPT5yLmV4cHJlc3Npb24uZGlzcGxheU5hbWUpfWdl''@;'; put 'put ''dEFsbE5hbWVkRXhwcmVzc2lvbnNOYW1lcygpe3JldHVybiB0aGlzLmdldEFsbE5hbWVkRXhwcmVzc2lvbnMoKS5tYXAodD0+dC5leHByZXNzaW9uLmRpc3BsYXlOYW1lKX1nZXRBbGxOYW1lZEV4cHJlc3Npb25zKCl7Y29uc3QgdD1bXTtyZXR1cm4gdGhpcy53b3JrYm9va1N0b3JlLmdldEFs''@;'; put 'put ''bE5hbWVkRXhwcmVzc2lvbnMoKS5mb3JFYWNoKHI9Pnt0LnB1c2goe2V4cHJlc3Npb246cixzY29wZTp2b2lkIDB9KX0pLHRoaXMud29ya3NoZWV0U3RvcmVzLmZvckVhY2goKHIsaSk9PntyLmdldEFsbE5hbWVkRXhwcmVzc2lvbnMoKS5mb3JFYWNoKG89Pnt0LnB1c2goe2V4cHJlc3Npb246''@;'; put 'put ''byxzY29wZTppfSl9KX0pLHR9Z2V0QWxsTmFtZWRFeHByZXNzaW9uc0ZvclNjb3BlKHQpe3ZhciByLGk7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy53b3JrYm9va1N0b3JlLmdldEFsbE5hbWVkRXhwcmVzc2lvbnMoKTpudWxsIT09KGk9bnVsbD09PShyPXRoaXMud29ya3NoZWV0U3RvcmVzLmdl''@;'; put 'put ''dCh0KSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0QWxsTmFtZWRFeHByZXNzaW9ucygpKSYmdm9pZCAwIT09aT9pOltdfXdvcmtzaGVldFN0b3JlT3JDcmVhdGUodCl7bGV0IHI9dGhpcy53b3Jrc2hlZXRTdG9yZXMuZ2V0KHQpO3JldHVybiByfHwocj1uZXcgUFdlLHRoaXMud29ya3NoZWV0''@;'; put 'put ''U3RvcmVzLnNldCh0LHIpKSxyfXdvcmtzaGVldFN0b3JlKHQpe3JldHVybiB0aGlzLndvcmtzaGVldFN0b3Jlcy5nZXQodCl9bmV4dEFkZHJlc3MoKXtyZXR1cm4gQm8obi5TSEVFVF9GT1JfV09SS0JPT0tfRVhQUkVTU0lPTlMsMCx0aGlzLm5leHROYW1lZEV4cHJlc3Npb25Sb3crKyl9fXJl''@;'; put 'put ''dHVybiBuLlNIRUVUX0ZPUl9XT1JLQk9PS19FWFBSRVNTSU9OUz0tMSxufSkoKTtjb25zdCBKXz1uPT57c3dpdGNoKG4udHlwZSl7Y2FzZSBybi5FTVBUWTpjYXNlIHJuLk5VTUJFUjpjYXNlIHJuLlNUUklORzpjYXNlIHJuLkVSUk9SOmNhc2Ugcm4uRVJST1JfV0lUSF9SQVdfSU5QVVQ6cmV0''@;'; put 'put ''dXJuITE7Y2FzZSBybi5DRUxMX1JFRkVSRU5DRTpyZXR1cm4hbi5yZWZlcmVuY2UuaXNBYnNvbHV0ZSgpO2Nhc2Ugcm4uQ0VMTF9SQU5HRTpjYXNlIHJuLkNPTFVNTl9SQU5HRTpjYXNlIHJuLlJPV19SQU5HRTpyZXR1cm4hbi5zdGFydC5pc0Fic29sdXRlKCk7Y2FzZSBybi5OQU1FRF9FWFBS''@;'; put 'put ''RVNTSU9OOnJldHVybiExO2Nhc2Ugcm4uUEVSQ0VOVF9PUDpjYXNlIHJuLlBMVVNfVU5BUllfT1A6Y2FzZSBybi5NSU5VU19VTkFSWV9PUDpyZXR1cm4gSl8obi52YWx1ZSk7Y2FzZSBybi5DT05DQVRFTkFURV9PUDpjYXNlIHJuLkVRVUFMU19PUDpjYXNlIHJuLk5PVF9FUVVBTF9PUDpjYXNl''@;'; put 'put ''IHJuLkxFU1NfVEhBTl9PUDpjYXNlIHJuLkdSRUFURVJfVEhBTl9PUDpjYXNlIHJuLkxFU1NfVEhBTl9PUl9FUVVBTF9PUDpjYXNlIHJuLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9PUDpjYXNlIHJuLk1JTlVTX09QOmNhc2Ugcm4uUExVU19PUDpjYXNlIHJuLlRJTUVTX09QOmNhc2Ugcm4uRElW''@;'; put 'put ''X09QOmNhc2Ugcm4uUE9XRVJfT1A6cmV0dXJuIEpfKG4ubGVmdCl8fEpfKG4ucmlnaHQpO2Nhc2Ugcm4uUEFSRU5USEVTSVM6cmV0dXJuIEpfKG4uZXhwcmVzc2lvbik7Y2FzZSBybi5GVU5DVElPTl9DQUxMOnJldHVybiBuLmFyZ3Muc29tZShlPT5KXyhlKSk7Y2FzZSBybi5BUlJBWTpyZXR1''@;'; put 'put ''cm4gbi5hcmdzLnNvbWUoZT0+ZS5zb21lKHQ9PkpfKHQpKSl9fTtjbGFzcyBleXtwZXJmb3JtRWFnZXJUcmFuc2Zvcm1hdGlvbnMoZSx0KXtmb3IoY29uc3QgciBvZiBlLmFycmF5Rm9ybXVsYU5vZGVzKCkpe2NvbnN0W2ksb109dGhpcy50cmFuc2Zvcm1TaW5nbGVBc3Qoci5nZXRGb3JtdWxh''@;'; put 'put ''KGUubGF6aWx5VHJhbnNmb3JtaW5nQXN0U2VydmljZSksci5nZXRBZGRyZXNzKGUubGF6aWx5VHJhbnNmb3JtaW5nQXN0U2VydmljZSkpLGE9dC5yZW1lbWJlck5ld0FzdChpKTtyLnNldEZvcm11bGEoYSksci5zZXRBZGRyZXNzKG8pfX10cmFuc2Zvcm1TaW5nbGVBc3QoZSx0KXtyZXR1cm5b''@;'; put 'put ''dGhpcy50cmFuc2Zvcm1Bc3QoZSx0KSx0aGlzLmZpeE5vZGVBZGRyZXNzKHQpXX10cmFuc2Zvcm1Bc3QoZSx0KXtzd2l0Y2goZS50eXBlKXtjYXNlIHJuLkNFTExfUkVGRVJFTkNFOnJldHVybiB0aGlzLnRyYW5zZm9ybUNlbGxSZWZlcmVuY2VBc3QoZSx0KTtjYXNlIHJuLkNFTExfUkFOR0U6''@;'; put 'put ''cmV0dXJuIHRoaXMudHJhbnNmb3JtQ2VsbFJhbmdlQXN0KGUsdCk7Y2FzZSBybi5DT0xVTU5fUkFOR0U6cmV0dXJuIHRoaXMudHJhbnNmb3JtQ29sdW1uUmFuZ2VBc3QoZSx0KTtjYXNlIHJuLlJPV19SQU5HRTpyZXR1cm4gdGhpcy50cmFuc2Zvcm1Sb3dSYW5nZUFzdChlLHQpO2Nhc2Ugcm4u''@;'; put 'put ''RU1QVFk6Y2FzZSBybi5FUlJPUjpjYXNlIHJuLk5VTUJFUjpjYXNlIHJuLk5BTUVEX0VYUFJFU1NJT046Y2FzZSBybi5FUlJPUl9XSVRIX1JBV19JTlBVVDpjYXNlIHJuLlNUUklORzpyZXR1cm4gZTtjYXNlIHJuLlBFUkNFTlRfT1A6Y2FzZSBybi5NSU5VU19VTkFSWV9PUDpjYXNlIHJuLlBM''@;'; put 'put ''VVNfVU5BUllfT1A6cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7dmFsdWU6dGhpcy50cmFuc2Zvcm1Bc3QoZS52YWx1ZSx0KX0pO2Nhc2Ugcm4uRlVOQ1RJT05fQ0FMTDpyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtwcm9jZWR1cmVO''@;'; put 'put ''YW1lOmUucHJvY2VkdXJlTmFtZSxhcmdzOmUuYXJncy5tYXAocj0+dGhpcy50cmFuc2Zvcm1Bc3Qocix0KSl9KTtjYXNlIHJuLlBBUkVOVEhFU0lTOnJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2V4cHJlc3Npb246dGhpcy50cmFuc2Zvcm1Bc3QoZS5leHByZXNz''@;'; put 'put ''aW9uLHQpfSk7Y2FzZSBybi5BUlJBWTpyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHthcmdzOmUuYXJncy5tYXAocj0+ci5tYXAoaT0+dGhpcy50cmFuc2Zvcm1Bc3QoaSx0KSkpfSk7ZGVmYXVsdDpyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9''@;'; put 'put ''LGUpLHtsZWZ0OnRoaXMudHJhbnNmb3JtQXN0KGUubGVmdCx0KSxyaWdodDp0aGlzLnRyYW5zZm9ybUFzdChlLnJpZ2h0LHQpfSl9fXRyYW5zZm9ybUNlbGxSZWZlcmVuY2VBc3QoZSx0KXtjb25zdCByPXRoaXMudHJhbnNmb3JtQ2VsbEFkZHJlc3MoZS5yZWZlcmVuY2UsdCk7cmV0dXJuIHIg''@;'; put 'put ''aW5zdGFuY2VvZiB4dT9PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse3JlZmVyZW5jZTpyfSk6cj09PXRuLlJFRj9INihuZXcgUHQodG4uUkVGKSk6ZX10cmFuc2Zvcm1DZWxsUmFuZ2VBc3QoZSx0KXtjb25zdCByPXRoaXMudHJhbnNmb3JtQ2VsbFJhbmdlKGUuc3RhcnQsZS5l''@;'; put 'put ''bmQsdCk7cmV0dXJuIEFycmF5LmlzQXJyYXkocik/T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtzdGFydDpyWzBdLGVuZDpyWzFdfSk6cj09PXRuLlJFRj9INihuZXcgUHQodG4uUkVGKSk6ZX10cmFuc2Zvcm1Db2x1bW5SYW5nZUFzdChlLHQpe2NvbnN0IHI9dGhpcy50cmFu''@;'; put 'put ''c2Zvcm1Db2x1bW5SYW5nZShlLnN0YXJ0LGUuZW5kLHQpO3JldHVybiBBcnJheS5pc0FycmF5KHIpP09iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7c3RhcnQ6clswXSxlbmQ6clsxXX0pOnI9PT10bi5SRUY/SDYobmV3IFB0KHRuLlJFRikpOmV9dHJhbnNmb3JtUm93UmFuZ2VB''@;'; put 'put ''c3QoZSx0KXtjb25zdCByPXRoaXMudHJhbnNmb3JtUm93UmFuZ2UoZS5zdGFydCxlLmVuZCx0KTtyZXR1cm4gQXJyYXkuaXNBcnJheShyKT9PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse3N0YXJ0OnJbMF0sZW5kOnJbMV19KTpyPT09dG4uUkVGP0g2KG5ldyBQdCh0bi5SRUYp''@;'; put 'put ''KTplfX1jbGFzcyAkZW4gZXh0ZW5kcyBleXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuY29sdW1uc1NwYW49ZX1nZXQgc2hlZXQoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU3Bhbi5zaGVldH1pc0lycmV2ZXJzaWJsZSgpe3JldHVybiExfXRyYW5zZm9ybVJvd1JhbmdlQXN0KGUsdCl7cmV0''@;'; put 'put ''dXJuIGV9dHJhbnNmb3JtQ2VsbFJhbmdlKGUsdCxyKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm1SYW5nZShlLHQscil9dHJhbnNmb3JtUm93UmFuZ2UoZSx0LHIpe3Rocm93IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX10cmFuc2Zvcm1Db2x1bW5SYW5nZShlLHQscil7cmV0dXJuIHRoaXMudHJh''@;'; put 'put ''bnNmb3JtUmFuZ2UoZSx0LHIpfXRyYW5zZm9ybUNlbGxBZGRyZXNzKGUsdCl7Y29uc3Qgcj0kNChlLHQpO2lmKHIhPT10aGlzLmNvbHVtbnNTcGFuLnNoZWV0JiZ0LnNoZWV0IT09dGhpcy5jb2x1bW5zU3Bhbi5zaGVldClyZXR1cm4hMTtjb25zdCBpPWUudG9TaW1wbGVDb2x1bW5BZGRyZXNz''@;'; put 'put ''KHQpO3JldHVybiByPT09dGhpcy5jb2x1bW5zU3Bhbi5zaGVldCYmdC5zaGVldCE9PXRoaXMuY29sdW1uc1NwYW4uc2hlZXQ/dGhpcy5jb2x1bW5zU3Bhbi5jb2x1bW5TdGFydDw9aS5jb2wmJmUuc2hpZnRlZEJ5Q29sdW1ucyh0aGlzLmNvbHVtbnNTcGFuLm51bWJlck9mQ29sdW1ucyk6dC5z''@;'; put 'put ''aGVldD09PXRoaXMuY29sdW1uc1NwYW4uc2hlZXQmJnIhPT10aGlzLmNvbHVtbnNTcGFuLnNoZWV0PyEoZS5pc0NvbHVtbkFic29sdXRlKCl8fHQuY29sPHRoaXMuY29sdW1uc1NwYW4uY29sdW1uU3RhcnQpJiZlLnNoaWZ0ZWRCeUNvbHVtbnMoLXRoaXMuY29sdW1uc1NwYW4ubnVtYmVyT2ZD''@;'; put 'put ''b2x1bW5zKTplLmlzQ29sdW1uQWJzb2x1dGUoKT8hKGUuY29sPHRoaXMuY29sdW1uc1NwYW4uY29sdW1uU3RhcnQpJiZlLnNoaWZ0ZWRCeUNvbHVtbnModGhpcy5jb2x1bW5zU3Bhbi5udW1iZXJPZkNvbHVtbnMpOmUudG9TaW1wbGVDb2x1bW5BZGRyZXNzKHQpLmNvbDx0aGlzLmNvbHVtbnNT''@;'; put 'put ''cGFuLmNvbHVtblN0YXJ0PyEodC5jb2w8dGhpcy5jb2x1bW5zU3Bhbi5jb2x1bW5TdGFydCkmJmUuc2hpZnRlZEJ5Q29sdW1ucygtdGhpcy5jb2x1bW5zU3Bhbi5udW1iZXJPZkNvbHVtbnMpOnQuY29sPHRoaXMuY29sdW1uc1NwYW4uY29sdW1uU3RhcnQmJmUuc2hpZnRlZEJ5Q29sdW1ucyh0''@;'; put 'put ''aGlzLmNvbHVtbnNTcGFuLm51bWJlck9mQ29sdW1ucyl9Zml4Tm9kZUFkZHJlc3MoZSl7cmV0dXJuIHRoaXMuY29sdW1uc1NwYW4uc2hlZXQ9PT1lLnNoZWV0JiZ0aGlzLmNvbHVtbnNTcGFuLmNvbHVtblN0YXJ0PD1lLmNvbD9PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2Nv''@;'; put 'put ''bDplLmNvbCt0aGlzLmNvbHVtbnNTcGFuLm51bWJlck9mQ29sdW1uc30pOmV9dHJhbnNmb3JtUmFuZ2UoZSx0LHIpe2NvbnN0IGk9dGhpcy50cmFuc2Zvcm1DZWxsQWRkcmVzcyhlLHIpLG89dGhpcy50cmFuc2Zvcm1DZWxsQWRkcmVzcyh0LHIpO3JldHVybiBpPT09dG4uUkVGfHxvPT09dG4u''@;'; put 'put ''UkVGP3RuLlJFRjohKCFpJiYhbykmJltpfHxlLG98fHRdfX1jbGFzcyBobWUgZXh0ZW5kcyBleXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMucm93c1NwYW49ZX1nZXQgc2hlZXQoKXtyZXR1cm4gdGhpcy5yb3dzU3Bhbi5zaGVldH1pc0lycmV2ZXJzaWJsZSgpe3JldHVybiExfXRyYW5z''@;'; put 'put ''Zm9ybUNvbHVtblJhbmdlQXN0KGUsdCl7cmV0dXJuIGV9dHJhbnNmb3JtQ2VsbFJhbmdlKGUsdCxyKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm1SYW5nZShlLHQscil9dHJhbnNmb3JtUm93UmFuZ2UoZSx0LHIpe3JldHVybiB0aGlzLnRyYW5zZm9ybVJhbmdlKGUsdCxyKX10cmFuc2Zvcm1Db2x1''@;'; put 'put ''bW5SYW5nZShlLHQscil7dGhyb3cgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfXRyYW5zZm9ybUNlbGxBZGRyZXNzKGUsdCl7Y29uc3Qgcj0kNChlLHQpO2lmKHIhPT10aGlzLnJvd3NTcGFuLnNoZWV0JiZ0LnNoZWV0IT09dGhpcy5yb3dzU3Bhbi5zaGVldClyZXR1cm4hMTtjb25zdCBpPWUu''@;'; put 'put ''dG9TaW1wbGVSb3dBZGRyZXNzKHQpO3JldHVybiByPT09dGhpcy5yb3dzU3Bhbi5zaGVldCYmdC5zaGVldCE9PXRoaXMucm93c1NwYW4uc2hlZXQ/dGhpcy5yb3dzU3Bhbi5yb3dTdGFydDw9aS5yb3cmJmUuc2hpZnRlZEJ5Um93cyh0aGlzLnJvd3NTcGFuLm51bWJlck9mUm93cyk6dC5zaGVl''@;'; put 'put ''dD09PXRoaXMucm93c1NwYW4uc2hlZXQmJnIhPT10aGlzLnJvd3NTcGFuLnNoZWV0PyEoZS5pc1Jvd0Fic29sdXRlKCl8fHQucm93PHRoaXMucm93c1NwYW4ucm93U3RhcnQpJiZlLnNoaWZ0ZWRCeVJvd3MoLXRoaXMucm93c1NwYW4ubnVtYmVyT2ZSb3dzKTplLmlzUm93QWJzb2x1dGUoKT8h''@;'; put 'put ''KGUucm93PHRoaXMucm93c1NwYW4ucm93U3RhcnQpJiZlLnNoaWZ0ZWRCeVJvd3ModGhpcy5yb3dzU3Bhbi5udW1iZXJPZlJvd3MpOmkucm93PHRoaXMucm93c1NwYW4ucm93U3RhcnQ/ISh0LnJvdzx0aGlzLnJvd3NTcGFuLnJvd1N0YXJ0KSYmZS5zaGlmdGVkQnlSb3dzKC10aGlzLnJvd3NT''@;'; put 'put ''cGFuLm51bWJlck9mUm93cyk6dC5yb3c8dGhpcy5yb3dzU3Bhbi5yb3dTdGFydCYmZS5zaGlmdGVkQnlSb3dzKHRoaXMucm93c1NwYW4ubnVtYmVyT2ZSb3dzKX1maXhOb2RlQWRkcmVzcyhlKXtyZXR1cm4gdGhpcy5yb3dzU3Bhbi5zaGVldD09PWUuc2hlZXQmJnRoaXMucm93c1NwYW4ucm93''@;'; put 'put ''U3RhcnQ8PWUucm93P09iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7cm93OmUucm93K3RoaXMucm93c1NwYW4ubnVtYmVyT2ZSb3dzfSk6ZX10cmFuc2Zvcm1SYW5nZShlLHQscil7Y29uc3QgaT10aGlzLnRyYW5zZm9ybUNlbGxBZGRyZXNzKGUsciksbz10aGlzLnRyYW5zZm9y''@;'; put 'put ''bUNlbGxBZGRyZXNzKHQscik7cmV0dXJuIGk9PT10bi5SRUZ8fG89PT10bi5SRUY/dG4uUkVGOiEoIWkmJiFvKSYmW2l8fGUsb3x8dF19fWNsYXNzIHFlbiBleHRlbmRzIGV5e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5zaGVldD1lfWlzSXJyZXZlcnNpYmxlKCl7cmV0dXJuITB9Zml4''@;'; put 'put ''Tm9kZUFkZHJlc3MoZSl7cmV0dXJuIGV9dHJhbnNmb3JtQ2VsbEFkZHJlc3MoZSx0KXtyZXR1cm4hIWUuaXNJbnZhbGlkKHQpJiZ0bi5SRUZ9dHJhbnNmb3JtQ2VsbFJhbmdlKGUsdCxyKXtyZXR1cm4hKCFlLmlzSW52YWxpZChyKSYmIXQuaXNJbnZhbGlkKHIpKSYmdG4uUkVGfXRyYW5zZm9y''@;'; put 'put ''bUNvbHVtblJhbmdlKGUsdCxyKXtyZXR1cm4hKCFlLmlzSW52YWxpZChyKSYmIXQuaXNJbnZhbGlkKHIpKSYmdG4uUkVGfXRyYW5zZm9ybVJvd1JhbmdlKGUsdCxyKXtyZXR1cm4hKCFlLmlzSW52YWxpZChyKSYmIXQuaXNJbnZhbGlkKHIpKSYmdG4uUkVGfX1jbGFzcyBLZW4gZXh0ZW5kcyBl''@;'; put 'put ''eXtjb25zdHJ1Y3RvcihlLHQscixpKXtzdXBlcigpLHRoaXMuc291cmNlUmFuZ2U9ZSx0aGlzLnRvUmlnaHQ9dCx0aGlzLnRvQm90dG9tPXIsdGhpcy50b1NoZWV0PWksdGhpcy5kZXBlbmRlbnRGb3JtdWxhVHJhbnNmb3JtZXI9bmV3IFhlbihlLHQscixpKX1nZXQgc2hlZXQoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5zb3VyY2VSYW5nZS5zaGVldH1pc0lycmV2ZXJzaWJsZSgpe3JldHVybiEwfXRyYW5zZm9ybVNpbmdsZUFzdChlLHQpe3JldHVybiB0aGlzLnNvdXJjZVJhbmdlLmFkZHJlc3NJblJhbmdlKHQpP1t0aGlzLnRyYW5zZm9ybUFzdChlLHQpLHRoaXMuZml4Tm9kZUFkZHJlc3ModCldOnRo''@;'; put 'put ''aXMuZGVwZW5kZW50Rm9ybXVsYVRyYW5zZm9ybWVyLnRyYW5zZm9ybVNpbmdsZUFzdChlLHQpfWZpeE5vZGVBZGRyZXNzKGUpe3JldHVybiBCbyh0aGlzLnRvU2hlZXQsZS5jb2wrdGhpcy50b1JpZ2h0LGUucm93K3RoaXMudG9Cb3R0b20pfXRyYW5zZm9ybUNlbGxBZGRyZXNzKGUsdCl7cmV0''@;'; put 'put ''dXJuIHRoaXMudHJhbnNmb3JtQWRkcmVzcyhlLHQpfXRyYW5zZm9ybUNlbGxSYW5nZShlLHQscil7cmV0dXJuIHRoaXMudHJhbnNmb3JtUmFuZ2UoZSx0LHIpfXRyYW5zZm9ybUNvbHVtblJhbmdlKGUsdCxyKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm1SYW5nZShlLHQscil9dHJhbnNmb3JtUm93''@;'; put 'put ''UmFuZ2UoZSx0LHIpe3JldHVybiB0aGlzLnRyYW5zZm9ybVJhbmdlKGUsdCxyKX10cmFuc2Zvcm1BZGRyZXNzKGUsdCl7Y29uc3Qgcj10aGlzLnNvdXJjZVJhbmdlO2lmKGUgaW5zdGFuY2VvZiB4dSl7Y29uc3QgaT1lLnRvU2ltcGxlQ2VsbEFkZHJlc3ModCk7aWYoci5hZGRyZXNzSW5SYW5n''@;'; put 'put ''ZShpKSlyZXR1cm4gZS5zaGlmdEFic29sdXRlRGltZW5zaW9ucyh0aGlzLnRvUmlnaHQsdGhpcy50b0JvdHRvbSl9cmV0dXJuIGUuc2hpZnRSZWxhdGl2ZURpbWVuc2lvbnMoLXRoaXMudG9SaWdodCwtdGhpcy50b0JvdHRvbSl9dHJhbnNmb3JtUmFuZ2UoZSx0LHIpe2NvbnN0IGk9dGhpcy5z''@;'; put 'put ''b3VyY2VSYW5nZTtpZihlIGluc3RhbmNlb2YgeHUmJnQgaW5zdGFuY2VvZiB4dSl7Y29uc3Qgbz1lLnRvU2ltcGxlQ2VsbEFkZHJlc3MociksYT10LnRvU2ltcGxlQ2VsbEFkZHJlc3Mocik7aWYoaS5hZGRyZXNzSW5SYW5nZShvKSYmaS5hZGRyZXNzSW5SYW5nZShhKSlyZXR1cm5bZS5zaGlm''@;'; put 'put ''dEFic29sdXRlRGltZW5zaW9ucyh0aGlzLnRvUmlnaHQsdGhpcy50b0JvdHRvbSksdC5zaGlmdEFic29sdXRlRGltZW5zaW9ucyh0aGlzLnRvUmlnaHQsdGhpcy50b0JvdHRvbSldfXJldHVybltlLnNoaWZ0UmVsYXRpdmVEaW1lbnNpb25zKC10aGlzLnRvUmlnaHQsLXRoaXMudG9Cb3R0b20p''@;'; put 'put ''LHQuc2hpZnRSZWxhdGl2ZURpbWVuc2lvbnMoLXRoaXMudG9SaWdodCwtdGhpcy50b0JvdHRvbSldfX1jbGFzcyBYZW4gZXh0ZW5kcyBleXtjb25zdHJ1Y3RvcihlLHQscixpKXtzdXBlcigpLHRoaXMuc291cmNlUmFuZ2U9ZSx0aGlzLnRvUmlnaHQ9dCx0aGlzLnRvQm90dG9tPXIsdGhpcy50''@;'; put 'put ''b1NoZWV0PWl9Z2V0IHNoZWV0KCl7cmV0dXJuIHRoaXMuc291cmNlUmFuZ2Uuc2hlZXR9aXNJcnJldmVyc2libGUoKXtyZXR1cm4hMH1maXhOb2RlQWRkcmVzcyhlKXtyZXR1cm4gZX10cmFuc2Zvcm1DZWxsQWRkcmVzcyhlLHQpe3JldHVybiEhdGhpcy5zaG91bGRNb3ZlKGUsdCkmJmUubW92''@;'; put 'put ''ZWQodGhpcy50b1NoZWV0LHRoaXMudG9SaWdodCx0aGlzLnRvQm90dG9tKX10cmFuc2Zvcm1DZWxsUmFuZ2UoZSx0LHIpe3JldHVybiB0aGlzLnRyYW5zZm9ybVJhbmdlKGUsdCxyKX10cmFuc2Zvcm1Db2x1bW5SYW5nZShlLHQscil7cmV0dXJuIHRoaXMudHJhbnNmb3JtUmFuZ2UoZSx0LHIp''@;'; put 'put ''fXRyYW5zZm9ybVJvd1JhbmdlKGUsdCxyKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm1SYW5nZShlLHQscil9c2hvdWxkTW92ZShlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgeHU/dGhpcy5zb3VyY2VSYW5nZS5hZGRyZXNzSW5SYW5nZShlLnRvU2ltcGxlQ2VsbEFkZHJlc3ModCkpOmUgaW5zdGFu''@;'; put 'put ''Y2VvZiBsZj90aGlzLnNvdXJjZVJhbmdlLnJvd0luUmFuZ2UoZS50b1NpbXBsZVJvd0FkZHJlc3ModCkpJiYhdGhpcy5zb3VyY2VSYW5nZS5pc0Zpbml0ZSgpOnRoaXMuc291cmNlUmFuZ2UuY29sdW1uSW5SYW5nZShlLnRvU2ltcGxlQ29sdW1uQWRkcmVzcyh0KSkmJiF0aGlzLnNvdXJjZVJh''@;'; put 'put ''bmdlLmlzRmluaXRlKCl9dHJhbnNmb3JtUmFuZ2UoZSx0LHIpe2NvbnN0IGk9dGhpcy50cmFuc2Zvcm1DZWxsQWRkcmVzcyhlLHIpLG89dGhpcy50cmFuc2Zvcm1DZWxsQWRkcmVzcyh0LHIpO3JldHVybiEoIWl8fCFvKSYmW2ksb119fWNsYXNzIFFlbiBleHRlbmRzIGV5e2NvbnN0cnVjdG9y''@;'; put 'put ''KGUpe3N1cGVyKCksdGhpcy5jb2x1bW5zU3Bhbj1lfWdldCBzaGVldCgpe3JldHVybiB0aGlzLmNvbHVtbnNTcGFuLnNoZWV0fWlzSXJyZXZlcnNpYmxlKCl7cmV0dXJuITB9dHJhbnNmb3JtUm93UmFuZ2VBc3QoZSx0KXtyZXR1cm4gZX10cmFuc2Zvcm1DZWxsUmFuZ2UoZSx0LHIpe3JldHVy''@;'; put 'put ''biB0aGlzLnRyYW5zZm9ybVJhbmdlKGUsdCxyKX10cmFuc2Zvcm1Sb3dSYW5nZShlLHQscil7dGhyb3cgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfXRyYW5zZm9ybUNvbHVtblJhbmdlKGUsdCxyKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm1SYW5nZShlLHQscil9dHJhbnNmb3JtQ2VsbEFkZHJl''@;'; put 'put ''c3MoZSx0KXtjb25zdCByPSQ0KGUsdCk7aWYodGhpcy5jb2x1bW5zU3Bhbi5zaGVldCE9PXQuc2hlZXQmJnRoaXMuY29sdW1uc1NwYW4uc2hlZXQhPT1yKXJldHVybiExO2lmKHRoaXMuY29sdW1uc1NwYW4uc2hlZXQhPT10LnNoZWV0JiZ0aGlzLmNvbHVtbnNTcGFuLnNoZWV0PT09cil7Y29u''@;'; put 'put ''c3QgaT1lLnRvU2ltcGxlQ29sdW1uQWRkcmVzcyh0KTtpZihpLmNvbDx0aGlzLmNvbHVtbnNTcGFuLmNvbHVtblN0YXJ0KXJldHVybiExO2lmKGkuY29sPnRoaXMuY29sdW1uc1NwYW4uY29sdW1uRW5kKXJldHVybiBlLnNoaWZ0ZWRCeUNvbHVtbnMoLXRoaXMuY29sdW1uc1NwYW4ubnVtYmVy''@;'; put 'put ''T2ZDb2x1bW5zKX1pZih0aGlzLmNvbHVtbnNTcGFuLnNoZWV0PT09dC5zaGVldCYmdGhpcy5jb2x1bW5zU3Bhbi5zaGVldCE9PXIpe2lmKGUuaXNDb2x1bW5BYnNvbHV0ZSgpKXJldHVybiExO2lmKHQuY29sPHRoaXMuY29sdW1uc1NwYW4uY29sdW1uU3RhcnQpcmV0dXJuITE7aWYodC5jb2w+''@;'; put 'put ''dGhpcy5jb2x1bW5zU3Bhbi5jb2x1bW5FbmQpcmV0dXJuIGUuc2hpZnRlZEJ5Q29sdW1ucyh0aGlzLmNvbHVtbnNTcGFuLm51bWJlck9mQ29sdW1ucyl9aWYodGhpcy5jb2x1bW5zU3Bhbi5zaGVldD09PXQuc2hlZXQmJnRoaXMuY29sdW1uc1NwYW4uc2hlZXQ9PT1yKWlmKGUuaXNDb2x1bW5B''@;'; put 'put ''YnNvbHV0ZSgpKXtpZihlLmNvbDx0aGlzLmNvbHVtbnNTcGFuLmNvbHVtblN0YXJ0KXJldHVybiExO2lmKGUuY29sPnRoaXMuY29sdW1uc1NwYW4uY29sdW1uRW5kKXJldHVybiBlLnNoaWZ0ZWRCeUNvbHVtbnMoLXRoaXMuY29sdW1uc1NwYW4ubnVtYmVyT2ZDb2x1bW5zKX1lbHNle2NvbnN0''@;'; put 'put ''IGk9ZS50b1NpbXBsZUNvbHVtbkFkZHJlc3ModCk7aWYoaS5jb2w8dGhpcy5jb2x1bW5zU3Bhbi5jb2x1bW5TdGFydCl7aWYodC5jb2w8dGhpcy5jb2x1bW5zU3Bhbi5jb2x1bW5TdGFydClyZXR1cm4hMTtpZih0LmNvbD50aGlzLmNvbHVtbnNTcGFuLmNvbHVtbkVuZClyZXR1cm4gZS5zaGlm''@;'; put 'put ''dGVkQnlDb2x1bW5zKHRoaXMuY29sdW1uc1NwYW4ubnVtYmVyT2ZDb2x1bW5zKX1lbHNlIGlmKGkuY29sPnRoaXMuY29sdW1uc1NwYW4uY29sdW1uRW5kKXtpZih0LmNvbDx0aGlzLmNvbHVtbnNTcGFuLmNvbHVtblN0YXJ0KXJldHVybiBlLnNoaWZ0ZWRCeUNvbHVtbnMoLXRoaXMuY29sdW1u''@;'; put 'put ''c1NwYW4ubnVtYmVyT2ZDb2x1bW5zKTtpZih0LmNvbD50aGlzLmNvbHVtbnNTcGFuLmNvbHVtbkVuZClyZXR1cm4hMX19cmV0dXJuIHRuLlJFRn1maXhOb2RlQWRkcmVzcyhlKXtyZXR1cm4gdGhpcy5jb2x1bW5zU3Bhbi5zaGVldD09PWUuc2hlZXQmJnRoaXMuY29sdW1uc1NwYW4uY29sdW1u''@;'; put 'put ''U3RhcnQ8PWUuY29sP09iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7Y29sOmUuY29sLXRoaXMuY29sdW1uc1NwYW4ubnVtYmVyT2ZDb2x1bW5zfSk6ZX10cmFuc2Zvcm1SYW5nZShlLHQscil7Y29uc3QgaT0kNChlLHIpO2xldCBvPWUsYT10O2lmKHRoaXMuY29sdW1uc1NwYW4u''@;'; put 'put ''c2hlZXQ9PT1pKXtjb25zdCBnPWUudG9TaW1wbGVDb2x1bW5BZGRyZXNzKHIpLEU9dC50b1NpbXBsZUNvbHVtbkFkZHJlc3Mocik7aWYodGhpcy5jb2x1bW5zU3Bhbi5jb2x1bW5TdGFydDw9Zy5jb2wmJnRoaXMuY29sdW1uc1NwYW4uY29sdW1uRW5kPj1FLmNvbClyZXR1cm4gdG4uUkVGO2cu''@;'; put 'put ''Y29sPj10aGlzLmNvbHVtbnNTcGFuLmNvbHVtblN0YXJ0JiZnLmNvbDw9dGhpcy5jb2x1bW5zU3Bhbi5jb2x1bW5FbmQmJihvPWUuc2hpZnRlZEJ5Q29sdW1ucyh0aGlzLmNvbHVtbnNTcGFuLmNvbHVtbkVuZC1nLmNvbCsxKSksRS5jb2w+PXRoaXMuY29sdW1uc1NwYW4uY29sdW1uU3RhcnQm''@;'; put 'put ''JkUuY29sPD10aGlzLmNvbHVtbnNTcGFuLmNvbHVtbkVuZCYmKGE9dC5zaGlmdGVkQnlDb2x1bW5zKC0oRS5jb2wtdGhpcy5jb2x1bW5zU3Bhbi5jb2x1bW5TdGFydCsxKSkpfWNvbnN0IGw9dGhpcy50cmFuc2Zvcm1DZWxsQWRkcmVzcyhvLHIpLHU9dGhpcy50cmFuc2Zvcm1DZWxsQWRkcmVz''@;'; put 'put ''cyhhLHIpO2lmKCExPT09bCYmITE9PT11KXJldHVybltvLGFdO2lmKGw9PT10bi5SRUZ8fHU9PT10bi5SRUYpdGhyb3cgRXJyb3IoIkNhbm5vdCBoYXBwZW4iKTtyZXR1cm5bbHx8byx1fHxhXX19Y2xhc3MgZm1lIGV4dGVuZHMgZXl7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnJvd3NT''@;'; put 'put ''cGFuPWV9Z2V0IHNoZWV0KCl7cmV0dXJuIHRoaXMucm93c1NwYW4uc2hlZXR9aXNJcnJldmVyc2libGUoKXtyZXR1cm4hMH10cmFuc2Zvcm1Db2x1bW5SYW5nZUFzdChlLHQpe3JldHVybiBlfXRyYW5zZm9ybUNlbGxBZGRyZXNzKGUsdCl7Y29uc3Qgcj0kNChlLHQpO2lmKHRoaXMucm93c1Nw''@;'; put 'put ''YW4uc2hlZXQhPT10LnNoZWV0JiZ0aGlzLnJvd3NTcGFuLnNoZWV0IT09cilyZXR1cm4hMTtpZih0aGlzLnJvd3NTcGFuLnNoZWV0IT09dC5zaGVldCYmdGhpcy5yb3dzU3Bhbi5zaGVldD09PXIpe2NvbnN0IGk9ZS50b1NpbXBsZVJvd0FkZHJlc3ModCk7aWYoaS5yb3c8dGhpcy5yb3dzU3Bh''@;'; put 'put ''bi5yb3dTdGFydClyZXR1cm4hMTtpZihpLnJvdz50aGlzLnJvd3NTcGFuLnJvd0VuZClyZXR1cm4gZS5zaGlmdGVkQnlSb3dzKC10aGlzLnJvd3NTcGFuLm51bWJlck9mUm93cyl9aWYodGhpcy5yb3dzU3Bhbi5zaGVldD09PXQuc2hlZXQmJnRoaXMucm93c1NwYW4uc2hlZXQhPT1yKXtpZihl''@;'; put 'put ''LmlzUm93QWJzb2x1dGUoKSlyZXR1cm4hMTtpZih0LnJvdzx0aGlzLnJvd3NTcGFuLnJvd1N0YXJ0KXJldHVybiExO2lmKHQucm93PnRoaXMucm93c1NwYW4ucm93RW5kKXJldHVybiBlLnNoaWZ0ZWRCeVJvd3ModGhpcy5yb3dzU3Bhbi5udW1iZXJPZlJvd3MpfWlmKHRoaXMucm93c1NwYW4u''@;'; put 'put ''c2hlZXQ9PT10LnNoZWV0JiZ0aGlzLnJvd3NTcGFuLnNoZWV0PT09cilpZihlLmlzUm93QWJzb2x1dGUoKSl7aWYoZS5yb3c8dGhpcy5yb3dzU3Bhbi5yb3dTdGFydClyZXR1cm4hMTtpZihlLnJvdz50aGlzLnJvd3NTcGFuLnJvd0VuZClyZXR1cm4gZS5zaGlmdGVkQnlSb3dzKC10aGlzLnJv''@;'; put 'put ''d3NTcGFuLm51bWJlck9mUm93cyl9ZWxzZXtjb25zdCBpPWUudG9TaW1wbGVSb3dBZGRyZXNzKHQpO2lmKGkucm93PHRoaXMucm93c1NwYW4ucm93U3RhcnQpe2lmKHQucm93PHRoaXMucm93c1NwYW4ucm93U3RhcnQpcmV0dXJuITE7aWYodC5yb3c+dGhpcy5yb3dzU3Bhbi5yb3dFbmQpcmV0''@;'; put 'put ''dXJuIGUuc2hpZnRlZEJ5Um93cyh0aGlzLnJvd3NTcGFuLm51bWJlck9mUm93cyl9ZWxzZSBpZihpLnJvdz50aGlzLnJvd3NTcGFuLnJvd0VuZCl7aWYodC5yb3c8dGhpcy5yb3dzU3Bhbi5yb3dTdGFydClyZXR1cm4gZS5zaGlmdGVkQnlSb3dzKC10aGlzLnJvd3NTcGFuLm51bWJlck9mUm93''@;'; put 'put ''cyk7aWYodC5yb3c+dGhpcy5yb3dzU3Bhbi5yb3dFbmQpcmV0dXJuITF9fXJldHVybiB0bi5SRUZ9dHJhbnNmb3JtQ2VsbFJhbmdlKGUsdCxyKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm1SYW5nZShlLHQscil9dHJhbnNmb3JtUm93UmFuZ2UoZSx0LHIpe3JldHVybiB0aGlzLnRyYW5zZm9ybVJh''@;'; put 'put ''bmdlKGUsdCxyKX10cmFuc2Zvcm1Db2x1bW5SYW5nZShlLHQscil7dGhyb3cgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfWZpeE5vZGVBZGRyZXNzKGUpe3JldHVybiB0aGlzLnJvd3NTcGFuLnNoZWV0PT09ZS5zaGVldCYmdGhpcy5yb3dzU3Bhbi5yb3dTdGFydDw9ZS5yb3c/T2JqZWN0LmFz''@;'; put 'put ''c2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtyb3c6ZS5yb3ctdGhpcy5yb3dzU3Bhbi5udW1iZXJPZlJvd3N9KTplfXRyYW5zZm9ybVJhbmdlKGUsdCxyKXtjb25zdCBpPSQ0KGUscik7bGV0IG89ZSxhPXQ7aWYodGhpcy5yb3dzU3Bhbi5zaGVldD09PWkpe2NvbnN0IGc9ZS50b1NpbXBsZVJv''@;'; put 'put ''d0FkZHJlc3MociksRT10LnRvU2ltcGxlUm93QWRkcmVzcyhyKTtpZih0aGlzLnJvd3NTcGFuLnJvd1N0YXJ0PD1nLnJvdyYmdGhpcy5yb3dzU3Bhbi5yb3dFbmQ+PUUucm93KXJldHVybiB0bi5SRUY7Zy5yb3c+PXRoaXMucm93c1NwYW4ucm93U3RhcnQmJmcucm93PD10aGlzLnJvd3NTcGFu''@;'; put 'put ''LnJvd0VuZCYmKG89ZS5zaGlmdGVkQnlSb3dzKHRoaXMucm93c1NwYW4ucm93RW5kLWcucm93KzEpKSxFLnJvdz49dGhpcy5yb3dzU3Bhbi5yb3dTdGFydCYmRS5yb3c8PXRoaXMucm93c1NwYW4ucm93RW5kJiYoYT10LnNoaWZ0ZWRCeVJvd3MoLShFLnJvdy10aGlzLnJvd3NTcGFuLnJvd1N0''@;'; put 'put ''YXJ0KzEpKSl9Y29uc3QgbD10aGlzLnRyYW5zZm9ybUNlbGxBZGRyZXNzKG8sciksdT10aGlzLnRyYW5zZm9ybUNlbGxBZGRyZXNzKGEscik7cmV0dXJuITE9PT1sJiYhMT09PXU/W28sYV06bD09PXRuLlJFRnx8dT09PXRuLlJFRj90bi5SRUY6W2x8fG8sdXx8YV19fWNsYXNzIEplbiBleHRl''@;'; put 'put ''bmRzIGV5e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5zaGVldD1lfWlzSXJyZXZlcnNpYmxlKCl7cmV0dXJuITB9cGVyZm9ybUVhZ2VyVHJhbnNmb3JtYXRpb25zKGUsdCl7Zm9yKGNvbnN0IHIgb2YgZS5hcnJheUZvcm11bGFOb2RlcygpKXtjb25zdFtpXT10aGlzLnRyYW5zZm9ybVNp''@;'; put 'put ''bmdsZUFzdChyLmdldEZvcm11bGEoZS5sYXppbHlUcmFuc2Zvcm1pbmdBc3RTZXJ2aWNlKSxyLmdldEFkZHJlc3MoZS5sYXppbHlUcmFuc2Zvcm1pbmdBc3RTZXJ2aWNlKSk7ci5zZXRGb3JtdWxhKGkpfX1maXhOb2RlQWRkcmVzcyhlKXtyZXR1cm4gZX10cmFuc2Zvcm1DZWxsQWRkcmVzcyhl''@;'; put 'put ''LHQpe3JldHVybiB0aGlzLnRyYW5zZm9ybUFkZHJlc3MoZSl9dHJhbnNmb3JtQ2VsbFJhbmdlKGUsdCxyKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm1BZGRyZXNzKGUpfXRyYW5zZm9ybUNvbHVtblJhbmdlKGUsdCxyKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm1BZGRyZXNzKGUpfXRyYW5zZm9ybVJv''@;'; put 'put ''d1JhbmdlKGUsdCxyKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm1BZGRyZXNzKGUpfXRyYW5zZm9ybUFkZHJlc3MoZSl7cmV0dXJuIGUuc2hlZXQ9PT10aGlzLnNoZWV0JiZ0bi5SRUZ9fWZ1bmN0aW9uIEhXZShuKXtpZighQXJyYXkuaXNBcnJheShuKSl0aHJvdyBuZXcgbjAoImFuIGFycmF5IG9m''@;'; put 'put ''IGFycmF5cy4iKTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKylpZighQXJyYXkuaXNBcnJheShuW2VdKSl0aHJvdyBuZXcgbjAoImFuIGFycmF5IG9mIGFycmF5cy4iKX1mdW5jdGlvbiBacShuKXtsZXQgZT0wLHQ9MCxyPTA7Zm9yKGxldCBvPTA7bzxuLmxlbmd0aDtvKyspe2xldCBhPTA7''@;'; put 'put ''Zm9yKGxldCBsPTA7bDxuW29dLmxlbmd0aDtsKyspbnVsbCE9bltvXVtsXSYmKGE9bCsxLCsrcik7ZT1NYXRoLm1heChlLGEpLGE+MCYmKHQ9bysxKX1jb25zdCBpPWUqdDtyZXR1cm57aGVpZ2h0OnQsd2lkdGg6ZSxmaWxsOjA9PT1pPzA6ci9pfX1jbGFzcyBWV2V7Y29uc3RydWN0b3IoZSx0''@;'; put 'put ''KXt0aGlzLnNoZWV0PWUsdGhpcy5pbmRleGVzPXR9bm9ybWFsaXplZEluZGV4ZXMoKXtyZXR1cm4gR3EodGhpcy5pbmRleGVzKX1yb3dzU3BhbnMoKXtyZXR1cm4gdGhpcy5ub3JtYWxpemVkSW5kZXhlcygpLm1hcChlPT50cC5mcm9tTnVtYmVyT2ZSb3dzKHRoaXMuc2hlZXQsZVswXSxlWzFd''@;'; put 'put ''KSl9fWNsYXNzIEJXZXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuc2hlZXQ9ZSx0aGlzLmluZGV4ZXM9dH1ub3JtYWxpemVkSW5kZXhlcygpe3JldHVybiAkcSh0aGlzLmluZGV4ZXMpfXJvd3NTcGFucygpe3JldHVybiB0aGlzLm5vcm1hbGl6ZWRJbmRleGVzKCkubWFwKGU9PnRwLmZyb21OdW1i''@;'; put 'put ''ZXJPZlJvd3ModGhpcy5zaGVldCxlWzBdLGVbMV0pKX19Y2xhc3Mgaldle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5zaGVldD1lLHRoaXMuaW5kZXhlcz10fW5vcm1hbGl6ZWRJbmRleGVzKCl7cmV0dXJuICRxKHRoaXMuaW5kZXhlcyl9Y29sdW1uc1NwYW5zKCl7cmV0dXJuIHRoaXMubm9ybWFs''@;'; put 'put ''aXplZEluZGV4ZXMoKS5tYXAoZT0+Z2cuZnJvbU51bWJlck9mQ29sdW1ucyh0aGlzLnNoZWV0LGVbMF0sZVsxXSkpfX1jbGFzcyBVV2V7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnNoZWV0PWUsdGhpcy5pbmRleGVzPXR9bm9ybWFsaXplZEluZGV4ZXMoKXtyZXR1cm4gR3EodGhpcy5pbmRleGVz''@;'; put 'put ''KX1jb2x1bW5zU3BhbnMoKXtyZXR1cm4gdGhpcy5ub3JtYWxpemVkSW5kZXhlcygpLm1hcChlPT5nZy5mcm9tTnVtYmVyT2ZDb2x1bW5zKHRoaXMuc2hlZXQsZVswXSxlWzFdKSl9fWNsYXNzIGV0bntjb25zdHJ1Y3RvcihlLHQscixpLG8sYSxsLHUsZyl7dGhpcy5kZXBlbmRlbmN5R3JhcGg9''@;'; put 'put ''dCx0aGlzLmNvbHVtblNlYXJjaD1yLHRoaXMuY2VsbENvbnRlbnRQYXJzZXI9aSx0aGlzLnBhcnNlcj1vLHRoaXMuc3RhdHM9YSx0aGlzLmxhemlseVRyYW5zZm9ybWluZ0FzdFNlcnZpY2U9bCx0aGlzLm5hbWVkRXhwcmVzc2lvbnM9dSx0aGlzLmFycmF5U2l6ZVByZWRpY3Rvcj1nLHRoaXMu''@;'; put 'put ''Y2hhbmdlcz1xXy5lbXB0eSgpLHRoaXMuYWxsb2NhdGVOYW1lZEV4cHJlc3Npb25BZGRyZXNzU3BhY2UoKSx0aGlzLm1heENvbHVtbnM9ZS5tYXhDb2x1bW5zLHRoaXMubWF4Um93cz1lLm1heFJvd3N9Z2V0IHNoZWV0TWFwcGluZygpe3JldHVybiB0aGlzLmRlcGVuZGVuY3lHcmFwaC5zaGVl''@;'; put 'put ''dE1hcHBpbmd9Z2V0IGFkZHJlc3NNYXBwaW5nKCl7cmV0dXJuIHRoaXMuZGVwZW5kZW5jeUdyYXBoLmFkZHJlc3NNYXBwaW5nfXJlbW92ZVJvd3MoZSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgciBvZiBlLnJvd3NTcGFucygpKXtjb25zdCBpPXRoaXMuZG9SZW1vdmVSb3dzKHIpO2kmJnQucHVz''@;'; put 'put ''aChpKX1yZXR1cm4gdH1hZGRSb3dzKGUpe2Zvcihjb25zdCB0IG9mIGUucm93c1NwYW5zKCkpdGhpcy5kb0FkZFJvd3ModCl9YWRkQ29sdW1ucyhlKXtmb3IoY29uc3QgdCBvZiBlLmNvbHVtbnNTcGFucygpKXRoaXMuZG9BZGRDb2x1bW5zKHQpfXJlbW92ZUNvbHVtbnMoZSl7Y29uc3QgdD1b''@;'; put 'put ''XTtmb3IoY29uc3QgciBvZiBlLmNvbHVtbnNTcGFucygpKXtjb25zdCBpPXRoaXMuZG9SZW1vdmVDb2x1bW5zKHIpO2kmJnQucHVzaChpKX1yZXR1cm4gdH1yZW1vdmVTaGVldChlKXt0aGlzLmRlcGVuZGVuY3lHcmFwaC5yZW1vdmVTaGVldChlKTtsZXQgdD0wO3RoaXMuc3RhdHMubWVhc3Vy''@;'; put 'put ''ZShBcy5UUkFOU0ZPUk1fQVNUUywoKT0+e2NvbnN0IGk9bmV3IEplbihlKTtpLnBlcmZvcm1FYWdlclRyYW5zZm9ybWF0aW9ucyh0aGlzLmRlcGVuZGVuY3lHcmFwaCx0aGlzLnBhcnNlciksdD10aGlzLmxhemlseVRyYW5zZm9ybWluZ0FzdFNlcnZpY2UuYWRkVHJhbnNmb3JtYXRpb24oaSl9''@;'; put 'put ''KSx0aGlzLnNoZWV0TWFwcGluZy5yZW1vdmVTaGVldChlKSx0aGlzLmNvbHVtblNlYXJjaC5yZW1vdmVTaGVldChlKTtjb25zdCByPXRoaXMubmFtZWRFeHByZXNzaW9ucy5nZXRBbGxOYW1lZEV4cHJlc3Npb25zRm9yU2NvcGUoZSkubWFwKGk9PnRoaXMucmVtb3ZlTmFtZWRFeHByZXNzaW9u''@;'; put 'put ''KGkubm9ybWFsaXplRXhwcmVzc2lvbk5hbWUoKSxlKSk7cmV0dXJue3ZlcnNpb246dCxzY29wZWROYW1lZEV4cHJlc3Npb25zOnJ9fXJlbW92ZVNoZWV0QnlOYW1lKGUpe2NvbnN0IHQ9dGhpcy5zaGVldE1hcHBpbmcuZmV0Y2goZSk7cmV0dXJuIHRoaXMucmVtb3ZlU2hlZXQodCl9Y2xlYXJT''@;'; put 'put ''aGVldChlKXt0aGlzLmRlcGVuZGVuY3lHcmFwaC5jbGVhclNoZWV0KGUpLHRoaXMuY29sdW1uU2VhcmNoLnJlbW92ZVNoZWV0KGUpfWFkZFNoZWV0KGUpe2NvbnN0IHQ9dGhpcy5zaGVldE1hcHBpbmcuYWRkU2hlZXQoZSk7cmV0dXJuIHRoaXMuZGVwZW5kZW5jeUdyYXBoLmFkZHJlc3NNYXBw''@;'; put 'put ''aW5nLmF1dG9BZGRTaGVldCh0LFpxKFtdKSksdGhpcy5zaGVldE1hcHBpbmcuZmV0Y2hEaXNwbGF5TmFtZSh0KX1yZW5hbWVTaGVldChlLHQpe3JldHVybiB0aGlzLnNoZWV0TWFwcGluZy5yZW5hbWVTaGVldChlLHQpfW1vdmVSb3dzKGUsdCxyLGkpe2NvbnN0IG89dHAuZnJvbU51bWJlck9m''@;'; put 'put ''Um93cyhlLGkscik7dGhpcy5sYXppbHlUcmFuc2Zvcm1pbmdBc3RTZXJ2aWNlLmJlZ2luQ29tYmluZWRNb2RlKGUpLHRoaXMuZG9BZGRSb3dzKG8pLGk8dCYmKHQrPXIpO2NvbnN0IGE9Qm8oZSwwLHQpLGw9Qm8oZSwwLGkpO3RoaXMubW92ZUNlbGxzKGEsTnVtYmVyLlBPU0lUSVZFX0lORklO''@;'; put 'put ''SVRZLHIsbCk7Y29uc3QgdT10cC5mcm9tTnVtYmVyT2ZSb3dzKGUsdCxyKTtyZXR1cm4gdGhpcy5kb1JlbW92ZVJvd3ModSksdGhpcy5sYXppbHlUcmFuc2Zvcm1pbmdBc3RTZXJ2aWNlLmNvbW1pdENvbWJpbmVkTW9kZSgpfW1vdmVDb2x1bW5zKGUsdCxyLGkpe2NvbnN0IG89Z2cuZnJvbU51''@;'; put 'put ''bWJlck9mQ29sdW1ucyhlLGkscik7dGhpcy5sYXppbHlUcmFuc2Zvcm1pbmdBc3RTZXJ2aWNlLmJlZ2luQ29tYmluZWRNb2RlKGUpLHRoaXMuZG9BZGRDb2x1bW5zKG8pLGk8dCYmKHQrPXIpO2NvbnN0IGE9Qm8oZSx0LDApLGw9Qm8oZSxpLDApO3RoaXMubW92ZUNlbGxzKGEscixOdW1iZXIu''@;'; put 'put ''UE9TSVRJVkVfSU5GSU5JVFksbCk7Y29uc3QgdT1nZy5mcm9tTnVtYmVyT2ZDb2x1bW5zKGUsdCxyKTtyZXR1cm4gdGhpcy5kb1JlbW92ZUNvbHVtbnModSksdGhpcy5sYXppbHlUcmFuc2Zvcm1pbmdBc3RTZXJ2aWNlLmNvbW1pdENvbWJpbmVkTW9kZSgpfW1vdmVDZWxscyhlLHQscixpKXt0''@;'; put 'put ''aGlzLmVuc3VyZUl0SXNQb3NzaWJsZVRvTW92ZUNlbGxzKGUsdCxyLGkpO2NvbnN0IG89YmEuc3BhbkZyb20oZSx0LHIpLGE9YmEuc3BhbkZyb20oaSx0LHIpLGw9aS5jb2wtZS5jb2wsdT1pLnJvdy1lLnJvdyxnPWkuc2hlZXQsRT10aGlzLmdldFJhbmdlQ2xpcGJvYXJkQ2VsbHMoYSksTz10''@;'; put 'put ''aGlzLmRlcGVuZGVuY3lHcmFwaC5yYXdWYWx1ZXNGcm9tUmFuZ2UoYSk7dGhpcy5jb2x1bW5TZWFyY2gucmVtb3ZlVmFsdWVzKE8pO2NvbnN0IFo9dGhpcy5kZXBlbmRlbmN5R3JhcGgucmF3VmFsdWVzRnJvbVJhbmdlKG8pO3RoaXMuY29sdW1uU2VhcmNoLm1vdmVWYWx1ZXMoWixsLHUsZyk7''@;'; put 'put ''bGV0IGVlPTA7dGhpcy5zdGF0cy5tZWFzdXJlKEFzLlRSQU5TRk9STV9BU1RTLCgpPT57Y29uc3QgTWU9bmV3IEtlbihvLGwsdSxnKTtNZS5wZXJmb3JtRWFnZXJUcmFuc2Zvcm1hdGlvbnModGhpcy5kZXBlbmRlbmN5R3JhcGgsdGhpcy5wYXJzZXIpLGVlPXRoaXMubGF6aWx5VHJhbnNmb3Jt''@;'; put 'put ''aW5nQXN0U2VydmljZS5hZGRUcmFuc2Zvcm1hdGlvbihNZSl9KSx0aGlzLmRlcGVuZGVuY3lHcmFwaC5tb3ZlQ2VsbHMobyxsLHUsZyk7Y29uc3QgdmU9dGhpcy51cGRhdGVOYW1lZEV4cHJlc3Npb25zRm9yTW92ZWRDZWxscyhlLHQscixpKTtyZXR1cm57dmVyc2lvbjplZSxvdmVyd3JpdHRl''@;'; put 'put ''bkNlbGxzRGF0YTpFLGFkZGVkR2xvYmFsTmFtZWRFeHByZXNzaW9uczp2ZX19c2V0Um93T3JkZXIoZSx0KXtjb25zdCByPVtdO2xldCBpPVtdO2Zvcihjb25zdFtvLGFdb2YgdClpZihvIT09YSl7Y29uc3QgbD1iYS5zcGFuRnJvbSh7c2hlZXQ6ZSxjb2w6MCxyb3c6b30sMS8wLDEpLHU9dGhp''@;'; put 'put ''cy5nZXRSYW5nZUNsaXBib2FyZENlbGxzKGwpO2k9aS5jb25jYXQodSksci5wdXNoKHUubWFwKChbe3NoZWV0OmcsY29sOkV9LE9dKT0+W3tzaGVldDpnLGNvbDpFLHJvdzphfSxPXSkpfXJldHVybiByLmZvckVhY2gobz0+dGhpcy5yZXN0b3JlQ2xpcGJvYXJkQ2VsbHMoZSxvLnZhbHVlcygp''@;'; put 'put ''KSksaX1zZXRDb2x1bW5PcmRlcihlLHQpe2NvbnN0IHI9W107bGV0IGk9W107Zm9yKGNvbnN0W28sYV1vZiB0KWlmKG8hPT1hKXtjb25zdCBsPWJhLnNwYW5Gcm9tKHtzaGVldDplLGNvbDpvLHJvdzowfSwxLDEvMCksdT10aGlzLmdldFJhbmdlQ2xpcGJvYXJkQ2VsbHMobCk7aT1pLmNvbmNh''@;'; put 'put ''dCh1KSxyLnB1c2godS5tYXAoKFt7c2hlZXQ6Zyxyb3c6T30sWl0pPT5be3NoZWV0OmcsY29sOmEscm93Ok99LFpdKSl9cmV0dXJuIHIuZm9yRWFjaChvPT50aGlzLnJlc3RvcmVDbGlwYm9hcmRDZWxscyhlLG8udmFsdWVzKCkpKSxpfWFkZE5hbWVkRXhwcmVzc2lvbihlLHQscixpKXtjb25z''@;'; put 'put ''dCBvPXRoaXMubmFtZWRFeHByZXNzaW9ucy5hZGROYW1lZEV4cHJlc3Npb24oZSxyLGkpO3RoaXMuc3RvcmVOYW1lZEV4cHJlc3Npb25JbkNlbGwoby5hZGRyZXNzLHQpLHRoaXMuYWRqdXN0TmFtZWRFeHByZXNzaW9uRWRnZXMobyxlLHIpfXJlc3RvcmVOYW1lZEV4cHJlc3Npb24oZSx0LHIp''@;'; put 'put ''e2NvbnN0IGk9ZS5kaXNwbGF5TmFtZTt0aGlzLnJlc3RvcmVDZWxsKGUuYWRkcmVzcyx0KTtjb25zdCBvPXRoaXMubmFtZWRFeHByZXNzaW9ucy5yZXN0b3JlTmFtZWRFeHByZXNzaW9uKGUscik7dGhpcy5hZGp1c3ROYW1lZEV4cHJlc3Npb25FZGdlcyhvLGkscil9Y2hhbmdlTmFtZWRFeHBy''@;'; put 'put ''ZXNzaW9uRXhwcmVzc2lvbihlLHQscixpKXtjb25zdCBvPXRoaXMubmFtZWRFeHByZXNzaW9ucy5uYW1lZEV4cHJlc3Npb25Gb3JTY29wZShlLHIpO2lmKCFvKXRocm93IG5ldyBMcShlKTtjb25zdCBhPW8uY29weSgpO28ub3B0aW9ucz1pO2NvbnN0IGw9dGhpcy5nZXRDbGlwYm9hcmRDZWxs''@;'; put 'put ''KG8uYWRkcmVzcyk7cmV0dXJuIHRoaXMuc3RvcmVOYW1lZEV4cHJlc3Npb25JbkNlbGwoby5hZGRyZXNzLHQpLFthLGxdfXJlbW92ZU5hbWVkRXhwcmVzc2lvbihlLHQpe2NvbnN0IHI9dGhpcy5uYW1lZEV4cHJlc3Npb25zLm5hbWVkRXhwcmVzc2lvbkZvclNjb3BlKGUsdCk7aWYoIXIpdGhy''@;'; put 'put ''b3cgbmV3IExxKGUpO3RoaXMubmFtZWRFeHByZXNzaW9ucy5yZW1vdmUoci5kaXNwbGF5TmFtZSx0KTtjb25zdCBpPXRoaXMuZ2V0Q2xpcGJvYXJkQ2VsbChyLmFkZHJlc3MpO2lmKHZvaWQgMCE9PXQpe2NvbnN0IG89dGhpcy5uYW1lZEV4cHJlc3Npb25zLndvcmtib29rTmFtZWRFeHByZXNz''@;'; put 'put ''aW9uT3JQbGFjZWhvbGRlcihlKTt0aGlzLmRlcGVuZGVuY3lHcmFwaC5leGNoYW5nZU5vZGUoci5hZGRyZXNzLG8uYWRkcmVzcyl9ZWxzZSB0aGlzLmRlcGVuZGVuY3lHcmFwaC5zZXRDZWxsRW1wdHkoci5hZGRyZXNzKTtyZXR1cm5bcixpXX1lbnN1cmVJdElzUG9zc2libGVUb01vdmVDZWxs''@;'; put 'put ''cyhlLHQscixpKXtpZihucChlKXx8IShxcSh0KSYmcXEocil8fGZ1bmN0aW9uIHR0bihuLGUsdCl7cmV0dXJuIDA9PT1uLnJvdyYmcXEoZSkmJnQ9PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl8fDA9PT1uLmNvbCYmcXEodCkmJmU9PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9KGUsdCxy''@;'; put 'put ''KSl8fG5wKGkpfHwhdGhpcy5zaGVldE1hcHBpbmcuaGFzU2hlZXRXaXRoSWQoZS5zaGVldCl8fCF0aGlzLnNoZWV0TWFwcGluZy5oYXNTaGVldFdpdGhJZChpLnNoZWV0KSl0aHJvdyBuZXcgbjAoImEgdmFsaWQgcmFuZ2Ugb2YgY2VsbHMgdG8gbW92ZS4iKTtjb25zdCBvPWJhLnNwYW5Gcm9t''@;'; put 'put ''KGUsdCxyKSxhPWJhLnNwYW5Gcm9tKGksdCxyKTtpZihhLmV4Y2VlZHNTaGVldFNpemVMaW1pdHModGhpcy5tYXhDb2x1bW5zLHRoaXMubWF4Um93cykpdGhyb3cgbmV3IHRBO2lmKHRoaXMuZGVwZW5kZW5jeUdyYXBoLmFycmF5TWFwcGluZy5pc0Zvcm11bGFBcnJheUluUmFuZ2UobykpdGhy''@;'; put 'put ''b3cgbmV3IHNQO2lmKHRoaXMuZGVwZW5kZW5jeUdyYXBoLmFycmF5TWFwcGluZy5pc0Zvcm11bGFBcnJheUluUmFuZ2UoYSkpdGhyb3cgbmV3IEtnZX1yZXN0b3JlQ2xpcGJvYXJkQ2VsbHMoZSx0KXtjb25zdCByPVtdO2Zvcihjb25zdFtpLG9db2YgdClpZih0aGlzLnJlc3RvcmVDZWxsKGks''@;'; put 'put ''byksby50eXBlPT09dWYuRk9STVVMQSl7Y29uc3R7ZGVwZW5kZW5jaWVzOmF9PXRoaXMucGFyc2VyLmZldGNoQ2FjaGVkUmVzdWx0KG8uaGFzaCk7ci5wdXNoKC4uLnRoaXMudXBkYXRlTmFtZWRFeHByZXNzaW9uc0ZvclRhcmdldEFkZHJlc3MoZSxpLGEpKX1yZXR1cm4gcn1yZXN0b3JlQ2Vs''@;'; put 'put ''bChlLHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UgdWYuVkFMVUU6dGhpcy5zZXRWYWx1ZVRvQ2VsbCh0LGUpO2JyZWFrO2Nhc2UgdWYuRk9STVVMQTp0aGlzLnNldEZvcm11bGFUb0NlbGxGcm9tQ2FjaGUodC5oYXNoLGUpO2JyZWFrO2Nhc2UgdWYuRU1QVFk6dGhpcy5zZXRDZWxsRW1wdHkoZSk7''@;'; put 'put ''YnJlYWs7Y2FzZSB1Zi5QQVJTSU5HX0VSUk9SOnRoaXMuc2V0UGFyc2luZ0Vycm9yVG9DZWxsKHQucmF3SW5wdXQsdC5lcnJvcnMsZSl9fWdldE9sZENvbnRlbnQoZSl7Y29uc3QgdD10aGlzLmRlcGVuZGVuY3lHcmFwaC5nZXRDZWxsKGUpO2lmKHZvaWQgMD09PXR8fHQgaW5zdGFuY2VvZiBY''@;'; put 'put ''XylyZXR1cm5bZSx7dHlwZTp1Zi5FTVBUWX1dO2lmKHQgaW5zdGFuY2VvZiBRXylyZXR1cm5bZSxPYmplY3QuYXNzaWduKHt0eXBlOnVmLlZBTFVFfSx0LmdldFZhbHVlcygpKV07aWYodCBpbnN0YW5jZW9mIG1nKXJldHVyblt0LmdldEFkZHJlc3ModGhpcy5sYXppbHlUcmFuc2Zvcm1pbmdB''@;'; put 'put ''c3RTZXJ2aWNlKSx7dHlwZTp1Zi5GT1JNVUxBLGhhc2g6dGhpcy5wYXJzZXIuY29tcHV0ZUhhc2hGcm9tQXN0KHQuZ2V0Rm9ybXVsYSh0aGlzLmxhemlseVRyYW5zZm9ybWluZ0FzdFNlcnZpY2UpKX1dO2lmKHQgaW5zdGFuY2VvZiBpQSlyZXR1cm5bZSx7dHlwZTp1Zi5QQVJTSU5HX0VSUk9S''@;'; put 'put ''LHJhd0lucHV0OnQucmF3SW5wdXQsZXJyb3JzOnQuZXJyb3JzfV07dGhyb3cgRXJyb3IoIlRyeWluZyB0byBjb3B5IHVuc3VwcG9ydGVkIHR5cGUiKX1nZXRDbGlwYm9hcmRDZWxsKGUpe2NvbnN0IHQ9dGhpcy5kZXBlbmRlbmN5R3JhcGguZ2V0Q2VsbChlKTtpZih2b2lkIDA9PT10fHx0IGlu''@;'; put 'put ''c3RhbmNlb2YgWF8pcmV0dXJue3R5cGU6dWYuRU1QVFl9O2lmKHQgaW5zdGFuY2VvZiBRXylyZXR1cm4gT2JqZWN0LmFzc2lnbih7dHlwZTp1Zi5WQUxVRX0sdC5nZXRWYWx1ZXMoKSk7aWYodCBpbnN0YW5jZW9mICRoKXtjb25zdCByPXQuZ2V0QXJyYXlDZWxsVmFsdWUoZSk7cmV0dXJuIHI9''@;'; put 'put ''PT1sbD97dHlwZTp1Zi5FTVBUWX06e3R5cGU6dWYuVkFMVUUscGFyc2VkVmFsdWU6cixyYXdWYWx1ZTp0LmdldEFycmF5Q2VsbFJhd1ZhbHVlKGUpfX1pZih0IGluc3RhbmNlb2YgajYpcmV0dXJue3R5cGU6dWYuRk9STVVMQSxoYXNoOnRoaXMucGFyc2VyLmNvbXB1dGVIYXNoRnJvbUFzdCh0''@;'; put 'put ''LmdldEZvcm11bGEodGhpcy5sYXppbHlUcmFuc2Zvcm1pbmdBc3RTZXJ2aWNlKSl9O2lmKHQgaW5zdGFuY2VvZiBpQSlyZXR1cm57dHlwZTp1Zi5QQVJTSU5HX0VSUk9SLHJhd0lucHV0OnQucmF3SW5wdXQsZXJyb3JzOnQuZXJyb3JzfTt0aHJvdyBFcnJvcigiVHJ5aW5nIHRvIGNvcHkgdW5z''@;'; put 'put ''dXBwb3J0ZWQgdHlwZSIpfWdldFNoZWV0Q2xpcGJvYXJkQ2VsbHMoZSl7Y29uc3QgdD10aGlzLmRlcGVuZGVuY3lHcmFwaC5nZXRTaGVldEhlaWdodChlKSxyPXRoaXMuZGVwZW5kZW5jeUdyYXBoLmdldFNoZWV0V2lkdGgoZSksaT1uZXcgQXJyYXkodCk7Zm9yKGxldCBvPTA7bzx0O28rKyl7''@;'; put 'put ''aVtvXT1uZXcgQXJyYXkocik7Zm9yKGxldCBhPTA7YTxyO2ErKyl7Y29uc3QgbD1CbyhlLGEsbyk7aVtvXVthXT10aGlzLmdldENsaXBib2FyZENlbGwobCl9fXJldHVybiBpfWdldFJhbmdlQ2xpcGJvYXJkQ2VsbHMoZSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgciBvZiBlLmFkZHJlc3Nlcyh0''@;'; put 'put ''aGlzLmRlcGVuZGVuY3lHcmFwaCkpdC5wdXNoKFtyLHRoaXMuZ2V0Q2xpcGJvYXJkQ2VsbChyKV0pO3JldHVybiB0fXNldENlbGxDb250ZW50KGUsdCl7Y29uc3Qgcj10aGlzLmNlbGxDb250ZW50UGFyc2VyLnBhcnNlKHQpLGk9dGhpcy5nZXRPbGRDb250ZW50KGUpO2lmKHIgaW5zdGFuY2Vv''@;'; put 'put ''ZiBIZC5Gb3JtdWxhKXtjb25zdCBvPXRoaXMucGFyc2VyLnBhcnNlKHIuZm9ybXVsYSxlKSx7YXN0OmEsZXJyb3JzOmx9PW87aWYobC5sZW5ndGg+MCl0aGlzLnNldFBhcnNpbmdFcnJvclRvQ2VsbChyLmZvcm11bGEsbCxlKTtlbHNlIHRyeXtjb25zdCB1PXRoaXMuYXJyYXlTaXplUHJlZGlj''@;'; put 'put ''dG9yLmNoZWNrQXJyYXlTaXplKGEsZSk7aWYodS53aWR0aDw9MHx8dS5oZWlnaHQ8PTApdGhyb3cgRXJyb3IoIkluY29ycmVjdCBhcnJheSBzaXplIik7dGhpcy5zZXRGb3JtdWxhVG9DZWxsKGUsdSxvKX1jYXRjaCh1KXtpZighdS5tZXNzYWdlKXRocm93IHU7dGhpcy5zZXRQYXJzaW5nRXJy''@;'; put 'put ''b3JUb0NlbGwoci5mb3JtdWxhLFt7dHlwZTpHaC5JbnZhbGlkUmFuZ2VTaXplLG1lc3NhZ2U6IkludmFsaWQgcmFuZ2Ugc2l6ZS4ifV0sZSl9fWVsc2UgciBpbnN0YW5jZW9mIEhkLkVtcHR5P3RoaXMuc2V0Q2VsbEVtcHR5KGUpOnRoaXMuc2V0VmFsdWVUb0NlbGwoe3BhcnNlZFZhbHVlOnIu''@;'; put 'put ''dmFsdWUscmF3VmFsdWU6dH0sZSk7cmV0dXJuIGl9c2V0U2hlZXRDb250ZW50KGUsdCl7dGhpcy5jbGVhclNoZWV0KGUpO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKWZvcihsZXQgaT0wO2k8dFtyXS5sZW5ndGg7aSsrKXtjb25zdCBvPUJvKGUsaSxyKTt0aGlzLnNldENlbGxDb250ZW50''@;'; put 'put ''KG8sdFtyXVtpXSl9fXNldFBhcnNpbmdFcnJvclRvQ2VsbChlLHQscil7Y29uc3QgaT10aGlzLmRlcGVuZGVuY3lHcmFwaC5nZXRDZWxsVmFsdWUociksbz1uZXcgaUEodCxlKSxhPXRoaXMuZGVwZW5kZW5jeUdyYXBoLnNldFBhcnNpbmdFcnJvclRvQ2VsbChyLG8pO3RoaXMuY29sdW1uU2Vh''@;'; put 'put ''cmNoLnJlbW92ZShMbyhpKSxyKSx0aGlzLmNvbHVtblNlYXJjaC5hcHBseUNoYW5nZXMoYS5nZXRDaGFuZ2VzKCkpLHRoaXMuY2hhbmdlcy5hZGRBbGwoYSksdGhpcy5jaGFuZ2VzLmFkZENoYW5nZShvLmdldENlbGxWYWx1ZSgpLHIpfXNldEZvcm11bGFUb0NlbGwoZSx0LHthc3Q6cixoYXNW''@;'; put 'put ''b2xhdGlsZUZ1bmN0aW9uOmksaGFzU3RydWN0dXJhbENoYW5nZUZ1bmN0aW9uOm8sZGVwZW5kZW5jaWVzOmF9KXtjb25zdCBsPXRoaXMuZGVwZW5kZW5jeUdyYXBoLmdldENlbGxWYWx1ZShlKSx1PXRoaXMuZGVwZW5kZW5jeUdyYXBoLnNldEZvcm11bGFUb0NlbGwoZSxyLFY2KGEsZSksdCxp''@;'; put 'put ''LG8pO3RoaXMuY29sdW1uU2VhcmNoLnJlbW92ZShMbyhsKSxlKSx0aGlzLmNvbHVtblNlYXJjaC5hcHBseUNoYW5nZXModS5nZXRDaGFuZ2VzKCkpLHRoaXMuY2hhbmdlcy5hZGRBbGwodSl9c2V0VmFsdWVUb0NlbGwoZSx0KXtjb25zdCByPXRoaXMuZGVwZW5kZW5jeUdyYXBoLmdldENlbGxW''@;'; put 'put ''YWx1ZSh0KSxpPXRoaXMuZGVwZW5kZW5jeUdyYXBoLnNldFZhbHVlVG9DZWxsKHQsZSk7dGhpcy5jb2x1bW5TZWFyY2guY2hhbmdlKExvKHIpLExvKGUucGFyc2VkVmFsdWUpLHQpLHRoaXMuY29sdW1uU2VhcmNoLmFwcGx5Q2hhbmdlcyhpLmdldENoYW5nZXMoKS5maWx0ZXIobz0+IXVQKG8u''@;'; put 'put ''YWRkcmVzcyx0KSkpLHRoaXMuY2hhbmdlcy5hZGRBbGwoaSksdGhpcy5jaGFuZ2VzLmFkZENoYW5nZShlLnBhcnNlZFZhbHVlLHQpfXNldENlbGxFbXB0eShlKXtpZih0aGlzLmRlcGVuZGVuY3lHcmFwaC5pc0FycmF5SW50ZXJuYWxDZWxsKGUpKXJldHVybjtjb25zdCB0PXRoaXMuZGVwZW5k''@;'; put 'put ''ZW5jeUdyYXBoLmdldENlbGxWYWx1ZShlKSxyPXRoaXMuZGVwZW5kZW5jeUdyYXBoLnNldENlbGxFbXB0eShlKTt0aGlzLmNvbHVtblNlYXJjaC5yZW1vdmUoTG8odCksZSksdGhpcy5jb2x1bW5TZWFyY2guYXBwbHlDaGFuZ2VzKHIuZ2V0Q2hhbmdlcygpKSx0aGlzLmNoYW5nZXMuYWRkQWxs''@;'; put 'put ''KHIpLHRoaXMuY2hhbmdlcy5hZGRDaGFuZ2UobGwsZSl9c2V0Rm9ybXVsYVRvQ2VsbEZyb21DYWNoZShlLHQpe2NvbnN0e2FzdDpyLGhhc1ZvbGF0aWxlRnVuY3Rpb246aSxoYXNTdHJ1Y3R1cmFsQ2hhbmdlRnVuY3Rpb246byxkZXBlbmRlbmNpZXM6YX09dGhpcy5wYXJzZXIuZmV0Y2hDYWNo''@;'; put 'put ''ZWRSZXN1bHQoZSksbD1WNihhLHQpLFt1XT1uZXcgcWVuKHQuc2hlZXQpLnRyYW5zZm9ybVNpbmdsZUFzdChyLHQpO3RoaXMucGFyc2VyLnJlbWVtYmVyTmV3QXN0KHUpO2NvbnN0IGc9KG49Pm4uZmlsdGVyKGU9PmUgaW5zdGFuY2VvZiBhOXx8KGUgaW5zdGFuY2VvZiBiYT8hKG5wKGUuc3Rh''@;'; put 'put ''cnQpfHxucChlLmVuZCkpOiFucChlKSkpKShsKSxFPXRoaXMuYXJyYXlTaXplUHJlZGljdG9yLmNoZWNrQXJyYXlTaXplKHIsdCk7dGhpcy5kZXBlbmRlbmN5R3JhcGguc2V0Rm9ybXVsYVRvQ2VsbCh0LHUsZyxFLGksbyl9cm93RWZmZWN0aXZlbHlOb3RJblNoZWV0KGUsdCl7cmV0dXJuIGU+''@;'; put 'put ''PXRoaXMuZGVwZW5kZW5jeUdyYXBoLmFkZHJlc3NNYXBwaW5nLmdldEhlaWdodCh0KX1nZXRBbmRDbGVhckNvbnRlbnRDaGFuZ2VzKCl7Y29uc3QgZT10aGlzLmNoYW5nZXM7cmV0dXJuIHRoaXMuY2hhbmdlcz1xXy5lbXB0eSgpLGV9Zm9yY2VBcHBseVBvc3Rwb25lZFRyYW5zZm9ybWF0aW9u''@;'; put 'put ''cygpe3RoaXMuZGVwZW5kZW5jeUdyYXBoLmZvcmNlQXBwbHlQb3N0cG9uZWRUcmFuc2Zvcm1hdGlvbnMoKX1kb1JlbW92ZVJvd3MoZSl7aWYodGhpcy5yb3dFZmZlY3RpdmVseU5vdEluU2hlZXQoZS5yb3dTdGFydCxlLnNoZWV0KSlyZXR1cm47Y29uc3QgdD1bXTtmb3IoY29uc3RbYV1vZiB0''@;'; put 'put ''aGlzLmRlcGVuZGVuY3lHcmFwaC5lbnRyaWVzRnJvbVJvd3NTcGFuKGUpKXQucHVzaCh7YWRkcmVzczphLGNlbGxUeXBlOnRoaXMuZ2V0Q2xpcGJvYXJkQ2VsbChhKX0pO2NvbnN0e2FmZmVjdGVkQXJyYXlzOnIsY29udGVudENoYW5nZXM6aX09dGhpcy5kZXBlbmRlbmN5R3JhcGgucmVtb3Zl''@;'; put 'put ''Um93cyhlKTt0aGlzLmNvbHVtblNlYXJjaC5hcHBseUNoYW5nZXMoaS5nZXRDaGFuZ2VzKCkpO2xldCBvPTA7cmV0dXJuIHRoaXMuc3RhdHMubWVhc3VyZShBcy5UUkFOU0ZPUk1fQVNUUywoKT0+e2NvbnN0IGE9bmV3IGZtZShlKTthLnBlcmZvcm1FYWdlclRyYW5zZm9ybWF0aW9ucyh0aGlz''@;'; put 'put ''LmRlcGVuZGVuY3lHcmFwaCx0aGlzLnBhcnNlciksbz10aGlzLmxhemlseVRyYW5zZm9ybWluZ0FzdFNlcnZpY2UuYWRkVHJhbnNmb3JtYXRpb24oYSl9KSx0aGlzLnJld3JpdGVBZmZlY3RlZEFycmF5cyhyKSx7dmVyc2lvbjpvLHJlbW92ZWRDZWxsczp0LHJvd0Zyb206ZS5yb3dTdGFydCxy''@;'; put 'put ''b3dDb3VudDplLm51bWJlck9mUm93c319ZG9SZW1vdmVDb2x1bW5zKGUpe2lmKHRoaXMuY29sdW1uRWZmZWN0aXZlbHlOb3RJblNoZWV0KGUuY29sdW1uU3RhcnQsZS5zaGVldCkpcmV0dXJuO2NvbnN0IHQ9W107Zm9yKGNvbnN0W2Fdb2YgdGhpcy5kZXBlbmRlbmN5R3JhcGguZW50cmllc0Zy''@;'; put 'put ''b21Db2x1bW5zU3BhbihlKSl0LnB1c2goe2FkZHJlc3M6YSxjZWxsVHlwZTp0aGlzLmdldENsaXBib2FyZENlbGwoYSl9KTtjb25zdHthZmZlY3RlZEFycmF5czpyLGNvbnRlbnRDaGFuZ2VzOml9PXRoaXMuZGVwZW5kZW5jeUdyYXBoLnJlbW92ZUNvbHVtbnMoZSk7dGhpcy5jb2x1bW5TZWFy''@;'; put 'put ''Y2guYXBwbHlDaGFuZ2VzKGkuZ2V0Q2hhbmdlcygpKSx0aGlzLmNvbHVtblNlYXJjaC5yZW1vdmVDb2x1bW5zKGUpO2xldCBvPTA7cmV0dXJuIHRoaXMuc3RhdHMubWVhc3VyZShBcy5UUkFOU0ZPUk1fQVNUUywoKT0+e2NvbnN0IGE9bmV3IFFlbihlKTthLnBlcmZvcm1FYWdlclRyYW5zZm9y''@;'; put 'put ''bWF0aW9ucyh0aGlzLmRlcGVuZGVuY3lHcmFwaCx0aGlzLnBhcnNlciksbz10aGlzLmxhemlseVRyYW5zZm9ybWluZ0FzdFNlcnZpY2UuYWRkVHJhbnNmb3JtYXRpb24oYSl9KSx0aGlzLnJld3JpdGVBZmZlY3RlZEFycmF5cyhyKSx7dmVyc2lvbjpvLHJlbW92ZWRDZWxsczp0LGNvbHVtbkZy''@;'; put 'put ''b206ZS5jb2x1bW5TdGFydCxjb2x1bW5Db3VudDplLm51bWJlck9mQ29sdW1uc319ZG9BZGRSb3dzKGUpe2lmKHRoaXMucm93RWZmZWN0aXZlbHlOb3RJblNoZWV0KGUucm93U3RhcnQsZS5zaGVldCkpcmV0dXJuO2NvbnN0e2FmZmVjdGVkQXJyYXlzOnR9PXRoaXMuZGVwZW5kZW5jeUdyYXBo''@;'; put 'put ''LmFkZFJvd3MoZSk7dGhpcy5zdGF0cy5tZWFzdXJlKEFzLlRSQU5TRk9STV9BU1RTLCgpPT57Y29uc3Qgcj1uZXcgaG1lKGUpO3IucGVyZm9ybUVhZ2VyVHJhbnNmb3JtYXRpb25zKHRoaXMuZGVwZW5kZW5jeUdyYXBoLHRoaXMucGFyc2VyKSx0aGlzLmxhemlseVRyYW5zZm9ybWluZ0FzdFNl''@;'; put 'put ''cnZpY2UuYWRkVHJhbnNmb3JtYXRpb24ocil9KSx0aGlzLnJld3JpdGVBZmZlY3RlZEFycmF5cyh0KX1yZXdyaXRlQWZmZWN0ZWRBcnJheXMoZSl7Zm9yKGNvbnN0IHQgb2YgZS52YWx1ZXMoKSl7aWYodC5hcnJheS5zaXplLmlzUmVmKWNvbnRpbnVlO2NvbnN0IHI9dC5nZXRGb3JtdWxhKHRo''@;'; put 'put ''aXMubGF6aWx5VHJhbnNmb3JtaW5nQXN0U2VydmljZSksaT10LmdldEFkZHJlc3ModGhpcy5sYXppbHlUcmFuc2Zvcm1pbmdBc3RTZXJ2aWNlKSxvPXRoaXMucGFyc2VyLmNvbXB1dGVIYXNoRnJvbUFzdChyKTt0aGlzLnNldEZvcm11bGFUb0NlbGxGcm9tQ2FjaGUobyxpKX19ZG9BZGRDb2x1''@;'; put 'put ''bW5zKGUpe2lmKHRoaXMuY29sdW1uRWZmZWN0aXZlbHlOb3RJblNoZWV0KGUuY29sdW1uU3RhcnQsZS5zaGVldCkpcmV0dXJuO2NvbnN0e2FmZmVjdGVkQXJyYXlzOnQsY29udGVudENoYW5nZXM6cn09dGhpcy5kZXBlbmRlbmN5R3JhcGguYWRkQ29sdW1ucyhlKTt0aGlzLmNvbHVtblNlYXJj''@;'; put 'put ''aC5hZGRDb2x1bW5zKGUpLHRoaXMuY29sdW1uU2VhcmNoLmFwcGx5Q2hhbmdlcyhyLmdldENoYW5nZXMoKSksdGhpcy5zdGF0cy5tZWFzdXJlKEFzLlRSQU5TRk9STV9BU1RTLCgpPT57Y29uc3QgaT1uZXcgJGVuKGUpO2kucGVyZm9ybUVhZ2VyVHJhbnNmb3JtYXRpb25zKHRoaXMuZGVwZW5k''@;'; put 'put ''ZW5jeUdyYXBoLHRoaXMucGFyc2VyKSx0aGlzLmxhemlseVRyYW5zZm9ybWluZ0FzdFNlcnZpY2UuYWRkVHJhbnNmb3JtYXRpb24oaSl9KSx0aGlzLnJld3JpdGVBZmZlY3RlZEFycmF5cyh0KX1jb2x1bW5FZmZlY3RpdmVseU5vdEluU2hlZXQoZSx0KXtyZXR1cm4gZT49dGhpcy5kZXBlbmRl''@;'; put 'put ''bmN5R3JhcGguYWRkcmVzc01hcHBpbmcuZ2V0V2lkdGgodCl9YWRqdXN0TmFtZWRFeHByZXNzaW9uRWRnZXMoZSx0LHIpe2lmKHZvaWQgMD09PXIpcmV0dXJuO2NvbnN0e3ZlcnRleDppLGlkOm99PXRoaXMuZGVwZW5kZW5jeUdyYXBoLmZldGNoQ2VsbE9yQ3JlYXRlRW1wdHkoZS5hZGRyZXNz''@;'; put 'put ''KSxhPW8/P3RoaXMuZGVwZW5kZW5jeUdyYXBoLmdyYXBoLmdldE5vZGVJZChpKSxsPXRoaXMubmFtZWRFeHByZXNzaW9ucy53b3JrYm9va05hbWVkRXhwcmVzc2lvbk9yUGxhY2Vob2xkZXIodCkse3ZlcnRleDp1LGlkOmd9PXRoaXMuZGVwZW5kZW5jeUdyYXBoLmZldGNoQ2VsbE9yQ3JlYXRl''@;'; put 'put ''RW1wdHkobC5hZGRyZXNzKSxFPWc/P3RoaXMuZGVwZW5kZW5jeUdyYXBoLmdyYXBoLmdldE5vZGVJZCh1KTtmb3IoY29uc3QgTyBvZiB0aGlzLmRlcGVuZGVuY3lHcmFwaC5ncmFwaC5hZGphY2VudE5vZGVzKHUpKWlmKE8gaW5zdGFuY2VvZiBqNiYmTy5nZXRBZGRyZXNzKHRoaXMubGF6aWx5''@;'; put 'put ''VHJhbnNmb3JtaW5nQXN0U2VydmljZSkuc2hlZXQ9PT1yKXtjb25zdCBaPU8uZ2V0Rm9ybXVsYSh0aGlzLmxhemlseVRyYW5zZm9ybWluZ0FzdFNlcnZpY2UpLGVlPU8uZ2V0QWRkcmVzcyh0aGlzLmxhemlseVRyYW5zZm9ybWluZ0FzdFNlcnZpY2UpLHtkZXBlbmRlbmNpZXM6dmV9PXRoaXMu''@;'; put 'put ''cGFyc2VyLmZldGNoQ2FjaGVkUmVzdWx0Rm9yQXN0KFopO2Zvcihjb25zdCBNZSBvZiBWNih2ZSxlZSkpTWUgaW5zdGFuY2VvZiBhOSYmTWUubmFtZS50b0xvd2VyQ2FzZSgpPT09ZS5kaXNwbGF5TmFtZS50b0xvd2VyQ2FzZSgpJiYodGhpcy5kZXBlbmRlbmN5R3JhcGguZ3JhcGgucmVtb3Zl''@;'; put 'put ''RWRnZShFLE8pLHRoaXMuZGVwZW5kZW5jeUdyYXBoLmdyYXBoLmFkZEVkZ2UoYSxPKSl9fXN0b3JlTmFtZWRFeHByZXNzaW9uSW5DZWxsKGUsdCl7Y29uc3Qgcj10aGlzLmNlbGxDb250ZW50UGFyc2VyLnBhcnNlKHQpO2lmKHIgaW5zdGFuY2VvZiBIZC5Gb3JtdWxhKXtjb25zdCBpPXRoaXMu''@;'; put 'put ''cGFyc2VyLnBhcnNlKHIuZm9ybXVsYSxCbygtMSwwLDApKTtpZihKXyhpLmFzdCkpdGhyb3cgbmV3IHJXZTtjb25zdHthc3Q6byxoYXNWb2xhdGlsZUZ1bmN0aW9uOmEsaGFzU3RydWN0dXJhbENoYW5nZUZ1bmN0aW9uOmwsZGVwZW5kZW5jaWVzOnV9PWk7dGhpcy5kZXBlbmRlbmN5R3JhcGgu''@;'; put 'put ''c2V0Rm9ybXVsYVRvQ2VsbChlLG8sVjYodSxlKSx5bC5zY2FsYXIoKSxhLGwpfWVsc2UgciBpbnN0YW5jZW9mIEhkLkVtcHR5P3RoaXMuc2V0Q2VsbEVtcHR5KGUpOnRoaXMuc2V0VmFsdWVUb0NlbGwoe3BhcnNlZFZhbHVlOnIudmFsdWUscmF3VmFsdWU6dH0sZSl9dXBkYXRlTmFtZWRFeHBy''@;'; put 'put ''ZXNzaW9uc0Zvck1vdmVkQ2VsbHMoZSx0LHIsaSl7aWYoZS5zaGVldD09PWkuc2hlZXQpcmV0dXJuW107Y29uc3Qgbz1bXSxhPWJhLnNwYW5Gcm9tKGksdCxyKTtmb3IoY29uc3QgbCBvZiBhLmFkZHJlc3Nlcyh0aGlzLmRlcGVuZGVuY3lHcmFwaCkpe2NvbnN0IHU9dGhpcy5hZGRyZXNzTWFw''@;'; put 'put ''cGluZy5mZXRjaENlbGwobCk7aWYodSBpbnN0YW5jZW9mIGo2JiZsLnNoZWV0IT09ZS5zaGVldCl7Y29uc3QgZz11LmdldEZvcm11bGEodGhpcy5sYXppbHlUcmFuc2Zvcm1pbmdBc3RTZXJ2aWNlKSx7ZGVwZW5kZW5jaWVzOkV9PXRoaXMucGFyc2VyLmZldGNoQ2FjaGVkUmVzdWx0Rm9yQXN0''@;'; put 'put ''KGcpO28ucHVzaCguLi50aGlzLnVwZGF0ZU5hbWVkRXhwcmVzc2lvbnNGb3JUYXJnZXRBZGRyZXNzKGUuc2hlZXQsbCxFKSl9fXJldHVybiBvfXVwZGF0ZU5hbWVkRXhwcmVzc2lvbnNGb3JUYXJnZXRBZGRyZXNzKGUsdCxyKXtpZihlPT09dC5zaGVldClyZXR1cm5bXTtjb25zdCBpPVtdLG89''@;'; put 'put ''dGhpcy5hZGRyZXNzTWFwcGluZy5mZXRjaENlbGwodCk7Zm9yKGNvbnN0IGEgb2YgVjYocix0KSl7aWYoIShhIGluc3RhbmNlb2YgYTkpKWNvbnRpbnVlO2NvbnN0IGw9YS5uYW1lLHU9dGhpcy5kZXBlbmRlbmN5R3JhcGguZmV0Y2hOYW1lZEV4cHJlc3Npb25WZXJ0ZXgobCxlKS52ZXJ0ZXgs''@;'; put 'put ''RT10aGlzLm5hbWVkRXhwcmVzc2lvbnMuaXNFeHByZXNzaW9uSW5TY29wZShsLHQuc2hlZXQpP3RoaXMuZGVwZW5kZW5jeUdyYXBoLmZldGNoTmFtZWRFeHByZXNzaW9uVmVydGV4KGwsdC5zaGVldCkudmVydGV4OnRoaXMuY29weU9yRmV0Y2hHbG9iYWxOYW1lZEV4cHJlc3Npb25WZXJ0ZXgo''@;'; put 'put ''bCx1LGkpO0UhPT11JiYodGhpcy5kZXBlbmRlbmN5R3JhcGguZ3JhcGgucmVtb3ZlRWRnZUlmRXhpc3RzKHUsbyksdGhpcy5kZXBlbmRlbmN5R3JhcGguZ3JhcGguYWRkRWRnZShFLG8pKX1yZXR1cm4gaX1hbGxvY2F0ZU5hbWVkRXhwcmVzc2lvbkFkZHJlc3NTcGFjZSgpe3RoaXMuZGVwZW5k''@;'; put 'put ''ZW5jeUdyYXBoLmFkZHJlc3NNYXBwaW5nLmFkZFNoZWV0KFlxLlNIRUVUX0ZPUl9XT1JLQk9PS19FWFBSRVNTSU9OUyxuZXcgWkp0KDAsMCkpfWNvcHlPckZldGNoR2xvYmFsTmFtZWRFeHByZXNzaW9uVmVydGV4KGUsdCxyKXtsZXQgaT10aGlzLm5hbWVkRXhwcmVzc2lvbnMubmFtZWRFeHBy''@;'; put 'put ''ZXNzaW9uRm9yU2NvcGUoZSk7aWYodm9pZCAwPT09aSlpZihpPXRoaXMubmFtZWRFeHByZXNzaW9ucy5hZGROYW1lZEV4cHJlc3Npb24oZSksci5wdXNoKGkubm9ybWFsaXplRXhwcmVzc2lvbk5hbWUoKSksdCBpbnN0YW5jZW9mIGo2KXtjb25zdCBvPXRoaXMucGFyc2VyLmZldGNoQ2FjaGVk''@;'; put 'put ''UmVzdWx0Rm9yQXN0KHQuZ2V0Rm9ybXVsYSh0aGlzLmxhemlseVRyYW5zZm9ybWluZ0FzdFNlcnZpY2UpKSx7YXN0OmEsaGFzVm9sYXRpbGVGdW5jdGlvbjpsLGhhc1N0cnVjdHVyYWxDaGFuZ2VGdW5jdGlvbjp1LGRlcGVuZGVuY2llczpnfT1vO3RoaXMuZGVwZW5kZW5jeUdyYXBoLnNldEZv''@;'; put 'put ''cm11bGFUb0NlbGwoaS5hZGRyZXNzLGEsVjYoZyxpLmFkZHJlc3MpLHlsLnNjYWxhcigpLGwsdSl9ZWxzZSB0IGluc3RhbmNlb2YgWF8/dGhpcy5zZXRDZWxsRW1wdHkoaS5hZGRyZXNzKTp0IGluc3RhbmNlb2YgUV8mJnRoaXMuc2V0VmFsdWVUb0NlbGwodC5nZXRWYWx1ZXMoKSxpLmFkZHJl''@;'; put 'put ''c3MpO3JldHVybiB0aGlzLmRlcGVuZGVuY3lHcmFwaC5mZXRjaENlbGxPckNyZWF0ZUVtcHR5KGkuYWRkcmVzcykudmVydGV4fX1mdW5jdGlvbiBHcShuKXtpZihuLmxlbmd0aDw9MSlyZXR1cm4gbjtjb25zdCBlPVsuLi5uXS5zb3J0KChbaV0sW29dKT0+aS1vKSx0PWUucmVkdWNlKChpLFtv''@;'; put 'put ''LGFdKT0+e2NvbnN0IGw9aVtpLmxlbmd0aC0xXSx1PWxbMF0rbFsxXTtyZXR1cm4gbzw9dT9sWzFdKz1NYXRoLm1heCgwLGEtKHUtbykpOmkucHVzaChbbyxhXSksaX0sW2VbMF1dKTtsZXQgcj0wO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7KytpKXRbaV1bMF0tPXIscis9dFtpXVsxXTtyZXR1''@;'; put 'put ''cm4gdH1mdW5jdGlvbiAkcShuKXtpZihuLmxlbmd0aDw9MSlyZXR1cm4gbjtjb25zdCBlPVsuLi5uXS5zb3J0KChbaV0sW29dKT0+aS1vKSx0PWUucmVkdWNlKChpLFtvLGFdKT0+e2NvbnN0IGw9aVtpLmxlbmd0aC0xXTtyZXR1cm4gbz09PWxbMF0/bFsxXT1NYXRoLm1heChsWzFdLGEpOmku''@;'; put 'put ''cHVzaChbbyxhXSksaX0sW2VbMF1dKTtsZXQgcj0wO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7KytpKXRbaV1bMF0rPXIscis9dFtpXVsxXTtyZXR1cm4gdH1mdW5jdGlvbiBxcShuKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihuKSYmbj4wfWNsYXNzIFIxe31jbGFzcyBudG4gZXh0ZW5kcyBS''@;'; put 'put ''MXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCksdGhpcy5jb21tYW5kPWUsdGhpcy5yb3dzUmVtb3ZhbHM9dH1kb1VuZG8oZSl7ZS51bmRvUmVtb3ZlUm93cyh0aGlzKX1kb1JlZG8oZSl7ZS5yZWRvUmVtb3ZlUm93cyh0aGlzKX19Y2xhc3MgcnRuIGV4dGVuZHMgUjF7Y29uc3RydWN0b3IoZSx0''@;'; put 'put ''LHIsaSxvLGEsbCl7c3VwZXIoKSx0aGlzLnNvdXJjZUxlZnRDb3JuZXI9ZSx0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlc3RpbmF0aW9uTGVmdENvcm5lcj1pLHRoaXMub3ZlcndyaXR0ZW5DZWxsc0RhdGE9byx0aGlzLmFkZGVkR2xvYmFsTmFtZWRFeHByZXNzaW9ucz1hLHRo''@;'; put 'put ''aXMudmVyc2lvbj1sfWRvVW5kbyhlKXtlLnVuZG9Nb3ZlQ2VsbHModGhpcyl9ZG9SZWRvKGUpe2UucmVkb01vdmVDZWxscyh0aGlzKX19Y2xhc3MgaXRuIGV4dGVuZHMgUjF7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLmNvbW1hbmQ9ZX1kb1VuZG8oZSl7ZS51bmRvQWRkUm93cyh0aGlz''@;'; put 'put ''KX1kb1JlZG8oZSl7ZS5yZWRvQWRkUm93cyh0aGlzKX19Y2xhc3Mgb3RuIGV4dGVuZHMgUjF7Y29uc3RydWN0b3IoZSx0LHIpe3N1cGVyKCksdGhpcy5zaGVldElkPWUsdGhpcy5yb3dNYXBwaW5nPXQsdGhpcy5vbGRDb250ZW50PXJ9ZG9VbmRvKGUpe2UudW5kb1NldFJvd09yZGVyKHRoaXMp''@;'; put 'put ''fWRvUmVkbyhlKXtlLnJlZG9TZXRSb3dPcmRlcih0aGlzKX19Y2xhc3MgYXRuIGV4dGVuZHMgUjF7Y29uc3RydWN0b3IoZSx0LHIpe3N1cGVyKCksdGhpcy5zaGVldElkPWUsdGhpcy5jb2x1bW5NYXBwaW5nPXQsdGhpcy5vbGRDb250ZW50PXJ9ZG9VbmRvKGUpe2UudW5kb1NldENvbHVtbk9y''@;'; put 'put ''ZGVyKHRoaXMpfWRvUmVkbyhlKXtlLnJlZG9TZXRDb2x1bW5PcmRlcih0aGlzKX19Y2xhc3Mgc3RuIGV4dGVuZHMgUjF7Y29uc3RydWN0b3IoZSx0LHIpe3N1cGVyKCksdGhpcy5zaGVldElkPWUsdGhpcy5vbGRTaGVldENvbnRlbnQ9dCx0aGlzLm5ld1NoZWV0Q29udGVudD1yfWRvVW5kbyhl''@;'; put 'put ''KXtlLnVuZG9TZXRTaGVldENvbnRlbnQodGhpcyl9ZG9SZWRvKGUpe2UucmVkb1NldFNoZWV0Q29udGVudCh0aGlzKX19Y2xhc3MgbHRuIGV4dGVuZHMgUjF7Y29uc3RydWN0b3IoZSx0LHIsaSxvKXtzdXBlcigpLHRoaXMuc2hlZXQ9ZSx0aGlzLnN0YXJ0Um93PXQsdGhpcy5udW1iZXJPZlJv''@;'; put 'put ''d3M9cix0aGlzLnRhcmdldFJvdz1pLHRoaXMudmVyc2lvbj1vLHRoaXMudW5kb1N0YXJ0PXRoaXMuc3RhcnRSb3c8dGhpcy50YXJnZXRSb3c/dGhpcy50YXJnZXRSb3ctdGhpcy5udW1iZXJPZlJvd3M6dGhpcy50YXJnZXRSb3csdGhpcy51bmRvRW5kPXRoaXMuc3RhcnRSb3c+dGhpcy50YXJn''@;'; put 'put ''ZXRSb3c/dGhpcy5zdGFydFJvdyt0aGlzLm51bWJlck9mUm93czp0aGlzLnN0YXJ0Um93fWRvVW5kbyhlKXtlLnVuZG9Nb3ZlUm93cyh0aGlzKX1kb1JlZG8oZSl7ZS5yZWRvTW92ZVJvd3ModGhpcyl9fWNsYXNzIGN0biBleHRlbmRzIFIxe2NvbnN0cnVjdG9yKGUsdCxyLGksbyl7c3VwZXIo''@;'; put 'put ''KSx0aGlzLnNoZWV0PWUsdGhpcy5zdGFydENvbHVtbj10LHRoaXMubnVtYmVyT2ZDb2x1bW5zPXIsdGhpcy50YXJnZXRDb2x1bW49aSx0aGlzLnZlcnNpb249byx0aGlzLnVuZG9TdGFydD10aGlzLnN0YXJ0Q29sdW1uPHRoaXMudGFyZ2V0Q29sdW1uP3RoaXMudGFyZ2V0Q29sdW1uLXRoaXMu''@;'; put 'put ''bnVtYmVyT2ZDb2x1bW5zOnRoaXMudGFyZ2V0Q29sdW1uLHRoaXMudW5kb0VuZD10aGlzLnN0YXJ0Q29sdW1uPnRoaXMudGFyZ2V0Q29sdW1uP3RoaXMuc3RhcnRDb2x1bW4rdGhpcy5udW1iZXJPZkNvbHVtbnM6dGhpcy5zdGFydENvbHVtbn1kb1VuZG8oZSl7ZS51bmRvTW92ZUNvbHVtbnMo''@;'; put 'put ''dGhpcyl9ZG9SZWRvKGUpe2UucmVkb01vdmVDb2x1bW5zKHRoaXMpfX1jbGFzcyB1dG4gZXh0ZW5kcyBSMXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuY29tbWFuZD1lfWRvVW5kbyhlKXtlLnVuZG9BZGRDb2x1bW5zKHRoaXMpfWRvUmVkbyhlKXtlLnJlZG9BZGRDb2x1bW5zKHRoaXMp''@;'; put 'put ''fX1jbGFzcyBkdG4gZXh0ZW5kcyBSMXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCksdGhpcy5jb21tYW5kPWUsdGhpcy5jb2x1bW5zUmVtb3ZhbHM9dH1kb1VuZG8oZSl7ZS51bmRvUmVtb3ZlQ29sdW1ucyh0aGlzKX1kb1JlZG8oZSl7ZS5yZWRvUmVtb3ZlQ29sdW1ucyh0aGlzKX19Y2xhc3Mg''@;'; put 'put ''aHRuIGV4dGVuZHMgUjF7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnNoZWV0TmFtZT1lfWRvVW5kbyhlKXtlLnVuZG9BZGRTaGVldCh0aGlzKX1kb1JlZG8oZSl7ZS5yZWRvQWRkU2hlZXQodGhpcyl9fWNsYXNzIGZ0biBleHRlbmRzIFIxe2NvbnN0cnVjdG9yKGUsdCxyLGksbyl7c3Vw''@;'; put 'put ''ZXIoKSx0aGlzLnNoZWV0TmFtZT1lLHRoaXMuc2hlZXRJZD10LHRoaXMub2xkU2hlZXRDb250ZW50PXIsdGhpcy5zY29wZWROYW1lZEV4cHJlc3Npb25zPWksdGhpcy52ZXJzaW9uPW99ZG9VbmRvKGUpe2UudW5kb1JlbW92ZVNoZWV0KHRoaXMpfWRvUmVkbyhlKXtlLnJlZG9SZW1vdmVTaGVl''@;'; put 'put ''dCh0aGlzKX19Y2xhc3MgcHRuIGV4dGVuZHMgUjF7Y29uc3RydWN0b3IoZSx0LHIpe3N1cGVyKCksdGhpcy5zaGVldElkPWUsdGhpcy5vbGROYW1lPXQsdGhpcy5uZXdOYW1lPXJ9ZG9VbmRvKGUpe2UudW5kb1JlbmFtZVNoZWV0KHRoaXMpfWRvUmVkbyhlKXtlLnJlZG9SZW5hbWVTaGVldCh0''@;'; put 'put ''aGlzKX19Y2xhc3MgZ3RuIGV4dGVuZHMgUjF7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigpLHRoaXMuc2hlZXRJZD1lLHRoaXMub2xkU2hlZXRDb250ZW50PXR9ZG9VbmRvKGUpe2UudW5kb0NsZWFyU2hlZXQodGhpcyl9ZG9SZWRvKGUpe2UucmVkb0NsZWFyU2hlZXQodGhpcyl9fWNsYXNzIG10''@;'; put 'put ''biBleHRlbmRzIFIxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5jZWxsQ29udGVudHM9ZX1kb1VuZG8oZSl7ZS51bmRvU2V0Q2VsbENvbnRlbnRzKHRoaXMpfWRvUmVkbyhlKXtlLnJlZG9TZXRDZWxsQ29udGVudHModGhpcyl9fWNsYXNzIHZ0biBleHRlbmRzIFIxe2NvbnN0cnVjdG9y''@;'; put 'put ''KGUsdCxyLGkpe3N1cGVyKCksdGhpcy50YXJnZXRMZWZ0Q29ybmVyPWUsdGhpcy5vbGRDb250ZW50PXQsdGhpcy5uZXdDb250ZW50PXIsdGhpcy5hZGRlZEdsb2JhbE5hbWVkRXhwcmVzc2lvbnM9aX1kb1VuZG8oZSl7ZS51bmRvUGFzdGUodGhpcyl9ZG9SZWRvKGUpe2UucmVkb1Bhc3RlKHRo''@;'; put 'put ''aXMpfX1jbGFzcyBfdG4gZXh0ZW5kcyBSMXtjb25zdHJ1Y3RvcihlLHQscixpKXtzdXBlcigpLHRoaXMubmFtZT1lLHRoaXMubmV3Q29udGVudD10LHRoaXMuc2NvcGU9cix0aGlzLm9wdGlvbnM9aX1kb1VuZG8oZSl7ZS51bmRvQWRkTmFtZWRFeHByZXNzaW9uKHRoaXMpfWRvUmVkbyhlKXtl''@;'; put 'put ''LnJlZG9BZGROYW1lZEV4cHJlc3Npb24odGhpcyl9fWNsYXNzIHl0biBleHRlbmRzIFIxe2NvbnN0cnVjdG9yKGUsdCxyKXtzdXBlcigpLHRoaXMubmFtZWRFeHByZXNzaW9uPWUsdGhpcy5jb250ZW50PXQsdGhpcy5zY29wZT1yfWRvVW5kbyhlKXtlLnVuZG9SZW1vdmVOYW1lZEV4cHJlc3Np''@;'; put 'put ''b24odGhpcyl9ZG9SZWRvKGUpe2UucmVkb1JlbW92ZU5hbWVkRXhwcmVzc2lvbih0aGlzKX19Y2xhc3MgYnRuIGV4dGVuZHMgUjF7Y29uc3RydWN0b3IoZSx0LHIsaSxvKXtzdXBlcigpLHRoaXMubmFtZWRFeHByZXNzaW9uPWUsdGhpcy5uZXdDb250ZW50PXQsdGhpcy5vbGRDb250ZW50PXIs''@;'; put 'put ''dGhpcy5zY29wZT1pLHRoaXMub3B0aW9ucz1vfWRvVW5kbyhlKXtlLnVuZG9DaGFuZ2VOYW1lZEV4cHJlc3Npb24odGhpcyl9ZG9SZWRvKGUpe2UucmVkb0NoYW5nZU5hbWVkRXhwcmVzc2lvbih0aGlzKX19Y2xhc3Mgd3RuIGV4dGVuZHMgUjF7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1''@;'; put 'put ''bWVudHMpLHRoaXMub3BlcmF0aW9ucz1bXX1hZGQoZSl7dGhpcy5vcGVyYXRpb25zLnB1c2goZSl9KnJldmVyc2VkT3BlcmF0aW9ucygpe2ZvcihsZXQgZT10aGlzLm9wZXJhdGlvbnMubGVuZ3RoLTE7ZT49MDtlLS0peWllbGQgdGhpcy5vcGVyYXRpb25zW2VdfWRvVW5kbyhlKXtlLnVuZG9C''@;'; put 'put ''YXRjaCh0aGlzKX1kb1JlZG8oZSl7ZS5yZWRvQmF0Y2godGhpcyl9fWNsYXNzIEN0bntjb25zdHJ1Y3RvcihlLHQpe3RoaXMub3BlcmF0aW9ucz10LHRoaXMub2xkRGF0YT1uZXcgTWFwLHRoaXMudW5kb1N0YWNrPVtdLHRoaXMucmVkb1N0YWNrPVtdLHRoaXMudW5kb0xpbWl0PWUudW5kb0xp''@;'; put 'put ''bWl0fXNhdmVPcGVyYXRpb24oZSl7dm9pZCAwIT09dGhpcy5iYXRjaFVuZG9FbnRyeT90aGlzLmJhdGNoVW5kb0VudHJ5LmFkZChlKTp0aGlzLmFkZFVuZG9FbnRyeShlKX1iZWdpbkJhdGNoTW9kZSgpe3RoaXMuYmF0Y2hVbmRvRW50cnk9bmV3IHd0bn1jb21taXRCYXRjaE1vZGUoKXtpZih2''@;'; put 'put ''b2lkIDA9PT10aGlzLmJhdGNoVW5kb0VudHJ5KXRocm93IEVycm9yKCJCYXRjaCBtb2RlIHdhc24ndCBzdGFydGVkIik7dGhpcy5hZGRVbmRvRW50cnkodGhpcy5iYXRjaFVuZG9FbnRyeSksdGhpcy5iYXRjaFVuZG9FbnRyeT12b2lkIDB9c3RvcmVEYXRhRm9yVmVyc2lvbihlLHQscil7dGhp''@;'; put 'put ''cy5vbGREYXRhLmhhcyhlKXx8dGhpcy5vbGREYXRhLnNldChlLFtdKSx0aGlzLm9sZERhdGEuZ2V0KGUpLnB1c2goW3Qscl0pfWNsZWFyUmVkb1N0YWNrKCl7dGhpcy5yZWRvU3RhY2s9W119Y2xlYXJVbmRvU3RhY2soKXt0aGlzLnVuZG9TdGFjaz1bXX1pc1VuZG9TdGFja0VtcHR5KCl7cmV0''@;'; put 'put ''dXJuIDA9PT10aGlzLnVuZG9TdGFjay5sZW5ndGh9aXNSZWRvU3RhY2tFbXB0eSgpe3JldHVybiAwPT09dGhpcy5yZWRvU3RhY2subGVuZ3RofXVuZG8oKXtjb25zdCBlPXRoaXMudW5kb1N0YWNrLnBvcCgpO2lmKCFlKXRocm93IEVycm9yKCJBdHRlbXB0ZWQgdG8gdW5kbyB3aXRob3V0IG9w''@;'; put 'put ''ZXJhdGlvbiBvbiBzdGFjayIpO3RoaXMudW5kb0VudHJ5KGUpLHRoaXMucmVkb1N0YWNrLnB1c2goZSl9dW5kb0JhdGNoKGUpe2Zvcihjb25zdCB0IG9mIGUucmV2ZXJzZWRPcGVyYXRpb25zKCkpdGhpcy51bmRvRW50cnkodCl9dW5kb1JlbW92ZVJvd3MoZSl7dGhpcy5vcGVyYXRpb25zLmZv''@;'; put 'put ''cmNlQXBwbHlQb3N0cG9uZWRUcmFuc2Zvcm1hdGlvbnMoKTtjb25zdHtjb21tYW5kOntzaGVldDp0fSxyb3dzUmVtb3ZhbHM6cn09ZTtmb3IobGV0IGk9ci5sZW5ndGgtMTtpPj0wOy0taSl7Y29uc3Qgbz1yW2ldO3RoaXMub3BlcmF0aW9ucy5hZGRSb3dzKG5ldyBCV2UodCxbW28ucm93RnJv''@;'; put 'put ''bSxvLnJvd0NvdW50XV0pKTtmb3IoY29uc3R7YWRkcmVzczphLGNlbGxUeXBlOmx9b2Ygby5yZW1vdmVkQ2VsbHMpdGhpcy5vcGVyYXRpb25zLnJlc3RvcmVDZWxsKGEsbCk7dGhpcy5yZXN0b3JlT2xkRGF0YUZyb21WZXJzaW9uKG8udmVyc2lvbi0xKX19dW5kb1JlbW92ZUNvbHVtbnMoZSl7''@;'; put 'put ''dGhpcy5vcGVyYXRpb25zLmZvcmNlQXBwbHlQb3N0cG9uZWRUcmFuc2Zvcm1hdGlvbnMoKTtjb25zdHtjb21tYW5kOntzaGVldDp0fSxjb2x1bW5zUmVtb3ZhbHM6cn09ZTtmb3IobGV0IGk9ci5sZW5ndGgtMTtpPj0wOy0taSl7Y29uc3Qgbz1yW2ldO3RoaXMub3BlcmF0aW9ucy5hZGRDb2x1''@;'; put 'put ''bW5zKG5ldyBqV2UodCxbW28uY29sdW1uRnJvbSxvLmNvbHVtbkNvdW50XV0pKTtmb3IoY29uc3R7YWRkcmVzczphLGNlbGxUeXBlOmx9b2Ygby5yZW1vdmVkQ2VsbHMpdGhpcy5vcGVyYXRpb25zLnJlc3RvcmVDZWxsKGEsbCk7dGhpcy5yZXN0b3JlT2xkRGF0YUZyb21WZXJzaW9uKG8udmVy''@;'; put 'put ''c2lvbi0xKX19dW5kb0FkZFJvd3MoZSl7Y29uc3QgdD1lLmNvbW1hbmQucm93c1NwYW5zKCk7Zm9yKGxldCByPXQubGVuZ3RoLTE7cj49MDstLXIpe2NvbnN0IGk9dFtyXTt0aGlzLm9wZXJhdGlvbnMucmVtb3ZlUm93cyhuZXcgVldlKGUuY29tbWFuZC5zaGVldCxbW2kucm93U3RhcnQsaS5u''@;'; put 'put ''dW1iZXJPZlJvd3NdXSkpfX11bmRvQWRkQ29sdW1ucyhlKXtjb25zdCB0PWUuY29tbWFuZC5jb2x1bW5zU3BhbnMoKTtmb3IobGV0IHI9dC5sZW5ndGgtMTtyPj0wOy0tcil7Y29uc3QgaT10W3JdO3RoaXMub3BlcmF0aW9ucy5yZW1vdmVDb2x1bW5zKG5ldyBVV2UoZS5jb21tYW5kLnNoZWV0''@;'; put 'put ''LFtbaS5jb2x1bW5TdGFydCxpLm51bWJlck9mQ29sdW1uc11dKSl9fXVuZG9TZXRDZWxsQ29udGVudHMoZSl7Zm9yKGNvbnN0IHQgb2YgZS5jZWxsQ29udGVudHMpe2NvbnN0IHI9dC5hZGRyZXNzLFtpLG9dPXQub2xkQ29udGVudDt1UChyLGkpfHx0aGlzLm9wZXJhdGlvbnMuc2V0Q2VsbEVt''@;'; put 'put ''cHR5KHIpLHRoaXMub3BlcmF0aW9ucy5yZXN0b3JlQ2VsbChpLG8pfX11bmRvUGFzdGUoZSl7dGhpcy5yZXN0b3JlT3BlcmF0aW9uT2xkQ29udGVudChlLm9sZENvbnRlbnQpO2Zvcihjb25zdCB0IG9mIGUuYWRkZWRHbG9iYWxOYW1lZEV4cHJlc3Npb25zKXRoaXMub3BlcmF0aW9ucy5yZW1v''@;'; put 'put ''dmVOYW1lZEV4cHJlc3Npb24odCl9dW5kb01vdmVSb3dzKGUpe2NvbnN0e3NoZWV0OnR9PWU7dGhpcy5vcGVyYXRpb25zLm1vdmVSb3dzKHQsZS51bmRvU3RhcnQsZS5udW1iZXJPZlJvd3MsZS51bmRvRW5kKSx0aGlzLnJlc3RvcmVPbGREYXRhRnJvbVZlcnNpb24oZS52ZXJzaW9uLTEpfXVu''@;'; put 'put ''ZG9Nb3ZlQ29sdW1ucyhlKXtjb25zdHtzaGVldDp0fT1lO3RoaXMub3BlcmF0aW9ucy5tb3ZlQ29sdW1ucyh0LGUudW5kb1N0YXJ0LGUubnVtYmVyT2ZDb2x1bW5zLGUudW5kb0VuZCksdGhpcy5yZXN0b3JlT2xkRGF0YUZyb21WZXJzaW9uKGUudmVyc2lvbi0xKX11bmRvTW92ZUNlbGxzKGUp''@;'; put 'put ''e3RoaXMub3BlcmF0aW9ucy5mb3JjZUFwcGx5UG9zdHBvbmVkVHJhbnNmb3JtYXRpb25zKCksdGhpcy5vcGVyYXRpb25zLm1vdmVDZWxscyhlLmRlc3RpbmF0aW9uTGVmdENvcm5lcixlLndpZHRoLGUuaGVpZ2h0LGUuc291cmNlTGVmdENvcm5lciksdGhpcy5yZXN0b3JlT3BlcmF0aW9uT2xk''@;'; put 'put ''Q29udGVudChlLm92ZXJ3cml0dGVuQ2VsbHNEYXRhKSx0aGlzLnJlc3RvcmVPbGREYXRhRnJvbVZlcnNpb24oZS52ZXJzaW9uLTEpO2Zvcihjb25zdCB0IG9mIGUuYWRkZWRHbG9iYWxOYW1lZEV4cHJlc3Npb25zKXRoaXMub3BlcmF0aW9ucy5yZW1vdmVOYW1lZEV4cHJlc3Npb24odCl9dW5k''@;'; put 'put ''b0FkZFNoZWV0KGUpe2NvbnN0e3NoZWV0TmFtZTp0fT1lO3RoaXMub3BlcmF0aW9ucy5yZW1vdmVTaGVldEJ5TmFtZSh0KX11bmRvUmVtb3ZlU2hlZXQoZSl7dGhpcy5vcGVyYXRpb25zLmZvcmNlQXBwbHlQb3N0cG9uZWRUcmFuc2Zvcm1hdGlvbnMoKTtjb25zdHtvbGRTaGVldENvbnRlbnQ6''@;'; put 'put ''dCxzaGVldElkOnJ9PWU7dGhpcy5vcGVyYXRpb25zLmFkZFNoZWV0KGUuc2hlZXROYW1lKTtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKyl7Y29uc3Qgbz10W2ldO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKXtjb25zdCBsPW9bYV0sdT1CbyhyLGEsaSk7dGhpcy5vcGVyYXRpb25zLnJl''@;'; put 'put ''c3RvcmVDZWxsKHUsbCl9fWZvcihjb25zdFtpLG9db2YgZS5zY29wZWROYW1lZEV4cHJlc3Npb25zKXRoaXMub3BlcmF0aW9ucy5yZXN0b3JlTmFtZWRFeHByZXNzaW9uKGksbyxyKTt0aGlzLnJlc3RvcmVPbGREYXRhRnJvbVZlcnNpb24oZS52ZXJzaW9uLTEpfXVuZG9SZW5hbWVTaGVldChl''@;'; put 'put ''KXt0aGlzLm9wZXJhdGlvbnMucmVuYW1lU2hlZXQoZS5zaGVldElkLGUub2xkTmFtZSl9dW5kb0NsZWFyU2hlZXQoZSl7Y29uc3R7b2xkU2hlZXRDb250ZW50OnQsc2hlZXRJZDpyfT1lO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtjb25zdCBvPXRbaV07Zm9yKGxldCBhPTA7YTxvLmxl''@;'; put 'put ''bmd0aDthKyspe2NvbnN0IGw9b1thXSx1PUJvKHIsYSxpKTt0aGlzLm9wZXJhdGlvbnMucmVzdG9yZUNlbGwodSxsKX19fXVuZG9TZXRTaGVldENvbnRlbnQoZSl7Y29uc3R7b2xkU2hlZXRDb250ZW50OnQsc2hlZXRJZDpyfT1lO3RoaXMub3BlcmF0aW9ucy5jbGVhclNoZWV0KHIpO2Zvcihs''@;'; put 'put ''ZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtjb25zdCBvPXRbaV07Zm9yKGxldCBhPTA7YTxvLmxlbmd0aDthKyspe2NvbnN0IGw9b1thXSx1PUJvKHIsYSxpKTt0aGlzLm9wZXJhdGlvbnMucmVzdG9yZUNlbGwodSxsKX19fXVuZG9BZGROYW1lZEV4cHJlc3Npb24oZSl7dGhpcy5vcGVyYXRpb25z''@;'; put 'put ''LnJlbW92ZU5hbWVkRXhwcmVzc2lvbihlLm5hbWUsZS5zY29wZSl9dW5kb1JlbW92ZU5hbWVkRXhwcmVzc2lvbihlKXt0aGlzLm9wZXJhdGlvbnMucmVzdG9yZU5hbWVkRXhwcmVzc2lvbihlLm5hbWVkRXhwcmVzc2lvbixlLmNvbnRlbnQsZS5zY29wZSl9dW5kb0NoYW5nZU5hbWVkRXhwcmVz''@;'; put 'put ''c2lvbihlKXt0aGlzLm9wZXJhdGlvbnMucmVzdG9yZU5hbWVkRXhwcmVzc2lvbihlLm5hbWVkRXhwcmVzc2lvbixlLm9sZENvbnRlbnQsZS5zY29wZSl9dW5kb1NldFJvd09yZGVyKGUpe3RoaXMucmVzdG9yZU9wZXJhdGlvbk9sZENvbnRlbnQoZS5vbGRDb250ZW50KX11bmRvU2V0Q29sdW1u''@;'; put 'put ''T3JkZXIoZSl7dGhpcy5yZXN0b3JlT3BlcmF0aW9uT2xkQ29udGVudChlLm9sZENvbnRlbnQpfXJlZG8oKXtjb25zdCBlPXRoaXMucmVkb1N0YWNrLnBvcCgpO2lmKCFlKXRocm93IEVycm9yKCJBdHRlbXB0ZWQgdG8gcmVkbyB3aXRob3V0IG9wZXJhdGlvbiBvbiBzdGFjayIpO3RoaXMucmVk''@;'; put 'put ''b0VudHJ5KGUpLHRoaXMudW5kb1N0YWNrLnB1c2goZSl9cmVkb0JhdGNoKGUpe2Zvcihjb25zdCB0IG9mIGUub3BlcmF0aW9ucyl0aGlzLnJlZG9FbnRyeSh0KX1yZWRvUmVtb3ZlUm93cyhlKXt0aGlzLm9wZXJhdGlvbnMucmVtb3ZlUm93cyhlLmNvbW1hbmQpfXJlZG9Nb3ZlQ2VsbHMoZSl7''@;'; put 'put ''dGhpcy5vcGVyYXRpb25zLm1vdmVDZWxscyhlLnNvdXJjZUxlZnRDb3JuZXIsZS53aWR0aCxlLmhlaWdodCxlLmRlc3RpbmF0aW9uTGVmdENvcm5lcil9cmVkb1JlbW92ZUNvbHVtbnMoZSl7dGhpcy5vcGVyYXRpb25zLnJlbW92ZUNvbHVtbnMoZS5jb21tYW5kKX1yZWRvUGFzdGUoZSl7Y29u''@;'; put 'put ''c3R7dGFyZ2V0TGVmdENvcm5lcjp0LG5ld0NvbnRlbnQ6cn09ZSxpPXIubGVuZ3RoLG89clswXS5sZW5ndGg7Zm9yKGxldCBhPTA7YTxpOysrYSlmb3IobGV0IGw9MDtsPG87KytsKXtjb25zdCB1PUJvKHQuc2hlZXQsdC5jb2wrbCx0LnJvdythKTt0aGlzLm9wZXJhdGlvbnMucmVzdG9yZUNl''@;'; put 'put ''bGwodSxyW2FdW2xdKX19cmVkb1NldENlbGxDb250ZW50cyhlKXtmb3IoY29uc3QgdCBvZiBlLmNlbGxDb250ZW50cyl0aGlzLm9wZXJhdGlvbnMuc2V0Q2VsbENvbnRlbnQodC5hZGRyZXNzLHQubmV3Q29udGVudCl9cmVkb0FkZFJvd3MoZSl7dGhpcy5vcGVyYXRpb25zLmFkZFJvd3MoZS5j''@;'; put 'put ''b21tYW5kKX1yZWRvQWRkQ29sdW1ucyhlKXt0aGlzLm9wZXJhdGlvbnMuYWRkQ29sdW1ucyhlLmNvbW1hbmQpfXJlZG9SZW1vdmVTaGVldChlKXt0aGlzLm9wZXJhdGlvbnMucmVtb3ZlU2hlZXRCeU5hbWUoZS5zaGVldE5hbWUpfXJlZG9BZGRTaGVldChlKXt0aGlzLm9wZXJhdGlvbnMuYWRk''@;'; put 'put ''U2hlZXQoZS5zaGVldE5hbWUpfXJlZG9SZW5hbWVTaGVldChlKXt0aGlzLm9wZXJhdGlvbnMucmVuYW1lU2hlZXQoZS5zaGVldElkLGUubmV3TmFtZSl9cmVkb01vdmVSb3dzKGUpe3RoaXMub3BlcmF0aW9ucy5tb3ZlUm93cyhlLnNoZWV0LGUuc3RhcnRSb3csZS5udW1iZXJPZlJvd3MsZS50''@;'; put 'put ''YXJnZXRSb3cpfXJlZG9Nb3ZlQ29sdW1ucyhlKXt0aGlzLm9wZXJhdGlvbnMubW92ZUNvbHVtbnMoZS5zaGVldCxlLnN0YXJ0Q29sdW1uLGUubnVtYmVyT2ZDb2x1bW5zLGUudGFyZ2V0Q29sdW1uKX1yZWRvQ2xlYXJTaGVldChlKXt0aGlzLm9wZXJhdGlvbnMuY2xlYXJTaGVldChlLnNoZWV0''@;'; put 'put ''SWQpfXJlZG9TZXRTaGVldENvbnRlbnQoZSl7Y29uc3R7c2hlZXRJZDp0LG5ld1NoZWV0Q29udGVudDpyfT1lO3RoaXMub3BlcmF0aW9ucy5zZXRTaGVldENvbnRlbnQodCxyKX1yZWRvQWRkTmFtZWRFeHByZXNzaW9uKGUpe3RoaXMub3BlcmF0aW9ucy5hZGROYW1lZEV4cHJlc3Npb24oZS5u''@;'; put 'put ''YW1lLGUubmV3Q29udGVudCxlLnNjb3BlLGUub3B0aW9ucyl9cmVkb1JlbW92ZU5hbWVkRXhwcmVzc2lvbihlKXt0aGlzLm9wZXJhdGlvbnMucmVtb3ZlTmFtZWRFeHByZXNzaW9uKGUubmFtZWRFeHByZXNzaW9uLmRpc3BsYXlOYW1lLGUuc2NvcGUpfXJlZG9DaGFuZ2VOYW1lZEV4cHJlc3Np''@;'; put 'put ''b24oZSl7dGhpcy5vcGVyYXRpb25zLmNoYW5nZU5hbWVkRXhwcmVzc2lvbkV4cHJlc3Npb24oZS5uYW1lZEV4cHJlc3Npb24uZGlzcGxheU5hbWUsZS5uZXdDb250ZW50LGUuc2NvcGUsZS5vcHRpb25zKX1yZWRvU2V0Um93T3JkZXIoZSl7dGhpcy5vcGVyYXRpb25zLnNldFJvd09yZGVyKGUu''@;'; put 'put ''c2hlZXRJZCxlLnJvd01hcHBpbmcpfXJlZG9TZXRDb2x1bW5PcmRlcihlKXt0aGlzLm9wZXJhdGlvbnMuc2V0Q29sdW1uT3JkZXIoZS5zaGVldElkLGUuY29sdW1uTWFwcGluZyl9YWRkVW5kb0VudHJ5KGUpe3RoaXMudW5kb1N0YWNrLnB1c2goZSksdGhpcy51bmRvU3RhY2suc3BsaWNlKDAs''@;'; put 'put ''TWF0aC5tYXgoMCx0aGlzLnVuZG9TdGFjay5sZW5ndGgtdGhpcy51bmRvTGltaXQpKX11bmRvRW50cnkoZSl7ZS5kb1VuZG8odGhpcyl9cmVzdG9yZU9wZXJhdGlvbk9sZENvbnRlbnQoZSl7Zm9yKGNvbnN0W3Qscl1vZiBlKXRoaXMub3BlcmF0aW9ucy5yZXN0b3JlQ2VsbCh0LHIpfXJlZG9F''@;'; put 'put ''bnRyeShlKXtlLmRvUmVkbyh0aGlzKX1yZXN0b3JlT2xkRGF0YUZyb21WZXJzaW9uKGUpe2NvbnN0IHQ9dGhpcy5vbGREYXRhLmdldChlKXx8W107Zm9yKGNvbnN0IHIgb2YgdCl7Y29uc3RbaSxvXT1yO3RoaXMub3BlcmF0aW9ucy5zZXRGb3JtdWxhVG9DZWxsRnJvbUNhY2hlKG8saSl9fX1j''@;'; put 'put ''bGFzcyBTdG57Y29uc3RydWN0b3IoZSx0LHIsaSxvLGEsbCx1LGcsRSl7dGhpcy5vcGVyYXRpb25zPXQsdGhpcy51bmRvUmVkbz1yLHRoaXMuY2xpcGJvYXJkT3BlcmF0aW9ucz1pLHRoaXMuZGVwZW5kZW5jeUdyYXBoPW8sdGhpcy5jb2x1bW5TZWFyY2g9YSx0aGlzLnBhcnNlcj1sLHRoaXMu''@;'; put 'put ''Y2VsbENvbnRlbnRQYXJzZXI9dSx0aGlzLmxhemlseVRyYW5zZm9ybWluZ0FzdFNlcnZpY2U9Zyx0aGlzLm5hbWVkRXhwcmVzc2lvbnM9RSx0aGlzLm1heFJvd3M9ZS5tYXhSb3dzLHRoaXMubWF4Q29sdW1ucz1lLm1heENvbHVtbnN9Z2V0IHNoZWV0TWFwcGluZygpe3JldHVybiB0aGlzLmRl''@;'; put 'put ''cGVuZGVuY3lHcmFwaC5zaGVldE1hcHBpbmd9YWRkUm93cyhlLC4uLnQpe2NvbnN0IHI9bmV3IEJXZShlLHQpO3RoaXMuZW5zdXJlSXRJc1Bvc3NpYmxlVG9BZGRSb3dzKGUsLi4udCksdGhpcy51bmRvUmVkby5jbGVhclJlZG9TdGFjaygpLHRoaXMuY2xpcGJvYXJkT3BlcmF0aW9ucy5hYm9y''@;'; put 'put ''dEN1dCgpLHRoaXMub3BlcmF0aW9ucy5hZGRSb3dzKHIpLHRoaXMudW5kb1JlZG8uc2F2ZU9wZXJhdGlvbihuZXcgaXRuKHIpKX1yZW1vdmVSb3dzKGUsLi4udCl7Y29uc3Qgcj1uZXcgVldlKGUsdCk7dGhpcy5lbnN1cmVJdElzUG9zc2libGVUb1JlbW92ZVJvd3MoZSwuLi50KSx0aGlzLnVu''@;'; put 'put ''ZG9SZWRvLmNsZWFyUmVkb1N0YWNrKCksdGhpcy5jbGlwYm9hcmRPcGVyYXRpb25zLmFib3J0Q3V0KCk7Y29uc3QgaT10aGlzLm9wZXJhdGlvbnMucmVtb3ZlUm93cyhyKTt0aGlzLnVuZG9SZWRvLnNhdmVPcGVyYXRpb24obmV3IG50bihyLGkpKX1hZGRDb2x1bW5zKGUsLi4udCl7Y29uc3Qg''@;'; put 'put ''cj1uZXcgaldlKGUsdCk7dGhpcy5lbnN1cmVJdElzUG9zc2libGVUb0FkZENvbHVtbnMoZSwuLi50KSx0aGlzLnVuZG9SZWRvLmNsZWFyUmVkb1N0YWNrKCksdGhpcy5jbGlwYm9hcmRPcGVyYXRpb25zLmFib3J0Q3V0KCksdGhpcy5vcGVyYXRpb25zLmFkZENvbHVtbnMociksdGhpcy51bmRv''@;'; put 'put ''UmVkby5zYXZlT3BlcmF0aW9uKG5ldyB1dG4ocikpfXJlbW92ZUNvbHVtbnMoZSwuLi50KXtjb25zdCByPW5ldyBVV2UoZSx0KTt0aGlzLmVuc3VyZUl0SXNQb3NzaWJsZVRvUmVtb3ZlQ29sdW1ucyhlLC4uLnQpLHRoaXMudW5kb1JlZG8uY2xlYXJSZWRvU3RhY2soKSx0aGlzLmNsaXBib2Fy''@;'; put 'put ''ZE9wZXJhdGlvbnMuYWJvcnRDdXQoKTtjb25zdCBpPXRoaXMub3BlcmF0aW9ucy5yZW1vdmVDb2x1bW5zKHIpO3RoaXMudW5kb1JlZG8uc2F2ZU9wZXJhdGlvbihuZXcgZHRuKHIsaSkpfW1vdmVDZWxscyhlLHQscixpKXt0aGlzLnVuZG9SZWRvLmNsZWFyUmVkb1N0YWNrKCksdGhpcy5jbGlw''@;'; put 'put ''Ym9hcmRPcGVyYXRpb25zLmFib3J0Q3V0KCk7Y29uc3R7dmVyc2lvbjpvLG92ZXJ3cml0dGVuQ2VsbHNEYXRhOmEsYWRkZWRHbG9iYWxOYW1lZEV4cHJlc3Npb25zOmx9PXRoaXMub3BlcmF0aW9ucy5tb3ZlQ2VsbHMoZSx0LHIsaSk7dGhpcy51bmRvUmVkby5zYXZlT3BlcmF0aW9uKG5ldyBy''@;'; put 'put ''dG4oZSx0LHIsaSxhLGwsbykpfW1vdmVSb3dzKGUsdCxyLGkpe3RoaXMuZW5zdXJlSXRJc1Bvc3NpYmxlVG9Nb3ZlUm93cyhlLHQscixpKSx0aGlzLnVuZG9SZWRvLmNsZWFyUmVkb1N0YWNrKCksdGhpcy5jbGlwYm9hcmRPcGVyYXRpb25zLmFib3J0Q3V0KCk7Y29uc3Qgbz10aGlzLm9wZXJh''@;'; put 'put ''dGlvbnMubW92ZVJvd3MoZSx0LHIsaSk7dGhpcy51bmRvUmVkby5zYXZlT3BlcmF0aW9uKG5ldyBsdG4oZSx0LHIsaSxvKSl9bW92ZUNvbHVtbnMoZSx0LHIsaSl7dGhpcy5lbnN1cmVJdElzUG9zc2libGVUb01vdmVDb2x1bW5zKGUsdCxyLGkpLHRoaXMudW5kb1JlZG8uY2xlYXJSZWRvU3Rh''@;'; put 'put ''Y2soKTtjb25zdCBvPXRoaXMub3BlcmF0aW9ucy5tb3ZlQ29sdW1ucyhlLHQscixpKTt0aGlzLnVuZG9SZWRvLnNhdmVPcGVyYXRpb24obmV3IGN0bihlLHQscixpLG8pKX1jdXQoZSx0LHIpe3RoaXMuY2xpcGJvYXJkT3BlcmF0aW9ucy5jdXQoZSx0LHIpfWVuc3VyZUl0SXNQb3NzaWJsZVRv''@;'; put 'put ''Q29weShlLHQscil7aWYoIXVBKHQpKXRocm93IG5ldyBuMCgid2lkdGggdG8gYmUgcG9zaXRpdmUgaW50ZWdlci4iKTtpZighdUEocikpdGhyb3cgbmV3IG4wKCJoZWlnaHQgdG8gYmUgcG9zaXRpdmUgaW50ZWdlci4iKX1jb3B5KGUsdCxyKXt0aGlzLmVuc3VyZUl0SXNQb3NzaWJsZVRvQ29w''@;'; put 'put ''eShlLHQsciksdGhpcy5jbGlwYm9hcmRPcGVyYXRpb25zLmNvcHkoZSx0LHIpfXBhc3RlKGUpe2NvbnN0IHQ9dGhpcy5jbGlwYm9hcmRPcGVyYXRpb25zLmNsaXBib2FyZDtpZih2b2lkIDA9PT10KXRocm93IG5ldyBDSnQ7aWYodGhpcy5jbGlwYm9hcmRPcGVyYXRpb25zLmlzQ3V0Q2xpcGJv''@;'; put 'put ''YXJkKCkpdGhpcy5tb3ZlQ2VsbHModC5zb3VyY2VMZWZ0Q29ybmVyLHQud2lkdGgsdC5oZWlnaHQsZSk7ZWxzZSBpZih0aGlzLmNsaXBib2FyZE9wZXJhdGlvbnMuaXNDb3B5Q2xpcGJvYXJkKCkpe3RoaXMuY2xpcGJvYXJkT3BlcmF0aW9ucy5lbnN1cmVJdElzUG9zc2libGVUb0NvcHlQYXN0''@;'; put 'put ''ZShlKTtjb25zdCByPWJhLnNwYW5Gcm9tKGUsdC53aWR0aCx0LmhlaWdodCksaT10aGlzLm9wZXJhdGlvbnMuZ2V0UmFuZ2VDbGlwYm9hcmRDZWxscyhyKTt0aGlzLnVuZG9SZWRvLmNsZWFyUmVkb1N0YWNrKCk7Y29uc3Qgbz10aGlzLm9wZXJhdGlvbnMucmVzdG9yZUNsaXBib2FyZENlbGxz''@;'; put 'put ''KHQuc291cmNlTGVmdENvcm5lci5zaGVldCx0LmdldENvbnRlbnQoZSkpO3RoaXMudW5kb1JlZG8uc2F2ZU9wZXJhdGlvbihuZXcgdnRuKGUsaSx0LmNvbnRlbnQsbykpfX1iZWdpblVuZG9SZWRvQmF0Y2hNb2RlKCl7dGhpcy51bmRvUmVkby5iZWdpbkJhdGNoTW9kZSgpfWNvbW1pdFVuZG9S''@;'; put 'put ''ZWRvQmF0Y2hNb2RlKCl7dGhpcy51bmRvUmVkby5jb21taXRCYXRjaE1vZGUoKX1pc0NsaXBib2FyZEVtcHR5KCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuY2xpcGJvYXJkT3BlcmF0aW9ucy5jbGlwYm9hcmR9Y2xlYXJDbGlwYm9hcmQoKXt0aGlzLmNsaXBib2FyZE9wZXJhdGlvbnMuY2xlYXIo''@;'; put 'put ''KX1hZGRTaGVldChlKXt2b2lkIDAhPT1lJiZ0aGlzLmVuc3VyZUl0SXNQb3NzaWJsZVRvQWRkU2hlZXQoZSksdGhpcy51bmRvUmVkby5jbGVhclJlZG9TdGFjaygpO2NvbnN0IHQ9dGhpcy5vcGVyYXRpb25zLmFkZFNoZWV0KGUpO3JldHVybiB0aGlzLnVuZG9SZWRvLnNhdmVPcGVyYXRpb24o''@;'; put 'put ''bmV3IGh0bih0KSksdH1yZW1vdmVTaGVldChlKXt0aGlzLmVuc3VyZVNjb3BlSWRJc1ZhbGlkKGUpLHRoaXMudW5kb1JlZG8uY2xlYXJSZWRvU3RhY2soKSx0aGlzLmNsaXBib2FyZE9wZXJhdGlvbnMuYWJvcnRDdXQoKTtjb25zdCB0PXRoaXMuc2hlZXRNYXBwaW5nLmZldGNoRGlzcGxheU5h''@;'; put 'put ''bWUoZSkscj10aGlzLm9wZXJhdGlvbnMuZ2V0U2hlZXRDbGlwYm9hcmRDZWxscyhlKSx7dmVyc2lvbjppLHNjb3BlZE5hbWVkRXhwcmVzc2lvbnM6b309dGhpcy5vcGVyYXRpb25zLnJlbW92ZVNoZWV0KGUpO3RoaXMudW5kb1JlZG8uc2F2ZU9wZXJhdGlvbihuZXcgZnRuKHQsZSxyLG8saSkp''@;'; put 'put ''fXJlbmFtZVNoZWV0KGUsdCl7dGhpcy5lbnN1cmVJdElzUG9zc2libGVUb1JlbmFtZVNoZWV0KGUsdCk7Y29uc3Qgcj10aGlzLm9wZXJhdGlvbnMucmVuYW1lU2hlZXQoZSx0KTtyZXR1cm4gdm9pZCAwIT09ciYmKHRoaXMudW5kb1JlZG8uY2xlYXJSZWRvU3RhY2soKSx0aGlzLnVuZG9SZWRv''@;'; put 'put ''LnNhdmVPcGVyYXRpb24obmV3IHB0bihlLHIsdCkpKSxyfWNsZWFyU2hlZXQoZSl7dGhpcy5lbnN1cmVTY29wZUlkSXNWYWxpZChlKSx0aGlzLnVuZG9SZWRvLmNsZWFyUmVkb1N0YWNrKCksdGhpcy5jbGlwYm9hcmRPcGVyYXRpb25zLmFib3J0Q3V0KCk7Y29uc3QgdD10aGlzLm9wZXJhdGlv''@;'; put 'put ''bnMuZ2V0U2hlZXRDbGlwYm9hcmRDZWxscyhlKTt0aGlzLm9wZXJhdGlvbnMuY2xlYXJTaGVldChlKSx0aGlzLnVuZG9SZWRvLnNhdmVPcGVyYXRpb24obmV3IGd0bihlLHQpKX1zZXRDZWxsQ29udGVudHMoZSx0KXtpZih0IGluc3RhbmNlb2YgQXJyYXkpe2ZvcihsZXQgaT0wO2k8dC5sZW5n''@;'; put 'put ''dGg7aSsrKWlmKCEodFtpXWluc3RhbmNlb2YgQXJyYXkpKXRocm93IG5ldyBuMCgiYW4gYXJyYXkgb2YgYXJyYXlzIG9yIGEgcmF3IGNlbGwgdmFsdWUuIil9ZWxzZSB0PVtbdF1dO3RoaXMuZW5zdXJlSXRJc1Bvc3NpYmxlVG9DaGFuZ2VDZWxsQ29udGVudHMoZSx0KSx0aGlzLnVuZG9SZWRv''@;'; put 'put ''LmNsZWFyUmVkb1N0YWNrKCk7Y29uc3Qgcj1bXTtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKylmb3IobGV0IG89MDtvPHRbaV0ubGVuZ3RoO28rKyl7Y29uc3QgYT17c2hlZXQ6ZS5zaGVldCxyb3c6ZS5yb3craSxjb2w6ZS5jb2wrb30sbD10W2ldW29dO3RoaXMuY2xpcGJvYXJkT3BlcmF0''@;'; put 'put ''aW9ucy5hYm9ydEN1dCgpO2NvbnN0IHU9dGhpcy5vcGVyYXRpb25zLnNldENlbGxDb250ZW50KGEsbCk7ci5wdXNoKHthZGRyZXNzOmEsbmV3Q29udGVudDpsLG9sZENvbnRlbnQ6dX0pfXRoaXMudW5kb1JlZG8uc2F2ZU9wZXJhdGlvbihuZXcgbXRuKHIpKX1zZXRTaGVldENvbnRlbnQoZSx0''@;'; put 'put ''KXt0aGlzLmVuc3VyZVNjb3BlSWRJc1ZhbGlkKGUpLHRoaXMuZW5zdXJlSXRJc1Bvc3NpYmxlVG9DaGFuZ2VTaGVldENvbnRlbnRzKGUsdCksSFdlKHQpLHRoaXMudW5kb1JlZG8uY2xlYXJSZWRvU3RhY2soKSx0aGlzLmNsaXBib2FyZE9wZXJhdGlvbnMuYWJvcnRDdXQoKTtjb25zdCByPXRo''@;'; put 'put ''aXMub3BlcmF0aW9ucy5nZXRTaGVldENsaXBib2FyZENlbGxzKGUpO3RoaXMub3BlcmF0aW9ucy5zZXRTaGVldENvbnRlbnQoZSx0KSx0aGlzLnVuZG9SZWRvLnNhdmVPcGVyYXRpb24obmV3IHN0bihlLHIsdCkpfXNldFJvd09yZGVyKGUsdCl7dGhpcy52YWxpZGF0ZVN3YXBSb3dJbmRleGVz''@;'; put 'put ''KGUsdCksdGhpcy50ZXN0Um93T3JkZXJGb3JBcnJheXMoZSx0KSx0aGlzLnVuZG9SZWRvLmNsZWFyUmVkb1N0YWNrKCksdGhpcy5jbGlwYm9hcmRPcGVyYXRpb25zLmFib3J0Q3V0KCk7Y29uc3Qgcj10aGlzLm9wZXJhdGlvbnMuc2V0Um93T3JkZXIoZSx0KTt0aGlzLnVuZG9SZWRvLnNhdmVP''@;'; put 'put ''cGVyYXRpb24obmV3IG90bihlLHQscikpfXZhbGlkYXRlU3dhcFJvd0luZGV4ZXMoZSx0KXtpZighdGhpcy5zaGVldE1hcHBpbmcuaGFzU2hlZXRXaXRoSWQoZSkpdGhyb3cgbmV3IFNoKGUpO3RoaXMudmFsaWRhdGVSb3dPckNvbHVtbk1hcHBpbmcoZSx0LCJyb3ciKX10ZXN0Q29sdW1uT3Jk''@;'; put 'put ''ZXJGb3JBcnJheXMoZSx0KXtmb3IoY29uc3RbcixpXW9mIHQpaWYociE9PWkpe2NvbnN0IG89YmEuc3BhbkZyb20oe3NoZWV0OmUsY29sOnIscm93OjB9LDEsMS8wKTtpZih0aGlzLmRlcGVuZGVuY3lHcmFwaC5hcnJheU1hcHBpbmcuaXNGb3JtdWxhQXJyYXlJblJhbmdlKG8pKXRocm93IG5l''@;'; put 'put ''dyBzUH19c2V0Q29sdW1uT3JkZXIoZSx0KXt0aGlzLnZhbGlkYXRlU3dhcENvbHVtbkluZGV4ZXMoZSx0KSx0aGlzLnRlc3RDb2x1bW5PcmRlckZvckFycmF5cyhlLHQpLHRoaXMudW5kb1JlZG8uY2xlYXJSZWRvU3RhY2soKSx0aGlzLmNsaXBib2FyZE9wZXJhdGlvbnMuYWJvcnRDdXQoKTtj''@;'; put 'put ''b25zdCByPXRoaXMub3BlcmF0aW9ucy5zZXRDb2x1bW5PcmRlcihlLHQpO3RoaXMudW5kb1JlZG8uc2F2ZU9wZXJhdGlvbihuZXcgYXRuKGUsdCxyKSl9dmFsaWRhdGVTd2FwQ29sdW1uSW5kZXhlcyhlLHQpe2lmKCF0aGlzLnNoZWV0TWFwcGluZy5oYXNTaGVldFdpdGhJZChlKSl0aHJvdyBu''@;'; put 'put ''ZXcgU2goZSk7dGhpcy52YWxpZGF0ZVJvd09yQ29sdW1uTWFwcGluZyhlLHQsImNvbHVtbiIpfXRlc3RSb3dPcmRlckZvckFycmF5cyhlLHQpe2Zvcihjb25zdFtyLGldb2YgdClpZihyIT09aSl7Y29uc3Qgbz1iYS5zcGFuRnJvbSh7c2hlZXQ6ZSxjb2w6MCxyb3c6cn0sMS8wLDEpO2lmKHRo''@;'; put 'put ''aXMuZGVwZW5kZW5jeUdyYXBoLmFycmF5TWFwcGluZy5pc0Zvcm11bGFBcnJheUluUmFuZ2UobykpdGhyb3cgbmV3IHNQfX1tYXBwaW5nRnJvbU9yZGVyKGUsdCxyKXtpZighdGhpcy5zaGVldE1hcHBpbmcuaGFzU2hlZXRXaXRoSWQoZSkpdGhyb3cgbmV3IFNoKGUpO2NvbnN0IGk9InJvdyI9''@;'; put 'put ''PT1yP3RoaXMuZGVwZW5kZW5jeUdyYXBoLmdldFNoZWV0SGVpZ2h0KGUpOnRoaXMuZGVwZW5kZW5jeUdyYXBoLmdldFNoZWV0V2lkdGgoZSk7aWYodC5sZW5ndGghPT1pKXRocm93IG5ldyBuMChgbnVtYmVyIG9mICR7cn1zIHByb3ZpZGVkIHRvIGJlIHNoZWV0ICR7InJvdyI9PT1yPyJoZWln''@;'; put 'put ''aHQiOiJ3aWR0aCJ9LmApO2NvbnN0IG89W107Zm9yKGxldCBhPTA7YTxpO2ErKyl0W2FdIT09YSYmby5wdXNoKFthLHRbYV1dKTtyZXR1cm4gb311bmRvKCl7aWYodGhpcy51bmRvUmVkby5pc1VuZG9TdGFja0VtcHR5KCkpdGhyb3cgbmV3IGJKdDt0aGlzLmNsaXBib2FyZE9wZXJhdGlvbnMu''@;'; put 'put ''YWJvcnRDdXQoKSx0aGlzLnVuZG9SZWRvLnVuZG8oKX1yZWRvKCl7aWYodGhpcy51bmRvUmVkby5pc1JlZG9TdGFja0VtcHR5KCkpdGhyb3cgbmV3IHdKdDt0aGlzLmNsaXBib2FyZE9wZXJhdGlvbnMuYWJvcnRDdXQoKSx0aGlzLnVuZG9SZWRvLnJlZG8oKX1hZGROYW1lZEV4cHJlc3Npb24o''@;'; put 'put ''ZSx0LHIsaSl7dGhpcy5lbnN1cmVJdElzUG9zc2libGVUb0FkZE5hbWVkRXhwcmVzc2lvbihlLHQsciksdGhpcy5vcGVyYXRpb25zLmFkZE5hbWVkRXhwcmVzc2lvbihlLHQscixpKSx0aGlzLnVuZG9SZWRvLmNsZWFyUmVkb1N0YWNrKCksdGhpcy5jbGlwYm9hcmRPcGVyYXRpb25zLmFib3J0''@;'; put 'put ''Q3V0KCksdGhpcy51bmRvUmVkby5zYXZlT3BlcmF0aW9uKG5ldyBfdG4oZSx0LHIsaSkpfWNoYW5nZU5hbWVkRXhwcmVzc2lvbkV4cHJlc3Npb24oZSx0LHIsaSl7dGhpcy5lbnN1cmVJdElzUG9zc2libGVUb0NoYW5nZU5hbWVkRXhwcmVzc2lvbihlLHIsdCk7Y29uc3RbbyxhXT10aGlzLm9w''@;'; put 'put ''ZXJhdGlvbnMuY2hhbmdlTmFtZWRFeHByZXNzaW9uRXhwcmVzc2lvbihlLHIsdCxpKTt0aGlzLnVuZG9SZWRvLmNsZWFyUmVkb1N0YWNrKCksdGhpcy5jbGlwYm9hcmRPcGVyYXRpb25zLmFib3J0Q3V0KCksdGhpcy51bmRvUmVkby5zYXZlT3BlcmF0aW9uKG5ldyBidG4obyxyLGEsdCxpKSl9''@;'; put 'put ''cmVtb3ZlTmFtZWRFeHByZXNzaW9uKGUsdCl7dGhpcy5lbnN1cmVTY29wZUlkSXNWYWxpZCh0KTtjb25zdFtyLGldPXRoaXMub3BlcmF0aW9ucy5yZW1vdmVOYW1lZEV4cHJlc3Npb24oZSx0KTtyZXR1cm4gdGhpcy51bmRvUmVkby5jbGVhclJlZG9TdGFjaygpLHRoaXMuY2xpcGJvYXJkT3Bl''@;'; put 'put ''cmF0aW9ucy5hYm9ydEN1dCgpLHRoaXMudW5kb1JlZG8uc2F2ZU9wZXJhdGlvbihuZXcgeXRuKHIsaSx0KSkscn1lbnN1cmVJdElzUG9zc2libGVUb0FkZE5hbWVkRXhwcmVzc2lvbihlLHQscil7dGhpcy5lbnN1cmVTY29wZUlkSXNWYWxpZChyKSx0aGlzLmVuc3VyZU5hbWVkRXhwcmVzc2lv''@;'; put 'put ''bk5hbWVJc1ZhbGlkKGUsciksdGhpcy5lbnN1cmVOYW1lZEV4cHJlc3Npb25Jc1ZhbGlkKHQpfWVuc3VyZUl0SXNQb3NzaWJsZVRvQ2hhbmdlTmFtZWRFeHByZXNzaW9uKGUsdCxyKXtpZih0aGlzLmVuc3VyZVNjb3BlSWRJc1ZhbGlkKHIpLHZvaWQgMD09PXRoaXMubmFtZWRFeHByZXNzaW9u''@;'; put 'put ''cy5uYW1lZEV4cHJlc3Npb25Gb3JTY29wZShlLHIpKXRocm93IG5ldyBMcShlKTt0aGlzLmVuc3VyZU5hbWVkRXhwcmVzc2lvbklzVmFsaWQodCl9aXNJdFBvc3NpYmxlVG9SZW1vdmVOYW1lZEV4cHJlc3Npb24oZSx0KXtpZih0aGlzLmVuc3VyZVNjb3BlSWRJc1ZhbGlkKHQpLHZvaWQgMD09''@;'; put 'put ''PXRoaXMubmFtZWRFeHByZXNzaW9ucy5uYW1lZEV4cHJlc3Npb25Gb3JTY29wZShlLHQpKXRocm93IG5ldyBMcShlKX1lbnN1cmVJdElzUG9zc2libGVUb0FkZFJvd3MoZSwuLi50KXtpZighdGhpcy5zaGVldE1hcHBpbmcuaGFzU2hlZXRXaXRoSWQoZSkpdGhyb3cgbmV3IFNoKGUpO2lmKHRo''@;'; put 'put ''aXMuZGVwZW5kZW5jeUdyYXBoLmdldFNoZWV0SGVpZ2h0KGUpK3QubWFwKG89Pm9bMV0pLnJlZHVjZSgobyxhKT0+bythLDApPnRoaXMubWF4Um93cyl0aHJvdyBuZXcgdEE7Zm9yKGNvbnN0W28sYV1vZiB0KWlmKCFOQyhvKXx8IXVBKGEpKXRocm93IG5ldyBuMCgicm93IG51bWJlciB0byBi''@;'; put 'put ''ZSBub25uZWdhdGl2ZSBhbmQgbnVtYmVyIG9mIHJvd3MgdG8gYWRkIHRvIGJlIHBvc2l0aXZlLiIpfWVuc3VyZUl0SXNQb3NzaWJsZVRvUmVtb3ZlUm93cyhlLC4uLnQpe2Zvcihjb25zdFtyLGldb2YgdCl7Y29uc3Qgbz1yK2ktMTtpZighTkMocil8fCFOQyhvKSl0aHJvdyBuZXcgbjAoInN0''@;'; put 'put ''YXJ0aW5nIGFuZCBlbmRpbmcgcm93IHRvIGJlIG5vbm5lZ2F0aXZlLiIpO2lmKG88cil0aHJvdyBuZXcgbjAoInN0YXJ0aW5nIHJvdyB0byBiZSBzbWFsbGVyIHRoYW4gdGhlIGVuZGluZyByb3cuIik7aWYoIXRoaXMuc2hlZXRNYXBwaW5nLmhhc1NoZWV0V2l0aElkKGUpKXRocm93IG5ldyBT''@;'; put 'put ''aChlKX19ZW5zdXJlSXRJc1Bvc3NpYmxlVG9BZGRDb2x1bW5zKGUsLi4udCl7aWYoIXRoaXMuc2hlZXRNYXBwaW5nLmhhc1NoZWV0V2l0aElkKGUpKXRocm93IG5ldyBTaChlKTtpZih0aGlzLmRlcGVuZGVuY3lHcmFwaC5nZXRTaGVldFdpZHRoKGUpK3QubWFwKG89Pm9bMV0pLnJlZHVjZSgo''@;'; put 'put ''byxhKT0+bythLDApPnRoaXMubWF4Q29sdW1ucyl0aHJvdyBuZXcgdEE7Zm9yKGNvbnN0W28sYV1vZiB0KWlmKCFOQyhvKXx8IXVBKGEpKXRocm93IG5ldyBuMCgiY29sdW1uIG51bWJlciB0byBiZSBub25uZWdhdGl2ZSBhbmQgbnVtYmVyIG9mIGNvbHVtbnMgdG8gYWRkIHRvIGJlIHBvc2l0''@;'; put 'put ''aXZlLiIpfWVuc3VyZUl0SXNQb3NzaWJsZVRvUmVtb3ZlQ29sdW1ucyhlLC4uLnQpe2Zvcihjb25zdFtyLGldb2YgdCl7Y29uc3Qgbz1yK2ktMTtpZighTkMocil8fCFOQyhvKSl0aHJvdyBuZXcgbjAoInN0YXJ0aW5nIGFuZCBlbmRpbmcgY29sdW1uIHRvIGJlIG5vbm5lZ2F0aXZlLiIpO2lm''@;'; put 'put ''KG88cil0aHJvdyBuZXcgbjAoInN0YXJ0aW5nIGNvbHVtbiB0byBiZSBzbWFsbGVyIHRoYW4gdGhlIGVuZGluZyBjb2x1bW4uIik7aWYoIXRoaXMuc2hlZXRNYXBwaW5nLmhhc1NoZWV0V2l0aElkKGUpKXRocm93IG5ldyBTaChlKX19ZW5zdXJlSXRJc1Bvc3NpYmxlVG9Nb3ZlUm93cyhlLHQs''@;'; put 'put ''cixpKXt0aGlzLmVuc3VyZUl0SXNQb3NzaWJsZVRvQWRkUm93cyhlLFtpLHJdKTtjb25zdCBvPUJvKGUsMCx0KSxhPUJvKGUsMCxpKTtpZighdGhpcy5zaGVldE1hcHBpbmcuaGFzU2hlZXRXaXRoSWQoZSl8fG5wKG8pfHxucChhKXx8IXVBKHIpfHxpPD10K3ImJmk+PXQpdGhyb3cgbmV3IG4w''@;'; put 'put ''KCJhIHZhbGlkIHJhbmdlIG9mIHJvd3MgdG8gbW92ZS4iKTtjb25zdCBsPXRoaXMuZGVwZW5kZW5jeUdyYXBoLmdldFNoZWV0V2lkdGgoZSksdT1iYS5zcGFuRnJvbShvLGwscik7aWYodGhpcy5kZXBlbmRlbmN5R3JhcGguYXJyYXlNYXBwaW5nLmlzRm9ybXVsYUFycmF5SW5SYW5nZSh1KSl0''@;'; put 'put ''aHJvdyBuZXcgc1A7aWYoaT4wJiZ0aGlzLmRlcGVuZGVuY3lHcmFwaC5hcnJheU1hcHBpbmcuaXNGb3JtdWxhQXJyYXlJbkFsbFJvd3ModHAuZnJvbU51bWJlck9mUm93cyhlLGktMSwyKSkpdGhyb3cgbmV3IEtnZX1lbnN1cmVJdElzUG9zc2libGVUb01vdmVDb2x1bW5zKGUsdCxyLGkpe3Ro''@;'; put 'put ''aXMuZW5zdXJlSXRJc1Bvc3NpYmxlVG9BZGRDb2x1bW5zKGUsW2kscl0pO2NvbnN0IG89Qm8oZSx0LDApLGE9Qm8oZSxpLDApO2lmKCF0aGlzLnNoZWV0TWFwcGluZy5oYXNTaGVldFdpdGhJZChlKXx8bnAobyl8fG5wKGEpfHwhdUEocil8fGk8PXQrciYmaT49dCl0aHJvdyBuZXcgbjAoImEg''@;'; put 'put ''dmFsaWQgcmFuZ2Ugb2YgY29sdW1ucyB0byBtb3ZlLiIpO2NvbnN0IGw9dGhpcy5kZXBlbmRlbmN5R3JhcGguZ2V0U2hlZXRIZWlnaHQoZSksdT1iYS5zcGFuRnJvbShvLHIsbCk7aWYodGhpcy5kZXBlbmRlbmN5R3JhcGguYXJyYXlNYXBwaW5nLmlzRm9ybXVsYUFycmF5SW5SYW5nZSh1KSl0''@;'; put 'put ''aHJvdyBuZXcgc1A7aWYoaT4wJiZ0aGlzLmRlcGVuZGVuY3lHcmFwaC5hcnJheU1hcHBpbmcuaXNGb3JtdWxhQXJyYXlJbkFsbENvbHVtbnMoZ2cuZnJvbU51bWJlck9mQ29sdW1ucyhlLGktMSwyKSkpdGhyb3cgbmV3IEtnZX1lbnN1cmVJdElzUG9zc2libGVUb0FkZFNoZWV0KGUpe2lmKHRo''@;'; put 'put ''aXMuc2hlZXRNYXBwaW5nLmhhc1NoZWV0V2l0aE5hbWUoZSkpdGhyb3cgbmV3IERxKGUpfWVuc3VyZUl0SXNQb3NzaWJsZVRvUmVuYW1lU2hlZXQoZSx0KXtpZighdGhpcy5zaGVldE1hcHBpbmcuaGFzU2hlZXRXaXRoSWQoZSkpdGhyb3cgbmV3IFNoKGUpO2NvbnN0IHI9dGhpcy5zaGVldE1h''@;'; put 'put ''cHBpbmcuZ2V0KHQpO2lmKHZvaWQgMCE9PXImJnIhPT1lKXRocm93IG5ldyBEcSh0KX1lbnN1cmVJdElzUG9zc2libGVUb0NoYW5nZUNvbnRlbnQoZSl7aWYobnAoZSkpdGhyb3cgbmV3IHZKdChlKTtpZighdGhpcy5zaGVldE1hcHBpbmcuaGFzU2hlZXRXaXRoSWQoZS5zaGVldCkpdGhyb3cg''@;'; put 'put ''bmV3IFNoKGUuc2hlZXQpfWVuc3VyZUl0SXNQb3NzaWJsZVRvQ2hhbmdlQ2VsbENvbnRlbnRzKGUsdCl7Y29uc3Qgcj1acSh0KSxpPWJhLnNwYW5Gcm9tKGUsci53aWR0aCxyLmhlaWdodCk7dGhpcy5lbnN1cmVSYW5nZUluU2l6ZUxpbWl0cyhpKTtmb3IoY29uc3QgbyBvZiBpLmFkZHJlc3Nl''@;'; put 'put ''cyh0aGlzLmRlcGVuZGVuY3lHcmFwaCkpdGhpcy5lbnN1cmVJdElzUG9zc2libGVUb0NoYW5nZUNvbnRlbnQobyl9ZW5zdXJlSXRJc1Bvc3NpYmxlVG9DaGFuZ2VTaGVldENvbnRlbnRzKGUsdCl7Y29uc3Qgcj1acSh0KSxpPWJhLnNwYW5Gcm9tKEJvKGUsMCwwKSxyLndpZHRoLHIuaGVpZ2h0''@;'; put 'put ''KTt0aGlzLmVuc3VyZVJhbmdlSW5TaXplTGltaXRzKGkpfWVuc3VyZVJhbmdlSW5TaXplTGltaXRzKGUpe2lmKGUuZXhjZWVkc1NoZWV0U2l6ZUxpbWl0cyh0aGlzLm1heENvbHVtbnMsdGhpcy5tYXhSb3dzKSl0aHJvdyBuZXcgdEF9aXNUaGVyZVNvbWV0aGluZ1RvVW5kbygpe3JldHVybiF0''@;'; put 'put ''aGlzLnVuZG9SZWRvLmlzVW5kb1N0YWNrRW1wdHkoKX1pc1RoZXJlU29tZXRoaW5nVG9SZWRvKCl7cmV0dXJuIXRoaXMudW5kb1JlZG8uaXNSZWRvU3RhY2tFbXB0eSgpfWdldEFuZENsZWFyQ29udGVudENoYW5nZXMoKXtyZXR1cm4gdGhpcy5vcGVyYXRpb25zLmdldEFuZENsZWFyQ29udGVu''@;'; put 'put ''dENoYW5nZXMoKX1lbnN1cmVTY29wZUlkSXNWYWxpZChlKXtpZih2b2lkIDAhPT1lJiYhdGhpcy5zaGVldE1hcHBpbmcuaGFzU2hlZXRXaXRoSWQoZSkpdGhyb3cgbmV3IFNoKGUpfXZhbGlkYXRlUm93T3JDb2x1bW5NYXBwaW5nKGUsdCxyKXtjb25zdCBpPSJyb3ciPT09cj90aGlzLmRlcGVu''@;'; put 'put ''ZGVuY3lHcmFwaC5nZXRTaGVldEhlaWdodChlKTp0aGlzLmRlcGVuZGVuY3lHcmFwaC5nZXRTaGVldFdpZHRoKGUpLG89dC5tYXAoKFtsLHVdKT0+bCkuc29ydCgobCx1KT0+bC11KSxhPXQubWFwKChbbCx1XSk9PnUpLnNvcnQoKGwsdSk9PmwtdSk7Zm9yKGxldCBsPTA7bDxvLmxlbmd0aDts''@;'; put 'put ''Kyspe2lmKCFOQyhvW2xdKXx8b1tsXT49aSl0aHJvdyBuZXcgbjAoYCR7cn0gbnVtYmVycyB0byBiZSBub25uZWdhdGl2ZSBpbnRlZ2VycyBhbmQgbGVzcyB0aGFuIHNoZWV0ICR7InJvdyI9PT1yPyJoZWlnaHQiOiJ3aWR0aCJ9LmApO2lmKG9bbF09PT1vW2wrMV0pdGhyb3cgbmV3IG4wKGBz''@;'; put 'put ''b3VyY2UgJHtyfSBudW1iZXJzIHRvIGJlIHVuaXF1ZS5gKTtpZihvW2xdIT09YVtsXSl0aHJvdyBuZXcgbjAoYHRhcmdldCAke3J9IG51bWJlcnMgdG8gYmUgcGVybXV0YXRpb24gb2Ygc291cmNlICR7cn0gbnVtYmVycy5gKX19ZW5zdXJlTmFtZWRFeHByZXNzaW9uTmFtZUlzVmFsaWQoZSx0''@;'; put 'put ''KXtpZighdGhpcy5uYW1lZEV4cHJlc3Npb25zLmlzTmFtZVZhbGlkKGUpKXRocm93IG5ldyB5SnQoZSk7aWYoIXRoaXMubmFtZWRFeHByZXNzaW9ucy5pc05hbWVBdmFpbGFibGUoZSx0KSl0aHJvdyBuZXcgX0p0KGUpfWVuc3VyZU5hbWVkRXhwcmVzc2lvbklzVmFsaWQoZSl7Y29uc3QgdD10''@;'; put 'put ''aGlzLmNlbGxDb250ZW50UGFyc2VyLnBhcnNlKGUpO2lmKHQgaW5zdGFuY2VvZiBIZC5Gb3JtdWxhKXtjb25zdCByPXRoaXMucGFyc2VyLnBhcnNlKHQuZm9ybXVsYSxCbygtMSwwLDApKTtpZihKXyhyLmFzdCkpdGhyb3cgbmV3IHJXZX19fWZ1bmN0aW9uIHVBKG4pe3JldHVybiBOdW1iZXIu''@;'; put 'put ''aXNJbnRlZ2VyKG4pJiZuPjB9ZnVuY3Rpb24gTkMobil7cmV0dXJuIE51bWJlci5pc0ludGVnZXIobikmJm4+PTB9Y2xhc3MgRXRue2NvbnN0cnVjdG9yKGUsdCxyLGksbyxhKXt0aGlzLmNvbmZpZz1lLHRoaXMuc3RhdHM9dCx0aGlzLmludGVycHJldGVyPXIsdGhpcy5sYXppbHlUcmFuc2Zv''@;'; put 'put ''cm1pbmdBc3RTZXJ2aWNlPWksdGhpcy5kZXBlbmRlbmN5R3JhcGg9byx0aGlzLmNvbHVtblNlYXJjaD1hfXJ1bigpe3RoaXMuc3RhdHMuc3RhcnQoQXMuVE9QX1NPUlQpO2NvbnN0e3NvcnRlZDplLGN5Y2xlZDp0fT10aGlzLmRlcGVuZGVuY3lHcmFwaC50b3BTb3J0V2l0aFNjYygpO3RoaXMu''@;'; put 'put ''c3RhdHMuZW5kKEFzLlRPUF9TT1JUKSx0aGlzLnN0YXRzLm1lYXN1cmUoQXMuRVZBTFVBVElPTiwoKT0+e3RoaXMucmVjb21wdXRlRm9ybXVsYXModCxlKX0pfXBhcnRpYWxSdW4oZSl7Y29uc3QgdD1xXy5lbXB0eSgpO3JldHVybiB0aGlzLnN0YXRzLm1lYXN1cmUoQXMuRVZBTFVBVElPTiwo''@;'; put 'put ''KT0+e3RoaXMuZGVwZW5kZW5jeUdyYXBoLmdyYXBoLmdldFRvcFNvcnRlZFdpdGhTY2NTdWJncmFwaEZyb20oZSxyPT57aWYociBpbnN0YW5jZW9mIG1nKXtjb25zdCBpPXIuaXNDb21wdXRlZCgpP3IuZ2V0Q2VsbFZhbHVlKCk6dm9pZCAwLG89dGhpcy5yZWNvbXB1dGVGb3JtdWxhVmVydGV4''@;'; put 'put ''VmFsdWUocik7aWYobyE9PWkpe2NvbnN0IGE9ci5nZXRBZGRyZXNzKHRoaXMubGF6aWx5VHJhbnNmb3JtaW5nQXN0U2VydmljZSk7cmV0dXJuIHQuYWRkQ2hhbmdlKG8sYSksdGhpcy5jb2x1bW5TZWFyY2guY2hhbmdlKExvKGkpLExvKG8pLGEpLCEwfXJldHVybiExfXJldHVybiByIGluc3Rh''@;'; put 'put ''bmNlb2YgY2YmJnIuY2xlYXJDYWNoZSgpLCEwfSxyPT57aWYociBpbnN0YW5jZW9mIGNmKXIuY2xlYXJDYWNoZSgpO2Vsc2UgaWYociBpbnN0YW5jZW9mIG1nKXtjb25zdCBpPXIuZ2V0QWRkcmVzcyh0aGlzLmxhemlseVRyYW5zZm9ybWluZ0FzdFNlcnZpY2UpO3RoaXMuY29sdW1uU2VhcmNo''@;'; put 'put ''LnJlbW92ZShMbyhyLnZhbHVlT3JVbmRlZigpKSxpKTtjb25zdCBvPW5ldyBQdCh0bi5DWUNMRSx2b2lkIDAscik7ci5zZXRDZWxsVmFsdWUobyksdC5hZGRDaGFuZ2UobyxpKX19KX0pLHR9cnVuQW5kRm9yZ2V0KGUsdCxyKXtjb25zdCBpPVtdO2Zvcihjb25zdCBhIG9mIFY2KHIsdCkpaWYo''@;'; put 'put ''YSBpbnN0YW5jZW9mIGJhKXtjb25zdCBsPWE7aWYodm9pZCAwPT09dGhpcy5kZXBlbmRlbmN5R3JhcGguZ2V0UmFuZ2UobC5zdGFydCxsLmVuZCkpe2NvbnN0IHU9bmV3IGNmKGwpO3RoaXMuZGVwZW5kZW5jeUdyYXBoLnJhbmdlTWFwcGluZy5zZXRSYW5nZSh1KSxpLnB1c2godSl9fWNvbnN0''@;'; put 'put ''IG89dGhpcy5ldmFsdWF0ZUFzdFRvQ2VsbFZhbHVlKGUsbmV3IHo2KHQsdGhpcy5jb25maWcudXNlQXJyYXlBcml0aG1ldGljKSk7cmV0dXJuIGkuZm9yRWFjaChhPT57dGhpcy5kZXBlbmRlbmN5R3JhcGgucmFuZ2VNYXBwaW5nLnJlbW92ZVJhbmdlKGEpfSksb31yZWNvbXB1dGVGb3JtdWxh''@;'; put 'put ''cyhlLHQpe2UuZm9yRWFjaChyPT57ciBpbnN0YW5jZW9mIG1nJiZyLnNldENlbGxWYWx1ZShuZXcgUHQodG4uQ1lDTEUsdm9pZCAwLHIpKX0pLHQuZm9yRWFjaChyPT57aWYociBpbnN0YW5jZW9mIG1nKXtjb25zdCBpPXRoaXMucmVjb21wdXRlRm9ybXVsYVZlcnRleFZhbHVlKHIpLG89ci5n''@;'; put 'put ''ZXRBZGRyZXNzKHRoaXMubGF6aWx5VHJhbnNmb3JtaW5nQXN0U2VydmljZSk7dGhpcy5jb2x1bW5TZWFyY2guYWRkKExvKGkpLG8pfWVsc2UgciBpbnN0YW5jZW9mIGNmJiZyLmNsZWFyQ2FjaGUoKX0pfXJlY29tcHV0ZUZvcm11bGFWZXJ0ZXhWYWx1ZShlKXtjb25zdCB0PWUuZ2V0QWRkcmVz''@;'; put 'put ''cyh0aGlzLmxhemlseVRyYW5zZm9ybWluZ0FzdFNlcnZpY2UpO2lmKGUgaW5zdGFuY2VvZiAkaCYmKGUuYXJyYXkuc2l6ZS5pc1JlZnx8IXRoaXMuZGVwZW5kZW5jeUdyYXBoLmlzVGhlcmVTcGFjZUZvckFycmF5KGUpKSlyZXR1cm4gZS5zZXROb1NwYWNlKCk7e2NvbnN0IHI9ZS5nZXRGb3Jt''@;'; put 'put ''dWxhKHRoaXMubGF6aWx5VHJhbnNmb3JtaW5nQXN0U2VydmljZSksaT10aGlzLmV2YWx1YXRlQXN0VG9DZWxsVmFsdWUocixuZXcgejYodCx0aGlzLmNvbmZpZy51c2VBcnJheUFyaXRobWV0aWMsZSkpO3JldHVybiBlLnNldENlbGxWYWx1ZShpKX19ZXZhbHVhdGVBc3RUb0NlbGxWYWx1ZShl''@;'; put 'put ''LHQpe2NvbnN0IHI9dGhpcy5pbnRlcnByZXRlci5ldmFsdWF0ZUFzdChlLHQpO3JldHVybiByIGluc3RhbmNlb2YgbGE/cjpyPT09bGwmJnRoaXMuY29uZmlnLmV2YWx1YXRlTnVsbFRvWmVybz8wOnJ9fWNsYXNzIE10bntjb25zdHJ1Y3RvcihlLHQscil7dmFyIGk7dGhpcy52YWx1ZT10LHRo''@;'; put 'put ''aXMuYWRkcmVzcz1yLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5tZXNzYWdlPW51bGwhPT0oaT1lLm1lc3NhZ2UpJiZ2b2lkIDAhPT1pP2k6IiJ9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy52YWx1ZX12YWx1ZU9mKCl7cmV0dXJuIHRoaXMudmFsdWV9fWNsYXNzIHpXZXtjb25zdHJ1Y3RvcihlLHQp''@;'; put 'put ''e3RoaXMuYWRkcmVzcz1lLHRoaXMubmV3VmFsdWU9dH1nZXQgY29sKCl7cmV0dXJuIHRoaXMuYWRkcmVzcy5jb2x9Z2V0IHJvdygpe3JldHVybiB0aGlzLmFkZHJlc3Mucm93fWdldCBzaGVldCgpe3JldHVybiB0aGlzLmFkZHJlc3Muc2hlZXR9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMubmV3''@;'; put 'put ''VmFsdWV9fWNsYXNzIFR0bntjb25zdHJ1Y3RvcihlLHQpe3RoaXMubmFtZT1lLHRoaXMubmV3VmFsdWU9dH19Y2xhc3MgeHRue2NvbnN0cnVjdG9yKGUsdCxyLGkpe3RoaXMuY29uZmlnPWUsdGhpcy5uYW1lZEV4cHJlc3Npb25zPXQsdGhpcy5zaGVldEluZGV4TWFwcGluZz1yLHRoaXMubGF6''@;'; put 'put ''aWx5VHJhbnNmb3JtaW5nU2VydmljZT1pfWV4cG9ydENoYW5nZShlKXtjb25zdCB0PWUudmFsdWUscj1lLmFkZHJlc3M7aWYoci5zaGVldD09PVlxLlNIRUVUX0ZPUl9XT1JLQk9PS19FWFBSRVNTSU9OUyl7Y29uc3QgaT10aGlzLm5hbWVkRXhwcmVzc2lvbnMubmFtZWRFeHByZXNzaW9uSW5B''@;'; put 'put ''ZGRyZXNzKHIucm93KTtpZighaSl0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgbmFtZWQgZXhwcmVzc2lvbiIpO3JldHVybiBuZXcgVHRuKGkuZGlzcGxheU5hbWUsdGhpcy5leHBvcnRTY2FsYXJPclJhbmdlKHQpKX1pZih0IGluc3RhbmNlb2YgbGEpe2NvbnN0IGk9W107Zm9yKGNvbnN0W28s''@;'; put 'put ''YV1vZiB0LmVudHJpZXNGcm9tVG9wTGVmdENvcm5lcihyKSlpLnB1c2gobmV3IHpXZShhLHRoaXMuZXhwb3J0VmFsdWUobykpKTtyZXR1cm4gaX1yZXR1cm4gbmV3IHpXZShyLHRoaXMuZXhwb3J0VmFsdWUodCkpfWV4cG9ydFZhbHVlKGUpe3JldHVybiBlIGluc3RhbmNlb2YgbGE/dGhpcy5k''@;'; put 'put ''ZXRhaWxlZEVycm9yKG5ldyBQdCh0bi5WQUxVRSxkci5TY2FsYXJFeHBlY3RlZCkpOnRoaXMuY29uZmlnLnNtYXJ0Um91bmRpbmcmJmNjKGUpP3RoaXMuY2VsbFZhbHVlUm91bmRpbmcoTG8oZSkpOmUgaW5zdGFuY2VvZiBQdD90aGlzLmRldGFpbGVkRXJyb3IoZSk6ZT09PWxsP251bGw6TG8o''@;'; put 'put ''ZSl9ZXhwb3J0U2NhbGFyT3JSYW5nZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGxhP2UucmF3RGF0YSgpLm1hcCh0PT50Lm1hcChyPT50aGlzLmV4cG9ydFZhbHVlKHIpKSk6dGhpcy5leHBvcnRWYWx1ZShlKX1kZXRhaWxlZEVycm9yKGUpe3ZhciB0LHI7bGV0IGk7Y29uc3Qgbz1udWxsPT09''@;'; put 'put ''KHQ9ZS5yb290KXx8dm9pZCAwPT09dD92b2lkIDA6dC5nZXRBZGRyZXNzKHRoaXMubGF6aWx5VHJhbnNmb3JtaW5nU2VydmljZSk7cmV0dXJuIHZvaWQgMCE9PW8mJihpPW8uc2hlZXQ9PT1ZcS5TSEVFVF9GT1JfV09SS0JPT0tfRVhQUkVTU0lPTlM/bnVsbD09PShyPXRoaXMubmFtZWRFeHBy''@;'; put 'put ''ZXNzaW9ucy5uYW1lZEV4cHJlc3Npb25JbkFkZHJlc3Moby5yb3cpKXx8dm9pZCAwPT09cj92b2lkIDA6ci5kaXNwbGF5TmFtZTpTcSh0aGlzLnNoZWV0SW5kZXhNYXBwaW5nLG8sLTEpKSxuZXcgTXRuKGUsdGhpcy5jb25maWcudHJhbnNsYXRpb25QYWNrYWdlLmdldEVycm9yVHJhbnNsYXRp''@;'; put 'put ''b24oZS50eXBlKSxpKX1jZWxsVmFsdWVSb3VuZGluZyhlKXtpZigwPT09ZSlyZXR1cm4gZTtjb25zdCB0PU1hdGguZmxvb3IoTWF0aC5sb2cxMChNYXRoLmFicyhlKSkpLHI9TWF0aC5wb3coMTAsdGhpcy5jb25maWcucHJlY2lzaW9uUm91bmRpbmctdCk7cmV0dXJuIGU8MD8tTWF0aC5yb3Vu''@;'; put 'put ''ZCgtZSpyKS9yOk1hdGgucm91bmQoZSpyKS9yfX1jbGFzcyBBdG57Y29uc3RydWN0b3IoZSx0LHIsaSxvLGEpe3RoaXMuZGVwZW5kZW5jeUdyYXBoPWUsdGhpcy5jb2x1bW5TZWFyY2g9dCx0aGlzLnBhcnNlcj1yLHRoaXMuY2VsbENvbnRlbnRQYXJzZXI9aSx0aGlzLnN0YXRzPW8sdGhpcy5h''@;'; put 'put ''cnJheVNpemVQcmVkaWN0b3I9YSx0aGlzLmJ1aWxkU3RyYXRlZ3k9bmV3IGt0bihlLHQscixvLGksYSl9YnVpbGRHcmFwaChlLHQpe2NvbnN0IHI9dC5tZWFzdXJlKEFzLkNPTExFQ1RfREVQRU5ERU5DSUVTLCgpPT50aGlzLmJ1aWxkU3RyYXRlZ3kucnVuKGUpKTt0aGlzLmRlcGVuZGVuY3lH''@;'; put 'put ''cmFwaC5nZXRBbmRDbGVhckNvbnRlbnRDaGFuZ2VzKCksdC5tZWFzdXJlKEFzLlBST0NFU1NfREVQRU5ERU5DSUVTLCgpPT50aGlzLnByb2Nlc3NEZXBlbmRlbmNpZXMocikpfXByb2Nlc3NEZXBlbmRlbmNpZXMoZSl7ZS5mb3JFYWNoKCh0LHIpPT57dGhpcy5kZXBlbmRlbmN5R3JhcGgucHJv''@;'; put 'put ''Y2Vzc0NlbGxEZXBlbmRlbmNpZXModCxyKX0pfX1jbGFzcyBrdG57Y29uc3RydWN0b3IoZSx0LHIsaSxvLGEpe3RoaXMuZGVwZW5kZW5jeUdyYXBoPWUsdGhpcy5jb2x1bW5JbmRleD10LHRoaXMucGFyc2VyPXIsdGhpcy5zdGF0cz1pLHRoaXMuY2VsbENvbnRlbnRQYXJzZXI9byx0aGlzLmFy''@;'; put 'put ''cmF5U2l6ZVByZWRpY3Rvcj1hfXJ1bihlKXtjb25zdCB0PW5ldyBNYXA7Zm9yKGNvbnN0IHIgaW4gZSl7Y29uc3QgaT10aGlzLmRlcGVuZGVuY3lHcmFwaC5nZXRTaGVldElkKHIpLG89ZVtyXTtmb3IobGV0IGE9MDthPG8ubGVuZ3RoOysrYSl7Y29uc3QgbD1vW2FdO2ZvcihsZXQgdT0wO3U8''@;'; put 'put ''bC5sZW5ndGg7Kyt1KXtjb25zdCBnPWxbdV0sRT1CbyhpLHUsYSksTz10aGlzLmNlbGxDb250ZW50UGFyc2VyLnBhcnNlKGcpO2lmKE8gaW5zdGFuY2VvZiBIZC5Gb3JtdWxhKXtjb25zdCBaPXRoaXMuc3RhdHMubWVhc3VyZShBcy5QQVJTRVIsKCk9PnRoaXMucGFyc2VyLnBhcnNlKE8uZm9y''@;'; put 'put ''bXVsYSxFKSk7aWYoWi5lcnJvcnMubGVuZ3RoPjApe3RoaXMuc2hyaW5rQXJyYXlJZk5lZWRlZChFKTtjb25zdCBlZT1uZXcgaUEoWi5lcnJvcnMsTy5mb3JtdWxhKTt0aGlzLmRlcGVuZGVuY3lHcmFwaC5hZGRWZXJ0ZXgoRSxlZSl9ZWxzZXt0aGlzLnNocmlua0FycmF5SWZOZWVkZWQoRSk7''@;'; put 'put ''Y29uc3QgZWU9dGhpcy5hcnJheVNpemVQcmVkaWN0b3IuY2hlY2tBcnJheVNpemUoWi5hc3QsRSk7aWYoZWUuaXNTY2FsYXIoKSl7Y29uc3QgdmU9bmV3IGo2KFouYXN0LEUsMCk7dC5zZXQodmUsVjYoWi5kZXBlbmRlbmNpZXMsRSkpLHRoaXMuZGVwZW5kZW5jeUdyYXBoLmFkZFZlcnRleChF''@;'; put 'put ''LHZlKSxaLmhhc1ZvbGF0aWxlRnVuY3Rpb24mJnRoaXMuZGVwZW5kZW5jeUdyYXBoLm1hcmtBc1ZvbGF0aWxlKHZlKSxaLmhhc1N0cnVjdHVyYWxDaGFuZ2VGdW5jdGlvbiYmdGhpcy5kZXBlbmRlbmN5R3JhcGgubWFya0FzRGVwZW5kZW50T25TdHJ1Y3R1cmVDaGFuZ2UodmUpfWVsc2V7Y29u''@;'; put 'put ''c3QgdmU9bmV3ICRoKFouYXN0LEUsbmV3IHlsKGVlLndpZHRoLGVlLmhlaWdodCkpO3Quc2V0KHZlLFY2KFouZGVwZW5kZW5jaWVzLEUpKSx0aGlzLmRlcGVuZGVuY3lHcmFwaC5hZGRBcnJheVZlcnRleChFLHZlKX19fWVsc2UgaWYoIShPIGluc3RhbmNlb2YgSGQuRW1wdHkpKXt0aGlzLnNo''@;'; put 'put ''cmlua0FycmF5SWZOZWVkZWQoRSk7Y29uc3QgWj1uZXcgUV8oTy52YWx1ZSxnKTt0aGlzLmNvbHVtbkluZGV4LmFkZChMbyhPLnZhbHVlKSxFKSx0aGlzLmRlcGVuZGVuY3lHcmFwaC5hZGRWZXJ0ZXgoRSxaKX19fX1yZXR1cm4gdH1zaHJpbmtBcnJheUlmTmVlZGVkKGUpe2NvbnN0IHQ9dGhp''@;'; put 'put ''cy5kZXBlbmRlbmN5R3JhcGguZ2V0Q2VsbChlKTt0IGluc3RhbmNlb2YgJGgmJnRoaXMuZGVwZW5kZW5jeUdyYXBoLnNocmlua0FycmF5VG9Db3JuZXIodCl9fWNvbnN0IEtxPW5ldyBNYXAoW1siZ3BsLXYzIiwxXSxbIm1pc3NpbmciLDJdLFsiaW52YWxpZCIsM10sWyJleHBpcmVkIiw0XV0p''@;'; put 'put ''O2xldCBSdG49KCgpPT57Y2xhc3MgbiBleHRlbmRzIEJze3ZlcnNpb24odCxyKXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbih0LmFyZ3Mscix0aGlzLm1ldGFkYXRhKCJWRVJTSU9OIiksKCk9Pntjb25zdHtsaWNlbnNlS2V5VmFsaWRpdHlTdGF0ZTppLGxpY2Vuc2VLZXk6b309dGhpcy5jb25m''@;'; put 'put ''aWc7bGV0IGE7cmV0dXJuIEtxLmhhcyhvKT9hPUtxLmdldChvKTpLcS5oYXMoaSk/YT1LcS5nZXQoaSk6InZhbGlkIj09PWkmJihhPW8uc2xpY2UoLTUpKSxgSHlwZXJGb3JtdWxhIHYke2RmLnZlcnNpb259LCAke2F9YH0pfX1yZXR1cm4gbi5pbXBsZW1lbnRlZEZ1bmN0aW9ucz17VkVSU0lP''@;'; put 'put ''Tjp7bWV0aG9kOiJ2ZXJzaW9uIixwYXJhbWV0ZXJzOltdfX0sbn0pKCk7ZnVuY3Rpb24gcG1lKG4sZSl7dmFyIHQ7bGV0IHI9ZS5pbXBsZW1lbnRlZEZ1bmN0aW9uc1tuXTtjb25zdCBpPW51bGw9PT0odD1lLmFsaWFzZXMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0W25dO2lmKHZvaWQgMCE9PWkp''@;'; put 'put ''e2lmKHZvaWQgMCE9PXIpdGhyb3cgbmV3IERKdChuLGUubmFtZSk7cj1lLmltcGxlbWVudGVkRnVuY3Rpb25zW2ldfWlmKHZvaWQgMD09PXIpdGhyb3cgYVAuZnVuY3Rpb25Ob3REZWNsYXJlZEluUGx1Z2luKG4sZS5uYW1lKTtyZXR1cm4gcn1jbGFzcyByMHtjb25zdHJ1Y3RvcihlKXtpZih0''@;'; put 'put ''aGlzLmNvbmZpZz1lLHRoaXMuZnVuY3Rpb25zPW5ldyBNYXAsdGhpcy5hcnJheVNpemVGdW5jdGlvbnM9bmV3IE1hcCx0aGlzLnZvbGF0aWxlRnVuY3Rpb25zPW5ldyBTZXQsdGhpcy5hcnJheUZ1bmN0aW9ucz1uZXcgU2V0LHRoaXMuc3RydWN0dXJhbENoYW5nZUZ1bmN0aW9ucz1uZXcgU2V0''@;'; put 'put ''LHRoaXMuZnVuY3Rpb25zV2hpY2hEb2VzTm90TmVlZEFyZ3VtZW50c1RvQmVDb21wdXRlZD1uZXcgU2V0LHRoaXMuZnVuY3Rpb25zTWV0YWRhdGE9bmV3IE1hcCx0aGlzLmRvZXNGdW5jdGlvbk5lZWRBcmd1bWVudFRvQmVDb21wdXRlZD10PT50aGlzLmZ1bmN0aW9uc1doaWNoRG9lc05vdE5l''@;'; put 'put ''ZWRBcmd1bWVudHNUb0JlQ29tcHV0ZWQuaGFzKHQpLHRoaXMuaXNGdW5jdGlvblZvbGF0aWxlPXQ9PnRoaXMudm9sYXRpbGVGdW5jdGlvbnMuaGFzKHQpLHRoaXMuaXNBcnJheUZ1bmN0aW9uPXQ9PnRoaXMuYXJyYXlGdW5jdGlvbnMuaGFzKHQpLHRoaXMuaXNGdW5jdGlvbkRlcGVuZGVudE9u''@;'; put 'put ''U2hlZXRTdHJ1Y3R1cmVDaGFuZ2U9dD0+dGhpcy5zdHJ1Y3R1cmFsQ2hhbmdlRnVuY3Rpb25zLmhhcyh0KSxlLmZ1bmN0aW9uUGx1Z2lucy5sZW5ndGg+MCl7dGhpcy5pbnN0YW5jZVBsdWdpbnM9bmV3IE1hcDtmb3IoY29uc3QgdCBvZiBlLmZ1bmN0aW9uUGx1Z2lucylyMC5sb2FkUGx1Z2lu''@;'; put 'put ''RnVuY3Rpb25zKHQsdGhpcy5pbnN0YW5jZVBsdWdpbnMpfWVsc2UgdGhpcy5pbnN0YW5jZVBsdWdpbnM9bmV3IE1hcChyMC5wbHVnaW5zKTtmb3IoY29uc3RbdCxyXW9mIHIwLnByb3RlY3RlZEZ1bmN0aW9ucygpKXIwLmxvYWRGdW5jdGlvblVucHJvdGVjdGVkKHIsdCx0aGlzLmluc3RhbmNl''@;'; put 'put ''UGx1Z2lucyk7Zm9yKGNvbnN0W3Qscl1vZiB0aGlzLmluc3RhbmNlUGx1Z2lucy5lbnRyaWVzKCkpdGhpcy5jYXRlZ29yaXplRnVuY3Rpb24odCxwbWUodCxyKSl9c3RhdGljIHJlZ2lzdGVyRnVuY3Rpb25QbHVnaW4oZSx0KXt0aGlzLmxvYWRQbHVnaW5GdW5jdGlvbnMoZSx0aGlzLnBsdWdp''@;'; put 'put ''bnMpLHZvaWQgMCE9PXQmJnRoaXMubG9hZFRyYW5zbGF0aW9ucyh0KX1zdGF0aWMgcmVnaXN0ZXJGdW5jdGlvbihlLHQscil7dGhpcy5sb2FkUGx1Z2luRnVuY3Rpb24odCxlLHRoaXMucGx1Z2lucyksdm9pZCAwIT09ciYmdGhpcy5sb2FkVHJhbnNsYXRpb25zKHIpfXN0YXRpYyB1bnJlZ2lz''@;'; put 'put ''dGVyRnVuY3Rpb24oZSl7aWYodGhpcy5mdW5jdGlvbklzUHJvdGVjdGVkKGUpKXRocm93IE9DLmNhbm5vdFVucmVnaXN0ZXJGdW5jdGlvbldpdGhJZChlKTt0aGlzLnBsdWdpbnMuZGVsZXRlKGUpfXN0YXRpYyB1bnJlZ2lzdGVyRnVuY3Rpb25QbHVnaW4oZSl7Zm9yKGNvbnN0IHQgb2YgdGhp''@;'; put 'put ''cy5wcm90ZWN0ZWRQbHVnaW5zKCkpaWYodD09PWUpdGhyb3cgT0MuY2Fubm90VW5yZWdpc3RlclByb3RlY3RlZFBsdWdpbigpO2Zvcihjb25zdFt0LHJdb2YgdGhpcy5wbHVnaW5zLmVudHJpZXMoKSlyPT09ZSYmdGhpcy5wbHVnaW5zLmRlbGV0ZSh0KX1zdGF0aWMgdW5yZWdpc3RlckFsbCgp''@;'; put 'put ''e3RoaXMucGx1Z2lucy5jbGVhcigpfXN0YXRpYyBnZXRSZWdpc3RlcmVkRnVuY3Rpb25JZHMoKXtyZXR1cm5bLi4uQXJyYXkuZnJvbSh0aGlzLnBsdWdpbnMua2V5cygpKSwuLi5BcnJheS5mcm9tKHRoaXMuX3Byb3RlY3RlZFBsdWdpbnMua2V5cygpKV19c3RhdGljIGdldFBsdWdpbnMoKXty''@;'; put 'put ''ZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMucGx1Z2lucy52YWx1ZXMoKSkudmFsdWVzKCkpfXN0YXRpYyBnZXRGdW5jdGlvblBsdWdpbihlKXtpZighdGhpcy5mdW5jdGlvbklzUHJvdGVjdGVkKGUpKXJldHVybiB0aGlzLnBsdWdpbnMuZ2V0KGUpfXN0YXRpYyBmdW5jdGlvbklzUHJv''@;'; put 'put ''dGVjdGVkKGUpe3JldHVybiB0aGlzLl9wcm90ZWN0ZWRQbHVnaW5zLmhhcyhlKX1zdGF0aWMgbG9hZFRyYW5zbGF0aW9ucyhlKXtjb25zdCB0PW5ldyBTZXQoZGYuZ2V0UmVnaXN0ZXJlZExhbmd1YWdlc0NvZGVzKCkpO09iamVjdC5rZXlzKGUpLmZvckVhY2gocj0+e3QuaGFzKHIpJiZkZi5n''@;'; put 'put ''ZXRMYW5ndWFnZShyKS5leHRlbmRGdW5jdGlvbnMoZVtyXSl9KX1zdGF0aWMgbG9hZFBsdWdpbkZ1bmN0aW9ucyhlLHQpe09iamVjdC5rZXlzKGUuaW1wbGVtZW50ZWRGdW5jdGlvbnMpLmZvckVhY2gocj0+e3RoaXMubG9hZFBsdWdpbkZ1bmN0aW9uKGUscix0KX0pLHZvaWQgMCE9PWUuYWxp''@;'; put 'put ''YXNlcyYmT2JqZWN0LmtleXMoZS5hbGlhc2VzKS5mb3JFYWNoKHI9Pnt0aGlzLmxvYWRQbHVnaW5GdW5jdGlvbihlLHIsdCl9KX1zdGF0aWMgbG9hZFBsdWdpbkZ1bmN0aW9uKGUsdCxyKXtpZih0aGlzLmZ1bmN0aW9uSXNQcm90ZWN0ZWQodCkpdGhyb3cgT0MuY2Fubm90UmVnaXN0ZXJGdW5j''@;'; put 'put ''dGlvbldpdGhJZCh0KTt0aGlzLmxvYWRGdW5jdGlvblVucHJvdGVjdGVkKGUsdCxyKX1zdGF0aWMgbG9hZEZ1bmN0aW9uVW5wcm90ZWN0ZWQoZSx0LHIpe2NvbnN0IGk9cG1lKHQsZSkubWV0aG9kO2lmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZS5wcm90b3R5cGUs''@;'; put 'put ''aSkpdGhyb3cgYVAuZnVuY3Rpb25NZXRob2ROb3RGb3VuZChpLGUubmFtZSk7ci5zZXQodCxlKX1zdGF0aWMqcHJvdGVjdGVkRnVuY3Rpb25zKCl7Zm9yKGNvbnN0W2UsdF1vZiB0aGlzLl9wcm90ZWN0ZWRQbHVnaW5zKXZvaWQgMCE9PXQmJih5aWVsZFtlLHRdKX1zdGF0aWMqcHJvdGVjdGVk''@;'; put 'put ''UGx1Z2lucygpe2Zvcihjb25zdFssZV1vZiB0aGlzLl9wcm90ZWN0ZWRQbHVnaW5zKXZvaWQgMCE9PWUmJih5aWVsZCBlKX1pbml0aWFsaXplUGx1Z2lucyhlKXtjb25zdCB0PVtdO2Zvcihjb25zdFtyLGldb2YgdGhpcy5pbnN0YW5jZVBsdWdpbnMuZW50cmllcygpKXtsZXQgbz10LmZpbmQo''@;'; put 'put ''Zz0+ZyBpbnN0YW5jZW9mIGkpO3ZvaWQgMD09PW8mJihvPW5ldyBpKGUpLHQucHVzaChvKSk7Y29uc3QgYT1wbWUocixpKTt0aGlzLmZ1bmN0aW9ucy5zZXQocixbYS5tZXRob2Qsb10pO2NvbnN0IHU9YS5hcnJheVNpemVNZXRob2Q7dm9pZCAwIT09dSYmdGhpcy5hcnJheVNpemVGdW5jdGlv''@;'; put 'put ''bnMuc2V0KHIsW3Usb10pfX1nZXRGdW5jdGlvblBsdWdpbihlKXtpZighcjAuZnVuY3Rpb25Jc1Byb3RlY3RlZChlKSlyZXR1cm4gdGhpcy5pbnN0YW5jZVBsdWdpbnMuZ2V0KGUpfWdldEZ1bmN0aW9uKGUpe2NvbnN0IHQ9dGhpcy5mdW5jdGlvbnMuZ2V0KGUpO2lmKHZvaWQgMCE9PXQmJnRo''@;'; put 'put ''aXMuY29uZmlnLnRyYW5zbGF0aW9uUGFja2FnZS5pc0Z1bmN0aW9uVHJhbnNsYXRlZChlKSl7Y29uc3RbcixpXT10O3JldHVybihvLGEpPT5pW3JdKG8sYSl9fWdldEFycmF5U2l6ZUZ1bmN0aW9uKGUpe2NvbnN0IHQ9dGhpcy5hcnJheVNpemVGdW5jdGlvbnMuZ2V0KGUpO2lmKHZvaWQgMCE9''@;'; put 'put ''PXQmJnRoaXMuY29uZmlnLnRyYW5zbGF0aW9uUGFja2FnZS5pc0Z1bmN0aW9uVHJhbnNsYXRlZChlKSl7Y29uc3RbcixpXT10O3JldHVybihvLGEpPT5pW3JdKG8sYSl9fWdldE1ldGFkYXRhKGUpe3JldHVybiB0aGlzLmZ1bmN0aW9uc01ldGFkYXRhLmdldChlKX1nZXRQbHVnaW5zKCl7Y29u''@;'; put 'put ''c3QgZT1uZXcgU2V0O2Zvcihjb25zdFt0LHJdb2YgdGhpcy5pbnN0YW5jZVBsdWdpbnMpcjAuZnVuY3Rpb25Jc1Byb3RlY3RlZCh0KXx8ZS5hZGQocik7cmV0dXJuIEFycmF5LmZyb20oZSl9Z2V0UmVnaXN0ZXJlZEZ1bmN0aW9uSWRzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5mdW5jdGlv''@;'; put 'put ''bnMua2V5cygpKX1jYXRlZ29yaXplRnVuY3Rpb24oZSx0KXt0LmlzVm9sYXRpbGUmJnRoaXMudm9sYXRpbGVGdW5jdGlvbnMuYWRkKGUpLHQuYXJyYXlGdW5jdGlvbiYmdGhpcy5hcnJheUZ1bmN0aW9ucy5hZGQoZSksdC5kb2VzTm90TmVlZEFyZ3VtZW50c1RvQmVDb21wdXRlZCYmdGhpcy5m''@;'; put 'put ''dW5jdGlvbnNXaGljaERvZXNOb3ROZWVkQXJndW1lbnRzVG9CZUNvbXB1dGVkLmFkZChlKSx0LmlzRGVwZW5kZW50T25TaGVldFN0cnVjdHVyZUNoYW5nZSYmdGhpcy5zdHJ1Y3R1cmFsQ2hhbmdlRnVuY3Rpb25zLmFkZChlKSx0aGlzLmZ1bmN0aW9uc01ldGFkYXRhLnNldChlLHQpfX1yMC5w''@;'; put 'put ''bHVnaW5zPW5ldyBNYXAscjAuX3Byb3RlY3RlZFBsdWdpbnM9bmV3IE1hcChbWyJWRVJTSU9OIixSdG5dLFsiT0ZGU0VUIix2b2lkIDBdXSk7dmFyIGQyPWZ1bmN0aW9uKG4pe3JldHVybiBuLkdSRUFURVJfVEhBTj0iR1JFQVRFUl9USEFOIixuLkdSRUFURVJfVEhBTl9PUl9FUVVBTD0iR1JF''@;'; put 'put ''QVRFUl9USEFOX09SX0VRVUFMIixuLkxFU1NfVEhBTj0iTEVTU19USEFOIixuLkxFU1NfVEhBTl9PUl9FUVVBTD0iTEVTU19USEFOX09SX0VRVUFMIixuLk5PVF9FUVVBTD0iTk9UX0VRVUFMIixuLkVRVUFMPSJFUVVBTCIsbn0oZDJ8fHt9KTtjb25zdCBYcT0obixlKT0+KHtvcGVyYXRvcjpu''@;'; put 'put ''LHZhbHVlOmV9KTtjbGFzcyBJdG57Y29uc3RydWN0b3IoZSl7dmFyIHQscixpLG87dGhpcy50cnVlU3RyaW5nPW51bGwhPT0ocj1udWxsPT09KHQ9ZS50cmFuc2xhdGlvblBhY2thZ2UuZ2V0TWF5YmVGdW5jdGlvblRyYW5zbGF0aW9uKCJUUlVFIikpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LnRv''@;'; put 'put ''TG93ZXJDYXNlKCkpJiZ2b2lkIDAhPT1yP3I6InRydWUiLHRoaXMuZmFsc2VTdHJpbmc9bnVsbCE9PShvPW51bGw9PT0oaT1lLnRyYW5zbGF0aW9uUGFja2FnZS5nZXRNYXliZUZ1bmN0aW9uVHJhbnNsYXRpb24oIkZBTFNFIikpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnRvTG93ZXJDYXNlKCkp''@;'; put 'put ''JiZ2b2lkIDAhPT1vP286ImZhbHNlIn1mcm9tQ2VsbFZhbHVlKGUsdCl7aWYoInN0cmluZyIhPXR5cGVvZiBlJiYiYm9vbGVhbiIhPXR5cGVvZiBlJiYibnVtYmVyIiE9dHlwZW9mIGUpcmV0dXJuO2NvbnN0IHI9dGhpcy5wYXJzZUNyaXRlcmlvbihlLHQpO3JldHVybiB2b2lkIDAhPT1yP3ty''@;'; put 'put ''YXc6ZSxsYW1iZGE6T3RuKHIsdCl9OnZvaWQgMH1wYXJzZUNyaXRlcmlvbihlLHQpe2lmKCJudW1iZXIiPT10eXBlb2YgZXx8ImJvb2xlYW4iPT10eXBlb2YgZSlyZXR1cm4gWHEoZDIuRVFVQUwsZSk7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtjb25zdCByPUR0bi5leGVjKGUpO2xldCBpLG87''@;'; put 'put ''cj8obz1mdW5jdGlvbiBMdG4obil7c3dpdGNoKG4pe2Nhc2UiPiI6cmV0dXJuIGQyLkdSRUFURVJfVEhBTjtjYXNlIj49IjpyZXR1cm4gZDIuR1JFQVRFUl9USEFOX09SX0VRVUFMO2Nhc2UiPCI6cmV0dXJuIGQyLkxFU1NfVEhBTjtjYXNlIjw9IjpyZXR1cm4gZDIuTEVTU19USEFOX09SX0VR''@;'; put 'put ''VUFMO2Nhc2UiPD4iOnJldHVybiBkMi5OT1RfRVFVQUw7Y2FzZSI9IjpyZXR1cm4gZDIuRVFVQUw7ZGVmYXVsdDpyZXR1cm59fShyWzFdKSxpPXJbMl0pOihvPWQyLkVRVUFMLGk9ZSk7Y29uc3QgYT10LmNvZXJjZVRvTWF5YmVOdW1iZXIoaSksbD1pLnRvTG93ZXJDYXNlKCk9PT10aGlzLnRy''@;'; put 'put ''dWVTdHJpbmd8fGkudG9Mb3dlckNhc2UoKSE9PXRoaXMuZmFsc2VTdHJpbmcmJnZvaWQgMDtpZih2b2lkIDA9PT1vKXJldHVybjtpZigiIj09PWkpcmV0dXJuIFhxKG8sbnVsbCk7aWYodm9pZCAwIT09YSlyZXR1cm4gWHEobyxMbyhhKSk7aWYobz09PWQyLkVRVUFMfHxvPT09ZDIuTk9UX0VR''@;'; put 'put ''VUFMKXJldHVybiBYcShvLGw/P2kpfX19Y29uc3QgRHRuPS8oWzw+PV0rKSguKikvLE90bj0obixlKT0+e3N3aXRjaChuLm9wZXJhdG9yKXtjYXNlIGQyLkdSRUFURVJfVEhBTjpyZXR1cm4ibnVtYmVyIj09dHlwZW9mIG4udmFsdWU/dD0+Im51bWJlciI9PXR5cGVvZiB0JiZlLmZsb2F0Q21w''@;'; put 'put ''KHQsbi52YWx1ZSk+MDp0PT4hMTtjYXNlIGQyLkdSRUFURVJfVEhBTl9PUl9FUVVBTDpyZXR1cm4ibnVtYmVyIj09dHlwZW9mIG4udmFsdWU/dD0+Im51bWJlciI9PXR5cGVvZiB0JiZlLmZsb2F0Q21wKHQsbi52YWx1ZSk+PTA6dD0+ITE7Y2FzZSBkMi5MRVNTX1RIQU46cmV0dXJuIm51bWJl''@;'; put 'put ''ciI9PXR5cGVvZiBuLnZhbHVlP3Q9PiJudW1iZXIiPT10eXBlb2YgdCYmZS5mbG9hdENtcCh0LG4udmFsdWUpPDA6dD0+ITE7Y2FzZSBkMi5MRVNTX1RIQU5fT1JfRVFVQUw6cmV0dXJuIm51bWJlciI9PXR5cGVvZiBuLnZhbHVlP3Q9PiJudW1iZXIiPT10eXBlb2YgdCYmZS5mbG9hdENtcCh0''@;'; put 'put ''LG4udmFsdWUpPD0wOnQ9PiExO2Nhc2UgZDIuRVFVQUw6cmV0dXJuIm51bWJlciI9PXR5cGVvZiBuLnZhbHVlP3Q9PntpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIDA9PT1lLmZsb2F0Q21wKHQsbi52YWx1ZSk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZigiIj09PXQpcmV0dXJuITE7''@;'; put 'put ''Y29uc3Qgcj1lLmNvZXJjZVRvTWF5YmVOdW1iZXIodCk7cmV0dXJuIHZvaWQgMCE9PXImJjA9PT1lLmZsb2F0Q21wKHIsbi52YWx1ZSl9cmV0dXJuITF9OiJzdHJpbmciPT10eXBlb2Ygbi52YWx1ZT9lLmVxTWF0Y2hlckZ1bmN0aW9uKG4udmFsdWUpOiJib29sZWFuIj09dHlwZW9mIG4udmFs''@;'; put 'put ''dWU/dD0+ImJvb2xlYW4iPT10eXBlb2YgdCYmdD09PW4udmFsdWU6dD0+dD09PWxsO2Nhc2UgZDIuTk9UX0VRVUFMOnJldHVybiJudW1iZXIiPT10eXBlb2Ygbi52YWx1ZT90PT57aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiAwIT09ZS5mbG9hdENtcCh0LG4udmFsdWUpO2lmKCJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgdCl7aWYoIiI9PT10KXJldHVybiEwO2NvbnN0IHI9ZS5jb2VyY2VUb01heWJlTnVtYmVyKHQpO3JldHVybiB2b2lkIDA9PT1yfHwwIT09ZS5mbG9hdENtcChyLG4udmFsdWUpfXJldHVybiEwfToic3RyaW5nIj09dHlwZW9mIG4udmFsdWU/ZS5uZXFNYXRjaGVyRnVuY3Rp''@;'; put 'put ''b24obi52YWx1ZSk6ImJvb2xlYW4iPT10eXBlb2Ygbi52YWx1ZT90PT4iYm9vbGVhbiIhPXR5cGVvZiB0fHx0IT09bi52YWx1ZTp0PT50IT09bGx9fTtjbGFzcyBOdG57Y29uc3RydWN0b3IoZSx0LHIsaSxvLGEsbCx1LGcsRSl7dGhpcy5jb25maWc9ZSx0aGlzLmRlcGVuZGVuY3lHcmFwaD10''@;'; put 'put ''LHRoaXMuY29sdW1uU2VhcmNoPXIsdGhpcy5zdGF0cz1pLHRoaXMuYXJpdGhtZXRpY0hlbHBlcj1vLHRoaXMuZnVuY3Rpb25SZWdpc3RyeT1hLHRoaXMubmFtZWRFeHByZXNzaW9ucz1sLHRoaXMuc2VyaWFsaXphdGlvbj11LHRoaXMuYXJyYXlTaXplUHJlZGljdG9yPWcsdGhpcy5kYXRlVGlt''@;'; put 'put ''ZUhlbHBlcj1FLHRoaXMuZXF1YWxPcD0oTyxaKT0+eG0odGhpcy5hcml0aG1ldGljSGVscGVyLmVxLE8sWiksdGhpcy5ub3RFcXVhbE9wPShPLFopPT54bSh0aGlzLmFyaXRobWV0aWNIZWxwZXIubmVxLE8sWiksdGhpcy5ncmVhdGVyVGhhbk9wPShPLFopPT54bSh0aGlzLmFyaXRobWV0aWNI''@;'; put 'put ''ZWxwZXIuZ3QsTyxaKSx0aGlzLmxlc3NUaGFuT3A9KE8sWik9PnhtKHRoaXMuYXJpdGhtZXRpY0hlbHBlci5sdCxPLFopLHRoaXMuZ3JlYXRlclRoYW5PckVxdWFsT3A9KE8sWik9PnhtKHRoaXMuYXJpdGhtZXRpY0hlbHBlci5nZXEsTyxaKSx0aGlzLmxlc3NUaGFuT3JFcXVhbE9wPShPLFop''@;'; put 'put ''PT54bSh0aGlzLmFyaXRobWV0aWNIZWxwZXIubGVxLE8sWiksdGhpcy5jb25jYXRPcD0oTyxaKT0+eG0odGhpcy5hcml0aG1ldGljSGVscGVyLmNvbmNhdCxubWUoTyksbm1lKFopKSx0aGlzLnBsdXNPcD0oTyxaKT0+eG0odGhpcy5hcml0aG1ldGljSGVscGVyLmFkZFdpdGhFcHNpbG9uLHRo''@;'; put 'put ''aXMuYXJpdGhtZXRpY0hlbHBlci5jb2VyY2VTY2FsYXJUb051bWJlck9yRXJyb3IoTyksdGhpcy5hcml0aG1ldGljSGVscGVyLmNvZXJjZVNjYWxhclRvTnVtYmVyT3JFcnJvcihaKSksdGhpcy5taW51c09wPShPLFopPT54bSh0aGlzLmFyaXRobWV0aWNIZWxwZXIuc3VidHJhY3QsdGhpcy5h''@;'; put 'put ''cml0aG1ldGljSGVscGVyLmNvZXJjZVNjYWxhclRvTnVtYmVyT3JFcnJvcihPKSx0aGlzLmFyaXRobWV0aWNIZWxwZXIuY29lcmNlU2NhbGFyVG9OdW1iZXJPckVycm9yKFopKSx0aGlzLnRpbWVzT3A9KE8sWik9PnhtKHRoaXMuYXJpdGhtZXRpY0hlbHBlci5tdWx0aXBseSx0aGlzLmFyaXRo''@;'; put 'put ''bWV0aWNIZWxwZXIuY29lcmNlU2NhbGFyVG9OdW1iZXJPckVycm9yKE8pLHRoaXMuYXJpdGhtZXRpY0hlbHBlci5jb2VyY2VTY2FsYXJUb051bWJlck9yRXJyb3IoWikpLHRoaXMucG93ZXJPcD0oTyxaKT0+eG0odGhpcy5hcml0aG1ldGljSGVscGVyLnBvdyx0aGlzLmFyaXRobWV0aWNIZWxw''@;'; put 'put ''ZXIuY29lcmNlU2NhbGFyVG9OdW1iZXJPckVycm9yKE8pLHRoaXMuYXJpdGhtZXRpY0hlbHBlci5jb2VyY2VTY2FsYXJUb051bWJlck9yRXJyb3IoWikpLHRoaXMuZGl2T3A9KE8sWik9PnhtKHRoaXMuYXJpdGhtZXRpY0hlbHBlci5kaXZpZGUsdGhpcy5hcml0aG1ldGljSGVscGVyLmNvZXJj''@;'; put 'put ''ZVNjYWxhclRvTnVtYmVyT3JFcnJvcihPKSx0aGlzLmFyaXRobWV0aWNIZWxwZXIuY29lcmNlU2NhbGFyVG9OdW1iZXJPckVycm9yKFopKSx0aGlzLnVuYXJ5TWludXNPcD1PPT5XV2UodGhpcy5hcml0aG1ldGljSGVscGVyLnVuYXJ5TWludXMsdGhpcy5hcml0aG1ldGljSGVscGVyLmNvZXJj''@;'; put 'put ''ZVNjYWxhclRvTnVtYmVyT3JFcnJvcihPKSksdGhpcy5wZXJjZW50T3A9Tz0+V1dlKHRoaXMuYXJpdGhtZXRpY0hlbHBlci51bmFyeVBlcmNlbnQsdGhpcy5hcml0aG1ldGljSGVscGVyLmNvZXJjZVNjYWxhclRvTnVtYmVyT3JFcnJvcihPKSksdGhpcy51bmFyeVBsdXNPcD1PPT50aGlzLmFy''@;'; put 'put ''aXRobWV0aWNIZWxwZXIudW5hcnlQbHVzKE8pLHRoaXMuZnVuY3Rpb25SZWdpc3RyeS5pbml0aWFsaXplUGx1Z2lucyh0aGlzKSx0aGlzLmNyaXRlcmlvbkJ1aWxkZXI9bmV3IEl0bihlKX1ldmFsdWF0ZUFzdChlLHQpe2xldCByPXRoaXMuZXZhbHVhdGVBc3RXaXRob3V0UG9zdHByb2Nlc3Np''@;'; put 'put ''bmcoZSx0KTtpZihjYyhyKSl7aWYoZldlKExvKHIpKSlyZXR1cm4gbmV3IFB0KHRuLk5VTSxkci5OYU4pO3I9V2dlKHIscFdlKExvKHIpKSl9cmV0dXJuIHIgaW5zdGFuY2VvZiBsYSYmMT09PXIuaGVpZ2h0KCkmJjE9PT1yLndpZHRoKCkmJihbW3JdXT1yLmRhdGEpLGZ1bmN0aW9uIEZ0bihu''@;'; put 'put ''LGUpe3JldHVybiBuIGluc3RhbmNlb2YgUHQmJnZvaWQgMCE9PWU/bi5hdHRhY2hSb290VmVydGV4KGUpOm59KHIsdC5mb3JtdWxhVmVydGV4KX1ldmFsdWF0ZUFzdFdpdGhvdXRQb3N0cHJvY2Vzc2luZyhlLHQpe3N3aXRjaChlLnR5cGUpe2Nhc2Ugcm4uRU1QVFk6cmV0dXJuIGxsO2Nhc2Ug''@;'; put 'put ''cm4uQ0VMTF9SRUZFUkVOQ0U6e2NvbnN0IHI9ZS5yZWZlcmVuY2UudG9TaW1wbGVDZWxsQWRkcmVzcyh0LmZvcm11bGFBZGRyZXNzKTtyZXR1cm4gbnAocik/bmV3IFB0KHRuLlJFRixkci5CYWRSZWYpOnRoaXMuZGVwZW5kZW5jeUdyYXBoLmdldENlbGxWYWx1ZShyKX1jYXNlIHJuLk5VTUJF''@;'; put 'put ''UjpjYXNlIHJuLlNUUklORzpyZXR1cm4gZS52YWx1ZTtjYXNlIHJuLkNPTkNBVEVOQVRFX09QOntjb25zdCByPXRoaXMuZXZhbHVhdGVBc3QoZS5sZWZ0LHQpLGk9dGhpcy5ldmFsdWF0ZUFzdChlLnJpZ2h0LHQpO3JldHVybiB0aGlzLmJpbmFyeVJhbmdlV3JhcHBlcih0aGlzLmNvbmNhdE9w''@;'; put 'put ''LHIsaSx0KX1jYXNlIHJuLkVRVUFMU19PUDp7Y29uc3Qgcj10aGlzLmV2YWx1YXRlQXN0KGUubGVmdCx0KSxpPXRoaXMuZXZhbHVhdGVBc3QoZS5yaWdodCx0KTtyZXR1cm4gdGhpcy5iaW5hcnlSYW5nZVdyYXBwZXIodGhpcy5lcXVhbE9wLHIsaSx0KX1jYXNlIHJuLk5PVF9FUVVBTF9PUDp7''@;'; put 'put ''Y29uc3Qgcj10aGlzLmV2YWx1YXRlQXN0KGUubGVmdCx0KSxpPXRoaXMuZXZhbHVhdGVBc3QoZS5yaWdodCx0KTtyZXR1cm4gdGhpcy5iaW5hcnlSYW5nZVdyYXBwZXIodGhpcy5ub3RFcXVhbE9wLHIsaSx0KX1jYXNlIHJuLkdSRUFURVJfVEhBTl9PUDp7Y29uc3Qgcj10aGlzLmV2YWx1YXRl''@;'; put 'put ''QXN0KGUubGVmdCx0KSxpPXRoaXMuZXZhbHVhdGVBc3QoZS5yaWdodCx0KTtyZXR1cm4gdGhpcy5iaW5hcnlSYW5nZVdyYXBwZXIodGhpcy5ncmVhdGVyVGhhbk9wLHIsaSx0KX1jYXNlIHJuLkxFU1NfVEhBTl9PUDp7Y29uc3Qgcj10aGlzLmV2YWx1YXRlQXN0KGUubGVmdCx0KSxpPXRoaXMu''@;'; put 'put ''ZXZhbHVhdGVBc3QoZS5yaWdodCx0KTtyZXR1cm4gdGhpcy5iaW5hcnlSYW5nZVdyYXBwZXIodGhpcy5sZXNzVGhhbk9wLHIsaSx0KX1jYXNlIHJuLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9PUDp7Y29uc3Qgcj10aGlzLmV2YWx1YXRlQXN0KGUubGVmdCx0KSxpPXRoaXMuZXZhbHVhdGVBc3Qo''@;'; put 'put ''ZS5yaWdodCx0KTtyZXR1cm4gdGhpcy5iaW5hcnlSYW5nZVdyYXBwZXIodGhpcy5ncmVhdGVyVGhhbk9yRXF1YWxPcCxyLGksdCl9Y2FzZSBybi5MRVNTX1RIQU5fT1JfRVFVQUxfT1A6e2NvbnN0IHI9dGhpcy5ldmFsdWF0ZUFzdChlLmxlZnQsdCksaT10aGlzLmV2YWx1YXRlQXN0KGUucmln''@;'; put 'put ''aHQsdCk7cmV0dXJuIHRoaXMuYmluYXJ5UmFuZ2VXcmFwcGVyKHRoaXMubGVzc1RoYW5PckVxdWFsT3AscixpLHQpfWNhc2Ugcm4uUExVU19PUDp7Y29uc3Qgcj10aGlzLmV2YWx1YXRlQXN0KGUubGVmdCx0KSxpPXRoaXMuZXZhbHVhdGVBc3QoZS5yaWdodCx0KTtyZXR1cm4gdGhpcy5iaW5h''@;'; put 'put ''cnlSYW5nZVdyYXBwZXIodGhpcy5wbHVzT3AscixpLHQpfWNhc2Ugcm4uTUlOVVNfT1A6e2NvbnN0IHI9dGhpcy5ldmFsdWF0ZUFzdChlLmxlZnQsdCksaT10aGlzLmV2YWx1YXRlQXN0KGUucmlnaHQsdCk7cmV0dXJuIHRoaXMuYmluYXJ5UmFuZ2VXcmFwcGVyKHRoaXMubWludXNPcCxyLGks''@;'; put 'put ''dCl9Y2FzZSBybi5USU1FU19PUDp7Y29uc3Qgcj10aGlzLmV2YWx1YXRlQXN0KGUubGVmdCx0KSxpPXRoaXMuZXZhbHVhdGVBc3QoZS5yaWdodCx0KTtyZXR1cm4gdGhpcy5iaW5hcnlSYW5nZVdyYXBwZXIodGhpcy50aW1lc09wLHIsaSx0KX1jYXNlIHJuLlBPV0VSX09QOntjb25zdCByPXRo''@;'; put 'put ''aXMuZXZhbHVhdGVBc3QoZS5sZWZ0LHQpLGk9dGhpcy5ldmFsdWF0ZUFzdChlLnJpZ2h0LHQpO3JldHVybiB0aGlzLmJpbmFyeVJhbmdlV3JhcHBlcih0aGlzLnBvd2VyT3AscixpLHQpfWNhc2Ugcm4uRElWX09QOntjb25zdCByPXRoaXMuZXZhbHVhdGVBc3QoZS5sZWZ0LHQpLGk9dGhpcy5l''@;'; put 'put ''dmFsdWF0ZUFzdChlLnJpZ2h0LHQpO3JldHVybiB0aGlzLmJpbmFyeVJhbmdlV3JhcHBlcih0aGlzLmRpdk9wLHIsaSx0KX1jYXNlIHJuLlBMVVNfVU5BUllfT1A6e2NvbnN0IHI9dGhpcy5ldmFsdWF0ZUFzdChlLnZhbHVlLHQpO3JldHVybiB0aGlzLnVuYXJ5UmFuZ2VXcmFwcGVyKHRoaXMu''@;'; put 'put ''dW5hcnlQbHVzT3Ascix0KX1jYXNlIHJuLk1JTlVTX1VOQVJZX09QOntjb25zdCByPXRoaXMuZXZhbHVhdGVBc3QoZS52YWx1ZSx0KTtyZXR1cm4gdGhpcy51bmFyeVJhbmdlV3JhcHBlcih0aGlzLnVuYXJ5TWludXNPcCxyLHQpfWNhc2Ugcm4uUEVSQ0VOVF9PUDp7Y29uc3Qgcj10aGlzLmV2''@;'; put 'put ''YWx1YXRlQXN0KGUudmFsdWUsdCk7cmV0dXJuIHRoaXMudW5hcnlSYW5nZVdyYXBwZXIodGhpcy5wZXJjZW50T3Ascix0KX1jYXNlIHJuLkZVTkNUSU9OX0NBTEw6e2lmKCJ2YWxpZCIhPT10aGlzLmNvbmZpZy5saWNlbnNlS2V5VmFsaWRpdHlTdGF0ZSYmIXIwLmZ1bmN0aW9uSXNQcm90ZWN0''@;'; put 'put ''ZWQoZS5wcm9jZWR1cmVOYW1lKSlyZXR1cm4gbmV3IFB0KHRuLkxJQyxkci5MaWNlbnNlS2V5KHRoaXMuY29uZmlnLmxpY2Vuc2VLZXlWYWxpZGl0eVN0YXRlKSk7Y29uc3Qgcj10aGlzLmZ1bmN0aW9uUmVnaXN0cnkuZ2V0RnVuY3Rpb24oZS5wcm9jZWR1cmVOYW1lKTtyZXR1cm4gdm9pZCAw''@;'; put 'put ''IT09cj9yKGUsbmV3IHo2KHQuZm9ybXVsYUFkZHJlc3MsdC5hcnJheXNGbGFnfHx0aGlzLmZ1bmN0aW9uUmVnaXN0cnkuaXNBcnJheUZ1bmN0aW9uKGUucHJvY2VkdXJlTmFtZSksdC5mb3JtdWxhVmVydGV4KSk6bmV3IFB0KHRuLk5BTUUsZHIuRnVuY3Rpb25OYW1lKGUucHJvY2VkdXJlTmFt''@;'; put 'put ''ZSkpfWNhc2Ugcm4uTkFNRURfRVhQUkVTU0lPTjp7Y29uc3Qgcj10aGlzLm5hbWVkRXhwcmVzc2lvbnMubmVhcmVzdE5hbWVkRXhwcmVzc2lvbihlLmV4cHJlc3Npb25OYW1lLHQuZm9ybXVsYUFkZHJlc3Muc2hlZXQpO3JldHVybiByP3RoaXMuZGVwZW5kZW5jeUdyYXBoLmdldENlbGxWYWx1''@;'; put 'put ''ZShyLmFkZHJlc3MpOm5ldyBQdCh0bi5OQU1FLGRyLk5hbWVkRXhwcmVzc2lvbk5hbWUoZS5leHByZXNzaW9uTmFtZSkpfWNhc2Ugcm4uQ0VMTF9SQU5HRTp7aWYoIXRoaXMucmFuZ2VTcGFuc09uZVNoZWV0KGUpKXJldHVybiBuZXcgUHQodG4uUkVGLGRyLlJhbmdlTWFueVNoZWV0cyk7Y29u''@;'; put 'put ''c3Qgcj1iYS5mcm9tQ2VsbFJhbmdlKGUsdC5mb3JtdWxhQWRkcmVzcyksaT10aGlzLmRlcGVuZGVuY3lHcmFwaC5nZXRBcnJheShyKTtpZihpKXtjb25zdCBvPWkuYXJyYXk7aWYobyBpbnN0YW5jZW9mIGxQKXRocm93IG5ldyBFcnJvcigiQXJyYXkgc2hvdWxkIGJlIGFscmVhZHkgY29tcHV0''@;'; put 'put ''ZWQiKTtpZihvIGluc3RhbmNlb2YgUHQpcmV0dXJuIG87aWYobyBpbnN0YW5jZW9mIG5BKXJldHVybiBsYS5mcm9tUmFuZ2Uoby5yYXcoKSxyLHRoaXMuZGVwZW5kZW5jeUdyYXBoKTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gYXJyYXkiKX1yZXR1cm4gbGEub25seVJhbmdlKHIsdGhpcy5k''@;'; put 'put ''ZXBlbmRlbmN5R3JhcGgpfWNhc2Ugcm4uQ09MVU1OX1JBTkdFOntpZighdGhpcy5yYW5nZVNwYW5zT25lU2hlZXQoZSkpcmV0dXJuIG5ldyBQdCh0bi5SRUYsZHIuUmFuZ2VNYW55U2hlZXRzKTtjb25zdCByPXM5LmZyb21Db2x1bW5SYW5nZShlLHQuZm9ybXVsYUFkZHJlc3MpO3JldHVybiBs''@;'; put 'put ''YS5vbmx5UmFuZ2Uocix0aGlzLmRlcGVuZGVuY3lHcmFwaCl9Y2FzZSBybi5ST1dfUkFOR0U6e2lmKCF0aGlzLnJhbmdlU3BhbnNPbmVTaGVldChlKSlyZXR1cm4gbmV3IFB0KHRuLlJFRixkci5SYW5nZU1hbnlTaGVldHMpO2NvbnN0IHI9bDkuZnJvbVJvd1JhbmdlQXN0KGUsdC5mb3JtdWxh''@;'; put 'put ''QWRkcmVzcyk7cmV0dXJuIGxhLm9ubHlSYW5nZShyLHRoaXMuZGVwZW5kZW5jeUdyYXBoKX1jYXNlIHJuLlBBUkVOVEhFU0lTOnJldHVybiB0aGlzLmV2YWx1YXRlQXN0KGUuZXhwcmVzc2lvbix0KTtjYXNlIHJuLkFSUkFZOntsZXQgcjtjb25zdCBpPVtdO2Zvcihjb25zdCBvIG9mIGUuYXJn''@;'; put 'put ''cyl7bGV0IGE7Y29uc3QgbD1bXTtmb3IoY29uc3QgZyBvZiBvKXtjb25zdCBFPWNXZSh0aGlzLmV2YWx1YXRlQXN0KGcsdCkpLE89RS5oZWlnaHQoKTtpZih2b2lkIDA9PT1hKWE9TyxsLnB1c2goLi4uRS5kYXRhKTtlbHNle2lmKGEhPT1PKXJldHVybiBuZXcgUHQodG4uUkVGLGRyLlNpemVN''@;'; put 'put ''aXNtYXRjaCk7Zm9yKGxldCBaPTA7WjxPO1orKylsW1pdLnB1c2goLi4uRS5kYXRhW1pdKX19Y29uc3QgdT1sWzBdLmxlbmd0aDtpZih2b2lkIDA9PT1yKXI9dSxpLnB1c2goLi4ubCk7ZWxzZXtpZihyIT09dSlyZXR1cm4gbmV3IFB0KHRuLlJFRixkci5TaXplTWlzbWF0Y2gpO2kucHVzaCgu''@;'; put 'put ''Li5sKX19cmV0dXJuIGxhLm9ubHlWYWx1ZXMoaSl9Y2FzZSBybi5FUlJPUl9XSVRIX1JBV19JTlBVVDpjYXNlIHJuLkVSUk9SOnJldHVybiBlLmVycm9yfX1yYW5nZVNwYW5zT25lU2hlZXQoZSl7cmV0dXJuIGUuc3RhcnQuc2hlZXQ9PT1lLmVuZC5zaGVldH11bmFyeVJhbmdlV3JhcHBlcihl''@;'; put 'put ''LHQscil7dmFyIGk7aWYodCBpbnN0YW5jZW9mIGxhJiYhci5hcnJheXNGbGFnJiYodD1udWxsIT09KGk9UHEodCxyKSkmJnZvaWQgMCE9PWk/aTpuZXcgUHQodG4uVkFMVUUsZHIuU2NhbGFyRXhwZWN0ZWQpKSx0IGluc3RhbmNlb2YgUHQpcmV0dXJuIHQ7aWYodCBpbnN0YW5jZW9mIGxhKXtj''@;'; put 'put ''b25zdCBvPXQuZGF0YS5tYXAoYT0+YS5tYXAoZSkpO3JldHVybiBsYS5vbmx5VmFsdWVzKG8pfXJldHVybiBlKHQpfWJpbmFyeVJhbmdlV3JhcHBlcihlLHQscixpKXt2YXIgbyxhO2lmKHQgaW5zdGFuY2VvZiBsYSYmIWkuYXJyYXlzRmxhZyYmKHQ9bnVsbCE9PShvPVBxKHQsaSkpJiZ2b2lk''@;'; put 'put ''IDAhPT1vP286bmV3IFB0KHRuLlZBTFVFLGRyLlNjYWxhckV4cGVjdGVkKSksdCBpbnN0YW5jZW9mIFB0KXJldHVybiB0O2lmKHIgaW5zdGFuY2VvZiBsYSYmIWkuYXJyYXlzRmxhZyYmKHI9bnVsbCE9PShhPVBxKHIsaSkpJiZ2b2lkIDAhPT1hP2E6bmV3IFB0KHRuLlZBTFVFLGRyLlNjYWxh''@;'; put 'put ''ckV4cGVjdGVkKSksciBpbnN0YW5jZW9mIFB0KXJldHVybiByO2lmKHQgaW5zdGFuY2VvZiBsYXx8ciBpbnN0YW5jZW9mIGxhKXtpZighKHQgaW5zdGFuY2VvZiBsYSkpe2lmKHIuaXNBZEhvYygpKXtjb25zdCBFPXIuZGF0YTtmb3IobGV0IE89MDtPPEUubGVuZ3RoO08rKylmb3IobGV0IFo9''@;'; put 'put ''MDtaPEVbMF0ubGVuZ3RoO1orKylFW09dW1pdPWUodCxFW09dW1pdKTtyZXR1cm4gbGEub25seVZhbHVlcyhFKX10PWxhLmZyb21TY2FsYXIodCl9aWYoIShyIGluc3RhbmNlb2YgbGEpKXtpZih0LmlzQWRIb2MoKSl7Y29uc3QgRT10LmRhdGE7Zm9yKGxldCBPPTA7TzxFLmxlbmd0aDtPKysp''@;'; put 'put ''Zm9yKGxldCBaPTA7WjxFWzBdLmxlbmd0aDtaKyspRVtPXVtaXT1lKEVbT11bWl0scik7cmV0dXJuIGxhLm9ubHlWYWx1ZXMoRSl9cj1sYS5mcm9tU2NhbGFyKHIpfWlmKHQud2lkdGgoKT09PXIud2lkdGgoKSYmdC5oZWlnaHQoKT09PXIuaGVpZ2h0KCkpe2lmKHQuaXNBZEhvYygpKXtjb25z''@;'; put 'put ''dCBFPXQuZGF0YSxPPXIuZGF0YTtmb3IobGV0IFo9MDtaPEUubGVuZ3RoO1orKylmb3IobGV0IGVlPTA7ZWU8RVswXS5sZW5ndGg7ZWUrKylFW1pdW2VlXT1lKEVbWl1bZWVdLE9bWl1bZWVdKTtyZXR1cm4gbGEub25seVZhbHVlcyhFKX1pZihyLmlzQWRIb2MoKSl7Y29uc3QgRT10LmRhdGEs''@;'; put 'put ''Tz1yLmRhdGE7Zm9yKGxldCBaPTA7WjxFLmxlbmd0aDtaKyspZm9yKGxldCBlZT0wO2VlPEVbMF0ubGVuZ3RoO2VlKyspT1taXVtlZV09ZShFW1pdW2VlXSxPW1pdW2VlXSk7cmV0dXJuIGxhLm9ubHlWYWx1ZXMoTyl9fWNvbnN0IGw9TWF0aC5tYXgodC53aWR0aCgpLHIud2lkdGgoKSksdT1N''@;'; put 'put ''YXRoLm1heCh0LmhlaWdodCgpLHIuaGVpZ2h0KCkpLGc9QXJyYXkodSk7Zm9yKGxldCBFPTA7RTx1O0UrKylnW0VdPUFycmF5KGwpO2ZvcihsZXQgRT0wO0U8dTtFKyspe2NvbnN0IE89MSE9PXQuaGVpZ2h0KCk/RTowLFo9MSE9PXIuaGVpZ2h0KCk/RTowO2ZvcihsZXQgZWU9MDtlZTxsO2Vl''@;'; put 'put ''Kyspe2NvbnN0IHZlPTEhPT10LndpZHRoKCk/ZWU6MCxNZT0xIT09ci53aWR0aCgpP2VlOjA7Z1tFXVtlZV09Tzx0LmhlaWdodCgpJiZaPHIuaGVpZ2h0KCkmJnZlPHQud2lkdGgoKSYmTWU8ci53aWR0aCgpP2UodC5kYXRhW09dW3ZlXSxyLmRhdGFbWl1bTWVdKTpuZXcgUHQodG4uTkEpfX1y''@;'; put 'put ''ZXR1cm4gbGEub25seVZhbHVlcyhnKX1yZXR1cm4gZSh0LHIpfX1mdW5jdGlvbiBXV2UobixlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFB0P2U6bihlKX1mdW5jdGlvbiB4bShuLGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBQdD9lOnQgaW5zdGFuY2VvZiBQdD90Om4oZSx0KX1jbGFzcyBQdG57''@;'; put 'put ''Y29uc3RydWN0b3IoZSl7dGhpcy5zaGVldD1lLHRoaXMudHJhbnNmb3JtYXRpb25zPVtdfWFkZChlKXt0aGlzLnRyYW5zZm9ybWF0aW9ucy5wdXNoKGUpfXBlcmZvcm1FYWdlclRyYW5zZm9ybWF0aW9ucyhlLHQpe3RoaXMudHJhbnNmb3JtYXRpb25zLmZvckVhY2gocj0+ci5wZXJmb3JtRWFn''@;'; put 'put ''ZXJUcmFuc2Zvcm1hdGlvbnMoZSx0KSl9dHJhbnNmb3JtU2luZ2xlQXN0KGUsdCl7bGV0W3IsaV09W2UsdF07cmV0dXJuIHRoaXMudHJhbnNmb3JtYXRpb25zLmZvckVhY2gobz0+e1tyLGldPW8udHJhbnNmb3JtU2luZ2xlQXN0KHIsaSl9KSxbcixpXX1pc0lycmV2ZXJzaWJsZSgpe3JldHVy''@;'; put 'put ''biEwfX1jbGFzcyBIdG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdGF0cz1lLHRoaXMudHJhbnNmb3JtYXRpb25zPVtdfXZlcnNpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm1hdGlvbnMubGVuZ3RofWFkZFRyYW5zZm9ybWF0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10aGlzLmNvbWJpbmVkVHJh''@;'; put 'put ''bnNmb3JtZXI/dGhpcy5jb21iaW5lZFRyYW5zZm9ybWVyLmFkZChlKTp0aGlzLnRyYW5zZm9ybWF0aW9ucy5wdXNoKGUpLHRoaXMudmVyc2lvbigpfWJlZ2luQ29tYmluZWRNb2RlKGUpe3RoaXMuY29tYmluZWRUcmFuc2Zvcm1lcj1uZXcgUHRuKGUpfWNvbW1pdENvbWJpbmVkTW9kZSgpe2lm''@;'; put 'put ''KHZvaWQgMD09PXRoaXMuY29tYmluZWRUcmFuc2Zvcm1lcil0aHJvdyBFcnJvcigiQ29tYmluZWQgbW9kZSB3YXNuJ3Qgc3RhcnRlZCIpO3JldHVybiB0aGlzLnRyYW5zZm9ybWF0aW9ucy5wdXNoKHRoaXMuY29tYmluZWRUcmFuc2Zvcm1lciksdGhpcy5jb21iaW5lZFRyYW5zZm9ybWVyPXZv''@;'; put 'put ''aWQgMCx0aGlzLnZlcnNpb24oKX1hcHBseVRyYW5zZm9ybWF0aW9ucyhlLHQscil7dGhpcy5zdGF0cy5zdGFydChBcy5UUkFOU0ZPUk1fQVNUU19QT1NUUE9ORUQpO2ZvcihsZXQgbz1yO288dGhpcy50cmFuc2Zvcm1hdGlvbnMubGVuZ3RoO28rKyl7Y29uc3QgYT10aGlzLnRyYW5zZm9ybWF0''@;'; put 'put ''aW9uc1tvXTthLmlzSXJyZXZlcnNpYmxlKCkmJih0aGlzLnVuZG9SZWRvLnN0b3JlRGF0YUZvclZlcnNpb24obyx0LHRoaXMucGFyc2VyLmNvbXB1dGVIYXNoRnJvbUFzdChlKSksdGhpcy5wYXJzZXIucmVtZW1iZXJOZXdBc3QoZSkpO2NvbnN0W2wsdV09YS50cmFuc2Zvcm1TaW5nbGVBc3Qo''@;'; put 'put ''ZSx0KTtlPWwsdD11fWNvbnN0IGk9dGhpcy5wYXJzZXIucmVtZW1iZXJOZXdBc3QoZSk7cmV0dXJuIHRoaXMuc3RhdHMuZW5kKEFzLlRSQU5TRk9STV9BU1RTX1BPU1RQT05FRCksW2ksdCx0aGlzLnRyYW5zZm9ybWF0aW9ucy5sZW5ndGhdfSpnZXRUcmFuc2Zvcm1hdGlvbnNGcm9tKGUsdCl7''@;'; put 'put ''Zm9yKGxldCByPWU7cjx0aGlzLnRyYW5zZm9ybWF0aW9ucy5sZW5ndGg7cisrKXtjb25zdCBpPXRoaXMudHJhbnNmb3JtYXRpb25zW3JdOyghdHx8dChpKSkmJih5aWVsZCBpKX19fWZ1bmN0aW9uIEpxKG4sZSl7cmV0dXJuIHR5cGVvZiBuPT10eXBlb2YgZT9uPT09bGw/MDpuPGU/LTE6bj5l''@;'; put 'put ''PzE6MDpuPT09bGw/LTE6ZT09PWxsPzE6ZSBpbnN0YW5jZW9mIFB0fHwibnVtYmVyIj09dHlwZW9mIG4mJiJzdHJpbmciPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBuJiYiYm9vbGVhbiI9PXR5cGVvZiBlPy0xOiJzdHJpbmciPT10eXBlb2YgbiYmIm51bWJlciI9PXR5cGVvZiBlPzE6''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBuJiYiYm9vbGVhbiI9PXR5cGVvZiBlPy0xOjF9Y2xhc3MgWldle2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVwZW5kZW5jeUdyYXBoPWV9YWR2YW5jZWRGaW5kKGUsdCl7bGV0IHI7Y29uc3QgaT10LnJhbmdlO3I9dm9pZCAwPT09aT90LnZhbHVlc0Zyb21Ub3BMZWZ0''@;'; put 'put ''Q29ybmVyKCk6dGhpcy5kZXBlbmRlbmN5R3JhcGguY29tcHV0ZUxpc3RPZlZhbHVlc0luUmFuZ2UoaSk7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspaWYoZShMbyhyW29dKSkpcmV0dXJuIG87cmV0dXJuLTF9YmFzaWNGaW5kKGUsdCxyLHtvcmRlcmluZzppLG1hdGNoRXhhY3RseTpvfSl7''@;'; put 'put ''Y29uc3QgYT0ic3RyaW5nIj09dHlwZW9mIGU/ZlAoZSk6ZSxsPXQucmFuZ2U7cmV0dXJuIHZvaWQgMD09PWw/dGhpcy5maW5kTm9ybWFsaXplZFZhbHVlKGEsdC52YWx1ZXNGcm9tVG9wTGVmdENvcm5lcigpKToibm9uZSI9PT1pP3RoaXMuZmluZE5vcm1hbGl6ZWRWYWx1ZShhLHRoaXMuZGVw''@;'; put 'put ''ZW5kZW5jeUdyYXBoLmNvbXB1dGVMaXN0T2ZWYWx1ZXNJblJhbmdlKGwpKTpmdW5jdGlvbiBWdG4obixlLHtzZWFyY2hDb29yZGluYXRlOnQsb3JkZXJpbmdEaXJlY3Rpb246cixtYXRjaEV4YWN0bHk6aX0sbyl7Y29uc3QgYT1lLnN0YXJ0W3RdLGw9ImNvbCI9PT10P2UuZWZmZWN0aXZlRW5k''@;'; put 'put ''Q29sdW1uKG8pOmUuZWZmZWN0aXZlRW5kUm93KG8pLHU9ImNvbCI9PT10P1o9PkxvKG8uZ2V0Q2VsbFZhbHVlKEJvKGUuc2hlZXQsWixlLnN0YXJ0LnJvdykpKTpaPT5MbyhvLmdldENlbGxWYWx1ZShCbyhlLnNoZWV0LGUuc3RhcnQuY29sLFopKSksZz0iYXNjIj09PXI/KFosZWUpPT5KcSha''@;'; put 'put ''LGVlKTooWixlZSk9Pi1KcShaLGVlKSxFPWZ1bmN0aW9uIFlXZShuLGUsdCl7bGV0IHI9ZSxpPXQ7Zm9yKDtyPGk7KXtjb25zdCBvPU1hdGguY2VpbCgocitpKS8yKTtuKG8pP3I9bzppPW8tMX1yZXR1cm4gcj09PWkmJm4ocik/cjotMX0oWj0+ZyhuLHUoWikpPj0wLGEsbCksTz11KEUpO3Jl''@;'; put 'put ''dHVybi0xPT09RXx8dHlwZW9mIE8hPXR5cGVvZiBufHxpJiZPIT09bj8tMTpFLWF9KGEsbCx7c2VhcmNoQ29vcmRpbmF0ZTpyLG9yZGVyaW5nRGlyZWN0aW9uOmksbWF0Y2hFeGFjdGx5Om99LHRoaXMuZGVwZW5kZW5jeUdyYXBoKX1maW5kTm9ybWFsaXplZFZhbHVlKGUsdCl7cmV0dXJuIHQu''@;'; put 'put ''bWFwKExvKS5tYXAocj0+InN0cmluZyI9PXR5cGVvZiByP2ZQKHIpOnIpLmluZGV4T2YoZSl9fWNsYXNzIEdXZSBleHRlbmRzIFpXZXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLmRlcGVuZGVuY3lHcmFwaD1lfWFkZChlLHQpe31yZW1vdmUoZSx0KXt9Y2hhbmdlKGUsdCxyKXt9YXBw''@;'; put 'put ''bHlDaGFuZ2VzKGUpe31hZGRDb2x1bW5zKGUpe31yZW1vdmVDb2x1bW5zKGUpe31yZW1vdmVTaGVldChlKXt9bW92ZVZhbHVlcyhlLHQscixpKXt9cmVtb3ZlVmFsdWVzKGUpe31maW5kKGUsdCxyKXtyZXR1cm4gdGhpcy5iYXNpY0ZpbmQoZSx0LCJyb3ciLHIpfX1jbGFzcyBGQ3tjb25zdHJ1''@;'; put 'put ''Y3RvcihlLHQscil7dGhpcy5kZXBlbmRlbmN5R3JhcGg9ZSx0aGlzLmNvbmZpZz10LHRoaXMuc3RhdHM9cix0aGlzLmluZGV4PW5ldyBNYXAsdGhpcy50cmFuc2Zvcm1pbmdTZXJ2aWNlPXRoaXMuZGVwZW5kZW5jeUdyYXBoLmxhemlseVRyYW5zZm9ybWluZ0FzdFNlcnZpY2UsdGhpcy5iaW5h''@;'; put 'put ''cnlTZWFyY2hTdHJhdGVneT1uZXcgR1dlKGUpfWFkZChlLHQpe2lmKCEoZT09PWxsfHxlIGluc3RhbmNlb2YgUHQpKWlmKGUgaW5zdGFuY2VvZiBsYSlmb3IoY29uc3RbcixpXW9mIGUuZW50cmllc0Zyb21Ub3BMZWZ0Q29ybmVyKHQpKXRoaXMuYWRkU2luZ2xlQ2VsbFZhbHVlKExvKHIpLGkp''@;'; put 'put ''O2Vsc2UgdGhpcy5hZGRTaW5nbGVDZWxsVmFsdWUoZSx0KX1yZW1vdmUoZSx0KXtpZih2b2lkIDAhPT1lKWlmKGUgaW5zdGFuY2VvZiBsYSlmb3IoY29uc3RbcixpXW9mIGUuZW50cmllc0Zyb21Ub3BMZWZ0Q29ybmVyKHQpKXRoaXMucmVtb3ZlU2luZ2xlVmFsdWUoTG8ociksaSk7ZWxzZSB0''@;'; put 'put ''aGlzLnJlbW92ZVNpbmdsZVZhbHVlKGUsdCl9Y2hhbmdlKGUsdCxyKXtlIT09dCYmKHRoaXMucmVtb3ZlKGUsciksdGhpcy5hZGQodCxyKSl9YXBwbHlDaGFuZ2VzKGUpe2Zvcihjb25zdCB0IG9mIGUpdm9pZCAwIT09dC5vbGRWYWx1ZSYmdGhpcy5jaGFuZ2UoTG8odC5vbGRWYWx1ZSksTG8o''@;'; put 'put ''dC52YWx1ZSksdC5hZGRyZXNzKX1tb3ZlVmFsdWVzKGUsdCxyLGkpe2Zvcihjb25zdFtvLGFdb2YgZSl7Y29uc3QgbD1KSnQoYSxpLHQscik7dGhpcy5yZW1vdmUobyxhKSx0aGlzLmFkZChvLGwpfX1yZW1vdmVWYWx1ZXMoZSl7Zm9yKGNvbnN0W3Qscl1vZiBlKXRoaXMucmVtb3ZlKHQscil9''@;'; put 'put ''ZmluZChlLHQse29yZGVyaW5nOnIsbWF0Y2hFeGFjdGx5Oml9KXtjb25zdCBhPXRoaXMuZmluZFVzaW5nQ29sdW1uSW5kZXgoZSx0LCEwPT09aT8iZmluZEZpcnN0IjoiZmluZExhc3QiKTtyZXR1cm4gdm9pZCAwIT09YT9hOnRoaXMuYmluYXJ5U2VhcmNoU3RyYXRlZ3kuZmluZChlLHQse29y''@;'; put 'put ''ZGVyaW5nOnIsbWF0Y2hFeGFjdGx5Oml9KX1maW5kVXNpbmdDb2x1bW5JbmRleChlLHQscil7Y29uc3QgaT10LnJhbmdlO2lmKHZvaWQgMD09PWkpcmV0dXJuO3RoaXMuZW5zdXJlUmVjZW50RGF0YShpLnNoZWV0LGkuc3RhcnQuY29sLGUpO2NvbnN0IG89dGhpcy5nZXRDb2x1bW5NYXAoaS5z''@;'; put 'put ''aGVldCxpLnN0YXJ0LmNvbCk7aWYoIW8pcmV0dXJuLTE7Y29uc3QgYT0ic3RyaW5nIj09dHlwZW9mIGU/ZlAoZSk6ZSxsPW8uZ2V0KGEpO2lmKCFsfHwhbC5pbmRleHx8MD09PWwuaW5kZXgubGVuZ3RoKXJldHVybjtjb25zdCB1PUZDLmZpbmRSb3dCZWxvbmdpbmdUb1JhbmdlKGwsaSxyKTty''@;'; put 'put ''ZXR1cm4gdm9pZCAwIT09dT91LWkuc3RhcnQucm93OnZvaWQgMH1zdGF0aWMgZmluZFJvd0JlbG9uZ2luZ1RvUmFuZ2UoZSx0LHIpe2NvbnN0IGk9dC5zdGFydC5yb3csbz10LmVuZC5yb3csYT0iZmluZEZpcnN0Ij09PXI/UEMoaSxlLmluZGV4LCJ1cHBlckJvdW5kIik6UEMobyxlLmluZGV4''@;'; put 'put ''LCJsb3dlckJvdW5kIik7aWYoLTE9PT1hKXJldHVybjtjb25zdCBsPWUuaW5kZXhbYV07cmV0dXJuIGw+PWkmJmw8PW8/bDp2b2lkIDB9YWR2YW5jZWRGaW5kKGUsdCl7cmV0dXJuIHRoaXMuYmluYXJ5U2VhcmNoU3RyYXRlZ3kuYWR2YW5jZWRGaW5kKGUsdCl9YWRkQ29sdW1ucyhlKXtjb25z''@;'; put 'put ''dCB0PXRoaXMuaW5kZXguZ2V0KGUuc2hlZXQpO3QmJnQuc3BsaWNlKGUuY29sdW1uU3RhcnQsMCwuLi5BcnJheShlLm51bWJlck9mQ29sdW1ucykpfXJlbW92ZUNvbHVtbnMoZSl7Y29uc3QgdD10aGlzLmluZGV4LmdldChlLnNoZWV0KTt0JiZ0LnNwbGljZShlLmNvbHVtblN0YXJ0LGUubnVt''@;'; put 'put ''YmVyT2ZDb2x1bW5zKX1yZW1vdmVTaGVldChlKXt0aGlzLmluZGV4LmRlbGV0ZShlKX1nZXRDb2x1bW5NYXAoZSx0KXt0aGlzLmluZGV4LmhhcyhlKXx8dGhpcy5pbmRleC5zZXQoZSxbXSk7Y29uc3Qgcj10aGlzLmluZGV4LmdldChlKTtsZXQgaT1yW3RdO3JldHVybiBpfHwoaT1uZXcgTWFw''@;'; put 'put ''LHJbdF09aSksaX1nZXRWYWx1ZUluZGV4KGUsdCxyKXtjb25zdCBpPXRoaXMuZ2V0Q29sdW1uTWFwKGUsdCk7bGV0IG89dGhpcy5nZXRDb2x1bW5NYXAoZSx0KS5nZXQocik7cmV0dXJuIG98fChvPXt2ZXJzaW9uOnRoaXMudHJhbnNmb3JtaW5nU2VydmljZS52ZXJzaW9uKCksaW5kZXg6W119''@;'; put 'put ''LGkuc2V0KHIsbykpLG99ZW5zdXJlUmVjZW50RGF0YShlLHQscil7Y29uc3QgaT10aGlzLmdldFZhbHVlSW5kZXgoZSx0LHIpLG89dGhpcy50cmFuc2Zvcm1pbmdTZXJ2aWNlLnZlcnNpb24oKTtpZihpLnZlcnNpb249PT1vKXJldHVybjtjb25zdCBhPXRoaXMudHJhbnNmb3JtaW5nU2Vydmlj''@;'; put 'put ''ZS5nZXRUcmFuc2Zvcm1hdGlvbnNGcm9tKGkudmVyc2lvbixsPT5sLnNoZWV0PT09ZSYmKGwgaW5zdGFuY2VvZiBobWV8fGwgaW5zdGFuY2VvZiBmbWUpKTtmb3IoY29uc3QgbCBvZiBhKWwgaW5zdGFuY2VvZiBobWU/dGhpcy5hZGRSb3dzKHQsbC5yb3dzU3BhbixyKTpsIGluc3RhbmNlb2Yg''@;'; put 'put ''Zm1lJiZ0aGlzLnJlbW92ZVJvd3ModCxsLnJvd3NTcGFuLHIpO2kudmVyc2lvbj1vfWFkZFNpbmdsZUNlbGxWYWx1ZShlLHQpe3RoaXMuc3RhdHMubWVhc3VyZShBcy5CVUlMRF9DT0xVTU5fSU5ERVgsKCk9Pnt0aGlzLmVuc3VyZVJlY2VudERhdGEodC5zaGVldCx0LmNvbCxlKSwic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIGUmJihlPWZQKGUpKTtjb25zdCByPXRoaXMuZ2V0VmFsdWVJbmRleCh0LnNoZWV0LHQuY29sLGUpO0ZDLmFkZFZhbHVlKHIsdC5yb3cpfSl9cmVtb3ZlU2luZ2xlVmFsdWUoZSx0KXt0aGlzLnN0YXRzLm1lYXN1cmUoQXMuQlVJTERfQ09MVU1OX0lOREVYLCgpPT57dGhpcy5l''@;'; put 'put ''bnN1cmVSZWNlbnREYXRhKHQuc2hlZXQsdC5jb2wsZSk7Y29uc3Qgcj10aGlzLmdldENvbHVtbk1hcCh0LnNoZWV0LHQuY29sKTsic3RyaW5nIj09dHlwZW9mIGUmJihlPWZQKGUpKTtjb25zdCBpPXIuZ2V0KGUpO2lmKCFpKXJldHVybjtjb25zdCBvPVBDKHQucm93LGkuaW5kZXgpO28+LTEm''@;'; put 'put ''JmkuaW5kZXguc3BsaWNlKG8sMSksMD09PWkuaW5kZXgubGVuZ3RoJiZyLmRlbGV0ZShlKSwwPT09ci5zaXplJiZkZWxldGUgdGhpcy5pbmRleC5nZXQodC5zaGVldClbdC5jb2xdfSl9YWRkUm93cyhlLHQscil7Y29uc3QgaT10aGlzLmdldFZhbHVlSW5kZXgodC5zaGVldCxlLHIpO0ZDLnNo''@;'; put 'put ''aWZ0Um93cyhpLHQucm93U3RhcnQsdC5udW1iZXJPZlJvd3MpfXJlbW92ZVJvd3MoZSx0LHIpe2NvbnN0IGk9dGhpcy5nZXRWYWx1ZUluZGV4KHQuc2hlZXQsZSxyKTtGQy5yZW1vdmVSb3dzRnJvbVZhbHVlcyhpLHQpLEZDLnNoaWZ0Um93cyhpLHQucm93RW5kKzEsLXQubnVtYmVyT2ZSb3dz''@;'; put 'put ''KX1zdGF0aWMgYWRkVmFsdWUoZSx0KXtjb25zdCByPVBDKHQsZS5pbmRleCwibG93ZXJCb3VuZCIpO2UuaW5kZXhbcl09PT10fHxlLmluZGV4LnNwbGljZShyKzEsMCx0KX1zdGF0aWMgcmVtb3ZlUm93c0Zyb21WYWx1ZXMoZSx0KXtjb25zdCByPVBDKHQucm93U3RhcnQsZS5pbmRleCwidXBw''@;'; put 'put ''ZXJCb3VuZCIpLGk9UEModC5yb3dFbmQsZS5pbmRleCwibG93ZXJCb3VuZCIpO3I+LTEmJmk+LTEmJnI8PWkmJmUuaW5kZXhbcl08PXQucm93RW5kJiZlLmluZGV4LnNwbGljZShyLGktcisxKX1zdGF0aWMgc2hpZnRSb3dzKGUsdCxyKXtjb25zdCBpPVBDKHQsZS5pbmRleCwidXBwZXJCb3Vu''@;'; put 'put ''ZCIpO2lmKC0xIT09aSlmb3IobGV0IG89aTtvPGUuaW5kZXgubGVuZ3RoOysrbyllLmluZGV4W29dKz1yfX1mdW5jdGlvbiBQQyhuLGUsdD0idXBwZXJCb3VuZCIpe2xldCByPTAsaT1lLmxlbmd0aC0xO2Zvcig7cjw9aTspe2NvbnN0IGw9TWF0aC5mbG9vcigocitpKS8yKTtpZihuPmVbbF0p''@;'; put 'put ''cj1sKzE7ZWxzZXtpZighKG48ZVtsXSkpcmV0dXJuIGw7aT1sLTF9fWNvbnN0IG89Imxvd2VyQm91bmQiPT09dD9pOnI7cmV0dXJuIG8+PTAmJm88PWUubGVuZ3RoP286LTF9Y2xhc3MganRue2NvbnN0cnVjdG9yKGUpe3RoaXMuY29uZmlnPWU7Y29uc3QgdD0iLiI9PT10aGlzLmNvbmZpZy50''@;'; put 'put ''aG91c2FuZFNlcGFyYXRvcj9gXFwke3RoaXMuY29uZmlnLnRob3VzYW5kU2VwYXJhdG9yfWA6dGhpcy5jb25maWcudGhvdXNhbmRTZXBhcmF0b3Iscj0iLiI9PT10aGlzLmNvbmZpZy5kZWNpbWFsU2VwYXJhdG9yP2BcXCR7dGhpcy5jb25maWcuZGVjaW1hbFNlcGFyYXRvcn1gOnRoaXMuY29u''@;'; put 'put ''ZmlnLmRlY2ltYWxTZXBhcmF0b3I7dGhpcy5udW1iZXJQYXR0ZXJuPW5ldyBSZWdFeHAoYF4oWystXT8oKCR7cn1cXGQrKXwoXFxkKygke3R9XFxkezMsfSkqKCR7cn1cXGQqKT8pKSkoZVsrLV0/XFxkKyk/JGApLHRoaXMuYWxsVGhvdXNhbmRTZXBhcmF0b3JzUmVnZXg9bmV3IFJlZ0V4cChg''@;'; put 'put ''JHt0fWAsImciKX1udW1lcmljU3RyaW5nVG9NYXliZU51bWJlcihlKXtpZih0aGlzLm51bWJlclBhdHRlcm4udGVzdChlKSl7Y29uc3QgdD10aGlzLm51bWVyaWNTdHJpbmdUb051bWJlcihlKTtyZXR1cm4gaXNOYU4odCk/dm9pZCAwOnR9fW51bWVyaWNTdHJpbmdUb051bWJlcihlKXtjb25z''@;'; put 'put ''dCB0PWUucmVwbGFjZSh0aGlzLmFsbFRob3VzYW5kU2VwYXJhdG9yc1JlZ2V4LCIiKS5yZXBsYWNlKHRoaXMuY29uZmlnLmRlY2ltYWxTZXBhcmF0b3IsIi4iKTtyZXR1cm4gTnVtYmVyKHQpfX1jbGFzcyBnbWV7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMuZGVwZW5kZW5jeUdyYXBoPWUsdGhp''@;'; put 'put ''cy51bnBhcnNlcj10LHRoaXMuZXhwb3J0ZXI9cn1nZXRDZWxsSHlwZXJsaW5rKGUpe2NvbnN0IHQ9dGhpcy5kZXBlbmRlbmN5R3JhcGguZ2V0Q2VsbChlKTtpZih0IGluc3RhbmNlb2YgajYpe2NvbnN0IHI9dC5nZXRGb3JtdWxhKHRoaXMuZGVwZW5kZW5jeUdyYXBoLmxhemlseVRyYW5zZm9y''@;'; put 'put ''bWluZ0FzdFNlcnZpY2UpO2lmKCJIWVBFUkxJTksiPT09ci5wcm9jZWR1cmVOYW1lKXJldHVybiByLmh5cGVybGlua319Z2V0Q2VsbEZvcm11bGEoZSx0KXtjb25zdCByPXRoaXMuZGVwZW5kZW5jeUdyYXBoLmdldENlbGwoZSk7aWYociBpbnN0YW5jZW9mIGo2KXtjb25zdCBpPXIuZ2V0Rm9y''@;'; put 'put ''bXVsYSh0aGlzLmRlcGVuZGVuY3lHcmFwaC5sYXppbHlUcmFuc2Zvcm1pbmdBc3RTZXJ2aWNlKTtyZXR1cm4gdGhpcy51bnBhcnNlci51bnBhcnNlKGksdD10Pz9lKX1pZihyIGluc3RhbmNlb2YgJGgpe2NvbnN0IGk9ci5nZXRBZGRyZXNzKHRoaXMuZGVwZW5kZW5jeUdyYXBoLmxhemlseVRy''@;'; put 'put ''YW5zZm9ybWluZ0FzdFNlcnZpY2UpO2lmKGkucm93IT09ZS5yb3d8fGkuY29sIT09ZS5jb2x8fGkuc2hlZXQhPT1lLnNoZWV0KXJldHVybjt0PXQ/P2U7Y29uc3Qgbz1yLmdldEZvcm11bGEodGhpcy5kZXBlbmRlbmN5R3JhcGgubGF6aWx5VHJhbnNmb3JtaW5nQXN0U2VydmljZSk7aWYodm9p''@;'; put 'put ''ZCAwIT09bylyZXR1cm4gdGhpcy51bnBhcnNlci51bnBhcnNlKG8sdCl9ZWxzZSBpZihyIGluc3RhbmNlb2YgaUEpcmV0dXJuIHIuZ2V0Rm9ybXVsYSgpfWdldENlbGxTZXJpYWxpemVkKGUsdCl7dmFyIHI7cmV0dXJuIG51bGwhPT0ocj10aGlzLmdldENlbGxGb3JtdWxhKGUsdCkpJiZ2b2lk''@;'; put 'put ''IDAhPT1yP3I6dGhpcy5nZXRSYXdWYWx1ZShlKX1nZXRDZWxsVmFsdWUoZSl7cmV0dXJuIHRoaXMuZXhwb3J0ZXIuZXhwb3J0VmFsdWUodGhpcy5kZXBlbmRlbmN5R3JhcGguZ2V0U2NhbGFyVmFsdWUoZSkpfWdldFJhd1ZhbHVlKGUpe3JldHVybiB0aGlzLmRlcGVuZGVuY3lHcmFwaC5nZXRS''@;'; put 'put ''YXdWYWx1ZShlKX1nZXRTaGVldFZhbHVlcyhlKXtyZXR1cm4gdGhpcy5nZW5lcmljU2hlZXRHZXR0ZXIoZSx0PT50aGlzLmdldENlbGxWYWx1ZSh0KSl9Z2V0U2hlZXRGb3JtdWxhcyhlKXtyZXR1cm4gdGhpcy5nZW5lcmljU2hlZXRHZXR0ZXIoZSx0PT50aGlzLmdldENlbGxGb3JtdWxhKHQp''@;'; put 'put ''KX1nZW5lcmljU2hlZXRHZXR0ZXIoZSx0KXtjb25zdCByPXRoaXMuZGVwZW5kZW5jeUdyYXBoLmdldFNoZWV0SGVpZ2h0KGUpLGk9dGhpcy5kZXBlbmRlbmN5R3JhcGguZ2V0U2hlZXRXaWR0aChlKSxvPW5ldyBBcnJheShyKTtmb3IobGV0IGE9MDthPHI7YSsrKXtvW2FdPW5ldyBBcnJheShp''@;'; put 'put ''KTtmb3IobGV0IGw9MDtsPGk7bCsrKXtjb25zdCB1PUJvKGUsbCxhKTtvW2FdW2xdPXQodSl9Zm9yKGxldCBsPWktMTtsPj0wJiZudWxsPT1vW2FdW2xdO2wtLSlvW2FdLnBvcCgpfWZvcihsZXQgYT1yLTE7YT49MCYmMD09PW9bYV0ubGVuZ3RoO2EtLSlvLnBvcCgpO3JldHVybiBvfWdlbmVy''@;'; put 'put ''aWNBbGxTaGVldHNHZXR0ZXIoZSl7Y29uc3QgdD17fTtmb3IoY29uc3QgciBvZiB0aGlzLmRlcGVuZGVuY3lHcmFwaC5zaGVldE1hcHBpbmcuZGlzcGxheU5hbWVzKCkpe2NvbnN0IGk9dGhpcy5kZXBlbmRlbmN5R3JhcGguc2hlZXRNYXBwaW5nLmZldGNoKHIpO3Rbcl09ZShpKX1yZXR1cm4g''@;'; put 'put ''dH1nZXRTaGVldFNlcmlhbGl6ZWQoZSl7cmV0dXJuIHRoaXMuZ2VuZXJpY1NoZWV0R2V0dGVyKGUsdD0+dGhpcy5nZXRDZWxsU2VyaWFsaXplZCh0KSl9Z2V0QWxsU2hlZXRzVmFsdWVzKCl7cmV0dXJuIHRoaXMuZ2VuZXJpY0FsbFNoZWV0c0dldHRlcihlPT50aGlzLmdldFNoZWV0VmFsdWVz''@;'; put 'put ''KGUpKX1nZXRBbGxTaGVldHNGb3JtdWxhcygpe3JldHVybiB0aGlzLmdlbmVyaWNBbGxTaGVldHNHZXR0ZXIoZT0+dGhpcy5nZXRTaGVldEZvcm11bGFzKGUpKX1nZXRBbGxTaGVldHNTZXJpYWxpemVkKCl7cmV0dXJuIHRoaXMuZ2VuZXJpY0FsbFNoZWV0c0dldHRlcihlPT50aGlzLmdldFNo''@;'; put 'put ''ZWV0U2VyaWFsaXplZChlKSl9Z2V0QWxsTmFtZWRFeHByZXNzaW9uc1NlcmlhbGl6ZWQoKXtjb25zdCBlPVtdO2xldCB0PTA7Zm9yKGNvbnN0IHIgb2YgdGhpcy5kZXBlbmRlbmN5R3JhcGguc2hlZXRNYXBwaW5nLmRpc3BsYXlOYW1lcygpKXtjb25zdCBpPXRoaXMuZGVwZW5kZW5jeUdyYXBo''@;'; put 'put ''LnNoZWV0TWFwcGluZy5mZXRjaChyKTtlW2ldPXQsdCsrfXJldHVybiB0aGlzLmRlcGVuZGVuY3lHcmFwaC5uYW1lZEV4cHJlc3Npb25zLmdldEFsbE5hbWVkRXhwcmVzc2lvbnMoKS5tYXAocj0+KHtuYW1lOnIuZXhwcmVzc2lvbi5kaXNwbGF5TmFtZSxleHByZXNzaW9uOnRoaXMuZ2V0Q2Vs''@;'; put 'put ''bFNlcmlhbGl6ZWQoci5leHByZXNzaW9uLmFkZHJlc3MpLHNjb3BlOnZvaWQgMCE9PXIuc2NvcGU/ZVtyLnNjb3BlXTp2b2lkIDAsb3B0aW9uczpyLmV4cHJlc3Npb24ub3B0aW9uc30pKX13aXRoTmV3Q29uZmlnKGUsdCl7Y29uc3Qgcj1uZXcgUXplKGUsemdlKGUpLHRoaXMuZGVwZW5kZW5j''@;'; put 'put ''eUdyYXBoLnNoZWV0TWFwcGluZy5mZXRjaERpc3BsYXlOYW1lLHQpO3JldHVybiBuZXcgZ21lKHRoaXMuZGVwZW5kZW5jeUdyYXBoLHIsdGhpcy5leHBvcnRlcil9fWNsYXNzIGVLe3N0YXRpYyBidWlsZEZyb21TaGVldHMoZSx0PXt9LHI9W10pe2NvbnN0IGk9bmV3IGgyKHQpO3JldHVybiB0''@;'; put 'put ''aGlzLmJ1aWxkRW5naW5lKGksZSxyKX1zdGF0aWMgYnVpbGRGcm9tU2hlZXQoZSx0PXt9LHI9W10pe2NvbnN0IGk9bmV3IGgyKHQpLG89aS50cmFuc2xhdGlvblBhY2thZ2UuZ2V0VUlUcmFuc2xhdGlvbihOcS5ORVdfU0hFRVRfUFJFRklYKSsiMSI7cmV0dXJuIHRoaXMuYnVpbGRFbmdpbmUo''@;'; put 'put ''aSx7W29dOmV9LHIpfXN0YXRpYyBidWlsZEVtcHR5KGU9e30sdD1bXSl7cmV0dXJuIHRoaXMuYnVpbGRFbmdpbmUobmV3IGgyKGUpLHt9LHQpfXN0YXRpYyByZWJ1aWxkV2l0aENvbmZpZyhlLHQscixpKXtyZXR1cm4gdGhpcy5idWlsZEVuZ2luZShlLHQscixpKX1zdGF0aWMgYnVpbGRFbmdp''@;'; put 'put ''bmUoZSx0PXt9LHI9W10saT0oZS51c2VTdGF0cz9uZXcgdFdlOm5ldyBnSnQpKXtpLnN0YXJ0KEFzLkJVSUxEX0VOR0lORV9UT1RBTCk7Y29uc3Qgbz1uZXcgWXEsYT1uZXcgcjAoZSksbD1uZXcgSHRuKGkpLHU9UWdlLmJ1aWxkRW1wdHkobCxlLGEsbyxpKSxnPWZ1bmN0aW9uIEJ0bihuLGUs''@;'; put 'put ''dCl7cmV0dXJuIGUudXNlQ29sdW1uSW5kZXg/bmV3IEZDKG4sZSx0KTpuZXcgR1dlKG4pfSh1LGUsaSksRT11LnNoZWV0TWFwcGluZyxPPXUuYWRkcmVzc01hcHBpbmc7Zm9yKGNvbnN0ICRuIGluIHQpaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsJG4pKXtjb25z''@;'; put 'put ''dCBUcj10WyRuXTtIV2UoVHIpO2NvbnN0IHJpPVpxKFRyKTtpZihyaS5oZWlnaHQ+ZS5tYXhSb3dzfHxyaS53aWR0aD5lLm1heENvbHVtbnMpdGhyb3cgbmV3IHRBO2NvbnN0IGZuPUUuYWRkU2hlZXQoJG4pO08uYXV0b0FkZFNoZWV0KGZuLHJpKX1jb25zdCBaPW5ldyByUChlLGEsRS5nZXQp''@;'; put 'put ''O2wucGFyc2VyPVo7Y29uc3QgZWU9bmV3IFF6ZShlLHpnZShlKSxFLmZldGNoRGlzcGxheU5hbWUsbyksdmU9bmV3IEVlbihlKSxNZT1uZXcganRuKGUpLEhlPW5ldyBhZW4oZSx2ZSxNZSksV2U9bmV3IFllbihlLHZlLE1lKSxhdD1uZXcgZmVuKGUsYSksQ3Q9bmV3IGV0bihlLHUsZyxXZSxa''@;'; put 'put ''LGksbCxvLGF0KSxBdD1uZXcgQ3RuKGUsQ3QpO2wudW5kb1JlZG89QXQ7Y29uc3QgS3Q9bmV3IFplbihlLHUsQ3QpLHF0PW5ldyBTdG4oZSxDdCxBdCxLdCx1LGcsWixXZSxsLG8pO3IuZm9yRWFjaCgkbj0+e3F0LmVuc3VyZUl0SXNQb3NzaWJsZVRvQWRkTmFtZWRFeHByZXNzaW9uKCRuLm5h''@;'; put 'put ''bWUsJG4uZXhwcmVzc2lvbiwkbi5zY29wZSkscXQub3BlcmF0aW9ucy5hZGROYW1lZEV4cHJlc3Npb24oJG4ubmFtZSwkbi5leHByZXNzaW9uLCRuLnNjb3BlLCRuLm9wdGlvbnMpfSk7Y29uc3QgZ249bmV3IHh0bihlLG8sRS5mZXRjaERpc3BsYXlOYW1lLGwpLFRuPW5ldyBnbWUodSxlZSxn''@;'; put 'put ''biksQ249bmV3IE50bihlLHUsZyxpLEhlLGEsbyxUbixhdCx2ZSk7aS5tZWFzdXJlKEFzLkdSQVBIX0JVSUxELCgpPT57bmV3IEF0bih1LGcsWixXZSxpLGF0KS5idWlsZEdyYXBoKHQsaSl9KTtjb25zdCBxcj1uZXcgRXRuKGUsaSxDbixsLHUsZyk7cmV0dXJuIHFyLnJ1bigpLGkuZW5kKEFz''@;'; put 'put ''LkJVSUxEX0VOR0lORV9UT1RBTCkse2NvbmZpZzplLHN0YXRzOmksZGVwZW5kZW5jeUdyYXBoOnUsY29sdW1uU2VhcmNoOmcscGFyc2VyOlosdW5wYXJzZXI6ZWUsY2VsbENvbnRlbnRQYXJzZXI6V2UsZXZhbHVhdG9yOnFyLGxhemlseVRyYW5zZm9ybWluZ0FzdFNlcnZpY2U6bCxjcnVkT3Bl''@;'; put 'put ''cmF0aW9uczpxdCxleHBvcnRlcjpnbixuYW1lZEV4cHJlc3Npb25zOm8sc2VyaWFsaXphdGlvbjpUbixmdW5jdGlvblJlZ2lzdHJ5OmF9fX1mdW5jdGlvbiB6dG4obil7cmV0dXJuKCk9Pnt0aHJvdyBuZXcgRXJyb3IoYFRoZSAiJHtufSIgbWV0aG9kIGNhbm5vdCBiZSBjYWxsZWQgYmVjYXVz''@;'; put 'put ''ZSB0aGlzIEh5cGVyRm9ybXVsYSBpbnN0YW5jZSBoYXMgYmVlbiBkZXN0cm95ZWRgKX19dmFyIFd0bj1oKDUxNDI1KSxjOT1mdW5jdGlvbihuKXtyZXR1cm4gbi5TaGVldEFkZGVkPSJzaGVldEFkZGVkIixuLlNoZWV0UmVtb3ZlZD0ic2hlZXRSZW1vdmVkIixuLlNoZWV0UmVuYW1lZD0ic2hl''@;'; put 'put ''ZXRSZW5hbWVkIixuLk5hbWVkRXhwcmVzc2lvbkFkZGVkPSJuYW1lZEV4cHJlc3Npb25BZGRlZCIsbi5OYW1lZEV4cHJlc3Npb25SZW1vdmVkPSJuYW1lZEV4cHJlc3Npb25SZW1vdmVkIixuLlZhbHVlc1VwZGF0ZWQ9InZhbHVlc1VwZGF0ZWQiLG4uRXZhbHVhdGlvblN1c3BlbmRlZD0iZXZh''@;'; put 'put ''bHVhdGlvblN1c3BlbmRlZCIsbi5FdmFsdWF0aW9uUmVzdW1lZD0iZXZhbHVhdGlvblJlc3VtZWQiLG59KGM5fHx7fSk7Y2xhc3MgWXRuIGV4dGVuZHMgV3RuLlRpbnlFbWl0dGVye2VtaXQoZSwuLi50KXtyZXR1cm4gc3VwZXIuZW1pdChlLC4uLnQpLHRoaXN9fWNsYXNzIGRme2NvbnN0cnVj''@;'; put 'put ''dG9yKGUsdCxyLGksbyxhLGwsdSxnLEUsTyxaLGVlLHZlKXt0aGlzLl9jb25maWc9ZSx0aGlzLl9zdGF0cz10LHRoaXMuX2RlcGVuZGVuY3lHcmFwaD1yLHRoaXMuX2NvbHVtblNlYXJjaD1pLHRoaXMuX3BhcnNlcj1vLHRoaXMuX3VucGFyc2VyPWEsdGhpcy5fY2VsbENvbnRlbnRQYXJzZXI9''@;'; put 'put ''bCx0aGlzLl9ldmFsdWF0b3I9dSx0aGlzLl9sYXppbHlUcmFuc2Zvcm1pbmdBc3RTZXJ2aWNlPWcsdGhpcy5fY3J1ZE9wZXJhdGlvbnM9RSx0aGlzLl9leHBvcnRlcj1PLHRoaXMuX25hbWVkRXhwcmVzc2lvbnM9Wix0aGlzLl9zZXJpYWxpemF0aW9uPWVlLHRoaXMuX2Z1bmN0aW9uUmVnaXN0''@;'; put 'put ''cnk9dmUsdGhpcy5fZW1pdHRlcj1uZXcgWXRuLHRoaXMuX2V2YWx1YXRpb25TdXNwZW5kZWQ9ITF9c3RhdGljIGdldCBkZWZhdWx0Q29uZmlnKCl7cmV0dXJuIGZ1bmN0aW9uIFp0bigpe3JldHVybiBxV2Uoe30pfSgpfWdldCBncmFwaCgpe3JldHVybiB0aGlzLmRlcGVuZGVuY3lHcmFwaC5n''@;'; put 'put ''cmFwaH1nZXQgcmFuZ2VNYXBwaW5nKCl7cmV0dXJuIHRoaXMuZGVwZW5kZW5jeUdyYXBoLnJhbmdlTWFwcGluZ31nZXQgYXJyYXlNYXBwaW5nKCl7cmV0dXJuIHRoaXMuZGVwZW5kZW5jeUdyYXBoLmFycmF5TWFwcGluZ31nZXQgc2hlZXRNYXBwaW5nKCl7cmV0dXJuIHRoaXMuZGVwZW5kZW5j''@;'; put 'put ''eUdyYXBoLnNoZWV0TWFwcGluZ31nZXQgYWRkcmVzc01hcHBpbmcoKXtyZXR1cm4gdGhpcy5kZXBlbmRlbmN5R3JhcGguYWRkcmVzc01hcHBpbmd9Z2V0IGRlcGVuZGVuY3lHcmFwaCgpe3JldHVybiB0aGlzLl9kZXBlbmRlbmN5R3JhcGh9Z2V0IGV2YWx1YXRvcigpe3JldHVybiB0aGlzLl9l''@;'; put 'put ''dmFsdWF0b3J9Z2V0IGNvbHVtblNlYXJjaCgpe3JldHVybiB0aGlzLl9jb2x1bW5TZWFyY2h9Z2V0IGxhemlseVRyYW5zZm9ybWluZ0FzdFNlcnZpY2UoKXtyZXR1cm4gdGhpcy5fbGF6aWx5VHJhbnNmb3JtaW5nQXN0U2VydmljZX1nZXQgbGljZW5zZUtleVZhbGlkaXR5U3RhdGUoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fY29uZmlnLmxpY2Vuc2VLZXlWYWxpZGl0eVN0YXRlfXN0YXRpYyBidWlsZEZyb21BcnJheShlLHQ9e30scj1bXSl7cmV0dXJuIHRoaXMuYnVpbGRGcm9tRW5naW5lU3RhdGUoZUsuYnVpbGRGcm9tU2hlZXQoZSx0LHIpKX1zdGF0aWMgYnVpbGRGcm9tU2hlZXRzKGUsdD17fSxy''@;'; put 'put ''PVtdKXtyZXR1cm4gdGhpcy5idWlsZEZyb21FbmdpbmVTdGF0ZShlSy5idWlsZEZyb21TaGVldHMoZSx0LHIpKX1zdGF0aWMgYnVpbGRFbXB0eShlPXt9LHQ9W10pe3JldHVybiB0aGlzLmJ1aWxkRnJvbUVuZ2luZVN0YXRlKGVLLmJ1aWxkRW1wdHkoZSx0KSl9c3RhdGljIGdldExhbmd1YWdl''@;'; put 'put ''KGUpe3RvKGUsInN0cmluZyIsImxhbmd1YWdlQ29kZSIpO2NvbnN0IHQ9dGhpcy5yZWdpc3RlcmVkTGFuZ3VhZ2VzLmdldChlKTtpZih2b2lkIDA9PT10KXRocm93IG5ldyBuV2U7cmV0dXJuIHR9c3RhdGljIHJlZ2lzdGVyTGFuZ3VhZ2UoZSx0KXtpZih0byhlLCJzdHJpbmciLCJsYW5ndWFn''@;'; put 'put ''ZUNvZGUiKSx0aGlzLnJlZ2lzdGVyZWRMYW5ndWFnZXMuaGFzKGUpKXRocm93IG5ldyBJSnQ7dGhpcy5yZWdpc3RlcmVkTGFuZ3VhZ2VzLnNldChlLGZ1bmN0aW9uIHpKdChuKXtyZXR1cm4gbmV3IFVKdChPYmplY3QuYXNzaWduKHt9LG4uZnVuY3Rpb25zKSxPYmplY3QuYXNzaWduKHt9LG4u''@;'; put 'put ''ZXJyb3JzKSxPYmplY3QuYXNzaWduKHt9LG4udWkpKX0odCkpfXN0YXRpYyB1bnJlZ2lzdGVyTGFuZ3VhZ2UoZSl7aWYodG8oZSwic3RyaW5nIiwibGFuZ3VhZ2VDb2RlIiksIXRoaXMucmVnaXN0ZXJlZExhbmd1YWdlcy5oYXMoZSkpdGhyb3cgbmV3IG5XZTt0aGlzLnJlZ2lzdGVyZWRMYW5n''@;'; put 'put ''dWFnZXMuZGVsZXRlKGUpfXN0YXRpYyBnZXRSZWdpc3RlcmVkTGFuZ3VhZ2VzQ29kZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnJlZ2lzdGVyZWRMYW5ndWFnZXMua2V5cygpKX1zdGF0aWMgcmVnaXN0ZXJGdW5jdGlvblBsdWdpbihlLHQpe3IwLnJlZ2lzdGVyRnVuY3Rpb25QbHVnaW4o''@;'; put 'put ''ZSx0KX1zdGF0aWMgdW5yZWdpc3RlckZ1bmN0aW9uUGx1Z2luKGUpe3IwLnVucmVnaXN0ZXJGdW5jdGlvblBsdWdpbihlKX1zdGF0aWMgcmVnaXN0ZXJGdW5jdGlvbihlLHQscil7dG8oZSwic3RyaW5nIiwiZnVuY3Rpb25JZCIpLHIwLnJlZ2lzdGVyRnVuY3Rpb24oZSx0LHIpfXN0YXRpYyB1''@;'; put 'put ''bnJlZ2lzdGVyRnVuY3Rpb24oZSl7dG8oZSwic3RyaW5nIiwiZnVuY3Rpb25JZCIpLHIwLnVucmVnaXN0ZXJGdW5jdGlvbihlKX1zdGF0aWMgdW5yZWdpc3RlckFsbEZ1bmN0aW9ucygpe3IwLnVucmVnaXN0ZXJBbGwoKX1zdGF0aWMgZ2V0UmVnaXN0ZXJlZEZ1bmN0aW9uTmFtZXMoZSl7dG8o''@;'; put 'put ''ZSwic3RyaW5nIiwiY29kZSIpO2NvbnN0IHQ9cjAuZ2V0UmVnaXN0ZXJlZEZ1bmN0aW9uSWRzKCk7cmV0dXJuIHRoaXMuZ2V0TGFuZ3VhZ2UoZSkuZ2V0RnVuY3Rpb25UcmFuc2xhdGlvbnModCl9c3RhdGljIGdldEZ1bmN0aW9uUGx1Z2luKGUpe3JldHVybiB0byhlLCJzdHJpbmciLCJmdW5j''@;'; put 'put ''dGlvbklkIikscjAuZ2V0RnVuY3Rpb25QbHVnaW4oZSl9c3RhdGljIGdldEFsbEZ1bmN0aW9uUGx1Z2lucygpe3JldHVybiByMC5nZXRQbHVnaW5zKCl9c3RhdGljIGJ1aWxkRnJvbUVuZ2luZVN0YXRlKGUpe3JldHVybiBuZXcgZGYoZS5jb25maWcsZS5zdGF0cyxlLmRlcGVuZGVuY3lHcmFw''@;'; put 'put ''aCxlLmNvbHVtblNlYXJjaCxlLnBhcnNlcixlLnVucGFyc2VyLGUuY2VsbENvbnRlbnRQYXJzZXIsZS5ldmFsdWF0b3IsZS5sYXppbHlUcmFuc2Zvcm1pbmdBc3RTZXJ2aWNlLGUuY3J1ZE9wZXJhdGlvbnMsZS5leHBvcnRlcixlLm5hbWVkRXhwcmVzc2lvbnMsZS5zZXJpYWxpemF0aW9uLGUu''@;'; put 'put ''ZnVuY3Rpb25SZWdpc3RyeSl9Z2V0Q2VsbFZhbHVlKGUpe2lmKCFFaChlKSl0aHJvdyBuZXcgU2MoIlNpbXBsZUNlbGxBZGRyZXNzIiwiY2VsbEFkZHJlc3MiKTtyZXR1cm4gdGhpcy5lbnN1cmVFdmFsdWF0aW9uSXNOb3RTdXNwZW5kZWQoKSx0aGlzLl9zZXJpYWxpemF0aW9uLmdldENlbGxW''@;'; put 'put ''YWx1ZShlKX1nZXRDZWxsRm9ybXVsYShlKXtpZighRWgoZSkpdGhyb3cgbmV3IFNjKCJTaW1wbGVDZWxsQWRkcmVzcyIsImNlbGxBZGRyZXNzIik7cmV0dXJuIHRoaXMuX3NlcmlhbGl6YXRpb24uZ2V0Q2VsbEZvcm11bGEoZSl9Z2V0Q2VsbEh5cGVybGluayhlKXtpZighRWgoZSkpdGhyb3cg''@;'; put 'put ''bmV3IFNjKCJTaW1wbGVDZWxsQWRkcmVzcyIsImNlbGxBZGRyZXNzIik7cmV0dXJuIHRoaXMuZW5zdXJlRXZhbHVhdGlvbklzTm90U3VzcGVuZGVkKCksdGhpcy5fc2VyaWFsaXphdGlvbi5nZXRDZWxsSHlwZXJsaW5rKGUpfWdldENlbGxTZXJpYWxpemVkKGUpe2lmKCFFaChlKSl0aHJvdyBu''@;'; put 'put ''ZXcgU2MoIlNpbXBsZUNlbGxBZGRyZXNzIiwiY2VsbEFkZHJlc3MiKTtyZXR1cm4gdGhpcy5lbnN1cmVFdmFsdWF0aW9uSXNOb3RTdXNwZW5kZWQoKSx0aGlzLl9zZXJpYWxpemF0aW9uLmdldENlbGxTZXJpYWxpemVkKGUpfWdldFNoZWV0VmFsdWVzKGUpe3JldHVybiB0byhlLCJudW1iZXIi''@;'; put 'put ''LCJzaGVldElkIiksdGhpcy5lbnN1cmVFdmFsdWF0aW9uSXNOb3RTdXNwZW5kZWQoKSx0aGlzLl9zZXJpYWxpemF0aW9uLmdldFNoZWV0VmFsdWVzKGUpfWdldFNoZWV0Rm9ybXVsYXMoZSl7cmV0dXJuIHRvKGUsIm51bWJlciIsInNoZWV0SWQiKSx0aGlzLl9zZXJpYWxpemF0aW9uLmdldFNo''@;'; put 'put ''ZWV0Rm9ybXVsYXMoZSl9Z2V0U2hlZXRTZXJpYWxpemVkKGUpe3JldHVybiB0byhlLCJudW1iZXIiLCJzaGVldElkIiksdGhpcy5lbnN1cmVFdmFsdWF0aW9uSXNOb3RTdXNwZW5kZWQoKSx0aGlzLl9zZXJpYWxpemF0aW9uLmdldFNoZWV0U2VyaWFsaXplZChlKX1nZXRBbGxTaGVldHNEaW1l''@;'; put 'put ''bnNpb25zKCl7cmV0dXJuIHRoaXMuX3NlcmlhbGl6YXRpb24uZ2VuZXJpY0FsbFNoZWV0c0dldHRlcihlPT50aGlzLmdldFNoZWV0RGltZW5zaW9ucyhlKSl9Z2V0U2hlZXREaW1lbnNpb25zKGUpe3JldHVybiB0byhlLCJudW1iZXIiLCJzaGVldElkIikse3dpZHRoOnRoaXMuZGVwZW5kZW5j''@;'; put 'put ''eUdyYXBoLmdldFNoZWV0V2lkdGgoZSksaGVpZ2h0OnRoaXMuZGVwZW5kZW5jeUdyYXBoLmdldFNoZWV0SGVpZ2h0KGUpfX1nZXRBbGxTaGVldHNWYWx1ZXMoKXtyZXR1cm4gdGhpcy5lbnN1cmVFdmFsdWF0aW9uSXNOb3RTdXNwZW5kZWQoKSx0aGlzLl9zZXJpYWxpemF0aW9uLmdldEFsbFNo''@;'; put 'put ''ZWV0c1ZhbHVlcygpfWdldEFsbFNoZWV0c0Zvcm11bGFzKCl7cmV0dXJuIHRoaXMuX3NlcmlhbGl6YXRpb24uZ2V0QWxsU2hlZXRzRm9ybXVsYXMoKX1nZXRBbGxTaGVldHNTZXJpYWxpemVkKCl7cmV0dXJuIHRoaXMuZW5zdXJlRXZhbHVhdGlvbklzTm90U3VzcGVuZGVkKCksdGhpcy5fc2Vy''@;'; put 'put ''aWFsaXphdGlvbi5nZXRBbGxTaGVldHNTZXJpYWxpemVkKCl9dXBkYXRlQ29uZmlnKGUpe09iamVjdC5lbnRyaWVzKGUpLmV2ZXJ5KChbcixpXSk9PnRoaXMuX2NvbmZpZ1tyXT09PWkpfHx0aGlzLnJlYnVpbGRXaXRoQ29uZmlnKGUpfWdldENvbmZpZygpe3JldHVybiB0aGlzLl9jb25maWcu''@;'; put 'put ''Z2V0Q29uZmlnKCl9cmVidWlsZEFuZFJlY2FsY3VsYXRlKCl7dGhpcy5yZWJ1aWxkV2l0aENvbmZpZyh7fSl9Z2V0U3RhdHMoKXtyZXR1cm4gdGhpcy5fc3RhdHMuc25hcHNob3QoKX11bmRvKCl7cmV0dXJuIHRoaXMuX2NydWRPcGVyYXRpb25zLnVuZG8oKSx0aGlzLnJlY29tcHV0ZUlmRGVw''@;'; put 'put ''ZW5kZW5jeUdyYXBoTmVlZHNJdCgpfXJlZG8oKXtyZXR1cm4gdGhpcy5fY3J1ZE9wZXJhdGlvbnMucmVkbygpLHRoaXMucmVjb21wdXRlSWZEZXBlbmRlbmN5R3JhcGhOZWVkc0l0KCl9aXNUaGVyZVNvbWV0aGluZ1RvVW5kbygpe3JldHVybiB0aGlzLl9jcnVkT3BlcmF0aW9ucy5pc1RoZXJl''@;'; put 'put ''U29tZXRoaW5nVG9VbmRvKCl9aXNUaGVyZVNvbWV0aGluZ1RvUmVkbygpe3JldHVybiB0aGlzLl9jcnVkT3BlcmF0aW9ucy5pc1RoZXJlU29tZXRoaW5nVG9SZWRvKCl9aXNJdFBvc3NpYmxlVG9TZXRDZWxsQ29udGVudHMoZSl7bGV0IHQ7aWYoRWgoZSkpdD1uZXcgYmEoZSxlKTtlbHNle2lm''@;'; put 'put ''KCF2ZyhlKSl0aHJvdyBuZXcgU2MoIlNpbXBsZUNlbGxBZGRyZXNzIHwgU2ltcGxlQ2VsbFJhbmdlIiwiYWRkcmVzcyIpO3Q9bmV3IGJhKGUuc3RhcnQsZS5lbmQpfXRyeXt0aGlzLl9jcnVkT3BlcmF0aW9ucy5lbnN1cmVSYW5nZUluU2l6ZUxpbWl0cyh0KTtmb3IoY29uc3QgciBvZiB0LmFk''@;'; put 'put ''ZHJlc3Nlcyh0aGlzLl9kZXBlbmRlbmN5R3JhcGgpKXRoaXMuX2NydWRPcGVyYXRpb25zLmVuc3VyZUl0SXNQb3NzaWJsZVRvQ2hhbmdlQ29udGVudChyKX1jYXRjaHtyZXR1cm4hMX1yZXR1cm4hMH1zZXRDZWxsQ29udGVudHMoZSx0KXtyZXR1cm4gdGhpcy5fY3J1ZE9wZXJhdGlvbnMuc2V0''@;'; put 'put ''Q2VsbENvbnRlbnRzKGUsdCksdGhpcy5yZWNvbXB1dGVJZkRlcGVuZGVuY3lHcmFwaE5lZWRzSXQoKX1zd2FwUm93SW5kZXhlcyhlLHQpe3JldHVybiB0byhlLCJudW1iZXIiLCJzaGVldElkIiksdGhpcy5fY3J1ZE9wZXJhdGlvbnMuc2V0Um93T3JkZXIoZSx0KSx0aGlzLnJlY29tcHV0ZUlm''@;'; put 'put ''RGVwZW5kZW5jeUdyYXBoTmVlZHNJdCgpfWlzSXRQb3NzaWJsZVRvU3dhcFJvd0luZGV4ZXMoZSx0KXt0byhlLCJudW1iZXIiLCJzaGVldElkIik7dHJ5e3JldHVybiB0aGlzLl9jcnVkT3BlcmF0aW9ucy52YWxpZGF0ZVN3YXBSb3dJbmRleGVzKGUsdCksdGhpcy5fY3J1ZE9wZXJhdGlvbnMu''@;'; put 'put ''dGVzdFJvd09yZGVyRm9yQXJyYXlzKGUsdCksITB9Y2F0Y2h7cmV0dXJuITF9fXNldFJvd09yZGVyKGUsdCl7dG8oZSwibnVtYmVyIiwic2hlZXRJZCIpO2NvbnN0IHI9dGhpcy5fY3J1ZE9wZXJhdGlvbnMubWFwcGluZ0Zyb21PcmRlcihlLHQsInJvdyIpO3JldHVybiB0aGlzLnN3YXBSb3dJ''@;'; put 'put ''bmRleGVzKGUscil9aXNJdFBvc3NpYmxlVG9TZXRSb3dPcmRlcihlLHQpe3RvKGUsIm51bWJlciIsInNoZWV0SWQiKTt0cnl7Y29uc3Qgcj10aGlzLl9jcnVkT3BlcmF0aW9ucy5tYXBwaW5nRnJvbU9yZGVyKGUsdCwicm93Iik7cmV0dXJuIHRoaXMuX2NydWRPcGVyYXRpb25zLnZhbGlkYXRl''@;'; put 'put ''U3dhcFJvd0luZGV4ZXMoZSxyKSx0aGlzLl9jcnVkT3BlcmF0aW9ucy50ZXN0Um93T3JkZXJGb3JBcnJheXMoZSxyKSwhMH1jYXRjaHtyZXR1cm4hMX19c3dhcENvbHVtbkluZGV4ZXMoZSx0KXtyZXR1cm4gdG8oZSwibnVtYmVyIiwic2hlZXRJZCIpLHRoaXMuX2NydWRPcGVyYXRpb25zLnNl''@;'; put 'put ''dENvbHVtbk9yZGVyKGUsdCksdGhpcy5yZWNvbXB1dGVJZkRlcGVuZGVuY3lHcmFwaE5lZWRzSXQoKX1pc0l0UG9zc2libGVUb1N3YXBDb2x1bW5JbmRleGVzKGUsdCl7dG8oZSwibnVtYmVyIiwic2hlZXRJZCIpO3RyeXtyZXR1cm4gdGhpcy5fY3J1ZE9wZXJhdGlvbnMudmFsaWRhdGVTd2Fw''@;'; put 'put ''Q29sdW1uSW5kZXhlcyhlLHQpLHRoaXMuX2NydWRPcGVyYXRpb25zLnRlc3RDb2x1bW5PcmRlckZvckFycmF5cyhlLHQpLCEwfWNhdGNoe3JldHVybiExfX1zZXRDb2x1bW5PcmRlcihlLHQpe3RvKGUsIm51bWJlciIsInNoZWV0SWQiKTtjb25zdCByPXRoaXMuX2NydWRPcGVyYXRpb25zLm1h''@;'; put 'put ''cHBpbmdGcm9tT3JkZXIoZSx0LCJjb2x1bW4iKTtyZXR1cm4gdGhpcy5zd2FwQ29sdW1uSW5kZXhlcyhlLHIpfWlzSXRQb3NzaWJsZVRvU2V0Q29sdW1uT3JkZXIoZSx0KXt0byhlLCJudW1iZXIiLCJzaGVldElkIik7dHJ5e2NvbnN0IHI9dGhpcy5fY3J1ZE9wZXJhdGlvbnMubWFwcGluZ0Zy''@;'; put 'put ''b21PcmRlcihlLHQsImNvbHVtbiIpO3JldHVybiB0aGlzLl9jcnVkT3BlcmF0aW9ucy52YWxpZGF0ZVN3YXBDb2x1bW5JbmRleGVzKGUsciksdGhpcy5fY3J1ZE9wZXJhdGlvbnMudGVzdENvbHVtbk9yZGVyRm9yQXJyYXlzKGUsciksITB9Y2F0Y2h7cmV0dXJuITF9fWlzSXRQb3NzaWJsZVRv''@;'; put 'put ''QWRkUm93cyhlLC4uLnQpe3RvKGUsIm51bWJlciIsInNoZWV0SWQiKTtjb25zdCByPSRxKHQpO3RyeXtyZXR1cm4gdGhpcy5fY3J1ZE9wZXJhdGlvbnMuZW5zdXJlSXRJc1Bvc3NpYmxlVG9BZGRSb3dzKGUsLi4uciksITB9Y2F0Y2h7cmV0dXJuITF9fWFkZFJvd3MoZSwuLi50KXtyZXR1cm4g''@;'; put 'put ''dG8oZSwibnVtYmVyIiwic2hlZXRJZCIpLHRoaXMuX2NydWRPcGVyYXRpb25zLmFkZFJvd3MoZSwuLi50KSx0aGlzLnJlY29tcHV0ZUlmRGVwZW5kZW5jeUdyYXBoTmVlZHNJdCgpfWlzSXRQb3NzaWJsZVRvUmVtb3ZlUm93cyhlLC4uLnQpe3RvKGUsIm51bWJlciIsInNoZWV0SWQiKTtjb25z''@;'; put 'put ''dCByPUdxKHQpO3RyeXtyZXR1cm4gdGhpcy5fY3J1ZE9wZXJhdGlvbnMuZW5zdXJlSXRJc1Bvc3NpYmxlVG9SZW1vdmVSb3dzKGUsLi4uciksITB9Y2F0Y2h7cmV0dXJuITF9fXJlbW92ZVJvd3MoZSwuLi50KXtyZXR1cm4gdG8oZSwibnVtYmVyIiwic2hlZXRJZCIpLHRoaXMuX2NydWRPcGVy''@;'; put 'put ''YXRpb25zLnJlbW92ZVJvd3MoZSwuLi50KSx0aGlzLnJlY29tcHV0ZUlmRGVwZW5kZW5jeUdyYXBoTmVlZHNJdCgpfWlzSXRQb3NzaWJsZVRvQWRkQ29sdW1ucyhlLC4uLnQpe3RvKGUsIm51bWJlciIsInNoZWV0SWQiKTtjb25zdCByPSRxKHQpO3RyeXtyZXR1cm4gdGhpcy5fY3J1ZE9wZXJh''@;'; put 'put ''dGlvbnMuZW5zdXJlSXRJc1Bvc3NpYmxlVG9BZGRDb2x1bW5zKGUsLi4uciksITB9Y2F0Y2h7cmV0dXJuITF9fWFkZENvbHVtbnMoZSwuLi50KXtyZXR1cm4gdG8oZSwibnVtYmVyIiwic2hlZXRJZCIpLHRoaXMuX2NydWRPcGVyYXRpb25zLmFkZENvbHVtbnMoZSwuLi50KSx0aGlzLnJlY29t''@;'; put 'put ''cHV0ZUlmRGVwZW5kZW5jeUdyYXBoTmVlZHNJdCgpfWlzSXRQb3NzaWJsZVRvUmVtb3ZlQ29sdW1ucyhlLC4uLnQpe3RvKGUsIm51bWJlciIsInNoZWV0SWQiKTtjb25zdCByPUdxKHQpO3RyeXtyZXR1cm4gdGhpcy5fY3J1ZE9wZXJhdGlvbnMuZW5zdXJlSXRJc1Bvc3NpYmxlVG9SZW1vdmVD''@;'; put 'put ''b2x1bW5zKGUsLi4uciksITB9Y2F0Y2h7cmV0dXJuITF9fXJlbW92ZUNvbHVtbnMoZSwuLi50KXtyZXR1cm4gdG8oZSwibnVtYmVyIiwic2hlZXRJZCIpLHRoaXMuX2NydWRPcGVyYXRpb25zLnJlbW92ZUNvbHVtbnMoZSwuLi50KSx0aGlzLnJlY29tcHV0ZUlmRGVwZW5kZW5jeUdyYXBoTmVl''@;'; put 'put ''ZHNJdCgpfWlzSXRQb3NzaWJsZVRvTW92ZUNlbGxzKGUsdCl7aWYoIUVoKHQpKXRocm93IG5ldyBTYygiU2ltcGxlQ2VsbEFkZHJlc3MiLCJkZXN0aW5hdGlvbkxlZnRDb3JuZXIiKTtpZighdmcoZSkpdGhyb3cgbmV3IFNjKCJTaW1wbGVDZWxsUmFuZ2UiLCJzb3VyY2UiKTt0cnl7Y29uc3Qg''@;'; put 'put ''cj1uZXcgYmEoZS5zdGFydCxlLmVuZCk7cmV0dXJuIHRoaXMuX2NydWRPcGVyYXRpb25zLm9wZXJhdGlvbnMuZW5zdXJlSXRJc1Bvc3NpYmxlVG9Nb3ZlQ2VsbHMoci5zdGFydCxyLndpZHRoKCksci5oZWlnaHQoKSx0KSwhMH1jYXRjaHtyZXR1cm4hMX19bW92ZUNlbGxzKGUsdCl7aWYoIUVo''@;'; put 'put ''KHQpKXRocm93IG5ldyBTYygiU2ltcGxlQ2VsbEFkZHJlc3MiLCJkZXN0aW5hdGlvbkxlZnRDb3JuZXIiKTtpZighdmcoZSkpdGhyb3cgbmV3IFNjKCJTaW1wbGVDZWxsUmFuZ2UiLCJzb3VyY2UiKTtjb25zdCByPW5ldyBiYShlLnN0YXJ0LGUuZW5kKTtyZXR1cm4gdGhpcy5fY3J1ZE9wZXJh''@;'; put 'put ''dGlvbnMubW92ZUNlbGxzKHIuc3RhcnQsci53aWR0aCgpLHIuaGVpZ2h0KCksdCksdGhpcy5yZWNvbXB1dGVJZkRlcGVuZGVuY3lHcmFwaE5lZWRzSXQoKX1pc0l0UG9zc2libGVUb01vdmVSb3dzKGUsdCxyLGkpe3RvKGUsIm51bWJlciIsInNoZWV0SWQiKSx0byh0LCJudW1iZXIiLCJzdGFy''@;'; put 'put ''dFJvdyIpLHRvKHIsIm51bWJlciIsIm51bWJlck9mUm93cyIpLHRvKGksIm51bWJlciIsInRhcmdldFJvdyIpO3RyeXtyZXR1cm4gdGhpcy5fY3J1ZE9wZXJhdGlvbnMuZW5zdXJlSXRJc1Bvc3NpYmxlVG9Nb3ZlUm93cyhlLHQscixpKSwhMH1jYXRjaHtyZXR1cm4hMX19bW92ZVJvd3MoZSx0''@;'; put 'put ''LHIsaSl7cmV0dXJuIHRvKGUsIm51bWJlciIsInNoZWV0SWQiKSx0byh0LCJudW1iZXIiLCJzdGFydFJvdyIpLHRvKHIsIm51bWJlciIsIm51bWJlck9mUm93cyIpLHRvKGksIm51bWJlciIsInRhcmdldFJvdyIpLHRoaXMuX2NydWRPcGVyYXRpb25zLm1vdmVSb3dzKGUsdCxyLGkpLHRoaXMu''@;'; put 'put ''cmVjb21wdXRlSWZEZXBlbmRlbmN5R3JhcGhOZWVkc0l0KCl9aXNJdFBvc3NpYmxlVG9Nb3ZlQ29sdW1ucyhlLHQscixpKXt0byhlLCJudW1iZXIiLCJzaGVldElkIiksdG8odCwibnVtYmVyIiwic3RhcnRDb2x1bW4iKSx0byhyLCJudW1iZXIiLCJudW1iZXJPZkNvbHVtbnMiKSx0byhpLCJu''@;'; put 'put ''dW1iZXIiLCJ0YXJnZXRDb2x1bW4iKTt0cnl7cmV0dXJuIHRoaXMuX2NydWRPcGVyYXRpb25zLmVuc3VyZUl0SXNQb3NzaWJsZVRvTW92ZUNvbHVtbnMoZSx0LHIsaSksITB9Y2F0Y2h7cmV0dXJuITF9fW1vdmVDb2x1bW5zKGUsdCxyLGkpe3JldHVybiB0byhlLCJudW1iZXIiLCJzaGVldElk''@;'; put 'put ''IiksdG8odCwibnVtYmVyIiwic3RhcnRDb2x1bW4iKSx0byhyLCJudW1iZXIiLCJudW1iZXJPZkNvbHVtbnMiKSx0byhpLCJudW1iZXIiLCJ0YXJnZXRDb2x1bW4iKSx0aGlzLl9jcnVkT3BlcmF0aW9ucy5tb3ZlQ29sdW1ucyhlLHQscixpKSx0aGlzLnJlY29tcHV0ZUlmRGVwZW5kZW5jeUdy''@;'; put 'put ''YXBoTmVlZHNJdCgpfWNvcHkoZSl7aWYoIXZnKGUpKXRocm93IG5ldyBTYygiU2ltcGxlQ2VsbFJhbmdlIiwic291cmNlIik7Y29uc3QgdD1uZXcgYmEoZS5zdGFydCxlLmVuZCk7cmV0dXJuIHRoaXMuX2NydWRPcGVyYXRpb25zLmNvcHkodC5zdGFydCx0LndpZHRoKCksdC5oZWlnaHQoKSks''@;'; put 'put ''dGhpcy5nZXRSYW5nZVZhbHVlcyhlKX1jdXQoZSl7aWYoIXZnKGUpKXRocm93IG5ldyBTYygiU2ltcGxlQ2VsbFJhbmdlIiwic291cmNlIik7Y29uc3QgdD1uZXcgYmEoZS5zdGFydCxlLmVuZCk7cmV0dXJuIHRoaXMuX2NydWRPcGVyYXRpb25zLmN1dCh0LnN0YXJ0LHQud2lkdGgoKSx0Lmhl''@;'; put 'put ''aWdodCgpKSx0aGlzLmdldFJhbmdlVmFsdWVzKGUpfXBhc3RlKGUpe2lmKCFFaChlKSl0aHJvdyBuZXcgU2MoIlNpbXBsZUNlbGxBZGRyZXNzIiwidGFyZ2V0TGVmdENvcm5lciIpO3JldHVybiB0aGlzLmVuc3VyZUV2YWx1YXRpb25Jc05vdFN1c3BlbmRlZCgpLHRoaXMuX2NydWRPcGVyYXRp''@;'; put 'put ''b25zLnBhc3RlKGUpLHRoaXMucmVjb21wdXRlSWZEZXBlbmRlbmN5R3JhcGhOZWVkc0l0KCl9aXNDbGlwYm9hcmRFbXB0eSgpe3JldHVybiB0aGlzLl9jcnVkT3BlcmF0aW9ucy5pc0NsaXBib2FyZEVtcHR5KCl9Y2xlYXJDbGlwYm9hcmQoKXt0aGlzLl9jcnVkT3BlcmF0aW9ucy5jbGVhckNs''@;'; put 'put ''aXBib2FyZCgpfWNsZWFyUmVkb1N0YWNrKCl7dGhpcy5fY3J1ZE9wZXJhdGlvbnMudW5kb1JlZG8uY2xlYXJSZWRvU3RhY2soKX1jbGVhclVuZG9TdGFjaygpe3RoaXMuX2NydWRPcGVyYXRpb25zLnVuZG9SZWRvLmNsZWFyVW5kb1N0YWNrKCl9Z2V0UmFuZ2VWYWx1ZXMoZSl7aWYoIXZnKGUp''@;'; put 'put ''KXRocm93IG5ldyBTYygiU2ltcGxlQ2VsbFJhbmdlIiwic291cmNlIik7cmV0dXJuIG5ldyBiYShlLnN0YXJ0LGUuZW5kKS5hcnJheU9mQWRkcmVzc2VzSW5SYW5nZSgpLm1hcChyPT5yLm1hcChpPT50aGlzLmdldENlbGxWYWx1ZShpKSkpfWdldFJhbmdlRm9ybXVsYXMoZSl7aWYoIXZnKGUp''@;'; put 'put ''KXRocm93IG5ldyBTYygiU2ltcGxlQ2VsbFJhbmdlIiwic291cmNlIik7cmV0dXJuIG5ldyBiYShlLnN0YXJ0LGUuZW5kKS5hcnJheU9mQWRkcmVzc2VzSW5SYW5nZSgpLm1hcChyPT5yLm1hcChpPT50aGlzLmdldENlbGxGb3JtdWxhKGkpKSl9Z2V0UmFuZ2VTZXJpYWxpemVkKGUpe2lmKCF2''@;'; put 'put ''ZyhlKSl0aHJvdyBuZXcgU2MoIlNpbXBsZUNlbGxSYW5nZSIsInNvdXJjZSIpO3JldHVybiBuZXcgYmEoZS5zdGFydCxlLmVuZCkuYXJyYXlPZkFkZHJlc3Nlc0luUmFuZ2UoKS5tYXAocj0+ci5tYXAoaT0+dGhpcy5nZXRDZWxsU2VyaWFsaXplZChpKSkpfWdldEZpbGxSYW5nZURhdGEoZSx0''@;'; put 'put ''LHI9ITEpe2lmKCF2ZyhlKSl0aHJvdyBuZXcgU2MoIlNpbXBsZUNlbGxSYW5nZSIsInNvdXJjZSIpO2lmKCF2Zyh0KSl0aHJvdyBuZXcgU2MoIlNpbXBsZUNlbGxSYW5nZSIsInRhcmdldCIpO2NvbnN0IGk9bmV3IGJhKGUuc3RhcnQsZS5lbmQpLG89bmV3IGJhKHQuc3RhcnQsdC5lbmQpO3Jl''@;'; put 'put ''dHVybiB0aGlzLmVuc3VyZUV2YWx1YXRpb25Jc05vdFN1c3BlbmRlZCgpLG8uYXJyYXlPZkFkZHJlc3Nlc0luUmFuZ2UoKS5tYXAoYT0+YS5tYXAobD0+e2NvbnN0IHU9KChsLnJvdy0ocj90OmUpLnN0YXJ0LnJvdyklaS5oZWlnaHQoKStpLmhlaWdodCgpKSVpLmhlaWdodCgpK2Uuc3RhcnQu''@;'; put 'put ''cm93LGc9KChsLmNvbC0ocj90OmUpLnN0YXJ0LmNvbCklaS53aWR0aCgpK2kud2lkdGgoKSklaS53aWR0aCgpK2Uuc3RhcnQuY29sO3JldHVybiB0aGlzLl9zZXJpYWxpemF0aW9uLmdldENlbGxTZXJpYWxpemVkKHtyb3c6dSxjb2w6ZyxzaGVldDppLnNoZWV0fSxsKX0pKX1pc0l0UG9zc2li''@;'; put 'put ''bGVUb0FkZFNoZWV0KGUpe3RvKGUsInN0cmluZyIsInNoZWV0TmFtZSIpO3RyeXtyZXR1cm4gdGhpcy5fY3J1ZE9wZXJhdGlvbnMuZW5zdXJlSXRJc1Bvc3NpYmxlVG9BZGRTaGVldChlKSwhMH1jYXRjaHtyZXR1cm4hMX19YWRkU2hlZXQoZSl7dm9pZCAwIT09ZSYmdG8oZSwic3RyaW5nIiwi''@;'; put 'put ''c2hlZXROYW1lIik7Y29uc3QgdD10aGlzLl9jcnVkT3BlcmF0aW9ucy5hZGRTaGVldChlKTtyZXR1cm4gdGhpcy5fZW1pdHRlci5lbWl0KGM5LlNoZWV0QWRkZWQsdCksdH1pc0l0UG9zc2libGVUb1JlbW92ZVNoZWV0KGUpe3RvKGUsIm51bWJlciIsInNoZWV0SWQiKTt0cnl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2NydWRPcGVyYXRpb25zLmVuc3VyZVNjb3BlSWRJc1ZhbGlkKGUpLCEwfWNhdGNoe3JldHVybiExfX1yZW1vdmVTaGVldChlKXt0byhlLCJudW1iZXIiLCJzaGVldElkIik7Y29uc3QgdD10aGlzLnNoZWV0TWFwcGluZy5nZXREaXNwbGF5TmFtZShlKTt0aGlzLl9jcnVkT3BlcmF0aW9u''@;'; put 'put ''cy5yZW1vdmVTaGVldChlKTtjb25zdCByPXRoaXMucmVjb21wdXRlSWZEZXBlbmRlbmN5R3JhcGhOZWVkc0l0KCk7cmV0dXJuIHRoaXMuX2VtaXR0ZXIuZW1pdChjOS5TaGVldFJlbW92ZWQsdCxyKSxyfWlzSXRQb3NzaWJsZVRvQ2xlYXJTaGVldChlKXt0byhlLCJudW1iZXIiLCJzaGVldElk''@;'; put 'put ''Iik7dHJ5e3JldHVybiB0aGlzLl9jcnVkT3BlcmF0aW9ucy5lbnN1cmVTY29wZUlkSXNWYWxpZChlKSwhMH1jYXRjaHtyZXR1cm4hMX19Y2xlYXJTaGVldChlKXtyZXR1cm4gdG8oZSwibnVtYmVyIiwic2hlZXRJZCIpLHRoaXMuX2NydWRPcGVyYXRpb25zLmNsZWFyU2hlZXQoZSksdGhpcy5y''@;'; put 'put ''ZWNvbXB1dGVJZkRlcGVuZGVuY3lHcmFwaE5lZWRzSXQoKX1pc0l0UG9zc2libGVUb1JlcGxhY2VTaGVldENvbnRlbnQoZSx0KXt0byhlLCJudW1iZXIiLCJzaGVldElkIik7dHJ5e3JldHVybiB0aGlzLl9jcnVkT3BlcmF0aW9ucy5lbnN1cmVTY29wZUlkSXNWYWxpZChlKSx0aGlzLl9jcnVk''@;'; put 'put ''T3BlcmF0aW9ucy5lbnN1cmVJdElzUG9zc2libGVUb0NoYW5nZVNoZWV0Q29udGVudHMoZSx0KSwhMH1jYXRjaHtyZXR1cm4hMX19c2V0U2hlZXRDb250ZW50KGUsdCl7cmV0dXJuIHRvKGUsIm51bWJlciIsInNoZWV0SWQiKSx0aGlzLl9jcnVkT3BlcmF0aW9ucy5zZXRTaGVldENvbnRlbnQo''@;'; put 'put ''ZSx0KSx0aGlzLnJlY29tcHV0ZUlmRGVwZW5kZW5jeUdyYXBoTmVlZHNJdCgpfXNpbXBsZUNlbGxBZGRyZXNzRnJvbVN0cmluZyhlLHQpe3JldHVybiB0byhlLCJzdHJpbmciLCJjZWxsQWRkcmVzcyIpLHRvKHQsIm51bWJlciIsInNoZWV0SWQiKSxrZ2UodGhpcy5zaGVldE1hcHBpbmcuZ2V0''@;'; put 'put ''LGUsdCl9c2ltcGxlQ2VsbFJhbmdlRnJvbVN0cmluZyhlLHQpe3JldHVybiB0byhlLCJzdHJpbmciLCJjZWxsUmFuZ2UiKSx0byh0LCJudW1iZXIiLCJzaGVldElkIiksKChuLGUsdCk9Pntjb25zdCByPWUuc3BsaXQoIjoiKTtpZigyIT09ci5sZW5ndGgpcmV0dXJuO2NvbnN0W2ksb109cixh''@;'; put 'put ''PWtnZShuLGksdCk7aWYodm9pZCAwPT09YSlyZXR1cm47Y29uc3QgbD1rZ2UobixvLGEuc2hlZXQpO3JldHVybiB2b2lkIDAhPT1sJiZhLnNoZWV0PT09bC5zaGVldD9lbWUoYSxsKTp2b2lkIDB9KSh0aGlzLnNoZWV0TWFwcGluZy5nZXQsZSx0KX1zaW1wbGVDZWxsQWRkcmVzc1RvU3RyaW5n''@;'; put 'put ''KGUsdCl7aWYoIUVoKGUpKXRocm93IG5ldyBTYygiU2ltcGxlQ2VsbEFkZHJlc3MiLCJjZWxsQWRkcmVzcyIpO3JldHVybiB0byh0LCJudW1iZXIiLCJzaGVldElkIiksU3EodGhpcy5zaGVldE1hcHBpbmcuZmV0Y2hEaXNwbGF5TmFtZSxlLHQpfXNpbXBsZUNlbGxSYW5nZVRvU3RyaW5nKGUs''@;'; put 'put ''dCl7aWYoIXZnKGUpKXRocm93IG5ldyBTYygiU2ltcGxlQ2VsbFJhbmdlIiwiY2VsbFJhbmdlIik7cmV0dXJuIHRvKHQsIm51bWJlciIsInNoZWV0SWQiKSwoKG4sZSx0KT0+e2NvbnN0IHI9U3EobixlLnN0YXJ0LHQpLGk9U3EobixlLmVuZCxlLnN0YXJ0LnNoZWV0KTtpZih2b2lkIDAhPT1y''@;'; put 'put ''JiZ2b2lkIDAhPT1pKXJldHVybmAke3J9OiR7aX1gfSkodGhpcy5zaGVldE1hcHBpbmcuZmV0Y2hEaXNwbGF5TmFtZSxlLHQpfWdldENlbGxEZXBlbmRlbnRzKGUpe2xldCB0O2lmKEVoKGUpKXQ9dGhpcy5fZGVwZW5kZW5jeUdyYXBoLmFkZHJlc3NNYXBwaW5nLmdldENlbGwoZSk7ZWxzZXtp''@;'; put 'put ''ZighdmcoZSkpdGhyb3cgbmV3IFNjKCJTaW1wbGVDZWxsQWRkcmVzcyB8IFNpbXBsZUNlbGxSYW5nZSIsZSk7dD10aGlzLl9kZXBlbmRlbmN5R3JhcGgucmFuZ2VNYXBwaW5nLmdldFJhbmdlKGUuc3RhcnQsZS5lbmQpfXJldHVybiB2b2lkIDA9PT10P1tdOnRoaXMuX2RlcGVuZGVuY3lHcmFw''@;'; put 'put ''aC5nZXRBZGphY2VudE5vZGVzQWRkcmVzc2VzKHQpfWdldENlbGxQcmVjZWRlbnRzKGUpe2xldCB0O2lmKEVoKGUpKXQ9dGhpcy5fZGVwZW5kZW5jeUdyYXBoLmFkZHJlc3NNYXBwaW5nLmdldENlbGwoZSk7ZWxzZXtpZighdmcoZSkpdGhyb3cgbmV3IFNjKCJTaW1wbGVDZWxsQWRkcmVzcyB8''@;'; put 'put ''IFNpbXBsZUNlbGxSYW5nZSIsZSk7dD10aGlzLl9kZXBlbmRlbmN5R3JhcGgucmFuZ2VNYXBwaW5nLmdldFJhbmdlKGUuc3RhcnQsZS5lbmQpfXJldHVybiB2b2lkIDA9PT10P1tdOnRoaXMuX2RlcGVuZGVuY3lHcmFwaC5kZXBlbmRlbmN5UXVlcnlBZGRyZXNzZXModCl9Z2V0U2hlZXROYW1l''@;'; put 'put ''KGUpe3JldHVybiB0byhlLCJudW1iZXIiLCJzaGVldElkIiksdGhpcy5zaGVldE1hcHBpbmcuZ2V0RGlzcGxheU5hbWUoZSl9Z2V0U2hlZXROYW1lcygpe3JldHVybiB0aGlzLnNoZWV0TWFwcGluZy5zaGVldE5hbWVzKCl9Z2V0U2hlZXRJZChlKXtyZXR1cm4gdG8oZSwic3RyaW5nIiwic2hl''@;'; put 'put ''ZXROYW1lIiksdGhpcy5zaGVldE1hcHBpbmcuZ2V0KGUpfWRvZXNTaGVldEV4aXN0KGUpe3JldHVybiB0byhlLCJzdHJpbmciLCJzaGVldE5hbWUiKSx0aGlzLnNoZWV0TWFwcGluZy5oYXNTaGVldFdpdGhOYW1lKGUpfWdldENlbGxUeXBlKGUpe2lmKCFFaChlKSl0aHJvdyBuZXcgU2MoIlNp''@;'; put 'put ''bXBsZUNlbGxBZGRyZXNzIiwiY2VsbEFkZHJlc3MiKTtyZXR1cm4oKG4sZSk9Pm4gaW5zdGFuY2VvZiAkaD9uLmlzTGVmdENvcm5lcihlKT9UbS5BUlJBWUZPUk1VTEE6VG0uQVJSQVk6biBpbnN0YW5jZW9mIGo2fHxuIGluc3RhbmNlb2YgaUE/VG0uRk9STVVMQTpuIGluc3RhbmNlb2YgUV8/''@;'; put 'put ''VG0uVkFMVUU6VG0uRU1QVFkpKHRoaXMuZGVwZW5kZW5jeUdyYXBoLmdldENlbGwoZSksZSl9ZG9lc0NlbGxIYXZlU2ltcGxlVmFsdWUoZSl7aWYoIUVoKGUpKXRocm93IG5ldyBTYygiU2ltcGxlQ2VsbEFkZHJlc3MiLCJjZWxsQWRkcmVzcyIpO3JldHVybiB0aGlzLmdldENlbGxUeXBlKGUp''@;'; put 'put ''PT09VG0uVkFMVUV9ZG9lc0NlbGxIYXZlRm9ybXVsYShlKXtpZighRWgoZSkpdGhyb3cgbmV3IFNjKCJTaW1wbGVDZWxsQWRkcmVzcyIsImNlbGxBZGRyZXNzIik7Y29uc3QgdD10aGlzLmdldENlbGxUeXBlKGUpO3JldHVybiB0PT09VG0uRk9STVVMQXx8dD09PVRtLkFSUkFZRk9STVVMQX1p''@;'; put 'put ''c0NlbGxFbXB0eShlKXtpZighRWgoZSkpdGhyb3cgbmV3IFNjKCJTaW1wbGVDZWxsQWRkcmVzcyIsImNlbGxBZGRyZXNzIik7cmV0dXJuIHRoaXMuZ2V0Q2VsbFR5cGUoZSk9PT1UbS5FTVBUWX1pc0NlbGxQYXJ0T2ZBcnJheShlKXtpZighRWgoZSkpdGhyb3cgbmV3IFNjKCJTaW1wbGVDZWxs''@;'; put 'put ''QWRkcmVzcyIsImNlbGxBZGRyZXNzIik7Y29uc3QgdD10aGlzLmdldENlbGxUeXBlKGUpO3JldHVybiB0PT09VG0uQVJSQVl8fHQ9PT1UbS5BUlJBWUZPUk1VTEF9Z2V0Q2VsbFZhbHVlVHlwZShlKXtpZighRWgoZSkpdGhyb3cgbmV3IFNjKCJTaW1wbGVDZWxsQWRkcmVzcyIsImNlbGxBZGRy''@;'; put 'put ''ZXNzIik7dGhpcy5lbnN1cmVFdmFsdWF0aW9uSXNOb3RTdXNwZW5kZWQoKTtjb25zdCB0PXRoaXMuZGVwZW5kZW5jeUdyYXBoLmdldENlbGxWYWx1ZShlKTtyZXR1cm4gRnEodCl9Z2V0Q2VsbFZhbHVlRGV0YWlsZWRUeXBlKGUpe2lmKCFFaChlKSl0aHJvdyBuZXcgU2MoIlNpbXBsZUNlbGxB''@;'; put 'put ''ZGRyZXNzIiwiY2VsbEFkZHJlc3MiKTt0aGlzLmVuc3VyZUV2YWx1YXRpb25Jc05vdFN1c3BlbmRlZCgpO3JldHVybihuPT5jYyhuKT9mdW5jdGlvbiBmSnQobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBCNj9uLmdldERldGFpbGVkVHlwZSgpOm9hLk5VTUJFUl9SQVd9KG4pOkZxKG4pKSh0aGlz''@;'; put 'put ''LmRlcGVuZGVuY3lHcmFwaC5nZXRDZWxsVmFsdWUoZSkpfWdldENlbGxWYWx1ZUZvcm1hdChlKXtpZighRWgoZSkpdGhyb3cgbmV3IFNjKCJTaW1wbGVDZWxsQWRkcmVzcyIsImNlbGxBZGRyZXNzIik7dGhpcy5lbnN1cmVFdmFsdWF0aW9uSXNOb3RTdXNwZW5kZWQoKTtyZXR1cm4obj0+e2lm''@;'; put 'put ''KGNjKG4pKXJldHVybiBmdW5jdGlvbiBwSnQobil7aWYobiBpbnN0YW5jZW9mIEI2KXJldHVybiBuLmZvcm1hdH0obil9KSh0aGlzLmRlcGVuZGVuY3lHcmFwaC5nZXRDZWxsVmFsdWUoZSkpfWNvdW50U2hlZXRzKCl7cmV0dXJuIHRoaXMuc2hlZXRNYXBwaW5nLm51bWJlck9mU2hlZXRzKCl9''@;'; put 'put ''aXNJdFBvc3NpYmxlVG9SZW5hbWVTaGVldChlLHQpe3RvKGUsIm51bWJlciIsInNoZWV0SWQiKSx0byh0LCJzdHJpbmciLCJuZXdOYW1lIik7dHJ5e3JldHVybiB0aGlzLl9jcnVkT3BlcmF0aW9ucy5lbnN1cmVJdElzUG9zc2libGVUb1JlbmFtZVNoZWV0KGUsdCksITB9Y2F0Y2h7cmV0dXJu''@;'; put 'put ''ITF9fXJlbmFtZVNoZWV0KGUsdCl7dG8oZSwibnVtYmVyIiwic2hlZXRJZCIpLHRvKHQsInN0cmluZyIsIm5ld05hbWUiKTtjb25zdCByPXRoaXMuX2NydWRPcGVyYXRpb25zLnJlbmFtZVNoZWV0KGUsdCk7dm9pZCAwIT09ciYmdGhpcy5fZW1pdHRlci5lbWl0KGM5LlNoZWV0UmVuYW1lZCxy''@;'; put 'put ''LHQpfWJhdGNoKGUpe3RoaXMuc3VzcGVuZEV2YWx1YXRpb24oKSx0aGlzLl9jcnVkT3BlcmF0aW9ucy5iZWdpblVuZG9SZWRvQmF0Y2hNb2RlKCk7dHJ5e2UoKX1jYXRjaCh0KXt0aHJvdyB0aGlzLl9jcnVkT3BlcmF0aW9ucy5jb21taXRVbmRvUmVkb0JhdGNoTW9kZSgpLHRoaXMucmVzdW1l''@;'; put 'put ''RXZhbHVhdGlvbigpLHR9cmV0dXJuIHRoaXMuX2NydWRPcGVyYXRpb25zLmNvbW1pdFVuZG9SZWRvQmF0Y2hNb2RlKCksdGhpcy5yZXN1bWVFdmFsdWF0aW9uKCl9c3VzcGVuZEV2YWx1YXRpb24oKXt0aGlzLl9ldmFsdWF0aW9uU3VzcGVuZGVkPSEwLHRoaXMuX2VtaXR0ZXIuZW1pdChjOS5F''@;'; put 'put ''dmFsdWF0aW9uU3VzcGVuZGVkKX1yZXN1bWVFdmFsdWF0aW9uKCl7dGhpcy5fZXZhbHVhdGlvblN1c3BlbmRlZD0hMTtjb25zdCBlPXRoaXMucmVjb21wdXRlSWZEZXBlbmRlbmN5R3JhcGhOZWVkc0l0KCk7cmV0dXJuIHRoaXMuX2VtaXR0ZXIuZW1pdChjOS5FdmFsdWF0aW9uUmVzdW1lZCxl''@;'; put 'put ''KSxlfWlzRXZhbHVhdGlvblN1c3BlbmRlZCgpe3JldHVybiB0aGlzLl9ldmFsdWF0aW9uU3VzcGVuZGVkfWlzSXRQb3NzaWJsZVRvQWRkTmFtZWRFeHByZXNzaW9uKGUsdCxyKXt0byhlLCJzdHJpbmciLCJleHByZXNzaW9uTmFtZSIpLHZvaWQgMCE9PXImJnRvKHIsIm51bWJlciIsInNjb3Bl''@;'; put 'put ''Iik7dHJ5e3JldHVybiB0aGlzLl9jcnVkT3BlcmF0aW9ucy5lbnN1cmVJdElzUG9zc2libGVUb0FkZE5hbWVkRXhwcmVzc2lvbihlLHQsciksITB9Y2F0Y2h7cmV0dXJuITF9fWFkZE5hbWVkRXhwcmVzc2lvbihlLHQscixpKXt0byhlLCJzdHJpbmciLCJleHByZXNzaW9uTmFtZSIpLHZvaWQg''@;'; put 'put ''MCE9PXImJnRvKHIsIm51bWJlciIsInNjb3BlIiksdGhpcy5fY3J1ZE9wZXJhdGlvbnMuYWRkTmFtZWRFeHByZXNzaW9uKGUsdCxyLGkpO2NvbnN0IG89dGhpcy5yZWNvbXB1dGVJZkRlcGVuZGVuY3lHcmFwaE5lZWRzSXQoKTtyZXR1cm4gdGhpcy5fZW1pdHRlci5lbWl0KGM5Lk5hbWVkRXhw''@;'; put 'put ''cmVzc2lvbkFkZGVkLGUsbyksb31nZXROYW1lZEV4cHJlc3Npb25WYWx1ZShlLHQpe3RvKGUsInN0cmluZyIsImV4cHJlc3Npb25OYW1lIiksdm9pZCAwIT09dCYmdG8odCwibnVtYmVyIiwic2NvcGUiKSx0aGlzLmVuc3VyZUV2YWx1YXRpb25Jc05vdFN1c3BlbmRlZCgpLHRoaXMuX2NydWRP''@;'; put 'put ''cGVyYXRpb25zLmVuc3VyZVNjb3BlSWRJc1ZhbGlkKHQpO2NvbnN0IHI9dGhpcy5fbmFtZWRFeHByZXNzaW9ucy5uYW1lZEV4cHJlc3Npb25Gb3JTY29wZShlLHQpO2lmKHIpcmV0dXJuIHRoaXMuX3NlcmlhbGl6YXRpb24uZ2V0Q2VsbFZhbHVlKHIuYWRkcmVzcyl9Z2V0TmFtZWRFeHByZXNz''@;'; put 'put ''aW9uRm9ybXVsYShlLHQpe3RvKGUsInN0cmluZyIsImV4cHJlc3Npb25OYW1lIiksdm9pZCAwIT09dCYmdG8odCwibnVtYmVyIiwic2NvcGUiKSx0aGlzLl9jcnVkT3BlcmF0aW9ucy5lbnN1cmVTY29wZUlkSXNWYWxpZCh0KTtjb25zdCByPXRoaXMuX25hbWVkRXhwcmVzc2lvbnMubmFtZWRF''@;'; put 'put ''eHByZXNzaW9uRm9yU2NvcGUoZSx0KTtpZih2b2lkIDAhPT1yKXJldHVybiB0aGlzLl9zZXJpYWxpemF0aW9uLmdldENlbGxGb3JtdWxhKHIuYWRkcmVzcyl9Z2V0TmFtZWRFeHByZXNzaW9uKGUsdCl7dG8oZSwic3RyaW5nIiwiZXhwcmVzc2lvbk5hbWUiKSx2b2lkIDAhPT10JiZ0byh0LCJu''@;'; put 'put ''dW1iZXIiLCJzY29wZSIpO2NvbnN0IHI9dGhpcy5fbmFtZWRFeHByZXNzaW9ucy5uYW1lZEV4cHJlc3Npb25Gb3JTY29wZShlLHQpO2lmKHZvaWQgMCE9PXIpcmV0dXJue25hbWU6ZSxzY29wZTp0LGV4cHJlc3Npb246dGhpcy5fc2VyaWFsaXphdGlvbi5nZXRDZWxsRm9ybXVsYShyLmFkZHJl''@;'; put 'put ''c3MpLG9wdGlvbnM6ci5vcHRpb25zfX1pc0l0UG9zc2libGVUb0NoYW5nZU5hbWVkRXhwcmVzc2lvbihlLHQscil7dG8oZSwic3RyaW5nIiwiZXhwcmVzc2lvbk5hbWUiKSx2b2lkIDAhPT1yJiZ0byhyLCJudW1iZXIiLCJzY29wZSIpO3RyeXtyZXR1cm4gdGhpcy5fY3J1ZE9wZXJhdGlvbnMu''@;'; put 'put ''ZW5zdXJlSXRJc1Bvc3NpYmxlVG9DaGFuZ2VOYW1lZEV4cHJlc3Npb24oZSx0LHIpLCEwfWNhdGNoe3JldHVybiExfX1jaGFuZ2VOYW1lZEV4cHJlc3Npb24oZSx0LHIsaSl7cmV0dXJuIHRvKGUsInN0cmluZyIsImV4cHJlc3Npb25OYW1lIiksdm9pZCAwIT09ciYmdG8ociwibnVtYmVyIiwi''@;'; put 'put ''c2NvcGUiKSx0aGlzLl9jcnVkT3BlcmF0aW9ucy5jaGFuZ2VOYW1lZEV4cHJlc3Npb25FeHByZXNzaW9uKGUscix0LGkpLHRoaXMucmVjb21wdXRlSWZEZXBlbmRlbmN5R3JhcGhOZWVkc0l0KCl9aXNJdFBvc3NpYmxlVG9SZW1vdmVOYW1lZEV4cHJlc3Npb24oZSx0KXt0byhlLCJzdHJpbmci''@;'; put 'put ''LCJleHByZXNzaW9uTmFtZSIpLHZvaWQgMCE9PXQmJnRvKHQsIm51bWJlciIsInNjb3BlIik7dHJ5e3JldHVybiB0aGlzLl9jcnVkT3BlcmF0aW9ucy5pc0l0UG9zc2libGVUb1JlbW92ZU5hbWVkRXhwcmVzc2lvbihlLHQpLCEwfWNhdGNoe3JldHVybiExfX1yZW1vdmVOYW1lZEV4cHJlc3Np''@;'; put 'put ''b24oZSx0KXt0byhlLCJzdHJpbmciLCJleHByZXNzaW9uTmFtZSIpLHZvaWQgMCE9PXQmJnRvKHQsIm51bWJlciIsInNjb3BlIik7Y29uc3Qgcj10aGlzLl9jcnVkT3BlcmF0aW9ucy5yZW1vdmVOYW1lZEV4cHJlc3Npb24oZSx0KTtpZihyKXtjb25zdCBpPXRoaXMucmVjb21wdXRlSWZEZXBl''@;'; put 'put ''bmRlbmN5R3JhcGhOZWVkc0l0KCk7cmV0dXJuIHRoaXMuX2VtaXR0ZXIuZW1pdChjOS5OYW1lZEV4cHJlc3Npb25SZW1vdmVkLHIuZGlzcGxheU5hbWUsaSksaX1yZXR1cm5bXX1saXN0TmFtZWRFeHByZXNzaW9ucyhlKXtyZXR1cm4gdm9pZCAwIT09ZSYmdG8oZSwibnVtYmVyIiwic2NvcGUi''@;'; put 'put ''KSx0aGlzLl9jcnVkT3BlcmF0aW9ucy5lbnN1cmVTY29wZUlkSXNWYWxpZChlKSx0aGlzLl9uYW1lZEV4cHJlc3Npb25zLmdldEFsbE5hbWVkRXhwcmVzc2lvbnNOYW1lc0luU2NvcGUoZSl9Z2V0QWxsTmFtZWRFeHByZXNzaW9uc1NlcmlhbGl6ZWQoKXtyZXR1cm4gdGhpcy5fc2VyaWFsaXph''@;'; put 'put ''dGlvbi5nZXRBbGxOYW1lZEV4cHJlc3Npb25zU2VyaWFsaXplZCgpfW5vcm1hbGl6ZUZvcm11bGEoZSl7dG8oZSwic3RyaW5nIiwiZm9ybXVsYVN0cmluZyIpO2NvbnN0e2FzdDp0LGFkZHJlc3M6cn09dGhpcy5leHRyYWN0VGVtcG9yYXJ5Rm9ybXVsYShlKTtpZih2b2lkIDA9PT10KXRocm93''@;'; put 'put ''IG5ldyBxZ2U7cmV0dXJuIHRoaXMuX3VucGFyc2VyLnVucGFyc2UodCxyKX1jYWxjdWxhdGVGb3JtdWxhKGUsdCl7dG8oZSwic3RyaW5nIiwiZm9ybXVsYVN0cmluZyIpLHRvKHQsIm51bWJlciIsInNoZWV0SWQiKSx0aGlzLl9jcnVkT3BlcmF0aW9ucy5lbnN1cmVTY29wZUlkSXNWYWxpZCh0''@;'; put 'put ''KTtjb25zdHthc3Q6cixhZGRyZXNzOmksZGVwZW5kZW5jaWVzOm99PXRoaXMuZXh0cmFjdFRlbXBvcmFyeUZvcm11bGEoZSx0KTtpZih2b2lkIDA9PT1yKXRocm93IG5ldyBxZ2U7Y29uc3QgYT10aGlzLmV2YWx1YXRvci5ydW5BbmRGb3JnZXQocixpLG8pO3JldHVybiB0aGlzLl9leHBvcnRl''@;'; put 'put ''ci5leHBvcnRTY2FsYXJPclJhbmdlKGEpfWdldE5hbWVkRXhwcmVzc2lvbnNGcm9tRm9ybXVsYShlKXt0byhlLCJzdHJpbmciLCJmb3JtdWxhU3RyaW5nIik7Y29uc3R7YXN0OnQsZGVwZW5kZW5jaWVzOnJ9PXRoaXMuZXh0cmFjdFRlbXBvcmFyeUZvcm11bGEoZSk7aWYodm9pZCAwPT09dCl0''@;'; put 'put ''aHJvdyBuZXcgcWdlO2NvbnN0IGk9ci5maWx0ZXIoYT0+YSBpbnN0YW5jZW9mIGE5KS5tYXAoYT0+YS5uYW1lKTtyZXR1cm5bLi4ubmV3IFNldChpKV19dmFsaWRhdGVGb3JtdWxhKGUpe3RvKGUsInN0cmluZyIsImZvcm11bGFTdHJpbmciKTtjb25zdHthc3Q6dH09dGhpcy5leHRyYWN0VGVt''@;'; put 'put ''cG9yYXJ5Rm9ybXVsYShlKTtyZXR1cm4gdm9pZCAwIT09dH1nZXRSZWdpc3RlcmVkRnVuY3Rpb25OYW1lcygpe3JldHVybiBkZi5nZXRMYW5ndWFnZSh0aGlzLl9jb25maWcubGFuZ3VhZ2UpLmdldEZ1bmN0aW9uVHJhbnNsYXRpb25zKHRoaXMuX2Z1bmN0aW9uUmVnaXN0cnkuZ2V0UmVnaXN0''@;'; put 'put ''ZXJlZEZ1bmN0aW9uSWRzKCkpfWdldEZ1bmN0aW9uUGx1Z2luKGUpe3JldHVybiB0byhlLCJzdHJpbmciLCJmdW5jdGlvbklkIiksdGhpcy5fZnVuY3Rpb25SZWdpc3RyeS5nZXRGdW5jdGlvblBsdWdpbihlKX1nZXRBbGxGdW5jdGlvblBsdWdpbnMoKXtyZXR1cm4gdGhpcy5fZnVuY3Rpb25S''@;'; put 'put ''ZWdpc3RyeS5nZXRQbHVnaW5zKCl9bnVtYmVyVG9EYXRlVGltZShlKXtyZXR1cm4gdG8oZSwibnVtYmVyIiwidmFsIiksdGhpcy5fZXZhbHVhdG9yLmludGVycHJldGVyLmRhdGVUaW1lSGVscGVyLm51bWJlclRvU2ltcGxlRGF0ZVRpbWUoZSl9bnVtYmVyVG9EYXRlKGUpe3JldHVybiB0byhl''@;'; put 'put ''LCJudW1iZXIiLCJ2YWwiKSx0aGlzLl9ldmFsdWF0b3IuaW50ZXJwcmV0ZXIuZGF0ZVRpbWVIZWxwZXIubnVtYmVyVG9TaW1wbGVEYXRlKGUpfW51bWJlclRvVGltZShlKXtyZXR1cm4gdG8oZSwibnVtYmVyIiwidmFsIiksc0EoZSl9b24oZSx0KXt0aGlzLl9lbWl0dGVyLm9uKGUsdCl9b25j''@;'; put 'put ''ZShlLHQpe3RoaXMuX2VtaXR0ZXIub25jZShlLHQpfW9mZihlLHQpe3RoaXMuX2VtaXR0ZXIub2ZmKGUsdCl9ZGVzdHJveSgpeyFmdW5jdGlvbiBVdG4obil7Zm9yKGNvbnN0W2UsdF1vZiBPYmplY3QuZW50cmllcyhuKSl0IGluc3RhbmNlb2YgRnVuY3Rpb24/bltlXT16dG4odCk6ZGVsZXRl''@;'; put 'put ''IG5bZV19KHRoaXMpfWVuc3VyZUV2YWx1YXRpb25Jc05vdFN1c3BlbmRlZCgpe2lmKHRoaXMuX2V2YWx1YXRpb25TdXNwZW5kZWQpdGhyb3cgbmV3IGtKdH1leHRyYWN0VGVtcG9yYXJ5Rm9ybXVsYShlLHQ9MSl7Y29uc3Qgcj10aGlzLl9jZWxsQ29udGVudFBhcnNlci5wYXJzZShlKSxpPXtz''@;'; put 'put ''aGVldDp0LGNvbDowLHJvdzowfTtpZighKHIgaW5zdGFuY2VvZiBIZC5Gb3JtdWxhKSlyZXR1cm57YWRkcmVzczppLGRlcGVuZGVuY2llczpbXX07Y29uc3R7YXN0Om8sZXJyb3JzOmEsZGVwZW5kZW5jaWVzOmx9PXRoaXMuX3BhcnNlci5wYXJzZShyLmZvcm11bGEsaSk7cmV0dXJuIGEubGVu''@;'; put 'put ''Z3RoPjA/e2FkZHJlc3M6aSxkZXBlbmRlbmNpZXM6W119Onthc3Q6byxhZGRyZXNzOmksZGVwZW5kZW5jaWVzOmx9fXJlYnVpbGRXaXRoQ29uZmlnKGUpe2NvbnN0IHQ9dGhpcy5fY29uZmlnLm1lcmdlQ29uZmlnKGUpLHI9dGhpcy5fY29uZmlnLm1lcmdlQ29uZmlnKHtsYW5ndWFnZTplLmxh''@;'; put 'put ''bmd1YWdlfSksaT10aGlzLl9zZXJpYWxpemF0aW9uLndpdGhOZXdDb25maWcocix0aGlzLl9uYW1lZEV4cHJlc3Npb25zKS5nZXRBbGxTaGVldHNTZXJpYWxpemVkKCksbz10aGlzLl9zZXJpYWxpemF0aW9uLmdldEFsbE5hbWVkRXhwcmVzc2lvbnNTZXJpYWxpemVkKCksYT1lSy5yZWJ1aWxk''@;'; put 'put ''V2l0aENvbmZpZyh0LGksbyx0aGlzLl9zdGF0cyk7dGhpcy5fY29uZmlnPWEuY29uZmlnLHRoaXMuX3N0YXRzPWEuc3RhdHMsdGhpcy5fZGVwZW5kZW5jeUdyYXBoPWEuZGVwZW5kZW5jeUdyYXBoLHRoaXMuX2NvbHVtblNlYXJjaD1hLmNvbHVtblNlYXJjaCx0aGlzLl9wYXJzZXI9YS5wYXJz''@;'; put 'put ''ZXIsdGhpcy5fdW5wYXJzZXI9YS51bnBhcnNlcix0aGlzLl9jZWxsQ29udGVudFBhcnNlcj1hLmNlbGxDb250ZW50UGFyc2VyLHRoaXMuX2V2YWx1YXRvcj1hLmV2YWx1YXRvcix0aGlzLl9sYXppbHlUcmFuc2Zvcm1pbmdBc3RTZXJ2aWNlPWEubGF6aWx5VHJhbnNmb3JtaW5nQXN0U2Vydmlj''@;'; put 'put ''ZSx0aGlzLl9jcnVkT3BlcmF0aW9ucz1hLmNydWRPcGVyYXRpb25zLHRoaXMuX2V4cG9ydGVyPWEuZXhwb3J0ZXIsdGhpcy5fbmFtZWRFeHByZXNzaW9ucz1hLm5hbWVkRXhwcmVzc2lvbnMsdGhpcy5fc2VyaWFsaXphdGlvbj1hLnNlcmlhbGl6YXRpb24sdGhpcy5fZnVuY3Rpb25SZWdpc3Ry''@;'; put 'put ''eT1hLmZ1bmN0aW9uUmVnaXN0cnl9cmVjb21wdXRlSWZEZXBlbmRlbmN5R3JhcGhOZWVkc0l0KCl7aWYodGhpcy5fZXZhbHVhdGlvblN1c3BlbmRlZClyZXR1cm5bXTt7Y29uc3QgZT10aGlzLl9jcnVkT3BlcmF0aW9ucy5nZXRBbmRDbGVhckNvbnRlbnRDaGFuZ2VzKCksdD10aGlzLmRlcGVu''@;'; put 'put ''ZGVuY3lHcmFwaC52ZXJ0aWNlc1RvUmVjb21wdXRlKCk7dGhpcy5kZXBlbmRlbmN5R3JhcGguY2xlYXJEaXJ0eVZlcnRpY2VzKCksdC5sZW5ndGg+MCYmZS5hZGRBbGwodGhpcy5ldmFsdWF0b3IucGFydGlhbFJ1bih0KSk7Y29uc3Qgcj1lLmV4cG9ydENoYW5nZXModGhpcy5fZXhwb3J0ZXIp''@;'; put 'put ''O3JldHVybiBlLmlzRW1wdHkoKXx8dGhpcy5fZW1pdHRlci5lbWl0KGM5LlZhbHVlc1VwZGF0ZWQscikscn19fWRmLnZlcnNpb249IjIuNy4xIixkZi5idWlsZERhdGU9IjE4LzA3LzIwMjQgMTE6MjM6MTciLGRmLnJlbGVhc2VEYXRlPSIxOC8wNy8yMDI0IixkZi5sYW5ndWFnZXM9e30sZGYu''@;'; put 'put ''cmVnaXN0ZXJlZExhbmd1YWdlcz1uZXcgTWFwO2NvbnN0ICRXZT1uZXcgV2Vha01hcDtjbGFzcyBoMntjb25zdHJ1Y3RvcihlPXt9LHQ9ITApe2NvbnN0e2FjY2VudFNlbnNpdGl2ZTpyLGJpbmFyeVNlYXJjaFRocmVzaG9sZDppLGNhc2VTZW5zaXRpdmU6byxjYXNlRmlyc3Q6YSxjaG9vc2VB''@;'; put 'put ''ZGRyZXNzTWFwcGluZ1BvbGljeTpsLGNvbnRleHQ6dSxjdXJyZW5jeVN5bWJvbDpnLGRhdGVGb3JtYXRzOkUsZGVjaW1hbFNlcGFyYXRvcjpPLGV2YWx1YXRlTnVsbFRvWmVybzpaLGZ1bmN0aW9uQXJnU2VwYXJhdG9yOmVlLGZ1bmN0aW9uUGx1Z2luczp2ZSxpZ25vcmVQdW5jdHVhdGlvbjpN''@;'; put 'put ''ZSxsZWFwWWVhcjE5MDA6SGUsbG9jYWxlTGFuZzpXZSxsYW5ndWFnZTphdCxpZ25vcmVXaGl0ZVNwYWNlOkN0LGxpY2Vuc2VLZXk6QXQsbWF0Y2hXaG9sZUNlbGw6S3QsYXJyYXlDb2x1bW5TZXBhcmF0b3I6cXQsYXJyYXlSb3dTZXBhcmF0b3I6Z24sbWF4Um93czpUbixtYXhDb2x1bW5zOkNu''@;'; put 'put ''LG51bGxZZWFyOnFyLG51bGxEYXRlOiRuLHBhcnNlRGF0ZVRpbWU6VHIscHJlY2lzaW9uRXBzaWxvbjpyaSxwcmVjaXNpb25Sb3VuZGluZzpmbixzdHJpbmdpZnlEYXRlVGltZTp5cixzdHJpbmdpZnlEdXJhdGlvbjpBbixzbWFydFJvdW5kaW5nOkhyLHRpbWVGb3JtYXRzOnRpLHRob3VzYW5k''@;'; put 'put ''U2VwYXJhdG9yOmZyLHVzZUFycmF5QXJpdGhtZXRpYzplaSx1c2VTdGF0czpQbyx1bmRvTGltaXQ6SG8sdXNlQ29sdW1uSW5kZXg6eGksdXNlUmVndWxhckV4cHJlc3Npb25zOlRvLHVzZVdpbGRjYXJkczp3c309ZTt0JiZoMi53YXJuRGVwcmVjYXRlZE9wdGlvbnMoZSksdGhpcy51c2VBcnJh''@;'; put 'put ''eUFyaXRobWV0aWM9emMoZWksImJvb2xlYW4iLCJ1c2VBcnJheUFyaXRobWV0aWMiKSx0aGlzLmFjY2VudFNlbnNpdGl2ZT16YyhyLCJib29sZWFuIiwiYWNjZW50U2Vuc2l0aXZlIiksdGhpcy5jYXNlU2Vuc2l0aXZlPXpjKG8sImJvb2xlYW4iLCJjYXNlU2Vuc2l0aXZlIiksdGhpcy5jYXNl''@;'; put 'put ''Rmlyc3Q9emMoYSxbInVwcGVyIiwibG93ZXIiLCJmYWxzZSJdLCJjYXNlRmlyc3QiKSx0aGlzLmlnbm9yZVB1bmN0dWF0aW9uPXpjKE1lLCJib29sZWFuIiwiaWdub3JlUHVuY3R1YXRpb24iKSx0aGlzLmNob29zZUFkZHJlc3NNYXBwaW5nUG9saWN5PWw/P2gyLmRlZmF1bHRDb25maWcuY2hv''@;'; put 'put ''b3NlQWRkcmVzc01hcHBpbmdQb2xpY3ksdGhpcy5kYXRlRm9ybWF0cz1bLi4uSHEoRSxBcnJheS5pc0FycmF5LCJhcnJheSIsImRhdGVGb3JtYXRzIildLHRoaXMudGltZUZvcm1hdHM9Wy4uLkhxKHRpLEFycmF5LmlzQXJyYXksImFycmF5IiwidGltZUZvcm1hdHMiKV0sdGhpcy5mdW5jdGlv''@;'; put 'put ''bkFyZ1NlcGFyYXRvcj16YyhlZSwic3RyaW5nIiwiZnVuY3Rpb25BcmdTZXBhcmF0b3IiKSx0aGlzLmRlY2ltYWxTZXBhcmF0b3I9emMoTyxbIi4iLCIsIl0sImRlY2ltYWxTZXBhcmF0b3IiKSx0aGlzLmxhbmd1YWdlPXpjKGF0LCJzdHJpbmciLCJsYW5ndWFnZSIpLHRoaXMuaWdub3JlV2hp''@;'; put 'put ''dGVTcGFjZT16YyhDdCxbInN0YW5kYXJkIiwiYW55Il0sImlnbm9yZVdoaXRlU3BhY2UiKSx0aGlzLmxpY2Vuc2VLZXk9emMoQXQsInN0cmluZyIsImxpY2Vuc2VLZXkiKSx0aGlzLnRob3VzYW5kU2VwYXJhdG9yPXpjKGZyLFsiIiwiLCIsIiAiLCIuIl0sInRob3VzYW5kU2VwYXJhdG9yIiks''@;'; put 'put ''dGhpcy5hcnJheUNvbHVtblNlcGFyYXRvcj16YyhxdCxbIiwiLCI7Il0sImFycmF5Q29sdW1uU2VwYXJhdG9yIiksdGhpcy5hcnJheVJvd1NlcGFyYXRvcj16YyhnbixbIjsiLCJ8Il0sImFycmF5Um93U2VwYXJhdG9yIiksdGhpcy5sb2NhbGVMYW5nPXpjKFdlLCJzdHJpbmciLCJsb2NhbGVM''@;'; put 'put ''YW5nIiksdGhpcy5mdW5jdGlvblBsdWdpbnM9Wy4uLnZlPz9oMi5kZWZhdWx0Q29uZmlnLmZ1bmN0aW9uUGx1Z2luc10sdGhpcy5zbWFydFJvdW5kaW5nPXpjKEhyLCJib29sZWFuIiwic21hcnRSb3VuZGluZyIpLHRoaXMuZXZhbHVhdGVOdWxsVG9aZXJvPXpjKFosImJvb2xlYW4iLCJldmFs''@;'; put 'put ''dWF0ZU51bGxUb1plcm8iKSx0aGlzLm51bGxZZWFyPXpjKHFyLCJudW1iZXIiLCJudWxsWWVhciIpLG9BKHRoaXMubnVsbFllYXIsIm51bGxZZWFyIiwwKSxmdW5jdGlvbiBwZW4obixlLHQpe2lmKG4+dCl0aHJvdyBuZXcgeEp0KGUsdCl9KHRoaXMubnVsbFllYXIsIm51bGxZZWFyIiwxMDAp''@;'; put 'put ''LHRoaXMucHJlY2lzaW9uUm91bmRpbmc9emMoZm4sIm51bWJlciIsInByZWNpc2lvblJvdW5kaW5nIiksb0EodGhpcy5wcmVjaXNpb25Sb3VuZGluZywicHJlY2lzaW9uUm91bmRpbmciLDApLHRoaXMucHJlY2lzaW9uRXBzaWxvbj16YyhyaSwibnVtYmVyIiwicHJlY2lzaW9uRXBzaWxvbiIp''@;'; put 'put ''LG9BKHRoaXMucHJlY2lzaW9uRXBzaWxvbiwicHJlY2lzaW9uRXBzaWxvbiIsMCksdGhpcy51c2VDb2x1bW5JbmRleD16Yyh4aSwiYm9vbGVhbiIsInVzZUNvbHVtbkluZGV4IiksdGhpcy51c2VTdGF0cz16YyhQbywiYm9vbGVhbiIsInVzZVN0YXRzIiksdGhpcy5iaW5hcnlTZWFyY2hUaHJl''@;'; put 'put ''c2hvbGQ9aT8/aDIuZGVmYXVsdENvbmZpZy5iaW5hcnlTZWFyY2hUaHJlc2hvbGQsdGhpcy5wYXJzZURhdGVUaW1lPXpjKFRyLCJmdW5jdGlvbiIsInBhcnNlRGF0ZVRpbWUiKSx0aGlzLnN0cmluZ2lmeURhdGVUaW1lPXpjKHlyLCJmdW5jdGlvbiIsInN0cmluZ2lmeURhdGVUaW1lIiksdGhp''@;'; put 'put ''cy5zdHJpbmdpZnlEdXJhdGlvbj16YyhBbiwiZnVuY3Rpb24iLCJzdHJpbmdpZnlEdXJhdGlvbiIpLHRoaXMudHJhbnNsYXRpb25QYWNrYWdlPWRmLmdldExhbmd1YWdlKHRoaXMubGFuZ3VhZ2UpLHRoaXMuZXJyb3JNYXBwaW5nPXRoaXMudHJhbnNsYXRpb25QYWNrYWdlLmJ1aWxkRXJyb3JN''@;'; put 'put ''YXBwaW5nKCksdGhpcy5udWxsRGF0ZT1IcSgkbixwUCwiSURhdGUiLCJudWxsRGF0ZSIpLHRoaXMubGVhcFllYXIxOTAwPXpjKEhlLCJib29sZWFuIiwibGVhcFllYXIxOTAwIiksdGhpcy51bmRvTGltaXQ9emMoSG8sIm51bWJlciIsInVuZG9MaW1pdCIpLHRoaXMudXNlUmVndWxhckV4cHJl''@;'; put 'put ''c3Npb25zPXpjKFRvLCJib29sZWFuIiwidXNlUmVndWxhckV4cHJlc3Npb25zIiksdGhpcy51c2VXaWxkY2FyZHM9emMod3MsImJvb2xlYW4iLCJ1c2VXaWxkY2FyZHMiKSx0aGlzLm1hdGNoV2hvbGVDZWxsPXpjKEt0LCJib29sZWFuIiwibWF0Y2hXaG9sZUNlbGwiKSxvQSh0aGlzLnVuZG9M''@;'; put 'put ''aW1pdCwidW5kb0xpbWl0IiwwKSx0aGlzLm1heFJvd3M9emMoVG4sIm51bWJlciIsIm1heFJvd3MiKSxvQSh0aGlzLm1heFJvd3MsIm1heFJvd3MiLDEpLHRoaXMubWF4Q29sdW1ucz16YyhDbiwibnVtYmVyIiwibWF4Q29sdW1ucyIpLHRoaXMuY3VycmVuY3lTeW1ib2w9dGhpcy5zZXR1cEN1''@;'; put 'put ''cnJlbmN5U3ltYm9sKGcpLG9BKHRoaXMubWF4Q29sdW1ucywibWF4Q29sdW1ucyIsMSksdGhpcy5jb250ZXh0PXUsJFdlLnNldCh0aGlzLHtsaWNlbnNlS2V5VmFsaWRpdHlTdGF0ZTpCZW4odGhpcy5saWNlbnNlS2V5KX0pLF9XZSh7dmFsdWU6dGhpcy5kZWNpbWFsU2VwYXJhdG9yLG5hbWU6''@;'; put 'put ''ImRlY2ltYWxTZXBhcmF0b3IifSx7dmFsdWU6dGhpcy5mdW5jdGlvbkFyZ1NlcGFyYXRvcixuYW1lOiJmdW5jdGlvbkFyZ1NlcGFyYXRvciJ9LHt2YWx1ZTp0aGlzLnRob3VzYW5kU2VwYXJhdG9yLG5hbWU6InRob3VzYW5kU2VwYXJhdG9yIn0pLF9XZSh7dmFsdWU6dGhpcy5hcnJheVJvd1Nl''@;'; put 'put ''cGFyYXRvcixuYW1lOiJhcnJheVJvd1NlcGFyYXRvciJ9LHt2YWx1ZTp0aGlzLmFycmF5Q29sdW1uU2VwYXJhdG9yLG5hbWU6ImFycmF5Q29sdW1uU2VwYXJhdG9yIn0pfXNldHVwQ3VycmVuY3lTeW1ib2woZSl7Y29uc3QgdD1bLi4uSHEoZSxBcnJheS5pc0FycmF5LCJhcnJheSIsImN1cnJl''@;'; put 'put ''bmN5U3ltYm9sIildO3JldHVybiB0LmZvckVhY2gocj0+e2lmKCJzdHJpbmciIT10eXBlb2Ygcil0aHJvdyBuZXcgU2MoInN0cmluZ1tdIiwiY3VycmVuY3lTeW1ib2wiKTtpZigiIj09PXIpdGhyb3cgbmV3IE1KdCgiY3VycmVuY3lTeW1ib2wiKX0pLHR9Z2V0IGxpY2Vuc2VLZXlWYWxpZGl0''@;'; put 'put ''eVN0YXRlKCl7cmV0dXJuICRXZS5nZXQodGhpcykubGljZW5zZUtleVZhbGlkaXR5U3RhdGV9Z2V0Q29uZmlnKCl7cmV0dXJuIHFXZSh0aGlzKX1tZXJnZUNvbmZpZyhlKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRDb25maWcoKSxlKTtyZXR1cm4gaDIud2FybkRlcHJlY2F0''@;'; put 'put ''ZWRPcHRpb25zKGUpLG5ldyBoMih0LCExKX1zdGF0aWMgd2FybkRlcHJlY2F0ZWRPcHRpb25zKGUpe2gyLndhcm5EZXByZWNhdGVkSWZVc2VkKGUuYmluYXJ5U2VhcmNoVGhyZXNob2xkLCJiaW5hcnlTZWFyY2hUaHJlc2hvbGQiLCIxLjEiKX1zdGF0aWMgd2FybkRlcHJlY2F0ZWRJZlVzZWQo''@;'; put 'put ''ZSx0LHIsaSl7dm9pZCAwIT09ZSYmY29uc29sZS53YXJuKHZvaWQgMD09PWk/YCR7dH0gb3B0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgJHtyfWA6YCR7dH0gb3B0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgJHtyfSwgcGxlYXNlIHVzZSAke2l9YCl9fWZ1bmN0aW9uIHFXZShuKXt2YXIgZTtj''@;'; put 'put ''b25zdCB0PXt9O2Zvcihjb25zdCByIGluIGgyLmRlZmF1bHRDb25maWcpe2NvbnN0IGk9bnVsbCE9PShlPW5bcl0pJiZ2b2lkIDAhPT1lP2U6aDIuZGVmYXVsdENvbmZpZ1tyXTt0W3JdPUFycmF5LmlzQXJyYXkoaSk/Wy4uLmldOml9cmV0dXJuIHR9aDIuZGVmYXVsdENvbmZpZz17YWNjZW50''@;'; put 'put ''U2Vuc2l0aXZlOiExLGJpbmFyeVNlYXJjaFRocmVzaG9sZDoyMCxjdXJyZW5jeVN5bWJvbDpbIiQiXSxjYXNlU2Vuc2l0aXZlOiExLGNhc2VGaXJzdDoibG93ZXIiLGNvbnRleHQ6dm9pZCAwLGNob29zZUFkZHJlc3NNYXBwaW5nUG9saWN5Om5ldyBjbGFzcyBrZW57Y2FsbCgpe3JldHVybiBH''@;'; put 'put ''SnR9fSxkYXRlRm9ybWF0czpbIkREL01NL1lZWVkiLCJERC9NTS9ZWSJdLGRlY2ltYWxTZXBhcmF0b3I6Ii4iLGV2YWx1YXRlTnVsbFRvWmVybzohMSxmdW5jdGlvbkFyZ1NlcGFyYXRvcjoiLCIsZnVuY3Rpb25QbHVnaW5zOltdLGlnbm9yZVB1bmN0dWF0aW9uOiExLGxhbmd1YWdlOiJlbkdC''@;'; put 'put ''IixpZ25vcmVXaGl0ZVNwYWNlOiJzdGFuZGFyZCIsbGljZW5zZUtleToiIixsZWFwWWVhcjE5MDA6ITEsbG9jYWxlTGFuZzoiZW4iLG1hdGNoV2hvbGVDZWxsOiEwLGFycmF5Q29sdW1uU2VwYXJhdG9yOiIsIixhcnJheVJvd1NlcGFyYXRvcjoiOyIsbWF4Um93czo0ZTQsbWF4Q29sdW1uczox''@;'; put 'put ''ODI3OCxudWxsWWVhcjozMCxudWxsRGF0ZTp7eWVhcjoxODk5LG1vbnRoOjEyLGRheTozMH0scGFyc2VEYXRlVGltZTpmdW5jdGlvbiB5ZW4obixlLHQpe2lmKHZvaWQgMD09PWUmJnZvaWQgMD09PXQpcmV0dXJuO2xldCByPW4ucmVwbGFjZShtZW4sIiAiKS50cmltKCkudG9Mb3dlckNhc2Uo''@;'; put 'put ''KTtpZighZnVuY3Rpb24gQ2VuKG4pe3JldHVybiBnZW4udGVzdChuKX0ocikpcmV0dXJuO2xldCBpPXIuc3Vic3RyaW5nKHIubGVuZ3RoLTIpOyJhbSI9PT1pfHwicG0iPT09aT9yPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMikudHJpbSgpOihpPXIuc3Vic3RyaW5nKHIubGVuZ3RoLTEpLCJh''@;'; put 'put ''Ij09PWl8fCJwIj09PWk/cj1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTEpLnRyaW0oKTppPXZvaWQgMCk7Y29uc3Qgbz1yLnNwbGl0KHlXZSk7by5sZW5ndGg+PTImJm9bby5sZW5ndGgtMl0uaW5jbHVkZXMoIjoiKSYmKG9bby5sZW5ndGgtMl09b1tvLmxlbmd0aC0yXSsiLiIrb1tvLmxlbmd0''@;'; put 'put ''aC0xXSxvLnBvcCgpKTtjb25zdCBhPW9bby5sZW5ndGgtMV0uc3BsaXQoIjoiKTtpZih2b2lkIDAhPT1pJiZhLnB1c2goaSksMT09PW8ubGVuZ3RoKXJldHVybiB3V2UoYSx0KTtpZigxPT09YS5sZW5ndGgpcmV0dXJuIENXZShvLGUpO2NvbnN0IGw9Q1dlKG8uc2xpY2UoMCxvLmxlbmd0aC0x''@;'; put 'put ''KSxlKSx1PXdXZShhLHQpO3JldHVybiB2b2lkIDAhPT1sP3ZvaWQgMD09PXU/dm9pZCAwOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxsKSx1KTp2b2lkIDB9LHByZWNpc2lvbkVwc2lsb246MWUtMTMscHJlY2lzaW9uUm91bmRpbmc6MTQsc21hcnRSb3VuZGluZzohMCxzdHJpbmdp''@;'; put 'put ''ZnlEYXRlVGltZTpmdW5jdGlvbiBGZW4obixlKXtjb25zdCB0PWNtZShlKTtpZih2b2lkIDA9PT10KXJldHVybjtjb25zdCByPXQudG9rZW5zO2xldCBpPSIiLG89ITE7Y29uc3QgYT1yLnNvbWUobD0+bC50eXBlPT09VzYuRk9STUFUJiYoImEvcCI9PT1sLnZhbHVlfHwiQS9QIj09PWwudmFs''@;'; put 'put ''dWV8fCJhbS9wbSI9PT1sLnZhbHVlfHwiQU0vUE0iPT09bC52YWx1ZSkpO2ZvcihsZXQgbD0wO2w8ci5sZW5ndGg7bCsrKXtjb25zdCB1PXJbbF07aWYodS50eXBlIT09VzYuRlJFRV9URVhUKXN3aXRjaCh1LnZhbHVlLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaCI6Y2FzZSJoaCI6bz0hMCxpKz1y''@;'; put 'put ''cChhPyhuLmhvdXJzKzExKSUxMisxOm4uaG91cnMsdS52YWx1ZS5sZW5ndGgpO2JyZWFrO2Nhc2UiZCI6Y2FzZSJkZCI6aSs9cnAobi5kYXksdS52YWx1ZS5sZW5ndGgpO2JyZWFrO2Nhc2UicyI6Y2FzZSJzcyI6aSs9cnAoTWF0aC5mbG9vcihuLnNlY29uZHMpLHUudmFsdWUubGVuZ3RoKTti''@;'; put 'put ''cmVhaztjYXNlIm0iOmNhc2UibW0iOmwrMTxyLmxlbmd0aCYmcltsKzFdLnZhbHVlLnN0YXJ0c1dpdGgoIjoiKSYmKG89ITApLGkrPXJwKG8/bi5taW51dGVzOm4ubW9udGgsdS52YWx1ZS5sZW5ndGgpLG89ITA7YnJlYWs7Y2FzZSJ5eSI6aSs9cnAobi55ZWFyJTEwMCx1LnZhbHVlLmxlbmd0''@;'; put 'put ''aCk7YnJlYWs7Y2FzZSJ5eXl5IjppKz1uLnllYXI7YnJlYWs7Y2FzZSJhbS9wbSI6Y2FzZSJhL3AiOntjb25zdFtnLEVdPXUudmFsdWUuc3BsaXQoIi8iKTtpKz1uLmhvdXJzPDEyP2c6RTticmVha31kZWZhdWx0OmlmKGltZS50ZXN0KHUudmFsdWUpKXtjb25zdCBnPXUudmFsdWUubGVuZ3Ro''@;'; put 'put ''LTM7aSs9YCR7bi5zZWNvbmRzPDEwPyIwIjoiIn0ke01hdGguZmxvb3Iobi5zZWNvbmRzKk1hdGgucG93KDEwLGcpKS9NYXRoLnBvdygxMCxnKX1gO2NvbnRpbnVlfXJldHVybn1lbHNlIGkrPXUudmFsdWV9cmV0dXJuIGl9LHN0cmluZ2lmeUR1cmF0aW9uOmZ1bmN0aW9uIE5lbihuLGUpe2Nv''@;'; put 'put ''bnN0IHQ9Y21lKGUpO2lmKHZvaWQgMD09PXQpcmV0dXJuO2NvbnN0IHI9dC50b2tlbnM7bGV0IGk9IiI7Zm9yKGNvbnN0IG8gb2YgcilpZihvLnR5cGUhPT1XNi5GUkVFX1RFWFQpc3dpdGNoKG8udmFsdWUudG9Mb3dlckNhc2UoKSl7Y2FzZSJoIjpjYXNlImhoIjppKz1ycChuLmhvdXJzLG8u''@;'; put 'put ''dmFsdWUubGVuZ3RoKSxuLmhvdXJzPTA7YnJlYWs7Y2FzZSJbaGhdIjppKz1ycChuLmhvdXJzLG8udmFsdWUubGVuZ3RoLTIpLG4uaG91cnM9MDticmVhaztjYXNlIm0iOmNhc2UibW0iOmkrPXJwKG4ubWludXRlcyxvLnZhbHVlLmxlbmd0aCksbi5taW51dGVzPTA7YnJlYWs7Y2FzZSJbbW1d''@;'; put 'put ''IjppKz1ycChuLm1pbnV0ZXMrNjAqbi5ob3VycyxvLnZhbHVlLmxlbmd0aC0yKSxuLm1pbnV0ZXM9MCxuLmhvdXJzPTA7YnJlYWs7Y2FzZSJzIjpjYXNlInNzIjppKz1ycChNYXRoLmZsb29yKG4uc2Vjb25kcyksby52YWx1ZS5sZW5ndGgpO2JyZWFrO2RlZmF1bHQ6aWYoaW1lLnRlc3Qoby52''@;'; put 'put ''YWx1ZSkpe2NvbnN0IGE9TWF0aC5tYXgoby52YWx1ZS5sZW5ndGgtMywwKTtpKz1gJHtuLnNlY29uZHM8MTA/IjAiOiIifSR7TWF0aC5mbG9vcihuLnNlY29uZHMqTWF0aC5wb3coMTAsYSkpL01hdGgucG93KDEwLGEpfWA7Y29udGludWV9cmV0dXJufWVsc2UgaSs9by52YWx1ZTtyZXR1cm4g''@;'; put 'put ''aX0sdGltZUZvcm1hdHM6WyJoaDptbSIsImhoOm1tOnNzLnNzcyJdLHRob3VzYW5kU2VwYXJhdG9yOiIiLHVuZG9MaW1pdDoyMCx1c2VSZWd1bGFyRXhwcmVzc2lvbnM6ITEsdXNlV2lsZGNhcmRzOiEwLHVzZUNvbHVtbkluZGV4OiExLHVzZVN0YXRzOiExLHVzZUFycmF5QXJpdGhtZXRpYzoh''@;'; put 'put ''MX07Y29uc3QgbW1lPXtlcnJvcnM6e0NZQ0xFOiIjQ1lDTEUhIixESVZfQllfWkVSTzoiI0RJVi8wISIsRVJST1I6IiNFUlJPUiEiLE5BOiIjTi9BIixOQU1FOiIjTkFNRT8iLE5VTToiI05VTSEiLFJFRjoiI1JFRiEiLFNQSUxMOiIjU1BJTEwhIixWQUxVRToiI1ZBTFVFISJ9LGZ1bmN0aW9u''@;'; put 'put ''czp7RklMVEVSOiJGSUxURVIiLEFERFJFU1M6IkFERFJFU1MiLEFSUkFZX0NPTlNUUkFJTjoiQVJSQVlfQ09OU1RSQUlOIixBUlJBWUZPUk1VTEE6IkFSUkFZRk9STVVMQSIsQUJTOiJBQlMiLEFDT1M6IkFDT1MiLEFDT1NIOiJBQ09TSCIsQUNPVDoiQUNPVCIsQUNPVEg6IkFDT1RIIixBTkQ6''@;'; put 'put ''IkFORCIsQVJBQklDOiJBUkFCSUMiLEFTSU46IkFTSU4iLEFTSU5IOiJBU0lOSCIsQVRBTjI6IkFUQU4yIixBVEFOOiJBVEFOIixBVEFOSDoiQVRBTkgiLEFWRVJBR0U6IkFWRVJBR0UiLEFWRVJBR0VBOiJBVkVSQUdFQSIsQVZFUkFHRUlGOiJBVkVSQUdFSUYiLEJBU0U6IkJBU0UiLEJJTjJE''@;'; put 'put ''RUM6IkJJTjJERUMiLEJJTjJIRVg6IkJJTjJIRVgiLEJJTjJPQ1Q6IkJJTjJPQ1QiLEJJVEFORDoiQklUQU5EIixCSVRMU0hJRlQ6IkJJVExTSElGVCIsQklUT1I6IkJJVE9SIixCSVRSU0hJRlQ6IkJJVFJTSElGVCIsQklUWE9SOiJCSVRYT1IiLENFSUxJTkc6IkNFSUxJTkciLENIQVI6IkNI''@;'; put 'put ''QVIiLENIT09TRToiQ0hPT1NFIixDTEVBTjoiQ0xFQU4iLENPREU6IkNPREUiLENPTFVNTjoiQ09MVU1OIixDT0xVTU5TOiJDT0xVTU5TIixDT05DQVRFTkFURToiQ09OQ0FURU5BVEUiLENPUlJFTDoiQ09SUkVMIixDT1M6IkNPUyIsQ09TSDoiQ09TSCIsQ09UOiJDT1QiLENPVEg6IkNPVEgi''@;'; put 'put ''LENPVU5UOiJDT1VOVCIsQ09VTlRBOiJDT1VOVEEiLENPVU5UQkxBTks6IkNPVU5UQkxBTksiLENPVU5USUY6IkNPVU5USUYiLENPVU5USUZTOiJDT1VOVElGUyIsQ09VTlRVTklRVUU6IkNPVU5UVU5JUVVFIixDU0M6IkNTQyIsQ1NDSDoiQ1NDSCIsQ1VNSVBNVDoiQ1VNSVBNVCIsQ1VNUFJJ''@;'; put 'put ''TkM6IkNVTVBSSU5DIixEQVRFOiJEQVRFIixEQVRFRElGOiJEQVRFRElGIixEQVRFVkFMVUU6IkRBVEVWQUxVRSIsREFZOiJEQVkiLERBWVMzNjA6IkRBWVMzNjAiLERBWVM6IkRBWVMiLERCOiJEQiIsRERCOiJEREIiLERFQzJCSU46IkRFQzJCSU4iLERFQzJIRVg6IkRFQzJIRVgiLERFQzJP''@;'; put 'put ''Q1Q6IkRFQzJPQ1QiLERFQ0lNQUw6IkRFQ0lNQUwiLERFR1JFRVM6IkRFR1JFRVMiLERFTFRBOiJERUxUQSIsRE9MTEFSREU6IkRPTExBUkRFIixET0xMQVJGUjoiRE9MTEFSRlIiLEVEQVRFOiJFREFURSIsRUZGRUNUOiJFRkZFQ1QiLEVPTU9OVEg6IkVPTU9OVEgiLEVSRjoiRVJGIixFUkZD''@;'; put 'put ''OiJFUkZDIixFVkVOOiJFVkVOIixFWEFDVDoiRVhBQ1QiLEVYUDoiRVhQIixGQUxTRToiRkFMU0UiLEZJTkQ6IkZJTkQiLEZPUk1VTEFURVhUOiJGT1JNVUxBVEVYVCIsRlY6IkZWIixGVlNDSEVEVUxFOiJGVlNDSEVEVUxFIixIRVgyQklOOiJIRVgyQklOIixIRVgyREVDOiJIRVgyREVDIixI''@;'; put 'put ''RVgyT0NUOiJIRVgyT0NUIixITE9PS1VQOiJITE9PS1VQIixIT1VSOiJIT1VSIixIWVBFUkxJTks6IkhZUEVSTElOSyIsSUY6IklGIixJRkVSUk9SOiJJRkVSUk9SIixJRk5BOiJJRk5BIixJRlM6IklGUyIsSU5ERVg6IklOREVYIixJTlQ6IklOVCIsSU5URVJWQUw6IklOVEVSVkFMIixJUE1U''@;'; put 'put ''OiJJUE1UIixJU0JJTkFSWToiSVNCSU5BUlkiLElTQkxBTks6IklTQkxBTksiLElTRVJSOiJJU0VSUiIsSVNFUlJPUjoiSVNFUlJPUiIsSVNFVkVOOiJJU0VWRU4iLElTRk9STVVMQToiSVNGT1JNVUxBIixJU0xPR0lDQUw6IklTTE9HSUNBTCIsSVNOQToiSVNOQSIsSVNOT05URVhUOiJJU05P''@;'; put 'put ''TlRFWFQiLElTTlVNQkVSOiJJU05VTUJFUiIsSVNPREQ6IklTT0REIixJU09XRUVLTlVNOiJJU09XRUVLTlVNIixJU1BNVDoiSVNQTVQiLElTUkVGOiJJU1JFRiIsSVNURVhUOiJJU1RFWFQiLExFRlQ6IkxFRlQiLExFTjoiTEVOIixMTjoiTE4iLExPRzEwOiJMT0cxMCIsTE9HOiJMT0ciLExP''@;'; put 'put ''V0VSOiJMT1dFUiIsTUFUQ0g6Ik1BVENIIixNQVg6Ik1BWCIsTUFYQToiTUFYQSIsTUFYSUZTOiJNQVhJRlMiLE1BWFBPT0w6Ik1BWFBPT0wiLE1FRElBTjoiTUVESUFOIixNRURJQU5QT09MOiJNRURJQU5QT09MIixNSUQ6Ik1JRCIsTUlOOiJNSU4iLE1JTkE6Ik1JTkEiLE1JTklGUzoiTUlO''@;'; put 'put ''SUZTIixNSU5VVEU6Ik1JTlVURSIsTUlSUjoiTUlSUiIsTU1VTFQ6Ik1NVUxUIixNT0Q6Ik1PRCIsTU9OVEg6Ik1PTlRIIixOQToiTkEiLE5FVFdPUktEQVlTOiJORVRXT1JLREFZUyIsIk5FVFdPUktEQVlTLklOVEwiOiJORVRXT1JLREFZUy5JTlRMIixOT01JTkFMOiJOT01JTkFMIixOT1Q6''@;'; put 'put ''Ik5PVCIsTk9XOiJOT1ciLE5QRVI6Ik5QRVIiLE5QVjoiTlBWIixPQ1QyQklOOiJPQ1QyQklOIixPQ1QyREVDOiJPQ1QyREVDIixPQ1QySEVYOiJPQ1QySEVYIixPREQ6Ik9ERCIsT0ZGU0VUOiJPRkZTRVQiLE9SOiJPUiIsUEk6IlBJIixQTVQ6IlBNVCIsUERVUkFUSU9OOiJQRFVSQVRJT04i''@;'; put 'put ''LFBST0RVQ1Q6IlBST0RVQ1QiLFBPV0VSOiJQT1dFUiIsUFBNVDoiUFBNVCIsUFJPUEVSOiJQUk9QRVIiLFBWOiJQViIsUkFESUFOUzoiUkFESUFOUyIsUkFORDoiUkFORCIsUkFURToiUkFURSIsUkVQTEFDRToiUkVQTEFDRSIsUkVQVDoiUkVQVCIsUklHSFQ6IlJJR0hUIixST01BTjoiUk9N''@;'; put 'put ''QU4iLFJPVU5EOiJST1VORCIsUk9VTkRET1dOOiJST1VORERPV04iLFJPVU5EVVA6IlJPVU5EVVAiLFJPVzoiUk9XIixST1dTOiJST1dTIixSUkk6IlJSSSIsU0VBUkNIOiJTRUFSQ0giLFNFQzoiU0VDIixTRUNIOiJTRUNIIixTRUNPTkQ6IlNFQ09ORCIsU0hFRVQ6IlNIRUVUIixTSEVFVFM6''@;'; put 'put ''IlNIRUVUUyIsU0lOOiJTSU4iLFNJTkg6IlNJTkgiLFNMTjoiU0xOIixTUExJVDoiU1BMSVQiLFNRUlQ6IlNRUlQiLFNUREVWQToiU1RERVZBIiwiU1RERVYuUCI6IlNUREVWLlAiLFNUREVWUEE6IlNUREVWUEEiLCJTVERFVi5TIjoiU1RERVYuUyIsU1VCU1RJVFVURToiU1VCU1RJVFVURSIs''@;'; put 'put ''U1VCVE9UQUw6IlNVQlRPVEFMIixTVU06IlNVTSIsU1VNSUY6IlNVTUlGIixTVU1JRlM6IlNVTUlGUyIsU1VNUFJPRFVDVDoiU1VNUFJPRFVDVCIsU1VNU1E6IlNVTVNRIixTV0lUQ0g6IlNXSVRDSCIsU1lEOiJTWUQiLFQ6IlQiLFRBTjoiVEFOIixUQU5IOiJUQU5IIixUQklMTEVROiJUQklM''@;'; put 'put ''TEVRIixUQklMTFBSSUNFOiJUQklMTFBSSUNFIixUQklMTFlJRUxEOiJUQklMTFlJRUxEIixURVhUOiJURVhUIixUSU1FOiJUSU1FIixUSU1FVkFMVUU6IlRJTUVWQUxVRSIsVE9EQVk6IlRPREFZIixUUkFOU1BPU0U6IlRSQU5TUE9TRSIsVFJJTToiVFJJTSIsVFJVRToiVFJVRSIsVFJVTkM6''@;'; put 'put ''IlRSVU5DIixVTklDSEFSOiJVTklDSEFSIixVTklDT0RFOiJVTklDT0RFIixVUFBFUjoiVVBQRVIiLFZBUkE6IlZBUkEiLCJWQVIuUCI6IlZBUi5QIixWQVJQQToiVkFSUEEiLCJWQVIuUyI6IlZBUi5TIixWTE9PS1VQOiJWTE9PS1VQIixXRUVLREFZOiJXRUVLREFZIixXRUVLTlVNOiJXRUVL''@;'; put 'put ''TlVNIixXT1JLREFZOiJXT1JLREFZIiwiV09SS0RBWS5JTlRMIjoiV09SS0RBWS5JTlRMIixYTlBWOiJYTlBWIixYT1I6IlhPUiIsWUVBUjoiWUVBUiIsWUVBUkZSQUM6IllFQVJGUkFDIiwiSEYuQUREIjoiSEYuQUREIiwiSEYuQ09OQ0FUIjoiSEYuQ09OQ0FUIiwiSEYuRElWSURFIjoiSEYu''@;'; put 'put ''RElWSURFIiwiSEYuRVEiOiJIRi5FUSIsIkhGLkdUIjoiSEYuR1QiLCJIRi5HVEUiOiJIRi5HVEUiLCJIRi5MVCI6IkhGLkxUIiwiSEYuTFRFIjoiSEYuTFRFIiwiSEYuTUlOVVMiOiJIRi5NSU5VUyIsIkhGLk1VTFRJUExZIjoiSEYuTVVMVElQTFkiLCJIRi5ORSI6IkhGLk5FIiwiSEYuUE9X''@;'; put 'put ''IjoiSEYuUE9XIiwiSEYuVU1JTlVTIjoiSEYuVU1JTlVTIiwiSEYuVU5BUllfUEVSQ0VOVCI6IkhGLlVOQVJZX1BFUkNFTlQiLCJIRi5VUExVUyI6IkhGLlVQTFVTIixWQVJQOiJWQVJQIixWQVI6IlZBUiIsU1RERVZQOiJTVERFVlAiLFNUREVWOiJTVERFViIsIkVYUE9OLkRJU1QiOiJFWFBP''@;'; put 'put ''Ti5ESVNUIixGSVNIRVI6IkZJU0hFUiIsRklTSEVSSU5WOiJGSVNIRVJJTlYiLEdBTU1BOiJHQU1NQSIsIkdBTU1BLkRJU1QiOiJHQU1NQS5ESVNUIixHQU1NQUxOOiJHQU1NQUxOIiwiR0FNTUFMTi5QUkVDSVNFIjoiR0FNTUFMTi5QUkVDSVNFIiwiR0FNTUEuSU5WIjoiR0FNTUEuSU5WIixH''@;'; put 'put ''QVVTUzoiR0FVU1MiLEZBQ1Q6IkZBQ1QiLEZBQ1RET1VCTEU6IkZBQ1RET1VCTEUiLENPTUJJTjoiQ09NQklOIixDT01CSU5BOiJDT01CSU5BIixHQ0Q6IkdDRCIsTENNOiJMQ00iLE1ST1VORDoiTVJPVU5EIixNVUxUSU5PTUlBTDoiTVVMVElOT01JQUwiLFFVT1RJRU5UOiJRVU9USUVOVCIs''@;'; put 'put ''UkFOREJFVFdFRU46IlJBTkRCRVRXRUVOIixTRVJJRVNTVU06IlNFUklFU1NVTSIsU0lHTjoiU0lHTiIsU1FSVFBJOiJTUVJUUEkiLFNVTVgyTVkyOiJTVU1YMk1ZMiIsU1VNWDJQWTI6IlNVTVgyUFkyIixTVU1YTVkyOiJTVU1YTVkyIixFWFBPTkRJU1Q6IkVYUE9ORElTVCIsR0FNTUFESVNU''@;'; put 'put ''OiJHQU1NQURJU1QiLEdBTU1BSU5WOiJHQU1NQUlOViIsIkJFVEEuRElTVCI6IkJFVEEuRElTVCIsQkVUQURJU1Q6IkJFVEFESVNUIiwiQkVUQS5JTlYiOiJCRVRBLklOViIsQkVUQUlOVjoiQkVUQUlOViIsIkJJTk9NLkRJU1QiOiJCSU5PTS5ESVNUIixCSU5PTURJU1Q6IkJJTk9NRElTVCIs''@;'; put 'put ''IkJJTk9NLklOViI6IkJJTk9NLklOViIsQkVTU0VMSToiQkVTU0VMSSIsQkVTU0VMSjoiQkVTU0VMSiIsQkVTU0VMSzoiQkVTU0VMSyIsQkVTU0VMWToiQkVTU0VMWSIsIkNISVNRLkRJU1QiOiJDSElTUS5ESVNUIiwiQ0hJU1EuRElTVC5SVCI6IkNISVNRLkRJU1QuUlQiLCJDSElTUS5JTlYi''@;'; put 'put ''OiJDSElTUS5JTlYiLCJDSElTUS5JTlYuUlQiOiJDSElTUS5JTlYuUlQiLENISURJU1Q6IkNISURJU1QiLENISUlOVjoiQ0hJSU5WIiwiRi5ESVNUIjoiRi5ESVNUIiwiRi5ESVNULlJUIjoiRi5ESVNULlJUIiwiRi5JTlYiOiJGLklOViIsIkYuSU5WLlJUIjoiRi5JTlYuUlQiLEZESVNUOiJG''@;'; put 'put ''RElTVCIsRklOVjoiRklOViIsV0VJQlVMTDoiV0VJQlVMTCIsIldFSUJVTEwuRElTVCI6IldFSUJVTEwuRElTVCIsUE9JU1NPTjoiUE9JU1NPTiIsIlBPSVNTT04uRElTVCI6IlBPSVNTT04uRElTVCIsIkhZUEdFT00uRElTVCI6IkhZUEdFT00uRElTVCIsSFlQR0VPTURJU1Q6IkhZUEdFT01E''@;'; put 'put ''SVNUIiwiVC5ESVNUIjoiVC5ESVNUIiwiVC5ESVNULjJUIjoiVC5ESVNULjJUIiwiVC5ESVNULlJUIjoiVC5ESVNULlJUIiwiVC5JTlYiOiJULklOViIsIlQuSU5WLjJUIjoiVC5JTlYuMlQiLFRESVNUOiJURElTVCIsVElOVjoiVElOViIsTE9HSU5WOiJMT0dJTlYiLCJMT0dOT1JNLkRJU1Qi''@;'; put 'put ''OiJMT0dOT1JNLkRJU1QiLCJMT0dOT1JNLklOViI6IkxPR05PUk0uSU5WIixMT0dOT1JNRElTVDoiTE9HTk9STURJU1QiLCJOT1JNLkRJU1QiOiJOT1JNLkRJU1QiLCJOT1JNLklOViI6Ik5PUk0uSU5WIiwiTk9STS5TLkRJU1QiOiJOT1JNLlMuRElTVCIsIk5PUk0uUy5JTlYiOiJOT1JNLlMu''@;'; put 'put ''SU5WIixOT1JNRElTVDoiTk9STURJU1QiLE5PUk1JTlY6Ik5PUk1JTlYiLE5PUk1TRElTVDoiTk9STVNESVNUIixOT1JNU0lOVjoiTk9STVNJTlYiLFBISToiUEhJIiwiTkVHQklOT00uRElTVCI6Ik5FR0JJTk9NLkRJU1QiLE5FR0JJTk9NRElTVDoiTkVHQklOT01ESVNUIixDT01QTEVYOiJD''@;'; put 'put ''T01QTEVYIixJTUFCUzoiSU1BQlMiLElNQUdJTkFSWToiSU1BR0lOQVJZIixJTUFSR1VNRU5UOiJJTUFSR1VNRU5UIixJTUNPTkpVR0FURToiSU1DT05KVUdBVEUiLElNQ09TOiJJTUNPUyIsSU1DT1NIOiJJTUNPU0giLElNQ09UOiJJTUNPVCIsSU1DU0M6IklNQ1NDIixJTUNTQ0g6IklNQ1ND''@;'; put 'put ''SCIsSU1ESVY6IklNRElWIixJTUVYUDoiSU1FWFAiLElNTE46IklNTE4iLElNTE9HMTA6IklNTE9HMTAiLElNTE9HMjoiSU1MT0cyIixJTVBPV0VSOiJJTVBPV0VSIixJTVBST0RVQ1Q6IklNUFJPRFVDVCIsSU1SRUFMOiJJTVJFQUwiLElNU0VDOiJJTVNFQyIsSU1TRUNIOiJJTVNFQ0giLElN''@;'; put 'put ''U0lOOiJJTVNJTiIsSU1TSU5IOiJJTVNJTkgiLElNU1FSVDoiSU1TUVJUIixJTVNVQjoiSU1TVUIiLElNU1VNOiJJTVNVTSIsSU1UQU46IklNVEFOIixMQVJHRToiTEFSR0UiLFNNQUxMOiJTTUFMTCIsQVZFREVWOiJBVkVERVYiLENPTkZJREVOQ0U6IkNPTkZJREVOQ0UiLCJDT05GSURFTkNF''@;'; put 'put ''Lk5PUk0iOiJDT05GSURFTkNFLk5PUk0iLCJDT05GSURFTkNFLlQiOiJDT05GSURFTkNFLlQiLERFVlNROiJERVZTUSIsR0VPTUVBTjoiR0VPTUVBTiIsSEFSTUVBTjoiSEFSTUVBTiIsQ1JJVEJJTk9NOiJDUklUQklOT00iLCJDT1ZBUklBTkNFLlAiOiJDT1ZBUklBTkNFLlAiLCJDT1ZBUklB''@;'; put 'put ''TkNFLlMiOiJDT1ZBUklBTkNFLlMiLENPVkFSOiJDT1ZBUiIsUEVBUlNPTjoiUEVBUlNPTiIsUlNROiJSU1EiLFNUQU5EQVJESVpFOiJTVEFOREFSRElaRSIsIlouVEVTVCI6IlouVEVTVCIsWlRFU1Q6IlpURVNUIiwiRi5URVNUIjoiRi5URVNUIixGVEVTVDoiRlRFU1QiLFNURVlYOiJTVEVZ''@;'; put 'put ''WCIsU0xPUEU6IlNMT1BFIiwiQ0hJU1EuVEVTVCI6IkNISVNRLlRFU1QiLENISVRFU1Q6IkNISVRFU1QiLCJULlRFU1QiOiJULlRFU1QiLFRURVNUOiJUVEVTVCIsU0tFVzoiU0tFVyIsIlNLRVcuUCI6IlNLRVcuUCIsV0VJQlVMTERJU1Q6IldFSUJVTExESVNUIixWQVJTOiJWQVJTIixUSU5W''@;'; put 'put ''MlQ6IlRJTlYyVCIsVERJU1RSVDoiVERJU1RSVCIsVERJU1QyVDoiVERJU1QyVCIsU1RERVZTOiJTVERFVlMiLEZJTlZSVDoiRklOVlJUIixGRElTVFJUOiJGRElTVFJUIixDSElESVNUUlQ6IkNISURJU1RSVCIsQ0hJSU5WUlQ6IkNISUlOVlJUIixDT1ZBUklBTkNFUDoiQ09WQVJJQU5DRVAi''@;'; put 'put ''LENPVkFSSUFOQ0VTOiJDT1ZBUklBTkNFUyIsTE9HTk9STUlOVjoiTE9HTk9STUlOViIsUE9JU1NPTkRJU1Q6IlBPSVNTT05ESVNUIixTS0VXUDoiU0tFV1AiLCJDRUlMSU5HLk1BVEgiOiJDRUlMSU5HLk1BVEgiLEZMT09SOiJGTE9PUiIsIkZMT09SLk1BVEgiOiJGTE9PUi5NQVRIIiwiQ0VJ''@;'; put 'put ''TElORy5QUkVDSVNFIjoiQ0VJTElORy5QUkVDSVNFIiwiRkxPT1IuUFJFQ0lTRSI6IkZMT09SLlBSRUNJU0UiLCJJU08uQ0VJTElORyI6IklTTy5DRUlMSU5HIn0sbGFuZ0NvZGU6ImVuR0IiLHVpOntORVdfU0hFRVRfUFJFRklYOiJTaGVldCJ9fTt2YXIgSEM9ZnVuY3Rpb24obil7cmV0dXJu''@;'; put 'put ''IG5bbi5GdWxseUFic29sdXRlPTFdPSJGdWxseUFic29sdXRlIixuW24uUm93QWJzb2x1dGVDb2xSZWxhdGl2ZT0yXT0iUm93QWJzb2x1dGVDb2xSZWxhdGl2ZSIsbltuLlJvd1JlbGF0aXZlQ29sQWJzb2x1dGU9M109IlJvd1JlbGF0aXZlQ29sQWJzb2x1dGUiLG5bbi5GdWxseVJlbGF0aXZl''@;'; put 'put ''PTRdPSJGdWxseVJlbGF0aXZlIixufShIQ3x8e30pO2NsYXNzIEtXZSBleHRlbmRzIEJze3ZlcmlmeUFkZHJlc3NBcmd1bWVudHMoZSx0LHIsaSl7aWYoaSl7aWYoZTwxfHx0PDEpcmV0dXJuIG5ldyBQdCh0bi5WQUxVRSxkci5MZXNzVGhhbk9uZSl9ZWxzZSBpZihIQy5GdWxseUFic29sdXRl''@;'; put 'put ''PT1yKXtpZihlPDF8fHQ8MSlyZXR1cm4gbmV3IFB0KHRuLlZBTFVFLGRyLkxlc3NUaGFuT25lKX1lbHNlIGlmKEhDLlJvd0Fic29sdXRlQ29sUmVsYXRpdmU9PXIpe2lmKGU8MSlyZXR1cm4gbmV3IFB0KHRuLlZBTFVFLGRyLkxlc3NUaGFuT25lKX1lbHNlIGlmKEhDLlJvd1JlbGF0aXZlQ29s''@;'; put 'put ''QWJzb2x1dGU9PXImJnQ8MSlyZXR1cm4gbmV3IFB0KHRuLlZBTFVFLGRyLkxlc3NUaGFuT25lKX1hZGRyZXNzKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQUREUkVTUyIpLChyLGksbyxhLGwpPT57Y29uc3QgdT10aGlzLnZlcmlmeUFkZHJl''@;'; put 'put ''c3NBcmd1bWVudHMocixpLG8sYSk7aWYodm9pZCAwIT09dSlyZXR1cm4gdTtjb25zdCBnPUVxKGktMSk7bGV0IEU9IiI7bnVsbCE9bCYmKEU9YCR7bH0hYCk7Y29uc3QgTz0wPT1pPyJDIjpgQ1ske2l9XWAsWj0wPT1yPyJSIjpgUlske3J9XWA7cmV0dXJuIEhDLkZ1bGx5UmVsYXRpdmU9PW8/''@;'; put 'put ''YT9gJHtFfSR7Z30ke3J9YDpgJHtFfSR7Wn0ke099YDpIQy5Sb3dSZWxhdGl2ZUNvbEFic29sdXRlPT1vP2E/YCR7RX0kJHtnfSR7cn1gOmAke0V9JHtafUMke2l9YDpIQy5Sb3dBYnNvbHV0ZUNvbFJlbGF0aXZlPT1vP2E/YCR7RX0ke2d9JCR7cn1gOmAke0V9UiR7cn0ke099YDphP2Ake0V9''@;'; put 'put ''JCR7Z30kJHtyfWA6YCR7RX1SJHtyfUMke2l9YH0pfX1LV2UuaW1wbGVtZW50ZWRGdW5jdGlvbnM9e0FERFJFU1M6e21ldGhvZDoiYWRkcmVzcyIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5V''@;'; put 'put ''TUJFUixvcHRpb25hbEFyZzohMCxkZWZhdWx0VmFsdWU6MSxtaW5WYWx1ZToxLG1heFZhbHVlOjR9LHthcmd1bWVudFR5cGU6ZXQuQk9PTEVBTixvcHRpb25hbEFyZzohMCxkZWZhdWx0VmFsdWU6ITB9LHthcmd1bWVudFR5cGU6ZXQuU1RSSU5HLG9wdGlvbmFsQXJnOiEwfV19fTtjbGFzcyBY''@;'; put 'put ''V2UgZXh0ZW5kcyBCc3thcnJheWZvcm11bGEoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJBUlJBWUZPUk1VTEEiKSxyPT5yKX1hcnJheWZvcm11bGFBcnJheVNpemUoZSx0KXtpZigxIT09ZS5hcmdzLmxlbmd0aClyZXR1cm4geWwuZXJyb3Io''@;'; put 'put ''KTtjb25zdCByPXRoaXMubWV0YWRhdGEoIkFSUkFZRk9STVVMQSIpO3JldHVybiBlLmFyZ3MubWFwKG89Pnt2YXIgYTtyZXR1cm4gdGhpcy5hcnJheVNpemVGb3JBc3QobyxuZXcgejYodC5mb3JtdWxhQWRkcmVzcyx0LmFycmF5c0ZsYWd8fG51bGwhPT0oYT1yPy5hcnJheUZ1bmN0aW9uKSYm''@;'; put 'put ''dm9pZCAwIT09YSYmYSkpfSlbMF19YXJyYXljb25zdHJhaW4oZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJBUlJBWV9DT05TVFJBSU4iKSwocixpLG8pPT57aT1NYXRoLm1pbihpLHIuaGVpZ2h0KCkpLG89TWF0aC5taW4obyxyLndpZHRoKCkp''@;'; put 'put ''O2NvbnN0IGE9ci5kYXRhLGw9W107Zm9yKGxldCB1PTA7dTxpO3UrKylsLnB1c2goYVt1XS5zbGljZSgwLG8pKTtyZXR1cm4gbGEub25seVZhbHVlcyhsKX0pfWFycmF5Y29uc3RyYWluQXJyYXlTaXplKGUsdCl7aWYoMyE9PWUuYXJncy5sZW5ndGgpcmV0dXJuIHlsLmVycm9yKCk7Y29uc3Qg''@;'; put 'put ''cj10aGlzLm1ldGFkYXRhKCJBUlJBWV9DT05TVFJBSU4iKSxpPWUuYXJncy5tYXAobD0+e3ZhciB1O3JldHVybiB0aGlzLmFycmF5U2l6ZUZvckFzdChsLG5ldyB6Nih0LmZvcm11bGFBZGRyZXNzLHQuYXJyYXlzRmxhZ3x8bnVsbCE9PSh1PXI/LmFycmF5RnVuY3Rpb24pJiZ2b2lkIDAhPT11''@;'; put 'put ''JiZ1KSl9KTtsZXR7aGVpZ2h0Om8sd2lkdGg6YX09aVswXTtyZXR1cm4gZS5hcmdzWzFdLnR5cGU9PT1ybi5OVU1CRVImJihvPU1hdGgubWluKG8sZS5hcmdzWzFdLnZhbHVlKSksZS5hcmdzWzJdLnR5cGU9PT1ybi5OVU1CRVImJihhPU1hdGgubWluKGEsZS5hcmdzWzJdLnZhbHVlKSksbzwx''@;'; put 'put ''fHxhPDF8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pfHwhTnVtYmVyLmlzSW50ZWdlcihhKT95bC5lcnJvcigpOm5ldyB5bChhLG8pfWZpbHRlcihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkZJTFRFUiIpLChyLC4uLmkpPT57Zm9yKGNvbnN0IGwg''@;'; put 'put ''b2YgaSlpZihyLndpZHRoKCkhPT1sLndpZHRoKCl8fHIuaGVpZ2h0KCkhPT1sLmhlaWdodCgpKXJldHVybiBuZXcgUHQodG4uTkEsZHIuRXF1YWxMZW5ndGgpO2lmKHIud2lkdGgoKT4xJiZyLmhlaWdodCgpPjEpcmV0dXJuIG5ldyBQdCh0bi5OQSxkci5Xcm9uZ0RpbWVuc2lvbik7Y29uc3Qg''@;'; put 'put ''bz1yLmRhdGEsYT1bXTtmb3IobGV0IGw9MDtsPHIuaGVpZ2h0KCk7bCsrKXtjb25zdCB1PVtdO2ZvcihsZXQgZz0wO2c8ci53aWR0aCgpO2crKyl7bGV0IEU9ITA7Zm9yKGNvbnN0IE8gb2YgaSlpZighMCE9PWRXZShPLmRhdGFbbF1bZ10pKXtFPSExO2JyZWFrfUUmJnUucHVzaChvW2xdW2dd''@;'; put 'put ''KX11Lmxlbmd0aD4wJiZhLnB1c2godSl9cmV0dXJuIGEubGVuZ3RoPjA/bGEub25seVZhbHVlcyhhKTpuZXcgUHQodG4uTkEsZHIuRW1wdHlSYW5nZSl9KX1maWx0ZXJBcnJheVNpemUoZSx0KXtpZihlLmFyZ3MubGVuZ3RoPD0xKXJldHVybiB5bC5lcnJvcigpO2NvbnN0IHI9dGhpcy5tZXRh''@;'; put 'put ''ZGF0YSgiRklMVEVSIiksaT1lLmFyZ3MubWFwKGw9Pnt2YXIgdTtyZXR1cm4gdGhpcy5hcnJheVNpemVGb3JBc3QobCxuZXcgejYodC5mb3JtdWxhQWRkcmVzcyx0LmFycmF5c0ZsYWd8fG51bGwhPT0odT1yPy5hcnJheUZ1bmN0aW9uKSYmdm9pZCAwIT09dSYmdSkpfSksbz1NYXRoLm1heCgu''@;'; put 'put ''Li5pLm1hcChsPT5sLndpZHRoKSksYT1NYXRoLm1heCguLi5pLm1hcChsPT5sLmhlaWdodCkpO3JldHVybiBuZXcgeWwobyxhKX19WFdlLmltcGxlbWVudGVkRnVuY3Rpb25zPXtBUlJBWUZPUk1VTEE6e21ldGhvZDoiYXJyYXlmb3JtdWxhIixhcnJheVNpemVNZXRob2Q6ImFycmF5Zm9ybXVs''@;'; put 'put ''YUFycmF5U2l6ZSIsYXJyYXlGdW5jdGlvbjohMCxwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LkFOWX1dfSxBUlJBWV9DT05TVFJBSU46e21ldGhvZDoiYXJyYXljb25zdHJhaW4iLGFycmF5U2l6ZU1ldGhvZDoiYXJyYXljb25zdHJhaW5BcnJheVNpemUiLHBhcmFtZXRlcnM6W3thcmd1''@;'; put 'put ''bWVudFR5cGU6ZXQuUkFOR0V9LHthcmd1bWVudFR5cGU6ZXQuSU5URUdFUixtaW5WYWx1ZToxfSx7YXJndW1lbnRUeXBlOmV0LklOVEVHRVIsbWluVmFsdWU6MX1dLHZlY3Rvcml6YXRpb25Gb3JiaWRkZW46ITB9LEZJTFRFUjp7bWV0aG9kOiJmaWx0ZXIiLGFycmF5U2l6ZU1ldGhvZDoiZmls''@;'; put 'put ''dGVyQXJyYXlTaXplIixhcnJheUZ1bmN0aW9uOiEwLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuUkFOR0V9LHthcmd1bWVudFR5cGU6ZXQuUkFOR0V9XSxyZXBlYXRMYXN0QXJnczoxfX07Y2xhc3MgUVdlIGV4dGVuZHMgQnN7YWJzKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24o''@;'; put 'put ''ZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQUJTIiksTWF0aC5hYnMpfX1RV2UuaW1wbGVtZW50ZWRGdW5jdGlvbnM9e0FCUzp7bWV0aG9kOiJhYnMiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfV19fTtjbGFzcyB0WWUgZXh0ZW5kcyBCc3tiaXRsc2hpZnQoZSx0KXtyZXR1''@;'; put 'put ''cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJCSVRMU0hJRlQiKSxuWWUpfWJpdHJzaGlmdChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkJJVFJTSElGVCIpLHJZZSl9fWZ1bmN0aW9uIG5ZZShuLGUpe3JldHVy''@;'; put 'put ''biBlPDA/clllKG4sLWUpOmlZZShuKk1hdGgucG93KDIsZSkpfWZ1bmN0aW9uIHJZZShuLGUpe3JldHVybiBlPDA/blllKG4sLWUpOmlZZShNYXRoLmZsb29yKG4vTWF0aC5wb3coMixlKSkpfWZ1bmN0aW9uIGlZZShuKXtyZXR1cm4gbj4weGZmZmZmZmZmZmZmZj9uZXcgUHQodG4uTlVNLGRy''@;'; put 'put ''LkJpdHNoaWZ0TG9uZyk6bn10WWUuaW1wbGVtZW50ZWRGdW5jdGlvbnM9e0JJVExTSElGVDp7bWV0aG9kOiJiaXRsc2hpZnQiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuSU5URUdFUixtaW5WYWx1ZTowfSx7YXJndW1lbnRUeXBlOmV0LklOVEVHRVIsbWluVmFsdWU6LTUzLG1heFZh''@;'; put 'put ''bHVlOjUzfV19LEJJVFJTSElGVDp7bWV0aG9kOiJiaXRyc2hpZnQiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuSU5URUdFUixtaW5WYWx1ZTowfSx7YXJndW1lbnRUeXBlOmV0LklOVEVHRVIsbWluVmFsdWU6LTUzLG1heFZhbHVlOjUzfV19fTtjbGFzcyBvWWUgZXh0ZW5kcyBCc3ti''@;'; put 'put ''aXRhbmQoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJCSVRBTkQiKSwocixpKT0+ciZpKX1iaXRvcihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkJJVE9SIiksKHIsaSk9PnJ8aSl9Yml0eG9y''@;'; put 'put ''KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQklUWE9SIiksKHIsaSk9PnJeaSl9fW9ZZS5pbXBsZW1lbnRlZEZ1bmN0aW9ucz17QklUQU5EOnttZXRob2Q6ImJpdGFuZCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5JTlRFR0VSLG1p''@;'; put 'put ''blZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuSU5URUdFUixtaW5WYWx1ZTowfV19LEJJVE9SOnttZXRob2Q6ImJpdG9yIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LklOVEVHRVIsbWluVmFsdWU6MH0se2FyZ3VtZW50VHlwZTpldC5JTlRFR0VSLG1pblZhbHVlOjB9XX0sQklUWE9S''@;'; put 'put ''OnttZXRob2Q6ImJpdHhvciIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5JTlRFR0VSLG1pblZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuSU5URUdFUixtaW5WYWx1ZTowfV19fTtjbGFzcyBhWWUgZXh0ZW5kcyBCc3tsaXRlcmFsVHJ1ZShlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0''@;'; put 'put ''aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlRSVUUiKSwoKT0+ITApfWxpdGVyYWxGYWxzZShlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkZBTFNFIiksKCk9PiExKX1jb25kaXRpb25hbElmKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rp''@;'; put 'put ''b24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiSUYiKSwocixpLG8pPT5yP2k6byl9aWZzKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiSUZTIiksKC4uLnIpPT57Zm9yKGxldCBpPTA7aTxyLmxlbmd0aDtpKz0yKWlmKHJbaV0pcmV0dXJuIHJb''@;'; put 'put ''aSsxXTtyZXR1cm4gbmV3IFB0KHRuLk5BLGRyLk5vQ29uZGl0aW9uTWV0KX0pfWFuZChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkFORCIpLCguLi5yKT0+ci5maWx0ZXIoaT0+dm9pZCAwIT09aSkuZXZlcnkoaT0+ISFpKSl9b3IoZSx0KXty''@;'; put 'put ''ZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJPUiIpLCguLi5yKT0+ci5maWx0ZXIoaT0+dm9pZCAwIT09aSkuc29tZShpPT5pKSl9bm90KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiTk9UIikscj0+IXIp''@;'; put 'put ''fXhvcihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlhPUiIpLCguLi5yKT0+e2xldCBpPTA7cmV0dXJuIHIuZmlsdGVyKG89PnZvaWQgMCE9PW8pLmZvckVhY2gobz0+e28mJmkrK30pLGklMj09MX0pfXN3aXRjaChlLHQpe3JldHVybiB0aGlz''@;'; put 'put ''LnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlNXSVRDSCIpLChyLC4uLmkpPT57Y29uc3Qgbz1pLmxlbmd0aDtsZXQgYT0wO2Zvcig7YSsxPG87YSs9MilpZighKGlbYV1pbnN0YW5jZW9mIFB0KSYmdGhpcy5hcml0aG1ldGljSGVscGVyLmVxKHIsaVthXSkpcmV0dXJuIGlb''@;'; put 'put ''YSsxXTtyZXR1cm4gYTxvP2lbYV06bmV3IFB0KHRuLk5BLGRyLk5vRGVmYXVsdCl9KX1pZmVycm9yKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiSUZFUlJPUiIpLChyLGkpPT5yIGluc3RhbmNlb2YgUHQ/aTpyKX1pZm5hKGUsdCl7cmV0dXJu''@;'; put 'put ''IHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiSUZOQSIpLChyLGkpPT5yIGluc3RhbmNlb2YgUHQmJnIudHlwZT09PXRuLk5BP2k6cil9Y2hvb3NlKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQ0hPT1NFIiksKHIs''@;'; put 'put ''Li4uaSk9PnI+aS5sZW5ndGg/bmV3IFB0KHRuLk5VTSxkci5TZWxlY3Rvcik6aVtyLTFdKX19YVllLmltcGxlbWVudGVkRnVuY3Rpb25zPXtUUlVFOnttZXRob2Q6ImxpdGVyYWxUcnVlIixwYXJhbWV0ZXJzOltdfSxGQUxTRTp7bWV0aG9kOiJsaXRlcmFsRmFsc2UiLHBhcmFtZXRlcnM6W119''@;'; put 'put ''LElGOnttZXRob2Q6ImNvbmRpdGlvbmFsSWYiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuQk9PTEVBTn0se2FyZ3VtZW50VHlwZTpldC5TQ0FMQVIscGFzc1N1YnR5cGU6ITB9LHthcmd1bWVudFR5cGU6ZXQuU0NBTEFSLGRlZmF1bHRWYWx1ZTohMSxwYXNzU3VidHlwZTohMH1dfSxJ''@;'; put 'put ''RlM6e21ldGhvZDoiaWZzIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LkJPT0xFQU59LHthcmd1bWVudFR5cGU6ZXQuU0NBTEFSLHBhc3NTdWJ0eXBlOiEwfV0scmVwZWF0TGFzdEFyZ3M6Mn0sQU5EOnttZXRob2Q6ImFuZCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5CT09M''@;'; put 'put ''RUFOfV0scmVwZWF0TGFzdEFyZ3M6MSxleHBhbmRSYW5nZXM6ITB9LE9SOnttZXRob2Q6Im9yIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LkJPT0xFQU59XSxyZXBlYXRMYXN0QXJnczoxLGV4cGFuZFJhbmdlczohMH0sWE9SOnttZXRob2Q6InhvciIscGFyYW1ldGVyczpbe2FyZ3Vt''@;'; put 'put ''ZW50VHlwZTpldC5CT09MRUFOfV0scmVwZWF0TGFzdEFyZ3M6MSxleHBhbmRSYW5nZXM6ITB9LE5PVDp7bWV0aG9kOiJub3QiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuQk9PTEVBTn1dfSxTV0lUQ0g6e21ldGhvZDoic3dpdGNoIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0''@;'; put 'put ''Lk5PRVJST1J9LHthcmd1bWVudFR5cGU6ZXQuU0NBTEFSLHBhc3NTdWJ0eXBlOiEwfSx7YXJndW1lbnRUeXBlOmV0LlNDQUxBUixwYXNzU3VidHlwZTohMH1dLHJlcGVhdExhc3RBcmdzOjF9LElGRVJST1I6e21ldGhvZDoiaWZlcnJvciIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5T''@;'; put 'put ''Q0FMQVIscGFzc1N1YnR5cGU6ITB9LHthcmd1bWVudFR5cGU6ZXQuU0NBTEFSLHBhc3NTdWJ0eXBlOiEwfV19LElGTkE6e21ldGhvZDoiaWZuYSIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5TQ0FMQVIscGFzc1N1YnR5cGU6ITB9LHthcmd1bWVudFR5cGU6ZXQuU0NBTEFSLHBhc3NT''@;'; put 'put ''dWJ0eXBlOiEwfV19LENIT09TRTp7bWV0aG9kOiJjaG9vc2UiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuSU5URUdFUixtaW5WYWx1ZToxfSx7YXJndW1lbnRUeXBlOmV0LlNDQUxBUixwYXNzU3VidHlwZTohMH1dLHJlcGVhdExhc3RBcmdzOjF9fTtjbGFzcyBzWWUgZXh0ZW5kcyBC''@;'; put 'put ''c3tjaGFyKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQ0hBUiIpLHI9PnI8MXx8cj49MjU2P25ldyBQdCh0bi5WQUxVRSxkci5DaGFyYWN0ZXJDb2RlQm91bmRzKTpTdHJpbmcuZnJvbUNoYXJDb2RlKE1hdGgudHJ1bmMocikpKX11bmljaGFy''@;'; put 'put ''KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQ0hBUiIpLHI9PnI8MXx8cj49MTExNDExMj9uZXcgUHQodG4uVkFMVUUsZHIuQ2hhcmFjdGVyQ29kZUJvdW5kcyk6U3RyaW5nLmZyb21Db2RlUG9pbnQoTWF0aC50cnVuYyhyKSkpfX1zWWUuaW1w''@;'; put 'put ''bGVtZW50ZWRGdW5jdGlvbnM9e0NIQVI6e21ldGhvZDoiY2hhciIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9XX0sVU5JQ0hBUjp7bWV0aG9kOiJ1bmljaGFyIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn1dfX07Y2xhc3MgbFllIGV4dGVuZHMgQnN7''@;'; put 'put ''Y29kZShlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkNPREUiKSxyPT4wPT09ci5sZW5ndGg/bmV3IFB0KHRuLlZBTFVFLGRyLkVtcHR5U3RyaW5nKTpyLmNoYXJDb2RlQXQoMCkpfXVuaWNvZGUoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlv''@;'; put 'put ''bihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJVTklDT0RFIikscj0+e3ZhciBpO3JldHVybiBudWxsIT09KGk9ci5jb2RlUG9pbnRBdCgwKSkmJnZvaWQgMCE9PWk/aTpuZXcgUHQodG4uVkFMVUUsZHIuRW1wdHlTdHJpbmcpfSl9fWxZZS5pbXBsZW1lbnRlZEZ1bmN0aW9ucz17Q09ERTp7bWV0''@;'; put 'put ''aG9kOiJjb2RlIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlNUUklOR31dfSxVTklDT0RFOnttZXRob2Q6InVuaWNvZGUiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuU1RSSU5HfV19fTtjbGFzcyBjWWUgZXh0ZW5kcyBCc3tjb3VudGJsYW5rKGUsdCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''cnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQ09VTlRCTEFOSyIpLCguLi5yKT0+e2xldCBpPTA7cmV0dXJuIHIuZm9yRWFjaChvPT57bz09PWxsJiZpKyt9KSxpfSl9fWNZZS5pbXBsZW1lbnRlZEZ1bmN0aW9ucz17Q09VTlRCTEFOSzp7bWV0aG9kOiJjb3VudGJsYW5rIixw''@;'; put 'put ''YXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlNDQUxBUn1dLHJlcGVhdExhc3RBcmdzOjEsZXhwYW5kUmFuZ2VzOiEwfX07Y2xhc3MgdVllIGV4dGVuZHMgQnN7Y291bnR1bmlxdWUoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJDT1VOVFVO''@;'; put 'put ''SVFVRSIpLCguLi5yKT0+e2NvbnN0IGk9bmV3IFNldCxvPW5ldyBTZXQ7Zm9yKGNvbnN0IGEgb2YgcilhIGluc3RhbmNlb2YgUHQ/by5hZGQoYS50eXBlKToiIiE9PWEmJmkuYWRkKGEpO3JldHVybiBpLnNpemUrby5zaXplfSl9fXVZZS5pbXBsZW1lbnRlZEZ1bmN0aW9ucz17Q09VTlRVTklR''@;'; put 'put ''VUU6e21ldGhvZDoiY291bnR1bmlxdWUiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuU0NBTEFSfV0scmVwZWF0TGFzdEFyZ3M6MSxleHBhbmRSYW5nZXM6ITB9fTtjbGFzcyBkWWUgZXh0ZW5kcyBCc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pc293ZWVr''@;'; put 'put ''bnVtQ29yZT1lPT57Y29uc3QgdD1NYXRoLmZsb29yKHRoaXMuZGF0ZVRpbWVIZWxwZXIucmVsYXRpdmVOdW1iZXJUb0Fic29sdXRlTnVtYmVyKGUpKSxyPXRoaXMuZGF0ZVRpbWVIZWxwZXIubnVtYmVyVG9TaW1wbGVEYXRlKGUpLGk9dGhpcy5kYXRlVGltZUhlbHBlci5kYXRlVG9OdW1iZXIo''@;'; put 'put ''e3llYXI6ci55ZWFyLG1vbnRoOjEsZGF5OjF9KSxvPXRoaXMuZGF0ZVRpbWVIZWxwZXIucmVsYXRpdmVOdW1iZXJUb0Fic29sdXRlTnVtYmVyKGkpLGE9bysoKDQtbyklNys3KSU3LGw9TWF0aC5mbG9vcigodC0xKS83KS1NYXRoLmZsb29yKChhLTEpLzcpKzE7cmV0dXJuIDA9PT1sP3RoaXMu''@;'; put 'put ''aXNvd2Vla251bUNvcmUoZS03KSsxOmx9LHRoaXMuZGF5czM2MENvcmU9KGUsdCxyKT0+e2NvbnN0IGk9dGhpcy5kYXRlVGltZUhlbHBlci5udW1iZXJUb1NpbXBsZURhdGUoZSksbz10aGlzLmRhdGVUaW1lSGVscGVyLm51bWJlclRvU2ltcGxlRGF0ZSh0KTtsZXQgYSxsO3JldHVybiByPyhh''@;'; put 'put ''PVRXZShpKSxsPVRXZShvKSk6W2EsbF09dGhpcy5kYXRlVGltZUhlbHBlci50b0Jhc2lzVVMoaSxvKSwzNjAqKGwueWVhci1hLnllYXIpKzMwKihsLm1vbnRoLWEubW9udGgpK2wuZGF5LWEuZGF5fX1kYXRlKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRh''@;'; put 'put ''ZGF0YSgiREFURSIpLChyLGksbyk9Pntjb25zdCBhPU1hdGgudHJ1bmMobyk7bGV0IGw9TWF0aC50cnVuYyhpKSx1PU1hdGgudHJ1bmMocik7dTx0aGlzLmRhdGVUaW1lSGVscGVyLmdldEVwb2NoWWVhclplcm8oKSYmKHUrPXRoaXMuZGF0ZVRpbWVIZWxwZXIuZ2V0RXBvY2hZZWFyWmVybygp''@;'; put 'put ''KTtjb25zdCBnPU1hdGguZmxvb3IoKGwtMSkvMTIpO3UrPWcsbC09MTIqZztjb25zdCBFPXt5ZWFyOnUsbW9udGg6bCxkYXk6MX07aWYodGhpcy5kYXRlVGltZUhlbHBlci5pc1ZhbGlkRGF0ZShFKSl7bGV0IE89dGhpcy5kYXRlVGltZUhlbHBlci5kYXRlVG9OdW1iZXIoRSkrKGEtMSk7cmV0''@;'; put 'put ''dXJuIE89dGhpcy5kYXRlVGltZUhlbHBlci5nZXRXaXRoaW5Cb3VuZHMoTyksdm9pZCAwPT09Tz9uZXcgUHQodG4uTlVNLGRyLkRhdGVCb3VuZHMpOk99cmV0dXJuIG5ldyBQdCh0bi5WQUxVRSxkci5JbnZhbGlkRGF0ZSl9KX10aW1lKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5h''@;'; put 'put ''cmdzLHQsdGhpcy5tZXRhZGF0YSgiVElNRSIpLChyLGksbyk9Pntjb25zdCBhPWxBKHtob3VyczpNYXRoLnRydW5jKHIpLG1pbnV0ZXM6TWF0aC50cnVuYyhpKSxzZWNvbmRzOk1hdGgudHJ1bmMobyl9KTtyZXR1cm4gYTwwP25ldyBQdCh0bi5OVU0sZHIuTmVnYXRpdmVUaW1lKTphJTF9KX1l''@;'; put 'put ''b21vbnRoKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiRU9NT05USCIpLChyLGkpPT57Y29uc3Qgbz10aGlzLmRhdGVUaW1lSGVscGVyLm51bWJlclRvU2ltcGxlRGF0ZShyKTtsZXQgYT10aGlzLmRhdGVUaW1lSGVscGVyLmRhdGVUb051bWJl''@;'; put 'put ''cih0aGlzLmRhdGVUaW1lSGVscGVyLmVuZE9mTW9udGgoTVdlKG8saSkpKTtyZXR1cm4gYT10aGlzLmRhdGVUaW1lSGVscGVyLmdldFdpdGhpbkJvdW5kcyhhKSx2b2lkIDA9PT1hP25ldyBQdCh0bi5OVU0sZHIuRGF0ZUJvdW5kcyk6YX0pfWRheShlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0''@;'; put 'put ''aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkRBWSIpLHI9PnRoaXMuZGF0ZVRpbWVIZWxwZXIubnVtYmVyVG9TaW1wbGVEYXRlKHIpLmRheSl9ZGF5cyhlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkRBWVMiKSwocixpKT0+TWF0aC50cnVu''@;'; put 'put ''YyhyKS1NYXRoLnRydW5jKGkpKX1tb250aChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIk1PTlRIIikscj0+dGhpcy5kYXRlVGltZUhlbHBlci5udW1iZXJUb1NpbXBsZURhdGUocikubW9udGgpfXllYXIoZSx0KXtyZXR1cm4gdGhpcy5ydW5G''@;'; put 'put ''dW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJZRUFSIikscj0+dGhpcy5kYXRlVGltZUhlbHBlci5udW1iZXJUb1NpbXBsZURhdGUocikueWVhcil9aG91cihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkhPVVIiKSxyPT5zQShsbWUo''@;'; put 'put ''ciklMSkuaG91cnMpfW1pbnV0ZShlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIk1JTlVURSIpLHI9PnNBKGxtZShyKSUxKS5taW51dGVzKX1zZWNvbmQoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRh''@;'; put 'put ''KCJTRUNPTkQiKSxyPT5zQShsbWUociklMSkuc2Vjb25kcyl9dGV4dChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlRFWFQiKSwocixpKT0+RGVuKHIsaSx0aGlzLmNvbmZpZyx0aGlzLmRhdGVUaW1lSGVscGVyKSl9d2Vla2RheShlLHQpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIldFRUtEQVkiKSwocixpKT0+e2NvbnN0IG89TWF0aC5mbG9vcih0aGlzLmRhdGVUaW1lSGVscGVyLnJlbGF0aXZlTnVtYmVyVG9BYnNvbHV0ZU51bWJlcihyKSk7aWYoMz09PWkpcmV0dXJuKG8tMSklNztjb25z''@;'; put 'put ''dCBhPXBZZS5nZXQoaSk7cmV0dXJuIHZvaWQgMD09PWE/bmV3IFB0KHRuLk5VTSxkci5CYWRNb2RlKTooby1hKSU3KzF9KX13ZWVrbnVtKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiV0VFS05VTSIpLChyLGkpPT57Y29uc3Qgbz1NYXRoLmZs''@;'; put 'put ''b29yKHRoaXMuZGF0ZVRpbWVIZWxwZXIucmVsYXRpdmVOdW1iZXJUb0Fic29sdXRlTnVtYmVyKHIpKSxhPXRoaXMuZGF0ZVRpbWVIZWxwZXIubnVtYmVyVG9TaW1wbGVEYXRlKHIpLGw9dGhpcy5kYXRlVGltZUhlbHBlci5kYXRlVG9OdW1iZXIoe3llYXI6YS55ZWFyLG1vbnRoOjEsZGF5OjF9''@;'; put 'put ''KSx1PXRoaXMuZGF0ZVRpbWVIZWxwZXIucmVsYXRpdmVOdW1iZXJUb0Fic29sdXRlTnVtYmVyKGwpO2lmKDIxPT09aSlyZXR1cm4gdGhpcy5pc293ZWVrbnVtQ29yZShyKTtjb25zdCBnPXBZZS5nZXQoaSk7cmV0dXJuIHZvaWQgMD09PWc/bmV3IFB0KHRuLk5VTSxkci5CYWRNb2RlKTpNYXRo''@;'; put 'put ''LmZsb29yKChvLWcpLzcpLU1hdGguZmxvb3IoKHUtZykvNykrMX0pfWlzb3dlZWtudW0oZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJJU09XRUVLTlVNIiksdGhpcy5pc293ZWVrbnVtQ29yZSl9ZGF0ZXZhbHVlKGUsdCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''cnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiREFURVZBTFVFIikscj0+e2NvbnN0e2RhdGVUaW1lOml9PXRoaXMuZGF0ZVRpbWVIZWxwZXIucGFyc2VEYXRlVGltZUZyb21Db25maWdGb3JtYXRzKHIpO3JldHVybiB2b2lkIDA9PT1pP25ldyBQdCh0bi5WQUxVRSxkci5JbmNv''@;'; put 'put ''cnJlY3REYXRlVGltZSk6cFAoaSk/KEVXZShpKT9NYXRoLnRydW5jKGxBKGkpKTowKSt0aGlzLmRhdGVUaW1lSGVscGVyLmRhdGVUb051bWJlcihpKTowfSl9dGltZXZhbHVlKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiVElNRVZBTFVFIiks''@;'; put 'put ''cj0+e2NvbnN0IGk9dGhpcy5kYXRlVGltZUhlbHBlci5kYXRlU3RyaW5nVG9EYXRlTnVtYmVyKHIpO3JldHVybiB2b2lkIDA9PT1pP25ldyBQdCh0bi5WQUxVRSxkci5JbmNvcnJlY3REYXRlVGltZSk6TG8oaSklMX0pfW5vdyhlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0''@;'; put 'put ''LHRoaXMubWV0YWRhdGEoIk5PVyIpLCgpPT57Y29uc3Qgcj1uZXcgRGF0ZShEYXRlLm5vdygpKTtyZXR1cm4gbEEoe2hvdXJzOnIuZ2V0SG91cnMoKSxtaW51dGVzOnIuZ2V0TWludXRlcygpLHNlY29uZHM6ci5nZXRTZWNvbmRzKCl9KSt0aGlzLmRhdGVUaW1lSGVscGVyLmRhdGVUb051bWJl''@;'; put 'put ''cih7eWVhcjpyLmdldEZ1bGxZZWFyKCksbW9udGg6ci5nZXRNb250aCgpKzEsZGF5OnIuZ2V0RGF0ZSgpfSl9KX10b2RheShlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlRPREFZIiksKCk9Pntjb25zdCByPW5ldyBEYXRlKERhdGUubm93KCkp''@;'; put 'put ''O3JldHVybiB0aGlzLmRhdGVUaW1lSGVscGVyLmRhdGVUb051bWJlcih7eWVhcjpyLmdldEZ1bGxZZWFyKCksbW9udGg6ci5nZXRNb250aCgpKzEsZGF5OnIuZ2V0RGF0ZSgpfSl9KX1lZGF0ZShlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkVE''@;'; put 'put ''QVRFIiksKHIsaSk9Pntjb25zdCBhPWZ1bmN0aW9uIFRlbihuKXtyZXR1cm57eWVhcjpuLnllYXIsbW9udGg6bi5tb250aCxkYXk6TWF0aC5taW4obi5kYXksYW1lW24ubW9udGgtMV0pfX0oTVdlKHRoaXMuZGF0ZVRpbWVIZWxwZXIubnVtYmVyVG9TaW1wbGVEYXRlKHIpLGkpKTtsZXQgbD10''@;'; put 'put ''aGlzLmRhdGVUaW1lSGVscGVyLmRhdGVUb051bWJlcihhKTtyZXR1cm4gbD10aGlzLmRhdGVUaW1lSGVscGVyLmdldFdpdGhpbkJvdW5kcyhsKSx2b2lkIDA9PT1sP25ldyBQdCh0bi5OVU0sZHIuRGF0ZUJvdW5kcyk6bH0pfWRhdGVkaWYoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihl''@;'; put 'put ''LmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJEQVRFRElGIiksKHIsaSxvKT0+e2lmKHI+aSlyZXR1cm4gbmV3IFB0KHRuLk5VTSxkci5TdGFydEVuZERhdGUpO2lmKCJEIj09PW8pcmV0dXJuIE1hdGguZmxvb3IoaSktTWF0aC5mbG9vcihyKTtjb25zdCBhPXRoaXMuZGF0ZVRpbWVIZWxwZXIubnVt''@;'; put 'put ''YmVyVG9TaW1wbGVEYXRlKHIpLGw9dGhpcy5kYXRlVGltZUhlbHBlci5udW1iZXJUb1NpbXBsZURhdGUoaSk7c3dpdGNoKG8pe2Nhc2UiTSI6cmV0dXJuIDEyKihsLnllYXItYS55ZWFyKSsobC5tb250aC1hLm1vbnRoKS0obC5kYXk8YS5kYXk/MTowKTtjYXNlIllNIjpyZXR1cm4obC5tb250''@;'; put 'put ''aC1hLm1vbnRoKzEyLShsLmRheTxhLmRheT8xOjApKSUxMjtjYXNlIlkiOnJldHVybiBsLm1vbnRoPmEubW9udGh8fGwubW9udGg9PT1hLm1vbnRoJiZsLmRheT49YS5kYXk/bC55ZWFyLWEueWVhcjpsLnllYXItYS55ZWFyLTE7Y2FzZSJNRCI6cmV0dXJuIGwuZGF5Pj1hLmRheT9sLmRheS1h''@;'; put 'put ''LmRheTp0aGlzLmRhdGVUaW1lSGVscGVyLmRheXNJbk1vbnRoKDE9PT1sLm1vbnRoP2wueWVhci0xOmwueWVhciwxPT09bC5tb250aD8xMjpsLm1vbnRoLTEpK2wuZGF5LWEuZGF5O2Nhc2UiWUQiOnJldHVybiBsLm1vbnRoPmEubW9udGh8fGwubW9udGg9PT1hLm1vbnRoJiZsLmRheT49YS5k''@;'; put 'put ''YXk/TWF0aC5mbG9vcihpKS10aGlzLmRhdGVUaW1lSGVscGVyLmRhdGVUb051bWJlcih7eWVhcjpsLnllYXIsbW9udGg6YS5tb250aCxkYXk6YS5kYXl9KTpNYXRoLmZsb29yKGkpLU1hdGguZmxvb3IociktMzY1KihsLnllYXItYS55ZWFyLTEpLXRoaXMuZGF0ZVRpbWVIZWxwZXIubGVhcFll''@;'; put 'put ''YXJzQ291bnQobC55ZWFyLTEpK3RoaXMuZGF0ZVRpbWVIZWxwZXIubGVhcFllYXJzQ291bnQoYS55ZWFyKTtkZWZhdWx0OnJldHVybiBuZXcgUHQodG4uTlVNLGRyLkJhZE1vZGUpfX0pfWRheXMzNjAoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRh''@;'; put 'put ''KCJEQVlTMzYwIiksdGhpcy5kYXlzMzYwQ29yZSl9eWVhcmZyYWMoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJZRUFSRlJBQyIpLChyLGksbyk9Pntzd2l0Y2goKHI9TWF0aC50cnVuYyhyKSk+KGk9TWF0aC50cnVuYyhpKSkmJihbcixpXT1b''@;'; put 'put ''aSxyXSksbyl7Y2FzZSAwOnJldHVybiB0aGlzLmRheXMzNjBDb3JlKHIsaSwhMSkvMzYwO2Nhc2UgMTpyZXR1cm4oaS1yKS90aGlzLmRhdGVUaW1lSGVscGVyLnllYXJMZW5ndGhGb3JCYXNpcyh0aGlzLmRhdGVUaW1lSGVscGVyLm51bWJlclRvU2ltcGxlRGF0ZShyKSx0aGlzLmRhdGVUaW1l''@;'; put 'put ''SGVscGVyLm51bWJlclRvU2ltcGxlRGF0ZShpKSk7Y2FzZSAyOnJldHVybihpLXIpLzM2MDtjYXNlIDM6cmV0dXJuKGktcikvMzY1O2Nhc2UgNDpyZXR1cm4gdGhpcy5kYXlzMzYwQ29yZShyLGksITApLzM2MH10aHJvdyBuZXcgRXJyb3IoIlNob3VsZCBub3QgYmUgcmVhY2hhYmxlLiIpfSl9''@;'; put 'put ''aW50ZXJ2YWwoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJJTlRFUlZBTCIpLHI9Pntjb25zdCBpPShyPU1hdGgudHJ1bmMocikpJTYwLG89KHI9TWF0aC50cnVuYyhyLzYwKSklNjAsYT0ocj1NYXRoLnRydW5jKHIvNjApKSUyNCxsPShyPU1h''@;'; put 'put ''dGgudHJ1bmMoci8yNCkpJTMwLHU9KHI9TWF0aC50cnVuYyhyLzMwKSklMTIsZz1NYXRoLnRydW5jKHIvMTIpO3JldHVybiJQIisoZz4wP2Ake2d9WWA6IiIpKyh1PjA/YCR7dX1NYDoiIikrKGw+MD9gJHtsfURgOiIiKSsiVCIrKGE+MD9gJHthfUhgOiIiKSsobz4wP2Ake299TWA6IiIpKyhp''@;'; put 'put ''PjA/YCR7aX1TYDoiIil9KX1uZXR3b3JrZGF5cyhlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIk5FVFdPUktEQVlTIiksKHIsaSxvKT0+dGhpcy5uZXR3b3JrZGF5c2NvcmUocixpLDEsbykpfW5ldHdvcmtkYXlzaW50bChlLHQpe3JldHVybiB0''@;'; put 'put ''aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIk5FVFdPUktEQVlTLklOVEwiKSwocixpLG8sYSk9PnRoaXMubmV0d29ya2RheXNjb3JlKHIsaSxvLGEpKX13b3JrZGF5KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiV09S''@;'; put 'put ''S0RBWSIpLChyLGksbyk9PnRoaXMud29ya2RheWNvcmUocixpLDEsbykpfXdvcmtkYXlpbnRsKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiV09SS0RBWS5JTlRMIiksKHIsaSxvLGEpPT50aGlzLndvcmtkYXljb3JlKHIsaSxvLGEpKX1uZXR3''@;'; put 'put ''b3JrZGF5c2NvcmUoZSx0LHIsaSl7bGV0IG89MTsoZT1NYXRoLnRydW5jKGUpKT4odD1NYXRoLnRydW5jKHQpKSYmKFtlLHRdPVt0LGVdLG89LTEpO2NvbnN0IGE9ZlllKHIpO2lmKGEgaW5zdGFuY2VvZiBQdClyZXR1cm4gYTtjb25zdCBsPXRoaXMuc2ltcGxlUmFuZ2VUb0ZpbHRlcmVkSG9s''@;'; put 'put ''aWRheXMoYSxpKTtyZXR1cm4gbCBpbnN0YW5jZW9mIFB0P2w6byp0aGlzLmNvdW50V29ya2RheXMoZSx0LGEsbCl9d29ya2RheWNvcmUoZSx0LHIsaSl7ZT1NYXRoLnRydW5jKGUpLHQ9TWF0aC50cnVuYyh0KTtjb25zdCBvPWZZZShyKTtpZihvIGluc3RhbmNlb2YgUHQpcmV0dXJuIG87Y29u''@;'; put 'put ''c3QgYT10aGlzLnNpbXBsZVJhbmdlVG9GaWx0ZXJlZEhvbGlkYXlzKG8saSk7aWYoYSBpbnN0YW5jZW9mIFB0KXJldHVybiBhO2lmKHQ+MCl7bGV0IGw9MTtmb3IoO3RoaXMuY291bnRXb3JrZGF5cyhlKzEsZStsLG8sYSk8dDspbCo9MjtsZXQgdT0xO2Zvcig7dSsxPGw7KXtjb25zdCBnPU1h''@;'; put 'put ''dGgudHJ1bmMoKHUrbCkvMik7dGhpcy5jb3VudFdvcmtkYXlzKGUrMSxlK2csbyxhKTx0P3U9ZzpsPWd9cmV0dXJuIGUrbH1pZih0PDApe3QqPS0xO2xldCBsPTE7Zm9yKDt0aGlzLmNvdW50V29ya2RheXMoZS1sLGUtMSxvLGEpPHQ7KWwqPTI7bGV0IHU9MTtmb3IoO3UrMTxsOyl7Y29uc3Qg''@;'; put 'put ''Zz1NYXRoLnRydW5jKCh1K2wpLzIpO3RoaXMuY291bnRXb3JrZGF5cyhlLWcsZS0xLG8sYSk8dD91PWc6bD1nfXJldHVybiBlLWx9cmV0dXJuIGV9Y291bnRXb3JrZGF5cyhlLHQscixpKXtjb25zdCBvPU1hdGguZmxvb3IodGhpcy5kYXRlVGltZUhlbHBlci5yZWxhdGl2ZU51bWJlclRvQWJz''@;'; put 'put ''b2x1dGVOdW1iZXIodCkpLGE9TWF0aC5mbG9vcih0aGlzLmRhdGVUaW1lSGVscGVyLnJlbGF0aXZlTnVtYmVyVG9BYnNvbHV0ZU51bWJlcihlKSk7bGV0IGw9MDtmb3IobGV0IHU9MDt1PDc7dSsrKSIwIj09PXIuY2hhckF0KHUpJiYobCs9TWF0aC5mbG9vcigobys2LXUpLzcpLGwtPU1hdGgu''@;'; put 'put ''Zmxvb3IoKGEtMSs2LXUpLzcpKTtyZXR1cm4gbC09aFllKHQrMSxpKS1oWWUoZSxpKSxsfXNpbXBsZVJhbmdlVG9GaWx0ZXJlZEhvbGlkYXlzKGUsdCl7dmFyIHI7Y29uc3QgaT1udWxsIT09KHI9dD8udmFsdWVzRnJvbVRvcExlZnRDb3JuZXIoKSkmJnZvaWQgMCE9PXI/cjpbXTtmb3IoY29u''@;'; put 'put ''c3QgYSBvZiBpKWlmKGEgaW5zdGFuY2VvZiBQdClyZXR1cm4gYTtjb25zdCBvPVtdO2Zvcihjb25zdCBhIG9mIGkpaWYoYSE9PWxsKXtpZighY2MoYSkpcmV0dXJuIG5ldyBQdCh0bi5WQUxVRSxkci5Xcm9uZ1R5cGUpO28ucHVzaChNYXRoLnRydW5jKExvKGEpKSl9cmV0dXJuWy4uLm5ldyBT''@;'; put 'put ''ZXQobyldLnNvcnQoKGEsbCk9PmEtbCkuZmlsdGVyKGE9Pntjb25zdCB1PSh0aGlzLmRhdGVUaW1lSGVscGVyLnJlbGF0aXZlTnVtYmVyVG9BYnNvbHV0ZU51bWJlcihhKS0xKSU3O3JldHVybiIwIj09PWUuY2hhckF0KHUpfSl9fWZ1bmN0aW9uIGhZZShuLGUpe2lmKDA9PT1lLmxlbmd0aHx8''@;'; put 'put ''bjw9ZVswXSlyZXR1cm4gMDtpZihlW2UubGVuZ3RoLTFdPG4pcmV0dXJuIGUubGVuZ3RoO2xldCB0PTAscj1lLmxlbmd0aC0xO2Zvcig7dCsxPHI7KXtjb25zdCBpPU1hdGguZmxvb3IoKHIrdCkvMik7ZVtpXT49bj9yPWk6dD1pfXJldHVybiByfWZ1bmN0aW9uIGZZZShuKXt2YXIgZTtyZXR1''@;'; put 'put ''cm4ibnVtYmVyIiE9dHlwZW9mIG4mJiJzdHJpbmciIT10eXBlb2Ygbj9uZXcgUHQodG4uVkFMVUUsZHIuV3JvbmdUeXBlKToic3RyaW5nIj09dHlwZW9mIG4/Nz09PW4ubGVuZ3RoJiYvXigwfDEpKiQvLnRlc3QobikmJiIxMTExMTExIiE9PW4/bjpuZXcgUHQodG4uTlVNLGRyLldlZWtlbmRT''@;'; put 'put ''dHJpbmcpOm51bGwhPT0oZT0kdG4uZ2V0KG4pKSYmdm9pZCAwIT09ZT9lOm5ldyBQdCh0bi5OVU0sZHIuQmFkTW9kZSl9ZFllLmltcGxlbWVudGVkRnVuY3Rpb25zPXtEQVRFOnttZXRob2Q6ImRhdGUiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBl''@;'; put 'put ''OmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9XSxyZXR1cm5OdW1iZXJUeXBlOm9hLk5VTUJFUl9EQVRFfSxUSU1FOnttZXRob2Q6InRpbWUiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlw''@;'; put 'put ''ZTpldC5OVU1CRVJ9XSxyZXR1cm5OdW1iZXJUeXBlOm9hLk5VTUJFUl9USU1FfSxNT05USDp7bWV0aG9kOiJtb250aCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MH1dfSxZRUFSOnttZXRob2Q6InllYXIiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6''@;'; put 'put ''ZXQuTlVNQkVSLG1pblZhbHVlOjB9XX0sSE9VUjp7bWV0aG9kOiJob3VyIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowfV19LE1JTlVURTp7bWV0aG9kOiJtaW51dGUiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9''@;'; put 'put ''XX0sU0VDT05EOnttZXRob2Q6InNlY29uZCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MH1dfSxURVhUOnttZXRob2Q6InRleHQiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0LlNUUklOR31dfSxFT01P''@;'; put 'put ''TlRIOnttZXRob2Q6ImVvbW9udGgiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSfV0scmV0dXJuTnVtYmVyVHlwZTpvYS5OVU1CRVJfREFURX0sREFZOnttZXRob2Q6ImRheSIscGFyYW1ldGVyczpbe2FyZ3Vt''@;'; put 'put ''ZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MH1dfSxEQVlTOnttZXRob2Q6ImRheXMiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9XX0sV0VFS0RBWTp7bWV0aG9kOiJ3ZWVrZGF5Iixw''@;'; put 'put ''YXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixkZWZhdWx0VmFsdWU6MX1dfSxXRUVLTlVNOnttZXRob2Q6IndlZWtudW0iLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9LHth''@;'; put 'put ''cmd1bWVudFR5cGU6ZXQuTlVNQkVSLGRlZmF1bHRWYWx1ZToxfV19LElTT1dFRUtOVU06e21ldGhvZDoiaXNvd2Vla251bSIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MH1dfSxEQVRFVkFMVUU6e21ldGhvZDoiZGF0ZXZhbHVlIixwYXJhbWV0ZXJzOlt7''@;'; put 'put ''YXJndW1lbnRUeXBlOmV0LlNUUklOR31dLHJldHVybk51bWJlclR5cGU6b2EuTlVNQkVSX0RBVEV9LFRJTUVWQUxVRTp7bWV0aG9kOiJ0aW1ldmFsdWUiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuU1RSSU5HfV0scmV0dXJuTnVtYmVyVHlwZTpvYS5OVU1CRVJfVElNRX0sTk9XOntt''@;'; put 'put ''ZXRob2Q6Im5vdyIscGFyYW1ldGVyczpbXSxpc1ZvbGF0aWxlOiEwLHJldHVybk51bWJlclR5cGU6b2EuTlVNQkVSX0RBVEVUSU1FfSxUT0RBWTp7bWV0aG9kOiJ0b2RheSIscGFyYW1ldGVyczpbXSxpc1ZvbGF0aWxlOiEwLHJldHVybk51bWJlclR5cGU6b2EuTlVNQkVSX0RBVEV9LEVEQVRF''@;'; put 'put ''OnttZXRob2Q6ImVkYXRlIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn1dLHJldHVybk51bWJlclR5cGU6b2EuTlVNQkVSX0RBVEV9LERBWVMzNjA6e21ldGhvZDoiZGF5czM2MCIscGFyYW1ldGVyczpbe2Fy''@;'; put 'put ''Z3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MH0se2FyZ3VtZW50VHlwZTpldC5CT09MRUFOLGRlZmF1bHRWYWx1ZTohMX1dfSxEQVRFRElGOnttZXRob2Q6ImRhdGVkaWYiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6''@;'; put 'put ''ZXQuTlVNQkVSLG1pblZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuU1RSSU5HfV19LFlFQVJGUkFDOnttZXRob2Q6InllYXJmcmFjIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowfSx7YXJn''@;'; put 'put ''dW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowfSx7YXJndW1lbnRUeXBlOmV0LklOVEVHRVIsZGVmYXVsdFZhbHVlOjAsbWluVmFsdWU6MCxtYXhWYWx1ZTo0fV19LElOVEVSVkFMOnttZXRob2Q6ImludGVydmFsIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5W''@;'; put 'put ''YWx1ZTowfV19LE5FVFdPUktEQVlTOnttZXRob2Q6Im5ldHdvcmtkYXlzIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowfSx7YXJndW1lbnRUeXBlOmV0LlJBTkdFLG9wdGlvbmFsQXJnOiEw''@;'; put 'put ''fV19LCJORVRXT1JLREFZUy5JTlRMIjp7bWV0aG9kOiJuZXR3b3JrZGF5c2ludGwiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuTk9FUlJPUixkZWZhdWx0''@;'; put 'put ''VmFsdWU6MX0se2FyZ3VtZW50VHlwZTpldC5SQU5HRSxvcHRpb25hbEFyZzohMH1dfSxXT1JLREFZOnttZXRob2Q6IndvcmtkYXkiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0''@;'; put 'put ''LlJBTkdFLG9wdGlvbmFsQXJnOiEwfV19LCJXT1JLREFZLklOVEwiOnttZXRob2Q6IndvcmtkYXlpbnRsIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OT0VSUk9SLGRlZmF1''@;'; put 'put ''bHRWYWx1ZToxfSx7YXJndW1lbnRUeXBlOmV0LlJBTkdFLG9wdGlvbmFsQXJnOiEwfV19fTtjb25zdCBwWWU9bmV3IE1hcChbWzEsMF0sWzIsMV0sWzExLDFdLFsxMiwyXSxbMTMsM10sWzE0LDRdLFsxNSw1XSxbMTYsNl0sWzE3LDBdXSksJHRuPW5ldyBNYXAoW1sxLCIwMDAwMDExIl0sWzIs''@;'; put 'put ''IjEwMDAwMDEiXSxbMywiMTEwMDAwMCJdLFs0LCIwMTEwMDAwIl0sWzUsIjAwMTEwMDAiXSxbNiwiMDAwMTEwMCJdLFs3LCIwMDAwMTEwIl0sWzExLCIwMDAwMDAxIl0sWzEyLCIxMDAwMDAwIl0sWzEzLCIwMTAwMDAwIl0sWzE0LCIwMDEwMDAwIl0sWzE1LCIwMDAxMDAwIl0sWzE2LCIwMDAw''@;'; put 'put ''MTAwIl0sWzE3LCIwMDAwMDEwIl1dKTtjbGFzcyBnWWUgZXh0ZW5kcyBCc3tkZWdyZWVzKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiREVHUkVFUyIpLHI9PnIqKDE4MC9NYXRoLlBJKSl9fWdZZS5pbXBsZW1lbnRlZEZ1bmN0aW9ucz17REVH''@;'; put 'put ''UkVFUzp7bWV0aG9kOiJkZWdyZWVzIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn1dfX07Y2xhc3MgbVllIGV4dGVuZHMgQnN7ZGVsdGEoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJERUxUQSIpLChyLGkpPT5yPT09aT8x''@;'; put 'put ''OjApfX1tWWUuaW1wbGVtZW50ZWRGdW5jdGlvbnM9e0RFTFRBOnttZXRob2Q6ImRlbHRhIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZGVmYXVsdFZhbHVlOjB9XX19O2NsYXNzIHZZZSBleHRlbmRzIEJze2V4cChlLHQpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkVYUCIpLE1hdGguZXhwKX19dlllLmltcGxlbWVudGVkRnVuY3Rpb25zPXtFWFA6e21ldGhvZDoiZXhwIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn1dfX07Y2xhc3MgX1llIGV4dGVuZHMg''@;'; put 'put ''QnN7cG10KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiUE1UIiksdm1lKX1pcG10KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiSVBNVCIpLF9tZSl9cHBtdChlLHQpe3JldHVybiB0aGlzLnJ1''@;'; put 'put ''bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlBQTVQiKSx5WWUpfWZ2KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiRlYiKSx5bWUpfWN1bWlwbXQoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1l''@;'; put 'put ''dGFkYXRhKCJDVU1JUE1UIiksKHIsaSxvLGEsbCx1KT0+e2lmKGE+bClyZXR1cm4gbmV3IFB0KHRuLk5VTSxkci5FbmRTdGFydFBlcmlvZCk7bGV0IGc9MDtmb3IobGV0IEU9YTtFPD1sO0UrKylnKz1fbWUocixFLGksbywwLHUpO3JldHVybiBnfSl9Y3VtcHJpbmMoZSx0KXtyZXR1cm4gdGhp''@;'; put 'put ''cy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJDVU1QUklOQyIpLChyLGksbyxhLGwsdSk9PntpZihhPmwpcmV0dXJuIG5ldyBQdCh0bi5OVU0sZHIuRW5kU3RhcnRQZXJpb2QpO2xldCBnPTA7Zm9yKGxldCBFPWE7RTw9bDtFKyspZys9eVllKHIsRSxpLG8sMCx1KTtyZXR1''@;'; put 'put ''cm4gZ30pfWRiKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiREIiKSwocixpLG8sYSxsKT0+e2lmKDEyPT09bCYmYT5vfHxhPm8rMSlyZXR1cm4gbmV3IFB0KHRuLk5VTSxkci5QZXJpb2RMb25nKTtpZihpPj1yKXJldHVybiAwO2NvbnN0IHU9''@;'; put 'put ''TWF0aC5yb3VuZCgxZTMqKDEtTWF0aC5wb3coaS9yLDEvbykpKS8xZTMsZz1yKnUqbC8xMjtpZigxPT09YSlyZXR1cm4gZztsZXQgRT1nO2ZvcihsZXQgTz0wO088YS0yO08rKylFKz0oci1FKSp1O3JldHVybiBhPT09bysxPyhyLUUpKnUqKDEyLWwpLzEyOihyLUUpKnV9KX1kZGIoZSx0KXty''@;'; put 'put ''ZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJEREIiKSwocixpLG8sYSxsKT0+e2lmKGE+bylyZXR1cm4gbmV3IFB0KHRuLk5VTSk7bGV0IGcsdT1sL287dT49MT8odT0xLGc9MT09PWE/cjowKTpnPXIqTWF0aC5wb3coMS11LGEtMSk7Y29uc3QgRT1yKk1h''@;'; put 'put ''dGgucG93KDEtdSxhKTtyZXR1cm4gTWF0aC5tYXgoZy1NYXRoLm1heChpLEUpLDApfSl9ZG9sbGFyZGUoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJET0xMQVJERSIpLChyLGkpPT57aWYoaTwxKXJldHVybiBuZXcgUHQodG4uRElWX0JZX1pF''@;'; put 'put ''Uk8pO2ZvcihpPU1hdGgudHJ1bmMoaSk7aT4xMDspaS89MTA7cmV0dXJuIE1hdGgudHJ1bmMocikrMTAqKHItTWF0aC50cnVuYyhyKSkvaX0pfWRvbGxhcmZyKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiRE9MTEFSRlIiKSwocixpKT0+e2lm''@;'; put 'put ''KGk8MSlyZXR1cm4gbmV3IFB0KHRuLkRJVl9CWV9aRVJPKTtmb3IoaT1NYXRoLnRydW5jKGkpO2k+MTA7KWkvPTEwO3JldHVybiBNYXRoLnRydW5jKHIpKyhyLU1hdGgudHJ1bmMocikpKmkvMTB9KX1lZmZlY3QoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1l''@;'; put 'put ''dGFkYXRhKCJFRkZFQ1QiKSwocixpKT0+KGk9TWF0aC50cnVuYyhpKSxNYXRoLnBvdygxK3IvaSxpKS0xKSl9aXNwbXQoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJJU1BNVCIpLChyLGksbyxhKT0+MD09PW8/bmV3IFB0KHRuLkRJVl9CWV9a''@;'; put 'put ''RVJPKTphKnIqKGkvby0xKSl9bm9taW5hbChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIk5PTUlOQUwiKSwocixpKT0+KGk9TWF0aC50cnVuYyhpKSwoTWF0aC5wb3cocisxLDEvaSktMSkqaSkpfW5wZXIoZSx0KXtyZXR1cm4gdGhpcy5ydW5G''@;'; put 'put ''dW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJOUEVSIiksKHIsaSxvLGEsbCk9PjA9PT1yPzA9PT1pP25ldyBQdCh0bi5ESVZfQllfWkVSTyk6KC1vLWEpL2k6KGwmJihpKj0xK3IpLE1hdGgubG9nKChpLWEqcikvKG8qcitpKSkvTWF0aC5sb2coMStyKSkpfXJhdGUoZSx0KXtyZXR1''@;'; put 'put ''cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJSQVRFIiksKHIsaSxvLGEsbCx1KT0+e2lmKHU8PS0xKXJldHVybiBuZXcgUHQodG4uVkFMVUUpO2NvbnN0IGc9MWUtNztsZXQgTz11O2w9bD8xOjA7Zm9yKGxldCBaPTA7Wjw1MDtaKyspe2lmKE88PS0xKXJldHVy''@;'; put 'put ''biBuZXcgUHQodG4uTlVNKTtsZXQgZWUsdmU7aWYoTWF0aC5hYnMoTyk8ZyllZT1vKigxK3IqTykraSooMStPKmwpKnIrYTtlbHNle2NvbnN0IE1lPU1hdGgucG93KDErTyxyKTtlZT1vKk1lK2kqKDEvTytsKSooTWUtMSkrYX1pZihNYXRoLmFicyhlZSk8ZylyZXR1cm4gTztpZihNYXRoLmFi''@;'; put 'put ''cyhPKTxnKXZlPW8qcitpKmwqcjtlbHNle2NvbnN0IE1lPU1hdGgucG93KDErTyxyKSxIZT1yKk1hdGgucG93KDErTyxyLTEpO3ZlPW8qSGUraSooMS9PK2wpKkhlK2kqKC0xLyhPKk8pKSooTWUtMSl9Ty09ZWUvdmV9cmV0dXJuIG5ldyBQdCh0bi5OVU0pfSl9cHYoZSx0KXtyZXR1cm4gdGhp''@;'; put 'put ''cy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJQViIpLChyLGksbyxhLGwpPT4obD1sPzE6MCwtMT09PXI/bmV3IFB0KDA9PT1pP3RuLk5VTTp0bi5ESVZfQllfWkVSTyk6MD09PXI/LW8qaS1hOigoMS1NYXRoLnBvdygxK3IsaSkpKm8qKDErcipsKS9yLWEpL01hdGgucG93''@;'; put 'put ''KDErcixpKSkpfXJyaShlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlJSSSIpLChyLGksbyk9PjA9PT1pfHxvPDAmJmk+MHx8bz4wJiZpPDA/bmV3IFB0KHRuLk5VTSk6TWF0aC5wb3coby9pLDEvciktMSl9c2xuKGUsdCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''cnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiU0xOIiksKHIsaSxvKT0+MD09PW8/bmV3IFB0KHRuLkRJVl9CWV9aRVJPKTooci1pKS9vKX1zeWQoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJTWUQiKSwocixpLG8sYSk9PmE+''@;'; put 'put ''bz9uZXcgUHQodG4uTlVNKTooci1pKSooby1hKzEpKjIvKG8qKG8rMSkpKX10YmlsbGVxKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiVEJJTExFUSIpLChyLGksbyk9PntpZigocj1NYXRoLnJvdW5kKHIpKT49KGk9TWF0aC5yb3VuZChpKSkp''@;'; put 'put ''cmV0dXJuIG5ldyBQdCh0bi5OVU0pO2NvbnN0IGE9dGhpcy5kYXRlVGltZUhlbHBlci5udW1iZXJUb1NpbXBsZURhdGUociksbD10aGlzLmRhdGVUaW1lSGVscGVyLm51bWJlclRvU2ltcGxlRGF0ZShpKTtpZihsLnllYXI+YS55ZWFyKzF8fGwueWVhcj09PWEueWVhcisxJiYobC5tb250aD5h''@;'; put 'put ''Lm1vbnRofHxsLm1vbnRoPT09YS5tb250aCYmbC5kYXk+YS5kYXkpKXJldHVybiBuZXcgUHQodG4uTlVNKTtjb25zdCB1PTM2MC1vKihpLXIpO3JldHVybiAwPT09dT8wOnU8MD9uZXcgUHQodG4uTlVNKTozNjUqby91fSl9dGJpbGxwcmljZShlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9u''@;'; put 'put ''KGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlRCSUxMUFJJQ0UiKSwocixpLG8pPT57aWYoKHI9TWF0aC5yb3VuZChyKSk+PShpPU1hdGgucm91bmQoaSkpKXJldHVybiBuZXcgUHQodG4uTlVNKTtjb25zdCBhPXRoaXMuZGF0ZVRpbWVIZWxwZXIubnVtYmVyVG9TaW1wbGVEYXRlKHIpLGw9dGhp''@;'; put 'put ''cy5kYXRlVGltZUhlbHBlci5udW1iZXJUb1NpbXBsZURhdGUoaSk7aWYobC55ZWFyPmEueWVhcisxfHxsLnllYXI9PT1hLnllYXIrMSYmKGwubW9udGg+YS5tb250aHx8bC5tb250aD09PWEubW9udGgmJmwuZGF5PmEuZGF5KSlyZXR1cm4gbmV3IFB0KHRuLk5VTSk7Y29uc3QgdT0zNjAtbyoo''@;'; put 'put ''aS1yKTtyZXR1cm4gMD09PXU/MDp1PDA/bmV3IFB0KHRuLk5VTSk6MTAwKigxLW8qKGktcikvMzYwKX0pfXRiaWxseWllbGQoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJUQklMTFlJRUxEIiksKHIsaSxvKT0+e2lmKChyPU1hdGgucm91bmQo''@;'; put 'put ''cikpPj0oaT1NYXRoLnJvdW5kKGkpKSlyZXR1cm4gbmV3IFB0KHRuLk5VTSk7Y29uc3QgYT10aGlzLmRhdGVUaW1lSGVscGVyLm51bWJlclRvU2ltcGxlRGF0ZShyKSxsPXRoaXMuZGF0ZVRpbWVIZWxwZXIubnVtYmVyVG9TaW1wbGVEYXRlKGkpO3JldHVybiBsLnllYXI+YS55ZWFyKzF8fGwu''@;'; put 'put ''eWVhcj09PWEueWVhcisxJiYobC5tb250aD5hLm1vbnRofHxsLm1vbnRoPT09YS5tb250aCYmbC5kYXk+YS5kYXkpP25ldyBQdCh0bi5OVU0pOjM2MCooMTAwLW8pLyhvKihpLXIpKX0pfWZ2c2NoZWR1bGUoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFk''@;'; put 'put ''YXRhKCJGVlNDSEVEVUxFIiksKHIsaSk9Pntjb25zdCBvPWkudmFsdWVzRnJvbVRvcExlZnRDb3JuZXIoKTtmb3IoY29uc3QgYSBvZiBvKWlmKGEgaW5zdGFuY2VvZiBQdClyZXR1cm4gYTtmb3IoY29uc3QgYSBvZiBvKWlmKGNjKGEpKXIqPTErTG8oYSk7ZWxzZSBpZihhIT09bGwpcmV0dXJu''@;'; put 'put ''IG5ldyBQdCh0bi5WQUxVRSxkci5OdW1iZXJFeHBlY3RlZCk7cmV0dXJuIHJ9KX1ucHYoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJOUFYiKSwociwuLi5pKT0+e2NvbnN0IG89dGhpcy5hcml0aG1ldGljSGVscGVyLmNvZXJjZU51bWJlcnNF''@;'; put 'put ''eGFjdFJhbmdlcyhpKTtyZXR1cm4gbyBpbnN0YW5jZW9mIFB0P286Ym1lKHIsbyl9KX1taXJyKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiTUlSUiIpLChyLGksbyk9Pntjb25zdCBhPXRoaXMuYXJpdGhtZXRpY0hlbHBlci5tYW55VG9FeGFj''@;'; put 'put ''dE51bWJlcnMoci52YWx1ZXNGcm9tVG9wTGVmdENvcm5lcigpKTtpZihhIGluc3RhbmNlb2YgUHQpcmV0dXJuIGE7bGV0IGw9ITEsdT0hMTtjb25zdCBnPVtdLEU9W107Zm9yKGNvbnN0IHZlIG9mIGEpdmU+MD8obD0hMCxnLnB1c2godmUpLEUucHVzaCgwKSk6dmU8MD8odT0hMCxFLnB1c2go''@;'; put 'put ''dmUpLGcucHVzaCgwKSk6KEUucHVzaCgwKSxnLnB1c2goMCkpO2lmKCFsfHwhdSlyZXR1cm4gbmV3IFB0KHRuLkRJVl9CWV9aRVJPKTtjb25zdCBPPWEubGVuZ3RoLFo9Ym1lKG8sZyk7aWYoWiBpbnN0YW5jZW9mIFB0KXJldHVybiBaO2NvbnN0IGVlPWJtZShpLEUpO3JldHVybiBlZSBpbnN0''@;'; put 'put ''YW5jZW9mIFB0P2VlOk1hdGgucG93KC1aKk1hdGgucG93KDErbyxPKS9lZS8oMStpKSwxLyhPLTEpKS0xfSl9cGR1cmF0aW9uKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiUERVUkFUSU9OIiksKHIsaSxvKT0+KE1hdGgubG9nKG8pLU1hdGgu''@;'; put 'put ''bG9nKGkpKS9NYXRoLmxvZygxK3IpKX14bnB2KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiWE5QViIpLChyLGksbyk9Pntjb25zdCBhPWkudmFsdWVzRnJvbVRvcExlZnRDb3JuZXIoKTtmb3IoY29uc3QgWiBvZiBhKWlmKCJudW1iZXIiIT10''@;'; put 'put ''eXBlb2YgWilyZXR1cm4gbmV3IFB0KHRuLlZBTFVFLGRyLk51bWJlckV4cGVjdGVkKTtjb25zdCBsPWEsdT1vLnZhbHVlc0Zyb21Ub3BMZWZ0Q29ybmVyKCk7Zm9yKGNvbnN0IFogb2YgdSlpZigibnVtYmVyIiE9dHlwZW9mIFopcmV0dXJuIG5ldyBQdCh0bi5WQUxVRSxkci5OdW1iZXJFeHBl''@;'; put 'put ''Y3RlZCk7Y29uc3QgZz11O2lmKGcubGVuZ3RoIT09bC5sZW5ndGgpcmV0dXJuIG5ldyBQdCh0bi5OVU0sZHIuRXF1YWxMZW5ndGgpO2NvbnN0IEU9Zy5sZW5ndGg7bGV0IE89MDtpZihnWzBdPDApcmV0dXJuIG5ldyBQdCh0bi5OVU0sZHIuVmFsdWVTbWFsbCk7Zm9yKGxldCBaPTA7WjxFO1or''@;'; put 'put ''Kyl7aWYoZ1taXT1NYXRoLmZsb29yKGdbWl0pLGdbWl08Z1swXSlyZXR1cm4gbmV3IFB0KHRuLk5VTSxkci5WYWx1ZVNtYWxsKTtPKz1sW1pdL01hdGgucG93KDErciwoZ1taXS1nWzBdKS8zNjUpfXJldHVybiBPfSl9fWZ1bmN0aW9uIHZtZShuLGUsdCxyLGkpe2lmKDA9PT1uKXJldHVybigt''@;'; put 'put ''dC1yKS9lO3tjb25zdCBvPU1hdGgucG93KDErbixlKTtyZXR1cm4ocipuK3QqbipvKSooaT8xLygxK24pOjEpLygxLW8pfX1mdW5jdGlvbiBfbWUobixlLHQscixpLG8pe2NvbnN0IGE9dm1lKG4sdCxyLGksbyk7cmV0dXJuIDE9PT1lP24qKG8/MDotcik6bioobz95bWUobixlLTIsYSxyLG8p''@;'; put 'put ''LWE6eW1lKG4sZS0xLGEscixvKSl9ZnVuY3Rpb24geW1lKG4sZSx0LHIsaSl7aWYoMD09PW4pcmV0dXJuLXItdCplO3tjb25zdCBvPU1hdGgucG93KDErbixlKTtyZXR1cm4gdCooaT8xK246MSkqKDEtbykvbi1yKm99fWZ1bmN0aW9uIHlZZShuLGUsdCxyLGksbyl7cmV0dXJuIHZtZShuLHQs''@;'; put 'put ''cixpLG8pLV9tZShuLGUsdCxyLGksbyl9ZnVuY3Rpb24gYm1lKG4sZSl7bGV0IHQ9MDtmb3IobGV0IHI9ZS5sZW5ndGgtMTtyPj0wO3ItLSl7aWYodCs9ZVtyXSwtMT09PW4pe2lmKDA9PT10KWNvbnRpbnVlO3JldHVybiBuZXcgUHQodG4uRElWX0JZX1pFUk8pfXQvPTErbn1yZXR1cm4gdH1f''@;'; put 'put ''WWUuaW1wbGVtZW50ZWRGdW5jdGlvbnM9e1BNVDp7bWV0aG9kOiJwbXQiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGRlZmF1bHRWYWx1''@;'; put 'put ''ZTowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixkZWZhdWx0VmFsdWU6MH1dLHJldHVybk51bWJlclR5cGU6b2EuTlVNQkVSX0NVUlJFTkNZfSxJUE1UOnttZXRob2Q6ImlwbXQiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0s''@;'; put 'put ''e2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixkZWZhdWx0VmFsdWU6MH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZGVmYXVsdFZhbHVlOjB9XSxyZXR1cm5OdW1iZXJUeXBlOm9hLk5VTUJFUl9DVVJSRU5D''@;'; put 'put ''WX0sUFBNVDp7bWV0aG9kOiJwcG10IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZGVmYXVs''@;'; put 'put ''dFZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGRlZmF1bHRWYWx1ZTowfV0scmV0dXJuTnVtYmVyVHlwZTpvYS5OVU1CRVJfQ1VSUkVOQ1l9LEZWOnttZXRob2Q6ImZ2IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9''@;'; put 'put ''LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixkZWZhdWx0VmFsdWU6MH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZGVmYXVsdFZhbHVlOjB9XSxyZXR1cm5OdW1iZXJUeXBlOm9hLk5VTUJFUl9DVVJSRU5DWX0sQ1VNSVBNVDp7bWV0aG9kOiJjdW1p''@;'; put 'put ''cG10IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixncmVhdGVyVGhhbjowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixncmVhdGVyVGhhbjowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixncmVhdGVyVGhhbjowfSx7YXJndW1lbnRUeXBlOmV0LklOVEVHRVIsbWluVmFs''@;'; put 'put ''dWU6MX0se2FyZ3VtZW50VHlwZTpldC5JTlRFR0VSLG1pblZhbHVlOjF9LHthcmd1bWVudFR5cGU6ZXQuSU5URUdFUixtaW5WYWx1ZTowLG1heFZhbHVlOjF9XSxyZXR1cm5OdW1iZXJUeXBlOm9hLk5VTUJFUl9DVVJSRU5DWX0sQ1VNUFJJTkM6e21ldGhvZDoiY3VtcHJpbmMiLHBhcmFtZXRl''@;'; put 'put ''cnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGdyZWF0ZXJUaGFuOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGdyZWF0ZXJUaGFuOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGdyZWF0ZXJUaGFuOjB9LHthcmd1bWVudFR5cGU6ZXQuSU5URUdFUixtaW5WYWx1ZToxfSx7YXJndW1l''@;'; put 'put ''bnRUeXBlOmV0LklOVEVHRVIsbWluVmFsdWU6MX0se2FyZ3VtZW50VHlwZTpldC5JTlRFR0VSLG1pblZhbHVlOjAsbWF4VmFsdWU6MX1dLHJldHVybk51bWJlclR5cGU6b2EuTlVNQkVSX0NVUlJFTkNZfSxEQjp7bWV0aG9kOiJkYiIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1C''@;'; put 'put ''RVIsbWluVmFsdWU6MH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MH0se2FyZ3VtZW50VHlwZTpldC5JTlRFR0VSLG1pblZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuSU5URUdFUixtaW5WYWx1ZTowfSx7YXJndW1lbnRUeXBlOmV0LklOVEVHRVIsbWluVmFsdWU6MSxtYXhW''@;'; put 'put ''YWx1ZToxMixkZWZhdWx0VmFsdWU6MTJ9XSxyZXR1cm5OdW1iZXJUeXBlOm9hLk5VTUJFUl9DVVJSRU5DWX0sRERCOnttZXRob2Q6ImRkYiIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MH0s''@;'; put 'put ''e2FyZ3VtZW50VHlwZTpldC5JTlRFR0VSLG1pblZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGdyZWF0ZXJUaGFuOjAsZGVmYXVsdFZhbHVlOjJ9XSxyZXR1cm5OdW1iZXJUeXBlOm9hLk5VTUJFUl9DVVJSRU5DWX0s''@;'; put 'put ''RE9MTEFSREU6e21ldGhvZDoiZG9sbGFyZGUiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowfV19LERPTExBUkZSOnttZXRob2Q6ImRvbGxhcmZyIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJF''@;'; put 'put ''Un0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MH1dfSxFRkZFQ1Q6e21ldGhvZDoiZWZmZWN0IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZToxfV0scmV0dXJuTnVtYmVyVHlw''@;'; put 'put ''ZTpvYS5OVU1CRVJfUEVSQ0VOVH0sSVNQTVQ6e21ldGhvZDoiaXNwbXQiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSfV19LE5PTUlOQUw6''@;'; put 'put ''e21ldGhvZDoibm9taW5hbCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MX1dLHJldHVybk51bWJlclR5cGU6b2EuTlVNQkVSX1BFUkNFTlR9LE5QRVI6e21ldGhvZDoibnBlciIscGFyYW1l''@;'; put 'put ''dGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZGVmYXVsdFZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGRlZmF1bHRWYWx1ZTowfV19LFBW''@;'; put 'put ''OnttZXRob2Q6InB2IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixkZWZhdWx0VmFsdWU6MH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIs''@;'; put 'put ''ZGVmYXVsdFZhbHVlOjB9XSxyZXR1cm5OdW1iZXJUeXBlOm9hLk5VTUJFUl9DVVJSRU5DWX0sUkFURTp7bWV0aG9kOiJyYXRlIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixncmVhdGVyVGhhbjowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpl''@;'; put 'put ''dC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGRlZmF1bHRWYWx1ZTowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixkZWZhdWx0VmFsdWU6MH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZGVmYXVsdFZhbHVlOi4xfV0scmV0dXJuTnVtYmVyVHlwZTpvYS5OVU1CRVJfUEVSQ0VO''@;'; put 'put ''VH0sUlJJOnttZXRob2Q6InJyaSIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZ3JlYXRlclRoYW46MH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSfV0scmV0dXJuTnVtYmVyVHlwZTpvYS5OVU1CRVJfUEVSQ0VOVH0sU0xOOntt''@;'; put 'put ''ZXRob2Q6InNsbiIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn1dLHJldHVybk51bWJlclR5cGU6b2EuTlVNQkVSX0NVUlJFTkNZfSxTWUQ6e21ldGhvZDoic3lkIixwYXJhbWV0ZXJz''@;'; put 'put ''Olt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGdyZWF0ZXJUaGFuOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGdyZWF0ZXJUaGFuOjB9XSxyZXR1cm5OdW1iZXJUeXBlOm9hLk5VTUJFUl9DVVJSRU5D''@;'; put 'put ''WX0sVEJJTExFUTp7bWV0aG9kOiJ0YmlsbGVxIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixncmVhdGVyVGhhbjowfV0scmV0dXJuTnVtYmVy''@;'; put 'put ''VHlwZTpvYS5OVU1CRVJfUEVSQ0VOVH0sVEJJTExQUklDRTp7bWV0aG9kOiJ0YmlsbHByaWNlIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixn''@;'; put 'put ''cmVhdGVyVGhhbjowfV0scmV0dXJuTnVtYmVyVHlwZTpvYS5OVU1CRVJfQ1VSUkVOQ1l9LFRCSUxMWUlFTEQ6e21ldGhvZDoidGJpbGx5aWVsZCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6''@;'; put 'put ''MH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZ3JlYXRlclRoYW46MH1dLHJldHVybk51bWJlclR5cGU6b2EuTlVNQkVSX1BFUkNFTlR9LEZWU0NIRURVTEU6e21ldGhvZDoiZnZzY2hlZHVsZSIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQu''@;'; put 'put ''UkFOR0V9XSxyZXR1cm5OdW1iZXJUeXBlOm9hLk5VTUJFUl9DVVJSRU5DWX0sTlBWOnttZXRob2Q6Im5wdiIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuQU5ZfV0scmVwZWF0TGFzdEFyZ3M6MSxyZXR1cm5OdW1iZXJUeXBlOm9hLk5VTUJF''@;'; put 'put ''Ul9DVVJSRU5DWX0sTUlSUjp7bWV0aG9kOiJtaXJyIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlJBTkdFfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9XSxyZXR1cm5OdW1iZXJUeXBlOm9hLk5VTUJFUl9QRVJDRU5UfSxQRFVSQVRJT046''@;'; put 'put ''e21ldGhvZDoicGR1cmF0aW9uIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixncmVhdGVyVGhhbjowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixncmVhdGVyVGhhbjowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixncmVhdGVyVGhhbjowfV19LFhOUFY6e21ldGhvZDoi''@;'; put 'put ''eG5wdiIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZ3JlYXRlclRoYW46LTF9LHthcmd1bWVudFR5cGU6ZXQuUkFOR0V9LHthcmd1bWVudFR5cGU6ZXQuUkFOR0V9XX19O2NsYXNzIGJZZSBleHRlbmRzIEJze2Zvcm11bGF0ZXh0KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVu''@;'; put 'put ''Y3Rpb25XaXRoUmVmZXJlbmNlQXJndW1lbnQoZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiRk9STVVMQVRFWFQiKSwoKT0+bmV3IFB0KHRuLk5BLGRyLldyb25nQXJnTnVtYmVyKSxyPT57dmFyIGk7cmV0dXJuIG51bGwhPT0oaT10aGlzLnNlcmlhbGl6YXRpb24uZ2V0Q2VsbEZvcm11bGEocikp''@;'; put 'put ''JiZ2b2lkIDAhPT1pP2k6bmV3IFB0KHRuLk5BLGRyLkZvcm11bGEpfSl9fWJZZS5pbXBsZW1lbnRlZEZ1bmN0aW9ucz17Rk9STVVMQVRFWFQ6e21ldGhvZDoiZm9ybXVsYXRleHQiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTk9FUlJPUn1dLGRvZXNOb3ROZWVkQXJndW1lbnRzVG9C''@;'; put 'put ''ZUNvbXB1dGVkOiEwLGlzRGVwZW5kZW50T25TaGVldFN0cnVjdHVyZUNoYW5nZTohMCx2ZWN0b3JpemF0aW9uRm9yYmlkZGVuOiEwfX07Y2xhc3Mgd1llIGV4dGVuZHMgQnN7aHlwZXJsaW5rKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiSFlQ''@;'; put 'put ''RVJMSU5LIiksKHIsaSk9PihlLmh5cGVybGluaz1yLGk/P3IpKX19d1llLmltcGxlbWVudGVkRnVuY3Rpb25zPXtIWVBFUkxJTks6e21ldGhvZDoiaHlwZXJsaW5rIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlNUUklOR30se2FyZ3VtZW50VHlwZTpldC5TVFJJTkcsb3B0aW9uYWxB''@;'; put 'put ''cmc6ITB9XX19O2NsYXNzIENZZSBleHRlbmRzIEJze2lzYmluYXJ5KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiSVNCSU5BUlkiKSxyPT4vXlswMV17MSwxMH0kLy50ZXN0KHIpKX1pc2VycihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9u''@;'; put 'put ''KGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIklTRVJSIikscj0+ciBpbnN0YW5jZW9mIFB0JiZyLnR5cGUhPT10bi5OQSl9aXNlcnJvcihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIklTRVJST1IiKSxyPT5yIGluc3RhbmNlb2YgUHQpfWlzZm9y''@;'; put 'put ''bXVsYShlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uV2l0aFJlZmVyZW5jZUFyZ3VtZW50KGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIklTRk9STVVMQSIpLCgpPT5uZXcgUHQodG4uTkEsZHIuV3JvbmdBcmdOdW1iZXIpLHI9PnRoaXMuZGVwZW5kZW5jeUdyYXBoLmFkZHJlc3NNYXBwaW5n''@;'; put 'put ''LmdldENlbGwocilpbnN0YW5jZW9mIG1nKX1pc2JsYW5rKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiSVNCTEFOSyIpLHI9PnI9PT1sbCl9aXNuYShlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEo''@;'; put 'put ''IklTTkEiKSxyPT5yIGluc3RhbmNlb2YgUHQmJnIudHlwZT09dG4uTkEpfWlzbnVtYmVyKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiSVNOVU1CRVIiKSxjYyl9aXNsb2dpY2FsKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdz''@;'; put 'put ''LHQsdGhpcy5tZXRhZGF0YSgiSVNMT0dJQ0FMIikscj0+ImJvb2xlYW4iPT10eXBlb2Ygcil9aXNyZWYoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJJU1JFRiIpLHI9PnIgaW5zdGFuY2VvZiBQdCYmKHIudHlwZT09dG4uUkVGfHxyLnR5cGU9''@;'; put 'put ''PXRuLkNZQ0xFKSl9aXN0ZXh0KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiSVNURVhUIikscj0+InN0cmluZyI9PXR5cGVvZiByKX1pc25vbnRleHQoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRh''@;'; put 'put ''KCJJU05PTlRFWFQiKSxyPT4ic3RyaW5nIiE9dHlwZW9mIHIpfWNvbHVtbihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uV2l0aFJlZmVyZW5jZUFyZ3VtZW50KGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkNPTFVNTiIpLCgpPT50LmZvcm11bGFBZGRyZXNzLmNvbCsxLHI9PnIuY29sKzEp''@;'; put 'put ''fWNvbHVtbnMoZSx0KXtpZigxIT09ZS5hcmdzLmxlbmd0aClyZXR1cm4gbmV3IFB0KHRuLk5BLGRyLldyb25nQXJnTnVtYmVyKTtpZihlLmFyZ3Muc29tZShpPT5pLnR5cGU9PT1ybi5FTVBUWSkpcmV0dXJuIG5ldyBQdCh0bi5OVU0sZHIuRW1wdHlBcmcpO2xldCByPWUuYXJnc1swXTtmb3Io''@;'; put 'put ''O3IudHlwZT09PXJuLlBBUkVOVEhFU0lTOylyPXIuZXhwcmVzc2lvbjtpZihyLnR5cGU9PT1ybi5DRUxMX1JBTkdFfHxyLnR5cGU9PT1ybi5DT0xVTU5fUkFOR0UpcmV0dXJuIHIuZW5kLmNvbC1yLnN0YXJ0LmNvbCsxO2lmKHIudHlwZT09PXJuLkNFTExfUkVGRVJFTkNFKXJldHVybiAxO2lm''@;'; put 'put ''KHIudHlwZT09PXJuLlJPV19SQU5HRSlyZXR1cm4gdGhpcy5jb25maWcubWF4Q29sdW1uczt7Y29uc3QgaT10aGlzLmV2YWx1YXRlQXN0KHIsdCk7cmV0dXJuIGkgaW5zdGFuY2VvZiBsYT9pLndpZHRoKCk6aSBpbnN0YW5jZW9mIFB0P2k6MX19cm93KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVu''@;'; put 'put ''Y3Rpb25XaXRoUmVmZXJlbmNlQXJndW1lbnQoZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiUk9XIiksKCk9PnQuZm9ybXVsYUFkZHJlc3Mucm93KzEscj0+ci5yb3crMSl9cm93cyhlLHQpe2lmKDEhPT1lLmFyZ3MubGVuZ3RoKXJldHVybiBuZXcgUHQodG4uTkEsZHIuV3JvbmdBcmdOdW1iZXIp''@;'; put 'put ''O2lmKGUuYXJncy5zb21lKGk9PmkudHlwZT09PXJuLkVNUFRZKSlyZXR1cm4gbmV3IFB0KHRuLk5VTSxkci5FbXB0eUFyZyk7bGV0IHI9ZS5hcmdzWzBdO2Zvcig7ci50eXBlPT09cm4uUEFSRU5USEVTSVM7KXI9ci5leHByZXNzaW9uO2lmKHIudHlwZT09PXJuLkNFTExfUkFOR0V8fHIudHlw''@;'; put 'put ''ZT09PXJuLlJPV19SQU5HRSlyZXR1cm4gci5lbmQucm93LXIuc3RhcnQucm93KzE7aWYoci50eXBlPT09cm4uQ0VMTF9SRUZFUkVOQ0UpcmV0dXJuIDE7aWYoci50eXBlPT09cm4uQ09MVU1OX1JBTkdFKXJldHVybiB0aGlzLmNvbmZpZy5tYXhSb3dzO3tjb25zdCBpPXRoaXMuZXZhbHVhdGVB''@;'; put 'put ''c3Qocix0KTtyZXR1cm4gaSBpbnN0YW5jZW9mIGxhP2kuaGVpZ2h0KCk6aSBpbnN0YW5jZW9mIFB0P2k6MX19aW5kZXgoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJJTkRFWCIpLChyLGksbyk9Pnt2YXIgYSxsLHUsZyxFLE87cmV0dXJuIG88''@;'; put 'put ''MXx8aTwxP25ldyBQdCh0bi5WQUxVRSxkci5MZXNzVGhhbk9uZSk6bz5yLndpZHRoKCl8fGk+ci5oZWlnaHQoKT9uZXcgUHQodG4uTlVNLGRyLlZhbHVlTGFyZ2UpOm51bGwhPT0oTz1udWxsIT09KHU9bnVsbD09PShsPW51bGw9PT0oYT1yPy5kYXRhKXx8dm9pZCAwPT09YT92b2lkIDA6YVtp''@;'; put 'put ''LTFdKXx8dm9pZCAwPT09bD92b2lkIDA6bFtvLTFdKSYmdm9pZCAwIT09dT91Om51bGw9PT0oRT1udWxsPT09KGc9cj8uZGF0YSl8fHZvaWQgMD09PWc/dm9pZCAwOmdbMF0pfHx2b2lkIDA9PT1FP3ZvaWQgMDpFWzBdKSYmdm9pZCAwIT09Tz9POm5ldyBQdCh0bi5WQUxVRSxkci5DZWxsUmFu''@;'; put 'put ''Z2VFeHBlY3RlZCl9KX1uYShlLHQpe3JldHVybiBuZXcgUHQodG4uTkEpfXNoZWV0KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb25XaXRoUmVmZXJlbmNlQXJndW1lbnQoZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiU0hFRVQiKSwoKT0+dC5mb3JtdWxhQWRkcmVzcy5zaGVldCsxLHI9PnIu''@;'; put 'put ''c2hlZXQrMSxyPT57Y29uc3QgaT10aGlzLmRlcGVuZGVuY3lHcmFwaC5zaGVldE1hcHBpbmcuZ2V0KHIpO3JldHVybiB2b2lkIDAhPT1pP2krMTpuZXcgUHQodG4uTkEsZHIuU2hlZXRSZWYpfSl9c2hlZXRzKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb25XaXRoUmVmZXJlbmNlQXJndW1l''@;'; put 'put ''bnQoZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiU0hFRVRTIiksKCk9PnRoaXMuZGVwZW5kZW5jeUdyYXBoLnNoZWV0TWFwcGluZy5udW1iZXJPZlNoZWV0cygpLCgpPT4xLCgpPT5uZXcgUHQodG4uVkFMVUUsZHIuQ2VsbFJlZkV4cGVjdGVkKSl9fUNZZS5pbXBsZW1lbnRlZEZ1bmN0aW9ucz17''@;'; put 'put ''Q09MVU1OOnttZXRob2Q6ImNvbHVtbiIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OT0VSUk9SLG9wdGlvbmFsQXJnOiEwfV0saXNEZXBlbmRlbnRPblNoZWV0U3RydWN0dXJlQ2hhbmdlOiEwLGRvZXNOb3ROZWVkQXJndW1lbnRzVG9CZUNvbXB1dGVkOiEwLHZlY3Rvcml6YXRpb25G''@;'; put 'put ''b3JiaWRkZW46ITB9LENPTFVNTlM6e21ldGhvZDoiY29sdW1ucyIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5SQU5HRX1dLGlzRGVwZW5kZW50T25TaGVldFN0cnVjdHVyZUNoYW5nZTohMCxkb2VzTm90TmVlZEFyZ3VtZW50c1RvQmVDb21wdXRlZDohMCx2ZWN0b3JpemF0aW9uRm9y''@;'; put 'put ''YmlkZGVuOiEwfSxJU0JJTkFSWTp7bWV0aG9kOiJpc2JpbmFyeSIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5TVFJJTkd9XX0sSVNFUlI6e21ldGhvZDoiaXNlcnIiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuU0NBTEFSfV19LElTRk9STVVMQTp7bWV0aG9kOiJpc2Zvcm11''@;'; put 'put ''bGEiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTk9FUlJPUn1dLGRvZXNOb3ROZWVkQXJndW1lbnRzVG9CZUNvbXB1dGVkOiEwLHZlY3Rvcml6YXRpb25Gb3JiaWRkZW46ITB9LElTTkE6e21ldGhvZDoiaXNuYSIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5TQ0FMQVJ9XX0s''@;'; put 'put ''SVNSRUY6e21ldGhvZDoiaXNyZWYiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuU0NBTEFSfV0sdmVjdG9yaXphdGlvbkZvcmJpZGRlbjohMH0sSVNFUlJPUjp7bWV0aG9kOiJpc2Vycm9yIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlNDQUxBUn1dfSxJU0JMQU5LOnttZXRo''@;'; put 'put ''b2Q6ImlzYmxhbmsiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuU0NBTEFSfV19LElTTlVNQkVSOnttZXRob2Q6ImlzbnVtYmVyIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlNDQUxBUn1dfSxJU0xPR0lDQUw6e21ldGhvZDoiaXNsb2dpY2FsIixwYXJhbWV0ZXJzOlt7YXJn''@;'; put 'put ''dW1lbnRUeXBlOmV0LlNDQUxBUn1dfSxJU1RFWFQ6e21ldGhvZDoiaXN0ZXh0IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlNDQUxBUn1dfSxJU05PTlRFWFQ6e21ldGhvZDoiaXNub250ZXh0IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlNDQUxBUn1dfSxJTkRFWDp7bWV0''@;'; put 'put ''aG9kOiJpbmRleCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5SQU5HRX0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGRlZmF1bHRWYWx1ZToxfV19LE5BOnttZXRob2Q6Im5hIixwYXJhbWV0ZXJzOltdfSxST1c6e21ldGhvZDoicm93Iixw''@;'; put 'put ''YXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5PRVJST1Isb3B0aW9uYWxBcmc6ITB9XSxpc0RlcGVuZGVudE9uU2hlZXRTdHJ1Y3R1cmVDaGFuZ2U6ITAsZG9lc05vdE5lZWRBcmd1bWVudHNUb0JlQ29tcHV0ZWQ6ITAsdmVjdG9yaXphdGlvbkZvcmJpZGRlbjohMH0sUk9XUzp7bWV0aG9k''@;'; put 'put ''OiJyb3dzIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlJBTkdFfV0saXNEZXBlbmRlbnRPblNoZWV0U3RydWN0dXJlQ2hhbmdlOiEwLGRvZXNOb3ROZWVkQXJndW1lbnRzVG9CZUNvbXB1dGVkOiEwLHZlY3Rvcml6YXRpb25Gb3JiaWRkZW46ITB9LFNIRUVUOnttZXRob2Q6InNoZWV0''@;'; put 'put ''IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlNUUklOR31dLGRvZXNOb3ROZWVkQXJndW1lbnRzVG9CZUNvbXB1dGVkOiEwLHZlY3Rvcml6YXRpb25Gb3JiaWRkZW46ITB9LFNIRUVUUzp7bWV0aG9kOiJzaGVldHMiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuU1RSSU5HfV0s''@;'; put 'put ''ZG9lc05vdE5lZWRBcmd1bWVudHNUb0JlQ29tcHV0ZWQ6ITAsdmVjdG9yaXphdGlvbkZvcmJpZGRlbjohMH19O2NsYXNzIFNZZSBleHRlbmRzIEJze2lzZXZlbihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIklTRVZFTiIpLHI9PnIlMj09MCl9''@;'; put 'put ''fVNZZS5pbXBsZW1lbnRlZEZ1bmN0aW9ucz17SVNFVkVOOnttZXRob2Q6ImlzZXZlbiIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9XX19O2NsYXNzIEVZZSBleHRlbmRzIEJze2lzb2RkKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRh''@;'; put 'put ''ZGF0YSgiSVNPREQiKSxyPT5yJTI9PTEpfX1FWWUuaW1wbGVtZW50ZWRGdW5jdGlvbnM9e0lTT0REOnttZXRob2Q6Imlzb2RkIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn1dfX07Y2xhc3MgTVllIGV4dGVuZHMgQnN7bG9nMTAoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5j''@;'; put 'put ''dGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJMT0cxMCIpLE1hdGgubG9nMTApfWxvZyhlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkxPRyIpLChyLGkpPT5NYXRoLmxvZyhyKS9NYXRoLmxvZyhpKSl9bG4oZSx0KXtyZXR1cm4gdGhpcy5y''@;'; put 'put ''dW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJMTiIpLE1hdGgubG9nKX19TVllLmltcGxlbWVudGVkRnVuY3Rpb25zPXtMT0cxMDp7bWV0aG9kOiJsb2cxMCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9XX0sTE9HOnttZXRob2Q6ImxvZyIscGFyYW1ldGVy''@;'; put 'put ''czpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZ3JlYXRlclRoYW46MH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZGVmYXVsdFZhbHVlOjEwLGdyZWF0ZXJUaGFuOjB9XX0sTE46e21ldGhvZDoibG4iLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfV19fTtjb25zdCB3bWU9''@;'; put 'put ''cGFyc2VGbG9hdChNYXRoLlBJLnRvRml4ZWQoMTQpKTtjbGFzcyBUWWUgZXh0ZW5kcyBCc3twaShlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlBJIiksKCk9PndtZSl9c3FydHBpKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdz''@;'; put 'put ''LHQsdGhpcy5tZXRhZGF0YSgiU1FSVFBJIikscj0+TWF0aC5zcXJ0KHdtZSpyKSl9fWZ1bmN0aW9uIHhZZShuLGUpe3JldHVybiBuZXcgeWwoZS53aWR0aCxuLmhlaWdodCl9ZnVuY3Rpb24gQ21lKG4sZSx0KXtyZXR1cm4gbmV3IHlsKDErKG4ud2lkdGgtZSkvdCwxKyhuLmhlaWdodC1lKS90''@;'; put 'put ''KX1UWWUuaW1wbGVtZW50ZWRGdW5jdGlvbnM9e1BJOnttZXRob2Q6InBpIixwYXJhbWV0ZXJzOltdfSxTUVJUUEk6e21ldGhvZDoic3FydHBpIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowfV19fTtjbGFzcyBBWWUgZXh0ZW5kcyBCc3ttbXVsdChlLHQp''@;'; put 'put ''e3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIk1NVUxUIiksKHIsaSk9PntpZighci5oYXNPbmx5TnVtYmVycygpfHwhaS5oYXNPbmx5TnVtYmVycygpKXJldHVybiBuZXcgUHQodG4uVkFMVUUsZHIuTnVtYmVyUmFuZ2UpO2lmKGkuaGVpZ2h0KCkhPT1y''@;'; put 'put ''LndpZHRoKCkpcmV0dXJuIG5ldyBQdCh0bi5WQUxVRSxkci5BcnJheURpbWVuc2lvbnMpO2NvbnN0IG89eFllKHIuc2l6ZSxpLnNpemUpLGE9dGhpcy5jcmVhdGVLZXJuZWwoZnVuY3Rpb24obCx1LGcpe2xldCBFPTA7Zm9yKGxldCBPPTA7TzxnOysrTylFKz1sW3RoaXMudGhyZWFkLnldW09d''@;'; put 'put ''KnVbT11bdGhpcy50aHJlYWQueF07cmV0dXJuIEV9LG8pKHIucmF3TnVtYmVycygpLGkucmF3TnVtYmVycygpLHIud2lkdGgoKSk7cmV0dXJuIGxhLm9ubHlOdW1iZXJzKGEpfSl9bW11bHRBcnJheVNpemUoZSx0KXtpZigyIT09ZS5hcmdzLmxlbmd0aClyZXR1cm4geWwuZXJyb3IoKTtjb25z''@;'; put 'put ''dCByPXRoaXMubWV0YWRhdGEoIk1NVUxUIiksaT1lLmFyZ3MubWFwKGw9Pnt2YXIgdTtyZXR1cm4gdGhpcy5hcnJheVNpemVGb3JBc3QobCxuZXcgejYodC5mb3JtdWxhQWRkcmVzcyx0LmFycmF5c0ZsYWd8fG51bGwhPT0odT1yPy5hcnJheUZ1bmN0aW9uKSYmdm9pZCAwIT09dSYmdSkpfSks''@;'; put 'put ''W28sYV09aTtyZXR1cm4geFllKG8sYSl9bWF4cG9vbChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIk1BWFBPT0wiKSwocixpLG89aSk9PntpZighci5oYXNPbmx5TnVtYmVycygpKXJldHVybiBuZXcgUHQodG4uVkFMVUUsZHIuTnVtYmVyUmFu''@;'; put 'put ''Z2UpO2NvbnN0IGE9Q21lKHIuc2l6ZSxpLG8pLGw9dGhpcy5jcmVhdGVLZXJuZWwoZnVuY3Rpb24odSxnLEUpe2NvbnN0IE89dGhpcy50aHJlYWQueCpFLFo9dGhpcy50aHJlYWQueSpFO2xldCBlZT11W1pdW09dO2ZvcihsZXQgdmU9MDt2ZTxnO3ZlKyspZm9yKGxldCBNZT0wO01lPGc7TWUr''@;'; put 'put ''KyllZT1NYXRoLm1heChlZSx1W1ordmVdW08rTWVdKTtyZXR1cm4gZWV9LGEpKHIucmF3TnVtYmVycygpLGksbyk7cmV0dXJuIGxhLm9ubHlOdW1iZXJzKGwpfSl9bWVkaWFucG9vbChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIk1FRElBTlBP''@;'; put 'put ''T0wiKSwocixpLG89aSk9PntpZighci5oYXNPbmx5TnVtYmVycygpKXJldHVybiBuZXcgUHQodG4uVkFMVUUsZHIuTnVtYmVyUmFuZ2UpO2NvbnN0IGE9Q21lKHIuc2l6ZSxpLG8pLGw9dGhpcy5jcmVhdGVLZXJuZWwoZnVuY3Rpb24odSxnLEUpe2NvbnN0IE89dGhpcy50aHJlYWQueCpFLFo9''@;'; put 'put ''dGhpcy50aHJlYWQueSpFO2xldCBlZT11W1pdW09dO2ZvcihsZXQgQ3Q9MDtDdDxnO0N0KyspZm9yKGxldCBBdD0wO0F0PGc7QXQrKyllZT1NYXRoLm1heChlZSx1W1orQ3RdW08rQXRdKTtsZXQgdmU9dVtaXVtPXTtmb3IobGV0IEN0PTA7Q3Q8ZztDdCsrKWZvcihsZXQgQXQ9MDtBdDxnO0F0''@;'; put 'put ''KyspdmU9TWF0aC5taW4odmUsdVtaK0N0XVtPK0F0XSk7Y29uc3QgTWU9ZypnO2xldCBIZT12ZSxXZT1lZSxhdD00Mjtmb3IobGV0IEN0PTA7Q3Q8MzI7Q3QrKyl7Y29uc3QgQXQ9KEhlK1dlKS8yO2xldCBLdD0wO2ZvcihsZXQgcXQ9MDtxdDxnO3F0KyspZm9yKGxldCBnbj0wO2duPGc7Z24r''@;'; put 'put ''Kyl1W1orcXRdW08rZ25dPkF0JiZLdCsrO2lmKGclMj09MCl7aWYoS3Q9PT1NZS8yKXthdD1BdDticmVha31LdD5NZS8yP0hlPUF0OldlPUF0fWVsc2V7aWYoS3Q9PT0oTWUtMSkvMil7YXQ9QXQ7YnJlYWt9S3Q+KE1lLTEpLzI/SGU9QXQ6V2U9QXR9fXJldHVybiBhdH0sYSkoci5yYXdOdW1i''@;'; put 'put ''ZXJzKCksaSxvKTtyZXR1cm4gbGEub25seU51bWJlcnMobCl9KX1tYXhwb29sQXJyYXlTaXplKGUsdCl7aWYoZS5hcmdzLmxlbmd0aDwyfHxlLmFyZ3MubGVuZ3RoPjMpcmV0dXJuIHlsLmVycm9yKCk7Y29uc3Qgcj10aGlzLm1ldGFkYXRhKCJNQVhQT09MIiksbz1lLmFyZ3MubWFwKGc9Pnt2''@;'; put 'put ''YXIgRTtyZXR1cm4gdGhpcy5hcnJheVNpemVGb3JBc3QoZyxuZXcgejYodC5mb3JtdWxhQWRkcmVzcyx0LmFycmF5c0ZsYWd8fG51bGwhPT0oRT1yPy5hcnJheUZ1bmN0aW9uKSYmdm9pZCAwIT09RSYmRSkpfSlbMF0sYT1lLmFyZ3NbMV07bGV0IGw7bD1hLnR5cGU9PT1ybi5OVU1CRVI/YS52''@;'; put 'put ''YWx1ZToxO2xldCB1PWw7aWYoMz09PWUuYXJncy5sZW5ndGgpe2NvbnN0IGc9ZS5hcmdzWzJdO3U9Zy50eXBlPT09cm4uTlVNQkVSP2cudmFsdWU6MX1yZXR1cm4gbD5vLndpZHRofHxsPm8uaGVpZ2h0fHx1Pmx8fChvLndpZHRoLWwpJXUhPT0wfHwoby5oZWlnaHQtbCkldSE9PTA/eWwuZXJy''@;'; put 'put ''b3IoKTpDbWUobyxsLHUpfW1lZGlhbnBvb2xBcnJheVNpemUoZSx0KXtyZXR1cm4gdGhpcy5tYXhwb29sQXJyYXlTaXplKGUsdCl9dHJhbnNwb3NlKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiVFJBTlNQT1NFIikscj0+e2NvbnN0IGk9ci5y''@;'; put 'put ''YXdEYXRhKCksbz1yLnNpemUsYT1bXTtmb3IobGV0IGw9MDtsPG8ud2lkdGg7KytsKXthW2xdPVtdO2ZvcihsZXQgdT0wO3U8by5oZWlnaHQ7Kyt1KWFbbF1bdV09aVt1XVtsXX1yZXR1cm4gbGEub25seVZhbHVlcyhhKX0pfXRyYW5zcG9zZUFycmF5U2l6ZShlLHQpe2lmKDEhPT1lLmFyZ3Mu''@;'; put 'put ''bGVuZ3RoKXJldHVybiB5bC5lcnJvcigpO2NvbnN0IHI9dGhpcy5tZXRhZGF0YSgiVFJBTlNQT1NFIiksaT1lLmFyZ3MubWFwKGE9Pnt2YXIgbDtyZXR1cm4gdGhpcy5hcnJheVNpemVGb3JBc3QoYSxuZXcgejYodC5mb3JtdWxhQWRkcmVzcyx0LmFycmF5c0ZsYWd8fG51bGwhPT0obD1yPy5h''@;'; put 'put ''cnJheUZ1bmN0aW9uKSYmdm9pZCAwIT09bCYmbCkpfSksW29dPWk7cmV0dXJuIG5ldyB5bChvLmhlaWdodCxvLndpZHRoKX1jcmVhdGVLZXJuZWwoZSx0KXtyZXR1cm4gZnVuY3Rpb24oLi4ucil7Y29uc3QgaT1bXTtmb3IobGV0IG89MDtvPHQuaGVpZ2h0Oysrbyl7aS5wdXNoKFtdKTtmb3Io''@;'; put 'put ''bGV0IGE9MDthPHQud2lkdGg7KythKWlbb11bYV09ZS5hcHBseSh7dGhyZWFkOnt4OmEseTpvfX0scil9cmV0dXJuIGl9fX1BWWUuaW1wbGVtZW50ZWRGdW5jdGlvbnM9e01NVUxUOnttZXRob2Q6Im1tdWx0IixhcnJheVNpemVNZXRob2Q6Im1tdWx0QXJyYXlTaXplIixwYXJhbWV0ZXJzOlt7''@;'; put 'put ''YXJndW1lbnRUeXBlOmV0LlJBTkdFfSx7YXJndW1lbnRUeXBlOmV0LlJBTkdFfV0sdmVjdG9yaXphdGlvbkZvcmJpZGRlbjohMH0sVFJBTlNQT1NFOnttZXRob2Q6InRyYW5zcG9zZSIsYXJyYXlTaXplTWV0aG9kOiJ0cmFuc3Bvc2VBcnJheVNpemUiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5''@;'; put 'put ''cGU6ZXQuUkFOR0V9XSx2ZWN0b3JpemF0aW9uRm9yYmlkZGVuOiEwfSxNQVhQT09MOnttZXRob2Q6Im1heHBvb2wiLGFycmF5U2l6ZU1ldGhvZDoibWF4cG9vbEFycmF5U2l6ZSIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5SQU5HRX0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHth''@;'; put 'put ''cmd1bWVudFR5cGU6ZXQuTlVNQkVSLG9wdGlvbmFsQXJnOiEwfV0sdmVjdG9yaXphdGlvbkZvcmJpZGRlbjohMH0sTUVESUFOUE9PTDp7bWV0aG9kOiJtZWRpYW5wb29sIixhcnJheVNpemVNZXRob2Q6Im1lZGlhbnBvb2xBcnJheVNpemUiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQu''@;'; put 'put ''UkFOR0V9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixvcHRpb25hbEFyZzohMH1dLHZlY3Rvcml6YXRpb25Gb3JiaWRkZW46ITB9fTtjbGFzcyBrWWUgZXh0ZW5kcyBCc3ttZWRpYW4oZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3Ms''@;'; put 'put ''dCx0aGlzLm1ldGFkYXRhKCJNRURJQU4iKSwoLi4ucik9Pntjb25zdCBpPXRoaXMuYXJpdGhtZXRpY0hlbHBlci5jb2VyY2VOdW1iZXJzRXhhY3RSYW5nZXMocik7cmV0dXJuIGkgaW5zdGFuY2VvZiBQdD9pOjA9PT1pLmxlbmd0aD9uZXcgUHQodG4uTlVNLGRyLk9uZVZhbHVlKTooaS5zb3J0''@;'; put 'put ''KChvLGEpPT5vLWEpLGkubGVuZ3RoJTI9PTA/KGlbaS5sZW5ndGgvMi0xXStpW2kubGVuZ3RoLzJdKS8yOmlbTWF0aC5mbG9vcihpLmxlbmd0aC8yKV0pfSl9bGFyZ2UoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJMQVJHRSIpLChyLGkpPT57''@;'; put 'put ''Y29uc3Qgbz10aGlzLmFyaXRobWV0aWNIZWxwZXIubWFueVRvRXhhY3ROdW1iZXJzKHIudmFsdWVzRnJvbVRvcExlZnRDb3JuZXIoKSk7cmV0dXJuIG8gaW5zdGFuY2VvZiBQdD9vOihvLnNvcnQoKGEsbCk9PmEtbCksKGk9TWF0aC50cnVuYyhpKSk+by5sZW5ndGg/bmV3IFB0KHRuLk5VTSxk''@;'; put 'put ''ci5WYWx1ZUxhcmdlKTpvW28ubGVuZ3RoLWldKX0pfXNtYWxsKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiU01BTEwiKSwocixpKT0+e2NvbnN0IG89dGhpcy5hcml0aG1ldGljSGVscGVyLm1hbnlUb0V4YWN0TnVtYmVycyhyLnZhbHVlc0Zy''@;'; put 'put ''b21Ub3BMZWZ0Q29ybmVyKCkpO3JldHVybiBvIGluc3RhbmNlb2YgUHQ/bzooby5zb3J0KChhLGwpPT5hLWwpLChpPU1hdGgudHJ1bmMoaSkpPm8ubGVuZ3RoP25ldyBQdCh0bi5OVU0sZHIuVmFsdWVMYXJnZSk6b1tpLTFdKX0pfX1rWWUuaW1wbGVtZW50ZWRGdW5jdGlvbnM9e01FRElBTjp7''@;'; put 'put ''bWV0aG9kOiJtZWRpYW4iLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuQU5ZfV0scmVwZWF0TGFzdEFyZ3M6MX0sTEFSR0U6e21ldGhvZDoibGFyZ2UiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuUkFOR0V9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjF9XX0s''@;'; put 'put ''U01BTEw6e21ldGhvZDoic21hbGwiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuUkFOR0V9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjF9XX19O2NsYXNzIFJZZSBleHRlbmRzIEJze21vZChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMu''@;'; put 'put ''bWV0YWRhdGEoIk1PRCIpLChyLGkpPT4wPT09aT9uZXcgUHQodG4uRElWX0JZX1pFUk8pOnIlaSl9fWZ1bmN0aW9uIHRLKG4pe3JldHVybiBjYyhuKSYmIU51bWJlci5pc0Zpbml0ZShMbyhuKSk/MDpufVJZZS5pbXBsZW1lbnRlZEZ1bmN0aW9ucz17TU9EOnttZXRob2Q6Im1vZCIscGFyYW1l''@;'; put 'put ''dGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSfV19fTtjbGFzcyBLNHtjb25zdHJ1Y3RvcihlLHQscil7dGhpcy5zdW1zcT1lLHRoaXMuc3VtPXQsdGhpcy5jb3VudD1yfXN0YXRpYyBzaW5nbGUoZSl7cmV0dXJuIG5ldyBLNChlKmUsZSwxKX1j''@;'; put 'put ''b21wb3NlKGUpe3JldHVybiBuZXcgSzQodGhpcy5zdW1zcStlLnN1bXNxLHRoaXMuc3VtK2Uuc3VtLHRoaXMuY291bnQrZS5jb3VudCl9YXZlcmFnZVZhbHVlKCl7aWYodGhpcy5jb3VudD4wKXJldHVybiB0aGlzLnN1bS90aGlzLmNvdW50fXZhclNWYWx1ZSgpe2lmKHRoaXMuY291bnQ+MSly''@;'; put 'put ''ZXR1cm4odGhpcy5zdW1zcS10aGlzLnN1bSp0aGlzLnN1bS90aGlzLmNvdW50KS8odGhpcy5jb3VudC0xKX12YXJQVmFsdWUoKXtpZih0aGlzLmNvdW50PjApcmV0dXJuKHRoaXMuc3Vtc3EtdGhpcy5zdW0qdGhpcy5zdW0vdGhpcy5jb3VudCkvdGhpcy5jb3VudH19SzQuZW1wdHk9bmV3IEs0''@;'; put 'put ''KDAsMCwwKTtjbGFzcyBTbWUgZXh0ZW5kcyBCc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hZGRXaXRoRXBzaWxvblJhdz0oZSx0KT0+dGhpcy5hcml0aG1ldGljSGVscGVyLmFkZFdpdGhFcHNpbG9uUmF3KGUsdCl9c3VtKGUsdCl7cmV0dXJuIHRoaXMuZG9TdW0o''@;'; put 'put ''ZS5hcmdzLHQpfXN1bXNxKGUsdCl7cmV0dXJuIHRoaXMucmVkdWNlKGUuYXJncyx0LDAsIlNVTVNRIix0aGlzLmFkZFdpdGhFcHNpbG9uUmF3LHI9Pk1hdGgucG93KExvKHIpLDIpLGRBKX1tYXgoZSx0KXtyZXR1cm4gdGhpcy5kb01heChlLmFyZ3MsdCl9bWF4YShlLHQpe3JldHVybiB0Syh0''@;'; put 'put ''aGlzLnJlZHVjZShlLmFyZ3MsdCxOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksIk1BWEEiLChpLG8pPT5NYXRoLm1heChpLG8pLExvLG5LKSl9bWluKGUsdCl7cmV0dXJuIHRoaXMuZG9NaW4oZS5hcmdzLHQpfW1pbmEoZSx0KXtyZXR1cm4gdEsodGhpcy5yZWR1Y2UoZS5hcmdzLHQsTnVtYmVy''@;'; put 'put ''LlBPU0lUSVZFX0lORklOSVRZLCJNSU5BIiwoaSxvKT0+TWF0aC5taW4oaSxvKSxMbyxuSykpfWNvdW50KGUsdCl7cmV0dXJuIHRoaXMuZG9Db3VudChlLmFyZ3MsdCl9Y291bnRhKGUsdCl7cmV0dXJuIHRoaXMuZG9Db3VudGEoZS5hcmdzLHQpfWF2ZXJhZ2UoZSx0KXtyZXR1cm4gdGhpcy5k''@;'; put 'put ''b0F2ZXJhZ2UoZS5hcmdzLHQpfWF2ZXJhZ2VhKGUsdCl7dmFyIHI7Y29uc3QgaT10aGlzLnJlZHVjZShlLmFyZ3MsdCxLNC5lbXB0eSwiX0FHR1JFR0FURV9BIiwobyxhKT0+by5jb21wb3NlKGEpLG89Pks0LnNpbmdsZShMbyhvKSksbkspO3JldHVybiBpIGluc3RhbmNlb2YgUHQ/aTpudWxs''@;'; put 'put ''IT09KHI9aS5hdmVyYWdlVmFsdWUoKSkmJnZvaWQgMCE9PXI/cjpuZXcgUHQodG4uRElWX0JZX1pFUk8pfXZhcnMoZSx0KXtyZXR1cm4gdGhpcy5kb1ZhclMoZS5hcmdzLHQpfXZhcnAoZSx0KXtyZXR1cm4gdGhpcy5kb1ZhclAoZS5hcmdzLHQpfXZhcmEoZSx0KXt2YXIgcjtjb25zdCBpPXRo''@;'; put 'put ''aXMucmVkdWNlQWdncmVnYXRlQShlLmFyZ3MsdCk7cmV0dXJuIGkgaW5zdGFuY2VvZiBQdD9pOm51bGwhPT0ocj1pLnZhclNWYWx1ZSgpKSYmdm9pZCAwIT09cj9yOm5ldyBQdCh0bi5ESVZfQllfWkVSTyl9dmFycGEoZSx0KXt2YXIgcjtjb25zdCBpPXRoaXMucmVkdWNlQWdncmVnYXRlQShl''@;'; put 'put ''LmFyZ3MsdCk7cmV0dXJuIGkgaW5zdGFuY2VvZiBQdD9pOm51bGwhPT0ocj1pLnZhclBWYWx1ZSgpKSYmdm9pZCAwIT09cj9yOm5ldyBQdCh0bi5ESVZfQllfWkVSTyl9c3RkZXZzKGUsdCl7cmV0dXJuIHRoaXMuZG9TdGRldlMoZS5hcmdzLHQpfXN0ZGV2cChlLHQpe3JldHVybiB0aGlzLmRv''@;'; put 'put ''U3RkZXZQKGUuYXJncyx0KX1zdGRldmEoZSx0KXtjb25zdCByPXRoaXMucmVkdWNlQWdncmVnYXRlQShlLmFyZ3MsdCk7aWYociBpbnN0YW5jZW9mIFB0KXJldHVybiByO3tjb25zdCBpPXIudmFyU1ZhbHVlKCk7cmV0dXJuIHZvaWQgMD09PWk/bmV3IFB0KHRuLkRJVl9CWV9aRVJPKTpNYXRo''@;'; put 'put ''LnNxcnQoaSl9fXN0ZGV2cGEoZSx0KXtjb25zdCByPXRoaXMucmVkdWNlQWdncmVnYXRlQShlLmFyZ3MsdCk7aWYociBpbnN0YW5jZW9mIFB0KXJldHVybiByO3tjb25zdCBpPXIudmFyUFZhbHVlKCk7cmV0dXJuIHZvaWQgMD09PWk/bmV3IFB0KHRuLkRJVl9CWV9aRVJPKTpNYXRoLnNxcnQo''@;'; put 'put ''aSl9fXByb2R1Y3QoZSx0KXtyZXR1cm4gdGhpcy5kb1Byb2R1Y3QoZS5hcmdzLHQpfXN1YnRvdGFsKGUsdCl7aWYoZS5hcmdzLmxlbmd0aDwyKXJldHVybiBuZXcgUHQodG4uTkEsZHIuV3JvbmdBcmdOdW1iZXIpO2NvbnN0IHI9dGhpcy5jb2VyY2VUb1R5cGUodGhpcy5ldmFsdWF0ZUFzdChl''@;'; put 'put ''LmFyZ3NbMF0sdCkse2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHQpLGk9ZS5hcmdzLnNsaWNlKDEpO3N3aXRjaChyKXtjYXNlIDE6Y2FzZSAxMDE6cmV0dXJuIHRoaXMuZG9BdmVyYWdlKGksdCk7Y2FzZSAyOmNhc2UgMTAyOnJldHVybiB0aGlzLmRvQ291bnQoaSx0KTtjYXNlIDM6Y2FzZSAx''@;'; put 'put ''MDM6cmV0dXJuIHRoaXMuZG9Db3VudGEoaSx0KTtjYXNlIDQ6Y2FzZSAxMDQ6cmV0dXJuIHRoaXMuZG9NYXgoaSx0KTtjYXNlIDU6Y2FzZSAxMDU6cmV0dXJuIHRoaXMuZG9NaW4oaSx0KTtjYXNlIDY6Y2FzZSAxMDY6cmV0dXJuIHRoaXMuZG9Qcm9kdWN0KGksdCk7Y2FzZSA3OmNhc2UgMTA3''@;'; put 'put ''OnJldHVybiB0aGlzLmRvU3RkZXZTKGksdCk7Y2FzZSA4OmNhc2UgMTA4OnJldHVybiB0aGlzLmRvU3RkZXZQKGksdCk7Y2FzZSA5OmNhc2UgMTA5OnJldHVybiB0aGlzLmRvU3VtKGksdCk7Y2FzZSAxMDpjYXNlIDExMDpyZXR1cm4gdGhpcy5kb1ZhclMoaSx0KTtjYXNlIDExOmNhc2UgMTEx''@;'; put 'put ''OnJldHVybiB0aGlzLmRvVmFyUChpLHQpO2RlZmF1bHQ6cmV0dXJuIG5ldyBQdCh0bi5WQUxVRSxkci5CYWRNb2RlKX19cmVkdWNlQWdncmVnYXRlKGUsdCl7cmV0dXJuIHRoaXMucmVkdWNlKGUsdCxLNC5lbXB0eSwiX0FHR1JFR0FURSIsKHIsaSk9PnIuY29tcG9zZShpKSxyPT5LNC5zaW5n''@;'; put 'put ''bGUoTG8ocikpLGRBKX1yZWR1Y2VBZ2dyZWdhdGVBKGUsdCl7cmV0dXJuIHRoaXMucmVkdWNlKGUsdCxLNC5lbXB0eSwiX0FHR1JFR0FURV9BIiwocixpKT0+ci5jb21wb3NlKGkpLHI9Pks0LnNpbmdsZShMbyhyKSksbkspfWRvQXZlcmFnZShlLHQpe3ZhciByO2NvbnN0IGk9dGhpcy5yZWR1''@;'; put 'put ''Y2VBZ2dyZWdhdGUoZSx0KTtyZXR1cm4gaSBpbnN0YW5jZW9mIFB0P2k6bnVsbCE9PShyPWkuYXZlcmFnZVZhbHVlKCkpJiZ2b2lkIDAhPT1yP3I6bmV3IFB0KHRuLkRJVl9CWV9aRVJPKX1kb1ZhclMoZSx0KXt2YXIgcjtjb25zdCBpPXRoaXMucmVkdWNlQWdncmVnYXRlKGUsdCk7cmV0dXJu''@;'; put 'put ''IGkgaW5zdGFuY2VvZiBQdD9pOm51bGwhPT0ocj1pLnZhclNWYWx1ZSgpKSYmdm9pZCAwIT09cj9yOm5ldyBQdCh0bi5ESVZfQllfWkVSTyl9ZG9WYXJQKGUsdCl7dmFyIHI7Y29uc3QgaT10aGlzLnJlZHVjZUFnZ3JlZ2F0ZShlLHQpO3JldHVybiBpIGluc3RhbmNlb2YgUHQ/aTpudWxsIT09''@;'; put 'put ''KHI9aS52YXJQVmFsdWUoKSkmJnZvaWQgMCE9PXI/cjpuZXcgUHQodG4uRElWX0JZX1pFUk8pfWRvU3RkZXZTKGUsdCl7Y29uc3Qgcj10aGlzLnJlZHVjZUFnZ3JlZ2F0ZShlLHQpO2lmKHIgaW5zdGFuY2VvZiBQdClyZXR1cm4gcjt7Y29uc3QgaT1yLnZhclNWYWx1ZSgpO3JldHVybiB2b2lk''@;'; put 'put ''IDA9PT1pP25ldyBQdCh0bi5ESVZfQllfWkVSTyk6TWF0aC5zcXJ0KGkpfX1kb1N0ZGV2UChlLHQpe2NvbnN0IHI9dGhpcy5yZWR1Y2VBZ2dyZWdhdGUoZSx0KTtpZihyIGluc3RhbmNlb2YgUHQpcmV0dXJuIHI7e2NvbnN0IGk9ci52YXJQVmFsdWUoKTtyZXR1cm4gdm9pZCAwPT09aT9uZXcg''@;'; put 'put ''UHQodG4uRElWX0JZX1pFUk8pOk1hdGguc3FydChpKX19ZG9Db3VudChlLHQpe3JldHVybiB0aGlzLnJlZHVjZShlLHQsMCwiQ09VTlQiLChyLGkpPT5yK2ksTG8scj0+Y2Mocik/MTowKX1kb0NvdW50YShlLHQpe3JldHVybiB0aGlzLnJlZHVjZShlLHQsMCwiQ09VTlRBIiwocixpKT0+citp''@;'; put 'put ''LExvLHI9PnI9PT1sbD8wOjEpfWRvTWF4KGUsdCl7cmV0dXJuIHRLKHRoaXMucmVkdWNlKGUsdCxOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksIk1BWCIsKGksbyk9Pk1hdGgubWF4KGksbyksTG8sZEEpKX1kb01pbihlLHQpe3JldHVybiB0Syh0aGlzLnJlZHVjZShlLHQsTnVtYmVyLlBPU0lU''@;'; put 'put ''SVZFX0lORklOSVRZLCJNSU4iLChpLG8pPT5NYXRoLm1pbihpLG8pLExvLGRBKSl9ZG9TdW0oZSx0KXtyZXR1cm4gdGhpcy5yZWR1Y2UoZSx0LDAsIlNVTSIsdGhpcy5hZGRXaXRoRXBzaWxvblJhdyxMbyxkQSl9ZG9Qcm9kdWN0KGUsdCl7cmV0dXJuIHRoaXMucmVkdWNlKGUsdCwxLCJQUk9E''@;'; put 'put ''VUNUIiwocixpKT0+cippLExvLGRBKX1yZWR1Y2UoZSx0LHIsaSxvLGEsbCl7cmV0dXJuIGUubGVuZ3RoPDE/bmV3IFB0KHRuLk5BLGRyLldyb25nQXJnTnVtYmVyKTplLnJlZHVjZSgodSxnKT0+e2lmKHUgaW5zdGFuY2VvZiBQdClyZXR1cm4gdTtpZihnLnR5cGU9PT1ybi5DRUxMX1JBTkdF''@;'; put 'put ''fHxnLnR5cGU9PT1ybi5DT0xVTU5fUkFOR0V8fGcudHlwZT09PXJuLlJPV19SQU5HRSl7Y29uc3QgTz10aGlzLmV2YWx1YXRlUmFuZ2UoZyx0LHIsaSxvLGEsbCk7cmV0dXJuIE8gaW5zdGFuY2VvZiBQdD9POm8oTyx1KX1sZXQgRTtpZihFPXRoaXMuZXZhbHVhdGVBc3QoZyx0KSxFIGluc3Rh''@;'; put 'put ''bmNlb2YgbGEpcmV0dXJuIEFycmF5LmZyb20oRS52YWx1ZXNGcm9tVG9wTGVmdENvcm5lcigpKS5tYXAobCkuZmlsdGVyKFo9PnZvaWQgMCE9PVopLm1hcChaPT5aIGluc3RhbmNlb2YgUHQ/WjphKFopKS5yZWR1Y2UoKFosZWUpPT5aIGluc3RhbmNlb2YgUHQ/WjplZSBpbnN0YW5jZW9mIFB0''@;'; put 'put ''P2VlOm8oWixlZSksdSk7aWYoZy50eXBlPT09cm4uQ0VMTF9SRUZFUkVOQ0Upe2lmKEU9bChFKSx2b2lkIDA9PT1FKXJldHVybiB1fWVsc2UgaWYoRT10aGlzLmNvZXJjZVNjYWxhclRvTnVtYmVyT3JFcnJvcihFKSxFPWwoRSksdm9pZCAwPT09RSlyZXR1cm4gdTtyZXR1cm4gRSBpbnN0YW5j''@;'; put 'put ''ZW9mIFB0P0U6byh1LGEoRSkpfSxyKX1ldmFsdWF0ZVJhbmdlKGUsdCxyLGksbyxhLGwpe2xldCB1O3RyeXt1PWJhLmZyb21Bc3QoZSx0LmZvcm11bGFBZGRyZXNzKX1jYXRjaChPKXtpZihPIGluc3RhbmNlb2YgaVApcmV0dXJuIG5ldyBQdCh0bi5SRUYsZHIuUmFuZ2VNYW55U2hlZXRzKTt0''@;'; put 'put ''aHJvdyBPfWNvbnN0IGc9dGhpcy5kZXBlbmRlbmN5R3JhcGguZ2V0UmFuZ2UodS5zdGFydCx1LmVuZCk7aWYodm9pZCAwPT09Zyl0aHJvdyBuZXcgRXJyb3IoIlJhbmdlIGRvZXMgbm90IGV4aXN0cyBpbiBncmFwaCIpO2xldCBFPWcuZ2V0RnVuY3Rpb25WYWx1ZShpKTtyZXR1cm4gdm9pZCAw''@;'; put 'put ''PT09RSYmKEU9dGhpcy5nZXRSYW5nZVZhbHVlcyhpLHUsZyxhLGwpLnJlZHVjZSgoWixlZSk9PlogaW5zdGFuY2VvZiBQdD9aOmVlIGluc3RhbmNlb2YgUHQ/ZWU6byhaLGVlKSxyKSxnLnNldEZ1bmN0aW9uVmFsdWUoaSxFKSksRX1nZXRSYW5nZVZhbHVlcyhlLHQscixpLG8pe2NvbnN0IGE9''@;'; put 'put ''W10se3NtYWxsZXJSYW5nZVZlcnRleDpsLHJlc3RSYW5nZTp1fT10aGlzLmRlcGVuZGVuY3lHcmFwaC5yYW5nZU1hcHBpbmcuZmluZFNtYWxsZXJSYW5nZSh0KTtsZXQgZztpZih2b2lkIDAhPT1sJiZ0aGlzLmRlcGVuZGVuY3lHcmFwaC5leGlzdHNFZGdlKGwscikpe2NvbnN0IEU9bC5nZXRG''@;'; put 'put ''dW5jdGlvblZhbHVlKGUpO2lmKHZvaWQgMCE9PUUpYS5wdXNoKEUpO2Vsc2UgZm9yKGNvbnN0IE8gb2YgbC5yYW5nZS5hZGRyZXNzZXModGhpcy5kZXBlbmRlbmN5R3JhcGgpKXtjb25zdCBaPW8odGhpcy5kZXBlbmRlbmN5R3JhcGguZ2V0U2NhbGFyVmFsdWUoTykpO1ogaW5zdGFuY2VvZiBQ''@;'; put 'put ''dD9hLnB1c2goWik6dm9pZCAwIT09WiYmYS5wdXNoKGkoWikpfWc9dX1lbHNlIGc9dDtmb3IoY29uc3QgRSBvZiBnLmFkZHJlc3Nlcyh0aGlzLmRlcGVuZGVuY3lHcmFwaCkpe2NvbnN0IE89byh0aGlzLmRlcGVuZGVuY3lHcmFwaC5nZXRTY2FsYXJWYWx1ZShFKSk7TyBpbnN0YW5jZW9mIFB0''@;'; put 'put ''P2EucHVzaChPKTp2b2lkIDAhPT1PJiZhLnB1c2goaShPKSl9cmV0dXJuIGF9fWZ1bmN0aW9uIGRBKG4pe2lmKGNjKG4pfHxuIGluc3RhbmNlb2YgUHQpcmV0dXJuIG59ZnVuY3Rpb24gbksobil7cmV0dXJuImJvb2xlYW4iPT10eXBlb2Ygbj90bWUobik6Y2Mobil8fG4gaW5zdGFuY2VvZiBQ''@;'; put 'put ''dD9uOiJzdHJpbmciPT10eXBlb2Ygbj8wOnZvaWQgMH1TbWUuaW1wbGVtZW50ZWRGdW5jdGlvbnM9e1NVTTp7bWV0aG9kOiJzdW0iLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuQU5ZfV0scmVwZWF0TGFzdEFyZ3M6MX0sU1VNU1E6e21ldGhvZDoic3Vtc3EiLHBhcmFtZXRlcnM6W3th''@;'; put 'put ''cmd1bWVudFR5cGU6ZXQuQU5ZfV0scmVwZWF0TGFzdEFyZ3M6MX0sTUFYOnttZXRob2Q6Im1heCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5BTll9XSxyZXBlYXRMYXN0QXJnczoxfSxNSU46e21ldGhvZDoibWluIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LkFOWX1dLHJl''@;'; put 'put ''cGVhdExhc3RBcmdzOjF9LE1BWEE6e21ldGhvZDoibWF4YSIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5BTll9XSxyZXBlYXRMYXN0QXJnczoxfSxNSU5BOnttZXRob2Q6Im1pbmEiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuQU5ZfV0scmVwZWF0TGFzdEFyZ3M6MX0sQ09V''@;'; put 'put ''TlQ6e21ldGhvZDoiY291bnQiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuQU5ZfV0scmVwZWF0TGFzdEFyZ3M6MX0sQ09VTlRBOnttZXRob2Q6ImNvdW50YSIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5BTll9XSxyZXBlYXRMYXN0QXJnczoxfSxBVkVSQUdFOnttZXRob2Q6''@;'; put 'put ''ImF2ZXJhZ2UiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuQU5ZfV0scmVwZWF0TGFzdEFyZ3M6MX0sQVZFUkFHRUE6e21ldGhvZDoiYXZlcmFnZWEiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuQU5ZfV0scmVwZWF0TGFzdEFyZ3M6MX0sUFJPRFVDVDp7bWV0aG9kOiJwcm9k''@;'; put 'put ''dWN0IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LkFOWX1dLHJlcGVhdExhc3RBcmdzOjF9LCJWQVIuUyI6e21ldGhvZDoidmFycyIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5BTll9XSxyZXBlYXRMYXN0QXJnczoxfSwiVkFSLlAiOnttZXRob2Q6InZhcnAiLHBhcmFtZXRl''@;'; put 'put ''cnM6W3thcmd1bWVudFR5cGU6ZXQuQU5ZfV0scmVwZWF0TGFzdEFyZ3M6MX0sVkFSQTp7bWV0aG9kOiJ2YXJhIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LkFOWX1dLHJlcGVhdExhc3RBcmdzOjF9LFZBUlBBOnttZXRob2Q6InZhcnBhIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBl''@;'; put 'put ''OmV0LkFOWX1dLHJlcGVhdExhc3RBcmdzOjF9LCJTVERFVi5TIjp7bWV0aG9kOiJzdGRldnMiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuQU5ZfV0scmVwZWF0TGFzdEFyZ3M6MX0sIlNUREVWLlAiOnttZXRob2Q6InN0ZGV2cCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5B''@;'; put 'put ''Tll9XSxyZXBlYXRMYXN0QXJnczoxfSxTVERFVkE6e21ldGhvZDoic3RkZXZhIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LkFOWX1dLHJlcGVhdExhc3RBcmdzOjF9LFNUREVWUEE6e21ldGhvZDoic3RkZXZwYSIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5BTll9XSxyZXBl''@;'; put 'put ''YXRMYXN0QXJnczoxfSxTVUJUT1RBTDp7bWV0aG9kOiJzdWJ0b3RhbCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuQU5ZfV0scmVwZWF0TGFzdEFyZ3M6MX19LFNtZS5hbGlhc2VzPXtWQVI6IlZBUi5TIixWQVJQOiJWQVIuUCIsU1RERVY6''@;'; put 'put ''IlNUREVWLlMiLFNUREVWUDoiU1RERVYuUCIsVkFSUzoiVkFSLlMiLFNUREVWUzoiU1RERVYuUyJ9O2NsYXNzIElZZSBleHRlbmRzIEJze3Bvd2VyKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiUE9XRVIiKSxNYXRoLnBvdyl9fUlZZS5pbXBs''@;'; put 'put ''ZW1lbnRlZEZ1bmN0aW9ucz17UE9XRVI6e21ldGhvZDoicG93ZXIiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn1dfX07Y2xhc3MgRFllIGV4dGVuZHMgQnN7cmFkaWFucyhlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUu''@;'; put 'put ''YXJncyx0LHRoaXMubWV0YWRhdGEoIlJBRElBTlMiKSxyPT5yKihNYXRoLlBJLzE4MCkpfX1EWWUuaW1wbGVtZW50ZWRGdW5jdGlvbnM9e1JBRElBTlM6e21ldGhvZDoicmFkaWFucyIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9XX19O2NsYXNzIEZZZSBleHRlbmRzIEJz''@;'; put 'put ''e2RlYzJiaW4oZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJERUMyQklOIiksKHIsaSk9PnU5KHIsMixpKSl9ZGVjMm9jdChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkRFQzJPQ1QiKSwocixp''@;'; put 'put ''KT0+dTkociw4LGkpKX1kZWMyaGV4KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiREVDMkhFWCIpLChyLGkpPT51OShyLDE2LGkpKX1iaW4yZGVjKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgi''@;'; put 'put ''QklOMkRFQyIpLHI9Pntjb25zdCBpPVk2KHIsMiwxMCk7cmV0dXJuIHZvaWQgMD09PWk/bmV3IFB0KHRuLk5VTSxkci5Ob3RCaW5hcnkpOmQ5KGksMil9KX1iaW4yb2N0KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQklOMk9DVCIpLChyLGkp''@;'; put 'put ''PT57Y29uc3Qgbz1ZNihyLDIsMTApO3JldHVybiB2b2lkIDA9PT1vP25ldyBQdCh0bi5OVU0sZHIuTm90QmluYXJ5KTp1OShkOShvLDIpLDgsaSl9KX1iaW4yaGV4KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQklOMkhFWCIpLChyLGkpPT57''@;'; put 'put ''Y29uc3Qgbz1ZNihyLDIsMTApO3JldHVybiB2b2lkIDA9PT1vP25ldyBQdCh0bi5OVU0sZHIuTm90QmluYXJ5KTp1OShkOShvLDIpLDE2LGkpfSl9b2N0MmRlYyhlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIk9DVDJERUMiKSxyPT57Y29uc3Qg''@;'; put 'put ''aT1ZNihyLDgsMTApO3JldHVybiB2b2lkIDA9PT1pP25ldyBQdCh0bi5OVU0sZHIuTm90T2N0YWwpOmQ5KGksOCl9KX1vY3QyYmluKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiT0NUMkJJTiIpLChyLGkpPT57Y29uc3Qgbz1ZNihyLDgsMTAp''@;'; put 'put ''O3JldHVybiB2b2lkIDA9PT1vP25ldyBQdCh0bi5OVU0sZHIuTm90T2N0YWwpOnU5KGQ5KG8sOCksMixpKX0pfW9jdDJoZXgoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJPQ1QySEVYIiksKHIsaSk9Pntjb25zdCBvPVk2KHIsOCwxMCk7cmV0''@;'; put 'put ''dXJuIHZvaWQgMD09PW8/bmV3IFB0KHRuLk5VTSxkci5Ob3RPY3RhbCk6dTkoZDkobyw4KSwxNixpKX0pfWhleDJkZWMoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJIRVgyREVDIikscj0+e2NvbnN0IGk9WTYociwxNiwxMCk7cmV0dXJuIHZv''@;'; put 'put ''aWQgMD09PWk/bmV3IFB0KHRuLk5VTSxkci5Ob3RIZXgpOmQ5KGksMTYpfSl9aGV4MmJpbihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkhFWDJCSU4iKSwocixpKT0+e2NvbnN0IG89WTYociwxNiwxMCk7cmV0dXJuIHZvaWQgMD09PW8/bmV3''@;'; put 'put ''IFB0KHRuLk5VTSxkci5Ob3RIZXgpOnU5KGQ5KG8sMTYpLDIsaSl9KX1oZXgyb2N0KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiSEVYMk9DVCIpLChyLGkpPT57Y29uc3Qgbz1ZNihyLDE2LDEwKTtyZXR1cm4gdm9pZCAwPT09bz9uZXcgUHQo''@;'; put 'put ''dG4uTlVNLGRyLk5vdEhleCk6dTkoZDkobywxNiksOCxpKX0pfWJhc2UoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJCQVNFIiksWHRuKX1kZWNpbWFsKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0''@;'; put 'put ''YSgiREVDSU1BTCIpLChyLGkpPT57Y29uc3Qgbz1ZNihyLGksMjU1KTtyZXR1cm4gdm9pZCAwPT09bz9uZXcgUHQodG4uTlVNLGRyLk5vdEhleCk6cGFyc2VJbnQobyxpKX0pfX1mdW5jdGlvbiBZNihuLGUsdCl7Y29uc3Qgcj0iMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFla''@;'; put 'put ''Ii5zdWJzdHIoMCxlKSxpPW5ldyBSZWdFeHAoYF5bJHtyfV0rJGApO2lmKCEobi5sZW5ndGg+dCkmJmkudGVzdChuKSlyZXR1cm4gbn1mdW5jdGlvbiB1OShuLGUsdCl7aWYobj5mdW5jdGlvbiBLdG4obil7cmV0dXJuLVBZZShuKS0xfShlKSlyZXR1cm4gbmV3IFB0KHRuLk5VTSxkci5WYWx1''@;'; put 'put ''ZUJhc2VMYXJnZSk7aWYobjxQWWUoZSkpcmV0dXJuIG5ldyBQdCh0bi5OVU0sZHIuVmFsdWVCYXNlU21hbGwpO2NvbnN0IHI9SFllKG4sZSk7cmV0dXJuIHZvaWQgMD09PXR8fG48MD9yOnIubGVuZ3RoPnQ/bmV3IFB0KHRuLk5VTSxkci5WYWx1ZUJhc2VMb25nKTpycChyLHQpfWZ1bmN0aW9u''@;'; put 'put ''IFBZZShuKXtyZXR1cm4tTWF0aC5wb3cobiwxMCkvMn1mdW5jdGlvbiBYdG4obixlLHQpe2NvbnN0IHI9SFllKG4sZSk7cmV0dXJuIHZvaWQgMCE9PXQmJnQ+ci5sZW5ndGg/cnAocix0KTpyfWZ1bmN0aW9uIEhZZShuLGUpe3JldHVybihuKyhuPDA/TWF0aC5wb3coZSwxMCk6MCkpLnRvU3Ry''@;'; put 'put ''aW5nKGUpLnRvVXBwZXJDYXNlKCl9ZnVuY3Rpb24gZDkobixlKXtjb25zdCB0PXBhcnNlSW50KG4sZSkscj1NYXRoLnBvdyhlLDEwKTtyZXR1cm4gdD49ci8yP3Qtcjp0fUZZZS5pbXBsZW1lbnRlZEZ1bmN0aW9ucz17REVDMkJJTjp7bWV0aG9kOiJkZWMyYmluIixwYXJhbWV0ZXJzOlt7YXJn''@;'; put 'put ''dW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsb3B0aW9uYWxBcmc6ITAsbWluVmFsdWU6MSxtYXhWYWx1ZToxMH1dfSxERUMyT0NUOnttZXRob2Q6ImRlYzJvY3QiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0''@;'; put 'put ''Lk5VTUJFUixvcHRpb25hbEFyZzohMCxtaW5WYWx1ZToxLG1heFZhbHVlOjEwfV19LERFQzJIRVg6e21ldGhvZDoiZGVjMmhleCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG9wdGlvbmFsQXJnOiEwLG1pblZhbHVlOjEsbWF4''@;'; put 'put ''VmFsdWU6MTB9XX0sQklOMkRFQzp7bWV0aG9kOiJiaW4yZGVjIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlNUUklOR31dfSxCSU4yT0NUOnttZXRob2Q6ImJpbjJvY3QiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuU1RSSU5HfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixv''@;'; put 'put ''cHRpb25hbEFyZzohMCxtaW5WYWx1ZTowLG1heFZhbHVlOjEwfV19LEJJTjJIRVg6e21ldGhvZDoiYmluMmhleCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5TVFJJTkd9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG9wdGlvbmFsQXJnOiEwLG1pblZhbHVlOjAsbWF4VmFsdWU6MTB9''@;'; put 'put ''XX0sT0NUMkRFQzp7bWV0aG9kOiJvY3QyZGVjIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlNUUklOR31dfSxPQ1QyQklOOnttZXRob2Q6Im9jdDJiaW4iLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuU1RSSU5HfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixvcHRpb25hbEFy''@;'; put 'put ''ZzohMCxtaW5WYWx1ZTowLG1heFZhbHVlOjEwfV19LE9DVDJIRVg6e21ldGhvZDoib2N0MmhleCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5TVFJJTkd9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG9wdGlvbmFsQXJnOiEwLG1pblZhbHVlOjAsbWF4VmFsdWU6MTB9XX0sSEVYMkRF''@;'; put 'put ''Qzp7bWV0aG9kOiJoZXgyZGVjIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlNUUklOR31dfSxIRVgyQklOOnttZXRob2Q6ImhleDJiaW4iLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuU1RSSU5HfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixvcHRpb25hbEFyZzohMCxtaW5W''@;'; put 'put ''YWx1ZTowLG1heFZhbHVlOjEwfV19LEhFWDJPQ1Q6e21ldGhvZDoiaGV4Mm9jdCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5TVFJJTkd9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG9wdGlvbmFsQXJnOiEwLG1pblZhbHVlOjAsbWF4VmFsdWU6MTB9XX0sREVDSU1BTDp7bWV0aG9k''@;'; put 'put ''OiJkZWNpbWFsIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlNUUklOR30se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MixtYXhWYWx1ZTozNn1dfSxCQVNFOnttZXRob2Q6ImJhc2UiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9''@;'; put 'put ''LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjIsbWF4VmFsdWU6MzZ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG9wdGlvbmFsQXJnOiEwLG1pblZhbHVlOjAsbWF4VmFsdWU6MjU1fV19fTtjbGFzcyBWWWUgZXh0ZW5kcyBCc3tyYW5kKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVu''@;'; put 'put ''Y3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiUkFORCIpLE1hdGgucmFuZG9tKX1yYW5kYmV0d2VlbihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlJBTkRCRVRXRUVOIiksKHIsaSk9Pmk8cj9uZXcgUHQodG4uTlVNLGRyLldyb25nT3Jk''@;'; put 'put ''ZXIpOigocj1NYXRoLmNlaWwocikpPT09KGk9TWF0aC5mbG9vcihpKSsxKSYmKGkrPTEpLHIrTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihpLXIpKSkpfX1mdW5jdGlvbiBCWWUobil7Y29uc3QgZT1NYXRoLmNlaWwobik7cmV0dXJuIGUlMj09MT9lOmUrMX1mdW5jdGlvbiBqWWUobil7Y29u''@;'; put 'put ''c3QgZT1NYXRoLmNlaWwobik7cmV0dXJuIGUlMj09MD9lOmUrMX1WWWUuaW1wbGVtZW50ZWRGdW5jdGlvbnM9e1JBTkQ6e21ldGhvZDoicmFuZCIscGFyYW1ldGVyczpbXSxpc1ZvbGF0aWxlOiEwfSxSQU5EQkVUV0VFTjp7bWV0aG9kOiJyYW5kYmV0d2VlbiIscGFyYW1ldGVyczpbe2FyZ3Vt''@;'; put 'put ''ZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSfV0saXNWb2xhdGlsZTohMH19O2NsYXNzIEVtZSBleHRlbmRzIEJze3JvdW5kdXAoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJST1VORERPV04iKSwocixpKT0+e2Nv''@;'; put 'put ''bnN0IG89TWF0aC5wb3coMTAsaSk7cmV0dXJuIHI8MD8tTWF0aC5jZWlsKC1yKm8pL286TWF0aC5jZWlsKHIqbykvb30pfXJvdW5kZG93bihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlJPVU5ERE9XTiIpLChyLGkpPT57Y29uc3Qgbz1NYXRo''@;'; put 'put ''LnBvdygxMCxpKTtyZXR1cm4gcjwwPy1NYXRoLmZsb29yKC1yKm8pL286TWF0aC5mbG9vcihyKm8pL299KX1yb3VuZChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlJPVU5EIiksKHIsaSk9Pntjb25zdCBvPU1hdGgucG93KDEwLGkpO3JldHVy''@;'; put 'put ''biByPDA/LU1hdGgucm91bmQoLXIqbykvbzpNYXRoLnJvdW5kKHIqbykvb30pfWludEZ1bmMoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJJTlQiKSxyPT5yPDA/LU1hdGguZmxvb3IoLXIpOk1hdGguZmxvb3IocikpfWV2ZW4oZSx0KXtyZXR1''@;'; put 'put ''cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJFVkVOIikscj0+cjwwPy1qWWUoLXIpOmpZZShyKSl9b2RkKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiT0REIikscj0+cjwwPy1CWWUoLXIpOkJZZShyKSl9Y2Vp''@;'; put 'put ''bGluZ21hdGgoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJDRUlMSU5HLk1BVEgiKSwocixpLG8pPT4wPT09aXx8MD09PXI/MDooaT1NYXRoLmFicyhpKSwxPT09byYmcjwwJiYoaT0taSksTWF0aC5jZWlsKHIvaSkqaSkpfWNlaWxpbmcoZSx0''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJDRUlMSU5HIiksKHIsaSk9PjA9PT1yPzA6MD09PWk/bmV3IFB0KHRuLkRJVl9CWV9aRVJPKTpyPjAmJmk8MD9uZXcgUHQodG4uTlVNLGRyLkRpc3RpbmN0U2lnbnMpOk1hdGguY2VpbChyL2kpKmkpfWNl''@;'; put 'put ''aWxpbmdwcmVjaXNlKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQ0VJTElORy5QUkVDSVNFIiksKHIsaSk9PjA9PT1pfHwwPT09cj8wOihpPU1hdGguYWJzKGkpLE1hdGguY2VpbChyL2kpKmkpKX1mbG9vcm1hdGgoZSx0KXtyZXR1cm4gdGhp''@;'; put 'put ''cy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJGTE9PUi5NQVRIIiksKHIsaSxvKT0+MD09PWl8fDA9PT1yPzA6KGk9TWF0aC5hYnMoaSksMT09PW8mJnI8MCYmKGkqPS0xKSxNYXRoLmZsb29yKHIvaSkqaSkpfWZsb29yKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24o''@;'; put 'put ''ZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiRkxPT1IiKSwocixpKT0+MD09PXI/MDowPT09aT9uZXcgUHQodG4uRElWX0JZX1pFUk8pOnI+MCYmaTwwP25ldyBQdCh0bi5OVU0sZHIuRGlzdGluY3RTaWducyk6TWF0aC5mbG9vcihyL2kpKmkpfWZsb29ycHJlY2lzZShlLHQpe3JldHVybiB0aGlz''@;'; put 'put ''LnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkZMT09SLlBSRUNJU0UiKSwocixpKT0+MD09PWl8fDA9PT1yPzA6KGk9TWF0aC5hYnMoaSksTWF0aC5mbG9vcihyL2kpKmkpKX19RW1lLmltcGxlbWVudGVkRnVuY3Rpb25zPXtST1VORFVQOnttZXRob2Q6InJvdW5kdXAiLHBh''@;'; put 'put ''cmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixkZWZhdWx0VmFsdWU6MH1dfSxST1VORERPV046e21ldGhvZDoicm91bmRkb3duIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OVU1C''@;'; put 'put ''RVIsZGVmYXVsdFZhbHVlOjB9XX0sUk9VTkQ6e21ldGhvZDoicm91bmQiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixkZWZhdWx0VmFsdWU6MH1dfSxJTlQ6e21ldGhvZDoiaW50RnVuYyIscGFyYW1ldGVyczpbe2FyZ3VtZW50''@;'; put 'put ''VHlwZTpldC5OVU1CRVJ9XX0sRVZFTjp7bWV0aG9kOiJldmVuIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn1dfSxPREQ6e21ldGhvZDoib2RkIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn1dfSwiQ0VJTElORy5NQVRIIjp7bWV0aG9kOiJjZWlsaW5n''@;'; put 'put ''bWF0aCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGRlZmF1bHRWYWx1ZToxfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixkZWZhdWx0VmFsdWU6MH1dfSxDRUlMSU5HOnttZXRob2Q6ImNlaWxpbmciLHBhcmFtZXRlcnM6W3th''@;'; put 'put ''cmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn1dfSwiQ0VJTElORy5QUkVDSVNFIjp7bWV0aG9kOiJjZWlsaW5ncHJlY2lzZSIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGRlZmF1bHRWYWx1''@;'; put 'put ''ZToxfV19LCJGTE9PUi5NQVRIIjp7bWV0aG9kOiJmbG9vcm1hdGgiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixkZWZhdWx0VmFsdWU6MX0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZGVmYXVsdFZhbHVlOjB9XX0sRkxPT1I6''@;'; put 'put ''e21ldGhvZDoiZmxvb3IiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn1dfSwiRkxPT1IuUFJFQ0lTRSI6e21ldGhvZDoiZmxvb3JwcmVjaXNlIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50''@;'; put 'put ''VHlwZTpldC5OVU1CRVIsZGVmYXVsdFZhbHVlOjF9XX19LEVtZS5hbGlhc2VzPXsiSVNPLkNFSUxJTkciOiJDRUlMSU5HLlBSRUNJU0UiLFRSVU5DOiJST1VORERPV04ifTtjbGFzcyBVWWUgZXh0ZW5kcyBCc3tzcXJ0KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhp''@;'; put 'put ''cy5tZXRhZGF0YSgiU1FSVCIpLE1hdGguc3FydCl9fWZ1bmN0aW9uKlF0bigpe31mdW5jdGlvbiBKdG4obil7Y29uc3QgZT1uW1N5bWJvbC5pdGVyYXRvcl0oKSx7ZG9uZTp0LHZhbHVlOnJ9PWUubmV4dCgpO3JldHVybiB0P3tyZXN0OlF0bigpfTp7dmFsdWU6cixyZXN0OmV9fVVZZS5pbXBs''@;'; put 'put ''ZW1lbnRlZEZ1bmN0aW9ucz17U1FSVDp7bWV0aG9kOiJzcXJ0IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn1dfX07Y2xhc3MgdG5ue2NvbnN0cnVjdG9yKGUsdCxyLGksbyl7dGhpcy5pbnRlcnByZXRlcj1lLHRoaXMuY2FjaGVLZXk9dCx0aGlzLnJlZHVjZUluaXRpYWxW''@;'; put 'put ''YWx1ZT1yLHRoaXMuY29tcG9zZUZ1bmN0aW9uPWksdGhpcy5tYXBGdW5jdGlvbj1vLHRoaXMuZGVwZW5kZW5jeUdyYXBoPXRoaXMuaW50ZXJwcmV0ZXIuZGVwZW5kZW5jeUdyYXBofWNvbXB1dGUoZSx0KXtmb3IoY29uc3QgbyBvZiB0KWlmKCFvLmNvbmRpdGlvblJhbmdlLnNhbWVEaW1lbnNp''@;'; put 'put ''b25zQXMoZSkpcmV0dXJuIG5ldyBQdCh0bi5WQUxVRSxkci5FcXVhbExlbmd0aCk7Y29uc3Qgcj10aGlzLnRyeVRvR2V0UmFuZ2VWZXJ0ZXhGb3JSYW5nZVZhbHVlKGUpLGk9dC5tYXAobz0+dGhpcy50cnlUb0dldFJhbmdlVmVydGV4Rm9yUmFuZ2VWYWx1ZShvLmNvbmRpdGlvblJhbmdlKSk7''@;'; put 'put ''aWYociYmaS5ldmVyeShvPT52b2lkIDAhPT1vKSl7Y29uc3Qgbz10Lm1hcCh1PT51LmNyaXRlcmlvblBhY2thZ2UucmF3KS5qb2luKCIsIiksYT10aGlzLmZpbmRBbHJlYWR5Q29tcHV0ZWRWYWx1ZUluQ2FjaGUocix0aGlzLmNhY2hlS2V5KHQpLG8pO2lmKHZvaWQgMCE9PWEpcmV0dXJuIHRo''@;'; put 'put ''aXMuaW50ZXJwcmV0ZXIuc3RhdHMuaW5jcmVtZW50Q3JpdGVyaW9uRnVuY3Rpb25GdWxsQ2FjaGVVc2VkKCksYTtjb25zdCBsPXRoaXMuYnVpbGROZXdDcml0ZXJpb25DYWNoZSh0aGlzLmNhY2hlS2V5KHQpLHQubWFwKHU9PnUuY29uZGl0aW9uUmFuZ2UucmFuZ2UpLGUucmFuZ2UpO3JldHVy''@;'; put 'put ''biBsLmhhcyhvKXx8bC5zZXQobyxbdGhpcy5ldmFsdWF0ZVJhbmdlVmFsdWUoZSx0KSx0Lm1hcCh1PT51LmNyaXRlcmlvblBhY2thZ2UubGFtYmRhKV0pLHIuc2V0Q3JpdGVyaW9uRnVuY3Rpb25WYWx1ZXModGhpcy5jYWNoZUtleSh0KSxsKSxpLmZvckVhY2godT0+e3ZvaWQgMCE9PXUmJnUu''@;'; put 'put ''YWRkRGVwZW5kZW50Q2FjaGVSYW5nZShyKX0pLGwuZ2V0KG8pWzBdfXJldHVybiB0aGlzLmV2YWx1YXRlUmFuZ2VWYWx1ZShlLHQpfXRyeVRvR2V0UmFuZ2VWZXJ0ZXhGb3JSYW5nZVZhbHVlKGUpe2NvbnN0IHQ9ZS5yYW5nZTtpZih2b2lkIDAhPT10KXJldHVybiB0aGlzLmRlcGVuZGVuY3lH''@;'; put 'put ''cmFwaC5nZXRSYW5nZSh0LnN0YXJ0LHQuZW5kKX1yZWR1Y2VGdW5jdGlvbihlKXtsZXQgdD10aGlzLnJlZHVjZUluaXRpYWxWYWx1ZTtmb3IoY29uc3QgciBvZiBlKXQ9dGhpcy5jb21wb3NlRnVuY3Rpb24odCxyKTtyZXR1cm4gdH1maW5kQWxyZWFkeUNvbXB1dGVkVmFsdWVJbkNhY2hlKGUs''@;'; put 'put ''dCxyKXtyZXR1cm4gZS5nZXRDcml0ZXJpb25GdW5jdGlvblZhbHVlKHQscil9ZXZhbHVhdGVSYW5nZVZhbHVlKGUsdCl7Y29uc3Qgcj10Lm1hcChsPT5sLmNyaXRlcmlvblBhY2thZ2UubGFtYmRhKSxpPUFycmF5LmZyb20oZS52YWx1ZXNGcm9tVG9wTGVmdENvcm5lcigpKS5tYXAodGhpcy5t''@;'; put 'put ''YXBGdW5jdGlvbilbU3ltYm9sLml0ZXJhdG9yXSgpLGE9V1llKHIsdC5tYXAobD0+bC5jb25kaXRpb25SYW5nZS5pdGVyYXRlVmFsdWVzRnJvbVRvcExlZnRDb3JuZXIoKSksaSk7cmV0dXJuIHRoaXMucmVkdWNlRnVuY3Rpb24oYSl9YnVpbGROZXdDcml0ZXJpb25DYWNoZShlLHQscil7Y29u''@;'; put 'put ''c3QgaT10aGlzLmRlcGVuZGVuY3lHcmFwaC5nZXRSYW5nZShyLnN0YXJ0LHIuZW5kKSx7c21hbGxlclJhbmdlVmVydGV4Om8scmVzdENvbmRpdGlvblJhbmdlczphLHJlc3RWYWx1ZXNSYW5nZTpsfT0oKG4sZSx0KT0+e2lmKHQuZW5kLnJvdz50LnN0YXJ0LnJvdyl7Y29uc3Qgcj1Cbyh0LmVu''@;'; put 'put ''ZC5zaGVldCx0LmVuZC5jb2wsdC5lbmQucm93LTEpLGk9bi5nZXRSYW5nZSh0LnN0YXJ0LHIpO2lmKHZvaWQgMCE9PWkpcmV0dXJue3NtYWxsZXJSYW5nZVZlcnRleDppLHJlc3RWYWx1ZXNSYW5nZTp0LndpdGhTdGFydChCbyh0LnN0YXJ0LnNoZWV0LHQuc3RhcnQuY29sLHQuZW5kLnJvdykp''@;'; put 'put ''LHJlc3RDb25kaXRpb25SYW5nZXM6ZS5tYXAobz0+by53aXRoU3RhcnQoQm8oby5zdGFydC5zaGVldCxvLnN0YXJ0LmNvbCxvLmVuZC5yb3cpKSl9fXJldHVybntyZXN0VmFsdWVzUmFuZ2U6dCxyZXN0Q29uZGl0aW9uUmFuZ2VzOmV9fSkodGhpcy5kZXBlbmRlbmN5R3JhcGgsdCxyKTtsZXQg''@;'; put 'put ''dTt1PXZvaWQgMCE9PW8mJnRoaXMuZGVwZW5kZW5jeUdyYXBoLmV4aXN0c0VkZ2UobyxpKT9vLmdldENyaXRlcmlvbkZ1bmN0aW9uVmFsdWVzKGUpOm5ldyBNYXA7Y29uc3QgZz1uZXcgTWFwO3JldHVybiB1LmZvckVhY2goKFtFLE9dLFopPT57Y29uc3QgZWU9V1llKE8sYS5tYXAoTWU9PnpZ''@;'; put 'put ''ZSh0aGlzLmRlcGVuZGVuY3lHcmFwaCxNZSkpLEFycmF5LmZyb20oelllKHRoaXMuZGVwZW5kZW5jeUdyYXBoLGwpKS5tYXAodGhpcy5tYXBGdW5jdGlvbilbU3ltYm9sLml0ZXJhdG9yXSgpKSx2ZT10aGlzLmNvbXBvc2VGdW5jdGlvbihFLHRoaXMucmVkdWNlRnVuY3Rpb24oZWUpKTt0aGlz''@;'; put 'put ''LmludGVycHJldGVyLnN0YXRzLmluY3JlbWVudENyaXRlcmlvbkZ1bmN0aW9uUGFydGlhbENhY2hlVXNlZCgpLGcuc2V0KFosW3ZlLE9dKX0pLGd9fWNsYXNzIG5ubntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuY29uZGl0aW9uUmFuZ2U9ZSx0aGlzLmNyaXRlcmlvblBhY2thZ2U9dH19ZnVuY3Rp''@;'; put 'put ''b24qelllKG4sZSl7Zm9yKGNvbnN0IHQgb2YgZS5hZGRyZXNzZXMobikpeWllbGQgTG8obi5nZXRTY2FsYXJWYWx1ZSh0KSl9ZnVuY3Rpb24qV1llKG4sZSx0KXtmb3IoY29uc3QgciBvZiB0KXtjb25zdCBpPWUubWFwKGE9Pkp0bihhKSk7aWYoIWkuZXZlcnkoYT0+T2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsInZhbHVlIikpKXJldHVybjtybm4oaS5tYXAoYT0+TG8oYS52YWx1ZSkpLG4pLmV2ZXJ5KChbYSxsXSk9PmwoYSkpJiYoeWllbGQgciksZT1pLm1hcChhPT5hLnJlc3QpfX1mdW5jdGlvbiBybm4obixlKXtjb25zdCB0PVtdO2ZvcihsZXQgcj0wO3I8''@;'; put 'put ''TWF0aC5taW4obi5sZW5ndGgsZS5sZW5ndGgpO3IrKyl0LnB1c2goW25bcl0sZVtyXV0pO3JldHVybiB0fWNsYXNzIHR5e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5zdW09ZSx0aGlzLmNvdW50PXR9c3RhdGljIHNpbmdsZShlKXtyZXR1cm4gbmV3IHR5KGUsMSl9Y29tcG9zZShlKXtyZXR1cm4g''@;'; put 'put ''bmV3IHR5KHRoaXMuc3VtK2Uuc3VtLHRoaXMuY291bnQrZS5jb3VudCl9YXZlcmFnZVZhbHVlKCl7aWYodGhpcy5jb3VudD4wKXJldHVybiB0aGlzLnN1bS90aGlzLmNvdW50fX1mdW5jdGlvbiBZWWUobil7cmV0dXJuIGNjKG4pJiYhTnVtYmVyLmlzRmluaXRlKExvKG4pKT8wOm59ZnVuY3Rp''@;'; put 'put ''b24gcksobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBQdD9uOmNjKG4pP0xvKG4pOnZvaWQgMH10eS5lbXB0eT1uZXcgdHkoMCwwKTtjbGFzcyBaWWUgZXh0ZW5kcyBCc3tzdW1pZihlLHQpe2NvbnN0IHI9IlNVTUlGIjtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFk''@;'; put 'put ''YXRhKHIpLChvLGEsbCk9PnRoaXMuY29tcHV0ZUNvbmRpdGlvbmFsQWdncmVnYXRpb25GdW5jdGlvbihsPz9vLFtvLGFdLHIsMCwodSxnKT0+dGhpcy5hcml0aG1ldGljSGVscGVyLm5vbnN0cmljdGFkZCh1LGcpLHJLKSl9c3VtaWZzKGUsdCl7Y29uc3Qgcj0iU1VNSUZTIjtyZXR1cm4gdGhp''@;'; put 'put ''cy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKHIpLChvLC4uLmEpPT50aGlzLmNvbXB1dGVDb25kaXRpb25hbEFnZ3JlZ2F0aW9uRnVuY3Rpb24obyxhLHIsMCwobCx1KT0+dGhpcy5hcml0aG1ldGljSGVscGVyLm5vbnN0cmljdGFkZChsLHUpLHJLKSl9YXZlcmFnZWlmKGUs''@;'; put 'put ''dCl7Y29uc3Qgcj0iQVZFUkFHRUlGIjtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKHIpLChvLGEsbCk9Pntjb25zdCB1PXRoaXMuY29tcHV0ZUNvbmRpdGlvbmFsQWdncmVnYXRpb25GdW5jdGlvbihsPz9vLFtvLGFdLHIsdHkuZW1wdHksKGcsRSk9Pmcu''@;'; put 'put ''Y29tcG9zZShFKSxnPT5jYyhnKT90eS5zaW5nbGUoTG8oZykpOnR5LmVtcHR5KTtyZXR1cm4gdSBpbnN0YW5jZW9mIFB0P3U6dS5hdmVyYWdlVmFsdWUoKXx8bmV3IFB0KHRuLkRJVl9CWV9aRVJPKX0pfWNvdW50aWYoZSx0KXtjb25zdCByPSJDT1VOVElGIjtyZXR1cm4gdGhpcy5ydW5GdW5j''@;'; put 'put ''dGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKHIpLChvLGEpPT50aGlzLmNvbXB1dGVDb25kaXRpb25hbEFnZ3JlZ2F0aW9uRnVuY3Rpb24obyxbbyxhXSxyLDAsKGwsdSk9PmwrdSwoKT0+MSkpfWNvdW50aWZzKGUsdCl7Y29uc3Qgcj0iQ09VTlRJRlMiO3JldHVybiB0aGlzLnJ1bkZ1bmN0''@;'; put 'put ''aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEociksKC4uLm8pPT50aGlzLmNvbXB1dGVDb25kaXRpb25hbEFnZ3JlZ2F0aW9uRnVuY3Rpb24ob1swXSxvLHIsMCwoYSxsKT0+YStsLCgpPT4xKSl9bWluaWZzKGUsdCl7Y29uc3Qgcj0iTUlOSUZTIixpPShhLGwpPT52b2lkIDA9PT1sfHx2b2lk''@;'; put 'put ''IDA9PT1hP3ZvaWQgMD09PWw/YTpsOk1hdGgubWluKGEsbCk7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YShyKSwoYSwuLi5sKT0+WVllKHRoaXMuY29tcHV0ZUNvbmRpdGlvbmFsQWdncmVnYXRpb25GdW5jdGlvbihhLGwscixOdW1iZXIuUE9TSVRJVkVf''@;'; put 'put ''SU5GSU5JVFksaSxySykpKX1tYXhpZnMoZSx0KXtjb25zdCByPSJNQVhJRlMiLGk9KGEsbCk9PnZvaWQgMD09PWx8fHZvaWQgMD09PWE/dm9pZCAwPT09bD9hOmw6TWF0aC5tYXgoYSxsKTtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKHIpLChhLC4uLmwp''@;'; put 'put ''PT5ZWWUodGhpcy5jb21wdXRlQ29uZGl0aW9uYWxBZ2dyZWdhdGlvbkZ1bmN0aW9uKGEsbCxyLE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxpLHJLKSkpfWNvbXB1dGVDb25kaXRpb25hbEFnZ3JlZ2F0aW9uRnVuY3Rpb24oZSx0LHIsaSxvLGEpe2NvbnN0IGw9W107Zm9yKGxldCB1PTA7dTx0''@;'; put 'put ''Lmxlbmd0aDt1Kz0yKXtjb25zdCBnPXRbdV0sRT10aGlzLmludGVycHJldGVyLmNyaXRlcmlvbkJ1aWxkZXIuZnJvbUNlbGxWYWx1ZSh0W3UrMV0sdGhpcy5hcml0aG1ldGljSGVscGVyKTtpZih2b2lkIDA9PT1FKXJldHVybiBuZXcgUHQodG4uVkFMVUUsZHIuQmFkQ3JpdGVyaW9uKTtsLnB1''@;'; put 'put ''c2gobmV3IG5ubihnLEUpKX1yZXR1cm4gbmV3IHRubih0aGlzLmludGVycHJldGVyLGZ1bmN0aW9uIGlubihuKXtyZXR1cm4gZT0+e2NvbnN0IHQ9ZS5tYXAocj0+YCR7ci5jb25kaXRpb25SYW5nZS5yYW5nZS5zaGVldH0sJHtyLmNvbmRpdGlvblJhbmdlLnJhbmdlLnN0YXJ0LmNvbH0sJHty''@;'; put 'put ''LmNvbmRpdGlvblJhbmdlLnJhbmdlLnN0YXJ0LnJvd31gKTtyZXR1cm5bbiwuLi50XS5qb2luKCIsIil9fShyKSxpLG8sYSkuY29tcHV0ZShlLGwpfX1aWWUuaW1wbGVtZW50ZWRGdW5jdGlvbnM9e1NVTUlGOnttZXRob2Q6InN1bWlmIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlJB''@;'; put 'put ''TkdFfSx7YXJndW1lbnRUeXBlOmV0Lk5PRVJST1J9LHthcmd1bWVudFR5cGU6ZXQuUkFOR0Usb3B0aW9uYWxBcmc6ITB9XX0sQ09VTlRJRjp7bWV0aG9kOiJjb3VudGlmIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlJBTkdFfSx7YXJndW1lbnRUeXBlOmV0Lk5PRVJST1J9XX0sQVZF''@;'; put 'put ''UkFHRUlGOnttZXRob2Q6ImF2ZXJhZ2VpZiIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5SQU5HRX0se2FyZ3VtZW50VHlwZTpldC5OT0VSUk9SfSx7YXJndW1lbnRUeXBlOmV0LlJBTkdFLG9wdGlvbmFsQXJnOiEwfV19LFNVTUlGUzp7bWV0aG9kOiJzdW1pZnMiLHBhcmFtZXRlcnM6''@;'; put 'put ''W3thcmd1bWVudFR5cGU6ZXQuUkFOR0V9LHthcmd1bWVudFR5cGU6ZXQuUkFOR0V9LHthcmd1bWVudFR5cGU6ZXQuTk9FUlJPUn1dLHJlcGVhdExhc3RBcmdzOjJ9LENPVU5USUZTOnttZXRob2Q6ImNvdW50aWZzIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlJBTkdFfSx7YXJndW1l''@;'; put 'put ''bnRUeXBlOmV0Lk5PRVJST1J9XSxyZXBlYXRMYXN0QXJnczoyfSxNSU5JRlM6e21ldGhvZDoibWluaWZzIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlJBTkdFfSx7YXJndW1lbnRUeXBlOmV0LlJBTkdFfSx7YXJndW1lbnRUeXBlOmV0Lk5PRVJST1J9XSxyZXBlYXRMYXN0QXJnczoy''@;'; put 'put ''fSxNQVhJRlM6e21ldGhvZDoibWF4aWZzIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlJBTkdFfSx7YXJndW1lbnRUeXBlOmV0LlJBTkdFfSx7YXJndW1lbnRUeXBlOmV0Lk5PRVJST1J9XSxyZXBlYXRMYXN0QXJnczoyfX07Y2xhc3MgR1llIGV4dGVuZHMgQnN7c3VtcHJvZHVjdChl''@;'; put 'put ''LHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlNVTVBST0RVQ1QiKSwoLi4ucik9Pntjb25zdCBpPXJbMF0ud2lkdGgoKSxvPXJbMF0uaGVpZ2h0KCk7Zm9yKGNvbnN0IHUgb2YgcilpZih1LndpZHRoKCkhPT1pfHx1LmhlaWdodCgpIT09bylyZXR1''@;'; put 'put ''cm4gbmV3IFB0KHRuLlZBTFVFLGRyLkVxdWFsTGVuZ3RoKTtsZXQgYT0wO2NvbnN0IGw9ci5tYXAodT0+dS5pdGVyYXRlVmFsdWVzRnJvbVRvcExlZnRDb3JuZXIoKSk7Zm9yKGxldCB1PTA7dTxpKm87dSsrKXtsZXQgZz0xO2Zvcihjb25zdCBFIG9mIGwpe2NvbnN0IE89RS5uZXh0KCkudmFs''@;'; put 'put ''dWU7aWYoTyBpbnN0YW5jZW9mIFB0KXJldHVybiBPO2NvbnN0IFo9dGhpcy5jb2VyY2VTY2FsYXJUb051bWJlck9yRXJyb3IoTyk7Y2MoWik/Zyo9TG8oWik6Zz0wfWErPWd9cmV0dXJuIGF9KX19R1llLmltcGxlbWVudGVkRnVuY3Rpb25zPXtTVU1QUk9EVUNUOnttZXRob2Q6InN1bXByb2R1''@;'; put 'put ''Y3QiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuUkFOR0V9XSxyZXBlYXRMYXN0QXJnczoxfX07Y2xhc3MgJFllIGV4dGVuZHMgQnN7Y29uY2F0ZW5hdGUoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJDT05DQVRFTkFURSIpLCguLi5y''@;'; put 'put ''KT0+IiIuY29uY2F0KC4uLnIpKX1zcGxpdChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlNQTElUIiksKHIsaSk9Pntjb25zdCBvPXIuc3BsaXQoIiAiKTtyZXR1cm4gaT49by5sZW5ndGh8fGk8MD9uZXcgUHQodG4uVkFMVUUsZHIuSW5kZXhC''@;'; put 'put ''b3VuZHMpOm9baV19KX1sZW4oZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJMRU4iKSxyPT5yLmxlbmd0aCl9bG93ZXIoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJMT1dFUiIpLHI9PnIudG9M''@;'; put 'put ''b3dlckNhc2UoKSl9dHJpbShlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlRSSU0iKSxyPT5yLnJlcGxhY2UoL14gK3wgKyQvZywiIikucmVwbGFjZSgvICsvZywiICIpKX1wcm9wZXIoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFy''@;'; put 'put ''Z3MsdCx0aGlzLm1ldGFkYXRhKCJQUk9QRVIiKSxyPT5yLnJlcGxhY2UobmV3IFJlZ0V4cCgiXFxwe0x9KyIsImd1IiksaT0+aS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStpLnN1YnN0cmluZygxKS50b0xvd2VyQ2FzZSgpKSl9Y2xlYW4oZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihl''@;'; put 'put ''LmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJDTEVBTiIpLHI9PnIucmVwbGFjZSgvW1x1MDAwMC1cdTAwMUZdL2csIiIpKX1leGFjdChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkVYQUNUIiksKHIsaSk9PnI9PT1pKX1yZXB0KGUsdCl7cmV0dXJu''@;'; put 'put ''IHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiUkVQVCIpLChyLGkpPT5pPDA/bmV3IFB0KHRuLlZBTFVFLGRyLk5lZ2F0aXZlQ291bnQpOnIucmVwZWF0KGkpKX1yaWdodChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEo''@;'; put 'put ''IlJJR0hUIiksKHIsaSk9Pmk8MD9uZXcgUHQodG4uVkFMVUUsZHIuTmVnYXRpdmVMZW5ndGgpOjA9PT1pPyIiOnIuc2xpY2UoLWkpKX1sZWZ0KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiTEVGVCIpLChyLGkpPT5pPDA/bmV3IFB0KHRuLlZB''@;'; put 'put ''TFVFLGRyLk5lZ2F0aXZlTGVuZ3RoKTpyLnNsaWNlKDAsaSkpfW1pZChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIk1JRCIpLChyLGksbyk9Pmk8MT9uZXcgUHQodG4uVkFMVUUsZHIuTGVzc1RoYW5PbmUpOm88MD9uZXcgUHQodG4uVkFMVUUs''@;'; put 'put ''ZHIuTmVnYXRpdmVMZW5ndGgpOnIuc3Vic3RyaW5nKGktMSxpK28tMSkpfXJlcGxhY2UoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJSRVBMQUNFIiksKHIsaSxvLGEpPT5pPDE/bmV3IFB0KHRuLlZBTFVFLGRyLkxlc3NUaGFuT25lKTpvPDA/''@;'; put 'put ''bmV3IFB0KHRuLlZBTFVFLGRyLk5lZ2F0aXZlTGVuZ3RoKTpyLnN1YnN0cmluZygwLGktMSkrYStyLnN1YnN0cmluZyhpK28tMSkpfXNlYXJjaChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlNFQVJDSCIpLChyLGksbyk9PntpZihvPDF8fG8+''@;'; put 'put ''aS5sZW5ndGgpcmV0dXJuIG5ldyBQdCh0bi5WQUxVRSxkci5MZW5ndGhCb3VuZHMpO2NvbnN0IGE9ci50b0xvd2VyQ2FzZSgpLGw9aS5zdWJzdHJpbmcoby0xKS50b0xvd2VyQ2FzZSgpLHU9dGhpcy5hcml0aG1ldGljSGVscGVyLnJlcXVpcmVzUmVnZXgoYSk/dGhpcy5hcml0aG1ldGljSGVs''@;'; put 'put ''cGVyLnNlYXJjaFN0cmluZyhhLGwpOmwuaW5kZXhPZihhKTtyZXR1cm4gdT4tMT91K286bmV3IFB0KHRuLlZBTFVFLGRyLlBhdHRlcm5Ob3RGb3VuZCl9KX1zdWJzdGl0dXRlKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiU1VCU1RJVFVURSIp''@;'; put 'put ''LChyLGksbyxhKT0+e2NvbnN0IGw9dGhpcy5lc2NhcGVSZWdFeHBTcGVjaWFsQ2hhcmFjdGVycyhpKSx1PW5ldyBSZWdFeHAobCwiZyIpO2lmKHZvaWQgMD09PWEpcmV0dXJuIHIucmVwbGFjZSh1LG8pO2lmKGE8MSlyZXR1cm4gbmV3IFB0KHRuLlZBTFVFLGRyLkxlc3NUaGFuT25lKTtsZXQg''@;'; put 'put ''ZyxFPTA7Zm9yKDtudWxsIT09KGc9dS5leGVjKHIpKTspaWYoYT09PSsrRSlyZXR1cm4gci5zdWJzdHJpbmcoMCxnLmluZGV4KStvK3Iuc3Vic3RyaW5nKHUubGFzdEluZGV4KTtyZXR1cm4gcn0pfWZpbmQoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFk''@;'; put 'put ''YXRhKCJGSU5EIiksKHIsaSxvKT0+e2lmKG88MXx8bz5pLmxlbmd0aClyZXR1cm4gbmV3IFB0KHRuLlZBTFVFLGRyLkluZGV4Qm91bmRzKTtjb25zdCBsPWkuc3Vic3RyaW5nKG8tMSkuaW5kZXhPZihyKStvO3JldHVybiBsPjA/bDpuZXcgUHQodG4uVkFMVUUsZHIuUGF0dGVybk5vdEZvdW5k''@;'; put 'put ''KX0pfXQoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJUIikscj0+ciBpbnN0YW5jZW9mIFB0fHwic3RyaW5nIj09dHlwZW9mIHI/cjoiIil9dXBwZXIoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRh''@;'; put 'put ''KCJVUFBFUiIpLHI9PnIudG9VcHBlckNhc2UoKSl9ZXNjYXBlUmVnRXhwU3BlY2lhbENoYXJhY3RlcnMoZSl7cmV0dXJuIGUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX19JFllLmltcGxlbWVudGVkRnVuY3Rpb25zPXtDT05DQVRFTkFURTp7bWV0aG9kOiJjb25jYXRl''@;'; put 'put ''bmF0ZSIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5TVFJJTkd9XSxyZXBlYXRMYXN0QXJnczoxLGV4cGFuZFJhbmdlczohMH0sRVhBQ1Q6e21ldGhvZDoiZXhhY3QiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuU1RSSU5HfSx7YXJndW1lbnRUeXBlOmV0LlNUUklOR31dfSxT''@;'; put 'put ''UExJVDp7bWV0aG9kOiJzcGxpdCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5TVFJJTkd9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSfV19LExFTjp7bWV0aG9kOiJsZW4iLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuU1RSSU5HfV19LExPV0VSOnttZXRob2Q6Imxvd2VyIixw''@;'; put 'put ''YXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlNUUklOR31dfSxNSUQ6e21ldGhvZDoibWlkIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlNUUklOR30se2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSfV19LFRSSU06e21ldGhvZDoidHJpbSIs''@;'; put 'put ''cGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5TVFJJTkd9XX0sVDp7bWV0aG9kOiJ0IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlNDQUxBUn1dfSxQUk9QRVI6e21ldGhvZDoicHJvcGVyIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlNUUklOR31dfSxDTEVBTjp7bWV0''@;'; put 'put ''aG9kOiJjbGVhbiIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5TVFJJTkd9XX0sUkVQVDp7bWV0aG9kOiJyZXB0IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlNUUklOR30se2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9XX0sUklHSFQ6e21ldGhvZDoicmlnaHQiLHBhcmFtZXRl''@;'; put 'put ''cnM6W3thcmd1bWVudFR5cGU6ZXQuU1RSSU5HfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixkZWZhdWx0VmFsdWU6MX1dfSxMRUZUOnttZXRob2Q6ImxlZnQiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuU1RSSU5HfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixkZWZhdWx0VmFsdWU6''@;'; put 'put ''MX1dfSxSRVBMQUNFOnttZXRob2Q6InJlcGxhY2UiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuU1RSSU5HfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuU1RSSU5HfV19LFNFQVJDSDp7bWV0aG9kOiJzZWFy''@;'; put 'put ''Y2giLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuU1RSSU5HfSx7YXJndW1lbnRUeXBlOmV0LlNUUklOR30se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZGVmYXVsdFZhbHVlOjF9XX0sU1VCU1RJVFVURTp7bWV0aG9kOiJzdWJzdGl0dXRlIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBl''@;'; put 'put ''OmV0LlNUUklOR30se2FyZ3VtZW50VHlwZTpldC5TVFJJTkd9LHthcmd1bWVudFR5cGU6ZXQuU1RSSU5HfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixvcHRpb25hbEFyZzohMH1dfSxGSU5EOnttZXRob2Q6ImZpbmQiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuU1RSSU5HfSx7YXJn''@;'; put 'put ''dW1lbnRUeXBlOmV0LlNUUklOR30se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZGVmYXVsdFZhbHVlOjF9XX0sVVBQRVI6e21ldGhvZDoidXBwZXIiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuU1RSSU5HfV19fTtjbGFzcyBxWWUgZXh0ZW5kcyBCc3thY29zKGUsdCl7cmV0dXJuIHRo''@;'; put 'put ''aXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQUNPUyIpLE1hdGguYWNvcyl9YXNpbihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkFTSU4iKSxNYXRoLmFzaW4pfWNvcyhlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9u''@;'; put 'put ''KGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkNPUyIpLE1hdGguY29zKX1zaW4oZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJTSU4iKSxNYXRoLnNpbil9dGFuKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRh''@;'; put 'put ''ZGF0YSgiVEFOIiksTWF0aC50YW4pfWF0YW4oZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJBVEFOIiksTWF0aC5hdGFuKX1hdGFuMihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkFUQU4yIiks''@;'; put 'put ''KHIsaSk9PjA9PT1yJiYwPT09aT9uZXcgUHQodG4uRElWX0JZX1pFUk8pOk1hdGguYXRhbjIoaSxyKSl9Y290KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQ09UIikscj0+MD09PXI/bmV3IFB0KHRuLkRJVl9CWV9aRVJPKToxL01hdGgudGFu''@;'; put 'put ''KHIpKX1hY290KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQUNPVCIpLHI9PjA9PT1yP3dtZS8yOk1hdGguYXRhbigxL3IpKX1zZWMoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJTRUMiKSxy''@;'; put 'put ''PT4xL01hdGguY29zKHIpKX1jc2MoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJDU0MiKSxyPT4wPT09cj9uZXcgUHQodG4uRElWX0JZX1pFUk8pOjEvTWF0aC5zaW4ocikpfXNpbmgoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFy''@;'; put 'put ''Z3MsdCx0aGlzLm1ldGFkYXRhKCJTSU5IIiksTWF0aC5zaW5oKX1hc2luaChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkFTSU5IIiksTWF0aC5hc2luaCl9Y29zaChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMu''@;'; put 'put ''bWV0YWRhdGEoIkNPU0giKSxNYXRoLmNvc2gpfWFjb3NoKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQUNPU0giKSxNYXRoLmFjb3NoKX10YW5oKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgi''@;'; put 'put ''VEFOSCIpLE1hdGgudGFuaCl9YXRhbmgoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJBVEFOSCIpLE1hdGguYXRhbmgpfWNvdGgoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJDT1RIIikscj0+''@;'; put 'put ''MD09PXI/bmV3IFB0KHRuLkRJVl9CWV9aRVJPKToxL01hdGgudGFuaChyKSl9YWNvdGgoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJBQ09USCIpLHI9PjA9PT1yP25ldyBQdCh0bi5OVU0sZHIuTm9uWmVybyk6TWF0aC5hdGFuaCgxL3IpKX1z''@;'; put 'put ''ZWNoKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiU0VDSCIpLHI9PjEvTWF0aC5jb3NoKHIpKX1jc2NoKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQ1NDSCIpLHI9PjA9PT1yP25ldyBQdCh0''@;'; put 'put ''bi5ESVZfQllfWkVSTyk6MS9NYXRoLnNpbmgocikpfX1xWWUuaW1wbGVtZW50ZWRGdW5jdGlvbnM9e0FDT1M6e21ldGhvZDoiYWNvcyIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9XX0sQVNJTjp7bWV0aG9kOiJhc2luIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0''@;'; put 'put ''Lk5VTUJFUn1dfSxDT1M6e21ldGhvZDoiY29zIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn1dfSxTSU46e21ldGhvZDoic2luIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn1dfSxUQU46e21ldGhvZDoidGFuIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRU''@;'; put 'put ''eXBlOmV0Lk5VTUJFUn1dfSxBVEFOOnttZXRob2Q6ImF0YW4iLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfV19LEFUQU4yOnttZXRob2Q6ImF0YW4yIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9XX0sQ09U''@;'; put 'put ''OnttZXRob2Q6ImNvdCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9XX0sU0VDOnttZXRob2Q6InNlYyIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9XX0sQ1NDOnttZXRob2Q6ImNzYyIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9''@;'; put 'put ''XX0sU0lOSDp7bWV0aG9kOiJzaW5oIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn1dfSxDT1NIOnttZXRob2Q6ImNvc2giLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfV19LFRBTkg6e21ldGhvZDoidGFuaCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlw''@;'; put 'put ''ZTpldC5OVU1CRVJ9XX0sQ09USDp7bWV0aG9kOiJjb3RoIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn1dfSxTRUNIOnttZXRob2Q6InNlY2giLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfV19LENTQ0g6e21ldGhvZDoiY3NjaCIscGFyYW1ldGVyczpb''@;'; put 'put ''e2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9XX0sQUNPVDp7bWV0aG9kOiJhY290IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn1dfSxBU0lOSDp7bWV0aG9kOiJhc2luaCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9XX0sQUNPU0g6e21ldGhvZDoiYWNv''@;'; put 'put ''c2giLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfV19LEFUQU5IOnttZXRob2Q6ImF0YW5oIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn1dfSxBQ09USDp7bWV0aG9kOiJhY290aCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9XX19''@;'; put 'put ''O2NsYXNzIG9ubiBleHRlbmRzIFpXZXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLmRlcGVuZGVuY3lHcmFwaD1lfWZpbmQoZSx0LHIpe3JldHVybiB0aGlzLmJhc2ljRmluZChlLHQsImNvbCIscil9fWNsYXNzIEtZZSBleHRlbmRzIEJze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJn''@;'; put 'put ''dW1lbnRzKSx0aGlzLnJvd1NlYXJjaD1uZXcgb25uKHRoaXMuZGVwZW5kZW5jeUdyYXBoKX12bG9va3VwKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiVkxPT0tVUCIpLChyLGksbyxhKT0+e2NvbnN0IGw9aS5yYW5nZTtyZXR1cm4gdm9pZCAw''@;'; put 'put ''PT09bD9uZXcgUHQodG4uVkFMVUUsZHIuV3JvbmdUeXBlKTpvPDE/bmV3IFB0KHRuLlZBTFVFLGRyLkxlc3NUaGFuT25lKTpvPmwud2lkdGgoKT9uZXcgUHQodG4uUkVGLGRyLkluZGV4TGFyZ2UpOnRoaXMuZG9WbG9va3VwKHJtZShyKSxpLG8tMSxhKX0pfWhsb29rdXAoZSx0KXtyZXR1cm4g''@;'; put 'put ''dGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJITE9PS1VQIiksKHIsaSxvLGEpPT57Y29uc3QgbD1pLnJhbmdlO3JldHVybiB2b2lkIDA9PT1sP25ldyBQdCh0bi5WQUxVRSxkci5Xcm9uZ1R5cGUpOm88MT9uZXcgUHQodG4uVkFMVUUsZHIuTGVzc1RoYW5PbmUpOm8+''@;'; put 'put ''bC5oZWlnaHQoKT9uZXcgUHQodG4uUkVGLGRyLkluZGV4TGFyZ2UpOnRoaXMuZG9IbG9va3VwKHJtZShyKSxpLG8tMSxhKX0pfW1hdGNoKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiTUFUQ0giKSwocixpLG8pPT50aGlzLmRvTWF0Y2gocm1l''@;'; put 'put ''KHIpLGksbykpfXNlYXJjaEluUmFuZ2UoZSx0LHIsaSl7cmV0dXJuIXImJiJzdHJpbmciPT10eXBlb2YgZSYmdGhpcy5hcml0aG1ldGljSGVscGVyLnJlcXVpcmVzUmVnZXgoZSk/aS5hZHZhbmNlZEZpbmQodGhpcy5hcml0aG1ldGljSGVscGVyLmVxTWF0Y2hlckZ1bmN0aW9uKGUpLHQpOmku''@;'; put 'put ''ZmluZChlLHQscj97b3JkZXJpbmc6ImFzYyJ9OntvcmRlcmluZzoibm9uZSIsbWF0Y2hFeGFjdGx5OiEwfSl9ZG9WbG9va3VwKGUsdCxyLGkpe3RoaXMuZGVwZW5kZW5jeUdyYXBoLnN0YXRzLnN0YXJ0KEFzLlZMT09LVVApO2NvbnN0IG89dC5yYW5nZTtsZXQgYTthPXZvaWQgMD09PW8/bGEu''@;'; put 'put ''b25seVZhbHVlcyh0LmRhdGEubWFwKGc9PltnWzBdXSkpOmxhLm9ubHlSYW5nZShiYS5zcGFuRnJvbShvLnN0YXJ0LDEsby5oZWlnaHQoKSksdGhpcy5kZXBlbmRlbmN5R3JhcGgpO2NvbnN0IGw9dGhpcy5zZWFyY2hJblJhbmdlKGUsYSxpLHRoaXMuY29sdW1uU2VhcmNoKTtpZih0aGlzLmRl''@;'; put 'put ''cGVuZGVuY3lHcmFwaC5zdGF0cy5lbmQoQXMuVkxPT0tVUCksLTE9PT1sKXJldHVybiBuZXcgUHQodG4uTkEsZHIuVmFsdWVOb3RGb3VuZCk7bGV0IHU7aWYodm9pZCAwPT09byl1PXQuZGF0YVtsXVtyXTtlbHNle2NvbnN0IGc9Qm8oby5zaGVldCxvLnN0YXJ0LmNvbCtyLG8uc3RhcnQucm93''@;'; put 'put ''K2wpO3U9dGhpcy5kZXBlbmRlbmN5R3JhcGguZ2V0Q2VsbFZhbHVlKGcpfXJldHVybiB1IGluc3RhbmNlb2YgbGE/bmV3IFB0KHRuLlZBTFVFLGRyLldyb25nVHlwZSk6dX1kb0hsb29rdXAoZSx0LHIsaSl7Y29uc3Qgbz10LnJhbmdlO2xldCBhO2E9dm9pZCAwPT09bz9sYS5vbmx5VmFsdWVz''@;'; put 'put ''KFt0LmRhdGFbMF1dKTpsYS5vbmx5UmFuZ2UoYmEuc3BhbkZyb20oby5zdGFydCxvLndpZHRoKCksMSksdGhpcy5kZXBlbmRlbmN5R3JhcGgpO2NvbnN0IGw9dGhpcy5zZWFyY2hJblJhbmdlKGUsYSxpLHRoaXMucm93U2VhcmNoKTtpZigtMT09PWwpcmV0dXJuIG5ldyBQdCh0bi5OQSxkci5W''@;'; put 'put ''YWx1ZU5vdEZvdW5kKTtsZXQgdTtpZih2b2lkIDA9PT1vKXU9dC5kYXRhW3JdW2xdO2Vsc2V7Y29uc3QgZz1CbyhvLnNoZWV0LG8uc3RhcnQuY29sK2wsby5zdGFydC5yb3crcik7dT10aGlzLmRlcGVuZGVuY3lHcmFwaC5nZXRDZWxsVmFsdWUoZyl9cmV0dXJuIHUgaW5zdGFuY2VvZiBsYT9u''@;'; put 'put ''ZXcgUHQodG4uVkFMVUUsZHIuV3JvbmdUeXBlKTp1fWRvTWF0Y2goZSx0LHIpe2lmKCFbLTEsMCwxXS5pbmNsdWRlcyhyKSlyZXR1cm4gbmV3IFB0KHRuLlZBTFVFLGRyLkJhZE1vZGUpO2lmKHQud2lkdGgoKT4xJiZ0LmhlaWdodCgpPjEpcmV0dXJuIG5ldyBQdCh0bi5OQSk7Y29uc3QgYT0o''@;'; put 'put ''MT09PXQud2lkdGgoKT90aGlzLmNvbHVtblNlYXJjaDp0aGlzLnJvd1NlYXJjaCkuZmluZChlLHQsMD09PXI/e29yZGVyaW5nOiJub25lIixtYXRjaEV4YWN0bHk6ITB9OntvcmRlcmluZzotMT09PXI/ImRlc2MiOiJhc2MifSk7cmV0dXJuLTE9PT1hP25ldyBQdCh0bi5OQSxkci5WYWx1ZU5v''@;'; put 'put ''dEZvdW5kKTphKzF9fUtZZS5pbXBsZW1lbnRlZEZ1bmN0aW9ucz17VkxPT0tVUDp7bWV0aG9kOiJ2bG9va3VwIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5PRVJST1J9LHthcmd1bWVudFR5cGU6ZXQuUkFOR0V9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBl''@;'; put 'put ''OmV0LkJPT0xFQU4sZGVmYXVsdFZhbHVlOiEwfV19LEhMT09LVVA6e21ldGhvZDoiaGxvb2t1cCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OT0VSUk9SfSx7YXJndW1lbnRUeXBlOmV0LlJBTkdFfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5CT09M''@;'; put 'put ''RUFOLGRlZmF1bHRWYWx1ZTohMH1dfSxNQVRDSDp7bWV0aG9kOiJtYXRjaCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OT0VSUk9SfSx7YXJndW1lbnRUeXBlOmV0LlJBTkdFfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixkZWZhdWx0VmFsdWU6MX1dfX07Y2xhc3MgWFllIGV4dGVu''@;'; put 'put ''ZHMgQnN7cm9tYW4oZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJST01BTiIpLChyLGkpPT4ocj1NYXRoLnRydW5jKHIpLCExPT09aT9pPTQ6ITA9PT1pJiYoaT0wKSwoaT1Mbyh0aGlzLmNvZXJjZVNjYWxhclRvTnVtYmVyT3JFcnJvcihpKSkp''@;'; put 'put ''aW5zdGFuY2VvZiBQdD9pOihpPU1hdGgudHJ1bmMoaSkpPDA/bmV3IFB0KHRuLlZBTFVFLGRyLlZhbHVlU21hbGwpOmk+ND9uZXcgUHQodG4uVkFMVUUsZHIuVmFsdWVMYXJnZSk6ZnVuY3Rpb24gYW5uKG4sZSl7Y29uc3QgdD17dmFsOm4lMWUzLGFjYzoiTSIucmVwZWF0KE1hdGguZmxvb3Io''@;'; put 'put ''bi8xZTMpKX07cmV0dXJuIDQ9PT1lJiYocWgodCwiSU0iLDk5OSwxZTMpLHFoKHQsIklEIiw0OTksNTAwKSksZT49MyYmKHFoKHQsIlZNIiw5OTUsMWUzKSxxaCh0LCJWRCIsNDk1LDUwMCkpLGU+PTImJihxaCh0LCJYTSIsOTkwLDFlMykscWgodCwiWEQiLDQ5MCw1MDApKSxlPj0xJiYocWgo''@;'; put 'put ''dCwiTE0iLDk1MCwxZTMpLHFoKHQsIkxEIiw0NTAsNTAwKSkscWgodCwiQ00iLDkwMCwxZTMpLHFoKHQsIkNEIiw0MDAsNTAwKSxxaCh0LCJEIiw1MDAsOTAwKSx0LmFjYys9IkMiLnJlcGVhdChNYXRoLmZsb29yKHQudmFsLzEwMCkpLHQudmFsJT0xMDAsZT49MiYmKHFoKHQsIklDIiw5OSwx''@;'; put 'put ''MDApLHFoKHQsIklMIiw0OSw1MCkpLGU+PTEmJihxaCh0LCJWQyIsOTUsMTAwKSxxaCh0LCJWTCIsNDUsNTApKSxxaCh0LCJYQyIsOTAsMTAwKSxxaCh0LCJYTCIsNDAsNTApLHFoKHQsIkwiLDUwLDkwKSx0LmFjYys9IlgiLnJlcGVhdChNYXRoLmZsb29yKHQudmFsLzEwKSksdC52YWwlPTEw''@;'; put 'put ''LHFoKHQsIklYIiw5LDEwKSxxaCh0LCJJViIsNCw1KSxxaCh0LCJWIiw1LDkpLHQuYWNjKz0iSSIucmVwZWF0KHQudmFsKSx0LmFjY30ocixpKSkpfWFyYWJpYyhlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkFSQUJJQyIpLHI9PntsZXQgaT0h''@;'; put 'put ''MTtpZigocj1yLnRyaW0oKS50b1VwcGVyQ2FzZSgpKS5zdGFydHNXaXRoKCItIikmJihpPSEwLCIiPT09KHI9ci5zbGljZSgxKSkpKXJldHVybiBuZXcgUHQodG4uVkFMVUUsZHIuSW52YWxpZFJvbWFuKTtjb25zdCBvPXtpbnB1dDpyLGFjYzowfTtyZXR1cm4gWjYobyx7dG9rZW46Ik1NTSIs''@;'; put 'put ''dmFsOjNlM30se3Rva2VuOiJNTSIsdmFsOjJlM30se3Rva2VuOiJNIix2YWw6MWUzfSksWjYobyx7dG9rZW46IklNIix2YWw6OTk5fSx7dG9rZW46IlZNIix2YWw6OTk1fSx7dG9rZW46IlhNIix2YWw6OTkwfSx7dG9rZW46IkxNIix2YWw6OTUwfSx7dG9rZW46IkNNIix2YWw6OTAwfSksWjYo''@;'; put 'put ''byx7dG9rZW46IkQiLHZhbDo1MDB9LHt0b2tlbjoiSUQiLHZhbDo0OTl9LHt0b2tlbjoiVkQiLHZhbDo0OTV9LHt0b2tlbjoiWEQiLHZhbDo0OTB9LHt0b2tlbjoiTEQiLHZhbDo0NTB9LHt0b2tlbjoiQ0QiLHZhbDo0MDB9KSxaNihvLHt0b2tlbjoiQ0NDIix2YWw6MzAwfSx7dG9rZW46IkND''@;'; put 'put ''Iix2YWw6MjAwfSx7dG9rZW46IkMiLHZhbDoxMDB9KSxaNihvLHt0b2tlbjoiSUMiLHZhbDo5OX0se3Rva2VuOiJWQyIsdmFsOjk1fSx7dG9rZW46IlhDIix2YWw6OTB9KSxaNihvLHt0b2tlbjoiTCIsdmFsOjUwfSx7dG9rZW46IklMIix2YWw6NDl9LHt0b2tlbjoiVkwiLHZhbDo0NX0se3Rv''@;'; put 'put ''a2VuOiJYTCIsdmFsOjQwfSksWjYobyx7dG9rZW46IlhYWCIsdmFsOjMwfSx7dG9rZW46IlhYIix2YWw6MjB9LHt0b2tlbjoiWCIsdmFsOjEwfSksWjYobyx7dG9rZW46IklYIix2YWw6OX0pLFo2KG8se3Rva2VuOiJWIix2YWw6NX0se3Rva2VuOiJJViIsdmFsOjR9KSxaNihvLHt0b2tlbjoi''@;'; put 'put ''SUlJIix2YWw6M30se3Rva2VuOiJJSSIsdmFsOjJ9LHt0b2tlbjoiSSIsdmFsOjF9KSwiIiE9PW8uaW5wdXQ/bmV3IFB0KHRuLlZBTFVFLGRyLkludmFsaWRSb21hbik6aT8tby5hY2M6by5hY2N9KX19ZnVuY3Rpb24gWjYobiwuLi5lKXtmb3IoY29uc3QgdCBvZiBlKWlmKG4uaW5wdXQuc3Rh''@;'; put 'put ''cnRzV2l0aCh0LnRva2VuKSl7bi5pbnB1dD1uLmlucHV0LnNsaWNlKHQudG9rZW4ubGVuZ3RoKSxuLmFjYys9dC52YWw7YnJlYWt9fWZ1bmN0aW9uIHFoKG4sZSx0LHIpe24udmFsPj10JiZuLnZhbDxyJiYobi52YWwtPXQsbi5hY2MrPWUpfVhZZS5pbXBsZW1lbnRlZEZ1bmN0aW9ucz17Uk9N''@;'; put 'put ''QU46e21ldGhvZDoicm9tYW4iLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjEsbGVzc1RoYW46NGUzfSx7YXJndW1lbnRUeXBlOmV0Lk5PRVJST1Isb3B0aW9uYWxBcmc6ITAsZGVmYXVsdFZhbHVlOjB9XX0sQVJBQklDOnttZXRob2Q6ImFyYWJpYyIscGFy''@;'; put 'put ''YW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5TVFJJTkd9XX19O2NsYXNzIFFZZSBleHRlbmRzIEJze2FkZChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkhGLkFERCIpLHRoaXMuYXJpdGhtZXRpY0hlbHBlci5hZGRXaXRoRXBzaWxvbil9Y29u''@;'; put 'put ''Y2F0KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiSEYuQ09OQ0FUIiksdGhpcy5hcml0aG1ldGljSGVscGVyLmNvbmNhdCl9ZGl2aWRlKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiSEYuRElW''@;'; put 'put ''SURFIiksdGhpcy5hcml0aG1ldGljSGVscGVyLmRpdmlkZSl9ZXEoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJIRi5FUSIpLHRoaXMuYXJpdGhtZXRpY0hlbHBlci5lcSl9Z3QoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3Ms''@;'; put 'put ''dCx0aGlzLm1ldGFkYXRhKCJIRi5HVCIpLHRoaXMuYXJpdGhtZXRpY0hlbHBlci5ndCl9Z3RlKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiSEYuR1RFIiksdGhpcy5hcml0aG1ldGljSGVscGVyLmdlcSl9bHQoZSx0KXtyZXR1cm4gdGhpcy5y''@;'; put 'put ''dW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJIRi5MVCIpLHRoaXMuYXJpdGhtZXRpY0hlbHBlci5sdCl9bHRlKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiSEYuTFRFIiksdGhpcy5hcml0aG1ldGljSGVscGVyLmxlcSl9bWlu''@;'; put 'put ''dXMoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJIRi5NSU5VUyIpLHRoaXMuYXJpdGhtZXRpY0hlbHBlci5zdWJ0cmFjdCl9bXVsdGlwbHkoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJIRi5N''@;'; put 'put ''VUxUSVBMWSIpLHRoaXMuYXJpdGhtZXRpY0hlbHBlci5tdWx0aXBseSl9bmUoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJIRi5ORSIpLHRoaXMuYXJpdGhtZXRpY0hlbHBlci5uZXEpfXBvdyhlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9u''@;'; put 'put ''KGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkhGLlBPVyIpLHRoaXMuYXJpdGhtZXRpY0hlbHBlci5wb3cpfXVtaW51cyhlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkhGLlVNSU5VUyIpLHRoaXMuYXJpdGhtZXRpY0hlbHBlci51bmFyeU1pbnVz''@;'; put 'put ''KX11cGVyY2VudChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkhGLlVOQVJZX1BFUkNFTlQiKSx0aGlzLmFyaXRobWV0aWNIZWxwZXIudW5hcnlQZXJjZW50KX11cGx1cyhlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRo''@;'; put 'put ''aXMubWV0YWRhdGEoIkhGLlVQTFVTIiksdGhpcy5hcml0aG1ldGljSGVscGVyLnVuYXJ5UGx1cyl9fVFZZS5pbXBsZW1lbnRlZEZ1bmN0aW9ucz17IkhGLkFERCI6e21ldGhvZDoiYWRkIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixwYXNzU3VidHlwZTohMH0se2FyZ3Vt''@;'; put 'put ''ZW50VHlwZTpldC5OVU1CRVIscGFzc1N1YnR5cGU6ITB9XX0sIkhGLkNPTkNBVCI6e21ldGhvZDoiY29uY2F0IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlNUUklORyxwYXNzU3VidHlwZTohMH0se2FyZ3VtZW50VHlwZTpldC5TVFJJTkcscGFzc1N1YnR5cGU6ITB9XX0sIkhGLkRJ''@;'; put 'put ''VklERSI6e21ldGhvZDoiZGl2aWRlIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixwYXNzU3VidHlwZTohMH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIscGFzc1N1YnR5cGU6ITB9XX0sIkhGLkVRIjp7bWV0aG9kOiJlcSIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpl''@;'; put 'put ''dC5OT0VSUk9SLHBhc3NTdWJ0eXBlOiEwfSx7YXJndW1lbnRUeXBlOmV0Lk5PRVJST1IscGFzc1N1YnR5cGU6ITB9XX0sIkhGLkdUIjp7bWV0aG9kOiJndCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OT0VSUk9SLHBhc3NTdWJ0eXBlOiEwfSx7YXJndW1lbnRUeXBlOmV0Lk5PRVJS''@;'; put 'put ''T1IscGFzc1N1YnR5cGU6ITB9XX0sIkhGLkdURSI6e21ldGhvZDoiZ3RlIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5PRVJST1IscGFzc1N1YnR5cGU6ITB9LHthcmd1bWVudFR5cGU6ZXQuTk9FUlJPUixwYXNzU3VidHlwZTohMH1dfSwiSEYuTFQiOnttZXRob2Q6Imx0IixwYXJh''@;'; put 'put ''bWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5PRVJST1IscGFzc1N1YnR5cGU6ITB9LHthcmd1bWVudFR5cGU6ZXQuTk9FUlJPUixwYXNzU3VidHlwZTohMH1dfSwiSEYuTFRFIjp7bWV0aG9kOiJsdGUiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTk9FUlJPUixwYXNzU3VidHlwZToh''@;'; put 'put ''MH0se2FyZ3VtZW50VHlwZTpldC5OT0VSUk9SLHBhc3NTdWJ0eXBlOiEwfV19LCJIRi5NSU5VUyI6e21ldGhvZDoibWludXMiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLHBhc3NTdWJ0eXBlOiEwfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixwYXNzU3VidHlwZTohMH1d''@;'; put 'put ''fSwiSEYuTVVMVElQTFkiOnttZXRob2Q6Im11bHRpcGx5IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixwYXNzU3VidHlwZTohMH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIscGFzc1N1YnR5cGU6ITB9XX0sIkhGLk5FIjp7bWV0aG9kOiJuZSIscGFyYW1ldGVyczpbe2Fy''@;'; put 'put ''Z3VtZW50VHlwZTpldC5OT0VSUk9SLHBhc3NTdWJ0eXBlOiEwfSx7YXJndW1lbnRUeXBlOmV0Lk5PRVJST1IscGFzc1N1YnR5cGU6ITB9XX0sIkhGLlBPVyI6e21ldGhvZDoicG93IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixwYXNzU3VidHlwZTohMH0se2FyZ3VtZW50''@;'; put 'put ''VHlwZTpldC5OVU1CRVIscGFzc1N1YnR5cGU6ITB9XX0sIkhGLlVNSU5VUyI6e21ldGhvZDoidW1pbnVzIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixwYXNzU3VidHlwZTohMH1dfSwiSEYuVU5BUllfUEVSQ0VOVCI6e21ldGhvZDoidXBlcmNlbnQiLHBhcmFtZXRlcnM6''@;'; put 'put ''W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLHBhc3NTdWJ0eXBlOiEwfV19LCJIRi5VUExVUyI6e21ldGhvZDoidXBsdXMiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLHBhc3NTdWJ0eXBlOiEwfV19fTt2YXIgJHM9TWF0aDtmdW5jdGlvbiBWZChuLGUpe2Zvcih2YXIgdD0w''@;'; put 'put ''LHI9MDt0PG4ubGVuZ3RoOysrdClyPWUqcituW3RdO3JldHVybiByfWZ1bmN0aW9uIEpZZShuLGUsdCxyLGkpe2lmKDA9PT1lKXJldHVybiB0O2lmKDE9PT1lKXJldHVybiByO2Zvcih2YXIgbz0yL24sYT1yLGw9MTtsPGU7KytsKWE9cipsKm8raSp0LHQ9cixyPWE7cmV0dXJuIGF9ZnVuY3Rp''@;'; put 'put ''b24gZVplKG4sZSx0LHIsaSl7cmV0dXJuIGZ1bmN0aW9uKGEsbCl7aWYocil7aWYoMD09PWEpcmV0dXJuIDE9PXI/LTEvMDoxLzA7aWYoYTwwKXJldHVybiBOYU59cmV0dXJuIDA9PT1sP24oYSk6MT09PWw/ZShhKTpsPDA/TmFOOkpZZShhLGx8PTAsbihhKSxlKGEpLGkpfX12YXIgTW1lPWZ1''@;'; put 'put ''bmN0aW9uKCl7dmFyIG49LjYzNjYxOTc3MixlPVs1NzU2ODQ5MDU3NCwtMTMzNjI1OTAzNTQsNjUxNjE5NjQwLjcsLTExMjE0NDI0LjE4LDc3MzkyLjMzMDE3LC0xODQuOTA1MjQ1Nl0ucmV2ZXJzZSgpLHQ9WzU3NTY4NDkwNDExLDEwMjk1MzI5ODUsOTQ5NDY4MC43MTgsNTkyNzIuNjQ4NTMs''@;'; put 'put ''MjY3Ljg1MzI3MTIsMV0ucmV2ZXJzZSgpLHI9WzEsLS4wMDEwOTg2Mjg2MjcsMjczNDUxMDQwN2UtMTQsLTIwNzMzNzA2MzllLTE1LDIuMDkzODg3MjExZS03XS5yZXZlcnNlKCksaT1bLS4wMTU2MjQ5OTk5NSwuMDAwMTQzMDQ4ODc2NSwtNjkxMTE0NzY1MWUtMTUsNy42MjEwOTUxNjFlLTcs''@;'; put 'put ''LTkuMzQ5MzUxNTJlLThdLnJldmVyc2UoKTtmdW5jdGlvbiBvKE8pe3ZhciBaPTAsZWU9MCx2ZT0wLE1lPU8qTztpZihPPDgpWj0oZWU9VmQoZSxNZSkpLyh2ZT1WZCh0LE1lKSk7ZWxzZXt2YXIgSGU9Ty0uNzg1Mzk4MTY0O2VlPVZkKHIsTWU9NjQvTWUpLHZlPVZkKGksTWUpLFo9JHMuc3Fy''@;'; put 'put ''dChuL08pKigkcy5jb3MoSGUpKmVlLSRzLnNpbihIZSkqdmUqOC9PKX1yZXR1cm4gWn12YXIgYT1bNzIzNjI2MTQyMzIsLTc4OTUwNTkyMzUsMjQyMzk2ODUzLjEsLTI5NzI2MTEuNDM5LDE1NzA0LjQ4MjYsLTMwLjE2MDM2NjA2XS5yZXZlcnNlKCksbD1bMTQ0NzI1MjI4NDQyLDIzMDA1MzUx''@;'; put 'put ''NzgsMTg1ODMzMDQuNzQsOTk0NDcuNDMzOTQsMzc2Ljk5OTEzOTcsMV0ucmV2ZXJzZSgpLHU9WzEsLjAwMTgzMTA1LC0zNTE2Mzk2NDk2ZS0xNCwyNDU3NTIwMTc0ZS0xNSwtMi40MDMzNzAxOWUtN10ucmV2ZXJzZSgpLGc9Wy4wNDY4NzQ5OTk5NSwtLjAwMDIwMDI2OTA4NzMsODQ0OTE5OTA5''@;'; put 'put ''NmUtMTUsLTguODIyODk4N2UtNywxLjA1Nzg3NDEyZS03XS5yZXZlcnNlKCk7ZnVuY3Rpb24gRShPKXt2YXIgWj0wLGVlPTAsdmU9MCxNZT1PKk8sSGU9JHMuYWJzKE8pLTIuMzU2MTk0NDkxO3JldHVybiBNYXRoLmFicyhPKTw4P1o9KGVlPU8qVmQoYSxNZSkpLyh2ZT1WZChsLE1lKSk6KGVl''@;'; put 'put ''PVZkKHUsTWU9NjQvTWUpLHZlPVZkKGcsTWUpLFo9JHMuc3FydChuLyRzLmFicyhPKSkqKCRzLmNvcyhIZSkqZWUtJHMuc2luKEhlKSp2ZSo4LyRzLmFicyhPKSksTzwwJiYoWj0tWikpLFp9cmV0dXJuIGZ1bmN0aW9uIE8oWixlZSl7aWYoZWU9TWF0aC5yb3VuZChlZSksIWlzRmluaXRlKFop''@;'; put 'put ''KXJldHVybiBpc05hTihaKT9aOjA7aWYoZWU8MClyZXR1cm4oZWUlMj8tMToxKSpPKFosLWVlKTtpZihaPDApcmV0dXJuKGVlJTI/LTE6MSkqTygtWixlZSk7aWYoMD09PWVlKXJldHVybiBvKFopO2lmKDE9PT1lZSlyZXR1cm4gRShaKTtpZigwPT09WilyZXR1cm4gMDt2YXIgdmU9MDtpZiha''@;'; put 'put ''PmVlKXZlPUpZZShaLGVlLG8oWiksRShaKSwtMSk7ZWxzZXtmb3IodmFyIEhlPSExLFdlPTAsYXQ9MCxDdD0xLEF0PTAsS3Q9Mi9aLHF0PTIqJHMuZmxvb3IoKGVlKyRzLmZsb29yKCRzLnNxcnQoNDAqZWUpKSkvMik7cXQ+MDtxdC0tKUF0PXF0Kkt0KkN0LVdlLFdlPUN0LCRzLmFicyhDdD1B''@;'; put 'put ''dCk+MWUxMCYmKEN0Kj0xZS0xMCxXZSo9MWUtMTAsdmUqPTFlLTEwLGF0Kj0xZS0xMCksSGUmJihhdCs9Q3QpLEhlPSFIZSxxdD09ZWUmJih2ZT1XZSk7dmUvPWF0PTIqYXQtQ3R9cmV0dXJuIHZlfX0oKSxzbm49ZnVuY3Rpb24oKXt2YXIgbj0uNjM2NjE5NzcyLGU9Wy0yOTU3ODIxMzg5LDcw''@;'; put 'put ''NjI4MzQwNjUsLTUxMjM1OTgwMy42LDEwODc5ODgxLjI5LC04NjMyNy45Mjc1NywyMjguNDYyMjczM10ucmV2ZXJzZSgpLHQ9WzQwMDc2NTQ0MjY5LDc0NTI0OTk2NC44LDcxODk0NjYuNDM4LDQ3NDQ3LjI2NDcsMjI2LjEwMzAyNDQsMV0ucmV2ZXJzZSgpLHI9WzEsLS4wMDEwOTg2Mjg2Mjcs''@;'; put 'put ''MjczNDUxMDQwN2UtMTQsLTIwNzMzNzA2MzllLTE1LDIuMDkzODg3MjExZS03XS5yZXZlcnNlKCksaT1bLS4wMTU2MjQ5OTk5NSwuMDAwMTQzMDQ4ODc2NSwtNjkxMTE0NzY1MWUtMTUsNy42MjEwOTUxNjFlLTcsLTkuMzQ5NDUxNTJlLThdLnJldmVyc2UoKSxhPVstNDkwMDYwNDk0M2UzLDEy''@;'; put 'put ''NzUyNzQzOWU0LC01MTUzNDM4MTM5MCw3MzQ5MjY0NTUuMSwtNDIzNzkyMi43MjYsODUxMS45Mzc5MzVdLnJldmVyc2UoKSxsPVsyNDk5NTgwNTdlNSw0MjQ0NDE5NjY0MDAsMzczMzY1MDM2NywyMjQ1OTA0MC4wMiwxMDIwNDIuNjA1LDM1NC45NjMyODg1LDFdLnJldmVyc2UoKSx1PVsxLC4w''@;'; put 'put ''MDE4MzEwNSwtMzUxNjM5NjQ5NmUtMTQsMjQ1NzUyMDE3NGUtMTUsLTIuNDAzMzcwMTllLTddLnJldmVyc2UoKSxnPVsuMDQ2ODc0OTk5OTUsLS4wMDAyMDAyNjkwODczLDg0NDkxOTkwOTZlLTE1LC04LjgyMjg5ODdlLTcsMS4wNTc4NzQxMmUtN10ucmV2ZXJzZSgpO3JldHVybiBlWmUoZnVu''@;'; put 'put ''Y3Rpb24gbyhPKXt2YXIgWj0wLGVlPTAsdmU9MCxNZT1PKk8sSGU9Ty0uNzg1Mzk4MTY0O3JldHVybiBPPDg/Wj0oZWU9VmQoZSxNZSkpLyh2ZT1WZCh0LE1lKSkrbipNbWUoTywwKSokcy5sb2coTyk6KGVlPVZkKHIsTWU9NjQvTWUpLHZlPVZkKGksTWUpLFo9JHMuc3FydChuL08pKigkcy5z''@;'; put 'put ''aW4oSGUpKmVlKyRzLmNvcyhIZSkqdmUqOC9PKSksWn0sZnVuY3Rpb24gRShPKXt2YXIgWj0wLGVlPTAsdmU9MCxNZT1PKk8sSGU9Ty0yLjM1NjE5NDQ5MTtyZXR1cm4gTzw4P1o9KGVlPU8qVmQoYSxNZSkpLyh2ZT1WZChsLE1lKSkrbiooTW1lKE8sMSkqJHMubG9nKE8pLTEvTyk6KGVlPVZk''@;'; put 'put ''KHUsTWU9NjQvTWUpLHZlPVZkKGcsTWUpLFo9JHMuc3FydChuL08pKigkcy5zaW4oSGUpKmVlKyRzLmNvcyhIZSkqdmUqOC9PKSksWn0sMCwxLC0xKX0oKSxUbWU9ZnVuY3Rpb24oKXt2YXIgbj1bMSwzLjUxNTYyMjksMy4wODk5NDI0LDEuMjA2NzQ5MiwuMjY1OTczMiwuMDM2MDc2OCwuMDA0''@;'; put 'put ''NTgxM10ucmV2ZXJzZSgpLGU9Wy4zOTg5NDIyOCwuMDEzMjg1OTIsLjAwMjI1MzE5LC0uMDAxNTc1NjUsLjAwOTE2MjgxLC0uMDIwNTc3MDYsLjAyNjM1NTM3LC0uMDE2NDc2MzMsLjAwMzkyMzc3XS5yZXZlcnNlKCkscj1bLjUsLjg3ODkwNTk0LC41MTQ5ODg2OSwuMTUwODQ5MzQsLjAyNjU4''@;'; put 'put ''NzMzLC4wMDMwMTUzMiwzMjQxMWUtOF0ucmV2ZXJzZSgpLGk9Wy4zOTg5NDIyOCwtLjAzOTg4MDI0LC0uMDAzNjIwMTgsLjAwMTYzODAxLC0uMDEwMzE1NTUsLjAyMjgyOTY3LC0uMDI4OTUzMTIsLjAxNzg3NjU0LC0uMDA0MjAwNTldLnJldmVyc2UoKTtyZXR1cm4gZnVuY3Rpb24gYShsLHUp''@;'; put 'put ''e2lmKDA9PT0odT1NYXRoLnJvdW5kKHUpKSlyZXR1cm4gZnVuY3Rpb24gdChhKXtyZXR1cm4gYTw9My43NT9WZChuLGEqYS8xNC4wNjI1KTokcy5leHAoJHMuYWJzKGEpKS8kcy5zcXJ0KCRzLmFicyhhKSkqVmQoZSwzLjc1LyRzLmFicyhhKSl9KGwpO2lmKDE9PT11KXJldHVybiBmdW5jdGlv''@;'; put 'put ''biBvKGEpe3JldHVybiBhPDMuNzU/YSpWZChyLGEqYS8xNC4wNjI1KTooYTwwPy0xOjEpKiRzLmV4cCgkcy5hYnMoYSkpLyRzLnNxcnQoJHMuYWJzKGEpKSpWZChpLDMuNzUvJHMuYWJzKGEpKX0obCk7aWYodTwwKXJldHVybiBOYU47aWYoMD09PSRzLmFicyhsKSlyZXR1cm4gMDtpZihsPT0x''@;'; put 'put ''LzApcmV0dXJuIDEvMDt2YXIgRSxnPTAsTz0yLyRzLmFicyhsKSxaPTAsZWU9MSx2ZT0wO2ZvcihFPTIqJHMucm91bmQoKHUrJHMucm91bmQoJHMuc3FydCg0MCp1KSkpLzIpO0U+MDtFLS0pdmU9RSpPKmVlK1osWj1lZSwkcy5hYnMoZWU9dmUpPjFlMTAmJihlZSo9MWUtMTAsWio9MWUtMTAs''@;'; put 'put ''Zyo9MWUtMTApLEU9PXUmJihnPVopO3JldHVybiBnKj1hKGwsMCkvZWUsbDwwJiZ1JTI/LWc6Z319KCksbG5uPWZ1bmN0aW9uKCl7dmFyIG49Wy0uNTc3MjE1NjYsLjQyMjc4NDIsLjIzMDY5NzU2LC4wMzQ4ODU5LC4wMDI2MjY5OCwxMDc1ZS03LDc0ZS03XS5yZXZlcnNlKCksZT1bMS4yNTMz''@;'; put 'put ''MTQxNCwtLjA3ODMyMzU4LC4wMjE4OTU2OCwtLjAxMDYyNDQ2LC4wMDU4Nzg3MiwtLjAwMjUxNTQsNTMyMDhlLThdLnJldmVyc2UoKSxyPVsxLC4xNTQ0MzE0NCwtLjY3Mjc4NTc5LC0uMTgxNTY4OTcsLS4wMTkxOTQwMiwtLjAwMTEwNDA0LC00Njg2ZS04XS5yZXZlcnNlKCksaT1bMS4yNTMz''@;'; put 'put ''MTQxNCwuMjM0OTg2MTksLS4wMzY1NTYyLC4wMTUwNDI2OCwtLjAwNzgwMzUzLC4wMDMyNTYxNCwtNjgyNDVlLThdLnJldmVyc2UoKTtyZXR1cm4gZVplKGZ1bmN0aW9uIHQoYSl7cmV0dXJuIGE8PTI/LSRzLmxvZyhhLzIpKlRtZShhLDApK1ZkKG4sYSphLzQpOiRzLmV4cCgtYSkvJHMuc3Fy''@;'; put 'put ''dChhKSpWZChlLDIvYSl9LGZ1bmN0aW9uIG8oYSl7cmV0dXJuIGE8PTI/JHMubG9nKGEvMikqVG1lKGEsMSkrMS9hKlZkKHIsYSphLzQpOiRzLmV4cCgtYSkvJHMuc3FydChhKSpWZChpLDIvYSl9LDAsMiwxKX0oKTtmdW5jdGlvbiBoQShuKXtjb25zdCBlPVstMS4zMDI2NTM3MTk3ODE3MDk0''@;'; put 'put ''LC42NDE5Njk3OTIzNTY0OTAyLC4wMTk0NzY0NzMyMDQxODU4MzYsLS4wMDk1NjE1MTQ3ODY4MDg2MywtLjAwMDk0NjU5NTM0NDQ4MjAzNiwuMDAwMzY2ODM5NDk3ODUyNzYxLDQyNTIzMzI0ODA2OTA3ZS0xOCwtMjAyNzg1NzgxMTI1MzRlLTE4LC0xNjI0MjkwMDA0NjQ3ZS0xOCwxMzAzNjU1''@;'; put 'put ''ODM1NThlLTE3LDEuNTYyNjQ0MTcyMmUtOCwtOC41MjM4MDk1OTE1ZS04LDYuNTI5MDU0NDM5ZS05LDUuMDU5MzQzNDk1ZS05LC05LjkxMzY0MTU2ZS0xMCwtMi4yNzM2NTEyMmUtMTAsOTY0Njc5MTFlLTE4LDIzOTQwMzhlLTE4LC02ODg2MDI3ZS0xOCw4OTQ0ODdlLTE4LDMxMzA5MmUtMTgs''@;'; put 'put ''LTExMjcwOGUtMTgsMzgxZS0xOCw3MTA2ZS0xOCwtMTUyM2UtMTgsLTk0ZS0xOCwxMjFlLTE4LC0yOGUtMThdO2xldCBhLGwsdSxnLHQ9ZS5sZW5ndGgtMSxyPSExLGk9MCxvPTA7aWYoMD09PW4pcmV0dXJuIDA7Zm9yKG48MCYmKG49LW4scj0hMCksYT0yLygyK24pLGw9NCphLTI7dD4wO3Qt''@;'; put 'put ''LSl1PWksaT1sKmktbytlW3RdLG89dTtyZXR1cm4gZz1hKk1hdGguZXhwKC1uKm4rLjUqKGVbMF0rbCppKS1vKSxyP2ctMToxLWd9ZnVuY3Rpb24gdFplKG4pe3JldHVybiAxLWhBKG4pfWZ1bmN0aW9uIG5aZShuKXtsZXQgdCxyLGksbyxlPTA7aWYobj49MilyZXR1cm4tMTAwO2lmKG48PTAp''@;'; put 'put ''cmV0dXJuIDEwMDtmb3Iobz1uPDE/bjoyLW4saT1NYXRoLnNxcnQoLTIqTWF0aC5sb2coby8yKSksdD0tLjcwNzExKigoMi4zMDc1MysuMjcwNjEqaSkvKDEraSooLjk5MjI5Ky4wNDQ4MSppKSktaSk7ZTwyO2UrKylyPXRaZSh0KS1vLHQrPXIvKDEuMTI4Mzc5MTY3MDk1NTEyNipNYXRoLmV4''@;'; put 'put ''cCgtdCp0KS10KnIpO3JldHVybiBuPDE/dDotdH1mdW5jdGlvbiBtUChuKXtjb25zdCBlPVstMS43MTYxODUxMzg4NjU0OTUsMjQuNzY1NjUwODA1NTc1OTIsLTM3OS44MDQyNTY0NzA5NDU2Myw2MjkuMzMxMTU1MzEyODE4NCw4NjYuOTY2MjAyNzkwNDEzMywtMzE0NTEuMjcyOTY4ODQ4MzY3''@;'; put 'put ''LC0zNjE0NC40MTM0MTg2OTExNzYsNjY0NTYuMTQzODIwMjQwNTRdLHQ9Wy0zMC44NDAyMzAwMTE5NzM5LDMxNS4zNTA2MjY5Nzk2MDQxNiwtMTAxNS4xNTYzNjc0OTAyMTkyLC0zMTA3Ljc3MTY3MTU3MjMxMSwyMjUzOC4xMTg0MjA5ODAxNSw0NzU1Ljg0NjI3NzUyNzg4MSwtMTM0NjU5Ljk1''@;'; put 'put ''OTg2NDk2OTMsLTExNTEzMi4yNTk2NzU1NTM1XTtsZXQgdSxnLEUsTyxyPSExLGk9MCxvPTAsYT0wLGw9bjtpZihuPjE3MS42MjQzNzY5NTM2MDc2KXJldHVybiAxLzA7aWYobDw9MCl7aWYoTz1sJTEsIU8pcmV0dXJuIDEvMDtyPSgxJmw/LTE6MSkqTWF0aC5QSS9NYXRoLnNpbihNYXRoLlBJ''@;'; put 'put ''Kk8pLGw9MS1sfWZvcihFPWwsZz1sPDE/bCsrOihsLT1pPSgwfGwpLTEpLTEsdT0wO3U8ODsrK3UpYT0oYStlW3VdKSpnLG89bypnK3RbdV07aWYoTz1hL28rMSxFPGwpTy89RTtlbHNlIGlmKEU+bClmb3IodT0wO3U8aTsrK3UpTyo9bCxsKys7cmV0dXJuIHImJihPPXIvTyksT31jb25zdCB4''@;'; put 'put ''bWVfaW52PWZ1bmN0aW9uKG4sZSx0KXtyZXR1cm4gaVplKG4sZSkqdH07ZnVuY3Rpb24gSTAobil7bGV0IGU9MDtjb25zdCB0PVs3Ni4xODAwOTE3Mjk0NzE0NiwtODYuNTA1MzIwMzI5NDE2NzgsMjQuMDE0MDk4MjQwODMwOTEsLTEuMjMxNzM5NTcyNDUwMTU1LC4wMDEyMDg2NTA5NzM4NjYx''@;'; put 'put ''NzksLTUzOTUyMzkzODQ5NTNlLTE4XTtsZXQgaSxvLGEscj0xLjAwMDAwMDAwMDE5MDAxNTtmb3IoYT0obz1pPW4pKzUuNSxhLT0oaSsuNSkqTWF0aC5sb2coYSk7ZTw2O2UrKylyKz10W2VdLysrbztyZXR1cm4gTWF0aC5sb2coMi41MDY2MjgyNzQ2MzEwMDA3KnIvaSktYX1mdW5jdGlvbiBB''@;'; put 'put ''bWUobixlKXtjb25zdCB0PUkwKG4pO2xldCByPW4saT0xL24sbz1pLGE9ZSsxLW4sbD0xLzFlLTMwLHU9MS9hLGc9dSxFPTE7Y29uc3QgTz0tfig4LjUqTWF0aC5sb2cobj49MT9uOjEvbikrLjQqbisxNyk7bGV0IFo7aWYoZTwwfHxuPD0wKXJldHVybiBOYU47aWYoZTxuKzEpe2Zvcig7RTw9''@;'; put 'put ''TztFKyspaSs9byo9ZS8rK3I7cmV0dXJuIGkqTWF0aC5leHAoLWUrbipNYXRoLmxvZyhlKS10KX1mb3IoO0U8PU87RSsrKVo9LUUqKEUtbiksYSs9Mix1PVoqdSthLGw9YStaL2wsdT0xL3UsZyo9dSpsO3JldHVybiAxLWcqTWF0aC5leHAoLWUrbipNYXRoLmxvZyhlKS10KX1mdW5jdGlvbiBp''@;'; put 'put ''WmUobixlKXtsZXQgdD0wO2NvbnN0IHI9ZS0xLG89STAoZSk7bGV0IGEsbCx1LGcsRSxPLFo7aWYobj49MSlyZXR1cm4gTWF0aC5tYXgoMTAwLGUrMTAwKk1hdGguc3FydChlKSk7aWYobjw9MClyZXR1cm4gMDtmb3IoZT4xPyhPPU1hdGgubG9nKHIpLFo9TWF0aC5leHAociooTy0xKS1vKSxF''@;'; put 'put ''PW48LjU/bjoxLW4sdT1NYXRoLnNxcnQoLTIqTWF0aC5sb2coRSkpLGE9KDIuMzA3NTMrLjI3MDYxKnUpLygxK3UqKC45OTIyOSsuMDQ0ODEqdSkpLXUsbjwuNSYmKGE9LWEpLGE9TWF0aC5tYXgoLjAwMSxlKk1hdGgucG93KDEtMS8oOSplKS1hLygzKk1hdGguc3FydChlKSksMykpKToodT0x''@;'; put 'put ''LWUqKC4yNTMrLjEyKmUpLGE9bjx1P01hdGgucG93KG4vdSwxL2UpOjEtTWF0aC5sb2coMS0obi11KS8oMS11KSkpO3Q8MTI7dCsrKXtpZihhPD0wKXJldHVybiAwO2lmKGw9QW1lKGUsYSktbix1PWU+MT9aKk1hdGguZXhwKC0oYS1yKStyKihNYXRoLmxvZyhhKS1PKSk6TWF0aC5leHAoLWEr''@;'; put 'put ''cipNYXRoLmxvZyhhKS1vKSxnPWwvdSxhLT11PWcvKDEtLjUqTWF0aC5taW4oMSxnKigoZS0xKS9hLTEpKSksYTw9MCYmKGE9LjUqKGErdSkpLE1hdGguYWJzKHUpPDFlLTgqYSlicmVha31yZXR1cm4gYX1jb25zdCBYNF9wZGY9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBNYXRoLmV4cCgtLjUq''@;'; put 'put ''TWF0aC5sb2coMipNYXRoLlBJKS1NYXRoLmxvZyhyKS1NYXRoLnBvdyhlLXQsMikvKDIqcipyKSl9LFg0X2NkZj1mdW5jdGlvbihlLHQscil7cmV0dXJuLjUqKDEraEEoKGUtdCkvTWF0aC5zcXJ0KDIqcipyKSkpfSxYNF9pbnY9ZnVuY3Rpb24obixlLHQpe3JldHVybi0xLjQxNDIxMzU2MjM3''@;'; put 'put ''MzA5NTEqdCpuWmUoMipuKStlfTtmdW5jdGlvbiBSbWUobixlKXtpZighKG48PTB8fGU8PTApKXJldHVybiBuK2U+MTcwP01hdGguZXhwKG9aZShuLGUpKTptUChuKSptUChlKS9tUChuK2UpfWZ1bmN0aW9uIG9aZShuLGUpe3JldHVybiBJMChuKStJMChlKS1JMChuK2UpfWZ1bmN0aW9uIElt''@;'; put 'put ''ZShuLGUsdCl7dmFyIGwsdSxFLE8sZWUsdmUsTWUsSGUsV2UsaT1lLTEsbz10LTEsYT0wO2lmKG48PTApcmV0dXJuIDA7aWYobj49MSlyZXR1cm4gMTtmb3IoZT49MSYmdD49MT8oZWU9KDIuMzA3NTMrLjI3MDYxKihFPU1hdGguc3FydCgtMipNYXRoLmxvZyhuPC41P246MS1uKSkpKS8oMStF''@;'; put 'put ''KiguOTkyMjkrLjA0NDgxKkUpKS1FLG48LjUmJihlZT0tZWUpLHZlPShlZSplZS0zKS82LE1lPTIvKDEvKDIqZS0xKSsxLygyKnQtMSkpLEhlPWVlKk1hdGguc3FydCh2ZStNZSkvTWUtKDEvKDIqdC0xKS0xLygyKmUtMSkpKih2ZSs1LzYtMi8oMypNZSkpLGVlPWUvKGUrdCpNYXRoLmV4cCgy''@;'; put 'put ''KkhlKSkpOihsPU1hdGgubG9nKGUvKGUrdCkpLHU9TWF0aC5sb2codC8oZSt0KSksZWU9bjwoRT1NYXRoLmV4cChlKmwpL2UpLyhIZT1FKyhPPU1hdGguZXhwKHQqdSkvdCkpP01hdGgucG93KGUqSGUqbiwxL2UpOjEtTWF0aC5wb3codCpIZSooMS1uKSwxL3QpKSxXZT0tSTAoZSktSTAodCkr''@;'; put 'put ''STAoZSt0KTthPDEwO2ErKyl7aWYoMD09PWVlfHwxPT09ZWUpcmV0dXJuIGVlO2lmKChlZS09RT0oTz0oaUsoZWUsZSx0KS1uKS8oRT1NYXRoLmV4cChpKk1hdGgubG9nKGVlKStvKk1hdGgubG9nKDEtZWUpK1dlKSkpLygxLS41Kk1hdGgubWluKDEsTyooaS9lZS1vLygxLWVlKSkpKSk8PTAm''@;'; put 'put ''JihlZT0uNSooZWUrRSkpLGVlPj0xJiYoZWU9LjUqKGVlK0UrMSkpLE1hdGguYWJzKEUpPDFlLTgqZWUmJmE+MClicmVha31yZXR1cm4gZWV9ZnVuY3Rpb24gaUsobixlLHQpe3ZhciByPTA9PT1ufHwxPT09bj8wOk1hdGguZXhwKEkwKGUrdCktSTAoZSktSTAodCkrZSpNYXRoLmxvZyhuKSt0''@;'; put 'put ''Kk1hdGgubG9nKDEtbikpO3JldHVybiEobjwwfHxuPjEpJiYobjwoZSsxKS8oZSt0KzIpP3IqYVplKG4sZSx0KS9lOjEtciphWmUoMS1uLHQsZSkvdCl9ZnVuY3Rpb24gYVplKG4sZSx0KXt2YXIgRSxPLFosZWUscj0xZS0zMCxpPTEsbz1lK3QsYT1lKzEsbD1lLTEsdT0xLGc9MS1vKm4vYTtm''@;'; put 'put ''b3IoTWF0aC5hYnMoZyk8ciYmKGc9ciksZWU9Zz0xL2c7aTw9MTAwJiYoZz0xKyhPPWkqKHQtaSkqbi8oKGwrKEU9MippKSkqKGUrRSkpKSpnLE1hdGguYWJzKGcpPHImJihnPXIpLHU9MStPL3UsTWF0aC5hYnModSk8ciYmKHU9ciksZWUqPShnPTEvZykqdSxnPTErKE89LShlK2kpKihvK2kp''@;'; put 'put ''Km4vKChlK0UpKihhK0UpKSkqZyxNYXRoLmFicyhnKTxyJiYoZz1yKSx1PTErTy91LE1hdGguYWJzKHUpPHImJih1PXIpLGVlKj1aPShnPTEvZykqdSwhKE1hdGguYWJzKFotMSk8M2UtNykpO2krKyk7cmV0dXJuIGVlfWNvbnN0IG9LX3BkZj1mdW5jdGlvbihuLGUsdCl7cmV0dXJuIDA9PT10''@;'; put 'put ''fHwxPT09dD9lKnQ9PT1uPzE6MDpsWmUoZSxuKSpNYXRoLnBvdyh0LG4pKk1hdGgucG93KDEtdCxlLW4pfSxvS19jZGY9ZnVuY3Rpb24obixlLHQpe3ZhciByLGk9MWUtMTA7aWYobjwwKXJldHVybiAwO2lmKG4+PWUpcmV0dXJuIDE7aWYodDwwfHx0PjF8fGU8PTApcmV0dXJuIE5hTjt2YXIg''@;'; put 'put ''bz10LGE9KG49TWF0aC5mbG9vcihuKSkrMSxsPWUtbix1PWErbCxnPU1hdGguZXhwKEkwKHUpLUkwKGwpLUkwKGEpK2EqTWF0aC5sb2cobykrbCpNYXRoLmxvZygxLW8pKTtyZXR1cm4gcj1vPChhKzEpLyh1KzIpP2cqc1plKG8sYSxsLGkpOjEtZypzWmUoMS1vLGwsYSxpKSxNYXRoLnJvdW5k''@;'; put 'put ''KDEvaSooMS1yKSkvKDEvaSl9O2Z1bmN0aW9uIHNaZShuLGUsdCxyKXtmb3IodmFyIEUsaT0wLG89MSxhPTEsbD0xLHU9MCxnPTA7TWF0aC5hYnMoKGEtZykvYSk+cjspZz1hLG89bCsoRT0tKGUrdSkqKGUrdCt1KSpuLyhlKzIqdSkvKGUrMip1KzEpKSpvLGE9KGk9YStFKmkpKyhFPSh1Kz0x''@;'; put 'put ''KSoodC11KSpuLyhlKzIqdS0xKS8oZSsyKnUpKSphLGkvPWw9bytFKmwsby89bCxhLz1sLGw9MTtyZXR1cm4gYS9lfWZ1bmN0aW9uIGxaZShuLGUpe3JldHVybiBuPjE3MHx8ZT4xNzA/TWF0aC5leHAoZnVuY3Rpb24gY25uKG4sZSl7cmV0dXJuIERtZShuKS1EbWUoZSktRG1lKG4tZSl9KG4s''@;'; put 'put ''ZSkpOmFLKG4pL2FLKGUpL2FLKG4tZSl9ZnVuY3Rpb24gRG1lKG4pe3JldHVybiBuPDA/TmFOOkkwKG4rMSl9ZnVuY3Rpb24gYUsobil7cmV0dXJuIG48MD9OYU46bVAobisxKX1jb25zdCBmQV9jZGY9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZTwwPzA6QW1lKHQvMixlLzIpfSxmQV9pbnY9ZnVu''@;'; put 'put ''Y3Rpb24obixlKXtyZXR1cm4gMippWmUobiwuNSplKX0scEFfY2RmPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZTwwPzA6aUsodCplLyh0KmUrciksdC8yLHIvMil9LHBBX2ludj1mdW5jdGlvbihlLHQscil7cmV0dXJuIHIvKHQqKDEvSW1lKGUsdC8yLHIvMiktMSkpfSxMbWU9e3BkZjpmdW5j''@;'; put 'put ''dGlvbihlLHQpe3JldHVybiB0PDB8fGUlMSE9MHx8ZTwwPzA6TWF0aC5wb3codCxlKSpNYXRoLmV4cCgtdCkvYUsoZSl9LGNkZjpmdW5jdGlvbihlLHQpe3ZhciByPTA7aWYoZTwwKXJldHVybiAwO2Zvcih2YXIgaT0wO3I8PWU7cisrKWkrPUxtZS5wZGYocix0KTtyZXR1cm4gaX19LGg5PXtw''@;'; put 'put ''ZGY6ZnVuY3Rpb24oZSx0LHIsaSl7aWYoZTwwfHxlPHItKHQtaSkpcmV0dXJuIDA7aWYoZT5pfHxlPnIpcmV0dXJuIDA7aWYoMipyPnQpcmV0dXJuIDIqaT50P2g5LnBkZih0LXItaStlLHQsdC1yLHQtaSk6aDkucGRmKGktZSx0LHQtcixpKTtpZigyKmk+dClyZXR1cm4gaDkucGRmKHItZSx0''@;'; put 'put ''LHIsdC1pKTtpZihyPGkpcmV0dXJuIGg5LnBkZihlLHQsaSxyKTtmb3IodmFyIG89MSxhPTAsbD0wO2w8ZTtsKyspe2Zvcig7bz4xJiZhPGk7KW8qPTEtci8odC1hKSxhKys7byo9KGktbCkqKHItbCkvKChsKzEpKih0LXItaStsKzEpKX1mb3IoO2E8aTthKyspbyo9MS1yLyh0LWEpO3JldHVy''@;'; put 'put ''biBNYXRoLm1pbigxLE1hdGgubWF4KDAsbykpfSxjZGY6ZnVuY3Rpb24gbihlLHQscixpKXtpZihlPDB8fGU8ci0odC1pKSlyZXR1cm4gMDtpZihlPj1pfHxlPj1yKXJldHVybiAxO2lmKDIqcj50KXJldHVybiAyKmk+dD9uKHQtci1pK2UsdCx0LXIsdC1pKToxLWg5LmNkZihpLWUtMSx0LHQt''@;'; put 'put ''cixpKTtpZigyKmk+dClyZXR1cm4gMS1oOS5jZGYoci1lLTEsdCxyLHQtaSk7aWYocjxpKXJldHVybiBoOS5jZGYoZSx0LGkscik7Zm9yKHZhciBvPTEsYT0xLGw9MCx1PTA7dTxlO3UrKyl7Zm9yKDtvPjEmJmw8aTspe3ZhciBnPTEtci8odC1sKTthKj1nLG8qPWcsbCsrfW8rPWEqPShpLXUp''@;'; put 'put ''KihyLXUpLygodSsxKSoodC1yLWkrdSsxKSl9Zm9yKDtsPGk7bCsrKW8qPTEtci8odC1sKTtyZXR1cm4gTWF0aC5taW4oMSxNYXRoLm1heCgwLG8pKX19LEFtX2NkZj1mdW5jdGlvbihlLHQpe3ZhciByPXQvMjtyZXR1cm4gaUsoKGUrTWF0aC5zcXJ0KGUqZSt0KSkvKDIqTWF0aC5zcXJ0KGUq''@;'; put 'put ''ZSt0KSkscixyKX0sQW1faW52PWZ1bmN0aW9uKG4sZSl7dmFyIHQ9SW1lKDIqTWF0aC5taW4obiwxLW4pLC41KmUsLjUpO3JldHVybiB0PU1hdGguc3FydChlKigxLXQpL3QpLG4+LjU/dDotdH0sTm1lPXtwZGY6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPT09ZT4+PjAmJihlPDA/MDpsWmUo''@;'; put 'put ''ZSt0LTEsdC0xKSpNYXRoLnBvdygxLXIsZSkqTWF0aC5wb3cocix0KSl9LGNkZjpmdW5jdGlvbihlLHQscil7dmFyIGk9MCxvPTA7aWYoZTwwKXJldHVybiAwO2Zvcig7bzw9ZTtvKyspaSs9Tm1lLnBkZihvLHQscik7cmV0dXJuIGl9fTtmdW5jdGlvbiB1WmUobil7Zm9yKHZhciBlPTAsdD1u''@;'; put 'put ''Lmxlbmd0aDstLXQ+PTA7KWUrPW5bdF07cmV0dXJuIGV9ZnVuY3Rpb24ga20obil7cmV0dXJuIHVaZShuKS9uLmxlbmd0aH1mdW5jdGlvbiBWQyhuKXtmb3IodmFyIGksZT1rbShuKSx0PTAscj1uLmxlbmd0aDstLXI+PTA7KXQrPShpPW5bcl0tZSkqaTtyZXR1cm4gdH1mdW5jdGlvbiB2UChu''@;'; put 'put ''LGUpe3JldHVybiBWQyhuKS8obi5sZW5ndGgtKGU/MTowKSl9ZnVuY3Rpb24gbnkobixlKXtyZXR1cm4gTWF0aC5zcXJ0KHZQKG4sZSkpfWZ1bmN0aW9uIF9QKG4sZSl7dmFyIGEsdD1rbShuKSxyPWttKGUpLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSk7Zm9yKGE9MDthPGk7YSsrKW9bYV09''@;'; put 'put ''KG5bYV0tdCkqKGVbYV0tcik7cmV0dXJuIHVaZShvKS8oaS0xKX1mdW5jdGlvbiBkWmUobixlKXtyZXR1cm4gX1AobixlKS9ueShuLDEpL255KGUsMSl9Y2xhc3MgRm1lIGV4dGVuZHMgQnN7ZXJmKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgi''@;'; put 'put ''RVJGIiksKHIsaSk9PnZvaWQgMD09PWk/aEEocik6aEEoaSktaEEocikpfWVyZmMoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJFUkZDIiksdFplKX1leHBvbmRpc3QoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlz''@;'; put 'put ''Lm1ldGFkYXRhKCJFWFBPTi5ESVNUIiksKHIsaSxvKT0+bz8oKG4sZSk9Pm48MD8wOjEtTWF0aC5leHAoLWUqbikpKHIsaSk6KChuLGUpPT5uPDA/MDplKk1hdGguZXhwKC1lKm4pKShyLGkpKX1maXNoZXIoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFk''@;'; put 'put ''YXRhKCJGSVNIRVIiKSxyPT5NYXRoLmxvZygoMStyKS8oMS1yKSkvMil9ZmlzaGVyaW52KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiRklTSEVSSU5WIikscj0+MS0yLyhNYXRoLmV4cCgyKnIpKzEpKX1nYW1tYShlLHQpe3JldHVybiB0aGlz''@;'; put 'put ''LnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkdBTU1BIiksbVApfWdhbW1hZGlzdChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkdBTU1BLkRJU1QiKSwocixpLG8sYSk9PmE/ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPDA/''@;'; put 'put ''MDpBbWUodCxlL3IpfShyLGksbyk6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPDA/MDowPT09ZSYmMT09PXQ/MS9yOk1hdGguZXhwKCh0LTEpKk1hdGgubG9nKGUpLWUvci1JMCh0KS10Kk1hdGgubG9nKHIpKX0ocixpLG8pKX1nYW1tYWxuKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24o''@;'; put 'put ''ZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiR0FNTUFMTiIpLEkwKX1nYW1tYWludihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkdBTU1BLklOViIpLHhtZV9pbnYpfWdhdXNzKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQs''@;'; put 'put ''dGhpcy5tZXRhZGF0YSgiR0FVU1MiKSxyPT5YNF9jZGYociwwLDEpLS41KX1iZXRhZGlzdChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkJFVEEuRElTVCIpLChyLGksbyxhLGwsdSk9PnI8PWw/bmV3IFB0KHRuLk5VTSxkci5WYWx1ZVNtYWxs''@;'; put 'put ''KTpyPj11P25ldyBQdCh0bi5OVU0sZHIuVmFsdWVMYXJnZSk6KHI9KHItbCkvKHUtbCksYT9mdW5jdGlvbihlLHQscil7cmV0dXJuIGU+MXx8ZTwwPysoZT4xKTppSyhlLHQscil9KHIsaSxvKTpmdW5jdGlvbihlLHQscil7cmV0dXJuIGU+MXx8ZTwwPzA6MT09dCYmMT09cj8xOnQ8NTEyJiZy''@;'; put 'put ''PDUxMj9NYXRoLnBvdyhlLHQtMSkqTWF0aC5wb3coMS1lLHItMSkvUm1lKHQscik6TWF0aC5leHAoKHQtMSkqTWF0aC5sb2coZSkrKHItMSkqTWF0aC5sb2coMS1lKS1vWmUodCxyKSl9KHIsaSxvKSkpfWJldGFpbnYoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlz''@;'; put 'put ''Lm1ldGFkYXRhKCJCRVRBLklOViIpLChyLGksbyxhLGwpPT5hPj1sP25ldyBQdCh0bi5OVU0sZHIuV3JvbmdPcmRlcik6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBJbWUoZSx0LHIpfShyLGksbykqKGwtYSkrYSl9Ymlub21pYWxkaXN0KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5h''@;'; put 'put ''cmdzLHQsdGhpcy5tZXRhZGF0YSgiQklOT00uRElTVCIpLChyLGksbyxhKT0+cj5pP25ldyBQdCh0bi5OVU0sZHIuV3JvbmdPcmRlcik6KHI9TWF0aC50cnVuYyhyKSxpPU1hdGgudHJ1bmMoaSksYT9vS19jZGYocixpLG8pOm9LX3BkZihyLGksbykpKX1iaW5vbWlhbGludihlLHQpe3JldHVy''@;'; put 'put ''biB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkJJTk9NLklOViIpLChyLGksbyk9PntsZXQgYT0tMSxsPXI9TWF0aC50cnVuYyhyKTtmb3IoO2w+YSsxOyl7Y29uc3QgdT1NYXRoLnRydW5jKChhK2wpLzIpO29LX2NkZih1LHIsaSk+PW8/bD11OmE9dX1yZXR1cm4g''@;'; put 'put ''bH0pfWJlc3NlbGlmbihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkJFU1NFTEkiKSwocixpKT0+VG1lKHIsTWF0aC50cnVuYyhpKSkpfWJlc3NlbGpmbihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRh''@;'; put 'put ''dGEoIkJFU1NFTEoiKSwocixpKT0+TW1lKHIsTWF0aC50cnVuYyhpKSkpfWJlc3NlbGtmbihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkJFU1NFTEsiKSwocixpKT0+bG5uKHIsTWF0aC50cnVuYyhpKSkpfWJlc3NlbHlmbihlLHQpe3JldHVy''@;'; put 'put ''biB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkJFU1NFTFkiKSwocixpKT0+c25uKHIsTWF0aC50cnVuYyhpKSkpfWNoaXNxZGlzdChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkNISVNRLkRJU1QiKSwocixpLG8p''@;'; put 'put ''PT4oaT1NYXRoLnRydW5jKGkpLG8/ZkFfY2RmKHIsaSk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZTwwPzA6MD09PWUmJjI9PT10Py41Ok1hdGguZXhwKCh0LzItMSkqTWF0aC5sb2coZSktZS8yLXQvMipNYXRoLmxvZygyKS1JMCh0LzIpKX0ocixpKSkpfWNoaXNxZGlzdHJ0KGUsdCl7cmV0dXJu''@;'; put 'put ''IHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQ0hJU1EuRElTVC5SVCIpLChyLGkpPT4xLWZBX2NkZihyLE1hdGgudHJ1bmMoaSkpKX1jaGlzcWludihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkNISVNRLklOViIp''@;'; put 'put ''LChyLGkpPT5mQV9pbnYocixNYXRoLnRydW5jKGkpKSl9Y2hpc3FpbnZydChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkNISVNRLklOVi5SVCIpLChyLGkpPT5mQV9pbnYoMS1yLE1hdGgudHJ1bmMoaSkpKX1mZGlzdChlLHQpe3JldHVybiB0''@;'; put 'put ''aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkYuRElTVCIpLChyLGksbyxhKT0+KGk9TWF0aC50cnVuYyhpKSxvPU1hdGgudHJ1bmMobyksYT9wQV9jZGYocixpLG8pOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZTwwPzA6dDw9Mj8wPT09ZSYmdDwyPzEvMDowPT09ZSYm''@;'; put 'put ''Mj09PXQ/MToxL1JtZSh0LzIsci8yKSpNYXRoLnBvdyh0L3IsdC8yKSpNYXRoLnBvdyhlLHQvMi0xKSpNYXRoLnBvdygxK3QvciplLC0odCtyKS8yKTp0KihyLyhyK2UqdCkpLzIqb0tfcGRmKCh0LTIpLzIsKHQrci0yKS8yLHQqZS8ocitlKnQpKX0ocixpLG8pKSl9ZmRpc3RydChlLHQpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkYuRElTVC5SVCIpLChyLGksbyk9PjEtcEFfY2RmKHIsTWF0aC50cnVuYyhpKSxNYXRoLnRydW5jKG8pKSl9ZmludihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEo''@;'; put 'put ''IkYuSU5WIiksKHIsaSxvKT0+cEFfaW52KHIsTWF0aC50cnVuYyhpKSxNYXRoLnRydW5jKG8pKSl9ZmludnJ0KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiRi5JTlYuUlQiKSwocixpLG8pPT5wQV9pbnYoMS1yLE1hdGgudHJ1bmMoaSksTWF0''@;'; put 'put ''aC50cnVuYyhvKSkpfXdlaWJ1bGxkaXN0KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiV0VJQlVMTC5ESVNUIiksKHIsaSxvLGEpPT5hP2Z1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZTwwPzA6MS1NYXRoLmV4cCgtTWF0aC5wb3coZS90LHIpKX0o''@;'; put 'put ''cixvLGkpOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZTwwfHx0PDB8fHI8MD8wOnIvdCpNYXRoLnBvdyhlL3Qsci0xKSpNYXRoLmV4cCgtTWF0aC5wb3coZS90LHIpKX0ocixvLGkpKX1wb2lzc29uZGlzdChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRh''@;'; put 'put ''dGEoIlBPSVNTT04uRElTVCIpLChyLGksbyk9PihyPU1hdGgudHJ1bmMociksbz9MbWUuY2RmKHIsaSk6TG1lLnBkZihyLGkpKSl9aHlwZ2VvbWRpc3QoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJIWVBHRU9NLkRJU1QiKSwocixpLG8sYSxs''@;'; put 'put ''KT0+cj5pfHxyPm98fGk+YXx8bz5hfHxyK2E8bytpP25ldyBQdCh0bi5OVU0sZHIuVmFsdWVMYXJnZSk6KHI9TWF0aC50cnVuYyhyKSxpPU1hdGgudHJ1bmMoaSksbz1NYXRoLnRydW5jKG8pLGE9TWF0aC50cnVuYyhhKSxsP2g5LmNkZihyLGEsbyxpKTpoOS5wZGYocixhLG8saSkpKX10ZGlz''@;'; put 'put ''dChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlQuRElTVCIpLChyLGksbyk9PihpPU1hdGgudHJ1bmMoaSksbz9BbV9jZGYocixpKTpmdW5jdGlvbihlLHQpe3JldHVybiB0PXQ+MWUxMDA/MWUxMDA6dCwxLyhNYXRoLnNxcnQodCkqUm1lKC41''@;'; put 'put ''LHQvMikpKk1hdGgucG93KDErZSplL3QsLSh0KzEpLzIpfShyLGkpKSl9dGRpc3QydChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlQuRElTVC4yVCIpLChyLGkpPT4yKigxLUFtX2NkZihyLE1hdGgudHJ1bmMoaSkpKSl9dGRpc3RydChlLHQp''@;'; put 'put ''e3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlQuRElTVC5SVCIpLChyLGkpPT4xLUFtX2NkZihyLE1hdGgudHJ1bmMoaSkpKX10ZGlzdG9sZChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlRESVNUIiks''@;'; put 'put ''KHIsaSxvKT0+byooMS1BbV9jZGYocixNYXRoLnRydW5jKGkpKSkpfXRpbnYoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJULklOViIpLChyLGkpPT5BbV9pbnYocixNYXRoLnRydW5jKGkpKSl9dGludjJ0KGUsdCl7cmV0dXJuIHRoaXMucnVu''@;'; put 'put ''RnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiVC5JTlYuMlQiKSwocixpKT0+QW1faW52KDEtci8yLE1hdGgudHJ1bmMoaSkpKX1sb2dub3JtZGlzdChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkxPR05PUk0uRElTVCIpLChyLGks''@;'; put 'put ''byxhKT0+YT9mdW5jdGlvbihlLHQscil7cmV0dXJuIGU8MD8wOi41Ky41KmhBKChNYXRoLmxvZyhlKS10KS9NYXRoLnNxcnQoMipyKnIpKX0ocixpLG8pOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZTw9MD8wOk1hdGguZXhwKC1NYXRoLmxvZyhlKS0uNSpNYXRoLmxvZygyKk1hdGguUEkpLU1h''@;'; put 'put ''dGgubG9nKHIpLU1hdGgucG93KE1hdGgubG9nKGUpLXQsMikvKDIqcipyKSl9KHIsaSxvKSl9bG9nbm9ybWludihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkxPR05PUk0uSU5WIiksKHIsaSxvKT0+ZnVuY3Rpb24obixlLHQpe3JldHVybiBN''@;'; put 'put ''YXRoLmV4cCgtMS40MTQyMTM1NjIzNzMwOTUxKnQqblplKDIqbikrZSl9KHIsaSxvKSl9bm9ybWRpc3QoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJOT1JNLkRJU1QiKSwocixpLG8sYSk9PmE/WDRfY2RmKHIsaSxvKTpYNF9wZGYocixpLG8p''@;'; put 'put ''KX1ub3JtaW52KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiTk9STS5JTlYiKSwocixpLG8pPT5YNF9pbnYocixpLG8pKX1ub3Jtc2Rpc3QoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJOT1JN''@;'; put 'put ''LlMuRElTVCIpLChyLGkpPT5pP1g0X2NkZihyLDAsMSk6WDRfcGRmKHIsMCwxKSl9bm9ybXNpbnYoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJOT1JNLlMuSU5WIikscj0+WDRfaW52KHIsMCwxKSl9cGhpKGUsdCl7cmV0dXJuIHRoaXMucnVu''@;'; put 'put ''RnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiUEhJIikscj0+WDRfcGRmKHIsMCwxKSl9bmVnYmlub21kaXN0KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiTkVHQklOT00uRElTVCIpLChyLGksbyxhKT0+KHI9TWF0aC50cnVuYyhy''@;'; put 'put ''KSxpPU1hdGgudHJ1bmMoaSksYT9ObWUuY2RmKHIsaSxvKTpObWUucGRmKHIsaSxvKSkpfWNvbmZpZGVuY2Vub3JtKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQ09ORklERU5DRS5OT1JNIiksKHIsaSxvKT0+ZnVuY3Rpb24gdW5uKCl7dmFy''@;'; put 'put ''IHQsbj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyksZT1uZXcgQXJyYXkoMik7cmV0dXJuIHQ9ND09PW4ubGVuZ3RoP01hdGguYWJzKFg0X2ludihuWzFdLzIsMCwxKSpuWzJdL01hdGguc3FydChuWzNdKSk6TWF0aC5hYnMoWDRfaW52KG5bMV0vMiwwLDEpKm55KG5bMl0pL01hdGguc3FydChu''@;'; put 'put ''WzJdLmxlbmd0aCkpLGVbMF09blswXS10LGVbMV09blswXSt0LGV9KDEscixpLE1hdGgudHJ1bmMobykpWzFdLTEpfWNvbmZpZGVuY2V0KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQ09ORklERU5DRS5UIiksKHIsaSxvKT0+MT09PShvPU1h''@;'; put 'put ''dGgudHJ1bmMobykpP25ldyBQdCh0bi5ESVZfQllfWkVSTyk6ZnVuY3Rpb24gZG5uKCl7dmFyIHQsbj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyksZT1uZXcgQXJyYXkoMik7cmV0dXJuIHQ9ND09PW4ubGVuZ3RoP01hdGguYWJzKEFtX2ludihuWzFdLzIsblszXS0xKSpuWzJdL01hdGguc3Fy''@;'; put 'put ''dChuWzNdKSk6TWF0aC5hYnMoQW1faW52KG5bMV0vMixuWzJdLmxlbmd0aC0xKSpueShuWzJdLCEwKS9NYXRoLnNxcnQoblsyXS5sZW5ndGgpKSxlWzBdPW5bMF0tdCxlWzFdPW5bMF0rdCxlfSgxLHIsaSxvKVsxXS0xKX1zdGFuZGFyZGl6ZShlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9u''@;'; put 'put ''KGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlNUQU5EQVJESVpFIiksKHIsaSxvKT0+KHItaSkvbyl9fUZtZS5pbXBsZW1lbnRlZEZ1bmN0aW9ucz17RVJGOnttZXRob2Q6ImVyZiIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG9w''@;'; put 'put ''dGlvbmFsQXJnOiEwfV19LEVSRkM6e21ldGhvZDoiZXJmYyIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9XX0sIkVYUE9OLkRJU1QiOnttZXRob2Q6ImV4cG9uZGlzdCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MH0se2FyZ3VtZW50''@;'; put 'put ''VHlwZTpldC5OVU1CRVIsZ3JlYXRlclRoYW46MH0se2FyZ3VtZW50VHlwZTpldC5CT09MRUFOfV19LEZJU0hFUjp7bWV0aG9kOiJmaXNoZXIiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGdyZWF0ZXJUaGFuOi0xLGxlc3NUaGFuOjF9XX0sRklTSEVSSU5WOnttZXRob2Q6''@;'; put 'put ''ImZpc2hlcmludiIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9XX0sR0FNTUE6e21ldGhvZDoiZ2FtbWEiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfV19LCJHQU1NQS5ESVNUIjp7bWV0aG9kOiJnYW1tYWRpc3QiLHBhcmFtZXRlcnM6W3thcmd1bWVu''@;'; put 'put ''dFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGdyZWF0ZXJUaGFuOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGdyZWF0ZXJUaGFuOjB9LHthcmd1bWVudFR5cGU6ZXQuQk9PTEVBTn1dfSxHQU1NQUxOOnttZXRob2Q6ImdhbW1hbG4iLHBhcmFt''@;'; put 'put ''ZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGdyZWF0ZXJUaGFuOjB9XX0sIkdBTU1BLklOViI6e21ldGhvZDoiZ2FtbWFpbnYiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjAsbGVzc1RoYW46MX0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZ3Jl''@;'; put 'put ''YXRlclRoYW46MH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZ3JlYXRlclRoYW46MH1dfSxHQVVTUzp7bWV0aG9kOiJnYXVzcyIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9XX0sIkJFVEEuRElTVCI6e21ldGhvZDoiYmV0YWRpc3QiLHBhcmFtZXRlcnM6W3thcmd1bWVu''@;'; put 'put ''dFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixncmVhdGVyVGhhbjowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixncmVhdGVyVGhhbjowfSx7YXJndW1lbnRUeXBlOmV0LkJPT0xFQU59LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGRlZmF1bHRWYWx1ZTowfSx7YXJn''@;'; put 'put ''dW1lbnRUeXBlOmV0Lk5VTUJFUixkZWZhdWx0VmFsdWU6MX1dfSwiQkVUQS5JTlYiOnttZXRob2Q6ImJldGFpbnYiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGdyZWF0ZXJUaGFuOjAsbWF4VmFsdWU6MX0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZ3JlYXRlclRoYW46''@;'; put 'put ''MH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZ3JlYXRlclRoYW46MH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZGVmYXVsdFZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGRlZmF1bHRWYWx1ZToxfV19LCJCSU5PTS5ESVNUIjp7bWV0aG9kOiJiaW5vbWlhbGRpc3QiLHBhcmFt''@;'; put 'put ''ZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjAsbWF4VmFsdWU6MX0se2FyZ3VtZW50VHlwZTpldC5CT09MRUFOfV19LCJCSU5PTS5JTlYi''@;'; put 'put ''OnttZXRob2Q6ImJpbm9taWFsaW52IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowLG1heFZhbHVlOjF9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGdyZWF0ZXJUaGFuOjAsbGVzc1RoYW46''@;'; put 'put ''MX1dfSxCRVNTRUxJOnttZXRob2Q6ImJlc3NlbGlmbiIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9XX0sQkVTU0VMSjp7bWV0aG9kOiJiZXNzZWxqZm4iLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQu''@;'; put 'put ''TlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowfV19LEJFU1NFTEs6e21ldGhvZDoiYmVzc2Vsa2ZuIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MH1dfSxCRVNTRUxZOnttZXRob2Q6''@;'; put 'put ''ImJlc3NlbHlmbiIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9XX0sIkNISVNRLkRJU1QiOnttZXRob2Q6ImNoaXNxZGlzdCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVu''@;'; put 'put ''dFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjEsbWF4VmFsdWU6MWUxMH0se2FyZ3VtZW50VHlwZTpldC5CT09MRUFOfV19LCJDSElTUS5ESVNULlJUIjp7bWV0aG9kOiJjaGlzcWRpc3RydCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVN''@;'; put 'put ''QkVSLG1pblZhbHVlOjEsbWF4VmFsdWU6MWUxMH1dfSwiQ0hJU1EuSU5WIjp7bWV0aG9kOiJjaGlzcWludiIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MCxtYXhWYWx1ZToxfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZToxLG1heFZhbHVl''@;'; put 'put ''OjFlMTB9XX0sIkNISVNRLklOVi5SVCI6e21ldGhvZDoiY2hpc3FpbnZydCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MCxtYXhWYWx1ZToxfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZToxfV19LCJGLkRJU1QiOnttZXRob2Q6ImZkaXN0''@;'; put 'put ''IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZToxfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZToxfSx7YXJndW1lbnRUeXBlOmV0LkJPT0xFQU59XX0sIkYuRElTVC5SVCI6e21l''@;'; put 'put ''dGhvZDoiZmRpc3RydCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MX0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MX1dfSwiRi5JTlYiOnttZXRob2Q6ImZpbnYiLHBhcmFt''@;'; put 'put ''ZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjAsbWF4VmFsdWU6MX0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MX0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MX1dfSwiRi5JTlYuUlQiOnttZXRob2Q6ImZpbnZydCIscGFyYW1ldGVy''@;'; put 'put ''czpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MCxtYXhWYWx1ZToxfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZToxfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZToxfV19LCJXRUlCVUxMLkRJU1QiOnttZXRob2Q6IndlaWJ1bGxkaXN0IixwYXJh''@;'; put 'put ''bWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixncmVhdGVyVGhhbjowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixncmVhdGVyVGhhbjowfSx7YXJndW1lbnRUeXBlOmV0LkJPT0xFQU59XX0sIlBPSVNTT04uRElTVCI6''@;'; put 'put ''e21ldGhvZDoicG9pc3NvbmRpc3QiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuQk9PTEVBTn1dfSwiSFlQR0VPTS5ESVNUIjp7bWV0aG9kOiJoeXBnZW9t''@;'; put 'put ''ZGlzdCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZ3JlYXRlclRoYW46MH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZ3JlYXRlclRoYW46MH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZ3JlYXRlclRo''@;'; put 'put ''YW46MH0se2FyZ3VtZW50VHlwZTpldC5CT09MRUFOfV19LCJULkRJU1QiOnttZXRob2Q6InRkaXN0IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MX0se2FyZ3VtZW50VHlwZTpldC5CT09MRUFOfV19LCJULkRJ''@;'; put 'put ''U1QuMlQiOnttZXRob2Q6InRkaXN0MnQiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjF9XX0sIlQuRElTVC5SVCI6e21ldGhvZDoidGRpc3RydCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlw''@;'; put 'put ''ZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjF9XX0sVERJU1Q6e21ldGhvZDoidGRpc3RvbGQiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjF9LHthcmd1''@;'; put 'put ''bWVudFR5cGU6ZXQuSU5URUdFUixtaW5WYWx1ZToxLG1heFZhbHVlOjJ9XX0sIlQuSU5WIjp7bWV0aG9kOiJ0aW52IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixncmVhdGVyVGhhbjowLGxlc3NUaGFuOjF9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjF9''@;'; put 'put ''XX0sIlQuSU5WLjJUIjp7bWV0aG9kOiJ0aW52MnQiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGdyZWF0ZXJUaGFuOjAsbWF4VmFsdWU6MX0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFsdWU6MX1dfSwiTE9HTk9STS5ESVNUIjp7bWV0aG9kOiJsb2dub3JtZGlz''@;'; put 'put ''dCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZ3JlYXRlclRoYW46MH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGdyZWF0ZXJUaGFuOjB9LHthcmd1bWVudFR5cGU6ZXQuQk9PTEVBTn1dfSwiTE9HTk9STS5JTlYiOnttZXRo''@;'; put 'put ''b2Q6ImxvZ25vcm1pbnYiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGdyZWF0ZXJUaGFuOjAsbGVzc1RoYW46MX0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGdyZWF0ZXJUaGFuOjB9XX0sIk5PUk0uRElTVCI6e21ldGhvZDoi''@;'; put 'put ''bm9ybWRpc3QiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZ3JlYXRlclRoYW46MH0se2FyZ3VtZW50VHlwZTpldC5CT09MRUFOfV19LCJOT1JNLklOViI6e21ldGhvZDoibm9ybWlu''@;'; put 'put ''diIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZ3JlYXRlclRoYW46MCxsZXNzVGhhbjoxfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZ3JlYXRlclRoYW46MH1dfSwiTk9STS5TLkRJU1QiOnttZXRob2Q6Im5vcm1zZGlzdCIs''@;'; put 'put ''cGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuQk9PTEVBTn1dfSwiTk9STS5TLklOViI6e21ldGhvZDoibm9ybXNpbnYiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGdyZWF0ZXJUaGFuOjAsbGVzc1RoYW46MX1dfSxQSEk6''@;'; put 'put ''e21ldGhvZDoicGhpIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn1dfSwiTkVHQklOT00uRElTVCI6e21ldGhvZDoibmVnYmlub21kaXN0IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixt''@;'; put 'put ''aW5WYWx1ZToxfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowLG1heFZhbHVlOjF9LHthcmd1bWVudFR5cGU6ZXQuQk9PTEVBTn1dfSwiQ09ORklERU5DRS5OT1JNIjp7bWV0aG9kOiJjb25maWRlbmNlbm9ybSIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVIs''@;'; put 'put ''Z3JlYXRlclRoYW46MCxsZXNzVGhhbjoxfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixncmVhdGVyVGhhbjowfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZToxfV19LCJDT05GSURFTkNFLlQiOnttZXRob2Q6ImNvbmZpZGVuY2V0IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBl''@;'; put 'put ''OmV0Lk5VTUJFUixncmVhdGVyVGhhbjowLGxlc3NUaGFuOjF9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLGdyZWF0ZXJUaGFuOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjF9XX0sU1RBTkRBUkRJWkU6e21ldGhvZDoic3RhbmRhcmRpemUiLHBhcmFtZXRlcnM6W3thcmd1''@;'; put 'put ''bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsZ3JlYXRlclRoYW46MH1dfX0sRm1lLmFsaWFzZXM9e05FR0JJTk9NRElTVDoiTkVHQklOT00uRElTVCIsRVhQT05ESVNUOiJFWFBPTi5ESVNUIixCRVRBRElTVDoiQkVU''@;'; put 'put ''QS5ESVNUIixOT1JNRElTVDoiTk9STS5ESVNUIixOT1JNSU5WOiJOT1JNLklOViIsTk9STVNESVNUOiJOT1JNLlMuRElTVCIsTk9STVNJTlY6Ik5PUk0uUy5JTlYiLExPR05PUk1ESVNUOiJMT0dOT1JNLkRJU1QiLExPR0lOVjoiTE9HTk9STS5JTlYiLFRJTlY6IlQuSU5WLjJUIixIWVBHRU9N''@;'; put 'put ''RElTVDoiSFlQR0VPTS5ESVNUIixQT0lTU09OOiJQT0lTU09OLkRJU1QiLFdFSUJVTEw6IldFSUJVTEwuRElTVCIsRklOVjoiRi5JTlYuUlQiLEZESVNUOiJGLkRJU1QuUlQiLENISURJU1Q6IkNISVNRLkRJU1QuUlQiLENISUlOVjoiQ0hJU1EuSU5WLlJUIixHQU1NQURJU1Q6IkdBTU1BLkRJ''@;'; put 'put ''U1QiLCJHQU1NQUxOLlBSRUNJU0UiOiJHQU1NQUxOIixHQU1NQUlOVjoiR0FNTUEuSU5WIixCRVRBSU5WOiJCRVRBLklOViIsQklOT01ESVNUOiJCSU5PTS5ESVNUIixDT05GSURFTkNFOiJDT05GSURFTkNFLk5PUk0iLENSSVRCSU5PTToiQklOT00uSU5WIixXRUlCVUxMRElTVDoiV0VJQlVM''@;'; put 'put ''TC5ESVNUIixUSU5WMlQ6IlQuSU5WLjJUIixURElTVFJUOiJULkRJU1QuUlQiLFRESVNUMlQ6IlQuRElTVC4yVCIsRklOVlJUOiJGLklOVi5SVCIsRkRJU1RSVDoiRi5ESVNULlJUIixDSElESVNUUlQ6IkNISVNRLkRJU1QuUlQiLENISUlOVlJUOiJDSElTUS5JTlYuUlQiLExPR05PUk1JTlY6''@;'; put 'put ''IkxPR05PUk0uSU5WIixQT0lTU09ORElTVDoiUE9JU1NPTi5ESVNUIn07Y2xhc3MgaFplIGV4dGVuZHMgQnN7ZmFjdChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkZBQ1QiKSxyPT57cj1NYXRoLnRydW5jKHIpO2xldCBpPTE7Zm9yKGxldCBv''@;'; put 'put ''PTE7bzw9cjtvKyspaSo9bztyZXR1cm4gaX0pfWZhY3Rkb3VibGUoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJGQUNURE9VQkxFIikscj0+e2xldCBpPTE7Zm9yKGxldCBvPXI9TWF0aC50cnVuYyhyKTtvPj0xO28tPTIpaSo9bztyZXR1cm4g''@;'; put 'put ''aX0pfWNvbWJpbihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkNPTUJJTiIpLChyLGkpPT5pPnI/bmV3IFB0KHRuLk5VTSxkci5Xcm9uZ09yZGVyKTpmWmUocj1NYXRoLnRydW5jKHIpLGk9TWF0aC50cnVuYyhpKSkpfWNvbWJpbmEoZSx0KXty''@;'; put 'put ''ZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJDT01CSU5BIiksKHIsaSk9PihyPU1hdGgudHJ1bmMocikpKyhpPU1hdGgudHJ1bmMoaSkpLTE+PTEwMzA/bmV3IFB0KHRuLk5VTSxkci5WYWx1ZUxhcmdlKTowPT09ciYmMD09PWk/MTpmWmUocitpLTEsaSkp''@;'; put 'put ''fWdjZChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkdDRCIpLCguLi5yKT0+e2NvbnN0IGk9dGhpcy5hcml0aG1ldGljSGVscGVyLmNvZXJjZU51bWJlcnNDb2VyY2VSYW5nZXNEcm9wTnVsbHMocik7aWYoaSBpbnN0YW5jZW9mIFB0KXJldHVy''@;'; put 'put ''biBpO2xldCBvPTA7Zm9yKGNvbnN0IGEgb2YgaSl7aWYoYTwwKXJldHVybiBuZXcgUHQodG4uTlVNLGRyLlZhbHVlU21hbGwpO289cFplKG8sTWF0aC50cnVuYyhhKSl9cmV0dXJuIG8+TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI/bmV3IFB0KHRuLk5VTSxkci5WYWx1ZUxhcmdlKTpvfSl9bGNt''@;'; put 'put ''KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiTENNIiksKC4uLnIpPT57Y29uc3QgaT10aGlzLmFyaXRobWV0aWNIZWxwZXIuY29lcmNlTnVtYmVyc0NvZXJjZVJhbmdlc0Ryb3BOdWxscyhyKTtpZihpIGluc3RhbmNlb2YgUHQpcmV0dXJuIGk7''@;'; put 'put ''bGV0IG89MTtmb3IoY29uc3QgYSBvZiBpKXtpZihhPDApcmV0dXJuIG5ldyBQdCh0bi5OVU0sZHIuVmFsdWVTbWFsbCk7bz1wbm4obyxNYXRoLnRydW5jKGEpKX1yZXR1cm4gbz5OdW1iZXIuTUFYX1NBRkVfSU5URUdFUj9uZXcgUHQodG4uTlVNLGRyLlZhbHVlTGFyZ2UpOm99KX1tcm91bmQo''@;'; put 'put ''ZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJNUk9VTkQiKSwocixpKT0+MD09PWk/MDpyPjAmJmk8MHx8cjwwJiZpPjA/bmV3IFB0KHRuLk5VTSxkci5EaXN0aW5jdFNpZ25zKTpNYXRoLnJvdW5kKHIvaSkqaSl9bXVsdGlub21pYWwoZSx0KXty''@;'; put 'put ''ZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJNVUxUSU5PTUlBTCIpLCguLi5yKT0+e2xldCBpPTAsbz0xO2ZvcihsZXQgYSBvZiByKXtpZihhPDApcmV0dXJuIG5ldyBQdCh0bi5OVU0sZHIuVmFsdWVTbWFsbCk7YT1NYXRoLnRydW5jKGEpO2ZvcihsZXQg''@;'; put 'put ''bD0xO2w8PWE7bCsrKW8qPShpK2wpL2w7aSs9YX1yZXR1cm4gTWF0aC5yb3VuZChvKX0pfXF1b3RpZW50KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiUVVPVElFTlQiKSwocixpKT0+MD09PWk/bmV3IFB0KHRuLkRJVl9CWV9aRVJPKTpNYXRo''@;'; put 'put ''LnRydW5jKHIvaSkpfXNlcmllc3N1bShlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlNFUklFU1NVTSIpLChyLGksbyxhKT0+e2NvbnN0IGw9dGhpcy5hcml0aG1ldGljSGVscGVyLm1hbnlUb09ubHlOdW1iZXJzRHJvcE51bGxzKGEudmFsdWVz''@;'; put 'put ''RnJvbVRvcExlZnRDb3JuZXIoKSk7aWYobCBpbnN0YW5jZW9mIFB0KXJldHVybiBsO2xldCB1PTA7bC5yZXZlcnNlKCk7Zm9yKGNvbnN0IGcgb2YgbCl1Kj1NYXRoLnBvdyhyLG8pLHUrPWc7cmV0dXJuIHUqTWF0aC5wb3cocixpKX0pfXNpZ24oZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlv''@;'; put 'put ''bihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJTSUdOIikscj0+cj4wPzE6cjwwPy0xOjApfXN1bXgybXkyKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiU1VNWDJNWTIiKSwocixpKT0+e2NvbnN0IG89ci52YWx1ZXNGcm9tVG9wTGVmdENvcm5l''@;'; put 'put ''cigpLGE9aS52YWx1ZXNGcm9tVG9wTGVmdENvcm5lcigpO2lmKG8ubGVuZ3RoIT09YS5sZW5ndGgpcmV0dXJuIG5ldyBQdCh0bi5OQSxkci5FcXVhbExlbmd0aCk7Y29uc3QgbD1vLmxlbmd0aDtsZXQgdT0wO2ZvcihsZXQgZz0wO2c8bDtnKyspe2NvbnN0IEU9b1tnXSxPPWFbZ107aWYoRSBp''@;'; put 'put ''bnN0YW5jZW9mIFB0KXJldHVybiBFO2lmKE8gaW5zdGFuY2VvZiBQdClyZXR1cm4gTzsibnVtYmVyIj09dHlwZW9mIEUmJiJudW1iZXIiPT10eXBlb2YgTyYmKHUrPU1hdGgucG93KEUsMiktTWF0aC5wb3coTywyKSl9cmV0dXJuIHV9KX1zdW14MnB5MihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1''@;'; put 'put ''bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlNVTVgyUFkyIiksKHIsaSk9Pntjb25zdCBvPXIudmFsdWVzRnJvbVRvcExlZnRDb3JuZXIoKSxhPWkudmFsdWVzRnJvbVRvcExlZnRDb3JuZXIoKTtpZihvLmxlbmd0aCE9PWEubGVuZ3RoKXJldHVybiBuZXcgUHQodG4uTkEsZHIuRXF1''@;'; put 'put ''YWxMZW5ndGgpO2NvbnN0IGw9by5sZW5ndGg7bGV0IHU9MDtmb3IobGV0IGc9MDtnPGw7ZysrKXtjb25zdCBFPW9bZ10sTz1hW2ddO2lmKEUgaW5zdGFuY2VvZiBQdClyZXR1cm4gRTtpZihPIGluc3RhbmNlb2YgUHQpcmV0dXJuIE87Im51bWJlciI9PXR5cGVvZiBFJiYibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIE8mJih1Kz1NYXRoLnBvdyhFLDIpK01hdGgucG93KE8sMikpfXJldHVybiB1fSl9c3VteG15MihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlNVTVhNWTIiKSwocixpKT0+e2NvbnN0IG89ci52YWx1ZXNGcm9tVG9wTGVmdENvcm5lcigp''@;'; put 'put ''LGE9aS52YWx1ZXNGcm9tVG9wTGVmdENvcm5lcigpO2lmKG8ubGVuZ3RoIT09YS5sZW5ndGgpcmV0dXJuIG5ldyBQdCh0bi5OQSxkci5FcXVhbExlbmd0aCk7Y29uc3QgbD1vLmxlbmd0aDtsZXQgdT0wO2ZvcihsZXQgZz0wO2c8bDtnKyspe2NvbnN0IEU9b1tnXSxPPWFbZ107aWYoRSBpbnN0''@;'; put 'put ''YW5jZW9mIFB0KXJldHVybiBFO2lmKE8gaW5zdGFuY2VvZiBQdClyZXR1cm4gTzsibnVtYmVyIj09dHlwZW9mIEUmJiJudW1iZXIiPT10eXBlb2YgTyYmKHUrPU1hdGgucG93KEUtTywyKSl9cmV0dXJuIHV9KX19ZnVuY3Rpb24gZlplKG4sZSl7MiplPm4mJihlPW4tZSk7bGV0IHQ9MTtmb3Io''@;'; put 'put ''bGV0IHI9MTtyPD1lO3IrKyl0Kj0obi1lK3IpL3I7cmV0dXJuIE1hdGgucm91bmQodCl9ZnVuY3Rpb24gcFplKG4sZSl7Zm9yKG48ZSYmKFtuLGVdPVtlLG5dKTtlPjA7KVtuLGVdPVtlLG4lZV07cmV0dXJuIG59ZnVuY3Rpb24gcG5uKG4sZSl7cmV0dXJuIDA9PT1ufHwwPT09ZT8wOm4qKGUv''@;'; put 'put ''cFplKG4sZSkpfWhaZS5pbXBsZW1lbnRlZEZ1bmN0aW9ucz17RkFDVDp7bWV0aG9kOiJmYWN0IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixtaW5WYWx1ZTowLG1heFZhbHVlOjE3MH1dfSxGQUNURE9VQkxFOnttZXRob2Q6ImZhY3Rkb3VibGUiLHBhcmFtZXRlcnM6W3th''@;'; put 'put ''cmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjAsbWF4VmFsdWU6Mjg4fV19LENPTUJJTjp7bWV0aG9kOiJjb21iaW4iLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjAsbGVzc1RoYW46MTAzMH0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVIsbWluVmFs''@;'; put 'put ''dWU6MH1dfSxDT01CSU5BOnttZXRob2Q6ImNvbWJpbmEiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSLG1pblZhbHVlOjB9XX0sR0NEOnttZXRob2Q6ImdjZCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpl''@;'; put 'put ''dC5BTll9XSxyZXBlYXRMYXN0QXJnczoxfSxMQ006e21ldGhvZDoibGNtIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LkFOWX1dLHJlcGVhdExhc3RBcmdzOjF9LE1ST1VORDp7bWV0aG9kOiJtcm91bmQiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1l''@;'; put 'put ''bnRUeXBlOmV0Lk5VTUJFUn1dfSxNVUxUSU5PTUlBTDp7bWV0aG9kOiJtdWx0aW5vbWlhbCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9XSxyZXBlYXRMYXN0QXJnczoxLGV4cGFuZFJhbmdlczohMH0sUVVPVElFTlQ6e21ldGhvZDoicXVvdGllbnQiLHBhcmFtZXRlcnM6''@;'; put 'put ''W3thcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn1dfSxTRVJJRVNTVU06e21ldGhvZDoic2VyaWVzc3VtIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9LHthcmd1bWVudFR5cGU6ZXQuTlVN''@;'; put 'put ''QkVSfSx7YXJndW1lbnRUeXBlOmV0LlJBTkdFfV19LFNJR046e21ldGhvZDoic2lnbiIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5OVU1CRVJ9XX0sU1VNWDJNWTI6e21ldGhvZDoic3VteDJteTIiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuUkFOR0V9LHthcmd1bWVudFR5''@;'; put 'put ''cGU6ZXQuUkFOR0V9XX0sU1VNWDJQWTI6e21ldGhvZDoic3VteDJweTIiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuUkFOR0V9LHthcmd1bWVudFR5cGU6ZXQuUkFOR0V9XX0sU1VNWE1ZMjp7bWV0aG9kOiJzdW14bXkyIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlJBTkdF''@;'; put 'put ''fSx7YXJndW1lbnRUeXBlOmV0LlJBTkdFfV19fTtjbGFzcyBnWmUgZXh0ZW5kcyBCc3tjb21wbGV4KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQ09NUExFWCIpLChyLGksbyk9PiJpIiE9PW8mJiJqIiE9PW8/bmV3IFB0KHRuLlZBTFVFLGRy''@;'; put 'put ''LlNob3VsZEJlSW9ySik6TWgoW3IsaV0sbykpfWltYWJzKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiSU1BQlMiKSxiWmUpfWltYWdpbmFyeShlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIklN''@;'; put 'put ''QUdJTkFSWSIpLChbcixpXSk9PmkpfWltcmVhbChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIklNUkVBTCIpLChbcixpXSk9PnIpfWltYXJndW1lbnQoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRh''@;'; put 'put ''KCJJTUFSR1VNRU5UIiksKFtyLGldKT0+MD09PXImJjA9PT1pP25ldyBQdCh0bi5ESVZfQllfWkVSTyk6TWF0aC5hdGFuMihpLHIpKX1pbWNvbmp1Z2F0ZShlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIklNQ09OSlVHQVRFIiksKFtyLGldKT0+''@;'; put 'put ''TWgoW3IsLWldKSl9aW1jb3MoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJJTUNPUyIpLHI9Pk1oKHNLKHIpKSl9aW1jb3NoKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiSU1DT1NIIikscj0+''@;'; put 'put ''TWgodlplKHIpKSl9aW1jb3QoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJJTUNPVCIpLHI9Pk1oKEJDKHNLKHIpLGxLKHIpKSkpfWltY3NjKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiSU1D''@;'; put 'put ''U0MiKSxyPT5NaChCQyhbMSwwXSxsSyhyKSkpKX1pbWNzY2goZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJJTUNTQ0giKSxyPT5NaChCQyhbMSwwXSxfWmUocikpKSl9aW1zZWMoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3Ms''@;'; put 'put ''dCx0aGlzLm1ldGFkYXRhKCJJTVNFQyIpLHI9Pk1oKEJDKFsxLDBdLHNLKHIpKSkpfWltc2VjaChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIklNU0VDSCIpLHI9Pk1oKEJDKFsxLDBdLHZaZShyKSkpKX1pbXNpbihlLHQpe3JldHVybiB0aGlz''@;'; put 'put ''LnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIklNU0lOIikscj0+TWgobEsocikpKX1pbXNpbmgoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJJTVNJTkgiKSxyPT5NaChfWmUocikpKX1pbXRhbihlLHQpe3JldHVybiB0aGlz''@;'; put 'put ''LnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIklNVEFOIikscj0+TWgoQkMobEsociksc0socikpKSl9aW1kaXYoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJJTURJViIpLChyLGkpPT5NaChCQyhyLGkpKSl9aW1wcm9kdWN0''@;'; put 'put ''KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiSU1QUk9EVUNUIiksKC4uLnIpPT57Y29uc3QgaT10aGlzLmFyaXRobWV0aWNIZWxwZXIuY29lcmNlQ29tcGxleEV4YWN0UmFuZ2VzKHIpO2lmKGkgaW5zdGFuY2VvZiBQdClyZXR1cm4gaTtsZXQg''@;'; put 'put ''bz1bMSwwXTtmb3IoY29uc3QgYSBvZiBpKW89bVplKG8sYSk7cmV0dXJuIE1oKG8pfSl9aW1zdW0oZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJJTVNVTSIpLCguLi5yKT0+e2NvbnN0IGk9dGhpcy5hcml0aG1ldGljSGVscGVyLmNvZXJjZUNv''@;'; put 'put ''bXBsZXhFeGFjdFJhbmdlcyhyKTtpZihpIGluc3RhbmNlb2YgUHQpcmV0dXJuIGk7bGV0IG89WzAsMF07Zm9yKGNvbnN0IGEgb2YgaSlvPWdubihvLGEpO3JldHVybiBNaChvKX0pfWltc3ViKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiSU1T''@;'; put 'put ''VUIiKSwocixpKT0+TWgoZnVuY3Rpb24gbW5uKFtuLGVdLFt0LHJdKXtyZXR1cm5bbi10LGUtcl19KHIsaSkpKX1pbWV4cChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIklNRVhQIikscj0+TWgoeVplKHIpKSl9aW1sbihlLHQpe3JldHVybiB0''@;'; put 'put ''aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIklNTE4iKSxyPT5NaChjSyhyKSkpfWltbG9nMTAoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJJTUxPRzEwIikscj0+e2NvbnN0W2ksb109Y0sociksYT1NYXRoLmxvZygx''@;'; put 'put ''MCk7cmV0dXJuIE1oKFtpL2Esby9hXSl9KX1pbWxvZzIoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJJTUxPRzIiKSxyPT57Y29uc3RbaSxvXT1jSyhyKSxhPU1hdGgubG9nKDIpO3JldHVybiBNaChbaS9hLG8vYV0pfSl9aW1wb3dlcihlLHQp''@;'; put 'put ''e3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIklNUE9XRVIiKSwocixpKT0+TWgod1plKHIsaSkpKX1pbXNxcnQoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJJTVNRUlQiKSxyPT5NaCh3WmUociwuNSkp''@;'; put 'put ''KX19ZnVuY3Rpb24gZ25uKFtuLGVdLFt0LHJdKXtyZXR1cm5bbit0LGUrcl19ZnVuY3Rpb24gbVplKFtuLGVdLFt0LHJdKXtyZXR1cm5bbip0LWUqcixuKnIrdCplXX1mdW5jdGlvbiBCQyhbbixlXSxbdCxyXSl7Y29uc3QgaT1NYXRoLnBvdyh0LDIpK01hdGgucG93KHIsMiksW28sYV09bVpl''@;'; put 'put ''KFtuLGVdLFt0LC1yXSk7cmV0dXJuW28vaSxhL2ldfWZ1bmN0aW9uIHNLKFtuLGVdKXtyZXR1cm5bTWF0aC5jb3MobikqTWF0aC5jb3NoKGUpLC1NYXRoLnNpbihuKSpNYXRoLnNpbmgoZSldfWZ1bmN0aW9uIHZaZShbbixlXSl7cmV0dXJuW01hdGguY29zaChuKSpNYXRoLmNvcyhlKSxNYXRo''@;'; put 'put ''LnNpbmgobikqTWF0aC5zaW4oZSldfWZ1bmN0aW9uIGxLKFtuLGVdKXtyZXR1cm5bTWF0aC5zaW4obikqTWF0aC5jb3NoKGUpLE1hdGguY29zKG4pKk1hdGguc2luaChlKV19ZnVuY3Rpb24gX1plKFtuLGVdKXtyZXR1cm5bTWF0aC5zaW5oKG4pKk1hdGguY29zKGUpLE1hdGguY29zaChuKSpN''@;'; put 'put ''YXRoLnNpbihlKV19ZnVuY3Rpb24geVplKFtuLGVdKXtyZXR1cm5bTWF0aC5leHAobikqTWF0aC5jb3MoZSksTWF0aC5leHAobikqTWF0aC5zaW4oZSldfWZ1bmN0aW9uIGJaZShbbixlXSl7cmV0dXJuIE1hdGguc3FydChuKm4rZSplKX1mdW5jdGlvbiBjSyhbbixlXSl7cmV0dXJuW01hdGgu''@;'; put 'put ''bG9nKGJaZShbbixlXSkpLE1hdGguYXRhbjIoZSxuKV19ZnVuY3Rpb24gd1plKG4sZSl7Y29uc3RbdCxyXT1jSyhuKTtyZXR1cm4geVplKFtlKnQsZSpyXSl9Z1plLmltcGxlbWVudGVkRnVuY3Rpb25zPXtDT01QTEVYOnttZXRob2Q6ImNvbXBsZXgiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5''@;'; put 'put ''cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn0se2FyZ3VtZW50VHlwZTpldC5TVFJJTkcsZGVmYXVsdFZhbHVlOiJpIn1dfSxJTUFCUzp7bWV0aG9kOiJpbWFicyIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5DT01QTEVYfV19LElNQUdJTkFSWTp7bWV0aG9kOiJp''@;'; put 'put ''bWFnaW5hcnkiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuQ09NUExFWH1dfSxJTVJFQUw6e21ldGhvZDoiaW1yZWFsIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LkNPTVBMRVh9XX0sSU1BUkdVTUVOVDp7bWV0aG9kOiJpbWFyZ3VtZW50IixwYXJhbWV0ZXJzOlt7YXJndW1l''@;'; put 'put ''bnRUeXBlOmV0LkNPTVBMRVh9XX0sSU1DT05KVUdBVEU6e21ldGhvZDoiaW1jb25qdWdhdGUiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuQ09NUExFWH1dfSxJTUNPUzp7bWV0aG9kOiJpbWNvcyIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5DT01QTEVYfV19LElNQ09TSDp7''@;'; put 'put ''bWV0aG9kOiJpbWNvc2giLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuQ09NUExFWH1dfSxJTUNPVDp7bWV0aG9kOiJpbWNvdCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5DT01QTEVYfV19LElNQ1NDOnttZXRob2Q6ImltY3NjIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBl''@;'; put 'put ''OmV0LkNPTVBMRVh9XX0sSU1DU0NIOnttZXRob2Q6ImltY3NjaCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5DT01QTEVYfV19LElNU0VDOnttZXRob2Q6Imltc2VjIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LkNPTVBMRVh9XX0sSU1TRUNIOnttZXRob2Q6Imltc2VjaCIs''@;'; put 'put ''cGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5DT01QTEVYfV19LElNU0lOOnttZXRob2Q6Imltc2luIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LkNPTVBMRVh9XX0sSU1TSU5IOnttZXRob2Q6Imltc2luaCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5DT01QTEVYfV19''@;'; put 'put ''LElNVEFOOnttZXRob2Q6ImltdGFuIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LkNPTVBMRVh9XX0sSU1ESVY6e21ldGhvZDoiaW1kaXYiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuQ09NUExFWH0se2FyZ3VtZW50VHlwZTpldC5DT01QTEVYfV19LElNUFJPRFVDVDp7bWV0''@;'; put 'put ''aG9kOiJpbXByb2R1Y3QiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuQU5ZfV0scmVwZWF0TGFzdEFyZ3M6MX0sSU1TVU06e21ldGhvZDoiaW1zdW0iLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuQU5ZfV0scmVwZWF0TGFzdEFyZ3M6MX0sSU1TVUI6e21ldGhvZDoiaW1zdWIi''@;'; put 'put ''LHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuQ09NUExFWH0se2FyZ3VtZW50VHlwZTpldC5DT01QTEVYfV19LElNRVhQOnttZXRob2Q6ImltZXhwIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LkNPTVBMRVh9XX0sSU1MTjp7bWV0aG9kOiJpbWxuIixwYXJhbWV0ZXJzOlt7YXJn''@;'; put 'put ''dW1lbnRUeXBlOmV0LkNPTVBMRVh9XX0sSU1MT0cxMDp7bWV0aG9kOiJpbWxvZzEwIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LkNPTVBMRVh9XX0sSU1MT0cyOnttZXRob2Q6ImltbG9nMiIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5DT01QTEVYfV19LElNUE9XRVI6e21l''@;'; put 'put ''dGhvZDoiaW1wb3dlciIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5DT01QTEVYfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUn1dfSxJTVNRUlQ6e21ldGhvZDoiaW1zcXJ0IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LkNPTVBMRVh9XX19O2NsYXNzIFBtZSBleHRlbmRzIEJz''@;'; put 'put ''e2F2ZWRldihlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkFWRURFViIpLCguLi5yKT0+e2NvbnN0IGk9dGhpcy5hcml0aG1ldGljSGVscGVyLmNvZXJjZU51bWJlcnNFeGFjdFJhbmdlcyhyKTtpZihpIGluc3RhbmNlb2YgUHQpcmV0dXJuIGk7''@;'; put 'put ''aWYoMD09PWkubGVuZ3RoKXJldHVybiBuZXcgUHQodG4uRElWX0JZX1pFUk8pO2NvbnN0IG89a20oaSk7cmV0dXJuIGkucmVkdWNlKChhLGwpPT5hK01hdGguYWJzKGwtbyksMCkvaS5sZW5ndGh9KX1kZXZzcShlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0''@;'; put 'put ''YWRhdGEoIkRFVlNRIiksKC4uLnIpPT57Y29uc3QgaT10aGlzLmFyaXRobWV0aWNIZWxwZXIuY29lcmNlTnVtYmVyc0V4YWN0UmFuZ2VzKHIpO3JldHVybiBpIGluc3RhbmNlb2YgUHQ/aTowPT09aS5sZW5ndGg/MDpWQyhpKX0pfWdlb21lYW4oZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlv''@;'; put 'put ''bihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJHRU9NRUFOIiksKC4uLnIpPT57Y29uc3QgaT10aGlzLmFyaXRobWV0aWNIZWxwZXIuY29lcmNlTnVtYmVyc0V4YWN0UmFuZ2VzKHIpO2lmKGkgaW5zdGFuY2VvZiBQdClyZXR1cm4gaTtpZigwPT09aS5sZW5ndGgpcmV0dXJuIG5ldyBQdCh0bi5O''@;'; put 'put ''VU0sZHIuT25lVmFsdWUpO2Zvcihjb25zdCBvIG9mIGkpaWYobzw9MClyZXR1cm4gbmV3IFB0KHRuLk5VTSxkci5WYWx1ZVNtYWxsKTtyZXR1cm4gZnVuY3Rpb24gZm5uKG4pe3JldHVybiBNYXRoLnBvdyhmdW5jdGlvbiBobm4obil7Zm9yKHZhciBlPTEsdD1uLmxlbmd0aDstLXQ+PTA7KWUq''@;'; put 'put ''PW5bdF07cmV0dXJuIGV9KG4pLDEvbi5sZW5ndGgpfShpKX0pfWhhcm1lYW4oZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJIQVJNRUFOIiksKC4uLnIpPT57Y29uc3QgaT10aGlzLmFyaXRobWV0aWNIZWxwZXIuY29lcmNlTnVtYmVyc0V4YWN0''@;'; put 'put ''UmFuZ2VzKHIpO2lmKGkgaW5zdGFuY2VvZiBQdClyZXR1cm4gaTtpZigwPT09aS5sZW5ndGgpcmV0dXJuIG5ldyBQdCh0bi5OVU0sZHIuT25lVmFsdWUpO2Zvcihjb25zdCBvIG9mIGkpaWYobzw9MClyZXR1cm4gbmV3IFB0KHRuLk5VTSxkci5WYWx1ZVNtYWxsKTtyZXR1cm4gaS5sZW5ndGgv''@;'; put 'put ''aS5yZWR1Y2UoKG8sYSk9Pm8rMS9hLDApfSl9Y29ycmVsKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQ09SUkVMIiksKHIsaSk9PntpZihyLm51bWJlck9mRWxlbWVudHMoKSE9PWkubnVtYmVyT2ZFbGVtZW50cygpKXJldHVybiBuZXcgUHQo''@;'; put 'put ''dG4uTkEsZHIuRXF1YWxMZW5ndGgpO2NvbnN0IG89akMocixpKTtyZXR1cm4gbyBpbnN0YW5jZW9mIFB0P286b1swXS5sZW5ndGg8PTE/bmV3IFB0KHRuLkRJVl9CWV9aRVJPLGRyLlR3b1ZhbHVlcyk6ZFplKG9bMF0sb1sxXSl9KX1yc3EoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihl''@;'; put 'put ''LmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJSU1EiKSwocixpKT0+e2lmKHIubnVtYmVyT2ZFbGVtZW50cygpIT09aS5udW1iZXJPZkVsZW1lbnRzKCkpcmV0dXJuIG5ldyBQdCh0bi5OQSxkci5FcXVhbExlbmd0aCk7Y29uc3Qgbz1qQyhyLGkpO3JldHVybiBvIGluc3RhbmNlb2YgUHQ/bzpvWzBd''@;'; put 'put ''Lmxlbmd0aDw9MT9uZXcgUHQodG4uRElWX0JZX1pFUk8sZHIuVHdvVmFsdWVzKTpNYXRoLnBvdyhkWmUob1swXSxvWzFdKSwyKX0pfWNvdmFyaWFuY2VwKGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQ09WQVJJQU5DRS5QIiksKHIsaSk9Pntp''@;'; put 'put ''ZihyLm51bWJlck9mRWxlbWVudHMoKSE9PWkubnVtYmVyT2ZFbGVtZW50cygpKXJldHVybiBuZXcgUHQodG4uTkEsZHIuRXF1YWxMZW5ndGgpO2NvbnN0IG89akMocixpKTtpZihvIGluc3RhbmNlb2YgUHQpcmV0dXJuIG87Y29uc3QgYT1vWzBdLmxlbmd0aDtyZXR1cm4gYTwxP25ldyBQdCh0''@;'; put 'put ''bi5ESVZfQllfWkVSTyxkci5PbmVWYWx1ZSk6MT09PWE/MDpfUChvWzBdLG9bMV0pKihhLTEpL2F9KX1jb3ZhcmlhbmNlcyhlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIkNPVkFSSUFOQ0UuUyIpLChyLGkpPT57aWYoci5udW1iZXJPZkVsZW1l''@;'; put 'put ''bnRzKCkhPT1pLm51bWJlck9mRWxlbWVudHMoKSlyZXR1cm4gbmV3IFB0KHRuLk5BLGRyLkVxdWFsTGVuZ3RoKTtjb25zdCBvPWpDKHIsaSk7cmV0dXJuIG8gaW5zdGFuY2VvZiBQdD9vOm9bMF0ubGVuZ3RoPD0xP25ldyBQdCh0bi5ESVZfQllfWkVSTyxkci5Ud29WYWx1ZXMpOl9QKG9bMF0s''@;'; put 'put ''b1sxXSl9KX16dGVzdChlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlouVEVTVCIpLChyLGksbyk9Pntjb25zdCBhPXRoaXMuYXJpdGhtZXRpY0hlbHBlci5tYW55VG9FeGFjdE51bWJlcnMoci52YWx1ZXNGcm9tVG9wTGVmdENvcm5lcigpKTtp''@;'; put 'put ''ZihhIGluc3RhbmNlb2YgUHQpcmV0dXJuIGE7Y29uc3QgbD1hLmxlbmd0aDtpZih2b2lkIDA9PT1vKXtpZihsPDIpcmV0dXJuIG5ldyBQdCh0bi5ESVZfQllfWkVSTyxkci5Ud29WYWx1ZXMpO289bnkoYSwhMCl9cmV0dXJuIGw8MT9uZXcgUHQodG4uTkEsZHIuT25lVmFsdWUpOjA9PT1vP25l''@;'; put 'put ''dyBQdCh0bi5ESVZfQllfWkVSTyk6MS1YNF9jZGYoKGttKGEpLWkpLyhvL01hdGguc3FydChsKSksMCwxKX0pfWZ0ZXN0KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiRi5URVNUIiksKHIsaSk9Pntjb25zdCBvPXRoaXMuYXJpdGhtZXRpY0hl''@;'; put 'put ''bHBlci5tYW55VG9FeGFjdE51bWJlcnMoci52YWx1ZXNGcm9tVG9wTGVmdENvcm5lcigpKSxhPXRoaXMuYXJpdGhtZXRpY0hlbHBlci5tYW55VG9FeGFjdE51bWJlcnMoaS52YWx1ZXNGcm9tVG9wTGVmdENvcm5lcigpKTtpZihvIGluc3RhbmNlb2YgUHQpcmV0dXJuIG87aWYoYSBpbnN0YW5j''@;'; put 'put ''ZW9mIFB0KXJldHVybiBhO2lmKG8ubGVuZ3RoPD0xfHxhLmxlbmd0aDw9MSlyZXR1cm4gbmV3IFB0KHRuLkRJVl9CWV9aRVJPKTtjb25zdCBsPXZQKG8sITApLHU9dlAoYSwhMCk7aWYoMD09PWx8fDA9PT11KXJldHVybiBuZXcgUHQodG4uRElWX0JZX1pFUk8pO2NvbnN0IEU9cEFfY2RmKGwv''@;'; put 'put ''dSxvLmxlbmd0aC0xLGEubGVuZ3RoLTEpO3JldHVybiAyKk1hdGgubWluKEUsMS1FKX0pfXN0ZXl4KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiU1RFWVgiKSwocixpKT0+e2lmKHIubnVtYmVyT2ZFbGVtZW50cygpIT09aS5udW1iZXJPZkVs''@;'; put 'put ''ZW1lbnRzKCkpcmV0dXJuIG5ldyBQdCh0bi5OQSxkci5FcXVhbExlbmd0aCk7Y29uc3Qgbz1qQyhyLGkpO2lmKG8gaW5zdGFuY2VvZiBQdClyZXR1cm4gbztjb25zdCBhPW9bMF0ubGVuZ3RoO3JldHVybiBhPD0yP25ldyBQdCh0bi5ESVZfQllfWkVSTyxkci5UaHJlZVZhbHVlcyk6TWF0aC5z''@;'; put 'put ''cXJ0KChWQyhvWzBdKS1NYXRoLnBvdyhfUChvWzBdLG9bMV0pKihhLTEpLDIpL1ZDKG9bMV0pKS8oYS0yKSl9KX1zbG9wZShlLHQpe3JldHVybiB0aGlzLnJ1bkZ1bmN0aW9uKGUuYXJncyx0LHRoaXMubWV0YWRhdGEoIlNMT1BFIiksKHIsaSk9PntpZihyLm51bWJlck9mRWxlbWVudHMoKSE9''@;'; put 'put ''PWkubnVtYmVyT2ZFbGVtZW50cygpKXJldHVybiBuZXcgUHQodG4uTkEsZHIuRXF1YWxMZW5ndGgpO2NvbnN0IG89akMocixpKTtpZihvIGluc3RhbmNlb2YgUHQpcmV0dXJuIG87Y29uc3QgYT1vWzBdLmxlbmd0aDtyZXR1cm4gYTw9MT9uZXcgUHQodG4uRElWX0JZX1pFUk8sZHIuVHdvVmFs''@;'; put 'put ''dWVzKTpfUChvWzBdLG9bMV0pKihhLTEpL1ZDKG9bMV0pfSl9Y2hpc3F0ZXN0KGUsdCl7cmV0dXJuIHRoaXMucnVuRnVuY3Rpb24oZS5hcmdzLHQsdGhpcy5tZXRhZGF0YSgiQ0hJU1EuVEVTVCIpLChyLGkpPT57Y29uc3Qgbz1yLmhlaWdodCgpLGE9ci53aWR0aCgpO2lmKGkuaGVpZ2h0KCkh''@;'; put 'put ''PT1vfHxpLndpZHRoKCkhPT1hKXJldHVybiBuZXcgUHQodG4uTkEsZHIuRXF1YWxMZW5ndGgpO2NvbnN0IGw9akMocixpKTtpZihsIGluc3RhbmNlb2YgUHQpcmV0dXJuIGw7aWYobFswXS5sZW5ndGg8PTEpcmV0dXJuIG5ldyBQdCh0bi5ESVZfQllfWkVSTyxkci5Ud29WYWx1ZXMpO2xldCB1''@;'; put 'put ''PTA7Zm9yKGxldCBnPTA7ZzxsWzBdLmxlbmd0aDtnKyspe2lmKDA9PT1sWzFdW2ddKXJldHVybiBuZXcgUHQodG4uRElWX0JZX1pFUk8pO3UrPU1hdGgucG93KGxbMF1bZ10tbFsxXVtnXSwyKS9sWzFdW2ddfXJldHVybiB1PDA/bmV3IFB0KHRuLk5VTSxkci5OYU4pOjEtZkFfY2RmKHUsbz4x''@;'; put 'put ''JiZhPjE/KG8tMSkqKGEtMSk6byphLTEpfSl9dHRlc3QoZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJULlRFU1QiKSwocixpLG8sYSk9Pntjb25zdCBsPXRoaXMuYXJpdGhtZXRpY0hlbHBlci5tYW55VG9FeGFjdE51bWJlcnMoci52YWx1ZXNG''@;'; put 'put ''cm9tVG9wTGVmdENvcm5lcigpKSx1PXRoaXMuYXJpdGhtZXRpY0hlbHBlci5tYW55VG9FeGFjdE51bWJlcnMoaS52YWx1ZXNGcm9tVG9wTGVmdENvcm5lcigpKTtpZihsIGluc3RhbmNlb2YgUHQpcmV0dXJuIGw7aWYodSBpbnN0YW5jZW9mIFB0KXJldHVybiB1O2NvbnN0IGc9bC5sZW5ndGgs''@;'; put 'put ''RT11Lmxlbmd0aDtpZigxPT09YSl7aWYoRSE9PWcpcmV0dXJuIG5ldyBQdCh0bi5OQSxkci5FcXVhbExlbmd0aCk7aWYoZzw9MSlyZXR1cm4gbmV3IFB0KHRuLkRJVl9CWV9aRVJPLGRyLlR3b1ZhbHVlcyk7Y29uc3QgTz1BcnJheShnKTtmb3IobGV0IHZlPTA7dmU8Zzt2ZSsrKU9bdmVdPWxb''@;'; put 'put ''dmVdLXVbdmVdO2NvbnN0IFo9bnkoTywhMCk7aWYoMD09PVopcmV0dXJuIG5ldyBQdCh0bi5ESVZfQllfWkVSTyk7Y29uc3QgZWU9TWF0aC5hYnMoTWF0aC5zcXJ0KGcpKmttKE8pL1opO3JldHVybiBvKigxLUFtX2NkZihlZSxnLTEpKX1pZigyPT09YSl7aWYoZzw9MXx8RTw9MSlyZXR1cm4g''@;'; put 'put ''bmV3IFB0KHRuLkRJVl9CWV9aRVJPLGRyLlR3b1ZhbHVlcyk7Y29uc3QgTz0oVkMobCkrVkModSkpLyhnK0UtMik7aWYoMD09PU8pcmV0dXJuIG5ldyBQdCh0bi5ESVZfQllfWkVSTyk7Y29uc3QgWj1NYXRoLmFicygoa20obCkta20odSkpL01hdGguc3FydChPKigxL2crMS9FKSkpO3JldHVy''@;'; put 'put ''biBvKigxLUFtX2NkZihaLGcrRS0yKSl9e2lmKGc8PTF8fEU8PTEpcmV0dXJuIG5ldyBQdCh0bi5ESVZfQllfWkVSTyxkci5Ud29WYWx1ZXMpO2NvbnN0IE89dlAobCwhMCksWj12UCh1LCEwKTtpZigwPT09TyYmMD09PVopcmV0dXJuIG5ldyBQdCh0bi5ESVZfQllfWkVSTyk7Y29uc3QgZWU9''@;'; put 'put ''TWF0aC5hYnMoKGttKGwpLWttKHUpKS9NYXRoLnNxcnQoTy9nK1ovRSkpLHZlPU1hdGgucG93KE8vZytaL0UsMikvKE1hdGgucG93KE8vZywyKS8oZy0xKStNYXRoLnBvdyhaL0UsMikvKEUtMSkpO3JldHVybiBvKigxLUFtX2NkZihlZSx2ZSkpfX0pfXNrZXcoZSx0KXtyZXR1cm4gdGhpcy5y''@;'; put 'put ''dW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJTS0VXIiksKC4uLnIpPT57Y29uc3QgaT10aGlzLmFyaXRobWV0aWNIZWxwZXIuY29lcmNlTnVtYmVyc0V4YWN0UmFuZ2VzKHIpO2lmKGkgaW5zdGFuY2VvZiBQdClyZXR1cm4gaTtjb25zdCBvPWkubGVuZ3RoO2lmKG88MylyZXR1''@;'; put 'put ''cm4gbmV3IFB0KHRuLkRJVl9CWV9aRVJPLGRyLlRocmVlVmFsdWVzKTtjb25zdCBhPWttKGkpLGw9bnkoaSwhMCk7cmV0dXJuIDA9PT1sP25ldyBQdCh0bi5ESVZfQllfWkVSTyk6aS5yZWR1Y2UoKHUsZyk9PnUrTWF0aC5wb3coKGctYSkvbCwzKSwwKSpvLyhvLTEpLyhvLTIpfSl9c2tld3Ao''@;'; put 'put ''ZSx0KXtyZXR1cm4gdGhpcy5ydW5GdW5jdGlvbihlLmFyZ3MsdCx0aGlzLm1ldGFkYXRhKCJTS0VXLlAiKSwoLi4ucik9Pntjb25zdCBpPXRoaXMuYXJpdGhtZXRpY0hlbHBlci5jb2VyY2VOdW1iZXJzRXhhY3RSYW5nZXMocik7aWYoaSBpbnN0YW5jZW9mIFB0KXJldHVybiBpO2NvbnN0IG89''@;'; put 'put ''aS5sZW5ndGg7aWYobzwzKXJldHVybiBuZXcgUHQodG4uRElWX0JZX1pFUk8sZHIuVGhyZWVWYWx1ZXMpO2NvbnN0IGE9a20oaSksbD1ueShpLCExKTtyZXR1cm4gMD09PWw/bmV3IFB0KHRuLkRJVl9CWV9aRVJPKTppLnJlZHVjZSgodSxnKT0+dStNYXRoLnBvdygoZy1hKS9sLDMpLDApL299''@;'; put 'put ''KX19ZnVuY3Rpb24gakMobixlKXtjb25zdCB0PW4uaXRlcmF0ZVZhbHVlc0Zyb21Ub3BMZWZ0Q29ybmVyKCkscj1lLml0ZXJhdGVWYWx1ZXNGcm9tVG9wTGVmdENvcm5lcigpO2xldCBpLG87Y29uc3QgYT1bXSxsPVtdO2Zvcig7aT10Lm5leHQoKSxvPXIubmV4dCgpLCFpLmRvbmUmJiFvLmRv''@;'; put 'put ''bmU7KXtjb25zdCB1PWkudmFsdWUsZz1vLnZhbHVlO2lmKHUgaW5zdGFuY2VvZiBQdClyZXR1cm4gdTtpZihnIGluc3RhbmNlb2YgUHQpcmV0dXJuIGc7Y2ModSkmJmNjKGcpJiYoYS5wdXNoKExvKHUpKSxsLnB1c2goTG8oZykpKX1yZXR1cm5bYSxsXX1QbWUuaW1wbGVtZW50ZWRGdW5jdGlv''@;'; put 'put ''bnM9e0FWRURFVjp7bWV0aG9kOiJhdmVkZXYiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuQU5ZfV0scmVwZWF0TGFzdEFyZ3M6MX0sREVWU1E6e21ldGhvZDoiZGV2c3EiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuQU5ZfV0scmVwZWF0TGFzdEFyZ3M6MX0sR0VPTUVBTjp7''@;'; put 'put ''bWV0aG9kOiJnZW9tZWFuIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LkFOWX1dLHJlcGVhdExhc3RBcmdzOjF9LEhBUk1FQU46e21ldGhvZDoiaGFybWVhbiIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5BTll9XSxyZXBlYXRMYXN0QXJnczoxfSxDT1JSRUw6e21ldGhvZDoi''@;'; put 'put ''Y29ycmVsIixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlJBTkdFfSx7YXJndW1lbnRUeXBlOmV0LlJBTkdFfV19LFJTUTp7bWV0aG9kOiJyc3EiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuUkFOR0V9LHthcmd1bWVudFR5cGU6ZXQuUkFOR0V9XX0sIkNPVkFSSUFOQ0UuUCI6''@;'; put 'put ''e21ldGhvZDoiY292YXJpYW5jZXAiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuUkFOR0V9LHthcmd1bWVudFR5cGU6ZXQuUkFOR0V9XX0sIkNPVkFSSUFOQ0UuUyI6e21ldGhvZDoiY292YXJpYW5jZXMiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuUkFOR0V9LHthcmd1bWVu''@;'; put 'put ''dFR5cGU6ZXQuUkFOR0V9XX0sIlouVEVTVCI6e21ldGhvZDoienRlc3QiLHBhcmFtZXRlcnM6W3thcmd1bWVudFR5cGU6ZXQuUkFOR0V9LHthcmd1bWVudFR5cGU6ZXQuTlVNQkVSfSx7YXJndW1lbnRUeXBlOmV0Lk5VTUJFUixvcHRpb25hbEFyZzohMH1dfSwiRi5URVNUIjp7bWV0aG9kOiJm''@;'; put 'put ''dGVzdCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5SQU5HRX0se2FyZ3VtZW50VHlwZTpldC5SQU5HRX1dfSxTVEVZWDp7bWV0aG9kOiJzdGV5eCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5SQU5HRX0se2FyZ3VtZW50VHlwZTpldC5SQU5HRX1dfSxTTE9QRTp7bWV0aG9k''@;'; put 'put ''OiJzbG9wZSIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5SQU5HRX0se2FyZ3VtZW50VHlwZTpldC5SQU5HRX1dfSwiQ0hJU1EuVEVTVCI6e21ldGhvZDoiY2hpc3F0ZXN0IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlJBTkdFfSx7YXJndW1lbnRUeXBlOmV0LlJBTkdFfV19''@;'; put 'put ''LCJULlRFU1QiOnttZXRob2Q6InR0ZXN0IixwYXJhbWV0ZXJzOlt7YXJndW1lbnRUeXBlOmV0LlJBTkdFfSx7YXJndW1lbnRUeXBlOmV0LlJBTkdFfSx7YXJndW1lbnRUeXBlOmV0LklOVEVHRVIsbWluVmFsdWU6MSxtYXhWYWx1ZToyfSx7YXJndW1lbnRUeXBlOmV0LklOVEVHRVIsbWluVmFs''@;'; put 'put ''dWU6MSxtYXhWYWx1ZTozfV19LFNLRVc6e21ldGhvZDoic2tldyIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5BTll9XSxyZXBlYXRMYXN0QXJnczoxfSwiU0tFVy5QIjp7bWV0aG9kOiJza2V3cCIscGFyYW1ldGVyczpbe2FyZ3VtZW50VHlwZTpldC5BTll9XSxyZXBlYXRMYXN0QXJn''@;'; put 'put ''czoxfX0sUG1lLmFsaWFzZXM9e0NPVkFSOiJDT1ZBUklBTkNFLlAiLEZURVNUOiJGLlRFU1QiLFBFQVJTT046IkNPUlJFTCIsWlRFU1Q6IlouVEVTVCIsQ0hJVEVTVDoiQ0hJU1EuVEVTVCIsVFRFU1Q6IlQuVEVTVCIsQ09WQVJJQU5DRVA6IkNPVkFSSUFOQ0UuUCIsQ09WQVJJQU5DRVM6IkNP''@;'; put 'put ''VkFSSUFOQ0UuUyIsU0tFV1A6IlNLRVcuUCJ9LGRmLnJlZ2lzdGVyTGFuZ3VhZ2UoaDIuZGVmYXVsdENvbmZpZy5sYW5ndWFnZSxtbWUpLGRmLmxhbmd1YWdlc1ttbWUubGFuZ0NvZGVdPW1tZTtmb3IoY29uc3QgbiBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhZKSluLnN0YXJ0c1dp''@;'; put 'put ''dGgoIl8iKXx8ZGYucmVnaXN0ZXJGdW5jdGlvblBsdWdpbihZW25dKTtmdW5jdGlvbiBDWmUobil7aWYoIW4pcmV0dXJuITE7Y29uc3QgZT1uZXcgVVJMU2VhcmNoUGFyYW1zKG4pLmdldCgibGFiZWxzIik7cmV0dXJuIG51bGwhPT1lJiYiZmFsc2UiIT09ZX1mdW5jdGlvbiBnQShuLGUsdCl7''@;'; put 'put ''aWYoIXQpcmV0dXJuIG47Y29uc3Qgcj1uZXcgTWFwKGUubWFwKGk9PltpLk5BTUUsaS5MQUJFTF0pKTtyZXR1cm4gbi5tYXAoaT0+ci5nZXQoaSl8fGkpfWNvbnN0IHJ5PW49PlN0cmluZyhuPz8iIikucmVwbGFjZSgvWyY8PiInXS9nLGU9Pih7IiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6''@;'; put 'put ''IiZndDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjMzk7In1bZV0pKTtmdW5jdGlvbiBTWmUobixlLHQscixpKXtpZighZSlyZXR1cm4iTm8gaW5mbyBmb3VuZCI7bGV0IG89YE5BTUU6ICR7cnkobil9PGJyPkxBQkVMOiAke3J5KGUubGFiZWwpfTxicj5UWVBFOiAke3J5KGUudHlwZSl9PGJyPkxF''@;'; put 'put ''TkdUSDogJHtyeShlLmxlbmd0aCl9PGJyPkZPUk1BVDogJHtyeShlLmZvcm1hdCl9YDtpZih0P28rPWA8YnI+SEFSRFJFR0VYOiAke3J5KHQpfWA6ciYmKG8rPWA8YnI+U09GVFJFR0VYOiAke3J5KHIpfWApLGkpe2NvbnN0IGE9aS5zdGFydHNXaXRoKCI9Iik/aS5zbGljZSgxKTppO28rPWA8''@;'; put 'put ''YnI+XHUyMjFheD0ke3J5KGEpfWB9cmV0dXJuIG99Y29uc3QgSG1lPW49Pm5ldyBEYXRlKE1hdGgucm91bmQoODY0MDAqKG4tMjU1NjkpKjFlMykpLFZtZT1uPT57Y29uc3R7W01tXTplLC4uLnR9PW47cmV0dXJuIHR9LHVLPShuLGUsdCk9PntpZigiWWVzIj09PW4uX19fX19ERUxFVEVfX1RI''@;'; put 'put ''SVNfX1JFQ09SRF9fX19fKXJldHVybiJEIjtjb25zdCByPWUuZmluZChpPT57Zm9yKGNvbnN0IG8gb2YgdClpZihpW29dIT09bltvXSlyZXR1cm4hMTtyZXR1cm4hMH0pO3JldHVybiByP0pTT04uc3RyaW5naWZ5KFZtZShuKSkhPT1KU09OLnN0cmluZ2lmeShWbWUocikpPyJNIjoiVSI6IkEi''@;'; put 'put ''fSxFWmU9bj0+e2xldCBlPSgiMCIrbi5nZXRVVENIb3VycygpKS5zbGljZSgtMikrIjoiO3JldHVybiBlPWUrKCIwIituLmdldFVUQ01pbnV0ZXMoKSkuc2xpY2UoLTIpKyI6IixlKz0oIjAiK24uZ2V0VVRDU2Vjb25kcygpKS5zbGljZSgtMiksZX0sQm1lPW49Pm4uZ2V0RnVsbFllYXIoKSsi''@;'; put 'put ''LSIrKCIwIisobi5nZXRNb250aCgpKzEpKS5zbGljZSgtMikrIi0iKygiMCIrbi5nZXREYXRlKCkpLnNsaWNlKC0yKSxqbWU9bj0+ISEvXi17MCwxfVxkKyQvLnRlc3QobiksTVplPW49PiEhL15cZCtcLlxkKyQvLnRlc3QobiksVW1lPShuLGUpPT5uZXcgRmlsZShbbl0sZSx7bGFzdE1vZGlm''@;'; put 'put ''aWVkOihuZXcgRGF0ZSkuZ2V0VGltZSgpfSk7dmFyIGkwPWgoNjM1NzgpLFRaZT1oKDk0MjQ4KSxFbm49aCg4MzgzOCk7Y2xhc3MgeFple2NvbnN0cnVjdG9yKGUpe3RoaXMubGljZW5jZVN0YXRlPWUubGljZW5jZVN0YXRlfXBhcnNlU3ByZWFkc2hlZXRGaWxlKGUsdCxyLGkpe3ZhciBvPXRo''@;'; put 'put ''aXM7cmV0dXJuIG5ldyBQcm9taXNlKChhLGwpPT57Y29uc3QgdT1lLnVwbG9hZGVyfHxuZXcgZ2dlO2lmKGUud29ya2Jvb2spdGhpcy5wYXJzZUV4Y2VsRmlsZShlLGUud29ya2Jvb2ssdSxpKS50aGVuKGc9PnthKGcpfSkuY2F0Y2goZz0+e2woZyl9KTtlbHNle2NvbnN0IEU9ZS5maWxlO2Uu''@;'; put 'put ''ZW5jb2Rpbmd8fChlLmVuY29kaW5nPSJVVEYtOCIpLHImJnIoYExvYWRpbmcgJHtFLm5hbWV9IGludG8gdGhlIGJyb3dzZXJgKTtsZXQgTz1FLm5hbWUuc2xpY2UoRS5uYW1lLmxhc3RJbmRleE9mKCIuIikrMSxFLm5hbWUubGFzdEluZGV4T2YoIi4iKSs0KTtpZigieGxzIiE9PU8udG9Mb3dl''@;'; put 'put ''ckNhc2UoKSl7aWYoImNzdiI9PT1PLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMucGFyc2VDc3ZGaWxlKGUsdSxPKS50aGVuKFo9PmEoWikpLmNhdGNoKFo9PmwoWikpO3tsZXQgWj0nSW52YWxpZCBmaWxlIHR5cGUgIjxiPicrZS5maWxlLm5hbWUrJzwvYj4iLiBQbGVhc2UgdXBsb2FkIGNz''@;'; put 'put ''diBvciBleGNlbCBmaWxlLic7cmV0dXJuIHUucXVldWUucG9wKCksbChaKX19e2xldCBaPW5ldyBGaWxlUmVhZGVyO1oub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHZlPUNyKGZ1bmN0aW9uKihNZSl7Y29uc3QgSGU9eWllbGQgby54c2x4U3RhcnRSZWFkaW5nKE1lLHQsZS5wYXNzd29yZCk7aWYo''@;'; put 'put ''IUhlKXJldHVybiBsKCJObyB3b3JrYm9vayBmb3VuZC4iKTtvLnBhcnNlRXhjZWxGaWxlKGUsSGUsdSxpKS50aGVuKFdlPT57YShXZSl9KS5jYXRjaChXZT0+e2woV2UpfSl9KTtyZXR1cm4gZnVuY3Rpb24oTWUpe3JldHVybiB2ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLFoucmVhZEFz''@;'; put 'put ''QXJyYXlCdWZmZXIoRSl9fX0pfXBhcnNlRXhjZWxGaWxlKGUsdCxyLGkpe3JldHVybiBuZXcgUHJvbWlzZSgobyxhKT0+e2xldCBsPSExLHU9W107Y29uc3QgZz1bIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIsLi4uZS5oZWFkZXJBcnJheV0sRT10aGlzLnNlYXJjaERhdGFJbkV4''@;'; put 'put ''Y2VsKHQsZSk7bGV0IE89W107aWYoRS5mb3VuZD8obD0hMCxPPUUuZm91bmQuYXJyYXlEYXRhLEUuZm91bmQuaGVhZGVycy5pbmNsdWRlcygiX19fX19kZWxldGVfX3RoaXNfX3JlY29yZF9fX19fIil8fChPPU8ubWFwKHZlPT4odmUudW5zaGlmdCh7djoiIn0pLHZlKSkpLGkmJmkoYFNoZWV0''@;'; put 'put ''OiAke0UuZm91bmQuc2hlZXROYW1lfVxuUmFuZ2U6ICR7RS5mb3VuZC5zdGFydEFkZHJlc3N9OiR7RS5mb3VuZC5lbmRBZGRyZXNzfWApKTp1PUUubWlzc2luZ3x8W10sdS5sZW5ndGg+MCl7bGV0IHZlPXUubWFwKE1lPT5gU2hlZXQ6ICR7TWUuc2hlZXROYW1lfS5cbk1pc3NpbmcgY29sdW1u''@;'; put 'put ''czogJHtNZS5taXNzaW5nSGVhZGVycy5qb2luKCIsIil9YCkuam9pbigiXG5cbiIpO3JldHVybiByLnF1ZXVlLnBvcCgpLGEodmUpfWlmKDA9PT1PLmxlbmd0aHx8MD09PU9bMF0ubGVuZ3RoKXtsZXQgdmU9Ik5vIHJlbGV2YW50IGRhdGEgZm91bmQgaW4gRmlsZSAhIjtyZXR1cm4gci5xdWV1''@;'; put 'put ''ZS5wb3AoKSxhKHZlKX1pZigoZS5kYXRlVGltZUhlYWRlcnMubGVuZ3RoPjB8fGUuZGF0ZUhlYWRlcnMubGVuZ3RoPjB8fGUudGltZUhlYWRlcnMubGVuZ3RoPjApJiYoTz10aGlzLnVwZGF0ZURhdGVUaW1lQ29scyhnLE8sZSkpLGUueGxSdWxlcy5sZW5ndGg+MCYmKE89dGhpcy51cGRhdGVY''@;'; put 'put ''TFJ1bGVDb2xzKGcsTyxlKSksIWwpe2xldCB2ZT0iIjtyZXR1cm4gdmU9MD09PXUubGVuZ3RoPyJObyByZWxldmFudCBkYXRhIGZvdW5kIGluIEZpbGUgISI6dS5tYXAoTWU9PmBTaGVldDogJHtNZS5zaGVldE5hbWV9LlxuTWlzc2luZyBjb2x1bW5zOiAke01lLm1pc3NpbmdIZWFkZXJzLmpv''@;'; put 'put ''aW4oIiwiKX1gKS5qb2luKCJcblxuIiksci5xdWV1ZS5wb3AoKSxhKHZlKX17ZS5oZWFkZXJTaG93PWcsTz1PLm1hcChDdD0+Q3QubWFwKEF0PT4ibiI9PT1BdC50fHxBdC53P0F0LnY6InN0cmluZyI9PXR5cGVvZiBBdC52P0F0LnYudHJpbSgpOkF0LnYpKSxPPU8ubWFwKEN0PT5DdC5tYXAo''@;'; put 'put ''KEF0LEt0KT0+eyFBdCYmMCE9PUF0JiYoQXQ9IiIpO2NvbnN0IHF0PWUuaGVhZGVyU2hvd1tLdF07cmV0dXJuIm51bWVyaWMiPT09ZS5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShxdCk/LnR5cGUmJigwLHk0LmlzU3BlY2lhbE1pc3NpbmcpKEF0KSYmIUF0LmluY2x1ZGVzKCIuIikmJihBdD0iLiIr''@;'; put 'put ''QXQpLEF0fSkpO2NvbnN0IHZlPU8uc2xpY2UoMCx0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCk7bGV0IFdlLE1lPWkwLnV0aWxzLmpzb25fdG9fc2hlZXQodmUse3NraXBIZWFkZXI6ITB9KSxIZT1pMC51dGlscy5zaGVldF90b19jc3YoTWUpO2lmKEhlPWcuam9p''@;'; put 'put ''bigiLCIpKyJcbiIrSGUsIldMQVRJTjEiPT09ZS5lbmNvZGluZyl7bGV0IEN0PVRaZS5kZWNvZGUoRW5uLkJ1ZmZlci5mcm9tKEhlKSwiQ1AtMTI1MiIpO1dlPW5ldyBCbG9iKFtDdF0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KX1lbHNlIFdlPW5ldyBCbG9iKFtIZV0se3R5cGU6ImFwcGxp''@;'; put 'put ''Y2F0aW9uL2NzdiJ9KTtsZXQgYXQ9VW1lKFdlLGUuZmlsZS5uYW1lKyIuY3N2Iik7ci5hZGRUb1F1ZXVlKFthdF0pfWlmKDA9PT1PLmxlbmd0aClyZXR1cm4gYShgVGFibGUgaW4gdGhlIGZpbGUgaXMgZW1wdHkuIERhdGEgZm91bmQgb24gc2hlZXQ6ICR7RS5mb3VuZD8uc2hlZXROYW1lfHwi''@;'; put 'put ''In1gKTtpZighRS5mb3VuZClyZXR1cm4gYSgiTm8gcmVsZXZhbnQgZGF0YSBmb3VuZC4gJ2ZvdW5kJyBvYmplY3QgaXMgZW1wdHksIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQuIik7Y29uc3QgWj1FLmZvdW5kLnN0YXJ0QWRkcmVzc3x8IiIsZWU9RS5mb3VuZC5lbmRBZGRyZXNzfHwiIjty''@;'; put 'put ''ZXR1cm4gbyh7dXBsb2FkZXI6cixkYXRhOk8scmFuZ2VTaGVldFJlczp7Zm91bmQ6ISFFLmZvdW5kLHNoZWV0TmFtZTpFLmZvdW5kLnNoZWV0TmFtZSxyYW5nZVN0YXJ0QWRkcmVzczpaLHJhbmdlRW5kQWRkcmVzczplZSxyYW5nZUFkZHJlc3M6YCR7Wn06JHtlZX1gLG1pc3NpbmdIZWFkZXJz''@;'; put 'put ''OnV9LGhlYWRlclNob3c6ZS5oZWFkZXJTaG93fSl9KX1wYXJzZUNzdkZpbGUoZSx0LHIpe3JldHVybiBuZXcgUHJvbWlzZSgoaSxvKT0+e2lmKCF0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5maWxlVXBsb2FkKXJldHVybiB0LnF1ZXVlLnBvcCgpLG8oIkZpbGUgdXBsb2FkcyBhcmUgbm90IGVu''@;'; put 'put ''YWJsZWQgZm9yIHRoaXMgbGljZW5jZS4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpO2lmKCJXTEFUSU4xIiE9PWUuZW5jb2RpbmcpcmV0dXJuIGkoe3VwbG9hZGVyOnR9KTtjb25zdCBhPW5ldyBGaWxlUmVhZGVyO2Eub25sb2FkPWw9PntpZighbC50YXJnZXQ/''@;'; put 'put ''LnJlc3VsdClyZXR1cm4gaSh7dXBsb2FkZXI6dH0pO2NvbnN0IGc9VFplLmVuY29kZShsLnRhcmdldC5yZXN1bHQsIkNQLTEyNTIiKSxFPW5ldyBCbG9iKFtnXSx7dHlwZTpyfSksTz1VbWUoRSxlLmZpbGUubmFtZSk7cmV0dXJuIHQucXVldWUucG9wKCksdC5hZGRUb1F1ZXVlKFtPXSksaSh7''@;'; put 'put ''dXBsb2FkZXI6dH0pfSxhLnJlYWRBc1RleHQoZS5maWxlKX0pfWJ5dGVzVG9NQihlKXtyZXR1cm4gcGFyc2VGbG9hdCgoZS8xMDQ4NTc2KS50b0ZpeGVkKDIpKX14c2x4U3RhcnRSZWFkaW5nKGUsdCxyKXt2YXIgaT10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBvPUNy''@;'; put 'put ''KGZ1bmN0aW9uKihhLGwpe2NvbnN0IHU9aS50b0JzdHIoZS50YXJnZXQucmVzdWx0KTtsZXQgZyxFPSExO2NvbnN0IE89e3R5cGU6ImJpbmFyeSIsY2VsbERhdGVzOiExLGNlbGxGb3JtdWxhOiEwLGNlbGxTdHlsZXM6ITAsY2VsbE5GOiExLGNlbGxUZXh0OiExLHBhc3N3b3JkOnJ9O3RyeXtn''@;'; put 'put ''PXlpZWxkIGkueGxzeFJlYWQodSx7Li4uT30pfWNhdGNoKFope2lmKCFaLm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygicGFzc3dvcmQiKSlyZXR1cm4gbCgiRXJyb3IgcmVhZGluZyB0aGUgZmlsZSIpO3tFPSEwO2xldCBlZT0hMTtmb3IoO0U7KXtjb25zdCB2ZT15aWVsZCB0KHtl''@;'; put 'put ''cnJvcjplZX0pO2lmKHZlKXRyeXtnPXlpZWxkIGkueGxzeFJlYWQodSx7Li4uTyxwYXNzd29yZDp2ZX0pLEU9ITEsZWU9ITF9Y2F0Y2goTWUpe2VlPSEwLE1lLm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygicGFzc3dvcmQiKXx8KEU9ITEpfWVsc2UgRT0hMX19fXJldHVybiBnP2Eo''@;'; put 'put ''Zyk6bCgiRmFpbGVkIHRvIHBhcnNlIGEgd29ya2Jvb2siKX0pO3JldHVybiBmdW5jdGlvbihhLGwpe3JldHVybiBvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfXhsc3hSZWFkKGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKChyLGkpPT4odCYmdC5wYXNzd29yZCYmY29uc29sZS5pbmZvKCJO''@;'; put 'put ''b3QgdXNpbmcgd29ya2VyIHRvIHBhcnNlIHRoZSBYTFNYIC0gaGFzIHBhc3N3b3JkIikscihpMC5yZWFkKGUsdCkpKSl9c2VhcmNoRGF0YUluRXhjZWwoZSx0KXtsZXQgcixpLG8sYSxsPSIiLHU9W10sRT1bIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIsLi4udC5oZWFkZXJBcnJh''@;'; put 'put ''eV0ubWFwKFo9PloudG9Mb3dlckNhc2UoKSksTz1FLnJlZHVjZSgoWixlZSk9PihaW2VlXT0tMSxaKSx7fSk7Zm9yKGxldCBaIG9mIGUuU2hlZXROYW1lcyl7cj12b2lkIDAsaT12b2lkIDAsTz1FLnJlZHVjZSgocXQsZ24pPT4ocXRbZ25dPS0xLHF0KSx7fSk7bGV0IGVlPVtdO2w9Wjtjb25z''@;'; put 'put ''dCB2ZT1lLlNoZWV0c1tsXTtpZihPYmplY3Qua2V5cyh2ZSkuZm9yRWFjaChxdD0+e2NvbnN0IGduPXZlW3F0XS52O2lmKGduJiYic3RyaW5nIj09dHlwZW9mIGduKXtjb25zdCBUbj1nbi50cmltKCkudG9Mb3dlckNhc2UoKTtFLmluZGV4T2YoVG4pPi0xJiYoT1tUbl09cXQscnx8KHI9cXQp''@;'; put 'put ''LGk9cXQpfX0pLC0xPT09Ty5fX19fX2RlbGV0ZV9fdGhpc19fcmVjb3JkX19fX18mJmRlbGV0ZSBPLl9fX19fZGVsZXRlX190aGlzX19yZWNvcmRfX19fXyxlZT1PYmplY3Qua2V5cyhPKS5maWx0ZXIocXQ9Pi0xPT09T1txdF0pLGVlLmxlbmd0aD4wKXt1LnB1c2goe3NoZWV0TmFtZTpsLG1p''@;'; put 'put ''c3NpbmdIZWFkZXJzOmVlLm1hcChxdD0+cXQudG9VcHBlckNhc2UoKSl9KTtjb250aW51ZX1jb25zdCBNZT1PYmplY3Qua2V5cyhPKTtsZXQgYXQsSGU9W10sV2U9W107TWUuc29ydCgocXQsZ24pPT57Y29uc3QgVG49dC5oZWFkZXJQa3MuaW5jbHVkZXMocXQpPzE6MDtyZXR1cm4odC5oZWFk''@;'; put 'put ''ZXJQa3MuaW5jbHVkZXMoZ24pPzE6MCktVG59KS5mb3JFYWNoKHF0PT57Y29uc3QgZ249T1txdF0sVG49Z24ubWF0Y2goL1xEKy8pLENuPWduLm1hdGNoKC9cZCsvKSxxcj0oVG4/VG5bMF06LTEpfHwtMSxUcj1wYXJzZUludCgoQ24/Q25bMF06LTEpfHwtMSkrMTtsZXQgcmk9MDtpZihhdClm''@;'; put 'put ''b3IobGV0IGZuPVRyO2ZuPD1hdDtmbisrKXtjb25zdCBBbj12ZVtgJHtxcn0ke2ZufWBdO2lmKHQuaGVhZGVyUGtzLmluY2x1ZGVzKHF0KSYmKHZvaWQgMD09PUFufHx2b2lkIDA9PT1Bbi52KSl7YXQ9Zm47YnJlYWt9SGVbcmldfHxIZS5wdXNoKHt9KSxBbiYmKEhlW3JpXVtxdF09InN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBBbi52P0FuLnYudHJpbSgpOkFuLnYpLFdlW3JpXXx8V2UucHVzaChbXSksV2VbcmldLnB1c2goQW4/P3t2OiIifSkscmkrK31lbHNle2xldCBmbj1Ucjtmb3IoO3ZvaWQgMD09PWF0Oyl7Y29uc3QgeXI9YCR7cXJ9JHtmbn1gLEFuPXZlW3lyXTtpZighQW58fHZvaWQgMD09''@;'; put 'put ''PUFuLnYpe2F0PWZuLTE7YnJlYWt9SGVbcmldfHxIZS5wdXNoKHt9KSxIZVtyaV1bcXRdPSJuIj09PXZlW3lyXS50P3ZlW3lyXS52OnZlW3lyXS53P3ZlW3lyXS53OiJzdHJpbmciPT10eXBlb2YgdmVbeXJdLnY/dmVbeXJdLnYudHJpbSgpOnZlW3lyXS52LFdlW3JpXXx8V2UucHVzaChbXSks''@;'; put 'put ''V2VbcmldLnB1c2goQW4/P3t2OiIifSksZm4rKyxyaSsrfX1pZihyJiZpKXtjb25zdCBmbj1pLm1hdGNoKC9cRCsvKTtvPXIsYT1gJHtmbn0ke2F0fWB9fSk7Y29uc3QgQXQ9W107bGV0IEt0O3JldHVybiBIZS5mb3JFYWNoKChxdCxnbik9PntsZXQgVG49ITE7dC5oZWFkZXJQa3MuZm9yRWFj''@;'; put 'put ''aChDbj0+e3ZvaWQgMD09PXF0W0NuLnRvTG93ZXJDYXNlKCldJiYoVG49ITApfSksVG4mJihBdC5wdXNoKGduKSxLdHx8KEt0PWduKSl9KSxLdD8oSGUuc3BsaWNlKEt0LDEvMCksV2Uuc3BsaWNlKEt0LDEvMCkpOkF0LnNvcnQoKHF0LGduKT0+Z24tcXQpLmZvckVhY2gocXQ9PntIZS5zcGxp''@;'; put 'put ''Y2UocXQsMSksV2Uuc3BsaWNlKHF0LDEpfSksV2UubGVuZ3RoP3tmb3VuZDp7ZGF0YTpIZSxhcnJheURhdGE6V2Usc2hlZXROYW1lOmwsc3RhcnRBZGRyZXNzOm8sZW5kQWRkcmVzczphLGhlYWRlcnM6TWV9fTp7fX1yZXR1cm57bWlzc2luZzp1fX11cGRhdGVEYXRlVGltZUNvbHMoZSx0LHIp''@;'; put 'put ''e2lmKHIuZGF0ZUhlYWRlcnMubGVuZ3RoPjApe2NvbnN0IGk9W107ci5kYXRlSGVhZGVycy5mb3JFYWNoKG89PnstMSE9PWUuaW5kZXhPZihvKSYmaS5wdXNoKGUuaW5kZXhPZihvKSl9KSx0LmZvckVhY2gobz0+e2kuZm9yRWFjaChhPT57Y29uc3QgbD1vW2FdO2lmKGwmJm51bGwhPWwudil7''@;'; put 'put ''aWYoam1lKGwudikpe2NvbnN0IHU9SG1lKE51bWJlcihsLnYpKTtsLnY9dS5nZXRGdWxsWWVhcigpKyItIisoIjAiKyh1LmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSsiLSIrKCIwIit1LmdldERhdGUoKSkuc2xpY2UoLTIpfWVsc2UgaWYobCYmbC52JiYtMT09PWwudi50b1N0cmluZygpLmlu''@;'; put 'put ''ZGV4T2YoIjoiKSl7Y29uc3QgdT1uZXcgRGF0ZShsLnYpOyJJbnZhbGlkIERhdGUiIT09dS50b1VUQ1N0cmluZygpJiYobC52PUJtZSh1KSl9b1thXT1sfX0pfSl9aWYoci50aW1lSGVhZGVycy5sZW5ndGg+MCl7bGV0IGk9W107ci50aW1lSGVhZGVycy5mb3JFYWNoKG89PnstMSE9PWUuaW5k''@;'; put 'put ''ZXhPZihvKSYmaS5wdXNoKGUuaW5kZXhPZihvKSl9KSx0LmZvckVhY2gobz0+e2kuZm9yRWFjaChhPT57Y29uc3QgbD1vW2FdO2lmKGwmJm51bGwhPWwudil7aWYoam1lKGwudil8fE1aZShsLnYpfHwic3RyaW5nIj09dHlwZW9mIGwudiYmbC52LmluY2x1ZGVzKCJFLSIpKXtjb25zdCB1PUht''@;'; put 'put ''ZShOdW1iZXIobC52KSk7bC52PUVaZSh1KX1lbHNlInN0cmluZyI9PXR5cGVvZiBsLnYmJihsLnY9KG49Pntjb25zdCBlPW4ubWF0Y2goL14oXGR7MSwyfSk6KFxkezJ9KSg/OjooXGR7Mn0pKT8kLyk7aWYoIWUpcmV0dXJuIG47Y29uc3RbLHQscixpXT1lO3JldHVybmAke3QucGFkU3RhcnQo''@;'; put 'put ''MiwiMCIpfToke3J9OiR7aT8/IjAwIn1gfSkobC52KSk7b1thXT1sfX0pfSl9aWYoci5kYXRlVGltZUhlYWRlcnMubGVuZ3RoPjApe2xldCBpPVtdO3IuZGF0ZVRpbWVIZWFkZXJzLmZvckVhY2gobz0+ey0xIT09ZS5pbmRleE9mKG8pJiZpLnB1c2goZS5pbmRleE9mKG8pKX0pLHQuZm9yRWFj''@;'; put 'put ''aChvPT57aS5mb3JFYWNoKGE9Pntjb25zdCBsPW9bYV07aWYobCYmbnVsbCE9bC52KXtpZihqbWUobC52KXx8TVplKGwudikpe2NvbnN0IHU9SG1lKE51bWJlcihsLnYpKTtsLnY9Qm1lKHUpKyIgIitFWmUodSl9ZWxzZXtpZigtMT09PWwudi5pbmRleE9mKCIgIikmJi0xIT09bC52LmluZGV4''@;'; put 'put ''T2YoIjoiKSl7bGV0IGc9bC52LnN1YnN0cmluZygwLGwudi5pbmRleE9mKCI6IikpO2c9ZysiICIrbC52LnN1YnN0cmluZyhsLnYuaW5kZXhPZigiOiIpKzEpLGwudj1nfWNvbnN0IHU9bmV3IERhdGUobC52KTsiSW52YWxpZCBEYXRlIiE9PXUudG9VVENTdHJpbmcoKSYmKGwudj1CbWUodSkr''@;'; put 'put ''IiAiKyhuPT57bGV0IGU9KCIwIituLmdldEhvdXJzKCkpLnNsaWNlKC0yKSsiOiI7cmV0dXJuIGU9ZSsoIjAiK24uZ2V0TWludXRlcygpKS5zbGljZSgtMikrIjoiLGUrPSgiMCIrbi5nZXRTZWNvbmRzKCkpLnNsaWNlKC0yKSxlfSkodSkpfW9bYV09bH19KX0pfXJldHVybiB0fXVwZGF0ZVhM''@;'; put 'put ''UnVsZUNvbHMoZSx0LHIpe2lmKHIueGxSdWxlcy5sZW5ndGg+MCl7Y29uc3QgaT1bXTtyLnhsUnVsZXMuZm9yRWFjaChvPT57LTEhPT1lLmluZGV4T2Yoby5YTF9DT0xVTU4pJiYoby5pbmRleD1lLmluZGV4T2Yoby5YTF9DT0xVTU4pLGkucHVzaChvKSl9KSx0LmZvckVhY2gobz0+e2kuZm9y''@;'; put 'put ''RWFjaChhPT57Y29uc3QgbD1vW2EuaW5kZXhdO2wmJigiRk9STVVMQSI9PT1hLlhMX1JVTEUmJiJmImluIGwmJigibiI9PT1sLnQ/bC52PSI9IitsLmY6bC53PSI9IitsLmYpLG9bYS5pbmRleF09bCl9KX0pfXJldHVybiB0fXRvQnN0cihlKXtsZXQgdD1uZXcgVWludDhBcnJheShlKSxyPSIi''@;'; put 'put ''LGk9dC5ieXRlTGVuZ3RoO2ZvcihsZXQgbz0wO288aTtvKyspcis9U3RyaW5nLmZyb21DaGFyQ29kZSh0W29dKTtyZXR1cm4gcn19bGV0IEFaZT0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKHIsaSxvKXt0aGlzLmV4Y2VsUGFzc3dvcmRNb2RhbFNlcnZpY2U9cix0aGlzLmV2ZW50''@;'; put 'put ''U2VydmljZT1pLHRoaXMubGljZW5jZVNlcnZpY2U9byx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLnByb21wdEV4Y2VsUGFzc3dvcmQ9YT0+bmV3IFByb21pc2UoKGwsdSk9Pnt0aGlzLmV4Y2VsUGFzc3dvcmRNb2RhbFNlcnZpY2Uub3Bl''@;'; put 'put ''bihhKS5zdWJzY3JpYmUoZz0+e2woZy5wYXNzd29yZCl9KX0pfXBhcnNlRXhjZWxGaWxlKHIsaSxvKXtyZXR1cm4gbmV3IHhaZSh7bGljZW5jZVN0YXRlOnRoaXMubGljZW5jZVN0YXRlfSkucGFyc2VTcHJlYWRzaGVldEZpbGUocix0aGlzLnByb21wdEV4Y2VsUGFzc3dvcmQsaSxvKX14bHN4''@;'; put 'put ''UmVhZEZpbGUocil7cmV0dXJuIG5ldyBQcm9taXNlKChpLG8pPT57Y29uc3QgYT1uZXcgeFplKHtsaWNlbmNlU3RhdGU6dGhpcy5saWNlbmNlU3RhdGV9KTtsZXQgbD1uZXcgRmlsZVJlYWRlcjtsLm9ubG9hZD11PT57YS54c2x4U3RhcnRSZWFkaW5nKHUsdGhpcy5wcm9tcHRFeGNlbFBhc3N3''@;'; put 'put ''b3JkKS50aGVuKGc9PntpKGcpfSkuY2F0Y2goZz0+e28oZyl9KX0sbC5yZWFkQXNBcnJheUJ1ZmZlcihyKX0pfXBhcnNlRXhjZWxTaGVldE5hbWVzKHIpe3ZhciBpPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgobyxhKT0+e2NvbnN0IGw9bmV3IEZpbGVS''@;'; put 'put ''ZWFkZXI7aWYoIXIpcmV0dXJuIGNvbnNvbGUud2FybigiZmlsZSBpcyBtaXNzaW5nIiksbyh7c2hlZXROYW1lczpbXX0pO2wub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHU9Q3IoZnVuY3Rpb24qKGcpe2lmKCFnPy50YXJnZXQpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJGaWxlIHJlYWRlciBl''@;'; put 'put ''dmVudC50YXJnZXQgaXMgbWlzc2luZyIpO2xldCBFLFosTz0hMTtjb25zdCBlZT1nLnRhcmdldC5yZXN1bHQ7dHJ5e0U9aTAucmVhZChlZSx7Ym9va1NoZWV0czohMCx0eXBlOiJiaW5hcnkifSl9Y2F0Y2godmUpe2lmKCF2ZS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3''@;'; put 'put ''b3JkIikpcmV0dXJuIGEoIkVycm9yIHJlYWRpbmcgdGhlIGZpbGUiKTt7Tz0hMDtsZXQgTWU9ITE7Zm9yKDtPOyl7aWYoWj15aWVsZCBpLnByb21wdEV4Y2VsUGFzc3dvcmQoe2Vycm9yOk1lfSksIVopcmV0dXJuIE89ITEsYSgiTm8gcGFzc3dvcmQgcHJvdmlkZWQiKTt0cnl7RT1pMC5yZWFk''@;'; put 'put ''KGVlLHtib29rU2hlZXRzOiEwLHR5cGU6ImJpbmFyeSIscGFzc3dvcmQ6Wn0pLE89ITEsTWU9ITF9Y2F0Y2goSGUpe01lPSEwLEhlLm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygicGFzc3dvcmQiKXx8KE89ITEpfWlmKCFaKXJldHVybiBhKCJJbnZhbGlkIHBhc3N3b3JkLCBmYWls''@;'; put 'put ''ZWQgdG8gZGVjcnlwdCB0aGUgZmlsZSIpfX19aWYoIUUpcmV0dXJuIGEoIkVycm9yIHBhcnNpbmcgdGhlIHdvcmtib29rIik7dHJ5e3JldHVybiBvKHtzaGVldE5hbWVzOkUuU2hlZXROYW1lcyxwYXNzd29yZDpafSl9Y2F0Y2godmUpe2NvbnNvbGUuZXJyb3IodmUpfX0pO3JldHVybiBmdW5j''@;'; put 'put ''dGlvbihnKXtyZXR1cm4gdS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGwub25lcnJvcj1mdW5jdGlvbih1KXtjb25zb2xlLmxvZyh1KX0sbC5yZWFkQXNCaW5hcnlTdHJpbmcocil9KX0pKCl9Ynl0ZXNUb01CKHIpe3JldHVybiBwYXJzZUZsb2F0KChyLzEwNDg1NzYpLnRvRml4ZWQoMikp''@;'; put 'put ''fXN0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpKG9yKHZUZSksb3IodWQpLG9yKEYyKSl9LHRoaXMuXHUwMjc1cHJvdj1Kbih7dG9rZW46ZSxmYWN0b3J5OmUuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSkpfXJldHVybiBuKCks''@;'; put 'put ''ZX0pKCksTW5uPSgoKT0+e3ZhciBuO2NsYXNzIGV7Y29uc3RydWN0b3IoKXt0aGlzLnJlc3VsdE5hbWU9bnVsbCx0aGlzLnBhcmVudE9yaWdpbj1udWxsLHRoaXMuZmlsdGVyU2lnbmF0dXJlPW51bGwsdGhpcy52aXNpYmxlQ29sdW1ucz1udWxsLHRoaXMuZWFybHlEcmFpbmVkPSExfWlzVHJ1''@;'; put 'put ''c3RlZFNvdXJjZShyKXtyZXR1cm4gd2luZG93LnBhcmVudCE9PXdpbmRvdyYmci5zb3VyY2U9PT13aW5kb3cucGFyZW50fHwhIXIub3JpZ2luJiZyLm9yaWdpbj09PXdpbmRvdy5sb2NhdGlvbi5vcmlnaW59b25EYXRhKHIpe2NvbnN0IGk9bz0+e2lmKCF0aGlzLmlzVHJ1c3RlZFNvdXJjZShv''@;'; put 'put ''KSlyZXR1cm47Y29uc3QgYT10aGlzLnBhcnNlTWVzc2FnZShvKTthJiYodGhpcy5yZXN1bHROYW1lPWEucmVzdWx0TmFtZSxvLm9yaWdpbiYmKHRoaXMucGFyZW50T3JpZ2luPW8ub3JpZ2luKSxyKGEpKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixpLCExKSx0''@;'; put 'put ''aGlzLnJlcGxheUVhcmx5TWVzc2FnZXMociksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixpLCExKX1sYXRlc3RNZXNzYWdlKCl7Y29uc3Qgcj13aW5kb3cuX192YUxhc3RNZXNzYWdlO3JldHVybiByP3RoaXMucGFyc2VEYXRhKHIuZGF0YSk6bnVsbH1yZXBsYXlF''@;'; put 'put ''YXJseU1lc3NhZ2VzKHIpe2lmKHdpbmRvdy5wYXJlbnQ9PT13aW5kb3d8fHRoaXMuZWFybHlEcmFpbmVkKXJldHVybjt0aGlzLmVhcmx5RHJhaW5lZD0hMDtjb25zdCBpPXdpbmRvdy5fX3ZhTGFzdE1lc3NhZ2U7aWYoIWl8fCJzdHJpbmciIT10eXBlb2YgaS5vcmlnaW58fCF0aGlzLmlzVHJ1''@;'; put 'put ''c3RlZEVhcmx5T3JpZ2luKGkub3JpZ2luKSlyZXR1cm47Y29uc3Qgbz10aGlzLnBhcnNlRGF0YShpLmRhdGEpO28mJih0aGlzLnJlc3VsdE5hbWU9by5yZXN1bHROYW1lLHRoaXMucGFyZW50T3JpZ2luPWkub3JpZ2luLHIobykpfWlzVHJ1c3RlZEVhcmx5T3JpZ2luKHIpe2lmKHI9PT13aW5k''@;'; put 'put ''b3cubG9jYXRpb24ub3JpZ2luKXJldHVybiEwO2lmKCFkb2N1bWVudC5yZWZlcnJlcilyZXR1cm4hMTt0cnl7cmV0dXJuIG5ldyBVUkwoZG9jdW1lbnQucmVmZXJyZXIpLm9yaWdpbj09PXJ9Y2F0Y2h7cmV0dXJuITF9fXBhcnNlTWVzc2FnZShyKXtyZXR1cm4gdGhpcy5wYXJzZURhdGEociYm''@;'; put 'put ''ci5kYXRhKX1wYXJzZURhdGEocil7cmV0dXJuIHImJiJvYmplY3QiPT10eXBlb2YgciYmInN0cmluZyI9PXR5cGVvZiByLnJlc3VsdE5hbWUmJkFycmF5LmlzQXJyYXkoci5jb2x1bW5zKSYmQXJyYXkuaXNBcnJheShyLmRhdGEpP3t2ZXJzaW9uOnIudmVyc2lvbixyZXN1bHROYW1lOnIucmVz''@;'; put 'put ''dWx0TmFtZSxyb3dDb3VudDpyLnJvd0NvdW50LGF2YWlsYWJsZVJvd0NvdW50OnIuYXZhaWxhYmxlUm93Q291bnQsZGF0YTpyLmRhdGEsY29sdW1uczpyLmNvbHVtbnMscGFyYW1ldGVyczpBcnJheS5pc0FycmF5KHIucGFyYW1ldGVycyk/ci5wYXJhbWV0ZXJzOltdfTpudWxsfWRhdGFDb2x1''@;'; put 'put ''bW5zKHIpe3JldHVybiByLmNvbHVtbnMubWFwKChpLG8pPT4oe2NvbHVtbjppLGluZGV4Om99KSkuZmlsdGVyKCh7Y29sdW1uOml9KT0+ImJydXNoIiE9PWkudXNhZ2UpfXNlbmRTZWxlY3Rpb24ocil7bnVsbCE9PXRoaXMucmVzdWx0TmFtZSYmdGhpcy5zZW5kTWVzc2FnZSh7cmVzdWx0TmFt''@;'; put 'put ''ZTp0aGlzLnJlc3VsdE5hbWUsc2VsZWN0aW9uczpyLm1hcChpPT4oe3JvdzppfSkpfSl9c2VuZEluc3RydWN0aW9uYWxNZXNzYWdlKHIpe251bGwhPT10aGlzLnJlc3VsdE5hbWUmJnRoaXMuc2VuZE1lc3NhZ2Uoe3Jlc3VsdE5hbWU6dGhpcy5yZXN1bHROYW1lLG1lc3NhZ2U6cn0pfXNlbmRN''@;'; put 'put ''ZXNzYWdlKHIpe2NvbnN0IGk9dGhpcy5wYXJlbnRPcmlnaW58fCh3aW5kb3cubG9jYXRpb24hPT13aW5kb3cucGFyZW50LmxvY2F0aW9uP2RvY3VtZW50LnJlZmVycmVyOmRvY3VtZW50LmxvY2F0aW9uLmhyZWYpO2kmJndpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UocixpKX1zdGF0aWMjZT1u''@;'; put 'put ''PSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKX0sdGhpcy5cdTAyNzVwcm92PUpuKHt0b2tlbjplLGZhY3Rvcnk6ZS5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSl9cmV0dXJuIG4oKSxlfSkoKSxUbm49KCgpPT57dmFyIG47Y2xhc3MgZXtjb25z''@;'; put 'put ''dHJ1Y3RvcihyKXt0aGlzLmhlbHBlclNlcnZpY2U9cn1idWlsZExhYmVsVG9WYXJNYXAocixpKXtjb25zdCBvPW5ldyBNYXA7Zm9yKGxldCBhPTE7YTxyLmxlbmd0aDthKyspe2NvbnN0IGw9clthXT8uZGF0YTtsJiYoby5zZXQoKGlbYV0/P2wpLnRvU3RyaW5nKCkudHJpbSgpLnRvTG93ZXJD''@;'; put 'put ''YXNlKCksbCksby5zZXQobC50b1N0cmluZygpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGwpKX1yZXR1cm4gb31idWlsZENsYXVzZXMocixpLG8pe2NvbnN0IGE9W107Zm9yKGNvbnN0IGwgb2Ygci5wYXJhbWV0ZXJzfHxbXSl7aWYoIWx8fG51bGw9PWwudmFsdWUpY29udGludWU7Y29uc3QgdT0o''@;'; put 'put ''bC5sYWJlbD8/bC5uYW1lPz8iIikudG9TdHJpbmcoKS50cmltKCkudG9Mb3dlckNhc2UoKSxnPWkuZ2V0KHUpO2lmKCFnKWNvbnRpbnVlO2NvbnN0IEU9dGhpcy5maW5kQ29sKGcsbyksTz10aGlzLmNvbHVtbktpbmQoRSksWj10aGlzLmRhdGVPcmRlckZyb21GbXQoRT8uRk1UTkFNRXx8RT8u''@;'; put 'put ''Rk9STUFUKSx2ZT0oQXJyYXkuaXNBcnJheShsLnZhbHVlKT9sLnZhbHVlOltsLnZhbHVlXSkuZmlsdGVyKE1lPT5udWxsIT1NZSYmIiIhPT1NZSkubWFwKE1lPT50aGlzLmZvcm1hdFZhbHVlQnlLaW5kKE1lLE8sWikpLmZpbHRlcihNZT0+bnVsbCE9PU1lKTswIT09dmUubGVuZ3RoJiZhLnB1''@;'; put 'put ''c2godGhpcy5jbGF1c2UoZyx2ZSkpfXJldHVybiBhfWJ1aWxkSW5pdGlhbENsYXVzZXMocil7Y29uc3QgaT1bXTtmb3IoY29uc3QgbyBvZiByLnBhcmFtZXRlcnN8fFtdKXtpZighb3x8bnVsbD09by52YWx1ZSljb250aW51ZTtjb25zdCBhPShvLmxhYmVsPz9vLm5hbWU/PyIiKS50b1N0cmlu''@;'; put 'put ''ZygpLnRyaW0oKTtpZighYSljb250aW51ZTtjb25zdCB1PShBcnJheS5pc0FycmF5KG8udmFsdWUpP28udmFsdWU6W28udmFsdWVdKS5maWx0ZXIoRT0+bnVsbCE9RSYmIiIhPT1FKTtpZigwPT09dS5sZW5ndGgpY29udGludWU7Y29uc3QgZz11Lm1hcChFPT50aGlzLmZvcm1hdFZhbHVlQnlL''@;'; put 'put ''aW5kKEUsdGhpcy5pbmZlcktpbmRGcm9tVmFsdWUoU3RyaW5nKEUpLnRyaW0oKSxvLmRhdGFUeXBlKSkpLmZpbHRlcihFPT5udWxsIT09RSk7MCE9PWcubGVuZ3RoJiZpLnB1c2godGhpcy5jbGF1c2UoYSxnKSl9cmV0dXJuIGl9c2lnbmF0dXJlKHIpe3JldHVybiBKU09OLnN0cmluZ2lmeShy''@;'; put 'put ''Lm1hcChpPT4oey4uLmksVkFSSUFCTEVfTk06KGkuVkFSSUFCTEVfTk0/PyIiKS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCl9KSkpfWNsYXVzZShyLGkpe3JldHVybntHUk9VUF9MT0dJQzoiQU5EIixTVUJHUk9VUF9MT0dJQzoiQU5EIixTVUJHUk9VUF9JRDowLFZBUklBQkxFX05NOnIsT1BF''@;'; put 'put ''UkFUT1JfTk06MT09PWkubGVuZ3RoPyI9IjoiSU4iLFJBV19WQUxVRToxPT09aS5sZW5ndGg/aVswXTpgKCR7aS5qb2luKCIsIil9KWB9fWZpbmRDb2wocixpKXtyZXR1cm4oaXx8W10pLmZpbmQobz0+KG8/Lk5BTUU/PyIiKS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCk9PT1yLnRvVXBwZXJD''@;'; put 'put ''YXNlKCkpfWNvbHVtbktpbmQocil7Y29uc3QgaT0ocj8uRERUWVBFPz8iIikudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpO3JldHVybiBpLmluY2x1ZGVzKCJEQVRFVElNRSIpPyJkYXRldGltZSI6aS5pbmNsdWRlcygiREFURSIpPyJkYXRlIjppLmluY2x1ZGVzKCJUSU1FIik/InRpbWUiOiJO''@;'; put 'put ''Ij09PWl8fGkuaW5jbHVkZXMoIk5VTUVSSUMiKXx8Im51bSI9PT0ocj8uVFlQRT8/IiIpPyJudW1lcmljIjoiY2hhciJ9ZGF0ZU9yZGVyRnJvbUZtdChyKXtjb25zdCBpPShyPz8iIikudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpO3JldHVybi9eTU1ERFlZLy50ZXN0KGkpPyJNRFkiOi9eKERE''@;'; put 'put ''TU1ZWXxFVVJERikvLnRlc3QoaSk/IkRNWSI6L14oWVlNTUREfEU4NjAxREF8Qjg2MDFEQSkvLnRlc3QoaSk/IllNRCI6dm9pZCAwfWluZmVyS2luZEZyb21WYWx1ZShyLGkpe2NvbnN0IHU9YCR7U3RyaW5nLnJhd2BcZHsxLDJ9W0EtWmEtel17M31cZHsyLDR9YH18JHtTdHJpbmcucmF3YFxk''@;'; put 'put ''ezR9Wy0vLl1cZHsxLDJ9Wy0vLl1cZHsxLDJ9YH18JHtTdHJpbmcucmF3YFxkezEsMn1bLS8uXVxkezEsMn1bLS8uXVxkezR9YH1gO3JldHVybiBuZXcgUmVnRXhwKGBeKD86JHt1fSlbIFQ6XVxcZHsxLDJ9OlxcZHsyfSg6XFxkezJ9KT8kYCkudGVzdChyKT8iZGF0ZXRpbWUiOm5ldyBSZWdF''@;'; put 'put ''eHAoYF4oPzoke3V9KSRgKS50ZXN0KHIpPyJkYXRlIjovXlxkezEsMn06XGR7Mn0oOlxkezJ9KT8oXC5cZCspPyQvLnRlc3Qocik/InRpbWUiOiJudW1iZXIiPT09aT8ibnVtZXJpYyI6ImNoYXIifWZvcm1hdFZhbHVlQnlLaW5kKHIsaSxvKXtjb25zdCBhPVN0cmluZyhyKS50cmltKCk7aWYo''@;'; put 'put ''IiI9PT1hKXJldHVybiBudWxsO3N3aXRjaChpKXtjYXNlIm51bWVyaWMiOntjb25zdCBsPU51bWJlcihhKTtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKGwpP2Ake2x9YDpudWxsfWNhc2UidGltZSI6e2lmKHRoaXMuaXNCYXJlTnVtYmVyKGEpKXJldHVybmAke051bWJlcihhKX1gO2NvbnN0IGw9''@;'; put 'put ''dGhpcy50aW1lVG9TZWNvbmRzKGEpO3JldHVybiBudWxsPT09bD9udWxsOmAke2x9YH1jYXNlImRhdGUiOntpZih0aGlzLmlzQmFyZU51bWJlcihhKSlyZXR1cm5gJHtOdW1iZXIoYSl9YDtjb25zdCBsPXRoaXMucGFyc2VEYXRlKGEsbyk7cmV0dXJuIGw/YCR7dGhpcy5oZWxwZXJTZXJ2aWNl''@;'; put 'put ''LmNvbnZlcnRKc0RhdGVUb1Nhc0RhdGUobCwiZGF5cyIpfWA6bnVsbH1jYXNlImRhdGV0aW1lIjp7aWYodGhpcy5pc0JhcmVOdW1iZXIoYSkpcmV0dXJuYCR7TnVtYmVyKGEpfWA7Y29uc3QgbD10aGlzLnBhcnNlRGF0ZXRpbWUoYSxvKTtyZXR1cm4gbD9gJHt0aGlzLmhlbHBlclNlcnZpY2Uu''@;'; put 'put ''Y29udmVydEpzRGF0ZVRvU2FzRGF0ZShsLCJzZWNvbmRzIil9YDpudWxsfWRlZmF1bHQ6cmV0dXJuYCcke2EucmVwbGFjZSgvJy9nLCInJyIpfSdgfX10aW1lVG9TZWNvbmRzKHIpe2lmKCEvXlxkezEsMn06XGR7Mn0oOlxkezJ9KT8oXC5cZCspPyQvLnRlc3QocikpcmV0dXJuIG51bGw7Y29u''@;'; put 'put ''c3QgaT1yLnNwbGl0KCIuIilbMF0uc3BsaXQoIjoiKSxvPU51bWJlcihpWzBdKSxhPU51bWJlcihpWzFdKSxsPTM9PT1pLmxlbmd0aD9OdW1iZXIoaVsyXSk6MDtyZXR1cm5bbyxhLGxdLmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSk/MzYwMCpvKzYwKmErbDpudWxsfXBhcnNlRGF0ZShyLGkpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnBhcnNlTW9udGhOYW1lRGF0ZShyKT8/dGhpcy5wYXJzZU51bWVyaWNEYXRlKHIsaSl9cGFyc2VNb250aE5hbWVEYXRlKHIpe2NvbnN0IGk9L14oXGR7MSwyfSkoW0EtWmEtel17M30pKFxkezJ9fFxkezR9KSQvLmV4ZWMocik7aWYoIWkpcmV0dXJuIG51bGw7Y29uc3RbLG8s''@;'; put 'put ''YSxsXT1pLHU9ZS5TQVNfTU9OVEhTLmluZGV4T2YoYS50b1VwcGVyQ2FzZSgpKTtyZXR1cm4gdTwwP251bGw6dGhpcy5idWlsZERhdGUodGhpcy5mdWxsWWVhcihsKSx1KzEsTnVtYmVyKG8pKX1wYXJzZU51bWVyaWNEYXRlKHIsaSl7Y29uc3Qgbz0vXihcZHsxLDR9KVstLy5dKFxkezEsMn0p''@;'; put 'put ''Wy0vLl0oXGR7MSw0fSkkLy5leGVjKHIpO2lmKCFvKXJldHVybiBudWxsO2NvbnN0WyxhLGwsdV09byxFPTQ9PT11Lmxlbmd0aDtpZig0PT09YS5sZW5ndGgpcmV0dXJuIHRoaXMuYnVpbGREYXRlKE51bWJlcihhKSxOdW1iZXIobCksTnVtYmVyKHUpKTtpZighRSlyZXR1cm4gbnVsbDtjb25z''@;'; put 'put ''dHtkYXk6Tyxtb250aDpafT10aGlzLnJlc29sdmVEYXlNb250aChOdW1iZXIoYSksTnVtYmVyKGwpLGkpO3JldHVybiB0aGlzLmJ1aWxkRGF0ZShOdW1iZXIodSksWixPKX1yZXNvbHZlRGF5TW9udGgocixpLG8pe3JldHVybiByPjEyJiZpPD0xMj97ZGF5OnIsbW9udGg6aX06aT4xMiYmcjw9''@;'; put 'put ''MTJ8fCJNRFkiPT09bz97ZGF5OmksbW9udGg6cn06e2RheTpyLG1vbnRoOml9fWJ1aWxkRGF0ZShyLGksbyxhPTAsbD0wLHU9MCl7aWYoaTwxfHxpPjEyfHxvPDF8fG8+MzEpcmV0dXJuIG51bGw7Y29uc3QgZz1uZXcgRGF0ZShyLGktMSxvLGEsbCx1LDApO3JldHVybiBnLmdldEZ1bGxZZWFy''@;'; put 'put ''KCkhPT1yfHxnLmdldE1vbnRoKCkhPT1pLTF8fGcuZ2V0RGF0ZSgpIT09bz9udWxsOmd9cGFyc2VEYXRldGltZShyLGkpe2NvbnN0IG89L14oLis/KVsgVDpdKFxkezEsMn06XGR7Mn0oPzo6XGR7Mn0pPykkLy5leGVjKHIpO2lmKCFvKXJldHVybiBudWxsO2NvbnN0IGE9dGhpcy5wYXJzZURh''@;'; put 'put ''dGUob1sxXSxpKTtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBsPW9bMl0uc3BsaXQoIjoiKTtyZXR1cm4gYS5zZXRIb3VycyhOdW1iZXIobFswXSksTnVtYmVyKGxbMV0pLE51bWJlcihsWzJdfHwwKSwwKSxhfWlzQmFyZU51bWJlcihyKXtyZXR1cm4vXi0/XGQrKFwuXGQrKT8kLy50ZXN0KHIp''@;'; put 'put ''JiZOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKHIpKX1mdWxsWWVhcihyKXtpZig0PT09ci5sZW5ndGgpcmV0dXJuIE51bWJlcihyKTtjb25zdCBpPU51bWJlcihyKTtyZXR1cm4gaTw9MTk/MmUzK2k6MTkwMCtpfXN0YXRpYyNlPW49KCk9Pih0aGlzLlNBU19NT05USFM9WyJKQU4iLCJGRUIiLCJN''@;'; put 'put ''QVIiLCJBUFIiLCJNQVkiLCJKVU4iLCJKVUwiLCJBVUciLCJTRVAiLCJPQ1QiLCJOT1YiLCJERUMiXSx0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpKG9yKGZoKSl9LHRoaXMuXHUwMjc1cHJvdj1Kbih7dG9rZW46ZSxmYWN0b3J5OmUuXHUwMjc1ZmFjLHByb3Zp''@;'; put 'put ''ZGVkSW46InJvb3QifSkpfXJldHVybiBuKCksZX0pKCk7Y29uc3QgZEs9dm9pZCAwLEFubj1bImVuLUdCIixbWyJhIiwicCJdLFsiYW0iLCJwbSJdXSxbWyJhbSIsInBtIl1dLFtbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZy''@;'; put 'put ''aSIsIlNhdCJdLFsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl1dLGRLLFtbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8i''@;'; put 'put ''LCJOIiwiRCJdLFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwdCIsIk9jdCIsIk5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwi''@;'; put 'put ''T2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXV0sZEssW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdXSwxLFs2LDBdLFsiZGQvTU0veSIsImQgTU1NIHkiLCJkIE1NTU0geSIsIkVFRUUsIGQgTU1NTSB5Il0sWyJISDptbSIsIkhIOm1t''@;'; put 'put ''OnNzIiwiSEg6bW06c3MgeiIsIkhIOm1tOnNzIHp6enoiXSxbInsxfSwgezB9IixkSywiezF9ICdhdCcgezB9IixkS10sWyIuIiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwiXHhkNyIsIlx1MjAzMCIsIlx1MjIxZSIsIk5hTiIsIjoiXSxbIiMsIyMwLiMjIyIsIiMsIyMwJSIsIlx4YTQjLCMj''@;'; put 'put ''MC4wMCIsIiNFMCJdLCJHQlAiLCJceGEzIiwiQnJpdGlzaCBQb3VuZCIse0pQWTpbIkpQXHhhNSIsIlx4YTUiXSxVU0Q6WyJVUyQiLCIkIl19LCJsdHIiLGZ1bmN0aW9uIHhubihuKXtjb25zdCB0PU1hdGguZmxvb3IoTWF0aC5hYnMobikpLHI9bi50b1N0cmluZygpLnJlcGxhY2UoL15bXi5d''@;'; put 'put ''KlwuPy8sIiIpLmxlbmd0aDtyZXR1cm4gMT09PXQmJjA9PT1yPzE6NX1dLGhLPShuLGUpPT5lP2B2aWV3Ym94ZXMuJHtlfWA6ImhvbWUiPT09bnx8ImVkaXRvciI9PT1uPyJlZGl0b3IiOiJ2aWV3Ij09PW4/InZpZXdlciI6IiIsa25uPVsiaW5wdXQiXSxSbm49WyIqIl0sSW5uPShuLGUpPT4o''@;'; put 'put ''eyJ3aWR0aC5weCI6biwibWF4LWhlaWdodC5weCI6ZX0pO2Z1bmN0aW9uIERubihuLGUpe2lmKDEmbiYmKEooMCwib3B0aW9uIiw2KSxTZSgxKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSgpLFNyKCIgIix0LmxvYWRpbmdNb3JlPyJMb2FkaW5nLi4uIjoiTE9BRCBNT1JFIiwiICIpfX1s''@;'; put 'put ''ZXQga1plPSgoKT0+e3ZhciBuO2NsYXNzIGV7Y29uc3RydWN0b3Iocil7dGhpcy5jZHI9cix0aGlzLmlucHV0SWQ9IiIsdGhpcy5wbGFjZWhvbGRlcj0iIix0aGlzLnZhbHVlPSIiLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy50eXBlPSJ0ZXh0Iix0aGlzLmF1dG9jb21wbGV0ZT0ib2ZmIix0aGlz''@;'; put 'put ''LnRhYmluZGV4PSIiLHRoaXMuZW1pdE9ubHlTZWxlY3RlZD0hMSx0aGlzLmVuYWJsZUxvYWRNb3JlPSExLHRoaXMub25JbnB1dEtleWRvd249bmV3IEtyLHRoaXMub25JbnB1dENoYW5nZT1uZXcgS3IsdGhpcy52YWx1ZUNoYW5nZT1uZXcgS3IsdGhpcy5vbkxvYWRpbmdNb3JlPW5ldyBLcix0''@;'; put 'put ''aGlzLmRhdGFsaXN0T3Blbj0hMSx0aGlzLmFmdGVyT3BlbkxvY2tEZWxheT0xNTAsdGhpcy5hZnRlck9wZW5Mb2NrPSExLHRoaXMuaW5wdXRGb2N1c2VkPSExLHRoaXMuaW5wdXRDbGllbnRSZWN0PXt9LHRoaXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITEsdGhpcy5sb2FkaW5nTW9yZT0hMX1u''@;'; put 'put ''Z09uSW5pdCgpe31uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl9LDUwMCl9b25JbnB1dEZpcmVkKHIsaSxvKXt0aGlzLm9wZW5EYXRhbGlzdCgiY2xpY2siIT09byksdGhpcy51bnNlbGVjdEFsbE9wdGlvbnMoKSx0aGlzLmZp''@;'; put 'put ''bHRlck9wdGlvbnNMaXN0KCksKCF0aGlzLmVtaXRPbmx5U2VsZWN0ZWR8fGkpJiYodGhpcy5vbklucHV0Q2hhbmdlLmVtaXQoe3RhcmdldDp7dmFsdWU6dGhpcy52YWx1ZX19KSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSkpfW9uSW5wdXRDbGljayhyKXt0aGlzLm9wZW5EYXRh''@;'; put 'put ''bGlzdCgpfW9wZW5EYXRhbGlzdChyPSEwKXt0aGlzLmRhdGFsaXN0T3Blbj0hMCxyJiYodGhpcy5hZnRlck9wZW5Mb2NrPSEwLHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5VGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5hZnRlck9wZW5Mb2NrPSExfSx0aGlzLmFmdGVyT3BlbkxvY2tEZWxh''@;'; put 'put ''eSkpfWNsb3NlRGF0YWxpc3QoKXtjbGVhclRpbWVvdXQodGhpcy5hZnRlck9wZW5Mb2NrRGVsYXlUaW1lb3V0KSx0aGlzLmFmdGVyT3BlbkxvY2s9ITEsdGhpcy5kYXRhbGlzdE9wZW49ITF9cmVzZXREYXRhbGlzdEZpbHRlcigpe3RoaXMuZmlsdGVyT3B0aW9uc0xpc3QoITApfW9uSW5wdXRG''@;'; put 'put ''b2N1c2luKHIpe3RoaXMuaW5wdXRGb2N1c2VkPSEwfW9uSW5wdXRGb2N1c291dChyKXt0aGlzLmlucHV0Rm9jdXNlZD0hMSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpfW9uSW5wdXRNb3VzZWVudGVyKHIpe3RoaXMuaW5wdXRDbGllbnRSZWN0LndpZHRofHx0aGlzLmNhbGN1bGF0ZUlucHV0''@;'; put 'put ''UG9zaXRpb24oKX1maWx0ZXJPcHRpb25zTGlzdChyKXtjb25zdCBpPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uYCk7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspe2NvbnN0IGE9aVtvXTtpZigwPT09dGhpcy52YWx1ZS5sZW5n''@;'; put 'put ''dGgpe2EuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7Y29udGludWV9aWYocil7YS5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTtjb250aW51ZX1jb25zdCBsPWEuaW5uZXJUZXh0fHwiIix1PWEudmFsdWV8fCIiOyhsK3UpPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudmFsdWUu''@;'; put 'put ''dG9Mb3dlckNhc2UoKSk/YS5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTphLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfX1zZXRUb0Nsb3NlRGF0YWxpc3QoKXt0aGlzLmRhdGFsaXN0Q2xvc2VUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlfHx0aGlz''@;'; put 'put ''LmFmdGVyT3BlbkxvY2t8fCh0aGlzLmNsb3NlRGF0YWxpc3QoKSx0aGlzLnVuc2VsZWN0QWxsT3B0aW9ucygpLHRoaXMucmVzZXREYXRhbGlzdEZpbHRlcigpKX0sMTAwKX1jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl7Y29uc3QgaT10aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50Py5n''@;'; put 'put ''ZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpLndpZHRoPjAmJmkuaGVpZ2h0PjAmJih0aGlzLmlucHV0Q2xpZW50UmVjdD17d2lkdGg6aS53aWR0aCxib3R0b206aS5ib3R0b219KSx0aGlzLmlubmVySGVpZ2h0PXdpbmRvdy5pbm5lckhlaWdodH1vbkRhdGFMaXN0TW91c2VFbnRlcihyKXt0aGlz''@;'; put 'put ''LnByZXZlbnREYXRhbGlzdENsb3NlPSEwfW9uRGF0YUxpc3RNb3VzZUxlYXZlKHIpe3RoaXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITEsdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpfW9uRGF0YUxpc3RTY3JvbGwocil7dGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKX1v''@;'; put 'put ''bkRhdGFMaXN0Q2xpY2socil7Y29uc3QgaT1yLnRhcmdldDsibG9hZC1tb3JlIiE9PWkuZGF0YXNldD8udHlwZT8iT1BUSU9OIiE9PWkudGFnTmFtZXx8dGhpcy5zZXRPcHRpb25WYWx1ZShpLmlubmVyVGV4dCxpLnZhbHVlKTp0aGlzLmxvYWRNb3JlKCl9bG9hZE1vcmUoKXt0aGlzLm9uTG9h''@;'; put 'put ''ZGluZ01vcmUuZW1pdCh7bG9hZE1vcmVGaW5pc2hlZDpyPT57dGhpcy5sb2FkaW5nTW9yZT0hMSx0aGlzLmVuYWJsZUxvYWRNb3JlPXJ9fSksdGhpcy5sb2FkaW5nTW9yZT0hMH1zZXRPcHRpb25WYWx1ZShyLGkpeyhyfHxpKSYmKGl8fChpPXIpKSxpJiYodGhpcy5wcmV2ZW50RGF0YWxpc3RD''@;'; put 'put ''bG9zZT0hMSx0aGlzLnZhbHVlPWksdGhpcy5vbklucHV0RmlyZWQobnVsbCwhMCwiY2xpY2siKSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpKX1vbk1haW5LZXlkb3duKHIpe3N3aXRjaChyLmtleSl7Y2FzZSJBcnJvd1VwIjp0aGlzLmdldE9wdGlvbnNNb3ZlRm9jdXMoInVwIik7YnJlYWs7''@;'; put 'put ''Y2FzZSJBcnJvd0Rvd24iOnRoaXMuZ2V0T3B0aW9uc01vdmVGb2N1cygiZG93biIpO2JyZWFrO2Nhc2UiRW50ZXIiOnRoaXMuc2VsZWN0Rm9jdXNlZE9wdGlvbigpfX1vbklucHV0S2V5dXAocil7cmV0dXJuIXRoaXMuZGF0YWxpc3RPcGVufHwoIkVzY2FwZSI9PT1yLmtleT8oci5zdG9wUHJv''@;'; put 'put ''cGFnYXRpb24oKSxyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCksITEpOnZvaWQgMCl9dW5zZWxlY3RBbGxPcHRpb25zKCl7Y29uc3Qgcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlv''@;'; put 'put ''bmApO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXJbaV0uY2xhc3NMaXN0LnJlbW92ZSgiZm9jdXNlZCIpfXNlbGVjdEZvY3VzZWRPcHRpb24oKXtjb25zdCByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uLmZvY3VzZWRgKTtyJiZ0''@;'; put 'put ''aGlzLm9uRGF0YUxpc3RDbGljayh7dGFyZ2V0OnJ9KSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpfWdldE9wdGlvbnNNb3ZlRm9jdXMocil7Y29uc3QgaT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlvbjpub3QoLmhpZGRlbilgKTts''@;'; put 'put ''ZXQgbz0wO2ZvcihsZXQgYT0wO2E8aS5sZW5ndGg7YSsrKXtjb25zdCBsPWlbYV07aWYobC5jbGFzc0xpc3QuY29udGFpbnMoImZvY3VzZWQiKSl7bz0iZG93biI9PT1yP2ErMTphLTEsbzwwJiYobz1pLmxlbmd0aC0xKSxvPmkubGVuZ3RoLTEmJihvPTApLGwuY2xhc3NMaXN0LnJlbW92ZSgi''@;'; put 'put ''Zm9jdXNlZCIpO2JyZWFrfX1pW29dLmNsYXNzTGlzdC5hZGQoImZvY3VzZWQiKX1vblJlc2l6ZShyKXt0aGlzLmNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKX1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKSh6ZShVbCkpfSx0aGlzLlx1''@;'; put 'put ''MDI3NWNtcD1Qcih7dHlwZTplLHNlbGVjdG9yczpbWyJhcHAtYXV0b2NvbXBsZXRlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihpLG8pe2lmKDEmaSYmV28oa25uLDUpLDImaSl7bGV0IGE7Y2koYT11aSgpKSYmKG8uaW5wdXRFbGVtZW50PWEuZmlyc3QpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9u''@;'; put 'put ''KGksbyl7MSZpJiZ3dCgicmVzaXplIixmdW5jdGlvbihsKXtyZXR1cm4gby5vblJlc2l6ZShsKX0sUWspfSxpbnB1dHM6e2lucHV0SWQ6ImlucHV0SWQiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsdmFsdWU6InZhbHVlIixkaXNhYmxlZDoiZGlzYWJsZWQiLHR5cGU6InR5cGUiLGF1dG9j''@;'; put 'put ''b21wbGV0ZToiYXV0b2NvbXBsZXRlIix0YWJpbmRleDoidGFiaW5kZXgiLGVtaXRPbmx5U2VsZWN0ZWQ6ImVtaXRPbmx5U2VsZWN0ZWQiLGVuYWJsZUxvYWRNb3JlOiJlbmFibGVMb2FkTW9yZSJ9LG91dHB1dHM6e29uSW5wdXRLZXlkb3duOiJvbklucHV0S2V5ZG93biIsb25JbnB1dENoYW5n''@;'; put 'put ''ZToib25JbnB1dENoYW5nZSIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIixvbkxvYWRpbmdNb3JlOiJvbkxvYWRpbmdNb3JlIn0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6Um5uLGRlY2xzOjksdmFyczoxNSxjb25zdHM6W1siaW5wdXQiLCIiXSxbIm9wdGlvbnMiLCIiXSxb''@;'; put 'put ''MSwiYXV0b2NvbXBsZXRlLXdyYXBwZXIiLDMsImtleWRvd24iXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiYXV0b2ZvY3VzIiwiIiwidGFiaW5kZXgiLCIwIiwxLCJpbnB1dC12YWwiLDMsIm5nTW9kZWxDaGFuZ2UiLCJjbGljayIsIm1vdXNlZW50ZXIiLCJmb2N1cyIs''@;'; put 'put ''ImZvY3Vzb3V0Iiwia2V5dXAiLCJpZCIsInBsYWNlaG9sZGVyIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWzEsIm92ZXJsYXkiXSxbMSwiZGF0YWxpc3QiLDMsImNsaWNrIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJzY3JvbGwiLCJuZ1N0eWxlIiwiaWQiXSxbImRhdGEtdHlwZSIsImxv''@;'; put 'put ''YWQtbW9yZSIsMSwibG9hZC1tb3JlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGksbyl7aWYoMSZpKXtjb25zdCBhPXduKCk7Zm8oKSxKKDAsImRpdiIsMiksd3QoImtleWRvd24iLGZ1bmN0aW9uKHUpe3JldHVybiBZZShhKSxYZShvLm9uTWFpbktleWRvd24odSkpfSksSigxLCJpbnB1dCIsMyww''@;'; put 'put ''KSxoaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odSl7cmV0dXJuIFllKGEpLGZpKG8udmFsdWUsdSl8fChvLnZhbHVlPXUpLFhlKHUpfSksd3QoImNsaWNrIixmdW5jdGlvbih1KXtyZXR1cm4gWWUoYSksWGUoby5vbklucHV0Q2xpY2sodSkpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9u''@;'; put 'put ''KHUpe3JldHVybiBZZShhKSxYZShvLm9uSW5wdXRGaXJlZCh1KSl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24odSl7cmV0dXJuIFllKGEpLFhlKG8ub25JbnB1dE1vdXNlZW50ZXIodSkpfSkoImZvY3VzIixmdW5jdGlvbih1KXtyZXR1cm4gWWUoYSksWGUoby5vbklucHV0Rm9jdXNpbih1KSl9''@;'; put 'put ''KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKHUpe3JldHVybiBZZShhKSxYZShvLm9uSW5wdXRGb2N1c291dCh1KSl9KSgia2V5dXAiLGZ1bmN0aW9uKHUpe3JldHVybiBZZShhKSxYZShvLm9uSW5wdXRLZXl1cCh1KSl9KSx0ZSgpLEl0KDMsImRpdiIsNCksSig0LCJkaXYiLDUpLHd0KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24odSl7cmV0dXJuIFllKGEpLFhlKG8ub25EYXRhTGlzdENsaWNrKHUpKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbih1KXtyZXR1cm4gWWUoYSksWGUoby5vbkRhdGFMaXN0TW91c2VFbnRlcih1KSl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24odSl7cmV0dXJuIFllKGEpLFhlKG8u''@;'; put 'put ''b25EYXRhTGlzdE1vdXNlTGVhdmUodSkpfSkoInNjcm9sbCIsZnVuY3Rpb24odSl7cmV0dXJuIFllKGEpLFhlKG8ub25EYXRhTGlzdFNjcm9sbCh1KSl9KSxKKDUsImRpdiIsbnVsbCwxKSxXcig3KSx0ZSgpLHZ0KDgsRG5uLDIsMSwib3B0aW9uIiw2KSx0ZSgpKCl9aWYoMiZpKXtjb25zdCBh''@;'; put 'put ''PW9vKDYpO2llKCkscnQoImlkIixvLmlucHV0SWQpKCJwbGFjZWhvbGRlciIsby5wbGFjZWhvbGRlciksZGkoIm5nTW9kZWwiLG8udmFsdWUpLHJ0KCJkaXNhYmxlZCIsby5kaXNhYmxlZCksUnIoImxpc3QiLCJkYXRhbGlzdF8iK28uaW5wdXRJZCksaWUoMiksd3IoImhpZGRlbiIsIW8uZGF0''@;'; put 'put ''YWxpc3RPcGVuKSxpZSgpLHdyKCJoaWRkZW4iLCFvLmRhdGFsaXN0T3BlbikscnQoIm5nU3R5bGUiLE41KDEyLElubixvLmlucHV0Q2xpZW50UmVjdC53aWR0aCxvLmlubmVySGVpZ2h0JiZvLmlucHV0Q2xpZW50UmVjdC5ib3R0b20/by5pbm5lckhlaWdodC1vLmlucHV0Q2xpZW50UmVjdC5i''@;'; put 'put ''b3R0b206dm9pZCAwKSkoImlkIiwiZGF0YWxpc3RfIitvLmlucHV0SWQpLGllKDQpLF90KGEuY2hpbGRyZW4ubGVuZ3RoPjAmJm8uZW5hYmxlTG9hZE1vcmU/ODotMSl9fSxkZXBlbmRlbmNpZXM6W2xfZSxYZyxRZyxsdSxvYyxYbF0sZW5jYXBzdWxhdGlvbjoyfSkpfXJldHVybiBuKCksZX0p''@;'; put 'put ''KCksTG5uPSgoKT0+e3ZhciBuO2NsYXNzIGV7dHJhbnNmb3JtKHIsaSl7aWYoInN0cmluZyI9PXR5cGVvZiByJiZyLmxlbmd0aDwxKXJldHVybiByO3N3aXRjaChpKXtjYXNlImRhdGUiOnJldHVybiBTcCgpKHIsIkRETU1NWVlZWTpoaDptbTpzcyIpLmZvcm1hdCgiREQvTU0vWVlZWSIpO2Nh''@;'; put 'put ''c2UidGltZSI6e2lmKCJzdHJpbmciIT10eXBlb2Ygcil0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHBhcnNpbmcgdGltZS4gVmFsdWUgaXMgbm90IHN0cmluZy4iKTtjb25zdCBvPXBhcnNlSW50KHIuc3BsaXQoIjoiKVswXSksYT1wYXJzZUludChyLnNwbGl0KCI6IilbMV0pLGw9cGFyc2VJbnQo''@;'; put 'put ''ci5zcGxpdCgiOiIpWzJdKTtyZXR1cm5gJHtvPDEwPyIwIitvOm99OiR7YTwxMD8iMCIrYTphfToke2w8MTA/IjAiK2w6bH1gfX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHI/cjpyLnRvU3RyaW5nKCl9c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBu''@;'; put 'put ''ZXcoaXx8ZSl9LHRoaXMuXHUwMjc1cGlwZT11aCh7bmFtZToiZGF0ZVRpbWVGb3JtYXR0ZXIiLHR5cGU6ZSxwdXJlOiEwLHN0YW5kYWxvbmU6ITF9KSl9cmV0dXJuIG4oKSxlfSkoKTtjb25zdCBPbm49WyJpbnB1dCJdLE5ubj1bIioiXTtmdW5jdGlvbiBGbm4obixlKXtpZigxJm4pe2NvbnN0''@;'; put 'put ''IHQ9d24oKTtTZSgwLCIgLyAiKSxKKDEsInNwYW4iLDUpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoMikub25DaGFuZ2VMYWJlbCgic2Vjb25kIikpfSksU2UoMiksdGUoKX1pZigyJm4pe2NvbnN0IHQ9VGUoMik7aWUoKSx3cigidmFsdWUtdHlwZS1zZWxlY3Rl''@;'; put 'put ''ZCIsInNlY29uZCI9PT10LmxhYmVsU2VsZWN0ZWQpLGllKCkscHIodC5zZWNvbmRMYWJlbCl9fWZ1bmN0aW9uIFBubihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwibGFiZWwiLDQpKDEsInNwYW4iLDUpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoKS5v''@;'; put 'put ''bkNoYW5nZUxhYmVsKCJmaXJzdCIpKX0pLFNlKDIpLHRlKCksdnQoMyxGbm4sMywzKSx0ZSgpfWlmKDImbil7Y29uc3QgdD1UZSgpO3dyKCJzZWNvbmRMYWJlbEFjdGl2ZSIsdC5zZWNvbmRMYWJlbCYmdC5zZWNvbmRMYWJlbC5sZW5ndGg+MCksaWUoKSx3cigidmFsdWUtdHlwZS1zZWxlY3Rl''@;'; put 'put ''ZCIsImZpcnN0Ij09PXQubGFiZWxTZWxlY3RlZCksaWUoKSxwcih0LmxhYmVsKSxpZSgpLF90KHQuc2Vjb25kTGFiZWw/MzotMSl9fWZ1bmN0aW9uIEhubihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLWRhdGUtY29udGFpbmVyIikoMSwiaW5wdXQiLDYpLEFjKDIsImRhdGVU''@;'; put 'put ''aW1lRm9ybWF0dGVyIiksd3QoImNsckRhdGVDaGFuZ2UiLGZ1bmN0aW9uKGkpe3JldHVybiBZZSh0KSxYZShUZSgpLm9uRGF0ZUlucHV0RmlyZWQoaSkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLmlucHV0Rm9jdXNlZD0hMCl9KSgiZm9jdXNvdXQiLGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCkuaW5wdXRGb2N1c2VkPSExKX0pKCJmb2N1c2luIixmdW5jdGlvbihpKXtyZXR1cm4gWWUodCksWGUoVGUoKS5vbkZvY3VzaW5JbnB1dChpKSl9KSgibW91c2VvdmVyIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLm9uSW5wdXRNb3Vz''@;'; put 'put ''ZU92ZXIoKSl9KSgibW91c2VvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCkub25JbnB1dE1vdXNlT3V0KCkpfSksdGUoKSgpfWlmKDImbil7Y29uc3QgdD1UZSgpO2llKCkscnQoImlkIix0LmlucHV0SWQpKCJwbGFjZWhvbGRlciIsc2IoMiw1LHQudGVtcCwiZGF0ZSIpKSgi''@;'; put 'put ''Y2xyRGF0ZSIsdC52YWx1ZSkoImRpc2FibGVkIix0LmRpc2FibGVkKSxScigibGlzdCIsImRhdGFsaXN0XyIrdC5pbnB1dElkKX19ZnVuY3Rpb24gVm5uKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJpbnB1dCIsNyksd3QoImlucHV0IixmdW5jdGlvbihpKXtyZXR1cm4gWWUodCks''@;'; put 'put ''WGUoVGUoKS5vbklucHV0RmlyZWQoaSkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLmlucHV0Rm9jdXNlZD0hMCl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCkuaW5wdXRGb2N1c2VkPSExKX0pKCJmb2N1c2luIixmdW5jdGlv''@;'; put 'put ''bihpKXtyZXR1cm4gWWUodCksWGUoVGUoKS5vbkZvY3VzaW5JbnB1dChpKSl9KSgibW91c2VvdmVyIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLm9uSW5wdXRNb3VzZU92ZXIoKSl9KSgibW91c2VvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCkub25JbnB1dE1v''@;'; put 'put ''dXNlT3V0KCkpfSksdGUoKX1pZigyJm4pe2NvbnN0IHQ9VGUoKTtydCgidmFsdWUiLHQudmFsdWUpKCJpZCIsdC5pbnB1dElkKSgiZGlzYWJsZWQiLHQuZGlzYWJsZWQpLFJyKCJsaXN0IiwiZGF0YWxpc3RfIit0LmlucHV0SWQpfX1mdW5jdGlvbiBCbm4obixlKXtpZigxJm4pe2NvbnN0IHQ9''@;'; put 'put ''d24oKTtKKDAsImFwcC1hdXRvY29tcGxldGUiLDgsMCksd3QoIm9uSW5wdXRDaGFuZ2UiLGZ1bmN0aW9uKGkpe3JldHVybiBZZSh0KSxYZShUZSgpLm9uSW5wdXRGaXJlZChpKSl9KSgib25Mb2FkaW5nTW9yZSIsZnVuY3Rpb24oaSl7cmV0dXJuIFllKHQpLFhlKFRlKCkuYXV0b2NvbXBsZXRl''@;'; put 'put ''TG9hZGluZ01vcmUoaSkpfSksV3IoMiksdGUoKX1pZigyJm4pe2NvbnN0IHQ9VGUoKTtydCgiaW5wdXRJZCIsdC5pbnB1dElkKSgidmFsdWUiLChudWxsPT10LnZhbHVlP251bGw6dC52YWx1ZS50b1N0cmluZygpKXx8IiIpKCJlbmFibGVMb2FkTW9yZSIsdC5lbmFibGVMb2FkTW9yZSkoImVt''@;'; put 'put ''aXRPbmx5U2VsZWN0ZWQiLHQuZW1pdE9ubHlTZWxlY3RlZCkoImRpc2FibGVkIix0LmRpc2FibGVkKX19bGV0IFJaZT0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKCl7dGhpcy5pbnB1dElkPSIiLHRoaXMudmFsdWU9IiIsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnR5cGU9InRleHQi''@;'; put 'put ''LHRoaXMuZGlzYWJsZVNvZnRzZWxlY3Q9ITEsdGhpcy5lbWl0T25seVNlbGVjdGVkPSExLHRoaXMuZW5hYmxlTG9hZE1vcmU9ITEsdGhpcy52YWx1ZUNoYW5nZT1uZXcgS3IsdGhpcy5vbklucHV0RXZlbnQ9bmV3IEtyLHRoaXMuZm9jdXNpbklucHV0PW5ldyBLcix0aGlzLm9uQXV0b2NvbXBs''@;'; put 'put ''ZXRlTG9hZGluZ01vcmU9bmV3IEtyLHRoaXMuc2VsZWN0ZWRMYWJlbENoYW5nZT1uZXcgS3IsdGhpcy50ZW1wPSIiLHRoaXMuaW5wdXRGb2N1c2VkPSExLHRoaXMubGFiZWxTZWxlY3RlZD0iZmlyc3QifW5nT25DaGFuZ2VzKHIpe3IudmFsdWUmJnIudmFsdWUuY3VycmVudFZhbHVlIT09ci52''@;'; put 'put ''YWx1ZS5wcmV2aW91c1ZhbHVlJiZ0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoci52YWx1ZS5jdXJyZW50VmFsdWUpfW5nT25Jbml0KCl7fWF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKHIpe3RoaXMub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZS5lbWl0KHIpfW9uSW5wdXRGaXJlZChyKXtjb25zdCBp''@;'; put 'put ''PXIudGFyZ2V0LnZhbHVlO3RoaXMudGVtcD1pLHRoaXMudmFsdWVDaGFuZ2UuZW1pdChpKSx0aGlzLm9uSW5wdXRFdmVudC5lbWl0KHIpfW9uRGF0ZUlucHV0RmlyZWQocil7dGhpcy50ZW1wPXIsdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHIpLHRoaXMub25JbnB1dEV2ZW50LmVtaXQocil9b25J''@;'; put 'put ''bnB1dE1vdXNlT3V0KCl7dGhpcy5kaXNhYmxlU29mdHNlbGVjdHx8KHRoaXMudmFsdWU9dGhpcy50ZW1wLHRoaXMudGVtcD0iIil9b25JbnB1dE1vdXNlT3Zlcigpe3RoaXMuZGlzYWJsZVNvZnRzZWxlY3R8fCh0aGlzLnRlbXA9dGhpcy52YWx1ZT90aGlzLnZhbHVlOiIiLHRoaXMudmFsdWU9''@;'; put 'put ''IiIpfW9uRm9jdXNpbklucHV0KHIpe3RoaXMuZm9jdXNpbklucHV0LmVtaXQocil9b25DaGFuZ2VMYWJlbChyKXt0aGlzLmxhYmVsU2VsZWN0ZWQ9cix0aGlzLnNlbGVjdGVkTGFiZWxDaGFuZ2UuZW1pdCgiZmlyc3QiPT09cj90aGlzLmxhYmVsOnRoaXMuc2Vjb25kTGFiZWwpfXN0YXRpYyNl''@;'; put 'put ''PW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpfSx0aGlzLlx1MDI3NWNtcD1Qcih7dHlwZTplLHNlbGVjdG9yczpbWyJhcHAtc29mdC1zZWxlY3QiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGksbyl7aWYoMSZpJiZXbyhPbm4sNSksMiZpKXtsZXQgYTtj''@;'; put 'put ''aShhPXVpKCkpJiYoby5pbnB1dEVsZW1lbnQ9YS5maXJzdCl9fSxpbnB1dHM6e2lucHV0SWQ6ImlucHV0SWQiLGxhYmVsOiJsYWJlbCIsc2Vjb25kTGFiZWw6InNlY29uZExhYmVsIix2YWx1ZToidmFsdWUiLGRpc2FibGVkOiJkaXNhYmxlZCIsdHlwZToidHlwZSIsZGlzYWJsZVNvZnRzZWxl''@;'; put 'put ''Y3Q6ImRpc2FibGVTb2Z0c2VsZWN0IixlbWl0T25seVNlbGVjdGVkOiJlbWl0T25seVNlbGVjdGVkIixlbmFibGVMb2FkTW9yZToiZW5hYmxlTG9hZE1vcmUifSxvdXRwdXRzOnt2YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UiLG9uSW5wdXRFdmVudDoib25JbnB1dEV2ZW50Iixmb2N1c2luSW5w''@;'; put 'put ''dXQ6ImZvY3VzaW5JbnB1dCIsb25BdXRvY29tcGxldGVMb2FkaW5nTW9yZToib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsc2VsZWN0ZWRMYWJlbENoYW5nZToic2VsZWN0ZWRMYWJlbENoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2l1XSxuZ0NvbnRlbnRTZWxlY3RvcnM6Tm5u''@;'; put 'put ''LGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWyJpbnB1dCIsIiJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsMywic2Vjb25kTGFiZWxBY3RpdmUiXSxbInR5cGUiLCJ0aW1lIiwic3RlcCIsIjEiLDEsImlucHV0LXZhbCIsMywidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sWyJ0eXBlIiwidGV4dCIs''@;'; put 'put ''ImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIsMSwiaW5wdXQtdmFsIiwzLCJpbnB1dElkIiwidmFsdWUiLCJlbmFibGVMb2FkTW9yZSIsImVtaXRPbmx5U2VsZWN0ZWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCJdLFszLCJjbGljayJdLFsidHlwZSIsImRh''@;'; put 'put ''dGUiLCJjbHJEYXRlIiwiIiwzLCJjbHJEYXRlQ2hhbmdlIiwiZm9jdXMiLCJmb2N1c291dCIsImZvY3VzaW4iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsImlkIiwicGxhY2Vob2xkZXIiLCJjbHJEYXRlIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJ0aW1lIiwic3RlcCIsIjEiLDEsImlucHV0LXZh''@;'; put 'put ''bCIsMywiaW5wdXQiLCJmb2N1cyIsImZvY3Vzb3V0IiwiZm9jdXNpbiIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0IiwidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIsMSwiaW5wdXQtdmFsIiwzLCJvbklucHV0''@;'; put 'put ''Q2hhbmdlIiwib25Mb2FkaW5nTW9yZSIsImlucHV0SWQiLCJ2YWx1ZSIsImVuYWJsZUxvYWRNb3JlIiwiZW1pdE9ubHlTZWxlY3RlZCIsImRpc2FibGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGksbyl7aWYoMSZpJiYoZm8oKSx2dCgwLFBubiw0LDYsImxhYmVsIiwxKSx2dCgxLEhubiwzLDgs''@;'; put 'put ''ImNsci1kYXRlLWNvbnRhaW5lciIpKDIsVm5uLDEsNCwiaW5wdXQiLDIpKDMsQm5uLDMsNSwiYXBwLWF1dG9jb21wbGV0ZSIsMykpLDImaSl7bGV0IGE7X3Qoby5sYWJlbD8wOi0xKSxpZSgpLF90KCJkYXRlIj09PShhPW8udHlwZSk/MToidGltZSI9PT1hPzI6InRleHQiPT09YT8zOi0xKX19''@;'; put 'put ''LGRlcGVuZGVuY2llczpbZWwsblcsbWFlLENNZSxrWmUsTG5uXSxlbmNhcHN1bGF0aW9uOjJ9KSl9cmV0dXJuIG4oKSxlfSkoKSxtQT0oKCk9Pnt2YXIgbjtjbGFzcyBle3NldCBuZ1ZhcihyKXt0aGlzLmNvbnRleHQuJGltcGxpY2l0PXRoaXMuY29udGV4dC5uZ1Zhcj1yLHRoaXMuaGFzVmll''@;'; put 'put ''d3x8KHRoaXMudmNSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYsdGhpcy5jb250ZXh0KSx0aGlzLmhhc1ZpZXc9ITApfWNvbnN0cnVjdG9yKHIsaSl7dGhpcy50ZW1wbGF0ZVJlZj1yLHRoaXMudmNSZWY9aSx0aGlzLmNvbnRleHQ9eyRpbXBsaWNpdDpudWxsLG5nVmFy''@;'; put 'put ''Om51bGx9LHRoaXMuaGFzVmlldz0hMX1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKSh6ZShGYyksemUoRHMpKX0sdGhpcy5cdTAyNzVkaXI9JHIoe3R5cGU6ZSxzZWxlY3RvcnM6W1siIiwibmdWYXIiLCIiXV0saW5wdXRzOntuZ1Zh''@;'; put 'put ''cjoibmdWYXIifSxzdGFuZGFsb25lOiExfSkpfXJldHVybiBuKCksZX0pKCksam5uPSgoKT0+e3ZhciBuO2NsYXNzIGV7Y29uc3RydWN0b3Iocil7dGhpcy5oZWxwZXJTZXJ2aWNlPXJ9dHJhbnNmb3JtKHIsaT0iZGF5cyIsbz0hMSl7aWYodm9pZCAwPT09ciYmKHI9IiIpLCJzdHJpbmciIT10''@;'; put 'put ''eXBlb2YgciYmKHI9ci50b1N0cmluZygpKSwwPT09ci5sZW5ndGgpe2lmKCJkYXlzIj09PWkpcmV0dXJuIG51bGw7aWYoInNlY29uZHMiPT09aSlyZXR1cm4gbz8iMTE6MDA6MDAiOm51bGx9bGV0IGE9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRTYXNEYXlzVG9Kc0RhdGUocixpKTtpZig0''@;'; put 'put ''PT09ci5zcGxpdCgiOiIpLmxlbmd0aCl7Y29uc3QgdT1yLnNwbGl0KCI6Iik7YT1uZXcgRGF0ZSh1WzBdKSxhLnNldEhvdXJzKHBhcnNlSW50KHVbMV0pKSxhLnNldE1pbnV0ZXMocGFyc2VJbnQodVsyXSkpLGEuc2V0U2Vjb25kcyhwYXJzZUludCh1WzNdKSl9ZWxzZSBpc05hTihOdW1iZXIo''@;'; put 'put ''cikpJiYoYT1uZXcgRGF0ZShyKSk7bGV0IGw9YCR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGEuZ2V0SG91cnMoKS50b1N0cmluZygpKX06JHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oYS5nZXRNaW51dGVzKCkudG9TdHJpbmcoKSl9OiR7dGhpcy5oZWxw''@;'; put 'put ''ZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGEuZ2V0U2Vjb25kcygpLnRvU3RyaW5nKCkpfWA7cmV0dXJuIG8/bDphfXN0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpKHplKGZoLDE2KSl9LHRoaXMuXHUwMjc1cGlwZT11aCh7bmFtZToi''@;'; put 'put ''c2FzVG9Kc0RhdGUiLHR5cGU6ZSxwdXJlOiEwLHN0YW5kYWxvbmU6ITF9KSl9cmV0dXJuIG4oKSxlfSkoKSxVbm49KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3RvcihyKXt0aGlzLmhlbHBlclNlcnZpY2U9cn10cmFuc2Zvcm0ocil7aWYobnVsbD09cnx8IiI9PT1yKXJldHVybiIiO2xl''@;'; put 'put ''dCBpLG8sYTtpZigic3RyaW5nIj09dHlwZW9mIHImJjM9PT1yLnNwbGl0KCI6IikubGVuZ3RoKXtjb25zdCBsPXIuc3BsaXQoIjoiKTtpPWxbMF0sbz1sWzFdLGE9bFsyXX1lbHNlIm51bWJlciIhPXR5cGVvZiByJiYocj1wYXJzZUludChyKSksaT1NYXRoLmZsb29yKHIvMzYwMCksbz1NYXRo''@;'; put 'put ''LmZsb29yKHIlMzYwMC82MCksYT1NYXRoLmZsb29yKHIlMzYwMCU2MCk7cmV0dXJuYCR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGkpfToke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhvKX06JHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8o''@;'; put 'put ''YSl9YH1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKSh6ZShmaCwxNikpfSx0aGlzLlx1MDI3NXBpcGU9dWgoe25hbWU6InNlY29uZHNQYXJzZXIiLHR5cGU6ZSxwdXJlOiEwLHN0YW5kYWxvbmU6ITF9KSl9cmV0dXJuIG4oKSxlfSko''@;'; put 'put ''KTtjb25zdCB6bm49KG4sZSx0KT0+KHtxdWVyeTpuLHF1ZXJ5SW5kZXg6ZSxjbGF1c2VJbmRleDp0fSksV25uPShuLGUsdCxyKT0+KHtxdWVyeTpuLHF1ZXJ5SW5kZXg6ZSxjbGF1c2VJbmRleDp0LGlzRGF0ZVRpbWU6cn0pLFlubj0obixlLHQscik9Pih7cmFuZ2U6InN0YXJ0IixxdWVyeTpu''@;'; put 'put ''LHF1ZXJ5VmFsdWVJbmRleDowLHF1ZXJ5SW5kZXg6ZSxjbGF1c2VJbmRleDp0LGlzRGF0ZVRpbWU6cn0pLFpubj0obixlLHQscik9Pih7cmFuZ2U6ImVuZCIscXVlcnk6bixxdWVyeVZhbHVlSW5kZXg6MSxxdWVyeUluZGV4OmUsY2xhdXNlSW5kZXg6dCxpc0RhdGVUaW1lOnJ9KTtmdW5jdGlv''@;'; put 'put ''biBHbm4obixlKXtpZigxJm4mJihKKDAsIm9wdGlvbiIsMTMpLFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdDtydCgic2VsZWN0ZWQiLFRlKCkubG9naWNPcGVyYXRvcnNbMF0pLGllKCksU3IoIiAiLHQsIiAiKX19ZnVuY3Rpb24gJG5uKG4sZSl7MSZuJiYoU2UoMCwiXG4g''@;'; put 'put ''ICAgICAgICIpLEooMSwiZGl2IiwyMCksU2UoMiwiXG4gICAgICAgICAgIiksSXQoMywicHJvZ3Jlc3MiKSxTZSg0LCJcbiAgICAgICAgIiksdGUoKSxTZSg1LCJcbiAgICAgICIpKX1mdW5jdGlvbiBxbm4obixlKXsxJm4mJkl0KDAsImRpdiIpfWZ1bmN0aW9uIEtubihuLGUpe2lmKDEmbiYm''@;'; put 'put ''KEooMCwib3B0aW9uIiwxMyksU2UoMSksdGUoKSksMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0O3J0KCJzZWxlY3RlZCIsVGUoMikubG9naWNPcGVyYXRvcnNbMF0pLGllKCksU3IoIiAiLHQsIiAiKX19ZnVuY3Rpb24gWG5uKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJidXR0b24i''@;'; put 'put ''LDI4KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKDIpLmFkZEdyb3VwQ2xhdXNlKCkpfSksSXQoMSwiY2xyLWljb24iLDI5KSxKKDIsInNwYW4iKSxTZSgzLCJHcm91cCIpLHRlKCkoKX19ZnVuY3Rpb24gUW5uKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7Sigw''@;'; put 'put ''LCJjbHItaWNvbiIsMzApLHd0KCJjbGljayIsZnVuY3Rpb24oKXtZZSh0KTtjb25zdCBpPVRlKCkuJGluZGV4O3JldHVybiBYZShUZSgpLnJlbW92ZUdyb3VwQ2xhdXNlKGkpKX0pLHRlKCl9fWZ1bmN0aW9uIEpubihuLGUpe2lmKDEmbiYmKEooMCwib3B0aW9uIiksU2UoMSksdGUoKSksMiZu''@;'; put 'put ''KXtjb25zdCB0PWUuJGltcGxpY2l0O2llKCksU3IoIiAiLHQuTkFNRSwiICIpfX1mdW5jdGlvbiBlcm4obixlKXtpZigxJm4mJihKKDAsIm9wdGlvbiIpLFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdDtpZSgpLHByKHQpfX1mdW5jdGlvbiB0cm4obixlKXsxJm4mJmF1KDAp''@;'; put 'put ''fWZ1bmN0aW9uIG5ybihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiZGl2Iiw0MikoMSwiYnV0dG9uIiw0Niksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoMikuJGluZGV4LG89VGUoKS4kaW5kZXgsYT1UZSgpO3JldHVybiBhLmN1cnJlbnRRdWVyeUluZGV4''@;'; put 'put ''PWksWGUoYS5jdXJyZW50Q2xhdXNlSW5kZXg9byl9KSxTZSgyLCIgQ2hvb3NlIHZhbHVlcyAiKSx0ZSgpLFluKDMsdHJuLDEsMCwibmctY29udGFpbmVyIiw0NyksdGUoKX1pZigyJm4pe2NvbnN0IHQ9VGUoMikscj10LiRpbXBsaWNpdCxpPXQuJGluZGV4LG89VGUoKS4kaW5kZXg7VGUoKTtj''@;'; put 'put ''b25zdCBhPW9vKDM4KTtpZSgzKSxydCgibmdUZW1wbGF0ZU91dGxldCIsYSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Iix0SSgyLHpubixyLGksbykpfX1mdW5jdGlvbiBycm4obixlKXsxJm4mJmF1KDApfWZ1bmN0aW9uIGlybihuLGUpe2lmKDEmbiYmKEooMCwiZGl2Iiw0MyksWW4oMSxy''@;'; put 'put ''cm4sMSwwLCJuZy1jb250YWluZXIiLDQ3KSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoKS5uZ1ZhcixyPVRlKCksaT1yLiRpbXBsaWNpdCxvPXIuJGluZGV4LGE9VGUoKS4kaW5kZXgsbD1UZSgpLHU9b28oMzIpLGc9b28oMzQpO2llKCkscnQoIm5nVGVtcGxhdGVPdXRsZXQiLHQmJmwudXNlUGlj''@;'; put 'put ''a2Vycz91OmcpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsWWooMixXbm4saSxvLGEsdCkpfX1mdW5jdGlvbiBvcm4obixlKXsxJm4mJmF1KDApfWZ1bmN0aW9uIGFybihuLGUpezEmbiYmYXUoMCl9ZnVuY3Rpb24gc3JuKG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiLDQ0KSgxLCJkaXYiLDQ4''@;'; put 'put ''KSxZbigyLG9ybiwxLDAsIm5nLWNvbnRhaW5lciIsNDcpLHRlKCksSigzLCJkaXYiLDQ5KSxZbig0LGFybiwxLDAsIm5nLWNvbnRhaW5lciIsNDcpLHRlKCkoKSksMiZuKXtjb25zdCB0PVRlKCkubmdWYXIscj1UZSgpLGk9ci4kaW1wbGljaXQsbz1yLiRpbmRleCxhPVRlKCkuJGluZGV4LGw9''@;'; put 'put ''VGUoKSx1PW9vKDMyKSxnPW9vKDM2KTtpZSgyKSxydCgibmdUZW1wbGF0ZU91dGxldCIsdCYmbC51c2VQaWNrZXJzP3U6ZykoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixZaig0LFlubixpLG8sYSx0KSksaWUoMikscnQoIm5nVGVtcGxhdGVPdXRsZXQiLHQmJmwudXNlUGlja2Vycz91Omcp''@;'; put 'put ''KCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsWWooOSxabm4saSxvLGEsdCkpfX1mdW5jdGlvbiBscm4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRpdiIsNDUpKDEsImxhYmVsIiw3KSxTZSgyLCJWYWx1ZSIpLHRlKCksSigzLCJpbnB1dCIsNTApLGhpKCJuZ01vZGVsQ2hhbmdl''@;'; put 'put ''IixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKDIpLiRpbXBsaWNpdDtyZXR1cm4gZmkoby52YWx1ZSxpKXx8KG8udmFsdWU9aSksWGUoaSl9KSx3dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgyKS4kaW5kZXgsYT1UZSgpLiRpbmRleDtyZXR1cm4g''@;'; put 'put ''WGUoVGUoKS5zZXRWYXJpYWJsZVZhbHVlcyhpLG8sYSkpfSksdGUoKSgpfWlmKDImbil7Y29uc3QgdD1UZSgyKS4kaW1wbGljaXQ7aWUoMyksZGkoIm5nTW9kZWwiLHQudmFsdWUpfX1mdW5jdGlvbiBjcm4obixlKXtpZigxJm4mJihKKDAsImRpdiIsNDEpLHZ0KDEsbnJuLDQsNiwiZGl2Iiw0''@;'; put 'put ''MiksdnQoMixpcm4sMiw3LCJkaXYiLDQzKSx2dCgzLHNybiw1LDE0LCJkaXYiLDQ0KSx2dCg0LGxybiw0LDEsImRpdiIsNDUpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgpLiRpbXBsaWNpdDtpZSgpLF90KCJJTiI9PT10Lm9wZXJhdG9yfHwiTk9UIElOIj09PXQub3BlcmF0b3I/MTotMSksaWUo''@;'; put 'put ''KSxfdCgiQkVUV0VFTiIhPT10Lm9wZXJhdG9yJiYiSU4iIT09dC5vcGVyYXRvciYmIk5PVCBJTiIhPT10Lm9wZXJhdG9yJiYiTElLRSIhPT10Lm9wZXJhdG9yJiYiQ09OVEFJTlMiIT09dC5vcGVyYXRvciYmIkJFR0lOU19XSVRIIiE9PXQub3BlcmF0b3I/MjotMSksaWUoKSxfdCgiQkVUV0VF''@;'; put 'put ''TiI9PT10Lm9wZXJhdG9yPzM6LTEpLGllKCksX3QoIkxJS0UiPT09dC5vcGVyYXRvcnx8IkJFR0lOU19XSVRIIj09PXQub3BlcmF0b3J8fCJDT05UQUlOUyI9PT10Lm9wZXJhdG9yPzQ6LTEpfX1mdW5jdGlvbiB1cm4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRpdiIsMTApKDEs''@;'; put 'put ''ImRpdiIsMzEpKDIsImRpdiIsMzIpKDMsImFwcC1zb2Z0LXNlbGVjdCIsMzMpLGhpKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaSl7Y29uc3Qgbz1ZZSh0KS4kaW1wbGljaXQ7cmV0dXJuIGZpKG8udmFyaWFibGUsaSl8fChvLnZhcmlhYmxlPWkpLFhlKGkpfSksd3QoIm9uSW5wdXRFdmVudCIs''@;'; put 'put ''ZnVuY3Rpb24oaSl7Y29uc3Qgbz1ZZSh0KSxhPW8uJGltcGxpY2l0LGw9by4kaW5kZXgsdT1UZSgpLiRpbmRleDtyZXR1cm4gWGUoVGUoKS52YXJpYWJsZUlucHV0Q2hhbmdlKGEudmFyaWFibGUsbCx1LGkpKX0pLF9vKDQsSm5uLDIsMSwib3B0aW9uIixudWxsLENvKSx0ZSgpKCkoKSxKKDYs''@;'; put 'put ''ImRpdiIsMzQpKDcsImNsci1zZWxlY3QtY29udGFpbmVyIikoOCwibGFiZWwiKSxTZSg5LCJPcGVyYXRvciIpLHRlKCksSigxMCwic2VsZWN0IiwzNSksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe2NvbnN0IG89WWUodCkuJGltcGxpY2l0O3JldHVybiBmaShvLm9wZXJhdG9yLGkp''@;'; put 'put ''fHwoby5vcGVyYXRvcj1pKSxYZShpKX0pLHd0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe2NvbnN0IGk9WWUodCksbz1pLiRpbXBsaWNpdCxhPWkuJGluZGV4LGw9VGUoKS4kaW5kZXg7cmV0dXJuIFhlKFRlKCkuc2V0VmFyaWFibGVPcGVyYXRvcihhLG8ub3BlcmF0b3IsbCkpfSksX28o''@;'; put 'put ''MTEsZXJuLDIsMSwib3B0aW9uIixudWxsLENvKSx0ZSgpKCkoKSxZbigxMyxjcm4sNSw0LCJkaXYiLDM2KSxKKDE0LCJkaXYiLDM3KSgxNSwiYnV0dG9uIiwzOCksd3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGk9WWUodCkuJGluZGV4LG89VGUoKS4kaW5kZXg7cmV0dXJuIFhlKFRlKCku''@;'; put 'put ''cmVtb3ZlQ2xhdXNlKGksbykpfSksSXQoMTYsImNsci1pY29uIiwzOSkoMTcsInNwYW4iKSx0ZSgpLEooMTgsImJ1dHRvbiIsNDApLHd0KCJjbGljayIsZnVuY3Rpb24oKXtZZSh0KTtjb25zdCBpPVRlKCkuJGluZGV4O3JldHVybiBYZShUZSgpLmFkZENsYXVzZShpKSl9KSxJdCgxOSwiY2xy''@;'; put 'put ''LWljb24iLDI5KSgyMCwic3BhbiIpLHRlKCkoKSgpfWlmKDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdCxyPWUuJGluZGV4LGk9VGUoKS4kaW5kZXgsbz1UZSgpO3dyKCJpbnZhbGlkLWNsYXVzZSIsdC5pbnZhbGlkQ2xhdXNlKSxpZSgzKSxydCgiaWQiLCJzZWxlY3RfdmFsc192YXJfaWQiK3Ir''@;'; put 'put ''Il8iK2kpKCJpbnB1dElkIiwidmFsc192YXJfaWQiK3IrIl8iK2kpKCJlbWl0T25seVNlbGVjdGVkIiwhMCksZGkoInZhbHVlIix0LnZhcmlhYmxlKSxpZSgpLHlvKG8uY29scyksaWUoNiksZGkoIm5nTW9kZWwiLHQub3BlcmF0b3IpLGllKCkseW8odC5vcGVyYXRvcnMpLGllKDIpLHJ0KCJu''@;'; put 'put ''Z1ZhciIsIkRBVEUiPT09dC5kZHR5cGV8fCJEQVRFVElNRSI9PT10LmRkdHlwZXx8IlRJTUUiPT09dC5kZHR5cGUpLGllKDIpLHJ0KCJkaXNhYmxlZCIsMT09PW8uY2xhdXNlcy5xdWVyeU9ialtpXS5lbGVtZW50cy5sZW5ndGgpfX1mdW5jdGlvbiBkcm4obixlKXtpZigxJm4pe2NvbnN0IHQ9''@;'; put 'put ''d24oKTtKKDAsImRpdiIsMTkpKDEsImRpdiIsMTApKDIsImRpdiIsMjEpKDMsImRpdiIsMjIpKDQsImNsci1zZWxlY3QtY29udGFpbmVyIikoNSwibGFiZWwiKSxTZSg2LCJMb2dpYyIpLHRlKCksSig3LCJzZWxlY3QiLDIzKSxoaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7Y29uc3Qg''@;'; put 'put ''bz1ZZSh0KS4kaW1wbGljaXQ7cmV0dXJuIGZpKG8uY2xhdXNlTG9naWMsaSl8fChvLmNsYXVzZUxvZ2ljPWkpLFhlKGkpfSksd3QoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCkuc2V0TG9naWMoKSl9KSxfbyg4LEtubiwyLDIsIm9wdGlvbiIsMTMsQ28p''@;'; put 'put ''LHRlKCkoKSgpLEl0KDEwLCJiciIpLHZ0KDExLFhubiw0LDAsImJ1dHRvbiIsMjQpLHRlKCksSigxMiwiZGl2IiwyNSksdnQoMTMsUW5uLDEsMCwiY2xyLWljb24iLDI2KSxfbygxNCx1cm4sMjEsOSwiZGl2IiwyNyxDbyksdGUoKSgpLEl0KDE2LCJiciIpLHRlKCl9aWYoMiZuKXtjb25zdCB0''@;'; put 'put ''PWUuJGltcGxpY2l0LHI9VGUoKTtpZSgpLHdyKCJpbnZhbGlkLWNsYXVzZSIsdC5pbnZhbGlkQ2xhdXNlKSxpZSg2KSxkaSgibmdNb2RlbCIsdC5jbGF1c2VMb2dpYykscnQoImRpc2FibGVkIix0LmVsZW1lbnRzLmxlbmd0aDwyKSxpZSgpLHlvKHIubG9naWNPcGVyYXRvcnMpLGllKDMpLF90''@;'; put 'put ''KHIuaW5uZXJXaWR0aD43Njg/MTE6LTEpLGllKDIpLF90KHIuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg+MT8xMzotMSksaWUoKSx5byh0LmVsZW1lbnRzKX19ZnVuY3Rpb24gaHJuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJhcHAtc29mdC1zZWxlY3QiLDUzKSxBYygxLCJzYXNU''@;'; put 'put ''b0pzRGF0ZSIpLEFjKDIsInNhc1RvSnNEYXRlIiksd3QoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKCksYT1vLnF1ZXJ5LGw9by5xdWVyeVZhbHVlSW5kZXgsdT1vLnF1ZXJ5SW5kZXgsZz1vLmNsYXVzZUluZGV4O3JldHVybiBYZShUZSgpLmRhdGVDaGFuZ2Uo''@;'; put 'put ''aSxhLHUsZyxsKSl9KSx0ZSgpfWlmKDImbil7Y29uc3QgdD1UZSgpLHI9dC5xdWVyeSxpPXQucXVlcnlWYWx1ZUluZGV4LG89dC5xdWVyeUluZGV4LGE9dC5jbGF1c2VJbmRleDtydCgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNfZGF0ZSIrbysiXyIrYSkoInZhbHVl''@;'; put 'put ''Iix2b2lkIDAhPT1pP1RkKDEsMyxyLnZhbHVlW2ldKTpUZCgyLDUsci52YWx1ZSkpfX1mdW5jdGlvbiBmcm4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImFwcC1zb2Z0LXNlbGVjdCIsNTQpLEFjKDEsInNhc1RvSnNEYXRlIiksQWMoMiwic2FzVG9Kc0RhdGUiKSx3dCgidmFsdWVD''@;'; put 'put ''aGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoKSxhPW8ucXVlcnlJbmRleCxsPW8uY2xhdXNlSW5kZXg7cmV0dXJuIFhlKFRlKCkuZ2V0UXVlcnlEYXRlVGltZShsLGEpLmRhdGU9aSl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoKSxvPWku''@;'; put 'put ''cXVlcnksYT1pLnF1ZXJ5VmFsdWVJbmRleCxsPWkucXVlcnlJbmRleCx1PWkuY2xhdXNlSW5kZXg7cmV0dXJuIFhlKFRlKCkuZGF0ZVRpbWVDaGFuZ2UobyxsLHUsYSkpfSksdGUoKSxKKDMsImFwcC1zb2Z0LXNlbGVjdCIsNTUpLEFjKDQsInNhc1RvSnNEYXRlIiksQWMoNSwic2FzVG9Kc0Rh''@;'; put 'put ''dGUiKSx3dCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoKSxhPW8ucXVlcnlJbmRleCxsPW8uY2xhdXNlSW5kZXg7cmV0dXJuIFhlKFRlKCkuZ2V0UXVlcnlEYXRlVGltZShsLGEpLnRpbWU9aSl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe1llKHQpO2Nv''@;'; put 'put ''bnN0IGk9VGUoKSxvPWkucXVlcnksYT1pLnF1ZXJ5VmFsdWVJbmRleCxsPWkucXVlcnlJbmRleCx1PWkuY2xhdXNlSW5kZXg7cmV0dXJuIFhlKFRlKCkuZGF0ZVRpbWVDaGFuZ2UobyxsLHUsYSkpfSksdGUoKX1pZigyJm4pe2NvbnN0IHQ9VGUoKSxyPXQucXVlcnksaT10LnF1ZXJ5VmFsdWVJ''@;'; put 'put ''bmRleCxvPXQucXVlcnlJbmRleCxhPXQuY2xhdXNlSW5kZXg7cnQoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxzX2RhdGUiK28rIl8iK2EpKCJ2YWx1ZSIsdm9pZCAwIT09aT9zYigxLDYsci52YWx1ZVtpXSwic2Vjb25kcyIpOnNiKDIsOSxyLnZhbHVlLCJzZWNvbmRz''@;'; put 'put ''IikpLGllKDMpLHJ0KCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc190aW1lIitvKyJfIithKSgidmFsdWUiLHZvaWQgMCE9PWk/aG5lKDQsMTIsci52YWx1ZVtpXSwic2Vjb25kcyIsITApOmhuZSg1LDE2LHIudmFsdWUsInNlY29uZHMiLCEwKSl9fWZ1bmN0aW9uIHBy''@;'; put 'put ''bihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiYXBwLXNvZnQtc2VsZWN0Iiw1NiksQWMoMSwic2Vjb25kc1BhcnNlciIpLEFjKDIsInNlY29uZHNQYXJzZXIiKSx3dCgib25JbnB1dEV2ZW50IixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKCksYT1vLnF1ZXJ5LGw9by5xdWVy''@;'; put 'put ''eVZhbHVlSW5kZXgsdT1vLnF1ZXJ5SW5kZXgsZz1vLmNsYXVzZUluZGV4O3JldHVybiBYZShUZSgpLnRpbWVDaGFuZ2UoaSxhLHUsZyxsKSl9KSx0ZSgpfWlmKDImbil7Y29uc3QgdD1UZSgpLHI9dC5xdWVyeSxpPXQucXVlcnlWYWx1ZUluZGV4LG89dC5xdWVyeUluZGV4LGE9dC5jbGF1c2VJ''@;'; put 'put ''bmRleDtydCgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNfIitvKyJfIithKSgidmFsdWUiLHZvaWQgMCE9PWk/VGQoMSwzLHIudmFsdWVbaV0pOlRkKDIsNSxyLnZhbHVlKSl9fWZ1bmN0aW9uIGdybihuLGUpe2lmKDEmbiYmdnQoMCxocm4sMyw3LCJhcHAtc29mdC1z''@;'; put 'put ''ZWxlY3QiLDUxKSgxLGZybiw2LDIwKSgyLHBybiwzLDcsImFwcC1zb2Z0LXNlbGVjdCIsNTIpLDImbil7bGV0IHQ7X3QoIkRBVEUiPT09KHQ9ZS5xdWVyeS5kZHR5cGUpPzA6IkRBVEVUSU1FIj09PXQ/MToiVElNRSI9PT10PzI6LTEpfX1mdW5jdGlvbiBtcm4obixlKXtpZigxJm4mJihKKDAs''@;'; put 'put ''Im9wdGlvbiIsNTgpLFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdDtydCgidmFsdWUiLHQudW5mb3JtYXR0ZWQpLGllKCksU3IoIiAiLHQuZm9ybWF0dGVkLnRyaW0oKSwiICIpfX1mdW5jdGlvbiB2cm4obixlKXtpZigxJm4mJihKKDAsImRpdiIpLF9vKDEsbXJuLDIsMiwi''@;'; put 'put ''b3B0aW9uIiw1OCxDbyksdGUoKSksMiZuKXtjb25zdCB0PVRlKCkucXVlcnk7aWUoKSx5byh0LnZhbHVlcyl9fWZ1bmN0aW9uIF9ybihuLGUpe2lmKDEmbiYmKEooMCwib3B0aW9uIiw1OCksU2UoMSksdGUoKSksMiZuKXtjb25zdCB0PVRlKCkuJGltcGxpY2l0O3J0KCJ2YWx1ZSIsdC5OQU1F''@;'; put 'put ''KSxpZSgpLFNyKCIgIix0Lk5BTUUsIiAiKX19ZnVuY3Rpb24geXJuKG4sZSl7aWYoMSZuJiZ2dCgwLF9ybiwyLDIsIm9wdGlvbiIsNTgpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdCxyPVRlKDIpLnF1ZXJ5O190KHQuVFlQRT09PXIudHlwZT8wOi0xKX19ZnVuY3Rpb24gYnJuKG4sZSl7aWYo''@;'; put 'put ''MSZuJiYoSigwLCJkaXYiKSxfbygxLHlybiwxLDEsbnVsbCxudWxsLENvKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoMik7aWUoKSx5byh0LmNvbHMpfX1mdW5jdGlvbiB3cm4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImFwcC1zb2Z0LXNlbGVjdCIsNTcpLHd0KCJzZWxlY3RlZExh''@;'; put 'put ''YmVsQ2hhbmdlIixmdW5jdGlvbihpKXtjb25zdCBvPVllKHQpLnF1ZXJ5O3JldHVybiBYZShUZSgpLnNlbGVjdGVkTGFiZWxDaGFuZ2UoaSxvKSl9KSxoaSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGkpe2NvbnN0IG89WWUodCkucXVlcnk7cmV0dXJuIGZpKG8udmFsdWUsaSl8fChvLnZhbHVl''@;'; put 'put ''PWkpLFhlKGkpfSksd3QoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oaSl7Y29uc3Qgbz1ZZSh0KSxhPW8ucXVlcnlJbmRleCxsPW8uY2xhdXNlSW5kZXg7cmV0dXJuIFhlKFRlKCkuc2V0VmFyaWFibGVWYWx1ZXMoaS50YXJnZXQudmFsdWUsYSxsKSl9KSgib25BdXRvY29tcGxldGVMb2FkaW5n''@;'; put 'put ''TW9yZSIsZnVuY3Rpb24oaSl7Y29uc3Qgbz1ZZSh0KSxhPW8ucXVlcnksbD1vLnF1ZXJ5SW5kZXgsdT1vLmNsYXVzZUluZGV4O3JldHVybiBYZShUZSgpLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoaSxhLnZhcmlhYmxlLGwsdSkpfSksdnQoMSx2cm4sMywwLCJkaXYiKSx2dCgyLGJybiwz''@;'; put 'put ''LDAsImRpdiIpLHRlKCl9aWYoMiZuKXtjb25zdCB0PWUucXVlcnkscj1lLnF1ZXJ5SW5kZXgsaT1lLmNsYXVzZUluZGV4O3J0KCJzZWNvbmRMYWJlbCIsIlZhcmlhYmxlIikoImVtaXRPbmx5U2VsZWN0ZWQiLHQudmFsdWVWYXJpYWJsZSkoImlucHV0SWQiLCJ2YWxzXyIrcisiXyIraSksZGko''@;'; put 'put ''InZhbHVlIix0LnZhbHVlKSxydCgiZW5hYmxlTG9hZE1vcmUiLHQubm9icz50LnZhbHVlcy5sZW5ndGgpLGllKCksX3QodC52YWx1ZVZhcmlhYmxlPy0xOjEpLGllKCksX3QodC52YWx1ZVZhcmlhYmxlPzI6LTEpfX1mdW5jdGlvbiBDcm4obixlKXtpZigxJm4mJihKKDAsIm9wdGlvbiIsNTgp''@;'; put 'put ''LFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdDtydCgidmFsdWUiLHQuZm9ybWF0dGVkKSxpZSgpLFNyKCIgIix0LmZvcm1hdHRlZCwiICIpfX1mdW5jdGlvbiBTcm4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImFwcC1zb2Z0LXNlbGVjdCIsNTkpLGhpKCJ2YWx1''@;'; put 'put ''ZUNoYW5nZSIsZnVuY3Rpb24oaSl7Y29uc3Qgbz1ZZSh0KSxhPW8ucXVlcnksbD1vLnF1ZXJ5VmFsdWVJbmRleDtyZXR1cm4gZmkoYS52YWx1ZVtsXSxpKXx8KGEudmFsdWVbbF09aSksWGUoaSl9KSx3dCgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe2NvbnN0IGk9WWUodCksbz1pLnF1ZXJ5''@;'; put 'put ''LGE9aS5xdWVyeUluZGV4LGw9aS5jbGF1c2VJbmRleDtyZXR1cm4gWGUoVGUoKS5zZXRWYXJpYWJsZVZhbHVlcyhvLnZhbHVlLGEsbCkpfSkoIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLGZ1bmN0aW9uKGkpe2NvbnN0IG89WWUodCksYT1vLnF1ZXJ5LGw9by5xdWVyeUluZGV4LHU9by5j''@;'; put 'put ''bGF1c2VJbmRleDtyZXR1cm4gWGUoVGUoKS5vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGksYS52YXJpYWJsZSxsLHUpKX0pLF9vKDEsQ3JuLDIsMiwib3B0aW9uIiw1OCxDbyksdGUoKX1pZigyJm4pe2NvbnN0IHQ9ZS5yYW5nZSxyPWUucXVlcnksaT1lLnF1ZXJ5VmFsdWVJbmRleDtydCgi''@;'; put 'put ''aW5wdXRJZCIsInZhbHMtIit0KyJfIitlLnF1ZXJ5SW5kZXgrIl8iK2UuY2xhdXNlSW5kZXgpLGRpKCJ2YWx1ZSIsci52YWx1ZVtpXSkscnQoImVuYWJsZUxvYWRNb3JlIixyLm5vYnM+ci52YWx1ZXMubGVuZ3RoKSgiZGlzYWJsZWQiLHZvaWQgMCE9PWkmJiJzdGFydCIhPT10JiYhci52YWx1''@;'; put 'put ''ZVswXSksaWUoKSx5byhyLnZhbHVlcyl9fWZ1bmN0aW9uIEVybihuLGUpezEmbiYmKEooMCwiaDUiLDYzKSxTZSgxLCJObyB2YWx1ZXMgYXZhaWxhYmxlLiIpLHRlKCkpfWZ1bmN0aW9uIE1ybihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgx''@;'; put 'put ''LCJpbnB1dCIsNjcpLGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtjb25zdCBvPVllKHQpLiRpbmRleCxhPVRlKDIpLnF1ZXJ5O3JldHVybiBmaShhLnZhbHVlW29dLmNoZWNrZWQsaSl8fChhLnZhbHVlW29dLmNoZWNrZWQ9aSksWGUoaSl9KSx3dCgibmdNb2RlbENoYW5nZSIsZnVu''@;'; put 'put ''Y3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgyKSxhPW8ucXVlcnlJbmRleCxsPW8uY2xhdXNlSW5kZXg7cmV0dXJuIFhlKFRlKCkuc2V0VmFyaWFibGVWYWx1ZXMoaSxhLGwpKX0pLHRlKCksSigyLCJsYWJlbCIpLFNlKDMpLHRlKCkoKX1pZigyJm4pe2NvbnN0IHQ9ZS4kaW1wbGljaXQscj1l''@;'; put 'put ''LiRpbmRleCxpPVRlKDIpLnF1ZXJ5O2llKCksZGkoIm5nTW9kZWwiLGkudmFsdWVbcl0uY2hlY2tlZCksaWUoMiksU3IoIiAiLHQuZm9ybWF0dGVkLCIgIil9fWZ1bmN0aW9uIFRybihuLGUpe2lmKDEmbiYmKEooMCwic2VjdGlvbiIsNjQpKDEsImNsci1jaGVja2JveC1jb250YWluZXIiKSxf''@;'; put 'put ''bygyLE1ybiw0LDIsImNsci1jaGVja2JveC13cmFwcGVyIixudWxsLENvKSx0ZSgpKCkpLDImbil7Y29uc3QgdD1UZSgpLnF1ZXJ5O2llKDIpLHlvKHQudmFsdWVzKX19ZnVuY3Rpb24geHJuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItbW9kYWwiLDYwKSgxLCJoMyIsNjEp''@;'; put 'put ''LFNlKDIsIlNlbGVjdCB2YWx1ZXMiKSx0ZSgpLEooMywiZGl2Iiw2MiksdnQoNCxFcm4sMiwwLCJoNSIsNjMpLHZ0KDUsVHJuLDQsMCwic2VjdGlvbiIsNjQpLHRlKCksSig2LCJkaXYiLDY1KSg3LCJidXR0b24iLDY2KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3QgaT1UZSgp''@;'; put 'put ''O3JldHVybiBpLmN1cnJlbnRRdWVyeUluZGV4PS0xLFhlKGkuY3VycmVudENsYXVzZUluZGV4PS0xKX0pLFNlKDgsIiBBcHBseSAiKSx0ZSgpKCkoKX1pZigyJm4pe2NvbnN0IHQ9ZS5xdWVyeSxyPWUucXVlcnlJbmRleCxpPWUuY2xhdXNlSW5kZXgsbz1UZSgpO3J0KCJjbHJNb2RhbE9wZW4i''@;'; put 'put ''LG8uY3VycmVudFF1ZXJ5SW5kZXg9PT1yJiZvLmN1cnJlbnRDbGF1c2VJbmRleD09PWkpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksaWUoNCksX3Qoby5pc0Fycih0LnZhbHVlKT8tMTo0KSxpZSgpLF90KG8uaXNBcnIodC52YWx1ZSk/NTotMSl9fSFmdW5jdGlvbiBwdHQobixlLHQpeyhmdW5j''@;'; put 'put ''dGlvbiBPUWUobixlLHQpeyJzdHJpbmciIT10eXBlb2YgZSYmKHQ9ZSxlPW5bR3UuTG9jYWxlSWRdKSxlPWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKSx5RVtlXT1uLHQmJih5RVtlXVtHdS5FeHRyYURhdGFdPXQpfSkobixlLHQpfShBbm4pO2xldCB6bWU9KCgpPT57dmFyIG47''@;'; put 'put ''Y2xhc3MgZXtjb25zdHJ1Y3RvcihyLGksbyxhKXt0aGlzLnNhc1N0b3JlU2VydmljZT1yLHRoaXMuZXZlbnRTZXJ2aWNlPWksdGhpcy5oZWxwZXJTZXJ2aWNlPW8sdGhpcy5jZGY9YSx0aGlzLmNhY2hpbmc9ITAsdGhpcy5yb3dzX2luY3JlbWVudD0xMDAsdGhpcy5pbml0aWFsX3Jvd3M9MWUz''@;'; put 'put ''LHRoaXMuY2xhdXNlQW10PVsiIl0sdGhpcy5udW1PcGVyYXRvcnM9WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQkVUV0VFTiIsIklOIiwiTk9UIElOIiwiTkUiXSx0aGlzLmNoYXJPcGVyYXRvcnM9WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQ09OVEFJTlMiLCJJTiIsIk5PVCBJTiIsIk5FIl0s''@;'; put 'put ''dGhpcy5ub3RJbj0hMSx0aGlzLm5vdEFycj0hMCx0aGlzLndhc0JldHdlZW49ITEsdGhpcy53aGVyZUNsYXVzZUxvYWRpbmc9ITEsdGhpcy5keW5hbWljV2hlcmVDbGF1c2U9ITAsdGhpcy51c2VQaWNrZXJzPSExLHRoaXMucXVlcnlPYmo9e2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBlOm51''@;'; put 'put ''bGwsZGR0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVWYXJpYWJsZTohMSxzdGFydHJvdzowLHJvd3M6MCxub2JzOjAsdmFsdWVzOltdLG9wZXJhdG9yczpbXX1dLGNsYXVzZUxvZ2ljOiIiLGludmFsaWRDbGF1c2U6ITF9LHRoaXMuc2VsVmFy''@;'; put 'put ''PXtpbmRleDpudWxsLGZvcm1hdDpudWxsLHR5cGU6bnVsbH0sdGhpcy5pbk9iaj1be2NoZWNrZWQ6ITEsdmFsdWU6bnVsbH1dLHRoaXMuZ3JvdXBMb2dpYz0iQU5EIix0aGlzLmNsYXVzZXM9e3F1ZXJ5T2JqOlt0aGlzLnF1ZXJ5T2JqXSxjbGF1c2VMb2dpYzpbXSxncm91cExvZ2ljOnRoaXMu''@;'; put 'put ''Z3JvdXBMb2dpY30sdGhpcy5sb2dpY09wZXJhdG9ycz1bIkFORCIsIk9SIl0sdGhpcy5xdWVyeURhdGVUaW1lPVtdLHRoaXMuY3VycmVudENsYXVzZUluZGV4PS0xLHRoaXMuY3VycmVudFF1ZXJ5SW5kZXg9LTEsdGhpcy5wZW5kaW5nSU5WYWx1ZXNTZXQ9bnVsbCx0aGlzLmlubmVyV2lkdGg9''@;'; put 'put ''d2luZG93LnNjcmVlbi53aWR0aCx0aGlzLmlubmVyV2lkdGg+NzY4JiYodGhpcy5ub0JvcmRlcj0iYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCBncmF5OyIpfWdldFF1ZXJ5RGF0ZVRpbWUocixpKXtsZXQgbz10aGlzLnF1ZXJ5RGF0ZVRpbWUuZmluZChhPT5hLmNsYXVzZUluZGV4PT09ciYmYS5x''@;'; put 'put ''dWVyeUluZGV4PT09aSk7aWYoIW8pe2NvbnN0IGE9dGhpcy5xdWVyeURhdGVUaW1lLnB1c2goe2NsYXVzZUluZGV4OnIscXVlcnlJbmRleDppLGRhdGU6IiIsdGltZToiIn0pLTE7bz10aGlzLnF1ZXJ5RGF0ZVRpbWVbYV19cmV0dXJuIG99dXNlUGlja2Vyc0NoYW5nZSgpe3RoaXMucXVlcnlE''@;'; put 'put ''YXRlVGltZT1bXSx0aGlzLnVzZVBpY2tlcnMmJnRoaXMuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKHI9PntyLmVsZW1lbnRzLmZvckVhY2goaT0+e1siREFURVRJTUUiLCJUSU1FIiwiREFURSJdLmluY2x1ZGVzKGkuZGR0eXBlKSYmaS52YWx1ZVZhcmlhYmxlJiYoaS52YWx1ZT0iIixpLnZh''@;'; put 'put ''bHVlVmFyaWFibGU9ITEpfSl9KX1yZXNldEZpbHRlcigpe3RoaXMud2hlcmVTdHJpbmc9dm9pZCAwLHRoaXMud2hlcmVDbGF1c2U9dm9pZCAwLHRoaXMucXVlcnlPYmo9e2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBlOm51bGwsZGR0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpu''@;'; put 'put ''dWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX1dfSx0aGlzLmNsYXVzZXM9e3F1ZXJ5T2JqOlt0aGlzLnF1ZXJ5T2JqXSxjbGF1c2VMb2dpYzpbXSxncm91cExvZ2ljOnRoaXMuZ3JvdXBMb2dpY30sdGhpcy53aGVyZUNsYXVzZUZuKCEwKX1zZXRUb0dsb2JhbHMoKXtpZigh''@;'; put 'put ''dGhpcy5jYWNoaW5nKXJldHVybjtjb25zdCByPWhLKFVuLnJvb3RQYXJhbSx0aGlzLnZpZXdib3hJZCk7JGMoVW4scikuZmlsdGVyLmdyb3VwTG9naWM9dGhpcy5ncm91cExvZ2ljLCJzdHJpbmciPT10eXBlb2YgdGhpcy53aGVyZUNsYXVzZSYmKCRjKFVuLHIpLmZpbHRlci53aGVyZUNsYXVz''@;'; put 'put ''ZT10aGlzLndoZXJlQ2xhdXNlKSwic3RyaW5nIj09dHlwZW9mIHRoaXMubGliZHMmJigkYyhVbixyKS5maWx0ZXIubGliZHM9dGhpcy5saWJkcyksJGMoVW4scikuZmlsdGVyLmNsYXVzZXM9dGhpcy5jbGF1c2VzfWdldEZyb21HbG9iYWxzKCl7aWYoIXRoaXMuY2FjaGluZylyZXR1cm47Y29u''@;'; put 'put ''c3Qgcj1oSyhVbi5yb290UGFyYW0sdGhpcy52aWV3Ym94SWQpOyRjKFVuLHIpLmZpbHRlci5jb2xzLmxlbmd0aD4wJiYodGhpcy5jb2xzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoJGMoVW4scikuZmlsdGVyLmNvbHMpKSksJGMoVW4scikuZmlsdGVyLnZhbHMubGVuZ3RoPjAmJih0aGlz''@;'; put 'put ''LnZhbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSgkYyhVbixyKS5maWx0ZXIudmFscykpKSwiIiE9PSRjKFVuLHIpLmZpbHRlci5ncm91cExvZ2ljJiYodGhpcy5ncm91cExvZ2ljPSRjKFVuLHIpLmZpbHRlci5ncm91cExvZ2ljLHRoaXMud2hlcmVDbGF1c2U9JGMoVW4scikuZmlsdGVy''@;'; put 'put ''LndoZXJlQ2xhdXNlLHRoaXMubGliZHM9JGMoVW4scikuZmlsdGVyLmxpYmRzLHRoaXMuY2xhdXNlcz0kYyhVbixyKS5maWx0ZXIuY2xhdXNlcyx0aGlzLndoZXJlQ2xhdXNlRm4oKSl9c2V0R3JvdXBMb2dpYyhyKXt0aGlzLmdyb3VwTG9naWM9cix0aGlzLmNsYXVzZXMuZ3JvdXBMb2dpYz1y''@;'; put 'put ''LHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9ZGF0ZUNoYW5nZShyLGksbyxhLGwpe2xldCB1PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0SnNEYXRlVG9TYXNEYXRlKHIpOyJCRVRXRUVOIj09PWkub3BlcmF0b3ImJnZvaWQgMCE9PWwmJih0aGlzLmNsYXVzZXMu''@;'; put 'put ''cXVlcnlPYmpbYV0uZWxlbWVudHNbb10udmFsdWVbbF09dSksdGhpcy5zZXRWYXJpYWJsZVZhbHVlcyh1LG8sYSl9ZGF0ZVRpbWVDaGFuZ2UocixpLG8sYSl7Y29uc3QgbD10aGlzLmdldFF1ZXJ5RGF0ZVRpbWUobyxpKTtpZigiIj09PWwuZGF0ZSl7aWYoIiI9PT1yLnZhbHVlKXJldHVybjts''@;'; put 'put ''LmRhdGU9ci52YWx1ZS5zcGxpdCgiOiIpWzBdfWNvbnN0IHU9cGFyc2VJbnQobC50aW1lLnNwbGl0KCI6IilbMF0pLGc9cGFyc2VJbnQobC50aW1lLnNwbGl0KCI6IilbMV0pLEU9cGFyc2VJbnQobC50aW1lLnNwbGl0KCI6IilbMl0pfHwwO2xldCBPPW5ldyBEYXRlKGwuZGF0ZSksWj1uZXcg''@;'; put 'put ''RGF0ZShPLmdldEZ1bGxZZWFyKCksTy5nZXRNb250aCgpLE8uZ2V0RGF0ZSgpLHUsZyxFKSxlZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEpzRGF0ZVRvU2FzRGF0ZShaLCJzZWNvbmRzIik7IkJFVFdFRU4iPT09ci5vcGVyYXRvciYmdm9pZCAwIT09YSYmKHRoaXMuY2xhdXNlcy5xdWVy''@;'; put 'put ''eU9ialtvXS5lbGVtZW50c1tpXS52YWx1ZVthXT1lZSksdGhpcy5zZXRWYXJpYWJsZVZhbHVlcyhlZSxpLG8pfXRpbWVDaGFuZ2UocixpLG8sYSxsKXtyPXIudGFyZ2V0LnZhbHVlO2xldCBlZT02MCpwYXJzZUludChyLnNwbGl0KCI6IilbMF0pKjYwKzYwKnBhcnNlSW50KHIuc3BsaXQoIjoi''@;'; put 'put ''KVsxXSkrKHBhcnNlSW50KHIuc3BsaXQoIjoiKVsyXSl8fDApOyJCRVRXRUVOIj09PWkub3BlcmF0b3ImJnZvaWQgMCE9PWwmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbb10udmFsdWVbbF09ZWUpLHRoaXMuc2V0VmFyaWFibGVWYWx1ZXMoZWUsbyxhKX1keW5hbWljV2hl''@;'; put 'put ''cmVDbGF1c2VDcmVhdG9yKHIsaSl7bGV0IG89W107aWYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD4xfHx0aGlzLmNsYXVzZXMucXVlcnlPYmpbcl0uZWxlbWVudHMubGVuZ3RoPjEpZm9yKGxldCBhPTA7YTx0aGlzLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoO2ErKylmb3IobGV0IGw9''@;'; put 'put ''MDtsPHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cy5sZW5ndGg7bCsrKXtpZihhPT09ciYmbD09PWl8fFtudWxsLHZvaWQgMF0uaW5jbHVkZXModGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzW2xdLnZhcmlhYmxlKXx8W251bGwsdm9pZCAwXS5pbmNsdWRlcyh0aGlz''@;'; put 'put ''LmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbbF0ub3BlcmF0b3IpfHxbbnVsbCx2b2lkIDBdLmluY2x1ZGVzKHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50c1tsXS52YWx1ZSkpY29udGludWU7bGV0IHU9IiI7Y29uc3QgZz10aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxl''@;'; put 'put ''bWVudHNbbF0ub3BlcmF0b3IsRT10aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbbF0udmFyaWFibGU7IkJFVFdFRU4iPT09Zz91PWAke3RoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50c1tsXS52YWx1ZVswXX0gQU5EICR7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdW2xd''@;'; put 'put ''LnZhbHVlWzFdfWA6IklOIj09PWd8fCJOT1QgSU4iPT09Zz8odGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdW2xdLnZhbHVlLmZvckVhY2goTz0+e2lmKE8uY2hlY2tlZCl7bGV0IFo9Ty52YWw7InN0cmluZyIhPXR5cGVvZiBafHwoMCx5NC5pc1NwZWNpYWxNaXNzaW5nKShaKT91Lmxlbmd0aD4w''@;'; put 'put ''P3UrPWAsJHtafWA6dT1gKCR7Wn1gOnUubGVuZ3RoPjA/dSs9YCwnJHtafSdgOnU9YCgnJHtafSdgfX0pLHUubGVuZ3RoPjAmJih1Kz0iKSIpKToiIj09PXRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50c1tsXS52YWx1ZT91PSJjaGFyIj09PXRoaXMuY2xhdXNlcy5xdWVyeU9ialth''@;'; put 'put ''XS5lbGVtZW50c1tsXS50eXBlPyInICciOiIuIjoiY2hhciI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbbF0udHlwZSYmKHU9YCcke3RoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50c1tsXS52YWx1ZX0nYCksby5wdXNoKHtHUk9VUF9MT0dJQzp0aGlzLmNsYXVz''@;'; put 'put ''ZXMuZ3JvdXBMb2dpYyxTVUJHUk9VUF9MT0dJQzp0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uY2xhdXNlTG9naWN8fCJBTkQiLFNVQkdST1VQX0lEOmEsVkFSSUFCTEVfTk06RSxPUEVSQVRPUl9OTTpnLFJBV19WQUxVRTp1fHx0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbbF0u''@;'; put 'put ''dmFsdWV9KX1yZXR1cm4gb31nZXRWYWx1ZXNMb2FkTW9yZShyLGksbyxhKXt2YXIgbD10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtjb25zdCB1PWwubGliZHN8fCIiO3RyeXtpZih2b2lkIDAhPT1sLmNvbHMpe2ZvcihsZXQgSGU9MDtIZTxsLmNvbHMubGVuZ3RoO0hlKyspbC5jb2xzW0hl''@;'; put 'put ''XS5OQU1FPT09aSYmKGwuc2VsVmFyLmluZGV4PUhlKTtjb25zdCBnPWwuY29sc1tsLnNlbFZhci5pbmRleF0uRERUWVBFLHtzdGFydHJvdzpFLHJvd3M6T309bC5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzW29dLFo9bC5yb3dzX2luY3JlbWVudCxlZT1FK087bGV0IHZlPVtdO2wuZHlu''@;'; put 'put ''YW1pY1doZXJlQ2xhdXNlJiYodmU9bC5keW5hbWljV2hlcmVDbGF1c2VDcmVhdG9yKGEsbykpO2NvbnN0IE1lPVsiREFURVRJTUUiLCJUSU1FIiwiREFURSJdLmluY2x1ZGVzKGcpO2wuc2FzU3RvcmVTZXJ2aWNlLmdldFF1ZXJ5VmFsdWVzKGksdSx2ZSxlZSxaKS50aGVuKEhlPT57Y29uc3Qg''@;'; put 'put ''V2U9SGUudmFscyx7U1RBUlRST1c6YXQsUk9XUzpDdCxOT0JTOkF0fT1IZS5tZXRhWzBdO2lmKGwuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50c1tvXS5zdGFydHJvdz1hdCxsLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbb10ucm93cz1DdCxsLmNsYXVzZXMucXVlcnlPYmpbYV0u''@;'; put 'put ''ZWxlbWVudHNbb10ubm9icz1BdCwxPT09V2UubGVuZ3RoJiYiIj09PVdlWzBdLkZPUk1BVFRFRCYmIiI9PT1XZVswXS5VTkZPUk1BVFRFRD9yLmxvYWRNb3JlRmluaXNoZWQoITEpOihsLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbb10udmFsdWVzLnB1c2goLi4uV2UubWFwKGduPT57''@;'; put 'put ''Y29uc3QgVG49Im51bSI9PT1IZS4kdmFscy52YXJzLlVORk9STUFUVEVELnR5cGU7bGV0IHFyPVRuJiYoMCx5NC5pc1NwZWNpYWxNaXNzaW5nKShnbi5VTkZPUk1BVFRFRCk/Ii4iK2duLlVORk9STUFUVEVEOmduLlVORk9STUFUVEVEO3JldHVybiBUbiYmbnVsbD09PXFyJiYocXI9Ii4iKSx7''@;'; put 'put ''Zm9ybWF0dGVkOk1lP2duLkZPUk1BVFRFRC5zcGxpdCgiLiIpWzBdOmduLkZPUk1BVFRFRCx1bmZvcm1hdHRlZDpxcn19KSksci5sb2FkTW9yZUZpbmlzaGVkKEF0LWwuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50c1tvXS52YWx1ZXMubGVuZ3RoPjApKSxsLndoZXJlQ2xhdXNlRm4oKSxs''@;'; put 'put ''LnNldFRvR2xvYmFscygpLGwud2hlcmVDbGF1c2VMb2FkaW5nPSExLG51bGwhPT1sLnBlbmRpbmdJTlZhbHVlc1NldCl7Y29uc3R7Y2xhdXNlSW5kZXg6S3QscXVlcnlJbmRleDpxdH09bC5wZW5kaW5nSU5WYWx1ZXNTZXQ7bC5zZXRJTlZhbHVlcyhLdCxxdCksbC5wZW5kaW5nSU5WYWx1ZXNT''@;'; put 'put ''ZXQ9bnVsbH1sLmNkZi5kZXRlY3RDaGFuZ2VzKCl9KS5jYXRjaChIZT0+e2wud2hlcmVDbGF1c2VMb2FkaW5nPSExfSl9fWNhdGNoKGcpe2wuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigicHVibGljL2dldGNvbHZhbHMiLGcpfX0pKCl9Z2V0VmFsdWVzKHIsaSxvKXt2YXIgYT10''@;'; put 'put ''aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXthLndoZXJlQ2xhdXNlTG9hZGluZz0hMDtsZXQgbD0iIjt2b2lkIDAhPT1hLmxpYmRzJiYobD1hLmxpYmRzKSxhLmNsZWFyVmFsdWVzKGksbyksYS5jbGF1c2VzLnF1ZXJ5T2JqW29dLmVsZW1lbnRzW2ldLnZhbHVlcz1bXSxhLmNsYXVzZXMucXVl''@;'; put 'put ''cnlPYmpbb10uZWxlbWVudHNbaV0udmFsdWU9IiIsYS5jbGF1c2VzLnF1ZXJ5T2JqW29dLmVsZW1lbnRzW2ldLm9wZXJhdG9yPSI9IixhLmNsYXVzZXMucXVlcnlPYmpbb10uZWxlbWVudHNbaV0udmFyaWFibGU9cjt0cnl7aWYodm9pZCAwIT09YS5jb2xzKXtmb3IobGV0IE89MDtPPGEuY29s''@;'; put 'put ''cy5sZW5ndGg7TysrKWEuY29sc1tPXS5OQU1FPT09ciYmKGEuc2VsVmFyLmluZGV4PU8pO2NvbnN0IHU9YS5jb2xzW2Euc2VsVmFyLmluZGV4XS5ERFRZUEU7YS5jbGF1c2VzLnF1ZXJ5T2JqW29dLmVsZW1lbnRzW2ldLmRkdHlwZT11LGEuY2xhdXNlcy5xdWVyeU9ialtvXS5lbGVtZW50c1tp''@;'; put 'put ''XS50eXBlPWEuY29sc1thLnNlbFZhci5pbmRleF0uVFlQRSxhLmNsYXVzZXMucXVlcnlPYmpbb10uZWxlbWVudHNbaV0ub3BlcmF0b3JzPSJudW0iPT09YS5jbGF1c2VzLnF1ZXJ5T2JqW29dLmVsZW1lbnRzW2ldLnR5cGU/YS5udW1PcGVyYXRvcnM6YS5jaGFyT3BlcmF0b3JzO2xldCBnPVtd''@;'; put 'put ''O2EuZHluYW1pY1doZXJlQ2xhdXNlJiYoZz1hLmR5bmFtaWNXaGVyZUNsYXVzZUNyZWF0b3IobyxpKSk7Y29uc3QgRT1bIkRBVEVUSU1FIiwiVElNRSIsIkRBVEUiXS5pbmNsdWRlcyh1KTthLnNhc1N0b3JlU2VydmljZS5nZXRRdWVyeVZhbHVlcyhyLGwsZywxLGEuaW5pdGlhbF9yb3dzKS50''@;'; put 'put ''aGVuKE89Pntjb25zdCBaPU8udmFscyx7U1RBUlRST1c6ZWUsUk9XUzp2ZSxOT0JTOk1lfT1PLm1ldGFbMF07aWYoYS5jbGF1c2VzLnF1ZXJ5T2JqW29dLmVsZW1lbnRzW2ldLnN0YXJ0cm93PWVlLGEuY2xhdXNlcy5xdWVyeU9ialtvXS5lbGVtZW50c1tpXS5yb3dzPXZlLGEuY2xhdXNlcy5x''@;'; put 'put ''dWVyeU9ialtvXS5lbGVtZW50c1tpXS5ub2JzPU1lLGEuY2xhdXNlcy5xdWVyeU9ialtvXS5lbGVtZW50c1tpXS52YWx1ZXM9Wi5tYXAoSGU9Pntjb25zdCBXZT0ibnVtIj09PU8uJHZhbHMudmFycy5VTkZPUk1BVFRFRC50eXBlO2xldCBDdD1XZSYmKDAseTQuaXNTcGVjaWFsTWlzc2luZyko''@;'; put 'put ''SGUuVU5GT1JNQVRURUQpPyIuIitIZS5VTkZPUk1BVFRFRDpIZS5VTkZPUk1BVFRFRDtyZXR1cm4gV2UmJm51bGw9PT1DdCYmKEN0PSIuIikse2Zvcm1hdHRlZDpFP0hlLkZPUk1BVFRFRC5zcGxpdCgiLiIpWzBdOkhlLkZPUk1BVFRFRCx1bmZvcm1hdHRlZDpDdH19KS5zbGljZSgwLDJlMyks''@;'; put 'put ''YS53aGVyZUNsYXVzZUZuKCksYS5zZXRUb0dsb2JhbHMoKSxhLndoZXJlQ2xhdXNlTG9hZGluZz0hMSxudWxsIT09YS5wZW5kaW5nSU5WYWx1ZXNTZXQpe2NvbnN0e2NsYXVzZUluZGV4OkhlLHF1ZXJ5SW5kZXg6V2V9PWEucGVuZGluZ0lOVmFsdWVzU2V0O2Euc2V0SU5WYWx1ZXMoSGUsV2Up''@;'; put 'put ''LGEucGVuZGluZ0lOVmFsdWVzU2V0PW51bGx9YS5jZGYuZGV0ZWN0Q2hhbmdlcygpfSkuY2F0Y2goTz0+e2Eud2hlcmVDbGF1c2VMb2FkaW5nPSExfSl9fWNhdGNoKHUpe2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigicHVibGljL2dldGNvbHZhbHMiLHUpfX0pKCl9Z2V0bG9n''@;'; put 'put ''aWMocil7dGhpcy5sb2dpYz1yLHRoaXMud2hlcmVDbGF1c2VGbigpfXNldExvZ2ljKCl7dGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1pc0FycihyKXtyZXR1cm4gciBpbnN0YW5jZW9mIEFycmF5JiZyLmxlbmd0aD4wJiZ0eXBlb2YgclswXS5jaGVja2VkPCJ1In1z''@;'; put 'put ''ZWxlY3RlZExhYmVsQ2hhbmdlKHIsaSl7aS52YWx1ZVZhcmlhYmxlPSJWYXJpYWJsZSI9PT1yLGkudmFsdWU9IiIsdGhpcy53aGVyZUNsYXVzZUZuKCl9dmFyaWFibGVJbnB1dENoYW5nZShyLGksbyxhKXt0aGlzLmdldFZhbHVlcyhyLGksbyl9c2V0VmFyaWFibGVWYWx1ZXMocixpLG8pe2xl''@;'; put 'put ''dCBhPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtvXS5lbGVtZW50c1tpXS5vcGVyYXRvcjsiQkVUV0VFTiIhPT1hJiYiSU4iIT09YSYmIk5PVCBJTiIhPT1hJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW29dLmVsZW1lbnRzW2ldLnZhbHVlPXIudG9TdHJpbmcoKSksdGhpcy53aGVyZUNsYXVzZUZu''@;'; put 'put ''KCksdGhpcy5zZXRUb0dsb2JhbHMoKX1zZXRWYXJpYWJsZU9wZXJhdG9yKHIsaSxvKXtsZXQgYT10aGlzLmNsYXVzZXMucXVlcnlPYmpbb10uZWxlbWVudHNbcl0udmFsdWU7YSBpbnN0YW5jZW9mIEFycmF5JiYiSU4iIT09aSYmIk5PVCBJTiIhPT1pJiYoYT1hIGluc3RhbmNlb2YgQXJyYXkm''@;'; put 'put ''JjI9PT1hLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiBhWzBdP2FbMF06IiIpLHRoaXMuY2xlYXJWYWx1ZXNPcGVyYXRvcihyLG8pLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtvXS5lbGVtZW50c1tyXS5vcGVyYXRvcj1pLCgiPSI9PT1pfHwiPiI9PT1pfHwiPCI9PT1pfHwiPD0iPT09aXx8Ij49''@;'; put 'put ''Ij09PWl8fCJORSI9PT1pKSYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtvXS5lbGVtZW50c1tyXS52YWx1ZT1hKSwiQkVUV0VFTiI9PT1pJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW29dLmVsZW1lbnRzW3JdLnZhbHVlPVtdLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtvXS5lbGVtZW50c1tyXS52''@;'; put 'put ''YWx1ZS5wdXNoKGEpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtvXS5lbGVtZW50c1tyXS52YWx1ZS5wdXNoKCIiKSksKCJJTiI9PT1pfHwiTk9UIElOIj09PWkpJiZ0aGlzLnNldElOVmFsdWVzKG8sciksdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1zZXRJTlZhbHVl''@;'; put 'put ''cyhyLGkpe2NvbnN0IG89W10sYT10aGlzLmNsYXVzZXMucXVlcnlPYmpbcl0uZWxlbWVudHNbaV0udmFsdWVzO2EubGVuZ3RoPDEmJih0aGlzLnBlbmRpbmdJTlZhbHVlc1NldD17Y2xhdXNlSW5kZXg6cixxdWVyeUluZGV4Oml9KTtmb3IobGV0IGw9MDtsPGEubGVuZ3RoO2wrKylvLnB1c2go''@;'; put 'put ''e2NoZWNrZWQ6ITEsdmFsOmFbbF0uZm9ybWF0dGVkfSk7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW3JdLmVsZW1lbnRzW2ldLnZhbHVlPW99Y2xlYXJWYWx1ZXMocixpKXt0aGlzLmNsYXVzZXMucXVlcnlPYmpbaV0uZWxlbWVudHNbcl0udmFsdWU9IiJ9Y2xlYXJWYWx1ZXNPcGVyYXRvcihyLGkp''@;'; put 'put ''e2xldCBvPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtpXS5lbGVtZW50c1tyXS5vcGVyYXRvcjsoIkJFVFdFRU4iPT09b3x8IklOIj09PW98fCJOT1QgSU4iPT09b3x8IkNPTlRBSU5TIj09PW8pJiZ0aGlzLmNsZWFyVmFsdWVzKHIsaSl9aGFzSW52YWxpZENsdWFzZShyKXtmb3IobGV0IGkgb2Yg''@;'; put 'put ''cilpZihpLmludmFsaWRDbGF1c2U9ITEsIiI9PT1pLnZhbHVlJiYiTkUiIT09aS5vcGVyYXRvciYmIkNPTlRBSU5TIiE9PWkub3BlcmF0b3J8fG51bGw9PT1pLnZhcmlhYmxlfHxudWxsPT09aS5vcGVyYXRvcnx8bnVsbD09PWkudmFsdWUpcmV0dXJuIGkuaW52YWxpZENsYXVzZT0hMCwhMDty''@;'; put 'put ''ZXR1cm4gci5pbnZhbGlkQ2xhdXNlPSExLCExfWhhc0ludmFsaWRHcm91cENsdWFzZSgpe2ZvcihsZXQgcj0wO3I8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aDtyKyspe2lmKHRoaXMuaGFzSW52YWxpZENsdWFzZSh0aGlzLmNsYXVzZXMucXVlcnlPYmpbcl0uZWxlbWVudHMpKXJldHVy''@;'; put 'put ''biB0aGlzLmNsYXVzZXMucXVlcnlPYmpbcl0uaW52YWxpZENsYXVzZT0hMCwhMDt0aGlzLmNsYXVzZXMucXVlcnlPYmpbcl0uaW52YWxpZENsYXVzZT0hMX1yZXR1cm4hMX1hZGRDbGF1c2Uocil7aWYodGhpcy5oYXNJbnZhbGlkQ2x1YXNlKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtyXS5lbGVt''@;'; put 'put ''ZW50cykpcmV0dXJuIHZvaWQgdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJDYW5ub3QgYWRkIG5ldyBjbGF1c2UsIHdoZW4gb25lIG9yIG1vcmUgY2xhdXNlcyBhcmUgaW52YWxpZCBvciBlbXB0eS4iKTt0aGlzLmNsYXVzZUFtdC5wdXNoKCIiKSx0aGlzLmNsYXVz''@;'; put 'put ''ZXMucXVlcnlPYmpbcl0uZWxlbWVudHMucHVzaCh7bG9naWM6bnVsbCx0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX0pO2xldCBpPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtyXS5jbGF1c2VMb2dpYzt0aGlzLmNs''@;'; put 'put ''YXVzZXMucXVlcnlPYmpbcl0uY2xhdXNlTG9naWM9dHlwZW9mIGk+InUiPyJBTkQiOiJPUiI9PT1pPyJPUiI6IkFORCIsdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1hZGRHcm91cENsYXVzZSgpe3RoaXMuaGFzSW52YWxpZEdyb3VwQ2x1YXNlKCk/dGhpcy5ldmVu''@;'; put 'put ''dFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJDYW5ub3QgYWRkIG5ldyBjbGF1c2UsIHdoZW4gb25lIG9yIG1vcmUgY2xhdXNlcyBhcmUgaW52YWxpZCBvciBlbXB0eS4iKToodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLnB1c2goe2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBlOm51bGws''@;'; put 'put ''dmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX1dfSksdGhpcy5zZXRUb0dsb2JhbHMoKSl9aXNJbkh0bWxDb2xsZWN0aW9uKHIsaSl7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspaWYoaVtvXS52YWx1ZT09PXIpcmV0dXJuITA7''@;'; put 'put ''cmV0dXJuITF9cmVtb3ZlR3JvdXBDbGF1c2Uocil7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLnNwbGljZShyLDEpLHRoaXMud2hlcmVDbGF1c2VGbigpfXJlbW92ZUNsYXVzZShyLGkpe3RoaXMuY2xhdXNlcy5xdWVyeU9ialtpXS5lbGVtZW50cy5zcGxpY2UociwxKSx0aGlzLndoZXJlQ2xhdXNl''@;'; put 'put ''Rm4oKSx0aGlzLnNldFRvR2xvYmFscygpfXdoZXJlQ2xhdXNlRm4ocj0hMSl7Y29uc3QgaT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuY2xhdXNlcyk7aWYociYmKGkucXVlcnlPYmpbMF0uZWxlbWVudHM9W10pLHZvaWQgMCE9PXRoaXMubGliZHMpe2xldCBvPXRoaXMuc2Fz''@;'; put 'put ''U3RvcmVTZXJ2aWNlLndoZXJlQ2xhdXNlQ3JlYXRvcihpLHRoaXMuZ3JvdXBMb2dpYyx0aGlzLmxpYmRzKTtyfHwodGhpcy53aGVyZUNsYXVzZT1vLndoZXJlQ2xhdXNlLHRoaXMud2hlcmVTdHJpbmc9by5zdHJpbmcpfX1uZ0FmdGVyVmlld0luaXQoKXt2YXIgcj10aGlzO3JldHVybiBDcihm''@;'; put 'put ''dW5jdGlvbiooKXtyLl9yZW1vdmVRcnk9ci5zYXNTdG9yZVNlcnZpY2UucmVtb3ZlUXVlcnkuc3Vic2NyaWJlKGk9PntyLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPj0xJiYoci5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD0xLHIuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5sZW5ndGg+''@;'; put 'put ''PTEmJihyLmNsYXVzZXMucXVlcnlPYmpbMF0uZWxlbWVudHMubGVuZ3RoPTEsci5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzPVtdLHIuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5wdXNoKHtsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGws''@;'; put 'put ''dmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfSksci53aGVyZUNsYXVzZUZuKCkpKX0pLHIuY29sdW1uc1N1Yj1yLnNhc1N0b3JlU2VydmljZS5jb2x1bW5zLnN1YnNjcmliZShpPT57bGV0IG89aS5kYXRhLmNvbHM7Y29uc3QgYT1oSyhVbi5yb290UGFyYW0sci52aWV3Ym94SWQp''@;'; put 'put ''OyJob21lIiE9PVVuLnJvb3RQYXJhbSYmImVkaXRvciIhPT1Vbi5yb290UGFyYW18fChyLmNvbHM9byxyLmxpYmRzPWkubGliZHMsJGMoVW4sYSkuZmlsdGVyLmNvbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvKSkpLCJ2aWV3Ij09PVVuLnJvb3RQYXJhbSYmJGMoVW4sYSkuZmlsdGVy''@;'; put 'put ''LmNvbHMubGVuZ3RoPDEmJihyLmNvbHM9byxyLmxpYmRzPWkubGliZHMsJGMoVW4sYSkuZmlsdGVyLmNvbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvKSkpLHIubGliZHN8fChyLmxpYmRzPWkubGliZHMpfSksci52YWx1ZXNTdWI9ci5zYXNTdG9yZVNlcnZpY2UudmFsdWVzLnN1YnNj''@;'; put 'put ''cmliZShpPT57Y29uc3Qgbz1oSyhVbi5yb290UGFyYW0sci52aWV3Ym94SWQpOyRjKFVuLG8pLmZpbHRlci52YWxzLmxlbmd0aDwxJiYoci52YWxzPWkudmFscywkYyhVbixvKS5maWx0ZXIudmFscz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGkudmFscykpKX0pfSkoKX1vbkF1dG9jb21w''@;'; put 'put ''bGV0ZUxvYWRpbmdNb3JlKHIsaSxvLGEpe3RoaXMuZ2V0VmFsdWVzTG9hZE1vcmUocixpLG8sYSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5nZXRGcm9tR2xvYmFscygpLHNldFRpbWVvdXQoKCk9PntsZXQgcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjdmFsc192YXJfaWQwXzAiKTty''@;'; put 'put ''JiZyLmZvY3VzKCl9LDUwMCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbHVtbnNTdWImJnRoaXMuY29sdW1uc1N1Yi51bnN1YnNjcmliZSgpLHRoaXMudmFsdWVzU3ViJiZ0aGlzLnZhbHVlc1N1Yi51bnN1YnNjcmliZSgpfXN0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihp''@;'; put 'put ''KXtyZXR1cm4gbmV3KGl8fGUpKHplKEJwKSx6ZSh1ZCksemUoZmgpLHplKFVsKSl9LHRoaXMuXHUwMjc1Y21wPVByKHt0eXBlOmUsc2VsZWN0b3JzOltbImFwcC1xdWVyeSJdXSxpbnB1dHM6e2NhY2hpbmc6ImNhY2hpbmciLHZpZXdib3hJZDoidmlld2JveElkIn0sc3RhbmRhbG9uZTohMSxm''@;'; put 'put ''ZWF0dXJlczpbYm8oW3twcm92aWRlOkY1LHVzZVZhbHVlOiJlbi1HQiJ9XSldLGRlY2xzOjM5LHZhcnM6OSxjb25zdHM6W1sicGlja2VyIiwiIl0sWyJub3RQaWNrZXIiLCIiXSxbIm5vdFBpY2tlclJhbmdlIiwiIl0sWyJjaGVja2JveFZhbHVlcyIsIiJdLFsxLCJjbHItZmxleC1yb3ciLCJj''@;'; put 'put ''bHItZm9ybS1jb250cm9sIiwibS0wIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsImNsci1jb250cm9sLWxhYmVsIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5l''@;'; put 'put ''ciIsIm1sLTE1Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsImlkIiwidXNlUGlja2VycyIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiXSxbMSwiY2xyLXJvdyJdLFsxLCJzZWxlY3QiLCJjbHItY29sLW1kLTIiLCJtYi0zMCJdLFsiY2xyU2VsZWN0''@;'; put 'put ''IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sWzMsInNlbGVjdGVkIl0sWzEsImNsci1jb2wtbWQtMTAiLCJtYi0zMCJdLFsxLCJsaW5lLW51bWJlcnMiLCJsYW5ndWFnZS1tYXJrdXAiXSxbMSwibGFuZ3VhZ2Utc3FsIl0sWzEsImNvbnRlbnQiXSxbMSwiY2xh''@;'; put 'put ''dXNlcy1jb250YWluZXIiLCJjbHItY29sLW1kLTEyIl0sWzEsImNsYXVzZS1yb3ciXSxbMSwicHJvZ3Jlc1N0YXRpYyIsInByb2dyZXNzIiwibG9vcCJdLFsxLCJjbGF1c2UtbG9naWMiLCJjbHItY29sLW1kLTIiXSxbMSwic2VsZWN0Il0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWxDaGFu''@;'; put 'put ''Z2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJidG4tYmxvY2siLCJtdC0xMCJdLFsxLCJjbGF1c2UtcXVlcnkiLCJjbHItY29sLW1kLTEwIl0sWyJzaGFwZSIsInRpbWVzIiwic2l6ZSIsIjM2IiwxLCJyZW1vdmUtZ3JvdXAtY2xhdXNlLWJ1dHRvbiJd''@;'; put 'put ''LFsxLCJjbHItcm93IiwzLCJpbnZhbGlkLWNsYXVzZSJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsImJ0bi1ibG9jayIsIm10LTEwIiwzLCJjbGljayJdLFsic2hhcGUiLCJwbHVzIl0sWyJzaGFwZSIsInRpbWVzIiwic2l6ZSIsIjM2IiwxLCJyZW1vdmUtZ3JvdXAtY2xhdXNlLWJ1dHRvbiIs''@;'; put 'put ''MywiY2xpY2siXSxbMSwidmFyaWFibGUtY29sIiwiZm9ybS1ncm91cCIsImNsci1jb2wtbWQtMyJdLFsxLCJkYXRhbGlzdC13cmFwcGVyIl0sWyJsYWJlbCIsIlZhcmlhYmxlIiwzLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsImlkIiwiaW5wdXRJZCIsImVtaXRPbmx5U2VsZWN0ZWQi''@;'; put 'put ''LCJ2YWx1ZSJdLFsxLCJvcGVyYXRvci1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNvbC1tZC0zIl0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjbGFzcyIsInZhbHVlLWNvbCBmb3JtLWdyb3VwIGNsci1jb2wtbWQtMyIsNCwibmdWYXIiXSxbMSwiY2xh''@;'; put 'put ''dXNlLWJ1dHRvbnMiLCJjbHItY29sLW1kLTIiLCJidG4tZ3JvdXAiXSxbMSwiYnRuIiwiYnRuLXdhcm5pbmciLCJidG4tYmxvY2siLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwibWludXMiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWzEs''@;'; put 'put ''InZhbHVlLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1kLTMiXSxbMSwiY2hlY2tib3gtdmFscyJdLFsxLCJzaW5nbGUtZmllbGQtdmFscyJdLFsxLCJyYW5nZS12YWxzIl0sWzEsImNvbnRhaW5zLXZhbHMiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIiwzLCJjbGlj''@;'; put 'put ''ayJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwiZnJvbSJdLFsxLCJ0byJdLFsidHlwZSIsInRleHQiLDEsImlucHV0LXZhbCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwiZGF0ZSIsMywi''@;'; put 'put ''ZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiXSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwidGltZSIsMywiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiXSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwiZGF0ZSIsMywidmFsdWVDaGFuZ2UiLCJkaXNhYmxl''@;'; put 'put ''U29mdHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSJdLFsibGFiZWwiLCJWYWx1ZSIsInR5cGUiLCJkYXRlIiwzLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsImRpc2FibGVTb2Z0c2VsZWN0IiwiaW5wdXRJZCIsInZhbHVlIl0sWyJ0eXBlIiwidGltZSIsMywidmFsdWVDaGFuZ2UiLCJv''@;'; put 'put ''bklucHV0RXZlbnQiLCJkaXNhYmxlU29mdHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSJdLFsibGFiZWwiLCJWYWx1ZSIsInR5cGUiLCJ0aW1lIiwzLCJvbklucHV0RXZlbnQiLCJkaXNhYmxlU29mdHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSJdLFsibGFiZWwiLCJWYWx1ZSIsMywic2VsZWN0''@;'; put 'put ''ZWRMYWJlbENoYW5nZSIsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50Iiwib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsInNlY29uZExhYmVsIiwiZW1pdE9ubHlTZWxlY3RlZCIsImlucHV0SWQiLCJ2YWx1ZSIsImVuYWJsZUxvYWRNb3JlIl0sWzMsInZhbHVlIl0sWyJsYWJlbCIsIlZh''@;'; put 'put ''bHVlIiwzLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLCJpbnB1dElkIiwidmFsdWUiLCJlbmFibGVMb2FkTW9yZSIsImRpc2FibGVkIl0sWzEsImluLXZhbHVlcy1tb2RhbCIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJs''@;'; put 'put ''ZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsIm5vLXZhbHVlcyJdLFsxLCJmb3JtLWJsb2NrIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJD''@;'; put 'put ''aGVja2JveCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oaSxvKXtpZigxJmkpe2NvbnN0IGE9d24oKTtKKDAsImRpdiIsNCkoMSwiZGl2Iiw1KSgyLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDMsImlucHV0Iiw2KSxoaSgibmdNb2RlbENoYW5n''@;'; put 'put ''ZSIsZnVuY3Rpb24odSl7cmV0dXJuIFllKGEpLGZpKG8uZHluYW1pY1doZXJlQ2xhdXNlLHUpfHwoby5keW5hbWljV2hlcmVDbGF1c2U9dSksWGUodSl9KSx0ZSgpLEooNCwibGFiZWwiLDcpLFNlKDUsIkR5bmFtaWMgd2hlcmUgY2xhdXNlIiksdGUoKSgpKCksSig2LCJkaXYiLDgpKDcsImNs''@;'; put 'put ''ci1jaGVja2JveC13cmFwcGVyIikoOCwiaW5wdXQiLDkpLGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih1KXtyZXR1cm4gWWUoYSksZmkoby51c2VQaWNrZXJzLHUpfHwoby51c2VQaWNrZXJzPXUpLFhlKHUpfSksd3QoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gWWUoYSksWGUoby51''@;'; put 'put ''c2VQaWNrZXJzQ2hhbmdlKCkpfSksdGUoKSxKKDksImxhYmVsIiw3KSxTZSgxMCwiIFVzZSBwaWNrZXJzICIpLHRlKCkoKSgpKCksSigxMSwiZGl2IiwxMCkoMTIsImRpdiIsMTEpKDEzLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDE0LCJsYWJlbCIpLFNlKDE1LCJHcm91cCBsb2dpYyIpLHRl''@;'; put 'put ''KCksSigxNiwic2VsZWN0IiwxMiksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHUpe3JldHVybiBZZShhKSxmaShvLmdyb3VwTG9naWMsdSl8fChvLmdyb3VwTG9naWM9dSksWGUodSl9KSx3dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gWWUoYSksWGUoby5zZXRHcm91''@;'; put 'put ''cExvZ2ljKG8uZ3JvdXBMb2dpYykpfSksX28oMTcsR25uLDIsMiwib3B0aW9uIiwxMyxDbyksdGUoKSgpKCksSigxOSwiZGl2IiwxNCkoMjAsInByZSIsMTUpLFNlKDIxLCIgICAgICAiKSx2dCgyMiwkbm4sNiwwKSxKKDIzLCJjb2RlIiwxNiksU2UoMjQpLHRlKCksU2UoMjUsIlxuICAgICIp''@;'; put 'put ''LHRlKCkoKSgpLEooMjYsImRpdiIsMTcpKDI3LCJkaXYiLDE4KSx2dCgyOCxxbm4sMSwwLCJkaXYiKSxfbygyOSxkcm4sMTcsNiwiZGl2IiwxOSxDbyksdGUoKSgpLFluKDMxLGdybiwzLDEsIm5nLXRlbXBsYXRlIixudWxsLDAsY2QpKDMzLHdybiwzLDcsIm5nLXRlbXBsYXRlIixudWxsLDEs''@;'; put 'put ''Y2QpKDM1LFNybiwzLDQsIm5nLXRlbXBsYXRlIixudWxsLDIsY2QpKDM3LHhybiw5LDQsIm5nLXRlbXBsYXRlIixudWxsLDMsY2QpfTImaSYmKGllKDMpLGRpKCJuZ01vZGVsIixvLmR5bmFtaWNXaGVyZUNsYXVzZSksaWUoNSksZGkoIm5nTW9kZWwiLG8udXNlUGlja2VycyksaWUoOCkscnQo''@;'; put 'put ''ImRpc2FibGVkIiwobnVsbD09by5jbGF1c2VzfHxudWxsPT1vLmNsYXVzZXMucXVlcnlPYmo/bnVsbDpvLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoKTwxKSxkaSgibmdNb2RlbCIsby5ncm91cExvZ2ljKSxpZSgpLHlvKG8ubG9naWNPcGVyYXRvcnMpLGllKDUpLF90KG8ud2hlcmVDbGF1c2VM''@;'; put 'put ''b2FkaW5nPzIyOi0xKSxpZSgyKSxwcihvLndoZXJlQ2xhdXNlKSxpZSgzKSx3cigiY2xyLWNvbC1tZC0xMCIsKG51bGw9PW8uY2xhdXNlc3x8bnVsbD09by5jbGF1c2VzLnF1ZXJ5T2JqP251bGw6by5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aCk+MSksaWUoKSxfdCgobnVsbD09by5jbGF1c2Vz''@;'; put 'put ''fHxudWxsPT1vLmNsYXVzZXMucXVlcnlPYmo/bnVsbDpvLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoKT4xPzI4Oi0xKSxpZSgpLHlvKG8uY2xhdXNlcy5xdWVyeU9iaikpfSxkZXBlbmRlbmNpZXM6W0lmLGN1LHhkLG1oLGVsLFUyLEV2LEZmLHFiLENNLFhnLFFnLGx1LEgyLEtnLG9jLFhsLFJa''@;'; put 'put ''ZSxtQSxqbm4sVW5uXSxlbmNhcHN1bGF0aW9uOjJ9KSl9cmV0dXJuIG4oKSxlfSkoKSxHNj0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKCl7fW9uQ2xpY2socil7ci50YXJnZXQuZm9jdXMoKX1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJu''@;'; put 'put ''IG5ldyhpfHxlKX0sdGhpcy5cdTAyNzVkaXI9JHIoe3R5cGU6ZSxzZWxlY3RvcnM6W1siIiwiYXBwU3RlYWxGb2N1cyIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oaSxvKXsxJmkmJnd0KCJjbGljayIsZnVuY3Rpb24obCl7cmV0dXJuIG8ub25DbGljayhsKX0pfSxzdGFuZGFsb25lOiEx''@;'; put 'put ''fSkpfXJldHVybiBuKCksZX0pKCk7Y29uc3QgQXJuPVsic2VhcmNoTGliVHJlZUlucHV0Il07ZnVuY3Rpb24ga3JuKG4sZSl7MSZuJiZJdCgwLCJjbHItaWNvbiIsNyl9ZnVuY3Rpb24gUnJuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItaWNvbiIsOSksd3QoImNsaWNrIixm''@;'; put 'put ''dW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoMik7cmV0dXJuIGkubGlicmFyaWVzU2VhcmNoPSIiLFhlKGkubGlicmFyeU9uRmlsdGVyKCkpfSksdGUoKX19ZnVuY3Rpb24gSXJuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItdHJlZS1ub2RlIiwzKSgxLCJkaXYiLDUpKDIs''@;'; put 'put ''ImlucHV0Iiw2LDApLGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKCk7cmV0dXJuIGZpKG8ubGlicmFyaWVzU2VhcmNoLGkpfHwoby5saWJyYXJpZXNTZWFyY2g9aSksWGUoaSl9KSx3dCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRl''@;'; put 'put ''KCkubGlicmFyeU9uRmlsdGVyKCkpfSksdGUoKSx2dCg0LGtybiwxLDAsImNsci1pY29uIiw3KSx2dCg1LFJybiwxLDAsImNsci1pY29uIiw4KSx0ZSgpKCl9aWYoMiZuKXtjb25zdCB0PW9vKDMpLHI9VGUoKTtpZSgyKSxkaSgibmdNb2RlbCIsci5saWJyYXJpZXNTZWFyY2gpLGllKDIpLF90''@;'; put 'put ''KHQudmFsdWUubGVuZ3RoPDE/NDotMSksaWUoKSxfdCh0LnZhbHVlLmxlbmd0aD4wPzU6LTEpfX1mdW5jdGlvbiBEcm4obixlKXsxJm4mJkl0KDAsImNsci1pY29uIiw3KX1mdW5jdGlvbiBMcm4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImNsci1pY29uIiw5KSx3dCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKCl7WWUodCksVGUoKTtjb25zdCBpPW9vKDMpLG89VGUoMikuJGltcGxpY2l0LGE9VGUoKTtyZXR1cm4gaS52YWx1ZT0iIixvLnNlYXJjaFN0cmluZz0iIixYZShhLnRyZWVPbkZpbHRlcihvLCJ0YWJsZXMuVEFCTEVOQU1FIikpfSksdGUoKX19ZnVuY3Rpb24gT3JuKG4sZSl7''@;'; put 'put ''aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItdHJlZS1ub2RlIiwzKSgxLCJkaXYiLDUpKDIsImlucHV0IiwxNCwyKSxoaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGZpKG8uc2VhcmNoU3RyaW5nLGkpfHwoby5z''@;'; put 'put ''ZWFyY2hTdHJpbmc9aSksWGUoaSl9KSx3dCgia2V5dXAiLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3QgaT1UZSgyKS4kaW1wbGljaXQ7cmV0dXJuIFhlKFRlKCkudHJlZU9uRmlsdGVyKGksInRhYmxlcyIpKX0pLHRlKCksdnQoNCxEcm4sMSwwLCJjbHItaWNvbiIsNyksdnQoNSxMcm4sMSwwLCJj''@;'; put 'put ''bHItaWNvbiIsOCksdGUoKSgpfWlmKDImbil7Y29uc3QgdD1vbygzKSxyPVRlKDIpLiRpbXBsaWNpdDtpZSgyKSxkaSgibmdNb2RlbCIsci5zZWFyY2hTdHJpbmcpLGllKDIpLF90KHQudmFsdWUubGVuZ3RoPDE/NDotMSksaWUoKSxfdCh0LnZhbHVlLmxlbmd0aD4wPzU6LTEpfX1mdW5jdGlv''@;'; put 'put ''biBOcm4obixlKXsxJm4mJkl0KDAsImNsci1pY29uIiwxNyl9ZnVuY3Rpb24gRnJuKG4sZSl7MSZuJiZJdCgwLCJjbHItaWNvbiIsMTgpfWZ1bmN0aW9uIFBybihuLGUpezEmbiYmKEooMCwic3BhbiIpLFNlKDEsIiBUbyB1bmxvY2sgYWxsIHRhYmxlcywgY29udGFjdCBzdXBwb3J0QGRhdGFj''@;'; put 'put ''b250cm9sbGVyLmlvICIpLHRlKCkpfWZ1bmN0aW9uIEhybihuLGUpe2lmKDEmbiYmKEooMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMjApLHZ0KDEsUHJuLDIsMCwic3BhbiIpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgpLm5nVmFyO2llKCksX3QodD8xOi0xKX19ZnVuY3Rpb24gVnJuKG4sZSl7''@;'; put 'put ''MSZuJiZJdCgwLCJjbHItaWNvbiIsNyl9ZnVuY3Rpb24gQnJuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItaWNvbiIsOSksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpLFRlKCk7Y29uc3QgaT1vbygzKSxvPVRlKDMpLiRpbXBsaWNpdCxhPVRlKDMpO3JldHVybiBpLnZh''@;'; put 'put ''bHVlPSIiLG8uc2VhcmNoU3RyaW5nPSIiLFhlKGEudHJlZU9uRmlsdGVyKG8sImNvbHVtbnMuQ09MTkFNRSIpKX0pLHRlKCl9fWZ1bmN0aW9uIGpybihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLXRyZWUtbm9kZSIsMykoMSwiZGl2Iiw1KSgyLCJpbnB1dCIsMjEsMiksaGko''@;'; put 'put ''Im5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoMykuJGltcGxpY2l0O3JldHVybiBmaShvLnNlYXJjaFN0cmluZyxpKXx8KG8uc2VhcmNoU3RyaW5nPWkpLFhlKGkpfSksd3QoImtleXVwIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoMykuJGltcGxpY2l0''@;'; put 'put ''O3JldHVybiBYZShUZSgzKS50cmVlT25GaWx0ZXIoaSwiY29sdW1ucy5DT0xOQU1FIikpfSksdGUoKSx2dCg0LFZybiwxLDAsImNsci1pY29uIiw3KSx2dCg1LEJybiwxLDAsImNsci1pY29uIiw4KSx0ZSgpKCl9aWYoMiZuKXtjb25zdCB0PW9vKDMpLHI9VGUoMykuJGltcGxpY2l0O2llKDIp''@;'; put 'put ''LGRpKCJuZ01vZGVsIixyLnNlYXJjaFN0cmluZyksaWUoMiksX3QodC52YWx1ZS5sZW5ndGg8MT80Oi0xKSxpZSgpLF90KHQudmFsdWUubGVuZ3RoPjA/NTotMSl9fWZ1bmN0aW9uIFVybihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLXRyZWUtbm9kZSIpKDEsImJ1dHRvbiIs''@;'; put 'put ''MjIpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBpPVllKHQpLiRpbXBsaWNpdCxvPVRlKDMpLiRpbXBsaWNpdCxhPVRlKDIpLiRpbXBsaWNpdDtyZXR1cm4gWGUoVGUoKS5jb2x1bW5PbkNsaWNrKGksYSxvKSl9KSxJdCgyLCJjbHItaWNvbiIsMjMpLFNlKDMpLHRlKCkoKX1pZigyJm4p''@;'; put 'put ''e2NvbnN0IHQ9ZS4kaW1wbGljaXQscj1UZSg2KTtpZSgpLHdyKCJjb2x1bW4tYWN0aXZlIixyLmxpYkNvbHVtbkFjdGl2ZSh0LkNPTFVSSSkpLGllKDIpLFNyKCIgIix0LkNPTE5BTUUsIiAiKX19ZnVuY3Rpb24genJuKG4sZSl7aWYoMSZuJiYodnQoMCxqcm4sNiwzLCJjbHItdHJlZS1ub2Rl''@;'; put 'put ''IiwzKSxfbygxLFVybiw0LDMsImNsci10cmVlLW5vZGUiLG51bGwsQ28pKSwyJm4pe2NvbnN0IHQ9VGUoMikuJGltcGxpY2l0O190KHQuY29sdW1ucz8wOi0xKSxpZSgpLHlvKHQuY29sdW1ucyl9fWZ1bmN0aW9uIFdybihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLXRvb2x0''@;'; put 'put ''aXAiKSgxLCJidXR0b24iLDE2KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaT1ZZSh0KS5uZ1ZhcixvPVRlKCkuJGltcGxpY2l0LGE9VGUoMikuJGltcGxpY2l0LGw9VGUoKTtyZXR1cm4gWGUoaT8iIjpsLnRhYmxlT25DbGljayhvLlRBQkxFVVJJLG8sYSkpfSksdnQoMixOcm4sMSww''@;'; put 'put ''LCJjbHItaWNvbiIsMTcpKDMsRnJuLDEsMCwiY2xyLWljb24iLDE4KSxTZSg0KSx0ZSgpLFluKDUsSHJuLDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsMTkpLHZ0KDYsenJuLDMsMSksdGUoKX1pZigyJm4pe2xldCB0O2NvbnN0IHI9ZS5uZ1ZhcixpPVRlKCkuJGltcGxpY2l0LG89VGUoMiku''@;'; put 'put ''JGltcGxpY2l0LGE9VGUoKTtpZSgpLHdyKCJkYy1sb2NrZWQtY29udHJvbCIscikoImFjdGl2ZSIsYS5saWJUYWJBY3RpdmUoby5MSUJSQVJZUkVGLGkpKSxpZSgpLF90KCEwPT09KHQ9aS5pbmNsdWRlcygiLUZDIikpPzI6ITE9PT10PzM6LTEpLGllKDIpLFNyKCIgIixpLnJlcGxhY2UoIi1G''@;'; put 'put ''QyIsIiIpLCIgIiksaWUoMiksX3QoYS5oYXNDb2x1bW5zPzY6LTEpfX1mdW5jdGlvbiBZcm4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImNsci10cmVlLW5vZGUiLDExKSx3dCgiY2xpY2siLGZ1bmN0aW9uKGkpe2NvbnN0IG89WWUodCkuJGltcGxpY2l0LGE9VGUoMikuJGltcGxp''@;'; put 'put ''Y2l0O3JldHVybiBYZShUZSgpLnRyZWVOb2RlQ2xpY2tlZChpLG8sYS50YWJsZXMpKX0pLGhpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaSl7Y29uc3Qgbz1ZZSh0KS4kaW1wbGljaXQ7cmV0dXJuIGZpKG8uZXhwYW5kZWQsaSl8fChvLmV4cGFuZGVkPWkpLFhlKGkpfSksWW4oMSxX''@;'; put 'put ''cm4sNyw3LCJjbHItdG9vbHRpcCIsMTUpLHRlKCl9aWYoMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0LHI9ZS4kaW5kZXgsaT1UZSgzKTt3cigiY2xyLWV4cGFuZGVkIix0LmV4cGFuZGVkKSxkaSgiY2xyRXhwYW5kZWQiLHQuZXhwYW5kZWQpLHJ0KCJjbHJMb2FkaW5nIix0LmxvYWRpbmdDb2x1''@;'; put 'put ''bW5zJiYhdC5jb2x1bW5zKSxpZSgpLHJ0KCJuZ1ZhciIscisxPmkubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gWnJuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItdHJlZS1ub2RlIiwxMSwxKSx3dCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoKS4kaW1wbGljaXQsYT1UZSgpO3JldHVybiBYZShhLnRyZWVOb2RlQ2xpY2tlZChpLG8sYS5saWJyYXJ5TGlzdCkpfSksaGkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKCkuJGltcGxpY2l0O3JldHVybiBm''@;'; put 'put ''aShvLmV4cGFuZGVkLGkpfHwoby5leHBhbmRlZD1pKSxYZShpKX0pLEooMiwicCIsMTIpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtZZSh0KTtjb25zdCBpPW9vKDEpLG89VGUoKS4kaW1wbGljaXQsYT1UZSgpO3JldHVybiBhLmxpYj1vLkxJQlJBUllJRCxYZShhLmxpYnJhcnlPbkNsaWNrKGEu''@;'; put 'put ''bGlifHwiIixvLGkpKX0pLEl0KDMsImNsci1pY29uIiwxMyksU2UoNCksdGUoKSx2dCg1LE9ybiw2LDMsImNsci10cmVlLW5vZGUiLDMpLF9vKDYsWXJuLDIsNSwiY2xyLXRyZWUtbm9kZSIsMTAsQ28pLHRlKCl9aWYoMiZuKXtjb25zdCB0PVRlKCkuJGltcGxpY2l0O3dyKCJjbHItZXhwYW5k''@;'; put 'put ''ZWQiLHQuZXhwYW5kZWQpLGRpKCJjbHJFeHBhbmRlZCIsdC5leHBhbmRlZCkscnQoImNsckxvYWRpbmciLHQubG9hZGluZ1RhYmxlcyYmIXQudGFibGVzKSxpZSg0KSxTcigiICIsdC5MSUJSQVJZTkFNRSwiICIpLGllKCksX3QodC50YWJsZXM/NTotMSksaWUoKSx5byh0LnRhYmxlcyl9fWZ1''@;'; put 'put ''bmN0aW9uIEdybihuLGUpe2lmKDEmbiYmdnQoMCxacm4sOCw2LCJjbHItdHJlZS1ub2RlIiwxMCksMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0O190KCF0LmhpZGRlbiYmdC5pbkZvcmVncm91bmQ/MDotMSl9fWZ1bmN0aW9uICRybihuLGUpezEmbiYmKEooMCwiZGl2Iiw0KSgxLCJzcGFuIiwy''@;'; put 'put ''NCksU2UoMiwiIExvYWRpbmcuLi4gIiksdGUoKSgpKX1sZXQgcXJuPSgoKT0+e3ZhciBuO2NsYXNzIGV7Y29uc3RydWN0b3IocixpKXt0aGlzLmhlbHBlclNlcnZpY2U9cix0aGlzLmxpY2VuY2VTZXJ2aWNlPWksdGhpcy5zZWFyY2hMaWJJbnB1dExpc3Q9bmV3IGs4LHRoaXMudGFibGVPbkNs''@;'; put 'put ''aWNrRW1pdHRlcj1uZXcgS3IsdGhpcy5saWJyYXJ5T25DbGlja0VtaXR0ZXI9bmV3IEtyLHRoaXMuaGFzQ29sdW1ucz0hMSx0aGlzLnBhZ2luZz0hMCx0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLmxpYj0iIix0aGlzLnRhYmxlPSIiLHRoaXMubGlicmFyaWVzUGFnaW5nPSExLHRoaXMu''@;'; put 'put ''bGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlfW5nT25Jbml0KCl7fW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLnNlYXJjaExpYklucHV0TGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9KX1uZ09uQ2hhbmdlcyhyKXtyLmxp''@;'; put 'put ''YnJhcnlMaXN0Py5jdXJyZW50VmFsdWUmJnRoaXMubGlicmFyeUxpc3QmJnRoaXMuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyeUxpc3QpfXRyZWVPbkZpbHRlcihyLGkpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIocixpKX1saWJyYXJ5T25GaWx0''@;'; put 'put ''ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMubGlicmFyeUxpc3QsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllOQU1FIiksVW4ubGluZWFnZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9dHJlZU5vZGVDbGlja2VkKHIsaSxvKXsi''@;'; put 'put ''Q29sbGFwc2UiPT09ci50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMobyxpKX1saWJyYXJ5T25DbGljayhyLGksbyl7aS5pbkZvcmVncm91bmQ9ITA7Y29uc3QgYT0oKT0+c2V0VGltZW91dCgoKT0+by5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxl''@;'; put 'put ''bWVudC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpLmZvY3VzKCkpO2lmKGkudGFibGVzKWkuZXhwYW5kZWQ9IWkuZXhwYW5kZWQsdGhpcy5saWJyYXJ5T25DbGlja0VtaXR0ZXIuZW1pdCh7bGliaWQ6cixsaWJyYXJ5OmksdGFibGVzTG9hZGVkOiEwfSk7ZWxzZXtpLmxvYWRpbmdUYWJsZXM9ITAs''@;'; put 'put ''dGhpcy5saWJyYXJ5T25DbGlja0VtaXR0ZXIuZW1pdCh7bGliaWQ6cixsaWJyYXJ5OmksdGFibGVzTG9hZGVkOiExfSk7Y29uc3QgbD1zZXRJbnRlcnZhbCgoKT0+e2kubG9hZGluZ1RhYmxlc3x8KGEoKSxjbGVhckludGVydmFsKGwpKX0sNTAwKX1pLmV4cGFuZGVkJiZhKCksdGhpcy5jb2xs''@;'; put 'put ''YXBzZVRyZWVJdGVtcyh0aGlzLmxpYnJhcnlMaXN0LGkpfXRhYmxlT25DbGljayhyLGksbyl7dmFyIGE9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7YS5oZWxwZXJTZXJ2aWNlLmRlYm91bmNlQ2FsbCg1MCwoKT0+e2EuaGFzQ29sdW1ucz8oaS5jb2x1bW5zPyhpLmV4cGFuZGVkPSFpLmV4''@;'; put 'put ''cGFuZGVkLCEwPT09aS5leHBhbmRlZCYmKGEudGFibGU9cixhLnRhYmxlT25DbGlja0VtaXR0ZXIuZW1pdCh7dGFibGV1cmk6cixsaWJUYWJsZTppLGxpYnJhcnk6byxjb2x1bW5zTG9hZGVkOiEwfSkpKTooaS5leHBhbmRlZD0haS5leHBhbmRlZCxpLmxvYWRpbmdDb2x1bW5zPSEwLGEudGFi''@;'; put 'put ''bGU9cixhLnRhYmxlT25DbGlja0VtaXR0ZXIuZW1pdCh7dGFibGV1cmk6cixsaWJUYWJsZTppLGxpYnJhcnk6byxjb2x1bW5zTG9hZGVkOiExfSkpLGEuY29sbGFwc2VUcmVlSXRlbXMoby50YWJsZXMsaSkpOmEudGFibGVPbkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTpyLGxpYlRhYmxl''@;'; put 'put ''OmksbGlicmFyeTpvLGNvbHVtbnNMb2FkZWQ6ITF9KX0pfSkoKX1jb2x1bW5PbkNsaWNrKHIsaSxvKXt0aGlzLmxpYj1pLkxJQlJBUllJRCx0aGlzLnRhYmxlPW8uVEFCTEVVUkksdGhpcy5jb2x1bW49ci5DT0xVUkl9bGliVGFiQWN0aXZlKHIsaSl7cmV0dXJuISghdGhpcy5saWJ8fCF0aGlz''@;'; put 'put ''LnRhYmxlKSYmcj09PXRoaXMubGliJiZpPT09dGhpcy50YWJsZX1saWJDb2x1bW5BY3RpdmUocil7aWYoIXRoaXMuY29sdW1uKXJldHVybiExO2xldCBpPXIuc3BsaXQoIlxcIiksbz10aGlzLmNvbHVtbi5zcGxpdCgiXFwiKTtyZXR1cm4gaVtpLmxlbmd0aC0xXT09b1tvLmxlbmd0aC0xXX1j''@;'; put 'put ''b2xsYXBzZVRyZWVJdGVtcyhyLGkpe3IuZm9yRWFjaChvPT57SlNPTi5zdHJpbmdpZnkobykhPT1KU09OLnN0cmluZ2lmeShpKSYmKG8uZXhwYW5kZWQ9ITEpfSl9bG9hZE1vcmVMaWJyYXJpZXMoKXt0aGlzLmxpYnJhcmllc1BhZ2luZ3x8KHRoaXMubGlicmFyaWVzUGFnaW5nPSEwLHRoaXMu''@;'; put 'put ''aGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyeUxpc3QsITApLHRoaXMubGlicmFyaWVzUGFnaW5nPSExKX1oYW5kbGVTY3JvbGwocil7bGV0IGk9ci50YXJnZXQ7aSYmaS5zY3JvbGxUb3A+PWkuc2Nyb2xsSGVpZ2h0LWkub2Zmc2V0SGVpZ2h0LTEwJiZ0aGlzLmxv''@;'; put 'put ''YWRNb3JlTGlicmFyaWVzKCl9c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSkoemUoZmgpLHplKEYyKSl9LHRoaXMuXHUwMjc1Y21wPVByKHt0eXBlOmUsc2VsZWN0b3JzOltbImRjLXRyZWUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGks''@;'; put 'put ''byl7aWYoMSZpJiZXbyhBcm4sNSksMiZpKXtsZXQgYTtjaShhPXVpKCkpJiYoby5zZWFyY2hMaWJJbnB1dExpc3Q9YSl9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oaSxvKXsxJmkmJnd0KCJzY3JvbGwiLGZ1bmN0aW9uKGwpe3JldHVybiBvLmhhbmRsZVNjcm9sbChsKX0pfSxpbnB1dHM6e2hh''@;'; put 'put ''c0NvbHVtbnM6Imhhc0NvbHVtbnMiLHBhZ2luZzoicGFnaW5nIixsaWJyYXJ5TGlzdDoibGlicmFyeUxpc3QifSxvdXRwdXRzOnt0YWJsZU9uQ2xpY2tFbWl0dGVyOiJ0YWJsZU9uQ2xpY2tFbWl0dGVyIixsaWJyYXJ5T25DbGlja0VtaXR0ZXI6ImxpYnJhcnlPbkNsaWNrRW1pdHRlciJ9LHN0''@;'; put 'put ''YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2l1XSxkZWNsczo1LHZhcnM6Mixjb25zdHM6W1sic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJsaWJUcmVlTm9kZSIsIiJdLFsic2VhcmNoVHJlZUlucHV0IiwiIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwi''@;'; put 'put ''dHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwi''@;'; put 'put ''c2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJt''@;'; put 'put ''LTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiVGFibGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdl''@;'; put 'put ''Iiwia2V5dXAiLCJuZ01vZGVsIl0sWzQsIm5nVmFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIs''@;'; put 'put ''ImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkNvbHVtbnMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5n''@;'; put 'put ''TW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsIm9iamVjdHMiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oaSxvKXsxJmkmJihKKDAsImNsci10cmVlIiksdnQoMSxJ''@;'; put 'put ''cm4sNiwzLCJjbHItdHJlZS1ub2RlIiwzKSxfbygyLEdybiwxLDEsbnVsbCxudWxsLENvKSx0ZSgpLHZ0KDQsJHJuLDMsMCwiZGl2Iiw0KSksMiZpJiYoaWUoKSxfdChvLmxpYnJhcnlMaXN0PzE6LTEpLGllKCkseW8oby5saWJyYXJ5TGlzdCksaWUoMiksX3Qoby5saWJyYXJpZXNQYWdpbmc/''@;'; put 'put ''NDotMSkpfSxkZXBlbmRlbmNpZXM6W1BwLE8zLGQ3LGN1LCQwLExwLFBmLHd2LFN2LEN2LGx1LG9jLFhsLG1BLEc2XSxlbmNhcHN1bGF0aW9uOjJ9KSl9cmV0dXJuIG4oKSxlfSkoKTtjb25zdCBLcm49WyJyZXNpemVCb3giXSxYcm49WyJkcmFnSGFuZGxlQ29ybmVyIl0sUXJuPVsiZHJhZ0hh''@;'; put 'put ''bmRsZUNvcm5lckxlZnQiXSxKcm49WyJkcmFnSGFuZGxlUmlnaHQiXSxlaW49WyJkcmFnSGFuZGxlQm90dG9tIl0sdGluPVsiZHJhZ0hhbmRsZUxlZnQiXSxuaW49KG4sZSx0KT0+KHtjb2xIZWFkZXJzSGlkZGVuOm4sY29sSGVhZGVyc1Zpc2libGU6ZSxoZWFkZXJQa3M6dH0pLHJpbj0obixl''@;'; put 'put ''KT0+KHt4Om4seTplfSksaWluPSgpPT4oe30pO2Z1bmN0aW9uIG9pbihuLGUpe2lmKDEmbiYmKEooMCwic3BhbiIsMTEpLFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgpO2llKCksTmgoIlRvIHVubG9jayBtb3JlIHRoZW4gIix0LmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0''@;'; put 'put ''LCIgIiwxPT09dC5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdD8idmlld2JveCI6InZpZXdib3hlcyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIGFpbihuLGUpezEmbiYmKEooMCwiZGl2IiwxNiksSXQoMSwiY2xyLXNwaW5uZXIiLDQx''@;'; put 'put ''KSx0ZSgpKX1mdW5jdGlvbiBzaW4obixlKXsxJm4mJihKKDAsInAiLDE3KSxTZSgxLCJWaWV3Ym94IG9wZW4gbGltaXQgcmVhY2hlZCIpLHRlKCkpfWZ1bmN0aW9uIGxpbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiZGMtdHJlZSIsNDIpLHd0KCJsaWJyYXJ5T25DbGlja0VtaXR0''@;'; put 'put ''ZXIiLGZ1bmN0aW9uKGkpe3JldHVybiBZZSh0KSxYZShUZSgpLmxpYnJhcnlPbkNsaWNrKGkpKX0pKCJ0YWJsZU9uQ2xpY2tFbWl0dGVyIixmdW5jdGlvbihpKXtyZXR1cm4gWWUodCksWGUoVGUoKS50YWJsZU9uQ2xpY2soaSkpfSksdGUoKX0yJm4mJnJ0KCJsaWJyYXJ5TGlzdCIsVGUoKS5s''@;'; put 'put ''aWJyYXJpZXMpfWZ1bmN0aW9uIGNpbihuLGUpezEmbiYmKEooMCwicCIsMjYpLFNlKDEsIiBQaWNrIHRhYmxlIGZyb20gdGhlIGxpc3Qgb24gdGhlIGxlZnQgIiksdGUoKSl9ZnVuY3Rpb24gdWluKG4sZSl7MSZuJiZJdCgwLCJjbHItc3Bpbm5lciIsNDUpfWZ1bmN0aW9uIGRpbihuLGUpe2lm''@;'; put 'put ''KDEmbil7Y29uc3QgdD13bigpO0ooMCwiYSIsMjEpLHd0KCJjbGljayIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgpLiRpbXBsaWNpdCxhPVRlKCk7cmV0dXJuIGEubWluaW1pemUobyksWGUoYS5zdG9wUHJvcGFnYXRpb24oaSkpfSksSXQoMSwiY2xyLWljb24iLDI0KSxKKDIsInNw''@;'; put 'put ''YW4iLDIzKSxTZSgzLCJNaW5pbWl6ZSB2aWV3Ym94IiksdGUoKSgpfX1mdW5jdGlvbiBoaW4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImEiLDIxKSx3dCgiY2xpY2siLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoKS4kaW1wbGljaXQsYT1UZSgpO3JldHVybiBhLnJlc3Rv''@;'; put 'put ''cmUobyksWGUoYS5zdG9wUHJvcGFnYXRpb24oaSkpfSksSXQoMSwiY2xyLWljb24iLDI1KSxKKDIsInNwYW4iLDIzKSxTZSgzLCJSZXN0b3JlIHZpZXdib3giKSx0ZSgpKCl9fWZ1bmN0aW9uIGZpbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiZGl2Iiw0Myksd3QoImNsaWNrIixm''@;'; put 'put ''dW5jdGlvbigpe2NvbnN0IGk9WWUodCkuJGltcGxpY2l0O3JldHVybiBYZShUZSgpLnNlbGVjdFZpZXdib3goaSkpfSksSigxLCJkaXYiLDQ0KSxTZSgyKSx2dCgzLHVpbiwxLDAsImNsci1zcGlubmVyIiw0NSksdGUoKSxKKDQsImRpdiIpKDUsImEiLDQ2KSx3dCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KGkpe2NvbnN0IG89WWUodCkuJGltcGxpY2l0LGE9VGUoKTtyZXR1cm4gYS5yZXNldFBvc1NpemUobyksWGUoYS5zdG9wUHJvcGFnYXRpb24oaSkpfSksSXQoNiwiY2xyLWljb24iLDQ3KSxKKDcsInNwYW4iLDIzKSxTZSg4LCJSZXNldCBwb3NpdGlvbiBhbmQgc2l6ZSIpLHRlKCkoKSx2dCg5''@;'; put 'put ''LGRpbiw0LDAsImEiLDQ4KSx2dCgxMCxoaW4sNCwwLCJhIiw0OCksSigxMSwiYSIsMjEpLHd0KCJjbGljayIsZnVuY3Rpb24oaSl7Y29uc3Qgbz1ZZSh0KS4kaW1wbGljaXQsYT1UZSgpO3JldHVybiBhLmNsb3NlKG8pLFhlKGEuc3RvcFByb3BhZ2F0aW9uKGkpKX0pLEl0KDEyLCJjbHItaWNv''@;'; put 'put ''biIsNDkpLEooMTMsInNwYW4iLDIzKSxTZSgxNCwiQ2xvc2Ugdmlld2JveCIpLHRlKCkoKSgpKCl9aWYoMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0LHI9VGUoKTt3cigic2VsZWN0ZWQiLChudWxsPT1yLnNlbGVjdGVkVmlld2JveD9udWxsOnIuc2VsZWN0ZWRWaWV3Ym94LmlkKT09PXQuaWQp''@;'; put 'put ''LGllKDIpLGU0KCIgIyIsdC5pZCwiICIsdC5saWJyYXJ5LCIuIix0LnRhYmxlLCIgIiksaWUoKSxfdCh0LmxvYWRpbmdEYXRhPzM6LTEpLGllKDIpLHdyKCJkaXNhYmxlZCIsMD09PXQueCYmMD09PXQueSksaWUoNCksX3QodC5taW5pbWl6ZWQ/LTE6OSksaWUoKSxfdCh0Lm1pbmltaXplZD8x''@;'; put 'put ''MDotMSl9fWZ1bmN0aW9uIHBpbihuLGUpe2lmKDEmbiYmKEooMCwib3B0aW9uIiksU2UoMSksdGUoKSksMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0O2llKCksU3IoIiAiLHQsIiAiKX19ZnVuY3Rpb24gZ2luKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJkaXYiLDUxKSgxLCJhcHAt''@;'; put 'put ''YXV0b2NvbXBsZXRlIiw1MiwwKSx3dCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89b28oMiksYT1UZSgpLm5nVmFyO3JldHVybiBYZShUZSgpLm9uQ29sc2VhcmNoQ2hhbmdlKG8saSxhLmNvbEhlYWRlcnNIaWRkZW4pKX0pLF9vKDMscGluLDIsMSwib3B0aW9uIixu''@;'; put 'put ''dWxsLENvKSx0ZSgpKCl9aWYoMiZuKXtjb25zdCB0PVRlKCkubmdWYXI7aWUoKSxydCgiaW5wdXRJZCIsInZpZXdib3gtY29sdW1uLXNlYXJjaCIpKCJlbWl0T25seVNlbGVjdGVkIiwhMCksaWUoMikseW8odC5jb2xIZWFkZXJzSGlkZGVuKX19ZnVuY3Rpb24gbWluKG4sZSl7MSZuJiZJdCgw''@;'; put 'put ''LCJjbHItaWNvbiIsNTYpfWZ1bmN0aW9uIHZpbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLWljb24iLDU4KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3QgaT1UZSgpLiRpbXBsaWNpdDtyZXR1cm4gWGUoVGUoMykub25Db2xSZW1vdmUoaSkpfSksdGUoKX19''@;'; put 'put ''ZnVuY3Rpb24gX2luKG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiLDU1KSgxLCJzcGFuIiksU2UoMiksdnQoMyxtaW4sMSwwLCJjbHItaWNvbiIsNTYpLHRlKCksdnQoNCx2aW4sMSwwLCJjbHItaWNvbiIsNTcpLHRlKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdCxyPVRlKDIpLm5nVmFyLGk9''@;'; put 'put ''VGUoKTtCaihmdW5jdGlvbiBON2UobixlLHQ9IiIpe3JldHVybiBiN2UoaXQoKSxuLGUsdCl9KCJjb2wtYm94IGNvbHVtbi0iLHQpKSx3cigiY3Vyc29yLWRlZmF1bHQtaSIsci5oZWFkZXJQa3MuaW5jbHVkZXModCkpKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiLHIuaGVhZGVyUGtzLmluY2x1''@;'; put 'put ''ZGVzKHQpKSxydCgiY2RrRHJhZ0RhdGEiLHQpKCJjZGtEcmFnRGlzYWJsZWQiLHIuaGVhZGVyUGtzLmluY2x1ZGVzKHQpKSxpZSgyKSxOaCgiICIsdCwiICIsIm51bSI9PT0obnVsbD09aS5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09aS5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJs''@;'; put 'put ''ZXx8bnVsbD09aS5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS4kZGF0YWZvcm1hdHN8fG51bGw9PWkuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuJGRhdGFmb3JtYXRzLnZhcnN8fG51bGw9PWkuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuJGRhdGFmb3JtYXRzLnZh''@;'; put 'put ''cnNbdF0/bnVsbDppLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLiRkYXRhZm9ybWF0cy52YXJzW3RdLnR5cGUpPyIobnVtZXJpYykiOiIiLCIgIiksaWUoKSxfdChyLmhlYWRlclBrcy5pbmNsdWRlcyh0KT8zOi0xKSxpZSgpLF90KHIuaGVhZGVyUGtzLmluY2x1ZGVzKHQpPy0xOjQp''@;'; put 'put ''fX1mdW5jdGlvbiB5aW4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsInAiLDE0KSxTZSgxLCJDb2x1bW5zIFRvIERpc3BsYXkgKGRyYWcgYW5kIHJlLW9yZGVyKSIpLHRlKCksSigyLCJkaXYiLDUzKSx3dCgiY2RrRHJvcExpc3REcm9wcGVkIixmdW5jdGlvbihpKXtyZXR1cm4gWWUo''@;'; put 'put ''dCksWGUoVGUoMikuY29sdW1uc0Ryb3AoaSkpfSksX28oMyxfaW4sNSwxMywiZGl2Iiw1NCxDbyksdGUoKX1pZigyJm4pe2NvbnN0IHQ9VGUoKS5uZ1ZhcjtpZSgyKSxydCgiY2RrRHJvcExpc3REYXRhIix0LmNvbEhlYWRlcnNWaXNpYmxlKSxpZSgpLHlvKHQuY29sSGVhZGVyc1Zpc2libGUp''@;'; put 'put ''fX1mdW5jdGlvbiBiaW4obixlKXtpZigxJm4mJihKKDAsImRpdiIsNTApLHZ0KDEsZ2luLDUsMiwiZGl2Iiw1MSksdnQoMix5aW4sNSwxKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9ZS5uZ1ZhcjtpZSgpLF90KHQuY29sSGVhZGVyc0hpZGRlbj8xOi0xKSxpZSgpLF90KHQuY29sSGVhZGVyc1Zpc2li''@;'; put 'put ''bGU/MjotMSl9fWZ1bmN0aW9uIHdpbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLWljb24iLDg2KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3QgaT1UZSgpLiRpbXBsaWNpdDtyZXR1cm4gWGUoVGUoKS5jb2xsYXBzZShpKSl9KSx0ZSgpfX1mdW5jdGlvbiBD''@;'; put 'put ''aW4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImNsci1pY29uIiw4Nyksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoKS4kaW1wbGljaXQ7cmV0dXJuIFhlKFRlKCkuZXhwYW5kKGkpKX0pLHRlKCl9fWZ1bmN0aW9uIFNpbihuLGUpe2lmKDEmbil7Y29uc3Qg''@;'; put 'put ''dD13bigpO0ooMCwiY2xyLWljb24iLDg4KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3QgaT1UZSgpLiRpbXBsaWNpdCxvPW9vKDI0KTtyZXR1cm4gWGUoVGUoKS5zZWFyY2hUYWJsZShvLGkpKX0pLHRlKCl9fWZ1bmN0aW9uIEVpbihuLGUpezEmbiYmKEooMCwic3BhbiIsNzcp''@;'; put 'put ''LFNlKDEsIiBMb2FkaW5nLi4uICIpLHRlKCkpfWZ1bmN0aW9uIE1pbihuLGUpezEmbiYmKEooMCwic3BhbiIsNzkpLFNlKDEsIkxvYWRpbmcuLi4iKSx0ZSgpKX1mdW5jdGlvbiBUaW4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImNsci1pY29uIiw4OSksd3QoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe1llKHQpO2NvbnN0IGk9VGUoKS4kaW1wbGljaXQsbz1vbygyNCk7cmV0dXJuIFRlKCkucmVsb2FkVGFibGVEYXRhKGkpLFhlKG8udmFsdWU9IiIpfSksdGUoKX19ZnVuY3Rpb24geGluKG4sZSl7MSZuJiYoSigwLCJkaXYiLDkxKSxJdCgxLCJjbHItc3Bpbm5lciIsNDEpLHRlKCkp''@;'; put 'put ''fWZ1bmN0aW9uIEFpbihuLGUpe2lmKDEmbiYmSXQoMCwiaG90LXRhYmxlIiw5MiksMiZuKXtjb25zdCB0PVRlKDIpLiRpbXBsaWNpdDtydCgic2V0dGluZ3MiLFRlKCkudmlld2JveEhvdFNldHRpbmdzLmdldCh0LmlkKXx8bWMoMixpaW4pKSgiaWQiLCJob3RUYWJsZV8iK3QuaWQpfX1mdW5j''@;'; put 'put ''dGlvbiBraW4obixlKXtpZigxJm4mJihKKDAsImRpdiIsOTApLHZ0KDEseGluLDIsMCwiZGl2Iiw5MSksdnQoMixBaW4sMSwzLCJob3QtdGFibGUiLDkyKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9ZS5uZ1ZhcixyPVRlKCkuJGltcGxpY2l0LGk9VGUoKTtPMigiZGlzcGxheSIsci5jb2xsYXBzZWQ/''@;'; put 'put ''Im5vbmUiOiIiKSxpZSgpLF90KHIubG9hZGluZ0RhdGEmJnQ8MD8xOi0xKSxpZSgpLF90KHQ+LTEmJmkudmlld2JveEhvdFNldHRpbmdzLmdldChyLmlkKT8yOi0xKX19ZnVuY3Rpb24gUmluKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJkaXYiLDU5LDEpLHd0KCJtb3VzZWRvd24i''@;'; put 'put ''LGZ1bmN0aW9uKCl7Y29uc3QgaT1ZZSh0KS4kaW1wbGljaXQ7cmV0dXJuIFhlKFRlKCkuZm9jdXNWaWV3Ym94KGkpKX0pKCJjZGtEcmFnRW5kZWQiLGZ1bmN0aW9uKGkpe2NvbnN0IG89WWUodCkuJGltcGxpY2l0O3JldHVybiBYZShUZSgpLnZpZXdib3hEcmFnRW5kZWQoaSxvKSl9KSxKKDIs''@;'; put 'put ''ImRpdiIsNjApKDMsInNwYW4iLDYxKSxTZSg0KSx0ZSgpLEooNSwiZGl2Iiw2MiksdnQoNix3aW4sMSwwLCJjbHItaWNvbiIsNjMpLHZ0KDcsQ2luLDEsMCwiY2xyLWljb24iLDY0KSxKKDgsImNsci1pY29uIiw2NSksd3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGk9WWUodCkuJGltcGxp''@;'; put 'put ''Y2l0O3JldHVybiBYZShUZSgpLm1pbmltaXplKGkpKX0pLHRlKCksSig5LCJjbHItaWNvbiIsNjYpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBpPVllKHQpLiRpbXBsaWNpdDtyZXR1cm4gWGUoVGUoKS5jbG9zZShpKSl9KSx0ZSgpKCkoKSxKKDEwLCJzcGFuIiw2NywyKSx3dCgicG9p''@;'; put 'put ''bnRlcmRvd24iLGZ1bmN0aW9uKGkpe2NvbnN0IG89WWUodCkuJGltcGxpY2l0LGE9b28oMSksbD1vbygxMSk7cmV0dXJuIFhlKFRlKCkuc3RhcnRSZXNpemUoaSxsLGEsbykpfSksdGUoKSxKKDEyLCJzcGFuIiw2OCwzKSx3dCgicG9pbnRlcmRvd24iLGZ1bmN0aW9uKGkpe2NvbnN0IG89WWUo''@;'; put 'put ''dCkuJGltcGxpY2l0LGE9b28oMSksbD1vbygxMyk7cmV0dXJuIFhlKFRlKCkuc3RhcnRSZXNpemVCb3R0b21MZWZ0KGksbCxhLG8pKX0pLHRlKCksSigxNCwic3BhbiIsNjksNCksd3QoInBvaW50ZXJkb3duIixmdW5jdGlvbihpKXtjb25zdCBvPVllKHQpLiRpbXBsaWNpdCxhPW9vKDEpLGw9''@;'; put 'put ''b28oMTUpO3JldHVybiBYZShUZSgpLnN0YXJ0UmVzaXplUmlnaHQoaSxsLGEsbykpfSksdGUoKSxKKDE2LCJzcGFuIiw3MCw1KSx3dCgicG9pbnRlcmRvd24iLGZ1bmN0aW9uKGkpe2NvbnN0IG89WWUodCkuJGltcGxpY2l0LGE9b28oMSksbD1vbygxNyk7cmV0dXJuIFhlKFRlKCkuc3RhcnRS''@;'; put 'put ''ZXNpemVCb3R0b20oaSxsLGEsbykpfSksdGUoKSxKKDE4LCJzcGFuIiw3MSw2KSx3dCgicG9pbnRlcmRvd24iLGZ1bmN0aW9uKGkpe2NvbnN0IG89WWUodCkuJGltcGxpY2l0LGE9b28oMSksbD1vbygxOSk7cmV0dXJuIFhlKFRlKCkuc3RhcnRSZXNpemVMZWZ0KGksbCxhLG8pKX0pLHRlKCks''@;'; put 'put ''SigyMCwiZm9ybSIsNzIpKDIxLCJkaXYiLDczKSgyMiwiZGl2Iiw3NCkoMjMsImlucHV0Iiw3NSw3KSx3dCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKCl7Y29uc3QgaT1ZZSh0KS4kaW1wbGljaXQsbz1vbygyNCk7cmV0dXJuIFhlKFRlKCkuc2VhcmNoVGFibGUobyxpKSl9KSx0ZSgpLHZ0KDI1''@;'; put 'put ''LFNpbiwxLDAsImNsci1pY29uIiw3NiksdnQoMjYsRWluLDIsMCwic3BhbiIsNzcpLHRlKCksSigyNywiY2xyLWNoZWNrYm94LWNvbnRhaW5lciIpKDI4LCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDI5LCJpbnB1dCIsNzgpLGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtjb25zdCBv''@;'; put 'put ''PVllKHQpLiRpbXBsaWNpdDtyZXR1cm4gZmkoby5zZWFyY2hOdW1lcmljLGkpfHwoby5zZWFyY2hOdW1lcmljPWkpLFhlKGkpfSksdGUoKSxKKDMwLCJsYWJlbCIpLFNlKDMxLCJOdW1lcmljIiksdGUoKSgpKCkoKSxKKDMyLCJkaXYiLDQ0KSx2dCgzMyxNaW4sMiwwLCJzcGFuIiw3OSksdnQo''@;'; put 'put ''MzQsVGluLDEsMCwiY2xyLWljb24iLDgwKSxKKDM1LCJhIiw4MSksd3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGk9WWUodCkuJGltcGxpY2l0LG89b28oMjQpO3JldHVybiBUZSgpLm9wZW5GaWx0ZXIoaSksWGUoby52YWx1ZT0iIil9KSxJdCgzNiwiY2xyLWljb24iLDgyKSxKKDM3LCJz''@;'; put 'put ''cGFuIiw4MyksU2UoMzgpLHRlKCkoKSxKKDM5LCJjbHItaWNvbiIsODQpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBpPVllKHQpLiRpbXBsaWNpdDtyZXR1cm4gWGUoVGUoKS5vcGVuVGFibGVFZGl0KGkpKX0pLHRlKCkoKSgpLFluKDQwLGtpbiwzLDQsImRpdiIsODUpLHRlKCl9aWYo''@;'; put 'put ''MiZuKXtjb25zdCB0PWUuJGltcGxpY2l0LHI9VGUoKTtPMigiZGlzcGxheSIsdC5taW5pbWl6ZWQ/Im5vbmUiOiIiKSgid2lkdGgiLHQud2lkdGgsInB4IikoImhlaWdodCIsdC5oZWlnaHQsInB4IikoInBvaW50ZXItZXZlbnRzIix0LmNvbGxhcHNlZD8ibm9uZSI6IiIpKCJib3gtc2hhZG93''@;'; put 'put ''Iix0LmNvbGxhcHNlZD8ibm9uZSI6IiIpLHdyKCJmb2N1c2VkIix0LmZvY3VzZWQpLHJ0KCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsTjUoMzgscmluLHQueCx0LnkpKSgiaWQiLCJ2aWV3Ym94XyIrdC5pZCksaWUoNCksZTQoIiAjIix0LmlkLCIgIix0LmxpYnJhcnksIi4iLHQudGFibGUs''@;'; put 'put ''IiAiKSxpZSgyKSxfdCh0LmNvbGxhcHNlZD8tMTo2KSxpZSgpLF90KHQuY29sbGFwc2VkPzc6LTEpLGllKDMpLHJ0KCJpZCIsImhhbmRsZV92aWV3Ym94XyIrdC5pZCksaWUoMikscnQoImlkIiwiaGFuZGxlX2Nvcm5lcl9sZWZ0X3ZpZXdib3hfIit0LmlkKSxpZSgyKSxydCgiaWQiLCJoYW5k''@;'; put 'put ''bGVfcmlnaHRfdmlld2JveF8iK3QuaWQpLGllKDIpLHJ0KCJpZCIsImhhbmRsZV9ib3R0b21fdmlld2JveF8iK3QuaWQpLGllKDIpLHJ0KCJpZCIsImhhbmRsZV9sZWZ0X3ZpZXdib3hfIit0LmlkKSxpZSgyKSxPMigiZGlzcGxheSIsdC5jb2xsYXBzZWQ/Im5vbmUiOiIiKSxpZSgzKSxydCgi''@;'; put 'put ''dHlwZSIsdC5zZWFyY2hOdW1lcmljPyJudW1iZXIiOiJ0ZXh0IiksaWUoMiksX3QodC5zZWFyY2hMb2FkaW5nPy0xOjI1KSxpZSgpLF90KHQuc2VhcmNoTG9hZGluZz8yNjotMSksaWUoMyksZGkoIm5nTW9kZWwiLHQuc2VhcmNoTnVtZXJpYyksaWUoNCksX3QodC5sb2FkaW5nRGF0YT8zMzot''@;'; put 'put ''MSksaWUoKSxfdCh0LmxvYWRpbmdEYXRhPy0xOjM0KSxpZSgyKSx3cigiZmlsdGVyLWFjdGl2ZSIsIjAiIT09dC5maWx0ZXJfcGspLGllKDIpLHByKHQuZmlsdGVyVGV4dCksaWUoKSx3cigiZGlzYWJsZWQiLCFyLnRhYmxlRWRpdEV4aXN0cyh0KSksaWUoKSxydCgibmdWYXIiLHIuZ2V0Vmll''@;'; put 'put ''d2JveFRhYmxlSW5kZXgodCkpfX1mdW5jdGlvbiBJaW4obixlKXtpZigxJm4mJkl0KDAsImFwcC1xdWVyeSIsMzgsOCksMiZuKXtjb25zdCB0PVRlKCk7cnQoInZpZXdib3hJZCIsbnVsbD09dC5maWx0ZXJpbmdWaWV3Ym94P251bGw6dC5maWx0ZXJpbmdWaWV3Ym94LmlkKX19bGV0IElaZT0o''@;'; put 'put ''KCk9Pnt2YXIgbjtjbGFzcyBle2dldCB2aWV3Ym94TW9kYWwoKXtyZXR1cm4gdGhpcy5fdmlld2JveE1vZGFsfXNldCB2aWV3Ym94TW9kYWwocil7aWYoITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94JiZyKXJldHVybiB0aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0''@;'; put 'put ''TW9kYWwoIlZpZXdib3hlcyIpLHZvaWQgdGhpcy52aWV3Ym94TW9kYWxDaGFuZ2UuZW1pdCghMSk7dGhpcy5fdmlld2JveE1vZGFsPXIsciYmdGhpcy51bnNldFNlbGVjdGVkVmlld2JveCgpfWNvbnN0cnVjdG9yKHIsaSxvLGEsbCx1LGcsRSxPLFope3RoaXMubmdab25lPXIsdGhpcy5saWNl''@;'; put 'put ''bmNlU2VydmljZT1pLHRoaXMuc2FzU2VydmljZT1vLHRoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5zYXNTdG9yZVNlcnZpY2U9bCx0aGlzLmxvZ2dlclNlcnZpY2U9dSx0aGlzLmhlbHBlclNlcnZpY2U9Zyx0aGlzLnJvdXRlcj1FLHRoaXMuYWN0aXZhdGVkUm91dGU9Tyx0aGlzLmNkZj1aLHRo''@;'; put 'put ''aXMuX3ZpZXdib3hNb2RhbD0hMSx0aGlzLnZpZXdib3hNb2RhbENoYW5nZT1uZXcgS3IsdGhpcy5saWJpbmZvPW51bGwsdGhpcy5saWJyYXJpZXNMb2FkaW5nPSEwLHRoaXMudmlld2JveGVzPVtdLHRoaXMuZGVmYXVsdENvbmZpZz17aWQ6LTEsbGlicmFyeToiIix0YWJsZToiIix3aWR0aDo1''@;'; put 'put ''MDAsaGVpZ2h0OjMwMCx4OjAseToxNTAsY29sdW1uczpbXX0sdGhpcy5zYXNqc0NvbmZpZz1uZXcgeHAuU0FTanNDb25maWcsdGhpcy5ob3RUYWJsZURlZmF1bHQ9e2RhdGE6W10saGVhZGVyUGtzOltdLCRkYXRhZm9ybWF0czp7fSxhbGxDb2xIZWFkZXJzOltdLGNvbEhlYWRlcnNIaWRkZW46''@;'; put 'put ''W10sY29sSGVhZGVyc1Zpc2libGU6W10sY29sSGVhZGVyczpbXSxjb250ZXh0TWVudTpbImNvcHlfd2l0aF9jb2x1bW5faGVhZGVycyIsImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSJdLGNvcHlQYXN0ZTp7Y29weUNvbHVtbkhlYWRlcnM6ITAsY29weUNvbHVtbkhlYWRlcnNPbmx5OiEwfSxj''@;'; put 'put ''b2x1bW5zOltdLGNvbHM6W10saGVpZ2h0OjIwMCxzZXR0aW5nczp7fSxoaWRkZW5Db2x1bW5zOiEwLG1hbnVhbENvbHVtbk1vdmU6ITEsYWZ0ZXJHZXRDb2xIZWFkZXI6dm9pZCAwLGxpY2Vuc2VLZXk6dm9pZCAwLGRyb3Bkb3duTWVudTp2b2lkIDB9LHRoaXMudmlld2JveEhvdFNldHRpbmdz''@;'; put 'put ''PW5ldyBNYXAsdGhpcy52aWV3Ym94VGFibGVzPVtdLHRoaXMuZmlsdGVyPSExLHRoaXMuZmlsdGVyTG9hZGluZz0hMSx0aGlzLm51bGxWYXJpYWJsZXM9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5t''@;'; put 'put ''YXhWaWV3Ym94ZXM9dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdD09PTEvMD82OnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXR8fDZ9bmdPbkluaXQoKXt0aGlzLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oaT0+e3RoaXMubGlicmFyaWVz''@;'; put 'put ''PWkuc2FzbGlic30pLmNhdGNoKGk9Pnt0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoaSl9KS5maW5hbGx5KCgpPT57dGhpcy5saWJyYXJpZXNMb2FkaW5nPSExfSksdGhpcy5fcXVlcnk9dGhpcy5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGk9Pnt0aGlzLmNsYXVzZXM9aS5vYmos''@;'; put 'put ''dGhpcy5maWx0ZXJMaWJkcz1pLmxpYmRzfSksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoaT0+e3RoaXMuaG90VGFibGVEZWZhdWx0LmxpY2Vuc2VLZXk9aX0pO2Nv''@;'; put 'put ''bnN0IHI9dGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy52aWV3Ym94ZXM7ciYmKCExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveD8oc2V0VGltZW91dCgoKT0+dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJMaW5raW5nIFZpZXdi''@;'; put 'put ''b3hlcyIpKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLmFjdGl2YXRlZFJvdXRlLHF1ZXJ5UGFyYW1zOnt9fSkpOih0aGlzLnZpZXdib3hlcz10aGlzLmRlY29kZVVybERhdGEociksc2V0VGltZW91dCgoKT0+e3RoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl9''@;'; put 'put ''KSkpLHRoaXMucmVMb2FkVmlld2JveHRhYmxlcyh0aGlzLnZpZXdib3hlcyl9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCksdGhpcy52aWV3Ym94ZXMuZm9yRWFjaChyPT57dGhpcy5nZXRWaWV3Ym94VGFibGVJbmRleChyKT4t''@;'; put 'put ''MSYmdGhpcy5yZWZyZXNoVGFibGVBZnRlclJlc2l6ZShyKX0pfSwxZTMpfWdldCB2aWV3Ym94TGltaXRSZWFjaGVkKCl7cmV0dXJuIHRoaXMudmlld2JveGVzLmxlbmd0aD49dGhpcy5tYXhWaWV3Ym94ZXN9Y2xyTW9kYWxPcGVuQ2hhbmdlKHIpe3RoaXMudmlld2JveE1vZGFsQ2hhbmdlLmVt''@;'; put 'put ''aXQocil9bGlicmFyeU9uQ2xpY2socil7ci50YWJsZXNMb2FkZWR8fHRoaXMubG9hZFRhYmxlcyhyLmxpYnJhcnkuTElCUkFSWVJFRixyLmxpYnJhcnkpfXRhYmxlT25DbGljayhyKXt2YXIgaT10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtpZihpLnZpZXdib3hMaW1pdFJlYWNoZWQpcmV0''@;'; put 'put ''dXJuO2NvbnN0IG89ey4uLmkuZGVmYXVsdENvbmZpZyx0YWJsZTpyLmxpYlRhYmxlLGxpYnJhcnk6ci5saWJyYXJ5LkxJQlJBUllOQU1FLGxvYWRpbmdEYXRhOiEwLGZpbHRlcl9wazoiMCIsaWQ6aS52aWV3Ym94ZXMubGVuZ3RoKzEseDp3aW5kb3cuaW5uZXJXaWR0aC1pLmRlZmF1bHRDb25m''@;'; put 'put ''aWcud2lkdGgseToxNTB9O2kudmlld2JveGVzLnB1c2gobyksc2V0VGltZW91dCgoKT0+e2kuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl9KTtjb25zdCBhPWAke3IubGlicmFyeS5MSUJSQVJZUkVGfS4ke3IubGliVGFibGV9YDt5aWVsZCBpLmxvYWREYXRhKGEsbyksby5sb2FkaW5nRGF0YT0h''@;'; put 'put ''MSxpLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKSxpLnNuYXBUb0dyaWQoKX0pKCl9bG9hZFRhYmxlcyhyLGkpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMocikudGhlbihvPT57bGV0IGE9by5tcHRhYmxlcy5tYXAoZnVuY3Rpb24obCl7cmV0dXJuIGwuTUVN''@;'; put 'put ''TkFNRX0pO3RoaXMubGliaW5mbz1vLmxpYmluZm98fFtdLHRoaXMudGFibGVzPWEsaSYmKGkudGFibGVzPWEsaS5saWJpbmZvPXRoaXMubGliaW5mbyxpLmxvYWRpbmdUYWJsZXM9ITEsYS5sZW5ndGg+MCYmKGkuZXhwYW5kZWQ9ITApKX0pLmNhdGNoKG89Pnt0aGlzLmxvZ2dlclNlcnZpY2Uu''@;'; put 'put ''ZXJyb3Iobyl9KX1yZWxvYWREYXRhKHIsaSl7dmFyIG89dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChhLGwpPT57bGV0IHU9by52aWV3Ym94VGFibGVzLmZpbmQoZz0+Zy52aWV3Ym94SWQ9PT1pLmlkKTtvLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YShy''@;'; put 'put ''LHBhcnNlSW50KGkuZmlsdGVyX3BrfHwiMCIpKS50aGVuKGc9Pnt1JiYodS5ob3RUYWJsZS5kYXRhPWcudmlld2RhdGEsby5jcmVhdGVWaWV3Ym94VGFibGVTZXR0aW5ncyhpKSksYShudWxsKX0pLmNhdGNoKCgpPT57bCgpfSl9KX0pKCl9bG9hZERhdGEocixpKXt2YXIgbz10aGlzO3JldHVy''@;'; put 'put ''biBDcihmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGEsbCk9PntsZXQgdT0hMSxnPW8udmlld2JveFRhYmxlcy5maW5kKEU9PkUudmlld2JveElkPT09aS5pZCk7ZyYmKCIwIj09PWkuZmlsdGVyX3BrfHwhaS5maWx0ZXJfcGspJiZhKCksby5zYXNTdG9yZVNlcnZpY2Uudmlld0Rh''@;'; put 'put ''dGEocixwYXJzZUludChpLmZpbHRlcl9wa3x8IjAiKSkudGhlbihFPT57Zz91PSEwOmc9e3ZpZXdib3hJZDppLmlkLHZpZXdib3hMaWJEYXRhc2V0OnIsaG90VGFibGU6Y3ooby5ob3RUYWJsZURlZmF1bHQpfSxnLmhvdFRhYmxlLmRhdGE9RS52aWV3ZGF0YSxnLmhvdFRhYmxlLiRkYXRhZm9y''@;'; put 'put ''bWF0cz1FLiR2aWV3ZGF0YSxnLmhvdFRhYmxlLmNvbHM9RS5jb2xzLHlnZShnLmhvdFRhYmxlLmNvbHMsW10sRS4kdmlld2RhdGEpO2xldCBPPVtdLFo9W107Zm9yKGxldCBlZSBpbiBFLnZpZXdkYXRhWzBdKWVlJiZaLnB1c2goZWUpO2ZvcihsZXQgZWU9MDtlZTxaLmxlbmd0aDtlZSsrKU8u''@;'; put 'put ''cHVzaCh7ZGF0YTpaW2VlXX0pO2cuaG90VGFibGUuaGVhZGVyUGtzPWN6KEUuc2FzcGFyYW1zWzBdLlBLX0ZJRUxEUy5zcGxpdCgiICIpKSxnLmhvdFRhYmxlLmFsbENvbEhlYWRlcnM9Wi5maWx0ZXIoZWU9PiFnLmhvdFRhYmxlLmhlYWRlclBrcy5pbmNsdWRlcyhlZSkpLGcuaG90VGFibGUu''@;'; put 'put ''Y29sSGVhZGVyc0hpZGRlbj1jeihnLmhvdFRhYmxlLmFsbENvbEhlYWRlcnMpLGcuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGU9Wi5maWx0ZXIoZWU9PmcuaG90VGFibGUuaGVhZGVyUGtzLmluY2x1ZGVzKGVlKSksZy5ob3RUYWJsZS5jb2xIZWFkZXJzPVosZy5ob3RUYWJsZS5jb2x1bW5z''@;'; put 'put ''PU8saS5jb2x1bW5zJiZpLmNvbHVtbnMubGVuZ3RoPjA/KGcuaG90VGFibGUubWFudWFsQ29sdW1uTW92ZT1pLmNvbHVtbnMsaS5jb2x1bW5zPy5tYXAoKGVlLHZlKT0+e2NvbnN0IE1lPVpbZWVdLEhlPWcuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5pbmRleE9mKE1lKTtIZT4tMSYmKGcu''@;'; put 'put ''aG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5zcGxpY2UoSGUsMSksZy5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZVt2ZV09TWUpfSkpOmcuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUucHVzaCguLi5nLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4uc3BsaWNlKDAsMTApKSxnLmhvdFRh''@;'; put 'put ''YmxlLmNvbEhlYWRlcnNWaXNpYmxlPWcuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUuZmlsdGVyKGVlPT5lZSksdXx8by52aWV3Ym94VGFibGVzLnB1c2goZyksaS5xdWVyeT1vLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKEUucXVlcnkpLGkuZmlsdGVyVGV4dD1FLnNhc3BhcmFtc1swXS5G''@;'; put 'put ''SUxURVJfVEVYVCxvLmNyZWF0ZVZpZXdib3hUYWJsZVNldHRpbmdzKGkpLHNldFRpbWVvdXQoKCk9PntvLnVwZGF0ZUhvdENvbHVtbnMoZy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVufHxbXSxpLmlkKSxzZXRUaW1lb3V0KCgpPT57Y29uc3QgZWU9by5nZXRWaWV3Ym94SG90SW5zdGFuY2Uo''@;'; put 'put ''aS5pZCk7ZWUmJihlZS51cGRhdGVTZXR0aW5ncyh7bWFudWFsQ29sdW1uTW92ZTpnLmhvdFRhYmxlLm1hbnVhbENvbHVtbk1vdmUsYWZ0ZXJHZXRDb2xIZWFkZXI6KHZlLE1lKT0+e2NvbnN0IEhlPWVlPy5jb2xUb1Byb3AodmUpO0hlJiZnLmhvdFRhYmxlLmhlYWRlclBrcy5pbmRleE9mKEhl''@;'; put 'put ''KT4tMSYmTWUuY2xhc3NMaXN0LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIiksTWUuY2xhc3NMaXN0LmFkZChVbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfX0pLGVlLnJlbmRlcigpKSxvLnNlbGVjdGVkVmlld2JveCYmby5yZXNldFNlbGVjdGVkVmlld2JveChpKX0s''@;'; put 'put ''NTAwKX0sMTAwKSxhKCl9KS5jYXRjaChFPT57by5sb2dnZXJTZXJ2aWNlLmVycm9yKEUpLGwoKX0pfSl9KSgpfXJlTG9hZFZpZXdib3h0YWJsZXMocil7ci5tYXAoaT0+e2NvbnN0IG89YCR7aS5saWJyYXJ5fS4ke2kudGFibGV9YDtpLmxvYWRpbmdEYXRhPSEwLHRoaXMubG9hZERhdGEobyxp''@;'; put 'put ''KS50aGVuKCgpPT57aS5sb2FkaW5nRGF0YT0hMX0pfSl9bWF4V2lkdGhDaGVrZXIocixpKXtyZXR1cm4gcj4yMDA/MjAwOnJ9Z2V0Vmlld2JveFRhYmxlSW5kZXgocil7cmV0dXJuIHRoaXMudmlld2JveFRhYmxlcy5maW5kSW5kZXgobz0+by52aWV3Ym94SWQ9PT1yLmlkKX1jcmVhdGVWaWV3''@;'; put 'put ''Ym94VGFibGVTZXR0aW5ncyhyKXtjb25zdCBpPXRoaXMuZ2V0Vmlld2JveFRhYmxlSW5kZXgocik7aWYoLTE9PT1pKXJldHVybiB2b2lkIHRoaXMudmlld2JveEhvdFNldHRpbmdzLnNldChyLmlkLHt9KTtjb25zdCBvPXRoaXMudmlld2JveFRhYmxlc1tpXSxhPXRoaXMuY2FsY3VsYXRlVGFi''@;'; put 'put ''bGVIZWlnaHQociksbD17Y29sSGVhZGVyczpvLmhvdFRhYmxlLmNvbEhlYWRlcnMsY29sdW1uczpvLmhvdFRhYmxlLmNvbHVtbnMsaGVpZ2h0OmEscmVhZE9ubHk6ITAsbW9kaWZ5Q29sV2lkdGg6dGhpcy5tYXhXaWR0aENoZWtlcixjb3B5UGFzdGU6by5ob3RUYWJsZS5jb3B5UGFzdGUsY29u''@;'; put 'put ''dGV4dE1lbnU6e2l0ZW1zOntjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnM6e30sY29weV9jb2x1bW5faGVhZGVyc19vbmx5Ont9LGV4cG9ydF9maWxlOnZnZSgoKT0+InZpZXdib3giKX19LG11bHRpQ29sdW1uU29ydGluZzohMCx2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDo1MCxmaWx0ZXJz''@;'; put 'put ''OiEwLGRyb3Bkb3duTWVudTpvLmhvdFRhYmxlLmRyb3Bkb3duTWVudSxzdHJldGNoSDoiYWxsIixjZWxsczpvLmhvdFRhYmxlLmNlbGxzLG1heFJvd3M6by5ob3RUYWJsZS5tYXhSb3dzfHwxLzAsbWFudWFsQ29sdW1uUmVzaXplOiEwLHJvd0hlYWRlcnM6ITAsbGljZW5zZUtleTpvLmhvdFRh''@;'; put 'put ''YmxlLmxpY2Vuc2VLZXksdGhlbWU6Imh0LXRoZW1lLWNsYXNzaWMifTt0aGlzLnZpZXdib3hIb3RTZXR0aW5ncy5zZXQoci5pZCx7Li4ubH0pLHNldFRpbWVvdXQoKCk9Pnt0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksc2V0VGltZW91dCgoKT0+e2NvbnN0IHU9dGhpcy5nZXRWaWV3Ym94SG90''@;'; put 'put ''SW5zdGFuY2Uoci5pZCk7dSYmKHUubG9hZERhdGEoby5ob3RUYWJsZS5kYXRhKSx1LnJlbmRlcigpKX0sNTAwKX0pfWdldFZpZXdib3hUYWJsZVNldHRpbmdzKHIpe3JldHVybiB0aGlzLnZpZXdib3hIb3RTZXR0aW5ncy5nZXQoci5pZCl8fHt9fXJlc2l6ZShyLGkpe2NvbnN0IG89ci5nZXRC''@;'; put 'put ''b3VuZGluZ0NsaWVudFJlY3QoKSxhPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbD1vLmxlZnQtYS5sZWZ0K28ud2lkdGgsdT1vLnRvcC1hLnRvcCtvLmhlaWdodDtyZXR1cm4gaS5zdHlsZS53aWR0aD1sKyJweCIsaS5zdHlsZS5oZWlnaHQ9dSsicHgiLHRoaXMuc2V0QWxsSGFuZGxlVHJh''@;'; put 'put ''bnNmb3JtKCksdGhpcy5zY2hlZHVsZUFmdGVyUmVzaXplUmVmcmVzaCgpLHt3aWR0aDpsLGhlaWdodDp1fX1yZXNpemVXaWR0aChyLGkpe2NvbnN0IG89ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbD1vLmxlZnQtYS5sZWZ0K28ud2lkdGg7''@;'; put 'put ''cmV0dXJuIGkuc3R5bGUud2lkdGg9bCsicHgiLGx9cmVzaXplSGVpZ2h0KHIsaSl7Y29uc3Qgbz1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxsPW8udG9wLWEudG9wK28uaGVpZ2h0O3JldHVybiBpLnN0eWxlLmhlaWdodD1sKyJweCIsbH1y''@;'; put 'put ''ZXNpemVGcm9tTGVmdEVkZ2UocixpLG8sYSxsKXtpLnN0eWxlLndpZHRoPW8tcisicHgiO2NvbnN0IGc9aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtyZXR1cm57d2lkdGg6Zyx4OmErKGwtZyl9fXNjaGVkdWxlQWZ0ZXJSZXNpemVSZWZyZXNoKCl7dGhpcy5oZWxwZXJTZXJ2aWNl''@;'; put 'put ''LmRlYm91bmNlQ2FsbCgxZTMsKCk9Pnt0aGlzLnZpZXdib3hDaGFuZ2VkKCksdGhpcy5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIiksdGhpcy52aWV3Ym94ZXMuZm9yRWFjaChyPT57dGhpcy5yZWZyZXNoVGFibGVBZnRlclJlc2l6ZShyKX0pfSl9cGFyc2VIYW5kbGVUcmFu''@;'; put 'put ''c2xhdGUocil7Y29uc3QgaT1yLm1hdGNoKC90cmFuc2xhdGVcKFxzKigtP1xkKyg/OlwuXGQrKT8pcHgsXHMqKC0/XGQrKD86XC5cZCspPylweFxzKlwpLyk7cmV0dXJuIGk/e3g6cGFyc2VGbG9hdChpWzFdKSx5OnBhcnNlRmxvYXQoaVsyXSl9Ont4OjAseTowfX1zdGFydFJlc2l6ZShyLGks''@;'; put 'put ''byxhKXtyLnByZXZlbnREZWZhdWx0KCksci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2NvbnN0IGw9ci5jbGllbnRYLHU9ci5jbGllbnRZLGc9dGhpcy5wYXJzZUhhbmRsZVRyYW5zbGF0ZShpLnN0eWxlLnRyYW5zZm9ybSksRT1aPT57aS5z''@;'; put 'put ''dHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgke2cueCsoWi5jbGllbnRYLWwpfXB4LCAke2cueSsoWi5jbGllbnRZLXUpfXB4KWA7Y29uc3QgTWU9dGhpcy5yZXNpemUoaSxvKTthLndpZHRoPU1lLndpZHRoLGEuaGVpZ2h0PU1lLmhlaWdodH0sTz0oKT0+e2RvY3VtZW50LnJlbW92ZUV2ZW50''@;'; put 'put ''TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixFKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLE8pLHRoaXMuZW5kQWN0aXZlUmVzaXplPXZvaWQgMH07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLEUpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVu''@;'; put 'put ''ZXIoInBvaW50ZXJ1cCIsTyksdGhpcy5lbmRBY3RpdmVSZXNpemU9T30pfXN0YXJ0UmVzaXplUmlnaHQocixpLG8sYSl7ci5wcmV2ZW50RGVmYXVsdCgpLHIuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pntjb25zdCBsPXIuY2xpZW50WCx1PXRo''@;'; put 'put ''aXMucGFyc2VIYW5kbGVUcmFuc2xhdGUoaS5zdHlsZS50cmFuc2Zvcm0pLGc9Tz0+e2kuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUoJHt1LngrKE8uY2xpZW50WC1sKX1weCwgJHt1Lnl9cHgpYCxhLndpZHRoPXRoaXMucmVzaXplV2lkdGgoaSxvKSx0aGlzLnNldEFsbEhhbmRsZVRyYW5z''@;'; put 'put ''Zm9ybSgpLHRoaXMuc2NoZWR1bGVBZnRlclJlc2l6ZVJlZnJlc2goKX0sRT0oKT0+e2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixnKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLEUpLHRoaXMuZW5kQWN0aXZlUmVzaXplPXZvaWQg''@;'; put 'put ''MH07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLGcpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsRSksdGhpcy5lbmRBY3RpdmVSZXNpemU9RX0pfXN0YXJ0UmVzaXplQm90dG9tKHIsaSxvLGEpe3IucHJldmVudERlZmF1bHQoKSxyLnN0b3BQ''@;'; put 'put ''cm9wYWdhdGlvbigpLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57Y29uc3QgbD1yLmNsaWVudFksdT10aGlzLnBhcnNlSGFuZGxlVHJhbnNsYXRlKGkuc3R5bGUudHJhbnNmb3JtKSxnPU89PntpLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7dS54fXB4LCAke3UueSso''@;'; put 'put ''Ty5jbGllbnRZLWwpfXB4KWAsYS5oZWlnaHQ9dGhpcy5yZXNpemVIZWlnaHQoaSxvKSx0aGlzLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpLHRoaXMuc2NoZWR1bGVBZnRlclJlc2l6ZVJlZnJlc2goKX0sRT0oKT0+e2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixn''@;'; put 'put ''KSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLEUpLHRoaXMuZW5kQWN0aXZlUmVzaXplPXZvaWQgMH07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLGcpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsRSksdGhpcy5l''@;'; put 'put ''bmRBY3RpdmVSZXNpemU9RX0pfXN0YXJ0UmVzaXplTGVmdChyLGksbyxhKXtyLnByZXZlbnREZWZhdWx0KCksci5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBsPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQsdT1hLngsZz1hLndpZHRoO3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1''@;'; put 'put ''bGFyKCgpPT57Y29uc3QgRT1yLmNsaWVudFgsTz10aGlzLnBhcnNlSGFuZGxlVHJhbnNsYXRlKGkuc3R5bGUudHJhbnNmb3JtKSxaPXZlPT57aS5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgke08ueCsodmUuY2xpZW50WC1FKX1weCwgJHtPLnl9cHgpYDtjb25zdHt3aWR0aDpIZSx4Oldl''@;'; put 'put ''fT10aGlzLnJlc2l6ZUZyb21MZWZ0RWRnZSh2ZS5jbGllbnRYLG8sbCx1LGcpO2Eud2lkdGg9SGUsdGhpcy5uZ1pvbmUucnVuKCgpPT57YS54PVdlfSksdGhpcy5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKSx0aGlzLnNjaGVkdWxlQWZ0ZXJSZXNpemVSZWZyZXNoKCl9LGVlPSgpPT57ZG9jdW1l''@;'; put 'put ''bnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLFopLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsZWUpLHRoaXMuZW5kQWN0aXZlUmVzaXplPXZvaWQgMH07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLFopLGRvY3VtZW50''@;'; put 'put ''LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsZWUpLHRoaXMuZW5kQWN0aXZlUmVzaXplPWVlfSl9c3RhcnRSZXNpemVCb3R0b21MZWZ0KHIsaSxvLGEpe3IucHJldmVudERlZmF1bHQoKSxyLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IGw9by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5y''@;'; put 'put ''aWdodCx1PWEueCxnPWEud2lkdGg7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pntjb25zdCBFPXIuY2xpZW50WCxPPXIuY2xpZW50WSxaPXRoaXMucGFyc2VIYW5kbGVUcmFuc2xhdGUoaS5zdHlsZS50cmFuc2Zvcm0pLGVlPU1lPT57aS5zdHlsZS50cmFuc2Zvcm09YHRyYW5z''@;'; put 'put ''bGF0ZSgke1oueCsoTWUuY2xpZW50WC1FKX1weCwgJHtaLnkrKE1lLmNsaWVudFktTyl9cHgpYDtjb25zdHt3aWR0aDphdCx4OkN0fT10aGlzLnJlc2l6ZUZyb21MZWZ0RWRnZShNZS5jbGllbnRYLG8sbCx1LGcpLEF0PXRoaXMucmVzaXplSGVpZ2h0KGksbyk7YS53aWR0aD1hdCxhLmhlaWdo''@;'; put 'put ''dD1BdCx0aGlzLm5nWm9uZS5ydW4oKCk9PnthLng9Q3R9KSx0aGlzLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpLHRoaXMuc2NoZWR1bGVBZnRlclJlc2l6ZVJlZnJlc2goKX0sdmU9KCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsZWUpLGRvY3VtZW50LnJl''@;'; put 'put ''bW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsdmUpLHRoaXMuZW5kQWN0aXZlUmVzaXplPXZvaWQgMH07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLGVlKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLHZlKSx0aGlzLmVuZEFjdGl2ZVJl''@;'; put 'put ''c2l6ZT12ZX0pfXNldEFsbEhhbmRsZVRyYW5zZm9ybSgpe2NvbnN0IHI9KGksbyk9PmkuZmluZChhPT5hLm5hdGl2ZUVsZW1lbnQuaWQ9PT1vKT8ubmF0aXZlRWxlbWVudDt0aGlzLnJlc2l6ZUJveFF1ZXJ5LmZvckVhY2goaT0+e2NvbnN0IG89aS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5n''@;'; put 'put ''Q2xpZW50UmVjdCgpLGE9aS5uYXRpdmVFbGVtZW50LmlkO3RoaXMuc2V0SGFuZGxlVHJhbnNmb3JtKHIodGhpcy5kcmFnSGFuZGxlQ29ybmVyUXVlcnksYGhhbmRsZV8ke2F9YCksbywiYm90aCIpLHRoaXMuc2V0SGFuZGxlVHJhbnNmb3JtKHIodGhpcy5kcmFnSGFuZGxlQ29ybmVyTGVmdFF1''@;'; put 'put ''ZXJ5LGBoYW5kbGVfY29ybmVyX2xlZnRfJHthfWApLG8sImJvdHRvbUxlZnQiKSx0aGlzLnNldEhhbmRsZVRyYW5zZm9ybShyKHRoaXMuZHJhZ0hhbmRsZVJpZ2h0UXVlcnksYGhhbmRsZV9yaWdodF8ke2F9YCksbywieCIpLHRoaXMuc2V0SGFuZGxlVHJhbnNmb3JtKHIodGhpcy5kcmFnSGFu''@;'; put 'put ''ZGxlQm90dG9tUXVlcnksYGhhbmRsZV9ib3R0b21fJHthfWApLG8sInkiKSx0aGlzLnNldEhhbmRsZVRyYW5zZm9ybShyKHRoaXMuZHJhZ0hhbmRsZUxlZnRRdWVyeSxgaGFuZGxlX2xlZnRfJHthfWApLG8sImxlZnQiKX0pfXNldEhhbmRsZVRyYW5zZm9ybShyLGksbyl7Y29uc3QgYT1yLmdl''@;'; put 'put ''dEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBsPWkud2lkdGgtYS53aWR0aCx1PWkuaGVpZ2h0LWEuaGVpZ2h0O2wrPTUsdSs9NSwieCI9PT1vJiYoci5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgke2x9cHgsIDApYCksInkiPT09byYmKHIuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUo''@;'; put 'put ''MCwgJHt1fXB4KWApLCJib3RoIj09PW8mJihyLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7bH1weCwgJHt1fXB4KWApLCJsZWZ0Ij09PW8mJihyLnN0eWxlLnRyYW5zZm9ybT0idHJhbnNsYXRlKC01cHgsIDApIiksImJvdHRvbUxlZnQiPT09byYmKHIuc3R5bGUudHJhbnNmb3JtPWB0''@;'; put 'put ''cmFuc2xhdGUoLTVweCwgJHt1fXB4KWApfWZvY3VzVmlld2JveChyKXt0aGlzLnZpZXdib3hlcy5tYXAoaT0+e2kuZm9jdXNlZD0hMX0pLHIuZm9jdXNlZD0hMH12aWV3Ym94RHJhZ0VuZGVkKHIsaSl7bGV0IGE9ci5zb3VyY2UuZ2V0Um9vdEVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJl''@;'; put 'put ''Y3QoKTtpLng9YS5sZWZ0LGkueT1hLnRvcCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9c25hcFRvR3JpZCgpe2NvbnN0IHI9d2luZG93LmlubmVyV2lkdGgsaT13aW5kb3cuaW5uZXJIZWlnaHQsdT1NYXRoLmNlaWwodGhpcy52aWV3Ym94ZXMubGVuZ3RoLzIpLGc9TWF0aC5mbG9vcih0aGlzLnZp''@;'; put 'put ''ZXdib3hlcy5sZW5ndGgvMiksWj0oci01Kih1KzEpKS91LGVlPShyLTUqKGcrMSkpL2c7bGV0IE1lPTAsV2U9KGktMjUwLTYwKS8yLGF0PTAsQ3Q9MDtmb3IobGV0IEF0PTA7QXQ8dGhpcy52aWV3Ym94ZXMubGVuZ3RoO0F0Kyspe2xldCBLdD10aGlzLnZpZXdib3hlc1tBdF0scXQ9IShBdD51''@;'; put 'put ''LTEpO2NvbnN0IGduPXF0P1o6ZWU7IXF0JiYwPT09Q3QmJihhdD0wLEN0KyssTWU9MCksS3QueD01K01lK2F0Kihnbis1KSxLdC55PTI1MCtDdCooV2UrNSksS3Qud2lkdGg9Z24sS3QuaGVpZ2h0PVdlLGF0Kyt9dGhpcy52aWV3Ym94Q2hhbmdlZCgpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnNl''@;'; put 'put ''dEFsbEhhbmRsZVRyYW5zZm9ybSgpLHRoaXMudmlld2JveGVzLmZvckVhY2goQXQ9Pnt0aGlzLnJlZnJlc2hUYWJsZUFmdGVyUmVzaXplKEF0KX0pfSl9bWluaW1pemVBbGwoKXt0aGlzLnZpZXdib3hlcy5mb3JFYWNoKHI9PntyLm1pbmltaXplZD0hMH0pLHRoaXMudmlld2JveENoYW5nZWQo''@;'; put 'put ''KX1yZXN0b3JlQWxsKCl7dGhpcy52aWV3Ym94ZXMuZm9yRWFjaChyPT57ci5taW5pbWl6ZWQ9ITF9KSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9cmVzZXRQb3NTaXplKHIpe3IueD13aW5kb3cuaW5uZXJXaWR0aC10aGlzLmRlZmF1bHRDb25maWcud2lkdGgsci55PXRoaXMuZGVmYXVsdENvbmZp''@;'; put 'put ''Zy55LHIud2lkdGg9dGhpcy5kZWZhdWx0Q29uZmlnLndpZHRoLHIuaGVpZ2h0PXRoaXMuZGVmYXVsdENvbmZpZy5oZWlnaHQsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfW1pbmltaXplKHIpe3IubWluaW1pemVkPSEwLHRoaXMudmlld2JveENoYW5nZWQoKX1yZXN0b3JlKHIpe3IubWluaW1pemVk''@;'; put 'put ''PSExLHRoaXMudmlld2JveENoYW5nZWQoKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5yZWZyZXNoVGFibGVBZnRlclJlc2l6ZShyKX0sMTAwKX1jb2xsYXBzZShyKXtyLmNvbGxhcHNlZD0hMCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9ZXhwYW5kKHIpe3IuY29sbGFwc2VkPSExLHRoaXMudmlld2Jv''@;'; put 'put ''eENoYW5nZWQoKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5yZWZyZXNoVGFibGVBZnRlclJlc2l6ZShyKX0sMTAwKX1jbG9zZShyKXtjb25zdCBpPXRoaXMudmlld2JveGVzLmZpbmRJbmRleChhPT5hLmlkPT09ci5pZCksbz10aGlzLnZpZXdib3hUYWJsZXMuZmluZEluZGV4KGE9PmEudmlld2Jv''@;'; put 'put ''eElkPT09ci5pZCk7aT4tMSYmdGhpcy52aWV3Ym94ZXMuc3BsaWNlKGksMSksbz4tMSYmdGhpcy52aWV3Ym94VGFibGVzLnNwbGljZShvLDEpLHRoaXMudmlld2JveEhvdFNldHRpbmdzLmRlbGV0ZShyLmlkKSx0aGlzLnNlbGVjdGVkVmlld2JveD8uaWQ9PT1yLmlkJiZ0aGlzLnVuc2V0U2Vs''@;'; put 'put ''ZWN0ZWRWaWV3Ym94KCksVW4udmlld2JveGVzW3IuaWRdPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoY3JlKSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9c2VsZWN0Vmlld2JveChyKXt2b2lkIDA9PT10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlJiZ2b2lkIDA9PT10aGlzLnNlbGVjdGVk''@;'; put 'put ''Vmlld2JveD90aGlzLnJlc2V0U2VsZWN0ZWRWaWV3Ym94KHIpOnIuaWQ9PT10aGlzLnNlbGVjdGVkVmlld2JveD8uaWQ/dGhpcy51bnNldFNlbGVjdGVkVmlld2JveCgpOnRoaXMucmVzZXRTZWxlY3RlZFZpZXdib3gocil9Y29sdW1uc0Ryb3Aocil7dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJs''@;'; put 'put ''ZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbiYmKHIucHJldmlvdXNDb250YWluZXI9PT1yLmNvbnRhaW5lcj9Jb2Uoci5jb250YWluZXIuZGF0YSxyLnByZXZpb3VzSW5kZXgsci5jdXJyZW50SW5kZXgpOmZ1bmN0aW9uIHA0dChuLGUsdCxyKXtjb25zdCBpPXdEKHQsbi5sZW5ndGgtMSks''@;'; put 'put ''bz13RChyLGUubGVuZ3RoKTtuLmxlbmd0aCYmZS5zcGxpY2UobywwLG4uc3BsaWNlKGksMSlbMF0pfShyLnByZXZpb3VzQ29udGFpbmVyLmRhdGEsci5jb250YWluZXIuZGF0YSxyLnByZXZpb3VzSW5kZXgsci5jdXJyZW50SW5kZXgpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFi''@;'; put 'put ''bGUmJiJvYmplY3QiPT10eXBlb2YgdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzKSYmdGhpcy51cGRhdGVDb2x1bW5PcmRlckhvdChyLml0ZW0uZGF0YSxyLmN1cnJlbnRJbmRleCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCl9b25Db2xz''@;'; put 'put ''ZWFyY2hDaGFuZ2UocixpLG8pe2NvbnN0IGE9by5pbmRleE9mKGkpO28uc3BsaWNlKGEsMSksci52YWx1ZT0iIix0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZSYmKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUucHVzaChpKSx0''@;'; put 'put ''aGlzLnVwZGF0ZUhvdENvbHVtbnModGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbix0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCksdGhpcy51cGRhdGVDb2x1bW5PcmRlckhvdChpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUu''@;'; put 'put ''aG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUubGVuZ3RoLTEsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpKX1vbkNvbFJlbW92ZShyKXtpZih0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZSl7Y29uc3QgaT10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhv''@;'; put 'put ''dFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmluZGV4T2Yocik7dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5zcGxpY2UoaSwxKSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4ucHVzaChyKSx0aGlz''@;'; put 'put ''LnVwZGF0ZUhvdENvbHVtbnModGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbix0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCksdGhpcy51cGRhdGVDb2x1bW5PcmRlckhvdChyLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90''@;'; put 'put ''VGFibGUuY29sSGVhZGVyc1Zpc2libGUubGVuZ3RoLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKX19cmVzZXRTZWxlY3RlZFZpZXdib3gocil7dGhpcy5zZWxlY3RlZFZpZXdib3g9cix0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPXRoaXMudmlld2JveFRhYmxlcy5maW5k''@;'; put 'put ''KGk9Pmkudmlld2JveElkPT09ci5pZCl9dW5zZXRTZWxlY3RlZFZpZXdib3goKXt0aGlzLnNlbGVjdGVkVmlld2JveD12b2lkIDAsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT12b2lkIDB9c3RvcFByb3BhZ2F0aW9uKHIpe3Iuc3RvcFByb3BhZ2F0aW9uKCl9b3BlbkZpbHRlcihyKXt0aGlz''@;'; put 'put ''LnNlbGVjdFZpZXdib3gocik7Y29uc3QgaT10aGlzLnZpZXdib3hUYWJsZXNbdGhpcy5nZXRWaWV3Ym94VGFibGVJbmRleChyKV07dGhpcy5maWx0ZXJMaWJkcz1gJHtyLmxpYnJhcnl9LiR7ci50YWJsZX1gLHRoaXMuZmlsdGVyaW5nVmlld2JveD1yLHRoaXMuZmlsdGVyPSEwLHRoaXMuY2Rm''@;'; put 'put ''LmRldGVjdENoYW5nZXMoKSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmZpbHRlckxpYmRzLGkuaG90VGFibGUuY29scyl9b3BlblRhYmxlRWRpdChyKXtjb25zdCBpPXIubGlicmFyeSsiLiIrci50YWJsZTtsZXQgbz1sb2NhdGlvbi5ocmVmLnNsaWNlKDAs''@;'; put 'put ''bG9jYXRpb24uaHJlZi5pbmRleE9mKCIjIikpO289YCR7b30jL2VkaXRvci8ke2l9YCx3aW5kb3cub3BlbihvLCJfYmxhbmsiKX1yZXNldEZpbHRlcigpe3RoaXMuZmlsdGVyaW5nVmlld2JveCYmKHRoaXMuZmlsdGVyaW5nVmlld2JveC5maWx0ZXJfcGs9IjAiLHRoaXMucmVsb2FkVGFibGVE''@;'; put 'put ''YXRhKHRoaXMuZmlsdGVyaW5nVmlld2JveCksdGhpcy5maWx0ZXI9ITEsdGhpcy52aWV3Ym94Q2hhbmdlZCgpLFVuLnZpZXdib3hlc1t0aGlzLmZpbHRlcmluZ1ZpZXdib3guaWRdPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoY3JlKSl9c2VuZENsYXVzZSgpe3RoaXMuZmlsdGVyTG9h''@;'; put 'put ''ZGluZz0hMDtsZXQgcj1bXSxpPVtdO2lmKHR5cGVvZiB0aGlzLmNsYXVzZXM+InUiKXJldHVybiB0aGlzLm51bGxWYXJpYWJsZXM9ITAsdm9pZCh0aGlzLmZpbHRlckxvYWRpbmc9ITEpO3tsZXQgbz10aGlzLmNsYXVzZXMucXVlcnlPYmo7Zm9yKGxldCBhPTA7YTxvLmxlbmd0aDthKyspe2Nv''@;'; put 'put ''bnN0IGw9b1thXS5lbGVtZW50cztyPWwuZmlsdGVyKGZ1bmN0aW9uKHUpe3JldHVybiBudWxsPT09dS52YXJpYWJsZX0pLHIubGVuZ3RoJiZpLnB1c2gobCl9fWlmKGkubGVuZ3RoKXJldHVybiB0aGlzLm51bGxWYXJpYWJsZXM9ITAsdm9pZCh0aGlzLmZpbHRlckxvYWRpbmc9ITEpO3RyeXtp''@;'; put 'put ''Zih2b2lkIDAhPT10aGlzLmNsYXVzZXMmJnRoaXMuZmlsdGVyTGliZHMpe2NvbnN0IG89e2dyb3VwTG9naWM6dGhpcy5jbGF1c2VzLmdyb3VwTG9naWMsZmlsdGVyR3JvdXBzOltdfTt0aGlzLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaChsPT57Y29uc3QgdT17ZmlsdGVyQ2xhdXNlczpbXX07''@;'; put 'put ''bC5lbGVtZW50cy5mb3JFYWNoKGc9Pnt1LmZpbHRlckNsYXVzZXMucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGcpKX0pLHUuY2xhdXNlTG9naWM9bC5jbGF1c2VMb2dpYyxvLmZpbHRlckdyb3Vwcy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodSkpfSk7Y29u''@;'; put 'put ''c3QgYT10aGlzLnNhc1N0b3JlU2VydmljZS5jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKG8pO3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnNhdmVRdWVyeSh0aGlzLmZpbHRlckxpYmRzLGEpLnRoZW4obD0+e3RoaXMuZmlsdGVyaW5nVmlld2JveC5maWx0ZXJfcGs9bC5yZXN1bHRbMF0uRklMVEVSX1JL''@;'; put 'put ''LHRoaXMubG9hZERhdGEodGhpcy5maWx0ZXJMaWJkcyx0aGlzLmZpbHRlcmluZ1ZpZXdib3gpLnRoZW4oKCk9Pnt0aGlzLmZpbHRlcj0hMSx0aGlzLmZpbHRlckxvYWRpbmc9ITF9KSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9KS5jYXRjaChsPT57dGhpcy5maWx0ZXJMb2FkaW5nPSExfSl9fWNh''@;'; put 'put ''dGNoe3RoaXMuZmlsdGVyTG9hZGluZz0hMX19c2VhcmNoVGFibGUocixpKXt2YXIgbz10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtpLnNlYXJjaExvYWRpbmc9ITA7bGV0IGE9ci52YWx1ZSxsPWkubGlicmFyeSsiLiIraS50YWJsZSx1PXBhcnNlSW50KGkuZmlsdGVyX3BrfHwiMCIpO2Nv''@;'; put 'put ''bnN0IGc9by52aWV3Ym94VGFibGVzLmZpbmQoRT0+RS52aWV3Ym94SWQ9PT1pLmlkKTtnJiYoeWllbGQgby5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGFTZWFyY2goYSxpLnNlYXJjaE51bWVyaWMsbCx1KS50aGVuKEU9PntFLnNhc3BhcmFtc3x8RS52aWV3RGF0YT8oZy5ob3RUYWJsZS5kYXRh''@;'; put 'put ''PUUudmlld2RhdGEsby5jcmVhdGVWaWV3Ym94VGFibGVTZXR0aW5ncyhpKSk6aS5zZWFyY2hMb2FkaW5nPSEwfSkuY2F0Y2goRT0+e28ubG9nZ2VyU2VydmljZS5lcnJvcihFKX0pLGkuc2VhcmNoTG9hZGluZz0hMSl9KSgpfXJlbG9hZFRhYmxlRGF0YShyKXt2YXIgaT10aGlzO3JldHVybiBD''@;'; put 'put ''cihmdW5jdGlvbiooKXtjb25zdCBvPWAke3IubGlicmFyeX0uJHtyLnRhYmxlfWA7ci5sb2FkaW5nRGF0YT0hMCx5aWVsZCBpLnJlbG9hZERhdGEobyxyKSxyLmxvYWRpbmdEYXRhPSExLGkuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpfSkoKX11cGRhdGVIb3RDb2x1bW5z''@;'; put 'put ''KHIsaSl7dGhpcy51cGRhdGVIaWRkZW5Db2x1bW5zSG90KHIsaSksdGhpcy5zZXRDb2x1bW5PcmRlcihpKX11cGRhdGVDb2x1bW5PcmRlckhvdChyLGksbyl7Y29uc3QgYT10aGlzLmdldFZpZXdib3hIb3RJbnN0YW5jZShvKTtpZihhKXtjb25zdCBsPWEucHJvcFRvQ29sKHIpO2EuZ2V0UGx1''@;'; put 'put ''Z2luKCJtYW51YWxDb2x1bW5Nb3ZlIikubW92ZUNvbHVtbihsLGkpLGEucmVuZGVyKCksdGhpcy5zZXRDb2x1bW5PcmRlcihvKX19dGFibGVFZGl0RXhpc3RzKHIpe2NvbnN0IGk9VW4uZWRpdG9yLmxpYnNBbmRUYWJsZXMsbz1yLmxpYnJhcnk7cmV0dXJuISFpW29dJiZpW29dLmluY2x1ZGVz''@;'; put 'put ''KHIudGFibGUpfXNldENvbHVtbk9yZGVyKHIpe2NvbnN0IGk9dGhpcy52aWV3Ym94ZXMuZmluZChvPT5vLmlkPT09cik7aWYoaSl7Y29uc3Qgbz10aGlzLmNyZWF0ZUNvbHVtbk9yZGVyKHIpO2kuY29sdW1ucz1vLmxlbmd0aD4wP286aS5jb2x1bW5zfXRoaXMudmlld2JveENoYW5nZWQoKX1j''@;'; put 'put ''cmVhdGVDb2x1bW5PcmRlcihyKXtjb25zdCBpPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKHIpO2lmKCFpKXJldHVybltdO2NvbnN0IG89aS5nZXRDb2xIZWFkZXIoKSxhPXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnM7aWYoIWEpcmV0dXJuW107Y29u''@;'; put 'put ''c3QgbD10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZT8uY29sSGVhZGVyc1Zpc2libGUubGVuZ3RofHw1LHU9W107cmV0dXJuIG8ubWFwKChnLEUpPT57aWYoRTxsKXtjb25zdCBPPWEuaW5kZXhPZihnKTtPPi0xJiZ1LnB1c2goTyl9fSksdX11cGRhdGVIaWRkZW5Db2x1bW5z''@;'; put 'put ''SG90KHIsaSl7Y29uc3Qgbz10aGlzLmdldFZpZXdib3hIb3RJbnN0YW5jZShpKTtpZihvKXtjb25zdCBhPXIubWFwKGw9Pm8ucHJvcFRvQ29sKGwpKTtvLnVwZGF0ZVNldHRpbmdzKHtoaWRkZW5Db2x1bW5zOntjb2x1bW5zOmF9fSksby5yZW5kZXIoKX19Y2FsY3VsYXRlVGFibGVIZWlnaHQo''@;'; put 'put ''cil7cmV0dXJuIHIuaGVpZ2h0LTIwLTM2LTJ9cmVmcmVzaFRhYmxlQWZ0ZXJSZXNpemUocil7Y29uc3QgaT10aGlzLmdldFZpZXdib3hIb3RJbnN0YW5jZShyLmlkKTtpJiZzZXRUaW1lb3V0KCgpPT57dHJ5e2kudXBkYXRlU2V0dGluZ3Moe2hlaWdodDp0aGlzLmNhbGN1bGF0ZVRhYmxlSGVp''@;'; put 'put ''Z2h0KHIpfSksaS5yZWZyZXNoRGltZW5zaW9ucygpLGkucmVuZGVyKCl9Y2F0Y2h7c2V0VGltZW91dCgoKT0+e3RyeXtpLnVwZGF0ZVNldHRpbmdzKHtoZWlnaHQ6dGhpcy5jYWxjdWxhdGVUYWJsZUhlaWdodChyKX0pLGkucmVmcmVzaERpbWVuc2lvbnMoKX1jYXRjaChhKXtjb25zb2xlLndh''@;'; put 'put ''cm4oIkZhaWxlZCB0byByZWZyZXNoIEhPVCBkaW1lbnNpb25zIGZvciB2aWV3Ym94IixyLmlkLGEpfX0sNTAwKX19LDEwMCl9Z2V0Vmlld2JveEhvdEluc3RhbmNlKHIpe2lmKCFyfHwhdGhpcy5ob3RUYWJsZUNvbXBvbmVudHMpcmV0dXJuO2NvbnN0IGk9dGhpcy52aWV3Ym94ZXMuZmluZElu''@;'; put 'put ''ZGV4KHU9PnUuaWQ9PT1yKTtpZigtMT09PWkpcmV0dXJuO2NvbnN0IG89dGhpcy5ob3RUYWJsZUNvbXBvbmVudHMudG9BcnJheSgpO2xldCBhPTA7Zm9yKGxldCB1PTA7dTxpO3UrKyl0aGlzLmdldFZpZXdib3hUYWJsZUluZGV4KHRoaXMudmlld2JveGVzW3VdKT4tMSYmYSsrO3JldHVybiBv''@;'; put 'put ''W2FdPy5ob3RJbnN0YW5jZXx8dm9pZCAwfXZpZXdib3hDaGFuZ2VkKCl7bGV0IHI7Y29uc3QgaT10aGlzLmVuY29kZVVybERhdGEodGhpcy52aWV3Ym94ZXMpO2kubGVuZ3RoPjAmJihyPXt2aWV3Ym94ZXM6aX0pLHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRvOnRoaXMuYWN0''@;'; put 'put ''aXZhdGVkUm91dGUscXVlcnlQYXJhbXM6cn0pLHRoaXMucHJlcGFyZUZpbHRlckNhY2hlKCl9cHJlcGFyZUZpbHRlckNhY2hlKCl7Zm9yKGxldCByIG9mIHRoaXMudmlld2JveGVzKWlmKFVuLnZpZXdib3hlc1tyLmlkXXx8KFVuLnZpZXdib3hlc1tyLmlkXT10aGlzLmhlbHBlclNlcnZpY2Uu''@;'; put 'put ''ZGVlcENsb25lKGNyZSkpLHIucXVlcnkmJnIucXVlcnkubGVuZ3RoPjApe2NvbnN0IGk9dGhpcy52aWV3Ym94VGFibGVzLmZpbmQoYT0+YS52aWV3Ym94SWQ9PT1yLmlkKSxvPWB2aWV3Ym94ZXMuJHtyLmlkfWA7VW4udmlld2JveGVzW3IuaWRdLmZpbHRlci5xdWVyeT1yLnF1ZXJ5LFVuLnZp''@;'; put 'put ''ZXdib3hlc1tyLmlkXS5maWx0ZXIubGliZHM9ci5saWJyYXJ5KyIuIityLnRhYmxlLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLmluaXRpYWxpemVHbG9iYWxGaWx0ZXJDbGF1c2UobyxpPy5ob3RUYWJsZS5jb2xzKX19ZW5jb2RlVXJsRGF0YShyKXtsZXQgaT0iIjtyZXR1cm4gci5tYXAoKG8sYSk9''@;'; put 'put ''PntpKz1gJHtvLmlkfS0ke28ubGlicmFyeX0tJHtvLnRhYmxlfS0ke28ud2lkdGh9LSR7by5oZWlnaHR9LSR7by54fS0ke28ueX0tJHtvLmNvbGxhcHNlZD8xOjB9LSR7by5taW5pbWl6ZWQ/MTowfS0ke28uZmlsdGVyX3BrfHwwfSR7by5jb2x1bW5zJiZvLmNvbHVtbnMubGVuZ3RoPjA/Ii0i''@;'; put 'put ''K28uY29sdW1ucz8uam9pbigiLCIpOiIifWAsYSE9PXIubGVuZ3RoLTEmJihpKz0iOyIpfSksaX1kZWNvZGVVcmxEYXRhKHIpe2xldCBvPVtdO3JldHVybiByLnNwbGl0KCI7IikubWFwKGw9Pntjb25zdCB1PWwuc3BsaXQoIi0iKTtvLnB1c2goe2lkOnBhcnNlSW50KHVbMF0pLGxpYnJhcnk6''@;'; put 'put ''dVsxXSx0YWJsZTp1WzJdLHdpZHRoOnBhcnNlSW50KHVbM10pLGhlaWdodDpwYXJzZUludCh1WzRdKSx4OnBhcnNlSW50KHVbNV0pLHk6cGFyc2VJbnQodVs2XSksY29sbGFwc2VkOiEhcGFyc2VJbnQodVs3XSksbWluaW1pemVkOiEhcGFyc2VJbnQodVs4XSksY29sdW1uczp1WzEwXT8uc3Bs''@;'; put 'put ''aXQoIiwiKS5tYXAoZz0+cGFyc2VJbnQoZykpfHxbXSxmaWx0ZXJfcGs6dVs5XX0pfSksb31uZ09uRGVzdHJveSgpe3RoaXMuX3F1ZXJ5Py51bnN1YnNjcmliZSgpLHRoaXMuZW5kQWN0aXZlUmVzaXplPy4oKX1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0''@;'; put 'put ''dXJuIG5ldyhpfHxlKSh6ZShnYSksemUoRjIpLHplKGljKSx6ZSh1ZCksemUoQnApLHplKHgzKSx6ZShmaCksemUodmMpLHplKHAxKSx6ZShVbCkpfSx0aGlzLlx1MDI3NWNtcD1Qcih7dHlwZTplLHNlbGVjdG9yczpbWyJhcHAtdmlld2JveGVzIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihpLG8p''@;'; put 'put ''e2lmKDEmaSYmKFdvKEtybiw1KSxXbyhYcm4sNSksV28oUXJuLDUpLFdvKEpybiw1KSxXbyhlaW4sNSksV28odGluLDUpLFdvKEw3LDUpKSwyJmkpe2xldCBhO2NpKGE9dWkoKSkmJihvLnJlc2l6ZUJveFF1ZXJ5PWEpLGNpKGE9dWkoKSkmJihvLmRyYWdIYW5kbGVDb3JuZXJRdWVyeT1hKSxj''@;'; put 'put ''aShhPXVpKCkpJiYoby5kcmFnSGFuZGxlQ29ybmVyTGVmdFF1ZXJ5PWEpLGNpKGE9dWkoKSkmJihvLmRyYWdIYW5kbGVSaWdodFF1ZXJ5PWEpLGNpKGE9dWkoKSkmJihvLmRyYWdIYW5kbGVCb3R0b21RdWVyeT1hKSxjaShhPXVpKCkpJiYoby5kcmFnSGFuZGxlTGVmdFF1ZXJ5PWEpLGNpKGE9''@;'; put 'put ''dWkoKSkmJihvLmhvdFRhYmxlQ29tcG9uZW50cz1hKX19LGlucHV0czp7dmlld2JveE1vZGFsOiJ2aWV3Ym94TW9kYWwifSxvdXRwdXRzOnt2aWV3Ym94TW9kYWxDaGFuZ2U6InZpZXdib3hNb2RhbENoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZGVjbHM6NTgsdmFyczoyMSxjb25zdHM6W1siaW5w''@;'; put 'put ''dXQiLCIiXSxbInJlc2l6ZUJveCIsIiJdLFsiZHJhZ0hhbmRsZUNvcm5lciIsIiJdLFsiZHJhZ0hhbmRsZUNvcm5lckxlZnQiLCIiXSxbImRyYWdIYW5kbGVSaWdodCIsIiJdLFsiZHJhZ0hhbmRsZUJvdHRvbSIsIiJdLFsiZHJhZ0hhbmRsZUxlZnQiLCIiXSxbInNlYXJjaEVsIiwiIl0sWyJx''@;'; put 'put ''dWVyeUZpbHRlciIsIiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJyb290LW1vZGFsIiwicG9zaXRpb24tcmVsYXRpdmUiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbFNpemUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwi''@;'; put 'put ''bGljZW5jZS1ub3RpY2UiXSxbMSwibW9kYWwtYm9keSIsImQtZmxleCJdLFsxLCJhZGQtbmV3IiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsIm10LTAiXSxbMSwidy0xMDAiXSxbMSwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWzEsIm0tMCIsInZpZXdib3gtbGltaXQt''@;'; put 'put ''bm90aWNlIl0sWzMsImxpYnJhcnlMaXN0Il0sWzEsImN1cnJlbnRseS1vcGVuIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlw''@;'; put 'put ''LWJvdHRvbS1sZWZ0IiwibWwtMyIsMywiY2xpY2siXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInNoYXBlIiwiZ3JpZC12aWV3Iiwic2l6ZSIsIjE5Il0sWzEsInRvb2x0aXAtY29udGVudCJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJtaW51cyIsInNpemUiLCIxOSJdLFsiYXJp''@;'; put 'put ''YS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJ3aW5kb3ctcmVzdG9yZSIsInNpemUiLCIxOSJdLFsxLCJ0ZXh0LWNlbnRlciIsInctMTAwIiwibS0wIl0sWzEsIm9wZW4tdmlld2JveCIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1hbGlnbi1pdGVtcy1jZW50''@;'; put 'put ''ZXIiLDMsInNlbGVjdGVkIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJtdC0xMCJdLFsxLCJtLTAiXSxbImNsYXNzIiwiY29uZmlndXJhdGlvbi13cmFwcGVyIiwiY2RrRHJvcExpc3RHcm91cCIsIiIsNCwibmdW''@;'; put 'put ''YXIiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwidmlld2JveGVzLWNvbnRhaW5lciJdLFsiY2RrRHJhZ0JvdW5kYXJ5IiwiLnZpZXdib3hlcy1jb250YWluZXIiLCJjZGtEcmFnIiwiIiwi''@;'; put 'put ''dGFiaW5kZXgiLCIwIiwxLCJ2aWV3Ym94IiwzLCJmb2N1c2VkIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0IiwicG9pbnRlci1ldmVudHMiLCJib3gtc2hhZG93IiwiY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb24iLCJpZCJdLFsxLCJmaWx0ZXItbW9kYWwiLDMsImNsck1vZGFsT3BlbkNoYW5n''@;'; put 'put ''ZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHkiXSxbMywidmlld2JveElkIl0sWyJ0eXBlIiwiYnV0dG9uIiwx''@;'; put 'put ''LCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsiY2xyTWVkaXVtIiwiIl0sWzMsImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsInRh''@;'; put 'put ''YmxlT25DbGlja0VtaXR0ZXIiLCJsaWJyYXJ5TGlzdCJdLFsxLCJvcGVuLXZpZXdib3giLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJjbGljayJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0s''@;'; put 'put ''WyJjbHJTbWFsbCIsIiIsMSwibWwtMyJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwzLCJjbGljayJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJjdXJzb3ItbW92''@;'; put 'put ''ZSIsInNpemUiLCIxMyJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwibWwtMyJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJ0aW1lcyIsInNpemUiLCIxOSJdLFsi''@;'; put 'put ''Y2RrRHJvcExpc3RHcm91cCIsIiIsMSwiY29uZmlndXJhdGlvbi13cmFwcGVyIl0sWzEsImNvbHMtc2VhcmNoIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIGNvbHVtbnMiLCJ0YWJpbmRleCIsIjAiLDMs''@;'; put 'put ''InZhbHVlQ2hhbmdlIiwiaW5wdXRJZCIsImVtaXRPbmx5U2VsZWN0ZWQiXSxbImNka0Ryb3BMaXN0IiwiIiwxLCJjb2xzLWxpc3QiLDMsImNka0Ryb3BMaXN0RHJvcHBlZCIsImNka0Ryb3BMaXN0RGF0YSJdLFsiY2RrRHJhZyIsIiIsMywiY2xhc3MiLCJjdXJzb3ItZGVmYXVsdC1pIiwicHJp''@;'; put 'put ''bWFyeUtleUhlYWRlclN0eWxlIiwiY2RrRHJhZ0RhdGEiLCJjZGtEcmFnRGlzYWJsZWQiXSxbImNka0RyYWciLCIiLDMsImNka0RyYWdEYXRhIiwiY2RrRHJhZ0Rpc2FibGVkIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsImtleSJdLFsiYXJpYS1sYWJlbCIsIlJlbW92ZSBjb2x1''@;'; put 'put ''bW4iLCJzaGFwZSIsInRyYXNoIiwxLCJjdXJzb3ItcG9pbnRlciJdLFsiYXJpYS1sYWJlbCIsIlJlbW92ZSBjb2x1bW4iLCJzaGFwZSIsInRyYXNoIiwxLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImNka0RyYWdCb3VuZGFyeSIsIi52aWV3Ym94ZXMtY29udGFpbmVyIiwiY2RrRHJh''@;'; put 'put ''ZyIsIiIsInRhYmluZGV4IiwiMCIsMSwidmlld2JveCIsMywibW91c2Vkb3duIiwiY2RrRHJhZ0VuZGVkIiwiY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb24iLCJpZCJdLFsiY2RrRHJhZ0hhbmRsZSIsIiIsMSwiZHJhZy1oYW5kbGUiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdl''@;'; put 'put ''ZW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInRhYmxlLXRpdGxlIl0sWzEsImFjdGlvbnMiXSxbImFyaWEtbGFiZWwiLCJDb2xsYXBzZSIsInNoYXBlIiwiYW5nbGUgdG9wIl0sWyJhcmlhLWxhYmVsIiwiRXhwYW5kIiwic2hhcGUiLCJhbmdsZSBkb3duIl0sWyJhcmlhLWxhYmVs''@;'; put 'put ''IiwiTWluaW1pemUiLCJzaGFwZSIsIm1pbnVzIiwzLCJjbGljayJdLFsiYXJpYS1sYWJlbCIsIkNsb3NlIiwic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMSwiZHJhZ0hhbmRsZSIsImNvcm5lciIsMywicG9pbnRlcmRvd24iLCJpZCJdLFsxLCJkcmFnSGFuZGxlIiwiY29ybmVyLWxlZnQi''@;'; put 'put ''LDMsInBvaW50ZXJkb3duIiwiaWQiXSxbMSwiZHJhZ0hhbmRsZSIsInJpZ2h0IiwzLCJwb2ludGVyZG93biIsImlkIl0sWzEsImRyYWdIYW5kbGUiLCJib3R0b20iLDMsInBvaW50ZXJkb3duIiwiaWQiXSxbMSwiZHJhZ0hhbmRsZSIsImxlZnQiLDMsInBvaW50ZXJkb3duIiwiaWQiXSxbImNs''@;'; put 'put ''ckZvcm0iLCIiLDEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1mbGV4LXdyYXAiLCJ0YWJsZS1zZWFyY2gtd3JhcHBlciJdLFsxLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItZmxleC13cmFwIl0sWzEs''@;'; put 'put ''ImlucHV0LXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2giLCJuYW1lIiwic2VhcmNoLWlucHV0IiwzLCJrZXl1cC5lbnRlciIsInR5cGUiXSxbImFyaWEtbGFiZWwiLCJTZWFyY2giLCJzaGFwZSIsInNlYXJjaCJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1p''@;'; put 'put ''bmxpbmUiXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwibmFtZSIsIm51bWVyaWNfY2hlY2siLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIl0sWyJhcmlhLWxhYmVsIiwiUmVsb2FkIGRhdGEiLCJzaGFwZSIsInJlZnJl''@;'; put 'put ''c2giLDEsImNsaWNrLWljb24iXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsInRvb2x0aXAiLCJ0b29sdGlwLWxnIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsIm1sLTUiLDMsImNsaWNrIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsImZpbHRlciIs''@;'; put 'put ''MSwiY2xpY2staWNvbiJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiLCJ0b29sdGlwLWxvbmciXSxbImFyaWEtbGFiZWwiLCJFZGl0IHRhYmxlIiwic2hhcGUiLCJwZW5jaWwiLDEsImNsaWNrLWljb24iLCJtbC01IiwzLCJjbGljayJdLFsiY2xhc3MiLCJjb250ZW50IiwzLCJkaXNwbGF5Iiw0LCJu''@;'; put 'put ''Z1ZhciJdLFsiYXJpYS1sYWJlbCIsIkNvbGxhcHNlIiwic2hhcGUiLCJhbmdsZSB0b3AiLDMsImNsaWNrIl0sWyJhcmlhLWxhYmVsIiwiRXhwYW5kIiwic2hhcGUiLCJhbmdsZSBkb3duIiwzLCJjbGljayJdLFsiYXJpYS1sYWJlbCIsIlNlYXJjaCIsInNoYXBlIiwic2VhcmNoIiwzLCJjbGlj''@;'; put 'put ''ayJdLFsiYXJpYS1sYWJlbCIsIlJlbG9hZCBkYXRhIiwic2hhcGUiLCJyZWZyZXNoIiwxLCJjbGljay1pY29uIiwzLCJjbGljayJdLFsxLCJjb250ZW50Il0sWzEsImhvdC1zcGlubmVyIiwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWzMsInNldHRpbmdzIiwiaWQiXV0sdGVtcGxh''@;'; put 'put ''dGU6ZnVuY3Rpb24oaSxvKXsxJmkmJihKKDAsImNsci1tb2RhbCIsOSksd3QoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24obCl7cmV0dXJuIG8uY2xyTW9kYWxPcGVuQ2hhbmdlKGwpfSksSigxLCJoMyIsMTApLFNlKDIsIiBWaWV3Ym94ZXMgIiksdnQoMyxvaW4sMiwyLCJzcGFuIiwx''@;'; put 'put ''MSksdGUoKSxKKDQsImRpdiIsMTIpKDUsImRpdiIsMTMpKDYsInAiLDE0KSxTZSg3LCJBZGQgbmV3IiksdGUoKSxJdCg4LCJociIsMTUpLHZ0KDksYWluLDIsMCwiZGl2IiwxNiksdnQoMTAsc2luLDIsMCwicCIsMTcpLHZ0KDExLGxpbiwxLDEsImRjLXRyZWUiLDE4KSx0ZSgpLEooMTIsImRp''@;'; put 'put ''diIsMTkpKDEzLCJkaXYiLDIwKSgxNCwicCIsMTQpLFNlKDE1LCJDdXJyZW50bHkgb3BlbiIpLHRlKCksSigxNiwiZGl2IikoMTcsImEiLDIxKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG8uc25hcFRvR3JpZCgpfSksSXQoMTgsImNsci1pY29uIiwyMiksSigxOSwic3BhbiIsMjMp''@;'; put 'put ''LFNlKDIwLCJTbmFwIHZpZXdib3hlcyB0byBncmlkIiksdGUoKSgpLEooMjEsImEiLDIxKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG8ubWluaW1pemVBbGwoKX0pLEl0KDIyLCJjbHItaWNvbiIsMjQpLEooMjMsInNwYW4iLDIzKSxTZSgyNCwiTWluaW1pemUgYWxsIHZpZXdib3hl''@;'; put 'put ''cyIpLHRlKCkoKSxKKDI1LCJhIiwyMSksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBvLnJlc3RvcmVBbGwoKX0pLEl0KDI2LCJjbHItaWNvbiIsMjUpLEooMjcsInNwYW4iLDIzKSxTZSgyOCwiUmVzdG9yZSBhbGwgdmlld2JveGVzIiksdGUoKSgpKCkoKSxJdCgyOSwiaHIiKSx2dCgz''@;'; put 'put ''MCxjaW4sMiwwLCJwIiwyNiksX28oMzEsZmluLDE1LDEwLCJkaXYiLDI3LENvKSxKKDMzLCJkaXYiLDI4KSgzNCwicCIsMjkpLFNlKDM1KSx0ZSgpKCksSXQoMzYsImhyIiksWW4oMzcsYmluLDMsMiwiZGl2IiwzMCksdGUoKSgpLEooMzgsImRpdiIsMzEpKDM5LCJidXR0b24iLDMyKSx3dCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG8udmlld2JveE1vZGFsPSExfSksU2UoNDAsIiBPayAiKSx0ZSgpKCkoKSxKKDQxLCJkaXYiLDMzKSxfbyg0MixSaW4sNDEsNDEsImRpdiIsMzQsQ28pLHRlKCksSig0NCwiY2xyLW1vZGFsIiwzNSksaGkoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVu''@;'; put 'put ''Y3Rpb24obCl7cmV0dXJuIGZpKG8uZmlsdGVyLGwpfHwoby5maWx0ZXI9bCksbH0pLEooNDUsImgzIiwzNiksU2UoNDYsIiBGaWx0ZXIgZm9yIHZpZXdib3ggdGFibGU6ICIpLEooNDcsInNwYW4iKSxTZSg0OCksdGUoKSgpLEooNDksImRpdiIsMzcpLHZ0KDUwLElpbiwyLDEsImFwcC1xdWVy''@;'; put 'put ''eSIsMzgpLHRlKCksSig1MSwiZGl2IiwzMSkoNTIsImJ1dHRvbiIsMzkpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gby5yZXNldEZpbHRlcigpfSksU2UoNTMsIiByZXNldCBmaWx0ZXIgIiksdGUoKSxKKDU0LCJidXR0b24iLDMyKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IG8uZmlsdGVyPSExfSksU2UoNTUsIiBDYW5jZWwgIiksdGUoKSxKKDU2LCJidXR0b24iLDQwKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG8uc2VuZENsYXVzZSgpfSksU2UoNTcsIiBPayAiKSx0ZSgpKCkoKSksMiZpJiYocnQoImNsck1vZGFsT3BlbiIsby52aWV3Ym94TW9kYWwp''@;'; put 'put ''KCJjbHJNb2RhbENsb3NhYmxlIiwhMCkoImNsck1vZGFsU2l6ZSIsImxnIiksaWUoMyksX3Qoby5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCE9PW8uSW5maW5pdHk/MzotMSksaWUoNiksX3Qoby5saWJyYXJpZXNMb2FkaW5nPzk6LTEpLGllKCksX3Qoby52aWV3Ym94TGltaXRS''@;'; put 'put ''ZWFjaGVkPzEwOi0xKSxpZSgpLF90KG8udmlld2JveE1vZGFsPzExOi0xKSxpZSgxOSksX3Qoby52aWV3Ym94ZXMubGVuZ3RoPDE/MzA6LTEpLGllKCkseW8oby52aWV3Ym94ZXMpLGllKDQpLFNyKCIgQ29uZmlndXJhdGlvbiAoIixudWxsIT1vLnNlbGVjdGVkVmlld2JveFRhYmxlJiZvLnNl''@;'; put 'put ''bGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hMaWJEYXRhc2V0PyIjIisobnVsbD09by5zZWxlY3RlZFZpZXdib3hUYWJsZT9udWxsOm8uc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKSsiICIrKG51bGw9PW8uc2VsZWN0ZWRWaWV3Ym94VGFibGU/bnVsbDpvLnNlbGVjdGVkVmlld2Jv''@;'; put 'put ''eFRhYmxlLnZpZXdib3hMaWJEYXRhc2V0KToic2VsZWN0IHZpZXdib3ggZnJvbSBhYm92ZSIsIikgIiksaWUoMikscnQoIm5nVmFyIix0SSgxNyxuaW4sbnVsbD09by5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09by5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOm8uc2Vs''@;'; put 'put ''ZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbixudWxsPT1vLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1vLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6by5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJs''@;'; put 'put ''ZSxudWxsPT1vLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1vLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6by5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5oZWFkZXJQa3MpKSxpZSg1KSx5byhvLnZpZXdib3hlcyksaWUoMiksZGkoImNsck1vZGFsT3BlbiIs''@;'; put 'put ''by5maWx0ZXIpLHJ0KCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksaWUoNCksTmgoIiAjIixudWxsPT1vLmZpbHRlcmluZ1ZpZXdib3g/bnVsbDpvLmZpbHRlcmluZ1ZpZXdib3guaWQsIiAiLG8uZmlsdGVyTGliZHMsIiAiKSxpZSgyKSxfdChvLmZpbHRlcj81''@;'; put 'put ''MDotMSksaWUoNikscnQoImNsckxvYWRpbmciLG8uZmlsdGVyTG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W2N1LHhkLG1oLCQwLGltLGVsLG5NZSxVMixFdixGZixQZix6MixMYixYZyxRZyxIMixvYyxJYixYbCxkNCx6bWUsTDcsQ0VlLHdFZSxGb2UsYkVlLGtaZSxxcm4sbUEscURdLGVuY2Fw''@;'; put 'put ''c3VsYXRpb246Mn0pKX1yZXR1cm4gbigpLGV9KSgpLERaZT0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKHIpe3RoaXMuZmlsZU92ZXI9bmV3IEtyLHRoaXMuZmlsZURyb3A9bmV3IEtyLHRoaXMuZWxlbWVudD1yfW9uRHJvcChyKXt0aGlzLl9wcmV2ZW50QW5kU3RvcChyKTtjb25z''@;'; put 'put ''dCBpPXIuZGF0YVRyYW5zZmVyPy5maWxlcyxvPVtdO2lmKGkpZm9yKGxldCBhPTA7YTxpLmxlbmd0aDthKyspby5wdXNoKGlbYV0pO3RoaXMudXBsb2FkZXI/LmFkZFRvUXVldWUobyksdGhpcy5maWxlT3Zlci5lbWl0KCExKSx0aGlzLmZpbGVEcm9wLmVtaXQobyl9b25EcmFnT3ZlcihyKXt0''@;'; put 'put ''aGlzLl9wcmV2ZW50QW5kU3RvcChyKTtjb25zdCBpPXIuZGF0YVRyYW5zZmVyO2lmKGkpe2lmKC0xPT09aS50eXBlcy5pbmRleE9mKCJGaWxlcyIpKXJldHVybjtpLmRyb3BFZmZlY3Q9ImNvcHkifXRoaXMuZmlsZU92ZXIuZW1pdCghMCl9b25EcmFnTGVhdmUocil7dGhpcy5fcHJldmVudEFu''@;'; put 'put ''ZFN0b3AociksdGhpcy5maWxlT3Zlci5lbWl0KCExKX1fcHJldmVudEFuZFN0b3Aocil7ci5wcmV2ZW50RGVmYXVsdCgpLHIuc3RvcFByb3BhZ2F0aW9uKCl9c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSkoemUobm8pKX0sdGhpcy5c''@;'; put 'put ''dTAyNzVkaXI9JHIoe3R5cGU6ZSxzZWxlY3RvcnM6W1siIiwiYXBwRmlsZURyb3AiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGksbyl7MSZpJiZ3dCgiZHJvcCIsZnVuY3Rpb24obCl7cmV0dXJuIG8ub25Ecm9wKGwpfSkoImRyYWdvdmVyIixmdW5jdGlvbihsKXtyZXR1cm4gby5vbkRy''@;'; put 'put ''YWdPdmVyKGwpfSkoImRyYWdsZWF2ZSIsZnVuY3Rpb24obCl7cmV0dXJuIG8ub25EcmFnTGVhdmUobCl9KX0saW5wdXRzOnt1cGxvYWRlcjoidXBsb2FkZXIifSxvdXRwdXRzOntmaWxlT3ZlcjoiZmlsZU92ZXIiLGZpbGVEcm9wOiJmaWxlRHJvcCJ9LHN0YW5kYWxvbmU6ITF9KSl9cmV0dXJu''@;'; put 'put ''IG4oKSxlfSkoKSxMWmU9KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3RvcihyKXt0aGlzLmZpbGVTZWxlY3RlZD1uZXcgS3IsdGhpcy5lbGVtZW50PXJ9aXNFbXB0eUFmdGVyU2VsZWN0aW9uKCl7cmV0dXJuISF0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5hdHRyaWJ1dGVzLm11bHRp''@;'; put 'put ''cGxlfW9uQ2hhbmdlKCl7Y29uc3Qgcj10aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5maWxlczt0aGlzLnVwbG9hZGVyPy5hZGRUb1F1ZXVlKHIpLHRoaXMuZmlsZVNlbGVjdGVkLmVtaXQociksdGhpcy5pc0VtcHR5QWZ0ZXJTZWxlY3Rpb24oKSYmKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVt''@;'; put 'put ''ZW50LnZhbHVlPSIiKX1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKSh6ZShubykpfSx0aGlzLlx1MDI3NWRpcj0kcih7dHlwZTplLHNlbGVjdG9yczpbWyIiLCJhcHBGaWxlU2VsZWN0IiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlv''@;'; put 'put ''bihpLG8pezEmaSYmd3QoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gby5vbkNoYW5nZSgpfSl9LGlucHV0czp7dXBsb2FkZXI6InVwbG9hZGVyIn0sb3V0cHV0czp7ZmlsZVNlbGVjdGVkOiJmaWxlU2VsZWN0ZWQifSxzdGFuZGFsb25lOiExfSkpfXJldHVybiBuKCksZX0pKCk7ZnVuY3Rp''@;'; put 'put ''b24gRGluKG4sZSl7MSZuJiYoSigwLCJwIiwzKSxTZSgxLCJObyBkYXRhc2V0IG1ldGEgdG8gc2hvdy4iKSx0ZSgpKX1mdW5jdGlvbiBMaW4obixlKXtpZigxJm4mJihKKDAsImNsci1kZy1jb2x1bW4iKSxTZSgxKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7aWUoKSxwcih0LmNv''@;'; put 'put ''bE5hbWV8fHQuY29sS2V5KX19ZnVuY3Rpb24gT2luKG4sZSl7aWYoMSZuJiYoSigwLCJjbHItZGctY2VsbCIpLFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdCxyPVRlKCkuJGltcGxpY2l0O2llKCkscHIoclt0LmNvbEtleV0pfX1mdW5jdGlvbiBOaW4obixlKXtpZigxJm4p''@;'; put 'put ''e2NvbnN0IHQ9d24oKTtKKDAsImNsci1kZy1yb3ciLDExKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaT1ZZSh0KS4kaW1wbGljaXQsbz1UZSgyKS4kaW1wbGljaXQ7cmV0dXJuIFhlKG8ub25Sb3dDbGljaz9vLm9uUm93Q2xpY2soaSk6IiIpfSksX28oMSxPaW4sMiwxLCJjbHItZGct''@;'; put 'put ''Y2VsbCIsbnVsbCxDbyksdGUoKX1pZigyJm4pe2NvbnN0IHQ9VGUoMikuJGltcGxpY2l0O2llKCkseW8odC5jb2xzVG9EaXNwbGF5KX19ZnVuY3Rpb24gRmluKG4sZSl7aWYoMSZuJiYoSigwLCJjbHItdGFiLWNvbnRlbnQiLDkpKDEsImNsci1kYXRhZ3JpZCIpLF9vKDIsTGluLDIsMSwiY2xy''@;'; put 'put ''LWRnLWNvbHVtbiIsbnVsbCxDbyksX28oNCxOaW4sMywwLCJjbHItZGctcm93IiwxMCxDbyksdGUoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoKS4kaW1wbGljaXQ7aWUoMikseW8odC5jb2xzVG9EaXNwbGF5KSxpZSgyKSx5byh0Lm1ldGEpfX1mdW5jdGlvbiBQaW4obixlKXtpZigxJm4mJihKKDAs''@;'; put 'put ''ImNsci10YWIiKSgxLCJidXR0b24iLDcpLFNlKDIpLHRlKCksWW4oMyxGaW4sNiwwLCJjbHItdGFiLWNvbnRlbnQiLDgpLHRlKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdCxyPWUuJGluZGV4O2llKDIpLHByKHQubmFtZSksaWUoKSxydCgiY2xySWZBY3RpdmUiLDA9PT1yKX19bGV0IE9a''@;'; put 'put ''ZT0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKCl7dGhpcy5vcGVuPSExLHRoaXMuZHNtZXRhPVtdLHRoaXMudmVyc2lvbnM9W10sdGhpcy5vcGVuQ2hhbmdlPW5ldyBLcix0aGlzLnJvd0NsaWNrZWQ9bmV3IEtyLHRoaXMuZHNtZXRhVGFicz1bXSx0aGlzLnZlcnNpb25zVGFicz1b''@;'; put 'put ''XSx0aGlzLnRhYnM9W119bmdPbkluaXQoKXt9bmdPbkNoYW5nZXMocil7ci5kc21ldGE/LmN1cnJlbnRWYWx1ZT8ubGVuZ3RoPjAmJih0aGlzLnBhcnNlRFNNZXRhKCksdGhpcy5wYXJzZVZlcnNpb25zKCksdGhpcy50YWJzPVsuLi50aGlzLmRzbWV0YVRhYnMsLi4udGhpcy52ZXJzaW9uc1Rh''@;'; put 'put ''YnNdKX1wYXJzZURTTWV0YSgpe3RoaXMuZHNtZXRhVGFicz1bXTtmb3IobGV0IHIgb2YgdGhpcy5kc21ldGEpe2xldCBpPXRoaXMuZHNtZXRhVGFicy5maW5kSW5kZXgobz0+by5uYW1lPT09ci5PRFNfVEFCTEUpO2k8MCYmKGk9dGhpcy5kc21ldGFUYWJzLnB1c2goe25hbWU6ci5PRFNfVEFC''@;'; put 'put ''TEUsdGl0bGU6IkRhdGFzZXQgTWV0YSIsY29sc1RvRGlzcGxheTpbe2NvbEtleToiTkFNRSJ9LHtjb2xLZXk6IlZBTFVFIn1dLG1ldGE6W10sb25Sb3dDbGljazpvPT57dGhpcy5yb3dDbGlja2VkLmVtaXQobyl9fSktMSksdGhpcy5kc21ldGFUYWJzW2ldLm1ldGEucHVzaChyKX19cGFyc2VW''@;'; put 'put ''ZXJzaW9ucygpe3RoaXMudmVyc2lvbnNUYWJzPVt7bmFtZToiVkVSU0lPTlMiLHRpdGxlOiJEYXRhc2V0IE1ldGEiLGNvbHNUb0Rpc3BsYXk6W3tjb2xLZXk6IkxPQURfUkVGIn0se2NvbEtleToiVVNFUl9OTSJ9LHtjb2xLZXk6IlZFUlNJT05fRFRUTSJ9LHtjb2xLZXk6Ik5FV19SRUNPUkRT''@;'; put 'put ''Iixjb2xOYW1lOiJBREQifSx7Y29sS2V5OiJDSEFOR0VEX1JFQ09SRFMiLGNvbE5hbWU6Ik1PRCJ9LHtjb2xLZXk6IkRFTEVURURfUkVDT1JEUyIsY29sTmFtZToiREVMIn0se2NvbEtleToiVkVSU0lPTl9ERVNDIn1dLG1ldGE6dGhpcy52ZXJzaW9ucyxvblJvd0NsaWNrOnI9Pnt0aGlzLnJv''@;'; put 'put ''d0NsaWNrZWQuZW1pdChyKX19XX1vbk9wZW5DaGFuZ2Uocil7dGhpcy5vcGVuPXIsdGhpcy5vcGVuQ2hhbmdlLmVtaXQocil9b25DbG9zZUNsaWNrKCl7dGhpcy5vbk9wZW5DaGFuZ2UoITEpfXN0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8''@;'; put 'put ''fGUpfSx0aGlzLlx1MDI3NWNtcD1Qcih7dHlwZTplLHNlbGVjdG9yczpbWyJhcHAtZGF0YXNldC1pbmZvIl1dLGlucHV0czp7b3Blbjoib3BlbiIsZHNtZXRhOiJkc21ldGEiLHZlcnNpb25zOiJ2ZXJzaW9ucyJ9LG91dHB1dHM6e29wZW5DaGFuZ2U6Im9wZW5DaGFuZ2UiLHJvd0NsaWNrZWQ6''@;'; put 'put ''InJvd0NsaWNrZWQifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltpdV0sZGVjbHM6MTEsdmFyczo0LGNvbnN0czpbWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIi''@;'; put 'put ''LCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHkiXSxbMSwidGV4dC1jZW50ZXIiXSxbImNsckxheW91dCIsInZlcnRpY2FsIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWluZm8tb3V0bGlu''@;'; put 'put ''ZSIsMywiY2xpY2siXSxbImNsclRhYkxpbmsiLCIiLCJpZCIsImxpbmsxIl0sWyJpZCIsImNvbnRlbnQxIiwiY2xhc3MiLCJkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgdy0xMDAiLDQsImNscklmQWN0aXZlIl0sWyJpZCIsImNvbnRlbnQxIiwxLCJkLWZsZXgiLCJjbHItanVz''@;'; put 'put ''dGlmeS1jb250ZW50LWNlbnRlciIsInctMTAwIl0sWzEsImNsaWNrYWJsZS1yb3ciXSxbMSwiY2xpY2thYmxlLXJvdyIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oaSxvKXsxJmkmJihKKDAsImNsci1tb2RhbCIsMCksd3QoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24obCl7''@;'; put 'put ''cmV0dXJuIG8ub25PcGVuQ2hhbmdlKGwpfSksSigxLCJoMyIsMSksU2UoMiwiRGF0YXNldCBNZXRhIiksdGUoKSxKKDMsImRpdiIsMiksdnQoNCxEaW4sMiwwLCJwIiwzKSxKKDUsImNsci10YWJzIiw0KSxfbyg2LFBpbiw0LDIsImNsci10YWIiLG51bGwsQ28pLHRlKCkoKSxKKDgsImRpdiIs''@;'; put 'put ''NSkoOSwiYnV0dG9uIiw2KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG8ub25DbG9zZUNsaWNrKCl9KSxTZSgxMCwiIENsb3NlICIpLHRlKCkoKSgpKSwyJmkmJihydCgiY2xyTW9kYWxPcGVuIixvLm9wZW4pKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwh''@;'; put 'put ''MCksaWUoNCksX3Qoby5kc21ldGFUYWJzLmxlbmd0aDwxPzQ6LTEpLGllKDIpLHlvKG8udGFicykpfSxkZXBlbmRlbmNpZXM6W052LHY0LHR3LEx2LEc1LG53LFJNLE92LFFiLER2LEpiLHhkLG1oLGhNLHh2LGt2LCRiLEF2LFR2LFpiXSxlbmNhcHN1bGF0aW9uOjJ9KSl9cmV0dXJuIG4oKSxl''@;'; put 'put ''fSkoKSxIaW49KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3Rvcigpe3RoaXMub3Blbj0hMSx0aGlzLnRpdGxlPSJDb25maXJtIix0aGlzLm1lc3NhZ2U9IiIsdGhpcy5jb25maXJtVGV4dD0iWWVzIix0aGlzLmNhbmNlbFRleHQ9Ik5vIix0aGlzLnJlc3VsdD1uZXcgS3J9b25Db25maXJt''@;'; put 'put ''KCl7dGhpcy5yZXN1bHQuZW1pdCghMCl9b25DYW5jZWwoKXt0aGlzLnJlc3VsdC5lbWl0KCExKX1vbkNsck1vZGFsT3BlbkNoYW5nZShyKXshciYmdGhpcy5vcGVuJiZ0aGlzLnJlc3VsdC5lbWl0KCExKX1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJu''@;'; put 'put ''IG5ldyhpfHxlKX0sdGhpcy5cdTAyNzVjbXA9UHIoe3R5cGU6ZSxzZWxlY3RvcnM6W1siYXBwLWNvbmZpcm0tbW9kYWwiXV0saW5wdXRzOntvcGVuOiJvcGVuIix0aXRsZToidGl0bGUiLG1lc3NhZ2U6Im1lc3NhZ2UiLGNvbmZpcm1UZXh0OiJjb25maXJtVGV4dCIsY2FuY2VsVGV4dDoiY2Fu''@;'; put 'put ''Y2VsVGV4dCJ9LG91dHB1dHM6e3Jlc3VsdDoicmVzdWx0In0sc3RhbmRhbG9uZTohMSxkZWNsczoxMSx2YXJzOjYsY29uc3RzOltbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxb''@;'; put 'put ''MSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihpLG8pezEmaSYmKEooMCwiY2xyLW1vZGFsIiww''@;'; put 'put ''KSx3dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihsKXtyZXR1cm4gby5vbkNsck1vZGFsT3BlbkNoYW5nZShsKX0pLEooMSwiaDMiLDEpLFNlKDIpLHRlKCksSigzLCJkaXYiLDIpKDQsImRpdiIpLFNlKDUpLHRlKCkoKSxKKDYsImRpdiIsMykoNywiYnV0dG9uIiw0KSx3dCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7cmV0dXJuIG8ub25DYW5jZWwoKX0pLFNlKDgpLHRlKCksSig5LCJidXR0b24iLDUpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gby5vbkNvbmZpcm0oKX0pLFNlKDEwKSx0ZSgpKCkoKSksMiZpJiYocnQoImNsck1vZGFsT3BlbiIsby5vcGVuKSgiY2xyTW9k''@;'; put 'put ''YWxTaXplIiwibWQiKSxpZSgyKSxwcihvLnRpdGxlKSxpZSgzKSxwcihvLm1lc3NhZ2UpLGllKDMpLFNyKCIgIixvLmNhbmNlbFRleHQsIiAiKSxpZSgyKSxTcigiICIsby5jb25maXJtVGV4dCwiICIpKX0sZGVwZW5kZW5jaWVzOlt4ZCxtaF0sZW5jYXBzdWxhdGlvbjoyfSkpfXJldHVybiBu''@;'; put 'put ''KCksZX0pKCksVmluPSgoKT0+e3ZhciBuO2NsYXNzIGV7Y29uc3RydWN0b3IoKXt0aGlzLm9wZW49ITEsdGhpcy5kb25lPTAsdGhpcy50b3RhbD0wLHRoaXMuY2FuY2VsPW5ldyBLcn1vbkNhbmNlbCgpe3RoaXMuY2FuY2VsLmVtaXQoKX1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKX0sdGhpcy5cdTAyNzVjbXA9UHIoe3R5cGU6ZSxzZWxlY3RvcnM6W1siYXBwLWJ1bGstdmFsaWRhdGlvbi1tb2RhbCJdXSxpbnB1dHM6e29wZW46Im9wZW4iLGRvbmU6ImRvbmUiLHRvdGFsOiJ0b3RhbCJ9LG91dHB1dHM6e2NhbmNlbDoiY2Fu''@;'; put 'put ''Y2VsIn0sc3RhbmRhbG9uZTohMSxkZWNsczoxMix2YXJzOjgsY29uc3RzOltbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCJjbHJNb2RhbFNpemUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSIsImJ1bGstdmFs''@;'; put 'put ''aWRhdGlvbi1ib2R5Il0sWzEsImJ1bGstdmFsaWRhdGlvbi1yb3ciXSxbImNsclNtYWxsIiwiIl0sWzEsImJ1bGstdmFsaWRhdGlvbi10ZXh0Il0sWzEsImJ1bGstdmFsaWRhdGlvbi1wcm9ncmVzcyIsMywiY2xyVmFsdWUiLCJjbHJNYXgiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwi''@;'; put 'put ''YnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oaSxvKXsxJmkmJihKKDAsImNsci1tb2RhbCIsMCkoMSwiaDMiLDEpLFNlKDIsIlZhbGlkYXRpbmcgY2VsbHMiKSx0ZSgpLEooMywiZGl2IiwyKSg0LCJkaXYiLDMpLEl0KDUsImNsci1z''@;'; put 'put ''cGlubmVyIiw0KSxKKDYsInNwYW4iLDUpLFNlKDcpLHRlKCkoKSxJdCg4LCJjbHItcHJvZ3Jlc3MtYmFyIiw2KSx0ZSgpLEooOSwiZGl2Iiw3KSgxMCwiYnV0dG9uIiw4KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG8ub25DYW5jZWwoKX0pLFNlKDExLCIgQ2FuY2VsICIpLHRlKCko''@;'; put 'put ''KSgpKSwyJmkmJihydCgiY2xyTW9kYWxPcGVuIixvLm9wZW4pKCJjbHJNb2RhbENsb3NhYmxlIiwhMSkoImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCEwKSgiY2xyTW9kYWxTaXplIiwic20iKSxpZSg3KSxOaCgiIFZhbGlkYXRpbmcgIixvLmRvbmUsIiAvICIsby50b3RhbCwiXHUyMDI2ICIp''@;'; put 'put ''LGllKCkscnQoImNsclZhbHVlIixvLmRvbmUpKCJjbHJNYXgiLG8udG90YWwpKX0sZGVwZW5kZW5jaWVzOlt4ZCxtaCx6MixuVGVdLHN0eWxlczpbIi5idWxrLXZhbGlkYXRpb24tYm9keVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6''@;'; put 'put ''MTBweH0uYnVsay12YWxpZGF0aW9uLWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgLmJ1bGstdmFsaWRhdGlvbi1yb3dbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHh9LmJ1bGstdmFsaWRhdGlvbi1ib2R5W19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXSAgIC5idWxrLXZhbGlkYXRpb24tdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDEgYXV0b30uYnVsay12YWxpZGF0aW9uLWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgLmJ1bGstdmFsaWRhdGlvbi1wcm9ncmVzc1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjB9Il19KSl9''@;'; put 'put ''cmV0dXJuIG4oKSxlfSkoKTtjb25zdCBCaW49KCk9PlsibnVtZXJpYyIsdm9pZCAwXSxOWmU9KCk9PlsiYXV0b2NvbXBsZXRlIiwiYXV0b2NvbXBsZXRlLmN1c3RvbSJdLFdtZT0obixlKT0+KHtjb2w6bixjb2xJbmRleDplfSksamluPSgpPT5bdm9pZCAwXSxVaW49KCk9PlsiU09GVFNFTEVD''@;'; put 'put ''VCIsIlNPRlRTRUxFQ1RfSE9PSyJdO2Z1bmN0aW9uIHppbihuLGUpe2lmKDEmbiYmKEooMCwic3BhbiIsMTUpLFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgyKTtpZSgpLHByKHQuZ2VuZXJhdGVkUmVjb3JkVXJsKX19ZnVuY3Rpb24gV2luKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7''@;'; put 'put ''SigwLCJidXR0b24iLDE2KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKDIpLmdlbmVyYXRlRWRpdFJlY29yZFVybCgpKX0pLFNlKDEpLHRlKCl9aWYoMiZuKXtjb25zdCB0PVRlKDIpO3J0KCJkaXNhYmxlZCIsdC5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5n''@;'; put 'put ''KSxpZSgpLFNyKCIgIix0LmdlbmVyYXRlZFJlY29yZFVybD8iY29weSB0byBjbGlwYm9hcmQiOnQuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz8iR2VuZXJhdGluZyB1cmwuLi4iOiJMaW5rIHRvIHRoaXMgcmVjb3JkIiwiICIpfX1mdW5jdGlvbiBZaW4obixlKXtpZigxJm4mJihtbCgw''@;'; put 'put ''KSxZbigxLHppbiwyLDEsInNwYW4iLDEzKSgyLFdpbiwyLDIsImJ1dHRvbiIsMTQpLHJsKCkpLDImbil7Y29uc3QgdD1UZSgpO2llKCkscnQoIm5nSWYiLCEobnVsbCE9dC5jdXJyZW50UmVjb3JkJiZ0LmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uKSksaWUoKSxydCgibmdJZiIsIShudWxs''@;'; put 'put ''IT10LmN1cnJlbnRSZWNvcmQmJnQuY3VycmVudFJlY29yZC5ub0xpbmtPcHRpb24pKX19ZnVuY3Rpb24gWmluKG4sZSl7MSZuJiYoSigwLCJkaXYiLDE3KSgxLCJzcGFuIiwxOCksU2UoMiwiIExvYWRpbmcuLi4gIiksdGUoKSgpKX1mdW5jdGlvbiBHaW4obixlKXsxJm4mJkl0KDAsImNsci1p''@;'; put 'put ''Y29uIiwzMil9ZnVuY3Rpb24gJGluKG4sZSl7MSZuJiYoSigwLCJzcGFuIiwzMyksU2UoMSwiIExvYWRpbmcuLi4gIiksdGUoKSl9ZnVuY3Rpb24gcWluKG4sZSl7MSZuJiZJdCgwLCJjbHItaWNvbiIsMzQpfWZ1bmN0aW9uIEtpbihuLGUpezEmbiYmSXQoMCwiY2xyLWljb24iLDM1KX1mdW5j''@;'; put 'put ''dGlvbiBYaW4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImNsci1pbnB1dC1jb250YWluZXIiLDM3KSgxLCJpbnB1dCIsMzgpLHd0KCJmb2N1c2luIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKDMpLmluZGV4O3JldHVybiBYZShUZSgyKS5vblJlY29yZElucHV0Rm9jdXMo''@;'; put 'put ''aSxvKSl9KSgicGFzdGUiLGZ1bmN0aW9uKGkpe3JldHVybiBZZSh0KSxYZShUZSg1KS5yZWNvcmRJbnB1dFBhc3RlKGkpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgzKS4kaW1wbGljaXQsYT1UZSgyKTtyZXR1cm4gYS5yZWNvcmRJbnB1dENoYW5nZShpLG8ua2V5''@;'; put 'put ''KSxYZShhLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uPSEwKX0pLGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKDMpLiRpbXBsaWNpdCxhPVRlKDIpO3JldHVybiBmaShhLmN1cnJlbnRSZWNvcmRbby5rZXldLGkpfHwoYS5jdXJyZW50UmVjb3JkW28u''@;'; put 'put ''a2V5XT1pKSxYZShpKX0pLHRlKCkoKX1pZigyJm4pe2NvbnN0IHQ9VGUoMykuJGltcGxpY2l0LHI9VGUoMik7d3IoImludmFsaWQtZGF0YSIsci5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXModC5rZXkpKSxpZSgpLGRpKCJuZ01vZGVsIixyLmN1cnJlbnRSZWNvcmRbdC5rZXld''@;'; put 'put ''KX19ZnVuY3Rpb24gUWluKG4sZSl7MSZuJiZhdSgwKX1mdW5jdGlvbiBKaW4obixlKXtpZigxJm4mJihKKDAsImRpdiIpLFluKDEsUWluLDEsMCwibmctY29udGFpbmVyIiwzOSksdGUoKSksMiZuKXtjb25zdCB0PVRlKDMpLHI9dC4kaW1wbGljaXQsaT10LmluZGV4O1RlKDIpO2NvbnN0IG89''@;'; put 'put ''b28oMTYpO2llKCkscnQoIm5nVGVtcGxhdGVPdXRsZXQiLG8pKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsTjUoMixXbWUscixpKSl9fWZ1bmN0aW9uIGVvbihuLGUpe2lmKDEmbiYmKG1sKDApLFluKDEsWGluLDIsMywiY2xyLWlucHV0LWNvbnRhaW5lciIsMzYpKDIsSmluLDIsNSwiZGl2''@;'; put 'put ''Iiw1KSxybCgpKSwyJm4pe2xldCB0LHI7Y29uc3QgaT1UZSgyKS4kaW1wbGljaXQsbz1UZSgyKTtpZSgpLHJ0KCJuZ0lmIixtYygyLEJpbikuaW5jbHVkZXMobnVsbD09by5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0odD1vLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShp''@;'; put 'put ''LmtleSkpP251bGw6dC5lZGl0b3IpKSxpZSgpLHJ0KCJuZ0lmIixtYygzLE5aZSkuaW5jbHVkZXMobnVsbD09by5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0ocj1vLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShpLmtleSkpP251bGw6ci5lZGl0b3IpKX19ZnVuY3Rpb24g''@;'; put 'put ''dG9uKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItdGV4dGFyZWEtY29udGFpbmVyIikoMSwidGV4dGFyZWEiLDQwLDEpLHd0KCJmb2N1c2luIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKDMpLmluZGV4O3JldHVybiBYZShUZSgyKS5vblJlY29yZElucHV0Rm9jdXMo''@;'; put 'put ''aSxvKSl9KSgicGFzdGUiLGZ1bmN0aW9uKGkpe3JldHVybiBZZSh0KSxYZShUZSg1KS5yZWNvcmRJbnB1dFBhc3RlKGkpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgzKS4kaW1wbGljaXQ7cmV0dXJuIFhlKFRlKDIpLnJlY29yZElucHV0Q2hhbmdlKGksby5rZXkp''@;'; put 'put ''KX0pLGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKDMpLiRpbXBsaWNpdCxhPVRlKDIpO3JldHVybiBmaShhLmN1cnJlbnRSZWNvcmRbby5rZXldLGkpfHwoYS5jdXJyZW50UmVjb3JkW28ua2V5XT1pKSxYZShpKX0pLFNlKDMsIiAgICAgICAgICAgICAg''@;'; put 'put ''ICAgICIpLHRlKCksSig0LCJjbHItY29udHJvbC1oZWxwZXIiKSxTZSg1KSx0ZSgpKCl9aWYoMiZuKXtsZXQgdCxyLGk7Y29uc3Qgbz1vbygyKSxhPVRlKDMpLiRpbXBsaWNpdCxsPVRlKDIpO2llKCksd3IoImludmFsaWQtZGF0YSIsbC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVk''@;'; put 'put ''ZXMoYS5rZXkpKSgibm90LWNoYXIiLG51bGw9PWwuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KHQ9bC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoYS5rZXkpKT9udWxsOnQudHlwZSkscnQoInJvd3MiLGEudmFsdWUubGVuZ3RoPjgwPzY6MSksZGkoIm5nTW9kZWwiLGwu''@;'; put 'put ''Y3VycmVudFJlY29yZFthLmtleV0pLHJ0KCJtYXhMZW5ndGgiLG51bGw9PWwuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KHI9bC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoYS5rZXkpKT9udWxsOnIubGVuZ3RoKSxpZSg0KSxOaCgiIixvLnZhbHVlLmxlbmd0aCwiIC8g''@;'; put 'put ''IixudWxsPT1sLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShpPWwuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGEua2V5KSk/bnVsbDppLmxlbmd0aCl9fWZ1bmN0aW9uIG5vbihuLGUpezEmbiYmYXUoMCl9ZnVuY3Rpb24gcm9uKG4sZSl7aWYoMSZuJiYoSigwLCJkaXYi''@;'; put 'put ''KSxZbigxLG5vbiwxLDAsIm5nLWNvbnRhaW5lciIsMzkpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgzKSxyPXQuJGltcGxpY2l0LGk9dC5pbmRleDtUZSgyKTtjb25zdCBvPW9vKDE2KTtpZSgpLHJ0KCJuZ1RlbXBsYXRlT3V0bGV0IixvKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLE41KDIs''@;'; put 'put ''V21lLHIsaSkpfX1mdW5jdGlvbiBpb24obixlKXtpZigxJm4mJihtbCgwKSxZbigxLHRvbiw2LDksImNsci10ZXh0YXJlYS1jb250YWluZXIiLDUpKDIscm9uLDIsNSwiZGl2Iiw1KSxybCgpKSwyJm4pe2xldCB0LHI7Y29uc3QgaT1UZSgyKS4kaW1wbGljaXQsbz1UZSgyKTtpZSgpLHJ0KCJu''@;'; put 'put ''Z0lmIixtYygyLGppbikuaW5jbHVkZXMobnVsbD09by5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0odD1vLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShpLmtleSkpP251bGw6dC5lZGl0b3IpKSxpZSgpLHJ0KCJuZ0lmIixtYygzLE5aZSkuaW5jbHVkZXMobnVsbD09by5j''@;'; put 'put ''dXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0ocj1vLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShpLmtleSkpP251bGw6ci5lZGl0b3IpKX19ZnVuY3Rpb24gb29uKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJkaXYiLDQxKSgxLCJpbnB1dCIsNDIpLHd0KCJjaGFu''@;'; put 'put ''Z2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoMikuJGltcGxpY2l0O3JldHVybiBYZShUZSgyKS5yZWNvcmRUaW1lQ2hhbmdlKGksby5rZXkpKX0pLHRlKCkoKX1pZigyJm4pe2NvbnN0IHQ9VGUoMikuJGltcGxpY2l0LHI9VGUoMik7aWUoKSx3cigiaW52YWxpZC1kYXRhIixyLmN1''@;'; put 'put ''cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRlcyh0LmtleSkpLHJ0KCJ2YWx1ZSIsci5jdXJyZW50UmVjb3JkW3Qua2V5XSksUnIoImFyaWEtbGFiZWwiLHQua2V5KX19ZnVuY3Rpb24gYW9uKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJkaXYiLDQxKSgxLCJpbnB1dCIsNDMp''@;'; put 'put ''LHd0KCJjaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoMikuJGltcGxpY2l0O3JldHVybiBYZShUZSgyKS5yZWNvcmREYXRldGltZUNoYW5nZShpLG8ua2V5KSl9KSx0ZSgpKCl9aWYoMiZuKXtjb25zdCB0PVRlKDIpLiRpbXBsaWNpdCxyPVRlKDIpO2llKCksd3IoImludmFs''@;'; put 'put ''aWQtZGF0YSIsci5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXModC5rZXkpKSxydCgidmFsdWUiLHIudG9OYXRpdmVEYXRldGltZShyLmN1cnJlbnRSZWNvcmRbdC5rZXldKSksUnIoImFyaWEtbGFiZWwiLHQua2V5KX19ZnVuY3Rpb24gc29uKG4sZSl7aWYoMSZuKXtjb25zdCB0''@;'; put 'put ''PXduKCk7SigwLCJkaXYiLDQxKSgxLCJpbnB1dCIsNDQpLHd0KCJjaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoMikuJGltcGxpY2l0O3JldHVybiBYZShUZSgyKS5yZWNvcmREYXRlQ2hhbmdlKGksby5rZXkpKX0pLHRlKCkoKX1pZigyJm4pe2NvbnN0IHQ9VGUoMikuJGlt''@;'; put 'put ''cGxpY2l0LHI9VGUoMik7aWUoKSx3cigiaW52YWxpZC1kYXRhIixyLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRlcyh0LmtleSkpLHJ0KCJ2YWx1ZSIsci5jdXJyZW50UmVjb3JkW3Qua2V5XSksUnIoImFyaWEtbGFiZWwiLHQua2V5KX19ZnVuY3Rpb24gbG9uKG4sZSl7MSZuJiZh''@;'; put 'put ''dSgwKX1mdW5jdGlvbiBjb24obixlKXtpZigxJm4mJihKKDAsImRpdiIpLFluKDEsbG9uLDEsMCwibmctY29udGFpbmVyIiwzOSksdGUoKSksMiZuKXtjb25zdCB0PVRlKDIpLHI9dC4kaW1wbGljaXQsaT10LmluZGV4O1RlKDIpO2NvbnN0IG89b28oMTYpO2llKCkscnQoIm5nVGVtcGxhdGVP''@;'; put 'put ''dXRsZXQiLG8pKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsTjUoMixXbWUscixpKSl9fWZ1bmN0aW9uIHVvbihuLGUpe2lmKDEmbiYmKG1sKDApLEooMSwiZGl2IiwyMCkoMiwiZGl2IiwyMSkoMywicCIsMjIpLFNlKDQpLFluKDUsR2luLDEsMCwiY2xyLWljb24iLDIzKSx0ZSgpLEooNiwi''@;'; put 'put ''cCIsMjQpLFNlKDcpLHRlKCkoKSxKKDgsImRpdiIsMjUpLFluKDksJGluLDIsMCwic3BhbiIsMjYpKDEwLHFpbiwxLDAsImNsci1pY29uIiwyNykoMTEsS2luLDEsMCwiY2xyLWljb24iLDI4KSgxMixlb24sMyw0LCJuZy1jb250YWluZXIiLDI5KSgxMyxpb24sMyw0LCJuZy1jb250YWluZXIi''@;'; put 'put ''LDI5KSgxNCxvb24sMiw0LCJkaXYiLDMwKSgxNSxhb24sMiw0LCJkaXYiLDMwKSgxNixzb24sMiw0LCJkaXYiLDMwKSgxNyxjb24sMiw1LCJkaXYiLDI5KSx0ZSgpKCksSXQoMTgsImhyIiwzMSkscmwoKSksMiZuKXtsZXQgdCxyO2NvbnN0IGk9VGUoKSxvPWkuJGltcGxpY2l0LGE9aS5pbmRl''@;'; put 'put ''eCxsPVRlKDIpO2llKDQpLFNyKCIgIixvLmtleSwiICIpLGllKCkscnQoIm5nSWYiLGwuaXNDb2xQayhvLmtleSkpLGllKDIpLFNyKCIgIixudWxsPT1sLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PSh0PWwuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKG8ua2V5KSk/bnVs''@;'; put 'put ''bDp0LmRlc2MsIiAiKSxpZSgpLHJ0KCJuZ1N3aXRjaCIsbnVsbD09bC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0ocj1sLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShvLmtleSkpP251bGw6ci50eXBlKSxpZSgpLHJ0KCJuZ0lmIixsLmN1cnJlbnRSZWNvcmRMb2FkaW5n''@;'; put 'put ''cy5pbmNsdWRlcyhhKSksaWUoKSxydCgibmdJZiIsbC5jdXJyZW50UmVjb3JkRXJyb3JzLmluY2x1ZGVzKGEpKSxpZSgpLHJ0KCJuZ0lmIiwhbC5jdXJyZW50UmVjb3JkRXJyb3JzLmluY2x1ZGVzKGEpJiZsLmN1cnJlbnRSZWNvcmRXYXJuaW5nQ29scy5pbmNsdWRlcyhvLmtleSkpLGllKCks''@;'; put 'put ''cnQoIm5nU3dpdGNoQ2FzZSIsIm51bWVyaWMiKSxpZSgpLHJ0KCJuZ1N3aXRjaENhc2UiLHZvaWQgMCksaWUoKSxydCgibmdTd2l0Y2hDYXNlIiwiaW50bC10aW1lIiksaWUoKSxydCgibmdTd2l0Y2hDYXNlIiwiaW50bC1kYXRldGltZSIpLGllKCkscnQoIm5nU3dpdGNoQ2FzZSIsImludGwt''@;'; put 'put ''ZGF0ZSIpLGllKCkscnQoIm5nU3dpdGNoQ2FzZSIsImF1dG9jb21wbGV0ZSIpfX1mdW5jdGlvbiBkb24obixlKXtpZigxJm4mJihtbCgwKSxZbigxLHVvbiwxOSwxMywibmctY29udGFpbmVyIiw1KSxybCgpKSwyJm4pe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7aWUoKSxydCgibmdJZiIsIkFjdGlv''@;'; put 'put ''biIhPT10LmtleSYmIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIhPT10LmtleSYmIm5vTGlua09wdGlvbiIhPT10LmtleSl9fWZ1bmN0aW9uIGhvbihuLGUpe2lmKDEmbiYmKG1sKDApLFluKDEsZG9uLDIsMSwibmctY29udGFpbmVyIiwxOSksQWMoMiwia2V5dmFsdWUiKSxybCgp''@;'; put 'put ''KSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSgpLHJ0KCJuZ0Zvck9mIixzYigyLDIsdC5jdXJyZW50UmVjb3JkLHQub3JpZ2luYWxPcmRlcikpKCJuZ0ZvclRyYWNrQnkiLHQudHJhY2tCeUZuKX19ZnVuY3Rpb24gZm9uKG4sZSl7MSZuJiYoSigwLCJjbHItYWxlcnQiLDQ1KSgxLCJjbHItYWxlcnQt''@;'; put 'put ''aXRlbSIpKDIsInNwYW4iLDQ2KSxTZSgzLCIgRGF0YSBWYWxpZGF0aW9uIEVycm9ycyAtIFBsZWFzZSBSZXZpZXcgIiksdGUoKSgpKCkpLDImbiYmKE8yKCJ2aXNpYmlsaXR5IixUZSgpLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MD8idmlzaWJsZSI6ImhpZGRlbiIpLHJ0KCJj''@;'; put 'put ''bHJBbGVydENsb3NhYmxlIiwhMSkoImNsckFsZXJ0VHlwZSIsImRhbmdlciIpKX1mdW5jdGlvbiBwb24obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRpdiIsNDcpKDEsImJ1dHRvbiIsNDgpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoKS5vblByZXZp''@;'; put 'put ''b3VzUmVjb3JkQ2xpY2soKSl9KSxJdCgyLCJjbHItaWNvbiIsNDkpLHRlKCksSigzLCJwIiksU2UoNCwiIEN1cnJlbnQgcm93OiAiKSxKKDUsInN0cm9uZyIpLFNlKDYpLHRlKCkoKSxKKDcsImJ1dHRvbiIsNTApLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoKS5v''@;'; put 'put ''bk5leHRSZWNvcmRDbGljaygpKX0pLEl0KDgsImNsci1pY29uIiw1MSksdGUoKSgpfWlmKDImbil7Y29uc3QgdD1UZSgpO2llKCkscnQoImRpc2FibGVkIix0LmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MCksaWUoNSksU3IoIiAiLHQuY3VycmVudFJlY29yZEluZGV4KzEsIiAi''@;'; put 'put ''KSxpZSgpLHJ0KCJkaXNhYmxlZCIsdC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApfX1mdW5jdGlvbiBnb24obixlKXtpZigxJm4mJihKKDAsIm9wdGlvbiIsNTUpLFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdDtydCgibmdWYWx1ZSIsdCksaWUoKSxTcigi''@;'; put 'put ''ICIsdCwiICIpfX1mdW5jdGlvbiBtb24obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRpdiIpKDEsImFwcC1zb2Z0LXNlbGVjdCIsNTMpLHd0KCJmb2N1c2luIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKCkuY29sSW5kZXg7cmV0dXJuIFhlKFRlKCkub25SZWNvcmRJbnB1''@;'; put 'put ''dEZvY3VzKGksbykpfSksaGkoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKCkuY29sLGE9VGUoKTtyZXR1cm4gZmkoYS5jdXJyZW50UmVjb3JkW28ua2V5XSxpKXx8KGEuY3VycmVudFJlY29yZFtvLmtleV09aSksWGUoaSl9KSx3dCgib25JbnB1dEV2ZW50Iixm''@;'; put 'put ''dW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoKSxvPWkuY29sLGE9aS5jb2xJbmRleDtyZXR1cm4gWGUoVGUoKS5vblJlY29yZERyb3Bkb3duQ2hhbmdlKG8ua2V5LGEpKX0pLFluKDIsZ29uLDIsMiwib3B0aW9uIiw1NCksdGUoKSgpfWlmKDImbil7bGV0IHQ7Y29uc3Qgcj1UZSgpLmNvbCxp''@;'; put 'put ''PVRlKCk7aWUoKSxkaSgidmFsdWUiLGkuY3VycmVudFJlY29yZFtyLmtleV0pLHJ0KCJpbnB1dElkIixyLmtleSksaWUoKSxydCgibmdGb3JPZiIsbnVsbD09aS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0odD1pLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShyLmtleSkp''@;'; put 'put ''P251bGw6dC5zb3VyY2UpfX1mdW5jdGlvbiB2b24obixlKXtpZigxJm4mJihKKDAsIm9wdGlvbiIsNTgpLFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdDtydCgidmFsdWUiLHQpLGllKCksU3IoIiAiLHQsIiAiKX19ZnVuY3Rpb24gX29uKG4sZSl7aWYoMSZuKXtjb25zdCB0''@;'; put 'put ''PXduKCk7SigwLCJzZWxlY3QiLDU2KSx3dCgiZm9jdXNpbiIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgpLmNvbEluZGV4O3JldHVybiBYZShUZSgpLm9uUmVjb3JkSW5wdXRGb2N1cyhpLG8pKX0pLGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRl''@;'; put 'put ''KCkuY29sLGE9VGUoKTtyZXR1cm4gZmkoYS5jdXJyZW50UmVjb3JkW28ua2V5XSxpKXx8KGEuY3VycmVudFJlY29yZFtvLmtleV09aSksWGUoaSl9KSxZbigxLHZvbiwyLDIsIm9wdGlvbiIsNTcpLHRlKCl9aWYoMiZuKXtsZXQgdDtjb25zdCByPVRlKCkuY29sLGk9VGUoKTtkaSgibmdNb2Rl''@;'; put 'put ''bCIsaS5jdXJyZW50UmVjb3JkW3Iua2V5XSksaWUoKSxydCgibmdGb3JPZiIsbnVsbD09aS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0odD1pLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShyLmtleSkpP251bGw6dC5zb3VyY2UpfX1mdW5jdGlvbiB5b24obixlKXtpZigx''@;'; put 'put ''Jm4mJlluKDAsbW9uLDMsMywiZGl2Iiw1MikoMSxfb24sMiwyLCJuZy10ZW1wbGF0ZSIsbnVsbCwyLGNkKSwyJm4pe2NvbnN0IHQ9ZS5jb2wscj1vbygyKSxpPVRlKCk7cnQoIm5nSWYiLG51bGw9PWkuY3VycmVudFJlY29yZFZhbGlkYXRvcj9udWxsOmkuY3VycmVudFJlY29yZFZhbGlkYXRv''@;'; put 'put ''ci5oYXNEcVJ1bGVzKHQua2V5LG1jKDIsVWluKSkpKCJuZ0lmRWxzZSIscil9fWxldCBib249KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3RvcihyLGkpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPXIsdGhpcy5oZWxwZXJTZXJ2aWNlPWksdGhpcy5yZWNvcmRBY3Rpb249bnVsbCx0aGlzLmZp''@;'; put 'put ''bHRlcj0hMSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy5oZWFkZXJQa3M9W10sdGhpcy5jZWxsVmFsaWRhdGlvbj1bXSx0aGlzLmN1cnJlbnRSZWNvcmRJbmRleD0tMSx0aGlzLmN1cnJlbnRSZWNvcmRMb2FkaW5ncz1bXSx0aGlzLmN1cnJlbnRSZWNvcmRFcnJvcnM9W10sdGhpcy5vblJl''@;'; put 'put ''Y29yZENoYW5nZT1uZXcgS3IsdGhpcy5vblJlY29yZElucHV0Rm9jdXNlZD1uZXcgS3IsdGhpcy5vblJlY29yZERyb3Bkb3duQ2hhbmdlZD1uZXcgS3IsdGhpcy5vblJlY29yZEVkaXRDbG9zZT1uZXcgS3IsdGhpcy5vblJlY29yZEVkaXRDb25maXJtPW5ldyBLcix0aGlzLm9uTmV4dFJlY29y''@;'; put 'put ''ZD1uZXcgS3IsdGhpcy5vblByZXZpb3VzUmVjb3JkPW5ldyBLcix0aGlzLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scz1bXSx0aGlzLmN1cnJlbnRSZWNvcmRXYXJuaW5nQ29scz1bXSx0aGlzLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITEsdGhpcy5nZW5lcmF0ZWRSZWNvcmRVcmw9''@;'; put 'put ''bnVsbCx0aGlzLmFkZFJlY29yZFVybD1udWxsLHRoaXMucmVjb3JkTmV3T3JQa01vZGlmaWVkPSExLHRoaXMuYWRkUmVjb3JkTG9hZGluZz0hMSx0aGlzLm9yaWdpbmFsT3JkZXI9KG8sYSk9PjB9bmdPbkluaXQoKXt9dmFsaWRhdGVSZWNvcmRDb2wocixpKXt2YXIgbz10aGlzO3JldHVybiBD''@;'; put 'put ''cihmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGEsbCk9PntvLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/LmV4ZWN1dGVIb3RWYWxpZGF0b3IocixpLHU9PnthKHUpfSl9KX0pKCl9cmVjb3JkRGF0ZUNoYW5nZShyLGkpe2NvbnN0IG89ci50YXJnZXQudmFsdWU7IW98fCF0aGlzLmN1''@;'; put 'put ''cnJlbnRSZWNvcmR8fCh0aGlzLmN1cnJlbnRSZWNvcmRbaV09byx0aGlzLnJldmFsaWRhdGVSZWNvcmRDb2woaSxvKSl9dG9OYXRpdmVEYXRldGltZShyKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHI/IiI6ci5pbmNsdWRlcygiICIpP3IucmVwbGFjZSgiICIsIlQiKTpyfXJldmFsaWRhdGVS''@;'; put 'put ''ZWNvcmRDb2wocixpKXtjb25zdCBvPXRoaXMuY3VycmVudFJlY29yZFZhbGlkYXRvcj8uZ2V0UnVsZShyKTt0aGlzLnZhbGlkYXRlUmVjb3JkQ29sKG8saSkudGhlbihhPT50aGlzLnVwZGF0ZVZhbGlkYXRpb25TdGF0ZShyLGEpKSx0aGlzLnVwZGF0ZVdhcm5pbmdTdGF0ZShyLGkpfXJlY29y''@;'; put 'put ''ZFRpbWVDaGFuZ2UocixpKXtjb25zdCBvPXIudGFyZ2V0LnZhbHVlO2lmKCFvfHwhdGhpcy5jdXJyZW50UmVjb3JkKXJldHVybjtjb25zdCBhPTU9PT1vLmxlbmd0aD9gJHtvfTowMGA6bzt0aGlzLmN1cnJlbnRSZWNvcmRbaV09YSx0aGlzLnJldmFsaWRhdGVSZWNvcmRDb2woaSxhKX1yZWNv''@;'; put 'put ''cmREYXRldGltZUNoYW5nZShyLGkpe2NvbnN0IG89ci50YXJnZXQudmFsdWU7aWYoIW98fCF0aGlzLmN1cnJlbnRSZWNvcmQpcmV0dXJuO2NvbnN0W2EsbF09by5zcGxpdCgiVCIpLHU9YCR7YX0gJHs1PT09bC5sZW5ndGg/YCR7bH06MDBgOmx9YDt0aGlzLmN1cnJlbnRSZWNvcmRbaV09dSx0''@;'; put 'put ''aGlzLnJldmFsaWRhdGVSZWNvcmRDb2woaSx1KX1jb25maXJtUmVjb3JkRWRpdCgpe3RoaXMuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aDwxJiZ0aGlzLm9uUmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50UmVjb3JkKX1jbG9zZVJlY29yZEVkaXQoKXt0aGlzLm9uUmVjb3Jk''@;'; put 'put ''RWRpdENsb3NlLmVtaXQoKX1vbkVzY2FwZUtleSgpe3RoaXMuY2xvc2VSZWNvcmRFZGl0KCl9b25SZWNvcmREcm9wZG93bkNoYW5nZShyLGkpe3RoaXMub25SZWNvcmREcm9wZG93bkNoYW5nZWQuZW1pdCh7Y29sTmFtZTpyLGNvbDppfSl9b25SZWNvcmRJbnB1dEZvY3VzKHIsaSl7dGhpcy5v''@;'; put 'put ''blJlY29yZElucHV0Rm9jdXNlZC5lbWl0KHtldmVudDpyLGNvbE5hbWU6aX0pfXJlY29yZElucHV0UGFzdGUocil7c2V0VGltZW91dCgoKT0+e3IudGFyZ2V0LnZhbHVlPXIudGFyZ2V0LnZhbHVlLnJlcGxhY2UoL1xzKyQvLCIiKX0sMCl9cmVjb3JkSW5wdXRDaGFuZ2UocixpKXt2YXIgbz10''@;'; put 'put ''aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtjb25zdCBhPW8uY3VycmVudFJlY29yZFZhbGlkYXRvcj8uZ2V0UnVsZShpKSxsPXIudGFyZ2V0LnZhbHVlO28uaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoMzAwLCgpPT57by52YWxpZGF0ZVJlY29yZENvbChhLGwpLnRoZW4odT0+e28udXBk''@;'; put 'put ''YXRlVmFsaWRhdGlvblN0YXRlKGksdSksdXx8by50cnlBdXRvUG9wdWxhdGVOb3ROdWxsKHIsaSxhLGwpfSksby51cGRhdGVXYXJuaW5nU3RhdGUoaSxsKX0pfSkoKX11cGRhdGVWYWxpZGF0aW9uU3RhdGUocixpKXtjb25zdCBvPXRoaXMuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluZGV4''@;'; put 'put ''T2Yocik7aSYmbz4tMT90aGlzLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5zcGxpY2UobywxKTohaSYmbzwwJiZ0aGlzLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5wdXNoKHIpfXVwZGF0ZVdhcm5pbmdTdGF0ZShyLGkpe2NvbnN0IG89dGhpcy5jdXJyZW50UmVjb3JkVmFsaWRhdG9yPy5m''@;'; put 'put ''YWlsc1NvZnRSZWdleChyLGkpPz8hMSxhPXRoaXMuY3VycmVudFJlY29yZFdhcm5pbmdDb2xzLmluZGV4T2Yocik7IW8mJmE+LTE/dGhpcy5jdXJyZW50UmVjb3JkV2FybmluZ0NvbHMuc3BsaWNlKGEsMSk6byYmYTwwJiZ0aGlzLmN1cnJlbnRSZWNvcmRXYXJuaW5nQ29scy5wdXNoKHIpfXRy''@;'; put 'put ''eUF1dG9Qb3B1bGF0ZU5vdE51bGwocixpLG8sYSl7aWYoIU1nZShhKXx8IXRoaXMuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8IXRoaXMuY3VycmVudFJlY29yZClyZXR1cm47Y29uc3QgbD10aGlzLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0Tm90TnVsbERlZmF1bHRWYWx1ZShpKTt2b2lk''@;'; put 'put ''IDAhPT1sJiYodGhpcy5jdXJyZW50UmVjb3JkW2ldPWwsci50YXJnZXQudmFsdWU9bCx0aGlzLnZhbGlkYXRlUmVjb3JkQ29sKG8sbCkudGhlbih1PT57dGhpcy51cGRhdGVWYWxpZGF0aW9uU3RhdGUoaSx1KX0pLHRoaXMudXBkYXRlV2FybmluZ1N0YXRlKGksbCkpfW9uTmV4dFJlY29yZENs''@;'; put 'put ''aWNrKCl7dGhpcy5vbk5leHRSZWNvcmQuZW1pdCgpfW9uUHJldmlvdXNSZWNvcmRDbGljaygpe3RoaXMub25QcmV2aW91c1JlY29yZC5lbWl0KCl9Y29weVRvQ2xpcChyKXtuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChyKSx0aGlzLmdlbmVyYXRlZFJlY29yZFVybD1yfWdlbmVyYXRl''@;'; put 'put ''RWRpdFJlY29yZFVybCgpe3ZhciByPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe2lmKHIuZ2VuZXJhdGVkUmVjb3JkVXJsKXIuY29weVRvQ2xpcChyLmdlbmVyYXRlZFJlY29yZFVybCk7ZWxzZXtyLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITA7Y29uc3QgaT1bXTtyLmhlYWRl''@;'; put 'put ''clBrcy5mb3JFYWNoKG89PntsZXQgYT0iQyIsbD0iIjtmb3IobGV0IHU9MDt1PHIuY2VsbFZhbGlkYXRpb24ubGVuZ3RoO3UrKyl7Y29uc3QgZz1yLmNlbGxWYWxpZGF0aW9uW3VdO2lmKGcuZGF0YT09PW8peygibnVtZXJpYyI9PT1nLnR5cGV8fCJpbnRsLWRhdGUiPT09Zy50eXBlfHwiaW50''@;'; put 'put ''bC10aW1lIj09PWcudHlwZXx8ImludGwtZGF0ZXRpbWUiPT09Zy50eXBlKSYmKGE9Ik4iKTticmVha319bD0iQyI9PT1hP2AnJHtyLmN1cnJlbnRSZWNvcmRbb119J2A6ci5jdXJyZW50UmVjb3JkW29dLnRvU3RyaW5nKCksaS5wdXNoKHtHUk9VUF9MT0dJQzoiQU5EIixTVUJHUk9VUF9MT0dJ''@;'; put 'put ''QzoiQU5EIixTVUJHUk9VUF9JRDowLFZBUklBQkxFX05NOm8sT1BFUkFUT1JfTk06Ij0iLFJBV19WQUxVRTpsfSl9KSxpLmxlbmd0aD4wJiZyLmxpYmRzJiYoeWllbGQgci5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KHIubGliZHMsaSkudGhlbihvPT57ci5xdWVyeUZpbHRlcj17aWQ6by5y''@;'; put 'put ''ZXN1bHRbMF0uRklMVEVSX1JLLHRhYmxlOm8ucmVzdWx0WzBdLkZJTFRFUl9UQUJMRX07Y29uc3QgdT1sb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF0rIiMvZWRpdG9yL2VkaXQtcmVjb3JkLyIrci5xdWVyeUZpbHRlci50YWJsZSsiLyIrci5xdWVyeUZpbHRlci5pZDtyLmNvcHlUb0NsaXAo''@;'; put 'put ''dSksci5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLHIuZmlsdGVyPSExfSkuY2F0Y2gobz0+e3Iuc3VibWl0TG9hZGluZz0hMX0pKX19KSgpfWlzQ29sUGsocil7cmV0dXJuIHRoaXMuaGVhZGVyUGtzLmluZGV4T2Yocik+LTF9dHJhY2tCeUZuKHIsaSl7cmV0dXJuIHJ9c3RhdGlj''@;'; put 'put ''I2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSkoemUoQnApLHplKGZoKSl9LHRoaXMuXHUwMjc1Y21wPVByKHt0eXBlOmUsc2VsZWN0b3JzOltbImFwcC1lZGl0LXJlY29yZCJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oaSxvKXsxJmkmJnd0KCJr''@;'; put 'put ''ZXlkb3duLmVzY2FwZSIsZnVuY3Rpb24oKXtyZXR1cm4gby5vbkVzY2FwZUtleSgpfSxQOCl9LGlucHV0czp7Y3VycmVudFJlY29yZDoiY3VycmVudFJlY29yZCIscmVjb3JkQWN0aW9uOiJyZWNvcmRBY3Rpb24iLGxpYmRzOiJsaWJkcyIscXVlcnlGaWx0ZXI6InF1ZXJ5RmlsdGVyIixmaWx0''@;'; put 'put ''ZXI6ImZpbHRlciIsc3VibWl0TG9hZGluZzoic3VibWl0TG9hZGluZyIsaGVhZGVyUGtzOiJoZWFkZXJQa3MiLGNlbGxWYWxpZGF0aW9uOiJjZWxsVmFsaWRhdGlvbiIsY3VycmVudFJlY29yZEluZGV4OiJjdXJyZW50UmVjb3JkSW5kZXgiLGN1cnJlbnRSZWNvcmRMb2FkaW5nczoiY3VycmVu''@;'; put 'put ''dFJlY29yZExvYWRpbmdzIixjdXJyZW50UmVjb3JkRXJyb3JzOiJjdXJyZW50UmVjb3JkRXJyb3JzIixjdXJyZW50UmVjb3JkVmFsaWRhdG9yOiJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIn0sb3V0cHV0czp7b25SZWNvcmRDaGFuZ2U6Im9uUmVjb3JkQ2hhbmdlIixvblJlY29yZElucHV0Rm9j''@;'; put 'put ''dXNlZDoib25SZWNvcmRJbnB1dEZvY3VzZWQiLG9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkOiJvblJlY29yZERyb3Bkb3duQ2hhbmdlZCIsb25SZWNvcmRFZGl0Q2xvc2U6Im9uUmVjb3JkRWRpdENsb3NlIixvblJlY29yZEVkaXRDb25maXJtOiJvblJlY29yZEVkaXRDb25maXJtIixvbk5leHRS''@;'; put 'put ''ZWNvcmQ6Im9uTmV4dFJlY29yZCIsb25QcmV2aW91c1JlY29yZDoib25QcmV2aW91c1JlY29yZCJ9LHN0YW5kYWxvbmU6ITEsZGVjbHM6MTcsdmFyczoxMSxjb25zdHM6W1siYXV0b2NvbXBsZXRlIiwiIl0sWyJjaGFyVGV4dGFyZWEiLCIiXSxbIm90aGVyX3RoYW5fc29mdF9zZWxlY3QiLCIi''@;'; put 'put ''XSxbImlkIiwicmVjb3JkTW9kYWxSZWYiLDEsInJlY29yZC1lZGl0LW1vZGFsIiwicG9zaXRpb24tcmVsYXRpdmUiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbNCwibmdJZiJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsImQtZmxl''@;'; put 'put ''eCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMCBweS0xMCIsNCwibmdJZiJdLFsxLCJtb2RhbC1mb290ZXIiLCJwLTAiLCJjbHItZ2FwLTUiLCJjbHItZ2FwLW1kLTAiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZmxleC1tZC1yb3ciXSxbImNsYXNzIiwi''@;'; put 'put ''dmFsaWRhdGlvbi1pbmZvLWFsZXJ0IiwzLCJ2aXNpYmlsaXR5IiwiY2xyQWxlcnRDbG9zYWJsZSIsImNsckFsZXJ0VHlwZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJwcmV2LW5leHQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiZm9jdXNhYmxlIiwi''@;'; put 'put ''bXItNWkiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImZvY3VzYWJsZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsiY2xhc3MiLCJwb3NpdGlvbi1hYnNvbHV0ZSBnZW5lcmF0ZS1yZWNvcmQtdXJsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImJ0biBi''@;'; put 'put ''dG4tbGluayBnZW5lcmF0ZS1yZWNvcmQtdXJsLWJ1dHRvbiBwb3NpdGlvbi1hYnNvbHV0ZSIsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJwb3NpdGlvbi1hYnNvbHV0ZSIsImdlbmVyYXRlLXJlY29yZC11cmwiXSxbMSwiYnRuIiwiYnRuLWxpbmsiLCJnZW5lcmF0ZS1yZWNv''@;'; put 'put ''cmQtdXJsLWJ1dHRvbiIsInBvc2l0aW9uLWFic29sdXRlIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJ3LTEwMCIsInB5LTEwIl0sWzEsInNwaW5uZXIiXSxbNCwibmdGb3IiLCJuZ0Zvck9m''@;'; put 'put ''IiwibmdGb3JUcmFja0J5Il0sWzEsImNvbHVtbi1lbnRyeSIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LW1kLXJvdyJdLFsxLCJuYW1lLWlucHV0LXJvdyJdLFsxLCJmb250LXdlaWdodC1ib2xkIl0sWyJzaGFwZSIsImtleSIsNCwibmdJZiJdLFsxLCJjZWxsLWRlc2MiXSxbMSwiaW5w''@;'; put 'put ''dXRzLXdyYXBwZXIiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLWlubGluZSBmbGV4LXVuc2V0IHBvc2l0aW9uLWFic29sdXRlIGVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImZsZXgtdW5zZXQg''@;'; put 'put ''cG9zaXRpb24tYWJzb2x1dGUgZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiLCJzaGFwZSIsImVycm9yLXN0YW5kYXJkIiwic3RhdHVzIiwid2FybmluZyIsNCwibmdJZiJdLFsiY2xhc3MiLCJmbGV4LXVuc2V0IHBvc2l0aW9uLWFic29sdXRlIGVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Iiwic2hh''@;'; put 'put ''cGUiLCJlcnJvci1zdGFuZGFyZCIsInN0YXR1cyIsIndhcm5pbmciLCJ0aXRsZSIsIlZhbHVlIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBwYXR0ZXJuIiw0LCJuZ0lmIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJkYXRlLWZpZWxkIiw0LCJuZ1N3aXRjaENhc2UiXSxbMSwi''@;'; put 'put ''bXQtMTAiXSxbInNoYXBlIiwia2V5Il0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSIsImZsZXgtdW5zZXQiLCJwb3NpdGlvbi1hYnNvbHV0ZSIsImVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Il0sWyJzaGFwZSIsImVycm9yLXN0YW5kYXJkIiwic3RhdHVzIiwid2FybmluZyIsMSwiZmxl''@;'; put 'put ''eC11bnNldCIsInBvc2l0aW9uLWFic29sdXRlIiwiZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiXSxbInNoYXBlIiwiZXJyb3Itc3RhbmRhcmQiLCJzdGF0dXMiLCJ3YXJuaW5nIiwidGl0bGUiLCJWYWx1ZSBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgcGF0dGVybiIsMSwiZmxleC11bnNl''@;'; put 'put ''dCIsInBvc2l0aW9uLWFic29sdXRlIiwiZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiXSxbImNsYXNzIiwibnVtZXJpYy1pbnB1dCIsMywiaW52YWxpZC1kYXRhIiw0LCJuZ0lmIl0sWzEsIm51bWVyaWMtaW5wdXQiXSxbImNscklucHV0IiwiIiwidHlwZSIsInRleHQiLDEsIm5vdC1jaGFyIiwz''@;'; put 'put ''LCJmb2N1c2luIiwicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsiY2xyVGV4dGFyZWEiLCIiLDMsImZvY3VzaW4iLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSIs''@;'; put 'put ''InJvd3MiLCJuZ01vZGVsIiwibWF4TGVuZ3RoIl0sWzEsImRhdGUtZmllbGQiXSxbInR5cGUiLCJ0aW1lIiwic3RlcCIsIjEiLDEsImRhdGUtaW5wdXQiLDMsImNoYW5nZSIsInZhbHVlIl0sWyJ0eXBlIiwiZGF0ZXRpbWUtbG9jYWwiLCJzdGVwIiwiMSIsMSwiZGF0ZS1pbnB1dCIsMywiY2hh''@;'; put 'put ''bmdlIiwidmFsdWUiXSxbInR5cGUiLCJkYXRlIiwxLCJkYXRlLWlucHV0IiwzLCJjaGFuZ2UiLCJ2YWx1ZSJdLFsxLCJ2YWxpZGF0aW9uLWluZm8tYWxlcnQiLDMsImNsckFsZXJ0Q2xvc2FibGUiLCJjbHJBbGVydFR5cGUiXSxbMSwiYWxlcnQtdGV4dCJdLFsxLCJwcmV2LW5leHQiXSxbInR5''@;'; put 'put ''cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIjAiLCJhcmlhLWxhYmVsIiwiUHJldmlvdXMgcmVjb3JkIiwxLCJidG4iLCJidG4tb3V0bGluZSIsImZvY3VzYWJsZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJhbmdsZSBsZWZ0Iiwic2l6ZSIsIjIzIl0sWyJ0eXBlIiwiYnV0dG9u''@;'; put 'put ''IiwidGFiaW5kZXgiLCIwIiwiYXJpYS1sYWJlbCIsIk5leHQgcmVjb3JkIiwxLCJidG4iLCJidG4tb3V0bGluZSIsImZvY3VzYWJsZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJhbmdsZSByaWdodCIsInNpemUiLCIyMyJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbMywiZm9j''@;'; put 'put ''dXNpbiIsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50IiwidmFsdWUiLCJpbnB1dElkIl0sWzMsIm5nVmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ1ZhbHVlIl0sWyJjbHJTZWxlY3QiLCIiLDMsImZvY3VzaW4iLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFszLCJ2YWx1''@;'; put 'put ''ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGksbyl7aWYoMSZpKXtjb25zdCBhPXduKCk7SigwLCJjbHItbW9kYWwiLDMpKDEsImgzIiw0KSxTZSgyKSxZbigzLFlpbiwzLDIsIm5nLWNvbnRhaW5lciIsNSksdGUoKSxKKDQsImRpdiIsNiks''@;'; put 'put ''WW4oNSxaaW4sMywwLCJkaXYiLDcpKDYsaG9uLDMsNSwibmctY29udGFpbmVyIiw1KSx0ZSgpLEooNywiZGl2Iiw4KSxZbig4LGZvbiw0LDQsImNsci1hbGVydCIsOSkoOSxwb24sOSwzLCJkaXYiLDEwKSxKKDEwLCJkaXYiKSgxMSwiYnV0dG9uIiwxMSksd3QoImNsaWNrIixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBZZShhKSxvLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uPSExLFhlKG8uY2xvc2VSZWNvcmRFZGl0KCkpfSksU2UoMTIsIiBDYW5jZWwgIiksdGUoKSxKKDEzLCJidXR0b24iLDEyKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKGEpLFhlKG8uY29uZmlybVJlY29y''@;'; put 'put ''ZEVkaXQoKSl9KSxTZSgxNCwiIENvbmZpcm0gIiksdGUoKSgpKCksWW4oMTUseW9uLDMsMywibmctdGVtcGxhdGUiLG51bGwsMCxjZCksdGUoKX0yJmkmJihydCgiY2xyTW9kYWxPcGVuIiwhMCkoImNsck1vZGFsQ2xvc2FibGUiLCExKSxpZSgyKSxlNCgiICIsIkFERCI9PT1vLnJlY29yZEFj''@;'; put 'put ''dGlvbj8iQWRkIjoiRWRpdCIsIiByZWNvcmQgaW4gIiwobnVsbD09by5saWJkcz9udWxsOm8ubGliZHMuc3BsaXQoIi4iKSlbMF0sIi4iLChudWxsPT1vLmxpYmRzP251bGw6by5saWJkcy5zcGxpdCgiLiIpKVsxXSwiICIpLGllKCkscnQoIm5nSWYiLCJFRElUIj09PW8ucmVjb3JkQWN0aW9u''@;'; put 'put ''KSxpZSgyKSxydCgibmdJZiIsby5hZGRSZWNvcmRMb2FkaW5nKSxpZSgpLHJ0KCJuZ0lmIiwhby5hZGRSZWNvcmRMb2FkaW5nKSxpZSgyKSxydCgibmdJZiIsby5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApLGllKCkscnQoIm5nSWYiLG8uY3VycmVudFJlY29yZEludmFsaWRD''@;'; put 'put ''b2xzLmxlbmd0aDwxKSxpZSg0KSxydCgiZGlzYWJsZWQiLG8uY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wKSl9LGRlcGVuZGVuY2llczpbUmYsWXMsSWYsQUUsU1UsWGcsUWcsbHUsS2csb2MsWGwsWkQsS01lLEdELGN1LHhkLG1oLFl6LFBmLFh6LHFiLHJXLE1NZSxSWmUsRVVd''@;'; put 'put ''LGVuY2Fwc3VsYXRpb246Mn0pKX1yZXR1cm4gbigpLGV9KSgpO2Z1bmN0aW9uIHdvbihuLGUpe2lmKDEmbiYmKEooMCwicCIsMCksU2UoMSksdGUoKSksMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0O2llKCksU3IoIiAiLHQsIiAiKX19bGV0IENvbj0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0''@;'; put 'put ''cnVjdG9yKCl7dGhpcy5zdGF0ZXNMaXN0PVtdLHRoaXMucHJvY2Vzc2VkU3RhdGVzPVtdLHRoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMSx0aGlzLm1pbkRlbGF5PTFlM31uZ09uSW5pdCgpe31hcHBlbmRTdGF0ZShyKXtpZigie2ZpbmlzaH0iPT09cilyZXR1cm4gdGhpcy5zdGF0ZXJJblByb2dy''@;'; put 'put ''ZXNzPSExLHZvaWQgY2xlYXJJbnRlcnZhbCh0aGlzLnN0YXRlSW50ZXJ2YWwpO3RoaXMuc3RhdGVzTGlzdC5wdXNoKHIpLHRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2gocil9cmVwbGFjZUxhc3RTdGF0ZShyKXt0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjA/KHRoaXMuc3RhdGVzTGlzdC5wb3Ao''@;'; put 'put ''KSx0aGlzLnN0YXRlc0xpc3QucHVzaChyKSk6dGhpcy5wcm9jZXNzZWRTdGF0ZXNbdGhpcy5wcm9jZXNzZWRTdGF0ZXMubGVuZ3RoLTFdPXJ9Y2xlYXJTdGF0ZXMoKXt0aGlzLnByb2Nlc3NlZFN0YXRlcz1bXX1zdGFydFN0YXRlcigpe3RoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMCx0aGlzLnN0''@;'; put 'put ''YXRlc0xpc3QubGVuZ3RoPjAmJnRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2godGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIiKSx0aGlzLnN0YXRlSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoKCk9Pnt0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjAmJnRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2godGhp''@;'; put 'put ''cy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIiKX0sdGhpcy5taW5EZWxheSl9c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSl9LHRoaXMuXHUwMjc1Y21wPVByKHt0eXBlOmUsc2VsZWN0b3JzOltbImFwcC11cGxvYWQtc3RhdGVyIl1dLHN0''@;'; put 'put ''YW5kYWxvbmU6ITEsZGVjbHM6Nix2YXJzOjAsY29uc3RzOltbMSwibS0wIl0sWzEsInRleHQtY2VudGVyIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIiwidmVydGljYWwtYWxpZ24tbWlkZGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGksbyl7MSZpJiYoSigwLCJkaXYiKSxfbygxLHdvbiwy''@;'; put 'put ''LDEsInAiLDAsQ28pLHRlKCksSigzLCJkaXYiLDEpKDQsInNwYW4iLDIpLFNlKDUsIkxvYWRpbmcuLi4iKSx0ZSgpKCkpLDImaSYmKGllKCkseW8oby5wcm9jZXNzZWRTdGF0ZXMpKX0sZW5jYXBzdWxhdGlvbjoyfSkpfXJldHVybiBuKCksZX0pKCksU29uPSgoKT0+e3ZhciBuO2NsYXNzIGV7''@;'; put 'put ''dHJhbnNmb3JtKHIpe3JldHVybiByLnJlcGxhY2UoL1x8L2csIiB8ICIpfXN0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpfSx0aGlzLlx1MDI3NXBpcGU9dWgoe25hbWU6InBrU3BhY2VTZXBhcmF0ZSIsdHlwZTplLHB1cmU6ITAsc3Rh''@;'; put 'put ''bmRhbG9uZTohMX0pKX1yZXR1cm4gbigpLGV9KSgpLEZaZT0oKCk9Pnt2YXIgbjtjbGFzcyBle3RyYW5zZm9ybShyLGkpe3JldHVybiB0aGlzLmFkZFNlcGFyYXRvcnMoci50b1N0cmluZygpLGkpfWFkZFNlcGFyYXRvcnMocixpPSIgIil7Y29uc3Qgbz0ocis9IiIpLnNwbGl0KCIuIik7bGV0''@;'; put 'put ''IGE9b1swXTtjb25zdCBsPW8ubGVuZ3RoPjE/Ii4iK29bMV06IiIsdT0vKFxkKykoXGR7M30pLztmb3IoO3UudGVzdChhKTspYT1hLnJlcGxhY2UodSwiJDEiK2krIiQyIik7cmV0dXJuIGErbH1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhp''@;'; put 'put ''fHxlKX0sdGhpcy5cdTAyNzVwaXBlPXVoKHtuYW1lOiJ0aG91c2FuZFNlcGFyYXRvciIsdHlwZTplLHB1cmU6ITAsc3RhbmRhbG9uZTohMX0pKX1yZXR1cm4gbigpLGV9KSgpO2NvbnN0IEVvbj1bImh0Il0sTW9uPVsiaW5mb0JhciJdLFRvbj1bInVwbG9hZFN0YXRlciJdLHhvbj1bInF1ZXJ5''@;'; put 'put ''RmlsdGVyIl0sQW9uPVsiZmlsZVVwbG9hZElucHV0Il0sa29uPShuLGUpPT4oe2xpYk5hbWU6bix0YWJsZU5hbWU6ZX0pLFBaZT0oKT0+WyIiLCIgIl0sUm9uPW49Pih7aGVhZGVyQmFyRmlsdGVyOm59KSxJb249KCk9PlsiL2hvbWUiXTtmdW5jdGlvbiBEb24obixlKXtpZigxJm4pe2NvbnN0''@;'; put 'put ''IHQ9d24oKTtKKDAsImRpdiIsMTkpKDEsInNwYW4iLDY2KSgyLCJsYWJlbCIsNjcpLFNlKDMsIiBCcm93c2UgIiksdGUoKSgpLEooNCwiaW5wdXQiLDY4LDMpLHd0KCJjaGFuZ2UiLGZ1bmN0aW9uKGkpe3JldHVybiBZZSh0KSxYZShUZSgpLmF0dGFjaEZpbGUoaSkpfSksdGUoKSgpfWlmKDIm''@;'; put 'put ''bil7Y29uc3QgdD1UZSgpO2llKDQpLHJ0KCJ1cGxvYWRlciIsdC51cGxvYWRlcil9fWZ1bmN0aW9uIExvbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiZGl2IiwyMCkoMSwiYnV0dG9uIiw2OSksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLnVwbG9h''@;'; put 'put ''ZFBhcnNlZEZpbGVzKCkpfSksU2UoMiwiIFVwbG9hZCAiKSx0ZSgpKCl9MiZuJiYoaWUoKSxydCgiZGlzYWJsZWQiLCEwKSl9ZnVuY3Rpb24gT29uKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJidXR0b24iLDcwKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhl''@;'; put 'put ''KFRlKCkuc2hvd1VwbG9hZE1vZGFsPSExKX0pLFNlKDEsIiBDbG9zZSAiKSx0ZSgpfWlmKDImbil7Y29uc3QgdD1UZSgpO3J0KCJkaXNhYmxlZCIsdC5leGNlbEZpbGVQYXJzaW5nfHx0LnVwbG9hZExvYWRpbmcpfX1mdW5jdGlvbiBOb24obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAs''@;'; put 'put ''ImJ1dHRvbiIsNzEpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoKS5zaG93VXBsb2FkTW9kYWw9ITEpfSksU2UoMSwiIFNraXAgIiksdGUoKX19ZnVuY3Rpb24gRm9uKG4sZSl7MSZuJiYoSigwLCJkaXYiLDIzKSxJdCgxLCJhcHAtdXBsb2FkLXN0YXRlciIsbnVs''@;'; put 'put ''bCw0KSx0ZSgpKX1mdW5jdGlvbiBQb24obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImFwcC1lZGl0LXJlY29yZCIsNzIpLHd0KCJvblJlY29yZENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoKS5jb25maXJtUmVjb3JkRWRpdCgpKX0pKCJvblJlY29yZElucHV0''@;'; put 'put ''Rm9jdXNlZCIsZnVuY3Rpb24oaSl7cmV0dXJuIFllKHQpLFhlKFRlKCkub25SZWNvcmRJbnB1dEZvY3VzKGkpKX0pKCJvblJlY29yZEVkaXRDbG9zZSIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoKS5jbG9zZVJlY29yZEVkaXQoKSl9KSgib25OZXh0UmVjb3JkIixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBZZSh0KSxYZShUZSgpLm9uTmV4dFJlY29yZCgpKX0pKCJvblByZXZpb3VzUmVjb3JkIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLm9uUHJldmlvdXNSZWNvcmQoKSl9KSx0ZSgpfWlmKDImbil7Y29uc3QgdD1UZSgpO3J0KCJjdXJyZW50UmVjb3JkIix0LmN1cnJl''@;'; put 'put ''bnRFZGl0UmVjb3JkKSgicmVjb3JkQWN0aW9uIix0LnJlY29yZEFjdGlvbikoImxpYmRzIix0LmxpYmRzKSgicXVlcnlGaWx0ZXIiLHQucXVlcnlGaWx0ZXIpKCJmaWx0ZXIiLHQuZmlsdGVyKSgic3VibWl0TG9hZGluZyIsdC5zdWJtaXRMb2FkaW5nKSgiaGVhZGVyUGtzIix0LmhlYWRlclBr''@;'; put 'put ''cykoImNlbGxWYWxpZGF0aW9uIix0LmNlbGxWYWxpZGF0aW9uKSgiY3VycmVudFJlY29yZEluZGV4Iix0LmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpKCJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLHQuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncykoImN1cnJlbnRSZWNvcmRFcnJvcnMiLHQuY3Vy''@;'; put 'put ''cmVudEVkaXRSZWNvcmRFcnJvcnMpKCJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIix0LmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yKX19ZnVuY3Rpb24gSG9uKG4sZSl7MSZuJiYoSigwLCJkaXYiLDI3KSxJdCgxLCJwcm9ncmVzcyIpLHRlKCkpfWZ1bmN0aW9uIFZvbihuLGUpe2lmKDEmbil7''@;'; put 'put ''Y29uc3QgdD13bigpO0ooMCwiZGl2IiwzMCkoMSwic3BhbiIsNzMpLEl0KDIsImNsci1pY29uIiw3NCksSigzLCJzcGFuIiw3NSksU2UoNCwiQmFjayB0byB0YWJsZSBzZWxlY3Rpb24iKSx0ZSgpKCksSig1LCJzcGFuIiw3Niksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxY''@;'; put 'put ''ZShUZSgpLnZpZXdib3hNYW5hZ2VyKCkpfSksSXQoNiwiY2xyLWljb24iLDc3KSxKKDcsInNwYW4iLDc1KSxTZSg4LCJWaWV3Ym94ZXMiKSx0ZSgpKCkoKX0yJm4mJihpZSgpLHJ0KCJyb3V0ZXJMaW5rIixtYygxLElvbikpKX1mdW5jdGlvbiBCb24obixlKXsxJm4mJkl0KDAsImNsci1pY29u''@;'; put 'put ''Iiw4MCl9ZnVuY3Rpb24gam9uKG4sZSl7aWYoMSZuJiYoSigwLCJjbHItdG9vbHRpcC1jb250ZW50Iiw4MyksU2UoMSksdGUoKSksMiZuKXtjb25zdCB0PVRlKDMpO2llKCksU3IoIiAiLHQuZHNOb3RlLCIgIil9fWZ1bmN0aW9uIFVvbihuLGUpezEmbiYmWW4oMCxqb24sMiwxLCJjbHItdG9v''@;'; put 'put ''bHRpcC1jb250ZW50Iiw4NCl9ZnVuY3Rpb24gem9uKG4sZSl7aWYoMSZuJiYoU2UoMCksQWMoMSwidGhvdXNhbmRTZXBhcmF0b3IiKSksMiZuKXtjb25zdCB0PVRlKDMpO1VqKCIgKCIsc2IoMSw0LHQuZGF0YVNvdXJjZS5sZW5ndGgsIiwiKSwiICIsMT09PXQuZGF0YVNvdXJjZS5sZW5ndGg/''@;'; put 'put ''InJvdyI6InJvd3MiLCIsICIsdC5jb2xzLmxlbmd0aCwiIiwxPT09dC5jb2xzLmxlbmd0aD8iIGNvbCI6IiBjb2xzIiwiKSAiKX19ZnVuY3Rpb24gV29uKG4sZSl7MSZuJiZTZSgwLCIgKDAgcm93cykgIil9ZnVuY3Rpb24gWW9uKG4sZSl7aWYoMSZuJiYodnQoMCx6b24sMiw3KSx2dCgxLFdv''@;'; put 'put ''biwxLDApKSwyJm4pe2NvbnN0IHQ9VGUoMik7X3QodC56ZXJvRmlsdGVyUm93cz8tMTowKSxpZSgpLF90KHQuemVyb0ZpbHRlclJvd3M/MTotMSl9fWZ1bmN0aW9uIFpvbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiaDQiLDc4KSgxLCJjbHItdG9vbHRpcCIpKDIsImNsci1pY29u''@;'; put 'put ''Iiw3OSksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLmRhdGFzZXRJbmZvPSEwKX0pLHRlKCksdnQoMyxCb24sMSwwLCJjbHItaWNvbiIsODApLEooNCwic3BhbiIsODEpLFNlKDUpLEooNiwiYSIsODIpLFNlKDcpLHRlKCkoKSx2dCg4LFVvbiwxLDAsImNsci10''@;'; put 'put ''b29sdGlwLWNvbnRlbnQiLDgzKSx0ZSgpLHZ0KDksWW9uLDIsMiksdGUoKX1pZigyJm4pe2NvbnN0IHQ9ZS5uZ1ZhcixyPVRlKCk7aWUoMyksX3QodC50YWJsZU5hbWUuaW5jbHVkZXMoIi1GQyIpPzM6LTEpLGllKDIpLFNyKCIgIix0LmxpYk5hbWUsIi4iKSxpZSgpLHJ0KCJyb3V0ZXJMaW5r''@;'; put 'put ''IiwiL3ZpZXcvZGF0YS8iK3IubGliZHMpLGllKCkscHIodC50YWJsZU5hbWUucmVwbGFjZSgiLUZDIiwiIikpLGllKCksX3Qoci5kc05vdGUmJnIuZHNOb3RlLmxlbmd0aD4wPzg6LTEpLGllKCksX3Qoci5kYXRhU291cmNlPzk6LTEpfX1mdW5jdGlvbiBHb24obixlKXtpZigxJm4pe2NvbnN0''@;'; put 'put ''IHQ9d24oKTtKKDAsImJ1dHRvbiIsODkpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoMykub3BlblFiKCkpfSksSXQoMSwiY2xyLWljb24iLDkwKSxKKDIsInNwYW4iLDc1KSxTZSgzLCJGaWx0ZXIiKSx0ZSgpKCl9fWZ1bmN0aW9uICRvbihuLGUpe2lmKDEmbil7''@;'; put 'put ''Y29uc3QgdD13bigpO0ooMCwiYnV0dG9uIiw5MSksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgzKS5vblNob3dVcGxvYWRNb2RhbCgpKX0pLEl0KDEsImNsci1pY29uIiw5MiksSigyLCJzcGFuIiw3NSksU2UoMywiVXBsb2FkIiksdGUoKSgpfX1mdW5jdGlvbiBx''@;'; put 'put ''b24obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTt2dCgwLEdvbiw0LDAsImJ1dHRvbiIsODUpLEooMSwiYnV0dG9uIiw4Niksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgyKS5lZGl0VGFibGUoKSl9KSxJdCgyLCJjbHItaWNvbiIsODcpLEooMywic3BhbiIsNzUp''@;'; put 'put ''LFNlKDQsIkVkaXQiKSx0ZSgpKCksdnQoNSwkb24sNCwwLCJidXR0b24iLDg4KX1pZigyJm4pe2NvbnN0IHQ9VGUoMik7X3QodC5pc1ZhRW1iZWQ/LTE6MCksaWUoNSksX3QodC5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZz8tMTo1KX19ZnVuY3Rpb24gS29uKG4sZSl7aWYoMSZuJiYoSigwLCJz''@;'; put 'put ''cGFuIiksU2UoMSksdGUoKSksMiZuKXtjb25zdCB0PVRlKDQpO2llKCksTmgoIlRvIHVubG9jayBtb3JlIHRoYW4gIix0LmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkLCIgIiwxPT09dC5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZD8icm93Ijoi''@;'; put 'put ''cm93cyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIFhvbihuLGUpe2lmKDEmbiYmKEooMCwiY2xyLXRvb2x0aXAtY29udGVudCIsODMpLHZ0KDEsS29uLDIsMiwic3BhbiIpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgzKTtpZSgpLF90KHQucmVzdHJp''@;'; put 'put ''Y3Rpb25zLnJlc3RyaWN0QWRkUm93PzE6LTEpfX1mdW5jdGlvbiBRb24obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImJ1dHRvbiIsOTMpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoMikuY2FuY2VsRWRpdCgpKX0pLEl0KDEsImNsci1pY29uIiw5NCks''@;'; put 'put ''SigyLCJzcGFuIiksU2UoMywiQ2FuY2VsIiksdGUoKSgpLEooNCwiY2xyLXRvb2x0aXAiKSg1LCJidXR0b24iLDk1KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3QgaT1UZSgyKTtyZXR1cm4gWGUoaS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3c/IiI6aS5hZGRSb3coKSl9''@;'; put 'put ''KSxJdCg2LCJjbHItaWNvbiIsOTYpLFNlKDcsIkFkZCBSb3cgIiksdGUoKSxZbig4LFhvbiwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDg0KSx0ZSgpLEooOSwiYnV0dG9uIiw0NSksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgyKS5jaGVja1NhdmUoKSl9KSxJ''@;'; put 'put ''dCgxMCwiY2xyLWljb24iLDk3KSxTZSgxMSwiU3VibWl0ICIpLHRlKCl9aWYoMiZuKXtjb25zdCB0PVRlKDIpO2llKDUpLHdyKCJkYy1sb2NrZWQtY29udHJvbCIsdC5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpLHJ0KCJjbHJMb2FkaW5nIix0LmFkZGluZ05ld1Jvdyl9fWZ1bmN0aW9u''@;'; put 'put ''IEpvbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiYnV0dG9uIiwxMDEpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoMykubWFudWFsRmlsZUVkaXRNb2RhbD0hMCl9KSxJdCgxLCJjbHItaWNvbiIsODcpLEooMiwic3BhbiIpLFNlKDMsIkVkaXQiKSx0''@;'; put 'put ''ZSgpKCl9fWZ1bmN0aW9uIGVhbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiYnV0dG9uIiw5OCksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgyKS5kaXNjYXJkU291cmNlRmlsZT0hMCl9KSxJdCgxLCJjbHItaWNvbiIsOTQpLEooMiwic3BhbiIpLFNl''@;'; put 'put ''KDMsIkRpc2NhcmQgZmlsZSIpLHRlKCkoKSx2dCg0LEpvbiw0LDAsImJ1dHRvbiIsOTkpLEooNSwiYnV0dG9uIiwxMDApLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoMikuc3VibWl0RXhjZWwoKSl9KSxJdCg2LCJjbHItaWNvbiIsOTcpLFNlKDcsIiBTdWJtaXQg''@;'; put 'put ''IiksdGUoKX1pZigyJm4pe2NvbnN0IHQ9VGUoMik7aWUoNCksX3QodC5ob3RUYWJsZS5yZWFkT25seT80Oi0xKSxpZSgpLHJ0KCJjbHJMb2FkaW5nIix0LnVwbG9hZExvYWRpbmcpfX1mdW5jdGlvbiB0YW4obixlKXtpZigxJm4mJihKKDAsImRpdiIsMzMpLHZ0KDEscW9uLDYsMiksdnQoMixR''@;'; put 'put ''b24sMTIsMyksdnQoMyxlYW4sOCwyKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSgpLF90KHQuaG90VGFibGUucmVhZE9ubHkmJiF0LnVwbG9hZFByZXZpZXc/MTotMSksaWUoKSxfdCh0LmhvdFRhYmxlLnJlYWRPbmx5fHx0LnVwbG9hZFByZXZpZXc/LTE6MiksaWUoKSxfdCh0LnVwbG9h''@;'; put 'put ''ZFByZXZpZXc/MzotMSl9fWZ1bmN0aW9uIG5hbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiYnV0dG9uIiwxMDUpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoMikudG9nZ2xlRmlsdGVyUGFuZWwoKSl9KSxJdCgxLCJjbHItaWNvbiIsMTA2KSx0ZSgp''@;'; put 'put ''fWlmKDImbil7Y29uc3QgdD1UZSgyKTtScigiYXJpYS1leHBhbmRlZCIsdC5maWx0ZXJFeHBhbmRlZCkoImFyaWEtbGFiZWwiLHQuZmlsdGVyRXhwYW5kZWQ/IkNvbGxhcHNlIHRoZSBmaWx0ZXIgY2xhdXNlIjoiRXhwYW5kIHRoZSBmaWx0ZXIgY2xhdXNlIil9fWZ1bmN0aW9uIHJhbihuLGUp''@;'; put 'put ''e2lmKDEmbiYmKEooMCwiZGl2IiwxMDIsNSkoMiwic3BhbiIsMTAzKSxTZSgzLCJGSUxURVIgOiAiKSxKKDQsImIiKSxTZSg1KSx0ZSgpKCksdnQoNixuYW4sMiwyLCJidXR0b24iLDEwNCksdGUoKSksMiZuKXtjb25zdCB0PVRlKCk7d3IoImV4cGFuZGVkIix0LmZpbHRlckV4cGFuZGVkKSxp''@;'; put 'put ''ZSg1KSxwcih0LnF1ZXJ5VGV4dCksaWUoKSxfdCh0LmZpbHRlck92ZXJmbG93cz82Oi0xKX19ZnVuY3Rpb24gaWFuKG4sZSl7MSZuJiYoSigwLCJzcGFuIiwxMDgpLFNlKDEsIiBMb2FkaW5nLi4uICIpLHRlKCksSigyLCJkaXYiLDEwOSkoMywicCIsMTEwKSxTZSg0LCJMb2FkaW5nIHRhYmxl''@;'; put 'put ''IiksdGUoKSgpKX1mdW5jdGlvbiBvYW4obixlKXsxJm4mJihKKDAsInNwYW4iKSxJdCgxLCJjbHItaWNvbiIsMTExKSx0ZSgpLEooMiwiZGl2IiwxMDkpKDMsInAiLDExMCksU2UoNCwiTG9hZGluZyB0YWJsZSBlcnJvciIpLHRlKCkoKSl9ZnVuY3Rpb24gYWFuKG4sZSl7aWYoMSZuJiYoSigw''@;'; put 'put ''LCJkaXYiLDM2KSgxLCJkaXYiLDEwNyksdnQoMixpYW4sNSwwKSx2dCgzLG9hbiw1LDApLHRlKCkoKSksMiZuKXtjb25zdCB0PVRlKCk7aWUoMiksX3QodC5nZXRkYXRhRXJyb3I/LTE6MiksaWUoKSxfdCh0LmdldGRhdGFFcnJvcj8zOi0xKX19ZnVuY3Rpb24gc2FuKG4sZSl7aWYoMSZuJiYo''@;'; put 'put ''SigwLCJzcGFuIiksU2UoMSksdGUoKSksMiZuKXtjb25zdCB0PVRlKDMpO2llKCksTmgoIlRvIHVubG9jayBtb3JlIHRoYW4gIix0LmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkLCIgIiwxPT09dC5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZD8i''@;'; put 'put ''cm93Ijoicm93cyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIGxhbihuLGUpe2lmKDEmbiYmKEooMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMTE0KSx2dCgxLHNhbiwyLDIsInNwYW4iKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoMik7aWUoKSxfdCh0''@;'; put 'put ''LnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdz8xOi0xKX19ZnVuY3Rpb24gY2FuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItdG9vbHRpcCIpKDEsImJ1dHRvbiIsMTEyKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3QgaT1UZSgpO3JldHVybiBYZShpLnJl''@;'; put 'put ''c3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdz8iIjppLmFkZFJlY29yZEJ1dHRvbkNsaWNrKCkpfSksSXQoMiwiY2xyLWljb24iLDk2KSxTZSgzLCIgQWRkIFJlY29yZCAiKSx0ZSgpLFluKDQsbGFuLDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsMTEzKSx0ZSgpfWlmKDImbil7Y29uc3QgdD1U''@;'; put 'put ''ZSgpO2llKCksd3IoImRjLWxvY2tlZC1jb250cm9sIix0LnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyl9fWZ1bmN0aW9uIHVhbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiYnV0dG9uIiwxMjIpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoMyku''@;'; put 'put ''YXBwbHlQZW5kaW5nVmFGaWx0ZXIoKSl9KSxTZSgxLCIgQXBwbHkgZmlsdGVyICIpLHRlKCl9aWYoMiZuKXtjb25zdCB0PVRlKDMpO3J0KCJkaXNhYmxlZCIsInBlbmRpbmciIT09dC52YUZpbHRlclN0YXR1cyYmImxvYWRpbmciIT09dC52YUZpbHRlclN0YXR1cyl9fWZ1bmN0aW9uIGRhbihu''@;'; put 'put ''LGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwibGFiZWwiLDExOSkoMSwiaW5wdXQiLDEyMCksd3QoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoMikudG9nZ2xlVmFBdXRvQXBwbHkoKSl9KSx0ZSgpLFNlKDIsIiBBdXRvLWFwcGx5IFZBIGZpbHRlcnMgIiksdGUo''@;'; put 'put ''KSx2dCgzLHVhbiwyLDEsImJ1dHRvbiIsMTIxKX1pZigyJm4pe2NvbnN0IHQ9VGUoMik7aWUoKSxydCgiY2hlY2tlZCIsdC52YUF1dG9BcHBseSksaWUoMiksX3QodC52YUF1dG9BcHBseT8tMTozKX19ZnVuY3Rpb24gaGFuKG4sZSl7MSZuJiYoSigwLCJzcGFuIiwxMTUpLFNlKDEsIiBWQSBm''@;'; put 'put ''aWx0ZXJpbmcgcGF1c2VkIHdoaWxlIGVkaXRpbmcgIiksdGUoKSl9ZnVuY3Rpb24gZmFuKG4sZSl7MSZuJiYoSigwLCJzcGFuIiwxMTcpLFNlKDEsIiBGaWx0ZXIgY2hhbmdlIHBlbmRpbmcgIiksdGUoKSl9ZnVuY3Rpb24gcGFuKG4sZSl7MSZuJiYoSigwLCJzcGFuIiwxMTgpLFNlKDEsIiBM''@;'; put 'put ''b2FkaW5nIGZpbHRlclx1MjAyNiAiKSx0ZSgpKX1mdW5jdGlvbiBnYW4obixlKXtpZigxJm4mJihKKDAsImRpdiIsNDApLHZ0KDEsZGFuLDQsMiksdnQoMixoYW4sMiwwLCJzcGFuIiwxMTUpLEooMywic3BhbiIsMTE2KSx2dCg0LGZhbiwyLDAsInNwYW4iLDExNyksdnQoNSxwYW4sMiwwLCJz''@;'; put 'put ''cGFuIiwxMTgpLHRlKCkoKSksMiZuKXtjb25zdCB0PVRlKCk7aWUoKSxfdCh0LmhvdFRhYmxlLnJlYWRPbmx5PzE6LTEpLGllKCksX3QodC5ob3RUYWJsZS5yZWFkT25seT8tMToyKSxpZSgyKSxfdCgicGVuZGluZyI9PT10LnZhRmlsdGVyU3RhdHVzPzQ6LTEpLGllKCksX3QoImxvYWRpbmci''@;'; put 'put ''PT09dC52YUZpbHRlclN0YXR1cz81Oi0xKX19ZnVuY3Rpb24gbWFuKG4sZSl7aWYoMSZuJiYoSigwLCJwIiw0MSksU2UoMSksSXQoMiwiY29udGFjdC1saW5rIiksdGUoKSksMiZuKXtjb25zdCB0PVRlKCk7aWUoKSxTcigiIFRvIGRpc3BsYXkgbW9yZSB0aGFuICIsdC5saWNlbmNlU3RhdGUu''@;'; put 'put ''dmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCwiIHJvd3MsIGNvbnRhY3QgIil9fWZ1bmN0aW9uIHZhbihuLGUpe2lmKDEmbiYmKEooMCwic3BhbiIsMTI4KSxTZSgxKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoMik7aWUoKSxOaCgiT25seSAiLHQubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9y''@;'; put 'put ''b3dzX2xpbWl0LCIgIiwxPT09dC5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQ/InJvdyI6InJvd3MiLCIgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiBf''@;'; put 'put ''YW4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRpdiIsMTI5KSgxLCJkaXYiLDEzMykoMiwibGFiZWwiLDEzNCksU2UoMywiTWVzc2FnZSIpLHRlKCksSig0LCJ0ZXh0YXJlYSIsMTM1KSxoaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgyKTty''@;'; put 'put ''ZXR1cm4gZmkoby5tZXNzYWdlLGkpfHwoby5tZXNzYWdlPWkpLFhlKGkpfSksdGUoKSgpKCl9aWYoMiZuKXtjb25zdCB0PVRlKDIpO2llKDQpLGRpKCJuZ01vZGVsIix0Lm1lc3NhZ2UpLHJ0KCJkaXNhYmxlZCIsIXQudmFsaWRhdGlvbkRvbmUpKCJ2YWx1ZSIsdC52YWxpZGF0aW9uRG9uZT8i''@;'; put 'put ''IjoiUGxlYXNlIHdhaXQgd2hpbGUgd2UgdmFsaWRhdGUgIit0LmNvbHMubGVuZ3RoKnQubW9kaWZlZFJvd3NJbmRleGVzLmxlbmd0aCsiIGNlbGxzLiIpfX1mdW5jdGlvbiB5YW4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRpdiIsNDIpKDEsImRpdiIsMTIzKSgyLCJkaXYiLDEy''@;'; put 'put ''NCkoMywiZGl2IiwxMjUpKDQsImJ1dHRvbiIsMTI2KSxJdCg1LCJjbHItaWNvbiIsMTI3KSx0ZSgpLEooNiwiaDMiLDkpLFNlKDcpLHRlKCkoKSxKKDgsImRpdiIsMTApLHZ0KDksdmFuLDIsMiwic3BhbiIsMTI4KSx2dCgxMCxfYW4sNSwzLCJkaXYiLDEyOSksdGUoKSxKKDExLCJkaXYiLDEz''@;'; put 'put ''MCkoMTIsImJ1dHRvbiIsMTMxKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3QgaT1UZSgpO3JldHVybiBYZShpLnNhdmVUYWJsZShpLmhvdFRhYmxlLmRhdGEpKX0pLFNlKDEzLCIgU3VibWl0ICIpLHRlKCksSigxNCwiYnV0dG9uIiwxMzIpLHd0KCJjbGljayIsZnVuY3Rpb24o''@;'; put 'put ''KXtZZSh0KTtjb25zdCBpPVRlKCk7cmV0dXJuIGkuY2FuY2VsU3VibWl0KCksaS5zdWJtaXQ9ITEsWGUoaS52YWxpZGF0aW9uRG9uZT0wKX0pLFNlKDE1LCIgQ2FuY2VsICIpLHRlKCkoKSgpKCkoKX1pZigyJm4pe2NvbnN0IHQ9VGUoKTtpZSg3KSxlNCgiIFN1Ym1pdCBmb3IgQXBwcm92YWwg''@;'; put 'put ''KCIsdC5yb3dzQ2hhbmdlZC5yb3dzQWRkZWQsIiBhZGRlZCwgIix0LnJvd3NDaGFuZ2VkLnJvd3NVcGRhdGVkLCIgdXBkYXRlZCwgIix0LnJvd3NDaGFuZ2VkLnJvd3NEZWxldGVkLCIgZGVsZXRlZCkgIiksaWUoMiksX3QodC50b3RhbFJvd3NDaGFuZ2VkPnQubGljZW5jZVN0YXRlLnZhbHVl''@;'; put 'put ''LnN1Ym1pdF9yb3dzX2xpbWl0JiZ0LmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCE9PXQuSW5maW5pdHk/OTotMSksaWUoKSxfdCh0LnRhYmxlVHJ1ZT8xMDotMSksaWUoMikscnQoImRpc2FibGVkIiwhdC52YWxpZGF0aW9uRG9uZSl9fWZ1bmN0aW9uIGJhbihuLGUpe2lm''@;'; put 'put ''KDEmbiYmKEooMCwic3BhbiIsNDgpLFNlKDEpLEFjKDIsInBrU3BhY2VTZXBhcmF0ZSIpLHRlKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdCxyPVRlKCk7aWUoKSxOaCgiIE9uIHJvdyAiLHQrMSwiOiAiLFRkKDIsMixyLnBrRmllbGRzW3RdLnJlcGxhY2UoInwiLCIiKSksIiAiKX19ZnVu''@;'; put 'put ''Y3Rpb24gd2FuKG4sZSl7aWYoMSZuJiYoSigwLCJwIiksU2UoMSksdGUoKSksMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0O2llKCksZTQoIiIsdC5jb2wsIigiLHQubGVuLCIpLCAiLHQudmFsKX19ZnVuY3Rpb24gQ2FuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJkaXYiLDQ5KSgx''@;'; put 'put ''LCJkaXYiLDEzNikoMiwiZGl2IiwxMjQpKDMsImRpdiIsMTI1KSg0LCJidXR0b24iLDEyNiksSXQoNSwiY2xyLWljb24iLDEyNyksdGUoKSxKKDYsImgzIiw5KSxTZSg3LCJFcnJvciIpLHRlKCkoKSxKKDgsImRpdiIsMTApKDksInAiKSxTZSgxMCwiWW91IGNhbm5vdCBzdWJtaXQgZW1wdHkg''@;'; put 'put ''Y2xhdXNlcyIpLHRlKCkoKSxKKDExLCJkaXYiLDI0KSgxMiwiYnV0dG9uIiw0NSksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLm51bGxWYXJpYWJsZXM9ITEpfSksU2UoMTMsIiBPayAiKSx0ZSgpKCkoKSgpKCl9fWZ1bmN0aW9uIFNhbihuLGUpezEmbiYmSXQo''@;'; put 'put ''MCwiYXBwLXF1ZXJ5IixudWxsLDYpfWZ1bmN0aW9uIEVhbihuLGUpezEmbiYmKEooMCwicCIsNjApLFNlKDEsIlNvcnJ5IHRoYXQgZGlkbid0IHdvcmssIHRyeSBhZ2Fpbi4iKSx0ZSgpKX1sZXQgZks9KCgpPT57dmFyIG47Y2xhc3MgZXt1cGRhdGVIb3RUYWJsZVNldHRpbmdzKCl7dGhpcy5o''@;'; put 'put ''b3RUYWJsZVNldHRpbmdzPXtjb2xIZWFkZXJzOnRoaXMuaG90VGFibGUuY29sSGVhZGVycyxjb2x1bW5zOnRoaXMuaG90VGFibGUuY29sdW1ucyxoZWlnaHQ6dGhpcy5ob3RUYWJsZS5oZWlnaHQsbGljZW5zZUtleTp0aGlzLmhvdFRhYmxlLmxpY2Vuc2VLZXkscmVhZE9ubHk6dGhpcy5ob3RU''@;'; put 'put ''YWJsZS5yZWFkT25seSxjb3B5UGFzdGU6dGhpcy5ob3RUYWJsZS5jb3B5UGFzdGUsZm9ybXVsYXM6dGhpcy5ob3RUYWJsZS5mb3JtdWxhcyxjb250ZXh0TWVudTohMCxjbGFzc05hbWU6Imh0RGFyayIsdGhlbWU6Imh0LXRoZW1lLWNsYXNzaWMifX1nZXQgZW1iZWQoKXtyZXR1cm4gVW4uZW1i''@;'; put 'put ''ZWR9Z2V0IGlzVmFFbWJlZCgpe3JldHVybiJ2YSI9PT1Vbi5lbWJlZH1nZXQgdmFBdXRvQXBwbHkoKXtyZXR1cm4iY29uZmlybSIhPT1Vbi52YUFwcGx5TW9kZX1jb25zdHJ1Y3RvcihyLGksbyxhLGwsdSxnLEUsTyxaLGVlLHZlLE1lKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPXIsdGhpcy5ldmVu''@;'; put 'put ''dFNlcnZpY2U9aSx0aGlzLmxvZ2dlclNlcnZpY2U9byx0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1sLHRoaXMucm91dGVyPXUsdGhpcy5yb3V0ZT1nLHRoaXMuc2FzU2VydmljZT1FLHRoaXMuY2RmPU8sdGhpcy5zcHJlYWRzaGVldFNlcnZpY2U9Wix0aGlzLnZh''@;'; put 'put ''TWVzc2FnaW5nPWVlLHRoaXMudmFGaWx0ZXI9dmUsdGhpcy51c2VyU2VydmljZT1NZSx0aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0PW5ldyBrOCx0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9bmV3IGs4LHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9bmV3IGs4LHRoaXMubWVzc2FnZT0i''@;'; put 'put ''Iix0aGlzLiRkYXRhRm9ybWF0cz1udWxsLHRoaXMuY29scz1bXSx0aGlzLnJlc3RyaWN0aW9ucz17fSx0aGlzLmRhdGFzZXRJbmZvPSExLHRoaXMuZHNtZXRhPVtdLHRoaXMudmVyc2lvbnM9W10sdGhpcy5kc05vdGU9IiIsdGhpcy52aWV3Ym94ZXM9ITEsdGhpcy5JbmZpbml0eT0xLzAsdGhp''@;'; put 'put ''cy5ob3RUYWJsZVNldHRpbmdzPXt9LHRoaXMuaG90VGFibGU9e2RhdGE6W10sY29sSGVhZGVyczpbXSxoaWRkZW46ITAsY29sdW1uczpbXSxoZWlnaHQ6ImNhbGMoMTAwdmggLSAxNjBweCkiLGxpY2Vuc2VLZXk6dm9pZCAwLHJlYWRPbmx5OiEwLGZvcm11bGFzOntlbmdpbmU6ZGYsbGljZW5z''@;'; put 'put ''ZUtleToiZ3BsLXYzIn0sY29weVBhc3RlOntjb3B5Q29sdW1uSGVhZGVyczohMCxjb3B5Q29sdW1uSGVhZGVyc09ubHk6ITB9LHNldHRpbmdzOntjb250ZXh0TWVudTp7aXRlbXM6e2VkaXRfcm93OntuYW1lOiJFZGl0IHJvdyIsaGlkZGVuKCl7aWYodGhpcy5nZXRTZXR0aW5ncygpLnJlYWRP''@;'; put 'put ''bmx5KXJldHVybiEwO2NvbnN0IFdlPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKCFXZSlyZXR1cm4hMTtjb25zdCBhdD1XZVswXTtyZXR1cm4gYXQuZnJvbS5yb3chPT1hdC50by5yb3d9LGNhbGxiYWNrOihIZSxXZSxhdCk9Pntjb25zdCBDdD1XZVswXTtDdC5zdGFydC5yb3c9PT1DdC5l''@;'; put 'put ''bmQucm93JiZ0aGlzLmVkaXRSZWNvcmQobnVsbCxDdC5zdGFydC5yb3cpfX0scmV2ZXJ0X2NlbGxzOntuYW1lOiJSZXZlcnQiLGhpZGRlbigpe2lmKHRoaXMuZ2V0U2V0dGluZ3MoKS5yZWFkT25seSlyZXR1cm4hMDtjb25zdCBIZT10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtpZighSGV8fDA9''@;'; put 'put ''PT1IZS5sZW5ndGgpcmV0dXJuITA7Y29uc3QgV2U9dGhpcy5nZXRQbHVnaW4oImNvbW1lbnRzIik7cmV0dXJuIWdxKEhlLHRoaXMuY291bnRSb3dzKCksdGhpcy5jb3VudENvbHMoKSkuc29tZSgoe3JvdzpDdCxjb2w6QXR9KT0+V2UuZ2V0Q29tbWVudEF0Q2VsbChDdCxBdCkpfSxjYWxsYmFj''@;'; put 'put ''azooSGUsV2UpPT57Y29uc3QgYXQ9dGhpcy5ob3RJbnN0YW5jZSxDdD1hdC5nZXRQbHVnaW4oImNvbW1lbnRzIiksQXQ9Z3EoV2UubWFwKEt0PT4oe2Zyb206S3Quc3RhcnQsdG86S3QuZW5kfSkpLGF0LmNvdW50Um93cygpLGF0LmNvdW50Q29scygpKTtmb3IoY29uc3R7cm93Okt0LGNvbDpx''@;'; put 'put ''dH1vZiBBdCl7Y29uc3QgZ249Q3QuZ2V0Q29tbWVudEF0Q2VsbChLdCxxdCk7aWYoIWduKWNvbnRpbnVlO2NvbnN0IFRuPWF0LmNvbFRvUHJvcChxdCksQ249Z24uc2xpY2UoZS5PUklHSU5BTF9WQUxVRV9DT01NRU5UX1BSRUZJWC5sZW5ndGgpLHFyPSJudW1lcmljIj09PXRoaXMuZGNWYWxp''@;'; put 'put ''ZGF0b3I/LmdldFJ1bGUoVG4pPy50eXBlO2F0LnNldERhdGFBdFJvd1Byb3AoS3QsVG4sdFF0KENuLHFyKSwicmV2ZXJ0IiksQ3QucmVtb3ZlQ29tbWVudEF0Q2VsbChLdCxxdCl9fX0sYXBwbHlfYXNfZm9ybXVsYTp7bmFtZToiQXBwbHkgYXMgZm9ybXVsYSIsaGlkZGVuOigpPT57Y29uc3Qg''@;'; put 'put ''SGU9dGhpcy5ob3RJbnN0YW5jZTtpZihIZS5nZXRTZXR0aW5ncygpLnJlYWRPbmx5KXJldHVybiEwO2NvbnN0IFdlPUhlLmdldFNlbGVjdGVkUmFuZ2UoKTtyZXR1cm4hV2V8fDA9PT1XZS5sZW5ndGh8fCFncShXZSxIZS5jb3VudFJvd3MoKSxIZS5jb3VudENvbHMoKSkuc29tZSgoe3JvdzpD''@;'; put 'put ''dCxjb2w6QXR9KT0+e2NvbnN0IEt0PXRoaXMuZGF0YVNvdXJjZVtIZS50b1BoeXNpY2FsUm93KEN0KV07aWYoIUt0KXJldHVybiExO2NvbnN0IHF0PUhlLmNvbFRvUHJvcChBdCk7cmV0dXJuIHhnZSh0aGlzLmF1dG9Fc2NhcGVkQ2VsbHMscXgoS3QsdGhpcy5oZWFkZXJQa3MpLHF0KX0pfSxj''@;'; put 'put ''YWxsYmFjazooSGUsV2UpPT57Y29uc3QgYXQ9dGhpcy5ob3RJbnN0YW5jZSxDdD1ncShXZS5tYXAoQXQ9Pih7ZnJvbTpBdC5zdGFydCx0bzpBdC5lbmR9KSksYXQuY291bnRSb3dzKCksYXQuY291bnRDb2xzKCkpO2Zvcihjb25zdHtyb3c6QXQsY29sOkt0fW9mIEN0KXtjb25zdCBxdD10aGlz''@;'; put 'put ''LmRhdGFTb3VyY2VbYXQudG9QaHlzaWNhbFJvdyhBdCldO2lmKCFxdCljb250aW51ZTtjb25zdCBnbj1hdC5jb2xUb1Byb3AoS3QpLFRuPXF4KHF0LHRoaXMuaGVhZGVyUGtzKTt4Z2UodGhpcy5hdXRvRXNjYXBlZENlbGxzLFRuLGduKSYmKGF0LnNldERhdGFBdFJvd1Byb3AoQXQsZ24sQ3pl''@;'; put 'put ''KGF0LmdldERhdGFBdFJvd1Byb3AoQXQsZ24pKSksU3plKHRoaXMuYXV0b0VzY2FwZWRDZWxscyxUbixnbikpfX19LHJvd19hYm92ZTp7bmFtZToiSW5zZXJ0IFJvdyBhYm92ZSIsaGlkZGVuOigpPT4hMD09PXRoaXMuaG90VGFibGUucmVhZE9ubHksY2FsbGJhY2s6KEhlLFdlLGF0KT0+e3Ro''@;'; put 'put ''aXMuaW5zZXJ0Um93QXRQb3NpdGlvbihXZVswXS5zdGFydC5yb3cpfX0scm93X2JlbG93OntuYW1lOiJJbnNlcnQgUm93IGJlbG93IixoaWRkZW46KCk9PiEwPT09dGhpcy5ob3RUYWJsZS5yZWFkT25seSxjYWxsYmFjazooSGUsV2UsYXQpPT57dGhpcy5pbnNlcnRSb3dBdFBvc2l0aW9uKFdl''@;'; put 'put ''WzBdLnN0YXJ0LnJvdysxKX19LHJlbW92ZV9yb3c6e25hbWU6Iklnbm9yZSByb3ciLGhpZGRlbjooKT0+ITA9PT10aGlzLmhvdFRhYmxlLnJlYWRPbmx5fSxjb3B5OntuYW1lOiJDb3B5IHdpdGhvdXQgaGVhZGVycyJ9LGNvcHlfd2l0aF9jb2x1bW5faGVhZGVyczp7bmFtZToiQ29weSB3aXRo''@;'; put 'put ''IGhlYWRlcnMifSxjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHk6e25hbWU6IkNvcHkgaGVhZGVycyBvbmx5In0sZXhwb3J0X2ZpbGU6dmdlKCgpPT50aGlzLmxpYmRzfHwiZXhwb3J0IiwxKSxzcDE6e25hbWU6Ii0tLS0tLS0tLSIsaGlkZGVuOigpPT4hMD09PXRoaXMuaG90VGFibGUucmVhZE9u''@;'; put 'put ''bHl9LHVuZG86e25hbWU6IlVuZG8iLGhpZGRlbjooKT0+ITA9PT10aGlzLmhvdFRhYmxlLnJlYWRPbmx5fSxyZWRvOntuYW1lOiJSZWRvIixoaWRkZW46KCk9PiEwPT09dGhpcy5ob3RUYWJsZS5yZWFkT25seX0sdG9nZ2xlX2xhYmVsczp7bmFtZTooKT0+dGhpcy51c2VMYWJlbHM/IlNob3cg''@;'; put 'put ''bmFtZXMiOiJTaG93IGxhYmVscyIsY2FsbGJhY2s6KCk9Pnt0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLnJvdXRlLHF1ZXJ5UGFyYW1zOntsYWJlbHM6IXRoaXMudXNlTGFiZWxzfHxudWxsfSxxdWVyeVBhcmFtc0hhbmRsaW5nOiJtZXJnZSJ9KX19fX19fSx0aGlz''@;'; put 'put ''LmhvdENlbGxzUHJvcFJvdz1udWxsLHRoaXMuZmlsdGVyPSExLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLnVwbG9hZExvYWRpbmc9ITEsdGhpcy5yb3dzQ2hhbmdlZD17cm93c1VwZGF0ZWQ6MCxyb3dzRGVsZXRlZDowLHJvd3NBZGRlZDowfSx0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcz1b''@;'; put 'put ''XSx0aGlzLnF1ZXJ5RXJyPSExLHRoaXMuc3VjY2Vzc0VuYWJsZT0hMSx0aGlzLnVzZUxhYmVscz0hMSx0aGlzLm51bGxWYXJpYWJsZXM9ITEsdGhpcy5wa0ZpZWxkcz1bXSx0aGlzLmZpbGVuYW1lPSIiLHRoaXMuc3VibWl0TGltaXROb3RpY2U9ITEsdGhpcy5iYWRFZGl0PSExLHRoaXMudmFG''@;'; put 'put ''aWx0ZXJTdGF0dXM9ImlkbGUiLHRoaXMudmFQZW5kaW5nQ2xhdXNlcz1udWxsLHRoaXMudmFQZW5kaW5nU2lnbmF0dXJlPSIiLHRoaXMudmFBcHBseWluZ0ZpbHRlcj0hMSx0aGlzLnNhdmVMb2FkaW5nPSExLHRoaXMuYXBwcm92ZXJzPVtdLHRoaXMuZXJyVmFsaWRhdGlvbj0hMSx0aGlzLnBr''@;'; put 'put ''TnVsbD0hMSx0aGlzLm5vUGtOdWxsPSExLHRoaXMudGFibGVEYXRhPVtdLHRoaXMucXVlcnlUZXh0PSIiLHRoaXMucXVlcnlUZXh0U2F2ZWQ9IiIsdGhpcy5maWx0ZXJFeHBhbmRlZD0hMSx0aGlzLmZpbHRlck92ZXJmbG93cz0hMSx0aGlzLmZpbHRlck1lYXN1cmVkS2V5PSIiLHRoaXMuc2hv''@;'; put 'put ''d0FwcHJvdmVycz0hMSx0aGlzLnBrRHVwcz0hMSx0aGlzLnZhbGlkYXRpb25Eb25lPTAsdGhpcy5kdXBsaWNhdGVQa0luZGV4ZXM9W10sdGhpcy5jb2x1bW5IZWFkZXI9W10sdGhpcy5zcGVjSW5mbz1bXSx0aGlzLnRvb0xvbmc9ITEsdGhpcy5leGNlZWRDZWxscz1bXSx0aGlzLnVwbG9hZGVy''@;'; put 'put ''PW5ldyBnZ2UsdGhpcy51cGxvYWRVcmw9IiIsdGhpcy5leGNlbEZpbGVSZWFkeT0hMSx0aGlzLnVwbG9hZFByZXZpZXc9ITEsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLHRoaXMuZXhjZWxVcGxvYWRTdGF0ZT1udWxsLHRoaXMuZGF0YT1bXSx0aGlzLmhlYWRlckFycmF5PVtdLHRoaXMuaG90''@;'; put 'put ''RGF0YVNjaGVtYT17fSx0aGlzLmhlYWRlclNob3c9W10sdGhpcy5oZWFkZXJWaXNpYmxlPSExLHRoaXMuaGFzQmFzZURyb3Bab25lT3Zlcj0hMSx0aGlzLmhhc0Fub3RoZXJEcm9wWm9uZU92ZXI9ITEsdGhpcy5oZWFkZXJQa3M9W10sdGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZz0hMSx0''@;'; put 'put ''aGlzLmRhdGVUaW1lSGVhZGVycz1bXSx0aGlzLnRpbWVIZWFkZXJzPVtdLHRoaXMuZGF0ZUhlYWRlcnM9W10sdGhpcy54bFJ1bGVzPVtdLHRoaXMuZW5jb2Rpbmc9IlVURi04Iix0aGlzLmhlYWRlckNvbHVtbnM9W10sdGhpcy5jZWxsVmFsaWRhdGlvbj1bXSx0aGlzLmF1dG9Fc2NhcGVkQ2Vs''@;'; put 'put ''bHM9bmV3IE1hcCx0aGlzLmZpbGVQYXNzd29yZFN1YmplY3Q9bmV3IE1yLHRoaXMuZmlsZVVubG9ja0Vycm9yPSExLHRoaXMuZmlsZVBhc3N3b3JkTW9kYWw9ITEsdGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy5kaXNjYXJkU291cmNlRmlsZT0hMSx0aGlzLm1hbnVhbEZpbGVFZGl0TW9k''@;'; put 'put ''YWw9ITEsdGhpcy5yZWNvcmRBY3Rpb249bnVsbCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3M9W10sdGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycz1bXSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9LTEsdGhpcy5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLHRo''@;'; put 'put ''aXMuZ2VuZXJhdGVkUmVjb3JkVXJsPW51bGwsdGhpcy5hZGRSZWNvcmRVcmw9bnVsbCx0aGlzLnJlY29yZE5ld09yUGtNb2RpZmllZD0hMSx0aGlzLmFkZFJlY29yZExvYWRpbmc9ITEsdGhpcy5zaW5nbGVSb3dTZWxlY3RlZD0hMSx0aGlzLmFkZGluZ05ld1Jvdz0hMSx0aGlzLmdldGRhdGFF''@;'; put 'put ''cnJvcj0hMSx0aGlzLnplcm9GaWx0ZXJSb3dzPSExLHRoaXMudGFibGVGaWxlRHJhZ092ZXI9ITEsdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZT1bXSx0aGlzLnZhbGlkYXRpb25UYWJsZUxpbWl0PTEwMCx0aGlzLnZhbGlkYXRpb25FcG9jaD0wLHRoaXMucGVuZGluZ1NwaW5uZXJDZWxscz1u''@;'; put 'put ''ZXcgU2V0LHRoaXMuYnVsa1ZhbGlkYXRpb249e2FjdGl2ZTohMSxkb25lOjAsdG90YWw6MH0sdGhpcy5jb25maXJtTW9kYWw9e29wZW46ITEsdGl0bGU6IiIsbWVzc2FnZToiIn0sdGhpcy5jb25maXJtTW9kYWxSZXNvbHZlcj1udWxsLHRoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxsVmFs''@;'; put 'put ''aWRhdGlvbk1hcD1bXSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLnRpbWVzQ2xpY2tlZD0wLHRoaXMucGFyc2VSZXN0cmljdGlvbnMoKSx0aGlzLnNldFJlc3RyaWN0aW9ucygpfXBhcnNlUmVzdHJpY3Rpb25zKCl7dGhpcy5yZXN0cmlj''@;'; put 'put ''dGlvbnMucmVzdHJpY3RBZGRSZWNvcmQ9ITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5hZGRSZWNvcmQsdGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RFZGl0UmVjb3JkPSExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdFJlY29yZCx0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmlj''@;'; put 'put ''dEZpbGVVcGxvYWQ9ITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5maWxlVXBsb2FkfXNldFJlc3RyaWN0aW9ucyhyKXtyJiYodGhpcy5yZXN0cmljdGlvbnM9ey4uLnRoaXMucmVzdHJpY3Rpb25zLC4uLnJ9KSx0aGlzLnJlc3RyaWN0aW9ucy5yZW1vdmVFZGl0UmVjb3JkQnV0dG9uJiZk''@;'; put 'put ''ZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5lZGl0X3Jvdyx0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyYmKGRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLnJvd19hYm92ZSxkZWxldGUodGhp''@;'; put 'put ''cy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5yb3dfYmVsb3csZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMucmVtb3ZlX3Jvdyl9Y2hlY2tSb3dMaW1pdCgpe3RoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWd8fHRoaXMu''@;'; put 'put ''bGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQhPT0xLzAmJih0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdz10aGlzLmRhdGFTb3VyY2U/Lmxlbmd0aD49dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCl9cmVzZXRGaWx0ZXIoKXt0''@;'; put 'put ''aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3QuZmlyc3QmJnRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdC5yZXNldEZpbHRlcigpfW9uU2hvd1VwbG9hZE1vZGFsKCl7dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RGaWxlVXBsb2FkP3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRN''@;'; put 'put ''b2RhbCgiRmlsZSBVcGxvYWQiKTp0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnP3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkluZm9ybWF0aW9uIiwiVXBsb2FkIGZlYXR1cmUgaXMgZGlzYWJsZWQgd2hpbGUgQ29sdW1uIExldmVsIFNlY3VyaXR5IHJ1bGVzIGFyZSBhY3Rp''@;'; put 'put ''dmUiKTp0aGlzLnVwbG9hZFByZXZpZXd8fCh0aGlzLnNob3dVcGxvYWRNb2RhbD0hMCl9ZmlsZU92ZXJCYXNlKHIpe3RoaXMuaGFzQmFzZURyb3Bab25lT3Zlcj1yfWF0dGFjaEZpbGUocixpPSExKXt2YXIgbz10aGlzO2NvbnN0IGE9aT9yWzBdOnIudGFyZ2V0LmZpbGVzWzBdO3RoaXMuZXhj''@;'; put 'put ''ZWxVcGxvYWRTdGF0ZT0iTG9hZGluZyIsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSEwLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITEsdGhpcy5maWxlbmFtZT1hLm5hbWUsdGhpcy5zcHJlYWRzaGVldFNlcnZpY2UucGFyc2VFeGNlbEZpbGUoe2ZpbGU6YSx1cGxvYWRlcjp0aGlzLnVwbG9hZGVyLGRj''@;'; put 'put ''VmFsaWRhdG9yOnRoaXMuZGNWYWxpZGF0b3IsaGVhZGVyUGtzOnRoaXMuaGVhZGVyUGtzLGhlYWRlckFycmF5OnRoaXMuaGVhZGVyQXJyYXksaGVhZGVyU2hvdzp0aGlzLmhlYWRlclNob3csdGltZUhlYWRlcnM6dGhpcy50aW1lSGVhZGVycyxkYXRlSGVhZGVyczp0aGlzLmRhdGVIZWFkZXJz''@;'; put 'put ''LGRhdGVUaW1lSGVhZGVyczp0aGlzLmRhdGVUaW1lSGVhZGVycyx4bFJ1bGVzOnRoaXMueGxSdWxlcyxlbmNvZGluZzp0aGlzLmVuY29kaW5nfSxsPT57dGhpcy5hcHBlbmRVcGxvYWRTdGF0ZShsKX0sbD0+e3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIlRhYmxlIEZvdW5kIixs''@;'; put 'put ''KX0pLnRoZW4oZnVuY3Rpb24oKXt2YXIgbD1DcihmdW5jdGlvbioodSl7dSYmKG8uZXhjZWxGaWxlUmVhZHk9ITAsby51cGxvYWRlcj11LnVwbG9hZGVyLHUuZGF0YSYmdS5oZWFkZXJTaG93PyhvLmRhdGE9dS5kYXRhLG8uaGVhZGVyU2hvdz11LmhlYWRlclNob3csby5nZXRQZW5kaW5nRXhj''@;'; put 'put ''ZWxQcmV2aWV3KCkpOnlpZWxkIG8udXBsb2FkUGFyc2VkRmlsZXMoKSl9KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkuY2F0Y2gobD0+e3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsbCxudWxsKSx0aGlzLnNob3dV''@;'; put 'put ''cGxvYWRNb2RhbD0hMSx0aGlzLnVwbG9hZFByZXZpZXc9ITEsc2V0VGltZW91dCgoKT0+e3RoaXMuZmlsZW5hbWU9IiJ9KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITF9KX1zdWJtaXRFeGNlbCgpe3RoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xp''@;'; put 'put ''bWl0PT09MS8wP3RoaXMudXBsb2FkUGFyc2VkRmlsZXMoKTp0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSEwfXVwbG9hZFBhcnNlZEZpbGVzKCl7dmFyIHI9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7aWYoci5jaGVja0ludmFsaWQoKSlyZXR1cm4gdm9pZCByLmV2ZW50U2VydmljZS5zaG93''@;'; put 'put ''QWJvcnRNb2RhbChudWxsLCJJbnZhbGlkIHZhbHVlcyBhcmUgcHJlc2VudC4iKTtpZihyLnZhbGlkYXRlUHJpbWFyeUtleXMoKSwwIT09ci5kdXBsaWNhdGVQa0luZGV4ZXMubGVuZ3RoKXJldHVybiByLnBrRHVwcz0hMCx2b2lkKHIuc3VibWl0PSExKTtyLnBrRHVwcz0hMSxyLnVwbG9hZExv''@;'; put 'put ''YWRpbmc9ITA7Y29uc3QgaT1bXTtmb3IoY29uc3QgbyBvZiByLnVwbG9hZGVyLnF1ZXVlKWkucHVzaCh7ZmlsZTpvLGZpbGVOYW1lOm8ubmFtZX0pO3lpZWxkIHIuc2FzU2VydmljZS51cGxvYWRGaWxlKHIudXBsb2FkVXJsLGkse3RhYmxlOnIubGliZHN9KS50aGVuKG89PntpZih0eXBlb2Yg''@;'; put 'put ''by5hZGFwdGVyUmVzcG9uc2Uuc2FzanNBYm9ydD4idSIpe2lmKHR5cGVvZiBvLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXM+InUiKXJldHVybjt7ci51cGxvYWRMb2FkaW5nPSExO2NvbnN0IGE9by5hZGFwdGVyUmVzcG9uc2Uuc2FzcGFyYW1zWzBdO3Iuc3VjY2Vzc0VuYWJsZT0hMCxyLnRh''@;'; put 'put ''YmxlSWQ9YS5EU0lELHIucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK3IudGFibGVJZCl9fWVsc2V7Y29uc3QgYT1vLmFkYXB0ZXJSZXNwb25zZSxsPWEuc2FzanNBYm9ydFswXS5NU0csdT1hLnNhc2pzQWJvcnRbMF0uTUFDO3IudXBsb2FkTG9hZGluZz0hMSxyLmZpbGVuYW1lPSIi''@;'; put 'put ''LHIuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJihyLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLHIudXBsb2FkZXIucXVldWU9W10sci5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoIiIsbCx7U1lTV0FSTklOR1RFWFQ6YS5T''@;'; put 'put ''WVNXQVJOSU5HVEVYVCxTWVNFUlJPUlRFWFQ6YS5TWVNFUlJPUlRFWFQsTUFDOnUsX1BST0dSQU06YS5fUFJPR1JBTX0pfX0sbz0+e3IudXBsb2FkTG9hZGluZz0hMSxyLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYoci5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRp''@;'; put 'put ''dmVFbGVtZW50LnZhbHVlPSIiKSxyLnVwbG9hZGVyLnF1ZXVlPVtdLHIuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiZmlsZSB1cGxvYWQiLG8uYWRhcHRlclJlc3BvbnNlKX0pfSkoKX1nZXRQZW5kaW5nRXhjZWxQcmV2aWV3KCl7dGhpcy5xdWVyeVRleHRTYXZlZD10aGlzLnF1''@;'; put 'put ''ZXJ5VGV4dCx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IlBhcnNpbmciLHRoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpO2NvbnN0IHI9W107dGhpcy5kYXRhLm1hcChhPT57Y29uc3QgbD17fTt0aGlzLmhlYWRlclNob3cubWFwKCh1LGcpPT57''@;'; put 'put ''bFt1XT1hW2ddfSksbC5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX198fChsLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz0iTm8iKSxsW01tXT0iVSIsci5wdXNoKGwpfSk7Y29uc3QgaT1fcSh0aGlzLmRjVmFsaWRhdG9yPy5nZXREcURldGFpbHMoKT8/W10pO3RoaXMuYXV0''@;'; put 'put ''b0VzY2FwZWRDZWxscz1uZXcgTWFwO2Zvcihjb25zdCBhIG9mIHIpe2NvbnN0IGw9cXgoYSx0aGlzLmhlYWRlclBrcyk7Zm9yKGNvbnN0IHUgb2YgdGhpcy5oZWFkZXJDb2x1bW5zKXtpZihpLmluY2x1ZGVzKHUpfHwheXEodGhpcy5jb2xzLHUpKWNvbnRpbnVlO2NvbnN0e3ZhbHVlOmcsd2Fz''@;'; put 'put ''RXNjYXBlZDpFfT13emUoYVt1XSk7RSYmKGFbdV09ZyxUZ2UodGhpcy5hdXRvRXNjYXBlZENlbGxzLGwsdSkpfX10aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLHRoaXMuZGF0YVNvdXJjZT1yLHRoaXMuaG90VGFi''@;'; put 'put ''bGUuZGF0YT1yO2NvbnN0IG89dGhpcy5ob3RJbnN0YW5jZTt0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IlZhbGlkYXRpbmctSE9UIix0aGlzLnVwZGF0ZVNldHRpbmdzU29ydFNhZmUoe2RhdGE6dGhpcy5kYXRhU291cmNlLG1heFJvd3M6MS8wfSwhMSksby5yZW5kZXIoKSx0aGlzLmFwcGVuZFVw''@;'; put 'put ''bG9hZFN0YXRlKCJWYWxpZGF0aW5nIHJvd3MiKSxvLnZhbGlkYXRlQ2VsbHMoKCk9Pnt0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLnVwbG9hZFByZXZpZXc9ITAsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLHRoaXMuZXhjZWxVcGxvYWRTdGF0ZT1udWxsfSl9ZGlzY2FyZFBlbmRpbmdF''@;'; put 'put ''eGNlbChyKXt0aGlzLnVwZGF0ZVNldHRpbmdzU29ydFNhZmUoe21heFJvd3M6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZH0pLHImJnRoaXMuY2FuY2VsRWRpdCgpLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJ''@;'; put 'put ''bnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLHRoaXMudXBsb2FkUHJldmlldz0hMSx0aGlzLmV4Y2VsRmlsZVJlYWR5PSExLHRoaXMudXBsb2FkZXIucXVldWU9W10saXNOYU4ocGFyc2VJbnQodGhpcy5yb3V0ZXIudXJsLnNwbGl0KCIvIikucG9wKCl8fCIiKSl8''@;'; put 'put ''fHRoaXMucXVlcnlUZXh0U2F2ZWQubGVuZ3RoPjAmJih0aGlzLnF1ZXJ5VGV4dD10aGlzLnF1ZXJ5VGV4dFNhdmVkLHRoaXMucXVlcnlUZXh0U2F2ZWQ9IiIpfXByZXZpZXdUYWJsZUVkaXRDb25maXJtKCl7dGhpcy5kaXNjYXJkUGVuZGluZ0V4Y2VsKCksdGhpcy5jb252ZXJ0VG9Db3JyZWN0''@;'; put 'put ''VHlwZXModGhpcy5kYXRhU291cmNlKSx0aGlzLmVkaXRUYWJsZSghMCl9YXBwZW5kVXBsb2FkU3RhdGUocixpPSExKXt0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdC5maXJzdCYmKGk/dGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdC5maXJzdC5yZXBs''@;'; put 'put ''YWNlTGFzdFN0YXRlKHIpOnRoaXMudXBsb2FkU3RhdGVyQ29tcExpc3QuZmlyc3QuYXBwZW5kU3RhdGUocikpfWlzQ29sUGsocil7cmV0dXJuIHRoaXMuaGVhZGVyUGtzLmluZGV4T2Yocik+LTF9aXNSZWFkb25seUNvbChyKXtyZXR1cm4gdGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShyKT8u''@;'; put 'put ''cmVhZE9ubHl9aXNDb2xIZWFkZXIocil7cmV0dXJuIHRoaXMuaGVhZGVyQXJyYXkuaW5kZXhPZihyLnRvVXBwZXJDYXNlKCkpPi0xfXJlbW92ZVF1ZXJ5KCl7dGhpcy5zYXNTdG9yZVNlcnZpY2UucmVtb3ZlQ2xhdXNlKCl9c2VuZENsYXVzZSgpe3ZhciByPXRoaXM7cmV0dXJuIENyKGZ1bmN0''@;'; put 'put ''aW9uKigpe3Iuc3VibWl0TG9hZGluZz0hMDtsZXQgaT1bXTtjb25zdCBvPVtdO2lmKHR5cGVvZiByLmNsYXVzZXM+InUiKXJldHVybiByLm51bGxWYXJpYWJsZXM9ITAsdm9pZChyLnN1Ym1pdExvYWRpbmc9ITEpO3tjb25zdCBhPXIuY2xhdXNlcy5xdWVyeU9iajtpZihhWzBdLmVsZW1lbnRz''@;'; put 'put ''Lmxlbmd0aDwxKXJldHVybigiaG9tZSI9PT1Vbi5yb290UGFyYW18fCJlZGl0b3IiPT09VW4ucm9vdFBhcmFtKSYmKFVuLmVkaXRvci5maWx0ZXIuY2xhdXNlcz1bXSxVbi5lZGl0b3IuZmlsdGVyLnF1ZXJ5PVtdLFVuLmVkaXRvci5maWx0ZXIuZ3JvdXBMb2dpYz0iIiksdm9pZCByLnJvdXRl''@;'; put 'put ''ci5uYXZpZ2F0ZShbIi9lZGl0b3IvIityLmxpYmRzXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSk7Zm9yKGxldCBsPTA7bDxhLmxlbmd0aDtsKyspe2NvbnN0IHU9YVtsXS5lbGVtZW50cztpPXUuZmlsdGVyKGZ1bmN0aW9uKGcpe3JldHVybiBudWxsPT09Zy52YXJpYWJsZX0p''@;'; put 'put ''LGkubGVuZ3RoJiZvLnB1c2godSl9fWlmKG8ubGVuZ3RoKXJldHVybiByLm51bGxWYXJpYWJsZXM9ITAsdm9pZChyLnN1Ym1pdExvYWRpbmc9ITEpO3RyeXtpZih2b2lkIDAhPT1yLmNsYXVzZXMmJnIubGliZHMpe2NvbnN0IGE9e2dyb3VwTG9naWM6ci5jbGF1c2VzLmdyb3VwTG9naWMsZmls''@;'; put 'put ''dGVyR3JvdXBzOltdfTtyLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaCh1PT57Y29uc3QgZz17ZmlsdGVyQ2xhdXNlczpbXX07dS5lbGVtZW50cy5mb3JFYWNoKEU9PntnLmZpbHRlckNsYXVzZXMucHVzaChyLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKEUpKX0pLGcuY2xhdXNlTG9naWM9dS5j''@;'; put 'put ''bGF1c2VMb2dpYyxhLmZpbHRlckdyb3Vwcy5wdXNoKHIuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoZykpfSk7Y29uc3QgbD1yLnNhc1N0b3JlU2VydmljZS5jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGEpO3lpZWxkIHIuc2FzU3RvcmVTZXJ2aWNlLnNhdmVRdWVyeShyLmxpYmRzLGwpLnRoZW4o''@;'; put 'put ''dT0+e3IucXVlcnlGaWx0ZXI9e2lkOnUucmVzdWx0WzBdLkZJTFRFUl9SSyx0YWJsZTp1LnJlc3VsdFswXS5GSUxURVJfVEFCTEV9LHIucm91dGVyLm5hdmlnYXRlKFsiLyJdLHtza2lwTG9jYXRpb25DaGFuZ2U6ITAscXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSkudGhlbigoKT0+''@;'; put 'put ''ci5yb3V0ZXIubmF2aWdhdGUoWyIvZWRpdG9yLyIrci5xdWVyeUZpbHRlci50YWJsZSsiLyIrci5xdWVyeUZpbHRlci5pZF0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pKSxyLmZpbHRlcj0hMX0pLmNhdGNoKHU9PntyLnN1Ym1pdExvYWRpbmc9ITF9KX19Y2F0Y2goYSl7ci5x''@;'; put 'put ''dWVyeUVycj0hMCxyLnN1Ym1pdExvYWRpbmc9ITEsci5xdWVyeUVyck1lc3NhZ2U9YX19KSgpfW9wZW5RYigpe3RoaXMubGliZHMmJih0aGlzLmZpbHRlcj0hMCx0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5zdWJtaXRMb2FkaW5nPSExLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFF1''@;'; put 'put ''ZXJ5VmFyaWFibGVzKHRoaXMubGliZHMsdGhpcy5jb2xzKSl9Z2V0Q3VycmVudFNvcnRDb25maWdzKCl7Y29uc3Qgcj10aGlzLmhvdEluc3RhbmNlO2lmKCFyKXJldHVybltdO3RyeXtjb25zdCBpPXIuZ2V0UGx1Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKTtyZXR1cm4obj0+QXJyYXkuaXNB''@;'; put 'put ''cnJheShuKT9uOm4/W25dOltdKShpPy5nZXRTb3J0Q29uZmlnKCkpfWNhdGNoe3JldHVybltdfX11cGRhdGVTZXR0aW5nc1NvcnRTYWZlKHIsaSl7Y29uc3Qgbz10aGlzLmhvdEluc3RhbmNlLGE9by5nZXRQbHVnaW4oIm11bHRpQ29sdW1uU29ydGluZyIpLGw9dGhpcy5nZXRDdXJyZW50U29y''@;'; put 'put ''dENvbmZpZ3MoKTtsLmxlbmd0aD4wJiZhLmNsZWFyU29ydCgpLG8udXBkYXRlU2V0dGluZ3MocixpKSxsLmxlbmd0aD4wJiZhLnNvcnQobCl9ZWRpdFRhYmxlKHIsaSl7dGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMCk7Y29uc3Qgbz10aGlzLmhvdEluc3RhbmNlO2lmKCFv''@;'; put 'put ''KXJldHVybjt0aGlzLnZhRGVib3VuY2VUaW1lciYmKGNsZWFyVGltZW91dCh0aGlzLnZhRGVib3VuY2VUaW1lciksdGhpcy52YURlYm91bmNlVGltZXI9dm9pZCAwKTtjb25zdCBhPW8uZ2V0UGx1Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKSxsPXRoaXMuZ2V0Q3VycmVudFNvcnRDb25maWdz''@;'; put 'put ''KCk7c2V0VGltZW91dCgoKT0+e3J8fCh0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLGkmJnRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZC5wb3AoKSx0aGlzLm92ZXJsYXlGb3JtdWxhUmF3VmFsdWVzT25VbmNoYW5n''@;'; put 'put ''ZWQodGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkKSksdGhpcy5ob3RUYWJsZS5yZWFkT25seT0hMSx0aGlzLmhvdFRhYmxlLmRhdGE9dGhpcy5kYXRhU291cmNlLGwubGVuZ3RoPjAmJmEuY2xlYXJTb3J0KCksby51cGRhdGVTZXR0aW5ncyh7cmVhZE9ubHk6dGhpcy5ob3RUYWJsZS5yZWFkT25s''@;'; put 'put ''eX0sITEpLG8ucmVuZGVyKCksdGhpcy5zeW5jT3ZlcndyaXR0ZW5Db21tZW50cygpLGwubGVuZ3RoPjAmJmEuc29ydChsKSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5maXhBcmlhQWNjZXNzaWJpbGl0eSgpfSwxMDApfSwwKX1jb252ZXJ0''@;'; put 'put ''VG9Db3JyZWN0VHlwZXMocil7Zm9yKGNvbnN0IGkgb2Ygcilmb3IoY29uc3QgbyBpbiBpKXtjb25zdCBhPXRoaXMuY29scy5maW5kKGw9PmwuTkFNRT09PW8pO2EmJiIiIT09aVtvXSYmIm51bSI9PT1hLlRZUEUmJiFhLkREVFlQRS5pbmNsdWRlcygiVElNRSIpJiYhYS5ERFRZUEUuaW5jbHVk''@;'; put 'put ''ZXMoIkRBVEUiKSYmKGlbb109cGFyc2VJbnQoaVtvXSkpfX1jYW5jZWxFZGl0KCl7dGhpcy5jYW5jZWxCdWxrVmFsaWRhdGlvbih7cmV2ZXJ0OiExfSksdGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMCksdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZT1bXSx0aGlzLmNsZWFy''@;'; put 'put ''RHVwbGljYXRlVmFsaWRhdGlvbigpO2NvbnN0IHI9dGhpcy5ob3RJbnN0YW5jZSxpPXIuZ2V0UGx1Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKSxvPXRoaXMuZ2V0Q3VycmVudFNvcnRDb25maWdzKCk7aWYoby5sZW5ndGg+MCYmaS5jbGVhclNvcnQoKSx0aGlzLmRhdGFTb3VyY2VVbmNoYW5n''@;'; put 'put ''ZWQpe2NvbnN0IGE9dGhpcy5nZXRGb3JtdWxhQmFzZUNvbHMoKSxsPXIuZ2V0UGx1Z2luKCJjb21tZW50cyIpLHU9KChuLGUsdCxyKT0+e2NvbnN0IGk9W107Zm9yKGxldCBvPTA7bzxuO28rKylmb3IoY29uc3QgYSBvZiBlKXQobyxhKSYmaS5wdXNoKHtyb3dJbmRleDpvLHByb3A6YSx2YWx1''@;'; put 'put ''ZTpyKG8sYSl9KTtyZXR1cm4gaX0pKHRoaXMuZGF0YVNvdXJjZS5sZW5ndGgsYSwoZyxFKT0+ISFsLmdldENvbW1lbnRBdENlbGwoZyxyLnByb3BUb0NvbChFKSksKGcsRSk9PnIuZ2V0RGF0YUF0Um93UHJvcChnLEUpKTt0aGlzLmRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBD''@;'; put 'put ''bG9uZSh0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQpO2Zvcihjb25zdCBnIG9mIHUpdGhpcy5kYXRhU291cmNlW2cucm93SW5kZXhdJiYodGhpcy5kYXRhU291cmNlW2cucm93SW5kZXhdW2cucHJvcF09Zy52YWx1ZSl9dGhpcy5ob3RUYWJsZS5kYXRhPXRoaXMuZGF0YVNvdXJjZSx0aGlzLmhv''@;'; put 'put ''dFRhYmxlLnJlYWRPbmx5PSEwLHIudXBkYXRlU2V0dGluZ3Moe3JlYWRPbmx5OnRoaXMuaG90VGFibGUucmVhZE9ubHksZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSx0aGlzLnN5bmNPdmVyd3JpdHRlbkNvbW1lbnRzKCksdGhpcy5tb2RpZmVkUm93c0luZGV4ZXM9W10sci52YWxpZGF0ZUNl''@;'; put 'put ''bGxzKCksby5sZW5ndGg+MCYmaS5zb3J0KG8pLHRoaXMuY2hlY2tSb3dMaW1pdCgpLHRoaXMuaXNWYUVtYmVkJiZ0aGlzLnZhQXV0b0FwcGx5JiYicGVuZGluZyI9PT10aGlzLnZhRmlsdGVyU3RhdHVzJiZ0aGlzLmFwcGx5UGVuZGluZ1ZhRmlsdGVyKCl9Y2FuY2VsQnVsa1ZhbGlkYXRpb24o''@;'; put 'put ''cj17fSl7Y29uc3QgaT10aGlzLmJ1bGtWYWxpZGF0aW9uLmFjdGl2ZTt0aGlzLnZhbGlkYXRpb25FcG9jaCsrO2NvbnN0IG89dGhpcy5ob3RJbnN0YW5jZTtpZihvJiZ0aGlzLnBlbmRpbmdTcGlubmVyQ2VsbHMuc2l6ZT4wKXtmb3IoY29uc3QgYSBvZiB0aGlzLnBlbmRpbmdTcGlubmVyQ2Vs''@;'; put 'put ''bHMpe2NvbnN0W2wsdV09YS5zcGxpdCgiLCIpLGc9TnVtYmVyKGwpLEU9TnVtYmVyKHUpO28uc2V0Q2VsbE1ldGEoZyxFLCJyZW5kZXJlciIsU2dlKX10aGlzLnBlbmRpbmdTcGlubmVyQ2VsbHMuY2xlYXIoKX10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlPXRoaXMuY2VsbFZhbGlkYXRpb25T''@;'; put 'put ''b3VyY2UuZmlsdGVyKGE9PiFhLnBlbmRpbmd8fGEudmFsdWVzLmxlbmd0aD4wKSx0aGlzLmJ1bGtWYWxpZGF0aW9uPXthY3RpdmU6ITEsZG9uZTowLHRvdGFsOjB9LGkmJnIucmV2ZXJ0JiZvJiZ0aGlzLnVuZG9MYXN0Q2hhbmdlKG8pLG8mJm8ucmVuZGVyKCl9dW5kb0xhc3RDaGFuZ2Uocil7''@;'; put 'put ''Y29uc3QgaT1yLmdldFBsdWdpbigidW5kb1JlZG8iKTtpPy5pc1VuZG9BdmFpbGFibGUoKSYmaS51bmRvKCl9cnVuQnVsa1ZhbGlkYXRpb24ocixpLG8pe3ZhciBhPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe2NvbnN0IGw9bmV3IFNldCx1PVtdLGc9bmV3IFNldDtmb3IoY29uc3QgZWUg''@;'; put 'put ''b2YgaSlmb3IobGV0IHZlPWVlLnN0YXJ0Um93O3ZlPD1lZS5lbmRSb3c7dmUrKylmb3IobGV0IE1lPWVlLnN0YXJ0Q29sO01lPD1lZS5lbmRDb2w7TWUrKyl7bC5hZGQodmUpO2NvbnN0IEhlPXIuY29sVG9Qcm9wKE1lKTthLmRjVmFsaWRhdG9yPy5oYXNEcVJ1bGVzKEhlLFsiSEFSRFNFTEVD''@;'; put 'put ''VF9IT09LIl0pJiYoZy5hZGQoSGUpLHUucHVzaCh7cjp2ZSxjOk1lfSkpfWlmKDA9PT11Lmxlbmd0aClyZXR1cm47aWYoMT09PXUubGVuZ3RoKXtjb25zdHtyOmVlLGM6dmV9PXVbMF07cmV0dXJuIHlpZWxkIGEuZHluYW1pY0NlbGxWYWxpZGF0aW9uKGVlLHZlKSx2b2lkIHIudmFsaWRhdGVS''@;'; put 'put ''b3dzKFsuLi5sXSwoKT0+ci5yZW5kZXIoKSl9aWYodS5sZW5ndGg+Myl7Y29uc3QgZWU9Wy4uLmddLmpvaW4oIiwgIik7aWYoISh5aWVsZCBhLnNob3dDb25maXJtTW9kYWwoYENvbmZpcm0gJHtvfSB2YWxpZGF0aW9uYCxgWW91IGFyZSBhYm91dCB0byB0cmlnZ2VyICR7dS5sZW5ndGh9IGJh''@;'; put 'put ''Y2tlbmQgU0FTIHJlcXVlc3QocykgZm9yIGNvbHVtbnM6ICR7ZWV9LiBEbyB5b3Ugd2lzaCB0byBwcm9jZWVkP2ApKSlyZXR1cm4gdm9pZCBhLnVuZG9MYXN0Q2hhbmdlKHIpfWNvbnN0IEU9YS52YWxpZGF0aW9uRXBvY2g7YS5idWxrVmFsaWRhdGlvbj17YWN0aXZlOiEwLGRvbmU6MCx0b3Rh''@;'; put 'put ''bDp1Lmxlbmd0aH07bGV0IFo9MDt5aWVsZCBQcm9taXNlLmFsbChBcnJheS5mcm9tKHtsZW5ndGg6Mn0sQ3IoZnVuY3Rpb24qKCl7Zm9yKDtaPHUubGVuZ3RoOyl7aWYoRSE9PWEudmFsaWRhdGlvbkVwb2NoKXJldHVybjtjb25zdHtyOmVlLGM6dmV9PXVbWisrXTt5aWVsZCBhLmR5bmFtaWND''@;'; put 'put ''ZWxsVmFsaWRhdGlvbihlZSx2ZSx7c2tpcFJlbmRlcjohMH0pLEU9PT1hLnZhbGlkYXRpb25FcG9jaCYmYS5idWxrVmFsaWRhdGlvbi5kb25lKyt9fSkpKSxFPT09YS52YWxpZGF0aW9uRXBvY2gmJihhLmJ1bGtWYWxpZGF0aW9uPXsuLi5hLmJ1bGtWYWxpZGF0aW9uLGFjdGl2ZTohMX0sci52''@;'; put 'put ''YWxpZGF0ZVJvd3MoWy4uLmxdLCgpPT5yLnJlbmRlcigpKSl9KSgpfXNob3dDb25maXJtTW9kYWwocixpKXtyZXR1cm4gdGhpcy5jb25maXJtTW9kYWw9e29wZW46ITAsdGl0bGU6cixtZXNzYWdlOml9LG5ldyBQcm9taXNlKG89Pnt0aGlzLmNvbmZpcm1Nb2RhbFJlc29sdmVyPW99KX1vbkNv''@;'; put 'put ''bmZpcm1Nb2RhbFJlc3VsdChyKXtjb25zdCBpPXRoaXMuY29uZmlybU1vZGFsUmVzb2x2ZXI7dGhpcy5jb25maXJtTW9kYWxSZXNvbHZlcj1udWxsLHRoaXMuY29uZmlybU1vZGFsPXsuLi50aGlzLmNvbmZpcm1Nb2RhbCxvcGVuOiExfSxpJiZpKHIpfWhvdENsaWNrZWQoKXsxPT09dGhpcy50''@;'; put 'put ''aW1lc0NsaWNrZWQmJnRoaXMuaG90VGFibGUucmVhZE9ubHkmJnRoaXMuZWRpdFRhYmxlKCksMD09PXRoaXMudGltZXNDbGlja2VkJiYodGhpcy50aW1lc0NsaWNrZWQrKyxzZXRUaW1lb3V0KCgpPT57dGhpcy50aW1lc0NsaWNrZWQ9MH0sMjAwKSl9Y2xlYW5FeGNlZWQoKXt0aGlzLmV4Y2Vl''@;'; put 'put ''ZENlbGxzPVtdfWFwcHJvdmVyc1RvZ2dsZSgpe3RoaXMuc2hvd0FwcHJvdmVycz0hdGhpcy5zaG93QXBwcm92ZXJzfWFkZFJvdygpe3RoaXMuYWRkaW5nTmV3Um93PSEwLHNldFRpbWVvdXQoKCk9Pntjb25zdCByPXRoaXMuaG90SW5zdGFuY2UsaT10aGlzLmRhdGFTb3VyY2UubGVuZ3RoO3Iu''@;'; put 'put ''YWx0ZXIoImluc2VydF9yb3dfYmVsb3ciLGktMSwxKSx0aGlzLmRhdGFTb3VyY2VbaV0mJih0aGlzLmRhdGFTb3VyY2VbaV0ubm9MaW5rT3B0aW9uPSEwKSx0aGlzLnNlZWRGb3JtdWxhVmFsdWVzRm9yUm93KGkpLHRoaXMudXBkYXRlRWRpdFN0YXR1c0ZvclJvdyhpKSxyLnNlbGVjdENlbGwo''@;'; put 'put ''aSwwKSxyLnJlbmRlcigpLHRoaXMuYWRkaW5nTmV3Um93PSExLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpfSl9aW5zZXJ0Um93QXRQb3NpdGlvbihyKXtjb25zdCBpPXRoaXMuaG90SW5zdGFuY2U7dGhpcy5hZGRpbmdOZXdSb3c9ITAsaS5hbHRlcigiaW5zZXJ0X3Jvd19hYm92''@;'; put 'put ''ZSIsciwxKSx0aGlzLmFkZGluZ05ld1Jvdz0hMSx0aGlzLmRhdGFTb3VyY2Vbcl0ubm9MaW5rT3B0aW9uPSEwLHRoaXMuc2VlZEZvcm11bGFWYWx1ZXNGb3JSb3cociksdGhpcy51cGRhdGVFZGl0U3RhdHVzRm9yUm93KHIpLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpfXNlZWRG''@;'; put 'put ''b3JtdWxhVmFsdWVzRm9yUm93KHIpe2NvbnN0IGk9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEZXRhaWxzKCk7aWYoIWl8fCEobj0+bi5zb21lKGU9PiJIQVJERk9STVVMQSI9PT1lLlJVTEVfVFlQRXx8IlNPRlRGT1JNVUxBIj09PWUuUlVMRV9UWVBFKSkoaSkpcmV0dXJuO2NvbnN0IG89dGhp''@;'; put 'put ''cy5ob3RJbnN0YW5jZSxhPXRoaXMudXNlclNlcnZpY2UudXNlcj8udXNlcm5hbWU/PyIiLGw9aS5maWx0ZXIodT0+IkhBUkRGT1JNVUxBIj09PXUuUlVMRV9UWVBFfHwiU09GVEZPUk1VTEEiPT09dS5SVUxFX1RZUEUpO2Zvcihjb25zdCB1IG9mIGwpe2NvbnN0IGc9dXplKHUuUlVMRV9WQUxV''@;'; put 'put ''RSx7Y29sdW1uTmFtZXM6dGhpcy5oZWFkZXJDb2x1bW5zLHJvd0luZGV4OnIsdXNlck5hbWU6YSxvcmlnVmFsdWU6dm9pZCAwfSk7by5zZXREYXRhQXRSb3dQcm9wKHIsdS5CQVNFX0NPTCxnKX19Z2V0Rm9ybXVsYUJhc2VDb2xzKCl7Y29uc3Qgcj10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURl''@;'; put 'put ''dGFpbHMoKTtyZXR1cm4gcj9kemUocik6W119b3ZlcmxheUZvcm11bGFSYXdWYWx1ZXNPblVuY2hhbmdlZChyKXtjb25zdCBpPXRoaXMuZ2V0Rm9ybXVsYUJhc2VDb2xzKCk7MD09PWkubGVuZ3RofHwhdGhpcy5kYXRhU291cmNlUmF3fHxyLmZvckVhY2goKG8sYSk9Pntjb25zdCBsPXRoaXMu''@;'; put 'put ''ZGF0YVNvdXJjZVJhd1thXTtpZihsKWZvcihjb25zdCB1IG9mIGkpe2NvbnN0IGc9bFt1XTtudWxsPT1nfHwiIj09PWd8fChvW3VdPWcpfX0pfWdldFJldmVydGFibGVDb2x1bW5OYW1lcygpe2NvbnN0IHI9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEZXRhaWxzKCk7cmV0dXJuIHI/KChuLGUp''@;'; put 'put ''PT57Y29uc3QgdD1uZXcgU2V0KGR6ZShuKSkscj1uZXcgU2V0KG4uZmlsdGVyKGk9PigiSEFSREZPUk1VTEEiPT09aS5SVUxFX1RZUEV8fCJTT0ZURk9STVVMQSI9PT1pLlJVTEVfVFlQRSkmJiF0LmhhcyhpLkJBU0VfQ09MKSkubWFwKGk9PmkuQkFTRV9DT0wpKTtyZXR1cm4gZS5maWx0ZXIo''@;'; put 'put ''aT0+aSE9PV9nZS5kYXRhJiYiRGVsZXRlPyIhPT1pJiZpIT09TW0mJiFyLmhhcyhpKSl9KShyLHRoaXMuaGVhZGVyQ29sdW1ucyk6W119c3luY092ZXJ3cml0dGVuQ29tbWVudEZvckNlbGwocixpKXtjb25zdCBvPXRoaXMuaG90SW5zdGFuY2UsYT10aGlzLmRhdGFTb3VyY2Vbcl07aWYoIWF8''@;'; put 'put ''fCF0aGlzLmRhdGFTb3VyY2VSYXcpcmV0dXJuO2NvbnN0IGw9dGhpcy5kYXRhU291cmNlUmF3LmZpbmQodmU9PnRoaXMuaGVhZGVyUGtzLmV2ZXJ5KE1lPT52ZVtNZV09PT1hW01lXSkpO2lmKCFsKXJldHVybjtjb25zdCB1PW8udG9WaXN1YWxSb3cocik7aWYobnVsbD09PXUpcmV0dXJuO2Nv''@;'; put 'put ''bnN0IGc9by5wcm9wVG9Db2woaSksRT1vLmdldFBsdWdpbigiY29tbWVudHMiKSxPPW8uZ2V0RGF0YUF0Um93UHJvcCh1LGkpLFo9ISFFLmdldENvbW1lbnRBdENlbGwodSxnKSxlZT0oKG4sZSx0KT0+bnVsbCE9ZSYmIiIhPT1lJiZTdHJpbmcoZSkhPT1TdHJpbmcobik/dD8ibm9uZSI6InNl''@;'; put 'put ''dCI6dD8icmVtb3ZlIjoibm9uZSIpKE8sbFtpXSxaKTsic2V0Ij09PWVlP0Uuc2V0Q29tbWVudEF0Q2VsbCh1LGcsYCR7ZS5PUklHSU5BTF9WQUxVRV9DT01NRU5UX1BSRUZJWH0ke2xbaV19YCk6InJlbW92ZSI9PT1lZSYmRS5yZW1vdmVDb21tZW50QXRDZWxsKHUsZyl9c3luY092ZXJ3cml0''@;'; put 'put ''dGVuQ29tbWVudHMoKXtjb25zdCByPXRoaXMuZ2V0UmV2ZXJ0YWJsZUNvbHVtbk5hbWVzKCk7MD09PXIubGVuZ3RofHwhdGhpcy5kYXRhU291cmNlUmF3fHx0aGlzLmRhdGFTb3VyY2UuZm9yRWFjaCgoaSxvKT0+e2Zvcihjb25zdCBhIG9mIHIpdGhpcy5zeW5jT3ZlcndyaXR0ZW5Db21tZW50''@;'; put 'put ''Rm9yQ2VsbChvLGEpfSl9bWFya092ZXJ3cml0dGVuQ2VsbHMoKXt0aGlzLnN5bmNPdmVyd3JpdHRlbkNvbW1lbnRzKCk7Y29uc3Qgcj10aGlzLmhvdEluc3RhbmNlLGk9dGhpcy5nZXRSZXZlcnRhYmxlQ29sdW1uTmFtZXMoKTtpZigwPT09aS5sZW5ndGh8fCF0aGlzLmRhdGFTb3VyY2VSYXcp''@;'; put 'put ''cmV0dXJuO2NvbnN0IGE9KChuLGUsdCxyKT0+e2NvbnN0IGk9W107cmV0dXJuIG4uZm9yRWFjaCgobyxhKT0+e2NvbnN0IGw9ZS5maW5kKHU9PnIuZXZlcnkoZz0+dVtnXT09PW9bZ10pKTtpZihsKWZvcihjb25zdCB1IG9mIHQpe2NvbnN0IGc9bFt1XTtpZihudWxsPT1nfHwiIj09PWcpY29u''@;'; put 'put ''dGludWU7Y29uc3QgRT1vW3VdO1N0cmluZyhnKSE9PVN0cmluZyhFKSYmaS5wdXNoKHtyb3dJbmRleDphLGNvbDp1LG9yaWdpbmFsVmFsdWU6Z30pfX0pLGl9KSh0aGlzLmRhdGFTb3VyY2UubWFwKCh1LGcpPT4oey4uLnUsLi4uT2JqZWN0LmZyb21FbnRyaWVzKGkubWFwKEU9PltFLHIuZ2V0''@;'; put 'put ''RGF0YUF0Um93UHJvcChnLEUpXSkpfSkpLHRoaXMuZGF0YVNvdXJjZVJhdyxpLHRoaXMuaGVhZGVyUGtzKSxsPW5ldyBTZXQoYS5tYXAodT0+dS5yb3dJbmRleCkpO2wuc2l6ZT4wJiZzZXRUaW1lb3V0KCgpPT57Zm9yKGNvbnN0IHUgb2YgbClyLnNldERhdGFBdFJvd1Byb3AodSxNbSwiTSIs''@;'; put 'put ''ImVkaXRTdGF0dXMiKX0sMCl9cmVzb2x2ZVBrRm9ybXVsYVNlZWRWYWx1ZXMoKXtjb25zdCByPXRoaXMuaG90SW5zdGFuY2UsaT1fcSh0aGlzLmRjVmFsaWRhdG9yPy5nZXREcURldGFpbHMoKT8/W10pLG89dGhpcy5oZWFkZXJQa3MuZmlsdGVyKGE9PmkuaW5jbHVkZXMoYSkpOzAhPT1vLmxl''@;'; put 'put ''bmd0aCYmc2V0VGltZW91dCgoKT0+e3RoaXMuZGF0YVNvdXJjZS5mb3JFYWNoKChhLGwpPT57Zm9yKGNvbnN0IHUgb2Ygbyl7Y29uc3QgZz1yLmdldERhdGFBdFJvd1Byb3AobCx1KTtyLnNldERhdGFBdFJvd1Byb3AobCx1LGcsInJlc29sdmVQa0Zvcm11bGEiKTtjb25zdCBFPXRoaXMuZGF0''@;'; put 'put ''YVNvdXJjZVVuY2hhbmdlZD8uW2xdO0UmJihFW3VdPWcpfX0pfSwwKX11cGRhdGVFZGl0U3RhdHVzRm9yUm93KHIpe2NvbnN0IGk9dGhpcy5kYXRhU291cmNlW3JdO2lmKCFpKXJldHVybjtjb25zdCBvPXVLKGksdGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkPz90aGlzLmRhdGFTb3VyY2UsdGhp''@;'; put 'put ''cy5oZWFkZXJQa3MpLGE9dGhpcy5ob3RJbnN0YW5jZS50b1Zpc3VhbFJvdyhyKTtudWxsIT09YSYmdGhpcy5ob3RJbnN0YW5jZS5zZXREYXRhQXRSb3dQcm9wKGEsTW0sbywiZWRpdFN0YXR1cyIpfWNhbmNlbFN1Ym1pdCgpe3RoaXMuZGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVl''@;'; put 'put ''cENsb25lKHRoaXMuZGF0YVNvdXJjZUJlZm9yZVN1Ym1pdCksdGhpcy5kYXRhU291cmNlQmVmb3JlU3VibWl0PVtdLHRoaXMuaG90VGFibGUuZGF0YT10aGlzLmRhdGFTb3VyY2U7Y29uc3Qgcj10aGlzLmhvdEluc3RhbmNlO3RoaXMudXBkYXRlU2V0dGluZ3NTb3J0U2FmZSh7ZGF0YTp0aGlz''@;'; put 'put ''LmRhdGFTb3VyY2UsY29sSGVhZGVyczpnQSh0aGlzLmhlYWRlckNvbHVtbnMsdGhpcy5jb2xzLHRoaXMudXNlTGFiZWxzKSxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oaSxvKXtyZXR1cm4gMD09PW8/NjA6aT41MDA/NTAwOml9fSwhMSksci5z''@;'; put 'put ''ZWxlY3RDZWxsKDAsMCksci5yZW5kZXIoKSxyLnZhbGlkYXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcyksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCl9Z2V0Um93c1N1Ym1pdHRpbmdDb3VudCgpe3RoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLmRlYnVnJiYo''@;'; put 'put ''dGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmRhdGFTb3VyY2UpLHRoaXMubG9nZ2VyU2VydmljZS5sb2codGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkKSk7bGV0IHI9MCxpPTAsbz0wO3RoaXMubW9kaWZlZFJvd3NJbmRleGVzPVtdLHRoaXMuZGF0YU1vZGlmaWVkPVtdO2ZvcihsZXQgYT0w''@;'; put 'put ''O2E8dGhpcy5kYXRhU291cmNlLmxlbmd0aDthKyspe2NvbnN0IGw9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbYV0pO3N3aXRjaCh1SyhsLHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZCx0aGlzLmhlYWRlclBrcykpe2Nhc2UiRCI6dGhpcy5kYXRhTW9kaWZp''@;'; put 'put ''ZWQucHVzaChsKSxpKys7YnJlYWs7Y2FzZSJBIjp0aGlzLmRhdGFNb2RpZmllZC5wdXNoKGwpLHRoaXMubW9kaWZlZFJvd3NJbmRleGVzLnB1c2goYSksbysrO2JyZWFrO2Nhc2UiTSI6dGhpcy5kYXRhTW9kaWZpZWQucHVzaChsKSx0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcy5wdXNoKGEpLHIr''@;'; put 'put ''K319dGhpcy5yb3dzQ2hhbmdlZD17cm93c1VwZGF0ZWQ6cixyb3dzRGVsZXRlZDppLHJvd3NBZGRlZDpvfX1jbGVhckR1cGxpY2F0ZVZhbGlkYXRpb24oKXtjb25zdCByPXRoaXMuaG90SW5zdGFuY2U7Zm9yKGNvbnN0IGkgb2YgdGhpcy5kdXBsaWNhdGVQa0luZGV4ZXMpZm9yKGxldCBvPTE7''@;'; put 'put ''bzw9dGhpcy5yZWFkT25seUZpZWxkcztvKyspe3IucmVtb3ZlQ2VsbE1ldGEoaSxvLCJ2YWxpZCIpLHIucmVtb3ZlQ2VsbE1ldGEoaSxvLCJkdXBLZXkiKTtjb25zdCBhPXIuZ2V0Q2VsbE1ldGEoaSxvKTtpZihhLmNsYXNzTmFtZSl7bGV0IGw7bD1BcnJheS5pc0FycmF5KGEuY2xhc3NOYW1l''@;'; put 'put ''KT9hLmNsYXNzTmFtZS5maWx0ZXIodT0+ImRjLWludmFsaWQtY2VsbCIhPT11KS5qb2luKCIgIik6YS5jbGFzc05hbWUucmVwbGFjZSgiZGMtaW52YWxpZC1jZWxsIiwiIikudHJpbSgpLHIuc2V0Q2VsbE1ldGEoaSxvLCJjbGFzc05hbWUiLGwpfX10aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcz1b''@;'; put 'put ''XSxyLnJlbmRlcigpfXZhbGlkYXRlUHJpbWFyeUtleXMoKXtjb25zdCByPXRoaXMuaG90SW5zdGFuY2U7dGhpcy5jbGVhckR1cGxpY2F0ZVZhbGlkYXRpb24oKTtjb25zdCBpPXRoaXMuZGF0YVNvdXJjZTt0aGlzLnBrRmllbGRzPVtdO2ZvcihsZXQgbD0wO2w8aS5sZW5ndGg7bCsrKXtsZXQg''@;'; put 'put ''dT0iIjtmb3IobGV0IGc9MTtnPHRoaXMucmVhZE9ubHlGaWVsZHMrMTtnKyspdT11KyJ8IisoaVtsXVt0aGlzLmhlYWRlckNvbHVtbnNbZ11dfHwiIik7dGhpcy5wa0ZpZWxkcy5wdXNoKHUpfWNvbnN0IG89W107aWYodGhpcy5wa0ZpZWxkcy5sZW5ndGg+MClmb3IobGV0IGw9MDtsPHRoaXMu''@;'; put 'put ''cGtGaWVsZHMubGVuZ3RoO2wrKylmb3IobGV0IHU9MDt1PHRoaXMucGtGaWVsZHMubGVuZ3RoO3UrKyl0aGlzLnBrRmllbGRzW2xdPT09dGhpcy5wa0ZpZWxkc1t1XSYmdSE9PWwmJiJ8IiE9PXRoaXMucGtGaWVsZHNbbF0mJm8ucHVzaCh1KTtmb3IobGV0IGw9MDtsPGkubGVuZ3RoO2wrKylm''@;'; put 'put ''b3IobGV0IHU9MDt1PHRoaXMuaGVhZGVyQ29sdW1ucy5sZW5ndGg7dSsrKXtjb25zdCBnPXIuZ2V0Q2VsbE1ldGEobCx1KTtnJiYoZy52YWxpZD0hMCxnLmR1cEtleT0hMSl9Zm9yKGxldCBsPTA7bDxvLmxlbmd0aDtsKyspZm9yKGxldCB1PTE7dTx0aGlzLnJlYWRPbmx5RmllbGRzKzE7dSsr''@;'; put 'put ''KXIuc2V0Q2VsbE1ldGEob1tsXSx1LCJ2YWxpZCIsITEpLHIuc2V0Q2VsbE1ldGEob1tsXSx1LCJkdXBLZXkiLCEwKSxyLnNldENlbGxNZXRhKG9bbF0sdSwiY2xhc3NOYW1lIiwiZGMtaW52YWxpZC1jZWxsIik7dGhpcy5kdXBsaWNhdGVQa0luZGV4ZXM9Wy4uLm5ldyBTZXQoby5zb3J0KCkp''@;'; put 'put ''XSxyLnJlbmRlcigpfXJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMocj0hMSxpKXtjb25zdCBvPXRoaXMuaG90SW5zdGFuY2U7Zm9yKGNvbnN0IGEgb2YgdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZSl7Y29uc3QgbD1hLnZhbHVlcy5tYXAodT0+dS5SQVdfVkFMVUUpO28uYmF0Y2goKCk9Pntj''@;'; put 'put ''b25zdCB1PW8uZ2V0Q2VsbE1ldGEoYS5yb3csYS5jb2wpLGc9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZSh1LmRhdGF8fCIiKTtsZXQgRTtnJiYoRT10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNlKGcpKSxFfHwoRT1bXSk7Y29uc3QgTz1bLi4ubmV3IFNldChbLi4uRSwu''@;'; put 'put ''Li5sXSldO3RoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoYS5jb2wse3NvdXJjZTpPfSksby5zZXRDZWxsTWV0YShhLnJvdyxhLmNvbCwic291cmNlIixPKSxhLnZhbHVlcy5sZW5ndGg+MCYmKG8uc2V0Q2VsbE1ldGEoYS5yb3csYS5jb2wsInJlbmRlcmVyIiwi''@;'; put 'put ''YXV0b2NvbXBsZXRlIiksby5zZXRDZWxsTWV0YShhLnJvdyxhLmNvbCwiZWRpdG9yIiwiYXV0b2NvbXBsZXRlLmN1c3RvbSIpLG8uc2V0Q2VsbE1ldGEoYS5yb3csYS5jb2wsInN0cmljdCIsYS5zdHJpY3QpLG8uc2V0Q2VsbE1ldGEoYS5yb3csYS5jb2wsImZpbHRlciIsITEpLHRoaXMuY3Vy''@;'; put 'put ''cmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoYS5jb2wse3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVkaXRvcjoiYXV0b2NvbXBsZXRlLmN1c3RvbSIsc3RyaWN0OmEuc3RyaWN0LGZpbHRlcjohMX0pKSx0aGlzLnJlU2V0RXh0ZW5kZWRDZWxsVmFsaWRhdGlvblZhbHVlcyhh''@;'; put 'put ''LHZvaWQgMCxyLGkpLG8ucmVuZGVyKCl9KX19cmVTZXRFeHRlbmRlZENlbGxWYWxpZGF0aW9uVmFsdWVzKHIsaSxvPSExLGEpe2lmKHIpe2l8fChpPXIucm93KTtjb25zdCB1PXRoaXMuZ2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShyKTtyZXR1cm4gdm9pZCB0aGlzLnNldEV4dGVuZGVk''@;'; put 'put ''VmFsdWVzVG9DZWxscyhyLGksdSxvLGEpfWZvcihjb25zdCB1IG9mIHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Upe2NvbnN0IGc9dGhpcy5nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKHUpO3RoaXMuc2V0RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKHUsdS5yb3csZyxvLGEpfX1zZXRFeHRl''@;'; put 'put ''bmRlZFZhbHVlc1RvQ2VsbHMocixpLG8sYT0hMSxsKXtjb25zdCB1PXRoaXMuaG90SW5zdGFuY2UsZz1bXTtmb3IoY29uc3QgRSBvZiBvKWcuaW5kZXhPZihFLkVYVFJBX0NPTF9OQU1FKTwwJiZnLnB1c2goRS5FWFRSQV9DT0xfTkFNRSk7Zm9yKGNvbnN0IEUgb2YgZyl7Y29uc3QgTz1vLmZp''@;'; put 'put ''bHRlcihDdD0+Q3QuRVhUUkFfQ09MX05BTUU9PT1FKTtsZXQgWj1PLm1hcChDdD0+IkMiPT09Q3QuRElTUExBWV9UWVBFP0N0LlJBV19WQUxVRV9DSEFSOkN0LlJBV19WQUxVRV9OVU0pO2NvbnN0IGVlPXUucHJvcFRvQ29sKEUpO3RoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRh''@;'; put 'put ''dGlvbk1hcC5maW5kKEN0PT5DdC5yb3c9PT1pJiZDdC5jb2w9PT1lZSl8fHRoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRhdGlvbk1hcC5wdXNoKHtyb3c6aSxjb2w6ZWUsYWN0aXZlOiExfSksdS5zZXRDZWxsTWV0YShpLGVlLCJyZW5kZXJlciIsImF1dG9jb21wbGV0ZSIpLHUu''@;'; put 'put ''c2V0Q2VsbE1ldGEoaSxlZSwiZWRpdG9yIiwiYXV0b2NvbXBsZXRlLmN1c3RvbSIpLHUuc2V0Q2VsbE1ldGEoaSxlZSwic3RyaWN0IixyLnN0cmljdCksdS5zZXRDZWxsTWV0YShpLGVlLCJmaWx0ZXIiLCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGVl''@;'; put 'put ''LHtyZW5kZXJlcjoiYXV0b2NvbXBsZXRlIixlZGl0b3I6ImF1dG9jb21wbGV0ZS5jdXN0b20iLHN0cmljdDpyLnN0cmljdCxmaWx0ZXI6ITF9KTtjb25zdCBNZT11LmdldENlbGxNZXRhKGksZWUpLEhlPXRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoTWUuZGF0YXx8IiIpO2xldCBXZTtIZSYm''@;'; put 'put ''KFdlPXRoaXMuZGNWYWxpZGF0b3I/LmdldERxRHJvcGRvd25Tb3VyY2UoSGUpKSxXZXx8KFdlPVtdKSwibnVtZXJpYyI9PT1IZT8udHlwZT8oV2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhXZSwibnVtYmVyIiksWj10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFy''@;'; put 'put ''cmF5VmFsdWVzKFosIm51bWJlciIpKTooV2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhXZSwic3RyaW5nIiksWj10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKFosInN0cmluZyIpKTtjb25zdCBhdD1bLi4ubmV3IFNldChbLi4uV2UsLi4uWl0p''@;'; put 'put ''XTtpZih1LnNldENlbGxNZXRhKGksZWUsInNvdXJjZSIsYXQpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoZWUse3NvdXJjZTphdH0pLGEpe2lmKGwmJmwhPT1pKXJldHVybjtjb25zdCBDdD1PLmZpbmQoQXQ9PjE9PT1BdC5GT1JDRURfVkFMVUUpO0N0JiZz''@;'; put 'put ''ZXRUaW1lb3V0KCgpPT57dS5zZXREYXRhQXRDZWxsKGksZWUsIkMiPT09Q3QuRElTUExBWV9UWVBFP0N0LlJBV19WQUxVRV9DSEFSOkN0LlJBV19WQUxVRV9OVU0sImZvcmNlX2NlbGxfdmFsaWRhdGlvbl92YWx1ZSIpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD09PWkmJih0aGlzLmRh''@;'; put 'put ''dGFTb3VyY2VbdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4XVtFXT0iQyI9PT1DdC5ESVNQTEFZX1RZUEU/Q3QuUkFXX1ZBTFVFX0NIQVI6Q3QuUkFXX1ZBTFVFX05VTSl9KX19fWdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUocixpKXtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2UuZ2V0''@;'; put 'put ''RGF0YUF0Q2VsbChpfHxyLnJvdyxyLmNvbCksbD0oci52YWx1ZXMuZmluZCh1PT51LlJBV19WQUxVRT09PWEpfHx7fSkuRElTUExBWV9JTkRFWDtyZXR1cm4gci5leHRlbmRlZF92YWx1ZXM/LmZpbHRlcih1PT51LkRJU1BMQVlfSU5ERVg9PT1sKXx8W119Y2hlY2tTYXZlKCl7aWYodGhpcy5n''@;'; put 'put ''ZXRSb3dzU3VibWl0dGluZ0NvdW50KCksMD09PXRoaXMucm93c0NoYW5nZWQucm93c0FkZGVkJiYwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dzVXBkYXRlZCYmMD09PXRoaXMucm93c0NoYW5nZWQucm93c0RlbGV0ZWQpcmV0dXJuIHRoaXMuYmFkRWRpdFRpdGxlPSJObyBjaGFuZ2VzIHRvIHN1''@;'; put 'put ''Ym1pdCIsdGhpcy5iYWRFZGl0Q2F1c2U9IlBsZWFzZSBtb2RpZnkgc29tZSB2YWx1ZXMgYW5kIHRyeSBhZ2Fpbi4iLHZvaWQodGhpcy5iYWRFZGl0PSEwKTtjb25zdCByPXRoaXMuaG90SW5zdGFuY2U7dGhpcy5kYXRhU291cmNlQmVmb3JlU3VibWl0PXRoaXMuaGVscGVyU2VydmljZS5kZWVw''@;'; put 'put ''Q2xvbmUodGhpcy5kYXRhU291cmNlKTtmb3IobGV0IGk9MDtpPHRoaXMuZGF0YVNvdXJjZS5sZW5ndGg7aSsrKWRlbGV0ZSB0aGlzLmRhdGFTb3VyY2VbaV0ubm9MaW5rT3B0aW9uO2Zvcig7dGhpcy5kYXRhU291cmNlLmxlbmd0aD4wOyl7Y29uc3QgaT10aGlzLmRhdGFTb3VyY2VbdGhpcy5k''@;'; put 'put ''YXRhU291cmNlLmxlbmd0aC0xXTtpZighT2JqZWN0LmtleXMoaSkuZXZlcnkoYT0+Il9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyI9PT1hfHxhPT09TW18fCFpW2FdfHwiIj09PWlbYV0pKWJyZWFrO3RoaXMuZGF0YVNvdXJjZS5wb3AoKX1pZih0aGlzLnVwZGF0ZVNldHRpbmdzU29y''@;'; put 'put ''dFNhZmUoe2RhdGE6dGhpcy5kYXRhU291cmNlLGNvbEhlYWRlcnM6Z0EodGhpcy5oZWFkZXJDb2x1bW5zLHRoaXMuY29scyx0aGlzLnVzZUxhYmVscyksY29sdW1uczp0aGlzLmNlbGxWYWxpZGF0aW9uLG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKGksbyl7cmV0dXJuIGk+NTAwPzUwMDppfX0s''@;'; put 'put ''ITEpLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpLGUuY250PTAsZS5ub25Qa0NudD0wLHRoaXMudmFsaWRhdGVQcmltYXJ5S2V5cygpLDAhPT10aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcy5sZW5ndGgpcmV0dXJuIHRoaXMucGtEdXBzPSEwLHRoaXMuc3VibWl0PSExLHZvaWQgdGhp''@;'; put 'put ''cy5jYW5jZWxTdWJtaXQoKTt0aGlzLnBrRHVwcz0hMSxyLnZhbGlkYXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcywoKT0+e3RoaXMuY2hlY2tJbnZhbGlkKCk/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiVmFsaWRhdGlvbiBlcnJvciIsIkludmFsaWQgVmFsdWVzIGFy''@;'; put 'put ''ZSBQcmVzZW50Iik6KHRoaXMuc3VibWl0PSEwLHRoaXMudmFsaWRhdGlvbkRvbmU9MSxzZXRUaW1lb3V0KCgpPT57Y29uc3QgaT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm9ybUZpZWxkc184Iik7aSYmaS5mb2N1cygpfSwyMDApKX0pfXNhdmVUYWJsZShyKXt2YXIgaT10aGlzO3JldHVy''@;'; put 'put ''biBDcihmdW5jdGlvbiooKXtjb25zdCBvPWkuaG90SW5zdGFuY2UsYT0oaS5kY1ZhbGlkYXRvcj8uZ2V0RHFEZXRhaWxzKCk/P1tdKS5maWx0ZXIodT0+IkhBUkRGT1JNVUxBIj09PXUuUlVMRV9UWVBFfHwiU09GVEZPUk1VTEEiPT09dS5SVUxFX1RZUEUpO2EubGVuZ3RoPjAmJnIuZm9yRWFj''@;'; put 'put ''aCgodSxnKT0+e2NvbnN0IEU9by50b1Zpc3VhbFJvdyhnKTtmb3IoY29uc3QgTyBvZiBhKXVbTy5CQVNFX0NPTF09by5nZXREYXRhQXRSb3dQcm9wKEUsTy5CQVNFX0NPTCl9KTtjb25zdCBsPV9xKGkuZGNWYWxpZGF0b3I/LmdldERxRGV0YWlscygpPz9bXSk7aWYoci5mb3JFYWNoKCh1LGcp''@;'; put 'put ''PT57Y29uc3QgRT1vLnRvVmlzdWFsUm93KGcpLE89cXgodSxpLmhlYWRlclBrcyk7Zm9yKGNvbnN0IFogb2YgaS5oZWFkZXJDb2x1bW5zKWwuaW5jbHVkZXMoWil8fCh4Z2UoaS5hdXRvRXNjYXBlZENlbGxzLE8sWik/dVtaXT1DemUodVtaXSk6InN0cmluZyI9PXR5cGVvZiB1W1pdJiZ1W1pd''@;'; put 'put ''LnN0YXJ0c1dpdGgoIj0iKSYmKHVbWl09by5nZXREYXRhQXRSb3dQcm9wKEUsWikpKX0pLHI9KHI9ci5maWx0ZXIodT0+ISFpLmRhdGFNb2RpZmllZC5maW5kKEU9Pntmb3IoY29uc3QgTyBvZiBpLmhlYWRlclBrcylpZihFW09dIT09dVtPXSlyZXR1cm4hMTtyZXR1cm4hMH0pKSkubWFwKHU9''@;'; put 'put ''Pntjb25zdCBnPXUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fO3JldHVybiBkZWxldGUgdS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18sdS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX189ZyxkZWxldGUgdVtNbV0sT2JqZWN0LmtleXModSkubWFwKEU9PnsibnVt''@;'; put 'put ''ZXJpYyI9PT1pLmRjVmFsaWRhdG9yPy5nZXRSdWxlKEUpPy50eXBlJiYiLiI9PT11W0VdJiYodVtFXT1udWxsKX0pLHV9KSxpLmxvZ2dlclNlcnZpY2UubG9nKCJEYXRhIHN1Ym1pdHRlZCIsciksaS5jaGVja0ludmFsaWQoKSlyZXR1cm4gaS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgi''@;'; put 'put ''VmFsaWRhdGlvbiBlcnJvciIsIkludmFsaWQgVmFsdWVzIGFyZSBQcmVzZW50IiksaS5jYW5jZWxTdWJtaXQoKSx2b2lkKGkuc3VibWl0PSExKTtpZihpLnZhbGlkYXRpb25Eb25lPTAsaS5zYXZlTG9hZGluZz0hMCxlLmNudDwxJiYwPT09aS5kdXBsaWNhdGVQa0luZGV4ZXMubGVuZ3RoJiZl''@;'; put 'put ''Lm5vblBrQ250PDEpe2kuc2F2ZUxvYWRpbmc9ITAsaS5kaXNhYmxlU3VibWl0PSExLGkuc3VibWl0PSEwO2NvbnN0IHU9e0FDVElPTjoiTE9BRCJ9O2lmKGkubWVzc2FnZT1semUoaS5tZXNzYWdlLnJlcGxhY2UoL1xuL2csIi4gIikpLHUuTUVTU0FHRT1pLm1lc3NhZ2UsdS5MSUJEUz1pLmxp''@;'; put 'put ''YmRzLGkuY29scyl7Y29uc3QgZz1yLnNsaWNlKDAsaS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpO2lmKHlpZWxkIGkuc2FzU3RvcmVTZXJ2aWNlLnVwZGF0ZVRhYmxlKHUsZywiU0FTQ29udHJvbFRhYmxlIiwiZWRpdG9ycy9zdGFnZWRhdGEiLGkuJGRhdGFGb3JtYXRz''@;'; put 'put ''KS50aGVuKE89PntpZih0eXBlb2YgTy5hZGFwdGVyUmVzcG9uc2Uuc2FzcGFyYW1zPCJ1IilyZXR1cm4gaS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrTy5hZGFwdGVyUmVzcG9uc2Uuc2FzcGFyYW1zWzBdLkRTSUQpLCEwO2xldCBaPSJTdWJtaXQgcmVxdWVzdCBmYWlsZWQiO08m''@;'; put 'put ''JihaKz1gXG4keyJzdHJpbmciPT10eXBlb2YgTz9POkpTT04uc3RyaW5naWZ5KE8pfWApLGkuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJlZGl0b3JzL3N0YWdlZGF0YSIsWixudWxsLCJTdWJtaXQgZXJyb3IiKX0pLmNhdGNoKE89Pntjb25zb2xlLmxvZygiZXJyIixPKSxlLmNudD0w''@;'; put 'put ''LGUubm9uUGtDbnQ9MCxpLmRpc2FibGVTdWJtaXQ9ITAsaS5zdWJtaXQ9ITE7Y29uc3QgWj0ic3RyaW5nIj09dHlwZW9mIE8uYWRhcHRlclJlc3Buc2U/Ty5hZGFwdGVyUmVzcG5zZTpKU09OLnN0cmluZ2lmeShPLmFkYXB0ZXJSZXNwbnNlKTtyZXR1cm4gaS5ldmVudFNlcnZpY2Uuc2hvd0Fi''@;'; put 'put ''b3J0TW9kYWwoImVkaXRvcnMvc3RhZ2VkYXRhIixgU3VibWl0IHJlcXVlc3QgZmFpbGVkXG4ke1p9YCxudWxsLCJTdWJtaXQgZXJyb3IiKSwhMX0pKXJldHVybn19ZS5jbnQ+PTE/KGkucGtOdWxsPSEwLGkuc3VibWl0PSEwKTppLnN1Ym1pdD0hMSxlLm5vblBrQ250Pj0xPyhpLm5vUGtOdWxs''@;'; put 'put ''PSEwLGkuc3VibWl0PSEwKTppLnN1Ym1pdD0hMSxpLmNhbmNlbFN1Ym1pdCgpLGUuY250PTAsZS5ub25Qa0NudD0wLGkuZGlzYWJsZVN1Ym1pdD0hMH0pKCl9dmFsaWRhdG9yUnVsZVNvdXJjZShyKXtyZXR1cm4gdGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShyKX1jaGVja0ludmFsaWQoKXtp''@;'; put 'put ''ZighdGhpcy5ob3RUYWJsZUNvbXBvbmVudHx8IXRoaXMuaG90VGFibGVDb21wb25lbnQuaG90SW5zdGFuY2UpcmV0dXJuITE7Y29uc3Qgcj10aGlzLmhvdFRhYmxlQ29tcG9uZW50LmhvdEluc3RhbmNlLnJvb3RFbGVtZW50O2lmKCFyKXJldHVybiExO2NvbnN0IGk9ci5xdWVyeVNlbGVjdG9y''@;'; put 'put ''QWxsKCIuaHRJbnZhbGlkIiksbz1yLnF1ZXJ5U2VsZWN0b3JBbGwoIi5kYy1pbnZhbGlkLWNlbGwiKTtyZXR1cm4gaS5sZW5ndGg+MHx8by5sZW5ndGg+MH1nb1RvRWRpdG9yKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiLyIpfWNsb3NlUmVjb3JkRWRpdChyKXt0aGlzLmN1cnJlbnRF''@;'; put 'put ''ZGl0UmVjb3JkSW5kZXg9LTEsdGhpcy5jdXJyZW50RWRpdFJlY29yZD12b2lkIDAsdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj12b2lkIDAsIkFERCI9PT10aGlzLnJlY29yZEFjdGlvbiYmIXImJih0aGlzLmRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0''@;'; put 'put ''aGlzLnByZXZEYXRhU291cmNlKSx0aGlzLnVwZGF0ZVNldHRpbmdzU29ydFNhZmUoe2RhdGE6dGhpcy5kYXRhU291cmNlfSwhMSkpfWNvbmZpcm1SZWNvcmRFZGl0KHI9ITApe2NvbnN0IGk9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4O3ImJih0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5k''@;'; put 'put ''ZXg9LTEpLHRoaXMuY29sdW1uSGVhZGVyLm1hcChvPT57Y29uc3QgYT10aGlzLmN1cnJlbnRFZGl0UmVjb3JkW29dLGw9Im51bSI9PT10aGlzLiRkYXRhRm9ybWF0cz8udmFyc1tvXT8udHlwZSx1PSgwLHk0LmlzU3BlY2lhbE1pc3NpbmcpKGEpO2wmJiFpc05hTihhKSYmIXUmJih0aGlzLmN1''@;'; put 'put ''cnJlbnRFZGl0UmVjb3JkW29dPTEqYSl9KSx0aGlzLmRhdGFTb3VyY2VbaV09dGhpcy5jdXJyZW50RWRpdFJlY29yZCx0aGlzLmhvdFRhYmxlLmRhdGFbaV09dGhpcy5jdXJyZW50RWRpdFJlY29yZCx0aGlzLnVwZGF0ZVNldHRpbmdzU29ydFNhZmUoe2RhdGE6dGhpcy5kYXRhU291cmNlfSwh''@;'; put 'put ''MSksciYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dm9pZCAwKX1vbk5leHRSZWNvcmQoKXt0aGlzLmNvbmZpcm1SZWNvcmRFZGl0KCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4Pj10aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTE/MDp0''@;'; put 'put ''aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgrMSx0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpfW9uUHJldmlvdXNSZWNvcmQoKXt0aGlzLmNvbmZpcm1SZWNvcmRFZGl0KCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9dGhpcy5jdXJyZW50''@;'; put 'put ''RWRpdFJlY29yZEluZGV4PD0wP3RoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMTp0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgtMSx0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpfWFkZFJlY29yZEJ1dHRvbkNsaWNrKCl7dGhpcy5yZXN0cmljdGlvbnMu''@;'; put 'put ''cmVzdHJpY3RBZGRSZWNvcmQ/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJBZGQgUmVjb3JkIik6dGhpcy5hZGRFZGl0TmV3UmVjb3JkKCl9YWRkRWRpdE5ld1JlY29yZCgpe3RoaXMuYWRkUmVjb3JkKCksc2V0VGltZW91dCgoKT0+e3RoaXMuZWRpdFJlY29yZChudWxs''@;'; put 'put ''LHRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMSwhMCl9LDFlMyl9YWRkUmVjb3JkKCl7dGhpcy5hZGRSb3coKX1lZGl0UmVjb3JkKHIsaSxvKXtpZih0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEVkaXRSZWNvcmQpdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJFZGl0IFJl''@;'; put 'put ''Y29yZCIpO2Vsc2UgaWYoISh2b2lkIDA9PT1pfHxpPDB8fHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRpdFJlY29yZCkpe2lmKHRoaXMucmVjb3JkQWN0aW9uPW8/IkFERCI6IkVESVQiLHRoaXMuaG90VGFibGUucmVhZE9ubHkmJnRoaXMuZWRpdFRhYmxlKCExLG8pLHRoaXMuY3VycmVu''@;'; put 'put ''dEVkaXRSZWNvcmRWYWxpZGF0b3I9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRjVmFsaWRhdG9yKSxvKXRoaXMucHJldkRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLHRoaXMucHJldkRhdGFTb3VyY2UucG9wKCk7ZWxz''@;'; put 'put ''ZXtjb25zdCBhPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5ob3RJbnN0YW5jZS5nZXRDZWxsTWV0YUF0Um93KGkpKTtmb3IoY29uc3QgbCBvZiBhKWlmKGwpe2NvbnN0IHU9bC5wcm9wPy50b1N0cmluZygpO2RlbGV0ZSBsLnByb3AsZGVsZXRlIGwuZGF0YSx0aGlzLmN1cnJl''@;'; put 'put ''bnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGwuY29sLHsuLi5sLGRhdGE6dX0pfX10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9aSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlW2ldKX19dG9nZ2xl''@;'; put 'put ''SG90UGx1Z2luKHIsaSl7Y29uc3Qgbz10aGlzLmhvdEluc3RhbmNlLGE9by5nZXRQbHVnaW4ocik7YT9zZXRUaW1lb3V0KCgpPT57by5pc0Rlc3Ryb3llZHx8dGhpcy5ob3RJbnN0YW5jZSE9PW98fCFhLmhvdHx8KGk/YS5lbmFibGVQbHVnaW4oKTphLmRpc2FibGVQbHVnaW4oKSxvLnJlbmRl''@;'; put 'put ''cigpKX0sMTAwKTpjb25zb2xlLndhcm4oIlRvZ2dsZSBIb3QgUGx1Z2luIGZhaWxlZCAtIFBsdWdpbiBuYW1lZDogIityKyIgLSBjb3VsZCBub3QgYmUgZm91bmQuIil9ZHluYW1pY0NlbGxWYWxpZGF0aW9uRGlzYWJsZWQocixpKXtyZXR1cm4hIXRoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWND''@;'; put 'put ''ZWxsVmFsaWRhdGlvbk1hcC5maW5kKGE9PmEucm93PT09ciYmYS5jb2w9PT1pJiYhYS5hY3RpdmUpfWR5bmFtaWNDZWxsVmFsaWRhdGlvbihyLGksbyl7dmFyIGE9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKGwsdSxnLEU9ITEpe2lmKGEuZHluYW1pY0NlbGxWYWxpZGF0aW9uRGlzYWJsZWQo''@;'; put 'put ''bCx1KSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3QgTz1hLmhvdEluc3RhbmNlO2lmKE8uZ2V0Q2VsbE1ldGEobCx1KS5yZWFkT25seSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3QgZWU9Ty5nZXREYXRhQXRDZWxsKGwsdSksdmU9YS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9u''@;'; put 'put ''ZShhLmRhdGFTb3VyY2VbbF0pLE1lPU8uY29sVG9Qcm9wKHUpLEhlPSEhZz8uc2tpcFJlbmRlcixXZT1hLnZhbGlkYXRpb25FcG9jaCxhdD1hLmhlbHBlclNlcnZpY2UuZGVsZXRlS2V5c0FuZEhhc2godmUsW01lLCJub0xpbmtPcHRpb24iXSwhMSksQ3Q9YS5jZWxsVmFsaWRhdGlvblNvdXJj''@;'; put 'put ''ZS5maW5kSW5kZXgoQXQ9PkF0Lmhhc2g9PT1hdCk7aWYoQ3Q+LTEpe2NvbnN0IEF0PWEuY2VsbFZhbGlkYXRpb25Tb3VyY2VbQ3RdLnBlbmRpbmc7aWYoQXQmJiFFKXt0cnl7eWllbGQgQXR9Y2F0Y2h7fXJldHVybiBXZSE9PWEudmFsaWRhdGlvbkVwb2NoP3ZvaWQgMDphLmR5bmFtaWNDZWxs''@;'; put 'put ''VmFsaWRhdGlvbihsLHUsZywhMCl9fWlmKEN0Pi0xKXtsZXQgQXQ9YS5jZWxsVmFsaWRhdGlvblNvdXJjZVtDdF0udmFsdWVzLm1hcChnbj0+Z24uUkFXX1ZBTFVFKTtjb25zdCBLdD0oTy5nZXRDZWxsTWV0YShsLHUpLnNvdXJjZXx8W10pLmxlbmd0aDwxLHF0PSIgIiE9PWVlO08uYmF0Y2go''@;'; put 'put ''KCk9Pntjb25zdCBnbj1PLmdldENlbGxNZXRhKGwsdSksVG49YS5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShnbi5kYXRhfHwiIik7bGV0IENuO1RuJiYoQ249YS5kY1ZhbGlkYXRvcj8uZ2V0RHFEcm9wZG93blNvdXJjZShUbikpLENufHwoQ249W10pLCJudW1lcmljIj09PVRuPy50eXBlPyhDbj1h''@;'; put 'put ''LmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKENuLCJudW1iZXIiKSxBdD1hLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKEF0LCJudW1iZXIiKSk6KENuPWEuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoQ24sInN0cmluZyIpLEF0PWEuaGVscGVyU2Vy''@;'; put 'put ''dmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoQXQsInN0cmluZyIpKTtjb25zdCBxcj1bLi4ubmV3IFNldChbLi4uQ24sLi4uQXRdKV07aWYoTy5zZXRDZWxsTWV0YShsLHUsInNvdXJjZSIscXIpLGEuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUodSx7c291cmNlOnFyfSks''@;'; put 'put ''YS5jZWxsVmFsaWRhdGlvblNvdXJjZVtDdF0udmFsdWVzLmxlbmd0aD4wKXtjb25zdCAkbj1hLmNlbGxWYWxpZGF0aW9uU291cmNlW0N0XS5zdHJpY3Q7Ty5zZXRDZWxsTWV0YShsLHUsInJlbmRlcmVyIiwiYXV0b2NvbXBsZXRlIiksTy5zZXRDZWxsTWV0YShsLHUsImVkaXRvciIsImF1dG9j''@;'; put 'put ''b21wbGV0ZS5jdXN0b20iKSxPLnNldENlbGxNZXRhKGwsdSwic3RyaWN0IiwkbiksTy5zZXRDZWxsTWV0YShsLHUsImZpbHRlciIsITEpLGEuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUodSx7cmVuZGVyZXI6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOiJhdXRvY29tcGxl''@;'; put 'put ''dGUuY3VzdG9tIixzdHJpY3Q6JG4sZmlsdGVyOiExfSl9YS5yZVNldEV4dGVuZGVkQ2VsbFZhbGlkYXRpb25WYWx1ZXMoYS5jZWxsVmFsaWRhdGlvblNvdXJjZVtDdF0sbCxLdCYmcXQpLEhlfHxPLnJlbmRlcigpfSl9ZWxzZSBpZihDdDwwKXtjb25zdCBBdD17U0FTQ29udHJvbFRhYmxlOlt7''@;'; put 'put ''bGliZHM6YS5saWJkcyx2YXJpYWJsZV9ubTpNZX1dLHNvdXJjZV9yb3c6W1ZtZSh2ZSldfSxLdD1hLmRjVmFsaWRhdG9yPy5nZXREcURldGFpbHMoTWUpLmZpbmQocXQ9PiJTT0ZUU0VMRUNUX0hPT0siPT09cXQuUlVMRV9UWVBFfHwiSEFSRFNFTEVDVF9IT09LIj09PXF0LlJVTEVfVFlQRSk7''@;'; put 'put ''aWYoS3Qpe2EuY2VsbFZhbGlkYXRpb25Tb3VyY2UucHVzaCh7cm93OmwsY29sOnUsc3RyaWN0OiJIQVJEU0VMRUNUX0hPT0siPT09S3QuUlVMRV9UWVBFLHZhbHVlczpbXSxoYXNoOmF0LGNvdW50OmEuY2VsbFZhbGlkYXRpb25Tb3VyY2UubGVuZ3RoKzF9KSxhLmN1cnJlbnRFZGl0UmVjb3Jk''@;'; put 'put ''TG9hZGluZ3MucHVzaCh1KTtjb25zdCBxdD1gJHtsfSwke3V9YCxnbj1IZT9udWxsOnNldFRpbWVvdXQoKCk9PntPLnNldENlbGxNZXRhKGwsdSwicmVuZGVyZXIiLGJRdCksYS5wZW5kaW5nU3Bpbm5lckNlbGxzLmFkZChxdCksTy5yZW5kZXIoKX0sMTUwKSxUbj1hLnNhc1NlcnZpY2UucmVx''@;'; put 'put ''dWVzdCgiZWRpdG9ycy9nZXRkeW5hbWljY29sdmFscyIsQXQsdm9pZCAwLHtzdXBwcmVzc1N1Y2Nlc3NBYm9ydE1vZGFsOiEwLHN1cHByZXNzRXJyb3JBYm9ydE1vZGFsOiEwfSkudGhlbihmdW5jdGlvbigpe3ZhciBxcj1DcihmdW5jdGlvbiooJG4pe2lmKGduJiZjbGVhclRpbWVvdXQoZ24p''@;'; put 'put ''LGEucGVuZGluZ1NwaW5uZXJDZWxscy5kZWxldGUocXQpLFdlIT09YS52YWxpZGF0aW9uRXBvY2gpe2NvbnN0IHJpPWEuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZEluZGV4KGZuPT5mbi5oYXNoPT09YXQpO3JldHVybiB2b2lkKHJpPi0xJiZhLmNlbGxWYWxpZGF0aW9uU291cmNlLnNwbGlj''@;'; put 'put ''ZShyaSwxKSl9Y29uc3QgVHI9JG4uYWRhcHRlclJlc3BvbnNlLmR5bmFtaWNfdmFsdWVzLm1hcChyaT0+cmkuUkFXX1ZBTFVFKTtpZihhLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3Muc3BsaWNlKGEuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5pbmRleE9mKHUpLDEpLFRyLmxlbmd0aD4w''@;'; put 'put ''KXtjb25zdCByaT1hLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmRJbmRleChmbj0+Zm4uaGFzaD09PWF0KTtyaT4tMSYmKGEuY2VsbFZhbGlkYXRpb25Tb3VyY2VbcmldPXsuLi5hLmNlbGxWYWxpZGF0aW9uU291cmNlW3JpXSxyb3c6bCxjb2w6dSx2YWx1ZXM6JG4uYWRhcHRlclJlc3BvbnNl''@;'; put 'put ''LmR5bmFtaWNfdmFsdWVzLGV4dGVuZGVkX3ZhbHVlczokbi5hZGFwdGVyUmVzcG9uc2UuZHluYW1pY19leHRlbmRlZF92YWx1ZXMscGVuZGluZzp2b2lkIDB9KSx5aWVsZCBuZXcgUHJvbWlzZShmbj0+c2V0VGltZW91dCgoKT0+e2EucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcyghMCxsKSxI''@;'; put 'put ''ZXx8KE8ucmVuZGVyKCksTy52YWxpZGF0ZVJvd3MoW2xdKSksZm4oKX0sMTAwKSl9ZWxzZXtIZXx8KE8uc2V0Q2VsbE1ldGEobCx1LCJyZW5kZXJlciIsU2dlKSxPLnJlbmRlcigpKTtjb25zdCByaT1hLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmRJbmRleChmbj0+Zm4uaGFzaD09PWF0KTty''@;'; put 'put ''aT4tMSYmKGEuY2VsbFZhbGlkYXRpb25Tb3VyY2VbcmldLnBlbmRpbmc9dm9pZCAwKX1pZihhLmNlbGxWYWxpZGF0aW9uU291cmNlLmxlbmd0aD5hLnZhbGlkYXRpb25UYWJsZUxpbWl0KXtjb25zdCByaT1hLmNlbGxWYWxpZGF0aW9uU291cmNlLnJlZHVjZSgoeXIsQW4pPT55ci5jb3VudDxB''@;'; put 'put ''bi5jb3VudD95cjpBbiksZm49YS5jZWxsVmFsaWRhdGlvblNvdXJjZS5pbmRleE9mKHJpKTthLmNlbGxWYWxpZGF0aW9uU291cmNlLnNwbGljZShmbiwxKX19KTtyZXR1cm4gZnVuY3Rpb24oJG4pe3JldHVybiBxci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaChxcj0+e2duJiZj''@;'; put 'put ''bGVhclRpbWVvdXQoZ24pLGEucGVuZGluZ1NwaW5uZXJDZWxscy5kZWxldGUocXQpO2NvbnN0ICRuPWEuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZEluZGV4KFRyPT5Uci5oYXNoPT09YXQpO2EuY2VsbFZhbGlkYXRpb25Tb3VyY2Uuc3BsaWNlKCRuLDEpLFdlPT09YS52YWxpZGF0aW9uRXBv''@;'; put 'put ''Y2gmJihIZXx8Ty5iYXRjaCgoKT0+e08uc2V0Q2VsbE1ldGEobCx1LCJyZW5kZXJlciIseVF0KSxPLnJlbmRlcigpfSksYS5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLnNwbGljZShhLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MuaW5kZXhPZih1KSwxKSxhLmN1cnJlbnRFZGl0UmVjb3Jk''@;'; put 'put ''RXJyb3JzLnB1c2godSksc2V0VGltZW91dCgoKT0+e0hlfHwoTy5zZXRDZWxsTWV0YShsLHUsInJlbmRlcmVyIixTZ2UpLE8ucmVuZGVyKCkpLGEuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMuc3BsaWNlKGEuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMuaW5kZXhPZih1KSwxKX0sM2UzKSxhLnJl''@;'; put 'put ''U2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKSxhLmxvZ2dlclNlcnZpY2UubG9nKCJnZXRkeW5hbWljY29sdmFscyBlcnJvcjoiLHFyKSl9KSxDbj1hLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmRJbmRleChxcj0+cXIuaGFzaD09PWF0KTtyZXR1cm4gQ24+LTEmJihhLmNlbGxWYWxpZGF0aW9u''@;'; put 'put ''U291cmNlW0NuXS5wZW5kaW5nPVRuKSxUbn19cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNoZWNrRW1wdHlSb3dXaGVuRmlsdGVyKCl7dGhpcy56ZXJvRmlsdGVyUm93cz0hMSx0eXBlb2YgdGhpcy5maWx0ZXJfcGs8InUiJiYxPT09dGhpcy5ob3RU''@;'; put 'put ''YWJsZS5kYXRhLmxlbmd0aCYmW251bGwsIiJdLmluY2x1ZGVzKHRoaXMuaG90VGFibGUuZGF0YVswXVt0aGlzLmhlYWRlclBrc1swXV0pJiYodGhpcy56ZXJvRmlsdGVyUm93cz0hMCl9b25SZWNvcmRJbnB1dEZvY3VzKHIpe3RoaXMuZHluYW1pY0NlbGxWYWxpZGF0aW9uKHRoaXMuY3VycmVu''@;'; put 'put ''dEVkaXRSZWNvcmRJbmRleCxyLmNvbE5hbWUpfWV4ZWN1dGVEeW5hbWljQ2VsbFZhbGlkYXRpb25JZkFwcGxpY2FibGUocixpLG8pe2NvbnN0IGE9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlbGV0ZUtleXNBbmRIYXNoKHRoaXMuZGF0YVNvdXJjZVtvXSxbciwibm9MaW5rT3B0aW9uIl0pLGw9dGhp''@;'; put 'put ''cy5jZWxsVmFsaWRhdGlvblNvdXJjZS5maW5kKHU9PnUuaGFzaD09PWEmJmk9PT11LmNvbCk7aWYobCYmbC5leHRlbmRlZF92YWx1ZXMmJmwuZXh0ZW5kZWRfdmFsdWVzLmxlbmd0aD4wKXtjb25zdCB1PXRoaXMuZ2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShsLG8pO3RoaXMuc2V0RXh0''@;'; put 'put ''ZW5kZWRWYWx1ZXNUb0NlbGxzKGwsbyx1LCEwKX19ZGF0YXNldEluZm9Nb2RhbFJvd0NsaWNrZWQocil7dm9pZCAwIT09ci5MT0FEX1JFRiYmdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Avc3RhZ2UvJHtyLkxPQURfUkVGfWBdKX12aWV3Ym94TWFuYWdlcigpe3RoaXMudmlld2JveGVzPSEwfWdl''@;'; put 'put ''dCB0b3RhbFJvd3NDaGFuZ2VkKCl7cmV0dXJuIHRoaXMucm93c0NoYW5nZWQucm93c1VwZGF0ZWQrdGhpcy5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZCt0aGlzLnJvd3NDaGFuZ2VkLnJvd3NBZGRlZH1zZXRDZWxsRmlsdGVyKHIpe2NvbnN0IGk9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3Rl''@;'; put 'put ''ZCgpO2lmKCFpKXJldHVybjtjb25zdCBvPWkmJmlbMF07aWYobyl7Y29uc3QgYT1vWzBdLHU9b1sxXTtpZihhPT09b1syXSYmdT09PW9bM10pe2NvbnN0IEU9dGhpcy5ob3RJbnN0YW5jZS5nZXRDZWxsTWV0YShhLHUpO0UmJkUuZmlsdGVyPT09IXImJnRoaXMuaG90SW5zdGFuY2Uuc2V0Q2Vs''@;'; put 'put ''bE1ldGEoYSx1LCJmaWx0ZXIiLHIpfX19bmdPbkluaXQoKXt2YXIgcj10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtyLmlzVmFFbWJlZCYmci5zdWJzY3JpYmVUb1ZhTWVzc2FnZXMoKSxyLnVwZGF0ZUhvdFRhYmxlU2V0dGluZ3MoKSxyLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tl''@;'; put 'put ''eS5zdWJzY3JpYmUobz0+e3IuaG90VGFibGUubGljZW5zZUtleT1vLHIudXBkYXRlSG90VGFibGVTZXR0aW5ncygpfSksci5fcXVlcnlQYXJhbXM9ci5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUobz0+e3IudXNlTGFiZWxzPUNaZShuZXcgVVJMU2VhcmNoUGFyYW1zKG8pLnRvU3RyaW5n''@;'; put 'put ''KCkpLHIuYXBwbHlEaXNwbGF5Q29sSGVhZGVycygpfSksci5fcXVlcnk9ci5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKG89PntvLmxpYmRzPT09ci5saWJkcyYmKHIud2hlcmVTdHJpbmc9by5zdHJpbmcsci5jbGF1c2VzPW8ub2JqKX0pO2NvbnN0IGk9e307dHlwZW9mIHIucm91''@;'; put 'put ''dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbTwidSImJihyLmxpYmRzPXIucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSxyLmZpbHRlcl9waz1yLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCwiZWRpdC1yZWNvcmQiPT09ci5yb3V0ZS5zbmFwc2hvdC51cmxbMF0ucGF0aCYmKHIu''@;'; put 'put ''cmVjb3JkQWN0aW9uPXR5cGVvZiByLmZpbHRlcl9wazwidSI/IkVESVQiOiJBREQiKSxpLkxJQkRTPXIubGliZHMsdHlwZW9mIHIuZmlsdGVyX3BrPCJ1IiYmKGkuRklMVEVSX1JLPXBhcnNlSW50KHIuZmlsdGVyX3BrKSksaS5PVVRERVNUPSJXRUIiLHIubGliZHMmJihVbi5lZGl0b3IubGli''@;'; put 'put ''cmFyeT1yLmxpYmRzLnNwbGl0KCIuIilbMF0sVW4uZWRpdG9yLnRhYmxlPXIubGliZHMuc3BsaXQoIi4iKVsxXSkpLCEoeWllbGQgci5tYXliZURlZmVySW5pdGlhbFZhTG9hZCgpKSYmci5saWJkcyYmKHIuZ2V0ZGF0YUVycm9yPSExLHlpZWxkIHIuc2FzU3RvcmVTZXJ2aWNlLmNhbGxTZXJ2''@;'; put 'put ''aWNlKGksIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvZ2V0ZGF0YSIsci5saWJkcykudGhlbihvPT57ci5pbml0U2V0dXAobyl9KS5jYXRjaChvPT57Y29uc29sZS5lcnJvcigiZWRpdG9ycy9nZXRkYXRhIGZhaWxlZDoiLG8pLHIuZ2V0ZGF0YUVycm9yPSEwLHIudGFibGVUcnVlPSEwfSkp''@;'; put 'put ''fSkoKX1tYXliZURlZmVySW5pdGlhbFZhTG9hZCgpe3ZhciByPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe2lmKCFyLmlzVmFFbWJlZHx8dHlwZW9mIHIucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkPCJ1IilyZXR1cm4hMTtjb25zdCBpPXIucm91dGUuc25hcHNob3QucGFyYW1z''@;'; put 'put ''LmxpYk1lbTtpZighaSlyZXR1cm4hMTtjb25zdCBvPXIudmFNZXNzYWdpbmcubGF0ZXN0TWVzc2FnZSgpO2lmKCFvKXJldHVybiExO2NvbnN0IGE9ci52YUZpbHRlci5idWlsZEluaXRpYWxDbGF1c2VzKG8pO2lmKDA9PT1hLmxlbmd0aClyZXR1cm4hMTt0cnl7Y29uc3QgbD15aWVsZCByLnNh''@;'; put 'put ''c1N0b3JlU2VydmljZS5zYXZlUXVlcnkoaSxhKSx1PWw/LnJlc3VsdD8uWzBdPy5GSUxURVJfUkssZz1sPy5yZXN1bHQ/LlswXT8uRklMVEVSX1RBQkxFO3JldHVybiB2b2lkIDAhPT11JiZ2b2lkIDAhPT1nJiYoci52YU1lc3NhZ2luZy5maWx0ZXJTaWduYXR1cmU9ci52YUZpbHRlci5zaWdu''@;'; put 'put ''YXR1cmUoYSkseWllbGQgci5yZWxvYWRFZGl0b3JSb3V0ZSgiL2VkaXRvci8iK2crIi8iK3UpLCEwKX1jYXRjaHtyZXR1cm4hMX19KSgpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMuc2NoZWR1bGVGaWx0ZXJPdmVyZmxvd0NoZWNrKCl9c2NoZWR1bGVGaWx0ZXJPdmVyZmxvd0NoZWNrKCl7''@;'; put 'put ''Y29uc3Qgcj10aGlzLmluZm9CYXI/Lm5hdGl2ZUVsZW1lbnQ7aWYoIXIpcmV0dXJuO2NvbnN0IGk9ci5xdWVyeVNlbGVjdG9yKCIuaW5mb0Jhci10ZXh0Iik7aWYoIWkpcmV0dXJuO2NvbnN0IG89YCR7dGhpcy5xdWVyeVRleHR9fCR7aS5jbGllbnRXaWR0aH18JHt0aGlzLmZpbHRlckV4cGFu''@;'; put 'put ''ZGVkfWA7byE9PXRoaXMuZmlsdGVyTWVhc3VyZWRLZXkmJih0aGlzLmZpbHRlck1lYXN1cmVkS2V5PW8sc2V0VGltZW91dCgoKT0+e3RoaXMuZmlsdGVyRXhwYW5kZWR8fCh0aGlzLmZpbHRlck92ZXJmbG93cz1pLnNjcm9sbFdpZHRoPmkuY2xpZW50V2lkdGgpfSkpfXRvZ2dsZUZpbHRlclBh''@;'; put 'put ''bmVsKCl7dGhpcy5maWx0ZXJFeHBhbmRlZD0hdGhpcy5maWx0ZXJFeHBhbmRlZH1uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5maXhBcmlhQWNjZXNzaWJpbGl0eSgpfSwxZTMpLHNldFRpbWVvdXQoKCk9PntpZih0aGlzLmhvdFRhYmxlQ29tcG9uZW50JiZ0aGlzLmhv''@;'; put 'put ''dFRhYmxlQ29tcG9uZW50LmhvdEluc3RhbmNlKXtjb25zdCByPXRoaXMuaG90VGFibGVDb21wb25lbnQuaG90SW5zdGFuY2Uucm9vdEVsZW1lbnQ7ciYmci5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGk9Pnt0aGlzLnVwbG9hZFByZXZpZXd8fHRoaXMuaG90Q2xpY2tlZCgpLHNldFRp''@;'; put 'put ''bWVvdXQoKCk9Pntjb25zdCBvPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kZWJ1Zy1zd2l0Y2gtaXRlbSIpfHx2b2lkIDA7byYmby5jbGljaygpfSwxMDApfSl9fSwxMDApfWFwcGx5RGlzcGxheUNvbEhlYWRlcnMoKXtpZighdGhpcy5ob3RJbnN0YW5jZXx8IXRoaXMuaGVhZGVyQ29sdW1u''@;'; put 'put ''cy5sZW5ndGgpcmV0dXJuO2NvbnN0IHI9Z0EodGhpcy5oZWFkZXJDb2x1bW5zLHRoaXMuY29scyx0aGlzLnVzZUxhYmVscyk7dGhpcy51cGRhdGVTZXR0aW5nc1NvcnRTYWZlKHtjb2xIZWFkZXJzOnJ9LCExKX1uZ09uRGVzdHJveSgpe3RoaXMuX3F1ZXJ5UGFyYW1zPy51bnN1YnNjcmliZSgp''@;'; put 'put ''LHRoaXMuYXJpYU9ic2VydmVyJiYodGhpcy5hcmlhT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuYXJpYU9ic2VydmVyPXZvaWQgMCksdGhpcy5hcmlhQ2hlY2tJbnRlcnZhbCYmKGNsZWFySW50ZXJ2YWwodGhpcy5hcmlhQ2hlY2tJbnRlcnZhbCksdGhpcy5hcmlhQ2hlY2tJbnRlcnZhbD12''@;'; put 'put ''b2lkIDApLHRoaXMuZ3JpZFJlc2l6ZU9ic2VydmVyJiYodGhpcy5ncmlkUmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuZ3JpZFJlc2l6ZU9ic2VydmVyPXZvaWQgMCksdGhpcy5wYXN0ZUxpc3RlbmVyJiZ0aGlzLmhvdEluc3RhbmNlPy5yb290RWxlbWVudCYmKHRoaXMuaG90SW5z''@;'; put 'put ''dGFuY2Uucm9vdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFzdGUiLHRoaXMucGFzdGVMaXN0ZW5lciksdGhpcy5wYXN0ZUxpc3RlbmVyPXZvaWQgMCksdGhpcy52YURlYm91bmNlVGltZXImJihjbGVhclRpbWVvdXQodGhpcy52YURlYm91bmNlVGltZXIpLHRoaXMudmFEZWJvdW5j''@;'; put 'put ''ZVRpbWVyPXZvaWQgMCksdGhpcy52YVVuc3Vic2NyaWJlJiYodGhpcy52YVVuc3Vic2NyaWJlKCksdGhpcy52YVVuc3Vic2NyaWJlPXZvaWQgMCl9b2JzZXJ2ZUdyaWRSZXNpemUoKXtjb25zdCByPXRoaXMuaG90SW5zdGFuY2U/LnJvb3RFbGVtZW50Py5wYXJlbnRFbGVtZW50O3ImJih0aGlz''@;'; put 'put ''LmdyaWRSZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpLHRoaXMuZ3JpZFJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e2NvbnN0IGk9dGhpcy5ob3RJbnN0YW5jZTshaXx8aS5pc0Rlc3Ryb3llZHx8KHRoaXMudXBkYXRl''@;'; put 'put ''U2V0dGluZ3NTb3J0U2FmZSh7aGVpZ2h0OnRoaXMuaG90VGFibGUuaGVpZ2h0fSwhMSksaS5yZW5kZXIoKSl9KX0pLHRoaXMuZ3JpZFJlc2l6ZU9ic2VydmVyLm9ic2VydmUocikpfWZpeEFyaWFBY2Nlc3NpYmlsaXR5KCl7Y29uc3Qgcj0oKT0+e2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwo''@;'; put 'put ''Jy5odC13cmFwcGVyLCAud3RIb2xkZXIsIFtpZF49Imh0XyJdJykuZm9yRWFjaChFPT57RS5yZW1vdmVBdHRyaWJ1dGUoInJvbGUiKSxFLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIpLEUucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWNvbGNvdW50IiksRS5yZW1vdmVBdHRyaWJ1dGUo''@;'; put 'put ''ImFyaWEtbXVsdGlzZWxlY3RhYmxlIil9KTtjb25zdCBvPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tyb2xlPSJ0cmVlZ3JpZCJdJyksYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT0icHJlc2VudGF0aW9uIl0nKTtvLmZvckVhY2goRT0+e0UucmVtb3ZlQXR0cmlidXRl''@;'; put 'put ''KCJyb2xlIiksRS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQiKSxFLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1jb2xjb3VudCIpLEUucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpfSksYS5mb3JFYWNoKEU9PntFLnF1ZXJ5U2VsZWN0b3JBbGwoImJ1dHRvbiwg''@;'; put 'put ''aW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFt0YWJpbmRleF0sIFtvbmNsaWNrXSwgW2NvbnRlbnRlZGl0YWJsZV0iKS5sZW5ndGg+MCYmRS5yZW1vdmVBdHRyaWJ1dGUoInJvbGUiKX0pLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1thcmlhLXJvd2NvdW50PSItMSJdJykuZm9yRWFjaChF''@;'; put 'put ''PT57RS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQiKX0pLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInRhYmxlIikuZm9yRWFjaChFPT57RS5nZXRBdHRyaWJ1dGUoInJvbGUiKXx8RS5zZXRBdHRyaWJ1dGUoInJvbGUiLCJ0YWJsZSIpLEUucXVlcnlTZWxlY3RvckFsbCgidGgi''@;'; put 'put ''KS5mb3JFYWNoKFo9PntaLmdldEF0dHJpYnV0ZSgic2NvcGUiKXx8Wi5zZXRBdHRyaWJ1dGUoInNjb3BlIiwiY29sIil9KX0pLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtjb250ZW50ZWRpdGFibGVdIikuZm9yRWFjaChFPT57''@;'; put 'put ''aWYoIUUuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIikmJiFFLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iikpe2NvbnN0IE89RS50ZXh0Q29udGVudD8udHJpbSgpO08mJkUuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixPKX19KX07cigpLHNldFRpbWVvdXQociwxMDApLHNldFRp''@;'; put 'put ''bWVvdXQociw1MDApLHNldFRpbWVvdXQociwxZTMpLHNldFRpbWVvdXQociwyZTMpLHRoaXMuYXJpYUNoZWNrSW50ZXJ2YWx8fCh0aGlzLmFyaWFDaGVja0ludGVydmFsPXNldEludGVydmFsKHIsM2UzKSksdGhpcy5hcmlhT2JzZXJ2ZXJ8fCh0aGlzLmFyaWFPYnNlcnZlcj1uZXcgTXV0YXRp''@;'; put 'put ''b25PYnNlcnZlcihpPT57bGV0IG89ITE7aS5mb3JFYWNoKGE9PnsiYXR0cmlidXRlcyI9PT1hLnR5cGUmJigicm9sZSI9PT1hLmF0dHJpYnV0ZU5hbWV8fCJhcmlhLXJvd2NvdW50Ij09PWEuYXR0cmlidXRlTmFtZSkmJihvPSEwKSwiY2hpbGRMaXN0Ij09PWEudHlwZSYmYS5hZGRlZE5vZGVz''@;'; put 'put ''LmZvckVhY2gobD0+e2lmKGwubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSl7Y29uc3QgdT1sOyh1Lmhhc0F0dHJpYnV0ZSgicm9sZSIpfHx1Lmhhc0F0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIpKSYmKG89ITApfX0pfSksbyYmc2V0VGltZW91dChyLDUwKX0pLHRoaXMuYXJpYU9ic2Vy''@;'; put 'put ''dmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITAsYXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0ZXI6WyJyb2xlIiwiYXJpYS1yb3djb3VudCIsImFyaWEtY29sY291bnQiLCJhcmlhLW11bHRpc2VsZWN0YWJsZSJdfSkpfWluaXRTZXR1cChyLGk9MCl7''@;'; put 'put ''dmFyIG89dGhpcztpZih0aGlzLmdldGRhdGFFcnJvcnx8IXJ8fCFyLmRhdGEpcmV0dXJuO2lmKHRoaXMuaG90SW5zdGFuY2U9dGhpcy5ob3RUYWJsZUNvbXBvbmVudD8uaG90SW5zdGFuY2UsIXRoaXMuaG90SW5zdGFuY2UpcmV0dXJuIHZvaWQoaTw2MCYmc2V0VGltZW91dCgoKT0+dGhpcy5p''@;'; put 'put ''bml0U2V0dXAocixpKzEpLDUwKSk7dGhpcy5jb2xzPXIuZGF0YS5jb2xzLHRoaXMuZHNtZXRhPXIuZGF0YS5kc21ldGEsdGhpcy52ZXJzaW9ucz1yLmRhdGEudmVyc2lvbnN8fFtdO2NvbnN0IGE9dGhpcy5kc21ldGEuZmluZChlZT0+Ik5PVEVTIj09PWVlLk5BTUUpLGw9dGhpcy5kc21ldGEu''@;'; put 'put ''ZmluZChlZT0+IkREX0xPTkdERVNDIj09PWVlLk5BTUUpLHU9dGhpcy5kc21ldGEuZmluZChlZT0+IkREX1NIT1JUREVTQyI9PT1lZS5OQU1FKTt0aGlzLmRzTm90ZT1hJiZhLlZBTFVFP2EuVkFMVUU6bCYmbC5WQUxVRT9sLlZBTFVFOnUmJnUuVkFMVUU/dS5WQUxVRToiIjtjb25zdCBnPXRo''@;'; put 'put ''aXMuaG90SW5zdGFuY2UsRT1yLmRhdGEuYXBwcm92ZXJzO3RoaXMuY29scyYmKHRoaXMuaGVhZGVyQXJyYXk9KG49Pntjb25zdCBlPVtdO2ZvcihsZXQgdCBvZiBuKSJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09dC5OQU1FJiZlLnB1c2godC5OQU1FKTtyZXR1cm4gZX0pKHRo''@;'; put 'put ''aXMuY29scykpLEUuZm9yRWFjaChlZT0+e3RoaXMuYXBwcm92ZXJzLnB1c2goZWUuUEVSU09OTkFNRSl9KSx0aGlzLnRhYmxlVHJ1ZT0hMCx0aGlzLmxpYmRzPXIubGliZHMsdGhpcy5ob3RUYWJsZS5kYXRhPXIuZGF0YS5zYXNkYXRhLHRoaXMuaGVhZGVyQ29sdW1ucz1yLmRhdGEuc2FzcGFy''@;'; put 'put ''YW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSx0aGlzLmhlYWRlclBrcz1yLmRhdGEuc2FzcGFyYW1zWzBdLlBLLnNwbGl0KCIgIiksdGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZz0hIXIuZGF0YS5zYXNwYXJhbXNbMF0uQ0xTX0ZMQUcsdGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5Rmxh''@;'; put 'put ''ZyYmdGhpcy5zZXRSZXN0cmljdGlvbnMoe3Jlc3RyaWN0QWRkUm93OiEwLHJlbW92ZUVkaXRSZWNvcmRCdXR0b246ITAscmVtb3ZlQWRkUmVjb3JkQnV0dG9uOiEwfSksdGhpcy5jaGVja0VtcHR5Um93V2hlbkZpbHRlcigpLC0xIT09dGhpcy5oZWFkZXJDb2x1bW5zLmluZGV4T2YoIl9fX19f''@;'; put 'put ''REVMRVRFX19USElTX19SRUNPUkRfX19fXyIpJiYodGhpcy5oZWFkZXJDb2x1bW5zW3RoaXMuaGVhZGVyQ29sdW1ucy5pbmRleE9mKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iKV09IkRlbGV0ZT8iKSx0aGlzLmhlYWRlckFycmF5PXRoaXMuaGVhZGVyQ29sdW1ucy5zbGljZSgx''@;'; put 'put ''KSx0aGlzLmhlYWRlckNvbHVtbnMucHVzaChNbSksIiIhPT1yLmRhdGEuc2FzcGFyYW1zWzBdLkRUVkFSUyYmKHRoaXMuZGF0ZUhlYWRlcnM9ci5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMuc3BsaXQoIiAiKSksIiIhPT1yLmRhdGEuc2FzcGFyYW1zWzBdLlRNVkFSUyYmKHRoaXMudGltZUhl''@;'; put 'put ''YWRlcnM9ci5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMuc3BsaXQoIiAiKSksIiIhPT1yLmRhdGEuc2FzcGFyYW1zWzBdLkRUVE1WQVJTJiYodGhpcy5kYXRlVGltZUhlYWRlcnM9ci5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUy5zcGxpdCgiICIpKSxyLmRhdGEueGxfcnVsZXMubGVuZ3Ro''@;'; put 'put ''PjAmJih0aGlzLnhsUnVsZXM9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShyLmRhdGEueGxfcnVsZXMpKSx0aGlzLmRjVmFsaWRhdG9yPW5ldyBiemUoci5kYXRhLnNhc3BhcmFtc1swXSxyLmRhdGEuJHNhc2RhdGEsdGhpcy5jb2xzLHIuZGF0YS5kcXJ1bGVzLHIuZGF0YS5kcWRhdGEp''@;'; put 'put ''O2NvbnN0IE89X3Eoci5kYXRhLmRxcnVsZXMpO3RoaXMuY2VsbFZhbGlkYXRpb249dGhpcy5kY1ZhbGlkYXRvci5nZXRSdWxlcygpLHRoaXMuZGF0YVNvdXJjZT1yLmRhdGEuc2FzZGF0YSx0aGlzLiRkYXRhRm9ybWF0cz1yLmRhdGEuJHNhc2RhdGEsdGhpcy5kYXRhU291cmNlUmF3PXRoaXMu''@;'; put 'put ''aGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlKTtmb3IoY29uc3QgZWUgb2YgdGhpcy5kYXRhU291cmNlKWVlW01tXT0iVSI7KChuLGUsdCxyLGksbyk9Pntjb25zdCBhPWUuZmlsdGVyKGw9PiJIQVJERk9STVVMQSI9PT1sLlJVTEVfVFlQRXx8IlNPRlRGT1JNVUxBIj09''@;'; put 'put ''PWwuUlVMRV9UWVBFKTswPT09YS5sZW5ndGh8fG4uZm9yRWFjaCgobCx1KT0+e2Zvcihjb25zdCBnIG9mIGEpe2NvbnN0IEU9ci5maW5kKE89PmkuZXZlcnkoWj0+T1taXT09PWxbWl0pKTtsW2cuQkFTRV9DT0xdPXV6ZShnLlJVTEVfVkFMVUUse2NvbHVtbk5hbWVzOnQscm93SW5kZXg6dSx1''@;'; put 'put ''c2VyTmFtZTpvLG9yaWdWYWx1ZTpFP0VbZy5CQVNFX0NPTF06dm9pZCAwfSl9fSl9KSh0aGlzLmRhdGFTb3VyY2Usci5kYXRhLmRxcnVsZXMsdGhpcy5oZWFkZXJDb2x1bW5zLHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZD8/dGhpcy5kYXRhU291cmNlLHRoaXMuaGVhZGVyUGtzLHRoaXMudXNl''@;'; put 'put ''clNlcnZpY2UudXNlcj8udXNlcm5hbWU/PyIiKSx0aGlzLmF1dG9Fc2NhcGVkQ2VsbHM9bmV3IE1hcCx0aGlzLmRhdGFTb3VyY2UuZm9yRWFjaCgoZWUsdmUpPT57Y29uc3QgTWU9cXgoZWUsdGhpcy5oZWFkZXJQa3MpO2Zvcihjb25zdCBIZSBvZiB0aGlzLmhlYWRlckNvbHVtbnMpe2lmKE8u''@;'; put 'put ''aW5jbHVkZXMoSGUpfHwheXEodGhpcy5jb2xzLEhlKSljb250aW51ZTtjb25zdHt2YWx1ZTpXZSx3YXNFc2NhcGVkOmF0fT13emUoZWVbSGVdKTthdCYmKGVlW0hlXT1XZSx0aGlzLmRhdGFTb3VyY2VSYXdbdmVdJiYodGhpcy5kYXRhU291cmNlUmF3W3ZlXVtIZV09V2UpLFRnZSh0aGlzLmF1''@;'; put 'put ''dG9Fc2NhcGVkQ2VsbHMsTWUsSGUpKX19KSx0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLHRoaXMub3ZlcmxheUZvcm11bGFSYXdWYWx1ZXNPblVuY2hhbmdlZCh0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQpO2Zv''@;'; put 'put ''cihsZXQgZWU9MDtlZTx0aGlzLmhlYWRlckNvbHVtbnMubGVuZ3RoO2VlKyspdGhpcy5ob3REYXRhU2NoZW1hW3RoaXMuY2VsbFZhbGlkYXRpb25bZWVdLmRhdGFdPUVRdCh0aGlzLmNlbGxWYWxpZGF0aW9uW2VlXS50eXBlLHRoaXMuY2VsbFZhbGlkYXRpb25bZWVdLHRoaXMuZGNWYWxpZGF0''@;'; put 'put ''b3I/LmdldERxRGV0YWlscygpKTt0aGlzLmNoZWNrUm93TGltaXQoKSxnLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxjb2xIZWFkZXJzOmdBKHRoaXMuaGVhZGVyQ29sdW1ucyx0aGlzLmNvbHMsdGhpcy51c2VMYWJlbHMpLGNvbHVtbnM6dGhpcy5jZWxsVmFsaWRhdGlv''@;'; put 'put ''bixoZWlnaHQ6dGhpcy5ob3RUYWJsZS5oZWlnaHQsZm9ybXVsYXM6dGhpcy5ob3RUYWJsZS5mb3JtdWxhcyxkYXRhRG90Tm90YXRpb246ITEsY29tbWVudHM6e3JlYWRPbmx5OiEwfSxzdHJldGNoSDoiYWxsIixyZWFkT25seTp0aGlzLmhvdFRhYmxlLnJlYWRPbmx5LGhpZGRlbkNvbHVtbnM6''@;'; put 'put ''e2luZGljYXRvcnM6ITAsY29sdW1uczp0aGlzLmRjVmFsaWRhdG9yLmdldEhpZGRlbkNvbHVtbnMoKX0sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oZWUsdmUpe3JldHVybiAwPT09dmU/NjA6ZWU+NTAwPzUwMDplZX0sY29weVBhc3RlOnRoaXMuaG90VGFibGUuY29weVBhc3RlLG1hbnVhbENv''@;'; put 'put ''bHVtbkZyZWV6ZTohMSxtdWx0aUNvbHVtblNvcnRpbmc6ITAsbWFudWFsQ29sdW1uUmVzaXplOiEwLGZpbHRlcnM6ITEsbWFudWFsUm93UmVzaXplOiEwLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OjEwMCxyb3dIZWFkZXJzOmVlPT57Y29uc3QgdmU9Zy50b1BoeXNpY2FsUm93KGVlKSxN''@;'; put 'put ''ZT1udWxsPT09dmU/dm9pZCAwOnRoaXMuZGF0YVNvdXJjZVt2ZV07cmV0dXJuIE1lJiYobj0+e3N3aXRjaChuKXtjYXNlIkEiOnJldHVybiIrIjtjYXNlIkQiOnJldHVybiItIjtjYXNlIk0iOnJldHVybiJceGIxIjtjYXNlIlUiOnJldHVybiIifX0pKHVLKE1lLHRoaXMuZGF0YVNvdXJjZVVu''@;'; put 'put ''Y2hhbmdlZD8/dGhpcy5kYXRhU291cmNlLHRoaXMuaGVhZGVyUGtzKSl8fCIgIn0sYWZ0ZXJHZXRSb3dIZWFkZXI6KGVlLHZlKT0+e2NvbnN0IE1lPWcudG9QaHlzaWNhbFJvdyhlZSksSGU9bnVsbD09PU1lP3ZvaWQgMDp0aGlzLmRhdGFTb3VyY2VbTWVdO2lmKCFIZSlyZXR1cm47Y29uc3Qg''@;'; put 'put ''V2U9dUsoSGUsdGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkPz90aGlzLmRhdGFTb3VyY2UsdGhpcy5oZWFkZXJQa3MpO3ZlLmNsYXNzTGlzdC5yZW1vdmUoInJvd1N0YXR1c0FkZGVkIiwicm93U3RhdHVzRGVsZXRlZCIsInJvd1N0YXR1c01vZGlmaWVkIiksIkEiPT09V2UmJnZlLmNsYXNzTGlz''@;'; put 'put ''dC5hZGQoInJvd1N0YXR1c0FkZGVkIiksIkQiPT09V2UmJnZlLmNsYXNzTGlzdC5hZGQoInJvd1N0YXR1c0RlbGV0ZWQiKSwiTSI9PT1XZSYmdmUuY2xhc3NMaXN0LmFkZCgicm93U3RhdHVzTW9kaWZpZWQiKX0scm93SGVhZGVyV2lkdGg6MjAscm93SGVpZ2h0czoyNCxtYXhSb3dzOk1hdGgu''@;'; put 'put ''bWF4KHRoaXMuZGF0YVNvdXJjZS5sZW5ndGgsdGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZHx8MS8wKSxpbnZhbGlkQ2VsbENsYXNzTmFtZToiaHRJbnZhbGlkIixhdXRvV3JhcFJvdzohMSxhdXRvV3JhcENvbDohMSxiaW5kUm93c1dpdGhIZWFkZXJzOiExLGRy''@;'; put 'put ''b3Bkb3duTWVudTp7aXRlbXM6e21ha2VfcmVhZF9vbmx5OntuYW1lOiJtYWtlX3JlYWRfb25seSJ9LGFsaWdubWVudDp7bmFtZToiYWxpZ25tZW50In0sc3AxOntuYW1lOiItLS0tLS0tLS0ifSxpbmZvOntuYW1lOiJ0ZXN0IGluZm8iLGlzQ29tbWFuZDohMSxyZW5kZXJlcjooZWUsdmUsTWUs''@;'; put 'put ''SGUsV2UsYXQpPT57Y29uc3QgQ3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCBLdCxBdD0iIixxdD0iTm8gaW5mbyBmb3VuZCI7aWYodGhpcy5ob3RJbnN0YW5jZSl7Y29uc3QgZ249dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpfHxbXSxUbj1nbj9nblswXVsxXTot''@;'; put 'put ''MTtBdD10aGlzLmhvdEluc3RhbmNlPy5jb2xUb1Byb3AoVG4pLEt0PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW0F0XTtjb25zdHtoYXJkUmVnZXhWYWx1ZTpDbixzb2Z0UmVnZXhWYWx1ZTpxcn09dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UmVnZXhSdWxlVmFsdWVzKEF0KXx8e30sJG49dGhpcy5k''@;'; put 'put ''Y1ZhbGlkYXRvcj8uZ2V0Rm9ybXVsYVJ1bGVWYWx1ZShBdCk7cXQ9U1plKEF0LEt0LENuLHFyLCRuKX1yZXR1cm4gQ3QuaW5uZXJIVE1MPXF0LChuPT57Zm9yKGNvbnN0IGUgb2YgcVh0KW4uYWRkRXZlbnRMaXN0ZW5lcihlLHQ9PnQuc3RvcFByb3BhZ2F0aW9uKCkpfSkoQ3QpLEN0fX19fSxk''@;'; put 'put ''YXRhU2NoZW1hOnRoaXMuaG90RGF0YVNjaGVtYSxjb250ZXh0TWVudTp0aGlzLmhvdFRhYmxlLnNldHRpbmdzLmNvbnRleHRNZW51LGN1cnJlbnRIZWFkZXJDbGFzc05hbWU6ImN1c3RvbUgiLGFmdGVyR2V0Q29sSGVhZGVyOihlZSx2ZSk9Pntjb25zdCBNZT10aGlzLmNvbHVtbkhlYWRlcltl''@;'; put 'put ''ZV0sSGU9TWUmJnRoaXMuaXNDb2xQayhNZSksV2U9TWUmJnRoaXMuaXNSZWFkb25seUNvbChNZSk7SGUmJnZlLmNsYXNzTGlzdC5hZGQoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIpLFdlJiYhSGUmJnZlLmNsYXNzTGlzdC5hZGQoInJlYWRvbmx5Q2VsbCIpLDA9PT1lZSYmdmUuY2xhc3NMaXN0''@;'; put 'put ''LmFkZCgiZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSIpLHZlLmNsYXNzTGlzdC5hZGQoVW4uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX0sYWZ0ZXJHZXRDZWxsTWV0YTooZWUsdmUsTWUpPT57Y29uc3QgSGU9dmUmJnRoaXMuaXNSZWFkb25seUNvbCh2ZSksV2U9dGhpcy5kdXBs''@;'; put 'put ''aWNhdGVQa0luZGV4ZXMuaW5jbHVkZXMoZWUpJiZ2ZT49MSYmdmU8PXRoaXMucmVhZE9ubHlGaWVsZHMsYXQ9TWUuY2xhc3NOYW1lfHwiIjtsZXQgQ3Q7Q3Q9QXJyYXkuaXNBcnJheShhdCk/Wy4uLmF0XTphdC5zcGxpdCgiICIpLmZpbHRlcihBdD0+QXQubGVuZ3RoPjApLEhlJiYhQ3QuaW5j''@;'; put 'put ''bHVkZXMoInJlYWRvbmx5Q2VsbCIpJiZDdC5wdXNoKCJyZWFkb25seUNlbGwiKSxXZSYmKEN0LmluY2x1ZGVzKCJkYy1pbnZhbGlkLWNlbGwiKXx8Q3QucHVzaCgiZGMtaW52YWxpZC1jZWxsIiksTWUudmFsaWQ9ITEsTWUuZHVwS2V5PSEwKSxDdC5sZW5ndGg+MCYmKE1lLmNsYXNzTmFtZT1D''@;'; put 'put ''dC5qb2luKCIgIikpfX0sITEpLHRoaXMubWFya092ZXJ3cml0dGVuQ2VsbHMoKSx0aGlzLnJlc29sdmVQa0Zvcm11bGFTZWVkVmFsdWVzKCksdGhpcy5ob3RUYWJsZS5oaWRkZW49ITEsdGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMCksdGhpcy5xdWVyeVRleHQ9ci5kYXRh''@;'; put 'put ''LnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCx0aGlzLmNvbHVtbkhlYWRlcj1yLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSx0aGlzLmNvbHVtbkhlYWRlclswXT0iRGVsZXRlPyIsdGhpcy5yZWFkT25seUZpZWxkcz1yLmRhdGEuc2FzcGFyYW1zWzBdLlBLQ05ULGcu''@;'; put 'put ''YWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLChlZSx2ZSxNZSxIZSxXZSxhdCk9PntlZT09PU1lJiZ2ZT09PUhlJiYhMT09PXRoaXMuaG90VGFibGUucmVhZE9ubHkmJnRoaXMuZHluYW1pY0NlbGxWYWxpZGF0aW9uKGVlLHZlKX0pLGcuYWRkSG9vaygiYWZ0ZXJCZWdpbkVkaXRpbmciLCgpPT57''@;'; put 'put ''dGhpcy5zZXRDZWxsRmlsdGVyKCExKX0pLGcuYWRkSG9vaygiYmVmb3JlS2V5RG93biIsKCk9Pnt0aGlzLnNldENlbGxGaWx0ZXIoITApfSksZy5hZGRIb29rKCJiZWZvcmVDaGFuZ2UiLChlZSx2ZSk9PntpZihlZSlmb3IoY29uc3QgTWUgb2YgZWUpe2lmKCFNZSljb250aW51ZTtjb25zdFtI''@;'; put 'put ''ZSxXZSwsYXRdPU1lLEN0PSJzdHJpbmciPT10eXBlb2YgV2U/V2U6Zy5jb2xUb1Byb3AoV2UpLEF0PXRoaXMuZGNWYWxpZGF0b3I/LmdldFJvdW5kRGlnaXRzKEN0KTtpZih2b2lkIDAhPT1BdCl7Y29uc3QgZ249TnVtYmVyKGF0KTtudWxsIT09YXQmJiIiIT09YXQmJiFpc05hTihnbikmJihN''@;'; put 'put ''ZVszXT1NUXQoZ24sQXQpKX1jb25zdCBLdD10aGlzLmRhdGFTb3VyY2VbZy50b1BoeXNpY2FsUm93KEhlKV07aWYoIUt0KWNvbnRpbnVlO2NvbnN0IHF0PXF4KEt0LHRoaXMuaGVhZGVyUGtzKTsicmV2ZXJ0Ij09PXZlJiYic3RyaW5nIj09dHlwZW9mIGF0JiZhdC5zdGFydHNXaXRoKCInPSIp''@;'; put 'put ''P1RnZSh0aGlzLmF1dG9Fc2NhcGVkQ2VsbHMscXQsQ3QpOlN6ZSh0aGlzLmF1dG9Fc2NhcGVkQ2VsbHMscXQsQ3QpfX0pLGcuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLChlZSx2ZSk9PntpZigiZWRpdCI9PT12ZSl7Y29uc3QgTWU9dGhpcy5ob3RJbnN0YW5jZSxIZT1lZVswXVswXSxXZT1lZVsw''@;'; put 'put ''XVsxXSxhdD1NZS5wcm9wVG9Db2woV2UpLEN0PU1lLmdldENlbGxNZXRhKEhlLGF0KTtDdCYmITE9PT1DdC5maWx0ZXImJk1lLnNldENlbGxNZXRhKEhlLGF0LCJmaWx0ZXIiLCEwKSwiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIj09PVdlJiZNZS52YWxpZGF0ZVJvd3MoW0hlXSwo''@;'; put 'put ''KT0+TWUucmVuZGVyKCkpLHRoaXMuZXhlY3V0ZUR5bmFtaWNDZWxsVmFsaWRhdGlvbklmQXBwbGljYWJsZShXZSxhdCxIZSl9fSksZy5hZGRIb29rKCJhZnRlckNoYW5nZSIsKGVlLHZlKT0+e2lmKCFlZXx8ImxvYWREYXRhIj09PXZlfHwiZWRpdFN0YXR1cyI9PT12ZSlyZXR1cm47Y29uc3Qg''@;'; put 'put ''TWU9dGhpcy5nZXRSZXZlcnRhYmxlQ29sdW1uTmFtZXMoKSxIZT1uZXcgU2V0O2Zvcihjb25zdCBXZSBvZiBlZSl7aWYoIVdlKWNvbnRpbnVlO2NvbnN0W2F0LEN0XT1XZTtpZihDdD09PU1tKWNvbnRpbnVlO2NvbnN0IEF0PWcudG9QaHlzaWNhbFJvdyhhdCk7bnVsbCE9PUF0JiYoSGUuYWRk''@;'; put 'put ''KEF0KSxNZS5pbmNsdWRlcyhDdCkmJnRoaXMuc3luY092ZXJ3cml0dGVuQ29tbWVudEZvckNlbGwoQXQsQ3QpKX1mb3IoY29uc3QgV2Ugb2YgSGUpdGhpcy51cGRhdGVFZGl0U3RhdHVzRm9yUm93KFdlKX0pLGcuYWRkSG9vaygiYWZ0ZXJQYXN0ZSIsZnVuY3Rpb24oKXt2YXIgZWU9Q3IoZnVu''@;'; put 'put ''Y3Rpb24qKHZlLE1lKXtpZihvLmhvdFRhYmxlLnJlYWRPbmx5KXJldHVybjtjb25zdCBIZT1NZS5tYXAoV2U9Pih7c3RhcnRSb3c6V2Uuc3RhcnRSb3csc3RhcnRDb2w6V2Uuc3RhcnRDb2wsZW5kUm93OldlLmVuZFJvdyxlbmRDb2w6V2UuZW5kQ29sfSkpO3lpZWxkIG8ucnVuQnVsa1ZhbGlk''@;'; put 'put ''YXRpb24oZyxIZSwicGFzdGUiKX0pO3JldHVybiBmdW5jdGlvbih2ZSxNZSl7cmV0dXJuIGVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLGcuYWRkSG9vaygiYWZ0ZXJBdXRvZmlsbCIsZnVuY3Rpb24oKXt2YXIgZWU9Q3IoZnVuY3Rpb24qKHZlLE1lLEhlKXtpZihvLmhvdFRhYmxlLnJl''@;'; put 'put ''YWRPbmx5KXJldHVybjtjb25zdHtmcm9tOldlLHRvOmF0fT1IZTt5aWVsZCBvLnJ1bkJ1bGtWYWxpZGF0aW9uKGcsW3tzdGFydFJvdzpNYXRoLm1pbihXZS5yb3csYXQucm93KSxzdGFydENvbDpNYXRoLm1pbihXZS5jb2wsYXQuY29sKSxlbmRSb3c6TWF0aC5tYXgoV2Uucm93LGF0LnJvdyks''@;'; put 'put ''ZW5kQ29sOk1hdGgubWF4KFdlLmNvbCxhdC5jb2wpfV0sImF1dG9maWxsIil9KTtyZXR1cm4gZnVuY3Rpb24odmUsTWUsSGUpe3JldHVybiBlZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSxnLmFkZEhvb2soImFmdGVyUmVuZGVyIixlZT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHko''@;'; put 'put ''KX0pLGcuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0sNTApfSksZy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsZWU9PntpZihlZT50aGlzLmRhdGFTb3VyY2UubGVuZ3RoKXtjb25zdCB2ZT1kb2N1bWVudC5x''@;'; put 'put ''dWVyeVNlbGVjdG9yKCIud3RIb2xkZXIiKTtzZXRUaW1lb3V0KCgpPT57dmUmJih2ZS5zY3JvbGxUb3A9dmUuc2Nyb2xsSGVpZ2h0KX0pfX0pLGcuYWRkSG9vaygiYmVmb3JlQ3JlYXRlUm93IiwoZWUsdmUsTWUpPT57aWYoIXRoaXMuYWRkaW5nTmV3Um93JiYiQ29udGV4dE1lbnUuaW5zZXJ0''@;'; put 'put ''X3Jvd19hYm92ZSIhPT1NZSYmIkNvbnRleHRNZW51Lmluc2VydF9yb3dfYmVsb3ciIT09TWUpcmV0dXJuITF9KSxnLmFkZEhvb2soImFmdGVyVmFsaWRhdGUiLChlZSx2ZSxNZSxIZSk9PntpZihlZXx8IU1nZSh2ZSkpcmV0dXJuO2NvbnN0IFdlPSJzdHJpbmciPT10eXBlb2YgSGU/SGU6Zy5j''@;'; put 'put ''b2xUb1Byb3AoSGUpLGF0PXRoaXMuZGNWYWxpZGF0b3I/LmdldE5vdE51bGxEZWZhdWx0VmFsdWUoV2UpO3ZvaWQgMCE9PWF0JiZzZXRUaW1lb3V0KCgpPT57TWdlKGcuZ2V0RGF0YUF0Um93UHJvcChNZSxXZSkpJiZnLnNldERhdGFBdFJvd1Byb3AoTWUsV2UsYXQsImF1dG9Qb3B1bGF0ZSIp''@;'; put 'put ''fSwwKX0pO2NvbnN0IFo9KGVlLHZlLE1lKT0+ZWUubWFwKChIZSxXZSk9PntpZih2b2lkIDAhPT1NZSYmV2U+PU1lKXJldHVybiBIZTtjb25zdCBhdD10aGlzLmNvbHVtbkhlYWRlclt2ZStXZV0sQ3Q9Im51bSI9PT10aGlzLiRkYXRhRm9ybWF0cz8udmFyc1thdF0/LnR5cGUsQXQ9KDAseTQu''@;'; put 'put ''aXNTcGVjaWFsTWlzc2luZykoSGUpO3JldHVybiBDdCYmIWlzTmFOKEhlKSYmIUF0JiYoSGUqPTEpLEhlfSk7Zy5hZGRIb29rKCJhZnRlckNoYW5nZSIsKGVlLHZlKT0+e2lmKGVlJiYibG9hZERhdGEiIT09dmUmJiJyZXNvbHZlUGtGb3JtdWxhIiE9PXZlKWZvcihjb25zdCBNZSBvZiBlZSl7''@;'; put 'put ''aWYoIU1lKWNvbnRpbnVlO2NvbnN0W0hlLFdlLCxhdF09TWU7aWYoInN0cmluZyIhPXR5cGVvZiBhdHx8IWF0LnN0YXJ0c1dpdGgoIj0iKSljb250aW51ZTtjb25zdCBDdD0ic3RyaW5nIj09dHlwZW9mIFdlP1dlOmcuY29sVG9Qcm9wKFdlKTt0aGlzLmhlYWRlclBrcy5pbmNsdWRlcyhDdCkm''@;'; put 'put ''JnNldFRpbWVvdXQoKCk9Pntjb25zdCBBdD1nLmdldERhdGFBdFJvd1Byb3AoSGUsQ3QpO2cuc2V0RGF0YUF0Um93UHJvcChIZSxDdCxBdCwicmVzb2x2ZVBrRm9ybXVsYSIpfSwwKX19KSxnLmFkZEhvb2soImJlZm9yZVBhc3RlIiwoZWUsdmUpPT57Y29uc3QgTWU9dmVbMF0uc3RhcnRDb2ws''@;'; put 'put ''SGU9dmVbMF0uc3RhcnRSb3c7Zm9yKGxldCBXZT0wO1dlPGVlLmxlbmd0aDtXZSsrKWVlW1dlXT1aKGVlW1dlXSxNZSksZWVbV2VdPWVlW1dlXS5tYXAoKGF0LEN0KT0+eXEodGhpcy5jb2xzLHRoaXMuY29sdW1uSGVhZGVyW01lK0N0XSkmJiJzdHJpbmciPT10eXBlb2YgYXQmJmF0LnRyaW0o''@;'; put 'put ''KS5zdGFydHNXaXRoKCI9Iik/aHplKGF0LnRyaW0oKSx0aGlzLmhlYWRlckNvbHVtbnMsSGUrV2UpOmF0KX0pLHRoaXMucGFzdGVMaXN0ZW5lciYmZy5yb290RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwYXN0ZSIsdGhpcy5wYXN0ZUxpc3RlbmVyKSx0aGlzLnBhc3RlTGlzdGVuZXI9''@;'; put 'put ''ZWU9Pntjb25zdCB2ZT1nLmdldEFjdGl2ZUVkaXRvcigpO2lmKCF2ZXx8bnVsbD09PXZlLnJvd3x8ZWUudGFyZ2V0IT09dmUuVEVYVEFSRUEpcmV0dXJuO2lmKCF5cSh0aGlzLmNvbHMsdGhpcy5jb2x1bW5IZWFkZXJbdmUuY29sXSkpcmV0dXJuO2NvbnN0IEhlPWVlLmNsaXBib2FyZERhdGE/''@;'; put 'put ''LmdldERhdGEoInRleHQvcGxhaW4iKT8/IiI7SGUudHJpbSgpLnN0YXJ0c1dpdGgoIj0iKSYmKGVlLnByZXZlbnREZWZhdWx0KCksdmUuVEVYVEFSRUEudmFsdWU9aHplKEhlLnRyaW0oKSx0aGlzLmhlYWRlckNvbHVtbnMsdmUucm93KSx2ZS5URVhUQVJFQS5kaXNwYXRjaEV2ZW50KG5ldyBF''@;'; put 'put ''dmVudCgiaW5wdXQiLHtidWJibGVzOiEwfSkpKX0sZy5yb290RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJwYXN0ZSIsdGhpcy5wYXN0ZUxpc3RlbmVyKSxnLmFkZEhvb2soImJlZm9yZUF1dG9maWxsIiwoZWUsdmUpPT57Y29uc3QgTWU9dmUuZnJvbS5jb2w7cmV0dXJuIGVlLm1hcChIZT0+''@;'; put 'put ''WihIZSxNZSkpfSksZy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsKCk9Pnt0aGlzLmNoZWNrUm93TGltaXQoKX0pLGcuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLCgpPT57dGhpcy5jaGVja1Jvd0xpbWl0KCl9KSx0aGlzLnVwbG9hZFVybD0ic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSIs''@;'; put 'put ''bnVsbCE9PXRoaXMucmVjb3JkQWN0aW9uJiYoIkFERCI9PT10aGlzLnJlY29yZEFjdGlvbj8odGhpcy5hZGRSZWNvcmQoKSx0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTEsITApKToxPT09dGhpcy5kYXRhU291cmNlLmxlbmd0aCYmdGhpcy5lZGl0UmVjb3Jk''@;'; put 'put ''KG51bGwsMCkpLHIuZGF0YS5xdWVyeS5sZW5ndGg+MCYmKCJob21lIj09PVVuLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Vbi5yb290UGFyYW0pJiYwPT09VW4uZWRpdG9yLmZpbHRlci5jbGF1c2VzLmxlbmd0aCYmKFVuLmVkaXRvci5maWx0ZXIucXVlcnk9dGhpcy5oZWxwZXJTZXJ2aWNlLmRl''@;'; put 'put ''ZXBDbG9uZShyLmRhdGEucXVlcnkpLFVuLmVkaXRvci5maWx0ZXIubGliZHM9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLmluaXRpYWxpemVHbG9iYWxGaWx0ZXJDbGF1c2UoImVkaXRvciIsdGhpcy5jb2xzKSksZy5yZW5kZXIoKSx0aGlz''@;'; put 'put ''Lm9ic2VydmVHcmlkUmVzaXplKCksc2V0VGltZW91dCgoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0sNTAwKSx0aGlzLmlzVmFFbWJlZCYmKHRoaXMudmFNZXNzYWdpbmcudmlzaWJsZUNvbHVtbnMmJih0aGlzLmFwcGx5VmFDb2x1bW5WaXNpYmlsaXR5KG5ldyBTZXQodGhpcy52''@;'; put 'put ''YU1lc3NhZ2luZy52aXNpYmxlQ29sdW1ucykpLHRoaXMuaG90SW5zdGFuY2UmJnRoaXMuaG90SW5zdGFuY2UucmVuZGVyKCkpLHRoaXMuc3Vic2NyaWJlVG9WYU1lc3NhZ2VzKCksdGhpcy5oYW5kbGVWYU1lc3NhZ2UoKSl9c3Vic2NyaWJlVG9WYU1lc3NhZ2VzKCl7dGhpcy52YVVuc3Vic2Ny''@;'; put 'put ''aWJlfHwodGhpcy52YVVuc3Vic2NyaWJlPXRoaXMudmFNZXNzYWdpbmcub25EYXRhKCgpPT50aGlzLmhhbmRsZVZhTWVzc2FnZSgpKSl9aGFuZGxlVmFNZXNzYWdlKCl7Y29uc3Qgcj10aGlzLnZhTWVzc2FnaW5nLmxhdGVzdE1lc3NhZ2UoKTtpZighcnx8IXRoaXMubGliZHN8fCF0aGlzLmNl''@;'; put 'put ''bGxWYWxpZGF0aW9ufHx0aGlzLmNlbGxWYWxpZGF0aW9uLmxlbmd0aDw9MSlyZXR1cm47Y29uc3QgaT10aGlzLnZhRmlsdGVyLmJ1aWxkTGFiZWxUb1Zhck1hcCh0aGlzLmNlbGxWYWxpZGF0aW9uLHRoaXMuY29sdW1uSGVhZGVyKSxvPXRoaXMudmFNZXNzYWdpbmcuZGF0YUNvbHVtbnMocik7''@;'; put 'put ''bGV0IGE9ITE7aWYoby5sZW5ndGg+MCl7Y29uc3QgZz1uZXcgU2V0O2Zvcihjb25zdHtjb2x1bW46RX1vZiBvKXtjb25zdCBPPShFLmxhYmVsPz9FLm5hbWU/PyIiKS50b1N0cmluZygpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLFo9aS5nZXQoTyk7WiYmZy5hZGQoWil9dGhpcy52YU1lc3NhZ2lu''@;'; put 'put ''Zy52aXNpYmxlQ29sdW1ucz1BcnJheS5mcm9tKGcpLGE9dGhpcy5hcHBseVZhQ29sdW1uVmlzaWJpbGl0eShnKX1hJiZ0aGlzLmhvdEluc3RhbmNlJiZ0aGlzLmhvdEluc3RhbmNlLnJlbmRlcigpLHRoaXMudXBkYXRlVmFGaWx0ZXJUZXh0KHIpO2NvbnN0IGw9dGhpcy52YUZpbHRlci5idWls''@;'; put 'put ''ZENsYXVzZXMocixpLHRoaXMuY29scyksdT10aGlzLnZhRmlsdGVyLnNpZ25hdHVyZShsKTtpZih1PT09dGhpcy52YU1lc3NhZ2luZy5maWx0ZXJTaWduYXR1cmUpcmV0dXJuInBlbmRpbmciPT09dGhpcy52YUZpbHRlclN0YXR1cyYmKHRoaXMudmFGaWx0ZXJTdGF0dXM9ImlkbGUiKSx2b2lk''@;'; put 'put ''KHRoaXMudmFQZW5kaW5nQ2xhdXNlcz1udWxsKTt0aGlzLnZhUGVuZGluZ0NsYXVzZXM9bCx0aGlzLnZhUGVuZGluZ1NpZ25hdHVyZT11LHRoaXMudmFGaWx0ZXJTdGF0dXM9InBlbmRpbmciLHRoaXMudmFBdXRvQXBwbHkmJnRoaXMuaG90VGFibGUucmVhZE9ubHkmJnRoaXMuc2NoZWR1bGVW''@;'; put 'put ''YUZpbHRlckFwcGx5KCl9c2NoZWR1bGVWYUZpbHRlckFwcGx5KCl7dGhpcy52YURlYm91bmNlVGltZXImJmNsZWFyVGltZW91dCh0aGlzLnZhRGVib3VuY2VUaW1lciksdGhpcy52YURlYm91bmNlVGltZXI9c2V0VGltZW91dCgoKT0+e3RoaXMudmFEZWJvdW5jZVRpbWVyPXZvaWQgMCx0aGlz''@;'; put 'put ''LmFwcGx5UGVuZGluZ1ZhRmlsdGVyKCl9LGUuVkFfREVCT1VOQ0VfTVMpfWFwcGx5VmFGaWx0ZXIocixpKXt2YXIgbz10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtpZighby52YUFwcGx5aW5nRmlsdGVyKXtvLnZhQXBwbHlpbmdGaWx0ZXI9ITAsby52YUZpbHRlclN0YXR1cz0ibG9hZGlu''@;'; put 'put ''ZyIsby52YU1lc3NhZ2luZy5maWx0ZXJTaWduYXR1cmU9aTt0cnl7aWYoMD09PXIubGVuZ3RoKXJldHVybiB0eXBlb2Ygby5maWx0ZXJfcGs+InUiP3ZvaWQoby52YUZpbHRlclN0YXR1cz0iaWRsZSIpOnZvaWQoeWllbGQgby5yZWxvYWRFZGl0b3JSb3V0ZSgiL2VkaXRvci8iK28ubGliZHMp''@;'; put 'put ''KTtjb25zdCBhPXlpZWxkIG8uc2FzU3RvcmVTZXJ2aWNlLnNhdmVRdWVyeShvLmxpYmRzLHIpLGw9YT8ucmVzdWx0Py5bMF0/LkZJTFRFUl9SSyx1PWE/LnJlc3VsdD8uWzBdPy5GSUxURVJfVEFCTEU7aWYodm9pZCAwPT09bHx8dm9pZCAwPT09dSlyZXR1cm4gdm9pZChvLnZhRmlsdGVyU3Rh''@;'; put 'put ''dHVzPSJpZGxlIik7eWllbGQgby5yZWxvYWRFZGl0b3JSb3V0ZSgiL2VkaXRvci8iK3UrIi8iK2wpfWNhdGNoe28udmFGaWx0ZXJTdGF0dXM9ImlkbGUifWZpbmFsbHl7by52YUFwcGx5aW5nRmlsdGVyPSExfX19KSgpfWFwcGx5UGVuZGluZ1ZhRmlsdGVyKCl7aWYoIXRoaXMudmFQZW5kaW5n''@;'; put 'put ''Q2xhdXNlc3x8IXRoaXMuaG90VGFibGUucmVhZE9ubHkpcmV0dXJuO2NvbnN0IHI9dGhpcy52YVBlbmRpbmdDbGF1c2VzLGk9dGhpcy52YVBlbmRpbmdTaWduYXR1cmU7dGhpcy52YVBlbmRpbmdDbGF1c2VzPW51bGwsdGhpcy5hcHBseVZhRmlsdGVyKHIsaSl9dG9nZ2xlVmFBdXRvQXBwbHko''@;'; put 'put ''KXtVbi52YUFwcGx5TW9kZT10aGlzLnZhQXV0b0FwcGx5PyJjb25maXJtIjoibGl2ZSIsdGhpcy52YUF1dG9BcHBseSYmInBlbmRpbmciPT09dGhpcy52YUZpbHRlclN0YXR1cyYmdGhpcy5hcHBseVBlbmRpbmdWYUZpbHRlcigpfXJlbG9hZEVkaXRvclJvdXRlKHIpe3ZhciBpPXRoaXM7cmV0''@;'; put 'put ''dXJuIENyKGZ1bmN0aW9uKigpe3lpZWxkIGkucm91dGVyLm5hdmlnYXRlKFsiLyJdLHtza2lwTG9jYXRpb25DaGFuZ2U6ITAscXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSkseWllbGQgaS5yb3V0ZXIubmF2aWdhdGUoW3JdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9''@;'; put 'put ''KX0pKCl9YXBwbHlWYUNvbHVtblZpc2liaWxpdHkocil7Y29uc3QgaT10aGlzLmhvdEluc3RhbmNlO2lmKCFpKXJldHVybiExO2NvbnN0IG89aS5nZXRQbHVnaW4oImhpZGRlbkNvbHVtbnMiKTtpZighbylyZXR1cm4hMTtjb25zdCBhPXRoaXMuZGNWYWxpZGF0b3I/LmdldEhpZGRlbkNvbHVt''@;'; put 'put ''bnMoKXx8W10sbD1bXSx1PVtdO2ZvcihsZXQgZz0xO2c8dGhpcy5jZWxsVmFsaWRhdGlvbi5sZW5ndGg7ZysrKXtjb25zdCBFPXRoaXMuY2VsbFZhbGlkYXRpb25bZ10/LmRhdGE7IUV8fHRoaXMuaXNDb2xQayhFKXx8YS5pbmNsdWRlcyhnKXx8KHIuaGFzKEUpP28uaXNIaWRkZW4oZykmJnUu''@;'; put 'put ''cHVzaChnKTpvLmlzSGlkZGVuKGcpfHxsLnB1c2goZykpfXJldHVybiB1Lmxlbmd0aCYmby5zaG93Q29sdW1ucyh1KSxsLmxlbmd0aCYmby5oaWRlQ29sdW1ucyhsKSx1Lmxlbmd0aD4wfHxsLmxlbmd0aD4wfXVwZGF0ZVZhRmlsdGVyVGV4dChyKXtjb25zdCBpPShyLnBhcmFtZXRlcnN8fFtd''@;'; put 'put ''KS5maWx0ZXIobz0+byYmdm9pZCAwIT09by5uYW1lJiZ2b2lkIDAhPT1vLnZhbHVlKS5tYXAobz0+YCR7by5sYWJlbD8/by5uYW1lfT0ke28udmFsdWV9YCkuam9pbigiLCAiKTtjb25zb2xlLmxvZygiVkEgZmlsdGVycyBhY3RpdmU6IixpKX1zdGF0aWMjZT1uPSgpPT4odGhpcy5jbnQ9MCx0''@;'; put 'put ''aGlzLm5vblBrQ250PTAsdGhpcy5sYXN0Q2VsbD0wLHRoaXMuVkFfREVCT1VOQ0VfTVM9ODAwLHRoaXMuT1JJR0lOQUxfVkFMVUVfQ09NTUVOVF9QUkVGSVg9Ik9yaWdpbmFsIHZhbHVlOiAiLHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSkoemUoRjIpLHplKHVk''@;'; put 'put ''KSx6ZSh4MyksemUoQnApLHplKGZoKSx6ZSh2YyksemUocDEpLHplKGljKSx6ZShVbCksemUoQVplKSx6ZShNbm4pLHplKFRubiksemUocGllKSl9LHRoaXMuXHUwMjc1Y21wPVByKHt0eXBlOmUsc2VsZWN0b3JzOltbImFwcC1lZGl0b3IiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGksbyl7aWYo''@;'; put 'put ''MSZpJiYoV28oTDcsNSksV28oRW9uLDcpLFdvKE1vbiw1KSxXbyhUb24sNSksV28oeG9uLDUpLFdvKEFvbiw1KSksMiZpKXtsZXQgYTtjaShhPXVpKCkpJiYoby5ob3RUYWJsZUNvbXBvbmVudD1hLmZpcnN0KSxjaShhPXVpKCkpJiYoby5odD1hLmZpcnN0KSxjaShhPXVpKCkpJiYoby5pbmZv''@;'; put 'put ''QmFyPWEuZmlyc3QpLGNpKGE9dWkoKSkmJihvLnVwbG9hZFN0YXRlckNvbXBMaXN0PWEpLGNpKGE9dWkoKSkmJihvLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9YSksY2koYT11aSgpKSYmKG8uZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9YSl9fSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVy''@;'; put 'put ''Il0sc3RhbmRhbG9uZTohMSxkZWNsczoxODIsdmFyczo4MCxjb25zdHM6W1siaHQiLCIiXSxbImhvdEluc3RhbmNlIiwiIl0sWyJmaWxlUGFzc3dvcmRJbnB1dCIsIiJdLFsiZmlsZVVwbG9hZElucHV0IiwiIl0sWyJ1cGxvYWRTdGF0ZXIiLCIiXSxbImluZm9CYXIiLCIiXSxbInF1ZXJ5Rmls''@;'; put 'put ''dGVyIiwiIl0sWzEsImNvbnRlbnQtYXJlYSIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsiYXBwRmlsZURyb3AiLCIiLDEsInJlbGF0aXZlIiwzLCJmaWxlT3ZlciIsImZpbGVEcm9wIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIiwidXBsb2FkZXIiLCJjbHJNb2RhbFNpemUiLCJjbHJNb2Rh''@;'; put 'put ''bFN0YXRpY0JhY2tkcm9wIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImRyb3AtYXJlYSJdLFsxLCJjbHItY29sLW1kLTEyIl0sWzEsImNsci1yb3ciLCJjYXJkLWJsb2NrIiwibXQtMTUiLCJkLWZsZXgi''@;'; put 'put ''LCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJjbHItY29sLW1kLWF1dG8iXSxbMSwiZW5jb2RpbmctYmxvY2siXSxbImNscklubGluZSIsIiIsMSwibXQtMCJdLFsidHlwZSIsInJhZGlvIiwiY2xyUmFkaW8iLCIiLCJ2YWx1ZSIsIlVURi04IiwibmFtZSIsImVuY29kaW5nIiwzLCJu''@;'; put 'put ''Z01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJ0eXBlIiwicmFkaW8iLCJjbHJSYWRpbyIsIiIsInZhbHVlIiwiV0xBVElOMSIsIm5hbWUiLCJlbmNvZGluZyIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsxLCJjbHItY29sLW1kLTMiLCJmaWx0''@;'; put 'put ''ZXJCdG4iXSxbMSwiY2xyLWNvbC1tZC0zIiwiZWRpdEJ0biJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtci0wIiwzLCJkaXNhYmxlZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtci0wIl0sWzEsImV4Y2VsLXBhcnNpbmciLCJj''@;'; put 'put ''bHItY29sLW1kLTEyIl0sWzEsIm1vZGFsLWZvb3RlciJdLFszLCJjdXJyZW50UmVjb3JkIiwicmVjb3JkQWN0aW9uIiwibGliZHMiLCJxdWVyeUZpbHRlciIsImZpbHRlciIsInN1Ym1pdExvYWRpbmciLCJoZWFkZXJQa3MiLCJjZWxsVmFsaWRhdGlvbiIsImN1cnJlbnRSZWNvcmRJbmRleCIs''@;'; put 'put ''ImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsImN1cnJlbnRSZWNvcmRFcnJvcnMiLCJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIl0sWzEsImNsci1mbGV4LTEiXSxbMSwicHJvZ3Jlc1N0YXRpYyIsInByb2dyZXNzIiwibG9vcCJdLFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJjYXJkIiwiYm9yZGVyLTAi''@;'; put 'put ''LCJib3gtc2hhZG93LW5vbmUtaSIsInBvc2l0aW9uLXJlbGF0aXZlIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50IiwzLCJmaWxlRHJhZ2dlZE92ZXIiXSxbMSwiY2FyZC1oZWFkZXIiLCJjbHItcm93IiwiYnV0dG9uQmFyIiwiaGVh''@;'; put 'put ''ZGVyQmFyIiwiY2xyLWZsZXgtbWQtcm93IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWxnLWVuZCJdLFsxLCJjbHItY29sLTEyIiwiY2xyLWNvbC1tZC1hdXRvIiwiY2xyLWNvbC1sZy1hdXRvIiwiYmFja0J0biJdLFsxLCJjbHItY29sLTEyIiwi''@;'; put 'put ''Y2xyLWNvbC1tZCIsImNsci1jb2wtbGciLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJlZGl0b3ItdGl0bGUgdGV4dC1jZW50ZXIgbXQtMCIsNCwibmdWYXIiXSxbMSwiY2xyLWNvbC0xMiIsImNsci1jb2wtbWQtYXV0byIsImNsci1jb2wt''@;'; put 'put ''bGctYXV0byIsImJ0bkN0cmwiXSxbMSwiY2xyLWNvbC1tZC0xMiIsImluZm9CYXIiLDMsImV4cGFuZGVkIl0sWzEsImNhcmQtYmxvY2siLCJwLTAiLCJjbHItZmxleC0xIiwiYmFja2dyb3VuZC10cmFuc3BhcmVudCIsMywibmdDbGFzcyJdLFsxLCJjYXJkLXRleHQiXSxbMSwiY2FyZC10ZXh0''@;'; put 'put ''IiwiaG90RWRpdG9yIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50Il0sWzEsImhvdC13cmFwcGVyIiwiY2xyLWZsZXgtMSJdLFsiaWQiLCJob3RUYWJsZSIsMSwiZWRpdC1ob3QiLDMsImRhdGEiLCJzZXR0aW5ncyJdLFsxLCJ2YS1m''@;'; put 'put ''aWx0ZXItY29udHJvbHMiLCJ3LTEwMCIsIm10LTItaSJdLFsxLCJtdC0yLWkiLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWzEsIm1vZGFsIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtLTAiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIs''@;'; put 'put ''ImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzEsImR1cGxpY2F0ZS1rZXlzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwiZC1ibG9jayJdLFsxLCJtb2RhbCIs''@;'; put 'put ''InotaW5kZXgtaGlnaGVzdCJdLFsxLCJmaWx0ZXItbW9kYWwiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1n''@;'; put 'put ''cmF5Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nl''@;'; put 'put ''c3Mtb3V0bGluZSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsidHlw''@;'; put 'put ''ZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siXSxbMSwibW9kYWwtYm9keSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJkYXRhLWxwaWdub3JlIiwidHJ1ZSIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImlk''@;'; put 'put ''IiwiZmlsZVBhc3N3b3JkSW5wdXQiLCJ0eXBlIiwidGV4dCIsMSwiY2xyLWlucHV0IiwiZGlzYWJsZS1wYXNzd29yZC1tYW5hZ2VyIl0sWzEsIm0tMCIsImNvbG9yLXJlZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2si''@;'; put 'put ''LCJkaXNhYmxlZCJdLFszLCJvcGVuQ2hhbmdlIiwicm93Q2xpY2tlZCIsIm9wZW4iLCJkc21ldGEiLCJ2ZXJzaW9ucyJdLFszLCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLCJ2aWV3Ym94TW9kYWwiXSxbMywicmVzdWx0Iiwib3BlbiIsInRpdGxlIiwibWVzc2FnZSJdLFszLCJjYW5jZWwiLCJvcGVu''@;'; put 'put ''IiwiZG9uZSIsInRvdGFsIl0sWzEsImZpbHRlckJ0biIsInctMTAwIl0sWyJmb3IiLCJmaWxlLXVwbG9hZCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEwMCJdLFsiaGlkZGVuIiwiIiwiaWQiLCJmaWxlLXVwbG9hZCIsInR5cGUiLCJmaWxl''@;'; put 'put ''IiwiYXBwRmlsZVNlbGVjdCIsIiIsMywiY2hhbmdlIiwidXBsb2FkZXIiXSxbMSwiYnRuVmlldyIsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwicHJvZmlsZS1idXR0b25zIiwidy0xMDAiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1w''@;'; put 'put ''cmltYXJ5IiwibXItMCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtci0wIiwzLCJjbGljayJdLFszLCJvblJlY29yZENoYW5nZSIsIm9uUmVjb3JkSW5wdXRGb2N1c2VkIiwib25SZWNvcmRFZGl0Q2xvc2UiLCJvbk5leHRS''@;'; put 'put ''ZWNvcmQiLCJvblByZXZpb3VzUmVjb3JkIiwiY3VycmVudFJlY29yZCIsInJlY29yZEFjdGlvbiIsImxpYmRzIiwicXVlcnlGaWx0ZXIiLCJmaWx0ZXIiLCJzdWJtaXRMb2FkaW5nIiwiaGVhZGVyUGtzIiwiY2VsbFZhbGlkYXRpb24iLCJjdXJyZW50UmVjb3JkSW5kZXgiLCJjdXJyZW50UmVj''@;'; put 'put ''b3JkTG9hZGluZ3MiLCJjdXJyZW50UmVjb3JkRXJyb3JzIiwiY3VycmVudFJlY29yZFZhbGlkYXRvciJdLFsxLCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tZGltbWVkIiwzLCJyb3V0ZXJMaW5rIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIs''@;'; put 'put ''ImNhcmV0IiwiZGlyIiwibGVmdCIsInNpemUiLCIyMCJdLFsxLCJ0ZXh0Il0sWzEsImJ0biIsImljb24tY29sbGFwc2UiLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1kaW1tZWQiLCJ2aWV3Ym94LW9wZW4iLDMsImNsaWNrIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsInZpZXct''@;'; put 'put ''Y2FyZHMiLCJzaXplIiwiMjAiXSxbMSwiZWRpdG9yLXRpdGxlIiwidGV4dC1jZW50ZXIiLCJtdC0wIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInNoYXBlIiwiaW5mby1jaXJjbGUiLCJhcmlhLWxhYmVsIiwiVmlldyBkYXRhc2V0IG1ldGEgaW5mbyIsInNpemUiLCIyNCIsMSwiaXMtaGln''@;'; put 'put ''aGxpZ2h0IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsImJvbHQiLDEsImNvbG9yLXllbGxvdyJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiXSxbMSwibXItMTAiLCJ2aWV3LXRhYmxlIiwzLCJyb3V0ZXJMaW5rIl0sWyJjbHJQb3Np''@;'; put 'put ''dGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbInR5cGUiLCJidXR0b24iLDEsImJ0blZpZXciLCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRuLXNtIiwiYnRuLWljb24i''@;'; put 'put ''LCJidG4tZGltbWVkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsIm5vdGUiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImljb24tY29sbGFw''@;'; put 'put ''c2UiLCJidG4tc20iLCJidG4tc3VjY2VzcyIsIm1yLTAiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0blZpZXciLCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tZGltbWVkIiwzLCJjbGljayJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJmaWx0''@;'; put 'put ''ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImljb24tY29sbGFwc2UiLCJidG4tc20iLCJidG4tc3VjY2VzcyIsIm1yLTAiLDMsImNsaWNrIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsInVwbG9hZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRu''@;'; put 'put ''LWljb24iLCJidG4tb3V0bGluZS1kYW5nZXIiLDMsImNsaWNrIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsInRpbWVzIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwzLCJjbGljayIsImNsckxv''@;'; put 'put ''YWRpbmciXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInNoYXBlIiwicGx1cyIsInNpemUiLCIxNiJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJjaGVjayIsInNpemUiLCIyMCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tb3V0bGlu''@;'; put 'put ''ZS1kYW5nZXIiLCJidG4tdXBsb2FkLXByZXZpZXciLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsImJ0bi11cGxvYWQtcHJldmlldyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJwcmV2''@;'; put 'put ''aWV3LXN1Ym1pdCIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsImJ0bi11cGxvYWQtcHJldmlldyIsMywiY2xpY2siXSxbMSwiY2xyLWNvbC1tZC0xMiIsImluZm9CYXIiXSxbMSwiaW5mb0Jhci10ZXh0Il0s''@;'; put 'put ''WyJ0eXBlIiwiYnV0dG9uIiwxLCJpbmZvQmFyLXRvZ2dsZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiaW5mb0Jhci10b2dnbGUiLDMsImNsaWNrIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsImNhcmV0IGRvd24iXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50''@;'; put 'put ''LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInNwaW5uZXIiXSxbMSwibXQtMTAiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJlcnJvci1zdGFuZGFyZCIsMSwiZXJyb3ItaWNvbiJdLFsiY2xyVG9v''@;'; put 'put ''bHRpcFRyaWdnZXIiLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsIm10LTUtaSIsMywiY2xpY2siXSxbImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0''@;'; put 'put ''IiwiY2xyU2l6ZSIsImxnIl0sWzEsInZhLWRpc2FibGVkLXRleHQiXSxbInJvbGUiLCJzdGF0dXMiLCJhcmlhLWxpdmUiLCJwb2xpdGUiLDEsInZhLWZpbHRlci1zdGF0dXMiXSxbMSwidmEtcGVuZGluZy10ZXh0Il0sWzEsInZhLWxvYWRpbmctdGV4dCJdLFsxLCJ2YS10b2dnbGUiXSxbInR5''@;'; put 'put ''cGUiLCJjaGVja2JveCIsMywiY2hhbmdlIiwiY2hlY2tlZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImRpc2FibGVkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siLCJkaXNhYmxl''@;'; put 'put ''ZCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtZGlhbG9nIiwibW9kYWwtbGciXSxbMSwibW9kYWwtY29udGVudCJdLFsxLCJtb2RhbC1oZWFkZXIiXSxbImFyaWEtbGFiZWwiLCJDbG9zZSIsInR5cGUiLCJidXR0b24iLDEsImNsb3NlIl0sWyJhcmlh''@;'; put 'put ''LWhpZGRlbiIsInRydWUiLCJzaGFwZSIsImNsb3NlIl0sWzEsImQtYmxvY2siLCJ3LTEwMCIsInRleHQtY2VudGVyIiwiY29sb3ItcmVkIl0sWzEsImNsci1vZmZzZXQtbWQtMiIsImNsci1jb2wtbWQtOCJdLFsxLCJtb2RhbC1mb290ZXIiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyLWkiXSxb''@;'; put 'put ''ImlkIiwic3VibWl0QnRuIiwidHlwZSIsInN1Ym1pdCIsInRhYmluZGV4IiwiMCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsIm0tMCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsiaWQiLCJjYW5jZWxTdWJtaXRCdG4iLCJ0eXBlIiwiYnV0dG9uIiwidGFiaW5kZXgi''@;'; put 'put ''LCIwIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwidGV4dC1hcmVhLWZ1bGwtd2lkdGgiXSxbImZvciIsImZvcm1GaWVsZHNfOCIsMSwibWItNSIsImQtYmxvY2siXSxbImNsclRleHRhcmVhIiwiIiwidGFiaW5kZXgiLCIwIiwidHlwZSIsInRleHQiLCJp''@;'; put 'put ''ZCIsImZvcm1GaWVsZHNfOCIsMSwic3VibWl0LXJlYXNvbiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCIsInZhbHVlIl0sWyJyb2xlIiwiZGlhbG9nIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1kaWFsb2ciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oaSxvKXtp''@;'; put 'put ''ZigxJmkpe2NvbnN0IGE9d24oKTtKKDAsIm1haW4iLDcpKDEsImNsci1tb2RhbCIsOCksd3QoImZpbGVPdmVyIixmdW5jdGlvbih1KXtyZXR1cm4gWWUoYSksWGUoby5maWxlT3ZlckJhc2UodSkpfSkoImZpbGVEcm9wIixmdW5jdGlvbih1KXtyZXR1cm4gWWUoYSksWGUoby5hdHRhY2hGaWxl''@;'; put 'put ''KHUsITApKX0pLGhpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHUpe3JldHVybiBZZShhKSxmaShvLnNob3dVcGxvYWRNb2RhbCx1KXx8KG8uc2hvd1VwbG9hZE1vZGFsPXUpLFhlKHUpfSksSigyLCJoMyIsOSksU2UoMywiVXBsb2FkIEZpbGUiKSx0ZSgpLEooNCwiZGl2IiwxMCko''@;'; put 'put ''NSwiZGl2IiwxMSkoNiwic3BhbiIpLFNlKDcsIkRyb3AgZmlsZSBhbnl3aGVyZSB0byB1cGxvYWQhIiksdGUoKSgpLEooOCwiZGl2IiwxMikoOSwiZGl2IiwxMykoMTAsImRpdiIsMTQpKDExLCJkaXYiLDE1KSgxMiwiY2xyLXJhZGlvLWNvbnRhaW5lciIsMTYpKDEzLCJjbHItcmFkaW8td3Jh''@;'; put 'put ''cHBlciIpKDE0LCJpbnB1dCIsMTcpLGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih1KXtyZXR1cm4gWWUoYSksZmkoby5lbmNvZGluZyx1KXx8KG8uZW5jb2Rpbmc9dSksWGUodSl9KSx0ZSgpLEooMTUsImxhYmVsIiksU2UoMTYsIlVURi04IiksdGUoKSgpLEooMTcsImNsci1yYWRpby13''@;'; put 'put ''cmFwcGVyIikoMTgsImlucHV0IiwxOCksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHUpe3JldHVybiBZZShhKSxmaShvLmVuY29kaW5nLHUpfHwoby5lbmNvZGluZz11KSxYZSh1KX0pLHRlKCksSigxOSwibGFiZWwiKSxTZSgyMCwiV0xBVElOMSIpLHRlKCkoKSgpKCkoKSx2dCgyMSxE''@;'; put 'put ''b24sNiwxLCJkaXYiLDE5KSx2dCgyMixMb24sMywxLCJkaXYiLDIwKSxKKDIzLCJkaXYiLDE0KSx2dCgyNCxPb24sMiwxLCJidXR0b24iLDIxKSx2dCgyNSxOb24sMiwwLCJidXR0b24iLDIyKSx0ZSgpLHZ0KDI2LEZvbiwzLDAsImRpdiIsMjMpLHRlKCkoKSgpLEl0KDI3LCJkaXYiLDI0KSx0''@;'; put 'put ''ZSgpLHZ0KDI4LFBvbiwxLDEyLCJhcHAtZWRpdC1yZWNvcmQiLDI1KSxKKDI5LCJkaXYiLDI2LDApLHZ0KDMxLEhvbiwyLDAsImRpdiIsMjcpLEooMzIsImRpdiIsMjgpLHd0KCJmaWxlRHJhZ2dlZE92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIFllKGEpLFhlKG8ub25TaG93VXBsb2FkTW9kYWwo''@;'; put 'put ''KSl9KSxKKDMzLCJkaXYiLDI5KSx2dCgzNCxWb24sOSwyLCJkaXYiLDMwKSxKKDM1LCJkaXYiLDMxKSxZbigzNixab24sMTAsNiwiaDQiLDMyKSx0ZSgpLHZ0KDM3LHRhbiw0LDMsImRpdiIsMzMpLHZ0KDM4LHJhbiw3LDQsImRpdiIsMzQpLHRlKCksSigzOSwiZGl2IiwzNSksdnQoNDAsYWFu''@;'; put 'put ''LDQsMiwiZGl2IiwzNiksSig0MSwiZGl2IiwzNykoNDIsImRpdiIsMzgpLEl0KDQzLCJob3QtdGFibGUiLDM5LDEpLHRlKCksSig0NSwiZGl2IiksdnQoNDYsY2FuLDUsMiwiY2xyLXRvb2x0aXAiKSx2dCg0NyxnYW4sNiw0LCJkaXYiLDQwKSx2dCg0OCxtYW4sMywxLCJwIiw0MSksdGUoKSx2''@;'; put 'put ''dCg0OSx5YW4sMTYsNiwiZGl2Iiw0MiksSig1MCwiY2xyLW1vZGFsIiw0MyksaGkoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odSl7cmV0dXJuIFllKGEpLGZpKG8uc3VibWl0TGltaXROb3RpY2UsdSl8fChvLnN1Ym1pdExpbWl0Tm90aWNlPXUpLFhlKHUpfSksSig1MSwiaDMiLDkp''@;'; put 'put ''LFNlKDUyLCJOb3RpY2UiKSx0ZSgpLEooNTMsImRpdiIsMTApKDU0LCJwIiw0NCksU2UoNTUpLHRlKCkoKSxKKDU2LCJkaXYiLDI0KSg1NywiYnV0dG9uIiw0NSksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZShhKSxYZShvLnN1Ym1pdExpbWl0Tm90aWNlPSExKX0pLFNlKDU4LCIg''@;'; put 'put ''Q2FuY2VsICIpLHRlKCksSig1OSwiYnV0dG9uIiw0NSksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZShhKSxvLnVwbG9hZFBhcnNlZEZpbGVzKCksWGUoby5zdWJtaXRMaW1pdE5vdGljZT0hMSl9KSxTZSg2MCwiIFN1Ym1pdCAiKSx0ZSgpKCkoKSxKKDYxLCJjbHItbW9kYWwiLDQz''@;'; put 'put ''KSxoaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih1KXtyZXR1cm4gWWUoYSksZmkoby5iYWRFZGl0LHUpfHwoby5iYWRFZGl0PXUpLFhlKHUpfSksSig2MiwiaDMiLDkpLFNlKDYzKSx0ZSgpLEooNjQsImRpdiIsMTApKDY1LCJwIiksU2UoNjYpLHRlKCkoKSxKKDY3LCJkaXYiLDI0''@;'; put 'put ''KSg2OCwiYnV0dG9uIiw0NSksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZShhKSxYZShvLmJhZEVkaXQ9ITEpfSksU2UoNjksIiBPayAiKSx0ZSgpKCkoKSxKKDcwLCJjbHItbW9kYWwiLDQzKSxoaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih1KXtyZXR1cm4gWWUoYSks''@;'; put 'put ''Zmkoby5wa051bGwsdSl8fChvLnBrTnVsbD11KSxYZSh1KX0pLEooNzEsImgzIiw5KSxTZSg3MiwiRXJyb3IiKSx0ZSgpLEooNzMsImRpdiIsMTApKDc0LCJwIiksU2UoNzUsIiBOdWxsIHZhbHVlcyBvciBpbmNvcnJlY3QgZGF0YSB0eXBlcyBjYW5ub3QgYmUgc3VibWl0dGVkIGZvciBQcmlt''@;'; put 'put ''YXJ5IEtleSBjb2x1bW5zICIpLHRlKCkoKSxKKDc2LCJkaXYiLDI0KSg3NywiYnV0dG9uIiw0Niksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZShhKSxvLnBrTnVsbD0hMSxYZShvLmJhZEVkaXQ9ITEpfSksU2UoNzgsIiBPayAiKSx0ZSgpKCkoKSxKKDc5LCJjbHItbW9kYWwiLDQz''@;'; put 'put ''KSxoaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih1KXtyZXR1cm4gWWUoYSksZmkoby5ub1BrTnVsbCx1KXx8KG8ubm9Qa051bGw9dSksWGUodSl9KSxKKDgwLCJoMyIsOSksU2UoODEsIkVycm9yIiksdGUoKSxKKDgyLCJkaXYiLDEwKSg4MywicCIpLFNlKDg0LCJJbmNvcnJlY3Qg''@;'; put 'put ''ZGF0YSB0eXBlcyBpbiBub24tUHJpbWFyeSBLZXkgY29sdW1ucyIpLHRlKCkoKSxKKDg1LCJkaXYiLDI0KSg4NiwiYnV0dG9uIiw0Niksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZShhKSxvLm5vUGtOdWxsPSExLFhlKG8uYmFkRWRpdD0hMSl9KSxTZSg4NywiIE9rICIpLHRlKCko''@;'; put 'put ''KSgpLEooODgsImNsci1tb2RhbCIsNDcpLGhpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHUpe3JldHVybiBZZShhKSxmaShvLnBrRHVwcyx1KXx8KG8ucGtEdXBzPXUpLFhlKHUpfSksSig4OSwiaDMiLDkpLFNlKDkwLCJFcnJvciIpLHRlKCksSig5MSwiZGl2IiwxMCkoOTIsInAi''@;'; put 'put ''KSxTZSg5MywiIER1cGxpY2F0ZSB2YWx1ZXMgY2Fubm90IGJlIHN1Ym1pdHRlZCBmb3IgUHJpbWFyeSBLZXkgY29sdW1ucyAiKSx0ZSgpLEooOTQsInAiKSxTZSg5NSwiRHVwbGljYXRlcyBmb3VuZDoiKSx0ZSgpLF9vKDk2LGJhbiwzLDQsInNwYW4iLDQ4LENvKSx0ZSgpLEooOTgsImRpdiIs''@;'; put 'put ''MjQpKDk5LCJidXR0b24iLDQ2KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKGEpLFhlKG8ucGtEdXBzPSExKX0pLFNlKDEwMCwiIE9rICIpLHRlKCkoKSgpLEooMTAxLCJjbHItbW9kYWwiLDQzKSxoaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih1KXtyZXR1cm4gWWUo''@;'; put 'put ''YSksZmkoby50b29Mb25nLHUpfHwoby50b29Mb25nPXUpLFhlKHUpfSksSigxMDIsImgzIiw5KSxTZSgxMDMsIkVycm9yIiksdGUoKSxKKDEwNCwiZGl2IiwxMCkoMTA1LCJwIiksU2UoMTA2LCIgVGhlIGZvbGxvd2luZyBjb2x1bW5zIGhhdmUgdmFsdWVzIHRoYXQgZXhjZWVkIGxlbmd0aCBs''@;'; put 'put ''aW1pdHM6ICIpLHRlKCksX28oMTA3LHdhbiwyLDMsInAiLG51bGwsQ28pLHRlKCksSigxMDksImRpdiIsMjQpKDExMCwiYnV0dG9uIiw0Niksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZShhKSxvLnRvb0xvbmc9ITEsWGUoby5jbGVhbkV4Y2VlZCgpKX0pLFNlKDExMSwiIE9rICIp''@;'; put 'put ''LHRlKCkoKSgpKCkoKSgpKCkoKSx2dCgxMTIsQ2FuLDE0LDAsImRpdiIsNDkpLEooMTEzLCJjbHItbW9kYWwiLDUwKSxoaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih1KXtyZXR1cm4gWWUoYSksZmkoby5maWx0ZXIsdSl8fChvLmZpbHRlcj11KSxYZSh1KX0pLEooMTE0LCJoMyIs''@;'; put 'put ''NTEpLFNlKDExNSwiIEZpbHRlciBmb3IgdGFibGU6ICIpLEooMTE2LCJzcGFuIiksU2UoMTE3KSx0ZSgpKCksSigxMTgsImRpdiIsMTApLHZ0KDExOSxTYW4sMiwwLCJhcHAtcXVlcnkiKSx0ZSgpLEooMTIwLCJkaXYiLDI0KSgxMjEsImJ1dHRvbiIsNTIpLHd0KCJjbGljayIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gWWUoYSksWGUoby5yZXNldEZpbHRlcigpKX0pLFNlKDEyMiwiIHJlc2V0IGZpbHRlciAiKSx0ZSgpLEooMTIzLCJidXR0b24iLDUzKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKGEpLFhlKG8uZmlsdGVyPSExKX0pLFNlKDEyNCwiIENhbmNlbCAiKSx0ZSgpLEoo''@;'; put 'put ''MTI1LCJidXR0b24iLDU0KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKGEpLFhlKG8uc2VuZENsYXVzZSgpKX0pLFNlKDEyNiwiIE9rICIpLHRlKCkoKSgpLEooMTI3LCJjbHItbW9kYWwiLDQzKSxoaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih1KXtyZXR1cm4gWWUo''@;'; put 'put ''YSksZmkoby5xdWVyeUVycix1KXx8KG8ucXVlcnlFcnI9dSksWGUodSl9KSxKKDEyOCwiaDMiLDkpLFNlKDEyOSwiRXJyb3IiKSx0ZSgpLEooMTMwLCJkaXYiLDEwKSgxMzEsInAiKSxTZSgxMzIpLHRlKCkoKSxKKDEzMywiZGl2IiwyNCkoMTM0LCJidXR0b24iLDU1KSx3dCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIFllKGEpLFhlKG8ucXVlcnlFcnI9ITEpfSksU2UoMTM1LCIgQ2FuY2VsICIpLHRlKCksSigxMzYsImJ1dHRvbiIsNDYpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUoYSksWGUoby5xdWVyeUVycj0hMSl9KSxTZSgxMzcsIiBPayAiKSx0ZSgpKCkoKSxK''@;'; put 'put ''KDEzOCwiY2xyLW1vZGFsIiw1NiksaGkoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odSl7cmV0dXJuIFllKGEpLGZpKG8uZGlzY2FyZFNvdXJjZUZpbGUsdSl8fChvLmRpc2NhcmRTb3VyY2VGaWxlPXUpLFhlKHUpfSksSigxMzksImgzIiw1MSksU2UoMTQwLCJXYXJuaW5nIiksdGUo''@;'; put 'put ''KSxKKDE0MSwiZGl2IiwxMCksU2UoMTQyLCIgVGhpcyBhY3Rpb24gd2lsbCBkaXNjYXJkIHRoZSBzb3VyY2UgZmlsZSBhbmQgaXQncyBsb2FkZWQgZGF0YSAiKSxKKDE0MywiYiIpLFNlKDE0NCksdGUoKSxTZSgxNDUsIiBEbyB5b3Ugd2lzaCB0byBwcm9jZWVkPyAiKSx0ZSgpLEooMTQ2LCJk''@;'; put 'put ''aXYiLDI0KSgxNDcsImJ1dHRvbiIsNTMpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUoYSksWGUoby5kaXNjYXJkU291cmNlRmlsZT0hMSl9KSxTZSgxNDgsIiBDYW5jZWwgIiksdGUoKSxKKDE0OSwiYnV0dG9uIiw1Nyksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZShh''@;'; put 'put ''KSxvLmRpc2NhcmRTb3VyY2VGaWxlPSExLFhlKG8uZGlzY2FyZFBlbmRpbmdFeGNlbCghMCkpfSksU2UoMTUwLCIgT2sgIiksdGUoKSgpKCksSigxNTEsImNsci1tb2RhbCIsNTYpLGhpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHUpe3JldHVybiBZZShhKSxmaShvLmZpbGVQYXNz''@;'; put 'put ''d29yZE1vZGFsLHUpfHwoby5maWxlUGFzc3dvcmRNb2RhbD11KSxYZSh1KX0pLEooMTUyLCJoMyIsNTEpLFNlKDE1MywiIFBhc3N3b3JkIFByb3RlY3RlZCBGaWxlICIpLHRlKCksSigxNTQsImRpdiIsNTgpKDE1NSwicCIsNDQpLFNlKDE1NiwiUGxlYXNlIGVudGVyIHBhc3N3b3JkOiIpLHRl''@;'; put 'put ''KCksSXQoMTU3LCJpbnB1dCIsNTksMiksdGUoKSxKKDE1OSwiZGl2IiwyNCksdnQoMTYwLEVhbiwyLDAsInAiLDYwKSxKKDE2MSwiYnV0dG9uIiw1Myksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZShhKSxvLmZpbGVQYXNzd29yZE1vZGFsPSExLFhlKG8uZmlsZVBhc3N3b3JkU3Vi''@;'; put 'put ''amVjdC5uZXh0KHZvaWQgMCkpfSksU2UoMTYyLCIgQ2FuY2VsIHVwbG9hZCAiKSx0ZSgpLEooMTYzLCJidXR0b24iLDYxKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7WWUoYSk7Y29uc3QgdT1vbygxNTgpO3JldHVybiBvLmZpbGVQYXNzd29yZE1vZGFsPSExLFhlKG8uZmlsZVBhc3N3b3JkU3Vi''@;'; put 'put ''amVjdC5uZXh0KHUudmFsdWUpKX0pLFNlKDE2NCwiIFVubG9jayAiKSx0ZSgpKCkoKSxKKDE2NSwiY2xyLW1vZGFsIiw1NiksaGkoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odSl7cmV0dXJuIFllKGEpLGZpKG8ubWFudWFsRmlsZUVkaXRNb2RhbCx1KXx8KG8ubWFudWFsRmlsZUVk''@;'; put 'put ''aXRNb2RhbD11KSxYZSh1KX0pLEooMTY2LCJoMyIsNTEpLFNlKDE2NywiV2FybmluZyIpLHRlKCksSigxNjgsImRpdiIsMTApLFNlKDE2OSwiIE1hbnVhbGx5IGVkaXRpbmcgdGhpcyBkYXRhIHdpbGwgbWVhbiB0aGUgc291cmNlIGZpbGUgIiksSigxNzAsImIiKSxTZSgxNzEpLHRlKCksU2Uo''@;'; put 'put ''MTcyLCIgd2lsbCBiZSBkaXNjYXJkZWQuIERvIHlvdSB3aXNoIHRvIHByb2NlZWQ/ICIpLHRlKCksSigxNzMsImRpdiIsMjQpKDE3NCwiYnV0dG9uIiw1Myksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZShhKSxYZShvLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITEpfSksU2UoMTc1LCIg''@;'; put 'put ''Q2FuY2VsICIpLHRlKCksSigxNzYsImJ1dHRvbiIsNTcpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUoYSksby5tYW51YWxGaWxlRWRpdE1vZGFsPSExLFhlKG8ucHJldmlld1RhYmxlRWRpdENvbmZpcm0oKSl9KSxTZSgxNzcsIiBPayAiKSx0ZSgpKCkoKSxKKDE3OCwiYXBwLWRh''@;'; put 'put ''dGFzZXQtaW5mbyIsNjIpLGhpKCJvcGVuQ2hhbmdlIixmdW5jdGlvbih1KXtyZXR1cm4gWWUoYSksZmkoby5kYXRhc2V0SW5mbyx1KXx8KG8uZGF0YXNldEluZm89dSksWGUodSl9KSx3dCgicm93Q2xpY2tlZCIsZnVuY3Rpb24odSl7cmV0dXJuIFllKGEpLFhlKG8uZGF0YXNldEluZm9Nb2Rh''@;'; put 'put ''bFJvd0NsaWNrZWQodSkpfSksdGUoKSxKKDE3OSwiYXBwLXZpZXdib3hlcyIsNjMpLGhpKCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLGZ1bmN0aW9uKHUpe3JldHVybiBZZShhKSxmaShvLnZpZXdib3hlcyx1KXx8KG8udmlld2JveGVzPXUpLFhlKHUpfSksdGUoKSxKKDE4MCwiYXBwLWNvbmZpcm0t''@;'; put 'put ''bW9kYWwiLDY0KSx3dCgicmVzdWx0IixmdW5jdGlvbih1KXtyZXR1cm4gWWUoYSksWGUoby5vbkNvbmZpcm1Nb2RhbFJlc3VsdCh1KSl9KSx0ZSgpLEooMTgxLCJhcHAtYnVsay12YWxpZGF0aW9uLW1vZGFsIiw2NSksd3QoImNhbmNlbCIsZnVuY3Rpb24oKXtyZXR1cm4gWWUoYSksWGUoby5j''@;'; put 'put ''YW5jZWxCdWxrVmFsaWRhdGlvbih7cmV2ZXJ0OiEwfSkpfSksdGUoKX1pZigyJmkpe2NvbnN0IGE9b28oMTU4KTtpZSgpLHJ0KCJ1cGxvYWRlciIsby51cGxvYWRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCExKSgiY2xyTW9kYWxDbG9zYWJsZSIs''@;'; put 'put ''IlZhbGlkYXRpbmctRFEiPT09by5leGNlbFVwbG9hZFN0YXRlKSxkaSgiY2xyTW9kYWxPcGVuIixvLnNob3dVcGxvYWRNb2RhbCksaWUoMTMpLGRpKCJuZ01vZGVsIixvLmVuY29kaW5nKSxydCgiZGlzYWJsZWQiLCIiIT1vLmZpbGVuYW1lKSxpZSg0KSxkaSgibmdNb2RlbCIsby5lbmNvZGlu''@;'; put 'put ''ZykscnQoImRpc2FibGVkIiwiIiE9by5maWxlbmFtZSksaWUoMyksX3Qoby5leGNlbEZpbGVQYXJzaW5nfHxvLnVwbG9hZExvYWRpbmc/LTE6MjEpLGllKCksX3Qoby5leGNlbEZpbGVQYXJzaW5nfHxvLnVwbG9hZExvYWRpbmc/LTE6MjIpLGllKDIpLF90KCJWYWxpZGF0aW5nIiE9PW8uZXhj''@;'; put 'put ''ZWxVcGxvYWRTdGF0ZT8yNDotMSksaWUoKSxfdCgiVmFsaWRhdGluZy1EUSI9PT1vLmV4Y2VsVXBsb2FkU3RhdGU/MjU6LTEpLGllKCksX3Qoby5leGNlbEZpbGVQYXJzaW5nPzI2Oi0xKSxpZSgyKSxfdChvLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg+LTE/Mjg6LTEpLGllKDMpLF90KCFvLnZh''@;'; put 'put ''bGlkYXRpb25Eb25lJiZvLnN1Ym1pdD8zMTotMSksaWUoMyksX3Qoby50YWJsZVRydWUmJiFvLmVtYmVkPzM0Oi0xKSxpZSgpLHdyKCJjbHItY29sLWxnLTEyIiwhby50YWJsZVRydWUpLGllKCkscnQoIm5nVmFyIixONSg3Myxrb24sKG51bGw9PW8ubGliZHM/bnVsbDpvLmxpYmRzLnNwbGl0''@;'; put 'put ''KCIuIikpWzBdLChudWxsPT1vLmxpYmRzP251bGw6by5saWJkcy5zcGxpdCgiLiIpKVsxXSkpLGllKCksX3Qoby50YWJsZVRydWU/Mzc6LTEpLGllKCksX3QobWMoNzYsUFplKS5pbmNsdWRlcyhvLnF1ZXJ5VGV4dCk/LTE6MzgpLGllKCkscnQoIm5nQ2xhc3MiLHQ0KDc4LFJvbiwhbWMoNzcs''@;'; put 'put ''UFplKS5pbmNsdWRlcyhvLnF1ZXJ5VGV4dCkpKSxpZSgpLF90KG8udGFibGVUcnVlPy0xOjQwKSxpZSgzKSx3cigiaGlkZGVuIixvLmhvdFRhYmxlLmhpZGRlbikscnQoImRhdGEiLG8uaG90VGFibGUuZGF0YSkoInNldHRpbmdzIixvLmhvdFRhYmxlU2V0dGluZ3MpLGllKDMpLF90KCFvLnRh''@;'; put 'put ''YmxlVHJ1ZXx8by5yZXN0cmljdGlvbnMucmVtb3ZlQWRkUmVjb3JkQnV0dG9ufHxvLmlzVmFFbWJlZD8tMTo0NiksaWUoKSxfdChvLmlzVmFFbWJlZD80NzotMSksaWUoKSxfdChvLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09by5JbmZpbml0eSYmby5kYXRhU291''@;'; put 'put ''cmNlJiZvLmRhdGFTb3VyY2UubGVuZ3RoPm8ubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQ/NDg6LTEpLGllKCksX3Qoby5zdWJtaXQ/NDk6LTEpLGllKCksZGkoImNsck1vZGFsT3BlbiIsby5zdWJtaXRMaW1pdE5vdGljZSksaWUoNSksU3IoIiBEdWUgdG8gY3VycmVu''@;'; put 'put ''dCBsaWNlbmNlLCBvbmx5ICIsby5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQsIiByb3dzIGluIGEgZmlsZSB3aWxsIGJlIHN1Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpLGllKDYpLGRp''@;'; put 'put ''KCJjbHJNb2RhbE9wZW4iLG8uYmFkRWRpdCksaWUoMikscHIoby5iYWRFZGl0VGl0bGV8fCJFcnJvciIpLGllKDMpLHByKG8uYmFkRWRpdENhdXNlKSxpZSg0KSxkaSgiY2xyTW9kYWxPcGVuIixvLnBrTnVsbCksaWUoOSksZGkoImNsck1vZGFsT3BlbiIsby5ub1BrTnVsbCksaWUoOSksZGko''@;'; put 'put ''ImNsck1vZGFsT3BlbiIsby5wa0R1cHMpLGllKDgpLHlvKG8uZHVwbGljYXRlUGtJbmRleGVzKSxpZSg1KSxkaSgiY2xyTW9kYWxPcGVuIixvLnRvb0xvbmcpLGllKDYpLHlvKG8uZXhjZWVkQ2VsbHMpLGllKDUpLF90KG8ubnVsbFZhcmlhYmxlcz8xMTI6LTEpLGllKCksZGkoImNsck1vZGFs''@;'; put 'put ''T3BlbiIsby5maWx0ZXIpLHJ0KCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksaWUoNCksU3IoIiAiLG8ubGliZHMsIiAiKSxpZSgyKSxfdChvLmZpbHRlcj8xMTk6LTEpLGllKDYpLHJ0KCJjbHJMb2FkaW5nIixvLnN1Ym1pdExvYWRpbmcpLGllKDIpLGRpKCJj''@;'; put 'put ''bHJNb2RhbE9wZW4iLG8ucXVlcnlFcnIpLGllKDUpLHByKG8ucXVlcnlFcnJNZXNzYWdlKSxpZSg2KSxkaSgiY2xyTW9kYWxPcGVuIixvLmRpc2NhcmRTb3VyY2VGaWxlKSxydCgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGllKDYpLHByKG8uZmlsZW5hbWUp''@;'; put 'put ''LGllKDcpLGRpKCJjbHJNb2RhbE9wZW4iLG8uZmlsZVBhc3N3b3JkTW9kYWwpLHJ0KCJjbHJNb2RhbFNpemUiLCJtZCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksaWUoOSksX3Qoby5maWxlVW5sb2NrRXJyb3I/MTYwOi0xKSxpZSgzKSxydCgiZGlzYWJsZWQiLGEudmFsdWUubGVuZ3RoPDEp''@;'; put 'put ''LGllKDIpLGRpKCJjbHJNb2RhbE9wZW4iLG8ubWFudWFsRmlsZUVkaXRNb2RhbCkscnQoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxpZSg2KSxwcihvLmZpbGVuYW1lKSxpZSg3KSxkaSgib3BlbiIsby5kYXRhc2V0SW5mbykscnQoImRzbWV0YSIsby5kc21l''@;'; put 'put ''dGEpKCJ2ZXJzaW9ucyIsby52ZXJzaW9ucyksaWUoKSxkaSgidmlld2JveE1vZGFsIixvLnZpZXdib3hlcyksaWUoKSxydCgib3BlbiIsby5jb25maXJtTW9kYWwub3BlbikoInRpdGxlIixvLmNvbmZpcm1Nb2RhbC50aXRsZSkoIm1lc3NhZ2UiLG8uY29uZmlybU1vZGFsLm1lc3NhZ2UpLGll''@;'; put 'put ''KCkscnQoIm9wZW4iLG8uYnVsa1ZhbGlkYXRpb24uYWN0aXZlKSgiZG9uZSIsby5idWxrVmFsaWRhdGlvbi5kb25lKSgidG90YWwiLG8uYnVsa1ZhbGlkYXRpb24udG90YWwpfX0sZGVwZW5kZW5jaWVzOltJWmUsRmgsbHUsTXosb2MsWGwsUDIsY3UseGQsbWgsJDAsTHAsaW0sZWwsX2FlLEpf''@;'; put 'put ''dCx2YWUsclcsd3YsU3YsQ3YsTDcsbUEscUQsRFplLExaZSxPWmUsX1csSGluLFZpbix6bWUsYm9uLENvbixTb24sRlplXSxzdHlsZXM6WyIudmEtZmlsdGVyLWNvbnRyb2xze2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOi41cmVtO2ZsZXgtd3JhcDp3cmFwfS52YS1maWx0''@;'; put 'put ''ZXItY29udHJvbHMgLnZhLXRvZ2dsZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6LjM1cmVtO21hcmdpbjowO2N1cnNvcjpwb2ludGVyfS52YS1maWx0ZXItY29udHJvbHMgLnZhLXBlbmRpbmctdGV4dHtmb250LXN0eWxlOml0YWxpYztjb2xvcjojOGE1MjAw''@;'; put 'put ''fS52YS1sb2FkaW5nLXRleHR7Zm9udC1zdHlsZTppdGFsaWM7Y29sb3I6IzAwNzJhM30udmEtZGlzYWJsZWQtdGV4dHtmb250LXN0eWxlOml0YWxpYztvcGFjaXR5Oi43fVxuIl0sZW5jYXBzdWxhdGlvbjoyfSkpfXJldHVybiBuKCksZX0pKCk7Y29uc3QgTWFuPVt7cGF0aDoiOmxpYk1lbSIs''@;'; put 'put ''Y29tcG9uZW50OmZLfSx7cGF0aDoiOmxpYk1lbS86ZmlsdGVySWQiLGNvbXBvbmVudDpmS30se3BhdGg6ImVkaXQtcmVjb3JkLzpsaWJNZW0iLGNvbXBvbmVudDpmS30se3BhdGg6ImVkaXQtcmVjb3JkLzpsaWJNZW0vOmZpbHRlcklkIixjb21wb25lbnQ6Zkt9XTtsZXQgVGFuPSgoKT0+e3Zh''@;'; put 'put ''ciBuO2NsYXNzIGV7c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSl9LHRoaXMuXHUwMjc1bW9kPUdpKHt0eXBlOmV9KSx0aGlzLlx1MDI3NWluaj1taSh7aW1wb3J0czpbcW8sV2QuZm9yQ2hpbGQoTWFuKSxXZF19KSl9cmV0dXJuIG4o''@;'; put 'put ''KSxlfSkoKSx5UD0oKCk9Pnt2YXIgbjtjbGFzcyBle3N0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpfSx0aGlzLlx1MDI3NW1vZD1HaSh7dHlwZTplfSksdGhpcy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3FvLHEwLHFvLGhkLEVtXX0p''@;'; put 'put ''KX1yZXR1cm4gbigpLGV9KSgpLFltZT0oKCk9Pnt2YXIgbjtjbGFzcyBle3N0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpfSx0aGlzLlx1MDI3NW1vZD1HaSh7dHlwZTplfSksdGhpcy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3FvLHEw''@;'; put 'put ''LHFvLGhkLExDLFFGLEVtXX0pKX1yZXR1cm4gbigpLGV9KSgpO1hGKCk7bGV0IEhaZT0oKCk9Pnt2YXIgbjtjbGFzcyBle3N0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpfSx0aGlzLlx1MDI3NW1vZD1HaSh7dHlwZTplfSksdGhpcy5c''@;'; put 'put ''dTAyNzVpbmo9bWkoe2ltcG9ydHM6W3FvLHEwLHFvLGhkLFltZSxMdyxTRWUsc3plLHlQLEVtXX0pKX1yZXR1cm4gbigpLGV9KSgpO1hGKCk7bGV0IHhhbj0oKCk9Pnt2YXIgbjtjbGFzcyBle3N0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8''@;'; put 'put ''fGUpfSx0aGlzLlx1MDI3NW1vZD1HaSh7dHlwZTplfSksdGhpcy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W0haZSxxbyxoZCxUYW4scTAsTHcsTEMsRW0sJHgsUUYseVAsU0VlLFltZV19KSl9cmV0dXJuIG4oKSxlfSkoKSxBYW49KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3Rvcigpe31u''@;'; put 'put ''Z09uSW5pdCgpe31uZ09uRGVzdHJveSgpe31zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKX0sdGhpcy5cdTAyNzVjbXA9UHIoe3R5cGU6ZSxzZWxlY3RvcnM6W1siYXBwLWhvbWUtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50''@;'; put 'put ''LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oaSxvKXsxJmkmJkl0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltlN10sZW5jYXBzdWxhdGlvbjoyfSkpfXJldHVybiBuKCksZX0pKCk7Y29uc3Qga2FuPVsic2lkZWJh''@;'; put 'put ''ck5hdiJdLFJhbj1bIioiXSxJYW49KCk9PlsiL3ZpZXcvdXNlcm5hdi91c2VycyJdLERhbj0oKT0+WyIvdmlldy91c2VybmF2L2dyb3VwcyJdLExhbj0oKT0+WyIvdmlldy91c2VybmF2L3JvbGVzIl07ZnVuY3Rpb24gT2FuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJhIiwxNyks''@;'; put 'put ''d3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgzKS5uYXZpZ2F0ZVRvVmlld2VyKCkpfSksU2UoMSwiRGF0YSIpLHRlKCl9fWZ1bmN0aW9uIE5hbihuLGUpezEmbiYmKEooMCwiYSIsMTEpLFNlKDEsIkFQSSBFeHBsb3JlciIpLHRlKCkpfWZ1bmN0aW9uIEZhbihuLGUp''@;'; put 'put ''ezEmbiYmKEooMCwiYSIsMTIpLFNlKDEsIkxpbmVhZ2UiKSx0ZSgpKX1mdW5jdGlvbiBQYW4obixlKXsxJm4mJihKKDAsImEiLDEzKSxTZSgxLCJNZXRhZGF0YSIpLHRlKCkpfWZ1bmN0aW9uIEhhbihuLGUpezEmbiYmKEooMCwiYSIsMTQpLFNlKDEsIiBVc2VycyIpLHRlKCkpfWZ1bmN0aW9u''@;'; put 'put ''IFZhbihuLGUpezEmbiYmKEooMCwiYSIsMTUpLFNlKDEsIlN1Ym1pdHRlZCIpLHRlKCkpfWZ1bmN0aW9uIEJhbihuLGUpezEmbiYmKEooMCwiYSIsMTYpLFNlKDEsIlRvIEFwcHJvdmUiKSx0ZSgpKX1mdW5jdGlvbiBqYW4obixlKXtpZigxJm4mJihKKDAsImNsci1kcm9wZG93bi1tZW51Iiks''@;'; put 'put ''dnQoMSxPYW4sMiwwLCJhIiwxMCksdnQoMixOYW4sMiwwLCJhIiwxMSksdnQoMyxGYW4sMiwwLCJhIiwxMiksdnQoNCxQYW4sMiwwLCJhIiwxMyksdnQoNSxIYW4sMiwwLCJhIiwxNCksdnQoNixWYW4sMiwwLCJhIiwxNSksdnQoNyxCYW4sMiwwLCJhIiwxNiksdGUoKSksMiZuKXtjb25zdCB0''@;'; put 'put ''PVRlKDIpO2llKCksX3QodC5pc01haW5Sb3V0ZSgidmlldyIpPzE6LTEpLGllKCksX3QodC5pc01haW5Sb3V0ZSgidmlldyIpJiYiU0FTVklZQSI9PT10LnNlcnZlclR5cGU/MjotMSksaWUoKSxfdCh0LmlzTWFpblJvdXRlKCJ2aWV3IikmJiJTQVM5Ij09PXQuc2VydmVyVHlwZT8zOi0xKSxp''@;'; put 'put ''ZSgpLF90KHQuaXNNYWluUm91dGUoInZpZXciKSYmIlNBUzkiPT09dC5zZXJ2ZXJUeXBlPzQ6LTEpLGllKCksX3QodC5pc01haW5Sb3V0ZSgidmlldyIpPzU6LTEpLGllKCksX3QodC5pc01haW5Sb3V0ZSgiYXBwcm92ZSIpPzY6LTEpLGllKCksX3QodC5pc01haW5Sb3V0ZSgiYXBwcm92ZSIp''@;'; put 'put ''Pzc6LTEpfX1mdW5jdGlvbiBVYW4obixlKXtpZigxJm4mJihKKDAsImRpdiIsMikoMSwiY2xyLWRyb3Bkb3duIikoMiwiYnV0dG9uIiw3KSxTZSgzKSxJdCg0LCJjbHItaWNvbiIsOCksdGUoKSxZbig1LGphbiw4LDcsImNsci1kcm9wZG93bi1tZW51Iiw5KSx0ZSgpKCkpLDImbil7Y29uc3Qg''@;'; put 'put ''dD1UZSgpO2llKDMpLFNyKCIgIix0LmdldFN1YlBhZ2UoKSwiICIpfX1mdW5jdGlvbiB6YW4obixlKXsxJm4mJkl0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIFdhbihuLGUpezEmbiYmSXQoMCwiY2xyLXRhYi1jb250ZW50Iil9ZnVuY3Rpb24gWWFuKG4sZSl7aWYoMSZuJiYoSigw''@;'; put 'put ''LCJjbHItdGFiIikoMSwiYnV0dG9uIiwxOCkoMiwicCIsMTkpLEl0KDMsImNsci1pY29uIiwyMyksU2UoNCwiIFJvbGVzICIpLHRlKCkoKSxZbig1LFdhbiwxLDAsImNsci10YWItY29udGVudCIsMjIpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgyKTtpZSgpLHJ0KCJyb3V0ZXJMaW5rIixtYygy''@;'; put 'put ''LExhbikpLGllKDQpLHJ0KCJjbHJJZkFjdGl2ZSIsdC5pc01haW5Sb3V0ZSgiL3ZpZXcvdXNlcm5hdi9yb2xlcyIpKX19ZnVuY3Rpb24gWmFuKG4sZSl7aWYoMSZuJiYoSigwLCJjbHItdGFicyIsMykoMSwiY2xyLXRhYiIpKDIsImJ1dHRvbiIsMTgpKDMsInAiLDE5KSxJdCg0LCJjbHItaWNv''@;'; put 'put ''biIsMjApLFNlKDUsIiBVc2VycyAiKSx0ZSgpKCksSXQoNiwiY2xyLXRhYi1jb250ZW50IiksdGUoKSxKKDcsImNsci10YWIiKSg4LCJidXR0b24iLDE4KSg5LCJwIiwxOSksSXQoMTAsImNsci1pY29uIiwyMSksU2UoMTEsIiBHcm91cHMgIiksdGUoKSgpLFluKDEyLHphbiwxLDAsImNsci10''@;'; put 'put ''YWItY29udGVudCIsMjIpLHRlKCksdnQoMTMsWWFuLDYsMywiY2xyLXRhYiIpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgpO2llKDIpLHJ0KCJyb3V0ZXJMaW5rIixtYyg0LElhbikpLGllKDYpLHJ0KCJyb3V0ZXJMaW5rIixtYyg1LERhbikpLGllKDQpLHJ0KCJjbHJJZkFjdGl2ZSIsdC5pc01h''@;'; put 'put ''aW5Sb3V0ZSgiL3ZpZXcvdXNlcm5hdi9ncm91cHMiKSksaWUoKSxfdCgiU0FTOSI9PT10LnNlcnZlclR5cGU/MTM6LTEpfX1mdW5jdGlvbiBHYW4obixlKXsxJm4mJihKKDAsImNsci1kcm9wZG93bi1tZW51IikoMSwiYSIsMjQpLFNlKDIsIlRhYmxlcyIpLHRlKCksSigzLCJhIiwyNSksU2Uo''@;'; put 'put ''NCwiRXhjZWwgTWFwcyIpLHRlKCksSig1LCJhIiwyNiksU2UoNiwiTXVsdGkgTG9hZCIpLHRlKCkoKSl9ZnVuY3Rpb24gJGFuKG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiLDIpKDEsImNsci1kcm9wZG93biIpKDIsImJ1dHRvbiIsNyksU2UoMyksSXQoNCwiY2xyLWljb24iLDgpLHRlKCksWW4o''@;'; put 'put ''NSxHYW4sNywwLCJjbHItZHJvcGRvd24tbWVudSIsOSksdGUoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSgzKSxTcigiICIsdC5nZXRTdWJQYWdlKCksIiAiKX19bGV0ICQ2PSgoKT0+e3ZhciBuO2NsYXNzIGV7Y29uc3RydWN0b3IocixpLG8pe3RoaXMuX3JvdXRlcj1yLHRoaXMuZXZlbnRT''@;'; put 'put ''ZXJ2aWNlPWksdGhpcy5fc2FzU2VydmljZT1vLHRoaXMuc2Nyb2xsZWRUb0JvdHRvbT1uZXcgS3IsdGhpcy5zaWRlYmFyT3Blbj0hMCx0aGlzLnNpZGViYXJXaWR0aD1udWxsLHRoaXMuc2lkZWJhck1heFdpZHRoPW51bGwsdGhpcy5yZXNpemluZz0hMSx0aGlzLnNhc2pzQ29uZmlnPW5ldyB4''@;'; put 'put ''cC5TQVNqc0NvbmZpZyx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuX3Nhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNlcnZlclR5cGU9dGhpcy5fc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCl9bmdPbkluaXQoKXt0aGlzLmV2ZW50U2VydmljZS5vblNpZGViYXJUb2dnbGUuc3Vic2Ny''@;'; put 'put ''aWJlKHI9Pnt0aGlzLnNpZGViYXJPcGVuPXI/ci5vcGVuOiF0aGlzLnNpZGViYXJPcGVuLHRoaXMuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpfSl9b25UcmVlU2Nyb2xsKHIpe2xldCBpPXIudGFyZ2V0O2kuc2Nyb2xsVG9wPj1pLnNjcm9sbEhlaWdodC1pLm9mZnNldEhl''@;'; put 'put ''aWdodC0xMCYmdGhpcy5zY3JvbGxlZFRvQm90dG9tLmVtaXQoKX1pc01haW5Sb3V0ZShyKXtyZXR1cm4gdGhpcy5fcm91dGVyLnVybC5pbmNsdWRlcyhyKX1nZXRTdWJQYWdlKCl7cmV0dXJuIHRoaXMuX3JvdXRlci51cmwuc3BsaXQoIj8iKVswXS5zcGxpdCgiLyIpWzJdfW5hdmlnYXRlVG9W''@;'; put 'put ''aWV3ZXIoKXtVbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0iIix0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YSIpfXJlc2l6ZVN0YXJ0KCl7dGhpcy5yZXNpemluZz0hMCxkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoInNlbGVjdC1ub25lIil9cmVzaXplRW5kKCl7''@;'; put 'put ''dGhpcy5yZXNpemluZz0hMSxkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoInNlbGVjdC1ub25lIil9b25Nb3VzZU1vdmUocil7aWYodGhpcy5yZXNpemluZyl7dGhpcy5zaWRlYmFyV2lkdGg9ci5jbGllbnRYO2xldCBpPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm5h''@;'; put 'put ''di10cmVlIilbMF07dGhpcy5zaWRlYmFyV2lkdGgmJnRoaXMuaXNPdmVyZmxvd24oaSkmJih0aGlzLnNpZGViYXJNYXhXaWR0aD10aGlzLnNpZGViYXJXaWR0aD49Mzc1P3RoaXMuc2lkZWJhcldpZHRoKzEwOnRoaXMuc2lkZWJhck1heFdpZHRoKX19b25Nb3VzZVVwKHIpe3RoaXMucmVzaXpp''@;'; put 'put ''bmcmJnRoaXMucmVzaXplRW5kKCl9aXNPdmVyZmxvd24ocil7cmV0dXJuIHIuc2Nyb2xsV2lkdGg+ci5jbGllbnRXaWR0aH1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKSh6ZSh2YyksemUodWQpLHplKGljKSl9LHRoaXMuXHUwMjc1''@;'; put 'put ''Y21wPVByKHt0eXBlOmUsc2VsZWN0b3JzOltbImFwcC1zaWRlYmFyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihpLG8pe2lmKDEmaSYmV28oa2FuLDUpLDImaSl7bGV0IGE7Y2koYT11aSgpKSYmKG8uc2lkZWJhck5hdj1hLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihpLG8pezEmaSYm''@;'; put 'put ''d3QoIm1vdXNlbW92ZSIsZnVuY3Rpb24obCl7cmV0dXJuIG8ub25Nb3VzZU1vdmUobCl9LFA4KSgibW91c2V1cCIsZnVuY3Rpb24obCl7cmV0dXJuIG8ub25Nb3VzZVVwKGwpfSxQOCl9LG91dHB1dHM6e3Njcm9sbGVkVG9Cb3R0b206InNjcm9sbGVkVG9Cb3R0b20ifSxzdGFuZGFsb25lOiEx''@;'; put 'put ''LG5nQ29udGVudFNlbGVjdG9yczpSYW4sZGVjbHM6OSx2YXJzOjEzLGNvbnN0czpbWyJzaWRlYmFyTmF2IiwiIl0sWyJpZCIsInNpZGViYXJOYXYiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsInN1Yi1kcm9wZG93biJdLFsxLCJwLTEwIl0sWzEsIm5hdi1kaXZpZGVy''@;'; put 'put ''Il0sWzEsIm5hdi10cmVlIiwzLCJzY3JvbGwiXSxbMSwicmVzaXplLWhhbmRsZSIsMywibW91c2Vkb3duIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImRyb3Bkb3duLXRvZ2dsZSIsImJ0biIsImJ0bi1wcmltYXJ5Il0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsImNhcmV0''@;'; put 'put ''IGRvd24iXSxbNCwiY2xySWZPcGVuIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdml5YS1hcGktZXhwbG9yZXIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0''@;'; put 'put ''aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvbGluZWFnZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9tZXRhZGF0YSIsInJvdXRlckxpbmtBY3RpdmUiLCJh''@;'; put 'put ''Y3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2Iiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9yZXZpZXcvYXBwcm92ZS9zdWJtaXR0ZWQiLCJyb3V0ZXJM''@;'; put 'put ''aW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3RvYXBwcm92ZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3Rp''@;'; put 'put ''dmUiLDMsImNsaWNrIl0sWyJjbHJUYWJMaW5rIiwiIiwxLCJ1c2VyLW5hdi1idG4iLDMsInJvdXRlckxpbmsiXSxbMSwiemVyby1tYXJnaW4iXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInNoYXBlIiwidXNlciJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJ1c2VycyJdLFs0LCJj''@;'; put 'put ''bHJJZkFjdGl2ZSJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJibG9ja3MtZ3JvdXAiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvaG9tZS90YWJsZXMiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIi''@;'; put 'put ''LCJyb3V0ZXJMaW5rIiwiL2hvbWUvZXhjZWwtbWFwcyIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvaG9tZS9tdWx0aS1sb2FkIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlv''@;'; put 'put ''bihpLG8pe2lmKDEmaSl7Y29uc3QgYT13bigpO2ZvKCksSigwLCJjbHItdmVydGljYWwtbmF2IiwxLDApLHZ0KDIsVWFuLDYsMSwiZGl2IiwyKSx2dCgzLFphbiwxNCw2LCJjbHItdGFicyIsMyksdnQoNCwkYW4sNiwxLCJkaXYiLDIpLEl0KDUsImRpdiIsNCksSig2LCJkaXYiLDUpLHd0KCJz''@;'; put 'put ''Y3JvbGwiLGZ1bmN0aW9uKHUpe3JldHVybiBZZShhKSxYZShvLm9uVHJlZVNjcm9sbCh1KSl9KSxXcig3KSx0ZSgpLEooOCwic3BhbiIsNiksd3QoIm1vdXNlZG93biIsZnVuY3Rpb24oKXtyZXR1cm4gWWUoYSksWGUoby5yZXNpemVTdGFydCgpKX0pLHRlKCkoKX0yJmkmJihPMigid2lkdGgi''@;'; put 'put ''LG8uc2lkZWJhcldpZHRoLCJweCIpKCJtYXgtd2lkdGgiLG8uc2lkZWJhck1heFdpZHRoLCJweCIpLHdyKCJjbG9zZWQiLCFvLnNpZGViYXJPcGVuKSgicmVzaXppbmciLG8ucmVzaXppbmcpLGllKDIpLF90KG8uaXNNYWluUm91dGUoInZpZXciKT8yOi0xKSxpZSgpLF90KG8uaXNNYWluUm91''@;'; put 'put ''dGUoInZpZXcvdXNlcm5hdiIpPzM6LTEpLGllKCksX3Qoby5pc01haW5Sb3V0ZSgiaG9tZSIpPzQ6LTEpLGllKDQpLHdyKCJyZXNpemluZyIsby5yZXNpemluZykpfSxkZXBlbmRlbmNpZXM6W2N1LGhNLExwLHh2LGt2LCRiLEF2LFR2LFpiLGxhZSx1YWUsbzcsamIsVWIsUDIsSkVdLGVuY2Fw''@;'; put 'put ''c3VsYXRpb246Mn0pKX1yZXR1cm4gbigpLGV9KSgpO2Z1bmN0aW9uIHFhbihuLGUpezEmbiYmSXQoMCwiY2xyLWljb24iLDkpfWZ1bmN0aW9uIEthbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLWljb24iLDExKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3Qg''@;'; put 'put ''aT1UZSgyKTtyZXR1cm4gaS5saWJyYXJpZXNTZWFyY2g9IiIsWGUoaS5saWJyYXJ5T25GaWx0ZXIoKSl9KSx0ZSgpfX1mdW5jdGlvbiBYYW4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImNsci10cmVlLW5vZGUiLDIpKDEsImRpdiIsNykoMiwiaW5wdXQiLDgsMCksaGkoIm5nTW9k''@;'; put 'put ''ZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoKTtyZXR1cm4gZmkoby5saWJyYXJpZXNTZWFyY2gsaSl8fChvLmxpYnJhcmllc1NlYXJjaD1pKSxYZShpKX0pLHd0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoKS5saWJyYXJ5T25GaWx0ZXIoKSl9''@;'; put 'put ''KSx0ZSgpLHZ0KDQscWFuLDEsMCwiY2xyLWljb24iLDkpLHZ0KDUsS2FuLDEsMCwiY2xyLWljb24iLDEwKSx0ZSgpKCl9aWYoMiZuKXtjb25zdCB0PW9vKDMpLHI9VGUoKTtpZSgyKSxkaSgibmdNb2RlbCIsci5saWJyYXJpZXNTZWFyY2gpLGllKDIpLF90KHQudmFsdWUubGVuZ3RoPDE/NDot''@;'; put 'put ''MSksaWUoKSxfdCh0LnZhbHVlLmxlbmd0aD4wPzU6LTEpfX1mdW5jdGlvbiBRYW4obixlKXsxJm4mJkl0KDAsImNsci1pY29uIiw5KX1mdW5jdGlvbiBKYW4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImNsci1pY29uIiwxOCksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpLFRl''@;'; put 'put ''KCk7Y29uc3QgaT1vbygzKSxvPVRlKDIpLiRpbXBsaWNpdCxhPVRlKCk7cmV0dXJuIGkudmFsdWU9IiIsby5zZWFyY2hTdHJpbmc9IiIsWGUoYS50cmVlT25GaWx0ZXIobywidGFibGVzIikpfSksdGUoKX19ZnVuY3Rpb24gZXNuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHIt''@;'; put 'put ''dHJlZS1ub2RlIiwyKSgxLCJkaXYiLDcpKDIsImlucHV0IiwxNiwxKSxoaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGZpKG8uc2VhcmNoU3RyaW5nLGkpfHwoby5zZWFyY2hTdHJpbmc9aSksWGUoaSl9KSx3dCgia2V5''@;'; put 'put ''dXAiLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3QgaT1UZSgyKS4kaW1wbGljaXQ7cmV0dXJuIFhlKFRlKCkudHJlZU9uRmlsdGVyKGksInRhYmxlcyIpKX0pLHRlKCksdnQoNCxRYW4sMSwwLCJjbHItaWNvbiIsOSksdnQoNSxKYW4sMSwwLCJjbHItaWNvbiIsMTcpLHRlKCkoKX1pZigyJm4pe2Nv''@;'; put 'put ''bnN0IHQ9b28oMykscj1UZSgyKS4kaW1wbGljaXQ7aWUoMiksZGkoIm5nTW9kZWwiLHIuc2VhcmNoU3RyaW5nKSxpZSgyKSxfdCh0LnZhbHVlLmxlbmd0aDwxPzQ6LTEpLGllKCksX3QodC52YWx1ZS5sZW5ndGg+MD81Oi0xKX19ZnVuY3Rpb24gdHNuKG4sZSl7MSZuJiZJdCgwLCJjbHItaWNv''@;'; put 'put ''biIsMjEpfWZ1bmN0aW9uIG5zbihuLGUpezEmbiYmSXQoMCwiY2xyLWljb24iLDIyKX1mdW5jdGlvbiByc24obixlKXsxJm4mJihKKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDIzKSgxLCJzcGFuIiksU2UoMiwiIFRvIHVubG9jayBhbGwgdGFibGVzLCBjb250YWN0IHN1cHBvcnRAZGF0YWNv''@;'; put 'put ''bnRyb2xsZXIuaW8gIiksdGUoKSgpKX1mdW5jdGlvbiBpc24obixlKXsxJm4mJlluKDAscnNuLDMsMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMjQpfWZ1bmN0aW9uIG9zbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLXRvb2x0aXAiKSgxLCJidXR0b24iLDIwKSx3dCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7Y29uc3QgaT1ZZSh0KS5uZ1ZhcixvPVRlKCkuJGltcGxpY2l0LGE9VGUoMikuJGltcGxpY2l0LGw9VGUoKTtyZXR1cm4gWGUoaT8iIjpsLm9uVGFibGVDbGljayhvLGEpKX0pLHZ0KDIsdHNuLDEsMCwiY2xyLWljb24iLDIxKSgzLG5zbiwxLDAsImNsci1pY29uIiwy''@;'; put 'put ''MiksU2UoNCksdGUoKSx2dCg1LGlzbiwxLDAsImNsci10b29sdGlwLWNvbnRlbnQiLDIzKSx0ZSgpfWlmKDImbil7bGV0IHQ7Y29uc3Qgcj1lLm5nVmFyLGk9VGUoKS4kaW1wbGljaXQsbz1UZSgyKS4kaW1wbGljaXQsYT1UZSgpO2llKCksd3IoImRjLWxvY2tlZC1jb250cm9sIixyKSgiYWN0''@;'; put 'put ''aXZlIixhLmxpYlRhYkFjdGl2ZShvLkxJQlJBUllSRUYsaSkpLGllKCksX3QoITA9PT0odD1pLmluY2x1ZGVzKCItRkMiKSk/MjohMT09PXQ/MzotMSksaWUoMiksU3IoIiAiLGkucmVwbGFjZSgiLUZDIiwiIiksIiAiKSxpZSgpLF90KHI/NTotMSl9fWZ1bmN0aW9uIGFzbihuLGUpe2lmKDEm''@;'; put 'put ''biYmKEooMCwiY2xyLXRyZWUtbm9kZSIpLFluKDEsb3NuLDYsNywiY2xyLXRvb2x0aXAiLDE5KSx0ZSgpKSwyJm4pe2NvbnN0IHQ9ZS4kaW5kZXgscj1UZSgzKTtpZSgpLHJ0KCJuZ1ZhciIsdCsxPnIubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rp''@;'; put 'put ''b24gc3NuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItdHJlZS1ub2RlIiwxMyksd3QoImNsaWNrIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKCkuJGltcGxpY2l0LGE9VGUoKTtyZXR1cm4gYS50cmVlTm9kZUNsaWNrZWQoaSxvKSxYZShhLmxpYj1vLkxJQlJBUllS''@;'; put 'put ''RUYpfSksaGkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKCkuJGltcGxpY2l0O3JldHVybiBmaShvLmV4cGFuZGVkLGkpfHwoby5leHBhbmRlZD1pKSxYZShpKX0pLEooMSwicCIsMTQpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtZZSh0KTtjb25zdCBp''@;'; put 'put ''PVRlKCkuJGltcGxpY2l0LG89VGUoKTtyZXR1cm4gby5saWI9aS5MSUJSQVJZUkVGLFhlKG8ubGlicmFyeU9uQ2xpY2soaS5MSUJSQVJZUkVGLGkpKX0pLEl0KDIsImNsci1pY29uIiwxNSksU2UoMyksdGUoKSx2dCg0LGVzbiw2LDMsImNsci10cmVlLW5vZGUiLDIpLF9vKDUsYXNuLDIsMSwi''@;'; put 'put ''Y2xyLXRyZWUtbm9kZSIsbnVsbCxDbyksdGUoKX1pZigyJm4pe2NvbnN0IHQ9VGUoKS4kaW1wbGljaXQ7d3IoImNsci1leHBhbmRlZCIsdC5leHBhbmRlZCksZGkoImNsckV4cGFuZGVkIix0LmV4cGFuZGVkKSxydCgiY2xyTG9hZGluZyIsdC5sb2FkaW5nVGFibGVzJiYhdC50YWJsZXMpLGll''@;'; put 'put ''KDMpLFNyKCIgIix0LkxJQlJBUllSRUYsIiAiKSxpZSgpLF90KHQudGFibGVzPzQ6LTEpLGllKCkseW8odC50YWJsZXMpfX1mdW5jdGlvbiBsc24obixlKXsxJm4mJnZ0KDAsc3NuLDcsNiwiY2xyLXRyZWUtbm9kZSIsMTIpLDImbiYmX3QoZS4kaW1wbGljaXQuaGlkZGVuPy0xOjApfWZ1bmN0''@;'; put 'put ''aW9uIGNzbihuLGUpezEmbiYmKEooMCwiZGl2Iiw1KSgxLCJkaXYiLDI1KSgyLCJzcGFuIiwyNiksU2UoMywiIExvYWRpbmcuLi4gIiksdGUoKSgpKCkpfWZ1bmN0aW9uIHVzbihuLGUpezEmbiYmKEooMCwicCIsMjgpLFNlKDEsIiBQbGVhc2Ugc2VsZWN0IGEgdGFibGUgIiksdGUoKSl9ZnVu''@;'; put 'put ''Y3Rpb24gZHNuKG4sZSl7MSZuJiYoSigwLCJwIiwyOCksU2UoMSwiIE5vIEVkaXRhYmxlIFRhYmxlcyBDb25maWd1cmVkICIpLHRlKCkpfWZ1bmN0aW9uIGhzbihuLGUpe2lmKDEmbiYmKEooMCwiZGl2Iiw2KSxJdCgxLCJpbWciLDI3KSx2dCgyLHVzbiwyLDAsInAiLDI4KSx2dCgzLGRzbiwy''@;'; put 'put ''LDAsInAiLDI4KSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSgyKSxfdCgobnVsbD09dC50cmVlTm9kZUxpYnJhcmllcz9udWxsOnQudHJlZU5vZGVMaWJyYXJpZXMubGVuZ3RoKT4wPzI6LTEpLGllKCksX3QoKG51bGw9PXQudHJlZU5vZGVMaWJyYXJpZXM/bnVsbDp0LnRyZWVOb2RlTGli''@;'; put 'put ''cmFyaWVzLmxlbmd0aCk8MT8zOi0xKX19bGV0IGZzbj0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKHIsaSxvLGEsbCx1KXt0aGlzLnJvdXRlPXIsdGhpcy5yb3V0ZXI9aSx0aGlzLmxpY2VuY2VTZXJ2aWNlPW8sdGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9''@;'; put 'put ''bCx0aGlzLnNhc1NlcnZpY2U9dSx0aGlzLnRyZWVOb2RlTGlicmFyaWVzPW51bGwsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy5saWI9IiIsdGhpcy50YWJsZT0iIix0aGlzLmVuY29kaW5nPSJVVEYtOCIsdGhpcy5sb2FkaW5nPSEwLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5j''@;'; put 'put ''ZVNlcnZpY2UubGljZW5jZVN0YXRlfWNvbGxhcHNlTGlicmFyeUl0ZW1zKHIsaSl7ci5mb3JFYWNoKG89PntvLkxJQlJBUllJRCE9PWkuTElCUkFSWUlEJiYoby5leHBhbmRlZD0hMSl9KX10cmVlTm9kZUNsaWNrZWQocixpKXsiQ29sbGFwc2UiPT09ci50YXJnZXQudGl0bGUmJnRoaXMuY29s''@;'; put 'put ''bGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsaSl9bGlicmFyeU9uQ2xpY2socixpKXtpLmV4cGFuZGVkPSFpLmV4cGFuZGVkLGkuZXhwYW5kZWQmJiF0aGlzLnRhYmxlJiZ0aGlzLnNlbGVjdExpYnJhcnkociwhMSxpKSx0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGli''@;'; put 'put ''cmFyaWVzLGkpfXNlbGVjdExpYnJhcnkocixpLG8pe28ubG9hZGluZ1RhYmxlcz0hMDtsZXQgYSxsPVtdO2lmKHRoaXMubGlic0FuZFRhYmxlcyYmKGE9dGhpcy5saWJzQW5kVGFibGVzW3JdLHRoaXMudGFibGU9dm9pZCAwLCJQbGVhc2Ugc2VsZWN0IGxpYnJhcnkiIT09cikpe2xldCB1PWEu''@;'; put 'put ''ZmlsdGVyKGZ1bmN0aW9uKGcpe3JldHVybi0xPT09bC5pbmRleE9mKGcpJiYobC5wdXNoKGcpLCEwKX0pO3RoaXMudGFibGVzPXUsVW4uZWRpdG9yLmxpYnJhcmllcz10aGlzLmxpYnJhcmllc31Vbi5lZGl0b3IubGlicmFyeT1yLGl8fHRoaXMuY2xlYXJHbG9iYWxzRmlsdGVyKCksby5sb2Fk''@;'; put 'put ''aW5nVGFibGVzPSExLG8uZXhwYW5kZWQ9ITB9c2VsZWN0VGFibGUocixpKXt2YXIgbz10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtvLmxpYlRhYj1vLmxpYisiLiIrby50YWJsZSxvLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxVbi5lZGl0b3IudGFibGU9cixpfHxvLmNsZWFyR2xv''@;'; put 'put ''YmFsc0ZpbHRlcigpfSkoKX1jbGVhckdsb2JhbHNGaWx0ZXIoKXtVbi5lZGl0b3IuZmlsdGVyLmxpYmRzPSIiLFVuLmVkaXRvci5maWx0ZXIud2hlcmVDbGF1c2U9IiIsVW4uZWRpdG9yLmZpbHRlci5ncm91cExvZ2ljPSIiLFVuLmVkaXRvci5maWx0ZXIuY2xhdXNlcz1bXSxVbi5lZGl0b3Iu''@;'; put 'put ''ZmlsdGVyLnZhbHM9W10sVW4uZWRpdG9yLmZpbHRlci5jb2xzPVtdfWxpYlRhYkFjdGl2ZShyLGkpe3JldHVybiEoIXRoaXMubGlifHwhdGhpcy50YWJsZSkmJnI9PT10aGlzLmxpYiYmaT09PXRoaXMudGFibGV9dHJlZU9uRmlsdGVyKHIsaSl7dGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVPbkZp''@;'; put 'put ''bHRlcihyLGkpfWxpYnJhcnlPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy50cmVlTm9kZUxpYnJhcmllcyx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWVJFRiIpLFVuLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2Vh''@;'; put 'put ''cmNofW9uVGFibGVDbGljayhyLGkpe3RoaXMudGFibGU9cix0aGlzLmxpYj1pLkxJQlJBUllSRUYsdGhpcy5zZWxlY3RUYWJsZShyKSx0aGlzLmVkaXRUYWJsZSgpfWVkaXRUYWJsZSgpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3RoaXMubGliKyIuIit0aGlzLnRhYmxl''@;'; put 'put ''KX1nZXRMaWJyYXJ5VGFibGVTdGF0ZSgpe2lmKG51bGwhPT1Vbi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXMmJih0aGlzLnRyZWVOb2RlTGlicmFyaWVzPVVuLmVkaXRvci50cmVlTm9kZUxpYnJhcmllcyksIiIhPT1Vbi5lZGl0b3IubGlicmFyeSl7dGhpcy5saWI9VW4uZWRpdG9yLmxpYnJh''@;'; put 'put ''cnk7bGV0IHI9bnVsbDt0aGlzLnRyZWVOb2RlTGlicmFyaWVzJiYocj10aGlzLnRyZWVOb2RlTGlicmFyaWVzLmZpbmQoaT0+aS5MSUJSQVJZUkVGPT09dGhpcy5saWIpKSx0aGlzLnNlbGVjdExpYnJhcnkoVW4uZWRpdG9yLmxpYnJhcnksITAscil9fWdldEZyb21HbG9iYWxzKCl7dGhpcy5s''@;'; put 'put ''aWJzQW5kVGFibGVzPVVuLmVkaXRvci5saWJzQW5kVGFibGVzLHRoaXMubGlicmFyaWVzPVVuLmVkaXRvci5saWJyYXJpZXMsdGhpcy5nZXRMaWJyYXJ5VGFibGVTdGF0ZSgpLHRoaXMubG9hZGluZz0hMX1uZ0FmdGVyQ29udGVudEluaXQoKXtVbi5lZGl0b3Iuc3RhcnR1cFNldD90aGlzLmdl''@;'; put 'put ''dEZyb21HbG9iYWxzKCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmdldEZyb21HbG9iYWxzKCl9KX1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKSh6ZSh2YyksemUocDEp''@;'; put 'put ''LHplKEYyKSx6ZShmaCksemUodWQpLHplKGljKSl9LHRoaXMuXHUwMjc1Y21wPVByKHt0eXBlOmUsc2VsZWN0b3JzOltbImhvbWUtY29tcG9uZW50Il1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxzdGFuZGFsb25lOiExLGRlY2xzOjksdmFyczozLGNvbnN0czpbWyJzZWFy''@;'; put 'put ''Y2hMaWJUcmVlSW5wdXQiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZC1ibG9jayJdLFsxLCJzcGlubmVyLXdyYXBwZXItZnVsbHBhZ2UiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbMSwidHJlZS1zZWFy''@;'; put 'put ''Y2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJhcHBTdGVhbEZvY3VzIiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiwi''@;'; put 'put ''YXJpYS1oaWRkZW4iLCJ0cnVlIl0sWyJzaGFwZSIsInRpbWVzIiwiYXJpYS1sYWJlbCIsIkNsZWFyIGxpYnJhcmllcyBzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLCJhcmlhLWxhYmVsIiwiQ2xlYXIgbGlicmFyaWVzIHNlYXJjaCIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJM''@;'; put 'put ''b2FkaW5nIiwiY2xyLWV4cGFuZGVkIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIl0s''@;'; put 'put ''WyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJ0aW1lcyIsImFyaWEtbGFiZWwiLCJDbGVh''@;'; put 'put ''ciB0YWJsZXMgc2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwiYXJpYS1sYWJlbCIsIkNsZWFyIHRhYmxlcyBzZWFyY2giLDMsImNsaWNrIl0sWzQsIm5nVmFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJvbHQi''@;'; put 'put ''LCJhcmlhLWhpZGRlbiIsInRydWUiXSxbInNoYXBlIiwidGFibGUiLCJhcmlhLWhpZGRlbiIsInRydWUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVu''@;'; put 'put ''Il0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbInNyYyIsIi9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvc2VsZWN0LXRhYmxlLXBuZyIsImFsdCIsInNlbGVjdCB0YWJsZSBpY29uIiwxLCJzZWxlY3Qt''@;'; put 'put ''dGFibGUtaWNvbiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihpLG8pezEmaSYmKEooMCwiYXBwLXNpZGViYXIiKSgxLCJjbHItdHJlZSIpLHZ0KDIsWGFuLDYsMywiY2xyLXRyZWUtbm9kZSIs''@;'; put 'put ''MiksX28oMyxsc24sMSwxLG51bGwsbnVsbCxDbyksdGUoKSgpLEooNSwibWFpbiIsMykoNiwiZGl2Iiw0KSx2dCg3LGNzbiw0LDAsImRpdiIsNSksdnQoOCxoc24sNCwyLCJkaXYiLDYpLHRlKCkoKSksMiZpJiYoaWUoMiksX3QoKG51bGw9PW8udHJlZU5vZGVMaWJyYXJpZXM/bnVsbDpvLnRy''@;'; put 'put ''ZWVOb2RlTGlicmFyaWVzLmxlbmd0aCk+MD8yOi0xKSxpZSgpLHlvKG8udHJlZU5vZGVMaWJyYXJpZXMpLGllKDQpLF90KG8ubG9hZGluZz83Oi0xKSxpZSgpLF90KG8ubG9hZGluZz8tMTo4KSl9LGRlcGVuZGVuY2llczpbbHUsb2MsWGwsUHAsTzMsZDcsY3UsJDAsTHAsUGYsd3YsU3YsQ3Ys''@;'; put 'put ''JDYsbUEsRzZdLGVuY2Fwc3VsYXRpb246Mn0pKX1yZXR1cm4gbigpLGV9KSgpO2NvbnN0IHBzbj1uPT57Zm9yKGNvbnN0IGUgaW4gbilpZigiX19yb3dOdW1fXyIhPT1lKXJldHVybiExO3JldHVybiEwfSxabWU9bj0+e2NvbnN0IHQ9bi5tYXRjaCgvUlxbKFxkKylcXUNcWyhcZCspXF0vKTty''@;'; put 'put ''ZXR1cm4gdD97cm93OnBhcnNlSW50KHRbMV0sMTApLGNvbHVtbjpwYXJzZUludCh0WzJdLDEwKX06bnVsbH0sVlplPShuLGUpPT57aWYobi5zdGFydHNXaXRoKCJBQlNPTFVURSAiKSYmKG49bi5yZXBsYWNlKCJBQlNPTFVURSAiLCIiKSksbi5zdGFydHNXaXRoKCJSRUxBVElWRSAiKSl7Y29u''@;'; put 'put ''c3QgdD1abWUobik7aWYodCl7Y29uc3R7cm93OnIsY29sdW1uOml9PXQ7bj1pMC51dGlscy5lbmNvZGVfY2VsbCh7cjpyLTEsYzppLTF9KX19aWYobi5zdGFydHNXaXRoKCJNQVRDSCAiKSl7bGV0IHQ9IiI7Y29uc3Qgcj1uLm1hdGNoKC9DXFtcZCtcXTooLispLyk7ciYmKHQ9clsxXSk7Y29u''@;'; put 'put ''c3Qgbz1uLnNwbGl0KCIgIilbMV07bGV0IGE9IiIsbD0tMSx1PSIiO2lmKGlzTmFOKE51bWJlcihvKSk/YT1vOmw9cGFyc2VJbnQobyksLTEhPT1sKXtjb25zdCBPPWVbbC0xXTtmb3IoY29uc3QgWiBpbiBPKWlmKCJfX3Jvd051bV9fIiE9PVomJk9bWl09PT10KXt1PVorbDticmVha319ZWxz''@;'; put 'put ''ZSBmb3IobGV0IE89MDtPPGUubGVuZ3RoO08rKylpZihlW09dW2FdPT09dCl7dT1hKyhPKzEpO2JyZWFrfWNvbnN0IGc9aTAudXRpbHMuZGVjb2RlX2NlbGwodSksRT1abWUobik7aWYoRSl7Y29uc3R7cm93Ok8sY29sdW1uOlp9PUU7bj1pMC51dGlscy5lbmNvZGVfY2VsbCh7cjpnLnIrTyxj''@;'; put 'put ''OmcuYytafSl9fXJldHVybiBufSxtc249WyJmaWxlVXBsb2FkSW5wdXQiXTtmdW5jdGlvbiB2c24obixlKXsxJm4mJihKKDAsImRpdiIsMyksSXQoMSwiY2xyLXNwaW5uZXIiLDI3KSx0ZSgpKX1mdW5jdGlvbiBfc24obixlKXsxJm4mJkl0KDAsImNsci1pY29uIiw3KX1mdW5jdGlvbiB5c24o''@;'; put 'put ''bixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImNsci1pY29uIiwyOCksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoKTtyZXR1cm4gaS5zZWFyY2hTdHJpbmc9IiIsWGUoaS54bG1hcExpc3RPbkZpbHRlcigpKX0pLHRlKCl9fWZ1bmN0aW9uIGJzbihuLGUpe2lm''@;'; put 'put ''KDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLXRyZWUtbm9kZSIpKDEsImJ1dHRvbiIsMjkpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBpPVllKHQpLiRpbXBsaWNpdDtyZXR1cm4gWGUoVGUoKS54bG1hcE9uQ2xpY2soaSkpfSksSXQoMiwiY2xyLWljb24iLDMwKSxTZSgzKSx0ZSgp''@;'; put 'put ''KCl9aWYoMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0LHI9VGUoKTtpZSgpLHdyKCJhY3RpdmUiLHIuaXNBY3RpdmVYTE1hcCh0LmlkKSksaWUoMiksU3IoIiAiLHQuaWQsIiAiKX19ZnVuY3Rpb24gd3NuKG4sZSl7MSZuJiYoSigwLCJwIiwzMiksU2UoMSwiIFBsZWFzZSBzZWxlY3QgYSBtYXAg''@;'; put 'put ''IiksdGUoKSl9ZnVuY3Rpb24gQ3NuKG4sZSl7MSZuJiYoSigwLCJwIiwzMiksU2UoMSwiIE5vIGV4Y2VsIG1hcCBpcyBmb3VuZCAiKSx0ZSgpKX1mdW5jdGlvbiBTc24obixlKXtpZigxJm4mJihKKDAsImRpdiIsMTApLEl0KDEsImltZyIsMzEpLHZ0KDIsd3NuLDIsMCwicCIsMzIpLHZ0KDMs''@;'; put 'put ''Q3NuLDIsMCwicCIsMzIpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgpO2llKDIpLF90KHQueGxtYXBzLmxlbmd0aD4wPzI6LTEpLGllKCksX3QodC54bG1hcHMubGVuZ3RoPDE/MzotMSl9fWZ1bmN0aW9uIEVzbihuLGUpe2lmKDEmbiYmKEooMCwiZGl2IiwxMSkoMSwic3BhbiIsMzMpLFNlKDIs''@;'; put 'put ''IiBMb2FkaW5nLi4uICIpLHRlKCksSigzLCJkaXYiKSg0LCJoNCIpLFNlKDUpLHRlKCkoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSg1KSxwcih0LmlzTG9hZGluZ0Rlc2MpfX1mdW5jdGlvbiBNc24obixlKXsxJm4mJkl0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIFRzbihuLGUp''@;'; put 'put ''ezEmbiYmSXQoMCwiY2xyLXRhYi1jb250ZW50Iil9ZnVuY3Rpb24geHNuKG4sZSl7MSZuJiZhdSgwKX1mdW5jdGlvbiBBc24obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRpdiIsMzQpLHd0KCJmaWxlRHJhZ2dlZE92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCku''@;'; put 'put ''b25TaG93VXBsb2FkTW9kYWwoKSl9KSxKKDEsImNsci10YWJzIikoMiwiY2xyLXRhYiIpKDMsImJ1dHRvbiIsMzUpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtZZSh0KTtjb25zdCBpPVRlKCk7cmV0dXJuIFhlKGkuc2VsZWN0ZWRUYWI9aS5UYWJzRW51bS5SdWxlcyl9KSxTZSg0LCIgUnVsZXMg''@;'; put 'put ''IiksdGUoKSxZbig1LE1zbiwxLDAsImNsci10YWItY29udGVudCIsMzYpLHRlKCksSig2LCJjbHItdGFiIikoNywiYnV0dG9uIiwzNSksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoKTtyZXR1cm4gWGUoaS5zZWxlY3RlZFRhYj1pLlRhYnNFbnVtLkRhdGEpfSksU2Uo''@;'; put 'put ''OCwiRGF0YSIpLHRlKCksWW4oOSxUc24sMSwwLCJjbHItdGFiLWNvbnRlbnQiLDM2KSx0ZSgpKCksWW4oMTAseHNuLDEsMCwibmctY29udGFpbmVyIiwzNyksSigxMSwiZGl2IiwzOCkoMTIsImgzIiwzOSksU2UoMTMpLHRlKCksSigxNCwiaSIsMzkpLFNlKDE1KSx0ZSgpLEooMTYsInAiLDM5''@;'; put 'put ''KSxTZSgxNywiIFJ1bGVzIFNvdXJjZTogIiksSigxOCwiYSIsNDApLFNlKDE5KSx0ZSgpKCksSigyMCwicCIsMzkpLFNlKDIxLCIgVGFyZ2V0IGRhdGFzZXQ6ICIpLEooMjIsImEiLDQwKSxTZSgyMyksdGUoKSgpKCksSigyNCwiZGl2Iiw0MSksSXQoMjUsImhvdC10YWJsZSIsNDIpLHRlKCko''@;'; put 'put ''KX1pZigyJm4pe2NvbnN0IHQ9VGUoKSxyPW9vKDQyKTtpZSg1KSxydCgiY2xySWZBY3RpdmUiLHQuc2VsZWN0ZWRUYWI9PT10LlRhYnNFbnVtLlJ1bGVzKSxpZSg0KSxydCgiY2xySWZBY3RpdmUiLHQuc2VsZWN0ZWRUYWI9PT10LlRhYnNFbnVtLkRhdGEpLGllKCkscnQoIm5nVGVtcGxhdGVP''@;'; put 'put ''dXRsZXQiLHIpLGllKDMpLFNyKCIgIix0LnNlbGVjdGVkWExNYXAuaWQsIiAiKSxpZSgyKSxwcih0LnNlbGVjdGVkWExNYXAuZGVzY3JpcHRpb24pLGllKDMpLHJ0KCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK3QucnVsZXNTb3VyY2UpLGllKCksU3IoIiAiLHQucnVsZXNTb3VyY2UsIiAi''@;'; put 'put ''KSxpZSgzKSxydCgicm91dGVyTGluayIsIi92aWV3L2RhdGEvIit0LnNlbGVjdGVkWExNYXAudGFyZ2V0RFMpLGllKCksU3IoIiAiLHQuc2VsZWN0ZWRYTE1hcC50YXJnZXREUywiICIpLGllKDIpLHJ0KCJkYXRhIix0LnNlbGVjdGVkVGFiPT09dC5UYWJzRW51bS5SdWxlcz90LnhsbWFwUnVs''@;'; put 'put ''ZXM6dC54bERhdGEpKCJzZXR0aW5ncyIsdC5ob3RUYWJsZVNldHRpbmdzKCkpfX1mdW5jdGlvbiBrc24obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRpdiIsNDQpKDEsImJ1dHRvbiIsNDUpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoMikub25TaG93''@;'; put 'put ''VXBsb2FkTW9kYWwoKSl9KSxJdCgyLCJjbHItaWNvbiIsNDYpLEooMywic3BhbiIpLFNlKDQsIlVwbG9hZCIpLHRlKCkoKSgpfX1mdW5jdGlvbiBSc24obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRpdiIsNDQpKDEsImJ1dHRvbiIsNDUpLHd0KCJjbGljayIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gWWUodCksWGUoVGUoMikuc3VibWl0RXhjZWwoKSl9KSxJdCgyLCJjbHItaWNvbiIsNDYpLEooMywic3BhbiIpLFNlKDQsIlN1Ym1pdCIpLHRlKCkoKSgpfX1mdW5jdGlvbiBJc24obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRpdiIsNDQpKDEsImJ1dHRvbiIsNDcpLHd0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoMikuZGlzY2FyZEV4dHJhY3RlZERhdGEoKSl9KSxJdCgyLCJjbHItaWNvbiIsOCksSigzLCJzcGFuIiksU2UoNCwiRGlzY2FyZCIpLHRlKCkoKSgpfX1mdW5jdGlvbiBEc24obixlKXtpZigxJm4mJihKKDAsImRpdiIsNDMp''@;'; put 'put ''LHZ0KDEsa3NuLDUsMCwiZGl2Iiw0NCksdnQoMixSc24sNSwwLCJkaXYiLDQ0KSx2dCgzLElzbiw1LDAsImRpdiIsNDQpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgpO2llKCksX3QodC5zdGF0dXM9PT10LlN0YXR1c0VudW0uUmVhZHlUb1VwbG9hZD8xOi0xKSxpZSgpLF90KHQuc3RhdHVzPT09''@;'; put 'put ''dC5TdGF0dXNFbnVtLlJlYWR5VG9TdWJtaXQ/MjotMSksaWUoKSxfdCh0LnN0YXR1cz09PXQuU3RhdHVzRW51bS5SZWFkeVRvU3VibWl0PzM6LTEpfX12YXIgUm09ZnVuY3Rpb24obil7cmV0dXJuIG5bbi5Ob01hcFNlbGVjdGVkPTBdPSJOb01hcFNlbGVjdGVkIixuW24uRmV0Y2hpbmdSdWxl''@;'; put 'put ''cz0xXT0iRmV0Y2hpbmdSdWxlcyIsbltuLlJlYWR5VG9VcGxvYWQ9Ml09IlJlYWR5VG9VcGxvYWQiLG5bbi5FeHRyYWN0aW5nRGF0YT0zXT0iRXh0cmFjdGluZ0RhdGEiLG5bbi5SZWFkeVRvU3VibWl0PTRdPSJSZWFkeVRvU3VibWl0IixuW24uU3VibWl0dGluZ0V4dHJhY3RlZERhdGE9NV09''@;'; put 'put ''IlN1Ym1pdHRpbmdFeHRyYWN0ZWREYXRhIixuW24uU3VibWl0dGluZz02XT0iU3VibWl0dGluZyIsbn0oUm18fHt9KSx2QT1mdW5jdGlvbihuKXtyZXR1cm4gbltuLlJ1bGVzPTBdPSJSdWxlcyIsbltuLkRhdGE9MV09IkRhdGEiLG59KHZBfHx7fSk7bGV0IEJaZT0oKCk9Pnt2YXIgbjtjbGFz''@;'; put 'put ''cyBle2J1aWxkSG90U2V0dGluZ3MoKXtyZXR1cm57bXVsdGlDb2x1bW5Tb3J0aW5nOiEwLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OjUwLGNvbEhlYWRlcnM6dGhpcy5zZWxlY3RlZFRhYj09PXRoaXMuVGFic0VudW0uUnVsZXM/dGhpcy54bG1hcFJ1bGVzSGVhZGVyczp0aGlzLnhsVXBs''@;'; put 'put ''b2FkSGVhZGVyLGNvbHVtbnM6dGhpcy5zZWxlY3RlZFRhYj09PXRoaXMuVGFic0VudW0uUnVsZXM/dGhpcy54bG1hcFJ1bGVzQ29sdW1uczp0aGlzLnhsVXBsb2FkQ29sdW1ucyxmaWx0ZXJzOiEwLGhlaWdodDoiMTAwJSIsc3RyZXRjaEg6ImFsbCIsYWZ0ZXJHZXRDb2xIZWFkZXI6dGhpcy5h''@;'; put 'put ''ZnRlckdldENvbEhlYWRlcixtb2RpZnlDb2xXaWR0aDp0aGlzLm1heFdpZHRoQ2hlY2tlcixjZWxsczp0aGlzLmdldENlbGxDb25maWd1cmF0aW9uLG1heFJvd3M6dGhpcy5ob3RUYWJsZU1heFJvd3MsbWFudWFsQ29sdW1uUmVzaXplOiEwLHJvd0hlYWRlcnM6dGhpcy5yb3dIZWFkZXJzLHJv''@;'; put 'put ''d0hlYWRlcldpZHRoOjE1LHJvd0hlaWdodHM6MjAsbGljZW5zZUtleTp0aGlzLmhvdFRhYmxlTGljZW5zZUtleSxjbGFzc05hbWU6Imh0RGFyayIsdGhlbWU6Imh0LXRoZW1lLWNsYXNzaWMifX1zZXRTZWxlY3RlZFRhYihyKXt0aGlzLnNlbGVjdGVkVGFiPXIsdGhpcy5ob3RUYWJsZVNldHRp''@;'; put 'put ''bmdzLnNldCh0aGlzLmJ1aWxkSG90U2V0dGluZ3MoKSl9Y29uc3RydWN0b3IocixpLG8sYSxsLHUsZyl7dGhpcy5ldmVudFNlcnZpY2U9cix0aGlzLmxpY2VuY2VTZXJ2aWNlPWksdGhpcy5sb2dnZXJTZXJ2aWNlPW8sdGhpcy5yb3V0ZT1hLHRoaXMucm91dGVyPWwsdGhpcy5zYXNTdG9yZVNl''@;'; put 'put ''cnZpY2U9dSx0aGlzLnNhc1NlcnZpY2U9Zyx0aGlzLmNvbnRlbnRDb250YWluZXJDbGFzcz0hMCx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0PW5ldyBrOCx0aGlzLlN0YXR1c0VudW09Um0sdGhpcy5UYWJzRW51bT12QSx0aGlzLnNlbGVjdGVkVGFiPXZBLlJ1bGVzLHRoaXMucnVsZXNT''@;'; put 'put ''b3VyY2U9VW4uZGNMaWIrIi5NUEVfWExNQVBfUlVMRVMiLHRoaXMueGxtYXBzPVtdLHRoaXMuc2VsZWN0ZWRYTE1hcD12b2lkIDAsdGhpcy5zZWFyY2hTdHJpbmc9IiIsdGhpcy54bG1hcHNMb2FkaW5nPSEwLHRoaXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIix0aGlzLnN0''@;'; put 'put ''YXR1cz1SbS5Ob01hcFNlbGVjdGVkLHRoaXMueGxtYXBSdWxlc0hlYWRlcnM9WyJYTE1BUF9TSEVFVCIsIlhMTUFQX1JBTkdFX0lEIiwiWExNQVBfU1RBUlQiLCJYTE1BUF9GSU5JU0giXSx0aGlzLnhsbWFwUnVsZXNDb2x1bW5zPVt7ZGF0YToiWExNQVBfU0hFRVQifSx7ZGF0YToiWExNQVBf''@;'; put 'put ''UkFOR0VfSUQifSx7ZGF0YToiWExNQVBfU1RBUlQifSx7ZGF0YToiWExNQVBfRklOSVNIIn1dLHRoaXMueGxtYXBSdWxlcz1bXSx0aGlzLnhsVXBsb2FkSGVhZGVyPVsiWExNQVBfUkFOR0VfSUQiLCJST1dfTk8iLCJDT0xfTk8iLCJWQUxVRV9UWFQiXSx0aGlzLnhsVXBsb2FkQ29sdW1ucz1b''@;'; put 'put ''e2RhdGE6IlhMTUFQX1JBTkdFX0lEIn0se2RhdGE6IlJPV19OTyJ9LHtkYXRhOiJDT0xfTk8ifSx7ZGF0YToiVkFMVUVfVFhUIn1dLHRoaXMueGxEYXRhPVtdLHRoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMuaGFzQmFzZURyb3Bab25lT3Zlcj0hMSx0aGlzLmZpbGVuYW1lPSIiLHRoaXMu''@;'; put 'put ''c3VibWl0TGltaXROb3RpY2U9ITEsdGhpcy51cGxvYWRlcj1uZXcgZ2dlLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuaG90VGFibGVMaWNlbnNlS2V5PXZvaWQgMCx0aGlzLmhvdFRhYmxlTWF4Um93cz10aGlzLmxpY2VuY2VTdGF0ZS52''@;'; put 'put ''YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkfHwxLzAsdGhpcy5ob3RUYWJsZVNldHRpbmdzPUIxKHRoaXMuYnVpbGRIb3RTZXR0aW5ncygpKX1hZnRlckdldENvbEhlYWRlcihyLGkpe2kuY2xhc3NMaXN0LmFkZChVbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfXhsbWFwT25D''@;'; put 'put ''bGljayhyKXtyLmlkIT09dGhpcy5zZWxlY3RlZFhMTWFwPy5pZCYmKHRoaXMuc2VsZWN0ZWRYTE1hcD1yLHRoaXMueGxEYXRhPVtdLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy51cGxvYWRlci5xdWV1ZT1bXSx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBs''@;'; put 'put ''b2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSx0aGlzLnNldFNlbGVjdGVkVGFiKHZBLlJ1bGVzKSx0aGlzLnZpZXdYTE1hcFJ1bGVzKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2hvbWUvZXhjZWwtbWFwcy8iK3IuaWQpKX14bG1hcExpc3RPbkZp''@;'; put 'put ''bHRlcigpe3RoaXMueGxtYXBzPXRoaXMuc2VhcmNoU3RyaW5nLmxlbmd0aD4wP1VuLnhsbWFwcy5maWx0ZXIoaT0+aS5pZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoU3RyaW5nLnRvTG93ZXJDYXNlKCkpKTpVbi54bG1hcHN9aXNBY3RpdmVYTE1hcChyKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5zZWxlY3RlZFhMTWFwPy5pZD09PXJ9bWF4V2lkdGhDaGVja2VyKHIsaSl7cmV0dXJuIHI+MjAwPzIwMDpyfWdldENlbGxDb25maWd1cmF0aW9uKCl7cmV0dXJue3JlYWRPbmx5OiEwfX1yb3dIZWFkZXJzKCl7cmV0dXJuIiAifW9uU2hvd1VwbG9hZE1vZGFsKCl7dGhpcy5zaG93VXBsb2Fk''@;'; put 'put ''TW9kYWw9ITB9ZmlsZU92ZXJCYXNlKHIpe3RoaXMuaGFzQmFzZURyb3Bab25lT3Zlcj1yfWdldEZpbGVEZXNjKHIsaT0hMSl7dmFyIG89dGhpcztjb25zdCBhPWk/clswXTpyLnRhcmdldC5maWxlc1swXTtpZighYSlyZXR1cm47Y29uc3QgbD1hLm5hbWU7aWYodGhpcy5maWxlbmFtZT1sLCJ4''@;'; put 'put ''bHMiPT09bC5zbGljZShsLmxhc3RJbmRleE9mKCIuIikrMSxsLmxhc3RJbmRleE9mKCIuIikrNCkudG9Mb3dlckNhc2UoKSl7dGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy5pc0xvYWRpbmc9ITAsdGhpcy5pc0xvYWRpbmdEZXNjPSJFeHRyYWN0aW5nIERhdGEiLHRoaXMuc3RhdHVzPVJt''@;'; put 'put ''LkV4dHJhY3RpbmdEYXRhO2NvbnN0IGc9bmV3IEZpbGVSZWFkZXI7Zy5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgRT1DcihmdW5jdGlvbiooTyl7Y29uc3QgWj0obj0+e2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkobik7bGV0IHQ9IiI7Y29uc3Qgcj1lLmJ5dGVMZW5ndGg7Zm9yKGxldCBpPTA7aTxy''@;'; put 'put ''O2krKyl0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbaV0pO3JldHVybiB0fSkoTy50YXJnZXQucmVzdWx0KTtsZXQgZWU7Y29uc3QgdmU9e3R5cGU6ImJpbmFyeSIsY2VsbERhdGVzOiExLGNlbGxGb3JtdWxhOiEwLGNlbGxTdHlsZXM6ITAsY2VsbE5GOiExLGNlbGxUZXh0OiExfTt0cnl7ZWU9''@;'; put 'put ''aTAucmVhZChaLHsuLi52ZX0pfWNhdGNoKE1lKXtvLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLE1lLHZvaWQgMCwiRXJyb3IgcmVhZGluZyBmaWxlIil9aWYoIWVlKXJldHVybiBvLmlzTG9hZGluZz0hMSxvLmlzTG9hZGluZ0Rlc2M9IiIsby5zdGF0dXM9Um0uUmVhZHlUb1Vw''@;'; put 'put ''bG9hZCx2b2lkIG8udXBsb2FkZXIucXVldWUucG9wKCk7by5leHRyYWN0RGF0YShlZSl9KTtyZXR1cm4gZnVuY3Rpb24oTyl7cmV0dXJuIEUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxnLnJlYWRBc0FycmF5QnVmZmVyKGEpfWVsc2UgdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRp''@;'; put 'put ''bmdEZXNjPSIiLHRoaXMuc3RhdHVzPVJtLlJlYWR5VG9VcGxvYWQsdGhpcy5zaG93VXBsb2FkTW9kYWw9ITAsdGhpcy51cGxvYWRlci5xdWV1ZS5wb3AoKSx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCdJbnZhbGlkIGZpbGUgdHlwZSAiPGI+Jyt0aGlzLmZpbGVuYW1l''@;'; put 'put ''Kyc8L2I+Ii4gUGxlYXNlIHVwbG9hZCBleGNlbCBmaWxlLicpfWRpc2NhcmRFeHRyYWN0ZWREYXRhKCl7dGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMuc3RhdHVzPVJtLlJlYWR5VG9VcGxvYWQsdGhpcy54bERhdGE9W10sdGhpcy5zZXRTZWxlY3RlZFRhYih2''@;'; put 'put ''QS5SdWxlcyksdGhpcy5maWxlbmFtZT0iIix0aGlzLnVwbG9hZGVyLnF1ZXVlPVtdLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpfXN1Ym1pdEV4Y2VsKCl7dGhpcy5s''@;'; put 'put ''aWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQ9PT0xLzA/dGhpcy5zdWJtaXQoKTp0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSEwfXN1Ym1pdCgpe2lmKCF0aGlzLnNlbGVjdGVkWExNYXB8fCF0aGlzLnhsRGF0YS5sZW5ndGgpcmV0dXJuO3RoaXMuc3RhdHVzPVJtLlN1Ym1pdHRp''@;'; put 'put ''bmcsdGhpcy5pc0xvYWRpbmc9ITAsdGhpcy5pc0xvYWRpbmdEZXNjPSJTdWJtaXR0aW5nIGV4dHJhY3RlZCBkYXRhIjtjb25zdCByPVtdO2Zvcihjb25zdCB1IG9mIHRoaXMudXBsb2FkZXIucXVldWUpci5wdXNoKHtmaWxlOnUsZmlsZU5hbWU6dS5uYW1lfSk7Y29uc3QgaT1PYmplY3Qua2V5''@;'; put 'put ''cyh0aGlzLnhsRGF0YVswXSkuam9pbigiLCIpKyJcbiIrdGhpcy54bERhdGEuc2xpY2UoMCx0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCkubWFwKHU9Pk9iamVjdC52YWx1ZXModSkuam9pbigiLCIpKS5qb2luKCJcbiIpLG89bmV3IEJsb2IoW2ldLHt0eXBlOiJh''@;'; put 'put ''cHBsaWNhdGlvbi9jc3YifSksYT1VbWUobyx0aGlzLmZpbGVuYW1lKyIuY3N2Iik7ci5wdXNoKHtmaWxlOmEsZmlsZU5hbWU6YS5uYW1lfSksdGhpcy5zYXNTZXJ2aWNlLnVwbG9hZEZpbGUoInNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiLHIse3RhYmxlOnRoaXMuc2VsZWN0ZWRYTE1hcC50''@;'; put 'put ''YXJnZXREU30pLnRoZW4odT0+e2lmKHUuYWRhcHRlclJlc3BvbnNlLnNhc2pzQWJvcnQpe2NvbnN0IGc9dS5hZGFwdGVyUmVzcG9uc2U7dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoIiIsZy5zYXNqc0Fib3J0WzBdLk1TRyx7U1lTV0FSTklOR1RFWFQ6Zy5TWVNXQVJOSU5HVEVY''@;'; put 'put ''VCxTWVNFUlJPUlRFWFQ6Zy5TWVNFUlJPUlRFWFQsTUFDOmcuc2FzanNBYm9ydFswXS5NQUMsX1BST0dSQU06Zy5fUFJPR1JBTX0pfWVsc2UgdS5hZGFwdGVyUmVzcG9uc2Uuc2FzcGFyYW1zJiZ0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIit1LmFkYXB0ZXJSZXNwb25zZS5z''@;'; put 'put ''YXNwYXJhbXNbMF0uRFNJRCl9KS5jYXRjaCh1PT57dGhpcy5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJmaWxlIHVwbG9hZCIsdS5yZXNwb25zZSl9KS5maW5hbGx5KCgpPT57dGhpcy5zdGF0dXM9Um0uUmVhZHlUb1N1Ym1pdCx0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9h''@;'; put 'put ''ZGluZ0Rlc2M9IiJ9KX1leHRyYWN0RGF0YShyKXtjb25zdCBpPVtdO3RoaXMueGxtYXBSdWxlcy5mb3JFYWNoKG89PntsZXQgYT1vLlhMTUFQX1NIRUVUO2lmKGEuc3RhcnRzV2l0aCgiLyIpKXtjb25zdCB2ZT1hLnNwbGl0KCIvIilbMV0sTWU9cGFyc2VJbnQodmUpLTE7YT1yLlNoZWV0TmFt''@;'; put 'put ''ZXNbTWVdfWNvbnN0IGw9ci5TaGVldHNbYV0sdT1pMC51dGlscy5zaGVldF90b19qc29uKGwse3JhdzohMCxoZWFkZXI6IkEiLGJsYW5rcm93czohMH0pLGc9VlplKG8uWExNQVBfU1RBUlQsdSksRT0oKG4sZSx0KT0+e2lmKCIiPT09ZSlyZXR1cm4gbjtpZihlLnN0YXJ0c1dpdGgoIkFCU09M''@;'; put 'put ''VVRFICIpJiYoZT1lLnJlcGxhY2UoIkFCU09MVVRFICIsIiIpKSxlLnN0YXJ0c1dpdGgoIlJFTEFUSVZFICIpKXtjb25zdCByPVptZShlKTtpZihyKXtjb25zdHtyb3c6aSxjb2x1bW46b309cix7cjphLGM6bH09aTAudXRpbHMuZGVjb2RlX2NlbGwobik7ZT1pMC51dGlscy5lbmNvZGVfY2Vs''@;'; put 'put ''bCh7cjphK2ksYzpsK299KX19aWYoZS5zdGFydHNXaXRoKCJNQVRDSCAiKSYmKGU9VlplKGUsdCkpLCJMQVNURE9XTiI9PT1lKXtjb25zdHtyLGM6aX09aTAudXRpbHMuZGVjb2RlX2NlbGwobiksbz1pMC51dGlscy5lbmNvZGVfY29sKGkpO2xldCBhPXI7Zm9yKGxldCBsPXIrMTtsPHQubGVu''@;'; put 'put ''Z3RoJiZ0W2xdW29dO2wrKylhPWw7ZT1vKyhhKzEpfWlmKCJCTEFOS1JPVyI9PT1lKXtjb25zdHtyfT1pMC51dGlscy5kZWNvZGVfY2VsbChuKTtsZXQgaT1yO2ZvcihsZXQgdT1yKzE7dTx0Lmxlbmd0aCYmIXBzbih0W3VdKTt1KyspaT11O2U9T2JqZWN0LmtleXModFtpXSkuZmlsdGVyKHU9''@;'; put 'put ''PiJfX3Jvd051bV9fIiE9PXUpLnJlZHVjZSgodSxnKT0+Zz51P2c6dSwiIikrKGkrMSl9cmV0dXJuIGV9KShnLG8uWExNQVBfRklOSVNILHUpLE89YCR7Z306JHtFfWAsWj1pMC51dGlscy5kZWNvZGVfcmFuZ2UoTyksZWU9aTAudXRpbHMuc2hlZXRfdG9fanNvbihsLHtyYXc6ITAscmFuZ2U6''@;'; put 'put ''TyxoZWFkZXI6IkEiLGJsYW5rcm93czohMH0pO2ZvcihsZXQgdmU9MDt2ZTxlZS5sZW5ndGg7dmUrKyl7Y29uc3QgTWU9ZWVbdmVdO2ZvcihsZXQgSGU9Wi5zLmMsV2U9MDtIZTw9Wi5lLmM7SGUrKyxXZSsrKXtjb25zdCBhdD1pMC51dGlscy5lbmNvZGVfY29sKEhlKTthdCBpbiBNZSYmaS5w''@;'; put 'put ''dXNoKHtMT0FEX1JFRjoiMCIsWExNQVBfSUQ6by5YTE1BUF9JRCxYTE1BUF9SQU5HRV9JRDpvLlhMTUFQX1JBTkdFX0lELFJPV19OTzp2ZSsxLENPTF9OTzpXZSsxLFZBTFVFX1RYVDpNZVthdF19KX19fSksdGhpcy5zdGF0dXM9Um0uUmVhZHlUb1N1Ym1pdCx0aGlzLmlzTG9hZGluZz0hMSx0''@;'; put 'put ''aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy54bERhdGE9aSx0aGlzLnNldFNlbGVjdGVkVGFiKHZBLkRhdGEpfXZpZXdYTE1hcFJ1bGVzKCl7dmFyIHI9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7ci5zZWxlY3RlZFhMTWFwJiYoci5pc0xvYWRpbmc9ITAsci5pc0xvYWRpbmdEZXNjPSJM''@;'; put 'put ''b2FkaW5nIGV4Y2VsIHJ1bGVzIixyLnN0YXR1cz1SbS5GZXRjaGluZ1J1bGVzLHlpZWxkIHIuc2FzU3RvcmVTZXJ2aWNlLmdldFhMTWFwUnVsZXMoci5zZWxlY3RlZFhMTWFwLmlkKS50aGVuKGk9PntyLnhsbWFwUnVsZXM9aS54bG1hcHJ1bGVzLHIuc3RhdHVzPVJtLlJlYWR5VG9VcGxvYWR9''@;'; put 'put ''KS5jYXRjaChpPT57ci5sb2dnZXJTZXJ2aWNlLmVycm9yKGkpfSksci5pc0xvYWRpbmc9ITEsci5pc0xvYWRpbmdEZXNjPSIiKX0pKCl9bG9hZCgpe3RoaXMueGxtYXBzPVVuLnhsbWFwcyx0aGlzLnhsbWFwc0xvYWRpbmc9ITE7Y29uc3Qgcj10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5p''@;'; put 'put ''ZDtpZihyKXtjb25zdCBpPXRoaXMueGxtYXBzLmZpbmQobz0+by5pZD09PXIpO2kmJih0aGlzLnNlbGVjdGVkWExNYXA9aSx0aGlzLnZpZXdYTE1hcFJ1bGVzKCkpfX1uZ09uSW5pdCgpe3RoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShyPT57dGhpcy5ob3RU''@;'; put 'put ''YWJsZUxpY2Vuc2VLZXk9cix0aGlzLmhvdFRhYmxlU2V0dGluZ3Muc2V0KHRoaXMuYnVpbGRIb3RTZXR0aW5ncygpKX0pfW5nQWZ0ZXJWaWV3SW5pdCgpe31uZ0FmdGVyQ29udGVudEluaXQoKXtVbi5lZGl0b3Iuc3RhcnR1cFNldD90aGlzLmxvYWQoKTp0aGlzLmV2ZW50U2VydmljZS5vblN0''@;'; put 'put ''YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmliZSgoKT0+e3RoaXMubG9hZCgpfSl9c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSkoemUodWQpLHplKEYyKSx6ZSh4MyksemUocDEpLHplKHZjKSx6ZShCcCksemUoaWMpKX0sdGhpcy5cdTAy''@;'; put 'put ''NzVjbXA9UHIoe3R5cGU6ZSxzZWxlY3RvcnM6W1siYXBwLXhsbWFwIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihpLG8pe2lmKDEmaSYmV28obXNuLDUpLDImaSl7bGV0IGE7Y2koYT11aSgpKSYmKG8uZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9YSl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpm''@;'; put 'put ''dW5jdGlvbihpLG8pezImaSYmd3IoImNvbnRlbnQtY29udGFpbmVyIixvLmNvbnRlbnRDb250YWluZXJDbGFzcyl9LHN0YW5kYWxvbmU6ITEsZGVjbHM6NDMsdmFyczoxNSxjb25zdHM6W1sic2VhcmNoWExNYXBUcmVlSW5wdXQiLCIiXSxbImZpbGVVcGxvYWRJbnB1dCIsIiJdLFsiYWN0aW9u''@;'; put 'put ''QnV0dG9ucyIsIiJdLFsxLCJteS0xMC1teC1hdXRvIiwidGV4dC1jZW50ZXIiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgSWQiLCJuYW1lIiwiaW5w''@;'; put 'put ''dXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsi''@;'; put 'put ''YXBwRHJhZ05kcm9wIiwiIiwxLCJjYXJkIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbImFwcEZpbGVEcm9wIiwiIiwxLCJyZWxhdGl2ZSIsMywiZmlsZU92ZXIiLCJmaWxlRHJvcCIsImNsck1vZGFsT3BlbkNoYW5nZSIsInVwbG9hZGVyIiwiY2xyTW9kYWxTaXplIiwi''@;'; put 'put ''Y2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJkcm9wLWFyZWEiXSxbMSwiY2xyLWNvbC1tZC0xMiJdLFsxLCJjbHItcm93IiwiY2FyZC1ibG9jayIsIm10LTE1Iiwi''@;'; put 'put ''ZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiY2xyLWNvbC1tZC0zIiwiZmlsdGVyQnRuIl0sWzEsImZpbHRlckJ0biIsInctMTAwIl0sWyJmb3IiLCJmaWxlLXVwbG9hZCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEw''@;'; put 'put ''MCJdLFsiaGlkZGVuIiwiIiwiaWQiLCJmaWxlLXVwbG9hZCIsInR5cGUiLCJmaWxlIiwiYXBwRmlsZVNlbGVjdCIsIiIsMywiY2hhbmdlIiwidXBsb2FkZXIiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm0tMCJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5''@;'; put 'put ''cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsiY2xyTWVkaXVtIiwiIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbInNoYXBlIiwiZmlsZSJdLFsic3JjIiwiL1NBU1N0''@;'; put 'put ''b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9zZWxlY3QtdGFibGUtcG5nIiwiYWx0Iiwic2VsZWN0IHRhYmxlIGljb24iLDEsInNlbGVjdC10YWJsZS1pY29uIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwi''@;'; put 'put ''Y29sb3ItZ3JheSIsIm10LTEwIl0sWzEsInNwaW5uZXIiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwiY2FyZCIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwzLCJmaWxlRHJhZ2dlZE92ZXIiXSxbImNsclRhYkxpbmsiLCIiLDMsImNsaWNrIl0sWzQsImNscklmQWN0aXZlIl0s''@;'; put 'put ''WzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwiY2xyLXJvdyIsIm0tMCIsIm1iLTEwLWkiLCJ2aWV3ZXJUaXRsZSJdLFsxLCJkLWZsZXgiLCJjbHItY29sLTEyIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJtdC01LWkiXSxbImNkcy10ZXh0IiwibGFiZWxMaW5rIiwxLCJtbC0xMCIs''@;'; put 'put ''Mywicm91dGVyTGluayJdLFsxLCJjbHItZmxleC0xIl0sWyJpZCIsImhvdC10YWJsZSIsMywiZGF0YSIsInNldHRpbmdzIl0sWzEsImNsci1yb3ciLCJtLTAiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNs''@;'; put 'put ''ci1jb2wtMTIiLCJjbHItY29sLWxnLTQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwiYnRuLWJsb2NrIiwibXItMCIsMywiY2xpY2siXSxbInNoYXBlIiwidXBsb2FkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0''@;'; put 'put ''bGluZS1kYW5nZXIiLCJidG4tYmxvY2siLCJtci0wIiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihpLG8pe2lmKDEmaSl7Y29uc3QgYT13bigpO0ooMCwiYXBwLXNpZGViYXIiKSx2dCgxLHZzbiwyLDAsImRpdiIsMyksSigyLCJjbHItdHJlZSIpKDMsImNsci10cmVlLW5vZGUiLDQp''@;'; put 'put ''KDQsImRpdiIsNSkoNSwiaW5wdXQiLDYsMCksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHUpe3JldHVybiBZZShhKSxmaShvLnNlYXJjaFN0cmluZyx1KXx8KG8uc2VhcmNoU3RyaW5nPXUpLFhlKHUpfSksd3QoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBZZShhKSxYZShvLnhsbWFw''@;'; put 'put ''TGlzdE9uRmlsdGVyKCkpfSksdGUoKSx2dCg3LF9zbiwxLDAsImNsci1pY29uIiw3KSx2dCg4LHlzbiwxLDAsImNsci1pY29uIiw4KSx0ZSgpKCksX28oOSxic24sNCwzLCJjbHItdHJlZS1ub2RlIixudWxsLENvKSx0ZSgpKCksSigxMSwiZGl2Iiw5KSx2dCgxMixTc24sNCwyLCJkaXYiLDEw''@;'; put 'put ''KSx2dCgxMyxFc24sNiwxLCJkaXYiLDExKSx2dCgxNCxBc24sMjYsMTEsImRpdiIsMTIpLEooMTUsImNsci1tb2RhbCIsMTMpLHd0KCJmaWxlT3ZlciIsZnVuY3Rpb24odSl7cmV0dXJuIFllKGEpLFhlKG8uZmlsZU92ZXJCYXNlKHUpKX0pKCJmaWxlRHJvcCIsZnVuY3Rpb24odSl7cmV0dXJu''@;'; put 'put ''IFllKGEpLFhlKG8uZ2V0RmlsZURlc2ModSwhMCkpfSksaGkoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odSl7cmV0dXJuIFllKGEpLGZpKG8uc2hvd1VwbG9hZE1vZGFsLHUpfHwoby5zaG93VXBsb2FkTW9kYWw9dSksWGUodSl9KSxKKDE2LCJoMyIsMTQpLFNlKDE3LCJVcGxvYWQg''@;'; put 'put ''RmlsZSIpLHRlKCksSigxOCwiZGl2IiwxNSkoMTksImRpdiIsMTYpKDIwLCJzcGFuIiksU2UoMjEsIkRyb3AgZmlsZSBhbnl3aGVyZSB0byB1cGxvYWQhIiksdGUoKSgpLEooMjIsImRpdiIsMTcpKDIzLCJkaXYiLDE4KSgyNCwiZGl2IiwxOSkoMjUsInNwYW4iLDIwKSgyNiwibGFiZWwiLDIx''@;'; put 'put ''KSxTZSgyNywiIEJyb3dzZSAiKSx0ZSgpKCksSigyOCwiaW5wdXQiLDIyLDEpLHd0KCJjaGFuZ2UiLGZ1bmN0aW9uKHUpe3JldHVybiBZZShhKSxYZShvLmdldEZpbGVEZXNjKHUpKX0pLHRlKCkoKSgpKCkoKSgpLEooMzAsImNsci1tb2RhbCIsMjMpLGhpKCJjbHJNb2RhbE9wZW5DaGFuZ2Ui''@;'; put 'put ''LGZ1bmN0aW9uKHUpe3JldHVybiBZZShhKSxmaShvLnN1Ym1pdExpbWl0Tm90aWNlLHUpfHwoby5zdWJtaXRMaW1pdE5vdGljZT11KSxYZSh1KX0pLEooMzEsImgzIiwxNCksU2UoMzIsIk5vdGljZSIpLHRlKCksSigzMywiZGl2IiwxNSkoMzQsInAiLDI0KSxTZSgzNSksdGUoKSgpLEooMzYs''@;'; put 'put ''ImRpdiIsMjUpKDM3LCJidXR0b24iLDI2KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKGEpLFhlKG8uc3VibWl0TGltaXROb3RpY2U9ITEpfSksU2UoMzgsIiBDYW5jZWwgIiksdGUoKSxKKDM5LCJidXR0b24iLDI2KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKGEp''@;'; put 'put ''LG8uc3VibWl0KCksWGUoby5zdWJtaXRMaW1pdE5vdGljZT0hMSl9KSxTZSg0MCwiIFN1Ym1pdCAiKSx0ZSgpKCkoKSgpLFluKDQxLERzbiw0LDMsIm5nLXRlbXBsYXRlIixudWxsLDIsY2QpfWlmKDImaSl7Y29uc3QgYT1vbyg2KTtpZSgpLF90KG8ueGxtYXBzTG9hZGluZz8xOi0xKSxpZSg0''@;'; put 'put ''KSxkaSgibmdNb2RlbCIsby5zZWFyY2hTdHJpbmcpLGllKDIpLF90KGEudmFsdWUubGVuZ3RoPDE/NzotMSksaWUoKSxfdChhLnZhbHVlLmxlbmd0aD4wPzg6LTEpLGllKCkseW8oby54bG1hcHMpLGllKDMpLF90KG8uc2VsZWN0ZWRYTE1hcD8tMToxMiksaWUoKSxfdChvLmlzTG9hZGluZz8x''@;'; put 'put ''MzotMSksaWUoKSxfdCghby5pc0xvYWRpbmcmJm8uc2VsZWN0ZWRYTE1hcD8xNDotMSksaWUoKSxydCgidXBsb2FkZXIiLG8udXBsb2FkZXIpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwhMSkoImNsck1vZGFsQ2xvc2FibGUiLCEwKSxkaSgiY2xyTW9k''@;'; put 'put ''YWxPcGVuIixvLnNob3dVcGxvYWRNb2RhbCksaWUoMTMpLHJ0KCJ1cGxvYWRlciIsby51cGxvYWRlciksaWUoMiksZGkoImNsck1vZGFsT3BlbiIsby5zdWJtaXRMaW1pdE5vdGljZSksaWUoNSksU3IoIiBEdWUgdG8gY3VycmVudCBsaWNlbmNlLCBvbmx5ICIsby5saWNlbmNlU3RhdGUudmFs''@;'; put 'put ''dWUuc3VibWl0X3Jvd3NfbGltaXQsIiByb3dzIGluIGEgZmlsZSB3aWxsIGJlIHN1Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpfX0sZGVwZW5kZW5jaWVzOltMNyxQMixsdSxvYyxYbCxQcCxPMyxkNyxjdSx4''@;'; put 'put ''ZCxtaCxoTSxlbCxQZix4dixrdiwkYixBdixUdixaYix6MiwkNixJZixxRCxEWmUsTFplLEc2XSxlbmNhcHN1bGF0aW9uOjJ9KSl9cmV0dXJuIG4oKSxlfSkoKTtjb25zdCBMc249W3twYXRoOiIiLGNvbXBvbmVudDooKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0''@;'; put 'put ''KCl7fW5nT25EZXN0cm95KCl7fXN0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpfSx0aGlzLlx1MDI3NWNtcD1Qcih7dHlwZTplLHNlbGVjdG9yczpbWyJhcHAteGxtYXAtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRh''@;'; put 'put ''aW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oaSxvKXsxJmkmJkl0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltlN10sZW5jYXBzdWxhdGlvbjoyfSkpfXJldHVybiBuKCksZX0pKCksY2hpbGRyZW46W3twYXRoOiIiLGNvbXBv''@;'; put 'put ''bmVudDpCWmV9LHtwYXRoOiI6aWQiLGNvbXBvbmVudDpCWmV9XX1dO2xldCBPc249KCgpPT57dmFyIG47Y2xhc3MgZXtzdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKX0sdGhpcy5cdTAyNzVtb2Q9R2koe3R5cGU6ZX0pLHRoaXMuXHUw''@;'; put 'put ''Mjc1aW5qPW1pKHtpbXBvcnRzOltXZC5mb3JDaGlsZChMc24pLFdkXX0pKX1yZXR1cm4gbigpLGV9KSgpO1hGKCk7bGV0IE5zbj0oKCk9Pnt2YXIgbjtjbGFzcyBle3N0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpfSx0aGlzLlx1MDI3''@;'; put 'put ''NW1vZD1HaSh7dHlwZTplfSksdGhpcy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W0x3LE9zbixoZCxxMCxMQyxxbyx5UCxFbV19KSl9cmV0dXJuIG4oKSxlfSkoKSxGc249KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe31zdGF0aWMj''@;'; put 'put ''ZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKX0sdGhpcy5cdTAyNzVjbXA9UHIoe3R5cGU6ZSxzZWxlY3RvcnM6W1siYXBwLW11bHRpLWRhdGFzZXQtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6''@;'; put 'put ''ITEsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oaSxvKXsxJmkmJkl0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltlN10sZW5jYXBzdWxhdGlvbjoyfSkpfXJldHVybiBuKCksZX0pKCk7Y29uc3QgR21lPShuLGUsdCk9PntlLmNsYXNzTGlzdC5hZGQoVW4uaGFu''@;'; put 'put ''ZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX0sUHNuPVsiY29udGVudEFyZWEiXSxIc249WyJob3RJbnN0YW5jZU1haW4iXSxWc249WyJob3RJbnN0YW5jZVVzZXJEYXRhc2V0Il07ZnVuY3Rpb24gQnNuKG4sZSl7MSZuJiYoSigwLCJkaXYiLDQpLEl0KDEsImNsci1zcGlubmVyIiwy''@;'; put 'put ''MyksdGUoKSl9ZnVuY3Rpb24ganNuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJkaXYiLDUpKDEsImJ1dHRvbiIsMjUpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUob28oNCkuY2xpY2soKSl9KSxTZSgyLCIgQnJvd3NlIGZpbGUgIiksdGUoKSxKKDMsImlu''@;'; put 'put ''cHV0IiwyNiwxKSx3dCgiY2hhbmdlIixmdW5jdGlvbihpKXtyZXR1cm4gWWUodCksWGUoVGUoKS5vbkZpbGVDaGFuZ2UoaSkpfSksdGUoKSgpfWlmKDImbil7Y29uc3QgdD1UZSgpO2llKCkscnQoImRpc2FibGVkIixudWxsIT09dC5zZWxlY3RlZEZpbGV8fHQuc3VibWl0dGluZ0Nzdil9fWZ1''@;'; put 'put ''bmN0aW9uIFVzbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiZGl2Iiw1KSgxLCJidXR0b24iLDI4KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKDIpLm9uRGlzY2FyZCgpKX0pLFNlKDIsIiBEaXNjYXJkICIpLHRlKCksSigzLCJidXR0b24iLDI5KSx3''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKDIpLm9uU3VibWl0QWxsKCkpfSksU2UoNCwiIFN1Ym1pdCBBbGwgIiksdGUoKSgpfX1mdW5jdGlvbiB6c24obixlKXsxJm4mJkl0KDAsImNkcy1pY29uIiwzMil9ZnVuY3Rpb24gV3NuKG4sZSl7MSZuJiZJdCgwLCJjZHMt''@;'; put 'put ''aWNvbiIsMzMpfWZ1bmN0aW9uIFlzbihuLGUpe2lmKDEmbiYmKHZ0KDAsenNuLDEsMCwiY2RzLWljb24iLDMyKSx2dCgxLFdzbiwxLDAsImNkcy1pY29uIiwzMykpLDImbil7Y29uc3QgdD1UZSgpLiRpbXBsaWNpdDtfdCh0LnN1Ym1pdFJlc3VsdC5lcnJvcj8wOi0xKSxpZSgpLF90KHQuc3Vi''@;'; put 'put ''bWl0UmVzdWx0LnN1Y2Nlc3M/MTotMSl9fWZ1bmN0aW9uIFpzbihuLGUpezEmbiYmSXQoMCwiY2RzLWljb24iLDMyKX1mdW5jdGlvbiBHc24obixlKXsxJm4mJkl0KDAsImNkcy1pY29uIiwzNCl9ZnVuY3Rpb24gJHNuKG4sZSl7aWYoMSZuJiYodnQoMCxac24sMSwwLCJjZHMtaWNvbiIsMzIp''@;'; put 'put ''LHZ0KDEsR3NuLDEsMCwiY2RzLWljb24iLDM0KSksMiZuKXtjb25zdCB0PVRlKDIpLiRpbXBsaWNpdDtfdCh0LmRhdGFzb3VyY2UubGVuZ3RoJiZ0LnBhcnNlUmVzdWx0Py0xOjApLGllKCksX3QodC5kYXRhc291cmNlLmxlbmd0aCYmdC5wYXJzZVJlc3VsdD8xOi0xKX19ZnVuY3Rpb24gcXNu''@;'; put 'put ''KG4sZSl7MSZuJiZJdCgwLCJjZHMtaWNvbiIsMzQpfWZ1bmN0aW9uIEtzbihuLGUpezEmbiYmSXQoMCwiY2xyLXNwaW5uZXIiLDM1KX1mdW5jdGlvbiBYc24obixlKXtpZigxJm4mJih2dCgwLHFzbiwxLDAsImNkcy1pY29uIiwzNCksdnQoMSxLc24sMSwwLCJjbHItc3Bpbm5lciIsMzUpKSwy''@;'; put 'put ''Jm4pe2NvbnN0IHQ9VGUoMikuJGltcGxpY2l0O190KHQucGFyc2luZ1RhYmxlPy0xOjApLGllKCksX3QodC5wYXJzaW5nVGFibGU/MTotMSl9fWZ1bmN0aW9uIFFzbihuLGUpe2lmKDEmbiYmKHZ0KDAsJHNuLDIsMiksdnQoMSxYc24sMiwyKSksMiZuKXtjb25zdCB0PVRlKCkuJGltcGxpY2l0''@;'; put 'put ''O190KHQuZGF0YXNvdXJjZT8wOi0xKSxpZSgpLF90KHQuZGF0YXNvdXJjZT8tMToxKX19ZnVuY3Rpb24gSnNuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiwzMCksd3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGk9WWUodCkuJGlt''@;'; put 'put ''cGxpY2l0O3JldHVybiBYZShUZSgyKS5vblBhcnNlZERhdGFzZXRDbGljayhpKSl9KSx2dCgyLFlzbiwyLDIpLHZ0KDMsUXNuLDIsMiksSig0LCJzcGFuIiwzMSksU2UoNSksdGUoKSgpKCl9aWYoMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0O2llKCksd3IoImFjdGl2ZSIsdC5hY3RpdmUpLGll''@;'; put 'put ''KCksX3QodC5zdWJtaXRSZXN1bHQ/MjotMSksaWUoKSxfdCh0LnN1Ym1pdFJlc3VsdD8tMTozKSxpZSgyKSxTcigiICIsdC5saWJkcywiICIpfX1mdW5jdGlvbiBlbG4obixlKXtpZigxJm4mJih2dCgwLFVzbiw1LDAsImRpdiIsNSksSigxLCJwIiwyNyksU2UoMiwiRm91bmQgdGFibGVzOiIp''@;'; put 'put ''LHRlKCksSigzLCJjbHItdHJlZSIpLF9vKDQsSnNuLDYsNSwiY2xyLXRyZWUtbm9kZSIsbnVsbCxDbyksdGUoKSksMiZuKXtjb25zdCB0PVRlKCk7X3QodC5leGNlbHNTdWJtaXR0ZWQ/LTE6MCksaWUoNCkseW8odC5wYXJzZWREYXRhc2V0cyl9fWZ1bmN0aW9uIHRsbihuLGUpezEmbiYmSXQo''@;'; put 'put ''MCwiY2RzLWljb24iLDMyKX1mdW5jdGlvbiBubG4obixlKXsxJm4mJkl0KDAsImNkcy1pY29uIiwzMyl9ZnVuY3Rpb24gcmxuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiwzNyksd3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGk9''@;'; put 'put ''WWUodCkuJGltcGxpY2l0O3JldHVybiBYZShUZSgyKS5vblN1Ym1pdHRlZENzdkRhdGFzZXRDbGljayhpKSl9KSx2dCgyLHRsbiwxLDAsImNkcy1pY29uIiwzMiksdnQoMyxubG4sMSwwLCJjZHMtaWNvbiIsMzMpLEl0KDQsImNkcy1pY29uIiwzNCksU2UoNSksdGUoKSgpfWlmKDImbil7Y29u''@;'; put 'put ''c3QgdD1lLiRpbXBsaWNpdDtpZSgpLHdyKCJhY3RpdmUiLHQuYWN0aXZlKSxpZSgpLF90KHQuZXJyb3I/MjotMSksaWUoKSxfdCh0LnN1Y2Nlc3M/MzotMSksaWUoMiksU3IoIiAiLHQubGliZHMsIiAiKX19ZnVuY3Rpb24gaWxuKG4sZSl7aWYoMSZuJiYoSigwLCJwIiwzNiksU2UoMSwiU3Vi''@;'; put 'put ''bWl0dGVkIHRhYmxlczoiKSx0ZSgpLEooMiwiY2xyLXRyZWUiKSxfbygzLHJsbiw2LDUsImNsci10cmVlLW5vZGUiLG51bGwsQ28pLHRlKCkpLDImbil7Y29uc3QgdD1UZSgpO2llKDMpLHlvKHQuc3VibWl0dGVkQ3N2RGF0YXNldHMpfX1mdW5jdGlvbiBvbG4obixlKXsxJm4mJihKKDAsImRp''@;'; put 'put ''diIsMTApLEl0KDEsImNsci1pY29uIiwzOCksSigyLCJwIiwzOSksU2UoMywiIFBsZWFzZSB1cGxvYWQgYSBmaWxlICIpLHRlKCkoKSl9ZnVuY3Rpb24gYWxuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJkaXYiLDQwKSgxLCJkaXYiLDQxKSgyLCJwIiw0MiksU2UoMywiIFNlbGVj''@;'; put 'put ''dGVkIGZpbGU6ICIpLEooNCwic3Ryb25nIiksU2UoNSksdGUoKSxKKDYsImNsci10b29sdGlwIikoNywiY2RzLWljb24iLDQzKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKDIpLm9uRGlzY2FyZEZpbGUoKSl9KSx0ZSgpLEooOCwiY2xyLXRvb2x0aXAtY29udGVu''@;'; put 'put ''dCIpLFNlKDksIiBEaXNjYXJkIHRoZSBmaWxlICIpLHRlKCkoKSgpLEooMTAsInAiLDQ0KSxTZSgxMSwiIEZpbGUgc2l6ZTogIiksSigxMiwic3Ryb25nIiksU2UoMTMpLHRlKCkoKSxKKDE0LCJwIiw0NSksU2UoMTUsIiBQYXN0ZSBvciB0eXBlIHRoZSBsaXN0IG9mIGRhdGFzZXRzIHRvIHVw''@;'; put 'put ''bG9hZDogIiksdGUoKSxKKDE2LCJjbHItY29udHJvbC1oZWxwZXIiLDQ2KSxTZSgxNywiRWFjaCByb3cgaXMgb25lIGRhdGFzZXQuIFdlIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3QgdGFibGVzIGJ5IHRoZSBzaGVldG5hbWUgYW5kIHBvcHVsYXRlIGlmIGFueS4iKSx0ZSgpLEl0KDE4LCJo''@;'; put 'put ''b3QtdGFibGUiLDQ3LDIpLEooMjAsImRpdiIsNDgpKDIxLCJidXR0b24iLDQ5KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKDIpLm9uU3RhcnRQYXJzaW5nRmlsZSgpKX0pLFNlKDIyLCIgQ29udGludWUgIiksdGUoKSgpKCkoKX1pZigyJm4pe2NvbnN0IHQ9VGUo''@;'; put 'put ''Mik7aWUoNSkscHIodC5zZWxlY3RlZEZpbGUubmFtZSksaWUoOCksU3IoIiIsdC5zZWxlY3RlZEZpbGUuc2l6ZU1CLCIgTUIiKSxpZSg1KSxydCgic2V0dGluZ3MiLHQuaG90VXNlckRhdGFzZXRzU2V0dGluZ3MpLGllKDMpLHJ0KCJkaXNhYmxlZCIsIXQubWF0Y2hlZERhdGFzZXRzLmxlbmd0''@;'; put 'put ''aCkoImNsckxvYWRpbmciLHQudXBsb2FkTG9hZGluZyl9fWZ1bmN0aW9uIHNsbihuLGUpe2lmKDEmbiYmKEl0KDAsImNsci1pY29uIiw1MCksSigxLCJwIiwzOSksU2UoMiksdGUoKSksMiZuKXtjb25zdCB0PVRlKDQpO2llKDIpLFNyKCIgIix0LmZpbGVMb2FkaW5nU3RhdGUsIi4uLiAiKX19''@;'; put 'put ''ZnVuY3Rpb24gbGxuKG4sZSl7MSZuJiYoSXQoMCwiY2xyLWljb24iLDUxKSxKKDEsInAiLDM5KSxTZSgyLCIgUGxlYXNlIHNlbGVjdCBhIGRhdGFzZXQgb24gdGhlIGxlZnQgdG8gcmV2aWV3IHRoZSBkYXRhICIpLHRlKCkpfWZ1bmN0aW9uIGNsbihuLGUpe2lmKDEmbiYmKEooMCwiZGl2Iiwx''@;'; put 'put ''MCksdnQoMSxzbG4sMywxKSx2dCgyLGxsbiwzLDApLHRlKCkpLDImbil7Y29uc3QgdD1UZSgzKTtpZSgpLF90KHQuZmlsZUxvYWRpbmdTdGF0ZSE9PXQuRmlsZUxvYWRpbmdTdGF0ZS5wYXJzZWQ/MTotMSksaWUoKSxfdCh0LmZpbGVMb2FkaW5nU3RhdGU9PT10LkZpbGVMb2FkaW5nU3RhdGUu''@;'; put 'put ''cGFyc2VkPzI6LTEpfX1mdW5jdGlvbiB1bG4obixlKXsxJm4mJihKKDAsInNwYW4iLDYyKSgxLCJzdHJvbmciKSxTZSgyLCJTVUNDRVNTIiksdGUoKSgpKX1mdW5jdGlvbiBkbG4obixlKXsxJm4mJihKKDAsInNwYW4iLDYzKSgxLCJzdHJvbmciKSxTZSgyLCJFUlJPUiIpLHRlKCkoKSl9ZnVu''@;'; put 'put ''Y3Rpb24gaGxuKG4sZSl7MSZuJiYoSigwLCJwIiw1NiksU2UoMSwiRXJyb3IgZGV0YWlsczoiKSx0ZSgpKX1mdW5jdGlvbiBmbG4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImJ1dHRvbiIsNjYpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtZZSh0KTtjb25zdCBpPVRlKDUpO3JldHVy''@;'; put 'put ''biBYZShpLnJlU3VibWl0VGFibGUoaS5hY3RpdmVQYXJzZWREYXRhc2V0KSl9KSxTZSgxLCIgUmVzdWJtaXQgIiksdGUoKX0yJm4mJnJ0KCJjbHJMb2FkaW5nIixUZSg1KS5zdWJtaXRMb2FkaW5nKX1mdW5jdGlvbiBwbG4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRpdiIsNTIp''@;'; put 'put ''KDEsImRpdiIpKDIsInAiLDU1KSxTZSgzLCIgU3VibWl0IFN0YXR1czogIiksdnQoNCx1bG4sMywwLCJzcGFuIiw2MiksdnQoNSxkbG4sMywwLCJzcGFuIiw2MyksdGUoKSx2dCg2LGhsbiwyLDAsInAiLDU2KSx0ZSgpLEooNywiZGl2IiksdnQoOCxmbG4sMiwxLCJidXR0b24iLDY0KSxKKDks''@;'; put 'put ''ImJ1dHRvbiIsNjUpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtZZSh0KTtjb25zdCBpPVRlKDQpO3JldHVybiBYZShpLmRvd25sb2FkRmlsZShpLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmxvZ3x8aS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5zdWNjZXNzfHxp''@;'; put 'put ''LmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmVycm9yKSl9KSxTZSgxMCwiIERvd25sb2FkIGxvZyAiKSx0ZSgpKCkoKX1pZigyJm4pe2NvbnN0IHQ9VGUoNCk7aWUoNCksX3QodC5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5zdWNjZXNzPzQ6LTEpLGllKCksX3Qo''@;'; put 'put ''dC5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvcj81Oi0xKSxpZSgpLF90KHQuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuZXJyb3I/NjotMSksaWUoMiksX3QoIXQuc3VibWl0dGluZ0NzdiYmdC5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5l''@;'; put 'put ''cnJvcj84Oi0xKX19ZnVuY3Rpb24gZ2xuKG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiLDUzKSgxLCJkaXYiLDY3KSxTZSgyKSxBYygzLCJqc29uIiksdGUoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoNCk7aWUoMiksU3IoIiAiLFRkKDMsMSxudWxsPT10LmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0''@;'; put 'put ''UmVzdWx0P251bGw6dC5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvciksIiAiKX19ZnVuY3Rpb24gbWxuKG4sZSl7aWYoMSZuJiYoSigwLCJzdHJvbmciKSxTZSgxKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoNCk7aWUoKSxOaCgnIicsbnVsbD09dC5hY3RpdmVQYXJzZWRE''@;'; put 'put ''YXRhc2V0LnBhcnNlUmVzdWx0LnJhbmdlU2hlZXRSZXM/bnVsbDp0LmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQucmFuZ2VTaGVldFJlcy5zaGVldE5hbWUsJyIhJyxudWxsPT10LmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQucmFuZ2VTaGVldFJlcz9udWxsOnQuYWN0''@;'; put 'put ''aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdC5yYW5nZVNoZWV0UmVzLnJhbmdlQWRkcmVzcyl9fWZ1bmN0aW9uIHZsbihuLGUpezEmbiYmKEooMCwic3Ryb25nIiksU2UoMSwiTm8gZGF0YSBmb3VuZCIpLHRlKCkpfWZ1bmN0aW9uIF9sbihuLGUpezEmbiYmKEooMCwic3BhbiIsNjgpKDEs''@;'; put 'put ''InN0cm9uZyIpLFNlKDIsIlNlYXJjaGluZyBmb3IgdGhlIGRhdGEuLi4iKSx0ZSgpLEl0KDMsImNsci1zcGlubmVyIiw2OSksdGUoKSl9ZnVuY3Rpb24geWxuKG4sZSl7aWYoMSZuJiYodnQoMCx2bG4sMiwwLCJzdHJvbmciKSx2dCgxLF9sbiw0LDAsInNwYW4iLDY4KSksMiZuKXtjb25zdCB0''@;'; put 'put ''PVRlKDQpO190KHQuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzaW5nVGFibGU/LTE6MCksaWUoKSxfdCh0LmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2luZ1RhYmxlPzE6LTEpfX1mdW5jdGlvbiBibG4obixlKXsxJm4mJihKKDAsImRpdiIsNjApLEl0KDEsImNsci1zcGlubmVyIiw3MCksdGUo''@;'; put 'put ''KSl9ZnVuY3Rpb24gd2xuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7dnQoMCxwbG4sMTEsNCwiZGl2Iiw1MiksdnQoMSxnbG4sNCwzLCJkaXYiLDUzKSxKKDIsImRpdiIsNTQpKDMsImRpdiIpKDQsInAiLDU1KSxTZSg1LCIgRm91bmQgaW4gcmFuZ2U6ICIpLHZ0KDYsbWxuLDIsMiwic3Ry''@;'; put 'put ''b25nIiksdnQoNyx5bG4sMiwyKSx0ZSgpLEooOCwicCIsNTYpLFNlKDksIiBEYXRhc2V0OiAiKSxKKDEwLCJzdHJvbmciKSgxMSwiY2xyLXRvb2x0aXAiKSgxMiwiYSIsNTcpLFNlKDEzKSx0ZSgpLEooMTQsImNsci10b29sdGlwLWNvbnRlbnQiLDU4KSxTZSgxNSwiIENsaWNrIHRvIGVkaXQg''@;'; put 'put ''dGhlIHRhYmxlICIpLHRlKCkoKSgpKCkoKSxKKDE2LCJkaXYiKSgxNywiY2xyLXRvZ2dsZS13cmFwcGVyIikoMTgsImlucHV0Iiw1OSksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoMyk7cmV0dXJuIGZpKG8uYWN0aXZlUGFyc2VkRGF0YXNldC5pbmNs''@;'; put 'put ''dWRlSW5TdWJtaXNzaW9uLGkpfHwoby5hY3RpdmVQYXJzZWREYXRhc2V0LmluY2x1ZGVJblN1Ym1pc3Npb249aSksWGUoaSl9KSx0ZSgpLEooMTksImxhYmVsIiksU2UoMjAsIkluY2x1ZGUgaW4gc3VibWlzc2lvbiIpLHRlKCkoKSgpKCksdnQoMjEsYmxuLDIsMCwiZGl2Iiw2MCksSXQoMjIs''@;'; put 'put ''ImhvdC10YWJsZSIsNjEsMyl9aWYoMiZuKXtjb25zdCB0PVRlKDMpO190KHQuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQ/MDotMSksaWUoKSxfdChudWxsIT10LmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0JiZ0LmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVz''@;'; put 'put ''dWx0LmVycm9yPzE6LTEpLGllKDUpLF90KHQuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdD82Oi0xKSxpZSgpLF90KHQuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdD8tMTo3KSxpZSg1KSxydCgicm91dGVyTGluayIsIi9lZGl0b3IvIit0LmFjdGl2ZVBhcnNlZERhdGFz''@;'; put 'put ''ZXQubGliZHMpLGllKCkscHIodC5hY3RpdmVQYXJzZWREYXRhc2V0LmxpYmRzKSxpZSgpLHJ0KCJjbHJQb3NpdGlvbiIsInRvcC1yaWdodCIpKCJjbHJTaXplIiwic20iKSxpZSg0KSxkaSgibmdNb2RlbCIsdC5hY3RpdmVQYXJzZWREYXRhc2V0LmluY2x1ZGVJblN1Ym1pc3Npb24pLHJ0KCJk''@;'; put 'put ''aXNhYmxlZCIsISh0LmFjdGl2ZVBhcnNlZERhdGFzZXQuZGF0YXNvdXJjZSYmdC5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0KSksaWUoMyksX3QodC5pc0hvdEhpZGRlbj8yMTotMSksaWUoKSxydCgic2V0dGluZ3MiLHQuaG90TWFpblRhYmxlU2V0dGluZ3MpfX1mdW5jdGlvbiBD''@;'; put 'put ''bG4obixlKXtpZigxJm4mJih2dCgwLGNsbiwzLDIsImRpdiIsMTApLHZ0KDEsd2xuLDI0LDEyKSksMiZuKXtjb25zdCB0PVRlKDIpO190KHQuYWN0aXZlUGFyc2VkRGF0YXNldD8tMTowKSxpZSgpLF90KHQuYWN0aXZlUGFyc2VkRGF0YXNldD8xOi0xKX19ZnVuY3Rpb24gU2xuKG4sZSl7MSZu''@;'; put 'put ''JiYoSigwLCJkaXYiLDEwKSxJdCgxLCJjbHItaWNvbiIsNTEpLEooMiwicCIsMzkpLFNlKDMsIiBQbGVhc2Ugc2VsZWN0IGEgZGF0YXNldCBvbiB0aGUgbGVmdCB0byByZXZpZXcgdGhlIHN1Ym1pdCByZXN1bHRzICIpLHRlKCkoKSl9ZnVuY3Rpb24gRWxuKG4sZSl7MSZuJiZ2dCgwLFNsbiw0''@;'; put 'put ''LDAsImRpdiIsMTApLDImbiYmX3QoVGUoMikuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldD8tMTowKX1mdW5jdGlvbiBNbG4obixlKXsxJm4mJihKKDAsInNwYW4iLDYyKSgxLCJzdHJvbmciKSxTZSgyLCJTVUNDRVNTIiksdGUoKSgpKX1mdW5jdGlvbiBUbG4obixlKXsxJm4mJihKKDAsInNw''@;'; put 'put ''YW4iLDYzKSgxLCJzdHJvbmciKSxTZSgyLCJFUlJPUiIpLHRlKCkoKSl9ZnVuY3Rpb24geGxuKG4sZSl7MSZuJiYoSigwLCJwIiw1NiksU2UoMSwiRXJyb3IgZGV0YWlsczoiKSx0ZSgpKX1mdW5jdGlvbiBBbG4obixlKXtpZigxJm4mJihKKDAsImRpdiIsNTMpKDEsImRpdiIsNjcpLFNlKDIp''@;'; put 'put ''LEFjKDMsImpzb24iKSx0ZSgpKCkpLDImbil7Y29uc3QgdD1UZSgzKTtpZSgyKSxTcigiICIsVGQoMywxLHQuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5lcnJvciksIiAiKX19ZnVuY3Rpb24ga2xuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJkaXYiLDcxKSgxLCJkaXYiKSgy''@;'; put 'put ''LCJwIiw1NSksU2UoMywiIE1hdGNoZWQgd2l0aCBkYXRhc2V0OiAiKSxKKDQsInN0cm9uZyIpKDUsImNsci10b29sdGlwIikoNiwiYSIsNTcpLFNlKDcpLHRlKCksSig4LCJjbHItdG9vbHRpcC1jb250ZW50Iiw1OCksU2UoOSwiIENsaWNrIHRvIGVkaXQgdGhlIHRhYmxlICIpLHRlKCkoKSgp''@;'; put 'put ''KCksSigxMCwicCIsNTUpLFNlKDExLCIgU3RhdHVzOiAiKSx2dCgxMixNbG4sMywwLCJzcGFuIiw2MiksdnQoMTMsVGxuLDMsMCwic3BhbiIsNjMpLHRlKCksdnQoMTQseGxuLDIsMCwicCIsNTYpLHRlKCksSigxNSwiZGl2IikoMTYsImJ1dHRvbiIsNjUpLHd0KCJjbGljayIsZnVuY3Rpb24o''@;'; put 'put ''KXtZZSh0KTtjb25zdCBpPVRlKDIpO3JldHVybiBYZShpLmRvd25sb2FkRmlsZShpLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuc3VjY2Vzc3x8aS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmVycm9yKSl9KSxTZSgxNywiIERvd25sb2FkIGxvZyAiKSx0ZSgpKCkoKSx2dCgxOCxBbG4s''@;'; put 'put ''NCwzLCJkaXYiLDUzKX1pZigyJm4pe2NvbnN0IHQ9VGUoMik7aWUoNikscnQoInJvdXRlckxpbmsiLCIvZWRpdG9yLyIrdC5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmxpYmRzKSxpZSgpLHByKHQuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5saWJkcyksaWUoKSxydCgiY2xyUG9zaXRp''@;'; put 'put ''b24iLCJ0b3AtcmlnaHQiKSgiY2xyU2l6ZSIsInNtIiksaWUoNCksX3QodC5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LnN1Y2Nlc3M/MTI6LTEpLGllKCksX3QodC5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmVycm9yPzEzOi0xKSxpZSgpLF90KHQuYWN0aXZlU3VibWl0dGVkQ3N2RGF0''@;'; put 'put ''YXNldC5lcnJvcj8xNDotMSksaWUoNCksX3QodC5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmVycm9yPzE4Oi0xKX19ZnVuY3Rpb24gUmxuKG4sZSl7aWYoMSZuJiYodnQoMCxhbG4sMjMsNSwiZGl2Iiw0MCksdnQoMSxDbG4sMiwyKSx2dCgyLEVsbiwxLDEpLHZ0KDMsa2xuLDE5LDgpKSwy''@;'; put 'put ''Jm4pe2NvbnN0IHQ9VGUoKTtfdCh0LnBhcnNlZERhdGFzZXRzLmxlbmd0aHx8bnVsbD09PXQuc2VsZWN0ZWRGaWxlPy0xOjApLGllKCksX3QodC5wYXJzZWREYXRhc2V0cy5sZW5ndGgmJiF0LnN1Ym1pdHRlZENzdkRhdGFzZXRzLmxlbmd0aD8xOi0xKSxpZSgpLF90KHQuc3VibWl0dGVkQ3N2''@;'; put 'put ''RGF0YXNldHMubGVuZ3RoPzI6LTEpLGllKCksX3QodC5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0PzM6LTEpfX1mdW5jdGlvbiBJbG4obixlKXtpZigxJm4mJihKKDAsInAiLDE0KSxTZSgxKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSgpLFNyKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5j''@;'; put 'put ''ZSwgb25seSAiLHQubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgcm93cyBpbiBlYWNoIGZpbGUgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pby4gIil9fXZhciBfQT1mdW5j''@;'; put 'put ''dGlvbihuKXtyZXR1cm4gbi5yZWFkaW5nPSJSZWFkaW5nIHRoZSBmaWxlIixuLnBhcnNpbmc9IlNlYXJjaGluZyBmb3IgdGhlIGRhdGEgaW4gdGhlIGZpbGUiLG4ucGFyc2VkPSJTZWFyY2hpbmcgZm9yIHRoZSBkYXRhIGZpbmlzaGVkIixuLm5vdFNlbGVjdGVkPSJGaWxlIG5vdCBzZWxlY3Rl''@;'; put 'put ''ZCIsbn0oX0F8fHt9KTtjb25zdCBEbG49W3twYXRoOiIiLGNvbXBvbmVudDpGc24sY2hpbGRyZW46W3twYXRoOiIiLGNvbXBvbmVudDooKCk9Pnt2YXIgbjtjbGFzcyBle2luaXRpYWxpemVIb3RTZXR0aW5ncygpe3RoaXMuaG90TWFpblRhYmxlU2V0dGluZ3M9e2NsYXNzTmFtZTpbImh0RGFy''@;'; put 'put ''ayJdLGxpY2Vuc2VLZXk6dGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXksbXVsdGlDb2x1bW5Tb3J0aW5nOiEwLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OjUwLG1hbnVhbENvbHVtblJlc2l6ZTohMCxhdXRvQ29sdW1uU2l6ZTohMCxmaWx0ZXJzOiEwLHN0cmV0Y2hIOiJhbGwiLGFmdGVyR2V0''@;'; put 'put ''Q29sSGVhZGVyOkdtZSxtb2RpZnlDb2xXaWR0aDp0aGlzLm1heFdpZHRoQ2hla2VyLHRoZW1lOiJodC10aGVtZS1jbGFzc2ljIn07Y29uc3R7ZGF0YTpyLC4uLml9PXRoaXMuaG90VXNlckRhdGFzZXRzO3RoaXMuaG90VXNlckRhdGFzZXRzU2V0dGluZ3M9ey4uLmksbGljZW5zZUtleTp0aGlz''@;'; put 'put ''LmhvdFRhYmxlTGljZW5zZUtleSx0aGVtZToiaHQtdGhlbWUtY2xhc3NpYyJ9fW1heFdpZHRoQ2hla2VyKHIsaSl7cmV0dXJuIHI+MjAwPzIwMDpyfWNvbnN0cnVjdG9yKHIsaSxvLGEsbCx1LGcpe3RoaXMuZXZlbnRTZXJ2aWNlPXIsdGhpcy5saWNlbmNlU2VydmljZT1pLHRoaXMuaGVscGVy''@;'; put 'put ''U2VydmljZT1vLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5zcHJlYWRzaGVldFNlcnZpY2U9bCx0aGlzLnNhc1NlcnZpY2U9dSx0aGlzLmNkcj1nLHRoaXMuY29udGVudENvbnRhaW5lckNsYXNzPSEwLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0''@;'; put 'put ''YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuZmlsZUxvYWRpbmdTdGF0ZT1fQS5ub3RTZWxlY3RlZCx0aGlzLkZpbGVMb2FkaW5nU3RhdGU9X0EsdGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXk9dm9pZCAwLHRoaXMuaG90VGFibGVNYXhSb3dzPXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdl''@;'; put 'put ''cl9yb3dzX2FsbG93ZWR8fDEvMCx0aGlzLmNzdkZpbGVzPVtdLHRoaXMuY3N2U3VibWl0dGluZz0hMSx0aGlzLmF1dG9EZXRlY3RpbmdDb2x1bW5zPSExLHRoaXMuc2VsZWN0ZWRGaWxlPW51bGwsdGhpcy5wYXJzZWREYXRhc2V0cz1bXSx0aGlzLnN1Ym1pdHRlZENzdkRhdGFzZXRzPVtdLHRo''@;'; put 'put ''aXMuZGF0YXNldHNMb2FkaW5nPSExLHRoaXMudXBsb2FkTG9hZGluZz0hMSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy5tYXRjaGVkRGF0YXNldHM9W10sdGhpcy5zaGVldE5hbWVzPVtdLHRoaXMudXNlcklucHV0RGF0YXNldHM9IiIsdGhpcy5saWJzQW5kVGFibGVzPXt9LHRoaXMuaG90''@;'; put 'put ''TWFpblRhYmxlU2V0dGluZ3M9e30sdGhpcy5ob3RVc2VyRGF0YXNldHNTZXR0aW5ncz17fSx0aGlzLnNob3dTdWJtaXRSZWFzb25Nb2RhbD0hMSx0aGlzLnN1Ym1pdFJlYXNvbk1lc3NhZ2U9IiIsdGhpcy5ob3RVc2VyRGF0YXNldHM9e2NvbEhlYWRlcnM6WyJMaWJyYXJ5IiwiVGFibGUiXSxk''@;'; put 'put ''YXRhOltbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXV0sY29sdW1uczpbe3R5cGU6ImF1dG9jb21wbGV0ZSIsZmlsdGVyOiExLHNvdXJjZTpbXX0se3R5cGU6ImF1dG9j''@;'; put 'put ''b21wbGV0ZSIsZmlsdGVyOiExLHNvdXJjZTpbXX1dLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjMwNXB4IixjbGFzc05hbWU6WyJodERhcmsiXSxjb250ZXh0TWVudTp7aXRlbXM6e3Jvd19hYm92ZTp7bmFtZToiSW5zZXJ0IFJvdyBhYm92ZSJ9LHJvd19iZWxvdzp7bmFtZToiSW5zZXJ0IFJvdyBi''@;'; put 'put ''ZWxvdyJ9fX0sbWFudWFsUm93TW92ZTohMCxjb2x1bW5Tb3J0aW5nOiEwLGFmdGVyR2V0Q29sSGVhZGVyOkdtZSxzdHJldGNoSDoiYWxsIn0sdGhpcy5hZnRlckdldENvbEhlYWRlcj1HbWV9bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUo''@;'; put 'put ''cj0+e3RoaXMuaG90VGFibGVMaWNlbnNlS2V5PXIsdGhpcy5pbml0aWFsaXplSG90U2V0dGluZ3MoKX0pLHRoaXMuaW5pdGlhbGl6ZUhvdFNldHRpbmdzKCl9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuaG90VGFibGVVc2VyRGF0YXNldENvbXBvbmVudCYmIXRoaXMu''@;'; put 'put ''aG90SW5zdGFuY2VVc2VyRGF0YXNldCYmdGhpcy5pbml0VXNlcklucHV0SG90KCksdGhpcy5ob3RUYWJsZU1haW5Db21wb25lbnQmJiF0aGlzLmhvdEluc3RhbmNlJiZ0aGlzLmluaXRIb3QoKX0sNTApfW5nQWZ0ZXJDb250ZW50SW5pdCgpe1VuLmVkaXRvci5zdGFydHVwU2V0P3RoaXMuZ2V0''@;'; put 'put ''RnJvbUdsb2JhbHMoKTp0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmliZSgoKT0+e3RoaXMuZ2V0RnJvbUdsb2JhbHMoKX0pfWdldEZyb21HbG9iYWxzKCl7dGhpcy5saWJzQW5kVGFibGVzPVVuLmVkaXRvci5saWJzQW5kVGFibGVzO2NvbnN0IHI9T2JqZWN0''@;'; put 'put ''LmtleXModGhpcy5saWJzQW5kVGFibGVzKTt0aGlzLmhvdFVzZXJEYXRhc2V0cz8uY29sdW1ucyYmKHRoaXMuaG90VXNlckRhdGFzZXRzLmNvbHVtbnNbMF0uc291cmNlPXIpfW9uRmlsZUNoYW5nZShyKXt2YXIgaT10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtjb25zdCBvPXI/LnRhcmdl''@;'; put 'put ''dD8uZmlsZXN8fFtdO2lmKG8ubGVuZ3RoPDEpcmV0dXJuIHZvaWQgaS5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiTm8gZmlsZSBmb3VuZC4iLG51bGwsIkZpbGUgVXBsb2FkIik7bGV0IGE9IiI7Zm9yKGxldCBsIG9mIG8pe2NvbnN0IHU9bC5uYW1lLnNwbGl0KCIuIikucG9w''@;'; put 'put ''KCk7aWYoYXx8KGE9dSksYSE9PXUpcmV0dXJuIHZvaWQgaS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTWl4ZWQgZXh0ZW5zaW9ucyBlcnJvciIsIlBsZWFzZSBzZWxlY3QgZmlsZXMgd2l0aCBzYW1lIGV4dGVuc2lvbi4iKTthPXV9aWYoWyJ4bHN4IiwieGxzbSIsInhsbSJdLmluY2x1''@;'; put 'put ''ZGVzKGEpKWkuc2VsZWN0ZWRGaWxlPXIudGFyZ2V0LmZpbGVzWzBdLGkuc2VsZWN0ZWRGaWxlJiYoaS5maWxlTG9hZGluZ1N0YXRlPV9BLnJlYWRpbmcsaS5zZWxlY3RlZEZpbGUuc2l6ZU1CPWkuc3ByZWFkc2hlZXRTZXJ2aWNlLmJ5dGVzVG9NQihpLnNlbGVjdGVkRmlsZS5zaXplKSxpLnNw''@;'; put 'put ''cmVhZHNoZWV0U2VydmljZS54bHN4UmVhZEZpbGUoaS5zZWxlY3RlZEZpbGUpLnRoZW4obD0+e2kuZmlsZUxvYWRpbmdTdGF0ZT1fQS5wYXJzaW5nLGkuc2VsZWN0ZWRGaWxlLndvcmtib29rPWx9KSksaS5pbml0VXNlcklucHV0SG90KCksc2V0VGltZW91dCgoKT0+e2kub25BdXRvRGV0ZWN0''@;'; put 'put ''Q29sdW1ucygpfSwxMDApO2Vsc2V7aWYoImNzdiIhPT1hKXJldHVybiB2b2lkIGkuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIk9ubHkgZXhjZWwgZXh0ZW5zaW9ucyBhcmUgYWxsb3dlZC4gKHhsc3gpIixudWxsLCJFeHRlbnNpb24gRXJyb3IiKTtpLm9uTXVsdGlDc3ZGaWxl''@;'; put 'put ''cyhyLnRhcmdldC5maWxlcyl9ci50YXJnZXQudmFsdWU9IiJ9KSgpfW9uTXVsdGlDc3ZGaWxlcyhyKXt2YXIgaT10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtmb3IobGV0IG8gb2Ygcil7Y29uc3QgYT1pLnBhcnNlRGF0YXNldEZyb21Dc3ZOYW1lKG8ubmFtZSk7aS5pc1ZhbGlkRGF0YXNl''@;'; put 'put ''dEZvcm1hdChhKSYmaS5pc1ZhbGlkRGF0YXNldFJlZmVyZW5jZShhKSYmaS5jc3ZGaWxlcy5wdXNoKHtmaWxlOm8sZmlsZU5hbWU6by5uYW1lfSl9aS5jc3ZGaWxlcy5sZW5ndGg/KGkuY3N2U3VibWl0dGluZz0hMCx5aWVsZCBpLnN1Ym1pdENzdkZpbGVzKCksaS5jc3ZTdWJtaXR0aW5nPSEx''@;'; put 'put ''KTppLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJDU1YgVXBsb2FkIiwiTm9uZSBvZiB0aGUgYXR0YWNoZWQgQ1NWIGZpbGUgbmFtZXMgbWF0Y2hlZCBhbiBhY3R1YWwgZGF0YXNldC4iKX0pKCl9b25EaXNjYXJkRmlsZSgpe3RoaXMuc2VsZWN0ZWRGaWxlPW51bGwsdGhpcy51c2VySW5w''@;'; put 'put ''dXREYXRhc2V0cz0iIn1vblN0YXJ0UGFyc2luZ0ZpbGUoKXt2YXIgcj10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtyLnVwbG9hZExvYWRpbmc9ITA7Y29uc3QgaT1bXTtsZXQgbz1bXTtmb3IobGV0IGEgb2Ygci5tYXRjaGVkRGF0YXNldHMpe2NvbnN0IGw9ci5mZXRjaERhdGFzZXQoYSk7''@;'; put 'put ''aS5wdXNoKGwpfVByb21pc2UuYWxsU2V0dGxlZChpKS50aGVuKGE9PnthLmZvckVhY2godT0+eyJmdWxmaWxsZWQiPT09dS5zdGF0dXMmJnUudmFsdWUmJm8ucHVzaCh1LnZhbHVlKX0pLHIudXBsb2FkTG9hZGluZz0hMSxyLmJ1aWxkRGF0YXNldHNPYmplY3RzKG8pLmZvckVhY2godT0+e3Iu''@;'; put 'put ''cGFyc2VkRGF0YXNldHMucHVzaCh7bGliZHM6dS5saWJkcyxpbmNsdWRlSW5TdWJtaXNzaW9uOiEwLGRhdGFzZXRJbmZvOnUscGFyc2luZ1RhYmxlOiEwfSl9KSxyLndvcmtib29rTG9hZGVkKCkudGhlbih1PT57Zm9yKGxldCBnIG9mIHIucGFyc2VkRGF0YXNldHMpci5zcHJlYWRzaGVldFNl''@;'; put 'put ''cnZpY2UucGFyc2VFeGNlbEZpbGUoe2ZpbGU6ci5zZWxlY3RlZEZpbGUsd29ya2Jvb2s6dSxwYXNzd29yZDpyLnNlbGVjdGVkRmlsZS5wYXNzd29yZHx8dm9pZCAwLGRjVmFsaWRhdG9yOmcuZGF0YXNldEluZm8uZGNWYWxpZGF0b3IsaGVhZGVyUGtzOmcuZGF0YXNldEluZm8uaGVhZGVyUGtz''@;'; put 'put ''LGhlYWRlckFycmF5OmcuZGF0YXNldEluZm8uaGVhZGVyQXJyYXksaGVhZGVyU2hvdzpbXSx0aW1lSGVhZGVyczpnLmRhdGFzZXRJbmZvLnRpbWVIZWFkZXJzLGRhdGVIZWFkZXJzOmcuZGF0YXNldEluZm8uZGF0ZUhlYWRlcnMsZGF0ZVRpbWVIZWFkZXJzOmcuZGF0YXNldEluZm8uZGF0ZVRp''@;'; put 'put ''bWVIZWFkZXJzLHhsUnVsZXM6Zy5kYXRhc2V0SW5mby54bFJ1bGVzfSkudGhlbihFPT57aWYoci5maWxlTG9hZGluZ1N0YXRlPV9BLnBhcnNlZCxFJiZFLmRhdGEpe2xldCBPPVtdO0UuZGF0YS5tYXAoWj0+e2xldCBlZT17fTtFLmhlYWRlclNob3cubWFwKCh2ZSxNZSk9PntlZVt2ZV09WltN''@;'; put 'put ''ZV19KSxlZS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX198fChlZS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX189Ik5vIiksTy5wdXNoKGVlKX0pLGcuZGF0YXNvdXJjZT1PLGcucGFyc2VSZXN1bHQ9RSxnLnBhcnNpbmdUYWJsZT0hMX19KS5jYXRjaChFPT57Y29uc29sZS53''@;'; put 'put ''YXJuKCJQYXJzaW5nIGV4Y2VsIGZpbGUgZXJyb3IuIixFKSxnLmRhdGFzb3VyY2U9W10sZy5pbmNsdWRlSW5TdWJtaXNzaW9uPSExLGcucGFyc2luZ1RhYmxlPSExfSl9KX0pfSkoKX1vblN1Ym1pdEFsbCgpe3RoaXMudGFibGVzVG9TdWJtaXQubGVuZ3RoP3RoaXMuc2hvd1N1Ym1pdFJlYXNv''@;'; put 'put ''bk1vZGFsPSEwOnRoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk5vIHRhYmxlcyB0byBzdWJtaXQiLCJQbGVhc2UgaW5jbHVkZSBhdCBsZWFzdCBvbmUgdGFibGUgdG8gcHJvY2VlZC4iKX1vbkRpc2NhcmQoKXt0aGlzLnBhcnNlZERhdGFzZXRzPVtdLHRoaXMubWF0Y2hlZERhdGFz''@;'; put 'put ''ZXRzPVtdLHRoaXMuc2VsZWN0ZWRGaWxlPW51bGwsdGhpcy51c2VySW5wdXREYXRhc2V0cz0iIix0aGlzLnN1Ym1pdFJlYXNvbk1lc3NhZ2U9IiJ9aW5pdEhvdCgpe3NldFRpbWVvdXQoKCk9PntpZih0aGlzLmhvdFRhYmxlTWFpbkNvbXBvbmVudD8uaG90SW5zdGFuY2Upe3RoaXMuaG90SW5z''@;'; put 'put ''dGFuY2U9dGhpcy5ob3RUYWJsZU1haW5Db21wb25lbnQuaG90SW5zdGFuY2U7Y29uc3QgaT10aGlzLmNvbnRlbnRBcmVhUmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0LTE2MCsicHgiO3RoaXMuYWN0aXZlUGFyc2VkRGF0YXNldCYmKHRoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGlu''@;'; put 'put ''Z3Moe2NvbEhlYWRlcnM6dGhpcy5hY3RpdmVQYXJzZWREYXRhc2V0LmRhdGFzZXRJbmZvLmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmFjdGl2ZVBhcnNlZERhdGFzZXQuZGF0YXNldEluZm8uZGNWYWxpZGF0b3I/LmdldFJ1bGVzKCkscmVhZE9ubHk6ITAsaGVpZ2h0Oml8fCIzMDBweCIs''@;'; put 'put ''Y2xhc3NOYW1lOlsiaHREYXJrIl19KSx0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCksc2V0VGltZW91dCgoKT0+e3RoaXMuYWN0aXZlUGFyc2VkRGF0YXNldCYmdGhpcy5hY3RpdmVQYXJzZWREYXRhc2V0LmRhdGFzb3VyY2UmJih0aGlzLmhvdEluc3RhbmNlLmxvYWREYXRhKHRoaXMuYWN0aXZl''@;'; put 'put ''UGFyc2VkRGF0YXNldC5kYXRhc291cmNlKSx0aGlzLmhvdEluc3RhbmNlLnJlbmRlcigpKX0sMTAwKSl9fSwxMDApfWluaXRVc2VySW5wdXRIb3QoKXt2YXIgcj10aGlzO3NldFRpbWVvdXQoKCk9Pnt0aGlzLmhvdFRhYmxlVXNlckRhdGFzZXRDb21wb25lbnQ/LmhvdEluc3RhbmNlJiYodGhp''@;'; put 'put ''cy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0PXRoaXMuaG90VGFibGVVc2VyRGF0YXNldENvbXBvbmVudC5ob3RJbnN0YW5jZSxzZXRUaW1lb3V0KCgpPT57dGhpcy5ob3RVc2VyRGF0YXNldHMuZGF0YSYmKHRoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5sb2FkRGF0YSh0aGlzLmhvdFVzZXJE''@;'; put 'put ''YXRhc2V0cy5kYXRhKSx0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQucmVuZGVyKCkpfSw1MCksdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmFkZEhvb2soImJlZm9yZUNoYW5nZSIsKGksbyk9PntpZihpKWZvcihsZXQgYSBvZiBpKWEmJmFbM10mJihhWzNdPWFbM10udG9VcHBlckNh''@;'; put 'put ''c2UoKSl9KSx0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9uKCl7dmFyIGk9Q3IoZnVuY3Rpb24qKG8sYSl7aWYobyl7ImVkaXQiPT09YSYmKHlpZWxkIHIub25Vc2VySW5wdXREYXRhc2V0c0NoYW5nZSgpKTtmb3IobGV0IGwgb2Ygbyly''@;'; put 'put ''Lm1hcmtVbm1hdGNoZWRSb3dzKGxbMF0pO3IuZHluYW1pY0NlbGxWYWxpZGF0aW9ucygpLHIuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5yZW5kZXIoKX19KTtyZXR1cm4gZnVuY3Rpb24obyxhKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSx0aGlzLmhvdEluc3RhbmNlVXNl''@;'; put 'put ''ckRhdGFzZXQuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7dmFyIGk9Q3IoZnVuY3Rpb24qKG8sYSxsLHUpe3lpZWxkIHIub25Vc2VySW5wdXREYXRhc2V0c0NoYW5nZSgpO2ZvcihsZXQgZyBvZiBsKXIubWFya1VubWF0Y2hlZFJvd3MoZyl9KTtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''byxhLGwsdSl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkpfSwxMDApfWR5bmFtaWNDZWxsVmFsaWRhdGlvbnMoKXt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQmJnRoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5nZXREYXRhKCkuZm9yRWFjaCgoaSxvKT0+e2NvbnN0''@;'; put 'put ''IGE9aVswXTthJiZhLmxlbmd0aCYmdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKG8sMSwic291cmNlIix0aGlzLmxpYnNBbmRUYWJsZXNbYV0pfSl9bWFya1VubWF0Y2hlZFJvd3Mocil7aWYoIXRoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldClyZXR1cm47Y29uc3Qg''@;'; put 'put ''aT10aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuZ2V0RGF0YUF0Um93KHIpLG89YCR7aVswXX0uJHtpWzFdfWAsYT10aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuZ2V0Q2VsbE1ldGFBdFJvdyhyKTtpJiZpWzBdJiZpWzFdP3RoaXMubWF0Y2hlZERhdGFzZXRzLmluY2x1ZGVzKG8pP2Eu''@;'; put 'put ''Zm9yRWFjaChsPT57dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKHIsbC5jb2wsImNsYXNzTmFtZSIsIiIpfSk6YS5mb3JFYWNoKGw9Pnt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuc2V0Q2VsbE1ldGEocixsLmNvbCwiY2xhc3NOYW1lIiwibm90LW1hdGNoZWQi''@;'; put 'put ''KX0pOmEuZm9yRWFjaChsPT57dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKHIsbC5jb2wsImNsYXNzTmFtZSIsIiIpfSl9b25Vc2VySW5wdXREYXRhc2V0c0NoYW5nZSgpe3JldHVybiBuZXcgUHJvbWlzZSgocixpKT0+e3RoaXMuaGVscGVyU2VydmljZS5kZWJvdW5j''@;'; put 'put ''ZUNhbGwoMTAwLCgpPT57Y29uc3Qgbz10aGlzLmdldERhdGFzZXRzRnJvbUhvdCgpO3RoaXMubWF0Y2hlZERhdGFzZXRzPVtdLG8uZm9yRWFjaChhPT57Y29uc3QgbD1hLnRyaW0oKTt0aGlzLmlzVmFsaWREYXRhc2V0Rm9ybWF0KGwpJiZ0aGlzLmlzVmFsaWREYXRhc2V0UmVmZXJlbmNlKGwp''@;'; put 'put ''JiYhdGhpcy5tYXRjaGVkRGF0YXNldHMuaW5jbHVkZXMobCk/dGhpcy5tYXRjaGVkRGF0YXNldHMucHVzaChsKTpjb25zb2xlLndhcm4oYFNoZWV0IG5hbWU6ICR7bH0gaXMgbm90IGFuIGFjdHVhbCBkYXRhc2V0IHJlZmVyZW5jZS5gKX0pLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSxyKHZv''@;'; put 'put ''aWQgMCl9KX0pfW9uQXV0b0RldGVjdENvbHVtbnMoKXt2YXIgcj10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtpZighci5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0KXtsZXQgbD0wO2NvbnN0IHU9MjA7Zm9yKDshci5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0JiZsPHU7KXlpZWxkIG5ldyBQcm9t''@;'; put 'put ''aXNlKGc9PnNldFRpbWVvdXQoZywxMDApKSxsKys7aWYoIXIuaG90SW5zdGFuY2VVc2VyRGF0YXNldClyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oImhvdEluc3RhbmNlVXNlckRhdGFzZXQgbm90IHJlYWR5IGFmdGVyIHdhaXRpbmciKX1sZXQgaT0hMTtpZih5aWVsZCByLnBhcnNlRXhjZWxT''@;'; put 'put ''aGVldE5hbWVzKCkudGhlbihsPT57ci5zaGVldE5hbWVzPWx9KS5jYXRjaChsPT57bC5pbmNsdWRlcygicGFzc3dvcmQiKSYmKGk9ITApfSksaSlyZXR1cm4gci5vbkRpc2NhcmRGaWxlKCksdm9pZCByLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJMb2NrZWQgZmlsZSIsIldlIGZhaWxl''@;'; put 'put ''ZCB0byB1bmxvY2sgdGhlIGZpbGUuIik7ci5zaGVldE5hbWVzJiYoci5tYXRjaGVkRGF0YXNldHM9W10sci51c2VySW5wdXREYXRhc2V0cz0iIixyLnNoZWV0TmFtZXMuZm9yRWFjaCgobCx1KT0+e2NvbnN0IGc9bC50cmltKCk7ci5pc1ZhbGlkRGF0YXNldEZvcm1hdChnKSYmci5pc1ZhbGlk''@;'; put 'put ''RGF0YXNldFJlZmVyZW5jZShnKT9yLm1hdGNoZWREYXRhc2V0cy5wdXNoKGcpOmNvbnNvbGUud2FybihgU2hlZXQgbmFtZTogJHtnfSBpcyBub3QgYW4gYWN0dWFsIGRhdGFzZXQgcmVmZXJlbmNlLmApfSkpLHIudXNlcklucHV0RGF0YXNldHM9ci5tYXRjaGVkRGF0YXNldHMuam9pbigiXG4i''@;'; put 'put ''KTtjb25zdCBvPXIubWF0Y2hlZERhdGFzZXRzLm1hcChsPT5bbC5zcGxpdCgiLiIpWzBdLGwuc3BsaXQoIi4iKVsxXV0pLGE9ci5ob3RVc2VyRGF0YXNldHMuZGF0YS5sZW5ndGg7aWYoby5sZW5ndGg8YSl7Y29uc3QgbD1hLW8ubGVuZ3RoO2ZvcihsZXQgdT0wO3U8bDt1Kyspby5wdXNoKFsi''@;'; put 'put ''IiwiIl0pfXIuaG90SW5zdGFuY2VVc2VyRGF0YXNldCYmc2V0VGltZW91dCgoKT0+e3IuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5sb2FkRGF0YShvKSxyLmhvdEluc3RhbmNlVXNlckRhdGFzZXQucmVuZGVyKCl9LDEwMCksci5keW5hbWljQ2VsbFZhbGlkYXRpb25zKCl9KSgpfW9uUGFyc2Vk''@;'; put 'put ''RGF0YXNldENsaWNrKHIpe3RoaXMuZGVzZWxlY3RBbGxQYXJzZWREYXRhc2V0cygpLHIuYWN0aXZlPSEwLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSx0aGlzLmluaXRIb3QoKX1vblN1Ym1pdHRlZENzdkRhdGFzZXRDbGljayhyKXt0aGlzLmRlc2VsZWN0QWxsU3VibWl0dGVkQ3N2RGF0YXNl''@;'; put 'put ''dHMoKSxyLmFjdGl2ZT0hMH1nZXQgYWN0aXZlUGFyc2VkRGF0YXNldCgpe3JldHVybiB0aGlzLnBhcnNlZERhdGFzZXRzLmZpbmQocj0+ci5hY3RpdmUpfWdldCBhY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0KCl7cmV0dXJuIHRoaXMuc3VibWl0dGVkQ3N2RGF0YXNldHMuZmluZChyPT5yLmFj''@;'; put 'put ''dGl2ZSl9Z2V0IG5vdEZvdW5kRGF0YXNldHMoKXtyZXR1cm4gdGhpcy5nZXREYXRhc2V0c0Zyb21Ib3QoKS5maWx0ZXIoaT0+IXRoaXMubWF0Y2hlZERhdGFzZXRzLmluY2x1ZGVzKGkudHJpbSgpKSkuZmlsdGVyKGk9PmkubGVuZ3RoKX1nZXQgaXNIb3RIaWRkZW4oKXtpZighdGhpcy5ob3RJ''@;'; put 'put ''bnN0YW5jZSlyZXR1cm4hMDt0cnl7Y29uc3Qgcj10aGlzLmhvdEluc3RhbmNlLmdldFNldHRpbmdzKCkuY2xhc3NOYW1lO3JldHVybiEhciYmci5pbmNsdWRlcygiaHRDdXN0b21IaWRkZW4iKX1jYXRjaHtyZXR1cm4hMH19Z2V0IHRhYmxlc1RvU3VibWl0KCl7cmV0dXJuIHRoaXMucGFyc2Vk''@;'; put 'put ''RGF0YXNldHMuZmlsdGVyKHI9PnIuZGF0YXNvdXJjZSYmci5wYXJzZVJlc3VsdCYmci5pbmNsdWRlSW5TdWJtaXNzaW9uKX1nZXQgc3VibWl0dGluZ0Nzdigpe3JldHVybiB0aGlzLmNzdkZpbGVzLmxlbmd0aD4wfWdldCBleGNlbHNTdWJtaXR0ZWQoKXtyZXR1cm4hIXRoaXMucGFyc2VkRGF0''@;'; put 'put ''YXNldHMuZmlsdGVyKHI9PnIuc3VibWl0UmVzdWx0KS5sZW5ndGh9ZG93bmxvYWRGaWxlKHIpe3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBzdGFnZWRhdGEtJHt0aGlzLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQ/LmxpYmRzfS1sb2dgLEpTT04uc3RyaW5naWZ5KHIp''@;'; put 'put ''KX1zdWJtaXRDc3ZGaWxlcygpe3ZhciByPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe2xldCBpPVtdO2ZvcihsZXQgbyBvZiByLmNzdkZpbGVzKXtjb25zdCBhPXIucGFyc2VEYXRhc2V0RnJvbUNzdk5hbWUoby5maWxlTmFtZSk7bGV0IGwsdTt5aWVsZCByLnNhc1NlcnZpY2UudXBsb2Fk''@;'; put 'put ''RmlsZSgic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSIsW29dLHt0YWJsZTphfSkudGhlbihnPT57dHlwZW9mIGcuYWRhcHRlclJlc3BvbnNlLnNhc2pzQWJvcnQ8InUiP2w9Zy5hZGFwdGVyUmVzcG9uc2Uuc2FzanNBYm9ydDp1PWcuYWRhcHRlclJlc3BvbnNlfSxnPT57Y29uc29sZS5lcnJv''@;'; put 'put ''cigiZXJyIixnKSxsPWcuYWRhcHRlclJlc3BvbnNlfSksaS5wdXNoKHtzdWNjZXNzOnUsZXJyb3I6bCxsaWJkczphfSl9ci5zdWJtaXR0ZWRDc3ZEYXRhc2V0cz1pfSkoKX1mZXRjaERhdGFzZXQocil7dmFyIGk9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7aWYocilyZXR1cm4gaS5zYXNT''@;'; put 'put ''dG9yZVNlcnZpY2UuY2FsbFNlcnZpY2Uoe0xJQkRTOnIsT1VUREVTVDoiV0VCIn0sIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvZ2V0ZGF0YSIscikudGhlbihhPT5hKS5jYXRjaChhPT57Y29uc29sZS53YXJuKGBFcnJvciBmZXRjaGluZyAke3J9YCxhKX0pfSkoKX1zdWJtaXRUYWJsZXMo''@;'; put 'put ''cil7dmFyIGk9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7Y29uc29sZS5pbmZvKCJTdWJtaXR0aW5nIG11bHRpcGxlIHRhYmxlcyIsaS5wYXJzZWREYXRhc2V0cyksaS5zdWJtaXRMb2FkaW5nPSEwO2ZvcihsZXQgbyBvZiBpLnBhcnNlZERhdGFzZXRzKXtpZighby5wYXJzZVJlc3VsdHx8''@;'; put 'put ''IW8uZGF0YXNvdXJjZXx8IW8uaW5jbHVkZUluU3VibWlzc2lvbnx8ciYmIXIuaW5jbHVkZXMoby5saWJkcykpY29udGludWU7bGV0IGE9e307aS5zdWJtaXRSZWFzb25NZXNzYWdlPWkuc3VibWl0UmVhc29uTWVzc2FnZS5yZXBsYWNlKC9cbi9nLCIuICIpLGEuQUNUSU9OPSJMT0FEIixhLk1F''@;'; put 'put ''U1NBR0U9aS5zdWJtaXRSZWFzb25NZXNzYWdlLGEuTElCRFM9by5saWJkcztsZXQgbD1vLmRhdGFzb3VyY2U7aWYobCl7bD1sLm1hcChlZT0+e2xldCB2ZT1lZS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX187cmV0dXJuIGRlbGV0ZSBlZS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JE''@;'; put 'put ''X19fX18sZWUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fPXZlLE9iamVjdC5rZXlzKGVlKS5tYXAoTWU9PnsibnVtZXJpYyI9PT1vLmRhdGFzZXRJbmZvLmRjVmFsaWRhdG9yPy5nZXRSdWxlKE1lKT8udHlwZSYmIi4iPT09ZWVbTWVdJiYoZWVbTWVdPW51bGwpfSksZWV9KTtjb25z''@;'; put 'put ''dCB1PWwuc2xpY2UoMCxpLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCk7bGV0IGcsRSxPO3lpZWxkIGkuc2FzU3RvcmVTZXJ2aWNlLnVwZGF0ZVRhYmxlKGEsdSwiU0FTQ29udHJvbFRhYmxlIiwiZWRpdG9ycy9zdGFnZWRhdGEiLG8uZGF0YXNldEluZm8uZGF0YS4kc2Fz''@;'; put 'put ''ZGF0YSwhMCx7ZGVidWc6ITB9KS50aGVuKGVlPT57RT1lZS5hZGFwdGVyUmVzcG9uc2UsTz1lZS5sb2d9KS5jYXRjaChlZT0+e2NvbnNvbGUuZXJyb3IoImVyciIsZWUpLGc9ZWUuYWRhcHRlclJlc3BvbnNlLE89ZWUubG9nfSksby5zdWJtaXRSZXN1bHQ9e3N1Y2Nlc3M6RSxlcnJvcjpnLGxv''@;'; put 'put ''ZzpPLHBhcnNlUmVzdWx0Om8ucGFyc2VSZXN1bHQsbGliZHM6by5saWJkc319fWkuc2hvd1N1Ym1pdFJlYXNvbk1vZGFsPSExLGkuc3VibWl0TG9hZGluZz0hMSxpLmRlc2VsZWN0QWxsUGFyc2VkRGF0YXNldHMoKX0pKCl9cmVTdWJtaXRUYWJsZShyKXt2YXIgaT10aGlzO3JldHVybiBDcihm''@;'; put 'put ''dW5jdGlvbiooKXt5aWVsZCBpLnN1Ym1pdFRhYmxlcyhbci5saWJkc10pO2NvbnN0IG89aS5wYXJzZWREYXRhc2V0cy5maW5kKGE9PmEubGliZHM9PT1yLmxpYmRzKTtvJiYoby5hY3RpdmU9ITApfSkoKX13b3JrYm9va0xvYWRlZCgpe3JldHVybiBuZXcgUHJvbWlzZSgocixpKT0+e3RoaXMu''@;'; put 'put ''c2VsZWN0ZWRGaWxlfHxpKCJObyBmaWxlIHNlbGVjdGVkIiksdGhpcy53b3JrYm9va0ludGVydmFsPXNldEludGVydmFsKCgpPT57dGhpcy5zZWxlY3RlZEZpbGUud29ya2Jvb2smJihjbGVhckludGVydmFsKHRoaXMud29ya2Jvb2tJbnRlcnZhbCkscih0aGlzLnNlbGVjdGVkRmlsZS53b3Jr''@;'; put 'put ''Ym9vaykpfSw1MDApfSl9cGFyc2VEYXRhc2V0RnJvbUNzdk5hbWUocil7Y29uc3QgaT1yLnNwbGl0KCIuIik7cmV0dXJuIGkucG9wKCksaS5qb2luKCIuIil9Z2V0RGF0YXNldHNGcm9tSG90KCl7cmV0dXJuIHRoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldD90aGlzLmhvdEluc3RhbmNlVXNl''@;'; put 'put ''ckRhdGFzZXQuZ2V0RGF0YSgpLmZpbHRlcihpPT5pWzBdPy5sZW5ndGgmJmlbMV0/Lmxlbmd0aCkubWFwKGk9Pmk/YCR7aVswXX0uJHtpWzFdfWA6IiIpOltdfXBhcnNlRXhjZWxTaGVldE5hbWVzKCl7dmFyIHI9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNl''@;'; put 'put ''KChpLG8pPT57aWYoIXIuc2VsZWN0ZWRGaWxlKXJldHVybiBpKFtdKTtyLnNwcmVhZHNoZWV0U2VydmljZS5wYXJzZUV4Y2VsU2hlZXROYW1lcyhyLnNlbGVjdGVkRmlsZSkudGhlbihhPT4oYS5wYXNzd29yZCYmKHIuc2VsZWN0ZWRGaWxlLnBhc3N3b3JkPWEucGFzc3dvcmQpLGkoYS5zaGVl''@;'; put 'put ''dE5hbWVzKSkpLmNhdGNoKGE9Pm8oYSkpfSl9KSgpfWlzVmFsaWREYXRhc2V0Rm9ybWF0KHIpe3JldHVybi9eXHd7MSw4fVwuXHd7MSwzMn0kL2dpbS50ZXN0KHIpfWlzVmFsaWREYXRhc2V0UmVmZXJlbmNlKHIpe2NvbnN0IGk9ci5zcGxpdCgiLiIpWzBdLG89ci5zcGxpdCgiLiIpWzFdO3Jl''@;'; put 'put ''dHVybiEhdGhpcy5saWJzQW5kVGFibGVzW2ldPy5pbmNsdWRlcyhvKX1idWlsZERhdGFzZXRzT2JqZWN0cyhyKXtpZighcilyZXR1cm5bXTtjb25zdCBpPVtdO2ZvcihsZXQgbyBvZiByKWlmKG8uZGF0YSl7Y29uc3QgYT17Li4ubyxob3RUYWJsZTp7ZGF0YTpvLmRhdGEuc2FzZGF0YSxzZXR0''@;'; put 'put ''aW5nczp7fX0sY29sczpbXSxoZWFkZXJDb2x1bW5zOltdLGhlYWRlclBrczpbXSxoZWFkZXJBcnJheTpbXSxkYXRlSGVhZGVyczpbXSx0aW1lSGVhZGVyczpbXSxkYXRlVGltZUhlYWRlcnM6W10seGxSdWxlczpbXSxjb2x1bW5IZWFkZXI6W119O2EuY29scz1vLmRhdGEuY29scyxhLmhlYWRl''@;'; put 'put ''ckNvbHVtbnM9by5kYXRhLnNhc3BhcmFtc1swXS5DT0xIRUFERVJTLnNwbGl0KCIsIiksYS5oZWFkZXJQa3M9by5kYXRhLnNhc3BhcmFtc1swXS5QSy5zcGxpdCgiICIpLC0xIT09YS5oZWFkZXJDb2x1bW5zLmluZGV4T2YoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIpJiYoYS5o''@;'; put 'put ''ZWFkZXJDb2x1bW5zW2EuaGVhZGVyQ29sdW1ucy5pbmRleE9mKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iKV09IkRlbGV0ZT8iKSxhLmhlYWRlckFycmF5PWEuaGVhZGVyQ29sdW1ucy5zbGljZSgxKSwiIiE9PW8uZGF0YS5zYXNwYXJhbXNbMF0uRFRWQVJTJiYoYS5kYXRlSGVh''@;'; put 'put ''ZGVycz1vLmRhdGEuc2FzcGFyYW1zWzBdLkRUVkFSUy5zcGxpdCgiICIpKSwiIiE9PW8uZGF0YS5zYXNwYXJhbXNbMF0uVE1WQVJTJiYoYS50aW1lSGVhZGVycz1vLmRhdGEuc2FzcGFyYW1zWzBdLlRNVkFSUy5zcGxpdCgiICIpKSwiIiE9PW8uZGF0YS5zYXNwYXJhbXNbMF0uRFRUTVZBUlMm''@;'; put 'put ''JihhLmRhdGVUaW1lSGVhZGVycz1vLmRhdGEuc2FzcGFyYW1zWzBdLkRUVE1WQVJTLnNwbGl0KCIgIikpLG8uZGF0YS54bF9ydWxlcy5sZW5ndGg+MCYmKGEueGxSdWxlcz10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKG8uZGF0YS54bF9ydWxlcykpLGEuZGNWYWxpZGF0b3I9bmV3IGJ6''@;'; put 'put ''ZShvLmRhdGEuc2FzcGFyYW1zWzBdLG8uZGF0YS4kc2FzZGF0YSxvLmRhdGEuY29scyxvLmRhdGEuZHFydWxlcyxvLmRhdGEuZHFkYXRhKSxhLmNvbHVtbkhlYWRlcj1vLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSxpLnB1c2goYSl9cmV0dXJuIGl9ZGVzZWxlY3RB''@;'; put 'put ''bGxQYXJzZWREYXRhc2V0cygpe2ZvcihsZXQgciBvZiB0aGlzLnBhcnNlZERhdGFzZXRzKXIuYWN0aXZlPSExfWRlc2VsZWN0QWxsU3VibWl0dGVkQ3N2RGF0YXNldHMoKXtmb3IobGV0IHIgb2YgdGhpcy5zdWJtaXR0ZWRDc3ZEYXRhc2V0cylyLmFjdGl2ZT0hMX1zdGF0aWMjZT1uPSgpPT4o''@;'; put 'put ''dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKSh6ZSh1ZCksemUoRjIpLHplKGZoKSx6ZShCcCksemUoQVplKSx6ZShpYyksemUoVWwpKX0sdGhpcy5cdTAyNzVjbXA9UHIoe3R5cGU6ZSxzZWxlY3RvcnM6W1siYXBwLW11bHRpLWRhdGFzZXQiXV0sdmlld1F1ZXJ5''@;'; put 'put ''OmZ1bmN0aW9uKGksbyl7aWYoMSZpJiYoV28oUHNuLDcpLFdvKEhzbiw1KSxXbyhWc24sNSkpLDImaSl7bGV0IGE7Y2koYT11aSgpKSYmKG8uY29udGVudEFyZWFSZWY9YS5maXJzdCksY2koYT11aSgpKSYmKG8uaG90VGFibGVNYWluQ29tcG9uZW50PWEuZmlyc3QpLGNpKGE9dWkoKSkmJihv''@;'; put 'put ''LmhvdFRhYmxlVXNlckRhdGFzZXRDb21wb25lbnQ9YS5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihpLG8pezImaSYmd3IoImNvbnRlbnQtY29udGFpbmVyIixvLmNvbnRlbnRDb250YWluZXJDbGFzcyl9LHN0YW5kYWxvbmU6ITEsZGVjbHM6MzcsdmFyczoxOCxj''@;'; put 'put ''b25zdHM6W1siY29udGVudEFyZWEiLCIiXSxbImZpbGVVcGxvYWRJbnB1dCIsIiJdLFsiaG90SW5zdGFuY2VVc2VyRGF0YXNldCIsIiJdLFsiaG90SW5zdGFuY2VNYWluIiwiIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsIm1iLTEwIl0sWzEs''@;'; put 'put ''ImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIiwibm8tYm9yZGVycyIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsImhlYWRlci1yb3ciLCJjbHItcm93IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsInctMTAwIiwi''@;'; put 'put ''bS0wIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiLCJwb2ludGVyLWV2ZW50cy1ub25lIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9k''@;'; put 'put ''eSJdLFsiY2RzLXRleHQiLCJib2R5IiwxLCJsaWNlbmNlLWxpbWl0LW5vdGljZSIsIm10LTAiLCJtYi0xNSJdLFsxLCJ0ZXh0LWFyZWEtZnVsbC13aWR0aCJdLFsiZm9yIiwiZm9ybUZpZWxkc184IiwxLCJtYi01IiwiZC1ibG9jayJdLFsiY2xyVGV4dGFyZWEiLCIiLCJ0YWJpbmRleCIsIjAi''@;'; put 'put ''LCJ0eXBlIiwidGV4dCIsImlkIiwiZm9ybUZpZWxkc184IiwxLCJzdWJtaXQtcmVhc29uIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2RzLXRleHQiLCJjYXB0aW9uX2NsZWFuIiwxLCJtdC0xMCJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIs''@;'; put 'put ''ImJ0bi1vdXRsaW5lIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJ0eXBlIiwiYnV0dG9uIiwiaWQiLCJzdWJtaXQtdGFibGVzIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzEsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbImNkcy10ZXh0''@;'; put 'put ''IiwiY2FwdGlvbl9jbGVhbiIsMSwibXQtMTAiLCJ0ZXh0LWNlbnRlciJdLFsiaWQiLCJicm93c2UtZmlsZSIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJidG4tc20iLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbImhpZGRlbiIsIiIsImlkIiwiZmlsZS11cGxvYWQiLCJ0eXBlIiwiZmlsZSIsIm11''@;'; put 'put ''bHRpcGxlIiwiIiwzLCJjaGFuZ2UiXSxbImNkcy10ZXh0IiwiY2FwdGlvbiIsMSwibWwtMTAiLCJtYi0xMCJdLFsxLCJidG4iLCJidG4tZGFuZ2VyIiwiYnRuLXNtIiwibXItMTAiLDMsImNsaWNrIl0sWyJpZCIsInN1Ym1pdC1hbGwiLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLXNtIiwz''@;'; put 'put ''LCJjbGljayJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsIndoaXRlc3BhY2Utbm93cmFwIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siXSxbMSwibWwtNSJdLFsic3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiXSxbInN0YXR1''@;'; put 'put ''cyIsInN1Y2Nlc3MiLCJzaGFwZSIsImNoZWNrLWNpcmNsZSJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xyU21hbGwiLCIiXSxbImNkcy10ZXh0IiwiY2FwdGlvbiIsMSwibWwtMTAiLCJtYi0xMCIsIm10LTEwIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwid2hpdGVzcGFjZS1ub3dyYXAiLDMs''@;'; put 'put ''ImNsaWNrIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsInVwbG9hZC1jbG91ZCIsInNpemUiLCI0MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsxLCJkLWZsZXgi''@;'; put 'put ''LCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsIm10LTE1Il0sWzEsImRhdGFzZXQtaW5wdXQtd3JhcHBlciJdLFsiY2RzLXRleHQiLCJzZWNvbmRhcnkgcmVndWxhciIsMSwibWItNSJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJzaGFwZSIsInRyYXNoIiwic3RhdHVzIiwiZGFuZ2Vy''@;'; put 'put ''IiwxLCJtbC01IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiwxLCJtYi0yMCJdLFsiY2RzLXRleHQiLCJzZWNvbmRhcnkgcmVndWxhciIsMSwibWItMTUiXSxbMSwibWItNSJdLFsiaWQiLCJob3RUYWJsZVVzZXJEYXRhc2V0Iiwx''@;'; put 'put ''LCJtdC0xNSIsMywic2V0dGluZ3MiXSxbMSwiZGF0YXNldC1zZWxlY3Rpb24tYWN0aW9ucyIsInRleHQtcmlnaHQiLCJtdC0xMCJdLFsiaWQiLCJjb250aW51ZS1idG4iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLXNtIiwzLCJjbGljayIsImRpc2FibGVkIiwiY2xyTG9hZGluZyJdLFsi''@;'; put 'put ''YXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJwcm9jZXNzLW9uLXZtIiwic2l6ZSIsIjQwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNDAiLDEsImlzLWluZm8iLCJpY29uLWRj''@;'; put 'put ''LWZpbGwiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwicC0xMCIsIm10LTE1Iiwic3VibWlzc2lvbi1yZXN1bHRzIl0sWzEsImVycm9yLWZpZWxkIiwibXQtMTUiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwicC0xMCIsIm10''@;'; put 'put ''LTE1Il0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiwxLCJtYi0xMCJdLFsiY2RzLXRleHQiLCJzZWNvbmRhcnkgcmVndWxhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDMsInJvdXRlckxpbmsiXSxbMywiY2xyUG9zaXRpb24iLCJjbHJTaXplIl0sWyJ0eXBlIiwiY2hlY2ti''@;'; put 'put ''b3giLCJjbHJUb2dnbGUiLCIiLCJuYW1lIiwib3B0aW9ucyIsInJlcXVpcmVkIiwiIiwidmFsdWUiLCJvcHRpb24xIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWzEsInRleHQtY2VudGVyIiwidy0xMDAiXSxbImlkIiwiaG90VGFibGUiLDEsIm10LTE1IiwzLCJz''@;'; put 'put ''ZXR0aW5ncyJdLFsxLCJjb2xvci1ncmVlbiJdLFsxLCJjb2xvci1yZWQiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xMCIsMywiY2xyTG9hZGluZyJdLFsxLCJidG4iLCJidG4tcHJpbWFyeS1vdXRsaW5lIiwibXQtMTAiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5Iiwi''@;'; put 'put ''bXQtMTAiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJsb2ctd3JhcHBlciJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbHJTbWFsbCIsIiIsMSwibWwtNSJdLFsxLCJzcGlubmVyLW1kIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0''@;'; put 'put ''d2VlbiIsInAtMTAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oaSxvKXtpZigxJmkpe2NvbnN0IGE9d24oKTtKKDAsImFwcC1zaWRlYmFyIiksdnQoMSxCc24sMiwwLCJkaXYiLDQpLHZ0KDIsanNuLDUsMSwiZGl2Iiw1KSx2dCgzLGVsbiw2LDEpLHZ0KDQsaWxuLDUsMCksdGUoKSxKKDUsImRpdiIs''@;'; put 'put ''NiwwKSg3LCJkaXYiLDcpKDgsImRpdiIsOCkoOSwicCIsOSksU2UoMTAsIk11bHRpIERhdGFzZXQgTG9hZCIpLHRlKCkoKSx2dCgxMSxvbG4sNCwwLCJkaXYiLDEwKSx2dCgxMixSbG4sNCw0KSx0ZSgpKCksSigxMywiY2xyLW1vZGFsIiwxMSksaGkoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVu''@;'; put 'put ''Y3Rpb24odSl7cmV0dXJuIFllKGEpLGZpKG8uc2hvd1N1Ym1pdFJlYXNvbk1vZGFsLHUpfHwoby5zaG93U3VibWl0UmVhc29uTW9kYWw9dSksWGUodSl9KSxKKDE0LCJoMyIsMTIpLFNlKDE1KSx0ZSgpLEooMTYsImRpdiIsMTMpLHZ0KDE3LElsbiwyLDEsInAiLDE0KSxKKDE4LCJkaXYiLDE1''@;'; put 'put ''KSgxOSwibGFiZWwiLDE2KSxTZSgyMCwiTWVzc2FnZSIpLHRlKCksSigyMSwidGV4dGFyZWEiLDE3KSxoaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odSl7cmV0dXJuIFllKGEpLGZpKG8uc3VibWl0UmVhc29uTWVzc2FnZSx1KXx8KG8uc3VibWl0UmVhc29uTWVzc2FnZT11KSxYZSh1KX0p''@;'; put 'put ''LHRlKCkoKSxKKDIyLCJwIiwxOCksU2UoMjMsIiBUYWJsZXMgd2lsbCBiZSBzZW50IHNlcXVlbnRpYWxseSwgbG9ncyB3aWxsIGJlIGF2YWlsYWJsZSBhZnRlciBhbGwgdGFibGVzIGFyZSBzdWJtaXR0ZWQuICIpLHRlKCkoKSxKKDI0LCJkaXYiLDE5KSgyNSwiYnV0dG9uIiwyMCksd3QoImNs''@;'; put 'put ''aWNrIixmdW5jdGlvbigpe3JldHVybiBZZShhKSxYZShvLnNob3dTdWJtaXRSZWFzb25Nb2RhbD0hMSl9KSxTZSgyNiwiIENhbmNlbCAiKSx0ZSgpLEooMjcsImJ1dHRvbiIsMjEpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUoYSksWGUoby5zdWJtaXRUYWJsZXMoKSl9KSxTZSgy''@;'; put 'put ''OCwiIFN1Ym1pdCAiKSx0ZSgpKCkoKSxKKDI5LCJjbHItbW9kYWwiLDExKSxoaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih1KXtyZXR1cm4gWWUoYSksZmkoby5jc3ZTdWJtaXR0aW5nLHUpfHwoby5jc3ZTdWJtaXR0aW5nPXUpLFhlKHUpfSksSigzMCwiaDMiLDEyKSxTZSgzMSks''@;'; put 'put ''dGUoKSxKKDMyLCJkaXYiLDEzKSgzMywiZGl2IiwyMiksSXQoMzQsImNsci1zcGlubmVyIiwyMyksdGUoKSxKKDM1LCJwIiwyNCksU2UoMzYsIiBUaGlzIHdpbGwgdGFrZSBmZXcgbW9tZW50cyAiKSx0ZSgpKCkoKX0yJmkmJihpZSgpLF90KG8uZGF0YXNldHNMb2FkaW5nPzE6LTEpLGllKCks''@;'; put 'put ''X3Qoby5wYXJzZWREYXRhc2V0cy5sZW5ndGg/LTE6MiksaWUoKSxfdChvLnBhcnNlZERhdGFzZXRzLmxlbmd0aCYmIW8uc3VibWl0dGVkQ3N2RGF0YXNldHMubGVuZ3RoPzM6LTEpLGllKCksX3Qoby5zdWJtaXR0ZWRDc3ZEYXRhc2V0cy5sZW5ndGg/NDotMSksaWUoNyksX3QobnVsbCE9PW8u''@;'; put 'put ''c2VsZWN0ZWRGaWxlfHxvLnN1Ym1pdHRpbmdDc3Y/LTE6MTEpLGllKCksX3QobnVsbCE9PW8uc2VsZWN0ZWRGaWxlfHxvLnN1Ym1pdHRpbmdDc3Y/MTI6LTEpLGllKCksZGkoImNsck1vZGFsT3BlbiIsby5zaG93U3VibWl0UmVhc29uTW9kYWwpLHJ0KCJjbHJNb2RhbENsb3NhYmxlIiwhMSks''@;'; put 'put ''aWUoMiksTmgoIiBTdWJtaXQgIixvLnRhYmxlc1RvU3VibWl0Lmxlbmd0aCwiICIsMT09PW8udGFibGVzVG9TdWJtaXQubGVuZ3RoPyJ0YWJsZSI6InRhYmxlcyIsIiBmb3IgYXBwcm92YWwgIiksaWUoMiksX3Qoby5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQhPT1vLklu''@;'; put 'put ''ZmluaXR5PzE3Oi0xKSxpZSg0KSxkaSgibmdNb2RlbCIsby5zdWJtaXRSZWFzb25NZXNzYWdlKSxpZSg0KSxydCgiZGlzYWJsZWQiLG8uc3VibWl0TG9hZGluZyksaWUoMikscnQoImNsckxvYWRpbmciLG8uc3VibWl0TG9hZGluZyksaWUoMiksZGkoImNsck1vZGFsT3BlbiIsby5jc3ZTdWJt''@;'; put 'put ''aXR0aW5nKSxydCgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGllKDIpLE5oKCIgU3VibWl0dGluZyAiLG8uY3N2RmlsZXMubGVuZ3RoLCIgQ1NWICIsMT09PW8uY3N2RmlsZXMubGVuZ3RoPyJmaWxlIjoiZmlsZXMiLCIgIikpfSxkZXBlbmRlbmNpZXM6W0w3LFAyLGx1LEgyLG9jLGxvZSxYbCxQ''@;'; put 'put ''cCxPMyxkNyxjdSxKcyx4ZCxtaCwkMCxpbSxlbCxZeixVMixGZixyVyx3dixTdixDdix6MiwkNixLbmVdLGVuY2Fwc3VsYXRpb246Mn0pKX1yZXR1cm4gbigpLGV9KSgpfV19XTtsZXQgTGxuPSgoKT0+e3ZhciBuO2NsYXNzIGV7c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGkpe3JldHVybiBuZXcoaXx8ZSl9LHRoaXMuXHUwMjc1bW9kPUdpKHt0eXBlOmV9KSx0aGlzLlx1MDI3NWluaj1taSh7aW1wb3J0czpbV2QuZm9yQ2hpbGQoRGxuKSxXZF19KSl9cmV0dXJuIG4oKSxlfSkoKTtYRigpO2xldCBPbG49KCgpPT57dmFyIG47Y2xhc3MgZXtzdGF0aWMjZT1u''@;'; put 'put ''PSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKX0sdGhpcy5cdTAyNzVtb2Q9R2koe3R5cGU6ZX0pLHRoaXMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltMdyxMbG4saGQscTAsTEMscW8seVAsRW1dfSkpfXJldHVybiBuKCksZX0pKCk7Y29uc3QgTmxuPVt7''@;'; put 'put ''cGF0aDoiIixjb21wb25lbnQ6QWFuLGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86InRhYmxlcyJ9LHtwYXRoOiJ0YWJsZXMiLGNvbXBvbmVudDpmc259LHtwYXRoOiJleGNlbC1tYXBzIixsb2FkQ2hpbGRyZW46KCk9Pk5zbn0se3BhdGg6Im11bHRpLWxv''@;'; put 'put ''YWQiLGxvYWRDaGlsZHJlbjooKT0+T2xufV19XTtsZXQgRmxuPSgoKT0+e3ZhciBuO2NsYXNzIGV7c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSl9LHRoaXMuXHUwMjc1bW9kPUdpKHt0eXBlOmV9KSx0aGlzLlx1MDI3NWluaj1taSh7''@;'; put 'put ''aW1wb3J0czpbV2QuZm9yQ2hpbGQoTmxuKSxXZF19KSl9cmV0dXJuIG4oKSxlfSkoKSxQbG49KCgpPT57dmFyIG47Y2xhc3MgZXtzdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKX0sdGhpcy5cdTAyNzVtb2Q9R2koe3R5cGU6ZX0pLHRo''@;'; put 'put ''aXMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltGbG4saGQscTAsTEMscW8seVAsRW1dfSkpfXJldHVybiBuKCksZX0pKCksJG1lPSgoKT0+e3ZhciBuO2NsYXNzIGV7Y29uc3RydWN0b3IocixpKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPXIsdGhpcy5yb3V0ZXI9aX1jYW5BY3RpdmF0ZShyLGkpe3Jl''@;'; put 'put ''dHVybiEhKHZvaWQgMCE9PWk/LnJvb3QucXVlcnlQYXJhbXMuZm9yY2V8fGk/LnVybC5pbmNsdWRlcygibGljZW5zaW5nL3VwZGF0ZSIpJiZ0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkfHxudWxsIT09dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZSYm''@;'; put 'put ''ITE9PT10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlKXx8KHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21lIiksITEpfWNhbkRlYWN0aXZhdGUocixpLG8sYSl7cmV0dXJuIShvPy51cmwuaW5jbHVkZXMoImxpY2Vuc2luZy9yZWdpc3RlciIpfHx0aGlzLmxp''@;'; put 'put ''Y2VuY2VTZXJ2aWNlLmFwcExvY2tlZC52YWx1ZSl9c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSkob3IoRjIpLG9yKHZjKSl9LHRoaXMuXHUwMjc1cHJvdj1Kbih7dG9rZW46ZSxmYWN0b3J5OmUuXHUwMjc1ZmFjfSkpfXJldHVybiBu''@;'; put 'put ''KCksZX0pKCk7Y29uc3QgVVplPW49Pm4udHJpbSgpLnN0YXJ0c1dpdGgoIkRDS0VZMToiKSxWbG49ZnVuY3Rpb24oKXt2YXIgbj1DcihmdW5jdGlvbiooZSl7Y29uc3QgdD1lLmdldFJlYWRlcigpLHI9W107bGV0IGk9MDtmb3IoOzspe2NvbnN0e2RvbmU6bCx2YWx1ZTp1fT15aWVsZCB0LnJl''@;'; put 'put ''YWQoKTtpZihsKWJyZWFrO3IucHVzaCh1KSxpKz11Lmxlbmd0aH1jb25zdCBvPW5ldyBVaW50OEFycmF5KGkpO2xldCBhPTA7Zm9yKGNvbnN0IGwgb2YgcilvLnNldChsLGEpLGErPWwubGVuZ3RoO3JldHVybiBvLmJ1ZmZlcn0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbi5hcHBseSh0''@;'; put 'put ''aGlzLGFyZ3VtZW50cyl9fSgpLEJsbj1mdW5jdGlvbigpe3ZhciBuPUNyKGZ1bmN0aW9uKihlKXtjb25zdCB0PW5ldyBEZWNvbXByZXNzaW9uU3RyZWFtKCJnemlwIikscj10LndyaXRhYmxlLmdldFdyaXRlcigpO3JldHVybih5aWVsZCBQcm9taXNlLmFsbChbci53cml0ZShuZXcgVWludDhB''@;'; put 'put ''cnJheShlKSkudGhlbigoKT0+ci5jbG9zZSgpKSxWbG4odC5yZWFkYWJsZSldKSlbMV19KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxqbG49ZnVuY3Rpb24oKXt2YXIgbj1DcihmdW5jdGlvbiooZSl7Y29uc3QgdD1lLnRyaW0oKTtpZigh''@;'; put 'put ''VVplKHQpKXJldHVybiBudWxsO2NvbnN0IHI9aGllLkQodC5zbGljZSg3KSksaT15aWVsZCBCbG4ociksbz0obmV3IFRleHREZWNvZGVyKS5kZWNvZGUoaSksYT1vLmluZGV4T2YoIiAiKTtpZigtMT09PWEpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbWJpbmVkIGxpY2VuY2Uga2V5OiBt''@;'; put 'put ''aXNzaW5nIHNlcGFyYXRvciIpO3JldHVybntsaWNlbmNlS2V5Om8uc2xpY2UoMCxhKSxhY3RpdmF0aW9uS2V5Om8uc2xpY2UoYSsxKX19KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxVbG49W3trZXk6InZpZXdib3giLGxhYmVsOiJWaWV3''@;'; put 'put ''Ym94In0se2tleToiZmlsZVVwbG9hZCIsbGFiZWw6IkZpbGUgVXBsb2FkIn0se2tleToiZWRpdFJlY29yZCIsbGFiZWw6IkVkaXQgUmVjb3JkIn0se2tleToiYWRkUmVjb3JkIixsYWJlbDoiQWRkIFJlY29yZCJ9XTtsZXQgaXk9e2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0''@;'; put 'put ''ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxl''@;'; put 'put ''bnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHhodG1sOiExfTtmdW5jdGlvbiB6WmUobil7aXk9bn1jb25zdCBXWmU9L1smPD4iJ10vLFdsbj1uZXcgUmVnRXhwKFdaZS5zb3VyY2UsImciKSxZWmU9L1s8PiInXXwmKD8hKCNcZHsxLDd9fCNbWHhd''@;'; put 'put ''W2EtZkEtRjAtOV17MSw2fXxcdyspOykvLFlsbj1uZXcgUmVnRXhwKFlaZS5zb3VyY2UsImciKSxabG49eyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImIzM5OyJ9LFpaZT1uPT5abG5bbl07ZnVuY3Rpb24gaGYobixlKXtpZihlKXtpZihXWmUu''@;'; put 'put ''dGVzdChuKSlyZXR1cm4gbi5yZXBsYWNlKFdsbixaWmUpfWVsc2UgaWYoWVplLnRlc3QobikpcmV0dXJuIG4ucmVwbGFjZShZbG4sWlplKTtyZXR1cm4gbn1jb25zdCBHbG49LyYoIyg/OlxkKyl8KD86I3hbMC05QS1GYS1mXSspfCg/Olx3KykpOz8vZ2k7ZnVuY3Rpb24gR1plKG4pe3JldHVy''@;'; put 'put ''biBuLnJlcGxhY2UoR2xuLChlLHQpPT4iY29sb24iPT09KHQ9dC50b0xvd2VyQ2FzZSgpKT8iOiI6IiMiPT09dC5jaGFyQXQoMCk/IngiPT09dC5jaGFyQXQoMSk/U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh0LnN1YnN0cmluZygyKSwxNikpOlN0cmluZy5mcm9tQ2hhckNvZGUoK3Qu''@;'; put 'put ''c3Vic3RyaW5nKDEpKToiIil9Y29uc3QgJGxuPS8oXnxbXlxbXSlcXi9nO2Z1bmN0aW9uIHFjKG4sZSl7bj0ic3RyaW5nIj09dHlwZW9mIG4/bjpuLnNvdXJjZSxlPWV8fCIiO2NvbnN0IHQ9e3JlcGxhY2U6KHIsaSk9PihpPShpPWkuc291cmNlfHxpKS5yZXBsYWNlKCRsbiwiJDEiKSxuPW4u''@;'; put 'put ''cmVwbGFjZShyLGkpLHQpLGdldFJlZ2V4OigpPT5uZXcgUmVnRXhwKG4sZSl9O3JldHVybiB0fWNvbnN0IHFsbj0vW15cdzpdL2csS2xuPS9eJHxeW2Etel1bYS16MC05Ky4tXSo6fF5bPyNdL2k7ZnVuY3Rpb24gJFplKG4sZSx0KXtpZihuKXtsZXQgcjt0cnl7cj1kZWNvZGVVUklDb21wb25l''@;'; put 'put ''bnQoR1plKHQpKS5yZXBsYWNlKHFsbiwiIikudG9Mb3dlckNhc2UoKX1jYXRjaHtyZXR1cm4gbnVsbH1pZigwPT09ci5pbmRleE9mKCJqYXZhc2NyaXB0OiIpfHwwPT09ci5pbmRleE9mKCJ2YnNjcmlwdDoiKXx8MD09PXIuaW5kZXhPZigiZGF0YToiKSlyZXR1cm4gbnVsbH1lJiYhS2xuLnRl''@;'; put 'put ''c3QodCkmJih0PWZ1bmN0aW9uIGVjbihuLGUpe3BLWyIgIituXXx8KHBLWyIgIituXT1YbG4udGVzdChuKT9uKyIvIjptSyhuLCIvIiwhMCkpO2NvbnN0IHQ9LTE9PT0obj1wS1siICIrbl0pLmluZGV4T2YoIjoiKTtyZXR1cm4iLy8iPT09ZS5zdWJzdHJpbmcoMCwyKT90P2U6bi5yZXBsYWNl''@;'; put 'put ''KFFsbiwiJDEiKStlOiIvIj09PWUuY2hhckF0KDApP3Q/ZTpuLnJlcGxhY2UoSmxuLCIkMSIpK2U6bitlfShlLHQpKTt0cnl7dD1lbmNvZGVVUkkodCkucmVwbGFjZSgvJTI1L2csIiUiKX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gdH1jb25zdCBwSz17fSxYbG49L15bXjpdKzpcLypbXi9d''@;'; put 'put ''KiQvLFFsbj0vXihbXjpdKzopW1xzXFNdKiQvLEpsbj0vXihbXjpdKzpcLypbXi9dKilbXHNcU10qJC8sZ0s9e2V4ZWM6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBxWmUobixlKXtjb25zdCByPW4ucmVwbGFjZSgvXHwvZywobyxhLGwpPT57bGV0IHU9ITEsZz1hO2Zvcig7LS1nPj0wJiYiXFwi''@;'; put 'put ''PT09bFtnXTspdT0hdTtyZXR1cm4gdT8ifCI6IiB8In0pLnNwbGl0KC8gXHwvKTtsZXQgaT0wO2lmKHJbMF0udHJpbSgpfHxyLnNoaWZ0KCksci5sZW5ndGg+MCYmIXJbci5sZW5ndGgtMV0udHJpbSgpJiZyLnBvcCgpLHIubGVuZ3RoPmUpci5zcGxpY2UoZSk7ZWxzZSBmb3IoO3IubGVuZ3Ro''@;'; put 'put ''PGU7KXIucHVzaCgiIik7Zm9yKDtpPHIubGVuZ3RoO2krKylyW2ldPXJbaV0udHJpbSgpLnJlcGxhY2UoL1xcXHwvZywifCIpO3JldHVybiByfWZ1bmN0aW9uIG1LKG4sZSx0KXtjb25zdCByPW4ubGVuZ3RoO2lmKDA9PT1yKXJldHVybiIiO2xldCBpPTA7Zm9yKDtpPHI7KXtjb25zdCBvPW4u''@;'; put 'put ''Y2hhckF0KHItaS0xKTtpZihvIT09ZXx8dCl7aWYobz09PWV8fCF0KWJyZWFrO2krK31lbHNlIGkrK31yZXR1cm4gbi5zbGljZSgwLHItaSl9ZnVuY3Rpb24gS1plKG4sZSx0LHIpe2NvbnN0IGk9ZS5ocmVmLG89ZS50aXRsZT9oZihlLnRpdGxlKTpudWxsLGE9blsxXS5yZXBsYWNlKC9cXChb''@;'; put 'put ''XFtcXV0pL2csIiQxIik7aWYoIiEiIT09blswXS5jaGFyQXQoMCkpe3Iuc3RhdGUuaW5MaW5rPSEwO2NvbnN0IGw9e3R5cGU6ImxpbmsiLHJhdzp0LGhyZWY6aSx0aXRsZTpvLHRleHQ6YSx0b2tlbnM6ci5pbmxpbmVUb2tlbnMoYSl9O3JldHVybiByLnN0YXRlLmluTGluaz0hMSxsfXJldHVy''@;'; put 'put ''bnt0eXBlOiJpbWFnZSIscmF3OnQsaHJlZjppLHRpdGxlOm8sdGV4dDpoZihhKX19Y2xhc3Mgdkt7Y29uc3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWV8fGl5fXNwYWNlKGUpe2NvbnN0IHQ9dGhpcy5ydWxlcy5ibG9jay5uZXdsaW5lLmV4ZWMoZSk7aWYodCYmdFswXS5sZW5ndGg+MClyZXR1''@;'; put 'put ''cm57dHlwZToic3BhY2UiLHJhdzp0WzBdfX1jb2RlKGUpe2NvbnN0IHQ9dGhpcy5ydWxlcy5ibG9jay5jb2RlLmV4ZWMoZSk7aWYodCl7Y29uc3Qgcj10WzBdLnJlcGxhY2UoL14gezEsNH0vZ20sIiIpO3JldHVybnt0eXBlOiJjb2RlIixyYXc6dFswXSxjb2RlQmxvY2tTdHlsZToiaW5kZW50''@;'; put 'put ''ZWQiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP3I6bUsociwiXG4iKX19fWZlbmNlcyhlKXtjb25zdCB0PXRoaXMucnVsZXMuYmxvY2suZmVuY2VzLmV4ZWMoZSk7aWYodCl7Y29uc3Qgcj10WzBdLGk9ZnVuY3Rpb24gcmNuKG4sZSl7Y29uc3QgdD1uLm1hdGNoKC9eKFxzKykoPzpgYGAp''@;'; put 'put ''Lyk7aWYobnVsbD09PXQpcmV0dXJuIGU7Y29uc3Qgcj10WzFdO3JldHVybiBlLnNwbGl0KCJcbiIpLm1hcChpPT57Y29uc3Qgbz1pLm1hdGNoKC9eXHMrLyk7aWYobnVsbD09PW8pcmV0dXJuIGk7Y29uc3RbYV09bztyZXR1cm4gYS5sZW5ndGg+PXIubGVuZ3RoP2kuc2xpY2Uoci5sZW5ndGgp''@;'; put 'put ''Oml9KS5qb2luKCJcbiIpfShyLHRbM118fCIiKTtyZXR1cm57dHlwZToiY29kZSIscmF3OnIsbGFuZzp0WzJdP3RbMl0udHJpbSgpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6dFsyXSx0ZXh0Oml9fX1oZWFkaW5nKGUpe2NvbnN0IHQ9dGhpcy5ydWxlcy5ibG9j''@;'; put 'put ''ay5oZWFkaW5nLmV4ZWMoZSk7aWYodCl7bGV0IHI9dFsyXS50cmltKCk7aWYoLyMkLy50ZXN0KHIpKXtjb25zdCBpPW1LKHIsIiMiKTsodGhpcy5vcHRpb25zLnBlZGFudGljfHwhaXx8LyAkLy50ZXN0KGkpKSYmKHI9aS50cmltKCkpfXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6dFswXSxk''@;'; put 'put ''ZXB0aDp0WzFdLmxlbmd0aCx0ZXh0OnIsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHIpfX19aHIoZSl7Y29uc3QgdD10aGlzLnJ1bGVzLmJsb2NrLmhyLmV4ZWMoZSk7aWYodClyZXR1cm57dHlwZToiaHIiLHJhdzp0WzBdfX1ibG9ja3F1b3RlKGUpe2NvbnN0IHQ9dGhpcy5ydWxlcy5ibG9j''@;'; put 'put ''ay5ibG9ja3F1b3RlLmV4ZWMoZSk7aWYodCl7Y29uc3Qgcj10WzBdLnJlcGxhY2UoL14gKj5bIFx0XT8vZ20sIiIpLGk9dGhpcy5sZXhlci5zdGF0ZS50b3A7dGhpcy5sZXhlci5zdGF0ZS50b3A9ITA7Y29uc3Qgbz10aGlzLmxleGVyLmJsb2NrVG9rZW5zKHIpO3JldHVybiB0aGlzLmxleGVy''@;'; put 'put ''LnN0YXRlLnRvcD1pLHt0eXBlOiJibG9ja3F1b3RlIixyYXc6dFswXSx0b2tlbnM6byx0ZXh0OnJ9fX1saXN0KGUpe2xldCB0PXRoaXMucnVsZXMuYmxvY2subGlzdC5leGVjKGUpO2lmKHQpe2xldCByLGksbyxhLGwsdSxnLEUsTyxaLGVlLHZlLE1lPXRbMV0udHJpbSgpO2NvbnN0IEhlPU1l''@;'; put 'put ''Lmxlbmd0aD4xLFdlPXt0eXBlOiJsaXN0IixyYXc6IiIsb3JkZXJlZDpIZSxzdGFydDpIZT8rTWUuc2xpY2UoMCwtMSk6IiIsbG9vc2U6ITEsaXRlbXM6W119O01lPUhlP2BcXGR7MSw5fVxcJHtNZS5zbGljZSgtMSl9YDpgXFwke01lfWAsdGhpcy5vcHRpb25zLnBlZGFudGljJiYoTWU9SGU/''@;'; put 'put ''TWU6IlsqKy1dIik7Y29uc3QgYXQ9bmV3IFJlZ0V4cChgXiggezAsM30ke01lfSkoKD86W1x0IF1bXlxcbl0qKT8oPzpcXG58JCkpYCk7Zm9yKDtlJiYodmU9ITEsKHQ9YXQuZXhlYyhlKSkmJiF0aGlzLnJ1bGVzLmJsb2NrLmhyLnRlc3QoZSkpOyl7aWYocj10WzBdLGU9ZS5zdWJzdHJpbmco''@;'; put 'put ''ci5sZW5ndGgpLEU9dFsyXS5zcGxpdCgiXG4iLDEpWzBdLnJlcGxhY2UoL15cdCsvLEF0PT4iICIucmVwZWF0KDMqQXQubGVuZ3RoKSksTz1lLnNwbGl0KCJcbiIsMSlbMF0sdGhpcy5vcHRpb25zLnBlZGFudGljPyhhPTIsZWU9RS50cmltTGVmdCgpKTooYT10WzJdLnNlYXJjaCgvW14gXS8p''@;'; put 'put ''LGE9YT40PzE6YSxlZT1FLnNsaWNlKGEpLGErPXRbMV0ubGVuZ3RoKSx1PSExLCFFJiYvXiAqJC8udGVzdChPKSYmKHIrPU8rIlxuIixlPWUuc3Vic3RyaW5nKE8ubGVuZ3RoKzEpLHZlPSEwKSwhdmUpe2NvbnN0IEF0PW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLGEtMSl9fSg/Olsq''@;'; put 'put ''Ky1dfFxcZHsxLDl9Wy4pXSkoKD86WyBcdF1bXlxcbl0qKT8oPzpcXG58JCkpYCksS3Q9bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsYS0xKX19KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKWApLHF0PW5ldyBSZWdFeHAoYF4gezAsJHtNYXRo''@;'; put 'put ''Lm1pbigzLGEtMSl9fSg/OlxgXGBcYHx+fn4pYCksZ249bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsYS0xKX19I2ApO2Zvcig7ZSYmKFo9ZS5zcGxpdCgiXG4iLDEpWzBdLE89Wix0aGlzLm9wdGlvbnMucGVkYW50aWMmJihPPU8ucmVwbGFjZSgvXiB7MSw0fSg/PSggezR9KSpbXiBd''@;'; put 'put ''KS9nLCIgICIpKSwhKHF0LnRlc3QoTyl8fGduLnRlc3QoTyl8fEF0LnRlc3QoTyl8fEt0LnRlc3QoZSkpKTspe2lmKE8uc2VhcmNoKC9bXiBdLyk+PWF8fCFPLnRyaW0oKSllZSs9IlxuIitPLnNsaWNlKGEpO2Vsc2V7aWYodXx8RS5zZWFyY2goL1teIF0vKT49NHx8cXQudGVzdChFKXx8Z24u''@;'; put 'put ''dGVzdChFKXx8S3QudGVzdChFKSlicmVhaztlZSs9IlxuIitPfSF1JiYhTy50cmltKCkmJih1PSEwKSxyKz1aKyJcbiIsZT1lLnN1YnN0cmluZyhaLmxlbmd0aCsxKSxFPU8uc2xpY2UoYSl9fVdlLmxvb3NlfHwoZz9XZS5sb29zZT0hMDovXG4gKlxuICokLy50ZXN0KHIpJiYoZz0hMCkpLHRo''@;'; put 'put ''aXMub3B0aW9ucy5nZm0mJihpPS9eXFtbIHhYXVxdIC8uZXhlYyhlZSksaSYmKG89IlsgXSAiIT09aVswXSxlZT1lZS5yZXBsYWNlKC9eXFtbIHhYXVxdICsvLCIiKSkpLFdlLml0ZW1zLnB1c2goe3R5cGU6Imxpc3RfaXRlbSIscmF3OnIsdGFzazohIWksY2hlY2tlZDpvLGxvb3NlOiExLHRl''@;'; put 'put ''eHQ6ZWV9KSxXZS5yYXcrPXJ9V2UuaXRlbXNbV2UuaXRlbXMubGVuZ3RoLTFdLnJhdz1yLnRyaW1SaWdodCgpLFdlLml0ZW1zW1dlLml0ZW1zLmxlbmd0aC0xXS50ZXh0PWVlLnRyaW1SaWdodCgpLFdlLnJhdz1XZS5yYXcudHJpbVJpZ2h0KCk7Y29uc3QgQ3Q9V2UuaXRlbXMubGVuZ3RoO2Zv''@;'; put 'put ''cihsPTA7bDxDdDtsKyspaWYodGhpcy5sZXhlci5zdGF0ZS50b3A9ITEsV2UuaXRlbXNbbF0udG9rZW5zPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMoV2UuaXRlbXNbbF0udGV4dCxbXSksIVdlLmxvb3NlKXtjb25zdCBBdD1XZS5pdGVtc1tsXS50b2tlbnMuZmlsdGVyKHF0PT4ic3BhY2UiPT09''@;'; put 'put ''cXQudHlwZSksS3Q9QXQubGVuZ3RoPjAmJkF0LnNvbWUocXQ9Pi9cbi4qXG4vLnRlc3QocXQucmF3KSk7V2UubG9vc2U9S3R9aWYoV2UubG9vc2UpZm9yKGw9MDtsPEN0O2wrKylXZS5pdGVtc1tsXS5sb29zZT0hMDtyZXR1cm4gV2V9fWh0bWwoZSl7Y29uc3QgdD10aGlzLnJ1bGVzLmJsb2Nr''@;'; put 'put ''Lmh0bWwuZXhlYyhlKTtpZih0KXtjb25zdCByPXt0eXBlOiJodG1sIixibG9jazohMCxyYXc6dFswXSxwcmU6IXRoaXMub3B0aW9ucy5zYW5pdGl6ZXImJigicHJlIj09PXRbMV18fCJzY3JpcHQiPT09dFsxXXx8InN0eWxlIj09PXRbMV0pLHRleHQ6dFswXX07aWYodGhpcy5vcHRpb25zLnNh''@;'; put 'put ''bml0aXplKXtjb25zdCBpPXRoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhpcy5vcHRpb25zLnNhbml0aXplcih0WzBdKTpoZih0WzBdKTtyLnR5cGU9InBhcmFncmFwaCIsci50ZXh0PWksci50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoaSl9cmV0dXJuIHJ9fWRlZihlKXtjb25zdCB0PXRoaXMu''@;'; put 'put ''cnVsZXMuYmxvY2suZGVmLmV4ZWMoZSk7aWYodCl7Y29uc3Qgcj10WzFdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXHMrL2csIiAiKSxpPXRbMl0/dFsyXS5yZXBsYWNlKC9ePCguKik+JC8sIiQxIikucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKToiIixvPXRbM10/''@;'; put 'put ''dFszXS5zdWJzdHJpbmcoMSx0WzNdLmxlbmd0aC0xKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOnRbM107cmV0dXJue3R5cGU6ImRlZiIsdGFnOnIscmF3OnRbMF0saHJlZjppLHRpdGxlOm99fX10YWJsZShlKXtjb25zdCB0PXRoaXMucnVsZXMuYmxvY2sudGFi''@;'; put 'put ''bGUuZXhlYyhlKTtpZih0KXtjb25zdCByPXt0eXBlOiJ0YWJsZSIsaGVhZGVyOnFaZSh0WzFdKS5tYXAoaT0+KHt0ZXh0Oml9KSksYWxpZ246dFsyXS5yZXBsYWNlKC9eICp8XHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLHJvd3M6dFszXSYmdFszXS50cmltKCk/dFszXS5yZXBsYWNlKC9c''@;'; put 'put ''blsgXHRdKiQvLCIiKS5zcGxpdCgiXG4iKTpbXX07aWYoci5oZWFkZXIubGVuZ3RoPT09ci5hbGlnbi5sZW5ndGgpe3IucmF3PXRbMF07bGV0IG8sYSxsLHUsaT1yLmFsaWduLmxlbmd0aDtmb3Iobz0wO288aTtvKyspci5hbGlnbltvXT0vXiAqLSs6ICokLy50ZXN0KHIuYWxpZ25bb10pPyJy''@;'; put 'put ''aWdodCI6L14gKjotKzogKiQvLnRlc3Qoci5hbGlnbltvXSk/ImNlbnRlciI6L14gKjotKyAqJC8udGVzdChyLmFsaWduW29dKT8ibGVmdCI6bnVsbDtmb3IoaT1yLnJvd3MubGVuZ3RoLG89MDtvPGk7bysrKXIucm93c1tvXT1xWmUoci5yb3dzW29dLHIuaGVhZGVyLmxlbmd0aCkubWFwKGc9''@;'; put 'put ''Pih7dGV4dDpnfSkpO2ZvcihpPXIuaGVhZGVyLmxlbmd0aCxhPTA7YTxpO2ErKylyLmhlYWRlclthXS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoci5oZWFkZXJbYV0udGV4dCk7Zm9yKGk9ci5yb3dzLmxlbmd0aCxhPTA7YTxpO2ErKylmb3IodT1yLnJvd3NbYV0sbD0wO2w8dS5sZW5ndGg7''@;'; put 'put ''bCsrKXVbbF0udG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKHVbbF0udGV4dCk7cmV0dXJuIHJ9fX1saGVhZGluZyhlKXtjb25zdCB0PXRoaXMucnVsZXMuYmxvY2subGhlYWRpbmcuZXhlYyhlKTtpZih0KXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6dFswXSxkZXB0aDoiPSI9PT10WzJdLmNo''@;'; put 'put ''YXJBdCgwKT8xOjIsdGV4dDp0WzFdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZSh0WzFdKX19cGFyYWdyYXBoKGUpe2NvbnN0IHQ9dGhpcy5ydWxlcy5ibG9jay5wYXJhZ3JhcGguZXhlYyhlKTtpZih0KXtjb25zdCByPSJcbiI9PT10WzFdLmNoYXJBdCh0WzFdLmxlbmd0aC0xKT90WzFdLnNs''@;'; put 'put ''aWNlKDAsLTEpOnRbMV07cmV0dXJue3R5cGU6InBhcmFncmFwaCIscmF3OnRbMF0sdGV4dDpyLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShyKX19fXRleHQoZSl7Y29uc3QgdD10aGlzLnJ1bGVzLmJsb2NrLnRleHQuZXhlYyhlKTtpZih0KXJldHVybnt0eXBlOiJ0ZXh0IixyYXc6dFswXSx0''@;'; put 'put ''ZXh0OnRbMF0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHRbMF0pfX1lc2NhcGUoZSl7Y29uc3QgdD10aGlzLnJ1bGVzLmlubGluZS5lc2NhcGUuZXhlYyhlKTtpZih0KXJldHVybnt0eXBlOiJlc2NhcGUiLHJhdzp0WzBdLHRleHQ6aGYodFsxXSl9fXRhZyhlKXtjb25zdCB0PXRoaXMucnVs''@;'; put 'put ''ZXMuaW5saW5lLnRhZy5leGVjKGUpO2lmKHQpcmV0dXJuIXRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxhIC9pLnRlc3QodFswXSk/dGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITA6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePFwvYT4vaS50ZXN0KHRbMF0pJiYodGhpcy5sZXhlci5z''@;'; put 'put ''dGF0ZS5pbkxpbms9ITEpLCF0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QodFswXSk/dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148XC8ocHJlfGNvZGV8''@;'; put 'put ''a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KHRbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSExKSx7dHlwZTp0aGlzLm9wdGlvbnMuc2FuaXRpemU/InRleHQiOiJodG1sIixyYXc6dFswXSxpbkxpbms6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmssaW5SYXdCbG9jazp0aGlzLmxl''@;'; put 'put ''eGVyLnN0YXRlLmluUmF3QmxvY2ssYmxvY2s6ITEsdGV4dDp0aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKHRbMF0pOmhmKHRbMF0pOnRbMF19fWxpbmsoZSl7Y29uc3QgdD10aGlzLnJ1bGVzLmlubGluZS5saW5rLmV4''@;'; put 'put ''ZWMoZSk7aWYodCl7Y29uc3Qgcj10WzJdLnRyaW0oKTtpZighdGhpcy5vcHRpb25zLnBlZGFudGljJiYvXjwvLnRlc3Qocikpe2lmKCEvPiQvLnRlc3QocikpcmV0dXJuO2NvbnN0IGE9bUsoci5zbGljZSgwLC0xKSwiXFwiKTtpZigoci5sZW5ndGgtYS5sZW5ndGgpJTI9PTApcmV0dXJufWVs''@;'; put 'put ''c2V7Y29uc3QgYT1mdW5jdGlvbiB0Y24obixlKXtpZigtMT09PW4uaW5kZXhPZihlWzFdKSlyZXR1cm4tMTtjb25zdCB0PW4ubGVuZ3RoO2xldCByPTAsaT0wO2Zvcig7aTx0O2krKylpZigiXFwiPT09bltpXSlpKys7ZWxzZSBpZihuW2ldPT09ZVswXSlyKys7ZWxzZSBpZihuW2ldPT09ZVsx''@;'; put 'put ''XSYmKHItLSxyPDApKXJldHVybiBpO3JldHVybi0xfSh0WzJdLCIoKSIpO2lmKGE+LTEpe2NvbnN0IHU9KDA9PT10WzBdLmluZGV4T2YoIiEiKT81OjQpK3RbMV0ubGVuZ3RoK2E7dFsyXT10WzJdLnN1YnN0cmluZygwLGEpLHRbMF09dFswXS5zdWJzdHJpbmcoMCx1KS50cmltKCksdFszXT0i''@;'; put 'put ''In19bGV0IGk9dFsyXSxvPSIiO2lmKHRoaXMub3B0aW9ucy5wZWRhbnRpYyl7Y29uc3QgYT0vXihbXiciXSpbXlxzXSlccysoWyciXSkoLiopXDIvLmV4ZWMoaSk7YSYmKGk9YVsxXSxvPWFbM10pfWVsc2Ugbz10WzNdP3RbM10uc2xpY2UoMSwtMSk6IiI7cmV0dXJuIGk9aS50cmltKCksL148''@;'; put 'put ''Ly50ZXN0KGkpJiYoaT10aGlzLm9wdGlvbnMucGVkYW50aWMmJiEvPiQvLnRlc3Qocik/aS5zbGljZSgxKTppLnNsaWNlKDEsLTEpKSxLWmUodCx7aHJlZjppJiZpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIiksdGl0bGU6byYmby5yZXBsYWNlKHRoaXMucnVsZXMu''@;'; put 'put ''aW5saW5lLl9lc2NhcGVzLCIkMSIpfSx0WzBdLHRoaXMubGV4ZXIpfX1yZWZsaW5rKGUsdCl7bGV0IHI7aWYoKHI9dGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5leGVjKGUpKXx8KHI9dGhpcy5ydWxlcy5pbmxpbmUubm9saW5rLmV4ZWMoZSkpKXtsZXQgaT0oclsyXXx8clsxXSkucmVwbGFj''@;'; put 'put ''ZSgvXHMrL2csIiAiKTtpZihpPXRbaS50b0xvd2VyQ2FzZSgpXSwhaSl7Y29uc3Qgbz1yWzBdLmNoYXJBdCgwKTtyZXR1cm57dHlwZToidGV4dCIscmF3Om8sdGV4dDpvfX1yZXR1cm4gS1plKHIsaSxyWzBdLHRoaXMubGV4ZXIpfX1lbVN0cm9uZyhlLHQscj0iIil7bGV0IGk9dGhpcy5ydWxl''@;'; put 'put ''cy5pbmxpbmUuZW1TdHJvbmcubERlbGltLmV4ZWMoZSk7aWYoISghaXx8aVszXSYmci5tYXRjaCgvW1xwe0x9XHB7Tn1dL3UpKSYmKCFpWzFdJiYhaVsyXXx8IXJ8fHRoaXMucnVsZXMuaW5saW5lLnB1bmN0dWF0aW9uLmV4ZWMocikpKXtjb25zdCBhPWlbMF0ubGVuZ3RoLTE7bGV0IGwsdSxn''@;'; put 'put ''PWEsRT0wO2NvbnN0IE89IioiPT09aVswXVswXT90aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5yRGVsaW1Bc3Q6dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGltVW5kO2ZvcihPLmxhc3RJbmRleD0wLHQ9dC5zbGljZSgtMSplLmxlbmd0aCthKTtudWxsIT0oaT1PLmV4ZWModCkp''@;'; put 'put ''Oyl7aWYobD1pWzFdfHxpWzJdfHxpWzNdfHxpWzRdfHxpWzVdfHxpWzZdLCFsKWNvbnRpbnVlO2lmKHU9bC5sZW5ndGgsaVszXXx8aVs0XSl7Zys9dTtjb250aW51ZX1pZigoaVs1XXx8aVs2XSkmJmElMyYmISgoYSt1KSUzKSl7RSs9dTtjb250aW51ZX1pZihnLT11LGc+MCljb250aW51ZTt1''@;'; put 'put ''PU1hdGgubWluKHUsdStnK0UpO2NvbnN0IFo9ZS5zbGljZSgwLGEraS5pbmRleCt1KzEpO2lmKE1hdGgubWluKGEsdSklMil7Y29uc3QgdmU9Wi5zbGljZSgxLC0xKTtyZXR1cm57dHlwZToiZW0iLHJhdzpaLHRleHQ6dmUsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKHZlKX19Y29u''@;'; put 'put ''c3QgZWU9Wi5zbGljZSgyLC0yKTtyZXR1cm57dHlwZToic3Ryb25nIixyYXc6Wix0ZXh0OmVlLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhlZSl9fX19Y29kZXNwYW4oZSl7Y29uc3QgdD10aGlzLnJ1bGVzLmlubGluZS5jb2RlLmV4ZWMoZSk7aWYodCl7bGV0IHI9dFsyXS5yZXBs''@;'; put 'put ''YWNlKC9cbi9nLCIgIik7Y29uc3QgaT0vW14gXS8udGVzdChyKSxvPS9eIC8udGVzdChyKSYmLyAkLy50ZXN0KHIpO3JldHVybiBpJiZvJiYocj1yLnN1YnN0cmluZygxLHIubGVuZ3RoLTEpKSxyPWhmKHIsITApLHt0eXBlOiJjb2Rlc3BhbiIscmF3OnRbMF0sdGV4dDpyfX19YnIoZSl7Y29u''@;'; put 'put ''c3QgdD10aGlzLnJ1bGVzLmlubGluZS5ici5leGVjKGUpO2lmKHQpcmV0dXJue3R5cGU6ImJyIixyYXc6dFswXX19ZGVsKGUpe2NvbnN0IHQ9dGhpcy5ydWxlcy5pbmxpbmUuZGVsLmV4ZWMoZSk7aWYodClyZXR1cm57dHlwZToiZGVsIixyYXc6dFswXSx0ZXh0OnRbMl0sdG9rZW5zOnRoaXMu''@;'; put 'put ''bGV4ZXIuaW5saW5lVG9rZW5zKHRbMl0pfX1hdXRvbGluayhlLHQpe2NvbnN0IHI9dGhpcy5ydWxlcy5pbmxpbmUuYXV0b2xpbmsuZXhlYyhlKTtpZihyKXtsZXQgaSxvO3JldHVybiJAIj09PXJbMl0/KGk9aGYodGhpcy5vcHRpb25zLm1hbmdsZT90KHJbMV0pOnJbMV0pLG89Im1haWx0bzoi''@;'; put 'put ''K2kpOihpPWhmKHJbMV0pLG89aSkse3R5cGU6ImxpbmsiLHJhdzpyWzBdLHRleHQ6aSxocmVmOm8sdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OmksdGV4dDppfV19fX11cmwoZSx0KXtsZXQgcjtpZihyPXRoaXMucnVsZXMuaW5saW5lLnVybC5leGVjKGUpKXtsZXQgaSxvO2lmKCJAIj09PXJb''@;'; put 'put ''Ml0paT1oZih0aGlzLm9wdGlvbnMubWFuZ2xlP3QoclswXSk6clswXSksbz0ibWFpbHRvOiIraTtlbHNle2xldCBhO2Rve2E9clswXSxyWzBdPXRoaXMucnVsZXMuaW5saW5lLl9iYWNrcGVkYWwuZXhlYyhyWzBdKVswXX13aGlsZShhIT09clswXSk7aT1oZihyWzBdKSxvPSJ3d3cuIj09PXJb''@;'; put 'put ''MV0/Imh0dHA6Ly8iK3JbMF06clswXX1yZXR1cm57dHlwZToibGluayIscmF3OnJbMF0sdGV4dDppLGhyZWY6byx0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6aSx0ZXh0Oml9XX19fWlubGluZVRleHQoZSx0KXtjb25zdCByPXRoaXMucnVsZXMuaW5saW5lLnRleHQuZXhlYyhlKTtpZihyKXts''@;'; put 'put ''ZXQgaTtyZXR1cm4gaT10aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s/dGhpcy5vcHRpb25zLnNhbml0aXplP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhpcy5vcHRpb25zLnNhbml0aXplcihyWzBdKTpoZihyWzBdKTpyWzBdOmhmKHRoaXMub3B0aW9ucy5zbWFydHlwYW50cz90KHJbMF0p''@;'; put 'put ''OnJbMF0pLHt0eXBlOiJ0ZXh0IixyYXc6clswXSx0ZXh0Oml9fX19Y29uc3QgS2E9e25ld2xpbmU6L14oPzogKig/OlxufCQpKSsvLGNvZGU6L14oIHs0fVteXG5dKyg/OlxuKD86ICooPzpcbnwkKSkqKT8pKy8sZmVuY2VzOi9eIHswLDN9KGB7Myx9KD89W15gXG5dKig/OlxufCQpKXx+ezMs''@;'; put 'put ''fSkoW15cbl0qKSg/OlxufCQpKD86fChbXHNcU10qPykoPzpcbnwkKSkoPzogezAsM31cMVt+YF0qICooPz1cbnwkKXwkKS8saHI6L14gezAsM30oKD86LVtcdCBdKil7Myx9fCg/Ol9bIFx0XSopezMsfXwoPzpcKlsgXHRdKil7Myx9KSg/OlxuK3wkKS8saGVhZGluZzovXiB7MCwzfSgjezEs''@;'; put 'put ''Nn0pKD89XHN8JCkoLiopKD86XG4rfCQpLyxibG9ja3F1b3RlOi9eKCB7MCwzfT4gPyhwYXJhZ3JhcGh8W15cbl0qKSg/OlxufCQpKSsvLGxpc3Q6L14oIHswLDN9YnVsbCkoWyBcdF1bXlxuXSs/KT8oPzpcbnwkKS8saHRtbDoiXiB7MCwzfSg/Ojwoc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJl''@;'; put 'put ''YSlbXFxzPl1bXFxzXFxTXSo/KD86PC9cXDE+W15cXG5dKlxcbit8JCl8Y29tbWVudFteXFxuXSooXFxuK3wkKXw8XFw/W1xcc1xcU10qPyg/OlxcPz5cXG4qfCQpfDwhW0EtWl1bXFxzXFxTXSo/KD86Plxcbip8JCl8PCFcXFtDREFUQVxcW1tcXHNcXFNdKj8oPzpcXF1cXF0+XFxuKnwkKXw8''@;'; put 'put ''Lz8odGFnKSg/OiArfFxcbnwvPz4pW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCl8PCg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpKFthLXpdW1xcdy1dKikoPzphdHRyaWJ1dGUpKj8gKi8/Pig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCl8''@;'; put 'put ''PC8oPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVthLXpdW1xcdy1dKlxccyo+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKSkiLGRlZjovXiB7MCwzfVxbKGxhYmVsKVxdOiAqKD86XG4gKik/KFtePFxzXVteXHNdKnw8Lio/PikoPzooPzogKyg/''@;'; put 'put ''OlxuICopP3wgKlxuICopKHRpdGxlKSk/ICooPzpcbit8JCkvLHRhYmxlOmdLLGxoZWFkaW5nOi9eKCg/Oig/IV5idWxsICkufFxuKD8hXG58YnVsbCApKSs/KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLyxfcGFyYWdyYXBoOi9eKFteXG5dKyg/OlxuKD8haHJ8aGVhZGluZ3xsaGVhZGlu''@;'; put 'put ''Z3xibG9ja3F1b3RlfGZlbmNlc3xsaXN0fGh0bWx8dGFibGV8ICtcbilbXlxuXSspKikvLHRleHQ6L15bXlxuXSsvLF9sYWJlbDovKD8hXHMqXF0pKD86XFwufFteXFtcXVxcXSkrLyxfdGl0bGU6Lyg/OiIoPzpcXCI/fFteIlxcXSkqInwnW14nXG5dKig/OlxuW14nXG5dKykqXG4/J3xcKFte''@;'; put 'put ''KCldKlwpKS99O0thLmRlZj1xYyhLYS5kZWYpLnJlcGxhY2UoImxhYmVsIixLYS5fbGFiZWwpLnJlcGxhY2UoInRpdGxlIixLYS5fdGl0bGUpLmdldFJlZ2V4KCksS2EuYnVsbGV0PS8oPzpbKistXXxcZHsxLDl9Wy4pXSkvLEthLmxpc3RJdGVtU3RhcnQ9cWMoL14oICopKGJ1bGwpICovKS5y''@;'; put 'put ''ZXBsYWNlKCJidWxsIixLYS5idWxsZXQpLmdldFJlZ2V4KCksS2EubGlzdD1xYyhLYS5saXN0KS5yZXBsYWNlKC9idWxsL2csS2EuYnVsbGV0KS5yZXBsYWNlKCJociIsIlxcbisoPz1cXDE/KD86KD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICopezMsfSkoPzpcXG4rfCQpKSIpLnJl''@;'; put 'put ''cGxhY2UoImRlZiIsIlxcbisoPz0iK0thLmRlZi5zb3VyY2UrIikiKS5nZXRSZWdleCgpLEthLl90YWc9ImFkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRp''@;'; put 'put ''dnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoWzEtNl18aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG1ldGF8bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlv''@;'; put 'put ''bnxwfHBhcmFtfHNlY3Rpb258c291cmNlfHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWwiLEthLl9jb21tZW50PS88IS0tKD8hLT8+KVtcc1xTXSo/KD86LS0+fCQpLyxLYS5odG1sPXFjKEthLmh0bWwsImkiKS5yZXBsYWNlKCJjb21tZW50''@;'; put 'put ''IixLYS5fY29tbWVudCkucmVwbGFjZSgidGFnIixLYS5fdGFnKS5yZXBsYWNlKCJhdHRyaWJ1dGUiLC8gK1thLXpBLVo6X11bXHcuOi1dKig/OiAqPSAqIlteIlxuXSoifCAqPSAqJ1teJ1xuXSonfCAqPSAqW15ccyInPTw+YF0rKT8vKS5nZXRSZWdleCgpLEthLmxoZWFkaW5nPXFjKEthLmxo''@;'; put 'put ''ZWFkaW5nKS5yZXBsYWNlKC9idWxsL2csS2EuYnVsbGV0KS5nZXRSZWdleCgpLEthLnBhcmFncmFwaD1xYyhLYS5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsS2EuaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgi''@;'; put 'put ''fHRhYmxlIiwiIikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1s''@;'; put 'put ''IiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLEthLl90YWcpLmdldFJlZ2V4KCksS2EuYmxvY2txdW90ZT1xYyhLYS5ibG9ja3F1b3RlKS5yZXBsYWNlKCJwYXJhZ3JhcGgiLEthLnBhcmFncmFwaCku''@;'; put 'put ''Z2V0UmVnZXgoKSxLYS5ub3JtYWw9ey4uLkthfSxLYS5nZm09ey4uLkthLm5vcm1hbCx0YWJsZToiXiAqKFteXFxuIF0uKlxcfC4qKVxcbiB7MCwzfSg/OlxcfCAqKT8oOj8tKzo/ICooPzpcXHwgKjo/LSs6PyAqKSopKD86XFx8ICopPyg/OlxcbigoPzooPyEgKlxcbnxocnxoZWFkaW5nfGJs''@;'; put 'put ''b2NrcXVvdGV8Y29kZXxmZW5jZXN8bGlzdHxodG1sKS4qKD86XFxufCQpKSopXFxuKnwkKSJ9LEthLmdmbS50YWJsZT1xYyhLYS5nZm0udGFibGUpLnJlcGxhY2UoImhyIixLYS5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHsw''@;'; put 'put ''LDN9PiIpLnJlcGxhY2UoImNvZGUiLCIgezR9W15cXG5dIikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/''@;'; put 'put ''OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixLYS5fdGFnKS5nZXRSZWdleCgpLEthLmdmbS5wYXJhZ3JhcGg9cWMoS2EuX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLEthLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwi''@;'; put 'put ''IHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJlcGxhY2UoInRhYmxlIixLYS5nZm0udGFibGUpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxc''@;'; put 'put ''biIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixLYS5fdGFnKS5nZXRSZWdleCgpLEthLnBlZGFu''@;'; put 'put ''dGljPXsuLi5LYS5ub3JtYWwsaHRtbDpxYygiXiAqKD86Y29tbWVudCAqKD86XFxufFxccyokKXw8KHRhZylbXFxzXFxTXSs/PC9cXDE+ICooPzpcXG57Mix9fFxccyokKXw8dGFnKD86XCJbXlwiXSpcInwnW14nXSonfFxcc1teJ1wiLz5cXHNdKikqPy8/PiAqKD86XFxuezIsfXxcXHMqJCkp''@;'; put 'put ''IikucmVwbGFjZSgiY29tbWVudCIsS2EuX2NvbW1lbnQpLnJlcGxhY2UoL3RhZy9nLCIoPyEoPzphfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3VifHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkb3xzcGFufGJy''@;'; put 'put ''fHdicnxpbnN8ZGVsfGltZylcXGIpXFx3Kyg/ITp8W15cXHdcXHNAXSpAKVxcYiIpLmdldFJlZ2V4KCksZGVmOi9eICpcWyhbXlxdXSspXF06ICo8PyhbXlxzPl0rKT4/KD86ICsoWyIoXVteXG5dK1siKV0pKT8gKig/OlxuK3wkKS8saGVhZGluZzovXigjezEsNn0pKC4qKSg/OlxuK3wkKS8s''@;'; put 'put ''ZmVuY2VzOmdLLGxoZWFkaW5nOi9eKC4rPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wkKS8scGFyYWdyYXBoOnFjKEthLm5vcm1hbC5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsS2EuaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgKiN7MSw2fSAqW15cbl0iKS5yZXBsYWNlKCJsaGVhZGluZyIs''@;'; put 'put ''S2EubGhlYWRpbmcpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgifGZlbmNlcyIsIiIpLnJlcGxhY2UoInxsaXN0IiwiIikucmVwbGFjZSgifGh0bWwiLCIiKS5nZXRSZWdleCgpfTtjb25zdCAkbz17ZXNjYXBlOi9eXFwoWyEiIyQlJicoKSorLFwtLi86Ozw9Pj9A''@;'; put 'put ''XFtcXVxcXl9ge3x9fl0pLyxhdXRvbGluazovXjwoc2NoZW1lOlteXHNceDAwLVx4MWY8Pl0qfGVtYWlsKT4vLHVybDpnSyx0YWc6Il5jb21tZW50fF48L1thLXpBLVpdW1xcdzotXSpcXHMqPnxePFthLXpBLVpdW1xcdy1dKig/OmF0dHJpYnV0ZSkqP1xccyovPz58XjxcXD9bXFxzXFxTXSo/''@;'; put 'put ''XFw/PnxePCFbYS16QS1aXStcXHNbXFxzXFxTXSo/PnxePCFcXFtDREFUQVxcW1tcXHNcXFNdKj9cXF1cXF0+IixsaW5rOi9eIT9cWyhsYWJlbClcXVwoXHMqKGhyZWYpKD86XHMrKHRpdGxlKSk/XHMqXCkvLHJlZmxpbms6L14hP1xbKGxhYmVsKVxdXFsocmVmKVxdLyxub2xpbms6L14hP1xb''@;'; put 'put ''KHJlZilcXSg/OlxbXF0pPy8scmVmbGlua1NlYXJjaDoicmVmbGlua3xub2xpbmsoPyFcXCgpIixlbVN0cm9uZzp7bERlbGltOi9eKD86XCorKD86KCg/IVwqKVtwdW5jdF0pfFteXHMqXSkpfF5fKyg/OigoPyFfKVtwdW5jdF0pfChbXlxzX10pKS8sckRlbGltQXN0Oi9eW15fKl0qP19fW15f''@;'; put 'put ''Kl0qP1wqW15fKl0qPyg/PV9fKXxbXipdKyg/PVteKl0pfCg/IVwqKVtwdW5jdF0oXCorKSg/PVtcc118JCl8W15wdW5jdFxzXShcKispKD8hXCopKD89W3B1bmN0XHNdfCQpfCg/IVwqKVtwdW5jdFxzXShcKispKD89W15wdW5jdFxzXSl8W1xzXShcKispKD8hXCopKD89W3B1bmN0XSl8KD8h''@;'; put 'put ''XCopW3B1bmN0XShcKispKD8hXCopKD89W3B1bmN0XSl8W15wdW5jdFxzXShcKispKD89W15wdW5jdFxzXSkvLHJEZWxpbVVuZDovXlteXypdKj9cKlwqW15fKl0qP19bXl8qXSo/KD89XCpcKil8W15fXSsoPz1bXl9dKXwoPyFfKVtwdW5jdF0oXyspKD89W1xzXXwkKXxbXnB1bmN0XHNdKF8r''@;'; put 'put ''KSg/IV8pKD89W3B1bmN0XHNdfCQpfCg/IV8pW3B1bmN0XHNdKF8rKSg/PVtecHVuY3Rcc10pfFtcc10oXyspKD8hXykoPz1bcHVuY3RdKXwoPyFfKVtwdW5jdF0oXyspKD8hXykoPz1bcHVuY3RdKS99LGNvZGU6L14oYCspKFteYF18W15gXVtcc1xTXSo/W15gXSlcMSg/IWApLyxicjovXigg''@;'; put 'put ''ezIsfXxcXClcbig/IVxzKiQpLyxkZWw6Z0ssdGV4dDovXihgK3xbXmBdKSg/Oig/PSB7Mix9XG4pfFtcc1xTXSo/KD86KD89W1xcPCFcW2AqX118XGJffCQpfFteIF0oPz0gezIsfVxuKSkpLyxwdW5jdHVhdGlvbjovXigoPyFbKl9dKVtcc3B1bmN0dWF0aW9uXSkvfTtmdW5jdGlvbiBpY24o''@;'; put 'put ''bil7cmV0dXJuIG4ucmVwbGFjZSgvLS0tL2csIlx1MjAxNCIpLnJlcGxhY2UoLy0tL2csIlx1MjAxMyIpLnJlcGxhY2UoLyhefFstXHUyMDE0LyhcW3siXHNdKScvZywiJDFcdTIwMTgiKS5yZXBsYWNlKC8nL2csIlx1MjAxOSIpLnJlcGxhY2UoLyhefFstXHUyMDE0LyhcW3tcdTIwMThcc10p''@;'; put 'put ''Ii9nLCIkMVx1MjAxYyIpLnJlcGxhY2UoLyIvZywiXHUyMDFkIikucmVwbGFjZSgvXC57M30vZywiXHUyMDI2Iil9ZnVuY3Rpb24gWFplKG4pe2xldCB0LHIsZT0iIjtjb25zdCBpPW4ubGVuZ3RoO2Zvcih0PTA7dDxpO3QrKylyPW4uY2hhckNvZGVBdCh0KSxNYXRoLnJhbmRvbSgpPi41JiYo''@;'; put 'put ''cj0ieCIrci50b1N0cmluZygxNikpLGUrPSImIyIrcisiOyI7cmV0dXJuIGV9JG8uX3B1bmN0dWF0aW9uPSJcXHB7UH0kKzw9PmBefH4iLCRvLnB1bmN0dWF0aW9uPXFjKCRvLnB1bmN0dWF0aW9uLCJ1IikucmVwbGFjZSgvcHVuY3R1YXRpb24vZywkby5fcHVuY3R1YXRpb24pLmdldFJlZ2V4''@;'; put 'put ''KCksJG8uYmxvY2tTa2lwPS9cW1teW1xdXSo/XF1cKFteXChcKV0qP1wpfGBbXmBdKj9gfDxbXjw+XSo/Pi9nLCRvLmFueVB1bmN0dWF0aW9uPS9cXFtwdW5jdF0vZywkby5fZXNjYXBlcz0vXFwoW3B1bmN0XSkvZywkby5fY29tbWVudD1xYyhLYS5fY29tbWVudCkucmVwbGFjZSgiKD86LS1c''@;'; put 'put ''eDNlfCQpIiwiLS1ceDNlIikuZ2V0UmVnZXgoKSwkby5lbVN0cm9uZy5sRGVsaW09cWMoJG8uZW1TdHJvbmcubERlbGltLCJ1IikucmVwbGFjZSgvcHVuY3QvZywkby5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksJG8uZW1TdHJvbmcuckRlbGltQXN0PXFjKCRvLmVtU3Ryb25nLnJEZWxpbUFz''@;'; put 'put ''dCwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLCRvLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSwkby5lbVN0cm9uZy5yRGVsaW1VbmQ9cWMoJG8uZW1TdHJvbmcuckRlbGltVW5kLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csJG8uX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLCRvLmFueVB1bmN0dWF0''@;'; put 'put ''aW9uPXFjKCRvLmFueVB1bmN0dWF0aW9uLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csJG8uX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLCRvLl9lc2NhcGVzPXFjKCRvLl9lc2NhcGVzLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csJG8uX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLCRvLl9zY2hlbWU9''@;'; put 'put ''L1thLXpBLVpdW2EtekEtWjAtOSsuLV17MSwzMX0vLCRvLl9lbWFpbD0vW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXSsoQClbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEt''@;'; put 'put ''WjAtOV0pPykrKD8hWy1fXSkvLCRvLmF1dG9saW5rPXFjKCRvLmF1dG9saW5rKS5yZXBsYWNlKCJzY2hlbWUiLCRvLl9zY2hlbWUpLnJlcGxhY2UoImVtYWlsIiwkby5fZW1haWwpLmdldFJlZ2V4KCksJG8uX2F0dHJpYnV0ZT0vXHMrW2EtekEtWjpfXVtcdy46LV0qKD86XHMqPVxzKiJbXiJd''@;'; put 'put ''KiJ8XHMqPVxzKidbXiddKid8XHMqPVxzKlteXHMiJz08PmBdKyk/Lywkby50YWc9cWMoJG8udGFnKS5yZXBsYWNlKCJjb21tZW50Iiwkby5fY29tbWVudCkucmVwbGFjZSgiYXR0cmlidXRlIiwkby5fYXR0cmlidXRlKS5nZXRSZWdleCgpLCRvLl9sYWJlbD0vKD86XFsoPzpcXC58W15cW1xd''@;'; put 'put ''XFxdKSpcXXxcXC58YFteYF0qYHxbXlxbXF1cXGBdKSo/Lywkby5faHJlZj0vPCg/OlxcLnxbXlxuPD5cXF0pKz58W15cc1x4MDAtXHgxZl0qLywkby5fdGl0bGU9LyIoPzpcXCI/fFteIlxcXSkqInwnKD86XFwnP3xbXidcXF0pKid8XCgoPzpcXFwpP3xbXilcXF0pKlwpLywkby5saW5rPXFj''@;'; put 'put ''KCRvLmxpbmspLnJlcGxhY2UoImxhYmVsIiwkby5fbGFiZWwpLnJlcGxhY2UoImhyZWYiLCRvLl9ocmVmKS5yZXBsYWNlKCJ0aXRsZSIsJG8uX3RpdGxlKS5nZXRSZWdleCgpLCRvLnJlZmxpbms9cWMoJG8ucmVmbGluaykucmVwbGFjZSgibGFiZWwiLCRvLl9sYWJlbCkucmVwbGFjZSgicmVm''@;'; put 'put ''IixLYS5fbGFiZWwpLmdldFJlZ2V4KCksJG8ubm9saW5rPXFjKCRvLm5vbGluaykucmVwbGFjZSgicmVmIixLYS5fbGFiZWwpLmdldFJlZ2V4KCksJG8ucmVmbGlua1NlYXJjaD1xYygkby5yZWZsaW5rU2VhcmNoLCJnIikucmVwbGFjZSgicmVmbGluayIsJG8ucmVmbGluaykucmVwbGFjZSgi''@;'; put 'put ''bm9saW5rIiwkby5ub2xpbmspLmdldFJlZ2V4KCksJG8ubm9ybWFsPXsuLi4kb30sJG8ucGVkYW50aWM9ey4uLiRvLm5vcm1hbCxzdHJvbmc6e3N0YXJ0Oi9eX198XCpcKi8sbWlkZGxlOi9eX18oPz1cUykoW1xzXFNdKj9cUylfXyg/IV8pfF5cKlwqKD89XFMpKFtcc1xTXSo/XFMpXCpcKig/''@;'; put 'put ''IVwqKS8sZW5kQXN0Oi9cKlwqKD8hXCopL2csZW5kVW5kOi9fXyg/IV8pL2d9LGVtOntzdGFydDovXl98XCovLG1pZGRsZTovXigpXCooPz1cUykoW1xzXFNdKj9cUylcKig/IVwqKXxeXyg/PVxTKShbXHNcU10qP1xTKV8oPyFfKS8sZW5kQXN0Oi9cKig/IVwqKS9nLGVuZFVuZDovXyg/IV8p''@;'; put 'put ''L2d9LGxpbms6cWMoL14hP1xbKGxhYmVsKVxdXCgoLio/KVwpLykucmVwbGFjZSgibGFiZWwiLCRvLl9sYWJlbCkuZ2V0UmVnZXgoKSxyZWZsaW5rOnFjKC9eIT9cWyhsYWJlbClcXVxzKlxbKFteXF1dKilcXS8pLnJlcGxhY2UoImxhYmVsIiwkby5fbGFiZWwpLmdldFJlZ2V4KCl9LCRvLmdm''@;'; put 'put ''bT17Li4uJG8ubm9ybWFsLGVzY2FwZTpxYygkby5lc2NhcGUpLnJlcGxhY2UoIl0pIiwifnxdKSIpLmdldFJlZ2V4KCksX2V4dGVuZGVkX2VtYWlsOi9bQS1aYS16MC05Ll8rLV0rKEApW2EtekEtWjAtOS1fXSsoPzpcLlthLXpBLVowLTktX10qW2EtekEtWjAtOV0pKyg/IVstX10pLyx1cmw6''@;'; put 'put ''L14oKD86ZnRwfGh0dHBzPyk6XC9cL3x3d3dcLikoPzpbYS16QS1aMC05XC1dK1wuPykrW15cczxdKnxeZW1haWwvLF9iYWNrcGVkYWw6Lyg/OltePyEuLDo7Kl8nIn4oKSZdK3xcKFteKV0qXCl8Jig/IVthLXpBLVowLTldKzskKXxbPyEuLDo7Kl8nIn4pXSsoPyEkKSkrLyxkZWw6L14ofn4/''@;'; put 'put ''KSg/PVteXHN+XSkoW1xzXFNdKj9bXlxzfl0pXDEoPz1bXn5dfCQpLyx0ZXh0Oi9eKFtgfl0rfFteYH5dKSg/Oig/PSB7Mix9XG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApfFtcc1xTXSo/KD86KD89W1xcPCFcW2Aqfl9dfFxiX3xodHRwcz86XC9cL3xmdHA6XC9c''@;'; put 'put ''L3x3d3dcLnwkKXxbXiBdKD89IHsyLH1cbil8W15hLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dKD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCkpKS99LCRvLmdmbS51cmw9cWMoJG8uZ2ZtLnVybCwiaSIpLnJlcGxhY2UoImVtYWlsIiwkby5nZm0uX2V4dGVuZGVk''@;'; put 'put ''X2VtYWlsKS5nZXRSZWdleCgpLCRvLmJyZWFrcz17Li4uJG8uZ2ZtLGJyOnFjKCRvLmJyKS5yZXBsYWNlKCJ7Mix9IiwiKiIpLmdldFJlZ2V4KCksdGV4dDpxYygkby5nZm0udGV4dCkucmVwbGFjZSgiXFxiXyIsIlxcYl98IHsyLH1cXG4iKS5yZXBsYWNlKC9cezIsXH0vZywiKiIpLmdldFJl''@;'; put 'put ''Z2V4KCl9O2NsYXNzIHE2e2NvbnN0cnVjdG9yKGUpe3RoaXMudG9rZW5zPVtdLHRoaXMudG9rZW5zLmxpbmtzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5vcHRpb25zPWV8fGl5LHRoaXMub3B0aW9ucy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcnx8bmV3IHZLLHRoaXMudG9r''@;'; put 'put ''ZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXIsdGhpcy50b2tlbml6ZXIub3B0aW9ucz10aGlzLm9wdGlvbnMsdGhpcy50b2tlbml6ZXIubGV4ZXI9dGhpcyx0aGlzLmlubGluZVF1ZXVlPVtdLHRoaXMuc3RhdGU9e2luTGluazohMSxpblJhd0Jsb2NrOiExLHRvcDohMH07Y29uc3QgdD17''@;'; put 'put ''YmxvY2s6S2Eubm9ybWFsLGlubGluZTokby5ub3JtYWx9O3RoaXMub3B0aW9ucy5wZWRhbnRpYz8odC5ibG9jaz1LYS5wZWRhbnRpYyx0LmlubGluZT0kby5wZWRhbnRpYyk6dGhpcy5vcHRpb25zLmdmbSYmKHQuYmxvY2s9S2EuZ2ZtLHQuaW5saW5lPXRoaXMub3B0aW9ucy5icmVha3M/JG8u''@;'; put 'put ''YnJlYWtzOiRvLmdmbSksdGhpcy50b2tlbml6ZXIucnVsZXM9dH1zdGF0aWMgZ2V0IHJ1bGVzKCl7cmV0dXJue2Jsb2NrOkthLGlubGluZTokb319c3RhdGljIGxleChlLHQpe3JldHVybiBuZXcgcTYodCkubGV4KGUpfXN0YXRpYyBsZXhJbmxpbmUoZSx0KXtyZXR1cm4gbmV3IHE2KHQpLmlu''@;'; put 'put ''bGluZVRva2VucyhlKX1sZXgoZSl7bGV0IHQ7Zm9yKGU9ZS5yZXBsYWNlKC9cclxufFxyL2csIlxuIiksdGhpcy5ibG9ja1Rva2VucyhlLHRoaXMudG9rZW5zKTt0PXRoaXMuaW5saW5lUXVldWUuc2hpZnQoKTspdGhpcy5pbmxpbmVUb2tlbnModC5zcmMsdC50b2tlbnMpO3JldHVybiB0aGlz''@;'; put 'put ''LnRva2Vuc31ibG9ja1Rva2VucyhlLHQ9W10pe2xldCByLGksbyxhO2ZvcihlPXRoaXMub3B0aW9ucy5wZWRhbnRpYz9lLnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9eICskL2dtLCIiKTplLnJlcGxhY2UoL14oICopKFx0KykvZ20sKGwsdSxnKT0+dSsiICAgICIucmVwZWF0KGcu''@;'; put 'put ''bGVuZ3RoKSk7ZTspaWYoISh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2smJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmJsb2NrLnNvbWUobD0+ISEocj1sLmNhbGwoe2xleGVyOnRoaXN9LGUsdCkpJiYoZT1lLnN1YnN0cmluZyhyLnJhdy5s''@;'; put 'put ''ZW5ndGgpLHQucHVzaChyKSwhMCkpKSl7aWYocj10aGlzLnRva2VuaXplci5zcGFjZShlKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLDE9PT1yLnJhdy5sZW5ndGgmJnQubGVuZ3RoPjA/dFt0Lmxlbmd0aC0xXS5yYXcrPSJcbiI6dC5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50''@;'; put 'put ''b2tlbml6ZXIuY29kZShlKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLGk9dFt0Lmxlbmd0aC0xXSwhaXx8InBhcmFncmFwaCIhPT1pLnR5cGUmJiJ0ZXh0IiE9PWkudHlwZT90LnB1c2gocik6KGkucmF3Kz0iXG4iK3IucmF3LGkudGV4dCs9IlxuIityLnRleHQsdGhpcy5pbmxpbmVR''@;'; put 'put ''dWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aS50ZXh0KTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmZlbmNlcyhlKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLHQucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmhlYWRpbmcoZSkpe2U9''@;'; put 'put ''ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSx0LnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5ocihlKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLHQucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmJsb2NrcXVvdGUoZSkpe2U9ZS5zdWJzdHJp''@;'; put 'put ''bmcoci5yYXcubGVuZ3RoKSx0LnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5saXN0KGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksdC5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuaHRtbChlKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5n''@;'; put 'put ''dGgpLHQucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmRlZihlKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLGk9dFt0Lmxlbmd0aC0xXSwhaXx8InBhcmFncmFwaCIhPT1pLnR5cGUmJiJ0ZXh0IiE9PWkudHlwZT90aGlzLnRva2Vucy5saW5rc1tyLnRhZ118fCh0''@;'; put 'put ''aGlzLnRva2Vucy5saW5rc1tyLnRhZ109e2hyZWY6ci5ocmVmLHRpdGxlOnIudGl0bGV9KTooaS5yYXcrPSJcbiIrci5yYXcsaS50ZXh0Kz0iXG4iK3IucmF3LHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWkudGV4dCk7Y29udGludWV9aWYocj10aGlz''@;'; put 'put ''LnRva2VuaXplci50YWJsZShlKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLHQucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmxoZWFkaW5nKGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksdC5wdXNoKHIpO2NvbnRpbnVlfWlmKG89ZSx0aGlzLm9wdGlv''@;'; put 'put ''bnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jayl7bGV0IGw9MS8wO2NvbnN0IHU9ZS5zbGljZSgxKTtsZXQgZzt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrLmZvckVhY2goZnVuY3Rpb24oRSl7Zz1FLmNhbGwoe2xleGVyOnRoaXN9LHUp''@;'; put 'put ''LCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCYmKGw9TWF0aC5taW4obCxnKSl9KSxsPDEvMCYmbD49MCYmKG89ZS5zdWJzdHJpbmcoMCxsKzEpKX1pZih0aGlzLnN0YXRlLnRvcCYmKHI9dGhpcy50b2tlbml6ZXIucGFyYWdyYXBoKG8pKSl7aT10W3QubGVuZ3RoLTFdLGEmJiJwYXJhZ3JhcGgi''@;'; put 'put ''PT09aS50eXBlPyhpLnJhdys9IlxuIityLnJhdyxpLnRleHQrPSJcbiIrci50ZXh0LHRoaXMuaW5saW5lUXVldWUucG9wKCksdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aS50ZXh0KTp0LnB1c2gociksYT1vLmxlbmd0aCE9PWUubGVuZ3RoLGU9ZS5z''@;'; put 'put ''dWJzdHJpbmcoci5yYXcubGVuZ3RoKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLnRleHQoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxpPXRbdC5sZW5ndGgtMV0saSYmInRleHQiPT09aS50eXBlPyhpLnJhdys9IlxuIityLnJhdyxpLnRleHQrPSJcbiIrci50ZXh0LHRo''@;'; put 'put ''aXMuaW5saW5lUXVldWUucG9wKCksdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aS50ZXh0KTp0LnB1c2gocik7Y29udGludWV9aWYoZSl7Y29uc3QgbD0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2UuY2hhckNvZGVBdCgwKTtpZih0aGlzLm9wdGlv''@;'; put 'put ''bnMuc2lsZW50KXtjb25zb2xlLmVycm9yKGwpO2JyZWFrfXRocm93IG5ldyBFcnJvcihsKX19cmV0dXJuIHRoaXMuc3RhdGUudG9wPSEwLHR9aW5saW5lKGUsdD1bXSl7cmV0dXJuIHRoaXMuaW5saW5lUXVldWUucHVzaCh7c3JjOmUsdG9rZW5zOnR9KSx0fWlubGluZVRva2VucyhlLHQ9W10p''@;'; put 'put ''e2xldCByLGksbyxsLHUsZyxhPWU7aWYodGhpcy50b2tlbnMubGlua3Mpe2NvbnN0IEU9T2JqZWN0LmtleXModGhpcy50b2tlbnMubGlua3MpO2lmKEUubGVuZ3RoPjApZm9yKDtudWxsIT0obD10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5leGVjKGEpKTspRS5p''@;'; put 'put ''bmNsdWRlcyhsWzBdLnNsaWNlKGxbMF0ubGFzdEluZGV4T2YoIlsiKSsxLC0xKSkmJihhPWEuc2xpY2UoMCxsLmluZGV4KSsiWyIrImEiLnJlcGVhdChsWzBdLmxlbmd0aC0yKSsiXSIrYS5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5sYXN0SW5kZXgp''@;'; put 'put ''KX1mb3IoO251bGwhPShsPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAuZXhlYyhhKSk7KWE9YS5zbGljZSgwLGwuaW5kZXgpKyJbIisiYSIucmVwZWF0KGxbMF0ubGVuZ3RoLTIpKyJdIithLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAu''@;'; put 'put ''bGFzdEluZGV4KTtmb3IoO251bGwhPShsPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5leGVjKGEpKTspYT1hLnNsaWNlKDAsbC5pbmRleCkrIisrIithLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5sYXN0SW5kZXgp''@;'; put 'put ''O2Zvcig7ZTspaWYodXx8KGc9IiIpLHU9ITEsISh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5pbmxpbmUuc29tZShFPT4hIShyPUUuY2FsbCh7bGV4ZXI6dGhpc30sZSx0KSkmJihlPWUuc3Vi''@;'; put 'put ''c3RyaW5nKHIucmF3Lmxlbmd0aCksdC5wdXNoKHIpLCEwKSkpKXtpZihyPXRoaXMudG9rZW5pemVyLmVzY2FwZShlKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLHQucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLnRhZyhlKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5s''@;'; put 'put ''ZW5ndGgpLGk9dFt0Lmxlbmd0aC0xXSxpJiYidGV4dCI9PT1yLnR5cGUmJiJ0ZXh0Ij09PWkudHlwZT8oaS5yYXcrPXIucmF3LGkudGV4dCs9ci50ZXh0KTp0LnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5saW5rKGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCks''@;'; put 'put ''dC5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIucmVmbGluayhlLHRoaXMudG9rZW5zLmxpbmtzKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLGk9dFt0Lmxlbmd0aC0xXSxpJiYidGV4dCI9PT1yLnR5cGUmJiJ0ZXh0Ij09PWkudHlwZT8oaS5yYXcrPXIucmF3LGku''@;'; put 'put ''dGV4dCs9ci50ZXh0KTp0LnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5lbVN0cm9uZyhlLGEsZykpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSx0LnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5jb2Rlc3BhbihlKSl7ZT1lLnN1YnN0cmluZyhy''@;'; put 'put ''LnJhdy5sZW5ndGgpLHQucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmJyKGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksdC5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuZGVsKGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksdC5w''@;'; put 'put ''dXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuYXV0b2xpbmsoZSxYWmUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksdC5wdXNoKHIpO2NvbnRpbnVlfWlmKCF0aGlzLnN0YXRlLmluTGluayYmKHI9dGhpcy50b2tlbml6ZXIudXJsKGUsWFplKSkpe2U9ZS5zdWJzdHJp''@;'; put 'put ''bmcoci5yYXcubGVuZ3RoKSx0LnB1c2gocik7Y29udGludWV9aWYobz1lLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZSl7bGV0IEU9MS8wO2NvbnN0IE89ZS5zbGljZSgxKTtsZXQgWjt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5z''@;'; put 'put ''dGFydElubGluZS5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtaPWVlLmNhbGwoe2xleGVyOnRoaXN9LE8pLCJudW1iZXIiPT10eXBlb2YgWiYmWj49MCYmKEU9TWF0aC5taW4oRSxaKSl9KSxFPDEvMCYmRT49MCYmKG89ZS5zdWJzdHJpbmcoMCxFKzEpKX1pZihyPXRoaXMudG9rZW5pemVyLmlubGlu''@;'; put 'put ''ZVRleHQobyxpY24pKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksIl8iIT09ci5yYXcuc2xpY2UoLTEpJiYoZz1yLnJhdy5zbGljZSgtMSkpLHU9ITAsaT10W3QubGVuZ3RoLTFdLGkmJiJ0ZXh0Ij09PWkudHlwZT8oaS5yYXcrPXIucmF3LGkudGV4dCs9ci50ZXh0KTp0LnB1c2gocik7''@;'; put 'put ''Y29udGludWV9aWYoZSl7Y29uc3QgRT0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2UuY2hhckNvZGVBdCgwKTtpZih0aGlzLm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKEUpO2JyZWFrfXRocm93IG5ldyBFcnJvcihFKX19cmV0dXJuIHR9fWNsYXNzIF9Le2NvbnN0cnVjdG9yKGUp''@;'; put 'put ''e3RoaXMub3B0aW9ucz1lfHxpeX1jb2RlKGUsdCxyKXtjb25zdCBpPSh0fHwiIikubWF0Y2goL1xTKi8pWzBdO2lmKHRoaXMub3B0aW9ucy5oaWdobGlnaHQpe2NvbnN0IG89dGhpcy5vcHRpb25zLmhpZ2hsaWdodChlLGkpO251bGwhPW8mJm8hPT1lJiYocj0hMCxlPW8pfXJldHVybiBlPWUu''@;'; put 'put ''cmVwbGFjZSgvXG4kLywiIikrIlxuIixpPyc8cHJlPjxjb2RlIGNsYXNzPSInK3RoaXMub3B0aW9ucy5sYW5nUHJlZml4K2hmKGkpKyciPicrKHI/ZTpoZihlLCEwKSkrIjwvY29kZT48L3ByZT5cbiI6IjxwcmU+PGNvZGU+Iisocj9lOmhmKGUsITApKSsiPC9jb2RlPjwvcHJlPlxuIn1ibG9j''@;'; put 'put ''a3F1b3RlKGUpe3JldHVybmA8YmxvY2txdW90ZT5cbiR7ZX08L2Jsb2NrcXVvdGU+XG5gfWh0bWwoZSx0KXtyZXR1cm4gZX1oZWFkaW5nKGUsdCxyLGkpe3JldHVybiB0aGlzLm9wdGlvbnMuaGVhZGVySWRzP2A8aCR7dH0gaWQ9IiR7dGhpcy5vcHRpb25zLmhlYWRlclByZWZpeCtpLnNsdWco''@;'; put 'put ''cil9Ij4ke2V9PC9oJHt0fT5cbmA6YDxoJHt0fT4ke2V9PC9oJHt0fT5cbmB9aHIoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnhodG1sPyI8aHIvPlxuIjoiPGhyPlxuIn1saXN0KGUsdCxyKXtjb25zdCBpPXQ/Im9sIjoidWwiO3JldHVybiI8IitpKyh0JiYxIT09cj8nIHN0YXJ0PSInK3IrJyIn''@;'; put 'put ''OiIiKSsiPlxuIitlKyI8LyIraSsiPlxuIn1saXN0aXRlbShlKXtyZXR1cm5gPGxpPiR7ZX08L2xpPlxuYH1jaGVja2JveChlKXtyZXR1cm4iPGlucHV0ICIrKGU/J2NoZWNrZWQ9IiIgJzoiIikrJ2Rpc2FibGVkPSIiIHR5cGU9ImNoZWNrYm94IicrKHRoaXMub3B0aW9ucy54aHRtbD8iIC8i''@;'; put 'put ''OiIiKSsiPiAifXBhcmFncmFwaChlKXtyZXR1cm5gPHA+JHtlfTwvcD5cbmB9dGFibGUoZSx0KXtyZXR1cm4gdCYmKHQ9YDx0Ym9keT4ke3R9PC90Ym9keT5gKSwiPHRhYmxlPlxuPHRoZWFkPlxuIitlKyI8L3RoZWFkPlxuIit0KyI8L3RhYmxlPlxuIn10YWJsZXJvdyhlKXtyZXR1cm5gPHRy''@;'; put 'put ''PlxuJHtlfTwvdHI+XG5gfXRhYmxlY2VsbChlLHQpe2NvbnN0IHI9dC5oZWFkZXI/InRoIjoidGQiO3JldHVybih0LmFsaWduP2A8JHtyfSBhbGlnbj0iJHt0LmFsaWdufSI+YDpgPCR7cn0+YCkrZStgPC8ke3J9PlxuYH1zdHJvbmcoZSl7cmV0dXJuYDxzdHJvbmc+JHtlfTwvc3Ryb25nPmB9''@;'; put 'put ''ZW0oZSl7cmV0dXJuYDxlbT4ke2V9PC9lbT5gfWNvZGVzcGFuKGUpe3JldHVybmA8Y29kZT4ke2V9PC9jb2RlPmB9YnIoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnhodG1sPyI8YnIvPiI6Ijxicj4ifWRlbChlKXtyZXR1cm5gPGRlbD4ke2V9PC9kZWw+YH1saW5rKGUsdCxyKXtpZihudWxsPT09''@;'; put 'put ''KGU9JFplKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCxlKSkpcmV0dXJuIHI7bGV0IGk9JzxhIGhyZWY9IicrZSsnIic7cmV0dXJuIHQmJihpKz0nIHRpdGxlPSInK3QrJyInKSxpKz0iPiIrcisiPC9hPiIsaX1pbWFnZShlLHQscil7aWYobnVsbD09PShlPSRa''@;'; put 'put ''ZSh0aGlzLm9wdGlvbnMuc2FuaXRpemUsdGhpcy5vcHRpb25zLmJhc2VVcmwsZSkpKXJldHVybiByO2xldCBpPWA8aW1nIHNyYz0iJHtlfSIgYWx0PSIke3J9ImA7cmV0dXJuIHQmJihpKz1gIHRpdGxlPSIke3R9ImApLGkrPXRoaXMub3B0aW9ucy54aHRtbD8iLz4iOiI+IixpfXRleHQoZSl7''@;'; put 'put ''cmV0dXJuIGV9fWNsYXNzIEttZXtzdHJvbmcoZSl7cmV0dXJuIGV9ZW0oZSl7cmV0dXJuIGV9Y29kZXNwYW4oZSl7cmV0dXJuIGV9ZGVsKGUpe3JldHVybiBlfWh0bWwoZSl7cmV0dXJuIGV9dGV4dChlKXtyZXR1cm4gZX1saW5rKGUsdCxyKXtyZXR1cm4iIityfWltYWdlKGUsdCxyKXtyZXR1''@;'; put 'put ''cm4iIityfWJyKCl7cmV0dXJuIiJ9fWNsYXNzIFhtZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc2Vlbj17fX1zZXJpYWxpemUoZSl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKS50cmltKCkucmVwbGFjZSgvPFshXC9hLXpdLio/Pi9naSwiIikucmVwbGFjZSgvW1x1MjAwMC1cdTIwNkZcdTJFMDAtXHUy''@;'; put 'put ''RTdGXFwnISIjJCUmKCkqKywuLzo7PD0+P0BbXF1eYHt8fX5dL2csIiIpLnJlcGxhY2UoL1xzL2csIi0iKX1nZXROZXh0U2FmZVNsdWcoZSx0KXtsZXQgcj1lLGk9MDtpZih0aGlzLnNlZW4uaGFzT3duUHJvcGVydHkocikpe2k9dGhpcy5zZWVuW2VdO2Rve2krKyxyPWUrIi0iK2l9d2hpbGUo''@;'; put 'put ''dGhpcy5zZWVuLmhhc093blByb3BlcnR5KHIpKX1yZXR1cm4gdHx8KHRoaXMuc2VlbltlXT1pLHRoaXMuc2VlbltyXT0wKSxyfXNsdWcoZSx0PXt9KXtjb25zdCByPXRoaXMuc2VyaWFsaXplKGUpO3JldHVybiB0aGlzLmdldE5leHRTYWZlU2x1ZyhyLHQuZHJ5cnVuKX19Y2xhc3MgSzZ7Y29u''@;'; put 'put ''c3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWV8fGl5LHRoaXMub3B0aW9ucy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBfSyx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudGV4dFJl''@;'; put 'put ''bmRlcmVyPW5ldyBLbWUsdGhpcy5zbHVnZ2VyPW5ldyBYbWV9c3RhdGljIHBhcnNlKGUsdCl7cmV0dXJuIG5ldyBLNih0KS5wYXJzZShlKX1zdGF0aWMgcGFyc2VJbmxpbmUoZSx0KXtyZXR1cm4gbmV3IEs2KHQpLnBhcnNlSW5saW5lKGUpfXBhcnNlKGUsdD0hMCl7bGV0IGksbyxhLGwsdSxn''@;'; put 'put ''LEUsTyxaLGVlLHZlLE1lLEhlLFdlLGF0LEN0LEF0LEt0LHF0LHI9IiI7Y29uc3QgZ249ZS5sZW5ndGg7Zm9yKGk9MDtpPGduO2krKylpZihlZT1lW2ldLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRl''@;'; put 'put ''bnNpb25zLnJlbmRlcmVyc1tlZS50eXBlXSYmKHF0PXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tlZS50eXBlXS5jYWxsKHtwYXJzZXI6dGhpc30sZWUpLCExIT09cXR8fCFbInNwYWNlIiwiaHIiLCJoZWFkaW5nIiwiY29kZSIsInRhYmxlIiwiYmxvY2txdW90ZSIsImxpc3Qi''@;'; put 'put ''LCJodG1sIiwicGFyYWdyYXBoIiwidGV4dCJdLmluY2x1ZGVzKGVlLnR5cGUpKSlyKz1xdHx8IiI7ZWxzZSBzd2l0Y2goZWUudHlwZSl7Y2FzZSJzcGFjZSI6Y29udGludWU7Y2FzZSJociI6cis9dGhpcy5yZW5kZXJlci5ocigpO2NvbnRpbnVlO2Nhc2UiaGVhZGluZyI6cis9dGhpcy5yZW5k''@;'; put 'put ''ZXJlci5oZWFkaW5nKHRoaXMucGFyc2VJbmxpbmUoZWUudG9rZW5zKSxlZS5kZXB0aCxHWmUodGhpcy5wYXJzZUlubGluZShlZS50b2tlbnMsdGhpcy50ZXh0UmVuZGVyZXIpKSx0aGlzLnNsdWdnZXIpO2NvbnRpbnVlO2Nhc2UiY29kZSI6cis9dGhpcy5yZW5kZXJlci5jb2RlKGVlLnRleHQs''@;'; put 'put ''ZWUubGFuZyxlZS5lc2NhcGVkKTtjb250aW51ZTtjYXNlInRhYmxlIjpmb3IoTz0iIixFPSIiLGw9ZWUuaGVhZGVyLmxlbmd0aCxvPTA7bzxsO28rKylFKz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0aGlzLnBhcnNlSW5saW5lKGVlLmhlYWRlcltvXS50b2tlbnMpLHtoZWFkZXI6ITAsYWxp''@;'; put 'put ''Z246ZWUuYWxpZ25bb119KTtmb3IoTys9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhFKSxaPSIiLGw9ZWUucm93cy5sZW5ndGgsbz0wO288bDtvKyspe2ZvcihnPWVlLnJvd3Nbb10sRT0iIix1PWcubGVuZ3RoLGE9MDthPHU7YSsrKUUrPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMucGFy''@;'; put 'put ''c2VJbmxpbmUoZ1thXS50b2tlbnMpLHtoZWFkZXI6ITEsYWxpZ246ZWUuYWxpZ25bYV19KTtaKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KEUpfXIrPXRoaXMucmVuZGVyZXIudGFibGUoTyxaKTtjb250aW51ZTtjYXNlImJsb2NrcXVvdGUiOlo9dGhpcy5wYXJzZShlZS50b2tlbnMpLHIrPXRo''@;'; put 'put ''aXMucmVuZGVyZXIuYmxvY2txdW90ZShaKTtjb250aW51ZTtjYXNlImxpc3QiOmZvcih2ZT1lZS5vcmRlcmVkLE1lPWVlLnN0YXJ0LEhlPWVlLmxvb3NlLGw9ZWUuaXRlbXMubGVuZ3RoLFo9IiIsbz0wO288bDtvKyspYXQ9ZWUuaXRlbXNbb10sQ3Q9YXQuY2hlY2tlZCxBdD1hdC50YXNrLFdl''@;'; put 'put ''PSIiLGF0LnRhc2smJihLdD10aGlzLnJlbmRlcmVyLmNoZWNrYm94KEN0KSxIZT9hdC50b2tlbnMubGVuZ3RoPjAmJiJwYXJhZ3JhcGgiPT09YXQudG9rZW5zWzBdLnR5cGU/KGF0LnRva2Vuc1swXS50ZXh0PUt0KyIgIithdC50b2tlbnNbMF0udGV4dCxhdC50b2tlbnNbMF0udG9rZW5zJiZh''@;'; put 'put ''dC50b2tlbnNbMF0udG9rZW5zLmxlbmd0aD4wJiYidGV4dCI9PT1hdC50b2tlbnNbMF0udG9rZW5zWzBdLnR5cGUmJihhdC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQ9S3QrIiAiK2F0LnRva2Vuc1swXS50b2tlbnNbMF0udGV4dCkpOmF0LnRva2Vucy51bnNoaWZ0KHt0eXBlOiJ0ZXh0Iix0''@;'; put 'put ''ZXh0Okt0fSk6V2UrPUt0KSxXZSs9dGhpcy5wYXJzZShhdC50b2tlbnMsSGUpLForPXRoaXMucmVuZGVyZXIubGlzdGl0ZW0oV2UsQXQsQ3QpO3IrPXRoaXMucmVuZGVyZXIubGlzdChaLHZlLE1lKTtjb250aW51ZTtjYXNlImh0bWwiOnIrPXRoaXMucmVuZGVyZXIuaHRtbChlZS50ZXh0LGVl''@;'; put 'put ''LmJsb2NrKTtjb250aW51ZTtjYXNlInBhcmFncmFwaCI6cis9dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZUlubGluZShlZS50b2tlbnMpKTtjb250aW51ZTtjYXNlInRleHQiOmZvcihaPWVlLnRva2Vucz90aGlzLnBhcnNlSW5saW5lKGVlLnRva2Vucyk6ZWUudGV4dDtpKzE8''@;'; put 'put ''Z24mJiJ0ZXh0Ij09PWVbaSsxXS50eXBlOyllZT1lWysraV0sWis9IlxuIisoZWUudG9rZW5zP3RoaXMucGFyc2VJbmxpbmUoZWUudG9rZW5zKTplZS50ZXh0KTtyKz10P3RoaXMucmVuZGVyZXIucGFyYWdyYXBoKFopOlo7Y29udGludWU7ZGVmYXVsdDp7Y29uc3QgVG49J1Rva2VuIHdpdGgg''@;'; put 'put ''IicrZWUudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoVG4pO3Rocm93IG5ldyBFcnJvcihUbil9fXJldHVybiByfXBhcnNlSW5saW5lKGUsdCl7dD10fHx0aGlzLnJlbmRlcmVyO2xldCBpLG8sYSxy''@;'; put 'put ''PSIiO2NvbnN0IGw9ZS5sZW5ndGg7Zm9yKGk9MDtpPGw7aSsrKWlmKG89ZVtpXSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbby50eXBlXSYmKGE9dGhpcy5vcHRpb25z''@;'; put 'put ''LmV4dGVuc2lvbnMucmVuZGVyZXJzW28udHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LG8pLCExIT09YXx8IVsiZXNjYXBlIiwiaHRtbCIsImxpbmsiLCJpbWFnZSIsInN0cm9uZyIsImVtIiwiY29kZXNwYW4iLCJiciIsImRlbCIsInRleHQiXS5pbmNsdWRlcyhvLnR5cGUpKSlyKz1hfHwiIjtl''@;'; put 'put ''bHNlIHN3aXRjaChvLnR5cGUpe2Nhc2UiZXNjYXBlIjpjYXNlInRleHQiOnIrPXQudGV4dChvLnRleHQpO2JyZWFrO2Nhc2UiaHRtbCI6cis9dC5odG1sKG8udGV4dCk7YnJlYWs7Y2FzZSJsaW5rIjpyKz10Lmxpbmsoby5ocmVmLG8udGl0bGUsdGhpcy5wYXJzZUlubGluZShvLnRva2Vucyx0''@;'; put 'put ''KSk7YnJlYWs7Y2FzZSJpbWFnZSI6cis9dC5pbWFnZShvLmhyZWYsby50aXRsZSxvLnRleHQpO2JyZWFrO2Nhc2Uic3Ryb25nIjpyKz10LnN0cm9uZyh0aGlzLnBhcnNlSW5saW5lKG8udG9rZW5zLHQpKTticmVhaztjYXNlImVtIjpyKz10LmVtKHRoaXMucGFyc2VJbmxpbmUoby50b2tlbnMs''@;'; put 'put ''dCkpO2JyZWFrO2Nhc2UiY29kZXNwYW4iOnIrPXQuY29kZXNwYW4oby50ZXh0KTticmVhaztjYXNlImJyIjpyKz10LmJyKCk7YnJlYWs7Y2FzZSJkZWwiOnIrPXQuZGVsKHRoaXMucGFyc2VJbmxpbmUoby50b2tlbnMsdCkpO2JyZWFrO2RlZmF1bHQ6e2NvbnN0IHU9J1Rva2VuIHdpdGggIicr''@;'; put 'put ''by50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcih1KTt0aHJvdyBuZXcgRXJyb3IodSl9fXJldHVybiByfX1jbGFzcyB5S3tjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZXx8aXl9c3RhdGljIHBh''@;'; put 'put ''c3NUaHJvdWdoSG9va3M9bmV3IFNldChbInByZXByb2Nlc3MiLCJwb3N0cHJvY2VzcyJdKTtwcmVwcm9jZXNzKGUpe3JldHVybiBlfXBvc3Rwcm9jZXNzKGUpe3JldHVybiBlfX1jb25zdCBVQz1uZXcgY2xhc3Mgb2Nue2RlZmF1bHRzPXthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiEx''@;'; put 'put ''LGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoiIixoaWdobGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGws''@;'; put 'put ''c2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbCx4aHRtbDohMX07b3B0aW9ucz10aGlzLnNldE9wdGlvbnM7cGFyc2U9dGhpcy4jZShxNi5sZXgsSzYucGFyc2UpO3BhcnNlSW5saW5lPXRoaXMuI2UocTYubGV4SW5saW5lLEs2LnBhcnNlSW5s''@;'; put 'put ''aW5lKTtQYXJzZXI9SzY7cGFyc2VyPUs2LnBhcnNlO1JlbmRlcmVyPV9LO1RleHRSZW5kZXJlcj1LbWU7TGV4ZXI9cTY7bGV4ZXI9cTYubGV4O1Rva2VuaXplcj12SztTbHVnZ2VyPVhtZTtIb29rcz15Sztjb25zdHJ1Y3RvciguLi5lKXt0aGlzLnVzZSguLi5lKX13YWxrVG9rZW5zKGUsdCl7''@;'; put 'put ''bGV0IHI9W107Zm9yKGNvbnN0IGkgb2YgZSlzd2l0Y2gocj1yLmNvbmNhdCh0LmNhbGwodGhpcyxpKSksaS50eXBlKXtjYXNlInRhYmxlIjpmb3IoY29uc3QgbyBvZiBpLmhlYWRlcilyPXIuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhvLnRva2Vucyx0KSk7Zm9yKGNvbnN0IG8gb2YgaS5yb3dz''@;'; put 'put ''KWZvcihjb25zdCBhIG9mIG8pcj1yLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoYS50b2tlbnMsdCkpO2JyZWFrO2Nhc2UibGlzdCI6cj1yLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoaS5pdGVtcyx0KSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMmJnRoaXMuZGVmYXVs''@;'; put 'put ''dHMuZXh0ZW5zaW9ucy5jaGlsZFRva2VucyYmdGhpcy5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zW2kudHlwZV0/dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zW2kudHlwZV0uZm9yRWFjaChvPT57cj1yLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoaVtvXSx0KSl9''@;'; put 'put ''KTppLnRva2VucyYmKHI9ci5jb25jYXQodGhpcy53YWxrVG9rZW5zKGkudG9rZW5zLHQpKSl9cmV0dXJuIHJ9dXNlKC4uLmUpe2NvbnN0IHQ9dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zfHx7cmVuZGVyZXJzOnt9LGNoaWxkVG9rZW5zOnt9fTtyZXR1cm4gZS5mb3JFYWNoKHI9Pntjb25zdCBp''@;'; put 'put ''PXsuLi5yfTtpZihpLmFzeW5jPXRoaXMuZGVmYXVsdHMuYXN5bmN8fGkuYXN5bmN8fCExLHIuZXh0ZW5zaW9ucyYmKHIuZXh0ZW5zaW9ucy5mb3JFYWNoKG89PntpZighby5uYW1lKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIG5hbWUgcmVxdWlyZWQiKTtpZihvLnJlbmRlcmVyKXtjb25z''@;'; put 'put ''dCBhPXQucmVuZGVyZXJzW28ubmFtZV07dC5yZW5kZXJlcnNbby5uYW1lXT1hP2Z1bmN0aW9uKC4uLmwpe2xldCB1PW8ucmVuZGVyZXIuYXBwbHkodGhpcyxsKTtyZXR1cm4hMT09PXUmJih1PWEuYXBwbHkodGhpcyxsKSksdX06by5yZW5kZXJlcn1pZihvLnRva2VuaXplcil7aWYoIW8ubGV2''@;'; put 'put ''ZWx8fCJibG9jayIhPT1vLmxldmVsJiYiaW5saW5lIiE9PW8ubGV2ZWwpdGhyb3cgbmV3IEVycm9yKCJleHRlbnNpb24gbGV2ZWwgbXVzdCBiZSAnYmxvY2snIG9yICdpbmxpbmUnIik7dFtvLmxldmVsXT90W28ubGV2ZWxdLnVuc2hpZnQoby50b2tlbml6ZXIpOnRbby5sZXZlbF09W28udG9r''@;'; put 'put ''ZW5pemVyXSxvLnN0YXJ0JiYoImJsb2NrIj09PW8ubGV2ZWw/dC5zdGFydEJsb2NrP3Quc3RhcnRCbG9jay5wdXNoKG8uc3RhcnQpOnQuc3RhcnRCbG9jaz1bby5zdGFydF06ImlubGluZSI9PT1vLmxldmVsJiYodC5zdGFydElubGluZT90LnN0YXJ0SW5saW5lLnB1c2goby5zdGFydCk6dC5z''@;'; put 'put ''dGFydElubGluZT1bby5zdGFydF0pKX1vLmNoaWxkVG9rZW5zJiYodC5jaGlsZFRva2Vuc1tvLm5hbWVdPW8uY2hpbGRUb2tlbnMpfSksaS5leHRlbnNpb25zPXQpLHIucmVuZGVyZXIpe2NvbnN0IG89dGhpcy5kZWZhdWx0cy5yZW5kZXJlcnx8bmV3IF9LKHRoaXMuZGVmYXVsdHMpO2Zvcihj''@;'; put 'put ''b25zdCBhIGluIHIucmVuZGVyZXIpe2NvbnN0IGw9b1thXTtvW2FdPSguLi51KT0+e2xldCBnPXIucmVuZGVyZXJbYV0uYXBwbHkobyx1KTtyZXR1cm4hMT09PWcmJihnPWwuYXBwbHkobyx1KSksZ319aS5yZW5kZXJlcj1vfWlmKHIudG9rZW5pemVyKXtjb25zdCBvPXRoaXMuZGVmYXVsdHMu''@;'; put 'put ''dG9rZW5pemVyfHxuZXcgdksodGhpcy5kZWZhdWx0cyk7Zm9yKGNvbnN0IGEgaW4gci50b2tlbml6ZXIpe2NvbnN0IGw9b1thXTtvW2FdPSguLi51KT0+e2xldCBnPXIudG9rZW5pemVyW2FdLmFwcGx5KG8sdSk7cmV0dXJuITE9PT1nJiYoZz1sLmFwcGx5KG8sdSkpLGd9fWkudG9rZW5pemVy''@;'; put 'put ''PW99aWYoci5ob29rcyl7Y29uc3Qgbz10aGlzLmRlZmF1bHRzLmhvb2tzfHxuZXcgeUs7Zm9yKGNvbnN0IGEgaW4gci5ob29rcyl7Y29uc3QgbD1vW2FdO29bYV09eUsucGFzc1Rocm91Z2hIb29rcy5oYXMoYSk/dT0+e2lmKHRoaXMuZGVmYXVsdHMuYXN5bmMpcmV0dXJuIFByb21pc2UucmVz''@;'; put 'put ''b2x2ZShyLmhvb2tzW2FdLmNhbGwobyx1KSkudGhlbihFPT5sLmNhbGwobyxFKSk7Y29uc3QgZz1yLmhvb2tzW2FdLmNhbGwobyx1KTtyZXR1cm4gbC5jYWxsKG8sZyl9OiguLi51KT0+e2xldCBnPXIuaG9va3NbYV0uYXBwbHkobyx1KTtyZXR1cm4hMT09PWcmJihnPWwuYXBwbHkobyx1KSks''@;'; put 'put ''Z319aS5ob29rcz1vfWlmKHIud2Fsa1Rva2Vucyl7Y29uc3Qgbz10aGlzLmRlZmF1bHRzLndhbGtUb2tlbnM7aS53YWxrVG9rZW5zPWZ1bmN0aW9uKGEpe2xldCBsPVtdO3JldHVybiBsLnB1c2goci53YWxrVG9rZW5zLmNhbGwodGhpcyxhKSksbyYmKGw9bC5jb25jYXQoby5jYWxsKHRoaXMs''@;'; put 'put ''YSkpKSxsfX10aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLml9fSksdGhpc31zZXRPcHRpb25zKGUpe3JldHVybiB0aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmV9LHRoaXN9I2UoZSx0KXtyZXR1cm4ocixpLG8pPT57ImZ1bmN0aW9uIj09dHlwZW9mIGkmJihv''@;'; put 'put ''PWksaT1udWxsKTtjb25zdCBhPXsuLi5pfTtpPXsuLi50aGlzLmRlZmF1bHRzLC4uLmF9O2NvbnN0IGw9dGhpcy4jdChpLnNpbGVudCxpLmFzeW5jLG8pO2lmKHR5cGVvZiByPiJ1Inx8bnVsbD09PXIpcmV0dXJuIGwobmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIHVu''@;'; put 'put ''ZGVmaW5lZCBvciBudWxsIikpO2lmKCJzdHJpbmciIT10eXBlb2YgcilyZXR1cm4gbChuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSAiK09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyKSsiLCBzdHJpbmcgZXhwZWN0ZWQiKSk7aWYoZnVuY3Rp''@;'; put 'put ''b24gbmNuKG4sZSl7IW58fG4uc2lsZW50fHwoZSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogY2FsbGJhY2sgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVy''@;'; put 'put ''ZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnL3VzaW5nX3BybyNhc3luYyIpLChuLnNhbml0aXplfHxuLnNhbml0aXplcikmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHNhbml0aXplIGFuZCBzYW5pdGl6ZXIgcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDAuNy4wLCBz''@;'; put 'put ''aG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnLyMvVVNJTkdfQURWQU5DRUQubWQjb3B0aW9ucyIpLChuLmhpZ2hsaWdodHx8Imxhbmd1YWdlLSIhPT1uLmxhbmdQcmVmaXgpJiZj''@;'; put 'put ''b25zb2xlLndhcm4oIm1hcmtlZCgpOiBoaWdobGlnaHQgYW5kIGxhbmdQcmVmaXggcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRw''@;'; put 'put ''czovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtaGlnaGxpZ2h0LiIpLG4ubWFuZ2xlJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBtYW5nbGUgcGFyYW1ldGVyIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdp''@;'; put 'put ''bGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0aGlzIHdhcm5pbmcsIGluc3RhbGwgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLW1hbmdsZSwgb3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7bWFuZ2xlOiBmYWxzZX1gLiIpLG4uYmFzZVVybCYmY29uc29s''@;'; put 'put ''ZS53YXJuKCJtYXJrZWQoKTogYmFzZVVybCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2Fn''@;'; put 'put ''ZS9tYXJrZWQtYmFzZS11cmwuIiksbi5zbWFydHlwYW50cyYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogc21hcnR5cGFudHMgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1''@;'; put 'put ''dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXNtYXJ0eXBhbnRzLiIpLG4ueGh0bWwmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHhodG1sIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3Qg''@;'; put 'put ''YmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC14aHRtbC4iKSwobi5oZWFkZXJJZHN8fG4uaGVhZGVyUHJlZml4KSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogaGVhZGVySWRz''@;'; put 'put ''IGFuZCBoZWFkZXJQcmVmaXggcGFyYW1ldGVycyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFRvIGNsZWFyIHRoaXMgd2FybmluZywgaW5zdGFsbCAgaHR0cHM6Ly93''@;'; put 'put ''d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLWdmbS1oZWFkaW5nLWlkLCBvciBkaXNhYmxlIGJ5IHNldHRpbmcgYHtoZWFkZXJJZHM6IGZhbHNlfWAuIikpfShpLG8pLGkuaG9va3MmJihpLmhvb2tzLm9wdGlvbnM9aSksbyl7Y29uc3QgdT1pLmhpZ2hsaWdodDtsZXQgZzt0cnl7aS5ob29r''@;'; put 'put ''cyYmKHI9aS5ob29rcy5wcmVwcm9jZXNzKHIpKSxnPWUocixpKX1jYXRjaChaKXtyZXR1cm4gbChaKX1jb25zdCBFPVo9PntsZXQgZWU7aWYoIVopdHJ5e2kud2Fsa1Rva2VucyYmdGhpcy53YWxrVG9rZW5zKGcsaS53YWxrVG9rZW5zKSxlZT10KGcsaSksaS5ob29rcyYmKGVlPWkuaG9va3Mu''@;'; put 'put ''cG9zdHByb2Nlc3MoZWUpKX1jYXRjaCh2ZSl7Wj12ZX1yZXR1cm4gaS5oaWdobGlnaHQ9dSxaP2woWik6byhudWxsLGVlKX07aWYoIXV8fHUubGVuZ3RoPDN8fChkZWxldGUgaS5oaWdobGlnaHQsIWcubGVuZ3RoKSlyZXR1cm4gRSgpO2xldCBPPTA7cmV0dXJuIHRoaXMud2Fsa1Rva2Vucyhn''@;'; put 'put ''LFo9PnsiY29kZSI9PT1aLnR5cGUmJihPKyssc2V0VGltZW91dCgoKT0+e3UoWi50ZXh0LFoubGFuZywoZWUsdmUpPT57aWYoZWUpcmV0dXJuIEUoZWUpO251bGwhPXZlJiZ2ZSE9PVoudGV4dCYmKFoudGV4dD12ZSxaLmVzY2FwZWQ9ITApLE8tLSwwPT09TyYmRSgpfSl9LDApKX0pLHZvaWQo''@;'; put 'put ''MD09PU8mJkUoKSl9aWYoaS5hc3luYylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkuaG9va3M/aS5ob29rcy5wcmVwcm9jZXNzKHIpOnIpLnRoZW4odT0+ZSh1LGkpKS50aGVuKHU9Pmkud2Fsa1Rva2Vucz9Qcm9taXNlLmFsbCh0aGlzLndhbGtUb2tlbnModSxpLndhbGtUb2tlbnMpKS50aGVu''@;'; put 'put ''KCgpPT51KTp1KS50aGVuKHU9PnQodSxpKSkudGhlbih1PT5pLmhvb2tzP2kuaG9va3MucG9zdHByb2Nlc3ModSk6dSkuY2F0Y2gobCk7dHJ5e2kuaG9va3MmJihyPWkuaG9va3MucHJlcHJvY2VzcyhyKSk7Y29uc3QgdT1lKHIsaSk7aS53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnModSxp''@;'; put 'put ''LndhbGtUb2tlbnMpO2xldCBnPXQodSxpKTtyZXR1cm4gaS5ob29rcyYmKGc9aS5ob29rcy5wb3N0cHJvY2VzcyhnKSksZ31jYXRjaCh1KXtyZXR1cm4gbCh1KX19fSN0KGUsdCxyKXtyZXR1cm4gaT0+e2lmKGkubWVzc2FnZSs9IlxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0''@;'; put 'put ''aHViLmNvbS9tYXJrZWRqcy9tYXJrZWQuIixlKXtjb25zdCBvPSI8cD5BbiBlcnJvciBvY2N1cnJlZDo8L3A+PHByZT4iK2hmKGkubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7cmV0dXJuIHQ/UHJvbWlzZS5yZXNvbHZlKG8pOnI/dm9pZCByKG51bGwsbyk6b31pZih0KXJldHVybiBQcm9taXNl''@;'; put 'put ''LnJlamVjdChpKTtpZighcil0aHJvdyBpO3IoaSl9fX0oaXkpO2Z1bmN0aW9uIEtjKG4sZSx0KXtyZXR1cm4gVUMucGFyc2UobixlLHQpfUtjLm9wdGlvbnM9S2Muc2V0T3B0aW9ucz1mdW5jdGlvbihuKXtyZXR1cm4gVUMuc2V0T3B0aW9ucyhuKSx6WmUoS2MuZGVmYXVsdHM9VUMuZGVmYXVs''@;'; put 'put ''dHMpLEtjfSxLYy5nZXREZWZhdWx0cz1mdW5jdGlvbiBxbWUoKXtyZXR1cm57YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4''@;'; put 'put ''OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9fSxLYy5kZWZhdWx0cz1peSxLYy51c2U9''@;'; put 'put ''ZnVuY3Rpb24oLi4ubil7cmV0dXJuIFVDLnVzZSguLi5uKSx6WmUoS2MuZGVmYXVsdHM9VUMuZGVmYXVsdHMpLEtjfSxLYy53YWxrVG9rZW5zPWZ1bmN0aW9uKG4sZSl7cmV0dXJuIFVDLndhbGtUb2tlbnMobixlKX0sS2MucGFyc2VJbmxpbmU9VUMucGFyc2VJbmxpbmUsS2MuUGFyc2VyPUs2''@;'; put 'put ''LEtjLnBhcnNlcj1LNi5wYXJzZSxLYy5SZW5kZXJlcj1fSyxLYy5UZXh0UmVuZGVyZXI9S21lLEtjLkxleGVyPXE2LEtjLmxleGVyPXE2LmxleCxLYy5Ub2tlbml6ZXI9dkssS2MuU2x1Z2dlcj1YbWUsS2MuSG9va3M9eUssS2MucGFyc2U9S2M7Y29uc3Qgc2NuPVsibWFya2Rvd25DYXJkIl07''@;'; put 'put ''ZnVuY3Rpb24gbGNuKG4sZSl7MSZuJiZJdCgwLCJjbHItc3Bpbm5lciIsNyl9bGV0IGNjbj0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKHIpe3RoaXMuc2FzU2VydmljZT1yLHRoaXMuYWdyZWVDaGVja2VkPSExLHRoaXMuYWdyZWVCb3hMb2NrZWQ9ITAsdGhpcy5hZ3JlZUNsaWNr''@;'; put 'put ''ZWQ9ITEsdGhpcy5ldWxhX21hcmtkb3duPSdcbkxpY2VuY2UgQWdyZWVtZW50IGZvciBEYXRhIENvbnRyb2xsZXIgZm9yIFNBU1x4YWVcbj09PT09PT09PT09PT09PT09PT09XG5cbkNvcHlyaWdodCAoYykgQm93ZSBJTyBMdGRcblxuRGF0YSBDb250cm9sbGVyIHNvZnR3YXJlIGlzIGRpc3Ry''@;'; put 'put ''aWJ1dGVkIGJ5IDRHTCBBcHBzLCBhIGJyYW5kIG93bmVkIGJ5IEJvd2UgSU8gTHRkLCBhIFVLIExpbWl0ZWQgQ29tcGFueSBoZWFkcXVhcnRlZCBpbiAyOSBPbGRmaWVsZCBSZCwgQ3VtYnJpYSwgcmVnaXN0ZXJlZCBhdCBDb21wYW5pZXMgSG91c2Ugd2l0aCBjb21wYW55IG51bWJlciAwODc3''@;'; put 'put ''NzE3MSwgVkFUIG51bWJlcjogMjAzOTE0MjQwXG5cblRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IGFwcGxpY2FibGUgY29weXJpZ2h0IGxhd3MsIGluY2x1ZGluZyBpbnRlcm5hdGlvbmFsIHRyZWF0aWVzLCBhbmQgZHVhbC1saWNlbnNlZCBcdTIwMTMgZGVwZW5kaW5nIG9uIHdoZXRo''@;'; put 'put ''ZXIgeW91ciB1c2UgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMsIG1lYW5pbmcgaW50ZW5kZWQgZm9yIG9yIHJlc3VsdGluZyBpbiBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBtb25ldGFyeSBjb21wZW5zYXRpb24sIG9yIG5vdC5cblxuSWYgeW91ciB1c2UgaXMgc3RyaWN0bHkgcGVyc29uYWwg''@;'; put 'put ''b3Igc29sZWx5IGZvciBldmFsdWF0aW9uIHB1cnBvc2VzLCBtZWFuaW5nIGZvciB0aGUgcHVycG9zZXMgb2YgdGVzdGluZyB0aGUgc3VpdGFiaWxpdHksIHBlcmZvcm1hbmNlLCBhbmQgdXNlZnVsbmVzcyBvZiB0aGlzIHNvZnR3YXJlIG91dHNpZGUgdGhlIHByb2R1Y3Rpb24gZW52aXJvbm1l''@;'; put 'put ''bnQsIHlvdSBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgaW5jbHVkZWQgaW4gdGhlICJsaWNlbmNlLW5vbi1jb21tZXJjaWFsLWRhdGFjb250cm9sbGVyLm1kIiBmaWxlIGF2YWlsYWJsZSBoZXJlOiAgaHR0cHM6Ly9naXQuZGF0YWNvbnRyb2xsZXIuaW8vZGMvZGMvc3JjL2JyYW5j''@;'; put 'put ''aC9tYWluL2xpY2VuY2Utbm9uLWNvbW1lcmNpYWwtZGF0YWNvbnRyb2xsZXIubWRcblxuWW91ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcyBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiBhbiBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVt''@;'; put 'put ''ZW50LlxuXG5JbiBhbnkgY2FzZSwgeW91IG11c3Qgbm90IG1ha2UgYW55IHN1Y2ggdXNlIG9mIHRoaXMgc29mdHdhcmUgYXMgdG8gZGV2ZWxvcCBzb2Z0d2FyZSB3aGljaCBtYXkgYmUgY29uc2lkZXJlZCBjb21wZXRpdGl2ZSB3aXRoIHRoaXMgc29mdHdhcmUuXG5cblVOTEVTUyBFWFBSRVNT''@;'; put 'put ''TFkgQUdSRUVEIE9USEVSV0lTRSwgNEdMIEFQUFMgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgQU5EIElOIE5PIEVWRU5UIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFNI''@;'; put 'put ''QUxMIDRHTCBBUFBTIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgQVJJU0lORyBGUk9NIFVTRSBPUiBJTkFCSUxJ''@;'; put 'put ''VFkgVE8gVVNFIFRISVMgU09GVFdBUkUuXG5cblxuJ31uZ09uSW5pdCgpe2NvbnN0IHI9S2Muc2V0T3B0aW9ucyh7fSk7dGhpcy5ldWxhX21hcmtkb3duPXIucGFyc2UodGhpcy5ldWxhX21hcmtkb3duKX1uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5tYXJrZG93bkNh''@;'; put 'put ''cmQmJnRoaXMubWFya2Rvd25DYXJkLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNjcm9sbCIpKX0pfXRlcm1zQWdyZWVDaGFuZ2UoKXt0aGlzLmFncmVlQ2hlY2tlZCYmKHRoaXMuYWdyZWVCb3hMb2NrZWQ9ITAsdGhpcy5hZ3JlZUNsaWNrZWQ9ITAsdGhp''@;'; put 'put ''cy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9yZWdpc3RlcnVzZXIiLHtTQVNDb250cm9sVGFibGU6W3tBQ0NFUFRFRDoieWVzIn1dfSkudGhlbihpPT57aS5hZGFwdGVyUmVzcG9uc2UucmV0dXJuJiZpLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm5bMF0mJiJTVUNDRVNTIj09PWkuYWRhcHRl''@;'; put 'put ''clJlc3BvbnNlLnJldHVyblswXS5NU0cmJmxvY2F0aW9uLnJlbG9hZCgpfSkuY2F0Y2goaT0+aSkuZmluYWxseSgoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLmFncmVlQm94TG9ja2VkPSExLHRoaXMuYWdyZWVDbGlja2VkPSExLHRoaXMuYWdyZWVDaGVja2VkPSExfSwxZTMpfSkpfW9uQ2Fy''@;'; put 'put ''ZEJsb2NrU2Nyb2xsKHIpe2lmKCF0aGlzLmFncmVlQ2xpY2tlZCl7bGV0IGk9ci50YXJnZXQ7aSYmKHRoaXMuYWdyZWVCb3hMb2NrZWQ9IShpLnNjcm9sbFRvcCtpLm9mZnNldEhlaWdodD49aS5zY3JvbGxIZWlnaHQtMjApKX19c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGkpe3JldHVybiBuZXcoaXx8ZSkoemUoaWMpKX0sdGhpcy5cdTAyNzVjbXA9UHIoe3R5cGU6ZSxzZWxlY3RvcnM6W1siYXBwLXRlcm1zIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihpLG8pe2lmKDEmaSYmV28oc2NuLDUpLDImaSl7bGV0IGE7Y2koYT11aSgpKSYmKG8ubWFya2Rvd25DYXJk''@;'; put 'put ''PWEuZmlyc3QpfX0sc3RhbmRhbG9uZTohMSxkZWNsczoxMyx2YXJzOjYsY29uc3RzOltbIm1hcmtkb3duQ2FyZCIsIiJdLFsxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtYmxvY2siLDMsInNjcm9sbCIsImlubmVySFRNTCJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRl''@;'; put 'put ''bXMtY2VudGVyIl0sWzEsImFjY2VwdC1jaGVja2JveCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbImNscklubGluZSIsInNtYWxsIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGksbyl7''@;'; put 'put ''aWYoMSZpKXtjb25zdCBhPXduKCk7SigwLCJkaXYiLDEpKDEsImRpdiIsMiksU2UoMiwiIEVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50ICIpLEooMywicCIpLFNlKDQsIiBXZWxjb21lIHRvIERhdGEgQ29udHJvbGxlciBmb3IgU0FTISBQbGVhc2UgcmV2aWV3IGFuZCBhY2NlcHQgYWdyZWVt''@;'; put 'put ''ZW50IGJlbG93IGluIG9yZGVyIHRvIHByb2NlZWQuICIpLHRlKCkoKSxKKDUsImRpdiIsMywwKSx3dCgic2Nyb2xsIixmdW5jdGlvbih1KXtyZXR1cm4gWWUoYSksWGUoby5vbkNhcmRCbG9ja1Njcm9sbCh1KSl9KSx0ZSgpLEooNywiZGl2Iiw0KSg4LCJjbHItY2hlY2tib3gtd3JhcHBlciIs''@;'; put 'put ''NSkoOSwiaW5wdXQiLDYpLGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih1KXtyZXR1cm4gWWUoYSksZmkoby5hZ3JlZUNoZWNrZWQsdSl8fChvLmFncmVlQ2hlY2tlZD11KSxYZSh1KX0pLHd0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIFllKGEpLFhlKG8udGVybXNBZ3JlZUNoYW5n''@;'; put 'put ''ZSgpKX0pLHRlKCksSigxMCwibGFiZWwiKSxTZSgxMSwiSSBoYXZlIHJlYWQgYW5kIGFncmVlIHRvIHRoZSB0ZXJtcyBvZiBhYm92ZS4iKSx0ZSgpKCksdnQoMTIsbGNuLDEsMCwiY2xyLXNwaW5uZXIiLDcpLHRlKCkoKX0yJmkmJihpZSg1KSxydCgiaW5uZXJIVE1MIixvLmV1bGFfbWFya2Rv''@;'; put 'put ''d24seDUpLGllKDMpLHdyKCJkaXNhYmxlZCIsby5hZ3JlZUJveExvY2tlZCksaWUoKSxkaSgibmdNb2RlbCIsby5hZ3JlZUNoZWNrZWQpLHJ0KCJkaXNhYmxlZCIsby5hZ3JlZUJveExvY2tlZCksaWUoMyksX3Qoby5hZ3JlZUJveExvY2tlZCYmby5hZ3JlZUNsaWNrZWQ/MTI6LTEpKX0sZGVw''@;'; put 'put ''ZW5kZW5jaWVzOltIMixvYyxYbCxlbCxVMixGZix6Ml0sZW5jYXBzdWxhdGlvbjoyfSkpfXJldHVybiBuKCksZX0pKCk7Y29uc3QgdWNuPW49PltuXTtmdW5jdGlvbiBkY24obixlKXsxJm4mJihKKDAsInAiLDI3KSxJdCgxLCJjbHItaWNvbiIsMjgpLFNlKDIsIiBMaWNlbmNlIGtleSBpcyBp''@;'; put 'put ''bnZhbGlkLiBXZSBjYW4ndCBwcm92aWRlIHlvdSBtb3JlIGRldGFpbHMgYXQgdGhlIG1vbWVudCAiKSx0ZSgpKX1mdW5jdGlvbiBoY24obixlKXtpZigxJm4mJkl0KDAsInAiLDI5KSwyJm4pe2NvbnN0IHQ9VGUoMyk7cnQoImlubmVySFRNTCIsdC5saWNlbnNlRXJyb3JzW3Qua2V5RXJyb3Jd''@;'; put 'put ''LHg1KX19ZnVuY3Rpb24gZmNuKG4sZSl7aWYoMSZuJiYoSigwLCJwIikoMSwic3Ryb25nIiksU2UoMiwiRGV0YWlsczoiKSx0ZSgpLFNlKDMpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgzKTtpZSgzKSxTcigiICIsdC5lcnJvckRldGFpbHMpfX1mdW5jdGlvbiBwY24obixlKXtpZigxJm4mJiht''@;'; put 'put ''bCgwKSxZbigxLGRjbiwzLDAsInAiLDI1KSgyLGhjbiwxLDEsInAiLDI2KSgzLGZjbiw0LDEsInAiLDQpLHJsKCkpLDImbil7Y29uc3QgdD1UZSgyKTtpZSgpLHJ0KCJuZ0lmIiwhdC5rZXlFcnJvciksaWUoKSxydCgibmdJZiIsdC5rZXlFcnJvciksaWUoKSxydCgibmdJZiIsdC5lcnJvckRl''@;'; put 'put ''dGFpbHMpfX1mdW5jdGlvbiBnY24obixlKXsxJm4mJihtbCgwKSxKKDEsInAiLDI3KSxJdCgyLCJjbHItaWNvbiIsMjgpLFNlKDMsIiBUaGUgcmVnaXN0ZXJlZCBudW1iZXIgb2YgdXNlcnMgcmVhY2hlZCB0aGUgbGltaXQgc3BlY2lmaWVkIGZvciB5b3VyIGxpY2VuY2UuIFBsZWFzZSBjb250''@;'; put 'put ''YWN0ICIpLEl0KDQsImNvbnRhY3QtbGluayIsMzApLFNlKDUsIiBvciB5b3VyIHJlc2VsbGVyIHRvIGFycmFuZ2UgYWRkaXRpb25hbCBsaWNlbmNlcyBmb3IgdGhpcyBwcm9kdWN0LiAiKSx0ZSgpLHJsKCkpfWZ1bmN0aW9uIG1jbihuLGUpezEmbiYmKG1sKDApLEooMSwicCIsMjcpLFNlKDIs''@;'; put 'put ''IiBVcGRhdGUgdGhlIGxpY2Vuc2Uga2V5IGJ5IHVwbG9hZGluZyB0aGUgbGljZW5jZSBmaWxlIG9yIGJ5IHBhc3RpbmcgYSBsaWNlbnNlIGtleSBhbmQgYWN0aXZhdGlvbiBrZXkgaW4gdGhlIGlucHV0cyBiZWxvdy4gIiksdGUoKSxybCgpKX1mdW5jdGlvbiB2Y24obixlKXtpZigxJm4mJihK''@;'; put 'put ''KDAsInNwYW4iKSxTZSgxKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9ZS4kaW1wbGljaXQscj1lLmluZGV4LGk9VGUoMik7d3IoIm1pc3NrZXkiLGkubWlzc21hdGNoZWRLZXkmJmkubWlzc21hdGNoZWRLZXk9PT10KSxpZSgpLE5oKCIgIix0LCIiLHI9PT0obnVsbD09aS5zeXNzaXRlLnZhbHVlP251''@;'; put 'put ''bGw6aS5zeXNzaXRlLnZhbHVlLmxlbmd0aCktMT8iIjoiLCIsIiAiKX19ZnVuY3Rpb24gX2NuKG4sZSl7MSZuJiZJdCgwLCJjbHItc3Bpbm5lciIsMzEpfWZ1bmN0aW9uIHljbihuLGUpezEmbiYmKEooMCwiZGl2IiksU2UoMSwiIERyb3AgLyBCcm93c2UgbGljZW5jZSBmaWxlICIpLHRlKCkp''@;'; put 'put ''fWZ1bmN0aW9uIGJjbihuLGUpe2lmKDEmbiYmKEooMCwiZGl2IiksU2UoMSwiIFNlbGVjdGVkIGZpbGU6ICIpLEooMiwic3Ryb25nIiksU2UoMyksdGUoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoMyk7aWUoMykscHIodC5saWNlbmNlZmlsZS5maWxlbmFtZSl9fWZ1bmN0aW9uIHdjbihuLGUpe2lm''@;'; put 'put ''KDEmbiYmKEooMCwiZGl2IikoMSwic3Ryb25nIiksU2UoMiksdGUoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoMyk7aWUoMikscHIodC5saWNlbmNlRmlsZUVycm9yKX19ZnVuY3Rpb24gQ2NuKG4sZSl7aWYoMSZuJiYobWwoMCksWW4oMSx5Y24sMiwwLCJkaXYiLDQpKDIsYmNuLDQsMSwiZGl2Iiw0''@;'; put 'put ''KSgzLHdjbiwzLDEsImRpdiIsNCkscmwoKSksMiZuKXtjb25zdCB0PVRlKDIpO2llKCkscnQoIm5nSWYiLCIiPT09dC5saWNlbmNlZmlsZS5maWxlbmFtZSksaWUoKSxydCgibmdJZiIsIiIhPT10LmxpY2VuY2VmaWxlLmZpbGVuYW1lKSxpZSgpLHJ0KCJuZ0lmIix0LmxpY2VuY2VGaWxlRXJy''@;'; put 'put ''b3IpfX1mdW5jdGlvbiBTY24obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTttbCgwKSxKKDEsImZvcm0iLDMyKSgyLCJwIiksU2UoMywiTGljZW5jZSBrZXk6IiksdGUoKSxKKDQsImRpdiIsMzMpKDUsInRleHRhcmVhIiwzNCksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQp''@;'; put 'put ''O2NvbnN0IG89VGUoMik7cmV0dXJuIGZpKG8uY29tYmluZWRLZXlWYWx1ZSxpKXx8KG8uY29tYmluZWRLZXlWYWx1ZT1pKSxYZShpKX0pLHd0KCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgyKS5vbkNvbWJpbmVkS2V5SW5wdXQoKSl9KSx0ZSgpKCkoKSxKKDYs''@;'; put 'put ''ImJ1dHRvbiIsMzUpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoMikudG9nZ2xlS2V5Rm9ybWF0KCkpfSksU2UoNywiIFBhc3RlIGFzIHR3byBzZXBhcmF0ZSBrZXlzIGluc3RlYWQgIiksdGUoKSxybCgpfWlmKDImbil7Y29uc3QgdD1UZSgyKTtpZSg1KSxkaSgi''@;'; put 'put ''bmdNb2RlbCIsdC5jb21iaW5lZEtleVZhbHVlKX19ZnVuY3Rpb24gRWNuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7bWwoMCksSigxLCJmb3JtIiwzNikoMiwicCIpLFNlKDMsIkxpY2VuY2Uga2V5OiIpLHRlKCksSig0LCJkaXYiLDMzKSg1LCJ0ZXh0YXJlYSIsMzcpLGhpKCJuZ01vZGVs''@;'; put 'put ''Q2hhbmdlIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKDIpO3JldHVybiBmaShvLmxpY2VuY2VLZXlWYWx1ZSxpKXx8KG8ubGljZW5jZUtleVZhbHVlPWkpLFhlKGkpfSksd3QoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKDIpLnRyaW1LZXlzKCkpfSks''@;'; put 'put ''dGUoKSgpKCksSig2LCJmb3JtIiwzOCkoNywicCIpLFNlKDgsIkFjdGl2YXRpb24ga2V5OiIpLHRlKCksSig5LCJkaXYiLDMzKSgxMCwidGV4dGFyZWEiLDM5KSxoaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgyKTtyZXR1cm4gZmkoby5hY3RpdmF0aW9u''@;'; put 'put ''S2V5VmFsdWUsaSl8fChvLmFjdGl2YXRpb25LZXlWYWx1ZT1pKSxYZShpKX0pLHd0KCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgyKS50cmltS2V5cygpKX0pLHRlKCkoKSgpLEooMTEsImJ1dHRvbiIsMzUpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''WWUodCksWGUoVGUoMikudG9nZ2xlS2V5Rm9ybWF0KCkpfSksU2UoMTIsIiBQYXN0ZSBhcyBhIHNpbmdsZSBrZXkgaW5zdGVhZCAiKSx0ZSgpLHJsKCl9aWYoMiZuKXtjb25zdCB0PVRlKDIpO2llKDUpLGRpKCJuZ01vZGVsIix0LmxpY2VuY2VLZXlWYWx1ZSksaWUoNSksZGkoIm5nTW9kZWwi''@;'; put 'put ''LHQuYWN0aXZhdGlvbktleVZhbHVlKX19ZnVuY3Rpb24gTWNuKG4sZSl7MSZuJiYoSigwLCJzcGFuIiksU2UoMSwiKGRlbW8vZnJlZSB0aWVyIGtleSkiKSx0ZSgpKX1mdW5jdGlvbiBUY24obixlKXtpZigxJm4mJihKKDAsInAiLDExKSgxLCJzdHJvbmciKSxTZSgyLCJFbmFibGVkIGZlYXR1''@;'; put 'put ''cmVzOiIpLHRlKCksU2UoMyksdGUoKSksMiZuKXtjb25zdCB0PVRlKDMpO2llKDMpLFNyKCIgIix0LmVuYWJsZWRGZWF0dXJlcy5qb2luKCIsICIpLCIgIil9fWZ1bmN0aW9uIHhjbihuLGUpe2lmKDEmbiYmKEooMCwiZGl2Iiw0MCkoMSwiaDYiLDQxKSxTZSgyLCJLZXkgRGV0YWlscyIpLHRl''@;'; put 'put ''KCksSigzLCJwIiwxMSkoNCwic3Ryb25nIiksU2UoNSwiVmFsaWQgdW50aWw6IiksdGUoKSxTZSg2KSxZbig3LE1jbiwyLDAsInNwYW4iLDQpLHRlKCksSig4LCJwIiwxMSkoOSwic3Ryb25nIiksU2UoMTAsIkFsbG93ZWQgdXNlcnM6IiksdGUoKSxTZSgxMSksdGUoKSxKKDEyLCJwIiwxMSko''@;'; put 'put ''MTMsInN0cm9uZyIpLFNlKDE0LCJTaXRlIElEKHMpIGluIHRoaXMga2V5OiIpLHRlKCksU2UoMTUpLHRlKCksWW4oMTYsVGNuLDQsMSwicCIsNDIpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgyKTtpZSg2KSxTcigiICIsdC5saWNlbnNlS2V5RGF0YS52YWxpZF91bnRpbCwiICIpLGllKCkscnQo''@;'; put 'put ''Im5nSWYiLHQubGljZW5zZUtleURhdGEuZGVtbyksaWUoNCksU3IoIiAiLHQubGljZW5zZUtleURhdGEudXNlcnNfYWxsb3dlZCwiICIpLGllKDQpLFNyKCIgIiwobnVsbCE9dC5saWNlbnNlS2V5RGF0YS5zaXRlX2lkX211bHRpcGxlJiZ0LmxpY2Vuc2VLZXlEYXRhLnNpdGVfaWRfbXVsdGlw''@;'; put 'put ''bGUubGVuZ3RoP3QubGljZW5zZUtleURhdGEuc2l0ZV9pZF9tdWx0aXBsZTp0NCg1LHVjbix0LmxpY2Vuc2VLZXlEYXRhLnNpdGVfaWQpKS5qb2luKCIsICIpLCIgIiksaWUoKSxydCgibmdJZiIsdC5lbmFibGVkRmVhdHVyZXMubGVuZ3RoKX19ZnVuY3Rpb24gQWNuKG4sZSl7MSZuJiYoSigw''@;'; put 'put ''LCJidXR0b24iLDQzKSxTZSgxLCIgQ29udGludWUgd2l0aCBmcmVlIHRpZXIgIiksdGUoKSl9ZnVuY3Rpb24ga2NuKG4sZSl7MSZuJiYoSigwLCJwIiw0NCksSXQoMSwiY2xyLWljb24iLDQ1KSxTZSgyLCIgVGhpcyBrZXkgd2FzIGdlbmVyYXRlZCBmb3IgYSBzZWN1cmUgKEhUVFBTKSBjb25u''@;'; put 'put ''ZWN0aW9uLCBidXQgRGF0YUNvbnRyb2xsZXIgaXMgY3VycmVudGx5IHJ1bm5pbmcgb3ZlciBIVFRQIC0gaXQgd2lsbCBub3QgYWN0aXZhdGUgaGVyZS4gQWNjZXNzIERhdGFDb250cm9sbGVyIHZpYSBIVFRQUywgb3IgY29udGFjdCAiKSxJdCgzLCJjb250YWN0LWxpbmsiLDMwKSxTZSg0LCIg''@;'; put 'put ''Zm9yIGFuIEhUVFAtY29tcGF0aWJsZSBrZXkuICIpLHRlKCkpfWZ1bmN0aW9uIFJjbihuLGUpezEmbiYmKEooMCwicCIsNDQpLEl0KDEsImNsci1pY29uIiw0NSksU2UoMiwiIFRoaXMga2V5IHdhcyBnZW5lcmF0ZWQgZm9yIGFuIGluc2VjdXJlIChIVFRQKSBjb25uZWN0aW9uLCBidXQgdGhp''@;'; put 'put ''cyBwYWdlIGlzIHJ1bm5pbmcgaW4gYSBzZWN1cmUgYnJvd3NpbmcgY29udGV4dCAoSFRUUFMsIG9yIGxvY2FsaG9zdCkgLSBpdCB3aWxsIG5vdCBhY3RpdmF0ZSBoZXJlLiBDb250YWN0ICIpLEl0KDMsImNvbnRhY3QtbGluayIsMzApLFNlKDQsIiBmb3IgYW4gSFRUUFMtY29tcGF0aWJsZSBr''@;'; put 'put ''ZXkuICIpLHRlKCkpfWZ1bmN0aW9uIEljbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiZGl2Iiw1KSgxLCJkaXYiLDYpLFNlKDIsIkxpY2VuY2luZyIpLHRlKCksSigzLCJkaXYiLDcpKDQsImRpdiIsOCksWW4oNSxwY24sNCwzLCJuZy1jb250YWluZXIiLDkpKDYsZ2NuLDYsMCwi''@;'; put 'put ''bmctY29udGFpbmVyIiw5KSg3LG1jbiwzLDAsIm5nLWNvbnRhaW5lciIsOSksSig4LCJwIiwxMCkoOSwic3Ryb25nIiksU2UoMTAsIlByb3RvY29sOiIpLHRlKCksU2UoMTEpLHRlKCksSigxMiwicCIsMTEpKDEzLCJzdHJvbmciKSxTZSgxNCwiU1lTU0lURToiKSx0ZSgpLFluKDE1LHZjbiwy''@;'; put 'put ''LDQsInNwYW4iLDEyKSxKKDE2LCJhIiwxMyksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9b28oMTgpLG89b28oMjApLGE9VGUoKTtyZXR1cm4gWGUoYS5jb3B5U3lzc2l0ZShpLG8sYS5zeXNzaXRlLnZhbHVlfHxbXSkpfSksSXQoMTcsImNsci1pY29uIiwxNCwwKSxKKDE5''@;'; put 'put ''LCJzcGFuIiwxNSwxKSxTZSgyMSwiQ29weSB0byBjbGlwYm9hcmQiKSx0ZSgpKCkoKSxKKDIyLCJjbHItdGFicyIpKDIzLCJjbHItdGFiIikoMjQsImJ1dHRvbiIsMTYpLFNlKDI1LCJVcGxvYWQgbGljZW5jZSIpLHRlKCksSigyNiwiY2xyLXRhYi1jb250ZW50IikoMjcsImlucHV0IiwxNywy''@;'; put 'put ''KSx3dCgiY2hhbmdlIixmdW5jdGlvbihpKXtyZXR1cm4gWWUodCksWGUoVGUoKS5vbkZpbGVDYXB0dXJlKGkpKX0pLHRlKCksSigyOSwiZGl2IiwxOCksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShvbygyOCkuY2xpY2soKSl9KSgiZmlsZURyb3AiLGZ1bmN0aW9uKGkp''@;'; put 'put ''e3JldHVybiBZZSh0KSxYZShUZSgpLm9uRmlsZUNhcHR1cmUoaSwhMCkpfSksWW4oMzAsX2NuLDEsMCwiY2xyLXNwaW5uZXIiLDE5KSgzMSxDY24sNCwzLCJuZy1jb250YWluZXIiLDQpLHRlKCkoKSgpLEooMzIsImNsci10YWIiKSgzMywiYnV0dG9uIiwxNiksU2UoMzQsIlBhc3RlIGxpY2Vu''@;'; put 'put ''Y2UiKSx0ZSgpLEooMzUsImNsci10YWItY29udGVudCIpLFluKDM2LFNjbiw4LDEsIm5nLWNvbnRhaW5lciIsNCkoMzcsRWNuLDEzLDIsIm5nLWNvbnRhaW5lciIsNCksdGUoKSgpKCksWW4oMzgseGNuLDE3LDcsImRpdiIsMjApLHRlKCksSigzOSwiZGl2IiwyMSkoNDAsImJ1dHRvbiIsMjIp''@;'; put 'put ''LHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoKS5hcHBseUtleXMoKSl9KSxTZSg0MSwiIEFwcGx5IGxpY2VuY2Uga2V5cyAiKSx0ZSgpLFluKDQyLEFjbiwyLDAsImJ1dHRvbiIsMjMpLHRlKCksWW4oNDMsa2NuLDUsMCwicCIsMjQpKDQ0LFJjbiw1LDAsInAiLDI0''@;'; put 'put ''KSx0ZSgpKCl9aWYoMiZuKXtjb25zdCB0PVRlKCk7aWUoMykscnQoIm5nU3dpdGNoIix0LmFjdGlvbiksaWUoMikscnQoIm5nU3dpdGNoQ2FzZSIsImtleSIpLGllKCkscnQoIm5nU3dpdGNoQ2FzZSIsImxpbWl0IiksaWUoKSxydCgibmdTd2l0Y2hDYXNlIiwidXBkYXRlIiksaWUoNCksU3Io''@;'; put 'put ''IiAiLHQucHJvdG9jb2wpLGllKDQpLHJ0KCJuZ0Zvck9mIix0LnN5c3NpdGUudmFsdWUpLGllKDE1KSxydCgibmdJZiIsdC5saWNlbmNlRmlsZUxvYWRpbmcpLGllKCkscnQoIm5nSWYiLCF0LmxpY2VuY2VGaWxlTG9hZGluZyksaWUoNSkscnQoIm5nSWYiLCJjb21iaW5lZCI9PT10LmtleUZv''@;'; put 'put ''cm1hdCksaWUoKSxydCgibmdJZiIsImxlZ2FjeSI9PT10LmtleUZvcm1hdCksaWUoKSxydCgibmdJZiIsdC5saWNlbnNlS2V5RGF0YSksaWUoMikscnQoImNsckxvYWRpbmciLHQuYXBwbHlpbmdLZXlzKSgiZGlzYWJsZWQiLHQuZGlzYWJsZUFwcGx5QnV0dG9uKSxpZSgyKSxydCgibmdJZiIs''@;'; put 'put ''dC5pc0FwcEZyZWVUaWVyLnZhbHVlKSxpZSgpLHJ0KCJuZ0lmIiwicmVxdWlyZXNIdHRwcyI9PT10LnByb3RvY29sTWlzbWF0Y2gpLGllKCkscnQoIm5nSWYiLCJyZXF1aXJlc0h0dHAiPT09dC5wcm90b2NvbE1pc21hdGNoKX19ZnVuY3Rpb24gRGNuKG4sZSl7MSZuJiZJdCgwLCJhcHAtdGVy''@;'; put 'put ''bXMiKX12YXIgUVplPWZ1bmN0aW9uKG4pe3JldHVybiBuLmtleT0ia2V5IixuLnJlZ2lzdGVyPSJyZWdpc3RlciIsbi5saW1pdD0ibGltaXQiLG4udXBkYXRlPSJ1cGRhdGUiLG59KFFaZXx8e30pO2NvbnN0IExjbj1be3BhdGg6IjphY3Rpb24iLGNvbXBvbmVudDooKCk9Pnt2YXIgbjtjbGFz''@;'; put 'put ''cyBle2NvbnN0cnVjdG9yKHIsaSxvLGEsbCx1KXt0aGlzLnJvdXRlPXIsdGhpcy5yb3V0ZXI9aSx0aGlzLmxpY2VuY2VTZXJ2aWNlPW8sdGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5hcHBTZXJ2aWNlPWwsdGhpcy5zYW5pdGl6ZXI9dSx0aGlzLmFjdGlvbj1udWxsLHRoaXMuZXJyb3JJY29uPSc8''@;'; put 'put ''Y2xyLWljb24gY2xhc3M9ImlzLWVycm9yIiBzaGFwZT0iZXhjbGFtYXRpb24tY2lyY2xlIiBzaXplPSIyNiI+PC9jbHItaWNvbj4nLHRoaXMubGljZW5jZUtleVZhbHVlPSIiLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPSIiLHRoaXMua2V5Rm9ybWF0PSJjb21iaW5lZCIsdGhpcy5jb21iaW5l''@;'; put 'put ''ZEtleVZhbHVlPSIiLHRoaXMuYXBwbHlpbmdLZXlzPSExLHRoaXMucHJvdG9jb2w9Imh0dHBzOiI9PT1sb2NhdGlvbi5wcm90b2NvbD8iSFRUUFMgLSBzZWN1cmUgY29ubmVjdGlvbiI6IkhUVFAgLSBpbnNlY3VyZSBjb25uZWN0aW9uIix0aGlzLnN5c3NpdGU9dGhpcy5hcHBTZXJ2aWNlLnN5''@;'; put 'put ''c3NpdGUsdGhpcy5jdXJyZW50TGljZW5jZUtleT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VLZXksdGhpcy5jdXJyZW50QWN0aXZhdGlvbktleT10aGlzLmxpY2VuY2VTZXJ2aWNlLmFjdGl2YXRpb25LZXksdGhpcy5pc0FwcEZyZWVUaWVyPXRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBG''@;'; put 'put ''cmVlVGllcix0aGlzLmxpY2Vuc2VLZXlEYXRhPW51bGwsdGhpcy5pbnB1dFR5cGU9ImZpbGUiLHRoaXMubGljZW5jZUZpbGVMb2FkaW5nPSExLHRoaXMubGljZW5jZWZpbGU9e2ZpbGVuYW1lOiIifSx0aGlzLmxpY2Vuc2VFcnJvcnM9e21pc3Npbmc6dGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2Vj''@;'; put 'put ''dXJpdHlUcnVzdEh0bWwoYCR7dGhpcy5lcnJvckljb259IExpY2VuY2Uga2V5IGlzIG1pc3NpbmcgLSBwbGVhc2UgY29udGFjdCA8YSBjbGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwv''@;'; put 'put ''YT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuYCksZXhwaXJlZDp0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChgJHt0aGlzLmVycm9ySWNvbn0gTGljZW5jZSBrZXkgaXMgZXhwaXJlZCAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIgaHJl''@;'; put 'put ''Zj0ibWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFsaWQga2V5cyBiZWxvdy5gKSxpbnZhbGlkOnRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGAke3RoaXMuZXJyb3JJY29ufSBM''@;'; put 'put ''aWNlbmNlIGtleSBpcyBpbnZhbGlkIC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93LmApLG1p''@;'; put 'put ''c3NtYXRjaDp0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChgJHt0aGlzLmVycm9ySWNvbn0gWW91ciBTWVNTSVRFIChiZWxvdykgaXMgbm90IGZvdW5kIGluIHRoZSBsaWNlbmNlIGtleSAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIgaHJlZj0i''@;'; put 'put ''bWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFsaWQga2V5cyBiZWxvdy5gKX19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VLZXlWYWx1ZT10aGlzLmN1cnJlbnRMaWNlbmNlS2V5fHwiIix0aGlzLmFjdGl2''@;'; put 'put ''YXRpb25LZXlWYWx1ZT10aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5fHwiIix0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShyPT57dGhpcy5rZXlFcnJvcj1yLmVycm9yLHRoaXMubWlzc21hdGNoZWRLZXk9ci5taXNzbWF0Y2hJZCxyLmRldGFpbHMmJih0aGlzLmVycm9yRGV0YWls''@;'; put 'put ''cz1hdG9iKHIuZGV0YWlscykpfSksdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHI9PntsZXQgaT1yLmFjdGlvbjtpJiZPYmplY3QudmFsdWVzKFFaZSkuaW5jbHVkZXMoaSkmJih0aGlzLmFjdGlvbj1pKX0pLHRoaXMubGljZW5zZUtleURhdGE9dGhpcy5saWNlbmNlU2VydmljZS5nZXRM''@;'; put 'put ''aWNlbnNlS2V5RGF0YSgpfXRyaW1LZXlzKCl7dmFyIHI9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7ci5saWNlbmNlS2V5VmFsdWU9ci5saWNlbmNlS2V5VmFsdWUudHJpbSgpLHIuYWN0aXZhdGlvbktleVZhbHVlPXIuYWN0aXZhdGlvbktleVZhbHVlLnRyaW0oKSx5aWVsZCByLm1heWJl''@;'; put 'put ''U3BsaXRDb21iaW5lZEtleShyLmxpY2VuY2VLZXlWYWx1ZSkseWllbGQgci5yZWZyZXNoS2V5UHJldmlldygpfSkoKX1vbkNvbWJpbmVkS2V5SW5wdXQoKXt2YXIgcj10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtyLmNvbWJpbmVkS2V5VmFsdWU9ci5jb21iaW5lZEtleVZhbHVlLnRyaW0o''@;'; put 'put ''KSwoeWllbGQgci5tYXliZVNwbGl0Q29tYmluZWRLZXkoci5jb21iaW5lZEtleVZhbHVlKSl8fChyLmxpY2VuY2VLZXlWYWx1ZT0iIixyLmFjdGl2YXRpb25LZXlWYWx1ZT0iIikseWllbGQgci5yZWZyZXNoS2V5UHJldmlldygpfSkoKX1yZWZyZXNoS2V5UHJldmlldygpe3ZhciByPXRoaXM7''@;'; put 'put ''cmV0dXJuIENyKGZ1bmN0aW9uKigpe2lmKHIubGljZW5jZUtleVZhbHVlJiZyLmFjdGl2YXRpb25LZXlWYWx1ZSl0cnl7ci5saWNlbnNlS2V5RGF0YT15aWVsZCByLmxpY2VuY2VTZXJ2aWNlLmRlY3J5cHRMaWNlbnNlS2V5KHIubGljZW5jZUtleVZhbHVlLHIuYWN0aXZhdGlvbktleVZhbHVl''@;'; put 'put ''KX1jYXRjaHtyLmxpY2Vuc2VLZXlEYXRhPW51bGx9ZWxzZSByLmxpY2Vuc2VLZXlEYXRhPW51bGx9KSgpfXRvZ2dsZUtleUZvcm1hdCgpe3RoaXMua2V5Rm9ybWF0PSJjb21iaW5lZCI9PT10aGlzLmtleUZvcm1hdD8ibGVnYWN5IjoiY29tYmluZWQifW1heWJlU3BsaXRDb21iaW5lZEtleShy''@;'; put 'put ''KXt2YXIgaT10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtpZighVVplKHIpKXJldHVybiExO2NvbnN0IG89eWllbGQgamxuKHIpO3JldHVybiEhbyYmKGkubGljZW5jZUtleVZhbHVlPW8ubGljZW5jZUtleSxpLmFjdGl2YXRpb25LZXlWYWx1ZT1vLmFjdGl2YXRpb25LZXksITApfSkoKX1j''@;'; put 'put ''b3B5U3lzc2l0ZShyLGksbyl7Y29uc3QgYT1vLmpvaW4oIlxuIik7bmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoYSkudGhlbigoKT0+e3Iuc2V0QXR0cmlidXRlKCJzaGFwZSIsImNoZWNrIiksci5zZXRBdHRyaWJ1dGUoImNsYXNzIiwiaXMtc3VjY2VzcyIpLGkuaW5uZXJUZXh0PSJD''@;'; put 'put ''b3BpZWQhIixzZXRUaW1lb3V0KCgpPT57ci5zZXRBdHRyaWJ1dGUoInNoYXBlIiwiY29weSIpLHIucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpLGkuaW5uZXJUZXh0PSJDb3B5IHRvIGNsaXBib2FyZCJ9LDFlMyl9KX1hcHBseUtleXMoKXt0aGlzLmFwcGx5aW5nS2V5cz0hMCx0aGlzLnNhc1Nl''@;'; put 'put ''cnZpY2UucmVxdWVzdCgiYWRtaW4vcmVnaXN0ZXJrZXkiLHtrZXl1cGxvYWQ6W3tBQ1RJVkFUSU9OX0tFWTp0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZSxMSUNFTkNFX0tFWTp0aGlzLmxpY2VuY2VLZXlWYWx1ZX1dfSkudGhlbihpPT57aS5hZGFwdGVyUmVzcG9uc2UucmV0dXJuJiZpLmFkYXB0''@;'; put 'put ''ZXJSZXNwb25zZS5yZXR1cm5bMF0mJiJTVUNDRVNTIj09PWkuYWRhcHRlclJlc3BvbnNlLnJldHVyblswXS5NU0cmJnRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi8iKS50aGVuKCgpPT57d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpfSl9KS5maW5hbGx5KCgpPT57dGhpcy5hcHBseWluZ0tl''@;'; put 'put ''eXM9ITF9KX1vbkZpbGVDYXB0dXJlKHIsaT0hMSl7dmFyIG89dGhpcztsZXQgYT1pP3JbMF06ci50YXJnZXQuZmlsZXNbMF07aWYodGhpcy5saWNlbmNlZmlsZS5maWxlbmFtZT1hLm5hbWUsIWEpcmV0dXJuO3RoaXMubGljZW5jZUZpbGVMb2FkaW5nPSEwO2NvbnN0IGw9bmV3IEZpbGVSZWFk''@;'; put 'put ''ZXI7bC5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgdT1DcihmdW5jdGlvbiooZyl7aWYoby5saWNlbmNlRmlsZUVycm9yPSJFcnJvciByZWFkaW5nIGZpbGUuIiwhZ3x8IWcudGFyZ2V0fHwyIT1nLnRhcmdldC5yZWFkeVN0YXRlfHxnLnRhcmdldC5lcnJvcnx8IWcudGFyZ2V0LnJlc3VsdClyZXR1''@;'; put 'put ''cm47by5saWNlbmNlRmlsZUxvYWRpbmc9ITEsby5saWNlbmNlRmlsZUVycm9yPXZvaWQgMDtjb25zdCBFPWcudGFyZ2V0LnJlc3VsdC50b1N0cmluZygpLnRyaW0oKS5zcGxpdCgiXG4iKTsoMSE9PUUubGVuZ3RofHwhKHlpZWxkIG8ubWF5YmVTcGxpdENvbWJpbmVkS2V5KEVbMF0pKSkmJihv''@;'; put 'put ''LmFjdGl2YXRpb25LZXlWYWx1ZT1FWzFdLG8ubGljZW5jZUtleVZhbHVlPUVbMF0pLHlpZWxkIG8ucmVmcmVzaEtleVByZXZpZXcoKX0pO3JldHVybiBmdW5jdGlvbihnKXtyZXR1cm4gdS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGwucmVhZEFzVGV4dChhKX1zd2l0Y2hUeXBlKHIpe3Ro''@;'; put 'put ''aXMuaW5wdXRUeXBlPXJ9Z2V0IGRpc2FibGVBcHBseUJ1dHRvbigpe3JldHVybiEhKHRoaXMubGljZW5jZUtleVZhbHVlLmxlbmd0aDwxfHx0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZS5sZW5ndGg8MXx8dGhpcy5saWNlbmNlS2V5VmFsdWU9PT10aGlzLmN1cnJlbnRMaWNlbmNlS2V5JiZ0aGlz''@;'; put 'put ''LmFjdGl2YXRpb25LZXlWYWx1ZT09PXRoaXMuY3VycmVudEFjdGl2YXRpb25LZXl8fHRoaXMucHJvdG9jb2xNaXNtYXRjaCl9Z2V0IHByb3RvY29sTWlzbWF0Y2goKXtyZXR1cm4oKG4sZSx0KT0+e2NvbnN0IHI9dGhpcy5saWNlbmNlS2V5VmFsdWUudHJpbSgpLGk9ZS50cmltKCk7aWYoIXJ8''@;'; put 'put ''fCFpKXJldHVybiBudWxsO2NvbnN0IG89ciE9PWk7cmV0dXJuIG8mJiF0PyJyZXF1aXJlc0h0dHBzIjohbyYmdD8icmVxdWlyZXNIdHRwIjpudWxsfSkoMCx0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZSwhKCF3aW5kb3cuY3J5cHRvfHwhd2luZG93LmNyeXB0by5zdWJ0bGUpKX1nZXQgZW5hYmxl''@;'; put 'put ''ZEZlYXR1cmVzKCl7cmV0dXJuKG49PntpZighbilyZXR1cm5bXTtjb25zdCBlPXZ3ZShuKTtyZXR1cm4gVWxuLmZpbHRlcigoe2tleTp0fSk9PmVbdF0pLm1hcCgoe2xhYmVsOnR9KT0+dCl9KSh0aGlzLmxpY2Vuc2VLZXlEYXRhPy5mZWF0dXJlcyl9c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSkoemUocDEpLHplKHZjKSx6ZShGMiksemUoaWMpLHplKHV6KSx6ZShiYmUpKX0sdGhpcy5cdTAyNzVjbXA9UHIoe3R5cGU6ZSxzZWxlY3RvcnM6W1siYXBwLWxpY2Vuc2luZyJdXSxzdGFuZGFsb25lOiExLGRlY2xzOjIsdmFyczoy''@;'; put 'put ''LGNvbnN0czpbWyJjb3B5SWNvbiIsIiJdLFsiY29weVRvb2x0aXAiLCIiXSxbImxpY2VuY2VGaWxlIiwiIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtYmxvY2siLDMsIm5nU3dpdGNoIl0sWzEsImNh''@;'; put 'put ''cmQtdGV4dCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbMSwibS0wIiwibXQtMTAiXSxbMSwibS0wIl0sWzMsIm1pc3NrZXkiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtdG9wLXJpZ2h0IiwzLCJjbGljayJdLFsic2hhcGUiLCJjb3B5Iiwi''@;'; put 'put ''c2l6ZSIsIjE1IiwxLCJjdXJzb3ItcG9pbnRlciJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbImNsclRhYkxpbmsiLCIiXSxbInR5cGUiLCJmaWxlIiwiaGlkZGVuIiwiIiwzLCJjaGFuZ2UiXSxbImFwcEZpbGVEcm9wIiwiIiwxLCJkcm9wLWFyZWEiLDMsImNsaWNrIiwiZmlsZURyb3AiXSxb''@;'; put 'put ''ImNsYXNzIiwic3Bpbm5lci1zbSIsNCwibmdJZiJdLFsiY2xhc3MiLCJrZXktZGV0YWlscyIsNCwibmdJZiJdLFsxLCJjYXJkLWZvb3RlciIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJhcHBseS1rZXlzIiwzLCJjbGljayIsImNs''@;'; put 'put ''ckxvYWRpbmciLCJkaXNhYmxlZCJdLFsicm91dGVyTGluayIsIi8iLCJjbGFzcyIsImJ0biBidG4tc20gYnRuLWxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwia2V5LWVycm9yIHByb3RvY29sLW1pc21hdGNoLXdhcm5pbmciLDQsIm5nSWYiXSxbImNsYXNzIiwia2V5LWVycm9yIiw0LCJuZ0lm''@;'; put 'put ''Il0sWyJjbGFzcyIsImtleS1lcnJvciIsMywiaW5uZXJIVE1MIiw0LCJuZ0lmIl0sWzEsImtleS1lcnJvciJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzaXplIiwiMjYiLDEsImlzLWVycm9yIl0sWzEsImtleS1lcnJvciIsMywiaW5uZXJIVE1MIl0sWyJjbGFzc2VzIiwiY29s''@;'; put 'put ''b3ItZ3JlZW4iXSxbMSwic3Bpbm5lci1zbSJdLFsxLCJjbHItZm9ybSIsImNvbWJpbmVkLWtleS1mb3JtIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsibmFtZSIsImNvbWJpbmVkLWtleS1hcmVhIiwicGxhY2Vob2xkZXIiLCJQYXN0ZSBsaWNlbmNlIGtleSBoZXJlIiwxLCJjbHIt''@;'; put 'put ''dGV4dGFyZWEiLDMsIm5nTW9kZWxDaGFuZ2UiLCJtb3VzZWxlYXZlIiwibmdNb2RlbCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLCJwLTAiLDMsImNsaWNrIl0sWzEsImNsci1mb3JtIiwibGljZW5zZS1rZXktZm9ybSJdLFsibmFtZSIsImxpY2Vuc2Ut''@;'; put 'put ''a2V5LWFyZWEiLCJwbGFjZWhvbGRlciIsIlBhc3RlIGxpY2VuY2Uga2V5IGhlcmUiLDEsImNsci10ZXh0YXJlYSIsMywibmdNb2RlbENoYW5nZSIsIm1vdXNlbGVhdmUiLCJuZ01vZGVsIl0sWzEsImNsci1mb3JtIiwiYWN0aXZhdGlvbi1rZXktZm9ybSJdLFsibmFtZSIsImFjdGl2YXRpb24t''@;'; put 'put ''a2V5LWFyZWEiLCJwbGFjZWhvbGRlciIsIlBhc3RlIGFjdGl2YXRpb24ga2V5IGhlcmUiLDEsImNsci10ZXh0YXJlYSIsMywibmdNb2RlbENoYW5nZSIsIm1vdXNlbGVhdmUiLCJuZ01vZGVsIl0sWzEsImtleS1kZXRhaWxzIl0sWyJjZHMtdGV4dCIsInN1YnNlY3Rpb24iLDEsIm10LTE1Iiwi''@;'; put 'put ''bWItMTAiXSxbImNsYXNzIiwibS0wIiw0LCJuZ0lmIl0sWyJyb3V0ZXJMaW5rIiwiLyIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiXSxbMSwia2V5LWVycm9yIiwicHJvdG9jb2wtbWlzbWF0Y2gtd2FybmluZyJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi10cmlhbmdsZSIsInNpemUiLCIy''@;'; put 'put ''NiIsMSwiY29sb3Itb3JhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGksbyl7MSZpJiZZbigwLEljbiw0NSwxNiwiZGl2IiwzKSgxLERjbiwxLDAsImFwcC10ZXJtcyIsNCksMiZpJiYocnQoIm5nSWYiLCJyZWdpc3RlciIhPT1vLmFjdGlvbiksaWUoKSxydCgibmdJZiIsInJlZ2lzdGVyIj09''@;'; put 'put ''PW8uYWN0aW9uKSl9LGRlcGVuZGVuY2llczpbUmYsWXMsQUUsU1UsTGIsbHUsb2MsSWIsWGwsZDQsY3UsJDAsaW0seHYsa3YsJGIsQXYsVHYsWmIsejIsUDIsY2NuLF9XXSxzdHlsZXM6WyIua2V5LWVycm9yIGNsci1pY29ue3ZlcnRpY2FsLWFsaWduOmJvdHRvbTttYXJnaW4tcmlnaHQ6MTBw''@;'; put 'put ''eH1cbiJdLGVuY2Fwc3VsYXRpb246Mn0pKX1yZXR1cm4gbigpLGV9KSgpLGNhbkFjdGl2YXRlOlskbWVdLGNhbkRlYWN0aXZhdGU6WyRtZV19XTtsZXQgT2NuPSgoKT0+e3ZhciBuO2NsYXNzIGV7c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXco''@;'; put 'put ''aXx8ZSl9LHRoaXMuXHUwMjc1bW9kPUdpKHt0eXBlOmV9KSx0aGlzLlx1MDI3NWluaj1taSh7aW1wb3J0czpbV2QuZm9yQ2hpbGQoTGNuKSxXZF19KSl9cmV0dXJuIG4oKSxlfSkoKSxOY249KCgpPT57dmFyIG47Y2xhc3MgZXtzdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oaSl7cmV0dXJuIG5ldyhpfHxlKX0sdGhpcy5cdTAyNzVtb2Q9R2koe3R5cGU6ZX0pLHRoaXMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltxbyxoZCxxMCxPY24sJHhdfSkpfXJldHVybiBuKCksZX0pKCk7Y29uc3QgRmNuPSgpPT4oe3N0YW5kYWxvbmU6ITB9KSxKWmU9KG4sZSx0KT0+KHth''@;'; put 'put ''ZGRlZFJvdzpuLGRlbGV0ZWRSb3c6ZSx1cGRhdGVkUm93OnR9KSxlR2U9bj0+KHsiY2ggdG9vbHRpcCB0b29sdGlwLW1kIHRvb2x0aXAtdG9wLXJpZ2h0IjpufSk7ZnVuY3Rpb24gUGNuKG4sZSl7aWYoMSZuJiYoSigwLCJ0ZCIsMTUpLFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgpLiRp''@;'; put 'put ''bXBsaWNpdCxyPVRlKCk7cnQoInJvdXRlckxpbmsiLCIvc3RhZ2UvIityLmpzUGFyYW1zW3RdKSxpZSgpLFNyKCIgIixyLmpzUGFyYW1zW3RdLCIgIil9fWZ1bmN0aW9uIEhjbihuLGUpe2lmKDEmbiYmKEooMCwidGQiLDQpLFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgpLiRpbXBsaWNp''@;'; put 'put ''dCxyPVRlKCk7aWUoKSxTcigiICIsci5qc1BhcmFtc1t0XSwiICIpfX1mdW5jdGlvbiBWY24obixlKXtpZigxJm4mJihKKDAsInRyIikoMSwidGQiLDQpLFNlKDIpLHRlKCksdnQoMyxQY24sMiwyLCJ0ZCIsMTUpLHZ0KDQsSGNuLDIsMSwidGQiLDQpLHRlKCkpLDImbil7Y29uc3QgdD1lLiRp''@;'; put 'put ''bXBsaWNpdDtpZSgyKSxwcih0KSxpZSgpLF90KHQuaW5jbHVkZXMoIlRBQkxFX0lEIik/MzotMSksaWUoKSxfdCh0LmluY2x1ZGVzKCJUQUJMRV9JRCIpPy0xOjQpfX1mdW5jdGlvbiBCY24obixlKXtpZigxJm4mJihKKDAsInRyIikoMSwidGQiLDQpLFNlKDIpLHRlKCksSigzLCJ0ZCIsNCks''@;'; put 'put ''U2UoNCksdGUoKSgpKSwyJm4pe2NvbnN0IHQ9ZS4kaW1wbGljaXQscj1UZSgzKTtpZSgyKSxwcih0KSxpZSgyKSxwcihyLnN1Ym1pdERldGFpbHNbdF0pfX1mdW5jdGlvbiBqY24obixlKXtpZigxJm4mJihKKDAsImNsci10YWItY29udGVudCIpKDEsImRpdiIsMTgpKDIsInRhYmxlIiwzKSgz''@;'; put 'put ''LCJ0aGVhZCIpKDQsInRyIikoNSwidGgiLDQpLFNlKDYsIk5hbWUiKSx0ZSgpLEooNywidGgiLDQpLFNlKDgsIlZhbHVlIiksdGUoKSgpKCksSig5LCJ0Ym9keSIpLF9vKDEwLEJjbiw1LDIsInRyIixudWxsLENvKSx0ZSgpKCkoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoMik7aWUoMTApLHlvKHQu''@;'; put 'put ''c3VibWl0QXJyKX19ZnVuY3Rpb24gVWNuKG4sZSl7aWYoMSZuJiYoSigwLCJ0ciIpKDEsInRkIiw0KSxTZSgyKSx0ZSgpLEooMywidGQiLDQpLFNlKDQpLHRlKCkoKSksMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0LHI9VGUoMik7aWUoMikscHIodCksaWUoMikscHIoci5qc1BhcmFtc1t0XSl9''@;'; put 'put ''fWZ1bmN0aW9uIHpjbihuLGUpe2lmKDEmbiYmKEooMCwiY2xyLXRhYnMiKSgxLCJjbHItdGFiIikoMiwiYnV0dG9uIiwxNiksU2UoMywiU3VibWl0dGVkIFRhYmxlIERldGFpbHMiKSx0ZSgpLFluKDQsamNuLDEyLDAsImNsci10YWItY29udGVudCIsMTcpLHRlKCksSig1LCJjbHItdGFiIiko''@;'; put 'put ''NiwiYnV0dG9uIiwxNiksU2UoNywiQmFzZSBUYWJsZSBEZXRhaWxzIiksdGUoKSxKKDgsImNsci10YWItY29udGVudCIpKDksImRpdiIsMTgpKDEwLCJ0YWJsZSIsMykoMTEsInRoZWFkIikoMTIsInRyIikoMTMsInRoIiw0KSxTZSgxNCwiTmFtZSIpLHRlKCksSigxNSwidGgiLDQpLFNlKDE2''@;'; put 'put ''LCJWYWx1ZSIpLHRlKCkoKSgpLEooMTcsInRib2R5IiksX28oMTgsVWNuLDUsMiwidHIiLG51bGwsQ28pLHRlKCkoKSgpKCkoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSg0KSxydCgiY2xySWZBY3RpdmUiLCEwKSxpZSgxNCkseW8odC5rZXlzQXJyYXkpfX1mdW5jdGlvbiBXY24obixlKXsx''@;'; put 'put ''Jm4mJihKKDAsInAiLDM4KSxTZSgxLCIgVGhlcmUgYXJlIG5vIGRldGFpbHMgdG8gc2hvdyAiKSx0ZSgpKX1mdW5jdGlvbiBZY24obixlKXtpZigxJm4mJihKKDAsImRpdiIsNjMpKDEsInNwYW4iKSxTZSgyLCJUYWJsZSBJZDoiKSx0ZSgpLEooMywic3Ryb25nIiw2NCksU2UoNCksdGUoKSgp''@;'; put 'put ''LEooNSwiZGl2IikoNiwic3BhbiIpLFNlKDcsIlN1Ym1pdHRlcjoiKSx0ZSgpLEooOCwic3BhbiIsNjUpLFNlKDkpLHRlKCkoKSxKKDEwLCJkaXYiKSgxMSwic3BhbiIpLFNlKDEyLCJTdWJtaXR0ZWQgb246IiksdGUoKSxKKDEzLCJzcGFuIiw2NSksU2UoMTQpLHRlKCkoKSxKKDE1LCJkaXYi''@;'; put 'put ''KSgxNiwic3BhbiIpLFNlKDE3LCJTdWJtaXR0ZWQgUmVhc29uOiIpLHRlKCksSigxOCwic3BhbiIsNjUpLFNlKDE5KSx0ZSgpKCkpLDImbil7Y29uc3QgdD1UZSg1KTtpZSgzKSxydCgicm91dGVyTGluayIsIi9zdGFnZS8iKyhudWxsPT10LnRhYmxlRGV0YWlscz9udWxsOnQudGFibGVEZXRh''@;'; put 'put ''aWxzLlRBQkxFX0lEKSksaWUoKSxTcigiICIsbnVsbD09dC50YWJsZURldGFpbHM/bnVsbDp0LnRhYmxlRGV0YWlscy5UQUJMRV9JRCwiICIpLGllKDUpLFNyKCIgIixudWxsPT10LnRhYmxlRGV0YWlscz9udWxsOnQudGFibGVEZXRhaWxzLlNVQk1JVFRFRF9CWV9OTSwiICIpLGllKDUpLFNy''@;'; put 'put ''KCIgIixudWxsPT10LnRhYmxlRGV0YWlscz9udWxsOnQudGFibGVEZXRhaWxzLlNVQk1JVFRFRF9PTl9EVFRNLCIgIiksaWUoNSksU3IoIiAiLG51bGw9PXQudGFibGVEZXRhaWxzP251bGw6dC50YWJsZURldGFpbHMuU1VCTUlUVEVEX1JFQVNPTl9UWFQsIiAiKX19ZnVuY3Rpb24gWmNuKG4s''@;'; put 'put ''ZSl7MSZuJiYoSigwLCJzcGFuIiw1NyksSXQoMSwiY2xyLWljb24iLDY2KSxTZSgyLCIgT25seSB0aGUgZmlyc3QgMTAwIGluc2VydHMsIHVwZGF0ZXMgb3IgZGVsZXRlcyBhcmUgZGlzcGxheWVkICIpLHRlKCkpfWZ1bmN0aW9uIEdjbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwi''@;'; put 'put ''ZGl2IiwzNSkoMSwiZGl2Iiw0MSkoMiwiZGl2Iiw0MiksdnQoMyxXY24sMiwwLCJwIiwzOCksdnQoNCxZY24sMjAsNSksdGUoKSxKKDUsImRpdiIsNDMpKDYsImRpdiIsNDQpKDcsImRpdiIsNDUpKDgsImRpdiIsNDYpKDksImJ1dHRvbiIsNDcpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtZZSh0''@;'; put 'put ''KTtjb25zdCBpPVRlKDQpO3JldHVybiBYZShpLmdvVG9CYXNlKG51bGw9PWkuanNQYXJhbXM/bnVsbDppLmpzUGFyYW1zLlRBQkxFX05NKSl9KSxTZSgxMCwiIFZpZXcgYmFzZSB0YWJsZSAiKSx0ZSgpLEooMTEsImJ1dHRvbiIsNDgpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtZZSh0KTtjb25z''@;'; put 'put ''dCBpPVRlKDQpO3JldHVybiBYZShpLmdldFRhYmxlKGkudGFibGVJZCkpfSksU2UoMTIsIiBWaWV3IHN0YWdlZCBkYXRhICIpLHRlKCksSigxMywiYnV0dG9uIiw0OSksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoNCk7cmV0dXJuIFhlKGkuZ29CYWNrKG51bGw9PWku''@;'; put 'put ''anNQYXJhbXM/bnVsbDppLmpzUGFyYW1zLlRBQkxFX05NKSl9KSxTZSgxNCwiIEVkaXQgYmFzZSB0YWJsZSAiKSx0ZSgpKCkoKSgpLEooMTUsImRpdiIsNTApKDE2LCJidXR0b24iLDUxKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKDQpLmFwcHJvdmVUYWJsZSgp''@;'; put 'put ''KX0pLFNlKDE3LCIgQUNDRVBUICIpLHRlKCksSigxOCwiYnV0dG9uIiw1Miksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSg0KS5yZWplY3RPcGVuPSEwKX0pLFNlKDE5LCIgUkVKRUNUICIpLHRlKCksSigyMCwiY2xyLXRvZ2dsZS1jb250YWluZXIiLDUzKSgyMSwi''@;'; put 'put ''Y2xyLXRvZ2dsZS13cmFwcGVyIikoMjIsImlucHV0Iiw1NCksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoNCk7cmV0dXJuIGZpKG8uZm9ybWF0dGVkVmFsdWVzLGkpfHwoby5mb3JtYXR0ZWRWYWx1ZXM9aSksWGUoaSl9KSx3dCgiY2hhbmdlIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBZZSh0KSxYZShUZSg0KS5mb3JtYXR0aW5nQ2hhbmdlZCgpKX0pLHRlKCksSigyMywibGFiZWwiLDU1KSxTZSgyNCksdGUoKSgpKCkoKSxKKDI1LCJkaXYiLDU2KSx2dCgyNixaY24sMywwLCJzcGFuIiw1NyksSigyNywiZGl2IiwyNCkoMjgsImRpdiIsNTgpKDI5LCJz''@;'; put 'put ''cGFuIiw1OSksU2UoMzAsIiBDaGFuZ2VkIFJvd3MgIiksSigzMSwic3BhbiIsNjApLFNlKDMyKSx0ZSgpKCksSigzMywic3BhbiIsNjEpLFNlKDM0LCIgQWRkZWQgUm93cyAiKSxKKDM1LCJzcGFuIiw2MCksU2UoMzYpLHRlKCkoKSxKKDM3LCJzcGFuIiw2MiksU2UoMzgsIiBEZWxldGVkIFJv''@;'; put 'put ''d3MgIiksSigzOSwic3BhbiIsNjApLFNlKDQwKSx0ZSgpKCkoKSgpKCkoKSgpKCl9aWYoMiZuKXtjb25zdCB0PVRlKDQpO2llKDMpLF90KHQudGFibGVEZXRhaWxzPy0xOjMpLGllKCksX3QodC50YWJsZURldGFpbHM/NDotMSksaWUoMTIpLHJ0KCJjbHJMb2FkaW5nIix0LmFjY2VwdExvYWRp''@;'; put 'put ''bmcpKCJkaXNhYmxlZCIsIXQubG9hZGluZ1RhYmxlfHwiTk8iPT09KG51bGw9PXQucGFyYW1zP251bGw6dC5wYXJhbXMuSVNBUFBST1ZFUil8fHQubm9DaGFuZ2VzKSxpZSgyKSxydCgiZGlzYWJsZWQiLCF0LmxvYWRpbmdUYWJsZXx8Ik5PIj09PShudWxsPT10LnBhcmFtcz9udWxsOnQucGFy''@;'; put 'put ''YW1zLklTQVBQUk9WRVIpfHx0Lm5vQ2hhbmdlcyksaWUoNCksZGkoIm5nTW9kZWwiLHQuZm9ybWF0dGVkVmFsdWVzKSxpZSgyKSxwcih0LmZvcm1hdHRlZFZhbHVlcz8iRm9ybWF0dGVkIjoiVW5mb3JtYXR0ZWQiKSxpZSgyKSxfdCh0LmRpZmZzTGltaXQ/MjY6LTEpLGllKDYpLHByKHQubGVu''@;'; put 'put ''cy51cGRhdGVkKSxpZSg0KSxwcih0LmxlbnMubmV3KSxpZSg0KSxwcih0LmxlbnMuZGVsZXRlZCl9fWZ1bmN0aW9uICRjbihuLGUpezEmbiYmKEooMCwiZGl2Iiw2NSkoMSwicCIsNjgpLFNlKDIsIkxvYWRpbmcgdGFibGUiKSx0ZSgpKCkpfWZ1bmN0aW9uIHFjbihuLGUpe2lmKDEmbiYmKEoo''@;'; put 'put ''MCwiZGl2IiwzNikoMSwic3BhbiIsNjcpLFNlKDIsIiBMb2FkaW5nLi4uICIpLHRlKCksdnQoMywkY24sMywwLCJkaXYiLDY1KSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoNCk7aWUoMyksX3QodC5sb2FkaW5nVGFibGU/LTE6Myl9fWZ1bmN0aW9uIEtjbihuLGUpezEmbiYmKEooMCwicCIsMzgp''@;'; put 'put ''LFNlKDEsIiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBzaG93ICIpLHRlKCkpfWZ1bmN0aW9uIFhjbihuLGUpe2lmKDEmbiYmKEooMCwidGgiLDQpLFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdDtpZSgpLHByKHQpfX1mdW5jdGlvbiBRY24obixlKXtpZigxJm4mJihKKDAs''@;'; put 'put ''InNwYW4iLDcwKSxTZSgxKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoKS4kaW5kZXgscj1UZSgyKS4kaW5kZXgsaT1UZSg0KTtpZSgpLFNyKCJPcmlnaW5hbCB2YWx1ZSBpczogIixpLmFyck9mQ2hhbmdlc1tyXVt0XSl9fWZ1bmN0aW9uIEpjbihuLGUpe2lmKDEmbiYmKEooMCwidGQiLDY5KSxT''@;'; put 'put ''ZSgxKSx2dCgyLFFjbiwyLDEsInNwYW4iLDcwKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9ZS4kaW1wbGljaXQscj1lLiRpbmRleCxpPVRlKDIpLiRpbmRleCxvPVRlKDQpO3J0KCJuZ0NsYXNzIix0NCgzLGVHZSwxPT1vLmFyckNoYW5nZWRbaV1bcl0mJiJ1cGRhdGVkIj09by5jaEFycltpXSkpLGll''@;'; put 'put ''KCksU3IoIiAiLG8uZGlmZlRhYmxlLmRhdGFbaV1bdF0sIiAiKSxpZSgpLF90KDE9PW8uYXJyQ2hhbmdlZFtpXVtyXSYmInVwZGF0ZWQiPT1vLmNoQXJyW2ldPzI6LTEpfX1mdW5jdGlvbiBldW4obixlKXtpZigxJm4mJl9vKDAsSmNuLDMsNSwidGQiLDY5LENvKSwyJm4pe2NvbnN0IHQ9VGUo''@;'; put 'put ''KS4kaW5kZXg7eW8oVGUoNCkucm93S2V5c1t0XSl9fWZ1bmN0aW9uIHR1bihuLGUpe2lmKDEmbiYmKEooMCwidGQiLDQpLFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdCxyPVRlKDIpLiRpbmRleCxpPVRlKDQpO2llKCksU3IoIiAiLGkuZGlmZlRhYmxlLmRhdGFbcl1bdF0s''@;'; put 'put ''IiAiKX19ZnVuY3Rpb24gbnVuKG4sZSl7aWYoMSZuJiZfbygwLHR1biwyLDEsInRkIiw0LENvKSwyJm4pe2NvbnN0IHQ9VGUoKS4kaW5kZXg7eW8oVGUoNCkucm93S2V5c1t0XSl9fWZ1bmN0aW9uIHJ1bihuLGUpe2lmKDEmbiYmKEooMCwidHIiLDQwKSx2dCgxLGV1biwyLDApLHZ0KDIsbnVu''@;'; put 'put ''LDIsMCksdGUoKSksMiZuKXtjb25zdCB0PWUuJGluZGV4LHI9VGUoNCk7cnQoIm5nQ2xhc3MiLHRJKDMsSlplLCJhZGRlZCI9PXIuY2hBcnJbdF0sImRlbGV0ZWQiPT1yLmNoQXJyW3RdLCJ1cGRhdGVkIj09ci5jaEFyclt0XSkpLGllKCksX3QoInVwZGF0ZWQiPT09ci5jaEFyclt0XT8xOi0x''@;'; put 'put ''KSxpZSgpLF90KCJ1cGRhdGVkIiE9PXIuY2hBcnJbdF0/MjotMSl9fWZ1bmN0aW9uIGl1bihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiZGl2IiwyMikoMSwiZGl2IiwyMykoMiwiZGl2IiwyNCkoMywiZGl2IiwyNSkoNCwic3BhbiIsMjYpLHd0KCJjbGljayIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gWWUodCksWGUoVGUoMykuZ29Ub0FwcHJvdmFsc0xpc3QoKSl9KSxJdCg1LCJjbHItaWNvbiIsMjcpLFNlKDYsIkJhY2sgdG8gYXBwcm92YWxzIGxpc3QgIiksdGUoKSgpLEooNywiZGl2IiwyOCkoOCwiaDMiLDI5KSxTZSg5KSx0ZSgpKCksSigxMCwiZGl2IiwzMCkoMTEsImEiLDMx''@;'; put 'put ''KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKDMpLmdldERldGFpbHMoKSl9KSxJdCgxMiwiY2xyLWljb24iLDMyKSx0ZSgpKCkoKSxKKDEzLCJwIiwzMyksU2UoMTQpLHRlKCkoKSxKKDE1LCJkaXYiLDM0KSx2dCgxNixHY24sNDEsMTEsImRpdiIsMzUpLHRlKCks''@;'; put 'put ''dnQoMTcscWNuLDQsMSwiZGl2IiwzNiksSigxOCwiZGl2IiwzNyksdnQoMTksS2NuLDIsMCwicCIsMzgpLEooMjAsInRhYmxlIiwzKSgyMSwidGhlYWQiKSgyMiwidHIiLDM5KSxfbygyMyxYY24sMiwxLCJ0aCIsNCxDbyksdGUoKSgpLEooMjUsInRib2R5IiksX28oMjYscnVuLDMsNywidHIi''@;'; put 'put ''LDQwLENvKSx0ZSgpKCkoKSgpfWlmKDImbil7Y29uc3QgdD1UZSgzKTtpZSg5KSxTcigiICIsbnVsbD09dC5qc1BhcmFtcz9udWxsOnQuanNQYXJhbXMuVEFCTEVfTk0sIiAiKSxpZSg1KSxTcigiICIsbnVsbD09dC5qc1BhcmFtcz9udWxsOnQuanNQYXJhbXMuVEFCTEVfREVTQywiICIpLGll''@;'; put 'put ''KDIpLF90KHQubG9hZGVkPzE2Oi0xKSxpZSgpLF90KHQubG9hZGluZ1RhYmxlPy0xOjE3KSxpZSgyKSxfdCh0LmxvYWRpbmdUYWJsZSYmdC5ub0NoYW5nZXM/MTk6LTEpLGllKDQpLHlvKHQucm93SGVhZGVyKSxpZSgzKSx5byh0LnJvd0tleXMpfX1mdW5jdGlvbiBvdW4obixlKXtpZigxJm4m''@;'; put 'put ''JihKKDAsImRpdiIsMTkpLHZ0KDEsaXVuLDI4LDUsImRpdiIsMjIpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgyKTtpZSgpLF90KHQubG9hZGVkPzE6LTEpfX1mdW5jdGlvbiBhdW4obixlKXsxJm4mJihKKDAsInNwYW4iLDY3KSxTZSgxLCIgTG9hZGluZy4uLiAiKSx0ZSgpKX1mdW5jdGlvbiBz''@;'; put 'put ''dW4obixlKXsxJm4mJihKKDAsImRpdiIpKDEsImgzIiksU2UoMiwiTG9hZGluZyBwcmV2aWV3IiksdGUoKSgpKX1mdW5jdGlvbiBsdW4obixlKXtpZigxJm4mJihKKDAsImRpdiIsMjEpLHZ0KDEsYXVuLDIsMCwic3BhbiIsNjcpLHZ0KDIsc3VuLDMsMCwiZGl2IiksdGUoKSksMiZuKXtjb25z''@;'; put 'put ''dCB0PVRlKDIpO2llKCksX3QodC5sb2FkZWQ/LTE6MSksaWUoKSxfdCh0LmxvYWRlZD8tMToyKX19ZnVuY3Rpb24gY3VuKG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiLDE0KSx2dCgxLG91biwyLDEsImRpdiIsMTkpLEooMiwiZGl2IiwyMCksdnQoMyxsdW4sMywyLCJkaXYiLDIxKSx0ZSgpKCkp''@;'; put 'put ''LDImbil7Y29uc3QgdD1UZSgpO2llKCksX3QodC5sb2FkZWQ/MTotMSksaWUoMiksX3QodC5sb2FkZWQ/LTE6Myl9fWZ1bmN0aW9uIHV1bihuLGUpezEmbiYmKEooMCwic3BhbiIsNTcpLEl0KDEsImNsci1pY29uIiw2NiksU2UoMiwiIE9ubHkgdGhlIGZpcnN0IDEwMCBpbnNlcnRzLCB1cGRh''@;'; put 'put ''dGVzIG9yIGRlbGV0ZXMgYXJlIGRpc3BsYXllZCAiKSx0ZSgpKX1mdW5jdGlvbiBkdW4obixlKXsxJm4mJkl0KDAsImRpdiIsMzUpfWZ1bmN0aW9uIGh1bihuLGUpezEmbiYmKEooMCwiZGl2Iiw2NSkoMSwicCIsNjgpLFNlKDIsIkxvYWRpbmcgdGFibGUiKSx0ZSgpKCkpfWZ1bmN0aW9uIGZ1''@;'; put 'put ''bihuLGUpe2lmKDEmbiYmKEooMCwiZGl2Iiw4MikoMSwic3BhbiIsNjcpLFNlKDIsIiBMb2FkaW5nLi4uICIpLHRlKCksdnQoMyxodW4sMywwLCJkaXYiLDY1KSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoNCk7aWUoMyksX3QodC5sb2FkaW5nVGFibGU/LTE6Myl9fWZ1bmN0aW9uIHB1bihuLGUp''@;'; put 'put ''e2lmKDEmbiYmKEooMCwidGgiLDQpLFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdDtpZSgpLHByKHQpfX1mdW5jdGlvbiBndW4obixlKXtpZigxJm4mJihKKDAsInNwYW4iLDcwKSxTZSgxKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoKS4kaW5kZXgscj1UZSgyKS4kaW5kZXgs''@;'; put 'put ''aT1UZSg0KTtpZSgpLFNyKCJPcmlnaW5hbCB2YWx1ZSBpczogIixpLmFyck9mQ2hhbmdlc1tyXVt0XSl9fWZ1bmN0aW9uIG11bihuLGUpe2lmKDEmbiYmKEooMCwidGQiLDY5KSxTZSgxKSx2dCgyLGd1biwyLDEsInNwYW4iLDcwKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9ZS4kaW1wbGljaXQscj1l''@;'; put 'put ''LiRpbmRleCxpPVRlKDIpLiRpbmRleCxvPVRlKDQpO3J0KCJuZ0NsYXNzIix0NCgzLGVHZSwxPT1vLmFyckNoYW5nZWRbaV1bcl0mJiJ1cGRhdGVkIj09by5jaEFycltpXSkpLGllKCksU3IoIiAiLG8uZGlmZlRhYmxlLmRhdGFbaV1bdF0sIiAiKSxpZSgpLF90KDE9PW8uYXJyQ2hhbmdlZFtp''@;'; put 'put ''XVtyXSYmInVwZGF0ZWQiPT1vLmNoQXJyW2ldPzI6LTEpfX1mdW5jdGlvbiB2dW4obixlKXtpZigxJm4mJl9vKDAsbXVuLDMsNSwidGQiLDY5LENvKSwyJm4pe2NvbnN0IHQ9VGUoKS4kaW5kZXg7eW8oVGUoNCkucm93S2V5c1t0XSl9fWZ1bmN0aW9uIF91bihuLGUpe2lmKDEmbiYmKEooMCwi''@;'; put 'put ''dGQiLDQpLFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdCxyPVRlKDIpLiRpbmRleCxpPVRlKDQpO2llKCksU3IoIiAiLGkuZGlmZlRhYmxlLmRhdGFbcl1bdF0sIiAiKX19ZnVuY3Rpb24geXVuKG4sZSl7aWYoMSZuJiZfbygwLF91biwyLDEsInRkIiw0LENvKSwyJm4pe2Nv''@;'; put 'put ''bnN0IHQ9VGUoKS4kaW5kZXg7eW8oVGUoNCkucm93S2V5c1t0XSl9fWZ1bmN0aW9uIGJ1bihuLGUpe2lmKDEmbiYmKEooMCwidHIiLDQwKSx2dCgxLHZ1biwyLDApLHZ0KDIseXVuLDIsMCksdGUoKSksMiZuKXtjb25zdCB0PWUuJGluZGV4LHI9VGUoNCk7cnQoIm5nQ2xhc3MiLHRJKDMsSlpl''@;'; put 'put ''LCJhZGRlZCI9PXIuY2hBcnJbdF0sImRlbGV0ZWQiPT1yLmNoQXJyW3RdLCJ1cGRhdGVkIj09ci5jaEFyclt0XSkpLGllKCksX3QoInVwZGF0ZWQiPT09ci5jaEFyclt0XT8xOi0xKSxpZSgpLF90KCJ1cGRhdGVkIiE9PXIuY2hBcnJbdF0/MjotMSl9fWZ1bmN0aW9uIHd1bihuLGUpe2lmKDEm''@;'; put 'put ''bil7Y29uc3QgdD13bigpO0ooMCwiZGl2Iiw3MykoMSwiZGl2Iiw3NCkoMiwiZGl2IiwyNCkoMywiZGl2IiwyNSkoNCwic3BhbiIsNzUpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoMykuZ29Ub1N1Ym1pdExpc3QoKSl9KSxJdCg1LCJjZHMtaWNvbiIsNzYpLFNl''@;'; put 'put ''KDYsIkJhY2sgdG8gc3VibWl0dGVkIGxpc3QgIiksdGUoKSgpLEooNywiZGl2Iiw3NykoOCwiaDMiLDc4KSxTZSg5KSx0ZSgpKCksSigxMCwiZGl2IiwzMCkoMTEsImEiLDMxKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKDMpLnRhYmxlRmxhZz0hMCl9KSxJdCgx''@;'; put 'put ''MiwiY2xyLWljb24iLDMyKSx0ZSgpKCkoKSxKKDEzLCJwIiw3OSksU2UoMTQpLHRlKCkoKSxKKDE1LCJkaXYiLDQxKSgxNiwiZGl2Iiw0MikoMTcsImRpdiIsNjMpKDE4LCJzcGFuIiksU2UoMTksIlRhYmxlIElkOiIpLHRlKCksSigyMCwic3Ryb25nIiw2NCkoMjEsInNwYW4iKSxTZSgyMiks''@;'; put 'put ''dGUoKSgpKCksSigyMywiZGl2IikoMjQsInNwYW4iKSxTZSgyNSwiU3VibWl0dGVkIG9uOiIpLHRlKCksSigyNiwic3BhbiIsNjUpLFNlKDI3KSx0ZSgpKCksSigyOCwiZGl2IikoMjksInNwYW4iKSxTZSgzMCwiU3VibWl0IE1lc3NhZ2U6IiksdGUoKSxKKDMxLCJzcGFuIiksU2UoMzIpLHRl''@;'; put 'put ''KCkoKSgpLEooMzMsImRpdiIsNDMpKDM0LCJkaXYiLDQ0KSgzNSwiZGl2Iiw0NSkoMzYsImRpdiIsNDYpKDM3LCJidXR0b24iLDQ3KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3QgaT1UZSgzKTtyZXR1cm4gWGUoaS5nb1RvQmFzZShpLnN1Yk9iai5iYXNlKSl9KSxTZSgzOCwi''@;'; put 'put ''IFZpZXcgYmFzZSB0YWJsZSAiKSx0ZSgpLEooMzksImJ1dHRvbiIsNDgpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtZZSh0KTtjb25zdCBpPVRlKDMpO3JldHVybiBYZShpLmdldFRhYmxlKGkuc3ViT2JqLnRhYmxlSWQpKX0pLFNlKDQwLCIgVmlldyBzdGFnZWQgZGF0YSAiKSx0ZSgpLEooNDEs''@;'; put 'put ''ImJ1dHRvbiIsNDkpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtZZSh0KTtjb25zdCBpPVRlKDMpO3JldHVybiBYZShpLmdvQmFjayhpLnN1Yk9iai5iYXNlKSl9KSxTZSg0MiwiIEVkaXQgYmFzZSB0YWJsZSAiKSx0ZSgpKCkoKSgpLEooNDMsImRpdiIsNTYpLHZ0KDQ0LHV1biwzLDAsInNwYW4i''@;'; put 'put ''LDU3KSxKKDQ1LCJkaXYiLDI0KSg0NiwiZGl2Iiw1OCkoNDcsInNwYW4iLDU5KSxTZSg0OCwiIENoYW5nZWQgUm93cyAiKSxKKDQ5LCJzcGFuIiw2MCksU2UoNTApLHRlKCkoKSxKKDUxLCJzcGFuIiw2MSksU2UoNTIsIiBBZGRlZCBSb3dzICIpLEooNTMsInNwYW4iLDYwKSxTZSg1NCksdGUo''@;'; put 'put ''KSgpLEooNTUsInNwYW4iLDYyKSxTZSg1NiwiIERlbGV0ZWQgUm93cyAiKSxKKDU3LCJzcGFuIiw2MCksU2UoNTgpLHRlKCkoKSgpKCkoKSxKKDU5LCJkaXYiLDQ0KSg2MCwiY2xyLXRvZ2dsZS1jb250YWluZXIiLDgwKSg2MSwiY2xyLXRvZ2dsZS13cmFwcGVyIikoNjIsImlucHV0Iiw1NCks''@;'; put 'put ''aGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoMyk7cmV0dXJuIGZpKG8uZm9ybWF0dGVkVmFsdWVzLGkpfHwoby5mb3JtYXR0ZWRWYWx1ZXM9aSksWGUoaSl9KSx3dCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgzKS5mb3JtYXR0''@;'; put 'put ''aW5nQ2hhbmdlZCgpKX0pLHRlKCksSig2MywibGFiZWwiKSxTZSg2NCksdGUoKSgpKCkoKSgpKCksSig2NSwiZGl2Iiw4MSksdnQoNjYsZHVuLDEsMCwiZGl2IiwzNSksdGUoKSx2dCg2NyxmdW4sNCwxLCJkaXYiLDgyKSxKKDY4LCJkaXYiLDgzKSg2OSwidGFibGUiLDMpKDcwLCJ0aGVhZCIp''@;'; put 'put ''KDcxLCJ0ciIsMzkpLF9vKDcyLHB1biwyLDEsInRoIiw0LENvKSx0ZSgpKCksSig3NCwidGJvZHkiKSxfbyg3NSxidW4sMyw3LCJ0ciIsNDAsQ28pLHRlKCkoKSgpKCl9aWYoMiZuKXtjb25zdCB0PVRlKDMpO2llKDkpLFNyKCIgIix0LnN1Yk9iai5iYXNlLCIgIiksaWUoNSksU3IoIiAiLHQu''@;'; put 'put ''dGFibGVEZXNjcmlwdGlvbiwiICIpLGllKDYpLHJ0KCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIrdC5zdWJPYmoudGFibGVJZCksaWUoMiksU3IoIiAiLHQuc3ViT2JqLnRhYmxlSWQpLGllKDUpLFNyKCIgIix0LnN1Yk9iai5zdWJtaXR0ZWQsIiAiKSxpZSg1KSxTcigiICIsdC5zdWJPYmouc3Vi''@;'; put 'put ''bWl0UmVhc29uLCIgIiksaWUoMTIpLF90KHQuZGlmZnNMaW1pdD80NDotMSksaWUoNikscHIodC5sZW5zLnVwZGF0ZWQpLGllKDQpLHByKHQubGVucy5uZXcpLGllKDQpLHByKHQubGVucy5kZWxldGVkKSxpZSg0KSxkaSgibmdNb2RlbCIsdC5mb3JtYXR0ZWRWYWx1ZXMpLGllKDIpLHByKHQu''@;'; put 'put ''Zm9ybWF0dGVkVmFsdWVzPyJGb3JtYXR0ZWQiOiJVbmZvcm1hdHRlZCIpLGllKDIpLF90KHQubG9hZGVkPzY2Oi0xKSxpZSgpLF90KHQubG9hZGluZ1RhYmxlPy0xOjY3KSxpZSg1KSx5byh0LnJvd0hlYWRlciksaWUoMykseW8odC5yb3dLZXlzKX19ZnVuY3Rpb24gQ3VuKG4sZSl7aWYoMSZu''@;'; put 'put ''JiYoSigwLCJkaXYiLDcxKSx2dCgxLHd1biw3NywxNCwiZGl2Iiw3MyksdGUoKSksMiZuKXtjb25zdCB0PVRlKDIpO2llKCksX3QodC5sb2FkZWQ/MTotMSl9fWZ1bmN0aW9uIFN1bihuLGUpezEmbiYmKEooMCwiZGl2IikoMSwiaDMiKSxTZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCB0YWJsZSIp''@;'; put 'put ''LHRlKCkoKSl9ZnVuY3Rpb24gRXVuKG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiLDcyKSgxLCJkaXYiLDg0KSgyLCJzcGFuIiw2NyksU2UoMywiIExvYWRpbmcuLi4gIiksdGUoKSx2dCg0LFN1biwzLDAsImRpdiIpLHRlKCkoKSksMiZuKXtjb25zdCB0PVRlKDIpO2llKDQpLF90KHQubG9hZGVk''@;'; put 'put ''Py0xOjQpfX1mdW5jdGlvbiBNdW4obixlKXtpZigxJm4mJihKKDAsImRpdiIpLHZ0KDEsQ3VuLDIsMSwiZGl2Iiw3MSksdnQoMixFdW4sNSwxLCJkaXYiLDcyKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSgpLF90KHQubG9hZGVkPzE6LTEpLGllKCksX3QodC5sb2FkZWQ/LTE6Mil9fWxl''@;'; put 'put ''dCB0R2U9KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3RvcihyLGksbyxhLGwpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPXIsdGhpcy5zYXNTZXJ2aWNlPWksdGhpcy5ldmVudFNlcnZpY2U9byx0aGlzLnJvdXRlcj1hLHRoaXMucm91dGU9bCx0aGlzLmRldGFpbHNPcGVuPSExLHRoaXMucmVq''@;'; put 'put ''ZWN0T3Blbj0hMSx0aGlzLmxlbnM9e25ldzowLHVwZGF0ZWQ6MCxkZWxldGVkOjB9LHRoaXMubG9hZGVkPSExLHRoaXMubG9hZGluZ1RhYmxlPSExLHRoaXMuc3VibWl0UmVhc29uPSIiLHRoaXMuaW5zdGFuY2U9ImhvdEluc3RhbmNlIix0aGlzLmFjY2VwdExvYWRpbmc9ITEsdGhpcy5yZWpl''@;'; put 'put ''Y3RMb2FkaW5nPSExLHRoaXMuc3VibWl0dGVkPSExLHRoaXMudGFibGVGbGFnPSExLHRoaXMucm93S2V5cz1bXSx0aGlzLmNoQXJyPVtdLHRoaXMuc2Vjb25kT3Blbj0hMSx0aGlzLmZvcm1hdHRlZFZhbHVlcz0hMCx0aGlzLmNoYW5nZXNBcnI9W10sdGhpcy5kaWZmVGFibGU9e2RhdGE6W119''@;'; put 'put ''LHRoaXMuZGlmZnNMaW1pdD0hMSx0aGlzLnJlY29yZHNMaW1pdD0xMDAsdGhpcy5yZWZyZXNoU3RhcnR1cHNlcnZpY2VBZnRlckFwcHJvdmU9ITF9Z2V0IG5vQ2hhbmdlcygpe3JldHVybiAwPT09dGhpcy5sZW5zLm5ldyYmMD09PXRoaXMubGVucy51cGRhdGVkJiYwPT09dGhpcy5sZW5zLmRl''@;'; put 'put ''bGV0ZWR9Z29Ub0Jhc2Uocil7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhLyIrcil9Z29Ub0FwcHJvdmFsc0xpc3QoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvYXBwcm92ZSIpfWdldFRhYmxlKHIpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3N0''@;'; put 'put ''YWdlLyIrcil9Z29CYWNrKHIpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3IpfWdvVG9WaWV3ZXIoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEiKX1zaG93RGV0YWlsc1NlbGVjdChyKXtyLnByZXZlbnREZWZhdWx0KCksdGhpcy50YWJsZUZsYWc9''@;'; put 'put ''IXRoaXMudGFibGVGbGFnfWdldERldGFpbHMoKXt0aGlzLmRldGFpbHNPcGVuPSEwfW9uSG90U2VsZWN0aW9uKHIpe3RoaXMuaG90U2VsZWN0aW9uPXIuc2xpY2UoMCw0KX1vbkhvdERlc2VsZWN0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuaG90U2VsZWN0aW9uPW51bGx9LDEwMCl9cmVqZWN0''@;'; put 'put ''aW5nKCl7dmFyIHI9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7ci5yZWplY3RMb2FkaW5nPSEwLHIuc3VibWl0UmVhc29uPWx6ZShyLnN1Ym1pdFJlYXNvbi5yZXBsYWNlKC9cbi9nLCIuICIpKTtsZXQgaT17U1RQX0FDVElPTjoiUkVKRUNUX1RBQkxFIixUQUJMRTpyLnRhYmxlSWQsU1RQ''@;'; put 'put ''X1JFQVNPTjpyLnN1Ym1pdFJlYXNvbn07eWllbGQgci5zYXNTdG9yZVNlcnZpY2UucmVqZWN0aW5nKGksIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvcmVqZWN0aW9uIikudGhlbihvPT57ci5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2hpc3RvcnkiKX0pLmNhdGNoKG89PntyLmFj''@;'; put 'put ''Y2VwdExvYWRpbmc9ITEsci5yZWplY3RMb2FkaW5nPSExfSl9KSgpfWFwcHJvdmVUYWJsZSgpe3ZhciByPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe3IuYWNjZXB0TG9hZGluZz0hMDtsZXQgaT17QUNUSU9OOiJBUFBST1ZFX1RBQkxFIixUQUJMRTpyLnRhYmxlSWQsRElGRlRJTUU6ci5w''@;'; put 'put ''YXJhbXM/LkRJRkZUSU1FLExJQkRTOnIucGFyYW1zPy5MSUJEU307eWllbGQgci5zYXNTdG9yZVNlcnZpY2UuYXBwcm92ZVRhYmxlKGksIlNBU0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihvPT57ci5yZWZyZXNoU3RhcnR1cHNlcnZpY2VBZnRlckFwcHJvdmUmJnIu''@;'; put 'put ''c2FzU2VydmljZS5yZWxvYWRTdGFydHVwRGF0YSgpLHIucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9oaXN0b3J5Iil9KS5jYXRjaChvPT57ci5hY2NlcHRMb2FkaW5nPSExfSl9KSgpfWdvVG9TdWJtaXRMaXN0KCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L3N1Ym1p''@;'; put 'put ''dHRlZCIpfWNhbGxDaGFuZ2VzSW5mbyhyKXt2YXIgaT10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXt5aWVsZCBpLnNhc1N0b3JlU2VydmljZS5nZXRDaGFuZ2VJbmZvKHIpLnRoZW4obz0+e2kudGFibGVEZXRhaWxzPW8uanNwYXJhbXNbMF0saS5qc1BhcmFtcz1vLmpzcGFyYW1zWzBdO2xl''@;'; put 'put ''dCBhPVtdO2Zvcihjb25zdCBsIGluIGkuanNQYXJhbXMpaS5qc1BhcmFtcy5oYXNPd25Qcm9wZXJ0eShsKSYmYS5wdXNoKGwpO2kua2V5c0FycmF5PWEsIk1QRV9UQUJMRVMiPT09by5qc3BhcmFtc1swXS5CQVNFX0RTJiYoaS5yZWZyZXNoU3RhcnR1cHNlcnZpY2VBZnRlckFwcHJvdmU9ITAp''@;'; put 'put ''fSkuY2F0Y2gobz0+e2kuYWNjZXB0TG9hZGluZz0hMX0pLmZpbmFsbHkoKCk9PntpLmxvYWRlZD0hMH0pfSkoKX1mb3JtYXR0aW5nQ2hhbmdlZCgpe3RoaXMuY2FsY0RpZmYoKX1jYWxjRGlmZigpe2lmKCF0aGlzLnJlc3BvbnNlfHwhdGhpcy5yZXNwb25zZS5jb2xzKXJldHVybjtsZXQgcj10''@;'; put 'put ''aGlzLnJlc3BvbnNlLm5ldyxpPXRoaXMucmVzcG9uc2UudXBkYXRlcyxvPXRoaXMucmVzcG9uc2UuZGVsZXRlZCxhPXRoaXMucmVzcG9uc2Uub3JpZ2luYWxzO3RoaXMuZm9ybWF0dGVkVmFsdWVzJiYocj10aGlzLnJlc3BvbnNlLmZtdF9uZXcsaT10aGlzLnJlc3BvbnNlLmZtdF91cGRhdGVz''@;'; put 'put ''LG89dGhpcy5yZXNwb25zZS5mbXRfZGVsZXRlZCxhPXRoaXMucmVzcG9uc2UuZm10X29yaWdpbmFscyksdGhpcy5vcmlnaW5hbHM9YSx0aGlzLnJvd0tleXM9W107Zm9yKGxldCBDdD0wO0N0PGkubGVuZ3RoO0N0Kyspe2xldCBBdD1PYmplY3Qua2V5cyhpW0N0XSk7Zm9yKGxldCBLdD0wO0t0''@;'; put 'put ''PEF0Lmxlbmd0aDtLdCsrKWlbQ3RdW0F0W0t0XV0hPT1hW0N0XVtBdFtLdF1dJiZ0aGlzLmNoYW5nZXNBcnIucHVzaCh7aW5kOkN0LGZpZWxkOkF0W0t0XSxwcm9wOmlbQ3RdW0F0W0t0XV0sb3JpZ2luYWw6YVtDdF1bQXRbS3RdXX0pfXRoaXMubGVucz17bmV3OnRoaXMucGFyYW1zPy5OVU1f''@;'; put 'put ''QURERUR8fDAsdXBkYXRlZDp0aGlzLnBhcmFtcz8uTlVNX1VQREFURUR8fDAsZGVsZXRlZDp0aGlzLnBhcmFtcz8uTlVNX0RFTEVURUR8fDB9O2xldCBFPVtdLE89aS5jb25jYXQocixvKTtmb3IobGV0IEN0PTA7Q3Q8dGhpcy5yZXNwb25zZS5jb2xzLmxlbmd0aDtDdCsrKUUucHVzaCh0aGlz''@;'; put 'put ''LnJlc3BvbnNlLmNvbHNbQ3RdLk5BTUUpO2xldCBaPXRoaXMubGVucy5uZXc+dGhpcy5yZWNvcmRzTGltaXQ/dGhpcy5yZWNvcmRzTGltaXQ6dGhpcy5sZW5zLm5ldyxlZT10aGlzLmxlbnMudXBkYXRlZD50aGlzLnJlY29yZHNMaW1pdD90aGlzLnJlY29yZHNMaW1pdDp0aGlzLmxlbnMudXBk''@;'; put 'put ''YXRlZDt0aGlzLmRpZmZzTGltaXQ9dGhpcy5sZW5zLm5ldz50aGlzLnJlY29yZHNMaW1pdHx8dGhpcy5sZW5zLnVwZGF0ZWQ+dGhpcy5yZWNvcmRzTGltaXR8fHRoaXMubGVucy5kZWxldGVkPnRoaXMucmVjb3Jkc0xpbWl0LHRoaXMuYWRkQ291bnQ9WjtsZXQgTWU9W10sSGU9W107Zm9yKGxl''@;'; put 'put ''dCBDdD0wO0N0PEUubGVuZ3RoO0N0KyspSGUucHVzaCh7ZGF0YTpFW0N0XSxyZWFkT25seTohMH0pO3RoaXMuZGlmZlRhYmxlLmRhdGE9Tztmb3IobGV0IEN0PTA7Q3Q8Ty5sZW5ndGg7Q3QrKyl7bGV0IEt0PU9iamVjdC5rZXlzKE9bQ3RdKTt0aGlzLnJvd0tleXMucHVzaChLdCl9bGV0IFdl''@;'; put 'put ''PVtdLGF0PVtdO2ZvcihsZXQgQ3Q9MDtDdDx0aGlzLmRpZmZUYWJsZS5kYXRhLmxlbmd0aDtDdCsrKXtpZihDdDxlZSYmMCE9PWVlKXtXZS5wdXNoKFtdKSxhdC5wdXNoKFtdKSxNZS5wdXNoKCJ1cGRhdGVkIik7bGV0IEF0PU9iamVjdC5rZXlzKHRoaXMuZGlmZlRhYmxlLmRhdGFbQ3RdKTtm''@;'; put 'put ''b3IobGV0IEt0PTA7S3Q8QXQubGVuZ3RoO0t0Kyspe2xldCBxdD1BdFtLdF07YVtDdF1bcXRdIT09aVtDdF1bcXRdPyhXZVtDdF0ucHVzaCghMCksYXRbQ3RdLnB1c2goYVtDdF1bcXRdKSk6KFdlW0N0XS5wdXNoKCExKSxhdFtDdF0ucHVzaChudWxsKSl9dGhpcy5hcnJDaGFuZ2VkPVdlLHRo''@;'; put 'put ''aXMuYXJyT2ZDaGFuZ2VzPWF0fUN0Pj1lZSYmQ3Q8ZWUrWiYmTWUucHVzaCgiYWRkZWQiKSxDdD5aK2VlLTEmJk1lLnB1c2goImRlbGV0ZWQiKX10aGlzLmNoQXJyPU1lLHRoaXMucm93SGVhZGVyPXRoaXMucm93S2V5c1swXSx0aGlzLmRpZmZUYWJsZS5kYXRhPU99bmdBZnRlclZpZXdJbml0''@;'; put 'put ''KCl7dmFyIHI9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7aWYoci5fZGV0YWlsc1N1Yj1yLnNhc1N0b3JlU2VydmljZS5zdWJtaXR0RGV0YWlsLnN1YnNjcmliZShmdW5jdGlvbigpe3ZhciBvPUNyKGZ1bmN0aW9uKihhKXtyLnN1Yk9iaj1hLnZpZXdEYXRhLHIudGFibGVJZD1hLnZpZXdE''@;'; put 'put ''YXRhLnRhYmxlSWQsci5zdWJtaXR0ZWQ9YS52aWV3RGF0YS5zdWIsci5zdWJtaXREZXRhaWxzPWEuZGF0YSxyLnN1Ym1pdEFycj1bXTtmb3IobGV0IGwgaW4gci5zdWJtaXREZXRhaWxzKSJzdWIiIT09bCYmci5zdWJtaXRBcnIucHVzaChsKX0pO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4g''@;'; put 'put ''by5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSx0eXBlb2Ygci5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ+InUiKXJldHVybjtyLnRhYmxlSWQ9ci5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ7bGV0IGk9e0FDVElPTjoiU0hPV19ESUZGUyIsVEFCTEU6ci50YWJsZUlk''@;'; put 'put ''LERJRkZUSU1FOihuZXcgRGF0ZSkudG9VVENTdHJpbmcoKX07ci5zYXNTdG9yZVNlcnZpY2Uuc2hvd0RpZmZzKGksIlNBU0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihvPT57ci5wYXJhbXM9by5wYXJhbXNbMF0sci5yZXNwb25zZT1vLHIuY2FsY0RpZmYoKSxyLmNh''@;'; put 'put ''bGxDaGFuZ2VzSW5mbyhyLnRhYmxlSWQpfSkuY2F0Y2gobz0+e3IuYWNjZXB0TG9hZGluZz0hMX0pLmZpbmFsbHkoKCk9PntyLmxvYWRpbmdUYWJsZT0hMCxyLnNldEZvY3VzKCl9KX0pKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXRhaWxzU3ViJiZ0aGlzLl9kZXRhaWxzU3ViLnVuc3Vic2Ny''@;'; put 'put ''aWJlKCl9c2V0Rm9jdXMoKXtzZXRUaW1lb3V0KCgpPT57bGV0IHI9d2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2NlcHRCdG4iKTtyJiZyLmZvY3VzKCl9LDIwMCl9c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSkoemUo''@;'; put 'put ''QnApLHplKGljKSx6ZSh1ZCksemUocDEpLHplKHZjKSl9LHRoaXMuXHUwMjc1Y21wPVByKHt0eXBlOmUsc2VsZWN0b3JzOltbImFwcC1hcHByb3ZlLWRldGFpbHMiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6NDMsdmFyczoxMSxjb25z''@;'; put 'put ''dHM6W1szLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJ0YWJsZSJdLFsxLCJsZWZ0Il0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1h''@;'; put 'put ''cnkiLDMsImNsaWNrIl0sWzEsImZvcm0tYmxvY2siXSxbMSwiZm9ybS1ncm91cCJdLFsiZm9yIiwiZm9ybUZpZWxkc184Il0sWyJpZCIsImZvcm1GaWVsZHNfOCIsInJvd3MiLCI1IiwxLCJ3LTEwMCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyIsImlubmVy''@;'; put 'put ''SFRNTCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwic3VibWl0IiwxLCJidG4iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiXSxbMSwibGVm''@;'; put 'put ''dCIsImxpbmstaXQiLDMsInJvdXRlckxpbmsiXSxbImNsclRhYkxpbmsiLCIiXSxbNCwiY2xySWZBY3RpdmUiXSxbMSwib3ZlcmZsb3ctYXV0byJdLFsxLCJjYXJkLWhlYWRlciIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJvdmVyZmxvdy1h''@;'; put 'put ''dXRvIiwibXItMTIiXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsIm10LTAiXSxbMSwiY2FyZC1oZWFkZXIiLCJwLTAiXSxbMSwiY2xyLXJvdyJdLFsxLCJjbHItY29sLW1kLTQiLCJh''@;'; put 'put ''cHByb3ZhbEJhY2siXSxbMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJtLTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsImNhcmV0IiwiZGlyIiwibGVmdCIsInNpemUiLCIyMCJdLFsxLCJjbHItY29sLW1kLTQiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsIm10LTAiLCJmb250''@;'; put 'put ''LXdlaWdodC0zMDAiXSxbMSwiY2xyLWNvbC1tZC00IiwiYXBwcm92YWxJbmZvIl0sWzEsInRvb2x0aXAiLCJ0b29sdGlwLXNtIiwidG9vbHRpcC10b3AtbGVmdCIsMywiY2xpY2siXSxbInNoYXBlIiwiaW5mby1zdGFuZGFyZCIsInNpemUiLCIyOCJdLFsxLCJ0ZXh0LWNlbnRlciIsIm10LTEw''@;'; put 'put ''Il0sWzEsImNhcmQtYmxvY2siLCJwLTAiXSxbMSwiY2FyZC10ZXh0Il0sWzEsImgtMjR2aCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJ0YWJsZUNvbnQiLCJtdC0wIl0sWzEsInRleHQtY2VudGVyIiwi''@;'; put 'put ''Zm9udC1zaXplLTE4Il0sWzEsImQtZmxleCJdLFsxLCJkLWZsZXgiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLXJvdyIsImZvbnQtc2l6ZS0xNSJdLFsxLCJjbHItY29sLW1kLTUiXSxbMSwiY2xyLWNvbC1tZC03Il0sWzEsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2Vu''@;'; put 'put ''dGVyIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJtdC0wIl0sWzEsImNsci1yb3ciLCJjbHItZ2FwLTUiLCJjbHItZ2FwLXNtLTAiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTUiLCJtci01aSIsMywiY2xpY2siXSxb''@;'; put 'put ''MSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtNSIsIm1yLTVpIiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tc20iLCJidG4taW5mby1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC01IiwzLCJjbGljayJdLFsxLCJjYXJkLWJsb2NrIiwi''@;'; put 'put ''ZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiIsImNsci1nYXAtNSIsImNsci1mbGV4LXNtLXJvdyIsImNsci1nYXAtc20tMCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImlkIiwiYWNjZXB0QnRuIiwidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwi''@;'; put 'put ''YnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJtci01aSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIiwiZGlzYWJsZWQiXSxbImlkIiwicmVqZWN0QnRuIiwxLCJidG4iLCJidG4tc20iLCJidG4iLCJidG4tZGFuZ2VyIiwibXItNWkiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbMSwibS0wIiwibWwtMjBp''@;'; put 'put ''Il0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJUb2dnbGUiLCIiLCJjaGVja2VkIiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCJdLFsxLCJmb3JtYXR0ZWQtdmFsdWVzLXRvZ2dsZSJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRl''@;'; put 'put ''ciIsImNsci1mbGV4LWNvbHVtbiJdLFsxLCJyb3dzLW5vdGljZSJdLFsxLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZ2FwLTUiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItZ2FwLXNtLTAiXSxbMSwibGFiZWwiLCJsYWJlbC13YXJuaW5nIl0sWzEsImJhZGdlIl0sWzEsImxhYmVs''@;'; put 'put ''IiwibGFiZWwtc3VjY2VzcyJdLFsxLCJsYWJlbCIsImxhYmVsLWRhbmdlciJdLFsxLCJtdC0xNSJdLFsxLCJsaW5rLWl0IiwzLCJyb3V0ZXJMaW5rIl0sWzEsIm10LTEwIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJtYi01IiwiY29sb3Itb3JhbmdlIl0sWzEsInNwaW5u''@;'; put 'put ''ZXIiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiJdLFsxLCJsZWZ0IiwzLCJuZ0NsYXNzIl0sWzEsInRvb2x0aXAtY29udGVudCJdLFsxLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiY2FyZC1ibG9jayJdLFsxLCJjYXJkIiwibS0wIl0sWzEsImNh''@;'; put 'put ''cmQtaGVhZGVyIl0sWzEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsImxlZnQiLCJzaXplIiwiMjAiXSxbMSwiY2xyLWNvbC1tZC00Il0sWzEsIm10LTAiLCJmb250LXdlaWdodC0zMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJtLTAi''@;'; put 'put ''LCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm0tMCIsIm1sLTIwLWkiXSxbMSwiY2FyZC1ibG9jayIsInAtMCIsIm92ZXJmbG93LWF1dG8iLCJtci0xMiJdLFsxLCJoLTI1dmgiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJh''@;'; put 'put ''bGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwidGFibGVDb250Il0sWzEsImxvYWRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihpLG8pezEmaSYmKEooMCwiY2xyLW1vZGFsIiwwKSxoaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihsKXtyZXR1cm4gZmkoby5kZXRhaWxzT3BlbixsKXx8KG8u''@;'; put 'put ''ZGV0YWlsc09wZW49bCksbH0pLEooMSwiaDMiLDEpLFNlKDIsIkFwcHJvdmFsIERldGFpbHMiKSx0ZSgpLEooMywiZGl2IiwyKSg0LCJ0YWJsZSIsMykoNSwidGhlYWQiKSg2LCJ0ciIpKDcsInRoIiw0KSxTZSg4LCJOYW1lIiksdGUoKSxKKDksInRoIiw0KSxTZSgxMCwiVmFsdWUiKSx0ZSgp''@;'; put 'put ''KCkoKSxKKDExLCJ0Ym9keSIpLF9vKDEyLFZjbiw1LDMsInRyIixudWxsLENvKSx0ZSgpKCkoKSxKKDE0LCJkaXYiLDUpKDE1LCJidXR0b24iLDYpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gby5kZXRhaWxzT3Blbj0hMX0pLFNlKDE2LCIgT2sgIiksdGUoKSgpKCksSigxNywiY2xy''@;'; put 'put ''LW1vZGFsIiwwKSxoaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihsKXtyZXR1cm4gZmkoby50YWJsZUZsYWcsbCl8fChvLnRhYmxlRmxhZz1sKSxsfSksSigxOCwiaDMiLDEpLFNlKDE5LCJBbGwgRGV0YWlscyIpLHRlKCksSigyMCwiZGl2IiwyKSx2dCgyMSx6Y24sMjAsMSwiY2xy''@;'; put 'put ''LXRhYnMiKSx0ZSgpLEooMjIsImRpdiIsNSkoMjMsImJ1dHRvbiIsNiksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBvLnRhYmxlRmxhZz0hMX0pLFNlKDI0LCIgT2sgIiksdGUoKSgpKCksSigyNSwiY2xyLW1vZGFsIiwwKSxoaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihs''@;'; put 'put ''KXtyZXR1cm4gZmkoby5yZWplY3RPcGVuLGwpfHwoby5yZWplY3RPcGVuPWwpLGx9KSxKKDI2LCJoMyIsMSksU2UoMjcsIlJlYXNvbiBNZXNzYWdlIiksdGUoKSxKKDI4LCJkaXYiLDIpKDI5LCJmb3JtIikoMzAsInNlY3Rpb24iLDcpKDMxLCJkaXYiLDgpKDMyLCJsYWJlbCIsOSksU2UoMzMs''@;'; put 'put ''IlJlYXNvbiBmb3IgcmVqZWN0aW5nPyIpLHRlKCksSigzNCwidGV4dGFyZWEiLDEwKSxoaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24obCl7cmV0dXJuIGZpKG8uc3VibWl0UmVhc29uLGwpfHwoby5zdWJtaXRSZWFzb249bCksbH0pLHRlKCkoKSgpKCkoKSxKKDM1LCJkaXYiLDUpKDM2LCJi''@;'; put 'put ''dXR0b24iLDExKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG8ucmVqZWN0T3Blbj0hMX0pLFNlKDM3LCIgQ2FuY2VsICIpLHRlKCksSigzOCwiYnV0dG9uIiwxMiksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBvLnJlamVjdGluZygpfSksU2UoMzksIiBPSyAiKSx0ZSgpKCko''@;'; put 'put ''KSxKKDQwLCJkaXYiLDEzKSx2dCg0MSxjdW4sNCwyLCJkaXYiLDE0KSx2dCg0MixNdW4sMywyLCJkaXYiKSx0ZSgpKSwyJmkmJihkaSgiY2xyTW9kYWxPcGVuIixvLmRldGFpbHNPcGVuKSxpZSgxMikseW8oby5rZXlzQXJyYXkpLGllKDUpLGRpKCJjbHJNb2RhbE9wZW4iLG8udGFibGVGbGFn''@;'; put 'put ''KSxpZSg0KSxfdChvLnRhYmxlRmxhZz8yMTotMSksaWUoNCksZGkoImNsck1vZGFsT3BlbiIsby5yZWplY3RPcGVuKSxpZSg5KSxkaSgibmdNb2RlbCIsby5zdWJtaXRSZWFzb24pLHJ0KCJuZ01vZGVsT3B0aW9ucyIsbWMoMTAsRmNuKSkoImlubmVySFRNTCIsby5zdWJtaXRSZWFzb24seDUp''@;'; put 'put ''LGllKDQpLHJ0KCJjbHJMb2FkaW5nIixvLnJlamVjdExvYWRpbmcpLGllKDMpLF90KG8uc3VibWl0dGVkPy0xOjQxKSxpZSgpLF90KG8uc3VibWl0dGVkPzQyOi0xKSl9LGRlcGVuZGVuY2llczpbRmgsTGIsbHUsSDIsb2MsSWIsWGwsZDQsUDIsY3UsSnMseGQsbWgsJDAsaE0saW0sZWwsVTIs''@;'; put 'put ''RXYsRmYseHYsa3YsJGIsQXYsVHYsWmJdLGVuY2Fwc3VsYXRpb246Mn0pKX1yZXR1cm4gbigpLGV9KSgpO2NvbnN0IFR1bj1uPT4oe25vQm9yZGVyOm59KSx4dW49KCk9PlszLDUsMTAsMTVdO2Z1bmN0aW9uIEF1bihuLGUpezEmbiYmKEooMCwiZGl2IiwzKSgxLCJkaXYiLDkpLEl0KDIsImNs''@;'; put 'put ''ci1pY29uIiwxMCksSigzLCJoMyIsMTEpLFNlKDQsIiBUaGVyZSBhcmUgbm8gYXBwcm92YWxzIHJlbWFpbmluZyAiKSx0ZSgpKCkoKSl9ZnVuY3Rpb24ga3VuKG4sZSl7MSZuJiYoSigwLCJoMyIsNSksU2UoMSwiUkVWSUVXIiksdGUoKSl9ZnVuY3Rpb24gUnVuKG4sZSl7aWYoMSZuJiYoSigw''@;'; put 'put ''LCJwIiw2KSxTZSgxLCIgWW91IGhhdmUgIiksSigyLCJzcGFuIiksU2UoMyksdGUoKSxTZSg0LCJhcHByb3ZhbHMgcmVtYWluaW5nICIpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgpO2llKDMpLFNyKCIiLHQucmVtYWluZWQsIiAiKX19ZnVuY3Rpb24gSXVuKG4sZSl7MSZuJiYoSigwLCJzcGFu''@;'; put 'put ''IiwxMiksU2UoMSwiIExvYWRpbmcuLi4gIiksdGUoKSl9ZnVuY3Rpb24gRHVuKG4sZSl7MSZuJiYoSigwLCJkaXYiKSgxLCJoMyIpLFNlKDIsIkxvYWRpbmcgYXBwcm92YWxzIGxpc3QiKSx0ZSgpKCkpfWZ1bmN0aW9uIEx1bihuLGUpe2lmKDEmbiYmKEooMCwiZGl2Iiw3KSx2dCgxLEl1biwy''@;'; put 'put ''LDAsInNwYW4iLDEyKSx2dCgyLER1biwzLDAsImRpdiIpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgpO2llKCksX3QodC5sb2FkZWQ/LTE6MSksaWUoKSxfdCh0LmxvYWRlZD8tMToyKX19ZnVuY3Rpb24gT3VuKG4sZSl7MSZuJiZJdCgwLCJjbHItaWNvbiIsMjcpfWZ1bmN0aW9uIE51bihuLGUp''@;'; put 'put ''ezEmbiYmSXQoMCwiY2xyLXNwaW5uZXIiLDI4KSwyJm4mJnJ0KCJjbHJTbWFsbCIsITApfWZ1bmN0aW9uIEZ1bihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLWRnLXJvdyIpKDEsImNsci1kZy1jZWxsIiksU2UoMiksdGUoKSxKKDMsImNsci1kZy1jZWxsIiksU2UoNCksdGUo''@;'; put 'put ''KSxKKDUsImNsci1kZy1jZWxsIiksU2UoNiksdGUoKSxKKDcsImNsci1kZy1jZWxsIiksU2UoOCksdGUoKSxKKDksImNsci1kZy1jZWxsIikoMTAsImRpdiIsMjIpKDExLCJhIiwyMyksd3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGk9WWUodCkuaW5kZXg7cmV0dXJuIFhlKFRlKDIpLmdl''@;'; put 'put ''dENsaWNrZWQoaSkpfSksSXQoMTIsImNsci1pY29uIiwyNCksSigxMywic3BhbiIsMjUpLFNlKDE0LCJHbyB0byByZXZpZXcgcGFnZSBzY3JlZW4iKSx0ZSgpKCksSigxNSwiYSIsMjYpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBpPVllKHQpLG89aS4kaW1wbGljaXQsYT1pLmluZGV4''@;'; put 'put ''LGw9VGUoMik7cmV0dXJuIFhlKG8ucmVqZWN0TG9hZGluZz8iIjpsLnJlamVjdGluZyhhKSl9KSx2dCgxNixPdW4sMSwwLCJjbHItaWNvbiIsMjcpLHZ0KDE3LE51biwxLDEsImNsci1zcGlubmVyIiwyOCksSigxOCwic3BhbiIsMjUpLFNlKDE5LCJSZWplY3QiKSx0ZSgpKCksSigyMCwiYSIs''@;'; put 'put ''MjkpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBpPVllKHQpLiRpbXBsaWNpdDtyZXR1cm4gWGUoVGUoMikuZ2V0VGFibGUoaS50YWJsZUlkKSl9KSxJdCgyMSwiY2xyLWljb24iLDMwKSxKKDIyLCJzcGFuIiwyNSksU2UoMjMsIkdvIHRvIHN0YWdlZCBkYXRhIHNjcmVlbiIpLHRlKCko''@;'; put 'put ''KSgpKCksSigyNCwiY2xyLWRnLWNlbGwiLDMxKSgyNSwiYnV0dG9uIiwzMiksd3QoImNsaWNrIixmdW5jdGlvbihpKXtjb25zdCBvPVllKHQpLiRpbXBsaWNpdDtyZXR1cm4gVGUoMikuZG93bmxvYWQoby50YWJsZUlkKSxYZShpLnN0b3BQcm9wYWdhdGlvbigpKX0pLEl0KDI2LCJjbHItaWNv''@;'; put 'put ''biIsMzMpLHRlKCkoKSgpfWlmKDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdDtpZSgyKSxwcih0LnN1Ym1pdHRlciksaWUoMikscHIodC5iYXNlVGFibGUpLGllKDIpLHByKHQuc3VibWl0dGVkKSxpZSgyKSxwcih0LnN1Ym1pdFJlYXNvbiksaWUoOCksX3QodC5yZWplY3RMb2FkaW5nPy0xOjE2''@;'; put 'put ''KSxpZSgpLF90KHQucmVqZWN0TG9hZGluZz8xNzotMSksaWUoOCkscnQoImlkIix0LnRhYmxlSWQpfX1mdW5jdGlvbiBQdW4obixlKXtpZigxJm4mJihKKDAsImRpdiIpKDEsImNsci1kYXRhZ3JpZCIsMTMpKDIsImNsci1kZy1jb2x1bW4iLDE0KSxTZSgzLCIgU1VCTUlUVEVSICIpLEl0KDQs''@;'; put 'put ''ImNsci1kZy1zdHJpbmctZmlsdGVyIiwxNSksdGUoKSxKKDUsImNsci1kZy1jb2x1bW4iLDE0KSxTZSg2LCIgQkFTRSBUQUJMRSAiKSxJdCg3LCJjbHItZGctc3RyaW5nLWZpbHRlciIsMTYpLHRlKCksSig4LCJjbHItZGctY29sdW1uIiwxNCksU2UoOSwiIFNVQk1JVFRFRCAiKSxJdCgxMCwi''@;'; put 'put ''Y2xyLWRnLXN0cmluZy1maWx0ZXIiLDE3KSx0ZSgpLEooMTEsImNsci1kZy1jb2x1bW4iLDE0KSxTZSgxMiwiIFNVQk1JVCBSRUFTT04gIiksSXQoMTMsImNsci1kZy1zdHJpbmctZmlsdGVyIiwxOCksdGUoKSxKKDE0LCJjbHItZGctY29sdW1uIiksU2UoMTUsIkFDVElPTiIpLHRlKCksSigx''@;'; put 'put ''NiwiY2xyLWRnLWNvbHVtbiIpLFNlKDE3LCJET1dOTE9BRCIpLHRlKCksWW4oMTgsRnVuLDI3LDcsImNsci1kZy1yb3ciLDE5KSxKKDE5LCJjbHItZGctZm9vdGVyIikoMjAsImNsci1kZy1wYWdpbmF0aW9uIiwyMCwwKSgyMiwiY2xyLWRnLXBhZ2Utc2l6ZSIsMjEpLFNlKDIzLCJJdGVtcyBw''@;'; put 'put ''ZXIgcGFnZSIpLHRlKCksU2UoMjQpLHRlKCkoKSgpKCkpLDImbil7Y29uc3QgdD1vbygyMSkscj1UZSgpO2llKDIpLHJ0KCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVyIiksaWUoMikscnQoImNsckRnU3RyaW5nRmlsdGVyIixyLnN1Ym1pdHRlckZpbHRlciksaWUoKSxydCgiY2xyRGdGaWVsZCIs''@;'; put 'put ''ImJhc2VUYWJsZSIpLGllKDIpLHJ0KCJjbHJEZ1N0cmluZ0ZpbHRlciIsci5iYXNlVGFibGVGaWx0ZXIpLGllKCkscnQoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxpZSgyKSxydCgiY2xyRGdTdHJpbmdGaWx0ZXIiLHIuc3VibWl0dGVkRmlsdGVyKSxpZSgpLHJ0KCJjbHJEZ0ZpZWxkIiwi''@;'; put 'put ''c3VibWl0UmVhc29uIiksaWUoMikscnQoImNsckRnU3RyaW5nRmlsdGVyIixyLnN1Ym1pdFJlYXNvbkZpbHRlciksaWUoNSkscnQoImNsckRnSXRlbXNPZiIsci5hcHByb3ZlTGlzdCksaWUoMikscnQoImNsckRnUGFnZVNpemUiLDEwKSxpZSgyKSxydCgiY2xyUGFnZVNpemVPcHRpb25zIixt''@;'; put 'put ''YygxNCx4dW4pKSxpZSgyKSxlNCgiICIsdC5maXJzdEl0ZW0rMSwiIC0gIix0Lmxhc3RJdGVtKzEsIiBvZiAiLHQudG90YWxJdGVtcywiIGFwcHJvdmFscyAiKX19Y2xhc3MgSHVue2FjY2VwdHMoZSx0KXtyZXR1cm4gZS5zdWJtaXR0ZXIudG9Mb3dlckNhc2UoKS5pbmRleE9mKHQudG9Mb3dl''@;'; put 'put ''ckNhc2UoKSk+PTB9fWNsYXNzIFZ1bnthY2NlcHRzKGUsdCl7cmV0dXJuIGUuYmFzZVRhYmxlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0LnRvTG93ZXJDYXNlKCkpPj0wfX1jbGFzcyBCdW57YWNjZXB0cyhlLHQpe3JldHVybiBlLnN1Ym1pdHRlZC50b0xvd2VyQ2FzZSgpLmluZGV4T2YodC50''@;'; put 'put ''b0xvd2VyQ2FzZSgpKT49MH19Y2xhc3MganVue2FjY2VwdHMoZSx0KXtyZXR1cm4gZS5zdWJtaXRSZWFzb24udG9Mb3dlckNhc2UoKS5pbmRleE9mKHQudG9Mb3dlckNhc2UoKSk+PTB9fWxldCBVdW49KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3RvcihyLGksbyxhLGwpe3RoaXMuc2Fz''@;'; put 'put ''U3RvcmVTZXJ2aWNlPXIsdGhpcy5ldmVudFNlcnZpY2U9aSx0aGlzLnJvdXRlPW8sdGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5jZHI9bCx0aGlzLmxvYWRlZD0hMSx0aGlzLml0ZW1zTnVtPTEwLHRoaXMuc3VibWl0dGVyRmlsdGVyPW5ldyBIdW4sdGhpcy5iYXNlVGFibGVGaWx0ZXI9bmV3IFZ1''@;'; put 'put ''bix0aGlzLnN1Ym1pdHRlZEZpbHRlcj1uZXcgQnVuLHRoaXMuc3VibWl0UmVhc29uRmlsdGVyPW5ldyBqdW59Z2V0VGFibGUocil7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIityKX1nZXRDbGlja2VkKHIpe3ZvaWQgMCE9PXRoaXMuYXBwcm92ZUxpc3QmJih0aGlzLnRhYmxl''@;'; put 'put ''SWQ9dGhpcy5hcHByb3ZlTGlzdFtyXS50YWJsZUlkLHRoaXMucm91dGUubmF2aWdhdGVCeVVybCgicmV2aWV3L2FwcHJvdmVEZXQvIit0aGlzLmFwcHJvdmVMaXN0W3JdLnRhYmxlSWQpKX1yZWplY3Rpbmcocil7dmFyIGk9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7dm9pZCAwIT09aS5h''@;'; put 'put ''cHByb3ZlTGlzdCYmKGkudGFibGVJZD1pLmFwcHJvdmVMaXN0W3JdLnRhYmxlSWQpO2xldCBvPXtTVFBfQUNUSU9OOiJSRUpFQ1RfVEFCTEUiLFRBQkxFOmkudGFibGVJZCxTVFBfUkVBU09OOiJxdWljayByZWplY3Rpb24ifTt0cnl7KGkuYXBwcm92ZUxpc3R8fFtdKVtyXS5yZWplY3RMb2Fk''@;'; put 'put ''aW5nPSEwLCh5aWVsZCBpLnNhc1N0b3JlU2VydmljZS5yZWplY3RpbmcobywiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9yZWplY3Rpb24iKSkuZnJvbXNhc1swXS5SRVNQT05TRS5pbmNsdWRlcygiU1VDQ0VTUyIpJiYoKGkuYXBwcm92ZUxpc3R8fFtdKVtyXS5yZWplY3RMb2FkaW5nPSEx''@;'; put 'put ''LGkuYXBwcm92ZUxpc3Q/LnNwbGljZShyLDEpLGkucmVtYWluZWQtLSxpLmNkci5kZXRlY3RDaGFuZ2VzKCkpfWNhdGNoKGEpe2kuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXBwcm92ZXJzL3JlamVjdGlvbiIsYSl9fSkoKX1uZ09uSW5pdCgpe3ZhciByPXRoaXM7cmV0dXJu''@;'; put 'put ''IENyKGZ1bmN0aW9uKigpe3IuZmV0Y2hBcHByb3ZhbHMoKX0pKCl9ZmV0Y2hBcHByb3ZhbHMoKXt2YXIgcj10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtyLml0ZW1zTnVtPTEwO2xldCBpPXtTVFBfQUNUSU9OOiJPUEVOX0FQUFJPVkFMUyJ9O3RyeXtsZXQgbz15aWVsZCByLnNhc1N0b3Jl''@;'; put 'put ''U2VydmljZS5nZXRBcHByb3ZhbHMoaSwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9nZXRhcHByb3ZhbHMiKTtyLnJlbWFpbmVkPW8uZnJvbXNhcy5sZW5ndGg7bGV0IGE9by5mcm9tc2FzLm1hcChmdW5jdGlvbihsKXtyZXR1cm57dGFibGVJZDpsLlRBQkxFX0lELHN1Ym1pdHRlcjpsLlNV''@;'; put 'put ''Qk1JVFRFRF9CWV9OTSxzdWJtaXR0ZWQ6bC5TVUJNSVRURURfT05fRFRUTSxiYXNlVGFibGU6bC5CQVNFX1RBQkxFLHN1Ym1pdFJlYXNvbjpsLlNVQk1JVFRFRF9SRUFTT05fVFhUfX0pO3IuYXBwcm92ZUxpc3Q9YSxyLmxvYWRlZD0hMH1jYXRjaChvKXtyLmV2ZW50U2VydmljZS5jYXRjaFJl''@;'; put 'put ''c3BvbnNlRXJyb3IoImFwcHJvdmVycy9nZXRhcHByb3ZhbHMiLG8pfX0pKCl9ZG93bmxvYWQocil7bGV0IGk9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksbz1pLnNlcnZlclVybCxhPWkuYXBwTG9jLGw9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cu''@;'; put 'put ''b3BlbihvK2wrIi8/X3Byb2dyYW09IithKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrcil9c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSkoemUoQnApLHplKHVkKSx6ZSh2YyksemUoaWMpLHplKFVsKSl9''@;'; put 'put ''LHRoaXMuXHUwMjc1Y21wPVByKHt0eXBlOmUsc2VsZWN0b3JzOltbImFwcC1hcHByb3ZlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxzdGFuZGFsb25lOiExLGRlY2xzOjksdmFyczo4LGNvbnN0czpbWyJwYWdpbmF0aW9uIiwiIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsx''@;'; put 'put ''LCJjYXJkIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiY2FyZC1oZWFkZXIiLDMsIm5nQ2xhc3MiXSxbMSwiY2VudGVyIiwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC13ZWlnaHQtNzAwIiwiY29sb3ItZGFy''@;'; put 'put ''ay1ncmF5Il0sWzEsImFwcHJvdmFscy1saXN0LXdyYXBwZXIiXSxbIm5nLWlmIiwibG9hZGVkIiwxLCJjbHItY29sLW1kLTEyIl0sWzEsImNhcmQtYmxvY2siLCJub2FwcHJvdmFscy1pbmZvLXdyYXBwZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMt''@;'; put 'put ''aW5mbyIsImljb24tZGMtZmlsbCJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwic3Bpbm5lciJdLFsxLCJkYXRhZ3JpZC1jb21wYWN0IiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ0ZpZWxkIl0sWyJhcmlhLWxhYmVsIiwiRmlsdGVyIHN1Ym1pdHRlciIs''@;'; put 'put ''MywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbImFyaWEtbGFiZWwiLCJGaWx0ZXIgYmFzZSB0YWJsZSIsMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbImFyaWEtbGFiZWwiLCJGaWx0ZXIgc3VibWl0dGVkIGRhdGUiLDMsImNsckRnU3RyaW5nRmlsdGVyIl0sWyJhcmlhLWxhYmVsIiwiRmlsdGVyIHN1''@;'; put 'put ''Ym1pdCByZWFzb24iLDMsImNsckRnU3RyaW5nRmlsdGVyIl0sWzQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMywiY2xyRGdQYWdlU2l6ZSJdLFszLCJjbHJQYWdlU2l6ZU9wdGlvbnMiXSxbInJvbGUiLCJ0b29sYmFyIiwiYXJpYS1sYWJlbCIsIlRhYmxlIGFjdGlvbnMiLDEsImNs''@;'; put 'put ''ci1yb3ciLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYXJvdW5kIl0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLWdyZWVuIiwzLCJjbGljayJdLFsic2hhcGUiLCJjaGVjayIsInNpemUiLCIy''@;'; put 'put ''NCIsImFyaWEtaGlkZGVuIiwidHJ1ZSJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItcmVkIiwzLCJjbGljayJdLFsic2hhcGUiLCJiYW4iLCJzaXplIiwi''@;'; put 'put ''MjIiLCJhcmlhLWhpZGRlbiIsInRydWUiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMywiY2xyU21hbGwiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItYmx1ZSIsMywiY2xpY2siXSxbInNoYXBl''@;'; put 'put ''IiwiY29kZSIsInNpemUiLCIyOCIsImFyaWEtaGlkZGVuIiwidHJ1ZSJdLFsxLCJwLTAiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJhcmlhLWxhYmVsIiwiRG93bmxvYWQgYXVkaXQgZmlsZSIsMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIiwiaWQiXSxbInNo''@;'; put 'put ''YXBlIiwiZG93bmxvYWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oaSxvKXsxJmkmJihKKDAsImRpdiIsMSkoMSwiZGl2IiwyKSx2dCgyLEF1biw1LDAsImRpdiIsMyksSigzLCJkaXYiLDQpLHZ0KDQsa3VuLDIsMCwiaDMiLDUpLHZ0KDUsUnVuLDUsMSwicCIsNiksdGUoKSx2dCg2LEx1biwzLDIs''@;'; put 'put ''ImRpdiIsNyksSig3LCJkaXYiLDgpLHZ0KDgsUHVuLDI1LDE1LCJkaXYiKSx0ZSgpKCkoKSksMiZpJiYoaWUoMiksX3QoMD09PW8ucmVtYWluZWQ/MjotMSksaWUoKSxydCgibmdDbGFzcyIsdDQoNixUdW4sIW8ubG9hZGVkKSksaWUoKSxfdChvLmxvYWRlZCYmMCE9PW8ucmVtYWluZWQ/NDot''@;'; put 'put ''MSksaWUoKSxfdChvLmxvYWRlZCYmMCE9PW8ucmVtYWluZWQ/NTotMSksaWUoKSxfdChvLmxvYWRlZD8tMTo2KSxpZSgyKSxfdChvLmFwcHJvdmVMaXN0JiYwIT09by5yZW1haW5lZD84Oi0xKSl9LGRlcGVuZGVuY2llczpbRmgsTnYsdjQsdHcsZlcseE0sWUQscFcsTHYsRzUsbncsUk0sT3Ys''@;'; put 'put ''UWIsRHYsSmIsU00sY3UsejJdLGVuY2Fwc3VsYXRpb246Mn0pKX1yZXR1cm4gbigpLGV9KSgpO2NvbnN0IHp1bj1uPT4oe25vQm9yZGVyOm59KSxXdW49KCk9PlszLDUsMTAsMTVdO2Z1bmN0aW9uIFl1bihuLGUpezEmbiYmKEooMCwiZGl2Iiw0KSgxLCJkaXYiLDEwKSxJdCgyLCJjbHItaWNv''@;'; put 'put ''biIsMTEpLEooMywiaDMiLDEyKSxTZSg0LCIgWW91IGhhdmUgbm90IHN1Ym1pdHRlZCBhbnkgdGFibGVzICIpLHRlKCkoKSgpKX1mdW5jdGlvbiBadW4obixlKXsxJm4mJihKKDAsImgzIiw2KSxTZSgxLCJTVUJNSVQgUVVFVUUiKSx0ZSgpKX1mdW5jdGlvbiBHdW4obixlKXtpZigxJm4mJihK''@;'; put 'put ''KDAsInAiLDcpLFNlKDEsIiBZb3UgaGF2ZSAiKSxKKDIsInNwYW4iKSxTZSgzKSx0ZSgpLFNlKDQsInN1Ym1pc3Npb25zIHdhaXRpbmcgdG8gYmUgYXBwcm92ZWQgIiksdGUoKSksMiZuKXtjb25zdCB0PVRlKDMpO2llKDMpLFNyKCIiLHQucmVtYWluZWQsIiAiKX19ZnVuY3Rpb24gJHVuKG4s''@;'; put 'put ''ZSl7MSZuJiYoSigwLCJzcGFuIiwxMyksU2UoMSwiIExvYWRpbmcuLi4gIiksdGUoKSl9ZnVuY3Rpb24gcXVuKG4sZSl7MSZuJiYoSigwLCJkaXYiKSgxLCJoMyIpLFNlKDIsIkxvYWRpbmcgc3VibWl0dGVkIGxpc3QiKSx0ZSgpKCkpfWZ1bmN0aW9uIEt1bihuLGUpe2lmKDEmbiYmKEooMCwi''@;'; put 'put ''ZGl2Iiw4KSx2dCgxLCR1biwyLDAsInNwYW4iLDEzKSx2dCgyLHF1biwzLDAsImRpdiIpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgzKTtpZSgpLF90KHQubG9hZGVkPy0xOjEpLGllKCksX3QodC5sb2FkZWQ/LTE6Mil9fWZ1bmN0aW9uIFh1bihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0oo''@;'; put 'put ''MCwiY2xyLWRnLXJvdyIsMjEpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBpPVllKHQpLiRpbXBsaWNpdDtyZXR1cm4gWGUoVGUoNSkuZ29Ub0RldGFpbHMoaS50YWJsZUlkKSl9KSxKKDEsImNsci1kZy1jZWxsIiksU2UoMiksdGUoKSxKKDMsImNsci1kZy1jZWxsIiksU2UoNCksdGUo''@;'; put 'put ''KSxKKDUsImNsci1kZy1jZWxsIiksU2UoNiksdGUoKSxKKDcsImNsci1kZy1jZWxsIikoOCwiZGl2IiwyMikoOSwiYSIsMjMpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBpPVllKHQpLiRpbXBsaWNpdDtyZXR1cm4gWGUoVGUoNSkuZ29Ub1N0YWdlKGkudGFibGVJZCkpfSksSXQoMTAs''@;'; put 'put ''ImNsci1pY29uIiwyNCksSigxMSwic3BhbiIsMjUpLFNlKDEyLCJHbyB0byBzdGFnZWQgZGF0YSBzY3JlZW4iKSx0ZSgpKCkoKSgpLEooMTMsImNsci1kZy1jZWxsIiwyNikoMTQsImJ1dHRvbiIsMjcpLHd0KCJjbGljayIsZnVuY3Rpb24oaSl7Y29uc3Qgbz1ZZSh0KS4kaW1wbGljaXQ7cmV0''@;'; put 'put ''dXJuIFRlKDUpLmRvd25sb2FkKG8udGFibGVJZCksWGUoaS5zdG9wUHJvcGFnYXRpb24oKSl9KSxJdCgxNSwiY2xyLWljb24iLDI4KSx0ZSgpKCkoKX1pZigyJm4pe2NvbnN0IHQ9ZS4kaW1wbGljaXQ7aWUoMikscHIodC5iYXNlKSxpZSgyKSxwcih0LnN1Ym1pdHRlZCksaWUoMikscHIodC5z''@;'; put 'put ''dWJtaXRSZWFzb24pfX1mdW5jdGlvbiBRdW4obixlKXtpZigxJm4mJihKKDAsImRpdiIpKDEsImNsci1kYXRhZ3JpZCIsMTQpKDIsImNsci1kZy1jb2x1bW4iKSxTZSgzLCJCQVNFIFRBQkxFIiksdGUoKSxKKDQsImNsci1kZy1jb2x1bW4iLDE1KSxTZSg1LCIgU1VCTUlUVEVEICIpLEl0KDYs''@;'; put 'put ''ImNsci1kZy1zdHJpbmctZmlsdGVyIiwxNiksdGUoKSxKKDcsImNsci1kZy1jb2x1bW4iLDE1KSxTZSg4LCIgU1VCTUlUIFJFQVNPTiAiKSxJdCg5LCJjbHItZGctc3RyaW5nLWZpbHRlciIsMTcpLHRlKCksSigxMCwiY2xyLWRnLWNvbHVtbiIsNCksU2UoMTEsIkFDVElPTiIpLHRlKCksSigx''@;'; put 'put ''MiwiY2xyLWRnLWNvbHVtbiIsNCksU2UoMTMsIkRPV05MT0FEIiksdGUoKSxZbigxNCxYdW4sMTYsMywiY2xyLWRnLXJvdyIsMTgpLEooMTUsImNsci1kZy1mb290ZXIiKSgxNiwiY2xyLWRnLXBhZ2luYXRpb24iLDE5LDApKDE4LCJjbHItZGctcGFnZS1zaXplIiwyMCksU2UoMTksIkl0ZW1z''@;'; put 'put ''IHBlciBwYWdlIiksdGUoKSxTZSgyMCksdGUoKSgpKCkoKSksMiZuKXtjb25zdCB0PW9vKDE3KSxyPVRlKDQpO2llKDQpLHJ0KCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkIiksaWUoMikscnQoImNsckRnU3RyaW5nRmlsdGVyIixyLnN1Ym1pdHRlZEZpbHRlciksaWUoKSxydCgiY2xyRGdGaWVs''@;'; put 'put ''ZCIsInN1Ym1pdFJlYXNvbiIpLGllKDIpLHJ0KCJjbHJEZ1N0cmluZ0ZpbHRlciIsci5zdWJtaXRSZWFzb25GaWx0ZXIpLGllKDUpLHJ0KCJjbHJEZ0l0ZW1zT2YiLHIuc3VibWl0dGVyTGlzdCksaWUoMikscnQoImNsckRnUGFnZVNpemUiLDEwKSxpZSgyKSxydCgiY2xyUGFnZVNpemVPcHRp''@;'; put 'put ''b25zIixtYygxMCxXdW4pKSxpZSgyKSxlNCgiICIsdC5maXJzdEl0ZW0rMSwiIC0gIix0Lmxhc3RJdGVtKzEsIiBvZiAiLHQudG90YWxJdGVtcywiIHN1Ym1pc3Npb25zICIpfX1mdW5jdGlvbiBKdW4obixlKXtpZigxJm4mJihKKDAsImRpdiIsOSksdnQoMSxRdW4sMjEsMTEsImRpdiIpLHRl''@;'; put 'put ''KCkpLDImbil7Y29uc3QgdD1UZSgzKTtpZSgpLF90KHQuc3VibWl0dGVyTGlzdCYmMCE9PXQucmVtYWluZWQ/MTotMSl9fWZ1bmN0aW9uIGVkbihuLGUpe2lmKDEmbiYmKEooMCwiZGl2IiwzKSx2dCgxLFl1biw1LDAsImRpdiIsNCksSigyLCJkaXYiLDUpLHZ0KDMsWnVuLDIsMCwiaDMiLDYp''@;'; put 'put ''LHZ0KDQsR3VuLDUsMSwicCIsNyksdGUoKSx2dCg1LEt1biwzLDIsImRpdiIsOCksdnQoNixKdW4sMiwxLCJkaXYiLDkpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgyKTtpZSgpLF90KDA9PT10LnJlbWFpbmVkJiZ0LmxvYWRlZD8xOi0xKSxpZSgpLHJ0KCJuZ0NsYXNzIix0NCg2LHp1biwhdC5s''@;'; put 'put ''b2FkZWQpKSxpZSgpLF90KDAhPT10LnJlbWFpbmVkPzM6LTEpLGllKCksX3QodC5sb2FkZWQmJjAhPT10LnJlbWFpbmVkPzQ6LTEpLGllKCksX3QodC5sb2FkZWQ/LTE6NSksaWUoKSxfdCh0LmxvYWRlZD82Oi0xKX19ZnVuY3Rpb24gdGRuKG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiLDIpLHZ0''@;'; put 'put ''KDEsZWRuLDcsOCwiZGl2IiwzKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSgpLF90KHQuc3ViUmVhZHk/LTE6MSl9fWZ1bmN0aW9uIG5kbihuLGUpezEmbiYmKEooMCwiZGl2IiksSXQoMSwiYXBwLWFwcHJvdmUtZGV0YWlscyIpLHRlKCkpfWNsYXNzIHJkbnthY2NlcHRzKGUsdCl7cmV0''@;'; put 'put ''dXJuIGUuc3VibWl0dGVkLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0LnRvTG93ZXJDYXNlKCkpPj0wfX1jbGFzcyBpZG57YWNjZXB0cyhlLHQpe3JldHVybiBlLnN1Ym1pdFJlYXNvbi50b0xvd2VyQ2FzZSgpLmluZGV4T2YodC50b0xvd2VyQ2FzZSgpKT49MH19bGV0IG5HZT0oKCk9Pnt2YXIg''@;'; put 'put ''bjtjbGFzcyBle2NvbnN0cnVjdG9yKHIsaSxvLGEsbCl7dGhpcy5zYXNTdG9yZVNlcnZpY2U9cix0aGlzLmV2ZW50U2VydmljZT1pLHRoaXMucm91dGVyPW8sdGhpcy5yb3V0ZT1hLHRoaXMuc2FzU2VydmljZT1sLHRoaXMucmVtYWluZWQ9MCx0aGlzLmxvYWRlZD0hMSx0aGlzLnN1YlJlYWR5''@;'; put 'put ''PSExLHRoaXMuZGV0YWlsc09wZW49ITEsdGhpcy5zdWJtaXR0ZWRGaWx0ZXI9bmV3IHJkbix0aGlzLnN1Ym1pdFJlYXNvbkZpbHRlcj1uZXcgaWRufWdvVG9TdGFnZShyKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIityKX1nb1RvRGV0YWlscyhyKXt0aGlzLnNhc1N0b3Jl''@;'; put 'put ''U2VydmljZS5oYW5kb2ZmU3VibWl0cyh0aGlzLnN1Ym1pdERhdGEpLHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvc3VibWl0dGVkLyIrcil9Z2V0RGV0YWlscyhyLGkpe3RoaXMuc3ViUmVhZHk9ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnNlbmRE''@;'; put 'put ''ZXRhaWxzKHIsaSx0aGlzLnN1Ym1pdERhdGEpfSwwKX1uZ09uSW5pdCgpe3ZhciByPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe2NvbnN0IGk9ci5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDtyLml0ZW1zTnVtPTEwO3RyeXtsZXQgbz1yLnNhc1N0b3JlU2VydmljZS50YWtlU3Vi''@;'; put 'put ''bWl0c0hhbmRvZmYoKTtpZihvfHwobz0oeWllbGQgci5zYXNTdG9yZVNlcnZpY2UuZ2V0U3VibWl0dHMoKSkuZnJvbXNhcyksci5yZW1haW5lZD1vLmxlbmd0aCxyLnJlbWFpbmVkPjApe3Iuc3VibWl0dGVyPW9bMF0uU1VCTUlUVEVEX0JZX05NO2xldCBhPW8ubWFwKGZ1bmN0aW9uKGwpe3Jl''@;'; put 'put ''dHVybnt0YWJsZUlkOmwuVEFCTEVfSUQsYmFzZTpsLkJBU0VfVEFCTEUsc3VibWl0dGVkOmwuU1VCTUlUVEVEX09OX0RUVE0sc3VibWl0dGVyOmwuU1VCTUlUVEVEX0JZX05NLHN1Ym1pdFJlYXNvbjpsLlNVQk1JVFRFRF9SRUFTT05fVFhUfX0pO2lmKHIuc3VibWl0dGVyTGlzdD1hLHIuc3Vi''@;'; put 'put ''bWl0RGF0YT1vLHR5cGVvZiBpPCJ1Iil7Y29uc3QgbD1yLnN1Ym1pdHRlckxpc3QuZmluZEluZGV4KHU9PnUudGFibGVJZD09PWkpO2w+LTEmJnIuZ2V0RGV0YWlscyhyLnN1Ym1pdHRlckxpc3RbbF0sbCl9fXIubG9hZGVkPSEwfWNhdGNoKG8pe3IuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9u''@;'; put 'put ''c2VFcnJvcigiZWRpdG9ycy9nZXRzdWJtaXRzIixvKX19KSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3JlYWR5U3ViPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFN1Ym1pdC5zdWJzY3JpYmUocj0+e3RoaXMuc3ViUmVhZHk9cn0pLHRoaXMuX2JhY2tUb1N1Yj10aGlzLnNhc1N0b3JlU2Vy''@;'; put 'put ''dmljZS5zZXRTdWJtaXRMaXN0LnN1YnNjcmliZShyPT57dGhpcy5zdWJSZWFkeT0hdGhpcy5zdWJSZWFkeSx0aGlzLmRldGFpbHNPcGVuPSExfSl9ZG93bmxvYWQocil7bGV0IGk9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksbz1pLnNlcnZlclVybCxhPWkuYXBwTG9jLGw9dGhp''@;'; put 'put ''cy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihvK2wrIi8/X3Byb2dyYW09IithKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrcil9c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8''@;'; put 'put ''ZSkoemUoQnApLHplKHVkKSx6ZSh2YyksemUocDEpLHplKGljKSl9LHRoaXMuXHUwMjc1Y21wPVByKHt0eXBlOmUsc2VsZWN0b3JzOltbImFwcC1zdWJtaXR0ZXIiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6Myx2YXJzOjIsY29uc3Rz''@;'; put 'put ''OltbInBhZ2luYXRpb24iLCIiXSxbMSwidy0xMDAiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJjYXJkLWhlYWRlciIsMywibmdDbGFzcyJdLFsxLCJjZW50ZXIiLCJjbHItY29sLW1kLTEyIiwidGV4dC1j''@;'; put 'put ''ZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXdlaWdodC03MDAiLCJjb2xvci1kYXJrLWdyYXkiXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImNsci1jb2wtbWQtMTIiXSxb''@;'; put 'put ''MSwibm8tc3VibWl0dGVkLXRhYmxlcyIsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyJdLFsxLCJ0''@;'; put 'put ''ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwic3Bpbm5lciJdLFsxLCJkYXRhZ3JpZC1jb21wYWN0IiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ0ZpZWxkIl0sWyJhcmlhLWxhYmVsIiwiRmlsdGVyIHN1Ym1pdHRlZCBkYXRlIiwzLCJjbHJEZ1N0cmluZ0ZpbHRlciJd''@;'; put 'put ''LFsiYXJpYS1sYWJlbCIsIkZpbHRlciBzdWJtaXQgcmVhc29uIiwzLCJjbHJEZ1N0cmluZ0ZpbHRlciJdLFsiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siLDQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMywiY2xyRGdQYWdlU2l6ZSJdLFszLCJjbHJQYWdlU2l6ZU9w''@;'; put 'put ''dGlvbnMiXSxbMSwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtbGFiZWwiLCJHbyB0byBzdGFnZWQgZGF0YSBzY3JlZW4iLDEsInJvdyIsImp1c3RpZnktY29udGVudC1hcm91bmQiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRp''@;'; put 'put ''cCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItYmx1ZSIsMywiY2xpY2siXSxbInNoYXBlIiwiY29kZSIsInNpemUiLCIyOCJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwicC0wIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiYXJpYS1s''@;'; put 'put ''YWJlbCIsIkRvd25sb2FkIGF1ZGl0IGZpbGUgZm9yIHRhYmxlIHJlY29yZCIsMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGksbyl7MSZpJiYoSigwLCJkaXYiLDEpLHZ0KDEsdGRuLDIsMSwiZGl2IiwyKSx2''@;'; put 'put ''dCgyLG5kbiwyLDAsImRpdiIpLHRlKCkpLDImaSYmKGllKCksX3Qoby5zdWJSZWFkeT8tMToxKSxpZSgpLF90KG8uc3ViUmVhZHk/MjotMSkpfSxkZXBlbmRlbmNpZXM6W0ZoLE52LHY0LHR3LGZXLHhNLFlELHBXLEx2LEc1LG53LFJNLE92LFFiLER2LEpiLFNNLGN1LHRHZV0sZW5jYXBzdWxh''@;'; put 'put ''dGlvbjoyfSkpfXJldHVybiBuKCksZX0pKCk7Y29uc3Qgb2RuPShuLGUpPT4oe3JlamVjdGVkOm4sYWNjZXB0ZWQ6ZX0pO2Z1bmN0aW9uIGFkbihuLGUpezEmbiYmKEooMCwiZGl2IiwxKSxJdCgxLCJjbHItaWNvbiIsMTEpLEooMiwiaDMiLDEyKSxTZSgzLCJUaGVyZSBpcyBubyBoaXN0b3J5''@;'; put 'put ''IHRvIHNob3ciKSx0ZSgpKCkpfWZ1bmN0aW9uIHNkbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiYSIsMTQpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtZZSh0KTtjb25zdCBpPVRlKCkuJGltcGxpY2l0LG89VGUoKTtyZXR1cm4gWGUoby5nZXRUYWJsZShvLmFwcHJvdmVEYXRhW2ld''@;'; put 'put ''KSl9KSxTZSgxKSx0ZSgpfWlmKDImbil7Y29uc3QgdD1UZSgpLiRpbXBsaWNpdCxyPVRlKCk7aWUoKSxwcihyLmFwcHJvdmVEYXRhW3RdKX19ZnVuY3Rpb24gbGRuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJkaXYiKSgxLCJhIiwxNCksd3QoImNsaWNrIixmdW5jdGlvbigpe1ll''@;'; put 'put ''KHQpO2NvbnN0IGk9VGUoKS4kaW1wbGljaXQsbz1UZSgpO3JldHVybiBYZShvLmdldEJhc2VUYWJsZShvLmFwcHJvdmVEYXRhW2ldKSl9KSxTZSgyLCJWSUVXIiksdGUoKSxKKDMsInNwYW4iKSxTZSg0LCIgLyAiKSx0ZSgpLEooNSwiYSIsMTQpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtZZSh0''@;'; put 'put ''KTtjb25zdCBpPVRlKCkuJGltcGxpY2l0LG89VGUoKTtyZXR1cm4gWGUoby5nZXRFZGl0VGFibGUoby5hcHByb3ZlRGF0YVtpXSkpfSksU2UoNiwiRURJVCIpLHRlKCkoKX19ZnVuY3Rpb24gY2RuKG4sZSl7aWYoMSZuJiYoSigwLCJzcGFuIiksU2UoMSksdGUoKSksMiZuKXtjb25zdCB0PVRl''@;'; put 'put ''KCkuJGltcGxpY2l0LHI9VGUoKTtpZSgpLHByKHIuYXBwcm92ZURhdGFbdF0pfX1mdW5jdGlvbiB1ZG4obixlKXtpZigxJm4mJihKKDAsInRyIikoMSwidGQiLDYpLFNlKDIpLHRlKCksSigzLCJ0ZCIsNiksdnQoNCxzZG4sMiwxLCJhIiwxMyksdnQoNSxsZG4sNywwLCJkaXYiKSx2dCg2LGNk''@;'; put 'put ''biwyLDEsInNwYW4iKSx0ZSgpKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdCxyPWUuJGluZGV4O2llKDIpLHByKHQpLGllKDIpLF90KHI8MT80Oi0xKSxpZSgpLF90KHI8MiYmcj49MT81Oi0xKSxpZSgpLF90KHI+PTI/NjotMSl9fWZ1bmN0aW9uIGRkbihuLGUpezEmbiYmKEooMCwic3Bh''@;'; put 'put ''biIsMTUpLFNlKDEsIiBMb2FkaW5nLi4uICIpLHRlKCkpfWZ1bmN0aW9uIGhkbihuLGUpezEmbiYmKEooMCwiZGl2IikoMSwiaDMiKSxTZSgyLCJMb2FkaW5nIGhpc3RvcnkiKSx0ZSgpKCkpfWZ1bmN0aW9uIGZkbihuLGUpe2lmKDEmbiYmKEooMCwiZGl2Iiw5KSx2dCgxLGRkbiwyLDAsInNw''@;'; put 'put ''YW4iLDE1KSx2dCgyLGhkbiwzLDAsImRpdiIpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgpO2llKCksX3QodC5sb2FkZWQ/LTE6MSksaWUoKSxfdCh0LmxvYWRlZD8tMToyKX19ZnVuY3Rpb24gcGRuKG4sZSl7MSZuJiYoSigwLCJoMyIsMTcpLFNlKDEsIkhJU1RPUlkiKSx0ZSgpKX1mdW5jdGlv''@;'; put 'put ''biBnZG4obixlKXtpZigxJm4mJihKKDAsInAiLDE4KSxTZSgxKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoMik7aWUoKSxTcigiIFRvIHVubG9jayBtb3JlIHRoYW4gIix0LmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCwiIHJlY29yZHMsIGNvbnRhY3Qgc3VwcG9ydEBk''@;'; put 'put ''YXRhY29udHJvbGxlci5pbyAiKX19ZnVuY3Rpb24gbWRuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItZGctcm93IiwzMCksd3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGk9WWUodCkuJGltcGxpY2l0O3JldHVybiBYZShUZSgzKS5nZXRBcHBySW5kZXgoaSkpfSksSigx''@;'; put 'put ''LCJjbHItZGctY2VsbCIsMzEpKDIsImEiLDMyKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaT1ZZSh0KS4kaW1wbGljaXQ7cmV0dXJuIFhlKFRlKDMpLmdldEJhc2VUYWJsZShpLmJhc2V0YWJsZSkpfSksU2UoMyksdGUoKSgpLEooNCwiY2xyLWRnLWNlbGwiLDMzKSxTZSg1KSx0ZSgp''@;'; put 'put ''LEooNiwiY2xyLWRnLWNlbGwiLDMxKSxTZSg3KSx0ZSgpLEooOCwiY2xyLWRnLWNlbGwiLDMxKSxTZSg5KSx0ZSgpLEooMTAsImNsci1kZy1jZWxsIiwzMSksU2UoMTEpLHRlKCksSigxMiwiY2xyLWRnLWNlbGwiLDMxKSxTZSgxMyksdGUoKSxKKDE0LCJjbHItZGctY2VsbCIsMzQpKDE1LCJi''@;'; put 'put ''dXR0b24iLDM1KSx3dCgiY2xpY2siLGZ1bmN0aW9uKGkpe2NvbnN0IG89WWUodCkuJGltcGxpY2l0O3JldHVybiBUZSgzKS5kb3dubG9hZChvLnRhYmxlSWQpLFhlKGkuc3RvcFByb3BhZ2F0aW9uKCkpfSksSXQoMTYsImNsci1pY29uIiwzNiksdGUoKSgpKCl9aWYoMiZuKXtjb25zdCB0PWUu''@;'; put 'put ''JGltcGxpY2l0O2llKDMpLHByKHQuYmFzZXRhYmxlKSxpZSgpLHJ0KCJuZ0NsYXNzIixONSg3LG9kbiwiUkVKRUNURUQiPT09dC5zdGF0dXMsIkFQUFJPVkVEIj09PXQuc3RhdHVzKSksaWUoKSxwcih0LnN0YXR1cyksaWUoMikscHIodC5zdWJtaXR0ZXIpLGllKDIpLHByKHQuc3VibWl0dGVk''@;'; put 'put ''UmVhc29uKSxpZSgyKSxwcih0LnN1Ym1pdHRlZCksaWUoMikscHIodC5yZXZpZXdlZCl9fWZ1bmN0aW9uIHZkbihuLGUpe2lmKDEmbiYmKEooMCwiY2xyLWRhdGFncmlkIiwxOSkoMSwiY2xyLWRnLWNvbHVtbiIsMjIpLFNlKDIsIiBCQVNFX1RBQkxFICIpLEl0KDMsImNsci1kZy1zdHJpbmct''@;'; put 'put ''ZmlsdGVyIiwyMyksdGUoKSxKKDQsImNsci1kZy1jb2x1bW4iLDIyKSxTZSg1LCIgU1RBVFVTICIpLEl0KDYsImNsci1kZy1zdHJpbmctZmlsdGVyIiwyNCksdGUoKSxKKDcsImNsci1kZy1jb2x1bW4iLDIyKSxTZSg4LCIgU1VCTUlUVEVSICIpLEl0KDksImNsci1kZy1zdHJpbmctZmlsdGVy''@;'; put 'put ''IiwyNSksdGUoKSxKKDEwLCJjbHItZGctY29sdW1uIiwyMiksU2UoMTEsIiBTVUJNSVQgUkVBU09OICIpLEl0KDEyLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMjYpLHRlKCksSigxMywiY2xyLWRnLWNvbHVtbiIsMjIpLFNlKDE0LCIgU1VCTUlUVEVEICIpLEl0KDE1LCJjbHItZGctc3RyaW5n''@;'; put 'put ''LWZpbHRlciIsMjcpLHRlKCksSigxNiwiY2xyLWRnLWNvbHVtbiIsMjIpLFNlKDE3LCIgQVBQUk9WRUQgLyBSRUpFQ1RFRCAiKSxJdCgxOCwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDI4KSx0ZSgpLEooMTksImNsci1kZy1jb2x1bW4iKSxTZSgyMCwiRE9XTkxPQUQiKSx0ZSgpLFluKDIxLG1k''@;'; put 'put ''biwxNywxMCwiY2xyLWRnLXJvdyIsMjkpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgyKTtpZSgpLHJ0KCJjbHJEZ0ZpZWxkIiwiYmFzZXRhYmxlIiksaWUoMikscnQoImNsckRnU3RyaW5nRmlsdGVyIix0LmJhc2VUYWJsZUZpbHRlciksaWUoKSxydCgiY2xyRGdGaWVsZCIsInN0YXR1cyIpLGll''@;'; put 'put ''KDIpLHJ0KCJjbHJEZ1N0cmluZ0ZpbHRlciIsdC5zdGF0dXNGaWx0ZXIpLGllKCkscnQoImNsckRnRmllbGQiLCJzdWJtaXR0ZXIiKSxpZSgyKSxydCgiY2xyRGdTdHJpbmdGaWx0ZXIiLHQuc3VibWl0dGVyRmlsdGVyKSxpZSgpLHJ0KCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkUmVhc29uIiks''@;'; put 'put ''aWUoMikscnQoImNsckRnU3RyaW5nRmlsdGVyIix0LnN1Ym1pdFJlYXNvbkZpbHRlciksaWUoKSxydCgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlZCIpLGllKDIpLHJ0KCJjbHJEZ1N0cmluZ0ZpbHRlciIsdC5zdWJtaXR0ZWRGaWx0ZXIpLGllKCkscnQoImNsckRnRmllbGQiLCJyZXZpZXdlZCIp''@;'; put 'put ''LGllKDIpLHJ0KCJjbHJEZ1N0cmluZ0ZpbHRlciIsdC5yZXZpZXdlZEZpbHRlciksaWUoMykscnQoImNsckRnSXRlbXNPZiIsdC5oaXN0b3J5KX19ZnVuY3Rpb24gX2RuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJidXR0b24iLDM3KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIFllKHQpLFhlKFRlKDIpLmxvYWREYXRhKCkpfSksU2UoMSksdGUoKX1pZigyJm4pe2NvbnN0IHQ9VGUoMik7cnQoImNsckxvYWRpbmciLHQubG9hZGluZ01vcmUpLGllKCksU3IoIiBMb2FkICIsdC5yb3dzTGVmdFRvTG9hZCwiIG1vcmUgIil9fWZ1bmN0aW9uIHlkbihuLGUpe2lmKDEm''@;'; put 'put ''biYmKEooMCwiZGl2IiwxMCkoMSwiZGl2IiwxNiksdnQoMixwZG4sMiwwLCJoMyIsMTcpLHZ0KDMsZ2RuLDIsMSwicCIsMTgpLHRlKCksdnQoNCx2ZG4sMjIsMTMsImNsci1kYXRhZ3JpZCIsMTkpLEooNSwiZGl2IiwyMCksdnQoNixfZG4sMiwyLCJidXR0b24iLDIxKSx0ZSgpKCkpLDImbil7''@;'; put 'put ''Y29uc3QgdD1UZSgpO2llKDIpLF90KHQubG9hZGVkPzI6LTEpLGllKCksX3QodC5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQhPT10LkluZmluaXR5PzM6LTEpLGllKCksX3QodC5sb2FkZWQ/NDotMSksaWUoMiksX3QodC5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9y''@;'; put 'put ''eV9yb3dzX2FsbG93ZWQ9PT10LkluZmluaXR5JiZ0LnJvd3NMZWZ0VG9Mb2FkPjA/NjotMSl9fWNsYXNzIGJkbnthY2NlcHRzKGUsdCl7cmV0dXJuIGUuYmFzZXRhYmxlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0LnRvTG93ZXJDYXNlKCkpPj0wfX1jbGFzcyB3ZG57YWNjZXB0cyhlLHQpe3Jl''@;'; put 'put ''dHVybiBlLnN0YXR1cy50b0xvd2VyQ2FzZSgpLmluZGV4T2YodC50b0xvd2VyQ2FzZSgpKT49MH19Y2xhc3MgQ2Rue2FjY2VwdHMoZSx0KXtyZXR1cm4gZS5zdWJtaXR0ZXIudG9Mb3dlckNhc2UoKS5pbmRleE9mKHQudG9Mb3dlckNhc2UoKSk+PTB9fWNsYXNzIFNkbnthY2NlcHRzKGUsdCl7''@;'; put 'put ''cmV0dXJuIGUuc3VibWl0dGVkUmVhc29uLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0LnRvTG93ZXJDYXNlKCkpPj0wfX1jbGFzcyBFZG57YWNjZXB0cyhlLHQpe3JldHVybiBlLnN1Ym1pdHRlZC50b0xvd2VyQ2FzZSgpLmluZGV4T2YodC50b0xvd2VyQ2FzZSgpKT49MH19Y2xhc3MgTWRue2Fj''@;'; put 'put ''Y2VwdHMoZSx0KXtyZXR1cm4gZS5yZXZpZXdlZC50b0xvd2VyQ2FzZSgpLmluZGV4T2YodC50b0xvd2VyQ2FzZSgpKT49MH19Y29uc3QgVGRuPVt7cGF0aDoiYXBwcm92ZSIsY29tcG9uZW50OlV1bn0se3BhdGg6ImFwcHJvdmVEZXQvOnRhYmxlSWQiLGNvbXBvbmVudDp0R2V9LHtwYXRoOiJz''@;'; put 'put ''dWJtaXR0ZWQiLGNvbXBvbmVudDpuR2V9LHtwYXRoOiJzdWJtaXR0ZWQvOnRhYmxlSWQiLGNvbXBvbmVudDpuR2V9LHtwYXRoOiJoaXN0b3J5Iixjb21wb25lbnQ6KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3RvcihyLGksbyxhLGwpe3RoaXMubGljZW5jZVNlcnZpY2U9cix0aGlzLnNh''@;'; put 'put ''c1N0b3JlU2VydmljZT1pLHRoaXMuZXZlbnRTZXJ2aWNlPW8sdGhpcy5yb3V0ZXI9YSx0aGlzLnNhc1NlcnZpY2U9bCx0aGlzLmhpc3Rvcnk9W10sdGhpcy50YWJsZVRpdGxlcz1bXSx0aGlzLmhpc3RvcnlBcnI9W10sdGhpcy5sb2FkZWQ9ITEsdGhpcy5pdGVtc051bT0xMCx0aGlzLm9wZW5N''@;'; put 'put ''b2RhbD0hMSx0aGlzLm5vRGF0YT0hMSx0aGlzLmFwcHJvdmVEYXRhPXt9LHRoaXMuc2FzanNDb25maWc9bmV3IHhwLlNBU2pzQ29uZmlnLHRoaXMuYmFzZVRhYmxlRmlsdGVyPW5ldyBiZG4sdGhpcy5zdGF0dXNGaWx0ZXI9bmV3IHdkbix0aGlzLnN1Ym1pdHRlckZpbHRlcj1uZXcgQ2RuLHRo''@;'; put 'put ''aXMuc3VibWl0UmVhc29uRmlsdGVyPW5ldyBTZG4sdGhpcy5zdWJtaXR0ZWRGaWx0ZXI9bmV3IEVkbix0aGlzLnJldmlld2VkRmlsdGVyPW5ldyBNZG4sdGhpcy5oaXN0UGFyYW1zPXtISVNUOjAsU1RBUlRST1c6MSxOT0JTOi0xfSx0aGlzLmxvYWRpbmdNb3JlPSExLHRoaXMubGljZW5jZVN0''@;'; put 'put ''YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCl9Z2V0VGFibGUocil7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrcil9Z2V0QmFzZVRh''@;'; put 'put ''YmxlKHIpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEvIityKX1nZXRFZGl0VGFibGUocil7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3IpfWdldEFwcHJJbmRleChyKXtjb25zdCBpPXRoaXMuaGlzdG9yeUFyci5maW5kSW5kZXgobz0+by5UQUJM''@;'; put 'put ''RV9JRD09PXIudGFibGVJZCk7aT4tMSYmKHRoaXMuYXBwcm92ZURhdGE9dGhpcy5oaXN0b3J5QXJyW2ldLHRoaXMub3Blbk1vZGFsPSEwKX1nZXQgcm93c0xlZnRUb0xvYWQoKXtjb25zdCByPXRoaXMuaGlzdFBhcmFtcy5OT0JTLXRoaXMuaGlzdG9yeS5sZW5ndGgsaT10aGlzLmhpc3RQYXJh''@;'; put 'put ''bXMuSElTVDtyZXR1cm4gcjw9MD8wOnI+aT9pOnJ9ZG93bmxvYWQocil7bGV0IGk9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksbz1pLnNlcnZlclVybCxhPWkuYXBwTG9jLGw9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihvK2wrIi8/X3By''@;'; put 'put ''b2dyYW09IithKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrcisiJl9jb250ZXh0bmFtZT0iK3RoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWUpfWxvYWREYXRhKCl7dmFyIHI9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7bGV0IGk9e1NUQVJUUk9XOnIuaGlz''@;'; put 'put ''dFBhcmFtcy5ISVNUK3IuaGlzdFBhcmFtcy5TVEFSVFJPV307ci5sb2FkaW5nTW9yZT0hMDt0cnl7bGV0IGEsbz15aWVsZCByLnNhc1N0b3JlU2VydmljZS5nZXRIaXN0b3J5KGksIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvZ2V0aGlzdG9yeSIpO3IubG9hZGluZ01vcmU9ITEsci5oaXN0''@;'; put 'put ''UGFyYW1zPW8uaGlzdHBhcmFtc1swXTtjb25zdCBsPW8uZnJvbXNhcy5zbGljZSgwLHIubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkKTtpZihsLmxlbmd0aD4wKXtjb25zdCB1PWw7ci5oaXN0b3J5QXJyPWwsYT1PYmplY3Qua2V5cyh1WzBdKSxyLnRhYmxlVGl0bGVz''@;'; put 'put ''PWE7bGV0IGc9bC5tYXAoZnVuY3Rpb24oRSl7cmV0dXJue3RhYmxlSWQ6RS5UQUJMRV9JRCxzdWJtaXR0ZXI6RS5TVUJNSVRURVIsc3VibWl0dGVkUmVhc29uOkUuU1VCTUlUVEVEX1JFQVNPTl9UWFQsc3VibWl0dGVkOkUuU1VCTUlUVEVELHN0YXR1czpFLlNUQVRVUyxyZXZpZXdSZWFzb246''@;'; put 'put ''RS5SRVZJRVdfUkVBU09OX1RYVCxyZXZpZXdlcjpFLlJFVklFV0VSLHJldmlld2VkOkUuUkVWSUVXRUQsbnVtT2ZBcHByb3ZhbHM6RS5OVU1fT0ZfQVBQUk9WQUxTX1JFUVVJUkVELGJhc2V0YWJsZTpFLkJBU0VfVEFCTEV9fSk7ci5oaXN0b3J5LnB1c2goLi4uZyksci5sb2FkZWQ9ITB9ZWxz''@;'; put 'put ''ZSByLmxvYWRlZD0hMCwwPT09ci5oaXN0b3J5Lmxlbmd0aCYmKHIubm9EYXRhPSEwKX1jYXRjaChvKXtyLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9nZXRoaXN0b3J5IixvKSxyLmxvYWRpbmdNb3JlPSExfX0pKCl9bmdPbkluaXQoKXt2YXIgcj10aGlzO3Jl''@;'; put 'put ''dHVybiBDcihmdW5jdGlvbiooKXtyLmxvYWREYXRhKCl9KSgpfXN0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpKHplKEYyKSx6ZShCcCksemUodWQpLHplKHZjKSx6ZShpYykpfSx0aGlzLlx1MDI3NWNtcD1Qcih7dHlwZTplLHNlbGVj''@;'; put 'put ''dG9yczpbWyJhcHAtaGlzdG9yeSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczoyMSx2YXJzOjUsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWyJpZCIsIm5vRGF0YUNvbnRhaW5lciIsMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1''@;'; put 'put ''c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJ0YWJsZSJdLFsxLCJs''@;'; put 'put ''ZWZ0Il0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsImFyaWEtbGFiZWwiLCJDbG9zZSBtb2RhbCIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFs''@;'; put 'put ''aWduLWl0ZW1zLWNlbnRlciJdLFsxLCJjYXJkIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImN1cnNvci1wb2ludGVyIiwidGFibGUtbGluayJdLFsxLCJjdXJzb3ItcG9pbnRl''@;'; put 'put ''ciIsInRhYmxlLWxpbmsiLDMsImNsaWNrIl0sWzEsInNwaW5uZXIiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2VudGVyIiwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC13ZWlnaHQtNzAwIiwiY29sb3ItZGFyay1ncmF5Il0sWzEsImRhdGFn''@;'; put 'put ''cmlkLWhpc3RvcnkiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzEsImxvYWQtbW9yZSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xyTG9hZGluZyJdLFszLCJjbHJE''@;'; put 'put ''Z0ZpZWxkIl0sWyJhcmlhLWxhYmVsIiwiRmlsdGVyIGJhc2UgdGFibGUiLDMsImNsckRnU3RyaW5nRmlsdGVyIl0sWyJhcmlhLWxhYmVsIiwiRmlsdGVyIHN0YXR1cyIsMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbImFyaWEtbGFiZWwiLCJGaWx0ZXIgc3VibWl0dGVyIiwzLCJjbHJEZ1N0cmlu''@;'; put 'put ''Z0ZpbHRlciJdLFsiYXJpYS1sYWJlbCIsIkZpbHRlciBzdWJtaXQgcmVhc29uIiwzLCJjbHJEZ1N0cmluZ0ZpbHRlciJdLFsiYXJpYS1sYWJlbCIsIkZpbHRlciBzdWJtaXR0ZWQgZGF0ZSIsMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbImFyaWEtbGFiZWwiLCJGaWx0ZXIgcmV2aWV3ZWQgZGF0''@;'; put 'put ''ZSIsMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbMywiY2xpY2siLDQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMywiY2xpY2siXSxbMSwidmVyQ2VudGVyIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwibS0wIiwzLCJjbGljayJdLFsxLCJ2ZXJDZW50ZXIiLDMsIm5nQ2xh''@;'; put 'put ''c3MiXSxbMSwidmVyQ2VudGVyIiwicC0wIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiYXJpYS1sYWJlbCIsIkRvd25sb2FkIGF1ZGl0IGZpbGUiLDEsImJ0biIsImJ0bi1zdWNjZXNzIiwzLCJjbGljayJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsxLCJidG4iLCJidG4t''@;'; put 'put ''c3VjY2VzcyIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGksbyl7MSZpJiYoSigwLCJkaXYiLDApLHZ0KDEsYWRuLDQsMCwiZGl2IiwxKSxKKDIsImNsci1tb2RhbCIsMiksaGkoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24obCl7cmV0dXJuIGZpKG8u''@;'; put 'put ''b3Blbk1vZGFsLGwpfHwoby5vcGVuTW9kYWw9bCksbH0pLEooMywiaDQiLDMpLFNlKDQsIkFwcHJvdmFsIGRldGFpbHMiKSx0ZSgpLEooNSwiZGl2Iiw0KSg2LCJ0YWJsZSIsNSkoNywidGhlYWQiKSg4LCJ0ciIpKDksInRoIiw2KSxTZSgxMCwiTmFtZSIpLHRlKCksSigxMSwidGgiLDYpLFNl''@;'; put 'put ''KDEyLCJWYWx1ZSIpLHRlKCkoKSgpLEooMTMsInRib2R5IiksX28oMTQsdWRuLDcsNCwidHIiLG51bGwsQ28pLHRlKCkoKSgpLEooMTYsImRpdiIsNykoMTcsImJ1dHRvbiIsOCksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBvLm9wZW5Nb2RhbD0hMX0pLFNlKDE4LCIgT0sgIiksdGUo''@;'; put 'put ''KSgpKCksdnQoMTksZmRuLDMsMiwiZGl2Iiw5KSx2dCgyMCx5ZG4sNyw0LCJkaXYiLDEwKSx0ZSgpKSwyJmkmJihpZSgpLF90KG8ubm9EYXRhPzE6LTEpLGllKCksZGkoImNsck1vZGFsT3BlbiIsby5vcGVuTW9kYWwpLHJ0KCJjbHJNb2RhbFNpemUiLCJ4bCIpLGllKDEyKSx5byhvLnRhYmxl''@;'; put 'put ''VGl0bGVzKSxpZSg1KSxfdChvLmxvYWRlZD8tMToxOSksaWUoKSxfdCghby5ub0RhdGEmJm8ubG9hZGVkPzIwOi0xKSl9LGRlcGVuZGVuY2llczpbRmgsTnYsdjQsdHcseE0sTHYsRzUsbncsUk0sT3YsUWIsRHYsSmIsU00sY3UseGQsbWgsJDAsaW1dLGVuY2Fwc3VsYXRpb246Mn0pKX1yZXR1''@;'; put 'put ''cm4gbigpLGV9KSgpfV07bGV0IHhkbj0oKCk9Pnt2YXIgbjtjbGFzcyBle3N0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpfSx0aGlzLlx1MDI3NW1vZD1HaSh7dHlwZTplfSksdGhpcy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3FvLFdk''@;'; put 'put ''LmZvckNoaWxkKFRkbiksV2RdfSkpfXJldHVybiBuKCksZX0pKCksQWRuPSgoKT0+e3ZhciBuO2NsYXNzIGV7c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSl9LHRoaXMuXHUwMjc1bW9kPUdpKHt0eXBlOmV9KSx0aGlzLlx1MDI3NWlu''@;'; put 'put ''aj1taSh7aW1wb3J0czpbcW8saGQseGRuLHEwLEx3LEVtLCR4XX0pKX1yZXR1cm4gbigpLGV9KSgpLGtkbj0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fXN0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8''@;'; put 'put ''fGUpfSx0aGlzLlx1MDI3NWNtcD1Qcih7dHlwZTplLHNlbGVjdG9yczpbWyJhcHAtcmV2aWV3LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxzdGFuZGFsb25lOiExLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGksbyl7MSZpJiZJdCgwLCJyb3V0''@;'; put 'put ''ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbZTddLGVuY2Fwc3VsYXRpb246Mn0pKX1yZXR1cm4gbigpLGV9KSgpO2Z1bmN0aW9uIHJHZShuLGUsdCl7cmV0dXJuIHQmJmU/ZTpufWNvbnN0IFJkbj0obixlKT0+KHtyZWplY3RlZDpuLGFjY2VwdGVkOmV9KTtmdW5jdGlvbiBJZG4obixlKXsx''@;'; put 'put ''Jm4mJihKKDAsInNwYW4iLDMpLFNlKDEsIiBMb2FkaW5nLi4uICIpLHRlKCkpfWZ1bmN0aW9uIERkbihuLGUpezEmbiYmKEooMCwiZGl2IikoMSwiaDMiKSxTZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCB0YWJsZSIpLHRlKCkoKSl9ZnVuY3Rpb24gTGRuKG4sZSl7aWYoMSZuJiYoSigwLCJkaXYi''@;'; put 'put ''LDIpLHZ0KDEsSWRuLDIsMCwic3BhbiIsMyksdnQoMixEZG4sMywwLCJkaXYiKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSgpLF90KHQubG9hZGVkPy0xOjEpLGllKCksX3QodC5sb2FkZWQ/LTE6Mil9fWZ1bmN0aW9uIE9kbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiYnV0''@;'; put 'put ''dG9uIiwyOCksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgyKS5hcHByb3ZlVGFibGVTY3JlZW4oKSl9KSxTZSgxLCIgQXBwcm92ZSAiKSx0ZSgpfWlmKDImbil7Y29uc3QgdD1UZSgyKTtydCgiZGlzYWJsZWQiLCJBUFBST1ZFRCI9PT0obnVsbD09dC50YWJsZURl''@;'; put 'put ''dGFpbHM/bnVsbDp0LnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKXx8IlJFSkVDVEVEIj09PShudWxsPT10LnRhYmxlRGV0YWlscz9udWxsOnQudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpKSgiZGlzYWJsZWQiLHQucmV2ZXJ0aW5nQ2hhbmdlcyl9fWZ1bmN0aW9uIE5kbihu''@;'; put 'put ''LGUpezEmbiYmKEooMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMzEpKDEsInNwYW4iKSxTZSgyLCIgUmV2ZXJ0IHRoaXMgYW5kIGFsbCBzdWJzZXF1ZW50IGNoYW5nZXMgIiksdGUoKSgpKX1mdW5jdGlvbiBGZG4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImJ1dHRvbiIsMjkpLHd0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoMikucmV2ZXJ0Q2hhbmdlcygpKX0pLFNlKDEsIiBSRVZFUlQgIiksWW4oMixOZG4sMywwLCJjbHItdG9vbHRpcC1jb250ZW50IiwzMCksdGUoKX0yJm4mJnJ0KCJjbHJMb2FkaW5nIixUZSgyKS5yZXZlcnRpbmdDaGFuZ2Vz''@;'; put 'put ''KX1mdW5jdGlvbiBQZG4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRpdiIpKDEsImRpdiIsNCkoMiwiZGl2Iiw1KSgzLCJoNCIsNiksU2UoNCwiU3RhZ2VkIERhdGEiKSx0ZSgpKCkoKSxKKDUsImRpdiIsNykoNiwiZGl2Iiw4KSg3LCJkaXYiLDkpKDgsImRpdiIsNSksU2UoOSwi''@;'; put 'put ''QmFzaWMgU3VibWl0dGVkIERldGFpbHMiKSx0ZSgpKCksSigxMCwiZGl2IikoMTEsInNwYW4iKSxTZSgxMiwiVGFibGUgSWQ6IiksdGUoKSxKKDEzLCJzdHJvbmciKSgxNCwic3BhbiIpLFNlKDE1KSx0ZSgpKCkoKSxKKDE2LCJkaXYiKSgxNywic3BhbiIpLFNlKDE4LCJCYXNlIFRhYmxlOiIp''@;'; put 'put ''LHRlKCksSigxOSwiYSIsMTApLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoKS52aWV3ZXJUYWJsZVNjcmVlbigpKX0pLFNlKDIwKSx0ZSgpKCksSigyMSwiZGl2IikoMjIsInNwYW4iKSxTZSgyMywiU3VibWl0IERhdGU6IiksdGUoKSxKKDI0LCJzcGFuIiwxMSks''@;'; put 'put ''U2UoMjUpLHRlKCkoKSxKKDI2LCJkaXYiKSgyNywic3BhbiIpLFNlKDI4LCJSZXZpZXcgU3RhdHVzOiIpLHRlKCksSigyOSwic3BhbiIsMTIpLFNlKDMwKSx0ZSgpKCkoKSxKKDMxLCJkaXYiLDEzKSgzMiwiZGl2Iiw5KSgzMywiZGl2Iiw1KSxTZSgzNCwiQWN0aW9ucyIpLHRlKCkoKSxKKDM1''@;'; put 'put ''LCJkaXYiLDE0KSgzNiwiZGl2IiwxNSkoMzcsImJ1dHRvbiIsMTYpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoKS52aWV3ZXJUYWJsZVNjcmVlbigpKX0pLFNlKDM4LCIgVmlldyBiYXNlIHRhYmxlICIpLHRlKCksdnQoMzksT2RuLDIsMiwiYnV0dG9uIiwxNyks''@;'; put 'put ''Sig0MCwiYnV0dG9uIiwxOCksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLmdvQmFjaygpKX0pLFNlKDQxLCIgRWRpdCBiYXNlIHRhYmxlICIpLHRlKCksSig0MiwiYnV0dG9uIiwxOSksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoKTty''@;'; put 'put ''ZXR1cm4gWGUoaS5kb3dubG9hZChudWxsPT1pLnRhYmxlRGV0YWlscz9udWxsOmkudGFibGVEZXRhaWxzLlRBQkxFX0lEKSl9KSxJdCg0MywiY2xyLWljb24iLDIwKSx0ZSgpLEooNDQsImNsci10b2dnbGUtY29udGFpbmVyIiwyMSkoNDUsImNsci10b2dnbGUtd3JhcHBlciIpKDQ2LCJpbnB1''@;'; put 'put ''dCIsMjIpLGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKCk7cmV0dXJuIGZpKG8uZm9ybWF0dGVkVmFsdWVzLGkpfHwoby5mb3JtYXR0ZWRWYWx1ZXM9aSksWGUoaSl9KSx3dCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLmZv''@;'; put 'put ''cm1hdHRpbmdDaGFuZ2VkKCkpfSksdGUoKSxKKDQ3LCJsYWJlbCIsMjMpLFNlKDQ4KSx0ZSgpKCkoKSxKKDQ5LCJjbHItdG9vbHRpcCIpLHZ0KDUwLEZkbiwzLDEsImJ1dHRvbiIsMjQpLHRlKCkoKSgpKCkoKSxKKDUxLCJkaXYiLDI1KSxJdCg1MiwiaG90LXRhYmxlIiwyNiksdGUoKSxJdCg1''@;'; put 'put ''MywiZGl2IiwyNyksdGUoKX1pZigyJm4pe2NvbnN0IHQ9VGUoKTtpZSgxNSksU3IoIiAiLG51bGw9PXQudGFibGVEZXRhaWxzP251bGw6dC50YWJsZURldGFpbHMuVEFCTEVfSUQpLGllKDUpLFNyKCIgIixudWxsPT10LnRhYmxlRGV0YWlscz9udWxsOnQudGFibGVEZXRhaWxzLkJBU0VfVEFC''@;'; put 'put ''TEUsIiAiKSxpZSg1KSxTcigiICIsbnVsbD09dC50YWJsZURldGFpbHM/bnVsbDp0LnRhYmxlRGV0YWlscy5TVUJNSVRURURfT05fRFRUTSwiICIpLGllKDQpLHJ0KCJuZ0NsYXNzIixONSgxNCxSZG4sIlJFSkVDVEVEIj09PShudWxsPT10LnRhYmxlRGV0YWlscz9udWxsOnQudGFibGVEZXRh''@;'; put 'put ''aWxzLlJFVklFV19TVEFUVVNfSUQpLCJBUFBST1ZFRCI9PT0obnVsbD09dC50YWJsZURldGFpbHM/bnVsbDp0LnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSkpLFJyKCJhcmlhLWxhYmVsIiwiUmV2aWV3IHN0YXR1czogIisobnVsbD09dC50YWJsZURldGFpbHM/bnVsbDp0LnRhYmxl''@;'; put 'put ''RGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSksaWUoKSxTcigiICIsbnVsbD09dC50YWJsZURldGFpbHM/bnVsbDp0LnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lELCIgIiksaWUoNykscnQoImRpc2FibGVkIix0LnJldmVydGluZ0NoYW5nZXMpLGllKDIpLF90KCJZRVMiIT09KG51bGw9''@;'; put 'put ''PXQudGFibGVEZXRhaWxzP251bGw6dC50YWJsZURldGFpbHMuQUxMT1dfUkVTVE9SRSk/Mzk6LTEpLGllKCkscnQoImRpc2FibGVkIix0LnJldmVydGluZ0NoYW5nZXMpLGllKDYpLGRpKCJuZ01vZGVsIix0LmZvcm1hdHRlZFZhbHVlcyksaWUoMikscHIodC5mb3JtYXR0ZWRWYWx1ZXM/IkZv''@;'; put 'put ''cm1hdHRlZCI6IlVuZm9ybWF0dGVkIiksaWUoMiksX3QoIllFUyI9PT0obnVsbD09dC50YWJsZURldGFpbHM/bnVsbDp0LnRhYmxlRGV0YWlscy5BTExPV19SRVNUT1JFKT81MDotMSksaWUoMikscnQoImRhdGEiLHQuaG90VGFibGUuZGF0YSkoInNldHRpbmdzIix0LmhvdFRhYmxlU2V0dGlu''@;'; put 'put ''Z3MoKSl9fWNvbnN0IEhkbj1be3BhdGg6Ijp0YWJsZUlkIixjb21wb25lbnQ6KCgpPT57dmFyIG47Y2xhc3MgZXtidWlsZEhvdFNldHRpbmdzKCl7cmV0dXJuey4uLnRoaXMuaG90VGFibGUuc2V0dGluZ3MsY29sSGVhZGVyczp0aGlzLmhvdFRhYmxlLmNvbEhlYWRlcnMsY29sdW1uczp0aGlz''@;'; put 'put ''LmhvdFRhYmxlLmNvbHVtbnMsbWF4Um93czp0aGlzLmhvdFRhYmxlLm1heFJvd3MsaGVpZ2h0OnRoaXMuaG90VGFibGUuaGVpZ2h0LGxpY2Vuc2VLZXk6dGhpcy5ob3RUYWJsZS5saWNlbnNlS2V5LGFmdGVyR2V0Q29sSGVhZGVyOnRoaXMuaG90VGFibGUuYWZ0ZXJHZXRDb2xIZWFkZXIsYWZ0''@;'; put 'put ''ZXJJbml0OnRoaXMuaG90VGFibGUuYWZ0ZXJJbml0LHN0cmV0Y2hIOiJhbGwiLGNlbGxzOnRoaXMuaG90VGFibGUuY2VsbHMsY2xhc3NOYW1lOiJodERhcmsiLHRoZW1lOiJodC10aGVtZS1jbGFzc2ljIn19Y29uc3RydWN0b3IocixpLG8sYSxsLHUpe3RoaXMubGljZW5jZVNlcnZpY2U9cix0''@;'; put 'put ''aGlzLnNhc1N0b3JlU2VydmljZT1pLHRoaXMuZXZlbnRTZXJ2aWNlPW8sdGhpcy5yb3V0ZT1hLHRoaXMucm91dGVyPWwsdGhpcy5zYXNTZXJ2aWNlPXUsdGhpcy5sb2FkZWQ9ITEsdGhpcy5yZXZlcnRpbmdDaGFuZ2VzPSExLHRoaXMuZm9ybWF0dGVkVmFsdWVzPSEwLHRoaXMucmF3U3RhZ2VU''@;'; put 'put ''YWJsZT1bXSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLmhvdFRhYmxlPXtkYXRhOltdLGNvbEhlYWRlcnM6W10sY29sdW1uczpbXSxoZWlnaHQ6NTAwLHNldHRpbmdzOnthcmlhVGFnczohMSx0YWJsZUNsYXNzTmFtZToiaHRDZW50ZXIi''@;'; put 'put ''LG91dHNpZGVDbGlja0Rlc2VsZWN0czohMSxhdXRvV3JhcFJvdzohMSxhdXRvV3JhcENvbDohMX0sbGljZW5zZUtleTp2b2lkIDAsbWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWR8fDEvMCxhZnRlckdldENvbEhlYWRlcjooZyxFLE8pPT57RS5jbGFz''@;'; put 'put ''c0xpc3QuYWRkKFVuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9LGFmdGVySW5pdDooKT0+e3RoaXMuZml4Rm9jdXNDYXRjaGVyQWNjZXNzaWJpbGl0eSgpfX0sdGhpcy5ob3RUYWJsZVNldHRpbmdzPUIxKHRoaXMuYnVpbGRIb3RTZXR0aW5ncygpKX1zdWJtaXR0ZWRUYWJs''@;'; put 'put ''ZVNjcmVlbigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrdGhpcy50YWJsZV9pZCl9YXBwcm92ZVRhYmxlU2NyZWVuKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2FwcHJvdmVEZXQvIit0aGlzLnRhYmxlX2lkKX12aWV3ZXJUYWJsZVNjcmVlbigpe3Ro''@;'; put 'put ''aXMucm91dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YS8iK3RoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpfWdvQmFjaygpe1VuLnhsbWFwcy5maW5kKGk9PmkudGFyZ2V0RFM9PT10aGlzLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFKT90aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9o''@;'; put 'put ''b21lL2V4Y2VsLW1hcHMvIit0aGlzLmhvdFRhYmxlLmRhdGFbMF0uWExNQVBfSUQpOnRoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3RoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpfWZvcm1hdHRpbmdDaGFuZ2VkKCl7dGhpcy5ob3RUYWJsZS5kYXRhPXJHZSh0aGlzLnJh''@;'; put 'put ''d1N0YWdlVGFibGUsdGhpcy5mbXRTdGFnZVRhYmxlLHRoaXMuZm9ybWF0dGVkVmFsdWVzKX1kb3dubG9hZChyKXtsZXQgaT10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxvPWkuc2VydmVyVXJsLGE9aS5hcHBMb2MsbD10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgp''@;'; put 'put ''O3dpbmRvdy5vcGVuKG8rbCsiLz9fcHJvZ3JhbT0iK2ErIi9zZXJ2aWNlcy9hdWRpdG9ycy9nZXRhdWRpdGZpbGUmdGFibGU9IityKX1uZ09uSW5pdCgpe3ZhciByPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe2lmKHIubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmli''@;'; put 'put ''ZShpPT57ci5ob3RUYWJsZS5saWNlbnNlS2V5PWksci5ob3RUYWJsZVNldHRpbmdzLnNldChyLmJ1aWxkSG90U2V0dGluZ3MoKSl9KSx0eXBlb2Ygci5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ8InUiKXtyLnRhYmxlX2lkPXIucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlk''@;'; put 'put ''O3RyeXtsZXQgaT15aWVsZCByLnNhc1N0b3JlU2VydmljZS5nZXRDaGFuZ2VJbmZvKHIudGFibGVfaWQpO2lmKCFpfHwhaS5qc3BhcmFtcyl0aHJvdyBuZXcgRXJyb3IoImpzcGFyYW1zIHByb3BlcnR5IGlzIG1pc3NpbmcgZnJvbSByZXNwb25zZS4iKTtyLnRhYmxlRGV0YWlscz1pLmpzcGFy''@;'; put 'put ''YW1zWzBdfWNhdGNoKGkpe2xldCBvPXt9O2kuTUVTU0FHRT9vPWk6by5NRVNTQUdFPWksci5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJwdWJsaWMvZ2V0Y2hhbmdlaW5mbyIsbyl9dHJ5e2xldCBpPXlpZWxkIHIuc2FzU3RvcmVTZXJ2aWNlLm9wZW5UYWJsZShyLnRhYmxlX2lk''@;'; put 'put ''KTtpZighaXx8IWkuc3RhZ2V0YWJsZSl0aHJvdyBuZXcgRXJyb3IoIlN0YWdldGFibGUgcHJvcGVydHkgaXMgbWlzc2luZyBmcm9tIHJlc3BvbnNlLiIpO2xldCBvPWkuc3RhZ2V0YWJsZVswXSxhPVtdLGw9W107Zm9yKGxldCBnIGluIG8pbyYmYS5wdXNoKGcpO2ZvcihsZXQgZz0wO2c8YS5s''@;'; put 'put ''ZW5ndGg7ZysrKWwucHVzaCh7ZGF0YTphW2ddfSk7bGV0IHU9ZnVuY3Rpb24oKXtyZXR1cm57cmVhZE9ubHk6ITB9fTtyLnJhd1N0YWdlVGFibGU9aS5zdGFnZXRhYmxlLHIuZm10U3RhZ2VUYWJsZT1pLmZtdF9zdGFnZXRhYmxlLHIuaG90VGFibGUuZGF0YT1yR2Uoci5yYXdTdGFnZVRhYmxl''@;'; put 'put ''LHIuZm10U3RhZ2VUYWJsZSxyLmZvcm1hdHRlZFZhbHVlcyksci5ob3RUYWJsZS5jb2xIZWFkZXJzPWEsci5ob3RUYWJsZS5jb2x1bW5zPWwsci5ob3RUYWJsZS5jZWxscz11LHIuaG90VGFibGVTZXR0aW5ncy5zZXQoci5idWlsZEhvdFNldHRpbmdzKCkpLHIubG9hZGVkPSEwLHIuc2V0Rm9j''@;'; put 'put ''dXMoKX1jYXRjaChpKXtsZXQgbz17fTtpLk1FU1NBR0V8fChvLk1FU1NBR0U9aSksci5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhdWRpdG9ycy9nZXRzdGFnZXRhYmxlIixvKSxyLmxvYWRlZD0hMX19fSkoKX1uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhp''@;'; put 'put ''cy5maXhGb2N1c0NhdGNoZXJBY2Nlc3NpYmlsaXR5KCl9LDUwMCl9cmV2ZXJ0Q2hhbmdlcygpe3RoaXMucmV2ZXJ0aW5nQ2hhbmdlcz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9yZXN0b3JlIix7cmVzdG9yZV9pbjpbe2xvYWRfcmVmOnRoaXMudGFibGVfaWR9XX0pLnRo''@;'; put 'put ''ZW4oaT0+e2kuYWRhcHRlclJlc3BvbnNlLnJlc3RvcmVfb3V0JiZ0aGlzLnJvdXRlLm5hdmlnYXRlKFsiL3N0YWdlIl0pLnRoZW4oKCk9Pnt0aGlzLnJvdXRlLm5hdmlnYXRlKFtgL3N0YWdlLyR7aS5hZGFwdGVyUmVzcG9uc2UucmVzdG9yZV9vdXRbMF0uTE9BRFJFRn1gXSl9KX0pLmZpbmFs''@;'; put 'put ''bHkoKCk9Pnt0aGlzLnJldmVydGluZ0NoYW5nZXM9ITF9KX1zZXRGb2N1cygpe3NldFRpbWVvdXQoKCk9PntsZXQgcj13aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFwcHJvdmFsLWJ0biIpO3ImJnIuZm9jdXMoKX0sMjAwKX1maXhGb2N1c0NhdGNoZXJBY2Nlc3NpYmlsaXR5KCl7''@;'; put 'put ''c2V0VGltZW91dCgoKT0+e2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5odEZvY3VzQ2F0Y2hlciIpLmZvckVhY2goKGksbyk9PntpZihpKXtpLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsYFRhYmxlIGZvY3VzIGNhdGNoZXIgJHtvKzF9YCksaS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlk''@;'; put 'put ''ZGVuIiwidHJ1ZSIpLGkuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksaS5zZXRBdHRyaWJ1dGUoInJvbGUiLCJwcmVzZW50YXRpb24iKTtjb25zdCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7YS5zZXRBdHRyaWJ1dGUoImZvciIsaS5pZHx8YGh0Rm9jdXNDYXRjaGVy''@;'; put 'put ''JHtvfWApLGEuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxhLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGEudGV4dENvbnRlbnQ9YFRhYmxlIGZvY3VzIGNhdGNoZXIgJHtvKzF9YCxpLnBhcmVudE5vZGU/Lmluc2VydEJlZm9yZShhLGkpfX0pfSwxMDApfXN0YXRpYyNlPW49KCk9''@;'; put 'put ''Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpKHplKEYyKSx6ZShCcCksemUodWQpLHplKHZjKSx6ZShwMSksemUoaWMpKX0sdGhpcy5cdTAyNzVjbXA9UHIoe3R5cGU6ZSxzZWxlY3RvcnM6W1siYXBwLXN0YWdlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1j''@;'; put 'put ''b250YWluZXIiXSxzdGFuZGFsb25lOiExLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjbHItY29sLW1kLTEyIiwiY2FyZCJdLFsxLCJoLTgwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVt''@;'; put 'put ''cy1jZW50ZXIiXSxbMSwic3Bpbm5lciJdLFsibmctaWYiLCJsb2FkZWQiLDEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtdGl0bGUiLCJ0ZXh0LWNlbnRlciJdLFsxLCJtdC0wIl0sWyJuZy1pZiIsImxvYWRlZCIsMSwiY2xyLXJvdyJdLFsxLCJjYXJkLWJsb2NrIiwiY2xyLWNvbC1tZC02Iiwi''@;'; put 'put ''bm8tYm9yZGVycyJdLFsxLCJjYXJkLWhlYWRlciIsInB5LTUiXSxbMSwiYmFzZVRhYmxlTGluayIsMywiY2xpY2siXSxbMSwibXQtMTAiXSxbInJvbGUiLCJzdGF0dXMiLDEsIm10LTEwIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1jb2wtbWQtNiIsImNhcmQtYmxvY2siLCJuby1ib3JkZXJzIl0s''@;'; put 'put ''WzEsIm10LTIwIl0sWzEsInJvdyIsInN0YWdlLWFjdGlvbnMtcm93Il0sWyJhcmlhLWxhYmVsIiwiVmlldyBiYXNlIHRhYmxlIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXItNWkiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbImlkIiwiYXBwcm92YWwt''@;'; put 'put ''YnRuIiwiYXJpYS1sYWJlbCIsIkFwcHJvdmUgdGFibGUiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm1yLTVpIiwzLCJkaXNhYmxlZCJdLFsiYXJpYS1sYWJlbCIsIkVkaXQgYmFzZSB0YWJsZSIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWlu''@;'; put 'put ''Zm8tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXItNWkiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbImFyaWEtbGFiZWwiLCJEb3dubG9hZCBhdWRpdCBmaWxlIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsInRleHQtY2VudGVyIiwibXItNWkiLCJtaW4tdy0wIiwzLCJjbGljayJd''@;'; put 'put ''LFsic2hhcGUiLCJkb3dubG9hZCIsImFyaWEtaGlkZGVuIiwidHJ1ZSJdLFsxLCJtLTAiLCJmbGV4LXNocmluay0wIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJUb2dnbGUiLCIiLCJjaGVja2VkIiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCJdLFsxLCJmb3JtYXR0''@;'; put 'put ''ZWQtdmFsdWVzLXRvZ2dsZSJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJhcmlhLWxhYmVsIiwiUmV2ZXJ0IHRoaXMgYW5kIGFsbCBzdWJzZXF1ZW50IGNoYW5nZXMiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1kYW5nZXIiLCJ0ZXh0LWNlbnRlciIsIm10LTIwIiwzLCJjbHJMb2FkaW5nIl0s''@;'; put 'put ''WzEsImNhcmQtYmxvY2siXSxbImlkIiwiaG90VGFibGUiLCJhcmlhLWxhYmVsIiwiU3RhZ2VkIGRhdGEgdGFibGUiLDMsImRhdGEiLCJzZXR0aW5ncyJdLFsxLCJjYXJkLWZvb3RlciIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImlkIiwiYXBwcm92YWwtYnRuIiwiYXJp''@;'; put 'put ''YS1sYWJlbCIsIkFwcHJvdmUgdGFibGUiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsImFyaWEtbGFiZWwiLCJSZXZlcnQgdGhpcyBhbmQgYWxs''@;'; put 'put ''IHN1YnNlcXVlbnQgY2hhbmdlcyIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWRhbmdlciIsInRleHQtY2VudGVyIiwibXQtMjAiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3Np''@;'; put 'put ''dGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGksbyl7MSZpJiYoSigwLCJtYWluIiwwKSgxLCJkaXYiLDEpLHZ0KDIsTGRuLDMsMiwiZGl2IiwyKSx2dCgzLFBkbiw1NCwxNywiZGl2IiksdGUoKSgpKSwyJmkmJihpZSgyKSxfdChvLmxvYWRl''@;'; put 'put ''ZD8tMToyKSxpZSgpLF90KG8ubG9hZGVkPzM6LTEpKX0sZGVwZW5kZW5jaWVzOltGaCxIMixvYyxYbCxjdSwkMCxMcCxpbSxlbCxVMixFdixGZix3dixTdixDdixMN10sc3R5bGVzOlsiLnN0YWdlLWFjdGlvbnMtcm93IGNsci10b2dnbGUtY29udGFpbmVye2Rpc3BsYXk6aW5saW5lLWZsZXg7''@;'; put 'put ''d2lkdGg6YXV0bzttYXJnaW4tdG9wOjA7dmVydGljYWwtYWxpZ246bWlkZGxlfVxuIl0sZW5jYXBzdWxhdGlvbjoyfSkpfXJldHVybiBuKCksZX0pKCl9XTtsZXQgVmRuPSgoKT0+e3ZhciBuO2NsYXNzIGV7c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVy''@;'; put 'put ''biBuZXcoaXx8ZSl9LHRoaXMuXHUwMjc1bW9kPUdpKHt0eXBlOmV9KSx0aGlzLlx1MDI3NWluaj1taSh7aW1wb3J0czpbcW8saGQscTAsV2QuZm9yQ2hpbGQoSGRuKSxMd119KSl9cmV0dXJuIG4oKSxlfSkoKTtmdW5jdGlvbiBCZG4obixlKXtpZigxJm4mJihKKDAsInAiLDEwKSxTZSgxLCIg''@;'; put 'put ''Vmlld2VyIHJvd3MgbGltaXQ6ICIpLEooMiwic3BhbiIsNyksU2UoMyksdGUoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSgzKSxwcih0LmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gamRuKG4sZSl7aWYoMSZuJiYoSigwLCJwIiwxMCksU2UoMSwi''@;'; put 'put ''IEVkaXRvciByb3dzIGxpbWl0OiAiKSxKKDIsInNwYW4iLDcpLFNlKDMpLHRlKCkoKSksMiZuKXtjb25zdCB0PVRlKCk7aWUoMykscHIodC5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIFVkbihuLGUpe2lmKDEmbiYmKEooMCwicCIsMTApLFNlKDEs''@;'; put 'put ''IiBTdGFnZSByb3dzIGxpbWl0OiAiKSxKKDIsInNwYW4iLDcpLFNlKDMpLHRlKCkoKSksMiZuKXtjb25zdCB0PVRlKCk7aWUoMykscHIodC5saWNlbmNlU3RhdGUudmFsdWUuc3RhZ2Vfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gemRuKG4sZSl7aWYoMSZuJiYoSigwLCJwIiwxMCksU2UoMSwi''@;'; put 'put ''IEhpc3Rvcnkgcm93cyBsaW1pdDogIiksSigyLCJzcGFuIiw3KSxTZSgzKSx0ZSgpKCkpLDImbil7Y29uc3QgdD1UZSgpO2llKDMpLHByKHQubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gV2RuKG4sZSl7aWYoMSZuJiYoSigwLCJwIiwxMCksU2Uo''@;'; put 'put ''MSwiIFN1Ym1pdCByb3dzIGxpbWl0OiAiKSxKKDIsInNwYW4iLDcpLFNlKDMpLHRlKCkoKSksMiZuKXtjb25zdCB0PVRlKCk7aWUoMykscHIodC5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpfX1mdW5jdGlvbiBZZG4obixlKXtpZigxJm4mJihKKDAsInAiLDEwKSxTZSgx''@;'; put 'put ''LCIgVGFibGVzIGluIGxpYnJhcnkgbGltaXQ6ICIpLEooMiwic3BhbiIsNyksU2UoMyksdGUoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSgzKSxwcih0LmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIFpkbihuLGUpe2lmKDEmbiYmKEooMCwi''@;'; put 'put ''cCIsMTApLFNlKDEsIiBWaWV3Ym94ZXMgbGltaXQ6ICIpLEooMiwic3BhbiIsNyksU2UoMyksdGUoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSgzKSxwcih0LmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0KX19ZnVuY3Rpb24gR2RuKG4sZSl7aWYoMSZuJiYoSigwLCJwIiwxMCks''@;'; put 'put ''U2UoMSwiIExpbmVhZ2UgZGFpbHkgbGltaXQ6ICIpLEooMiwic3BhbiIsNyksU2UoMyksdGUoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSgzKSxwcih0LmxpY2VuY2VTdGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0KX19ZnVuY3Rpb24gJGRuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXdu''@;'; put 'put ''KCk7SigwLCJkaXYiLDE2KSxTZSgxLCIgUmVmcmVzaCBEYXRhIExpbmVhZ2UgIiksSigyLCJidXR0b24iLDE3KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKDIpLnJlZnJlc2hEYXRhTGluZWFnZSgpKX0pLFNlKDMsIiBSRUZSRVNIICIpLHRlKCkoKX1pZigyJm4p''@;'; put 'put ''e2NvbnN0IHQ9VGUoMik7aWUoMikscnQoImNsckxvYWRpbmciLHQucmVmcmVzaGluZ0RhdGFMaW5lYWdlKX19ZnVuY3Rpb24gcWRuKG4sZSl7MSZuJiYoSigwLCJjbHItdG9vbHRpcC1jb250ZW50IiwyNiksU2UoMSwiIEVudGVyIHRoZSB0YXJnZXQgREMgbGlicmFyeSBhbmQgdGhlIGRvd25s''@;'; put 'put ''b2FkZWQgZmlsZXMgd2lsbCBjb250YWluIHRoaXMsIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsLiAiKSx0ZSgpKX1mdW5jdGlvbiBLZG4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTt2dCgwLCRkbiw0LDEsImRpdiIsMTYpLEooMSwiZGl2IiwxNiksU2UoMiwiIFJlZnJlc2ggRGF0YSBDYXRh''@;'; put 'put ''bG9nICIpLEooMywiYnV0dG9uIiwxNyksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLnJlZnJlc2hEYXRhQ2F0YWxvZygpKX0pLFNlKDQsIiBSRUZSRVNIICIpLHRlKCkoKSxKKDUsImRpdiIsMTYpLFNlKDYsIiBEb3dubG9hZCBDb25maWd1cmF0aW9uICIpLEoo''@;'; put 'put ''NywiZGl2IiwxOCkoOCwiY2xyLXRvb2x0aXAiLDE5KSg5LCJsYWJlbCIsMjApLFNlKDEwLCIgVGFyZ2V0IERDIExpYnJhcnkgIiksSXQoMTEsImNkcy1pY29uIiwyMSksdGUoKSxZbigxMixxZG4sMiwwLCJjbHItdG9vbHRpcC1jb250ZW50IiwyMiksdGUoKSxKKDEzLCJpbnB1dCIsMjMpLHd0''@;'; put 'put ''KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtyZXR1cm4gWWUodCksWGUoVGUoKS50YXJnZXRMaWJyZWY9aS50b1VwcGVyQ2FzZSgpKX0pLHRlKCkoKSxKKDE0LCJidXR0b24iLDI0KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCkuZG93bmxvYWRDb25maWd1''@;'; put 'put ''cmF0aW9uKCkpfSksU2UoMTUsIiBET1dOTE9BRCAiKSx0ZSgpKCksSigxNiwiZGl2IiwxNiksU2UoMTcsIiBVcGRhdGUgTGljZW5jZSBLZXkgIiksSigxOCwiYnV0dG9uIiwyNSksU2UoMTksIiBVUERBVEUgIiksdGUoKSgpfWlmKDImbil7Y29uc3QgdD1UZSgpO190KCJTQVM5Ij09PXQuc2Vy''@;'; put 'put ''dmVyVHlwZT8wOi0xKSxpZSgzKSxydCgiY2xyTG9hZGluZyIsdC5yZWZyZXNoaW5nRGF0YUNhdGFsb2cpLGllKDEwKSxydCgibmdNb2RlbCIsdC5kY0xpYiksaWUoKSxydCgiZGlzYWJsZWQiLHQudGFyZ2V0TGlicmVmIT09dC5kY0xpYiYmIXQuaXNWYWxpZExpYnJlZih0LnRhcmdldExpYnJl''@;'; put 'put ''ZikpfX1jb25zdCBYZG49W3twYXRoOiIiLGNvbXBvbmVudDooKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKHIsaSxvLGEpe3RoaXMuYXBwU2VydmljZT1yLHRoaXMuc2FzU2VydmljZT1pLHRoaXMubGljZW5jZVNlcnZpY2U9byx0aGlzLmFwcFNldHRpbmdzU2VydmljZT1hLHRoaXMu''@;'; put 'put ''YXBwSW5mbz17YWRhcHRlclZlcnNpb246IjQuMTkuMCIsYXBwVmVyc2lvbjoidjcuMTYuMCIucmVwbGFjZSgidiIsIiIpLGJ1aWxkVGltZXN0YW1wOlNwKCkocGFyc2VJbnQoIjE3OTA1ODY1ODcxNTciKSkuZm9ybWF0KCJERC1NTU0tWVlZWSBISDpNTSIpfSx0aGlzLmh0dHA9Imh0dHA6Ij09''@;'; put 'put ''PWxvY2F0aW9uLnByb3RvY29sLHRoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSExLHRoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSExLHRoaXMucmVzcG9uc2U9Ik5vIHJlc3BvbnNlIix0aGlzLnJlc3BvbnNlTW9kYWw9ITEsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5kY0xpYj1Vbi5kY0xp''@;'; put 'put ''Yix0aGlzLnRhcmdldExpYnJlZj1Vbi5kY0xpYix0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLnNlcnZlclR5cGU9dGhpcy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKSx0aGlzLmxpY2VuY2VJbmZvPXRoaXMubGljZW5jZVNlcnZpY2Uu''@;'; put 'put ''Z2V0TGljZW5zZUtleURhdGEoKSx0aGlzLmVudmlyb25tZW50SW5mbz10aGlzLmFwcFNlcnZpY2UuZ2V0RW52aXJvbm1lbnRJbmZvKCksdGhpcy5zZXR0aW5ncz10aGlzLmFwcFNldHRpbmdzU2VydmljZS5zZXR0aW5ncy52YWx1ZSx0aGlzLmVudmlyb25tZW50SW5mby5BVVRPRVhFQyYmKHRo''@;'; put 'put ''aXMuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDPWRlY29kZVVSSUNvbXBvbmVudCh0aGlzLmVudmlyb25tZW50SW5mby5BVVRPRVhFQykpLHRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnN1YnNjcmliZShsPT57dGhpcy5zZXR0aW5ncz1sfSl9bmdPbkluaXQoKXt9c2V0dGluZ0No''@;'; put 'put ''YW5nZShyKXt0aGlzLmFwcFNldHRpbmdzU2VydmljZS5zZXRBcHBTZXR0aW5ncyh0aGlzLnNldHRpbmdzKX1pc1ZhbGlkTGlicmVmKHIpe3JldHVybi9eW0EtWmEtel9dXHd7MCw3fSQvLnRlc3Qoci50cmltKCkpfWRvd25sb2FkQ29uZmlndXJhdGlvbigpe2xldCByPXRoaXMuc2FzU2Vydmlj''@;'; put 'put ''ZS5nZXRTYXNqc0NvbmZpZygpLGk9ci5zZXJ2ZXJVcmwsbz1yLmFwcExvYyxhPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCksbD10aGlzLnRhcmdldExpYnJlZi50b1VwcGVyQ2FzZSgpLnRyaW0oKSx1PWkrYSsiLz9fcHJvZ3JhbT0iK28rIi9zZXJ2aWNlcy9hZG1pbi9leHBv''@;'; put 'put ''cnRjb25maWciO2wmJmwhPT10aGlzLmRjTGliJiZ0aGlzLmlzVmFsaWRMaWJyZWYobCkmJih1Kz0iJmRjbGliPSIrZW5jb2RlVVJJQ29tcG9uZW50KGwpKSx3aW5kb3cub3Blbih1KX1yZWZyZXNoRGF0YUNhdGFsb2coKXt0aGlzLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZz0hMCx0aGlzLnNhc1Nl''@;'; put 'put ''cnZpY2UucmVxdWVzdCgiYWRtaW4vcmVmcmVzaGNhdGFsb2ciLG51bGwpLnRoZW4ocj0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKHIuYWRhcHRlclJlc3BvbnNlKSx0aGlzLnJlc3BvbnNlTW9kYWw9ITB9KS5jYXRjaChyPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVz''@;'; put 'put ''cG9uc2Uoci5hZGFwdGVyUmVzcG9uc2UpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmZpbmFsbHkoKCk9Pnt0aGlzLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZz0hMX0pfXJlZnJlc2hEYXRhTGluZWFnZSgpe3RoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1''@;'; put 'put ''ZXN0KCJhZG1pbi9yZWZyZXNodGFibGVsaW5lYWdlIixudWxsKS50aGVuKHI9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShyLmFkYXB0ZXJSZXNwb25zZSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuY2F0Y2gocj0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNl''@;'; put 'put ''KHIuYWRhcHRlclJlc3BvbnNlKSx0aGlzLnJlc3BvbnNlTW9kYWw9ITB9KS5maW5hbGx5KCgpPT57dGhpcy5yZWZyZXNoaW5nRGF0YUxpbmVhZ2U9ITF9KX1wYXJzZVJlc3BvbnNlKHIpe3JldHVybiJvYmplY3QiPT10eXBlb2Ygcj9KU09OLnN0cmluZ2lmeShyKTpyfXN0YXRpYyNlPW49KCk9''@;'; put 'put ''Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpKHplKHV6KSx6ZShpYyksemUoRjIpLHplKEpVKSl9LHRoaXMuXHUwMjc1Y21wPVByKHt0eXBlOmUsc2VsZWN0b3JzOltbImFwcC1zeXN0ZW0iXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0''@;'; put 'put ''YW5kYWxvbmU6ITEsZGVjbHM6MTUwLHZhcnM6MzksY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJwLTEwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsInRleHQt''@;'; put 'put ''Y2VudGVyIiwibS0wIl0sWzEsInctMTAwIiwibGlnaHQiXSxbMSwiY29udGVudC1ib3giLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwic3lzLWluZm8iLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LWxnLXJv''@;'; put 'put ''dyJdLFsiY2RzLXRleHQiLCJzdWJzZWN0aW9uIiwxLCJtYi0xMCJdLFsxLCJkYXJrIl0sWyJjZHMtdGV4dCIsImxhYmVsIiwxLCJtLTAiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1sZy1jZW50ZXIiXSxbMSwibS0wIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1v''@;'; put 'put ''ZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzEsImFkbWluLWFjdGlvbiJdLFsxLCJidG4iLCJidG4taW5mbyIsImJ0''@;'; put 'put ''bi1zbSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzEsImxpYnJlZi1ncm91cCJdLFsxLCJsaWJyZWYtdG9vbHRpcCJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImxpYnJlZi1sYWJlbCJdLFsic2hhcGUiLCJpbmZvLWNpcmNsZSIsInNpemUiLCIxNiJdLFsiY2xyUG9zaXRpb24iLCJi''@;'; put 'put ''b3R0b20tbGVmdCIsImNsclNpemUiLCJtZCIsNCwiY2xySWZPcGVuIl0sWyJ0eXBlIiwidGV4dCIsIm1heGxlbmd0aCIsIjgiLCJwbGFjZWhvbGRlciIsImUuZy4gTVlMSUIiLDEsImNsci1pbnB1dCIsImxpYnJlZi1pbnB1dCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwiYnRu''@;'; put 'put ''IiwiYnRuLWluZm8iLCJidG4tc20iLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInJvdXRlckxpbmsiLCIvbGljZW5zaW5nL3VwZGF0ZSIsMSwiYnRuIiwiYnRuLWluZm8iLCJidG4tc20iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibWQiXV0sdGVtcGxhdGU6ZnVu''@;'; put 'put ''Y3Rpb24oaSxvKXsxJmkmJihKKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJoNCIsMiksU2UoMywiU3lzdGVtIGluZm9ybWF0aW9uIiksdGUoKSxJdCg0LCJociIsMyksSig1LCJkaXYiLDQpKDYsImRpdiIsNSkoNywiZGl2IikoOCwiaDYiLDYpLFNlKDksIiBFbnZpcm9ubWVudCBEZXRhaWxz''@;'; put 'put ''ICIpLEl0KDEwLCJzcGFuIiw3KSx0ZSgpLEooMTEsInAiLDgpLFNlKDEyLCIgU1lTU0lURTogIiksSigxMywic3BhbiIsNyksU2UoMTQpLHRlKCkoKSxKKDE1LCJwIiw4KSxTZSgxNiwiIFNZU1NDUEw6ICIpLEooMTcsInNwYW4iLDcpLFNlKDE4KSx0ZSgpKCksSigxOSwicCIsOCksU2UoMjAs''@;'; put 'put ''IiBTWVNUQ1BJUEhPU1ROQU1FOiAiKSxKKDIxLCJzcGFuIiw3KSxTZSgyMiksdGUoKSgpLEooMjMsInAiLDgpLFNlKDI0LCIgU1lTVkxPTkc6ICIpLEooMjUsInNwYW4iLDcpLFNlKDI2KSx0ZSgpKCksSigyNywicCIsOCksU2UoMjgsIiBNRU1TSVpFOiAiKSxKKDI5LCJzcGFuIiw3KSxTZSgz''@;'; put 'put ''MCksdGUoKSgpLEooMzEsInAiLDgpLFNlKDMyLCIgU1lTUFJPQ0VTU01PREU6ICIpLEooMzMsInNwYW4iLDcpLFNlKDM0KSx0ZSgpKCksSigzNSwicCIsOCksU2UoMzYsIiBTWVNIT1NUTkFNRTogIiksSigzNywic3BhbiIsNyksU2UoMzgpLHRlKCkoKSxKKDM5LCJwIiw4KSxTZSg0MCwiIFNZ''@;'; put 'put ''U1VTRVJJRDogIiksSig0MSwic3BhbiIsNyksU2UoNDIpLHRlKCkoKSxKKDQzLCJwIiw4KSxTZSg0NCwiIFNZU0hPU1RJTkZPTE9ORzogIiksSig0NSwic3BhbiIsNyksU2UoNDYpLHRlKCkoKSxKKDQ3LCJwIiw4KSxTZSg0OCwiIFNZU0VOQ09ESU5HOiAiKSxKKDQ5LCJzcGFuIiw3KSxTZSg1''@;'; put 'put ''MCksdGUoKSgpLEooNTEsInAiLDgpLFNlKDUyLCIgQVVUT0VYRUM6ICIpLEooNTMsInNwYW4iLDcpLFNlKDU0KSx0ZSgpKCksSig1NSwicCIsOCksU2UoNTYsIiBUSU1FWk9ORTogIiksSig1Nywic3BhbiIsNyksU2UoNTgpLHRlKCkoKSxKKDU5LCJwIiw4KSxTZSg2MCwiIFNZU1RJTUVaT05F''@;'; put 'put ''SURFTlQ6ICIpLEooNjEsInNwYW4iLDcpLFNlKDYyKSx0ZSgpKCksSig2MywicCIsOCksU2UoNjQsIiBTWVNUSU1FWk9ORU9GRlNFVDogIiksSig2NSwic3BhbiIsNyksU2UoNjYpLHRlKCkoKSgpLEooNjcsImRpdiIsOSkoNjgsImRpdiIpKDY5LCJoNiIsNiksU2UoNzAsIiBEYXRhIENvbnRy''@;'; put 'put ''b2xsZXIgRGV0YWlscyAiKSxJdCg3MSwic3BhbiIsNyksdGUoKSxKKDcyLCJwIiw4KSxTZSg3MywiIEFwcGxpY2F0aW9uIHZlcnNpb246ICIpLEooNzQsInNwYW4iLDcpLFNlKDc1KSx0ZSgpKCksSig3NiwicCIsOCksU2UoNzcsIiBCdWlsZCB0aW1lc3RhbXA6ICIpLEooNzgsInNwYW4iLDcp''@;'; put 'put ''LFNlKDc5KSx0ZSgpKCksSig4MCwicCIsOCksU2UoODEsIiBBZGFwdGVyIHZlcnNpb246ICIpLEooODIsInNwYW4iLDcpLFNlKDgzKSx0ZSgpKCksSig4NCwicCIsOCksU2UoODUsIiBIVFRQOiAiKSxKKDg2LCJzcGFuIiw3KSxTZSg4NyksdGUoKSgpLEooODgsInAiLDgpLFNlKDg5LCIgREMg''@;'; put 'put ''QWRtaW4gR3JvdXA6ICIpLEooOTAsInNwYW4iLDcpLFNlKDkxKSx0ZSgpKCksSig5MiwicCIsOCksU2UoOTMsIiBBcHAgTG9jYXRpb246ICIpLEooOTQsInNwYW4iLDcpLFNlKDk1KSx0ZSgpKCkoKSgpLEooOTYsImRpdiIpKDk3LCJoNiIsNiksU2UoOTgsIiBMaWNlbmNlIGRldGFpbHMgIiks''@;'; put 'put ''SXQoOTksInNwYW4iLDcpLHRlKCksSigxMDAsInAiLDgpLFNlKDEwMSwiIFZhbGlkIHVudGlsOiAiKSxKKDEwMiwic3BhbiIsNyksU2UoMTAzKSx0ZSgpKCksSigxMDQsInAiLDgpLFNlKDEwNSwiIFVzZXJzIGFsbG93ZWQ6ICIpLEooMTA2LCJzcGFuIiw3KSxTZSgxMDcpLHRlKCkoKSxKKDEw''@;'; put 'put ''OCwicCIsOCksU2UoMTA5LCIgU2l0ZSBJRHM6ICIpLEooMTEwLCJzcGFuIiw3KSxTZSgxMTEpLHRlKCkoKSxKKDExMiwicCIsOCksU2UoMTEzLCIgRnJlZSBUaWVyOiAiKSxKKDExNCwic3BhbiIsNyksU2UoMTE1KSx0ZSgpKCksdnQoMTE2LEJkbiw0LDEsInAiLDEwKSx2dCgxMTcsamRuLDQs''@;'; put 'put ''MSwicCIsMTApLHZ0KDExOCxVZG4sNCwxLCJwIiwxMCksdnQoMTE5LHpkbiw0LDEsInAiLDEwKSx2dCgxMjAsV2RuLDQsMSwicCIsMTApLHZ0KDEyMSxZZG4sNCwxLCJwIiwxMCksdnQoMTIyLFpkbiw0LDEsInAiLDEwKSx2dCgxMjMsR2RuLDQsMSwicCIsMTApLEooMTI0LCJwIiw4KSxTZSgx''@;'; put 'put ''MjUsIiBWaWV3Ym94ZXM6ICIpLEooMTI2LCJzcGFuIiw3KSxTZSgxMjcpLHRlKCkoKSxKKDEyOCwicCIsOCksU2UoMTI5LCIgRmlsZSBVcGxvYWQ6ICIpLEooMTMwLCJzcGFuIiw3KSxTZSgxMzEpLHRlKCkoKSxKKDEzMiwicCIsOCksU2UoMTMzLCIgRWRpdCByZWNvcmQ6ICIpLEooMTM0LCJz''@;'; put 'put ''cGFuIiw3KSxTZSgxMzUpLHRlKCkoKSxKKDEzNiwicCIsOCksU2UoMTM3LCIgQWRkIHJlY29yZDogIiksSigxMzgsInNwYW4iLDcpLFNlKDEzOSksdGUoKSgpKCkoKSxJdCgxNDAsImhyIiwzKSx2dCgxNDEsS2RuLDIwLDQpLHRlKCkoKSgpLEooMTQyLCJjbHItbW9kYWwiLDExKSxoaSgiY2xy''@;'; put 'put ''TW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihsKXtyZXR1cm4gZmkoby5yZXNwb25zZU1vZGFsLGwpfHwoby5yZXNwb25zZU1vZGFsPWwpLGx9KSxKKDE0MywiaDMiLDEyKSxTZSgxNDQsIlJlc3BvbnNlIiksdGUoKSxKKDE0NSwiZGl2IiwxMyksU2UoMTQ2KSx0ZSgpLEooMTQ3LCJkaXYiLDE0''@;'; put 'put ''KSgxNDgsImJ1dHRvbiIsMTUpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gby5yZXNwb25zZU1vZGFsPSExfSksU2UoMTQ5LCIgT2sgIiksdGUoKSgpKCkpLDImaSYmKGllKDE0KSxwcihudWxsPT1vLmVudmlyb25tZW50SW5mbz9udWxsOm8uZW52aXJvbm1lbnRJbmZvLlNZU1NJVEUp''@;'; put 'put ''LGllKDQpLHByKG51bGw9PW8uZW52aXJvbm1lbnRJbmZvP251bGw6by5lbnZpcm9ubWVudEluZm8uU1lTU0NQTCksaWUoNCkscHIobnVsbD09by5lbnZpcm9ubWVudEluZm8/bnVsbDpvLmVudmlyb25tZW50SW5mby5TWVNUQ1BJUEhPU1ROQU1FKSxpZSg0KSxwcihudWxsPT1vLmVudmlyb25t''@;'; put 'put ''ZW50SW5mbz9udWxsOm8uZW52aXJvbm1lbnRJbmZvLlNZU1ZMT05HKSxpZSg0KSxwcihudWxsPT1vLmVudmlyb25tZW50SW5mbz9udWxsOm8uZW52aXJvbm1lbnRJbmZvLk1FTVNJWkUpLGllKDQpLHByKG51bGw9PW8uZW52aXJvbm1lbnRJbmZvP251bGw6by5lbnZpcm9ubWVudEluZm8uU1lT''@;'; put 'put ''UFJPQ0VTU01PREUpLGllKDQpLHByKG51bGw9PW8uZW52aXJvbm1lbnRJbmZvP251bGw6by5lbnZpcm9ubWVudEluZm8uU1lTSE9TVE5BTUUpLGllKDQpLHByKG51bGw9PW8uZW52aXJvbm1lbnRJbmZvP251bGw6by5lbnZpcm9ubWVudEluZm8uU1lTVVNFUklEKSxpZSg0KSxwcihudWxsPT1v''@;'; put 'put ''LmVudmlyb25tZW50SW5mbz9udWxsOm8uZW52aXJvbm1lbnRJbmZvLlNZU0hPU1RJTkZPTE9ORyksaWUoNCkscHIobnVsbD09by5lbnZpcm9ubWVudEluZm8/bnVsbDpvLmVudmlyb25tZW50SW5mby5TWVNFTkNPRElORyksaWUoNCkscHIobnVsbD09by5lbnZpcm9ubWVudEluZm8/bnVsbDpv''@;'; put 'put ''LmVudmlyb25tZW50SW5mby5BVVRPRVhFQyksaWUoNCkscHIoKG51bGw9PW8uZW52aXJvbm1lbnRJbmZvP251bGw6by5lbnZpcm9ubWVudEluZm8uVElNRVpPTkUpfHwiKG5vdCBzZXQpIiksaWUoNCkscHIoKG51bGw9PW8uZW52aXJvbm1lbnRJbmZvP251bGw6by5lbnZpcm9ubWVudEluZm8u''@;'; put 'put ''U1lTVElNRVpPTkVJREVOVCl8fCIobm90IHNldCkiKSxpZSg0KSxwcigobnVsbD09by5lbnZpcm9ubWVudEluZm8/bnVsbDpvLmVudmlyb25tZW50SW5mby5TWVNUSU1FWk9ORU9GRlNFVCl8fCIwIiksaWUoOSkscHIoby5hcHBJbmZvLmFwcFZlcnNpb24pLGllKDQpLHByKG8uYXBwSW5mby5i''@;'; put 'put ''dWlsZFRpbWVzdGFtcCksaWUoNCkscHIoby5hcHBJbmZvLmFkYXB0ZXJWZXJzaW9uKSxpZSg0KSxwcihvLmh0dHA/IllFUyI6Ik5PIiksaWUoNCkscHIobnVsbD09by5lbnZpcm9ubWVudEluZm8/bnVsbDpvLmVudmlyb25tZW50SW5mby5EQ19BRE1JTl9HUk9VUCksaWUoNCkscHIobnVsbD09''@;'; put 'put ''by5lbnZpcm9ubWVudEluZm8/bnVsbDpvLmVudmlyb25tZW50SW5mby5BUFBfTE9DKSxpZSg4KSxwcihudWxsPT1vLmxpY2VuY2VJbmZvP251bGw6by5saWNlbmNlSW5mby52YWxpZF91bnRpbCksaWUoNCkscHIobnVsbD09by5saWNlbmNlSW5mbz9udWxsOm8ubGljZW5jZUluZm8udXNlcnNf''@;'; put 'put ''YWxsb3dlZCksaWUoNCkscHIobnVsbD09by5saWNlbmNlSW5mbz9udWxsOm8ubGljZW5jZUluZm8uc2l0ZV9pZF9tdWx0aXBsZSksaWUoNCkscHIobnVsbCE9by5saWNlbmNlSW5mbyYmby5saWNlbmNlSW5mby5kZW1vPyJZRVMiOiJOTyIpLGllKCksX3Qoby5saWNlbmNlU3RhdGUudmFsdWUu''@;'; put 'put ''dmlld2VyX3Jvd3NfYWxsb3dlZCE9PW8uSW5maW5pdHk/MTE2Oi0xKSxpZSgpLF90KG8ubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQhPT1vLkluZmluaXR5PzExNzotMSksaWUoKSxfdChvLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWQhPT1vLklu''@;'; put 'put ''ZmluaXR5PzExODotMSksaWUoKSxfdChvLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCE9PW8uSW5maW5pdHk/MTE5Oi0xKSxpZSgpLF90KG8ubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09by5JbmZpbml0eT8xMjA6LTEpLGllKCksX3Qoby5s''@;'; put 'put ''aWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQhPT1vLkluZmluaXR5PzEyMTotMSksaWUoKSxfdChvLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0IT09by5JbmZpbml0eT8xMjI6LTEpLGllKCksX3Qoby5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9k''@;'; put 'put ''YWlseV9saW1pdCE9PW8uSW5maW5pdHk/MTIzOi0xKSxpZSg0KSxwcihvLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94PyJZRVMiOiJOTyIpLGllKDQpLHByKG8ubGljZW5jZVN0YXRlLnZhbHVlLmZpbGVVcGxvYWQ/IllFUyI6Ik5PIiksaWUoNCkscHIoby5saWNlbmNlU3RhdGUudmFsdWUu''@;'; put 'put ''ZWRpdFJlY29yZD8iWUVTIjoiTk8iKSxpZSg0KSxwcihvLmxpY2VuY2VTdGF0ZS52YWx1ZS5hZGRSZWNvcmQ/IllFUyI6Ik5PIiksaWUoMiksX3QoMT09PShudWxsPT1vLmVudmlyb25tZW50SW5mbz9udWxsOm8uZW52aXJvbm1lbnRJbmZvLklTQURNSU4pPzE0MTotMSksaWUoKSxkaSgiY2xy''@;'; put 'put ''TW9kYWxPcGVuIixvLnJlc3BvbnNlTW9kYWwpLGllKDQpLFNyKCIgIixvLnJlc3BvbnNlLCIgIikpfSxkZXBlbmRlbmNpZXM6W1AyLEpzLHhkLG1oLCQwLExwLGltLGVsLHd2LFN2LEN2LGx1LG9jLGNvZSxYbF0sc3R5bGVzOlsiLmxpYnJlZi1ncm91cHtkaXNwbGF5OmlubGluZS1mbGV4O2Fs''@;'; put 'put ''aWduLWl0ZW1zOmNlbnRlcjtnYXA6NHB4O21hcmdpbjowIDhweH0ubGlicmVmLWxhYmVse2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTouNTVyZW07Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLWNsci1wNC1jb2xvciwgIzU2NTY1Nik7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVt''@;'; put 'put ''czpjZW50ZXI7Z2FwOjRweH0ubGlicmVmLWlucHV0e3dpZHRoOjEwMHB4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX1cbiJdLGVuY2Fwc3VsYXRpb246Mn0pKX1yZXR1cm4gbigpLGV9KSgpfV07bGV0IFFkbj0oKCk9Pnt2YXIgbjtjbGFzcyBle3N0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpfSx0aGlzLlx1MDI3NW1vZD1HaSh7dHlwZTplfSksdGhpcy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1dkLmZvckNoaWxkKFhkbiksV2RdfSkpfXJldHVybiBuKCksZX0pKCksSmRuPSgoKT0+e3ZhciBuO2NsYXNzIGV7c3RhdGljI2U9''@;'; put 'put ''bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSl9LHRoaXMuXHUwMjc1bW9kPUdpKHt0eXBlOmV9KSx0aGlzLlx1MDI3NWluaj1taSh7aW1wb3J0czpbcW8sUWRuLHEwLGhkXX0pKX1yZXR1cm4gbigpLGV9KSgpO2Z1bmN0aW9uIGVobihuLGUpezEmbiYm''@;'; put 'put ''SXQoMCwiY2xyLWljb24iLDcpfWZ1bmN0aW9uIHRobihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLWljb24iLDkpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtZZSh0KTtjb25zdCBpPVRlKDIpO3JldHVybiBpLmdyb3VwU2VhcmNoPSIiLFhlKGkuZ3JvdXBMaXN0T25GaWx0ZXIo''@;'; put 'put ''KSl9KSx0ZSgpfX1mdW5jdGlvbiBuaG4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImNsci10cmVlLW5vZGUiLDIpKDEsImRpdiIsNSkoMiwiaW5wdXQiLDYsMCksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoKTtyZXR1cm4gZmkoby5ncm91''@;'; put 'put ''cFNlYXJjaCxpKXx8KG8uZ3JvdXBTZWFyY2g9aSksWGUoaSl9KSx3dCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCkuZ3JvdXBMaXN0T25GaWx0ZXIoKSl9KSx0ZSgpLHZ0KDQsZWhuLDEsMCwiY2xyLWljb24iLDcpLHZ0KDUsdGhuLDEsMCwiY2xyLWljb24iLDgpLHRl''@;'; put 'put ''KCkoKX1pZigyJm4pe2NvbnN0IHQ9b28oMykscj1UZSgpO2llKDIpLGRpKCJuZ01vZGVsIixyLmdyb3VwU2VhcmNoKSxpZSgyKSxfdCh0LnZhbHVlLmxlbmd0aDwxPzQ6LTEpLGllKCksX3QodC52YWx1ZS5sZW5ndGg+MD81Oi0xKX19ZnVuY3Rpb24gcmhuKG4sZSl7aWYoMSZuKXtjb25zdCB0''@;'; put 'put ''PXduKCk7SigwLCJjbHItdHJlZS1ub2RlIiwxMSksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoKS4kaW1wbGljaXQ7cmV0dXJuIFhlKFRlKCkuZ3JvdXBPbkNsaWNrKGkpKX0pLEooMSwicCIsMTIpLEl0KDIsImNsci1pY29uIiwxMyksU2UoMyksdGUoKSgpfWlmKDIm''@;'; put 'put ''bil7Y29uc3QgdD1UZSgpLiRpbXBsaWNpdCxyPVRlKCk7d3IoImFjdGl2ZSIsdC5HUk9VUFVSST09PXIuZ3JvdXBVcmkpLGllKDMpLFNyKCIgIix0LkdST1VQTkFNRSwiICIpfX1mdW5jdGlvbiBpaG4obixlKXsxJm4mJnZ0KDAscmhuLDQsMywiY2xyLXRyZWUtbm9kZSIsMTApLDImbiYmX3Qo''@;'; put 'put ''ZS4kaW1wbGljaXQuaGlkZGVuPy0xOjApfWZ1bmN0aW9uIG9obihuLGUpezEmbiYmKEooMCwiZGl2Iiw0KSgxLCJzcGFuIiwxNCksU2UoMiwiIExvYWRpbmcuLi4gIiksdGUoKSgpKX1mdW5jdGlvbiBhaG4obixlKXtpZigxJm4mJihKKDAsImRpdiIsMTUpKDEsImRpdiIsMTYpKDIsInRhYmxl''@;'; put 'put ''IiwxOCkoMywidGJvZHkiKSg0LCJ0ciIpKDUsInRkIiwxOSkoNiwicCIsMjApKDcsImIiKSxTZSg4KSx0ZSgpKCkoKSgpLEooOSwidHIiKSgxMCwidGQiLDE5KSgxMSwiaSIpLFNlKDEyKSx0ZSgpKCkoKSgpKCkoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoMik7aWUoOCkscHIodC5ncm91cE5hbWUp''@;'; put 'put ''LGllKDQpLHByKHQuZ3JvdXBEZXNjfHwibm8gZGVzY3JpcHRpb24iKX19ZnVuY3Rpb24gc2huKG4sZSl7MSZuJiYoSigwLCJoNSIpLFNlKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIpLHRlKCkpfWZ1bmN0aW9uIGxobihuLGUpezEmbiYmKEooMCwidGQiLDI0KSgxLCJiIiksU2UoMiwiTkFNRSIp''@;'; put 'put ''LHRlKCkoKSxKKDMsInRkIiwyNCkoNCwiYiIpLFNlKDUsIkVNQUlMIiksdGUoKSgpLEooNiwidGQiLDI0KSg3LCJiIiksU2UoOCwiQ1JFQVRFRCIpLHRlKCkoKSxKKDksInRkIiwyNSkoMTAsImIiKSxTZSgxMSwiVVBEQVRFRCIpLHRlKCkoKSl9ZnVuY3Rpb24gY2huKG4sZSl7MSZuJiYoSigw''@;'; put 'put ''LCJ0ZCIsMjQpKDEsImIiKSxTZSgyLCJJRCIpLHRlKCkoKSxKKDMsInRkIiwyNCkoNCwiYiIpLFNlKDUsIkRJU1BMQVkgTkFNRSIpLHRlKCkoKSxKKDYsInRkIiwyNCkoNywiYiIpLFNlKDgsIlVTRVIgTkFNRSIpLHRlKCkoKSl9ZnVuY3Rpb24gdWhuKG4sZSl7aWYoMSZuJiYoSigwLCJ0ZCIs''@;'; put 'put ''MjUpLFNlKDEpLHRlKCksSigyLCJ0ZCIsMjUpLFNlKDMpLHRlKCksSig0LCJ0ZCIsMjUpLFNlKDUpLHRlKCksSig2LCJ0ZCIsMjUpLFNlKDcpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgpLiRpbXBsaWNpdDtpZSgpLHByKHQuTUVNQkVSTkFNRSksaWUoMikscHIodC5FTUFJTCksaWUoMikscHIo''@;'; put 'put ''dC5NRU1CRVJDUkVBVEVEKSxpZSgyKSxwcih0Lk1FTUJFUlVQREFURUQpfX1mdW5jdGlvbiBkaG4obixlKXtpZigxJm4mJihKKDAsInRkIiwyNSksU2UoMSksdGUoKSxKKDIsInRkIiwyNSksU2UoMyksdGUoKSxKKDQsInRkIiwyNSksU2UoNSksdGUoKSksMiZuKXtjb25zdCB0PVRlKCkuJGlt''@;'; put 'put ''cGxpY2l0O2llKCkscHIodC5JRCksaWUoMikscHIodC5ESVNQTEFZTkFNRSksaWUoMikscHIodC5VU0VSTkFNRSl9fWZ1bmN0aW9uIGhobihuLGUpe2lmKDEmbiYmKEooMCwidHIiLDIzKSx2dCgxLHVobiw4LDQpLHZ0KDIsZGhuLDYsMyksdGUoKSksMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0''@;'; put 'put ''LHI9VGUoNCk7cnQoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L3VzZXJzLyIrKHQuVVJJTUVNfHx0LklEKSksaWUoKSxfdChyLnNlcnZlclR5cGU9PT1yLlNlcnZlclR5cGUuU2FzOT8xOi0xKSxpZSgpLF90KHIuc2VydmVyVHlwZT09PXIuU2VydmVyVHlwZS5TYXNqcz8yOi0xKX19ZnVu''@;'; put 'put ''Y3Rpb24gZmhuKG4sZSl7aWYoMSZuJiYoSigwLCJ0YWJsZSIsMjIpKDEsInRoZWFkIikoMiwidHIiKSx2dCgzLGxobiwxMiwwKSx2dCg0LGNobiw5LDApLHRlKCkoKSxKKDUsInRib2R5IiksX28oNixoaG4sMywzLCJ0ciIsMjMsQ28pLHRlKCkoKSksMiZuKXtjb25zdCB0PVRlKDMpO2llKDMp''@;'; put 'put ''LF90KHQuc2VydmVyVHlwZT09PXQuU2VydmVyVHlwZS5TYXM5PzM6LTEpLGllKCksX3QodC5zZXJ2ZXJUeXBlPT09dC5TZXJ2ZXJUeXBlLlNhc2pzPzQ6LTEpLGllKDIpLHlvKHQuZ3JvdXBNZW1iZXJzKX19ZnVuY3Rpb24gcGhuKG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiKSgxLCJoMyIpLFNl''@;'; put 'put ''KDIpLHRlKCksdnQoMyxzaG4sMiwwLCJoNSIpLEooNCwiZGl2IiwyMSksdnQoNSxmaG4sOCwyLCJ0YWJsZSIsMjIpLHRlKCkoKSksMiZuKXtjb25zdCB0PVRlKDIpO2llKDIpLFNyKCJNRU1CRVJTICgiLHQuZ3JvdXBNZW1iZXJDb3VudCwiKSIpLGllKCksX3QoMD09dC5ncm91cE1lbWJlckNv''@;'; put 'put ''dW50PzM6LTEpLGllKDIpLF90KDAhPXQuZ3JvdXBNZW1iZXJDb3VudD81Oi0xKX19ZnVuY3Rpb24gZ2huKG4sZSl7MSZuJiYoSigwLCJoNSIpLFNlKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIpLHRlKCkpfWZ1bmN0aW9uIG1obihuLGUpe2lmKDEmbiYmKEooMCwidHIiLDIzKSgxLCJ0ZCIsMjUp''@;'; put 'put ''LFNlKDIpLHRlKCkoKSksMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0O3J0KCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi91c2Vycy8iK3QuTUVNQkVSSUQpLGllKDIpLHByKHQuTUVNQkVSTkFNRSl9fWZ1bmN0aW9uIHZobihuLGUpe2lmKDEmbiYmKEooMCwidGFibGUiLDIyKSgxLCJ0aGVh''@;'; put 'put ''ZCIpKDIsInRyIikoMywidGQiKSg0LCJiIiksU2UoNSksdGUoKSgpKCkoKSxKKDYsInRib2R5IiksX28oNyxtaG4sMywyLCJ0ciIsMjMsQ28pLHRlKCkoKSksMiZuKXtjb25zdCB0PVRlKDMpO2llKDUpLFNyKCJNRU1CRVJTICgiLHQuZ3JvdXBNZW1iZXJDb3VudCwiKSIpLGllKDIpLHlvKHQu''@;'; put 'put ''Z3JvdXBNZW1iZXJzKX19ZnVuY3Rpb24gX2huKG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiKSgxLCJoMyIpLFNlKDIpLHRlKCksdnQoMyxnaG4sMiwwLCJoNSIpLEooNCwiZGl2IiwyMSksdnQoNSx2aG4sOSwxLCJ0YWJsZSIsMjIpLHRlKCkoKSksMiZuKXtjb25zdCB0PVRlKDIpO2llKDIpLHBy''@;'; put 'put ''KHQuZ3JvdXBOYW1lKSxpZSgpLF90KDA9PXQuZ3JvdXBNZW1iZXJDb3VudD8zOi0xKSxpZSgyKSxfdCgwIT10Lmdyb3VwTWVtYmVyQ291bnQ/NTotMSl9fWZ1bmN0aW9uIHlobihuLGUpe2lmKDEmbiYmKEooMCwiZGl2IiksdnQoMSxhaG4sMTMsMiwiZGl2IiwxNSksSigyLCJkaXYiLDE1KSgz''@;'; put 'put ''LCJkaXYiLDE2KSg0LCJkaXYiLDE3KSx2dCg1LHBobiw2LDMsImRpdiIpLHZ0KDYsX2huLDYsMywiZGl2IiksSXQoNywiYnIiKSx0ZSgpKCkoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSgpLF90KHQuc2VydmVyVHlwZSE9PXQuU2VydmVyVHlwZS5TYXNWaXlhPzE6LTEpLGllKDQpLF90KHQu''@;'; put 'put ''c2VydmVyVHlwZSE9PXQuU2VydmVyVHlwZS5TYXNWaXlhPzU6LTEpLGllKCksX3QodC5zZXJ2ZXJUeXBlPT09dC5TZXJ2ZXJUeXBlLlNhc1ZpeWE/NjotMSl9fWxldCBpR2U9KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3RvcihyLGksbyxhLGwpe3RoaXMuc2FzU2VydmljZT1yLHRoaXMu''@;'; put 'put ''aGVscGVyU2VydmljZT1pLHRoaXMucm91dGVyPW8sdGhpcy5sb2NhdGlvbj1hLHRoaXMucm91dGU9bCx0aGlzLmdyb3VwU2VhcmNoPSIiLHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFyYW1VUkk9IiIsdGhpcy5ncm91cFVyaT0iIix0aGlzLmdyb3VwTmFtZT0iIix0aGlzLmdyb3VwRGVz''@;'; put 'put ''Yz0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyB4cC5TQVNqc0NvbmZpZyx0aGlzLmlzVml5YT0hMSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5TZXJ2ZXJUeXBlPV8wLlksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNlcnZlclR5cGU9dGhpcy5z''@;'; put 'put ''YXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKSwiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUmJih0aGlzLmlzVml5YT0hMCl9bmdPbkluaXQoKXtVbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy91c2VybmF2L2dyb3VwcyIsdm9pZCAwIT09dGhpcy5yb3V0ZS5z''@;'; put 'put ''bmFwc2hvdC5wYXJhbXMudXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbVVSST10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkpLFVuLnVzZXJuYXYuZ3JvdXBMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQ/KHRoaXMuZ3JvdXBzPVVuLnVzZXJuYXYuZ3JvdXBMaXN0LHRo''@;'; put 'put ''aXMuZ3JvdXBTZWFyY2g9VW4udXNlcm5hdi5ncm91cFNlYXJjaCk6KHZvaWQgMD09PVVuLnVzZXJuYXYuZ3JvdXBMaXN0Pyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL2dyb3Vwcz9saW1pdD0yMDAwIix7''@;'; put 'put ''aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKHI9PnIudGV4dCgpKS50aGVuKHI9PntsZXQgbz1KU09OLnBhcnNlKHIpLml0ZW1zLm1hcChhPT4oe0dST1VQVVJJOmEuaWQsR1JPVVBOQU1FOmEubmFtZSxHUk9VUERFU0M6YS5kZXNjcmlwdGlvbn0pKTt0aGlzLmxv''@;'; put 'put ''YWRpbmc9ITEsdGhpcy5ncm91cHM9byxVbi51c2VybmF2Lmdyb3VwTGlzdD1vfSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRncm91cHMiLG51bGwpLnRoZW4ocj0+e3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3Vwcz1yLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMsVW4udXNl''@;'; put 'put ''cm5hdi5ncm91cExpc3Q9ci5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzfSkpOih0aGlzLmdyb3Vwcz1Vbi51c2VybmF2Lmdyb3VwTGlzdCx0aGlzLmdyb3VwU2VhcmNoPVVuLnVzZXJuYXYuZ3JvdXBTZWFyY2gpLHRoaXMucGFyYW1QcmVzZW50JiYodGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlh''@;'; put 'put ''P2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHMvIit0aGlzLnBhcmFtVVJJKyIvbWVtYmVycz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKHI9PnIudGV4dCgpKS50aGVuKHI9PntsZXQgaT1K''@;'; put 'put ''U09OLnBhcnNlKHIpO3RoaXMubG9hZGluZz0hMTtsZXQgbz1pLml0ZW1zLm1hcChhPT4oe01FTUJFUk5BTUU6YS5uYW1lLE1FTUJFUklEOmEuaWR9KSk7dGhpcy5ncm91cE1lbWJlcnM9byx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9by5sZW5ndGgsdGhpcy5ncm91cFVyaT10aGlzLnBhcmFtVVJJ''@;'; put 'put ''LHRoaXMuZ3JvdXBOYW1lPXRoaXMucGFyYW1VUkl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5Z3JvdXAiLHtpd2FudDpbe2dyb3VwaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihpPT57dGhpcy5ncm91cE1lbWJlcnM9aS5hZGFwdGVyUmVzcG9uc2Uu''@;'; put 'put ''c2FzbWVtYmVycyx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9aS5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGgsdm9pZCAwIT09aS5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVyc1swXSYmKHRoaXMubG9hZGluZz0hMSx0aGlzLmdyb3VwVXJpPWkuYWRhcHRlclJlc3BvbnNlLnNhc21l''@;'; put 'put ''bWJlcnNbMF0uVVJJTUVNfHx0aGlzLnBhcmFtVVJJLHRoaXMuZ3JvdXBOYW1lPWkuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0uR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWkuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0uR1JPVVBERVNDLHRoaXMuZ3JvdXBOYW1lfHwodGhp''@;'; put 'put ''cy5ncm91cE5hbWU9dGhpcy5wYXJhbVVSSSkpfSkpKX1ncm91cExpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5ncm91cHMsdGhpcy5ncm91cFNlYXJjaCwiR1JPVVBOQU1FIiksVW4udXNlcm5hdi5ncm91cFNlYXJjaD10aGlzLmdyb3VwU2Vh''@;'; put 'put ''cmNofWdyb3VwT25DbGljayhyKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGk9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2kuc2xpY2UoMCxpLmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVVUkkoci5HUk9VUFVSSSk6aSsiLyIr''@;'; put 'put ''ZW5jb2RlVVJJKHIuR1JPVVBVUkkpKSx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzLyIrci5HUk9VUFVSSSsiL21lbWJlcnM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhl''@;'; put 'put ''bihvPT5vLnRleHQoKSkudGhlbihvPT57bGV0IGE9SlNPTi5wYXJzZShvKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1yLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPXIuR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPXIuR1JPVVBERVNDO2xldCBsPWEuaXRlbXMubWFwKHU9Pih7TUVN''@;'; put 'put ''QkVSTkFNRTp1Lm5hbWUsTUVNQkVSSUQ6dS5pZH0pKTt0aGlzLmdyb3VwTWVtYmVycz1sLHRoaXMuZ3JvdXBNZW1iZXJDb3VudD1sLmxlbmd0aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlncm91cCIse2l3YW50Olt7Z3JvdXBpZDpyLkdST1VQVVJJ''@;'; put 'put ''fV19KS50aGVuKGE9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1yLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPXIuR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPXIuR1JPVVBERVNDLHRoaXMuZ3JvdXBNZW1iZXJzPWEuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMsdGhpcy5ncm91''@;'; put 'put ''cE1lbWJlckNvdW50PWEuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMubGVuZ3RofSl9c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSkoemUoaWMpLHplKGZoKSx6ZSh2YyksemUoVjApLHplKHAxKSl9LHRoaXMuXHUwMjc1Y21wPVBy''@;'; put 'put ''KHt0eXBlOmUsc2VsZWN0b3JzOltbImFwcC1ncm91cCJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczo4LHZhcnM6Myxjb25zdHM6W1sic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWzEsInNpZGViYXItaGVpZ2h0Il0sWzEsInNlYXJjaC1u''@;'; put 'put ''b2RlIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBHcm91cHMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxl''@;'; put 'put ''dGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJhY3RpdmUiXSxbMywiY2xpY2siXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLCJs''@;'; put 'put ''aXN0LXBhZGRpbmciXSxbInNoYXBlIiwidXNlcnMiXSxbMSwic3Bpbm5lciJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJjYXJkIiwiZ3JvdXAtZGF0YSJdLFsxLCJ0YWJsZSIsImdyb3VwLWluZm8iXSxbMSwibGVmdCJdLFsxLCJncm91cC1pbmZvLXRleHQiXSxbMSwidGFi''@;'; put 'put ''bGUtY29udGFpbmVyIl0sWzEsInRhYmxlIiwibWVtYmVyLXRhYmxlIl0sWzMsInJvdXRlckxpbmsiXSxbMSwid2lkdGgtMjUiXSxbMSwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGksbyl7MSZpJiYoSigwLCJhcHAtc2lkZWJhciIsMSkoMSwiY2xyLXRyZWUiKSx2dCgyLG5obiw2LDMsImNsci10''@;'; put 'put ''cmVlLW5vZGUiLDIpLF9vKDMsaWhuLDEsMSxudWxsLG51bGwsQ28pLHRlKCkoKSxKKDUsImRpdiIsMyksdnQoNixvaG4sMywwLCJkaXYiLDQpLHZ0KDcseWhuLDgsMywiZGl2IiksdGUoKSksMiZpJiYoaWUoMiksX3Qoby5ncm91cHM/MjotMSksaWUoKSx5byhvLmdyb3VwcyksaWUoMyksX3Qo''@;'; put 'put ''by5sb2FkaW5nPzY6LTEpLGllKCksX3Qoby5ncm91cE1lbWJlcnMmJiFvLmxvYWRpbmc/NzotMSkpfSxkZXBlbmRlbmNpZXM6W1AyLGx1LG9jLFhsLFBwLE8zLGN1LFBmLCQ2LEc2XSxlbmNhcHN1bGF0aW9uOjJ9KSl9cmV0dXJuIG4oKSxlfSkoKTtmdW5jdGlvbiBiaG4oKXt9ZnVuY3Rpb24g''@;'; put 'put ''UW1lKG4pe3JldHVybiBudWxsPT1uP2JobjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3Iobil9fWZ1bmN0aW9uIG9HZShuKXtyZXR1cm4gbnVsbD09bj9bXTpBcnJheS5pc0FycmF5KG4pP246QXJyYXkuZnJvbShuKX1mdW5jdGlvbiBDaG4oKXtyZXR1cm5bXX1mdW5jdGlv''@;'; put 'put ''biBhR2Uobil7cmV0dXJuIG51bGw9PW4/Q2huOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChuKX19ZnVuY3Rpb24gc0dlKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMobil9fWZ1bmN0aW9uIGxHZShuKXtyZXR1cm4gZnVuY3Rpb24oZSl7''@;'; put 'put ''cmV0dXJuIGUubWF0Y2hlcyhuKX19dmFyIE1obj1BcnJheS5wcm90b3R5cGUuZmluZDtmdW5jdGlvbiB4aG4oKXtyZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZH12YXIga2huPUFycmF5LnByb3RvdHlwZS5maWx0ZXI7ZnVuY3Rpb24gUmhuKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5j''@;'; put 'put ''aGlsZHJlbil9ZnVuY3Rpb24gY0dlKG4pe3JldHVybiBuZXcgQXJyYXkobi5sZW5ndGgpfWZ1bmN0aW9uIGJLKG4sZSl7dGhpcy5vd25lckRvY3VtZW50PW4ub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1uLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50''@;'; put 'put ''PW4sdGhpcy5fX2RhdGFfXz1lfWZ1bmN0aW9uIEZobihuLGUsdCxyLGksbyl7Zm9yKHZhciBsLGE9MCx1PWUubGVuZ3RoLGc9by5sZW5ndGg7YTxnOysrYSkobD1lW2FdKT8obC5fX2RhdGFfXz1vW2FdLHJbYV09bCk6dFthXT1uZXcgYksobixvW2FdKTtmb3IoO2E8dTsrK2EpKGw9ZVthXSkm''@;'; put 'put ''JihpW2FdPWwpfWZ1bmN0aW9uIFBobihuLGUsdCxyLGksbyxhKXt2YXIgbCx1LGVlLGc9bmV3IE1hcCxFPWUubGVuZ3RoLE89by5sZW5ndGgsWj1uZXcgQXJyYXkoRSk7Zm9yKGw9MDtsPEU7KytsKSh1PWVbbF0pJiYoWltsXT1lZT1hLmNhbGwodSx1Ll9fZGF0YV9fLGwsZSkrIiIsZy5oYXMo''@;'; put 'put ''ZWUpP2lbbF09dTpnLnNldChlZSx1KSk7Zm9yKGw9MDtsPE87KytsKWVlPWEuY2FsbChuLG9bbF0sbCxvKSsiIiwodT1nLmdldChlZSkpPyhyW2xdPXUsdS5fX2RhdGFfXz1vW2xdLGcuZGVsZXRlKGVlKSk6dFtsXT1uZXcgYksobixvW2xdKTtmb3IobD0wO2w8RTsrK2wpKHU9ZVtsXSkmJmcu''@;'; put 'put ''Z2V0KFpbbF0pPT09dSYmKGlbbF09dSl9ZnVuY3Rpb24gSGhuKG4pe3JldHVybiBuLl9fZGF0YV9ffWZ1bmN0aW9uIEJobihuKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG4mJiJsZW5ndGgiaW4gbj9uOkFycmF5LmZyb20obil9ZnVuY3Rpb24gWmhuKG4sZSl7cmV0dXJuIG48ZT8tMTpuPmU/''@;'; put 'put ''MTpuPj1lPzA6TmFOfWJLLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YkssYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNl''@;'; put 'put ''cnRCZWZvcmUobixlKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Iobil9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKG4pfX07dmFyIEptZT0iaHR0cDov''@;'; put 'put ''L3d3dy53My5vcmcvMTk5OS94aHRtbCI7Y29uc3QgdUdlPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpKbWUseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoi''@;'; put 'put ''aHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiB3SyhuKXt2YXIgZT1uKz0iIix0PWUuaW5kZXhPZigiOiIpO3JldHVybiB0Pj0wJiYieG1sbnMiIT09KGU9bi5zbGljZSgwLHQpKSYmKG49bi5zbGljZSh0KzEpKSx1R2UuaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOnVH''@;'; put 'put ''ZVtlXSxsb2NhbDpufTpufWZ1bmN0aW9uIEpobihuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKX19ZnVuY3Rpb24gZTFuKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gdDFuKG4s''@;'; put 'put ''ZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUobixlKX19ZnVuY3Rpb24gbjFuKG4sZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwsZSl9fWZ1bmN0aW9uIHIxbihuLGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUu''@;'; put 'put ''YXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXQ/dGhpcy5yZW1vdmVBdHRyaWJ1dGUobik6dGhpcy5zZXRBdHRyaWJ1dGUobix0KX19ZnVuY3Rpb24gaTFuKG4sZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09dD90aGlzLnJlbW92ZUF0''@;'; put 'put ''dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwsdCl9fWZ1bmN0aW9uIGRHZShuKXtyZXR1cm4gbi5vd25lckRvY3VtZW50JiZuLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fG4uZG9jdW1lbnQmJm58fG4uZGVmYXVsdFZpZXd9''@;'; put 'put ''ZnVuY3Rpb24gYTFuKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobil9fWZ1bmN0aW9uIHMxbihuLGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuLGUsdCl9fWZ1bmN0aW9uIGwxbihuLGUsdCl7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkobixyLHQpfX1mdW5jdGlvbiB5QShuLGUpe3JldHVybiBuLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoZSl8fGRHZShuKS5n''@;'; put 'put ''ZXRDb21wdXRlZFN0eWxlKG4sbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShlKX1mdW5jdGlvbiB1MW4obil7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbbl19fWZ1bmN0aW9uIGQxbihuLGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbbl09ZX19ZnVuY3Rpb24gaDFuKG4sZSl7cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09dD9kZWxldGUgdGhpc1tuXTp0aGlzW25dPXR9fWZ1bmN0aW9uIGhHZShuKXtyZXR1cm4gbi50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gZTRlKG4pe3JldHVybiBuLmNsYXNzTGlzdHx8bmV3IGZH''@;'; put 'put ''ZShuKX1mdW5jdGlvbiBmR2Uobil7dGhpcy5fbm9kZT1uLHRoaXMuX25hbWVzPWhHZShuLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIHBHZShuLGUpe2Zvcih2YXIgdD1lNGUobikscj0tMSxpPWUubGVuZ3RoOysrcjxpOyl0LmFkZChlW3JdKX1mdW5jdGlvbiBnR2Uobixl''@;'; put 'put ''KXtmb3IodmFyIHQ9ZTRlKG4pLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspdC5yZW1vdmUoZVtyXSl9ZnVuY3Rpb24gcDFuKG4pe3JldHVybiBmdW5jdGlvbigpe3BHZSh0aGlzLG4pfX1mdW5jdGlvbiBnMW4obil7cmV0dXJuIGZ1bmN0aW9uKCl7Z0dlKHRoaXMsbil9fWZ1bmN0aW9uIG0xbihu''@;'; put 'put ''LGUpe3JldHVybiBmdW5jdGlvbigpeyhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9wR2U6Z0dlKSh0aGlzLG4pfX1mdW5jdGlvbiBfMW4oKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIHkxbihuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fWZ1bmN0aW9uIGIx''@;'; put 'put ''bihuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PWU/PyIifX1mdW5jdGlvbiBDMW4oKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBTMW4obil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9bn19ZnVu''@;'; put 'put ''Y3Rpb24gRTFuKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPWU/PyIifX1mdW5jdGlvbiBUMW4oKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gQTFuKCl7''@;'; put 'put ''dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gUjFuKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudCx0PXRoaXMubmFtZXNwYWNlVVJJO3Jl''@;'; put 'put ''dHVybiB0PT09Sm1lJiZlLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1KbWU/ZS5jcmVhdGVFbGVtZW50KG4pOmUuY3JlYXRlRWxlbWVudE5TKHQsbil9fWZ1bmN0aW9uIEkxbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1l''@;'; put 'put ''bnROUyhuLnNwYWNlLG4ubG9jYWwpfX1mdW5jdGlvbiBtR2Uobil7dmFyIGU9d0sobik7cmV0dXJuKGUubG9jYWw/STFuOlIxbikoZSl9ZnVuY3Rpb24gTDFuKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gTjFuKCl7dmFyIG49dGhpcy5wYXJlbnROb2RlO24mJm4ucmVtb3ZlQ2hpbGQodGhpcyl9''@;'; put 'put ''ZnVuY3Rpb24gUDFuKCl7dmFyIG49dGhpcy5jbG9uZU5vZGUoITEpLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKG4sdGhpcy5uZXh0U2libGluZyk6bn1mdW5jdGlvbiBIMW4oKXt2YXIgbj10aGlzLmNsb25lTm9kZSghMCksZT10aGlzLnBhcmVudE5vZGU7cmV0''@;'; put 'put ''dXJuIGU/ZS5pbnNlcnRCZWZvcmUobix0aGlzLm5leHRTaWJsaW5nKTpufWZ1bmN0aW9uIHoxbihuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciBvLHQ9MCxyPS0xLGk9ZS5sZW5ndGg7dDxpOysrdClvPWVbdF0sbi50eXBlJiZvLnR5cGUhPT1uLnR5''@;'; put 'put ''cGV8fG8ubmFtZSE9PW4ubmFtZT9lWysrcl09bzp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5vcHRpb25zKTsrK3I/ZS5sZW5ndGg9cjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gVzFuKG4sZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaSxyPXRo''@;'; put 'put ''aXMuX19vbixvPWZ1bmN0aW9uIGoxbihuKXtyZXR1cm4gZnVuY3Rpb24oZSl7bi5jYWxsKHRoaXMsZSx0aGlzLl9fZGF0YV9fKX19KGUpO2lmKHIpZm9yKHZhciBhPTAsbD1yLmxlbmd0aDthPGw7KythKWlmKChpPXJbYV0pLnR5cGU9PT1uLnR5cGUmJmkubmFtZT09PW4ubmFtZSlyZXR1cm4g''@;'; put 'put ''dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGkudHlwZSxpLmxpc3RlbmVyLGkub3B0aW9ucyksdGhpcy5hZGRFdmVudExpc3RlbmVyKGkudHlwZSxpLmxpc3RlbmVyPW8saS5vcHRpb25zPXQpLHZvaWQoaS52YWx1ZT1lKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIobi50eXBlLG8sdCksaT17dHlw''@;'; put 'put ''ZTpuLnR5cGUsbmFtZTpuLm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjpvLG9wdGlvbnM6dH0scj9yLnB1c2goaSk6dGhpcy5fX29uPVtpXX19ZnVuY3Rpb24gdkdlKG4sZSx0KXt2YXIgcj1kR2UobiksaT1yLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBpP2k9bmV3IGkoZSx0KTooaT1y''@;'; put 'put ''LmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLHQ/KGkuaW5pdEV2ZW50KGUsdC5idWJibGVzLHQuY2FuY2VsYWJsZSksaS5kZXRhaWw9dC5kZXRhaWwpOmkuaW5pdEV2ZW50KGUsITEsITEpKSxuLmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gWjFuKG4sZSl7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHZHZSh0aGlzLG4sZSl9fWZ1bmN0aW9uIEcxbihuLGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB2R2UodGhpcyxuLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19ZkdlLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKG4pe3RoaXMuX25hbWVzLmluZGV4T2Yobik8MCYmKHRo''@;'; put 'put ''aXMuX25hbWVzLnB1c2gobiksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKG4pe3ZhciBlPXRoaXMuX25hbWVzLmluZGV4T2Yobik7ZT49MCYmKHRoaXMuX25hbWVzLnNwbGljZShlLDEpLHRoaXMuX25vZGUu''@;'; put 'put ''c2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG4pPj0wfX07dmFyIHQ0ZT1bbnVsbF07ZnVuY3Rpb24gbDMobixlKXt0aGlzLl9ncm91cHM9bix0aGlzLl9wYXJlbnRzPWV9''@;'; put 'put ''ZnVuY3Rpb24gX0dlKCl7cmV0dXJuIG5ldyBsMyhbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHQ0ZSl9bDMucHJvdG90eXBlPV9HZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmwzLHNlbGVjdDpmdW5jdGlvbiB3aG4obil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPVFtZShuKSk7Zm9y''@;'; put 'put ''KHZhciBlPXRoaXMuX2dyb3Vwcyx0PWUubGVuZ3RoLHI9bmV3IEFycmF5KHQpLGk9MDtpPHQ7KytpKWZvcih2YXIgdSxnLG89ZVtpXSxhPW8ubGVuZ3RoLGw9cltpXT1uZXcgQXJyYXkoYSksRT0wO0U8YTsrK0UpKHU9b1tFXSkmJihnPW4uY2FsbCh1LHUuX19kYXRhX18sRSxvKSkmJigiX19k''@;'; put 'put ''YXRhX18iaW4gdSYmKGcuX19kYXRhX189dS5fX2RhdGFfXyksbFtFXT1nKTtyZXR1cm4gbmV3IGwzKHIsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbiBFaG4obil7bj0iZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbiBTaG4obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IG9HZShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fShuKTphR2Uobik7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PWUubGVuZ3RoLHI9W10saT1bXSxvPTA7bzx0Oysrbylmb3IodmFyIHUsYT1lW29dLGw9YS5sZW5ndGgsZz0wO2c8bDsrK2cpKHU9YVtnXSkmJihyLnB1c2gobi5jYWxsKHUs''@;'; put 'put ''dS5fX2RhdGFfXyxnLGEpKSxpLnB1c2godSkpO3JldHVybiBuZXcgbDMocixpKX0sc2VsZWN0Q2hpbGQ6ZnVuY3Rpb24gQWhuKG4pe3JldHVybiB0aGlzLnNlbGVjdChudWxsPT1uP3hobjpmdW5jdGlvbiBUaG4obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1obi5jYWxsKHRoaXMuY2hp''@;'; put 'put ''bGRyZW4sbil9fSgiZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmxHZShuKSkpfSxzZWxlY3RDaGlsZHJlbjpmdW5jdGlvbiBEaG4obil7cmV0dXJuIHRoaXMuc2VsZWN0QWxsKG51bGw9PW4/UmhuOmZ1bmN0aW9uIElobihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4ga2huLmNhbGwodGhpcy5j''@;'; put 'put ''aGlsZHJlbixuKX19KCJmdW5jdGlvbiI9PXR5cGVvZiBuP246bEdlKG4pKSl9LGZpbHRlcjpmdW5jdGlvbiBMaG4obil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPXNHZShuKSk7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PWUubGVuZ3RoLHI9bmV3IEFycmF5KHQpLGk9MDtpPHQ7KytpKWZv''@;'; put 'put ''cih2YXIgdSxvPWVbaV0sYT1vLmxlbmd0aCxsPXJbaV09W10sZz0wO2c8YTsrK2cpKHU9b1tnXSkmJm4uY2FsbCh1LHUuX19kYXRhX18sZyxvKSYmbC5wdXNoKHUpO3JldHVybiBuZXcgbDMocix0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbiBWaG4obixlKXtpZighYXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLEhobik7dmFyIHQ9ZT9QaG46RmhuLHI9dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49ZnVuY3Rpb24gTmhuKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBufX0obikpO2Zvcih2YXIgbz1p''@;'; put 'put ''Lmxlbmd0aCxhPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSx1PW5ldyBBcnJheShvKSxnPTA7ZzxvOysrZyl7dmFyIEU9cltnXSxPPWlbZ10sWj1PLmxlbmd0aCxlZT1CaG4obi5jYWxsKEUsRSYmRS5fX2RhdGFfXyxnLHIpKSx2ZT1lZS5sZW5ndGgsTWU9bFtnXT1uZXcgQXJyYXkodmUp''@;'; put 'put ''LEhlPWFbZ109bmV3IEFycmF5KHZlKTt0KEUsTyxNZSxIZSx1W2ddPW5ldyBBcnJheShaKSxlZSxlKTtmb3IodmFyIEF0LEt0LGF0PTAsQ3Q9MDthdDx2ZTsrK2F0KWlmKEF0PU1lW2F0XSl7Zm9yKGF0Pj1DdCYmKEN0PWF0KzEpOyEoS3Q9SGVbQ3RdKSYmKytDdDx2ZTspO0F0Ll9uZXh0PUt0''@;'; put 'put ''fHxudWxsfX1yZXR1cm4oYT1uZXcgbDMoYSxyKSkuX2VudGVyPWwsYS5fZXhpdD11LGF9LGVudGVyOmZ1bmN0aW9uIE9obigpe3JldHVybiBuZXcgbDModGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoY0dlKSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbiBqaG4oKXtyZXR1cm4g''@;'; put 'put ''bmV3IGwzKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoY0dlKSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbiBVaG4obixlLHQpe3ZhciByPXRoaXMuZW50ZXIoKSxpPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj8ocj1uKHIpKSYmKHI9ci5z''@;'; put 'put ''ZWxlY3Rpb24oKSk6cj1yLmFwcGVuZChuKyIiKSxudWxsIT1lJiYoaT1lKGkpKSYmKGk9aS5zZWxlY3Rpb24oKSksbnVsbD09dD9vLnJlbW92ZSgpOnQobyksciYmaT9yLm1lcmdlKGkpLm9yZGVyKCk6aX0sbWVyZ2U6ZnVuY3Rpb24gemhuKG4pe2Zvcih2YXIgZT1uLnNlbGVjdGlvbj9uLnNl''@;'; put 'put ''bGVjdGlvbigpOm4sdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsaT10Lmxlbmd0aCxhPU1hdGgubWluKGksci5sZW5ndGgpLGw9bmV3IEFycmF5KGkpLHU9MDt1PGE7Kyt1KWZvcih2YXIgZWUsZz10W3VdLEU9clt1XSxPPWcubGVuZ3RoLFo9bFt1XT1uZXcgQXJyYXkoTyksdmU9MDt2ZTxP''@;'; put 'put ''OysrdmUpKGVlPWdbdmVdfHxFW3ZlXSkmJihaW3ZlXT1lZSk7Zm9yKDt1PGk7Kyt1KWxbdV09dFt1XTtyZXR1cm4gbmV3IGwzKGwsdGhpcy5fcGFyZW50cyl9LHNlbGVjdGlvbjpmdW5jdGlvbiBLMW4oKXtyZXR1cm4gdGhpc30sb3JkZXI6ZnVuY3Rpb24gV2huKCl7Zm9yKHZhciBuPXRoaXMu''@;'; put 'put ''X2dyb3VwcyxlPS0xLHQ9bi5sZW5ndGg7KytlPHQ7KWZvcih2YXIgYSxyPW5bZV0saT1yLmxlbmd0aC0xLG89cltpXTstLWk+PTA7KShhPXJbaV0pJiYobyYmNF5hLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pJiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4g''@;'; put 'put ''dGhpc30sc29ydDpmdW5jdGlvbiBZaG4obil7ZnVuY3Rpb24gZShPLFope3JldHVybiBPJiZaP24oTy5fX2RhdGFfXyxaLl9fZGF0YV9fKTohTy0hWn1ufHwobj1aaG4pO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxpPW5ldyBBcnJheShyKSxvPTA7bzxyOysrbyl7Zm9yKHZh''@;'; put 'put ''ciBnLGE9dFtvXSxsPWEubGVuZ3RoLHU9aVtvXT1uZXcgQXJyYXkobCksRT0wO0U8bDsrK0UpKGc9YVtFXSkmJih1W0VdPWcpO3Uuc29ydChlKX1yZXR1cm4gbmV3IGwzKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbiBHaG4oKXt2YXIgbj1hcmd1bWVudHNbMF07cmV0''@;'; put 'put ''dXJuIGFyZ3VtZW50c1swXT10aGlzLG4uYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uICRobigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMpfSxub2RlOmZ1bmN0aW9uIHFobigpe2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT0wLHQ9bi5sZW5ndGg7ZTx0OysrZSlm''@;'; put 'put ''b3IodmFyIHI9bltlXSxpPTAsbz1yLmxlbmd0aDtpPG87KytpKXt2YXIgYT1yW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24gS2huKCl7bGV0IG49MDtmb3IoY29uc3QgZSBvZiB0aGlzKSsrbjtyZXR1cm4gbn0sZW1wdHk6ZnVuY3Rpb24gWGhuKCl7cmV0dXJu''@;'; put 'put ''IXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uIFFobihuKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBsLGk9ZVt0XSxvPTAsYT1pLmxlbmd0aDtvPGE7KytvKShsPWlbb10pJiZuLmNhbGwobCxsLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRo''@;'; put 'put ''aXN9LGF0dHI6ZnVuY3Rpb24gbzFuKG4sZSl7dmFyIHQ9d0sobik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcj10aGlzLm5vZGUoKTtyZXR1cm4gdC5sb2NhbD9yLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6ci5nZXRBdHRyaWJ1dGUodCl9cmV0dXJuIHRoaXMuZWFjaCgo''@;'; put 'put ''bnVsbD09ZT90LmxvY2FsP2UxbjpKaG46ImZ1bmN0aW9uIj09dHlwZW9mIGU/dC5sb2NhbD9pMW46cjFuOnQubG9jYWw/bjFuOnQxbikodCxlKSl9LHN0eWxlOmZ1bmN0aW9uIGMxbihuLGUsdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/YTFuOiJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBlP2wxbjpzMW4pKG4sZSx0Pz8iIikpOnlBKHRoaXMubm9kZSgpLG4pfSxwcm9wZXJ0eTpmdW5jdGlvbiBmMW4obixlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT91MW46ImZ1bmN0aW9uIj09dHlwZW9mIGU/aDFuOmQxbikobixl''@;'; put 'put ''KSk6dGhpcy5ub2RlKClbbl19LGNsYXNzZWQ6ZnVuY3Rpb24gdjFuKG4sZSl7dmFyIHQ9aEdlKG4rIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByPWU0ZSh0aGlzLm5vZGUoKSksaT0tMSxvPXQubGVuZ3RoOysraTxvOylpZighci5jb250YWlucyh0W2ldKSlyZXR1cm4hMTty''@;'; put 'put ''ZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9tMW46ZT9wMW46ZzFuKSh0LGUpKX0sdGV4dDpmdW5jdGlvbiB3MW4obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PW4/XzFuOigiZnVuY3Rpb24iPT10eXBlb2Ygbj9iMW46eTFu''@;'; put 'put ''KShuKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24gTTFuKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT1uP0MxbjooImZ1bmN0aW9uIj09dHlwZW9mIG4/RTFuOlMxbikobikpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVu''@;'; put 'put ''Y3Rpb24geDFuKCl7cmV0dXJuIHRoaXMuZWFjaChUMW4pfSxsb3dlcjpmdW5jdGlvbiBrMW4oKXtyZXR1cm4gdGhpcy5lYWNoKEExbil9LGFwcGVuZDpmdW5jdGlvbiBEMW4obil7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjptR2Uobik7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LGluc2VydDpmdW5jdGlvbiBPMW4obixlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOm1HZShuKSxyPW51bGw9PWU/TDFuOiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6UW1lKGUpO3JldHVy''@;'; put 'put ''biB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZSh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0scmVtb3ZlOmZ1bmN0aW9uIEYxbigpe3JldHVybiB0aGlzLmVhY2goTjFuKX0sY2xvbmU6ZnVuY3Rp''@;'; put 'put ''b24gVjFuKG4pe3JldHVybiB0aGlzLnNlbGVjdChuP0gxbjpQMW4pfSxkYXR1bTpmdW5jdGlvbiBCMW4obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLG4pOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbiBZMW4obixlLHQpe3ZhciBp''@;'; put 'put ''LGEscj1mdW5jdGlvbiBVMW4obil7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihlKXt2YXIgdD0iIixyPWUuaW5kZXhPZigiLiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKHIrMSksZT1lLnNsaWNlKDAscikpLHt0eXBlOmUsbmFtZTp0fX0pfShuKyIiKSxv''@;'; put 'put ''PXIubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKGw9ZT9XMW46ejFuLGk9MDtpPG87KytpKXRoaXMuZWFjaChsKHJbaV0sZSx0KSk7cmV0dXJuIHRoaXN9dmFyIGw9dGhpcy5ub2RlKCkuX19vbjtpZihsKWZvcih2YXIgRSx1PTAsZz1sLmxlbmd0aDt1PGc7Kyt1KWZvcihp''@;'; put 'put ''PTAsRT1sW3VdO2k8bzsrK2kpaWYoKGE9cltpXSkudHlwZT09PUUudHlwZSYmYS5uYW1lPT09RS5uYW1lKXJldHVybiBFLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbiAkMW4obixlKXtyZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9HMW46WjFuKShuLGUpKX0sW1N5bWJv''@;'; put 'put ''bC5pdGVyYXRvcl06ZnVuY3Rpb24qcTFuKCl7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPTAsdD1uLmxlbmd0aDtlPHQ7KytlKWZvcih2YXIgYSxyPW5bZV0saT0wLG89ci5sZW5ndGg7aTxvOysraSkoYT1yW2ldKSYmKHlpZWxkIGEpfX07Y29uc3QgekM9X0dlO2Z1bmN0aW9uIG40ZShuKXty''@;'; put 'put ''ZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/bmV3IGwzKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKG4pXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IGwzKFtvR2UobildLHQ0ZSl9ZnVuY3Rpb24gQmwobil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuP25ldyBsMyhbW2RvY3Vt''@;'; put 'put ''ZW50LnF1ZXJ5U2VsZWN0b3IobildXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IGwzKFtbbl1dLHQ0ZSl9dmFyIFgxbj17dmFsdWU6KCk9Pnt9fTtmdW5jdGlvbiB5R2UoKXtmb3IodmFyIHIsbj0wLGU9YXJndW1lbnRzLmxlbmd0aCx0PXt9O248ZTsrK24pe2lmKCEocj1hcmd1''@;'; put 'put ''bWVudHNbbl0rIiIpfHxyIGluIHR8fC9bXHMuXS8udGVzdChyKSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIityKTt0W3JdPVtdfXJldHVybiBuZXcgQ0sodCl9ZnVuY3Rpb24gQ0sobil7dGhpcy5fPW59ZnVuY3Rpb24gSjFuKG4sZSl7Zm9yKHZhciBpLHQ9MCxyPW4ubGVuZ3Ro''@;'; put 'put ''O3Q8cjsrK3QpaWYoKGk9blt0XSkubmFtZT09PWUpcmV0dXJuIGkudmFsdWV9ZnVuY3Rpb24gYkdlKG4sZSx0KXtmb3IodmFyIHI9MCxpPW4ubGVuZ3RoO3I8aTsrK3IpaWYobltyXS5uYW1lPT09ZSl7bltyXT1YMW4sbj1uLnNsaWNlKDAscikuY29uY2F0KG4uc2xpY2UocisxKSk7YnJlYWt9''@;'; put 'put ''cmV0dXJuIG51bGwhPXQmJm4ucHVzaCh7bmFtZTplLHZhbHVlOnR9KSxufUNLLnByb3RvdHlwZT15R2UucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDSyxvbjpmdW5jdGlvbihuLGUpe3ZhciBpLHQ9dGhpcy5fLHI9ZnVuY3Rpb24gUTFuKG4sZSl7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxz''@;'; put 'put ''Ky8pLm1hcChmdW5jdGlvbih0KXt2YXIgcj0iIixpPXQuaW5kZXhPZigiLiIpO2lmKGk+PTAmJihyPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1l''@;'; put 'put ''OnJ9fSl9KG4rIiIsdCksbz0tMSxhPXIubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KytvPGE7KWlmKGk9KG49cltvXSkudHlwZSl0W2ld''@;'; put 'put ''PWJHZSh0W2ldLG4ubmFtZSxlKTtlbHNlIGlmKG51bGw9PWUpZm9yKGkgaW4gdCl0W2ldPWJHZSh0W2ldLG4ubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbzxhOylpZigoaT0obj1yW29dKS50eXBlKSYmKGk9SjFuKHRbaV0sbi5uYW1lKSkpcmV0dXJuIGl9LGNvcHk6ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgbj17fSxlPXRoaXMuXztmb3IodmFyIHQgaW4gZSluW3RdPWVbdF0uc2xpY2UoKTtyZXR1cm4gbmV3IENLKG4pfSxjYWxsOmZ1bmN0aW9uKG4sZSl7aWYoKGk9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgaSxvLHQ9bmV3IEFycmF5KGkpLHI9MDtyPGk7KytyKXRbcl09YXJn''@;'; put 'put ''dW1lbnRzW3IrMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShuKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIituKTtmb3Iocj0wLGk9KG89dGhpcy5fW25dKS5sZW5ndGg7cjxpOysrcilvW3JdLnZhbHVlLmFwcGx5KGUsdCl9LGFwcGx5OmZ1bmN0aW9uKG4sZSx0KXtpZigh''@;'; put 'put ''dGhpcy5fLmhhc093blByb3BlcnR5KG4pKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK24pO2Zvcih2YXIgcj10aGlzLl9bbl0saT0wLG89ci5sZW5ndGg7aTxvOysraSlyW2ldLnZhbHVlLmFwcGx5KGUsdCl9fTtjb25zdCByNGU9eUdlO3ZhciBTSyxDUCxiQT0wLGJQPTAsd1A9''@;'; put 'put ''MCxFSz0wLFdDPTAsTUs9MCxTUD0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxDR2U9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25G''@;'; put 'put ''cmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24obil7c2V0VGltZW91dChuLDE3KX07ZnVuY3Rpb24gaTRlKCl7cmV0dXJuIFdDfHwoQ0dlKGUwbiksV0M9U1Aubm93KCkrTUspfWZ1bmN0aW9uIGUwbigpe1dDPTB9ZnVuY3Rpb24gVEsoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4''@;'; put 'put ''dD1udWxsfWZ1bmN0aW9uIFNHZShuLGUsdCl7dmFyIHI9bmV3IFRLO3JldHVybiByLnJlc3RhcnQobixlLHQpLHJ9ZnVuY3Rpb24gRUdlKCl7V0M9KEVLPVNQLm5vdygpKStNSyxiQT1iUD0wO3RyeXshZnVuY3Rpb24gdDBuKCl7aTRlKCksKytiQTtmb3IodmFyIGUsbj1TSztuOykoZT1XQy1u''@;'; put 'put ''Ll90aW1lKT49MCYmbi5fY2FsbC5jYWxsKHZvaWQgMCxlKSxuPW4uX25leHQ7LS1iQX0oKX1maW5hbGx5e2JBPTAsZnVuY3Rpb24gcjBuKCl7Zm9yKHZhciBuLHQsZT1TSyxyPTEvMDtlOyllLl9jYWxsPyhyPmUuX3RpbWUmJihyPWUuX3RpbWUpLG49ZSxlPWUuX25leHQpOih0PWUuX25leHQs''@;'; put 'put ''ZS5fbmV4dD1udWxsLGU9bj9uLl9uZXh0PXQ6U0s9dCk7Q1A9bixvNGUocil9KCksV0M9MH19ZnVuY3Rpb24gbjBuKCl7dmFyIG49U1Aubm93KCksZT1uLUVLO2U+MWUzJiYoTUstPWUsRUs9bil9ZnVuY3Rpb24gbzRlKG4pe2JBfHwoYlAmJihiUD1jbGVhclRpbWVvdXQoYlApKSxuLVdDPjI0''@;'; put 'put ''PyhuPDEvMCYmKGJQPXNldFRpbWVvdXQoRUdlLG4tU1Aubm93KCktTUspKSx3UCYmKHdQPWNsZWFySW50ZXJ2YWwod1ApKSk6KHdQfHwoRUs9U1Aubm93KCksd1A9c2V0SW50ZXJ2YWwobjBuLDFlMykpLGJBPTEsQ0dlKEVHZSkpKX1mdW5jdGlvbiB4SyhuLGUsdCl7dmFyIHI9bmV3IFRLO3Jl''@;'; put 'put ''dHVybiByLnJlc3RhcnQoaT0+e3Iuc3RvcCgpLG4oaStlKX0sZT1udWxsPT1lPzA6K2UsdCkscn1USy5wcm90b3R5cGU9U0dlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6VEsscmVzdGFydDpmdW5jdGlvbihuLGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTt0PShudWxsPT10P2k0ZSgpOit0KSsobnVsbD09ZT8wOitlKSwhdGhpcy5fbmV4dCYmQ1AhPT10aGlzJiYoQ1A/Q1AuX25leHQ9dGhpczpTSz10aGlzLENQPXRoaXMpLHRoaXMuX2NhbGw9bix0aGlzLl90aW1lPXQsbzRlKCl9LHN0b3A6''@;'; put 'put ''ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLG80ZSgpKX19O3ZhciBpMG49cjRlKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLG8wbj1bXTtmdW5jdGlvbiBSSyhuLGUsdCxyLGksbyl7dmFyIGE9bi5fX3RyYW5zaXRpb247''@;'; put 'put ''aWYoYSl7aWYodCBpbiBhKXJldHVybn1lbHNlIG4uX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbiBhMG4obixlLHQpe3ZhciBpLHI9bi5fX3RyYW5zaXRpb247ZnVuY3Rpb24gYShnKXt2YXIgRSxPLFosZWU7aWYoMSE9PXQuc3RhdGUpcmV0dXJuIHUoKTtmb3IoRSBpbiByKWlmKChlZT1yW0Vd''@;'; put 'put ''KS5uYW1lPT09dC5uYW1lKXtpZigzPT09ZWUuc3RhdGUpcmV0dXJuIHhLKGEpOzQ9PT1lZS5zdGF0ZT8oZWUuc3RhdGU9NixlZS50aW1lci5zdG9wKCksZWUub24uY2FsbCgiaW50ZXJydXB0IixuLG4uX19kYXRhX18sZWUuaW5kZXgsZWUuZ3JvdXApLGRlbGV0ZSByW0VdKTorRTxlJiYoZWUu''@;'; put 'put ''c3RhdGU9NixlZS50aW1lci5zdG9wKCksZWUub24uY2FsbCgiY2FuY2VsIixuLG4uX19kYXRhX18sZWUuaW5kZXgsZWUuZ3JvdXApLGRlbGV0ZSByW0VdKX1pZih4SyhmdW5jdGlvbigpezM9PT10LnN0YXRlJiYodC5zdGF0ZT00LHQudGltZXIucmVzdGFydChsLHQuZGVsYXksdC50aW1lKSxs''@;'; put 'put ''KGcpKX0pLHQuc3RhdGU9Mix0Lm9uLmNhbGwoInN0YXJ0IixuLG4uX19kYXRhX18sdC5pbmRleCx0Lmdyb3VwKSwyPT09dC5zdGF0ZSl7Zm9yKHQuc3RhdGU9MyxpPW5ldyBBcnJheShaPXQudHdlZW4ubGVuZ3RoKSxFPTAsTz0tMTtFPFo7KytFKShlZT10LnR3ZWVuW0VdLnZhbHVlLmNhbGwo''@;'; put 'put ''bixuLl9fZGF0YV9fLHQuaW5kZXgsdC5ncm91cCkpJiYoaVsrK09dPWVlKTtpLmxlbmd0aD1PKzF9fWZ1bmN0aW9uIGwoZyl7Zm9yKHZhciBFPWc8dC5kdXJhdGlvbj90LmVhc2UuY2FsbChudWxsLGcvdC5kdXJhdGlvbik6KHQudGltZXIucmVzdGFydCh1KSx0LnN0YXRlPTUsMSksTz0tMSxa''@;'; put 'put ''PWkubGVuZ3RoOysrTzxaOylpW09dLmNhbGwobixFKTs1PT09dC5zdGF0ZSYmKHQub24uY2FsbCgiZW5kIixuLG4uX19kYXRhX18sdC5pbmRleCx0Lmdyb3VwKSx1KCkpfWZ1bmN0aW9uIHUoKXtmb3IodmFyIGcgaW4gdC5zdGF0ZT02LHQudGltZXIuc3RvcCgpLGRlbGV0ZSByW2VdLHIpcmV0''@;'; put 'put ''dXJuO2RlbGV0ZSBuLl9fdHJhbnNpdGlvbn1yW2VdPXQsdC50aW1lcj1TR2UoZnVuY3Rpb24gbyhnKXt0LnN0YXRlPTEsdC50aW1lci5yZXN0YXJ0KGEsdC5kZWxheSx0LnRpbWUpLHQuZGVsYXk8PWcmJmEoZy10LmRlbGF5KX0sMCx0LnRpbWUpfShuLHQse25hbWU6ZSxpbmRleDpyLGdyb3Vw''@;'; put 'put ''Omksb246aTBuLHR3ZWVuOm8wbix0aW1lOm8udGltZSxkZWxheTpvLmRlbGF5LGR1cmF0aW9uOm8uZHVyYXRpb24sZWFzZTpvLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9ZnVuY3Rpb24gYzRlKG4sZSl7dmFyIHQ9UTQobixlKTtpZih0LnN0YXRlPjApdGhyb3cgbmV3IEVycm9yKCJ0b28g''@;'; put 'put ''bGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gdH1mdW5jdGlvbiBYNihuLGUpe3ZhciB0PVE0KG4sZSk7aWYodC5zdGF0ZT4zKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiB0fWZ1bmN0aW9uIFE0KG4sZSl7dmFyIHQ9bi5fX3RyYW5z''@;'; put 'put ''aXRpb247aWYoIXR8fCEodD10W2VdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHR9ZnVuY3Rpb24gSUsobixlKXt2YXIgcixpLGEsdD1uLl9fdHJhbnNpdGlvbixvPSEwO2lmKHQpe2ZvcihhIGluIGU9bnVsbD09ZT9udWxsOmUrIiIsdCkocj10W2Fd''@;'; put 'put ''KS5uYW1lPT09ZT8oaT1yLnN0YXRlPjImJnIuc3RhdGU8NSxyLnN0YXRlPTYsci50aW1lci5zdG9wKCksci5vbi5jYWxsKGk/ImludGVycnVwdCI6ImNhbmNlbCIsbixuLl9fZGF0YV9fLHIuaW5kZXgsci5ncm91cCksZGVsZXRlIHRbYV0pOm89ITE7byYmZGVsZXRlIG4uX190cmFuc2l0aW9u''@;'; put 'put ''fX1mdW5jdGlvbiBRNihuLGUpe3JldHVybiBuPStuLGU9K2UsZnVuY3Rpb24odCl7cmV0dXJuIG4qKDEtdCkrZSp0fX12YXIgREsseEdlPTE4MC9NYXRoLlBJLHU0ZT17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlv''@;'; put 'put ''biBBR2UobixlLHQscixpLG8pe3ZhciBhLGwsdTtyZXR1cm4oYT1NYXRoLnNxcnQobipuK2UqZSkpJiYobi89YSxlLz1hKSwodT1uKnQrZSpyKSYmKHQtPW4qdSxyLT1lKnUpLChsPU1hdGguc3FydCh0KnQrcipyKSkmJih0Lz1sLHIvPWwsdS89bCksbipyPGUqdCYmKG49LW4sZT0tZSx1PS11''@;'; put 'put ''LGE9LWEpLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKGUsbikqeEdlLHNrZXdYOk1hdGguYXRhbih1KSp4R2Usc2NhbGVYOmEsc2NhbGVZOmx9fWZ1bmN0aW9uIGtHZShuLGUsdCxyKXtmdW5jdGlvbiBpKGcpe3JldHVybiBnLmxlbmd0aD9nLnBvcCgpKyIg''@;'; put 'put ''IjoiIn1yZXR1cm4gZnVuY3Rpb24oZyxFKXt2YXIgTz1bXSxaPVtdO3JldHVybiBnPW4oZyksRT1uKEUpLGZ1bmN0aW9uIG8oZyxFLE8sWixlZSx2ZSl7aWYoZyE9PU98fEUhPT1aKXt2YXIgTWU9ZWUucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxlLG51bGwsdCk7dmUucHVzaCh7aTpNZS00LHg6''@;'; put 'put ''UTYoZyxPKX0se2k6TWUtMix4OlE2KEUsWil9KX1lbHNlKE98fFopJiZlZS5wdXNoKCJ0cmFuc2xhdGUoIitPK2UrWit0KX0oZy50cmFuc2xhdGVYLGcudHJhbnNsYXRlWSxFLnRyYW5zbGF0ZVgsRS50cmFuc2xhdGVZLE8sWiksZnVuY3Rpb24gYShnLEUsTyxaKXtnIT09RT8oZy1FPjE4MD9F''@;'; put 'put ''Kz0zNjA6RS1nPjE4MCYmKGcrPTM2MCksWi5wdXNoKHtpOk8ucHVzaChpKE8pKyJyb3RhdGUoIixudWxsLHIpLTIseDpRNihnLEUpfSkpOkUmJk8ucHVzaChpKE8pKyJyb3RhdGUoIitFK3IpfShnLnJvdGF0ZSxFLnJvdGF0ZSxPLFopLGZ1bmN0aW9uIGwoZyxFLE8sWil7ZyE9PUU/Wi5wdXNo''@;'; put 'put ''KHtpOk8ucHVzaChpKE8pKyJza2V3WCgiLG51bGwsciktMix4OlE2KGcsRSl9KTpFJiZPLnB1c2goaShPKSsic2tld1goIitFK3IpfShnLnNrZXdYLEUuc2tld1gsTyxaKSxmdW5jdGlvbiB1KGcsRSxPLFosZWUsdmUpe2lmKGchPT1PfHxFIT09Wil7dmFyIE1lPWVlLnB1c2goaShlZSkrInNj''@;'; put 'put ''YWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO3ZlLnB1c2goe2k6TWUtNCx4OlE2KGcsTyl9LHtpOk1lLTIseDpRNihFLFopfSl9ZWxzZSgxIT09T3x8MSE9PVopJiZlZS5wdXNoKGkoZWUpKyJzY2FsZSgiK08rIiwiK1orIikiKX0oZy5zY2FsZVgsZy5zY2FsZVksRS5zY2FsZVgsRS5zY2FsZVks''@;'; put 'put ''TyxaKSxnPUU9bnVsbCxmdW5jdGlvbihlZSl7Zm9yKHZhciBIZSx2ZT0tMSxNZT1aLmxlbmd0aDsrK3ZlPE1lOylPWyhIZT1aW3ZlXSkuaV09SGUueChlZSk7cmV0dXJuIE8uam9pbigiIil9fX12YXIgdTBuPWtHZShmdW5jdGlvbiBsMG4obil7Y29uc3QgZT1uZXcoImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIERPTU1hdHJpeD9ET01NYXRyaXg6V2ViS2l0Q1NTTWF0cml4KShuKyIiKTtyZXR1cm4gZS5pc0lkZW50aXR5P3U0ZTpBR2UoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpfSwicHgsICIsInB4KSIsImRlZykiKSxSR2U9a0dlKGZ1bmN0aW9uIGMwbihuKXtyZXR1cm4gbnVsbCE9biYmKERL''@;'; put 'put ''fHwoREs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksREsuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLG4pLG49REsudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/QUdlKChuPW4ubWF0cml4KS5hLG4uYixuLmMsbi5k''@;'; put 'put ''LG4uZSxuLmYpOnU0ZX0sIiwgIiwiKSIsIikiKTtmdW5jdGlvbiBkMG4obixlKXt2YXIgdCxyO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPVg2KHRoaXMsbiksbz1pLnR3ZWVuO2lmKG8hPT10KWZvcih2YXIgYT0wLGw9KHI9dD1vKS5sZW5ndGg7YTxsOysrYSlpZihyW2FdLm5hbWU9PT1lKXso''@;'; put 'put ''cj1yLnNsaWNlKCkpLnNwbGljZShhLDEpO2JyZWFrfWkudHdlZW49cn19ZnVuY3Rpb24gaDBuKG4sZSx0KXt2YXIgcixpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1YNih0aGlzLG4pLGE9by50d2VlbjtpZihhIT09cil7''@;'; put 'put ''aT0ocj1hKS5zbGljZSgpO2Zvcih2YXIgbD17bmFtZTplLHZhbHVlOnR9LHU9MCxnPWkubGVuZ3RoO3U8ZzsrK3UpaWYoaVt1XS5uYW1lPT09ZSl7aVt1XT1sO2JyZWFrfXU9PT1nJiZpLnB1c2gobCl9by50d2Vlbj1pfX1mdW5jdGlvbiBkNGUobixlLHQpe3ZhciByPW4uX2lkO3JldHVybiBu''@;'; put 'put ''LmVhY2goZnVuY3Rpb24oKXt2YXIgaT1YNih0aGlzLHIpOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW2VdPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIFE0KGkscikudmFsdWVbZV19fWZ1bmN0aW9uIGg0ZShuLGUsdCl7bi5wcm90b3R5cGU9ZS5wcm90b3R5''@;'; put 'put ''cGU9dCx0LmNvbnN0cnVjdG9yPW59ZnVuY3Rpb24gSUdlKG4sZSl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdO3JldHVybiB0fWZ1bmN0aW9uIEVQKCl7fXZhciBMSz0xLy43LHdBPSJcXHMqKFsrLV0/XFxkKylcXHMqIixUUD0iXFxz''@;'; put 'put ''KihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsSjY9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixwMG49L14jKFswLTlhLWZdezMsOH0pJC8sZzBuPW5ldyBSZWdFeHAoYF5yZ2JcXCgke3dBfSwke3dBfSwk''@;'; put 'put ''e3dBfVxcKSRgKSxtMG49bmV3IFJlZ0V4cChgXnJnYlxcKCR7SjZ9LCR7SjZ9LCR7SjZ9XFwpJGApLHYwbj1uZXcgUmVnRXhwKGBecmdiYVxcKCR7d0F9LCR7d0F9LCR7d0F9LCR7VFB9XFwpJGApLF8wbj1uZXcgUmVnRXhwKGBecmdiYVxcKCR7SjZ9LCR7SjZ9LCR7SjZ9LCR7VFB9XFwpJGAp''@;'; put 'put ''LHkwbj1uZXcgUmVnRXhwKGBeaHNsXFwoJHtUUH0sJHtKNn0sJHtKNn1cXCkkYCksYjBuPW5ldyBSZWdFeHAoYF5oc2xhXFwoJHtUUH0sJHtKNn0sJHtKNn0sJHtUUH1cXCkkYCksREdlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1h''@;'; put 'put ''cmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYy''@;'; put 'put ''NjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRl''@;'; put 'put ''bnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAw''@;'; put 'put ''MTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1Mzks''@;'; put 'put ''ZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxn''@;'; put 'put ''YWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAs''@;'; put 'put ''aW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxs''@;'; put 'put ''aWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIs''@;'; put 'put ''bGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxp''@;'; put 'put ''bmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1''@;'; put 'put ''ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFq''@;'; put 'put ''b3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4''@;'; put 'put ''MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixy''@;'; put 'put ''ZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2ll''@;'; put 'put ''bm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVh''@;'; put 'put ''bDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1''@;'; put 'put ''bmN0aW9uIExHZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIE9HZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIFlDKG4pe3ZhciBlLHQ7cmV0dXJuIG49KG4rIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPXAwbi5leGVjKG4pKT8o''@;'; put 'put ''dD1lWzFdLmxlbmd0aCxlPXBhcnNlSW50KGVbMV0sMTYpLDY9PT10P05HZShlKTozPT09dD9uZXcgaXAoZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOjg9PT10P09LKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT10''@;'; put 'put ''P09LKGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoKDE1JmUpPDw0fDE1JmUpLzI1NSk6bnVsbCk6KGU9ZzBuLmV4ZWMobikpP25ldyBpcChlWzFdLGVbMl0sZVszXSwxKTooZT1tMG4uZXhlYyhuKSk/bmV3IGlwKDI1NSplWzFdLzEwMCwyNTUqZVsy''@;'; put 'put ''XS8xMDAsMjU1KmVbM10vMTAwLDEpOihlPXYwbi5leGVjKG4pKT9PSyhlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1fMG4uZXhlYyhuKSk/T0soMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9eTBuLmV4ZWMobikpP0hHZShlWzFdLGVbMl0vMTAwLGVbM10v''@;'; put 'put ''MTAwLDEpOihlPWIwbi5leGVjKG4pKT9IR2UoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTpER2UuaGFzT3duUHJvcGVydHkobik/TkdlKERHZVtuXSk6InRyYW5zcGFyZW50Ij09PW4/bmV3IGlwKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gTkdlKG4pe3JldHVybiBuZXcgaXAo''@;'; put 'put ''bj4+MTYmMjU1LG4+PjgmMjU1LDI1NSZuLDEpfWZ1bmN0aW9uIE9LKG4sZSx0LHIpe3JldHVybiByPD0wJiYobj1lPXQ9TmFOKSxuZXcgaXAobixlLHQscil9ZnVuY3Rpb24gTksobixlLHQscil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uIFMwbihuKXtyZXR1cm4gbiBp''@;'; put 'put ''bnN0YW5jZW9mIEVQfHwobj1ZQyhuKSksbj9uZXcgaXAoKG49bi5yZ2IoKSkucixuLmcsbi5iLG4ub3BhY2l0eSk6bmV3IGlwfShuKTpuZXcgaXAobixlLHQscj8/MSl9ZnVuY3Rpb24gaXAobixlLHQscil7dGhpcy5yPStuLHRoaXMuZz0rZSx0aGlzLmI9K3QsdGhpcy5vcGFjaXR5PStyfWZ1''@;'; put 'put ''bmN0aW9uIEZHZSgpe3JldHVybmAjJHtHQyh0aGlzLnIpfSR7R0ModGhpcy5nKX0ke0dDKHRoaXMuYil9YH1mdW5jdGlvbiBQR2UoKXtjb25zdCBuPUZLKHRoaXMub3BhY2l0eSk7cmV0dXJuYCR7MT09PW4/InJnYigiOiJyZ2JhKCJ9JHtaQyh0aGlzLnIpfSwgJHtaQyh0aGlzLmcpfSwgJHta''@;'; put 'put ''Qyh0aGlzLmIpfSR7MT09PW4/IikiOmAsICR7bn0pYH1gfWZ1bmN0aW9uIEZLKG4pe3JldHVybiBpc05hTihuKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxuKSl9ZnVuY3Rpb24gWkMobil7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQobil8fDApKX1mdW5jdGlv''@;'; put 'put ''biBHQyhuKXtyZXR1cm4oKG49WkMobikpPDE2PyIwIjoiIikrbi50b1N0cmluZygxNil9ZnVuY3Rpb24gSEdlKG4sZSx0LHIpe3JldHVybiByPD0wP249ZT10PU5hTjp0PD0wfHx0Pj0xP249ZT1OYU46ZTw9MCYmKG49TmFOKSxuZXcgSjQobixlLHQscil9ZnVuY3Rpb24gVkdlKG4pe2lmKG4g''@;'; put 'put ''aW5zdGFuY2VvZiBKNClyZXR1cm4gbmV3IEo0KG4uaCxuLnMsbi5sLG4ub3BhY2l0eSk7aWYobiBpbnN0YW5jZW9mIEVQfHwobj1ZQyhuKSksIW4pcmV0dXJuIG5ldyBKNDtpZihuIGluc3RhbmNlb2YgSjQpcmV0dXJuIG47dmFyIGU9KG49bi5yZ2IoKSkuci8yNTUsdD1uLmcvMjU1LHI9bi5i''@;'; put 'put ''LzI1NSxpPU1hdGgubWluKGUsdCxyKSxvPU1hdGgubWF4KGUsdCxyKSxhPU5hTixsPW8taSx1PShvK2kpLzI7cmV0dXJuIGw/KGE9ZT09PW8/KHQtcikvbCs2Kih0PHIpOnQ9PT1vPyhyLWUpL2wrMjooZS10KS9sKzQsbC89dTwuNT9vK2k6Mi1vLWksYSo9NjApOmw9dT4wJiZ1PDE/MDphLG5l''@;'; put 'put ''dyBKNChhLGwsdSxuLm9wYWNpdHkpfWZ1bmN0aW9uIEo0KG4sZSx0LHIpe3RoaXMuaD0rbix0aGlzLnM9K2UsdGhpcy5sPSt0LHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBCR2Uobil7cmV0dXJuKG49KG58fDApJTM2MCk8MD9uKzM2MDpufWZ1bmN0aW9uIFBLKG4pe3JldHVybiBNYXRoLm1h''@;'; put 'put ''eCgwLE1hdGgubWluKDEsbnx8MCkpfWZ1bmN0aW9uIGY0ZShuLGUsdCl7cmV0dXJuIDI1NSoobjw2MD9lKyh0LWUpKm4vNjA6bjwxODA/dDpuPDI0MD9lKyh0LWUpKigyNDAtbikvNjA6ZSl9ZnVuY3Rpb24gakdlKG4sZSx0LHIsaSl7dmFyIG89bipuLGE9bypuO3JldHVybigoMS0zKm4rMypv''@;'; put 'put ''LWEpKmUrKDQtNipvKzMqYSkqdCsoMSszKm4rMypvLTMqYSkqcithKmkpLzZ9aDRlKEVQLFlDLHtjb3B5KG4pe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsbil9LGRpc3BsYXlhYmxlKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4''@;'; put 'put ''OkxHZSxmb3JtYXRIZXg6TEdlLGZvcm1hdEhleDg6ZnVuY3Rpb24gdzBuKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4OCgpfSxmb3JtYXRIc2w6ZnVuY3Rpb24gQzBuKCl7cmV0dXJuIFZHZSh0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOk9HZSx0b1N0cmluZzpPR2V9KSxoNGUo''@;'; put 'put ''aXAsTkssSUdlKEVQLHticmlnaHRlcihuKXtyZXR1cm4gbj1udWxsPT1uP0xLOk1hdGgucG93KExLLG4pLG5ldyBpcCh0aGlzLnIqbix0aGlzLmcqbix0aGlzLmIqbix0aGlzLm9wYWNpdHkpfSxkYXJrZXIobil7cmV0dXJuIG49bnVsbD09bj8uNzpNYXRoLnBvdyguNyxuKSxuZXcgaXAodGhp''@;'; put 'put ''cy5yKm4sdGhpcy5nKm4sdGhpcy5iKm4sdGhpcy5vcGFjaXR5KX0scmdiKCl7cmV0dXJuIHRoaXN9LGNsYW1wKCl7cmV0dXJuIG5ldyBpcChaQyh0aGlzLnIpLFpDKHRoaXMuZyksWkModGhpcy5iKSxGSyh0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4tLjU8PXRoaXMuciYm''@;'; put 'put ''dGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OkZHZSxmb3JtYXRIZXg6RkdlLGZvcm1hdEhleDg6ZnVuY3Rpb24gRTBuKCl7cmV0dXJuYCMke0dDKHRo''@;'; put 'put ''aXMucil9JHtHQyh0aGlzLmcpfSR7R0ModGhpcy5iKX0ke0dDKDI1NSooaXNOYU4odGhpcy5vcGFjaXR5KT8xOnRoaXMub3BhY2l0eSkpfWB9LGZvcm1hdFJnYjpQR2UsdG9TdHJpbmc6UEdlfSkpLGg0ZShKNCxmdW5jdGlvbiBNMG4obixlLHQscil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoP1ZHZShuKTpuZXcgSjQobixlLHQscj8/MSl9LElHZShFUCx7YnJpZ2h0ZXIobil7cmV0dXJuIG49bnVsbD09bj9MSzpNYXRoLnBvdyhMSyxuKSxuZXcgSjQodGhpcy5oLHRoaXMucyx0aGlzLmwqbix0aGlzLm9wYWNpdHkpfSxkYXJrZXIobil7cmV0dXJuIG49bnVsbD09bj8uNzpNYXRo''@;'; put 'put ''LnBvdyguNyxuKSxuZXcgSjQodGhpcy5oLHRoaXMucyx0aGlzLmwqbix0aGlzLm9wYWNpdHkpfSxyZ2IoKXt2YXIgbj10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4obil8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsdD10aGlzLmwscj10Kyh0PC41P3Q6MS10KSplLGk9Mip0LXI7''@;'; put 'put ''cmV0dXJuIG5ldyBpcChmNGUobj49MjQwP24tMjQwOm4rMTIwLGksciksZjRlKG4saSxyKSxmNGUobjwxMjA/bisyNDA6bi0xMjAsaSxyKSx0aGlzLm9wYWNpdHkpfSxjbGFtcCgpe3JldHVybiBuZXcgSjQoQkdlKHRoaXMuaCksUEsodGhpcy5zKSxQSyh0aGlzLmwpLEZLKHRoaXMub3BhY2l0''@;'; put 'put ''eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsKCl7Y29uc3Qgbj1GSyh0aGlzLm9wYWNpdHkpO3JldHVybmAk''@;'; put 'put ''ezE9PT1uPyJoc2woIjoiaHNsYSgifSR7QkdlKHRoaXMuaCl9LCAkezEwMCpQSyh0aGlzLnMpfSUsICR7MTAwKlBLKHRoaXMubCl9JSR7MT09PW4/IikiOmAsICR7bn0pYH1gfX0pKTtjb25zdCBwNGU9bj0+KCk9Pm47ZnVuY3Rpb24gekdlKG4sZSl7dmFyIHQ9ZS1uO3JldHVybiB0P2Z1bmN0''@;'; put 'put ''aW9uIFVHZShuLGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbit0KmV9fShuLHQpOnA0ZShpc05hTihuKT9lOm4pfWNvbnN0IEhLPWZ1bmN0aW9uIG4oZSl7dmFyIHQ9ZnVuY3Rpb24gUjBuKG4pe3JldHVybiAxPT0obj0rbik/ekdlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQtZT9mdW5j''@;'; put 'put ''dGlvbiBrMG4obixlLHQpe3JldHVybiBuPU1hdGgucG93KG4sdCksZT1NYXRoLnBvdyhlLHQpLW4sdD0xL3QsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucG93KG4rciplLHQpfX0oZSx0LG4pOnA0ZShpc05hTihlKT90OmUpfX0oZSk7ZnVuY3Rpb24gcihpLG8pe3ZhciBhPXQoKGk9TksoaSkp''@;'; put 'put ''LnIsKG89TksobykpLnIpLGw9dChpLmcsby5nKSx1PXQoaS5iLG8uYiksZz16R2UoaS5vcGFjaXR5LG8ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKEUpe3JldHVybiBpLnI9YShFKSxpLmc9bChFKSxpLmI9dShFKSxpLm9wYWNpdHk9ZyhFKSxpKyIifX1yZXR1cm4gci5nYW1tYT1uLHJ9KDEp''@;'; put 'put ''O2Z1bmN0aW9uIFdHZShuKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGEsbCx0PWUubGVuZ3RoLHI9bmV3IEFycmF5KHQpLGk9bmV3IEFycmF5KHQpLG89bmV3IEFycmF5KHQpO2ZvcihhPTA7YTx0OysrYSlsPU5LKGVbYV0pLHJbYV09bC5yfHwwLGlbYV09bC5nfHwwLG9bYV09bC5ifHwwO3Jl''@;'; put 'put ''dHVybiByPW4ociksaT1uKGkpLG89bihvKSxsLm9wYWNpdHk9MSxmdW5jdGlvbih1KXtyZXR1cm4gbC5yPXIodSksbC5nPWkodSksbC5iPW8odSksbCsiIn19fVdHZShmdW5jdGlvbiBUMG4obil7dmFyIGU9bi5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dDw9MD90PTA6dD49''@;'; put 'put ''MT8odD0xLGUtMSk6TWF0aC5mbG9vcih0KmUpLGk9bltyXSxvPW5bcisxXTtyZXR1cm4gakdlKCh0LXIvZSkqZSxyPjA/bltyLTFdOjIqaS1vLGksbyxyPGUtMT9uW3IrMl06MipvLWkpfX0pLFdHZShmdW5jdGlvbiB4MG4obil7dmFyIGU9bi5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHQpe3Zh''@;'; put 'put ''ciByPU1hdGguZmxvb3IoKCh0JT0xKTwwPysrdDp0KSplKTtyZXR1cm4gakdlKCh0LXIvZSkqZSxuWyhyK2UtMSklZV0sbltyJWVdLG5bKHIrMSklZV0sblsocisyKSVlXSl9fSk7dmFyIGc0ZT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csbTRlPW5ldyBS''@;'; put 'put ''ZWdFeHAoZzRlLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIFlHZShuLGUpe3ZhciByLGksbyx0PWc0ZS5sYXN0SW5kZXg9bTRlLmxhc3RJbmRleD0wLGE9LTEsbD1bXSx1PVtdO2ZvcihuKz0iIixlKz0iIjsocj1nNGUuZXhlYyhuKSkmJihpPW00ZS5leGVjKGUpKTspKG89aS5pbmRleCk+dCYmKG89''@;'; put 'put ''ZS5zbGljZSh0LG8pLGxbYV0/bFthXSs9bzpsWysrYV09byksKHI9clswXSk9PT0oaT1pWzBdKT9sW2FdP2xbYV0rPWk6bFsrK2FdPWk6KGxbKythXT1udWxsLHUucHVzaCh7aTphLHg6UTYocixpKX0pKSx0PW00ZS5sYXN0SW5kZXg7cmV0dXJuIHQ8ZS5sZW5ndGgmJihvPWUuc2xpY2UodCks''@;'; put 'put ''bFthXT9sW2FdKz1vOmxbKythXT1vKSxsLmxlbmd0aDwyP3VbMF0/ZnVuY3Rpb24gRDBuKG4pe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbihlKSsiIn19KHVbMF0ueCk6ZnVuY3Rpb24gSTBuKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBufX0oZSk6KGU9dS5sZW5ndGgsZnVuY3Rp''@;'; put 'put ''b24oZyl7Zm9yKHZhciBPLEU9MDtFPGU7KytFKWxbKE89dVtFXSkuaV09Ty54KGcpO3JldHVybiBsLmpvaW4oIiIpfSl9ZnVuY3Rpb24gWkdlKG4sZSl7dmFyIHQ7cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgZT9RNjplIGluc3RhbmNlb2YgWUM/SEs6KHQ9WUMoZSkpPyhlPXQsSEspOllHZSko''@;'; put 'put ''bixlKX1mdW5jdGlvbiBMMG4obil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9fWZ1bmN0aW9uIE8wbihuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCl9fWZ1bmN0aW9uIE4wbihuLGUsdCl7dmFyIHIs''@;'; put 'put ''byxpPXQrIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRBdHRyaWJ1dGUobik7cmV0dXJuIGE9PT1pP251bGw6YT09PXI/bzpvPWUocj1hLHQpfX1mdW5jdGlvbiBGMG4obixlLHQpe3ZhciByLG8saT10KyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmli''@;'; put 'put ''dXRlTlMobi5zcGFjZSxuLmxvY2FsKTtyZXR1cm4gYT09PWk/bnVsbDphPT09cj9vOm89ZShyPWEsdCl9fWZ1bmN0aW9uIFAwbihuLGUsdCl7dmFyIHIsaSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhLHUsbD10KHRoaXMpO3JldHVybiBudWxsPT1sP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1''@;'; put 'put ''dGUobik6KGE9dGhpcy5nZXRBdHRyaWJ1dGUobikpPT09KHU9bCsiIik/bnVsbDphPT09ciYmdT09PWk/bzooaT11LG89ZShyPWEsbCkpfX1mdW5jdGlvbiBIMG4obixlLHQpe3ZhciByLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSx1LGw9dCh0aGlzKTtyZXR1cm4gbnVsbD09bD92b2lk''@;'; put 'put ''IHRoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCkpPT09KHU9bCsiIik/bnVsbDphPT09ciYmdT09PWk/bzooaT11LG89ZShyPWEsbCkpfX1mdW5jdGlvbiBVMG4obixlKXt2YXIgdCxyO2Z1bmN0aW9u''@;'; put 'put ''IGkoKXt2YXIgbz1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PXImJih0PShyPW8pJiZmdW5jdGlvbiBqMG4obixlKXtyZXR1cm4gZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwsZS5jYWxsKHRoaXMsdCkpfX0obixvKSksdH1yZXR1cm4g''@;'; put 'put ''aS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIHowbihuLGUpe3ZhciB0LHI7ZnVuY3Rpb24gaSgpe3ZhciBvPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09ciYmKHQ9KHI9bykmJmZ1bmN0aW9uIEIwbihuLGUpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZShuLGUu''@;'; put 'put ''Y2FsbCh0aGlzLHQpKX19KG4sbykpLHR9cmV0dXJuIGkuX3ZhbHVlPWUsaX1mdW5jdGlvbiBZMG4obixlKXtyZXR1cm4gZnVuY3Rpb24oKXtjNGUodGhpcyxuKS5kZWxheT0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFowbihuLGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7''@;'; put 'put ''YzRlKHRoaXMsbikuZGVsYXk9ZX19ZnVuY3Rpb24gJDBuKG4sZSl7cmV0dXJuIGZ1bmN0aW9uKCl7WDYodGhpcyxuKS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHEwbihuLGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7WDYodGhpcyxuKS5kdXJhdGlvbj1l''@;'; put 'put ''fX12YXIgdTJuPXpDLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBHR2Uobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX19dmFyIEEybj0wO2Z1bmN0aW9uIGU4KG4sZSx0LHIpe3RoaXMuX2dyb3Vwcz1uLHRoaXMuX3BhcmVudHM9ZSx0aGlz''@;'; put 'put ''Ll9uYW1lPXQsdGhpcy5faWQ9cn1mdW5jdGlvbiB2NGUobil7cmV0dXJuIHpDKCkudHJhbnNpdGlvbihuKX1mdW5jdGlvbiAkR2UoKXtyZXR1cm4rK0Eybn12YXIgZjk9ekMucHJvdG90eXBlO2U4LnByb3RvdHlwZT12NGUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjplOCxzZWxlY3Q6ZnVuY3Rp''@;'; put 'put ''b24gbDJuKG4pe3ZhciBlPXRoaXMuX25hbWUsdD10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49UW1lKG4pKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBFLE8sbD1yW2FdLHU9bC5sZW5ndGgsZz1v''@;'; put 'put ''W2FdPW5ldyBBcnJheSh1KSxaPTA7Wjx1OysrWikoRT1sW1pdKSYmKE89bi5jYWxsKEUsRS5fX2RhdGFfXyxaLGwpKSYmKCJfX2RhdGFfXyJpbiBFJiYoTy5fX2RhdGFfXz1FLl9fZGF0YV9fKSxnW1pdPU8sUksoZ1taXSxlLHQsWixnLFE0KEUsdCkpKTtyZXR1cm4gbmV3IGU4KG8sdGhpcy5f''@;'; put 'put ''cGFyZW50cyxlLHQpfSxzZWxlY3RBbGw6ZnVuY3Rpb24gYzJuKG4pe3ZhciBlPXRoaXMuX25hbWUsdD10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49YUdlKG4pKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz1bXSxhPVtdLGw9MDtsPGk7KytsKWZvcih2YXIg''@;'; put 'put ''RSx1PXJbbF0sZz11Lmxlbmd0aCxPPTA7TzxnOysrTylpZihFPXVbT10pe2Zvcih2YXIgZWUsWj1uLmNhbGwoRSxFLl9fZGF0YV9fLE8sdSksdmU9UTQoRSx0KSxNZT0wLEhlPVoubGVuZ3RoO01lPEhlOysrTWUpKGVlPVpbTWVdKSYmUksoZWUsZSx0LE1lLFosdmUpO28ucHVzaChaKSxhLnB1''@;'; put 'put ''c2goRSl9cmV0dXJuIG5ldyBlOChvLGEsZSx0KX0sc2VsZWN0Q2hpbGQ6Zjkuc2VsZWN0Q2hpbGQsc2VsZWN0Q2hpbGRyZW46Zjkuc2VsZWN0Q2hpbGRyZW4sZmlsdGVyOmZ1bmN0aW9uIHQybihuKXsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49c0dlKG4pKTtmb3IodmFyIGU9dGhpcy5fZ3Jv''@;'; put 'put ''dXBzLHQ9ZS5sZW5ndGgscj1uZXcgQXJyYXkodCksaT0wO2k8dDsrK2kpZm9yKHZhciB1LG89ZVtpXSxhPW8ubGVuZ3RoLGw9cltpXT1bXSxnPTA7ZzxhOysrZykodT1vW2ddKSYmbi5jYWxsKHUsdS5fX2RhdGFfXyxnLG8pJiZsLnB1c2godSk7cmV0dXJuIG5ldyBlOChyLHRoaXMuX3BhcmVu''@;'; put 'put ''dHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uIG4ybihuKXtpZihuLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9bi5fZ3JvdXBzLHI9ZS5sZW5ndGgsbz1NYXRoLm1pbihyLHQubGVuZ3RoKSxhPW5ldyBBcnJheShy''@;'; put 'put ''KSxsPTA7bDxvOysrbClmb3IodmFyIFosdT1lW2xdLGc9dFtsXSxFPXUubGVuZ3RoLE89YVtsXT1uZXcgQXJyYXkoRSksZWU9MDtlZTxFOysrZWUpKFo9dVtlZV18fGdbZWVdKSYmKE9bZWVdPVopO2Zvcig7bDxyOysrbClhW2xdPWVbbF07cmV0dXJuIG5ldyBlOChhLHRoaXMuX3BhcmVudHMs''@;'; put 'put ''dGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbiBkMm4oKXtyZXR1cm4gbmV3IHUybih0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24gVDJuKCl7Zm9yKHZhciBuPXRoaXMuX25hbWUsZT10aGlzLl9pZCx0PSRHZSgpLHI9dGhpcy5f''@;'; put 'put ''Z3JvdXBzLGk9ci5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciB1LGE9cltvXSxsPWEubGVuZ3RoLGc9MDtnPGw7KytnKWlmKHU9YVtnXSl7dmFyIEU9UTQodSxlKTtSSyh1LG4sdCxnLGEse3RpbWU6RS50aW1lK0UuZGVsYXkrRS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOkUuZHVyYXRp''@;'; put 'put ''b24sZWFzZTpFLmVhc2V9KX1yZXR1cm4gbmV3IGU4KHIsdGhpcy5fcGFyZW50cyxuLHQpfSxjYWxsOmY5LmNhbGwsbm9kZXM6Zjkubm9kZXMsbm9kZTpmOS5ub2RlLHNpemU6Zjkuc2l6ZSxlbXB0eTpmOS5lbXB0eSxlYWNoOmY5LmVhY2gsb246ZnVuY3Rpb24gbzJuKG4sZSl7dmFyIHQ9dGhp''@;'; put 'put ''cy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9RNCh0aGlzLm5vZGUoKSx0KS5vbi5vbihuKTp0aGlzLmVhY2goZnVuY3Rpb24gaTJuKG4sZSx0KXt2YXIgcixpLG89ZnVuY3Rpb24gcjJuKG4pe3JldHVybihuKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24o''@;'; put 'put ''ZSl7dmFyIHQ9ZS5pbmRleE9mKCIuIik7cmV0dXJuIHQ+PTAmJihlPWUuc2xpY2UoMCx0KSksIWV8fCJzdGFydCI9PT1lfSl9KGUpP2M0ZTpYNjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsbiksbD1hLm9uO2whPT1yJiYoaT0ocj1sKS5jb3B5KCkpLm9uKGUsdCksYS5vbj1pfX0o''@;'; put 'put ''dCxuLGUpKX0sYXR0cjpmdW5jdGlvbiBWMG4obixlKXt2YXIgdD13SyhuKSxyPSJ0cmFuc2Zvcm0iPT09dD9SR2U6WkdlO3JldHVybiB0aGlzLmF0dHJUd2VlbihuLCJmdW5jdGlvbiI9PXR5cGVvZiBlPyh0LmxvY2FsP0gwbjpQMG4pKHQscixkNGUodGhpcywiYXR0ci4iK24sZSkpOm51bGw9''@;'; put 'put ''PWU/KHQubG9jYWw/TzBuOkwwbikodCk6KHQubG9jYWw/RjBuOk4wbikodCxyLGUpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uIFcwbihuLGUpe3ZhciB0PSJhdHRyLiIrbjtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHQ9dGhpcy50d2Vlbih0KSkmJnQuX3ZhbHVlO2lmKG51bGw9PWUpcmV0''@;'; put 'put ''dXJuIHRoaXMudHdlZW4odCxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7dmFyIHI9d0sobik7cmV0dXJuIHRoaXMudHdlZW4odCwoci5sb2NhbD9VMG46ejBuKShyLGUpKX0sc3R5bGU6ZnVuY3Rpb24gbTJuKG4sZSx0KXt2YXIgcj0idHJhbnNmb3JtIj09''@;'; put 'put ''KG4rPSIiKT91MG46WkdlO3JldHVybiBudWxsPT1lP3RoaXMuc3R5bGVUd2VlbihuLGZ1bmN0aW9uIGgybihuLGUpe3ZhciB0LHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz15QSh0aGlzLG4pLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobikseUEodGhpcyxuKSk7cmV0dXJuIG89''@;'; put 'put ''PT1hP251bGw6bz09PXQmJmE9PT1yP2k6aT1lKHQ9byxyPWEpfX0obixyKSkub24oImVuZC5zdHlsZS4iK24sR0dlKG4pKToiZnVuY3Rpb24iPT10eXBlb2YgZT90aGlzLnN0eWxlVHdlZW4obixmdW5jdGlvbiBwMm4obixlLHQpe3ZhciByLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT15''@;'; put 'put ''QSh0aGlzLG4pLGw9dCh0aGlzKSx1PWwrIiI7cmV0dXJuIG51bGw9PWwmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pLHU9bD15QSh0aGlzLG4pKSxhPT09dT9udWxsOmE9PT1yJiZ1PT09aT9vOihpPXUsbz1lKHI9YSxsKSl9fShuLHIsZDRlKHRoaXMsInN0eWxlLiIrbixlKSkpLmVh''@;'; put 'put ''Y2goZnVuY3Rpb24gZzJuKG4sZSl7dmFyIHQscixpLGwsbz0ic3R5bGUuIitlLGE9ImVuZC4iK287cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHU9WDYodGhpcyxuKSxnPXUub24sRT1udWxsPT11LnZhbHVlW29dP2x8fChsPUdHZShlKSk6dm9pZCAwOyhnIT09dHx8aSE9PUUpJiYocj0odD1nKS5j''@;'; put 'put ''b3B5KCkpLm9uKGEsaT1FKSx1Lm9uPXJ9fSh0aGlzLl9pZCxuKSk6dGhpcy5zdHlsZVR3ZWVuKG4sZnVuY3Rpb24gZjJuKG4sZSx0KXt2YXIgcixvLGk9dCsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT15QSh0aGlzLG4pO3JldHVybiBhPT09aT9udWxsOmE9PT1yP286bz1lKHI9YSx0KX19''@;'; put 'put ''KG4scixlKSx0KS5vbigiZW5kLnN0eWxlLiIrbixudWxsKX0sc3R5bGVUd2VlbjpmdW5jdGlvbiB5Mm4obixlLHQpe3ZhciByPSJzdHlsZS4iKyhuKz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0''@;'; put 'put ''aGlzLnR3ZWVuKHIsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHIsZnVuY3Rpb24gXzJuKG4sZSx0KXt2YXIgcixpO2Z1bmN0aW9uIG8oKXt2YXIgYT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihy''@;'; put 'put ''PShpPWEpJiZmdW5jdGlvbiB2Mm4obixlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4sZS5jYWxsKHRoaXMsciksdCl9fShuLGEsdCkpLHJ9cmV0dXJuIG8uX3ZhbHVlPWUsb30obixlLHQ/PyIiKSl9LHRleHQ6ZnVuY3Rpb24gQzJuKG4pe3JldHVybiB0''@;'; put 'put ''aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbiB3Mm4obil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bih0aGlzKTt0aGlzLnRleHRDb250ZW50PWU/PyIifX0oZDRlKHRoaXMsInRleHQiLG4pKTpmdW5jdGlvbiBiMm4obil7cmV0dXJuIGZ1bmN0aW9uKCl7''@;'; put 'put ''dGhpcy50ZXh0Q29udGVudD1ufX0obnVsbD09bj8iIjpuKyIiKSl9LHRleHRUd2VlbjpmdW5jdGlvbiBNMm4obil7dmFyIGU9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4oZT10aGlzLnR3ZWVuKGUpKSYmZS5fdmFsdWU7aWYobnVsbD09bilyZXR1cm4gdGhpcy50d2Vlbihl''@;'; put 'put ''LG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihlLGZ1bmN0aW9uIEUybihuKXt2YXIgZSx0O2Z1bmN0aW9uIHIoKXt2YXIgaT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXQmJihlPSh0PWkpJiZmdW5jdGlv''@;'; put 'put ''biBTMm4obil7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMudGV4dENvbnRlbnQ9bi5jYWxsKHRoaXMsZSl9fShpKSksZX1yZXR1cm4gci5fdmFsdWU9bixyfShuKSl9LHJlbW92ZTpmdW5jdGlvbiBzMm4oKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsZnVuY3Rpb24gYTJuKG4pe3JldHVy''@;'; put 'put ''biBmdW5jdGlvbigpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIHQgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK3QhPT1uKXJldHVybjtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfX0odGhpcy5faWQpKX0sdHdlZW46ZnVuY3Rpb24gZjBuKG4sZSl7dmFyIHQ9dGhpcy5faWQ7aWYobis9''@;'; put 'put ''IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGEscj1RNCh0aGlzLm5vZGUoKSx0KS50d2VlbixpPTAsbz1yLmxlbmd0aDtpPG87KytpKWlmKChhPXJbaV0pLm5hbWU9PT1uKXJldHVybiBhLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/ZDBuOmgwbiko''@;'; put 'put ''dCxuLGUpKX0sZGVsYXk6ZnVuY3Rpb24gRzBuKG4pe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/WTBuOlowbikoZSxuKSk6UTQodGhpcy5ub2RlKCksZSkuZGVsYXl9LGR1cmF0aW9uOmZ1bmN0aW9uIEswbihu''@;'; put 'put ''KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBuPyQwbjpxMG4pKGUsbikpOlE0KHRoaXMubm9kZSgpLGUpLmR1cmF0aW9ufSxlYXNlOmZ1bmN0aW9uIFEwbihuKXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD90aGlzLmVhY2goZnVuY3Rpb24gWDBuKG4sZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe1g2KHRoaXMsbikuZWFzZT1lfX0oZSxuKSk6UTQodGhpcy5ub2RlKCksZSkuZWFzZX0sZWFzZVZhcnlpbmc6ZnVuY3Rp''@;'; put 'put ''b24gZTJuKG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uIEowbihuLGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5l''@;'; put 'put ''dyBFcnJvcjtYNih0aGlzLG4pLmVhc2U9dH19KHRoaXMuX2lkLG4pKX0sZW5kOmZ1bmN0aW9uIHgybigpe3ZhciBuLGUsdD10aGlzLHI9dC5faWQsaT10LnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obyxhKXt2YXIgbD17dmFsdWU6YX0sdT17dmFsdWU6ZnVuY3Rpb24oKXsw''@;'; put 'put ''PT09LS1pJiZvKCl9fTt0LmVhY2goZnVuY3Rpb24oKXt2YXIgZz1YNih0aGlzLHIpLEU9Zy5vbjtFIT09biYmKChlPShuPUUpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChsKSxlLl8uaW50ZXJydXB0LnB1c2gobCksZS5fLmVuZC5wdXNoKHUpKSxnLm9uPWV9KSwwPT09aSYmbygpfSl9LFtTeW1i''@;'; put 'put ''b2wuaXRlcmF0b3JdOmY5W1N5bWJvbC5pdGVyYXRvcl19O3ZhciBSMm49e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmZ1bmN0aW9uIGsybihuKXtyZXR1cm4oKG4qPTIpPD0xP24qbipuOihuLT0yKSpuKm4rMikvMn19O2Z1bmN0aW9uIEkybihuLGUpe2Zvcih2YXIgdDsh''@;'; put 'put ''KHQ9bi5fX3RyYW5zaXRpb24pfHwhKHQ9dFtlXSk7KWlmKCEobj1uLnBhcmVudE5vZGUpKXRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2V9IG5vdCBmb3VuZGApO3JldHVybiB0fXpDLnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24gczBuKG4pe3JldHVybiB0aGlzLmVhY2goZnVu''@;'; put 'put ''Y3Rpb24oKXtJSyh0aGlzLG4pfSl9LHpDLnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uIEQybihuKXt2YXIgZSx0O24gaW5zdGFuY2VvZiBlOD8oZT1uLl9pZCxuPW4uX25hbWUpOihlPSRHZSgpLCh0PVIybikudGltZT1pNGUoKSxuPW51bGw9PW4/bnVsbDpuKyIiKTtmb3IodmFyIHI9''@;'; put 'put ''dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciB1LGE9cltvXSxsPWEubGVuZ3RoLGc9MDtnPGw7KytnKSh1PWFbZ10pJiZSSyh1LG4sZSxnLGEsdHx8STJuKHUsZSkpO3JldHVybiBuZXcgZTgocix0aGlzLl9wYXJlbnRzLG4sZSl9O3ZhciBMMm49W251bGxdO2Nv''@;'; put 'put ''bnN0IF80ZT17Y2FwdHVyZTohMCxwYXNzaXZlOiExfTtmdW5jdGlvbiB5NGUobil7bi5wcmV2ZW50RGVmYXVsdCgpLG4uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gcUdlKG4pe3JldHVybigobj1NYXRoLmV4cChuKSkrMS9uKS8yfWNvbnN0IEIybj1mdW5jdGlvbiBuKGUs''@;'; put 'put ''dCxyKXtmdW5jdGlvbiBpKG8sYSl7dmFyIEhlLFdlLGw9b1swXSx1PW9bMV0sZz1vWzJdLFo9YVsyXSxlZT1hWzBdLWwsdmU9YVsxXS11LE1lPWVlKmVlK3ZlKnZlO2lmKE1lPDFlLTEyKVdlPU1hdGgubG9nKFovZykvZSxIZT1mdW5jdGlvbihnbil7cmV0dXJuW2wrZ24qZWUsdStnbip2ZSxn''@;'; put 'put ''Kk1hdGguZXhwKGUqZ24qV2UpXX07ZWxzZXt2YXIgYXQ9TWF0aC5zcXJ0KE1lKSxDdD0oWipaLWcqZytyKk1lKS8oMipnKnQqYXQpLEF0PShaKlotZypnLXIqTWUpLygyKloqdCphdCksS3Q9TWF0aC5sb2coTWF0aC5zcXJ0KEN0KkN0KzEpLUN0KSxxdD1NYXRoLmxvZyhNYXRoLnNxcnQoQXQq''@;'; put 'put ''QXQrMSktQXQpO1dlPShxdC1LdCkvZSxIZT1mdW5jdGlvbihnbil7dmFyIFRuPWduKldlLENuPXFHZShLdCkscXI9Zy8odCphdCkqKENuKmZ1bmN0aW9uIFYybihuKXtyZXR1cm4oKG49TWF0aC5leHAoMipuKSktMSkvKG4rMSl9KGUqVG4rS3QpLWZ1bmN0aW9uIEgybihuKXtyZXR1cm4oKG49''@;'; put 'put ''TWF0aC5leHAobikpLTEvbikvMn0oS3QpKTtyZXR1cm5bbCtxciplZSx1K3FyKnZlLGcqQ24vcUdlKGUqVG4rS3QpXX19cmV0dXJuIEhlLmR1cmF0aW9uPTFlMypXZSplL01hdGguU1FSVDIsSGV9cmV0dXJuIGkucmhvPWZ1bmN0aW9uKG8pe3ZhciBhPU1hdGgubWF4KC4wMDEsK28pLGw9YSph''@;'; put 'put ''O3JldHVybiBuKGEsbCxsKmwpfSxpfShNYXRoLlNRUlQyLDIsNCk7ZnVuY3Rpb24gJEMobixlKXtpZihuPWZ1bmN0aW9uIGoybihuKXtsZXQgZTtmb3IoO2U9bi5zb3VyY2VFdmVudDspbj1lO3JldHVybiBufShuKSx2b2lkIDA9PT1lJiYoZT1uLmN1cnJlbnRUYXJnZXQpLGUpe3ZhciB0PWUu''@;'; put 'put ''b3duZXJTVkdFbGVtZW50fHxlO2lmKHQuY3JlYXRlU1ZHUG9pbnQpe3ZhciByPXQuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gci54PW4uY2xpZW50WCxyLnk9bi5jbGllbnRZLFsocj1yLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsci55XX1pZihlLmdl''@;'; put 'put ''dEJvdW5kaW5nQ2xpZW50UmVjdCl7dmFyIGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bbi5jbGllbnRYLWkubGVmdC1lLmNsaWVudExlZnQsbi5jbGllbnRZLWkudG9wLWUuY2xpZW50VG9wXX19cmV0dXJuW24ucGFnZVgsbi5wYWdlWV19Y29uc3QgVks9bj0+KCk9Pm47ZnVu''@;'; put 'put ''Y3Rpb24gVTJuKG4se3NvdXJjZUV2ZW50OmUsdGFyZ2V0OnQsdHJhbnNmb3JtOnIsZGlzcGF0Y2g6aX0pe09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3R5cGU6e3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHNvdXJjZUV2ZW50Ont2YWx1ZTplLGVudW1lcmFi''@;'; put 'put ''bGU6ITAsY29uZmlndXJhYmxlOiEwfSx0YXJnZXQ6e3ZhbHVlOnQsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHRyYW5zZm9ybTp7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sXzp7dmFsdWU6aX19KX1mdW5jdGlvbiBwOShuLGUsdCl7dGhpcy5rPW4sdGhp''@;'; put 'put ''cy54PWUsdGhpcy55PXR9cDkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpwOSxzY2FsZTpmdW5jdGlvbihuKXtyZXR1cm4gMT09PW4/dGhpczpuZXcgcDkodGhpcy5rKm4sdGhpcy54LHRoaXMueSl9LHRyYW5zbGF0ZTpmdW5jdGlvbihuLGUpe3JldHVybiAwPT09biYwPT09ZT90aGlzOm5ldyBw''@;'; put 'put ''OSh0aGlzLmssdGhpcy54K3RoaXMuaypuLHRoaXMueSt0aGlzLmsqZSl9LGFwcGx5OmZ1bmN0aW9uKG4pe3JldHVybltuWzBdKnRoaXMuayt0aGlzLngsblsxXSp0aGlzLmsrdGhpcy55XX0sYXBwbHlYOmZ1bmN0aW9uKG4pe3JldHVybiBuKnRoaXMuayt0aGlzLnh9LGFwcGx5WTpmdW5jdGlv''@;'; put 'put ''bihuKXtyZXR1cm4gbip0aGlzLmsrdGhpcy55fSxpbnZlcnQ6ZnVuY3Rpb24obil7cmV0dXJuWyhuWzBdLXRoaXMueCkvdGhpcy5rLChuWzFdLXRoaXMueSkvdGhpcy5rXX0saW52ZXJ0WDpmdW5jdGlvbihuKXtyZXR1cm4obi10aGlzLngpL3RoaXMua30saW52ZXJ0WTpmdW5jdGlvbihuKXty''@;'; put 'put ''ZXR1cm4obi10aGlzLnkpL3RoaXMua30scmVzY2FsZVg6ZnVuY3Rpb24obil7cmV0dXJuIG4uY29weSgpLmRvbWFpbihuLnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCx0aGlzKS5tYXAobi5pbnZlcnQsbikpfSxyZXNjYWxlWTpmdW5jdGlvbihuKXtyZXR1cm4gbi5jb3B5KCkuZG9tYWluKG4u''@;'; put 'put ''cmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcChuLmludmVydCxuKSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMueCsiLCIrdGhpcy55KyIpIHNjYWxlKCIrdGhpcy5rKyIpIn19O3ZhciBCSz1uZXcgcDkoMSwwLDApO2Z1bmN0aW9uIGpLKG4p''@;'; put 'put ''e2Zvcig7IW4uX196b29tOylpZighKG49bi5wYXJlbnROb2RlKSlyZXR1cm4gQks7cmV0dXJuIG4uX196b29tfWZ1bmN0aW9uIGI0ZShuKXtuLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIHhQKG4pe24ucHJldmVudERlZmF1bHQoKSxuLnN0b3BJbW1lZGlhdGVQcm9wYWdh''@;'; put 'put ''dGlvbigpfWZ1bmN0aW9uIHoybihuKXtyZXR1cm4hKG4uY3RybEtleSYmIndoZWVsIiE9PW4udHlwZXx8bi5idXR0b24pfWZ1bmN0aW9uIFcybigpe3ZhciBuPXRoaXM7cmV0dXJuIG4gaW5zdGFuY2VvZiBTVkdFbGVtZW50PyhuPW4ub3duZXJTVkdFbGVtZW50fHxuKS5oYXNBdHRyaWJ1dGUo''@;'; put 'put ''InZpZXdCb3giKT9bWyhuPW4udmlld0JveC5iYXNlVmFsKS54LG4ueV0sW24ueCtuLndpZHRoLG4ueStuLmhlaWdodF1dOltbMCwwXSxbbi53aWR0aC5iYXNlVmFsLnZhbHVlLG4uaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTpbWzAsMF0sW24uY2xpZW50V2lkdGgsbi5jbGllbnRIZWlnaHRdXX1m''@;'; put 'put ''dW5jdGlvbiBLR2UoKXtyZXR1cm4gdGhpcy5fX3pvb218fEJLfWZ1bmN0aW9uIFkybihuKXtyZXR1cm4tbi5kZWx0YVkqKDE9PT1uLmRlbHRhTW9kZT8uMDU6bi5kZWx0YU1vZGU/MTouMDAyKSoobi5jdHJsS2V5PzEwOjEpfWZ1bmN0aW9uIFoybigpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91''@;'; put 'put ''Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBHMm4obixlLHQpe3ZhciByPW4uaW52ZXJ0WChlWzBdWzBdKS10WzBdWzBdLGk9bi5pbnZlcnRYKGVbMV1bMF0pLXRbMV1bMF0sbz1uLmludmVydFkoZVswXVsxXSktdFswXVsxXSxhPW4uaW52ZXJ0WShlWzFdWzFdKS10''@;'; put 'put ''WzFdWzFdO3JldHVybiBuLnRyYW5zbGF0ZShpPnI/KHIraSkvMjpNYXRoLm1pbigwLHIpfHxNYXRoLm1heCgwLGkpLGE+bz8obythKS8yOk1hdGgubWluKDAsbyl8fE1hdGgubWF4KDAsYSkpfWZ1bmN0aW9uIFhHZShuKXt2YXIgZT17fSx0PW4ubm9kZSgpLm5vZGVOYW1lO2UudGFnPXQsIiN0''@;'; put 'put ''ZXh0Ij09dD9lLnRleHQ9bi50ZXh0KCk6IiNjb21tZW50Ij09dCYmKGUuY29tbWVudD1uLnRleHQoKSksZS5hdHRyaWJ1dGVzPXt9O3ZhciByPW4ubm9kZSgpLmF0dHJpYnV0ZXM7aWYocilmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXTtlLmF0dHJpYnV0ZXNbby5uYW1l''@;'; put 'put ''XT1vLnZhbHVlfXZhciBFLHU9bi5ub2RlKCkudHJhbnNmb3JtO2lmKHUmJjAhPXUuYmFzZVZhbC5udW1iZXJPZkl0ZW1zKXt2YXIgZz11LmJhc2VWYWwuY29uc29saWRhdGUoKS5tYXRyaXg7ZS50cmFuc2xhdGlvbj17eDpnLmUseTpnLmZ9LGUuc2NhbGU9Zy5hfWlmKCJlbGxpcHNlIj09dCYm''@;'; put 'put ''KGUuY2VudGVyPXt4OmUuYXR0cmlidXRlcy5jeCx5OmUuYXR0cmlidXRlcy5jeX0pLCJwb2x5Z29uIj09dCl7dmFyIE89KEU9bi5hdHRyKCJwb2ludHMiKS5zcGxpdCgiICIpKS5tYXAoZnVuY3Rpb24oQ3Qpe3JldHVybiBDdC5zcGxpdCgiLCIpWzBdfSksWj1FLm1hcChmdW5jdGlvbihDdCl7''@;'; put 'put ''cmV0dXJuIEN0LnNwbGl0KCIsIilbMV19KSxlZT1NYXRoLm1pbi5hcHBseShudWxsLE8pLHZlPU1hdGgubWF4LmFwcGx5KG51bGwsTyksTWU9TWF0aC5taW4uYXBwbHkobnVsbCxaKSxIZT1NYXRoLm1heC5hcHBseShudWxsLFopO2UuYmJveD17eDplZSx5Ok1lLHdpZHRoOnZlLWVlLGhlaWdo''@;'; put 'put ''dDpIZS1NZX0sZS5jZW50ZXI9e3g6KGVlK3ZlKS8yLHk6KE1lK0hlKS8yfX0icGF0aCI9PXQmJigoRT1uLmF0dHIoImQiKS5zcGxpdCgvW0EtWiBdLykpLnNoaWZ0KCksTz1FLm1hcChmdW5jdGlvbigkbil7cmV0dXJuKyRuLnNwbGl0KCIsIilbMF19KSxaPUUubWFwKGZ1bmN0aW9uKCRuKXty''@;'; put 'put ''ZXR1cm4rJG4uc3BsaXQoIiwiKVsxXX0pLGVlPU1hdGgubWluLmFwcGx5KG51bGwsTyksdmU9TWF0aC5tYXguYXBwbHkobnVsbCxPKSxNZT1NYXRoLm1pbi5hcHBseShudWxsLFopLEhlPU1hdGgubWF4LmFwcGx5KG51bGwsWiksZS5iYm94PXt4OmVlLHk6TWUsd2lkdGg6dmUtZWUsaGVpZ2h0''@;'; put 'put ''OkhlLU1lfSxlLmNlbnRlcj17eDooZWUrdmUpLzIseTooTWUrSGUpLzJ9LGUudG90YWxMZW5ndGg9bi5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSk7cmV0dXJuInRleHQiPT10JiYoZS5jZW50ZXI9e3g6bi5hdHRyKCJ4IikseTpuLmF0dHIoInkiKX0pLCIjdGV4dCI9PXQ/ZS50ZXh0PW4udGV4''@;'; put 'put ''dCgpOiIjY29tbWVudCI9PXQmJihlLmNvbW1lbnQ9bi50ZXh0KCkpLGV9ZnVuY3Rpb24gcUMobil7dmFyIGU9WEdlKG4pO3JldHVybiBlLmNoaWxkcmVuPVtdLG40ZShuLm5vZGUoKS5jaGlsZE5vZGVzKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9cUMoQmwodGhpcykpO3IucGFyZW50PWUsZS5j''@;'; put 'put ''aGlsZHJlbi5wdXNoKHIpfSksZX1mdW5jdGlvbiB3NGUobil7cmV0dXJuIiN0ZXh0Ij09bi50YWc/ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOiIjY29tbWVudCI9PW4udGFnP2RvY3VtZW50LmNyZWF0ZUNvbW1lbnQobi5jb21tZW50KTpkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0''@;'; put 'put ''dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixuLnRhZyl9ZnVuY3Rpb24gQzRlKG4pe3ZhciBlPXc0ZShuKSx0PUJsKGUpLHI9bi5hdHRyaWJ1dGVzO2Zvcih2YXIgaSBvZiBPYmplY3Qua2V5cyhyKSl0LmF0dHIoaSxyW2ldKTtyZXR1cm4gZX1mdW5jdGlvbiBRR2UobixlKXt2YXIgdD1CbChu''@;'; put 'put ''Lm5vZGUoKS5wYXJlbnROb2RlKSxyPUM0ZShlKSxpPXQuaW5zZXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIHJ9LGZ1bmN0aW9uKCl7cmV0dXJuIG4ubm9kZSgpfSk7cmV0dXJuIG4ucmVtb3ZlKCksaX1mdW5jdGlvbiBTNGUobixlKXshZnVuY3Rpb24gcTJuKG4sZSl7bi5kYXR1bShlKSxuLmRhdGEo''@;'; put 'put ''W2VdLGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0pfShuLGUpLG40ZShuLm5vZGUoKS5jaGlsZE5vZGVzKS5lYWNoKGZ1bmN0aW9uKHIsaSl7UzRlKEJsKHRoaXMpLGUuY2hpbGRyZW5baV0pfSl9ZnVuY3Rpb24gQVAobixlPTApe3ZhciB0PUJsKHRoaXMpLGk9bi5hdHRyaWJ1dGVzLG89dC5u''@;'; put 'put ''b2RlKCkuYXR0cmlidXRlcztpZihvKWZvcih2YXIgYT0wO2E8by5sZW5ndGg7YSsrKXt2YXIgbD1vW2FdLHU9bC5uYW1lO2lmKCJ4bWxucyIhPXUuc3BsaXQoIjoiKVswXSYmbC5uYW1lc3BhY2VVUkkpe3ZhciBnPWwubmFtZXNwYWNlVVJJLnNwbGl0KCIvIik7dT1nW2cubGVuZ3RoLTFdKyI6''@;'; put 'put ''Iit1fXUgaW4gaXx8KGlbdV09bnVsbCl9Zm9yKHZhciBPIG9mIE9iamVjdC5rZXlzKGkpKXQuYXR0cihPLGlbT10pO24udGV4dCYmdC50ZXh0KG4udGV4dCksZnVuY3Rpb24gSzJuKG4sZSl7dmFyIHQ9bi5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gbi5ub2RlKCkuY2hpbGROb2Rlc30p''@;'; put 'put ''LHI9KHQ9dC5kYXRhKGZ1bmN0aW9uKGEpe3JldHVybiBhLmNoaWxkcmVufSxmdW5jdGlvbihhKXtyZXR1cm4gYS50YWcrIi0iK2V9KSkuZW50ZXIoKS5hcHBlbmQoZnVuY3Rpb24oYSl7cmV0dXJuIHc0ZShhKX0pLGk9dC5leGl0KCk7aT1pLnJlbW92ZSgpLHQ9ci5tZXJnZSh0KTt2YXIgbz17''@;'; put 'put ''fTt0LmVhY2goZnVuY3Rpb24oYSl7dmFyIGw9YS50YWc7bnVsbD09b1tsXSYmKG9bbF09MCk7dmFyIHU9b1tsXSsrO0FQLmNhbGwodGhpcyxhLHUpfSl9KHQsZSl9ZnVuY3Rpb24gSkdlKG4sZSl7dmFyIGEsdD1lP2UubGVuZ3RoOjAscj1uP01hdGgubWluKHQsbi5sZW5ndGgpOjAsaT1uZXcg''@;'; put 'put ''QXJyYXkociksbz1uZXcgQXJyYXkodCk7Zm9yKGE9MDthPHI7KythKWlbYV09VUsoblthXSxlW2FdKTtmb3IoO2E8dDsrK2Epb1thXT1lW2FdO3JldHVybiBmdW5jdGlvbihsKXtmb3IoYT0wO2E8cjsrK2Epb1thXT1pW2FdKGwpO3JldHVybiBvfX1mdW5jdGlvbiBKMm4obixlKXt2YXIgdD1u''@;'; put 'put ''ZXcgRGF0ZTtyZXR1cm4gbj0rbixlPStlLGZ1bmN0aW9uKHIpe3JldHVybiB0LnNldFRpbWUobiooMS1yKStlKnIpLHR9fWZ1bmN0aW9uIGVmbihuLGUpe3ZhciBpLHQ9e30scj17fTtmb3IoaSBpbihudWxsPT09bnx8Im9iamVjdCIhPXR5cGVvZiBuKSYmKG49e30pLChudWxsPT09ZXx8Im9i''@;'; put 'put ''amVjdCIhPXR5cGVvZiBlKSYmKGU9e30pLGUpaSBpbiBuP3RbaV09VUsobltpXSxlW2ldKTpyW2ldPWVbaV07cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpIGluIHQpcltpXT10W2ldKG8pO3JldHVybiByfX1mdW5jdGlvbiB0Zm4obixlKXtlfHwoZT1bXSk7dmFyIGksdD1uP01hdGgubWluKGUu''@;'; put 'put ''bGVuZ3RoLG4ubGVuZ3RoKTowLHI9ZS5zbGljZSgpO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaT0wO2k8dDsrK2kpcltpXT1uW2ldKigxLW8pK2VbaV0qbztyZXR1cm4gcn19ZnVuY3Rpb24gVUsobixlKXt2YXIgcix0PXR5cGVvZiBlO3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PT10P3A0''@;'; put 'put ''ZShlKTooIm51bWJlciI9PT10P1E2OiJzdHJpbmciPT09dD8ocj1ZQyhlKSk/KGU9cixISyk6WUdlOmUgaW5zdGFuY2VvZiBZQz9ISzplIGluc3RhbmNlb2YgRGF0ZT9KMm46ZnVuY3Rpb24gbmZuKG4pe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobikmJiEobiBpbnN0YW5jZW9mIERhdGFW''@;'; put 'put ''aWV3KX0oZSk/dGZuOkFycmF5LmlzQXJyYXkoZSk/SkdlOiJmdW5jdGlvbiIhPXR5cGVvZiBlLnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiBlLnRvU3RyaW5nfHxpc05hTihlKT9lZm46UTYpKG4sZSl9ZnVuY3Rpb24gZSRlKCl7dmFyIG49dGhpcyxyPUJsKHRoaXMuX3NlbGVjdGlvbi5u''@;'; put 'put ''b2RlKCkucXVlcnlTZWxlY3Rvcigic3ZnIikpO2lmKDA9PXIuc2l6ZSgpKXJldHVybiB0aGlzO3RoaXMuX3pvb21TZWxlY3Rpb249cjt2YXIgaT1mdW5jdGlvbiAkMm4oKXt2YXIgRSxPLFosbj16Mm4sZT1XMm4sdD1HMm4scj1ZMm4saT1aMm4sbz1bMCwxLzBdLGE9W1stMS8wLC0xLzBdLFsx''@;'; put 'put ''LzAsMS8wXV0sbD0yNTAsdT1CMm4sZz1yNGUoInN0YXJ0Iiwiem9vbSIsImVuZCIpLE1lPTAsSGU9MTA7ZnVuY3Rpb24gV2UoZm4pe2ZuLnByb3BlcnR5KCJfX3pvb20iLEtHZSkub24oIndoZWVsLnpvb20iLFRuLHtwYXNzaXZlOiExfSkub24oIm1vdXNlZG93bi56b29tIixDbikub24oImRi''@;'; put 'put ''bGNsaWNrLnpvb20iLHFyKS5maWx0ZXIoaSkub24oInRvdWNoc3RhcnQuem9vbSIsJG4pLm9uKCJ0b3VjaG1vdmUuem9vbSIsVHIpLm9uKCJ0b3VjaGVuZC56b29tIHRvdWNoY2FuY2VsLnpvb20iLHJpKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCww''@;'; put 'put ''KSIpfWZ1bmN0aW9uIGF0KGZuLHlyKXtyZXR1cm4oeXI9TWF0aC5tYXgob1swXSxNYXRoLm1pbihvWzFdLHlyKSkpPT09Zm4uaz9mbjpuZXcgcDkoeXIsZm4ueCxmbi55KX1mdW5jdGlvbiBDdChmbix5cixBbil7dmFyIEhyPXlyWzBdLUFuWzBdKmZuLmssdGk9eXJbMV0tQW5bMV0qZm4uazty''@;'; put 'put ''ZXR1cm4gSHI9PT1mbi54JiZ0aT09PWZuLnk/Zm46bmV3IHA5KGZuLmssSHIsdGkpfWZ1bmN0aW9uIEF0KGZuKXtyZXR1cm5bKCtmblswXVswXSsgK2ZuWzFdWzBdKS8yLCgrZm5bMF1bMV0rICtmblsxXVsxXSkvMl19ZnVuY3Rpb24gS3QoZm4seXIsQW4sSHIpe2ZuLm9uKCJzdGFydC56b29t''@;'; put 'put ''IixmdW5jdGlvbigpe3F0KHRoaXMsYXJndW1lbnRzKS5ldmVudChIcikuc3RhcnQoKX0pLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsZnVuY3Rpb24oKXtxdCh0aGlzLGFyZ3VtZW50cykuZXZlbnQoSHIpLmVuZCgpfSkudHdlZW4oInpvb20iLGZ1bmN0aW9uKCl7dmFyIHRpPXRoaXMs''@;'; put 'put ''ZnI9YXJndW1lbnRzLGVpPXF0KHRpLGZyKS5ldmVudChIciksUG89ZS5hcHBseSh0aSxmciksSG89bnVsbD09QW4/QXQoUG8pOiJmdW5jdGlvbiI9PXR5cGVvZiBBbj9Bbi5hcHBseSh0aSxmcik6QW4seGk9TWF0aC5tYXgoUG9bMV1bMF0tUG9bMF1bMF0sUG9bMV1bMV0tUG9bMF1bMV0pLFRv''@;'; put 'put ''PXRpLl9fem9vbSx3cz0iZnVuY3Rpb24iPT10eXBlb2YgeXI/eXIuYXBwbHkodGksZnIpOnlyLHRzPXUoVG8uaW52ZXJ0KEhvKS5jb25jYXQoeGkvVG8uayksd3MuaW52ZXJ0KEhvKS5jb25jYXQoeGkvd3MuaykpO3JldHVybiBmdW5jdGlvbihrYSl7aWYoMT09PWthKWthPXdzO2Vsc2V7dmFy''@;'; put 'put ''IGFvPXRzKGthKSx1dD14aS9hb1syXTtrYT1uZXcgcDkodXQsSG9bMF0tYW9bMF0qdXQsSG9bMV0tYW9bMV0qdXQpfWVpLnpvb20obnVsbCxrYSl9fSl9ZnVuY3Rpb24gcXQoZm4seXIsQW4pe3JldHVybiFBbiYmZm4uX196b29taW5nfHxuZXcgZ24oZm4seXIpfWZ1bmN0aW9uIGduKGZuLHly''@;'; put 'put ''KXt0aGlzLnRoYXQ9Zm4sdGhpcy5hcmdzPXlyLHRoaXMuYWN0aXZlPTAsdGhpcy5zb3VyY2VFdmVudD1udWxsLHRoaXMuZXh0ZW50PWUuYXBwbHkoZm4seXIpLHRoaXMudGFwcz0wfWZ1bmN0aW9uIFRuKGZuLC4uLnlyKXtpZihuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIEFuPXF0KHRo''@;'; put 'put ''aXMseXIpLmV2ZW50KGZuKSxIcj10aGlzLl9fem9vbSx0aT1NYXRoLm1heChvWzBdLE1hdGgubWluKG9bMV0sSHIuaypNYXRoLnBvdygyLHIuYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLGZyPSRDKGZuKTtpZihBbi53aGVlbCkoQW4ubW91c2VbMF1bMF0hPT1mclswXXx8QW4ubW91c2VbMF1b''@;'; put 'put ''MV0hPT1mclsxXSkmJihBbi5tb3VzZVsxXT1Ici5pbnZlcnQoQW4ubW91c2VbMF09ZnIpKSxjbGVhclRpbWVvdXQoQW4ud2hlZWwpO2Vsc2V7aWYoSHIuaz09PXRpKXJldHVybjtBbi5tb3VzZT1bZnIsSHIuaW52ZXJ0KGZyKV0sSUsodGhpcyksQW4uc3RhcnQoKX14UChmbiksQW4ud2hlZWw9''@;'; put 'put ''c2V0VGltZW91dChmdW5jdGlvbiBlaSgpe0FuLndoZWVsPW51bGwsQW4uZW5kKCl9LDE1MCksQW4uem9vbSgibW91c2UiLHQoQ3QoYXQoSHIsdGkpLEFuLm1vdXNlWzBdLEFuLm1vdXNlWzFdKSxBbi5leHRlbnQsYSkpfX1mdW5jdGlvbiBDbihmbiwuLi55cil7aWYoIVomJm4uYXBwbHkodGhp''@;'; put 'put ''cyxhcmd1bWVudHMpKXt2YXIgQW49Zm4uY3VycmVudFRhcmdldCxIcj1xdCh0aGlzLHlyLCEwKS5ldmVudChmbiksdGk9QmwoZm4udmlldykub24oIm1vdXNlbW92ZS56b29tIixmdW5jdGlvbiBIbyhUbyl7aWYoeFAoVG8pLCFIci5tb3ZlZCl7dmFyIHdzPVRvLmNsaWVudFgtZWksdHM9VG8u''@;'; put 'put ''Y2xpZW50WS1QbztIci5tb3ZlZD13cyp3cyt0cyp0cz5NZX1Ici5ldmVudChUbykuem9vbSgibW91c2UiLHQoQ3QoSHIudGhhdC5fX3pvb20sSHIubW91c2VbMF09JEMoVG8sQW4pLEhyLm1vdXNlWzFdKSxIci5leHRlbnQsYSkpfSwhMCkub24oIm1vdXNldXAuem9vbSIsZnVuY3Rpb24geGko''@;'; put 'put ''VG8pe3RpLm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLGZ1bmN0aW9uIEYybihuLGUpe3ZhciB0PW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9Qmwobikub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtlJiYoci5vbigiY2xpY2suZHJhZyIseTRlLF80ZSksc2V0''@;'; put 'put ''VGltZW91dChmdW5jdGlvbigpe3Iub24oImNsaWNrLmRyYWciLG51bGwpfSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gdD9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKToodC5zdHlsZS5Nb3pVc2VyU2VsZWN0PXQuX19ub3NlbGVjdCxkZWxldGUgdC5fX25vc2VsZWN0KX0oVG8udmlldyxI''@;'; put 'put ''ci5tb3ZlZCkseFAoVG8pLEhyLmV2ZW50KFRvKS5lbmQoKX0sITApLGZyPSRDKGZuLEFuKSxlaT1mbi5jbGllbnRYLFBvPWZuLmNsaWVudFk7KGZ1bmN0aW9uIE4ybihuKXt2YXIgZT1uLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0PUJsKG4pLm9uKCJkcmFnc3RhcnQuZHJhZyIseTRlLF80''@;'; put 'put ''ZSk7Im9uc2VsZWN0c3RhcnQiaW4gZT90Lm9uKCJzZWxlY3RzdGFydC5kcmFnIix5NGUsXzRlKTooZS5fX25vc2VsZWN0PWUuc3R5bGUuTW96VXNlclNlbGVjdCxlLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX0pKGZuLnZpZXcpLGI0ZShmbiksSHIubW91c2U9W2ZyLHRoaXMuX196b29t''@;'; put 'put ''LmludmVydChmcildLElLKHRoaXMpLEhyLnN0YXJ0KCl9fWZ1bmN0aW9uIHFyKGZuLC4uLnlyKXtpZihuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIEFuPXRoaXMuX196b29tLEhyPSRDKGZuLmNoYW5nZWRUb3VjaGVzP2ZuLmNoYW5nZWRUb3VjaGVzWzBdOmZuLHRoaXMpLHRpPUFuLmlu''@;'; put 'put ''dmVydChIciksZWk9dChDdChhdChBbixBbi5rKihmbi5zaGlmdEtleT8uNToyKSksSHIsdGkpLGUuYXBwbHkodGhpcyx5ciksYSk7eFAoZm4pLGw+MD9CbCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24obCkuY2FsbChLdCxlaSxIcixmbik6QmwodGhpcykuY2FsbChXZS50cmFuc2Zvcm0s''@;'; put 'put ''ZWksSHIsZm4pfX1mdW5jdGlvbiAkbihmbiwuLi55cil7aWYobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBmcixlaSxQbyxIbyxBbj1mbi50b3VjaGVzLEhyPUFuLmxlbmd0aCx0aT1xdCh0aGlzLHlyLGZuLmNoYW5nZWRUb3VjaGVzLmxlbmd0aD09PUhyKS5ldmVudChmbik7Zm9yKGI0''@;'; put 'put ''ZShmbiksZWk9MDtlaTxIcjsrK2VpKUhvPVtIbz0kQyhQbz1BbltlaV0sdGhpcyksdGhpcy5fX3pvb20uaW52ZXJ0KEhvKSxQby5pZGVudGlmaWVyXSx0aS50b3VjaDA/IXRpLnRvdWNoMSYmdGkudG91Y2gwWzJdIT09SG9bMl0mJih0aS50b3VjaDE9SG8sdGkudGFwcz0wKToodGkudG91Y2gw''@;'; put 'put ''PUhvLGZyPSEwLHRpLnRhcHM9MSshIUUpO0UmJihFPWNsZWFyVGltZW91dChFKSksZnImJih0aS50YXBzPDImJihPPUhvWzBdLEU9c2V0VGltZW91dChmdW5jdGlvbigpe0U9bnVsbH0sNTAwKSksSUsodGhpcyksdGkuc3RhcnQoKSl9fWZ1bmN0aW9uIFRyKGZuLC4uLnlyKXtpZih0aGlzLl9f''@;'; put 'put ''em9vbWluZyl7dmFyIGZyLGVpLFBvLEhvLEFuPXF0KHRoaXMseXIpLmV2ZW50KGZuKSxIcj1mbi5jaGFuZ2VkVG91Y2hlcyx0aT1Ici5sZW5ndGg7Zm9yKHhQKGZuKSxmcj0wO2ZyPHRpOysrZnIpUG89JEMoZWk9SHJbZnJdLHRoaXMpLEFuLnRvdWNoMCYmQW4udG91Y2gwWzJdPT09ZWkuaWRl''@;'; put 'put ''bnRpZmllcj9Bbi50b3VjaDBbMF09UG86QW4udG91Y2gxJiZBbi50b3VjaDFbMl09PT1laS5pZGVudGlmaWVyJiYoQW4udG91Y2gxWzBdPVBvKTtpZihlaT1Bbi50aGF0Ll9fem9vbSxBbi50b3VjaDEpe3ZhciB4aT1Bbi50b3VjaDBbMF0sVG89QW4udG91Y2gwWzFdLHdzPUFuLnRvdWNoMVsw''@;'; put 'put ''XSx0cz1Bbi50b3VjaDFbMV0sa2E9KGthPXdzWzBdLXhpWzBdKSprYSsoa2E9d3NbMV0teGlbMV0pKmthLGFvPShhbz10c1swXS1Ub1swXSkqYW8rKGFvPXRzWzFdLVRvWzFdKSphbztlaT1hdChlaSxNYXRoLnNxcnQoa2EvYW8pKSxQbz1bKHhpWzBdK3dzWzBdKS8yLCh4aVsxXSt3c1sxXSkv''@;'; put 'put ''Ml0sSG89WyhUb1swXSt0c1swXSkvMiwoVG9bMV0rdHNbMV0pLzJdfWVsc2V7aWYoIUFuLnRvdWNoMClyZXR1cm47UG89QW4udG91Y2gwWzBdLEhvPUFuLnRvdWNoMFsxXX1Bbi56b29tKCJ0b3VjaCIsdChDdChlaSxQbyxIbyksQW4uZXh0ZW50LGEpKX19ZnVuY3Rpb24gcmkoZm4sLi4ueXIp''@;'; put 'put ''e2lmKHRoaXMuX196b29taW5nKXt2YXIgZnIsZWksQW49cXQodGhpcyx5cikuZXZlbnQoZm4pLEhyPWZuLmNoYW5nZWRUb3VjaGVzLHRpPUhyLmxlbmd0aDtmb3IoYjRlKGZuKSxaJiZjbGVhclRpbWVvdXQoWiksWj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Wj1udWxsfSw1MDApLGZyPTA7ZnI8''@;'; put 'put ''dGk7KytmcillaT1Icltmcl0sQW4udG91Y2gwJiZBbi50b3VjaDBbMl09PT1laS5pZGVudGlmaWVyP2RlbGV0ZSBBbi50b3VjaDA6QW4udG91Y2gxJiZBbi50b3VjaDFbMl09PT1laS5pZGVudGlmaWVyJiZkZWxldGUgQW4udG91Y2gxO2lmKEFuLnRvdWNoMSYmIUFuLnRvdWNoMCYmKEFuLnRv''@;'; put 'put ''dWNoMD1Bbi50b3VjaDEsZGVsZXRlIEFuLnRvdWNoMSksQW4udG91Y2gwKUFuLnRvdWNoMFsxXT10aGlzLl9fem9vbS5pbnZlcnQoQW4udG91Y2gwWzBdKTtlbHNlIGlmKEFuLmVuZCgpLDI9PT1Bbi50YXBzJiYoZWk9JEMoZWksdGhpcyksTWF0aC5oeXBvdChPWzBdLWVpWzBdLE9bMV0tZWlb''@;'; put 'put ''MV0pPEhlKSl7dmFyIFBvPUJsKHRoaXMpLm9uKCJkYmxjbGljay56b29tIik7UG8mJlBvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fXJldHVybiBXZS50cmFuc2Zvcm09ZnVuY3Rpb24oZm4seXIsQW4sSHIpe3ZhciB0aT1mbi5zZWxlY3Rpb24/Zm4uc2VsZWN0aW9uKCk6Zm47dGkucHJvcGVy''@;'; put 'put ''dHkoIl9fem9vbSIsS0dlKSxmbiE9PXRpP0t0KGZuLHlyLEFuLEhyKTp0aS5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7cXQodGhpcyxhcmd1bWVudHMpLmV2ZW50KEhyKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgeXI/eXIuYXBwbHkodGhpcyxhcmd1bWVudHMp''@;'; put 'put ''OnlyKS5lbmQoKX0pfSxXZS5zY2FsZUJ5PWZ1bmN0aW9uKGZuLHlyLEFuLEhyKXtXZS5zY2FsZVRvKGZuLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX196b29tLmsqKCJmdW5jdGlvbiI9PXR5cGVvZiB5cj95ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6eXIpfSxBbixIcil9LFdlLnNjYWxlVG89''@;'; put 'put ''ZnVuY3Rpb24oZm4seXIsQW4sSHIpe1dlLnRyYW5zZm9ybShmbixmdW5jdGlvbigpe3ZhciB0aT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxmcj10aGlzLl9fem9vbSxlaT1udWxsPT1Bbj9BdCh0aSk6ImZ1bmN0aW9uIj09dHlwZW9mIEFuP0FuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpBbixQ''@;'; put 'put ''bz1mci5pbnZlcnQoZWkpLEhvPSJmdW5jdGlvbiI9PXR5cGVvZiB5cj95ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6eXI7cmV0dXJuIHQoQ3QoYXQoZnIsSG8pLGVpLFBvKSx0aSxhKX0sQW4sSHIpfSxXZS50cmFuc2xhdGVCeT1mdW5jdGlvbihmbix5cixBbixIcil7V2UudHJhbnNmb3JtKGZu''@;'; put 'put ''LGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiB5cj95ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6eXIsImZ1bmN0aW9uIj09dHlwZW9mIEFuP0FuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpBbiksZS5hcHBseSh0aGlzLGFyZ3VtZW50''@;'; put 'put ''cyksYSl9LG51bGwsSHIpfSxXZS50cmFuc2xhdGVUbz1mdW5jdGlvbihmbix5cixBbixIcix0aSl7V2UudHJhbnNmb3JtKGZuLGZ1bmN0aW9uKCl7dmFyIGZyPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLGVpPXRoaXMuX196b29tLFBvPW51bGw9PUhyP0F0KGZyKToiZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgSHI/SHIuYXBwbHkodGhpcyxhcmd1bWVudHMpOkhyO3JldHVybiB0KEJLLnRyYW5zbGF0ZShQb1swXSxQb1sxXSkuc2NhbGUoZWkuaykudHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiB5cj8teXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOi15ciwiZnVuY3Rpb24iPT10eXBlb2YgQW4/''@;'; put 'put ''LUFuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotQW4pLGZyLGEpfSxIcix0aSl9LGduLnByb3RvdHlwZT17ZXZlbnQ6ZnVuY3Rpb24oZm4pe3JldHVybiBmbiYmKHRoaXMuc291cmNlRXZlbnQ9Zm4pLHRoaXN9LHN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PT0rK3RoaXMuYWN0aXZlJiYodGhp''@;'; put 'put ''cy50aGF0Ll9fem9vbWluZz10aGlzLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbihmbix5cil7cmV0dXJuIHRoaXMubW91c2UmJiJtb3VzZSIhPT1mbiYmKHRoaXMubW91c2VbMV09eXIuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmInRvdWNoIiE9''@;'; put 'put ''PWZuJiYodGhpcy50b3VjaDBbMV09eXIuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJiJ0b3VjaCIhPT1mbiYmKHRoaXMudG91Y2gxWzFdPXlyLmludmVydCh0aGlzLnRvdWNoMVswXSkpLHRoaXMudGhhdC5fX3pvb209eXIsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5k''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihmbil7dmFyIHlyPUJsKHRoaXMudGhhdCkuZGF0dW0oKTtnLmNhbGwoZm4sdGhpcy50aGF0LG5ldyBVMm4o''@;'; put 'put ''Zm4se3NvdXJjZUV2ZW50OnRoaXMuc291cmNlRXZlbnQsdGFyZ2V0OldlLHR5cGU6Zm4sdHJhbnNmb3JtOnRoaXMudGhhdC5fX3pvb20sZGlzcGF0Y2g6Z30pLHlyKX19LFdlLndoZWVsRGVsdGE9ZnVuY3Rpb24oZm4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBmbj9mbjpWSygrZm4pLFdlKTpyfSxXZS5maWx0ZXI9ZnVuY3Rpb24oZm4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiBmbj9mbjpWSyghIWZuKSxXZSk6bn0sV2UudG91Y2hhYmxlPWZ1bmN0aW9uKGZuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgZm4/Zm46VksoISFmbiksV2UpOml9LFdlLmV4dGVudD1mdW5jdGlvbihmbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIGZuP2ZuOlZLKFtbK2ZuWzBdWzBdLCtmblswXVsxXV0sWytmblsxXVswXSwrZm5bMV1b''@;'; put 'put ''MV1dXSksV2UpOmV9LFdlLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKGZuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ob1swXT0rZm5bMF0sb1sxXT0rZm5bMV0sV2UpOltvWzBdLG9bMV1dfSxXZS50cmFuc2xhdGVFeHRlbnQ9ZnVuY3Rpb24oZm4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhh''@;'; put 'put ''WzBdWzBdPStmblswXVswXSxhWzFdWzBdPStmblsxXVswXSxhWzBdWzFdPStmblswXVsxXSxhWzFdWzFdPStmblsxXVsxXSxXZSk6W1thWzBdWzBdLGFbMF1bMV1dLFthWzFdWzBdLGFbMV1bMV1dXX0sV2UuY29uc3RyYWluPWZ1bmN0aW9uKGZuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o''@;'; put 'put ''dD1mbixXZSk6dH0sV2UuZHVyYXRpb249ZnVuY3Rpb24oZm4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPStmbixXZSk6bH0sV2UuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZm4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWZuLFdlKTp1fSxXZS5vbj1mdW5jdGlvbigpe3ZhciBmbj1n''@;'; put 'put ''Lm9uLmFwcGx5KGcsYXJndW1lbnRzKTtyZXR1cm4gZm49PT1nP1dlOmZufSxXZS5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKGZuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTWU9KGZuPStmbikqZm4sV2UpOk1hdGguc3FydChNZSl9LFdlLnRhcERpc3RhbmNlPWZ1bmN0aW9uKGZuKXtyZXR1''@;'; put 'put ''cm4gYXJndW1lbnRzLmxlbmd0aD8oSGU9K2ZuLFdlKTpIZX0sV2V9KCkuc2NhbGVFeHRlbnQodGhpcy5fb3B0aW9ucy56b29tU2NhbGVFeHRlbnQpLnRyYW5zbGF0ZUV4dGVudCh0aGlzLl9vcHRpb25zLnpvb21UcmFuc2xhdGVFeHRlbnQpLmludGVycG9sYXRlKFVLKS5vbigiem9vbSIsZnVu''@;'; put 'put ''Y3Rpb24gZShhKXtCbChyLm5vZGUoKS5xdWVyeVNlbGVjdG9yKCJnIikpLmF0dHIoInRyYW5zZm9ybSIsYS50cmFuc2Zvcm0pLG4uX2Rpc3BhdGNoLmNhbGwoInpvb20iLG4pfSk7dGhpcy5fem9vbUJlaGF2aW9yPWk7dmFyIG89Qmwoci5ub2RlKCkucXVlcnlTZWxlY3RvcigiZyIpKTtyZXR1''@;'; put 'put ''cm4gci5jYWxsKGkpLHRoaXMuX2FjdGl2ZXx8TTRlLmNhbGwodGhpcyxvKSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybT1qSyhyLm5vZGUoKSksdGhpc31mdW5jdGlvbiBFNGUobil7dmFyIGU9dGhpcy5fdHJhbnNsYXRpb24sdD10aGlzLl9zY2FsZSxyPW4uZGF0dW0oKS50cmFuc2xhdGlvbixp''@;'; put 'put ''PW4uZGF0dW0oKS5zY2FsZSxvPWpLKHRoaXMuX3pvb21TZWxlY3Rpb24ubm9kZSgpKTtyZXR1cm4gZSYmKG89KG89by5zY2FsZSgxL3QpKS50cmFuc2xhdGUoLWUueCwtZS55KSksKG89by50cmFuc2xhdGUoci54LHIueSkpLnNjYWxlKGkpfWZ1bmN0aW9uIE00ZShuKXt0aGlzLl96b29tQmVo''@;'; put 'put ''YXZpb3IudHJhbnNmb3JtKHRoaXMuX3pvb21TZWxlY3Rpb24sRTRlLmNhbGwodGhpcyxuKSksdGhpcy5fdHJhbnNsYXRpb249bi5kYXR1bSgpLnRyYW5zbGF0aW9uLHRoaXMuX3NjYWxlPW4uZGF0dW0oKS5zY2FsZSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybT1CSy50cmFuc2xhdGUobi5kYXR1''@;'; put 'put ''bSgpLnRyYW5zbGF0aW9uLngsbi5kYXR1bSgpLnRyYW5zbGF0aW9uLnkpLnNjYWxlKG4uZGF0dW0oKS5zY2FsZSl9ZnVuY3Rpb24gY2ZuKG4sZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Y29uc3QgdD1uLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gVUsoW3JbMF1bMF0sclswXVsxXV0sW3JbMV1bMF0s''@;'; put 'put ''clsxXVsxXV0pfSk7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByPDE/Ik0iK3QubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpKHIpfSkuam9pbigiTCIpOmV9fX1mdW5jdGlvbiB0JGUobil7cmV0dXJuImVkZ2UiPT1uLmF0dHJpYnV0ZXMuY2xhc3N8fCJhIj09bi50YWcmJiJnIj09bi5wYXJl''@;'; put 'put ''bnQudGFnJiYiZWRnZSI9PW4ucGFyZW50LnBhcmVudC5hdHRyaWJ1dGVzLmNsYXNzfWZ1bmN0aW9uIG4kZShuKXtyZXR1cm4gbi5wYXJlbnQmJnQkZShuLnBhcmVudCl9ZnVuY3Rpb24gciRlKG4pe3ZhciBlPXRoaXMuX3RyYW5zaXRpb24sdD10aGlzLl9vcHRpb25zLmZhZGUmJm51bGwhPWUs''@;'; put 'put ''cj10aGlzLl9vcHRpb25zLnR3ZWVuUGF0aHMsaT10aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVzLG89dGhpcy5fb3B0aW9ucy5jb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zLGE9dGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdlcyYmbnVsbCE9ZSxsPXRoaXMuX2F0dHJpYnV0ZXIsdT10aGlz''@;'; put 'put ''O3ZhciBPPXRoaXMuX3NlbGVjdGlvbjtpZihudWxsIT1lKXt2YXIgWj10aGlzLl9qb2JzO2lmKHUuX2FjdGl2ZSlyZXR1cm4gWi5wdXNoKG51bGwpLHRoaXM7Ty50cmFuc2l0aW9uKGUpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKS5vbigiZW5kIixmdW5jdGlvbigpe3UuX2FjdGl2ZT0hMSww''@;'; put 'put ''IT1aLmxlbmd0aCYmKFouc2hpZnQoKSx1LnJlbmRlcigpKX0pLHRoaXMuX2FjdGl2ZT0hMH1udWxsIT1lJiZPLnRyYW5zaXRpb24oZSkub24oInN0YXJ0IixmdW5jdGlvbigpe3UuX2Rpc3BhdGNoLmNhbGwoInRyYW5zaXRpb25TdGFydCIsdSl9KS5vbigiZW5kIixmdW5jdGlvbigpe3UuX2Rp''@;'; put 'put ''c3BhdGNoLmNhbGwoInRyYW5zaXRpb25FbmQiLHUpfSkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApLm9uKCJzdGFydCIsZnVuY3Rpb24oKXt1Ll9kaXNwYXRjaC5jYWxsKCJyZXN0b3JlRW5kIix1KSx1Ll9kaXNwYXRjaC5jYWxsKCJlbmQiLHUpLG4mJm4uY2FsbCh1KX0pO3ZhciBlZT10aGlz''@;'; put 'put ''Ll9kYXRhLHZlPU8uc2VsZWN0QWxsKCJzdmciKS5kYXRhKFtlZV0sZnVuY3Rpb24oTWUpe3JldHVybiBNZS5rZXl9KTtyZXR1cm4gdmU9dmUuZW50ZXIoKS5hcHBlbmQoInN2ZyIpLm1lcmdlKHZlKSxmdW5jdGlvbiBFKE1lKXt2YXIgSGU9QmwodGhpcyk7aWYoInN2ZyI9PU1lLnRhZyl7dmFy''@;'; put 'put ''IFdlPXUuX29wdGlvbnM7aWYobnVsbCE9V2Uud2lkdGh8fG51bGwhPVdlLmhlaWdodCl7dmFyIGF0PVdlLndpZHRoLEN0PVdlLmhlaWdodDtudWxsPT1hdD9hdD00Kk1lLmF0dHJpYnV0ZXMud2lkdGgucmVwbGFjZSgicHQiLCIiKS8zOihIZS5hdHRyKCJ3aWR0aCIsYXQpLE1lLmF0dHJpYnV0''@;'; put 'put ''ZXMud2lkdGg9YXQpLG51bGw9PUN0P0N0PTQqTWUuYXR0cmlidXRlcy5oZWlnaHQucmVwbGFjZSgicHQiLCIiKS8zOihIZS5hdHRyKCJoZWlnaHQiLEN0KSxNZS5hdHRyaWJ1dGVzLmhlaWdodD1DdCksV2UuZml0fHwoSGUuYXR0cigidmlld0JveCIsYDAgMCAkezMqYXQvNC9XZS5zY2FsZX0g''@;'; put 'put ''JHszKkN0LzQvV2Uuc2NhbGV9YCksTWUuYXR0cmlidXRlcy52aWV3Qm94PWAwIDAgJHszKmF0LzQvV2Uuc2NhbGV9ICR7MypDdC80L1dlLnNjYWxlfWApfTEhPVdlLnNjYWxlJiYoV2UuZml0fHxudWxsPT1XZS53aWR0aCYmbnVsbD09V2UuaGVpZ2h0KSYmKGF0PU1lLmF0dHJpYnV0ZXMudmll''@;'; put 'put ''d0JveC5zcGxpdCgiICIpWzJdLEN0PU1lLmF0dHJpYnV0ZXMudmlld0JveC5zcGxpdCgiICIpWzNdLEhlLmF0dHIoInZpZXdCb3giLGAwIDAgJHthdC9XZS5zY2FsZX0gJHtDdC9XZS5zY2FsZX1gKSxNZS5hdHRyaWJ1dGVzLnZpZXdCb3g9YDAgMCAke2F0L1dlLnNjYWxlfSAke0N0L1dlLnNj''@;'; put 'put ''YWxlfWApfWwmJkhlLmVhY2gobCk7dmFyIEF0PU1lLnRhZyxLdD1NZS5hdHRyaWJ1dGVzLHF0PUhlLm5vZGUoKS5hdHRyaWJ1dGVzO2lmKHF0KWZvcih2YXIgZ249MDtnbjxxdC5sZW5ndGg7Z24rKyl7dmFyIFRuPXF0W2duXSxDbj1Ubi5uYW1lO2lmKCJ4bWxucyIhPUNuLnNwbGl0KCI6Iilb''@;'; put 'put ''MF0mJlRuLm5hbWVzcGFjZVVSSSl7dmFyIHFyPVRuLm5hbWVzcGFjZVVSSS5zcGxpdCgiLyIpO0NuPXFyW3FyLmxlbmd0aC0xXSsiOiIrQ259Q24gaW4gS3R8fChLdFtDbl09bnVsbCl9dmFyIFRyPSExLHJpPSExO2lmKGkmJmUpe2lmKCgicG9seWdvbiI9PXRoaXMubm9kZU5hbWV8fCJlbGxp''@;'; put 'put ''cHNlIj09dGhpcy5ub2RlTmFtZSkmJk1lLmFsdGVybmF0aXZlT2xkJiYocmk9ITApLCgicG9seWdvbiI9PUF0fHwiZWxsaXBzZSI9PUF0KSYmTWUuYWx0ZXJuYXRpdmVOZXcmJihUcj0hMCksInBvbHlnb24iPT10aGlzLm5vZGVOYW1lJiYicG9seWdvbiI9PUF0JiZNZS5hbHRlcm5hdGl2ZU9s''@;'; put 'put ''ZCl7dmFyIGZuPVhHZShIZSk7aWYoIW8pe3ZhciBBbj1mbi5hdHRyaWJ1dGVzLnBvaW50cy5zcGxpdCgiICIpLmxlbmd0aDsoSHI9TWUuYXR0cmlidXRlcy5wb2ludHMpLnNwbGl0KCIgIikubGVuZ3RoPT1BbiYmKFRyPSExLHJpPSExKX19aWYocmkpe3ZhciBlaT1RR2UoSGUsTWUuYWx0ZXJu''@;'; put 'put ''YXRpdmVPbGQpO2VpLmRhdGEoW01lXSxmdW5jdGlvbigpe3JldHVybiBNZS5rZXl9KSxIZT1laX1UciYmKEF0PSJwYXRoIixLdD1NZS5hbHRlcm5hdGl2ZU5ldy5hdHRyaWJ1dGVzKX12YXIgSG89SGU7aWYoZSYmKEhvPUhvLnRyYW5zaXRpb24oZSksdCYmSG8uZmlsdGVyKGZ1bmN0aW9uKGdv''@;'; put 'put ''KXtyZXR1cm4iIyI9PWdvLnRhZ1swXT9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMSksSG8uZmlsdGVyKGZ1bmN0aW9uKGdvKXtyZXR1cm4iIyI9PWdvLnRhZ1swXT9udWxsOnRoaXN9KS5vbigiZW5kIixmdW5jdGlvbihnbyl7QmwodGhpcykuYXR0cigic3R5bGUiLGdvJiZnby5hdHRy''@;'; put 'put ''aWJ1dGVzJiZnby5hdHRyaWJ1dGVzLnN0eWxlfHxudWxsKX0pKSxhJiYicGF0aCI9PUF0JiZNZS5vZmZzZXQpe3ZhciBUbz1NZS50b3RhbExlbmd0aDtIZS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IixUbysiICIrVG8pLmF0dHIoInN0cm9rZS1kYXNob2Zmc2V0IixUbykuYXR0cigidHJhbnNm''@;'; put 'put ''b3JtIiwidHJhbnNsYXRlKCIrTWUub2Zmc2V0LngrIiwiK01lLm9mZnNldC55KyIpIiksS3RbInN0cm9rZS1kYXNob2Zmc2V0Il09MCxLdC50cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDApIixIby5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsS3RbInN0cm9rZS1kYXNob2Zmc2V0Il0pLmF0dHIo''@;'; put 'put ''InRyYW5zZm9ybSIsS3QudHJhbnNmb3JtKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7QmwodGhpcykuc3R5bGUoIm9wYWNpdHkiLG51bGwpfSkub24oImVuZCIsZnVuY3Rpb24oKXtCbCh0aGlzKS5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsbnVsbCkuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIs''@;'; put 'put ''bnVsbCkuYXR0cigidHJhbnNmb3JtIixudWxsKX0pfWlmKGEmJiJwb2x5Z29uIj09QXQmJm4kZShNZSkmJk1lLm9mZnNldCYmInBhdGgiPT1NZS5wYXJlbnQuY2hpbGRyZW5bM10udGFnKXt2YXIgdHM9QmwoSGUubm9kZSgpLnBhcmVudE5vZGUucXVlcnlTZWxlY3RvcigicGF0aCIpKSxrYT10''@;'; put 'put ''cy5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aCgwKSxhbz10cy5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChNZS50b3RhbExlbmd0aCksdXQ9dHMubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoTWUudG90YWxMZW5ndGgtMSksSHQ9MTgwKk1hdGguYXRhbjIoYW8ueS11dC55LGFvLngtdXQueCkvTWF0''@;'; put 'put ''aC5QSSxkbj1rYS54LWFvLngrTWUub2Zmc2V0LngsVm49a2EueS1hby55K01lLm9mZnNldC55O0hlLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2RuKyIsIitWbisiKSIpLEhvLmF0dHJUd2VlbigidHJhbnNmb3JtIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihnbyl7dmFyIFlv''@;'; put 'put ''PXRzLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKE1lLnRvdGFsTGVuZ3RoKmdvKSxTbz10cy5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChNZS50b3RhbExlbmd0aCpnbysxKSxSYT0xODAqTWF0aC5hdGFuMihTby55LVlvLnksU28ueC1Zby54KS9NYXRoLlBJLUh0O3JldHVybiJ0cmFuc2xhdGUo''@;'; put 'put ''IisoZG49WW8ueC1hby54K01lLm9mZnNldC54KigxLWdvKSkrIiwiKyhWbj1Zby55LWFvLnkrTWUub2Zmc2V0LnkqKDEtZ28pKSsiKSByb3RhdGUoIitSYSsiICIrYW8ueCsiICIrYW8ueSsiKSJ9fSkub24oInN0YXJ0IixmdW5jdGlvbigpe0JsKHRoaXMpLnN0eWxlKCJvcGFjaXR5IixudWxs''@;'; put 'put ''KX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7QmwodGhpcykuYXR0cigidHJhbnNmb3JtIixudWxsKX0pfXZhciBJcj1yJiZlJiYicGF0aCI9PUF0JiZudWxsIT1IZS5hdHRyKCJkIik7Zm9yKHZhciBuaSBvZiBPYmplY3Qua2V5cyhLdCkpe3ZhciBqcj1LdFtuaV07aWYoSXImJiJkIj09bmkpe3Zh''@;'; put 'put ''ciBIcjsoSHI9KE1lLmFsdGVybmF0aXZlT2xkfHxNZSkucG9pbnRzKSYmSG8uYXR0clR3ZWVuKCJkIixjZm4oSHIsanIpKX1lbHNle2lmKCJ0cmFuc2Zvcm0iPT1uaSYmTWUudHJhbnNsYXRpb24paWYoZSl7dmFyIEZpPUhvLm9uKCJlbmQiKTtIby5vbigic3RhcnQiLGZ1bmN0aW9uKCl7dS5f''@;'; put 'put ''em9vbUJlaGF2aW9yJiZIby50d2VlbigiYXR0ci50cmFuc2Zvcm0iLGZ1bmN0aW9uKCl7dmFyIGdvPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKFlvKXtnby5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsUkdlKGpLKHUuX3pvb21TZWxlY3Rpb24ubm9kZSgpKS50b1N0cmluZygpLEU0ZS5jYWxsKHUs''@;'; put 'put ''SGUpLnRvU3RyaW5nKCkpKFlvKSl9fSl9KS5vbigiZW5kIixmdW5jdGlvbigpe0ZpLmNhbGwodGhpcyksdS5fem9vbUJlaGF2aW9yJiZNNGUuY2FsbCh1LEhlKX0pfWVsc2UgdS5fem9vbUJlaGF2aW9yJiYoTTRlLmNhbGwodSxIZSksanI9RTRlLmNhbGwodSxIZSkudG9TdHJpbmcoKSk7SG8u''@;'; put 'put ''YXR0cihuaSxqcil9fVRyJiZIby5vbigiZW5kIixmdW5jdGlvbihnbyxZbyxTbyl7UUdlKGVpPUJsKHRoaXMpLGdvKS5kYXRhKFtnb10sZnVuY3Rpb24oKXtyZXR1cm4gZ28ua2V5fSl9KSxNZS50ZXh0JiZIby50ZXh0KE1lLnRleHQpLGZ1bmN0aW9uIGcoTWUpe3ZhciBIZT1NZS5zZWxlY3RB''@;'; put 'put ''bGwoZnVuY3Rpb24oKXtyZXR1cm4gTWUubm9kZSgpLmNoaWxkTm9kZXN9KSxXZT0oSGU9SGUuZGF0YShmdW5jdGlvbihBdCl7cmV0dXJuIEF0LmNoaWxkcmVufSxmdW5jdGlvbihBdCl7cmV0dXJuIEF0LmtleX0pKS5lbnRlcigpLmFwcGVuZChmdW5jdGlvbihBdCl7dmFyIEt0PXc0ZShBdCk7''@;'; put 'put ''cmV0dXJuIiN0ZXh0Ij09QXQudGFnJiZ0JiYoS3Qubm9kZVZhbHVlPUF0LnRleHQpLEt0fSk7KHR8fGEmJnQkZShNZS5kYXR1bSgpKSkmJldlLmZpbHRlcihmdW5jdGlvbihBdCl7cmV0dXJuIiMiPT1BdC50YWdbMF0/bnVsbDp0aGlzfSkuZWFjaChmdW5jdGlvbihBdCl7dmFyIEt0PUJsKHRo''@;'; put 'put ''aXMpO2Zvcih2YXIgcXQgb2YgT2JqZWN0LmtleXMoQXQuYXR0cmlidXRlcykpS3QuYXR0cihxdCxBdC5hdHRyaWJ1dGVzW3F0XSl9KS5maWx0ZXIoZnVuY3Rpb24oQXQpe3JldHVybiJzdmciPT1BdC50YWd8fCJnIj09QXQudGFnP251bGw6dGhpc30pLnN0eWxlKCJvcGFjaXR5IiwwKTt2YXIg''@;'; put 'put ''Q3Q9SGUuZXhpdCgpO2wmJkN0LmVhY2gobCksZSYmKEN0PUN0LnRyYW5zaXRpb24oZSksdCYmQ3QuZmlsdGVyKGZ1bmN0aW9uKEF0KXtyZXR1cm4iIyI9PUF0LnRhZ1swXT9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMCkpLEN0PUN0LnJlbW92ZSgpLChIZT1XZS5tZXJnZShIZSkub3Jk''@;'; put 'put ''ZXIoKSkuZWFjaChFKX0oSGUpfS5jYWxsKHZlLm5vZGUoKSxlZSksdGhpcy5fb3B0aW9ucy56b29tJiYhdGhpcy5fem9vbUJlaGF2aW9yJiZlJGUuY2FsbCh0aGlzKSx1Ll9kaXNwYXRjaC5jYWxsKCJyZW5kZXJFbmQiLHUpLG51bGw9PWUmJih0aGlzLl9kaXNwYXRjaC5jYWxsKCJlbmQiLHRo''@;'; put 'put ''aXMpLG4mJm4uY2FsbCh0aGlzKSksdGhpc31mdW5jdGlvbiB6SyhuKXtyZXR1cm4gT2JqZWN0LmZyZWV6ZShPYmplY3Qua2V5cyhuKSl9aksucHJvdG90eXBlPXA5LnByb3RvdHlwZSx6Syh7YXJlYTohMCxjbGFzczohMCxjb2xvcjohMCxjb2xvcnNjaGVtZTohMCxjb21tZW50OiEwLGRpc3Rv''@;'; put 'put ''cnRpb246ITAsZmlsbGNvbG9yOiEwLGZpeGVkc2l6ZTohMCxmb250Y29sb3I6ITAsZm9udG5hbWU6ITAsZm9udHNpemU6ITAsZ3JhZGllbnRhbmdsZTohMCxncm91cDohMCxoZWlnaHQ6ITAsaHJlZjohMCxpZDohMCxpbWFnZTohMCxpbWFnZXBvczohMCxpbWFnZXNjYWxlOiEwLGxhYmVsOiEw''@;'; put 'put ''LGxhYmVsbG9jOiEwLGxheWVyOiEwLG1hcmdpbjohMCxub2p1c3RpZnk6ITAsb3JkZXJpbmc6ITAsb3JpZW50YXRpb246ITAscGVud2lkdGg6ITAscGVyaXBoZXJpZXM6ITAscGluOiEwLHBvczohMCxyZWd1bGFyOiEwLHJvb3Q6ITAsc2FtcGxlcG9pbnRzOiEwLHNoYXBlOiEwLHNoYXBlZmls''@;'; put 'put ''ZTohMCxzaG93Ym94ZXM6ITAsc2lkZXM6ITAsc2tldzohMCxzb3J0djohMCxzdHlsZTohMCx0YXJnZXQ6ITAsdG9vbHRpcDohMCxVUkw6ITAsd2lkdGg6ITAseGxhYmVsOiEwLHo6ITB9KSx6Syh7YXJyb3doZWFkOiEwLGFycm93c2l6ZTohMCxhcnJvd3RhaWw6ITAsY2xhc3M6ITAsY29sb3I6''@;'; put 'put ''ITAsY29sb3JzY2hlbWU6ITAsY29tbWVudDohMCxjb25zdHJhaW50OiEwLGRlY29yYXRlOiEwLGRpcjohMCxlZGdlaHJlZjohMCxlZGdldGFyZ2V0OiEwLGVkZ2V0b29sdGlwOiEwLGVkZ2VVUkw6ITAsZmlsbGNvbG9yOiEwLGZvbnRjb2xvcjohMCxmb250bmFtZTohMCxmb250c2l6ZTohMCxo''@;'; put 'put ''ZWFkY2xpcDohMCxoZWFkaHJlZjohMCxoZWFkbGFiZWw6ITAsaGVhZHBvcnQ6ITAsaGVhZHRhcmdldDohMCxoZWFkdG9vbHRpcDohMCxoZWFkVVJMOiEwLGhyZWY6ITAsaWQ6ITAsbGFiZWw6ITAsbGFiZWxhbmdsZTohMCxsYWJlbGRpc3RhbmNlOiEwLGxhYmVsZmxvYXQ6ITAsbGFiZWxmb250''@;'; put 'put ''Y29sb3I6ITAsbGFiZWxmb250bmFtZTohMCxsYWJlbGZvbnRzaXplOiEwLGxhYmVsaHJlZjohMCxsYWJlbHRhcmdldDohMCxsYWJlbHRvb2x0aXA6ITAsbGFiZWxVUkw6ITAsbGF5ZXI6ITAsbGVuOiEwLGxoZWFkOiEwLGx0YWlsOiEwLG1pbmxlbjohMCxub2p1c3RpZnk6ITAscGVud2lkdGg6''@;'; put 'put ''ITAscG9zOiEwLHJhZGl1czohMCxzYW1laGVhZDohMCxzYW1ldGFpbDohMCxzaG93Ym94ZXM6ITAsc3R5bGU6ITAsdGFpbGNsaXA6ITAsdGFpbGhyZWY6ITAsdGFpbGxhYmVsOiEwLHRhaWxwb3J0OiEwLHRhaWx0YXJnZXQ6ITAsdGFpbHRvb2x0aXA6ITAsdGFpbFVSTDohMCx0YXJnZXQ6ITAs''@;'; put 'put ''dG9vbHRpcDohMCxVUkw6ITAsd2VpZ2h0OiEwLHhsYWJlbDohMH0pLHpLKHthcmVhOiEwLGJnY29sb3I6ITAsY2xhc3M6ITAsY2x1c3RlcjohMCxjb2xvcjohMCxjb2xvcnNjaGVtZTohMCxmaWxsY29sb3I6ITAsZm9udGNvbG9yOiEwLGZvbnRuYW1lOiEwLGZvbnRzaXplOiEwLGdyYWRpZW50''@;'; put 'put ''YW5nbGU6ITAsaHJlZjohMCxpZDohMCxLOiEwLGxhYmVsOiEwLGxhYmVsanVzdDohMCxsYWJlbGxvYzohMCxsYXllcjohMCxtYXJnaW46ITAsbm9qdXN0aWZ5OiEwLHBlbmNvbG9yOiEwLHBlbndpZHRoOiEwLHBlcmlwaGVyaWVzOiEwLHJhbms6ITAsc29ydHY6ITAsc3R5bGU6ITAsdGFyZ2V0''@;'; put 'put ''OiEwLHRvb2x0aXA6ITAsVVJMOiEwfSkseksoe19iYWNrZ3JvdW5kOiEwLGJlYXV0aWZ5OiEwLGJnY29sb3I6ITAsY2VudGVyOiEwLGNoYXJzZXQ6ITAsY2xhc3M6ITAsY2x1c3RlcnJhbms6ITAsY29sb3JzY2hlbWU6ITAsY29tbWVudDohMCxjb21wb3VuZDohMCxjb25jZW50cmF0ZTohMCxE''@;'; put 'put ''YW1waW5nOiEwLGRlZmF1bHRkaXN0OiEwLGRpbTohMCxkaW1lbjohMCxkaXJlZGdlY29uc3RyYWludHM6ITAsZHBpOiEwLGVwc2lsb246ITAsZXNlcDohMCxmb250Y29sb3I6ITAsZm9udG5hbWU6ITAsZm9udG5hbWVzOiEwLGZvbnRwYXRoOiEwLGZvbnRzaXplOiEwLGZvcmNlbGFiZWxzOiEw''@;'; put 'put ''LGdyYWRpZW50YW5nbGU6ITAsaHJlZjohMCxpZDohMCxpbWFnZXBhdGg6ITAsaW5wdXRzY2FsZTohMCxLOiEwLGxhYmVsOiEwLGxhYmVsX3NjaGVtZTohMCxsYWJlbGp1c3Q6ITAsbGFiZWxsb2M6ITAsbGFuZHNjYXBlOiEwLGxheWVybGlzdHNlcDohMCxsYXllcnM6ITAsbGF5ZXJzZWxlY3Q6''@;'; put 'put ''ITAsbGF5ZXJzZXA6ITAsbGF5b3V0OiEwLGxldmVsczohMCxsZXZlbHNnYXA6ITAsbGluZWxlbmd0aDohMCxtYXJnaW46ITAsbWF4aXRlcjohMCxtY2xpbWl0OiEwLG1pbmRpc3Q6ITAsbW9kZTohMCxtb2RlbDohMCxuZXdyYW5rOiEwLG5vZGVzZXA6ITAsbm9qdXN0aWZ5OiEwLG5vcm1hbGl6''@;'; put 'put ''ZTohMCxub3RyYW5zbGF0ZTohMCxuc2xpbWl0OiEwLG5zbGltaXQxOiEwLG9uZWJsb2NrOiEwLG9yZGVyaW5nOiEwLG9yaWVudGF0aW9uOiEwLG91dHB1dG9yZGVyOiEwLG92ZXJsYXA6ITAsb3ZlcmxhcF9zY2FsaW5nOiEwLG92ZXJsYXBfc2hyaW5rOiEwLHBhY2s6ITAscGFja21vZGU6ITAs''@;'; put 'put ''cGFkOiEwLHBhZ2U6ITAscGFnZWRpcjohMCxxdWFudHVtOiEwLHJhbmtkaXI6ITAscmFua3NlcDohMCxyYXRpbzohMCxyZW1pbmNyb3NzOiEwLHJlcHVsc2l2ZWZvcmNlOiEwLHJlc29sdXRpb246ITAscm9vdDohMCxyb3RhdGU6ITAscm90YXRpb246ITAsc2NhbGU6ITAsc2VhcmNoc2l6ZToh''@;'; put 'put ''MCxzZXA6ITAsc2hvd2JveGVzOiEwLHNpemU6ITAsc21vb3RoaW5nOiEwLHNvcnR2OiEwLHNwbGluZXM6ITAsc3RhcnQ6ITAsc3R5bGU6ITAsc3R5bGVzaGVldDohMCx0YXJnZXQ6ITAsVEJiYWxhbmNlOiEwLHRvb2x0aXA6ITAsdHJ1ZWNvbG9yOiEwLFVSTDohMCx2aWV3cG9ydDohMCx2b3Jv''@;'; put 'put ''X21hcmdpbjohMCx4ZG90dmVyc2lvbjohMH0pO3ZhciBtZm49QXJyYXlCdWZmZXIsS2g9VWludDhBcnJheSxXSz1VaW50MTZBcnJheSx2Zm49SW50MTZBcnJheSxZSz1JbnQzMkFycmF5LFQ0ZT1mdW5jdGlvbihuLGUsdCl7aWYoS2gucHJvdG90eXBlLnNsaWNlKXJldHVybiBLaC5wcm90b3R5''@;'; put 'put ''cGUuc2xpY2UuY2FsbChuLGUsdCk7KG51bGw9PWV8fGU8MCkmJihlPTApLChudWxsPT10fHx0Pm4ubGVuZ3RoKSYmKHQ9bi5sZW5ndGgpO3ZhciByPW5ldyBLaCh0LWUpO3JldHVybiByLnNldChuLnN1YmFycmF5KGUsdCkpLHJ9LGtQPWZ1bmN0aW9uKG4sZSx0LHIpe2lmKEtoLnByb3RvdHlw''@;'; put 'put ''ZS5maWxsKXJldHVybiBLaC5wcm90b3R5cGUuZmlsbC5jYWxsKG4sZSx0LHIpO2ZvcigobnVsbD09dHx8dDwwKSYmKHQ9MCksKG51bGw9PXJ8fHI+bi5sZW5ndGgpJiYocj1uLmxlbmd0aCk7dDxyOysrdCluW3RdPWU7cmV0dXJuIG59LF9mbj1mdW5jdGlvbihuLGUsdCxyKXtpZihLaC5wcm90''@;'; put 'put ''b3R5cGUuY29weVdpdGhpbilyZXR1cm4gS2gucHJvdG90eXBlLmNvcHlXaXRoaW4uY2FsbChuLGUsdCxyKTtmb3IoKG51bGw9PXR8fHQ8MCkmJih0PTApLChudWxsPT1yfHxyPm4ubGVuZ3RoKSYmKHI9bi5sZW5ndGgpO3Q8cjspbltlKytdPW5bdCsrXX0seWZuPVsiaW52YWxpZCB6c3RkIGRh''@;'; put 'put ''dGEiLCJ3aW5kb3cgc2l6ZSB0b28gbGFyZ2UgKD4yMDQ2TUIpIiwiaW52YWxpZCBibG9jayB0eXBlIiwiRlNFIGFjY3VyYWN5IHRvbyBoaWdoIiwibWF0Y2ggZGlzdGFuY2UgdG9vIGZhciBiYWNrIiwidW5leHBlY3RlZCBFT0YiXSxJMT1mdW5jdGlvbihuLGUsdCl7dmFyIHI9bmV3IEVycm9y''@;'; put 'put ''KGV8fHlmbltuXSk7aWYoci5jb2RlPW4sRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHIsSTEpLCF0KXRocm93IHI7cmV0dXJuIHJ9LGkkZT1mdW5jdGlvbihuLGUsdCl7Zm9yKHZhciByPTAsaT0wO3I8dDsrK3IpaXw9bltlKytdPDwocjw8Myk7cmV0''@;'; put 'put ''dXJuIGl9LHdmbj1mdW5jdGlvbihuLGUpe3ZhciB0PW5bMF18blsxXTw8OHxuWzJdPDwxNjtpZigzMTI2NTY4PT10JiYyNTM9PW5bM10pe3ZhciByPW5bNF0saT1yPj41JjEsbz1yPj4yJjEsYT0zJnIsbD1yPj42OzgmciYmSTEoMCk7dmFyIHU9Ni1pLGc9Mz09YT80OmEsRT1pJGUobix1LGcp''@;'; put 'put ''LE89bD8xPDxsOmksWj1pJGUobix1Kz1nLE8pKygxPT1sJiYyNTYpLGVlPVo7aWYoIWkpe3ZhciB2ZT0xPDwxMCsobls1XT4+Myk7ZWU9dmUrKHZlPj4zKSooNyZuWzVdKX1lZT4yMTQ1Mzg2NDk2JiZJMSgxKTt2YXIgTWU9bmV3IEtoKCgxPT1lP1p8fGVlOmU/MDplZSkrMTIpO3JldHVybiBN''@;'; put 'put ''ZVswXT0xLE1lWzRdPTQsTWVbOF09OCx7Yjp1K08seTowLGw6MCxkOkUsdzplJiYxIT1lP2U6TWUuc3ViYXJyYXkoMTIpLGU6ZWUsbzpuZXcgWUsoTWUuYnVmZmVyLDAsMyksdTpaLGM6byxtOk1hdGgubWluKDEzMTA3MixlZSl9fWlmKDI1NDgxODkzPT0odD4+NHxuWzNdPDwyMCkpcmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uKG4pe3JldHVybihuWzRdfG5bNV08PDh8bls2XTw8MTZ8bls3XTw8MjQpPj4+MH0obikrODtJMSgwKX0sS0M9ZnVuY3Rpb24obil7Zm9yKHZhciBlPTA7MTw8ZTw9bjsrK2UpO3JldHVybiBlLTF9LFJQPWZ1bmN0aW9uKG4sZSx0KXt2YXIgcj00KyhlPDwzKSxpPTUrKDE1Jm5b''@;'; put 'put ''ZV0pO2k+dCYmSTEoMyk7Zm9yKHZhciBvPTE8PGksYT1vLGw9LTEsdT0tMSxnPS0xLEU9byxPPW5ldyBtZm4oNTEyKyhvPDwyKSksWj1uZXcgdmZuKE8sMCwyNTYpLGVlPW5ldyBXSyhPLDAsMjU2KSx2ZT1uZXcgV0soTyw1MTIsbyksTWU9NTEyKyhvPDwxKSxIZT1uZXcgS2goTyxNZSxvKSxX''@;'; put 'put ''ZT1uZXcgS2goTyxNZStvKTtsPDI1NSYmYT4wOyl7dmFyIGF0PUtDKGErMSksQ3Q9cj4+MyxBdD0oMTw8YXQrMSktMSxLdD0obltDdF18bltDdCsxXTw8OHxuW0N0KzJdPDwxNik+Pig3JnIpJkF0LHF0PSgxPDxhdCktMSxnbj1BdC1hLTEsVG49S3QmcXQ7aWYoVG48Z24/KHIrPWF0LEt0PVRu''@;'; put 'put ''KToocis9YXQrMSxLdD5xdCYmKEt0LT1nbikpLFpbKytsXT0tLUt0LC0xPT1LdD8oYSs9S3QsSGVbLS1FXT1sKTphLT1LdCwhS3QpZG97dmFyIENuPXI+PjM7dT0obltDbl18bltDbisxXTw8OCk+Pig3JnIpJjMscis9MixsKz11fXdoaWxlKDM9PXUpfShsPjI1NXx8YSkmJkkxKDApO2Zvcih2''@;'; put 'put ''YXIgcXI9MCwkbj0obz4+MSkrKG8+PjMpKzMsVHI9by0xLHJpPTA7cmk8PWw7KytyaSl7dmFyIGZuPVpbcmldO2lmKGZuPDEpZWVbcmldPS1mbjtlbHNlIGZvcihnPTA7ZzxmbjsrK2cpe0hlW3FyXT1yaTtkb3txcj1xciskbiZUcn13aGlsZShxcj49RSl9fWZvcihxciYmSTEoMCksZz0wO2c8''@;'; put 'put ''bzsrK2cpe3ZhciB5cj1lZVtIZVtnXV0rKyxBbj1XZVtnXT1pLUtDKHlyKTt2ZVtnXT0oeXI8PEFuKS1vfXJldHVybltyKzc+PjMse2I6aSxzOkhlLG46V2UsdDp2ZX1dfSxTZm49UlAobmV3IEtoKFs4MSwxNiw5OSwxNDAsNDksMTk4LDI0LDk5LDEyLDMzLDE5NiwyNCw5OSwxMDIsMTAyLDEz''@;'; put 'put ''NCw3MCwxNDYsNF0pLDAsNilbMV0sRWZuPVJQKG5ldyBLaChbMzMsMjAsMTk2LDI0LDk5LDE0MCwzMywxMzIsMTYsNjYsOCwzMywxMzIsMTYsNjYsOCwzMyw2OCw2OCw2OCw2OCw2OCw2OCw2OCw2OCwzNiw5XSksMCw2KVsxXSxNZm49UlAobmV3IEtoKFszMiwxMzIsMTYsNjYsMTAyLDcwLDY4''@;'; put 'put ''LDY4LDY4LDY4LDM2LDczLDJdKSwwLDUpWzFdLG8kZT1mdW5jdGlvbihuLGUpe2Zvcih2YXIgdD1uLmxlbmd0aCxyPW5ldyBZSyh0KSxpPTA7aTx0OysraSlyW2ldPWUsZSs9MTw8bltpXTtyZXR1cm4gcn0seDRlPW5ldyBLaChuZXcgWUsoWzAsMCwwLDAsMTY4NDMwMDksNTA1Mjg3NzAsMTM0''@;'; put 'put ''Njc4MDIwLDIwMjA1MDA1NywyNjk0MjIwOTNdKS5idWZmZXIsMCwzNiksVGZuPW8kZSh4NGUsMCksQTRlPW5ldyBLaChuZXcgWUsoWzAsMCwwLDAsMCwwLDAsMCwxNjg0MzAwOSw1MDUyODc3MCwxMTc3NjkyMjAsMTg1MjA3MDQ4LDI1MjU3OTA4NCwxNl0pLmJ1ZmZlciwwLDUzKSx4Zm49byRl''@;'; put 'put ''KEE0ZSwzKSxJUD1mdW5jdGlvbihuLGUsdCl7dmFyIHI9bi5sZW5ndGgsaT1lLmxlbmd0aCxvPW5bci0xXSxhPSgxPDx0LmIpLTEsbD0tdC5iO298fEkxKDApO2Zvcih2YXIgdT0wLGc9dC5iLEU9KHI8PDMpLTgrS0MobyktZyxPPS0xO0U+bCYmTzxpOyl7dmFyIFo9RT4+MztlWysrT109dC5z''@;'; put 'put ''W3U9KHU8PGd8KG5bWl18bltaKzFdPDw4fG5bWisyXTw8MTYpPj4oNyZFKSkmYV0sRS09Zz10Lm5bdV19KEUhPWx8fE8rMSE9aSkmJkkxKDApfSxBZm49ZnVuY3Rpb24obixlLHQpe3ZhciByPTYsbz1lLmxlbmd0aCszPj4yLGE9bzw8MSxsPW8rYTtJUChuLnN1YmFycmF5KHIscis9blswXXxu''@;'; put 'put ''WzFdPDw4KSxlLnN1YmFycmF5KDAsbyksdCksSVAobi5zdWJhcnJheShyLHIrPW5bMl18blszXTw8OCksZS5zdWJhcnJheShvLGEpLHQpLElQKG4uc3ViYXJyYXkocixyKz1uWzRdfG5bNV08PDgpLGUuc3ViYXJyYXkoYSxsKSx0KSxJUChuLnN1YmFycmF5KHIpLGUuc3ViYXJyYXkobCksdCl9''@;'; put 'put ''LGtmbj1mdW5jdGlvbihuLGUsdCl7dmFyIHIsaT1lLmIsbz1uW2ldLGE9bz4+MSYzO2UubD0xJm87dmFyIGw9bz4+M3xuW2krMV08PDV8bltpKzJdPDwxMyx1PShpKz0zKStsO2lmKDE9PWEpcmV0dXJuIGk+PW4ubGVuZ3RoP3ZvaWQgMDooZS5iPWkrMSx0PyhrUCh0LG5baV0sZS55LGUueSs9''@;'; put 'put ''bCksdCk6a1AobmV3IEtoKGwpLG5baV0pKTtpZighKHU+bi5sZW5ndGgpKXtpZigwPT1hKXJldHVybiBlLmI9dSx0Pyh0LnNldChuLnN1YmFycmF5KGksdSksZS55KSxlLnkrPWwsdCk6VDRlKG4saSx1KTtpZigyPT1hKXt2YXIgZz1uW2ldLEU9MyZnLE89Zz4+MiYzLFo9Zz4+NCxlZT0wLHZl''@;'; put 'put ''PTA7RTwyPzEmTz9afD1uWysraV08PDR8KDImTyYmblsrK2ldPDwxMik6Wj1nPj4zOih2ZT1PLE88Mj8oWnw9KDYzJm5bKytpXSk8PDQsZWU9bltpXT4+NnxuWysraV08PDIpOjI9PU8/KFp8PW5bKytpXTw8NHwoMyZuWysraV0pPDwxMixlZT1uW2ldPj4yfG5bKytpXTw8Nik6KFp8PW5bKytp''@;'; put 'put ''XTw8NHwoNjMmblsrK2ldKTw8MTIsZWU9bltpXT4+NnxuWysraV08PDJ8blsrK2ldPDwxMCkpLCsraTt2YXIgTWU9dD90LnN1YmFycmF5KGUueSxlLnkrZS5tKTpuZXcgS2goZS5tKSxIZT1NZS5sZW5ndGgtWjtpZigwPT1FKU1lLnNldChuLnN1YmFycmF5KGksaSs9WiksSGUpO2Vsc2UgaWYo''@;'; put 'put ''MT09RSlrUChNZSxuW2krK10sSGUpO2Vsc2V7dmFyIFdlPWUuaDtpZigyPT1FKXt2YXIgYXQ9ZnVuY3Rpb24obixlKXt2YXIgdD0wLHI9LTEsaT1uZXcgS2goMjkyKSxvPW5bZV0sYT1pLnN1YmFycmF5KDAsMjU2KSxsPWkuc3ViYXJyYXkoMjU2LDI2OCksdT1uZXcgV0soaS5idWZmZXIsMjY4''@;'; put 'put ''KTtpZihvPDEyOCl7dmFyIGc9UlAobixlKzEsNiksTz1nWzFdLFo9Z1swXTw8MyxlZT1uW2UrPW9dO2VlfHxJMSgwKTtmb3IodmFyIHZlPTAsTWU9MCxIZT1PLmIsV2U9SGUsYXQ9KCsrZTw8MyktOCtLQyhlZSk7ISgoYXQtPUhlKTxaKTspe3ZhciBDdD1hdD4+MztpZihhWysrcl09Ty5zW3Zl''@;'; put 'put ''Kz0obltDdF18bltDdCsxXTw8OCk+Pig3JmF0KSYoMTw8SGUpLTFdLChhdC09V2UpPFopYnJlYWs7YVsrK3JdPU8uc1tNZSs9KG5bQ3Q9YXQ+PjNdfG5bQ3QrMV08PDgpPj4oNyZhdCkmKDE8PFdlKS0xXSxIZT1PLm5bdmVdLHZlPU8udFt2ZV0sV2U9Ty5uW01lXSxNZT1PLnRbTWVdfSsrcj4y''@;'; put 'put ''NTUmJkkxKDApfWVsc2V7Zm9yKHI9by0xMjc7dDxyO3QrPTIpe3ZhciBBdD1uWysrZV07YVt0XT1BdD4+NCxhW3QrMV09MTUmQXR9KytlfXZhciBLdD0wO2Zvcih0PTA7dDxyOysrdCkocXQ9YVt0XSk+MTEmJkkxKDApLEt0Kz1xdCYmMTw8cXQtMTt2YXIgZ249S0MoS3QpKzEsVG49MTw8Z24s''@;'; put 'put ''Q249VG4tS3Q7Zm9yKENuJkNuLTEmJkkxKDApLGFbcisrXT1LQyhDbikrMSx0PTA7dDxyOysrdCl7dmFyIHF0OysrbFthW3RdPShxdD1hW3RdKSYmZ24rMS1xdF19dmFyIHFyPW5ldyBLaChUbjw8MSksJG49cXIuc3ViYXJyYXkoMCxUbiksVHI9cXIuc3ViYXJyYXkoVG4pO2Zvcih1W2duXT0w''@;'; put 'put ''LHQ9Z247dD4wOy0tdCl7dmFyIHJpPXVbdF07a1AoVHIsdCxyaSx1W3QtMV09cmkrbFt0XSooMTw8Z24tdCkpfWZvcih1WzBdIT1UbiYmSTEoMCksdD0wO3Q8cjsrK3Qpe3ZhciBmbj1hW3RdO2lmKGZuKXt2YXIgeXI9dVtmbl07a1AoJG4sdCx5cix1W2ZuXT15cisoMTw8Z24tZm4pKX19cmV0''@;'; put 'put ''dXJuW2Use246VHIsYjpnbixzOiRufV19KG4saSk7ZWUrPWktKGk9YXRbMF0pLGUuaD1XZT1hdFsxXX1lbHNlIFdlfHxJMSgwKTsodmU/QWZuOklQKShuLnN1YmFycmF5KGksaSs9ZWUpLE1lLnN1YmFycmF5KEhlKSxXZSl9dmFyIEN0PW5baSsrXTtpZihDdCl7MjU1PT1DdD9DdD0zMjUxMiso''@;'; put 'put ''bltpKytdfG5baSsrXTw8OCk6Q3Q+MTI3JiYoQ3Q9Q3QtMTI4PDw4fG5baSsrXSk7dmFyIEF0PW5baSsrXTszJkF0JiZJMSgwKTtmb3IodmFyIEt0PVtFZm4sTWZuLFNmbl0scXQ9MjtxdD4tMTstLXF0KXt2YXIgZ249QXQ+PjIrKHF0PDwxKSYzO2lmKDE9PWduKXt2YXIgVG49bmV3IEtoKFsw''@;'; put 'put ''LDAsbltpKytdXSk7S3RbcXRdPXtzOlRuLnN1YmFycmF5KDIsMyksbjpUbi5zdWJhcnJheSgwLDEpLHQ6bmV3IFdLKFRuLmJ1ZmZlciwwLDEpLGI6MH19ZWxzZSAyPT1nbj8oaT0ocj1SUChuLGksOS0oMSZxdCkpKVswXSxLdFtxdF09clsxXSk6Mz09Z24mJihlLnR8fEkxKDApLEt0W3F0XT1l''@;'; put 'put ''LnRbcXRdKX12YXIgQ249ZS50PUt0LHFyPUNuWzBdLCRuPUNuWzFdLFRyPUNuWzJdLHJpPW5bdS0xXTtyaXx8STEoMCk7dmFyIGZuPSh1PDwzKS04K0tDKHJpKS1Uci5iLHlyPWZuPj4zLEFuPTAsSHI9KG5beXJdfG5beXIrMV08PDgpPj4oNyZmbikmKDE8PFRyLmIpLTEsdGk9KG5beXI9KGZu''@;'; put 'put ''LT0kbi5iKT4+M118blt5cisxXTw8OCk+Pig3JmZuKSYoMTw8JG4uYiktMSxmcj0oblt5cj0oZm4tPXFyLmIpPj4zXXxuW3lyKzFdPDw4KT4+KDcmZm4pJigxPDxxci5iKS0xO2ZvcigrK0N0Oy0tQ3Q7KXt2YXIgZWk9VHIuc1tIcl0sUG89VHIubltIcl0sSG89cXIuc1tmcl0seGk9cXIubltm''@;'; put 'put ''cl0sVG89JG4uc1t0aV0sd3M9JG4ublt0aV0sdHM9MTw8VG8sa2E9dHMrKChuW3lyPShmbi09VG8pPj4zXXxuW3lyKzFdPDw4fG5beXIrMl08PDE2fG5beXIrM108PDI0KT4+Pig3JmZuKSZ0cy0xKTt5cj0oZm4tPUE0ZVtIb10pPj4zO3ZhciBhbz14Zm5bSG9dKygoblt5cl18blt5cisxXTw8''@;'; put 'put ''OHxuW3lyKzJdPDwxNik+Pig3JmZuKSYoMTw8QTRlW0hvXSktMSk7eXI9KGZuLT14NGVbZWldKT4+Mzt2YXIgdXQ9VGZuW2VpXSsoKG5beXJdfG5beXIrMV08PDh8blt5cisyXTw8MTYpPj4oNyZmbikmKDE8PHg0ZVtlaV0pLTEpO2lmKHlyPShmbi09UG8pPj4zLEhyPVRyLnRbSHJdKygoblt5''@;'; put 'put ''cl18blt5cisxXTw8OCk+Pig3JmZuKSYoMTw8UG8pLTEpLHlyPShmbi09eGkpPj4zLGZyPXFyLnRbZnJdKygoblt5cl18blt5cisxXTw8OCk+Pig3JmZuKSYoMTw8eGkpLTEpLHlyPShmbi09d3MpPj4zLHRpPSRuLnRbdGldKygoblt5cl18blt5cisxXTw8OCk+Pig3JmZuKSYoMTw8d3MpLTEp''@;'; put 'put ''LGthPjMpZS5vWzJdPWUub1sxXSxlLm9bMV09ZS5vWzBdLGUub1swXT1rYS09MztlbHNle3ZhciBIdD1rYS0oMCE9dXQpO0h0PyhrYT0zPT1IdD9lLm9bMF0tMTplLm9bSHRdLEh0PjEmJihlLm9bMl09ZS5vWzFdKSxlLm9bMV09ZS5vWzBdLGUub1swXT1rYSk6a2E9ZS5vWzBdfWZvcihxdD0w''@;'; put 'put ''O3F0PHV0OysrcXQpTWVbQW4rcXRdPU1lW0hlK3F0XTtIZSs9dXQ7dmFyIGRuPShBbis9dXQpLWthO2lmKGRuPDApe3ZhciBWbj0tZG4sSXI9ZS5lK2RuO2ZvcihWbj5hbyYmKFZuPWFvKSxxdD0wO3F0PFZuOysrcXQpTWVbQW4rcXRdPWUud1tJcitxdF07QW4rPVZuLGFvLT1Wbixkbj0wfWZv''@;'; put 'put ''cihxdD0wO3F0PGFvOysrcXQpTWVbQW4rcXRdPU1lW2RuK3F0XTtBbis9YW99aWYoQW4hPUhlKWZvcig7SGU8TWUubGVuZ3RoOylNZVtBbisrXT1NZVtIZSsrXTtlbHNlIEFuPU1lLmxlbmd0aDt0P2UueSs9QW46TWU9VDRlKE1lLDAsQW4pfWVsc2UgaWYodCl7aWYoZS55Kz1aLEhlKWZvcihx''@;'; put 'put ''dD0wO3F0PFo7KytxdClNZVtxdF09TWVbSGUrcXRdfWVsc2UgSGUmJihNZT1UNGUoTWUsSGUpKTtyZXR1cm4gZS5iPXUsTWV9STEoMil9fTtmdW5jdGlvbiBrNGUoKXtyZXR1cm4gazRlPUNyKGZ1bmN0aW9uKihuPXt9KXt2YXIgdSxaLHZlLGduLGZyLGVpLGU9bixpPShFZSxWZSk9Pnt0aHJv''@;'; put 'put ''dyBWZX0sRT1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLE89Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpLGVlPSExLEhlPSExO2Z1bmN0aW9uIGF0KCl7aWYoIVRvPy5idWZmZXI/LnJlc2l6YWJsZSl7dmFyIEVlPWZ1bmN0aW9uIFdlKCl7cmV0dXJuIGhYLmJ1ZmZlcn0oKTtUbz1uZXcg''@;'; put 'put ''SW50OEFycmF5KEVlKSxIbz1uZXcgSW50MTZBcnJheShFZSksZS5IRUFQVTg9dXQ9bmV3IFVpbnQ4QXJyYXkoRWUpLGthPW5ldyBVaW50MTZBcnJheShFZSkseGk9bmV3IEludDMyQXJyYXkoRWUpLGFvPW5ldyBVaW50MzJBcnJheShFZSksd3M9bmV3IEZsb2F0MzJBcnJheShFZSksdHM9bmV3''@;'; put 'put ''IEZsb2F0NjRBcnJheShFZSl9fWZ1bmN0aW9uIHF0KEVlKXt0aHJvdyBPKEVlPWBBYm9ydGVkKCR7RWV9KWApLGVlPSEwLEVlKz0iLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLiIsSGUmJkokZSgpLG5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IoRWUpfWZ1bmN0''@;'; put 'put ''aW9uICRuKCl7cmV0dXJuKCRuPUNyKGZ1bmN0aW9uKihFZSl7aWYoIVopdHJ5e3ZhciBWZT15aWVsZCB1KEVlKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoVmUpfWNhdGNoe31yZXR1cm4gZnVuY3Rpb24gQ24oRWUpe2lmKEVlPT1nbiYmWilyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWik7dGhyb3ci''@;'; put 'put ''Ym90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifShFZSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHJpKCl7cmV0dXJuIHJpPUNyKGZ1bmN0aW9uKihFZSxWZSl7dHJ5e3ZhciBzdD15aWVsZCBmdW5jdGlvbiBxcihFZSl7cmV0dXJuICRu''@;'; put 'put ''LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oRWUpO3JldHVybiB5aWVsZCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShzdCxWZSl9Y2F0Y2goWXQpe08oYGZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICR7WXR9YCkscXQoWXQpfX0pLHJpLmFwcGx5KHRoaXMsYXJndW1lbnRz''@;'; put 'put ''KX1mdW5jdGlvbiB5cigpe3JldHVybiB5cj1DcihmdW5jdGlvbiooRWUsVmUsc3Qpe2lmKCFFZSYmIShFZT0+RWUuc3RhcnRzV2l0aCgiZmlsZTovLyIpKShWZSkpdHJ5e3ZhciBNdD1mZXRjaChWZSx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pO3JldHVybiB5aWVsZCBXZWJBc3NlbWJs''@;'; put 'put ''eS5pbnN0YW50aWF0ZVN0cmVhbWluZyhNdCxzdCl9Y2F0Y2goYW4pe08oYHdhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAke2FufWApLE8oImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uIil9cmV0dXJuIGZ1bmN0aW9uIFRyKEVlLFZlKXtyZXR1cm4gcmku''@;'; put 'put ''YXBwbHkodGhpcyxhcmd1bWVudHMpfShWZSxzdCl9KSx5ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gdGkoKXtyZXR1cm4gdGk9Q3IoZnVuY3Rpb24qKCl7dmFyIHN0PWZ1bmN0aW9uIEFuKCl7cmV0dXJue2E6VjZufX0oKTtnbj8/PSIiO3ZhciBNdD15aWVsZCBmdW5jdGlvbiBm''@;'; put 'put ''bihFZSxWZSxzdCl7cmV0dXJuIHlyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oWixnbixzdCk7cmV0dXJuIGZ1bmN0aW9uIFZlKGFuKXtyZXR1cm4gZnVuY3Rpb24gRWUoYW4pe3JldHVybiBmdW5jdGlvbiBINm4oRWUpe0skZT1FZS5VLHE0ZT1lLl9tYWxsb2M9RWUuVix0NT1lLl9mcmVlPUVl''@;'; put 'put ''LlcsWCRlPUVlLlksUSRlPUVlLlosSiRlPUVlLl8sZXFlPUVlLiQsdHFlPUVlLmFhLG5xZT1FZS5iYSxycWU9RWUuZGEsaXFlPUVlLmVhLHV5Lmppamk9RWUuZmEsdXkudmlpamlpPUVlLmdhLHV5LmlpaWlpaj1FZS5oYSx1eS5paWlpaWpqPUVlLmlhLHV5LmlpaWlpaWpqPUVlLmphLHV5LnZp''@;'; put 'put ''aWo9RWUua2EsdXkuaWlpaj1FZS5sYSxoWD1FZS5TLGFxZT1FZS5YLG9xZT1FZS5jYX0oQlA9YW4uZXhwb3J0cyksYXQoKSxCUH0oYW4uaW5zdGFuY2UpfShNdCl9KSx0aS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2xhc3MgUG97bmFtZT0iRXhpdFN0YXR1cyI7Y29uc3RydWN0b3IoVmUpe3Ro''@;'; put 'put ''aXMubWVzc2FnZT1gUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggZXhpdCgke1ZlfSlgLHRoaXMuc3RhdHVzPVZlfX12YXIgSG8seGksVG8sd3MsdHMsa2EsYW8sdXQsSHQ9Z2xvYmFsVGhpcy5UZXh0RGVjb2RlciYmbmV3IFRleHREZWNvZGVyLGRuPShFZSxWZSxzdCxNdCk9Pnt2YXIgWXQ9VmUr''@;'; put 'put ''c3Q7aWYoTXQpcmV0dXJuIFl0O2Zvcig7RWVbVmVdJiYhKFZlPj1ZdCk7KSsrVmU7cmV0dXJuIFZlfSxWbj0oRWUsVmU9MCxzdCxNdCk9Pnt2YXIgWXQ9ZG4oRWUsVmUsc3QsTXQpO2lmKFl0LVZlPjE2JiZFZS5idWZmZXImJkh0KXJldHVybiBIdC5kZWNvZGUoRWUuc3ViYXJyYXkoVmUsWXQp''@;'; put 'put ''KTtmb3IodmFyIGFuPSIiO1ZlPFl0Oyl7dmFyIEluPUVlW1ZlKytdO2lmKDEyOCZJbil7dmFyIEtuPTYzJkVlW1ZlKytdO2lmKDE5MiE9KDIyNCZJbikpe3ZhciBsaT02MyZFZVtWZSsrXTtpZigoSW49MjI0PT0oMjQwJkluKT8oMTUmSW4pPDwxMnxLbjw8NnxsaTooNyZJbik8PDE4fEtuPDwx''@;'; put 'put ''MnxsaTw8Nnw2MyZFZVtWZSsrXSk8NjU1MzYpYW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoSW4pO2Vsc2V7dmFyIFFpPUluLTY1NTM2O2FuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fFFpPj4xMCw1NjMyMHwxMDIzJlFpKX19ZWxzZSBhbis9U3RyaW5nLmZyb21DaGFyQ29kZSgoMzEmSW4p''@;'; put 'put ''PDw2fEtuKX1lbHNlIGFuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEluKX1yZXR1cm4gYW59LElyPShFZSxWZSxzdCk9PkVlP1ZuKHV0LEVlLFZlLHN0KToiIixqcj17aXNBYnM6RWU9PiIvIj09PUVlLmNoYXJBdCgwKSxzcGxpdFBhdGg6RWU9Pi9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9''@;'; put 'put ''fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLy5leGVjKEVlKS5zbGljZSgxKSxub3JtYWxpemVBcnJheTooRWUsVmUpPT57Zm9yKHZhciBzdD0wLE10PUVlLmxlbmd0aC0xO010Pj0wO010LS0pe3ZhciBZdD1FZVtNdF07Ii4iPT09WXQ/RWUuc3BsaWNlKE10LDEpOiIuLiI9PT1Z''@;'; put 'put ''dD8oRWUuc3BsaWNlKE10LDEpLHN0KyspOnN0JiYoRWUuc3BsaWNlKE10LDEpLHN0LS0pfWlmKFZlKWZvcig7c3Q7c3QtLSlFZS51bnNoaWZ0KCIuLiIpO3JldHVybiBFZX0sbm9ybWFsaXplOkVlPT57dmFyIFZlPWpyLmlzQWJzKEVlKSxzdD0iLyI9PT1FZS5zbGljZSgtMSk7cmV0dXJuIShF''@;'; put 'put ''ZT1qci5ub3JtYWxpemVBcnJheShFZS5zcGxpdCgiLyIpLmZpbHRlcihNdD0+ISFNdCksIVZlKS5qb2luKCIvIikpJiYhVmUmJihFZT0iLiIpLEVlJiZzdCYmKEVlKz0iLyIpLChWZT8iLyI6IiIpK0VlfSxkaXJuYW1lOkVlPT57dmFyIFZlPWpyLnNwbGl0UGF0aChFZSksc3Q9VmVbMF0sTXQ9''@;'; put 'put ''VmVbMV07cmV0dXJuIHN0fHxNdD8oTXQmJihNdD1NdC5zbGljZSgwLC0xKSksc3QrTXQpOiIuIn0sYmFzZW5hbWU6RWU9PkVlJiZFZS5tYXRjaCgvKFteXC9dK3xcLylcLyokLylbMV0sam9pbjooLi4uRWUpPT5qci5ub3JtYWxpemUoRWUuam9pbigiLyIpKSxqb2luMjooRWUsVmUpPT5qci5u''@;'; put 'put ''b3JtYWxpemUoRWUrIi8iK1ZlKX0sZ289RWU9Pihnbz1FZT0+KGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoRWUpLDApKShFZSksWW89e3Jlc29sdmU6KC4uLkVlKT0+e2Zvcih2YXIgVmU9IiIsc3Q9ITEsTXQ9RWUubGVuZ3RoLTE7TXQ+PS0xJiYhc3Q7TXQtLSl7dmFyIFl0PU10Pj0wP0VlW010''@;'; put 'put ''XTpPdC5jd2QoKTtpZigic3RyaW5nIiE9dHlwZW9mIFl0KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7aWYoIVl0KXJldHVybiIiO1ZlPVl0KyIvIitWZSxzdD1qci5pc0FicyhZdCl9cmV0dXJuKHN0PyIvIjoiIikrKFZl''@;'; put 'put ''PWpyLm5vcm1hbGl6ZUFycmF5KFZlLnNwbGl0KCIvIikuZmlsdGVyKGFuPT4hIWFuKSwhc3QpLmpvaW4oIi8iKSl8fCIuIn0scmVsYXRpdmU6KEVlLFZlKT0+e2Z1bmN0aW9uIHN0KFFpKXtmb3IodmFyIFFvPTA7UW88UWkubGVuZ3RoJiYiIj09PVFpW1FvXTtRbysrKTtmb3IodmFyIElhPVFp''@;'; put 'put ''Lmxlbmd0aC0xO0lhPj0wJiYiIj09PVFpW0lhXTtJYS0tKTtyZXR1cm4gUW8+SWE/W106UWkuc2xpY2UoUW8sSWEtUW8rMSl9RWU9WW8ucmVzb2x2ZShFZSkuc2xpY2UoMSksVmU9WW8ucmVzb2x2ZShWZSkuc2xpY2UoMSk7Zm9yKHZhciBNdD1zdChFZS5zcGxpdCgiLyIpKSxZdD1zdChWZS5z''@;'; put 'put ''cGxpdCgiLyIpKSxhbj1NYXRoLm1pbihNdC5sZW5ndGgsWXQubGVuZ3RoKSxJbj1hbixLbj0wO0tuPGFuO0tuKyspaWYoTXRbS25dIT09WXRbS25dKXtJbj1LbjticmVha312YXIgbGk9W107Zm9yKEtuPUluO0tuPE10Lmxlbmd0aDtLbisrKWxpLnB1c2goIi4uIik7cmV0dXJuKGxpPWxpLmNv''@;'; put 'put ''bmNhdChZdC5zbGljZShJbikpKS5qb2luKCIvIil9fSxTbz1bXSxSYT1FZT0+e2Zvcih2YXIgVmU9MCxzdD0wO3N0PEVlLmxlbmd0aDsrK3N0KXt2YXIgTXQ9RWUuY2hhckNvZGVBdChzdCk7TXQ8PTEyNz9WZSsrOk10PD0yMDQ3P1ZlKz0yOk10Pj01NTI5NiYmTXQ8PTU3MzQzPyhWZSs9NCwr''@;'; put 'put ''K3N0KTpWZSs9M31yZXR1cm4gVmV9LFZvPShFZSxWZSxzdCxNdCk9PntpZighKE10PjApKXJldHVybiAwO2Zvcih2YXIgWXQ9c3QsYW49c3QrTXQtMSxJbj0wO0luPEVlLmxlbmd0aDsrK0luKXt2YXIgS249RWUuY29kZVBvaW50QXQoSW4pO2lmKEtuPD0xMjcpe2lmKHN0Pj1hbilicmVhaztW''@;'; put 'put ''ZVtzdCsrXT1Lbn1lbHNlIGlmKEtuPD0yMDQ3KXtpZihzdCsxPj1hbilicmVhaztWZVtzdCsrXT0xOTJ8S24+PjYsVmVbc3QrK109MTI4fDYzJktufWVsc2UgaWYoS248PTY1NTM1KXtpZihzdCsyPj1hbilicmVhaztWZVtzdCsrXT0yMjR8S24+PjEyLFZlW3N0KytdPTEyOHxLbj4+NiY2MyxW''@;'; put 'put ''ZVtzdCsrXT0xMjh8NjMmS259ZWxzZXtpZihzdCszPj1hbilicmVhaztWZVtzdCsrXT0yNDB8S24+PjE4LFZlW3N0KytdPTEyOHxLbj4+MTImNjMsVmVbc3QrK109MTI4fEtuPj42JjYzLFZlW3N0KytdPTEyOHw2MyZLbixJbisrfX1yZXR1cm4gVmVbc3RdPTAsc3QtWXR9LGJsPShFZSxWZSxz''@;'; put 'put ''dCk9Pnt2YXIgTXQ9c3Q+MD9zdDpSYShFZSkrMSxZdD1uZXcgQXJyYXkoTXQpLGFuPVZvKEVlLFl0LDAsWXQubGVuZ3RoKTtyZXR1cm4gVmUmJihZdC5sZW5ndGg9YW4pLFl0fSxUaD17dHR5czpbXSxpbml0KCl7fSxzaHV0ZG93bigpe30scmVnaXN0ZXIoRWUsVmUpe1RoLnR0eXNbRWVdPXtp''@;'; put 'put ''bnB1dDpbXSxvdXRwdXQ6W10sb3BzOlZlfSxPdC5yZWdpc3RlckRldmljZShFZSxUaC5zdHJlYW1fb3BzKX0sc3RyZWFtX29wczp7b3BlbihFZSl7dmFyIFZlPVRoLnR0eXNbRWUubm9kZS5yZGV2XTtpZighVmUpdGhyb3cgbmV3IE90LkVycm5vRXJyb3IoNDMpO0VlLnR0eT1WZSxFZS5zZWVr''@;'; put 'put ''YWJsZT0hMX0sY2xvc2UoRWUpe0VlLnR0eS5vcHMuZnN5bmMoRWUudHR5KX0sZnN5bmMoRWUpe0VlLnR0eS5vcHMuZnN5bmMoRWUudHR5KX0scmVhZChFZSxWZSxzdCxNdCxZdCl7aWYoIUVlLnR0eXx8IUVlLnR0eS5vcHMuZ2V0X2NoYXIpdGhyb3cgbmV3IE90LkVycm5vRXJyb3IoNjApO2Zv''@;'; put 'put ''cih2YXIgYW49MCxJbj0wO0luPE10O0luKyspe3ZhciBLbjt0cnl7S249RWUudHR5Lm9wcy5nZXRfY2hhcihFZS50dHkpfWNhdGNoe3Rocm93IG5ldyBPdC5FcnJub0Vycm9yKDI5KX1pZih2b2lkIDA9PT1LbiYmMD09PWFuKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDYpO2lmKG51bGw9PUtu''@;'; put 'put ''KWJyZWFrO2FuKyssVmVbc3QrSW5dPUtufXJldHVybiBhbiYmKEVlLm5vZGUuYXRpbWU9RGF0ZS5ub3coKSksYW59LHdyaXRlKEVlLFZlLHN0LE10LFl0KXtpZighRWUudHR5fHwhRWUudHR5Lm9wcy5wdXRfY2hhcil0aHJvdyBuZXcgT3QuRXJybm9FcnJvcig2MCk7dHJ5e2Zvcih2YXIgYW49''@;'; put 'put ''MDthbjxNdDthbisrKUVlLnR0eS5vcHMucHV0X2NoYXIoRWUudHR5LFZlW3N0K2FuXSl9Y2F0Y2h7dGhyb3cgbmV3IE90LkVycm5vRXJyb3IoMjkpfXJldHVybiBNdCYmKEVlLm5vZGUubXRpbWU9RWUubm9kZS5jdGltZT1EYXRlLm5vdygpKSxhbn19LGRlZmF1bHRfdHR5X29wczp7Z2V0X2No''@;'; put 'put ''YXI6RWU9PlNvLmxlbmd0aD9Tby5zaGlmdCgpOm51bGwscHV0X2NoYXIoRWUsVmUpe251bGw9PT1WZXx8MTA9PT1WZT8oRShWbihFZS5vdXRwdXQpKSxFZS5vdXRwdXQ9W10pOjAhPVZlJiZFZS5vdXRwdXQucHVzaChWZSl9LGZzeW5jKEVlKXtFZS5vdXRwdXQ/Lmxlbmd0aD4wJiYoRShWbihF''@;'; put 'put ''ZS5vdXRwdXQpKSxFZS5vdXRwdXQ9W10pfSxpb2N0bF90Y2dldHM6RWU9Pih7Y19pZmxhZzoyNTg1NixjX29mbGFnOjUsY19jZmxhZzoxOTEsY19sZmxhZzozNTM4NyxjX2NjOlszLDI4LDEyNywyMSw0LDAsMSwwLDE3LDE5LDI2LDAsMTgsMTUsMjMsMjIsMCwwLDAsMCwwLDAsMCwwLDAsMCww''@;'; put 'put ''LDAsMCwwLDAsMF19KSxpb2N0bF90Y3NldHM6KEVlLFZlLHN0KT0+MCxpb2N0bF90aW9jZ3dpbnN6OkVlPT5bMjQsODBdfSxkZWZhdWx0X3R0eTFfb3BzOntwdXRfY2hhcihFZSxWZSl7bnVsbD09PVZlfHwxMD09PVZlPyhPKFZuKEVlLm91dHB1dCkpLEVlLm91dHB1dD1bXSk6MCE9VmUmJkVl''@;'; put 'put ''Lm91dHB1dC5wdXNoKFZlKX0sZnN5bmMoRWUpe0VlLm91dHB1dD8ubGVuZ3RoPjAmJihPKFZuKEVlLm91dHB1dCkpLEVlLm91dHB1dD1bXSl9fX0sZzk9KEVlLFZlKT0+TWF0aC5jZWlsKEVlL1ZlKSpWZSxzeT1FZT0+e0VlPWc5KEVlLDY1NTM2KTt2YXIgVmU9WCRlKDY1NTM2LEVlKTtyZXR1''@;'; put 'put ''cm4gVmUmJigoRWUsVmUpPT57dXQuZmlsbCgwLEVlLEVlK1ZlKX0pKFZlLEVlKSxWZX0sR2E9e29wc190YWJsZTpudWxsLG1vdW50OkVlPT5HYS5jcmVhdGVOb2RlKG51bGwsIi8iLDE2ODk1LDApLGNyZWF0ZU5vZGUoRWUsVmUsc3QsTXQpe2lmKE90LmlzQmxrZGV2KHN0KXx8T3QuaXNGSUZP''@;'; put 'put ''KHN0KSl0aHJvdyBuZXcgT3QuRXJybm9FcnJvcig2Myk7R2Eub3BzX3RhYmxlfHw9e2Rpcjp7bm9kZTp7Z2V0YXR0cjpHYS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6R2Eubm9kZV9vcHMuc2V0YXR0cixsb29rdXA6R2Eubm9kZV9vcHMubG9va3VwLG1rbm9kOkdhLm5vZGVfb3BzLm1rbm9k''@;'; put 'put ''LHJlbmFtZTpHYS5ub2RlX29wcy5yZW5hbWUsdW5saW5rOkdhLm5vZGVfb3BzLnVubGluayxybWRpcjpHYS5ub2RlX29wcy5ybWRpcixyZWFkZGlyOkdhLm5vZGVfb3BzLnJlYWRkaXIsc3ltbGluazpHYS5ub2RlX29wcy5zeW1saW5rfSxzdHJlYW06e2xsc2VlazpHYS5zdHJlYW1fb3BzLmxs''@;'; put 'put ''c2Vla319LGZpbGU6e25vZGU6e2dldGF0dHI6R2Eubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOkdhLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTp7bGxzZWVrOkdhLnN0cmVhbV9vcHMubGxzZWVrLHJlYWQ6R2Euc3RyZWFtX29wcy5yZWFkLHdyaXRlOkdhLnN0cmVhbV9vcHMud3JpdGUsbW1h''@;'; put 'put ''cDpHYS5zdHJlYW1fb3BzLm1tYXAsbXN5bmM6R2Euc3RyZWFtX29wcy5tc3luY319LGxpbms6e25vZGU6e2dldGF0dHI6R2Eubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOkdhLm5vZGVfb3BzLnNldGF0dHIscmVhZGxpbms6R2Eubm9kZV9vcHMucmVhZGxpbmt9LHN0cmVhbTp7fX0sY2hyZGV2''@;'; put 'put ''Ontub2RlOntnZXRhdHRyOkdhLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpHYS5ub2RlX29wcy5zZXRhdHRyfSxzdHJlYW06T3QuY2hyZGV2X3N0cmVhbV9vcHN9fTt2YXIgWXQ9T3QuY3JlYXRlTm9kZShFZSxWZSxzdCxNdCk7cmV0dXJuIE90LmlzRGlyKFl0Lm1vZGUpPyhZdC5ub2RlX29w''@;'; put 'put ''cz1HYS5vcHNfdGFibGUuZGlyLm5vZGUsWXQuc3RyZWFtX29wcz1HYS5vcHNfdGFibGUuZGlyLnN0cmVhbSxZdC5jb250ZW50cz17fSk6T3QuaXNGaWxlKFl0Lm1vZGUpPyhZdC5ub2RlX29wcz1HYS5vcHNfdGFibGUuZmlsZS5ub2RlLFl0LnN0cmVhbV9vcHM9R2Eub3BzX3RhYmxlLmZpbGUu''@;'; put 'put ''c3RyZWFtLFl0LnVzZWRCeXRlcz0wLFl0LmNvbnRlbnRzPUdhLmVtcHR5RmlsZUNvbnRlbnRzPz89bmV3IFVpbnQ4QXJyYXkoMCkpOk90LmlzTGluayhZdC5tb2RlKT8oWXQubm9kZV9vcHM9R2Eub3BzX3RhYmxlLmxpbmsubm9kZSxZdC5zdHJlYW1fb3BzPUdhLm9wc190YWJsZS5saW5rLnN0''@;'; put 'put ''cmVhbSk6T3QuaXNDaHJkZXYoWXQubW9kZSkmJihZdC5ub2RlX29wcz1HYS5vcHNfdGFibGUuY2hyZGV2Lm5vZGUsWXQuc3RyZWFtX29wcz1HYS5vcHNfdGFibGUuY2hyZGV2LnN0cmVhbSksWXQuYXRpbWU9WXQubXRpbWU9WXQuY3RpbWU9RGF0ZS5ub3coKSxFZSYmKEVlLmNvbnRlbnRzW1Zl''@;'; put 'put ''XT1ZdCxFZS5hdGltZT1FZS5tdGltZT1FZS5jdGltZT1ZdC5hdGltZSksWXR9LGdldEZpbGVEYXRhQXNUeXBlZEFycmF5OkVlPT5FZS5jb250ZW50cy5zdWJhcnJheSgwLEVlLnVzZWRCeXRlcyksZXhwYW5kRmlsZVN0b3JhZ2UoRWUsVmUpe3ZhciBzdD1FZS5jb250ZW50cy5sZW5ndGg7aWYo''@;'; put 'put ''IShzdD49VmUpKXtWZT1NYXRoLm1heChWZSxzdCooc3Q8MTA0ODU3Nj8yOjEuMTI1KT4+PjApLHN0JiYoVmU9TWF0aC5tYXgoVmUsMjU2KSk7dmFyIFl0PUdhLmdldEZpbGVEYXRhQXNUeXBlZEFycmF5KEVlKTtFZS5jb250ZW50cz1uZXcgVWludDhBcnJheShWZSksRWUuY29udGVudHMuc2V0''@;'; put 'put ''KFl0KX19LHJlc2l6ZUZpbGVTdG9yYWdlKEVlLFZlKXtpZihFZS51c2VkQnl0ZXMhPVZlKXt2YXIgc3Q9RWUuY29udGVudHM7RWUuY29udGVudHM9bmV3IFVpbnQ4QXJyYXkoVmUpLEVlLmNvbnRlbnRzLnNldChzdC5zdWJhcnJheSgwLE1hdGgubWluKFZlLEVlLnVzZWRCeXRlcykpKSxFZS51''@;'; put 'put ''c2VkQnl0ZXM9VmV9fSxub2RlX29wczp7Z2V0YXR0cihFZSl7dmFyIFZlPXt9O3JldHVybiBWZS5kZXY9T3QuaXNDaHJkZXYoRWUubW9kZSk/RWUuaWQ6MSxWZS5pbm89RWUuaWQsVmUubW9kZT1FZS5tb2RlLFZlLm5saW5rPTEsVmUudWlkPTAsVmUuZ2lkPTAsVmUucmRldj1FZS5yZGV2LFZl''@;'; put 'put ''LnNpemU9T3QuaXNEaXIoRWUubW9kZSk/NDA5NjpPdC5pc0ZpbGUoRWUubW9kZSk/RWUudXNlZEJ5dGVzOk90LmlzTGluayhFZS5tb2RlKT9FZS5saW5rLmxlbmd0aDowLFZlLmF0aW1lPW5ldyBEYXRlKEVlLmF0aW1lKSxWZS5tdGltZT1uZXcgRGF0ZShFZS5tdGltZSksVmUuY3RpbWU9bmV3''@;'; put 'put ''IERhdGUoRWUuY3RpbWUpLFZlLmJsa3NpemU9NDA5NixWZS5ibG9ja3M9TWF0aC5jZWlsKFZlLnNpemUvVmUuYmxrc2l6ZSksVmV9LHNldGF0dHIoRWUsVmUpe2ZvcihsZXQgc3Qgb2ZbIm1vZGUiLCJhdGltZSIsIm10aW1lIiwiY3RpbWUiXSludWxsIT1WZVtzdF0mJihFZVtzdF09VmVbc3Rd''@;'; put 'put ''KTt2b2lkIDAhPT1WZS5zaXplJiZHYS5yZXNpemVGaWxlU3RvcmFnZShFZSxWZS5zaXplKX0sbG9va3VwKEVlLFZlKXt0aHJvdyBHYS5kb2VzTm90RXhpc3RFcnJvcnx8KEdhLmRvZXNOb3RFeGlzdEVycm9yPW5ldyBPdC5FcnJub0Vycm9yKDQ0KSxHYS5kb2VzTm90RXhpc3RFcnJvci5zdGFj''@;'; put 'put ''az0iPGdlbmVyaWMgZXJyb3IsIG5vIHN0YWNrPiIpLEdhLmRvZXNOb3RFeGlzdEVycm9yfSxta25vZDooRWUsVmUsc3QsTXQpPT5HYS5jcmVhdGVOb2RlKEVlLFZlLHN0LE10KSxyZW5hbWUoRWUsVmUsc3Qpe3ZhciBNdDt0cnl7TXQ9T3QubG9va3VwTm9kZShWZSxzdCl9Y2F0Y2h7fWlmKE10''@;'; put 'put ''KXtpZihPdC5pc0RpcihFZS5tb2RlKSlmb3IodmFyIFl0IGluIE10LmNvbnRlbnRzKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDU1KTtPdC5oYXNoUmVtb3ZlTm9kZShNdCl9ZGVsZXRlIEVlLnBhcmVudC5jb250ZW50c1tFZS5uYW1lXSxWZS5jb250ZW50c1tzdF09RWUsRWUubmFtZT1zdCxW''@;'; put 'put ''ZS5jdGltZT1WZS5tdGltZT1FZS5wYXJlbnQuY3RpbWU9RWUucGFyZW50Lm10aW1lPURhdGUubm93KCl9LHVubGluayhFZSxWZSl7ZGVsZXRlIEVlLmNvbnRlbnRzW1ZlXSxFZS5jdGltZT1FZS5tdGltZT1EYXRlLm5vdygpfSxybWRpcihFZSxWZSl7dmFyIHN0PU90Lmxvb2t1cE5vZGUoRWUs''@;'; put 'put ''VmUpO2Zvcih2YXIgTXQgaW4gc3QuY29udGVudHMpdGhyb3cgbmV3IE90LkVycm5vRXJyb3IoNTUpO2RlbGV0ZSBFZS5jb250ZW50c1tWZV0sRWUuY3RpbWU9RWUubXRpbWU9RGF0ZS5ub3coKX0scmVhZGRpcjpFZT0+WyIuIiwiLi4iLC4uLk9iamVjdC5rZXlzKEVlLmNvbnRlbnRzKV0sc3lt''@;'; put 'put ''bGluayhFZSxWZSxzdCl7dmFyIE10PUdhLmNyZWF0ZU5vZGUoRWUsVmUsNDE0NzEsMCk7cmV0dXJuIE10Lmxpbms9c3QsTXR9LHJlYWRsaW5rKEVlKXtpZighT3QuaXNMaW5rKEVlLm1vZGUpKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gRWUubGlua319LHN0cmVhbV9vcHM6''@;'; put 'put ''e3JlYWQoRWUsVmUsc3QsTXQsWXQpe3ZhciBhbj1FZS5ub2RlLmNvbnRlbnRzO2lmKFl0Pj1FZS5ub2RlLnVzZWRCeXRlcylyZXR1cm4gMDt2YXIgSW49TWF0aC5taW4oRWUubm9kZS51c2VkQnl0ZXMtWXQsTXQpO3JldHVybiBWZS5zZXQoYW4uc3ViYXJyYXkoWXQsWXQrSW4pLHN0KSxJbn0s''@;'; put 'put ''d3JpdGUoRWUsVmUsc3QsTXQsWXQsYW4pe2lmKFZlLmJ1ZmZlcj09PVRvLmJ1ZmZlciYmKGFuPSExKSwhTXQpcmV0dXJuIDA7dmFyIEluPUVlLm5vZGU7cmV0dXJuIEluLm10aW1lPUluLmN0aW1lPURhdGUubm93KCksYW4/KEluLmNvbnRlbnRzPVZlLnN1YmFycmF5KHN0LHN0K010KSxJbi51''@;'; put 'put ''c2VkQnl0ZXM9TXQpOjA9PT1Jbi51c2VkQnl0ZXMmJjA9PT1ZdD8oSW4uY29udGVudHM9VmUuc2xpY2Uoc3Qsc3QrTXQpLEluLnVzZWRCeXRlcz1NdCk6KEdhLmV4cGFuZEZpbGVTdG9yYWdlKEluLFl0K010KSxJbi5jb250ZW50cy5zZXQoVmUuc3ViYXJyYXkoc3Qsc3QrTXQpLFl0KSxJbi51''@;'; put 'put ''c2VkQnl0ZXM9TWF0aC5tYXgoSW4udXNlZEJ5dGVzLFl0K010KSksTXR9LGxsc2VlayhFZSxWZSxzdCl7dmFyIE10PVZlO2lmKDE9PT1zdD9NdCs9RWUucG9zaXRpb246Mj09PXN0JiZPdC5pc0ZpbGUoRWUubm9kZS5tb2RlKSYmKE10Kz1FZS5ub2RlLnVzZWRCeXRlcyksTXQ8MCl0aHJvdyBu''@;'; put 'put ''ZXcgT3QuRXJybm9FcnJvcigyOCk7cmV0dXJuIE10fSxtbWFwKEVlLFZlLHN0LE10LFl0KXtpZighT3QuaXNGaWxlKEVlLm5vZGUubW9kZSkpdGhyb3cgbmV3IE90LkVycm5vRXJyb3IoNDMpO3ZhciBhbixJbixLbj1FZS5ub2RlLmNvbnRlbnRzO2lmKDImWXR8fEtuLmJ1ZmZlciE9PVRvLmJ1''@;'; put 'put ''ZmZlcil7aWYoSW49ITAsIShhbj1zeShWZSkpKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDQ4KTtLbiYmKChzdD4wfHxzdCtWZTxLbi5sZW5ndGgpJiYoS249S24uc3ViYXJyYXk/S24uc3ViYXJyYXkoc3Qsc3QrVmUpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKEtuLHN0LHN0K1ZlKSks''@;'; put 'put ''VG8uc2V0KEtuLGFuKSl9ZWxzZSBJbj0hMSxhbj1Lbi5ieXRlT2Zmc2V0O3JldHVybntwdHI6YW4sYWxsb2NhdGVkOklufX0sbXN5bmM6KEVlLFZlLHN0LE10LFl0KT0+KEdhLnN0cmVhbV9vcHMud3JpdGUoRWUsVmUsMCxNdCxzdCwhMSksMCl9fSxfZD1FZT0+KCJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''RWUmJihFZT1ibChFZSwhMCkpLEVlLnN1YmFycmF5fHwoRWU9bmV3IFVpbnQ4QXJyYXkoRWUpKSxFZSksTDE9KEVlLFZlKT0+e3ZhciBzdD0wO3JldHVybiBFZSYmKHN0fD0zNjUpLFZlJiYoc3R8PTE0Niksc3R9LGMzPWZ1bmN0aW9uKCl7dmFyIEVlPUNyKGZ1bmN0aW9uKihWZSl7dmFyIHN0''@;'; put 'put ''PXlpZWxkIHUoVmUpO3JldHVybiBuZXcgVWludDhBcnJheShzdCl9KTtyZXR1cm4gZnVuY3Rpb24oc3Qpe3JldHVybiBFZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLG9wPW51bGwsZmY9ZnVuY3Rpb24oKXt2YXIgRWU9Q3IoZnVuY3Rpb24qKCl7cmV0dXJuIG9wfSk7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIEVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksTzE9MCxlNT1udWxsLHQ4PVtdLENBPWZ1bmN0aW9uKCl7dmFyIEVlPUNyKGZ1bmN0aW9uKihWZSxzdCl7Zm9yKHZhciBNdCBvZih0eXBlb2YgQnJvd3NlcjwidSImJkJyb3dzZXIuaW5pdCgpLHQ4KSlpZihNdC5jYW5I''@;'; put 'put ''YW5kbGUoc3QpKXJldHVybiBNdC5oYW5kbGUoVmUsc3QpO3JldHVybiBWZX0pO3JldHVybiBmdW5jdGlvbihzdCxNdCl7cmV0dXJuIEVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksbHk9ZnVuY3Rpb24oKXt2YXIgRWU9Q3IoZnVuY3Rpb24qKFZlLHN0LE10LFl0LGFuLEluLEtuLGxpKXt2''@;'; put 'put ''YXIgUWk9c3Q/WW8ucmVzb2x2ZShqci5qb2luMihWZSxzdCkpOlZlO08xfHwob3A9bmV3IFByb21pc2UoVmU9PmU1PVZlKSksTzErKzt0cnl7dmFyIElhPU10OyJzdHJpbmciPT10eXBlb2YgTXQmJihJYT15aWVsZCBjMyhNdCkpLElhPXlpZWxkIENBKElhLFFpKSxsaT8uKCksSW58fCgoLi4u''@;'; put 'put ''RWUpPT57T3QuY3JlYXRlRGF0YUZpbGUoLi4uRWUpfSkoVmUsc3QsSWEsWXQsYW4sS24pfWZpbmFsbHl7LS1PMXx8ZTUoKX19KTtyZXR1cm4gZnVuY3Rpb24oc3QsTXQsWXQsYW4sSW4sS24sbGksUWkpe3JldHVybiBFZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLE90PXtyb290Om51bGws''@;'; put 'put ''bW91bnRzOltdLGRldmljZXM6e30sc3RyZWFtczpbXSxuZXh0SW5vZGU6MSxuYW1lVGFibGU6bnVsbCxjdXJyZW50UGF0aDoiLyIsaW5pdGlhbGl6ZWQ6ITEsaWdub3JlUGVybWlzc2lvbnM6ITAsZmlsZXN5c3RlbXM6bnVsbCxzeW5jRlNSZXF1ZXN0czowLEVycm5vRXJyb3I6Y2xhc3N7bmFt''@;'; put 'put ''ZT0iRXJybm9FcnJvciI7Y29uc3RydWN0b3IoRWUpe3RoaXMuZXJybm89RWV9fSxGU1N0cmVhbTpjbGFzc3tzaGFyZWQ9e307Z2V0IG9iamVjdCgpe3JldHVybiB0aGlzLm5vZGV9c2V0IG9iamVjdChFZSl7dGhpcy5ub2RlPUVlfWdldCBpc1JlYWQoKXtyZXR1cm4gMSE9KDIwOTcxNTUmdGhp''@;'; put 'put ''cy5mbGFncyl9Z2V0IGlzV3JpdGUoKXtyZXR1cm4hISgyMDk3MTU1JnRoaXMuZmxhZ3MpfWdldCBpc0FwcGVuZCgpe3JldHVybiAxMDI0JnRoaXMuZmxhZ3N9Z2V0IGZsYWdzKCl7cmV0dXJuIHRoaXMuc2hhcmVkLmZsYWdzfXNldCBmbGFncyhFZSl7dGhpcy5zaGFyZWQuZmxhZ3M9RWV9Z2V0''@;'; put 'put ''IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuc2hhcmVkLnBvc2l0aW9ufXNldCBwb3NpdGlvbihFZSl7dGhpcy5zaGFyZWQucG9zaXRpb249RWV9fSxGU05vZGU6Y2xhc3N7bm9kZV9vcHM9e307c3RyZWFtX29wcz17fTtyZWFkTW9kZT0zNjU7d3JpdGVNb2RlPTE0Njttb3VudGVkPW51bGw7Y29u''@;'; put 'put ''c3RydWN0b3IoRWUsVmUsc3QsTXQpe0VlfHwoRWU9dGhpcyksdGhpcy5wYXJlbnQ9RWUsdGhpcy5tb3VudD1FZS5tb3VudCx0aGlzLmlkPU90Lm5leHRJbm9kZSsrLHRoaXMubmFtZT1WZSx0aGlzLm1vZGU9c3QsdGhpcy5yZGV2PU10LHRoaXMuYXRpbWU9dGhpcy5tdGltZT10aGlzLmN0aW1l''@;'; put 'put ''PURhdGUubm93KCl9Z2V0IHJlYWQoKXtyZXR1cm4odGhpcy5tb2RlJnRoaXMucmVhZE1vZGUpPT09dGhpcy5yZWFkTW9kZX1zZXQgcmVhZChFZSl7RWU/dGhpcy5tb2RlfD10aGlzLnJlYWRNb2RlOnRoaXMubW9kZSY9fnRoaXMucmVhZE1vZGV9Z2V0IHdyaXRlKCl7cmV0dXJuKHRoaXMubW9k''@;'; put 'put ''ZSZ0aGlzLndyaXRlTW9kZSk9PT10aGlzLndyaXRlTW9kZX1zZXQgd3JpdGUoRWUpe0VlP3RoaXMubW9kZXw9dGhpcy53cml0ZU1vZGU6dGhpcy5tb2RlJj1+dGhpcy53cml0ZU1vZGV9Z2V0IGlzRm9sZGVyKCl7cmV0dXJuIE90LmlzRGlyKHRoaXMubW9kZSl9Z2V0IGlzRGV2aWNlKCl7cmV0''@;'; put 'put ''dXJuIE90LmlzQ2hyZGV2KHRoaXMubW9kZSl9YWRkTGlzdGVuZXIoRWUsVmU9ITEpe3ZhciBzdD17Y2I6RWUsZXhjbHVzaXZlOlZlfSxNdD10aGlzLmxpc3RlbmVycz8/PW5ldyBTZXQ7cmV0dXJuIE10LmFkZChzdCkse2xpc3RlbmVyczpNdCxlbnRyeTpzdH19bm90aWZ5TGlzdGVuZXJzKEVl''@;'; put 'put ''KXtpZih0aGlzLmxpc3RlbmVycyl7dmFyIFZlO2Zvcih2YXIgc3Qgb2YgdGhpcy5saXN0ZW5lcnMpc3QuZXhjbHVzaXZlPyhWZXx8PVtdKS5wdXNoKHN0KTpzdC5jYihFZSk7aWYoVmUpe3ZhciBNdD0odGhpcy5leGNsVHVybnx8MCklVmUubGVuZ3RoO3RoaXMuZXhjbFR1cm49TXQrMSxWZVtN''@;'; put 'put ''dF0uY2IoRWUpfX19fSxsb29rdXBQYXRoKEVlLFZlPXt9KXtpZighRWUpdGhyb3cgbmV3IE90LkVycm5vRXJyb3IoNDQpO1ZlLmZvbGxvd19tb3VudD8/PSEwLGpyLmlzQWJzKEVlKXx8KEVlPU90LmN3ZCgpKyIvIitFZSk7ZTpmb3IodmFyIHN0PTA7c3Q8NDA7c3QrKyl7Zm9yKHZhciBNdD1F''@;'; put 'put ''ZS5zcGxpdCgiLyIpLmZpbHRlcihRaT0+ISFRaSksWXQ9T3Qucm9vdCxhbj0iLyIsSW49MDtJbjxNdC5sZW5ndGg7SW4rKyl7dmFyIEtuPUluPT09TXQubGVuZ3RoLTE7aWYoS24mJlZlLnBhcmVudClicmVhaztpZigiLiIhPT1NdFtJbl0pe2lmKCIuLiI9PT1NdFtJbl0pe2lmKGFuPWpyLmRp''@;'; put 'put ''cm5hbWUoYW4pLE90LmlzUm9vdChZdCkpe0VlPWFuKyIvIitNdC5zbGljZShJbisxKS5qb2luKCIvIiksc3QtLTtjb250aW51ZSBlfVl0PVl0LnBhcmVudDtjb250aW51ZX1hbj1qci5qb2luMihhbixNdFtJbl0pO3RyeXtZdD1PdC5sb29rdXBOb2RlKFl0LE10W0luXSl9Y2F0Y2goUWkpe2lm''@;'; put 'put ''KDQ0PT09UWk/LmVycm5vJiZLbiYmVmUubm9lbnRfb2theSlyZXR1cm57cGF0aDphbn07dGhyb3cgUWl9aWYoT3QuaXNNb3VudHBvaW50KFl0KSYmKCFLbnx8VmUuZm9sbG93X21vdW50KSYmKFl0PVl0Lm1vdW50ZWQucm9vdCksT3QuaXNMaW5rKFl0Lm1vZGUpJiYoIUtufHxWZS5mb2xsb3cp''@;'; put 'put ''KXtpZighWXQubm9kZV9vcHMucmVhZGxpbmspdGhyb3cgbmV3IE90LkVycm5vRXJyb3IoNTIpO3ZhciBsaT1ZdC5ub2RlX29wcy5yZWFkbGluayhZdCk7anIuaXNBYnMobGkpfHwobGk9anIuZGlybmFtZShhbikrIi8iK2xpKSxFZT1saSsiLyIrTXQuc2xpY2UoSW4rMSkuam9pbigiLyIpO2Nv''@;'; put 'put ''bnRpbnVlIGV9fX1yZXR1cm57cGF0aDphbixub2RlOll0fX10aHJvdyBuZXcgT3QuRXJybm9FcnJvcigzMil9LGdldFBhdGgoRWUpe2Zvcih2YXIgVmU7Oyl7aWYoT3QuaXNSb290KEVlKSl7dmFyIHN0PUVlLm1vdW50Lm1vdW50cG9pbnQ7cmV0dXJuIFZlPyIvIiE9PXN0W3N0Lmxlbmd0aC0x''@;'; put 'put ''XT9gJHtzdH0vJHtWZX1gOnN0K1ZlOnN0fVZlPVZlP2Ake0VlLm5hbWV9LyR7VmV9YDpFZS5uYW1lLEVlPUVlLnBhcmVudH19LGhhc2hOYW1lKEVlLFZlKXtmb3IodmFyIHN0PTAsTXQ9MDtNdDxWZS5sZW5ndGg7TXQrKylzdD0oc3Q8PDUpLXN0K1ZlLmNoYXJDb2RlQXQoTXQpfDA7cmV0dXJu''@;'; put 'put ''KEVlK3N0Pj4+MCklT3QubmFtZVRhYmxlLmxlbmd0aH0saGFzaEFkZE5vZGUoRWUpe3ZhciBWZT1PdC5oYXNoTmFtZShFZS5wYXJlbnQuaWQsRWUubmFtZSk7RWUubmFtZV9uZXh0PU90Lm5hbWVUYWJsZVtWZV0sT3QubmFtZVRhYmxlW1ZlXT1FZX0saGFzaFJlbW92ZU5vZGUoRWUpe3ZhciBW''@;'; put 'put ''ZT1PdC5oYXNoTmFtZShFZS5wYXJlbnQuaWQsRWUubmFtZSk7aWYoT3QubmFtZVRhYmxlW1ZlXT09PUVlKU90Lm5hbWVUYWJsZVtWZV09RWUubmFtZV9uZXh0O2Vsc2UgZm9yKHZhciBzdD1PdC5uYW1lVGFibGVbVmVdO3N0Oyl7aWYoc3QubmFtZV9uZXh0PT09RWUpe3N0Lm5hbWVfbmV4dD1F''@;'; put 'put ''ZS5uYW1lX25leHQ7YnJlYWt9c3Q9c3QubmFtZV9uZXh0fX0sbG9va3VwTm9kZShFZSxWZSl7dmFyIHN0PU90Lm1heUxvb2t1cChFZSk7aWYoc3QpdGhyb3cgbmV3IE90LkVycm5vRXJyb3Ioc3QpO2Zvcih2YXIgTXQ9T3QuaGFzaE5hbWUoRWUuaWQsVmUpLFl0PU90Lm5hbWVUYWJsZVtNdF07''@;'; put 'put ''WXQ7WXQ9WXQubmFtZV9uZXh0KWlmKFl0LnBhcmVudC5pZD09PUVlLmlkJiZZdC5uYW1lPT09VmUpcmV0dXJuIFl0O3JldHVybiBPdC5sb29rdXAoRWUsVmUpfSxjcmVhdGVOb2RlKEVlLFZlLHN0LE10KXt2YXIgWXQ9bmV3IE90LkZTTm9kZShFZSxWZSxzdCxNdCk7cmV0dXJuIE90Lmhhc2hB''@;'; put 'put ''ZGROb2RlKFl0KSxZdH0sZGVzdHJveU5vZGUoRWUpe090Lmhhc2hSZW1vdmVOb2RlKEVlKX0saXNSb290OkVlPT5FZT09PUVlLnBhcmVudCxpc01vdW50cG9pbnQ6RWU9PiEhRWUubW91bnRlZCxpc0ZpbGU6RWU9PjMyNzY4PT0oNjE0NDAmRWUpLGlzRGlyOkVlPT4xNjM4ND09KDYxNDQwJkVl''@;'; put 'put ''KSxpc0xpbms6RWU9PjQwOTYwPT0oNjE0NDAmRWUpLGlzQ2hyZGV2OkVlPT44MTkyPT0oNjE0NDAmRWUpLGlzQmxrZGV2OkVlPT4yNDU3Nj09KDYxNDQwJkVlKSxpc0ZJRk86RWU9PjQwOTY9PSg2MTQ0MCZFZSksaXNTb2NrZXQ6RWU9PiEoNDkxNTImfkVlKSxmbGFnc1RvUGVybWlzc2lvblN0''@;'; put 'put ''cmluZyhFZSl7dmFyIFZlPVsiciIsInciLCJydyJdWzMmRWVdO3JldHVybiA1MTImRWUmJihWZSs9InciKSxWZX0sbm9kZVBlcm1pc3Npb25zOihFZSxWZSk9Pk90Lmlnbm9yZVBlcm1pc3Npb25zPzA6VmUuaW5jbHVkZXMoInIiKSYmISgyOTImRWUubW9kZSl8fFZlLmluY2x1ZGVzKCJ3Iikm''@;'; put 'put ''JiEoMTQ2JkVlLm1vZGUpfHxWZS5pbmNsdWRlcygieCIpJiYhKDczJkVlLm1vZGUpPzI6MCxtYXlMb29rdXA6RWU9Pk90LmlzRGlyKEVlLm1vZGUpP090Lm5vZGVQZXJtaXNzaW9ucyhFZSwieCIpfHwoRWUubm9kZV9vcHMubG9va3VwPzA6Mik6NTQsbWF5Q3JlYXRlKEVlLFZlKXtpZighT3Qu''@;'; put 'put ''aXNEaXIoRWUubW9kZSkpcmV0dXJuIDU0O3RyeXtyZXR1cm4gT3QubG9va3VwTm9kZShFZSxWZSksMjB9Y2F0Y2h7fXJldHVybiBPdC5ub2RlUGVybWlzc2lvbnMoRWUsInd4Iil9LG1heURlbGV0ZShFZSxWZSxzdCl7dmFyIE10O3RyeXtNdD1PdC5sb29rdXBOb2RlKEVlLFZlKX1jYXRjaChh''@;'; put 'put ''bil7cmV0dXJuIGFuLmVycm5vfXZhciBZdD1PdC5ub2RlUGVybWlzc2lvbnMoRWUsInd4Iik7aWYoWXQpcmV0dXJuIFl0O2lmKHN0KXtpZighT3QuaXNEaXIoTXQubW9kZSkpcmV0dXJuIDU0O2lmKE90LmlzUm9vdChNdCl8fE90LmdldFBhdGgoTXQpPT09T3QuY3dkKCkpcmV0dXJuIDEwfWVs''@;'; put 'put ''c2UgaWYoT3QuaXNEaXIoTXQubW9kZSkpcmV0dXJuIDMxO3JldHVybiAwfSxtYXlPcGVuKEVlLFZlKXtpZighRWUpcmV0dXJuIDQ0O2lmKE90LmlzTGluayhFZS5tb2RlKSlyZXR1cm4gMzI7dmFyIHN0PU90LmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKFZlKTtyZXR1cm4gT3QuaXNEaXIoRWUu''@;'; put 'put ''bW9kZSkmJigiciIhPT1zdHx8NTc2JlZlKT8zMTpPdC5ub2RlUGVybWlzc2lvbnMoRWUsc3QpfSxjaGVja09wRXhpc3RzKEVlLFZlKXtpZighRWUpdGhyb3cgbmV3IE90LkVycm5vRXJyb3IoVmUpO3JldHVybiBFZX0sTUFYX09QRU5fRkRTOjQwOTYsbmV4dGZkKCl7Zm9yKHZhciBFZT0wO0Vl''@;'; put 'put ''PD1PdC5NQVhfT1BFTl9GRFM7RWUrKylpZighT3Quc3RyZWFtc1tFZV0pcmV0dXJuIEVlO3Rocm93IG5ldyBPdC5FcnJub0Vycm9yKDMzKX0sZ2V0U3RyZWFtQ2hlY2tlZChFZSl7dmFyIFZlPU90LmdldFN0cmVhbShFZSk7aWYoIVZlKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDgpO3JldHVy''@;'; put 'put ''biBWZX0sZ2V0U3RyZWFtOkVlPT5PdC5zdHJlYW1zW0VlXSxjcmVhdGVTdHJlYW06KEVlLFZlPS0xKT0+KEVlPU9iamVjdC5hc3NpZ24obmV3IE90LkZTU3RyZWFtLEVlKSwtMT09VmUmJihWZT1PdC5uZXh0ZmQoKSksRWUuZmQ9VmUsT3Quc3RyZWFtc1tWZV09RWUsRWUpLGNsb3NlU3RyZWFt''@;'; put 'put ''KEVlKXtPdC5zdHJlYW1zW0VlXT1udWxsfSxkdXBTdHJlYW0oRWUsVmU9LTEpe3ZhciBzdD1PdC5jcmVhdGVTdHJlYW0oRWUsVmUpO3JldHVybiBzdC5zdHJlYW1fb3BzPy5kdXA/LihzdCksc3R9LGRvU2V0QXR0cihFZSxWZSxzdCl7dmFyIE10PUVlPy5zdHJlYW1fb3BzLnNldGF0dHIsWXQ9''@;'; put 'put ''TXQ/RWU6VmU7TXQ/Pz1WZS5ub2RlX29wcy5zZXRhdHRyLE90LmNoZWNrT3BFeGlzdHMoTXQsNjMpO3RyeXtNdChZdCxzdCl9Y2F0Y2goYW4pe3Rocm93IGFuIGluc3RhbmNlb2YgUmFuZ2VFcnJvcj9uZXcgT3QuRXJybm9FcnJvcigyMik6YW59fSxjaHJkZXZfc3RyZWFtX29wczp7b3BlbihF''@;'; put 'put ''ZSl7dmFyIFZlPU90LmdldERldmljZShFZS5ub2RlLnJkZXYpO0VlLnN0cmVhbV9vcHM9VmUuc3RyZWFtX29wcyxFZS5zdHJlYW1fb3BzLm9wZW4/LihFZSl9LGxsc2Vlaygpe3Rocm93IG5ldyBPdC5FcnJub0Vycm9yKDcwKX19LG1ham9yOkVlPT5FZT4+OCxtaW5vcjpFZT0+MjU1JkVlLG1h''@;'; put 'put ''a2VkZXY6KEVlLFZlKT0+RWU8PDh8VmUscmVnaXN0ZXJEZXZpY2UoRWUsVmUpe090LmRldmljZXNbRWVdPXtzdHJlYW1fb3BzOlZlfX0sZ2V0RGV2aWNlOkVlPT5PdC5kZXZpY2VzW0VlXSxnZXRNb3VudHMoRWUpe2Zvcih2YXIgVmU9W10sc3Q9W0VlXTtzdC5sZW5ndGg7KXt2YXIgTXQ9c3Qu''@;'; put 'put ''cG9wKCk7VmUucHVzaChNdCksc3QucHVzaCguLi5NdC5tb3VudHMpfXJldHVybiBWZX0sc3luY2ZzKEVlLFZlKXsiZnVuY3Rpb24iPT10eXBlb2YgRWUmJihWZT1FZSxFZT0hMSksT3Quc3luY0ZTUmVxdWVzdHMrKyxPdC5zeW5jRlNSZXF1ZXN0cz4xJiZPKGB3YXJuaW5nOiAke090LnN5bmNG''@;'; put 'put ''U1JlcXVlc3RzfSBGUy5zeW5jZnMgb3BlcmF0aW9ucyBpbiBmbGlnaHQgYXQgb25jZSwgcHJvYmFibHkganVzdCBkb2luZyBleHRyYSB3b3JrYCk7dmFyIHN0PU90LmdldE1vdW50cyhPdC5yb290Lm1vdW50KSxNdD0wO2Z1bmN0aW9uIFl0KEtuKXtyZXR1cm4gT3Quc3luY0ZTUmVxdWVzdHMt''@;'; put 'put ''LSxWZShLbil9ZnVuY3Rpb24gYW4oS24pe2lmKEtuKXJldHVybiBhbi5lcnJvcmVkP3ZvaWQgMDooYW4uZXJyb3JlZD0hMCxZdChLbikpOysrTXQ+PXN0Lmxlbmd0aCYmWXQobnVsbCl9Zm9yKHZhciBJbiBvZiBzdClJbi50eXBlLnN5bmNmcz9Jbi50eXBlLnN5bmNmcyhJbixFZSxhbik6YW4o''@;'; put 'put ''bnVsbCl9LG1vdW50KEVlLFZlLHN0KXt2YXIgYW4sTXQ9Ii8iPT09c3QsWXQ9IXN0O2lmKE10JiZPdC5yb290KXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDEwKTtpZighTXQmJiFZdCl7dmFyIEluPU90Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvd19tb3VudDohMX0pO2lmKHN0PUluLnBhdGgsT3Qu''@;'; put 'put ''aXNNb3VudHBvaW50KGFuPUluLm5vZGUpKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDEwKTtpZighT3QuaXNEaXIoYW4ubW9kZSkpdGhyb3cgbmV3IE90LkVycm5vRXJyb3IoNTQpfXZhciBLbj17dHlwZTpFZSxvcHRzOlZlLG1vdW50cG9pbnQ6c3QsbW91bnRzOltdfSxsaT1FZS5tb3VudChL''@;'; put 'put ''bik7cmV0dXJuIGxpLm1vdW50PUtuLEtuLnJvb3Q9bGksTXQ/T3Qucm9vdD1saTphbiYmKGFuLm1vdW50ZWQ9S24sYW4ubW91bnQmJmFuLm1vdW50Lm1vdW50cy5wdXNoKEtuKSksbGl9LHVubW91bnQoRWUpe3ZhciBWZT1PdC5sb29rdXBQYXRoKEVlLHtmb2xsb3dfbW91bnQ6ITF9KTtpZigh''@;'; put 'put ''T3QuaXNNb3VudHBvaW50KFZlLm5vZGUpKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDI4KTt2YXIgc3Q9VmUubm9kZSxNdD1zdC5tb3VudGVkLFl0PU90LmdldE1vdW50cyhNdCk7Zm9yKHZhclthbixJbl1vZiBPYmplY3QuZW50cmllcyhPdC5uYW1lVGFibGUpKWZvcig7SW47KXt2YXIgS249''@;'; put 'put ''SW4ubmFtZV9uZXh0O1l0LmluY2x1ZGVzKEluLm1vdW50KSYmT3QuZGVzdHJveU5vZGUoSW4pLEluPUtufXN0Lm1vdW50ZWQ9bnVsbDt2YXIgbGk9c3QubW91bnQubW91bnRzLmluZGV4T2YoTXQpO3N0Lm1vdW50Lm1vdW50cy5zcGxpY2UobGksMSl9LGxvb2t1cDooRWUsVmUpPT5FZS5ub2Rl''@;'; put 'put ''X29wcy5sb29rdXAoRWUsVmUpLG1rbm9kKEVlLFZlLHN0KXt2YXIgWXQ9T3QubG9va3VwUGF0aChFZSx7cGFyZW50OiEwfSkubm9kZSxhbj1qci5iYXNlbmFtZShFZSk7aWYoIWFuKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDI4KTtpZigiLiI9PT1hbnx8Ii4uIj09PWFuKXRocm93IG5ldyBP''@;'; put 'put ''dC5FcnJub0Vycm9yKDIwKTt2YXIgSW49T3QubWF5Q3JlYXRlKFl0LGFuKTtpZihJbil0aHJvdyBuZXcgT3QuRXJybm9FcnJvcihJbik7aWYoIVl0Lm5vZGVfb3BzLm1rbm9kKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDYzKTtyZXR1cm4gWXQubm9kZV9vcHMubWtub2QoWXQsYW4sVmUsc3Qp''@;'; put 'put ''fSxzdGF0ZnM6RWU9Pk90LnN0YXRmc05vZGUoT3QubG9va3VwUGF0aChFZSx7Zm9sbG93OiEwfSkubm9kZSksc3RhdGZzU3RyZWFtOkVlPT5PdC5zdGF0ZnNOb2RlKEVlLm5vZGUpLHN0YXRmc05vZGUoRWUpe3ZhciBWZT17YnNpemU6NDA5NixmcnNpemU6NDA5NixibG9ja3M6MWU2LGJmcmVl''@;'; put 'put ''OjVlNSxiYXZhaWw6NWU1LGZpbGVzOk90Lm5leHRJbm9kZSxmZnJlZTpPdC5uZXh0SW5vZGUtMSxmc2lkOjQyLGZsYWdzOjIsbmFtZWxlbjoyNTV9O3JldHVybiBFZS5ub2RlX29wcy5zdGF0ZnMmJk9iamVjdC5hc3NpZ24oVmUsRWUubm9kZV9vcHMuc3RhdGZzKEVlLm1vdW50Lm9wdHMucm9v''@;'; put 'put ''dCkpLFZlfSxjcmVhdGU6KEVlLFZlPTQzOCk9PihWZSY9NDA5NSxPdC5ta25vZChFZSxWZXw9MzI3NjgsMCkpLG1rZGlyOihFZSxWZT01MTEpPT4oVmUmPTEwMjMsT3QubWtub2QoRWUsVmV8PTE2Mzg0LDApKSxta2RpclRyZWUoRWUsVmUpe3ZhciBzdD1FZS5zcGxpdCgiLyIpLE10PSIiO2Zv''@;'; put 'put ''cih2YXIgWXQgb2Ygc3QpaWYoWXQpeyhNdHx8anIuaXNBYnMoRWUpKSYmKE10Kz0iLyIpLE10Kz1ZdDt0cnl7T3QubWtkaXIoTXQsVmUpfWNhdGNoKGFuKXtpZigyMCE9YW4uZXJybm8pdGhyb3cgYW59fX0sbWtkZXY6KEVlLFZlLHN0KT0+KHR5cGVvZiBzdD4idSImJihzdD1WZSxWZT00Mzgp''@;'; put 'put ''LE90Lm1rbm9kKEVlLFZlfD04MTkyLHN0KSksc3ltbGluayhFZSxWZSl7aWYoIVlvLnJlc29sdmUoRWUpKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDQ0KTt2YXIgTXQ9T3QubG9va3VwUGF0aChWZSx7cGFyZW50OiEwfSkubm9kZTtpZighTXQpdGhyb3cgbmV3IE90LkVycm5vRXJyb3IoNDQp''@;'; put 'put ''O3ZhciBZdD1qci5iYXNlbmFtZShWZSksYW49T3QubWF5Q3JlYXRlKE10LFl0KTtpZihhbil0aHJvdyBuZXcgT3QuRXJybm9FcnJvcihhbik7aWYoIU10Lm5vZGVfb3BzLnN5bWxpbmspdGhyb3cgbmV3IE90LkVycm5vRXJyb3IoNjMpO3JldHVybiBNdC5ub2RlX29wcy5zeW1saW5rKE10LFl0''@;'; put 'put ''LEVlKX0sbGluayhFZSxWZSxzdCl7dmFyIFl0PU90Lmxvb2t1cFBhdGgoVmUse3BhcmVudDohMH0pLm5vZGU7aWYoIVl0KXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDQ0KTt2YXIgYW49anIuYmFzZW5hbWUoVmUpLEluPU90Lm1heUNyZWF0ZShZdCxhbik7aWYoSW4pdGhyb3cgbmV3IE90LkVy''@;'; put 'put ''cm5vRXJyb3IoSW4pO2lmKCFZdC5ub2RlX29wcy5saW5rKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDM0KTtyZXR1cm4gWXQubm9kZV9vcHMubGluayhZdCxhbixFZSxzdCl9LHJlbmFtZShFZSxWZSl7dmFyIEtuLGxpLHN0PWpyLmRpcm5hbWUoRWUpLE10PWpyLmRpcm5hbWUoVmUpLFl0PWpy''@;'; put 'put ''LmJhc2VuYW1lKEVlKSxhbj1qci5iYXNlbmFtZShWZSk7aWYoS249T3QubG9va3VwUGF0aChFZSx7cGFyZW50OiEwfSkubm9kZSxsaT1PdC5sb29rdXBQYXRoKFZlLHtwYXJlbnQ6ITB9KS5ub2RlLCFLbnx8IWxpKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDQ0KTtpZihLbi5tb3VudCE9PWxp''@;'; put 'put ''Lm1vdW50KXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDc1KTt2YXIgSWEsUWk9T3QubG9va3VwTm9kZShLbixZdCksUW89WW8ucmVsYXRpdmUoRWUsTXQpO2lmKCIuIiE9PVFvLmNoYXJBdCgwKSl0aHJvdyBuZXcgT3QuRXJybm9FcnJvcigyOCk7aWYoIi4iIT09KFFvPVlvLnJlbGF0aXZlKFZl''@;'; put 'put ''LHN0KSkuY2hhckF0KDApKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDU1KTt0cnl7SWE9T3QubG9va3VwTm9kZShsaSxhbil9Y2F0Y2h7fWlmKFFpIT09SWEpe3ZhciBKbz1PdC5pc0RpcihRaS5tb2RlKSxoYT1PdC5tYXlEZWxldGUoS24sWXQsSm8pO2lmKGhhKXRocm93IG5ldyBPdC5FcnJu''@;'; put 'put ''b0Vycm9yKGhhKTtpZihoYT1JYT9PdC5tYXlEZWxldGUobGksYW4sSm8pOk90Lm1heUNyZWF0ZShsaSxhbikpdGhyb3cgbmV3IE90LkVycm5vRXJyb3IoaGEpO2lmKCFLbi5ub2RlX29wcy5yZW5hbWUpdGhyb3cgbmV3IE90LkVycm5vRXJyb3IoNjMpO2lmKE90LmlzTW91bnRwb2ludChRaSl8''@;'; put 'put ''fElhJiZPdC5pc01vdW50cG9pbnQoSWEpKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDEwKTtpZihsaSE9PUtuJiYoaGE9T3Qubm9kZVBlcm1pc3Npb25zKEtuLCJ3IikpKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKGhhKTtPdC5oYXNoUmVtb3ZlTm9kZShRaSk7dHJ5e0tuLm5vZGVfb3BzLnJl''@;'; put 'put ''bmFtZShRaSxsaSxhbiksUWkucGFyZW50PWxpfWNhdGNoKHdsKXt0aHJvdyB3bH1maW5hbGx5e090Lmhhc2hBZGROb2RlKFFpKX19fSxybWRpcihFZSl7dmFyIHN0PU90Lmxvb2t1cFBhdGgoRWUse3BhcmVudDohMH0pLm5vZGUsTXQ9anIuYmFzZW5hbWUoRWUpLFl0PU90Lmxvb2t1cE5vZGUo''@;'; put 'put ''c3QsTXQpLGFuPU90Lm1heURlbGV0ZShzdCxNdCwhMCk7aWYoYW4pdGhyb3cgbmV3IE90LkVycm5vRXJyb3IoYW4pO2lmKCFzdC5ub2RlX29wcy5ybWRpcil0aHJvdyBuZXcgT3QuRXJybm9FcnJvcig2Myk7aWYoT3QuaXNNb3VudHBvaW50KFl0KSl0aHJvdyBuZXcgT3QuRXJybm9FcnJvcigx''@;'; put 'put ''MCk7c3Qubm9kZV9vcHMucm1kaXIoc3QsTXQpLE90LmRlc3Ryb3lOb2RlKFl0KX0scmVhZGRpcihFZSl7dmFyIHN0PU90Lmxvb2t1cFBhdGgoRWUse2ZvbGxvdzohMH0pLm5vZGU7cmV0dXJuIE90LmNoZWNrT3BFeGlzdHMoc3Qubm9kZV9vcHMucmVhZGRpciw1NCkoc3QpfSx1bmxpbmsoRWUp''@;'; put 'put ''e3ZhciBzdD1PdC5sb29rdXBQYXRoKEVlLHtwYXJlbnQ6ITB9KS5ub2RlO2lmKCFzdCl0aHJvdyBuZXcgT3QuRXJybm9FcnJvcig0NCk7dmFyIE10PWpyLmJhc2VuYW1lKEVlKSxZdD1PdC5sb29rdXBOb2RlKHN0LE10KSxhbj1PdC5tYXlEZWxldGUoc3QsTXQsITEpO2lmKGFuKXRocm93IG5l''@;'; put 'put ''dyBPdC5FcnJub0Vycm9yKGFuKTtpZighc3Qubm9kZV9vcHMudW5saW5rKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDYzKTtpZihPdC5pc01vdW50cG9pbnQoWXQpKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDEwKTtzdC5ub2RlX29wcy51bmxpbmsoc3QsTXQpLE90LmRlc3Ryb3lOb2RlKFl0''@;'; put 'put ''KX0scmVhZGxpbmsoRWUpe3ZhciBzdD1PdC5sb29rdXBQYXRoKEVlKS5ub2RlO2lmKCFzdCl0aHJvdyBuZXcgT3QuRXJybm9FcnJvcig0NCk7aWYoIXN0Lm5vZGVfb3BzLnJlYWRsaW5rKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gc3Qubm9kZV9vcHMucmVhZGxpbmsoc3Qp''@;'; put 'put ''fSxzdGF0KEVlLFZlKXt2YXIgTXQ9T3QubG9va3VwUGF0aChFZSx7Zm9sbG93OiFWZX0pLm5vZGU7cmV0dXJuIE90LmNoZWNrT3BFeGlzdHMoTXQubm9kZV9vcHMuZ2V0YXR0ciw2MykoTXQpfSxmc3RhdChFZSl7dmFyIFZlPU90LmdldFN0cmVhbUNoZWNrZWQoRWUpLHN0PVZlLm5vZGUsTXQ9''@;'; put 'put ''VmUuc3RyZWFtX29wcy5nZXRhdHRyLFl0PU10P1ZlOnN0O3JldHVybiBNdD8/PXN0Lm5vZGVfb3BzLmdldGF0dHIsT3QuY2hlY2tPcEV4aXN0cyhNdCw2MyksTXQoWXQpfSxsc3RhdDpFZT0+T3Quc3RhdChFZSwhMCksZG9DaG1vZChFZSxWZSxzdCxNdCl7T3QuZG9TZXRBdHRyKEVlLFZlLHtt''@;'; put 'put ''b2RlOjQwOTUmc3R8LTQwOTYmVmUubW9kZSxjdGltZTpEYXRlLm5vdygpLGRvbnRGb2xsb3c6TXR9KX0sY2htb2QoRWUsVmUsc3Qpe3ZhciBNdDtNdD0ic3RyaW5nIj09dHlwZW9mIEVlP090Lmxvb2t1cFBhdGgoRWUse2ZvbGxvdzohc3R9KS5ub2RlOkVlLE90LmRvQ2htb2QobnVsbCxNdCxW''@;'; put 'put ''ZSxzdCl9LGxjaG1vZChFZSxWZSl7T3QuY2htb2QoRWUsVmUsITApfSxmY2htb2QoRWUsVmUpe3ZhciBzdD1PdC5nZXRTdHJlYW1DaGVja2VkKEVlKTtPdC5kb0NobW9kKHN0LHN0Lm5vZGUsVmUsITEpfSxkb0Nob3duKEVlLFZlLHN0KXtPdC5kb1NldEF0dHIoRWUsVmUse3RpbWVzdGFtcDpE''@;'; put 'put ''YXRlLm5vdygpLGRvbnRGb2xsb3c6c3R9KX0sY2hvd24oRWUsVmUsc3QsTXQpe3ZhciBZdDtZdD0ic3RyaW5nIj09dHlwZW9mIEVlP090Lmxvb2t1cFBhdGgoRWUse2ZvbGxvdzohTXR9KS5ub2RlOkVlLE90LmRvQ2hvd24obnVsbCxZdCxNdCl9LGxjaG93bihFZSxWZSxzdCl7T3QuY2hvd24o''@;'; put 'put ''RWUsVmUsc3QsITApfSxmY2hvd24oRWUsVmUsc3Qpe3ZhciBNdD1PdC5nZXRTdHJlYW1DaGVja2VkKEVlKTtPdC5kb0Nob3duKE10LE10Lm5vZGUsITEpfSxkb1RydW5jYXRlKEVlLFZlLHN0KXtpZihPdC5pc0RpcihWZS5tb2RlKSl0aHJvdyBuZXcgT3QuRXJybm9FcnJvcigzMSk7aWYoIU90''@;'; put 'put ''LmlzRmlsZShWZS5tb2RlKSl0aHJvdyBuZXcgT3QuRXJybm9FcnJvcigyOCk7dmFyIE10PU90Lm5vZGVQZXJtaXNzaW9ucyhWZSwidyIpO2lmKE10KXRocm93IG5ldyBPdC5FcnJub0Vycm9yKE10KTtPdC5kb1NldEF0dHIoRWUsVmUse3NpemU6c3QsdGltZXN0YW1wOkRhdGUubm93KCl9KX0s''@;'; put 'put ''dHJ1bmNhdGUoRWUsVmUpe2lmKFZlPDApdGhyb3cgbmV3IE90LkVycm5vRXJyb3IoMjgpO3ZhciBzdDtzdD0ic3RyaW5nIj09dHlwZW9mIEVlP090Lmxvb2t1cFBhdGgoRWUse2ZvbGxvdzohMH0pLm5vZGU6RWUsT3QuZG9UcnVuY2F0ZShudWxsLHN0LFZlKX0sZnRydW5jYXRlKEVlLFZlKXt2''@;'; put 'put ''YXIgc3Q9T3QuZ2V0U3RyZWFtQ2hlY2tlZChFZSk7aWYoVmU8MHx8ISgyMDk3MTU1JnN0LmZsYWdzKSl0aHJvdyBuZXcgT3QuRXJybm9FcnJvcigyOCk7T3QuZG9UcnVuY2F0ZShzdCxzdC5ub2RlLFZlKX0sdXRpbWUoRWUsVmUsc3QsTXQpe3ZhciBZdD1PdC5sb29rdXBQYXRoKEVlLHtmb2xs''@;'; put 'put ''b3c6IU10fSk7T3QuZG9TZXRBdHRyKG51bGwsWXQubm9kZSx7YXRpbWU6VmUsbXRpbWU6c3QsZG9udEZvbGxvdzpNdH0pfSxvcGVuKEVlLFZlLHN0PTQzOCl7aWYoIiI9PT1FZSl0aHJvdyBuZXcgT3QuRXJybm9FcnJvcig0NCk7dmFyIE10LFl0O2lmKFZlPShFZT0+e2lmKCJzdHJpbmciIT10''@;'; put 'put ''eXBlb2YgRWUpcmV0dXJuIEVlO3ZhciBzdD17cjowLCJyKyI6Mix3OjU3NywidysiOjU3OCxhOjEwODksImErIjoxMDkwfVtFZV07aWYodHlwZW9mIHN0PiJ1Iil0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmlsZSBvcGVuIG1vZGU6ICR7RWV9YCk7cmV0dXJuIHN0fSkoVmUpLHN0PTY0JlZl''@;'; put 'put ''PzQwOTUmc3R8MzI3Njg6MCwib2JqZWN0Ij09dHlwZW9mIEVlKU10PUVlO2Vsc2V7WXQ9RWUuZW5kc1dpdGgoIi8iKTt2YXIgYW49T3QubG9va3VwUGF0aChFZSx7Zm9sbG93OiEoMTMxMDcyJlZlKSxub2VudF9va2F5OiEwfSk7TXQ9YW4ubm9kZSxFZT1hbi5wYXRofXZhciBJbj0hMTtpZig2''@;'; put 'put ''NCZWZSlpZihNdCl7aWYoMTI4JlZlKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDIwKX1lbHNle2lmKFl0KXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDMxKTtNdD1PdC5ta25vZChFZSw1MTF8c3QsMCksSW49ITB9aWYoIU10KXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDQ0KTtpZihPdC5pc0No''@;'; put 'put ''cmRldihNdC5tb2RlKSYmKFZlJj0tNTEzKSw2NTUzNiZWZSYmIU90LmlzRGlyKE10Lm1vZGUpKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDU0KTtpZighSW4pe3ZhciBLbj1PdC5tYXlPcGVuKE10LFZlKTtpZihLbil0aHJvdyBuZXcgT3QuRXJybm9FcnJvcihLbil9NTEyJlZlJiYhSW4mJk90''@;'; put 'put ''LnRydW5jYXRlKE10LDApLFZlJj0tMTMxNzEzO3ZhciBsaT1PdC5jcmVhdGVTdHJlYW0oe25vZGU6TXQscGF0aDpPdC5nZXRQYXRoKE10KSxmbGFnczpWZSxzZWVrYWJsZTohMCxwb3NpdGlvbjowLHN0cmVhbV9vcHM6TXQuc3RyZWFtX29wcyx1bmdvdHRlbjpbXSxlcnJvcjohMX0pO3JldHVy''@;'; put 'put ''biBsaS5zdHJlYW1fb3BzLm9wZW4mJmxpLnN0cmVhbV9vcHMub3BlbihsaSksSW4mJk90LmNobW9kKE10LDUxMSZzdCksbGl9LGNsb3NlKEVlKXtpZihPdC5pc0Nsb3NlZChFZSkpdGhyb3cgbmV3IE90LkVycm5vRXJyb3IoOCk7RWUuZ2V0ZGVudHMmJihFZS5nZXRkZW50cz1udWxsKSxFZS5u''@;'; put 'put ''b2RlPy5ub3RpZnlMaXN0ZW5lcnMoMzIpO3RyeXtFZS5zdHJlYW1fb3BzLmNsb3NlJiZFZS5zdHJlYW1fb3BzLmNsb3NlKEVlKX1jYXRjaChWZSl7dGhyb3cgVmV9ZmluYWxseXtPdC5jbG9zZVN0cmVhbShFZS5mZCl9RWUuZmQ9bnVsbH0saXNDbG9zZWQ6RWU9Pm51bGw9PT1FZS5mZCxsbHNl''@;'; put 'put ''ZWsoRWUsVmUsc3Qpe2lmKE90LmlzQ2xvc2VkKEVlKSl0aHJvdyBuZXcgT3QuRXJybm9FcnJvcig4KTtpZighRWUuc2Vla2FibGV8fCFFZS5zdHJlYW1fb3BzLmxsc2Vlayl0aHJvdyBuZXcgT3QuRXJybm9FcnJvcig3MCk7aWYoMCE9c3QmJjEhPXN0JiYyIT1zdCl0aHJvdyBuZXcgT3QuRXJy''@;'; put 'put ''bm9FcnJvcigyOCk7cmV0dXJuIEVlLnBvc2l0aW9uPUVlLnN0cmVhbV9vcHMubGxzZWVrKEVlLFZlLHN0KSxFZS51bmdvdHRlbj1bXSxFZS5wb3NpdGlvbn0scmVhZChFZSxWZSxzdCxNdCxZdCl7aWYoTXQ8MHx8WXQ8MCl0aHJvdyBuZXcgT3QuRXJybm9FcnJvcigyOCk7aWYoT3QuaXNDbG9z''@;'; put 'put ''ZWQoRWUpKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDgpO2lmKDE9PSgyMDk3MTU1JkVlLmZsYWdzKSl0aHJvdyBuZXcgT3QuRXJybm9FcnJvcig4KTtpZihPdC5pc0RpcihFZS5ub2RlLm1vZGUpKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDMxKTtpZighRWUuc3RyZWFtX29wcy5yZWFkKXRo''@;'; put 'put ''cm93IG5ldyBPdC5FcnJub0Vycm9yKDI4KTt2YXIgYW49dHlwZW9mIFl0PCJ1IjtpZihhbil7aWYoIUVlLnNlZWthYmxlKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDcwKX1lbHNlIFl0PUVlLnBvc2l0aW9uO3ZhciBJbj1FZS5zdHJlYW1fb3BzLnJlYWQoRWUsVmUsc3QsTXQsWXQpO3JldHVy''@;'; put 'put ''biBhbnx8KEVlLnBvc2l0aW9uKz1JbiksSW59LHdyaXRlKEVlLFZlLHN0LE10LFl0LGFuKXtpZihNdDwwfHxZdDwwKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDI4KTtpZihPdC5pc0Nsb3NlZChFZSkpdGhyb3cgbmV3IE90LkVycm5vRXJyb3IoOCk7aWYoISgyMDk3MTU1JkVlLmZsYWdzKSl0''@;'; put 'put ''aHJvdyBuZXcgT3QuRXJybm9FcnJvcig4KTtpZihPdC5pc0RpcihFZS5ub2RlLm1vZGUpKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDMxKTtpZighRWUuc3RyZWFtX29wcy53cml0ZSl0aHJvdyBuZXcgT3QuRXJybm9FcnJvcigyOCk7RWUuc2Vla2FibGUmJjEwMjQmRWUuZmxhZ3MmJk90Lmxs''@;'; put 'put ''c2VlayhFZSwwLDIpO3ZhciBJbj10eXBlb2YgWXQ8InUiO2lmKEluKXtpZighRWUuc2Vla2FibGUpdGhyb3cgbmV3IE90LkVycm5vRXJyb3IoNzApfWVsc2UgWXQ9RWUucG9zaXRpb247dmFyIEtuPUVlLnN0cmVhbV9vcHMud3JpdGUoRWUsVmUsc3QsTXQsWXQsYW4pO3JldHVybiBJbnx8KEVl''@;'; put 'put ''LnBvc2l0aW9uKz1LbiksS259LG1tYXAoRWUsVmUsc3QsTXQsWXQpe2lmKDImTXQmJiEoMiZZdCkmJjIhPSgyMDk3MTU1JkVlLmZsYWdzKSl0aHJvdyBuZXcgT3QuRXJybm9FcnJvcigyKTtpZigxPT0oMjA5NzE1NSZFZS5mbGFncykpdGhyb3cgbmV3IE90LkVycm5vRXJyb3IoMik7aWYoIUVl''@;'; put 'put ''LnN0cmVhbV9vcHMubW1hcCl0aHJvdyBuZXcgT3QuRXJybm9FcnJvcig0Myk7aWYoIVZlKXRocm93IG5ldyBPdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gRWUuc3RyZWFtX29wcy5tbWFwKEVlLFZlLHN0LE10LFl0KX0sbXN5bmM6KEVlLFZlLHN0LE10LFl0KT0+RWUuc3RyZWFtX29wcy5tc3lu''@;'; put 'put ''Yz9FZS5zdHJlYW1fb3BzLm1zeW5jKEVlLFZlLHN0LE10LFl0KTowLGlvY3RsKEVlLFZlLHN0KXtpZighRWUuc3RyZWFtX29wcy5pb2N0bCl0aHJvdyBuZXcgT3QuRXJybm9FcnJvcig1OSk7cmV0dXJuIEVlLnN0cmVhbV9vcHMuaW9jdGwoRWUsVmUsc3QpfSxyZWFkRmlsZShFZSxWZT17fSl7''@;'; put 'put ''VmUuZmxhZ3M9VmUuZmxhZ3M/PzAsVmUuZW5jb2Rpbmc9VmUuZW5jb2Rpbmc/PyJiaW5hcnkiLCJ1dGY4IiE9PVZlLmVuY29kaW5nJiYiYmluYXJ5IiE9PVZlLmVuY29kaW5nJiZxdChgSW52YWxpZCBlbmNvZGluZyB0eXBlICIke1ZlLmVuY29kaW5nfSJgKTt2YXIgc3Q9T3Qub3BlbihFZSxW''@;'; put 'put ''ZS5mbGFncyksWXQ9T3Quc3RhdChFZSkuc2l6ZSxhbj1uZXcgVWludDhBcnJheShZdCk7cmV0dXJuIE90LnJlYWQoc3QsYW4sMCxZdCwwKSwidXRmOCI9PT1WZS5lbmNvZGluZyYmKGFuPVZuKGFuKSksT3QuY2xvc2Uoc3QpLGFufSx3cml0ZUZpbGUoRWUsVmUsc3Q9e30pe3N0LmZsYWdzPXN0''@;'; put 'put ''LmZsYWdzPz81Nzc7dmFyIE10PU90Lm9wZW4oRWUsc3QuZmxhZ3Msc3QubW9kZSk7VmU9X2QoVmUpLE90LndyaXRlKE10LFZlLDAsVmUuYnl0ZUxlbmd0aCx2b2lkIDAsc3QuY2FuT3duKSxPdC5jbG9zZShNdCl9LGN3ZDooKT0+T3QuY3VycmVudFBhdGgsY2hkaXIoRWUpe3ZhciBWZT1PdC5s''@;'; put 'put ''b29rdXBQYXRoKEVlLHtmb2xsb3c6ITB9KTtpZihudWxsPT09VmUubm9kZSl0aHJvdyBuZXcgT3QuRXJybm9FcnJvcig0NCk7aWYoIU90LmlzRGlyKFZlLm5vZGUubW9kZSkpdGhyb3cgbmV3IE90LkVycm5vRXJyb3IoNTQpO3ZhciBzdD1PdC5ub2RlUGVybWlzc2lvbnMoVmUubm9kZSwieCIp''@;'; put 'put ''O2lmKHN0KXRocm93IG5ldyBPdC5FcnJub0Vycm9yKHN0KTtPdC5jdXJyZW50UGF0aD1WZS5wYXRofSxjcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMoKXtPdC5ta2RpcigiL3RtcCIpLE90Lm1rZGlyKCIvaG9tZSIpLE90Lm1rZGlyKCIvaG9tZS93ZWJfdXNlciIpfSxjcmVhdGVEZWZhdWx0RGV2''@;'; put 'put ''aWNlcygpe090Lm1rZGlyKCIvZGV2IiksT3QucmVnaXN0ZXJEZXZpY2UoT3QubWFrZWRldigxLDMpLHtyZWFkOigpPT4wLHdyaXRlOihNdCxZdCxhbixJbixLbik9PkluLGxsc2VlazooKT0+MH0pLE90Lm1rZGV2KCIvZGV2L251bGwiLE90Lm1ha2VkZXYoMSwzKSksVGgucmVnaXN0ZXIoT3Qu''@;'; put 'put ''bWFrZWRldig1LDApLFRoLmRlZmF1bHRfdHR5X29wcyksVGgucmVnaXN0ZXIoT3QubWFrZWRldig2LDApLFRoLmRlZmF1bHRfdHR5MV9vcHMpLE90Lm1rZGV2KCIvZGV2L3R0eSIsT3QubWFrZWRldig1LDApKSxPdC5ta2RldigiL2Rldi90dHkxIixPdC5tYWtlZGV2KDYsMCkpO3ZhciBFZT1u''@;'; put 'put ''ZXcgVWludDhBcnJheSgxMDI0KSxWZT0wLHN0PSgpPT4oMD09PVZlJiYoZ28oRWUpLFZlPUVlLmJ5dGVMZW5ndGgpLEVlWy0tVmVdKTtPdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJyYW5kb20iLHN0KSxPdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJ1cmFuZG9tIixzdCksT3QubWtkaXIoIi9kZXYv''@;'; put 'put ''c2htIiksT3QubWtkaXIoIi9kZXYvc2htL3RtcCIpfSxjcmVhdGVTcGVjaWFsRGlyZWN0b3JpZXMoKXtPdC5ta2RpcigiL3Byb2MiKTt2YXIgRWU9T3QubWtkaXIoIi9wcm9jL3NlbGYiKTtPdC5ta2RpcigiL3Byb2Mvc2VsZi9mZCIpLE90Lm1vdW50KHttb3VudCgpe3ZhciBWZT1PdC5jcmVh''@;'; put 'put ''dGVOb2RlKEVlLCJmZCIsMTY4OTUsNzMpO3JldHVybiBWZS5zdHJlYW1fb3BzPXtsbHNlZWs6R2Euc3RyZWFtX29wcy5sbHNlZWt9LFZlLm5vZGVfb3BzPXtsb29rdXAoc3QsTXQpe3ZhciBZdD0rTXQsYW49T3QuZ2V0U3RyZWFtQ2hlY2tlZChZdCksSW49e3BhcmVudDpudWxsLG1vdW50Ontt''@;'; put 'put ''b3VudHBvaW50OiJmYWtlIn0sbm9kZV9vcHM6e3JlYWRsaW5rOigpPT5hbi5wYXRofSxpZDpZdCsxfTtyZXR1cm4gSW4ucGFyZW50PUluLElufSxyZWFkZGlyOigpPT5BcnJheS5mcm9tKE90LnN0cmVhbXMuZW50cmllcygpKS5maWx0ZXIoKFtzdCxNdF0pPT5NdCkubWFwKChbc3QsTXRdKT0+''@;'; put 'put ''c3QudG9TdHJpbmcoKSl9LFZlfX0se30sIi9wcm9jL3NlbGYvZmQiKX0sY3JlYXRlU3RhbmRhcmRTdHJlYW1zKEVlLFZlLHN0KXtFZT9PdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRpbiIsRWUpOk90LnN5bWxpbmsoIi9kZXYvdHR5IiwiL2Rldi9zdGRpbiIpLFZlP090LmNyZWF0ZURldmlj''@;'; put 'put ''ZSgiL2RldiIsInN0ZG91dCIsbnVsbCxWZSk6T3Quc3ltbGluaygiL2Rldi90dHkiLCIvZGV2L3N0ZG91dCIpLHN0P090LmNyZWF0ZURldmljZSgiL2RldiIsInN0ZGVyciIsbnVsbCxzdCk6T3Quc3ltbGluaygiL2Rldi90dHkxIiwiL2Rldi9zdGRlcnIiKSxPdC5vcGVuKCIvZGV2L3N0ZGlu''@;'; put 'put ''IiwwKSxPdC5vcGVuKCIvZGV2L3N0ZG91dCIsMSksT3Qub3BlbigiL2Rldi9zdGRlcnIiLDEpfSxzdGF0aWNJbml0KCl7T3QubmFtZVRhYmxlPW5ldyBBcnJheSg0MDk2KSxPdC5tb3VudChHYSx7fSwiLyIpLE90LmNyZWF0ZURlZmF1bHREaXJlY3RvcmllcygpLE90LmNyZWF0ZURlZmF1bHRE''@;'; put 'put ''ZXZpY2VzKCksT3QuY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCksT3QuZmlsZXN5c3RlbXM9e01FTUZTOkdhfX0saW5pdChFZSxWZSxzdCl7T3QuaW5pdGlhbGl6ZWQ9ITAsT3QuY3JlYXRlU3RhbmRhcmRTdHJlYW1zKEVlLFZlLHN0KX0scXVpdCgpe2Zvcih2YXIgRWUgb2YoT3QuaW5pdGlh''@;'; put 'put ''bGl6ZWQ9ITEsT3Quc3RyZWFtcykpRWUmJk90LmNsb3NlKEVlKX0sZmluZE9iamVjdChFZSxWZSl7dmFyIHN0PU90LmFuYWx5emVQYXRoKEVlLFZlKTtyZXR1cm4gc3QuZXhpc3RzP3N0Lm9iamVjdDpudWxsfSxhbmFseXplUGF0aChFZSxWZSl7dHJ5e0VlPShzdD1PdC5sb29rdXBQYXRoKEVl''@;'; put 'put ''LHtmb2xsb3c6IVZlfSkpLnBhdGh9Y2F0Y2h7fXZhciBNdD17aXNSb290OiExLGV4aXN0czohMSxlcnJvcjowLG5hbWU6bnVsbCxwYXRoOm51bGwsb2JqZWN0Om51bGwscGFyZW50RXhpc3RzOiExLHBhcmVudFBhdGg6bnVsbCxwYXJlbnRPYmplY3Q6bnVsbH07dHJ5e3ZhciBzdD1PdC5sb29r''@;'; put 'put ''dXBQYXRoKEVlLHtwYXJlbnQ6ITB9KTtNdC5wYXJlbnRFeGlzdHM9ITAsTXQucGFyZW50UGF0aD1zdC5wYXRoLE10LnBhcmVudE9iamVjdD1zdC5ub2RlLE10Lm5hbWU9anIuYmFzZW5hbWUoRWUpLHN0PU90Lmxvb2t1cFBhdGgoRWUse2ZvbGxvdzohVmV9KSxNdC5leGlzdHM9ITAsTXQucGF0''@;'; put 'put ''aD1zdC5wYXRoLE10Lm9iamVjdD1zdC5ub2RlLE10Lm5hbWU9c3Qubm9kZS5uYW1lLE10LmlzUm9vdD0iLyI9PT1zdC5wYXRofWNhdGNoKFl0KXtNdC5lcnJvcj1ZdC5lcnJub31yZXR1cm4gTXR9LGNyZWF0ZVBhdGgoRWUsVmUsc3QsTXQpe0VlPSJzdHJpbmciPT10eXBlb2YgRWU/RWU6T3Qu''@;'; put 'put ''Z2V0UGF0aChFZSk7Zm9yKHZhciBZdD1WZS5zcGxpdCgiLyIpLnJldmVyc2UoKTtZdC5sZW5ndGg7KXt2YXIgYW49WXQucG9wKCk7aWYoYW4pe3ZhciBJbj1qci5qb2luMihFZSxhbik7dHJ5e090Lm1rZGlyKEluKX1jYXRjaChLbil7aWYoMjAhPUtuLmVycm5vKXRocm93IEtufUVlPUlufX1y''@;'; put 'put ''ZXR1cm4gSW59LGNyZWF0ZUZpbGUoRWUsVmUsc3QsTXQsWXQpe3ZhciBhbj1qci5qb2luMigic3RyaW5nIj09dHlwZW9mIEVlP0VlOk90LmdldFBhdGgoRWUpLFZlKSxJbj1MMShNdCxZdCk7cmV0dXJuIE90LmNyZWF0ZShhbixJbil9LGNyZWF0ZURhdGFGaWxlKEVlLFZlLHN0LE10LFl0LGFu''@;'; put 'put ''KXt2YXIgSW49VmU7RWUmJihFZT0ic3RyaW5nIj09dHlwZW9mIEVlP0VlOk90LmdldFBhdGgoRWUpLEluPVZlP2pyLmpvaW4yKEVlLFZlKTpFZSk7dmFyIEtuPUwxKE10LFl0KSxsaT1PdC5jcmVhdGUoSW4sS24pO2lmKHN0KXtzdD1fZChzdCksT3QuY2htb2QobGksMTQ2fEtuKTt2YXIgUWk9''@;'; put 'put ''T3Qub3BlbihsaSw1NzcpO090LndyaXRlKFFpLHN0LDAsc3QubGVuZ3RoLDAsYW4pLE90LmNsb3NlKFFpKSxPdC5jaG1vZChsaSxLbil9fSxjcmVhdGVEZXZpY2UoRWUsVmUsc3QsTXQpe3ZhciBZdD1qci5qb2luMigic3RyaW5nIj09dHlwZW9mIEVlP0VlOk90LmdldFBhdGgoRWUpLFZlKSxh''@;'; put 'put ''bj1MMSghIXN0LCEhTXQpO090LmNyZWF0ZURldmljZS5tYWpvcj8/PTY0O3ZhciBJbj1PdC5tYWtlZGV2KE90LmNyZWF0ZURldmljZS5tYWpvcisrLDApO3JldHVybiBPdC5yZWdpc3RlckRldmljZShJbix7b3BlbihLbil7S24uc2Vla2FibGU9ITF9LGNsb3NlKEtuKXtNdD8uYnVmZmVyPy5s''@;'; put 'put ''ZW5ndGgmJk10KDEwKX0scmVhZChLbixsaSxRaSxRbyxJYSl7Zm9yKHZhciBKbz0wLGhhPTA7aGE8UW87aGErKyl7dmFyIHdsO3RyeXt3bD1zdCgpfWNhdGNoe3Rocm93IG5ldyBPdC5FcnJub0Vycm9yKDI5KX1pZih2b2lkIDA9PT13bCYmMD09PUpvKXRocm93IG5ldyBPdC5FcnJub0Vycm9y''@;'; put 'put ''KDYpO2lmKG51bGw9PXdsKWJyZWFrO0pvKyssbGlbUWkraGFdPXdsfXJldHVybiBKbyYmKEtuLm5vZGUuYXRpbWU9RGF0ZS5ub3coKSksSm99LHdyaXRlKEtuLGxpLFFpLFFvLElhKXtmb3IodmFyIEpvPTA7Sm88UW87Sm8rKyl0cnl7TXQobGlbUWkrSm9dKX1jYXRjaHt0aHJvdyBuZXcgT3Qu''@;'; put 'put ''RXJybm9FcnJvcigyOSl9cmV0dXJuIFFvJiYoS24ubm9kZS5tdGltZT1Lbi5ub2RlLmN0aW1lPURhdGUubm93KCkpLEpvfX0pLE90Lm1rZGV2KFl0LGFuLEluKX0sZm9yY2VMb2FkRmlsZShFZSl7aWYoRWUuaXNEZXZpY2V8fEVlLmlzRm9sZGVyfHxFZS5saW5rfHxFZS5jb250ZW50cylyZXR1''@;'; put 'put ''cm4hMDtpZihnbG9iYWxUaGlzLlhNTEh0dHBSZXF1ZXN0KXF0KCJMYXp5IGxvYWRpbmcgc2hvdWxkIGhhdmUgYmVlbiBwZXJmb3JtZWQgKGNvbnRlbnRzIHNldCkgaW4gY3JlYXRlTGF6eUZpbGUsIGJ1dCBpdCB3YXMgbm90LiBMYXp5IGxvYWRpbmcgb25seSB3b3JrcyBpbiB3ZWIgd29ya2Vy''@;'; put 'put ''cy4gVXNlIC0tZW1iZWQtZmlsZSBvciAtLXByZWxvYWQtZmlsZSBpbiBlbWNjIG9uIHRoZSBtYWluIHRocmVhZC4iKTtlbHNlIHRyeXtFZS5jb250ZW50cz11bmRlZmluZWQoRWUudXJsKX1jYXRjaHt0aHJvdyBuZXcgT3QuRXJybm9FcnJvcigyOSl9fSxjcmVhdGVMYXp5RmlsZShFZSxWZSxz''@;'; put 'put ''dCxNdCxZdCl7Y2xhc3MgYW57bGVuZ3RoS25vd249ITE7Y2h1bmtzPVtdO2dldChKbyl7aWYoIShKbz50aGlzLmxlbmd0aC0xfHxKbzwwKSl7dmFyIGhhPUpvJXRoaXMuY2h1bmtTaXplO3JldHVybiB0aGlzLmdldHRlcihKby90aGlzLmNodW5rU2l6ZXwwKVtoYV19fXNldERhdGFHZXR0ZXIo''@;'; put 'put ''Sm8pe3RoaXMuZ2V0dGVyPUpvfWNhY2hlTGVuZ3RoKCl7dmFyIEpvPW5ldyBYTUxIdHRwUmVxdWVzdDtKby5vcGVuKCJIRUFEIixzdCwhMSksSm8uc2VuZChudWxsKSxKby5zdGF0dXM+PTIwMCYmSm8uc3RhdHVzPDMwMHx8MzA0PT09Sm8uc3RhdHVzfHxxdCgiQ291bGRuJ3QgbG9hZCAiK3N0''@;'; put 'put ''KyIuIFN0YXR1czogIitKby5zdGF0dXMpO3ZhciB3bCxoYT1OdW1iZXIoSm8uZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIikpLGt1PSh3bD1Kby5nZXRSZXNwb25zZUhlYWRlcigiQWNjZXB0LVJhbmdlcyIpKSYmImJ5dGVzIj09PXdsLFhjPSh3bD1Kby5nZXRSZXNwb25zZUhl''@;'; put 'put ''YWRlcigiQ29udGVudC1FbmNvZGluZyIpKSYmImd6aXAiPT09d2wsJGw9MTA0ODU3NjtrdXx8KCRsPWhhKTt2YXIgWGg9dGhpcztYaC5zZXREYXRhR2V0dGVyKGFwPT57dmFyIHBmPWFwKiRsLHhoPShhcCsxKSokbC0xO3JldHVybiB4aD1NYXRoLm1pbih4aCxoYS0xKSx0eXBlb2YgWGguY2h1''@;'; put 'put ''bmtzW2FwXT4idSImJihYaC5jaHVua3NbYXBdPSgoYXAscGYpPT57YXA+cGYmJnF0KGBpbnZhbGlkIHJhbmdlICgke2FwfSwgJHtwZn0pIG9yIG5vIGJ5dGVzIHJlcXVlc3RlZCFgKSxwZj5oYS0xJiZxdChgb25seSAke2hhfSBieXRlcyBhdmFpbGFibGUhIHByb2dyYW1tZXIgZXJyb3IhYCk7''@;'; put 'put ''dmFyIHhoPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4geGgub3BlbigiR0VUIixzdCwhMSksaGEhPT0kbCYmeGguc2V0UmVxdWVzdEhlYWRlcigiUmFuZ2UiLCJieXRlcz0iK2FwKyItIitwZikseGgucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIseGgub3ZlcnJpZGVNaW1lVHlwZSYmeGgu''@;'; put 'put ''b3ZlcnJpZGVNaW1lVHlwZSgidGV4dC9wbGFpbjsgY2hhcnNldD14LXVzZXItZGVmaW5lZCIpLHhoLnNlbmQobnVsbCkseGguc3RhdHVzPj0yMDAmJnhoLnN0YXR1czwzMDB8fDMwND09PXhoLnN0YXR1c3x8cXQoIkNvdWxkbid0IGxvYWQgIitzdCsiLiBTdGF0dXM6ICIreGguc3RhdHVzKSx2''@;'; put 'put ''b2lkIDAhPT14aC5yZXNwb25zZT9uZXcgVWludDhBcnJheSh4aC5yZXNwb25zZXx8W10pOmJsKHhoLnJlc3BvbnNlVGV4dD8/IiIsITApfSkocGYseGgpKSx0eXBlb2YgWGguY2h1bmtzW2FwXT4idSImJnF0KCJkb1hIUiBmYWlsZWQhIiksWGguY2h1bmtzW2FwXX0pLChYY3x8IWhhKSYmKCRs''@;'; put 'put ''PWhhPTEsaGE9dGhpcy5nZXR0ZXIoMCkubGVuZ3RoLCRsPWhhLEUoIkxhenlGaWxlcyBvbiBnemlwIGZvcmNlcyBkb3dubG9hZCBvZiB0aGUgd2hvbGUgZmlsZSB3aGVuIGxlbmd0aCBpcyBhY2Nlc3NlZCIpKSx0aGlzLl9sZW5ndGg9aGEsdGhpcy5fY2h1bmtTaXplPSRsLHRoaXMubGVuZ3Ro''@;'; put 'put ''S25vd249ITB9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmxlbmd0aEtub3dufHx0aGlzLmNhY2hlTGVuZ3RoKCksdGhpcy5fbGVuZ3RofWdldCBjaHVua1NpemUoKXtyZXR1cm4gdGhpcy5sZW5ndGhLbm93bnx8dGhpcy5jYWNoZUxlbmd0aCgpLHRoaXMuX2NodW5rU2l6ZX19aWYoZ2xvYmFs''@;'; put 'put ''VGhpcy5YTUxIdHRwUmVxdWVzdCl7cXQoIkNhbm5vdCBkbyBzeW5jaHJvbm91cyBiaW5hcnkgWEhScyBvdXRzaWRlIHdlYndvcmtlcnMgaW4gbW9kZXJuIGJyb3dzZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2MiKTt2YXIgS249e2lzRGV2aWNlOiExLGNv''@;'; put 'put ''bnRlbnRzOm5ldyBhbn19ZWxzZSBLbj17aXNEZXZpY2U6ITEsdXJsOnN0fTt2YXIgbGk9T3QuY3JlYXRlRmlsZShFZSxWZSxLbixNdCxZdCk7S24uY29udGVudHM/bGkuY29udGVudHM9S24uY29udGVudHM6S24udXJsJiYobGkuY29udGVudHM9bnVsbCxsaS51cmw9S24udXJsKSxPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydGllcyhsaSx7dXNlZEJ5dGVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZW50cy5sZW5ndGh9fX0pO3ZhciBRaT17fTtmb3IobGV0W0lhLEpvXW9mIE9iamVjdC5lbnRyaWVzKGxpLnN0cmVhbV9vcHMpKVFpW0lhXT0oLi4uaGEpPT4oT3QuZm9yY2VMb2Fk''@;'; put 'put ''RmlsZShsaSksSm8oLi4uaGEpKTtmdW5jdGlvbiBRbyhJYSxKbyxoYSx3bCxrdSl7dmFyIFhjPUlhLm5vZGUuY29udGVudHM7aWYoa3U+PVhjLmxlbmd0aClyZXR1cm4gMDt2YXIgJGw9TWF0aC5taW4oWGMubGVuZ3RoLWt1LHdsKTtpZihYYy5zbGljZSlmb3IodmFyIG8wPTA7bzA8JGw7bzAr''@;'; put 'put ''KylKb1toYStvMF09WGNba3UrbzBdO2Vsc2UgZm9yKG8wPTA7bzA8JGw7bzArKylKb1toYStvMF09WGMuZ2V0KGt1K28wKTtyZXR1cm4gJGx9cmV0dXJuIFFpLnJlYWQ9KElhLEpvLGhhLHdsLGt1KT0+KE90LmZvcmNlTG9hZEZpbGUobGkpLFFvKElhLEpvLGhhLHdsLGt1KSksUWkubW1hcD0o''@;'; put 'put ''SWEsSm8saGEsd2wsa3UpPT57T3QuZm9yY2VMb2FkRmlsZShsaSk7dmFyIFhjPXN5KEpvKTtpZighWGMpdGhyb3cgbmV3IE90LkVycm5vRXJyb3IoNDgpO3JldHVybiBRbyhJYSxUbyxYYyxKbyxoYSkse3B0cjpYYyxhbGxvY2F0ZWQ6ITB9fSxsaS5zdHJlYW1fb3BzPVFpLGxpfX0sQXU9e2N1''@;'; put 'put ''cnJlbnRVbWFzazoxOCxjYWxjdWxhdGVBdChFZSxWZSxzdCl7aWYoanIuaXNBYnMoVmUpKXJldHVybiBWZTt2YXIgTXQ7aWYoTXQ9LTEwMD09PUVlP090LmN3ZCgpOkF1LmdldFN0cmVhbUZyb21GRChFZSkucGF0aCwwPT1WZS5sZW5ndGgpe2lmKCFzdCl0aHJvdyBuZXcgT3QuRXJybm9FcnJv''@;'; put 'put ''cig0NCk7cmV0dXJuIE10fXJldHVybiBNdCsiLyIrVmV9LHdyaXRlU3RhdChFZSxWZSl7YW9bRWU+PjJdPVZlLmRldixhb1tFZSs0Pj4yXT1WZS5tb2RlLGFvW0VlKzg+PjJdPVZlLm5saW5rLGFvW0VlKzEyPj4yXT1WZS51aWQsYW9bRWUrMTY+PjJdPVZlLmdpZCxhb1tFZSsyMD4+Ml09VmUu''@;'; put 'put ''cmRldixlaT1bVmUuc2l6ZT4+PjAsKGZyPVZlLnNpemUsK01hdGguYWJzKGZyKT49MT9mcj4wPytNYXRoLmZsb29yKGZyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKGZyLSsofn5mcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLHhpW0VlKzI0Pj4yXT1laVswXSx4aVtFZSsyOD4+''@;'; put 'put ''Ml09ZWlbMV0seGlbRWUrMzI+PjJdPTQwOTYseGlbRWUrMzY+PjJdPVZlLmJsb2Nrczt2YXIgc3Q9VmUuYXRpbWUuZ2V0VGltZSgpLE10PVZlLm10aW1lLmdldFRpbWUoKSxZdD1WZS5jdGltZS5nZXRUaW1lKCk7cmV0dXJuIGVpPVtNYXRoLmZsb29yKHN0LzFlMyk+Pj4wLChmcj1NYXRoLmZs''@;'; put 'put ''b29yKHN0LzFlMyksK01hdGguYWJzKGZyKT49MT9mcj4wPytNYXRoLmZsb29yKGZyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKGZyLSsofn5mcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLHhpW0VlKzQwPj4yXT1laVswXSx4aVtFZSs0ND4+Ml09ZWlbMV0sYW9bRWUrNDg+PjJd''@;'; put 'put ''PXN0JTFlMyoxZTMqMWUzLGVpPVtNYXRoLmZsb29yKE10LzFlMyk+Pj4wLChmcj1NYXRoLmZsb29yKE10LzFlMyksK01hdGguYWJzKGZyKT49MT9mcj4wPytNYXRoLmZsb29yKGZyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKGZyLSsofn5mcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6''@;'; put 'put ''MCldLHhpW0VlKzU2Pj4yXT1laVswXSx4aVtFZSs2MD4+Ml09ZWlbMV0sYW9bRWUrNjQ+PjJdPU10JTFlMyoxZTMqMWUzLGVpPVtNYXRoLmZsb29yKFl0LzFlMyk+Pj4wLChmcj1NYXRoLmZsb29yKFl0LzFlMyksK01hdGguYWJzKGZyKT49MT9mcj4wPytNYXRoLmZsb29yKGZyLzQyOTQ5Njcy''@;'; put 'put ''OTYpPj4+MDp+fitNYXRoLmNlaWwoKGZyLSsofn5mcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLHhpW0VlKzcyPj4yXT1laVswXSx4aVtFZSs3Nj4+Ml09ZWlbMV0sYW9bRWUrODA+PjJdPVl0JTFlMyoxZTMqMWUzLGVpPVtWZS5pbm8+Pj4wLChmcj1WZS5pbm8sK01hdGguYWJzKGZyKT49''@;'; put 'put ''MT9mcj4wPytNYXRoLmZsb29yKGZyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKGZyLSsofn5mcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLHhpW0VlKzg4Pj4yXT1laVswXSx4aVtFZSs5Mj4+Ml09ZWlbMV0sMH0sd3JpdGVTdGF0RnMoRWUsVmUpe2FvW0VlKzQ+PjJdPVZlLmJz''@;'; put 'put ''aXplLGFvW0VlKzYwPj4yXT1WZS5ic2l6ZSxlaT1bVmUuYmxvY2tzPj4+MCwoZnI9VmUuYmxvY2tzLCtNYXRoLmFicyhmcik+PTE/ZnI+MD8rTWF0aC5mbG9vcihmci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChmci0rKH5+ZnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSx4aVtF''@;'; put 'put ''ZSs4Pj4yXT1laVswXSx4aVtFZSsxMj4+Ml09ZWlbMV0sZWk9W1ZlLmJmcmVlPj4+MCwoZnI9VmUuYmZyZWUsK01hdGguYWJzKGZyKT49MT9mcj4wPytNYXRoLmZsb29yKGZyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKGZyLSsofn5mcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCld''@;'; put 'put ''LHhpW0VlKzE2Pj4yXT1laVswXSx4aVtFZSsyMD4+Ml09ZWlbMV0sZWk9W1ZlLmJhdmFpbD4+PjAsKGZyPVZlLmJhdmFpbCwrTWF0aC5hYnMoZnIpPj0xP2ZyPjA/K01hdGguZmxvb3IoZnIvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoZnItKyh+fmZyPj4+MCkpLzQyOTQ5NjcyOTYp''@;'; put 'put ''Pj4+MDowKV0seGlbRWUrMjQ+PjJdPWVpWzBdLHhpW0VlKzI4Pj4yXT1laVsxXSxlaT1bVmUuZmlsZXM+Pj4wLChmcj1WZS5maWxlcywrTWF0aC5hYnMoZnIpPj0xP2ZyPjA/K01hdGguZmxvb3IoZnIvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoZnItKyh+fmZyPj4+MCkpLzQyOTQ5''@;'; put 'put ''NjcyOTYpPj4+MDowKV0seGlbRWUrMzI+PjJdPWVpWzBdLHhpW0VlKzM2Pj4yXT1laVsxXSxlaT1bVmUuZmZyZWU+Pj4wLChmcj1WZS5mZnJlZSwrTWF0aC5hYnMoZnIpPj0xP2ZyPjA/K01hdGguZmxvb3IoZnIvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoZnItKyh+fmZyPj4+MCkp''@;'; put 'put ''LzQyOTQ5NjcyOTYpPj4+MDowKV0seGlbRWUrNDA+PjJdPWVpWzBdLHhpW0VlKzQ0Pj4yXT1laVsxXSxhb1tFZSs0OD4+Ml09VmUuZnNpZCxhb1tFZSs2ND4+Ml09VmUuZmxhZ3MsYW9bRWUrNTY+PjJdPVZlLm5hbWVsZW59LGRvTXN5bmMoRWUsVmUsc3QsTXQsWXQpe2lmKCFPdC5pc0ZpbGUo''@;'; put 'put ''VmUubm9kZS5tb2RlKSl0aHJvdyBuZXcgT3QuRXJybm9FcnJvcig0Myk7aWYoMiZNdClyZXR1cm4gMDt2YXIgYW49dXQuc3ViYXJyYXkoRWUsRWUrc3QpO090Lm1zeW5jKFZlLGFuLFl0LHN0LE10KX0sZ2V0U3RyZWFtRnJvbUZEOkVlPT5PdC5nZXRTdHJlYW1DaGVja2VkKEVlKSx2YXJhcmdz''@;'; put 'put ''OnZvaWQgMCxnZXRTdHI6RWU9PklyKEVlKX0scDI9KCk9Pnt2YXIgRWU9eGlbK0F1LnZhcmFyZ3M+PjJdO3JldHVybiBBdS52YXJhcmdzKz00LEVlfSxEMD1wMixjeT0oRWUsVmUsc3QpPT5WbyhFZSx1dCxWZSxzdCksayRlPSgpPT5vcWUsUiRlPUVlPT50cWUoRWUpLEs0bj1FZT0+e3ZhciBW''@;'; put 'put ''ZT0oRWU9Pnt2YXIgVmU9RWUuZ2V0QXJnKGskZSgpLDApO3JldHVybiBycWUoVmUpfSkoRWUpO3JldHVybihFZT0+e3ZhciBWZT1ucWUoKSxzdD1SJGUoNCksTXQ9UiRlKDQpO2lxZShFZSxzdCxNdCk7dmFyIEtuLFl0PWFvW3N0Pj4yXSxhbj1hb1tNdD4+Ml0sSW49SXIoWXQpO3JldHVybiB0''@;'; put 'put ''NShZdCksYW4mJihLbj1JcihhbiksdDUoYW4pKSwoRWU9PntlcWUoRWUpfSkoVmUpLFtJbixLbl19KShWZSl9LHlnPUVlPT57Zm9yKHZhciBWZT0iIjs7KXt2YXIgc3Q9dXRbRWUrK107aWYoIXN0KXJldHVybiBWZTtWZSs9U3RyaW5nLmZyb21DaGFyQ29kZShzdCl9fSxTQT17fSxFQT17fSxp''@;'; put 'put ''WD17fSxOUD1jbGFzcyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKEVlKXtzdXBlcihFZSksdGhpcy5uYW1lPSJCaW5kaW5nRXJyb3IifX0sdWM9RWU9Pnt0aHJvdyBuZXcgTlAoRWUpfTtmdW5jdGlvbiB5OShFZSxWZSxzdD17fSl7cmV0dXJuIGZ1bmN0aW9uIGU1bihFZSxWZSxzdD17fSl7''@;'; put 'put ''dmFyIE10PVZlLm5hbWU7aWYoRWV8fHVjKGB0eXBlICIke010fSIgbXVzdCBoYXZlIGEgcG9zaXRpdmUgaW50ZWdlciB0eXBlaWQgcG9pbnRlcmApLEVBLmhhc093blByb3BlcnR5KEVlKSl7aWYoc3QuaWdub3JlRHVwbGljYXRlUmVnaXN0cmF0aW9ucylyZXR1cm47dWMoYENhbm5vdCByZWdp''@;'; put 'put ''c3RlciB0eXBlICcke010fScgdHdpY2VgKX1pZihFQVtFZV09VmUsZGVsZXRlIGlYW0VlXSxTQS5oYXNPd25Qcm9wZXJ0eShFZSkpe3ZhciBZdD1TQVtFZV07ZGVsZXRlIFNBW0VlXSxZdC5mb3JFYWNoKGFuPT5hbigpKX19KEVlLFZlLHN0KX12YXIgbjVuPUVlPT4oe2NvdW50OkVlLmNvdW50''@;'; put 'put ''LGRlbGV0ZVNjaGVkdWxlZDpFZS5kZWxldGVTY2hlZHVsZWQscHJlc2VydmVQb2ludGVyT25EZWxldGU6RWUucHJlc2VydmVQb2ludGVyT25EZWxldGUscHRyOkVlLnB0cixwdHJUeXBlOkVlLnB0clR5cGUsc21hcnRQdHI6RWUuc21hcnRQdHIsc21hcnRQdHJUeXBlOkVlLnNtYXJ0UHRyVHlw''@;'; put 'put ''ZX0pLEI0ZT1FZT0+e3VjKGZ1bmN0aW9uIFZlKHN0KXtyZXR1cm4gc3QuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MubmFtZX0oRWUpKyIgaW5zdGFuY2UgYWxyZWFkeSBkZWxldGVkIil9LGo0ZT0hMSxJJGU9RWU9Pnt9LEQkZT1FZT0+e0VlLmNvdW50LnZhbHVlLT0xLDA9PT1FZS5jb3Vu''@;'; put 'put ''dC52YWx1ZSYmKEVlPT57RWUuc21hcnRQdHI/RWUuc21hcnRQdHJUeXBlLnJhd0Rlc3RydWN0b3IoRWUuc21hcnRQdHIpOkVlLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLnJhd0Rlc3RydWN0b3IoRWUucHRyKX0pKEVlKX0sRlA9RWU9Pmdsb2JhbFRoaXMuRmluYWxpemF0aW9uUmVnaXN0cnk/''@;'; put 'put ''KGo0ZT1uZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoVmU9PntEJGUoVmUuJCQpfSksSSRlPVZlPT5qNGUudW5yZWdpc3RlcihWZSksKEZQPVZlPT57dmFyIHN0PVZlLiQkO3JldHVybiFzdC5zbWFydFB0cnx8ajRlLnJlZ2lzdGVyKFZlLHskJDpzdH0sVmUpLFZlfSkoRWUpKTooRlA9VmU9PlZl''@;'; put 'put ''LEVlKSxvWD1bXTtmdW5jdGlvbiBhWCgpe312YXIgTyRlPShFZSxWZSk9Pk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWZSwibmFtZSIse3ZhbHVlOkVlfSksTiRlPXt9LFU0ZT0oRWUsVmUsc3QpPT57aWYodm9pZCAwPT09RWVbVmVdLm92ZXJsb2FkVGFibGUpe3ZhciBNdD1FZVtWZV07RWVbVmVd''@;'; put 'put ''PWZ1bmN0aW9uKC4uLll0KXtyZXR1cm4gRWVbVmVdLm92ZXJsb2FkVGFibGUuaGFzT3duUHJvcGVydHkoWXQubGVuZ3RoKXx8dWMoYEZ1bmN0aW9uICcke3N0fScgY2FsbGVkIHdpdGggYW4gaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzICgke1l0Lmxlbmd0aH0pIC0gZXhwZWN0cyBvbmUg''@;'; put 'put ''b2YgKCR7RWVbVmVdLm92ZXJsb2FkVGFibGV9KSFgKSxFZVtWZV0ub3ZlcmxvYWRUYWJsZVtZdC5sZW5ndGhdLmFwcGx5KHRoaXMsWXQpfSxFZVtWZV0ub3ZlcmxvYWRUYWJsZT1bXSxFZVtWZV0ub3ZlcmxvYWRUYWJsZVtNdC5hcmdDb3VudF09TXR9fTtmdW5jdGlvbiB1NW4oRWUsVmUsc3Qs''@;'; put 'put ''TXQsWXQsYW4sSW4sS24pe3RoaXMubmFtZT1FZSx0aGlzLmNvbnN0cnVjdG9yPVZlLHRoaXMuaW5zdGFuY2VQcm90b3R5cGU9c3QsdGhpcy5yYXdEZXN0cnVjdG9yPU10LHRoaXMuYmFzZUNsYXNzPVl0LHRoaXMuZ2V0QWN0dWFsVHlwZT1hbix0aGlzLnVwY2FzdD1Jbix0aGlzLmRvd25jYXN0''@;'; put 'put ''PUtuLHRoaXMucHVyZVZpcnR1YWxGdW5jdGlvbnM9W119dmFyIHNYPShFZSxWZSxzdCk9Pntmb3IoO1ZlIT09c3Q7KVZlLnVwY2FzdHx8dWMoYEV4cGVjdGVkIG51bGwgb3IgaW5zdGFuY2Ugb2YgJHtzdC5uYW1lfSwgZ290IGFuIGluc3RhbmNlIG9mICR7VmUubmFtZX1gKSxFZT1WZS51cGNh''@;'; put 'put ''c3QoRWUpLFZlPVZlLmJhc2VDbGFzcztyZXR1cm4gRWV9LHo0ZT1FZT0+e2lmKG51bGw9PT1FZSlyZXR1cm4ibnVsbCI7dmFyIFZlPXR5cGVvZiBFZTtyZXR1cm4ib2JqZWN0Ij09PVZlfHwiYXJyYXkiPT09VmV8fCJmdW5jdGlvbiI9PT1WZT9FZS50b1N0cmluZygpOiIiK0VlfTtmdW5jdGlv''@;'; put 'put ''biBkNW4oRWUsVmUpe3JldHVybiBudWxsPT09VmU/KHRoaXMuaXNSZWZlcmVuY2UmJnVjKGBudWxsIGlzIG5vdCBhIHZhbGlkICR7dGhpcy5uYW1lfWApLDApOihWZS4kJHx8dWMoYENhbm5vdCBwYXNzICIke3o0ZShWZSl9IiBhcyBhICR7dGhpcy5uYW1lfWApLFZlLiQkLnB0cnx8dWMoYENh''@;'; put 'put ''bm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICR7dGhpcy5uYW1lfWApLHNYKFZlLiQkLnB0cixWZS4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyx0aGlzLnJlZ2lzdGVyZWRDbGFzcykpfWZ1bmN0aW9uIGg1bihFZSxWZSl7dmFyIHN0O2lmKG51bGw9PT1W''@;'; put 'put ''ZSlyZXR1cm4gdGhpcy5pc1JlZmVyZW5jZSYmdWMoYG51bGwgaXMgbm90IGEgdmFsaWQgJHt0aGlzLm5hbWV9YCksdGhpcy5pc1NtYXJ0UG9pbnRlcj8oc3Q9dGhpcy5yYXdDb25zdHJ1Y3RvcigpLG51bGwhPT1FZSYmRWUucHVzaCh0aGlzLnJhd0Rlc3RydWN0b3Isc3QpLHN0KTowO2lmKCgh''@;'; put 'put ''VmV8fCFWZS4kJCkmJnVjKGBDYW5ub3QgcGFzcyAiJHt6NGUoVmUpfSIgYXMgYSAke3RoaXMubmFtZX1gKSxWZS4kJC5wdHJ8fHVjKGBDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAke3RoaXMubmFtZX1gKSwhdGhpcy5pc0NvbnN0JiZWZS4kJC5wdHJU''@;'; put 'put ''eXBlLmlzQ29uc3QmJnVjKGBDYW5ub3QgY29udmVydCBhcmd1bWVudCBvZiB0eXBlICR7VmUuJCQuc21hcnRQdHJUeXBlP1ZlLiQkLnNtYXJ0UHRyVHlwZS5uYW1lOlZlLiQkLnB0clR5cGUubmFtZX0gdG8gcGFyYW1ldGVyIHR5cGUgJHt0aGlzLm5hbWV9YCksc3Q9c1goVmUuJCQucHRyLFZl''@;'; put 'put ''LiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLHRoaXMucmVnaXN0ZXJlZENsYXNzKSx0aGlzLmlzU21hcnRQb2ludGVyKXN3aXRjaCh2b2lkIDA9PT1WZS4kJC5zbWFydFB0ciYmdWMoIlBhc3NpbmcgcmF3IHBvaW50ZXIgdG8gc21hcnQgcG9pbnRlciBpcyBpbGxlZ2FsIiksdGhpcy5zaGFy''@;'; put 'put ''aW5nUG9saWN5KXtjYXNlIDA6VmUuJCQuc21hcnRQdHJUeXBlPT09dGhpcz9zdD1WZS4kJC5zbWFydFB0cjp1YyhgQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSAke1ZlLiQkLnNtYXJ0UHRyVHlwZT9WZS4kJC5zbWFydFB0clR5cGUubmFtZTpWZS4kJC5wdHJUeXBlLm5hbWV9IHRv''@;'; put 'put ''IHBhcmFtZXRlciB0eXBlICR7dGhpcy5uYW1lfWApO2JyZWFrO2Nhc2UgMTpzdD1WZS4kJC5zbWFydFB0cjticmVhaztjYXNlIDI6aWYoVmUuJCQuc21hcnRQdHJUeXBlPT09dGhpcylzdD1WZS4kJC5zbWFydFB0cjtlbHNle3ZhciBZdD1WZS5jbG9uZSgpO3N0PXRoaXMucmF3U2hhcmUoc3Qs''@;'; put 'put ''WjRlLnRvSGFuZGxlKCgpPT5ZdC5kZWxldGUoKSkpLG51bGwhPT1FZSYmRWUucHVzaCh0aGlzLnJhd0Rlc3RydWN0b3Isc3QpfWJyZWFrO2RlZmF1bHQ6dWMoIlVuc3VwcG9ydGVkIHNoYXJpbmcgcG9saWN5Iil9cmV0dXJuIHN0fWZ1bmN0aW9uIGY1bihFZSxWZSl7cmV0dXJuIG51bGw9PT1W''@;'; put 'put ''ZT8odGhpcy5pc1JlZmVyZW5jZSYmdWMoYG51bGwgaXMgbm90IGEgdmFsaWQgJHt0aGlzLm5hbWV9YCksMCk6KFZlLiQkfHx1YyhgQ2Fubm90IHBhc3MgIiR7ejRlKFZlKX0iIGFzIGEgJHt0aGlzLm5hbWV9YCksVmUuJCQucHRyfHx1YyhgQ2Fubm90IHBhc3MgZGVsZXRlZCBvYmplY3QgYXMg''@;'; put 'put ''YSBwb2ludGVyIG9mIHR5cGUgJHt0aGlzLm5hbWV9YCksVmUuJCQucHRyVHlwZS5pc0NvbnN0JiZ1YyhgQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSAke1ZlLiQkLnB0clR5cGUubmFtZX0gdG8gcGFyYW1ldGVyIHR5cGUgJHt0aGlzLm5hbWV9YCksc1goVmUuJCQucHRyLFZlLiQk''@;'; put 'put ''LnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLHRoaXMucmVnaXN0ZXJlZENsYXNzKSl9ZnVuY3Rpb24gbFgoRWUpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShhb1tFZT4+Ml0pfXZhciBGJGU9KEVlLFZlLHN0KT0+e2lmKFZlPT09c3QpcmV0dXJuIEVlO2lmKHZvaWQgMD09PXN0LmJhc2VDbGFz''@;'; put 'put ''cylyZXR1cm4gbnVsbDt2YXIgTXQ9RiRlKEVlLFZlLHN0LmJhc2VDbGFzcyk7cmV0dXJuIG51bGw9PT1NdD9udWxsOnN0LmRvd25jYXN0KE10KX0scDVuPXt9LHY1bj1jbGFzcyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKEVlKXtzdXBlcihFZSksdGhpcy5uYW1lPSJJbnRlcm5hbEVycm9y''@;'; put 'put ''In19LGNYPUVlPT57dGhyb3cgbmV3IHY1bihFZSl9LHVYPShFZSxWZSk9PigoIVZlLnB0clR5cGV8fCFWZS5wdHIpJiZjWCgibWFrZUNsYXNzSGFuZGxlIHJlcXVpcmVzIHB0ciBhbmQgcHRyVHlwZSIpLCEhVmUuc21hcnRQdHJUeXBlIT0hIVZlLnNtYXJ0UHRyJiZjWCgiQm90aCBzbWFydFB0''@;'; put 'put ''clR5cGUgYW5kIHNtYXJ0UHRyIG11c3QgYmUgc3BlY2lmaWVkIiksVmUuY291bnQ9e3ZhbHVlOjF9LEZQKE9iamVjdC5jcmVhdGUoRWUseyQkOnt2YWx1ZTpWZSx3cml0YWJsZTohMH19KSkpO2Z1bmN0aW9uIGRYKEVlLFZlLHN0LE10LFl0LGFuLEluLEtuLGxpLFFpLFFvKXt0aGlzLm5hbWU9''@;'; put 'put ''RWUsdGhpcy5yZWdpc3RlcmVkQ2xhc3M9VmUsdGhpcy5pc1JlZmVyZW5jZT1zdCx0aGlzLmlzQ29uc3Q9TXQsdGhpcy5pc1NtYXJ0UG9pbnRlcj1ZdCx0aGlzLnBvaW50ZWVUeXBlPWFuLHRoaXMuc2hhcmluZ1BvbGljeT1Jbix0aGlzLnJhd0dldFBvaW50ZWU9S24sdGhpcy5yYXdDb25zdHJ1''@;'; put 'put ''Y3Rvcj1saSx0aGlzLnJhd1NoYXJlPVFpLHRoaXMucmF3RGVzdHJ1Y3Rvcj1RbyxZdHx8dm9pZCAwIT09VmUuYmFzZUNsYXNzP3RoaXMudG9XaXJlVHlwZT1oNW46TXQ/KHRoaXMudG9XaXJlVHlwZT1kNW4sdGhpcy5kZXN0cnVjdG9yRnVuY3Rpb249bnVsbCk6KHRoaXMudG9XaXJlVHlwZT1m''@;'; put 'put ''NW4sdGhpcy5kZXN0cnVjdG9yRnVuY3Rpb249bnVsbCl9dmFyIHV5PXt9LFAkZT1FZT0+YXFlLmdldChFZSksYjk9KEVlLFZlLHN0PSExKT0+e0VlPXlnKEVlKTt2YXIgWXQ9ZnVuY3Rpb24gTXQoKXtyZXR1cm4gRWUuaW5jbHVkZXMoImoiKT8oKEVlLFZlLHN0PSExKT0+KC4uLk10KT0+KChF''@;'; put 'put ''ZSxWZSxzdD1bXSk9PkVlLmluY2x1ZGVzKCJqIik/KChFZSxWZSxzdCk9PihFZT1FZS5yZXBsYWNlKC9wL2csImkiKSwoMCx1eVtFZV0pKFZlLC4uLnN0KSkpKEVlLFZlLHN0KTpQJGUoVmUpKC4uLnN0KSkoRWUsVmUsTXQsc3QpKShFZSxWZSk6UCRlKFZlKX0oKTtyZXR1cm4iZnVuY3Rpb24i''@;'; put 'put ''IT10eXBlb2YgWXQmJnVjKGB1bmtub3duIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aCBzaWduYXR1cmUgJHtFZX06ICR7VmV9YCksWXR9O2NsYXNzIEU1biBleHRlbmRzIEVycm9ye312YXIgTTVuPUVlPT57dmFyIFZlPUskZShFZSksc3Q9eWcoVmUpO3JldHVybiB0NShWZSksc3R9LE1BPShFZSxW''@;'; put 'put ''ZSk9Pnt2YXIgc3Q9W10sTXQ9e307dGhyb3cgVmUuZm9yRWFjaChmdW5jdGlvbiBZdChhbil7aWYoIU10W2FuXSYmIUVBW2FuXSl7aWYoaVhbYW5dKXJldHVybiB2b2lkIGlYW2FuXS5mb3JFYWNoKFl0KTtzdC5wdXNoKGFuKSxNdFthbl09ITB9fSksbmV3IEU1bihgJHtFZX06IGArc3QubWFw''@;'; put 'put ''KE01bikuam9pbihbIiwgIl0pKX0sdzk9KEVlLFZlLHN0KT0+e2Z1bmN0aW9uIE10KEtuKXt2YXIgbGk9c3QoS24pO2xpLmxlbmd0aCE9PUVlLmxlbmd0aCYmY1goIk1pc21hdGNoZWQgdHlwZSBjb252ZXJ0ZXIgY291bnQiKTtmb3IodmFyIFFpPTA7UWk8RWUubGVuZ3RoOysrUWkpeTkoRWVb''@;'; put 'put ''UWldLGxpW1FpXSl9RWUuZm9yRWFjaChLbj0+aVhbS25dPVZlKTt2YXIgWXQ9bmV3IEFycmF5KFZlLmxlbmd0aCksYW49W10sSW49MDtmb3IobGV0W0tuLGxpXW9mIFZlLmVudHJpZXMoKSlFQS5oYXNPd25Qcm9wZXJ0eShsaSk/WXRbS25dPUVBW2xpXTooYW4ucHVzaChsaSksU0EuaGFzT3du''@;'; put 'put ''UHJvcGVydHkobGkpfHwoU0FbbGldPVtdKSxTQVtsaV0ucHVzaCgoKT0+e1l0W0tuXT1FQVtsaV0sKytJbj09PWFuLmxlbmd0aCYmTXQoWXQpfSkpOzA9PT1hbi5sZW5ndGgmJk10KFl0KX0sSCRlPUVlPT57Zm9yKDtFZS5sZW5ndGg7KXt2YXIgVmU9RWUucG9wKCk7RWUucG9wKCkoVmUpfX07''@;'; put 'put ''ZnVuY3Rpb24gVzRlKEVlLFZlLHN0LE10LFl0LGFuKXt2YXIgSW49VmUubGVuZ3RoO0luPDImJnVjKCJhcmdUeXBlcyBhcnJheSBzaXplIG1pc21hdGNoISBNdXN0IGF0IGxlYXN0IGdldCByZXR1cm4gdmFsdWUgYW5kICd0aGlzJyB0eXBlcyEiKTt2YXIgS249bnVsbCE9PVZlWzFdJiZudWxs''@;'; put 'put ''IT09c3QsbGk9ZnVuY3Rpb24geDVuKEVlKXtmb3IodmFyIFZlPTE7VmU8RWUubGVuZ3RoOysrVmUpaWYobnVsbCE9PUVlW1ZlXSYmdm9pZCAwPT09RWVbVmVdLmRlc3RydWN0b3JGdW5jdGlvbilyZXR1cm4hMDtyZXR1cm4hMX0oVmUpLFFpPSFWZVswXS5pc1ZvaWQsUW89SW4tMixJYT1uZXcg''@;'; put 'put ''QXJyYXkoUW8pLEpvPVtdLGhhPVtdO3JldHVybiBPJGUoRWUsZnVuY3Rpb24oLi4ua3Upe3ZhciBYYztoYS5sZW5ndGg9MCxKby5sZW5ndGg9S24/MjoxLEpvWzBdPVl0LEtuJiYoWGM9VmVbMV0udG9XaXJlVHlwZShoYSx0aGlzKSxKb1sxXT1YYyk7Zm9yKHZhciAkbD0wOyRsPFFvOysrJGwp''@;'; put 'put ''SWFbJGxdPVZlWyRsKzJdLnRvV2lyZVR5cGUoaGEsa3VbJGxdKSxKby5wdXNoKElhWyRsXSk7cmV0dXJuIGZ1bmN0aW9uIFhoKGFwKXtpZihsaSlIJGUoaGEpO2Vsc2UgZm9yKHZhciBwZj1Lbj8xOjI7cGY8VmUubGVuZ3RoO3BmKyspbnVsbCE9PVZlW3BmXS5kZXN0cnVjdG9yRnVuY3Rpb24m''@;'; put 'put ''JlZlW3BmXS5kZXN0cnVjdG9yRnVuY3Rpb24oMT09PXBmP1hjOklhW3BmLTJdKTtpZihRaSlyZXR1cm4gVmVbMF0uZnJvbVdpcmVUeXBlKGFwKX0oTXQoLi4uSm8pKX0pfXZhciBZNGU9KEVlLFZlKT0+e2Zvcih2YXIgc3Q9W10sTXQ9MDtNdDxFZTtNdCsrKXN0LnB1c2goYW9bVmUrNCpNdD4+''@;'; put 'put ''Ml0pO3JldHVybiBzdH0sViRlPUVlPT57bGV0IFZlPShFZT1FZS50cmltKCkpLmluZGV4T2YoIigiKTtyZXR1cm4tMT09PVZlP0VlOkVlLnNsaWNlKDAsVmUpfSxCJGU9KEVlLFZlLHN0KT0+KEVlIGluc3RhbmNlb2YgT2JqZWN0fHx1YyhgJHtzdH0gd2l0aCBpbnZhbGlkICJ0aGlzIjogJHtF''@;'; put 'put ''ZX1gKSxFZSBpbnN0YW5jZW9mIFZlLnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcnx8dWMoYCR7c3R9IGluY29tcGF0aWJsZSB3aXRoICJ0aGlzIiBvZiB0eXBlICR7RWUuY29uc3RydWN0b3IubmFtZX1gKSxFZS4kJC5wdHJ8fHVjKGBjYW5ub3QgY2FsbCBlbXNjcmlwdGVuIGJpbmRpbmcg''@;'; put 'put ''bWV0aG9kICR7c3R9IG9uIGRlbGV0ZWQgb2JqZWN0YCksc1goRWUuJCQucHRyLEVlLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLFZlLnJlZ2lzdGVyZWRDbGFzcykpLGokZT1bXSxRQz1bMCwxLCwxLG51bGwsMSwhMCwxLCExLDFdLFUkZT1bXSxaNGU9e3RvVmFsdWU6RWU9PihFZXx8dWMo''@;'; put 'put ''YENhbm5vdCB1c2UgZGVsZXRlZCB2YWwuIGhhbmRsZSA9ICR7RWV9YCksUUNbRWVdKSx0b0hhbmRsZTpFZT0+e3N3aXRjaChFZSl7Y2FzZSB2b2lkIDA6cmV0dXJuIDI7Y2FzZSBudWxsOnJldHVybiA0O2Nhc2UhMDpyZXR1cm4gNjtjYXNlITE6cmV0dXJuIDg7ZGVmYXVsdDp7bGV0IFZlPWok''@;'; put 'put ''ZS5wb3AoKXx8UUMubGVuZ3RoO3JldHVybiBRQ1tWZV09RWUsUUNbVmUrMV09MSxWZX19fX0sTDVuPXtuYW1lOiJlbXNjcmlwdGVuOjp2YWwiLGZyb21XaXJlVHlwZTpFZT0+e3ZhciBWZT1aNGUudG9WYWx1ZShFZSk7cmV0dXJuKEVlPT57aWYoRWU+OSYmMD09PS0tUUNbRWUrMV0pe3ZhciBW''@;'; put 'put ''ZT1RQ1tFZV07UUNbRWVdPXZvaWQgMDt2YXIgc3Q9VSRlW0VlXTtzdCYmKFUkZVtFZV09dm9pZCAwLHN0KFZlKSksaiRlLnB1c2goRWUpfX0pKEVlKSxWZX0sdG9XaXJlVHlwZTooRWUsVmUpPT5aNGUudG9IYW5kbGUoVmUpLHJlYWRWYWx1ZUZyb21Qb2ludGVyOmxYLGRlc3RydWN0b3JGdW5j''@;'; put 'put ''dGlvbjpudWxsfSxONW49KEVlLFZlKT0+e3N3aXRjaChWZSl7Y2FzZSA0OnJldHVybiBmdW5jdGlvbihzdCl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKHdzW3N0Pj4yXSl9O2Nhc2UgODpyZXR1cm4gZnVuY3Rpb24oc3Qpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZSh0c1tzdD4+M10pfTtk''@;'; put 'put ''ZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgZmxvYXQgd2lkdGggKCR7VmV9KTogJHtFZX1gKX19LFA1bj0oRWUsVmUsc3QpPT57c3dpdGNoKFZlKXtjYXNlIDE6cmV0dXJuIHN0P010PT5Ub1tNdF06TXQ9PnV0W010XTtjYXNlIDI6cmV0dXJuIHN0P010PT5Ib1tNdD4+MV06''@;'; put 'put ''TXQ9PmthW010Pj4xXTtjYXNlIDQ6cmV0dXJuIHN0P010PT54aVtNdD4+Ml06TXQ9PmFvW010Pj4yXTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgaW50ZWdlciB3aWR0aCAoJHtWZX0pOiAke0VlfWApfX0seiRlPWdsb2JhbFRoaXMuVGV4dERlY29kZXI/bmV3IFRleHRE''@;'; put 'put ''ZWNvZGVyKCJ1dGYtMTZsZSIpOnZvaWQgMCxqNW49KEVlLFZlLHN0KT0+e3ZhciBNdD1FZT4+MSxZdD1kbihrYSxNdCxWZS8yLHN0KTtpZihZdC1NdD4xNiYmeiRlKXJldHVybiB6JGUuZGVjb2RlKGthLnN1YmFycmF5KE10LFl0KSk7Zm9yKHZhciBhbj0iIixJbj1NdDtJbjxZdDsrK0luKWFu''@;'; put 'put ''Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGthW0luXSk7cmV0dXJuIGFufSxVNW49KEVlLFZlLHN0PTIxNDc0ODM2NDcpPT57aWYoc3Q8MilyZXR1cm4gMDtmb3IodmFyIE10PVZlLFl0PShzdC09Mik8MipFZS5sZW5ndGg/c3QvMjpFZS5sZW5ndGgsYW49MDthbjxZdDsrK2FuKXt2YXIgSW49RWUu''@;'; put 'put ''Y2hhckNvZGVBdChhbik7SG9bVmU+PjFdPUluLFZlKz0yfXJldHVybiBIb1tWZT4+MV09MCxWZS1NdH0sejVuPUVlPT4yKkVlLmxlbmd0aCxXNW49KEVlLFZlLHN0KT0+e2Zvcih2YXIgTXQ9IiIsWXQ9RWU+PjIsYW49MDshKGFuPj1WZS80KTthbisrKXt2YXIgSW49YW9bWXQrYW5dO2lmKCFJ''@;'; put 'put ''biYmIXN0KWJyZWFrO010Kz1TdHJpbmcuZnJvbUNvZGVQb2ludChJbil9cmV0dXJuIE10fSxZNW49KEVlLFZlLHN0PTIxNDc0ODM2NDcpPT57aWYoc3Q8NClyZXR1cm4gMDtmb3IodmFyIE10PVZlLFl0PU10K3N0LTQsYW49MDthbjxFZS5sZW5ndGg7Kythbil7dmFyIEluPUVlLmNvZGVQb2lu''@;'; put 'put ''dEF0KGFuKTtpZihJbj42NTUzNSYmYW4rKyx4aVtWZT4+Ml09SW4sKFZlKz00KSs0Pll0KWJyZWFrfXJldHVybiB4aVtWZT4+Ml09MCxWZS1NdH0sWjVuPUVlPT57Zm9yKHZhciBWZT0wLHN0PTA7c3Q8RWUubGVuZ3RoOysrc3QpRWUuY29kZVBvaW50QXQoc3QpPjY1NTM1JiZzdCsrLFZlKz00''@;'; put 'put ''O3JldHVybiBWZX0sUTVuPVswLDMxLDYwLDkxLDEyMSwxNTIsMTgyLDIxMywyNDQsMjc0LDMwNSwzMzVdLEo1bj1bMCwzMSw1OSw5MCwxMjAsMTUxLDE4MSwyMTIsMjQzLDI3MywzMDQsMzM0XSxQUD0oRWUsVmUpPT5WZSsyMDk3MTUyPj4+MDw0MTk0MzA1LSEhRWU/KEVlPj4+MCkrNDI5NDk2''@;'; put 'put ''NzI5NipWZTpOYU4sSFA9e30sWiRlPUVlPT57dmU9RWUsaSgwLG5ldyBQbyhFZSkpfSwkJGU9KCk9PnBlcmZvcm1hbmNlLm5vdygpLHEkZT0oKT0+RGF0ZS5ub3coKSxHNGU9W10sbTZuPUVlPT57dmFyIHN0PShFZS1oWC5idWZmZXIuYnl0ZUxlbmd0aCs2NTUzNSkvNjU1MzZ8MDt0cnl7cmV0''@;'; put 'put ''dXJuIGhYLmdyb3coc3QpLGF0KCksMX1jYXRjaHt9fSwkNGU9e30sVlA9KCk9PntpZighVlAuc3RyaW5ncyl7dmFyIFZlPXtVU0VSOiJ3ZWJfdXNlciIsTE9HTkFNRToid2ViX3VzZXIiLFBBVEg6Ii8iLFBXRDoiLyIsSE9NRToiL2hvbWUvd2ViX3VzZXIiLExBTkc6KGdsb2JhbFRoaXMubmF2''@;'; put 'put ''aWdhdG9yPy5sYW5ndWFnZT8/IkMiKS5yZXBsYWNlKCItIiwiXyIpKyIuVVRGLTgiLF86Ii4vdGhpcy5wcm9ncmFtIn07Zm9yKHZhciBzdCBpbiAkNGUpdm9pZCAwPT09JDRlW3N0XT9kZWxldGUgVmVbc3RdOlZlW3N0XT0kNGVbc3RdO3ZhciBNdD1bXTtmb3IodmFyIHN0IGluIFZlKU10LnB1''@;'; put 'put ''c2goYCR7c3R9PSR7VmVbc3RdfWApO1ZQLnN0cmluZ3M9TXR9cmV0dXJuIFZQLnN0cmluZ3N9O090LmNyZWF0ZVByZWxvYWRlZEZpbGU9KEVlLFZlLHN0LE10LFl0LGFuLEluLEtuLGxpLFFpKT0+e2x5KEVlLFZlLHN0LE10LFl0LEtuLGxpLFFpKS50aGVuKGFuKS5jYXRjaChJbil9LE90LnBy''@;'; put 'put ''ZWxvYWRGaWxlPWx5LE90LnN0YXRpY0luaXQoKSwoKCk9PntsZXQgRWU9YVgucHJvdG90eXBlO09iamVjdC5hc3NpZ24oRWUse2lzQWxpYXNPZihzdCl7aWYoISh0aGlzIGluc3RhbmNlb2YgYVgmJnN0IGluc3RhbmNlb2YgYVgpKXJldHVybiExO3ZhciBNdD10aGlzLiQkLnB0clR5cGUucmVn''@;'; put 'put ''aXN0ZXJlZENsYXNzLFl0PXRoaXMuJCQucHRyO3N0LiQkPXN0LiQkO2Zvcih2YXIgYW49c3QuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MsSW49c3QuJCQucHRyO010LmJhc2VDbGFzczspWXQ9TXQudXBjYXN0KFl0KSxNdD1NdC5iYXNlQ2xhc3M7Zm9yKDthbi5iYXNlQ2xhc3M7KUluPWFu''@;'; put 'put ''LnVwY2FzdChJbiksYW49YW4uYmFzZUNsYXNzO3JldHVybiBNdD09PWFuJiZZdD09PUlufSxjbG9uZSgpe2lmKHRoaXMuJCQucHRyfHxCNGUodGhpcyksdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSlyZXR1cm4gdGhpcy4kJC5jb3VudC52YWx1ZSs9MSx0aGlzO3ZhciBzdD1GUChP''@;'; put 'put ''YmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSx7JCQ6e3ZhbHVlOm41bih0aGlzLiQkKX19KSk7cmV0dXJuIHN0LiQkLmNvdW50LnZhbHVlKz0xLHN0LiQkLmRlbGV0ZVNjaGVkdWxlZD0hMSxzdH0sZGVsZXRlKCl7dGhpcy4kJC5wdHJ8fEI0ZSh0aGlzKSx0aGlzLiQk''@;'; put 'put ''LmRlbGV0ZVNjaGVkdWxlZCYmIXRoaXMuJCQucHJlc2VydmVQb2ludGVyT25EZWxldGUmJnVjKCJPYmplY3QgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIiksSSRlKHRoaXMpLEQkZSh0aGlzLiQkKSx0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlfHwodGhpcy4kJC5zbWFy''@;'; put 'put ''dFB0cj12b2lkIDAsdGhpcy4kJC5wdHI9dm9pZCAwKX0saXNEZWxldGVkKCl7cmV0dXJuIXRoaXMuJCQucHRyfSxkZWxldGVMYXRlcigpe3JldHVybiB0aGlzLiQkLnB0cnx8QjRlKHRoaXMpLHRoaXMuJCQuZGVsZXRlU2NoZWR1bGVkJiYhdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0''@;'; put 'put ''ZSYmdWMoIk9iamVjdCBhbHJlYWR5IHNjaGVkdWxlZCBmb3IgZGVsZXRpb24iKSxvWC5wdXNoKHRoaXMpLHRoaXMuJCQuZGVsZXRlU2NoZWR1bGVkPSEwLHRoaXN9fSk7bGV0IFZlPVN5bWJvbC5kaXNwb3NlO1ZlJiYoRWVbVmVdPUVlLmRlbGV0ZSl9KSgpLE9iamVjdC5hc3NpZ24oZFgucHJv''@;'; put 'put ''dG90eXBlLHtnZXRQb2ludGVlKEVlKXtyZXR1cm4gdGhpcy5yYXdHZXRQb2ludGVlJiYoRWU9dGhpcy5yYXdHZXRQb2ludGVlKEVlKSksRWV9LGRlc3RydWN0b3IoRWUpe3RoaXMucmF3RGVzdHJ1Y3Rvcj8uKEVlKX0scmVhZFZhbHVlRnJvbVBvaW50ZXI6bFgsZnJvbVdpcmVUeXBlOmZ1bmN0''@;'; put 'put ''aW9uIF81bihFZSl7dmFyIFZlPXRoaXMuZ2V0UG9pbnRlZShFZSk7aWYoIVZlKXJldHVybiB0aGlzLmRlc3RydWN0b3IoRWUpLG51bGw7dmFyIHN0PSgoRWUsVmUpPT4oVmU9KChFZSxWZSk9Pntmb3Iodm9pZCAwPT09VmUmJnVjKCJwdHIgc2hvdWxkIG5vdCBiZSB1bmRlZmluZWQiKTtFZS5i''@;'; put 'put ''YXNlQ2xhc3M7KVZlPUVlLnVwY2FzdChWZSksRWU9RWUuYmFzZUNsYXNzO3JldHVybiBWZX0pKEVlLFZlKSxwNW5bVmVdKSkodGhpcy5yZWdpc3RlcmVkQ2xhc3MsVmUpO2lmKHZvaWQgMCE9PXN0KXtpZigwPT09c3QuJCQuY291bnQudmFsdWUpcmV0dXJuIHN0LiQkLnB0cj1WZSxzdC4kJC5z''@;'; put 'put ''bWFydFB0cj1FZSxzdC5jbG9uZSgpO3ZhciBNdD1zdC5jbG9uZSgpO3JldHVybiB0aGlzLmRlc3RydWN0b3IoRWUpLE10fWZ1bmN0aW9uIFl0KCl7cmV0dXJuIHVYKHRoaXMucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHRoaXMuaXNTbWFydFBvaW50ZXI/e3B0clR5cGU6dGhp''@;'; put 'put ''cy5wb2ludGVlVHlwZSxwdHI6VmUsc21hcnRQdHJUeXBlOnRoaXMsc21hcnRQdHI6RWV9OntwdHJUeXBlOnRoaXMscHRyOkVlfSl9dmFyIEtuLGFuPXRoaXMucmVnaXN0ZXJlZENsYXNzLmdldEFjdHVhbFR5cGUoVmUpLEluPU4kZVthbl07aWYoIUluKXJldHVybiBZdC5jYWxsKHRoaXMpO3Zh''@;'; put 'put ''ciBsaT1GJGUoVmUsdGhpcy5yZWdpc3RlcmVkQ2xhc3MsKEtuPXRoaXMuaXNDb25zdD9Jbi5jb25zdFBvaW50ZXJUeXBlOkluLnBvaW50ZXJUeXBlKS5yZWdpc3RlcmVkQ2xhc3MpO3JldHVybiBudWxsPT09bGk/WXQuY2FsbCh0aGlzKTp1WChLbi5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQ''@;'; put 'put ''cm90b3R5cGUsdGhpcy5pc1NtYXJ0UG9pbnRlcj97cHRyVHlwZTpLbixwdHI6bGksc21hcnRQdHJUeXBlOnRoaXMsc21hcnRQdHI6RWV9OntwdHJUeXBlOktuLHB0cjpsaX0pfX0pLGUud2FzbUJpbmFyeSYmKFo9ZS53YXNtQmluYXJ5KSxlLlVURjhUb1N0cmluZz1JcixlLnN0cmluZ1RvVVRG''@;'; put 'put ''OD1jeSxlLmxlbmd0aEJ5dGVzVVRGOD1SYTt2YXIgSyRlLHE0ZSx0NSxYJGUsUSRlLEokZSxlcWUsdHFlLG5xZSxycWUsaXFlLG9xZSxoWCxhcWUsQlAsQTZuPXsxOTI3OTI6KEVlLFZlKT0+e3ZhciBzdD1JcihFZSksTXQ9SXIoVmUpO090LmNyZWF0ZVBhdGgoIi8iLGpyLmRpcm5hbWUoc3Qp''@;'; put 'put ''KSxPdC53cml0ZUZpbGUoanIuam9pbigiLyIsc3QpLE10KX19LFY2bj17dDooRWUsVmUsc3QsTXQpPT5xdChgQXNzZXJ0aW9uIGZhaWxlZDogJHtJcihFZSl9LCBhdDogYCtbVmU/SXIoVmUpOiJ1bmtub3duIGZpbGVuYW1lIixzdCxNdD9JcihNdCk6InVua25vd24gZnVuY3Rpb24iXSksTjpm''@;'; put 'put ''dW5jdGlvbiBPUChFZSxWZSxzdCxNdCl7dHJ5e2lmKFZlPUF1LmdldFN0cihWZSksVmU9QXUuY2FsY3VsYXRlQXQoRWUsVmUpLC04JnN0KXJldHVybi0yODt2YXIgYW49T3QubG9va3VwUGF0aChWZSx7Zm9sbG93OiEwfSkubm9kZTtpZighYW4pcmV0dXJuLTQ0O3ZhciBJbj0iIjtyZXR1cm4g''@;'; put 'put ''NCZzdCYmKEluKz0iciIpLDImc3QmJihJbis9InciKSwxJnN0JiYoSW4rPSJ4IiksSW4mJk90Lm5vZGVQZXJtaXNzaW9ucyhhbixJbik/LTI6MH1jYXRjaChLbil7aWYodHlwZW9mIE90PiJ1Inx8IkVycm5vRXJyb3IiIT09S24ubmFtZSl0aHJvdyBLbjtyZXR1cm4tS24uZXJybm99fSxvOmZ1''@;'; put 'put ''bmN0aW9uIG5YKEVlLFZlLHN0KXtBdS52YXJhcmdzPXN0O3RyeXt2YXIgTXQ9QXUuZ2V0U3RyZWFtRnJvbUZEKEVlKTtzd2l0Y2goVmUpe2Nhc2UgMDppZigoWXQ9cDIoKSk8MClyZXR1cm4tMjg7Zm9yKDtPdC5zdHJlYW1zW1l0XTspWXQrKztyZXR1cm4gT3QuZHVwU3RyZWFtKE10LFl0KS5m''@;'; put 'put ''ZDtjYXNlIDE6Y2FzZSAyOmNhc2UgMTM6Y2FzZSAxNDpyZXR1cm4gMDtjYXNlIDM6cmV0dXJuIE10LmZsYWdzO2Nhc2UgNDp2YXIgWXQ9cDIoKTtyZXR1cm4gTXQuZmxhZ3M9LTI4OTc5MyZNdC5mbGFnc3wyODk3OTImWXQsMDtjYXNlIDEyOnJldHVybiBZdD1EMCgpLEhvW1l0KzA+PjFdPTIs''@;'; put 'put ''MH1yZXR1cm4tMjh9Y2F0Y2gobGkpe2lmKHR5cGVvZiBPdD4idSJ8fCJFcnJub0Vycm9yIiE9PWxpLm5hbWUpdGhyb3cgbGk7cmV0dXJuLWxpLmVycm5vfX0sTTpmdW5jdGlvbiByWChFZSxWZSl7dHJ5e3JldHVybiBBdS53cml0ZVN0YXQoVmUsT3QuZnN0YXQoRWUpKX1jYXRjaChzdCl7aWYo''@;'; put 'put ''dHlwZW9mIE90PiJ1Inx8IkVycm5vRXJyb3IiIT09c3QubmFtZSl0aHJvdyBzdDtyZXR1cm4tc3QuZXJybm99fSxROmZ1bmN0aW9uIGo0bihFZSxWZSxzdCl7QXUudmFyYXJncz1zdDt0cnl7dmFyIE10PUF1LmdldFN0cmVhbUZyb21GRChFZSk7c3dpdGNoKFZlKXtjYXNlIDIxNTA5OmNhc2Ug''@;'; put 'put ''MjE1MTA6Y2FzZSAyMTUxMTpjYXNlIDIxNTEyOmNhc2UgMjE1MjQ6Y2FzZSAyMTUxNTpyZXR1cm4gTXQudHR5PzA6LTU5O2Nhc2UgMjE1MDU6aWYoIU10LnR0eSlyZXR1cm4tNTk7aWYoTXQudHR5Lm9wcy5pb2N0bF90Y2dldHMpe3ZhciBZdD1NdC50dHkub3BzLmlvY3RsX3RjZ2V0cyhNdCks''@;'; put 'put ''YW49RDAoKTt4aVthbj4+Ml09WXQuY19pZmxhZ3x8MCx4aVthbis0Pj4yXT1ZdC5jX29mbGFnfHwwLHhpW2FuKzg+PjJdPVl0LmNfY2ZsYWd8fDAseGlbYW4rMTI+PjJdPVl0LmNfbGZsYWd8fDA7Zm9yKHZhciBJbj0wO0luPDMyO0luKyspVG9bYW4rSW4rMTddPVl0LmNfY2NbSW5dfHwwO3Jl''@;'; put 'put ''dHVybiAwfXJldHVybiAwO2Nhc2UgMjE1MDY6Y2FzZSAyMTUwNzpjYXNlIDIxNTA4OmlmKCFNdC50dHkpcmV0dXJuLTU5O2lmKE10LnR0eS5vcHMuaW9jdGxfdGNzZXRzKXthbj1EMCgpO3ZhciBLbj14aVthbj4+Ml0sbGk9eGlbYW4rND4+Ml0sUWk9eGlbYW4rOD4+Ml0sUW89eGlbYW4rMTI+''@;'; put 'put ''PjJdLElhPVtdO2ZvcihJbj0wO0luPDMyO0luKyspSWEucHVzaChUb1thbitJbisxN10pO3JldHVybiBNdC50dHkub3BzLmlvY3RsX3Rjc2V0cyhNdC50dHksVmUse2NfaWZsYWc6S24sY19vZmxhZzpsaSxjX2NmbGFnOlFpLGNfbGZsYWc6UW8sY19jYzpJYX0pfXJldHVybiAwO2Nhc2UgMjE1''@;'; put 'put ''MTk6cmV0dXJuIE10LnR0eT8oYW49RDAoKSx4aVthbj4+Ml09MCwwKTotNTk7Y2FzZSAyMTUyMDpyZXR1cm4gTXQudHR5Py0yODotNTk7Y2FzZSAyMTUzNzpjYXNlIDIxNTMxOnJldHVybiBhbj1EMCgpLE90LmlvY3RsKE10LFZlLGFuKTtjYXNlIDIxNTIzOmlmKCFNdC50dHkpcmV0dXJuLTU5''@;'; put 'put ''O2lmKE10LnR0eS5vcHMuaW9jdGxfdGlvY2d3aW5zeil7dmFyIEpvPU10LnR0eS5vcHMuaW9jdGxfdGlvY2d3aW5zeihNdC50dHkpO2FuPUQwKCksSG9bYW4+PjFdPUpvWzBdLEhvW2FuKzI+PjFdPUpvWzFdfXJldHVybiAwO2RlZmF1bHQ6cmV0dXJuLTI4fX1jYXRjaChoYSl7aWYodHlwZW9m''@;'; put 'put ''IE90PiJ1Inx8IkVycm5vRXJyb3IiIT09aGEubmFtZSl0aHJvdyBoYTtyZXR1cm4taGEuZXJybm99fSxrOmZ1bmN0aW9uIFU0bihFZSxWZSxzdCxNdCl7QXUudmFyYXJncz1NdDt0cnl7VmU9QXUuZ2V0U3RyKFZlKSxWZT1BdS5jYWxjdWxhdGVBdChFZSxWZSk7dmFyIFl0PU10P3AyKCk6MDty''@;'; put 'put ''ZXR1cm4gNjQmc3QmJihZdCY9fkF1LmN1cnJlbnRVbWFzayksT3Qub3BlbihWZSxzdCxZdCkuZmR9Y2F0Y2goYW4pe2lmKHR5cGVvZiBPdD4idSJ8fCJFcnJub0Vycm9yIiE9PWFuLm5hbWUpdGhyb3cgYW47cmV0dXJuLWFuLmVycm5vfX0sRDpmdW5jdGlvbiB6NG4oRWUsVmUsc3QsTXQpe3Ry''@;'; put 'put ''eXtpZihWZT1BdS5nZXRTdHIoVmUpLFZlPUF1LmNhbGN1bGF0ZUF0KEVlLFZlKSxNdDw9MClyZXR1cm4tMjg7dmFyIFl0PU90LnJlYWRsaW5rKFZlKSxhbj1NYXRoLm1pbihNdCxSYShZdCkpLEluPVRvW3N0K2FuXTtyZXR1cm4gY3koWXQsc3QsTXQrMSksVG9bc3QrYW5dPUluLGFufWNhdGNo''@;'; put 'put ''KEtuKXtpZih0eXBlb2YgT3Q+InUifHwiRXJybm9FcnJvciIhPT1Lbi5uYW1lKXRocm93IEtuO3JldHVybi1Lbi5lcnJub319LEU6ZnVuY3Rpb24gVzRuKEVlKXt0cnl7cmV0dXJuIEVlPUF1LmdldFN0cihFZSksT3Qucm1kaXIoRWUpLDB9Y2F0Y2goVmUpe2lmKHR5cGVvZiBPdD4idSJ8fCJF''@;'; put 'put ''cnJub0Vycm9yIiE9PVZlLm5hbWUpdGhyb3cgVmU7cmV0dXJuLVZlLmVycm5vfX0sRjpmdW5jdGlvbiBZNG4oRWUsVmUsc3Qpe3RyeXtpZihWZT1BdS5nZXRTdHIoVmUpLFZlPUF1LmNhbGN1bGF0ZUF0KEVlLFZlKSxzdCl7aWYoNTEyIT09c3QpcmV0dXJuLTI4O090LnJtZGlyKFZlKX1lbHNl''@;'; put 'put ''IE90LnVubGluayhWZSk7cmV0dXJuIDB9Y2F0Y2goTXQpe2lmKHR5cGVvZiBPdD4idSJ8fCJFcnJub0Vycm9yIiE9PU10Lm5hbWUpdGhyb3cgTXQ7cmV0dXJuLU10LmVycm5vfX0sajpFZT0+e3ZhciBWZT1uZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKGskZSgpLFtFZV0se3RyYWNlU3RhY2s6''@;'; put 'put ''ITB9KTt0aHJvdyBWZS5tZXNzYWdlPUs0bihWZSksVmV9LE86KCk9PnF0KCIiKSxBOihFZSxWZSxzdCxNdCxZdCk9Pnt9LHI6KEVlLFZlLHN0LE10KT0+e3k5KEVlLHtuYW1lOlZlPXlnKFZlKSxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oWXQpe3JldHVybiEhWXR9LHRvV2lyZVR5cGU6ZnVuY3Rp''@;'; put 'put ''b24oWXQsYW4pe3JldHVybiBhbj9zdDpNdH0scmVhZFZhbHVlRnJvbVBvaW50ZXI6ZnVuY3Rpb24oWXQpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZSh1dFtZdF0pfSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfSxpOihFZSxWZSxzdCxNdCxZdCxhbixJbixLbixsaSxRaSxRbyxJYSxKbyk9''@;'; put 'put ''PntRbz15ZyhRbyksYW49YjkoWXQsYW4pLEtuJiY9YjkoSW4sS24pLFFpJiY9YjkobGksUWkpLEpvPWI5KElhLEpvKTt2YXIgaGE9KEVlPT57dmFyIFZlPShFZT1FZS5yZXBsYWNlKC9bXmEtekEtWjAtOV9dL2csIiQiKSkuY2hhckNvZGVBdCgwKTtyZXR1cm4gVmU+PTQ4JiZWZTw9NTc/YF8k''@;'; put 'put ''e0VlfWA6RWV9KShRbyk7KChFZSxWZSxzdCk9PntlLmhhc093blByb3BlcnR5KEVlKT8odWMoYENhbm5vdCByZWdpc3RlciBwdWJsaWMgbmFtZSAnJHtFZX0nIHR3aWNlYCksVTRlKGUsRWUsRWUpLGVbRWVdLm92ZXJsb2FkVGFibGUuaGFzT3duUHJvcGVydHkoc3QpJiZ1YyhgQ2Fubm90IHJl''@;'; put 'put ''Z2lzdGVyIG11bHRpcGxlIG92ZXJsb2FkcyBvZiBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGFyZ3VtZW50cyAoJHtzdH0pIWApLGVbRWVdLm92ZXJsb2FkVGFibGVbc3RdPVZlKTooZVtFZV09VmUsZVtFZV0uYXJnQ291bnQ9c3QpfSkoaGEsZnVuY3Rpb24oKXtNQShgQ2Fu''@;'; put 'put ''bm90IGNvbnN0cnVjdCAke1FvfSBkdWUgdG8gdW5ib3VuZCB0eXBlc2AsW010XSl9KSx3OShbRWUsVmUsc3RdLE10P1tNdF06W10sd2w9Pnt2YXIga3UsWGM7d2w9d2xbMF0sWGM9TXQ/KGt1PXdsLnJlZ2lzdGVyZWRDbGFzcykuaW5zdGFuY2VQcm90b3R5cGU6YVgucHJvdG90eXBlO3ZhciAk''@;'; put 'put ''bD1PJGUoUW8sZnVuY3Rpb24oLi4uWDRlKXtpZihPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykhPT1vMCl0aHJvdyBuZXcgTlAoYFVzZSAnbmV3JyB0byBjb25zdHJ1Y3QgJHtRb31gKTtpZih2b2lkIDA9PT1YaC5jb25zdHJ1Y3Rvcl9ib2R5KXRocm93IG5ldyBOUChgJHtRb30gaGFzIG5v''@;'; put 'put ''IGFjY2Vzc2libGUgY29uc3RydWN0b3JgKTt2YXIgc3FlPVhoLmNvbnN0cnVjdG9yX2JvZHlbWDRlLmxlbmd0aF07aWYodm9pZCAwPT09c3FlKXRocm93IG5ldyBOUChgVHJpZWQgdG8gaW52b2tlIGN0b3Igb2YgJHtRb30gd2l0aCBpbnZhbGlkIG51bWJlciBvZiBwYXJhbWV0ZXJzICgke1g0''@;'; put 'put ''ZS5sZW5ndGh9KSAtIGV4cGVjdGVkICgke09iamVjdC5rZXlzKFhoLmNvbnN0cnVjdG9yX2JvZHkpLnRvU3RyaW5nKCl9KSBwYXJhbWV0ZXJzIGluc3RlYWQhYCk7cmV0dXJuIHNxZS5hcHBseSh0aGlzLFg0ZSl9KSxvMD1PYmplY3QuY3JlYXRlKFhjLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6JGx9''@;'; put 'put ''fSk7JGwucHJvdG90eXBlPW8wO3ZhciBYaD1uZXcgdTVuKFFvLCRsLG8wLEpvLGt1LGFuLEtuLFFpKTtYaC5iYXNlQ2xhc3MmJihYaC5iYXNlQ2xhc3MuX19kZXJpdmVkQ2xhc3Nlcz8/PVtdLFhoLmJhc2VDbGFzcy5fX2Rlcml2ZWRDbGFzc2VzLnB1c2goWGgpKTt2YXIgYXA9bmV3IGRYKFFv''@;'; put 'put ''LFhoLCEwLCExLCExKSxwZj1uZXcgZFgoUW8rIioiLFhoLCExLCExLCExKSx4aD1uZXcgZFgoUW8rIiBjb25zdCoiLFhoLCExLCEwLCExKTtyZXR1cm4gTiRlW0VlXT17cG9pbnRlclR5cGU6cGYsY29uc3RQb2ludGVyVHlwZTp4aH0sKChFZSxWZSxzdCk9PntlLmhhc093blByb3BlcnR5KEVl''@;'; put 'put ''KXx8Y1goIlJlcGxhY2luZyBub25leGlzdGVudCBwdWJsaWMgc3ltYm9sIiksZVtFZV09VmUsZVtFZV0uYXJnQ291bnQ9c3R9KShoYSwkbCksW2FwLHBmLHhoXX0pfSxtOihFZSxWZSxzdCxNdCxZdCxhbixJbixLbixsaSk9Pnt2YXIgUWk9WTRlKHN0LE10KTtWZT15ZyhWZSksVmU9ViRlKFZl''@;'; put 'put ''KSxhbj1iOShZdCxhbixLbiksdzkoW10sW0VlXSxRbz0+e3ZhciBJYT1gJHsoUW89UW9bMF0pLm5hbWV9LiR7VmV9YDtmdW5jdGlvbiBKbygpe01BKGBDYW5ub3QgY2FsbCAke0lhfSBkdWUgdG8gdW5ib3VuZCB0eXBlc2AsUWkpfVZlLnN0YXJ0c1dpdGgoIkBAIikmJihWZT1TeW1ib2xbVmUu''@;'; put 'put ''c3Vic3RyaW5nKDIpXSk7dmFyIGhhPVFvLnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3RvcjtyZXR1cm4gdm9pZCAwPT09aGFbVmVdPyhKby5hcmdDb3VudD1zdC0xLGhhW1ZlXT1Kbyk6KFU0ZShoYSxWZSxJYSksaGFbVmVdLm92ZXJsb2FkVGFibGVbc3QtMV09Sm8pLHc5KFtdLFFpLHdsPT57''@;'; put 'put ''dmFyIGt1PVt3bFswXSxudWxsXS5jb25jYXQod2wuc2xpY2UoMSkpLFhjPVc0ZShJYSxrdSxudWxsLGFuLEluKTtpZih2b2lkIDA9PT1oYVtWZV0ub3ZlcmxvYWRUYWJsZT8oWGMuYXJnQ291bnQ9c3QtMSxoYVtWZV09WGMpOmhhW1ZlXS5vdmVybG9hZFRhYmxlW3N0LTFdPVhjLFFvLnJlZ2lz''@;'; put 'put ''dGVyZWRDbGFzcy5fX2Rlcml2ZWRDbGFzc2VzKWZvcihsZXQgJGwgb2YgUW8ucmVnaXN0ZXJlZENsYXNzLl9fZGVyaXZlZENsYXNzZXMpJGwuY29uc3RydWN0b3IuaGFzT3duUHJvcGVydHkoVmUpfHwoJGwuY29uc3RydWN0b3JbVmVdPVhjKTtyZXR1cm5bXX0pLFtdfSl9LGU6KEVlLFZlLHN0''@;'; put 'put ''LE10LFl0LGFuKT0+e3ZhciBJbj1ZNGUoVmUsc3QpO1l0PWI5KE10LFl0KSx3OShbXSxbRWVdLEtuPT57dmFyIGxpPWBjb25zdHJ1Y3RvciAkeyhLbj1LblswXSkubmFtZX1gO2lmKHZvaWQgMD09PUtuLnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcl9ib2R5JiYoS24ucmVnaXN0ZXJlZENs''@;'; put 'put ''YXNzLmNvbnN0cnVjdG9yX2JvZHk9W10pLHZvaWQgMCE9PUtuLnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcl9ib2R5W1ZlLTFdKXRocm93IG5ldyBOUChgQ2Fubm90IHJlZ2lzdGVyIG11bHRpcGxlIGNvbnN0cnVjdG9ycyB3aXRoIGlkZW50aWNhbCBudW1iZXIgb2YgcGFyYW1ldGVycyAo''@;'; put 'put ''JHtWZS0xfSkgZm9yIGNsYXNzICcke0tuLm5hbWV9JyEgT3ZlcmxvYWQgcmVzb2x1dGlvbiBpcyBjdXJyZW50bHkgb25seSBwZXJmb3JtZWQgdXNpbmcgdGhlIHBhcmFtZXRlciBjb3VudCwgbm90IGFjdHVhbCB0eXBlIGluZm8hYCk7cmV0dXJuIEtuLnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1''@;'; put 'put ''Y3Rvcl9ib2R5W1ZlLTFdPSgpPT57TUEoYENhbm5vdCBjb25zdHJ1Y3QgJHtLbi5uYW1lfSBkdWUgdG8gdW5ib3VuZCB0eXBlc2AsSW4pfSx3OShbXSxJbixRaT0+KFFpLnNwbGljZSgxLDAsbnVsbCksS24ucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHlbVmUtMV09VzRlKGxpLFFp''@;'; put 'put ''LG51bGwsWXQsYW4pLFtdKSksW119KX0sYTooRWUsVmUsc3QsTXQsWXQsYW4sSW4sS24sbGksUWkpPT57dmFyIFFvPVk0ZShzdCxNdCk7VmU9eWcoVmUpLFZlPVYkZShWZSksYW49YjkoWXQsYW4sbGkpLHc5KFtdLFtFZV0sSWE9Pnt2YXIgSm89YCR7KElhPUlhWzBdKS5uYW1lfS4ke1ZlfWA7''@;'; put 'put ''ZnVuY3Rpb24gaGEoKXtNQShgQ2Fubm90IGNhbGwgJHtKb30gZHVlIHRvIHVuYm91bmQgdHlwZXNgLFFvKX1WZS5zdGFydHNXaXRoKCJAQCIpJiYoVmU9U3ltYm9sW1ZlLnN1YnN0cmluZygyKV0pLEtuJiZJYS5yZWdpc3RlcmVkQ2xhc3MucHVyZVZpcnR1YWxGdW5jdGlvbnMucHVzaChWZSk7''@;'; put 'put ''dmFyIHdsPUlhLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSxrdT13bFtWZV07cmV0dXJuIHZvaWQgMD09PWt1fHx2b2lkIDA9PT1rdS5vdmVybG9hZFRhYmxlJiZrdS5jbGFzc05hbWUhPT1JYS5uYW1lJiZrdS5hcmdDb3VudD09PXN0LTI/KGhhLmFyZ0NvdW50PXN0LTIsaGEu''@;'; put 'put ''Y2xhc3NOYW1lPUlhLm5hbWUsd2xbVmVdPWhhKTooVTRlKHdsLFZlLEpvKSx3bFtWZV0ub3ZlcmxvYWRUYWJsZVtzdC0yXT1oYSksdzkoW10sUW8sWGM9Pnt2YXIgJGw9VzRlKEpvLFhjLElhLGFuLEluKTtyZXR1cm4gdm9pZCAwPT09d2xbVmVdLm92ZXJsb2FkVGFibGU/KCRsLmFyZ0NvdW50''@;'; put 'put ''PXN0LTIsd2xbVmVdPSRsKTp3bFtWZV0ub3ZlcmxvYWRUYWJsZVtzdC0yXT0kbCxbXX0pLFtdfSl9LGQ6KEVlLFZlLHN0LE10LFl0LGFuLEluLEtuLGxpLFFpKT0+e1ZlPXlnKFZlKSxZdD1iOShNdCxZdCksdzkoW10sW0VlXSxRbz0+e3ZhciBJYT1gJHsoUW89UW9bMF0pLm5hbWV9LiR7VmV9''@;'; put 'put ''YCxKbz17Z2V0KCl7TUEoYENhbm5vdCBhY2Nlc3MgJHtJYX0gZHVlIHRvIHVuYm91bmQgdHlwZXNgLFtzdCxJbl0pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH07cmV0dXJuIEpvLnNldD1saT8oKT0+TUEoYENhbm5vdCBhY2Nlc3MgJHtJYX0gZHVlIHRvIHVuYm91bmQgdHlwZXNg''@;'; put 'put ''LFtzdCxJbl0pOmhhPT51YyhJYSsiIGlzIGEgcmVhZC1vbmx5IHByb3BlcnR5IiksT2JqZWN0LmRlZmluZVByb3BlcnR5KFFvLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSxWZSxKbyksdzkoW10sbGk/W3N0LEluXTpbc3RdLGhhPT57dmFyIHdsPWhhWzBdLGt1PXtnZXQoKXt2''@;'; put 'put ''YXIgJGw9QiRlKHRoaXMsUW8sSWErIiBnZXR0ZXIiKTtyZXR1cm4gd2wuZnJvbVdpcmVUeXBlKFl0KGFuLCRsKSl9LGVudW1lcmFibGU6ITB9O2lmKGxpKXtsaT1iOShLbixsaSk7dmFyIFhjPWhhWzFdO2t1LnNldD1mdW5jdGlvbigkbCl7dmFyIG8wPUIkZSh0aGlzLFFvLElhKyIgc2V0dGVy''@;'; put 'put ''IiksWGg9W107bGkoUWksbzAsWGMudG9XaXJlVHlwZShYaCwkbCkpLEgkZShYaCl9fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoUW8ucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLFZlLGt1KSxbXX0pLFtdfSl9LFI6RWU9Pnk5KEVlLEw1bikscDooRWUsVmUsc3QpPT57''@;'; put 'put ''eTkoRWUse25hbWU6VmU9eWcoVmUpLGZyb21XaXJlVHlwZTpNdD0+TXQsdG9XaXJlVHlwZTooTXQsWXQpPT5ZdCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpONW4oVmUsc3QpLGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSl9LGM6KEVlLFZlLHN0LE10LFl0KT0+e1ZlPXlnKFZlKTtsZXQgSW49bGk9''@;'; put 'put ''PmxpO2lmKDA9PT1NdCl7dmFyIEtuPTMyLTgqc3Q7SW49bGk9PmxpPDxLbj4+PktuLFl0PUluKFl0KX15OShFZSx7bmFtZTpWZSxmcm9tV2lyZVR5cGU6SW4sdG9XaXJlVHlwZToobGksUWkpPT5RaSxyZWFkVmFsdWVGcm9tUG9pbnRlcjpQNW4oVmUsc3QsMCE9PU10KSxkZXN0cnVjdG9yRnVu''@;'; put 'put ''Y3Rpb246bnVsbH0pfSxiOihFZSxWZSxzdCk9Pnt2YXIgWXQ9W0ludDhBcnJheSxVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5XVtWZV07ZnVuY3Rpb24gYW4oSW4pe3JldHVybiBuZXcgWXQo''@;'; put 'put ''VG8uYnVmZmVyLGFvW0luKzQ+PjJdLGFvW0luPj4yXSl9eTkoRWUse25hbWU6c3Q9eWcoc3QpLGZyb21XaXJlVHlwZTphbixyZWFkVmFsdWVGcm9tUG9pbnRlcjphbn0se2lnbm9yZUR1cGxpY2F0ZVJlZ2lzdHJhdGlvbnM6ITB9KX0scTooRWUsVmUpPT57eTkoRWUse25hbWU6VmU9eWcoVmUp''@;'; put 'put ''LGZyb21XaXJlVHlwZShNdCl7dmFyIEluO3JldHVybiBJbj1JcihNdCs0LGFvW010Pj4yXSwhMCksdDUoTXQpLElufSx0b1dpcmVUeXBlKE10LFl0KXtZdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiYoWXQ9bmV3IFVpbnQ4QXJyYXkoWXQpKTt2YXIgYW4sSW49InN0cmluZyI9PXR5cGVvZiBZ''@;'; put 'put ''dDtJbnx8QXJyYXlCdWZmZXIuaXNWaWV3KFl0KSYmMT09WXQuQllURVNfUEVSX0VMRU1FTlR8fHVjKCJDYW5ub3QgcGFzcyBub24tc3RyaW5nIHRvIHN0ZDo6c3RyaW5nIiksYW49SW4/UmEoWXQpOll0Lmxlbmd0aDt2YXIgS249cTRlKDQrYW4rMSksbGk9S24rNDtyZXR1cm4gYW9bS24+PjJd''@;'; put 'put ''PWFuLEluP2N5KFl0LGxpLGFuKzEpOnV0LnNldChZdCxsaSksbnVsbCE9PU10JiZNdC5wdXNoKHQ1LEtuKSxLbn0scmVhZFZhbHVlRnJvbVBvaW50ZXI6bFgsZGVzdHJ1Y3RvckZ1bmN0aW9uKE10KXt0NShNdCl9fSl9LGg6KEVlLFZlLHN0KT0+e3ZhciBNdCxZdCxhbjtzdD15ZyhzdCksMj09''@;'; put 'put ''PVZlPyhNdD1qNW4sWXQ9VTVuLGFuPXo1bik6KE10PVc1bixZdD1ZNW4sYW49WjVuKSx5OShFZSx7bmFtZTpzdCxmcm9tV2lyZVR5cGU6SW49Pnt2YXIgbGk9TXQoSW4rNCxhb1tJbj4+Ml0qVmUsITApO3JldHVybiB0NShJbiksbGl9LHRvV2lyZVR5cGU6KEluLEtuKT0+eyJzdHJpbmciIT10''@;'; put 'put ''eXBlb2YgS24mJnVjKGBDYW5ub3QgcGFzcyBub24tc3RyaW5nIHRvIEMrKyBzdHJpbmcgdHlwZSAke3N0fWApO3ZhciBsaT1hbihLbiksUWk9cTRlKDQrbGkrVmUpO3JldHVybiBhb1tRaT4+Ml09bGkvVmUsWXQoS24sUWkrNCxsaStWZSksbnVsbCE9PUluJiZJbi5wdXNoKHQ1LFFpKSxRaX0s''@;'; put 'put ''cmVhZFZhbHVlRnJvbVBvaW50ZXI6bFgsZGVzdHJ1Y3RvckZ1bmN0aW9uKEluKXt0NShJbil9fSl9LHM6KEVlLFZlKT0+e3k5KEVlLHtpc1ZvaWQ6ITAsbmFtZTpWZT15ZyhWZSksZnJvbVdpcmVUeXBlOigpPT57fSx0b1dpcmVUeXBlOihzdCxNdCk9Pnt9fSl9LEg6KCk9Pnt9LHc6ZnVuY3Rp''@;'; put 'put ''b24gdDZuKEVlLFZlLHN0KXt2YXIgTXQ9UFAoRWUsVmUpLFl0PW5ldyBEYXRlKDFlMypNdCk7aWYoaXNOYU4oWXQuZ2V0VGltZSgpKSlyZXR1cm4gMTt4aVtzdD4+Ml09WXQuZ2V0U2Vjb25kcygpLHhpW3N0KzQ+PjJdPVl0LmdldE1pbnV0ZXMoKSx4aVtzdCs4Pj4yXT1ZdC5nZXRIb3Vycygp''@;'; put 'put ''LHhpW3N0KzEyPj4yXT1ZdC5nZXREYXRlKCkseGlbc3QrMTY+PjJdPVl0LmdldE1vbnRoKCkseGlbc3QrMjA+PjJdPVl0LmdldEZ1bGxZZWFyKCktMTkwMCx4aVtzdCsyND4+Ml09WXQuZ2V0RGF5KCk7dmFyIGFuPTB8KEVlPT4oKEVlPT5FZSU0PT0wJiYoRWUlMTAwIT0wfHxFZSU0MDA9PTAp''@;'; put 'put ''KShFZS5nZXRGdWxsWWVhcigpKT9RNW46SjVuKVtFZS5nZXRNb250aCgpXStFZS5nZXREYXRlKCktMSkoWXQpO3hpW3N0KzI4Pj4yXT1hbix4aVtzdCszNj4+Ml09LTYwKll0LmdldFRpbWV6b25lT2Zmc2V0KCk7dmFyIEluPW5ldyBEYXRlKFl0LmdldEZ1bGxZZWFyKCksMCwxKSxLbj1uZXcg''@;'; put 'put ''RGF0ZShZdC5nZXRGdWxsWWVhcigpLDYsMSkuZ2V0VGltZXpvbmVPZmZzZXQoKSxsaT1Jbi5nZXRUaW1lem9uZU9mZnNldCgpLFFpPTB8KEtuIT1saSYmWXQuZ2V0VGltZXpvbmVPZmZzZXQoKT09TWF0aC5taW4obGksS24pKTtyZXR1cm4geGlbc3QrMzI+PjJdPVFpLDB9LHU6ZnVuY3Rpb24g''@;'; put 'put ''bjZuKEVlLFZlLHN0LE10LFl0LGFuLEluLEtuKXt2YXIgbGk9UFAoWXQsYW4pO3RyeXt2YXIgUWk9QXUuZ2V0U3RyZWFtRnJvbUZEKE10KSxRbz1PdC5tbWFwKFFpLEVlLGxpLFZlLHN0KSxJYT1Rby5wdHI7cmV0dXJuIHhpW0luPj4yXT1Rby5hbGxvY2F0ZWQsYW9bS24+PjJdPUlhLDB9Y2F0''@;'; put 'put ''Y2goSm8pe2lmKHR5cGVvZiBPdD4idSJ8fCJFcnJub0Vycm9yIiE9PUpvLm5hbWUpdGhyb3cgSm87cmV0dXJuLUpvLmVycm5vfX0sdjpmdW5jdGlvbiByNm4oRWUsVmUsc3QsTXQsWXQsYW4sSW4pe3ZhciBLbj1QUChhbixJbik7dHJ5e3ZhciBsaT1BdS5nZXRTdHJlYW1Gcm9tRkQoWXQpOzIm''@;'; put 'put ''c3QmJkF1LmRvTXN5bmMoRWUsbGksVmUsTXQsS24pfWNhdGNoKFFpKXtpZih0eXBlb2YgT3Q+InUifHwiRXJybm9FcnJvciIhPT1RaS5uYW1lKXRocm93IFFpO3JldHVybi1RaS5lcnJub319LEI6KEVlLFZlKT0+e2lmKEhQW0VlXSYmKGNsZWFyVGltZW91dChIUFtFZV0uaWQpLGRlbGV0ZSBI''@;'; put 'put ''UFtFZV0pLCFWZSlyZXR1cm4gMDt2YXIgc3Q9c2V0VGltZW91dCgoKT0+e2RlbGV0ZSBIUFtFZV0sKEVlPT57aWYoIWVlKXRyeXtyZXR1cm4gRWUoKX1jYXRjaChWZSl7KEVlPT57aWYoRWUgaW5zdGFuY2VvZiBQb3x8InVud2luZCI9PUVlKXJldHVybiB2ZTtpKDAsRWUpfSkoVmUpfX0pKCgp''@;'; put 'put ''PT5RJGUoRWUsJCRlKCkpKX0sVmUpO3JldHVybiBIUFtFZV09e2lkOnN0LHRpbWVvdXRfbXM6VmV9LDB9LEk6KEVlLFZlLHN0LE10KT0+e3ZhciBZdD0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCksYW49bmV3IERhdGUoWXQsMCwxKSxJbj1uZXcgRGF0ZShZdCw2LDEpLEtuPWFuLmdldFRpbWV6''@;'; put 'put ''b25lT2Zmc2V0KCksbGk9SW4uZ2V0VGltZXpvbmVPZmZzZXQoKSxRaT1NYXRoLm1heChLbixsaSk7YW9bRWU+PjJdPTYwKlFpLHhpW1ZlPj4yXT0rKEtuIT1saSk7dmFyIFFvPWhhPT57dmFyIHdsPWhhPj0wPyItIjoiKyIsa3U9TWF0aC5hYnMoaGEpO3JldHVybmBVVEMke3dsfSR7U3RyaW5n''@;'; put 'put ''KE1hdGguZmxvb3Ioa3UvNjApKS5wYWRTdGFydCgyLCIwIil9JHtTdHJpbmcoa3UlNjApLnBhZFN0YXJ0KDIsIjAiKX1gfSxJYT1RbyhLbiksSm89UW8obGkpO2xpPEtuPyhjeShJYSxzdCwxNyksY3koSm8sTXQsMTcpKTooY3koSWEsTXQsMTcpLGN5KEpvLHN0LDE3KSl9LHo6ZnVuY3Rpb24g''@;'; put 'put ''ZDZuKEVlLFZlLHN0LE10KXt2YXIgYW47aWYoUFAoVmUsc3QpLCEoRWU9PkVlPj0wJiZFZTw9MykoRWUpKXJldHVybiAyODthbj0wPT09RWU/cSRlKCk6JCRlKCk7dmFyIEluPU1hdGgucm91bmQoMWUzKmFuKjFlMyk7cmV0dXJuIGVpPVtJbj4+PjAsKGZyPUluLCtNYXRoLmFicyhmcik+PTE/''@;'; put 'put ''ZnI+MD8rTWF0aC5mbG9vcihmci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChmci0rKH5+ZnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSx4aVtNdD4+Ml09ZWlbMF0seGlbTXQrND4+Ml09ZWlbMV0sMH0seTooRWUsVmUsc3QpPT4oKEVlLFZlLHN0KT0+e3ZhciBNdD0oKEVlLFZl''@;'; put 'put ''KT0+e0c0ZS5sZW5ndGg9MDtmb3IodmFyIHN0O3N0PXV0W0VlKytdOyl7dmFyIE10PTEwNSE9c3Q7VmUrPShNdCY9MTEyIT1zdCkmJlZlJTg/NDowLEc0ZS5wdXNoKDExMj09c3Q/YW9bVmU+PjJdOjEwNT09c3Q/eGlbVmU+PjJdOnRzW1ZlPj4zXSksVmUrPU10Pzg6NH1yZXR1cm4gRzRlfSko''@;'; put 'put ''VmUsc3QpO3JldHVybiBBNm5bRWVdKC4uLk10KX0pKEVlLFZlLHN0KSxsOnEkZSxDOkVlPT57dmFyIFZlPXV0Lmxlbmd0aCxzdD0yMTQ3NDgzNjQ4O2lmKChFZT4+Pj0wKT5zdClyZXR1cm4hMTtmb3IodmFyIE10PTE7TXQ8PTQ7TXQqPTIpe3ZhciBZdD1WZSooMSsuMi9NdCk7WXQ9TWF0aC5t''@;'; put 'put ''aW4oWXQsRWUrMTAwNjYzMjk2KTt2YXIgYW49TWF0aC5taW4oc3QsZzkoTWF0aC5tYXgoRWUsWXQpLDY1NTM2KSk7aWYobTZuKGFuKSlyZXR1cm4hMH1yZXR1cm4hMX0sSjooRWUsVmUpPT57dmFyIHN0PTAsTXQ9MDtmb3IodmFyIFl0IG9mIFZQKCkpe3ZhciBhbj1WZStzdDthb1tFZStNdD4+''@;'; put 'put ''Ml09YW4sc3QrPWN5KFl0LGFuLDEvMCkrMSxNdCs9NH1yZXR1cm4gMH0sSzooRWUsVmUpPT57dmFyIHN0PVZQKCk7YW9bRWU+PjJdPXN0Lmxlbmd0aDt2YXIgTXQ9MDtmb3IodmFyIFl0IG9mIHN0KU10Kz1SYShZdCkrMTtyZXR1cm4gYW9bVmU+PjJdPU10LDB9LGc6KEVlLFZlKT0+e3ZlPUVl''@;'; put 'put ''LFokZShFZSl9LGY6ZnVuY3Rpb24gdzZuKEVlKXt0cnl7dmFyIFZlPUF1LmdldFN0cmVhbUZyb21GRChFZSk7cmV0dXJuIE90LmNsb3NlKFZlKSwwfWNhdGNoKHN0KXtpZih0eXBlb2YgT3Q+InUifHwiRXJybm9FcnJvciIhPT1zdC5uYW1lKXRocm93IHN0O3JldHVybiBzdC5lcnJub319LG46''@;'; put 'put ''ZnVuY3Rpb24gUzZuKEVlLFZlLHN0LE10KXt0cnl7dmFyIGFuPSgoRWUsVmUsc3QsTXQpPT57Zm9yKHZhciBZdD0wLGFuPTA7YW48c3Q7YW4rKyl7dmFyIEluPWFvW1ZlPj4yXSxLbj1hb1tWZSs0Pj4yXTtWZSs9ODt0cnl7dmFyIGxpPU90LnJlYWQoRWUsVG8sSW4sS24sTXQpfWNhdGNoKFFp''@;'; put 'put ''KXtpZihZdD4wJiZRaSBpbnN0YW5jZW9mIE90LkVycm5vRXJyb3ImJig2PT1RaS5lcnJub3x8Nj09UWkuZXJybm8pKWJyZWFrO3Rocm93IFFpfWlmKGxpPDApcmV0dXJuLTE7aWYoWXQrPWxpLGxpPEtuKWJyZWFrO3R5cGVvZiBNdDwidSImJihNdCs9bGkpfXJldHVybiBZdH0pKEF1LmdldFN0''@;'; put 'put ''cmVhbUZyb21GRChFZSksVmUsc3QpO3JldHVybiBhb1tNdD4+Ml09YW4sMH1jYXRjaChJbil7aWYodHlwZW9mIE90PiJ1Inx8IkVycm5vRXJyb3IiIT09SW4ubmFtZSl0aHJvdyBJbjtyZXR1cm4gSW4uZXJybm99fSx4OmZ1bmN0aW9uIEU2bihFZSxWZSxzdCxNdCxZdCl7dmFyIGFuPVBQKFZl''@;'; put 'put ''LHN0KTt0cnl7aWYoaXNOYU4oYW4pKXJldHVybiAyMjt2YXIgSW49QXUuZ2V0U3RyZWFtRnJvbUZEKEVlKTtyZXR1cm4gT3QubGxzZWVrKEluLGFuLE10KSxlaT1bSW4ucG9zaXRpb24+Pj4wLChmcj1Jbi5wb3NpdGlvbiwrTWF0aC5hYnMoZnIpPj0xP2ZyPjA/K01hdGguZmxvb3IoZnIvNDI5''@;'; put 'put ''NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoZnItKyh+fmZyPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0seGlbWXQ+PjJdPWVpWzBdLHhpW1l0KzQ+PjJdPWVpWzFdLEluLmdldGRlbnRzJiYwPT09YW4mJjA9PT1NdCYmKEluLmdldGRlbnRzPW51bGwpLDB9Y2F0Y2goS24pe2lmKHR5cGVv''@;'; put 'put ''ZiBPdD4idSJ8fCJFcnJub0Vycm9yIiE9PUtuLm5hbWUpdGhyb3cgS247cmV0dXJuIEtuLmVycm5vfX0sUDpmdW5jdGlvbiBUNm4oRWUsVmUsc3QsTXQpe3RyeXt2YXIgYW49KChFZSxWZSxzdCk9PntpZigxPT1zdClyZXR1cm4gT3Qud3JpdGUoRWUsVG8sYW9bVmU+PjJdLGFvW1ZlKzQ+PjJd''@;'; put 'put ''LHVuZGVmaW5lZCk7Zm9yKHZhciBZdD0wLGFuPTAsSW49VmU7YW48c3Q7YW4rKyxJbis9OClZdCs9YW9bSW4rND4+Ml07dmFyIEtuPW5ldyBVaW50OEFycmF5KFl0KSxsaT0wO2Zvcihhbj0wO2FuPHN0O2FuKyssVmUrPTgpe3ZhciBRaT1hb1tWZT4+Ml0sUW89YW9bVmUrND4+Ml07S24uc2V0''@;'; put 'put ''KHV0LnN1YmFycmF5KFFpLFFpK1FvKSxsaSksbGkrPVFvfXJldHVybiBPdC53cml0ZShFZSxLbiwwLFl0LHVuZGVmaW5lZCl9KShBdS5nZXRTdHJlYW1Gcm9tRkQoRWUpLFZlLHN0KTtyZXR1cm4gYW9bTXQ+PjJdPWFuLDB9Y2F0Y2goSW4pe2lmKHR5cGVvZiBPdD4idSJ8fCJFcnJub0Vycm9y''@;'; put 'put ''IiE9PUluLm5hbWUpdGhyb3cgSW47cmV0dXJuIEluLmVycm5vfX0sRzpaJGUsTDooRWUsVmUpPT5nbyh1dC5zdWJhcnJheShFZSxFZStWZSkpfTtmdW5jdGlvbiBLNGUoKXtyZXR1cm4oSzRlPUNyKGZ1bmN0aW9uKigpe08xJiYoeWllbGQgZmYoKSksIWVlJiZmdW5jdGlvbiBBdCgpe0hlPSEw''@;'; put 'put ''LCFlLm5vRlNJbml0JiYhT3QuaW5pdGlhbGl6ZWQmJk90LmluaXQoKSxUaC5pbml0KCksQlAuVCgpLE90Lmlnbm9yZVBlcm1pc3Npb25zPSExfSgpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gQlA9eWllbGQgZnVuY3Rpb24gSHIoKXtyZXR1cm4gdGkuYXBwbHkodGhpcyxhcmd1''@;'; put 'put ''bWVudHMpfSgpLHlpZWxkIGZ1bmN0aW9uIEI2bigpe3JldHVybiBLNGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSgpLGV9KSxrNGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBSNGUsT2ZuPW5ldyBJbnQ4QXJyYXkoWy0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0x''@;'; put 'put ''LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLDYyLDkwLDYzLDY0LDY1LDY2LC0xLDY3LDY4LDY5LDcwLDcxLC0xLDcyLDczLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDAsMSwyLDMsNCw1''@;'; put 'put ''LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsODEsLTEsODIsODMsODQsODUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsODYsODcsODgsODks''@;'; put 'put ''LTFdKTtmdW5jdGlvbiBQZm4oKXtyZXR1cm4gUjRlPz89ZnVuY3Rpb24gSWZuKG4sZSl7Zm9yKHZhciB0PVtdLHI9KyFlLGk9MCxvPTA7bi5sZW5ndGg7KXt2YXIgYT13Zm4obixyfHxlKTtpZigib2JqZWN0Ij09dHlwZW9mIGEpe2ZvcihyPyhlPW51bGwsYS53Lmxlbmd0aD09YS51JiYodC5w''@;'; put 'put ''dXNoKGU9YS53KSxvKz1hLnUpKToodC5wdXNoKGUpLGEuZT0wKTshYS5sOyl7dmFyIGw9a2ZuKG4sYSxlKTtsfHxJMSg1KSxlP2EuZT1hLnk6KHQucHVzaChsKSxvKz1sLmxlbmd0aCxfZm4oYS53LDAsbC5sZW5ndGgpLGEudy5zZXQobCxhLncubGVuZ3RoLWwubGVuZ3RoKSl9aT1hLmIrNCph''@;'; put 'put ''LmN9ZWxzZSBpPWE7bj1uLnN1YmFycmF5KGkpfXJldHVybiBmdW5jdGlvbihuLGUpe2lmKDE9PW4ubGVuZ3RoKXJldHVybiBuWzBdO2Zvcih2YXIgdD1uZXcgS2goZSkscj0wLGk9MDtyPG4ubGVuZ3RoOysrcil7dmFyIG89bltyXTt0LnNldChvLGkpLGkrPW8ubGVuZ3RofXJldHVybiB0fSh0''@;'; put 'put ''LG8pfShmdW5jdGlvbiBOZm4obil7bGV0IGU9bmV3IFVpbnQ4QXJyYXkoNjAwMjIyKSx0PTAscj0wLGk9MCxvPS0xO2ZvcihsZXQgYT0wLGw9bi5sZW5ndGg7YTxsO2ErKyl7bGV0IHU9bi5jaGFyQ29kZUF0KGEpO2lmKHU+MTI3KWNvbnRpbnVlO2xldCBnPU9mblt1XTtpZighKGc8MCkpaWYo''@;'; put 'put ''bzwwKW89ZztlbHNle28rPTkxKmcscnw9bzw8aSxpKz0oODE5MSZvKT44OD8xMzoxNDtkb3tlW3QrK109cixyPj4+PTgsaS09OH13aGlsZShpPjcpO289LTF9fXJldHVybiBvPj0wJiYoZVt0KytdPTI1NSYocnxvPDxpKSksZX0oJ3Y3I2EjQSg/PzZpPTl4QnQ8VCgiKDh0VVchLm07eSkjXlYp''@;'; put 'put ''W3I9OEMkOHhUR0khOy5wMXw3N3Z8UklFeixwOjhpIj84bXtKO0xHcmM+TkEoOGwuek8lUyMjaWYmV1ludzZzPC9vRzgmKCtrPkRkSTZYSFg9PXg5cnIhPjVBbXdsOnF8XyNdUSVMX35rbiRoXVV7aHZXM3chKGJGZEcofFYvQH1zZzloYnUubFFHM0JwNHM9akg4LzNyfkg5KyN1L0FxbWB5cSM7''@;'; put 'put ''RHJGY2BsW09UcS4zeGg/XXYoYTssZSZoIW5rOF5KdW5bTz12PiprOCVtSHNtNn5qJms+YjtaT1NEJEsqYiE+N3lUWG0+eiUuIls+ZF9ye3hPZ1Nufig0UUBFbUxAZXFieHgpUFNaQXFvYEdWP3crSm18bnN8JSg3OzJ9VyklRDI6bz1vQSM8ZCRDOWBlXX1wXzphNyk5NUBiVmBqNH5ye0Q3NHZF''@;'; put 'put ''cV5bQCZpJlpOenh+P0AsX3J2fkZiL2dmfV0oWihlWFExV1dnMDR6PmUhYnkscUg1XWxYK11rOEtIWjZPaT4/V0NGc1JIREJnJHg+YGc9cX09KzlYfURnaltsUm9gczRBaEI/PE9CMW1SYGo9Yk8xPWwhYUV4SGNVUUxAZzpiV01Yc1ppJVVTUV9RXlAhaXIkXV5iVXJXZyh0THIsNWVyUnghZFM1''@;'; put 'put ''dTBmN0ZEdnY2IjpNNEdGMkFlVH4xKjsleVtFVExVNFdtdjJnd0tlQFslcVtzM3ZAYSJueCx3MVBxSEk8WTBmdF9TUXZRZSVHV1dlcGBhQWheUShGaDtZMGZ0QDI8aTJqfnpedm1bMikjPjNIfXBwZTZxNkBYLk5jL3BqUEojSHclS2Jtc11KQl98ITNVSFNwakBSVGJGQF1vZCM5bTNvbCJlZT1L''@;'; put 'put ''QmM0bEt3NkwobVZ0XTh8d205eV07ezE2Yj07T3hbTz8vYU5MX08vdXI7cTRVcSxGJnY+U0AhZCV8ISlAYn1IN3kxfGAjMmxlPDZ1QlpET3xqL0xjVzNoKiokI1VwVjRwXiVPQlN6MiM9Iz4uQ3ZaK0BZem8zbnZ4Kkl4VyhlMEE0IzRIND80cTMxTTJCYCYqLnopczd+ak5jRmI5KS9vNDZ8fDVg''@;'; put 'put ''M3tNcjh7U1slWjMlKy4mblJbbmR7OFo6bUA+PG1WP116cztsfT1CJU9DQW8oXSk3N2ByZ2AjamJWciFnR2oqOkk/a2krNSZkciluVClLNXdGb2duQDhpbG9QUTE7Nz9DK2BURH1rRjF5VCtgbSQ7T21ydmhbZ1Y9cU0qQHk+LDI9LH5PL1hhIyJfO1t7Zzd6fSU5STdKVGV4R3MobkddJktjL1p3''@;'; put 'put ''SiRMPTdDLDhBMXczXXFYW2kveXFhOWRyLntRbWdlcnhmLipfMGpHbnovVTY1QEs5NDJEWS4zSHc+Iip0c2lXZXlufUIzQCRvdXtieXg7YFFNdVZaKjlpRXNBdl49LHswQ303bElUKGM8fDhJXjImYyhgWzB9aVpiayE3PFdMcjV4PyxWUW01OllJUER6MkYreWRtRGZHYHcyOGk/QFpOOksycE59''@;'; put 'put ''WDdsNy5KNzNyan0pVjtFKCl4SG1PXmIyemE9PUlQK3xfN3lZLC4xczVAPXFoOlc7QzVNVUtufCQuMFJrY1dCU1s6Y1JtcjZYQkR5KVdaMk1oOzBMbSguUnQ/IX1NcSRTOzlxdnc9WThXW183SChWO3BCXTttSkZyfUNoLi4yISRET2AyaDA2Rn4mOVQ1KVR4Vyg2NyFgMSp2TSZ4VGdYN0t9Y31i''@;'; put 'put ''S0Bme29RWVs1bmJsWyI1Sjh6eFZIbFtYZy9eJW9yWVYkVXA1WkZPX0pndkplOTJYalFGTSxzPitJfnVRanxzP0Q8filZPDBLbnV4N1AhakFwNCRpLCF+ZmRXVlZBRHYlVSZoP0BTUyUyaWJhTiJNOj1APXpZLlNZNzx4cE5FfmdrKHN7PkYzNW1pbTgyTXE/PHtTejgvcGhDTF9TP3RuQXFNWFNa''@;'; put 'put ''R1RGUWBPU1ZGeThsVkR6Lms+OiF8ZFY+c3swPT81W25ANzx7OXhJQG57VmFmfkFVSlMiOUM7U1Q+VHR1cUc3eiVYZH52dmtOOT97V1JJUV84XUxVVyFmZDR8fixWS1VAW0xvXmUmZnl2ZzdQemEmdHxjdCsmRFE7NWVAUit8dWBSNWpVcnhJKEUlVSx3LjluWGJJUyQqV1d2bSQpUWlpMDtFfUZf''@;'; put 'put ''K05Ra3gsOGc/by41WlgoKXUhejZEVFNJXVZVOGRdWis3Zlh5MmopSC4ocSMpLy40TFliJDZjSjN7N0lFMXphbj9hRiYzWWRJL0hOYUh8UjQpS3xZfWFlPls/fT1Wd2ZxYi5VIyl7UkI6eWE5VT1qZm1ZezdFMkQ1Tyg6MD16blZlYHs3XitTXmJLTjRPWzAsQChSczA9R1BsPXcsYTRVVypWRFpB''@;'; put 'put ''blJVeiwrLEBKTU54Zm88SGM3eVE2TnpxOUskan03PW9gNHtqfTcoKyQ+bGxNL2VmUUJQYFNid2MkZmNPUnNhSz5iP3FnJWVUSCZfN2hfQTBRfDxPMXF8SDd5fFJGWUhUOTh9YDAjOlUlKSpnOy9pOFpASkBNdU1kTGByczEsL0BsLy5JZ1dQfSF4OSksMnlnIVU2RTwlfVpUUW1gelB6UUpvfl1G''@;'; put 'put ''VXtRZF5KS2V2MjNucCUuJjpySE86M19meV9dSihbXW5wdEAjWjpHOGddV3AsbjFMW1BlSUJ0RilaTzpMNGNfJiU+Z25lIzEudioxS0hKcncuKTtuZChrX0w0bG5EI215Z3F3TmlyeG1sT3IsXmY/O3xQWlcpNWM1eSw1UERbZVhWe24lNGx5az84QTluVlsidkhXNWh6eDl3R1VeekVvcz1Jelt9''@;'; put 'put ''QkVxfThufnI/JjY2Z0gze3l2bUliR0BYcDpWQl9wVEg0Pl4pYWkoP3skIVRITys8QjVve0ByTzFzRDNZeXp9L0pKOEJ8fW5pYy82VipGPVhfaTRXc1o/YWZXfWI9VG85JjtNO0wqYU5TXW85bnMmJT5neXpmKWNDPCxCUVVoJm5lQTtaJXVkSl8+NCxSb319bXA1fnZ4RTMuI2x0OVRibVJwZz8/''@;'; put 'put ''fEd+Syl3N0t+fnhKdHdzSEVnKSpTNFo0NEdVND1WQDpuTE5RXXVSPSFFZjFfaFZKI0ZLJEtxdVVOZEQxZkVGeHZ2ZCVtfiY1emQlcFtyc1pyMjI6ZzBnXUBHNHJsWmdbLCFCVSp4LDZCbGV6MVFJTzVSJWYlLCwocXBnMHddQClYNU4oe3R1Q3JLI1VRcWBVTVN7KXx3YlFgS2xEITVARGRvN0JR''@;'; put 'put ''PlMsc0MwNUc4aCRkXlpOT2pQOEIkbkhORktvJFRTUFcyYVFdUTtqMnY9cWJ1bEU7ImlxN086ZjB1KXB8XVRCZnhMeHNlZDBPSTZnYEl6NF1FM2RZajFFOERJKSNpM1c0IjZ6Zzx3bzdqMEl5LEBIL3l1fV86dH5jME9+RDs/UyVjOjVALFI2TFgmYmR2dy5YVGImcFBoWUJUXiVMLnlzTDF2MEBU''@;'; put 'put ''emBQSVRkUkZ0Y0A8VGl5dGg1Tj45XU16NFJ5dENjekViYyhGbzJqTlRYKDNVejR2Z0omeT1pLF92Y1tnSWRUUzQ3elN1fV1oIXQsPltgRzdrLzw2P11USVNFelJfMHRGXjIhXyZET0lOTXE6TEQ/LjB+Y0h3eUA0T2NdVTF1QkhYdikxOmcvNDQ5KmAjOSVSOylEYzBKPyNnW1NdaztWMENuN1ZJ''@;'; put 'put ''WlFjclhRTHZCS2BnKE0xVFRaXVBGPGt0Q0tTUTo9SFV0XStbJiM4R181N0pQbFlkJmUkZHxDRiE0VmFbYld2IXMlWmNxYjlhZGRJRntbN148NnYyUWtpfU5VM1FZcm1NeV0jNj0kUnA5bktOO1psUWJXbntxRzd6MGF2aH1iVDtFQHxsXUpCM3J2QlVbTDUmREw7NyYuK0lAZjo8cTlNZFtlQ25v''@;'; put 'put ''XkxzZz9sWyhsYT54ZUcjdmQqUylaKjN7ODlVRG9wZD9TWVcsZUJofTRGLHA4Yzc4KztYXWduOkc7aDdSW3Zaeng6NG9PI2QzPFB9ZjdYTlhWPnFpZjdVQWRAYkNdOF13WHlSUU9TOzRPWDd0aUVEUl4lZXg2QC9+T0A7UyF+XkoqM2ppakQoX110bFlsNTU0WjA5O3phWykjXz1DSUMvczlgbUFz''@;'; put 'put ''eTxFPmVfSDl5VFhoWmJ0JC5jYSUsK2dmNU9DJSRgIWB8TnZrWT04dWZxUiNJS1hRPzYwYTIuPjNwTnNuVCN3aFdORC8xTGR7Zy4zVnJNMGZze25UTHYufEReJT44SFkqaCEvezh9VjFZTTdkR3ZYYlBuZkBwTS5BQE4qIXNwY15lRCZwYkIyP204REF+V3dEbTh5VCRfdTVKbWo5JFZ4MnI5VHht''@;'; put 'put ''bCklRHh8JGl7Zy5uOTt6XVQ3VXtvOWA9MFgoTnxNKC85QyZvSG5DdHFjXmcmelY7NTV6bGBsKEt8JlViQGNbS3wjPVpRR14zYEwxZSQrOi8pZ3NzbF1mV1poaTdlVy4qLzxyJUpmYDtmQXtPYTpgP20xW1RtaHIlMzB4Qyxka1s8aXFtSWd2aXohMzVaOkdQI1k5XkpVK1EqdU42Ti9YQyxDWjBh''@;'; put 'put ''Vz5CSDhScnxuVDUqL1NoUFUqP2RjSXwqPnxaUW1eV2gqSjd6XXJmfmdIU1FTfmFlPFQmSywyNk1mVUJLaSV4MnJqNV0icDt6bTReOyNnNk5TWmhpcj41ejVoRX5WXWE2aHlFYjZOZGdrT30zSjhpWzskeHBIUWUxPy5WZ08zWzpPZ09hZj1vSjdwU29vXjI3PnJbZV1VOj9dZ2U6MjxwIUlePXFq''@;'; put 'put ''S3FNemFueX0xWmIkTyowKn5dNCQwN3d+P1VWdGFoVF1ub15hV29EKkU7OXokc2dpfVpRKjwxZ11vNWVFT3V3NWlHMSMlQGU1R08xKD1ASV0zcF5jb29eeWg8VGw/KSVjOjJ+R2M4JEg2M1UzP29kYU4yPTEmfWRjaEo4fllETzRdT2tOTVd2SyJkO20rLENEYkxJIyVtZVNKbzQjQ1tyZl5VL0dD''@;'; put 'put ''b20kZm80XkNKKC5Zdzgva3pYUkdtSzhmbC9rWTdJX3llbVcmfVdeSUMuUSQ0a110eFBoN0hiWC89Kn5VK3FQMk0hKWlBdiVQIiRmXnRnSEApREY/eE5pI0NYckkidTk8cC9RQ2BvUDtOSm8vYEJybUNTZSNdNHhFWl5RJCRmeTQ5RVpZY3ZNaHQ0aVoqTkdhX1hpWGFPQFd0Y1BmaiF0WHFPI1oi''@;'; put 'put ''RmlMZEg5I3xMLlciTzYhIjQmTCpIKD18TDpXR0tZQHcvQktyTD1IfFt8TClMVEYkPH5MPFcrS1lALmguWHJMelh7WHlYYkwpTT92ckJCd3NjcDRVRGUwMEVWSm0vbVkvR1lVOTxyNHhFWmNtZTVrOFheSSwxczh9dkd1QmR+RltGSURVS340LEwxSEsqIkMmRmhFU3RBTUE1XVdGTjVkflg8dDph''@;'; put 'put ''KltDWWdYS0RHVWZtP3YpdVVHb1VobT92LllLRGFZfUxLRzRESmJSUSVGJERFNnRjc0wxSEBjQTV+V3ZQTTBydSVgT0NOPHRaKUZCRTkjdGNHd0VDeT0qW312R0N8PldPfnZ2dnRoIkMqRkdGSyp0L3ZMVUt7a0J3KkZwRTsxfjRbTEhKNiFBNUxHNUVwN340XUwwS3lAdS94TFgvUlZIVTljIlF9''@;'; put 'put ''R2JZSUQ6JD8oP0NENmQ1ZFIlRGx6ZjUiaCxIbVMzSypJIkJ8b2NATFZ2Uk9FVTJRR0JSbUVENTY0QEliQ2A6ZDVmUjlIZjxjTWhSPkVhKTVZTil4VkJYSER4SWB3dHNeLzVZKWk6T2htUEdFUmpGJjw1WXcpYyxOaGBgWXhtdV10UHpGUmlJM0VkTU1pUU14QiFZYSlTaWJqaE1jP2YqMldFTmRN''@;'; put 'put ''XygvdzMwVSwyK2h4OHU2MTkvN3VsKlBiPVt4SXl4ZS9IRF9DL3dPNU9Hcng6dXo2OGMmSSlEZWZlNVZpRFReLzZZQWopUW4jYXglalVReXVheH11MiVQeihJXXhiJk9HKUlWRS91ZTVqaWZDVHdlNWJpb1U9N2c1ZGllUzlkW3ZGdk5ofnRfWEgpSWdJYTdZISlgcHl1I1lJaj5TUEgmK31bVGpo''@;'; put 'put ''TCp1UEhQT2g1JWQhNXhaJEx+Il5EKzZPbSE1aUxFQnhJJSo8YyR5blhZQ3NTODg/Mjd1ekJFUEA4YSY2NDZMMU4pPDQ0X1dzQ1dVUF4iYC99SncwSXRFMlV1R2lWNzt4ZC5nYSZoR240Y10jNS9XUm8zITVXJjVpWkFYOkVqamxqSE8wUEJOaEN7Y2w0ZXlFMFNHdnoodGtJKys/V0JEYGsyUjJX''@;'; put 'put ''OyJFMGNJSWVFQ3B6ajRickUwRUliViw3fXQ9RHI3Qk5jQm5YVUJpL1h0KGRQYzpTXWFQYyVqcVNQY2ZwNzNmRyx5YkIqRFNmRjAhSC86R09pUGV3TmN8MUcwXTd2RGdDdnROY0AoSkkyNEtvNSE0V1k7UVF6QU5JYiJfYUpPRFBZb1RNPkJuWEFCU280V0xhSE8wUCsrcSI0dU9jbWtCTilCWzVV''@;'; put 'put ''dFFtT2MuZSNEKkVATVV0eWdPY2hqQ2F+RGFRdUFPMVU/YEh3QDFIRHZ6V3hZcWcvQiY0aT9ZT1lvTUgqV0YwITNELHJPQ2FMRmtAWnRWSFBjNm9CTk5DQE1adGMmT2NHa0JOVkN7YzNXcU5ITyFSdnpUWER5RjBpR3Z6SEJ+a0xPT1J2eiZYT0UqWj9MdXZHSzNoRnglVzxISE9+USMjK08qRElU''@;'; put 'put ''cDd7Mn1MT3RpfUF9SDdTSnZYKCQ7REFSSWdKZ0pnZXh+NClGfkFHSyI+K3UmOmQvO1c2LyJDUmM5Yzs3SUkqRkdONUQjP0x0fTJ6ZFlFbmhNPCYkMnQyODAzcHFEQnRZIzw6bk10XkEoe0htbW40V19qSV5PYz9tPiZ5ZGNJPT8rT0V5fVFeRGgvXSJpQnZGW2ZJbzddeDhOIXhYMkRqT2pIeXZh''@;'; put 'put ''Ij9BM3h5U084KWt9WFRHP1ksSH0hP1R+WFlHV05xRUZrMDhYa0I1QUR+KSNMNURpZCo1dD9dRmN2SVFLbDVkdT9ldEdCInd+WGFHUVpZYzUzemJtYTMhR3p3RDohSHo+Qns1KHo6SSp5OXdjUTJ7YTRaYlRDU2pFWD5JaDU4eU50M1hUSlE4MyFKejxEL1J5TCtIfG03UGwrZkJCQ3dhfjNuZlc6''@;'; put 'put ''MyFmIiZZPUkveSNDXlBfeShDfiRmO1JjbFNvRTEiZVgzRTlSW2YsI3IsQFFLdDpBa1R3P3s+PHVlSGBJd3dIT1NjUmd5e3QvSXQwR3hZVUlXaGh+VyFHTS9GcHUuUWpYNi8pa0NNPEZRTmxENGIjci4+TypQR0VIJVlxR20wTGZkTDxGdnVVTSwjdEJ3L152YVg0MGRSaHRacn5yIXM8OF5qWTd7''@;'; put 'put ''WExHZHU+T2FpNiFCd3hXNkxiaiRpXU43SXtvbWEsMC9rRFUsLzR6JERKdzg4bSs0WUJQLCN4bDddRmYzdHdQa0t7eG9TQHleQ0kocCpSbXJuTHU7T1UuYHhDIU91W0hoZTgwVTM+MTEra3U2V2Rwd1B5TClGZixRJGRmJShNKXRJVmQ0IThMKElhdFJ6bXgzVzYvaix7OURCXVA0Ni8lITgiOVlZ''@;'; put 'put ''Wnk0Y0kkN1I6K191ZGRUdng4UmZNenl4WWN7dSU8P0lRIWFZbFRbZnRgNCFBYDEqMkVjLFY1L0k1KyJ1cW1uLDlQZGp1TWpJenQpSE1NR3dyKTZ4MUoqOU9tSmY7dDpSfFBZO1FmP3RAUF88dThnaW8sW0d7JE04I2tHKSNKMU9le3hQRCl8Sm1AZXtBZkd1S1J5IVg7UyFPQ2BpUzZiZURpdEV3''@;'; put 'put ''XSNqejhqIWNDa2xkcHlQLy9LdSlUOEA3Q3g4SilYLzQzMmlIVFZqd018MDNjQlhAREEhLEJHZi9aL0lEaThEZDdMUElmfHQjU304N11BIXt1cUhPXXx6WWU2X30iRVQyMCowQWlCRV08fGpCZmlgJnVWUXlddFBXelB5YUhQciwwW3l4RSZSfnRLYlZqT3VfVDorN11CIUtDVmlIanQ4amlkRT8q''@;'; put 'put ''aWEzOEcpIklEO2ssSmYqaTVFLjo2XUpmPCk4S2JjXmZ2OCRnIitKWkdRTDpdYXIrTFpQVkQ5SzFqaj4vMTVwd2dLTGRmXjlrTzV3RDVjWmRiUzdxa1hXSHdlMXhTL2YqJkRBNn5aPThYcXN0T0lmcmMjMi9GQmlSN0hOSW1xdHQ+SWw1ITxrNGJDemw8OCFrcFghSFlteWFrUyk0bkNfNUF3RE0o''@;'; put 'put ''VzNIWUA9dkRCejZMSD52SkJZN1g3I0ZqQ1F7QVlCTSpMekY1UlFKbi87QmplUSRoI35XPkh5bThmdjQ9RUBuK0dkUzYvU0MlazlwaSNfNCVFQFd+NDxMS0l6RHtYN1hlLF9jMnc1WUgpZWVjQFN6RVJTSV9kPlt3SWl4disyK3hJJERxNyEvJkk6eGhAMVooWS9YIXcsSHhUXixMYCV5N1gvRFNn''@;'; put 'put ''eD06SU1JKSgxUUVFNG4qRUYsNzQ8THM0fk5mNUgsKV9bdk1YM0hhVkxIc2lJd2VYI0g5IyJDRE1QKitMYUVDKTVMYUdmWSRTQnp0Wn5YWkdpdjRjRDliZip5WEMqOFR2U2pDLHNZR1FJZX1qVGpiWEFTV1U6MX5oNXdZUSIhdTh4TD5Id20vSUJpekMhJT1wOFJXRzFILk9lZndxeXR+ZDw4XUMk''@;'; put 'put ''azxBY0M1NFFeaDQ0eiJGK0VAez9ddGlTOn11S3deKEhwNlMuTzQ2MzoqNV88bTR4Py5oIWQ8WWRCcW1TNytbe2VjRjxZVkI2KzlTdkp9WSM0LiIiZXl4V0d8UFRjNzRdOS5LVEcsdC58enYrUzpXMHQ/YUYwfWViV3BEWnBFKjpZbXQ3R3lCeGZ3NCMoOkBTY1khbXMoSG9hLnckPlM1aUcoYCFI''@;'; put 'put ''UnU9PT8qbj8wWFtnN1F2UFcpTzhiO2s6bmY0bUAlKiY3PWAlcm1hRXBMZkdeRD19ZG4wfEFtfiNOciFuai5YdmdRbz94XksxJW56YT8kUyt6KnVWQSZXdlM7PjsqZVNYanAmJV1fP10vakM5JjtzKjxASSY9O31SYGoyUS8mcWhBa1FfITk4OW1SKFEpfUo/P10sJiY7fiFjS1NYXiNjQVVJJTtV''@;'; put 'put ''PypMZHtyOTtvQXhoJnsjQUlpdXB5OG5sV2tXOzszUiJQdFFCdUFoU198cDNlWjxqSzVHOjVGS3JmNHB7NHYhNzhrOXNgXWp6Pml9Q2g7M0V1KThDSypDJFV3WEFuP2csUTBwRFJYcF4seHRAeUVRQGY8NiVQbWQkbDpYZ0kpQHxeaG9vcyojIyV3LDNtciQuUF0jMTc0LGR2XXVxbXkvPiFuZiw4''@;'; put 'put ''T05sU3BYc1gsdV11RixUSm1KbUpjam5TZy80ODZpdCoyLk4jUDNDaiE7WjhCSUMjejc/QzNlK0R+MEYkbzJvYTtZVjE/XThpVjU6WyoxJS4lams9Jmo/ITRtNmguVH09cCl4KTt7bW9oPkJ8RF5kdDZydyksdHplMkYiJGZfd3ZNaEx8cDk9RTVtLE9wQ35kdVElJTMkOkp+Zl9RXXFwQkhGUWNT''@;'; put 'put ''OElmMCsmJT9YLFt3JV48Uz0wOkhYQ3YsfVk8dCRRUnw3XzBMYGFUdjwrVnZgfWk7c1g3R2xEY3gsTVIoOzpbS2l7aFU8W0kpanYqXTtNfnpMOGgkZ3JvIyxwfXxwKFF3dkJYe2ozOmFoUHImXWhzOCxpOyEpeXxbZ0J8QjtJc3ROKE5pJGc2bGg4aD4/LEN1UVtmOCU9RUIuRTdTSWl4VS90OCNV''@;'; put 'put ''I2RXPWR9Ol11bz9mb3Msdi4/ZFo/RTFCVUZQT3ZEJjpLVlpsKzQje34pUHs/KXY5W11aO1dJUzxQcC9bbH13SGlvciRCN0JpUUUxJGw+fXApJUBnTk03aXVpNzJgSUQrSH4uMz9mZ31Ucio9MUNXR0JBOCssXnFBbDtHJVAzaXBZJmY5UyVGam4kdCRSZTlCTHYhRzBFSyJZSkZIUVh4Z0YqZU1h''@;'; put 'put ''RXZwdENge1d1LCllTW9CU0NPLzpVRmo6VVExQSMlakozTzFmS2ZVY1sraVU8LztpUz5aRCZTO3Vsam8yLlhpXSNTcHdzaDNBXkprdFRVQGU9QXhMJmpYel9kfXVRQUd5S1N2X14mJXg5bHI+REtoUls2KHxSbGB3KHA4dn1EJX0scV5vNEMiai50OyV7SygiQiw5XWw7dlYlO2tpdTk3aD0/PV8i''@;'; put 'put ''Tmckd0M9USZnVGJYb0ROZDhrJiVMP003X2ZJdW5zYF1mO3xSTDRhO0wrSl4yd1JrWT1Sa246XWJaW3d1N28vXTMsYXB7W05Me3ZhaEZqT09oZzckTCtweVtgZ3VVXzo9RURJd01mcHlARnJ9ZX4lJDdAXi4mSmNdP0MjfH48SEZZTVcuR1koanMkVylgbTNeeVNke307JiVtb0EzbHlhKSNmMVdO''@;'; put 'put ''b0l5RjZrJERAcHZhaWZoIyokLGZLJUM+bVRCQjlTN1Z5fHE3U2BTOG9LeT17Rzk3QlU6ZiUybDldPChedVoxKkExTGQmYzlXNV4hNXYpKXAuc3ZMa2F8NywlcXs0YXQzOmJRPEZ3KCxVZFs4ZylbTD9aN35tSTx6SVMmXVJaIjpoeTFRM3tJNDovamQ+N0Vsb2Y5OWdVbXtJOF09W1ZUQVFrcCVr''@;'; put 'put ''X2ZNWzd5MFRKOVo3SVtrOE9eSnRuTXo9N29xXklQLFFkLntnfVZzVFReMzZzZjlnaSNwcDo8YVtBY2JBR3ZhQUBnSnNrQ2NDRnw1JTpNWksiPCkjRyRgN2Y5P0Vmb107W2NtM3duZ2lfXmhAOV0/ODsiSXZMKzVtfks9XlBbYjMiXiErfDBNNkV9PlUzJG52UzsrST5nUFE4OFJXbXBhcC5wbkYw''@;'; put 'put ''OGVMUjtaLCVqODhMLjBDMEE+SVdFL0YlQWI7SF5TSVJObk1rMixaaUBWW05PNWxFJDJ3bkowSCt+X1FZOzA4MGpETmxKaktTMWxKWi5ATXx6e2hHKlBkaWZaIUU7dkduTUM4QFd+OXdpfVgmdFRHZEtbWiV4clhBUD9TXXdBfkpWOlNsLFRGJXg4VXZDPllwNVRCeWlHKlU6WiF3aUBkfmVaISFj''@;'; put 'put ''WiF3aTkpXnRePHM7bytsd3hEJDhlbyFOdDM7R0owYyF+V11sa0tEbSg9JS5VPmY5aTxzWEVIWD1mdUlPM2kqJEs7XkJNYnZEJDh5ZSFOM2krQjokayMxOGZiZ2MkaWpmXUIwXmdrJEIzcHptMjBpa1NQU2J2ajFOKyFxXjJDM3BUbTtVIigmcFtmOUA6KSghfl42Mmt3O0c9QVFQNVhGMENwbktw''@;'; put 'put ''dDIwOnomcFQ4SzV8OHZqTTs6eiZwQXZJTyshRzh4MmdrQ2YuW1c4ZTJgcGhiZ2MqQmk0YXtwajwlbEs8R2s8dDRnaztVLi9pPHE5UiNsSzROUjs3cFIjMzxoZihlazIoI2ZlUzskZS5bPyUvRG13Oz1Objg7cCVyOWRiZzhgJFtvKkBoZihlfDhoYlYqbUVDOEVDNVljTWVpLHw4WThmVnFldUh4''@;'; put 'put ''YkAxfG00d29hX0lFWFJIeF5wQk5BW0B8OFlOTTBhaEEoI2ZARHVsWl5rNENsI2ZPWFZQWGRASWI8bjBnajVIRCZwb0QobW1rMGc5P1l3ajVIRD95WEpzNCFEeHImN1pAPFhmMEZOTDhFRl87Pmw/WjZLPyU8Nit6RnpUTTk3JGdRcSZ5I3glblYsZGokZ0NkNDQ+Il0+KHpgMTRWZSpPTU9dZmRS''@;'; put 'put ''NXhgUjBpeWJtOU89bmRDTE95YkBhRTZFYixCMjh9PSIxQXJPSEMsflk2RT5HMUUoRnIjIk5IWHdEJEdpIjBLcCIxMyI+WzwqQnohZztgPHdANTV+Y2o3O3pGb35HP182Qy9UZXJKPSVXcTRFVVswTVtHT3VlQktWSDU7cllMUyxCPXIhS1NmOUNHRDthJTVPeiREQF9JMiEwJERAX2YyJERAX2c3''@;'; put 'put ''Z0lHO2Y8LFl0LigsPUJBaUczeExxL31JZHtTPzlkeHhgbSJRN0RhaVRWIylIV2d6I3Z5WHZxdD54X1M3I3MrKTlNIzUoaHVqMiQ6NmpaMCNeNHtScTgpJHg5RU9eO0lQOzVOZGNPLCp2QD9mIVA/aDo5SDFBWkxyLm1Zck4xRU15Wmt2MyVMeGRbW0hMT19TdVlmdHtrW3hVaSZbSU87RyV9U0BX''@;'; put 'put ''K0NYWFZUXnZaXW1yTFFwVXZ+SnYhalNJeUgmPGQ8VFAiJjJwbW0re0N+V3dEMEtrW3RmM1tRbmAyXig8cX1ONCghVCQ/NGpZPVZHKnd7c255emV4bz9KPmJoVG1QOjMrYyNGcVYqTX4lN0w9VDVoWk1JSzRtNVQ7aXVJdFB9RiViU0loJGZVJUp2MmIlNFNZN1h0YElnWzQ0O288bSFCNCtzI1Em''@;'; put 'put ''eDNVLC9fKGYpZFQmeGhoeXwkX0A8SWZTT2BlRVlMOT5yKVkmSmpLIlNHWXpPd0BxdFYlXm19QHg7RG1bMi5zcjs1ZmlpSHAkek9sTiJWdkVHfnJHeHNrYFNib1UjX3FkXzsid3ZdNDZlOUZ6dDtYVWdbOyEqWlAzOU9wUXBnWXVdZ3lSUEUxVXI3YC5nJWBRRWdWWSNEUSF3N0dGKy5RMys1Q3Ex''@;'; put 'put ''TDY2Yj5eU2N5aDBHKH5PXWBHKEA2LlJdYkBuQ3E+M2JSa108fGN8OyI5cW0rX3AyLjZgR0A+cXRhZH06bmUlVXVtey5nL2B6KWIhTCplKmdQVmhsMkdzUCpAUF58P18wPmR4VHpreVR6fjRQc2M9JGJJJXpmS0l5I1lKUTtqVUhsX3BeLHE4VHl6MyVhZH1MP2E+QFAvTTlhZTpHZHpiTzpqW3co''@;'; put 'put ''dVY+TC9TWTdbNXhnb2BpXUJxa104eyRScF0qO29aTzFHQ21wQjhbYjFXRVJRR09DbVpoXy5FY2p4fi54R3dhM1B0eShkeCN2SWl3SlQqeEJSXk0ld0xtJCg8eDN3PEF8PylBUUtrXkdue0V0VG9IJVZMYyQ+KHM3RyxicClYelhNWUlEa1d9ZWlYPz19R3NdXUk3NDluSDxpK040bXVscHx5XlBt''@;'; put 'put ''dUA7MzBEcUYzUXx1VHQybWg9eDo+IyRnVENQeyYwZGdiR3ZgeEJyUyI8ZGklI0lKNzZlTEQuOV0sL0FWZT9eYDNJJFhAY0o6PG5ZejhzbjNfJHlGRnBFOn1EXm9eRC9LQk8uJVlNc0d5bTNMZmVlSE96UHs6c0RpayNmQSVUY1c3IjlSP2tMUDZPNyJqSWdZPWd7P0ZKTl1mK2t2cWlKV29pT05o''@;'; put 'put ''QTksVTloYE81Z1pVTTg2IW5tMHFCSFA0VjpXdVdgXnk2WDVQOTR1Z2NuNlc+YEZKblZUKVciRHhNaDBFJC5kWGRWO1FZU35pZWlbY1Rqc3VIWkhSVUQ8MF8yT0d1WV9DZys/YilNL0t4QSpYTTpVNkQrTiNnbElqb1hKVHMjUCsyUVJVKDdmSkVCMldwKWU3Kls5S2JYe15XNFo5WEA3aSlFOixQ''@;'; put 'put ''NmExfWBdeV5KQCVeQURJTUwyWkZKYEF1WF8zKzNWVC52Zj89eE1QcFhSWnxjNCRoXStNQ3dYWURsdHwhZzwoYW0vaTdXPU1rZ3JkOnhwdHpOd3pGX0poUSYhUDlzRnI7PUB5cUl+eDF7a1lmIitiWnRuWnU4KUVEU0ZsRzU2KUooMF10MF1HJj9lKUtLI2hmWkEuPUpiQlR7fEQ5ZD1Nanl0UlVY''@;'; put 'put ''ITw6SU5uUV4pUnhub3gxOkwjUFVmYjI7QFB1Qk5+UTxGWW1rbTZZJFtjSjQ/U2BrbkRnWDpXPCZESWJfYV8xXmhddXEjaC9AcixsWzhIQnU2dCllSXRDOl58eW8+TVVTZF5rPy5sJmA6ez55bi93TCxZYnQ7LlcsOjwyXzUlaCorY1JafF5LYGNpPGRzXXsoUkhiR1IwbjxDRTFFMGF4aCM0NTpM''@;'; put 'put ''ZlcjS0tvMm4jM04jUGFZWF8jaHxYMEIpOWxDYkdjXjJIWChGYjhObElMKUZSQzZ9eV5KIzdRbVRFVSMoLy99fk9VfWxabVJ0eWFjPTEqXnBJUGBCPjZPV2pYQE88dTdaQHRvVE5hX0FVPDBXcmdqfVMoOjpMJWRFW1sjTFtRK1RPfmomUHRbZCxSWXBePiMhNE16Z1ZdL2tEV0JIbW1IbiIzJThL''@;'; put 'put ''NUFCRnAwckJTWWlYJUFbQS83RklDPyZGM3ojcyVBb1RxXW5tdWN3bFAqeD1aOFFGUVRBQndefTdfL0Y7fnZoODxOV1YrTzdOZlQldXAzZl1KQFU4KkdaTW0/LzdRI2Y0cCVlZU5LMUl9fWNtKEx6RysybT8uT0E2I0dKTXxwQUsvblZha3dGflB2SGgscT91RHZJSm1SRVI7MFJjUCsmcVdRLFsx''@;'; put 'put ''WjJNSyt2WDY2RnldVkVtQUJYMyJCKzp3RnZQWip+TUVTYnZZJlo7NWEuLlIqUmRDNk93OmhnKGN7OWgwfCpAUkA9WExNSDIrTVAoJGVTSVc3b0klfGdQRng/QEZ7b2dgOzlOZjJgRSE1SiEjSkM2S01LdWB4UH05bk9jT19eV3pWSVNkT3pERj54ZiRVQ1hSPjsmKC4mSjt+UGxbeU4+IjlzY0l9''@;'; put 'put ''ZWJdKk1SPnZIT3MoPFRpQ0QwY0ZPQ1hINHA5KUMqYDNaOVF5PjgwLFBPbDZXW3A7Xnx4LmR2bTN+Vkt9WihSWnRGSis6I1ozSHlnUTxUe3k8dFlpIUo+MHNUUExGc2k4KlRCWmJbTFFaT35tPkt0JXJTQiVhOSE1c3sqTXNkW08iPGtneSNnPE1abzsuZ2V2MjMoT3s6PlBSVTZRfTx7UFVhWXZT''@;'; put 'put ''UFY+W28pV3JzVnFvd31dN156Q2xbNl5pbEFvOXFPWihZYypeWyhLPFp5bSMjRGsjPUNSX2BoRlZHVShLKUU1PyRoJjxAU0p2PXtDc295bTQ8I3NGPVpjJXlFUkdSQ0JucUwpb0d9SFRmMklSVVZsdEB9KVIwUyI+Ykg6ZCUqdl8yRnokS0cuelhDYTovPjErSFh7UEwoLm9JdyJocz1TZzlrOEVp''@;'; put 'put ''R2hxVXc1MSk+fCp+aV9gRyltPk8vcVJCQzgzT2BYXnZ8R2R2JiFYLE1+czZtektiST5iNiJDKkU5blNrZkw4N0hbMTxgdSZISClyPTNRQkZULkZVdnZ7eTIzRUZMKU90eTlyKUx3aFRidktEX3FRS2dxPHBIVl5FNXorKyVgNF80PG8yWD07UGsjSTxlbWN8IzZhLzdgSChQJkFGSTFgbWkpY0I0''@;'; put 'put ''RlZqLlhWalR2cSskSj9KVkIkbnQhejI5MXJNaytaWWs4YkFVO1FweV1sOkouUllFXTdfKDsxI35xMWpFZGhfdXFiQV87YT8yPkRDfGp+UGsjPFQjbz95dz48VytzYnhGemg/P0dXWE90N2xmIixlNFMmVFZbMVJoVkBQRG43Z3hqc1V6dmE8Xi9sVSo1XzlQRlNleFVXOksxfkJidUs8YXViL31M''@;'; put 'put ''MTQ7b0pGeVV5QyRuS0o7XWZtQXJBRUpkeC9gbV87aiRTYlIvWT1aTGM1Ny9LWVl2PzB9ZD1mK2s8RipAZCU4KSYqaFpnSS55eF97WCZhM25EdDB3cHR6Xl9DVUs4WWBvOjErXUM7YDM9e2NfOURpRiQpfCQ4Zk9DaHxGRXFGI1Z7UmAvQkZuKT01VEs9WFdBeTpwKyVBdHhEZHw9dXUlJVpsdGRk''@;'; put 'put ''SyZASS5zblpCVyo9Q18ufk9YS3kzZlYwQ3VXN2suNXswLkxsdiRANUBBNDsjRlYpeiEjSGg/U08lSTxFL3tMJHUuLkBrXUZVfnRaelFjUXclPHp5alJnd0lSeCZyI3ZhKF83dGl2WF8ranZBWFFdMG18RXYoZExoaX1bQVl3T3JxRy5AYktwMlV0Wzx5L21AO15tVVg6bTxYeCxgfXxxVVF6XjdO''@;'; put 'put ''Nk4wLkJrNkdiW2QvTT9PI0lLKXNIRiouaks5NlNJUmh3MllfNC5WKXJrNGZsZXxIQnZNIT1vOzleMDRIJXF8M28lJXM+bUhORzNge1AzNmJwMmZkMDtMZHJpNFU9Rjc7LlZYOihbT1U3P3BMVjQzWU4uWCprYmxeLlJLSnZTbU08XT9fTm4zZzYhVW9YJUd5PFU9cU5EOmRdc0Y7OW9kL2xVLzZy''@;'; put 'put ''cCI0aSgwfChzXnxxLCMuZFVhX0Fxc1IvQ0hseVJaMkJYfD1tZ2EkcyUwfFpfdSRLWG89d0dFcTdaZV9dMDplNnVVUV0xQjg2Pz9kWCU0aFpNQF5vOF58QjB5WWEuLlBzYV0vbG80NlUkLixYIS9tbjAsalZwUyExe2xsIV5hMWdDfHwyTmhUKTFVfllXO3gxP1B5NlpTSXwyWmJqXnBdQHtPJVsk''@;'; put 'put ''O0tTQFI7bWcoRjRaSk1INHtrbkkvOmdKbTRzKzAqXmZYN1F+UT9ySlcqJmBeXzZWKVNdJWFeYC5SbmdbfTdjRGAqPmc9YkVeKyovX1tCM2dENSh7Zjc6QHF9alVQbkI7XykyXy9lIyl2ZHh7fTp2ZDQuZyF1ckhOKyxtKFZ3OGQyQ1cpcjA3YE0lU0s4PSZFeXIuJWRDQyVLPkRkT34sOnhoMz5L''@;'; put 'put ''azUsOitsXSM+UUVFcCV6NCJial4lZDBbe1g9aVZbSz49ISVQRjAxPmNUWXxeYnZKX3ZecWcpM2U8UV95JXdUOU9aOUhzMT13dENXaXFTI2dSaTNAJHJYPT9iNzR3ISNqW1ZJbnpRWXdZRig3cExpKWRhIXgubl9RMiVzSkBALiVxQ1doJnlhbn5XIU1WbSFweTF9clJPdEQoLHY9Km58KHNRbX4z''@;'; put 'put ''JVZ5Wi5gJnd1MkVXM1o9XjRjI04ke3lFUTJVKEY+S29rN0wsV1dHXnIkLiNkW2s+KG89XnBvMy54WUt4QFlAWTR4NGlgYypTOm5AMkMvMlR8M2dSTXgrSWc1XncyZ3MvOm9iIm0rI3FhOiZAOS9db049ZExZUktHRSomcTt5YSlTbmNJXzZfcT1bUDNmQCh8QkZEJFpAVW5IODo0cm92R0Z2VX1w''@;'; put 'put ''WDJnMFd0YFpWKEAsdUYxYENQPTk1cHViL2UlQ0tsS25ZdSQ7T0sxbmgyJCNPSzF6P3NTQVV0KzFxJlBDOU43QHxIPG4sRVg5W0FpOTtWT3ArS0JlU0VbT2svXk1gR1M+RldDMDs6RWJYPkg+U11uc25KRF81O1l5KVBpcU11NGJbLGUyJCt+eG8mRXJVKElzOmMiXmpSNE92fjN5Pl1ZW2NqQTxu''@;'; put 'put ''VEcwfGttb1k/QEsza1FSem5vTml7SEU1cnE+NXg8X3NLeG1TejI3M25vajAlaEB9akZLYDd7eixIeE0xNj5yfnJnLjJyaVModCxLRkc7SHBzZHgmd0NUP29YMTE1TFNJKXl0TVBTUmVaa2UrJnsjNk9mfi51JGFlW3RSajF7NVtzPzpbSXpsUDpReD1XVGg6MyZnYmd6QFgsRDdGaHE5XjsvSXo6''@;'; put 'put ''Z3ZhL2o3SEpCYXxCLF92LnltNGw9Vl8/Tzk/WXdQe1QhfUNGcWcmY1h0Rmt4PUdEeHh8UGxmUXd4SCluUzZHb2s/a2E2IUs6OSFDWXJQai5XMStQS2Q2byxUMz5DT2x8N2dyPzFqQGBQOEZgL2k4KkdIW3lqUXtybiR+TklxNUsxMyNkLmFAQG13QkRdfFtaW35FaFVyKF1ld05UKFVTW24obmdi''@;'; put 'put ''aHViYlZTTUdkVUlTUVRjPGJyVTJ2QFZCUDxmPlVHLlZmLmtGe2JrRjcyYz1zQCRDS3xYJStGUCo7dVBgQl0oM2N9P302Sig6aURoQEwyeD03Wzw8SWdoWkJpbz9VVUglZGRwXVZRfCUuQF97c2BYOmFkUVh3PGZzRWNUO15YbHFxfHdiaVNaSS5qc2wuViJrUDVZanJoIWErWF5rfSVhVVdKPHpt''@;'; put 'put ''Z1o3MihjUUYwNXlBOyhoQiMwN0FXbTZLMXNpe3BQZ20kSzE/LzRNI292SEoqJmdiNjteXjtUfkxHIyNxNVEsSDZUJU0xPTN2YSR2dCtmJFNtYExvRk5kK21gOlhsN0JQaDc3SigsUHphenFIdzRwVjBpXTVMbHciKyhvOE86eDkyMjJ7L19SfiZGT3xzNy8qKls4bWJLfV9XcU1vaDI3PUdvaGVi''@;'; put 'put ''fFkjcnlSekppcU9tSiVNJEpHTEl4XnZCUCt1TnhKQCRMVDhpYlRMUDRNVlMlS1ZkVlNKU1tNY0AxZ28rJlY0KGg0SixiUDhAVGNKTFcyWzNuK1FqaHJzT0A7NVg2Nzg0Z2BkWDtiQXI9bEJIWnt7Mn5aXSZHO2pWPTJ5ViIsNzNRO2tUWFFgZ2ltYm9ofUhNNzc5XShnP1MsK21TdnVlSEc/Nk5S''@;'; put 'put ''PCxiVXIoX2MlfHxZWzRoWk1naV4xNjppQmlTLGU6flgrV2FUOWhwVDc1ZGJHWW4yTSwvfX1zSzIjLDFJV3UzXWJmTyJWTTxtOVU+PT97eVFuYSw4QjY5PlVTLDVWOmV5aGU7bCYlPzA9ITh+NmVxYXd4M2libiR7UFRfOjVBNVVdb1YzcDt5aV0qblhJdzdrUXZKZWJId3JTYVYsd2J6Xi9TZzQ9''@;'; put 'put ''RDJIeGBDUyVecHphcDY3e3F5RjFbOk0zJTJrZmpbcD9bUn5TIT8/QE9nJn0sRmB8ImlAS0ldT2s+MG8lX2g1T1Ixbnt6LGtNSktTbHUheDtPMSQ2R0hkPWY6W2NHYVpNMz9aTVNvUl5YUlhbUnB1WlhJbzdrUWkkUkksK3QlR21TWVVZM1UwPjxHc24lNEJkZllFbVlSIVlsUT1eMlo3ekBlb2BS''@;'; put 'put ''cyw2U15JKGw3RDF6VHtOejdGYn14SzwpWD5rUF06cUcuUE0jKiw/aHpGb3JvO0NiVkY6fF8xUCMjJF1sclZ3eVV7V3dEOzlqN1MoR1h5YTlIdVRbdltPMGFbcCUjP19EeDZBMFE9R0doc3c7QEpNL3g6XjVObygkcTV4KmBydT1eM11SWWM5TFNhW1UxVy4mbmI9dzMoU0w1c2E8eXIubnxyJlo2''@;'; put 'put ''IT4yLis1Wm4rb3xxLD9JJWd5cTg0YCpLYC5nb1JJSkAzLGk4W2l2NlJbXiQ2dlFdRCxeZ2Z9d2tTbkkrKlguXUhdZzdxI0Nga31AektJbH0jMiozMiVfK0w6SCksMk9YREYlQGE9Y3U7cnJXbWpEYH4oMGpAWnlhP3FnZz1xW3VGL3pjSmNQIjV1L2BVXVg/SGVNN3NrRnJOMXYrP11BQ0wsezdr''@;'; put 'put ''Kkhzez1Wd1UsTnpuUUhsO3Y9PDwrL2AxZn19TUZhXSxweSpoPF1xQ0QuaVpbW0xPNWBfe1AuPTt7bXxUPUsyZTp6XXxVbHtfcGtlRFIjb0twbSReaTFsOnQiPX1VbiE4fFZ6dDljM2VnV24lMiU7aXRSPTBYe2EjZGQ6R3U+YT8sJndvRXpuRmIwdlNWOmptOkRrUig6OzlHbXB7b2E8T3VCW2Au''@;'; put 'put ''dUt0UWRyTkUqTThPJHMrSTlHbytie0tqcz1wWHh8cGRmZFdWb2BpPGM9VFcqUUptUXImTjBIXVlMMTImNjB6YWZWOTY7YHRodmFwVnc2VCUzMSVgcmtRa285Rn0ibTdVN2goNzdsPSJlJE84bjJAJGYsMUBoYGs7T3VAVUxRTzsrfUw1UHNGRiouXjx3K3tidDRGdSUsTFc8UypfY319Vz9Aay5t''@;'; put 'put ''YDE9SFIlS1JMTDQ/O1lLOl82NlQxQDBofm5wUipxSH5daChBKzRiJVhLe2x5PlB4Z0tQIVF1THNhS31QcEVNOjUxYU9HN3k/XkdDdnE5TTNNOEovYDlSRXpNcTVYWnx3LnN1Ii93Rl1xUi8uM2dXe3llW3E0SH5gWTpzK05BPGokTT99PnokeHgmVUoiZ0NTNDhgKnBpMGokKWBFP3gkKS5wPndL''@;'; put 'put ''LlZlamNbQ2V+NlQxfT0ybF97KC8uWiErTEpGYEMyLCtAYCE7enFLUSVzenYhUUt4MGMmS3hdVjUzalBqUWtgUGJgRG1zYWd6X2sjRyg7UF9iV149dHU0P3kiZyxuJVYlK2ZNMUE8VCYlOFNaPy9+VCxmQHAmbDVaIVpdXWMzPypWKTM5ZVU6NUE+NTNMYGUwOXtSWDl9MVFuLHhiaSNsXitSaUx0''@;'; put 'put ''JX0we0wlTCE/OCU4RmN9UTNSK3VfIUU+NyIqbVs1aW1UUllRInZXW0dHMEJNX2txN3pYZiZrezJ7dW5BcntxK2FJJSJ0MjVabkxsbmkqSzVONjBDfCpZQCFtZndTZkc7OmJ5UzNGWishaiwhdS4kd1VOI30xTzlfL0lAd1ZiXmhRK0kzcHpGO3ooeFAkYU5RU15rQntkW19LdyxfKyFLcjJQfTQ0''@;'; put 'put ''Pzc8emhXW3xyeU0kYVpde0dbcTxPQEtMVF1QTS9OZHkjM1EsVkJGNVRXR3o1WihqeCt6bTF8MjJrc1Q9eGR7Tk5eVitZcGFdSntOL0R7Rll9dEJzM0VDciNsWG5aYlk/I00ra21KTDJKfG1rZypOLDFEfWBWeS9ZamA+Ki9gRUI0T34wXyVQRmBfSUtiJFFOPyp9aCNHPSFiNCVsUGt3ciYzT2s2''@;'; put 'put ''PSFxP318Q29+cW1YJGEvKm0jbEBbNWV6Lk1PazVKJno7dGxUPkUkKG1zc3BDZjBJV2UuU1FuS2wmIWFAYFlRa2lxZGhWZC5WblhQWyNxTmhTaEs6XlB3XSVQMU1tcUU6MSJLXmV4bm9eaXdYVXo0fWA7LGFueWFrYlRFa1EhTSppeDBObytTZiJ1e208TVF1ekhpXzc6WTovYHcheFslIkRWdjxb''@;'; put 'put ''MDMxQEA3MXxXOW0uPzBZLCpRdlgpRUFPS0ZYL0E5eWF+MVpufEI8OWxiYWtXXkx3Yl5TeylyMDwhIzJWXVB6S3dsY1UhPEovZEV9Lk8+XXpSeCNZWlVPVytpdCV6Kl4pNjV3cmJKZEAwcTlkUUI5Kmx+VWR8dktXXW5HeH08P0hvP2R6Tno2dmIuKExGfEd7cUZBV0thTXhmQEglISlmRzF8SV5E''@;'; put 'put ''ZzRub15nbVBYOEM4fGxnS0MvOjsvP0hYd2JmNSpjYVshd31nYz55VXh2QS5oLERyQGVdNj8mVXRlYTZgYjUkJnZ6X3c+VGlhN3UyIXE3JEEhUzEqJnVaTjRDdTl+Y0w/PGByeXJtQ2R7fDBCIXc3eDBCKStnNjdsSTgiKCFYZEFSPil3Jjs6ZCwrRDIjX3xUWn4wI3Nia21YVGgjcUdGZm1pbXdo''@;'; put 'put ''LFNoSC5lb3Fec00jLl5xOSoifk9hXkFnN11XVmR4M3B5KkslcmpOTSp9c20xWFB6ajtDL0B8UEIrcEViQl5bTHBUcSspYyU7fjpycFUhVjhWa1Exc1V9VlMwMlVeU25uVkorLjFzU2c/SitAYm8zVTE/dDo9KVs4TTU9WGE8Z1Y7QDk9OndQfSwxQi5nRTgqcnksSUw0Ki9lcH5maHklWl8rSlE/''@;'; put 'put ''MEU5Knp+LD1ybTlkQUcmM11QM31wYVE2W0pTcVtJMjtgN1pCOFooQ09LM2EzfGhwY0gxdjBAO2Z5empRflpuJiU0Nk06OzJNNSojY0FNUTUyLGlgJlZlPzAyalpnYlU8K3Y2ViVUZ01kNT1+NyU3ZDNrOUg4SldNKD9iVGVjW1BVX3JLMV99PjBubnxrel00aUYrUV1nd01wYV5KVChAejt8ZHg2''@;'; put 'put ''U1V+JW1wOl9fbGYqaltiLGk8NTVpN3N5b10kdS5vdEBVKzYyPlE3ezRtST1hPXtOcSVge2UkUGkyMyNnLEtnPGolJTJNNWFzbSFBZTshRiJdP30uNjxMZWR9MjBJKE84U3J0bDI/NF0vZy9dUE1fOzc2LFRPK0w4UyhJTTBuWkZbfVIsL1p7Y31keShKNjldTXJlQUwvfm0vd0NiRlEsMkxVdS9e''@;'; put 'put ''eCVFclVGV3E7OjYkIilVdTZpW2g4OC41T2xtKkc8cGRkXS45Zy84ZVt1az5BaF5USVNRK0hfW3w5dUs8ZEI3MX58ZCY3OV0jaSpHaTN1MCsuQGZsfGZrJUpZdUVyVnVFcmN7aDI0OWRkJUp7P1RtL0QkOnJ5ImlgJil9Q0Y4Uih0Oi8/aVJVeiYkOzBuQ3lDLGR3OkBCVmZvc25beCtyJHU/NyN2''@;'; put 'put ''dFQjaVB9SVtYWEBnKWJOI19dS0B0YTlsIyFWIzBwTT5eXihwUmA3YkBPS24/LlIxd1Q+Yk9bfXIqQGF7eGhSVVFiWWZGO0wkNXpAZ2o8clpoeWMyIVAlQFNJOi5WLkgzWWwvR1AvbVY0bURdU3tiXmchUX4wYiZsMGY/cXheJjoubHF6QEduJVopMVVFT342W3t7OHZ1IWZFT0gqWVUzR3B+dlhr''@;'; put 'put ''b0dTantPbkljbkZbLGcoakQyWyY3OGwqI0tzRjImLmRbPSk8UHU1NDllOnNfZ3UmNENmMDlFTio3RExRK3RSS2h4WT4pMGR+SmNgYVExSGZSI2RyeXd4Jn13YmI2fFRmKm8qTDJhQSQvQTM0NzpvVFozQVM0RjFbTlJaX0kuVnBdZzMlc31kfno8Rl4wfiFmOTVtYVdhJTUmdCI/OUx6RF09fTdl''@;'; put 'put ''PzpBc2JJP0A8V1VbI31kUEFUVkBnVmc2LDMvQDEhcVtpfkxsKzMuaiNmMixQQHlKTmZLRnFMb1U9dC59bmIjNXJkQ35yPmYhbClDNWUpKWdBPGh+b35rZzB3YCNIUzRsPywuY2AhfDZWM2soZ2s1bzssPGl5VllbS0pnRlR7eXVWL0cuaS5tcXJgUEw2Nm53L1F1RCJ6U3guOCZOWiUkNWx+Zm1P''@;'; put 'put ''WDZ3MmVHVTo1MzVPc15lJE5hak5NeGhhNlpWU3tnNE1YIilpS35lRzlZK01Dc3glWVlBJkkrV1p1fHZbUSZ6R1Iwa2RqazROKTNYRkx6SV9laXswNE07cmhwN2s+MTxYa2l9KEsobDcoem41UTtMTmR2YlRRK1YzNnMuO3VZPCNsWWQ4T3phZ2RJUChoRjs4dU0xLjF8TWJWSD0yYmZ3T1ptZmxs''@;'; put 'put ''Y1lIJXgyMWAwcWROeFR8Pmt6WS5ubyZkI2t2JWdJI1tlRSFoTV9RWEZZNG9LYVtWU1cvQGtVeC50NzF+e11YKXQ3UVVyaGZ3PD8zfHFvOnpQKzJiP2NiTDZGa3hsISYqc1ZkP3hkUkNoakcvQ0ZSbDphMHwjaFR+NjZLSmJCdmVdLmlLMDJyazhVZW48VDdTMkp5VkN6e2pHfEVZOXo+WVpbXVdf''@;'; put 'put ''cSw1MSs2OyZzMGZfRndXaS9+ZTlzTz0+LyZzaClXcDg/KyxrJFs1TjIwfFIldmxwN35YIiM3UnQuVm45MklMXkReRV8remFYTTMlcDBzM3JbVGJFRk9eQ2woW3ojRn1PSytVYXJ4bn4wXTJlI09iai5nOTIveUU9cTE3SjFubFpRQHpxNl5mOV59aWNFfFBNUTsyKF9XZykzd2x2UmZadCokfU8r''@;'; put 'put ''M3k8Myozenk5UVszQihPeDp8KU1RUV1MREZ2KHoxZHN6SH0xek9MMjVXfTpxKTkmPSlJNkxkK2M2NkxyRXlaOUA+SmhUNmZ6WnlsXV9JRTs/OGtnZHhUPGA9XVJmVT5AOT16JmUsQV1we1kzenhVcnkyJmwhZ1VoMCMpbWgsUlohNllKbVJBeX5fdTxzeUJqJXJHS2NgWm9sW2RNPj9sSmBPOiFY''@;'; put 'put ''dFBEOiVtR0Y4NVpld3opXldsOCQqSUc3O35hckh1UWpePTMiSWNdWmAsNGQwUiZjI1dTUGxDSFpnYXlqV2s1SD5ZIiYrc2dHUFRkfjc3XmNXXUM2I346PiNycFBGIXgpSjs3OSYydS9YPE86VTtiWS4mTT8sRHhORj4lOndmeEl2ZiNKQjpOI1FuVyRXfDF2fGZrN0BpUihLMn45Q1d4OkI6ZFpu''@;'; put 'put ''ZWJuUVcpNHxpYm9zWHg7WnFZclNhPF1PTnFgaD44TCZxbXVnLjJ2T181VUNIZyp5W2IwM2cuc1hdbU5NRU5fOFQjWk9TdVNJZyElcVd1S0hpNEZ6WkhuVjdBIUhsUXBkentTdClaPUo+d0ZISkhHR21IOUNaJGVHc1VobWlMUSg3UFkyUT9gVH1vLipaZUNVbGxpPSZeJWwqVykkVEcvKntqV0Jt''@;'; put 'put ''fmhIJj9fXlZOQHIhbzNzcDc1VnokI3kpOUJIWmhFWClAbztaM0NsZ1szXy5DQkQ4MGFQOEIlZzpSNy85dUdZeCw2Oy58QT56WmJMVyZMalh7L2wjUnI/YSV4Yj9WUXtNanBoPy9GQD9wQXFUZyk1eHJgVlBXQ3NWbURsS3NnYlN+YFZhJFh8JHwuXlNodXpDYEk0WjV6XzNgIVJ1cjpOVSk5cndD''@;'; put 'put ''JVRYI0gyM35tOis4TWR6TylQL0BoOWV6WXBuXVN1dFZEPXJqKFVdXzk0SihxOz9uQClvVjAkLiNQMVorTjtOM2BmZy86eGduVT14NTQrKlF8JU1nKkg+Oj1rOkB1XSgjJWF4P1tAXl1BaFNMRU0sYksyM1F6cyhlR0VbWUxeSXIqIWl5WzsrYFFwJiV7c1BSJWR4TWAwTXtTK21zUFIkLjpXKHM8''@;'; put 'put ''TSp5cixeUWt5JTorYGV2UkB9YEJ0aT1aRkMzTHxfeThybHohQmFPTzR0bEVdaSI8KVhrd3RlK0p8THdCJGNrV09VTXI9MWBdYWJXU3BDeiU7WEc8YEp4cHQiQXxXLnhfWU1Qe1M2eTZ9TFYqVS5oXWwiaEx9Xl1eOSxlQiVGSThDXXkySTtTLzlJflJjeXRfPjtQYHRYP0coRTo4cllrb209aGw7''@;'; put 'put ''dGwoLE9qeT1DSSM8T0tIOGxfQlRsLyM8YV9CdktvNkk0NlsvVlVTK2k2cFJ1M1l3aVV8VT9HMGJ2NVJCclV6cSxbYkAyTVpUe2w+Unc9eWIleDt4fXE+JHB3e2RuU3teYnBCOFM7Y1R8TEtbem0vJipFVlchSlA9KjIyPEpDaW1dZ2Mud3IuW0JFUGU7TXBEWkJBXm1WT2dmL2liVG05Xk0pJnFB''@;'; put 'put ''PT48P0AhSmVRdEcmaD1qJmQscWh5SnsmYiRnYkV0fj15ZF58WmdtSF8kVSUhSmh4TT17UT9GaE4uSGg/SUtxVUJ9IUllfSwiQDBXezpvODNOOWxLKEJ7OW1vXi8mQDtqQy5YbGpGaSNzLCVAbltHK1FOOHpgLnNQQnB+cn5JQ0pAa0okWEtYeEx2LnBsPTBpdj1QW1dHc14rPT1McTIkRE9Kbkl+''@;'; put 'put ''bX0ibFhbeUM2W3dMPWIwSWh+SExuZig6UUxhNlA1T0A+T0tudkAsYFgsTDJXTnlsVGwiVTNPfm58andHMjkoeGBfO3FrbHMvSyhZdFN7TEBHKCVVOE0zfXRuVl9sfTEmZmFZN0V0IjJ5UTx1UVZkZEshRHl0WVtvcUxBVDBmZ0spOjNbLHVYWDxUSiUrbzlLIWpFfiJTamlzISJselFRcl1ZbGU8''@;'; put 'put ''aDA9YHF9MG42a0dIW3FWTzBdMlkzbT9tNVhbRHV+TWcxMExAM0tsRkpaOChEJEJHMS8zPV5bVXQlYSMpLlRGc1NjflMve0h4aktZO1daOT02dVpaXygwOElsTUYuVCxAYz4lenFUKyhsbyF2T0o6VSIoI1R2YmJucS5IZiIlJWpMWkB7XmRaJUxwR21VUmB6VSJdc01iVnhbczshdntydVpRPyk6''@;'; put 'put ''LFFwPXI7MFp9bzd6fSU/fjRKQVNJJE1oI2RWZHUmPGx7Pj48KjJ5MGl5eys2aF5Vb15VWFg6YTwrJFo9dGBFb2RxJH5rQ3F8SFFDRSI/Q1ZpXT19S2NFNGFLSGg7Vl1JcytzZ31PKlVrRVE2SmZSUVtCMjQoQjRfdmowTmIqZ1csZSlWQkRPWmBUSEMpWnF4bHlzZmxme2s3Q3wlbHdKWGlTO10x''@;'; put 'put ''cUI4Vnd9T1J9JnBtdEh6YkBaXlYmTG0mT19yZn4lbm5tI0lLO01ZbzEhODZNP3dLciVebl0qLCM8JClnZkBLWm02NihMbC9jTEtvW3lJTjFlfixtcUlII1tmeCxlJDQufUQqYWlOeWgpbFZEPUIlfCxDJVtKRkc7MWclLFslXWVPQjU9cVQxUSVOaGdJSHdGUlk3JU9tW05VX1pfJiIyPH5QPnRO''@;'; put 'put ''a2cwd0xGZ1RYLm58VjJhUU1EOz9NbFgxZDBQUShrYm9SbzVmNC46b25Rc2tHaEI/P101cmNoNHUrWzEkO1B3SXptKUxxRzhCeTI/JDpFTCJVcylZfH1mKFVzYFpfX3F8cnNyI3FbVldDc2pCWTpWV15SK2BhSWM8fnJQRCV5MUYwIX18ZFp9QjpNfkpSVls+XSZVc1ZCW3xPeD52L0NVV2t7K0NZ''@;'; put 'put ''OnxRfTEjdGomVVM+fV0uP3xRdEV9O3ZpclQvTWpZK1ErLHpPR1ZSRjFvR11jMjk7ekZaMDA4cCJlZF9SOXdpWG17QmNGe0ZBIjR+MmlONmZ4fjUrYXd1PTlNSjo5a28uS25hfXtGemtNVztMKmdXIWgvQEZ+PSNCQkIhfncqJGZQZ0NkaGpLRz5jIkZJN0EkNmMuT3lrcTBgRk5SWjg+OXpLR0FS''@;'; put 'put ''Mn1naUx9OWd6RSxlR0QyRGRPRToyZG55JG1MeEluTzUuNUd9SzBdUjc6IVoocWlZb0tQN01lPTEpfjJdJVNjRl0xOWddQDUkKnEsVnZddUxfKUZxIUsjaUE4LDlidEZbe0JefHwwXTJ0dXFdcTBXIyVtLCt1PnB4X08iVk41cn1fcEA2RkokbTZAKy44ekBncG5UbFRgSzhDWkZfJChtPWZqOlVO''@;'; put 'put ''Pn5ARmoqbSteIWw6cU5fVyNyXn5tMyRBVmRAOVlfdSxQTygoNFBUeUc9OihbcVF+O3kzIzMsK1V3TTI5JSg9NXNtUi9TfmAyemAzQFYlVzdWamA4WylleVlxJnBjTXcub2Q6ZmF3WmxpTmNIdzl5MWFXUSFCUl5LU30qU1FDQkgpez5zOlsvYExsJVlKc0FyOUt3UWdLYmpeNG87MDdZTWNddUAy''@;'; put 'put ''OFdKTXQkOyUhMiVVYTZMcF8oSyM5Km10KklzcTEkM1BaPzhqNW8yLnFOODNncFIqPDZaeX5jZCVacCg3VjtbIXk0MU1FeHlzRmRKYyFZVnAqditWWF1+Lmx5JTokViZPdk0pdyNmIypPZjh2ITt5K057d0x+VUxaUXc6WyZsNENrI3drQ35KfUl5eU5JWXhiQGFYKjQzRktoWCxsJmJiN2FsLGd0''@;'; put 'put ''YG9+VEIrL2lHJiVEPmJmVVNpZGpNUyVmKm0+UmRVdT1uPGA4JGs4emt9NndWOTNYfWtMVShCV2dbPDNXKkNne3VnJiF3V0NoKzJpZTokRkliVmtAK2d1I2ZdTVFlNS5oWFgqX2RyaiFMUXRZRGszQC5HcnU6JC97XVlsRS9qXT8zTntva29+UVZke3hxbk8uaVUmckgjUShgUzR7fUFeanlocSV2''@;'; put 'put ''JlZdfCMyamB8cFszeHxvazs8Yj44VlVoVnhGYmpmS0Amczk9aF0zKTdgXy5yfCMyVWhCeEZiWjlnJVQqfWgrMHNbTkVPe2ZYImJqaFVKezZvT0lYbWAqTFsmOHhqSCFDbDk2TkoqWi9yVihIcX5FK3tHaWZwMnt7TlpBdklpbjcqT0t9TSVrQTljVmg9MUsiRWduKkBlKX1iWCNmWyFkOT0rMjMo''@;'; put 'put ''azcue1dyYy5xREMuZXpFdGZpS2sjPEFmXTN+TklOaDh7IihDMGdCfTApWXxMSFhqYEdPVDF6ayQsbkowRWBIYVJjKnhqcHd1R0wzcVJBVGMqUHAwZlFCZmoyUEtuRjU4O2lMVSVjOl1GR01YcT1ZX3xDSzJXVy8zd2Z7ZmJKRWN8SllTXlVAPVhYPG1aP10pa0M6PXF8eUt3VUMlKn5wZC8kKnFJ''@;'; put 'put ''ZDxzUDB4PUEvSWtLaGAxeWYkQ2dwcGJ8QnRlQkNyPWIoVkpganlvfDJDdVdsX1tEUX1iXSxnSTtjT3AzX2s3ITssS2d3e0gzVS87KUhKcS5ib2ciaSkiWSZxV2FFW0J9aD41eixEN0Z0YSMvbTQ6TTkpIlVCKlc3e1tyXyNzKHddcGhYW2MxQiFsZUUvKWJLPlEhSiViJWRCNmwsdl1pImdZfEoh''@;'; put 'put ''bGZ4VCtJcmJoP3Y+R3c9enpsPFpbITJ5LnszIiMvU1ghPlVoOlp5Ly4hPTBDLCtiMG8+UE0rJE9tT2IqSTo3N3ZCSXxZXWpjZ251aU1wSUtRKXNBS24kR1E9L183VWs6Z2hzfk1QKC5taCxVbXx2Zjh1MGtCRXBAI2RMdUNgdXpYT3AqWj9uSXhXe1pOfjg/IUtrZG9DbmNbLmoqX2xWNVVXcDs5''@;'; put 'put ''ZkFRXUBRQlQyWl9oS3IpRXFqUUptd0k2TGlldkR2MFkwYWBddjZGcllOaTQvXWhbU3JOVkFteGEiMT8uVWVoSylGZjxyb0ZFZVtiJnRAJmM9MW1gbGckR0hsUEthZWhNdmg0I3YzQD16JXRCJm8sZzpDXnMiczNVLzNHPEY2RzFOYXpARyYxd3VTSl5eIlk0KkpRYlIve2R+JkNsdH4rVjBnW3F3''@;'; put 'put ''YG8kTSx5QDxRSDVMLGIqa08xQmFbNWlsKUk4PyteJFNTUyMuW1BfYFhvbyM9bitkJCozODc0e3lHdC5RM2NgZzQxMlFJM2k6L1pnJiheTCRscUdSY3x8XTRtK1clOTZXe2I0TVV2dyM8YVltSFErNWN1cXYqMGN6TjNbJVMjVzx4clMkKHtGYGQ9ciZgZmt4XSN2cSIkQD59O3Eydz03cGN7bU9I''@;'; put 'put ''fFdNY3pxLmtKUkNuOD9hWShGeGQ0NWw1XXcrRzpgfCpiO3EwTzF5LDxTb2plPXR+UEZ0LlZuSHw/MVI+elY/fVEkImtqdE1tOUNTWWs+cWpXRSF2Jk9bMDosejtgVHRvQz1aYjVnbGI5O3thOEZCak5EVUBMM2lTeXImenwoWn5sPSxrMVcldyosXUxYfV9pWU9qWE1PZWJKbj9aJldIT21jV0dp''@;'; put 'put ''Tn1wKUFERGwqMUtJLiE0d0Q4eWI0JlM1dVVZbCoyM0VHLjImIUY7MjA9aWxNczYzXWImSDZSckJEVGU9aHkzbTxeOygyOll6IWYmTXpFUzF5I3gzTW9kdlNzZEc7R3YqbkVZZ3pkd3tFU3BaTTxjd2NqRlR5UD9LeGRadTVEKEp0PV5DYXJxZH06eWRBNjV6REssYnFWfTp5WWZIaEJDbStCM3FG''@;'; put 'put ''U0ZwVlReZXdjMDohc1s9RHc7Q2RLfSNoUH1HNDhZOEdTeyh1KSVra2hsLERGe08mdFN5Z2wse1lyOVVsZns/L3AmIStFPlFTQjJseyltbkxeQT5ePXlaV15TSjFvLDx8JVEyKnMkKyRgJnN9QWhIdCtXaTVCUk08PHYvRStSc2s7RHkjZm9DPDlWYXJEbWF9b3tib1pEXU5TPkJfJCZTUT49PF5F''@;'; put 'put ''P1VhTmRKVGNwSXxObldyXzo3NG5MTS90XWZibzNjVGZPcl04b2xMZV1XRXlnT1ZoSjJAVDpAUSZVaGl9b1c7W25keFtMa0Z4antUZER0VEdGTFUwR0pWMFtqIiRAPV4zQmQwenJhXVY+ZGw+WmpxNU9lZ09yRyhTVHkjWWp9ZDZbMmdiNm80MlQ4YlgpIz4kbjNeOUVzXTB8d3Y9Xl59XTZMYD9s''@;'; put 'put ''fSpRVj95Inw1e3RnXkx1NzcwVFIoZ2oxQG42T28xQ3I/O2R9aU1eTT45XngqOT9nRHhGWFFXKlZLV3Z+Sj59W3E/aG1wPztdfVtwP0UzLnZxI1NaV3NFY3JaK211PDk1ZkA3Vnp+OV1MbCszISVbYWAuN2pYQE4oanl1fDd2RipsVF1ubiR2PmNAPG1Bc1pPI00vP3A/Rm9wfW99eCpNakxAR19i''@;'; put 'put ''eWJePlZQW0xJb0ZDLE53JW5YV0dKWkl3RllGZyVLVFhtUVFkejAqVjJTWFdVLCp9VFhrd0V9XzZyeyY2e3ojRTNUMSVFVkBXc1VTP35OeCZ2cSN0ayV+UFdyS0lMQEt3Sy8sS1UuP0UzQGpseVVoUlJdck9vJm5LOTNRYilvPWhzTVNRVypWPFFxalRGTTE7Lz8xdUBGaCpWSFUocnc8alhDa2o6''@;'; put 'put ''RDI8YCx2JnYrdjAqfCE9NHF5TVRLSl9wNzZLSil+Wi4icXUuS2pTO3tuSzN+TVpRP29qNzZ2QkBvVUhTOWc+KThnViMlQFFUZltYW2hxcTY9OT1UeSNBeVtvbnZGYz1UXi9NbFc7TWxlYng2Qzd1Z0tabSJsZkJeQC5uTGgjT1dwWyJATUpXWkJXI1tOa1tiKGI4V25iSkd5O35Pd0YpOkkqWGJO''@;'; put 'put ''fUVYY2gsO1UoVVMsO14kfEBLbWBpNC9WUWNyZ3pIY3R3YmdsPFRMbSRYZDkkbVFtanxZU2tVUXxxRnMkL3RGeVYuW14vWSVKL1pzSFU1TVZTajp2VjxsVXs7Yl57NkpvRjt6JXNxTXRPJHp2LzJLdUdWVE8xJEBEfVlRQm8kOzZbIUVnbDl9aHxXV0JReyZJaF51fG9RVEdTQ2Y2OWhgKEsqMjNQ''@;'; put 'put ''WH13dnFqVS46aCtqOyQ1Wz5yMUNtalEsTyleVyZ4MGxkWC9HRE8kbGhEME8vZnZkfDwrSy57Z0NmPi90blFvPTE3ajE0OWppITslTEx4JG5NXVdnNHNicCp+PzA8Jl1KeyVFPkFtIyUzSHwlfSUqJDMzcX00bUdgO3FbN3ZbInJCd3E3Ukx1Wk9NV3dKMW8yZjlvTG9gKnldTmBYeWFnKTBqLkl0''@;'; put 'put ''Sls6OnNtK3srZy5hbUNLaXViL29ofVFjSVBaQS5YeDwhfmFAO2Jtdyt+bTkpfkAxTy5vMz4ySl5aPVg8e1E0bEUpTy5IO1koS344fmtGY3VhXkBhMS5hZDYxTXJ4elAybixtZkVvLC9gX2NQXzZoaTB+K2RVJiw4PGZvJSF5MCMzZlVqcVhVYXQ0NjY1TkdOZEx3PEBfSChqRlE/MCFsMlY/MCw2''@;'; put 'put ''IzFEempsTT4pXjU3X2QrOEIrK3gqMnNOWVhub25FW0MqfXREbilzJSxdOTt1X21XTzF7TXgrLj56PSRrSkd+JFZ3VWVGU0s0X1k4Vl88Q1lQKigrKzZXJVp1KmlMTFBLRSQwajRodmdgKH5rO3djKVEsKCtsWSo9MllobSZrdHgiI016RlIiPFsjSkw8QEFDTzAoa1hNN1NZZy97RTx6S09nIigw''@;'; put 'put ''OUAvJHhlbzYoRXFDVT8lXWprK2dQOVVANUU1PiM7LnN7Pih0N1NWNERBbShGMVBQbkNfRHlhfkFfJj1kUGcmb2kreWx4dilKd3YpcnE3TDc+X047WkdgU0klQH5eOipFI0FvRnkiOlQqKDouai4kTS5KQWkqakQsYTRCeF56OyluQkNnNz1tZWUqZGI8OEhUJS9SezpFKFNnUUZOX11GMn4kcERV''@;'; put 'put ''eSJEdCt1c3ReOSV4TGNnJntzRihjV0BxUEJ4VjIsK2A9KjxrL2Jnd0NLaShvQX1xUDEvcVUrVWNecStPJHNbQXhWPGx1d2BdISsod1ReeGREI2dMfkl1bUs1M01pc1ciND81OSN5c2lHSGooflpKWGpgMWYlRWFDInhWYnpxTVNPY3x6TiYzSj9Qcjh3VlhdcUZfLns3VDteKUc0aThHN1RjQUk3''@;'; put 'put ''WmQwTnt7NiZ9R3I0XWwpR3cvN1Q7XX1SfWw/Xy5efWp5dnxea0cvSWNKeV1ONnVsLzwzLzRaRURtcnlxNzJBZzwqLFhvdml5amsrN3lSRklpVC9BbWVFNmhyUSlXY0tjcXs9STsxYjRRTVksS0FieyVZZCx1blZuMFNjaixmVUB6ZzwuYGZmRzE5SHdeKyNVaX5PXzIvZ2N7bUlde3x9dzIuIlpf''@;'; put 'put ''P0x7flhkPXJnblM7RnU+U0t+ZUdTNFVwQHY+OSEpP0c7Xi4wWHd7eSwrLlgsd1Z9WSRfTSp2cTtkTFpueFVJKCxxdCRWfkFLYjFVcENoQUZXfmw5WGdObUBMUyUvdlNhcS9bPD5yYUh7OyRoZ0A7KUxvcjhzKHdzaVAjZDdXbGBPYiY5P0A/fUNAJixsUXFZW3dOSzFVZSthIng9WC5SZStKRFU6''@;'; put 'put ''b3wwaSNtYGMwWVYwJCt2OCtvLGdXdGhmP0toYF1QLEU1Y1ZqeVJ5cXh7ZilOdXpxcH58RnkxOSNNWyJoSyRfM2drWjpjOCxwN3x+cC8zU0pwfiV7SnQ7VUAwPDUkcSVbYUo7bls5Y1JVK1BpM34wLmBjKygjRWtbSDU5Yi4+c3J+X1RQPXdsaSkxWzRbQ0B4YDFwcD5hPGpgek97QzdAeUx9T0Bz''@;'; put 'put ''PlFkPU1gLG5+X3o+PklrZX1dd3tTSmYpRitUfFZ3bDhqajl0UCMkWDpEO3ZGZHlBWzdMOEQxPWBtPHYzOTZZMiNxO18kbFZvQlZjOWlvTnQqMiFFLiVbVXVMcDdCdGRrdmFsWVIhLzxaMy9tUGElcEpZTUgkOlM0SX5TSVR5XlQ+VWNCRV54PlVIaF1OJE1afEooeztXPVVeNExYcFEmRnAhal08''@;'; put 'put ''UUVhS2BVIyNMTWg3NiwzVCM8X0AmK2pddCp9eTtEW183ITdwVEYrfCVkLmB3ZGZxOF5DS25PT3E2N1Y+XSFXLkZEW0spe1dtbyJaQl5ua3ZAX31zSUlKLEhzLFhvVyllbk45ImRBaHUzTGZLI2coQiNJYy44PipjNnl1Q0I9UU0xXV9bdihXOnNmIj5ZKzVFOEJxRm9KaCs5Sjt7dGFLXSQ8flBN''@;'; put 'put ''VDRfRlVJTTQ5K31UPjd4aT9zLHFvfFJrdG5jfCguclE2LHBkUnMxKzV6TlsrKTdobXk5Ml4uST98ZGVuV2pbQyE3aDYkIyRVYjt6bSlMKiNbNkZiY3FNMjRfWWt9RikwZXJnRVlMNHhxNnBoS1UvfD9kem1HLk1vIXJJTkdCMnBTSmt1Z0ZdMywrKFVkeURvIXkiKzQoJU1aSUNYZHN6SGsqXWd3''@;'; put 'put ''TGpgI0w4Vz5xU0xUZ2g4QWhkPE4oIWRyZkp7NDddTSxuJmxzM21sNixuenwmcC81JnxAMm9EUUFTN1spI2h7bWgqaV8ue3ZueX5Jey9xUixAXzxxJEAlSCp4RHwhJT1BdUB4Qj54T3pxYV8oJT5nQj5pck89Ml5uZitlR0RIbGN6MzBhNiFnW3l+L0R1XzBvJSlUS3JHRW1vMW05eV48JiVkclA7''@;'; put 'put ''YHE8VWU3VV8qSE85V1s7ZExHX2tBcz1ZX1h3bFNgOzlDYiFhMnlNWHFHZ25AeSU7KmhXL1JVMDlRdTZXSCU4QV8zS1ZvZE1UNTdhKFF0LEJDNTUyMXBXYllmaEhCdVtScjczRHE0VUtmOHdDMGM1Z3pZRE4vRzhkfVV3bDp0QDtVJS9NbEQwY2lkVFk5PTE4SnspdEElcFp0JExOcFc2OiFaRSNV''@;'; put 'put ''NFA9UklZKUxxalswUC9eLEJKXnolI3ohPVc1bFZuKjFLRmJsJUhhUytZd0JUVnAyW0B0XmdnT2RZTUhYSVB0bEhFVEpNdjYjNSJbInB3SyFNRGJQdXIvcTVecSxzR0VgfEpGXUp9TlJDU3VGSHhjNGN5PjVjNGN9cG15XXc3YEdJW2MxQmFbN2lxbGFIXVdlZHNOaVhiU1NbeiV+RmlbczM4dCFj''@;'; put 'put ''M24xPXolfkZsRjxePjYpRjt5WT15RDxeR2FecDBPUzA4PUYwbzRjQGVRTm8jPU4wVD9uXj42KUZfLGY+QHZGW2omRFlmXlYxIllxW200MkNkWHNtRixaOXhZbCliWXxKTklTSCNkdUxyVnNRfFV2ejE8S2p5d0puK2JId15YfFVWXUFHRDM4dF1nXyUyYVhJWSlWUV9wQk5bcFgxUE9pVjxdJUVy''@;'; put 'put ''VTV7NDYoQCZgTzo8OHpDL2Y8a319Sz5MaTVFRnFlZUUjQTUlLz9HPHUhM18/TTl4dTxncEJSKzt6RiUxO0wjMHRUOypJXjxaUWg0Yk4sMHF9blgzMS5qNWRJOSptOjMqQF5md2x2ITlrcXIqLjE9MnZGV1YobjFyMGhvdkw3O21IKUY8XVtMZ1Z+OU89aSsxPXQydD9wUVBsWVFwS35kL01bfGko''@;'; put 'put ''fFdufmklKktCLl18TG5BQnBoYExvYDxjZjhVcE85OnBpTG05bzJCJW5reHxlQz5HUy89Nml2YF82Jjo9RnNtW246bUJvPzQzUUYyL1pxYU0kYEtLPi4xQzJvM1lbY2o3YiZ1N2NAb2x2KDpOVCliSW5da3dnY0w+L1FOelRhdVRaIjx9LHJ6XiRHYE1XX3xHdnc4b2hTezolW313Zm1NZD8zUyFI''@;'; put 'put ''JCpPc1s3OiE/fF9la1dpbXx2bkA3ZkpkR1dSOllxMFU7NXcyZ3R1fjlmZTVwKHlrN31sX0YyTU1xX3x9RnRtOm4sbTlbbEU9OHphaC5eJDVbJlglbF99T29NflhiLyRbcFVYbz1zdTBeMjU3dTt5VnRsZ3wlWk5FKCJEU0NFemVfcFZ4JFN7KlF5ejlpLHlKSm1TKDl6bz5NR1VNNDxjMFdZQEpG''@;'; put 'put ''Tm9wc2s6TChVQFdbWCloZkBeMlNSYkxVKEteYFpWPVhpRTswd1JLVlo9IUM4T3xVVkdRXXtVI0FjVSE1QDB0YF1UaCNKd0N7emdlQF1PK1heKV9JTFRrSjx6XUZdZVtzVXJ3R1Ika009ZkRqTH5jRUNUPzxmN11NbXo6QGBsbFMkK2drMHEzWDMjcUJ0aXNnX3s/YGFfaSVsYmtQKSRBOVdbYGck''@;'; put 'put ''NFRzTSg+dTlgd104QSwxSHRqOEtNLjMwQj56eihuPjtwLFhiImc4PnMsMXUwMUdmOTJzdmh2Mz9vWyZqUFUqQD9kJHVOfHt6dGJ+ajxAYD9eckg5cSM3MDUockhuNDxZdUNyfDhEKylrezFoVVBkcU0/NzJebjs7akpUKFhBUiQydCJmVyt6bS5WQWZXMnpdRSlrcEM9N1loSXkjcUBtUUB9I3Av''@;'; put 'put ''e1U1KlVKdj47dm5VelRAUSppc1pfX0pyeTh3Sy8sZEwrPy95X3dLamkyaHxiPnMxUUwuX3p4YF1WRiVtPyFuN3ZzQCVCPmQiZTI4Vi8jfj19Zm1lOzU4ZSRkbltYVjc/JEIiOWhZIVNsWW8wTmFiOkk4dkMmMGdJRSVZVEZOdGo9KVpPeWlzNiR3OUtkQC94WF1LRiJhLkdJXUZ8KXIpb0VUOEYl''@;'; put 'put ''Ok02XyZ0aGZHT205ei5VMFA3RlQsb1FKKkchaWFWZiQ7Xng4RilfKnBEaVZ6d11LQCh9bnApYnY1cyloSzwlX0x6MCovNXVbRFdMP1BjaFI0Ki8rbTRNfUVvaFomd1dGYD4wIXFDXjh5Ljhaa0pDdExOVnUjMyt5VmxLSGxAP3I/Jkw/PHxfNCxlOkZieU0pdzBCLHh2ditwR3RJQDxsRSxaRlN1''@;'; put 'put ''ZmdoIlsld1d7dSx9YkYueE1JTUBxRzFQNDwvQUhHOkpyfC4yWG47P34vOnw5VU9tJDJOMW5mQj4oe11oNDxkYzpodiozYzdsV29qZ1BjfkV0XlsoU2QrdzhwPWA0TWpNM3tjQGJPcGtBT3V3RjZONilkdz57NlReeDFfS3lmX2hAaVJSOk1XMiFBYE1bMCJHKF47MkQlQ2pre3JqRTkuTnc9UCNe''@;'; put 'put ''ME9KPDgoeWhSP2shUzh4YGB0QmglX0ZwKnFyMzU2M1hzclNSeF4kV2p8WTBXSE5DRmpUV1VYUjJJXSxxTypeTGIpTT8/cz9BMlR7azRsK15iQWtqb3xUXnpAUylAXi8zQVRda1p9dVsva21pNiJ2aHZhJWooPzVbcT1sc1Y9OUFNTnh3Y058aXlEelU+XXQ0Xyhlb3ptallbLkxmK14vI2xfRiVF''@;'; put 'put ''dEZMaUEwPzdGcl9wcVg4ckhjfC9ud2BVK3p2LzJLbUdkZCxYXWpxS1FddDwmV15aMVpqRTp5ej50e2tMVCx2QH5YW1RjQkNJXTNWVG9QQVR1JWhXdjI+KVEzMFBDM1I2WG5fKV9yX3JqWX0qQ3hFeyMzXWp1LCkzJW81MmJbamVpTVp5VHpNM2tHVGwjIyh5UCV0TUJLclZPc2pFN3dMWy5qcEM9''@;'; put 'put ''aHo7JUpZTGYwWyp7cU5ieVlvT249M0FIe3hZdytNYDEvWTZEPXFrQU9vZ047SHVzM293fWg3L05kbk9oT2N6bzd+aTN7QDBVSkhBP1pmeCo6cCFLS21PQysxWC5wSW1vbTl5Pi8vVzw1akAyZ1tqZDN4KipBK3A2KnwyLGpscl5wdG5vXikhe3RrbDtrayEsYk9tU1hhNClfPSgrQyMhZ0A5QVdC''@;'; put 'put ''anlMfVtaMSs3S1FJd3pGeip6RnplSXlOJHtPNFd5NkNVUyhlKjNTbCt5NT1UU2cyZ0VPPDlgLzVsYnc9MSxeeF9oJSViejRPI2lnQmFidSVVU2ZWY3wlckYjTERaUl5rdnMiMj1PYmssKlBpci9ZTWd6KzF7als0OEhbOj1NbERDajRncVJ7ZXF7RlVlSVp3XV87azBmdkY5K0pXV29fS2QqUnAm''@;'; put 'put ''aCJrWk5fcEJJVk0qe090SGo7P1VJLzZVZzJ9TU5mP1l3ZkAhUXZNKzc0JWFNcFZPbVJYKCpgKXwhKEN3TDJJXSx9S2ltTytgWl1yVEh1TT8/fUx9RURRUlYwMnduYzw/P00lakF0djAsanZ+Rn5yXXlWek9vZ3ZZWzlQJixKPShoWTY0JnM9V2R4L21OcTZ4YGVRTiNVcEt4S2EyVDU4Rn10PDk3''@;'; put 'put ''M2BNRzI3LjUxTjx5PSRnY3dJeyRVZkZ5fiVEcn5KfjlwRiIydlBoQjJLWGsmSC54WltPS0hUaTtLPEVtQ0AlMV1gdktvd18lQVtldkN6NColPE9LR21rdGhxW1ZaVFh4S1dEWlQze2hkRmBzbHBkYDQ7KF9WbShSNn1xeUtXKGIpdT9RRU9PfH5JJkByPGlXJCtAPzJxMUpkeXh8OSo2VH4xSlhH''@;'; put 'put ''cnspYCk8P2U8cFZLKU5vSSg8LCxII3RXQkd4fjVdRSxHZXxqdnJxV3B5UFZkdUM7MTo1eUVodUgjdjJvUV5bR1VmdncvVkY6WTJ9JiNGUSJCTFZ0cUB3aHZ9W2pJNzMycX1vV11pVlNuWy5dcX4sWjx+Wz5SXjBrP2VJWURdUWReX1VdJkwsZFczKGNfNGg1Tm89VUB1MU51V1g3STdMLiV6M3xA''@;'; put 'put ''PSxrSkUhYU43VjU1KihoVy5qR1BYLiNtXTdEK2slZUgiY1JaMX4oYlI3V0phSWMmI0N2KGVxb1BNJCYwJUUsMyVvYzxWZiMqd242M056UVJfbGt3cHB+b0FpOVhmKmNNZkNvVzQ5aFEoTmF4OHJaRU9DInJpenF2JUpyfD9FanwzaUovIjVYYjN2SEZNPytGcWRGVTAkamY4RTRMbTo2Ky9aNCFs''@;'; put 'put ''W25mfkh9X3xQIUtgcmA2OkwuLmRhWkYsVkRtZTBmUiZ+KS5uNldZVDJpIzxYbHUmMGJvQDd6cWRbMnUyPCZadTxje2pMN3IuJGkkSiJCX0c0b1FWMk5odGF4K09uLEclb1ZsZTxBK3wwKGdWOV44KmcmbWxTYVYuYD5tYFsyXU8lIWc2R1AjXzJDcjJCYHlIfHwuUj99PmRWZSVRTDNYdDBhVUlw''@;'; put 'put ''WzRvYHUvdy8/QD08WVhFQ15lcXY1WzBaSiV5dWlpdlh7KWApU2pUWjRLRFRIamJUNntedmxDa3g5NnJNKFRfWV9XZTordF5ATDZOelFSOjV1QiNOK20kKWlXQ0ZXKWZqR1k/VDdLcmIrKTt6WEdgbn0kfkoiRXlXdlhkcnspVHU+dntqbkU7RmN5RkVZXm14e3YkKmR7Y2p9KVJDfUNNXUtMJitf''@;'; put 'put ''S2lUQW9fTWx3Rz4yT1RZRG4jWCJDYTFAS0VneU1QLHEoI3ZaWV0sdTQ0bk56XlhrRkMsOlpdLDBMQ3JkayRYVUE+bng/NywwTENyRTcuISpWWGRdfVBaNEpAUzQmcCNFRz5vYUw/SH51JVhARTR0JlhaeFliOEF9Pk88TFllcH0+W1QlIyJQZC4kYn5SPVNOdzZPYjAvd3xfVC47O1RwPlM2bTBq''@;'; put 'put ''SEFSYSZlJWQoTDw2ZV5UeTJPSzhsR1VwRC92PEdSMjlNYHxkRWUhb2J7Oyo9LylNWW49WF0uPT1lOF8ucyQ+JF1aXS5YbmlLaywmPU9iVVM0dmJwRkpmdXBwXSVIKnd2IlZAKl4jQTdbYDVwX3JYM1R9PiQvNjRTU2xvZ2c/Z3coa1Qlbjs/I35pKlkyTCR8bkdLUVtJT2lqaWl7I00/IXYpZFl3''@;'; put 'put ''KmcjOUxdIyR2cjppRC5qd05nPHtuN04zTlR2N15vL19AaSt5fnoyQFJhNnFLNlV6O2FMVk1VU0wrMWp4Nm9QcEsrXnVSV2Q9QiRCaypMYEpgNFl2Mjw4YzAlNEFtIzU5djVWKVtUQldKPCt5JGIpPWI5Q0R4P29NO006TTpidT50ZG9RI1AjNj51Mmh0N3Z9JlMhaWlnRGFFNlcrT0JtZCM5dnwq''@;'; put 'put ''TTZfJnUyaixQN3dWOCI+dEBpZG9jcW9Ici82I2Y3SGFyRCRCfUJIVHIvfCF0UXAvQSZCQCY9ODpzOlZLWGI7Zjs3fU9GdT50RUA3U013YEJ9L3UyVltlTyUhTHZnenRFKyQsIywjK111MiU9aEYmX3pEJEJHdkBgIksmMUEhKHlkcXBRcEolImA/cVZrNls3UUVsRC9EKVsjV3U8IUNsRDFEKVs+''@;'; put 'put ''NXFMNF8mSyNNQkc6R1JKRil0UFB1PnQzWGhmJkBEISZGYlhrPihJSyl+d3tIN1U1Tn1RVEJocS51PnQqQVImVVpYfHtha0g6R1VJU3IzNV85KHk9YWNbaXVvY3tkSUMkQmJ1aEFJN0MhflFVVlJaZXRBZmNDJEIuYCZLQkFyRWxEZUUpW2xML0IpLE5tKihBYFlSKXFyeVFEIlNHPFdxPmBseEAk''@;'; put 'put ''QkZ2MlchKTw5SmtHMmhEdGY0ZjQ8UjVOX01fNHksJCl9dndqPTBMKV9XNkxbSlk8UWZDQEJAR3hCVF5xOHZqJXEkXl5HPyxNNi5lZnJyNjZwMD5fVz44Ij50Kj9xVjdrfmtmcUh+bHZLOSxdY0p3NkozYj5uWzg4ejx5YWkmX2YjZE8qPGJxQnBZOkR3LHkpNEN7QlRZWVswYnFiKWZWS0pRRjlA''@;'; put 'put ''OCpVOkUhdjwpVjsqVmBtcDA7cXpWSiMsOTx6ZGtxanttJHM0fWtMdyV5c2RQJmx6N31KVj5bcn16TC9ZcntTKnhnfD0uKnRCaXBWOjsrPEc8JXBEQ3hXTzpEezNbTDJGRjk3elA7a2lRIU1OOjwrXnw/NkZyfUxPU0hRRn1uSnlmfntHeWdFdkU3YTIsOSNPYntIPGkhJFtzfW9sYjY5flpAPVBh''@;'; put 'put ''NHdoW3dpXlRUMFNpMGRUNF1dLk9jOUBSTD5wTUc+fDUkR0BnN2lRaXc9WmNjYzg/dVc3JjJebyQ2QyZwZWJ9Ml5RKEY8YXZ6KUtIclVPWnA8e3c4OU9kOy5YNDRCYDFEbVJhRWkrbXspSjV4Y199RUt9OUhwfCx5bEZ+Lj1pbU15XX59NFQ8YEczPmd9PFdbTzw7VXRLJjpRRytlVi5nTEJfKTB3''@;'; put 'put ''bDI8R3UpQUA9NzpMeXNfQjt8NksxclI2Slo5Xnh1aTtuSUU1OStjUmkvbmZMJHJZU3E2NCZdejFSTTE0YW8wV3F4ZUkxTG9BblE+WjNYIUhsSDUubDNbZFFsNHVQflg6YHs4YkNOUX5TUWpkUWtMOXN5NSZPNGVyOCZOdnV9XXMiOV5lYXE2byFrTEUoPGQucTNhKGszYVdRbC54RSo9I1k3Tzox''@;'; put 'put ''VUNxUGRybFRQcC4/Wk4kXz4jT0ldIWB3PUVMWV87LjpxaFJTfSVqLl0sV0MpczpucmRqPHAhS3wrUTcuYDtuXUpCdSxVI2kjbyx4PCRYXkg2dVBNJHFYM34hbU99b05kSmZUVjZYQnosNSFDTio6YW1gcSx7VUtIRE0jfFBdbipHdmllJF0ufGomTyNecHtdSzU2KHNITXh5dnQkRjFvYGomUitm''@;'; put 'put ''M35DSjNpM3AyUCl2QlBmLHV4VTZTQFR+UzAqZjg9TDF+OTdReW1gU1EhQnheKWUhcSQzQDs6R0trMFpVcm05KSVRLzsuT0wxcEc7eWUxa3kySCw7U0VPSktUK3xGOjVGbWEpZSpaRiJkc1loWiFvOFBORGtQSyQ0RE0xXSRpJkA8OGRxQnMlP1Z0VGlmOj9HJWdmR29IUX15YmBNJWlKWi4hQDA2''@;'; put 'put ''T3NEY3A5NkxnTkgvPHt6c0wpIStWO1peL0Y5QWVIUTVmcGB6S3RTNyF1UzdxOmFabz9keyZkOXxCZUNMdXBMTjwuPGQvfC5IUXo/aFdaXSU2bUd1WDdGNzhpJmBbeTw2T0JkN2QhVVhOc0c5PmpzNykwJGwscyUuSzNwSnozZE06ZyxpPyxERkw2TlA3KC59bnB1UmEyK3p8eE8wU1FTaUNVZHVx''@;'; put 'put ''YHpvRDxISG0pTTdzRTg9fDJqWCFrZ1lFWzRnJXU1O1d5M246IXMzdk9oc05wZ1huT3djSks4PSN1ST5ZKXIvejdZalBJJllTWUgoal5oPzlQI286KEBMJi5gODMkU21vJmpkJUVnYzs0bSsmJGRKWyJfMktTakhGSDVUdkJ+bjZrYFJLQ0J1WnRRZVFjZFswMFZpSmZAanNFb0NZdElHJDR4TS4k''@;'; put 'put ''azZrMGBXdG4qLHk6WmtlYlsuN3BJJWIlQ2x7ayhrXXp6Tm9lcHR+V31pQyoreFU0a291U2VKSEtEU0RWaUgrNVFgc1EoVnFhYXYibjR2b0k7P180NXJFeGhBbXkpe1hoTHNNWEp2W1l6VFA0MDZqeXsmbUgrcHVjQ04xIShEeVAraSJlOCtdQ0tpYUYmX08raDtSdXVGfkY0S2xNKjI9alAlZDEm''@;'; put 'put ''O05MI2d6WyN0RkwzWFcuZTU5bVJYcW8vfV4qVEApYEN6I0N0eShiMnU3W0RNPVgoZ3JYLjQoNHtWYylqWGdWel5Vd0doTDxLTHdeVXdtJTlPVlNHb00xO0tfcFJnOWp2c2BaUFg9fEB+dFt1UkUvLF4jTT1sOy80S0JaXltYVDJMKmdZRUtMXyxhWyMhXy8/KSZCOWsyfEJ3KFtZJGlqXSwoZS4q''@;'; put 'put ''fnFVMkFXWjNVYC9JT2lzM2Qrdi4mPXcxKkM1Si95QFlOejVtUFhtVUBrTjFOW25HS0xqcVcwODJsciZiN1Y2NlkrY28qTShfQzlVJWh7Qz9BRFZzO3pYRzQ9Tm99S3o/Z0cwfGwmT11IRE59eC5zXz8kISldRiZ4MWE3VFBAbSwmPT8uanU4b3F+Il96fC8vZ1RKaX0/Pi9ta0Y7ViooeXUrJHx2''@;'; put 'put ''KyNuIk1nQl9MYEc4NCM+flpuYEJHQl88SWsmVVNxPzlKeVZLTHUkfk0zTVZTcT81NnFrXSlPaiNoXyEmJVJEI3NbbywoLGp8WSwpYFo6Sm14WG5TMiorIWdebkp7byN9em15a2llNmxiLnF0IyhaTih8MiladkkqK09qJSNXTDFSPzwkRmNoKWdjVXJWPTNPeGpvJGw0e1JoS1dAPHxfUFdATGQ8''@;'; put 'put ''fF8zZVJVelJWYUU2NEYuRnhDNzY2R3JaXV5XOUE6dDYxYWZLcUk/VVohK1FUSEcxb04lQGRqR2ErbSFoUmBeeG0kZTZeeDg7MV5TdnNtK1o2JUs2ayU2K3AmQn0kLHE1PzY/bH0qLk5JelhaYkkhWnN3UGwmYi87dmtzeE45SnsqNUFzKktwc3BrViV8S2Y6enhJZ3A0c21KR0pYV1c5bCptaitG''@;'; put 'put ''NDZhJXk2aT9HRWQhcThbKEleOzV3Oz13KCNnK2d4V2hDPFVrNWRmTEpRZixVZ2d4M21fY19WLGNwUCJrdTtgUUJdNj4wY0xMcDs5KGB1QGRBdCYrd2AxPHQrNytZYEBqSERAI2NpOXFibFsjY1ZVRU9bU15SXS5VZ3dzIzFsUyVkPnJdcjlkOEZCZWw4UVtrSlRlZ24sM1FHYX1KRlVwTipKNlR1''@;'; put 'put ''SCpzJHE2MWBLK0Y9aUouZWo4b2t6cjZAaClqWSEwWmEjQDNhazgoanU6c2tRTSp9PyVST3hqVio1XUJMK1JwdzA1K31bO1B9LjhRcU95KVtNbWZXJDc/b0gkQlY1X0NxcixCVStuN08+eSpDOzcqbXd6YSFpbHI4Jk9lXmVgKDtXd11JbTlBNVRsUEViMGVTNkdgQ1EqfG5wQC5zXSZkKnZYeUEy''@;'; put 'put ''TTtROFNCNEhNKjRaQTx5UjFWbVE+KCQ8MCxDKnhDandxKHFuLENeVVhAP2dVT2dgTy5CUmVVPWQhJVU0a0MrN21AfFpSflgpNU9uIntkNkNnbjYlZE9iS19lbW43WFhwZjRJTkZidVc8JmJyKEQxPX45KXN2KUBKWzQjRl43U1Q0OlJlLnA3KmRZZ35POl5SWlhuVTI8M0NJTHNna1FePz1xamI1''@;'; put 'put ''MnRuZUVXT3MuWlt+PjgibEAyPGB4Z2NoLnJqYksoXVBYUT8pQWB7ODRyRz9AeVtiPUAwWFdNdnVYLC9JfFhrK3NoMTJ5OW8yKWpzLCwyU09pXXokZGcsdnhTLjgmZk9SclpyLmoxel1AY201NC5SZ0tuZU4/Nz53fFU6KUk+LGUidExDUmc8YDRfZD13WDhZSXJWcGoyVVBwa15eNnM6cTJ1NkZn''@;'; put 'put ''RlROYzwrPGk+I2NVeFdzOjZeYlcoMUErJGA9enk/NVRzIVMqTUYzNCVyZzNCRnsqVj4pbW5GRSxbWi5WUUBLOi9+IS8kZDE9VkxqVStsXjVnY21jLmwrJW4yTEBYcn16fClLJEtBc3dZWDFXVmhsJEtwaCUjOjVGYlhzdnI7ekwyRmJ0dygucGt7TTFgZlZTVysla3UzLC5LRCVfeWhGNiw5TnZN''@;'; put 'put ''T297VjtsQldPelhHSWB+ITNRQTp8c3IyOU52TSlnMWFXVHY6QFpVdlVwXn5rZ2dXWShYMXFkRGtkIktrNjV7VkF9KHY0KlBvaC5rWnx9YCUsaitycH45WnB8L2xOelYrNEtick5qLkN5MW9rfF4qfExJQ25tP088UjphJHYvZGl4eVViVVM0PFtZZ2gveCt5UndRfmlnJWJIUGx5WHZhS29PUUJu''@;'; put 'put ''RFtlM3BNY2dgakFlW2ZkTCxxVFhuVk9wXy4+dkB3dXclXzIwVUZVOV5pYkIkZD1QNDhEYj9FT19KRHpqSWIsOlhEMDVHeEJaPTQ8M3M1Ujt2MDlWTDApYWlOUjw1M3U0Jlo1OGZjPkgwZHo1XUd4YkBMa05uJXZJfFZyYTZiQHBRTXhmQFFyWyViNS41RU04WmkrZTIkVlFRZFUsZkpoWCQjNHdE''@;'; put 'put ''Ji5tMHMzTlN7aX1vVjdWO01HUCE3Yz9fTytKQHcrKXB8VSxeNUNWc1BuJTx8ak48WSpTPExpPj8lSDIuUTNSKzBvenwjLEI8cFJRVSlRR3dHTT13WUkrJigpL3Q5bUtPe1c8YzJGel81PEMybXpnSyhkcSwkVmQzT29LKHUkWFM2ZmJxSGI1VGBDNVV9NXB8d2dBZSlgXXkrdjJtNS5mbUYqSWE/''@;'; put 'put ''dFVVb0YwZENuJVA/MG8sY2khQFZwJn5mOGVjMEs2Q0ZOK2tgKXdAOWdmfUpmRDQsVloyM0srR29OeVl5MnpQXyVJIXQ7Oz00Znk7TWprYDJDbWlrOXc3fWVPYW1EOi9CJElJVF8sJiRWTG9leX1eSW9kRmU9e1I8N202OCFJIklMR05NS3ksSyhxaVNUJXk7JmRnQzxEKFZuL2k3NkFUJnh5Si5w''@;'; put 'put ''IzA8ekQpU0BDYjw7UUk7SzMhU3hXQCttOSlOayVQLCRFajJTR2lxcVZka0wmIlFEJk12SSRBeFc0MTwzM2d+LkFbK3IvP0hvfTNaRSN8V2lqLHZAUTIiSSswQnErMmhNVGt2Miw/ej5MKV04OGVdJUVSTTs0Pko7Xk4qZ2p6cjpObzMhbmxWO1VLbEtvUjBJYUVPdmFsXX1iO2Z7MSNLVHRSV15x''@;'; put 'put ''am9MO0oqMThST21dbldtcT9naWx5JltPeCVDUlZ0YjQ+QjltVF9zciokOz5UN0tFZ3NaaFduenVWQHxyeWp8PlRqfCtyTmo3Kj4/SWBXeHt2bCtoK3YxOjVHLlIrZTpHLi8yK3RmKWxWdEE5dWZ1bUNSIUE7P1NAfXZ2YEtUMTA3InhiJXxxTWVPYSxZOGBdeW9QTDIwIyVTJk14blVaLFdPcml8''@;'; put 'put ''OE4rLHAmbmc4TnssLHFpfD16dVowMl0+YUd7X3wkKX10bzNgYzxLdSNLb0xtSS5GJixBY1VbMiFxTmtWd1c8UWxMbjFCNG0uJSk+SUdbSCFlfmkkZX5NXWtkcWs+KWYuMFYqS1BbOD1lWzZtZVRhK1BuQF4mRkdraGFBaz1DdXU1cDVfUVI8P3U8Z3U3fXA2Ung+alkrU1JXbjQlZGIuPXViMjtI''@;'; put 'put ''Ok1sQUZvSmBgLjxkJFIkO2dra2U1NjNheFtfcjxjb0BkOTtXaSl3NXlpUkAuVldSUk5ELnhrWkB9KCw0S3BobFY6ImlpPFFJYFpMMiNrNVJYaHJ0N2RkaG5NRmRWNUg1cFMhTWc2RC86MyFbVztpUT5uKz9mdG4hcWcwZUE2T0xVVyFHO3gzZC5VciFdSkI6ZE5fJk97LnokOl1CQFFTPVtCekhQ''@;'; put 'put ''Wk0+PX1PKD40VVchNjdxW1ByLCRoOSUzQEhTYyZ2WFE5S35gMHZUJkVWQkNSXSg/V1Q9W159ckhKOjp8KTN0QUZuVUJZblJgSXFEe090O2pyW1ZROy5NQ3J8TF1LTHtJNEZdSEh0IjwzQUh7T3hddntEfmUiPD5MN3s7ai5DKl5xTGxMbEwvUHNnV1pXbWtWYGRBdjcia3ZOVnpIcSlGZk1Qbioi''@;'; put 'put ''dndFQVkxSitPTC5+dERtUFtTajVpdlhQWHFXL3xjPGl6NCpeKVFqY0Y3Vl5uKW4oblhtUFhyWywzJUB9MTdWbSxAP3M8LzVbaXtaWm1VUzJnSSRXbVR7NDgueVlQUXcuUEkkV3R8alkvTm00L3A0fUZePCJiSFMjJiMvO0hSUWR3fTVsRWlnMSw2WWVWOjVhO0xNelBeWUpVTTAjPHVSMGBPTGsh''@;'; put 'put ''cVc8UTh7V2FGTzZUcnNZbjlWaVRWYVEyMjlsOCVoVH5CMXNhNFRiMGF4N3wyMXZ8aTBsYmBUNyJEXTJadj5nOG47YD1sdiJ4eGF7NUsxK3FMUjZAfVQ3TjJmX0Y8LzBkOlZRJDNDUi43KkhVb0l0KVUwXUhENU1Ab2EvN1Q7KEc8akM/eHMvfVErN3BTbDNYYkpJXkA7T3Z8QiY6QmpNODNjWDJ0''@;'; put 'put ''RF0vOjA3WTJSPHVidmo1SkFoTm9BNUY4V2EhT3VzdiVHej59NnVXJW0sYVlIR0dqQC90byskSTRSQ0FBQUFBQUEkQUZuPUk1fS99dEpyWmxOY1QrVEopQ0gpfWdzTlVjPEtqKjZyVXtGezBPTjw7JShee2kjW04wPzJLVD9tamIuNjo9WXFwcSlQMTMhTkdFdF86IV80XWFGPTNvSyFFKi8hXSNy''@;'; put 'put ''ZmE3Tz1zb1M7eTVZV3RRd3tkRUsrYztLc3UkUH18L0ZabGMycmYuUExab3dDNVUycT1dfmVHQDhtR3RpOCMkd1kjMXI+bDBaRSVjIUd8KiU/W2E1LEdya3FRLmQ+MFNvVD06d2ssSVVjbHRtOWdMVzddZy9SU182SlRVXU9QazNQUjRWcGQ/ZFIiUSljOEImVnI6bilAd2lpWj09Tm9qcGNOIjos''@;'; put 'put ''Nks9QSxHSjxvaVZFYT9RQyVROHIwYk4/JiVsaUVwMHtoNm5fWEsldW5tS3xuRjpPam13T3JqYGY4cmJiPSRHPihZLitfWmAudjRXVVhvV1luX3o8VEQ/P2MhO1V6WUR+Z3IuKTBScCpOeDdQQHcmUWxKRF1dYFNhbkttLERadG9tYStbb3cjciJ1cSxjLlU+QXt6T3BQRUdzJCFFLFYvKCsxSXY8''@;'; put 'put ''WEM2dVluTFthIy8/W2NGVHpnIVIlbGBjZ0hGcm0lSlNjYT5gVTRtLH1oU3thfXFtb21SfT5VcnJKQnMqLGhATjZYZC8vYWZ5NkxIUVpUOTlHa157RCF0cHgwOn5Nekpidi4wWFh6OjpLQW19ODUqLzNtZnV4Z0ltSFYuY15udjR6T2wqTGYpNDUjY1BYWTNlXV98PDQ8RlhYa0MwVyNmaC9YSkl6''@;'; put 'put ''czZnXTRdNzY1aUx8JFtBbmk8LH1sTlFrIXBYQX1BJCk7a2o6S2A1JVNZc3sxM3V2MjZxJFBlfTBFJDpLRktqPFFTNGxpMktiISlSc0hBVCEvWW95JCw6PUkkUlNoVHQpQ0IoQmR6KzwqN2tEbl0yQylVYkQuWkRdVmh9InU4NUZFe05dUmVmbVFaXXMmOWwkO3tKKGsrRkoyJXcjeUB6LE8rQjJ0''@;'; put 'put ''fkhicnUqR3Qkej1TMzY9XjZHXm1QXVY/fVUqQzp5cm5lb3Ehb0pldkx9VU13NT12JStXXVk4TmtpdTQmc3A4eVRJOWtiN1NAbClrR1BrV0RwW2QzVF9UQTArVWssOy9zNTdxZFBAfCNQTD5PODRpZjRyRF43ZiUue05tbl56e05zZypCKnQvfnxuQXE7I1dIdEgwS1VhdGxCT1E4aUFHMWR5KiJf''@;'; put 'put ''YkUufWs3QjsyP3ltPGEvZUoxJWx1QG1EVSEpJDxYLiw6Lzh0RU9ZfFsrWVpmYi9jeCFeVzpWV1cjQnp6JixuQUY9eGt8b14pVzNPWk9lLj5MN2oyXn0kbX5DTWk/emJzbXNKZWttdTVdLiguPkxTOWNHJDk0dlp+L2pDWVB0NlQ0TzFYdH1dPkVFX3k1OCYzbEByPCNTM28zTnkzODNFTzc4W3N7''@;'; put 'put ''b1UpRndZTTFWe3QlQkM0LCtSUXBiSnl3PEQmYj5OLCU3JGE4NTpAT308KTtxMmglWz1oe3AiQV5IUWFOd0N8c1Z0UWlEa107KiFgdEd3KXQ9SmkhMDN3KDI9bWNFb3tOWilzblt3I20zRzdlV0NnVVkjQik/djtCVTwwUzdkVmAydz4+IUV2SGNNeDlSNDM1VS56X2kmKGB4Sm44OEtDQDpbbTBp''@;'; put 'put ''OzIqMWAmQiVSRTRJP2FJZHJhSkRKfipXK1VbX0RoVzYmP2ZPP2gpTCxDIWlZXlg3bkNtK2o4ZWBkKS50bXJ5U1oxMHo4dCNtdTYzQ084RXs6eks5bn5sU1NmJk5ecDNxdXNecW5uZzlMRylaYXtHRnI3KlR6UHU9cGZXWFFENFZZX2Z+VSx+R3pRNm8jN1pgI2A2bCp3c3hmXUJNXmFQLkVuX01Z''@;'; put 'put ''YUNaTSN6KndEcSUwcFFUelY3IUMmIlFId31GOjBDa006QGhLIzgicVs5eDd4X0tIeGtecytbbz4xZjJWaV8uUjx9RjFXcnxtP2IzLHFRUTtbTFlwe1A+PEsqXSVGTWhwUVomP1lAOTE0PylwZERKKSZfXl4vRWEyc11Lfj1+ZXxwI1VlLG5aS2ljciRzP2xqUXhVWjQ0PW9KViRmcHthL3tLeUUw''@;'; put 'put ''XT9YW0lIXkx6QHpjZlZfUVJVZmlOTUcxU3xzcj5AdTBeJE84KTxUZ0E2MkJ9WFJzRWNNSTJDYjFib1h6Xy45QHlSNyp9JChzcylYRi98Mj15Qz9xYG15aG5uVyguaDt7XWF9ZiNFYU4vZl91eEh6Y1RyViRANUloUVdHWEYqLklDLGR9Y3FJYSM2IVRLRmdpb3hZO19bcz1iKCx3OHRsWDFUTCVz''@;'; put 'put ''MTUuKStGb2lEPkBZa0cwflc4OnZuMjVWQGpMNV41VkUrLD0+eWRdL18jTWVjZFVlKl8zYVdRdHcqSmh8IVl4eUV4WXZDQHBkR0kkJEluJjVSMGUsVz16djxvLyReQ3tVUWBAcUZYUHc+RFh2ZmdlSjQ1IzZ1TTNsKlhQVUFzOVh0VDp2dlVgaVRdd3ZuemxbMkM+X2A6R1EyeXx2X0BSfXlQbDVB''@;'; put 'put ''NVd7Wkt3WTh1bFJeMTJxNWJQbSFJVGBDam1NJXRDSy5Ebztwdk10UURzS25iJihBdWNRb3IqMCFENVtkJUdDVXlzNSQkeE1MPSliWTl7ZlIzbCtRMDlXWT5sSzQkMkBlazdZM1dkPU9JcjRvNW46SDBQaF9fIy5TdjZvWWM7UkxuKU5FT3o/LmEsSyI3Vk85TGVKIlowYn5VJHMuQnwsWWE8XnJX''@;'; put 'put ''NSNyeD5NSEFnUS5ldWA6O0d1dCtrYiF7XjI8QywrN0ZqN1pNQVFbN0deJF97M2EhM3RdPUVRVkU2WW8jdVV9a2tSY3FQSXBlJTlTMWMzdkFGOnE7c0pGJjlUX0VFJWc+SyNBQCJTVisldV4ybWMoTkhwSURjXjNwQCUmNTUwdmwjVCF8IUk6XyV1JlVAeiJRV2FnQlVUWCJDJm9NaFJuUWtvaGNs''@;'; put 'put ''Skp6Yj1fQ043U3E5d090ZXRQWGtDTUYjTyFdIm5dIXxHKkghZiRxaGhMbHQvQyw7VXtZMHttd3IwUGBTMjY5W2lSYmxWSHBObDRXWnFmKnM7JHo5PG12ZWZBeFt7Ry5tVHtKJVNBcFAxPHxgcnp6OWMreGZfayg3UH14aGJRPE9sMU00R3pbYlFecCgvNUBtY1s1QHdbM1tScDsrSl9kMkV4amF1''@;'; put 'put ''ej8wT01bd3shO3xAVCR6W3BOM3YqUEJYXSNzLkUmfFtuUStAMndseWEkdEJwIX1iPVNKZEFhUkM7ZSpCRzNTSldoUEMyO0BDQ3kqMSt2Nj54KkJtOkhMeyljZix7TipqJFZjTlNzWjowc1FYbyZLPW5jI0Erc2clYW5XVWhteWxXa29QZUBlfD0sPmtMSGAzJjhZa1U2W0g3fV9DaHJQNVZuJkl9''@;'; put 'put ''Ol13JmE5MVMrTjBSeitQcCpFWS8wNzZXX0Y0Oi4+NT0yaWBeOEdtcWh1WFMmMU1ueCtXeSljXmQpNkxmdyEjQmBQdj5WOCs4YVA3byU4YWxjTCldM0tCU0BsPEd7YXhaU251TlBCbElyLnhVWyh2bzllcFE4XUNhdSNVP19FVC8+UWwzZnQ5c05ZenQ3YTFWZ0xXSV5TKXJ9bi4kSU52cz98aGo/''@;'; put 'put ''aD5ieD9hQ2BNYlovQ34vLzY3Y1R4d0BEdTBFRE0heUAiIjdnYFFeLmk1ZWJnVW15cjQjTjdBN2ZtOXEzPnhbVTdnemUiLF5XN25mSVZUU2o9UihtZ2N8NG5xSCIlWGZTUTAjNSlSQ3xvTztpd0ZhfFpvezg+Izw3fXtwJFF5NEc4PVQhVj9xblZMIS9Jalt+Nyk+UjdDUlhXc0oqVDddTE1bWEoy''@;'; put 'put ''QH1KNiZIUipMfHRQRk4iKUkmQmMySihURWlve211OUxCSiV4OVhnWjM8S2BVUEYzXkEpRHhQfktiLCRMcGIxLjE/SzhtbHpiQnNoYFFkcDJ6LDN9ezxFMXBvVEloIzY2SixFU1Mqd31wSkJnZkRlcFBmc2VdW0M+XnQ/Pn4hIzp3O0hmXnpOWCYmYVFjcyUsaXF6VSsoU3FTK05xOyk+cW87XkZ9''@;'; put 'put ''Tz5Ab3x7WDYjKCxKKFs+UUdxYU5EKjdAMlgmbjtoI1I3Z0ZpdU10OE5jeF15R2dxYlFzP0UyQnk+IWMlfTlXX1RfKSxWTG9tQyxqKT13V15DUjc9S0UjIighPUMzeGEvZHcya1FdKHRbMnw5QVBbKkc8QWpmaSg7PF5vKXkyKmhJJl99THJtNiJtdyk7bVtAZFM9U29ASUQ4TiUkPXZaWFBZKH1S''@;'; put 'put ''RV9hOEkwdn1sVWx3WzZoM0NgMHQpSXo4aCZRZXN1b28+I2tbI1RLUiZAe3ZMMkFtU21ndzZ3dldQN2lEZyEiUzFuY29ZW2ozJHUoc3dxKVVnWVc1fmtINzl6eWpkR0pxVG5kfndTMSojcUhgNDs4JkZgN1tOUTdQa3pCN0g2fHo3fj90YnlQSTQmU1ghfWJ5cyhhQ0FFWWEkUDMqUiJ4czRQSGhQ''@;'; put 'put ''dmJfPlZ0MTB6bGRrYjU3KyM1MEJBY1RlTz9WdF5qX1gvUDVFPWxBK2kySmQ9JTEpPU8zQ1JVNGJYP3FncltYell2fGhQQUxYZ0ErKS5NJkM4VF1gSng7aUk8VCJSWjdgVjVwcXJkeT5rTkFvfGEiMz1tMFFSNTNNMX1kTXd6Szx1Xk8kUVgjRVIzWS5LQjlxZDprYF9YQE4oWTE9XXE3OTJbWXMm''@;'; put 'put ''M0s4ZjBmfWQ+aE1KOiN7aTIpPH0vOCI9MCg3QVNrcXU5cjU3W3IzRCgjWTYyYVV5UCFwbmVBaE9yWUlIMHM7RVQyW3NUMX0iVFhrYHdjWX4mRjwhSkpLb3AoRXh+SkpzIzFyTzF6XnVSO08jPUcsTHg2S0k5eGJqUn06IUNAdX1TL1VCcFtwTF1LMjA1WDZ1S0RbK3VHU1ckVi4+YylMUUczL25a''@;'; put 'put ''N2E0TF5sMGtiU3QoRWx+QHpSS292a2Z6ODkrRUs7YyR7QjplUUtdW3dIQ0k9eV1ncytkZ3B9ekY4TTZhQ2ReZEZ6d0FPW2txKkUufU5PcFFxJDJ0XzNCOFhHUFdiSkdTT1NHcFlSZHMuKUdCZFJtODVdaCptclcrNUd4aHdQbWNAUlM1WGZ3S107WjRjWFVNKFFiSj1sPFtrTSxCKj1sJnxGdFhw''@;'; put 'put ''aixyeD5TXyFmLzczd0VaaU5odjNyNjwoT350TG08NlZ8R3F8YjBDOXBFIVVDb3Y1Pyk+cClOMDgxRzQmRXdVbFtiUjJveVd2PGxrIisqQlR7Um8pTnpHN1VoY0kyfVFSeVlKZ3B1WEJee3Q/QmpUUDNAIys7JUdeUWpVJjh0an1WOX5NT2psNyh0NHBFKjlgcyJxcDk2YnxxVSppW0d6LnUicmVM''@;'; put 'put ''U3p6dE9QdC5zY05LWmJ8SXdSVjFLTGBtNX1xO3NLUkRGMlgxYWtTc2xFWDBzUD51TEBIPSFWWFhBZEY3aXZoKFZfI1NmO1VpJX56dlEieFZQSmVLdiViLjJYamljfEwyJldsNmpLPjAvSHNvWV4hQ3RhZ2hoKUhKXTVtIjBJfDx7JmkpdWwlQiZrey9kJT1+M3ZxK1JJcUFvSCk7XWBdRmZVTlp+''@;'; put 'put ''dC5sPkQ/QjlaS1tUT0IiJEw5OF9+IWYhJFEqM21lK1tmPEdFbUQwanw0K3VbYUtoS3s5bmZ6MHt+SGBjU318WSg1UCE0fUBRNUtZb29sLFIzTWZqSmZ6cWwySV5aMyh9NmZGQU5xeX0+KFFBYTd6eHtwWjY2I1FPaGV9b2M+L1ReZkBnP2kqdWQzR28wXmRJTixRbGdXXkJvNWlUWlhIM1lnN0FF''@;'; put 'put ''LyQ3fWxbdkcrNWRFaGpqRCFHNCxqaWtFUG1mRihnOEAiRiphbkh0QXtXRVVsUm16JVdfbj9DLi5FTkoqKlByIj05V0MzTEszbVkxLCZ4UVE7akUkbE1DcXcrNFhRc21MSW0qJnohWkZoPDU1YlI0RVBqZDpfUjsqbHtldWIvTk41aUBXW0xAfXRXOzMyVSl2dX16NFEqXSx2R3ckdVc3WDFwTHJ1''@;'; put 'put ''R0glQEZhRWt5amR1U0BFcmA5WlVLdU5aJmxjMl86RXF9Tndhaks+R0Q8YVNjKGM4eXFFN3tCJD1sZlBhNWR4NXk7YVQxU0YyeSx0IVVkKjdjOm53ckJDZUlaYXliLCZXKX1pYGo8MlhkSHAkMS5KaVcrWTkrKFF2clBqcVBWKiRhYEA3UG84KSp2cCpeZGZnSEgsVGQwWj04MUl+JSpWWlpJPDgq''@;'; put 'put ''PjJOVlZ6aVt8SENhcENVYDlCWC9HVGc7Kld6QVo6PG1qaixURzVuTU09PT4lLEBHdmokKzEpJWxncztHcGMrO0wpJT1FaSs+ZG09aDhEV0d+WF4qLCo/N1dIY3h8bl1GTUxKYio3MTssNFVQez1CXT07YitdbGAhVVh0Ky8yZHQuOElITmFbMUEyZi5EMmZjejo6YDF3YG1ldjssZl9hWzBXJWB5''@;'; put 'put ''PnQ5Oikienk1dXRmIUtwUW8xL0kyQUYrJWlsLz0hYk42akVDLGA3VXxhNmcyLDV8TDs+TiYwez17RH4kbW54JHFJX1pUITFhREpiR1YxfGdUPmp9UlZhdHFqaSpJSFFHVD9oUHRQXS4vSmgpI2lyVFFyO1ZxJEJxeCtgc2Ykbk80eDlPPW9lXWVgaSJDbl54OXZ3TnZBSTxXSW1LLDJuKmVZajpe''@;'; put 'put ''bnsxbS9GXUVnX1NWVUtWRyNvbzl5SGBwaGFedGUqSlgzL3RPMTo1YT5TZVhASk5OU2BIPF5HPmJoXSkvQ1YvPDZuV0tLPVZ4NWw9RyE4PlQwbHJtOXVCeV5pZyNwQno6WlQyQF9OYmRKR0JtfXokMHBKMUlzcU15KDsmQG9mZ1FGWklZek0walJ8a3BpfTs4UXRFZCRSUXsiSGAxMmF+d3ZFIytd''@;'; put 'put ''QlNEYU0+cEwwZSJeRlY3bGtTYDZCaUdpPDkmZ3tkZlJpUGdGJipdXnUxRzI2YDg9dFgscVFGKEkkdlt5e0FnSnpqczxSYjFmV2ljc2AlTVE9ZXQ4bj4ueUIpfVFTdTxMZVExVnI9WUl8e1k5d280KDpOSG8+fTFAYTZbImx1WjUzIWkyVT4hdVdkUzsrdy5EeExDIWx3V0E8Nk5aOm5LenlINTls''@;'; put 'put ''MThGLHtpUWR0JTpsXWFMVyE2aHIsbT4ma3BuVVNlN3oyY0RxSm9KR04xaGU2NkV0eFEuVmQuNk1id0wkfnd8fWsrNXNyLExIPTY7Wl1yUWgzKV4xUjVGTm1NMCFTfkskMW58Q1c8WDE6eXBMJDBddnljdCl5PjlKYjhYJlhqLlNDPGVrNjk9LnpRNnRMYW08Lmo3fkU/MSY5PGVdW18yNyVDNnxT''@;'; put 'put ''TD9iIW5PJSxsbHdmIy9JPCEhWHZ8Y2E1Mip5ayVHeHk0ZiEiMCUjW2ZGa21ibTRFJV94JDhsKGNQbyNQKEh4NyY7biJoVEtUQFFlKiZHNk1NVy8mYEVQRzZDNSwqXz4/O2hPa1AlWmoqNmw8bkNrPiQsPGQpbzVsQH5SZitqOyNAdCZ6YkZHQiYqdlZEM28+cVYlZzI7JUt4P0ZeKjZpQ3RUXkdG''@;'; put 'put ''Pik9TW5DQ3pqTUUjbm45Wi4iMVJqVkk9VGxPNltWd2dZTVs6QjcpPSRXPWpWJCk1M2xIXyI5ZTFsPHAuPThbfHo7UHpHVjBVWnw7bVhWTVpbUVN9WzRuUT9kdnRJR3cwN1dNX3ZrRz5LbER5a0pZOyhKI3k9Y11YIyx9eFdjMWpFXzk2eWphMXBCJXNfOkVgbnlxfXIpOHphdkZHKS5SeVFWTSpP''@;'; put 'put ''SUxmREN0akdnRnlIKUFCWWNtKVlRb0d4SmEqREArKmh6S3kwNixmd3Y0RTxTMVBzOkZ0dFJwOk9gKndJTERIX19CYFQrIzF0JWpQcXkxJn0seTxgJXA0Mm1HdEAqLDhPY0pKQnZzMnIlOSowbS94YWtBRzk1QWFvWSFOTWA2T31DenUpR0ZrMkpCIls8JF9MJVZIbVhoK3NyV3g4ISpRPmVwY1Y3''@;'; put 'put ''dEBgIVJ3UiFsVV5XXyY5TDtQLH5ANiQzcUU0P2k6cmksXShMY2hOeWJAOm8hQldKblBnckAiWGV4RmA9XjEsUW5GeyE8V198ViRCVXJmSm84ZEIyLnhkKilhW0dQQ3tWK0xBUFZWN3VWTm5GaCFtI21qQTtDa3dCfUc8RDNnOVc5TzhIO2Bhe1VTIjNrcnU4b3NzK15WSHMpOkd3SU1+cUNjKGNv''@;'; put 'put ''e0c+IUUhMk1LPVBMWC91SDAuVV5CdUdMQGZtZUFmQi8mLm43UTsyeDg5QFMydlo/Y0NLdXN8MD5oMnF8Vl1OTUc/JV9XLGF5SDR2cHQ8Z0Q4Mn1GVjxTbWZyMXMjP1ldJkE8I01GTWxeeFdtXVhhVkpMSGA5aHgrTXBJS3Z9RUZ1O2h7Lip7QTowZFFrXSZuN0c1JkBGWzpLNTNyKSsxL1M6VnFs''@;'; put 'put ''bWA2ZW9pR0R1QipfMW5xZlA+O1RvYkZKMF1SdVVxJD9UPndbXXxVc2gzenBoPCVZeSNsSkQ2dD1vYStucDM/WkV0Zi9bTTFMVEZVQHpqc2pSaWt5JXAlQnI5Kl5aLj1SPjJbKnhufXdaVWw0Z19XTnsrKTYzU21VZm1EcEFZTjVXSCxXY3ltVUZKV21XMWlFeEZjOiNrK0Y7ekJEV0x3WFY5WX1D''@;'; put 'put ''ZihwZn5XfmZ0KE4pSEY5VjowXk56R0ArVkxXM24iKEZ+XlYrXnx5SDRURkVJRWNUPnZ2W0c6MEpqTzddcjdMbj8vZEdmPm1yelFMYlo4LCxhRG86UFpiX05TZCU5YWdHOSEjNkV+JV1TXVgjaVg3RH1VZDBgPVNGO18+KW1FLDh8bjthKXkweyQ/UlpHWjNMVyRnWThVMF5JO1ZCdHEpNE4wemk4''@;'; put 'put ''OV9EUyo4VSVKXnh7MCt5Wmk+SGk+QSwke0AoVykzZyRnbXs6JSlxSEYoNzJ9RTo7UW8+eSNTcilGdTJzU2E5UHNSLEBrK3I0VVI4Zk44TklnbE87I18jPiF3Vloxd2ZSeUAzeFt5dmo5fEt8IXQmWGhwci8lJE84MFl1LihmO2xEI0s7YTJqRXZAJG80WFlYbENSWFNMUkpeTE4iNFF4bi8mbHo6''@;'; put 'put ''dTBCYXhxY149XSxGTCVqdSNOY0csXnZnOmAuWU1FJk1rInsjZ317RiQialslNUt2fGRvcT8md2ouTVhFQyFEaSlKMU4mJlF8c3c+WGxQYE1UND5DZmxMNGxlTWFHLDdiJiRlPz9XPUUoXkk8REBpTFBMSGhRW1t5UTJ5cH0+Pkc5VWhea29oSThtRjxTSlglWnRSVkpYc2p7X1UpXl1GMS4/MXZN''@;'; put 'put ''ek5DPENMTl9RMjZ2JWR+b3lrK0xbZjU3KjZOTlJJWzhzOV8pRmg5IlJGTD1NISo9fFhPdShTb1ojYGhHXTVGa1YpcEBkeHNBKCN9bmU1JCEzW1Z+Sj5hQ1hZalkibXhTUCxBWHRKXyE6elB2akZoRzNlcURMMktKU25gZ3ksa1I6X35VLlRwOHxYakVQNEgrdFp5MXF3M3FnOW4jO1FtbXk/ZzJ2''@;'; put 'put ''bTx4N0IuYFhiKnE+QXltKEJ9PzFnXWh0YV5ELiQrUiNDYkRgWSZlOiRGW1BpdztZbUEsa15iY0gxSSR8b0h+Zkh7Mz1sel1aNzh+KDhnWWxyeklhK0p6bGZWfSVHY1ZzQ3dSIWVEKXtpOj07VzVxSmNXeFBiKXM5LithY3tvSFV+bFBMUF06ditzdHUsaEtUMDZDdnw0fX1ReCY7VDljMnt5VWlP''@;'; put 'put ''ZyEkVn5IdSwmSk0xe1k1aSRwSEUrXSgxa3E6fi5COWF7W15fcUV4PEEuajB7OT85eGN3a3IkcVVDYGF9R0IoOF5ya1lJIW55ZVJDeiRpOXI6WGBoejU4PCVeWCwuIy87LFEoRFJuS01rK3JJaHU9dz9MczZ+QWgrV3NPcHYhZDUuQyk8cUQkLE5mOWBeZ3xiZncyI3w1SSFjTXw2OWROLCwsP0Ru''@;'; put 'put ''P1RGcmdPQV83ZjNRXm4+elhRPixdRzY3Knw/b2VLfjYzZmdoKUxEVHxyZ2ZzL2hXPUIraCshcDFFLFBQVD5uQip1Li49L0AlKl5EVW87aFVWd2pEX1pWWGxfSzdeVTN9WDB2c3xfeHZ5JFRZZlcxWTpDOl9oOmh+K3ZIfXZKMyhjcUMiKCJuWVNQYGQuNys1XWBvNSlWTkZgRDY5XXpgfXw1cShP''@;'; put 'put ''MFZaOEpSUm9nSTtQPFNmLGIjQVFveGkySykvTDZNbj5ZXlMkN2AoYSNET2IuMUBpVE4mOmNXdHFrLkpvPWJqPipnTkpfJEBje09UUSYvPk0qYGs6STZtPCVyUE1LZk8vdH1XbXduQWZ2Sj5IY3MsJTFZQSZ8QmIydUZVLnVjWWo5eU1vMF42c0o5ZU1WU0x+bzcpQndiUig6SDNbJlhqVyIpWlt1''@;'; put 'put ''dT1bemJ8YktjTiUqNE44LFJybV9MJlAuR3dAMXk5SXVNPzN8RjUhKCYsR31QKSREd21rKFs9KGhBYjo2KTo4bGJ7OENLKkdaY28mRUZrNyxAc1VBYlhaRjZkMVd3UlNlfGJQOGBdfWBSWHFjZHxXc0Zbajl8WWA1eTFvaFl7VmV2RUozK1tQQVZ3eDk0QFBzTmRSPHsiTj8rfGE/RT5bdXpQWm1b''@;'; put 'put ''Xj1OPjVsLnkicF1semxSb348SFpeUUlYRjtrRXgkYlloSTZqbTxdaXtMO3g0OkZvPiZTNG9BIl45WlREXjU+V3BTczpuaDosQk42LjlJemxeOXI8YVtOW3MkJig3Z3xJIiYjJXZEfTlzMjJKImk7IU9bS1F1Y1N3UVVRIzU4SkIpY09zJCo5QUFSJXlKSFNjVjR2blgjM0ZIZGhCbjchZ2JKPCMs''@;'; put 'put ''KD8rSEkyPFN8KEJGRkxNezgvbCMkeHNwQntTQEl3I3hFZVoqQzJdPjJENlZfLEl+aVFDOi4qbGZKMUVePSUudiJoNzFwc1JSKEFAKDZrRHtBPkVXYW9XeDJaMiE0UDpaZjIjJnJ0PWVySFg4NEg1I3V+b2MxYkMmVjduUkteMGtOaV02JXddc0QzZyhrd3YpeFNrZUIyYW9Nb15AS3hTPEteZT84''@;'; put 'put ''Yz1+R3VucEVIdzZOK0ZYamtRNUxwQEtPPTJufmUuRSRhVFYhT2ZTM1oqVDZDWkJbe3NJYWIxQCNnbWM1JEh5S19GYG4lNnJhXiIvZmF9LHM+djAqIlYjditAM1NSPktDVDpXQHI1MVs1O0loW3JjMjcjWXhVLDQkRTBLaS9WWH0qbjVGaFFic0V2OyR9e3FoZUYvS0I6TD5OS2ZXcCtuVzdrIzk7''@;'; put 'put ''Z3xrQSI7YEYrb3BVWHkwSEVJWTNoY059LGU0cXQzNDh9PCNAMXJrPW0wN1R+S2RDYHFTUlA6QFolc2VvUFg9Six3cmolKFZ9LlhqW2t+ek5oQl0jR0U+IitKUTNVWjVSRWdldTFdMFZCQWs7IyNMNmJZdCw3eW1OO35rcWJ6Xlc7QWIzcClGb2oyNDcuRE1ObmhIRmVkZWAvRkBKIUNTXWJ+IWpK''@;'; put 'put ''dkhXMjpWd2FrITlzejg5QFBrOX4+MCkhRlFoWHx+ekNkfF5qdDV3dF9OTWE0KkZCRnljK1tUdSZmWW5+VU9CJlsySE40PyU+Q05QQWI/MnJHPk1hRTUxTW9fIiMvNXo2OXIzW2hFYmo/VVpWdDExU3EwazBpbX5OR0lMJH1ANnZNYXZoKytwakBDJn1XWSNqKVV1bz53eno8azkjcj0kMUU0b0wm''@;'; put 'put ''MWlMc2IyISx5YF9UVkwieyJOaEhfM3JPUHlNODFUSHUuRnMseWZOYEdnVT9EJTJJIztzUDxFbD40T0Y1STIvcHpANS85JGl7JnRzIVZUWFpzOF9fMmc8X1hjTDx7TVBWRmhCKFd5V186JHNIYTMwQ0pjTHROYlt6PkBgYV5CRG5fYytYTCNERHlsIjwhP0NheVl2RHdRfWAzZzl4M31FPkIrcjA2''@;'; put 'put ''TFJYLF1rYXhUbkdjOUYkI1hGczV2bWVuIV13Ri9hSiRXI1JiM0B7Rl9kOER1fXdXLGJXL0IleCNUKmtsKlEkVyVJfnh6WkdqXkNEdSk6L2wuUlt2Kih3ZFtLbldNW1AjKWR4WTsyMClTbFlCLj5DQCFfJFs0STQxQikjQGc2RiFVMXg/JSg0XzlpYHUocHkwPjI9ZEg4KUQxJHl7NjAwOiFQcDIo''@;'; put 'put ''K2ckI2Ara05ZOkV0bUM2Jl1weEZ1MltIaFNOVExMcyE8eE5ZWWpWbXhWMnFncyElQns9LmF8Mm5XYVA/QHUkOCtYWiFdVzZNPSMlN1ZRXXp1QGElOF1GcXMlYTY4akxTOXxmU0NhKHpvYiRmJl4ydFIqYntZUm9PQzZnQ342b3loMUBqNUFnInFZO1YrIkNYaFB6d3AkLns9NTlifStbcSN+VjVO''@;'; put 'put ''MEVsWixLVyJzPHVrMiV8YitSdnY3Zj5TN19iVnNyfixeZjpbYW50WHRKUyhgP1cwKXdKZFZFOzJzImI4RHdieipEUCsuVCVuZWouVldQMkovTCpaT28rV2M4S2d4c1M7bSVhQ253ST5MKF5dNEE4MGNWUlUofDlAdmM/N2UhfVkpbzVKRWo4UVtbdnxbJUNyaj5UMDxbKk1zdFNDdDxiNVNWK2du''@;'; put 'put ''PUVjKXxgbko0XjhkU211LC9KbmFNNnxwbTssRmUiT2gjK283TkZbdUNrUDF4ITo2dDI1NjkvfEh4dlJ+aUUkXjZAcSgrenVCezpfd0lvdmFYW0lbPWUjfFNSMGM8dl4zdjQ5O3J8OjRDSkMqZDU+Zl93T2ZjU3dRQVZVImNSbk94eHh1fCYkdjtNSDA1bGVjeXBnJE9HUEYzZEQ9aXljL05YVktt''@;'; put 'put ''S09+Ljt2LEkzRTooMS9+OnZCcjlteH1xKzx3ZiJkRSJJYmFxbk5BeztKRVU0Ly9QQFdIMFQhNFFEbndhT0BKZyk5RjA6L2xJO2VvKmpwSns1bnUiNmRYQjpGR1o4T2coMkU8Qm89eVciWkN3ZjpBe08jVFMiVnFnL1UobXhWeXx1KmdafiJ+OzlPLjpxWSMyYTgmOEx8SGNMcmZZblJHdlNZZDZ3''@;'; put 'put ''e3hBUVh0T2Q8Znh8RURyPFQ1RClrL19GTUVqKS59Mk0xQW9wYnFqTmNqSV9OIyltU0hlSHBqSHlGNjtfKE1DcFZ6OHgkMERGbXZ1JGpVTkx7anA/PX5COzQhLCg9IlhuQF0zR11oUyRxIjIyNntoI2w0N3hJJS5HQiZ6NTRMSF8kelNGQ19lSDMvM2I4LkA5Ol5XTjdsczt7IlQ8dlJzbzo/e3VE''@;'; put 'put ''QUhgRk18bTF4KTBTOSprIXxEUTJjZ1hhdTVXdERDWWI3XjlpOzVbSiZ8eWwrR1cvYWBIUmE8fltpQ0M9W0RRT3w1cjF1ZSxXb24yL31AMlgrciE8dygmMWV9Wk9XTTZRKzkrfiYxWXY+TTQ6Vi5xW1Q6bn5DKmJTSzAsXUdAKjJAZ2oqVExARXMsfUBqe00scWJ6VT5ybk5Ad1NSXXpRfCRLfCJg''@;'; put 'put ''cT50N3N0RmJgVFMveVU1UiQuIl9BaFdLVzV3Yk5eRUorQiNWMHozLzVtJUFabEUua05fOlBsR2JZbix7e0JfTTkpNF1TLF59TEQwYSowaT05JFhfQjkqSUNZN1h0OzxFX25laD9UWkskImwwfXl9NEZMaCRpWEB3IURte2B9MztZcTclIytrcUZOUEIwXnk9aV5Ha3FITWk6T2I+ZWpGRzVoSGtT''@;'; put 'put ''OTFyQWRxbTpud01pYEY/KjtfSTVLMEtFTH5FTSglYkU+SjksKCtHQnNTYmlZcSE4OGZCUkojeVU0e3EvKXFMPCJRWy5Da2NxJFJ9UjN7cVZobiRQM0hwRkRjM3drVkJCTlVRN3pqdkI1UUh8WFl6Mi9aJSthYVllfC88WE5NZ2kwMSo7TTxTe2xAO3FmKyR1Ono8U0V5Yndme0JMZUlSM35KV05E''@;'; put 'put ''MnthT0cvRHtuSXF0VyN6dH1EUH5aP2lWc2xScnw1Si5EfndfaCRZfWM7Xzxva2xefFt+YURbcFA5UTRdbiRgcD8xQSozZlh4KTUyWXozUz4pLHx+VF4sfmBMS3hyRCFmUCZJK0V3KV0hTUokYnVVSEhUT0J+MGckYlc7TypZY1E2KW1RInJGdlBKYW14O1VHcGFHanxHS10vX2dwKnJnbEs/PXFZ''@;'; put 'put ''bGdmWVFIKSkwLylhYHtbWFozcmNUOzFmMXZFfntGcHx1dFteImNBWGFTTG10Xl1lb0hIdTtDZm5Ed0U2S3BTb1lbSyFkdDZpRWBhSSlDYTV7OGBhQ354WCRSdWtofDdgM1MpazgkK19uZktuX3liSXE3KCpNP3xoTnguNXsrX3NYLkx2QythOEprdElxQm1IMDhaWDk1Nnc6WWB0eV1dc0gpJkxG''@;'; put 'put ''bjZKTlUoRSNbaWJaVm0rOz55MTtOTkpJei53KEB2OFguXzdBXSNJYj1aeW9HYHFfWUxMVUt6Xyh7XnJsVz1KbVlfXShhKF9iUVhIfkc5P0NoSGBlV3tpa0xnXUBjNU1XdWwvYyQ4LDI7YD15Z0I2NGZ4Qit+fD4+S0hTPlo/OkZmPz1SX0V6b3Z9PEMhel88Z0wxNi97IiZlaFE/VGJMci5WaW5Y''@;'; put 'put ''SGZWNWN1bzFWNTthPHNbej9EV0pmZGg/R3s5XTFUfT9bIVF3YFlMOldAVW1OTUQkdE5+MV0yJiVObWMlbnhSKyNWMk1eWWw5cCwpSXpQRXpiPiNhdDc+TFVQWVMsKGFDVWFwTmwuYHk7ZndEL1kzRUJZakhGNDw3ZWFPazpfVSh7OW0oUkh1fUE4JWxiMkpyfX5ZODZTTmhreDFJfG1uUGNETVg8''@;'; put 'put ''UEFQRVQvVlpffn0qSWBSL0pnWiVfaEpGZXc1QTg0azZnODBuV3I+W2pEakZnInBDektXejUmYzZmZ1tdNHE8SmsyZS9IfS4ibSh7KiRIYTNyU0FDc2thenM8eDUkOzg0PlA0dzltIzJjSmo8bUhHKGh1e3VfLHldNTdjTiM7WSF7S3Y/bld7Wmk4Rn5kRS8uQiYuVkNtVWQmX21jbWR4M0pQSXdu''@;'; put 'put ''eD14VyFGLjxMT15URGA+Pk5QM3ooRjw+bEZ4dzdiOT06SnBDOXdwbzloZW9Ycmk2XUJZSG93SUJTMDw2WWBgVHBMNEddaXtENUVtR0BANzQ7KVd7cXQwUV1dXmoicCw3RjRHXk9eNUlIL3BULClRc3h3YnAvcVdUNzRLOSt1fiw2T00wQiVwI2FdOT59X3MwTkw4U1MwMTNoYHNvcjF8b0YkZTpu''@;'; put 'put ''Q2lIR3JkXX4vPWo3dj9mLCpINVtYd2YhI1psIXJFVT5oPEVkRmUyRnRgJGhmMTN8ZEIyPCtsOzhvcVs6NC5bb0gmcXVgPjVYJjkkdzpKdlZfYnksTENjIV8xKX4ycXt8TTtIN29MVCREbUBNN01NKDdeLGYzU1VxRHA1I0lsWG9BPnFkUCVTc0xfNWRnRDppLzBzRVEhaCMhUzNSODBMWFQ7Kkx8''@;'; put 'put ''b2k3Si5GMXk+UT8zVjY+Y05LdWJDdEYrX255TndWbC9jNGxuZDMvJCI0OClVa2ssLnMpa052LnxAYCk0KSxLJFk2SGpvS3JxOGs4dnYqKXAiaC8icE9nfG0qMD9kPyRfZyJZT1pIQ19WTCwjcnZybkB7Rjw7VWhXeWpnRX0oKSslIVg5UiZubUJCNXNuellrS1FYLEhRV1BvJS9rUzljLlZRPSRK''@;'; put 'put ''K0BdNytXXSgwczFBZDBCITx+cCh1KGY6Kzk3eUIrQkhDZl15OFFtTmZsc3xNOHokaXI5N0c/O3h4VG14NmtvaXRhdzksNiRMLmA/YjBaSTNoTHp5KUR+bVhBdn5GQjliTHNUb35eS3gjYChvXXxeckAsUShoWkMyW242LjddZVpCUTYwMFdxPGJiLD9PQS8hRDJqTVhMWkl7WzpuK25JZUZkZDx0''@;'; put 'put ''cVRnZ2NzKTNzVkF+cyVKRDxYO31sX04wbS98UkMxXS5yLnJPdGREL1VfLD89ZH1zKjRiTEAqPyNXYDd8Wi5FKG9CeUZzWChYfSY+cXJvO0BreW9HKjpdVC51KFFQNUEpamJsNEIiXWM6LnBIOCN2blZ8WEYkI3lRM2ZWUFgoWXhOdGY7Tj1dYEAvPDB3MlNuM2RiWE5pe3V1WWxMPjciVUNsK0dI''@;'; put 'put ''Vi5iYzBnRHU6LjF0dWUvKnxgbDdFO01ufDtfMXRsLl92SXNleTc2LCNZSFBDL1tYYjBQZTh7MlBhLDVEZFl1Ijk4MUYlYC94M2x1Lmw4KjpmSjM5IlR1QFciYkZ9W14iIlApaUt3JWFgI0gqWXZRQyl+KChETnNbfS4pSiI6LmFmWncxdE1gUmBdQVBeV2Bta0IyZjFONGxmOVFQQkhQY1d9LHA4''@;'; put 'put ''SnhpPnk9WzkiKGZ4KyZQajxoJjA2TVpZXUxAPX18RllJZ1t6Pn04aSYjQmdYbzhOSm0xV3tzbnU/OU1YT2Eia3ZjLFJdfDpLWkpzVWl8TmcmY0l9NjZTJVBhJm8wJDU2YGQ3cCxJZCozXj9CW3dNRWNrPVJ9ZUJtcllXelpnKnksaVsza3NUZiZXK1tPKnpRYlU0O1BoNjgwOSxyaVJjfDgvbFha''@;'; put 'put ''cmpAPyJsPn01fTU+eVchbk57e1Rgfm9heio3dVI5YmJUVyoyUSldTjxDMSFFfGVkQGVMIUlnPGxoeWdwKTxMY0VtdHwpcF9CVERsQmR0aSRaK15kPzsqQUM9W1RzKW4kYSgjWkxeQjI/e28/XzZhMH5HOX5GeGptTSRQIVFvL1JILzZPIk9teUVBc3E7X3JRJmY6YmJlb19WOzdyNHc/dXlCWW89''@;'; put 'put ''RGEyXixtK2NjPXEibUdtSE9yZVRtZlcpaE0yeltKYkAlM0tPSyZ5bmBaWFRoRDI0OCQlaTV7MFFoVzwvfFFpOUhyZkhQZGJRJiQoV1tKI0NkdE18WTNkQiNXWSxrR1Jta1lvYEk9QWZheU12NlthRStueH4qJFd7Inh3VlMhXWhrJkRlYm0xRjY9fkhnRiRne0cqIUNEZlRkdjpWRCZUbkkucG1G''@;'; put 'put ''a0VMem1IWUtFVXAlIyh2fEtiM0N7MG59d2YqdCZ3XVROOSZXNWxXR0tidXNyRG83SC58bXJIYUg0Yy9lbUsmSWFTNTEvNCFpOW81b1t4azY6eipNe3RKYDhGenx5JGxyKl1ZMjdOKzFGZ2VrfT1ae1tpbk97MGs6SEs5M1Z7Um5QcVViUUdkc3R+cXhXVDNhXlV6Im9DSHVKVzQ+T3doTWZuZzU7''@;'; put 'put ''VDk1Uzdmc3IwVVdOZnhveSRgeG88M0JMJklIYzQ/VzYvT1Ikb3NvRkMzbislcTEjX04uZU19NWt7LGNIJjhJW1V6JixjUW87QWZ1OyEwbSE2QTApZ3FXJT5yc35TWFJHWFFiVSEzezJ6PCVyVGJ6KjR8Tk9pKk1CSVBuXWFIN09HaVAxLDJJNEwxWUxoZ2AsMzV9fGBkbjhha3p5YFJIMyIuTWB9''@;'; put 'put ''Uit+JU4uRVc2PzAuMGJKLlspczJQVnhpJk92fnBvNUE/QkphekRmbm5wfUhqa21EVztGUFFQOVJDP0tlNH5tSDZMbypucVs/KDxxeGo2RFo8KzMqT1NDKkt+bj5GbVBaYk4we0IkQWo2eFlXSFRpPXpRa3hic1A2XkFsTVBKUz5YSkhDOnNDcSFVNmReJnBgK28scnhDTC5VZk4+filLNz55Xndy''@;'; put 'put ''d09QbHReSEwyZTxITWA/dixQX1traD1SQFooNClMTjQuLnhIQnZIIVY5d0YxbHsrODRFXmMvX3BCL3Q/WyJpfW44aDJ7bHZtMyYrTHM8JVc/K3BxcEEhe0AoMzomO11mIjglVzwlXzVASGNXKiwyOzo7VyNabyxKak03PSs/b085ZX04O3VXUDh5KTh6aT8mTVRNNVNPYUlVJjF5PjdFTHExNGpI''@;'; put 'put ''c09mTl5UYS9QMHVEd19JUFtvaiwsY1tmV0QwZlJWQzpgIyZ7WShrblNmaHM7K1R1TCg+O1ZxJDFbKHQuOTlYVnwkcTVmR249YXVKZiNFVEB3KVgyUlZWeGhoQDJQKn1WZGZeQlE0Yl9dIiFNNSF1SX5pd19VRS5sODNjQWIvaEYqN1VHMSF1SWhCXS9YU3ZTd0BoIVhoczFLXVJGJH5wIX5dJjp3''@;'; put 'put ''ckxFfWhOcmA5IShaWSglezV3fnc1fCZIdWN4L1srXkQ6KCxNVGxZKWRnY0JMbE5MViNCWlY4RE5iPXY7cUU/Skd5fCo2azNObEdVc1I9RTBOPk5ROz9OJiRDYG9mcTphTVhIQ3Ereio3R3ttaV90K0NhMyMiSlhWbDlNaSFCaj40KnhidG43UH5HKkZffUFYeCUuJG9jeCZ4K2VOeGZdQ01sSldX''@;'; put 'put ''aG16STU8X3MybTlKYFJkXTg/T3NkUWlDPV1kR2BfVkdyU1V1Kns4LnJwW3NnJmFLQHhaUzw6RkF2ajJvbH5mJG1gRF5jM2ZGWHpUdVhyXX5DSExVXykxNHY1OXpAMWtuR1BsXUgzd2FycTQwKEtmc0NRIkVrRTBqUlBbMm4wMEtJX2RmSkBqIVZ3RDB6MnAuSD4/a35JeEZubFQkVXo4QTooZCp6''@;'; put 'put ''US9WbkgoVms/VTpJQ0Z2LEhYcXZpUGxYbTpoUFp0VkZIRy9QcExAMC4rMmtxZiFxOSVYeDJLQjgvfjlQdiE9MWUqTWdiQHI0THZ5STNYMFFOYHdgUW5zRVVGKTVNPVptYEQyJCFuXTlRVnMrUnNuPCt1dWpdM0o9NUtBdlglMS9zdX0zQSM3OWAjVG9pQCpeUjsySVJDVjlSWyYxJGJVZmhFeng/''@;'; put 'put ''Qmx7Y0d0cElnU3lnV3V7S2l2c0QsXm8kYHUoWjtvITM8NHJFbyNycUpyQHddYE4ueCY7cT4rJGwiTTpPUiJQO2kkRH5qZlZUUEAldzYxc09BLilSO0YyTz1edkNxQipTZy9nSF9eaSN2UlQ2T1IrYipOXVtxXXg9XkQ2IUBzRl9CPTx0fXxWVSskeU1RJjJdb1N1XlosXnZ3JG9WfiV5UTEhc2pz''@;'; put 'put ''MSVEVWtmelI8eW1CdEY+UTxaPkJuPnpkKzNdfW45WTNUcFkrOWc/R11qaXpiTDszRDcmLFdoSFsoVmZaKVVgbks3UipUTlk1aSVWSDpLTUY/cVhVRlQiQV1dYn1HIylSX3hbRypfUj5iX35RdVBiSyR8KzdVZTU2Zm44Zn00TWBlYE03Yj8/TitsLz5zIlRub2EzVVtXV3xWO1RgM05xSyFpLChC''@;'; put 'put ''NVY5en0/PVMmRTJiO0kqcig+KkIiWnVEKjpxRVt7WEAqVVhoX1lBLzcrfjEqXjc7JTlCREhbME50R19Db1pWUmVzP241RU1HY2l5T0d9I0lYeUVIXURneGlRRDRTU1k7ak5EVmE1Qj49Mnd+JGU8e2NaeHRYOE5GYnEwdkFONyp2OWdhdStlR3Z3QnkkXlB0diF3ISpodCgpMlVtNkVJajYre0Rs''@;'; put 'put ''Vz9IKHJjNTE5OGNiek1FS0d+bUJbPXUvYyM9fXRaXmE0Tl1mTi9GQ3VlfW9WSW1mXUVJITlGQVo/S10zPURrdGBiM25WPiNbXnozSDhleFtXbUouT1UkeX1LQWlkcyJDcXs+NmBrUyl+YTEkWHw4SkV6UWUuamFqJmBiPSo5Rzo4d3k6QVF+Iy5JNTt7WSI+fGBnNTNGcVhTXXtYbVJJW0x+In56''@;'; put 'put ''em1pZUF9YTFAY1gmPVZsPX5ZOlRwUDVVLzA+I30wPSIkZ0gzJiJfPyE0fGpRaG1aJGo0KFQxIU5oKXZvWEFGeisiNVpJWmJjclpYN1ladG5rXyNMPGVFe1IqNHF1PmJCUy5AXmBIbjJjbzxpTC8sYihjIy5vcjM6RTk5Ljs/ZHZzaUdtXnF9ZXd3T3BAP05jR1Aqck9fWXwoWUEjZU9CaFJGTWww''@;'; put 'put ''QEZPfkdORHExY2JVc0xXfjQ/XyY/NTQ8djIzNDtWYyRkWEFdSkQkflkuI1hZdmMjc1JvKSVIdXVTcFswPG59WlA8RT90LHFTRGhGeTRsTXFwUHghLHIjSC9tRFY/ejVocEVmMD1wV1RZSDsjWDNZO01ORXJbSjFle05ZQFV9KHFZNjIpUF0wdG0qaXAlXU10di5dNyVEYVR6eCUqZmBzS3lQa2xK''@;'; put 'put ''JkVFOSg1cURVOjcsYltpfCY0UDpSN0UrRk0wS0hrUzcxP1JBPTc6PHI+X0FYbTRFeHVQYz82ZHlScUs+bio3M2x0QjAlWTFoSCo4RHVjfTM6OVAkZEE+eEpNelBjWHZQZENWNFEiLGZAbDN3bU51PF82WWlOUUJiVFdzZndaWE9YaFhiY29mTTkrPDVrdzJpRU4/TzlhKCV1cFdwWDFjSmkxX1VR''@;'; put 'put ''NnNiQlJFNDByYzMvVig+NlJwLF4+fGQ5R3FoMFU2OXRdVD82VlsyISZLem13SDdfNVljanl8IlI0QXcwR11ZL0dQVEx9YkouM3wrfUpYMDJNZUBQemxCWjQ2Smc8KDo3QiklPlk+RkNRVjBYenE9eXQrODNIM1R5OUZ4O3I8aT5tVnFsTFArYFAqcS8qOjE7R0YrTUNmW1I8PnBKJGREXll5S3I7''@;'; put 'put ''NmMsNUpWRHNnJCV0XkM0OCFwVFlJdWgsUTptT24/S0p6PVR1UnNDI0tTPFYyJHVFK3IzJFJASktMJFQqMV9MSm51Z2oyenxFO3dtLyw7Mixacy5gXXljPWd1dTlNS0BHOnBUS24ycX06a0pYZGh+Jn0xO0dONmZLdWw/cFU+OTJPfCo8NWhzenY9dUc2M1JOVnpMb11VY2VrKyZ2T0goaksra3VC''@;'; put 'put ''Jih1X088YEA2eEcsS04qKXUlZEYlU0ZoY2dlWi9wLnNrcz1VcDh9dWI1NVB4MnkkKzAoX15lIXNteEoydXV9OGtSWDldTC9VN25nOEhUXU4iLFUmPTZHNVBQWVUwJE0hVnV1PVhmYmhNWywhbXFsWD9DeFhYWzNbNiFbRkteOCtOaHE8KlQmPDA/bHl9b34zT24+RFI5YHMyUzRGVE1MZEIobVpL''@;'; put 'put ''VyF2QzZ4aDJMUHU/Sk1bRiNlTz55QEdRaG9tQ3RrfDtSIkFjbjJSOEAve2orK1d1W2llSUIia3FzQXwpakQvUTkoUnQvNCFIL3MzMlJ4cV5LaksmTlRoQjN9LCFGMSVZTD5IZk56UUMqK3N1Xy5vaVVGKT00QE57TThVRDF6Wy4iWFEoUmIoYHRHaFRwRGMqVTB5Ryg1Tn1VQWJHV2Z4NHl5K2Vv''@;'; put 'put ''eSYqdXw2RV4hTzNQRFU/IW1baHdVRndINlglaj0uN1RQY35SJS9kR01iYzY6NiFnPCs0bSJhLitdbzl4VElhLlkwPGJXfVM6ZE9uT0F+SS85WThXcFhwVCNFWjF9YHxTRDZyaDIpUjAqWnVLNFVUfjZpTllsMEhicz9MOGQ+aWYkJm9lOl4rI2ZVI0A7QldrMi84RyFCdCxufjpUfGcqekYuYCo6''@;'; put 'put ''VFFsQyF9cXEjIm0sI0o5Ym1bb3tgeXtbPFtRJk9zWDkyXXNMX3tpRHQrfGp5SDJ0aShQYEZQQH4ucGxQU24sJXNvJGJtYjBiRG94aiRHe0djT2o/QTtKJVBmVlZlTT5IUF5hITVMfX16KEklezAjQGU8Zns6MkUvSjojWy5MVUwzPVNeTEM9fFRLRXd9MCwpYndCZj0uVDVLZmBnL0QwSnFIPSg/''@;'; put 'put ''WFl5SmgoTkAxfm84aU08ajZYXnAkTG1Lb0AyMCkmJTcvTlNYLiU3PnlIITolXjAkZ21TSnsyWzErSlt6bENeQmBsfDV+UGVLPyh5QzRQdnNRdGxUSkprImVOeTQkZ00/OXpefH4lQX0kaSZbJWlPRDRkazU5WSY7LihIeWhNYV03Wkg2TUBIQyV3JilWdSY6dFtPekgoNXBgenBfbXsjQlhhQlRR''@;'; put 'put ''XzZSTHU2MyV5XVE2LFkrPWgiKGYwQCFFXTd6dG10Vz8kWSNlSSVYJShdOmRgQURvSmpHVHMkfVhWMGJWRF0vdG0vZXRaPj1eYnVTMjBXK1pDeVlDSjhhUDdNWHhJLGFXRDo4QmJqOnYob1osL2lkR0lraDVmeXJoXVBKSilOZCZ8dlU6Ujtoa3dhSUQ4NnNEM0hpYF15ZjA9TmQrSllAJFZbM0J8''@;'; put 'put ''dyVMTCNzLFFYVTNAK0tNKmZEITQsIkgxVj9NcCJgOiZHNlI9KTZZdkZpUFZtbHdSSVdWdGJsbitRKG5TIThzKHdeXlpyfiU6bHZ8ZEF2aiNSXT88K3crIypiclJMT1Z2cn09cGdXLnoyWipeRk9JU1QwYjlYUTRGd0FhMmhuc2ZJRjgsNkl9LlVCNj5MZF5IM2xNcVZjPS8oRihCb0ZNOl9QKWRt''@;'; put 'put ''JlhVUD1EMERxeTU8LD88SSNdakgzZWM6RzQsSGopYj1UKU9tUnppdTFRaEZoelZKTFUxTD9aXmNJc2UqcE9HZGFLKVJDK1s5MGo1JEE6WCEkRSljKzQ0fD5aPTw1IUJQKXcoWFVPUSk/S0N6bmVhOz1rek1dNztpNnxiY1UjIyZQbyM8cSxHTmhYYm54LDNMeHlxPC5oUkg/ampSckR7cTdFcGAw''@;'; put 'put ''OjtsaWR8Qkc4X3pIXVdUPiNfSUt8KT41YEV+QHkyZzkzWUh+Jm9+e1pkUjt+QUJ+Xk1oIzA7PTdENUk5UiEsQngwT3I3YSZQPmJVNj1EWkBsMk5vPWYyJVBgJl45TDFnP2swSUozbmNuODFtIi5Heih7LmQpKH0zbHM0MlNhMkJqJmIobTkscjhhIWlrTGNSbS5kfX4lVUMvekswT1Z3KGNdNlgs''@;'; put 'put ''NltJKDRaaTx5YCheU3xfLzU6REl5TE9iRy8qIWM3RGJ6XjMlX3B8TSVoY09AIVM0IWtVMmkqMEUlbkxQOz0seUIpYUJyYStlXltMYFkpUk0sKW90UEZTL2dGQDBidEV4emxAdjdHZjQkMGUhJCR5U2pzNnRhZCVLTXFzI0p1R3YvT3AkVFMkNCZGd0tLM1tJTyUlLE1mMztzKFMwQHZlbHJOYkJA''@;'; put 'put ''cCxHP2MjW2M6Wn09eH1XeSZoVj1JJT5SeDNKLyEpXzo5aD48SCpLJlBudEV5d1cwVl5RTXl3KClWP2F7PWQxc115RV5sJG4uVFV1Z15OPksxMF8/XkkpOF15RU1bc0osc1FELDg/YFo5Iz90cnpzR31NWTNOO2IhfjpoMH0oPU4mcHcpKEdtXnNyYnR0OEFxUjEjKllDNDFzdHxaTkJVSEUvaHd4''@;'; put 'put ''K3lrKnJZR0NWUU08MCN0UGZDUUZ7RzdEeShQSHQyaFp9XXd4c2s3fSMvUj9yJHJgRn1qdiNvP1didVhpfiZzY01+aG93bEcsRVI0JDR5dzFwXkZXPUF6XkpWVkpudFtYTFYiSUxfQGZjJmdQUkgvajx6a1VsQUgxbGpKOjRmXl5XYz1xQmU3QSFCYjUsYkwkXSFMYTQwOkwsdnFsfEArOEdKPTox''@;'; put 'put ''XzB+cDtHIjF4OTJ7MDpAYis7TCQ2QGJyd2ozYzJXLy9dQnwvPksyYS4jbGBWIX0hJDNXLFY4SlFGYltGPElULnxKfnNXUWRpeDhWL1VabFdaOj9yNHBOOj5kKjZ1OHppUk0oL0grIW4xa3E3OzVNInhdXkNraT9iTk9yNTxaY3RSWVpCWnNPK2NSLGZ7UVFaSSk8aml4IU1Rd0pSbkF1SCUzZTlO''@;'; put 'put ''TSFMOS8oayg3dCwlVTguYFBveGRBKkc1bGs1SV5Pc3NHayQuRjsjTW5jOkszdVRHPTdGY0N9IzY3aiw0THN8fj9MV2VTUFptfTRoYntCNU5bWldUfCppdG93W3IvLlh0ZU4yKXRIZC49TEAlYWJbYVkpMzx7UDVDI1tVI3xNOGNKM2dJSF4lZVQoeiNFb14vcFVTLzdEOGx+RXAmTXRrNjVnYmNy''@;'; put 'put ''YG81UDd1akdKRzNwSkZhPnM3NEg3ciJGZj1nQGUyLCZRdlQqKVhTKC5+UjJzIVFQPyZFQClmWkorIUovVnVeUmgiZmh3VSxdXnQvSThHSlROYyFJU1dpYjM7PlBUUzt6Vi4qO2hiRyUuclcsL1RrZHhdJnQ+P31NOmd8NigsbEQycz43O1BMLyVhflYvVmovQClJY19Jd0RCVzFjIlNNMHdDOntG''@;'; put 'put ''Wyl2clFiSFJuIlphOjNIXlRMRDNyMEtMKTJvJUJpWHBaWS8xSE9VczQpOSI0eXxRd1U2eDN4NnA5eWRGWj5hQGFGSCRUMitOdktwUnFqPHclKy41K2dRRD03ISJDS1lCZig2eTFYOjcpZG4lIVBrbkVUVCswW0BjNE4vP1ByIzxjK3F6TG5EQF1zQkZpMy8hJCVEY09+cEJGZjFEODM4UW9NUz9k''@;'; put 'put ''Nj8qOzsjfWwwdi9TaVpHWVVxWD9VMzBIRm4zUCNqSGdEXkVzcEJ5YTB0N3Zdcm91UVNffEAoS0dLIXx3fl9fOWBCNFJjRit3dWdhIkBWOldaaysiZHhrWDAqUmJ3cVswaV9UL3YuL0QmVm9TeysxMC5vWVRnKWRWaiZTTDc7anB0RHlGUSQ2M0YuXjJqTUxiO09+OTZgcig/JTVhTDc/ZjU1KllW''@;'; put 'put ''Wn0jfF0pLCNlOTU9Pk9LTj4pWE03d1lQdT0/bihDWk1xa2FhV2tdQ1VhLCx5dHclPVYyTnxxd2crWGBoYX0+M2ZFTzZlcWIvOX1KUVNLTHtzLm8hOnx3K2JKWVQhUyNfOyNHMGJgaEgyY25vYi4kQ3NedU1taUMoW2AoZzxyK2psOUpJN35+cGBrJVcmZ3xEZixfPXAsd2laJjw7WTpZPmRpT0VY''@;'; put 'put ''Zj9Ma10/UVQhajgscEVXaFBMc05HakV7fCIvUiR6bipTUSVMO1dtIz48UiNYOD99XWMwfDlfYytfV2Z2X3NzVmtUPyYicWcpTjJDU0AkTE8mb1pveCQrTiU4bCllcGJZK0dWM3c/c05faCRNM21eNSRXLjhUNyhKQzM1VCZ7X0BEOXhXdEJ+fj9RKnprSUxqI0RoUXhdXnk1PDJKNmdVQGp5ajN+''@;'; put 'put ''cUszUT95Ly5yJFM/NERPRmpJWV8zLDg+dWN3Yi5ufjEyeGk2S04+MWhNelgmTTBEKns4ITQoISgjeFRScXU7OEVeTHImTGRmKzl8aTdIKzhpLGVvNCJFYXhrISQxJjw4U3cqWG06IWIjPSNgUmFqcDh6bUNedVdIXz0sP2NEPk4uSElxMjF1ZmQhMlJNemYmfUszSE5FNlJmPDhkUXAjZX1uSjdM''@;'; put 'put ''TGpQTUQhdl0pdnNTa0hFSnlaYj46JUlvSCtFOH06cmx+YmQyTWRPQyh9JXltdi5BRS85ZEQwVFlvO1Q7W119NVdFRCZQcChZbHAoU2twImFwfktuOUMvQyQkX1ViXTtXMmdDbiQ+Il5IVGc/IUFXbmxreyxSM0VtKltgNk57VkEhIW5dKCN4LEN3KWtCWCJufiM/Ziw6ezomfnw0QztkZUdlNjZs''@;'; put 'put ''aDEyMSpeUmJxVTgsNjwpcGNSSFhudW8xYlZke04zZUpLPVg0JWIjejtsM3tMSltQMUZ9Ol5aV0JzfDMyRDkrOTRnQnFiaCkvVD8/RHJndDEuS25fKnt6PkJxaGksQkkmYSxRIjBmb1AuMClTb3BjRHg/K2k1YCQyaXhAMDVIcFJGSlBKNnBvcW1zdT1zQ11bW0tYOkMzPSVOVn1ucHUqe2VXPmNa''@;'; put 'put ''LnViMVNpTiYue15DR098ZF5rZ1paR2wyLyojMV5SSkg2aTNPSlYsU09wMnQ4NmkyUHEhNko2fGxjfUUvTzBIUzg4T0hLVD85QyJfaTAkXUplXVdDRlEieHd4OmgvSTB6X1tmJHVadV9BL3NNPDArSFU9UFUpMVloc0Y6fjxIRFtgWD1+dSM4PXBlIWNlTlhUT2FjOFZLKGJ+UihTZ3VvPHQwfFYq''@;'; put 'put ''UixbOUI6Yj9uK2gvY1IhLkcudy59P25yWy9MPV1Xd1okWixSfD1aWik/c0YpYlFEN2hkYVsra2Z3T2ElR2hHKz09X3FxMkVoQ0RHIlkiZGRCZmk+V0QyfDdxQzd3cnpXdVI3ZzpESnhXajB1PChhXn5bXyxvPlpCIXJDNDN7PloibEtMfC9oMFVPISxVY2ZCamJUTyxCZnpWREh0UjdBc182OFUi''@;'; put 'put ''b3gwcn1YLzNnck5GVkhvYzg0LE5ZIS49PiluY3kyYDV1YW1GciUsfXRJa1Q0QyR7Z3lhdzpHa2BrcF9DNzp7ezJ9UjtldjM1eilfWkw5RnlxcGAvdmVzfHdqTzF6SldERHl+YSomOWV+SzR5XjpOeSxRZlpaQklXW2VMNjhdMU4hdE0lS3RePCkuUzpSXlM8VGxSVDo3ezxxdT9NPklSJWIzO1c8''@;'; put 'put ''UzJFPTc4d29NdE0+OD8iKlMoZmFlLCMqRlRqQ3dgUVgwcXVaNGA/MkB5b1ZxaylNO2JzWmtmPHlufnMpd21HbVYsTj5SMjciaVVVTE8lYFg4QnojOnsxM0U5c0NHSTljUTJDbmJrSDIpQGN1e2prd0k2SFt6MFYka1suQUptNCQkS01+ck88biJ5OH5tPmYxWEM1NkBZNTNVTjs6UFFeInw1WFNP''@;'; put 'put ''UUFhQ0ZdNFh0WWUmITs1TV55YClGQn5xS01FbEFvcUlMYVdQck5qekdKW3JAdX5hLF4qXj08blFJXURwJC9qJEJ0QGI1ME00JTtgYGVNQC5bcU4yM1txO2gsQTA8eTVVQEhKYCl1ZyFhcEVSU0pyfH16TkE4VDRbZFB3U3tJRW8kRHF7VXZUfC8zeDF8WGFDPXZDfkttcE5zcFRQSyNpTFdWeHg7''@;'; put 'put ''QyQ5QUVERG9wXylDZkpSPEJwSDhRO3g4ekxLPkc7NnMiTW4hSVQvbW8zLHs+cWlEMllYV2kidStDMEQwXztbLCJ1ISVIUiYxLzx8JlRnNDJ4XTg8a3kiZFc5JiRiPm1YTSw6Tk86JUEqZERmVC5BSyxZb2NJUSs7RlYwN2lxU2QpWkdOYiFXPndEMjtVbkFPTyxFbE4zZ2BpTUp4P19uT2AsO1R4''@;'; put 'put ''YXZ8PTtIbylJNDJCMD1JbmRXelp+SDJ8Jj9rfFUjaiwxeVBAVG55cnZMdkJ6ckoqPFFGMUJPOnFqTWJCJndNIXRWLkd7UlB7RU1mTjR3fGV5cCYxYUQkNGpfTSxZW1lwOnVCd15KcUBFOX1iIX1ybiZlSGVUbSkkI3M9LHdVQ1VpLDROaSFUfW82Z2o7Tld3XylveDh7dyZHKDQ8MnVzd3t6blNB''@;'; put 'put ''NmpLP0plZlM/Wmw0P3IweSZqKDl2U1NgKzJvWVZ4ciJFaH1zNW9Ge2ZwOV80MWMldChKPUIyNGpmPjJBeSl6KX1nV2g0OjIqeG5VbFJtM2NST21PNVVKOWt9T09eNGRBUlolZmE7a2NzTkUvOVNoQnwiN1NENkFJKz0iLjU6cyN6UWEjUWgqKz8sQF5dflNLK3g4bm5COHdVfXRiIXMye3BCU35R''@;'; put 'put ''dDpLVjx3Znh+alFtSHVucUBLYHwlfCRjZyJ0dyo4UWBJfX08UnJJdSwvRmE2XXxia1s8WlMhWjw6SEBBfSQkRFlZZyo7fmZIM0xNeDg9XWNRRTFxOERRWyhORkpsVFdZY2pQUnx+TnErcGZKPGohQGozKENWMkl+NUpPSTl0am8uVkp3czVaTlhQOVdgNWxgIipSKU01Sz9XfHtRTVBbKlBDK2ha''@;'; put 'put ''ckxaODJ7LEchfjA5Tnx5dytgJD5WRl8xdzZHRkkvR0YqR1Q1cSIidmg1L0EqdjUlXnlZJFUxbz5RZVVnOX07NkB2SFozNU4zISl1KVlzOXtJeEduZ2d3Ik0wRG82c2BsWnVSQXh2Xn14JGVUOHBuQXt2b3Zdd3RyWGAwLH5DOFVvcTxiZDNVdXtxUHxLZ3ArMXdSZlN6fWAjLilEPF9UfjtVKU1x''@;'; put 'put ''eSZOWyM/byF5RyRJKmZlQD5XbD1xZGNOLGZBdzY6bm9nV09YOjhAZnt2MWxnW2QlaD1oPTt9bH58ZC5vZk8mZT5FYUh0Nmk9YkZ+RE91PS4wUDNqYHxZKHU0XS50YG99aUhHZ2pgZnldbHBVVWZRWWVQVitPPnssQmUmKVNfMGFZTlZCPFtpNXV1JUQjT0xROz92VSJwfUN0KnpLL3c/cWFRPHJT''@;'; put 'put ''el8pZC5GeSJ9PD9LWlkjaiFLRClYezJ8XVJvYGs+OkpgVDFebVNAdVBJWDcocjR4VkQxPCUuKGx6TC40bGc6OXB7PnYxeEw7SUhYeEldUis0WzZCfldJKGNTfX05PEo8Wix7TWxbZS5WM2ZYTTd7T30xTERxQDc+Y2NiY0J8YVI8dF4/Lmx7fVtMVzdmPXNHTiZ6UWRfKTlBaCM+aXIpWXVxQEJk''@;'; put 'put ''QThtJmIzXzgkMjw3fE1pP2tQT2xyXlNkJXFYOFo7I0JsaXRNTXJHbUp7VHhPYzhRIXVZPUREdzNIK3hZbCE4WWtWRWgsc3A0WmlJLGduJHNlMiZ0UWEod01+SV9lSEYwayNiMyM/UEV+WXZTRUlGfTdXZCVtQ2pqU29vcTxxRzheMTIudnYiPnhPdnovVC9VOlcmRlZHP2EuOmJPLCJhbSIvfF9e''@;'; put 'put ''WVNgaUpCU3lkY2BKKFE6blRBRGY7U0RdZFo0YjxDODZhfX5RKlpzXXw/cileMTUvZHxGMlluLGdsdSgqJkBNQzVtakl9UzVdUzwyQWI6fHI/PWU3RHVMMn52Um1ZJT9kWHhIalcsI1VsN0hKbV5zcFlHR0BFMT1MfCIlQ0RVS0ZUOiNQajRHQDlmMy88KkZOeT8+T2J7JCZdWFsjYWhQNGU8KC8k''@;'; put 'put ''WkI5KFlMZTNkbHIzcDVEPzU7XmIhfC52QmRESEVFRHRPNSklIiNKS3txPn5hLFphTUg4WztdP2ddfXVgMG5uMHpTLEExWGB0NXk2flI8ZnxISUhIOGFUMiUqM0M/ZlAyfUhCbCIzZFpFRSlkK117LkJYOy45d01nTSRBOVEvPVVxJXVxUDBLST9DYjZvN1Y4Vyg0SW0kalg0azlOTDtSI2xTLmts''@;'; put 'put ''WTNpZDQzXSl6Qz0vKVgxJFU1Tnx9aWNUflMqJks5OUl6TXgvaGVpSndBPSgsR2EmSyZSbGNDSU1wX1pSaUpBJWRnXWtnZXZ6OypaN1cuM2txKW9jVCk0NVVmRWBOYEdLb3NgXWxlYUk7Wjg/TWY8dT0wOnhtQ2plNDldYFR6XStHXVo+THgzWGBdfloqcWxnRWBOWGtsTmBbQVRyaXFAXTgyKSg2''@;'; put 'put ''aENTJHgxaXc9RiQ5Ui5EI3JeUUsoclZLNT9mIlFgazQ6Kj9SJShkMFdmOXUhW3QvfUN9NCJLcWh5WkslbjQzJUZxODlucyRPY215dSNIUmxhJkJqRUVQZltFMSl2VHNxPG5RKVRJInZYb3VaQkhpXUcyZWVHQWxQI3MzKGZrRyZMI3hHWiREdmRTeS9LcnlWNyxUT2UuNEskIyRmdm1UQzEkZWZi''@;'; put 'put ''bmhpekZfbnVyRSElc2k1Z1AvbGd6ezpAd3xbeXtHR1U2cj4kZ3QzaT9DOlJDM2opL1QzI3whOnxvL29AUF48OHR7Zk87K0xSK0RKWCFUbE5dPHAlPkR9ey86aU4rIUJOcDNVYEZqa3IkVlVQYUB7WCkxSVokJD15SFVkdCUvd29wKEw+M0pXRCkjR11KPTJiND5jUk46Tl1LfjRVdTcmS0JGOmV9''@;'; put 'put ''d0JII2xZMH5QQ3RJQmYlYG4wYURDWHRMTkN0a1EybFNHTldEcUd3Lj9WaFNNZXlII2owQio3cnR2KmdeWmEmOi9zIkVYaEFiTWBNX2EwRGxZenZJcGRRTylrMVdTXXhAfUR4KGY+VzN0VXFPfDp5V2hlan1bTGMqI2JJJnRWeCk5aV97YTc6MHt5Njd8eykhN2QoPzRnV2FaVSYrITE9RSkuc2li''@;'; put 'put ''NGcyKi9DQ0pXd3IvJU0qdkJiS35nYi5ZeUhaKmIjUktdYzkmYE8hIjlPYnhQPXdxUUQ8LHw5fHp1I0leWDldN1Y+RkZvWzBHWFtuKEdBI1ZjU2B4OSNPQHFZNT1TRGlLfGk1UjlUJU40RSU0d2c3UTkvTnV4KTNxVHE3WDh0N3F4RVNkekdDVVd5WCkpfnZGallGPWttQnp2dWEkRFdHUEVfYi9E''@;'; put 'put ''aTl6YT0uJXRyOWNZekM5IVJ8X1piUWNiU289d2dtUng/TTFzMChOWXFHe1tidyVNaHppPzQ+SGQ3OV1rfHtiWE9xN10saHV9dS5IMXszbUI5a1U9WHMwXXIweXMwZ3YsMzVYaktzOThMe2l2SjBNPUF1dCZOWHdzczp9Pnw5fTJtciYjJW1tfDMoWFsxcSJtaFhHSEx+S2NvbmI8Rk11Lyg2bmR3''@;'; put 'put ''QylTUE5WRSVJN2FQOFhJclhvSSF+I3BjamQ+aWZTc2ZXbGJRSWtjM3ExdD1qa0JbMX4+RWE1dWckUH4wUytuTEthem0vaHJxdVgoMSV9P2E1cnh4RjUoTURUbW9OIjJtUnZ1cVYlYUNqbDR8IX5Eb0RsQ090KEk1KHIpYztSKGs0S1Qxa1BZK2g6TTR9ZVpnZi8wPClqVyMjdkxENkkrJjU2KDhY''@;'; put 'put ''cyZZQCFNbT1oSEBgUkQjU1BCbEpDcSYlYTV4YX45KFZNeHxla2ZhMDJwJFAoI0IzLkc8ampLcG1OcVsua3w2OiFhTT9Yck9uTWtGU0coYTladyhvQEhCSUN1VTdkb3hQfEQ7S1Qob1AzPW1mNi4hRT8oY0dsV2Y0P1kwfmMuWWExa2JabSxPY35tKFEmfVh5ZVlXQFtCUlFPRDlTTCY1ME4jSXBi''@;'; put 'put ''K1llZDR8Y04zXXQ5MldvUGpadCN4PTtOTG5Weyk7eDhMRVpES0NOZVEhOSNmL19NckV0TmNIVlNiNXFSanVlPCoxZ3YrPEMiVXc+N24zRD5ZZDU8Yz1MOWRFUTFFaF1uT2kpaSg+RSk1KCloeEMwNGJLY1E1PiwwSkshfig4a0ZwUH5vXy9xIk1SUElJfnZ6KnpXXXIjRElDY3hSVm5+JGErcD1T''@;'; put 'put ''VGluW0hZVHM9JVp3bDp4Mi8zVEs2SkhJMXZVYklwI0UwN1osPyFYN2w/UWE1fEQ+Xml3Nzs2UWFISzgwaHhIY2YiXWdsbX5eIVN4I1Y7aUNgfCRTZ1dQIV8zP0RkQmBTJU0pRjVNdDldTUpsK347VFsrMTp5cVVeaVEvKy5vaSN3Xn1kZk02Jl1GJGRvQyJWYnsqY08oXXJRIV5yUkhMeDFIOSos''@;'; put 'put ''fTowaUFXZUwqIlE7dWhiZWdHYzI+emlTQF1Zc2VTZHQ/SkFqe1E0dS49Yy54Z2daVEppNXJtMHJudHVlX3Y4XVgkNXhCQWtbUzFeV21GR20jcT8uUkBuPCVkdFloOSNCdmFkeGIvJWRnemZldGI7fihtfH1QdVokXihmS2JjQ01DRVZ0PV9ESjUmPlMsfTs+eTp1bTljc18hT1dlcl1AWkgiOFg6''@;'; put 'put ''e31ZVSMre2wjNWhMJk4qfSg8bixiLyZhYHduZ2ImOUVtIVNkaSV2KnNfMTtqV2Q+XS8lZj48QjYlRiQ1fmRTKkYsZX1PdUw6RFtSUGgrV1REcipALEJ6WF9SP1cldzFQcmhvYSppT3YkPjVIZF42P3Q7UFJBZjR+Kj1kcHJ2Q2JDUj1deU94UXI3IlN3VCl+M34kS2tbPDR0X2R8dj9wZmtXSChV''@;'; put 'put ''P0t4cCt0e2kkVTpZMH5nVjh9RlJHdVltY0FVL3pNIl8wS3t1fVtyQ2lDZiMvPG97YmhqOyE6PENkaF1UWEUjR0Q8JT9nM0ludy9uWTZNWT4mK2FzKUxTY2ViS09ZTHhEYnhgU01+I3gmfFZdPkU3LEhPd2Apc2JmWkROKFouZDxPJG1FanRSTkdFbGBkaC9dLllna3E7VkglW0MqJG1LI1I0MkFj''@;'; put 'put ''YVdmNnRvNDljQ15aKE5VOi54TWkzXnRtOW1NOHd4PzREPltWP0o1QCs3Wyx5X0kpYDlaYThhSikoJVYvWGVWaj82W08pMmF6RFsleGBBKmJIVWhOJVduOHlmMExsRF1SbHQ4aFd2QWtBWF86WF9CfiE1XjRucXY2PlRGUzxNRnhDMyNTdDpxayFPKF5aVTwzekd1dz1PL3p6ZEZwUGw2Kyp5W0ZP''@;'; put 'put ''dGNvT0dqXXpufGVnSlRHSXsoWCRTODpiRkdhfTswVlckO01UMjNKQF53cl4wdGdMZzdTR1leJj9uQj9gUjpkV2MpNl9sLGBOTWx7a1cxd108RHJDZVVPKjteSWxsPlAoWjwuMGNbLH42K2ZvO24vRyY7Qy9VdmV7REg/WE5IOiEoXzZtQVdRRVk2WiEuN2RzKGo9bSxzRXRKIWc2R05XK2ZbXl52''@;'; put 'put ''OiJZNDolITovNnE8RGk0S1o6ZF92YSFqczJ3MkVhMFZfUGQ7Z0ldNVQ6IjlMXnlhSUIxY3BhVmh1ImV8dDAxXWpiajpYb3g+cGE1UGVBTUNEdDlBfmRbZn5SJGh9OCQrKTk0S0J1S2ZIbyovLDJXTCRuPSNmbT1zUWRjJmNOPkIqeUwsZCpNdmczdDxVdlBWKnAvb3VITTZ6LCRURDs5MHxjU3ox''@;'; put 'put ''WGAqaEBKLzR8X1l4bFMoKGN0ZU0qNnxfZXV0NTJQTVkvWz4kfkdtdHg/Y3hrek57KkBofD5rMyN3S0pQfmZRdXBqLCtpKGE1eE1mbVouYyZ6I1pKb2tea18xPEYwUVBlYVc8IVBpYzVzLmQlUXIlO0hEME1OWigvLDtLQj9YYlZSaUN4IUlEPT5ZRXZuYV47Wl5SakgwT1tbP0ZDaiJXQiNwRXFB''@;'; put 'put ''QVdadXdfQkshOjRgaG9NQjtSbDFFNHQsNUZ8fUpJbHlsdVAhW0I7V1ozdzJsZlF2bk9LRnpxLmE9OGckMkZkYUR4eEIkbDg2Vm9lLH1aOURCbkxQL1FhYFhRK0BuK2NRQ2FEYHFxRG9VdHUhfWYjeXZnfj9uLjMvOl1mQj49fncqaG8pYitMRXNicTUjVls/cmgwezs/YnkoaXV9dFc0bHJaPG4j''@;'; put 'put ''byNsT3U7U1RbYDFPW0xIWD9kSysrSSw1SldAa3tWalJJaTkwd350fXNyJkcsUFA7Lz5TOSMzQ3ZJJTJUQ352b2o+ZlQ0JDBuUXFrfEl5SGJnPGFXamJMUVdiWyg9cmpPTF1XRlV1cEtXJXF3T11DJnp4Q2RWNiNtdU94enssR3pSSVhGKHcjNzBkWC9eT1o8YXVQTXl7YVlLd05fdEYydzxCV15t''@;'; put 'put ''V2g0dV1JTyNqL3pCdHghalZke2s9XVMmL1pCej9aYiVnJipCX0N7TUo7Nyh8N1J8JCFAbkpZTnRMe2hzO0BhIUBPbzBvMCI2QE05dV5gIylyaEpHc0NHJCIsQSl6cj4rX2AmX0p2OmklcmdlJiFIMkV9YTMjM05FLFU2XWs3KF46Ky80eDFUdTlvUDhRU3JYUjw5T15rTEtnJVZwJjNvSHdiZ2Y2''@;'; put 'put ''YEpXeylgXWl6ejhfMz1mLFRET2I5M2A1ai47NjhzV0paPTouPHNNYFRdSVN+RVtDe247fCFAWTVNU2hra2lJZy5ZKTl4aytCRGgjSltrQ2g5SFR0bDNeVis1bF58e0hZZDxRangxMnpyVUViJCFwOEM2ekhiPFlNPzRCaEkpPig1SmpMIzBkckVEOEJ1S0klT3UweTBnbygiS1Y4Tmh3NzdsQUoy''@;'; put 'put ''ayt0MEk/S2FjX1QxJjxnPHI+KTk9QVdTVlAkallaKmsjKUVIeHVbPyJ1W09wSDgvY2M2Y2RbVE5gTmhjUDloelA7cCV2WURgLF4xZTJjWiRHXiM5TWwvMCxNfEt6cHptT0x3MVksWEdsWCxORWpZWGJNb09eUnlocn17enN6dSpFI2VVYDwqSmRTPV06PSJaJShoKjRyXSEoeVo/VzRjLmxuKWNh''@;'; put 'put ''dD0vXkdGIzN0fm42dXpEOHNWK1ZtYmdtSEsyIWFJZnZOQzdXS2pfYVBmbnpLPzY2Z0o6LDZxXk84XVE9Jk8qVXVLa2BkPjBENjM1XyZHc3BtK2Y8aUg8eURDQTlXPyFgPWY3bC8wfEkkJT5QYmZmNEVTaDBuTj9wZFBAOF02ayYpfERyejJgPmAxOyZTMFYkJV5QPig4dk4mQmExRHZ1VUs0VypQ''@;'; put 'put ''WXU2MXZXUkddQHNQTjRIeHMubFosSEdTbDVUOGdDRihGWVdVVTx+MT1jY0pTXl9PMDI3SU4mQSw4Y1d8MnROYlEmOllJWGg5fnRZZ00odiNJdX5ifiR2NStRZi9KfkA5d3pic15PeD00SDZPKDBBK3RTN0cjZ1Q8S1dbN0ZZa3k4QmxkKC9dbSE5SCkmd2wwKFQzX292TmlDdkpvfj07KzkzT0V1''@;'; put 'put ''XiMjbkMkTSglYEQ8OFhKZ0tSbCNtXSElUnZnbC9sMGpZZ2I4bmg1LjI6cHwydTdpIyZXPyJKND5uSF1iaylrPClUTXB0dUtgQmwqJnEjW3F1UH5xcUlYcEhEKUdOWm5XaHlhSlZ7PFY8NHJ4YnIrJSQ/dnVUeWZfZCY9TmZ1SEdvMXV5UWRUK0MpMVpjJnUvdys5bj9nZSNSTEtGL3FLIUA7ODVr''@;'; put 'put ''aV5OT1hEZig0PFRiTGtxWE8/YDowNlVLTz5XNFhAIWlMdmJ+akhQeHZ7dihZVSNISzhzMygqNVNFbj9JM1MiOVkpLyYlMWk7I0U9L2AvIzhUfTdTNkNCNStzMF94dnldajtQOzh9R2MoJUlURVIiN1g1VjBOWm0oYERMTHo7Qno/LzB7MSohd04kI3JbbVRRKXojR3hTenE9Sjw4TT9+bVRmV01O''@;'; put 'put ''ekZfZ21eQGU8ZnVXWVE0bHFuNCJXNkQ7dyRKYDFBJUVbWnBoSV8mPFRbMk47ZyxQPWx2THwlXUNpNltuRypVLy5EPF9sUW5FPFtfUlY3LygsOEJufU5NSkp0OGEjZFpEaF9lbFpmOnk9LCNpelI5YX0/fj9WWnl5Kyh8PkBrNkBDQUkhOGYvKGhiNWt4VClUZVo4KlJmeUphcl9fQzpjY2xJMyYo''@;'; put 'put ''alheWzVjZjh1IzUoXigmRWxCWHQzKGFTZ0g2OWFGQHs1QiNuNTUsOSE6RDsvYipzbHpIKXZ0In09eDwqPkRNK1grWzwke3hIVDNrZGMrPDQrKGdvUU1IdyQ4TX5IOWtYOVt0Q08lSFZHTFReP2JYVT8qTXk7b3AofmVOYWhmZyVNVHt4ej5rKFNSVGJgM3pHdGpzSjFJdG94flN9VEcufCs7QXtP''@;'; put 'put ''SyhIfVFyRnR3TXU5ci5BbjtTQUpEcD9JKjg+KzdOZio2QWp0ZltpUDtJNkMheDFuLj1gVVErckxJfk16WjUie15DJmg9MyF6O3J1aVdGWmheb3FJNyUxeG5DaFlyaitOXUVCMnt7V3RNbTZvWHN+PC8rNEUpJXxJM2w4VHB5dCxATV0oNHFhMFB2MWZ4TkEjVDgqUm58R3V2STV8b2pjbkxROEx5''@;'; put 'put ''XiYmKSxeQ1p6bWNUTTlSSXskNnZLR1hVO1A6WEZBalkxeSFpfVFkY2F4bWI2cGpHeFMrfjpJWXJUSEQveGU6N1I5YUd9Qmd5UD1aaHgzL2x3ZCgpSklrUTIwbjcrLENHZHVeW3VuNV0kWXdUQypoZ3Bbe2krPEE8Q3NYUDE1KUVWYmJjNHZEQ0BtfFhvMj1+dnVIIiJSQzw4YiNGYHd2UERXKFYu''@;'; put 'put ''anY0KWwoTGV7W3c4PEVJfjJtOnRfeEBjSStVLlR4IyNyXjl1VDw4Kn5le2lYRm1gdnExaE0yVz9zaEc8amRoVGB+e0hdOl5EbHVXcixQeCZzMlB2ey5GU1J1Xmx+YGBPbVJYaVc/clVaInlMLiwmVXk7OCJxNHRlPE5jPzlbZV14O3Y1SyJRI2NWdjRxUDNsU35eQGRVaTNDNTt1KCZUVXR9c3Jv''@;'; put 'put ''bEhjTFRVLk4rI3FiRH01Nm9CdWd1ISxiTj1XITN6InRHRj1iO0pdXWNTLilSUjVGSnMkOVBIRStuakVrKmlSWkVvTk4oUjl4JTU0QXRQOiw3aV8kMyl7NTJTTGxyTDpxKEVUIiNJdD1+UE1GV0shKVF2TT49IiRRdXpxbEc2S3tOKHFJQyVfIywheSMzOUYyJkYkX1s1MG5jKjk+RmNvVmt2Pko9''@;'; put 'put ''QkZLIllaI2phTl45Pk5vPDxsJk03STRRcTY0Lz9uRDY7JF5Xfk1gWmJ6JSplWGtaVUg4SHR2bTZsJmFyLjRxUGgkdCNrYCtnVFdlJG9nVEY/eml6UX5tY30jLCUhMU0jbjVuYUpPenh5XnMqe2VVZ217YlF7XWN2KjVQLzJIaWl5MkskUz5rLytuNlVaZytOaXk/ajFbSFlQImpYZ3drP3QxQiR3''@;'; put 'put ''KVFaSzMpV0ZNWkpjcHgmUUBnRDtjcWRRWDxWbD10IUNXYHNLWzBRMiR7SXZeVXBqWiYrYVcvKXJQRVBVN19YKixtSUtWMGV+eTJ6Z2l3W3Q9eEM3bUY1bWprMXc3MGd8YWwrR3dhbmlJMFE6RmdMKDYyVyFpdkExJjF8K1BaOltOcm9aaDR6bV8hTERBSTM8ZlVKPzZvUUM1e21kNmojSjUqJVRh''@;'; put 'put ''OHhZeitNVldjUj58Vzc7UkRiPDo9Q0lmW3VEe2BVJWQzQGtzXjsjdjFAdmp3eXFnfmhEeH1iKXp1WkB9LCwiIWFhZVFqelAqT3pfNW4odmdUYUFBOi8uUEQpMzQlQDp2KnBfIVs2blIhPHc5dGkrXlQyMDVjRSNONiJRSWA9VGpnUW5CKHhJRWFmX1hoPTR1d2oiZypvYDJIZW0vWWhFbD4wKldK''@;'; put 'put ''OHQvWFpVVUk5K3Q/V1Qrc15ZW04zI1ltZHBle1EuWnFlV2lkMXNJeT9+TWFnS1BeI3wlRW57filXN3RsJEQiRj0sRGgxe1t9OS44QTA2c2BMIzVgMkt3OF1DQzo+UmR0K0NyYzB6NnBpLjA2JE0+N0c4eGVyNnFYW2xnOmMjWk9udWo3N18+fmRkNjZmVCNSZyU+Snw4aiRZZ1MvKkU+KkhIPClR''@;'; put 'put ''fDthdVN7eTpKP0tVOXBPNCIlTHhkQXYmemRnUjJbXkU7PFJFLzgqfih0KW9LUFBxfkQzXjNIMTAvNUI5fEwjQmdrdm5GL2dQRXZLfUV8MSleTyViMj1SfFJuSixJUz5GRWhlbDFxXj1SWEtRMHQoYDMmVTtJZ3FTaVVJeVJ7VyZbI1UjR0BkP2wkWlg8fG1wTlVCZiZyI2E1XjVhXm9+T2F9Z0gm''@;'; put 'put ''d0ZjLzQkPU1oand4Q0FVRH1tIXB6PT5yRSR+am9SWHdUZktVQWFOKihlPEtKR1U8V2kjYlhoIjZOSCJTWGhBP09xZiNibVRfQnJPVjYhRXtAXUE0JCZVODglRSpofE5ES0dgajNHdzphKUNsV2J9bzR7SSteeXVHYF1vbFNSQUAkKkpqSFNDamclITl1MmNWfjpRdH0mNCw9fDVLQythUU10IVZN''@;'; put 'put ''P0ZyaCs/YldJUjhJMGFJeFM5PUtYWmZhYVdseT9kb25tdltnPEgvLEhdXVIuRTxuUGBFKkdSamRqNiVsJW1xVSs1ODRjRD9fRFFFcEEjKEBYeiNGYyVEJnhDSENVMyY/dndvW0dPMEQ+MjR6dDVnXl1hKHE5SWZZS0MxLF8kPj9OPEgvUXBCKCRTSj9eVW1OVj9iUVpQUD98VTp1ckl2S0U7dn45''@;'; put 'put ''ZnleaiRsN056PmtKIVY2JClKNDw9PStPKSxoSGJgbWtLfTJeSS8hIUdWSyg/IWBkRFg/PVNeV1hnY31fYE0lM1BdW1Z7Pyo4WFpGQCNiVGRtZjJDTSM9cnlaeCFqfmgjImhleit8M3U/L0RTUE9IU01rOT5fMFR0X0xvMlolZC9HWTFSYX4zPzxETU17Q3prd34wcSY7T1YuPi9+e3kzOTJnRTl3''@;'; put 'put ''MHBZL359KjxFSVRZRzdVRjNfPVIoUnN0eXJ4dVFGbEpTSCt7dF8+NWptaV5Wck5FMU07ZCpoPX1zRkd+Ry5kREVlOnJWQV12V044fWJHaDcqPDx6SnBOSHJPVn1GKDh6UGpHXl1SdHJYfEtJcW9LcnZraSQ7eHAzbSwwUnE9bVByTT19emJhWmB5Vmx5V35XUENFfFFAI09BP0M+OiQ3RTdhTT0+''@;'; put 'put ''UHBlc1owNE0pN2k2NiEsWyVBd3FXQHRbRXolL0EmPWdtanpFbndKZ01zTWNGWX5xQF1vPyJ0MXJKM2IvM0doZzBAUiFQPkc6TDl4R09NanFAemg0Z0V5QEAqP0dIMCUjVUl6YlpJMnFoZmR5emEuPClYdH1RNnQjOFNlV1chaGhpX3clTmUpQ2NtSU1kVV49Ti5zOV4wPkV6SnRzT0JKeT54XVMp''@;'; put 'put ''Vmt3aGxJPCkzTHN0KzRoRFk/UmNKRG55UHM6QiRrUTNqTT59aEM4VmkuQjdzQWpuaV9dLjR8KWNxLitMUmdlSDZrVGMjR0RRRXI6X1ReeSg4N0c2SiVqNj9ZaGhCKW9nPFokLmdCMk4zUTM1O1tAd2ApI09rayhDcElHaERGYHIyOnc3aVtXKn1dSDVXNFpyX2xsRCh4Yjs2dDB3JSxQTGFWZHR+''@;'; put 'put ''IzxKPFIlXV5CbHZ1IW0yQ09YN2JSUzZkMTEoWjJGRXU9UDBIfFEmdmhWK0h8VClkbTNSdndER0hQL24ySlMoTiguZW5jXSUxRXt1K2BuT3s0OGhHVXoyR2JQTl1UeUs/Y2g7WWwkImdqLk5eOllgcGVLdShTYkxHM1V3V2BpYFF8aS9XSDM2TCJyWCslWnk7b0ppRixyX3lkcGR8RlltLzNaKjVO''@;'; put 'put ''WHlob1g7enQranVheXMhbV10X0FzUm5Qe0l3TCQkPEVJSFRXfVVUWjRRY0l9cyFPKWAjIW9xWkh3MUMmfFEqIzU7QnRTIXZYNnVuW1k0aG5+UF1yViJYMCRYQFVjNkJ6Znl+PGVzTGdaWyQhRSlqTWZIaWhHTjdDX007MyROdj8vOktWTlU9OThqPixnPVVHOmw2M0kmRj9bfTtaXn05PH1+NiFz''@;'; put 'put ''dGApPCkpQElDe25eP0MvMXx8N1hEbFtrbDBHbzhUQD5MUihzLHJ1eU9jPnV6KTJuRm9CZlMlflNnRkkxO0k8PFpZaXx7OjdsZ0BOJG1xIio6ISJFNCZjd0tTK3ZNPnRpeD8pN3JrVD1BXnxLNnNhT00jbSlTbnxSIj5xWnQlfWpgSUJvfWRFPDdgXkdbaz8lemV3MSNhbGskfH48IytmWWc9UjhC''@;'; put 'put ''JjRldG1DZzM9Wzk1c3U1ZTF3fT9gNjhHUHt1eyRtX1Y4OjFPX0Awbiladz5DX0tDZUwod2ZJYlcrOmdHPW47I2w/KlBPcDRhNk5wYzJvM3x3VkhqeUM2WCQwL0hLQiw1LDNIYEkoaiMkU0VIUG17eFpBViY6aVUlKisyMXYpU29SNWA8P0c/dX5jIUpPSWpWKDJmN2UmNnZaWXIpMVJIOUIqSVZ3''@;'; put 'put ''dUIkdCpnOWRXeVYuP2N8UXpHWCxlSUpDK2RVXj1ed3AoIn5DNyRGdkxRYjh+OHwkKX1KWn0jfXo5dVo9LjNCWnJKcVc2JHlFR3pTfiZkRHwya19iOlA+Iyh+ZEgidktvWWsxNyQjamQ0WWRmWjlRdldtQCtgYDh5M2pGTU5QQ3N9djo7fDx5LzJtU3s7I2ZXLz4pKCQ6PDZySD4lKlZHbCFhNmEk''@;'; put 'put ''enNjLGEiYk5eTDJXLF1eaDYjN1JbQDR8aH0lS1t6NXV2PkxWKEtJXml8KyleQnhFcUhOS1BRWSwyT0dAYU1YImppcUZwN2d+e3RyfGhKez53dmBydUUmWUMmMEw7IXxXTmxMWngpMGAsLkE6RjRXJkt+MUNxTXtYRWNUUTh5V3BYMH1YeXNRY3gkM01ffFRjKThNe1VrO0R2NE1rbEgyNGMyIWlU''@;'; put 'put ''K3NaYCkrJk1BbiJvPXg5RX1bZk9GQXE9TXpaKns0MDxAPHZvOFhUblM9JVA1PkksQTwhNG1HUF0mJX5uWyhlJUtaSkt7fFFjeElUeEYjfiZYeih1bUhrPkdaXUdJcWRvXjFMfVY9QklnUCw+UVZwYi9OM24sJFoye05dPiQhciR4V1YvOSZzZihAXjNLO2xOVz5RKDxneENhRTssKmFaPjlxOjMh''@;'; put 'put ''bmh6e1I9QTVGUVFyKmZZI2tqMGhlNXpdXXkxJGNiQFAvJSs4cmFkNjhgRyxId0dMRF5KTWtvWzQuVloxeSJEeG1MMHB8VTxZXk08K0lITUApMzMhfm5HL3p0Kkdkc085ZlNMSE8pa29NWCshKVFVVTYlMXwpalVIRDRldHImWGwsX3BiYiI6IXRBflZWO1khKlZ1PD1+cjwwbDghQixZIygseXhr''@;'; put 'put ''L1RFeTt0RnM9ZHFhbjo3V086V0w6YFhAJjNjRXFPMTBGRShuSHU4Ulo2SkRmdHtuWVF1clpjO0RJdmozT29vd3R2Z05oRFk0OCY9KFV6bnRbbzVPNkNQcUM6KDIxUFA0YnZRS2kufGttK0I8O0xlQlJnYlV3VjZbYHhacklFSXxWNTl1N1sqTzBMem09WVRzKHhaQ08yP0Z8NzpJYSZ5LGtANSNB''@;'; put 'put ''VHcwRGJrfD9xKX15bCRAUEYhZEMid34yRHcxWHg3ImpnZkB7KV0qPFpbQF0mOEdtTCtAKix4ZyJBIyFLciVzVjw3TWUmKj1VVmFjSWZSJCNSYTZybT9reGVdTUdlSnRwUX1LRnMucDtAJDV2YCs8Xl1DLGQsUyoqUENXMyEsakVlMjxnIShTP1k/e0lWYXYhNG1vSnJXUipONioxVSk+aX5pa0o9''@;'; put 'put ''WVpDN1J0LmF0JCNiZyFRU35SalgmT1hIQzcjSV1PdVc3YkRYajJ5e3BVPFFUXzF6bnQqRkNsdSJuZCgrW0B4Om9LaF5eUyVYMGlLMSlRZHU+Y3YldlVkJEtHTS47Xmcxa34rZ2gwXmR6WD1PQEw/Y0MoXzk6dEBIVm94Ym5xMklxPXF4XTRmPVhCJmNJKGVDJFBRWzR4XUdWRjM6LmpDQk15RFcz''@;'; put 'put ''PTF9THhXUyIoX1RjVmZnM2Zednh1KU0pKF89Oj19bnJ6KUZLKDJmKlJRU1BROHw7ZzsuMEU2PHNPZlg2KExKUTVNQClzXjQ3NXpxRiptfkB7bnxAQFBSZGR3ZiMoZXUxdE5GNUAsMFpyVjlVYW1yKVJNU35gUD8lbH0xWi95Zy5YRzREKj81KEprbyhjXjM+QnB3SSZTYn08YW9CdF5sLyohOz9D''@;'; put 'put ''STEmWiouJipVN0kzfng3WF0xYTw7RExsODMzZzc2K35rUyhqfU9AUCJMIyNhJFEzSHtARyN3TGk9U1JsOz1BTi9vcm9EdkdMaDAqQD8oUXcsQjR5RGRLbGthVlpYQSRzZUxGP2k5UFBsJCskYDhHdkBrako8XiY2W3h6WltlLnNxbWAqakgjQ1U6M11dTCxHK0NgU0Z0YTs7P35YbzNaRWdpXT5f''@;'; put 'put ''X2B7TllFPm98Om1IZUFaR3E1Wk1iWSI9a3o0aFdhYmg2MVg0MkB1SHlTbjpaSUZ9RzlIeiQuNG88L0ZbYFYwI2kmKE01QEYpflZaWyhybkBJMCNkPGZTbTNQNUpbWE5dfWh8LEx9aHtGOjo3JFovelgwR2kpRiZaaS5AenVhIk1jZmJqM1lIK3FZdj5pXXxEInYpM0d8NWphIl59KjVHZ1YiZzxr''@;'; put 'put ''LEovYngrQytQIiMoVEZBTSIhfmRJUTg0OUBMQUgjenp1OkwwU19XJik/Oi8xRzhQTCQkT05IX29oPlR1L0kqanVqdjYsSTJFNShtY1diRUozJF9CQGdUYkRzY35scjtHYWRbRn51O1hTSnMwSlNoSkFeP2RhdWZRTXkrOzMmNmY2NlRFYit8QzcxfWU7Q3EkY35jW0orN2RsVEBXcTUxSzBXYkJA''@;'; put 'put ''Ry8hU2ZjRTU/WkBmJEp7OWBkSkl8WUw/Ni8oP35eNCQ0TFcwRy45WndOdV9Pajo6dk9eOWsrUH58V1VKdEMsTlt6UmIxZnVIaXdBTzQqSERlZGRJdG4sIWUiXyIuM0NScnZ0fkJFamgwbylOY35wcVF8Om5QbW5zRVZ6aDtPUzd5OkE3bDI1O3dQc280eHQhY0d9KSF+b2hPQmdfZHBgWU1dTytS''@;'; put 'put ''fkg8PjxmVj0oRjZoSHRRdWM9LyEvSUZvNlBzYW5kdllkZnxifCgpJlI/KkclIy5AMjM2ZjRsZWxeNzspNltCKUY3Lk5kRSFzNzJMZjB1I3osaz9edHB8QG5bNV1EN3FuVEtWRmgoUmU8c0R7WDEwKjcmfjRER3tgbTJhJVVCcHBIOHFaKH0ybjp4MG14LFQ6b2N4XzlwaD9nIkNdO0coXUE9UHBU''@;'; put 'put ''Pzg+Y2VxZERvZW8zWk1yVGErJV52SUhVeSZ7dHI9P2FNRGVaYHRwMGlGMXtRWVlSSnV7IngwR3Y5XT94Y2Jfdlh0Q2h4PXQ3eXVjLFtvSmU1bUxsWXM/dE9laXNUOGIiMEQpeUQ+PFpgOEAvOH0uJldTSCQ0am4sOz1AWjNEfUV4K3NKTDFIX2JrV2xHY0xGLit9LmJXZyNfcl9aQVQuL05uTDBU''@;'; put 'put ''O2k6SSt0fi9gRXJ7QTdffkR7dFZ6fV5MeDdgVXRLOGgzMmo9Iyk5Xyw7JD9iWXIzIXV4eGhfbkxSVjAoQmBzIyteWTJFSCxlS1BzdCthRkEiVCsyTV00W1I7O1Z8eVNoIT5SUy4oTFI4MmNKZFVScWx9NDtbfkc+PShZTG5+Lj19YiI+a1o2VCI7JkhhVGZnPjprVSxCYmgiQlpEU3g6PU9vRilR''@;'; put 'put ''Ujgqb010Jj8pajJIanBrWS9tVkI9RUp6fDtnOj98dXNEOHlEdi5+bktiakdHKT1QfFZncixdJChNOzkhY3Y5aUhPQDBRYiFAP2haRk5wdHEsL0JAQmEyU1RCL2E5VT1EN0h3Nj56Ynl+XVAwIXw+RDVnTm0xcldRfC4vd2R7L0diWSx0Uzo1bnJ8OE8zXnFZTGMrdDc7W0AiLy9EQmFAKiVEZTd+''@;'; put 'put ''aTxkKyFwZkksKFVFUUhqUCU0K09dYmFdZVZxVTUvLkY8PGUqWSpQLCNyYCxjZ1BNdm0oMkwrb05QW25qLigpMnwoaCk6eGlrWDZFOlhiMVcvMkZpMHVacGFFTW82YWBXL1Y/cEFHZCxPQi9+YFJrZG1PI2lxXXFGazZqaTpmMnUvPGduZXw8fnFCaFdBLDZzMnlRS3NfbFdRV1FxVl1xSDFAeTo4''@;'; put 'put ''e2VsKmwxRGNgYyIsbGJCPyFDbiU9NjVWWm5bZn11QzQyVl10Lz5NYVpvUHQwXy59V3oiVGFfdy45d3R1PWR8aU1zbylAV1MuTWlXS3E7TWdgKW9mRiZ4QnVTaTEyd1lQUjgudX0zanNwfltbaHdUKEpGPCVjKTRHUlduLCltPF1ANUZTLDx9XSwxN1BoYHZaMWU9YktHV3hGWXdFPzhHSHI5TG0w''@;'; put 'put ''RVNCI2ozSmI2K0s2djFeYyZyQC5zfDNyQEY4QFhzJWMpTFsmOnYkLmJRVFAiMEVqKHVXIX5hPjMuNURZOU1QRF41IWpRPilUT2M9dns4KjVOVD9DJV5iRyZAR2Ztb0VfOC44R2ZVZEosYWNGUDZUYD1aM0lJeTQsS0VKJiphcUlmYmspb0IoWyJ5LkkvQjouO3p4NXtWPiF5WjJzUEFQKTlzTFRq''@;'; put 'put ''bXN5Sj5qck10SnZDU04mPFErYTIhR1Q3RU99Tk1ZPiYoIyhEIz5EOVYudUUlLntsfTQvTThVKmUjIVRAJjkkfD1KRDZOcXU6eXpPXXBlK29ZcV9iaUBCMl8mRls+e29zO3hlKWM6dWZZY3xoWjRbK2E0W0VOfE09S08uUStUeG1haHMiQ3pVKlIhTU13QWJJVGlLUEc6SShOOE1EZmJ8KSRDVC5n''@;'; put 'put ''NmNRTC8zNG12cCFbQnxKISVddU9eOkcwWH48Sn5hQl8rWjlKO1ExT1A0fGJ3JVYpZUMxZHsuOztmKVAuKV1PTTo6fjVufl5tYCoqfUFgelZFbzxgPzcmX2R4Ni51fkhsckVZXTQoXjNXa14zTXs/Zjc4MDZ3cnM6MUttQGwoNlZBcTo6WihEZXRmViVmWGc3O25oY3wydkp0ZF1mVDB0UDFsZU5Y''@;'; put 'put ''bHw4VitEOyh3MVh7eWFJe0YuYWUyTl1QWlZpKSRHXUoiZD9Zcl1MTWVHdkhqa2EyI3U/Rnhgb3l8al0wVEN7Q3tDP1QkL1RZcjBzbiZZfD1sOTpPblA/azk3NDl6d3ticEshW11XclYmIkJDP2gyfjJAaTA7QTlmXXdQTCFuNUkxa11JfHVTeit3N2VXLm9UUlRWYmUzVz17Lm9JPG5dKylXfWU+''@;'; put 'put ''Z2FsRnh2QHx8Ym80KiIiPSVFaD1DOVNLbFhdS0Uwb2ovUyxGPF9xJnFVYUsmYGxdT2k2eGFjOk9TNTtZQ2ZpcDBTP1shU25TaHBoYVs8QD9dODE2YDBxQXlDLkY1X0FZX3R6R3UxSjZBQy9CU3cjJEtQNSRjTl8uPmI6S1B8JCU1Zl5OdGRYSUY8Kml2e3p8bjNPRkAwNEd3ODBBSGtQKj1HUn01''@;'; put 'put ''Vk9lVE4hUlUvV0NDYml2SS9DXy8xYCVLejVjLjhDYlpLMjFHMjZFT3lNYjNXd1MpdURMQE4uOlgzLiNobnNkdjpZdVQldlhnKU1ZUFJtW19iSGt5akg2a1M2cE8wTmwsZHU6dzw4cTA2VHlIT2IyNTBGSWIyLzA6Y0pZeXVkeD1sOVZZOmR6NTk7PUNiP1lLazckQ2R7MyFgRy81ZClNQnl2W216''@;'; put 'put ''PXZbNVEudFtETUM0R2JDNGRtN2JOPU91cVdbfC9ZbDpndzx+ajw4VnlqMDYqT15kd3U5STkpLEhNUElZeEIvdF52Lltwaix9X28vJTVyMCNGaHhoZEpuWVshYCM/XWxHOC8xUHFkbiFFPzVUQWFXI2VYSlloX1tzN0ksUCIlWVpJOFRPQ31bP1hTdlJWK2xYUGFhY2VHLyVCPk9GKChgUCYwZWlL''@;'; put 'put ''c3Ikb1hDR2FfN2tzYl52MV9oS3FUO0soWmEjYC9WJXBmLnhiWnZ+NWxDaThJKFdXRTk7dG1JP1skXUcqIzZNN15iOlFRc1NEIVcuPyRPLGViLyhJcXdeQGttfEV3SzNYdkspL0guSU5pWSUrUj41PXR7RW57JDtNfS5NZGZuamw8Z0t5YDVSekp5aSp0Q2gsdDRmLEszJENlcyYheUlXW20uVyoj''@;'; put 'put ''eTAlMT8pWj0lZCpAPWcyKSJne1FSZS45YilIMVlyKDBHOWEkUSNJcTp4TWtHekc0VmBWa0glZ0BwSSpIa19oeDBwOENRKiJyT3d3cSM/P05dS3UxYUZCIUJ0aCZKMXghZnB5ZEl+X1FtRklqTm1dQCNyOFpJQXBTY0REWno3K1Uiey9VVXxiWGtfUmR4MSxfZzd6JWY9UU85SEtiVDpRekZQcj18''@;'; put 'put ''RCF0b2MheT1jQUlKQjgrbEg3OHwoKUloWjk0RE5wc11AS2NJV3IpSjZoVkQ+fVdXa0pMJXUvTHt9X3Y5RjhTaENjX3tCUT10TCVBO1ZpQn5MdXVMXzckd249SlVHd158S3ojeDN8bUU4RUNfZlB5NWdUaTNvL3VsLk8hW0NhZGtrKXUpVn1oa2FrMDBkSTwzc1h6Jn1xJUlkP0JSOkwyeHNgd3RG''@;'; put 'put ''TTttd0k/MjpxMCt7N1BCMiw6T1FQKk8ha11GMi9Edl1ReX1iU142JXtvUDtOOEJlQjhRZUI4LFJXOEltSkVYMT10WyJoMT9+UzguYzNPVzFEdXxiO0ZjQzhDQn57Z2J4bkc1U1BVUm5qQWhaTE5ha2VWclRyJFRmcEtnYWZYV00wSG1vZDZfbWQ2c29saV1VdGlhfm50N096Z2ZAangsV3ZdeGth''@;'; put 'put ''bXJCM1JuezNUNE5qKj9MP1tJOVBsZTw3ZyxrN05sazxddlNoTiEuZVtKN3J+SCJxUTFBQ21YeGl3MERRUl1hNmMkRSgkK1J2e11xdUxsRltKQGtZV0h4TEc9Y0p2cWpHNDVFaGNmNGlJZUk3QmhOOix7MFE5dWVoOGR9eio5JS5haUtpVC43dyhfU0IkQWg8ZzlFVjYmaiF1ZXpYMWVHVSJWODdZ''@;'; put 'put ''UDgxQlIqQV5HZS45dCVbP3FQajl0UXJKTV5XIUw6bC4kVV9TN1ReZUFzLF1mQiwwKSZrb2IlL1BUeDFfbiF3IXtrUEs/dVc7U2RqPURQQUg+WE5UQjEoPGsyOU0we3QqMyUuYTpRaX4xSCpzOzklLG1LQ15WfUVSMiQ1PEYpXyF0MlU8JDU9S2YxNGJ8TnxNdmRUVEZjSWNtYkI2SUMjSiJJOGp7''@;'; put 'put ''NnJWPmNmdE5yIiFjS3ZaSFM1Y3Q3WzE7emVpdTJEWWhZVlE/PGE6I0xlNzMlNlpde3laSUBoPWszbipITzNrJnpsOURGX3tyIyV6dkY5fCVSSmAjcF9jUSosTVVvI3QwO0AoTSk+dSpSVnk/cE0lS2RYMlFmKGgqPjhAXmBlNGVxZW8ldlJiPlsoIUEuRjgifWhwJCVkKXZSfEp9UVI/OSg/cytu''@;'; put 'put ''d2pETmRqVj9qYy9uO1Vtd21iVHJ+SVpZTUMvSSJOdHgpNUklKVMlO1kkSWZYZ0RgSTNPX31pYVQ9PSE3TyQvfGxwL1R2dnNRT0dhcEpvbnczWT1nfnwqcFFVZD5ReGJsS1dRUlNLfCU8di97TTs1ajglIWo6I2AwXWlkaHxxfTZdJTZhKEY6XVNmeXp+S1RoS28xITA7LFU+bVBTMDc6RyR8UjFq''@;'; put 'put ''Llk5eEM4JncmU2lHQ2pgNS5yLj1eQ1FxSjJIdWs3WSxYdFR2LzkmKWticj1ya0BlNWVyL2MqKz1WMz9FZE5DdmtrTmooSW9tRCkzbml9XyN5dHlnMmReX1h9QnMrOVB4Py4kKmdSZlQpdHN1Njo/Z3A3IX4wPH1QRkltOXcqU3N6cGJNZnNDZ1dDQiFGTFZyKlt5Yzc5TCZObCpFZnomPHVbV0Vn''@;'; put 'put ''InUodnVaMiU/dSV2L3pxNHFWXl5+NnFWbyljV35aZywpS3dqNUB0MGx0fDZHNDlSKlVnX0REIzpycC81d1ZYXSpzKV82fVR0MU5dQ1lRJE9xWS8pSXlsWlpnIjoxQTZLOWkhb0poVl88Uk59VnRsKSQiSGQ1Y35PaExSRnJZN2QoUCk3aCpaITU8Y2xKcSVWWF1ubSJTJSE2Q2JCY0hHKGxiOS5w''@;'; put 'put ''T3JkMU0mNTRAdzZeYH1Rdn0/O29EYXljRHROXUNhcThNSik2OyV3eWkkdmRIP0gxY2YwMihQYlkuOVA5dH5SeSFOcW4vRldSY01NME01VyFKfl98KGVxXkRjSFVSOGQkd2J1UEsmaEAzb0hvYXs3ZjlVTzhFOCt1OEpPN1hhM2dmVTZdYzZjeCRwKzg4I2dxQjpYdkRWYnZhfU90fXtGeWF2KFdE''@;'; put 'put ''KShPPipfTn13dVg4bEF3VDN0cjtMeE9kO0ROWU5tYGMjU0hmd1FzeGZEKWxSYCwzTmNla102TGBka0UwOTNKTnxYODojPyh3TExsNUE+c0RkZDVCUDV0cmFlaG47ZFpLUSNLZD5yOyhKVCNNUWQiKSlxVEhoVjteOV87VEJbPWMyY0NkdF4ofHIqVXFeK1YlWUgydzBpXUhlRTV1Uzd0NDVwMWl4''@;'; put 'put ''YWxNP3kiXi9PVkZSdEcjZE9wYEUqMiZ8IVYjZzUvaTd7fGlneG5CcTJ3LFBELmJvRldjemQ8KS5mKEhjSFZFIWtpTH4veTRxd3pxZlo8dTVWZHgxWVUrKHF8UlZnYzsqTWw9ZT4vZmAmWmNGaThKdEtbZSlOVWVxez9Oblk/eENoViEiJDZMaGNCeG85YShWcHhmeGZXOEU4VUZHclhwQ1k8N3Ns''@;'; put 'put ''ezNTKVQhNHk0RjZqW1hSczgxcHZ1aGJDV3kxNCY0YEJMOEY2SE9Qc01UezQzWkhZZnJlR25yKCNeWFZAPT08Nl4rd2tRcG1Mezg6RVldQ1RwMmdMKW4wfTwiW0VKOiNlUG5LMDo/QEY5ZTZ7aiZzfXBVJT1YeUtrZmVgKkwrKGVtWyU7WGFpRUFkNC9gPmFAQCVCVFJCIllSN0FLY3U3eFUrMlhZ''@;'; put 'put ''WD40VjcxLHF4M2NmaTEwcW9TSFUlMntfZylIQl94ZTw5aGI9O3FKY1ImQnd5b25dQ3p1NTEqKWY3eTZndE07USw5TTxpWmhnNTNoaDhBJFp8UXtae0RHfl8mOVVdb0BLU2dSS21hSzl8SkExOHhWb0txankjaCxSUCthKzFucUZuUlAxRCFIc2YqRSZYInBxQDFSSGRoeGB2Q3pbWFlESjtHOSR5''@;'; put 'put ''SU89M2x7fEs6OjY4WilYUiwyLkRkfCl3SSt5cy5GK3Jne0Q0JDtbJT05YypnKnNzO1dfU2tLYW5TW2Jde0txJDtdL21FYko0PHAlLnhaJEI2fGtUbD1aa1A8L05ibVRmczBzZXF8IVdyQCV3RTVROXZFbjpjdmVwMFVoSmNlW3hMckhle05dTDhtTFczR2ZeIyM4UyRHbT9me15LQj5aPF1SJVoi''@;'; put 'put ''cFthNEw2KitkUTx8cFFsPCQ8NzYmTDkleEZAX1hbZnxIPyFHXStPMVdgWE83KngpQVsxT3hNPkpFVCtNaTNaPCp7R01jcEhpcFU4Qj5HMnJ5Z1hQZlErcTx1cE9me2FyUyJDSikwWj52YlAxNXZ3Z2VWOUpGfW52MWQvM3BmWFo/QE9taSJoXXgmeUcoWjJkLEEuVm01VU9PdnhOVTpTc0k5XS9p''@;'; put 'put ''aXBkZ3ohIyVgJCslNmgqcDZQRDx4U1JzfUZrU3h7Pnt9SW1OKDVxdVJNcXVCPml4O3kmdkM+d1hqUHc8XitXIX1qUFYmXkx4KklIX1hLfUksSUhXbEYoN3JTTlJIRlojZEtMO0M1XXlMOGs9ZjxlIXN3cDhhQEZyQTg0ajVfOnxlcylCdjRdKXpgclBkbyxAfGVeMXg/I0dIViZqOE02MXt4e0R4''@;'; put 'put ''RzNobjAmeVpzZldodV9Zc1h4JG5rbUhjbUNeIlpgT2lHXkNjQm5GQyozXyg4SVJGVWNeSVIoY1FTe0ddUTN4JGQpTkViQX1pUzsvcTV6OmBaYilESjxDRlVdaDs7SS5kWlBmOUVDXlkzJkc+cklhK3pzU0B3TEIkcTRwO3opLFlnN0psNH4lRGIrPFRDSDU7K2dnZSFiKD5wbEQ6Sk4zUk5PNmFF''@;'; put 'put ''Rl5TcCpZQ1d2b2xEOiViREZdXihiOXY4YWExSW9NOFVTP14sfWdfU2A6Y3NdbXRiSXB4NDRkNS51RyQvMT5fWlRZWCZhW3p2KiptYChLVUtFOnUlfCN6XTVsO08zX0gyLEs+dDRjd2pNSCMpb2tuOyt1MjEpPCJIUTlQcDRSPVBmaU5sUCNlNS56VjYmO0YleWNtNiN6VGAjJV8oPFc8WTpLb0Vm''@;'; put 'put ''THhMUV9YMCxaX1hAT3wzMFlHMVdxJERKV1ghTSRseH1sT3ZZWEY3Xm05dSxQdGtbel1tZmtrPUpFUTF0ZyxsQWZ7UX02bVZwNG1IWUI/NUdLQUhpbTBMM008XW5tInBaPHVmRzsyWkdyMzVeOXBxd3pkaHFXX29hclNUIjZbMHFRVDlPWT40ekdFOUp6amFyMjM0YnRHbTMxfnIsZHg3RzpIWXtI''@;'; put 'put ''RnFZTkptbUoqQHxePXlzWil0JTsrQ01MST9TaEAqIzREY3g7Q0p2S2JpcUpKaSEsZ0BXZyE/fnE6NjUubnxKMzMsM0ooQFtmYSRPfF9TUD5mNCxAJSIkNG96NEN1eVZMV09OTHRzOGV6Y2RgTks+JGRQblFgMjlAd3EvUFBvPU9DRSl8Xi9MRiQ6LnYsaSpZIjNZaV1wZVtqUVlZRWJxRjE0OHBm''@;'; put 'put ''KjxgZ1FkXXd1dlMhWyRnI1I8O3kiRnZ6dkhYcjIvYEt5SW02NDNTOTxMYkRERWx4VCVSd3cqI0FQWjlDYSxda3FoQyF5XWZ9PSQwbitHQjp5TkM0YTYmQGtuP1g1KUwxQDRYb0A/aTM5KSVacHtteWYqcWdSK0wsaWNnP2tuNl1lNCM3OW4zQG5sTD9LR0BeQHBGaUJRUjwza3JSOEplRSVtSDhg''@;'; put 'put ''b3JEN3l4Z1AyK21SfWl9KSV0VGsheG5SZmw4WzN+K3RIbDMhKVRBSkAoJVMmKGtYbSNyXWQkd2pYfCwzaERXUiM9NUJoYUU0PyF2eyljaVtUbU09TkA6QF9HUFUucDV2WH1gbC4qc1ldUyJRMEp3SUE3PkllYHNMb3ZlNVYhZms0NXw4eVUmJThjak5+SUFCXW51UHQwOUd0ZFphPHJrWXh1Z1J3''@;'; put 'put ''X0o7flBrNHp0e0YjZithWnIjLmdQNyZebzt1RWZAPU1xakJgXkEjdmF3TGZBUi91VywxKE5dSy9rSEIkPjkiUnw8dGxBZEZyNG1MOWlGZmR7fShpIytTPjJkRT9McDFnZkU2Z21YTCEoP1lbQGlgZUVtR0p5dmZqKDJEeXFAVVA/YGhHKE88NVlQSmVMT2o0IT5MeWNIISZNVVpgNipEMTZ3Lzdz''@;'; put 'put ''UiI+S3R2cno1cToqd3xAPmE/YWo7TS9zZHQuL3o5fEU9O1RSWWdgNWBvQmR+ajRydlVuam97JiQxJVJDSkNLVFZ5IllibUViJEZiUCY8e2M3XWB3UEZJMyZSfF5EdUQ/TDtmW1FlSjhybFUlemUqcEJyL0JnLzFLdyRhdXNIYkRVemx5dmhHKTAvOUs3Vmx5U2FsQnEyWmpYSTxiaElfLjwkYThA''@;'; put 'put ''cFl4XzZmKH1JXnBiakViRTU9fDpbdkw7b2F2YDV5eSsxd19VPGoiUnMkXz1wWDtCM3Z7TkpdIztvVyY3amcjdU9JJiUpYiNldWRfcmUqRmkjKD8kKW85TGdGMDA6YmxRMC4zSjF+Y184QVBqUjAxNHQuWHJ1aXdVRlk+ejNPcCVxZHc2LHJGNXxZUDd2NUpEIX5SQiN0PUpNRSF7Xn1IeFdlNX4v''@;'; put 'put ''KXlvYkUxKk5oTklCSFghTU1Wbm1WaTJkcmNQNDE3TyxDOSsqMEhOYjE2TDpESnVPNU5rUX5FTUkkZVI3YzZ5eWYyWDdRfHtpPjx1K2F4VDZkI2ZpJWpCJmB1SjBCSWwqRXkpJk9GZ1t7MnB9R2cjR2QoRzt3fFF6P0UwSnhYLmlDNkR0XkZfWXJ1dDwrUCxhWWUqfGFSTWRXQ0MpLHZPKnYhayU/''@;'; put 'put ''enUjeio6VjBUbSk3bm5lQH1UZCZ2OE4kMl1ob0hBK0J5PWZsbzpVYjNfM2F5P113ZCtLJjsjLn5udjVaO1khOmlJbktCLDBkbixFUTZsKGpDcSlEcyU0Wm5XTUk4dk1HTWJoRnBiPS5eMV58OSVEVnVMentDZHU0TF8ldG9sQ0hkQ2opVE9wMVQqO3R1UCk5ZGhwciRyfjJefDlsLDB5TCxqXjtL''@;'; put 'put ''Pnp9cT4jeGZdR309MmV7OFgsYFk+ajo9VEJ5NzY9NV58OVYsdVBNOyhKbHgjQmllMXU1cjtmZV00LFslMyE9Kkc/QE8xXmljdyZfWl1QdFlSKEwhU3dsSmFkNF1zXV06OCZpaCxqYXRhX2hVQE8xRi8vazIzX3VUR1tiNVd2ZUdeIWZsdHBNTnMmIUJKP35ydF9xTihLN3JLLno3eUd7YSJKejUp''@;'; put 'put ''UENwUD5zZXU2fDdzJjxCdDRiKjAvfi93WVdeOmRYPmpYcF1mfFMySkE3L1BpJDh4Zi5ncnw5JU5JemEuLGtIKyl3YkpxOFsrO35OSGAkZ2k5OGV4cGlXQzVUViN4IVt8Uk19JEhzVmwoMGB9eDtXX1MkdD53TSsxTHFKQnJ3P1tncyU6X0dXazk7eVZiblF2fis2MnYhKUNxMmd6RDopYzpbZ1Aq''@;'; put 'put ''NzYkTD4rKDglRHdqRmpZIiY0KzA6S3hCd3tKbG0pNVtHUERyKis1KXRgb280dGh0cjYwYXxiSDt4KEl7Il5oPTRmZXdLaUtmSWxPITEpTmZCXmNQW0peOWJqSn1jKGM5Km9iMCV9MVEiUCp5eXpwK29+fGg5VzpLMVRfbUhmOGxJPEFiRFM7aUdnMiRHQWNCfHQ2JnsjK2EkR3BEIVZuYTZAPXpF''@;'; put 'put ''ZHNka2lELFRyXSNMbkg+KEdHWnhvc1BpJVM2dm5zW01iRVlyZG9FY3cvTT9LdHF0TnVEQWkuV1UhfE8/Qk5yVCtDY0w5MlhCd00vMSYxTGIyYiJObDxAeTZXS2IyR0o3OGBAKWo1MXkkWHJsS3FtTlRoT3lEQz9gYVI8dEtaK1B0WCU2OHQxW08mJTpmZkBKLE4sSixSLDlENiN3dGljTHNEQzA8''@;'; put 'put ''XiY+XWI5eTtVJHFzMnZIWnRUWF9TaW42ODFWWC9kNG9VfXFbWU07VkNbVjdjaG1hRmdafGA9Ryl2OTdfVG0kVUA0WzdRUlJjOXJ7ZHxIRHllVUdhJltiT1p4ezUpI0REWCRqcj87dHUwJTJ1XyZPZiosS08wX0leNXg2Uj0haUl1Lk1lRHV8YlgzMjdEUVsyRWJ8YnFeRSVMbz5NdHo3JDArP198''@;'; put 'put ''R3U1dTVVPEA1dmZRU3Z7T3MiOXN4N2JMPXJCTStPJH1Db0VHYjFtN3U1VixGbytBbDV+UXJHIWt+fGgrcmAoY1I0TG15QTlbR215NEZHRXxhcnVoRCFMY2JIT2ZzfDI9JCxVaCQ2QkdqaCF5Nmw1QHlzITNfM1d9TVc3STE8YV95ViVgdCs6NW5oP0Q4VzhVNUtKR1BnTz4qPWEyQTNyPXgwNSUi''@;'; put 'put ''akEqbEMpKVpfMzQ0dTs4eXdMbSNIQ0YmZEREVGhIRnRiMkhScyUwJDZsUSFCcHVnJk9QSyQxdVVYUXkwSXlVVnFVWFE2MEl5fUpZMzY7SHt+RytjdnVxKiVXXzMxZiliM1VSYnsmRCFBaUh6NE9GZD9pLEQyRFF4R0lBdWFwQHlWYDhMW1FMczBmSngrYWFKJFhEeURlOHg+LGhRQyNLZFtAUjFz''@;'; put 'put ''PFdtREx1d1JBMEpZS2hOMV4sUmdER1VyRHVXRUF2fGMjPWFvczxWbE43UnlBIlNEciF4YzA3WDdSIjFKST1ma0dZdnI/XlpgSTUsbnheN0BJelMrTGk0XyQ/YHg3MCtYZTlYMjspTF9Dc2A9d3Y4MjplKlNSODpFcFU/WDs/fXI+V3NlcGpJUV81VHxgP0o/QntAI0o7QlJ2MEJKQ3xhVmVkYDNK''@;'; put 'put ''aEJ+IVRFW3B0MU83KG8lODBtOzBsSG5xJl46PVh+cl1qIWkqZSxSNWV9OndDMVVKXnE+dUFgSUt1LHM1PEZPSzwzQUpLdmtjWTVfamAmfk19OHo5KlJkaEdSVHRfLDxmazNydl11WDpkOz1nPlg0PS5EQVs6N2xmJlBVSDZAcSo4MUlEajZkRUVacWtBUEleZDhxTDAkcSlrY3h5cFhsY3kjMjgi''@;'; put 'put ''ZHF4ViVKSztvY1FJMy5fWSgwfHplISwyVU88TCRKOGhlbllNOn01OVZXN3wlSDY8REpOSyojTiEscU1jVk5TV1lDR1I3P003Jm88YXBeOmN0QCskSyEkOGJgO2R8XmRVIWlZOmRSaDZYYmUralpoLikrOktmYiskdlVjVyx7OGMqJFdLYTxYcUt9NEMwRztKa056cEYpW1JYfno/VzMrIXZkXS83''@;'; put 'put ''ZDdPeSI9dGNGe2tgIj0sdkw5SUt+dlBiPVUuUiJSckF3T2d+QTdWLihCZylrQ1o7e084PWNqIU9uRipTeDVnLjc2PVg0PTE3OSRWZzdHcHJ6NEV3Xzg3WHI7UnM4bEcsT3UjblI7XW93alFzUU43Uz0+eG5Zbm1eZ1lgRn03RjhlNj12ZTJtbkgkTiFFLFtAUV5tLkJXL1E3OTtVW3Y+UG53IU00''@;'; put 'put ''NEtZPnBUfCI4TmMid1hQI29jJVUsYjZaez1nZyE3cDs4e3pobGZrc1FGZWtnfW52Qzhdbzk7NHFKXzddfF87QmNBOEdYUGFtX1I3YVlqcCJFYHUyY0szIShXP003e25SNXZaLF1FSnpuLCQsWTFVYFNFN3w2V30hLj5gJWV6JkxKemVrXSM7VSh6LHRvIjZyZ1oqLGdjWGY2MWRuXklNbUs9RGlI''@;'; put 'put ''a3Z2N2NgPDd5OlE8O3Rtfkh4S3VwXXFqVWdHTDYkNTEkd0ErUEd0WTQ4ZWM/RjclbS8kd3R2Tyl+VE03MClOLz5iQk5xayJYRUl7Kitrb259OWooaD1IZS5PcmQ4d1MhM1hOdFJRfERYPywsWXwwUXhEYWBYdWZNYzReeiNEVUcqblZYbkJRb0hyO1MqYVF9VzFkYFE5OzxkfGgvV35qRlluPEZu''@;'; put 'put ''QyNHbEQ6WGY6LFp5U2QmbD1WLCFqRlh7ZFFDKUJ7ZiNeKEgoT150OHJYeEk+byEiTDNiZTRNWSp+NTNZZTMmfHBXM0whdkd4bytITVg1JVd0ekxIflg5L15xVXQiekxOfkxobmVPO2g4bHImcH0ydU4yMnA1c2l9PjouRH1hfGBSPXhWdk1rUWJ0XVlaOFBoLDc3Kz13N3dtKmRfNSElQDVybFk4''@;'; put 'put ''JmJjO0N+L2RFWml9MjwjfF50ejhSfTU7KjttSUxafG8sNlsjWFdxS1gjZiYjP0BqM30rMSxNOVg5fWx6bjRuSHBHXkgvRWVJXT9AYUhUMkM1Xz9UKm5tT0sxZW5yNUdnPEVUJTk2Rjw5aGFpa3pAWHw/d3Rrb2Y/cWBMOUdvNVYwOEpXMUMqKUxMSDhxSk16eT5pN1lUb0djPWMpczxhOjwyYDRi''@;'; put 'put ''eDhJMzJ5UzRON2FkbjJhLGtNKjp2fTBgJiJFUVJxVnx8eC5ZKlYyNG0jMSVxIVNoTmUvbVUzKHo6OkNYdnYrcmlgb118IXheWSIzKlp9UnxGYitiPEBWaFFUJSp+TF16L2lRSTVQKTpnfHw0OnJ5ZE1PQlo8X3pRL09+ajVLK2UkSnc0aW9RSSt4YWN4N207RTNgS3R5RS9rQFpiXXMhMl5Xe3ZV''@;'; put 'put ''Ym03e1AhfllJI0lyQVA3TjtSciQyMk19X2hiRlhXbH4heEAqJXcqVzErJXpAN0dEYnc1cyxgUStUfXF9RXxFUj1TKHJ3dTFnND8lU3dxYjx8ciF4KFJPNzAsP1thaX5yQX5scHghLlM9fCI2MFcqe3AmPFF7YTxtcCV2OGBYLjVnUiwhZmtrRldbSllPdypKMEx3an5kQlJvaCNtISVsIXt3JCwi''@;'; put 'put ''YTpRRD13YVY7Qj5TcEo4KG5uckxtb3Z6I313fTxhe3FmRVF0bThOWjUxZTA2R3Nse2V7OSZPPiJmO2F2eiN4NCF6OGpJZ1tiLm00N1kmdTd0STJnSV86N0BPKT4oUS8hb0xQMXYjKHkqPVJZVHZqYj95S3pZMlh6IWU7L1BSe3lGaWpoN1JhMjE6NV5ZKHxsfUsqSW8oazRkfE91P3V4a0xOTTJI''@;'; put 'put ''RkRMLG5fJXdVWEkqKSQ4UDR6QWZJQFlROCttXyhpNHYyYzg/SnRCPmY9QEpkYHFuUXBvVDVWNDBvK2VmXy4kSlUwSVAvRlo/NExtPTR2TjBtdToxImclKEsuX0taSFtmNS4wanFMU0V2N0g1UTlDbFN+SktzZjBaVTB1RTpqKndwc1tZcG8iI2hEd2pdU3hEbjhmMjVEPnVjNkEwZztaYXMwOkB6''@;'; put 'put ''ZFpoQSp7Z0JdMlNjKStecG8/UXBYUFhAT15MRCFkLzpWJVFrQiZZZkZ3WHsqO19oY3ZlNEA3Y1BlNEA9InxiQXVYXkg0T0NMIUA8Tyk5fFhuN3VzXyZGXWJ1YFteanJ2aE8yYFVPKXJkYUhqREAldnAjaj51KlgpcmwqOXwuNHlSNU8qRWQiOm17aDBkOElVSnErN19GUmgpNDdvZSFQK2FJI3hL''@;'; put 'put ''V0BqQD9WfllRVnxxcmQmdjhjcSI3RDtKNURGLHtpWlNQbHZoQVghUVhHeUVTfnR3ZkteMWJCVmZjRiRvNUtUWHUyQ151NjhDbEdGJF8+ZVo0NVArKU59SWJld1FFOmw3LmFfczI3dkdweFpuWFBvRTd0ZTUwS0F7OmhmJj1wOkNHZD5wfUFdZHZqTD9UPXFGIz43M2s1MEtCU2VyRTxDNkg7dUZo''@;'; put 'put ''Nzw8YyohdS9DI1kmcGMoRGBXYW9DP1V3LkdUTzdUaSk1SDtFbj1dJWJ7bCI1bV0rKV55fXQ1QFQmTCZHIW1eVkhlOFBEMlRjMHtbTXdbXVlJQH1IO191dlFZXklXQENPKkFrIzZreWRWMk5gYEZeMzozREg2cWQzPTR6Z2Yzdk5Ie2lWUldheCokR3BYeEE0Om8/ait1Qn09bzNUeCU5czEjU2xY''@;'; put 'put ''JTFBRzFINU9zUldVVSpVPUNGRDtYe2NfKHZdVkxqZ2QkS21mQVBCZUI4YDhjKjVVSnBKLGspY204Yy9IKDc4Tks7JXdhVVpMUGJLWilyQiZKXkFTVDpjTXQqWF5QcylpTFRkfWR4Y24xJjdweEQpLDAhTE4ydT9MMl5wTHJWUiojKXVDMEdRclhxXmVsKzwlMDJKLzBZMjthWjdwJCIyLmY0cn1o''@;'; put 'put ''W2cvcEshfkFNeEBzIlZ+ej9MZVlPRSowJU8rZHFGMCFNUXBUSkFIK2NiX3g1JHomej4kU2dLUytwUzAuVGNuW3xSSSgpREx0K0E8PUs8LEF9dXQ7Xn5GNi9NdCJDTlQqLy5pZXNMNk9CTjhNT2ErVlUwP35POWM9aTBfIVN4WHxiajJkSlBRYD94dTIqJj97aVFjOl9YNSh8R1pjakFJNmhnRD07''@;'; put 'put ''bEcySHhrQTxIMGQ3JHJIVENhWDpDd1heUXd8Yj1LNTQpbTFfJX0qSmk9fGVMQzNNO1ZIXVssMEQmWWdAfGJmV35OTF4zNmV8SUVWaShOKlIwMSs7Rj9KT1BzNy5ienhHJiVgOnM0bGNtQlZ2YUI7Ty9YY2tfMTFQTy9JMXZ7QU9sYThyTGRdKmxtOTlhZGA5UytXMiFZKjU4WHJiTmwmdW5MXzN6''@;'; put 'put ''WlgjSTVdV05CSVVIWDlvTmxEak5iQjJJeVJ8VkJvQDVjTmVLM2tDdiwjakd5cFpgSjtGb0k1X2ZYVGM1QSZGL05vKUVGam48aD86Z3U/TzVfKHQ2PWRwZ2wuWEB5SEZ4M1hyUVkiSHpZIUJNKzliPTsiYXclfiFTYyNEX1teanJEdnspY3d9PkYkL2l1T1teZHFuMHBLOF9OIjZRfHtsS3BlaW4o''@;'; put 'put ''YCM5SWc1eX4rPkgqQTkrXkdvPyRGUnAsfGlfJWJHLk8zLz5JL1tELDklMF9nO0VwNTcmcWVKRUhQeUI3cGBOeV5WeGg4XnRRKTp1MDF7ZEhlI254dGlTakZGeXZhfmVHUUZEXj1zfGJmbzc1NC9JQTA1dk99aC95VldkaGk8d0Y8cjYwKCxgSiJDb1hmRClPc1cuV2siVzc8L3s0JT8yTShEcGkr''@;'; put 'put ''aj5STUR0JCh4JHU3XVd4PEMsQVsxSz9SSWNiTGkzP0QpK0dqREojeH5eM19rRyJaR1Y4b35CRktqekJqdE1+TUdFMGYvcWMwVmJCd3tQcGt1R2BQZWVMKiM/MTJMZjd9NGJsKFJTWHc3KjFXfF8uIW53UUlJNVZYUHFtV2l5NzVWTWVVaSpkKGZodz46Oks2XV5KTnh8SkdhO09zQzgmPFRMSEBJ''@;'; put 'put ''Jk1xdS9GTGB7STBhWHY/dHohOFgyJmxQIndoRDdoI1ldMVl9Wl9gZUYoQkp1Rm9xTzUyJGoqdFF9SHxVRVRJSTJjNE1vcUdVYERJUD5DWShwNzJjTmFpZXNZclZGUCUqNGhCVFQuSit0XmI+TTJjPj5qTFcxc3czTjg7PWlZUGVoYjMmeX1PfF91KD97UlRFXz0seUpuX1lXJmV4OGJ4N0ErSEpo''@;'; put 'put ''cWBRPnV3dEpHPnFFey5XRXEsVW82RFI9JlA9OF4jPzBWI10zPjBwdi5uaUhpeFAqZHZ7TWU+JlBbW2R3MDYmflszb0dPMjNVVEBJWih3SD19K0YmdUB0RUYwSnooZXRWKVkrIVsqdkB8PiYodStWMU0zSVV1R09mc2hjKjN0P35WfjhORmJYQXNeeF99UE10QjEzN3U0WCxXOmQ6RnAiXkE7VmJd''@;'; put 'put ''aU40QGtaNTY5LDpLNnU4REkzKHgxbnU4OVBMZTV2IVU8L3VwRn5FV1hhOzNPQltMMSguT3lUO2BCMElIR2ZqdnduQjJBYj0iO2pSRT1pOUk2THF1T0chZzVZLEQvTDhSP3xQVF54UHlbPDVISSNnLEQqbmYmaW4jK1VGaiZlbzlEUEojUzcwVnIjdGQ7ZyV2VTdUPSlBZDQ3MSo4PzciamMpYnJY''@;'; put 'put ''Tzk5WVd2Tzx2JnRldDhGJF1mQmkyNjV8ViJye3EyfD5AdVIzTFheZHQoaVdqZVtFMGxHRFp2NVVPSD9vPGtAZy5aQ2NMPy9DSkprLil9UCxJWWRmbGo3I1N0VjtfVilFJGcrfT4hP1ljO2dbVnJickQ3SlBvQ3Y0eHIzND9eez1hcmhrKlh7eEVrdV5WNUkse3FTMENZKFN3PTlBe0JlNEY9NSt3''@;'; put 'put ''X2NwbWR7X3pCMC5IbSFeWXlJVVdTMHZoVmlNXVRIZUo9WnYscl13U3lnPCE1XXRkNFoiNjs9MGRdLC9kcGR4ajpCNUc4XVhOflpkQGU6MUdVPX0+bkhGd3AlQWE5UW9iVDFeMzkzazZqOT5bbFFqXXw1K042NVZidFhadT1yfEhDNDB4Oy9dWHxaRVokO2E2MjlLPGg4WHIsS29wXSQ9bCJJJlJk''@;'; put 'put ''U3cxYl1MNGcmJn4wLGxvYGNpUFIqfltRcH4iKGFaN29TS21mJURqJXowJC4paE4uY1JBRCxHPkBQUXBjVCg2UytVaHwkRH4lYEhXWjJxZU0uKi9+aGhhNFlaQSk5OyNfNWkqKWQjJGc1T31qeE5iK0RwSFZYdE5kTE1AeDc5LnApZzVgaW04RTlpYWl2OmUqZSNRI3VMNHdEISFSRml0PHlTZ01J''@;'; put 'put ''WHM7UzF2bzk4SGdhPVt6OE4jPGcybC5eIUlSXVk4dD17azFlNnxiZSY7YDBIJGspRyNmZWsmP1J4N3BvV2hBRm9sPTlYVjI9fl9aaDZFWTsofGJydjhkOWsxPjglOER7KTp+Mll2NWxgNXg1an5Xa3d+I0p1OCNHdV5sSk9JYitfSCJkYVR2cUE2PiE9QWY3NyVsUlg4SCU2QDtnezxacHlhO0g7''@;'; put 'put ''TilCbnhyUShAb3NYUER2L15iOjZ7ezZeY05aISpjbFQrMmlYQE9zKT9rYHlrdyUrU3cvX29tVCg3fG11ZjZsfCxJMnZbOj06QH1pb3hyWl9WLjJzK0crUFJPWjhnWWVaMmRwJGlbPHBZW0wkcS9tRkBMZGhDPTppS1osJj9vTWI4Uit4WDZPT15CWW0laHhdPWZgWTlgXjxEelVQUiVpNWh1fjww''@;'; put 'put ''PTl5VU81QnIxSUVMN0szS0BAJXg+I3QlQnJyMmpjL2heKk90bUomLFBXUUozQVY2dSM6THxuQigwTkBPPipMWVo6eHQrYmxxM21qOzNUKDp7P3lYbiluNSlBVktxN3k3ZTVqIkMxZCJTMS4qSWJYQFQqblRrWFZiKipqbyM6Q1pgVSpja0oyN2NkSF9eP3hsRjVyeUF9SzZCJnJxLEB4bGtvIWlJ''@;'; put 'put ''Uj1RWEBGam0wZlhUbD0qPjc3Q3dzZ19dUjJFeCw3aWNvX1NEVzs5SVMyMTdke2pfUyo3VzRUP0BsUip+OjNjYyFoLCY7VX01OU8pbjJPSEhjJDFoRFVKQXZ8bDQrSi55NSpPKGE2YW5lfHx2bX49JWtNQDJjK2ZRU0xnfXl8Y01+TTo5ZmEhRCppKnI5UngzNWNLak9ReVtbImE7ZU9TbW9QUjhU''@;'; put 'put ''d0Q6N1Q6JWEsdSI0ZUhHeTNqMkpPdFlrWVMyZGBofl8yU3U2NDFKeEpLZ3ZbfVAzYjpIdnZweG5hL1grOHdkRCoqPCpwVXx2flh2d1VPdyFSNjMvRmdnXThtW2sqXiJJNj4oclhJZG4lZmxgeDQvaXl4JTpTeHhNQihNM2QxRjU4Wk8ofHxKWTtPIjUsW2svfU50c3RjTHk/JW06WXptY3ZVS3B1''@;'; put 'put ''YDtCdFM9JXgwJWMzeClTQ2FaOEE0ZXtsdiZOVGp0OjFBUXomRWpAdFpoQytOX1NKNVdYX1NpRGo5I0coRX1Cajklb19TfWNKfUxyajJkVX5LQUJsITNpMTplUjguLEAiMX1yOCoociQ0Tl1PJHxgalgyeFdzd115Q1VLNnQlNCU7K1B0c3ZpKndIMU1aKm5nfTNKfUdCUGxPeCw/YCtOK2NAVDI3''@;'; put 'put ''dWM8KHo3NmkkW3ExVX12NiRLYTw8dTs9di5JWjwqfkdCMiU0PDY5RmVrJkJKIT5vOVRvVWFkRDR3L0RWLFh8S1c4SX1GRil2KGxue1A3cEhEa1hkTnkyT1RaQDgsamdAUHFaMiJoKURsWHQ4KUN8eEFNNlZIansibkhEQio3UTMpOCVEJjNjekFTM182cnxPKXRfLmpGPzVJXUwkPyxfTH1OP0Jv''@;'; put 'put ''RX1FYVdwNV4kN0E7SGhNU1NvUlcpV2VbfXFJWikjVjpSTnQ9PD90MzpjYi82OXF7OHdRJTtIJCtFKjEmMSRMbXl7TENVNEplfVR9bng/LCtnZnRgR3RkNk9pcyhmXkNfM14xPW4lSihCKUJOQ2Y3eD1JeU9HN091Y0pxOjpWP048Z0RsQzo0PCZfYFU1UEwuUmRfdElbP3YhOVsqRCxeKlQ8MnA/''@;'; put 'put ''PG5CQkFiOlImRz1UIWd7bGhiRFVSYm93TUAsYnplcVQ/WH0yWWckJUBKWGYlXX1ZO2JiSU5PTW0zfUA0bEtSUnVkNG5XK0x5b2ttcjFrYXZPdm93eSw5cDFwWCE5NjlrZiVBTEhWNXRzcn41UCNbMnA/ZHV+ZWFGT246LmhfP0djP2xabVRRVFApXktsNzVObD8he3MkXnlLKyUvM21ze2ZaX015''@;'; put 'put ''dyk3bFEpbmlNXj4zOkZjeUxLbGB0UVpuU2JLaTY/Yil5N21NKStkXmhOcmBvfVBjVSY0JXpESCEjWmtKRyM5OEdCXXpjcGIkbUc/N2lEISp2a2IwR15iVDJyJURTPEciSlNHdnlGa0l9c0Usa0l9MEV5NEgpNU1vK1dZMmhAKjRwOFplMmd7OlRLaUViVUtAWmVdIkxYT1RjLzVuUWhLb3w1ZTpn''@;'; put 'put ''Ll08UkpLLzBwVn57ZH07WllkR1lrcCprM0p+OD55TDE1VnNzUFNhW11ZTXYxdjNOXnJ6SS5kYTJMajtnOjhqbExSX2k1czd3aCFubE1OXyVePllSOHFCfEVEWCRVPFJIaGVUT116Uik3NE43LzsvfDlfQTsuY0Q1d2oqTEdiPWVzYy47bFhCLmBSZSEiJUMyTyIsXXEkTDxvcExhPGQ/WksreVln''@;'; put 'put ''WzNlZXA8enFKWWMzdUJ+S15VXmYoRXVuaUhPVnE2bmxvQjI2TFQ6QWJ0Umh4ImdjI0lJXV9uUnVNRkBoWSU8SVk9OCQ5TFQrdk1MZmtERkAmNjhTeio7Jjx8ZiViJkBXRmJbTGVaOUtQVykmIyRFIWBVKSYjVDs4SWNiWkAmSUZRWEAvWFFjITpqL1Bnam8rUFJQIzBsdzFaSnlMM1hAQGl0OEQx''@;'; put 'put ''L3cvVzFaXjUwfUNPbXlfTzR6IlszKiUhRF5VcmlHfSRgOlFeRF5XOTNfU1ZfekZvZGVPOXxYJWI3QjM4XVRZcjVmcmNDXXROPih6OTpUckhVejJLemd9XUklLkA6QCMvJi9KPTp4OmNVImFda2NdcSR5aDQkLjlGdnlWL3lCfHwrMnFNMVFlWy95NHV6anR0MVhyJlU2SmZ0b2tjK3U0Znh6aHJb''@;'; put 'put ''aj05WiZEXlUjJGNOYkZrRyk3OyEqXyU9WHdnRSFwUDpyUmAjZmwzVjRVKzxsZ2YoTkN1Qm9yO2RdbiUjWF8zaXt0WjBdJiZhTiJWIy57S35taTk+VG8rOjQ0cE9OMj8pZ0hFS3JbYDJ9OGs8NF5vXyQ1RT5WRzFIMlFEaGpSTWIkYExQOnR2VCRpMF9eUnYmSkteTn5Ae1JAMkt+ezZsdCE9dTEp''@;'; put 'put ''YWlQXj1vMEk/KnFRbVtsL0xSYEIwekF2aUVmNDx0QT4lJW8sQSt7JSZkKC5DRGIqbntEZmtwSFBvYW5aT3B5fGx2SSxKLFlmcXxfe1JAQHcia2BPSHA9XX1iM0t2bHRASSFGMnFRWXJbciUvQUxTTzk5NU0sUk4qK0RgWTAmVSoqWzNLPTdrcDAwe0JGV3JackdJekxnXXgyMChqSDldMH0sdHZA''@;'; put 'put ''L2czPlBWIUxrMyVVPEVxImphO2ZSeEc6ZW9RXlN4ITMpTDlHYUlXRE9ibXg0bFM7SnAwXmZOdF9TeVpoW0MqYVY8ZTghRi5gWWE8RFdCP2gyK1V1RFprd1piYVJIUHNlPnBVaW54ITtvaTJGRztAI0ZMW0FsU1lSVG95R3AvQC5dU11MRjF6N0hrMiI1T2czTUxRfTg5KXQzY3IuJS5nOjhhamZR''@;'; put 'put ''VGt4YmJyPXNhRk4+I2ZrcDRVLiZmZS9pJlV3MC9nZFdma0Q+dHs8Z0syai4mSj9kIWc4SDlkQ2ZGV1JQJDVYbSFjQzAkOCJjIzk/X0tAMW9KNFY1VV06ZDdhNSt7alZ2SzhMNmwmJmVfMz0/IzR4WmNIcyJxRV0ufk5vIylJLzMlL1RrKipRbDh6aV1sXSppdnt1VTQ2PTx2d3h8RltFTTpZb1tD''@;'; put 'put ''Kj5baSgrRSVKTF4vMGNrI2tFU1I8Yml1U011OCFGfkowTEc0bDgmbC9GWEpjMTZCME9IK2BVMzpuXyF2UXtYa0dNTFltT01AZFdAJTxXO0kjOG1VVGRPdURReGIpZnBJSDFILFVib19LaEtteD9OPlBAbVQxYDZgP2E8KDpTJWVYTH46Sz5LYjhFKjMxISpKP3BQOCZ0JHpCciVFOSQuXmV4eWdS''@;'; put 'put ''V002aVBVaTtoODE8OkVCKyk/fD1meSJHUElIIUwrVFtARzVPPDk7ZG4lKHI7LE5SQDouflJmMiZbOzI4UmJyT29MO28kZnxZPGQ1Lzowe208OjwjXlhwN3JPazQ9MmBrXmdYRX02PW9XWSZ1dF5BLCZVIjw4RzE8PG9AOlUkflgiO3IpSSlvb1RybnF3LjlNYUoiMlBjKGo2aVFQKip+XXI3QGY4''@;'; put 'put ''K21eTCFQSUIoPFI/eExyQ09fLj1vfHxnMzVWPWZ9NDo7PzwsWm4uQSpeQGRFfHliOkt1dzV5fS9UPU9vIyEqNEVoOEQ3e1p7ZHpUNl8lfUE8aiROckJ6eSZONEBvUjVxNjpXcmMzY3MjM2w6d3p5RnU5YypjIjY4OTh7NXI3bHZ7Wz98R0tQfWNHJUQuTDBmYXlEampjUXxiMEgjdkhkI1ZySlVe''@;'; put 'put ''LitHMk1zc3QlM2BKS3lLSkRlcFUiRFhPIkR8TnlZeHglI18iUk1iZDY4c34sW2ZwTWJUSndfMkpERy9+anBPWDc3XUJVO21wdVheT3FKbiNVPGNdUWV0Qlljc0gqNyVZWmEiSDtJQ3hpOTNSXmY1Vjp6MiRYcnl+ODdxZWdkdDB9Mk8kUTpVWUAhUkg7VVUrW0g5JFopJWNPMHxibjluJkR6LnhV''@;'; put 'put ''Xm9lVkRFdnE4Ny48NTxlflB0TGJsfWZAby91V2wkbGxVZj5fbUgzQGlmJipsOlZkfVNgRShZNTckR2RNOXtJZmFzWDBIfVp+Tkx8WHReTm9pUT9AQF5KZWFKRWZ2bTwzY2k5YX1QNjYmUzcyMl5vL3UsY2NZfUpTNk5yI3dLVXs2TnJ2Z1VNN0g9ezJtL3tVRzcqWHUjdz1LandjWH1nPTBhVEhm''@;'; put 'put ''PGczTn4rQzR2bFV2e1dvIXY4eD0iUE9MYDY2aUVgeXpPQExqdXMjal47MFZ1cztrMG4mWyNxUFFUd3dAcj5vOV9WPz1mcC9vO2daYW44WFY9PDhMfkttW3lRdnh3aTJiYWZwIy5sP1BEOSRQO24oUChZUyN5Z24/USNmJkg6SHQzK1FpWkJ0eEdlWDBxOWEsOmdIZ21mbWV2XX11fCZtNmpLdGZw''@;'; put 'put ''fjhiITtiJSRfYFsxS0pqYlt9Ul5xQltfMmgxWCh9UE9kMVtfKVI4RjQ0PDdOPUpvZzFUcy8sXTZ1JXdOSChIb2dldDVGOVo8TWAkdTVxb25gaVFCZXArcz8ucGhuRUl6ZVpYViJDQyRRTEU7dj0iRlphZ15YMl46Y2h6Lm9ZOjNDIjRjKjdVLERvVV1DM1tMVDE0XmJ4REpWfXhNVCJNVUFpQyxD''@;'; put 'put ''ViNNZ1dWb2hmTyM7K2o8W3lZSzVHKDoqXz9hb3pNYjJ3X0JtdlhMQHRIOHpiQFR+X3lpQVdFUEQpTChbRSxPR2UpdGcjJXU1QCF8cEEoakkzMXNBWXU5fk0+c3JjeG9CNiMucHR9dWM/S0lQK2MyXXIlQDRYQCtPc0FkSz09cy98Q3MoMmE3Oj1ZLmReOHZFMyVEcHF3OSN1RGx2Qy5wflc+K0Fd''@;'; put 'put ''Q0lII1twOyNsWml3VztFYkA/KHh5PHlqVDtKPnlvQnZzWil4KHFsPT1+aVEqME9BVjwjYk51Q1VuVjtGVTVkb2UuOXY4S3pkVT5mazdYKCJWQmUpLy93Xig3Qzg8akBRVlk0REtoWml2RT1nR0N4JF00L25Lfnt9amR7VW5+WlFxV2pUITh5cHV7TnlGKmVDbXRzeiRRcUNLPVZtIy4kWTp3O3Yj''@;'; put 'put ''cn1teFpuUCMjWmpCVkApX0ZZfUIiVit8cVVdQ0pJQCQlKXAqfEpSZnhNKyQpWCxGbFFiKG9MO3JLNld9N0RTbS96XWFGazlaNUZVPEVBJXQ7QyxIUk9OZldHW1lKflVBcUEyaXg3dXdlT2R4L0kyWF1DSXdBQUFBQUFCdHYoZ0lfYVQwYEdRU2VHLjs/Y1F8TyNNVCtCa3pHfiQ9bkpYY1paZSpD''@;'; put 'put ''K04+a0t3NjFEPyRpPXx+MDUpfmdSRix1dHNvOCUmSjxTI2Ykai43NiU2NkJGSEVNMFl8ODFRdCowUFQjMiJPQXE3bUw6JWxXOHFCbURHWFhwTXk0dEUrKDIqX3RCYj8yJHImeTxSaVNXN3d1V0chQCRQWzZMYk91d2Erb3p5fDwobV9DcHZVb18uaHYvMD9aIy88Tl9+YGk0eGEyPUFvK2FUWmxT''@;'; put 'put ''aDldL2ZKbl1aJiw2UT92V0I/KDA/dEF9RXRqamdzVUM9OUU/fHh2Wj4xcHlkKFgxNV9MOFdAOX5jWCVlM0xnTCVdPzdhSVYmJltxJmhYRD4pandJTDY+SHNvQmcscC5yI005NmMid25NMClISXk/RWFzRUk7YUd0V0Y6VlMoUEQxI09OfDdNYmtGWF07Q3s5I0UuczUsMiEvQitYSnVkPD9IJiJw''@;'; put 'put ''QS9hPyN3SVpAUyE8Kn04ZU5ocF5pYHcvNyssZlladDY1JDRQN3dGMjl8JGohQTUlc00qZyVWI2h4LmImNys8fnB0ODh5Ql9SZ1ZWYj5DKWRIQ21hYndJbGtocWAoOnltU2xCRUFrb1FOWzlmOyolOnZOQXtPVTgqaHRZfX5tI05JWEc2Tk5YVVNFSEhlSTs1U0ZsQEk+JHZMdTs1KDEvdVJNc3U1''@;'; put 'put ''ZVBKPXtgRHNed1RKVmNQMmhSM0N5Y0taKWlYUU5CQW9bY1VpXnc0KypUcXAwSj4hW3hRY3RWVD1MY289a3NOZSg5PVVtTGdUbXl+bClMd1dHXmp4MFtmaCtPZmFNTjkpX0AsfjJvNl9qS1AlMmc0LG9mUnc8OnU5flVLNCU7c0B7NWFDZUcidWBeaVdPM0pwR1V0WyNHR1VqMDlCMUJ9dSksN3lx''@;'; put 'put ''cWZ2RDJoJCJiMVVCQGE6a1BXUT0xPGAhe2p5WHFjR0QhSlh2W0oyO3dIMEp0OTtifnJXRlVfb2xoaCtiP0xRe1l2eWppWE9BbmBCJHBzTVdadmZvWGdgXlRIMzoibmhnUThvNGtWYTcjVENhbXpYUW5vfTlKLjFsKkFUPSF3T19qXTh9PX5jM0Z5NWcsLCEmQDk/X29faHsveXo6KVttLkJGQkdt''@;'; put 'put ''Nkp3XXh2OClvdUQhQ1tjfWNURyZ+LnQ7IXJAO1p8PXBLaU89VmtoJDFtbU5kR3R4Oz5HdV9MOXNpc0dMQ055cFV2KkwscC82bTNsdHw7OlU3MisqLzAqfXZOIlRNUVU/N1Y2bz8vIXByeXRHUn12fkVCRiNBS2ZBQTFSQnZFYzA4JnZ4eDtKdz4lS2tITndnVlJpSDlNRCJnYz8rcGNuTVBJJW92''@;'; put 'put ''YERKXUR2RHBWY0l6eSEyRi8reSRfc0swLyZ1T2lPZEUqVjleZVVCY20hYHxKL2l8WSJ4akFrd15RK2hoWmYrY2pqPG0rQUcrdXdlSi57X0s2JkhHZHZIbVM+ejFUPn05YEJALlZofX0/Kk43TT0mfVIldGQzTE9iZkghIlJiS18udDk7UXlMX2tlQ1t5ZWpZZyY/cVRkZTZONTtxX0RKYjVLJjI8''@;'; put 'put ''VSxdVVh0MVk/bWU1UXRbI3VhLzVYcnFZZX0wO0t+Xlc8QEhVPWMoOUopInIoOXs7MG1aUiEkdmNlalt0blYiRHMjUkomb3ArXklOZCR4VmdEPGMhdmY5V0ZFV2dbRF8mcmk3Y3FlZlJmLmAvIUs9JjdrRj1PeyQ9W2c/QiJUOD54MV1ZcV5XJFMpPE4rd1h5aiglRlRjQEheNXBAJmFuaEBTc3x1''@;'; put 'put ''eDRAbE9BOTkpLzZOSGtDb0UjOjRxUXt5Q0BJdDEuY2B6fl9mbn1eYjx9bndIOTVWITwjY30pRUs5P3x2Nmw0eVVYZGVmIiNEMDNZSSx7NHVRek4kT0UwaFswXlJkXmBGTCkqeGkxJm0lKGR1NUVAO0lIJCFCcSVqXXNNbjVSUkg+NjZKZEN0cyV8NjRnQHRoP3YjZWVKfE9UeiVnSllCO1pyQjtW''@;'; put 'put ''byUoU3Y+V31UZDlDPUQ5VEwraF5rRlpYdFR6e3FKWXlVO2gjUmk1aSF8fUk0eHpDO3oqJkRyWzRsRWxPQyE8OSg6PVYifmRGTj1SN2diTmRyVy88P3RvdF9qUntxND55LHEmSlU3bjhTfS8/YypyJnRNe15BeVQ+OjRVXXdDPGMqNXouJG84WXJxZ0pxJTp2OWBeSTosNFMlTElGc2RffnRGIyQ8''@;'; put 'put ''T0d6cXJ0bktie3YuIkdCKTh0bCg7LHJVZWdQVzZ5OyxTWExSfWI9VkFoKVBBR0lZX2cxVnM2P30qS1Z+YlZrKl13bnZ+LCNGZWR6OHdgemxrNTU8LCZnbjcrZHhxZENGYH1WMjFNLE87a11DK3FbdHEqUnNiRl1WKl0oMVpgSnk8QX1OYjdsQGJpWk93MFhKLCVxJnFRTzRXUU9xTzU5JUcwSSsp''@;'; put 'put ''dFVubGQlViV1X1k3QV1KcExSI0JZd2NFP0sscSs0K1QhRTtfRilGYHxNb3ZRamUxMDpzdzNHTDx5eUlkSlljMnNwSS49VXtXaGgqK2xPUGNhNGV6cCZNcHF4NFsha35oZV9pfWY2Jj12c3xQSSxrI0YmcEtYeHBPKSk5fSxNYGNDXUt0SGxGNWYpSTdTYSsofUBTNDRSLnQ4dDFpJmd9bkAvJSx4''@;'; put 'put ''UCZtJG5HQ0RYVmMqfClBZj0oOSZVaDJ3YFsmPT5eLFhFbzA+YEs2QSNHS0lieltMdGVqLH4hMGd0Y05DUz1fIkN1VVEmT0xWVTNjPXk1Xk9hXj53OzFdNCVvamJUN0YpUD45cXp8OVZNWXEpZmZuTmxOLzA2bGdVYnVFcX5VQTtrI1Z9UkhTdEBnT0JnQElidnVpR35lPStLelJ4NjEzcGYrPVBb''@;'; put 'put ''QUUxclovW3VIQjFddSxtR1B8bFBBJS9aQF5VO089fX1qS19CKVh8JTo4NCsvTClNc3c0NDY/Z3xtZTo1aUNtJHphTFN8UWtgMW9zT2hNeDxvby5SI1QrbTIjfTBHX0l6dDRHQEZOe3FMO3hKOXZzKV9iUT13QnMraUtsVGZqPSxzazFNQCtOPkReN3lmbGxuSDk0aTcwVU1JJWApI09oQzh+NUMp''@;'; put 'put ''KzFXTUJbZlg9b2soWjguNkpyNF0zNzt0KVd3c0A8fkVZOGFXZCoqSD58UUAzL0l0aTYkOG5VUFoqNmpYVEAqdz89IUt5WmdGe05zQXlJcGtGLyZ4ME4oaz1JWy5rJnc0dEF5TU9lcFojR1NhXlgodXllQWsjbXttUkJreHFtI3p+fCsuOFdAdX5rKmZNOkxbMnVqWndFQTcjNDdQSElwZVU+Lm9g''@;'; put 'put ''SX5CT0Jibz9hRUlLSGdmYyFEaSs+WHFNa0ttW2VfMi8mQzRLJll1bj4wW3h8dnVicXQkMkJYciR4Oy9xdD9HYkNNZXsybXopXy4wIX1VT2ZCT0lgcWRbTHkkJChNQFR5fGdNK2s4UThRKHtINHMpIk5+OHBpSDBDMytgPSVbIXNPcDxgd19vPGNNc0BaQnwscn59R0VOaz9kV2RHVDZIUHU/PCx2''@;'; put 'put ''YShOay9bXyFoW0pjfCVgY25xXSh9JnAlQnc6T09fcUQ2JU1UdSY7T0YhVnt9b2E0QHQ8YEdbfXcyO19nPmV4ay85XnE/QExbfjJgP1R+RDIrWHUuZCJWND1WW08yJFBRcFZTVmNiYSk6Kj9MQUZ6Oig/fS52UE5IXzZVQWtrOlM/KSN8Wk5BTU1CSXdYZCI/fG8mUCZUaSU1YylrWVZ2VHhvJG0/''@;'; put 'put ''R111XXl7emxuY1BBaXt1YEthWU1KI2o9YHRwYkEpb0crI0B+SGJPZHRWejAwRz9se2JPUWQrcytjTi8rUXk+RmJLRmh6KUVJaUM1UEJTYklIWlQzMmZEOy9YJiMxb0JePEV3U3UjaE52bDA3KCJdaV0yXj8rVld2ImVjXnl6eEQiVWclLzpUYiluciRhSmkhQyp3T21Gb2B5emx1OV5xOn1be00s''@;'; put 'put ''ZDV8LFglRUleJkRvYnNdQ1s1fTVXYVg4OVhwTlVbYihXfDU5aT5tZmwqPWFHKFVSMzJ8UXp4SWxLWmwvNDphMUw3JDkuWkZuSThrIkN0VCRSViZaYSVhXWM6ZWIuJipObV0pTF04eCN1I2l+YVdRIjNFSXw+aU43d1pVKyhNanpHPiM9VHhIT2YqQm59KlF9RWkqPjt9V15pIldOUHNOU1E+VHF3''@;'; put 'put ''czhUPEAjeFg9ZVciUXdqPz1Ce31rfEliYG5FL2xbbW5hL0QicEJMfnlYazZIK1ZxYCwjXkxSfm9gS1hHPV5MK3d6QWt+eyQ/WHdeSVhQQVlXfVIhMTJacGhgXkc9TVhETm8vVmU5a25CMkEwYXliQ2J+cVpxViFXSkJeRTYpZzM0ZnV6L3hKbiF5PUVkb3Jld1l9UWZ7L2RqSnRBeEV9XjQ3Qk54''@;'; put 'put ''dE9HaiRueEw1XnwlYmh+LjgrKHF1dypIYEZ9fmwvZEVpYVZJUTt8RTtAK3hTSEw7aE85WU59MEJiNm1BWFd6TXVkbGp7IzVyXmRuXjMoZUQ2SGFWW2pMRC5UcUFaIT1OZUFKayI7JTBHZzphdDlKMFtlO0V+cHd6Q3FUWnZbXWxwR2whdFJMSjVaOVNKOiUzfmdvWjE6XjQ7XT4qeTNrIzJIaTNI''@;'; put 'put ''cU4jUVBGO2hObl8rekMlR29DfUBuKW5DX2U7MTBRO2JgW21QO1J9VVNyN31lbXAzTioqKi8uW25uR043W1N9LnVtZE5ZNjdbO0JZcFV6QSU6eE5gY3UxenJCKHtpKX0hVyZkRkYzNjUsL2VYfjRsTDo5U0s4SU41Q0N4PCxKcmluNyokNnFRQ2lDXTRhTEJbXTp5VE8xd2plMyEjL2ZybClgYkhK''@;'; put 'put ''MyJANU1+ZVVDdk17JjJuRHhuelo/eCMrKF4sPD41M1RwSHw1bnElNkpHTXApekVbVkdOND85RCtxRXhTcmM+Ik1+OFFCdENyTTA0T1RqMTlgQjI6IVc2YTwuMFM7P01CTHdpaHJ7c2BiUXFpSjsrTjJOaH12KypDV3glW0xlen53JX16TFtifVtgMTh2YHlGZlU9MGVzQlgqK3xhUzYsK25pfHlV''@;'; put 'put ''c1pfZVUxfT9qPD9qUFhCJHZ6ZjUuMzpmQ3NGYXlNelpbcXAwTyphPz9GUW4iKCJjWmlVQmgkKlc8anZpfHhddjBiT0gvYUE/Uyl6UDp2IzxpIyhUfSY1d0RvJGZ4cCJPRzNkJlcqSzkvN1A0UVVQLklVUV5+M3dWUSlJYkMzcmQsZkBua2ZiZUdTRD50Sjs4JjBsRVBtTTsoQDBIayJfYXBJZD0k''@;'; put 'put ''ZEdaXmZCcDhsUjtPfEpPO3EvMTJiSjcvNH5zRloxW1NkVGRTaksqJClUV2ZlajJiaE4oTSUkcTNjbTBgPCNkSVhSP3RPXmAhfjJuaks3c15bS0M3UGw0dD56NSJ5UWN7dkJ8eiR7fTl6VTFYUCNLQVVGMEhrQUgmdSNtazMiJihfO0VPU1UsMVhqXz9RMiVFJT11TyN6MVFZcCE8KyJPLGRiUl5v''@;'; put 'put ''UVVRUDw/aUcjY31OTk9LY2cubEYqM2w4fmF6ckIsKnljY3A1OykmTTtKenZFOUNpL1EpSVhHNXJ4eEtRIV1AO2l6THNqSDcycHsyPUBWZHl2V0pPMXwyKlFyMFc5L21IZCZFUHtxSU5Eazh0SVRyb1MsSTVHVl0uRVVoZ2RuTXMuUkh9aTIyIyxLRGFaTkM9dzw+Y2MhMW46dTsseHtKRmdRa2s5''@;'; put 'put ''Ol1TaVBRXWxiNzxOOEErVDE2dHY4KVVCS2B6V1swemtTInpEOFJCZnBHayp3dUJ+fmZkaipbYTExInl2VWtnZSYlOEt8MmtQe1d2MTsyI2JDVF5HUC5BUjBjIV1aWyhRUyNWT2lkRlV2M3ohbF4zW0RIYk1nNXgiXVFwYnY+cTtjcFswTldgcGYqSl9YcSFwY2F5S090e1hoVTAqfDZNN145eHgy''@;'; put 'put ''eDNvWTpzZV15Wj5dWn4uUWgzMHxXQCYqZzxsRVg8RVlXdXtha25PVFIyLjslIkZPInBpSmhzazh6UCY5XihqZUltOVBKW3ZaL1c0RExmQ3UzZnxAKWlOOzRNWGZNJkVFUENLOHZGbFlFcUAmKSt8LzNhS3RwQ09HbXcwL1liP1hKVHU/LihdUCRYQXRtPEMzfHw9VH0uKWhYZXBIYiNTWkxPb3wx''@;'; put 'put ''QjxAeHldOip6c2RpQUksJj9AZV5zT0dMSS9xYWVDX3Y2Kk1ofkhicEVGclR2XSJZR0hjcnpCRFZsTnoqL3lOSF5uZU5MXn1JLnNLN3hvVjRvQUsjRG8yRjwpd0FuU0NQXU5IYnxYTiwrKz9KMzd7aWFWOkFrWlNBYFU8XmtxW3RHPzdjQ2A5LE5GO1BeaFdRW3pnTkVMNkJ7ZD5+IjNBWyl+PCZR''@;'; put 'put ''Szd2ZWApXV5JaVhyV144ViR3L0JXMk07bE0kSWRXenk1d3F9fks4M0csdnlKLGVNUE8yIn0sK3ssN2h+WE8lTDJ1PjFpKFJPTjIofEtCU0I9VCNQfl5wa2EmSEAkcyNdTjlYYHU3bjd5KiRddkRXaSUzVGp1N2s6cToiOlM6ImJkZShDfnphcC45TiNHLiE7b3FDNnVzKGRnUjpUKiNvfT5+KDNt''@;'; put 'put ''OHJkJUpVXm1lTUw8K0YkeFdLTmlJUlhHeDF2T2hhZ0hCT3t1cnVMSlleSzUyPWVIXS9uJTM6XXExVFZsIVR8fUM0V2ZDc1c4Znl5K0QmWVtiKXU8NEdLS2FdaV1tKW1VPi5YPm9kXSpFVC5GO3pjIz9pMUB8VEBaRzRoemJfL0lncU1PYk9ebW46P1t2enBhSGJdSmtYenVDVlVsfjo2MS8wX0kv''@;'; put 'put ''TG5aRjNiSEVFV2AsfjREeWhXX3guLmp9QC57ZW09Mi8iLjNaTlBmMlRuZytDUDt3WSkhKU5AWn1gfFRXbDleOHsuNDgoX1YsP3YhUjxhezRYb3FZKDRva3ZbLz4iSSE2YDA2NXlnO1cldUZ8I3RLKS4vKylxYTVueGdOLyIrMi51YnxpcUxmenhnPC54ZENKQCQzRiEsNiRzeS5yIi4wbFpEfjNY''@;'; put 'put ''YjopaFo4ZUh6THp9UT45eFpIR09ifE4zeCkjTjFfX25mU3ZKTXEuNn1rZi5rb2omZSQzK2xfSyQoMVpIYnpeamxsam8+TVZLaX1MWDdYd0ZhU1I8KEshYVAzdlpbR0w4WDtlRVU1RW9FP2EudFZOXl5yI31fYV5xRSg0ZzE3Z0dWUWNRelQpejdoJV1pNEphMGNKbnI/OmxlYURqdj43bnhdMWtu''@;'; put 'put ''TzhtZmNzcCswMHhHPF4qej9eQUJbbUVzYHkqYlRoTChQdFNofm9dS31heTo/L0BtSHJ8eC5mZjl1OE1xKU11VSYlJFcoWTB3XUM4RWB7TlRrSlVDNTRyWFBbNiV1TktYPiZkUUZMKzpNJEM8bGxUWz4ke1c7Q181ZiE6NCFPanBwcmdtez5aQ3F2QjEiVy95UWo1MlJlQDROPSNAUURSW319TWgq''@;'; put 'put ''SUUkPkdXcDVGdiQjVCIxXyFqTnY/LFo8en0sLyIubn5LaHhFb0opZ3p1T2M4a2FUfEBLTWs9KlY4b1JSRkZiOWchbzc/LmJqUG82Q28mJkBhMDgmM0NfVjU0PFhtYWx6NmA9OGAvYF42Ty4uR3B4TlJtK0JXaGQ/TU9TWyplZT5DeGs/OTRpRDd3Jm5LXWFKUFAsIz4zcWFLJnhkV083WHx3QEMl''@;'; put 'put ''cmwvenI0TVshInZubXAiU299VEQ5dyooUFJaTWAjX2trWkw9MThgQnozd2U2dG5JK3U/UjxkRXw3RXI3ZkhPYF9sN0NyNnlrYzBZeUV3QT9gNTR9LFRFMGExWlBxdT9pKUhEalZMRXxLeHU0cDgmK1U7SlMiTXlUI2ZQdD11TV5TQz5BN1FIRSJiVi9scGlqOnlMUGloWFtjSExZN0JDd2lAa0w3''@;'; put 'put ''WjBGSWBHIT1IcWtCdmlibHRjRUFUTmNHN2RxXmJkLEdzOiheUTR0dkJLaTpySWkzIn1hUXBgbm83OFk7Z1IhfFJ5aTlNKTdveTRaYWJgcXFqaE5dSl1WVnU1KTQobHpjaiEqXnEmJjROPGN4QitjaEB8R1s6UXRSMjFnYlpIPk42dlhwMDN9W0wiPHpDU2g0NF9oSCRWOSJhMnp1LFc1cXAmKih0''@;'; put 'put ''JkJjZ1FuaH1gT3M7UjhhPTdSdEl7YD9lRmpSKU9TRzprJnVscl0vaTc5d0BaXn4jXmJfaEl3en5fVWxyfDwwcnNSN2JzIUhLUUpSfTMkWHFodEd+PnJOMEBvNitHJmE3YVA5Mz5wInd8XzdYP19oIXFUW158dzk5KUtVISx4MloodHo9Uj83PV1zSDwhKFRGLF5RfVQjR15dYE0+SGlpSnZ2ZDh5''@;'; put 'put ''b0NpUzsuN207b3xQQ1U3UlUyZ3JtUXltfENHVF93TE1TSW5HUi4qT1JnNilDUDpWX3J2ZXhvM2FFKmVwX3VPNkloMmd2Q1NRRWBobFcjdXs6dUlrT0FofGtDNFJtNSM+OkhgKlZmREBIUEJBPE5qZH5+VjpqbGtJN3lsTTA8cDMlQXFZejUrRlA+a2xtNDJDKyM6MWMvP11haTZWYyEwdUthLEkr''@;'; put 'put ''dHs+aiVNVTluXl93eT1TenFqIyxdbVU9cFdlW3FPRShhRzopTmhpM0woa2NSWX42Wm0xSl5QPWZabD9XTlJBWXx0cmNJRDAkPS45d3lNe15sVD96WUI2dkF3VzFmXlFyTzE9Jis+RDZsO3ZSUEEwKEg3RzhkemVQdiV8TG07S3ZBdztwLklvYi8kNFNhdngkTCkhJEwmc240c1AuayxSMUl+WTlY''@;'; put 'put ''c2sxSmR1I2RCPmBxYiM9az5EdS51K3g3a006bkZNYTZbW2s3UV9JRShbY189NER7XV43JlBkblQzeSptVnlkZVl+VmtOQ2R9e2cpWiguTUpTPFBRPl80O0VVZH4qaWc2K0pvSGtFQXRDbDpOQEdIfHpBU3VKUXFqOU03WD5+fV5pL00oJjR6aWVFOl5aXUxwS31Zdys9QytuNEEsL15ZXmYyZ2l7''@;'; put 'put ''MGwycDBAS2xmKl5PeHVQO0dGPSIkSFk7VGt+YWViVyNgX2FscVNhUlciY0tAUkxMTzYjZGJzOSpFMSt+YV02JnM1fXE0T1J9LGEkLE9yN08uKD4oa0J8MkJ+dVpjQ2ZJaF5TeDlROEtwcjRnOSExcjtBO2pKemFkS2dhMz4yPWEmbGVYYjl2aGxoNmRXfHlkX2xsQVM8aitOJGRaJD0pOUIrKFhz''@;'; put 'put ''UDVhI1lBMl9bVTpBc0xobiZgdWE3YWxeQDt9MzRbTHZMUWREeF8hT1QqMEJZMWVGOVp2OCwjJFM2UERTMT05YjVRRE90c0hkb10pOyo3dW8jVjhTbElQfkY/YChoT0gsM0dvJCxHfmAyPmdzIV5wJFlDNnJeRzVZRyxdcX5+MjZzd1NBYklXQUkrS2c0W34sYW04Vk07Z2B5eEwvc1R6cko1T3t0''@;'; put 'put ''SlJfeWxQInZyfkhWakBAbkFvN20pPCs8QUkuMHo8UVRvXSVeWVJgMWdVa0Y9TH40fFtRUy4zdjFtSzgpO2hrW11YPz9NSmJTQil7Sk5uUC9oZVhRcnF0TiklP3h2RFpWa0o0KmQ7I1h4RCVuQltld2xKLHVGL2w9SkYrJn52PWVdMVR3JUVab3t9KHpUbi5VZk1CfHtjL0whPjBlSiNLQCF5ajks''@;'; put 'put ''W1JoSGZHIUcsOz14RE9HUi4zY1pRYUB4d3kzI2osRFkzLzdQWDh7YSNsWHFseE9sS3lHRkpqSz0yKFhtNG90IS9eeVJyUjh1O0t1O3RJfUQrUFRpTzU0NntSeHlrY3V2NkJiK2hDWiomK3VuT1NJbis6dGs7WDAiWSlmdSV7X1NiZ1RVSERuNEtGLjVxbjZTeGt9YHd0akliIVpjUE5edF9QWF9k''@;'; put 'put ''NElLJjpsPVBYOFJjWFtZbSt1VlNDUEZuKG9GPEJzTV47b0prI21aZG8kTyJxOzhvPkBpIUA1ckBUOG9rM0ZnT0ZiVE1vSHdPckhxVFFfRTBLL0R1YF1YOzwiMUQ1ez4qRSFGT1kvWSgxYUlbYkU/MFt0XVNTOntkOUpwJnRfZHdBLzBfdzZgZzpOcE9gcHUqe3F6Oy96Y05CX2ZJQ35BeipqZCJk''@;'; put 'put ''KE9gOFF5bTgkRX4/WFl0cyxTMlBHM3g8RDgybjpwczRKWzw9NDUmRmlmNWFFMTlbVmo5Ol5+Mz9vRilETmhbK2BNSC8vXW4zYT1JMGBSOkBYVE90fX1RRG5rSldIaDY0cTxLV3ImZ1hMJjN0UkA1NHNWZChdXktSdHBENzhVQ2xnU2IvYHNyL3Y6RHxNIV8oU3tPYk1WMjQvWyx6KEZhOTAmJG0l''@;'; put 'put ''QmZFVXZAPFB0NGUsdnFNY2tMNG08T05pcEh3NDRkO2N5YntST3sleiNZOTMwajAvRkIvSX1mQCZZY14lTj88aUhUa1BqKSxLSH4iIXIxYUA7bkV7RGdrOUB5ZTt4dV04d1JZUCVQXTVCIWB0YmFGVURsPzdTay9rezt3KVZkbXs3ZnEhOGJxa0JoOG1idzBGVH5oJW1qbHgwfD9yRkg0eH5nOlFh''@;'; put 'put ''YmVSPFQlSlVCWzh9PCs1O2xoUW1UfVNXWC50MHp5cCwrIW18MSQhJVVwSXN4SmE+XXdwMDAvYWg+Oi43cyFFQ3Q7dWVlTEMoX2d2LiliMUVEc1grK1R6U20mNnQ5YmFwPytkeVljOUlJJmhIbFpPYlg9emR7d0xjKTxuUitlbkkjRipVNSY0UjwxOEYqaTN5VlRxak5ObCJfNjMjMnFyMHgkLlsm''@;'; put 'put ''Mn4hcThoLCozbE8vWUJXKnw3XmgqUXdoMCRQcGk9dnE6QHBZNyhxfCN4MnY0TGBFbVhxVGlgXj1NWyM7REVhT093ayp9fEZIQ3Y8SVp9eURzcDokKlJoNCg8WnRJXm9JQEdZaWRPUjRtR3B4M1V5Oi5IeXsrQCM9UFRjbUp1aENEKEl5PSlCPWVXZDxyJikoTj4/eTBnJk9hYnEubHA+b2VzfGxv''@;'; put 'put ''MSwiPn44Kj5RUiQhQD8mWEhQI3IueWY1OV0uJDFZcSwoN3IpLG5jR0cqQlAjY3Z7amIqfSlATSFGKVBle3l9aHp2RnojKmZNXn1RZUBncUtbbn5rRjcpSipSJUFdYnUsPSFEV1dMYEJnXXxIVy4/azpTS1c9KWhoTm1lc0cwZXhFOG99Nmh0VHZ8JE51Xy5Yb0daSjpxK3suZVc4QjB3XzQvZj5O''@;'; put 'put ''eHYlY0YlZ2FzMjVXODhEZV5UcHojP3wmQyRLPSJfWGMwKjMyI0BpeCtMazIpPVY7XTZbNThEaEI5LD4sVnNEciVfWHJAfE45ZlBNUiF2bmJeZWhKSlA9LE0iI3pFWFNPUWJGfW1nUT5DcmMwOihPOzgxUGtBWSFicEtYR3EyR1ooTHNSWC9qT313SWFGMWNnOl12bDp5STRUOUdlKFhGVHJAYGdF''@;'; put 'put ''S2pUfDlBa3xUJnIhYlV4VzZCSEBUJGVsNWIpbz5aYEgoMTV7O35OXXFvMXxqWGR7TDs9T3tlOTpdQWpaak43XncmKzBAdTVAX2BYaTcidl5dJGUwbEs/UVp2WE1pO3FVdjthYzh1dl5uOnApPiNJRiFyKlVaKnAmXVZwKlZmcjhDVENWXSpHTW9SLFg3Xn5HPUtWcCpALlQzd0JNaE5yfHghPk1p''@;'; put 'put ''fVV8SnlxLjRCTWsyVy9oKEJ2TH06Pz5HPXIjeDwrLE5pTXtleDY9WzhXYzglQmZ4d28xWWtyZV5qTDVHXkk5bzAxUz8uNSI5Tm9nZW8kdjh8eUxANHEhfG1mNEJQa2FWIiZ8NywvWjM2TUFkNTlSWjAlX3U/XishJnEickxaZT4zQ0pxMUNRKz5VWjkuNkJtaDJOOmFeMWJmWkpfPmM3enJIZGU6''@;'; put 'put ''cCZCYGQjZ2c5Li9vNkpbaTxBMGVSLnQrTmFFLnkrRzcidEBCQE9aLywkU0kyPS9rbkA1SlU1cGdoJjcqM1k4Kj43RGVPbmU2cD9mVmhFZ2FtWTkrXSo0VSp3RCxKcjhRZzlJcDFlUGh5NFUodH11JU15LEV9cklJTGVOekYxRjxyYHg8UyskZ2lUUmExWVJfVFltS2slPGhobE1SYVUxYTtbJTlY''@;'; put 'put ''Zk05THImN1gxcHJOXW9hMk9NJXQ6JSpGVWF6akMjcV1eVXRZanFxaiJsQU5HLCQpOiolfEJ5VGlXaXJpQ1ZCYmckcnolLnkqbjtFOmFNeEdPSTlpRkM4djFOaEk9YDBTeTtZWC9rOSVDZ2ZoZjNSfnw5VERiXzB9Zk95S1lieWgmRmo8d1k1TnFqI3ZfIUt3RCQqfEdoNGJeaDdwXT9WU1RMbG5j''@;'; put 'put ''P198d0o4RnpYfDkuVVV4ImAsYDthbGF+ZClHbXlFRUcqdj1bZGciNkM/PSosWVBXbkxmdkRgS3lgO3R8ZDBjUEY+eCRHJjRoOUdRYTwjLns0I0IlOUQsNzhRSnlLPkNOV3owQ2RAOyZtc3BdRUh3UWpPUi85dklHUTEwZjkvdzk/PHplTTB6e2x+ZGo7OU5meyoyaCRsUjN5WWRfN3d+VUVwRlNM''@;'; put 'put ''TlpoJWtnMWVdYGBxI19tLnc8SHRWajFjRWZ4OXtJL0E/SF93eSRxRlNjWXwrKy4ydnJecy9PZHAqTEQqQU4/SzkjdWJFV3t4JCEsNSsoK1ZMRVZfbk53bj5Pcjh2XUArSio9WzFqUUJKfnA1bDkubTgzK0dlfDJkU2xrTWA9QFc7VHxYb2o1fFFJPV5qTlVDMy8mOVlHak9bfEBhWjtmXj54MWZ+''@;'; put 'put ''KTJGOHNqO1IxS3JvTX5SdXxDKDV+VFY1YGNZeGJhTVU0QVE1ZHlzdzZjWERXLEV3UjZ0X0x2XXF9WlhxUnBjSDd3OzBNfiksTV4sNyJlTStIXSUweFd+TzN+dFI5OThNOExNIkNadSFGY0BYInAjZTVia0VYUTFTMUosKFRJSDFmNVJleUlDTnFwP0lwWTtTYGNUaEtbSz9Ra15WRWdeZV0ubmhm''@;'; put 'put ''Vnk9YmBDJHJWZCpjTzRxdmNoZ1QhfHlPXnMwZGN6RCZ+d0wpc1lLKzQofS5iUWwrVzZTNEY6MWVqTT1zQnI+W05BUDdtKzc/Vj8yaUZ1dzx3M3NEOlplVjRYMCtxXWUqaCMiQ1R7fH5bYSFbLlIsdU90Ky4lJTIvRjAwRE0+QCFzUVY4dzBwUCJrNTh8L3I1QjEzRUQqU1RAKl04fj0uOCM+X0g1''@;'; put 'put ''d0RDcVh8TGhXZTUqPVVkayg0aD4+S0k7RUIsXkVTW0VXbl5FZntbXnZiLGYreTt1alE5VnJ3dUlDSDRDel9BaGpIQDAxbGR2bEdQPiFgfnJvM2pFWEQkQ3ZxfiYrfFAidXpbP19jQT5POH0xOExuW003aDBhLHVZaWVIK2lCXm0kOzEjWD5ZUEc4RzJqRW8hPCp9IkI7OyNia1RjOm1tdlVRRywl''@;'; put 'put ''aUo4W1BZJT9Re184NDsmXl5rcy4zPGFGNCRXTWF0bWckdnw3d0skYE0yfWhoWkd3UXwlbiluVD1ANXxsaiN7Jn1oW2pOSUs1ajY1aC9vSzNOKkpPc1ZjXVt1UkIpJlNIWlI5dWQsTnw5SUFsPHZrJUB0WkBWPztYT1pvY2pFUndreHVePXB7ejRbezlGOTM0QCs/VjclUVdfP0lqfUMre2gqd2o+''@;'; put 'put ''cH5JTCluWUJ1bTk2TDBKNFUoO1YyZ1EiXkAsRm9hPiR4MmlmciJSeCFvZmpFSX1mbTFbPy5QNmhGXT05PCtedTN3MFc2fDlIO15faHQ/PkFMN0JKIzc6Rm5+UG5LYn5qZHI5aClXajs6cmpiNEBrPEgldCspV1dhY3srdCssOEdkUnFRTH0odmZ6XTh7b1lncEBdJXxiSnIwNT5XcjZ2RUdbR1lL''@;'; put 'put ''YXgvKSxuX3xpRnk/fTk1YHdJRmY9OiVKbXtTcTxiaDkmQlB+bz51XUdhS3VmXmxEJUBlVFIxeXUxbFlKRH4rfjhCPGdOUUpSVmx2LD4vSXN4LmlgT0NNajc6diNKKD9aXSYwJV9GWlo9IyYhdW5KTzxiUSlnMVJjPD99aF5KcS5RVXs1X0ZVPXl1fS9lZ2RnJHJLTFYvQ0k6Szx5JC4kLjlKcmgh''@;'; put 'put ''SUxmWXMqQ2tKendvMVVDaGshIX5Kdl9CYDxfMGRvU29OOW1aQ1o7LGtVMkNwfV9QNjRnOnRjZkVrM2gmekFnTUk+WXNHVDgzNHtLMXJyNmlxUjVYYW9wJmc7K0huU2NWeVteWUFWSWB1cXx8Wl44OE1GfWU3YzV1XyJReERAYiUkJEg9PmtNPjZwMD9UNmFhNWxpQXt5alAvOnVCVDkxUnI3SVZ8''@;'; put 'put ''TWRIc25SflNZX0dXRHssVzxKW0Rfd1BQJEdzcEdufTJFKi4sS2pIYDpbNTdAUCh6IyR2YCU0dTZ8ViovZVJrWVtgQH5+O18hLDtbVzAwIjRaekt0fFEyXU9rO2BtaTFLS0FTViI+X3x4Rl1vN18yXT9lTCQvV01bKy42PGYsNy8pUVtESWBNdU0oZXVKRDByQ2R6KU1CM2QiUTphWUhZS2BMOHZy''@;'; put 'put ''S1RaSnhlLigrUzNVejQvY256I0hjLjluYzRUeTYoNEJ5dCMmSjlwIVY9Wn5Pcm8rfEIqTipCN0JTem1bMExULk80SU9Od1JxPUhYcEZ7Qzk8ezl7alheL1hqJWtQKkIodV52YTJQQmc/bEB6Z1dFSW1vNTgqUFZ7MSgwXmJ0PUFhbWt2cyp0eH1gZWR9ajgsVTQ9JmNhSUZETTZ1QXg3fHxhbVlU''@;'; put 'put ''VlVbMmJ3TGgmPVkpT05vfWRHdkFvRXdzJHVIIXluInxCNkw9ZWtYU0V0Q1RfKC8mTn0vZmtFIkZeMzQkTUd8RmFUPk48Wmg1ImIyKSxVZysmc2pVa01BYGM0Vih2cFNNPmxvaDh8PU5ESjlqKW90a0J2Rig+OkBeMmFzWXVxKlZQdnhZam5SVENeT1M5NzJJTUFHKjoiXTJvTT9dQCljU0llc0Q2''@;'; put 'put ''QlpDLEVCYyI6byhOej9VQ3Z+RFVJYjhgWig8JmlFTiRxW2d9fkZ2cUZtd1M6UyNMOEl4NnwxQGdMYGBeWHUjQGxgNXxMbns3QkBZblVuSGMuckNVb29LQD5fTkxCN04zOT4qaSxLdiMvYlJeLF0kbEFkJiVXTUhTJGMyQH4rKlAwWF90N3xrQkIwJFNLYlc9a01GLDY3IzordjFYcnE9aWg1QEg+''@;'; put 'put ''O1tnKmRAZGZAdj92RzxkK2xbR1tLLnMsXUJVQEQmS0wvQGNRMWN7OUNkInkmb3MjLGNofmJdX2YoOk46LjFxRCVYbnReWXModzBNX3h+YzB0Zl4oIW1oKDUmM3dWVmE+cWVMQzB5WlZIY185MnlMOmc4RkJjJVlfJWx1LnxvKlJvdlcuJVJfPldebHprNnI3OlhqN0MuUCkkOCJUOVdwa0ImYXsy''@;'; put 'put ''KyFzWndKJGxMLE9aKzNUZHQsLDZHTilufUt0WFoqRGU0bEg3QHldTGxFLm5jX0tAN04zbF9WRSp1ZClUYllHJGslOilpclBYbzgoVHhbVVd9dyM2PSFoRipnaUQqYFldSk1Te0ZhNzdIMXdIIUdSc2c9cUc0RCxuO1MiezBsImlnVmlJel81UzkwcjZkVj1reWkrbj9QV1d0LypLV3pkTHYjSDs3''@;'; put 'put ''MkZ1N2c2JjtgPkAwNjNUQzVibTAiV0JCTytvbSMrN1t1Ul9sMXI4Tz5xLHFGYWpBMTo5dDtqc3gqWnx5ZUJ3S0ZRfSxZOys+JCEiMztOfSNERmgkT1QybSI9WGwrJnwxUTdhRiUkd115c1FRNTtMQDlSd2srdVhMM2JpRDB2dE4kdH1nPy9iVXVXMnBIRlZHQil3TTp7NlhoKEl2aUlhVlZSUSpd''@;'; put 'put ''ZTg2KG5fQEY2cEUydUF2WDJoNWJ5fGdpZT5OK3IlJnFpNHZwKzIiWDp3YztafW04VVV3U3F1M3hHfXVtSXhwSC9BdzJHIXFub3psRk9eRCVgeEw9N0xyJiRmbTdUNDJiJmYpcSUoNnByYUV+XjEpeyhvS05EfkEoT2ZzUHU9QCpGKTxANW0+fkVeaSh1JV91ejolKXYhfU9JeE04biFRPTUzLi8/''@;'; put 'put ''Z2xBWFcjMmUhalJpMmVVWGU5V0gpUD5jXkU0dTA7PW0hPDE0LyN1Ui59fCxeQm84bGl0Z2hdRjtMTVYzKXsoIyN9ZUE8Nmo+TmRgOlQsWTFYalMqZnNRPn0uSndqN3JoaXdTJiN0fFBrMiMzQClDTSVmKWNkLkUhVEYzIz91RXE0KjxNSERXSFh3KS88JCEzLmdhYCJ4cCw2a2xwdyQ0bExufEhD''@;'; put 'put ''N3t0KklCQH10cSt0aFt4bFV1YlYhcjFWalhzYFMsdTE1cHZ9SVp4RHd5dn0xV0g8ZHVhbE91ckxTfmo6MldiMEZXRnlDVEloK2IzS0hBTC9qelVHMzo7LlQxTHBjbVZWNyIhe3JnU35HVWc3S3heInlIUFtzV0kzcm16bXR+QDIiU2tBM0EkVTYkJiYwUkZrKSxac3xKWnMvL2d+cE4hQndhSEQ0''@;'; put 'put ''ZV9eMWspaV1iLllLT0Bvd2p5NnxkU2o/OjQ9LmZMX2Y+YlhxQ1I0SnVGMjkkLD5aQGZ3fll3ZWdUYyJ5JS9BVld6UWMjUVFoJEUyNldxbUIzMU1hRDNDX1djPUU/ITA8clIjO29YUnBZVmEzQVB1endecD0vTTE/d0tGP1FDMVkpNjV2cjx2TldqfTtbKWtJZ0ZqXS93W05Ed3hqRXg3WEZ5JEdL''@;'; put 'put ''S25xMipwWFprI2BFWmZoYFpZXXR8Sl5KI2V6XmgkJFYjYj0/ZiFAREgycUozRGVoOio7bF07ZHZ4OGl4Z0R5Rl0rMj9hKmAzVnZCY31sbSFwUVVUS1h9Jnw+Z3pTL0NDPl8pQmFTMm81bz1Ba1s1dH5OR2dSRzg4JHJpIUNBaXF1NU1Pck5eI1FiMV5HaygjYCYyPDYkZ2skJH1jZikobVE4UkIp''@;'; put 'put ''PGQ1Km4zVHswc1JWez5eMyRJWWBqWWBVd3FWLyIvQ0BPZUU5Xz9fKnFSJXhvTSk4NSpfb18pYFhCMjV0Q0hFJGg/SnE5ZHpQX0NsKXNiMSZSK0ErSVh+akV9eUZ9eTcxZiwwMUlffCtAYmApSk1nMjJpelpeeHVWR2lQP2JoMEdVbkZRdDtWKCQld2p9a3B5Skx7dz9YIm5qOkI8TT4hT3JUayUj''@;'; put 'put ''Yzklbjo4S31DX01hRURNK0xlRUV3OE9KZ0hWS2hIR2JuVyM0eVI4cTFCTmpwP0lCcnYyaThdJkxqOyF5dCZKN1R7RyxCQCkxcnFgOVs3REdJPDVhUyZkN1hEZ05FO2M/aGxfPVRnSGxzaCQiVjN+ayNYUWBbQjZ2XXk5UFA/MShpXStIJjdSJXovLyNFUG47c0pPeTtHVnxGKk5CXT5ubiYiRDYw''@;'; put 'put ''MnZhP29OQUFyM0hzYytVJTtbQGZDcVtgI1owIT0uO1EvVChiSlhHZiE1SSNoVnA+QV0+WltlSkZyQngwNCtTQ1dlPnFVcE57P2NMfjs6SElKNjZNInRiJD9dW157JDtgXl0kLDFReFR6ODtkclcvZlpUblpZe3VdJiMudDRhPHg9QS9GdiFofVpyNHgxe3FuNnhMb0R2allNUFMpKzdAN1JqdVJS''@;'; put 'put ''LmlxflZfVklwVVR8OShtb3xfPmx1LG17QHMlS1V9dk5fInFkI28mX2pFdWUhLGU6LmRxO2lXVlIoV3ZmfFhdckU6aGxvbkBGcHZ7SmdtS2JDRHwiV09MT0JOLkV6aHVNNlhnXmkjaTw2a2tyTEc2O01zWnVHVD9WL2lraXprdmpWXUNZPkd9OGtySlE4VCsvJkJhUk1XRUR+YCQiP3Jze0EuPHco''@;'; put 'put ''Vi9OelBMLlIyfHRJI2lZaGpZNWVuJjZQfCpVTHV3SHhuWjRVfFkqInB7ZmE6TCQ5M35nVmE8NWM+dFhTTDpJQy80RGphVGVzSzUke3tYL05rJWpIaTBYYE1DUVlDI3R1NXQ5Qj1LZkR0MFMkI0coWjA1I3N7LEY5YUNaL1J1R2tuJn0/YT0lJGcpPC5XfWJlaHQoN0JYTlU1KjEkWHU6MV82e0Iq''@;'; put 'put ''SF47Y0BEMjVKbFM4O1FFdlcxbFZCXUEkfT5SJTp6dDpkS2BXMCRNUzxgc2NtMnhwSm5zUWsrMGBWTDUobiZjZ2JGO2VPa309cz53TlkxJUhzKlkscTY3KVpZVnB1K05SSFVUQT0pKSxkej1fInsoOElVY3wibUNqT3xhVmRyP0ZbVjNdY11fRmt4NHQpQ29NLFR2ZmZhb2lrK1pUY246QHlWM3E+''@;'; put 'put ''NTFvUWsrISN2NEBWQjo3XVBpQm1pLzhTfEcjVTw0T3tTeGdMI3t8S2U0MHVeem9Ge1QqPkZPfTtCWUhFSVV7c0ZQTzV8alBTNylTSChaOUZvUHldJTl8S2NvIztQOX5AfjQzbUJMWUpXPHE5TH1uSCpAP1sjdVBqbjVZdiZoeCU6I2BsOUc3TiJhdXwqPig2cU59U0w1YzZSbXcsIiQ3RCFvSFtK''@;'; put 'put ''aHRVIllHQGAwUnVFc0tiaSlaaVEuYzkiYnJ0S1VfYDRdJmpZUjY1PW95Yy8wOk1tKHlVRWJLSyFofnV7Jj97NkZuJTJdJEh2PyVIcjNmPT1wO1d2fl43fmduVDlqdVNEXiJhRERUX2AvM0RlUGRpJUs3MGgsRmxKL3w9SyF7PElRcio7Uj5kOUZGL311UTk4KCtOMGEmQ3tpemBsVXlzdn1xbmdm''@;'; put 'put ''LGtkeUFpMHRmdDpCeHtxQUMrOGdTM1pgR1A6NW0kaUFuLCwoUEpCVF5mKH19aHRxQ0g7XzBaUl5jSkdkMH1dJk1LY2xwNGxWbV8jO3A1eFp+S3tXO0RWMlAqLCwvQltxZ2c9W3kxfDVUenZnMTYvWl5YQ04+bD96WCFdNkZKK2N1WyUmOCpAeWIxWXJSJDRdVHkjW191W3B8Umw8OlZ0N2JXJkQ8''@;'; put 'put ''QylvKntqNCFfb1lmWzdpbzdDb2YvfDJvLzlyfk5WN2F1cXZiKVsrZXp8SDd9TGxdXj47cHoyOHs/STIkYlhjamZDNVlqXWVNPjVNeSw0ciF6Q1ImTndmYkZrTF0heilzUDFPbSt9Nk1EeH17VjloTEk4Zmg8LC9naD88XkZRUVNZW0lvLEwqWGNuXmxYVzc9X09CM3MwVC5JaWJ0TnNXRGc6PlJz''@;'; put 'put ''TEkpS1IxXV9UY0x9Jil7bG85SkAvfi9+UW1gWSohYG4qOVFMNHt9fVRHWFk/ampjJi99UEZvTDsrQ21aMF97VSgvTW0xeChAXTQpTyxDQSx7dS5OeF4+YFtjZGk+Q3J5S0ZzOntYVGlbKzdjJjs1XXpQPD88TDwhc0VCX2Q2SllsUkp6dTh7QEJZOyNfK3M7Jjg6MChfYGxOISRtYiFeRH02K3c4''@;'; put 'put ''XkpGcjpoI1dyLzUwT3xqdFouOlEsUFc3REJoKGZ0bHBONDErKUNpYz5+Y3BIcHJISVUkNElYbnRmbTd8SCkofkdzMTM2ZjpCfSEpY1NiWmcyWTdDWyZbZTBALmRxPnRwSHV6LmJ5dmgwWkJFWF1gWTozSVtSQWNXTV0oVTdUUjRYSFZwWCI6eXkpQnc/RllePiN5cSJmO3RvKGpdVUVgYE87aD0u''@;'; put 'put ''dn4kS2ZDTmpATDZueioieVk3YzBLc1J5PWR2b3hrX3xIcDRgKGM6WlQoYyJBUmkpI156PDozXm5wV308aGpRO1soQChkVFJnRDAvVFt+OCZ4PXFtazV6Q28ibHV4Y3lXd1FMajF4KTdoS2w/bVZ8XzJ1ZEUsdHNOejZiaDRaeyZnT3M/fFVALiMsRygoQkpIRDZKeiUxPUJLXTRqJkBYPDJbemdf''@;'; put 'put ''PFNfSVt+YXUqXmw3MXouOUo1blZvcFZaOTNteHZOO2hNeUtjSWZpTy5CPGcmc09Wd1hTRiVXeixSZiVrTlE5XlRbT0FLREZaPmN7cnd4e1RJRWtnMGoiLm52eVVGdTI8TitCKkltI0VdbilYPmJtWVdmQEtPNWFtIV1+KXEvJH1keWxsKX0+ZGpZIURUezZbdWRJUFAlJlNiSDlpSTxGR1pdIVg1''@;'; put 'put ''VmhkUDVtcyFkS310YjQ0ez8zfiRfbltCMTRBTlgwVVVEUHd+RC5NO3J2N0ljR0A4aykwbilXOzpqJWRqZmg3TiFANV45ejpOb114MH5IUXBKc3Rheypma2RgYzwvOEVCWEt4RHE2InxzQ3lmTFpqVVtYLnxOVVh+cnYqM1pfey9xIzEpPGIwcWJRUVVNSi5PIWR5bmdnUlZHQ3IxdiVLMjk1JkZ1''@;'; put 'put ''L09vJnRIdXI2YnNgTDNbOF96Uj9CWzNXS3Vedzc/Y3N9aD4hYktEOChoJV52Mz5uQEJZOWMvNlkoZismd2JfZW1vVGpmUGUsbl9qTThJaU03R2kiYTI7LERaNFp3fT4hRCwjSEQ1SHFlRjMhRC9IazZhTU97QmRNb1M/ZVpMSD84MztRRyJPMXpMcDwhczllaSg0WHpWIkFJVkBPVkxEcDJII1ZC''@;'; put 'put ''IWc+aylVMno3NHpWfV5dL3cjfnwzRG92I1pbSU8xWUciODNSeTYkTTApZzx7VFJlT000Sm1YSWtFfDVwXzlnS1hLKmJkPFJqRWlDPio1ZVguKTBOLi9nbCUjdStJYCV7JjF6dyhNYVFlLkY0aCMkSlhKP1hLVyV3bGRuKHxlYn5lWyFSXypuJnIiWXh2UC9bZHtLMSYmWDFqdXhKOyt3WGkkUVR0''@;'; put 'put ''VHhCdGdeJUcpMkBIezRebT04alk3R3VKX0M8JFApW1hFS3crMCYlX3ZUI3hSRVVGJXFaWz5JY3kpRypkO3deL25+WCQ+UT58TGdJIXJLMDFEaEN7IV8lM210Vk94MUttTDx6YlJpMyxuIVJmb2l3RHBnVCI+TUlNSC8+fUtdOXJbYWY5TXNXXWsyYnksXz4ib1VCX0JaI2REWF5rQCxhUDpjOWFk''@;'; put 'put ''JVdsU0Z4YENkM3ZRbnx4YUt2UjpxcTp3OUMqdyt0citEaW0hPWh5VSpCS0dBL1g1JFBFaXpyS3EkW0dWdzlsYzVvNWwkIypFcyMhMEVEW2NFPSUjPXhqaG97XT1wV3J0aFFCM1QocClMRGR+NkBsVyJZeGlbOSlKKzN8NHIqQ0Y5VCNKfWFhVSo6MkExYHtMSHdibj4vMUxQZkNRKWwrP01ibWJ5''@;'; put 'put ''WVc8KWIpdkohV1pMOlVQWlR+YEh3LjgjcGdKX3ZeSyRsIlMlPTJyRV12WzFRdUBSOT5QS3R4M1RbZm0mR3E3TFZWRjZXSFRlSmlSfVFSWHpPSmZvYntJQWdGeVJAVUVNUTQxO1llWnFINCM/cCoic20ieUp5ejdjQlBgY3NIOD4hS2l0YT1SI1NtU086YyxbQ3x9ImVPPXBjPXgjJkxvWmlOS1Uy''@;'; put 'put ''JSRyIjQwUHhnVUMrcl9pbFI/OzVMaXpXNzBfaiJKLEZ4TlBRSiEuQzNvayZBeSNPSG5vPGNZVXF+O1csY00yfXFFI1R8Q1pqQXJNTXptRGkvem54MF9deGlAYDxoU1o7L2xAam45ZlUqcGA2d0hsX0p9a3w1L0V1L3p8Un5ySzJHO0FoVG0lSWs+fX45bm91UiwwNSFUL1hIK2l9T2pAczsmY1VE''@;'; put 'put ''VVVFX3ZrLF44Rm5palA1eV07LnpDPkgiTTE2QF4iUFVWQStwOyg4OWw/UV14P0tidHxBai5TRVNqRUpndTx6ZDtxfERuOV9MSzJbekRkK1A4REQsJnd5Wj0lTSNZQ2hfdlB1P3p7c0lRdyhBOz4oeUJwYnlzLjglIn0yUCMlcDJvMGxlPW9bS3h7dz9ZQE96SkNFI2BVPGFgKmAwTW9gP3A5XlRS''@;'; put 'put ''LHx1S3xlZEtjPXUjOSY7TTokVT0sU2lsSkpLbSJ3SjFeSU0kJVByPWZ2REsqfV0jP3I/RTljPWQ5UzNCRVtrfmBhN15pVmAwbzJ2VDtCZUo9YmwoOnRCdDxDaE4iQjt0Wzo+WWcrMl9dP1F6Rm9YP2wvOT0pKFd3ZGJwZ3FEcEhbRSllM2lgWGphUjtOTmUsTW5qRUskeDosdGx0NksoOSRwPEFl''@;'; put 'put ''N3FTImp9JF1jeE8odV45UW55Tk0uMSZZU20sL2pbb2x1WW4hVTxAYzdjT1U4InY+KD1EUUd7cz8uZjxkRjVZfFU+TWd0d21BYyw9WylxVGszeCpYekxwZWRiIyIqRChlflozO2UxW1NAXWhIcE5lX10vd14kUnJxS3llSVp1UUdqYzRvPGliak8uRDtIYmZYPyIvNi5fN2I/Qnk4VVl3Tk1pT0JX''@;'; put 'put ''Y2xhNGdhQWpDeXguSkpHIXUxbDIkVGouc1RNIXcxeEx8emN+NXIwbGIlSG1qKCJNRnJ8aXIjJEEhUnk5ZjYwWGNic2VYfn4jZixNa2s6YEd9YkdYeSF0dmcyZD46em0zW31kRTQzb0RYfiZIJUlxS1NKYyxvRm07LD4yUlZLZFtRSnYoL0FpLy9aQmMoTExxRV1vYlMhSUw+WiZ9OSslZGR8ZWV0''@;'; put 'put ''OWxuSTxfR357Qmw/LENDZEIqayZ+VDRsKThwOWxQbiRoaX5bdHpKb11UKm91aGRScV5Ae11lUzQqLj1jaiNyLkg5QlBLJisjQGJnMzgrI2I5QCJ0Ql8vLEAsZjIqWGFSJXZKNS9jcnNqdUxwdHwpVHF+dT4ye0MxYCNSQHZKfFguXU1ZVHd5UF86Z2gvRFEufkRjbVF0O3w5WCVEaUp8MkN5RWRb''@;'; put 'put ''MUpEfD1aP05MYChwZFYlRUN4aTpbMzYhRWh3OXNfQShHNGgmPV9QV0hUJFYrIzJfO0ZLRWAoQCRJY0hdZD06MkxFcSp2QUo1UiYyXyVQe1hCM2M0SzBFUVFSUGxMIUgoaSQyXi9tS3R7Um4rOm1Ue2c2N2lMTF0qfC9BcH1yLGJQRFAzfDciKkppeHNgd1hZS3lbOnxWJU52KVR4amAuI3taR1tQ''@;'; put 'put ''TnErRUgxNzNLP2t7WzB7Yj1ael1hRF5XSn55OF9YaHEzO05Cbz9zfW1IfWVXelhUOWx8LzB4e3BwKjNlQklNK342OG5ZOm9AdjNYWillS2FXQXcoWkNtVmNKQndsdlszbVRtRXxxJV9ve05eUHZ1KGl9Y01wMDhGUEFhT0t0WkhLJFFUa1gxdCFMRFpJY3k6VTNucCI7OS94QVg/UElneUpxNypH''@;'; put 'put ''eTI2K01qelBIQzZ6QEQpLk5NaWBUTDJLS2Ujbm5kSnt0SWJ0MDZKdG0hVjlEJl1BLj1BeHtTbWAyZFpta0k8PjwuMkt1PnU1PSFgVn1xSiFGTkhxMDhfPkxFMnF6M1NaSi5WWyRXUDw9XSpMPzEpZzp3QnY7TDlva2IqQS9POWJOTnlzZzBve1Y/OSEhKkpUe18zdTRlaDN7Tl8idzVSZHQ6WiY7''@;'; put 'put ''Rnd+ZnxvQnlxNTg7PEdYL0RLSH5tTXQmPVd9V3JzWHo+OmNIKEJUZ2k0aGowejs/YiFKVTx3RyYxcFB6bVkhPi9Eb2NRRE9TbW13IysrVjZrezlsekk8VU1rPVFBVk5tS3JCUFYpSXBdNzJYfWkjfERpKzxgPmg1Q2dMX3FYVVJKUD1rMTlLNG9rKkxHdkAsKlRiT3d4KlBKMT47OGVaWjE0JD9b''@;'; put 'put ''PW4mJWo6K3pOM1QzKVgwS21jakBJRUBDPn5OPm06cz1AS0wzNCg+dHEmeWdVNXR1Ni5wT0FsSWtkNyY5SjtBcHdTMD1wYF10dmJLWWMofmNHeks4dnVnY0B9W0x6TVREZzlzJVdjYV1sdjJebmE5T1JFR3I/I04zMGVjO0xMZi8qSi98ZTZadX1IK0Z0RWwyPlQzT0I5JHB0NXckfHMsPEdtaUln''@;'; put 'put ''IUQlTSVDdHtDJl4pI1h9JlJHbmhaPktgVUU3NnRnL2hgZT1TT3w1Zko8Kz9qWypPRFM8VStBIk12Mm07KTxQRFtUP1FhUk5AImJMZERqZ2pKTyF8NSpTKS5HaDJ+YzxxPjo7fnN4TWxWSD99UVheY1J2dDhTQDsxVllNTEJGP2Uvemx0SjpXZVE7QWRHZjAoOiVFekxRVWgmOjBnJlZ9XlZ3OC9E''@;'; put 'put ''Tl15YDR9UV1TXU5HcFIzWm1vMz92UlFfRitxQ3sqalVTY0BCVCNvTSRbTmdnWGx1TnsyJHImKXJ+TS9MITRXYl1+a0siVmElM2xyYmY0a2cuVEsoJWx0KTQmOlJ4PnZgcFtpVm9QUnZhNkdhKT8yUGJAO2dPNDJbSk9OPU42e2ZjW1NDanBjQ1UqZyopTFZae2FncGZXUjE5Pk8sYVF1TVpwJF50''@;'; put 'put ''fHtAcDxCfV51ayFFSSM5cjUoc2Z8XzZOVmskNztYUk8mSGY/VFJsSzN2VzYuSEdoVDp5M0NMU09+QWlUIngjcUJ8akZ0aDhAVGB5T3BoZnx2MGFyNEs6d2g7Sn5TXV0+PD1iJEZUIWlWL2wuPk88Mi5abGJ3OGxMT1IuVVBweFkqYDQpTUM0bTBnfTgvNVtmWXova09wRD1YXmEme2xLJUhpVCUk''@;'; put 'put ''PSM0JD4heX13OSI0O314Wzd6R05JQ0NucndgXnMvWmMkTUVVZCgkVG45eWgrUkNTb2FkNHkmbDhfLFs3aTkpPFUyTihNTVFkd319MHlCRi5KeWNBd3FwaWooXV98bDZMYXhUVm0sfVdTSHNffFBjcU1FLnllPCV0Vlh+PGVteVF8OnxGOHI2ISpGUz9ebHg8Mk0+KjY6Li4uJnpPYE98T252XTBl''@;'; put 'put ''SGhWXV9uei8qODk+RTVtJjYuQmhHLzY8fXdUbXM/UTQ+PkYuRUEzMHQuM0pwby5oS08rJjdDK2tCWnJ4PWd8PiIpVzYjbGs0VkF4Ymx8MGVKfjtBRythRGhMSHBSTi9ueVJySWdUclN4ZUw0M0RKI1JaTktYRUptK1o5S30xWWgvOWBIYjshUFBIVz9+cT5aTUNteUZCblROLHAyUXZWJUpsMVpe''@;'; put 'put ''NSM4PDlxMUhIeUE6X35PaiVwfE92XT57JiRSY3ArUSNkRmhHbEglXlYmS1hHImJKcFImb0EhIitxKjdqWi9uM1VCdm8pfGVpZllpMnhKX194MHlGXzNjQjFHMz5RQ0NMaVcmLlN0ZnFWNlpIPnNBUClmWGRHUl1MS2JbVmZZPTVTV3JdLHMjV254Z3Z5Z2ZaOGw3bTtQPGBzYWZpdX14ajdSIn16''@;'; put 'put ''bmQrME45TDc7Kl9lZzRMcmlZdXV5ejUhbnE0MSNeK18yYlg/WHtKNT40Q1g1TkUvJCJpVkkhUzFsUSxweHxeWTZdSn5WUyxYSWBGMGlJWncxXyVKSjtbKz88MklYOko7Pj5Nc2lOb0lkXihSPS46NjhpNWR8JS9oYFU8R0QhUGI+JmwxaVAkZXN4MSVLd2NBe1NuPykpZFtMdEp0aTp4VntXcWVG''@;'; put 'put ''OEJePDBYK2lBWSY9Z3xzY0gue3t3X0R8M0whfkE3PHdhOGhQJXk2ZUx5U2s7UzNdJmc/QXxTfX5UK0dGKkxyPmYuXlpxVFIjLD5KbFpmVkNgPGB8ZHA9KUV0RntzMlIyc0pqQTl9dHlYclNxQHMwY0ZRc0tCWCZmVX5OQElJbzRdYG1rK1ZROk4hZUo5KGZgTGdRdXl7ZU9pW1VMTXNFL0ZqIkdT''@;'; put 'put ''Xi5Hdy5aYEdgM1NkdEJEel58fEpCbktkZT8rNUtAYD1sQEA/VSJhUmZGWCNJcHUqRWx9a1Bde3cvRHosQ3xZIz5jMGF3aHVwL1BCOD9Gejtqd3xDckA6PXxOcHZ6ayV7QDl5SHdUSFQ6LyVgfU9MTyg7cX5neWg8KD1aJD9tY3BbP1ZWRGY5MywiUnNlZW9eWzUpZTVQc3pRa2FLJTZqeFtUcEQq''@;'; put 'put ''Vi9fX3pITigvdltIZSZCZnx3TXZLc15PMnRUKzY8OixCNzg5LD9iRV0jd0s4VzFNI3JDSHAsKXpnTHNMLjVpI2s3SFhgUHIpNjwlKForNjtEWF0wTVdvNz5vQCNqazJkblh4KGhPW15JW1hkLkQpOmQ1OzRkb3NxZ2taRTNgQCwmOUwlOnYoZFc0ZjdAdnFIVzYyTDw5I2dEJXh0PG80KVQ4Y3RC''@;'; put 'put ''OzM3cyhWa19GXmMzMD5DT1BscjV3YVllRVZxUTJCRzdSN1tISGRWalhAbyRRI0lDRDRIVE09UUZ0PnMiZmxtRkJwZGRASiY7RjdFeWI4dkEpY0RAJSJgQXN+cW5bQms8bmBWW2EzNz0/YkNyO2tQZ3pxLjVxQUc7WXIqI3Q5NTVte3lFUjIhZXYiUXlfKHB0fEVQP1BscVo+PEVjckhMVykze2FG''@;'; put 'put ''IUguV3pnQVh0c0o1W3RtMHxGQzI0ell5fklZPF05NDJoOG1MUmhgN3NxZUZhLmFBejBranI7IjslTHxHVFs7Z1Z9RWxAfTcwRnAwZjM9KXlyWVE6M1JNOGVlPn1PPEkzcS51K3dwdE5+KTFoe2RiditKTFIkOj1IeHh4cipFOXYzUlVyRmk3QTVnckNuS1BkL3kodHZmTFMzIWJLLjgkYSUyW2Em''@;'; put 'put ''WjZfb0lsZV5VcisoaDJoTEZ4U2FbOEpHNVV6cXslaXg/bUdyTC4oc0xlQTsrWkV7fm9IX0FwPkdEQCtsP0NNJlE/UmZndURzenIjdC8sSUZlPFAiQkYsZV9naEQ1KEVGJlZrVFQ2Y2s7U0NsaGdsWCJ1dkZANSRCamlXUG1oPFZUI3VBNDJoeU9zfkQ3MFdOSEQmaTBxeHdmalNuKCtGXWkjPHBP''@;'; put 'put ''diVTOXhzdnRVTC5oOHh0S3lKeCl8RSJBMip4MSguUCV7OGh5bHIpLnZQM0NnOH59bGZkXSpgbHx6LH49ITQ3enlzcCg4a3tFNTd4Xz1IJTFjXS9lcXdsK0E7d20qX2glYUlzeTpBIVZbSmcoUS9XYS9QfF16WEshKlg2YjBXcVFPZVNOQjJTc0VKKjBhT3wzNE5xI05AcjM6XyZ3Mk0pTDc6LHly''@;'; put 'put ''VHAlTlB6bn1MdjE/Zy5nMHlsSiwlUTp2dHIzaDpMbzBXYyQySXFFVGpvZXUuMHA4X3Q0Sz04M0RARy9wSWoxIipTUShWcHBuSzwxX0FAS3NJRXVsKWw4c1BsKFU0Pl9aWlglMEdOJElnfEUwc3pPRyxzJUhoQD5VRWMvJGBwfWQ9M0w8OmJwZyNHZVomVHFuSWt8KmIuOjl7JXNnI21qYypOeWZ9''@;'; put 'put ''JUApKzBYcmMoczsoa19OVWZsLDpVMklaeVY+by5LMnhlSUQuOyZhJTNbOVJsc25hYyVtX05nJCZ2Yl0vOitDYyV5WkA9P1g+JlBCXSV6aF9oWndQRjA9dytTe2VdIyZgVXFAclRVZEJBV10vRj1DSkE/MUpJM2h6eHg1PHBwMT8yUEB8eHlOM1AjP2JXWnVjZ0BCUClaVldxRyp7Z0VPTzpnMjlN''@;'; put 'put ''YTQlZlM8QW58QzRCUTAreHtwaTRST2tyQGk6IixnOSN1XTBqQF01LyVbbigsNHNENDlRQTx7e2JvR3lQQzJ+S0J6TEd7JDRtfVM2fTQ/NSxlRSMxSj9nLkpyYC55VF81b1VIWT1EVmNHZy5TbWMmUF9VX05wXk0xbERscnVWViFjZztsKGhESyojfCRQbzYyR2p5TUk9PD9xNCs2I3hXWlg2Qn00''@;'; put 'put ''QmdiajVEYz16KmUvYko/OX0hLllvS3VkTW9lQ2I+L2EqNnhDN3gpYmtSdjRYSU5KLyhwaDxMWmFNWktHWD00eGkobm03dEVdXyxGanJQaGlzLHxefCRQLzBwYzlfUzJPb2trd3FCfD1pb2xbWzI0LkxmIyh+dEVFMF1bITloMkZXbGJlfHd+TWZ+Im9ydEJtSSUpYTddQyRmajF2YHlLcXYpWXUs''@;'; put 'put ''QXQwaTQlIyVndXxZI3wxcGFCZFNbbW5KeS4lZ0JdSXM0cmR4cz04fFdWTDJpfGZsV153IXpEfnE6by5QaVAmUyEpdiVaeU5pYW5ZRjc2cXU1UEZdSkRTTyRbMDhpU1tCYCUvQXReTkQvXVFiLEQ/O1l7PlVLQzg5cjZRKGprOVk6Zl46O2clajVNd09pLCUueTFkaTxXWlVTajdCJHc7fUlCaCto''@;'; put 'put ''Sjk5U21JZWs2RGViI25jXVh4LHFIYmBKXks/emJVelFgdnQ/anguVkM3dS52ZTpkenEkek89K01vej5gLmt4U0oibi9te3ZfVEpsbXhKeD8val9VcWJdXktiIWRpdyJPZmgsPV1EKU1JfVA8VEQiIitwe3smYzdbaXNdMnNPVjVtYio0PWZGPCJHeD1ULlpqO0BvfUN6R246Zks9LG1QRHltNSZt''@;'; put 'put ''MkFUSE0rXyE7JTZkKyNNI21uYD9QWD18KEVVRkQ5bTZOa3l0aF01KVtfUnZJLmVZVjwsJC59SSJTZT8uUSFTWGJ2KHgvOkE6e3FPKzlITmdBL2hueHhdckt8UC5rdChKbnJqTWRrIT5BamJYOzdgVHJKT2t1dj9VVktLemFEUXlmTns8STpkNEZucVBMOFRARixMZk0iNjcjO0RZL3c9fihGaShE''@;'; put 'put ''YmUkSFplciYxWDRdIVh2N2VUaE9TSkxYSUhrOyY6L0hsTjdmTDghJXY1XWYyUE9DeD11V2pRTzxbb3ppVX1VY2JLNU1Jbz9vMEhYPEwpcSRsdT9rJVhWWSQ4NjdoKSMpekpTVVBTSmt+ZzpbcUpyY0BwQkFmIjtedHZKNDxGdmMpd01eRUlpX0AjOmRHKThDZFo6NlQmekt7OmU1Vlc5STBkV085''@;'; put 'put ''eFBFdlJPPXsoMX41JVVYa1NHVH1EUX1SKGkqRG5+S1U3OF5wX259b0l3OmdwNl5xcXxMXk05b3k6ez9hT1VfQFFoWnw7RjJEKnVOLlQiNEpbTUdidHRVc1U/KHd5WmpodU9VJHBNRz0qTW5DRDJZQDB6QyVaSF4/RiJGZFBDOS5uIkkjSUJLOVZNdlMxL09+QTZ3M2the3lZbytvTzpTOkNnW2oy''@;'; put 'put ''fXwuOkJrbTwzb2tuZ0o2IV1pZlF9c35+PHFefV1lRUU7cGZUWW9LYnNle2Z3QV1hIzIkMkFKJUNuQjw5eDs4MWRQezxxaD5HL3Yvbz1vP0ErR3d9NCFAY2NHSVhASjhgUkRrZnR5Rnw9VltIO34rR2czUkZJKzZwQXNLKUp3W0dhNkoiM2MmOzdyPmJDYFJ7dWlbW3UqPHhYUiNCeEVCJltWO2dY''@;'; put 'put ''QUNgakZTI2t5bFV3XjgxI3dHeHY+fUN8P1J7JVpfPCFpOiRzX0MxYTRfRWJEMChQXXd7ZWIweUReTGBlSzZ3cVZmKmFCSVplcXcmY29hbl92O0o8WGFOQzc9K21CaXZAZipeSyNYWW9ZdGE/fkZPRD1dRGxST3NeYGB0N35EcGR6V0pqZSl1e1teemEmMDFjeWg1bURCYkd6TywqanxueSteWSlE''@;'; put 'put ''czxiTHRsXUVrZS59dXUqKF12TTBrTjFYbXx8PSMyfFEzOno2a0xaMnhIYVh0ZiNPMCp0fVd8UzNXQmdYfHpiQ2dwPiQrYkEmIXlBa3IjUkl4VnNUNHF9UlpqfiVYb0hVLil1TUFYOSZqemdDZUFYYTg6Rn5mOmNSdVpbPi40azo/MTEqT2MpXm41Zkw6MUBeTmZZUCQ/U2Eoc28pWkAoSDYpQn1U''@;'; put 'put ''SEg2MjRHSFB0Yk4wfmJONig1KHtqRE8xX1ZXQD5nNUdMblFxKjg9NFUyT0d6QV8vez9FSW90dU1DIV8rY0J+djNEcTt1bXNVd0pkZUwhaEo5IWJnIzN2WldtV35BPVo8O2x1aEkvO3ZJKTxYT0gxPG4rRXMhXzhWPUsqKWpOQip0Tj9ZTSp3QXF4eFI5Y1hsbVdKWHZASW1hWG95RypUMmteSlZg''@;'; put 'put ''VSp8UzZ6N3V9RThSMU8oMXZGKio5c3NrUFBod2h9XilAOTFpeXxNdigsYlJ8aWpsa1EvJSQuLlRpWjdlfDguYDs8PWdLfkx7VlF3alI6WnYzR3Vya08pRjxkLElmViNvcn1bSy47PSZqJClWckUldHBtby5raU9iUmpqJm9iIj5mdCplT1gjVyUxfnR0ZWxmeGcsc15sN09fdF48Onk3b3Jvez5j''@;'; put 'put ''RjgqOU54WFZQRi46YFB5L3lVR3AsSToqP2JNT0VTP1taREpbOjlTWHhUbE9lKHhKK0BtU0RHY2Zhfl91QSx9LChRUXBRR15+VUtAM0w+VEhDXlVSa3o3YihCdFo2WXxlcnNuYiVeIUQ0YW11UWRLTHkxTUtFQEtROVZlKDN8VzNTKzo/RGg4cG1Sa21KLGszbSpgL28oNlF1X1QoOmF4S1tAOGUo''@;'; put 'put ''N2lHdWdZbzgkcG5nVHReSDVYXSgublV7bm1TYHBjJD8rZGYzaD95aFJqQTt7P0ByKDJaWTw4MGVwdD5LSndTaD02VXUxbSh6VUxZXUdrRUE1MSQmQXYsVXR4dnQuVnVYWSgmdzJsRlo5MywwRHJ0bXYyM28uX10hTnF9am5yK2gqKGBGYihuTWArN3dUOXkySWcsSS5NNih0VjEyI0xHMG1FVWli''@;'; put 'put ''LkIzQixaVXA+dlAiS1N4XTFzfUBRSEclLmg1K20jKTY6MUROVjxCP1lIP2t4MWFxMSNbLCl1RiY7InZrMVhLb1UkIURNRTFVWlMpUzFfY1MoQXtPWHosdy4+L2ZtRnVFTSYsOSErPyMrbkZzRTM8bjtteUBeMGZlNi58RUJaOzoqZVVdYDZTPkBDc2tZKGVuZC5eP1gmMUgoJVp2KElSaTZNY3g3''@;'; put 'put ''JWBzfFlAc3lCdGd6QEApS3tbfTJlfEtLejR2PyZqPyIqZ3c+Y3heT3o0NUshcD5CdzFXSWtdWUQ7TkErdVF7KU1aSyRebSkiNFB3VmxiVipDdHY3OWZMTip7Y0syXSRyWUVyaUp1emI9RWEpRjBAI1ZvNjlUaClBOSo7MS5wSk1mR097UVFMZnpoN2ldbSFWKExRbUI6SWM/PE92WGcjeSRZZz0q''@;'; put 'put ''QiNkJCElL1NpNHJjQl86dUozO15oflFwX05WT3s1aCxyQlNOMjVQMHNTMTFQNUcwSjpLTXJ9ISxNR2JDQ0B+QH1acCQxJSk2TDxDdildc0dEU09reFdlMG9DYUpBIi5JZEU0N20zYENkR3JDcFBKaSJeaTRYOTZwTGxZbmhiQC5yRyNsWHdbY1NYWCpwOERLUDVOaF5BSUc+WklwRjc2ZFdmK2lk''@;'; put 'put ''U0c9U2NJUmRYTUYscl5pb2xhTVIlYXsjfDoiWngpRHp+WndqY3FzYSMqLExaSjJFIVIvJExKI30xKXgvP1QoSE1SIzkiYCx+aiROaT01Z2IsZ01eKV5tQlpKJUphTUdKaWJ2TFIwSTtZQnN2TjxdOEIjOGlwPj9NPVF3XWR2WHZ+JEo8STtxSzJ9S2hoRU5+XkMoPF5FSnNtWUpIdzUoU2lbRCQy''@;'; put 'put ''V196fSlLP0UlKjtzeUt2Z0pOTGlEJEIkYSpZK2BtTUN0Oj4rbE57U2Nbe3Y/dHMqaktXenY1RkBJSj1tTS9UK2NFOVNrIS4vWygxO2c4QjBuQiZjO1djP2F+RSl5RUEwK2YrYVU6UHt1PW5meHNbOypRYnk0cW5aTEBHZERldVVFdXd6SyRdYVUrUVdyXkQ2YjFWRyFCbldFbT4sODRTSm1bIWM/''@;'; put 'put ''Zj86bk1CKXg8Zj1ab101amw/e1R1a1ttKXkwQWB1cV0oSl0hRHFfZHY/O2xDVmpMVjZ0IiJRT0hJfjopSkQ1V0peQ0g7ejJham8sb3p7bCQiaEx2az9vSF16cF5ZOFRUS34lU3hvTDtgUlpuW0wkOGx2Ji5lO01lPjA3dzk4ITwzVHJ+TVdoJjVRdXt6TCYiUDdKanVxRyMzRnFQVjZGa1FUZ1dU''@;'; put 'put ''KHs5bzN4eGw+L2h3Vl0hJXZGZDZ8amVGPExIaU8mWDw/TWB4Zjo4flBmfldqOjp0eCp8QShVWGlbPHIlZ04sInl1dVplWnlzTWhae3NOPWMiZ2dPX3FZISFmOj9KdkU7TkhsdmJFJjNwZV4kcjVNPWt9IkhfXkRHYkA7N1h0M2FRYG4uVE87ck5LclohWEhTSHsxNXhqezp4O0osNTV1bkdlSnpN''@;'; put 'put ''WnowQHIpTmxeUzAjbEM7OHFZYEJwXkgvQ0hhdzZPJiNiQk0sRjtbVntycWlfdCtjfWtVTXQ6fHFaTjBxL0h3RFUrLmp0bml1S351MCI0R094QykjZ0o/MX12QjxKIUhqK2B4YkBTYyhDRXdlakUyaVs3XXVYM0t0KHVyPWlQdjN9cmZEWXQ6RF9YPUQvKGpQSEZHMW4hM1F1UEZ3MzpPSm5bcThs''@;'; put 'put ''X35qUDN8XS8+Xnc0fXR7bGR+NFRYKjsqdFs2Pz9EQkloPllQSjFtLnsoSUFoa3hAT2p6WkV2Oig2aVsreyQ/RDVqNE8jIXtwaDhCUT1TLDxVayE6PCgpe0Zia0hEPn0pY1U3WDcwZ3NudzIhPGdVeiNSV01tSWhSQTh6JX10TDNbaDRjNi82WWpXV0lme2VGcSp8c0J+OGJkfmFAMEUwck9MUDUu''@;'; put 'put ''YzA/JlZjKlhjRVV0R3U+dF8+KEYyaGJuZFQrXkxfS3F2TGxQSzQ4O3JLRGNqaUklPzlyWT1BYjtXXjh+cndIWSZ8XTt7bF06a2l2WGI4IyRoZTI3S0BYZXlGR2lda2lDSWJGPXx1MndgI31zPmpCYl5lUmtzNXxFLGVHYlMvbGs0MmxXS2NFMEhISWNsOHhhJGVTfSwuLzNzbjQkXXYlOkU4VUhR''@;'; put 'put ''QHQuNWtZUFdWVklUXzJraUt5OiI3T2dSJihJdTtuYGJEKXAuWlN3UX1ba0MsWlN3KzRPZyw2JXFyTWQ3IXtIMHQ0Qm4ySC9ANHduTyJdIS5CJjkwNVdrdStKbnlIInJkRz40aFIoKDlIcmBDXz5fdiFzVj9kP0ZiZ3dVQUd+Oi9wT1VWLi5fQUVObHIjOUYpa3g+Zzs2eitoUFJ5e2RVfjV1YEsp''@;'; put 'put ''PCRlfTNOWEI9dzx7Q0k0WHRGNUtaSUFgNmxtRD1GX11WRUJnMFRoXTBkPEw3e3V+WUpaaiFsYEBLciReV0tJR1FtM0daT15TOVIvbzFjVjtVRSpuL0Q1Tk5vay91Zn0rSSZGTURZU2JNUExGKUYhcjg8dlcpL1dHakBTZ19mNyNIOnJNN281RytTZTJvJjNgakVIaU4ra347X0lNQmIuWXdwXjYs''@;'; put 'put ''PXFvbT47Kix1YHdKdkdIVU5ERz4wNVtEQHRRXnViOyN1c1U/Lz4+RyIrZjI4clNQZHs+NHUiVzV9IXNSKkRKOnJmLzNYbjNdT2tHXkFoK3lWS0B5I1pyVHFRK0B3cCF6V0hBd0xPfk1vbi97TVgrS05SZGxpcCoxTl1CKl4/W2tOYHBNcT5WYkRJb0EqUyowdUtbZSQ9L0l9bnp3OXMmK0U0JHJy''@;'; put 'put ''SXtjMXJ1PkV2aVoiZGddUSppYzpWUnx3Ijo9L1J7X2Q8VGRDfV8oVjM/OClnOGRldy8uN3lMSHxNISJRcHBoJXdXZTImRSJuNmZbQngpM3cqWTBvUVdPQyFyUXZQSSpfZDBkJjA3elJ0emNMTjlBOC47eld8NDUlZH1ESDFNJkslfHg7XW92WColPEo2XSkuOiE1Y358TXA+b1hudmNXKmFDPDU+''@;'; put 'put ''RzNQcXVJZnk1Wzldbzt5MCxvfVBCcFFDQ3JzMWEwfDM+UE4kITpYb3M/VVNnSGAqJnBvaUJkO3NZZGJ3ZGNLNEJ9aEdLMUpdMD9yUmA4KUBBLmBDZyQ1V3VXYC4lQDFzWDEjR2kvYnJYVyE2NSJJNHR8eFB6XyxpODZ1XiZwfTxsI0dgMzR3TkYsZWM9fkhGJTNSeHtZTi4uQllyd2VMImY6ZSZH''@;'; put 'put ''WVB4Z1hFYFZYRkVFO1BIZC55Y0ZKeFZYZGJnRHpLPSxOQlFAL3IkO2l7d2N+QlAsKHlFd0FCQH52Q087b2QmKHopKzdbQC8qLDJGTkIwLDxxek5bR01jZUhMbSk9LFd6UkVSUFNQJGg0K2hGIWtZQj1+WlJ4Y0UqdFRZazpvK0MwTzBkTytHazpLZG5FczA1dEh5PkcpfTF4X3QwInBFMFM8Rz5O''@;'; put 'put ''MiZbQDxSRm1KVF1GaFFodCpmNVJEbGUhdW1aNjxzZXQ1PHNUX1sxQV4qUk9MbjZ7cVZqUyhxeiRLIU5jaE1Se0BDe096YmhITSRIPGRKSnVbRz57VSVCM3g/NiYzW1JmQG1kSyt3K245b0A6MjlbYlNnRVNHKkh8LDJmXkRYVkJGUUpMNDhlbi59ezdePFpSJUR9b0o6QGFLN2s9ejhgV21Sb1lC''@;'; put 'put ''WkVZNH0rQDk+QzJ2X31XVF84KmczMTtWVWRjLGFlNFclbGQiPkVlLD9QPGt5P1dLdEBbazM5Izxzent6WlVFcjAwdjdrNGE1VjRMdTpjfFJsV0FvMz1lYGIzYyljSi9DTDFzVnA4JXZ2bTJtR246QjA1Rj0mMlE5RihiWSpQYnM3JmQwbVdteV08STljZlROOHVQXk5RSnFCZGo9fj40QkM5Mz15''@;'; put 'put ''PX1lIyNhNEh0WDpzRUo2NGFZRFA4VzVMWE56ZUZdVyRNdS4pMVp3e0NHLmohfUBxVVE7U2YmdFMrdz4iZGhxUGU+fTdkWEBjZFtncVYyKTwydHgrVjc0aE5jeTU9dlRCN2ZdNjE/NkVHTVRETHlPRUduU0RMR115N0h3S29HI1RjUllkPzpLdkRbW11eSEp9eEc1K3xXfEZ4a0F5W3dCP1dVYH4p''@;'; put 'put ''PDBmQHpkWkYqUjRMeEomb2hGPmBwLypsP2BaQDJpJWc1RFZEOklrLytYYSp1QFZoMjl7dThnKDMwSSkxdCZ8Nn5YQVRlZ1BGQE07OlJrTXhuZyIlYls7YDNYdUBCTE1xRm0rQ18iditxdypZdiVDcEFXWWJKIVJ2RDo6NWBtSl0sOTVOVUl5cFBNbWFOJWNWVGtOPGVufTZLWzReUEh8e2BYSE42''@;'; put 'put ''NVtTIVZFO2Y/TWtRbnlOMDsiTC55R0pVKlMyIkh7I3JXe1opcGhefDlYMltaXXlLYitLdyJgRj9rQXMxVFZPfS9vXmYhVWArUUQvSV5PazNjaltKRUVeeEAuPXRGXjk2cTs2VnRJLHhVUTM0dCJeM2k+fXx7bnpdJjUwZyZmJmBeTHB7b0osWjBwOW9jT3xXZmolbWgoVl00KVRSWjt4citMNDlP''@;'; put 'put ''QCVZP3RjWitQL0FyekBFV1ZkWU8rVzZzRUd4VXVycSRUIS80UW9DT0FrQiY8LGA2aC49KW94MnxmdFUjQWhdWUVOU0I9aGMpZCwvUmM7LyFBQzcqemJ1dDZSLmtUZHQzX1BvWSQmZUk+MXtFZWpCLG5bXyxrKzZJbU0raGh4VThme1sqfkNdMV9DYUIofUAjMVs2ey8xK24oM0JgKS88KTIzMi5n''@;'; put 'put ''ez4jQ0lIcXx3e24pL3QlakB+dHZqRXtgaGliaWFmT3lqKS49ZGlnayRoYm9VeEJWRjUkU3RLXSFqIVM1N0M4OFJCPGJ6fShvZlsqR2oyYjBTXkI5YT1fdzhSc2QxSSN+cCVGJkZKRGdgWUw3Zj9dYzJydXZtKl9ZTC8rIm1XWTY2OXtmWG5CI3J7UzA3IXc1Ll9vUVBXRzxfb1pAW1E/OGMkKzdY''@;'; put 'put ''ciZGUSFbbiQ/WylSRFIjVmVbXjAkLmI8U01manBedX5fVX0sfUtbSXtNLFIwc3pqT3VZNC5RempGSFBDPU8obE9vcHJpOXxKTXhzdVIxUmVyNjU7REApUyo0ZWdXPX06PzElZHA2aTUsUEFreiZtUytqbU1zSXYqbX1QRDkpeWooNGQ/NlBuN3ReQHVLODRyOlpYPSFqbTNHSSkqNXpBP2w1L1lU''@;'; put 'put ''PVtgRmVEUnlNVWZLai94InxMXXcxdEMsVVVhJFNPRTdsVzc6RCYvbyR5ak1NU0xkJnUkXzY+azY+d3AwSSYvbjR7YXR7KHpwTndhfTp2ZlMibEJULl03RVdYdEMwSHlMcn5TPVI3V1ppaXZRKFBkfWZpey47OkVSZXVlUCRJMGo1PltzU3xXKU09eUF6ZCRMamxzQzQlX0pQd3g2KSx3MilxeWk1''@;'; put 'put ''cEs3ek5IRFJ8PUlseTcub2QwQkw1V1RORFIkJl9hWVhKXk1qZHc0NkVsW1NqaDpnaGxDODd5IiZXWjJ1LGxWZCxSJHY2YzhxYWY8YypJSnw1eVdOcDlkc3NqQkw1Vz1rZChUKjYqejVLKlgqU3dKSlZYKU0vdF52L3hoSHA7XktKYHBqREVmc0l2cUohWTJoOC83KW58LGl2WllmP3V4Lz15IkZ5''@;'; put 'put ''V3F1L3RWWkx6NExEeiJYIU1KRCJDXmFUKy50ZSsrZk4kY2hFVmooajNeJTEmNSVGXlU7VEN4e1ZyRj5uPGU/a2pwelpyOC9QOE5sVUdzOVZORGF9M15bZkt1WmltW1Z+ej1MXncpPCY6dis6O34lKVY1RHZJUDBNeSspQComZDsvQDcmZXZ9MGNnZkwpc3MwLih5LzMkKzo7T2UpM2Jeajc0SSFg''@;'; put 'put ''UiNGeXZCYSUyYzxJWWUpM0d5d3VhVjNRRl5gaDFwXVZjQHZqLnNCZVtOdll+KU8+N3RkLCpRfnBMU3VibkQmTkBFISgjT0opJCpedk9sVi5MWk9PQVpIP0dZQFQlMXdDY0I8XTJoZ1UhTCteN2BZdUtsLygvS1l1UCk2KnpiTixUPiZgWDtNWDwjZFVkdVF2RnYzWjx0TXpHWndRTSJWKmVxe0ZM''@;'; put 'put ''WTZFflcqYm4jXWRpRTM8MTRHdyEjLyR8eC4oVWkycUJTfnxrX0ZQZGdqM2kkU3U/UzAqVU83RjtSYXgobCx7UG5CVEQ9JnFkNWVPYDRSVj5fL1R0M3tDYFNve01nSC9IMWAuUWcpIUJnW0lQaTdRJXVrYioqXm5vVVUrKW1vRGd5Ul9bbFc9dD53SnluTlImJTt9JX5KYmQ6MWNMaW5wSHcjS2sz''@;'; put 'put ''aSV7RTFjOSY6KVM2cCZva2pLQU8jMGhOL1thdGYrRC9VdzY9RGV+NDlbN2lVbHR3R3tlL3xnKHU2Ji9iRHo+NHleciZwX1ZiJit8Xmx2T0IhbiJCbz5zcyNaTXtvITwlZj5MKmJ5dzZfeCNGTUp9VHVHTWZVQDs1KX0uTyg7VSFKNCRUP3JmSHs2TmVqKyN0IkNMSHxaPUV9VzkxU0hJMlkqKzMv''@;'; put 'put ''eHV3cixyd01vQjdgU0J3QzVwOmBuWXxeVDp4TlFbKjh7LlBuT3Upbl9XL0dDRGJ0antKX24xKj0pRktSZ0ApeXdCQE5gXXtoPVEyakQ1JGliJHV7QzpqM0Q4bmFFLDghKU5NSWlKYEk8bjE2S09CQko6dyIya1YuTnAsVGtkVmxvcis7YiV5N1k0YW54THovKztIKVBnN01zQypzISZxLz96LFIj''@;'; put 'put ''cUVuRFZDXU1HMDw5c1BqUyYqQDZpY21mRWc/REFoeCxdZWNBIS5BXmFwQlQrQ3hVMXRkQDRsM3BCLkoyNzE4aWJIaGpkcVpOfEBGLlRZPShvLyIlM1MxaUNpSUo2KTsoa1dBJUxIeiZyP0hTakUlIVdlXTwpVTRhO1RCT0N+dk5gPkNWQn4/Oz0qNzpORG5OaHpkXmdPJSEoSExCVXpsOkVLKzc/''@;'; put 'put ''dT5mNy4/MjA4PmZlXSpmJUlpa3wyR2kmYG13Iis/NEFvY3IxKGJWOEpPMzZsMVJ+IVhlWXx9VX5vWUFSWENzak82KUl5NFp+aypISEdePiUrZnokVWpGLFQ9c28+eU91Yyx8Ri5bKixPZD1+OUcpRWY+aWg1WWo+ZWtjeUQ1MlFbdFAvSiZmWGUvbVt3YlVfdUhpUSgqSGR4ezo3STtJfkdELFtU''@;'; put 'put ''X0NtUXtJUjNYN3Z6VzomKz9wImhEST51UEtJITRLK1liRzc4eXFlel1MamcqdD1bfjFVaHVuWXFTTmt1JUYsLCpgTVk1KCg1R04kfXtSYWZNWHxoIUptQ0A+KSx7dUYkbUdNTV1CTnQ7LCpgMkd1OHl5V0hCLl0sKmBbNWJxJGc9RkBHYSJAclpmP0xMQUtCQFRIekByLCNmcWBYNSlgQ0NbbSFM''@;'; put 'put ''N28mRyhGL3VIe1crW0tWMWlJN0BqQHEyKC5IQkJzImhUN0grfD1CbngsTyl3ZGZDeE1+c1c3OEJpOiwqYE4qQ2YuTGYheERpQ3ZgZiJQR085e0NWe3U2dDJTUDA4IStJdzA6aCY3OG8oI35ye3RzSGApS3FXUmFwKix9eXl5fD5KdmBXaCtvNnMqM2RlMVdTd1BQO2h+MSYzYCwqW20qPGFkWkEu''@;'; put 'put ''Y0I6Q1JHZlNmVHdJQipXJlY/U3FuT3RCX1BNUEJbLEUuaUY8ckNERC90Q2slfkgmZGo+YW0wK2ciZXpjVCg6YD90KmJ5KygpdjNoVnkrY3gkQVF2NkpRVFVrNkhkSjdNR19vbjo+SCorbnpNSGBCKEUrW2owTExTNC44Tz9KPGk5R2cxSSl5Qzc+YzVKQzR2cDRscUwqMSs6RjRDWHZqeShQJUFn''@;'; put 'put ''RVNHbk1IKiZYXWgqcUA7cGBaYDMoLCghSD4jZU88OipIJkB6cGN4UE9AOm1fIyJWTTxoUUM2XSg5VzZbOVIlIlEjUiNdQW1XZCIwdElzNjRjOy9hOTBuRnJTUFlwcyV6ZFNvKCxkSX1mKjQlR2xBazJbWl15T24yZnlVNTosdUBnQW9sSDo9cjdzSzpabHIxZUVkSHJXMjh3ezZPey5kXTAkVkI/''@;'; put 'put ''KGRlV1h0c1UqY3M1VWdzMz1QUFp0UDgrPFdyP2R5WH59QTFATmo8diR1PHo4MTZ6Lmg7cGkmTjhONThYOmxrK1dnL3RXMTk/JX1IbmIkTCtRYWxNWzhATXBHK15RTXNkdX57YEIoRksrTlVybTByJSp+e3FjfEtAZVdSYW5CKk98K1d+QHBFdzsvfmd3PVhvW15ITVNPaDJdbm0ybGw5dmJKIW9i''@;'; put 'put ''dmFrPFt8JSk9dDYpc1Q9cjZlIT4qInJDfV9NQXtgajEvd1hKUjJsMDYiVj84JWdSaVZ2WGFyVHtSfndqMmk4THVTIW1RcylsIkYpeHxxJU5DXV5RXUo9cU5sS04wLisiMHwhezhzP1FrbHp5TjpJTFo5KmdiamJ2K3d0TF0zVldLS0U7PSw2YWJWYj8oRT4+L2h4LC8hZVFDXTxxNXlsKXB1UyVJ''@;'; put 'put ''OSVYLE0oeDdEcGZAVzojVXFkZ2I9ZWJvMk1aS29EandrOTxdV0M/R0p8NUB+KDI3IWFxZDFocjBGcnFPSl0/MWdLW21ZZW9EOCorKUojRTF6T0hRIW5QaGs2TnMmYFlzRX5WTFFoI3M6KncsIylZfFtlOGF+eWFjJSMrWilrPEA5fHNna1JEN0JDbTcoQHN7fHU4fUEuPUF0ZntAMT03QiowU3Ql''@;'; put 'put ''OXlnIW9vKTlLeClYUDRYfVI7ZjBmTl5EUD1PPE0zd091K1ZOW0FrSGo2QTcmeWVQODVjfG8jRjhAMEApJGY1di9DezJfZ1JKXSJuTUYqQSowYl9JYGJRSl0jfHA6NSluLmRCPHMhfExjJCRCdEw4IzI1VlY+cjBWQ3Nxam58dEl9ZyhDWDAwZlNbSW4pUDZbanVVdSslajk5U0cjfipTYGImflEp''@;'; put 'put ''VTQwSiFUdT9GRislcyZsMVo6NSksJns0UTo/cTAiPC82YXpFXkE/O0drZkI0fVs7YjFdMFZTUSgqNzxAPnN+XzJfL30xaiRiNkxIKmooa29bNi5gS31nRlR8bzksWGpxTSRTT15OZ2MjTEghWGN6REQsV2EqPS96JTQjSHM2QmRwVTslLmhbYTFjLzhpSldndnAyIz0jTHRzTEpEREtoNHFtL3tU''@;'; put 'put ''WTBuYkJTPiRLKnFFRmU9am10OClGMS8lT09GU3FSMUFDayZyXikzfCwqU3kwaXJpR1tJNGd2RUxrJUdCYCpTYj8yMXpoQylGKWIzUlJrTn5VJl4hM1djSlgvTyNxdn1FcThhMyQ+c0dsdihxWyxDcztnRVNRL1M/Onk3OmUiMDdiSE5UJV1reGh8Xz19U0poXV1reGgjfCl9fjA8KlFYVCM8UWYm''@;'; put 'put ''MVEqQHhyWklmc1RsXUtDL1VzNlosPF5lYW9bIVUlYz9wUE5RWyZHYnEsVF9aOl8/MzY1R2NHVzwhYi5RSEtEbWlYOUBVY2ksWllWQXQ/W1dqPklORX0rfkJyYjlsSEpEPU1rKUxzLD1Ac0JzcWhYJmp+YjY+XXh9Y29mJiYyM1ZHTDc5PXNQJS9tcmRySit7Qykyc297WXNBQT9AKm9kX3kzK0lS''@;'; put 'put ''SF9lV3xKX3FELmAwVVVMSFo9UTBbNn1DViZoWUp9XU00Qkh3YWkwVToxaTomMHNkNi4qMTBmKHg2PXJhM0QrJGFAclM/MGhjfHRhRl1SP1phKThTSzR4SUpqYyRTM0AvXV8yOnBDJWlqezVHJig7fW9pYGxWVzxaYWE2PmpNXU8lIVgvakJSYCZSPmc7dXhOd19TbVlHWU9PLDZZMHhHQlRgcnZR''@;'; put 'put ''bDxEZFk2LktdQzU0bSZKY3IvNUEieVp3dF57bUZeK1ouWT9JTzl3TGtpM1N2fXRIOkpCLF14aWVoWXVeOEkzcSoxNHo1aF8xUkQvQyRJNC92M2kxLC9fel00MkVXeSgxMno1N1V6WnddMGd0UEdqPk9JR1c8NmdwclZXUHh1NWM0T3VzU2dxYHJEdDs2WlkkQHhySng4WDhBMGQ2Rz1BcFdGekBi''@;'; put 'put ''ZSZmM3NlYGFJNENVQDlCdytjezc7Q3lZakBhIUNGLFsqRWJUUmksIXl8ailhW3BFPE51VXQ7OFF8YDVXeCx9OUdVQmFecjlnOyU4TmJKPkV2MTx8ZD0xJUdiRzEufjJvLyNqaXBZOXRDeTM9MGgwYTF8L1tTYCszTlU3bjxNOVgxcVI1Y3dbQVQ/cGZxK09YdjRCMDBsZl1GU0A8KWwvYl9MIk5Z''@;'; put 'put ''K2hDS1ZlY2c5UEkpIk09IkUwXkt6dXtgdEJFLlRXXV5Nc1JJSnR9MDQpZjB+ISpTTV06MVc6V0dzKXUsSU9PP1pqViNhQytQWjJ9WUN5ZVhfREQhK3FFJlBKYTszQDJRSF9RdHNSUWAvbCtaYVtIMy4hTFFJbnF1YW95LjE4a1huWkVuNXApJChMSEg7T0M9QjZXR0VsPTtHRzQzMHBzOVlCeHZ5''@;'; put 'put ''VWJrRTJ6MltSKW1QcFtNaWNtaDAyZHBkMGNGWSVJeTtOSnhyTm96Y0Y9ISU5Mz96Z3s1bCskUVBHOEVfRGtkRjxrPGxme0pvN35wV3Z8QjAxdjI1JX0hdXl6VVVKdSU7WX43fitjTkIwYnlTPTh4NEVIXnBRImdOT3o6cSUxQlJeJEl6OiYlYHBGZGN8VWI3bywqZUFIdSF1KjtFVEJpcjFGW3JW''@;'; put 'put ''eFlHaiE8L251JW94QUJYUWVbLn1FPUswVGMoOzptUDNWXmFuN3oqO15URHgqOyRJeUUpU3IyI2VwNnpAfl9QTmFCPS5iSiNmYntCbT9vfmExNnhAPDYyYWgrc1p5R3dUQkxOWUBFUm4/Im11N3ROJHNwVSY3SUY3V1AiN35td0UuPmZxNipxaTxmKlhJYGIrZFIiZ3x2PTpsVVlUQFhVTzdVSSlk''@;'; put 'put ''Lz9vM25AVGF3KkpTc2BKUXZYdm92alhEMnRRZGFdWW86b0l7LCJNQG0jSEFuMCQjbCpuc0lBblVndnxxJUtEam9RKWhqZ0lsWSxeWVlyQm9ubSE+ZiJwQzp6K21OfWJJYyl9MDMjeiNPO3o4b09hUDNBcW0zWll4Q3p1aF4iO2BMS0Iob1sjdih7SUZ3dWlxdn1IQUhGQXhbXmgvLixCWyo1fiYq''@;'; put 'put ''RFhfMiZ0WmBtamhhNGwvUFAxbSNQd3ZoeSh1MHYpdSl7Z1RJL2ZAeSo5LC5WRkdXKmVbXWFwRD5sfWJ4RzNPJEQmKyx9O1coQldTRn5gSFZwUVBLe2g5TjUlTiZLW0ReY2dqUTcidjJscGF8W15KNXdpPXdGQjg7Y21hak5rfUtILlAzSXlxTnVaPmk/SjM/WEVkWyRvXi87aSw8Mm8qcCE5cjlG''@;'; put 'put ''IywlVy4+YVMyXmxwOXk2S0VoKXFgTUk5O0FdR041RnpKQSRwVUhUd2JwYSg7IyFOfEVeOzV0ZVRmImhPKSQuVjY+bzB+L1RBPi9Ucl5KRThSUVZyKSopUytMbjkoOUg1WTh7SiEzKS40O2d2KkUpJiVJcGFbIm15VTpqJm9xby9eSU5UT3NsNCNtbHU+YUomRTxZQFUuPWNheyphaSgvN354JWIk''@;'; put 'put ''Jncka2N3ekt4fiYkIjtbOWVXMSM/WUtzIkorXjZxIj99cWM1UzteZlh5aHZBfEZeK1hpP1Ihb0ZlV1A8IVhDUnZIQiw/XUMrTVchU084TDc9IW0peU4qVTgva2oyOU9VYV9fZ1gzellvOTYucztGUGAjXmxRWVhUalFHa3ZtR2IwNWhdT0EiVDlEWUh2Nml0IldSN0NTanRFQUJ0SWJBQUdIclpt''@;'; put 'put ''IU91YkNdREE0RmN3KDM6PUhFZnZjVFI7SG1YJSphIk1BaSI8QWxCd1d4V0BRTUFITCQkSGNoJXgmMF59YyNkVlgxJD9temYsOTtUN3hWTUg3TyQuTHJPJHV6R3lDdnVKb2xMO2FWWUZ+bm1hO1VZNUA+an0oVmIvdWNEWkh+RGFST3QyRCY6eShDP1thNnZObWh9ejBqQlRAJnFSUGw5XlREYD9w''@;'; put 'put ''ZERUW35fOl8lNVdKbFhPanYhO1BSK1RtVmssKF1ZeF9tSXEmb2RZa3t+OGN2VkVCbUpxUUVsbGQzYnhZQys2bUdnOyMsfXYkIlZrYihRQVhoXkJaN3RRR1FuVG93OlR5RChuUnszYW5qQH5XREIuPH5qLmJCNmVTRz5hQF5lREVdUTRkYUJwSXVFKSwvYXYkLm97V29Oa0JLVnI2OmJiQnxdR30r''@;'; put 'put ''TXFDSERESkFra3MmayhmX0xgUmJMRH4hYDU9Z0VodVciN1ByeTp6IT5XT3BsI1JvKiVTTHApVjJZSH1ZRE12R2VBfHwoeERbXWpmbkAzaX5ye3V4LENNIjc0Oih6RFs5QDdqLF01XWpHQ3ciTWlAVjlMcEI9JGJicV5PZ3w/aFF0ZkNoZDZuPlglbUNRQC89KUA/alRZWW8yPWVzZUMsaFJOXngp''@;'; put 'put ''eSM8KlI6aEN+VFttcUU6ZUwyNVR7M2B7bitNU1MlWm07UU9Tc2w6YTlfZWwxbW1Iflp7KCNiQDQ+SG99RmR4ciE5eWJ1SXFXMW5gRmE0I3o6enJFQj17aCxoQVAsSjgrY2ErYlFeb05WMkxSOiZDNEQ9Q1Y5NUxqQ0ApQGNMK1EmTnJyekVsdUE5ZHx1PEBoZz0xQDxSSUVwMThIKDwvaW9AP1Zu''@;'; put 'put ''WGRnWlV5Z0kpWF0rXV1dUGc9c3k9VyJ0MlZzJTtOJClvOkhOdkx+cDMiPE4mcHN2NHJHU3xpfjJFanhUKmpMb2BDd3duMThzIXBtZCR3UzI3R3ExdW8pfEdjNEJmcms7SzY5RklNIUczNjY4ZTglK25sO1paO1N4JChRRG9yITBIbCVpPzRGeEpHRj17UWpvViVRaz57ZlgubE5SVEs5TG5tZ3c6''@;'; put 'put ''Vk1oIyZiIm47dC8pdE5PRVdfPit4RXVLVDsoKmMhSzVodW1hVVlzPDVFTk5XZndiSmkvJXl9PytKV11TW11WOkswckcwT1tfbVJtZ0ojcSxzcE5ETjRMW19KTkJ7YkJ1JDFlK0AjaGByPCQ3JC9qWkd4ZEp7Ump5KiRNKmc/QnVIel82e3hsVk9HRkdWU2JecT1IPXBTeSJoVCtlJDsrL3JpSC9S''@;'; put 'put ''PkxFWjNGcEl8Q3lwMjVoUlVTZWgxOiZwSlBMZCk2e1EkZXI0blM0cy9iQ3xsVms+ejIjYiF8S0h3JSxmM2FdUUlUeyJUPF9SL0tSPEN0dWYwYCh4Q2Z3azszMXdxLysoLDFFaSlIQl8wKnV6VS5FajFiY1U+cD4iYj1Oams1eD5MIk5DI0ohfGRKZGxMUC9VK15kVS5AUWQ5VjxHTGI8PyRlIXBX''@;'; put 'put ''Nkw1Yj95JUtgUXY0O0kzfTxafXE4QGNGKCZDLE1fP3MxXTo9cW90cD0kd31QNHc6NzpDc0xbY15odl1eRCZiWVlbLGpsMnpeXiRpKkprfHhhejhWI1Q6d2l2LENCcDM/bFtLPCRdcmBvMVVEPSR2P01vO351cipFO00pMTI5MWpAclg1ImZWcCJNKFN1QkFDYTY2aFptR0VVUm4+NiVhUk8yQiYq''@;'; put 'put ''VDBBbHBSM0QlOmlpIy4zVHM8T2lUO3JXT29be3x+fDUiZElPLCxqIUN4YU5lIkdiPWN7KnNGOjs4TD9NY31LeVFrZ2ZibC90VEJabmx+SipoX08jT3lycUt1bUFAYjQ2PjVnYkJvb1dxUjlOIU9rMj4uY0YjWCpobDxiIS9UdDZTXkZGaV4yNi8rZWIvSEJlLzd0Umd4KnZ7SDQmWVVjaDglPlk3''@;'; put 'put ''KEJgYypqXTkidy40OXpOJVJ8S29pb2J+XlBFOn5UW1tVTDJPSnk5eHVFTkZqZn5yT2BfNWREOCZ9KkJfP20vQTlfejlMNm96fV5JckBzU0xRRH1QcWR1O30jcCUwSyYkIkJlc0NxamNnZCRaV0NGaHVAJkY1NjosYG5KPFRsUnl2SFYwRVVrcj83ZihfNEwpVVRoLiQieTRIKnZ6b2NZPFhzMHNx''@;'; put 'put ''V2QuPCRPI0dlRFlvfiQ2clBfVm9TOXZeZDc7dWcoSXJHfmBnUCY7X096bWd4QnRsbCU+S0dgQjZZPz5jRytyVU9NREZ1OT1MRlRYYS9baEVLY2hjNywpVkRkOFYjSWl7YmBmbktHfiYreW51elE9Ryt7byRvWTU5PWYwfDxVIm5VYSMjSF0mVWNBT05TZihfZVJjUiJ9N3xAeH0yMCYqI007OWpx''@;'; put 'put ''entVQT13fTJPI1dzMlJkUmcsSVMzL0MqLitieDlOWURPR3UqcFZxdyg4TX0jQy4sdVZNIUV7Yy50YExjYC52LGAwNHQuc0VeLyVrYzZSV3pHc2tLbzpubFhBTmNMYlpuMTEhIiRxIU9MMEJKSHhBRHJJYTpmZVM3Q0dYYz82e0pIYlhIQWw2UjxRNXZleSNlLltEZWEyISNbbSpnZT4iaFNaKjwu''@;'; put 'put ''RFlPTnp0a0xzbHFjK0pmfiFEeig3UjlvT09oZyQhbzFYKFJRd1VgPk59WGAkaEx2dVIyPlgvIkV2YCh0eVQ/TyY3MWU7Vmhye049U1ozVn1yY0prVEg4ODM4eEFlZGBObEZWUmdsMzs9Q0I3XVBXW1RDezFYbmhlOz5aUzU6MG1YRGQ0IXB9NDhZMFghbmJ1eU4+cVYkVD9eVGsoTitMQXV1QiNE''@;'; put 'put ''dkd8JnA6VHw+X1ZwaEt+PEFpLG5TKiRGNztdbGtVeW42MiN+ZHZtKjNdQm5eQ1RJcVklaFheMWVYWHY3MT0xPjZIO3NoSEQua21xe0xTKU5JSEdvRS83PDdLOVRMYC8paDE8Y0Q1LDpkODs4KT8/My8pWCJhcm5NKl5VIVlmcCsxUTVxOmFOO0c+RilMMl50N1B7KlliQF42cVI2ayNHaUZmSih6''@;'; put 'put ''OF91c28xTWxIKlclY3dMYF1RI2k1XjN2Si9KLGNlclVzaGtXVmZhKT0qW1N7VHVAe2c5TUMoMURtL0RON2dIaVBLYk11KUdWOTk6OCw6YCo8SEh9KkphOnl1YWJOOGtySGhrRV5zdyEoYEwoODw4PnA3Nyg1LGAwekRtalVAIVtsSDMkK3QjTCZRJEtjYGMlTlphZkIpZEZ5QFNyLF5wUCNNYVta''@;'; put 'put ''XikvI2VYVGFZRFs6PHFFZzc/cGQ6WWJrTkMhVyQ6aER0TWxVIVhwbnhUME4oRH41JFtubXAkeSg0ZzJkTUtVaFRRRlRrdHZDUXRhb19VanpvXXUiZ1hINTJOUHZLXWV6aUJZQlhWTlk9ZDpvTDg+VytUMDxBMj0qKDYjRHZ2Vn59cks0cSMoTzdPUmgoYkZPVlBVeVU3fSw+TStPLD4mIzNXNCZW''@;'; put 'put ''W2l8Q1V5akBOdjRTKEhmbnZ2RzsobkM6K1s7UCNwdiw9UjpBcTdka30sT31FZHh8JjppZShiNWxIKjBddiM7MVc2TEtEcVNvLkx0SCRJSmwwYUt4aDlGRkMkOVc9I3h4YiExP3lCIXQySigySVJ4YWFGUTcrSjlOZEkvJjZsdV0zMUprUWQmVTB4Yz9RRj5OK1QhOXRTezAzWztBa0RNREdhdlR4''@;'; put 'put ''amheVnxMMzRKS0RWYDMvdzF3cC9jX0l8d1RvN2teak4jcmYvUnk1Y3JTJGpEL207YHVCSXNJeD57TlFgVW0+d31ONk97VGp1KSUrNFd+Im9lSWZuOGhvNzF5YGN4NW9JODZibk1dVmsiaENVblsxRTUydjhNRWB4JD5ESTBucj1WdCpzOHVyO3xzWC9kPER4aUY9a3JAOCZvSEl3LzYhQWIvKWk5''@;'; put 'put ''bCUhcSFkZD9tTGwwdz9iWipiVyYxNCUjOko0JFMkRXU2Y19XMXJQRkI2RSFUIyViQ1UmZ1VvYE9QXjhJQ29Oaz4/MFJeSFRhcm5ibSpebC4kQ2wvaF9meDJrXzsjRElzNGFuRFh+TGozPnolUCl7Ilo0c1FpdnBPU1diQjtmK1N8YmVAOCN2O2AxNW5SRzBtRyEqKkZuZHpWYUchdV9kRjpWTSNa''@;'; put 'put ''YzRrRFl9fX4qe0lRZmxHKGhXSXBtNkJ8OiUsIWRMSXwjXX1mW0hEVSUxI05TUW1xfGUuZFg6K2FpKGkhMFcoRWhkQTBIfSMvKUxoXV1pND0kUTBMaEJ1MCRhLHRzZ18rRVg0Q2pOTi84OEc9cGNZVCZUVW1XbmdRd1c7UTtVd181Ui9ZNUNfWlUpX2pYRy9JUDxlRjl1bG5WUkldTjk2I052bWcy''@;'; put 'put ''QDJqaXJUaW04Y3lEPFZgK307bH0wY0BLOXk7UX0yTkFeb3hFc3RXc0VVdGZCbnw5YFM0WHRTO3c+PEVfPkBhVzZAKShQOFpgeilmcztGRDBVXV9rNTNIKkpXZ2k9fCQsKkFuPF4hRyEubn0oUDFQY3N2K0syKGVKbT1EMWVHOjFHaG9TTEt0QSVvKjY6UkF9PzVDOjYjLz9aYXlrWEQie24xTTR6''@;'; put 'put ''XUNQZnVPXXtPY3w9JF1EZ2dNSEU/M315eUZEQ1Y7YzcySVlbJDh+O3dpNklvRV5WPEVBUG54fm5PazdJZ09Kc2lHQXB9VixvIzAoYlh7fnxLSzxSOFVdNHdKYUY3bHUxO0lCeVchNG0jc0ByW09+LjtPOWBxX31Ob1BVRj1YJF9+XT9IMX05dytPbylOUHxadEpGfnk5XzpmQUFRclBPWXttW28/''@;'; put 'put ''T1c1Mik+dnJUZ0Y4OW1UQU08K01NUnQzNiQpLkNnUXUwJXVLdGpveTp4R1JoUmMheWsmL3ZUMCEqI3xDVilUTy9wNiRuP3RVaEZEJVM6V2pGaUk5TmopYTlhVlRVMHBQL0lpTH03eT8kVFN7V2lvZjhpJlR7ZHpuNiRAOT5BMmslQ1VARU4/XUBvSHlabkdFdyxNP246Pi48Sn0hcFZfInsrRGF9''@;'; put 'put ''ZjpsPC54aGNtJGUjRTB2Mk50MzU9e0lmeDd4VCZSIyk8RExVJTQmNF83Q2tkVzZmbix9KXBfa2F1ZChFfiNRYWl3TUpdU0pvJEUzO2l+JmpLfUQ8SlglYUM+UCU2UkYxL1chTlEzYERWSnsyVHhCbiY8biR8Ui9DQmZIJShndTx8dUdjbXVVPWQxKnx+dUAkcFA6TDpFL0cwbEloNCxpeipDcWhw''@;'; put 'put ''PVs0aCh0SipiTyE+ZTpbXWZ6Zm8hVTxgQm0yKip7b0c3cmtOTmlyK0lSWGFKP2hSPnoocThdWWdZMXIyaHFKa1Ymb1p7RjlHQ2xGdSpAVT5PMW5zTyszMkouJUJvdFNTMkgwZ2NwZituJiQ/YDoob35Ocnh6fk05U0drZ0d6ZXpON2d4K15hOCt2dT5AWVU/I19GWWVFKX48YE5dSH4+d3VNeDVq''@;'; put 'put ''d0NqVUt4QD4/flVAcnUzbCVwWzgzbyJQNHJhWUd3bG81KDQsOiZoUmx2LGwsX3Q3YypUSU1gRHpvTFVNSCRuW0hvYHk0M1BHOy92TC5+bG57IUMpVTw0R2I4PHpHKXU6WThuImNuIkJWbjsvV0h9RTtdTHZvd3omIVtpZjw8U29aejQpdHE3b2J3JF1ncyVSa35oWTcjTEhaOHdqc2FiP3FPJWJF''@;'; put 'put ''OndKeE1dK1RgSG52e2ZkIz1hWCFUV1djQzEoUjd1b3RwMzk2VG1vLHYoXS5vSk0iKWI0S3EvaE9KX0Mrd0pPOi4zcnZINVlxUUBPNFEkNGleNX1OfDxIezNzaztlP2Z3by9ZPHFec3pvXktUOEZLWXJVMCxqeXtbYWNNdmR1N2hHI2loZ2p4czhhdjdCOjh6TVpsK1RgckVVcGQyYSZbcW4oOndQ''@;'; put 'put ''T1VVT2JJVTg/ZGRmQW1OYXJ4U1F8VWZAM1RvRDZJNXQjaiJFe0xSYS9rWFkkV1syM21jNk9Ye3I6I3tEIWM9bzhhT2AqS3kwRnVKa3hES19PSUohUCEzNjkhRyR7dX5fR18wbildWSg5Y3Q4dFBKME9mKUM4IiJSaV9JZlYuLz9yfGZodFA9RG9RaEV6USkvWzw9JVJ9UzByOmhyZSZJOm9Qbnxq''@;'; put 'put ''bCxrNT1NR1QxNXVxLk83PWFteGxAZD1mSi8peCFbYE5uamxsajR+L3EqR3g+M0NFNXFdQDJuPCMvVGQwTF15RUxfR1ZSelUodFJ4cVIreSYjRCI8YSg9OFBAMm9pfUpDP0A9ZHRga3VoT0woekJJOHZoN0pse0M3dnpnNzlFKWJNflVvZSF7djhvN3RpPHkmekh6U3M6Lyo3NnIkP0RtPyNPTGs5''@;'; put 'put ''NjV8dSlUOmMjYzZpNChnQmZnPFFweSFYQE8jbUtFWy9VRXxecmNAYWBxYnNFclhgYnpDaGsqcHZDVmsqZU9IcDNkIWAvUW9oIllAWXBofCpPZn4sM0pRSC5KSjJULF08KWlabihLXzB+RSRBN3xxdTBJQ2lAZElPRERNYVJtfENkPkRdT3JvKClXK2ZEbDVmc3QvckxNQlQ4KkhwaVFBd0dffn1m''@;'; put 'put ''WGVUekdKVip5XlImVWRIUEElOUFFUXF9RnAjc3BrL1pDTVJrcGB+YGREZT04bnBrcnJ1NlE3cDdsVGZTc3VrdlJPN1FLODdgJndJMHNNS2NYVGpyWDFJZCZyKCQ2KXQxPSkkVGg7VDVILyY7Wjc+YmIzRjNVaUFFdFZqPVUwP0JRJmwvaz5OVzojOzMrQTBva01qdTxCczpQLH1oKTlyQ2ZdNSJq''@;'; put 'put ''W1dLXXYmXmVjVWMlWDREJFMrdVtgJVV3YDFqYE0kP3ooJVovMzA6PyZee0R1Y1N1aElLdTk6YWFBOTR1d2EwdDpPeGhSL1dbP2peVnhJUWc3eVQiP1l+VWplJSRTTWxmKjxvQn43XkNOP15nM3YzdGdgKmhtZkRxQX1fSit5JE9Hay5jbzB6WkJZMV03PW9mI3hdKHltTXh4TiJyeyI4bU1JbVtA''@;'; put 'put ''ayZSWzBII0kxYFFdUWwlQF4ieFE4NkB3d15BQWsmSWdqTFE7TzppTmB6Q0h6bWN6QHhEXm9zTzNdSlsreFYobWEvVnAlRilQN3JtNnlYPjw8YnsmfjghTFQ6ZV1GbzxFZTt3TS5dX34kSFc4LEJlOSVsZClldltMaTdiPnFzXntjbkE7ZkJDayp5KEVXRlJBKWZRPFZwJXRabkoqWTJ8VDFFMmx+''@;'; put 'put ''WFBANyVdWGtuUXJ4Tn1GWDdPMEdQWn16RXxvYksyNUM4KEh2PjFCRHgsOiFbPTFMKl1tO31qR0x0RW1wLF1RR0NjSytFen0mfXcmeXhvazgjXkUlZEx9eC4zMHckeVpoX3tIfH1PNTJ0T1V9O1NRZCZWViN4QmFvIy5ZaGIuWWFncTNlM0x9dyIwfkYwe2x0T3opeVsoS0lELltlKi8pOkRiP2pr''@;'; put 'put ''VzU1XkRyUW94Vn4qMTxmQG96O0kkTCY2fStsUks4JnQ1TklKdH1Ta0VnR3s1dDh7aTRBPUZ0NzwvRHlBPnNkek9dSUM6bipsblJERmZ6IWM4fHJQPUdWLkFURnExOS8iJEQ/KG4pLDt4QlswL0ZCTnJ6JEI2alNLKHtZRCVbcj5jVVAqMmxvTE5renZNeE4yK1dzfDlZUjoqb3NaNW0zVEUvJiNm''@;'; put 'put ''Qmh6UyI/UnA2NzpWSzFVY21gbU9BTzxrOnBNOCRoOXswZ1ZSZFZIek1JQmplZUlVMURCIT44ei5XWS5PZUVKZVVbdmhDNS5UcGBJbUNmM09oZjBQc3hzOCt3XSNDMEM+ZjtPTXE2RX1GcHBXPVo0dXl5VXQvIVt0VkZAbG84WSRBUXcyW3lXZWN2UV16TylDI20wYk9pXV1zZnZRPksmakJ5Qkde''@;'; put 'put ''RyN8d0IwKChscypnPVZua0t4eCp0MFkxKG1DdVJAVk5eXVFEPVFIUyF1VW5WQm5nZHkqb1UmZ0E6S084fU5dMSh6Uk5fTDFQM0UqQEFoclhIWDJnSmE5eWMmYS5OeTc9emIhPDNjMlQ2PmYpdkg1YF5NXkNfY1peSTE1WlRkb21aaT9eZmFrcHYjVWJYSXFbUkBpSG9qV0t3UEw3eiY0I3BrSWxg''@;'; put 'put ''XixBK1M0aDhPPHBJWko5SGhJfU9MTEphLnJwP3VkV3pRW2FmOGNyaCkoZnJwI0ZML0J7X24wJGBTIWJpWClSd3ljYlZPMDhdYGssRypjPkN4O1AyO2Uhai5YNXpaOClEVGB7LzNWPyZ+d2NZOjhdbW5nKjVPQDU6Jitnbj9FeE1kPHM0fS82ODR1RXdnbntKNFIkKS59bmlLT0tvWFNxXTg2Yjk5''@;'; put 'put ''V2t+SSpEey5jY2dXI2VIdm5nTTNxPUJWIkF9KUBQZmpjRnZrNlI1aTE8IUhOWDJEKUBseihfZG94NV5Vb046UEg5M2NQckghJj9UOSs3RCxDNytlSHltVHJ7d3ZuNkF3I2ByfCxrYiVeMWAjcEtIYUYmcVl0JlU6SWVvJDBrd3V8XzlzaWM6VV96Nzk6bXZGWnQ5bmw8LkVYd0ZwUWsjMDlKZ3Ms''@;'; put 'put ''eDZQbndkejtDPEVDaGNgLipTUj4uVVlaRz4xWkdZKDIzVDh9M05UfCF1ZEx8byVZemQxRzVNKkVRcDQlPCpSLCVESlkwOSR1MDQ/LHFMUVlySC9QT0pQWUljWzpNRjN5MVIqYz5NUF8mQmomPDIidzRHUkZfTUpvfWovWCM6QnJ+dXZrKEhAOGt8eFpJeyUvejVeIW4yZWxXSn11MWc5aXg1QGV4''@;'; put 'put ''YzAidGxmMThdUWJNNmNPOysrRC5lXmBuU00qfldrXmlDPExkIWZCIi9CRnNyMnZxVXZCeC98OlhUaylpJUh4KUJfOVEieVVVWmhpdjI1WW5Mb280PTJwVkkmUHY4YzlyS14xP3BKVk54Z3NxT0lHbVhte19yTG5JQk47Q19WSTllVWhUJmxOWD8+e0o0ak0/Smprb0ZHfU4iRDUlIncpOlFuV1h5''@;'; put 'put ''cXVKOVdiLlRhenwvOTpNTS55U21lWUBsaW0+QTh2PmQ0fENtazx4aXl8cyFycilLPEc4UkptLFVbUHgoXnI9amhETl4wNW4qYzdZZnsrUC5hZnJ4OF4sK31UInohW0NJKi98K3ZOMHdAKTVAX3Q6TGw5JCM/UkI1PV59XzBUR3k0WF5LZmZ5TVVBVkJwfHE/JHN7Xit2VHg5ZTw/XUpfciVhTmN2''@;'; put 'put ''cjdke3VRO3VwSGs/SyUjLCRhPyVXMTNBRkU2NSM0YjNESCVhOkRPYkouWHFUZ1s6SF1vcHFWSkBrSCw4IU0+dnIrcGlfWjMjLzZTQXY1dkVdWDhdSyF7WyRgViV4MCg4Z1kscj0oI0k7ZmNQKmFvaWAqayViOnUoJkEydntaQnQ+SW43ZXcpcU1FPDVlUF4kY35bYDhrbkYqSl8+d31TcjJ9dWdg''@;'; put 'put ''W282aHsqSXMqVThdNE03VkVqW1l5TThKI3JJMH4kTWF2OFhwZ1JYcF03VU5kYEc5NjJwVDpAJmJzXWBEPTd8PGdWKnZeUSouQEx6TTB1dDdvQkpMW0Z0PmU/dlB3VFFDd30mW1hZPjddNDdVPXFtd3YpQXEzYUZNfS8vSzN1XyZEbFZVPmlGcS5UXXw9UD1KZkNDUylKTj4wVTlfZEpDbUpZNTg2''@;'; put 'put ''Um1DYlo7Zmp6Pjh8cVQmfDldMnByZUpneStsU2Qia11FbFs2cjFPcVZnVDtUSV9xfHViPzxBMmFGJjQwX30lQlBVdkZ9cVo1OmRpPGIrMWlPZU50I2d0fDg6fmVYI3RbWHNMWkBNJH0rTn1paWIlMmhMdnJOayxKWz5ha0FNRytvQ29+aVk0IlRvNDprWWUocU4hdD0udT40Nik4JlV4cldLdHBn''@;'; put 'put ''LGxsQi5tKzZqdz1LI1hsbD8xeCtfNC9+NXc7ZztgZGcsblk2RSxAJDEqajpCL1JvKExbZGBUIiFLRF5AYlFjW1sjdlVXWHIvOWQuMHBKKHRqWjEvRjJ7Q2A8eVl7fDk/bnxjSXg9Mjw2cHAyWS94cGFFbDZxUFZwYSVrejFMbUh3QjVybn01ZSwyW1lqSCQzLEpebFpqIjl8fCF9QkJxVU0rJHYq''@;'; put 'put ''U0h0aHMqRTBTX2IyYT1NNlFvJSUkdTQ8ZHtyWE9xUV1WKVtucik5YUptcVM8TF1jdXVhM1sxUkJZdmBdUFNnZU1zKG93fHNxZ092aXFqO2lRe1clUmY2bHVMMlV3b3dfUWchbzR9UGw8ME01WlgmSmt9QlpvRCFBckdbO2lgdEFLQT42Sz4+NlVQJndBOz5ubFA3SltSI3J6Syo9UU8yVjM+LlB+''@;'; put 'put ''QGxKcyRvaFFtUzUsfnNwazp8RVR2R29mYGdWYkQyVT05LnFpIzIsfDNNIy9PZyxdbEI9P35FTjdEZUs+KlVBblleUzRIOyYwXXM5Qm5hRjR0I0tWLyFsJGVQKyl2NixdPCslKyJ2IyFOZ2dnM1B4dFowXyFXd3VQbkpyc3E4ci43aHY7R0EhJHJ7PHZSV0E0XjRQREsydlZsP01gd3woVDdAPUd1''@;'; put 'put ''LDlUWCE3eSxrWndRVGs5dlt6PUVzRXhXRl9bVjY2L2ZoXjtKSGxgRH1UTGJscEM3Vld0XlVsMT1zNnxrTDEqPUlzMyVfQ046WSpdaERxP1EqN3tbe0o7cDw6MTA4PCxsMksldV1DOnJGbzk/JVNjSHxlKHZ3NGkmMytsMT5YO09pWHV9KTExazBbKyw+fUhMQkpgQlV9ZFNhfmtublgkUiIxbkpF''@;'; put 'put ''ZSY5eUkqRikpIiRifkdCYHRyKWVzOzg3ITpJNl1Tb3x7cj1LeHxvWmxZI0tNLEE9LCZsTzMoNCszfXA5PGp8YzRWbWR5Ln17bjVzM0x1SGswfmgoZyU9NTdeWVRKeClHPD5rWWBILnpUcjM0UHExayQpd3grL344eU5Re35qK0MsO0FrLEpBdylsNVYzRXdjVFE+dSFTd19iVnM8Njg7U2R2YEVF''@;'; put 'put ''MGdkUmR7P0Q6Qi55Sjo2WTxyQEY/SlRbPFBPNDRzQE0uIU9FXyNQRSphYHZAb1JHaC95UnUkNHd9dnVxbXBgcH0kXztFLDNkc0g/TXpZK1BQZE1rfSNFR0NAUjtgYUViWz9NPDMiaXMwNEZfVXJvU2xNIytCNFQ1dTUobk9xZGMmWWJicUEpMn4pT3tnTEAsKXw5dUF2Sml9UlkpQkNwSzl8eipI''@;'; put 'put ''Vz8zMEhwVWQybmNjUHI4NWhROFh6QnJpRHRoSThudCg2Xz5eIkxYbHcwTWBxZEx3TG9eMGpYSTpgZDZoIjNzRiVaOURabkMse3poPkcsaVhqNTdSSjRHa0crdnhKVGh9bTpxTGd6PThTOHdxSm9TfWJmfXYuZTRGZzUiSllNZE9ydCQvPmghPnE5L3cpKVBVY2hOT1ArO0pYakZ3dilZaFFxUlom''@;'; put 'put ''WlNsPXlqfkpVQShaWyR7TXN3QzhhOHc2NjEsW3p5NFd7end1cjVqWzpDKk9eVnw0RHdgMUdScFBrOXZHeGlhRkt1ZVNGSllqc3NFfFBdfCtsJmtUa0UpdHxET3U6TWhjW2NjUTxPVlImJlZ3N1U9MD04TTRkL2dLO3xaaF1rd2M5Sz1yQG16bTI7ZUI8a2RxN1pEIW5kMmFASklXQ3F0YGY2KDxO''@;'; put 'put ''SDE4cClqR2tnYzwwKyFmVTUlYj0iTH0zW1N7Qm81TkJRW0Z5W2xXSGdGTlNKRj42VWRdcW4mUGQ/UnleUVMsKzcodWY/RVNGcHJebikvV2A4X3hkXkpHJVRTXXJRalc+PFlTeTFGVT0rQiMmZCQrdlFKOHxHb0tMTjMwY0lWV25Sey5zNERjTH4kPVk1K2FMcnVIMEt8Vi43LDZ3W25UeURzQFFS''@;'; put 'put ''L1AwMS98SmgyYWBRVHBTYiV3Q1lQbmMwUFdLKzk4U2NAa01XKWJyaWd9dStRJWMmRD1XblMxXXkkPzpMXUBqKTY8Kzw+bywhTDA8QjFbTGAxS3NZLGBdemI9QWFrUnhaPWZWfWp6R2pEO0cranY6eHtuY2spXlVzLHgmSksvXUleVlJULC4+TVZTfH5oXnYrMUdMMXgwW2BlZnUuOmZkdW9lPCZN''@;'; put 'put ''VlFfWypkV35sUy44SSN+SWxQaFV7K1c1fFA1dT53WEVZI0NoSHBmI2Fabzwvd2drJmZsZXNkcEpGbCpUIWoqIXpLa3xdflYvJS9lLiZCLDlySWd1fEhPaCFuKEN6ZmBYUWI1NUBYLEojajFoPnR6PWpEd21mcGEjfTooTFQ+Vz5IcjVCMzVLNCwxaF8jSXVCIjJgPjBEXy9FUlQ3L1dtLnR0NkVD''@;'; put 'put ''ZzI8VD5nTjt9RkBbb21IaytxKzVIY35qKW86K0VZcj1oe1piQmd1RUsvaktQOnpxenJpMlt2Jj5ZKlh3NSF2KGpyOl1jUDRBalZtYj1weDplUl42NCRoZDpJUShTTSZTXTtdYilxN188fm8wUnNZaSx9bmI4eXoud0p9UCM2bXpSMil0Zm1FVThlN08qOVdwSD4qSikyMD4xe3ZIPSM8czlYQDhb''@;'; put 'put ''RFlsTnY6IjB4PGpIZWRVaVEwPmVjTT5ALll0aWU+biF8YWw8WlVSKHFrY1k1I3kkeyhNfH5JeyQ2TUNKZk0rKkNCM25KfXA3VjR0P31XLnBMfWZxLmVMPlc3S0RmUCI9RkxTQzRDUGM9ZzgwMyRDI2JOOng7P1J0PkdUNVcycUloQ3wrYiNtfU4zJlA4b3tve3dtUjRCNyZzQ256VVFOMk8yP3tO''@;'; put 'put ''ZF9kJj9tU3hlPGkhdTNDe3h7RzBKRSpST0sudFRwWVttQH14ZVV2Tj47e3FnJCtRblRZNGYqYUI+WT5CclU6JkJWYDYmOU4jOEZpTVtaPD5iJSlxIzNaRlk1dn0kPmBpeXU0dWo6PEZWdmh1a2BfQ1tfPSI7WWBjPSptSXZAUC82U1F7R29yJT94Z1Y3I35rZzR9YiNsMF0heyk0Z29GbClmNjom''@;'; put 'put ''MlF0WnE3Pk1JfmxzTU1GZiZsKEw2LkBrKV86PDEjJWIhRW9HXklEJTVCdmpdakB1KiRlNyRmTComR1JRVXFYKG5mIkVneXhTTypuQE18JWNKRWdMVHl4YylnTHlyVnV3bXpLJE1RfmpPOGQ8YSE0OHBrTjJuSztuKzJmTzswOnhjM3E/WG9XWyRHeFJnSXpbTH1UW3xNeyxVZHFWOz1kMTVoPFU7''@;'; put 'put ''RjJbNWNNSm9yJT5vdlRKeCFRS2B+JiJlWVtlSjRoR31dMTAscmdQTix2XiZzWGBdZmIzN2B+YihLMVE4LDtrU3tmbXFUdFZxR0t7UUBJP2JWViMobCU/JW5ye3FPUXx6eU5YYHQydiVseT8zVS5LPGRdXUFDRm1XTHFKTjo7bTM7QX4jaCgzamU3WC9vR0NiQTZfLDQ2Yit3OCNkbnV1dyF2JDw4''@;'; put 'put ''ZnIyKklbaClvUmxdPkljRF1YL3xJPmBDe3ZDeFd3SGh3ZH40djJIZiE0SWU4TCtWVilFZDF7Y0lCbVdxKUBTdzBmYFJ7WEpbK3dqOF46Rzk/KDNCSjc6JVg/X3NpQ0R4NSNPaW8kZChkY1A1eS9VRjk4ZFFFZTs/LzA6Zzp5XWRbInZtKltbNVV7QWYjSWtsZUs+MyxfcCZsZWpsIkV5Om8payNA''@;'; put 'put ''UDZ8MlJtNH06Z1YwUWU8dCVoXj9LeVBkQCxyMGk2NShCJXA2V1czPTVBMyZWfSFhIWUzTT8zcX4yQDM4THcpTTE3OT4kJilJWW16JmJocjJmfUZuVXVdJkAmT3E6eEJdSU9PQSk+dTtqL3h8YjRWTVdzOS5Nb114b31TJmp3SFVFTjpDeiI7UXJlelFQRENQRnc3K0BdY1NfVG1udzhEZ3phMjxV''@;'; put 'put ''U1MoRzliMXchQTBwdUcvOSlAWlklNkwiNG49dnkkajNONHV5OEY8QzxYQENJKnE/ZF12LzdFNzB3JTk9KGA2W3I7RnIpOzhRfiJ0bThyMmpdW0YiU2d7JEQlbl47fVVfPzhTVUw0bDpmdXd+X01CQHFIeCZBKF8pSCZVQDBDUUR8RFBPdndzM1NAVnBtcXxTO0RhQWR1NDpiMEMhNkMoWXREeXlU''@;'; put 'put ''YmU5MWQxIk85YzE8TXI/T1giW0NrdVRIUCRZfEd5RGxWODt8dWRxeTZDeFF0R1g/U1M6NyJfTVVtVnZ3Qy9pMXlOd1IhdHI/fG58OG1vSSgpUjYva3phV1FPT0RYQFN0Yk1mPUIyUiwqYz5yUmQ5SWxWfkVMMk1IdX5BZUJYcTRGNWE/cntBISV0O0QhanN2XmRQVl82LzpsImlofXdwfjhhSEdu''@;'; put 'put ''NEV4bWJ9dUs4aUNXcX1FOTNdemAqLEFJd0p2VSl7RXNbLF1SZFAjeGl6VmluYWUjVEEoVj9VOj5MdD9vKHR3VDBRNi42VGZacyMxa0lDZyFnO0psIkdld2svS3FJfnlqSXNKdk9WPlheSF5dVSo8VHsxe0N4ZW8+eUVMenQ0KVBpXl0yRmpaNyg2ZXh8R1k/OnEjJE8rQylQZihwS2YvT0tALG1y''@;'; put 'put ''MEN8LG56Xl43JjQ1XmZYZXdSL2dLeDE0ejVlKVdla1cyLkF1NVl2bXFASzJwMDFUKyh8RlN5UkNZVnV4IWt3MXkyeHJlTjs1NzNgRnRwSHFnZEp+TGwmSEA8Qmk/NCY3dEVSYWZLWz5LRmBEVl4wRjpMUWZ6TGNeb3hLc0lEK0F1PTkzWFQzJko2aW1gYFdfMyRmJis4cywieWBqfFZ8ayFZP1Fv''@;'; put 'put ''eS4vbX1TTFtpZ0hDX0cvOyl7bjFJPU8iXUJGdGh4P3ROfVlZZT1vcjI3fk5KTjspNjpXXXwwSjZwLnV9NDVlYUQpUDZkfXtTY0p0MkZnbDhgYn05YT1tXipjSWsiZWc/ZUhiaENeKzpee3JRUFBvTm1rVzdWMDsucmdKaFohPHtBeVtqaVQyXytCLGVdPm9ES2JJNWhMQS4velIsQSZvOUBLb0Ro''@;'; put 'put ''WnUlST03NiUmV1Rue0tfVmkyKkJvKHxseVU8e3tra3dnTU1RIyVoYE1fbTtsTWE6ZUtlJWsqbklDeyk3b3Q8Uy9vckpJQUA9Nytye2ZlWFAqPEc0ISxAdjlpdzhhQ2FkZkJHNz1OU342Tlk+WW5FUkJoRGB5dGtGSkEuMCImOiVta0Y7e2Y8biRTN1V6NXYoMyM9fHlxZDsxM0d3WjteI09qfVY5''@;'; put 'put ''MSNdazQpQ3t9VzxER09wLEI2VGJ7SCorZSt2YyR5eGlLRGV5WzFbMVsxZkUuQVE3WWgwc0lMMEtsdisrOFRZQ0lBRHdFS1MzL1RlRDF4P2hxeC5pT3Q9fGpDb0JGYndFM0Q6MW1IYVNDKUdHI31dJkZVZSEvNitRSERmW3A2MEdKTW1WVUB+cEo9WythXk1BOENsTXk6bEUjdDg0S0pxY2d5Kkd6''@;'; put 'put ''c25FK3s5ZEF7MkNmW1grXXFKdHFrVGNbcE99cGVwWnxddSVUNSI8NEhgNnRlcStuUH15Ry9XPE9oPDEuL0pOYmh4a2UrYl1fSVtWV2tHZTFDfSNgWHZKWkA9Y04iSTdMNChQZ1o6PjJLQXNvfVY5IyUmMFt0cEVDWUFheVMyZDpDdT9kPHNwWFZVQVV5Jk1TajtYaWkoRk52O1hTTX5iV0VZSSE/''@;'; put 'put ''M1heTDFLN2x5QVUqVEJsPG97Ri51OGs0eGQkM3lubklkaUp0O1I4dyV4ISs+YSlnfEZGM2tFbkU2QUR3OXRQXSFmWCVYJHJUYl5lQD9qPC5TN0xZdDsodEFlcy9wKy5ZQ3k6YDFsRnp9M1Vqdkw3O1lRM1g1TClwfWRWIXArb1lDeWpodWZVT3ouUjRANHhAR0lKWFZqZGYjfkMySGIiKUokendp''@;'; put 'put ''ZFVpRXJVXjpGaHZTK3M4Wz1XZ3g3cHVUXXNQXnAqZXFwPXs3JW04ZEJpKEFiKkhHXWMvcHZfTjckTWZKRCtYPl5pcH14R3l9eTZZRl1ydXczQlJpMFpPKC44P05wYUU7JUMrczFAYlliVVVYMzxlXVdxPUd1KHteX345VEYhWCR1Lk8kMDExXm1yI0NremZXUH5bWTBZV3FkVlNuXlRCWVUmXzVf''@;'; put 'put ''WHB1VzI0QndzX1svbnZDekcyIkhBeSxuSU0yY0BfN2MxVixCNFZhTy5LVlhvbDFCZXdGXVpZZntaRmBmPXZdS3lFI3ZiKmZCcl9DWWRkSUEqW1pZZntzRTl0bTciRlppaEZmXXRNfHRIJGdnXjI9WDdpWW9OVl1OWCo0dThmI3ZiKndAbHN3dTR0MlFaXVpZRVhLRlQqPCQmdCpCVC96d0l1TlBg''@;'; put 'put ''QiZCc1A8RU41S0hEYWk5aEY8fHJCQGBOWllNc0V9MXlLRXl3ZTdqcE5IXnRNNyxaUkFpWWN7bztIZWFVIkRjNFk5V00uLjQxRTtTbHUvSlR2USViVlNiTE56WHhBLFZAaStSPDQoNyF+WVlHNnNJNV8mZmEvXmEmez9ocD5zdE9WQ1ByWGdfOV8uOHRKZyheQ2tCOkdyLl8oJXY9QjxhRHRmJTFP''@;'; put 'put ''eTI9YyMqeGMxIi5GT29DSDhDIkdkP0xeLkdYUVdpXU10UGU2dGVtKExQaC5Ob0FaYjNmTF86WTxaPTY2MkdOaXJWSlJbQn5KU3gmNGVNTUdGQ1hjKW5pS2o9fCxGeVpbYiwoamw7fCxBdjhyX2gsaFNhfTB1dD1ES3crZE1uc1hsUF1MVGVFbSM0dWVMMzlrPE9CZ3V2V3UrODJmVW1Sb1VJYDRS''@;'; put 'put ''ez5fKzc8WDplYH11ZmZTRzcmalhtfGgqTSh+UCNWVlBtblcpWDNHcTNCKipfbTdvME9OclFgVV4vKzUyK1hxOGFEVihPfSFXZnlIfiFjZ10kYll5SEdMcW96N2Zja3RpMEY6LF97PixeKzM4bGJ5MnVCdypaXnlGRlI1KEQ1dkJxaWtGQGhAL1FTVkcwcjRoKl9odEtCSH05V0YjY19BVGdeJUJl''@;'; put 'put ''elVDdlJlWDZXWUB1Nz55RWc9NmlARE9tcCwlY3wyfSRWYyhOcV87MH1CW0N0fT9NQTR1ZFd2c0I5IWcxTGRrXVUwOFd6MHJXe20uUClGKkRjXXN9P25CcSgmbGdwQ3MhVy80IXUqS3ReezRHPj1pLntKLlJ1YE5mTUVrVmksR0Z7eHRkMkYrZERkRT44IUFzOFlyKkIjflJYWSlENzZoXio9TGJw''@;'; put 'put ''VVpqKmA+Ti9MQ2phSnNhODN1OS9pSXEycW44dHIhPj9fKis1aylHSVJvRGV2aCVyYEVtWnpLOE9iUy5aLnJKMzhoWT8wMDI8Lk9UR3A2fTVrSXtFNDdpXXx2TzNOYl5qbSFnc2Z3UnZoOmlweGt1WXYmajooUVFiUmYkXWR2JjJ8d2pxT30qNUk3KytJQThPe2Q0P2xFODJMVDpOI0FfPWRpYUlt''@;'; put 'put ''Kk1EW3J5aW45RFt5TVgvNlU0S1U+LzNpM1JpYkVie3xJN0o6aGh0dlY9ITYsbmJYKTM/YCpUZ1tKZHpARmNMLmchL2FrSmclIUs9LiVLcHNkLFM3cygjWCZga3ZbP0EvYmpMaGYoMmd5b3EqUlpVOz1GVH46azNabG1ATlNbLnxyKGcmWTEqZj5gWGMwLCNTJllGdnJoKmJBT3oudjVAZTtlPW50''@;'; put 'put ''Yn1SbFBDUmNwQ05UaGJKLmRYW3UxLnwrSCszO3g3dkpnMk9Ee3oxaDc6WD44YmwiTzkhSCVDVG9WOFh7VXhgQDt5ZWBQSHFRWEQ+Tl9KfDJWJSEueHI2Y2gqSyh1ZCRTanVPZzdGey5HcUw9TUslZ34pQCxGOEM5JD1mXzZZM2g8NkpJT0pVZTFNYXIyVVlgdSRHS282Z01pYFdLPmx2JU0oSl05''@;'; put 'put ''PEV5dUlYeEkxM3lLZ3Ujcjl9L0hGSCNMTkBJLilWTnYmV1NGXW9gZDJHci9ybVFZWypuMiliVHVTKjM5Mz5YN2J8SikyaWs9XWd8U1Y7eWBtLnh1Y0oiYV4/LHFkKztFdE58bmwmRXZITzR8XnhkQD16bUVYX3VCTypEcU4zVWNBK2RTKHtFbVFHRzN5eS59YVhWTCpuanQuYDZMNXRYWV1oKD1V''@;'; put 'put ''WXFDQ09xKSo9bTpxV0tvV3xGPFVZUlpfaFd8Nzp+NWRDU2hOJjVNKWpCWVtHU1sqeHtSbX4oNSg0N15IcCV3RGF4LmBgelMkOCNwbzhtInFzX2d4WG1DUVtbd2pDO0RsLmE9X2lTIWNQI3oibXN2VkBFYVc6WUlgZHJmU1BffTZzW1A4M3EsYVpPTnN+T0wlWU5OVWhgamNXUjV4fikwbkgyOmBr''@;'; put 'put ''c0M/RiRrbUVXQjpeOFJbQ0krZlM7Wk0xJEkxNiFKXlU7Nks5O2FMX3RxbmV9Ok54bW0wWX1fan5CaFIoNWR0djJRRzBTXTwqej45c0Juamd5MnV2QVYyPTBITUdQZkJVYFJpKi8uMG9HPz44JUhOekZNVkJ4LGtDLltmbG5QSU0rMVZyIlRlfDY3ZDovKXVqOnBuVSVdKnlNTzJvRmlGelkhT3dj''@;'; put 'put ''NzM5UlFpLlZ1WWoqNjBmUFRgP0RbT3ptJCJvSjBsJGl5K2FZeDljS2xFMkNae2xVW2VaVipoYWY3PV90c301KXRmPH0zcGE6QFtqIiQrdCpIJns2OUdkOztyVjU8JDt8I2kpOSZWMzN+IipUMSQ0Rk5UY110dEhHUkI/NF9kNThdWUgvMUpPV0Q7MUs3X1cldzNsIVl2T0dOWixHJDhRIlM1WGht''@;'; put 'put ''WlVOakkpVXRbRWp4akdobnMyI1lYRX1ibHFvLyRVKTAzOWI2W1RyU0txOTQhcSUyVGYjI04hIS95IUVpMjJNW1d5UGNFfjg9NmcyKGAzPTdzL0dKJm9LW0M1Uz00QS8yUVtha3F+TUUoSVNoeTI8KlA4T3gwbzIoYDNVbChiKEh+Uy8/eTosezZnNmdiPVk4fW5zVDU2Z3Y5O0FLWlYiZ29wLF5Z''@;'; put 'put ''LiMmTFtrQ0AqfD9hVWRRSFZYPDdeIkJRTTBvK182Z2xIMER0NzBmJVcrdDlJKnQ3T2NZRDtNOGtBfWgyQ188YHhUK2MifkxFOENgeWA9NFZdYjI8OnAvSkc7U1M2M20oW3lbJjxod1F1ajJvSnRHQW9DUnFsJl13b1tvdnN9ZHlwODNZaUx8eHZ7VXpgPzZ7VUQjNiQ8QmVCVHhDJVNGXXI5Nkxv''@;'; put 'put ''Km0iaXohMSh8VENWMWJ2OGBxLCI4bDVsNT5wLzF5RnQ2ZFhFbjgiRHhRKmtBQG86YHg8UShmZlY6RU0uc0QrSCJieExleVk+K2w/JklFJCNbbSxRdCwwVHd8Pyp4b0Q4bVEhJnJOIlIvOGMyYTdBeWkzeTRaSXJDMTRtbk54KlhncVBtN0o4bmtZXT0wWXQhL0RkZWhKX3hHRCptMDlaSWJlaEpC''@;'; put 'put ''eWU3bSRTPTJtIUdmQylHKHB7e0NVTCpXVFAuVi5CPkwzVTkyKj97V1F1PUt7dCRiNi47aT58aiIkYjZbVDFdfCE0bm8wbyxvTFp6cyxaWHdwajYqcDJEYXlkalR5ZFNoMTg2YDdvbVRNKClKbzJeWmpoRnhpMikrT24saDpKb0o1fU5pYGpvQ0tPZk0mYmY7Si55O01dWGM7NVJ6OHgrNVowRHtj''@;'; put 'put ''c09ydV8sLHk/KU4qfVcuNGg0ZUA9Tn5vQXF9WjQ9XWh9PVNvVF4ybzxeVkluZ2xLODN1YmlASlpEVik6SnQhInI6YXFeTixSInJfYTBpbU1bbDdeQXJ9fHJieEI2S2YkbGxoWnFLY3xJRGtgaF0ycTYpTHJtRWdKTmN3YDFqZ09VO0gjTVBkSnY1dTt4NiRQOjFWPXBYUWMuTEFwZzViUCo4UjRd''@;'; put 'put ''MFJ1eSsqPWVPY1lQKiZ0dyFgaCx6SThfeiUhV0tjZG87NDJrd0xZaEkiYnVkcih9Y25bQFpfLCRUPUkxK0JIPXI9ZShjYHRpSTBILG9CXjNXWmwhKkFCJHssZlZeNnFeUjxWdjAoL3Y0WG02UjdrejViS2tPcDBkYCwzd2JIRHk8NmBffVNUZFZMY1d2TGszWDZFO2UxYXNvcGxRYGJLSHtuVjZ3''@;'; put 'put ''fS9UYFBiXi9ULkw5PCNAWmZ8WVVkUUl2bF5sSGNsXmAzL0F4PipQWVlVV3dpRzN7Ii8hKkI1d3JbW2RyNjgmTzlJIU5TNiFwNnZjQmxQOn5ZO3IuLkVeWFVBZyFrSzIrQWlGMHFWckRGP0dtX3k7YTplRFFmN3d0aClkXUN6amlQWURaZlJMS253ODoxSUFQUDRHWm5bIj14NmhgI3Z5e3tIITM+''@;'; put 'put ''cmZKOWxme3c2TV9KTix1K3lPMWVDJmBoN01fdnZIeVJifmpnbiUmR0ZDPTtxWmxnclVWTVNSJX48I3dITzRZMi50LiJbd3NVSWU1VTVnRk5JJEgiWjFIfHFMMEQqZVlLbixSZyU7JHBNIWxHPUArMTEqRDthZlkuc31lUz49XkxgPXBLfm1AfmdQNzE2QjouWkhmOm1ZPlE1JGA1a29hW0kvIWEw''@;'; put 'put ''b0NIW0RkaDt4I3UhY25jMmVyPUhtVFZ3IVBrMlJXNW1LKTZnVVArWCMxZ1NwNiNtJFo2K3FmT2I7KmYqSWF8cWZdOFkuKT9mflZPWiJYaSN5NXJVJCskWSE2T2FSMGs8X1MsR2whYWFQb202JFhtdnBeTHkoUlFHdDZPYUk1QlpAcjA3PiwlcTVQJllHOkBmakBdbEE6NXhpSSRIJlkkSDdEeTUz''@;'; put 'put ''bGlfNF48N1s3fUBDNkQ1NkUlQChRQUt7el54VTlBY2IzQUAwdSshe11Ub2VoNSM6ZUhSQjAyMXxaQ3tvUyUlOGw7YzAvOjhtOiQ0QXV1LEMsLkB2b0BPRFYlX1Q8MGFqWS9TNls6W0tbdm9eaVU7dWFvfjoqblt7UEN8cWQqOzoxMWE7QCxGIX5uTnNndUMoP1lbYlV5Yl1wYWVqZ2pEJmlAKDZQ''@;'; put 'put ''IlFFRzhtanh9YlMyTVtjVTEuVD1gKi8oLFttJHB3eGBhaHZtVG5zMihJelJ6L3oxMzlrM3hfNGBebUxUO0V5YzBiOjtpa30lYzZbVGAkeThdRUlmY1czPXN9NjVKLG5rYEVwXmp+VWkiMUxZSUQ7T0VzUnd1MC48Pmh8NFEwKX5rSCEzOHhdZGs3bmpBSztPKGoxUk8sdjQ5ZENaamY4LHdnXTB1''@;'; put 'put ''XVtYXVpgcjteNGRrQEE3Y1deXnJVM3FmTiJQT3lmOHVQZ1IzL3JiYVlzNllvNUlNKmJdOHthUTojfmY2c0MwdGVrSSRITkk0cVMldTI8QHttKXgwR3cqNDAqNFNAZXVGVTVFQXlvU2p5ajErRXJ1REt5fDchcnxpWkV+X2kwUikzQiFFKnBKenE3LFh5TzlzSWtJWWxQe2BnbUd0XkEpXyZZWmFd''@;'; put 'put ''UDcudFtfTW9zJCJgKXR2fClHPSNNOilMWyZMMGhFQ2BlNTZZbEU9TFsmeS5IRExOaTgrQzFpVGosWiJdelp2QGpsQ0tzNUlNN0haNT5VWkxDK18lemEweVNYeSs6RnFaKWE0UitCMFV0eWE1YEdRKld3eGttY2ByTmxwTjwxWTVjQlVqMVBYNz1gWnZYRHs1R3FjaXpGV2h0VWV4WU8lMXJPYiE2''@;'; put 'put ''LDwoQnlacGBvQl4wdmpFRkdGQUZbKlt0MCRAdUpPKnZCPlp2T0g2WTBEZE1hdk9INlkwRGR1VDwrWW8saDBqO2J5dFtNSzs6WTplWykoeitSKCopOFpqMk1EaWtLNjlwYH5xcT42eS5iZFljT2hzfGp5LlgxSFBOX09dImAvei4rWlc+OXQmOCtsNi57MTs4VUgjTktbI2B2e3RBe1MwOmVXYTs1''@;'; put 'put ''c3BnJm8wT2NZZGs2I3BsOGVpJj9rai5SOHp7WV01JGA6JTVwMk18L1NiciJiejlzSzR+c1g1L2E7dXFXMk1xaVY2dFZuJUxiYmVaLCJFXzFkUV9YO0gjQlc4cH1AUkFiKnpUPWtAc3t1MkltQSZTZGxFR2B6RDlXd0gjMiNZOjtOOUBXaEpUKlVNVEJ2SzE/SUlmMntqREBOOUBXW0ohcUZpZEg0''@;'; put 'put ''ci9PdE1HUDhTWC56PmJUZFE5XkV6OnF7Wk1fL057VzhyKn1zJihRVHh3dGoySzNgMkdXM3hIRFNzaHhtUnpwfilbKXJxWmhsc09aVnMxNSsuSHdQb1UsSmB7ez1qSmBiM1JAPWM0dmlOdmlKd1soZngpS1AwLChuITJHUUJpcnpaNUYiRUEjSE46QzM6I05HT1pgeld0R2l5SilWPW9oREhLdFtj''@;'; put 'put ''Tk4wY204R101X3QsdX5WQHdeTDJgaTx4S3c1SS5eO3AqTTlSb34rQVd4bWE5V0IjRSRBJENybypRRXcufGhqZWdoNy5TZyx1fUhddHJebWQvUDROMmdTaSk6MyEyeUZGSUdXUGRpPzslMUVsMl58VkslPlBsM25kNzh7Un4mbzN5d1o+YCx4dSRPYFlhZFpZcEJoPW90VmQ1UTZsRnVHXUYsUSE2''@;'; put 'put ''fl9AYDw4aWxvO25Je0xkV0VHRTNHYVgiNVtwXToiYEtiSl5Nbl8jU2hyOzBTNWMxNi56MFM5eDE2cyxmNXNJY0lmPkUqZ3tEbmBWSShYcyN1UWVdJXhJejE4R0pIKz1LOCQmJjJdMEM7IX04MW9CRWoue0khWkxNIyM2SlhDPz06aWcrS3dpb2IjNiNrLm46PFl5IU1FOiJ5WkdIMGhsUVgkTHxZ''@;'; put 'put ''QnxCMVR1SVkkYixJLmtCXVk+VUlFOjx7QlJseipefUN8MntaWlRNbjFWdU9OLlFEUUBxMSgpV2RiY3A8MUQyeExsM24vdW0wSWFLTmVAKFtFLC5oYiN3L3AkTmdZYyVSZjY7JGI+fFRnMnh2UDtqTF0sPFZMSDUxOUAkOklaTTpmMH54bl1XP19FSzRmY1R1Uk56TS5LdzN9Sm0hcmFvWXZPdk1u''@;'; put 'put ''S3Q1YEdoJFZhTXBGWmREKDxrRlNpVUhWOTY9X3AmYHZyQ2h5cDZkU2xzUk1Ve0V7Sk9PbGlwVz9lNyt+TzRMfjxkKVJaMTxIXUlXdiJXeVY1P2pwUWo4aD1OUmVrcjZFcHklNGFbL18yeipieTVLZiZeSnczKWR8MVhaOSNHVHgjUztNZTRJLnopcEJAW3Z+eGh5bFgiRlF0L29kKGZrd0xMdFZG''@;'; put 'put ''Pk5tYFh0VkZbO3FyPVtUbVl2OV01SVRqb25oLloxPU9eQzdSQSp2aFt3bGA7OzB5KHVjXlJVL19XQ3Q2KDJzKXwzOWd+LFp6UVZzZj9mckszcUlQfFBuQ1g7YnIwXS49fm1lYUJuKmhHcipoaG9UX2JweiwqJmJwXl5gUERjQSNbVE88RC8/NU8zYCpgMX5ZaDE0JiJeOEd2b2BEQS9OQlVGSFp3''@;'; put 'put ''OjA4THomNH1QSHVSckJlfXFzcEV+ZCV1VTpwLyNZPn1gNWo6LCliWH52Mz1sTVI6UkRMKTglb0dwYW80S0oqUS9OdVNCIjE5NkxPNilUfkdtKkp0eDteIm02NkJqVSsxKTlSIiVSZTVZLzQ2dT9paWN5OCJkb09zSkZTWElDJit7bTxbaF8zKlF3PDVONktVentjem9HXTNhYlc3Z0JUeGBDSnYh''@;'; put 'put ''KlQ8Z01pVE9fPlJGZFFMQGZ1Pik2M0l0VTtddjE6OVBZRGhZYTBUU0ZxKTt9eGM3SGBHaSw7U19fYGN2amkkM1F0KUs/JmphcXJyTkZqZiN2dGhkfSlAIy5MImpTalRrZ2w/fT5MdDldUiUwUSZ2WzsxKy5ARTJmWGtmKT1nbF5BcDdYPXRWOWVIISU7SW9McWZCOzdwIy90eihKI2AhVUh7KFti''@;'; put 'put ''JTZKPy96JmNPI0ZNOTFLaF41PmA9PSw9UyNlUi56XT9TZ1t0XXNVdTYkdD12VypwJiV8K3NnSVhVflRaa1EufmZlUHM1YlV4Sl18Jlh8dCUwaH5WajI9QFlgWi5DJE5STWlERmk7Kkl3KE07USk1X1tUQ3ksUncrO1NiODRwcj47b2pNXzk0WU0+UiI8QkIvelFacVhSbHRtVkpbODplXTZdVn0j''@;'; put 'put ''MVkzcVowcWB1L0RvPGN3M1YkX0lOJDxmbGpOUW1PPTB7LDtbRV08KG88bEB8L0BFTG93eXZ7USZBUUEhdCFWQHhodThWTSRIT2hVYDtIOyVIdDExU1BGQF4lajtfNCkhaFJCNmcpX2xlKyZxYEZleWJkK15wLDFnbzkjYDp3Xy8sOiZgbkpqOTE5YzdFJFsreHJaMDkmTnZLaFhOcmxhMWdEJkxU''@;'; put 'put ''ZTswalJPSWomWXwxYXgsbTFAe3FxKCU+OnB7RnJOPjZ6dCxfPX1hZmhUe2xqVDhZZHhhOmdHO1ErOSorPyIuXklKL157Y1dtakszWlVtYHh9cXFTJWxONTNhRnphYHJXJmd0RHV5X0kwWlZBakJ7ZlJMI3MqXn1wJFluWGpeTnhQNW1fLHIhbmRIaXA3TV8jLFs/Yis6RjkzWHo9LFtsQ1srMzlz''@;'; put 'put ''aWR8dlVvRC9jOD8vWXB9KD0/ZlB8VSMuXnpdTiZqaDV3eCNJKywhd1V6cWBxOXBtN3pmU1lkazVneEtgLHpIRjZLdmhmOkEzJkIhY2Y6eyU0anFxWiVIKzA7eUk3Y1tvV2g3UX5mZU5VO3cxUDRFZVlWdTp7UihoJlVMSWRSRk9eR3NQRFprdCU3a3h+JCRSbTtgSFkxcyxma1deOkBUYlA3e0h3''@;'; put 'put ''RVY+QHh6OjwsPj8uQzlyWF5YU1lpb112WjwlJnVsdXRNRHcwKXtAN3Zwa3ptfCNJdSJYI0BEJmxrJEo/MD1bdHZ5cTM/JUZndyJeU2syK1o1eCtpYD5MQCtpZDcseC5gJS8yY1YpJUkrREM3WXN1STJVPFdQcXdmblhqblsqNjdIVE0+d0s4Oy9pbFY9YUNkcTk5OUkxOkd+JWIpd1NeQEBoZT1F''@;'; put 'put ''WnBYdnhbNykmP1VFR0o+fXBibTgyPGxzWD5BejU9NSFxd0xgO2pBP0w/SUApLEw0Pk4yWV9CfmdvUT0mTGhmcVJSekdYPSVjbnVDL1dGYEJtOFU+MGZxJlZLJEhhe2QoNj1fc2w+PVMxXU5jO19AL20/cDVAcGRvcU48JWI5U1VFVmowL0AuMk5UPVFZc09KQW5Wam1vc1V+ZjdvfCo4LmhFel1f''@;'; put 'put ''YHlVQm19U1ElcSxiW1AzeXZKMnxWbXIyLikxZiU/bSFfMF1QJWVKPkwuTnVOJkVqZX5mP2M3IXtRZXlYXlhTSlhoK19kWHhFVnxGVGUkLG1QJDpkdEloIVg6ZVpVISZaZn4sbmJkPnMmczFTLDY5cW9OWEU/LDNmRlp1Qlt+NShxMkhJZkI/W2x+WVpLcHhDcnBFZF1uLC47VCo4ajNUOkBbbDtP''@;'; put 'put ''OCxXdjVBLDtUKkE1Q3ZQY2csL2xbbHxDWGZkNEQ4fHdJZm1AW2wxJD5PfDtpQVRYei9zdGlhR0duW29UYXUlbTpTIlhOL2BZSHJqPHdodzV8RSJQNXZXVSNLZF1CVlJ3Ky5gbGEmR0lGNUQ4I0AvYGZ4VXApNXhdZVU1M0tAeDAmJVhGMWBsd3V0Szh1dlMxTn5NOFtwdWo9XnR5RTp+KzBPJEhv''@;'; put 'put ''c0ouWHNAYDRpQ18sL1VsRCZSIll5Uj5maThAaltOXzRAc3IpW0ZMIzVaR1c+XyxBaDJbY15gQiI9KCZpPlI+TDFuakIlUzdjMUFCVXJlMSwpOSY5LEFoUDE8ZUQpVXJzO3MmWHhGRTZEdXZwLy4zQz4oMjExO0BuViYzZ3FuVnpVPnE4bltsNSlqPypAIiosX2tvaFZ7cUFGeix7RlRlUHFFb3oj''@;'; put 'put ''RjxPJEZtQ1UsWEpLPnE0VjolKlNPUjosXk9hWHxTY0YvU04jK0RIYkN5amhdYVtsfSwqKV5PZT5ALH5VZ1kqJUJmejo0cll4UnsiUX1DMEMxWztkLilYOChxM3ZYVll+NjRvXUh2eSguMEF1IjdMNn10YSxwazRnckJrWHFFN3ldYXF2ZUsuKShbQyJ0ZWJ6PURlQVtsfkU1RUFqd29mR3ArbVg5''@;'; put 'put ''cms7b0QjJXJKIXUkayN5eT82R0c2TGdhZE5fVUVvRysyR0xIcS9uX0c7M2ouSipocjImPmY9d2k5UjEqYklFY3V2OlFFeDlsdyVNWkQ2Syk5QGA5enNWOnFdfWlHb0x5OjNHMFVjNz82fFtBPz5mYHchZno5SV0kbmdveSY6b1leUmhqWVFZUjZiTEhZbiIlNzpBYUIwKm9UInY/ZStEeDlzJWMs''@;'; put 'put ''TDJiOTtVYkUmcktwcG9dcFdJOENyazhwTV9wa1A3Ijsqb3BbM3BncUYsNUdiRU9wWn4yOWVGaiQvS05bfmB9JjwsNzl9ISZMVGVAbG1eQk55cV02QkN+aDp6UTFNTTwuZWFKYHdBV11VM1BIRF1AYzokPXEiTlpgKWZTIUEwRl0lNUlbcm9pN3VuR0JMOyNDNGB0UURWQmREVj1mPVtSJjwhYyVN''@;'; put 'put ''XzQpRGRzWShKQWZ+RCJQdk8hVmE1TUJtMmckQXBHYV9CVClPelJld3FgSVg7UCNHZzRSUGdBNWZvS3hsV0VveVNIbT9dbFRnb0hBPjJZPDNiTG1YQjkoVEtaZFA4L2s2Q1FPfCQ/XnFhYWpXU2o1WVJRelR7RUshYyhdeTFyM0NSJCR6V3VoWHZJajNWc3IrcDx4MDRiLlM7Qz5UPkRDV1hCfD06''@;'; put 'put ''TltPWE48e1Ntdy9DX1NmV11sTVQ2OTouLj9tYSxMYWpCfVpqTz5sRW5rQ2kzXkE8LytJQEEsemYzXWcsPCVMYD4wdj19LGM+cC9iS1YmMmdOcCtJJGZDb1JTWntsdmpRWjxTJEIvZFYiUDwlMWpdYlBdQEQ2OXNLcDB0PXRtPEk8e2t1Y2B1cHhnTjI7UWl3VX0kaF1eQl08SSJ3ZXFdbThUSmVA''@;'; put 'put ''ZzZSU2U4aCh3STxlNX10W3kqYklxejgwdkh1M3cyQl9LcWVsSjV3UXV4OD97PVtjMkAsaHdedEAsMWEvRnY1fmgvKTBLc3tmcWAsY0NzNVFmRVB0ZmtMLCU2d2FlKlR5Um4pdUFaSyxkOHVhTmYpSCN3OD8wMT5HPEt6fUNFemIsMHB3MyM5ayZiOWlyezFzd1JzRiNRe35tYEA9cVViUltCXj9J''@;'; put 'put ''SHt9JlohOzJBMUg9ZUlJT2JnQCtWX0dyYnsiUm51dUw/JVJoY2NRMkwheFRyezNzW3IhMXtHQSEpJUJSNis5djk+JmpQKnAqPTlKW0FtKF9iJVhMeiRzSmQ2U25tMSslRUVPNCUhe09qeHpKcyksb0R5KFUjdzp7WDUvZEZwUFk2SWJGJXZ+Zk1lO2JiUyR3Ml1SY2xFIyltYCRtTXNTQCpMc3pU''@;'; put 'put ''SHg3VHNGVWQqc3M1QGp4PmRfT3ouWj1peigqclBrRX01IT54UHtlMl89NU1TIStHZXFpdmMwRS51Nyl4dytKUUNWLG9ZYlNMSE91ajtsRlBIT3UkNGsrK1d5SUNrQS8sMUMxd1ReanFkR11uSDwyQGhaXXE2OV89U04pW1FVSlYwNCl2TCQhIUk8d0lNVlB5TGpDekk+VCEjOyp1W0s6UTcsVW02''@;'; put 'put ''a1ouKGlzRGRPJTA6cyw+fDR7L2hJZitJYyE1YGlvUiNuZmYxcGRWJl0wbywlai8jN15+Y3MvZXdrRFs0V0QhRy5ITmEiWWleRGxzQHx7ajFRcH55NGB1e1gvISwhemMsd2E1MjwzPVk/Oi9iV2d4clYmOylUXThiWS5POktebU5dJE8qfCUkQEJzQHB1JHpwTihPQFl6U1d2VXViWzl1PX0pTEdV''@;'; put 'put ''QlgzMlBFblQzYVIvNT0yNk43Ll19VDooJkB8b3czYS9TMmhBPmJCfGBXYzIsLnZ1UEldXkZGZDoxUlI5MUAhVlpNaSxJOk5qYUopXlYsYCw7Yy5fUEUxRl80SXA+fWNnWzpOXTJ0dVdGYk5BMm43czI4UDQxW3dES0VWY2A0YlU2eCU+PzolfEsrbkF3bixqeDFfPyFuZi8zRGRyWy95LF5eX0ch''@;'; put 'put ''Lj9WSFkwd0dZNn0pTGx1cFBuRWRVdTxGeFhbR0pUcXV7KmV7JT5SZmxZcDBvd0hZKHt9aFM7LjJBJD1BN1BuaTozNXZKUF8mdHBGPGA3UjYiPjo4Qj5bMCQ3XVo8UmlhL0h3U3Q2dW5+Zm5RS2tGO1p7aDlBbWEjS1IyP09PPU5yeDthcz8zV1VANCtea3NvNzAqYz8mKTg3eTIuTzM4YH57Ui4o''@;'; put 'put ''el04ODlmP2FFSCMrM0tlOiMrOUM0RWVALEczM2x2a3tSaXhjPHhEWUpbV2ByQVoiU1AxYzIsNnhdI1FNeWhaU1MzNnRQR3kxPHY8cE5dIkImdVAqKjEzW3BJNjlFZXljbktQbEdHZjYlRihlTCEocS9rKklaIShWKlM3UF9wS0NANGZxRj0jYlIkOHFCSyx1ZjlsZ1hhalViW1osKkI1fiUrTFl9''@;'; put 'put ''QmsuRHVUNTEsZzBVKGtDQjI1NW1lVHNCa1JFVj8zImArUzRwSHt6JWZ9RVYwYUV1Yl5QXXZxaz9rK31eaDhIOi4vc0c6OFhofmN6U09fWko7ZWsmO3FkYUMrPFRvQ2FVJHdgMTwkWSN0WW8mek9vUG5bW1UuXlBycDZCMURPJmB6NTQpcGpOUnt5WFhWLjo4PkJid3QiLixgQj51RDIvUjRqfUNE''@;'; put 'put ''aVBLOTE+cEA8cTwuMDdQVSo+eUpfNkl3UDwwKEU/JilkbTheMWddS1s8W0tbVjlteFlNJCEwRzVac2VXRTxiNT01Q2NmYURKTldQajZZa1BNeUR0cGBEISpFLkRSe2RbeCR0MmQ3Q2RyfWRMY2RQP0ZnZjR8MVA8dzx3KVQ5KV5ZOTRmfkpoclNecUMpamA7LHJrREw/KmV6Vi45K0k8Q1J0WjxA''@;'; put 'put ''e1guX3RnfCE2bVFMKjlkaXttM3RdcFR0PnczR2Rle1svejNoMDBaPV1oM1FUaUJfNVloS2lxZVUqJihAP0s1NGVhS0B6JnpLOSwsbncka14qZyg/TU5UeDE1TUdlazVDQVlAdyxvU1hhMWJjOHJIdmhVcS5jY1FgblhMS3tBaklMTlIyRGxgMU1OYislUFE6WmV4cWFxdzBvPTo3MHkvPHVKdk1i''@;'; put 'put ''Rn5xOi9LPDQ5ZlI/cFA8JkUkPFp9NHphXSREfVs/Unx7PixZe3dzYVhOJSwqXig4aXNMRWZAdlBAPixbITwlMSVIaDFubT0qTENtfntjcTwvQC9QPSQvS0QsNDRNKHh7NT9ZfHpZaSF2KmlbLEZ8fVtWSFdYX3I+NVg8NnNPT0o+c0VzNFcrODVHLGpYQmArU3tGY3ouXjpTUlJtU3YxTHV4YCNX''@;'; put 'put ''Y1NUdy9fYUV8SzlNJmVVbmpMNSRIM0khLEYkM1RuYjNlT240QzZSanZNN2I/NHlVTCQ+Xz0rY1pdRUcsfjQmYD5AVnZFSFMyWlN5dF1LJDwwVSEvI1BHbXhaT3BFM2xjXkt4IU90JFdlVlRiZiZndD9YUXdrKi9YakVGfnxML3kzVz1AVShKOFJqWkAuZj01K2BDY0p6W143dVBZI0hJaTchPylH''@;'; put 'put ''NW1QJThecWsyYDlaVitLOXZ8VkNPZ2FLRUZ5UHcvfWxxU0p2bmR8V1JHdXNYPyRUTDduOWxbRmVrL0Q+JEI7UTE3JDVnJX57cURLT3BxJjZuO2owdDBvLmBUeFAlXnpuS2BEIWx6ZjI6dXhbWWombj9UYnJjMD06LC5dPEhYLHR0I1M1WDZLcVJUODM2MjVJTUx6Rm83ZWNpK1hpeltZUllgIzt6''@;'; put 'put ''eEBuKGg1U086dj00d0V6cUdPSWFFR2BJOEM3P2g5QytHLFpgMXVLMDsuSFpkV0ZoSURAdWQ/MElDYChwM2lebzNpYkBLTSljP05EdGFWXUJzOVtvNGJjNCE4SjAvWjxbSCV4RzNxdU19IlNvSU4+QU9vSU4/Y2VNaSkwK2gwcFp5MXZ6fXJ5PVVEMVpIUjJAcj1PaTlAeml+Z1R0LE9+ZyhkaElX''@;'; put 'put ''TTVhfU88QWNAO1okOk5vXk14KXZifCV+W0VhczBzUVE3PHdzUUokSUlwKWpAO1p1WXorOHpYRG1YTE8uXktZeTFIJXBHKUxXZGdJfmcra1hPfCUycVlPXnQwKzh6c3dpQDtaX3VMWVNkfCVKJXBiW3BgY1QyQnhOemNOc0g+dFpAO1o7Qld0LzdbcCFSWiksXj5NRCopdU16Y05NSFhNNWFETjx0''@;'; put 'put ''W0pdcEc1R2EsXkwqe0pYR1FZWDFyYn13c1F5MU9HNzRSb15NMz9SbyhNZE1Vdn1NOlhIUjZ1VkZleE5Od3BkalpYLk9TKVlvKE1KLDYmRzNWRl4mKWMoTUU6SjBRUXtVRHptRS5CZStEbXg9IytrQHJadipqQHJaYVl3QjVZcktLWXNIcktbVHxHLyt8eXsreit8eV0rRncmUXtVfWs0T3tVODRe''@;'; put 'put ''ZHZEeCt8eSR3SHpdTG5Hb0tfYU1mOVdObyhNa1hSbyhNJCFTVyljNXZHYVtMP0dRYGtnW3B6P3AlckxqTGxja0ddKHJpcktIUnlOYk01YVYpN0hUNUFEcXpkNipoQyskKFJ2QSRgQz9CK2Z0bm9FRVZoKShmYWFYMTVyREtscX47P0wlQnMzMlc+MU1iZUheSXZlNTdKeHQ5eEk4O1dJLjFyWy5H''@;'; put 'put ''Kz9OJUNETk4qQ3w9S2hVYjAwXyw6WUVWcjJRSSI9dUJKLFs9a0RVYndZKjtFJHxqTiQ0WVM4TDoyOnVCMXordFB6el0uUy89TCpJTzE7b0VzKkAwIzE3OXE6eF5xNDtWMk1dKnMlR3FvbyxtMUZuZ05wcW9KWl5kS3Fya29tIjskZFtEeGYkQ148PCJmJnRkJTB0RkhkVT4wYjBzYDZaJWRhaip8''@;'; put 'put ''Pns9KTBhMzdZPkNkRm4iOHF2JjkxQ0hRTmlQWjB0eVszZE93VXJ7MSo2Yz0/dGdkc0MweUJUdGgwIl0mZlppbE9EeEU+UzVyM0xpaWgsPWJycm9QXUEvMmljYmdWViVSWEViTz9YPUR7ejFtfGVoXXB5PFg+dn5zck1qS1E7I3gmKz0oYFldYFkpKDUsbC5mODpMTkZAbHZLTnBVR1VHXzgsSnVK''@;'; put 'put ''ZldOUj9aclE+O2VPUiU4NWBNPiQ6SEdFOEhJQl1SLjwxMkFyImA1P0J9Rlsva3siWCV8UW0rTSl3bDlnc21zJV5xW2ZyVUxDSyg8aiNSfm0iVTBgO1k4Ny56TlF7UWhmbGZreUlqZVI7M3xjNix0JjhfM15tcFteUFM7fV9nU0VdfTwsJmg4LGYxLHNLKlIrVX1VVnpmTSREIWcwPUl4SUtfMjdF''@;'; put 'put ''W3A4WnZmdXY6SzhhRnxTYmZueT9XTkI3M1BdVHwwKTpFJX1NN0IiX0BdamsyejVtOncxSjsqUWdWMnchTDkrTG1Rb0RdJHEicG5tMl9qbGwzZnlgUT01S3w0YC5GUVt+bUJyOXUoTVc9UnBLa11JKk1OcjtCQ2IwanpPI2ExRD4sc3FtSTNQPChJOy8hcjx0aChRO05LZE5rUnk2LlokbzdGYSlv''@;'; put 'put ''WSR6cSRoZl9JeHUxYFptKHNtYn4/eD8rRW1LUEtoTHN4KXU/d090RzcvUD4pPy8uPnddMmtdSWxfPH09aVFsXWE+V2VzcE0/LENbdyUlbER6bUQ7dTZxJF07NHpaYFo7bzlFIWopP11ZfVdxZ0tFNEAuYnVBSDUmUTEhOy5pNjo0elY9MWU5WHtzcC5haVF6cTUqJClvNmRrRVtnbHJZZDUxWkpR''@;'; put 'put ''TVYjODBHRTNqNFEsRChQR3Z3KyozdC5tdVgxLENUfjJaNSlhOUJ2MDlePS4sPytaKilLfDY2c2l4Y3t2IT4rZntRSyQlOHo/Ll9VfEZ1eH4vSSo1TCYzNztSd29AIiVsdE1SLCxOX2xQV2hbXXIhPV0weyxCTUBZTjxYZE9tQG51LzpCck1Xd1V8ZFN0W1RoSzokV0lbSDE/S09hY0NydHVQTEZG''@;'; put 'put ''eztrO1EhZFhvb2JFPV9qTkh4VS9XLn57VW9oO3JxNyEmaTBdXjd0VlFHNEUzT3JpN1F8dU4hSC5AI1Y7JWVnNURnWldFVlNwbVZmJlBOIlBbPG1eJTJ5V0c0RCRRIk04Q2FRQCV0WUJkaEUsbkwwQWhhR1dIfEZxdGt5LEVwWD1TTXYhVyUlZVRWTk0wfmxQUlo3ckljXmpmRX5rPixGTT5kNzsv''@;'; put 'put ''X2YucU9XckJLfHVbY3Ijfm8scDVyamE0O3V6Pk1kbnh6WVVHTmU2QWwrZSNOWURDbEJsKHhLMGlHNmRiUlBSNig6RUhiM15WVX0vWFFJckBLaXdAeis1OjVUJHdaWUlKbjxGVlhmbkJtaVUqYTBqK1pCWDNlfixaRWtbZDIqOjtbKmlGQnAwKW5manNOPzNqeVUvWExsQFkhRFVBOUQ/UiFrUTNn''@;'; put 'put ''VCVAS1VKTzJEdjt1ZmsqQDMsaVpPTihSZkg2ZEVOMGp6T0V6MnZbVGRKXVR2PlNKQ05VT3ZPVElEU0BOKCRDSm1dWDZuPlM2WDVxV11dNUZgWilvJVpETnI/JiJZQmZCciZdc258V3FGJXVtJDVOOihEWkJLamExVjcvVjpITH4+LC58QS5AKVspPT4xfG99KCxXfFFRc3kqQ2ZGZHIuSEJpYnhk''@;'; put 'put ''c0BqI2cxNE5XYX42ZFZ9cWEjT301S319LjNGemBGUDFzZkJTJDpYZG51eHUpXWp6ejllVUQ5WzU5Wyt9cF4hUlYqRz9JKnw3S0NPWUBYazBLMz9TPk5ARWE2Kz1eUlNsam86MGpKYWJrV096LiEpUz5tKnpDT3BPKUBbZjVdRGZ3UCZUdiFyQXx+aDZYPWZsPGh3ekt7aztzeTJGcjVqX2IufFhs''@;'; put 'put ''TyFLL3pmdSNsMilYMnkvMF1eTTV0ciwwXUBPVnFYcSk+PEUpaGk7UUNlPDU+M2BdVTskNylwZWhlXmRbJjtPc0wqaChzRzMzRGNEL0h9RHxwKH1pSUc0O3gpUEd6e285RHt1dnM8NCx3JW9YS2ljXk86aCR+YX45Yk1PIVJePnNiaS8lOVZmUk9POTI0aF9KSVVGTUhPejIzQFZlakxqVm1ifWMo''@;'; put 'put ''YzxwMiV+LGNGMC5YKmUwJlZjTnhQLjZGclBPSDMxZjsralZMLzptJmB1WVA3aV4zW3UxbUJjNDQ6aiZ+cDxYamVadiE5ajVjYTBJOlN2dDF0TVJ0Q2lQWzp2JlRsRXYrOFFMIkh7dUJkMEU8cW4qPXJ8QldYT0lpZERWWW41JGZFJC5aTnFCTzReekYxX1ZhMXM3bFJIbl0sMWoiTm1ZJGMueWk/''@;'; put 'put ''TkdONiRgL093M3gjLEAvWU9aRGxKXXgmYGpNISh6Vn1Qe1BNYE04VWpNMSlIclJJQ1MqdWthJSFZTilWOVc9WDJjLj12TjdmPCtFXndRYVhDRWVqWV0ofFp4eHA3LDt5cG8lWmA5MCZlVXU7e10sK2poTCJIcV9QVVlLPDtUMndXXl5EJXRyXikjSFpkdlFfU3N6Ilgmc1JUVkVWaEpgdCg7VTsx''@;'; put 'put ''Nzh9R1s3eDl7OW9XWHpQLHw4MWtwVDs8cWFLMHBNXzFgMFUlIT1de0BQeGFNPV9QeCxCRD1pJnJwYXIzIVg3XT9OU3h0Q1NRN0s7Jjl9PnJvWXJjcnpZOFU4JUJIcXZaTiRIKUpmWT5hamhVVkt3JlUlSyx1b35LUTovL19SP0pTcGE0MnxfRy9MKCVKQWo6W1YkfSU6P2cqI0lKKzhFMlEwU2kw''@;'; put 'put ''eHR3b0I0PFBQdVtufTYoY3diMjFRKn5gLihlSWNaaCxrajQmZSFBR257ImcjfXcyLEghJVQlfGojISNsOmk9QHYhb1JIX3ZgYjF8UiN1TzFLOVhlV1UlK008WWpALiJ4LHlgLFNJKjBvSk5OPU8zR09SVHNDUDtjVjUwTkBsIyIyaWZFZmtjRSRwUjRAcVlvdzFte19zQFQ5UkJ7emc5aGZqZjlq''@;'; put 'put ''OSMpSz9ZczRXdzxsJHtfJCtFRWlEOm1IZU9MSU0uQ2MxVU9zXmIwUF1BX0dFRkVoKUJiaTxpaj56TlV9KS4/Nn0vQHQ5RnZEdjxTbykjZ3ZmVExYbWhxR25GdmA8dEByOSMudjBOYnRdc3hONjxdWHA4bk44bylMYCJnVEV1RFMxfnN9IUl2T1Ire3ZwNCV2d3MpSm1wPDBtKUticW0kJTxYUyhb''@;'; put 'put ''TGUjaG91RDEoMmRjfGBwaHldeUVyZE45cnJjNk1NKGgwQCtJMW0rV2tmQVc1eVlFUzJ8Z0gwO3xmP1tfZSk8MEs0JmQ6ZShiO3NtYX5rOiEpL15uSkMlWWhqa1k6T10uRFkzMyt2RFVXXVlfckpYayVEYCwsPTYzTGxkNzNRR0V3eXxNPlRGYUZzRUlFdl4pTF9EPG1wKFVVYFc9KXQmVn5hPjh2''@;'; put 'put ''Xk1QcT8wK0Q8ZCt+Sm5bJEtdVXFXX2NofiQ+NFA1MzErayhkUilrRH58dm0uOHNgNFFfXlQ5UnkpIzNgQ3FgdjFWPkpOdHRORXVnIklPTGZuZSgkSSo3c31scUluQ3llJUZdZVpWRlAqdSs0cDlQKS95aWlqcHl+ZkJsQWducTNnITUkWVFYW3AzRHtecS85eUkienooJkJNUTBKOD89UUZ9I0Iq''@;'; put 'put ''fXArKksjRzpxVFJmaSF1TChtTHtGdls9SSppT3dXfHlmcjZZN3p0TGNJTyNzS0l4b3s8LCxoW3B+QWNAKTtucDZuJlAhOnl6YGszbGI2XkZqWnxHdHpOOkVxPzBgQik5aEtbWENoQU0vbjFZTX45fX1uPTUzbms3W09hOCp+aWRpdVU7I0klbTJdNV50KE9UOVJ5Zn1pVyViNTB+UHgkbyZfKSl9''@;'; put 'put ''NDY9MDEvPVd+cypSUnF6PE8+eDt0RV0mLnF9MXFJbk8+diVVVTtaejAoMjdHWn5BU0paZn1kYSJtbkhPRz9vaVhhampKYiVISX5FQ3BUTWdnWkRYUX5nfmE4OkFaND5abn4yfjsvM34wNj9jNERCWGNmJF5Dc0VwRU5UWGM/bnxtVGcyJiEpcHZodV9EdyVBZ3l8VGxXOXg9eXdDS0sqXUArSl1D''@;'; put 'put ''IUJyLFs4Uk5de3YjN15Ee01LK1A6SGE4VEZ1Sj9wN1phM3h0cW90UVNPP0dIMDt8JVZwVz1UOVJaZTxIPDUxbltQV2lXJWxYNDtjYml5d1teMjlofl1VYStXaTkpMWZrfCYpZ2cxSHMsd0BYYmpvUSlFfEdWWDFafVgqXSgjXklediRMcXV0Wj1ZIygkSzsvW3NnellvbmciYTN4ej9ELHVMaiZx''@;'; put 'put ''Ul8sSTxXP1pOaFtmfX05RyEue3lva2VnY0g0VndBPn50bi4/SDZOSyo7b35RVU42Xl8scCo+IVZJdH1fajRVXl5GMkp9IlUvYHpIPiQkKW5jLzgke2xMMUlrdkFnalU+Wml0Lix4RWkoOmN4LE1OeXViYUxNQE9EfkFtfU5ETmBtOlhuN0MrKFkoeGxSV2dKVDwoTm9jZ2FpIWMjdGxZPnVtaz93''@;'; put 'put ''WjdTfkJSJDZxLl1PMDUvSExTUXBKRn1hJD5BWSpoezVGIil6PkBMQDxfXS8zTytDJC4pdG5PJHMucSxgQHk5IUtEIzBYcjQ2T2QobG1sd0BuIX4hfnBneFt5bXlCUWcjbE9iRzhQUWE1cGVbKjYhTE8haiM2XlM9P2xGSSp8N3BSWVdZfm0ubjx7Nk0kPGpJV1VLJWF+bSs5TH01PC5BeHNHR3gj''@;'; put 'put ''cjpiSFlMTHNmQDUwWkxrVX5aZzZkUjVmTiN5XXhDTnolS0dKVV9OPWBzSGEqKkF3ampkJlYwdUNOIXcrXSRreWF+fDlUfEpzVlZRJEdbXm9fND5mKDpOZz5zUlRmSXJIRH1WIkB7SlMqaSk7QF89IldALHpvQ2VxUnhTQyFEaVFoL1JwWVQrdykpSUM8RTQiLG9YNTxZNWdnQHdTXVduW0F9fmtr''@;'; put 'put ''V1FHbmYrKHNQUXp8bHhBW0syeH0lOGw4ZislaEd5Lmo0c3NmTGh6WU5CK3xHRDdML0ZiWEtpQnc4JmxpdERlR0Z3Sj1MaXVkTkdRVEo1ey5MNUY0emNkZ2NOSUdHW3EzKjVDKEFZQS8rSXNSTmViTCp6TEZ2aTBIQndKRytbKCZReFooTzlbKEc2OkhKR3VadGVBTWlba0FaeChhWy8xPD5LNmN6''@;'; put 'put ''MWlTbWJTaExyN0lJTTxhLm5SQkZTP3NoMSk1YkN0YEN8VyVla0VqJFFoUkVbZkkjMXVgcENgQEU/fiR4dz5Sbig1aHhsOXs2ZzpRcyQ2My4+K0k6Tn5yTWpKKDFZTDRRWUhXfXRaenR1TDgwREdDL3VWOm9dP0pOYWw2Qil2bS9kKE58QmRlQzlyYjNQZlV9SlNEKmkybnFHTWhiJnpUPExEZE1h''@;'; put 'put ''NGxhdzpZalEzUG53Kz1DaiZaU1VRXylARnVQUjZYOkpvX0ZIbk5PPERgSzR8KmYkPj50ST5oXyovJFl8Wl55eHJKM0wlZzhIREFYRWFUdF5SczV2UXRnXy5oM0U5MSJUZFIzLldgOHtjS2VkSylkOzZKUnx5NT8zKikhdjZKTFg5ZzJxQm05ejpzUThWVGYsMWdtfnY3WEM3ZW1ZJWtVOWYsNV9r''@;'; put 'put ''RVRFa2FLWWEjYnVTcC86PVdwKypnVFlgbCJxZmchOkRLeDVmSzciPGU0VVhCYUpOekhmZE4sXUJGRjViYF90O3tvelNtazRfTn15bVdDPWJ2eFRRfS53K3VnMWI1dFRVTCQwOXx4OVNhYUVjRy9DWWp8VDw0KjFvNUQ8WHZpflF3SGY5fFUqMkxOVjp6WkxwY1hbY3U3dHAmZ2NXa1FLRStTezpP''@;'; put 'put ''P3BKISJbUGlITUsiaGNKaCNEbikveXxxe0chMWdZQ1V9Y2JFLm5kP0Y/ZEhrSHA7UFp5bzBvYigoST1pUTBPKG1TTWFgMTJ9LlNJJks4ZEwqeG9WdDgyNiZBUVpKQntzK3Fyd3xqMUk/bCRZfVtKa0lNTCFWVTYpL1lsUGdoOWtnKyQzVTtiVHghK3llOGdhYltIS3d4b2tXS0RaPFE+QFFidXty''@;'; put 'put ''PmFNaFZAJlZrUHQkLDR6R1J+YW1vaFZoODB5QmlAMVNQOEwlWDo+THZwRjlBfSM0cSJLISw7aXdkUGFXUSxnZ2h9alUlOT8yOU5fPEBHJDNmZjFXZjhRe04xWXlWWkVTMiJ0OnRVJU1Scik5aVE0UUhsdXZ7dEhJcD9Ka3F9Vm1xYTtmP2RtNjZqTUs0RUx2Kz8zTzNZaGxzTGVmVjwkR3FIbHFG''@;'; put 'put ''Y191MWEjdG9GR2dMRjIyZlRlRnIhO3JPQGtiOnA0cGpTQCY5PUdORlgjVXhRMlhdKSpHSldiKjhdKmtpUX5tTyJ6KWN1Jj96bkwjayMqMiJJR3tPUTIxJSt0V2UlT29IKCp7bkVmNHZ7bENsU1NJcGI2QVZRUypTbGlRKjUqaWpsUDRxOFovVChYS3cmQkJrfF5qZkgwTkIreStWTEgsTFtwU2FW''@;'; put 'put ''KmNXJDx8QEU8ZWhpNWB1JFE7UVVPVnYzeDVaaHh+X1lnKUtzSmpjZ0N2PnwjP3AoIzRST3drMTxlUXp5d2xRTEk1KCtTOyNSXUZ1dW8yXlVuRnshST1pdD1WMyRALHRLMi5iPXE0eyt+MDpVcDIrbFJUOCNjbEp2TS9aaTNyPDgvejEzIVYrJDR+a0BkaVFicnc9Km52JWlDcnsoM2VlV2sxeWxp''@;'; put 'put ''fkJJTVIrbylzRzkxcG8+OCxuJCZHQzY/eFpQaTVQUk49USl4LzhOOjxlYF9fY1gwPiM1OmNscTc5UEx4Mncyd2VgTjJ1O306QWtBU31SQGkofi41azVCcjc+Xn18KiQpZ0pDbEExZF5bazA3fSNgI3pEQVB2S11tdGM3bzIuKWBvMlklQjI5RWlzXyxYUiRKU0xELjJgTVt6cFUuQFdpV0RKaDEp''@;'; put 'put ''c143UVs/K2JufFhDSkYxXixxXTFqZjJdLHNwcUk3cHM2R3FWLGg3YlRDIz0zI3FCUC5zcW90PVY9N1RCXShVJCFzT1dVUThmOzlwVzFselApRDlIJXVQeXJjZGJJKVBGSHR4ZENlO0FaaS8uQnVvNG4xViNkQ2pxM3s6fGdebHxpQDc5aixQVk0/P0gpbmZiPklHLHxbaFZeOWRDUEpraWsqKiIy''@;'; put 'put ''Pkl4K31zXyxrInw3KTEpfVlTfWkwJjM5RVhZeiFLbHlgOlN5WWpNMj1TRSpCUiZkOmU4TShbUnU9aUJJMEgmbWFNJmgkKz9qXSp8YlV4JnpTPUk4cCtePWIzQEBXaGRLK0hhTThPaGJEVmZoOiVHclYuTmclZjtvQ0U+ODxSOXh3YEZQMFhlRD83emBSdCgxaGgmen1KNzkvbmVrTGFBOUk8NjA8''@;'; put 'put ''JipVWWQyVGhbOTl0NTglYU5sLGJwN2dZIUZsTVFEOHIuXyVgbltZLzZpTDNxMi40RDdJXk08SyQuPCpPckNGPTpXM31vdT11JSQlWXlvfkwxTXAqO1UoNGlVU0E5cGVse3NXdGdVbUlySlt2WXg7OmV5akY0cnQqeUwyVy4yYWlCLDwxJlA9MG11Jik6d3JnM3xtbG12ZzkwPkwyM3N9ODE9OFk9''@;'; put 'put ''Q2lWNStsRSxsNWlDa1gmb05ePTtZPExyX15Ha01QQGRtLDIoQzB5eiFWdEQ4TCxRSjYkYFdKIWxNW05QfVRiPlleX0lhSzMySStBKXV9IXRab1cxd1g6eTRmeT0iMUAle3lWRn4kNGFDel40YCM5S3k9Z147PTI/WyV0PUBNTyRFW2Nhc0BbPSldbElRQlhyRzt6b0YiVi5AP1c7dntILiY5RSFR''@;'; put 'put ''NC47Zixfc3ZvRlZiWUc4PzBxeD8wRi5vLCwqbyxQTkxTaW5hZmdvNlVgRChKaUVQW0pZRVdbRCF6Rl50JlkjUU83KWtVI2t+dks4KGYqNShCYmxvUE5tRE9kLzYhMj1GVVh9Ol4+ezs5W3B+YEtAeD1ffFN9Tz0wQHReNWBsSVk3QjpCWUFHQXMlRHImL0J7Z31bJWI/IWZYM3xnSVhPIz1DKnx5''@;'; put 'put ''T3ZbVDs7fGQodzEhXXchXTJJXXdPSi5Mb3VjcjA0YylPYzxjRl1aRlB5R2Q3dGokOGNwe0k2WS42c0ddeFosXm1lS1FIYjd5T1h8eEUoeFZgYFVhezdLSSR2VGF3WW5pZDF1VVNHKXRodSxeMGMzSUNwOl5fJHhWOWRIL0pJUz1qS1RSMU5XQm1oX0BjRkNaJldUWn5KJlcwQmxzW3F+TStMUl03''@;'; put 'put ''czNsRmNEUDJQKj1JbjF2JWlGY3s7TV1bcSN1OyFSXUYsQilnIT9EeiZJY3JYcGh8dXp0aSE6eSRxSiF0WnJHV1dHb1sxKWQsRFM7WmdHM0dIRmcwTEsoejVMNndaVl09NmcwSjhtXng8ITZuOkE+emNHPXRhZkxLR1FUey5hTSpuJmJ0MkJrTFkxPX1xL3M/bE5lcVRINCpxTEc+WjFrNj5IQnNp''@;'; put 'put ''L3c/I0JPQVllVT46NTBHMklHZjJ3azNOM1d7MWd3Zj9Rbjd1QyooNk9fI0c6JUI1VCNhLHhIfD55R3heZzlsc1ZiRXtiI348OlBhfm0reTheSzU0SU1qP1p0M0xQP2VPWTZeK0NjZClCMV8oM3hTXWFmNnNSPkdFPCVXPFZNIyZnN1o7NTUyXjcrOmVMTFswRixmaCEmeDtgd1guYFQ0OkZQSjZG''@;'; put 'put ''RihMXSxNd3dQWnB1RklOdmBmLCtJRENkLykqNy9ZcC4wNmIzent1SzJqTXgwSXdgOXB4WE1BeGN0O2Y+WHN5VCZ0UGo7QVRybm5CRkB5Km54YEEyNXB9R20iR11DSGdfTEQpIkAvTkI6Vl1DO2t4RUt+TXYpJGB7eFNnOWNtMDQuWnB8SHZLS0tjUEYlMWR7STlEN2VUJFgwSF88W2YrajtzMnpH''@;'; put 'put ''UmNUY2NdKipmN3oyQXsmSzZ1STIwU2FKJm1fXU55Ly5BKkhmblA5cl5qZGhrcFo+MlBHSno3RGJjXXx6a3x8MDsuW3JwMENIcXZmfEgwZTwxemRpUTdDREk9OXlEenYmN1VDclldPnp6MVhoSE9qZmReIjRhXWN9Yjs3I1BiPTpObGwzWkRbUDlDZlt4dXF3MXNAb0xvLCwlanYwQHdZTVsmLC44''@;'; put 'put ''U3M3P1RiLCsrI3E/NnwpfCU1NmBHJnQpLk4lX0ZuSzxeemBPcChEaVRRSG81RWk2OWwhRG5aRiteIlVaSk11QDBVTjspSHFjcF9EYSRVfCVQWE9OKk0zfS4mZ2xDLjBRejtaMzNkK0RzOnFEeF0pJW9gbXRzP2pPTXhqXzNwe3YoVSssIUAuXikqb0s9eD8mJXA8Z3RaQF5RTyojdWhXRnglJVom''@;'; put 'put ''TEo/aGJATDdzcCF+VzNjRmZVKlJoXjpXKncleDA+WXU/bCNYZzcsY3t0a0I7SkwvNjFGR11Nd1Q6K2J2WXVFfXpDSUM7KGVFdkN3LG18Oyx3WnZhQ3twI0FsfXozbFptWGhwTU1gRDdsRyVZPSNuTUs9VVkocEBucCsqPTBicTo2TWBmV0dpRzB0a3VPJk9EeHN9IWJFcG9lTGRZInQxK3U5TDNL''@;'; put 'put ''LF4keGNtOFswRFtkRStxfFtJTX5JanB5dzI5c044QTokaWlfJE1fIUtdcDtjc3ckWWp4cXlQW2BGKll2QS8kLHJmI0R3Ymo6fmJGXk1HVC5iKFYmeDhkNE9XP19GTk9zPlZnVn1FfGhoMHdbeTp9UHhdd1BhTUcxKzQmZFJ6QC4rTH5kSXJ7JlRPSU1HLCFLYksqS1YsIVtXKEM3QnZaUVEzMzJa''@;'; put 'put ''K01fPmh1bSxtU2pHJEY3a21BYT89MVdEL0ZudEpFWWUlLlFmaSFJd10pJiVocSV3T0B7cXRRWmk0WE9vbWFsLHhSbEhnYl1nT29gLGc1KytvRk1HeW51fm1uYFZJSS52e1Rtc3ohNm5ab1ljUkguWzx2VSFHRT1jPHcjKCR0MnZ5I2A5WWlRaTlQUUA/PXxRaWpfM1YrK1smJW9KQGx1fGNTITV+''@;'; put 'put ''ez5FJUQpO101aDNJcVBvKWcjSXhjPFVCNC5wdVBpcT9FSlg7cEJtaXE/RVd6QyFyP2dqKUVQWkcpW3ZtenZ7dih+PHg/UkBzP3M2cE1SWDJvWlRiRiheTi9VR3phUiZNMmt6bWg3IlV9KUlGRDc7ajwqb3sjUjBXczwrKXk1OnRRV2c1UGM5VCF9S3JaRHBHMzRkRi4sPHQxKEFWUnJDeTUsLFhr''@;'; put 'put ''ZVdZPiV0PU1UUi5RU1MkcW1ASGY3YnFKcD5pcD1CMT9RWnB8aTo5cztGckV9KVE5bltCWX4zJjBGRml0SmdfJjFeRk0rKn1QZ10wdDhsU2V9fGFdbyYxV0NARHFaKk13R0gkSnB8SyohPTAlN1BNUmY4Njl0JWZpRXZ0a3VQT3JbO3d6PlFRLjEsRzQ2c1Z3cjtGXyMxTE9UTChdWkxTP3tKc2Zl''@;'; put 'put ''TXliWHdTK0Aub1s5c2IxQiUoQHlrQVt5XT9iVUR1JVYlQ2pSfjw4eGpaaDsxOXk/b30vKlNOVl8uPlQ8TXs0UEhpW0xpeHdnN3g6ZEQzUX17ZF1ZJX5RXSw6PWBRbVdAUiMzTnYwVUJYVGFgdSFjQXFJUnYrMElnY2ddNiV6LnpmW0hrSVJeeEUkPTpXdmtqW0ElVGhVN3JZZjUsTE5GSTVgcEJ6''@;'; put 'put ''PlJmMTplaj45cXFRSWMhPmRPSWtFalNVcHhRMF1scz8vV1UsOWErcWFwcXUxaEVxL1t2cVZoI1BHNTkjY2x3VlgqPmNxdUZSInd6THB8Z29GeyZZTzp4fCx7TD0idDp0SH47LD1+ckMicXcrVEZyTDV2W0xlPGU3XUM0TCxRWVFvO3V9WD8ranxfQU1xcjJvOnsxLmZxJil8PWIhKUUwOjZvQEdD''@;'; put 'put ''Z00qd0R9YiJQc0V3e35wKF9fbCldJHAjWVF3PyFeN2giIz5OPGRgMkk2OXUwMkk+O11qazg4Q2YpSD9lY2VvQlpfV1NgT1YkMHIpL3k0SipqZE80UkhaXnl5Yz8ucFlQe1k8JjF+SXtudk9oMC8hNExPJkh8OjhSM2EzLlVeVSpmezNVTUZffENKdnNUfkchfEpacnt8XzI8ezBMazVjRDlJMV12''@;'; put 'put ''WTYyOVJwR2xrUG85JCNiSV40Mjl9ZmV3RG1fMHgjRChAUHMhZ29xbSxQI3xJdkdxdW8pWzErSktMW0NMSW52ISRxNVBHeVBdcHc/IUtubDohU0pBd2NCKXwjZkpjLGZiaTNwdDZ4TTVYOzM5cjw+cnxCdUFKKGRaWHN6YEc/a1JVWz9nY2h9UkMjdFQjdHpTQiFdejZrQEBWSiQmbnh9XjhlTiVw''@;'; put 'put ''QzlxbVp9QjRKV2ZNUHpRO1YzMXhVNl9TPVZOPVZWcjgxOSYqYG5ubnhmc3JLSGA+cmI+aC5ubzB8PXhsRVBCJVdQJnRCU106VjRxSUAvcWNkNzMjeiQuZTA+Si5AXn1PMXN0eStqPz9MOylrKHAvQVtiOjtqWWhmQENsN3g8VnVMMSo1KlF6NmBscDJTd3hxO246aj9CfDo4Y0ZzZ3VeNF5JNiVW''@;'; put 'put ''MlM0PUpFNTRnRk8+IT5nOS9XTnoqWmp8LD5LTFNxMG1WW0F1WER0Qz1pVyFgI0ImcCZDfTZXUE5yP3M/OUNvYkFIPUMjKyVsRVUqN00uZSVafjhpQEA+Z1IzQHh9JT0zKzM1T0FlI1ImLig6aDgoT0R7ZCsoa2Bfb15KYGRFZ3xsXSlaezY2PmtSW0tidjp5aDk8d0deTXkkcGFweVYuTmA7d1dd''@;'; put 'put ''PmtSJCp2VU49WERQQHZUTnBnPzU8bzVeRSgpU1s2JH1FLmRaKGYpMjdVUWd+PEApKVI4RHFrX0MiVzt8ajlTckpGSm9TWkt0MzB2Yl8hYVNwQiZCPjlCemZIeVFDdj04KzxBYWk1aHlSWWlQRmNCeCp2LkpjZ2o9QThzYVheUDRnR3ZXaC42aml7WXokW3BFY2A/WTxOY2xsfjlZa2tlOylCRjos''@;'; put 'put ''NkAyPncpa0k9bVdBQm9heUdmZDlTbDJvODBiYVBvQV81flV3SzJ8WT1edXpnLi4sRjsuOEY7fCM+PDJVXj5gVjsjcC5oQjAxQD97blBFWmtmd2UkNzI4T2YwXyZsbzZKdE5baGUuPFFoOlt9Mjl1Jm5yOEgqUTlVLmRPVDcsdGFVJSxILmkkaHZgUWhuXXhAeFNwfi5lIl4yOXgmPEBPTnZLXX0v''@;'; put 'put ''O2dLPDtOblVGalQyKFFALHFTJWk2Qi9nTGFIZSFdd19oXzY2PCUiP1g4ejtAYX5VKnEwL2p+Zl9fSylPOnUsc0l9aGtlU1Q9PW1kPHp9VUwoUmBhR3w2clt7QHhyRTI0XTgsLDZDKUViWzNDVn46ez0vPEF8KmBJKUkyLDUsZHxPajk0Ljh6eSlePWNufGc2aj1Dfl52dyI9Q3I8cEV7Ml13VSpv''@;'; put 'put ''X1hHdjVeIiUwMEY7OztGfHFxOnBpQjkxMXllSltwaHVFfWZyeVhbMGQxa2dROk1QcntyIV9YTFlRPSModVc1T0tTQnROOW4+QlRpSGQ6TDBXfWJ+PCxYSyhgRDY/MCV+eklqZXgpWWl0ZjxXSTh1V3QlOj05Wkoyei4kLjhzUStnZzpdR0g9XTlRUyMvbjple197NGhDUCNdVV9FSFRAfl9Ab2pq''@;'; put 'put ''T1EzUWsmRUs7QjI4LHwsNHNpaGFiLHAvLkZkIjBFOk5nL11XeDcqTEZYZihPXTc6KlVTeD5FSm95NUssMzNsbFdqbzxqUyNyUTBUVWhZVjRWaFUlIV89MTczUU17bFYhamklRSlrVXNaOUFYO2l9Kz1hP1AlYjlaLGsmZyt6R0VVT21FfEg+cHRJOGdBeD0xVzpDd107Q3NDWEJmdWV1Li47eCN0''@;'; put 'put ''aTY2SnsqNVNwXiR7L3p0cnF9ITpvTkdISlcxdmtQSXNvRTkpeClfSVtTS11JNn1mRjZVR3w0bEBZJkVZNXZPbi9Adit2cU5RY3BGRXwyPn00LHc4S2lVd3wwajhhXSlAVSUjfmElK21sOG9jV2AsSFlNZTtsYiM9LjdrJG9jN3FlVnEqYS9KUUFKMGtAajtidHRTQCRJN3V8aVUhJGM5PGFAK31Z''@;'; put 'put ''Z1QldSZ3SnksaTVVc3lieSxzN01fJEBTJXZIdktRbi5qQns0aUdJQjEjOjRwJCV9UFNjblAzeWcmJmg3S0FQRiZCJjY1KEkpOyV6L3FCKXQ6ZHFsZTtZVEYzc1klSV8oVWlYXUM0THAlQDZfZD1tVXVXaCpANjVLOCtOOzE5b2U+NS4sPGZoMl51ZnFmQiZsezFePiw8cTs7eDIwQjk5MG1CXyEu''@;'; put 'put ''LiwsaWQoTEs4MX0lRSVBVkE5YyZnMmNHSW1jUUVGe2JgTjM9MDFMZ2lvSTF+cSYjIkg6XkI+YHE+PU89dHExW3ImLnt6fUxXeXdkJGs3e3pOUWR7ZCxvMkp8MiUyOVNwfm1uYWtKQj47QEl8ZHJdd3E3KktRUHYhLnFOXlNoQ2pDaixpLGN0Ol0uVDYlb0NlMVMyfiFNWyEpamoyZE90USU6dzJy''@;'; put 'put ''Z1ldLmVUMTUsYiEpRTE/X2V8JHwjMixYSWgmJm9kXy5lMlV2fGl+cmAhdHV1LH1+UWV4Lk46LlZ9MXVsW0x+eGlsYmtqVT0xYiVfIW8meHFOKzNdRD5mO2k1W1c7VGdEK19LbFR9SCxyUCxDQVV4fkFscDVwak9RM1lvZFpgM3xFeUtsbiNnc09UPG9TTWhKQVp+RnpTIkAlOXZeTX1WRUB6W3BJ''@;'; put 'put ''MGs7QllDS3lmYjtoKC5rcm1GUUxLPkNfJCQ0SHpwPkZlcyRnfS8+cUg/UkA1UzRQOVFVejt2RH0vPnA7OmRgdSszajkkSFcpJFlpPCo8ajpVc2hufTl3XyteZ3dLdTlBRS9tQn09QWdCMHcoO1IxUiZpN3g3QFZLWlY/PnxRNW9FVTtnKm99cnZ0NWxzN11nfk9rTlFXYDtYfWA+P3IvUFpCZ0lg''@;'; put 'put ''d3BMJFtAUWgxPUQ3O0NmfTNsK2BpIjNpTEpvUzN4PGZCU0BJbzU5I0MiU2hXJF9fLmxzSjhaRnx1NSo3ZGNJW0heVzNCamleWSUzPW9DOkowTywoOnNvNCpgMXxUMml1Q0dfL2BfLDtpRFtTUmsvSi9eYlsuIUd+ZT0mV15EcF5VZChKZHg9I1RkOkg6cWh3JXBRWEVNSW96RlojKHFBb3o/dmgr''@;'; put 'put ''e1h8e3w/djldVzpXUE5Kb3x9fEVke15dWFZ3aXRbe0BbZlBMSjoqb2xqTF5Wfm5HPlJSei5qRzRjJlEzVUQ2ZWliW0Aobn0jZD9gcSN0XzxVbFYlT1IjSTllSnUjMFpJSj4vPkBqTVIvYXFrOCh1Kl4sUX5YJTY5cFE+Ozd3ZDpfMTMxRUZ0NjxSXVJzUjJvbFB0XVVkNzY9Uzh6JGI2V1ZSPz8i''@;'; put 'put ''X3QvWXNrPjdXMmd1M3IhcjZZQjhDcUxxZXg3PWxlXXg3aCwsWHhzSGojbEV7QC9eI0BCKHx8PzNadHUoM2dScytNYD9xUnp7eCxlaGpvb0xbZ1IzMVhrd2YpcDU9WnRzeFs2e1FfaFEzXl1QdmtLVT4pYl1rRS9LKkJTekVYQm5XflQ8bT9IOVA7dC5fWGUoQ2dzJENZemkrYClpQjgoekx8JD0+''@;'; put 'put ''LkYpKnsvIUpzRkoxNF13TTJlJXkzQU4hdXg8VjIsNFJbUUg3NTVNe1AlZ288MCJ6Oiw4OTZFSk85O0s7LzlDcU17b0NwLD5iI0BEc1I9Xj19MmpSdyFMI3dDYUU5YW9qNG1POjRdRUBSPTtld1YhOzxlNnwkQSxJI0dHZX1WcCplcTxKJGwzKnwhS1cwWmMhIjJaQjJbV1pvP34hPW1FM3FWVEho''@;'; put 'put ''KnkoVGpbOXBFfDtKWGxQeCs8WToiL0kjWDFqOkk0K0EzXitXX2YsZmI7ZWo8YCp8YWNwdWt8TWdnNGcqLD09ZWhuNl9dbX1EIWIrUyE9IUpRcV5gOjNhaUczVyxaITleNzA1PWRGUCN9TDZHPV84WEpgWTVtKmRrXlpIXi5yb3U5OiF1R0A7T0EmNjloWWRJLixQNUIwbXF7YUljLnhRaSVve35W''@;'; put 'put ''MFprQCNUYTR5V3pCLi47eGlRUXR1Z3kxZ340UTJMYlVjZzd7YFYyenlxY2NaTC5GXVMyUlsrZ05zRiVkRS5HJFViY0osKTVhdTk+M2pANz1CQXozNk90VWBsLl87TkJjeDc6ZT47QCw1Szsub2AwfDE8clJnUk41MmJwdTZCMG0hSzBtMz9OMz4xRE9UJlNNOXM5PnRsYnxJOEl0JlpHY3cra2B+''@;'; put 'put ''SFV3WEgmIlVBTy8xJVhCcUc3NjRVWl4wQXk1e197SUovTVZXVk9Gb0ZsdXlTTlNOJnlscUU1I0pyJnY7Yz5xeE8wVV1JTGpJY3ZgLis4c09mZnk2WVhxMmozZl5aMmZfNXwxUEZSSyFzaip6Zko8SlhmV0p7fUAsKDAwUUtBOk5MRHpyPjZ+NX54WkV7PU1aYk8hJGF6RVpQNCxHZipzS0Y6LFlV''@;'; put 'put ''RyMuSEYxPVR8YyEsdyV9SWt1Q0NJQXd3UCF4TXBfbyh1RX1iQHtQTFlxUlJjcDNOQzMzcVppb3klZXB+JiUmQUd4aHMkVVJbQEFUQm99SSVUUWpuQkAuPXI9OyErVV1DTGkwOCRjeiZqbEFPakA4NEJ6QVlUQXAxKEIqaGspUncsSDFQN251R1Q6dkZvQTNYNWpQNmx6QlpvemZIblI5KllBQUFB''@;'; put 'put ''QUFBQUFBQWxGOXhWTVBqWzxJeiEqcSY3Ky9gLi9sVTpaJTpZPmVvRVNweGZuaHBPdFZVRWNXTFY4K2x7I1BnWUpWcWRJPGtEY0JlW2h5dWJlOUoyJFNhaTReTyhjK2F4aXNLaSk6aD8iRyhOSl9ieW5sfkI2bVpLXkJTdldfLGs9bnF6fXBIWTtiLnlUP2NkOER8PiNHVHk4elpQZi5EYDUvcnIl''@;'; put 'put ''JFRkNUlxTzY9TTguOD5fa20/KmksOiJkZFdnaGpMXWV2SHk7azFBVikjVyRaYHpvYCEwQmBPbmR0bUE3e2pdbFo3WVlHZ2RjRW9tYmZvJkhdSW9GZ04pQiJWOU5za3RJKVZEc3A6MWZgd2VjWCZEPEBhImFKRzt7P0l7d2IiLEk3MjFoUEBVSzRtJSQ0czU3c1gzcjJHU3tNZSI6VWwpNiQ4Qz9F''@;'; put 'put ''I2hWU0xQelpWZzZDXTArQTg2WkdUd1QycnVIYU1RfDk1dygyX0wzYXp7eE4oLmFkWS9hIU46OkNhbSsoYj86TCN6X1MuYFBKQGNDMj9nWTN9dnxXX05tZis+aEciKnNKYGZ6RnIvQllmXXNyRjkheSF3XzJ7IXBdTnc2R2c4PUhJIV9pVU9eM3YoQWo9Llp2OSUkWkNHSzRyLFpFa3ErTCpCaUE+''@;'; put 'put ''aW1pTjMjd2QvWGRENjIka11eUz5CWUM7WU5PLEUuWXZLQzUwbFhkNTVuNiw6bTx9RnI7OCw1dmBRKlEpc09BbFI5bmI3YGFebEgmR1h2Nz1MeCpMZlt9LHArc3w0VDA/Z34wbT1PUyV+ezIsJTdpPlAvNk5yZDB8XWgrNHMiT2l8N2hWNGY0bkxZUjV3c2xhTC9fdGY8QygpalZJcSFHK3BwenEp''@;'; put 'put ''bC9IR0tZUn4uajs+ZFlFXXgxR0NlYFglKHlLO2okS0wxeyYoTmR4Z0RnNjhGNT1URDpDY208PnhvKlJXK3o4UnBYeihvLkkxKD1hYkI1QE1aP34pJF85L1RkdkR+U0o9fkZPRCRafkVabG8uT0J9JnsoQEplSnZISjZHOHFbMUxHe21jfX08XihIIW1mQWtmeyZyaz1qSFBVS3x+fFJ7cFV3K2B2''@;'; put 'put ''Wjc7XSRySUZebSJoWX1kM2JHViZfZWEkcW90LmpscXAzVSgzfTZKbmkjTFJTNlZwZShSW0MhcERzZjYwWjt0b2l3KShmPy4qK18uNnApfHR7enpYOFFLPyxlNEh7SG1TI0Bdb08pPjBtRz02Ol13SWd4P1VlJmRxYisiNHJUdDk1OkB4RHd9cSE6YHAuPkdAQkJ3I3shRWpSaWVEOEQ1PGVDJXhw''@;'; put 'put ''SkowdjVRbnw0InUvRWI5QiJ7T3tER0MoPyJMVWc3OFFySTJUfkw6bEdDWWBkajchfGtNMExrMSpiS0puWzx8dU5MQm9ZcnRAU1sma0x8RVRtQEc2aEViQDNpTj06JU1wMmN4JlVtN086WUJVQiYqJVVFQilfeTtqST9VJFIyRjNkPlV0eSMydT9wJkB8Lm47UXVVdmZGQEdLZGFqMko4cCF1fHJG''@;'; put 'put ''azY4TGAwQXxJTU1ofXpPcShGLj17L3BXYVpfUihzN0k1Jj10PVh+fXI0UmJ2VnpPWW8rLj5KRGIyYlEqUD5xLjwqInVvOmJiUDMiU1BXKm9FUiVEdnshdFg6bSJPS3ZXOWBlclZYP2p+VTYrfitLS2kyWlV6PmsuOSY2bmBge01KRSQwOy5BOylLKnVXSFApVCxJM3lIU2xoMlFiLiEqW3VgVnlw''@;'; put 'put ''ITUrNDxqbTlCMyRaS1tnSEshWCNKJFVfeSxyTmF5YWM2UWtRUitUMzVlJlQrdj9WOVRfOjdOUzZFV1deQnN6MWVjJk1hRiQwV18mdnd5Y0M2aEM/SW0sZDw2KW02b2hkXy5XN1VGXU8ia1coNlNNTj5WUTQ0cng4cW0xYSwve31AeCRfL3Q7Jl1ScVQ3dCs4dnJwP0hteTxAZ3NdcSlMWnNreSti''@;'; put 'put ''UjxbP2gqLyxrZyVwcWd2UzwvRGZdbitsdEJWTC9uSH5UM29rM1RqRn4jNlEpMDNRcW4yJEs8I0t5aTVNak5vR1JPRFM7SGxwe0QoNyE+W1Zydyg/WS4qWylGZzpPPEUuWzlJanF1RHheR0k2NlEoJFs3bl5QaiFefW5OTXY1KW50bCJOQEddMDFMaF55V0l3PG0pW3laIjRIMCo6Y3lhZHh+bGZU''@;'; put 'put ''W2FyZVltN09wT0paImV9W1JyU1dwWmB2KGFoOUY1TVldX1FlQ3BFN0xna1l3ZC5xUWw3YjpyMigsR2w7LH5bW2RsWjpYJE4lX0BLLDdkRFB2VEhwe3R8VjZLKFtTey5YSkR4TXpbPTNJbSNGWiRjKkR3c3MlaEgvL1EyWkVoKUY2M3deM3p2L3QuNDE+c0JbdUApMzRMPiNQO3YoS297YXNmQExV''@;'; put 'put ''VHM4QHNEaix5MkdOeEpbLzlGKGx7KX4xaVhvbm8lWSltMVpzcFJEU2s5dCZQSihKTk91cEU3NnBXOV89Ry5JWk1AYlR7MyN4UmtQMW5hcUwhUnBlS2V8eDtFaSZbdEd9Qz9OR092UnhvUmMiaGZrUiVLbzAvRE9eSlpdNGxObTB7ODYmVz47eS51UVcqWzUsXW0jfnprbSY+ZmdkUVMuVDVxU0Z7''@;'; put 'put ''cCFySz53PjQybTRTeSNqdUB9Vkgjdk9Yeld2M05WNSp7bWJmRCgoWDFvZE86JXtXPnVEdjxjIX11VnssJmlTZjxYZkVeVj4meilKbClvaSJpdE1+dWUqKXZWfj1CO1VNdHMldnpQYVQkQkNqTns0O1dAWnVRUV9jR19yWUMiKnJQb2hESEdUPGQmN11TP1Z5Y25fbEovflZ6OnlEV2RTUn1Bc1VG''@;'; put 'put ''WD5VVDhfOW57e3BYTzd+d01HbjA9TURebGhwR3pkZDQoVHFEKCxgV0gqS3dhO1VybWhCJmEkSDwqMFpfLFh2ZUg+a05WUSRHIVUhWDwhRUBWcyR+XixUaUFWXVtxOllCSlZSOW5VXls1KUZIRigsZClOXyM8Rng3QXdyZH4oWk9KKC5VPVJsL081Z3QwXSx0RGIvMCh1akxQQD9HSCpkUyZpe0dw''@;'; put 'put ''cEZSQyspOWlWOSIqVWtiTk1gRCwhQSNeM1pAR2dWOF9GOVhfUC5fPUo3TDkkQyheSXBYYyZlVExLOkhpU0ZGeEdQU15mK1I4aF91PmNDKUolSVt+UVQ3K3E2P0FISS5POCIzNjhyZk0/ayNLcmdPI1k/TCsiXiRVfm9dKFdkWHcuNlN0YXx1NmtyM1EzcGFERkhlekI+e3BIUkJad2NOQCxke2le''@;'; put 'put ''RGU/MjljQUdgP19ldVlNZW5MM3IiNmdPZD53XmxQMTdnKS5mbSYyTUFmQ0JYc3gzPmNnK3E0XmExdVphWSw6bTVlKW5JJX5eKVE2bSRdMjQyX2NrNikkSVVIbk9LUiV6R0NWRld3SzdqKDg/Jmlba3QrdklvUyg5M1I8QzxDdkUiKHRbKVBILipeNDJ6V19XOUI7YzR+K3FOcihtd2FaXiFCPj45''@;'; put 'put ''JXI3NX49JD4iX1khVjokQTd9LHk2YEZIUCRTIzFgSnhUUEtFLGFnI1N4bHkqSlZEYH5eO1FQVSRiUkcsQm57YjlBQFFnQV1WIz98fSFlbnpCND1CMmBFUi9QLzs+QlciRTpZJXVMOnt5eFpiIzA5XyZTMTQhdGkyaG5kYlp2SFF4Mz54V1F+SEUoNVIxO1JpYlt5KUwye3tSN1lJU3gqQXk3LyxG''@;'; put 'put ''O1AyPkZlez4vKFFeNCUiP3JWa0xmdkhtLFNSQlNZWkpQUHpib3hraGklWllLZSx3OEg1JEhTJU91JEspMTI+JEBkcmFsWXNSQE8yd3BCaXM/eCpsYWdsbF8zdjw0KW4rfWNvaTRGXSl+NjR3XSJmPWZ+cDRMWDJxNCZwYjckdX4yU2MmcSsyYClaRGxvcSN5Z0o6Jk4vJSQhQlkmYk9+PX5sOXBa''@;'; put 'put ''LytMKmt2W0JeflppXSNZRix7ZCEkYGsoMEBZNGB6TTBjdmRKemFPZnR0LnpoQDJ3cDFSb1hRdjg7aHBDcFMmcHVAd201enNVKUZ5bWRuMGIzQWV4VWs7Qlc1S2VGSHZ8VnR4IitWXUpZbkM1Q0FWQiZqb1ZmRCFoWntISyFGdFcvISVFbWRPNEtUP2JGWjE6UElZVzcySCY+eTBmOD93JixBaT5U''@;'; put 'put ''WDtufWFEPSZdM1tvPEM/PX5ke3E8RkV1QXJKLH4xYW9XITVmQyFpWCNVKyRlYSE2dHRfRDVJbUE1azU9XXUhYlNVfDpiSDRGMTdLWmA8KnU7SDwqKmpSLyoye21bXm41SURlLzNMeHc1fTxzaV8wTkh+czdsOTdqdV1VY3d9U01YY01lJX15JDdFUmhWfHdgRCpxQXNSYm9FWE9ZRkpnR2Z4bGlB''@;'; put 'put ''N0U4TGQ6RGs/dWNkRXpLOVBnfSNhKWttPXdBPShNOTtmeG9baFM7Zi9WS3hJcEg8MVtodnpGemJTYXJhPWpVOHg+NnA2Z1VtU3RoMklFOlYsLj5OVCtsSU81fF1pT2I9P0M5MCMzN3NjZyhSZF8mMjdlTDxoblhMIWRiQUw9czxLK0g8cVV7dFp0NTwvaDdBIkVQSXx8SCEocmgyP1JkcGN0LEB6''@;'; put 'put ''RlVxOUw7MDYoQntjUUJzfllQei8mUTpXImhPME10Kz1QYVZycSlsIlJmPU9JITJ3K2gmbXNTZ0hNKVZXKWAwcjNaVW4wOkh4ZF0+ZlYhRFgvTnUzeD8rQDApOmNhLF9sVEs8X3h4dDJVRVU5QDdGemkjOWZrL1NVO0hyX0AlUmQpTSthWzIuQHZFcH5vJD8xX3RfMHYwa1NeViF5VGE8JWh1aDl8''@;'; put 'put ''KlV8ek9zSEZZZlkmdXtzLHZSOExDRllMTmFfIkc+cEtuZV8rPCU3Wi5pRWN9PG5TWGAlMEBeUHlAZnhmK09kanleeSZJWFlTYX1HTXpPX30udWNUISklX0ZDPkxmZkxwNCtUa1FaclZkYC8zdjJvQTZ+JkhXTEVWN3huMyZCPVA1XmF1My47M2d1PkZUQTMmNkRHSHByZ0FpKDlDZzA+KVpmMFNr''@;'; put 'put ''RkciLnFyOG9LTj00bFp5ankoPz91eTB5VVFSTFM7Rn1aR3kpPmtNVkI0X1tlIT0leXAhdnx8XnZkVkdfV208fTZGOy5lL0FQOF0vRVcpKXcqNGhRIihkMyU8QTRLTTEiRkIlU1J0Kj5zeXJMX2s7ZGpPTWorVDBwUXomKnBtIktSZCwoakJfMyUhfC9LR0pUOGo+JkNhZU5ZVmpFLHdTaUFUPklL''@;'; put 'put ''YDljM2x7QTtKeD1kUWlKaV40fjFzTCFBa2k8I3piWVI+QEFnMDU2eVJtNHdqWyFVeysyQ2ZtSGNlKFl4Xn5Hb2xBYnA0R0IoeFc9VUt7R3s6Wil8MHVdKlp1fllsJng+ISIoeHAhe1lvcWJZRD4iNSRNPTA0Xl0hXWtaUzwsVixqdyZfcnJeIixadER0Wj0wJFEqTCMlWFArdW9XPjcvXXlzd1U7''@;'; put 'put ''eEcmMW4pQXtjbC8xNFZoRD93SWhEOToqMm5rPFQ3bFMvOnZBdyFMemRqJU81filxa1NZIlN2OVBpRCptdkduekN3U1M0cDZ9WURNekdlTz5iQ3pYTzQ/RnJqNGdDNCk6OHAmfDQ2X0dqaEh2OGlPJlFfZX12Xk9VIXtzLDdVYnpGcmY/IXFma24uIlUwNEckKzVdMVdwfTc8aWomcU8mYThfcnor''@;'; put 'put ''OUNHRz9+KXt1LmI9Zj5tVV0lWGQyQn1STFdxZ2V3ZyhNQzQ7QTpgZTBibjxva2g7JWF8PE17IW58Jj9wLH0lblRSamlXLiIjVXwsRFdFaEE3SDtgezA1KShgNG9ZJXhuYG5pSElHaStfVkRkQD1TQWJpZkpgfSkjeCVodXk0I2tAUVNKKnhxdV1wRmBuMjdgKlg8NCI2XUhZbSFURms2UWk9az5p''@;'; put 'put ''UD5XPEF7LlAoRVNZe1EuVyhIb2EwV3xrbjI8VCFLZC92aH08OGp9aFFPIT9CPFg4e2pLYz5NZWBwcXhkQlQhV0VhX2NASUgsdmh3cEU5X0g9OF93cFNAeHtqPy9bY2kjWm1DOy5RJG8lan0sfXZDW1RjQF8+Y1R6UWszaSxmLEsjfV1vRGk7cVJRRG44SyM2ME5zak1VMj5qVTF5ampQUDlIYV90''@;'; put 'put ''cit6bDVqcFh4R040SEEweUFPP1NyWl1qPUA/PjlgTXI7bWJuLnxjN2AicCxtVTtae1tNInwqWmheeGdVJnNMbD1KITgrKUQmMU12RURyK2RFPkJXKlUjIzBEYFBCPV55UWUwKE1xSnFsM0JMMU54fHFAN0RqIkV1U1U6ZFpBenVMeiR5SnZpNl9fLkUsPT8lYjw4ZnJVSkxfIjxRV3I7WVN9JmlC''@;'; put 'put ''P3pYWlZVTHI4Pn1vbEMrNkM6RFtDa1tKe2l8KEFrJm43KlcjQFsyOVRWflZyZUs9UT5oQXxrXW9VOEtmZVAhdEl0e0AsMzxlOFAvO1A7NHlBLmMybD5reTAzJEZPezlfcUsxc3xwazVXX2ZiZTw0XTd6amVrSk4rbUopSUl2YmdEa1haWWNfVTRZKW5dcj81e3hKaUJnfitePVZvVDRyejZJZD41''@;'; put 'put ''XlhiQTRrWihIS0klZCM2UkA/Knw2azB7cHhlfGIyR1QlTT84ZT9OPz1BWStYenFnWixbRD8vcXBfczYzbzwvKE5IaTRgRWpVR21RcUQmTTZsLHx8LyQ7YlZfPTQ2Ql5QLi8ucjYrQXxRQExVWVcuUm5BTjh1c3NvYihvcjx2cEk2WDJuaSQvXUpAfkRudzVXIVJCPkt5Oz5xZmIsd1BjNUImVChP''@;'; put 'put ''IUllTlU3OnciYzZlPzN+QmZCQig9LlQqZ3Z8eTh7JlNvMXluV3R8U3t2PlklfmNeK3Z7IUhUTzFFKG88QkI6ayxhO3lSXjJyOU1LdEEjUGZvY2BfPD9WYWA+RVF8b1oveE94UDI8PnI0OyF4ZE5KPyk3VSJKLFAjInxwa3dvZWElSVFIdCo5amkoZlNpVCU+cTlyd0UwNFNpdzJHcnxmazxSUGwq''@;'; put 'put ''aXpYUmNqdiEub1VjPVdEKl03UT5dVTJfdklaclRbPXZTLDFTMCFzYEhtNUZHclBISy5FXnwkckYlSi54VXtPUmk7WVtnc1FAKiFTcV9ST1EsX2F4IjRgQyhoIzt7fSx+YyZ0X1NnSzpiQnwhQiwjcndYWmdRSU5XXj5Helh5VWFbPyRWVzN0dEYqMWJUcmpzNUVxeTw9YlI4LywqZE9JJSt1ZTJF''@;'; put 'put ''L0A7PGh9ZHl6RzkmbFUyeWI5SGk2WzZfLzVVITttTTlNWGw7REZeZkpJe30ha2l6a2NtWVM+MGFOcyRCX2paIU16KzttJmZpPEpsPkgrYSpdWGRJIzNDeEQzOTpnOV94I0xma0lhXjNAWUtLY1hbQTchVmlhI2g8RHB0P0YoTzQmfWg2OmQwVFZFW3c3Z3IhSTBuNC5tLyxHUk1IQltWeChvRiRI''@;'; put 'put ''Jjdxa0x0dC9wQlhrenhALnUvWnIrezA2PWEpI154O0JBZn4yZk5gRilPUkc4KnBYaHRgWU9tXk9aeCp0QjtAPXJhajVrZ3BCbXIoRlltRy9SKyliQjckZkgwIi4wK0thdmF9fnxTKXd6WlJON1RXQHtTbHp7cXhFYz0oK3Aiaip+biRYW3tQby5rNE5Se2lZTjwkVld2PyRrSWlgaipUWEM2dWIs''@;'; put 'put ''NkltY0dpJmJvL3dOO1Z2OFdTSGphakw/TipkYWQrZlNecjR0blhNcW5IbUxnVG00Wy8yLylWVihpO19pb2p3R0BIInYxMXJgYm9iXThaOHtXRFRSMz4kRngydnUzUlRYMW4odEtMfXt6IV9ZSTFPOypDK21hXj15WiRxRUk3QisuIyF9bkFYajs+dWJoJilETlRSSVI+QSE7dCsvYytPOn1VNnVF''@;'; put 'put ''VlVAUnRPX3N1YXBpS3Rabiw9ZV0udFlBUnRmN2ZeM1kuPFo4K2VWNH48I3hpcUZKSFlONz4hdmRXYGJKQEteOF43d00zVzViS1o+cD0yaD4pJElyd2NWZl9AUStaSDpaY0BNZGA4d2Y8fHchLD1RYmM1SFQxKSxJRj5bSltyJFhVZ3dxQiN2OGN3ST5lVTQzXkZrO3RUQk90KHw5I2g7WGokMEtW''@;'; put 'put ''L19nQ0Z9a05aaigvVShGQFtmODg8YiJ2JjZ3dzNZPEY8UCVXV3duOSZPX0dYKCtlS09mNDRNPHAyIm8ma1BWNThdUW4yPldVckp5XlNVdHAqI3NFblJQXlFwW0dBRnpDdl8ucz1jUFZQcFYzVWdbOnhnO0h4RVlBdSs3M2k0Vnw1PTledmEmVyguUXpRO1Umejw9Sy5heT9+JF8oalo5fmx4cUsq''@;'; put 'put ''dzV8cV59YWpUZUY9eTpKJHNwU359eyNXZj5YV3huXX05R2o6fm0pLFU1K2V5bjomfCtyYjY8Ql1dVSxqbWptdjQjQCtbP1UjN2dqRDJeTlczeEQzRCVYfHNYbHgjXzg1Lyl5TFt0Rkg5Ij5ubCRjVEA2cC52fDg8NS4rYjc7OWZvNXhuLl1VOlEpfS44aFJePDtoKyZwcyg5eFdgQzVzLC87QTVw''@;'; put 'put ''VllAJS5QMi8lMHRIRjlncUFpZ0VmQih4dU9mZU9kdzoiRFdYKlFfOmojYFE/TVJrRW0lanZqOkUrc3tualc+UF14Qm4ha0o1Z05+ZGVkKU1TfjdsNW44Pzw7SUpqal1vc2A0KlF2PV5RRUokISp+XV4zJVR6KXsoRHV4P2ZYdlFSfXE7W2hNYHh0JVJYM1dsMXA1eDh0VWklVT5UIi56X2doZjde''@;'; put 'put ''V0hoVWdSLCFyMXxxV1J9PykoaVAoPFVMP2FzbDVIIkN2Z0JmeFczcCtiJntgWUcjajhNMj1UTld7aF5NTypgeEBtLi9pa0dpQysrKmsvOXdAZHc5cCN0XSl9Vl1YLEhaNDA2OUxMU2dkMG8vam5VJF9zTi9PSF1PP3JOdGNTKC9bdlR3TWZed3Epa019IjRhc141OTdgYUFiPmx3PzFlUl82PnZD''@;'; put 'put ''aj1DWkUsTTx6NDtGfHRHRihrJUx6O1p4NnpmJT9oY113U1J4OmV0NSNWUXBqUzxqbSZkKFNoSUdhXlYvNixGNmMxN09qL1lwO2Y3dGhzNzhheTAodFJALksxZXdKPUZRJVkpRG91OW8mbDEhRkhNeDdINS9fci48fEZtPF4oczFPVzdTaCQrR0RNY00hdGo8IWdCWkhHbz1MVlorZXRhMEFdJE92''@;'; put 'put ''ezNhNV4ucTxRPj9kMm1nNWRzeT40e2FvX04me2NLKWdscykzYjBxIUg7I01wRUx9cmpRZWFPcFsvNzhJfWshVm9YNnw4SjUhWUBSUyFWSkZjTylHR1FoKHxMb3JPIlt6TT9pKGhLKG8lcDhiXUc5V0J1X2ZxVjwvT2c0TDNCeyJwMX5kOmRFcWtXVEZec1FvKChYQnIrWyUoRXx1JStQV1giPzsi''@;'; put 'put ''aFtHcC45dUhAeDsobjpTPVheLFBPSm1sdHx9bS8+O2EhUHBqSHtQJV1hezgzfUh8KTU0c3AuUUosTmkzditEMH0sLy52b35qZHFEaEpQO2ZqZiI3W1FLaXpOWEdMUyFPRnNJcXEmRHdBWmNMQk9gT0pTfUJdWXxCbExqKjBnNWI0JUY4fixATHdlKTpaTDhdZHYiY05hLDM1ZT1mK2pLSE9AfXQm''@;'; put 'put ''QDVYPiR4ZHxjQzdMdWt+bDprOSgiOHhgVVFDV2VPW1dmJlNDOCswRCpvQEE/dS5AXiFHUEAsdD40fUAzRTQxbC8hMHt+TjxPZGg8VnBdQSlWX29dL11LM1c4fGdhPChbeiVVfiJaWl8wQjQqRXV9OGdGQjt5dXtqejtoNT07WGJKflhBTDNZJXZyLGZ0QS42OV86NjJQQi9NN11zSEoxQFsyXnl1''@;'; put 'put ''cjB8K1J0WUslWUAqc0VqYTM5R2sse0IzYmJqdSljfGo/bl1jUD07cGZdYCN0QyZVYyU7XnhkKWReX0x8eFc8e21WVltCezB2THZ2aEAjPV51MUVVMkV9LCJrTGxzP0E2MEpuZW16d3k1fmZsdTtjakxaQWJQKG1PYlBaMEBNe1pBTCNvbm9JMnwhUEpWa2swNX5bIjhRYlRkUCtFRz5VVkAzM2Ex''@;'; put 'put ''OThjK1lnbG16UVh4TUZyPHBlfksuUiRlTHEmK3wsRHtIbV8vKCtQXTpaNSEvWixAVTpIYWc2R2R+VntlTT8vPH0uZTlIQ29XVSxOV2V8ZXk2fEp8In0kciQpMSFHXVlvLEBNRGJodDsiQkIiJkVdU2Y8Vj9pIjx0XV1iPGFZITxfcVByNTgsI2RjdlM1Uk9hdT1BL2o4SnQkbHhCNXhlcnc1U2p1''@;'; put 'put ''VEpXIzpFaXhWdT5PSVUlLzpDK1UoNmVZZ1o7VHFNXj4hZHByXTNDQCREOTZ2Y1R8Q11fPW0mOEM/TVslZGhbY2xoYyxrYE17U1JDKyozPkY7MmJ6fTRRYCMwPTtgLjF6d2VXYH13PUp8fXJzK0kvaE56XkN6ZVtHKStwKTp1WiFCPDJXaTsxNGtBQlMlfStVRzphPksmQmZ4RHgqd21LM3t1LlFM''@;'; put 'put ''NjQofFlONjZFL1kqUjFpeTEqQix3YEc6QS5oZHlUanh6W3IjNyxKTz9uZXUvMn4qcC9oPFpmTko1K0Q9XiJQMT9GRDdyM3M7cW16Q3JYcSp8YmB2NFhec2M/UldFUVhPcDN7UURXY11kbThtMSxYISUpY180Vm4rdDElfnt2JDgmWG9eWT16KT16ZWRWQWVLJVhdPHNeQHZJb2pYcmZ+TWVdM2RF''@;'; put 'put ''fVA6enpTU3QkInIwNSV9VXFffCtUdmM4NiZQSmxTOXJ7P0lqKCNRVXtpTl9sb019TDw0ezt1JTRlSkpkNS9LIWEoN2xWdU8rRT18UGd7elhUODRCb25AOTM+emUhbkFBQmRSUTpQdElrMHxmezRFSExFcD1EUHMkd3tkLD1Gcn50JXFjTiQzbG45YnchQkJyIWh9RlhTNChvNXRmL2FuUWVSSFIh''@;'; put 'put ''OVllTGVWRlZIe2JuRjlqcj58bHB3JFhZUHlNfiUiXloqTExteytvJE5YOCVyTCZmSXRDdT1yYE5HIlVNOzw6W3dmQ3NkZG5rY2JaaHkyKmYseV1iPGl2dmpXI2tZN0VHOVQ6SHxHWlJKUiU0eXJLRl1AX2hXOWZ4ImoleilTdUlsTmgifVZgZHc/MCoyS1l1b0RXekQvSCwyeSNye218MS9SVnUs''@;'; put 'put ''ezpNJTFLPl9rbSFIdChrL1AzL0Y9dENCU3IsM25lPGJ8UTFRO1VXMV53MG8mWWY1eldwKntheWxqfXMmbzU0N0dYUmBBQ15RLy44cTBZfFNXaUV9fnJ2cDFWc0pEYXA/aXEoeFV1W2wha2NqS0c3QV1XfkhAa1MwPjFqb3RhTkAzbExZa0xDKXpvSkd8VTZ6VHxDRkVkWml7MyxfWmZNQF46QHhj''@;'; put 'put ''JmdUN1pMR25IUy8pUDMkbFUrM288c0Njc0VaK0U9YFFjRzEoLDc7ZFZNeFQjUU5mQFlIWzUiNHtxNnVNKHdnXipJZFd2UEpHR3IpeFlTSE1+MCIuQ007KFhdb1F6RFJMe1VeRFY7Y3ZYSCw2I0A1KERVZSg1MitgWFglYWE2PDFbPEw+LGc+TSM4VHYodVQqKyp2UVBofikzUCh7fVpVekgmdGFJ''@;'; put 'put ''X3dGQldTKzpDQmxRPF1meU0wUmF5InglbnR0WFY7PGI4MFkkNig7cm1ZYW9YS0xSIVthd01lOjopM3ZVblNxUSp5UmZaI2RVZC56VHBoUH5fMlNYYVUja0xoT2gjXTJbOCtTajhQMEhUXzVKSE55WTIxYUNufClqS1k/I2tdQS5AYD1ydyRSL1RHQ1ohLjR8Nj53dEFjNElBZTZqe2toQmdEKWBx''@;'; put 'put ''UWppUWZkezhlRE8oMFt7WW1QeXMsVlpyPS88R0Uxb01zclkocX5LaWxwfFIyOStLb0xFRChHKSVLdiEsRk1Ld0QreDpqOW8lO0VDOHY2Nn0yckNIMzsofH1GaWdFO0FPX1ljUWJlISZJQiVaJW98MFkiMnxkI2NtZHg6PWh9YmklcDVPTzF0Kz9ZOVFUTlJPSSFudTplU1F0LF0rZnk5QWYwWlc5''@;'; put 'put ''KmpIc0o/WmFWc0QjfXF0IS85K3BEOk9ZU0REW1tmIVNAZ1RlMm9teV9aTXZtLDg0biFgZ2YufFdIU35PbGlTKW57dmNwIUozMFReP2BxIWZoPypHVmVqTz50KztJakllemxjUlZvOShAcEYmMkUlQ0JGMDxZRTVsQTA9S1Q1SFBwTngqVDF0Qlh4bj4pPyVEbFg1U1RwWjRCUGZ9ejI/e2hXSXs4''@;'; put 'put ''IW5DTUkxUlVtVUZSNjVXMGE9LEJMKnZdUFFwOCpKT1NsXltQI0ZwSU0mOihLP2M6SnI4Mzk+a2M/ZCFQPUtLQlcpWG1OOkhiViorTyRyLm5pQUgpJXZjRyxxWTNFbVV6Jk9tI0VBMXIjKCZjSFVgVkJ1Ml0+U0VQYiRZQSRXM1tFPDkpKGhkVEYuITYjNjlbcylLOyZ9VDxzfE8qfVN7TkU2Rjkz''@;'; put 'put ''L0UvRjA6fFIzb0lCVWVBP31jKXdVSWMmW3kwNHlHeElPZHdsV2xAW11lV09PTElhKTB7TU58bjZdSSVBfXx9YEVJYE0yXWVEMzxgeXdSbnpkQWVAcVV5VjxNdEtJUHQoWWBsenluPTciKEhaTSlgeWhtfHhXfSVaL317X3dXUi9CM08jb3krLmFOVi9sKmwleDFiPnJoWEx8MmBzWnssTk50SGc4''@;'; put 'put ''bmpfPzx4ciFISERnfVBvS1pXZ1s/I3MpSGtXOEYkZkZea3NITFFnL25bNkBPaTR6dHNZcFMrIU1CNUszVXNyQlEwc0BKZnF4NDtAO2x7L2szWl84Vk0wcFMiaGBkY1F3V3w4YjVaPG90UnxaN2IjeW4hRzAscm98RnJ5OHZyVD0/SjQxVzYpLDVSIzokPHp5ezs1ZGBVM1FdQz5HRTM4SXk9elVn''@;'; put 'put ''PDphcWxvdmsrNFlVN0Q5RWhoUT06YEY2KSxyZkozIVFjK1Y5R24kc2B1VFVfc0FmPl05LmlVTCl2Sy84c0B9Um9ZYnRUM3RdaCRKR1M3dnsyR05rT28rTi9pZn01UGkhNHZfJVV4ekBsYmBXPW5AI2duQENddUomVkFNSUxaKjxWZjIoR0BJbVNFNH5CNUp2UiVLZlQrPnxqWC8yJml5ZWtvNEN1''@;'; put 'put ''N1U5eHIpfXdVMFphSiM7e3RmOUdDcFBESjV2JiEpRzlNY2hhNDJnOWRqJDJxbDxhRi9kQGUxKDMpcDRvUzQuRFJpRFA/b1V3UUNkeilLMzlnXlksKko5UVU4ME0rIntqOiM6aCEkYUhQNmxmen1mfm1WUEgwbE0pJiF2O0FlaGVsOnVDU2YqfkRBb0ZMUDdWR1BFVT53MkR2bktZNVR+Y1Z+MWVJ''@;'; put 'put ''PmY6W1BIQGdXKlBNbH03UVJCX2lbXztQei5dOHQzV0ddJXUqO2g1fnA6PFZJIyN0cEl4fCNubDo/LFo/T2h3cU97O2BaRmhgZVcyVjYucHlwXmZeRz43Vml9NSs1Qj9aZHYhXmsldUxDYFtCamd0PGlOUnckPHN3eSxrLz9XKFBwT0FPLnlAdy90RUFmbV12ZUw2fixvJTlJLHdOU24/cUh7dncl''@;'; put 'put ''b2g8VyQrRG1qczJHPkwmNW1yQC9vU2ZpKSlNSDNCPEZWW2hgMkRUVGJPMTJicC4+bVhreX1WJU07Jjc/JFlRXV59eSpJVTU6MVZ0L0ZaOCtuT09lIWcyNEA3Nipxb3I+dmxmWCZ4eCNjfkIjbCVYdk1pWmMmMncxVntMN3kkbDJ3dVMpZXxYMkpETTRkODhHVnZMa0E8WVsqOkR+bm5MVlcmIzRa''@;'; put 'put ''eCtlQihRIThFKV5LVnY6aFFDQUpOOGdTcjZfYGtHSnU2VGpDUX5pTzRxJDluUEliI19AbXtBZ1d3Z3NsOmNqSDRfcz4/NklkZkNbWmA0fXpKSTJ9NDNAMWZyUHVoKXc+bFJrSkxZQkRWUV4pMEpyVGUmZjhoTl1CUVI9KSRIXkIzRGwoUEldWF0kZVluP1FnLn5xViZEOSZnd2k+XkNne1hjbDgs''@;'; put 'put ''PVs0Sm1oSkdheWRkM3xiKkJHVT42Kkx3RCs+PSNCeEo1RSVIKkVEP3tnbjc2VH1YM240ZSRUZDVYQTIyRDtZRGdjdkVZV3BJU01Tb2EzUjlDLChodFZpSlFrUFZoSUllTHouOGBgfVg4UC96KlJOLygsJnB7TzJpIU5sbEVwIlsrInB0SkpIekdsTDZgZntGLGlLQyIqeHg/NGhqTHxrYnJzfEUy''@;'; put 'put ''NXpTamBva2lgdGdSMy4hRV1oQ1ZqRWlENFQqRXJGc09dKUY7c1ImZ00/KWYxc2tFZEc9Lzh0dzpWMUw6V3hqRWV7fEZia0MyOjBISTc/QTwiKmRsXTVTZ3NNKTNVOihxX3RfbXYiem44ZlJGSkE5TTt1TTZTcillNE5GdDElek0qMy9TKSVzND9Kd1prVSFSWmtyM0wjPDlTVlFfQ2FIezU6Rm00''@;'; put 'put ''NDVJVWtkaXBBNHE/TEF5PzBgKjlCLzlmZ3hOIiYwPCI9KFVSVTRCZjR7cj9YVCkwdnV9UV4iP21CNztLL216SkhQSTB2U0BBMXNxRDovQ09sbUd9WDh1TlV8P2Zzb2c1LGo/dyV2Y3BTNzFDXnE/OW16T1kyT05FVVoqLC9MWypvTkpMYkBnQ3FMR0ZZU1olYSk2dEVxRSspdHljSiJrN1E8cDls''@;'; put 'put ''OFhnKXZZalBNblcpOk9vO0BrX3B0X0E2eFtOeW0+N0QqJWxfdGUiK3NTZUIrSGs+cm8sKEVqL2xFMSw0PHZ7cnxiV3ZMcCRYPGhdRyFYSiR8RVBYXWhtfktaTHNxPC8pTHZWbWlZRGpWSEtOQT5CJVYwb0U/Njs+XVE1dHVkZWZVMFdVUU91d3pqKE9yZ0hMbjxnUi9fZWJ2dGQqOyU1PUVQJV9B''@;'; put 'put ''M2R4SXV8SkFYP1YuYkRbTURhUnhpeClQblB9XXBLSGg4fGM8VyN4fkduLmBwVHNAWzBhajVWcHdtRSJlSEsxOkwzbHBEcGUxZ3EsSDkwb1ZgSigxOy9nd2dSNV9VJXRCdE5iUVNMYix2dUhDQEg/TFtvLjlsLyghLFJHTyNzJXBHcn13Jm5ydnAzOSNsYlcvNHVWWipHNFArI1ovQTgmclsqK19H''@;'; put 'put ''VkFgNmwkOmVbX3g4TUdgP1Jbb1ZKdXpuPExrWj9vKjRUejtoKmgjczZYRipkMT9iemw5LyshSGguO2opYjhXWnc/S3c/YFg+ZlNCenJ4KVhQRWN5KDgyMUMxallAPCZvKV1JVWFvdDcxXU8lWVd3ayUzQEs+S00jUT9kQTA/ZWJUIywvUC5yY3xWQmlramt7N29nQ3xOV09yLiJXW05TQFZaVDtU''@;'; put 'put ''cGdLMWx0RG0wYSRGRjhmYDlHYm4zMlY8VWZ4N1lxO1BfKFJvck4zJlMqZkFRRGFrMFU9O3tIIS9UMWVRdz1jK2BlN0dBaTpePVNOWn19KllXYU0+ITcsb2cmKDI0Ol5OU2N1ZTsxTCo1dkteJTNIb0tuRz0rNjd8YltYMEUwQFViXT9OQ252SlhsUzAzSGBgRTNkUV85eWNkYmc6ajZ9ekpsP1tO''@;'; put 'put ''R35iIzdndVVrNW5sdlFsPlpzXVk2UzJzJm1NfCJdMCUrQE5FZmlVWUd6PT5KImNJNFFOfk9NbUBbU0h0aW1eMD11YFkmQWVXby47STsublh1UVlmfUwzYSYxJks/dX0kcXFtWjdXK1VqekdAK2JOcVV5VnBCQzc1O14lNC92fjZJdWZlc0UudndqZjd7ZTZlJnNqd2lDI3NgTDc0TmAxVDV7eU1m''@;'; put 'put ''ZXU9UnxVVy5CcF5kTEhkWjh5dFJjX0Y5XXRse2kxInYieElPI3pLNms0eUgkLlJoWnwydW8yaHJpSk1uR35ZfCFdYlYsekg9cCJ9TSo4P2YuXk9jMy9HW1k6QyEyPjIkeUJeIUc9NHEzKmFFKiUvdUFxOVUkdEk7b3dVYll1O3BmZVU1T1FwcEJBQGVXaTJ+YiJOXltNa0RnfkNKJnY8QUMxNGpG''@;'; put 'put ''WzRbeH5PbkoyUDEsNE84dG8/Xj04MFVVYz1wQmhaPlR7b0VzZUNfREd7fS5+ZD1wZWRQdXFRTkNXQXxYbHZsMC9vczlefGN+dzElRC5TbS5jW3lnWlQ4JHJyPntJVXM/NGYlWnJ4dE97I1R2dEBDIVtjPVFbUnghKTNQVSRZdSMpWFQlUygjd0cuUT8lcmMuVFVtNm99NVYmIXVXJFZ+N2shXzNI''@;'; put 'put ''eWV8WVs4NUZBV30wSWhmKTY3QFBFOEZ2aTBjVnpqSSlVcjt3U3RpeFhWKzwxSH12emlQRmlETmNbO2d4dFFxMT8wPEkjRk0/M3BKdXFoViElaWZqUW88JnNafCR3VF1rM1MzLmJmKDkwOzpjVnpVW3M5cFp2MktibFltYVoqZGpuMT5PfHYoR31jU3Bye05Vfk9jNnRndTdnUE5wMmxfU1c4OHhP''@;'; put 'put ''cGBnPlFdfCojS0kmMGk9Y1U5IXksR18qKD9mZVk7ck8uW2sqJWxJSHxtQUxYQ25zQ15GfW5WeV85JFZoVHJ2OVZgY0JyZWZnQGQ4bzxxWER6alorbWMjNFAkRCNxMDouMyxHakxaYTs5WyhiMV5eOiFQb28hQl9sP0c5O0N+bSVXKSM9VGdsVmJqQHNoNyV6V015WTtETmIqTkokY25qWjJoKVBF''@;'; put 'put ''eEF0OXN9dmwxOTY/ZV9xOD0/QjFlWlJPKjU8Ol0lY0xkOlReVGAlbCZ4cE5mNWdmaXFhK2JLPDVMR10saW9wPkNddTMsSS82M2ZNSXYhMH5vY00iN2dLI25VPHgoKVlHZXFAO1EvYGN7LkZvRS9LKkAhUnpjZktzdHk4SGdtOmhbVms/blFUbTZxMGAhbHh6YSY7dHg/em9hYElXSnQ2P01Hak5+''@;'; put 'put ''ZHJnNi9lbVVzbjlta2JNYD9oRS5JXiFSVCNxR1hibCVJZiRtanJOM3IyenpRMlAjVTdCLGhaaHM0Z0M1e25ETztGKzpyTHlXZ2JNW3dqVHs8NG1PYXFLNVklP3VyRj0md19LQXdYI0ZZanw+TXBBMlFvPkZlIy4pX0QvYnNqdUN4S0ZCMmo3NkYhKyRzel9+dmE4anh7aCR3YDtWfVNLOSxVLF0i''@;'; put 'put ''QyNaOlZaLHopTTxka2JgK3B1VituWzBoI0IzW0x6aGlMKThNK0xEXjMhL2w7T3w+MnNJUWdlMFZydzkydlAkZyZKWXkiJk4wQjVKXkVpVzokQFdYWVREMGhJMGJ3WTgwM2pZNEJ8QG1bbG5bX04rQnhNUjIxU3MkVUJwal5XUUNyRHhWe3QvNjs4SyRNLmBuKX4+cXdWLCQoZ31iUj5mMjQpTVA5''@;'; put 'put ''XyE3UTROcSohX3JndUF2V1Y5dlJVY2UhbHdqY1VjR3ZtPSMuMjtIQyZgfWFJZUAyT0A7MjA6cEQ4Li5YUCYoZ0w7Lj8veUNJcUxGej1wd3Vvc1k8NjZCPTBYST9SZGZHO0NfbGclITBzbjRVbHkwSTU6MWx8IWFDSGNUWnM3WHxXJXQyXlVYYkBqfE8lSzd3fGsyY2ExcSRYK1hjODNpT1ZRN3R+''@;'; put 'put ''VVtNNyYpfWt8ai5naE9qYHBiOW9WaUoyb0FHNnslNyV7KUBPbXNqRl1oaTohXWhAPSthKU1SdHdoPz4uX1JCR2Y/MH5veDZ0NzhXOjVjd2taMTh0VXhJe3Q3ZUcxdTsycCJqSjBaRC8qcXYodF02bn5HWkx1VWpBVEBNbGVfRHlyIXFlJXJQZXVoJmZtZVg6aFY3XVE4diEsUTdWJWRMLGgrfi5m''@;'; put 'put ''WGhzJm5gQ05kczxKcClVeiFtVEZ5ckdubWk0YWVqIkszekM8ekZ8RTBBUjhEMXBKP3Y1TSRFPHRIVFZwY09FO3djI0x5V1l8eUFze1UzXmsjOylbJWB6OmpxLHMxVGpLSjAiWFFtRTJ6bykjKVdfUi4ybmxpWnFyOS4/VXoyejd3OCMuZGBOL3ZSLzlNdUNrLm9OKFBdbi4pdUsiRmNeZDtrPiw0''@;'; put 'put ''K0lNKWw1aDA3Iz40QDVCcV5LezsmSVpRcFtgZ2c7IXZQaTVoKTopVn1iUEReJVAiSCskPD9IamouUnU7dnBlXXRzTCh9e2BwN0loSW1hd2RFfHhoZSVUT1gzNl5NJXd5akcjT01TbklVNkUjd2pfYUArajdyVz9dVFc5c3smJiplcW1dWFUrM0xpNkBwPEZkTjBNaXUwPWFjPzJAVDVqPnRFcEVh''@;'; put 'put ''W2JRXjB4dHQ9d1osaWZLKkBKbH5bPjYqfUVicSppSnBvRTtIMSFfcSRRYFo/NCZ9U08qey57TT9WaUx0SG5ecygvdkhtJF03RGVjUyYyKGhifkxjL1B1K3JETDZrJllgMCVXIURsQ0JQMVFFczNsSTQ5Xn5DQjJ0eklRJipldV1JZHNxM29jZFRzeyhKP2x6U1tVdyRFKlZlMixUU0BQdFE0anIi''@;'; put 'put ''T2VsMT5dOWBtWGhgOjJuc05ZS1poeTQ7LylSOiNbYiJ+ZyZ4L351UWlKUHhVQCpBRWQ7XylNVzZEbXlSUCJ6Wjp+d2s2QEM/YEAqSDtSPSx2T1BNeEYqSlQ1c3x2PXdMXWtPImZzOWFYfFsxbEJKUUw+YlZ1QGovVVVlX0x2YC46QWoxXWk5cDYmanp2KT9qPVNlZCxMX0t9UFRlTEFRMXBBP19J''@;'; put 'put ''fVtISktLcnhxSDVBbGZ9PjlDZ3BeSWF4ImgqfkI0ZmZIbH5gayVedjpnKkFVc1g5OXppNUBNNGFneGk5QVEuWSxKI3lOQmkqaThBOkZnXVB7MH1NTGNzLElNazBAJDB2RSk3MS5XcSpdKllPaUovZV5STD1xZjtPKml6Zz80WiErcy9BdD5FNERwS1d+Kkxvb2NuPjlXK1QkMjo4U285Wiw5OWEv''@;'; put 'put ''bXM3NlBjbytiNk9WIy83SE5SNy51PyN8Km5NSXpqdmNueTlNWXFKP3U6MmI+VWZScG1KMiY3Y2cuV0h7Q2EwUzdwX31efFFAQlRwMFUmaiVXflZFcDpaSzdsOHJINVo9Y0pvKU08Qy9VVldGeCw+dzovKkZmSy8sTkB7Izx+JjVANlc+Lj5YJnsubihzXzR8SEV2T3h9Py9ARUlyMlFhI1FKdltl''@;'; put 'put ''S2lPLmVNQlo0JjYqZ1YpZiRFWVQuRGx3TSNpMnI4fEQpLEc9R2F2SVojdnN5bG1hJG1UTWpkcUYwcXtTeVlkTz1AUCZtMzJaTylZOX4+bzl5REZ7OztgY0RXR1M+cVosQU9lfkByK2p9P2l3cU98OVlucDRFdjlbK0IlcDxNU3I9KH4qVVVRYGcwV3IpVFBgWWh8UzpMekZob2FWO3NrX3sySyU8''@;'; put 'put ''VUQ1NT8xa08qIV0hS0Y4T3lvTzpAdWVnZ1FTeywjckg8dypRXzJ8dixfKXUmL0NYPXU4dnZhYCtqcVlUd357KDxVWXwmeEVRbjBHeGYyVkE+WVY2bntWKVYuJjZSbyJFP01yNC81azJkVTN5VFRtNmIjSnlYa2ZPcn4zQVU2IVpWMzRxYTNUWiouSFZibFhpQUtAZmdbKVVGRUh9Si48fmB5R019''@;'; put 'put ''TDFvU1Aka0E8Zzw9WyJXdjNKbG9gSztAPmRdPS42TWk6YzMsOiZwW3hpNnp7Vj1haEAhUjwydGd3ZV0vPl4hc2FOZnN0OmlHWSQ+WnhFZGAxQ3JHb3omUzJIO0p2RUowcHVuUUQ9ZTtbNXk1RiZzS1pNV3BpVlZOZUp4RkxeZjxJNCJ9Ry5BLE0kNSl5Y1VxcSJrJCleN2tGQFhqbVd7SCFiWFtE''@;'; put 'put ''V3o4SyRafnh6SG5XfDJ5SmpaNXd8cnZlL2teUiNVNXM6YmJpWkJUc344STBHTnBFI2c7ZypfQy91MSxFfWMrO2t0XkA7M3JlR2IlaUAiL2k0VHhPIW4xfDIpS1omTzJxTWloPlc4fU5PKGx6ZkFpTE5ASkxxWDxMYzcrJnI1JVRsTSRDMy5CWSpOUnhPSFhMQyw6SnZGZkEvPipyQD5bc2FDYTRr''@;'; put 'put ''Rj93ZldpYEsjUihnYFYmLG97SGQ6cChuZUYmRnVKaEEqSCQjfkxhPiJmZVFdJS4laixnTTlEY1dJNWhJWHZ6T3RZW010QE1FQkJCfj5eYklyKjIjTX0wMn5Oclo5WlA0ZnppQkh4I2gpS0ZAW0FVPTZHdUIxYlVBe0FhbFlDNy81bDdHSHpjczJwNC5SWFkkJk1xaSlQbHopbGV1fGJgZU9SIn0r''@;'; put 'put ''TlNkKnA5VnZoTCsuJV5rSUwzP0RpU3VMZWxjfEdQVWJUYWBGMFFFTSgwaz93aG9TNm02MUE0UyFaW1Fta3pDQWx0YWQvM0JmU059YDA0SURtJH4idEpLP0hYVnZXVEU4Uz11QlFhKDIzV2RJQGFkdjcxRE5bXT5sc3AqQihQSHNVPEdxbjsiQ04yI0t2MTxKKnRTVWdsYGlCLn0/M3lHbVdGMmEj''@;'; put 'put ''OSkhOVhEQlcqa05JenpTai5HOVt+b0E/PEpDdzBuVDQzb1lJK29GJVdCdTBBfkYyaiFmaDp5OyhvfmQlOiMwcH0rcllAdVRhcFY8OEFhZkNFNHVrQFdXejJRPntPcFspbVhoe2dCZkBOYjB5PWM9UElwUWJ8UHomIj9YcyovW01rYWJRRlJjTiwrdlljZntfa3Eje1R4ako+cnhMd0kxNjJQe3BS''@;'; put 'put ''VzpEV3RpbTg2NUlreEghNW99Vmp9Jj0/VG44SGVTYXpDY115N3hmanxnLEU5JjZ5KTxtMUtLRWk2fG1RdHkod0w8KEtuXjRUWnBYdyFqbj5hdl8uWV43cSZfT0RMQXtaRWsrQHZvRDBPRFhoLHBgd2tRTm15I0A1WUd5NG59cGFMQFdQZGpuJEJZbXN+YkolWiljfmVYci9iNDIxQCZ3YSF3KiRD''@;'; put 'put ''XjEueng/XVEqcik9Q1FwT0goenAxfDxjJF5gdTQkLDxCVCVHdVtvNktSbVp6bUJHTW5uOUFFSERyRlBQPntJfDNkanxyRHU+RHlEMzIkInR9PTBQM0lvbTJnXjl5RHhJRW1JMnZqeyFFQTBrMGBZdzV4YT52eGQ+dWdVQ2kmMWdSRiRFUTNjdXYoPCEoL2N5SysvLDtsWU1ySTQpcUhaYnlHIkNx''@;'; put 'put ''fkx8YjFEUndOYEgqZ3RDQjgjKXROZm1mOzJ5ITwydiplLl1kd2BSNzYiYS5yOnByI0ljdjspbDQvOCFuRyMkdHU6V1ArV3BEfUp8QVlsdzEvM2hMKCF8XSpYZyQraCVMJnJwbkAuJCs+V3tZbHFKPj5kKGpSPT4rQDwoLm18OHtOI01jM2t5Kil7dlllXmdPM20yOWE1U2BdImheOUI/NnB1X01y''@;'; put 'put ''X3ohQk9HSjVSVWtuaEZQTXBlNE1XRz1pZkJKKT5DNmBSflhWWF96fFpPQUNrN1A2YDdMKTNRTHw0TmNjSzlCYnxAW15kNFtzKUlxZXt6ZkJeI1tAX2c2aVlJX1hoPDZ1NE83Y1dpLkBzcnpUejs0aGReY0c4bDlmN14zXW5qUm5wVip3bWI6ZHZ6TjAye3UxXTBjME4zaityOk1MRFlIVnwwPzx7''@;'; put 'put ''YW5bMmhOQCU1V2l6XUNBU3Fzdlp5OVVGRCl0IztvY35wZFpVMGpiOFBCe1V2Z3o6I0ZLa1NINEk0Sz1uYCJjQmRgcnBHWjEwcnVbLi8qLlpQV1s0MFdRNiJuIi56M3hTfixZT0MmK0o2RVlJKGtbZzt9TCJFOWNPTF9YJERjcTE/O2FSdjJsKVomZDs7T3krVGt8RlJXVE9WdCVCN2c6KUI0bXtP''@;'; put 'put ''LGM7SDlJJndZNl95PyoueDE5Ql95IVBuVTtTN1lqKWQ+MX5XInYoOld1UX5kVzs5Yz8mPH5NJSpFZjkwQ048VC47Jjg0TkpbKkdAUGIhZnooVVI/UExdZ19YUSolMEtMb0VtT28+VzJ+emwqJjxzZCE+PztJTWtNOyphbmpXMl95YE5Ic25mR1QxTDBnY05KL1lSP3RiI0YkMmVEY2B0OSM6e3t6''@;'; put 'put ''TVM3OiUxRFtCMiEmLzVGP043XVZnLkkyI0Rpe3l8S29fZFpBM2Q8JUB0PFtEIkE4UD5CYko/IWxBTUxMfWRgWF1OZitqdnJqXn1ganhxb2spUkxheF56cEJOfCEjW3N5eTZ5ZlppfWo/U1dyZDBtR281IWNsQ0NJdEdbX2VfR0Blbz9BaCQ5OmhQIkMyNFZVLHtEfmwpMTAzfWAoYWRkNm46aXVD''@;'; put 'put ''dWc1P3UlZj99dzlXVCo5LnJqKVlHTFVXXztdQy5XN09JaEYza3dFd11+fE1PM0laQSRsKWwwRiMmeV53RDgqI0xrVFIpTjs1OU96MFFFQyQ2NzYwRGVKVWE+RzIyTTg0cz4xM1E/KDRXe2hwYitwR0gsOy9dalloSzQ0dkNMa3coQnMsS15hQDd5TSMkVnJ7Wj93L1dwOywsJmokYUw5Rj5WJW0l''@;'; put 'put ''SilgL3UvTl58XWE1aihoIzRje2B+LmVlYCUoMXBHaiUmLDtJSGcwMzRRTEhuRThDR0dPRlBMSlVXIXE7cXJlb2R0KV5Xc0wlVW83MXhJZi9jRUs/N21edEs8PTpiQT96fUFUMilpTXooQXBYWUVQQDQveilwLFpsfjM3PlAjND9tYmAwZEI5QHkyLmFsOF8xI0NlNCgqZEE5ImJVUERSPTBobGA5''@;'; put 'put ''aCFWdVBiOjZZcjNveixRQjl0KVpQLz9MYSYkRn43Vy8mPV9OLkVgdSxlL0JHOiVsPXd1UHVlay9uQ0N3cE01SntkSGg+Ql08Xn1gV3EwVG1odzJJRmBHZ353X2ohfTRMYUNAVnpVYkZTI3YkdjJOWEREYTJ6a1JOMjFUfj1ZakxaS0w2IV5oZ11ebGJbcXUkXj9DZiVDelZRUT1MfGp1Uz5PM1Ay''@;'; put 'put ''S3h3IyZId1Q8V2VHdyp5XlN+SDRSOFpNSTR3T0F8Mnh6RjZYMF1kYHRzWkxSYH1dQFpgeVZYRylaL0QiYkNEMGpXMzJLcz8qaFE1YXZBI28wSmZ0amdsb0RIQEMkel5wSn15KjRCWytpL1BLaDp1ejJkYEdadVNFd1Y5JlJjKGxOIXJib3dyRipjTSEmcCZBSk1YSWdUeGF7ZytCV1MlcXU3X2BM''@;'; put 'put ''QS8rMVFZWWdaXVVKaF91dTArYUhyXXA6KVJwfDZhRFZ0KiE8ZXJbLG5HelMufWF+XlJkZFpSNE5bbmdkcmdqIXkoZlVOdUJSTmtBPyZZM0RGQGNlWkNxQ3YqOyYpW0JHX3BkWmF8U0pCRGJ4OlM3eyNpJEBuaTk5M3VmI0lfXTMjI01nYFF3OGsoQHFdaytWRGp1WHAjRUMyW21RS3NeLDQ6bF9W''@;'; put 'put ''citfTHM8akEmcDM7WzVSYXVBNTUjJkhZSXkxd2t4PyEpemUwTHB0RV00e3JMTDNEOnxjeFIpcjxKbU8yfUhxXXJZbXUoKWBdMmVXbVBkQiNONzZPX1NiYD5yZCo6OnlmJjNVX0BaYHJgRD1nZDwxSiNBZyJpK2NuN2p+YylFWiF2TW5vKF1UeXQmY2dATjdHbzlYJCsiIyNGM1cibF9ROkZbVGFW''@;'; put 'put ''ZXVMaVRqZDoiQDJxQFRHdSk4N1IkUyNRNVlnIkklR25VY1NUQXE5dUJ4fFZHZ3VFeUc3cFc0ZFp5dDA6Ym10JTJWQkV2PEFfUWchQUdwaVkzOkRGMkdoNkx6Xi5KPGojWGI5altoP31AbSVJKEk6U0MoWWUkWCxQVVVBMl06WzhyX18wfkZRZ09wcmgxO0d9UnUoRH4pKCRvZns1cldsYE9AWiUi''@;'; put 'put ''M35lVTg9blpiPDkxLFhjJlJlLF5pTTgzZ0xscD16dCtidUlAbSZOUjs+T3Y6aH19PFMjXlNDJTtmIWNScVtAWmRQV0tINiFgT2YvVFtQPHxMTExZbjkyencweW1KYjpmRlFtV2khJWxyVUlYSXNCUkByelpNNXFOVClDWERYYiRzJH12NXF5PVB4WGxQMUpSLjFZLCpRRnwwOmEkdXU6SCNEb3t8''@;'; put 'put ''XXtOO2R1TmVjcWErZ0x6V05EfiQ+PlUySSlsd3huMDZ3NFssIVtUcyxbIkdlKjB6RUVhSFlOMWhuPVIxLHQmYV09MVFsISFeYGlbPjZ9OmA3ezEqUjxKTT4pcmlqeT4xYCpxLywrVm5UYl1VeHNbfWtUWGdgKSU4ISlxJFEpKkJ7NVBTSzVQKFpWWjs3JFcjdmFiI0JCY1QmQ24mMz8lY2gmSWwm''@;'; put 'put ''fGlQPlMzdTh2IiZKRUIuO3ZDVkRwQisoJWYodCFafSw6W1t4UyVNI0JuJFRSY0szNCM1eF1MeklMc0cjfkFbLihiczg6NnVtQUsrYHs1KmNaenpfNGs9KyY7N1pgenI6ZlNeQ1QqfCkuLm5Zclg5Plp4Uio6NyUoRUtid0lpU1RUI2ckQUMxRjR6Tkt7PWUjezZ1UTF9eF16IzZaQ0IqSF42KF1T''@;'; put 'put ''akRKJVl+VlpHOiR0TGZsZ3suaTd5W0MvP2hkNTxUPzt1X3orbyEjR0YxfERMdD9gWnFfbz0vQzdyLmt2eShKO1FxMVZQcHJIWDxiTzRpKkpfRnNDUEtLbzckaCM+OClhW0xSNTpNQko+dmwqIW5BQy9lKk1zb0xYUTd1WDh1P1ptaFZLOXF2K3xFYHo8Q3ZWa2JQUDtDYVtkU2I0KEhQNE9NM2Nx''@;'; put 'put ''QHY5SXM1bTJodWBkJj98WDNrL3VaTkZFZ19EJi9mYltRMGxxYjVHVDhscjNwTmpxfDE4Lkx4cm9ueD8uSFFbYHV7O2tHMFt2VGBwcFBieXsuZ2NaalZyVX0mckQ9O1RmRzA6NVNgXzlHOCpVXkg7UXc5QFFmSWt+MzxoUlVzJkR0UTsiTF4jSzdrb0R9K2U8LzxTcnVSPEVPZE8vOV5+WGlANX18''@;'; put 'put ''UW0vY0d7Z2ZPRSpRb0R1VEI6Rl5EUDI4IkBoJTVQQ21DRkRQVEIkfmhBM1I7O0VBUztSaHFNdHhnWl1OI0VGK085QXFJIjljXlpMVHFteTM3IWUue1dKKmJ7eF1rRFhDWEZIQSg2M342Ml5nfVVOIV5EPkY7KzFZfFEyellyQ1lBcUMxQlFSazd3JG5objR9VGU0MytEY1h8PSFyKiZxUWVwNC9e''@;'; put 'put ''eWI/YDleKl88Kloyb2w4Z3o1N2Rfa25ROUV6TjxDRXY5fGR+PHBmKD9MPTJ+Zi5dN2B5Rm5LPGhpdE4hVEVUJCxhOmVoJUBLSzFpOVQlTjFDeiUvb3JELDhYRWwkVzVXQnIhe2krOU0uP01tTCwjNFVFLytfXyV3KGgmTig2QFgwRSReSTtXWV9oLz1RJntHP3toIToxbFFwcEx2I2s+YjhBZjVn''@;'; put 'put ''PTooUEd5RytPOHhTSl9DenNMK05sYHQ8OHl1aWhISk02TmJQRClMSFYoPmsiZGNkbVhybno2dnwqSTZVMz96WzwybzhfZ14mKm0qMlhJKDFdSkFyJERVWlFJUX1gbnt5WTNCRUJvfVRoS0BYKF5SV2FvNGMqMTpZTkpIKH5EQDM1bX5tL0s5RT93OnVyL0V7dXIubUBCUiRiVip0W2xtUllfWVM5''@;'; put 'put ''M2Zre208e2NHK0lmQGduY044VzdTM1BHNCFCUnw5Tk1qfiQua25VSkhrWkAxNyFbclY2O1V8RnpaSjNTVHkkbyt5Q1dEcXZYWjhRbCgwRGAvPjtgW2Q1V05iTUA4c2MhMWl8fj9yd0FKYE5mTyF5eylXbFovZyVHeTZfWTF4eiMjW2pPfEEjK09kWXxtMl9RJFA8S240a2hmblQ/bV98ZEtucC9E''@;'; put 'put ''NWJ3Ok5NZXxwfFtpdEsiUXk7ZDhUTztyLCQuRz4vUStEW3dtT0FpY3lGQS8jVVRsPmxpIyNUcFdeUUpEdjF7aE5sY1Y0bmdFPGp9RXdyQT92e1h7NnN5TTsqfV5TV3cla0JLbVVmcWI8M044IiZtIUdYVFsvVCh9XyFDO05RNkg0OjouWX1OMEJVPkRxOHQ4fk9MNnguTWVtYn49VXtAdzdNb0F+''@;'; put 'put ''eTVPYDQvY142MCwvcnBtYW9XdSUjeTt4QEEzVj5WLGFjVkcoaGw7WGV7L1ZUYCtwY190eTQ+KGhCSFA4YV9rIisuSHFUWGw/XTRTM01kXWNaUEt8JGlpUVprPmd7WVdZKlg4QyMpXiNQLkRaJFV9ZmFQX0gzYVlZVyJSSVZsOCsvTSJsPCZ6MWYwVlRbZlY9YF9rQT80MmtiYF9ENCZoMkQrXlQi''@;'; put 'put ''Jn0zJW5RKVBRcU4xO0hla2tsZ0dVfm03MzFlY2x6Imc5RWE4dDohYGFtNCxQXWtvdDBhdjE1YT5nWUEvSE5pT31SRVdzTytFYWwsTSF0dlFEbjhMN355YWg0UWljZzphTGZNZ0ZpL0xLejQxM3YpKGBMTzA5WFMmMFdMLlVbb1RCZXkmXy95LHtnNX07fUhAa3V1T3R5TDpNW0pAM2llZEN3eTwv''@;'; put 'put ''bEslM15kYWNKPUx2IUxfMG1XOUljUlEiUm1VbDBHb2lWUTEsNntlNFV4NUpSZE55Nz4qQnF9IyQwbjU5NU1LS0h8MFlnJT5XdVV3Yj1iV2M+YyNgUz4hZXU0YkguaVI6ZD9+b15oejU0PD5ocX10c0xfYDNyaGlid3Y6SUtAIX4zWiUsdW9EM2E2Ul1DK0tpVEQoVWFjP3NoPEBhKm1WcSZ3L3lk''@;'; put 'put ''cTRXYW1ZSEwucileY3YvT0suXilyaVQxbEo+OmdALm0uPHBqSFtyNVN3IX1+Y1lAUltyKFF3dHtdancoOyUzM0VqdVE0cmg0KHg9WGcwfXhzMn1qR3cpWDw1elFjUkwlO3h9V0dlfGwrTiZBTjVmVTpqZlB1QE48NTFwPGFUc3BkNEl2WVA9ck8lVWVzeERLMG5xNGxiIitmTEh8NSY7fSg/L2Es''@;'; put 'put ''cFt8WFBIbD00d1VAamEzaHJHQGMuam4rRSFpYktCKDptRU4jPEt6MDlnaVtSN1RDJj5IPX4kV0V7Ll8jIyM8PW9lajtBZFZSQ3R5X3MsfCltekI9YUNAViN4NUBxc0kpNXs2ZDZhZVRvMnZ7IkcpNDVvQHZSSE9LW3kreERFNU1oJFdIRENzTThIdk13b1MsXltoQkpqd01mfjxPczJxZXYkbjRY''@;'; put 'put ''bkBpOkVSMU8keTxOMX1UVjojZ1llMXxGI25eTTlZP15Cbis5QFs5SXs5MGJ6YGwsTXw4NlJ6YzwuUH5lJTIwPlBVM3REUX5bW2BpW1hHSDolKzAyTDN6TXY2Kk9KbmlPOVBJRFZoaHojNTN2L29vVzphPH5eeip1QkdxdkhIWmFZQmFOOVQsQjNlfT5nY0Q5fj03eVdJPTF3c3EqWjZFRHdSdyFZ''@;'; put 'put ''Plh1ZXVfakd6M35yK0EvX2RvckY8Pjlrclldb1g2ZURzVy9QNF9yTVZ2PUVNW25ZKHtaY00vSWFmemU/aTBebX1LaXAlYjtHUENaej8sP3JjejhHazJkV35xc3JvTF5jSH0xbVhlPklbU2hOOENGWFRuTSQwK1k8NDtqRG5lW3NYPUR+UlV8I0pGemd2QzJKU2FNUEVqJSJleVN0fCMoWUQiZyY+''@;'; put 'put ''eDwpcl9DQH06ZihLO2E2c2RxLz94a3MqL2BRWHZ2SH4pdH1uSSx6Zlg3bj9iUnUycSp7TnxNVj8hbCk1Mio0bUZKWzM9YCYocyN+Yk9lLitvPV1ZbnlROGdpbWY3QjIzIk9Ke1ZWTUtsZzs1fXVyK1tMKTBaMldYLHI9VlM0TygmRSJVYDxhOEs/UHhoMip2XjZlaUFZaDR8Nkdsb2klZX5ocTFQ''@;'; put 'put ''XXo6LlF2VFlUS2wxJk9ONkR7RjZzaFosPFQyREtHIXgmamNbW1lyU3VAPyVUXUNkQy89LGxXRzxGQEIpZihoNk88XT8vUEU/MW9SdXBnZnZXNkxocT4qPiQrbHR2ZlR8Z242NWx9PFk0VEJ+JEc/dUxuPDJmey4iM0NDe2NBWktdJXp7bkRhcTBeOUYhRUUrKGVOdUkmZEBnMCxpRm4sKiJ1Jm5M''@;'; put 'put ''b20pfHg7ZkNEYCIxRntwSHJsMT1OV3J1R20jSVc5a3NkcVJJP1YqO2hwdVY7ISpXPEo1NyYjWTpNXltVJixlZTx2WiFtcTpaTGZZQ15KTyokOjMqPklNS3QzRyFqPTV8bE44XSFHU3dlR2BsUkU5K1Z0OXYoeTN1c3lxb1BJeUJjYWtzS1RlQE9CfGVKYkNuOElCQGlDQkx3ciFOP3giJFcoUz0i''@;'; put 'put ''VClwUDdAbV9ZcF16cko9cDFvcnYrTD1oQiVNOmI7Wkl5RHUqZCh1YUVYZHxufnEsT3IwWGNaOyh7TDUlVDMlKzdMYTZkQipQLl9OSFFCX3k8WikpdlJ9cGVlR2gzRiM9bGc4OWp5MyozJGR4aG85TCRUV1tbND5AaDM1alslPjRgfiFuL3RJdXl7PDk7NDUyVlZlOn58NHprI0FKYWNHNTZ0Jngw''@;'; put 'put ''fHc/PyhmPUMsNSQ0S3N+fFNQZWU/dzQoRSxKUXd0XStBPyJGW2dNUmYpKGBsdGY/Ynp3MG9zdEw3Ljl2Slo8Tnl5RmM1OVY8LEhFRVh8ZEpxVkJ+MnpuJktlY0dhN2hGSkQ+TnVuNX5UaHMzYj1rTFFAdE5eLENvUTx9XnBLQ1ZRcGBnPW1ZOEJhQmwrJTEzWmAlV3IxQTZXX3JXK0BZYiMyPC9A''@;'; put 'put ''Xm9ibjlkcmxPLiJ5bjZUQTNjK0lNMSJgODAhL3p2S2NDWG9xNCtEb18/SipoTU9KfE00VipETDY0SS5eR1c4MjN4KG1bQV8+NGgiWWowbnhqKTFfb0VoWkB2ZTY3OlFva19RUiRGRzx2aUleRihwLkx3MUt8WigmRipqV09xWDFOamkwOHglT31oUXoueFd7WTJaYlNiNEUsdl0pezx+cjBoSEtm''@;'; put 'put ''LzFxdD9qUiNDUTFaVHs+VTJnRlEsZT5XSUo+NEZRMCxhYXdxS1VLTG95cyNeSkF+Tkh4RmVaLyEkYzxuM25FMm5PTmxYNzhIcy5DSHtCXzhOK2Z3NjBycyljaE5GcShtVDVscmJOVFZgaVpAU1t4dV5XSHBQWDFna0ZyLCJ7JlBvfE5jdmdAP045fm54PV1VXV1Jbzg9a3NjfHRiJHRkKyhlbExD''@;'; put 'put ''LDl6czxLWzYoJjArYygqRTM8Oj9zMW5EYzdbSGZbZnpSNEdtUmMmNWRGUTlaOWhsVC9wMCokVDdjS34qLz10Ijg7XzMydkRjaSkjZ25rYDh7dj0oZikoKWZOdFNzV1p7M21EQm85eChzK2VfLEl5JWBpV2B4K2wwKU46ayE/SyNrJFJ+MXxGRnohNGx6cndpcm1VfFtLe0swaSUreGNib2hedWZq''@;'; put 'put ''PWgwWU8mWl5ZbnVXPFEiY2ksdHVpdkksQmY1U01HRzFVKDwlUCRxNUcwVyVFWns3K1pFVDE3an0pelNvY2xhPz4vNks6bVRLZjA9U2hxQ0AvamhUKEtUWk9PZzQ9PWRRYW42dGl+ZWJSQmhPbmgzUzptSXRzaHc3UnQ1OX12X0pbbDohRTYxLyFxQj48cCFVZVpjantpeG8zU2I9OnFGTVdSVXFR''@;'; put 'put ''bShFYjF5YHN0Vjg1OClLQU5raWtDXWZrJlEkZG9mLCpxSVM8UDg/NGg5V011fnVlTS5CJHE9MTwzRlBEO2NgUV1PIlZYNHszezdKLj14PzQvXVRZWkAmQkJ1Rnl6KG5wYkgxaVhKd3xZMVRTfDFqMjgraTBpV2x6K2NPX044MER9bV9ZPyRCNDVAXzI1LEBXRD8vd3xZUDkhaSMwdExnb052JklQ''@;'; put 'put ''VV5pPSkkJnQoP1h6YGFVbXd3VSEkbUp3Qyk1a31yS2BiLlNfZj1EODwsQnZEck9DS0ZKVH1iaytQaWRuNik6SkZ7OzBoKmpmOl9ESDt9MHFyMVhuTE88LDtPPUZfRWZOOkIqaVNmcCV2Q3o7JlV+fCIoV0ZKU0BdaXlTNHU0cFRedVc7PjxZVFFfc3BUKG5YPik/UlhtUmZxPks1Xjd2QVc2KTxP''@;'; put 'put ''a2gkK1AvIiw9Um1+IX0jSnAyN247NSU6cVd3VU01KloreUgrKEpvXXIzIiNDPXp5LmlCfWovNDl6XTRAaDxpKz5QMUdRPXNxRy8kfGhFclM6PnNVc1JyYTpdRU4xLGZETiZRWTJYIVUzXXxkbXFxPlEzUy4+NUZfKmNibiQpZ2h1PGFgW28+LlY5NzV8VEdVVjsrL1hDb2ZHbTJSRio+diRbKn0u''@;'; put 'put ''XzV8Xn0zckxSL015U345SntKWFVHKVdTcWZXPzdYdlQ6TXVuTDV9WWdTaV0zW3Moa3JLWHVEOEpQM0coU30yMzc1UX5YP0VFLFA5JFooSz9rR3RGPkRJZSlsLEpHaFRHYj10cE14LE5BWSZXZ3ddaXpyKSJkQkhMWzFMTyMqWTh6SEJ8L2Q1NGZiNUZCNGRKRiF2V3hzLH5iS0JeOltuYHZsN24+''@;'; put 'put ''MmFbNHwqTk5LN2JoSlptcl9LYSFpWHlGeDpVLDw7PDRpSE1bbT9FQjlrY3BBOl8+W2dpOnJGMjVgSGpZMjNUOVZ6OCF1SzlePE0rN2oyV1A3OXwqKmNIOjljZz9GWkoyfitHKyhsO0ZZS3cibWZVdEssR15RclJ3Z3N6SzF0OiF3fk1nNl1MPCRBVT1mfD9LWDgpaXFRVi9COGZGIWskcXxPW2pJ''@;'; put 'put ''Sz48Ji5Ffm5deFJzJFpYTnRgVSwifmNnakA+VHY5NTFZeXohSTFvInVSSjdpV01WP3E2UEBGYkQpMipXdyUwdWopL0RKSCwhNXpQbHlsZDo+bz9PMmlsWCYhNChsZCN9NWN4bCZOV2BabyVea18vKTk2eFFhLio7XkhWUEx1cHdJRDQyQSkmWGNOV0swQmpUIkpRemV4PktMTH0oe1leWlQucEMo''@;'; put 'put ''Tl4hbi90PzM2QEMpSjJ+fmxZTW8udV9CbitTYXFEQ2pgQjtDJi4zPFRYMXtvbmh8fHgpVjpHKTVsVjtPdlhwWi5JLzBeQlkhKH1GXj4lJj9ocGBOakB8dTxHWC5SeWJKcnl4UnlvTSpgNCR9bihPK0J1ZHBxXkQvcXtLKWI2R3Epe0J2diJCRV9lXTc5IUdzYSJWXTR6VVtLYkZRUzR4fDdJeGQ4''@;'; put 'put ''LHViKjJHLE93fFBGJDg5Ql8hVnZ1Lj19b2ZuK3tZdjM/b2JyNVZSe3h9SmxdZ1VHcio6QTEud0pnbjBPRHRSVDg/KE8yVD9UalpMRzRfcVBANlZfeHRed2RwfUliLzsydFNBVkdzQio7eE8uMiVAO05PTE10KDVNOmlYJH56LHNNV0xBOzlMeUJqZX1Be242aVlNQ0xuWjdAfSt3ajc5JSR5dEVI''@;'; put 'put ''Y1YvL3Y6PWx3JV5hYW50LixCPktUMS9ldk1IfXVhIWg0bDBWanA1YWRZe1ZCMXNiOjVQe3RWLEh5Qi9jeyhjSlNibTNQWytLRSFfWEF6YyRRXjR5ezZIOHwsO1hIRm01SUAoPFQsV0EjNFNTJDAkUEdRSlEkTHdgUVFDdDdVUX5YMjZwPGNHRWsvMlVGa0JffDdpQWMzflNUSURzQUM1XThGMnB8''@;'; put 'put ''eEJ3JVAxL3gvJGUsdzgmTTRHUDVSbz9QNC9FckoxIX45Nl4uZS4uc11SbypXOzxZJGJMY0dCYDJhfl8xME87VGBpeipmJT0hb0tydyp7I2xGOChEfEV8aUh7T2V2WkJNcHB5JDNpVkddeXxlQzJZRFNbMEYpPyE7bWtgWUhqNjlLc3Q5ZlNKMFVNWWNMQGdIUjIkaV1WXU1keX12YDlNa1BnSlNT''@;'; put 'put ''WFt6fGRRfXFFYiFZRiEyIXNXZTZWRU5PJTlYMkxSKVBCKmZuXX5uTXN5IylXc3VhKkloIlhLPjZedSlsdF1Ael1TcV1HL0F8RFF+UWhvYWVGZ2tVMnohcl1fPUQkdDUpJW8zOGNMJUVYbzhlIW9JJiR4b3tkbShqa1pNNlZ0SmRTTiUsJEcuKl46ezxDKmJIN0p1Z2ZYZGd3V0x9cCFiVyxCSlBR''@;'; put 'put ''cC5tKUssUXFkbGJ5b3dkaCIwcFFPUzJLc29uNiFWcylSQzFsPlNPVzk3UnZkSG1YWjZLOlhOZUtsPG9CKFhIYVdHcGZFUGYwRi4ySkNHfEhKPVowUU0+YTQxe3R6USQkdFEiTzJaR0wuVVU0fiZye1lXbmc1MSg6dFhiYD5ROnxXN28xKml1ODw5dzwldHo3Z3ZlUVNNR2p5VCkqMkcwKjdlOypB''@;'; put 'put ''MW1ma1pHKmM3eSlzejkxU1pJYjw4WUpkMjhjTmNqOk5+cmRwOVZ4cnRWNXVSPlVFMGB6L35udWA9JXd7WUhSKFB8c35CPXt4e3BFNExvW082Wzw/ditlVGlDbSI+V01BQyohO0grbGt7RXRSMnEsSmAwJm93cX4+cTApOWR+Nzd1TEwkK35TKzomKlJBSGJZelZqX0lTb3lSRGNrQ2B6Uj8qYWxg''@;'; put 'put ''M05HfXFTQkw4RGc1VnNgW1B7Yk5Qd2d2bkdPJiMkUjhRQFE0enh2YVA1XjxddDl5RlVeMmIxUzIpbH12Q1YldVhebWBIRlBpdmJ5Q2UqJE91PD1JXldEL0lOKzA2MSZ5b2tybGNDWD01YXZRUXp7LlpAIT1MSyROST07TXNueDVHTWFaPF5WTWZTJHd0X0IzeEpxZkJ7VyVzeV95dWIvZkVIU2VY''@;'; put 'put ''bkBGMSl2LFZ4eVQmJHU9RSE1c301Tl9US0dvT2pZLmB1L3Raa2w4RkpPfmhCPnU3ZWpHQDA3ITZwazh7KztRdiZ2LFIlUXE6bjU4W2p3UEBRd2lIdTI6VTVCZHh2JmV4aVpdaVJSL043aShhTCxFbUMuVWQweHplRm8hMXFGeS53JiVUIyVgWVlLP2sqZG5oL0prTmR1fFFNa0w0Oyl1NE4xUGZU''@;'; put 'put ''PnR0JkJlWyxublsuIXxqOyhhSU9nSnl+Mix2JSZiO21qYixLajl8NGEhcExZTik2VEh6ZHJycGsmTSRwbTgrfVAkVykoa247eis0aDJvPnJ+Ui5RU2N5T1BAbmBtS3UxSyxaMWkwMWc2S110VHV6SDdwK3ZPaDBmSykydz5+RGR7dz9FTGJaIThiRzx+OUVmcUl7fj1WXmRAe3dELEl4fDN0flU8''@;'; put 'put ''RGleZ309UVMpfkZqbGsrIix1JThSKD5iazJ4MlRuVFttSzp9WztTa097ezhSIzY2e3NbNXlTbV0xb0N8WWY0UEtzPU4vMSxWPWMlRiErK254ImRAKnV6fFRgbGwkQkVbJjtpcmFUK1krWXdKOVU5aU0udWtEckhuWiVkR2xPMS5RamVSJDN6KlV2dGhxP3IrPF02NzVEYWpKN3xkQzw8cnhdQmhO''@;'; put 'put ''RGk2OURLVSUwNjhOYTF6V1ZWW0NAdil3ZzcxJjZ5Vi5sSkEuRkNAQXZTaWpCdj92Zz81Zl8jWGtzMU4kMjN8dDZOVjNrYm4vbnckeENdIUxkQ0JQRCsvTXZVd01xJHshb1g+bzM8MjozVE5fbCtDVjFFbW9WOVBRQGAyMHwyNnZddH1deExUKzYvUXIsKSh2KG5RflExcmV1TTc4bDJkQD9UK15U''@;'; put 'put ''SlFYKmZIMGFfVkNUNGgzKmQ4NTc9ai98WmQ9dWZYS0QyOHRtMkJFTkpPRXIwRF4/VVs1eWtfNUpeM3c2KHcualQuJm5dc2lfejJpP2k8Om47PTh6YzpmYTZFKFlQdzY7WFR+JEdQVHohSFhYcy41fkVOQn1NWEJrWWhhcFlgQ3VWNHE6eXtmR1BTIzgwc1M3LmhNWGwmODpTYUVRWWBfWGo8Vkgl''@;'; put 'put ''UnxBbCp9MnYkUTxVUTs5M2pxMmFEW2FPKD1BWzNZRjc1dDo7NiVKI1BATSFhSzU9RDhgI3xxS1RCfiEldGN1T1UlemluUzJZNG5GUlpVdCg5KXZ6JEtSKyZ1WT1iVnp8NHxjYWhIO1MzQn5RUTJ7VXwobCZ9aHEzMV9zV2k0cVl+IUVZMVpYO3tlamRYe2ssfC47Tnwwd24oKGk3NTcudnhJa0pJ''@;'; put 'put ''W2RUalZxZz1Ven1+bTxPeGs6WjlpWnMjK2ZfYykiZmFHW3p1VDM7Wj5PYGdyayQ2fU5pTW58NHd7dGdTT1JqalQ5LmF0Nzp+MWthfH0lOCsxWFF1PWRbVU8pVGBEKmt8TltmfHc7Vj1jNz4qeEhJbH1OYFd1PWU/Mm59UltJUypuNXE+bCExd3liV102Vk0oYyF1X3I5VkJSWWoyUDZoJE4+TUwx''@;'; put 'put ''Im1yOkhzeW5USWpXZms7aTZMTDBLKnkpWzpxOngzbHR7NVtUWEd9O14ufnNSel92UEw0WlMzWS5rcyFTMX4jTm1TbzhSVXxnM1UzRFlQMCZyM09BQ0dVSlp1PCRMUlg8Lj5ONFU9XkA/V2lYZDU7M3FxbGp+Wnd3V11iUlNOc1ptLkR3aGU3fX18WDFuU3lMLzRQfTYqTF09fU1DcGt0MG5ebHNz''@;'; put 'put ''T3huc0NZYWlhTDU9P098eUJ7MmJ9TnJmNW4rYSVDTUJxdEU/aEshUjJ2NzU6aiReQ3FaOzA0Kj1EaltYQm1fOVRxRy5tXlUuczx0YixRajopMVs2VltKPTt1M2FhQT56TmFDMkwvbG5HIzl0UlVeIXZqZn1fQWIxIU1NO0ZSaSQqUl9iVT4hYlgpOmleITVKejNKNT45KkAuXmZKQzU3TiVwfTlr''@;'; put 'put ''emVrOEA9SCVtfm0jM0tYVWs7XiZEUWhAQl4wViZwUHp7aCZ0MWNoblpoa0J+SFIxMmtzLmBULFtYWUFLeEU9eEV5U0Q1NEFUYWhUNEJ5Zzx1VXttI3pVVzpNM3F4enpEbiZsKTpANkNJMG1eSV5OP1NxPXxlUX46UD90TUI0aSwle21oUHhVO1UoSGhydUBwKTxLXUkyTzQyQ1s/OXRiQEt6QSZK''@;'; put 'put ''cGghZHFHZkJLTUhPWXNOZls/MTdyWXM7KlI1Ql5BXW5hRUJKKz1NKyRmSVNBLDpGQGR8QW94L0w9UGR7Pm0qX11PLyVpVEc/WktfTEpJWyt0S2tnNXMvMFgubjd2Y2o2WjNqaktvPkhkQWI0L2RhZUcyXkttZ2RjO0dIY1ZxUXhMXXY0fWpwVXdfS3kxWV5eXz5AKjBLKXcwPE8uJXFDcFpsZmkh''@;'; put 'put ''dT1dRklSTTlUdyRdaE5QQUh3cWwpVSZzVTU7amAwTVlNd2tAUDI+aGxEJm1ifX1ITEJ9a3hdREcoakNJenlhfEsvek4vKnc8d312b0wxcEo1ZHYsMnkudDR0SVs9L2RPMFkkKXlwNzsrQ0h4UlhpLnFOUVMwPWdjbkgqK1BKIllAOlVkXmpSMyMuYituOSJadiNETEs5OEtYeiR2YCJsaHdvWG1Q''@;'; put 'put ''VkZFTDM6cTlUeVhAX1hRSHZYdER4dUM3X0o6c3YqRVIuMl1gRUhdbiZecGlTOSxfZVg2PUNMU3w2QFY5SnQ/fjglJDp+V3F7VHI7X3l+ZEYwa25zLFltfUN0OiRRRmxrXkB8Rls7UTRSe0ZzKzVefmtvOHs5bWYsTX1CPCEhZDAuWDUvZHU/YihXYFFzRTshZz8qOGxzMHpNTHcrKGBAd0M0bz1H''@;'; put 'put ''eUd1IXI0IjBjRH5NWihsfVBBJVM/cHVbeVJRJCk6QWU8MHFlU15xciV8cVM6OTVCUXEzS187bTppMDRJLDswZVNCekpfZWt4MXh5d2QveGlhMkklKFIkMVJ6MmxKRjZ3QXBIV09uV1Q6M1UwT35PcFpVKjgzSi59Knl1Y0wpXV1HKkh1MkA4Y0tab2k5SlVJQmJDUEJrUVpbJE4+R3UjcmtJencj''@;'; put 'put ''R2hwbCtDR1pqVWlxN19pfFpbVmFXX1dSP2kzUkVGLlBfSTtUJEEqTnFKZjdkNU86e2B4Nko0V2d1YFZNfldmcWFTRSNpQVBGZiEheDtgfkEjOUVZVXM1RD5+V1EwVkFqfDhnZW9lLjFhWUkjX2Mke2NRS3V+R0RUUXhMYV9SREUwXTJCengkZXU/d1QrYX5DMzQ7KEt3cFUhbndeNHlXYyR+VSF+''@;'; put 'put ''WlNCPissY0lxfmZXajNBKWtsRCgjSH1vUXp7JixKeWNUO2MzfmM/c0s8bWd5QCQ1Ni9GI3t8cGcxNT12OTNFSmM7R01+c0A5Smw6KzY/PndbNUY/dCN9bk9LJm9qXTJSI05jYHB5PEw4Vms4Vzh8Klsyd0FYNHAvOzQ6bkFuPWZBR1hQd20xVWlPI1VvbF9VbjpLcHVIQ3s3U0ZFS0whSTQmImdy''@;'; put 'put ''c01hYi9De0o3fE5XcEUvbzU4U35Pb09UZ259eUJMLj5TXSVIbXFeMCpXSVZUSi47TmdfN3JeMUFsOk0kVTo8WjFRbzc9ZF9VYWQ9PHhFbyFdZjxDYEtARUNgUTFtS1FjdTZrdU8+Rlp3NjlZLEFVVyp2WSxXUTQreTYhXmBrNGs3OEgwO1Nib3p9PWlLezckVzJedUwoNzRoX1A3QiU1bSRGSF4j''@;'; put 'put ''b21QLC98aDI7KThbKi5zY1tDRnxAZDBweDx1bWZiRTclKj58bUpAfGZ1XVcyMWY8MSE/RyQ/bClOQ3hMPC5HU31RUmBDd0pdInh7Y3AydishU2M3UWE8P2hYW154UnBabTt6aHZmYCt+VSNEMSE1JTRaW0ZDPS5ZJnxhN1dvLmh7YExYPyNPazU5MCgyV2RbK0NqfjVUalNKfWtIMy9BX0w1LjBz''@;'; put 'put ''aUZ4dEl3ZDs0dyprPm1WNUpvTitPPDBELD06KTZ6dUtqfW1KJnU6Uip3b0AmMGAqQ25deHU2KEtgRlUlc1huXWxKVFUrUVBZTHAxSjZ1KFpBZFptLlBnTG93cz9Zelk8dkVsPytLc2p3KH1jSC8yNXUoRjUodkRQSmpYcT1SekFYfiljNHJdREsoJSF8U2EoWUh4WnB6c3dqUFgiRj1HJHp2YUBk''@;'; put 'put ''XzlJI2p0T2A7LlByaT5xJGl1RF4zIX58N3QrWlNZRiE6WSlgOCZpWXVTbkAiflg5UHclPnQ1MDMhYzM1MUk9NCxkaykkRWVALF9tJC95Wi9wQ2gzIjtRS0N0ImdZWU1PQklIZWViT2IseTVyS0BJMkxsblcyNS44Y2FbTE5jS30haiNWZXkkdTckX05PNFFnZSFKSGxVaGklfUBMNWQ7a1ZlRThI''@;'; put 'put ''cW1kWltrU3x9TENWJjhgKFJnVzxLSGp5eWVxdUo/diMqdzw7dTVDKzN4UX5la1I0Knl2TWo3dk8uUW1dIS5fPmZFVjolQz54KEJWYDdzVjszTlMpN1lHP3NIfTJYUjczWz1zMHBhSUpYWVREVzVJUDl2K1hGOCs6PyM5MFpsV0Z0RF5oYlBSNjNJXnxnL01NXXA9YTc1WXFCdjp2eFhOVXtfKCFD''@;'; put 'put ''RFNRY1g1IVlWMSZNN09VWWR5MV5TMV58eyYxN0txfEcrZjE0Y2okbXtfdFFAOzYhLls3c2R1ZHs9T1s3em1aV1VqbiFEb0NpdzVySiN4PylOa3ByNC9xODxyRUg1fjMxP3kjMjY1IzZ3fSRCJClWKHw3PTV5USohfWdzQktyRF99WlFlXnRATT5hNlYiQlNrR3l5YTVOVHNULj5KWz1raVY2anBe''@;'; put 'put ''ODJIJXZUYSsxZTF4c2UoUV9VdDQ9OXJxdS81MG5wIXFnRWMoZl0iYDlEPWM+a1ZMPUxDKGdILjRlOVg4RitxX2chZFs9TEFKI3o/JHUlQlN+P2hLU1g1XjtvdyZAX11gblB0aSJ+ckNLXzwjXj02Z3cyVVZoUi9kVjU5VlIla14/Yi5RIldAcCVieU5+VkhWUDZiRGdBbX5wYS9vaW00MklXM2tw''@;'; put 'put ''dHl4SGJjVFNKc1pYXV0rZD4kNVQzOTJBY1lzK35CTDcrdzdFPEx+TmJqYzFdVyMhUClRV3UjckhKeTR1RXwidVtJUTRDLnZeb1hLc01iWzJ4UlRAdklBS2VKMkMwYUhZIm1ZS21hT3pzV1NrSnBybihpUighXj4jLlI4S1UuSkpKLF8lWUx2YzlsLD17JUp6dXo0QF5ZIW8hcy9pTzMiRUk6TCly''@;'; put 'put ''Rz9aLkg/SF1gL3wyVCs0UX4wflNoNWgxXWNwdTNMcUxBOGNaR0Z5KiRzSUArYGlML2x5IkM2SlRGMipvOjx5S2BLTT52ZV4sK1pyRjxNSGZNIUBgI15tVFpFOGJwOEs8NGc2XkQ/MjE7XllDc3xFdE8vam1ybF9heC9GLmVALlB1R0M9blc3T3FpWnl0KVgsdVVDVnQxdV95TXp+eHRQWG5gYTp3''@;'; put 'put ''ejwjT252Ui9DMipqLCF0eFQqbG1+MWlaOmAldCk+fS8xYnFNX2FreD94elZtYWRrWnxmISl4cVhefHFFT3pYM0RueiE5NCpTTH4qc3VjajAwS3g7fGtNcV0uSFs9R0dAISNFaHkrUTN4O2BIJjViPWMvL3FCNGlEXkpwOFkyQXkjeW8oSFsiM0o8NW9qQnpEUD1pcF4/ZDNwTlohWVRhW1E2XU5P''@;'; put 'put ''Y2pYTmJJYyFGTTx2aiRCeDtNQVtOfCFjOXBzMTdxZjNMIV1NPlt5Yy5VYyNIPHIkK2woa2t3Li57QCohazpAXlJGYzdaPXVLVEo3I01XYnJwKiJlVS9TKXlqfmV8TUZeb3pIeFMzYnReYW9jbkBKVndfUDt9SGBZNm5Dfk1TPFdZW1VkJi5paTsocTNXYTBjW0hCcWY1fTEhVTFgUS9xVEI7L219''@;'; put 'put ''Lk4yOTh7cUhYVW5fKUI8IlM/ZWFoeTdEIkNxO3gxb0hse2N2N3s7ejcpXVZZTVBsLHU7cHV5Ump7fnpkI2RudVlPNG1eJDYlTDMxcGp1bCNycld1M1k3cl9vXVhfUiY0NkpFTEdpPDRrW3clKWcwOGE2OWYrVz9RWCF2cWQ0JlBsVzcqUWZmc259JmRybXxdNFNDcC9MNWwxanVxSWNXbHJ4cHRi''@;'; put 'put ''dzxUZ3A5cSpbOkZnRVo5eCJMKHI2UCY4WSY7RWJocUxRdChYbVBbVWQ3Kjw2In1eT0I2W3xbYStSQ11xOSlPN1ZLWSwsPWBmL0R9cEB2cj0jLE47NyRGSHEhaHhGSW1gT0shbTdzdnxhYF8hY1tnaSZXS0JJSms7dkg1KEJhY042KytiQDhnWFFeZWc9RkJAQ308ZF5mW2JXOVpQVW9MbTByQ3Mj''@;'; put 'put ''TU0/PS5bRTAsODFNakhYY0Q2dj4wSltJRzdGTDMoKTx4d3cmcSlMd3FES2swQlEpX2ZOT1IzYWxDeylpKEI9eGxHX010OjZvPWtzW0ZWYFhwP0JkMlBkLFEvV1pWdCs+bDFRaUNLe2h2bXIqOTVCNENvV3JxQnQrb1pjL1lvVz4pbnNfejMmb0xDL2pYTzBNQXRnVFVGOE8pLF5oJFA7eEh8JHtN''@;'; put 'put ''XjdlP3w2UGImNmtLOHR3Wz4lLmx1OF9JMTomLEVVOnA8Z2g7KWJtL0ZROnk4JDM7JjoyQzp9JmJMUjBQODZJP2pqQiUyY2d0alB9cmxFNHUjc3dSSH5xMXIlNl9Bd1NYVSNHTlNfTnpXQlI3P0xQUzlCIjF9TWg2IU9SZmMlXWROSyRCM3dQLEdYLGl8cEBbaH5dTUNeZXh7SmFZN0lpZCw7QTNb''@;'; put 'put ''OGhFclNgZXdAcW0mI3tLNmNXcSpWaDA9cGVCJHRwS3woeHdLVnZANFNRJkRjb0kwPmxZe21hKjVzV0JkUltWZ0MsaWg2MTF3QmtJcXdIdXxDeyZmaSlRa11xKShFWFZPWnt+anw2b1cic2hmaiRhMCJIb1V0YlhuTmo4QUVgOGIlTD8+X2VkNEZRYUIvKkV6P2F6YW1rJik8OFsuQkF3dXp1eUpj''@;'; put 'put ''QEJbJUxaUWwyUCFbPDxudXQ9bkUmR1d0Lk1+eloxT2Y+e2lJOCE5Ym8rMjtwQT5aVm1adz9rWkZGWHZybnh3T197fnc0RnZXc3ZvQnk2dyk1LlkvbzxMNmlzYUNlMiooJTxjbVk6eSQ+LHh1KnE8ITR4emw5cn02XWN9QV1VTUIsQG08UjB5JX5+M3ZJJFcsTTNic3ImX0pEKFdGRCQ7IiZ2dXo/''@;'; put 'put ''UF08MCgjUVQ7XkFlWXtXNWJLdThZfVlyJU4xXj1XXntmR30oZEZuenRAZEtiZ3BvZD9sNjB5XnhgX2Q8NUMkTDx6KWZzPS4mWExxUF8qSmplfFN5WHZEW1ppIiV4OEx9SkszOWJjckooZ30lRUR6cX5EJlBgUzhkXSE7OExbSEBXelQoJk1ARkptYHpnViMuQ3RbU3dfJUg0aWhdW11ybUFLKCNK''@;'; put 'put ''K3wpRXxwQE0zQkszfDVWL18/OVFDQzE3X1J5OVZQO0lGcXJkO0hmPUYxI2BwbGRvVi92RG06VFVvKmAhQkZ8QXt6amVMVF5PanhxOFphXT5PXyV7aiRIX158MlBYeU1kRT1nZksmTjMxYUQ5Wn58O0QpQmdLbmU+OUt8dSRvanZxUUphOlt2WSFnTGFrTzxUWmEmPiVXK11YW1kxWio1X3QhSGc3''@;'; put 'put ''aEV+cDV9dVtPYDczIjl2Sy9NSTZpO1giSWU/c3VMRDNmMkpdNi92YGYvZyM/I2JNJnxueE53RUJqQE56YVV4UnsoJmNlYkpQSz1qL3oxLEVUekZDfSQ1L1c8bHZ9JiltVlMzX3dgIl9hNG07NitDbnlEImlVTjVkWlE1UGgzZzgzeW1kMFVrbWpSWXZeTlt4KkklQ3NXUVMzen1xWWlZUmh1Nz9K''@;'; put 'put ''V0lpM3RjVUkuQS5sWD81OGRnMmFRflk0MjZZdWpGaUQ0TlptTGBDSF1+aT4xK3gwZHxLenpeUCNWI3BleFJDIzxpQlN+KCwsajF2cDhHR3YkXjBZeHpZSlspZXVXPk9sYXwubTpgLkZqeGJjKGxLbVNYNz5aS2N3d0RMNShFbFd4ZFIkM0t7I0hWM2xyYyh1YChbZC5UM1kqSDZ0eGQkPWppOzB+''@;'; put 'put ''I35obihAOFlFcD0+NStpc21YZ35GZ0VnPzw8QiRtUyokRTA0UElZPjljX0g+TDZHPWVzT10jaSpVKW5ke3plaEpyMyJ6WTouR1BFZV1CI1E6T3o6In5tW05PRlRBWS5eJCFibmV9PHM8M0l1VFVJbko3bSM5Smx8JXwhW2xRPEZyUl9hSEtxYy8qRj1UNjN2RmRCOkZ2OmtIaHlaWmx8P1V+U3Ru''@;'; put 'put ''QUFgW052eXJiMy90NVJWRk8uKFI/PUt0NSRzJSpSJUl0RzV3YX1wdS97YHhyW3ovdWVTKHQzMz1OTSV5SkBrTmFhL1Z8b31kLjlVX0Yye3tTMUJIIihnOTM+bG9mNCNiaTZva0giWjpLMEowKHcmd1BwNUh7aXFnaklDXmgre1lweV1CdjFydDY5cVVNZz15O24hJjw9P2t5ZitJUS87fjoySHh3''@;'; put 'put ''UDMvNCZRUGQlfVpVMVQ2Q3hTWX15dFNPajIzYyVyRG55K0dCQk1PaVlyTE9AIzclS1JFLzQ6czRxWXRTZz0sIi9HVFk2OUtkImd9d0ptdy9SO1IsKFU0N0doKiwwMSpsQ1o5fkUjPCYkamdZfi9sUWooe31UWG58TXNnKHduXkMkal4hWkBzUDoxQXc7dCk3T1EqNFRgZ2ptQGhiJV1Mb3s7NmpK''@;'; put 'put ''ZWEjS1FXTnAyey9xKDc2IldjTDRnSDRHQkxCbzN1b0czKyVCUjtqcTopQ31XTi5TXTpmSkE2fH0hJGpUdEooMClLOE9sWHY2bVNKPi87aFgvZUZ9e0ssYEVCTldtXkFpVjkxdnJuWCUvJjU6ZFIkSEBwZFJtYTlpcDVbVX19Mlp6OUUvYVprY01kbl9FJnZCZm5fKExlUjtUKSUhd0oxNV04eWAs''@;'; put 'put ''ZUIla0RhP2oxVGwqVj9NNipaKylvVSNxWVhmSmtxKEFGInBGX1IiSCZPPnYxRlhbZ2BLUSEldWdlMGNDVVEpX0NsV3xCbG9WP1I0Z09EVy8zMlt8JDtqdmVYaE5yUkFZQ1MhJEhhZSFiTFRWNEdVay5Nbl5XQzY6Pi51OyZQX1cobFMkfVBAZH5KMF9kSC8ycCV8NSooZGtzdiRyOj1lbWUwPXlT''@;'; put 'put ''SSpZbWtrJV9LR1pERHpOSigrM2E4WjlsQ2F3SylHaTBCfjBLImdQOylxfCFdR10ydmwzUER7I2hTMiVOUTsubUVNV2YpVl1yZFdNUyZxeT0pPmhId24mSi9saWZ5eiRxbmQ7Wn1ZYi98YiYwNkZgT05+RVFJO0ZTK3pJczdFQmojXW02PkZtPGdBRzw/cVE1L1g5TGA5YituXnIvODtlcXs5TXov''@;'; put 'put ''SVZoMFV6NUBeNnhgJV93e1pfXWIoYlRgUmwuNCxNKitUSzk6U0V+OjhkTldQU1t3RX0zJmNOTkRuTnsoR3Fmd3EvVkdMSShuSTAyLzhxYyk5eEN+WERiJmRocE0xUERyK09wTkd5YWRlPEN2eyhdV3c0Tl46UEdua2h8a1F0d2hUQW1+SzhqVmYxX0tHZk1fZ2h4R2A0OnYrQm5DKHZ4eCR1ZnY1''@;'; put 'put ''T0NCdWc7dCJgczlZKyVtVD16T21oSmtxWEhwektvcmJEb2BteFROanEieDZfUEtLQCJGYFE0NnlvK19CWG8uOG1jcFgjbDRfV0RVZ1lMbEsjIkE4R3hWcXxvZnlwazddLCEwQ3okW1N2Lm9BV0EjWmlPIiQoZHYxOWNOJis2K3F1OzleanJJSXtQTmA+NWtiSkh3WEJdcHAzZ1tkS2F9REwhQ31O''@;'; put 'put ''KyFxSnI2Uzx4Sm16T1csZTpQcjZZVzxzc05qOERRL3hATzRQZ2dyYCo7RnJRV3lCcXcwUGJiS1B1JXFdTE0zPzNvXn0/TEcqJVRhUUB3cyUoRkl7Z0ooWX1ILH1TYW9bfDc9aUpwWltEdn1dUkZDWmEuIUYoLkR+bEA8cklWKkpnNjdkXW8kIUA4MFZXJWhuInNjQUJdOE1qbTAvbE0zKTcsPStM''@;'; put 'put ''NUtILHlaOipsO1tve0YlNDB3TjQ0UkAsVFB0d1dnUEd8eTNzMkYwRE9zTCUxKGgsKzl8QzAmayRbdC4lY18zRm1NPmgvdiZQPGJuSGxTYUJpSjN3XntJYT1wM1ksSD9vKXgpWElhRk9KZV9Gc1JPe0x7fEpzLDdKVz1Gez1qfGpJNnkiKnRyLmFRdSJ7I1RZOTQvN25tRDw0M2tjI310OXxDY2hR''@;'; put 'put ''PX5tP09ZM3g1b2crUkRsT3B9TnEsc1NzOWVjQmBxSTMyOkk2JFJuPDF5dU1vbHQ1bSJ2QHRVP3Iyelheen1PXiJTcDg1d0d5SDtCfT04LlJ+QT1WQjFwbz9eayNFJmtgbW9RPVBiIUlqfWlQNXhUbX05fCVaLFpBP2BoKGw8Wno1eVtFamZ7cD1SSUBJMjgoUE44SFdvN15GJDVsIyMjbHAwbCVh''@;'; put 'put ''RHRSST45cnlLaCxlJntCV3BiUWlaKGhdcXMiZkRdfWV6IX1CWSo8Rl5AQVFsT1d+bCxnV25xdTssT2UxeVZYUj0vTCw7dXpFOlIsI1tMZ3xjTUJKQnpVRSo6bUBuMnModj9LQS80OXx9YkIzWX5bRig7aHxIIyhsWCl2eio8T342XSRIRjFESXFheilfYkNRY0Z4b2UuZnRqO29Qa21MJWF+PXhY''@;'; put 'put ''ZzpSajtRIjZbISttUDxpRDBKIX5NYyJgclFpMDh+Sk1iRU5dRnNySmNiV2w8WWVuJjppKENNeClGRlEvRS5iIyo5MjtxdXdZSmNSWGc6aTE+WW0oNUo+JCMsUS9KO04vaXphSzhhK1pTZi5lcn1xNmxNcnU7IktAYG5NLkZtdmYlYj8uLHwqWTwyUX1BWyEoeD9iekl1PyJYfXB1TCljPDw8QG9T''@;'; put 'put ''QnhuTD04bXRAVUtvN0lqVzlKKXFKZHtmOS4wKihsfTEiYGY4TTNSYGVCOlVBKiVSbCJoPXoqXXR3LEwhVTFSe0t6LmBhUHJDPmRqPiZ8NzBFLlkvfmB9fV1seyhIVmVQd1QuVygwRVtiU0RkTyx3e1V3M0JDcU8jVTJdd29+NlZVYmslLEBVS3N8Ki46PmFvX0NFMEVZVUg1P2tdcjIhJkpoLiNb''@;'; put 'put ''TWRmVltbbGZaREgxQk1NUFFtfU4lXlRXMlRCVSlDbEx+ek5WTVc/U0ZSS318Lzp8PW9oM2wrUjA/bTVZZXlwalMuI2pzaXJFfGhePSh9QHs1Y0pgVColKWFARzcheHdbNENYfnx5czYwNXpQcGNxTEAxLlRZZHJzOXMmVTNPcWE+cFhLeXxDZHYoMFE0a3whc2gkRn5iby5USGsuYjRFaVs4Il9k''@;'; put 'put ''KmosaFZSJXJwREd7IWhOfkA0V1tWJXo4bUZhPm0rXSVOY31NVCRRXlliZURuUSN+NHQ5cX5gMWRVSnd0UV8hVkVQMDFsMl03PmB7SFZDXXRlIVdCb0wsfD0sPkZ9ZHtAUXxCOEV3Vk52dXBoL0wxRUV+KigxLGd9dEdlXUMifEBJLEdiR1g/JTZyVU4+aXtBJSlYYyVtezZJZXk7RElDcUU6aVRw''@;'; put 'put ''VS9oO0l2OlA2NT8mZFsvJltFWStVfX52M1t1Q0QifUJEYjR3YVRrUmZ9TlRDdTxVSiV6VjtgU0o7Skl5YVhMJHRufExSLCNVLjooQk1xc0JRfk8mIUxsQ0MjLFRbNUU7REpRVG9xRHwhRVV8QHNrWUJrcGkzJDtlOUNzV31SW1EoZSU5bUBhVUl8azFiTnJnPGEocG48YSlhfH02NyhdKzgiVmwi''@;'; put 'put ''IXZuPjQ+enNZcjlOZEJpSipBOk5CYWVIWWk2U358LH4pJFlsRHtDeHdSJjNZey9GdnhsSm9rRnB9XW9TRStuPHVhTU5eQXQiZnR5KGJ5Kit+UiZZcmVJNDc1WUtnMjg+bjMmQ2NRPWReVjRyRlQmZ0MvM3JyP3NMUlYmWFJhSTlbOlBZaT0oM3ZqWXoxYHxYd3giUThoMHdRRnwqXWgjYjdaJHQk''@;'; put 'put ''aT0rTUE2eEQpTlA2KHFoLzRxOTQ4O2ZBPSFkW11nJDVpQ3cydEZ2bCZsYGt5Jnsja0wsWmJjUDM4Tn5nZT1yZDNgQkdSYV8sWEx7YmJ2WHI2dmRnVTxbdHNecVApc1d7Q154cn0qUWNyLio1NlFrbjVyZjJLWHY1WF89azJTOlUkN3ZqbWo2NE9DODcoImQ/dUxMaUN5L0AzaW4wMC5DSnlpJGR0''@;'; put 'put ''O24yeXdMNE5Fc3dSLmdAUXVjOHMoWXtZSmdzbiNSOWo7V3s5Nk5XIk9rSTcmRHkhUzlTc3NGYSQpITRxX35TP1NkeGB+UmFAOjZjNHRHMD1GWmgyLyhIXnY7Tm8oWDJCVExvOklTdkskL0NtOlExQ1lYdTNPOj8yO0o6amwsMiNYRmlIUm8sVFt4cU9TTm5jPyYha0IsbCkqfm42d3hAeldVYWRl''@;'; put 'put ''cV1iTyp4Y3dbTncqPHBfemkuZDxaPXt5MHVfITRwMmM8Vyk1S3VyK2tUNFUrXXFoTUVHUTNOKFYwQ3R9ZXlwTSooY3tgWGdid14waC9OXV4lRDgjMChWdj9qfiFPZ2RZSG44cS5ydyk4TXBvZlRWUGMrSTxudW91bjh3fCp4QSpWbVhLJlQyITE/PXIiWGdkLDRPNDppbEdOSmRSdnBJOFdodzw0''@;'; put 'put ''SX43b2pUZWEwaiVfREAxUkJaSnkrSTZdYThYUH15VX08QnkuTWxPKFY7KkNjPDhjJW1OaylNMVBhO2ZHLkE7Km5sUkxWT0d3ZSQsJUloS1dbU2IoOXBmUz9DPXlJR196Ik04bChGWTMrTU18X3I1RFQyVUMvIzhCczElOz4ybHNoTHMzJkEmJFE2PT0uTmFeNjBWWiYjYX5YV3ZgLDdpWHokJV1Z''@;'; put 'put ''P0Y7czZWV0pHOlVyTDZZcWhiTiF8cmRKQV5CP1lZQ0ozdkd0Vz42WENFTXVkM3lrI0cjNzw0dmNgQW8xL25kZFJgRiRzKnF9NW1gL2glaXVCYW5AcEVveyVJQVQmNm5+dGxQemFCRnFHREtAe0JhOj59KVVZVkY3SGdmZH0mQUxnRnRVTiZDVmJsNXtbKFtHOX04OXJvR3YxWWFhaz1iPTxNc11P''@;'; put 'put ''aUtgQiZrZiJ8Nl9AYDdje28ySnUuM0dLNiZvNmt0akFBNUxgdlt8WGhxTmxNKWZYV1MuZjI9Zn5pN0Q2Jjl2I1N2YCFGckw7MTlPeEtKX0lXUUNfNiZYV0ciVnJ3SCgvd1FoYExQci9VWkAvRiY2bzNAVTdaejghdF42ckBsKWBfS1gjQXZieEVYeEdCdF5SKmxqbigmdGFIVyFUdXszYU9mWWt6''@;'; put 'put ''OGMxJjVpPX4kODRqd0pZVUV8RH51LDY3MW5uSE0jaX1pUTtbbVpKdU9jZDVvaE03bUJ5aVtOU1I1MVpdIiNaLy5yYTJzZVB7STZFXj0lKTpFQzozV0ApayEucTNiSmB1SzBDQ2NRb0V1Tk1sInRESjgyQFIzP0JvM2BPRlozRUxRWF1+KXFELm5adFBNaUVPciVdcylJSmU8akNfQVVIKVU1fHY6''@;'; put 'put ''VzVCMC83bldvQkFbPTY2LkFbck9ROyxhUXtZKlIqJEI1N2spZSR0MXU+PVg6RzkvLngxKyw7em1sd09AcXNQVXU1SWt1P2NbYGtqZU0xTnY8XnwpKXNlPjJWbGVaeyt7bkxTeiVhel5FeklfVyIqK1A9OmY5cEpmTU52WUk2Ji4mS3VhYTduYCpXTFJHQS59ZE01T31eNXp+dX1XaT07YUNsSnNq''@;'; put 'put ''WU81aFZ4N00sNHg7M0taNXlmQVZfWFQhRkhsJmgwQGJeQmV3X2RVRDd5aSF0I0xydGg0TkNUeUdhKFI8V1VuXmZuYz08ITI0UjE3LCJaL15PYXdNYGZgUTtTSnRwd3BGVV5bZkJTUW06d1tEa11yPEhxT1piSTFFSk89P05pUUp6TWpeWVQpS1NKTHRVYnxOL0E4cVhRSzJgZGxgJnFLJnhbW1lz''@;'; put 'put ''TGh7UTZdZlJnSkhiQitFLjN0RmkxLiw5YH1aIkJFeSNwV19LMFY6TF5fR1J1YmRaKzoueFFjKVV8ZjhadF0yWTdXNE9reHBONGdgX0ljeSZ6UDMxLHZtYDsjQG9JJD9qQ2FQXTBpdFY1QGw1Tk58eGc4fnQofUBwbVE6dGNXM3ZHTnJPL2Q6PF8xZlM5WDEmKjI/eEdIaiJ6Z287QU4lXnI6MUE5''@;'; put 'put ''YVMkT2Z0eXpMJTRrTTIlT1BXajlzaz5td2E+PnZdbktQKnteR3BoX1siR2c0YjA0JkM2fTx2czt0fUBFOSM+aTouITlOSEpbLDpxY2E1eTZXKlIybl5XJWRKT0hCTldIbjZ1M0NYfFg9e0lmOls+Y2NHJTpSLkdWcn1dSFhWX1liaTlLPFMxeCI/a2MlWjtZTnRydHZ0IlJJRElFTzYuMmk8VU8p''@;'; put 'put ''Lz5aLjlLKiYpLDNxVGVQPHUufi5+VXBlOEM3OHlCeGhJRihjQVpqMGpJUCF+Z04zMlhOVTdURjlCeldhSXh7YiU4V20rUihdTyNvbCssVnNOJU9SM11hK0NpWi99VWgwXylJT2QsZztPQz1pOTolc3ZMakFRSUBCNntZJjJ4bCFpUW50PEJmX089XiU8cmMhNjsyNGRAKFVVRGdgfW9WTntLWUpH''@;'; put 'put ''Syk3ZEh+bUp3e0YwWElbakg+b0F7Wk9zZl9zKF9kZktzb2lnRSssdW10U1hxe1ZaXjBdamlXOiMhbjA6c2g8VXdBXlckQj9bUDNbYyhpdGJXZW9bNGZJRCJDU0c3VUxlQyV7UUYoK08kIlV1VHYwSUUlWTddUmNsIzgiVkklOiVSKENWakQlTlFJUCluSXlGb2NXcV14em1DOiZac2pbWmUpLiU6''@;'; put 'put ''MkV9ZCY4d1taflV6KGhLQ3RsLD5Mal53dlE2QXg0R0kzTCpnJVpCXjlKPFhgNigjNUR6X2VvZ20oLy5UWX50ajxZNlZ3TDxPT2J3Ln0yYjE6UkZTMGw4PXo9dzlwQixmfiEsc2dGeCh5dFRuQk5WcUMoeywzUEJpdGMyX0NWV0dHWEIoaCNfVSFTTFFpeHlyKjMvQEd+TmVmN2pvfiYlSCxoNmZF''@;'; put 'put ''NT18T2ZIaEs5dzw8cUJZWm0iLE19a1VlcVpCQTpnPX57NFNEbixdXlJtTy95cjFJdT1WQFdaMThCYiF8fE59e3ZjUGBoOjJKYD9xMDd1dkZ9TF1eTyF1e0VCSyRFPyoxRzQsX3hyaXBbJUQ4JnF5ZTwpQGJZcCRud1trbHpTIUouOjdScl08a0I2Oyk4TFMwdWMiMnVMRl5fWig4TV17Q10qPmdA''@;'; put 'put ''SlN4MDk0VjFCXy5FdncoQGo4eEB2djUifG9XNUdtRCMlQVZgOUB6a3IueDNuNjNtZ0BHbmw4QGB7eWRTVUV0P0lDOEB4dS46aUFpeEdWfj9rKnVfODk/ayEzYkZeX1AmcilOcUp9ajhnJGxgTURRMlJuNiJFQXAqPnZZcWRbb2w4N2hNdk5ZPnJ2XUpvaHFnTVRDTXEzeHZgXzlNKXZIRm8sTTxo''@;'; put 'put ''TWNuS15UQTNbZlhxL1VNdUs2VE9JZjpxYHk1TkkybXV+Ol9va3IzYnlqdT1LckBnVFBnVXgiOFp0WyFqK0YscX10NUZQMURJO0NQREV4QHl1WHZCbTRXa0YxKlU0dUQ9eEtsckF3LkxZZitvSGFESGlFOnQ1NFVNcDhjRGRbYk41UD9jYkg6I041PDlfZCJ3ZykjM0h9UTdrLjMpQzFzcipuZn5X''@;'; put 'put ''NCpbK20zNHwlQWV3cEZjLHpYSW44RnJrWm07JTdmNyFCWipgS1A7JSxgI0FFST13fFtrNyErbiNffl83UkVCfEVhfHFAYiQ6KVh2YW1sY3pvTFZbbE5nS2o0fUNFJko/MjFQOE1dPV9JamlDbEg8TDArZFheeW1idX4hN01nUXtGIlo1S2h2WkJuN148c3NbIl40ZnROSEh4eStEMV1ZRzkwQDY1''@;'; put 'put ''dDFWRV1aMitYczx6Jmg1c0tCWEp9bkt7InZ4YSQ0SG5AY11ZZTkkTWRYVkhZfCxHU296QjwhYnh+ZTk1Uks3WFouU0U6RikqZ3VYdGcwN1VHWiU4KVpWdnhKTTsrWD4qQ0FSNHZXc2tBeixOfkM2VFgvN0gxPlI4NGNYMHgjX3k4aSguZVFDPSl5WXlCamJJQkJ9SnFhalFnPjhbLEpza2Z8UlI1''@;'; put 'put ''P0Eydm8pLkRQYClHYls9TipNSDtmM2JlVW47IXVTXVNVdXAiVTY6bl5eQFZAMXpxPnlORWUqR3ppSzpOImJOOTxdYFJqU1E5dHYsSytVTG9zezFXPH1UNnp+JVVeJUU1bi91aUYsO3VLbWR+fWAuY25DOFhBYGlLIXZ+YXwmdFB5Ny5nXXRxfW1DZ1A1Q3w4T0MpI1prSyJQIUhEXXBdfEt9Sl9i''@;'; put 'put ''Wjx0SUVJM1lHR0pCZU9WKEgzazt1UzteXTFbWT5EfH1IWk9kbTg4VnExOCVTU3V8I3Flb2E2ZVZUelsoIiNIb0t5ZER0KXJrTy9RVmxIXW9tNmNXJkBGMntjKm5ILjQ/OTdfZE1WRWdkSkwuOXxpN2QvPl5IJDRCX0EpT108b0tee04zQkd6N2tAMFcsKGYidigoUlFGJjFGS2FnWTV2XUBASVdH''@;'; put 'put ''R0MqbTosQ1lCd3w0O2A2WitKOSlScDNxUmt7QDJ6T2o2aj9+NGh9Ono0d2QmZislTz9uYzkzUV4oZHlOQ35KeT4vSXcxWVBVKiNBKTRic3pPM1BKOERhZTcpWS9tVSwqUi9kI1FJQj5Se1c6Jjw9PHB4IS5fOEBxPHw3ZHJyJCMoZWA5Yng8Ii9AbUpaPmlkbHV4S3s+PSRoKU5GZFVjaj5kQ2VF''@;'; put 'put ''OmtDfT5ePVZvfGBoMnxtfWJdOmpLOX0oMGxEUlpoPDFVJTp5e158Ozl+SE1+RzdNR3RgNG10R3MoQylONElsZ2ZIaGUsWGRmQy5LWj5QVEx2Lnc6OkNMRX0weTZGSVZCeVNKNDErNTFlZi5mZjpIdn1eQW5QXXh0MGUuQmAyUX1he0pnb3IpcCokYFhoe2hdKzw+eSpuMVFaN0B2aF5pSndAVCpd''@;'; put 'put ''X2pheWB5aUFgfEZ5dENUZmo6Qm9SbzQkYm18VlNHYyExV3Isemx+MnpiLF5PanZBdWNkTDJqSkJnQkh4ZXR+cXdhQmJYSSY3XXw9cDx3KFpiaDhvZmZiYEVtMTVxdU04e1YmdSNDYVBvT3xYRHw7XXlXK2FAPm9uJDZVMkZbLEVJLEpJM0ZEcj5oXj9wfVAhPUM0T2xMZnhBQm8pMXA0TTFUKGk9''@;'; put 'put ''dUlWPlV2LjF5OzdQc15kUWFJZyMrIX19X2NbW3txXmkuWztGYjBUKm87ZE9ybFMhIXEuZUFnTGRsekV2Nn0iYlFGeWUoNFl7L0Q+WGV2KEpfWyowQCxCUDw0Mmw6bF1FKjQoRDdQU30rPlhCQnI9UXssbHU9fkVicFZQUVlDPz1RLl1TcnU5NGV0YlRnRSI7W31ESU10QzEzO0MhYEM0RDs7bCgu''@;'; put 'put ''Xi8xeSpvUSpKKWJ6I0tFdUlOZjVAMDo8d0MpPzh1cUxsb2llPS5ieF8wZlA/Q3hJZGt+YXouaDN5eEJTX3spQykzOC8ucH42XyZBTCZRRlQrZGNXOGoifVZIYys8fWlFSnhoMXxlRDUifC84P0N5UWVXK3U1OT49JUU/alU5SH10TismT347SHdDPWgzVWhSZHc7TlJ5KUtfYVl+cnRZSTdzUDkj''@;'; put 'put ''JjA4UFQsL3sqUzlgXmV7KEwxLnUjcDMoWmR0LGY0KzcrTC5ffFY1Mkkwc0cuYywubjM9XTFtSV5wXWhrdTlMKXV6dlJPanNEaVQkMn0iK0ZjTXdqVyhUbXVmOkV1TXd0Z21DdnNjLldjdjNpZz9LRCNOK3ljcV45dE4ldGBkR05lWk1GdWZ7ezluOm88Mj9KQyZhfVtfOHAsWUwiW2k0MCQmUk1D''@;'; put 'put ''RjI4ZipsfHptWFpxT0NZT1hTaFZgPFB3Sk4+dnhxez0xb2MpSSNfZD9Fd2FHLHBXUzJdV1lqTEpsQTZAWj5VV1FEMylXSjJfXWoyS1ZpVkE1cVtic05NU3FhOzh1OEFFMFtDUDw5OS84cSliLkk2UG5+dypVa1VeYWhLVCIsRC9sTFJlfXN8Z215S2V5I0BxdFUoSEs2eWgzbzVGY0dffG5YQmFt''@;'; put 'put ''O2pCJVorUSlWe3s0NkFbZkskPChjVjR5cXQxfS5gTlpGVDlicFtYU3gsR21AXVAzZjl1Lm84RT0lSUUkRHo5NjM5diQvTDtmVEZIMU9HTDFyfTxuYC5MLDc2a1Qwc2c6KGdtbW9fU1tGZEFyPVQoalJOMEM7I2JpTjN1Q3B4RCpfaXxpJHdpJiUoQzVwX2kyaTBmeF5naih6TyN4N0JjUnNXKmch''@;'; put 'put ''QHo7aFVwc0lwWFU9VlImRDcxcG4pYHZuczIuT1N3Xj8rIi5TbmRJdys1M2IwL1dKUixoP3duellfRkZrV3l7PWc6WThXT3B7O144K3F5UVl5ST9CckZvWUQsPUoubDhEPEhkVn1aMn0oS19WfD03VWNBdzxDUlN1VS5ZWCp3dTVtODAzL1RqXXU5emlmJDNBUzk8XTwzeFFpMklee0xKVkFKI2NK''@;'; put 'put ''QkRYdWFPM3w9MXZbTndhW2tXJStdOn05Vk8/dUBrWlJXPmJuNHVQbigmS3xhMHZPOkIzdDRRKSQmbn1QI2xOKT19Jmo0ZjI1Y1U4MFdqMnBKdj9BZUYpQjtybS87JnkyZ1laZSMsSkZrT3l2fSlWKilEc0BfXkY9RldXYEY0NHEwO35QRldXYChabk9STl4+cGBUIWIwX1FHVDRCNDVzLDxAdTlw''@;'; put 'put ''fEZKLGMuPzNaWUxtUHh5dyV5YXBxT2NxeStycCpNWjsrUD1HfVJLOlRjSGlIfWpweCxvV0dxaiVidVRibUUxPU45aXRZUEhNSz1ibUx5L2xLMSIvbWxVei5SVUd6UF5kZU0yRD9tZiIiZWhBN0VlL3M1ZEdKM1ZKMDRMZV9gflFdWUVpITFefiVSZS9ldE0zM3JrQm5BNTVPRStTXSF2IT1gRkkj''@;'; put 'put ''ckA0YnNbeFVmb3N1b30wfjYwe0kiNDV5Q25OeTduSXB4KXMpfGQucCM9cXJNfndxS1IqX2sucHlLKHNBKyVEOj9bdiZmZDdhaCZTe2xGZ04hPVpnfEkuMDUreCxvYC9+aSFSL1NIWzgxVTZMM1o5YUJsIzpmKVo1KVtmKWY9UX5FbVN9PXZeXStzMGJDdmRaK3NZN0dMKk1qYUdObVt1RCZAQlB5''@;'; put 'put ''SC5lTnprTmdxIm9OeXhnX1tvT0lEe1h5NCEheHAuckR1NXxpZjouJFo6LjlnR14+XkIjU2h8cUZ6dzhAREtjels/fm1pVkw1OT85I31MLlJLLm19eUJhMkdWUyNvUl1SL2FiOm5sYlAqKFtmOT0wcGRbcDhgW2BzZ29jW3BNI3wjLnpSe3J6PVo1XjFwe3FAXWtrZzBvMkVlcHd3cG9EREpXKmpp''@;'; put 'put ''PWlMaUxZP05oXX4kKVlQbHgvfSZsQUAzSipfcG4pNDNSbn5UMSFQWEVNcW9UPmdWMUpCKiZzRVd0QiZATEtPRlZadkVibCg8ZiJha0JZNiU1RyZkOCJXN31ZNlc0Lz4waG8/MH5jLmc+WS8mNzVLSiwxfV1eQWpUTltbOz9nOit4MkE9bmJeMCsqLDJHLnUpWGJLciNsRE9mO3tTPys+LGQpaFgj''@;'; put 'put ''KTglaHBLSiJQOy5wIXBURjI4biE3NDZ+NzBHZHlyYG84KGBrY2VMKXp9TEhBSzokOk10YjNud3g+THdNbSN4bi8+ayJKOkZJKEdWbz9mOk5NKHhFd0RMdFZRZ1g3OSEkfkJjc2M2Tngic0tGeDRyNSVPLCU7Q1siKnNWZVlXbWxXVSJLP3xdPzE9UlJNa11VRzc0YSVZajZXY2Q+eHUycjlHRVUs''@;'; put 'put ''cWQ/JSRKKTMzPFJVbTAxNntSKiV+P24rUnwzT159eHIrJGAzX0RwaT15Mj45cltifE99XXE/OXJvPmlHUEdQUkdlIW9kTkJUaVJVRXs6Il5NKDlrWnh1MiFJeD0jcSZfbWplYHlxRT54VDVyPFNmdTFrRnI1Jm5GZShtYTIuS01WXWRFWkplcCJKZ3U/LnYjdG4qfHZSSS42Tjd9Mk1bZCJsMj5+''@;'; put 'put ''aGpqNSRWK2FCJXR3enVWaG06c1VTSU1FNSZKWiJncTdDTjxORG0pRmVkIiMxZX47QytMdnRRKChbX1NZSX1dIU51OnhNRkZGPmRzfHlXM3ZEPV9lc1FORGFOQi43ODN4TiE/OHgkSikxVVNhY1FDSHo7KlBPR0trSUNZWD1XYWM3TlAiSjdJeHUyPnBNUUleO21oJVs+MG88c1F5PlI1ZnxqR3F1''@;'; put 'put ''YCEyYmteZ0UhamB8XmBpL3Jqemtve15PPnUoVXF0ZXNkZz0uOHpeSF47U2ZkdklsZn1oVSNKJlUhfVpHYHRYfW9hWGtEQG9VPkJSYzp1UjdaeE9pYnwuWF9WNWZ3bXdtbDNhfVF+XzMrPC9JP2dmfjt2TXEjaSh9KkRES0d4ZXhQdEVzSDFhP3VyczhbNTJoWkM4dXFrY0tzYzJycXVRKDBPWzBO''@;'; put 'put ''PyI3PFV9NGVIWikmWE56XXxBM2slOVI8SSRWOlhCXmhkb143TiQwNyhBZXBRUF9eU0ZxaUpkXXc7VHExaHt6ZVI9OCIuYnAxakohPW4hfV49JERmKWJFNXF1RjkjYlVYZXVHcCpfJnFKWmt6clZybzJDP0coJVg8LmY9dnVeJEZfNHV7KHljKllzfHouYGdZPUhwUlhDVz1sMm4/JT9JQVtKdEY0''@;'; put 'put ''MWVNWCFYYGlDVGYiRzJPP3g8ai9oc0lWQjxOMUJFYilVOUwqY191TCh9b2tBPmNeUVIjRDRdNjwqKEtobVZoKmFsazghI3VpNHZ5V3s/YlpYYkl5dmFPYU92fW93PXRaJUNIWnJyXUM4UEBedE1qVno7SGdUO0ZXY05nTjFXYVcuTFQ7eHVgT3FpKnhiUz43JlorY1FFI0BLRXloYlA0XVA9PC41''@;'; put 'put ''a0xFTkgsYH4seDlmQm02dnZwJmxILGhWMHEzYlJFJm9IdHZkPnAlR0lYYGw0YUxmTllxWl8sai5HVl93bThmNU5IPTwmQlYjQUdQN0RjcDFTbDtSZU5KSWBkZjJlcTc7dnYoQTkyTz53bEhlSCJRM3J9XV5dZ0chPWJDWmBhOC46b2V4I3RIVEM8fXUvI2c7Mnlyey5kVWB7az5OS0JvZiJoWWQk''@;'; put 'put ''InNHbUszPE5iPnlyQD1CX0FxOT5CZSM6InAiVDI0TTZ7YjhiOGJbXVckP1M9XiZsSDl3ZnZdMXo3RjtAcmZeL2gzJUpYbDpYOzl9PTJYJXJCJigpZ2F9Q301VF9zVFovND50UXNJb0BEUypTXWB8XiUkekU8U3F8bFF+TGRDN2diVUNtS0FHOzEjLDclMFZvQz5GMG11dlsjcFJdNDFYQGpoWzZ8''@;'; put 'put ''KUptXS4hUTFbXkw/b0hSOkdpWSVsc2ltWEt0M05iTHtrTWlkVl1kIiUhY1dtYWltWE96fGJXRTl0VWhMMipXJGZXMzIzN0A8P2sxN0tKP0QpJFVmdTh9USl1KiovVWN5fj5nUjdaIUl6Kj1PU3cybGR2IXpocjBIS0E3d0lRWV09RUAoUF1dMSpmaFtGIikuTFUrWDcyYjsmSWxOUklmNkV7LCFz''@;'; put 'put ''PVZHWjt6T0lPOlkjTX1rbU5AenJ8KVkje1ZmOCUxSj45cm9lSWJidCtoUy92fC4wTlR4MDpfbTB4VUNMaldRaHx0RFpOMkVCMGQ2NmhlJSpiSUwhbDw+fShOREI1ZUNpLyFVMXQ0Xitkek83RVt6KFF0N0ZmJjRAeUlnYVhwXmNEOFdTe1RaeCFJMn5NJSYzcyhKPTgsN0lnbXh2XyV3dlhQdjFb''@;'; put 'put ''RnNSKEhZTU9GZVAlajR4IU90eFR4X3Q3LDNlOCEsbTNgRmlBU0IyQi5kOSwxKjgxJl1kPCFBZUI4e2JCODp3UzNROEI7WF17bTp3LlhlOzsmUEd+fXcyPDIlJntFajdlSlM1fmRCOFl7SzhBZUI4SmJPeSpmMjN3K3AmI3hIej9ILC95VXg1b2V3d2doYW1bUUAkPTRwMCkpKHcvdjlTYVlUXywm''@;'; put 'put ''Qjt5clRfaCN+XkBFdDBAZVRbMVsxaCNLUGtVJG5UKDdiOWw/WkR4QjdVLFgiPGBYXTVvRkplOnApY1JsU3xTS0p7QkJ7Vno2e1BuKFFMbmh7UWNFWkdJcFdwfC8+K0BYPWtbNDw/OTxYWjlxPUl8Z1Y5SjZYU0coIjJaVWoxMmhSNWRVUl57WDJ6cUgxdkBdej9FVG0lXXoiZEI4eGJHVDlnNT0/''@;'; put 'put ''VEhbSXNWd3xiZiY+QjhOV3Fgcmw+Q2JmVz1JOE9rVFRHMCwhPyMuak9aIXBjOkAxUU96RTooJmVDLzU9JDooOWNwWigrdUMveVteMHZyWnpdZSUhO3lPbDI8Rml8PD9xcTgwaEMoUVQsalVVaFgyVnc1cjJpeFI1NmRgLEd5fCpacnx+LkhZSUxFc1BAfWpGdVQwZ11LUTlSd3RPMHpKdVpoTkFr''@;'; put 'put ''UmN1UyMxTVFaMm5hez99djhTTUVkYil1MEchcXFhR24xJSRYW1IpSHxGVykrPiUiNnAlKk1QY1tSRm05RjEmJSVQPm5QUzJObCg6X3pwVE0iWSVOb3ZhYT5MdmY8bTp1MW41SztALmxvZi97YC4uLyk0VTQiXltqNy5Hd2s4KGcuSzVqO3cuQDM2ZVEyYVAhPVVAPzZPUjFfM0lAdCE7NkFZI0xo''@;'; put 'put ''OWN2cF1CRU0xMiV9d0Jkfi4od31WNlt3Nl1WdjI9XzFWQXlYb1VOfWsifUVvfWtEUj9hbzIiZGNWX180LFdlX2VMOlhmdlN+OklbVmxKPFpJUzRvPUIyWHh3QkB8ViRCdUx2VllVR1YwblUzJktaI0AjNmp7cWAzOHluOnJ0PChxZThbaDwwX3pla0xwcDRLblU5TFlYZD9eUWlecEJsNClFaXw/''@;'; put 'put ''bE1CdzZhdlMpXWZwd0hXdiNTJTg/K0BIRmgpSmMlRj9DRzk3eT97SDNKfWI3JCI8ZG42Ni88YTR7WkpzTy8/WzI8Wm88bSUwVSgkMDNxbEllbTcuVT5Zd3YseGZFTXNUdGQmfWhpUE1wIlowVmlDVTpIU35gQndvXnB+VTo6V1JnTDVOJVVzT15sQ1JoLl45aD1udnklUmdhU2U7bGxURWdRWVln''@;'; put 'put ''byFGeWZSOXdzQyZMNl8zaz5fMmJNQlR7cGxwPFJpU2svUVc+RWk/RygyYFowdjJCVj1OTzwpdCN2UWRRcn5gMj5Fem8vM3pEdWxHOE5yXTZuL0J8a25mVEZAQnQyM1FYK2xOVFZVdzNIbWk/T2s4Ryw9QiMvJCk6bnVfMXZbNFNOPEJUMCxFZjBIVWtAbGNtaWVAWkZQWGhTWjx+WDlyKTo0KX1k''@;'; put 'put ''dSRsSzt6XTdlOCp2UT5CK3tld2FdUDM9OlZlKndLZTpFIXguN2tncWYqRkwhcXUwYy8iJCpmT2hmL0FzMWczNH1uOittLF9yYXovMWR7WWZ1JDY3bkokbGVZQHA4X197JFhqKHtIcD1lYWgjLDszR3NkJDl9U0wiJnI2d1YoNkJAXjlPVkpFaHteMmFCejZvQkFbOSM8TW1oRzBrZj9MfXt6QUQ9''@;'; put 'put ''OiRLa21XWChVQ0IvKlo3KmhBU0IyU0YqaHYleV9DSzRPSyo2TCl+JV43YEZ+eERFPCwzISE4cHopJjt3MV1kN1o5N3VGS2tBU2t3Pyp2NXBKKkJKPmIySE87TXM/T0M2cWc8SCRfTHF4VDczaExIMF9TMUtzPk8oSWlgcnc8SV15JGZpXnhPdXhecC81KmMmeHhyXXZdaT88UXpZN2BnIk4iRk0o''@;'; put 'put ''cUoxTS9QQUdjfDA7bWx4dHF8XW1XX0dabDpJK0RUbkt0X3c3Y2RNMnxnR2p5REgxJnZSb2QkOEZ+Wn4kclAwWy5wSH4rWDBacVt3ZzROSkA+UTU3TGlnRks1fUpOSVVRUUt3S35nWGRdX3N4bDksX2tNTXg0Kjo/fCg6enVSRjo9bkFiWSwiLjRNPUV6UTFxY30vZ2RgRjgjSE1jKU9rXm5Vc2pq''@;'; put 'put ''UWpLYUU7PztLckY2RilfIkxmfFN7LHJaW2E8T0Q8WEclWWFlaj9MW0Z7ITZaaiE0PG5HfUxGekoybjJHbiNAcylKS2ZWWEBLW0F6PDA8MFdYVGFsMGZGcHZHW0g+RGxKP1pmM2M6cHlgS1tSO0Z6Q3VGdjtWWVArbGw3UnU6YU9bXilnfDMsb3ZgNmp6dXZ7alpbJHJIW11HaCVPUS41NDV7MlF9''@;'; put 'put ''PUlJbFJHbExBeVU5dk1HUGw/am5kOUR7STwqKUpLZHhmQHA8Y29NVjFXM1ooKUhPbmA6XkJUTVhhYVcsclVEVEh9bzl9XSZmJWw0T3NpfC5UVHFYP0BhaSpfQmI6TjAlayMlNHY2dD9EM1Iybm1YTUtTJU01UGR5MmhsP0NhMm5TdyU+LGpdLkVzJGNFW0NAQUBscFVkaXJyU3pyLlFVeHFUazc9''@;'; put 'put ''KkdIIkNfM2FVNzt0YyFWeVV0XXI4dT9yZFFOXkVQfSkwXmFBMzhpLG5+P15KcW5DTXhVKTNgRVZNUV1rT0hbJF4mTmpWcDl5VFtSOXokKkY6WD9kWjtKaDNdKDQ7ckN9aXB2TWBQRiUqU2AlITQqMV9BMiUrfGp0dndDOElQeDUmWWRoRXt2MHwrY0FfQ2EiY29UPT9JJT1UNTF7SmkqIXpAaXxS''@;'; put 'put ''aF0wI30qQGtPXWc/dFJZfjpoSjE7Vm1sOkd4WmwwOGMhbGBRNi5KQGV5cX5dKipGUV5fT2pIb3l5Q3dGVmVBWS45WWJLQiFfMy5WKVlEdl9iIkFke2IxLllkYUNPemtgMStVJG1zNUA8N2FZX0BJSyV6JGVSQyssbTlCZ0prKmkyOUI7LGlrUEJ0aHcvWz5EaFE1ZHR1XiVUKU52MXBSbHxTVmwz''@;'; put 'put ''WndkQFdyc1Ujels0bXpQLG96MnpmcHwoNyNwdWRIZDFqYG0iL24saCRvOVFVVFJHfjYrazNPIXlMdmhZdmo/LEtKJiNmWj5qNn5abHd4U3p1Mlp5OFshMThWLzJoZiFGbjN4Syxmb159OUoieWpdRWhxPSVpT01gUCEzRHt4T2dgNHRlJmhjUFI3cmtDbkNpLG51NWlNP1BVMV9bLjlxVFc1ciJA''@;'; put 'put ''SEt0XzgzdSVZSnJAfVgwL3ohYlg4QFtPI2ZPITs3LiVaN2JwKEFncWdIMik/Z2g0bEVuRCYrNzorUlJOdW8qbi5WV0xYKmxxVn1VdyxLQFsvUSw3InZnR1pfTGpNVnkrZFFoN2BsWXxsTiM9fXZgPnY2PSN5ZEZiZ30vbWguNEgyYl9DeztVYz5rTFE+U3Fydz9KRHdeb3xBTnE/MkVzRUpCS0pf''@;'; put 'put ''fTYyYWBsX2g6V0dLSko6V24sVyo2Uys8dS9KIyxHJnVCbzJWVzN4Wk8xU0Flb1h8XX4ic0tSTituK25VciYzSjpjZWlxWDddMEZvO2VzUyZjXys8OjozcHk8RmRneHcvZlBpVTRiRVhsPEIzOlU6RDR7cjxCdXdOZW5CJUxTd1p1YzB0OkUkQEZtOVFZV3A2dnxdVV1iTCUjIVRJKk1xQ3ZALlsz''@;'; put 'put ''am5ZdlpHUz97MyklOGVoRCNyXTB7ZHhpP3EkK3gsVW0hSno3PHFfbXcsVW17SmtPcEhoQkBfTy9qSDlYUXRvNj9eMDBkWyRBKHJjTFl3RSt4WWxeb15jJiEwJnsiNE9TdGkrPF9OMW5fOl9oSl9dOFZ3dzdmJk1xLyRAYDYzJCRpTUtnTlB4WFRqY3xGZCJSMXhjcHtRXl1wTFVFRXpGZnhfb0FP''@;'; put 'put ''RiI9Qjt0cVtXejpFWXw2aDV5STIoek56elo9L2ZXI3lMWzN9cT1DamBXdHJQLmwrNExmdjZSfktePFgiYFpZNGpYKUAmfjddRjkuWEo7TFVlVSNESURebVM7N2R2WWQlQDVVRypXcV1CQ21BNSo5RFoxWzlqOk8sWCxgSFE/N2plO0YyZFZmQDZUXVEoYm9OcSZhZzMmRl9IO3R2Z19CbDRCJGxC''@;'; put 'put ''I3RHZjVyMWZMLEF5S21CUSN0ZXxDZyFZZEk7RHlQL1lhZ3YqIkkzSntpbWVXUkZCb3VrcXpLLmhnZTQ8KSpAPWphMXU3UEZQakR3Uj9GWjwidUZBPCFdQGFORyE5SDguWjJdSilpbWVfPT1uQURaZX52S24iQ1RxTz5sZEd4NzMudiU9ZEYkcDl7ViFCREx8T2FbYEh3QmNTPVRuW0NJc2g7YDYw''@;'; put 'put ''OHs3Tnw1WkBDTHxHcVp1L0gqYEhTbS5jNFVuS0gkXnhoOlhVJSUqX3Q1JGUodD5LTVlVO2YzYEdje2BOUVohLEp9dWl7cEEuYlYpO19Aa0k9fGBZfjhGSS5pOSVXcUteZUJhTyM7emsrbDR9UXU6KXJWMnhkUUkvZEhGb2ZlJHFjVGUhV3FudE1ER15LVUR+WWd7blZ1VER0a0pRViJwa0tQZSpq''@;'; put 'put ''NkREJi5jbmBFQEVJTHc3PiQwNGxCUzpeRjdZZFUjeUUlITF2dH5YRSosVSVTSldhRVs4aVY2TGk0alRITU14d3hqRWRgL2oydFkvdUk9YUIlS3tWbTg9NikxeE18VlFjbXQpY1hSNkIyVXhoXzN5dUsvZiR2LEFpTlFbITI5WTVjKlpWSEYmfFcrPy5EMXA8V19vcik3VyVWRiZDMWw+R3pCQmBv''@;'; put 'put ''UGU6Pj4/cGxiJSMxPFtlfk5gKyNNRlVKeTQ0JUhtdzN1Rj5OQ08wPHpXTjVka1ksciNESmFfQCxwYlYkdE0jPn14VnRoaFpIT1hbPjBKYVJ3XWxtSTpkflV0W2l6Ly9iVFhJN0s8Xko+eXo7Y1UhKTV8V2BtQTVAS30jYnhzXXlfdjIoRG0xd2RpOmtLLyo6eikjancvX0sjO0xYbl8jLlYlb2pD''@;'; put 'put ''JE47P1lZUWx7IXoybD4pY3hhYmtbSSlRWU98UEVdSjBYKERIU2l3LFVtMyt0QHhnKWMpJWAjcD1WQlRpQVVQWHRSWjQ/enYofilYQSpFY3h0djdjaFhPInV2OCpIMEpWO2FZL28lQVlYTGg/dFIhNUdYfjQ6JGFDTCwqaH0pPS5mTWdtJmA6Ryh8YTNsJXN2Jjl7fHF5YHloV2FNdW4+In1pTU9F''@;'; put 'put ''PCkpcH5pK18ydSp7QDQxITJmMFZFTltFdFcpREhUWFtKWGN2MWtVJVpsamV4PzBjdzk4WXhabDJeO3xvRSE0aHxgR106NVg5UjtIMXRFd0hoRnZ+WypFUT02YFVIckJZP2NdMk97O3tRbkc0RzAodFBTaTNQclhBZkB0JUYhQVh4SHN6WTRuMUVyIzlNW0FeWChzMSp6TDFDa3RVeUN1P1dvfkxx''@;'; put 'put ''KC5EUk9wKkpyeXA8V18qTDdbPHM7WVVTMlA+fjxrS0VBJW8mWG5rRXVlMlFHfFcmfUpvJlApMlA6XTtmOit1dzg0eXZNMCxHQEVuPWZ2JSREUmcuMG9HbTU7MSY2ZHJNcF0jPCU+JTNWcGo8aFg0VVo1MmhweV8mLy94RClla0BrSlAjIjRgIz8pKylAZ0c8cmtkNzJdXjUucU5aIUs+SzM2Ui5D''@;'; put 'put ''XkRMfWJhUVNDT156U2lYTHJzNjQ5Nl9NbWEuZiJWdk5UajBpd3k+KyJPWypzdXZffU0iLnM+S0UkYFNLIWRDVUVBKSReJDRYR0cwP3xLWml1KnQoZCF0MTxkTUpWd1JATCJZUFgpQE9fYChGRXpFLi4yPEcwcUN+KXpzfjRsPzVfbUdwUWB2aCZsLEJVUV1DLlp2KCNMWDMpVzd+Q0k1SCJrNUYx''@;'; put 'put ''fkpQVzkxSitYN1p5OWZOU1J4cmM9VyR6Zn1GQW5WIlgxTkAzWDdpSGp8MVRgRVtYak8jRnVsJCRPJHJpU0lsQypXOFl6My83SytyQjw8dnQmRlNZJjBjfElrQlQ6QlFGSTl7XSNwRWUxUy85RUBrUlUoYS4xUzorKztbXThRdDxCLnFUZTQlYDZhNGB8KyZ7TWQ/U3pMRmB+NzR1UXdrfkUoQjYo''@;'; put 'put ''bGcwb0l2Mys2eU5WT1l7KHtORTtmRENicHVTcj9VJV9PYDhaNXUkVnkybT1xcjhmZzg4cHF0O21LQXlCOlgmNlp+YGZvJG4iOllLW2tOJEJDSz1CZ1Y7Mz1taDEkKG5oSEpTQDJgbXY/cDhgW1F6RF5hOnxiVUY7KXIpfGRHbk8pe11fTjdaKnx1dyR9O3pxLCF9ODc1c2RkJmZoeyNSU35AeTJx''@;'; put 'put ''MGdqcTFDY0xMUTVLVVEjSVMoJmt4Mmk3NTE1NW1lW3ZpKixAflRJRTl7WCsiRWZSayQ1NSJFMmNbSiFpOk94cl4vd2NRSX01c2ZXIytRcVpuUH5yWVV2ektQbDgiPio6VEs/JmRgfUxQe3ZMLFQ1cnVFVjN9WndqazhYRU8/OVMpcihvNSxFZ0B3em4yOUEwb3F4SHEpI2l1bmkvaFQoSFIpZjhG''@;'; put 'put ''L0FpLy4jaXRuP3lZZVlFeXpsZzRJRElWeF4xNE9dQzBYXz4saHpEZzl6ZFh2cXF4SG4pPC5TNVlqcXF4SGspe3QvJDFQM2VDTkhQQCl1KVB1JkJpeGxrKVpyLihIOmhhRlM/WmpBQ1ElYmxWUjVqcEdCSFBqU2RMSDRHTjdpS1QsMWc9YzApLGE/K1B0MEtiKWkzQUVOekcwLGV1dyI5YkZvZG5C''@;'; put 'put ''I2MoNWpQWSpHYUhCKExfMi9aQ3RIYSw5T0JvfH4wUlJTKDhYTXY0ImNlcF9kZmgsY1J5OUA/ez17fCJlLE9DS04qNChyUCl3cy9nWWYmcEc1OyxBM0cyaHJINyksV1opazhEWncqPz56OSR0aDwoXl1UMDlyflpINF1CT3AkUj9tOXV6OG4hfXl9PyloN0UwP29hUyJ8dj90RFZpY3FmPGBfezg5''@;'; put 'put ''MFZpaF05fUIsb3EzPjFXTyNMTXpWMC8kJGVzIjVFWTN6O188TksuSXJVaCJJOkZmdTksNVlwW0AjdGlnJWZ8TkVPX31Jck1+TnNbcjE6Mmo0Lz5HT0pUZixxM2N+YkEhdT1Hbj44XlNfRVIqd2EsaG56NCNPMUFjUl5YTjg5NDQ0ZnQvWFpITjM4VF1GKS94OUgxIVovfSE0K0o+KFtEMXg6TCgy''@;'; put 'put ''SXBpfDtINVVjW0U2OV8jaF10SHIhbX5USy5ER2pZUTBZVWxxRF8hYkNOdDtPcT9TNm03JX0pKGdJPnQ+bkQvUThPYGQjLzZrbyllRVEoKHhGZiJGd28rS3tYUzxHX0F1UiEwWCVfa2JRcD9EaHYubEJJOlk+eWRdcVNxQCgqZ0k1dnh5PDBKPlRuM3dPdltMVDdJaGx7VWc6cGcxaFNeXSgpMFVe''@;'; put 'put ''TCU1MTgjbkprVkp9ViRMMzJCTV5wcVREWVslQUo7KmghKk1yKF47R3cyPThIfFUzNjhPMGJpcU59WkRbdHwlSG1+YVc4eVd2R3dAWGFFMClfTU5ELGMqdCtCWEhQfGV7U14+ZHM4VGU6JStbd2MwOUQwW3c3cnwuTjtWe3huTzBbLyIzM2pxMl8wV2krOEYldD1BQVRIQ0dbP3ZMW1B1UnBLN3hM''@;'; put 'put ''bzJ4XTw2JHExJjojNl9FOHUwV2cublYzcTM5cSV8XitiLlUlV25mLyxpS3JoMTpRQVhDL3Q3Xn1VPXxiPUllSmp2RDhXUm1XNEZSVXA7Sn44ZXoqaEs/JjRTbE1MUS51OzNHXkZeZWh0dG9uNHcsLjtHQWFjei88PV9gYX1dQnUjdylpe0JCNndEb1opQChPbTU3dTszcEplXSF2QEJoRE5KdXtv''@;'; put 'put ''US56ZVI1N2N8SHxdXnImbTA1Ol1uYnd0YTwrWUh7VXUxJk85e3dYZUVTO25EVFNLLDUpWGRmJkdsP3kiR2YhXzR6LiE/eGRmLiJPWUpKSH0xay47R3pzSVNfXjs6cEdQe2xEfE1CPG4haUgifH43M3FsKFI+TEk+JikiJFtCfVUuSShyWE0udkdCOzxNVzY7aV5FZFhrIXgrditvLlQjZnduRkxH''@;'; put 'put ''IlVVLFhpa0k3MVN9NDxyMiRRfV1XM0gmYiVhWFslQENkfVVCZz8lKXAlaD1afWlJVXZpTzxbaTR3ZzJLITtHJjcrOjxvZDVORmJYUm8zbWs8ekNOcltfTkVffjVTNGoxNjJNc14pSnYuT3NxWEVZWShbOHVIejw9Y0RhVnkmWjk0Jnd1RT12aT5vR1s7PHVaLHI/REIzYkBLTUVNX1s3eHssT2B5''@;'; put 'put ''L1NdUjR6PEU1KiloV0tKe0tVTUdFXz9AZ1tKOWJdJEEuMi5nYit6fG8saXwuN2l7I24mak0xKiJKYTgxbkFvY3s6KWZJcHlIY3FTZDo7Vzk5TmIrUmg0YDNDT1Ixb2BLaVssKVZFSDMsUkBfNEp3PyJPSzo8TXNOS3BrYU0uOXRVXlNGMFQ+b2tTc3dKZCZjXmUpN2A9TW1bSkoob3hHTFt4YG9H''@;'; put 'put ''MWdxMCsyO10ueCFqeWR9RnZpNnFfcCxlS01uZ1ZZVnVZN3dLbnM7XkFlSmtzaW9wemk4O3YldFRPWyY8W0Y0fnZkeDJMMS9uQFhgKTQ5WzNRPWRINjp2fVRUUWhsU05Ud25Ce35KZ3FeYEk8OHhiLiozXzMjbTlQP0tebjBKSDojInV4STpuaXJvdlA/S1lTKFZhMnJpUXhXaX5nQlBKfWpodn1F''@;'; put 'put ''OSlfcWQkTyMjJlI3cndlSmtzTmJ8SHlNLF5QflQlT0hkQzY2WDZ4eG1dJFE1alZuW1hdcy5ZZy9QWmJoaSslPmdvOWY/OD9BZXZvUnxZMXxiN24mKUVgN216WmBXNyF3MFhieypWZmc5S2Y1MU9rcUZIZHI+LnVGZXEkdVRlcWM5d3g/dlllTypZZ3s4JmBlSTxjWWdIMTJOeH5seUxnYXV4X2xA''@;'; put 'put ''fkRZdVlKbykyejJTJHVCZVJNbkpSPzpyQG92UlB+eyZxWHFlNyFUO35hXTp3N0ZsN1BvOEwvLzNvTCh6OSEqZWtQJExwM2w4WlJZZz1qZHYvRkEmMHQubkFNQC4wYDluXlR2diRXcyRtTkNMNDRqb0xtJkA8fms+eXJUXywmS3xrPnlyVF9ac3YreCxBbCZJXjdbYj8pZDVrYnFJLHF6VGwiQGI1''@;'; put 'put ''K1QuKT03Nk08eCwiJSkjLD16MEQ4bGYlOGdlWT0uMjBXZCZPUTA1UTJyZj9lRzwiT1tgKjZ1WkklZF4jK19Wc0RMTz57YTZ5NTVXWD9HY2YrPzJUWSUkaHlFcF8pI24xcExFa3QwczI0LDFAJXgheCJ1Ml91QkY8MS5GKXxVKChWQzpveV9GXz9kWmRGJk4sfGNGdVJbeXRiRGo2TX5UP0d7V04l''@;'; put 'put ''UW8+eVE5eU1FYG1yT1RSK0Ake0kwd0RDX1MjQFcpMWpkTT5nSSpKdz5YWjJQLGd5KlUuemxEX0tNS3MvRWk1UHoycDYvPD4hSi9IJFk5WGpofCI7LCxbK1IhRWZLMFBdWXh0a1l1Yl9eM1dVQVM5Kl1EUC9ybzhfb1ROTilkUkdPVjp7WDFMZVJWfSxASTkyMVNJa0pAJGVKUHg6VCF2WEt1YTpG''@;'; put 'put ''JnQ/Y0x3PztDRyEzV11PUTJSKzE6R0RWLmx5SUJPS19DRyE2OThrJDNjKnNLbDxvd1lVImR+dmtyUDNsIWFwdWA+X1I2T1U1JUl8Q0M2YEhNSWlNbThDdlJ6MGNYMl47aUtbJUZfcj11cHxWSk1UIXxXfD9QfmZtNDNLPENBYU8jKDBxaXdmYkMoOCRIQG5rZSU1diVgUlJ9dXtXP3RTKGUidTAl''@;'; put 'put ''SGxXSn5OYTMxUy53K0A6d34ySHN7MntmJUl8cjpPcXVPJVFtSGAiVHJ4UExQPk96empLTFNtJHNaYG95V20rVWRDTjMiJStuLlZmfiQ/azA1OjJ6LjtbVT1FNF1YNWp8az5PI2ZveGtTTkhgNWVsX0I8ZFVDdjZZXV1DdyspMV9AZXcvT0tue0Q1ZmkjK3lOP3t8I3lKQipIZDp8Nz59PHQ3fih5''@;'; put 'put ''N3hrfi5eZyUwR196ZENuPXx+NGVAImteSzRdQiMvYDIvIyI2YkJ4LnNGKDZlK04hNHdaIU1DNVMySGElfGJjTXw6OSpuO1ZIfUZsM0tYbHpucVJkIjZxWEppc3dYYS5KUiNAaWNDcTVtVldJcGt1M3oyPFpAMDg0ViI7fUhXbzssVSNoLD02Rkt+cl1dNT49Vm5GVU1fYnFgfShNJS8kOWkrMWVh''@;'; put 'put ''RyUoIX50SWpFN11da2x3OXBpJF4kVFtNZHwsfWswL0MkVVY5KFdqfjUkcjYxfmpiMmgrK1RmUiJUJTY2ajAjNX07TDpqfDlnbSFrYEFrfkh5fEQ1NiRsKnJ3cSJMKzpJZFdiNHdFWmBBNkZKd0BVdnJzVXZVaFtTXl10NzQpVyhQZCRXejZCPjFiOUJTSmBeK0A+VnslWlV+NCZCbT9fck9fMUJW''@;'; put 'put ''M15neEBtWkNGOEBdZGNKfiFvZ1teKkAyZWReclJKVjN1RFlCUk8udnF4d0ouJnt1Xn1AXk4lIipDPmUlWV5+WCUkUjVxOHZPaTY2fU4jMj5qaysjWTVOVk4wQjN7UyVmOSw8K1txMm4/P0BaV0Rka3FgL0F0VzE4QChwfGJGcCh8eGVXcWZ6XyZsaWNyXl8pQmd2P3lLLGkoJFlpbGpfYD9hKzUk''@;'; put 'put ''V0pRXWc4RGZ+WyNvSzhBKjg5P3gpLzZGdyFqY3Q7eUUzbSxSeTt6djBYZHlhZDdnM1g8bTlYLFI+PX5YSElRPV5MYC5yO3IhXTFqa14xST17T35jZHdTVWc5ZTFwck9pbnxJLHpvKnUxcFsqYWksJk9pNU5sRGJAT25QanteOTVOMEliYyRSMnZNWzhecyZuKUY0KktVJiVNP2hDLD9CZSVzW24m''@;'; put 'put ''YEI7MFRFbEooLDtvY0BYZnZeU29zZWRyVkxJPjd5OWdYJHFiOSspIVsjPXsuY3BAKlR6LGBsWyVzQm5GaE9JOjl1WzgyRFJvKkxseDBdbU8pUyF7PV87TlEyVlU6ViVTMFohJTRmNFd7WVJuW3FUZn5jJSFmInJ5bEtYKUl5RTdtcDBKNHVUeT1tOFouJkRRcnFmO3t9SkhjQHkxXl9EQmtUaTQh''@;'; put 'put ''eiZ3WVckIX1hJFR7QG08PVJ6bEUkQlo8ISxAaDYmZDBrczkwWVRsZCIsSTNpTFhzWDpoP1QrRTZyKz1NPXQyMi9EMDJrRE8hbjdhckZlI0MhNz5ifDYqVCFgTiNbJW5aKUoiZz9USnxkTik9c3VlOGhyQGptS3ojRkBPY1NSUD1ke2o7Ql4vKUNMIlRKSjBRI2p4RyojIkwoM3FEdTN7RjFzXjJI''@;'; put 'put ''NHM3JHcwRl07cX4/fHZNa3xMNypde1hSaSZINT9iXjRJZlBRQDR1ZltAdEZIMWQ5YGBXVn1OY1c+Ikc3aEpvVzQ0NDNWKyVwciNiXX1rSjFXbEZsSDxiNyM+RGFfXU1udEE2K1Z2QHYuLjlBM0FsYEdJXX5tMHtEcihaP3p5ITtJd1FSJnkyS3lWR3ljd0dwP0dOeFFdR3tXUFtXMHBGMU9icWsz''@;'; put 'put ''dkQ1YltkalsyIW84OVRRalFMeCsqMVshbmZCOEFlTGEodmIwTyY+MnVEQEdHRiVwOUtjND5iOi5JLz4zMzNweUZaLlQ4JXR6NWBhIVtReGZ3R3A/R054UWRiKkIzMnFpN1U8PG9WMldrNGFfd19rd10sc1Z0S1d5bSY7KUZNbzJSbkI+dT81OXhLOU9tQkRXeHBkOmEuSFU+PV82MnVxbGEySXl6''@;'; put 'put ''diliSjZpIWh+dmM8cytDO21TUXREdSNUO111SlE1MmghJFI8dmc+O0BVREoufH1fIzp6dzFzSkg+cWJJaWtKXmM8ST1nels8IUFlRlFINS9lRjhxdGNxOHpIS3pOXyE9OWlAZ3o+O0VJIWkzV10yUmArLl1CIXFRaDtGP14uImJnY1Y0PXF9JWxAT0xKSD4xMmglc1Elc19wTnpJeDNYcmV4ZX0p''@;'; put 'put ''QF0+P2tHU0skXUVSYUdoXmZkP1MpIyY7Tlk1Tmk4NHBmYlIqNUs2IX5TViJDWH06MGZFOCtAOGdCOG9lQjh4YnxZT1Q2OjdeWyF4VTVnUVBoYUZ5KylUO0U8akopell0ZTw4ak5eUWUmJXBmbzkmOzBebnAxb25zRHUwfGhjJDRnUTxFdVA7MXJvLz1YYncwckAiSW1bbThhWz1YWltXeGNlSzMl''@;'; put 'put ''Mjl0P2VDRVQ5KkR1KW5mSl5ucCR6WDFpcUd3MSVhJTt3eGxKX0UzXSsiUkpyNDN+b1NUY2paeXFITyZVVWc4PEA2NDglXjtoOG91MWc6WiRsT0Ndb1lKTT5QVmg/ZzdNU01NVlN5UGY1MC95eyxxPS4xVnFhW212enNfe3xUYGBgMlBtWF9wWnBxN0tlcG8+PWlbfUdzSWU9Wns7Yl9AOl14O2V5''@;'; put 'put ''fSVZVUl8d2c7cGNbZWFmOUslSG1yWmopPFlObWYqMjp0QFFeMTIhIXc5VCpOailEO3RkNTxwcVJdJVFTKFAmLzZ6czdrYEd5PTBPU15AJTcqY0NwJCshV3A2ZlYmaktkaTsoamA/cEojOiFrPTBZaVU2RnlUU0dUITA/W1MlPExaYjttdjJGNWgsT0Z6R2pKeXRZey4pYW05LFlvdlI3R00sJnFj''@;'; put 'put ''QF8wKC8xWCQ/NkwkU29XO3prNTdVdEgxbHQzRXlQOH03IXFRaCNafEA4Izk9PSo+WlAxcVhWZ2ZgeW8mYnFoZz1Eai5VXTJxfEdGR2w/WX10SGxAWS9TWGpPRClEVToveC5beipLMkdUZ3EzVjlGT0ZeYzUsNDM6SyZnYVZYYj0oblBwYSteNTIkOi54RmRnVkF+LztFI0NlKTwrQ358PHp9ZGM+''@;'; put 'put ''TFNVKXglQ19NZSIlYF1ibUUvaChGK24/KFslb2VqJDFzJTsrKV0sQnhEXlojVnRedUNtbWY2eVVCOEFle2FWWyFGKV8qYTsvS2g6VW51MHxUYDBvIWV6QzA5ZHNiKyx9Nz0kOUJJOT5JeDNAfGxAP2gmaWk6OERbeDtHI2RxR21sYjQoW2xwWlBjbl0obW1mUzhefT9jLjhWTiw5RyxrcS5PcEko''@;'; put 'put ''RUclJDAvZXRdMEF0PVVGIVg8Q1lCcCRZZlJtTUNTREl+b1UldXhVXSReRi9NLHZtWGVTRyg5QHk8eXs9KVguZml8QWVVZzhsMTIjaEhocVVKUHMqblZGeSE5Tjk3Y15beHNfaCVEMl9Tek9DMUZ+dC9zNWo2cmlGUV13N2ZVTyx+TngjfHlGJjprQiVwNHllai56dkxgbztaLHZHVmUjJTNhTSZd''@;'; put 'put ''W2JDJCh6MHddfSgjRztucFFYeD5VUGtZKVdkYzs1U1tIN0N3Y1tGR3FsSU8weWVqIkZmUVdxOT15RCVWfU06cEFCR1FhPzFCNVNueEUrJE5XI3RaeiQmT2kmPGxzM1lSM3VgS3N2QTxaWztCdXducGZaSXZaNy5abnxQV1JGfHFNQDVlK0RQTnxPdjByMHZEUiQrQ0hLYmV6eCVeK1R7dkozSVBv''@;'; put 'put ''Vi5xZ1V4Y11JUTIlc1swUmJ7azU2XU5zMjlyV31KT0RNaFBxS0JubnNLNl0kPGhCWUY8QDVyVz96czhndGAxRF42aWx1JiUjIl9WP1o1SHtHfDRmY2ojRmdqQl1rIV9DVilfZF1sKSxDUDA1M0MmKVBnT3shSEgjdF1RMyRGaCU5bCxpTFRwVGlabiNnPltWRD1kQjtmXSFkMmQoRy9WJl1GNTE2''@;'; put 'put ''TEN6OE9PZU1uI0F5SElscjNJdE5zKkVtXyp4PkdJbEt5UUMjRXcxeTojPk10ZFM1VT1GWzZ7L2s2TCNkQm99dyljcjZSfm5xalteZU1yJXRIS0NFNlpfQEtJUm1QdFpWZ1A6USlPIW9AJHFkRyhAR3JLOmt7Snh3V0c8ZHVSeUNRY1EoaT8yLjdWWFIvOHBre3wyJi9FS25raTt4WWZbV3JsVjNe''@;'; put 'put ''JFpGQHA+TGpAIX1gOW1oN0xnSz8qSTJlR3pjPSYwYWdvME1gVX0pKkBUNG17NTI1UFt5RXNpSkx2S243QXYyVl5lMlhIJnVfJWd8TS4qLigpd1YsYD5sN1Z5UW8vO2QqTCE+UFs1enJ3VWxlWj1gNzBaKSkrT2lHM1FefHkjPkE4dFUyZkNtazpnMFtmb3hdZlVOMk5NImJ5N0YqN3hpQj4vamM6''@;'; put 'put ''LCk3Xz1OO1ZTWjxAeVUmT2E7bmAiWUdKWXJpWFF3YShvPkd8JjolM3tsflsmdiF6WGJ8VjN1Vm9oSClSZm1kRF8rT3h8YktrWyQ3czJfRFNoTUxRWyFdcDNUdHM5R3c/ZiNeM106V0BSRGRjOCNZQEp6V1g8NERNPkk5NzxddExYYTF8WiM7S2FZNU82TSt4OjdtRUBkM213b2ZoPFg/OWo3NDJ4''@;'; put 'put ''aDYxaS5mb0dLeTxaWEp4ZkEsa1EiYWpzNn1gdld3NT56SE4vZXgwRCUiaVQiPE1qTDNWQCQ8Vzx3RV8uan1RY1s3JV5YXVVyO3QuW1BgaitAJC5nV1UxREBGQEptczpTVSNsPW0/N21BIXxlZ0tzQiYoT3pPVklkZjo6KSE0bDFJOnNJPVA0QnF7cmw4aFtnWGZyc2gvbjVySW5PakUpZFJub2tw''@;'; put 'put ''JiwzPmdoL3RFPDV4cUElXi9GI0k2OjcxV1ouKXg+WEFIdSJLPnY1emI9TEB8LyRMdWsxI1ZdZGRVRXpONlE4RSpUIiFJQkM6bmpZQkJsakIwXyhhSE02VUI1fVcxIi5lU3pOVjFsaylLaE9CKlkyX25pcTA8JTxPcCosc3VkJEBoYzRwcXt5el1sMj81Rm5wZjQ/YUVNfWNGImdgYGNZamZraWBS''@;'; put 'put ''WEclbD5pMERUbTpSM2olLyUkKXJtNyhze2FOMEZENWdEJmROJShTIW5VIWZVY0pBVEI0eHVOfjosYHlhaXNdfkxHPylAdVB8aDNnLHR+Y3RqPHswSUReKDtaM0dmTkx1bVVdKjhbeit7KF8hdVR2I05rY1RKK3tVSl5adk0xRWhoRz9AXUcwWSkoWktpKWQyZkZCMVdFPGNpdFNAKiJrTkIuJHhi''@;'; put 'put ''RDFZZ2N8IyNQZEdtXlpHfGp6JCwxelZZWmNSOypfezVfPyhfMWMqPU1dIV11JCVdZSQhejlVWm1Ge09PbERuTXRNMnU6W0hLSD4ydUZyU3coQkZISSFqXXI8LilYMWM5I2Q9JndvNmhCKF0wPz1DbWh6TGlJUkssZldZMzBLYDZdKTspXjM6VVQ3YWpFaWU6R3hhMlUmKE8lMH1hRFM+bChmSkQ3''@;'; put 'put ''Ol04M1F9XkJ8Yj5nXXlKMyNCTmlvU2gjPHY3R0YhTilPWm1ibVNed1oiSWA7OU58fFlLSEcwfDh7Q05QJHJLUVpnb2diQHlXeWZqXjFubyZSVDJtcnIrdiNeVXkwZGRuUUZYSWouWlUqSjZ9czkwS096dkhjRV9TPz1RSXAmb3B1bUdxcWFeMl9LPVlLXigkU08hcnk2PDhvfmdsOjtpaXp8OG1a''@;'; put 'put ''QDgrW2AsfGZmYyNMVklkan15Ty57KiZNIkBmRGhUOz9eTWNAKGxDKXdZRlJ+N2ElWjUpSksudUl+MXw3Ky9DXztoOjJ1VGJtJGFTOFEoajddRTFaKHV7Uzg0KGhuWnhGQ217RT9ARm80TmBoMm5NMFRTanlybV5OW2AyZj5TaCZNdlN1QVR2ImxKRzo6aV1CJXVzYD8pVy42TnYyOmVBPSJfczRV''@;'; put 'put ''ejRyekcqTWJiJVNZYTM1Q25CdDQ2XkssNjZiYyN5Yy9HVWRoJToyXk1WOWguTjReUXRzSFUpKS5uWjkzTlM3Yi5AOmwxJEVVYmd8cVpPP2FGQEx1RmY8WHxeXyZxeFlCMlo1TWY9Jjs2YGoqOnV+LFs6U0hYRjNtRHZ7XShlWWt4L3F8NUB9L1YwalFjU0UoNWxvcHNOMFA6OWpxKTQzXiY7RCs1''@;'; put 'put ''PCEsSWw/UDQjcGJ5cWRWUD8hO15zWVVaUl4pW1ZCKGBuVSVKTFRyJjk0K0tKLl5Tdl0xM1I+aTAjV3BvbEo5L3ZqdTEzJDFFdiVSJkYwKUZ4SClJP0pANEUsITlPPVFye0xgTyRgNlE6cDkwL1cxKzE9Z05xNk48cF1RVl5wTjNteW4rQkZfL14zMj9FTWxGYEReIUNlYCRLcE07OVt7VUJwenlY''@;'; put 'put ''UndVKjF3UkgrViU+XVlJIVp0OW5VUUVPWGAwI1lfJlZZeEIldWFKJWc0dlcuYT4xMmQsfVgiNjRTQW13e0tJZDA0dywxbyReS2t2d25qalhpKWR7QiJ8PWJrazdGPzxFPko+YH0xVj9iNzVXNCs5M2slVUFOYTkzfHp5dz0lZ1t2MXRjaUdBVy9aJnFLZykiSW4sPVQxQlgrcC9WanpYXnZYaUpB''@;'; put 'put ''UXJMU15YV2MqLFZCRUNQRHN5bEE7T0osZEpDQ2JmYmMoMzJDfnt1Y19zK0NxdDtQRG0yPHg0R3REZkk8Zm0wRXBQTWo5OjQsIlRjbzVXaiMqVnclSzJuLmo5NF5xQFMqZ19sayYlPyElQWolTStBK3FUZEEofHxQfk5DOzdAZl9aMyIwbiRRWF1OX34jVlZ3LzNdN0JlSXxvJlNZITxlI0ljIjlA''@;'; put 'put ''YkUiWzZtW25bXkxhfXxQYHI8LFFSQiRQM2FCLCxYfGhwP19GeihYLGZKKiljRERodX1UMiwyPDtlQSNEOTB1d0dZckdJIkc0eEVzXXJxRmlaa0FYKXZvOD1ycnAlWjlFdnxuNHV8JFtHXzNhTV5gNUxHNU9IJnw0KCZnbzlfdmpdZE4yWTBRIjREWWtPTFlOMVFJN2E4Sm4kOGtta0cxbFNkLnE3''@;'; put 'put ''WT5tOkdfLGB8LlguRnkkZSlbd2FaRF8rWzRxRT0yZFhqQCxPVjsiPSI7OzNlK2IpY3s3ZCsrbEsiNEliKy59ZFBNOUtVV31YV3l+Nis0SWJxY2peUShjN3VHXih1STpiZkRbS2RePEk1S04+bXBCVjUzdnIuTHRkMzZGL2lEITlLPD1vLDtIWEwyOlcmfnBAK08idmpaLGU6ZDdoUCRLdHFFRSk/''@;'; put 'put ''Zz4zTkZ9XjZZUVpNW0FoJDNheUV0aHZYN2ZXWTFiRlJ0OVUhan53Vn5vOnRjUEBIeSI2byYsKTpDV0Z8QD0oK0lacmpCeW9jVTxtK3R5RUQsckM+MmtfIX1leHprc2A3SUo/YzhvamxrPEE1YH1ZVF1aKmQpWHBhRihkNkNQQUY6VlNFOkFITVUzOXp4fUpwMVEpZk09KUp4JEM6YkRDbF4pNkw6''@;'; put 'put ''ZFRuJmYzJlZQX3R9cntjQDgxUFhuP3ooK3lxa1oqclAyTCRuJV98Snx6dyhkUyNURHkyKWBXNVluZ3VXU2wxUkxGUEMhcUgzZi96Km1xfT8lKmlweU50bVtbKFhGKVBoQTdDS2VFZWAoI3MrYlZJYXcuNFIjUl9aMURhN2xWVDQsUGU6TklRQEZ3VixpekhQezBuYWw6VjNzOzFYSzwlJDp2dnZp''@;'; put 'put ''Yl9KeXlqQDNxKX1jUjtaR3Q/P2w/TGJrcU1Gcl9MNGJWW1YkQEo2JDt1Oy8wQTBucjhVMTlGYjMsPDBuejtaR3Q5Vj5QbmxDVHRnKmwwLGIvLHBfM3U7OHI7KjUyc1NrT2pNSS9jU3ReRCVITlgmdHJ8fHwjaHV1b0pbKSxpcFNOVWh+THs2alJFd1ZoZjpPeDZEJUF8VW89emo4WE49WnQzJnMs''@;'; put 'put ''akg/JDg9Q014akZSN1RMSyM7PChoentzKjBgWDBNbzsvRiR8RU9NOktHLnpobGt4RUBxU2hdfVRuYypKTjNteSgoUmxgM2hpLmN8ZDFLX0w7OiJLI3gvcmBhV35eSmo/Z1F2NVlIc3hHXW1dI1NTIX5bRzZZWTZgYyYhbHUhRlpYR044aEpsTEFifi9yZVZmcitRTEgzRTI8LkY2QHVVQEtaNXhL''@;'; put 'put ''TDVMSWoqMS5KVld1dyYqVlUzKzkrSGo/P2BmcW9EaSRLVHdeWGZBaXgmQjlBZSJhTHRHLm44Q3xVVGN+SlF7TCppWjI5L0pkeGBTazByaz5YX15ITG9QYSNQWClnQTN1RiNaJVdLJVZWKUdkUnR6cm8sOkZieDFXSFh4bUl9dT8hYEZoIzo1ZjpORSMsdT1Hez0waSVqWHlIZS5JZWwlQHZWJFUu''@;'; put 'put ''YDFMWm5+UHtNRTdFJVYhO1ssbThVVUo/KFImRX5kJFo/dmFUaGV3YCNgTVkocyQvfCVLfGs+cGU5U2Q1ajZ4UF5VfS8vQDR+YjFoJm88eXIzTyI9QmVQZWI+LCkjLj0jIylzK1JlT0d1UX15QWhHJVBfei9IVFJzLF59X01uPSMud0xmMzh7R3pOPX0uMyJkXyNyeEJhZUh9X3FPVG17SV45aCN0''@;'; put 'put ''N3ljNCMsK3NTbWloOmkqMWd9MzlQQE5ZSm0wPXFsd2N9STNsMlB1b3AvX18jdk9keWVGc2pfXillRzFXX0Fxd1BdP2NiPTBEMFhgcUlYUkVwdGhUeF8saVswNDtvNTlTbyIxfUxJalkyfUxoKWo8eS94UWxAJUFXMW9rbyY3O35ZYU4kekVvNjVMbypvSGF9THtaLyhAdD0/IjF8THtaSjM6a114''@;'; put 'put ''flR8TDZ0PT9MU01VZTZBLkpLaz9rP34mI3RpWDxdX2tbdipOe1pnS0dYbD9OWGZ4NGksRytHKTx1ZiU0fntzWUAla0lXM1hCZDN0R2teeHcxM1M+RD5XQDhLLDZ7MzN3P301PXlfTWhfd21Da3pxUTdvITY1QHRmYjJjdXhufXQqeTN8eXoydmwrRDw4TT10LDA0SVBEUXdWYz1UXiZgKXFxW3RX''@;'; put 'put ''MjJxPiRqKDkwPmNTdyUxd0whaVl1SiV4d3o0JEloalpWYC51YER7JF98VFNgWkBRMDFgOWV4NjhDRCtRMHpiV19aM3x7U2svNTNKOEN5LD87clU/PyZaVSFOK01WMUpzMFFOY0YkKz4/STNVd3Y/LjMwdk9aVmcxWF09YEZ8IVVNIkYvI0V6Oyp8R0NHPj8vVz8sVX1zY14vZnUreV9oS0ZreCYr''@;'; put 'put ''M2UienlnYDI4SSJOTS5ZKkhqMzlkeChZayt9OThZayt9OSljZ0s/clVLR1hVWGt6UFhwMCRVW1J3d21bdDVKZEY3NzshfmV4eEMveV9uMyssUnlnZjBfXygpQkFwTD4oSkw5K1lPMWdmMDl8N3h9Nl0vLy9idiJFNypjKXAvPlp3RzJxVlZ0Ym5bP3ozOXh6WXc3O2Nmd0dsP0olPVQrWl9NUElx''@;'; put 'put ''N2g3UXpAdSUzIlVkVDpPZWQhQCxTIW1AKzB4dGJPKnZibGtFbGxWTjA4S2FPZVZpc0dKWUooTT9AWVBoYV8rPFZWY3RaXXxKR1MvY2JGMG5naVJbXiVaW19OJTgoYWpGMDN3PytNRGVkQjhBOEE4ampFKStnaTA8VCN3SyFSSSJoU31TWzVTe2I0NDRUezdMaSF3M1YwSUFhVGd4UyhuXW9sUFAl''@;'; put 'put ''RTwhQyxHWm9ZWFdSZHU0Z1Fvc243KDdySSt4IkleRDM4Qn01QypFWHh+M2BBNiFbKH5TIWQuQTgqNHhTUG5wRG5LRlljR301Til+RnhUbz1KWCxuQW1fXV1rVD5wNjFgUjVpXyhGIWtMPXAvWlFwSXAlJlNJTUMyKjM9c0wra21zTj4hQFdlPCNNX2NDbUhbcXshQ3QuODQlV0JUbml4Xj9xYHl+''@;'; put 'put ''YkUjVTREd3w+KzNdJnAla2JqKDlhfGJlXypuXmQyOCVzNERVMlIxJn1wc31uPT9iJFhtKHhpVm5renFjRW0rMkg2MWplQVBLLCVNM3VqY311QWU4Njwha1lNWkFHZjwsM25ZdXVIUEl1JCphUjVOeEhQbCRrRnJtUzt3X3dBVEo4MnEka2RRM3c/KTBxWzErZG0kfW1BI0tvTHdJaFJPZ2MyZlsz''@;'; put 'put ''VStsN0M9SjtGLilqelM/MCZ2QFpBKCx4NXROYm4xOTJPNiRAJVNWa0I4PGl6PHYlQGA7MEY8ayRka357bjk+Z0FSfk5xLGMsdGYjOVB1dVJIJEVEOm1PeEIqVUsvIzYvWm9PKTJ1STFzWyJ3bUZEcCs0WGI0NlR9fG5FV0wyfmtiXkF7JiEyWlhCQHtJZEMwJXIrR0hCcH0pImE9Pyl4T3pPJThg''@;'; put 'put ''MWwkc3QuNn11KGU8OFtAS3d8bilNM2tyanBWdk1nKTdeME8kL3hZdmFdelIpaChzUVdjWjsmfHFFQWFtMXwuRko+ZztLNS5XPU1tNjYoRzhPPV5VZkl6PmNSNHw/OFlCZlJ4cUh7VTl7dlpveGdTfG40dntaNW9CX2p4WUVZIS91bXN+dWlYczE1IUlLOXooWSgqaVBGW3YjMnw5UUwrWyZpZmwj''@;'; put 'put ''OTsjWXREN0tNMS5yaHopKitYdEQ4M0loL3IpNmhaPmYpb1FvRHtjUWt4RWdbLmxgPk1sYUVbMSxSYD1raD1BQj5yeFlvfCF3N0BSNkpkImEiNlE/WDB8Yl59TiNRPHAlT0kmMW1wNmI/LDhnbERDbSpIdDE5ISRMdTtfPHYhe0BPS2tHKFlZe3dfeTFUc21qJUhYIURNT0l+ZztGSGVmIT19d1B9''@;'; put 'put ''ViNzNSQjazVJKSlSR1BwYENQeGxEclhSfVtkbFFeJEd3bSpvYGhFIXVIZ3BJalohaCtJJXFtRHopXURjW3hgcmZ2L0d1YUoxI25wdn1FcUM/UzlDY3tgX1ltcjFSS2lNWSl7InddJDV2dG9BU2lGSTs/MHZdQmpdJkMpRmpDX3UsQ20rKTdGQXtBNUFhcT9qY35CczptRH5YMzloL0owdUZZXUx7''@;'; put 'put ''cj9gO3hAbnB5TjxDSXBCOEFla3cocDo/bmBZfTFRLlBeb31AT2JFVnkkbFgrQGV3Il5CfGlJVCVHISNlRV5WUXh7RnxiMXkjWTFbQm8yKH5RQThALjk5eng8dT9eK2JMTU8uIVoubDQ6YX0oOWguU3Nya28xfDMhVCFnZkg8TWlPPngsQzU4OFR4byxZR0tKVVtHbF9YNC9RMjE3LzcvN1tSOjV8''@;'; put 'put ''NGNIMCR+OkRQR1JjW3pSS3NJOVZoNlNrTlNnLnV2ZklwbmYmUEAwamByUz48RTpSUmptTjs4NldsUWdieEhUY1tRXXkyX0wpJmkobFk7fEh8e2QvRS97Ql4xUW0xc2F+TnouTU16VnVVXyswV3F1QjpId3whbm4mJWleUDNxckozYVs4Z1BUKWttLGl+aSQ4ZUEhPTB6WVN3MjJOPDlsRyQ3b2Fj''@;'; put 'put ''Ul02ImU5ZnVpQ0wpZyVQfWZHQnchUV0zT2MzRm0rYyVFa0F7KGtmOSl8YkkjbztZQHNbYF5YKGspK2JaLF4hc3lGMS9lemN9QTV8Rzt6RmhXS2NjU34xb1g7L3QhPm1wZGpMVSs7VylMJXB+O2pjImxKL1BZVWJ3Q0dZaiI3XVVVS2NkNjpeKzN5MFo5K3dHOXs1MVZRKExBUkpzTHBve3hpOUMp''@;'; put 'put ''UipxI2syNU9LKDNiPHt5SiJnVD9LbCY2b2AhZWElKDk7OjI+ekB8RjBZQmMua1hVXyIlc3RmMig8fCFsOD8qOyZge1h+KHxwRUN3NUlfYV9DPGR6IVYrP0NDdzVvXl4xRTRCLHxRLiVtS3M/MywwY31SMnpAKnhVVX0+SVJGZU4xbmtzZnlFVlAjQGtmK1g0PD1GOTd7TSFNcXVDeUUwaGIrcyRN''@;'; put 'put ''Z2wsMXg+bWFmVjBRPHxmRlN+KzBJUGhvPmghdiZzPyNfZnNwZ3hKTmdtWmZWITxuMH5AfUIxMTYrVnxdSi45T3A9UDMxJE1NaiUuQ2xdJTp6IUgyfmpWJTY8d2NJLmQuQilIfTNmcnshXTA0WUxbSmo9QEV9NTIuZFVbQzE0SEVKQCQ+QHRYW2VGUFtKYmAuP0xOPH15Xnoxbz52KGUoK3lEI1Zr''@;'; put 'put ''MlJDLndDR3AlSm1yYDNAR0lha1puU0x5M05Jal5zPDo8Jj10WkJUeHc7M1E+JmhVO05sMSNCfGB6ZFprfU47QTdieEZTendWa0syNj0wSCVXfTNXa0tHTV4ydXVqJmRIMVdNS1teN3hHXnE0R1dzJXNvP0xwZllhM1c8bUthXTkoWmgvRmghZkAiSjBuSzpDVjxURW55KlZZMy5VSVI0OzMhfmNA''@;'; put 'put ''JCt3Zzt9NDc3KUVkYz5CaTk+UXZ6OyVMdU16dHUuP2IkfT9DMCx7JClVazg2anR+UV1MciJoP1VJZlpnN0pBYSNnd3hiR0I+bUAzYCV2N15DTGxEPExQaGs2VG5OR3pNYX09TkFENSUjPEhQfmhodXIheSJWdj99c1NZYncsJWpjUHVySzNtZnlrWmd0Nkl5S0k6YHVTeDpCTlJocltnX2hVS3xA''@;'; put 'put ''Sy8mYHtaZm1vcyQiayQpSjZWVGdXWGJVKVc6ajhRTDY2YkI6VnYhdC9oLltFQHtpdEcmQj5aczI0UiU4RiRMfDhTZ1A1PjdmWSVsfGZNPGgsdS5Adjs5NHFJfUhpQVM5cT8pLjhOLHkufHRNWlVuJkg4Ung8N0wuLzg4aEVRSSFyb09eMDErb08iUD0uT1h4VmFdJHNvdWZCSGQwKWFVRGpnV3ps''@;'; put 'put ''QWt7MEZhIUtONiYpYzUmIz5Oan41O1ZRaT9dNW56SjZibS9gTm8udig3cUtjJjZAM2M2S1pvIkxhQDBxK0cze3xHWk17Mmt0KnI2S3Y1alApWCxkTkVIUnJUbWFBNTgvPC4+LChqYDx8LjMpWS5ea0RrOysjZ2c/XW4wSnJKQDZgWHFrZ0plSFZuWT5pRF5TYWR3Tmske1spVUhMezExRnF7dUBt''@;'; put 'put ''a3w1cWt3USVlcl9LYnEuJnchVDo/JCtBKCZNcVA7OltzKikoe0tJT2hzSnF9bEBMWX5na0lxTjFgUHo7bG5nWE5xKitlcWl7XTxpO31VfXF1aW5EZkI/cVtuO2FXbDdYOHJIODxvYyZuSTleRlElQH5VQD0vSzJrQnwoPiMpd0ZHUGE2YCp1STYhK1c0aCtHWkgwIjEpWi4zOlVsQUxpPDtCX1gy''@;'; put 'put ''WyxMZ0JfY3tgciZ7NFpCVHs9USZBbmRZc3BCJn17e0hRVDdUKjFsaUhGOywobzQ3UDMkKiEqViNrWUcyWlRxcz10X19qWGg/YWhZUSJnZVhTVjtFMnI7SlJHR21fWUkheC5Cb1E0KDAyTSJOeFYjVHwzT3teWF8rdiFGaU9eZGRPezJ8WTB1TmU5K2I6QkM2N1BwcUF1Wz54W3ZWTElWU0dDXjlS''@;'; put 'put ''Kkopd0w1ZWgrUShkZHUrMng/TVNlZEV9XWg/cjQjaCpUM0RsREY8ZjYwRSJNQUdwOl9EM3FAVlFEbXdPNyQ5ISNUaktlXWhBNUs1NkY/UEhgfi4hfD4ud3Rud3QxMGt6MCJPTj9FZGxQPXtxOCZVKCpWaW4uJStxQ15razshPTJ7VSp7cz9EWioxInR8PmR7Xz06WGxUPkQ0Tld2UEJIanJYXmoq''@;'; put 'put ''LnghZFRldTFoO2JsfG1rXkxCJm9RI0Iqdl1rbz1AOkArUmtVQiZ3M0lNO1FReWFMclR5Y2ovN1t6U3hnQ2JAanBAMHUzVjBMP1pFTD1WYl9bRmt6cEt3fH1kKDteZzRFMUhdVltvYC5kW0NqQjlwJCl1djJfIVFzanxPYSVeOipbbl9VYUU/KTJTZS9XXyp5PyQ+THtiJmcvY01DKENmVkpJfEJO''@;'; put 'put ''TX1BT0N1dUQ6dG9QMEh0NkZSQCFzT1o6OmB4cWsraV46dkd3LnB3MG1Qb29QNkhUZS44UmI5THNTKD0/MFU+anpbWHxBQXVLUlNAV0dhQVF0dyR3Ly9AdyFwL1JeKl9rNkwjQSp2VWljPmFEZ3l0WUIkbVIzcEhmfCtLeVF4XUZUIiJCTE5QdHUvRmFzXzdbM3h7QV9oVSteK0BqPm88P11QeF5n''@;'; put 'put ''VDg2aGkpNjglLisjOno9ND9NSFBYUEhZSGdkbylsInBfQlNOPE9jZnNhJGddSDRPSkRsQnYoS09DIndEZEx0Wjg0W3RmK1dhW3srQj1KaCx3Tyl4IXFyTDR3L0k9aXErSUFBQUFBQyJnQUQsVjI+UmYoQ3M/OyFhP2M5Sy92YmQwJE5QQShIOC9FcTEoLl5uWT5CUzowQFRDJV9fIWNCVTBAQjBy''@;'; put 'put ''NW5OI0ZyS0ZmIX1NPW9oRCxTRXxEMWI1IlQ+NSZ+aX5xQmx6JV1oI31TZDVlJisqYXg7Y3MxQldRR2NFdFFAU0A0NFZ7TDJgcmVabX5gJCEwVGFUUCFJJEw9U2FGNXhIXXZJc1BUPy5JQVV8aHdJY1U0Wy5KRGM2V18/VFJ2VHp+YGR8Tk5je3haPDtqJjF0VHBYNSRjJHkhfGlffkRuRzpfMXJX''@;'; put 'put ''RHRIKXhnQWNFenJ3XlJnTVNwKVc5KCJgNDVPPTcmJTExO2pXLDtfI0guYzNjLGZ9bTIrOF9jOyhKXnp9fHNNPyZdNHVPam9tKjMyTzN8QERffTk/YGMueFl8NlJQbFMzOlZHdmM2bFVCfjtMc3s3OE1iaUFEcmNuI2toeCtkK2BGPVBkPHZ7I2BYWHVlTC5PVyFZLmxxWjJjQGJ1PztHS1NpXzZh''@;'; put 'put ''aGJFWlRBJk0+UiVCe3hHNnA4VlVDVDo2SDc8RGopfHBqbUNLUX0obmI0eFRrOXR+NHBLO3MyP2xPZmlQL3Z+TjBQJDtrayR1MkRbMHFoRCp2THx2SF51cTZIQC4lKzlpbkZ3ODhqOmhPKkMmbjo0cC84LnFIUCZja1dePWAkM0EjMGtnYGIzcz1lZXhfaXhBa3J4Ij05VkQlaXE9ZGNXW1lbQT1p''@;'; put 'put ''JU8hY314TDIhLHx8YGQyInxrPCNCN3ljQTtgWGhMIytoKUkkdmNIS15LX1drRWJfK1MpXWdOdmFWcDc0P1A/IS8qdUJlL21lRjZBMGwkV2F3Wyg3fmpFUCsud1c2YzRfK0FWKSxNZ1pZa1Z6NzhhK3BSMlVCZkhpMUBlOSlBNSxRe18hMzNqNF95amM7VkNATDBCNnpHfjtfOFphcF5FRndJfTxm''@;'; put 'put ''LD1II3F4WlMlPUMob31tKVV9MSUhJFl5MkVuI0M/dmFpWioyMF9hNT8kPHI0ejpPa2hEU1ZbOVFPZCxjNk4pPmY0aXMwek96aShxZFtHUUxfNm1OdHkyKnBuNF53KkJCa2xzRUlxND8uXV5eIjNeUX1CezFZVG0/QyZLTkpLbytme1F2OjIkWkc4JDJ9NmkxVEU9IWl0alspJFhibylsIVEhQ3k6''@;'; put 'put ''Y3t4KGVRS159Zkc4VH4+I2puJmc5Nj15XmRpUThPZHZeYEt4PTNxRT5NVThOSCR1alc4emsqRz0iWV9sKmhiJDpRT2hdOlBNNXFVYDdQRFouUExSKWtnc0g5MEhOUjM+S2t7cyxCUDdFVFZqZ0wpTXZebExeNUk3SjVqeTlobElNYkc9eFkuMnFnRWkxbjFmfDY9cWhoViFYKDJdNzFPTz43aXZC''@;'; put 'put ''JW5nND8lcjF4ZmB6dF9fYGF4QE4+TUk4KH08emQ+WHdNWnMsTWhVZCw/Li9nL3prem9xPHNyNHU/KiEiWVpkWiM3MHtoJDl2cUNjXz9UaXB3O1BPYiVULEciOVgsYG1Vamojajl2O2ZuLl0zVCNaI1EzWCV2KTJYKzlAflJEcUd2NXJvOEV5VzhlcE1qMStaYENGQnlVZlpObilaMHtFQ057QD14''@;'; put 'put ''S2FiRlkwdztgcyxTVE1OL1E2e20rYFQzez5qZjAiV3tvKUNILEZ0WWpURkVFNGhmJjlYdTpvTmgzKlMhLyRIRCFVaTgifVguTGVuKTM+WSxWckYmVk8kRUdBPSt1XUxzX0J4Ljl2Q1htRHBWWnZ0Ly9LJkIwOm5XUH14TlRUYGZTe3JhXmUsVERANnhVNlR0ME9vVEdYVVg3ZjUhQlJjOjlyVXc3''@;'; put 'put ''fWkvSWBMbUJoR2ZUdzNdOix7RzV+XVZAemhjbUouQCk4XzZTR1A5RihjLm5Pbm8mdzR9KVhRWUh4QyxFcCYpL19LeUc3KCMsdEpsV2t4SD8qdVYrRVJYb30vXW9vZGQ/dzkzXm97Lmh5UHpLWEk/IUhgS2IuQFIxeC5+YCpSNDZTfC9xRmNaPihpPC57VVJ9IkxsJXI6ekpvd0tuJl96bnp1NEpz''@;'; put 'put ''fSRFbktKXUR4YGRdK1l+RyNvX35SRyJXfEVzU0MxU2QxbFM3JkxxfGJqc1owYjJVQWljPHNjTlg/THs+RUV2T1Z1TitFWGgpXjtMcz0yZVlnKzd+I2tQenUvbTVqfktvRUJgSD0wM2w7PDROeU97emp0OD1qJit4V3VzMD8uQCgyV2BaI2Mqb0d6X21dLDFEXW1UOyF6Wlh8OGxwIz8mOFkye0Yz''@;'; put 'put ''W2UoMnljLklSQlMvXWIpfCIqPzk3YEpsNyJUNXZvcHszPGpWUVBKJDVkRXZ+NGVNT0w6RywrQVd3bSxtY1QhUnQmQ2MpfHI1SDpoayJCVmpJRTRuV1RaIVdKOWdeNlReIjBWPEduR3dhaz4wZVM6ST1sbC49RSFMcS9CR0tTUEJheDF+ZzU9UihgVXU/QW57Y1F3eiVyRUh9SVdsQ0ZYPnR6TzdL''@;'; put 'put ''VktoKGBYKTRVQHFGMHZLcyxxRGFGLC92bX5OfVUpSTdqSn5BZj9VX3dxKzolc29nWzM1LG0wPkxFJlEvSSNCSGMqcXRxT2xSe3xkNWVzRG5ZYTQje09Fd1h0NWEjdGgwMipfMDZyUE1vKlpYbXc+SnVWM348Z2lsPHpCckE5RHsvdSV3YVtkN3ckTXNuTV1yZnFYVGJlPCV+WUYvaSZIMk9Cb31K''@;'; put 'put ''Ukp5ZnoqU2gsOEJJQS4/aTs+ZHRNMW5LK1YxWlNZe3V9OX1eSFBoOERnN04lc3pzWSQzaCpHKWglVUEmMFAue3dDIX1abUdmNEEsJmJYPyI7NUJzdlh9UEAzT35nYHkvVzssLHMlcUZsWEIqfSlbNUpSWXhgPHd+VGp9SVZFan1GPFdWK0pnJWVkNH5DOHRQQUhjTDdaNylJbXJrUFk2V2phfEc6''@;'; put 'put ''NGUzL0suXVU7JmJwUC92RiFyeWVGXUo/IlhLRlFJU2BJRllvNDlkKj5JVUclJEc7ZVYlOHpDSDJtUktyPWhrQTFWI2RkNmJhTVtwPDAlcy83TFVALyZuSUtUdmQzcm1jd0ZgNFBlbipAYWt2ND1kXjEoSiJbekR9YzNedklvI3o0KVFKYF9BWkJMOiR6MFVteS93UiQ0cEN4R3phUTE9Vmc0ZlJY''@;'; put 'put ''P3JGMEZoS307KSsvVjo0MzFXfHAmfms0dEhdKHxaME9AdFZDbWpvMFlaLlZRT2dZV2xTVFtlTl02MFMoaGdCdml5WHU/Wm0jcmt9a04pNFQvYWo/ZWx9TXddcC4iY2t5eiRXSkF2VnpfMWxWTzcmO29YfHFOaUBiZm8oUnokWHBPLDhhR2JHPS8vQHQmIVYpZjQhOUtlbjVFQSojbm15MnQyZHc2''@;'; put 'put ''Y2RYXWUmMj1eS19vUVVscUFrNChFO0RfazBRQmorX0l0I2B+QUJjam08ZXZRSjMmWFtjZ31oTVVSaGlvW0NjXWt9Kj8hdStoMTw1W2ZVNH1LX0Q/Tls3Pm86YCxwISwjWmw7Uj1dOz57JFQwOm5LX0ojWHpecURVPmN2cCUhNCJUKnl9PGFuVSxPYWRtWDh4Zn1YXWE9SmJXMSxGdyo7T2t9NGcp''@;'; put 'put ''Tnp8QE8vej87K0lBJk0qaSFhUnRpYkl+ZFhdO2ZfWER3dEkiQVQqMDd9blV1Py9FXlk2N2tXNThkfG4wajYlW0ZWUVtHajs9ZjN3bnRPUUNkaW49ZlUvITtGVmg4blprNE5mTT9saFByODBYUkwjdVouXjRrKShHNWsxMj9IenNvMDU7QD51NWNkIyY2cGoqOHI6cW59VSYsLHp0bj4jOVohaFdP''@;'; put 'put ''JGgwMkcqdXdkcj03UkJLamZeWjhPKixAKyYyQmBIfV13cTxpQXJdVTk1PEZwaVNVaXJ3TzAjQ3g+RDUrOzVnVk0rSStXYWc9OmUkMno6bSZfTlNrPyJaO3UwLl9eRVB7dkRQaFdia3xWP0A6TCFVL3FkZ2trekRjbU4mNytEfG1kTD5UdzVoMSQyXlhbTEt0PGJbfTN7ZnFCfSJRWUwyR3YyYlNG''@;'; put 'put ''YCpDeHZHYGMzUHhJWDdUP3x7ND1keFFafXYhXkNvRC5zcTp8Lj1pYjptQU4sYTs8OV82akhvTFEjakxBUEFUVFN1bi85PSZoZzd0MilLNWklIm5CQz9WMU5vYDJXJkxwQnJ0IVVsbm97dkx2fVJYWEBHOWUuY3lTLkkkWSYuV0sxPypCLktRPEQyeGdKMSVtUFdPN1twRUJhOk5TTGdkdCV2cjdt''@;'; put 'put ''RUVWdCpHKDRVKTdoYUZ7RURnVm9jJSlhMypjNSZ8KSIhalRidnpqT2JEeXkrZDNnMWxFYWJaUl9QWEduSy5YT2tAL1B6K3Ehb0NvVlZLNV1CLnYvfkljR1owfjduKzMhbmh5QGBRSkVEe3w3dT9uImZabmxiZD8kKngiWUVHRX4ve2o+VGJ6QlZMViExN1A3QlVmS01ORCpoWGVyL3pIWjdRMmxI''@;'; put 'put ''Nl8yWltSckZpfkQ3NGh8dGZyYlhhb3FVYzY7OHt2X1ExSVdVIyRZZWs+NEl8eXdzaytdIVtQXTJaMFtmVTR1LGt2NkJfIjRaYTQhaktiMERWM21RYE1QZXglSkQ6dzJLOmNnY0Moa1NERk5fJnRaXi4jcTJibjYoY1IsSj54I3I4PW47ZCk4fnQjZiRUdit8L1pCbWRpLzgzOTNrQjZWdFQqLnxS''@;'; put 'put ''ZyZmZmpJQmojNy5acE86NiEpc3hqQz5kcENGLEVIK0AldD9DfGB6bEI1UG86PmB1JlokRjdqcjEvV2p6LEoyKUoqWDM0ZV5TXV94YVcyQ1BhM1s0cVNJLitOI2lURlR2bz9PbFBreCE9bF0hNGlgUiZoVzIlJC5ifV8sYndndyw3PmVrbGBrazF0PDAwQWgqUURgez8oQzgzaH1TPi5YOHMyeWBC''@;'; put 'put ''VnhZKntCWk1+NWxWVSVeeXZlOl09Q2x5QllsNTgjW3xYJVc8cFJpO04mc3ZRKSN4cXg1KXE8SEZyKXxmdSsqblY3SlVZcGUuKHlMIzdsT1Y+a01WI19icHx3RjomOy9PMkMrQk9gMXI3YXd4ZVc2RSVPclZ3R1NxW1ZGY3psfjhgYUtmY0Y7L05dUyRFNGRwZGJ4QW9APFYzazd9OiViT2ZAb0Rx''@;'; put 'put ''MFpCfDVYTDFXPSlGUGtCbC8kVXZ6ITZDUEdacEZHdXVVOU9iWWEhNSZIT3B6Z19iUWxCL3Z8N1ZWeTdWU0lCUHBAJT9WZS5WamlEeWlCM1tRTEdwMmJ9eEZvWEddV1Npd34udi5TaH49RyM9aENyYUdualEme0VVMHs4T3xCXnVOS2JGIipPQyV+OWh+M2h5eWExWjYkUyxKUChNSFF2aj9ZaTg+''@;'; put 'put ''eXg2XkRZdnpTeVFFI3MudWEoY0w6YXZVV348LGBNSSI/P3tiSXovd2VKKFVNSXhNWD96VD9PImZMd2w1TmQ/UnwjK1J5OjdbL1hDS1laIWh5V0R3JnNNaT8ibX0/KzhOZVV2KGxQcH1kNWkpJWVqcnJseUwxMEliZGNVY2FAfENARE04W3EyOWVhNEksblBoKiU5RiE5VXBAIm5xUEx5Y2tCXmUw''@;'; put 'put ''YENeP0JubkJ9MCRJOE95NDlVVEsqNjRlO3s0YUErISElfj19X0A/ckwzUGRgfTVQTW8peGRaRVFpZltiV2hfOEF7Sj9PaUdqXzpBPjo5L2kod18sWkIqRVdQSXdNJiNyOEttczAuZShqS0xMS2hpK3dgNjA0bUtoUlJYQiV7bEdzPnp3cHBkKE8kTllLJTtLRSFQQ20+bVV2UV5NdVovSkI4dUlL''@;'; put 'put ''RjAuNVZ7a2pCb1I5T1VKdzRQUGJeRDEmeHFjNlAidUo2RSNdKi9RSyE6YXV6akMrPWdqMCxnej1IPW9GWyouRyZGaHs2Q3AvXSlNaCtKdjBfXyljYDV0JH0wISt1KGx7OipvdGBCWnlsVkpkNSooXnJWaT1DaWZifU9DL1VCIV1DRHg1ZlZBSWdnQ25zITJZYyNzb3toSl9bPDF0I1Q2amB1M3RV''@;'; put 'put ''QkYlQDgqMHBGNiNqLzF6V1YqPkZ2QE9mJG8mRik5ZGc8SXJqRnQmN1ZuVjJ5V014aVkxRDY+QDZNTjsoZE5UTkk7WFEkWGkwWSYhb1dEYUZDSyM/ZkZrUGhbTT08PGo1QU5HSmoyMmMmTipheEhoW2cjN3JSW1AoNileaHIhbHB6RTB7MVJhI3RnN2ptPnBFTSp5T1BfPllVXnprTyxiRWtPLm5W''@;'; put 'put ''JDB+LHZ4PSpvJiErKlgwUUlgZVZPXytkc3hEbSw8TGlhSkFuMmN9SkU1UUFwd155Y0kpdGxYKyJ+IXAmaUE2S2tARzw6c3JdXVJaS3Y3KHdUOSFfXk4lNUZ2VXRANTZ8SnhXcUhhV1QpSDhAbHNxaUlAKjhjXls4UmdEeG1pNUZWVUgoL3NIYiJeQ2RzST5bYTRbR0psWlc5ZEg5fTJufXJyMHs9''@;'; put 'put ''UjdDJVorUDk8emliPk59M0BLajIzKHFmK3RzMG82b1lTV0BCW3pyKjVfRVdfZyNGWEt6ensrKjtfSH48P1I/NG9mU1J9Nihob35eS1h9dX5Pcix7JnFwbjlUQHUweW57RylZR3dRVWQ5YTBLa0cjazJIaCRNQEZrJTYoaCRfPEVISk4iZy5le1FpTEVEYkh0aDtadGlNZFd4OGFSV206N3QhNVdr''@;'; put 'put ''Skx9Uz5qKS5wJjBwQ2QhSDNZVnZoSmpyODw3Zj5yTmR+ZCU9Qj1YVl1ZektARjJQVXNmPnNxamx7aChNOEU7Z0FEfjprOSleL2c8N0ohSXpkKHw0dikoKHF8b1VOISt+L0hRX3JiLEtAREBJOEEqQX4qYXdpZCMiXTIxWGU+SStneX5yLzlgVyEvWHcwU0d1VDslVFZidVpHQ1RzeWw8SVlIcToq''@;'; put 'put ''bT47KWNpLyRWYkZpaDFDNnxWSmdeMCQlMUMlKDY+eElIJE8mSTdLVj1JWmVDIS50Si5tQXpIW0BPeEVMMDEjPnBUWi4/UEJDUyhrRmNDOTVTXmByQDJUaGUmYEs8T113XTE6NF9GTjFuJFVFe0tpb348QWFrJjJic3ZHbm41Kz4kfXo7JW1JUno/XlhxT11vNUkiRmJjfF9zdntPQnVMTDNGeFM7''@;'; put 'put ''RnB5LFc/Zy8qcHpoQGl2JGdldEJRZktaWj9Oe1NDODNKSnhIWkJPciFNQ2l2QkA4UUh3fk40I1UkWnhGPmxda0V1Q2s7RWFGP0xSdStwX0NHa1dpME8vMUVwPD5Dc0BbMjgmTzsjclhURzJeRCZTUiZaJiVYdkRfeUNmJU5PVSVJPU9IWmlbaHFmKTl9RVl2akFPYWdJZEl4Ukk7fCQyYDh4P3R3''@;'; put 'put ''dXtgX1ppSSojbHFCMF9LdWsjWVZ1Ri93XkxicEV1dixgPH0paTRtd3xmNERIbGJxdlA/U2JKZU17PF4lN154P0NMKHloWU85KHpwblk5MnEmYit7dyVXSjEvU0JubXpmKCtWaFJuIlhaMm1xRi55IldueDBaeH1kPmJ9USk0KChANTZ2LHw1fEdISnJfZUc5Qlh+UlJSNXxwUW98MCExeXEkeTRY''@;'; put 'put ''NlRaM3UsQmxeRGlNclR2ZFFVeTVPOyRkSXdWMDtrOEBKNWheIWxSTHJpWWVPIislPGUhQWV0ajJtWnxHTlBCY2xgQFFaVmVXbTIwIy9VU25efTR5REFxRlN6ZlNUSHBbbyJlcVl8RzZBUlcvNCV6eGgkb094NzcoQHYqVFJWQX49fFErPFZ6TWxISWcvJj9VNSpeWSgqaXdXd286OSp0alNbPVh0''@;'; put 'put ''Q094KkJlUlZhMU5qJFg0RHZXanQmdXR3b00uVVU3MGQkV1RFOzE7KlpSaEZfRk5afXtEXyhsJkpyOEdRKkVoeXd0YUh5MTYvZHwmbXxuZkswaz5XOi9ObD56WGQ0bjlyREJmc0woSms7cyJrZDYyIXZlNiZlMjJSXy5kRT5WVHp+cHlFTiNFQzRvSkk8Oit4RnpjdEE/Y2xzVisvRnxPdFApT0NR''@;'; put 'put ''SDRPYDIvLz1AJWtmOmJUNXhqdE5CK2xmRmxXWG1oZmBTYzl9dCZxWDpIfDZARl1IOWRoVFUuSiQ2MGEsXyxXRj1VeC5zMCZvWDJoalY9cyRyfmFdXl08MlkwLk9jbW1VfDp5XXRRTz5bTHFfb1FEWGlsIThCYyg9czcxdXJ0KHVTQXcvLyUkfkU2M25abCFiREdFOWZ0V3U4UEQzcTg0RjIsMDsv''@;'; put 'put ''QWlQYH5ePDVRVVU7WHBgTVk3Yjc+N3ckIjc0K1VFKHlUcX59aVUhPzxfe3csU0AyKmxfWmgvOmtnUSFNWVNbTTRoQzEzO0JWVDNMWmZ5bjNRYXc8X1omcjtPSERqPmtXa05GPSM7Pk9ZX288ZmxPMGE9SVpgPkFjVlgqcElWLEtVcVNBOytRfG13PHxOQHdKTEgqSz91fFFlaUddOyRySGFnQ11d''@;'; put 'put ''cUEmZmMheyQyem0wMyVlQkopPVJNeFA+LFpuaGFjISN9diEqKCRVaU98UnUwTmdjRXYhZChqTkdPZUArZ3NmM2hxKkhPY083Tlg2Sz1YSjMhblZnZnp2TXVvKkwyY28raUpJX3lKdEFhTC8iaVdmQEhGOzQqa2ZJfUh8U1V4OUAoOU4xaCpZRF8lOG9pbywka2lgdllLRDw9Vy4wR2Z3UFhyP0VE''@;'; put 'put ''M1I7W2JeMEc6Wkk9NCpYclYxIWZgak4zUVRYNWlHZTddUikpZCNMTmthXTVBKH0zMX4sOSZULkg1KEx2QEQuKD4wWkZbMWc8QlRpNl1ae10mNm1Ta1IyMjk4eDRpSUMuJXJReH5jYn4qUCRlbyprRkArR2hNNVNiUHQsRUEoMEhjQ0BVcHYwMzp0d09lVn1MbTByPjRddEAwMWhGX35YWEkqJSJC''@;'; put 'put ''fkB6LnRZRV9qVkVnVWd3VTZfNnZNUjxER2hhaVFxYWNFLl17X3JtK1N1R18kNT90JjQxK0kybG5pZDBCSEhTVjpNVzkhLEY5PWF7VzlEdiU1NDE0Y2k8QSM2a2d5OlJHREQ0bF1kTXlOYztodlVKdVhwXnEzOjo1fkAjOTd1PjlKP0d8UWJ8WXtRXXM8Zk0+WFhyaEJ7NnRgaSVFOlRydnNQWk9x''@;'; put 'put ''WFFfKWVUMktnV1A3bSlfUTRCSClpOjRAcDA/fTY5MEJkQipJRWVCbUs0SVtVKWNSPUJ3L3t0UC4vJWw6ckF7SC5NdmlOeFZiXV9kYFUqdGRWcWBkNm9Yd0QkI31SITpwL1hJTCFUbUYhREAxfGZnR35qdVk9aCshdCE7UiUibz9PbGZMfV0qWkVvTmNnRWkvantFOHdwPXRBZ2c7V2EwZEl7Pjld''@;'; put 'put ''UVd3TXZLdTsrZEU8NTYmYkRJaENeIkA1Ql5sKCVGOXY+azNXcE5QKzxjWD11VEc3JWUhcXdyWig6NDteS0YiI0JMcnFqXmBrdXF3UFpwOnBkU3dAclI5XyQ3ZDozRzZ4ITFZLitUezp7YyphVCFrRUBvfnlPKjl9U117RV99TTJyUEdvJiFhRTdkPllGeSYkYEUkIixzXW1idFVxZlpEa2J5PV1K''@;'; put 'put ''XldpL2lJJFddJXI8IXNbM0tAKWAvbjl7Nnl7KG0mbWo6PjVtKEJ3O2d9e2BdQDZpUVM2cyxnTERycEpaLGxGRVVyaHpQc1ozaDRwPz4keSlOX2J6YiEwL0IvSk0yXW4mOCU0V2Jmcl82OSo8YCp0dEd8I1A0MTEiJmkuaVpDPTpAODNJKU4mbVcxZE5BZSExVyFbUms0M3VYfT8wKl5oY35ofEJF''@;'; put 'put ''eHljd1RVX3JJZ1ssM1t3OFQ0RmdjSmVhNmYhKn4wVy8mdUJaT2RHU3NtRFhQekoqeUJyLipvIX1gIkloaz47bC5IW0MhNmJzNXhjJT1BbEdWcFh7WFosNF8sPkNkRFtVYUYxaGUwRVZnKiwudlt0TkV4YSgoRnhTN2ByZ2lAc2MrPX5yVThKImEqeD9NaC9tN1E2NDV6dV5IXn1hQDkpSz5jO31X''@;'; put 'put ''JkBzYWVpb09nN3Y9SjpebyldOCQrdU1jRkgpP1Z5aHRHZmd8VGdQNEMic3ZdZF5YXWx9V3tPSy40dk4uWCpVcSleb1M5eFF6N3YzLyQ5cFl5aUJqUSJTX25lTnYwb3FGWSNITTlYTEJDckVbR2dScFNgaj09SipUKU8vMGJiSSJvRWk0elZQWW1ASHsiMW07UyVgSWFYdG01ZU80alkxPDlaPlUl''@;'; put 'put ''alpkIVp2LEUzSFpeO0RzRzBUVjNIbyw2Xjwre3RxKV5kXXZ6ejYmUWxjfXB2diEzWyhWbUc5ZDFKQytEO0Ngc0w2U0N+ejxvbV1sUklIOU1leiVXOkYrdFBYL1RDX0Z0WSY8cVpfLEoyInw/Tz9yKWA4bH1IWH19M2R6cHV3dWVCX14kb3VbdTZWalVuXzRNcUslSj12Rk0wNlN2cyIpJnBWQSoo''@;'; put 'put ''ZG06fW03Yi9MfD1dNVdPSUN8YSZXMkkreis4aGlUND0+cm1nST50fWd7NGZONn0ucTd2KEQ7UVpZUW1GZXIqST9wLEVVcX1nPD8oTVU/c2s1QjhMQ2tHRyEoZ11ESTAhNlF3UEFzIWlSeF49bjthSiMqaUZFUSEkUTszNHhwKUNxJT44dnIyRjh6OnpbNTM8VW9del0qXk59IkslVlY7W1tAcTth''@;'; put 'put ''a2pvcHxwcEtnNyIkc18+KkR8dVN5IzxAflJ6YDtgPDJART8yV0B2ay5vSW9GZ0tnfitVYiMlMGxBJHs4OzdSKWFxaCxmUW5NYmpxM0ZXTjxQJHFxJWltYi9pVWkvJCMiZUksKShHLGczWmJfJGZ3cVpNUzEyeDZ6aEMxX0ZmeXxOLjp6bjpGbjglUVhqekImaSpEUHEsISUvXjdRYzJpSX5BOG5l''@;'; put 'put ''P1thYUlfRn00fWo3bnxrZWYiRGtwaVUrMDpMMjN4WmQodHVYTnhYbGVzJnghIS9Ec2woLDBVXj4pSH1vTlRdZDY5PXk5dSRJbzlacUc4MlBoYWE2cCw7Mlp8VDZsPnlUYzNrZyxVSFs6NVM6bk8jKEM9Ti5dJiMzUlB0aiViUjh2akhxNzlMPV0jfHc0THdXKHszbT5tMlBCY0hhXT8jSk4lbi4/''@;'; put 'put ''KlNDSywwVmBuI2dvPVB0QDdSPn1gezZIXmpYK2pXU3Y6cHEoJiVfe2UxaDtmXVNCOHY3Q1V4fSM/MCRCWnBFZzcjWGJnI3k2Kyl5ajgifVJjOkxIOnVrV1A6JWMzOk9taDRxK2lpam4mfXY/YStMK0hoSEFXNWVKRUQqPXAmIWFNZDlCKUd4azckeUspdilVWEA3d1d0RUJ9I2xNe01dQ2k/Ryw6''@;'; put 'put ''ZUsjbFZTOWRkdH1OOCpVQnpOKTxXYUV7Ky9Vfm4hTEdVdjA5NiY2eVl2OzdlcWZvLllgSnh4ayFlNlJORXZ1U3lPWmFwS095ZnkkTHgzXnhbXj0qQ0RoInREeWBUWWdCUmNIbFQlNzdgdVBTL2xkTl1nV2g/MyhAcndDKjBXV3MoP35TfDleaXtyIzJRYm1WTE9USzk8e197fjZ2NTZbPnVUd0Fm''@;'; put 'put ''W1Zvdj43Qm1JdX4mZyFvRitrO2YrfXBeZ19LYW1EU1BadWh6SFAxYTUmOjJtSTdIUkYyeE9IWygpa2x7SURBOWNCLFJNUllTMkN4Tiw+cUJ9cyx5RVY0bH1aJnU7cUV4Zismbms3LylgUXlvMnVSJEJFVy83YkpSRUhZezBFdUhMXWRnXT5kNmFQMD43aXQjOWBfXUxta1NeZnlRJmUqIUVARSxF''@;'; put 'put ''S3toPGpBYVEvdVdZa1tgZFpeTFlFTyI2IkZ2MVZrWyZiMnVVYixqWSpAITU/Rn01NnQ+R2xoTHVvMXB1SHJYN05pTXg3OnM3ZGlHZTI1TSkzTjd6NGEpM0ByaTl2bTZ8MGh+UG1mYGRfZlIqaSpuQkpXcHY7JXJ8TDJBNnA6N2FqN2hReHNlUXxXXmpzfDl3TyM1RWg0TFg7QjU3L2ZaeDE2JnN6''@;'; put 'put ''RkpNNikhMTlpcEdiSitQZmViO2g8S1J1aFNMXzJEK28mVThMUkZ3NzM9JjJqImlLXjRBWkJXelVlQzhscDlhYGFBXn1nL152cVhNNTdLT20ye3ZaYEtvV3liPTpPbnFHNTlNajZrSUpNfDhGT3R3akokYjhoL0oxREUpKGhwe3k+ZnxQMDZtdSNqdW1WS01XaT1oPS4mdCY9ZG5JUVB7Tl53c3lK''@;'; put 'put ''Q0NaMSt2dWpPVGxNa3JZZXJgakkzeH00Z0whMDZ+SHppZFQ/UzFbc3l3IilIZCJtfmI9TlIrIT1zJVQoYT5MKURqYCxwUzs5Y0hyb2A3YWUkV0V+IXlnPzFkaCNORndhPTU4Jmp4bUx+Oi4ofWVvcDQvYk8kX3VPNE51Lm52dUpCcmlDcWY9dXxFVU99U1ZFVVl3O3NvR3crMlA0VWRUO0BaWXZI''@;'; put 'put ''UmVtdE9NIyNiT0s6UHpmUk0sI0gjdn11L0whc3FoWHw1VUg8Ny4+ZFA8MVhDQkdFVlNKXWAiRFRWXSwkV01VTnJYWjMpMkB3UTFyKCNIbTpibmRuUzxFWGRTa3pSMXM+Wl17VG8jQUtiNlJsSzFSPF9mI1srYkoyVmx8OStyQ0Z9IUFuPHl3QDBKd1EjVHNyOEteW2N1YG46fDp8OCRVS1IoLk00''@;'; put 'put ''U1tRYWt2KVlLbjVqLnV6bDh6PTI0ezx4MSkrMXRkL3d7RE9kbVFFUSp5UktHS3drK3Q3Q30oeHdtfE96aEdaXW9ZYlMuPnRJQGtJMFlddEshJSQ4U2YiUWZYZV5FQiN6ZnRDcm9hek8mYkxbdTJQOU82MGBpTjpXfFJKP14sKWFbYTx6eFk2Nms6ViZJQGNIWzNpcjhTM0pdPkMjbHEmeXFBaX0x''@;'; put 'put ''JX0/TnRrdEkoSVtFWWZSNi5xSHgzdlslcnQ1ZmUySDUvUDUyZE5dYXZhXUdvZiVOVjo/eUVvSHFZPytDbWtlXSVfazBufU5weVljS2opWmJhVi4+U1hAMlNEPW8lcm1VMGk/dF82MjIoVThHc0tDejI2USssY1t6eVJNO1F+TDZdXU1eKm86fVNVI1d8dTNhYjdUUVJPQ21XUVhxK2U1N25bYVhv''@;'; put 'put ''dSV4TG0wbmcsLHY9JDxNPHxRKSEpRWJBZmtyLkkxZDxxWk5FZUp7O2k1XVFZXkpLNDsieX5GQyksXzx0REA5cDouJC5SY2ttU3VdU1khLixRNVNhcylVSFQlMHBlR3ZtfURkKT9HTnlpR0o8fVJUT3I6IXg2KW9RejdMND9dMGNRVCllLE4qfUlmNVBLTXlVKExsKVBmOXs9VH5tdTNpTlE8U35I''@;'; put 'put ''QmIlO2hffiRSZ0VfbEtNX1V0LFJoUGRUTj5XOjAlTV9Je3FSSFpKay8pU3sycUw4N24ucFhFR0lEUCkxNHx0OnIvTko1eSgoR0MzYXo+MD5fcGsoO280a1RIfjtwPHB0RE9pUDpVKitIZk96cjR7K05ARU1VK0RbVjhfQU06dWIrQiNxQCNwdl1QfElHYXM/cWw/eTxDPmxnSVdzNCFaOy9EIjJP''@;'; put 'put ''WjNxYExHTV19OlR9RD07cWFzc2p4PipYbjFlJk9JZH1NK3h2WjJQeHhSTWw7b0xZZHxNRj1ybUg9dmd5THYzcU9ZNW5QK2lEPn11NC5daVZ7fHw9Uj5ZKlpQKi4pfFY8ej48XnovLF9WYSM0SEVffDpIanh1Kk4lWT56c1twcUslMmJaQypdSVM5Wnx2bmt8VmdHZDB6VXdVZkY6SDlaVlM4KGJz''@;'; put 'put ''NEhHZkgmO3JkOWV9NTkqRVtjIVNDYk1qemE0Lz56bH09NTxmV3YvY0gsUFBsa1I3SW0pc0d2N0JpTDRTaXxbe1M1ZDJ5JHl2KSV1JUJPfmFPW3dOXXIvcmlJQDdFTmFaOiVne0FYdn5Vc0RmMyVUSEkiJiJxImg8cTs6WlZ3VTN3SXYuSS5uPkksT1FSYU9vO1swQ1coUXNpN1Q0U31LSkI6Lihj''@;'; put 'put ''SnhLcVA8ZXZwKGE2IUVxOU4zY15sb095cCUzNCI+U18kJHNZYEhPRFZ4aS53ZmprN3FaTypmJDx0Tno6LF1SXkEoT3sjb2JUSHFyXjMlc3IyRldrbUImdVp7JjMyNUI6REY7XXMuZ2UkdHAwMCF2I0loPkNSOz89dz8mSzdQQzNQWzRKbUskY1pAfCgucFtaSGI6Vjp3ZnUrO0AwQ0lNWzchbERS''@;'; put 'put ''b3pYMFdGSV1UMHZlKDJtRys+RjNVbnlpZFJgQX1FYGtoPEZOTyw/PWVgdldHPk1jVHEjNDtOZ1Y3R0Q5Oj9XRXwkOHBZN3xoR0RhIW55TFc9aVk1W1FnVCYxPyQ2XnVXRVUpVypxTFU9Mnt+SzZrNUdLQDguWDpZO30vLlleMDdAIjdxOm02SVAjUSNaL1tBW3h+WSZdQlBMMXA2U28hP0kvekN9''@;'; put 'put ''Z1JQPVt2WjZyVUtnXkNrQnIvNj5EW3ErKHtLUXopMS4iUXlNPnliUlUpYSE9MnRPJih6V3lqSSFGbngqRGR1SUV7ZSx5Qmkqc0tvS2FlU2c/alFzX3RFTDk6ayF6PW1sRTZVQGFMVXxhaH5lbzJ1RjVTdCtlWlVvTH5gPzl0bkgkTERQPEFmM3gjUVF3V2RuUFc1RU8lIlV0Q2VFPWxrI1VAS0Yl''@;'; put 'put ''biR7WjQ4QnF7Mmtia2Zpe1N7R21CUSZBLl4pdXBFRVdKd3RgcjwoQzU3QlJMRT9CS0AjM2pGTCU1T1BrVjlAWmU3djtMcUMvRWIwRllhZzh5b2tEcS4vWjxnOzI9QWNfMntNLD1DcWM/LkhpXkAxNUR7XVk1dUxiJV50QiohZ15qSEUodlhmLHU6XlQ3V3s+TDxkYmhyaWU6KnArMShqfTJBPjhW''@;'; put 'put ''KzkxKDdJUjhiVSZCaU5qNkMrKX02RzwjP3x8Sl1kMU9wR3J9Wz0oW2pmMTkxaTo/VUBtak52PmdISXFUWklCQGlnQVIkMWRNWWQ5al5YKT4wfHUlQE5oNS9RInFJPCpfND9QfV92JWY2QSVPfEdETC9sI0R2SzFqMDlzfU4/VDxkVnslTU86YHlPOD0hVSlCbEBreFcuOWtZS2hEO2FnN2g0QzNj''@;'; put 'put ''Ny9iKENQa3QyeG1lIUNxNz81NEdOcmxYVXo0Xk5eRUBUSU8xN0ZpM305WyQxWUBdU34zfW0pUkNXdT13cyhfTGJdPk9SaTx3blNKOU9IYzJpbSlUXSRJXX1dVDJrQlJIPlkwfGwwPnMrdTghRnwsSTpWKVIvWGdOemNhMVVLK0F1UUBST28+PC5paXR9OC88eTlAfVdGa2Y+O0dzSXM2bD8rdD1v''@;'; put 'put ''Kl1pYWk/QGNGTH0pcjwyKXxEQHV1bTc1ZX58WEcwVlpIKn5Vbl4vRltEUClfJko+dUl8ZXdodk4/WGw6ZTBZYn08VlhZSWEvVWlOZUErPHc6YFtKcU09YWY3RGZlSEVlaWBTVSxoM2Zjal9DWT18akteLklqX0xPdno0Qy94TE9OdT0lZE5bXkwhVF9dRHMlIzN+bUBFQiNhQWwydyt7TkBeTndQ''@;'; put 'put ''bCImQ3NDenpJTS9RRlF1fFNeYX14UWd9IXMrQXtMWDU0UCpUMzNQdGQvbkxafXBkdFtRTzI9TmdQOXB7X3RKRWs5MnFeQEJtV0NpK0VBd3RHe098cHJPXyMqO1A/dDtzZTBDTkJ1TCZmcSgiYld5WyMiSlh0byQ/Q3ErR1FrSVB7fCZbWFcuXixDdGYwSHM8eSwrOUMvUjxFPl0wRF0+akZfUjM9''@;'; put 'put ''ZGlkWHImK3gwZWUxKEEsR1RkciZeUy5uS1UkNjI7T3lTLFtjQFpqbyw1QTlvTSFMIlppZT1+TCxMV01qMSlPcnF6JDY2XWxjT3E3NTJMI1slRytIdnwmKkRefTZQLyMjTnBhI11AejhPWGE9Inh6P0Nad19rd2BUP21QQDIwRUg4NzkuJmx2Qns7YUAoZmhGbWAkNUJWc01KMDx4TlRfKTMmaEJ3''@;'; put 'put ''Z2tTTXdHWDBCKFBxXk5lU1JVWnUhSVFGSl5IVzxHQ0FhUkZmKl0yTGhqbipCU35fMktJbjF0RkE3M0dSZzI/Ojl8fjIhZ1tOWGtQaUEwI1dALE9+dUtzWzVeem1EeThKX1thUjZ1eTBObktET3d4M0BZJUZdPyZYW0YhKTd+bSp0MHpiKiZ8Z1JfRE4xcD0lP3Z6YTlIOC9sUmNKOHpgOVVtPVMs''@;'; put 'put ''NSVPZlJfQ215XWBJaGMhKi57Qm9dUV17bTVIZG5yRSM0ZStmd1IlMEosPUpybClvUCpNeG5INmEkeil9IkRzUEU5P1UxIV8rLlNZSy92VCp7WzdiQT9vIVN9fWYmYSRlQ11TOypeKUcqQVhsX0Q5MWRRNmxhXV83bFJfOTglTGpRXW0mbjRDMVZkKFJfaGFUbC8qKnNkZTMrP2djK2lZdz1YZWkw''@;'; put 'put ''R3I+KihCQ1BlWFQ6YHdZRTZETGZeIjNVTFckTmp9b0BGc0VAYj9xUDdDRk00UEdpW0E0PUxqUG48ISppbyZ0PjwqfUt+QktCWEB9P1t1TzdHJXN1RDBjR2JpZTguX085OUJLWFdhSyV5Mj9FelhEdjddWjNLUGl7fiRIKlJlfXlRNjRHYGhSMik7WXFscElbbEFvaFRhT3NhZytFUSFwLG9jbDxu''@;'; put 'put ''d0psR1JPSGZUYWMxTH1HPDZ6cXU4ViF1ajc5Nm9uaiYoMGB4U213cTdfVGZ5MWwrJW9FRShuUmBgVzVRYi9TOjFwMFNzX3cpKE1JKDwpTkkrXXVMTU9YKDtFdWRiU1tQckRNd313UnVEaz92Tl5tWzswMDopNiV1I2t1cThSLjIxfWQySklQW2ZwajNxWGg/bU0yQCIpdlA5TD1jVH1ucFVDZVB0''@;'; put 'put ''NEo5Y0wlVmhHV10zKWh9eFUrYSV2WXhgJUQzPHI5fWVWUlElQ1s1UzBqeDZ4c2FWUyxfdEJIKWRPQCs5KUYsalhiTj96Ujo2MG8oWWhoR0Q5WE96SSg9U10wIjxTdkArNVM9WkJIcHo9UCFHdjB1emIxWW08YXZoUCZsMEJ9bTg/N0gkbmVBUSpAVXBNRlhhQ1s9KStRcXBHfGBZYnpqPjYkKztU''@;'; put 'put ''KHEldjk1clBjNUIzek8iNUI0SU1ANzNRR014a3M8bkAsfmZmbz1FYW58XksrJnElOGMuOCopYXVofXUrJV50bikjJm5EflhXaV5RQ2VQJHQ6VzNAPTBCQmdLT3lGY3VRKEdEN0hVUF8iNU4pUCMkJUZiT2FnJUYjW2xnenNAeVM5JH1pX1ghR2t+IWJTIXc5S3JuXj5sSS49Szp5Uz51PE51InE5''@;'; put 'put ''V1pYI0NzUkhHJDskK3tpJTsjKnhFeDY5MV1OO2ZzR1MyPXlYfXFWVSVLZSxJZ3NMZmhQcyxgfDNWWSV2W08sI21jbWE0Zz4kVFtmMkthbUIyMTJaN054fGlyPG9wRWA/dCI0fVFSTiJKQT12aXVpImdkPmNmQXVob3F0P3hBYFliZFo5KVdVNzdGVzdaUEJ8LiJeKExOP0BHISs4KmdNP18ydyhu''@;'; put 'put ''dV5bfSk0TEFAQGxhO2QrJWt9TjB8WWF3diRKNUVEV3pYNlBhV0M/R0I+QzlmKykpWFhrckpMUTU1VUk8NWdAO1F7aGUrd1V1JSVGO31oQ1s5IjZdJHtfcT5NcWgyZShuSSE5bEImM31ZOVk3YWw5RFUzbGdWTHxiRV9ScSUpZVVxb3hGVFg7JiwrfmJofVZkW1MsKHROeXpbSnNaYiEyRE4iSEAp''@;'; put 'put ''SkJtbkleUypZVWAkWzpLO0A4YlhPSE9Sbk12PDBZVVl6ckorRHw3Pz42Tn1YRXpVVXQjfVN2MGF0Q0p2eHFiYDtCcEVOZUgjfmFFSUtDaTFNT0VrfEw+PF8ueit0Omc0JSQlSTU8b297bTl3Xn5nXnFJKFhwcmVwKihWeElFNlMkTHE/MmtAVkluclZkP2svL3A4OiksM1FTTGxsO3BIQGxAbVEs''@;'; put 'put ''LHdyb08yfiQqYWAhaD14KldqSio+Mn4pXTk/TXsuTDVkTjVGK24yR2U0Z306JVJNKlFSVUdtN15ebkhOXV5KfFZMP1FkcigrVjRANCkqOi5GJUpQOTAxZ1g3MG0jYS4zOC82S09lSC48O0N3SjI1cSsrMnUkXnR0JG87VlRjQy5EVDpOeTAibklLLHI+alcyM1giO0kpNmJdfj5FQlRaeEpWRWRV''@;'; put 'put ''eFZYKV4/W2gpaD9BXV9WXn5RdEdvbW1aZF9vKmpMOmkzeyVxUjI0R25kPDpGSy9NS2Zib0JZWHJnLEtoZ2tGWV9pVDl+bCI5VnhRe1lkTzYuK3VVcHtlSjNEckEwd2lBR1gjWllVfTRVMTEmYCF5dE5oP0wzJGF+QmA2Wj4iTEArQnlFUXJDY2MifHN8PjJZRFM4Xlpyb0N9Izs/cGpWNjQ9Q2kr''@;'; put 'put ''TiljUH1obV9xVS5sOGM0XUF0amZxLkFqNVFRLz9beWNDZyF8XiU9REV0LlQ/RHgwPnYjPihDNnEha1tROXFDPG5mI0c1bCtGUzBQY19LTyQ7W1tGKl8iQFFsJDh7aCpYQyl+O1lLbGA/Qns/cl1JYywuLDovSDxwUmwkXjVnSzlJTHRlPmR0SDA5blciVDwjfjdZdyxKJE9le2RFI2Vrd2RTdk9n''@;'; put 'put ''ZERxKU1xRWYoNnIqal00U15aJWw0NiM6S2BnUWpGW1NRYmR7VHc4VkUuMDYjOC91QzYybzdwSUhfZTs6U1NMK0BtVCZVd1c7Nil2clM6WHNIMXFiYnY/Ll8kal1+VCw0d1kpJnhUJTtuLksjfUR6P3c8aVd1b018NmRLVUxVVG8/Yy4xWDw3RmVQKHlsfXgpalE7I3EuWzheLitBaFRWYS94alR9''@;'; put 'put ''MDhERTdqOk53elJXLGpvSWZxZl8kKVh0b3RsOWw2cEw9ZnprOlAma34zK2lQWFlnYzd4YCs0aiJNXjRMWT1CPyh3XSklTFN9dyRwX2JZZCRNJExeamNQJjZzIyE2IVpGUD8kWT5kQ1FzZ3ZFQUZYXURhPSpgUUFydn4idWk9W102Z3xJN1giekckVz5tZVloXVhhOlV7W1dxbil0fEp4KkZUOzVg''@;'; put 'put ''LDxfcEhTaUMxISYieXlVPFtCVnJoYVdsVV1uRGYmJltCTXB3RWFHRHc2RVVGMUErJjhrbSI3cUxuUiZgcC9zaG1geGw/eXFMcSYxYiFHTzFjcWoyL081M1NTbXg6dkRjeHpLPX5nWHxaVyY3L2s6WFBoSnAoJmYpWWw4MTZ6ZWRVQTA+WDIzQ1IxV2BfU3s7eUA3L1M/RFN0U3RzeWdERDVKMyV9''@;'; put 'put ''SjNdLnJVdHtCKmsyW3o7Wil3XU5keS9RVkhiNCliRUg8IzNYJVRHUlAjJHdvX0FeIiN9aENLKEQ9Nzs7WyVkOzt8PHl5d2tTck1kN1p5dWhZNkw9OjYmJXlrN295NTQ9Q3p9UFdnZkAyW0BWM0U6fHowbmtUfiopLy5ndXMpNGgzUiM1ODFPKDpdOCFzdTdwZjdEITY/XyZXN3hZQzQyV1lwYGg2''@;'; put 'put ''bmshXnl6aygwIlE+WmJZSV1OJTBZTFhbcEZeU00uYkJgTXQ3JlZ1IWc3RVNWdVIjdXBZPGA6TSpdMWpPWFdtRCJAXl5VdDgkOVhodENMbGZUVGY/dGljNUxxfVJ3PVFFP3U7QnZ7Ry5kOmEhTllvPFtQMmFISyI6W1FPVVVMI2p5dyhFbmtHZilfNzJfVGV1bUZpO08yY1tJVXJYOSNKVnkzY104''@;'; put 'put ''XUhNSGZ1UjhdLnQ/KEtRTkwzRXR9cjArNWg3XTZ7Uns6VnVRJWwkdjVlSV5pQ2Z+dF1LYi9VSDtFeFZmakslVE8qXUVvI3EpXVBTKygkMkNsWTBCSnchSn1DKl5ESU9PbzpEQXs6KTVqIUNJdnRBQSE/b1oyc0tlLiVrPDE1NCw3K1lkd1A7KldHRG90WnJDaS8kKGRuelg+NWFBU25baHRqL0JF''@;'; put 'put ''MkQ6Y0xwRj5GWDJBVHUjbSwjTWllQjYrS3FsZU1sKndlOjhNTWV2PFhIQjB3a2hCRVpPIkc2cHM0SkN0LFBMKy9sNipfYldrMjN+aiVyWG9dWy9aTVp7W2UqblkpS3loOnNeaW1FRCM5ST84N2JsVX5DeD1le05PRiZSOk5dU3hjKj0zUnJKTXslS2BCWT91M1Y/WXxiUV9YckFpTFErZH1naldK''@;'; put 'put ''QkUpNDU+SGNDUjZ8PVBxfTRSO28lUmYkM3JxfUI8LjByaX5bZytrZyZ9STBQJWRQfXVQRFl8K2t3b2xONjMxPy4ifi5ncXhpKnAsIU9eUChMLzptUGAxUFd3YF94LzhAMGpxc2Zqbj16aDBbbiJPYD01byt5JTswZVt2cEdiVktLelU5d25gY0QiRCUqWiJoWlJzdjk0Szo/eFpwPT49ejlxfV0/''@;'; put 'put ''SnRIfXFBdkpneENyaU1ZPGxvUXFjZFJ+NzBLdD1kPisxQWUkb05vODd9SnkhMDhIPExaTiFIeDl6YGNzSj5AZW4kUnFUWCtVSDRLazFEMVNiai54Vk8oPkBLODZCMWQ9dVkpcFRZdG8pfXQoVld+MEk+NzQwIjI7Xy5GaHd3PmZ4I2w6ISloZDVLR004QlRUaik+YE15VDJgTURtVnlUW0VKTlI6''@;'; put 'put ''PmNfTTtJJH43LjQ0fjl7O0VTKkxPVHtGXmJrUlNwXV0+RUh7ZyV1dzheQnhPVzArczpbQXA2QitUMiRbNlk/Vjt5eTlPKWdXfmRMZzdJNlc3XkBQZFlaXTswWHNpaEc/YHMzWXlUV2g5US46bCkyTkBqQUEocj5rWjQqa1NyRFpeQm9xSTBmbjRQVCkiXjFFLEQzMytCYl9BTDUuc3xmd31MS1Bd''@;'; put 'put ''VEdyNE1Aal52dzwyJC4zU3hFKFU/cyJCQzNodnRgQDRIK2dCYzplJjEydlRCOFZEZnA6eG5fSTwkK1VJcnt7KXlBYS50JTBtTE0lXWRrZXQvLD9TWUlkV1U4aCtrVDNqRFoiJX1aWCUyRjdvbCZHfC9KRFJVME5gOVZMN0t2eGNmWzkrUVJkKXI3W1k5LGVJNVJuUlE3NEY9Zl1rR3p4K2xKJjA4''@;'; put 'put ''eldlcCVFYSI9WXZKMjVkajtPWy9zP2dWIXZpZ0tEMG9aNC8mR0VASXo8S2FveiZjYFAibCwuXnE3aSFpQCFmKWJETmtJakZfKlMxcCIwaGUsXm5yUWNtZSlOJkw6KHU9fkxgaEJEZGB0JjpwVHo1e080YkE5JmcmeEdxSixiX1gvLCxsJTBORjEsJmYyMnhITS8/KSk7dD9hYC5YYzgoYGZXWH0u''@;'; put 'put ''UUE/PU1PJk5IJldJWnptTDBUKFRleXs3Y2pHOnIsfWlUW1FZPltaIy5mOH1AWShzTVt5Oil5S0hFeX1DXmUqcVhiRzkpYT0xREA7fHApMD9KcjF1JV9gXT92aHBgXnlCNyVCc1ZpaVtCQyM2L1BkJlk4d25UJT1tLzEqVjhiJT9TbSYmIXF7WEkhU2ZRQ0VAfU1hfk54TDokSHVoaC5QIlE9InpH''@;'; put 'put ''aj5wTCouYko0aWxBPG8sU31hRig1WjYuV0JkMV1yV2V0Vko5Imt8Y0w8S1ZDWHN+aylLbFl7SzdNUHxlcE9EJCE8O2lEKGhyY3khdUM5IUw/O34mb1pvPVhKWlVURFNEO0prcTZjSFhpODZXTjhDJGg1diFeTDY/NiFeJFZEaiFkeWpOOTwuN2FELCs2altqaWY6Xyh2NjcsSypaajZgLn0kUHhm''@;'; put 'put ''OF12WnpKR3UoJTk5a1JQMSVKbDh6cEB9Jlt3WHUvSnNaMmBRNjJST31hSmx+Mjh5bz0oLDYqKFFwUzVuWy5UNjJeQC9AYk90UEhgMj5ic0FOZlZ3PyspMjAkSlJGdGZgbmtbYTd5ZHhsalhwejBvNDY/WUYkMjZseFJxRnAlejtbZy8vPyNWRDt3Zj0zTClMez9aZXhSOF1APDhGQmordDBTWF92''@;'; put 'put ''JX1HJDE9SHZrTUsxRSJoOGd3LnwrWGNIVEhJOnZUYGhTLDlgRkMoQik6VF5hTHImJmE2QlpBfXJ4NnIuTURLemZDIiR+Wz12K10zNXV1bTUmU1ZOUyNvNkk8V29LdV4hQWZKTnlTfUw3KFVwPiM0PWdsWUE4aUA8NzpMbCNKZy8/TTssKFI5ZEV+eHdyMUlCSWBwWXk0SDI9XlVEJSR4QGQ4bXZh''@;'; put 'put ''Nkc8XlU9OXw3dihJI18zVFg+YUBJSjVkYSY5VV1gTyoub2tnL0tTYGBfVik5byNWcHA3QUtYKWdxK1N5LzZ4eCghRU4ja1YkJHYpOFE9cWpnImR4fltAbVNuNCsmd0hWQjs8fVldSUdTQWZ7PzhsXSNMQ3pAPTE9ZihDRSFkXmJCei48Q1k/Y2l3Yk1SKWVyckFYMHY6VkNoUktnWm9PNT5YLy94''@;'; put 'put ''XmBHV0ZeRSZaO3hFYihfUng9X3duOT5CZWUwV3R5PUVuaW9OV199YzpdIi9BWitINmJCI2gzPiZKOmJmJFpSPEhudzpEVD8/ck5vVTM/TTdyVk0/OGYrJlhbUXM9SVs8c0h9SD06fVNrR3RbfkNibkNBVC9yWE99YlBfWV9od1FIYSpjNHAwI2dxL2tEeV52d3I1OlNyIkZmSlBWTTBfb19vQCxT''@;'; put 'put ''clFyeTYsMnBpOnR5bCZ6QU8lIyFxQkt3bloqImQhJk9rWlI8cjxjM28oRXxEKWMmNFZ+WmdgdX07JjYkTThWKlQ/OSg9VSUscj5DSiFSUFpOUHE9VXJNfENdQUtDPFRmSCJjcE86TihXY1J4bz40Qml1SXZXMHdkfCFPMC4kYk5oMmd0T2kxcHJfMGR9Wzc2YnVmN2IsKSZhZX5TOT1rJjdwQ19J''@;'; put 'put ''PyZ0bG9BNDZoNDJ3NG8zWXApT1kqY2lMbXdNZVVpfD9QfjR8cTwxWl1LWyV2QDBiPjRGVT57Zl4kJHIzfSEsPz90SDE+QihrWXViSlBjQVkzaVRvUSg8NXsxNlBZUSVnTXUrIUd7cElPWEoqdzEyJXRNfGEmMS5aRVFXY05AIU1zOjF4LjcqaXhIaC90RlY4fW9uJilkKylraWY3NSVCRVNjWXxL''@;'; put 'put ''dXFRcmY+OT4yZjlfaktwXztvcnUwPzV2TGpTNUNpbHBiS2cyTXhAeSl8K1hJWHJZfHtbUnlzTCxIdT9XU2Z6aHd6TzImdSVubk9jU3ddNCwwU040NkhYSUB7ekJJfjQyXy5eSFRUWCRkMHEoTWo6K1JwK2dvfmZBemFoOWpVI0wpa3I5N1VuKFVkdUxUZmE0UWo9T1F4S0t1OixIdEFoViNuPHZK''@;'; put 'put ''K204KEwqQnlDVEoqMTNRODFZYDghQmBRPWtCTCp5LFk/b31FKVJCYnp7RS4+Qi4sRD1lNyFCWF82RjNiO0tFRWtNI29ubHF9WG94bzwsL0pnKmJGOUpwVkBkMl9CQmA8Sng2QFo3dXZfKnBAcWRjdj9QLiFeVXF2eTZGJT9BYXNlRTtXdUBOdnd+SENpWXhRPTU3d1kodX5JOjl7UTZdSG9McGl9''@;'; put 'put ''VjVVWz0/RiVGfS9dRzVXekhHTzZbdnI0YzI3elYwbSp3dzsseH03L0NsRlRELkxbT2chKDUsO0AiUjFCKFRufWRLKlROdmBKSHx1UUhQK0dacCs1RWpFWjl4RT0/LzBrZmE/SixQIThWVXJjMUtyLGxHKk5vQSx7IiVVekA+PnFIXn1RTmcqMWhzOXlLQ1NQdU88RSVQdnUsPG5vLEJjQXBYQ09S''@;'; put 'put ''QWgpZ0R4IkJ1ZTxwXUQkcENMP10kOHIqT1BlbV5vJkBRQ21zQnxBLiJEQ25vfCJ9eEQlYHB2PCRMLkI/e3tyNDlqMkk5P3tsVEBtMzl7ayFJUypXWzVhZ214XnoyLnlMcSo+Vmc7d1Zga09tSFsiRjs+e1IxUkp0bkMrTWRKNSxkfiJwM0VSK1NPcTRefEozQWxnInYsKCsyVEo1XVd3L0hlOmcu''@;'; put 'put ''KmsyNjh2VTk5PXFxMXd5LG8iOmM+WnsjWk4wQWJxQmp0OC45KDYrbm56Zix2ekwmP09AVFdtTilVZGA+JCgjJCEhIXEyKFArWXh4cS57fShGaFBGX1IqVTxQPW4ybXdYeE4wOmhLQzlXTU9VVU4+UixZIz9gbWhJcGE9UFYsUGk3Y0Z1UX1RU1lieVJuTEQiQUgpQUx4djo1cWtwN2cxU3h2VFZZ''@;'; put 'put ''NzkxKU5db1Qhamk1d2lRS2VlWDtqQ3JzdGhRbElAIyhtP1BMMzBsRUtBQ05pWWB2ZXUuJEBuIkhrNXI+KD9hWk8yP0IoTSMmJCleJUR3UVB2bW8xZDw2PmhIQGQ2aTZBQHxJYEgrMWtAdG5wUjIheiRvOEYuZ0R3ZDo+SGd0M1U6VEt4MTdLKiNyLGkjRG84NSNCRjtdLHVNcFZYNW1nbkAqajRR''@;'; put 'put ''anZ2dCU+Q0A/I204dGxBPih2W1RvYmUlanE7c0xDdCNdbnliQ1FRKDN4QFkiYUZNPzc0TSg1NEwuYEByXWJAYSpHfCwqbFFyO3pwTWZidWB+QEsyKWsoSDlzdyNxclJlbWU+JiIqUj8jMWlmU1puVlIoU1VgcmA9W2NENkY4Uz14bV41d0dQbktCTCtzRCZkR25URTRaISZlKS4sRFBuIyVGY1o4''@;'; put 'put ''T3R+e3JGb1RQJEEmWy5PRWdmWk4jYUgwV2ZYdklfdUBSK2U7P0tFbm1tZz5eMiNUIzIycDwvMCk2Vzd1Zjc6QWpeO31OM0hdSW90QE47S3AkYztEakcvKW5fY0QybmUoLkk1LmVqUkZoIkg+aCt0eHZiK05CfCFofT4lSSRdZSUiQD5kaF99IVhWOmJWRCJgUi4rZUNhY1EkUmBMJEszX250cHk8''@;'; put 'put ''YXFEIkRII0Q2KChlM2dAbzJucSUoSGIqeSQwM0daaEFwM0dDam1BIzlrdXgrTXFpc3ImOl1gM2BLMGlZXnI2VGs9YGhmMk1oQVZ2blp6fnNrRXt2KChSS0NlWDc8WHFmfH01bXJyeUxle3kuQmImRD1JeD9rfDsjUGczcTtMPSReKHlXIWwqTkYsP3pzTUdOcmpEeVg7LlBYX3U0XiR5aTJsLGUp''@;'; put 'put ''LndZbDF6WXQwU09mb3hXOihCVDRqMltqQ0o+dDl5ZyM1U1JPZFFVRXNbeiFjdXVgS0A/Um19RVoqVSJLZm9NUV4kQTFkYSpGWGJ4O3w+WCJCLGV3LkZ2YGR8NFdDRlA7STwyRF1TdzRpYzdaSn1TSnNFKlgiMjk4OVpyRW80QX1KYmFBPUc7Tix+eWVgWVJPVHY8I15yL2E1UU83MyIsTjtSZE5m''@;'; put 'put ''QnJsZUc0dDlkXUpdRTRkRyp7YVldbGhneyh9MmFEIX5pdU1hIkRfeiFPbytHalFkTVFLUkB4PHs9c31QO2J1c1MmU2lpPko9TmlJa3ldUFBdeShheG09QEhyZ2p4YTJuL1lZViluZkg9UEQkXk1FLz9fdFpOe3w3clsrQyk4RzdHaUg1Yzd3dj14SksmRUNOfDx0NGhWQ04/QnpnYGJDcWRpVDo2''@;'; put 'put ''cSJxPzBVVHJbSHQ8Ri89TClOfGdGIWJaX3EsXSVQNWskKSZJQEwvQzFeZXhGRXlAcTdeNk01e18wbjZ4fEo6XyhnND04NGFkckNkTXF7SzYyX2Q5dVEhYCFhMEgremxjRkImfkVXLm0oVGtGflNqJk1dZXxCK31hOTtqZmllaVhldz15Q0tETTBeZ2o7MCkxbHhsL05PcipLLEBhL3RLfiRkWjFI''@;'; put 'put ''RT8iekUoMmhzUkp7M0EudkZRfEYwPGBgaGdKfEY0Ul9LUV9KRFovYm1EL3RzaUgwNFVlTz43S1FNLns3U1BDWVR3bFI0d2dnaGYqPWh8Qn4kayVURypbNDR1TGRoOHltRzBJNTBoRTxpaFl4N3NpLiN5QmVxYkcwOGBVV0Y4NWlpWGN1RT1GMSgufDM0WFJBJGFVbiZENjlzKnpAXlE4KFMpKWV8''@;'; put 'put ''aU4pP30yRGcraENMc0o9el4xNm54bG00cVoyW0RdKyIsSX5qY3RSel8pL2k/eGNCdWFZYGl1NHVLZiluaUV4bGhIL3omblM2O28pfWhETnN1d0ZRcD9DNStFQkh2d2VPejtlc3toeV0sKTVodTw9PjVWWChoPWxfeHVQb25yQVt5QzVQUyFmdUlFVmd1K0Zwa3t5LEQvWCRUdGAwciwsfTM3NENI''@;'; put 'put ''WnZqe09RKlZ3WFQ0bV8+akhpQk5Jb3BYXXJuJVBLLmRae3F7YD9GTmtHe0d0Ul5ZbUpPZDA9PXE1OVd3SEk3c2VWUGdgMXo5djs5WD9QK0VbS2A2M2VVfjZHT01McDxFXVs5cTJuZikxZ0FKKUxfTDwlQWt9aE5FKlF2TiF0ejVWSyR3T1diKmBnTT5QSylkREZgSChEe1MsW219Sns0aFEkWW1Q''@;'; put 'put ''UGlJRHhYZmxmaWxqPFguQ3IuV0h4TjBGMzlHJTcmNypkTVVFNFZgIUIhazNrQi45aEouVEtoLmlJVlVDMDlgIUVGUyRiPEVpOVpKVl9eI3ooJmo6IkZ0U31lMSZWeUxwR1dhPE00dHBIfDNGYGhUWWwjcVM1emMmIWtodHg+eEJOWyZWVkldJSl+KiVQW1FRdnArMTchLkx1c2hWWkNabU9JL2hO''@;'; put 'put ''PU1udHQpYn5sfTxSM1VtMCRuZ3pkNjF0aEhnS355emgoT246biwsZWN2MGJ2OmJJSUwmcElEX0NqJHBmMm4oRWpWelNrY3lGejUhcEQzTih3VX1kNk4pQGo1N1FjXmguMzhEcURPTkx1ZD57b2xURkhmR3Y6Qlk8ZW1jJkY6QzQiUHc7P1EoTk1JVi5jVXFHRThEJnksKzNsUH06N31pOF9wQk50''@;'; put 'put ''VEAyS3kzSTtaZTsyVTd9e1R6JURuS1t1aFReckY0dlkiOUoiUWlyeX0zLy4sJU1YTDxFTmwrQSN9am1JOlR0RyEpUk4lLlthbypdcyZFfWZYe0I/IiZxRyMjW10rOjt8ViJhRmRIeWJoLDpObXNPOHExTXlrN0JWWXJdeHtuemxyaFN8bCNpOHc0XTBSUT1JfltNXz43amZGUSY3PUpvKilYXnxF''@;'; put 'put ''U1Q3en5vYCNEZWhZM2lYVHpUbXlwWDQ4bUJ9eSZtY0U4QFRONDhob2h8Lyohc0Iue3BSYHZ0Yl4ubWYiMG5AJCQ1fGZTSz0ycUxvSSRFWiZkZ0d7YFA2cERtMFM+Qi43NnQ6Sn07XnxQPGIwbW5vZ3UmVC5lMChaPTNFOWRDTVUzZy9QMG9aeGIySCQvUEZwUnh5aysrfTxYPzxUcCk3OHs1cDQr''@;'; put 'put ''QFBaXmB5PVJzKk9JPllEYTE7TG8hR1heU1MqIzM6eU5YWWpMU0IxVFIpTWF3cDs7ZV9JUSwjVFdufkBkJHxOY1R8PEZETz8jdFFxWnJCSHUvTWN5TDtLRlJgW31pPjRuIS5YMkUpbkdPYW9faSxdP2xkSCZ0LyNVLmY8SmhNKUVHcl9Ld1ZHT3tqUlBuRUlgRGpqd308fDVxbDJ3LExJdns+U05K''@;'; put 'put ''UDZqNVB7MCVRVj1UQjB4Ri88UylrdXwyaG0iRmJbbzkoTVJ7JUI7JV1Tako0TiwqelZyUmR6fVtyfWgveWEsPiJQemQ2KHFYWzcmOlQ1Tyw4YipGaGpzVH1vPUlxKihBSHZwX2g8WW5DPUlaQX1oT316LDV0QFFiOnM3PVphQ1Z7QmEoUVJkbnwxNEhzdk1fJiVhZlM1X0xoM0cuT2Y4R0g4dkQk''@;'; put 'put ''Ykt7NkxwJTFaOHt1ZC85a2A1Uioocyk5dmFIY1J7NEMmNVMhXV4qJjd9Z2ooWndXKlIjckAyIX1oPCg+IS4yZVleUXVaTSs9S2lIOlJSQDcmeHxOM0AjU3ZGXlF8Tl9SR0JpLEhicH1KSSt3T0Z9PmdtNUt9empuOVBEYG1DYXJRYyMyWzNoX1l9SnBzS0IuUmNSL3ZXZXhYJndiMjRRb1ZxVCpO''@;'; put 'put ''P0smPnloNyMqfG1fKTtdNUBoVVZucnVpTDAxP2w1SXYydEgxOFNDNmJDe31vfT1oWCJLdDZUXWNPejRdNiYiWXEiPUlmSlZMNnhHSV81WUh5TTxmM35XM01iJVplUjlWQHZ1T1lXaFtOJXRCIl4xXXNTKiZpWFI0d0s8KzJnd3MvbmFgRkxQeHlbYnVtSTo8V0FIdU1zI3UwNXVqeyNIL15BeXNN''@;'; put 'put ''d0ZiYVBqS1trJXgjSE5gbGNwJD0mVTxxLn5HfHc4a1hFfFJKM0FeYD1WL1p2cmdUJkd7Ylt3eEhCPFZQXnR2PXdzLkZ1Q3FtJDhTdlRya0hHdW15LH19YE00TiQmWVtLNn1pdkJpVXFGWSRXNThSfF96WDtoMlk8Tno/cldpPEhSbyF8X2xZNztfQmFnZXtOUTFkbkphcChFU0lnK1h3fm5TIVMv''@;'; put 'put ''JHRGcm1ZPTp4Un0kR0o8JkQ3N3Z3bEQkMWpocHV5NG4jPXJXVjR8JGJUc3ZxWzNXcURjOXxMYT43OEMjakE7fjMke0Y3Iik3NEVLfTYhamFRRUR5RnEhU0EuTGd+enteMyhjc1ZjOkd1Vjh4V34yelI2NSRGQzVQdCQkW1pYQyZqIzBsen5bR1BNd3slblNlOEYlS3VAKl88dHhIfVZKWG9+YCU5''@;'; put 'put ''STNCJWxiWVpheXJsRjQ3Vy9LcjtxLFBKdztAWkI5PCtQfHMrOExSQDE/UktuUVV8Nzh0NmFTJkNwJDZPIXN+aDQzLD1LM282TF5iKzZfdG1tPiUuX0teVy9ue2wySHt7Z28oaWghbmw3bCRDenZPQmk8ckJXIjRUS2U3d3tTRTB4P3d5cX01ImAoS1FEe2hEYkgydVQ2NGFPWnh7d292PVEkYGE0''@;'; put 'put ''L3tXV19tXjM4M0gpTlohNTZWbWEmSzZ+eGpQYStMaFNFTGVQRVpnNkc0b1pJfk16Uk15VSY8SVFPXzR5SXptVGFpXSxUdHhuQEJLIz5pTXMkYFMscCljKTc7VjhzNil3QEhvS1NXazFlcnNRaFdYPX1Vc2lRI1d5I0lGQW5+YlMoO1VweVlFKSFNS1csJTdmZnpOMi9BLnQud2VYWG1kS1c/I11A''@;'; put 'put ''Y019dUJSJkZ4YmskWWpKMSEuWUNzSUQjaFp7QDNZQ0RkTllgSjZbYy9UTlsqK24wQW0zREZKc0x7dnNvX00oMyNLNjN5XSVfNVVSTHRDRVB9TF9HKz4pKkdsYlR9PC93Y1JpI2N9X2hHfiYlITkkTz1ZSzIqJHxmUVh1Xi5hMVpVZyNyOGZaeCV6KF9jc0dmaV80c09LNl5tJXJCVEBlQH1ye2te''@;'; put 'put ''elRWWSxfMz8zejp0QkF5JWBrVlE3RElCR2UlaitWO1VYImZ9YEVwWmhEXTlQQz03S0smLGNSNFdVUjokI097XmlBIklgby9+LDFHXSo+eiN9QiMkKSJ6XmpmKkAyJEhGPUJQNllOX1BZak5Rbm92SUYyY3IxUU4lWCtEU0d2aTxDd0JQeFcyeHM5SGR7Y2UkKlcia1BVYCZASlcrRntUalMqPlhI''@;'; put 'put ''MjooUGdAPl93IXlMYyl6NkduTXtCM0J6V1NwXVB0JjBxX1ZmRkpmflJucS9Ld2RGeH1uUXEpT3dVPzYvfDx9LG5QKW5uc34meDJFaCIofnNiWChXPHtBam9PVkxPWUljMXEzVWBvXnx6T1QqSHtWd1V2WSZHXjpJOmk7NE5Ud3BnOFdbbih9Ujh4KTFaP0JkP2dyamFwZ0ZANT1eJmZ+S3lVUDl9''@;'; put 'put ''e3AvXT57M3hEOWV2MXpHaVl6dyVybFspQjFyNDV8Y1VDQ2RfUSlvWVNeT1N6MG9kfmdNcCMhN2k5JH0pJVNXdC85cFdwbU07b2ZtOWZ+TUllXjhBM0B7O0JeQjJXPk51aD8xNlMka0oqWTxgZmF9PmZQdV0xMVJuWFNmW2VYTlhEN2JpYU1NLylFY1BiIWo8aCNZdV59X35RKj1NTzs+WH0pdipL''@;'; put 'put ''Z0dPXSxzXXU1UGFTaUdXV1F4Snc6c0IifiZkQERObn1jcTgyb18lYldrX11JZzZHNEl6Kkw2VjkxWnJbKWhYdjIoP0Rbb0k9MUpgM2toVSxZWiJPbyVHVl0wa1ZEOX44NnZHbyhTSSw6NHQjIjFfLGA0VFlBbHI3R0daOiZVJTRuMSpuVDpRbW0lL0whLnZXQz44cllkPmFGcm0laD09Sig9N0oh''@;'; put 'put ''d0FzPj4uNERFTHl6PkU1WjNbPz9LTllPSUVtIV4uWGo1ZSo2OzEzS2A7RiRHWCIsKC5dPnF3QDZWJDJEfGd6OiZAdXYibylOWDxAZDtINzZzOmhydiMveGhGQkhhSDZjMkNQcnt0V2dIUWZqKiElc304MXE/VFtbMUhzXjZSJU10fGhvTCx8eUdmYzp0L00kV3oxRGlvenQxa1plKit0ckpBYyNy''@;'; put 'put ''a2JIPlA6PXN3PHlRZilvJE1gXWNIYU1UOmxxJWM1PTIvS2E4UGxGJUBwaSxXQzdQS0ZMYVI3Mlgjdmd5WT9OYj8/dmN2VT9KZl00KGZVZXZTdzw/U1ooW2h4UmVycjllem4yQ1Bbai5uZX1nLGd+aDV9PVEieDtwOVtfSUF6RnZJUVVqUTwkTHQ3Onl1bzk6Q008aDUkYlhFIXdnSXhkTVs0XWdQ''@;'; put 'put ''fnQrPVEvQCRhNkNeVCp0SGN7SmxjPmE7fXppL2F8SzpXUXksMWFqVUh+Tn1XLEVNakMrbEI6andzOlt1NlpHfmdNUzdjZF1OVTtXc3VzZ1VNPTFnXSY8LyxMX31VPWwodnheQHEvNSRmeXE/VCowSFQzSnp8TkA5U2lyR2g7TF4xdi88dTtuWDx2UUBtWCp0clY3IzJpaiU1JUNpV3MmLCZ+ckJ4''@;'; put 'put ''IV9VZzpPcmlXJFBRNUZbVXVaR3BRdWxAVl1kRVl2cXdZUjYqIngrOnl9KGQkPmsuMVJZN1dTSmpYRUZkNHZtX1F9WyYlbipNWiNVVXJ5XVBPSyR3Y0U2c0B1JnoxWHhfKi5FKVFBajlYSH47QTRvZ1k1N1IhNiMwV2BHMyNrNSomMFoyWGZmXyhLMTUmIW5EYiMid1NxaT5WWChgdSZ1SFowW0FZ''@;'; put 'put ''aUUsT1g2aWMudWBxLm4iM19xY2A5Kl0hJjR3bmhxX2hQWFJsJWhSRz1JfE9KZTdOTXhUbVpneUMsLjhjaFNiJGB6fSNDSHJSW3tNJmBPR1NLUl8+bD50ajNCSVomNWckeT49WmNxcU8iSHBYMHE1W30ySTdUWGd7Wz51OjZgaW1nWCYwSjAyeEljOVZIR1MxP1V7fE1naDF6aWE5IU0iZF80P3JZ''@;'; put 'put ''NnJJVzZTc1JxI2YxPTlgPEgwRH43KSNCaFhveS5oUD4kPiF0LismSFF3Zk5zbnxPZSleKVZLeWA4SDxOLypCdSUlejxdVDQzTzUzRyN3dy5wWWJnOklDcnIwUGFYP3pAOUN4UntXIWQ3SjBHb2cvbWhpPXFkfDE1VCwvV2JRWCNgPDpmZXQobTE8OERsOjt7LnFZRVJ0UG9uXWhtPWZkNS5iU3FA''@;'; put 'put ''NG1HKikxfmhDQ0R6WnJfaWwoZV1fKWtrSHhfNVkmaEdjSkFUVDgvKF5mS3pkU3B6YjRtZzI8KTY5KzxNSkNLZTMreG85OElTaEFgJmhmO2xyMFhwPCsvK0VWOHteeVg8ZFIpRTJfUEFjKnl2Wz5OZDVmS1JrJT5KTG1YKUo2ZntIVDRtaE41e3k9QHU6WyZ5QTsyImx+SlVNRFd2Q1cjNF8xcHJG''@;'; put 'put ''ezlNP11FI1o/dUJYclNgbmJFVzB4bGwwSVQrK14+fXY9SlNrXkZJSClGP1VpX2Q6KTtTRWRFeGd8SC9ENiM8SCZ1e1o6cVYjXTA7fFZePUk5LnoqWkVCK1FUeT5gZ11tJSs0IW9leyVpJk84RClXK1E/WXNqfShEclZ0eX5FVENRJkd7QDdbJShZIkYiKjNNSCRYemNKZlZ1PTglRjdKK2ZqZnVQ''@;'; put 'put ''KTpta2tsIkIoJSlNZ1F6X301fjFUYyRueDZOL3hyV35CRWdJaGk3UEQ3QDQhc3lWPyZOJENza2t0Q0QoeGI1PXd2Xl81JURXNz9NUHY4OkxJNU5VRG9JelVafXwwdVltRkdOYnIzPUF3ZiN8QiJeRSI3cVI/fWd9VzdpeXdGZ2AyLFthOFhWKG9XJHZhfTx2NEc7S2xnR2I1QlF0cWRRLGlgPStf''@;'; put 'put ''UDlYPkdgbklLPm8sVGcyJkMyIyheRDBWSXVEUXBSdW55NSRZRmhXPE5HaFQ3eWJoJj4wRlpyaHxEU009RUhOVGVkQmJwYH1fdFlHYTMrO15gQjtaViJsLERIJnE9aUUqMm06YWdRUjQpMzt3KUt4ZWIjNnFqKzp2PmBLQ0tGTyFPWXRmY1ooN3smJWFeP3xZKGxmfCpNIz1vaFc6amR5SG9iVD9n''@;'; put 'put ''Ync8OX41a2lsOTY1JEshQkB2TjxtbVp3SkZJOT56cigsUERsRVpfdz0mJUlYbXdVTCt+K2UqdTRYOXplaU9rKDUicGpeMlpnUHp7cDRgK099Tm5KNVYmcHUwaXJfYEMuVyRIQD5ZSTZIVkJZLiRfbT4rNyM1O3Y5XiNXemxBWHd7JmVsN0JeRFMoM3FGZUtHLjoqSXwuM1Q4QDVqei89aHd3U0pO''@;'; put 'put ''MEJzfDxFK2hNNnNnbiZkYkc2JkwuLl1jTSJsfGBLS2pvMlglfGkiR1JSPy55cVZCKjJzN2MrL0p8Y00kMC5tPGhKTXNrZjZpWyYlVipDNX1pMnpuLiZoNkhhWm9IaVBRM2BecnlnNzxkYSR9eGxdISUoYlJdPzc+YTtRISZ4NDhSYEFpXjxFWUp+IlEwUFQzekxiOShhNm1DIlszXm1rRGV2bHZ1''@;'; put 'put ''amtOKyxLPjdjInVpOWVjKzZ+QHFzYDZPfjVabFtSWiJAKUZGWmc5OmViZDA4PzplRHhqQ1lKV1E8Qyptb0w1dWpHIWAvWSVoWj0sXjkkQ2Y9Um9JV3tKR0RTdFdAMUlJPHRAWmwuJCN9P3NocTg7TSQ5QDk2Tl4yKEQzISl7ZXVSJE8rQlt4I3NKM20wdyhKd0tNSUd4KzN6MDRYJUErTE5UK25h''@;'; put 'put ''VVpAUTpMSkFpflk6cjYwclhJPGF+MVAlWHpra2klZCZ6dCtPQzEsR1BlVWFHWjl9Vl9YQCk5WkYxTUFZSW5rMUY5ajIwY3JzfmRHNm1AJE5vLHglMy5HSywjL1Nwbk1HMG1TbUlVS1B5K2pUR3UpKC5NMCVmIyU+TjFZNFhKLFQyLFo4eHhFdGhFZ0xGJTAhKzZTdUU6fm5VTGtGfFREJUFpKkhm''@;'; put 'put ''bT5pNS5KRyY+W2p7Zl9GVzUuX2d2eF89SHdrbnJzO109PkwzN3gzT2ZfdlVOe3d3VTIic0pCQ2U+V2AvQ3RiQSooPVVeNWk8WH16Vko7PEBzalclSG8oUndvPmh7JTQ6ekhRJjg8RkhlL0lqeHlIeVpoWWpxaU5ZYndbTEA0XlF6dUtdNEN8UWN3UnRTNmVGJC8wcTlEKlJxVEc7emtXY1JiMX5t''@;'; put 'put ''NEMjWHVpeztEOUhNe0hfUXtZR3AsaCR0X0RXMH1zdiMyWSU4M1FCYDM5RHNXO0VVRyElR3pwMzJqbWxKKCtsQ0wpY081a2dbTjtdRl1kaDwsYXxCLC9rMTxzLFVxazBZQChJaj9hdzVreF5DKERvYXhMMWZsSzxmOXtBUUQmJUxQT2RNdT1KOU5QKztYSzw0OTZPUzJ0Rip0aEt8XUd2YD0/N3ha''@;'; put 'put ''ZFp7JllqMW8wVXtCKkFxZ35MYTkrPjYjOWVCWVdUUXc0S1k8NHQjUW8pM343VS4+S3JeSU02dGFhPHxLV1lCR35jTldePFdRL2xHWEd7R0NLO3lJUkRWO0Y/cmZvQGwhWDsmI3MyR3Z7ZHAvTm1Le1ElM002IXUpY21ofWA/LykwQDdCMl1dd2wzaUIoRjpKfHZ2US9hUSQ9SXc2OitEbilHRU1g''@;'; put 'put ''Y208RWw9OS8xTE1RfilMJi4hKEx3NTpVMDR1QzdxOGpIWzhwQFVEajlhfHR0YlFJajh8X0ZDOm1hTzsqUUlNWlsvMyMvYF5idT5RUUw9dV0xbj5zWnUuU1BiSjlOUCxlJVNNTlA4SX5JZnN4Un07TW9tUjdwYEsqa2J3KWNpTEM4Kz00dy5QenowdU02KE5FUHIyVE9fdHR6PSJGMDYySWVVYjJX''@;'; put 'put ''Q1MmIUdiKk88IStNRX5ZaSx2Y2dKQHJtYCp9YDJ6Q2s/IS9FTSxtJjBfOjZhd09aOFBHbkh2Rz4we0J5UllPbXA8MkE1cTFRKz1ULzt8eGZHdChbQ35CKj4pWHVDS3c0PnY4ZEArK2JscG5tNnkpKl1RSkA+aGluSDZtej5yKWBNNldhQG1qVElpbUZCLmd1cUVAWDU6WFtOMllOMV8jaGRJKFI8''@;'; put 'put ''VHNeXUorS1todjExOHc5PHlpLHJ9WmhoQEM9QiMkZ3QhMDl1emMmdSEySClvJDt5ZDpfNjs0SXJZNCtpY1o2aD93cjNSQkZMQyVrfTssa3Riel1+QXhndExWQlhOWChXKnFiU3lraFgrQ1FDMUsqTUR2Xz4iRnNxKClNeVIqbFVhdUIsXV9gMXdJe0IqMnZeMD8xTiRaRShkckdsIWRlMl0meyta''@;'; put 'put ''KlNJTkI0dnkxU2xJbWozSjteVmllPTVaPytDTFdzYFQ4PCJuUEtsIjopKEAuczVja2oyJmxvL1svTnJiaGJ+fHZzNTVsKFAjOkBVKHsrajY4Q0Uoa0gjfWJLZStBM0ZZZV5LS0hTMDpRXSxaWTRRbiwjWWVEMCJUWTNbNGQ6WG9AMj1OPTQ6NVVweHlMaUVjdCpZZl9vTXZpQWcvZXFAeVZjUVY0''@;'; put 'put ''LjdxZm13PGcmQjdRZjZuK1s1RF9sRENSb2tVU3ohYGxzQ2QhIj1kc3IjVyw8fCUwYiltRUhuOGIuP3tXR2lZKnI0TTxnV2pgcmMsY31LJDpwZG1mJXM0S3R2clhJdzlGRkohQkd4K35TVGVdRiQvZV92YS93ZVkxMVZtTUIoUX05NyIqOV1DQExeaTIkKF9MfCZVd2YpbGEjbGViJktxOn0vL3Bf''@;'; put 'put ''TytQMkYvO01eciFxSjxEOXhfWEw8QmF0Ry9FcC8lNEQrZENAPkgwInpdaFdOa2JtKVlgdiF4My5MUCRUbzpVeXk+Qik2MUNefVQ4ZiF3Yl5EcSMmb2RNYzwlOD95fHglVXkmJSZUdEVKWFhBTVQyJU49cHJHT0RzKDQxYylQYkNWNW9VfTB7V3x1Im1HbX1kWjNMdC4kMSpJN0doI2tkN1ppU0lD''@;'; put 'put ''SVkzc1VYIU1WSWd0QkdLV3p0eiQxUTAuM3d4by9Jb2I2WCJdVmV6OnsuUWRqWCtsPXVzOjpOKDRhN0VSait+L0JBWDRSSVBYY0o5Ujo7RntxMEYlZS8jXkQxTSNbampWVXpxM3JEcTYycnQvQyVCTXBnY2R4eUkjcThhYnZJbSY6QzQqYjlsOGFzNmZwUFpPUU9JdiVaXmQxYU83e2MkZEcrczB8''@;'; put 'put ''YnckS3oyd0wvakdnaHAxZX4rJFc1ZzdiJih6SVpkWUdpNyFkZThiT29ZcXp4VUtCIWs+JS4yYU16W1J+XyNgeiEoZ2V8eF5wbXlteXNjMS9DVn5qbGJ9dG44djFfR3NxZ0YuTS8rRk4lK0BxSyVhNl8obXksPEhDYCFfaUJEQHAjYTpBPnp3LCloVF16LlMsbiFpMGs6Xi94KFE8VUYpTWZvT2Qj''@;'; put 'put ''Ik5fRFMkS11BY01rNUxMKVp4JS9yKyFDPTBzWF08I3BffG1mQzNwNEZZOyRqYW1LaW1SSV1IKjZnOlI4entkblRqVl1mLjdzSH19USNPN3w6VUhZNSpyWW4rOmdSTCNwJUw2JSJ1SzY/dmJXRmhUb3JDVnBjakkvX1tLc04rJWs1cSxfIms1O3MkSmVzS0lWeXAoVGYsYWQ4ZU5jMlV6TXlERHNj''@;'; put 'put ''S0RdQyQuSzxrKWhCREQkWih4WDtIZjB0cV41Jm1xLGg8bUdpTzpnX3ZmSTMpWy4jXTZiV25xaWl+YG1vQFo5PUBdMk5BfDlleD18PENXK0poa3h2PywlP1JwUDkzc009OzREcDFFdTF4ImB+WHV8S2ZZZUppKlZJOzw8KjI2K3koNGdVSXx8KV9sVWFGJkRJVU1ddV9RNyFlJE9aRXgsM0dXY0RM''@;'; put 'put ''ZCF6YEsrdDtDIVc7X2N+NSV6LjVeKE9WUXcodDFQdHpJWWlNTXRQLy9aQVsyS2p1YFhVY2I6NEJ4d1VSJVZxPVhRTn1rYmxkQylAdGFGSHokNEB6NnlgYVVJZXFVPFcvY1l9eClhO015WUcwfXpSOmA6Lnt+QjVjRUtMfVlyM2s4fiFHazBVY1BUOzIqS3VDK2dEXlVAbmpdZlJLQChGWiNNdV1K''@;'; put 'put ''SlQ/d1g0XyxuPlYyK3R7WDxQIyQkcS5jX2dKZHRHJn1FW2Yhai9TUyh2fUI8RG5xUkdHaipacXNMXSU/Z21mX1lffjlHXjJALmBXRCY7O1UyZmZdY2JPY1AzR1ZAWUJuV1JDU3NdMmwjSDQqQT9DLDBESCxpMXspRElsSDpybGhRTG1yfF9kcn5YQCQ7PClBUTV0MyFuIyQ2UngqQkNAL1AiT3Zy''@;'; put 'put ''Wzc/ZVE3NyRgJVlGJUsvfCUjfkNbT259cHkofF9iNGVVVjJaWk5fX0JiKld6fGV9SCwqYGxIRF5pOz5dMTVvI0gqSCVzSF1wfldlJVpUfXJMK2hSJipQYEJzV11eTGpjNypOTWtKVjwueCRUNC9Jc0pRRnFySWZqdkNMaGhYVzcoe31VSDRPdihGMlU+IW95RmpNSm02YWc+RUA+WE9MSXZHeDkq''@;'; put 'put ''KEAlfEBDKyR2XllGZS82c10lQXNSQGphR0xiXVh2dW0mNTIlODpbOCEweCxxZ0gmRE9xIzViT2F1OV5laCxzJiNKNk4yRFdeZFBtOyRLS0w2eHJeNV9CVWddX1RfMmJuJTldZjt5Rl9CXjxyK306WXozPWloWjI/ODtDOVI6LElGU3ZMOmBgVmg0XWAkTzZgQExfJVdqMj9bMDpaWFVrUjFBMTJY''@;'; put 'put ''ZmMidlVzWF5hLHIxSkcxaC5ZWWp2eSRRWUdZSmBfKGJmQCxuWSEiX0VHPH1LJXJ6UXB2U14raF9vTTU/WHdqTj5gVHdTUmE8cTFDP3wiQnF+O2dxKkQvJHNWak51JG57ZGE2cllNKGs/fGgreDBIR1hyPFNRRjBZNVUiXk5mKSUpKGZgLGowa3tAOTVhKyh1QXF0JSp2WV5vaFg8PV8sNkNfWEMr''@;'; put 'put ''O3EyIT0kZ3ghTUZPOyYiImBUUHpvdihULDN5LEYlN2BXZitkWnheWH0mKlZSVXt3NTJTSlRfekRvJWFVN2VAbls8bCZsXlBJMn5YWX0+ZG5VdypMN2grMllDWkY2WUkmSW45OlJ4Iz9xNn5TN05WT29ySnpuVFJCT0RtRCt7VkpkZGxhZHdWdTMxdDg+KmxQIXkudSpFdGIuUmp0XSxNNjZeQDU9''@;'; put 'put ''R1VtOjdUMlM+NThpX3txMywpMyo0RV8oJHJqLyR3Vk92aHpnP3kkZF8lc0dEeXh3QDcqfl1sTjU9e3EofVo/bUF+Vm4kJjI1JDd9bCpTPClYTXZ7Rnk7fjx5S2h0LmJ4NnZBIjBJOElnNlhDKyEyYjFxV2tIWWZ4e3tjZFtAKSt6Y3hnKHVoU11TIUgsbGBHWVN8c0BmYFZhOipSSm9NazJ2MHdF''@;'; put 'put ''eWkzZEYzRiMiTC98LnEuIVo1WnolI3o6ZDFkYk1yTWc4TER9QSJsMWRRYGtndCh8V1g5LDpLUl1xO1hDdmxJK2ZDPWwzVUQiQmIxJSVpb2RRUyEiRjVnXyMrYUZ3MW4oYGxRSW5EfXpdSW93TWk5aSgsSHNHWHwwcUY3fGdXRXM3c0ViTEZzWFpJLiwkPzN+OTJAX2pZRH01YSF8UTpueW1EUjko''@;'; put 'put ''Nm9TRERIej1JdnNuZy5zP1deRDRFaSRuaS9jTVhRWks4cGkmOi85Q2VTY0tsbi90eCQrVykoZjc7bz5ePkE9eElHd3Y/JVcpaTQxSWFQfWs3Q3UralNobVJ+eXVGVUtLQ29He1ldanZoIU8mO0pZN0J5RCJSL3IzKlcvaklTZ05pX1c0RE16KF47VmxjN2Z6WnZfbWxdOWozbGM+PColLHJEZ01d''@;'; put 'put ''ez8oZkU6Z05bLGNKPnlSNTc2cV9gaU1fTW40cC86IzpRUH4vYUgkQioxckEyKGRVcis7LD4mKnsjTWNQbEspJj5WbUssfnJ3fl07bVFdNylQWX11eEUkcWc+e1MuWnVTIyksOHZaTWY+azdVVSM8UGhofUhiND9rRkd1WlVFQ1FKY0ZBXzZ7VSlrYEA9YkV3dUg7Tj1FezAoOTpRUlA/Y2g3MHJk''@;'; put 'put ''R2BqcjU1P3VCbkc6djswSE1lRUJvKHFVZ1hOc0xlSVlPSUddb1pNcmkrPD0iaF1UaG9Ke29iOHIkZCN3bUJ5OWJGRjRybXA1MzFPSHRqJHZNZDlpJFhnZUNtYVVUa34hPVpNY2xOUkBSb2ZoODovdTJvSF9NMik4LnxiWDhoSUNMSmt1LCRsbXFuTCRWLG5RQFMoVGw1c2dFPHBieUZOSXxWLE1K''@;'; put 'put ''fS9HM01fPHY5cTMoO3BGUWU2PlV4V0ZCcSZGYntfO3AqLnVZSTZxKEw6cWtwYUlTbmhueSguUE9dVjtabmRAQH5SQG9qbmtzQFdDe3YzMThDY019QlRwNihzLnZxTDh9aCF9cWsyTDw/cyYyfjFreE5vRGtvNjNHMytKe0ZHYXdddno3PCVePEo9MEpYTlBNYW9VU0l8U24mJT5bS30hNFtJalN+''@;'; put 'put ''eGsxTCFCLFNpbjt0S0srMDg9RmVIeHU9e3ZrUDFaUiMqZkR4RXY7NSsobVgzX0UsZFQwY3pNcXk0TllyPm1ualp1JnldQ3dQIShqRFRdeiR6OHNKa1JvemxgOUhXfV47SD5KImt+ME1AVjVJSUZnUFNvWnRANmcxMUBrKzlOVSE0WkwiWXhlWFJrOTI1VW9idS46O0Y0Kl1bNiRXOl4pZlRZTCxZ''@;'; put 'put ''P1M/UDdFSSY7K0slWGZSS2xjTVRwWk1iIklPSFplRGt1Zysmdm55RnJBPitRZylyIkBTQEtCKW9oeXYsYkU5bjcrK0t5L1RrLHU3YVdkNXMmcUBRSGlSMCo+b3pFSlBKUnskV0ojMGpOTV42ZHgrLH5tQXxBKHxgeis7P29nbixDc1U0bjdkSGRgKlRwJE99JExtJE5YLGtAKTZbXUFANUYmPHV1''@;'; put 'put ''KElFZHxlKFYvJFhRMl13bXlKVnR2NkouMTFCVlBNZlIwV3hQKG57LCImc21rTFVrO3dsZGNQWjh5M0YodUh9Zk8/bS57bmtyTFskXWJbPEh+bGZYSVM0fHxNdnopKTJNd05EPm1zUHMjcjJ+RyFRNzpQQ1k1QTVlKXo2OS5uQENLXldxKVZEI055VV9TQi5rR09EUElsJmxLTkY9YyR8clZlXiZO''@;'; put 'put ''fTFAe0siTzF6MVttTixoKlJDUGhDU1c2eGh6PiMhJjJYO0NyOXhiVDNBe0BAaXJ3S3FRIi58Ql52Q1dAU14xV2R2T1RuMUorVVN1LD9tITlYT0JqPXVKW2c6PERHd1p3Qy9hV0RWb2loUTUkNCRUWy5oIz5oLzZiMWhbbWNRenpzXmoxZzxudVUyQFskV2BdZV1VNDdxLmcwQ0dSR3U/YGlGTCYw''@;'; put 'put ''RShBSVRbV3xILG47P1IpZTAhcVRCPG5pazkvM3M3YC4yOTsyZ18pPkI8WkNoSTYyem14ezFUWDJ1MGZYKUJeIV9TZVphTyVOJTBgZ3p7RyZtODckPGtRZ2MmfCsrVmJSe3ReRXNlUjx6UnE5MlZZJEhjUGo6VnBbTk0lRC5YKHZeIXQvU3g5V1hXM3FGRTMmY28xRGssSU13YHxzczI1NUhUbVJ4''@;'; put 'put ''MXl7ZVJuNCZsNGssUVo0cCoqPHA6ZXYiYH5pSzB5ckQ/M2ooMktYQGZvTV4wUFpwUFN8LkgjRSh1N1Mpa25DWjhvTGVSZU14bSV+PXhwfiUxY0FIeUdtYiYiQ3hkZ0AufCMoZkRHOTZIbDVWdnEqWntVZV5OQWNQUGxbLF5EUmp1fmFiT3dXMkVmd2dEKDY+aiJ7cjVkSCZte0hZQGYhJDxqX2xa''@;'; put 'put ''W2Vea3tQYVtBOHxFZml0LDthMjBYeHksVHlpRVE4KW01ZTNMNDAycFUoRFZgKFJKLjR8MCR9Pllwayx5VDJBXmY3Ln5KR2JdTiY6SiZmL2kvRXVRYzYwISR4WCxFKT5bZjVrR3hXYFszRnExKkxybyVBMmMxTkdFNWxzYy9rQENCLEdMdG9KI3Y2K3Z3M2Z+fi5TK1EpMGQ9aFBkPDZvUGVVIUAx''@;'; put 'put ''UWlERTtgKnxQJVQ/dH52S2UuaDc1Qm9DVF5NVFJteX1Pb1NncWliKztERz8+TkNhXzpmImRWLi46czQsUXZhZ1lmXVBGOV1tRXxHVzBAQm1yWW9nKlMydHAoYipgYG9eVEY2Y15efkVRVERkYztHUUJoTl9tP055cVc0QCldX2U0QypOJHlTLyxqSzZ+PmA9Rik+PnNkaTZidXFyRnhxPSNyJFhs''@;'; put 'put ''cHFSRUteNTpfTHBSdV98LGI7aT15X2whOWhFK3QsXTxCMHdHJCorT3xLX0lhYyxpZG12ZCNDa1hmYlhWKXM6cD56TTt3KiUzVVdhUTl0XylPMnpJO1ZSaWdEbng5WXQ2NVF0b2Y8STk9Pi99eGM+VjZGclZvIW9GLn0uMzheanpqcS5rO2VCRzxOPTw/NV51ZXNVP1BaJDZ7cU8lbDheLFosWmZV''@;'; put 'put ''ZTwsKn55U0ZxW1F2OVZ3OUMre0VoV298IUMwKk9QZyRSMGh1WiYobjtRRjQ8RC8vU0ooW2JuSmgjNyshXmRwWGojK18jKTVRTzVFIi9JV2ZUOlFBM2hFbS9hZH18I2ppVyViMTsoVVErLlJsQnY4VEJUOW9KMzZ6Onk9PnFiSkx1aUNiZXorUW1hclhMLjs5eTMyI3JSTkVoXyxsVmcpVDBBZEds''@;'; put 'put ''Nkh+ZW1WUjtXO0k5aXBdPGBRZk9GNnk5RFkzanglMnpdTDw/a2JCPH5RMUUuQnojUGpmMUFNbDd8KEZRV2EzeiRQOHBXSDtGeDwuNUE8aVRYfURLVU1JR1MhKT13S092RERNKS8odnB5aHYwXWMjN3srKSw+fHB8cFUqQkNEM14ofip+WDkhcn1wNWRpS3I5Y1RIN3IraVA9YChHLF50VzlFY18x''@;'; put 'put ''ZkNkdmlUZn52MkB3e15PNFtiX0gvNmEjPDk3Rz45PUJlSG1aRj1SOHtldygzcjBgZmlhTj9OSnZ9citGc0VZZi48PkB+Pk1gUnBKMDNhKzlwOE83SWouPlYkekF9RDN1XXFnXj5Ubjl6NiJsU2UlbUxMTVhkYHtoJkZCVS9YMGc0QUMsYnBxTDlXTGArai55YT5vXS97aF5OfHxxNzIrXlBbXjkw''@;'; put 'put ''UiwsITtjPHlNLHhGVy5ROmpqbUIjVzBHWEdKcipgR3p9cF97bEY8NUddSXxJWVRnNyt5LE5dMjIhQHQxeUM1aT4rYVYwUH4jaTVGL0tzRlFbOlpNMEZ3KTdVazU8ZU56I35UJlE5QHhtQixdTDdQbnVyKyltXlJ2aEluWVJLdVtAKGxGOHZ8ZE8vbUssSGooLixdcksuXSIqYGBuLm9WWlZVelBO''@;'; put 'put ''KkRtNytiL3g5eTwpVWlnQltLSXljOTZeRDJ6eDlqUH1vLzlmWy5hPihzZjdhKV4qYXg5P3dNQGhuZ2M1RDUpOldIQ1k1U1YhLlp3MyQjbHhYVW1WISlMZXIkWWB0WVsmWmNsKGtbQ35ALGEhQy9NfjA9fTprK3JWOmFMVlRBNTU/O35laVtReHt0fkZ5LzRaOkRHP3ltSX1vLmw7Y0RSXVUvaixd''@;'; put 'put ''JWJqY302cFh4Lj0odi4sLF4rL3NbSSVFeVZXa192Ui5VOCUyPFMwKWxRSzIsa0NEUntUYDpBOWFUT3YwIVNlVjNCeFs1XVVAe3I+X0w2eTo1U3Q0NCU/T2BAJFo+SlBGSnhqOytHXWhhOF02XUR3U1t2WHFoflAjTnMpd21hUCoySD5zR31VIkJ1c09HdXIhRmZ5fW9ZcHZobXozYmQuVCJ3Ykc/''@;'; put 'put ''RT9GfDlOcV9aeGEhWiE7aig1NlNvX0dPNlZZcUZKZz5Ac343Q0UjYDFlYCNkTXpQei5EX1VHKHNVTllSWG9YeyEjVWBMZC5mXTwqMm1WSjhwcTohOF9kakZqSGMySGVrNjlib0hIJColeWksMHNpRV5CKkkiPGgiJmw5YX4ySTpwVnBYYHtsNT9PZCtNc3tAQDtlU0M+LnRVMF1jP3sjNz1LZiU9''@;'; put 'put ''eTsiPXBeXlREM3xqOjhKVUhlPF82P1pLeTp4RVtvXzNLSlo1JEB3WzR6UGAsIzpOI19Ze3Fhd19QXnUyJmIlN3AoLj42WUhNLzVkN2JhXTg9QyJaLykodip3Z35OY21VbmdITWlxRURNXkd7c3ZDd2pHY0BBKH1IZzNKaTsuMyx7UFBGNlB5QkJANkQjfm11SXhNTj5LdUZIUipYNm58U3xTcGhQ''@;'; put 'put ''SmZieUcueXd5YGsrOnNQYzouZSx+SjZmL2pRYFBqKEFHQlBoX0IoaGw4cnBrTzIrbXgiOjhhb2EjUlh6PShNSzxAMl5nPlQxTDt6Ol1AYSM8QXBtVUZHXzE7OXdeJkZ6fX5tcixvfGBuRVIxdGJdUnR4dmwiaUtPTkVES2w9WlFCTzVjVWpPVClNPTk+SWQldHhnKnNkZiI3Wm0sLH43dSYuMCZl''@;'; put 'put ''MV14PVlifVokM1ZDPSYxUld9d0JHdVslXysyWyQoM1ozWmcpTVlueWtjcmFZSDo+YjI4QypqRiZfXS5xTFNoIV1aRDo2dzlVS0d1elQ/eGleOW0mMzUhZi9YSFhueSRFWT1rMitXYyJMbko0ZGpNV05wOHAkb3E8dWNNdyg3MVtnYTBCTVVzL254fE57SEAqUmRQZUdJYiNNKTAkM3gvITtWeUM2''@;'; put 'put ''SWM/UXtKcjQsbSxbeX1wQjt3ZzM9KEwvTWg1PXVaOV8+X1ZqO3JrVVk4TT5ANmwjYXNlcGF0e1E7cV1DUUE0Ois4ZzQ6UH5PKU8ydCpRTCFxcCZCMiR6X1VCVXpoOjozYW1+aTlfKkphIzFZJjRaXkdFOD97U3VNMiVTTD5iRXo8RkZoYGovd1FvTk4uMSwhL2VGRjhiVn0oKmNNai9VKDt3RzIv''@;'; put 'put ''dTkuV3ppXj1PI3lAVSklQHwrZXFMeURDfFNTdk16V2RDP0R3PzdvWjc3YDhLQypZamErTHM0ZSxBN1Zwe0xgISxRREYsPVBHemRvaXR7WFV6eVM5KWl9WGs7WGk0LC9rQF4qJGtGUHsrVWg8YnZBYzVhb2pjSEo4eDh1TGZPUENAKFJTPUdRLFQ2YSIxWV5bUlI5Q2RpPlciI0BqUDgvX31PUzZ0''@;'; put 'put ''LGByMlAzJlpdeV1Mckp+IUAzKTxNY2lCZFdSXWswc0UxOlNBcl1sN3l0Oz9XQEEwcWUqZ3IqUmR9Uz8wOjpjTTorIyFsZmo6KHdjaixgVDxKaVg6MVJFOzI+bk0+MENZTS4+Ui9+dVlDY0wlTUtJMyx3cDIqOF9bPE57YDF7P0JXN1FNMj13Om8lK3VJTkdkbmk1SHhwPEhobUQzTk1mKHZNRU5m''@;'; put 'put ''fm4hNVhzW1lDfjJDfVdudlNFbFBoT1RgTDE4Y19LcjFSLzs+fDwrM3xuWCkmLFI/W1Y9NE5MKn14UW09emRlVFdpUEdefXMmIiFgcXA8TnhDYlZjfVVCOGZfakxoaDMmNFF5ZUdzWWJ5cGcrLyV7IS5AInI7N1JzfDleRzlpYXVBLzc9RkQheCx7JkdTeUh5WSIlMkBXO2lIenUmOW1FYjkuV0Ey''@;'; put 'put ''JjxJb299U1p9b2dZdTtgbmBCZSpLYU4mJmpubVR9ZSZVLDZaajZOeHBLUWE4QWNRWyo1RlJaelBnMTE4cXFrKVF7MntbOyV4Q3J9bWQ8e19ieFtgXnwkT3dMbFNVN1A/UFNAdiYzMzJiakl7O25aST4hWVs0djFES2l2TXNpOiUhPzYpMUVmVEd1QzJndU93Z3VwS0Nxd0xMQC9dISZKMWtSTyFt''@;'; put 'put ''K04pOFNlbzgpNns2P0ooQGNPMj9kVXpsPUIwRSV5fjhmSjpnZzByPkQvJWl8fiwiX1RAZn5rZjIsSmlGRn04KndtYyFCTUxvW0J9TGtCcD48MmRuL2ljOjd1K0xlTlE7NV89T3pUfmFfNyJNfjh9N3BZZyJUKS5rZnBRLkZkaWE2dko7d00qTjUralA2Nmh7aUp7Rk9bRjpKQiZHPldGQ2tUZ2p0''@;'; put 'put ''N05hUz5FeGMwXlszbCVdKF5mKF1EK1VFdzMmNCtQNGE4aj11PVhYXnxzXlE5WDM3VTNIOldwKyVOU0RxeGJ7K20rIUN2QkdodDYyUk1XNUZ2L309ZEwjRl5KTXtYVDsjTSpNZmlPL0VRcD54Z2NpUURjXncrbDtTIlU4c041aTI9PEVUaXtkPmJYVFZWIU5+TzhkJGRkSSg/IkhnTmM7ZWNqZE9U''@;'; put 'put ''UnU7NkdFeXRvNk9fYXpwJjJbZ2MrNUIhPTpuQzRCazFTUlpZeDVAIURIIVhVbXcqYGU4YmZnJS9xdmJ6IkxhcT1FK19dckc/cSl3eEwpJmVMRSE+RHtrKFZkQUdTdD9pUDRvPjYvS3tyX2RvOGo1NkY4YyIwc19SamB0aXlMPnhhSCJYI0JuYj9bMU8oblZBQ1MjJjdOOHJkSEF8I347YXMvRjVj''@;'; put 'put ''V2BCUDNZRSMxfmdfZDk0Imsme3Nmb0p6bWAsJlVxPnxXSmEuMlU7OmRxJCl3RGs3cT90V25fUCRrVkxESDpUcGI4T3pAXVB7VzMkcSpBczVIUj9zSSgjTzpCOktGMztzbGA/IlpfV2RJcD1bUnx9V1NTOnp+TFtbVVFjKnhQKmU7I0QlPSp2Xn48WXpZZEM4eFpBaXJvNj5URDVoblore1R5LyVV''@;'; put 'put ''ZXw6bF5oeSsrbj5bMkEvUVZ8SlBnVEpUcVpEKyRVJTViLEp9KUZoUVo5X1t6S3x1NDFwJXhDO2BpaC4hNGhGI11hWD5NVFRnaktWOF5NZTJqInoxWT9VUCJHI1NJaD5AcklqKUN+LmFNWnVLeH1gPEI4YEs0SFFQPVI4NWFtfU14fCw8UH5fUixWd0E7YlFVZDVCO2NDaXs/VWtUc0xTPCI6dTFS''@;'; put 'put ''REcqK3FqeWlZJmAxPEhBO3drWWpDKCYjeXtXKkMxJjFjT1Y+U2QsbWcmYn1tdFguPkRvN0xiTDdLUFlMSGZSWkF3MilxeD84cHZ3TXB1RFhCPCU8eSVwTl5VTHFbIkovR2hPUHROZjtGI0ZgRSZNJFhPMl9jSnRAYDtpQmJAeDpTYnkhP3d9eT5XVSlJcltpQ2JoaEx+OSNZYXd4UD81VEB5TUJq''@;'; put 'put ''VnV4b2QvU2NvbiEsPFslIj5mQlNWKHs3PFVhfl4/UHNOZ1V0YilGeihhc3FSIzMmZ2xPMDkucysvK15oUShWKm9ASixYUVV8Pjt0Ty9wLjUrRU9KSFojcFRrPTc8N0V3andsYV84KEVfZTxjKylpdFYoQThZJi4wbnwpQVskTlprVFMjJl5EeEJKcSYwTVlHUHNHR189RUhOPEZUfi5hSV4qVCZn''@;'; put 'put ''b2IyZytKWVViTVFadkx0R2F5e3YhOEdDYEJCUXZLdT8oZmN4JE81TjpoRFFEP3kiV2F0cCpYbyZhXUNbUTslIl1uUkspWCpFKEtKfWtzOV9RU29XTXUpM3A1PXk2WUUrOSRaZlMoeUxpfkQvaVZ4cnMiMS9hRD0lI0RYbnY8SUV6dVE9VSp9SFRfOkxET2QzZ1FTcHUmTWA2aSMjW2kvSnVjVTVE''@;'; put 'put ''QSRxa2g3NXVTKl0+KjxPZ35SMW8yNjxWV0d6Y0hIYXt8Mj1EcXZ7OSpSTzRfQTJ3RDdrRmxuTDZeIUM2XWkvR3ZEaFlpZipUdF9kN0ZjR1E7aSlAWjRPUE8jcGFRMURnOE9PU0lNd0RbcXNkcmIven0oJjdZQmNoez1YbFUjPFtAMHphPGU1Nyp0b1VuSkFlL1A3R2Uwbl5iPX5YP2AlXU9mYE9S''@;'; put 'put ''I2wpVjNRbUhhTW9ieDwhMmIvRD1vNmdOb25PUVVIeWBpTWwzZDVELkFwX0w9dkEyYTAwWTRhV3NuQV4iQEdgSyQuQ0QwRWpxSUdHbTowKjJAbihKNGpuZUckbXlXVlgsRGFbJV8/JUZTPjApdWo4ImkyW3hXdE1ocV14U1h3UVFsPi5ifWg5b1VaV2loKyp9eXByLE9MbypCe1ZQfDxvIWVuPnsv''@;'; put 'put ''M1Q+anB9LEUjPnxTcUw1aEA6Oiw2YEZ+dnopdmddLlckRjl2RTYiazczLjJNSDsrdUFTNXhyfVo/QXJkV3YoR3ZicjJUNm9LOS5XY1NTdz43SC8ifF8sL1dVXVche31manQqKVA4cXd6fFRbcH1mU31HaEswImpRTWFvant8cFQiM1FnZ0hgWUZDeTB9Mml5Vy97aFszR0llTUJDRUUjLEFVLmFo''@;'; put 'put ''X3ZMaEsyQFtRKnk3e2E0QDRXdHlXQ1FtQihRcFZ9WWk2P3tCR1MqUWxncF9KaEZkfGxSNTcpaUQxNTNYfHJvdHphJCVJangyYUVNKV9+RzZnZ0VyP0QySD1SaEdkMSs7Oy8yPUZddWEjOng9Qz52R0liWzhCQSohYiozTFBkRXVFUFB8TWw1M31xeDBXYXdrOiskZE0jdE1tI209d3tqZj8qWXl8''@;'; put 'put ''Sj5ES3ddUVNNXjQvVm9qNVY6ckojRTlYckRtUVlydUhTPjV1diZ7WWBJQl9nezgmQnZAMlg7ISlDOW8ze0RuUVEpLDcqZ01PfUszcS4mRGV0bWpeY09VRyYrSXd6QntKOF15YFBzYDlqQWJXVSpzaC8lP2o7WEspO24wUmk8d153SiIkUUZHSnk5XUEyNVYoUG4/bz54dyEwcns/Nj1dL2NmaDBk''@;'; put 'put ''ci44a1hXUWN6TihLR2tjXSlgJHs+RHh5MmlQS0dwOnF1ZTpIMSZVeDY3JV41M0Aiey4/OTsrMHkpPlhtcUBKI18pSF09T3lQRjJ6Uk10bFQ8IUd9RWAsaUdZWlFhNjksdjNuYlg7K1cxZTMia2hydHM1VnlMMUpteENPbEkoQGsiIztUY1VsME1ycFNiQ2JhSUtbJSptOXFta0NXeHx0fX06PDI9''@;'; put 'put ''PUVoJkpqRW1HP2puQSZDeDt6QG5PW0s1KGd8ZzBSYlcqWytRZCpROHdCMD10Jk5Ha25RTWs8IXlwUiJoK2EiXiJWZFdlfCRObExyLlNBPXlZb1dScTtbd1REQVMmVmc3KWVzXV1JV044JSxbYD9RPHkpWEg3MXJnVl9iRGBsT2tNdzhLbXFbLjdHVFIpclR0ImZJSlV7YTJeOU93VGQ4d0MzIj5G''@;'; put 'put ''TGBoeHpbMEI3ZyF6aH1mTjlMMHV1djNrUHklL3ExTXc8cU1lMSMiIiE8U0oxVVljYD45P3l1JENaTjdOUmN4WlZdTmlmPl9sRy5tRV5OMjRlPV1XdVt0OHUrd001ay4peFM7LykoXklPVkN3dyx0X1gpQ3Z9UUNpX3E9K117djovLmAwPTt5b3dCNitMcEYxMjR7T2JZdFkhTlladXhJWkR2aFF4''@;'; put 'put ''R1E2KCJUUE4qaEYmZ2NFJHlMdH5YQVZZLl97dTF8fnA+M2Zwc2IwWDZyKzlYaGJhRyR2OTY+SmRgKkh9bTY3UG94LiV8aitYWFMqQmtVNDF0RkZye0tUZV9CVndid2VZXk1jaWB0QTluYFs5JWYqQENpJlVVanBTSGk4cFdPUz03QHVRWHUsZHEmaT9lOmlJdW9BV08qWGJfKT1RO2ZGKCJ6Q1ZQ''@;'; put 'put ''O3VFSTcpVUA2dVpdMHReLFVieXFvbjdlSVNqfEpjKXJKeCZqUE1QTSlTJHN0I3JmNUR6UHAxRmVCSmVDRnBCSyZHdlA2IygqfER0MlQ7YDkpOjN2QlBYfj0mfkVVOm86Q0MrKz5vNGVqfjV3TltnP29kMGYhMXgjK0pLWmNQSj0qOSJZcmUuSjdLYUE9azApXj9gTmJwJSh0SD9rP0M8MSksUUlQ''@;'; put 'put ''UDdsbHpnLyxzdypXfDZFPkVja1sycEYuREAqSiJyTF4mP0h+NCJ9Y1hrfTtWQ0dldV5iIW42LyFBbU1iWi52QltPbzs6b3gkOU1CPyZAcXJ9KVQmcF1FT3hUN2grIXZ9aUZWMihaZ3pPMDdCIWBzLk5DNyIrYSpvSSxkOzVqM20/MVIpRnFjTEkiPmR8OEFAOFAiOWhxJiFXS01yUTM7Lk1Sdisu''@;'; put 'put ''RXZUMHRgaEtLbWhsLFB4NV1VOX5RUnkpc2lmLlsjYGhIT2tqQExCTyhDez4xZVBQPEs1WzcvPzhOe2VvalQjPEVvZ05uMWJNPXQuNHp6NSZfJXc8JitxXUt7MiohWHFhLnduSz9FN0RPakM0UkZQT0A+czJgWjovcHY8aGcwO1N9TEdUO2xvSVBaYzhkc0BzKHp3XitVOzxIayo7TkBAdXZrTEpb''@;'; put 'put ''SWpueW19SHltUilhS1ZbNH5Vd0UlSlZrfXdHeDQ+UCMvX0c7TCwjLkRHbjt1JT8lUTc+azQuMmFgTnAueit7WGtXTFhBWVRUalQlUHlWNnhEdiF8WylnQXhLa0xWQFJ9QUE3dW4mdDJhNzBUVzt5cFg6XUc7NXxiUjslODokaFhZNSMle2dbRzc7bGhvPjt0VF00Q0ZfJGpwVXBJUS8iMCUqUCVJ''@;'; put 'put ''PEVrRi4sN1p0QStEOSEzVzJ1MWw7cygmeHhBVSx9UlpjbW8iczBWalpGYTFpXWFoOHFdNkhsLypzUExYRnlIfV45N2VXYnM7aTxRezc/dGVSPkMmSUpVdiZWTiooVFBgb2Jtak9FLFhhWEUxVTE/aUx9NT9vfX1rYzUwNlRsRE5gNjVmfUNndC9VSmVjQzkxNmFlViNSSyJAJE4kSGFUIVhbbCJo''@;'; put 'put ''Lm9yVz1HSl8kNEFWKFc1a3BLbmBeJURbIlF7ZnpvImxtb1p2fWNgQWBeekNba0NheTtnKXVsZGkyaWssZyV4eC9HNUIjUXc9fiNwMmJxTjpNTCpofltocU5JWUNkbCJlcVBkZE4uOG1bPiEoTFp5amBDJnpkcHxQanpCdEVEZW8kVD5mKTBTfUlsZ3h5QDZzJjJTeV1DbGBhQzQyR3gmXXpUUFpb''@;'; put 'put ''UVNzUG0xemJLWHs1Y21Bbks7ST8uLnU4REYrc1o9fVZ7US5CPmslbTcxTk5rbj1baVFMI3lxTTdYU09jJiomZlNsVyNfZ0RyezFecytEKn4zQmY+U0QpdFJnNk9mKS5xalIoYX5Xd1thKzBZUkswMm95JlNxWlpLbEIjeHdLVWtuVCtoKVJjMzQ9RDNLMHhwbChuPGlkOV87PDhNfiUuPkAocWtL''@;'; put 'put ''aD8iWi85dE96VFV7NGxjQ2NkSn1XcW1XVUk3SDRTdFNrckExeHBLVm1fbnlUaXF8NXw0ZC9RSlJxN2xbWH4iYExvXkopUUp+dVklbDhkZiNWelVdU3pGaVAzV3Y+RC5MVztGclcmXjphfm1kSlBKUHVjJl8sXnNuUTclX3JMUlhzRm1mQiFaTDBtLGQ3STU5ViwrJXVrYSF2UzEpPWt4YjErTFo/''@;'; put 'put ''JCw/PTg3WlVEcjpGXkFHTW93IVQhL01vYn5xVmJHXmMoeTojUjghWH40KmN8OWskOUpFZSgqMUMpNmUvKGVITjl6IVg5WkRmaVhfYUZNWjRLXlNOSGkjWkVdWTBLS1hnfDVndCFCYkUzT2hEOUNNInk5Mlh9TEIiOmo1Pnd0Z30sJl5lKSFGI3JxO0ZxQjR1PUQjbzo7YFomP2h5NlhyMmdmIjcq''@;'; put 'put ''bG8xUStYLEtIZVRAVEJFOFt4PHpqc1N6PTAlMUswbGMzR2olWnljdmFTNWUmdUwrTU0+dTcjSFl8c1Q9LCUoVDV0bV9FLFp2diRSemdlIldLaSxlKUZRdmdoQHdfPS82JGhYYVY1PjpAM2xLb09GM3Y3a1ZJSWVnfmdZKz1EZD0kelZMKllPR2VBIWR3QShQND1NXl09UWhqLjlhWDYsU3pxJXIk''@;'; put 'put ''JD9ufXhEITtbUWhTbmBgTWpCSShiVW0uKUYzblRtelhxalduT2pzTXwmd2xJbj1dKHx5VjN6WEpAOSNtIiRqazJtRV5gNi9VW0wuVEs/cXF0LmVrdnN0KEcqWH09YTJTXll3WWxVVEJTQl9Wem9+bCRAZmh2MmZfVjBHPEZVX09oImo6ZyYlZGA8Mn1sJj1vZ0h6SjJhTy4lcyFwT347V2Qwd2k5''@;'; put 'put ''WHg9QENEbktwWVhYWkIqIUQ4bmsiPipiVko8dUlFPEkhJD1tTlZEaXxwTyhHWnY0JVRpazVPK2Rlb29VTVRkcWAjKDM/RXJBejArezpCRlBQViNbPF1JTigxRytwQEhaKy4sR1pCVyVjLFUmRy9UJEldcCVtS08le2c/OTU4L2F5cFlMZEYlaENGei5FQ1Q+VDteRFZXIV56Zl1tYSFjMV02IzBV''@;'; put 'put ''e15kO1B7VD4zLEhvPGdgTl9iVHZ+dld3ZXlCN1BZWjQvejVHQ3dXNVhval05d3F3cnx8WFVLNmdERTlwazlBaDRLJFdXdmMiU09WaVh5W31yYSxbMmJhK3QjSWEoey4uO0grdkxiSkd2bCwlP3lJOVMhVGAyJlNwb3c4KU5EYUtfSjZ+JUB1azdvcVRTU2JBKkoiMEdrV3BNVl4peHNTZHhBKy46''@;'; put 'put ''TUx1dT9YLkU8RF5PMyF6Tzd+azw6WD9OK0oraiRwJVt9OHY1a15JYUpRNkh4X1tTWUchZlZ8QnZURStkOUAkR2xES2tqaEw9Lm9oalRoT1M3YmFBdmo3SSw/MlNnLz4/eFhVbEIuKlU9OXRncGBITChJcTlZSj4sPz43P0NNfTZBbTBdTzZ1TXE8JnAwUiVCZ2dCbDMvXj0rYzJ+ISUyZn5DPytv''@;'; put 'put ''OFMkKEJ4TXpzS1lSRkk9cix8WzhKQ1lVajRVNEJkdHhFWjUmO2c/Sj5rTT9HRlIvOjUqRSxgamxSSyoqWW98WVomSCUzfm9DcWNwWTYpMDQzRGdgJXJpUCZ6P0pXQ19baHxYW2I0WFk/S1prIkRmMyZGREs9VjBOWiskXm9zaihUY0xjWVQqcD1OUCo8IkY8Tks4cXsvaW87ezZAXStmJmdBeHxJ''@;'; put 'put ''MUJLSV8uQH5AUlg8NF1vbVNTQzVsUU04KkJ5QmNQVmlpRENmNH5gOWNGbWVEYT8/NU5dSz51ZkJDWm9KWS9ERnlkLlJwYzl+cypYKUtlMVB9N1J+Ljx7NjZddH1mLCpbYm5CWGY8ayhPbzt9c2RQekp1bEpoQVNNMC4iejYhWn5HZkhLPUAmQjRWWSxLfDhxKHI9Rl5aRm4vaThhPF1EUFI5TF1O''@;'; put 'put ''KTZuSSFePTAqP1lqOFElLkh+O3YrXXIpbkt6c2VUX2VNL3tve1BfJH4xKUNxS0dONkF1Q303PlRHKiQ1a11nZlJFSGkmM3hXMkYscktEST5PMihaQSYxVzkjOTEldjdMdk8xLHl6SWlwajNqejJ7WTdOPG5BYS5DJilybEtadiZLRSZUNi4/MS87b0FwOVNMdXlhOiN+PHJZUXAsWVNxIWdxQ0dI''@;'; put 'put ''aF5dZEw/Q2Uiby5FT3oocntHQDVPPCVqNyxrOTZbYnFUU2lZM0Z2RyxEOE4qX1puQ2koTkRgcEkqZ2dFSnkkciEzKkI2Zjt1fH5kXVNMNG9uNTJ4MVlMcWVkcyVaJHw9SkQ2TnkyUF5OUUpxPTV6OG1pbEZ9KiNDfkUlOHg6YD1vOjtANSZkQ0FtOl5VcT8ofCtzb0t0ZXVuVF5NSyhbdlVsLHxE''@;'; put 'put ''entAJDEmUnFqSiwvLyUvLmN1WUB2bjhzcj13VkosOWZJeGc1IXJTaz5xSmRITm8+WjRFJGhwRzkpRT5+MFFfcDFCJitNPjNnXU5kdlpaZVBJS1lRIUlWc0lKWDpXXSE6akRtIyhHKDome01kdiF0ZXVDJnRheF5wV01zdktTOjJsUW1sZTlGRGNHbXE/bExHNHs+P1JsS0heZFsmbnM/dERRXjFI''@;'; put 'put ''czNWOV1QQiVsIlMlUSlHODV+PEAsVmlFXzgyZi9vbnQ1dE5OWUpUc0AjfjEyOSxnSyw8ZSp3WD1FQm5VbEdSTTchOjRMaWhPL0s0bV5ZTDZ6LnI9dF5jazJncHJHV0ViNGhgR2NrQj9odCYsLixFS20oVjE/Knc2Ii5oa11aI30qd1t4cjleSk5gW043cS9ybHNoWCxoMlZ6O2QuPl1fSz8pKlc6''@;'; put 'put ''JHxJY1pNMio3JDhINmRXVF9wUXtdKVtLZmclel1sPEZ5YypdbCtWXz5kNzJocUsoeEdmUThFcV97OGE2YFcjekY0OUJAe1MqeFc+eGJjTCJfIiRdaFd0YCp9PzR0Tn0hSnYuWHVOfV5LQjNZWyQiZEBdL3R+fDlOPCJTZkpAWSZ3PDR+PUdkQUs+cFAlK08+JVElViUiPHolcjxkMV0jcGh3al41''@;'; put 'put ''PTtXPGc3THJMbVJoY1E0Z2FnVmkwbWIkTCt4dDJwaDBIW1M3WitGd3FqWmh7P14qTl9CS3MsKW18WH1uOig3Zi93MV4qUTxwNGpwVFloLzxoZCR7IiRtNTdpYCE5MyQ1LiozVXFIWGgpbl49WzsmYjk7W2Z7K21tN3AlN3JDcDBkaWFnfkQxN3lKQWBYaFVuNkdXW0FgMSt3SklROig6VkAyIkR8''@;'; put 'put ''V1hrMjVdXXEvS1tHXTZGeHwpVUNZTlJZeG47IyhTOSVUTkEuKTspOSg1JlRGT3o/JD8kJF5GX3xlPGU5IiJSSmY8KURVXSglbWRRYG9+TFRnK0lGMVlwXTwuYUlQQHllZXYsOiR2RShMbiYyMCt2LnVYaEkoV1F0SUZscmAhQUNDKiwvOz97UyteLFJjdSsyYyY9Slg1ODN6TDYhZHp+fDYhZzZk''@;'; put 'put ''KGY7T1RYV1YqU3U1IXw4OXEkI0BbSjI6PWFHaUldY3VhTmQ3KGpDYnVORE5XekZyfFpTPzpNRHIvZnFOIzlSYlFIOENfMWs7UkgkITkkWUp2JlU2d3ohOSpYZ09RM05PJFZUZ1sqUTlaKmEuKmpRfjo1PGd5PGU3cEJHZyModmxMVHVlU3NwRXEkQD1ZNjFoY1lPX0x5TG5qRSVbcC9rfV1Jc3pk''@;'; put 'put ''U2hAfFJEdkJXNS5LRjtSVHNlbGlEZnNtUD1eODk/JXYpeEBeUm9CamlSd2FORz9fMHpoNFNHcEVIaH4rXkJrRkRMUjdAV25VVzhAdE5nLng1LjZ0Yio2ajpyZDdkJXdZOlJjKXc5cm9lTjNYNShmcXsoW0E6Rzl+Vmd8TTd0I25mPGVabV5MNHBAe3E9OUAibWhESEByM3FdR2lnaHtsY2opMnFt''@;'; put 'put ''c1VlYE5OLlQqcDxzVF0xVGs5UjBHNVEzWGhdWEtsTlUmdHM2MU9NRjM1fG5Yd2lHbFc2TmpgWlAyO1Q9OGlyPT4oOU5Td15sTVR0I34vOXE5cHVzc1Z9b2hHfW9lQHRuWT06JUEvRWdkXihiQnVbLiopJnQ3NkZ7TGxyOT5wJnRKVGY2YEd6bll1Plc/bStnSmRbcDMzbC9yST9HMGFnVlY1MGFX''@;'; put 'put ''NmE3dWRnM1hmOjR9cjxjZ1M7TDU0KTNObGptXzFAMThHTTZWeWs2djZGRklwLi9lOm03dWRmSzVHX0csPXN4N0ZxRURTeUxtNW1raWxxS0h2QEA9JC41VE1wa3BQKXhYXTVVY0E9cH1JU3FpfiNbQXckayFZfko9OExwc2xHfUI8RSE5Uk5fNmcoej1UZWwjejNae2t9b2hqSDFsekhGdUZRdUR9''@;'; put 'put ''RXk3KiQ0bzJUTWNDVjhyczdSfTxdL1A1VE1wOFZ5cyZ8W3tuVFlsUGcyOVJgODFiIjI9MSlkKU57KihKPHhSIWk9fi9OKV9NM1omemp5ZDxfMXQlcCR4WW5ZMF1aa2w/WnB2Q2hNVHNBZkAiJk01Mj9SQ1omalVnVW1mRVMqKTAvUn5OMytAQDE8ZVM8NjNZNEU1YmNaeCQqMn5gbUlRUjJKbWF9''@;'; put 'put ''NkckK2h3W0N+TTxYUV45Ljs/TE9MM3RsTT9hKEVaSkRTb0I1T1FWd3QmSTMrJk1VIWdqQFppMzIjKDQ+YS4yV0o1MFttfDVpbDJ1aXpMbWwhK3gmIk10VDV2TUBaWC5QbHo8PE5VbXRFdHFMbWc4Snt5NF4kJjsybTk9cTNEJCpFRzsiSSpXOld+LG1CJmpzPlo1Q2p8WigwJWs3WDtXUFYsNiph''@;'; put 'put ''ZVUkYkUmXm8oUjViYXJIMEl6a0k3ITFjTWt4eiJSIWFKS0xseWJFKiZHKV5dVWpWW2cuUjIkXjBOP0tCWUUuLHY4Y3deLlFiY1llWUhzdmloT0MsQUEsUX01VTl9bzlyaiY7MFU7fThqS2M0dU9dWmEwMk9uYTowM1BVZm8hNDw6WiN+P2pSd3d3PyF7dzheUit3NzJhcyxiZHo9KmtEe3s6fSQ4''@;'; put 'put ''K3dwJCVyS2kiOjt7VjovZ15TK2FOYEhlVXtvK2VtTzhvRi5QTjhnXWtPSzUuMXNKJXxAYzEiT11bYTJ9JT9rTDtmW11DOjNlZC4sdVBdSSZARmo/ZWZkPHBzaGExL1pjW1VnK01CSXRVLzYpUDR6UCE2anZaOGpOeVh+RVBSUypvMzlPIyJAOVIjdUZ2ITtpelJBLklUbUteZzNOci88QytuVSI6''@;'; put 'put ''ISpnUkgmMitvKXd3blchfFhdbVZgK01ERi99JDd4QitWa3hBcWkuKk1COFt7cm0oRT5IVTBFUD5ROj4/SU9KbjBsQzQ9e1ZCfTYxPyNZLGFAP2ltNC8/e2EzVjoxSCVwdWgxTyxMNW46OEVHe0csQGwqbzwzMy5qQEB1RWU4Q1BncStUOk0oZS8wfSQkZSk3I0A7ZS5IdUtjd0wmWVJXfTI4RGAr''@;'; put 'put ''fSs5T2pPQ3lmXm42aTtCYXdbM1t8ZyZIOSZxRkomUkBLUnpuM055fDlKKmM8ayl+THJdSnBHKSZ0KXl+aHBgMWIhTE5TNjdSLjttfj8sdGhbP296JXp8VTN3Zyl0S14hR3cvI3lZSUhgU0olTmUpMldLQz8+OnRWeC9uN0w3P0I1cStYMGhYNVZdTnV1RjVMSFtjQGM0d2VScSVodENYXWAoUU8q''@;'; put 'put ''eDJsL1BjbEVHclNqcEVWZW9hQUM5QzAxTUZnKmw9W0dAeXJ4c1MxUHhtaTdNLkZyRUI7TEVQUCU5TH5JM0Y+Y3BaXmx1PT5mfl9yVjtheiZBYTBVJmRVPzZ1eGdlYCIsWyhEcGYmcFBBOXExM1lAOm4oLzsiJE9OJkYuZlhjfWdrNWA/alo2MF1XVnJfXmhKJFFoQ2VSTlI5cSFvVDx9MGtRRyFS''@;'; put 'put ''N0g2OnB0ZnIkfW8pOG9QJSVJM3ZQWlJ4YT9tZ2whRiJvNV5wYGVSQntPIyFZOSR5Y2YuSC89Qyt3WHZ+KyhSTXBhSm5dcFtpaWh8KjlOcG1CQyMjSzYxInR6aWlsYXsreSEwdHhdYntsKSMzKF0xNE8vITVAZ1BlTlNSR2RWLHhtSEsmZlRsXlk1QCohfDRxYXpPbXpEQCNIRkB8P2o/YyRoamht''@;'; put 'put ''VURJKzwsc1s0bytSVGE2OUU0ZjhvX0t8Lk5rUU4kYTU6c1tGXzElUmU1aVV2WTY6Z0JvbERtQ1BbKHl3Uk0pNjtVUSh7SUldTXtNdVNsLEBkM3FvMmdAZkNxKUArYSJldzppYFo+YEh2SGRjTlF4YWM5SVBeO3k3eEgqO3RQWDNyb1llQnc+fU00OyNaNiokcURiMDFmbTEmL0hLcz5pTHNFNDFe''@;'; put 'put ''bmlnayx1bHUxfjluUHEsVE1KNkckb2sybUI8P0kuUyskJm9BJUUmcH13X0lLWCxbKkRtfCRrIm57b2oiIUo4b28jaXkwc2dDSnhzSTEoQD9CTiZeUUYpWkc7SUJWPz9RVUIhRVNCVnVvSjN9M2xFNG5gaGNRYWNsNilUZFJlckdKbzg7eGFSPXVrQmU/TTVBYllQbykyVnp7O2VrbWJINH1NPDFN''@;'; put 'put ''cyk2YmIwMGZtXTI+bSkmdDE8PnQ9e3c2cGRQXURzamRkMDIlQTh9PkNONnVvKj5fW2ROQXJqbThBVTlfaEtaMGpyd09CXThteVNkYiFyWTokW18zKG1efGNmRVRtVypSVyw4ZEdlLyJbMkAwXmI5cE9TenI4TThYMzJFZ3I9eXtUJVlPe3U2LEhzQFVuNWt9LFRxK0h6K1RJOV9USFFBWEo3KVUj''@;'; put 'put ''LjZgZD5UeTs2ZiU1JkZhPUl2R0B5O3BTTT19e1szISVfJHE7e2FuNix8YUFeSEUiTXRQJj5PMWZVImVuKFFFVyNmbTM7d2ciNFFEJkI3NHtBTnthKzY7S0xzeVomQk0zL3drPGY5QFh6ZE56Ly41VnM3NTR8UXtSWTg/VDQ8QUA4UXtBJT9nWjdodytNdlljV0BLZU5OdnpRaTlGK1doTGI8dXNR''@;'; put 'put ''a0kuei8uOmU0MTxlbXYyXVdHUWtITkpqTHMreDI9UzkhMm8yMi5kM0JtZ0M+UEo+M2NIL2p9TFEsQnhtVSopLztnbzkmOzVVY1txe1E2en5vM2dYeUBjaixRX1tVY2VVOztjSTdSVCppdXxjTSJqLCglcE1LKnFbbThaLyY8SmtyWG8ybHpuPV5DZDlkY3ZWKjIxNHpPa2B6ZW1KMDBePUZxTzM3''@;'; put 'put ''b0NrTyMyekFVdk9INlkwPjw8cjxlNDk5OVs7c0wzKkUhfilZTHpIfXUkV29nbzkmO1QkK1ZpQFs8P10rc15HNzFYOE1POTAyPFtdRHJuUUYmPmd4UF89TyZlNW04M3Y2OWBueUg0NXQjcDFzT1V4WkdhSUwvLjBjaCEubWpsPGdQTUYrM3gpMFIhfn1AWntRP2gzfjxEKV1lNDlGY0FfbThofWwj''@;'; put 'put ''UjxNXXsjeitlPis5RXM5bUtodFQoSiYxKChjdXxAQlN4WzgpWHtrUyR4Pzp+bHhQMiJZdmBTMCskLlI7VjVOU1RpRkJaMTpuKmh7ciNwIjMqLi97TD06e0s0M3BGIkI4QVlORSZwSFc/ZyU5bj1jZFh7XmBfJDV7NF5maER1azByPjF9XlF9amc7OHx7TU5ydm8yLjE8fG1iSE9ueUgwW2heOT02''@;'; put 'put ''Qy5KT1IlRzU7Kkc3OTVOfl9GRCFEa2gwJUl1TXNJXlMpTmFtb28kZiFYJUwudUxYdlUwQ2t2MndQJmhPLjJjJjJtPGRNMGVOeV1mdWFfLnVtRVJWI1A/TSFva01MQDUkMjkjO2VQS2ZFMDVpMWUyP2QoeUcsKjllWGs0bWE3bE1ndnVuO3xHZCN7NVU1MyFDfnVFOjRoL01QIXojV0old1EueWlU''@;'; put 'put ''Uz9LeHhPRXtKRH5AKEgzd2Z8VmZlT2xQQ2wjVVRpY0U0TGJETGgwaG1KVlgzelEwJlpqdnJdJXF2UU1SUFlJLGU1Xy9ELC4hP1FyRXRkVCUhS3Y4MGJmS3ghZTUzNX17RGZHQV97RGZIdGMuK2VkJG1vIVprOG5gSUNLI1h9dUZwN3RCMixTZSI8LG53e1g6U09HLzVoIiwwclYlfiheQHtxamkk''@;'; put 'put ''YUB2OU1KbkhDZE9jeEFZdDF8QHtPaFYwPTJyOm1bVHVKN280Ty94JCMkR1JvOE1XVEAoJlMsWiNNam1qLmBvImNocGIuKjkmSkxFanV3LCVzamlGO3VGSDkhLEk4fEBBKytAP34ocXNnWTxtUV9POllsVD5sej5wfTZ1dVJPZyVxVlZtJE8xYmhAZzFoLDZeUWhpflBManQ5e2tiP3tKUmcvJExw''@;'; put 'put ''ZCRYOjYxZmFZIXBjPlRMZGxQS0A5ej53SUN8WjpETHcuL3s8OHIkREwpPktARGUxMnZyKStKJWdFNi9tN1FKOTJnNFU+bkxwImdFZWEzaDx3SmokOUl3bDk7LiV4TnhZbTgkWGJIQDtOYk84JXxHeUNDLHczWSV8RHJbWFVXWlBPMUZDclptJENTSC40NSUpYWl3R3w4JHFGKihYRyl8cTpWUDVi''@;'; put 'put ''aD5RP34kK1tSUVlEKWJ7WypbUnwxQXRKUX4sc14reD54LmpPZyl8THVTcmdSN2MySTRIR3wkLkhqLGwvXTEwdGtyKHohJXw5S0pRbmVDIXdfdG8rbjBmMGFWTk0xfi5geDwsUEApMXEoc1FQWXVTY0MucHthPEtNYkxFUV0qJFlRRThxNytxNkc7K3NRV3p1e21gIXRSWGokWEhXKmIrWFdVOlVO''@;'; put 'put ''Z0AqL29UflFPS1dpe0RNWF0pdT5xdUxTVyloI1lJU0dNSWZodUkofGZYMU1IXiF2b0ZQdn5xLllUZXNJVDMrT01IOkUidjZKfStISHhoSSZjRFYxMl07LGVXVCN6OmJwQltKKC5ZXSElKDNSeUZLQ0hteGJWYGtZZGR5LlFKVmdBJl4wZVM3OVlpXT0yX2QjVn19ZXdQOUY5OUloPCZxJj81emQk''@;'; put 'put ''dz5EOktkRl9CbEZPK2BYcWkvSW1MeGh8YEFtbHg5RkFyPDs9XWkqd2c6ZSF2YTUsd0w1N299RCV2QXUrRmBJSUMlMG84NzFFZX5tYzZZMH43MjFTJmJUSVBGY0BwU1shSE14JmlXaHE5bFBBPyxzWilydzxxa0JaWT16aGBCN29HSVpgVlQ7NS5OI0ZHQSszLlgpaTRzRXpRYnl9R3hYRlhXbGVx''@;'; put 'put ''LkVqOGV0SjAwX00md1ErKD9oPVJ+KCxWcURFNEJwdk5HT3s5LnBxLkwkfVBpdVY1dk1fUXRpPko6YGU6Y0FSNy5rW1dzMDhjcVR7UElsfjg2bHNbd2gzWnt1Q2BeOWNjXnYuRi4mJUNMaUphQ0FlQmUlTC5MPjYoUT4zKGZ8TVZYPEs4cmxNKF1nP2ZsXk8jKl9WOSowO09PJmB9ZVVENSx3fHRQ''@;'; put 'put ''JkIhLn01TD9OSFU+UTF2cmdzP052JnRYJn5RVWpAO05vPnFSaHJVSWhhdCUwPih5S3FpNFQhdTcoIkBOTyF0cmd7dT87KkQlTHRaXnlGNUh9SStIc2B3VHJ1WTdhVnJFcHMpV1hqdGNjVlhdQ3c5IjR2TFRAVCE6b3g9XS9Zej44fjt1c1tGTlhffmNsT1V6cExtQENjWlkqdD9HUyI5azp8OSlM''@;'; put 'put ''NDxeaktZY2FuQiwrVW5NP35ZbShUI1NWZjF4SF5YLm1bKHJbfFNvTCRWWFYiJG8vNFEzYj42e3U9eHI8ciVUZlU7ZTZZMDcxWTBEZE4sdD1wS0BwXnZ9MzpwbnYqcHA6cV46ZUB+fn0zS3huT15lSiNFRCRiOl8rOykzMSo4az5DcTMoVHhEZEskTCUze3RyIyYwWiQoNGEqVWo7d0tFOzhrKDh3''@;'; put 'put ''S1EySXE4dExtL2htTD1NYltxRyF2eVpVfTU5UWlrcUUyUFIxJlJEKEx2blJqY0VTJTdrP3gzbHhYVjx5bFljXjRUO0kpWWM7cE8meVMwSWFFVlgrMiM+P3J2aGhrIm9sanNaVWBuQiwrd2ciQ1oxZl8ucm5MSyUsOTRXd2dsfiZgOzFgRDdlcD1eL3YyemVpU3ZeM1pydDJ1PGldJj1FO1dpK1Up''@;'; put 'put ''YnEufXFUQiNrJDF4JUwsd31hK3k7aUd1O1RhRTB8LzhPZ044TFYvLGFJTEJNUCoiK3lwJmdJcX1RVEN1NHNXKElvUFh6aHAsWDxzcUxvVldMfjFgI0IxU0NHOkx4S0c8PChhc1N6S3p9L2xNd3pnZmZdQzImaUAjY0k+MXJwZDYkSHM7TilZdU86TzNpZXwxe2pmeUBEOGQyO3YwRkwrWkxQNix2''@;'; put 'put ''Pk9QOXFvfn41c1kwe2x6NktucXRgJTFbJl5NOENneXRtQj9nJiltUyUjZlpnXTB5O3RuWm9mNzI5WVJ1cz0oXSZjLH4wdlVyQy8yTF4kbXMmfnJSOj0/fF5XM2I0OU95Rn05O186LnQ3PUQ2O0hFakFfKlp7XmBLNStYfFolYzpAUVBRVVN4aGVIMT8wO0AhQFUlbmZARH1jUSVGIWYhUzYsNlNV''@;'; put 'put ''dWQpcDF6aGIxUGU3R3ZAUDw1JDsxZ3h+SHhkLDIlYjNVREtPPjosOmhvam80PT59KEdPSWU7RCskajAsanVvLDYlY1FOXkZ5RT0xLHhSRldIKEtXWSR4UnB5NktBaVkhblB4JnEjWXc2S0M/UmYrZUV1MGxkczRFdWRZKjYmXVteSzk4Szp0b0NiY2FgZHFYViUuUkluS0NCYkBNRHQkXnhjSzFN''@;'; put 'put ''czplISZSO0JpImA9SDNXUU8/RnZyNVpHXkJeX2xdOXdYZCFxKXkpcUo+aHN7fHI6ZS5kdlI4fiJdPGRCJD5TTSh1PCU+eDlNOWFVLG5eME95OWF8a2dZO09raS5+Ink9QlAhaDQjSW4vSVJiOUsvb09vTyJNOjN9SFcwK1d6bC5EV0RYaFhhWUQyQnxGaDRSIjZYRWU7YCVVPyZXIXRaPmdPbVR+''@;'; put 'put ''V3YpVio7VFo1IyE2eUhVI3pObVJDTTUuJj1CTDVLaXtMJWghVkkyelpRUl1ZS1UyaWtPIWNoR04zeV4scTxGdWwkIzpkNXIpTjs7M1MwelFydUd6VFkvNmw6TDVnOjFYP0FZRXNFXzVFZlNRYDUvNixWVXJgRipOfCt7XTgiZ2JfQEl+Z1pjY1E2R05ZUlBHOF8hU0VEbWdQPXNfYlg8MFFWUUdC''@;'; put 'put ''cHolbUkqY2VVcUpjQDgweyRLYUcmZUlDYEdkIykvREAleyNiRk44bTBxc0YuUl4qcy8xPWg1JlMjW1UvbSN3XllxLixnVWpNfDBVLGclKy5bSnAoT0NAcD4iPkolKTVEOERKKXNQaCEhZllke0VhQzxtZmtzSkNpQipMZUhadmwxTlc0Qk98WWNIKHM3V3g8d0AwREw/R1VhQ0dVNXV9TnZdU3VM''@;'; put 'put ''RFQ3NENNO3cvXl91Ql9lZ00+TzBnY3NnMHgmOSg/bGk1STwrNjpDYWxjLFUlSWJrXkxuZFU0SytPdyslMUBWTFkwRW5CI3leQT0+dVpveztSUmRtSXMpclhJNVhVTSZWY3UicWg4NWhhe0EhcWNLRWxSdSVCYyYwSzhrdWooInxLcVs8eTBuZGo5M0okeXNTakxXJGtnUkptNVlyb0ZBcHx1fUBK''@;'; put 'put ''Sz1vPl1WMCN+MUIlQDVpVkRCK0UrN2lsTjAzdD8iYzAhLnV2NlZqdkVwfThER100dWp1SF14JGIuJFE4ejZzSmRiK3I2QXB2WldESntKIUYhWkcsR207dUYiVT07RDxHZHJTLjt9W0lPRHBsPnpZW2FiNSVWTit6aiR5Szg8djlpLF1dWlp5eEdQSz0kWkR1JCUkezR3WEFXbzI+R1tNUl5MeUhE''@;'; put 'put ''XmFDdiZhU3lfdTB1MSl4bFZNYj9WbTR5SEI2OXM+Kik3Vy9TNjVsMjFHYWEodjtGdThXUn5LTSpQNj1xcFF4dkNGZytAT044XSlnNiJeM3Y+PDNNWlhvME57X21rInVfRjw9RDZaRlp+JGNoXS8qVmR2RjxXMmxiPmooViQoeF14WXdXJl8mSjlJTTksdXhEUHlfO0J+Myw2YkllYjZQaGBQREZu''@;'; put 'put ''MD16UV4kUnFaITNvSHtdelYicDJeYkdxRSEyb3kjamRaLi52YCtnUHdDMiUmZSlifDBxYiVsInZHMUFXQDk5cXlaUWZtaFFQdShTKEpaezUudT8/KEY+eFIkQ0c7SC8mdkZ1VndvKTYxOGlPZEdwI1RzLHolMH09M3poPEdXcENwPEBaSylTMDlxJHJlNDoqY0xaajptdSk3KXN6ZWoxJW0lMHAk''@;'; put 'put ''eSNnVDMlLjpFOFNlTzFDZiY0Ois/LyZaUnA1OCpmT3d9M2VobWQpLldrSH4+cFI8dzlTZS5kVnBaUjAjZEtLNkBxcm9sb3UkWXBDbCMwJEhoZU9RdWtuYUtlLmVwc2BRQ1AlfVlSeF1VaTJOI0Y0Zy8pSThEPyZna1RtVUtyd2t+Oissdl1HQk94eEJtckZzNT1RNFl5PV4sQDJzKyxadWtGJWRA''@;'; put 'put ''fXNIPW1oSGU7NWRCeVV6S0tlO3lpQVU+WXNvZjcmdyt4V3h7WHAhcn1iQGxFNXY0Zk5kfXsxV150O11VLDRLUT98Rmt9QSk6TENoP2J4MT42QmReNls0c3tYciYlVEJaO2Fhe1thfGs+NWV4Xm0lSFZ3fjZMT2lrY0h6MzdxZXJsTkxmQzQuTDRrWys8PyEzKWY1a0BYPl1LJDd0KjQrTUQxODE2''@;'; put 'put ''ISpLMHJ0W1pAZz0yYDh2bVdaNGdtVFVJciVTWzdSaSE5WE9jL3ZrQDNqX0BYZVBoVHI5IyNZaGpfQmw9QllUOUd7OWNNTCkuQ1pvcTdNOjM9NnZ6Nmw+PVlpNTYpfUpFPF9WPF1hWFkiazgqdjhbNU51OHImPElWWjt2ZXBsI2ZtLnN7JTN4M2ZdPyE+amJfVD9JaTBfJFBhLGc4NzkpNlNwI2ll''@;'; put 'put ''flpJM19XNz5fISgoNz11JD88c2xOe1EwJjs/aDNrQnFQVmFkNlhKNHlnVnw2bUlOPWY2RkM2ZjB8ZVtYaGxQXzIsJkNQWS5XXkZvdXl9cD4wOGl3SFR7MD5ORSo3XjR7Li4mZF5fUyU2KFpCV3N6K1p2PUddM35eeT9aWHdGZHxwPnhTe35wd1t9YiNidWRQJVtnW25Kb1M5cDdWIixkYzdnWTtP''@;'; put 'put ''fVdyV1ZQbWZjLGdlQzRIK3ZkW2FTUFJQdmg3IVR6RVpKckFLcH1VSHhIMi9dbTwvVzJBcXhsOTJtVylxYXMvITlWZWgxUUx4LDVha317XX1nUCU8ITFOPnM9emhBcTBAWTIsOENZWn4zPSJ5VXY0Vk9wOVV+NEwldy8pZ1ZYKWpddV9dMHNZcnlwREBySDtCIl9QbVRIenkpIiJ5N0w7d1JbanQr''@;'; put 'put ''XmRlclNCZFZqPGtIVThMSTBraVBnQm9oWndjTFVVUyZtK1VRQ2p7ODckOEg2clFDbCQ+aEtUXUR+OyMlMi4zSjtQYkk5clVCQGM9JHFSYDVGbzpzelpxXVJUPnc2OixXcE9rO2J6c34sTDo7MHlRYnZtYVU0UjNDaVFeYkBzUHIqZGBgKSpOUjAmPzdQVTFuM3NlPj0ybEFPIVd9ME5RfnxkcTl5''@;'; put 'put ''dXc0TnJNQClvKT5ReSl3Pj5uez4sXTkkP2k5Tm1QSytPOXI+ZS9HSVB3eyR2Kl8vfEZ5Pk4mX21mSzNBYEYjTE9NSjAoZXRyb3BHaEEqUkU7TGA1N0RCKld2Ymt8Ik9CcFQ7e3YmTl0uMHgjVipEZDs2X2EibWdiZmReMnFda0ZqSj9oTT9Kc1RfbC5aN0I0UilIfSliTHN5aGl0aCpWeVMmQkdO''@;'; put 'put ''UmMqYFV7UG9sPHE0SkY2IUpPKjtLUzNmYV5baHhqKDR2ZTI0S09rZVVYVGE5ST1OS3tda0ZqSl48NTgmO2soemxaWFoqVzEuR1tEPyNVOl1vTl5qekBVMkJZNj41Z2pkVmJWRjNSMlIyTyN8anhnL3RbLyV5XnRLJG9vdzs5UHZPayhHcGt2eF4pbE1nX2lPZGFyeXxWMWI1KkU8I11dZiI3Xz5U''@;'; put 'put ''Mms+PjNNTFFVRWNpMyUwckh6R1RtfU56RlBYYkElcDxOeHI1e1F9Nzl4OStYJiIkR2wxMCRuPiouWl40QFBoYGgoWEZhPzsjeEw6Vj5lUV8ocH5ucG1jJEAhbVspY1gmblQ7SlZaaVl3bm9ReENOI3prW15ja28rQndkZX4hPzJAKn0/PypgPlpafD9aWCpoIUROYiVOKjIkN1orP2x1NFpqOjoz''@;'; put 'put ''XkUlNFNzZkI1ZlJdPS41PzVfJVFoQSN+QHBRMTJlbV9ncDMwNTxkenhKUnolaGV1d2dKUFk9S11mZSNGb2oyWWFJPnUhYEJZPVJsQDV+SnhvKGQ/Li9AOE41P3JlVT4jeEAqIWxjJDVgc3F0LiZweCl3RFFgSnAvdmF6JGFtVCN5aUFxVzR3YH08aGY+YlNtSWg9MzF7UT4ufF1wYy5Yan5Rc0Bd''@;'; put 'put ''RDcxYTAzQisjbzsoNSY0Uk5EaFk7VVRmbT9wfnZgfnt7KChAVjsmJixlLjNsb10sT2xbWy82cU4xZzZyQTlmIzN1Mll5NH1nJFo6RWkkfTUzWTV4KUdmaEVhZ3JCfSo8Lz1pbVNtS2RWZFsvdl5DXWA6YllTd3p3b0c9TTArKyEkSC4jbmooeUp4cXpUdTVGRGN+OUJCV0JYZlE6Q3RVTmhvQHYo''@;'; put 'put ''SUFOZHYqfThTXlozJjo1PTxFVGV4a3Eua1gzTXhLLDZVW3N2S0o1LFFddkJPX0AzQ01sREVPRnY2VzNgMWY5cXVlU1dkZnRGUE5dLFAoQzQpUGl8eTpsVDgqX042ZjlgcW1WJl5EI08sRkVgLGVoVEZhSD58RSF1X0RWZFs5IjpqWk59VGEzO3cuL293NTpELEpyfnRdWFZxQXkreDcsOElKUEom''@;'; put 'put ''Z1FsP0JYL28rLkZOQGdPfTFpPFF1LnFnM10qeCg0fiRlelRTM1RPZ04pdFhhQFpGY29lQSxJWEEvcHU8MyxWfk9CW0BhKEttdnQmTUloITFpTGxMMUt4dmI2QVVaKUNLKix3dkwlLDFvb3JLUUQyLHh6Okc2TmhPOzIxX2Y+US5wdzA2ajpuJV9sIU1lVSVVVHdnYTNwc0dmKVRAPz0uZWVYamE6''@;'; put 'put ''UUFfa0RLIWg8XlVSJEBmKlFQQnw9VyRkT145UCU6cCgmSDFsclAwS2JKakJZZVVfOl81Xz9LTT4kMF56TEshRTtGe2BMSyFYMylNSU0+JD5PfFloYkxiS1BWR0dlQExLITpPSkkxQXYwYTdlZ0B5fTMySyQ6dUhYN3JeN3csZWNMbyJKcGhiQl0/QkZOYzxFZXBpNiQoKUh+U11LKERPSVJBRnxV''@;'; put 'put ''YUU2LHZ0NXR0JCM9VndYbmx7ZHo1ZF9dfT1ZYVFZMSRyU3JTNz49Xk1laHcjVm09bz8vT2FIaEdIK3ReIU9sKmk/VCNwQCI9VSNNM0omODZtZW8qMjlYcl1dViRAeSIhKGApR1o7OmtfOF1XMn1aOnwrJkBEOF5peGs3LmZgWE9rRTQ+ViEhcTVeNzYmfGU6bVJ1Lis8U2JTKiMmbz9ibiZRYjw5''@;'; put 'put ''fitxMXRePSE7aHlEe3NNcmAkcnxTbVJmdENINjlbLHZrYVQ4RTl0V2JVVzAwPzsrXiwmVis0Mi92az15OU1zRGRsLFg8OC9Talo5XVAjUSV4SF5QaDYkPU9HM1EvaCZJOChRSFgheEE0WTB6MzY2dHQ6ZUVxKDkxTCQubHg1PEEmJS5kUU5OXjNsXlJgTTAmQFouTUo7InsvYnZZMk1bUDNjaFgx''@;'; put 'put ''XzsqIXJzR29LOCpudltqKTVqWktjeTwkRjZ9dEFXYUFyZj1IY0hCTTdAT2J+ODNlM0gmYDd1ayRUZ1AyK083JlRsTFglWHNkJW5HIjVjIUFbcEEvTjBoSHBASzBJeTU1QytGNlI0UUJscDFNOEBBOFhqPnJ5OG5wUCttPVpvQGNRTkp7fWAjLyo6OFMpMF1wVnMldyspR0cjaiNtJUBBKS9nfkAy''@;'; put 'put ''JStYRGBrKCs8TyxqT1EhOSgsK29LLmNWdEQ6USsxSzshPktrLCNUKzBOYy4wWTVSUm5wRWw/ZE9aQDBRKnpuSS5oejZJejgqRnI2U281PChlb3hrcl5yS11jPFJvRV5Se1djW0JKMjhMbilCR1dkO2xGYWJrWlA9Lmo0OFpudlhoOXdFR3A5SSR6fDtlYUkvRGhkP3p3VStLYUAkYk0uVCtRcC93''@;'; put 'put ''WiU3djplRGQsNSlNRUd5e1V5ZHZEZHpwPGJ1WHt4I2p8OyFmQiR3eWxQa01tTChAWTdTLH14aXZJT1lvWmhpfn5ZSDMvRVhLdiZ9MihPT1R1WipCdV9ERDVETTNdJXpKeHZ0OVQwTDomUm9oVmRsOVI3Q0Q0SG1QV0Ayek8hVkV8aFNESzRteHwzflpydzt9JVtPcTxCOm5tRUw0fnglSWFZRm5D''@;'; put 'put ''TTNxb2FBLjx5UjpoXUh6QFlRMHFSdntGdjhBJXZaZEBFdTQuJjFNT3w0U3EiZVdxJF41VChAT1c6OXpaSihAXyxHJUthM2gjbEZaW0Z2K2p0X3F5ST9DZF8uWWFWVXkwcXhqYkA6WCJreF4vL1Npc3A/PlJAYEdHYUhWSHltdHwsWiQ7MUFXaTQ0O2dQTV0yOT96a0lAdFB6UzN4PXIhfERFbldp''@;'; put 'put ''VXEvfW4xS0pWVClUNjklNXR5W2AzezR1T2FxdS99PVR5KyJMWE0/JCpLQUNdQjVhfGshX0ciXyE6PnxSSHpjQU9zfD89RWlYSSZdJD9sZFN0emw+ZGxORjQ+YDx2KzR4KGZ0K01UanY4TDtjPzZ8NmooSz1xXjMqOXI9TVQjamBPUjEmNlF7cEJQZltXTztsWm9qN0pQeXFQZ2dzSCRGV3kpU3d3''@;'; put 'put ''PEA4eUM9Qjg/SyVeSG5kRVgyWV1UXjkhYjxJNDlAa0AyMHwlX0VmdWNaNTEoRXVGRyIwR3ltQVRgNW1AWUp6JTVmbyFad3NYPitNd1o6IztDSDZ0e3trYXlTKmcsdUhmamgmYWU8dihKSGVUWHl8XV1Ze2Y8TX5ZZS52N2gqZU1ML2RTWFthYz9eVGpAS25nMFBZb1Fod0huSjR1YSRHPlYsYXxr''@;'; put 'put ''dTJQUHkkV2lPYENie0ZKKGZ2OXxGMi86TXM9MCVFMHw3R0dmdFspY095PHlPMj5HKFhOZipwalljXiE2ek1kdipyanZlVlNRZD9AWFQmMXREdExNdyh9WklmZG9qRG9ZSHlmPFkhME1eOUEvYkMjYjRNaFIvNFV3USliRkVNVE15LDRlVChjKlohbiFFPn57e01gQy9JblpsKGB3YCheOT4vaypH''@;'; put 'put ''KDAmOktHb351OnkralJRND58RSFPVmdSZi9yYDd9XXM+TjJ8fXdSM1YpckReX2w4QDR6VlhhOGRCWntaP203PmdMcFNgWmV4KTgieXoubjdxSHg+Sz4vfCtrYXkkNS9VQHJrRFFsU0clSEk/KF45YkdoWSh5YzVMRkopTiVYOXxqQn1ILGZ9MyF5e0pvUW5HWHMjOkNtaWs1VnQ8UFRYWFZBQ1N1''@;'; put 'put ''TmgjIT5VQGdMeE1RXm8vfWMhSCpPcUNwUCMsek1RbFNDVjZZTiZiMEJuSCg8fHtVPGRBIVVSVUlpOH5EJj9+ekNRO2g5cXUhKzBfSiFxRTJuUTkyeVlEXzcsMl46KT80PyouXSJoW0oyMHAmbCpBcS45SEAiMkxTQ1VfXkA0TEYldylhLGEsZEVTWTZ4cEMxQl9WbTE+R15VbnlTYXp7UW1ocXxU''@;'; put 'put ''SjY5R0Y5LnAkeiEvezM9QlZ1eUY6dzxab0hwMDxOU1NMWktMKDRlV2MqIVVaZyVVRktVSWg7ZSFucjBzWmpQPHJyYGdzNFQhN3IpZGxAY1U7JkpAXlo/W2xfQFRXcDpAQlB7UkEzR0VFcUs8d2JUL14/RjgsQV8vJm5KeyVLemsrfV1AakVNPD0lbmVdY30saHxrKlY5OmgubmwqbHhbY0k4QEI+''@;'; put 'put ''ayQiR0YzRG9sS1F9KDl2VSNQOiMibVhWKHoxUVZkKU00Q05LfkNTKltaa3NKTVJ1U31QYj4rO1I4cCowPGUjV3QkLDUlUU9vQ29jem0udVtUZW8wMGcqTk9eWXsjajhNUCF8VmxNa31mdTBdSWxHM1Emb0RndH1DP2lxWDNpaEttPyJoMzxMXmx2eClLXTpFe3c8TGd+YioidTFuUmtKcE9PcURZ''@;'; put 'put ''TTUhTWlPVCg7YmgxKUEyXUR2djUpfC4+XShYfm98SytRUVtfLnljUXlrSF1FKyVQczB+PmcqNzUkU0dBNjFfPlVPfFlbXnJgb0VIRmNZfCpESEIiTihOdUpwQzdxYn0mXXZGdGAiQ2dCV2p3OT99bHJzayFRTnVoS0g0bml3Jjc5WlJXSm9MdXIrfU9fTzQhOjkjZ0ddPW04XV9FXS9GIkdebllR''@;'; put 'put ''JE15QnNJOF8jIVUwIiFnTUF5cyZ4enxBdDVrc3pufkQ/RkpETCFjYmZLY1thQkQ2WVJXMXhwaWwhVSZiTFU2WWRrOXNmSCE6RHlDOmhpdDpHJEJOVEBrRUw0VWMqcVp9fCpWYlFfUnZ0fSlqUXNbXjJJMFRQS2RVYVtGWSFxV1hCJSZIWTcuKUR3NlQzVlQpSy9tfXJ3InE1UUFHMHZFMUpWcT15''@;'; put 'put ''bmEjVCllPWtsM3VvXlRHWyg5dXNsbTw8PTU5TG5sUHFnJXI/SW5hKFFVaHU5USspZVV6Z1dDZUNeM04pJWY4Z2Evdj1EMjMqNFpaVGs7ZTJzRTdlWVJCbDhKUEo+bFBIZnMraC9tOSJXanVqR2dCZFJfMzBKe0U5b2tZbyZVJWNlfSZ4bWQzTndwUl18Sj9IIXhhND47RVhlIiF1Qz9Ua2deYU1J''@;'; put 'put ''MURfW2pLYE9CNlBwIksqO3kkL2c/PEkxP3w6VmNQY3dObG9zSjtZVXVtRkc8WHQ+V3FRaSNXSn1ZOlgrO1Z4RDlAbVdlMGRAJGI9bUxqKVY8VnRENlgrfV48ZVsiOkwwXVFUdl50azxabiMzVD5gXVdoUilwR2hnQ3lLMiFySFkhZ0EqfnZpaDBaI3ZePlprV09YR1VaX0I1OlRYSnNtV2lkVHho''@;'; put 'put ''LFpRVExBNEFdUzVdR1RldEMhYDRQRmh1TC44QW1DR09TdV9EXnI3e0xeOVNwMHBUSEY9MWJNaDljUlhdQ21oTGlNaDljPCZUIWMxb3pWQCMuQHJCSWtMTG96cktRNExYditTXmJeMnkpcWNJdURkaSltWFFPRUIwMWJ9RyR6V1R2biEuJTtRW1ZUdkNpZjtTdV1JPTJjM110PUFpWFRYLFRlYmlS''@;'; put 'put ''PncyI30kKypedllaRDYlRDx8QltLemBVYzFFZTtjR0tQdXQ0PHYvbmFlW0ZzWDUzX2pROm9gM2ExNmUrc2t+aCtgU2coJVpzZDZQOUslez9zdnM2O1VYPSEqTnMuaVN+eUlBZldZYmlkVnkpQ117dF8pPG9zaypWUlUqW30ualBfaElYQHFDS2cvS2BlYGVGNn0ofWIxKEAqPS86QXB+LDtAX3pB''@;'; put 'put ''LzR8VG9UaCtyZzlzW0QwZVh8XXxCc3BifXQ8ZT5tVzEpX251bCFoQlA+aktySHomI0ZRbXVva0Q4KzNXcGpOKTZJUnRyOiVATUk8dSZIW3xxWzhIS35xNztrTj1YcDksNVVkM3VkdUBjMylIejRQOiNqfXIjQzwsYW4kdVByM3xwTXYraUh6QlNbPy5Lb3ord2hqQWE6UXB6XmJsfGZ8RX47VEJ9''@;'; put 'put ''QC9FfER0NF5mZl97XT8pK1IvfmdjJmdhcWsibUV8KG1EI1lWbmNmKzRSanIrKkZJUCtiM3kyUTYzSjA+MjkvZ1p8eX5RQX1RTHYoMzZlbCJZYEtzP2hDK0ZCQGpXSXEkQkJAdlR8SCVIfEEud2h7aTlRKnUreXBvKWxAP2hQWSVgbixMQXZgMWVuUTdZUHE1RWQ+Nkk6PjplLkp3PDlAc013d1k8''@;'; put 'put ''Wld0NWdYOVoydD1NMzNxZStza0FAXmhOXSkwNnlrUGksdG9Zdnl7WSwmUl91fSk2O1JtWnFecnBsTCFkZkwyXkkvPW95dSU6IS9KSD1TaU4qb04yY0V2Q3VCR1FSc0k4X1lqYCo8KEdvLy9gbiU2Kip7WS4oNyNPdnZHRyUhdXFmPnlEZCw5U0l1bTouP2BNPD9aZTdmSVZ4PF0waX1nKEZbaH5O''@;'; put 'put ''TzV4XXRLXnRJdkkpfVRpMntJRGNgSixibStVcy5zVGUqXl4sW1JzMm04RHclQS5zWFM6WHZgXj54fHFSKXE9OVs7cV1hS0osKStsZ1pSUTAzbHsjLFFQSG1PS0Nkfmp1VHQhTDI+JlRTKGkzR3hgQFZfYGgkXi85QzNvRTFISSE1X2Z6UDNHWCRLX0dFI1dfSVk6fXFYPlUjKyh6fWpLV1ghcm8q''@;'; put 'put ''ejpYey4pLFIqPismMSF1UF5VX3s+WUImdl9BajpxaXxrSVc+S11wdWlveX1eJjU3RihNNjJZbks9VF9BSFZ8dEQkRG1wLENYR1Bmd3lZRyl4MmR4a0ZxL2taXWQudGszTX5Ld1U3I2Z8b0JNNztfP3F3RChAWklBYVI2V05xVXZMW2E+c3BgLzA1PW9WKSskdmV4U1NEY3A9Uls3Nj9wVj95cTJp''@;'; put 'put ''I2h2dHlZNSxzXiRAQlYlJHxYaGJlWVR6I0h0Z1Y5e10wVD5Ub29JY1Upe1U/ciF+dWlbbXg6VkBzJmhEPFZtQlVkZFI3PSg6RjI6JEM9blRISmBNRChHcD80QXtINjFZfUFedD5rNztOeUhSQGZsIXpoNj5kL35RdX07bEw2VWEmYlBJLDNOfD1kYSRPPV9jRF0vY1tZU3dqenE9Snx2ailscCpA''@;'; put 'put ''KnpUT2xwaiRtNiokdHs1KEA1WnR0ND98cVdOKmdZUXolXWF5WV9Cb0JFKVFEJm03JW57RnhTbn0sTnZWJC58W2hQbiRlMkNvQlB6OkwoZHcubEdpciIjRixXLGlzTlpOIU1WMDZEYW1xMUhnaERTeVF6bzYuOCxmQVYpaWppJj9DdXpUa2RmRlA8N0B8ImVTU2RjPG9GaCh4NHQseUZVcD0hPzZb''@;'; put 'put ''NitTRUQlVFI9RSh0dnwsbk87WXBNZ3k9fWI7ZURxPE40aDZRUigjdlFZbUd6NVUkOndeZyt7Smkjd2dhfEZBISw7Ryk6R2t9RURLR3A0dSk4L248IUVLODRNNFZLODRNWCFTaWdwY2YjbFBSMEl4UkN9SUQhRGJ9MilhaXE7NChjRXd4UTwiMltHW29vd2gsMi54Myl4Y15MITokWDNDXiVrbjg+''@;'; put 'put ''KTlMQ248OX5tPyFWMS9GZHpCfWh6K2k5NEk8OWg2LlMqRUJ7diMjaSpkfCo9Wy9lJUs8a0s1NCUlJTl8YlhSSTBSeWQveSlpTTozM2MhPGp2VCl8RW88VEpYZVUhKzV2TX5dVEd4fCRHa30xVTJHOUJpd0YhKGIwM2tMQWt9ZSZDTENDR19xJHZyMmMxQXY3dHQ/bD96X0FANFguTVBMNDwiK1B0''@;'; put 'put ''SE9RMypeNDRDYTV+UTBzQEh2IlpORjEoQX5bVFZ0RlZNS29sXkFPQj9YT2NzJnhyazdvJXZjaHlweWIzXm1xXVZ1c3pyYmFsKXRjKE1oLyIuLCIuZFJFc1IpTiwxYk5PIVBmVTVgZFd4V0cmdEs0N0kwVH10dzAiPTEhb0xkRUMpdDE+X11FeWA6JSpTeUFuP08+Z3ZsMWpUb31yeHczZ1RddWFP''@;'; put 'put ''bWZVblFlS3J3UGlJJkVzUilfIUA7emBwXXxTenBaZ1Q0W2tQVXAjX2o8cHNmPzlbL1FLeT96NjdtMFNkJGlpXV4rI1k1TmkhcHFiLFs8NTswK2FGOWdwL0NMQmtiXiYiU0pafXdMdj5wXzA0SHYse3I2MGdEN19AWzYrLFA/MF01Z25Ve1ozQ15vMkEvTktuW1cjYiYpSDZtYCh2fnlKLi5Ve28/''@;'; put 'put ''ZH5LOVNOXzs8aCMmRFs4OXw0K1hmJSwpbXtWQl0uU2U4MjlvM3pzW3V1USQ3MzhfSmtLOCQmQi9kYSRMWkt1eTQ9UGowaiMmJUsiMzc8Rm5WXzVXPG5ZXXJRamYzKk9aMC5EMyYzZCEvTTNgbzlTPm57Q20laFldI2gvNngjQ3hXeCg5aUxpNChNeEJbKkJySDpsa2NLKmcjfl9FaTZgIiRFKiVx''@;'; put 'put ''cGRqb1Q0Uzo2e117VC8+NzZMSmY0IXxebHtTPFptWTEqenE8aV5yYG4vL25XQWQ0Tyg4JFpdfEpvU3FzWG5WSX52djIrb3FmRVEwKXo7VW4xLm1jTDE9Lj1LQWU/eVVnRmVMMVRIOVhoeEBQJWFCTXl0TyZgaSVOXnVGQix6cVZYOmFIL116Y3dwdywoWzFzN1tARjJmWDVuL0d8cEIqfCopW2I+''@;'; put 'put ''dUY9TiQ2PFJRe119KkZCZEcscUZzXWcrenRGTlhDcFRxRShUKFRHS3s6b25LQk5RT2hBMjpgImpiZk5LezohRjB0d28ueTZRPzd2NGkicGBRYzBJVE9xP0kueT90NG9jKmssK00mRG5+UTBJITlgdCRMOTMxdllEYCxsS1E8PnQicEhAfXA2Zi99bkREdXkjZmJHO2V0OUFwM1BzPlUrbFcjb2xd''@;'; put 'put ''Iyk2VCVqfVUkYFtBX1EmSGE1JjtnWFRkdk5GLlR5Wml6Xm07X1lLdl5WMVRbckNHWWpAL1MzO0VqTzw5SUNYbFo0MylzQVR+ZiUsc21oeU9dXl5TSXtZRztMbzlrdS4sKCxwLEBnMGJgVzBGUnssRzY1eHB5Szg1TWpTK2szWj1pLzVnVm1GRCVNc1F3SzhMYzxHXWp1SlRdNFlJJV9sdytXM2Ej''@;'; put 'put ''RXlVPDc0QGdkfSsyKjB3dXQpc2kkfWNtOml3RTx5IXxTWS5mUEhpRUhkZE1XciV0cWR8eld5MDMqJTgicXptQkdOLiUxYCsybnhBSHFiT3F0a0xyTX12YGJfSlo1eHYsMjAmLl0zLDV3cmFfPXFEUE1xTVpZbi9AOV4rQEN6UGBiRyheI3F1ZFgub29Edzd0RjVTMiQ7Jn5NWTtiPUBtdHtze0BJ''@;'; put 'put ''Unk3K1Irckp6M1FgXy85PEdnPTMvZ2BwN3tTcG5qWXI3MFkpK0d7bTBWckdQZUVhOH1RIXFkY0ZlaCREKlB7VjNuMVloY31INT0kTVVRMEFaQm9FUTI+fCUpXjNNO05FNVl3YUspfWx0YjMyUH5dKHB0Wm1vOnJJTDwhanosUSZAXmdQe0dZVSEhR3hzdzFwPT1HUHVqTnpWeWNmeXkxcD1pUnxP''@;'; put 'put ''X09HazhHRHdEJHJTT057a2F5VU12UDYuVlIjKklpR25bZjtLKWlCfWs+MV1lW192LnlyQGhJalRkX2d8Uk5gQHVwJFAlcE1pOC5vOSsmKGQlOzIwMmM2OE82InhkYUw2JTh4WmwkaiEjakBQbWYjbU9wY106bklRTFpET3llbTdhMCI8JUQ0YzJJYk9dTTFtdllhWEI1SFtHTn4xQTpNakxRIndB''@;'; put 'put ''WSo9b2tRPEhhSjZ0TiZqK1Jma3g0NntbcH5gP2M7Qnt4OTk8YUd7QigieDE3YEJ+MFVEdik4bVhPIz1FYGxpaFV8YU01dmRyU1V6Zj1ed1RQYCtCLzE1JGlTRjhTYTh5fEkhKnUkbT5kYWd+KDA3ZTZ2NjFdQlYzUj9DOk1+UjMpTVlScjJBb2J5RmwoJWVLRkh4US5NUlosOXcsS3JTZylsPSVi''@;'; put 'put ''TS5+ME07OCZbI2dtfjR4MEFZb1VnamFnczlqPXA3cEs6VjYiZVVrPG5NSUU4QCVANSR4KyglZCQ2OmB7L3NZI3U+bDM3M1tmVnp1STx7eUBPR31xQGUwSSVQYypINT0hR1FZPmEsVldAZDdefGBZQChdRGZGOUlbWXNOYCkpMHdKOS85OiI2Sz4kL0VdI1pzWWhbJClaTzRRZy49eDU5XilnSmlF''@;'; put 'put ''Kl5kI21+b055JG1dJXY+fV1DcForTE9eOUpdSmAmYHR9I0gwfGs2PygzdUJbflcycz91eFFxMTg5cEE8RDdlVzFyQj43JjFoUHwsLj8+IUo/UDA3WXJRJDtwalBneiZWPWx2ZGtadjBYOFdZVVU5bGtmOHw5QEJRd2pWN2dHM0chJSw0biUwLE5MbjZ3S1opOVpSMVE5NGFWOihjUklFWzxAaCt2''@;'; put 'put ''bVhpK1BLezMxK0JLaWpeNTp5NHpNWTxNUkNYR31RVns6R1VScTc4dng9fCFhO3s3ZF5Ze219QDpzYCZSSl1Ze0gxUElXI05kaHIhOU0leFJPZ3wxS15XJWJLUDFLOEAlVTpAQnxPbj1KejhkYU12Wng8QG57UGY3ZTcjZnM2T0YyQkZ8MTUrKVBZaSRqT05ZWWgkZm5xKDxmaXhqJTpnYjV4Niw6''@;'; put 'put ''Izt9aFRuKTw8O3NgZWFWdXE3P1UsdzloX3g8KURNe19uajl1X3c3bGhraTleP0JZMXxAO2VZfDNnOTtFZTRJc19TJW9reSp9XWpwKEZSIzpXKylBWVhuXl0vXl1+WnJzZzksTCh4UigrdDo3Ryw9K2FqXnojZTdJe2o9SnovJDJZZWFoaG8wT1BFXVBpeGp4JmReJTwuZ1FnQzVnaFsvbil3SCVV''@;'; put 'put ''NVF4RGtORnZQMDdZQm9UXlIlSigkMkFaLz1pN0FfOT0/bFcsOXtTNVJNczoicTxhY0kuejEwMGIsSiZ0dGNFLGA6N0hSbS4/aSt5JEZ+VUVgREh6Xm9gZCMhPFZELk8sRz9VYzE6a0UiP3thVXZ4RiV2aFh7IS81PmMscmQmUENLLHc9VyNCSUBKbyx0Om10VDgvVTpbSSNMenZIUENKem84ISF2''@;'; put 'put ''RjN1VmZZfWxQMm16fVY9fX4/bGdke2JRMktpZ2MwPzxOTXNVOylbU2lAYlpWIVBJJVFDRyxGZFM3JGNRZFF8PnlTZUpRYTNbS2ovIiR9JkhwRSF0eyU7ZFYsL314I0lKXzU3JCVLRyJucXVAQGFXPDsqI0paY30laFp2XVhMMDtfOUtkTz0ubFRPVGBPbldyOjE3ImhTNCM3dU8+VCN+IWdjPXJa''@;'; put 'put ''O2VZUGVVO0xeXns8VE0jWi5OLHEiYUFfYk56cDZkYHUken17TGIiVH5GUncyN0c6eTAuMDc5dzp1fn5WY05+c1FHT3tVaSYsXk1ETXJ0PTZEUER0I35bVlZdZmo7TVh5T3I2fnE2bTh6PDV5eSEvXXVLI1FJYXhDNVhmS3t1WGh1Tkk5ZFtSW0IxbzBeUl17d0tTSHpgT2M0K3xFcE5QSyFPfUtp''@;'; put 'put ''eCRjTiw7M10wfkxfUSVTP1c3dltXXm52SixHPlRuQmpveTE4byl1JXQ1RjRrSmI0PHsmTzF+Vjdsb3RLWm5tcSRBcEU+VzhKe3hiU2U3cXJ6YCFQdnFHPFhYfHZzWTd+XS49TitLTUNbLElTUEdrNGlpVldRLCk+M3VTLjY4WWl6Nmt2P0Que1pMVUB9WmU4e0I/JT4iRks+Q05sUHwkMSp9WFRV''@;'; put 'put ''eTgvODs6Q3k8LG5Qe25RZX52KDB0OiF4Nzp4XXckPipJLGRNUHled153LiVlOCRfKytVc2V7WTtEPEE/NW4keC41RXFtNzFLeHZIUTRfLyQ+T1ZaMF18dVFZMCZodzApQmJka0hxTmBDIiEzeitLOzFRPHxPTzxSMTA3QEJLLGs/ZT4hUkprcFpSMC9kaywySW52eyxPe1RHUXVEaDhjdzNueTdk''@;'; put 'put ''T2FrYl1DSzUxaV05cUB0MDpASnYwOT5rTi4pbj5VTjJVaGVicG17WGVUVzFZRilhWEQoeGJtOmpvUXtbVDNTR2tRNyRfSTV4Ok46e2J7OXJiI31OZlRhMldKX11eS01sNEgrbUlJUjUxaixnYF8oTSY5LHdnXjA/Ny9haDl7a2JyOHV1XyUya0YvWDhXPSJRZXZOeDlYeENCZHciaDxyUTdFX1sv''@;'; put 'put ''WVFFSDt4cSE2YX1fSzU3cD5nPnJUMSZrY2t9OUZqPGg+RE4vcyFUKEhfczljd3QxWDhoYjIqYVJtM2k9fVIpOFcyJFJDcVsvdylGcHpjQFZ4NUFNdGckV3ZnflN0MFlAV34wVHYrREBqSndaVFdQNT19MCRIWVgqaE5MVlooZEROYFNDQ3ZbTGR6c2xpZjN8QURATTp9TihfQSU6eS9VSDxIKzV4''@;'; put 'put ''fUd+Ok9mb0h6S18wJFFIeWB1MnNZSzZjMF1oNngqYHByQHY6OTFPRSV4SGhkOG9FdSZjLyx9YkVzUil0O3xeTXdiZXpLe05gKWF7Pl92aWIiPWUoKUReVipud15MOCZqeW9VSVBxI2t4eF0pQzhlMzIzMVYhUnlqYWEhODErLDJGUEVkdUpZbCw+cFlVcCtLdFEzQnFvVlEhR29CLCNKTjZIXzM2''@;'; put 'put ''TWxXLyhLKDlWPk9ZZzI/UHp7K2QldjclTSxqcit4JTg0Vi84QDZwY05JNUh4b0JNZEB3anArN3ZQNWw6QiRIeDtEQkwwSVVtSUdvIWkuSzg3OVQ9WkhWJCNALGdHRXxbODxXfUw5MTIsU3dHdDtgZk5xMU4kTVtWbzlQVUBpJSpKUE87Wzs+IShMJihxaiwyY3FyQzYoUXRTQm5peDF9Q0h9OlZj''@;'; put 'put ''dUp0VUosTFgpR3E4YENWNFJxR0piejA2N11sVl0lamZAc0M3dWJFYTs3UD1aU11Xb1NhVCMvfTc7czE6PmdFMilhaV9NKzVwJitMc1JpR2NtLzEvLyljKnp1L1RdInk3UFdSP0gjYD0zSSpWKj1ESU5lck9UM118KUEsTlhzUSNsdi54a0hFNVJaW2FMKXE7akt0RiVEMzMyI29qbjR6cW0+ZkZ2''@;'; put 'put ''bS9JdFhNeERrMXZZVUQpQ1EzRFJHdmAvcG04dlZLWHZBQmg0Im9PJDwpJFQ3ZT5JKUNQS09PJk46M0hmLmF6fVEhLkdicTJpSk43bjYoPjs1R3AxaEAkXk5gJitEazp9dXk3OSN6JVozKXxqMigwSzNaSyIzdXBjT1J8UWFFNl9MIjNMb1lUT3VybkZGbCF8JVkyPTpBN2VvYDcuTlppTkEkOStn''@;'; put 'put ''RDR+TjZZMERkL15OYCpaLys+eV1sOHt1Q092LixXJV5NK0h9Oz5vW0w8VnNVYFI1MVhifmxnNWZCNTJ+Un5RIldvOU5FdzJARltyLCZiL0UoYSZ8dywmS3x5XSsjPF1LVkchY15YN2JsLn09NjBUYVZ8Lyx9S01UMDRrVlhifG1FZmljL2Z2WENtWl1JaHV9KXJoYmN5WENTQF1tQWV8RSt2UH0p''@;'; put 'put ''NGouUVUiMERhRWsxTyxCbDwzNkUkcDUuQjFDS3RfODdIRj42b2JCbCI4dmdocTYiQkFWXT0penJEdlYifUh9dHZMVUBJezdkOTtXOml2RElOYHJifmxXelY1WXUsXlRCNy5ORW1uQ0tEQEVuMmdpVEZwJEtzTFRAS0tKeUEvIUMqdCQobytWXW0mZ2lUL0NAXWJYTTp5MGQ/RSlULkhIMWtGKUBo''@;'; put 'put ''QmFiWFRGcDRpZjRJVSlPN0sxWmhMLGEwWClQYkt4el1ie082Q1dRSClTaV1Dc3o0enZSeVdESHV1VGpaTl8rPkxlQnM0PUlxPjplX2N3KCwrOnE+NF9CP3AyTzhqXjVHWV0oX2NCTjNYWkpTNlA3T0dWblhyVEhyQn47NkN6KXNuencoQkxSP0N1SnBTaEZNJjF0Tk86SSNEIWlleC5JXnZUWXk0''@;'; put 'put ''XWYzbnwsOVBiIyUoSk9NJiVGfEJKWTNMfnQ9R1B1NHlzRk9VTUNTcy9SO149ejFjejxOOHc1K0VzKyo3Ol1fSERtJj5pRG1vTiVOZW5lKXU1YFlxTFZQbiIhKzY2X3hIeCt0TT1yKXdmYFtPdEpMODdISzllS1FELjtrZ1ZGQlg7MmRrQ3JWekwwLFEjb2poJUJAMnlnWGsubDR6SHZKJTpOVFMz''@;'; put 'put ''JVtkPFN4cDhvQXFoW2x7ZUdHNVNNXkslMFcmMGozWmZaUXc/ZTQrRDN1ejwpIjFmI3g9ZX5vbk4sXVBOMU9zWU09TSVuMz89V2x0X0BeMkYzX0BFaWFqRCEqb0N8I0I9aEpZQy5zWjIhKldAUEg4YktdLi5PQ0paQUFBQFFzRHYoK3U4RihNdlo5LzxNQHVeXV5BYUM3JTp3LzVFeVhCI09Vanx2''@;'; put 'put ''IkZRQUFBQUFBQUFBXTkoeVBPOCg0I2AxLFNCeSpZRHpbZEAxJDRjM1hdIj9YKF0lKjlaPV9lPHs9K3szVHlkOT9WI205YzNZMD1iaCYrXzVEbyRadkkjbWg+fSoiR3FkWT1jTWIuaXdyP0t0bmVtSTBaSlZeQ2xicmJTKjV6U0o/fHNJZS5OJkBhZnxrSCllYjdycFNsOCE2cHBmPyxPZFQlcHhX''@;'; put 'put ''PEFGRU5XNl9QelppWCRjeilqeGJbVG0ibDRLRjtOO3siYnQpMi5JLiMkP3RRNUI/S2cxfV15KDEvMlNAN0pmUWRlSUNudDdgOHdZQVlWOnRwNDxeeipEfkEhVkBwW0xsR1ZGTDMsRzoqYSRSdnsxaiYjL3Z1WCxabn05Mzp2L3olTVtJQ2IhSCJzYDpnOHRVLz1bPEhiamspSWF3YnIpODdNP2VG''@;'; put 'put ''WyxtfShRNHtoMjlRdE8kdklzYmh2TEUoM1EmYnwkP0xxaUNiQiMrLlcyajUycVAxKT1mM0A7QFI6bn5hLyl+M35ZaGkkcjtbQ0decmlzZjQxYz9SdEt8OiZCMkhIRTpPIy5nW2R9KUBRUEVsdDAvJVo/SDlQcVBVQFpVeHlzI0RldDs/U287KExDeXoyK0htdnNPTmRfK3JSel5EXXhFcEJMcnVs''@;'; put 'put ''dmRDWHRSLmA0KCo/XlNkYU18NVNQNEtZbF5lPFU7K0NsdC9DQUxsZDghMVZKP2wvVEV9ZGQxaV58QlEmcVgwNkd9Zy5lflI8ZCtIMzhHUnssN00qeXRCfUZCPlRwaWJiQnBpLHVdMCVvWUgmQzp1SShlTjtvfkdvaiUkUDhBJTlgUWp2K2hzfXZkTS45dWZldiYhPUd6bSs6eW5kUnhFSjFOR0k0''@;'; put 'put ''SXc1P2Y3YDNUcCNgXTlXRCVFOXtDPDVNNU5UVlBaMzpkPVY2ezpEJT1NKV1Ib1U0Ozxra2czJS47Mi5FVFElRFRha3g5d2koVDQobV5bdCFXRlZbZUJCPTpEfU9MXixIX3Exe3wwOzVRZmBUIlFZPz1fJEQ5UTtiWDQuQF0kYkVMWiRoSXY7cFY6KmFffWpvOVB2WkNVOlV1KWdMJU45RzF4Umxz''@;'; put 'put ''X2RseikzK31abkVpcyohYFY5eG4saCo1PiYhSS4hKWp0PTdGMGVZTDt0bGcodFNLVXIhSSx0UjdOPmZBJWl8PkoqUlBVeCkqcD5NUjIhO0Nld1MhSmhCX2FgOXZIT2h9R3FPejJtLDxLXmQpTDcoTm0la3FueVJ8OkkkNUFJRklJWlZ4TzZOK0U6T3R2fEZvKjUxSmRBYUlLemFnKH1+UHwuPUlw''@;'; put 'put ''WHhPJl0hYE5UPj1OTER1QX0vQC5aKCJoXWpeN2pSPlAmUyNIMiZ7OjZYKXJfWUglPSp9JVo6eTEyZj9MZVguVWlTWyV2YHJkXn0uVG4kNW5kIV9pOT1WRiQuQVczTWg3fVcrRC84UzZgfkNZVklubnNDKmwscXhPc0Y/dGk4eXFfVVVfKlRxcF0zfilQTzcpR2kzfjpFTl92X043ZjB4bzdQX2Iv''@;'; put 'put ''fmFjSzc/aTxRMVtyVzhsRSNXVVo3WTxOX31MPT9CdSRPV1tkU3V6aFRAODA6Pk50fWFgU2dBXyJ3KFY7bSJfOWx5cCRIVEloS0BvRVldNns2RnxpM0BmKDRjeDplM21lKnlOczRLYW9aREB5IVJ+c1oocypIOUNfNUFqciRZfGY1ZHQlaFdbVl1GJEJ8JWRIQHROLE1qb2Q5MHFTZ0VLezddJjZE''@;'; put 'put ''OXo9aGxQZysyO1tCdzkpZ0I+XSwlIztbOlI7P2wpZFhgTUtdSzA0d3V9Wl1SJGhRSCQwI3VwV3B6Q2d9RCJtaEZLXX5gTWhPKHJ9dCxAMU1uT3ZQdXYqPzJ2L3h2TVhBJTokLmRBfTE2LEJsSHJucF9TVn1qSWF7fGk6LD5PWSlfP0c+TCo5TVtyPFFCRzc1UC5feFJdJEVMTkdEZlYraTRDS29t''@;'; put 'put ''c256LmdDPXBwJXJSZiRmKy49JFkrX2shXyo6Rz1LQ3hQWWY7dn5XelBTRCR8ekdRRkppaTpjZWsoLyxaZWZeYXkqTHkmIyFoYndbNHs5UDo0d2N1flhEUy8lZXhNM05DJE5ueWIrcXZ+REhLRnhSIUd5KWJHZXU8NXhUKTIzXmN5M3ZfczhsIz06KyVGYjc1fVcwSys3WSpnclszcHdKYUBEOXwp''@;'; put 'put ''P1c6blJ3KEduek5GO05gWCRVaiVNJEtiIlI1SkV0JTdQOUhtI3RSb0E6ZVQqPyVKKDJ4ek8uQlA5cWcufjN7NWxTOS8qcy5YWjRQVzFKOjJITi5NKTc1PDY9LHMiWCZmS112RzN6QV9qSkRgMWAzKShgRj44LGpuKnwse29QOGQ5VzBLdDhSW2t0TmwpbiR4VGdRSl8uImRsbVN6IV9WKipXMHVe''@;'; put 'put ''OTRLYS4zXmt7NjlrNXsuXklEZmVncnVoNnska0lMMH5gUjgjfnJeTVk5LkVmdmwodFRESGY/OiY5dENRS05TVFVVQHRiZTxJVENbVjU4MlteR1BEX0AyZ01dRCRMNGMkczo4SU9IKVpMcV5BQEJHZ2koW35JamNzZlgxIyVafHNtW20rdj9oSHFQPEUuUFgiOz0jMmkzQ3AyWEluJX1bTiNRNXpU''@;'; put 'put ''bVIkb2drQEBGKSJ1XzB2TmZNeSFHPEZeWCg+LzAufjslOiklNXRMJTV8UVRRRjw3JldgKk0yc0wmVXI4czJBUngyZVM2RSQqRGBuMWBCdzwuZlBhYnM4NV1lLjAhIm5neDtZKUBrMyZpRyo2Ll5nJXh2XTBBN3IpQGNZayRva2NpcX4rbjNNQ1R9MXpJZ3J2X3luSUI2Y3NSUypmKzdIYGMsc2U7''@;'; put 'put ''QlJOUjhyS3pkK3F1VkZpRTVzJTwyNWJDcVd9WGdQKzlFQ2pNSk5AYiZOcXteJX1FTGRvej8pazBgfCF5W2Ila2B5YWpMR0deP2d2OSJodEE3Lz46YXlpay9qfDBvZilkcyFWbnl4MypGXl5SUzZqZHZiV0VPQD9iYUUwaTQ7WGpPMjRIXmdjLFo4KUE0OnFrWFdjJGM5RDRkak5XMVpaLFguZCg0''@;'; put 'put ''RzxvRXN4Y0VWdmlIW3o6TXs9M1lzdG57RD8qaWEicXpvQjRUd1tUTVt5dT9aKXVZKmlrUl1zTiZeXV4sY29bbFglbz1SLyVWKEpnOXFLRms2KE0udHIidjNlaHdxfmFPYm1aKDVAMmt6Jm9Mdkw3Uj4mM3pnT0g5d0hbaWY/aF5HTiZyZ114ViNgO1ErUEBLd1NhRW9gMmdacX1TPjtyVk0uYkwj''@;'; put 'put ''RUYuPD9WNkIqYzJucX5LVVA1VjIwZVIjR1dyZk1kaUBFVFNENSg+bF4zQGpudHNTLE96RXhZczRKIm0ifWVPUERsamYyTCk0MW5wZzVlP0A7VUV1Z3kvSW81ZiRMWWp6VUxTZF59V204QDdARyJbay8pe0UqWCk3fWVFZEZ5Q2ooemkpeyM3ejcqbl1+cWokI0o7YDwsM24qcGZgMl9BQkl1bH0u''@;'; put 'put ''TFR5WTJaRUZlLk9uO0grZ3oycXpbUWtqNHQ1fX4xWXt4UVooc2pYTlJHSH07ZSFkbSM8V01mczBeUj5JLkc2PkA+cVFHQ2NmVk8iLC5TPlFZQ11uODExaj1LRkc+Wm4xb2JDYDlNMVNyQjBpSGtpMTxoZnosZGAscCpyMlphUkBTMHg/X29nPmMoXSNVc3syYW0ocVRGIm1wK0VnOyp5bH1xbVV5''@;'; put 'put ''UV5Ge0J1d0B1JSVpLjxQNm8uPkNEYnZGSHMjI2IxeH1GSFhPeTVsN0BNTnpsT3leOnNkcEs2PVcrQzJZbitaUmY6bHBPaGA0cDxSLlhVQTw7S0ZweFR3ej1QIi5DcUJVTztGLCglX2N7T2NeUSpGNFtxeyFZS08kRi5zRz5GRVNwLyREfl8sMUVCT2RMcCt6dTd1NFhoSytXTyVJS3UwOmVocSo/''@;'; put 'put ''SFUzdDgwakJqOjJYO0lsOiJXJG8yRkJIUT9deTFXejBOKiNjcUQ6LExeQ294KV43MHUvQUd2YWxhOVJdSk0uNWNKPlNTYGdvRStePWFrakM9Q2Z4MmB5ITBRV19NNHBZcyVtXW1FXlY0SzgkbGM7YDYrcHJXQjc2VlUvanBwQm16RDRJWHcqP2hPN1NIbVhLL183TV4hYixHbjVbPksiJlVOXzIw''@;'; put 'put ''ZiR9V1kzTDM8OHl5JFVJVlhiS3xOJmF7c1MhY05yLFVPLCpoPTt4LEA7XVVkJExQezReSFFYNCg5azszOUA3LjU2OXBSP2JGQDxFbUhTey9mdS47UzpnWGwhWEk+RGJZYz1PKzpIOjgma11WeDEmIzEqP25uT15VUz5iODczcmgqNF5mRGpkI2EmeG58OiVFdmReW1c5Nm07a191WjsyPlNtOGEx''@;'; put 'put ''Piw+RXlhdV8wJXEyc3YlWXMiT1ZtfSkmO0VHNCVhJENley54KlcyP0JOSn1VSVJMLiYpfSE9ekM3JTprNWR2RXwpSGFxIWE+NilkIVZrdmBteUVBVk95Xn1dZXFFXWtlciU4MyUyVkhSckhIRFpIJi81a3lgWyZtLHVkX2w2VjdKX213RE8sN2JFOUZGYTwlI3Z9e0g7dzlJTjAhRFM3fV1TKCkk''@;'; put 'put ''UFY3P2t2MX1HVkpCRTpnI2hlKHY0V0tgUS93eGZNLl4ufHFiJjJmZnc+UU05YUBafjdEfVhPNzI9UjRsOWRuNFZ6TUtscjMwdyMkYWE7Mi5yO1UqY25sOWVqel0zKm0hWkRLQmY6P19pJDEjd0hGU1dse0BMUWlMVzVwZ2w2eVlKInwhSDdFJS5dXmVsW080WjgrYnZVKlpuSXtedURqO2sqRThO''@;'; put 'put ''d1dQfjZvZEprdUxiK1pkZSMkUlMqWl5QISRra2l1fiVrejh2NTU1YDBPO3A/SyVGOC5TQElUKnd6UzxeOG8zWmNCRFVqfiJ9cihFVzdDYlR1TyEuSHgxVntuVV9gJEVpPTdBX2hWXSNOY2xFZFpzKTwvOUpIaEAoZFh6fVRFamRpK3RzUUp0RDwucT11N3FzdCtnOjNpTkluPSY2QUw3WSh9KXJp''@;'; put 'put ''RVFbVEx4VzdwdFNhVXM8N2leMEcxNVh3d1l9WEx3dngqWz1JUnliVWNLXUUqI0RIYWREXVNmWkE4K0NtJWR5V1J8MChoL1pVOnl9PHZVVSsyYyVYUjlbXltgMngvOGdYMkl5P3VJczdYMlU9ezA9OGBSdztEMElmfSlQTmx1NjF0bUpUITlzLFUrYUdGPl9ZQ0hDcmVoeEFKP1lCU1tLKkFycmZI''@;'; put 'put ''Om1udC87WjByfWl5Pil0KU1geUQiOUV3PD9MTVViQGQ4RCZsYkQkbkhpMzQ4ZW8rOF9FZ0olKG42KytQOnp2ajliSm9sKjt+Pm84NW85MClZQm5ERUpQfGMmbldPTCE5ciVaOzp7VDckMXA0WX1EayNbMD85WWpATHdxe0g6R3RuP1gpOz5KKmUlR2l1fk1Fe0tKMHVtbDpTVitfYDtxaD8jZ0tY''@;'; put 'put ''bFM4clE9bWRhbnQ7a2p6O2g1Z01UIzQxbUFvfD9rLi9mfHpVdyk1SkNtNDVLMyw8KGckNWguM18pT3xVMy5UfVk1UlNtWlMqSENxfmhle34kMGIkaXAkaWE/QjZISCx1ZiV+JHcmQmtUJlY7NzNgK2s7eHsoRzFYeClKRiosSDhiMnQ9YDAhZ1pYbntoXVA9MHhCbnkvKVBtRzMwYkxKdFk1LEdi''@;'; put 'put ''cH57WkdzV0dyVGpSJEpEXl0qd2A1Zig1aEA7Kllvdl4wckMyem57XjB4YThJbi8kcVhvOE0peSVUPmNQS1Zjdm9dKUpVTnVNL1V8eG8iLndoLmZNQHd5fSF2UmdmPlkkT180V30uIj4lIWxnaWxBbm14WWNQP25aTTpsQkwxO04/O2BWJGYyWSFNOHpTVVEqdEZXNzM+JE0uclpGNG02fGNzJSgi''@;'; put 'put ''LFVqM0Uwa3pqdCFPdmwiS19jcEYjO0hrXSFPelYwQjgmcz5tQj1vaSJ8IyU3RiE4YjFHZnpxdWNUe0Z5fnpgdmtEW19uJEVtNiVxX2dBVnw9UGVtOTZadVJuZ1ojVThUWjd+Q1hsJG58WHFWR30pKSNxOEcvTk4zNVBZdlo6SSI6b1ImZCR1RzowO3VpSzw9TzUkPnZWfElCMl9lOX1taHg8fElK''@;'; put 'put ''QntDcyxiYjZJT24kTWN8ImkjQjArVCkoWFV7I31KUVE3P1o/bkJ9fFdhYWdXJCx6cGNGPzYkKkx9MT5dfHBHVig3emlyMTprMnRUcW52XVNCW146IlcpSiVjSU5bOSVYVjs4dShZP0c0PSFSX048elhOIjMlSkR1Pz97WiZgQzxAUDRrNWcsZ0RLO1tJd2o8REMqMXo9TX1yMUA6fEs0PUksTXVa''@;'; put 'put ''Kz4jeE1ZcXs/YWVsZjNaZHgzOyVdbixXJVE3JURGX3tlM3Q5ZV1JVjg4aX1iQiY/Q21eZ3ksal9RVyNidzg1dTc+YmpZXSwjTG9pPDdCQFg8QXpfMUhpKThIPHJIbHxdMFYrTD9MIi5OZWU2YW1ZSyxaZkJ5b184WXYjd2hALl1iVGpiQHBNdlZkYXo5bzI/XytbbW51PiIpQUNGKjxEfjpiWktM''@;'; put 'put ''M2V1LD1KVUdGLCVCZyQmaitfTkpPaTgmbmo/OUhEPEJOKT5LTWJGNjgxQWVlSU8xIURwS0wpW0pfXzYrSyZkRTBUN0E5diorY0tFSjF7UkM1MjN2fHgsXyYlb343fiJWVTIzSU93NGpkSDJPNG4uW1RTJjJALDFRV31PZVQ4O2tzMFNVRFA1YzxuYmcya1tEXnw6LilYdGxsUEQxVUJde0h0QlB4''@;'; put 'put ''aHBRenY2b0chRypAdzN4RTxSbng5YyVbISlFKHZJSEt+VkZiLn5VYVdNM31gQztEUHckSlpSTF4ka05gbXh2TCV8ZytpcTxAU2peSn5CLiYvNUhaNVlwVTE3X0J8YFFyVCNpTHdOTUE2TzJjNGldImtoNkROL2FSKElSVGJCM35fW2tlY3ZlRSw7cC8/SWBrcDJ4V3Myc2k/fk5aIWo/TD03bGgw''@;'; put 'put ''JE9xSUc6I18+eiU+MHBmO05WeDgzQnVZQ2Zmanl8cSRePWNUMG0leSlqTWJfczB4TiNxZWVmbFs8d1csV05vOCtTVjIpJTExY2YsN09jZixIRkB1T2lrLEVpU3I4JD5FPUBRL0ldJD1sNiUwe3hsQEs8NGRyPixpU2xQP3ErUUNvYUF3TEpWV3VONG8rfUBjNnxabXtsIzx2S0ooWTNvP2VyQFQu''@;'; put 'put ''WCQ8VldoMkVWJCUzcVtxSm0mWzZWNkN1ZDk1aSVbS21mXzw0eHhwYiNeKEN0bnloUW1fXz1+Zk1me2xfWWA9ZHtPYEo8QDlxU2NWS2pNRlVALH55QzY6OStNKndvN1gsImU2T3FCSXh1MEMjd3haIStMejwpNiVfUm05LFFgWHxdZFM0TSZPdWtFejYsOXVEbjBwZiMqT1FsS2RdMGMjPWE7Z2gz''@;'; put 'put ''Ziw8bEMpe142OENQOUQ+Um1GSz8ifm5HeHU+QHt4Z09yQ3duJmtwLHhmemE4T3owRlRFIj1tX0UrKGlFRk9zQCxQZktLZk15NlBwWyVKKCZFI1lAODw2ai59VmF1OVJzelZPRHMkdUNdZ0F6YzVmMGNbbDFGXyo2QkB2d2ZHXj5pbmBzfDNSRF9dPlIxcEk/TCshSkA0cyska0VTe2pGdnNPfE1O''@;'; put 'put ''LnpjVSYiSlVYUzg+c3VkYnBCWyY8RTpLXn5AWjEoWlAhLloiXiV3ay9AVGBwWSEwSlY2ZzRlNmk2Rn4vcGNvLzReYyRAPU02djJQIUtNPyo6eyt6TThYb2ZTXUxpYT9CcUo9PUY7Kj8sJDhPMnVZaF96bl9gQzRae2JsJXxyN2NqVjt4NykwLihdL08uZi8xeVFjVy5yRV1EY2ZuKCpoLDB5PGk6''@;'; put 'put ''YTc6eDVXVD5Bc1d9PkZZW3NWal99YlRhZl4jfl14K2N7aUkmNTprWChQd3BNdlRGRmsrM1dJKF8xRUZtNU5vZlclP3liMTtaZjU4ck12L2VTY2hYKC4qRlkvVG9FLnFgWXoofiFzY1RHKDRQSSg+ZVIsNzIkZT8xW2I5QFZ6ZTBeZ11ZS1k9b0ElfTRaIz1GKTtQcCUxXyF2STl5VUU3P3ordDtf''@;'; put 'put ''eGF7TFMmRj8mJHZSRHBoVEk/UE40SXk9OWlRc182NlA4MCVVUUNKMz5vbiVKcH58bmRfKURSRklCZzBqMS43PWNsR01yP34/MEw+d1QlXndeYV0yeERPeGtDeCxpPnRIQ1c3U3AuX3Z6LGtsbSVUaVt2LDdIfHxTQFBhRUw/eFVTPzo8fWV7IjcjZC5WQDJ5VT9WdTQ7fVc3ciI9RG8lNlJwSSJS''@;'; put 'put ''PUNSJSJ2K1FfLHdBIT5Bc2hweWlJdHw7aXF3OF5CYURhMGR1OXY1KipGQ1Y9TWBeWkVtdyN0PzY8OWAoeTs2SWRRKWpVIXddXW8+IztWREwyTH1tLzkqQj9PIm14REZJRDFHWkphJi95WD17MDNQPF1ocD5IJDcuXk1rMDZgL2hXODBRZ2c6Oz4iS31Ue2tVaH1UdTtRQVpjdyYofVhkZEk0aiMp''@;'; put 'put ''Y0suRCRxYSo2TSQ7Z3JlMT1LM3pLcyRWQ2RSWEhheCZYV3J0Ui9JbFtyTjlDakp5fkNjKGtYVnZxZCEye01jSWpERWt2JFVoZ0xRTnB+aStgWzRuUVlrQTFpLHEzYXp4UH53QHN4e2s0Wk98Uzc4YT9jPndfdHpzTE8xOVBKflRrPTJqfmI4dVZwMVsyUEByWUs/aVl1e3QrO0JwOyFnPmYmTUYw''@;'; put 'put ''Jj9+d0t9Kj5dMlNZZH1rLmokenM8WTEzSjxsOjg5aCRze11tP1JReVRQdW1xRGowN3w7aVUhR1syLl47P1B8S3soVDtGX1slJjg4cC54ZFY9P19WKU1STTRTWjdXPUJudyQkS1tgMUpse3lSfV8kZDxPclB6eD0yXW46X2xlJn53MC8+Rm5dRE5xazdJYS5iQX5yM3p0Um42KCVELFBkPmcmV0U5''@;'; put 'put ''My5MWEsmYUY8YCl0WXk8QjlWZkpbTylFZHNFYUQ3MipQPmZZQHNCfXxWI0Y+Rj9sPCYxRGpkd1J4ZSFUIVBIbUllMndmQ25TayN5TjQpLDIqRi5mNng0Ij8kfklDOmVVNkNKJj4uLEpOeWpuT11RRT5JJEpQakk7ezBLLyx1Qz5zc0YhSmNeNjIuS3Z7Rj9qeUNJK1I0ZktqL2x+Imwpe2F9c0g2''@;'; put 'put ''UDBxNDs3M0ZzJX10W0Y2eCxyIyUxU0tlSXwoIV55elBMbDticzl+RTtGRXxTfktNNVNgNzMyJXRmY01KfEhZYGZPY1FyKjNFajAwbyZPbHk2UXN4e0g1QmJOP3ZvM3xLM01UYCwxcmY6JlY9YiNGO2B3aF9PVCZtQnF7ZntAdEY3UmBGI34sT3pKYytXU1JjZj5zUWM0dXYiT09ZdXYvOy47QDk2''@;'; put 'put ''JCtFeDwmOi80PmN3KGcvfDZCfChRLk8qJEZ6cUA/WWZjVD9EZTAvREJGTVBDRH5UfCwwWE1dTlFeWGUjOVpwJGs1dnFQcnMucmhXRisxSl5AZysmTms5SWo0ODV0KUp3c1J8OE59RiNvPk5vREk7ajgkKV0/MDJoRDghPjU0fCZ5TGYidTtWRlMkXXFHQEtEdDc6MFlvfUw2c0k+fG8jaFQiTGA8''@;'; put 'put ''b3tdPCQ7KTRwendnIVlaND9DP2VMJWNFe3FpVVtDd308LE83Rl1ae0pEfkFiYEpDOk89UTJbIiZmSjxHPW86VnpfLm1rUEheS0JuR3U6Q017ZHF6dk5dckxVI0ZdblQvdDhXYWoyYUVCUn1kYlhITV48Uz83emBxSHJoIUZYKW4jMG1YW183ayNmcTRVajpNKiZrSVswOU9DcSooOngxZDNIfk5e''@;'; put 'put ''U3VPPT9HVEtTLjslMCE6NHRpfjJSdkVbQnI2bTBpSGdXazkhTz5leW9CfHNicERCc3ZALHduNDYjRlFZezFbX0N1SytHbUN2IzQza2NCaTpqWSpfOEFRJSt8cz82QzBSbjVVfUU6Y3pHZlJAQnFNcSpnbm5jJl9bfEclNDVId3Y7cFlwT1BYdE1pTjFJKE1EXjEpYH45Wkl3O2s3WyhAeDk0MDJk''@;'; put 'put ''WDA/dWJncyFYc3s8Tkl0cXZeO1F2WEFLcH5MIz8yYVUkQDBdejxMdSo5UkpsIXFMTCtETUJDTkBmNTwrOSNwNiw0RyxKLlMqODJId04sUUN9eVMqeEBWc0cqI0NlR1RPPjs7eWNDVHpBNyR7Xyl9ImpveFZKWV4qZE5ESWk9WUxoY1puSGZxYTlkL09dbz1jLl0icD9tXT8zJkFLJGNyPXouM2hk''@;'; put 'put ''fiM+LnZeaExXdzpmZXZRKHRrVGoyfHNnd0NDMGdlMy4wQSFuZTl1MHo5ZjxZLF43fD1uX19JJUlRVVpgViRZeW9OdFE0MXZqJW1yTityNCI5M3lHSyZgTjVfMSpXXUUzbXtIdThHP3xQSCsoWHFCSUpKLE4oc1E7TWVXOThLeS9mJXhPO1ZHeV97cn0uJj1BNSE8Q2l8bXsqW2MlWTRnOWddLCZt''@;'; put 'put ''O0M4JnJ5SktrNDw6ZmwjXTNeNFsmRSFROz5LMmQ1ZnJRcWZzUUw3KDRJJjRpZCQqcH1jM141JH4/Zmx8VVpSRlg9SDNCOFkjc3dyW3Q5JiFgUzpicWBaRUFXOjBmcDdBMFdiVFBlKzZLZTM9Tyh9c2wjKHFWSl5gbE8saitIJShMdW8lYiEzcSkxZDFYNWBLckxaTV5nTzBNYVhvYiRIYnJ+NFVh''@;'; put 'put ''UVA6KihFdjAxP3Uraz0mL1pbNm1QPkJEdl8/Mk1+MEhrTi8oImZoWU9fWSlrUmorNGMqYzlOVileMDB3NWA6MkhUQHVWNkIqcEVGS1g2aDVhJmB6MVlONiZDJkxVaD9oUWFsUVFZWSIsfnoobWpgLDdfa1VLPHtlTCtrRT4mfDg/ZFo/dEc2W1ozOHtNdy5eaTwsKy8jbUcqb00lYlg/NTB9JUVa''@;'; put 'put ''ITl4RitXKnUwZXlsUGR8KXVAZmI5VUE3MD1IeyY4TlVLXS8mLmR4aXFYfDxjO0Z6O0NKWj82S0YsJTNmZDVtY2VfZWZFQG8uTE1tQkkiImJOXWV6OUU+JD9yQm8uQHhweE90X2FwLz4jQDgoV1hqQC9VIkhsW05HU2MlPWNYJldhVGp1MlIjIWpjPH5CVlEmVDUoamV8ZERQRmkvSEBxKWs9MU8k''@;'; put 'put ''aS9bOVcmcGkqZ3EleERKIkpoSzAhaHBnOUsyLGxManEzfk04JStJWi9fczhNT0xiJX41a00lT0xtd0J7YFMhZDVicDtGQihLQyNAcVJqWkQxWEklaiY0O0lbT2hGYDEiLiJ4SzJaMGBtRV0jO1tyS2NSTSlgfjlrLiQ3anUkUW5eclM4bEtwU208VEBzeSR7bnUqamNycDBJaTMwUnk9PSFaTnVb''@;'; put 'put ''P118akFaYXw+PXFua0RNSGp0JCwqbD93O1ZIIkNzXmg0TkJ9NjJkSm4/eVFRMm93YHtxVkNMJSh7ZDteaT1YUlY/UTd2KzZsOkNMaDd9V0t4OWtNeFFMMEZ2ZSFSLzc9cTJiKUFkPCNuWTAlQDM2MlJhZ2FpVy5YImIlWVVlOXVYR14hdFcue3VfOXhic0VhZE8pNSxqdypFd0d8ZD1BTzFxW0x0''@;'; put 'put ''OFM3bEgvImJIQEg7eXkyKiY3ZmBlJDNeOXNNVWtPZ3JGT1QhVG8oW15NPDRfZnlkZy9VNjt2W0JXT058eGZCTTB8TFslSDxbKzxGfWljL21SVGdmMj91PTNiQGZ0UVliczBFKi5pS0dDUVpnKDBVVChQailFMDZsLzI+TkhHWzBDd3pVW0Y2XUghbGg/eChkRF5XRjNRbkFKTUlgJGNxbn5DQ2pn''@;'; put 'put ''YTRVN0QxUTc2KDNRXlBRfkEseFViT2E3KFQzM3RpW1IoKlJlVWpjLFImd2NZNWJHW0s+Zz8rXj1Jc3d9RHJsPSQjMkswaHhZUGZfTERgJXR7IyNqOiJsSmpIWXBQdkoob2t9OmFtZWMqekFOYHY1aXs3cUIhOXA4WTBIe0N6InFxdXpVQ1pjTEswJV99Ki5rTHlYTTNkeFdKcnEqRD1ucyVIQlF5''@;'; put 'put ''TTNVPzE0JDhmZlYsUnAzYSRbTD02Q0RVeFVrek9WbkQqLDlhNyl3RTBXKVsvPVlNNC5wVUxoUjNwJj1nPlUsQHBVYSZCNi9Aa11jL1k4dyYvbmlIZCtKYT46cXk5R0FbJSQqKTZ0fWU/M2JdN3Nla0VCV1FmWiRheiUmTkFkVXovdkNqcUMvbDJvW2I4T05tcXJmTWdtcmZGeToyZSF0eEd8My9f''@;'; put 'put ''M0E7ckMzfkk8VG5CY2FdW3Y0KHN8ayp4RE1LdVVCc1lzOGRwSXBRJS9+eEdJOVt+Syxhc01CVU5ULDVuaFYyKCk2SDppTDIyQn0/ZFk2P1hYWnNab1B0bHF4Qj5tZD9jcUpaPEgxJjpXYXtaU0JmQH1TNmhiW0sqQU4/Qm9+W25SMnRHWmFTO3gmJiw3KiZwOlMwck0zPVhdfl11R04/YmBGQlEh''@;'; put 'put ''e2I4TmY5QFE0ayNNcytLSjIxNVo5UUtFdmAjOXlpQl5dJFVkKWtdN3ZlKzVldz9nUj57dVl7VHMxNX40VFsmbzltSDY2fnAzWTN0RHp8aWk1REJOQFM0RWpBcEtEM0crUXFpbVFKUGcoXyQxXlROcEs6QUNVRWZfZXpzQS9gN0lGOS8yX15ScS9iUGhWNjBQcCFYNC5de29aQml9PEN5bztWWS5O''@;'; put 'put ''QkA8Q3ROPlVfK1ZmV3djW11pIUsyai56YVp1TncjQjlFIjNEWkl4eEVOWHVxfllFbF41MHNOXW52KkwvYz08bSgidDF1XXZ2dGBHIWN1WXozK2YvOFI7Yns/PShrJWF5e0R1dXpoUm1nNSx3R0dhRFNNVVN4QzxFMjU8SGxkaF9lTEdKejByajJFNyxpeEsiOkEuNj8xST5gOXhGfWc8fjBvfVpm''@;'; put 'put ''Jmk6aHxFVTAvKkdsd1VaSCVdcnosLHl3WClASXdgbHh5LGxIJCYpMitQKHspRHsqfklFMTpTI25lTytkdm8sJldKMjhGYEdxOChES3VsYFspZyxKMn5iZkw3U1R4LEZhUl4mSF8/XzpzNWw+KCpibFNHR0dUeVlJQktkQn0/WEZdJmozPipUQUhSLEB9UDREJm52akQhNF9AX3dCMDlsdS9YYUQm''@;'; put 'put ''S35rOzJhT11KQkJteSwwPURhUFIyQ1VmV3JPITtNR2Mwe113ZnwkUWdhaiZjOyN0ayEjKjBwRVZ0MW5wPFJhSSN8U1lsJTxPSDxnKFQxLE9wZi96QGlDVWF3PUZtNjhSVzhLWXMwVE9BMUUwY1I8IWpnXmJuXSM2eWMlKkkxaWhPWGBPIUNaTzZmU2leUVRsWXRfKCxjM2hjWGo0e1paRm5HNTd6''@;'; put 'put ''eWg/PW4kdTNZbiMpeFslYGQoL1VXQ04xVF5TfXZERW93UDRqeTFIfTt7TStDITVSKThXekNrPVB7Xmp+YlBAQCtgUktwXXw3R1lHbUxxQXg2O3QsKDkjciVAZnM6WkAxeSs7Ql5JQDlGeyYsNTo1en0hWzpDQmMieiJ1NVdvdDxgYF5aTSo1fWNdNSZdITNyK3dXPXg0KHFtOUA0RztYcil8JCxE''@;'; put 'put ''QjghMlIkPWNnVD4oTVcwYl5ObEs6ZWR5X2ImIkU1X3hacz01c3tVJC9KdEYhL3ghcWtrQTVsYltQYDZEaE9eXzdwLjgpUUYma1RKfV0zdE8lP2pVUWVQejBLMyteYipVMk5ueUEjLzNQWTRUS0VXQHJaQDBufDxYT0E2aipObmNidU0jRmk8X2RmNGlbM3dNe3klYHFxYnY7Snx+UUhtK1heeiFG''@;'; put 'put ''R1Z4cTV2PTcpTW1ab31XYUU6anBTb1I+ZEJ7bFMpUjVPPE8iVCgmZzs5SmcjfiJjSH5Ua3FfbE9NbjF9N2ZNMV9PQyxnIz9FUTI0RzxIVzoxKW11SVJAQHQrQldyNks1OjR5TUBpQmo4MiFqdEp2PzVVOHooVz87PGhLTCkiP1d3ImBZWTF1eHh8Yz9JNX00JkJhSyxrK0BSMzdaV0xwWWpIOmFH''@;'; put 'put ''UkVBN3kxNF1od3MwU0pSPy5lcz9zYHpdeSVpXkB7XitXUF5vQ09IXSxsZClgKmlDO09KJUJ8NzJKTFgpclgjaU4wKl1dRDJTQWR2SF8qPWt5TH1hbUFpWllQY10+XSlgUjUhPDpLK15YRW1HUXsvLyFfZEpMIWNCUGRZKT0objxiXTBMRSVhV0c1O2FLSkp3fCssXTpdbn54YEQsK2ptSjVZPE9X''@;'; put 'put ''PnFyK2ssRDh0TWx0UnZMSX4iQ2Q0JUtLIiZ8fmtdZnpLIm1gZlV8dXg8Zktmb29OI3FOeiZkc1Iwd0BAalZMYG1AKCRtJm1eKCtHVjYrWEdNISNPLiYjR0NndzlLK1p+VUhSYCo/MHI0PV88SHFJNSNMUl5dci5IRTYmPkZHQTFJMiVyazdpeWM2bn5AJFMueFExclhXSThmazNfQSF6cG4jdUhE''@;'; put 'put ''Q0tyRWtVKVIsJSpjXSRPRiVOMndqQmU6W05LSGBENWRwSDRkOVlnRixTZEV1VGIwMy5UJldFWSFRflImITlaNFFFZzw/b3BOe1BvJT5GXzokXWQ4YVFTYkV5NDl8YmZgWkBLcUQ0TC5Wd3wrRWluZG0oQGpdNjF1NXhJQmoyZ3o/eD5iJT82V2gyaSxfOmYhTDI6P1s3ZzJvPkN5eSUrSnIsP0Bp''@;'; put 'put ''SXxEOT8xNkIvRSs4dkAvcCFiYS9tNVg0KWRwOWFZRWtoeyRAP0xeaT19VSErNDd9UVdvOip4P2UqUTBEWTpVeS9OJW8kczYmQ299YTBPbHM5VmZTOi8ucjNxV3d7Lnh4O0VZfmtpKz0oPCpVTFdSWz4oPnBMLzUqIXh1PWAsfSJ8Wl8qL0FNb1pEWGpFRHZvcS42ZHlmW0VsQUR6ZlkoNj1IJjYy''@;'; put 'put ''TnNmfT4yb2tCLm9ITDZ5Jl40TTs7eWolUWo6WGFtYD1pezRGXnVkamk5ejRPZjY9PShYRklPbi5TOjdhWGEvRzoya2Q0SFl9LHdKfH1tOU57KHtGTkRBPSJgSTBfXkExaldsQW0sXX5yOzJ9fUl9Yk9OZVokKyVkRX5UJnEzcXtHXkQsbXZlVXs2JVZSX219Mmk/dUlmRDBSQ2d4YmsrJDBqLFh5''@;'; put 'put ''THtFYXZraXNpc3t7QHZPV3tMWmBYJSQ4cE9yW0NaY2EsdndpaSlqa3tdRVNDXnpPY1dqQXluWShOSnMoUGtVIlQsVV0oYlMxS14vMUZaI0BuRUsyNUReWGRBRTF5SSFzV14yMChqayZ8JHpEbVYjOWVLaHs1dVtycC56akgvSTlSQHsqTjYofWdvPFVhZntwaGQ9fm5JU1gvbVYpKkR7V1FeNmMh''@;'; put 'put ''blhEVThbVF1nJjdiVnw5dVhDJj5+K2xLcW1bTzk0SCNfaU5Ee0UmdHtQJGlMNDF3VXJNcnhwNFFpRnM8MEp2LEFKKU9+JFJTOHZVXjc/PktoUGpeKURzJVpoTGRdImFFQzIvSSUwOkZbQiVlRWN6Zip3b3BxUXt7TUNPe2cqMiVsL2chKzI+R28qQFdwZz19NkNEeGRKbjw8STBdRHpGVygrdXJu''@;'; put 'put ''enUmbzAqSkB1cVVANGk8fjE6TGUiMUNlXllVOjd6V2Q0OiYoV01FMDAiYDpAISF4ImBJTSEvZmBqYVE5V0dxfnRALFFpUzF2WTw/L0kuWUkrIjgiR1tgaTYiNEI9eGJDNFNDPSF4WzpNR0h8ckg1Q3p9TEAyNlk/KmVFd2I2eSg/ejE1a249P25hWlJbWWYsbFVsOjAwbTJrYHE/elBWSj4veTZ+''@;'; put 'put ''enpxZD1gdkAxMn57PTcxOypGPmEhWCRpKGdGPz5JXTU2KkB7YHhjSWtNc09sYCovNW5wOT9WK0lRcV0jIj9ZaGw2JFhYYSY4VDpfL35KeHV8U2JVMkU6Mmh1QDZCPGFkIV1wVlgmUzVicl5JLnZobko/LHxWISJ9aXdNeUZ5cUo7QmVXP3FSMUJvQ0MhZDgoUSo8a3dXNEY3PmBDaHUjO2wuU1Vr''@;'; put 'put ''Kl1QWGImOldGdm5GVm9pWC5beXZtPWJUOS99Yn1qWUBZQTNKaF1EVVQscHcoYDpWcXtDbmZ8UnRdV1hXdDtDZ0B8UW5BLjpeQytyXWk2bVZHSmJ+JkI/SGlAPlBDTV9ePCFNXmtLfSpyazxeJVUyQncuME1rZys/azVlbzVuJCE/SjU9LDxhdUsvK1o6NipLMlBHQGg8IS94a2F0VUBmVV9bU2FH''@;'; put 'put ''TmI/YWRGbG5oPFhwKCI4fj56YjMubkozeGAhPlEvenRTd35BVk9KTjFPUThhOXJIMkR4I09XdmElak9fNnJoWlowPiFSLGBFKGZTUDxfJj1ucGBwaGw4MlVjLy5NOURNQWoka1pARFQuQm4yaG16WTQ4RWxJTXlaLDJ+UW9lTlVePzQ6X0V0Sn5rZCxucy4oaGh9U1tfWiJ1bTIhalRMYjoiTWM4''@;'; put 'put ''YkVvTXkoTmlkbThtMiEvJXJMSzNUd1grSUk8d15yMGVacWdaUV5sfGAyZnZpSVRUSFR5Y01BaWF9SkI2ODBSbl1uT05hZUxbbElhcUhAaGExNlhGMmxCNGprb0QzcGBeYi4uS3dCZWwsaiF1byEmQmFYNSRTPm4ySjNMU0g1Z2o3I2E8byJOfjNyLGxLT1B8IzhNQlVmTFVkPHNvVT9tRD0vPCFU''@;'; put 'put ''RnNVLHo3ZzcmeloleUx+K0owRVVjPFBnbFJHR3IjX0NJVyxKPWNXKixkMF9AdWkyR0N8RWI7MW8uQnAjez5mWTdlOHFnRTJIalJVMDcwcX0+c014NnVTWGtDKGJTT343SCFUKGB0THMqPWcpMTN2YXBseWsiNnUlPVhCdDQlTmJXUUxDclRPPjVvcyM7aDFbbiM4RG9PI300VnQ+bmA+XXEzSUAq''@;'; put 'put ''ZE4xOCNJMD9XSkRsa01jPE5PbkA2T1A4KzNpIyJXRWp4Y2dyVFY8ezUrYVZIWCxJa0R9X0RLNVBiPGI1W3IiMFEsQnJUPCZQLC9VYDA1KCF6Qz5TMjdiVi8jcFpZeHAiOyR1fT1kRDtecyNNOFAwYnUlMSZgVGImbE9KPUluaD5NeWgmOlhTcmJdZXl1Xmtob0tWXVtRQiFvfEoqWjg9ZmNlTTs5''@;'; put 'put ''cyp8VT9PYiEvNEtvW0ZGV3NWJGcmUitSbElJblk6TztbcTdQX0BYfXtKOiZpaX0vcVAmUj5wal1xQj9FUylbQ0h8bChmKVVlRHVgTkJNZ3k7ISN3KGZ1fHIrenY8THs2fiU+KHFzQXMvW3w/RVpbZEA0SX1zdlU/IyFheVp9PlBBd0IxZUFMZWRtcSY1bGxeNlhgWDUzZXpgdUtPWFJDQlJ0Si57''@;'; put 'put ''PklNUCxCez9eU3Z4XmU3VzdAb1Y5WjN8aEhnUGB8a2RoZXpzcG1GblpvL1toQzxQZX1janl8JWZJPGU8L1kqXmBWVzJsVC9LaXVZNjJpUH1qeVQiY0J3RTovT1VZUi9VUWNXTnxUTj46K3UyNzxgQFRAaGgqMDkyNT1WMU9zbUtDNksve0dRc0M2LzQ9WE97L2BvX2F4RXB+LkUiQHc+NTxbckJ5''@;'; put 'put ''SVtXJTdJLlVeOHlZUyZaYiliJEJDellScldUIy59aFh2JDhuXmljJTxFdVdTdVV0bnBmcEcsXzJOMkpZTWVxaTtPb1ouZDIucVhISDAlfENTVnV4NSM/QnJTeExsfFEzN3UhRGQ4a0t8SkdUT0lrKCE3QXE3PUJmaElaLCglJCNmOGRrcXshV1VoSXAoMWt4Zisvc1hSVnErPj9YI09bdlVHOWNi''@;'; put 'put ''TV5BIWpqeDd9OGhEYiRtS3RHJUZediVEKGo7S1AvekkwMSh3ZTY/XkJhYThfLygiTXwyczh0MX1sdHxTbzkvTCFUSmk6NypBXXIycVVyIyYrPi8hYz1nVF1JPCN+JClAIWU5P2ooNzwxfXhPSnlWZUAiIyZSNThXLnkxOCVOd1FPTyZQMjU9RzJKYmY0LEFdY3tORTsuei4+Syxwb35MIWo1P0hY''@;'; put 'put ''JW86JSZBdHY0aCF1PH5MZHlyeC56NnZ5ZH1wZ31lakdKTEJXcG9+RmJ0THRgOjIiOCpjcSlDMTl3MDNwMkg9V1koOEtMOTs5O3pBTCNCS29DMX1lVFYsLFdJN3t4MCsuL3Eqc2E3V3BhaWpWVFsseURYMjNuZ3Y6YEFaVV8mRyx3RVB8bTV8anl4RiNafEJFeCZTZVs8JEJWa2NZfFQ0RE9KN0tI''@;'; put 'put ''WEJrJjExdnZNJEkhT01Ed2pWSW4jQD5kOnc3b01Gaz0xYF0rbD5DIXVkOnA4Jk5sMTZqekZ8eHtXSkVXJVgzKG5Xeyg9fEM+UWlTXTVRX3lebnYjVnFKSGo/QHtbd2lWPEx5b2ZIYUMwJWFVQzQ4MyFRK18ufmopXnM5LnZtI3N0PGJ7aX5QKz82dzN5OGFhL30qYE5nNnJEfCkkTWxLZixoNzJD''@;'; put 'put ''JShdRTJuN2lGTU5zR1pHcXBZOHNnNEpIOVYjflZKIVgmIzNmd1NzcntvKztFa30qS3tVZy5xIUpxUXI9W0p2S0spZ3sqLnRPRjF2cTJPcUVsYURDIl5RNVBEVFooUFU4UmNSNEpdP2J3cXZCI3RUTyJKdHo3Lz1pPlBZUF1TZiMoej55WztlPzR3cS5OWmE0Nz42K29UMjd0KUpjPi5yVXBEKzJM''@;'; put 'put ''dz9HekkpWllwPiNuJiwmOEYkdV12bC5MZDBwSTViTjMyaTtpYHJadHhGZFN3Yz4mPj5iemc8W21GUCNsJWthei5tZDVbfXdnImY2dyFuNlJ3IU9pemdoS3liMFdhM119R2khR0BzdT9qLnl0P3hqbTBpLnJnNFBTUnhEYGFCZWx6Q0J1bitZeVc2Wl1xR0JUWjh7PWxuL30uQ0hrb0o+REMjO1hu''@;'; put 'put ''TEUzcjJpdEovVipDKjZrOjJENEllT0MhSThZdjFiUjpuNG5RI3MxVj1IJSUjWjBkPF17Y1NkTVtEIktBRVlwUD9tdT9tXzBre2c+VDQqZ2soSDB3UDd1ZShTLi5xX14uM3g4L25KWVJAWitFQGYhVFlCPEVFSW1leUhZLGM3MDxbenhmJnNie3NMYFpDbDB0IUR8OC9QIkZQPmEvN2I/bSFbYEVG''@;'; put 'put ''V05NOUpyTWNZPDBRSkNrdSJGdCNmQn1ARyZBTHxiIT5NO1klW3dCXzlWX2YxZEheSGdVWXBadVVHND9KNi5nQTBwTERkLkxhSi90ME5paSFIV1dMYH57NzEsbDM2KXVReXI3MWRQJChqNDs6WUwlYWw9dFFLbEx2OC9TK3lXJElDNHYiUy9rekBCIUpCSFdPTiNrViYscU5DcUx5JFo6MDFbMkUh''@;'; put 'put ''dmNoSnFHRl0hL2xQYj49LHMheFBHT0oiPy5GL0F6c19RSl8jal1qaUFNdix0flg3fHA1dzVXXSp0N1g4RSZtIWglNkN8TEZ2QWAzeXpkcTxydG5ifH1xVHJpVFNWfHhyaFVVMEsrbEhtQzp+QyFFYUFDQVdHPHJTNlp6TlJ6QiVGSyIyaXcvX35TRnV6cVJiMiUrISIrRih0MiRlLyNpJSU1WCta''@;'; put 'put ''OTxOL2wsSF1Ja2dXJDdRVSRnakcqUWImNVBGb3QxMk1qXk1gMD1iWjsmTDU9I1skMF9GO19UZT1+Tn1qcC49YnkrYyklc0liRD0vS3V7S1l0YTk+TklGMFIob0Y+a3p2eltuYFJWYkQofXVlbkBSRyxRKlJrTSZZI2tUNVohX3g4JSU8LE08ZmswREtbVCl2QUIoPD4vI0kzKFZPbHlfTiMhQi9Q''@;'; put 'put ''U2QhLmZZfWJ5Ym1CMnpufH0rNHN3TH1wRjxaPVtWM1tkdVhgQHU6KFlRTDQ0YS5nfDg5SG07RX09ejJCT2JVOn5IY0VqaWZ0VnNqV0VLUUtIZ1JAXUV0d19sc2E2P0t9YFN0enJmP2tLSztnK1NPI1E5U1tFMWBnMTYuMHwzeDFHblJVUStCcHsrTGhdZTdQVl0rR1tTJklHKFc5aUB6WGV1dmVT''@;'; put 'put ''UHd0QGsySHFTfTB9KkMsa1IjQyUjdD4sU0FvMmFGWzR+Wkk4aDdaWksubXt2bmlLbzBdXlR2RE8pKyssWjtda0J0L0h6T2NCL2VSNlthWyQ/JHJAPzBjT082a2IuIz8+PS82cnF9OmdqMmxHdl5JTGR3K2Z6R1ZWT0pgekVPY1ZDZW9OLkdEUz1GRCNEND54W1QjZ2tUKlY6UDFTW3RYI2NseHI/''@;'; put 'put ''JG9sVj4yU0dfcWU5XUZXak1QTylaSGB6ekxsajk/IiliTjUoUm92WWFINj9EW0ViUWZgNzwwfm5xWVtXRCltaigqeltoeG5CP14uU1FTQStUMmhuXls1Jm0kaUpPUTpaeUR2V2IscHk9KWlmT0x6Wl8kKUNqNThSZWlxRExScTdhUyZfTERCYDJzfWhnTy92VlF3YyYwNzI+QiMhJCZDInJJbGQ7''@;'; put 'put ''KzBgQ3RRNjN8K2Z8PXJDXkc2JWZ8KilJcl8/IVN8b1QvXmlRcEpbUUtKdmBzeDQwRkIyRW5EUUx0Sk84VDpKbXlPd2d2SGNpRSEmdWhUNmM8Y2hnVlpda1c5eDxsVEZ0T3AhJCtqMFF5YjlEPl9sPDo4U0xVV2EjLjJEeWQwQ1BnYEZYLnVaMn49Sj9aQXZ9L0xwSHpRXUtbfiZHRUJUVll9dz5Z''@;'; put 'put ''eSV8WEBOW0ZsKTQwdXZnaTRfLHkmdD5TPj8lNnVMUkBoeSRGS2Z0NzNFUUIjTC96VUpJPnIyUVBxOX5NWW1zaEFIPEJDW05GcC4mNHZMYldmVSxhO2ZZQUkqbFhyQyJmVEFIaShOSSlITlFbRGRHMnpwNEJfOFZpXkcrZkdtVm9kWncsZStFRjNsYSpwJi51e2RfMGxYVmBQfWE+eHZwOGMiQ29p''@;'; put 'put ''WT8wWFIuLCNeXTU3dWhWbWY3ZEc7allKb1IsNTl2THYhMiteLDpLUmV9c0A3VDFAXmU4RDhdbEVnanl6Zj1MfCp8e3RzIWkvbCVDM2ZLPCJxVC8sb3g1SzMqOiMuJWJveHI+LkEqeFo8OTAjJExpYThPT0o0b0c/W0I9OEhKVmNYQV9tZj02dWJUazg2TUAvQ3wrbChhLj5KTio9N1gmKXptbDFb''@;'; put 'put ''blYmUGI1M3l4Skc8JE1da1l2aSZmT3A3LkdYOyVLTWd0MChieUBqZGhSfm1Dajx7O34pXjhOeG1PX2ZHMzwzS1YuRVVZMVhIXUxgVVQmTzE+MURRb140cEApOUVRR0UlXix5JHR5VU0hd1ddU0hxP3NDQX5NUDI/YWw6PXxNUTEkOE1RTThneTpxKktuQDA7UE4pck5Kb3l1cStyRzQ4bHUjPElM''@;'; put 'put ''Wj1mT2tJW3hZdWVOMFdTL10kL2ZkJXQzan5GcWczcmEkYCtdc0NsQ3xRLlowLj1OaSVaY2Y9byY7Xj02Sit1S3I1SjljZ1R5dDQ8JC9kI1BKaEdpTGU5Q1g1Qz9lWnNCOitIKStxc1BGWVJsRVRWezAvS1l8aDomY0h1Ujp3aW5XVk5ZcklnbDAjR209MyFuQFZmRER0TTkwU1Y7dVpqZVd5OWB1''@;'; put 'put ''aTd8VXtDe35FKE5BOXc4ZkRNWDQlJFEyb3xCIUNufDEsZFc7JTAvPGcjTkx3PEA7Oyw6WHA+P3MiX3VlTUpvPltxcHQ+Yik8VjI0YCtzNSlSQ1lRODBNfGQ2RFB1WT1Xc2FWdDhmaSlVejRSVSZxZEg5bit7Ol4peiFqbUQ2V142fHNNO3NWOiN1SnJSYXIve35jfn5HcXB5TjgsdHFPI0t2ZU0r''@;'; put 'put ''ZnguX01oLk1faUl7ckMlJG4odTdoJShJN3laejtUe10qKndHRyheMyI8cClRUz44Qn1lLjBPPE9ifnE+MmVTdG1QWnpQSVN3WX09JGMsbmEpanx6e1JmdXFOcyNQaFBCdC5kKyNILC5Mdy9XKU9fZzJ0RX5JX1ElKEZXZ2hUMzgud21kOjxTcngsRkkxRjFPZGkyJk0mSnZbam4qM1hIIlA1ZEY1''@;'; put 'put ''TUsyelM/IUJFbUN6SCpHbyRCbzR0SW5RJjw0W3xlZGYiZXVUTGxdN0JEVEgiPVVQcWUod3FJcVNIVnpLPitIMUx5Q25ZO1BsOU1nSDFzWzkobF45L3x7eE9aUVBSd0E8UyZDNjdHcUJSQ2pWNXEza3ZLWzc2PiV9ckZTLFQ/NS95UlJhbyRVdEVSL2gkKCIsOWI8Yz5VYltPayllUiExWl5qPmlA''@;'; put 'put ''MDNQbjNlYH59JEUlPUJ7M2xFfmV5OGptVDZKRXYxNWRZSTUmbW1baGJfJjtbNSlPWFVYeGZIYERsXjkhL2FRYVFGQmozLGtNQHFgdkdtZnU5K3tfeH1jV2BqZGFQMEkiXVo6Y0tsPHs5dWFVeUwkblIwVXVsaG1YPUBeL1JOd3RVUkd+aFRZPzh8SEFqQElPMWdwMWxhJkc2I0ckR3klb1JhJV8s''@;'; put 'put ''bD55LHFdd0AvTGgsTCFjXXlXekJrTnpXZFE6R31kNj1rdlU9YENvVyU1dTpsPFhZZkp4NGhldFt9cThCKHYmeXQ8bigjbXIiV08qUWlfX3gzNiRFfiR4bF9qeVM5cGg5RylAbT5SX1IxejFtOWRrM3tVOngzTF1sd00pMilhJkBWR1c9KSR8P1JKTDBgaTh0YltSdUJ+TiskZ3FPJHVCKHpYMVpL''@;'; put 'put ''UC82S0VqekAqV0olRj8wRDksZE58RkpCTCVsWUU/NHtrY25SbFg1X2ZIPV9EWHcvb3I0MUgzc3t2ckthd2woQC4rTUl3RDRHbCNncStHeCR9WUpZVlVsfnwsMyReQjVndWEyKXhYe0hjbGd4JHBtODdWK0sjZ219W1skPmxyZmxjSylKV0xER21MSWBVa1FoPTs2ekRpfm5SOll1a0k4RVRwVGNR''@;'; put 'put ''XjZjZFt4LlNxOilQbEFdJX15ISpCKW1uOSUsfTJLPigvQi9gViZ7VEhUJl14YndVKzMvXX40Nk5PPmhPLFVEWSUqKzU3ayhqaEUxVEtpOnUkYyJoPTlydltwaVpATzspJX1yPXtMXyZ8TDVlKHcvbyNfcD07WihSR1IvdXpTIVN9a1N7d2UuKjo0VTBDZDouOllGLDQsTE9SdWBFWUNmRDFnRFF5''@;'; put 'put ''e25CeCo9QEpEO2l+Ql42cW5bT3pDSXVYRFZUdiRVW1k7PnNpfndMMXlUfEJwbHRMfD89MnNnanc8eE88Pn47TUw1dEUiSnBKNEIpezp2YnNuZFFYeTN+LkleeEw0NzUxe1M1QiVbRCoqMVckTCI0PVAyfkFXKjAuPkNFbj18NGBMWW1LZStxaitRPlpVUS8wbW1WWS84YGdDITRaRT5oREdUU3gm''@;'; put 'put ''PT97Q2g0WV8rJDlfZWlwaWh8LFFVcTtlYEV7KTVZey8iS2chO3dTMX1vJEFmVnc6PEA8a3YsQkBySDkrSmEud292ezsqJGNbOiN5MHZlU3lWXzImN1ZkPis+V0tOeVlURGV9JWtAWjV0QiROcVFjZyJ5Z0RWUTw3Z0tyWVBCaXZUXmZATz0pejN3LjxteW0wcVdVbHEhJmNtaF8xY25pWHZjcipR''@;'; put 'put ''TS97VzZpdng+LnhHcn1TLCE/KSRFWSg9RFdIIn5DRHtPV1MqUTlseEkoLGkuTFg7ImZ0bT9nPlNEZChjSTY6NCxkJCRYVFEpITVkRCVLYnVqVlh4VXc6Wl1CPipAJlo2TVZdYmswRzxgfmNhZ0AhYmwlWWw4ejNmIzhsJWV5ZD49L012dUVFbHlxNHp0PkB+XVFKZXc3YGclW3p8biJUP1Z+eiVO''@;'; put 'put ''XlFtfGp2V3srQDF6cFc6SDIrfHxgQGpSYXY6MDM1SmRONnMxWjkke2BlKy9QZkxRdi9GNT5ANXUkVEBkLC5ANUt8dzksJS4uO0swPnJpeDddIyJxZy5BLGwqRHxgMnZ4ZSsoZmMpWzJbJkt3Y3tRIl9FbD5aWjc5cDxFWE1taHhAWlMkfkVARiVsTXYhUSo7L2JZcWFiT2M5NkdHNUt6SHFPeT5S''@;'; put 'put ''WUFqXWtyMTFCM0YmXnJ0IlkzK3t1b3FLZ3tCNlBRe3hTVig7e1FIO1JWb3ZXc0cyTH50Kzg7dlU8dSluYUVtYkYmSXp0fkpfYGtNP29vQi9wMVJPdWhENGJMSkxEMXFyP1lDKl5ML3o8XUVUMzlrKSF0Uz0kJkM3Wkp8PTFTKS9sTG0pSUVVezJIeCI/Qzh0SVslRSlNVHQkbyZHfmVJcGZzT25Y''@;'; put 'put ''Ujg7V0JyejkyP2VAKFkxenhCaDg3YWM6Yk8mSHBCMSxRbiR9YlpHcXlGUWNmJTtYWE1uKC9pP3dNPlNtW0tzM2cmJCpge1lNfl1PVjdNbkp9WEd8Pig5L0lySERjaSo7NURLTmk0Mm5iKENeM2hjM146V1peOXdjVlVEY1ZjKlFvTnokJnRqMC9OPHpQclVBNU9QanI6fkZ1YmRqfGUyQX4/Tkpb''@;'; put 'put ''bUFePTRHey9ja292JSMrWmRKfGMuX01Zeyl6cCYjQU97XX5WRWQ+InhAOFkqcz44d29Ia1ZAXVpZR204Vj5QaGI2Kz08ZmtzY2Y8PW8uPWd3cEJhMllIPDZrRS9QL3BEPSN1Tk9UQXB+a0slNjNARWc4cSNFSWUramhfcjpgUCM3XmkvQCFQaiFWNj8yU117dGZUIUU/UU4hK19CdDVOcV1zM1pB''@;'; put 'put ''KilKWSo1QVl3WXl6cy9YNzk7N2tvJXh3alFoaUdDdkNJKVhgcmpPRnNeWl11K154dWcxaW94ezJPRFh1czJhd3hbI29ZSlJ1WUQhVGpKZT9zVHlFNz5FLGMwaGNALFBgSXNdVFZJRjU3X1ovZWBdcjN2OlEkaU0/NENEOzchLzBbanNXTVFeVTQ7W0h2KT90NyV1WGo+c2ZLcXJEOE9YdE1lJjE8''@;'; put 'put ''MTFMUDcpVFEyJFVhKW9iVWF1NUg0ZiEvfT5hfHkyQngpSDw1W3whVUlSb31mSCIvYmlPREpvZ2lNS2BFXyJARGJ5aD5jQmYxUi9fTHE5MCJ2P3c0V2dYXnhvO0UoITJTQkw/ejZ9SzozS0xXN1ZUcmVbdD9mLnIvRVF5RFI/TktdISJaI1VmfjkjKWtyNiZRZkRVOGpnYWoySjdzYUlrfHojNUgo''@;'; put 'put ''e2gsb15ySEJva0o8PiNndTtnIW4rP24xXUs2NSxwO3J8RDAid3FaJEQyVkchUXdzfVRqdDwoQ0U0am1LUEFPQz4xMGheR0VuYG1zNFguN0t8RW14WTx5UGpeTEQ7L3I4RjxaJTpATyFLVWxOP0Y3N20rM149S3p3QyxVcS8hMjF8X1cwTjFKZGNXYE59XmQ4M3g5TUtzRy9vPiNrd1VhL15EYGle''@;'; put 'put ''ZnovN0JoIjdDZD4vcnI5dEJpOi4lYDY4TGw4KEUpXnEveGkyYU5mQjdzYV9bR3guOGUqSXNDJCQsQSQuUzk8eGxSLjJuQERwMihlWyYiSCk4QmwrUGA5QmlHZXZfRlRgJWMjeVtlSytCbDZHdiRjSnBCR1h6PmpEZFAoVSwkd2NSdXxebC9SZXhzMS5NVD9jM1AzVnE1eEFGcSxqJjokVCQ4JSVx''@;'; put 'put ''OTAlZHZ1MiZEWXRrSn1DflNobCVZVWFgKjc8Y2x4WldfWDYobkdTW0EsPFVKK3A/PllrPGpPWilrdEppb0kycm1XLExkO0sicTNleF9oOjE7K25DTVk6YmR4OyklUUpeenpQS3JbZSUyKiNUQ2tvbC5ESVh8KlBqYisxKi5YU0gxXlQ6OS5MTWhKJHojLF56ISRGZ0JEQzpQKlV1NStSYHkrITE6''@;'; put 'put ''ZUtHUV9tKWsuJWU3NHttZCVLYk5mLjs5ezt1YWQrUXIpbDJQKlQra1ZMWixQY14oQml4WltvclIoKW5IWSt6fl9FYD12ckVkY1RjRThsdzNPQGxfaFR3RXNEXks8WCltaHorR3xuTUwxRVN3bWhZSTtOQjZPKyg/OlJ4OHlPen1QZy55UlhdV3BzXVtDdmRRNiFLVzNDUjNCWjRKX3hSYTYiaFRd''@;'; put 'put ''dGxgOEVYaVk+SHBKc180UlY4eVhhe2MjPzYsRVZKSUF5aSRmJFUwOT9OKE1NL2Boek9BSC9zXmhUMXNVYV8lQTN0Ul91L2I0U3kxa0FtT10zaDwwMCRVRUU5KUlKQS92IlcxXV9eQC9VJW9wXVdnYHQye21kUEc8U3Y6ZihKa1pneDJnU1Y6OSEpOmlaSWZtfjRgXTdBe206XV83ImkxTDA3L3Yz''@;'; put 'put ''akxuIl0uVD0mQngxKyY0KyJhZT5UYGIqOnxGI1EwP2MhY11lUzNEWHtALGZ3Tlg4Rmg5KzFJejc6dVdSKHYxbTNIT0hsJGp9KXdpRTgyI29BTSU0ZnRuSkZ3ek1gQ35GSWlMTiIwdVhSOUIvIyZEVWMhRUBLRHovQ2MyMW59b1clPW5BZXhpQjpYUlRFais6Mkg+bnIpdXxyVE1OUCZvOytVWXZF''@;'; put 'put ''VklsOXU6Ri4uNFlhK2QmcjFISHpZNiNnRl9xVipMQVVnbWpOSjhvM1svT3RHI2JlaE5kL2QubEx4Ti5Ya0U2LkMrSDwvdXtOOFcpXmg+MX0/Nl9bfWUsSlhrdDNefX1JMjwqeFZQJUxXUV19V0ZSdWBiJUpsME0ma1ZpWDtoJFohLzl8QFU2MXtXNXZiW2ppTktQSlBmTjljeSRTTVNITEQ5eEEp''@;'; put 'put ''QnRPT3M2RyJCNCk9RjRheWllPjxnXigueUdFVTdqQDVvdihLL35fLD1rfURFVEJUfkY4e0Z+eExSazR2ZWpANjNPQzJYbX1YUVZ8RyxVP0trbDNPSik8JmdvQzU7S0JqJlBXK3lDcjY6aGY2dTRGI01sXiRrUCRaN01kRj1ufmNmWHEsJEE8VSFgPTV2SnoyTHVOXUkkbW9xQmREbjNifVA6fGxI''@;'; put 'put ''Syo4UTtrNyxGaG4idVVhM309MmFSYCQ6fHYoaTYqWiRgJExfTjJRWUszals7JXNtVjNOP1Nfb1JTeTFYLjhgQDdKWSlgcGV9WHBXQ09yfGxuMXR0ZD8vUyFGen44Q0xIWzsifj5zfHd4fVk8SiNfTl5VeXFGM3UjbygxKD4qVnomRmVhRmh3W3hAXVVmbl5pVWs/cVl2VHxBVDRUXXRuQilieSZG''@;'; put 'put ''RDIzaTYrYEtOW0RrfjBYWjE4UDgyc2R7bnViYiloUDo9YWlUSj5wI0h8SEImbHJsLmY8fio6XmNbRyM2I2dQWSRNd3RhXnZdLmQ4cUUoSGdUVjlpNlpUfnJoeEhpYUp0QEFURHJKQTVyJTRUPkpRcl42WiM3Mk4pQjJ1OikrPXExazg+KnguQDpdPHdoaHQob2BvfnRYTCozPStRPHhVb2FnW3p+''@;'; put 'put ''fjMkMEpgeFN1M0l4Ijc3fC5gTj5+QHhxcGkhfnEzLjl7ST9fQXZuN048V0ZRQGI1V09kUkE2VWc7TmkqdGd0c0s0YXkmezE+RG15OVlYQTVeKUx0SXl9Lz1yNVt1M3heTG5AMWZpLzpXVD1+LmR5dnh3Oigvej5eOFRlMWNGW2xqQ0M0SlNybGNHJEY4cHghR3dDRSMiT0RMN2s+ZmNtVXQoaGE4''@;'; put 'put ''WzlCUCUveiprPzouLldWJX03ZEBUYmApOVJZfHlFPjdjKFhxd0V5SipFPFA1S2lSRDo1Skl7OiQuY1AkZllbVFVFSztYPUY7JWEhXU9rVXF0dmJwOW5+Vnk7MiQ2NFFZajN1NHN9PjxmfWJbSjxkdEUqY1gkRXtAQFA5dzUmIiFSZ1NOMktpUWp8cV8sakJQTHN7OlkyPVVbdSpeeV44MjJuIjE8''@;'; put 'put ''R0l2MGE8TGBxbEFDRjc3ez59LjQkR2JrREtdQ2cySzpLM147LnZ2L2tnMl44PD91XlEwUTZTOjVvUl5BPGd7SU8zcmY7W0QkL2EsbVVpNVMiQSRwZHQ5KjU5KmpFPjBdQjlsMnA3X3p3I1ROU3REJHpGM2I/RGQmY0pAdmJLQWhSTUgjMHNHa3VUTlJJaGl1JGR5PVJAZlI1WnUldSh1RHVoJF5k''@;'; put 'put ''c2wlam55dz0mZ019emR2L1tUKVYuOV01Z119Mm54Pz1oPTEmOTtAWS9lNSpgOVkjZFZgaTFoMkJwUVVvSmlwP1QzcCN2eD92NjRvYG0lbCJDQHZ9d3QrM3tEXShIUSM2NlAvbkR+S3p3Ol5lNVQxekJzVFtyeyQ2dU5xJTJ+Nj5XJnFlTDdjNUVLVUdnRTAjKnRGPT1pMmY7OF9zOT1vdmBZc2wm''@;'; put 'put ''V0ooZERGQWU8LzZ9UWU0b2BkbTppdDY0SXxzPGchKWBqTWQjMjpaRWNgYmlJeUxJSlshZjdtJTc0UWVvX01MO0oibEpjLl5hSjNmRWMyeEVwcCJgaml3LipWUSt0aGpSV2hOWShZaVlZK21jZzA9PiN0fF1iU2Q8PFJvfWB5dlFLY0lWcXwjTEJ4blpEY1AqW1t2ZDcoUDt2YFt6JHY2W0BhU3Ix''@;'; put 'put ''NDFZdzpJVlRNbnQ5fE5WbHg5XWcyV1k5L3U7b3daSFgyfUpXXkxHZzFmNmsyYm0lfSZPWmFKfVNxYExQUk9FPTgse0J+OlcvY0ErbUY5cUg0IVlyeFtrSlJxZkVCRmZ2RiEjSzpoVmVvMjAoYHZZZF5yXz1HUitIZX1iU3YjX3x3MX00XmJrPltBflZsNXYkO2h7fTxiV25aRTdoRS5bTGZiQUxn''@;'; put 'put ''a0I1flosTyFweUoyfjAwb1ZZQ2NxREBxISYwWko/UUV7TWZmQjN0P2R7KmlUMThuXyVnUjMpJD9uNTFFaT9VK3V0NGw6fE9KMzAwZXcmTmVRWnAkdDUwOmt7ITA1LylIITc2c3kmVC4xP2JNY3VMT2JlSFJdJHs7LD16YiRPaVtkRU00X1VzPyNgfj4zNyxpXVRgW1R4Vz83RmZYWjFVSSQxWUxx''@;'; put 'put ''Q3dzU1ltM0U0a15SPXNVPzx7Rz9VWTdnJCg0ZzJLR1U5VF5vfXtSbXYvWlhRczdkMmlfc2lCOl1adld0YD1sInJgKkxmRV53O1RETndwfGhLRCFPc1cmVnVKSCExOVA8OzFCbyNIVXU9bUAmNT9AayVZOUJ2UEtDNGskRjtnTktZRWAyKTpgYXduKmw4TVNSSyNkXlI/bENoVDMuVEo7fmY6QEd+''@;'; put 'put ''KHVdLyEocjtfKzhsaUh9W1kwNSk5MSFLbUllPnVYbUs7YWRYNzJKVkIqWCRvIUlycSVRWHR0SStTI1Y5S0MwfV19TTpYTihfQmtvOT49THdJMC5vPmU5N3crcD1VJFNkKzNFRXV1MCtdOV1SRE15dmU0ald6S09rakc0P0EsenY7MSUvdSIyVjxWfSt8c21UcDBuNHt5RltOd1ZsYVchTzs/TUBi''@;'; put 'put ''YCFhdTxjWSNHISNqfXFAaUJsdDFQPHRDJkt1aWdCbHpoX2VbdztLZzw1TlUvakA3LGBhfUR1T105OlFgTEp3eTR0S2o4dDhWQj5pbERnOU4/aGlxYldqNnJAKiRNVSpAIixJSShNZ0w+ISpbWnFsWzlwI0dtZjBfVzd5JH4iZS82SSRsQyo3IVhgaV40dEY6L1M7UXZAVTs0L2VtKng7QWdgVDN8''@;'; put 'put ''VmwpfDRXODlWLyRIR2t8TGliayl+SHEjbiZ3MWNaJn5CJXdJXjVwY2Q5X3t5bTFDaStfOlp2UTZANG5rZ2pySz09NyZKP1FKb3l9LEkpeGFvSSlydFNvV2VqWGtuZmVUP3UrTHV0ci9YSH5lUmV2cS9bfFd9bV1bY3pPYFZ0V3hmX3Q0cl1YK3NJQTZHbCJJbiE1SjldQCQjQUZsTzpwUnlAfChO''@;'; put 'put ''YE8iLCxAI0cuLlN5YGY7T1B7aStJMEVncFcqe096e0dPczt4W2VZeWpQNiFuSmljRF57OWJwSmJNbSw3QXlFRjdKdmUwOl9eJjxFYzBLLyl+RVZxOSxhQkk6aXM4UVZ9Jmw2SCVlWmw0dmozL0t7Q1V4Sjohc3JhY18rMDBvdW9GWlFYTDszSFNrWU1tSzJlZnVZYUVKX0FqP0MlbH1Rd0RubVYj''@;'; put 'put ''QThhT2wlR05LT2VDd1pAfnZlRzs4MHc4PkBZbW5EdnxpKDwqWUVrMlZ7Kjl3TEZLJWdkUzZ+VS9CZWVLWnhkX2ZAVSFGNWF9KlooQlE0Kj19QlhVc0wjP2srYXJdbjszfSJxeSs9dTI1RiFrYVpCaGp5TGg1TEFVcCFXKEsieihaXyE2SEZHfXF8VCgpJnxBOXl9dVtCcnNDSyowR2JhbHYqSWZ3''@;'; put 'put ''RjwjU05WcnE5UFJveSpMb3IzfF9EcSwjZyE+LCQpNklJP1RCKC8+NTIuaS5zOH1xLHVYe21tNj5OWTRBVyh1SE9WUGU1Imc0Y1dgO1dyQFZQNFJoYXJPPlBTRiw3Qnd6UHc2cV1UZV45NHcySz9EcWlRd0VxODR3fXlEdH4hZFg0LGdje3VnKWJDeTVtYjhIQCFbbW13LD06K3BtalJtNiNdPV9F''@;'; put 'put ''bFA6RWVqQDtpXltfbzlNU0hGV1k2djhJSFFZXV58K1c0ZWkuOD1qaX1sSmBmWHZZTVpuVHNhRH54anJ2c0M5Zzs2SHEiQ01CUX52ZXR0eThFLzhuSUJNQFg5Z2M8aUI0VTxyeEAxVWVkTX58RVg5Y3VjQCQpNTJHS1UidjxCeUUxRGJJS3RWWDxGVW9FXk5IMSlXNldGI1l+TCRhVjA1ZEk2TXlL''@;'; put 'put ''Wzc7aj5mQy96QSFrZEBRTWBzT05UcjJaVmhpOGhWakNuR3luUUJNbCVKMVpZfjJfbEBFQGhYPkI0R3MyZjoze2JHfUZMeDk2WWMkJXZneFAyWVtYJFNvN0paNG4hKDwxUWN+Z1E5fGo3cXFxQDImKEJYWkIqQTRVVDlnQDA7MnVDfEtjRTE2cTtkUmIxSiZlTSRZQVZYcjlucWhQQnEkQEwiOCxC''@;'; put 'put ''RjFETUBLbnl5dXRpMmdtQjUsWTJUSSpvdDdob2hjZlMxfi48QVQvQHhIN1pUbkVwJDosNWF1dF9qcFszTSNyRit5U3N0RTo5KU5dOHlBfCYuOnFYTixnLmlgME9jcXY4KT9XQy44UncudVRDdHpQdUt7L2kwR3hlMDZ5U2EvOWNKSnZGL3pfaj8sYCk4N3ljZCQ7JDldQUNQamJYcXpYMCx6Y1FZ''@;'; put 'put ''TzBET2g3IV5ISWF3UiIrTVI8T2wvS0Y+JWVeUGdYU31iUW4oeWNXP2N1Z2MqWGlTN2dTVylzaTc1SVBFRlsvWyN0cGl7RitzQzZSPFJyWGNFdmFOZTBZd24jQzVpMEFZbCtrdmUxUCJ3KlpZdXBkLHlQdF0yQioxLygrYThIPmBnK30uNz4pYHlJUiZNUHY6S0I2U3ROSVNmelEpdEtmX3xPcDVo''@;'; put 'put ''dTslZUB9YFVuK1d2W3BzQm4+TS5SbGA/LmdDRVJtSVh9azdTTUVrK2B2JEpxPVtJMnh+dTs2bk09dkxgMDJLajk+MkNwaDcoaWVaYElqelljPCVNYGBMQmtrNUlDbzZxK2shRExLL3lwUH11X1E4ZV04ckgjKTJhO3R8TmFIO3I8JW5JQVtufHZSX24yO2UpRzRVZHw/czRSfW5WOSoiPk5ZbXdX''@;'; put 'put ''ZF5fKy5JV014XnglYFZ3dEI8O1Q+YTdKU3syUHhLXz06N3V6OmdofFVLVFB6ems6e000QGAkNyE+WEE4YkQhd3FJWTZxMiVwaF8/QXokdUltZCg1Jj81TThZT3F2JUdiPk95KU9ybWY6NX1LIUA2emxtVE5FNTI/dHJSKiVSdm54dCNiNEw1UnFrSSFQK2xJc3c8MVheS0s7SUo/e2RGbFd8RCEw''@;'; put 'put ''UW0oKF5TcEhZak5yb2A+YU5ldVMkNGYuKWFaWFp2Zip3enZPI2lOQHdEKSszfU5nJXxyMUtReTgyPSNOPlhmT0dTNUYwM3BTNUIrXXE0ekB4R2F5ZltzJW0hOERTTFErSTVCJTdvfilafXAkdHVRSHsuUUpmeGY/NTpOT2BrbCg3Mil6cjxGblB2c3BEPk0kZz1ucXF3S19tQD5AX0JsWC5VWypv''@;'; put 'put ''YFo0Kiw8cG9CcSsmLHBbK2hecnpkUU1WSFkoQGdNaEE/ZmllOiRad0NUUDpYX3tfQ1QsKjk3MjN6Mmd9XUplO1sxaVBGfCE9eDJ3YTVFc2F7Ilh1SmRVVyUyJVUuO1R2NjQ/fWs1OG9fRkUoMTU4IyZdTTRVTGF+aHIxX159PEBoam1kb2lBUXQ4VEYrdlAzeXUzR2Usck5KaV1+JWYzXUUhJFM3''@;'; put 'put ''fXE9YSQmQWRfIVU2TH09S3hwQ0QoX3YhZihxK2ZyajgzIWRUcit9NVlUNUNmJkFgNi5AX3czbCRic0ByVHx7akx9MmdhMGE6SXR6TmNkcktISm48cns9PXBsbDlBaVZWOmVfTm9FezExUl58MEJBWjttbk4lLm9PTztlT1tzSGJ9V0BrT0tTSFtPaXtaO0ZIaWgmXl41QHJ8U3xtQVBOdiZqdylk''@;'; put 'put ''U0FTUjtbQDEzRWApaTwmajYvOjd5VGQmMy5seH1ieHshJDguY11QbS9bSkFwfUduLilXJm8ufHdxUzRNPm5CZnZeZzlDdiVBRSgzeUZkYFJGWT9EayUyLiNMU2NRSlJLTnBYUyN4O2FLR2g3NlFBe01xdmAoVj1jNXk/ZnVxYUBUQUlmPzAjJFI6ci4pMT87eDc7Q1pyKEpmX2QodFJyXmVFdzFq''@;'; put 'put ''WX0vclQzXS5+NC8wQlgiJmREazs6QlVxTDNPPE9wKkQkMGQjLjk1fmtJVjhsTWRaQEBifD1WWDBGOmk3WXlJRGtQTjtwNTNUdTVQTSwxJlNLZz5nP0V9OCFEaiZFak49L21aWUs3TyopcUdMUjFjJlczTVlXZXB4aWwlUm1KMnBsNUQqXyo5SCE2WnE4N3QkM2JFQXE+XzY9Y20iL3ZhJXJSMX01''@;'; put 'put ''SGx5XTBFeDx2X1VoVCVrRyE9aj9NSVRYTjFUIjZyRSI3MWsvJFtCSHVgIz93fGc4bTNFQmUlTGd0UTk0Qml9UzY7X0RMVilfJmNfWyhNRH46Qzw7NCFhPHpBWmgzKn1AOiZ2JFdVcCMxZHxLWnUvUFRwOi89VDRWSEdsQCF2MClYMyhmUTBOLlBTVThRJlZmMEp0Z0d0QWdAKHZdUy9tWWhrXzpO''@;'; put 'put ''Kyt3S2osakp0NTU0SkFqIiJJaWMpWyFsIypeaFdrVjg3PUlbditQakBYTzozdnZTQVR+SHl4KFklaFQ/RkVnTlM8cDd9ZmZJIX5CU2E2YCMhTUgpMlMqPm5+NFlVLy8mLjdtM2c8d0JXPDVQS05bLnQoK0NOYXk3fVJ6QGZPPVN5cXt9QUBgeUN7WzNGfGVLblh7UyJkKWZPPUNTT2paNiwpRyVp''@;'; put 'put ''KiptKzNDNSNMeVBxNVFjUE9EPnJyVkhYWX1yJjh4UkF4S29oTWFxNH4xZVZ9VEJYRTJabX5AIWIySSxANGBHTTNldT9FfXZebUh3ek1jT3dNKytYeW5wRE9mNTxfSF1aSiFbRCxuSytLcUdBIlNwdTFSYG5GckJvQ3FILDpUflFZdklHaUBTUSE3YjI0MUpYalpISmg9QipGMzdjbEg8Yn1VP0NJ''@;'; put 'put ''Rmk0SDZFYCtzJD4+O1IyTlEpL15VOT49MUduejtSL25aNUhhQyQiUGsuR0JZaXVnWyNqM3RJXyZCOmxQSVBpMk1QWk1raWIjXkddaX5QdzI2Ik10NmQraCJyRnB4ZEdeIltAby5XeUU2LklGLlMoW0tBbmdjb3FrS3NOZ3pVezxVSiVoWDBZW0pxIV9OV1dDcFhJKi9YeihoN0w7JEFRPTx5NEsx''@;'; put 'put ''XlIkJm5LSSIxXW87fE45QzV0SHRYSnRlRm5HJUhSSU92U3guV0dIIkI7JFM5NEpyTX4yeF9vYV82YVVvRXdwOGt9RDBCZnE6TEsrVWgzVWd0c3Ewd28yT2MjU01BTH5XRFAxdXhbcigqfWVXYyZITXsqb0hCMF9FPG1FSXROUSp3QUNzLHM0RkhjL2Y1LmJmLEswPlkieCtpcHlII3pSLkZ7bEww''@;'; put 'put ''NkVYZGJkLz8mQHJ6SG9Kd2gwdXI8WlFyIiM1d0tCZHhsMiltcktZMF40XT88UDJAcz9QWU4jYjVvXm52STp8diNTVVVjYj4lTHEwSHs1W3dRWyF8NDR4MkNgZXNnZ0xtMXAiNzJGWFVHJF4yTmUmSC5COHYkZEROSX4xSzZ3fmV0MTxWRE5KTGNQXXgvTCV5a2o8fWElTGBNfmxTayk/ZGI0IWFB''@;'; put 'put ''bntMPyQjUyohL1YyXmhMYz0jSDxndztbcltaV1Q3fk9qWGtUPn4vUj5+RCpjaHd5bTIvRjo2JSZNTylaLiExW3YwSCNMVGZ5c0dbYW1FLCFXQDZtfjlVfiomcHtebnVzZVlpTzplMn57LCVFemB5Klo6PnddZ2M4XmIpck9jZ3pkVHckJD5JbS9hRTZjcWF2T05ySUk9YkNZOEcxQldgOmAiRHV5''@;'; put 'put ''R0ojQ0xJcG4lYz5bYCY6RzI4PSFQKHwxZmgkW2wuN1plTFF9Rj14KHlKciVXVyY8Zzl0QzZSWVQsOFBSQVRxVksod0NMYTcpaFJTYHBpcT92PnVXOU1sRCledCxDWW5qNkUiPyMxcGJGbiFKcHt6SihiOkAoIj43Yy40d1t2T0pEcSxCL1FuTlE2MjJLbihdby42ZiZseTxBOCQoSWckJmY9LEdM''@;'; put 'put ''UnwmN1ZXSkBJN1d4JCVqVzphQGVeazUxUzs3LlUiQz4ldT9WKGwwJDFDSmxJbC5BOClnMD9JP1c6SUg+L3l4RjY8P1JjNSg/YzR4dDtnSF1iWyZ+UF1IO100dVl3JmxYbUtLbi9GQFViZjRIOFBATjVaclhLOkReZi88TCFoRF5hU3BfSl0xfkFZN35hWHJNYiYkW0MlZS83eUJoWG0hI3Q/dDZL''@;'; put 'put ''YHZdYilRcz87QEssUDJmbmFxa0pnbUBjYTRZenwrJDc7My4hSzNnMXQqfUl7MHpIU2QwMStvelIodlU5TlViLjk8PkRPU3Z0TD59JEFkI3tPUj1HSFEoIWpKRDlmcSg8flB3Rjd0dzh6ZURHWk5ZI2omX0lqT2ZXVyg0PXNjeVs3WzAvTW5LVjB8NHFWIytyY2RQW3RWT0s8UHI6dXB2RG9IRE0m''@;'; put 'put ''X1BDNWJQdUEjUGVKM3RsRkJKcDBYaDledFlmT0Q8R2EjUERXKHp0WlddUDhDNCpZI2VzWXBHblF6Xk1gdSVENFlddEY8bSpnPDxzckdXZUt5Tjc2cXBIPklbPnJQPm1mYCsjOjA+WmVXbzFzXTo/cUxgK0FkZVFVN2BEQTZ5XVNWUlIvIjl1Xz4hJkU4aXo/elIxMDQiekBIdHpsVT5NZnl7U3M8''@;'; put 'put ''bjYjN3BtYnZVYj4vdX0yWmVVRmAuekAkJS92SHNKdUp3S3lFdDVHcmgiNigjVHNgT1E9TVdnb11XYEN3S0t4OFNuamw0aHAqQUBkN3FVanJIXn1ne05pfn1ZT2RqTlVSSXBvWUdUOlN+bn5FS3EsXjxFXSV1T0ZzT2Q3XXwhLEhOVkdtLkhYaHRHIVBaSyNMJD0yPCVGVjVdaGxlQF85QTtDRTp+''@;'; put 'put ''SHFhJHlGQiw/PGpdVkBoRT9FdGBNSzhIV0ovcSp5IWpJdkZ1X1QrJDQ3OzFhS1IqaW5lITxAeHtNcV16R1ZPKUIpTVduJksrfWxyQWVWc1RoOzEjfH1qK3EiZk9mfUdzK00vfShHYz5CL2FQMF0oRTRLVEI/c11JWiZDSk9VI1hxcU1+fiUqI2JmR3E4MjUrbG5UdUJ9Szc5I0NfdDFbdk55ZHY7''@;'; put 'put ''JkgmdXhjY2JdMkUuez8pRVYzcVAhLygkPU8kVzJYQllyeUI+ajE3REVmWVlMYm00TmROXTtJeClTRD5xKEFqVCt0QigyL2pSVmczaE0xUCthYjNMUVMlI1MqIUNqOG8hWEQpTF9xVXc0TmU1LngrNTs+Wm5QUGhjRmwjMDZsVVojcjsldCNnRjxLNSsxWVs4N3xuV1dASzx7VTksL2okPUJXIVVu''@;'; put 'put ''XWZjVV9jSl5DaE13Z2gxL2pnRFIxMnMqMj92P3YsbXlmdEdYcmtYVURkb15RbiU6eUhMbEpRRUsoZlltSFsrVDZQOncyLy9KRyokNk9OXi9HSGBZVHxtR0lKU0VVUFtQQF1uW1NrSXR4MmFedk5dMGtTeGk9JkB4UkFGaSpfOGI5a0lxfU1nP0VTOFtEW31nQ0RXcm8/M3YjamRFZn5CbkxSMTg2''@;'; put 'put ''cVNCKUBYUnslUnhKSUd8U15jSz9iPEcwUjxJfXRKZTQyOFBDZT1PYTIyc2E0aWpycmQsVTsyMzRGaklCdlh3KThjKk40dGlOWFo+K2ApZCxPYyVHaDZbI3A7eSxlWn0vPjgpL0FVSD5mI2M0KENVLGVoYm5TK3RCMWkzLDQpYTI0UDhKSTNQeEtNJTVRUU00RD0ibDdfdWtZU1o1Q0tzey4jdzt8''@;'; put 'put ''RCozSnA/KXl1Ol92dSQzY1dUfGVqUiJ+aU1xOkwubiRqWDsyKVM5Y3dXLDAjTmI5QFZbNTNrREllNHJROzkzcDNKZk1HTjsvenJsfDB9UHpPezhNN1QuQ0g2c0V6OCtzMFRyI09EYFFXKDxjOWw6KmElZEJMZnFvPk1EQ2RJZzBFI2draDJSIml8QSpqc1F5dTEsdWN+eFNxRmAmMFpPOi9sa3t8''@;'; put 'put ''UkxtVFYxQzEzVEZleW5bISxCRDF4QG1MNF9fUDI1MjNxZzJ4WD9pUHllITNFVFFAayN2d24kKWNZcHZKfjJORmg3K3QmOG1YaXk3OUc0WShAOn5ufEUwPVJNdlZfWDVuMzAuWjRPQk4xTzNFUEJ7S041YW44MX5dZChfTGVPVCVgWn05dFBiIUosOHtTPVpgZXI5eDh3b35fQm1pIltmMyFNbiFm''@;'; put 'put ''JWtjfV1nc3k5ZTdXOio/cmI5Oyw/JURzeVFXQ0Z9d0Qua1hjc15oUzx+Mlo5KUtdUnx9XjB4MFlfczQkIW1Ua1FLe155TFsheGRwKSJpcn1waTMhQjg/Q3klaCs5YmJfbnpqNTdKWkYke2lqRktyYyReRUszJDB3b1ooMWw3UDImOjFbWUs5IUhSMiJOe1BVMmsuI2kzMlg/R0xFU1t4R1lPLHF9''@;'; put 'put ''VkN8ISxWYF9uMXx7XTJ8aCNCUWNvMn5oRmZSOUIhMnsvMGw8WiQ3cDpbZkVPZihOSDR4WmUhVCFKfF0hfmZiZURuQyxLW31pZlZRMFsocnA/OT8jeVVqPG1rPm4pWjxUTlo+Mnd5bWV2QjlVR3smeD0pZ2E/bWdvIkdbIUE7WW1VbjJQRzwwMzBvb1BxXUdWJWJ7d0YwJjAwNGdxanl9LyI1PUdO''@;'; put 'put ''QkNDTiksa2kqPSl1ZX5aaVI5QCIzJCNQRWVTRFpuZ1t8IiN3NjE6SHZkTThjJShnWiNIajNPSFdub1YsaV06KylrNSYwRF5dXTtEV21SfUhwcGU+ZWc4L3BLejlBRWV5JWVBfTQ1S2orSWthcj1lQGRxMWBVKS5hNU1RPyl9dT8pYkZjMCQwNXUyLC5QX2t1JEIkQzB4NTp2bzdSVElRfWs3RSwq''@;'; put 'put ''dEg7Rls0cGEvJiskLHR+fVBVXnd1cDVjI2ApKHk3aEdqKTVHdzdFPFd7Sj9NWTdvR3RNKDZEdGReMU92TFY+OFNVUVRrazlaVl1BVyQ7V19aU0c1MD46TTpneyNKSnhFP15AW11EeW8rd084WCRDbSluXzJ0ODFrdGRuKHBQc0BZMWdSZFdqZWdkTUlPYU45VVdLKFk6UmM7OHkwSE1kRlBSKXYi''@;'; put 'put ''flpCTGNoS0l7ZVo1WHteUFplKTEkYXVfc0Y8eGk9YnprOUVkanIyTUMxU3gwPVphfSRwfGh2RDM3emIlNyxdO0NJOGZpaUN5SWliZShSIzd+UTVAMXx6ZTUkSG07JlUrbj0iT3twPyY7SERkOCQxOHAxeXpsVyYhTFRtRHZJQ0RoITpLOlZYelhQRV9rLDFSWSprSVBtSyt6X1IsMjhTeS5LSC9j''@;'; put 'put ''QFMxOl1yM3I9KzNHN0I1I1pyejZhNDd+ez5ZZERscl4xNE17YHVOK1RGOGBbfjh3bDYhNDclfW10bmZSP2IhQn1gLH5YdHlUN2krcjkiVEVjdnI9SS9fTVRvUj8/IWwwX0RBaWY8WGArUyQpYlBQOyg2UGc1bF16Sk5QRkBDREc3YC8xYTh2Zz9DbmJ2SmAuRE0zd2g0Pz1dSnYiZzFBTFBuKEJ8''@;'; put 'put ''bls4clN+bCJRK1lZL1BMTFtvIWY0XU8/e21KWXtsbHdXdyUjekZRTVQsST07ZGtjOSw3YFpSVnt4Zn1xcDdIOE93Y2FdaXMvYSM6Lld2dHc3O0ZnSSRya3szYXI4MzdsSVsyWCxiWU9rcndbP1BsLnU6PUN3Pn4/RU8oaTVKPFphanJGZV1kPDcmVjd8QnFqQGssJHh4SGVUU1FTT0I1MzssLD16''@;'; put 'put ''ck5zMW5aOzd9V3JjW3pQMU8mQGtUal8hWjw4Z19ZbyZbeEAyZnpJKEFNcVBecH1KQDY4KklrZXI9Syl9YTgqOW0oK3FgdWg4T1BPaXhDcywwPEwhbTB4Uj0kLjlUQ25jL2I7VGdWOkJhcDl4UytNQVEkZDs6Zzc0fm51Uj8uZXBAM0hMfnZ+VCguIStGM0NwUWd0Ok4+VGZWMyUsPHdFdHBRR0Jo''@;'; put 'put ''Kn5XOHAlWCpNRDZkJS5CbFgqKyp2TEUpJSsjJERwT0J7L2pqVS9IO3hnQDA5RjE8RVtlLFd5WispNElDVm5TMUxZaT49bX48O0h6Kn1Qa3cke3JwdDw+WnVhT0dNeS41OkdCMllJIXY+KE5VdWREITV3TSpAdVhKeDA1IzEoaWYjOylkM041OilsNGspe1d0QiI4fn1ie3Z2Q30uIV9WQGdxampl''@;'; put 'put ''ckVEaHNDWEFYeV5vJXBLSClCNkZjSlplPGJJQlAsViE5X1c9OlMidX0iXkQsP0F1dExyKFkvVVQjUWk6KWpLZ0FaX0dpRnlVaCN0S2dhUUhHLk4ySWksTSpKV3s4RGlGRVV+dUtWVD5bc2opWj5BKUMqeVRnQ3omOllYdmxxdWJhWjFzZkNmTkZSXUpANEEqK3AsTW1qUlhHKXlkWXUuYCk2KV86''@;'; put 'put ''bz05aGllMldTS2ElOnl2PzEvWDl6IjlGZC4hM0ZpUkRwTHIrL2Q6X0J1NVtncU43dGZsc0hHaHJ+Kn5BRWxJdlc5XWx0fXZHRFImbGFFYylxWTM5bEx4WFtfcHJDQn5kP0gzc151QDh3e0NETTpES0RqKy5TPGw4TD9QIjJ9bXNqV2c/OSJNP0dhWF9ecn1aSHcsWFBaVD5Ma3F4VHF2ZVNheX5S''@;'; put 'put ''YHpRQilvZ2svdTMmPStJK3ZMXnAzIUUmeDIicTo5IX5NO2pYO043LGl8S1N3RkszaXl3WlBUb3B2dGVaQzV+W1s4M1ojUmJNYW58WlkhN0V3aWd6blI6SS8mRyN1c05sWEAxfTVCSyRkL3FNLiY9XlkjY2VbU1V0K0pxIWMhLCU+YjZzQTtyTmQhZDhzVSt6JEUlKzo8ZFokJX1deHdHT050cGtL''@;'; put 'put ''TF0jd3shRSxyRCxdK2tlRSlZUEdDUTsmYXZ2VkVzNXt0R0AuWFEwMXdoPjg5N0N7UFApSmFnYmk/dnh3N1Y5ci5nRH4+VWBBXTx4VFFSaWVhcyMoUU9DNiUwZDswcllpYGkoeUxlPTkhR1VpTmJZcD9AP1deM2hwJGhHVzVyRlN8a0d+UEYxTEY+TWMmOTUmVmI9XzY7YHlocER2Ryk7e2ZuUmtj''@;'; put 'put ''ZCxtTVZ9XVd9VSJRQlliTDIkSlkpLkVDLyRSTzBKIkcyZD8qYGRzbz8xaDBGWU5Yaz9zOUNMWlBuOyZUbTVfN2pvdHxpT30lK2NPTF10dmdAcEpqKnd3USJzPz9UMGJlQ2BBMV4wenlWWElyOnVoZW4jPnNTTzdHLkZjTzFGJUQuVm54SDJiZ0FuVXNWXnFTJCVLcGpjTHZ7eXVWKlVfYkQwMTtf''@;'; put 'put ''TSJQbD8sWWg5LDVOVGNubis1e0g/JjZsJTVwKTVZQGU7aGZ1WUpIRU0leG50bm59Ty5XM2JIWjwyek05SCskSzpFK2FsWys7IldRRlB6Rk0/TEVnNTpJRSM4RHNaciovZj41QHpIOXBWUmVNZSttaSJ7Skp6dy9jdT1ZdlQ7Wnw9fSI4ZyhjQWoqMmVRdSlncWgiPSROJE0wNy8sO3FiZ3dlckpz''@;'; put 'put ''fSU3LFgrQFRwQVA4OGFRd2g9Xyo7cypTVWYyKyQqR3dlJEosV3ZpQ182VWpTX1BKKC56K0BvVDpKPiloPFBuUm5aPiRyYihIMVBfMS89R0Z6aW8hSjw+KkJrWlIkT2FJLCNQOmM4TlQwfFdUTU18fGhAfTU3S2M6MzBrRzdgSU96Y2FiPmZ3UE1JVm9MIVlMLzA8QjZIWzxiS14+OSghWjxaY09b''@;'; put 'put ''YWxITXxVUT5eK3d6Q1UlUE8kSzdsSjd2cm5dbEBkWyJ1SWAme2VxIkJDfWx6O1AufG9VPGtVMDdLLDYiNztqPCwhU2k2I10mRTY3JEY1OzUwfVhDTUM7djBHRGU5KFg5dVZLR11daTVucHVRS1c6Yy9TZl01ZC8rVHEyZks1VmluejkyRiNERH0+VXtvSDIicFAxTUp1aDhjaV94Zz10KD5FZVJR''@;'; put 'put ''bm1PSHt8KmNGTCRnVlsvT3M/PFJaSnU/SlQ3SFNYaERoJklsZSNqJlhCYz05R2A1fm4mbkg9ZUwoNDdrZ3IjeF9sMF9yfiNdLz16akdoSGtwOVZ9eSs/d1opbU5pdUZ1fTFeYVdMM2tsNHllTGFNJGtnV05Ad2ptKGcze04lYno2VTdnLn4kcntTOXFETkUxODAiIUBaPW8sVSokNyRZcXpLcEhv''@;'; put 'put ''K0ppRjI/QlBYUWIjVDsmfldjSTlqOzJ3RFIlWHN2W15gcUVtIU5dS1B0V01VVlR8XylWZyY7ITYmTnJgW2RpTEpwOCJrWHFMSzApZDhzbCIhVllfTGJkKjBGKnN7dnAhQjEkW2g8fjR6W3BpaWk+QzhlRF1GX2M0JjR5OXgsRHVvaiQlITJQdFd8d0xOXl9LWThFdmh8KWZ9OUdyYT1jOHYoSCJz''@;'; put 'put ''YHldJmhBMUNZQjYsREttMH58RE57dmVKQz1ALyQ4NW9rfkx3RlNBOS85emhjRitNTXRybnYqeVRoTEY6ZkFwak1kcHdJP2g8V3ZaOH1uU3d9I1FxSHszMHJXVU8ocV4pIyFQKzk/cWQxdiFdMWQpTFF8L1FZdjE/TVghdl42PyhETWI7V1JyTXhQRk5wNFI1dz1wTVhgNUJjZildITxjQnJpOV8l''@;'; put 'put ''M0VSRmRReG1fTk0xcD49PSpgbmg2ZWR2Tk02RipLYlM/bztEeEB7XU5sQz0sPzBWTFRRRkhxZiZkfFFLW3gsJCE0dXRTdiFSc0BweUV9TiEwUGFJa21zQzpyUFpmU3E1TyZ6RFFdOmlmTSpPWiMvZFddbVNwTWxkS0I7KFN3PVVdVDV3SFFQISVgIzpIdUwveksrUyVHTSR6eV0yazg2cl8lYkd0''@;'; put 'put ''NzckYHBbRG58TGp7a2o/Qmd3aGZ8OGEsQy5kPGV6V0U3c0ZgYVY8TitDaCFTSV1ML0B2ZUwha089Wlt1Y3hHeUBwIjJPOiZtKF4mXX5MdlQ8Tm8uJkxlNzwvYl5gKH5kV2BRW3FpJlp0RE0sZmo1OGRXRSNhOkpOWUtaYCkvdGhMbSlAYWMlOnA7JWBQJVYvTz50Y2BAWnJQRW9DJSlXfEBZbTFa''@;'; put 'put ''Olpgbl1CaihFPDJ5OjhNcFJqdzJBdStGb1RoIkNYZHc6OCljN2FCKEszOiVJOCVZamtKM3ViWXw/VU47dikyOTljbSghQTQ+KXhbdi9UbkRJdlQhZEJ7YjlKOUA5Vmg4XyNpLCxOWE00KzlCUlFkWCYhKXZKT0p9Xy9hKXF0PT95Wm5FT0RaNjoweF09YGAiJng8NHJPRn45SV0haSI3Tkh9bk4m''@;'; put 'put ''aX5NUiVZP05zQ3JbdkJYJnE1MHN9dWNdN24rKlA+eFhrWTtkRDdyQV8sanI7eVRpd20hI0d5KXJGJHBgUSh3UEJJc1szY0E4W1JCUSlNP2UyYiFgci9aXytqSm9aZ2UqLFtpRDROYEU8dyl0c3JQVH4oSGU8JFozY3VnIWdaITgybDxuIm51WHBgM0Z6MHxCOmlXUyN3ckxXO1JxTCIvTEBNSDhg''@;'; put 'put ''ez9CPm1dIWFZQyFZeUN4eFVbOjA1c289dngpaFMkclRMYzdIMnE5cE5iLEdJcTQ0RzFRa3V+KENRKDNlclE2NWxiIiFdPzRlY21IRWsvVGd1LERbOCV5KHlQYmEvK3RyXXNDTlkjTntoKVMxPjs1UVtob2tje1BCMnYwQVQoWGpKV0BNPEllZ3lRQ3pxcyQmcnVtakJZaVk7TloyeChhMTN2IXhX''@;'; put 'put ''Vyw4OnAieXZQbCFHVDA9fDJnU0xZRC5PezhmRUVCIkRRdCg6TX1xW1ksRSVMQ3REMWAqRCNvNShmSn5LPEM2LkwzQ3tCRUJrSS5rVlV1SWtCKUpoJlVMUVpbbi4weV43Sml0NVFRYEAjfDAvRzw7WXhDaUdmZEtBKnlWXVhvWzFmfWRHZV1UNUhqYFd7OSs3aCFtezAqKllQJWZOfi5GNldGNzU9''@;'; put 'put ''cngve2pxQHBfS0Z5KHNYNjAmRFQuZWd4XllSb0A0aVFIU0d8WXUmPyQmTXYoJFhKfTAqJWYpb1JZa0pzbngkZlppTXRScTFkVVA+YmklcS5ALiVfOyJfT0Y/JXF6e05+b2MjeTV8L3tGbUhaKz4hVGw8RXE9X3tPaDs0fEY2eEFbfTlsR2VWVFp6WDAiYWBBX3hYU1dHPG8zI3FLMEMreEJNYHNl''@;'; put 'put ''dVpxJkFNYVY1VVh3RTdvVlQ8S2FjQkdVd3k1NSFSSmpYMmcrKFUjfj9YPGR8YW48Y20jQHh7KSlnZTR4N1omPG1hblpfV0JESyRSdzJacGlTS01MaFAiSXRONmA4YlFePmlrRVR0QyQxekpjS1ZGTSF3KCUlanVIKng6Iz9ofVlieXwvV2UjT18+YEdWNVR2PnNIeEZgSzp1SHV6PSleUT1RRXVi''@;'; put 'put ''VGFtVTo8dHhAPEQpQUdtcmMxWTxRQy5lUm5UL0t5OC5NSXdSRzk6SHxfTFdIUmU0a3pnO3p7Y1sqUmNEcCI7R0AiPF5afS5YYHYjZEVsQVl1d096XitfU1QuME80QCR7Jlo7V3J9YjlZTTdyaHNIWX17Pl9NY3k8TXNYKHlUJCpuaD5oZVlqaihTNUZQOyRGS1BDMGlmOW0laHxCWlcuMkcoZFI5''@;'; put 'put ''VTZjJDVnYS5zPEpZMGNUMSolKFpeW14lcE43JldjWltYWV9WNHBYOnZFZXU4NnhaYWJzNC9yRCtpQ0s+U208TXtTX006SkI4eUpKPnEufXpydG9AI3FeIiR8Q2QwKiI6e2xnUV42Ol45c2I4ZkRHZEQ6dElleF1jdWQrS1tYQl92ZzMqWnQ3Nk9BTGg+QkRoYmc+eXxsKnZ9Rz88Jn1YVmhTYWIu''@;'; put 'put ''PSU5PElISkdvVGRhVmo3MEEpNFovSnZxW1RQfW14WlAyU3BBalcpNTV1QDYiXjtza11WTyxpVEZDVXY9eE9XaChqKGFPYy8oYShLLlorYX5yfl9YJls8LmwsS1l5UU0ySGhmaCw1Um9FNUt+en4hOkx+SGpfPDIrWyJrZjxERjk5azpVRTtKW0JvYkZySG0yQV1OMENyZUUud1E7XW0/VTwlPTFt''@;'; put 'put ''YFNvX15RQ29kRHVhKGlnWHBlNmxAUyosVF12V1F3Yylwe3dhZnJIKCxeOXk9d1JYOzl5JjRaIitRQ2ZkUDw9P09wbjxAaFRIcm5LaFJOYk9ba3lYSENLZ0h7Qmg9eFRsZjJ+eDZYOEVMZkp1ODFeMDdHfjhNbk9zdC8+JG56ZT5rJkBAaHBTejFSS3c6LCRDemU/OyU9e3M+VVtAMURkVDx1ZiNy''@;'; put 'put ''MnRYWGRkRit+eEcwN2J0Z35RfHdPTS8zIUMyJnRdJVRgWy52YXh9I21YbHhCYHl3Z2cwQVQlZ2pBdTBRYUxKQX1pYH5WWzozN3VdSjhdWFQxSywkdnA/S1ZddiFqWyF9b2c8dXNpWSlBMkVtQ2daOWQ8MEpTM3ZzWS9WR2Q7enthfHtET2k/eEJGenFUPHNJeEoyUl5yM3pTKC9TVi99fjg1Lmc8''@;'; put 'put ''cChpI3kuNC5iMmcmTyI+YG1nU046JUE0Lm9YfTxebkM6XmdZNStLdFJVPS9SZH1DKlp6QEV7OCJLZFswQGFkZVhGJWApflN8OEYsSkhqWmN6dkdlcG0oMyZ4QHRHYzY4WHUrL0pAYy9IYl08JS58KWd3aDplNEdIVHoiWV9ZR1l9dkZaRzx1ZTomXzlCankxKDdJNUkxMWowYy93KmU5RlV6a3FL''@;'; put 'put ''RGg0VnYhY0sweGxaIj9EPUJ7ZEMpdiN7Y041aytvQnpWfWVMYilSXX5IPjklTF81W0BALFklYWoqcWhsQlY0UjFuSU5RalYpQEVKQG1DdnpBJn06cSZeUEVfRF5UbDRfX01DO2ZMaCVtUEoiK1U2IzFMPHZkWFBRUFhlOE5rJGpPM092c00lN29GMDRXUCVhRURMN35PX2tWNT51KGhuMFghLDB2''@;'; put 'put ''PD5ERXtiYFB3cSFJTkpTTjZifnxqTkt3ZmkoTDFZQjx4K3tmbFlBUHk8MiloMn1GenEyRCF5MzI8JCJvdXNIa0QjTkYqXzh1Mz1oPzEsRnRLME1WJnRJMllZQX48VnBwM2RNKHBlZU0xVGNJeHFAOTNOPEU3WU4zYD1oKmR4R1RuPkdrKlFWeXBPZXtiKWhCLGRyfUNoa3pMej9fYGdpNG1rNzY8''@;'; put 'put ''UG8ydnpDbWQ/YHk0W3hQXktPP3QhIzcxfl5HcFs2MFM4KnUlOEZPVUw1fnUqL1c1KmN0Y0o/Sl1bS1o+I3lzITBwaDclI0c2fH1Kb3UhWyQzbG1xKG08fEtlY183NUMsdD5WLio8NGdZVF1DKn1Maj1LNkRdUj1ebDQxQVJNXX0wNW4hRVVEKVdGWXlBKTFEVU9TXzEpPXNHfks+WHR4XTUkNTFd''@;'; put 'put ''KUImXntBcVRncmB6fk98T3p5QGQvcl4/NjRnSXZjKEs1KDpvXWMoSWZYQSRpcVFQdjZsIXVhXXcuRiZiek5JalRScyM8O0A7ZmFtMmRpbUlRUGQ5KlMvJWkxPGwpfWJAJCFrdnUuQ3QxRFV7NVplTTxGVChpYkZtOnBKNn1wRV8/I01SbzlaNWA8ZF1tNnp+Iz0xXkU/dSMhaXcuLHU7QiQ8TF5r''@;'; put 'put ''eFVrMk5qKzVIU34mNz5STGNAW1A4T1Y/bnkjfDN2bnUjbGFDT3wvTm1iPHpuLFJkZm4wR2A3PjAuUDokPlB+QSxueSlPJTgzaiZsRTB+aWI9KFpBbyhpTExiIlVyVkhea2pUMlRLaT1APVhPKUh3c2wqMiJWYGRvMiQpTGArMj1rZE0mLl9+JTVQRiwmZC9LZEZJPnhJIlFISkB6QXpXUiYmTk5P''@;'; put 'put ''ZT4mYz5hVlpJN3AkU1V4bjgqcShUOUd8O3I4ZmBDJjBNTCI7WFs4X0k5OklkfGRxWiM/aGoyYyppNTgoZjArZ3daJDtRQkphRWhuQmIheXtPK1FfPV1mSkx0fGFmT0wlWTpPPX5bOzkoSHkjU0AmRUhKTUNdUU9hZHpqVlRQPXxxSTIvZyZgaG55fHt8LDNTOm1uaV9PemJ2eGp6RyZLQXZqUj5V''@;'; put 'put ''bnJkaVpRZV03MS9ROTZSPX1lPUchUF1IaUVubVVgTj98W3ZvU0BGX3dJQzNNX1hlPXsmZWtaKXsiUUl0O1VLTVdMP2IqUjA+KysjdWNbTEE4X1B8VD07V3BILmtnaDBJc2loPyR8JFo7NSslO1Z9cnJxVlY/OThoW0t2P1ZqUDw9ZWVLbmlJeFNtS2c4eWJ7UUdJfX1mU1gmYUYha0pYMXd1MV1f''@;'; put 'put ''UFVeZjhMV3UxJHUkMmswaFs8YmtIXjQveiNnZVJMNzc0N24pR3slcn0mc08wPjBiP1JSVHhLOiFiM31xPVkmTHtzKT9IYFhOI3pgX0lHfDRyQkA5WV9AWlZJL1lSI1dPKTcyKlAjOGUrJmJZdWg+VCZfXmAjQVJGa0EhdyVjYWlCaXUiTUNaKTRVcH0yaSQ9VHtePnojTW0qPFdGSFNXbVMqPUJA''@;'; put 'put ''a1IsMEt4cnxGMTZqbyMvWG1yaDhWNHM8WENJN2ZHVktELngsXkVRVyxtPmhic2w4Jlk2dl46RG5kbl9bXnlsJChNKWI+SUkmTXolQWc+VEYjZ01VNWI3Izp9OFRDQG1veSR8XT14RD1pVGhtMUFzZiJ6NWp1WEQoO0tjJUl9eUdEWypIMHYhd1pmPUY7ZVtLcHlqWlclTkosaDdxfH41bVZ+M11Z''@;'; put 'put ''VSlBZVVmK012X3tLWmkwMys/eVQyfUpLbjVKVFtJQXYkM194diszai9gTmklSkAmPyUoa1sjbFkhN1h3U0d4UTFzOj9MR2ZabjdKIWdraTxOMH1PeEQscUZOfkhKYnZ6PWA3aio1Pz1RNUh5V1VNYFVfPFQmfG9mYC9xaCg2NnlYMiN5eXYjfHtmR0pjWSUmVSldY04xc0Y9fkIsPE9ZfGRYdWV0''@;'; put 'put ''Y3JbclR4N1RFJnB9cCZOZj53fDFnJShBPnZnUUc3TVt3XmtqUjVUOEc9TmFtKTBfJCkpJXYoXzAhbTI6T3l1NUspYjhAI2N9KVJOZi9JJmJHZVE/N3xaXWR7JldNMCV0SUJ7dCJtOmg8bSp2WVpwSEQ8UnE5QFoqRTgibS9IUEJxfkR8XW0odTVVREQrPGBFcWM6ZTR3IzhrcVBmNzhtVDFAM1Fm''@;'; put 'put ''d0hVaXF+WVdOWyRGdEElN2tOTnxsQ25sXmIrc3QjSV15a2J7R0hQTnVnfHRsP0U/QF0yUmgvNCZaWCxhbl9NKjxMakpyWClnQSZpNyhOTiFpSzsrbyltP3ZHdjB9dnUiV19gRH5jTXVfb18rSmImei5HKUV4REpaWWBsbi4iJS44ejR7U3gxMkNZcmded0dedihyd1E5d092JnQoNlEuYmwrX0sw''@;'; put 'put ''K0s1Q3I4R1hGIUZoMSteb2ZsYU0+Wzl1L31FOCxuJFYuRGxZVUZsdU92cHlqajlEb3ZgOCZlMVJOQU01PFltMkRPVD9MYFdkN3x1QVEqaGxiOFZ1UzdZflZ0bFdpSz8pLHRVc0RMLlQ1PEohbX5WRTApOEJ1Pn5BJU05QzFRcSFjKG0+N0k3TF8/V19dU25mL1YrN0Z7R3Q2MEs8eztGMipYTytm''@;'; put 'put ''Y1krMHNHYlkrRmdbbnYkPVI1PllRUHRNfjNlOVojeWVfNXhRd0EsNmI0M1VDXVRCNzc1XzBqc1c1UF1EXkBuIVtZeX0wfFdjKH1ha3RbLi53KVpOW290LixtJDwoSFhiUyhLZmslSWNZbykwcVFbTlZfRzlueFdwRn1ESSEzMUxeazZRYXB1VSM8fmUqRj5ZazhkWz5YQSpkU3dMVSo2Xkk3c2hV''@;'; put 'put ''Oi9xcjEvRUFkJkdRbXBWcjhjdF9jJmBRRCVoVzJXZXFlJTtuSEpxVSwra1d+Yi5JMzNONSFrfms9RE9iYFRGb2N0R1JdV1gwUnV4V1V4NytsV2Q+NVFDeSNWKFhARShiLzVpLGkwNlgpaEp8VW5HdWxtRUNyXUBOa2BhQE9Sc1s9Ljx8V3wxKk1AQmlHe3xtc0ltPGBWZjV1USkjXTo6QihOKCxX''@;'; put 'put ''PW5OSDQ/XmxbOUNHMWd4Py5sJkVdJWFFWWFMKWJoJkNmOCNNN0YhclA+RVUkTGI9KVRCTmd1VlEiLG1dPGU0IWF7MGpfakUpdSRNMTEmPipzMGUyTTFgSCFGP31DSjdENVtOOHFBbk9TKldQJU5+dll1ODRWJFtjZ0s6LnE6MDNoemdVR0MoPk5SYHVJVj9UMXY1WFA4O21lUCpRbURELDdAWSlX''@;'; put 'put ''d0t6PmdsUTt0LltpSU4xNFpieCFGO3hwQ3BFOCZxTyo/eEZjSXV+dXUlTGhoN31yUXFtK0Q/ez9BQiJwJjl0Qm1eITRhWlpBK0V2PnNPRFF7XnBwK3wqQXN2OEJhcVh2OF5tLGhRUls6RUljZylAe1pFNHt4PCYkYjR0NilDTGMrfTs1QiI3Ryt3NlMiOC44cj9PRXwxbmNKZml8QCxTKEkrZCZZ''@;'; put 'put ''MjRLIUgyT2VzPXJfWXxAelh5ZyZ0NWBfS10yaGo/Y2tHbXRhfSgxVEZ7Ql1bK2pLKWsyVjpNfUVqM2w8YDR5RDM/Ymp4ZHNnKTAkdmVVNzx+RCosfTlrP3dNVFJKN0oqQk4yNz97Tl4yQz4rXko1O1FWRVB9T3xFPnt2LzV8PipGK2l8OzkoJSlpPHZ3QlFQfGU3JlJqQVY8ezFHMDRWZWJUXjdL''@;'; put 'put ''JDN3UiE5LlRfYWtMY3F3fVd6ZSFocFE/RWR+PVpRPVZTSHEjeiJ5ZXJabVM1NlRHTjphTCNOMHhbTFc1YjBDdyVxIU5yZCxsQTxVWj1DK2dDd1ZIfF80QDJNJH49bChCcTg0dXQ/KXlrZXQyPU9jdyFWZ1J8XVZoU3wsOV0+UD9ZaHVpOzp7W0M7PyN7aEY9QGVZZHRMTT4+YmdjOj9GNmx3S0B+''@;'; put 'put ''ZWI7THg7ZlpUWE0xQ00zSzNSWyN+YltDPmp3a2c1eFZfWW1OeDd7PXJqYDd4QHpQOyh7eVVKVSZha1t1SFNCJC9beCVjZnxPJjkjQkEoTl9HPko8WkYwTEwkSXtvdTswUEhybnhiKFlkNCo5NSxRWDM6UElZTixQeGxDW24pYi91XSZ2Ii9gKXJmUmwwNDhTW3M3ITIkIUZyOnIpPzIiPkI8YkV8''@;'; put 'put ''MStCT0MpbyhSel15OiJMMz5GZDRiLjkwdTJGfGtLSy4mam46e305QnBeUDkhSnc/IVI3NmNYRGJSL08leXJnS283Yml0UjtqK3cmd1MpVkIlN2N2TUs0ND9BQ1opOzhhRjsye3dkPTVdYUU6Rzx5XWxifXtOdz9nYlt8ZXlnI2gkK293VkMzK1kzfHhJVS40PGlPOllPTyV6PF5rPCpXMnZUMCw0''@;'; put 'put ''M2NaR2ApJXRoZjhMViFXR1kiVjwjWnt9OlFvdVtIK3ZeP3tqOURmaEY7ZlEzIy46O2oyN1U6Ki5yM0FZfXdzJFlodStyRz5DW0x8W2UreSIzfHUvZEM0fD1+fHNwKyMjMSF0Rmd2LGt1SD5MVWRZOFAlQnJYXnMlWXNEcVl0OHVpSlYsLlh1VFIrOFs0eEhuKktBTSlpe0J0NSkkNVNqKE89N3Bz''@;'; put 'put ''JG4uSE0oKTJCVTJ8Rm88a3s8amVCKm1rIztNaCk0SXlDdHNRXm5ANU45S0woQVZuJWVfK0IocXRYc2xsOHRjVVdfaVtZWDFwQjV1QlV0Lj00RSpFZEdjUmc7YXQhd0lkJlddWzd6YzQ+PUpwNmtUJl57QyNvTUwpRTJzMFcqMCZAKFpFOz0ofEdkT3xYaWBlWn14ZGsleWNsTkw3cklYdWFqeF4/''@;'; put 'put ''PVcsIU4+fmJFMHs5QE15Oi9eW2Q2VSgsVEx1aVNkOk5SdUptX2h1JFtrNl9AQD13ejIyLlt2LixSYE9qUjVbbCIhTClsMlJ5aTpgKGBmKGR3YEsrSXtWPnU+ZGtAXzMiLGgjOHZ5Ly5nXjMvWEB0RlVkPVsueXFTaiQrMkhdZDxJNUEzZlZ9az9bRX1WcTk0QUx7W1NVOjxjWWV6ZTBMWW8iRith''@;'; put 'put ''eHw5YGlwVGx1S1ROQzdvXVMjdGZMRDx4SX5oOSVpT2dvb11hMzxUPCkvWWQhQGI6P0JmLn0uIXtLTXNoRT9qc2kkUGhSSzkqQGAvQzE3VTxrWDNmNGVXZS5MYjtRK25oV2NgLl1QJElnSSMwVmIwIiY4dV5UdXJjUkJJcld3TUMxRWRhMDpvN0BZJV10QzwmcCgzRzlCJDwmQDBWbzp6RGA0RGQq''@;'; put 'put ''Ul87RFBbPDR1WDJIfnE8SndmMG98LzJieElMeXEsUTN0cEVwWVdPMiJEQDNpSFB3V0tNelspP3c8UmBtdTZoaGs+TykzKjxAJVMyLz9CRzNZejB2IT9BTV55MCJ0bmhSLGglRyNXTioiXVchXX5mWmJWbV5aOXhDL2hlPThTV0tPIi82a2g/S0ErN35kfCN6YEVDZCZ1dU8scGtHMC4wQi9TNnA9''@;'; put 'put ''XWFkOk5zSXhOIlQ7OHhOYys9JFt0QFI0JFdEL3czO0RCXm5hfXJ+PGlOZUsoTFE3a3FufDhKZyxKZzhyIm1dcHY8TTs/aH1FSCoiNyYmNTxIT1NGJjQ3ckw3N310WXBUIi4mXU1yLnQ9UFE1LCU5eU8qMD5pQzZEdl9nam8xa0RMe2p0VlhvTjBjRD1dZ2A/PDVhai96Tip9WW1KLEpueFY4Jmdl''@;'; put 'put ''TjB2REtXPiZPUlZIVDpvPFpdZkIyU3teW3pQO2laOThLZU9QQlZQU1goVj5KTnhsazc0WzIvRD9WcGBHNEJkLiE1cGRGMiZxLzRMLEM+YmZQQlROUmJWWVt0TiI0NVY1UlM3PHUsc2R4dF1iZ1hoUmkwSnFCPzdocU9jI3RyazhuYUdGd0I9fGUhQj1oZ0F4K2ZFZnI/SzM3WmVhRHtodWlDN0lj''@;'; put 'put ''Oj10L0YoIWkiMFhBflNtWTpRMzZeLF9xeHR+RzZXOmNsTlNbMX5xKDs0aTB+JjtpWn08c2c4KmZwRkltOTZUcn5bOnpQbSE/amxTZXZGfmlqYmk1LlpyLFRwR1VVQF1GKnAseCVpMTNPaCNqXXErXUZEM29tXjh7Kko8Kyt0LFt0dnc0V3M5UHAudXlbbWN+RnxRcEF+QkNJfEA+aSJTSGJYSFBg''@;'; put 'put ''SCtqOm5jKlNJP3EvSXx1JElSdTN2Wm48Uys6a1h5XlUvU2sqI1o+OzdQemZVUkU1eW4uZmROeVt0eXtiQkJ5SXxzYFZVN3VGJm4yKl4lLFMqI31pWzdRS0FPWkpjY2M5K3AqYjUqb2RISnImU3cyRXY7Sn5GQEZgYjZmKlNbc1ZITkxfWSJLMVhmZigjczQkb0kjcSMmdyF3WjFUKi5wdVVrKjQs''@;'; put 'put ''JEF7USg3UEU5M30oSGg6T25NenJsMDl7ZUE7WD9Han5BPitIRUAhI2Y5WH5XX2FZaWFlImpQekR4UGhpKENYREpjNHpdX28kYXJ5NXVBSS5OJl5hWX0lYEhEPlFad1s0V0VRVEJ4RzBMWiorQlQ4RHQ4KGR2Mn1pNDkzIXpGY3kkeixgRUVmfWU1NDtnNjQ0b2Bdcn1BS308USwzaD5VSGVnajc5''@;'; put 'put ''WVMxKzVSNmwhUFQmcj81WyIpMjo+JW1bVTd9bk8mZ3JIcVlDVWtYZCNnejErNiRDN2o/aGNGOng1WCRbVE1LWzZ5XkM2T0s/VE94MzxRcXo8Pi5mRWIldklYcnhMPFN2WlJBd0Z9aGVbSCVlNkVuOF1JbEhlSSFOcm03MWxDSnRpYT5YKURtalgifmg+c0tWN2dzNS8rVXs0TCF7T15iLktFXX1N''@;'; put 'put ''QFhiY3s+ejU1dl1eKV9FanhWSVE9RDtzW3lmWEN4SiVlR2J9L1VPYG0wMFs3KUJtX35pcjJwUElDbj9UVmw4QEAuczk9ZFkpa3tQNUp6KHZIYkQuTzNqY1VXJCFGP20vd0NUJXkwc2NTPUlES1E1PkJXMkk+cENKeCFjdCRqPSxqdFJjRCYiZVM0OCRUI34mWnxgYXcsQ0pUfjFfQnMpNUwkZSpy''@;'; put 'put ''SV1iImwuP31MSTchNHJvPk8jcVJ+LlBmbyt8fTA/ZkF5bGUzOjZla0d5Liw8TmxeeTlbeHtMSyomd2klMWZOSHRSdCpwI3glWCNwUylsampLSWF5TmxENWpnTCFQVllJQFdoOX1yXUJgVDJBL0YkYVNyeVdeWDI3VkQyXlAyIXhzdlRFWUpdVH4/K250a29ALDJRPTIwJVoqRnJiT3hUOWlMV2Ui''@;'; put 'put ''Vj5FcSF2MndZdVI1MzhRJWMkXTFGb0hEOzg7eyRtWzMpUyl0enZTfldOdzo9MEJ4LGQ6LFlgVmlvSmkjSmI+bms0NX0+RC5DNipefG9hP05pRWxXNm9+UjRHWyR6Q204SXJdIlRRXlZSXVc3ekBFdV1DKV11ZiRtbiJhV1YxcTklRDkvPjlvSHwyLHcxeV9CQzs2antWZE1wflFYI0NVWz4wVjVh''@;'; put 'put ''ci4yMUMxYFJVaEdzQitAWD4jUyJxdk5APmh8QSFYMDAvT0VyOHchVjFUeyEyWTB8cVQvPks4ZlNzKXVic3FuI3lRdHp+VyUyXlolaXJYXX5CTTE2N2pLaikpem1hcDBjZWxQdS9TKDRUQnAlQlEuMFJucG5CNHFse1chRillWzUvdXN3UWw8Yk94Zzo5M2FJfVAoU0o8cGtJY0gwe2Y5O2pIRixo''@;'; put 'put ''Z0tdcDAmaWdIUUJAZ3BCSGtBeUosak5TOEQuPmxzQyYoK34oIyMuXmBRfiU6OD5XZzZMJXU6eSghLEBYRjo0VUVsZ3IiY2w0djJwWnpYU2ZNZ1hpb2p6Im1raUN1e1M8SF9KaTlDTmw/LyksWzs1c2pDJEA/JilEOShEQmdINTorU1FvPDBta28mY2JIKEQpSGxfRD89byxPR3pJS2J4OnhZaHR0''@;'; put 'put ''e1NiUSs8JXNSMkJ4SGE2N193MDZ9ZktaW0dRPUl5Yl06RVM3Mz59dXR8UlVdV343c00hIW82bmFRcSxxUmxoWn5rWl4iX3U+QjRyMEBSPDwvY2MsZ1NiRVBjQGI5TX1tUFpjdTVeWjFiKSxxI25vS0BLQEQxeUpHemg3dkdpVyZBRWxZNjUxbj9rLjAhZm0laWBNPjBtZEdmSGduS2lOUiU9RHgw''@;'; put 'put ''MEN9b3lZMldZaGQjdkpwOTU9bGdsNzMlW2lCZllCLkhkMComL1J1UTVzaChlRXNtVjVaXndpYmxTWGRqZXQxX2AqdzlKSHFIend1d1I8eCpGVyVIenNVUTdaRzlKXnB5L0hhVHE7NEhncDkuJHZHaFUoWDIvRU4+RS87KHRXVFFjTS5FNkpWbS9SOjptYl5nW1sqam9NRGgkaCVWYXpvR3Y6ZDU0''@;'; put 'put ''bnFnaV5sWGtlSn47cVtmRk92LE8zSGp7PD9VdVdbIkk/eVA3diQ6SWAyVFBeVjEvPk4wdkUkN1RSIUxvJlsxZDh3PlFkNysyOmI/YC82TV9dd0tZQSxXPnJiTHlVdSxOaUU5fG48L2RHcz81bnlWRVBjenl8Y2BzPjVRQiJZIzdVaS9Efl9HbWtteEYwVihPIV98ci9GUzlSSVI2YEpTOUwmbGRh''@;'; put 'put ''Ol5XY3JEJSskVEpDaD9PbzcxUG1CZF1dTVNHUGgmTzljaTRGIVE3eDUjb2xeZT4vKUR4RnhvfVJMQF1nSikrRWRtMzBDJmNpemB9LGZ6SkhVMSg0IXV7YktJKC9LQX4xUT8jdDtHKC9LZmhaV3tFKFMoNV9WMmY9N35JNCMvUE9qKSNTbmo1dVo0eG1ZaVh8VFpVV3MpUkR6dCVZV2thOGpzLDh8''@;'; put 'put ''WEMmL2RSRyF1YFkvcU19W1MrRVgxfV0rSEJ3Pk0xRChfY31jKXhSeCYrJC4mNFZuMmQ/KnxXSiR7LGNdbjpOLE5QSEhVPkhydXlFfSFXaitHIyxQV2JRbTVifFtWelUpKj1WW113MUBKZ3tiTjc1LlR3P1trK2x5Oy9Cczo0I0B5enIlZEBPdF1dMHlyWEtyNURyVSs1UV4kITUmKCVmbildOls3''@;'; put 'put ''TnJMPz06QCk7MSx0c2BvdGxuNXFUKGd1XWsreyosNnpiT3BXJXo0PmczWWokdX5yJVszcGEwdV4wTV92NkZdQFl1eTkhRWFQb2o8US5UZ3xDTWdlN2tQSl1uRTVhIXd4TzkhWktISW48WVZFP0xPZmx6OU1oRWQ8RWNhfU82SntKaDFgZG4vUTd3TSwvXU1JOjZ0SVBiK312JmtIdC4me2B9I3J6''@;'; put 'put ''PTw2bF4xPEtEKHZ3IktnKnVXMkZmQk5DJXBdcitPJDJNZ0JDdVZRM3kvZXZ+eVRNfHY7USFFI2I+WndVLDt4Lm00ZkBXQEVEPC89ayVQcHUpUk5SVThXMzsxUTNEUFhdZTxeRj8wTHV9SWFFMF1Za1h8X31ja09SVjFPIXgiYSNmUChoSG8wVUNpTTxkW3JfPUJuOTpMRkE+I29NW0N8KVVXa2tE''@;'; put 'put ''WXlVVyk2RW1MXkg9TGl1cG96VW1pN1oyK1NAdkRdOSRMPkwudTNMYUpKMl96I2NpRCYpeXZPLlEzZjI8LDlyWm59TG44NldmNXs2W0c9WWNKOmp9QVE0Q3U4WUUpXmp9RVo/JXJzZl0sX0g3Vzh+JE1GYkc9fXVMdEtNQ3t+JT5MOCN7b0NAM0UwW3ZEZmk0aWlEVXZMdDRpQ3tocDZvUTdhalU2''@;'; put 'put ''OFZIZ0dyeVkhTTxlRVdwPjJpYGlIPHhwaywqTGdPPUVJemIzZTwyPEtscVFUb0cyb1F+SmBofiRMPyhwJj9pPzBkLm9NU2VjMStnazMuc1o4VzI6P1gvbSJhQlgkSUJGe3lYNyFfI0RKVmRGXkUocUNMK18hS0kmbVtUL3Q0e29aamdbeTYyVkxfQnJzOlopKjMjLmA+OkZbO2tCMXV5NjYrXkNr''@;'; put 'put ''T0pnbnYxeHkvdV9hUTUrZVsvO155e2trRjpJbE0hTCVgXkApKUw0SEYra0JlfnolWyVJZCNCY1BraFg2Nl8zQlIzTCojaXFkP09TVUBQV3Y/MkxOMTpgS3BaRDlJMmpScClDPyI5WEcqTGBfbThFez1odkZtZj5dU21lLkdELHhERk92PkhIVHpIMFBoUHtOWXZRYHV5STw+eEVzQkJuVCEyfTJX''@;'; put 'put ''eE10YDJkaiNZbDVoTWc5UFhCflJwWkF+bExVQit1YSMsa0NhKFF9aGVTM0lpWT1HYFgiWzBKXUZ2M3RzcTM4aypOOD5mXW5nUUpISkF1PVlib0Q+OSo5VUBrLH1lOSMwWD0hJU1ASHFNUzM8cyJKXjhJJTtidiIpZ1MuVyRMY2MmWnVHZHpjdjJUXVl+VlFVQV8kS3BKWEdYcmBeSnRMK3ZFfUZj''@;'; put 'put ''NHU6aGI6PlY4bWhmP3hXNGokZWg+JCF+KSJENVlAZXpWJXRFazI0XTMsTHg1KXlUMjFPSSxRO2ZYS290YGlxYXc0emkqfEEsQjVKWyEqV2Bne0gyNmI6Z01waVVZR0pnPztJK3lDM0tYVSh5O2cmUHpeUyJHdTVFTWV5dzRzQjozYlU5U3RlYVMwY1U3eSYxSzhkNUQvXVFgWjEuRlJ0WEZ6UWB1''@;'; put 'put ''V084dV15aCZCQnhYN0hsOV53aCJ4KmZAXktXcTZxNippWSZrQ0g7c11LTTR9fSx2TkF6Rjw8bFVQdCZBSUVHQnJuP1AxQl5CWnc6NzB3ai9JQTJBV0hMcnJQK1I2QSY/WildS3spSyZtQjJHQk1JMHZqeFtTdmVHKzV+VDVCYExXV3E/SU9yU2RqOURtPyl0LGBgSyZDPXpjTVRkYExXVzwvVHwr''@;'; put 'put ''T05CUSF2V31GTTRVUkp3cnNjdXUxNHJVYzp5YnhpYTdIMUJiTFZ8V098SUBNP1hARWMmMyEjQU9wKWIsYiNdfUFocXhxfFJRQUp0c0guQEV0bipReHhGSSk6VGRQOD8lazdYNSE9P3U0bGVqRHFtWFdAV3BRbl5FKUpVRkN6X0Q5QUFSPzZnQnRicX18XSlRYjQ7PitVc3EpIUg+VT5JZ3xxdngl''@;'; put 'put ''PD1IMVNkaj8hQlpWWHZZYCxiWUI/b0glUiR3YSY1RyVqIm4+QUcjSyRMOi8jM2ZATVN7cSlAcHVbUDE+bEArSzZQYnwrfG9ObzVxbGc2PV9wUn02Nj52RSkoV3picTlMbkh3b3UyT0VvVkNWXmJHcjs1d1ZpWHUxKm1jRTQuL3dAYC8ybDhSSTpNYXwmYWVfVCIxclBYdzlGS31RcHh8KlFyRkFM''@;'; put 'put ''L05EdCxUN2ExeXZ0LHhJP2ZDNSI0clBnST9mY3lkJlhEIX51MFJENXJxQj4qSmFqZF5IdFMoRW9dbC51aW85dmIoUzZRbi96flAlQzwyPTklP1R5JnNYcDZjNTFuL01xcHM9S3I9dXJwdTMoYHZ5bnZwSm4vIygoM3RlI09XUlJAbWRmelsyP2tkOjpjWWNYQmtAUSQ8MjsoTGlkYExhTXxBNjty''@;'; put 'put ''WXRKPTMiaDk2MnwqVUldcXUpPWo0amcveVQ5XXxtRjl5MSFZeFdMb2xqUkpwc3AhUnxAaXw6YyooanhSKFBpNF9fd2l8T0pTWE9xVD4+b3huP2BhTEU4ZFd4TVtJdjw3Iis5JTxBOU15KUFKc3NGfER1SVlDNktidzR4M3hUI09aX3xubVMwV0E3dCZPezZocTRoRWdpQ2kwWHFdIVtLL3gxdXM1''@;'; put 'put ''Q1dXNmFwTUpZMHJWI2NMJXc5ZD9MbXM2bi8kNVE/JTZKSEUrOTh+KkxjVmJ8cDdVX0oxNj5MS18+cmU0OlJPRWYwNkUjSytOO2NvUDBOUjUvK2twa2dTRS4jZjdtcVY8LitGRm4ja3d9dGpNaVBIP3BELDFJWEBFRFFKWVdBS21jVCk7KTFLLFZGMHgzLCQyUSFbdE9sWDRLZWNON3NFVy5aRzZA''@;'; put 'put ''VlY2TH02a0h5cX1dd15TRldycV1RdylHJCVxZmJSa2BhYEJ1ZU82XlJ+PGFOdWRrIm0+MTNhRFsiPSlHW2ZmPUoqMUUvd3p3IWZ5RT8xKHQ7ZSVkKGBoRHxQd3o+Ym5zJl8kdnhbPzpbfXY2cC99cEooL3IrYSs2NkxVbCM+PX44NEUiV0ZzIl1dOENZSlJrP1tLfEY5OXFYOW8uKjZbMjIrSClI''@;'; put 'put ''bi9IPmtwUU9heTNVSj46MltQY1EoV1prVF1HQUMwSSQpVVsjQz5bWU5NNGYvb0ZUOUtWaSxPPzl3VVpreioseU9FdzZyTmpoNyxZaFZtRT5CJUxNd2A+O01bb1d7TmBAIntOdV97NmZZJSozTSxMYjorXjlqR1pecXc9bl9gdHNSJlVffFhFQn1+OTpadGo0fD8+Vil8TTxkeFRrNjc0ZHR4SzAz''@;'; put 'put ''RmJVWDsiLD9oX2srIVlva15QJnxmeCRgTkpaQFpOO3I2MFgudCZyazRqTUAuSng8a2lucVEyPGJiUE00KEdmL25nQ1NkPDxzeUYweUJSUjIyWVA5NkglcTVvPHo/fWJAVUgxfCExZk1Ib1d6aD88fDw0e344KHoiRTpgaHNFe1Y9JGd5KHV5ekxjUmNPamZDPFtsQylMKlQ9dW5yRDJmViUzai8v''@;'; put 'put ''O155N1dQZEk+Ul57aVBhRXp2WWRGa2B5MDxMWnhIRV1pUSRiLlAvKVBVSU0qRE5NQHxAVitvOUlnP3dTRjF5YHlFcCY4VlM3Z1dta1d5VUFYR0Q6KX15eFNBJmg7VD9RbyU7azNCLCRVSH1aTU9aajxYJGxeYSgzVkhodVgkODZWRmBTXWx7bGRtKkpsQktwfCtwKnIyUERaaEpnenV3Q2AhTTd1''@;'; put 'put ''TU5FK2ZjR3JkVGh4YE18JUJnZE5aN2dbfGw3Oigydjh3Vj9xT1tvJl1haGZ0RDxraVhUV1JsQUxXUzhGKmZEP0dOflJ5XkFFYD9kXyREOVk6az1qYTswTV8zLHsvPT1jUlpvUDVlLHxWbSU6JVNiRHF+QHhzRVpYN111VGg1IVUuLFlGWUZbMno2QUU9aVUkQXlrKVtWM0UjdSldZDRTNSt3ZHwl''@;'; put 'put ''XWMrbz59OnoqJXxIZ2BWRzcqXUgoKjY8RTd9eyRkU2dWJj54ITVhOUQjRXJEbCxhVjM2Nn5oWkBbLkNucC4yPSx3VF18YmZ2WVZ1Y1NtTFRJazxIJlolMWJGIyZpREJtYDssajZzd2dVSDY1YmdUPig4N09kTDY8Kk9OakBEfSM6PUVBU1g2WD5aYzs6bHEmd2Bud1NdQzRMSTBuUT9ANXJpIkx8''@;'; put 'put ''a1Q9QGhQe2tbRFc2VWxXUGl0JXEmLGhrW0Q7TSpeJHlVKCIiKExVOiVzLDAySi4wbWU4TzA3ZlBTOXNIKkhUPG4mUW9ePj5OclFQWSwlZnlsbWVwRkVDKyksJCVdfCpzQ1hgXk4jL3BZLj9+JSVGUUJIMkssfE0zYG1oOVh9WFdyZ3glMHZTeGoucjZYb3RpfXV1VjJPXj5ySHxrOy4pQiElXSsq''@;'; put 'put ''WmxXfjRsZTtzRzAwO0BeQisjPHV9cUwwN3NkZ1FUSSR9ZGhJVGpidExHbTM9Q11eQj8pd1Q1dEosazk6R0RURTVaTDhTV2dyLFNEUT82RmQwRmlyTiJEQV9zLFRSOjU/SE8pJi84UC5TIzR3ey5ZWndaR0RVLm5CeSYrTXJmfk9mME8iYFErIU9wSnAsUWQrJGQ7Rk1qZ3VmfmlNWVU/RWl6TWtW''@;'; put 'put ''clB0IThvIS92KTlZM2dINixAcnlxR2dCfHtYUTZWZnd1d1IpXntrNVEqeSR2O2lqclVfVk9zZ2Jre2ohdyYuVXxaWE42MCxAMzd2WVlENmJSTDB2ZUJsZkx6LkVhaSRfNVdmJn0uTn1Jdmc5OCYvTUdZOiZdKCZrWmk4SmFFTiZhO2BmYENKQ04reHFiPXA0T2ZySEluSTl8bjZeVHReTmVmKzAw''@;'; put 'put ''KXtPX0NuWkxjPG52bklmRHYjS2p8fDA1S2J4YT83cnhkNmJHc0h3KE1IMGJyeTpbKGkqaWpdM2A+UjVyNmcmSDEybDZSSVF2SV47Q1Q0O1FnIjxRKzcvQiRTQUB2YXUocU1GRkN1TCM2Tj5BbTgrLG46YEY6dlV4QkgvIktxLzBpJmt3eip9PCxrfFBtO3pLS3dUVzVza1daOiM8X0ZnKDZRVy9q''@;'; put 'put ''MmclSGF3WkdJSClYTFpbWzE/R1lVaTxMcTVPKnt5bSFabCtedkc/WCokRFpXNEFsZ1s1fFJJP3VnJmJeQnooRjBDdmhQJGNMLjFFZ3t1SmRddVJDP1k7QGRsYHJ+I0s8UnsoVGY/cTd5e0M6TWJnVjpEaXYjdS8hZkJ6YnhyWlY7KzZrZDE9emEvblRgb1V0YVFEcmklfkZKU2wxXTB8WXkxM2xN''@;'; put 'put ''XUhORDplbEpPLlBwYVtFNzErLDtsS0wlaWJTT2MmaF1rb24mWTosY0ZMNnVRUiVNSngpYndvP157VnsvNzYxLF9TJXVxOVArdktqXjpkeChONz9xTy5XTjB4ey53dkc/KWw1fWR8Pld3I0ElWSkzVFJSSV5LJXZ6dnM+UEw/VUM2T0NKU2A/JXJyJSZpaHwlTiNLPWR0PSRUREd5UF4uRm4vSGZG''@;'; put 'put ''L2wlbHtPNlpiTTY5WTNjRVl6ZnFUMmx6ZjMwITNXJG1MOjs0IVVYVT1qPDQxI2gjI10oOXh+VHZGWzI0TW4xcSZFMGw7Uzo4KWxeJWVsMl5rMDBrQyQyI2RKKm9qZWBtTHt0IW5wUXFMdkJtTkpWYiVdayJyVSJnaHlfXTBDcUhRbDdTVnI3diNsN1M3SnEwT1hVaixSNmc8bHtIIVhTN1IkYiZ9''@;'; put 'put ''XWIkbkQuMmljNWVXN0cofUQmL2J6S29vUG58RihUSj5WXnFeXnlgYjNkT2VnYDVAO258QGlgWX0yZngldCh3Vl4/RT0sKUNVcGpnJEpFfE1udSlPYmR5PSp0I1pkYnUod11hU2t4fHU1RnN8R1tydUVfK240R2FadDdscnVSdj55OThZeG8lU0s9ZFQ7R3lVe19qLHxBRDxFIV9+bk15NzFEW3ty''@;'; put 'put ''VXNaNXZZaGRRRiN1RlNjcG9ARGYqV1RucHBdWyVlSnErPS4wL2B6Q1lyYXkvbGRkUSQvMT9qY1BpXUlaaj8kazUrVSovbFVDaXZjQ0o6YTFvKVRHVVgrcDRtXypbZ2djdzB9JDtPS0dpWUF4NFNocFpnRCguZjVaLlI0X1NmUUBdcHhOWiVfJjM7b30/VlFwZj1mTSlKc0cvVCxLflVnRVU9YVVQ''@;'; put 'put ''WVEwRXEvdTV8PyFuZiVQPkhlUSFkNW1zb3E8b1MoQFR6I21DKnc1a1gxKWx6NUleMitNRT1AP2swXVh4P08hfWlEP2pqUEhRYTpjblRuWjBjOiRleGIzM0BDKS58T2N6WX5rN2E7V3RVWkRNW0EsJFFJcjhUP2ZzaFRJPlYpWz9oYHxGR1M3JWd5OGJ2eiRoXTU4Y3Y6PzpUQHo0cSxjL3VuTU1J''@;'; put 'put ''SWdlZjY+dzlOSmxlbWNHKms3RG9+Yld5eT92em9KTT4sPmtOTX5ddUkmN25zQzsjYXlLSzE/N2txb1dhVkZTWVMhPVB8QmhjZDB8fUlFcE5BLHo5TWh3X2ZCTWFsRm8pQX5gb1NqOUNHYUZGbyhFaGo0THhDOm88W2M9KXEuYnZqRXAzO2k0PHchKj5iZnReMnNKXnhRKnsxe1M6bzNuTktVT0N9''@;'; put 'put ''WipXaz9XbVV1JWo7O01wIlRHWnRRSl18STZ+SnBpJjd+anZ1PTM0SDFBcFBAeSRqNztAMms+XSEyUzBLL25UczBbLy8pJSkya1lfSTQuc3IlZkc2WTUmLD9WVy4pW2dmXlVfKEgkQnp6ciVYV3NEVnB7WmB1Xl0qaVF0czpRdFNJYT5zeUd1YG9SIWtmVDxmeEY9cmx5P0hpYnVYXVclVllnMFpu''@;'; put 'put ''cSxjazdhKlEvQDFXXVsrQFUlM3tIN0J+SDc8O156ZGRWVT09ent7LGF9U2c8UyxpVlVILGlHR1Z2O0tLU3dRS3tpZGRWVXAlXW4lSkxMZG9nR2tVTDEhNTkzckN0NGhLaHU9VzhyfjQpUWUvY0VNSVVgVHpueHQqeTwqUElhX1Yyd15MZmM/Z3RUV10+V1AyS29gNVBjWn1GQD95PClQQyh5Kig+''@;'; put 'put ''UENkZTw2Vm9CKzBXRXJKVSkzSnU6L08+dHYzMzl5Pz49R1lJQGd1NC5uLlZSXlVda04/KTNrcHZ1KDxndTNEPnhsdCN5W0AhRnkiVix5R1dbOTFCLlopOTM8aVAzUXsiJT1PWWZScE1IOjFXTSM3aEwjJWg4KFRLaGZaaGRFNTJrQUdKXnBkTCtzbHkxXmoqME4hNih1aiREUERhb3QzJixURz99''@;'; put 'put ''WkBGVThQQ1VvJThNRjl8WSVKP3Y5JXhbanE3YWZAJCFQb356LkBDfiwme3pRSChYelZIZUdhJix2eTpeRHckSyExbSwlISlScnU2PiRAL2Z8eUR4WGpvdFgqbkViJkY5LDJ2TTJ1Pjc0PUd6NiwrRl9mRkR5TG9oUkZeQnN8dnByUCJPQl88QCRxdStqYDMqdXciJWxKejZFXTptISFqcDV6QjBM''@;'; put 'put ''RDlNb2hSRm1ZWWxQcVVQMUBpO2Bea1M8Sz5MZE9dbCR8SzkyJHtHNXNhXzA2K0BSQFdOKDorMjd+Iz9yXW8/TzJFNExOQzdfOlZmIWZKWXkkMTpLPEtmJWxfeCJVMTYhMkp8WyRrViYudXVdXShxaTMpbUlXdXQ7an59e3V6U0dhVSFLOVc1MEB0Lj5ISUEkRShrTj1VaG4wWFlgNiomUjY9OD88''@;'; put 'put ''JmJeZ3BlYjcjTjZ6JnhBb0tKKUpVSTVvPjJxXS96Wzt2eUAqZVtLVWprUUlDVmxGTEtqTnAwX0hydXZ6JExINlkwRF1iYmVkblR9MGgzfEQ7Z0xuNFgoKUQmX3F6WW1+JVVlKGZIfX10XlFKeSZgNjo1PTh2U1ZsYGp5MTR6fTFRMG9qaTxRL0xWO01aVkZYNnI7NHtwQjVHOVI+MlR6d15GODBA''@;'; put 'put ''ayxYOHxJVSRuQEYoRVhrKjVvQyNUeVdFaDNUVEFEVlVsLDJCKmpxaWZxTlE6U29PMGhsUng4dnw9cF1qLj5KPkV5dSxPKFFZP3dCeUR2cWIiMTVRQixaKk80amRBSU83OWZ+Nmg1UkF2XSNHV0hxS09UeTJnezY/cCshIiRLdS9eUyViQCNZUHR7UylvWkJ0MTo1KltoLEZbXVVqWy5kI2c0Y0cm''@;'; put 'put ''eSFOTzhtMjVFUjNjKnUudUZNXz59bzkwNVJxPV9IQXoySDAqan5EVEMqdUpaXTljQk50diMsRXI9YSZjMGN3dXA3T2F+eCxJOSxzejVYKFVeK25+W1omV3p5eis3WjhaRnpHTXNkWTN+QjBkblo2d25II09sWFNNVkM8VyFbeWBvaHtpKHJnYlhJTjY9LlM1N1twNiImViZFSzsoMV0hPnoseUtU''@;'; put 'put ''RGNsb2FTZnZPPipJMypiWWE5SzN4ajFYOGE5TUxrUCNxOFEoI3U6fSV2M040UlNTK0cwYEp5JDZsSGF9RVpnSjVRY2lvQiFbNWVGeHU5TT58SVkjVms1eDI7fUQuP3N3UiowLiUqZTo+UklrLHI6K1B9aGRVVnlhW3spIzBycFUsVXVSNV0pYGlCXSRrQXE8IyRNREdYQCghYE8/ZD8wN1AjOEFQ''@;'; put 'put ''NyViM00yeiFmdmdQQzgidT9CLChIaEtdLzhfMV9BLDRyTkM3MSNAPVA8THE9RD09enpjdiZpSn17UnNeajN6bT44eHg0OnJZJVY1OmBZKVg8VjtATzNeZ3d2YWs8UC9UKC4yRH1AKEYjQyg3RX1WXl0scDFofHFhMVkvbV49TF04IVRRN0J7YCI6VD1uMGhZUzJtUjorZmNHcHt6SVVXe25ESyZi''@;'; put 'put ''VTNFIlpYI2N2IV9+fEZFNCF8Q2w2QzI5eUElU3VfWWp9PDA6aiUwPmxXM1U+R1lTTWEubEh1XjZqaCpOS0UuTDQjY0tFQW0wcGRtakJ+bUNwMG4haiMqUk4iMFUoPkhSaik9ZmQiOSUyPHMqbnpEeUQ2RHt2LG91MX1VSkheMU5QcCl0P3c3Rkh+Pn5TZC8mPUJ3LGshOS9SbmEmNCtkZUp+Ii9l''@;'; put 'put ''OGtrXjkldjhHayZuNDFFZmE5bnJhYWtBcTBRYipuK0MxRHhaQyo+SlZhIU9HR1hCNTczP3ReT0VrOUNEPTVNXX5MQkcyVkRVXm1rYXY/fGJ9RUdpRE41VnpPfClFR0J5Qip6cUFHKVhwUDIjIUNKKmVIMyhpVyNHNVYlN1dnL09fNGdjYnUkR0lYenY0JktNXWF+MCUiZyZXZD8+aituQ3wqLyVN''@;'; put 'put ''MUlwOHoibVB+L0BuYDhTVlNtVXZJQC4kTiNOZDpBdnJ0PWtLey9sWkIiVFIpZztfSFZubFldXkFZYShRWj5VeXtmZFZjYjUhbHEhdyo0Q0I7WnJQPFYzInlDSi8/N3ZvJkE0ZSkscWw6JG1RKUliVWhHTTw7WndaaHEjX19NJlVXWH1AXnA0Qn5CdGAhQVFre0V3IkxCbFpXKV5LXXMmKl56LHEl''@;'; put 'put ''PTA2WUYwYEpPTUtPJWRlWVpkTzZaanFdLGFJPy5mWj9iUSNIZj8mXjhIKUd+a0s0blZoY0NxamlDP3B0RE55T1NPLF17U3VdRz5zQG0rN2dnXXRdIU5yXy8wKDl2P2RwVGZqSkBUSn51RUtnfDEyOGM4JTldNkUpLmd6SyxaZjhFUVIhNlZAVDImRVRBTyJZXy5JSiFfLEJLVkZzUWgjUWlvJGBQ''@;'; put 'put ''UHZ+UV13aW4wNVJDKjddaGZwIl4xWywwQ0dJbnVhNWIqWl1ZYipuOFUlcn4pIyk7QGZXQFQ8Z35RM2NrQkx4OEtMaTo2O0Btd1Z6dD8vQV1eUFBZUVtaI3R0d00pR2EqbjklIyhtSDt6PVc5NDVDeDpTTVtOS3pgOytnOm4mcGpgT2loY35tI2hUKitrdm1OczJjNF41QGF9UjVHUnByN2YhUTdj''@;'; put 'put ''Y0ZKNlp1YlN8ZDpebTRgUHtqRFlyUmNWQXdhOyxpSll9RWdbMmNNQkRYLEldcittezR8I2J5cU1QLGZWUlo4dF4xb103bHFMQFRlS31MPCFsYz1tK2lAdGE1THA/fUV3YTtuTSQ6MmdBJUkqN10oNyUicHVpb0ElM251aS9SbTFyTndzaEYwViY0biRzenouTGYvZUtuWiNpTF80byhUJXp7U3Zl''@;'; put 'put ''U3dtKGhmM3hkPUB2LFh2QGNFTmVMXkxFYSNBQ0trNCZqJUk+RUJjWXxmS2VOWks+Plh7U3c9QGV3YEoqL0dSZyhLRiUzai8uOzpGUiokKjFabVRhOXpTSSgxRSlEX1kjcX5UKFNlTD5SK08pUndrbFJTZ3YqMllgRltvZkZUMV02TF8xQWV0YjU8JTFgPUdpdFdaeVVnRzM8PUddLGcrbCZNKTlg''@;'; put 'put ''blZnSHRqRVU4Z2NeZk5VM1NbRkJ7ViZkezJ6U2lIS29vM1U1UT5mfGc8a1BZQ2cqPFsvYm5TRTBONUhuKWJRfSh3TWE1RHZXalIjRmVaakhJWSokeWRuOXI0VSw6UXF1Vl5qeFpkUn1MWTBiTFg5bCpKQ21VNURTfFV2L0MuV1g4OU5CS1Z+MGtFZU04KWM5MzVSNHozc2F2P0JWakxhMy9JT0p2''@;'; put 'put ''OTM1I3NWcUUuLHxRVCFZR01ZbjRLJjZ3cT0/VHxUd0xWWF1NSCZYRywwfHBkNXU9N0JdcHYjP046Tlp9RX1UQHc8TyxUXU5sKlNWTVA4VFhIfHYiYDRFJEJpRm48K0NNe3N3NjhmWSlJfEpoN0AoKXRuVXtFVTtvLzBVcytjR1hAQzFWeyVrPzd+NlpLTEN5Pjc3MXh3WHlabiwhUF5nTzIpbXVj''@;'; put 'put ''M15wW11rR2N9Nk9idnN0dT1mWTFFaDw5XVh8P25RfVdyJT9sMDVQck54ekY7O0ZyJj93OndmOktGaHZnOkh6JGpTZVM+RVhCSmJeRGF6VyNhJFBfa1pjPjNofFlTXnFZaitsNWZzfE9MVlB7O0wqZCo7V0BWI3JRZyU1KzJkKjsqTGU5Ij91PHpXPDlyUTw5bTlbJHlxY15Pb2tIISN1U3BKZ0Vh''@;'; put 'put ''XU8ha1IkPlRpWVR0VCsiKD14P3ZmYm5hMG0/MVkwZCk7PV4sQmI8RU48NE4udkVuZEdZQEAzWjN+SlYiaG0uXmQ2JE0qK042S1prLmpKTlNSTXhkWWFoRXtJLllPZDV7UGxGZTooXigsXkdWJXBCP2Q9QlIkNn1JNVI3OGcvcHdeSzpkUz15fF1FM352KCx2TyU7XmMzOmtoKVtzc1FDREIuWGp0''@;'; put 'put ''RnZfI2RVaWx6VGRLMiZyMjtPPWgjNkBuLHtdU3I8amhDMyNWPUJbKmVJOyk+aDw8K0dNbFBDYTdsJGphYy9tIXA8TVVtJiQ0c2VqYy86STViPmQvXzVyZyRnWiVaTilpfCR4Klg6JCMhLmNRbFFvZUw7bjBycHFsZ2IyRGQhTlN2aFJdNnQ4PGZQVzolKUAvLGlMOjtvO09MVWAoYnZiPU8lX31t''@;'; put 'put ''MXtseGJTJkx+bXB0PSVrK01AXSpdX1o+V1grI0hoWDA1R3peW2dbcEJ4JnhyKmE3X1hteCV6ezRtZ208SFNzL2xmRC47MSNfSVJofHdKU31JQyxVKUVKZkxfNHdmTXsjXVsydnBWSXBsfks/YT5ieFY4XmY8PVl+XW9MRUZdJSQuIzc2Y2ZrfUl9Q3k2U0Y9RSopQDF4Plpwb0tNV11TaG98M21P''@;'; put 'put ''IV9GRG1pQyNpdjN2USYxJk5fInovQGpnc2xtMys9Y2opUnckM2UhM3JweyU5REQ2JlVtKHJ9QVRTX3FnTi98SDQ+U084cjs0dldGYWNxUiFYKFtIXzswZktxeFdfSk1eUylhJXQ4Xmo+SkBJdjlhOm87MjxENX5YKSQxZlBZfV9RRTh0ajt2VHJCSDNbOWIvMFpNJlNsKD0ybC8+YkM8dkVgWkZP''@;'; put 'put ''R3tTOGp5U3sxPklPUmw2NSlaZnpESDBFPjtGZUBZOV02Lk55XXxKRlppM0Z9ZWhZNTtWOEU3SDg5MU0wdDZaLklVN0NgZngpSlJAUWpxY2lJZHVaQUJCRi8rVCNSPSYxY2pzUCJOdnRZMX14e1khPmU3cUdjZ0MjP3FSZ2tUSC9Pc3hjbWlRIV9EQm5TRTQsYnY0bl5vXWV4IylNKWluQVF8SGJP''@;'; put 'put ''Z1syakZJLGJLX1ZNVyoxY2N2c15sNEsufT1vIylXR2hoWEdmPDcjZHtwckB5NDpvWmNMeTVuVDdTfn4/W1l3QyNOOUQ0XVJbOFlkU3JfV3Emd2J+ey85cSQjTEBxZVR9JTBOem9ta21pJlRqXUNCRDVYKkMjXy5PVkU/dnsyS0lYY3pxWjUvYExJZXZaS1J9YTpqcU9dPFVIcEBjS1IiXVtOeV08''@;'; put 'put ''TUVZMXk6emBxIm9sSDY0cD5FRE49I2ZXX3IqdTQ0LGFAUC9HansoZGxRREJWOmx2UktEeUlHQV1HfGEpcmRdJGhPSSJTXVtneUtybWVuWDA0WTEpWHVXI0dBdnFRRH5QJWxUR2VzOktMJDREVmpDKiR1SSJBbHxvN0tQd0twPE14JkdyMFlHX10oOHwyZnByMnhqbnBeOCI2P0ksc3B4XU9rcCFg''@;'; put 'put ''SVVtKlVoZlZgVkJrR2kxcTIzcmguSntNXipoZGJWO09BPUhVKUkmbFZHOGR8XmZsV1p3W102fnEhdCo8OiIsWD9DQlY/WUlQelI/cT5aIXdCLm0ocGZ0OzF4cSNWaC9SMjtyKXNLX1J1WDByZWIhciQmI3tnU2FkVVA1X2d6UmMoaFNreGBQWmwkQUZOaFZycmpmYU97TSlqYFomIjsodzVgN217''@;'; put 'put ''OkxxSWxaVyYlTClUaXd5QkAmQkBQaSJCa09IZ3FqVmZdR0JOKXV2XVBRTkhyX09aNEx5L0tNfkIxcVV7a0Nhcjo3VnZFZjxsUkckOjVkL214N1RVOXBvXllgdmFoPEBEOCNxUlkxYDhyMHQ3IVltOzFwcz98bVJCallzK253NC5peChvTWxBflE7aU0je3V1QTZ4dkI/ZG9bQGJMTTMjfCQ5eEoz''@;'; put 'put ''LyoxRSYqckFqWWk0XnlvT14iMTFiU2ZbWmNYSyN5ZVpPVklEbSVqSHVFPk9Fa0dDbktuSEc2MkwoV3xfPTErdUIyYj5kSTB+Q286YihVdUN4Sis2Zk1yJUFLJjRUP3U2S350M217cUhWN2AqYDpZQTN1cDc0OktxOTZtPUBLRj5xU1hSY2suaGg4PkshaSFYfF1PZ0hJTE1PdmFsRklDLDxFKylu''@;'; put 'put ''R3s9VkQiUDNqfnxpZWclLmJqIUcjJS5kdFtWXWpzZl81KSkmcikpbWMiPW42cj4/YSRJRnNxMjYsa0d3SXlFd2wwVUxPfn1OXkQ1d1d2UWU1WG5RLyVeW2RlZypJI1hnI3VtM10sTiIranZSd1QsS3VPdjxxL05MLD1bUChXV1RQXjE3KE5HdkdOUCQuMjVabCQoRFpIKzhoUzY2PlM7Mn1WJlop''@;'; put 'put ''YGFnY1tkUDBJJnVOUTAjTDNjRWA9W34qQG9hbCtUQ34rSVFhdV9DbkM+bnEsNUdEXUlJQWVaOGopZFAvLzttQmdBYzRhYipXSmkpWVQuc0ZfUTM5ZUxDN3dLUUNRQ1J2WWNAMl56Vl9RVD5jX3xVdSZCQEI4U017S0I4U3Rib14wQFM7ZyZ5WGF4KzBeLEI0SEZteUh9LkdnMDU1Z2M4VndLenol''@;'; put 'put ''UzRHI1pJNVhCWzpXV3FBWTtRWmpgOGNxe0hiUj5rR3dobWJtaS5rT3hHSEUhbyY7cWRYUjpgIzwjNzE+cHt9ckVhRVEuaUVvcE89b00qKVIyLHBYYmpFLltMZSwsfVNJPW4rQSFAYnc3OjYkRiJQNTtKJCVQRChtOXxvQ2NgfU07QmNWZjAjPj9+UVVrKmQkSTRqQlgjM0QpQDF0a08hbFNFYktu''@;'; put 'put ''ZkwrcWR0Il1LW1U7JiVRMjl7em86ai80fFZ+dWNYX3J4RUlPUDRuSGlAO2BeOU9ofjlqV0I5WUZ2WUY+Yj4qNkl9amBjPj1zNVYsOFhYNHgpeWpNZj92R1Z8S00lL1VfVTJkdjN9JmpyN0NRRztVSTl8MSZxcnohcntJQSxdc1EqLHRmM25EOXUyYHllS2pea0tUL0teL2wyUTlYQjlrS1tYa0sx''@;'; put 'put ''O1cxPVFYaiFyIyhEeERaTG9MYFNrfj1JK3RUJkhyWyx6LGxPLjtJSVV9L3Bjfkx2UlkrX3Z5PG0/RWlLdlIydUBWankpP0lnTHEhIWU2JnFifjwoNjopL2c0PjQ7TlpmJmRWMU42T1l4eVBMWmlGMTNyPUNkVEclTGVMWSVTaV9bb1FgOCIvUT5wUT0qbn1JSmwuWGBrMGkwKWl6IVAyIjw0cVNh''@;'; put 'put ''YnV8NixnT3M6b3UjPlo+dTA0Zio4akVOe0NndH1gZC84M3lpNm5qbVZZKy5JZ09MZHh0IysmazNrZCNwSFZwSjdIV2VtUmVfWi8oXkNdcjlYdWNzSUV8YT0rcXdNeUc2fkcsdk02RXBYWWpKcSFyL0hiPU9MOlQkUl5nL0w5Y30lNU9OQk9jP0gzQk59bH51VSlnL1RUIVkze2Vwb3dGaU53LC5q''@;'; put 'put ''eCh2YFBaeUsqWXdzNk4rWkB9L2t8UmZnO1k7anE0cGRdZjQrLktJTDJsNSxnVTZyd1opYmM8YCgjZk17JGl5eGIxeis7ditESSpQR3poMnN7N1JZRy40PjdCKDpsMFFrYjVQfj5lWVg+KF9GdmI+VWZpOSNiamBUVHBEWTBbQyg3eCU9OU1SbVY4UWlvXW42fVQsfiVGOmNqOWV0bC9ANmReZCQ7''@;'; put 'put ''VCY7NFt6KWVZdCphcVZYeXpQNy9ZaCkzc25keyFZITMkWSxBYHFJeyNOZCEyOWRPX3w0QCJlbzNbXio9fjkhZmxIMTl5O0BjTGJkV3VtR20sXUpEbWozaU53Y2JeIUkjYWlvRW1sbHZ6Ri94WEM1OE1oVk4lVz1gPiRwbi8rSDVOOyE4QXBpS3Fia2pKfXYyUDwiTyVVZXBkbmg8Xk8iMmJkVCFr''@;'; put 'put ''anQ8cnY5Q2gjbjpCKEJHeDRNXUMzem5sL2dmM25BZypEfl9aR2hFXjFROnBNbUJIQFdGYVRwKzFkPDpaUHxtZUs8ZlpkKmgvK25beEUmcFhYL09PZnk/ankkZmpCQjk9UGlIPkxFUS9dMDs3XW9EamBNKXxDXTlsb3JpK0BXbDpVdUNTbXU2R05dQUEuQ1NnbUIyVTM7aXAhO0Jjc1FGKHF8K21O''@;'; put 'put ''LjpCLkFrbj1Ba2o1NSlXLk1BSURCUzhsfFhAQmVtPEQhJXhnUHJ8NTkhT11bMDhJNj4la2JgSGl3NW0hMi45a2dbW3d5T3pucDklMiNuR3JtWSJ2Q3J2OT53I15iYGhQc180dkZLIi9fckdePF5zLF9HSDk2LGZiKjRmTTd3azJbLnNBeW07Wnp4KFAjIjQ+VTh1Ym9dKiU2Ul07Ln1ALiNdIig0''@;'; put 'put ''U213JVVpeHI/a0tlPHtnYygzK0VKYktYIStjIzt6UV07Vl44SXZqIz1DS15YfEQhJSRqZywqcl1USU9XWTpmZTtyKXpCVFZZTCI8eGJ1YW9RY212cylSKTlYXUBiN1klWC8jeiV6eUBRLF1DO28mSU1HQDRLMHpqLj9rI101L2srISVrKmkoeyVPeCY/dkRXcitTSVtmdD9LY2tsY1o6JFFeWXdT''@;'; put 'put ''Zkh+MDE6MG1iYlhuaGFHcWFLXS8rfnJCeS8ybHsjL21dekBuaj9gMjo8dzVhbF9IRUNIa2osfEd3dUJYMGIzJm9NR1R1TUIyfUI3b0AyeGREYU1ZUyFPKThaRjAlNDVMVFBgIn4iUEIrd2A+NV9AZC5laDQ9LHRWd2Rwd31kZGVTJDE5fj4rN05jWnh2QV57I3JPIj5fIVImd157Tz5FYDZQendD''@;'; put 'put ''WkMqN10kcGoybyxld319cD4vNEhEWCEuayR1WFhCd1R3KHM1bVV3V0d0c0huN1htVXU9eTx+Om8vMnVhWWFUSlleL0pPbFBANDdTKTImVDw0ZUl7NFRhPDJRSDBSO0xPdzpITGtsVXZNeCg9ckFpamF9VlYsKmRzUF85RipRR2ZZdkVgP1dRbmArJGl+eF40JF9uQnJEMWhCMmpDWjFXZy51ITxI''@;'; put 'put ''V1QlaT1NW3FsVCZGPyhrZmx1YmAkWXpuZnE6QyZFMjtXUnBMKUpJQzB8Oi5GdWk6OXY1OENTMFFFUFQ9cHAsTjFkZEZpNVF0SU0xdTBgZXl3dz00bl9naSI+Llg2djt4QEVVVEFmXiozantaTX5KPTdxZmYvWmhQMiM7ZSJeaXhrezk4SSR0eWt7cGRgJiNsPyFrb2k7T2RNXVEpQGE9K3lHd0V2''@;'; put 'put ''KD9iYihxPHlMRUhYT3plNkNZMzdrZ2I/fSlhZ2c8eC9CaDV2P217Mz1oMCFATE11Z1JdSlRUeSsxUTp3ekBOfTU1Jjt9WEdjKW4wJDt+QDpaLz9xMmMxZmBPKWc/SmdnRl5rbzV3LlFPaUJbMnltLG5INUYzKkg/KTZUV018cC96LDc3fk41YU9BR1l8RVI4PyliLDczVDgzW0JObTdrIjojKUVv''@;'; put 'put ''KXQzQ2ZxJilFb0tvVTdfM280WzZDWExBRGYwSzpBVVZVSEApXUhmRH1FT0Jka0N5dHw2XTlXPnNjL3JzO2BLTHhYWz4pdCxgUGM6eVdmVD0pYS9WNVtWVzFCaU9KSWJEc2ZwRl98fUx3RTUvcUk2QyZDfUZNNG03VDk3SCY/b24kNX5DSC8veURLNkw0ZHlOVkJ9RkxMKkFhakY6fnhBUWhCXkxx''@;'; put 'put ''fFouMEZGWzlzM1RXV191Xyg0ayM+c0YkV3dUe1c7Yy5uRGZ7Q1g1OGB2Y0c+fX1MSD9YQllBRS5faXVKRXIlZ2trNihwRkM+V0lJPDplfEk4JWV4QjFBQno0emlhYTpYPmJJZD5lJk5FcyQucnI/MnVzOm1IQF1mODNWeG0vYkMyUkcmWCQpLzI0WW8lPF1meCRgKnhDcUBpZkhOJXZyVyk3OmV8''@;'; put 'put ''LllhUjd+TGxHS3UrdUgzO0dXSlosP2d4VW5yLlZyPS8pZW9+Z0RPJlduOjBSSnd8NikzWDB0UERXLkpFSV9oP1dWYmlSIVIuciokNnJyajVbOGd0KUNbQTxWRHVnQmZGcmQ6aCozcnQyX0M/MTR9ZF4zOjg0ZXU6QWY9PjA0VDhzMDo4VGQqQjhbRVBHNlQ4d0laPHAhI21bTjRmPyZALj5fVCQj''@;'; put 'put ''YlhUQC4mNHRWalkrckVDaENaSm9rKXl9cTtCSTpbLyxnNiYuLnBWX3QkLzVPfUlGWDxbY0hweEZibnVDSUhFYWN4Nk1jVVNZfH1iQmkpX0dyO0J9LzVPfS5qL1hSO0h3QXJnaU5PWEh9SUVTRUN1RmJecX56cWdzLEcuQXtBY0JpaCFNLn5lXkhiRH0sOHlVLH5XWiIlNE0uNnJqSGZEMWdxJSs+''@;'; put 'put ''PWNnUVNxK09VUyxBNltMS1RLL1k8YikzSklQNTcpQjx3Vl4iQ3t6RDcqNCh7L1pPZ0l0dzZ9IjZBUjx5bDAxdWJZMmI3UyZvaTRfM0MpXSJlYC5bI09PNjkrV09uciZvY3F+fSZvblpAYnl8ezYwJTcsbUVyZU1IP0ZSJkA0RipwSXAva2Q4a3tgZkg8P2BRQC5CR1cwZ1dVQl4kJFRgdDQiP2M4''@;'; put 'put ''RXd0SWZgcSF3Q10jT0M2czNYSmVDRmxwWy5rKjNtWEFyS0VJSTRFN1gyYikzaTA0ZUAhTXRNPzwkKjNtKUJyNUQkL1oufClgUm9FKE9JLD9iJEx7S3J0NldzVjpCQ3tYSElga0hRQy80SjYzemkwO1ZuWHZMRkNQVXkoJFF7Nl5UKjM1ZkwuIzpHPylUR0p3WEh9NXhNe3Qwdio6aHVYSH1PYUh9''@;'; put 'put ''UDd5SihCR2RdLzllInUrK3U4P0RqNS5iTFA6YzVleXloYz5gdEY9W3xHJXhOXjhSUERuWD5gckQ6WSYzV2V3IToxNitKUnlUM0QjWEU/dGNvQSZ0W2ordVJpQnIoQkg6X05jMFVtfXkoVElieGAoSGZEI0t+dD1qM2Q5UkVDYkh8XVQ3eWFRSVJkWEQjS2l1ODRmdWMvdTsjREg2TEFRdDxvdyhA''@;'; put 'put ''SnFWWVJIREtKLzR3LyNEI1k5Qyk0OGtmdCFGcVZANV9gcUd+azBgdXVzdTw0eERnPyh5QENxVmhAYGBpR0VdanZPTV5gYUcrQnJpZWk9WypNRjp3WjI6JFc4KTM0R3pgWkxNRmMifDBFRjZHel93V1lUTlswPkZtU2xGfUdOMGBOZWNjdkRQZEZ9Rys1V1dGWGd8clY9TUJ9cVtwNCkzOFJ1VkhZ''@;'; put 'put ''PFVALlR3KjNRYCszbTEqJGtVKTA8YGJ6IlsxTVdsWGNXdXp4NGVVUzdkcywvV0FhLFksT0tKaitHKyUsaWclTnZYP29pQ0tKISpALnEiMUhgWk90YkNLSmhzVVNRT3MsRnpiNWs1fGJpWDtTdyEzZSVOR1h2V3M3a0BUbzUxMitwVlpZP1tQT002LFMsSGtYKyh3WWlYM09zRHJ1P1IyV3NEZDRg''@;'; put 'put ''Ti9bVUtfRkRZUFdTZ2BOUTxHXztmYE5WdDhmOm98Wn5MUkliJHc0IzQzeil1clZaOGAhZmZhZTtYdzQiMy5JWEZwWX1WR1J1Q3Q0ZXIvQkRoKTNNNUJydXdDbGt2UmB8cVRaejE2PjI5T2M3JktDUUl6NFkvbWVwWz15KjM1aW1TYVdwIXdQOSl1NCIzd0lAfGM0d01ZL2JQQC5TP3RWWFk7ayY4''@;'; put 'put ''U2FtYzZbIk53OiJiX3ciKVVpOlsiTmA1Ukd5OUA9UVE4KXM0IjN6SF87OFZuNWVyKVlqKXRxM1tid0h8TXg0XS51bTxbNjB7ZkIvfGcoTndHU0pvWkdnU0UzLC8hRTp1LlcjW3MkPj4idlFKX3lwOHBKM2B0P05wYDJzc2cseiY7KWR4XVVvZDMvUypPX3ZjQVdYMmx7Vm1WejEuNDJRSTFedVNG''@;'; put 'put ''IyhvT180PDppeTRwUU98Ul9FZSNPJnJSITR8NywrKV8wN0NXXj1EY110JF87YkMoPkt4QSNSUiM3Zkk4Zn13NjhuPUk7MyljKTxHVSs4Z0pPY0lxIXBDTGswRmhOZmoxPm4jTyNta2FhS3pSTWN2Q35rXnkhLGkpcCJuTzBPdltWXVNVSDt0d0Qld35NPl9ETiNPVFIvQmUhIl5TaFtmd3FwMDw5''@;'; put 'put ''bzNfJjc3WUglU3U3YyRBI213JDJaSkNUJC80Sjp8QVUkX016XyRZSzROZ1k8dG4pMWJVUWFiNzJqSl0/ZDUrMnZ7RUEkZjE2bW4lbDBTeFVsdnR7fmxRbnIwXypoKS88dGcqVEhxQG52blNoLFU/bFkwbU5nJll9MFBgNm86OWYzVEY6SyVYPEY0fE5PM3xhMnJtMWEyUkklRDNnME0haUBweV5F''@;'; put 'put ''OnYlamUyeFc6PSFfJTQ7YXVbISY2M1ZicVopKF1Gbiw5XXQ7YVtoMFVGITE6SHVYeFRtQ3doR0ltb1NOQHdALykhW3thZkhZayomJS9kaFYyZzBvJGImN0MhT18uWEo7QFV6JGZRVTM4XWksNUpCOUlKP0Y/a1FPRGEiYD8kW35MQ1grd0p3cT9yO3V1bz8xKEMpaSpVWkZpRCRNeWFIcF4kNlZa''@;'; put 'put ''cDZ4bG5eYXlFQHlsOXhRWGpaWncrJXZWPTQ5ZnlTIzdUOEtuQ017V1BoalBfcWFIbEg9ZHlHL0xbYyFZbkw4NHkiPXZ1NXQ1P3YqNmM3WTFGY0AlS01EZ3smK1txYjNLSndqNCEvZzZbOGt2c0BgPD9nekApfDFgTGtsXnokbXg8Yz5iMVtvbzIuR0pTP24sIU9OIjxfeVl4JmNQaH4haUdUNlk8''@;'; put 'put ''cThjIltmPHx5NiZsLGFpRHFAUDAqTXYrJX4uR1NYWjZUNiE2OUs8X1peKnxXM15nbTFTZUA8SDcpQ2FUOnlkSUFsNXF1eVpjdTdMeTE+TC4vb1pLNntoMFlPR31xV3dEe3J6RF1iOktaWlI8elU0ZVJnfDtYO25UOVJAVCoqQ3A4biQsIiZbdFZCY3RoRUAvTXNQUUkqImtwVTMjZm9RIU82KXt2''@;'; put 'put ''MTojNHY0KE1ENSxPVCxGMkpxd3pGMmg3fC4+PiZ2cElyaXBbM1d8cSkrRHs0LF1DX3EoQmNdfEdEN2pLZS9aVWNbZ1BAYEFHZltvZkh1ZiZFKT9oK1dvZiVBUjVDKEBCV2ExJmk1bSFMdkBlfnpIdT08UXAiMEspIiJeOnZgVSwhaUxmLkIibj0sVn1EIWZvW2JoRFpYLChffGo6QURIckRzajxz''@;'; put 'put ''USlhL1coRjFrNj43d1hzPWQuOSozZnxYX34/I1AuNHN7MSowUVR1WztgbVlkKTlTKl94ZE5RRVVpLkJpfExWYi9WSHVPMUY8bF5Qb0EvOztXe2wwNGtSJWZdYj0qP3NsI0dlV2FgKDlbYHlqImZ+K1ZCIztySnVJPntNb2JjVT9nflE/YkFjS1lbS3NvYjciUGlLWXZHPHp6flEhPDR1N1VfODdu''@;'; put 'put ''Sno/OCVsUVYsVzhrImB9Q0B0OFUzVUIofU5MPGpaSURDTl0yRz5Laj4uN1lfMm54NTZPbFZ1eXpuOS4+JVkpT1FhOF1yNTxiR2wuZm1YSlJHZVpoLHJSTzZhIj5YJkFjN1JtLjtxVVhDKm4qSF5OPHJPQ25eJitKZENfSTRRViFULGFpNlUjNz0pT0wpUm9bb2JoKVBfeDVjW143fksjMW9uWCN5''@;'; put 'put ''N1kxXjV5dVo1LyhzPCFPZmwxO3c5YGg9TXNxXi5aakIpIjIpQz1dbnBOb1QoQnlISWR5UD45OEN5PmowNU0+cTwsOm5XcmNDIzs0VE5VdHRdO29BJC5PVkNaX25hYl0rSENJSEhLUltHWlV9MzB9Y08yTE1+TFopUkUyI2peXlBiLjcuPFV5X118MHg4bEgpQyFYNXteWD9iVj8rM3woRHtLR356''@;'; put 'put ''L1RAYiY0QXNpeEE2XmR+el9DcVJNcEBEcWNNMCx0N10rVnVvaHglUC81cywzNU44KV96Umw+fVIkKnVPYVtQMzx4c3g9bC5dO3FzVn4mSU95QkhfeVJDalEweHo9aiY4SmF2cGZhKlFdW0orKXUuJntqanhDZCpmJVBRX3w5XypEd1RebDpEQm5LI2x9JkBaZmg3Iy5KNW1qNUhDNWomSXBTMVRU''@;'; put 'put ''SlZTP25NMGg7TnArb1BoaV9DaG85MkRqdTFYaE1xVnF2fVs7KUg4Y3ZzeGRdTiYiaWgqWlRSbW9CeDhTYW5EQGU6ZjRMQl08M3x0RHklTlAjIWdkUGIpbS9QcmV3ckxzUGVHMyojVyJ4OUpIRDx0U3RselhMOit1ejRJOEU2TCo8XS5BaWUpXzA1PGNTXUZ3IUhnKDNQR0pbdGpJN1Z4Rl48SHd3''@;'; put 'put ''ampzUHxiWmUpTXh4fV04SFdhRVo+ZDMhRkp1OjdWfXR+a1Iyc2QrNSo5TXF4Y3IsP2QqMyI4KmVUdj9kfjRSWlFma04/R356WmNzVnUwTmc+YHhKLlk9aVYsYDp0XTxESHIrRUg6JTFUN3dWaSVmSmBObmNAJj9iSlhRPkZ3KTNTdWUyOXE7OS9VX1dBLDlyR1s3TnZSSlgqIUliNmc5dXRqNSFr''@;'; put 'put ''YzRaR3I3PSZjfXErRXwvO0Q1OmJjQC5JWFIwKTMkKXJTRyg3U0dyUSFGQCNbXlNTYSlkc0pPNE4hfHEmRWg1S2ROOGpIJm8rRllXJUlJJDc7X0FeKDg3NnlMSGcha0c7LyFhKEl6QHJBdyN4NTVxckFnKjovYiYqVFF2cz9KVDJ6fSNwTXJNMyl8PFBgd3NjQSsyZm01K2dJdj1YKnZFKUpFK10y''@;'; put 'put ''SHhFP1EhSVl0LG5vTTpTYFl2NW02dXMxfVJkMFNSNl8rKi4wXll8Umo+NDI5JSpAKXhmNk4zUHg9USQxLGFRcGclbXZfPVslSGUhT0dYdWY4ZHI1RT9aaFFmSjVKWVQhTGdoeCJVU2sqTHpYOCl1JFlSRDVPd2FAJWp7aiRqYV80Vnw9OyE2LGpbQF18VDhnI244cS9sMjxEIyp4ZDhYVGo7TTNg''@;'; put 'put ''aGkjaXUjKVsyM3BQKU8kIWBvO25UJEVoKnAqOkc5OnxWezxLbCNuWXlAKig2Xnh5eH0/KSshJns/XlhRXSFsXyFfS2ROXisqNX53XlNsOXd2ZDpRSyR3O3FqM0tLOUlyTGJCLkUjS2cwQ2N9T3pfNnlSbkJyTGc5aXIleSsqd24pfGVpdXMxfTtiJlBtYFU6Kyw8UE1FIWFjcTUiVXR9bkMhdkBM''@;'; put 'put ''U0t6SzQ7USlRSyg2S0AmVFBDTU1TVncrQCp8eUlkSFBvKCxNfGJyRkJxW0ZRPlNSQz5mR3A/Mlpydnp6NGVXYChiMFlDJENrT0AzSGhJPz56a0smdGltPEI7IlpGQUY7OjUoRHoza25RYzVGb3tQP146JTMlJTQvdj9uandMN3Y4Uk5obTREOkshcl8uJHtRQ31MV3V7L2xldXM2bDBKNiRiUXdz''@;'; put 'put ''NmJ5b0I/ZGZRRzYjNz9rPE5yalVERC55IjZve094ZHcuYWwsazUrVyFffG1JY0IiOSQqWyFJcyk1T2VUTT9PO3FHalpNVCZhejRle1ZQZHNZbnFKWTdkJD89Z3FnP11MWmFNVUg9ZEs0QVYrO0E+eiYvdExXQStWeUhpMy92Pyt7IjIiVTYhWj5AKE4rT2RlKFIrUnp+QGR0MyomX0tMIStddl4p''@;'; put 'put ''Rit6NEwvS2orSj1WSj4iJllLRHE7ZkZjPGxbNWFQNEg3UzUwNVM0SDVTNTA3NHBYfXxsQVB4LDZoL09oIShgIWpLI1hWeSNOKFNqRmdTVEw+OTBNQntVdzE6IkRmcXUzIV8xV2UsYzMjNz0pVnlfJTRMaWdRSjF2UDpQWmplIjEjN3JxdCxJPilKJlM/aiUkbywxamtAOiE4UV1Zaytxa1AuME83''@;'; put 'put ''O3wlQW0iVGROTGs1aF56N0pkWVE4ZU5pRSZTfipNPjdTKzY7OSkhLilTKkEhVzMmaWIrIzZXOiUhc1J4KUYyTXxNdXgpOD11TzFSPSxiKXolR0pVcmZXbmclSjAqOVE0NEFXSVM3SWo7bGt9YGpJITFgaDROfVM4X1BVZTFeeHwyOSwlKTZKLDJFcCIoUXA2dU97enNTTl1EMTp8VnwhIzNsITlC''@;'; put 'put ''ajBjMVoyXm8vIUpsN2I5bnI9YC5LNHp7I3xobzluNnB6ZmhgZGFiIUFXQFQ+Z0guWDFIaWQ2KlBRRn1hX1VuZ1IqcDksfjVOcEpBJTtnR2Q1M258SS5MbT0kJTd5OTNsb3BeLnMhdW42UW13TEdVPCokVXA1OiRndGAjVUx4c2FAbiJML2ElWGsuXVsxOXhpdzVkJlUhK0FQUTYjaHYrQVJ4dHA5''@;'; put 'put ''S3RAdjYmNXAhRH0/PUpROWo1YE8uQSlEMi95PFRxeVZsck5xMi9zeCZqW0xSfWJgeTV7aU1DdzBoKUlRTjYvYXdZRkcjVCwhbklmXTBwYmF+VCUpXnoqPzVSckgrIU8oOzhARC5nUHF3K11VMXwyRE44VGU+RVk7RU09U2tbPTNgZldpPEUhXnAsRyZFZEw2SkhtODoqcmJ+TW4saUN7VlNHLkVT''@;'; put 'put ''JlZaVVVFWk03Vnl8XiRrZyFQZERMazd+PS9eKStNOzQifHRDNiFBJVdLOk42NTZUdSVKNG10ZzxBM3MmcXVCcjZ3RTp6STJkSHt4UkBZaWcmXntIc25FU34kOmQ+MkErK2B9InU2LjZqT3pxIi9wVWQkaSRIe0U0KFpxPFVeeXNacklUU1A6WX1hbnJ4diVKSXhWYkxSIWQie1F2IT8iIiIqVEQ0''@;'; put 'put ''VSgpJCVBNjlqYDhjflImOEUkXj97eW1IJUNmTjU3fjxLdmpQUjV4NkVVOTVoKVo5NG1dbCZKOlZ6YmlWSiNLKUZVQ1lfRXAuWVE6VU1Zcmk4WzI4YUhvblNZaDc8Q2w6JVd0QGFCWEEkKGs3N3s0PFZAKXZFNntMIT9VbXduUz4wKGkzPXV5PkBNMWlKdVcxISs5ejljemNGb11yRl5bJjsrLiJ8''@;'; put 'put ''bD9KQF4qNiolXTJSPkk7K0p3fSsiOG5RPn18W1phc3BlTk5mJEszditOfHVnczlDVSlhOmhkbzlHbjR1aWRfXzNTcEomZSwkN3tMe1owJDIvbEBnLCRDPDkuJWYxTkowM016VV1MfHc/cDRTb2RCdlgkOXlAKj1eV19hK1dbSkU4XnxUIT1HK1tRZjY/VUdSQl97KyNSX20je1BzVDxhcGU+eXJ7''@;'; put 'put ''LEBOeztwQGROMTE/RV9aYnh6Plg3Ojs9RVdse0BBXTJ2V0ZFKCQ6a0ZeeDsySCsiLHtdbXdYLkpNIyMuJF1QZkVrXjV2cUtrXktdKFB+KFFYSF1ZS3tIMzYvS31SQzZifUR7OD5Ycip6MDchXSthbEdZaC4rUFpUK312c3coSClYbT9iN3s3dn5jb18jUTNuMWtNMnU+N1pWIT13dVJ1V05vfiVY''@;'; put 'put ''fGQzLHI7THlidTRpa0RtMyFDPGRKS15QeiMyXmxpZ2s1MmM6XT01UE14eXB0LFFqN0ZIZFRNNlU4UkdUQ2YpOU9bay5UTTZiQ3MjJWcpbz5rLkledDZaV1MlV0pYXTkxa05dXjpmZzpIX2x8aWNzJEJnMkB4cDZtcGJBVGV4SjopZl5aITM3ImAlLylMJXtbS2hjSStYWm0zW2p6bCNoW3JERWpT''@;'; put 'put ''ayI2eE5yTFNUcFUuaVhdTXg+Wl5ZTTprTW59c1VjKmRVQl12Pj5nSDFkK1pCPmQqIWwhajxIZ3JvIiFyJUlUQSFMfStgWWpPYCR3Sjg8I3B1QWIqfXJWMShrLzEodyNuPzFuaCYiV2B4WGs3YypKaENDIUM1Wn5tQnpzME1TW3RwY0AwPXEqaEdWNjA/RT1JSTY+Wi4oQ1hDOiUjQ2NyKyEoVSha''@;'; put 'put ''eVd0c1lsQCw4LDZbYlM2UDFWPFc+VVBSWShRWmxGbjlAVno/e1JTe2NUY0ttdjcvVnpYKWEmOCFiUU1fZzkpJXVYWX4mRiRDUTdfQzxSX1h3clJ0WVNERXM0UjQxQ1B4WEdkWVl9YkZCMjgoP3RBRDc5OWk6S19CeTRaeVlmUnhYR08xUUVQcV09bGQ8JDV7OStnWjs7TWhySnkiR2YoY2B+YiZD''@;'; put 'put ''ZGA5Y0YlL0J9KiZjK1cqbzl2NFE+a0N7ZzZeL0tKfmVsZSJmPWNiKHshblg7MjlfN05iY2EoXXI7fTpLSWwpRX47NWV9aV5xaWI2M3lXZ0V7YVg3SCJzT0BINVVVWExXMVlGSzdbfmAlOXRgPU4lOWo8cCwmS3xnYVZUUzVzKjg2e29sOyUjPDJjYiJbXTwoMUhfZWZQbTslNHhHensoTThFPGd7''@;'; put 'put ''Rk5kTGRaIWRTamUyJl0sUEVZSX1TdWNxIns8U0MjSDJMYVlednhYTV53V19dQFEvTE1bJDsuPnY4dGR3cUtjPnY/QjN7Rz9FaXNxZU9DMCQhZVtnTllvaFhYOVlIbnVVd1JyVGEpZ3UmLlVKMXlaP1NoQ2t6Uy88REdnM3IhLHdeNkM6cSxGXnQub0w7WEkmcnRJJDFibzN1ZFJaZjNZIykqYj4z''@;'; put 'put ''NiVjUXNeVXYsLiZwdiNDeDxDbFBtMDxnVEZNQG9IPEB3dU98b1dWLHhiMlBdUilZKlNbJWZCdlgmLls5e11wejYyKkxEKixwb3lkYnVQXU16djsmJjtbelpzJH1NMz0pIVc1a2RDeEJySCZ0I1B4KmJXOiUpR0sxXm9mW0B5e080VH5HPV4hYG80PzxZbDNrV25sR3FuWXcyTVdfTzE7WWNzZlZ6''@;'; put 'put ''dz0qWVptM3l5PnFgRipZVW93dnc6KjhhZypUeHtIK1pxUmM6ImdlPj5sOSNgV01US010ezVQdWpLOS86NyNjZFhOSlpUbCVoUmphTXV8bFFFPlZRR208dytNXVlrK0Ewajx8YHYkJFo4bTs7eEpyLmhIcWIhJXRaIl1ofUBPQ3BpSWw+UyhddmsjQW1KakdLWjpzJUZediVNUT9fOjVwTXtYamh4''@;'; put 'put ''Pndxck9tQzU6NHhMYmohaTxbbTpOXlBjcXM1MDhaZUdya1NoeTsoSnFMM0l+cXMzSVtQMmk0NEJUXTIuQV4uS146Ly9gVzAvOiM1X2diPmNdVnB3L1VhKldecTZ0PkE2W05JSzY/QDFSY1QxTGswRX0rNUAldT1gTmAwZjBrZ1E6PnpHYVkzN2VTUWZ3VmRJVHZkW1ROUXgmN2VCVEMwa3F+Zzwy''@;'; put 'put ''Ll9OIzxAIXFmL2dnXTAuQnwwTXBvQi4wIVhvaiUhT2ZQdkBQM35xb2ApfCVzWV1ENTpSYy9tI3NTVVNhREUvbWtOYzw2YVFGQGxKeVAxKEAsZ2M8ZXVtb1JAdkp5LCI9fE00TEZwMmdrMDdKKlcsPSQxZjxsby9pXmhUY3AkTkl5clFrZ0Z2US9UeGVPcWJoZ0I6XjAreylOI0JCMXd7SSpTaWQ8''@;'; put 'put ''WzxyVE1FSSxtNUk0TitvNl5uaHdjdDFQPFkxNGRoeEFEbj9tP2dwQSNCOlROJiM6L3VrKS9NVEw5WD4hJUYzVzBuajVqZltBWkVbPEc/Z14qeildU3ZmYERqQFUkcmFobERyMEpgT3FYX3x1UUx9IzdgYSZKfUt2NTFHTyZ6OXhwYUpeLHhPMVFGVWw5OUsobChRIXlbLnBaSF1yQVVUSll5e2ZU''@;'; put 'put ''YSZbfFIhclJ0NnY1MUdrUm5nLmd4aG5gZyYraUo0JDFBNT9AJXxNMUwmV3loLGdXaXRdUiI5Nl0rTXJJaWc1UGtva2gpL016QjFdbiJ8OiQvITd6XVVUYlllR3JrU0hTJGs3WClYLFlkPnh3MG9jez5sIm19Z3FjcUJwL2J2cnZ2Vi5wWWI9K2BZYkAoMU9fV0pNXnI3SyJwcz1Rcmh7JkBJPUx1''@;'; put 'put ''TCgyamosK0MzTTxRVW1mSls9W2tSI1l8Z3VaP31UV14mOkVjTlNZR3lvKFVNYUZfQGhWKk5VanRLMHFFK0E5PFdXeT55cD0lUVskZFNKTXdbJDdldi9hUzwqOlRtSTI0P1kmOFEoaXV6ZWBdaUVrSiZEYVNiQ3RZL1JncCxGYSpLcSE5Q2hDKStDd2skfVdFYWRCNjZBd2p0YVozZnFZempUWkBy''@;'; put 'put ''eDJJJHk7KD1qQEprdkdoXi9qYk5yPkxAb3VVK2AhcGokLGxdKXNtcGJsaiNOYTdxPzZ3PSlrX3BRSFQwaXhDeFQ7JHFpM2FOd156XnxgVCR5antQZFh7Z3sjKTtBdXwwIiMoajtMI1ZQNUhuI2h2aFhqbzU4TStAK2I6SHc1PlEsPUA2JmJ1WSIudnpfWm8pKUlPbU5oSXxzVnA+bXt+e3JiQypP''@;'; put 'put ''aCRfWiVAeHhHW29aRzV3JXM+M3VWdDZ7Olk7eW5OLGpIZGk/IW5mX21Ob3Qhbzw2e2NyVF9mYSZFZGE9RzNraGBLYTM0RXQ7bkZdKm09aDR4OkU0WnQ2OkAick1INDtRUTJ4MUU2NGZ7SWtWe3BJVzAyeHVCQjVDZilsfjg9ITMvQGJeSzdyUDVYMTZ2OyJwYHc0bEw0Z2hSfTlLS0pZPjxHfT8w''@;'; put 'put ''SSwuJih3RD04JnZHW118bSNlO1R6R3t6cGdPOX5QWTFJKGw7eyp4PEl5PmBDS2ZqNCozaDNnUzFfY1VyXi4maUA9Pz1kTihkTXBPbmFORDk6JU0+fStkRFo+PGpPPlhTRSMqbnZTMkFfQXRPZk1qeSMxempKTk9OeWE8ODhFKDFzcnFaZ2shVExxQFU7Wl5fcWZeR0ZvWGp6PUQhdDdQSj9jJFln''@;'; put 'put ''eHZPMGRQdj5bRV0zaXdFQEg8O2Q+KClOUHgoOWJrLkFEI1ZhTXhWUyMyU1glOT0kQEV8XkpRQCspcG9FSGg9fXk2YmdxfnZJai4pfT9mWlR8V1ZNVXhSKld3KEN0SG93IVdbP0RVQShoQ2ZQRG0+bj4hfio2TDRgW3k6KClpPUNDOl02Q09wNGdnQTZDOHNKcHlVZUwrPj07KUhuVDFyRU5GbiUo''@;'; put 'put ''XVEqe21tViVefEV0M2sjfTRLYzRmQWo3ajQkblo0RU9NVTpXOT45czpta3FbNk1OamhPbTpXZkkjXjN7dygmeHVSLjFqNC8yPSwpfEElRmAqMUlGUmZbKiN5WnNHeWVCSjErZ0ZvfD1DbzFWJlUhT0dgIU9lPTF3TklqPDh+MD42QkJEfkxHWUd5d3JDNjFjek5mTkApWlJ5PyFIMFZHTTFOWmBa''@;'; put 'put ''T1ZVQmpML31TMElaX0lOR0cseEloQExYInw/WWVkMEtLOUMqLGcjOFNxb1h2ZUpZMTJ7IU9IaUR7bWlmN0JxWWpfNWR1SWRdZ2U8RG9UfXlKXlVVOENEcTp4amghdSsjSXEqTXdudjlwOSw7NWJRXnFEJkljMSxAUXRFXSFTZHlnNkdjNCNuS0tQN3xAJUF3dl8qbnVvR1ZVcFQsL35sdnZRQms/''@;'; put 'put ''MypNdy9hYldqUjRhVz4mZzZsaltHWlJlMW95PTpQPl9OKURORXJrIyQ0a0swXngkQnJFIS5nWmE4WVJlSjciezkjIU5ESzdKSUZIUjd0YjNicDJtMipCJXF3LF1FVDtVZW8kQDkwVVkoYFYlKDA8UFVFZTVqdFRUSVchd00saUtNYVd5Uk9NK3NIMT9eaH5KUCtLPCxuNUtBWjdeKU1WJDVWVlNR''@;'; put 'put ''UlpUIWN8KkVtV0skQmohNyFdaXRYLFVYOVJBblhZMWJ3S1oySzdfQ3Q2W1pRWl11VlssR3kxMHVSQTJYbThsWTBxUk1hQVNCMlElP1p1N3lpSntwZWR0S10qPS5hPnRaXXdNTFFCSHpePUtDR11mZG42UVA8VTM3STBqUTBVNkVoWT4zQ0RDXWxTd1pJe1d4R3tXb1E3P3oiPjhqTXswZD53R3ok''@;'; put 'put ''YD1+emkmW00zVmA7RGdrWSJANHVxa25rU1VHTXdbN3VGXnpzP00kQFhEVjF0R3lTUjl7VUZbXz1pImV5QW5UNVN4KmNob1UqeVBYWFp3fnlWKW00WCs9NmlfO3EmZzlaSS5FQl4mKEByUUZbIyZrPlRETT83dFFXbCFLSyNxUnQ9PSQxUnt5JG0sRUhwbSxQfGswJCsjIlRzTFFOfCRPOmIhdSV5''@;'; put 'put ''YmtUQG0wdjROaExFUjx4IXlsKEtLQEwyV35ePixUS0BxYFtSPUJqVlUrKVR0RCZAfU5RZWI7RGdpKWVoS2JRaz92M3JyUClFJjRmdzQ7Wlo2WFVpIk1jYFs6bXJuc1pwSzVhJlBsIWdpeSVKSXp4OilSZ2lDRGY5IU5qKGxGX21TU0RUeGJISFY7MVBAJDhGKj0/WDdhMX1AZnlQPmp0fXYueHc5''@;'; put 'put ''UCY9e3IhbSg/Tn5DeFF5PU8+dGN4bW5qZXdwfkpjTigrVlAlP0IvRCNIVXpyPSReWn1OWlZGMEdYKz40KV0+NVkwVD1kLnlZdm0/PFRXIj16P2hsMS5gO29VbndARmhLezsqWkhWJkc0MlVRSyVuXktbbCYiRE43MH5MJUlmVl52Wi8kfDkvVHQuQmJBZjgoJGx1YWIkX3wvbDJtLy9rR0t8WyQv''@;'; put 'put ''WVohWThXYEd8b0AjbnlRe0RRYXppc1peZDtwLFA5WCJZU3dERFgyIklWd2xOSlk2WXtrVHdqXn5vPlJKWWwsZkxjJllzKTJBSDNxSD1VWHlgS055MykzPy4uJV80cn55eGgjamt5bTp1X01ENWFDP3EkREZuQnIrPGJGMzZFbTNGO2JjT0xGN1g1PjJlN0s0ZVJgVF5DelpxcTIhS1taRi5CWzcz''@;'; put 'put ''NTdneiN+T3tHYFIjUnxKP1twbSxHc3YucHtVSDROeSlgXyNVS2heXyNgR1s1cWp1IT93Yz58dGg8UEh9R1VAR11CWzkhKihCcDBRYjxMaHZ7PVZsRUAvWVlLWDNfaHV8YToqeXs8NFFHZ1FHOWZVWT5uaWp7RixwaUdIXXk6VV04TkAmWChsbTo1LjJbRjRHVV9CMUVeM2lgWmd4QmwpQ0VbJHdn''@;'; put 'put ''VmlSQzYqTUJNYDhJX2g7RnV2cntEWTIqTXhzZkBxdmZ3U3tANGAzWihaIyFwNWQjWmc/SXZnOVJ6KmRbInIwYV54UU9fMF91dyVRWlQ1WlQvNixOYEUwa3B1W3B9QzYjendHdjl3cVd0Y3FaQGZ2P31uYlU7Zi9eSSNhZCM/JSIrfXZUK0hvO3RYW0ZWZV5bZkBTYko3U3tZdHhmYDJfVGBbKTxn''@;'; put 'put ''Tix3fThVO3QiPHtYVSskTlcvSDhgQDJ7THxMOWcwUngwfT1ad2J4KWgxJVdlRENhV2QvLmM4VXkvTC5ZKFNaMmh4cXleLC9GMTNGNmpqLCtfNXI5ei44OTdvK1lTLj8qTXdQK05OUlB7OHYuRVgrbm0+JkJ1MzhjZzQ/VkAhbCpbISpwe21+Sj9zYl48IVo9cH4hJUp+cVl6QHV6ckAxQCx5Rndo''@;'; put 'put ''PldSWTp5M31UPT18YVU3KyVSel8zIWxeYD8ybTg6WGp2USlYW3Q0NnZGWHFwezU9UitlSTdjZ1lFJTpJWXdLK2g9JiFiODM8SkMmYyZXOXtwbHEmPyJeYzY5d0tyP34zKHxdbipjeHpyWzJ5fTxbOT51dXFYP1NdUDQvVTd7MEZnX0hraFFbdWgjbDpaPX18ZU1AayYoQ2tfJEVoNStiaVt1NCtl''@;'; put 'put ''VXtpZEFNOkVSPCkjU2wwOl9icnswOFF6PWdwfHIqXjxBTCNIOXw6Sz06cFJgeWhbU3JvM344KDE2O11uXjBBbjRzZywzY24+ey9PIyk6QWE+Q0NxKmF4Sjl8T29KfTB5TH1gXlRKYWJNSXE/MUxUM3FvUX0qNng5di4sVk47P05gRFUjXU53NGU+YEFWZzlpRVhsLlgmVWYyeiptW05MYFQsQz5+''@;'; put 'put ''RFhwQHdjS05YdnM4dmpdJHYvKS9HRCgiZjFHKV4yfkBnbnxTeXs5aUwyQyZZUnEsbz0sUCszWSY5ODgmc29QYShPNis2ZWlSZkZGXUMzSXN1VnoqL29iMDNfMk0mRVpvXmE6OVcmaVY3Sn03SmZGZXRhRiF3a20+dURPVTkmRmA1QkNKSWAmbzcvS25Sbn5lYXI0ejUpfkRjaCxvSmdCay9kXj1z''@;'; put 'put ''KyF2c1YmalUlPDNEel0kPnIpQ0ViTG55Xl19O09LOjtqXiQ3RyNBQ0IvTCp7Qih1Q31ydlNhRTVAK0BxPSV5LjpNPnFGZ2w9VD4jaTtCfEhoJG5hej8wcmZ8WCw4N1Z6Z0dOeTx5Qi5YfGt2QTkhcytgLlMvXVZyNDAiNTZoeSNWXl9EMzw3UllAXz1TdHJ1WlojXm05eE8lS3VuNEMkOGddKjZb''@;'; put 'put ''RihCeWxYLFtDOGw/PnsvcyJBT2FSNFZbMyt1WHs7VkNQamhOYEhDYWZSQyV2YVsvdT50dj9HRzhvL2NRb0dyVmZ2K295VEQiTzIjW3xrSGZxPSUvTW5uTHtwfTQ7TF9XY1Y2eT9LTC4rV0QiT1Q0QUdETWkzUyZYIyg7U1ZQR3N5YEc7O3FNe106O24zPEs4LDlqVVpicmJ6cGQjPCNDcEI+Qz1V''@;'; put 'put ''X306JVMyQipEcTBqSWt8bW1xQC9yNSpKViN8Yy8uUiYsZ3lGVTdLbmxMREdFNWpPKm4kPGBLXTtHPWtHWVE3e0Z6bXp8dzg8QmdjbG4/OGJLK10mU2w9UCQ3XVNkYF8zM3EkbjxOfTllRltHKWAjcD8mKDR7KXkmTFZia3UxME59R2goL0R9cCQleXIwWV5DJSkvNltvKDwlOSVBVzs1bSRNaV9Z''@;'; put 'put ''MTVlZTdzYzVtXWp8PHkhOz91NFQifVZwQih2a0IpYzVaJEt2VDtML0k3XTFEK25jKm8vYnZmdHIwR1JtTHlEW1V4Xl4sVDxSR0RxPmJZdVhCZEZyTUlfb1Q5I1MmMUVQT2pbNXche0MmX05NVXJQUiZ7aGs/Ki5XSGpxRT5QV3tZSTc6WWxZUWZda1cqV0gjK3hTRGN3P2RwT3dMWFZ1fTx2P2Rw''@;'; put 'put ''ZlY3cE5sZ1skNC5TUnN6MkFDV3FgdCl1bXplU3pWQHJufGVaW3FOaTokMVVlflZhXkR+JmMpYjQkRClDaiopcGZANGQ9TmYzfHo9Pj5CZndCKjddNT93SStPQFlvYlUsUStSPixffEd8PiJ8V3NbZH5iX3F+I3xNSHxhOVhNdGpLXmImc1E8eGFHJlhEYzdgMGt0PnNfakdsN0E2c19Ham02fFUk''@;'; put 'put ''TlBleSQiPE9sQVZFNUYuQVZ3aVFHaWsrLzZ4OXBuV0hHLGc/JWc5MCZ3UkU6ang8VSF6SGM/WXglU0cpPWNec3dvTEJfSER7VEpOOGFBZCkkQXBHaj1gKW8/WWA9VzoifHU+fXpbKDY1dTNKJW41cn1JeXRbI3giTXhdNXdgWyk9Kkl6JmB6KHhCcGRfMVo9QCRgOFlgJXdSaF5ueiw3Un44O1ZX''@;'; put 'put ''YHRKXTJ3VGFBZGhaX3BHalN7dlt1MGgzeGRoaztVW3xeOldXYDNyY0R7bHQpU0J3YTtZKjY6cn03SSR6ZzlDdz1sTmB2W1AlOU55ZCpATkRYfUhQazlscU5CWWNiPkx7X28iPWx0dTBYMUIqN11hKVQkYF1aM1pWQThDXj9HPXFlTVtkND59ejVMOkBXRiZHaFFJY2QmPElzSFlGLitOQWIlSzZ0''@;'; put 'put ''MjFsK2F2NVNhUi5Ba0VBKmguR0J0d0QoTWdjODQmaTh2TklOYmgiRSJiTFJlflFNTVZEPGlfQyVJV1hMQkFBQUFBQTVGQUF3Z1BjIVlnJn5yJSlRdjg9fnJfVG84NSFBd2pfUjlaejVdbyNKPDpqNStCc2I+ODNzTiV9NUxrS3k6Pl9tR21QIyZYejFETCp2PX1lUytfTDNAWTdIeTAsISFCbyE9''@;'; put 'put ''YiMxT1AwMFEyaUZoVGF4L1pfUXMqMltoM3thKClKUUhuaX5Xb3toLDM4R3BTczBnKlQ4PzQrOn41KyIwYEIsLCR4ZHhAY0t2fWAwWUdyOlUxXmJDTjBubHpjanhkOGhJbDwySUFbXjwlITddciVOc2BpJCpUKEpNeXB5KCw9NytuQiVxVywmMUJRdn55Q2BHbVFIP3dYfjxJQjhqUnJYIng4fko+''@;'; put 'put ''VENqUDd+K3gkM2cyNCYhdlorUE87KjtOVyVoVHdQbXNWYlBsTkA2XnkxZEFRKGlmK3RgLDExckdCdjg5U3xzcFoyVWxnfFArQilNSjBHRFQ7cWRrZjVDTDJNclhjdzZvfDlVO3FBUktjYlk7a1F1S0A/PXN8WEdhQislUT0zYXFhU3FheGN8fjFdI3IpOTo+Ln5RKUYzZyN+Y3FSTF1FemRxT0ZL''@;'; put 'put ''Q05zKHcrUzw5LnlBUyUwQCR1LjlTdjh3WWYoKU5QbyNqc0osdmU0QmltKCRXOFE/c29sS0U2XUcxVyFUe1NBRFA3OGwvKDdEZW1WKilyWCRqTjJGajxHSzBMZz4uZHhKImVSd3gwK3ZIVEtGTFImQ29fLG5DWWQ4a3BMMVchS2Jnb3xiUklXbSYrMUpvK1FJYjRrJlFpbUs0UGIsTjhDdnc6c11l''@;'; put 'put ''Wz5LSlpRJEdJJjtKcTlTMFlTa3NlZHxnZ0hpVClGPjIzJD19Q18lczJlOSJ+b2l6IVVedmt+aytUKkJ8NjpmVXByXWUlc2JHRGdfenVBJHFLW0B8TVVIL0FxPWdRSnoreX4lXTFYOTs5e3tnND87XkdUem04SnJPYHZ7RmZfX1ZzLnd0VlglUls9a01LTUd+Mm1kekNQWUVyIU1+ZGYkd3BVXWw2''@;'; put 'put ''U1NmLEUlIkE0YFVLSHghQikoUTomNVtsW0FZaDtVUExNYjJNLjhhXkFCP3NSYFFpSn42T21eay5DPEF7TEsraWs3TSRUSmZsa0c0JGtwR2hjU1grOWE+ckdoMzM7bDxVaUxudDtTQGpkOi99QDgpPmQ2dikvN3xzIWZyLiFYN3YkeDdHRXksVyZCTFImal5VZURDZCU/KWt4fGlSSksoOkVjU1BF''@;'; put 'put ''MXh+SjtMNihFYF5oKXcqTik+UE9pXlJHfnJPZS5JeClIcXAybC9NIW9zbztZZlBNW3A3Qzg7RTJsRnB6ZCFXVG9pXj08ZWkwNT1QbC93blVZe0U/c2RkemR0Y3B0d3c+bGJ0VmclbG44UF0qPDFoKnFKLC97KylLVGVuK11wXV0uZUJlbnxRJDlwbSFfK2BuU2hmRTZTaTA0bnJNZiQzamE3PGRM''@;'; put 'put ''fDd2OkFgblFFUDpifnJbYGRsJTlZPlAkI05JXkQsQW1kOTJqKmpKT3FpZ3pgQHx5UFBnOjpPVHs5OGpGSG1XPD10Lks3JE5oOSRDTnlNbTpHcXBAMFdUKj9NJiVqdj9tMGJdTUBZaVkyMExCbzZJISNAWnBRYHFbYF8iYTZgOXtpKjNLOy9SQE1CL3NAZE06SW07eVtFJipSTH1ybUF8RyIiJDpL''@;'; put 'put ''OUIoRDxPP2cpeD9yJUZrNEQsWGUuVFteR3JoUlZaeDYlIW4vQmVdM3wqJEFLJEAzWCpJY3hkSCs8flBjaHx5KDx9dER0ZzpdRUVOYXIpamdiTnYlNVk6XUU8YmsvUmkzKm1odCN5aDZGIixfOUdsfT5WREh9anJkcXwlW05vdEpIIlBbTUdXU0FUaUR0RTV8TDdvWHx6UlB2NGJ3VGAkM0hNfFM1''@;'; put 'put ''UklPZnxWRF9ZIVkuJGJ2c3oyfXYqbHtKMlo4a2ZLZEZNY3IyRTtXQnh8WnhufDgmTyM6aSpSMDMlSkszODokS3N2T194bltlYCtpJkluW3dRZ0JzNSNDKkRLdEsvVFdJNSpqV3JhO2FeYmVbVTErenZfVFsyV1ZgL25uU2N4YnRkLG52bUZve0FALC9VO2hPW2o9aiRYcDYlbE5FQX1zZDJbL1dj''@;'; put 'put ''JWh9KSloYUJlYHtpc0JiYm9KemtFa1hSeWhlJF1JXipTfnFleXVJQ2ExeGNDKVlFPmV0cG1+el1JbytbIm4uWjE9VU5+VWB6VSQrPkpeREg5YUkzS3R9fWkyMk1jNUIwd1o1dWdtP3BWW157THp7Kz4ufm4/bEVVe3RMOzhKW0tgJjhkPVUxXj0/bS9WLDw8cUVNYyl6Vz9pPSVkIno6TDBCaTpW''@;'; put 'put ''WVU6OXxGUUY4NExnNlRHRGlVczJxJnt4JEFhVn5LRjguOzRWMk1GbEZPPkNQZU0/VW55KnEzZFpycE18WjArR3tCW2goPSxANER8UWl1QE5TKSFFaSNXJH1IaXZAaHpYOH5bUkIlVDs1WWlMRjRrTGU6MVZTI3ZZSypUK0MpdU1JKEUsSjBEakMpP2VxZV9WalQ+fCQyLDBvbyxueS5PYVEzOWUs''@;'; put 'put ''PW9JaSElYEkoWGs2az5lJm5qLEpNMlo/cklFMGF1QDpwSioqVGxMd2QwMH4/KnNrKS9lRUNGaD8+TDU4IkdFKERAdG1JYVdnMF46dClSazEzeHw7S255S1ldRD9dSmZ1TCJ+ODJKNSwlIm1UUTBNVXlGNHlRcGZ5JEIqQiM+Nj0hP0MyeHl1RF5LVzRpKVVofjhdbClYJEZbWVtBdyksOjc/RWE9''@;'; put 'put ''fn56R1kqS2FyZnRxVXJVfW1CQ2E0bWB4Zz1VRWlxLm5OQEE8ViQhIyk3V284TWhMeHdBQkhPNil1YVJ3PlBERCUsMSNsME9ZV3UqOTR7bGtdMFpoImUxTkZ7YzdtcjFTaDBwPig1VnxdPSIhdlp5P01NaVckOU89WyJhLkxXSWczcG8rKzw2PXMmY0J5RjdNbDNMNGIyd2cmSVEwPDA7XiswbzZo''@;'; put 'put ''ImRIQ0dTMUZKKFdYfV5GIzEqJWYqZHM2b1FsRF1DYmhTKjNLdDl0TXZWQ3leayZfWW16Y08iaVIqMXhpYWMwVlBdVmZafnxvOkJ2PDghSlVndDplb3tDJl1dU0g1VmtCY0VQfDspPVsvIU9SWW5QdTBbMHB6ZC89WXhfa3w5UFcuRGpNdmhgI2ZtbCJnRkRfdmFjVixHfk1CNEQsK1BvbDhaQHRj''@;'; put 'put ''Qz80fih8NUNXRDNFN1sjVzNKJUB3Qj1ZdjcySkIqUywqQkFYNWRSaHtCI1UpNlRFVFVaO3pqNCpLRFV8bkI3MWt8Ni8qY1dZMU5jIVJlb2grbClwQ29TUj9OZ21lWXgxTlR0QiU0fTRqdlJ0KioxKlolIlgrX1l3VltNS0BLUUp5Tn5gNCE4dzU9M2okYDU3R09FeHloQXU6Mnd5e2t9UUFrQkdN''@;'; put 'put ''fFpUSFF6MXJAQH1zflp4VWZiV3goe2NGW3Ysa1V8fDghcihzRW5Kd1JER3tIXmJ6NHpNTmlpM054RUlQTmYzb1NpS25NJGFiZXlkZW1SY1o3VmFqfm9+JEklTHoxZm9hWzxudi85VUBObHpEJGc8czg+NkRiYVhiWnJxOll0LndmfG1DX0RCJFc1W3gyYDg+cFVDT2R0TzJpNDZzcCpRUlBWKSRS''@;'; put 'put ''RVYiR3wkYEk2YTtPPyE7dW5vZTFsSGlTUS9dUX4oYFJjLHAyMzIpa009M0JzdCpUTVgkMCxUSTNralthUFQyRFNHK3wvPj1aX0dRZUAhJXZTTyI8Rlp6I2YjIVdzMDpXSmlBeTV3VU5vPmhXaGM3dUEsWFBBUXB3RDF8Lm0wZ1d4cSkoNXN6PyN+X2ZZNH0peigmNSNyVHNxPkY7KjBhXmUvQ2RR''@;'; put 'put ''Li5gVVhZWUxUUTYxU0o9PTBZQ0E9O1d5TCs/MVVTWkVkYlgjRnlJN1I9PlR5fk4kfT1UIWpeNzlFdV08UmorOlR8ZSo2RFVPSjl2TF9SUCVJJSFqOmFSRE01PE5Ya2VlK0grRT4zaF4zWWdOb2pgPV0uWGZqc2EpemkjeFEiTlgsMkovMGxzeF94V2JwUld9YXZ5MnZiQmFTKyR8SXsxZylwTzB9''@;'; put 'put ''JHcwYXs9cStAYEloWmNIL2RROjZqUW1YdyJrdXUhIlU/Vig1MUMuYiNudFhpeUImIikuJlMwNkc7fDIoYGYwI2RzOngsbkBBe14wY1Z+KSl8XnxCIW5WTEQsOCo0dVFwMjp8bkVzbmg1NXVFdGJgP1swcnR5aHcva3UrMCR2NlFiLFMqaiNDQTNjYDl1TDoibmJ2JkRmWyNFQTchbClDMjhufHk7''@;'; put 'put ''bF1xSiU+UywrSiklW3Z6XyFITDJgfE0+XT91Wn57flZRPD1xIyx+Yz1fdURlOTd0W2AoZ3J2LDAmUzt2UW5JOl0xdTh+KVJ5fkUkeF1rM0A4L0U+Q1JjOSw/PXtKRF5VU0UlbkttYWsibiM1U19LVE50YF1iVyo+cyNANzlYOmFhM15QTGoucVd7RWFsaVV3Klg4NE40YCJfQHZPbSkkSHA8aGpf''@;'; put 'put ''dFgzfDR+VmwxRl1xNntgRVMsWGVaQU94NklNWkFKfXRJRCR8eUZBOnM8dlBtcFlzeVlUWFV4OiUwYV4jVVVUcGxzYH1TXXB6djpUbnZLWWZQX1JYRztldnV0Xms0b1clbSJ2THt7aDliLn5sKElOJnRoXS82TWg9LnJ+Rl5jWWpJY2U/JHlKJi5kOmpPcDh3WkxHTTV7RXUvbHhCWWgufEN1MW4p''@;'; put 'put ''cms3Ol4zeXo1RmZSRiJtQSZ2RDh9TnVwbHVffCJOTXJvcnRhUDpFMDEqSGpaMTByYCR+PWpDeiJzK1VlPzIjR2hAaTlPIWc1VkVzcH5tKktKKXphXkNRQ3BQbzhmZGw8aVRWLDxxTEZySDAjRDZFMzBUP2VUZE4hMG5vTk9ibHpCbUNYQHJ4fHR7NG44I3NLTThkUTsoP2QlJStFYU5XVFoyfTYw''@;'; put 'put ''OnIqSl5PPFQvfHwpdHtkYEgoaGNBR0JvKz5uNztTcUsuZGF1e1dDaTl8XWVZKX0uJSY1MT1XVmdyXm1OZE0jSFssRDZDQHgyfXUsVSw5Ijc3TEFVQS5QSXVbfihqcyIzcTRsQXdjPy94UndufVpCbmB2U09vcG07KiR3MXRzQTUjblRHalBiYWIpcTEkRCImUD83KDhCWVtKUmc1dSJNUCE7KVJu''@;'; put 'put ''JUZpUn1nW1EhVW11VzIvKksrVkIiWTpENi9adk8oaTA1N3JzdTdkNkopNkBVPXpPTDdHR0skMVguV3M4bjpZYUVkNWl1VGB0ZnFQbX1iRXJKQ1FVVDMzNnxBYDZ+ZywpLEZ4LilTdUZnWzlXYyVDfHQ8PSVGNGNpYiw3V0NvQUJJe0tIZSgwRCspdDJ7eDNAKFoyVnJlIW9YT2Q1MjcuUDMje08l''@;'; put 'put ''VFNiRj9Ye2Vwa3NuMiheJFQxWFRoflhscDw2W35tKzFCL0pKKWF4bU9OYkBdYSRyRFc9L34sX19OclA6ZDtPUE84V3AyWip7eGJqMmo7JS5oNHVoMF9paSVoS1JrISkjNndFe0ZfbFNPdzhVcW9VcmNaU0ZeKFpyR006Rip8TkB9TDpeIVhubnNmUCssaHkrOXEuVmdxSGBWRzVtLlhbSmxYUWNb''@;'; put 'put ''LE1HaTVUanpsQiJeTmw7Ulc7fD4xPSNmcHpXb2xMSChnW21GVyN5e1FhXyVSMHRxcUEzfi9uWTBfMiorT3YuN2JQLDYhTFZXNEUzUFQiUnNpSlF0Q243OSNoXihPKFg0c1V+KHYwUGBKbFViemJTQWZuUEVFPEYuV3t5el56NTtBaVoyTkh2KS9ZNElIU3tUX3VeRiN8YVd5aC8yfWBvdyorIWMq''@;'; put 'put ''ZSJbVFBnTlA1MHZkUSpMO2xFSGVgeEJ+K1ZVaHFXd1l1V2ZAcGwhaFdrIUozfW4mJWMxQG8zeWtfPW89I1R1dV9OLnNubUxRQFgyR3NbcDpaKyskXjNGZG5vdXlvfFJpWVY5TmFTRiNZK1VSWyZRJDhRTkt0aytrcGhEfWRncHk6Tm5TXUNsZWghOVZbKDw/KX1QME9EOF86Z1AjNmpJU0pqJStg''@;'; put 'put ''e0FHaWVMTDdqWmFebFZ6O2diMksmUi8+Z3AxOXVNOGkhSTo9N2dtU3cpKjJoeWFvNC9JPSNdRFB7aTMqU3ZnUDo2bzNqbnNhSCRkaz1JMnIlXT1AIk5hXV0uKUV5dGNxKzk1UT0iXkB5TkBVS0tiblhpY11qS0N+emxjcHZtIXo5VlEwNFY0YFIiQXxtSWt9SXw9bCxGY0l4MVhkajlIY3Q5bV1p''@;'; put 'put ''YE4sMzphWEgxdDJIJEZXNF1pKShrYTxsRF1wO28vWy5xeFF9e2pxbW8rNVpCVF9VP2FENW4wKD93M2goZHUieG5ZZ3lRJHU/T3ArSlorVmpaKk1sRiFZST95dkwmVDxCZUVDOk4mb013Nz1UMFZiQ203P1hQXmgmKEZdVllDcHlfOD1UXURfYS8iJk5dITA/dVJSeTM1aUF9TWppeU8kL0lySmcw''@;'; put 'put ''YlsuI0YieSUxakNCYkZwelgzVFB2U0Z1UCZ3OEg4YHcmME4jX2FPPUxRYSFEajFxOnBLUipzYkZ8VmNGN01jPWtXWHZEN00vLyp8YVBzYj5vVj96YFJCUEszKWU+O2NdNXB6TS84N1IkMGtZPEl+WzY0ZVspXWssX25GcyElNG8uS0ZeNC8pbTNNaXRvW1t2Tkw3dSI8bTZhIj8vViQwcGRdb3tm''@;'; put 'put ''dEpdXUUoe0QiViVdMHNrJTg8TUAhbnBkV0B+RnNPV1NsKiJZIlQyd1A1QUQ7PlE/a1RVZFNxZkZtVXVJdDFAeElKfGZiO2Z2WH5QZnBXX2tQYl1xTTx9KFhwJUVvaUVQYj80Y0k/QncqXXs8W3FqRDhZMCEheXhqd3AzJjJJU0NdSyxUM2Q4VDsoYFguSS5ZNnRkYGRKZmROUGFwLH0yIVc/Il1Y''@;'; put 'put ''WXtxYko1STtEXVdwZm5nS0hxS1hneSxsYXRkdWJGLj12InR+OHhuSGwoIngzYEY+MjRJaWQ4bmVQIyRLUzZwbn54O3JvaXMjTz1SXWthMkFHYShqITNEP2A4RXVQSFYqKkNkRlpVbXsoWHkvIlFYMTkkbWZHXl1NTmBzb2c+bGVMZ29wdjBPOik2QlN4Lmp4Z113TSV1ZDs5fXxAeUVuPzJTQkFs''@;'; put 'put ''YjpJVDYjVFAjMz9ZTlI0OEFUQmEkWmpFTkU7YGR3dyV3elJMTlBQanFLfURTYGwrPXExfHgrdkteMVFJeEE/ZTpoSUNlSi9pdUMhSy45MThmJV0qZFosJDRaclJ7UjAzLFlUSDI/R0xsaTx2RXYzJX5sXSY0Kl9XLk1HLGZ3QStvWFNuZno3QmNpSTpNNjExJH0/VC85RFNkfWlRREUrail0bWUl''@;'; put 'put ''RFMsZHtIVDQ0KjJnVGtqZGZOVDRYcjlGZ2J8N2FdJnxqfkMzfk41ZTEhW0MjeH1FajhRLlVjd09VQHc1RHFobmAze3tOUW04RERPYVdMcDF2XnNtSzhkaTNBbT83V211KXlmNFtxTSkmUmJISnA2enhke1V6RXQxRXpwdns+UjdEalhiOlg3bFgjYWBNMjBaV0NPX3hxP0pgKVZ4VDAvSjVuVkRG''@;'; put 'put ''IWMqUFEscn5oVWU8b19rVnFoW1BBPnpMfjpfRCx1SVZTZW1ISSY5VzczYU8mYkVQKFtpOCRTVigoSFZ6SXAkZytHJk44U2R5bTwzI2F6Z309WUZLTStFRnFybjFUQHpkZDsuampsfDVNK1FxVGM9WFtCb0ExaVg7VXFBeUBpJl02fDZje0Mrdk8sWXxFfD84YitfNFZDOmslL0wjNVhqNWFlQHBF''@;'; put 'put ''MiFtU1Zsc3w0QUppbk50NHouUXF1KTlLZC86dSlMTCZ1ODMjP2pnIWdUZ3Z1YVpmUEtgSCVYcGYjNGZsYXxTMCxsKFl3MV49RShaM15qZmBQQ1BrT3hWcS56QH1fUktWdFlnVEtlLiQudkJJLChnZClgYjpdSXB7X1h8dUpOcCYuM30+M09FVCQhLyRTPnVydXYpbU9GT09NbEBQbkUqLil2TWhq''@;'; put 'put ''LnJzSywsKHwub3g4cmdNLkBNTms3NiJPZSt6RUhieXtQVWx2bGZ4eTpWcCtPZiM2UDV2bi9TbDtTX2BZTXhASHROVDErZXEqb25yfC5jNXJ4aylfSjwmbVZgWlMvOUFCfnR1TE0kfmo5Y2lWNnlOVT4wUEM+UTFoOSQuR3x7KiR+Zi4pJUo8IX5RSVlfODxNPXFlLE51bWtlfWRlIzw/QypEYmUl''@;'; put 'put ''aWpvbVM+Qj58WHJbfihqdWIvan5iOEFzZnlDXkNaU2NZKlQkZyhwQiQ9V0BCVW9iIT5DdHswPzJAd0IqfUt8VmZgK1t1YU1KO3tCM01VVVlUajg4JWJvSz47dWBiKCFYXmpRJlolQEJVJU9oZUpGRFRQfXk6ZyZ7Rzp0RTJXOTJiQTt3MzVnMH11YW83U1VLLGQkfmtMJF5HUWk+W218bC4jX1Ey''@;'; put 'put ''RC9AbWYmMnQ8RihLSjgzdiR5MUpFN0BqaSF4VXJ7I35DfDVPPH4mVmM+VW1yZjUoRVRCMEpJZSNeaH1GSiY5U0h+LiY9QEp6QkNaflpMe3VIJGV1YkglMHFmU3JCQ3pHTzQuJV5PXSlJZUE0fkhlUyQ3XnBZaD94YVN2fWpLQ1RGPFdfOVE0WSNLJm9GfmQ6bFFWKXNDYmF+b1QrciFOKjlsPix8''@;'; put 'put ''NShOWkZ4TTV2d3czY19qVVlXMXF8SFlBTGF9Iz18fXxOfDp0X2NbNSVpOmtIfV0uRC4ofFoxTVk1ZXhoUT17OnZKczF6czBpMFM3X21wdzwwZSs/Xz0xQVI8cTZmKjRxUiNmdWpBTGJlJHZdMixHb2NnWkxAQnV8Vj0uTjBWdyRhOVIpWCEyS3M7ZENEKlUxSEs6PUhiQ3NbZW52YjxrejJeJVE0''@;'; put 'put ''QTUpayE9ZmcjenpeIzgpP0pAJnhmKj50YCQqWWV4PnRKUTtTKjh4N0szLGFaZ21rWE5rZCtqYzFvXXlCOEtBWXJ1aFkiOHtGKHV6VTl2TGwuTStaXSl7IyRjRTBNc3YzdDpGXUtOTltWbk1aJDA9REMmaXNiLypoZV55YjhaN11dYkkyPWt1NXUjc2k0IkV0IXcsLGkzOFVta256YC9zMjl1P2RR''@;'; put 'put ''PmVdJHFRQVA2YSRUOCNpME9nV0A5UUoidmcvNF11TSVaKEUjL1V7QX56LCgscEQybVNVXyh0Ry9PV0leX2Z2Rk1kM3VDJlhyaVhkV1hUP31MUEhBLnNTOF9jRjVVZkkyYV97Yy94VmpLO3MyKGpjYFdTTFNuPzgsXjYiSi4xcGVSeyE+WV9GeyQ5dEddO0JhOiQycjEqKSwpK2dKXkhUb25WPDJ5''@;'; put 'put ''KkJ1U1dsUiJLSHRnRHpVQ31JYFVvNX5OQlhIPSl4VkliZyZUTnI1U3x6JS5gPlk6LkU+YFYqUnhXQ1p+ejtmT09YNWo9bFlTfWMzL0M2ImxsJmJafU8rNmBaWyV+OyNhPDUwNmI0KEZrUHRVRyg5KVY4MXgyZUZpfjQmSjFNV3A5LC5aTkApTEtEVSZqPilJNSM5S0NWcFh4SiE1eTMsMUt6XSZf''@;'; put 'put ''bHZDNHFRMDNvc31tRTglJkpSdW41YHlAcT4pKX4iUnohPjdWR0l9fTBgfm0zWG9udWYmQG0pbChEXmksfTlKTkRyP1JVX1NRWHBfL3ZIKTN9MWdqamhGYVZmJlArVD5uY2YvIWxLb2d2LDFmPFhlI3c3Kmw2SkB9aHp7IixnenpsZXxpQnw+d2Y4YSx2QFJMJn1wUT1aamoleWY4alJtPFRqQzw6''@;'; put 'put ''LHR7d04oTjhmQ0ZjL09Ie2I4PmMqQHBIJCZaInJ4b3doMk1sfDJ4Lm1nfVF1LzxgaWY1SD4iMH4kI0N8Qk8jXVcvWCFkWH5gbD1fP3pdYnZNSUYqIz90OXIxNXZ5XV8odSZMTTY9RF9BMkNPND1ZXWl4cF1PNUtib3RmXn46KFtlPkZyUEVSfDIyfng6JH1gdUhjL1h4e10/eCx2d2NPR0RXSHhH''@;'; put 'put ''IUxgeFciXmF7TUpaUmd3KVMueTBtMnx0fHVfMFROITM5NHp0JUQpMiMqP15oaF1+OGFlckh7RVFMZ1Y2ZmliIiVRYz1hbVdjNiFYWWN5Z15bTjZ6UCgrM3BqUU9qaD92Oz5oQWt8W251PWYxViwrRElULmlMYihjYyVrWEFATUordGc1aFVqJEZfQG46Jmg0NCEyQlNyT18jZXUhXU4oQVVtU1Vy''@;'; put 'put ''Vyx9fC8mJDFSRyU3U2FBSChEe08/dEZtTjlraTQhVkIvMn1LVnszdERoRSg1T197KiklRHJZTkZwZ1VTfkckVT1ncztNV1Vrc05XOWl0RDBnVDQqSTgkOns2T01Na3FuPW08PUphUzY+YUlTI2VgOTwpeSxmdn0zbWBUNUFUQVhDU2BQZmwjbT8zN1JqT05LUU9LZjR0dmtaJFZqK25Gd0x0ajpi''@;'; put 'put ''RU9+dnksUmJsaXlRRFlqSDk3VExUJjdkZjZVfk17P3xQbUZUVXAmLm05RVg1Piw/dnRvKl41YiJQTj17LjtPX0VMWSs4Xzd3UH5lXzUoblt2az5vIzVyOGhwej4rXXl4LlJJaF5ldnxmZU5jd1hReSRSIz9ZRiY4KmBZeTU6Tj5WY1F7Wihha1Z0RnRpKiJldEx8VnhnRmNnTEthJUcpfWpOSUl5''@;'; put 'put ''SU0+bGx3NEJVJC4lcWI/VklmaSZkaH5FTXZ1c2kuST5LYUc5czQ6VGg+PWJUQlQvUW5bWnhwUF1deyZeNVMmakIrUnVjVWtLemQ9W11xXVhtVX12cn1dYVVdQSxneEVPJVsqaFUsKGdrRGMqajMhU1QuTEJ6PGBxeCEveT9weyZST0hMYCh1MzohdkxsYnBJZjQ5c1chZWZfRXd5U0ZiT2pbJV5D''@;'; put 'put ''aTk9MVR+LlhQMzVHTEtvQzw+YkF6UXQxNk0xQ1guSS5KU3xWWltRQyFqcWEqMk5mVFYlS0pIbTg7PSIrY0BYa1skVjNza0t3OnJoOkZGI1MzWGAlW31bJDxSZ01PTjpsP1pEYU9mZjxpXS93Z2NSQyhqaF4hdmp5WEw2V1t6eTwsJlB5ST5ZMlE4Ul1vNUZ5Q1NwVEVUQ3QjMGVuVylQNV5JN2U2''@;'; put 'put ''cT0kOEc2b3tJVT5SZ3RIeypnUUdJR3hxKFVieVk/ZG4kU01LRV5lRkYoR0dYVlM0eWteYUdxJmlgT05eaHtafEEwX25DZ0pUMjBOTiV7PXlyK0J5diQ8b3Y4Li9TQ2F2XjRgWnYmYUBpS3koMlkqPlo+ND9icWxqaXgkeiJrWiVUI1Z9XiYyYWUzfVZIJFtEWzpvb3pGSFR8czlNRGt5dEokbGRk''@;'; put 'put ''PHFvTjZORF1mfU14dGt2YUI2bkRqNC9tLi44bFArIkBeVkBmbkpvMnledU9URCR4c0hJXn5CJF9UbF0kSDBhZGo+bzVpV05sO21+S1BZWm1NUzJBMjJDZW5NMTYzPzAlMyt5ekt8NlkxL2xhKERVPjUqOk90MEhQMSZuNj5zZ3pGfU1nKEJVXmVBRDg/PVt6YzEiKktmMyRDKXRbbjtoclQmV1ZE''@;'; put 'put ''fCk0b3ZVV0hIekYkYndJcm03MjheVUkiRSN9YndpWGclW3NWMnNSdEh3OiZ9MS4xK3RGc1chME5GcCQqWDowJlYvaE1fTVNKZzY9Q2o/czE8Z1RXKW5MRChYTEE3NGRTRDx7fDFScUFsQyU/KFRJUCQ/YFp+NXEpZ18hUVdqUk5gW2RxMTgvSXh6RVkyYyg9KUpMTmtBQil+V3Q1YXFvfGtLe0x6''@;'; put 'put ''MXooMDs7LjI9Z218Yl8hWE9vJG89aEQiezMsMyF8bH58ZSUvPSRFX1c+dl4qMkNXdWV5RiQiZz1RTHB4cUU0TlZIX0BWNlFuIW5rNmF3RFc7Y3huOyZ1PVRPLmA3TSxlM2ojfDo/Oy8icjZ2QjU+Il1ncVdHTHEsNmp9JlNgUktfQWFLWXVjZ2JBPWNqcnspU3xzZjJJNy5tdXl9R0tEIXpaWC5E''@;'; put 'put ''NFVDen4+NnRiJDZPKUEycy9eST8oKC5SWTUiPEMhNm57S217Ik9wZnNRcWpBX2g8azheZVdxJSopJH1EcSFiQnJ5azg1dGd9N3h1dyoqZWFhNldWblpZLl9TQi5jO0wsOz9YdHE3MV4jSE9ESzNdWVJ3LD8maCtJSTk4TjQ/aFZ6STpkTSVUUlMkOnpMPj4+VXIvIj4rYXdgRF5rbXc+WGYkPn1G''@;'; put 'put ''dVc1ZnZbKWBkfCM5bmF3XU8lQFNldTomaD8rJDZgXUkpUixxeVFrYkgiQSVhajE8fSUsNzVPT30jKyZCcWRhSj1sMn5BSnVoaWUhIVB3THw1VXEuMjt4cnspTSUpNDsqbiNKTj9DeCs3XmZMaUdfWDp5SDMuW3EsNF1xM3JEKVJyX0I2cy9SQ2RtNU91XXE0c3leZ2Y5Z3kyT1JBWmNwWXooX1Jj''@;'; put 'put ''d3sjUjEwK01hcGJldiE4b2RFdVJFUkBeM0Z0M208b0ZjK1JHaz89YlM/UDIoMyh4aSFvJixnUCVvVH4sb21FYmR+azN3YFdpJV0rMHBNRjVgciwrOkpdUCJbbTVxUXU/LixFaTVwbUc7Q1dWJntjNSt+XWs5U1pjWn1PMSNxYGl5bHdaN0Q9Ik9IL1Q3flRoI2AkPSRAZzc+T1JyWiNpT3ExMn4+''@;'; put 'put ''Un5CPm4oe0slLFFWcSF1O3ExRl1MZW9KUG97bERNWllvNVZifnA3SExHZEA4eXhOSz59Rlgxfn5SeFtMPi5BKnhncDxpJmdITjRGV11+e3EhNnZwTVUuN3B7NHgvPjRoY0o+dEU3NWtVKjhTKVtgQDcucnVwdXt3fkpZb1Y2eF8+dWUyKkxPSV8rbCNCakg1ejlHZFNVR0RQfiQ9V0t7biJ1KlBC''@;'; put 'put ''d2pzNCthaDAmJSQjQk0/ZXJMOV4jOE19SClgXzVxe2ElbytOcUxdfGYzJSw9Z34rL1dgcltMamlGWygwbjdXN2NlYDVQUW8pfDh5YDtzOzAkKG8hbldgQilWcGZINkVdfiozTSxSK2JQJWVjdGRqOHNQTDl6V1dnTkI4UHwzW05AI0FnXkFxP2prR0hRdS9kPUg4d0hmQC5XRSthQnJMKiJFbG5q''@;'; put 'put ''KTlGTmtle2hDTnY8T1V5Vl1VR0NQbTFMUDB7YjN4JDMze1ZwTlZDTDYqZTF+KSRtUzVXTiRdISghfGxkQVdqfjdodVo7MU11dkw1S2x9Z158fHYxaHVBdFluJEhaQ0wzej0xKVdmTCQ6VjxdNltPTC4oNWFPW1tLXm94MEM1I3VffE8qZ3t5byUwZiQ1YlpyXndQZSUzM1QkRXZgQ15XMklTP0ck''@;'; put 'put ''STYoc0ciVSQqZkgsMnhOJV4pYlhFVEFTO2hkcyt3ZV1hW2wwVzMyQldSfSxpYlptQFlZWSpbTD1oWlVFS0ZfcCxSa2BCMnpqWXMoRmlxTHBLSjRvZD1mTHspRjttblBEeWxsUGspODZMdUVmIjRwQ1FTUFNQcDxLJD1rY2V3WkYuaTsyVFZtdzc2JTlNVXBrNWtgQHpoRXJaMm1DO3Ylbmw/T1F3''@;'; put 'put ''OTAvOSZQKj4xOHlDPFBnTlspaFslX1R+VFZsTFc1ekw6KFZsanwmb0tBWz8hQ082bnMhcVZ2eSYyaTFlfVQ2MWQ2bzlmU2lYYm57VysoYForTjk2SkArUmgiQGUvTykqbnolNH1vSn5ueG8kVCwpUTdrWTEpVSgyI2V9OmE8eiYmQ09AeElafEZqa3l+TWBxNHR1KGNYRy92IyQlRlkkckxpdztq''@;'; put 'put ''KX1bKXJga0Zvd1dicWokSDpeVygqUyxKciNaSE5IeXd0MH17OnFBJS5zUkREXz4kMVRBP0RDQlt5OTdYViR6OE1xVmxPLFp5cSEuQ3x8fE1PTm0qMykwKGImM29IailgTkJnIXB8YkgjcldFbmVJXzgqbmQmRkMvPDkxZD5+aWVQcSt1cGpVWXhnIiNfW3U8aHswWW1ldU88YD5GeGxPTG5kL3o0''@;'; put 'put ''WTVeUTY+bWklRSZjeU01KT9BJllrTD1YN25mLiNqfX0hXl1UYjt5VGlKL24zZHhdeX57SmdpaVF3N1d1NUI4UjtdNCFhW2k6KH1DSExUT1RHYTQ0VGtJYVtCQDRyTHZkYlNxfT9HbSFVQzltUVJ6N1Mma3RIP0tYX1RGPltOJiZAMmwsJD0+dSpLIzhIbHZSe35NX1NQY142WnZ6O21mQ2NDVH1g''@;'; put 'put ''aS56RjFjZFF5dVJKNHVnRDxXdSRTL3B9QE88c301bDJaYSNafmB3SCJGbT9oc0JOOE4sdzRGTlQ8enpePikzaiUpXSgwdjQuRkp2bllSYGghJXFJW1J7VUAraSRHJXRxOX1MVV5+YE8jdC9GN0RnWTE1MUdRZy9scEQmQDdzc1spXSRubEBIWVR4NV9NI0JMT1FHZTNdRDVVRHlqRHdXbzJvLyRe''@;'; put 'put ''Xmk2KXVaO292VHFoMnZwYlRQYW1EZWgmPXwxZHpzfkNDdVFSLk5LKjlhdXpVRkhIQjJOX2JhUUNDfnkhWHA4Tml5dChwSXt7OjAkeyQoMkp9QitjNC9VJilqYDQuT2FuZmNLQFthZUJATGYmKyJDcTJAOGJ9cGwuJG9UW04/MEIzKUlFflYxMUIoSHJsVVh1aXdUKm8ldiJRSjVrS3dNSGVvU2RO''@;'; put 'put ''Lyo9Vnk6Wj9rUXh4OWs2e3pXITJBOnRHcjxecUVmOVNwYGl5N3UkNU0vcDQ8e20xUEtyLEUhN0VaKlg0TjtyfD1nPnxWOXhIWl8sRmFiQSNSPlNVaW9Qd0orS3Q9ZUN1OltpXmRoWTtJUD83LldhLl5KJmk0UzcqZyVFNEE9LEV6NnQzZllEbE1pMl8jSyZXMnA8b1BJYXJOV0FHSWo7M1Jia3pQ''@;'; put 'put ''XVldMFplKlk/RX5+WG5uMnlOXW1zb0ZVODNoM1hdeG1KWmNWI2lYcjxSLnRPfUVlNy9aMER+T1g4Mk1ZMjBfblEpUHBdW2VQWmJAMiJLXzBUR1I3c3gseD18emtEfmxYbUZqYV59ZHc1TEYpcjo3IV9ZWnI8JUNLR3ZDbW1eTXlyfGVWUHlrMnhUS2s0ZVBRfmkhcEgvb1YxTUNJfl5zOyhle2BI''@;'; put 'put ''Lip5JmBRQXFITnI7N1VuaixYWVNAVG1PPXtNXjxvalF0Y1J8WnxsL0U7UnpKWix8amEpS0NfezwmcyVDNGRIQm9YN3w6eUhybHNtbXNwVU5FeXpQYyRXcz10QUtFKCwwakkhbj5fVC45el5HMzNOeylQdkpuSG50TkdMViZybClGTXB2XW9QNGNaaS5yN1FGOltIR1BEfiY4T1UmTENfayt5KVg6''@;'; put 'put ''eW43OFNrWGpfeEBkYzR4W2YrVmlDOEYle0tAK3hlNz05QD5qfS5wKyFeOjd7KENVa1taSF08aDFtdHY6Z188PEw+cHhCZTldOyMqSksiYkRGeUZ2L19uQTxPUTs/WGdaYEJ5Y1hbJjZ8ITVzYURbR3ErelNLIXsmRTJ6djRTN20qOkByOTY2Vy86MjhRMSU9ZGx+dTtRX2k/VV50MFRFMyhiWnsi''@;'; put 'put ''JSgiXSlyPCxfKiJRbGFuPFY4OzczVWxsW0VzPV5iYzE7bVkvW2cldEhDRXcsazprSF1reGhPe2UmbUBHbW1Xan1TWSVofXJsYy46fGlwakR4MTxvb3lke288WnR+bmZyfFFxTnY9en46TVdgbnB6eW1RU2xlV1taNzBoK1lDdldjS0pAPWUmSFclKzEhSTdEJWxxVzBMPjdkQGdfZTQzT1RLcnNd''@;'; put 'put ''alQkcG90NkNYfFtdS2p1U3lmMlFjcHt8WXY+MDxPeCEsX1tPe19HNDdYPEIkPmNQcTBASGAxI009JnV0M3lWWDpxb24zQiphZk9UZVtYZyNGPihPPz9CNEIrUywsUVQ5dkxCXi9eV1tdM3pvYmp2bnJEIUh6KXg9RDt3OHRTO3w1PmY0UTdaSS9qOX5jfUxBZH1Zbnd0OHg/Uzt3RXZfJitdLFpj''@;'; put 'put ''U08meVBeO3VeK282amNwXyVwRWl2UC5lNGROZT5CN3s8TXRyVkJoQ1ZtNEB6YDNuMmcvSW10SDF7cUJ1ZTkyUDEmXVtSYmg7SnFJTz03dWtdNz9NTzYscykzb1hFTkx1RUYrL2R5MStqbUdzNVhnS0JLVmNeP21sKGZ9OnBeVV4oYTM3MHsofW5KKj82a1lPImpqcXlaM1B3M2FjUzpXeHgyI0Uv''@;'; put 'put ''On57YXMoTUdoVCxrfDdNUztGPjs5SV10SGY2dH5wIWU1eW9LXmU2QWBJPUNmY0ZMb3FgV3x5dm9oNFRyNGZDTjY+IygrWmNzZG1vOVBuXnhWZ2oiJE1JY3lAPnUucUYzcCFZMXkkL1YmQSxkOzFiT004UFRje3NATH1AMUBSTE8iU1ooPEdiMDY2R0pFSW05OUVQISNUPFouOWE4eyRXKUVeOFpE''@;'; put 'put ''cVFwaHswdm5SekVbR04zfEc+Q25zZyw7QVtmRGomQnJiUV11bSxVd1pbeixPbXU+O119TCxALkJGcyg1ZVopeGNrUiVvRUsiRl9YU0NQJXBTP35EP3deNCJoSnZ3P3tPUC4mRnoueVgvKVZjYjRNRSJIM2V0SXJeXW5IKT1IQjx5JVcxK1h3RlZKPSM2I3o2SVBDSFR4JWs2dUBPZzA5bX53XVRi''@;'; put 'put ''TTp6MT9XODk6c3U4dXRoXTw5Sms/UShIPSR5MV8+S3krVz1NU0VAX0k+UkxObWo9cihZQ14rUXF9MGRDI3xaOEZyKjxNVEx9fDJjdlFAcWA1YyNgXSozdjxmI3dzdkdNZXxyampZVCo9PWFKZitZeWRHcjxyKVlVI2xIKEVKXyZvXjtDWFslQSshdjFYPkU2XmlfNGluNk12Skw7ZVh8YT8vd106''@;'; put 'put ''PGgzTXN6dEdjfmo3PEFpeTc3RWNnZVA/ZVY3fi9kPX1fcSojT0daL1lobjMlW3JEeGFAW0BubjV5MGMpfmIuUDIjZy5HOy4raDI9aGJiTU9ibU1sZCtyJFsmJklFWXJsQnRnRm98bEY5SCtsZlB5UUwhMGBkbEVEKlEsRHk7PkRqNGZnSXAyYyQzandbdlMoNXpjQ3YlW2luYGF3WX0kU0FMeG1R''@;'; put 'put ''TyJFNWAiYDBYOCYoN0UiNChsMFgmOk54IyFXKEM2Nz9RV3JqTWFFfDQ1YUxmeFRVdmVFUjx0I3dLN0pwMjl5Mzd0SFAoPmY9TVUwPF1qdG97OkE0JVRaLklfVjJqRV5ke0pAYEVeNmhjUlZoJWpYc3tnZ1o9JFJRRWtAK3V2YXF1KnJddSY6alcuPiwxO1lFTVg0PWgxL2NyeX4kcHA3PGZIcD89''@;'; put 'put ''aDI4YHwiRiwrVEM4IUAsO1tzM19uTn1hLz03Y2MibXUsS2xYK2QpdiU1LlNhNGUzUGp3LFElcEQuODNHMyVyVit1MUApdHIhPXUiUE9GN2V3ZlNONnFHKEZeXU5yJmQ9L0syI1lORFZ6O2JmMmh+LnM2cSZkW088cnRkcm5NYl8jPmUrZ2RuSjc/NUJyTldqYGhiZTA4cXJPZSt7UXxPRnd+YXU9''@;'; put 'put ''Y0djW14pVSgvSnYxeWM5IX1pOnc7YnZVMmZYV2s3ZzF3UGJIPFNqUmlhQkMpKG4zZCV2bUlrUTN2Ql08Oko/OVNrJGpCKGxTdlReTDReaTxRNTIlanU2YzE3UGUwXzVxbjRgRlgoVTAmUiVAP3hmbUNCYyZMNX5MYGBKcThycntMbUgkV001LnlFMG5CNmJmMlV3ZGo5PGNdJXhUcDRHTHAjQ21V''@;'; put 'put ''T2lgKmYoW0JeSGxtOHNPZygmTm1VdFNOTGZCUz4hUWJZRj5keyUzLmpDTTwzTDNwIjY4cDluOGp2cC5rSlhpJi4qIiQrc14rKVBXZGZmfmMmOyhnLzcvOnI3byZ0SCQ7K1ZwaD9wdFU7UDdCRlB9c3h6dUAyck1KVmtlP258X2tERTJDbDVAcHtEKGJscUdITmdeaUQ1b3w0Z3tST2VgaDd1TFAr''@;'; put 'put ''QjdxeGNIYyk6W0NhVTpfLyouV0hXKVQzUFBJZGRNKjBwfWZpcVQ9azpxVn0zeCRMJX5oYVZtQF1YMVEwPGI/TFElYTZyNDlsJDZpfHY0L11lWlZUb2dsaF9IRWdYbTY6IW9uIkomfXJxaEV4enVyfiwweTBsRW5NfTE2XitJMjg+YHhnRjs9O0J4OlV0QFFNRyR5QG5LclBbMCpXYnNSdVBQeDsx''@;'; put 'put ''QDIiXXUwL1JyeWx2dGw8ZUFkOC9iVHJLWGlwPkN+MTQ5ITldeWA+dXNfOytCQVgkdTlZV3F+ZnU9PnVjWiVVYWojN3EyfnFPXS5fb3RPNmFDLFJsd0dqZW9ET1BQZmspWGlEW0MweWJGV1V5T3ZQNE58Zz0jQmlkM35zQkRWPENvYiN1YXZHMkcpRSgjO1JwTFIvZitFVz0wclEhTDVVbz49XnFk''@;'; put 'put ''TEB0Ol97PGVYdGw5UltfRkAremV+RyRjclAxWndQUj5hMUxCUWBPfCUyKjwofW0kaVZwKz5jYTh+SWZFWF1qIS4iV2ZYYFtEZmJFQ0AsM248X30mJl0yVmlzeSVAWCQwZnk6Z0BJRUJ8b2JkeiRzU2l9NERDIjpsPEAvQzg/KnZrN1pPdnhEOFJxblR5OUNUXTsmPWdHUn4oXzJ7eiRhaFlQbCMv''@;'; put 'put ''Z0E4IUZJfHZsdjljdXclZUBvMlJBKERdU3ZnaVI3Ozs7RmcmPS5FejJjdE0sODA1VykzQ34zc2VQQF9VJnV2N0YuV34oPUUqbHsjOSlpOnF6dFFEME9iW28/XjdyeyVjaCFkSkkkW3FMTGo2VTNkPDxHZ1coTU4mcTRFVW1DPjNSWHdPTmZ1VTRNXilvN31IXXRdOmArPmVTPjFrSE86X0pJfHNE''@;'; put 'put ''ckl5S21RbD54diZTQjNPYGg2Jl9tWSR+P15Ge3B9SXpbNV5GNiJvWyhDajdQT3RzZmRzSkgvXzdBd2tyfUExfkZSdXpZLyxhbH5pMktFfilYJnQqMzx3X0RhXVtJOyx3VzomT0JjTSpWTWNCTUU4Ni5mWmhjbSNQQ3NfJVEqX1Yqb1o3X1RlTHZjIyxfaE1xTnY4VkwpdD4qaH4pXzkwezwmOisk''@;'; put 'put ''OFE5JkQmQVNiX0dnXmExRnNTblYyKldhKytgPzUzVzR1R1kvYjN3b2c+ckN8UlFFZTg9KjYqanc5cF1aRS4kLn1ZJnluKit1bE0hZ0diaz9kelkoZ2VZdUZvY3QhdkNIYXZXP1VeWSNgcG5yYEQ/NCY0S0ZLSk1CZjxzeStoODRMTmpKWXZPSDY7VU48ZUorPEh3ME80LGFwJnEsKH42OWZiXkx4''@;'; put 'put ''cHJ+YG81eEp2Rzc7eG08OU0zWC5qQ1lwNHl6enolWGtWXXc7b1AoZmMqS1dgZ3VsJTxpbUkvaDU2PzR+P1JDPGlGITR+L0l1IT5WXmg6Yk1aZ1A2Y2N8IjZHczcoPkpYM0JXPiIyaXkueVAqYSZxZF82S1t0cFhgcF1qOG9odHVlfkFqNGBoZnhwUUZfI2QkXjsoanZWc0pEekkrSmN3RE9fWHxD''@;'; put 'put ''Ri5+PVpjYUk0SmNkaCpHPkhXPTc6a3NCLzI5amlVTihJNm89UTM0TDxSOitgYSxFJmdTYD4pTDFaRmk7cWU2X2F8d21kR2AqKERQek1PNERMYm47W1dVW1R3cSFvPS5pS18yPEp1cUg6YzFUZVthRTYsTTZXTTV6PyFpdWZBbCg2cX47ZFREWXRRbHVxcXNmU2Q0OC5RfWVnWGF3PyFIJXdTWX1J''@;'; put 'put ''QElXXSNPR0pXbEhlRzAwdzh1KUdtKDguOShNU3gmfDN3PigkJEFIcVt+NDFZNnxjN1NQYiZGfHVIYX1UXmxuRmFSYTxqWEp3R3VKMjlITUxfZkssTE5vN2RQTkhAdWdycFZKYUAvI3leYyJqVTszMGhtRWReLENQbn1WaEIufWVUR302I1ZoKEF8anlPdms+IjdYLE1INypJMklGdlssO2tlbl89''@;'; put 'put ''KnVtPX1+PUdofV9obEZ5X0I5Q1svMH1zYlNAI3ZPelFjI0hVOXVzY3o+cUZEY1EhZVFUXn0vantrS01YS3U2REUvTUdOUi4xYkFlN2U0bWQiemRsQzJYfEwyTVMrLnMuKEF2MFJPNUpwXy97bGxZX2FffURJK3BkajkmPHZoL2IhR2o0TlpSN0k6Vk4veFBdLmBqUztXO0FsaVk3dUs/ZEB8VExC''@;'; put 'put ''aTlKdjspWitJQTpbe30oLzZHcWxMdXRCKipeZyV1ODBtKDRVW14vI0Z0dzxxcWskYExBKGwxU0NPa1NDIylDdUk6bGNpOElKQDJnW3ZwSkxCfiRDeTcoImsvUl1mfVh3ezwmIVlYUE9xPDJSVFk9cU1VU2AuLGFlWjpOTnQoQ2l1alRvO0FxeG1GXUh0PjA/SFA0WlVaSUEkZWkrTHN7THZuODJo''@;'; put 'put ''PFcuSmBLW1MleS5LamZjOGJKIj0kTntqe3RnZTpZMTs2MytELCloOXk/eEFCTk1KTzYwQCVjKz8+RCxkbXs2cjV7SnNxWHludzU2cUJRbDRxIilESHQ6X1dfQ0VxX01oXSNveXchK1lAcVlKU2V9KVpOTThjYzx5UzdmMThZT2hPM0FFYyp2emJLS3AjcmZZe2xTdDYlUlV1WFp6eEZKQ0dtZHNA''@;'; put 'put ''dS48Ij8iSnJ2S31dIjBwIz4kZXxCNSxwMEshfHNYVzh7cTY6cilXTWM+NUJSRk0wSWswWCxnb2UqWltrKEI6OnxXUk0lM0pFTWhHWn1vP1EpSCpDdV5QNFNOfGF1WDdVZjorTDlnS09fb1d8JFI1PjxIYHomNjZrLng6MFphNWtodUx2OFtBNzk/L31qfX4iMTFTIT4ocWRzaUtaQyRObmx+KVZN''@;'; put 'put ''R2Q1PihOL2JfZl58bVhEb1ZtKEorS0QsRD5eaSh+ZUdCJmgzfT02Kz85emMhKEg1Nj9YKlYrQ0NwPCsoPFs5fDReMzRXY106ayxvOyJrOE5AfXY7IztmQCV9VzIwPlFqXjI4U3VGQDt2IlJadURIeXhyR1dLOEpbSCtJSSJ6UGxvIzVGInBsa01EaHBqcj9rZThbfHFrUUJCQ3YkbDtaa1ElMT5q''@;'; put 'put ''RytEOkVWS1V5SWBEIVY0IXx7Y05jK1QlPlZeNFVXQyNeQFg0ZWJCYWoofmkseCElXVl9MFlmLE0uU0tELzNCSHdhV09XRXd+fDNrel9MX0RFRlkvZm1nJUhueUteJXZzLm9+PSRDJkZKZCUoKWpea3UzTHt+b1ljXXVRT1h6SShyfEguXVh8YWYpTF9hbGwhc3wkJFR2Ri4iaUtIREVyRlV2IyJG''@;'; put 'put ''eztpQnw8ekJgPiZRfVU+bTZgLzo0Q2pkZSgxW09JWjVfdjVSRnxiRzNGJUpwd356WGlbK2pDUEslVUpvVjMsa0hWPFcoIVJNMjdVKDB3dU1qczhMMFR9MmtAI2ZfdD5QYEY5YWlheyw6I3YxNmome2BxY3tnXVtjNDVUPWA1cnddSyhGY1EjQmNPV35aeXtVN3BMPSJ4e19wPUw3bDVHUCw/L182''@;'; put 'put ''VCRMd0IudSV9aGhqdk5nMWhnXTgvdFJMWnBeME5EaiwxLk1SZ0BhVkZZek1UR0d7MVVvPHU/PjhnYnhFKm0/UFhqQEQ7KlFxeWJKcG1sP0A5ZE99bTNTNyhVfHdGeGVjWiQ2RTR9OywlOzV4dDNQYkx8eX5nY3spVnYkdTF9fmA0QG9PdjVALmJaU1NyLC9la3lRbztUUV57JXA9OF5+d3Q1YWl9''@;'; put 'put ''KEtpOylJZXldXnk9S29aJl5WMWIxYEc5VmlAdXV9WX5zMG5zYGpUO3ZAWDViOHt8LFJhWmEqSiNZV2UmUj83JjRxeUQ/Nz8xWER5cCpHcHFPTlhPMCtIMUh7YWVfdDlDKDFQUm5LPEcveXJFQF98MkMiLl9OUWF0MFQraCltZSEjTlZobm8lX3AwPkNhKyRDSV9vKl9VMUovNmdAbkJlJk48TCR7''@;'; put 'put ''RTQmNl8lLDA0WCQrOV9DeHBFfT9AJHhye0hpel98NkojYkB9enIsdENvbyEkZUw2QT9xcUBpJmZ2QWt7RD5TP0R4JU06TVJFWHRUaDcqUV9lPUI0M3BpZSNZST1zMSVnVjY1UEtXMCRbS25SSShrLl5KOjIkREBAMDd+S2IvUzdVKFU2eXpmOWE0TDFNSk1oYXl0VDhLIiVEdyw5KHMwX0NxbG1M''@;'; put 'put ''aFEqe21OQlNKfDxgWXtUOVNJLzNPZnNFP3ZpaSZuTHBxYVhGPT44RWVPPDhEOTguanV9dyVRV341RUY8ZkdsfUFuNUB+JEYvT0w9ci9OTG9yaVguP1dxW3xRdWJEPXN0XTw9PWNWOjVxenZ9ez9yZnxlO3koc0ouWnN8c1l+Sn4oW3RPeFdyMGpvSVtNYFtvPSNkdlghc2Y2YVkmcWo+Uzl2VlRt''@;'; put 'put ''d0JEKGc7OF9Va09AbzohZkZdMTApeWIjKCRWJm9JSGMlW2hOMjo8JiMvfVA6Ujo6MHdwWyt9KDJ2Llg1KndoMX5qdX1YXylKSGhHdSxXWEhNeGBNPEJdNmsid0sxb05rNWNiPFg9RT5lIU9jMXBTPEBeRFshW0EhbG1jJll7eTx9PW4mdn5MIkg3P2FqRihIVmNeSnpucGl0fGpvYWVsR0M8aT9D''@;'; put 'put ''aEovO1FKKkosYDE4NWsuW3tLWXRMcWNOeHpEWE9udFtSQWk2TX5fTXFmaywmQVZvKHVjUnE9eDZ6KSNyRWFoSD0+fVtrI1c7LH5SWk5gP0owWilVOnZ8WkRqcyRgbSpNLiFieGtAdnpeJXozVGlBQiVVdn5GNGs9aFcuU24uUURifXwjU3UmPVIqSklHRj8wNVQzKjs/bHVnKTA8KWMhXlpvYlpg''@;'; put 'put ''bzoqK0BJOkU6MyR7KHxjKGdCOXg8SFBiYnkzbjklTXo+RWVgbWRhJWdmPkB+KlI2X104eWY/NihtRylyOzxNfCg0W2ZeK0xoUGNgJXE5RHN2MTxpY3BraStILjl1RHNhQl81MWQ6Lj83PWNGLztyczxMMVcoZ01vO3pjJileOE1rVD1sTjs4O09qUGtKbXB6enRIcVB+cDNPfVZwNzY0QCxjTk86''@;'; put 'put ''XTRZS0FwS3VwPF02YSlWSl9fZUU/alZrJmtwKnVAeTJGRW1kXltTcTs7O1NKLmB3PUYmJkJeI1IqI1Ixbl8jQ11gbj4xR2lgbUtxbCtHOkBkVU47fnA2cnk3Z0xeRDYwfj19LDViaiNfUno/JWteOWt6TDhVW1RCYTIiK3RGWEwwdXtTb0QzPEV2SUk3Y2Y3Wjx+cmR6bnoxYTUrIkc5NVVmdkVn''@;'; put 'put ''TSlRXVBYeWx8V1p2TCo2YndpKmRwbSU4OiMme0w3MCgwW3tFKG85TSEyRjQjc3J6U2lPJWpvREBzWlFRLEwsQ1BDMSt3aXs9M0pkPUs1T08lWT04SX5LfWp0MHd3IkVoKVEuYHVbQToqdU0sen5ebiMiUTJSaTQlODM0TDJ0THQsZlpjbHU6Y0p0cF8vd0JjeWJ5VCVlcE1ZMmxNbkwmfGQ6fShI''@;'; put 'put ''bXdOTEg0YyQrKEFdW20va0s6fHRLcV1mV1lXSCNgMihDLDlxXXFeIWsqRHs6ZUtJQHhjanRzX2IxMTQmdGJwSXFfI000YX5hWmdDITBHN2ZEaD9AQjl8SzpgPmdIPntyRml+ZXVKWj9uJGo0PmV4a0pZS0lQZHduez4zczcvRVtLQS5KQXAyYjg8cU9vT20xd2BmcE9eYnFiKE56IzlfYDYkcClR''@;'; put 'put ''fmVfR3VwdDEvYU1JJGxyUEpfKmRCPWZIW1s4QEdhRjVnZEMrLCZlSmN0XmRpSX5SQDp7eGE/W2VLSTxESHoxWDIoOjtvX0pPfUZQT3BfWURyZ05pKyZmJUdkbS4mJlFOWWdifm1hbU5PPHc1TWEoQktYfSpLbCJ1ZC9KRVZVRTIsJk1DT1RRJmRSWHZUXVpFVlJkbmx5Tj5Ka0U8cDYuWEJeKURO''@;'; put 'put ''cSUlVTlsQH5fRTwjYCoqST5nNzZ9bDQqRXp8JnZOcThec2FIdXE7bl1sWTFRV151IkgqVGZVUUZPVVlsWVM9VlltZ2NDc05UdzJpWHU/fHdOPiF1VnpHeHlWZVk0QXVudWE7XkJiazxNX2xhdjlmb2M1a1tQbX1pWHxJeWNbbmQyYn40XW4yZGtwdWIsJjpWazJ8UGs6SmFIKXo3cjsrYUghI1Vh''@;'; put 'put ''N1JwREJTX3Q8T3t8KnA1K1MyYGY5TF5UZUlfbSx+a31HIkFbMVhmaU5YOE9CMnFQezh9WFFdXz8obT1eVU9xXU0pbH40M1Q8WCohYHMpPzkpRmk9eVZ0OkA0ZWdOaEBmfV0+JnxmR0krI0U1MjQqamB9TDxhKFVUK2dyMDx3TkwqL1VoYUwzblpFdkxZS3A8akRjeCh3e0ZQc0dxYVQzIV09KnJB''@;'; put 'put ''dlFiIWJgVGJoX1tATjszZUVaWmhqXTZvfDA5Qy54flRVT1N1KWNUU3Y9OzssNy5+dlUkdFdYZWMlTVVLJEIuT1V5cCxqeWN6QndHTGlHKWMsLCRUY2NSaD58Qmw8cWZdImB8KEd8S15HWiRON0J9QjZAV1JVSHEqaVplQEFRLnome3pXYHd9dSVyLHx3aippRGRgQ3lNRlp+dzB9aFRpZz5Ae3No''@;'; put 'put ''ZW1oeTRMIUNiQTxMYEFYJlpyOWFIX2tYVltTTTdgWEYoN3s6X3FMYXNOTFVhPVI/eE9+KShqK0xNI2NKNjNVSyx2QVEsWWNAZlVCdCx+YTIoTF4udSZecCMzS1YyVlNKQi9nWmh4LCtLempVbSZQP2MhTThrZjQyN1JUO1dRNXtVXyFgeDlVTUVac3B5IkQ3IypUJStGdltDSVd0ZWdVbVk4Rks1''@;'; put 'put ''Ylo6ME1Qfj1GV2pHeWxvRHtuWk9aVjNfVzNIO3l4VmV9JWhtM2htQyleWl9kIX55Ujk4PkJXYVopYEQwWyUyMylhd1AyX3pMSzwvUSZqTyhAWD1HKDE/Yzxzd3JWOXpQOWhKVTQ1Qk9DbCJ3ZExZdnsqdnA9PDVjRExAbGNDWGovTl1KeURVfVtlQStPXiokbEJjeTJqWzRBUi5dO2RkfjV3anl5''@;'; put 'put ''PG08KkVwKXx4K00oQj0pZGkvWG5MRjFAbW1MI1loenVwTkhRMzJrPU10XmxZOXN4SVpSR2M0V3MsY1l2fjV4M0Ilbmx6UGxXQUc2ezl9cTMuWWdpPG8qbCgrZEU7YkI8ejxWN0MsfnAlLnB3Z1hSNz5YRm96L2l6VG5lfiNPYDdbOT5MJWZAdnkqOCMhdGh6ZmduaStfJWwsWEU7dSk6Y3xKRE5I''@;'; put 'put ''aUErV25EXTI8OVlVdUB5QHowWVk7MGhQRH15LC9nX0s8KmhrXXl9cChkT3BAOiZeLklQRltPUzlhWkw2Yj5WKkFJYzBGRkVbOS5fTyRkT0BrOT1tUyNZKjpLRlUuO2Eha3JWP3BYJExKVGYubyRUXUs3TmVkNjtYYno1Y05XOiZSSzNCJTdaI0JAImQ9UFJRNm5BOm4zKFQrIW1ldzFhM3w2X2gy''@;'; put 'put ''PDlreUMsM25DQlNBUE5TS0MkeW5WVWRMX0EuRlJOWkYkdyRjRFt9JT9ENyVdcl85e1N6UFN+bUZhOXVmclFaK1peMThYQXI+MkdrI1RNOS4/X11zR3NhKF82UE1DWCVfT113TmMiZm16fjEieVs6XWE4cy5jVEVUQzs8dDFtNCtZcHYjM0ZQdGhfeWVBaVBTXjRkcltxJklgZVRHWml7UGI5OiUy''@;'; put 'put ''W1lrWXs3RHNedVVJbXVIUzhwfU1AV2VmL2x3dWguOGtleXRYZ1lSR1ZIcC9mc1Fyd0dQIXw4SDViOXhESF1aYDNsJEwwbjNjWXxBcDVCZi8kamJwOkBdU3ImYnZ5YVFfZCxwJnBJUSheKlpERGFWfjFNVGVVOio3S0xETSptcyhVaTNJO3ZjM2N0dCtFPyVyU3JsRnJWUDBkLHpicGZwcC54Ryg9''@;'; put 'put ''Z2hSMlB4ZCIkdlIvOyVJfTsvV3lIJk45LDBsQGc9THswdWIwYTx0USYueTooMyp3Xnc3cTtEKig3dVtVS2VRJX1Xc3khbHBlUGgsby5qVSZUTl9OTHBQQCtYK2A6aURMUVtqYHxga1FlT0ohJVNnQ3NAV1U0VDsrcEphN35bQ1JRfkl6Rn1tQVpfbzxOJW4/NVNDa2lxYmVQa3dlR3kpfV95OTgl''@;'; put 'put ''ZmNdTT9IY1UraWxhdnwpLnozdWZ5Y2h8dHFPWC9UJi4xYSpDUGtteiVuRGpDVi8pVm0qNmMuNSNEISZgLGtQQCxZMUk9ViF6Yn02YGI0K3Y3N3VzY2g2RDRLfj1oNyZHWTgoQ0lIMGQvK2xqPG5VLHh9OWdlLFZdUTZ8V0pbZjd2U3NLW1hWfU58akgiZGRTUkRpPmlaRk5FWUdEcT9zZ31yOn1a''@;'; put 'put ''eXFkY0AwSHtjay9ac21YMT55Lm8iSzpBPXZQQXc8VHRGSjg9Ui95SX0jeTZ9aFF3UnVSLGlJYn1NN21kWD92MnRDUiIhPCxHYj5AP1txOG94NSh9K2BLdU0iOXtWYldvb2t0fn1EdXw0eG5bZVsycjpBPWlAMVI8LnZVKURRQ2M5eXhRUj5oYEt0Lz96YTxPPV9lfm5oYExkJEUpW1gvV35GSkp4''@;'; put 'put ''IWo1O19lPSxrWiE9UTw8Q0xBRThjfUgqPTYiSj1tc1Vzdk8/UnNHakg4eyp0RDJsPUQpSltlNlpQLyxxIl4we2IpeSxNPShMKFlvPWtOO2lCR1gqdVcjVUxZM0ZZdSspU2ZhZjtFO3s+RmlaKjgxMCE/THlZZnM8PGg0JW57W0kjWGlzb1A/cElPejsxXSl7bkdFd2FlL2spUClLdEtUYT9fWWVf''@;'; put 'put ''Uj99VGt3LDtWLCpbfTVaJDslbjt1JUg7T3U4ZVdwbTYkc3grVlokNj1QJUwxI25LWnhfZFJlMCs/SF9mIWRGe2FMO0tudG54am1gNEBPZHpHT1N2ZytgTTlUQEFINCFeOmYqSTF0VF8rL1hQPyJqUTZqTmBLalJEfkB3Si9xVDJZa3g1KmR+K0BGIy49Mi4jV0VCPWlAUktGbU0zdGhZbXNhPldE''@;'; put 'put ''O0UpNG5fVy9kTEBnL3tmZG1wT3hWU3A7e31IT0NRW0YuVTkrJVRENSpvL1slVGhEe1Vpaj16PH4wYjBWZ0xgXSFQN1tqLEE2QnNIUC5DJnJ6eEBfIXs9LnM3SlV4LCRxeDw3ekpbYEZLMFdYZVpTI1ZlMWZhfn1EMj9fNHlpezpQUndwcWVXIzxvYD1jMDFtUF8rLExdVGFncTVLZnklI0hJOX4z''@;'; put 'put ''QkVFVCtJP3hkY3ExMmZrUHdqfm9PMEhaZVUoNThlQ3xmcls4akFsLGhRdmBSJX1ERypgXkJUa0dGfnszOnhRWGgxUCk+PlF0RD5KPEhYKXxJMXRbNzkoT2VyKzNVOGZmcU0hUlssZ20+PiNkRkQsSWltRWZ7YnRpfWU9eUhdTE4mJE0kOFJ7WlB2SWZyRSF+KyU/KH1gdiMjZSEodGohI202fW9h''@;'; put 'put ''Yk4oUCw3OixkLyxaUWZmMStGQnoqJXJzek9lJHZXWGM1JW9We3UsLHA7QykoRnJoMWx0K1JJTkt7SGFmQmMzbk4ja2EhIWIsTyQ9fDZdamJbN1c2SlFIW3JDI2BNMFg9WDtbQ1AlMjlMSXcxYVp5MjJjJUQ6OXYuVC5ecko1Y2EjR1U9Xj5kVjxFR0tsQTE7ZG5kWzY9bXEoOlR3aDNiaGxSTTRz''@;'; put 'put ''dChVYnEzVDxUbjlVcTYwMDFzUylCTnY4ans/Z2FtNyxmVzZTZm0vIzV7Y0liTTFoQkFlcyhKQlhbaFo2V312Y3ZMRjc6cl1qKk9sWCMsbDEuYC9jWDR1dHFAal9uWXRoUmtKQHhLWEQvQ2VzJHAhJXdtOihUWkcrKyhgY3lraT9YVTJwfkhFSHJWWUxIQDpTdnBhcTdjWig4IkQvLm1vNSUzfT1L''@;'; put 'put ''UmZraCY6LG0wX30hUkFJUWd0ZU9ebyw0bV4sQWtCbVlAMXE3azgwQ1FyejoxbFAjVTMmaEo9fFFtRiRKaE1tK3F6eUh5PClpKXEkKnNDPndVTkV4e2Q7NiNOZVEqZjp1YVt9MkRzeE1YRyNETEpFKFdHL00zRGppb1d0QnEyKFpDI3NicDtYW3tPdUNvQDI4ST5mMVFDQDpnfVY7PmlbUUQ9NCso''@;'; put 'put ''TX43RHhsSiY/U0hma1EieFtocVZ7L3F4VF5NNUoxYTl6SHguJEdqeTBPRCJ1SkI2dnA3dnp4SExIN2w7K24oKExqMTFYVkReY0hieEIpYXU/dCM5OSZDTzQ8L099dUBrN2g3amVBdHIzViRERH1ZS1lnaj9oKl9QTD1vZzdKb1NsaXRfKyUlZEx8a0dpeil9OzwuPEowUVFNYTFqXU93XkZqZF93''@;'; put 'put ''Z3VgO0FwPHoiUFtvWiNrWi9UbnN8MUpbaFtfM0NASCgoKUt2LG1lZ2RgdkVzQT5SSGBZe050XmtIVT18SGtXUmcpSDZQQD1uU2t5e1c7L2F1UGZFN0pgeDlVXXQ5ezs1SGJyJkZnfmF7bHMsJTEmYkEqWytdWkx3PEBRN002T2R+a208I3tHK35XWW4uaiE3RSZOb0I5dHZOaz1CfkFVcGFyYlt4''@;'; put 'put ''RWJfcC91JntvVXF0MCI1cU1COWwuNXBvNG8zUyxdRkFaUWQ4c3tPN29peSszWFZwWF88OV9zV3NRUEhVcCx+N3FzJHlrVFdiaz5lU0pfWywxcjRGfiEhNGJGWXlkbX5VdntZUXFfalMzSTU0NFt+LHA9VUFMTHJHUDwkUFhVS2c+TGklVVdmSWUrIUhvYHl9akBOK2FWP3MuMCZ4VSMubihDR3E+''@;'; put 'put ''QkBCJlVsMS94RTRRTUdSS3VXJiZsdXVLRklEVnFmJj15R3x3Zj9fa1ZCPngsRU4ibWxNcE1RYT5+bE0ySCI5c0QzT0pVQ1R8aGVITjhxVj4hLF8wSVg/QjBSZjFaZm1rNTc2Z0lDMytiQkNNU1l4TEY1NW9LZWR4NCNGLjZrRFQldDg+TS5fPUZSKTNgUildPll+ZU1JdTg2ckl8dU9zb1NJWVFp''@;'; put 'put ''PlJVLnkuKyJ5b3BWNDNLaysvWmZyWldoP2p8dkRKKD07ITB+U3JXMWBlKDZRRFhUO2whSmRAPjVfY3osSFc7Jk8uPGsrLnJCdygqST81Qyk3bXZpUWkwYTBpMWppcHN9VylkM2UhPFguc3FhTnlTT3kqZCJTVD9IJHV5R1IzQ1ZdSjY5YXtFcTNqbmlDK2ByZnFiKk9JVnwrPGtCI24qQG45fnkz''@;'; put 'put ''WGNXIlhDIl0lLEhGYDlUY0ooUHchN0JxQ1ozflgmME0sa1pzWmIpdzBPY0o0JCNRVjE2N05HUkpLaD47USJMMyRRLkBKX3xlOVZwX1ZTUTo8LEUmbm5PVUYwJEUxdD0vQCJpSXhXazA1NiU3JG1BbUZwM3ImL19fXjsqeElRMl1dSmNaTyxONUtOP3xaO3VdPDBbZDl1ZSMqO3FoVG5IT1FoPSs8''@;'; put 'put ''MXBASXRNKXtEL3IwbStEPXo+UCo4TFVpKSxhQ2pLYyZjdXN5UVNRI2tBbl1eNV1WSHhAdXsjY0g5dzE7JnFSdVB6NHt2b2t6eWdlX1ouJkpoKT93bC8/QDhMdTQ+c3t4V3R2aURlLDBZcysjOi41Inc/Klk6VnZ8Zj43Y2JwTypzO0BgeyI8QXs4OF4lQzc3dj5dQTxdOjsoe1VNMjBVI1Bnd0Nr''@;'; put 'put ''PUY4bnF8JDpAeGQhfCU4cHApbHJ8JkJyM1A6N1U1NiohPkVsQnlGLkdULmZ7OVBdPnI6UzRlUythSEcxdEY2UjJOXjFgaEFha1Y8Rl5SW2t5YXNhcUcoeUkzNkwpWlhqdkRZaXk/YVYqeUBLZn5fcCxQImU5al4+MTRldXEleEwpUXk9ey96RzZiMGApVkk8cDBaeVkpd0Qicig/SHRBfml0Il1r''@;'; put 'put ''TFl5QURoNm9iLzVgOSJPXXBNQVhRUnVOTjg6RzR0LGEqTz8uVHh0YyFsWX1zREhqenc3L0JSZXBQOSZne2plRFsqXWxAS1luVE95UkRNM0JyfW4pSmI9P30zV3VVXkk+e3FCT2B5OmM+W1gyTEV5fi5lMkx4Vmc2KDY+fCRgZUEmJWIrTXE0P09IPGRPekZQbjdURGFAMiJWLF8rNW01KGh+KGJ7''@;'; put 'put ''NSgqdjRbLGhGSlBEU3dCI1Y6TzBuJFZ3Wyh9cGV0NlI9RXp0RGs2bWZabEo/aUVsaD91U35yaFkyJlNbLmo+KDAkSncscG1tZHMqKFVvfTl1bTlELnZgeSlXcikmU00oR0k+cVomelkraFkjY2Y7Z0lkP1JZMWdhY1JLdU91d28mJCZYY2RyMGV0X1MrX193RW9zRz5qUEZxekAoUmReYSxZblp1''@;'; put 'put ''JCYyNzpNRiVqQkQpcCNvfnUxTU9saVFURTZEeD8vSHF6ZmcjWiEheEVoczF0bVhiLnt0ezd8WnE5dWpmTF91V3R4Ll9vbH5aQEliO1lATj5bX157bEVkem5lZiFOaX0iUStkVERtbkF6ZCp5V15LaWBMT0Zaeko5TlcieSt2JCNkeGk9JDNsfEwldVZDYmVAdTdCP2BRJSZEdylhdXM9PT5bXztC''@;'; put 'put ''XmRPd2JJPHlbWnVZUylNdEArZk14TnZWN1BRbFBJRXVKWkAvMzd3YUdHUHY/UDFnTmVKY3xzOyI2RDcoZyhhemNJL31fMEo4Q2RhLkp0JjsjfENoMU5Ea1p7Uml5cjR3Rkh5T3NZUkVyUHM9LERRO3VbdjtyNVhbTnRpLkZ2MnE/KiFke3UuKDF+bnh2dSJgIjpYclkoOXk5W10rSF9BKHM/VXxZ''@;'; put 'put ''YjEvPXQ2fGdxOj5KW0dnUXZaaWVTd0xEX1ckYGNiUDY1NV9ZNVE0QCYkRWhkImduTEBuVzRHbjBSe1FIMXw7VDVpT1UqK2tzPixEJDcwZl16amRGZVR+ImpgWEpWbnlLWilNeCRCanUyOjQkIlVjU3piPFdKcmxMc3cueTlCQzZBZXpzX1spT28iJGUlcWpbXSVhbEZBOGovIiwzRXBSTXEiSVF4''@;'; put 'put ''enMkRn57LG9jZDZ1JC5zWExANTY4V1FxYWJTVl4uQ1pAWk80JihkOVdrYm9WKyEjUSFMM0UpVyhpSVtWIjpmcHZXeTVuWTpXaj1JZGAjYSZmNUJ1WEgwK0pxPlhvMj1OamdqZk8qVykra2RMSzEpSiN3bmROLiE+SGZhQVg1O3dyWz5zfk1vcWc1Mn05Tm87YVNjIWVEXjl5QiVzNCFGb3FgPV0z''@;'; put 'put ''bSxyMyIwenN3Ii5CQmZEX0slWmIzbCkiRlpWcS8rTjFwe2xDNntnP1Yya0dWIzdwPHkqMFp1Ly4/NUBAaEtOdGdOIj5PQUYqVDRMRngvOSNMd35zS0Vlb3lGd2g0fkMldmJZRk5HN0oifVZHeH5eTTB+RW95fEdpO3Q8eFY/QyV1PWMoPmxvV35WUlFdPGlQWGdsNjxCMzYwSiNVSntucE9qVGo8''@;'; put 'put ''S1MiOV91c31dSHg6diprUHM5NmpLeVVLP2wjdEFddDhqVzpyL0VzMHJgWVU8aHJUUiZDRHE2ZSsxV1F6azAoSD4ya3Z7el9AOD9jMExGbEVDQ1NxJXp2ZWwuaDx1c1hHI1gvKCRTVE5SUXVlSU5uaGF5azRiN0xYNlVVdC5uZDFvXn5wW3NBPF4rV0RpWGJNdl0hb0tbMS8pciUucllgeWhnaj8v''@;'; put 'put ''JV1ecW5FMGBpfVp1UW0/aTZFYH5bW3xYaH5bO01RLnRScF9MfVg7cEUveFQoWCo5XSNqe0w5YTJMVmw0V0RnNVJRZX1RcEVxPDR7OVZaR182PjpPPlN+PXkwLEZsVE5fYUc5Yl9lYjtHb2c+QjNnfUhlJlIsUW97UzZJbTcyfjhOJHpMJkhIO2JnRTpiQCh7ejR0dzJfWSs2RWVzRXJdc3BDemN9''@;'; put 'put ''ZVk8Onxya2VeI1UvUnUxQjZmSlIhbWFzP3VNYzh7NXBlWF9XPGMjdTI5ODAwZzk4MTdqaUlZQUJGeWl5flp9P0BzcW45MlUkdi41dG4pUV90PDlqRmZbZ3tWI3p2UjckcEskN2dgQSRzLjF8Yjl1O0dFcG9FayJCPSR2ajJOaFZnImk6QFphRCRudFM+P1NEfFt5WWQ0JHBOdTNgJFU1O1RVRGoy''@;'; put 'put ''QCkpZFY9JTddUGMhRytYWWZUV0s9d3VpZ2N4YGMhfiF1LHwhV0tkXk1jT0EsIz1iUnNldURsN0JQTU9Jc05wJVNwWSI1QWBSOG48YDdQVWdKW3claGQ7emg7WXtmMVF+SWdTWjt5cTNfVk1rVHFESyIwQ251W0ZiaTA5MTMrLm5rfT5VOW40KlEmR1N7JmJLfkEhJmEpU3xoQzUwSXU7UGFCdGNf''@;'; put 'put ''UUlNKkQrWiRvQzV0fDx0bS5QLmBRcG4venhYSndGOWJ0TmhIaTsjP2RhUjlPQ15bblE6aCFfblcwcFUvPS5OfU95ZVpET1tbVlNgLnZDIWdqTnZ0NztEPHE8IzVPJlBmIlB7dX5ldzEsbllVYnJGQFt2SVNzfU4ma2I7YXxNWzx0TlBESlsiVk4xSz1aJU9ZZTM1dnUpWSEoREVScCEua0RXW1c7''@;'; put 'put ''bCZhdj9pWCM4dkFrWTszbXs6SlFLXXp9byI1UEhDQjEpb0MrRE4hYWExfFB1TU1hS3hgezdnNCYpXWBLMEFpQEpIb3E+bzJbeW94KXZGNjY5Lj0rflcsKHloZDZETCM9PH47eGBYNmF+dF88bHA/c14kXzZuPm5GdXZDUWFlKngqT11BU35sfVt2SGlsYj85fjlEN0NVVE96QnIoWUpGa049T0lp''@;'; put 'put ''SVFZVi55dXlDQjdFQnQjN3pRRV4leGRpKDo4clc/OHc1USV7LjM0Oyo+dnleWCphUkloNy5HWGUoYFR6cHFBdXI8KnUxIUM8e2lmLE5IfjB7Rj1Mc0tsKWVlRHwwVF5POkBLTihyKiRCWXZaMnJdeXpUOEAmKzN3NXYpJFpJMyJAYkJGVFAsNDlTVzMuPl9uJStpYUVbU2g9TXZhQj5jUT9ZMEpw''@;'; put 'put ''cTNqSXNzO0B7PGVHUUpkODBUTz0sfnJNPDMqPXxlI1YldVNwOjZUO1BfM0ZbMDs/dS9GRjFdYHo9RW4xS0U3Z19pL2o5JSpRdHg0d0s1fkVHNU47QEdqe2hPS2JgT1hRS1FJQEUifiYpVGB5SXdAc3FGOSlNdXRkYV5wQi80eDo4LFBGSXNrMm9hWlB8L0lWRzM7ZylWVnY0fCtvY1d4QyMvXmFM''@;'; put 'put ''aSlqbyJdYCpTIyZ+Xi5FcjdbISp8WihwaztyQF4wbTIvRnUqLy9DRF93TU9GOW0yYkhqRyg+M1E4MlE7NiNGfVJlMzMxVXlOWGB0aDdhTlJJZU9XOm80KmcyOkZxRXNjLkMpOShWKF4rfWU/PExCantJSTk1PztOUX47Ym9AV0k4XSpvIygsWDx0Nj1uJXJFTkgwVStVWkN1dFV2Q3JCfnI+bH5q''@;'; put 'put ''OnQlKGUjTVpzRD1KZls/ITs+XWEhdGBmRnM6byw0P0l0I1dAOEw3NkVCOkZsS1B2T3grL2g+Oz9gVGwsPmw1cGgxRVl0PkgsbFM6VTVmRURQM1dHPW0oKHcqUmQlMGR7fi45Y3dxWE06TTc9RGBAa290fm9FSWN6MH0wU0IyYlJWeGpzezN6dXhuYihWd3MocTxxRzF3cXRVJmZ2SEVFaEJAPEx1''@;'; put 'put ''Ryl+cntvfjMvNVspNzkvRiVGO1NoQ2BJUUk2USpzSSo7XWV5JSxtd1g6RVFPUEhrO3dWRCRtIS9oKlYhNmlxckFNO00yNlt9ZGRqWjpLI0Z7VjdZa3VFdyFJNCFzY2NRTXEzbihwJEtyYltDLmljYGZOc0hgTjJ3OE1lPiM1bSFTWGc5WUN4WUZ8O0hhU0QmdUhkSExSeFt2W01KJW1lOmFvUX1W''@;'; put 'put ''LGRIZV44KiRzYipMaGYoYEVAYlEwSl9NdV4yUTc/e3pPfkE2dkQpXUcjPi5FNGQ7aD4/L1ZyNmx4T2RqdzwwS10iNzIzV0tSKW5oTHRrKHIrd1dmPXU6LClYcj5NJDVmdjtQdHE8VkgjUm0vOUVufFRVZVQjYXx6STh5NTJVOEdCMH02KTdKLl19fV1PfFYsO2B8dWlHVmU+eX1nSDl8SXtDTUxm''@;'; put 'put ''OE5tOHNWKFs6KzZKLCJTOjBCPVt3M3A7PkxnSU1zeTtCUWZ9MD5sXl50ZkkxdkljPy48OU4vbzB2d2JLa2JFR0RqJE54cjRKSD1+O1clRV1BdiNQP1gsKnh7Lmg5JXorJEQpZFJAS1ZESHQyY0M+YEIsUm9MP3lrZSVhMEQlfm5ISWUrKndRWmVUcCR6M1ojVVEkZ0FJckJ2QDp3eT5WU31jfiU1''@;'; put 'put ''WGlwPWUjIyVFbkVIdFZRYSFlXkkrPEZKV3didGVeNXh6dVNkbzB8KXhWdTpXbU1hWTloVHloUiF3dkViOVFuP2QoU1BRZSt1enFeWio+Yi5ATFBWPUw1V25bUU5yT1EsTVRGVENpT3cwW3UqZyNUYl03Nmp4dCVYQTJ1LkZkOzI+ZCtHMX5RL2p8KHBfREh5YVF9KmR8fmllL3kzSFIwMThaRnx1''@;'; put 'put ''eGVEQzg7TzdXRXFDLD8qNVskVi9AaXszTGcidEdfczpmLHFDcnpfZ09uRyp9Nk1EZEhSKTtSR1ZpODB9TnN9Kig3RWd0NGBPZjEzM3REPmhWMV47K2R4a34qJX0iNlhhPzlOdG00aS85RSYxNjgiWklPXSM+XTM5d19+KFZgeXtIbDN7Znh+ZjAiZG5vY0Nlej4qMDVkNmkjRmhgMzs/RzliZGxE''@;'; put 'put ''TmxLQ0IrOllMdFhea3R9QE1aQiJbPHlxI1tCIX5iQm0uISVWJTNQO0goclYxdkFCW0Z2aGhxZHBNUmRiZ1pYcXJ8UnRRNiFUc08zOEJuOTRYQ30+RSg7SyR2Ojd9TDVtPXd4QHYhJFY5cFdtTCwuVU5kfU4wJFRxWSYvekgzWlkrSXNvRVRyZDJ0UnFuQEojUVhHYT83elc3IX5gbT9NbFFEZkUq''@;'; put 'put ''cmhORmVIK0NjRmtxdlNOYmAuMGRYaEpbVlV8RnZ0Nj1Eal4pW01ANiFWfC5wSDl0Izgwd1I+S0chXVA6Uz5oX09fLH5PfGc6IUU/M3s9OTIieF59M0lkZ2ZqIlp1WiZYUGBFTDBWckV4VHd7bFl8aHxadF5zRlFqKmdPOUwwPUQmc09kUmU6K0YrJCUhME4qOzMiJDZwPzshVzlJbDo8aSs2UU0h''@;'; put 'put ''InxeYkMhVyRNYEhBRkg4QShJeGV7fVdmb1pAPlQiaUxeRSQ2bmliQH1JM29VPzBOWFZIPXFKTzxWL3RWT11wYnBZVmROflhMdmZ3VHArRTFve1d+O2VZQChadzNDUn1xfDAhKWFNN2x9O3pjR284PEBkazVoPCg3YFQ/fjt+UU15SyYwTz5tRSV+dl18MnJxQzAlPjRASVJjU1R6MnxeJD9WKktD''@;'; put 'put ''Uk1CPHI6PWpoKyNGbzElUFc3I0UqOnQ2VmdFPHxoQ2tSRXxBK2N6VSthNl8wZFchViwmJHR8bE1UKVttUU5MQlleX3B5WlBwfnVaWE47OkdlZlpCZ0k9eXBadylSZHleKk5mUF4kOnZMYVg/Z2hROW8kKU8qWGg1dyVfJU1XQ3FZRWtEM3YhbiZ6KTZtKFk6bXJsYzpiLm57OWBtfHJbRVpPMlpS''@;'; put 'put ''VUt1OGthfENaJmY6NUY7KU1bdDh4XT0uPU5RRWQiWz4zcE47QXlPVSE5aTM8QzcpKlNwJGchU2lwQVEpKzlncm06ajhfaCIyVS9uZCl5cXJiOWtTMmZQdVdfRUFIcTRTVmVyZXxjS14qSllCU2c/OUp2Y04mNjFgaUhCIm9TaXhKMVc+KlMoUC4md0pwV2prN1NRdSsrLmg1dEUxJEpvUFE6aTNC''@;'; put 'put ''OC5iMz1FPEoyfjA0aWZPUTx+fnx7SWFvN3N9bFk2VXhNaEdDPE1XMERzcHpBdF9aanN5ciZOMlpDe2QzMW5qZkNsWzA1LD1LYF5jNi9+N2FzZDM3an5AIUdVVyFASHR5Pm88c1hUdDkiN3hdWFY1I003aXxgNlhoWls+NGUiQjJnWGg/UTpoaFBHbnR8T2xtMnR4ODFfezZSbGIlSmN0LnFJP2V3''@;'; put 'put ''YWRTUjAzRylrXSxmSz1vR2x1dVZkQHJIY2FNXlR9fXE6U0E8UUtJdS8udShyZkRoNX1UWWM+WH17RUAhMHo7KU9WWyRPL2Y7e083XykocHI7SEJwd29+OWt+RllWeiIzd31oL0ZJSVkjdTxkWn5JSEQ/LDFGQ28sRXVWTV8jMXh9XkReV2hnZF9Ea1d9bWhQcDF7VDo5QEFLUl4+aj8xUTZldj1Q''@;'; put 'put ''aDk0UyRJS1lFSDhLMCYmKExMWTl+N2FoPFtkNDVKREsqNyQoTVMyY34yVyw8N29UaTtUT3p1PFQkY3AjUFEjc190e0tXRmUjPCtga3s6fWMmJnV0JUlsIzU5PyF4PFNWeTc1Kz41VlN0bk1YOTVHaD4zfDpsZiZnU3FEKWB6SWc3eF1OWDB4USkvJjdkQiVfVHkkc24mUSNUWmVzaWlUQF9AVG0u''@;'; put 'put ''VWJQXjomV1c4MEFAOVE8bCFYIWRXa3o8Slo3XWE4MFpzKmp2KHpfemEwTHBWIlJWTGJ0XXkmWUZleFFQYzhTZDJ5REtwP1k9MkwodClKN3loS0loRTomTStgRiM4fEBPaChbSnQiJD1PdVh+OzJDPyNKMW5jKkEqWmAsZ3tbIzJkcktkbSJmXz06LC5kRWh1eDo6TllWRSQmbk9WU3xYcGwjIV5W''@;'; put 'put ''WU8qKEdQKGplQURvMChqUDIqOSRVO0BhYj1sUDYrM0xLQEZwLlpCdTAhQj5tMmh8SjhYTWhXbWlhJFF1VUcqIiJedlFTJCJWLzFAQyNKLkwoUXIzODcvOipjV2J2LkB7cWA6UEM2VVYkMkd0VERed0JSdnRVISp0YjxtXzl1aCU0UDBxZix7VjQhIjd8PntCMlBSXzI3ISZnaUg5UzA5dHtmO3ls''@;'; put 'put ''ZyhBMEBmNn5VUl8ieCw+fmI2WyIjb0sqTitTe0VwXTU7VklIeC5xWnkqJXEhck9lTjRAWTJ4alpgKkUiWHV6PyhMYD5PZHp0SSFkQE1BOmk5MWIlXjAkUzozdjZNP3RbVzUpWnskVFsvOmorVVROUn1qPT09Jll0cm9TQGJRenMxXVVEKXIqU0k3TlA/ZyoyenhDYEY7cCM9R2VxXTdjN19acT5P''@;'; put 'put ''Xm42P0FtYkI2Om4waDtfVDN8aWltaSxGais5az1KciRTUjxiLiVzVzcsclpATiNYRCUlWGU/SW5qSX1OWD5DfjtoKXI7Sjt0e1hCOFAwNGFEczB1bW08MkI2KG4vRjN9RTZAb0BvJTAwcF1HZzopXXhGPzl3YVspQEx+UTNFX0hAcVBdRUhgcH1rYSQuI3ZWMy50Y1s3OjYjQy59OWFAUWVGQmpk''@;'; put 'put ''LCE2R2pHNGpJS3wuVD8vMj9gKXpQNmAwJXA4PS8rdkNRfDBxNXBON28+eG5sS01obGNLYy5oWGdHcDl5fiwjXmMueFM6azFoIlIpald+TH44NX1HKk04aldjK1AmZmg4TV5XayopMlddUzhAdDY0K01RJVtVM0doZXBRYE4hbW1UfWJ2Lj9wcHdCQ2R7ZlVTKl1sejs8JnB2JlAsTF9fUiJ6MX02''@;'; put 'put ''Ukp0WSZga0FgYnhBOkxtNG5DKH5kUFN6XWZXV1ZKPm8/bX0kfXsuY1dTSndgd1ohNDAlM3ZmJT5dWWZfWmNvPkIyWzRaITZ+bzFNVE0jKH5ZbzVPSDdMNX5TbTEqbjhdaHZwI0AlQSpYIio9VDh5O2pNR0xFTnxiVzFNMD1EbyNffTtCMkV5Mk11THhVQyhfMnQlTWdWWTpPQDBJNEhJQn47LFdt''@;'; put 'put ''JiN9WEZNOnl8YSVVI2lWNmNTWk4qVWpJWitiPCw/ZGRsaSJ4Jld2QDh1Kn1iP2crIUlJanZCSkU6ZkFAMTtkfEcveXQ3aGgydlRFXyRgI1Blc3YpNFRNM3haQHs5Qy9oRSV1emVGTTRlVClAUUtHNG5hfntqalUmNl5pMXo2ZWddUUk1RGU/eThbIzdVTzJPbHxreFdwRWBtIyw6Qn1wSVBSd2h6''@;'; put 'put ''cFs2bnY7O01qJX00O2FhI2pCYmIyO3xra3VIe3NNK3ApVDUyZDdTSnBOcW4hTUpKKXE/ais0SGRfPUJqbDxZRXFKZVpXaTsqJXxrTVlRWSpRTXg7PiMmfmxUZ2JKI29qVSUhYEtENm1vfkpGXWx1eX5QQz9aKiJhbW4rRUI7VnZ9NHFKe0span15el8uQz9uV0huQ1Bidyk+U3J2YT52U0JYfmRG''@;'; put 'put ''JWx4c2xOd1BCZXd7T2tLUEpAOF9MXihuTzw9PDBnZGJHR2dqZUk0XTQsSHRCRVdxVnI/R1cvamhWSzxFXUBHX1BUSngrWn1LZ30+RWw5XnMmKU8oYW4+RHRgdlJrY1BpTTN7aj41Jjx9KHpCWTJMaUJhUyxJWVtqI0pXYWFJe357YjpyZmxzclgkYTNNI2BjX0h7UWlbenhIMFAyLGlxXjAhM3Mm''@;'; put 'put ''L2ZqRXJDNHRUeV47Ll5WUGV6TEJwRjdqeWpaTVgvaWZxNHw/ZnIrdFpwQnR3Wndzb3dCSnwrOUokYWAsJnVMcFd2Kk9afD5PYmhHYWA/QkRsY1ZaOyN1YyJwQm9rYiRJJENMVCMvInNOdTJfQUloUGNYYnM+bVAkYWpoak1JemNLP05keF1CVG0mUUUoVD1pOG9Cdy91JCx4RkY+dzchQHhAZlB8''@;'; put 'put ''SFFCNDNBXjB3WHFsSyR9M1R+Z2xOXl5xZy5AM3dKdi5rPDM7cXdmQGt1Q34rV09hY282XiZwXVMwUTs2blVoWWN3ZGMzXWVSQXJKfm55fXBeW20wPVhSc1BmTDIlfE44VmduKCR8YF52fWoqPmhNIzR2TTgsQ0x0W01PYVdsJiE0bURKSGdFQkg2YkpPWVFLTVcxQylubltRczFBLm9VOTEmIXdN''@;'; put 'put ''UVVlQ1dGPj5+KSJ2NTojKHI8IWJnblRmPm9KeGt8KXp7PHJoSTFSSWtvIU0/MSQqLks7aSprP3JFRShNNl97SG1jYDMjVnRuRzVFLFl1LHZCZj46XkooYzU+WjxETTF5ZyZDME86aHBUMSlsPGBneCpmNyUibUA+fjMhNzFIYz0zdGxEXmk0LClIdGElfk9uSFEod3FuKlBpbGwid09vX3JoPXhC''@;'; put 'put ''OlciKX1zWnZ1Mz16Pz4ueyxTcSZlVHJMKlJYRHJMT3dEXSUvfCY0Xi47eUxENyljdCJfVSp1fCUoWW12PlFEW19jemU9ZC9UbWcqR2AmJURYQ1BncWgsPkg4Ky53eyFpT05CJTh+VTM/TXZrLGBTJXV4bHhvPXh+e3NmPCQ7JH1NJHkuelZRUm1fRGlEIn5bUkJ0bGllWHp3N2NNZj5CWkoze2Mo''@;'; put 'put ''cGp1eH4pZnlxbF5gXnx+PnlUMGxXeS8qUEh2aCRyRFBJPXxBPD08UzFIa2k/eWo4UztgRzhrKl8+ZElzOUQpV3ApKWs8fjp2JDJ0IlFsNURvQlhoWz44cGxEYXtNbDgoQUk+YnNTNGMwfjFfeDF6MUdAR0UsLkZgSlVmTDNwRyxLMzwwL29FekM1cm0lIj9mM2s1Q3cpKSxXa2N7MTpeaCwyWihT''@;'; put 'put ''NkBLPjg+MilJYjZLbGdIJSs0QHpxez4/IV8/SVFQcEhdfiswKmRyeiMlI2N9UFk8JntmUSwkUVAsI1c9JEM/ZiRlJVZ2eHdHQmRIU0UrUF05JW90JnhzNzg7WngrIm8+PllXPjJAI2FQZmteQml2eWsjWT0xXUxHSWplIz09aD50cltfUXd3JW9rM1l+ITNyK214O18/WH5WTWVEUCohQ0x3eW8h''@;'; put 'put ''TDE4YEE3eztjTDtlImVZMUwkVGxgNE9abmhXfS5JKk5ULEQkVWlNYzIhaEtrNkA8JXxlV3Judltbcm1aXih6e0BjQV4iWkhdZEREIVBmSn5AbF9xfjwpQ2VuLHIyODNXcEI2RXxSQzpYKXUwNWU9UWkhTWVOUWZHTkdIeTNUSS9DSHZzNWtpZ1N9M198YmFTSFEmKlVea14veGhKYSI7X3tkOGxS''@;'; put 'put ''MiQudT5tJHBaMTx0WlR8T1RZfmU2JlpQbkRQNDM+VGUyYShwM3R2Smg+bW5mW0hTRylILEYjQ2xxYWtGPkp9V2RhaixTd11jJU1MWntCZzkkSDYuWmBTbmhiSWQrYH44fGgiUUtAIWQhNWY8Yy5KMGB7W2s7RyMsXSwrVn1SdFgrX2JxPnNDSCR7PlQ8IyQ3Yn1uajwrUl9POjxuM2ZjPXdBRGF8''@;'; put 'put ''Yn08V0tRQklMeyM3NXBwdnEwdXVUU3giP3l2STciIlkvRVd2VG1FRCZdc1BBS3J4WjhGd0B6NlpteVJEXW9hTkB6dzF8ZSphUUtlWnp5KlVXN2M6ezwlenhVYG0mdFZXfDJ+L1RYI0RiZyRmQmwjQjlNYVp6ckdXLD5PWGwwcTdFQGpVa3t8SCtoK2t0L3RecWNqb1h8XntfOiVbKU9CTSJ3QGgs''@;'; put 'put ''MCJwWEJ1PGxbKSRfJWdAPnE/Zm5ZOl0kRG5Qc1NgYj1+MWN1UWdZOjRubWImRSNOO1l6WXZsWG1QdGZOODxZPz9iREJPdWZBNz92WlNkQHBDd0tOTSFHMFNiQmp9MDJPUVZ8ZHVAaTEvcWpwMExbNjJNbl48L3JLPUF9XXNeOGhBYTRuaEEjanhEbXJuL0BTJk1HTXZ+IiY4WHpEM3VDbDp6R3Rt''@;'; put 'put ''STIjUlBzdFhAPjR8clk1TVFzOTFBLmB9I3k/Pi4/R3VlOkh5S3VMUnFhflhIPUZ+OjdiUGR8SzR7S3dePC9EZEVAMUsqXjlJIU9uU2dxczRWJTVfL0RnMjorfG58OyEuZW19MHk5JU9qM2VgcCJQNSF5L0clcktHJi4qQkxlJnZncFdIeCNlU3QyZnc/QGRhRGgpfWFdfmglMVQjW01wWmRkLFA3''@;'; put 'put ''Wkc0SD1fajwodj84WWErY2h4JjMheD9DK3t+YTwvMHF3MlBYQT4ocjR0Yil3aF1td0J7TVlAQX0pYyZ+OnI4P3NbZFVLQFh8b2hneEpZISF6bnhPPFVbPCFIK1dbcmFPXXAkUl5DZGNxWHRpMHxbKSFHWTEkVjx1aFFdQ3JAJVNMZTpveF9rfW9yQmhzdUZNeTE9eURhOHxgcEQ+cn49RDp9eElF''@;'; put 'put ''N35ETS9Ld1t1dDQlTFErS1lfWWglVkBZREw1eVNqUWoldEg2MVpSTFdwdCQwNltTbk5VWGBsQGQ1YkZgQER5Q0VCb2NUfXE/ZnZCVEViaTNQUCFHP0U9aEtdV3pKKn56ajh0RkZIRXpNJGtpSDd6WV08bW9bRVNZdD9yRGd3VVs9cSJWQltPPzR6UjI3MFowXUVmQTBzKUlsMntVUnZ+JVUjXyI/''@;'; put 'put ''akNYYF55MSYqa2VtMUBnN19VZVNxYkZmeHZ4VTkjXnNiT21tUEhacEowU1N7Tyw1SXVrLiZRYzhofkVCWmc3NVc6YWYoKHF5VEo7Y0I8KnhNX2gybGIhKyNhLltXP1Fhe1t3YzpGTzMxXTVeR0xOQltqWWojYl00JUNnaX1TWStDPndyNUg7RmIzKzk+W31jey96fEwsZnIzbGV2WUhMOkMqcE5I''@;'; put 'put ''OyU/NnVCcGFJUGgqeWh0SVtWcVpLSGw0YkQlN2JpZDNWPiFpNm51OFM0ITBYPlZELDFieTxlLFNhTCpuO3QzODY5T2dxOVo5bXpOSzpQZEhmRTZ1ai87aCRET1kodVN9I0AzN15jMHNhMmU2fldrLywzW1MqJClFSzhlS2EqKHVeNjFGflZ9X1ksJnl7dF40VjRUfHhIdX5IMlZqNCRvMGlBS112''@;'; put 'put ''QUQ4ezlpa0xOMmZIdFVSSDgzeEFBKDEhbktfbWw5KSEzPHApKVlfTDI2ZmhdRiUzXTIzQWpEay5qYWBxZjg3cUVwMn58b0hBZDZkQzprLFkvNn49PzpecUdzRFhGRisqLzM0VlBQSkRkRHE2c0J2Iy4zUSxjM2s3WV57V3VrQkx+NFFYeGBzTlAwTCw4aDBdLHxhRUpmdm80VkhXfTNuc3heXn11''@;'; put 'put ''N0wmYT9yMWJXT0BoIz9aNDh0NWJuK0QpOXdpQXFGS2xSZ29sIj9kfk9PKm5qOjVDSWp8YX17fXssW0hjODhHYTMyO0FMVl5pQy4hJiMqaSFHYV5LRm1ueVNHRSpoTTFvR2oqVH5EenQwMFN+TztUa3gwbW0wXUgrKm85RnomZnEmezpKfXd0dTxSeDRsYD5uW01VdFN2aHJnSCJidzw0R287UDt3''@;'; put 'put ''YE8vJlNCdGkpQ0VmfH5IMzhLallldXVASzRme2dUXzY+KzE9QHZwdmpbfXZHa29AfE5aPEtwRSppe21uKTFfTD4oKiZ7LC9Ab2tqYzJmPmMkVkRNS2U9IjJnZ1tlKyE0TW9GNjNbXU5jdWI+SUxwWWBKeTxgRlU4MiNxd1F3QkVHMFBQXVZ7RlU/WkN1JCRxXnhLP0VQIkpoTkM1OUxWS0IwSnkm''@;'; put 'put ''aGl8VjdmfF8mZHhUYntCYk1OaGpAKXNMJHd9TGlNIzxmNWQ+Vj1jI0Y+b0RYXnVPREtiIz1tLF44IU4uWHB9Ol0oMEh+aSh3IjtLPVVVcjNJfiRbSkNdQiZHbHQpdSZOL1FmekRyQUZtZyQ6VSRGanZUfHNJWV1nbzovK2lKbWtCZCFVcVdGTyQxeG0/JHAqRWVjdiQqeldfeztLPVQ4UHNWJCg3''@;'; put 'put ''NilWWVViL25RZl5DJCVpIUFNfTc9S2dmLG11a1VOTyFsW3I0c1V5RVA1TH56JDNEXSw3OjBNPDQoNywhSnNHaVUjLnFbdm04UExrVm9rayZXKlR7Yl50ZGZRJGBtZX5wa3IyWyg6K00rblpIO3xucEdMdHQ5KTh4OV9VNGErcCZyPGNeMWpiUmgkZUprN2tBXmByZUVuKjgsL152d1tOL09VfHc2''@;'; put 'put ''cmdDaVE4OTAmZjZZb3Q6eWh5fG5IfnlMMkVZIXE1XzhKMV49MHEjPm9RPmhfREA3YWxuezpbNTQ0JSlCNSZ3Iy4xSz9PbmdjT21mMllbU3xbT2hFMGl4VVRzZ31ZTUB5K09lXS9KejE6Rm9oQ2lQV2tPOGcwMVRgfjk+ZE5Vcz9YdC9xUzRVTTxoRHxyKTUoZ319KjNeWCFKcDhqOUl5NCU4cFs7''@;'; put 'put ''fkY5O3hzXz1yWms6ZmltdCYoRWpoOzoqJUw+JnRNQElGcXRET3tsTi9HVDFEV3J5bzpINHc7T2VxXlI9ZnV9Tn5YNHcrPGQ5Wy42aC9xV1Q7SXBDOSlDUn46L19+VVYuKDxUP3l5VzReZnFWM31vfHIyRkwmVkVdNHZ8WTlFUlhHXk8vPjw2Om1gflA1JSxdfV9LP2lSeVcrIiYpMGZdUzpmSzZA''@;'; put 'put ''RDIsc3czIlU/IUxQI2J0ajNFZlF3YldGOm53Rix9NSREdT9kJVpURzV2SjohUjMoY0g+azhpMTs7Z3s2ZSlxPnpUTXR3YUdhWnQqRjh2WCZ4NWhVLl95RDAuK10qfXRZJiRPOl50d2IibHhEPkQpfV1KcFA0YXE+TkBnKlp6VUpZdk9PKz9OZGs8QWVfSEYyWjVDOX1SVV1fYy95ImovTUVmeDU2''@;'; put 'put ''NUY4RUcqaElgRTVaQFcyKjpDSS5BYCg7QlhbVX5gfSg4XzZpblcrPD9TW346UEFHfH11bS5bbEVJRUJgVGNqISRSKVBqRWQpNiE4SlNrZlMwfEhJejBNbntPXnRRcGtHOCZ4U3ZNV0x2VnpLLnpyOyxjZ0tyKU5iN15dLnhrUWE1JksyI0I+YUc0JWpLekFxOk5gRkJPWmp4KU08IkFObm9NKF02''@;'; put 'put ''JX5qd3RRNGA/OStZKmRATXZoLEpue05RYkdiVTNaSjhwUjxLUktBMmA3eSZpMSJfVi9EfjUscjA5TmljYT9iLz95ajh2VjZ7dTNoNGdMa0kmOldLRDlkQ0RyPEJ0R0djbyp9MWJxQTh2MHhtez9JKDR+XkJkYDQ+fFo3RHJELmdIYl1UPnQjMG1gRmcrV2RZWGU9dzhybkQ5JFJgOExAMCwjO0lo''@;'; put 'put ''UWFQQ09gR1BFWzB0OC5SVzVmY2VKKj1DYTl8e2ElY0Z+cnNITj8rc1BXWmV1X2wmXklheSh6L1c4WjosJWwjMHZoPk1PcEgrbzp2Ull1VyFpY1pnb0twJEgpenk3ZXo3Ql8oaEVnWk8qN3goWkQhP2MiWCozaVV1cC53PEZ1cFkjcVowaVVAbVgsQld1Vng3K1s5XiQzTShlezhLfUhSU0d3Vy85''@;'; put 'put ''LGhfIWBCeDlqX3c+ODNvNn1XL2hHRGY4KzROZnBvQkB1W3A6PSU1RHI5W0tMfS5eYEAzfUB0N34mdncuRmtnQk51OzZOIyMjTUl+Qndhc1RqeUlpRi9jNW1qc0tRJD51PFNuMTFRMEMselUyfFBYOWFIdjFNJFsjOEhHRjFyPThKLjs1Ji8mUGo4KCtEMjF4V0c+JDQ0W3ltX3wlam5wU1lIPDNj''@;'; put 'put ''XXpQWzlHKDkwOEZuckR7R1JVLHpiP2ZAcFZUTT9JW3h8TU1RNjUlVEJQYjtoR1FHISoyNVt3dyw1UmhPNlN+dkMxQXVHXSZFNSksb1IwZ0RzcFhTRkZERXp2ViRUYUV9SCtWWlcjbGZ1Mz5KcWxNY0IsdkIudVhvNnUxUFYlImhZTF5oOHw6JGgzM31QNzJrXWUpfiQyUDVRa095bzgoInksXTIk''@;'; put 'put ''bXxYeSRZTDc9VjBKVVcxMGZ7ITA1JCQyOzdvTmcqcG9iQ1p7YX4+eFszXUIwIzZiWzwpZl9ie2djVD5WYiQ/P2FKMDxAJENEOnFQUntNaE54OXFwT1doY0ZZaDJEJDg1UTxhaHA6WCxIZlFKcCwxeHJtUj1TeClGN0cxcDI9aTU0KCNJL0NocD1KbGcqJWdWZy4zRXlAcCxVTmJTI0tJUGl8LDNC''@;'; put 'put ''YUpkLCR8OUU0TFVHdyxxcSx0NVo1KSlZR2NLdkkrRj03d2dVVzNDPENVNnFDSn0uczB4VmZFZ3s9QmJuVHp7QjxhPHMsXVc0dipfbV1+PXMpdDpueDIxL308NEtTRn1XfVNnRlQsV2EwR340eDcya2F8V21WQlptcyp3Ml94RUIoamdlKmpOIVRVfiw/P1V6ZDY1O11RMDQpZHJ9U3E4LzU3UEcv''@;'; put 'put ''Yz9VZlYkLk16VT5uazAobyw6cX0idGolO2hpQEs5YVMvZHVKQ1BtOGVpYl9ZamM3OyFdJS9GTVApdSRQRXBrdEp9S2cvb1thQk1LIm51QGZbTU04Yk9oUH5lRzwqL3JrVTFeWzFnKHxBK0BPUE1iJm5eNll7VSk5IjlSVTZtfF5xenZOMi87ellLKjFXeE14an1oeWw3R3JRQjwoIjNFTE00W2lR''@;'; put 'put ''NlgyfHdHIkxNQiFaS3lwaSpbPitte2lab09pPCVGfmtxTyp0XiRkfHVKNDhtbnRYLipgckY7UygiWWFBWWklRlZmYnxdZC5rV0l7JHFQKVUlQFtITSNdQVh+cktYRzQ8UF1idX1Qa0AvdkdQMjZSWTFzREUkRT09V0lnKUxbQSgjU3IofU57ZzFlZXckNm86VlFnMClCIVhuZl1DOWpLZkd4MCJ6''@;'; put 'put ''XWQweFA9QlBqaX5pWVhqdWtTKTFiPWxjZiUmIyE0d2RvaWZXbiRpMF95VDZVRmNaKWBiS2ZATm5OcTBZeT5pKiNpUCN1e0BrN2QkK3hFPltpMEpyOlYjdyJ2dVh7aSF4Mi8sKzw4YypXVSsjeWFrQFVZQnNUQmUuYjZabD04YHhYcmJNMWB4SnBBUW9hIShuVUY7L1ZhVXMjcUFNSTsofSVecCVw''@;'; put 'put ''W2MxR2xnQHx1SEY3dGVkVFR4djopayRuYUp5fTN+JjRdTlZpclM1RngqZmBYZkA0K3pkQSN6YHBYZGR1M0ZgQU8iejpWYTYjSypSVVVaPU0lWmRQbEVsUDJhTEslQjhuXi4vZGx2JCY6dWksL3AlLDlpP0cvS0Z5cnB9b3VmVlFxT2BKSTN3dytFbENLUVV8dXN4YlcrWTd0MVU1OW9FLHc1ezJJ''@;'; put 'put ''QE48QHxpejBhfjBDIyZIYXJPNVNgaWJxYXJRW1h4TTU7bFQ/NTI0c1lxYTBJLnFGWjR4SW5mUltxTltoUyREWTZhXSM4KDRRPGUvcSgvZFJTNWc+N2IhYDpnXj5sKWhTUUEsdURyemplQGErazhZe05iM0k9PUQuLCEhfi9OdU8jYUR6dCs0aVFnTlRYOSgiJktOcFt0N1spJGlKZVdiUEI3fFNu''@;'; put 'put ''bEE9QVh7ckl7PSVgZVdIakouNGI9S1ssUWpGWys6K0FmdTVZQ3F9UmI8L3tIdz1oPyp8aFpjYihCM3VaaF9VT0olQzJIX3ljamdlKTNPZSxCbXl6bmUmQD5xMStPdUghJSR2OiplNixOeGddZUwvcGU8RGNuPiF2TFNWOngxNHNCI1NxISp4fkQhOnsmV09uUn1CY0JAdHh+Xyl3RCVrcyorL10v''@;'; put 'put ''JWQraCVNXiJVK21sVjd+dkhpOylrKU0pSiRsTm00W3g7cTptXnxvWV15OH5KZnFrXz59biFAc3R6VzFPdnFOL05PJnxGbmtlZmp0OXpweVFQaUAman47JHteZD0oeSlobUBiZGRVOz1QPTQwSiFxOGJbUG9FLnwjfHVWUzFMKzopdUdbXXlYVDB5KXhGbElIJXRGYz8sNWJpJkxgcG55T3xNYywp''@;'; put 'put ''K1daOTNDOG0zbEEzaklMRXhfYihFI1RdVXV6K055UFhBZFp3UH4/aFghKn44JSU7cS5mPE5QeUIkWVQlKSt4WWNMZVA3VCMuME0rVDhNRnVMdzttPntIY1NIJUNVNHo8THxEIzg9NlozV1l6Z3l1VmEyOV92am0oU0UjLHRaSkUmMnpIV1R5WCtCVjBbYVUqSylLUVc/eVhSbkU8YGA9YUVVVy5i''@;'; put 'put ''cFVOWEVacml8LlJsYl4rJmlnM0pTVVFELkw+UHQ/PHpXRnhtITo9fUxzPjdoaDIlYFA7dj1xYzheRUQrYyllSkhvYkl9WW9YYW5HU2Y+Ykx8Pi5FWFptIlJCJU9GcSQwLHMkQm0lVilZWEpBSnVgWnByJDgvanVbKlA4IW98ZngxZnh6cHROIUohdXBIU3dLcWdlSWx2aUtSJUApW3krOyFubjNU''@;'; put 'put ''ZSNfVlheT3FbbztMc3M/KDhkWTg+NmkzOjJPZSMyd2lpOENPcFQ/TS8/YDx3fS9TVDdlMiNQXzxfLjpSUHBze1JPYU1zTFpwdipFcEpxcnc7L2I3SjsjZEx2eWopSVcpd3JjQEgxMz5IYF19WXojI19Gc3dxUDt7ZzpVdHY4aytpMCUuc1V2ZUFVVWM6c1RQQyJiUV5IQjo+ejIzXmcrVHN9STVR''@;'; put 'put ''MF9PJS9fTmY0Qk93cmxaREU3eD1GZzdGL2RAa3ZMfl5WKnYkO09xYzJxc0xLTmF3WS4rZXFmaSZbREI6SkEzSy9AN3xvaCxwNSNoSklUIz1ecEhvTDs7MzklK2BadyZycz99PnU7aTFmRzduRjhBMnpnTWZ5ckM5aU9ndj5hUmhufC5VJWpXWUBqRU05eVhqYS5VS2k1M19LY09xVT5WMzRVcHFQ''@;'; put 'put ''ZTZSKT0vRmNjSzNueUJ6IX1bdHd5NztQREZlTno3bjpOVldjQnUqVGkiQ0R1IkQ7KSNFLiFNWS9MYEZNdjpgcm10IWAuNyJJIW5iaFI5aDk5c3NFWUFRXWBwcygxN1d9KlZvQHt7IT5RRip1JSh9Nmg8Z0k2cmNTeHxkOTxyKlVHTHRrfFpSP103PWVEfTFeKntORGZEYWUpOH47RnJQWmtXYHJz''@;'; put 'put ''WWlhI3gjWzJbcV4rKENuNn5dfTlda15AXzh3MCZvWi5hfDgyLk4jO1E3SGBxfWdPUHVpaTFQO0wiZVpwWHg5RGReSF17b01DL2JgNWlFekdASCZoMlpoTk09Zj8rfTlgemtbM211dCsuOzlKcTFpZVkvPzV+Y3hEYlEhKHtzcUA7ViI6WW4pMkhaOlshfX55WHJMOX1efkNQUkhUcCN4ZlU6bWhK''@;'; put 'put ''M2BaVX42MVh5blhwfXVYPEs7fGU2fClsZ2sjSFRfSk96fXlMUUdILFlhLCxsYThJfkxyJmBoUiJNYEE6Uzc9RH5WPihLSiY5Ri87N259eVlhfmkoVCVKTF08PShGSml5c0Q/azEjdnVaLFJUdHRwOUBRbTs9Tmh2Z3ksOElwKGRURkAwKFBVfjt+QURWUG5TSCV3LysjTDY1TSZeSXYyVUt2OiZl''@;'; put 'put ''SFBpOHxjIik8Xig1bzs3VmJ6czdIbmtxeE4iUHN5XXg9KF5Ja0Q/Jix0SUVAfCk1RDR+fSZecFZ9ME5hJElTSyxXUnZ1VXMhKEg0LlFddCwvPzFuYXJPbDxWM30ieTZ7YV1FKHw8VHtsZkYzP0pubS5Za3FhdHs1QU5MJCxvU3V3fSxzb1FhPXF8Q31nQlJ3X1VrNiEzRXIpYUMyeXk9KSI6aDpz''@;'; put 'put ''Nl8xUHQsKyw8YV0sLytkWF1zPUs4Vkd+Snd7NCl6MSNJP1JlOVp2ej05UXNdNXpNNk4uQyM5IUwmezJfV11mPDYzO0Rbb1NWXjBVOkslMWt9V3wuNClLXWJMQllHUXcmJWVlc1lEcTMrQHt0LjdbQE8yaix9eV14clorYXtndlVYKEYwOiIjd087fWUjbDQ6L28+KGE5OFJZZEN4Sl0zYVN3TStn''@;'; put 'put ''ZCxJaituQT52OWhrMzVQRjIzfHZUVzREal5ZXncrInM7PCJzekhVPWFUPGB0fGc7b3dYL3ohJVU2dTlPQE5gK2BxfVJCXlZmNUNkUHBJSkBVb1pPaGxwWj5fZXFyVUtIYXlNJl9yamhfPXE9U1E5d3gvLjg8MG8qPjskaGZjPXVJWEFdWUZxRlMraUxwcmxKMGo2X34yN3JFazZ5cE93RUQycC9C''@;'; put 'put ''RmVidXkiXXQiTTVAK0ZtOVk4WFFCNTxPSEI0ZFs3Ri8wXSo0WjNrajNHMCVxfExmczNYYHcvPH4wMSY6OypGRyQqXW94YT4lO2ZKTE9JM3QjRHc+TDpZPV4xL2x1YUxzVE56bGNZa0R4dTlmUC5AbkJ1enJeNXdkMitvcTwrckh0KGo3dXJLaSN2YVM2a1RYelhZfCVofnsmPzNOeEVUWj8wN3c6''@;'; put 'put ''K0J3VWgifFM5XlkqPTN6MlNqNWhgZylWM1UkO3dMJVlVJW8jSillUEJXVTRMN3hNeDphL093WiVlZyw/KjEsRkRZdjs7K285Xnhda29wP097Qjc8Z2U7YUtHcngiazArJS9qXltfOitPdDRSaHVZNylScG45biNBXVRuNFg1O3lDdzNzfTkmJiNKfSY5c21dYFkycDM+SSRLYyksSj98L3BvY1Fo''@;'; put 'put ''TzA8Q1VseVdtI3lYdDY5KDYpakNSdUVlYSo8TWcvPlZaXThFM0coLio4Q0tKPmQ2YDMiTDY9eWJra0k7X1JbfnxbMDJQaTVrWHNnWXxIb09ZLFVDaShqVGBqQ2dDakchcjNTWV9uZGUxQEgyVFEkQEd5dSlnWWd7N3cvOzN1Tmk0MDxlIWVuU2N3KFk/VD9VQyJBMCt3Sz9BTWVLZTlIJjxNbzNL''@;'; put 'put ''KVY0cnpiZElWPnhXXW42SjRqUjooWW5PT1pMdT5vfk08IXQuby8/IyNUVSpEPyNXJVApOHZkViR2PlNrc0hHNU4kUnpPZldufklmQythQU5dM3I7azw5JExdI2pZNk9AUiooLkgraV0jNXBfVHJKYzFaSlJhZUg1bEBDbHlOfGlYS0FERmd9LCRddXQkM0tZIXlndEVkbjJzKW5FWX07SmR6aSVw''@;'; put 'put ''MmtheHFLV0Z4TnNIQlB9b3g/MGhGTztEWTMoVDpObjouX2NOOipfM2l3bWQuYzlNRHRTdmBNdlpVS1ByW1A/RGp7dT0id0lDcFBqSXxubS80WlNsLygpRXRzT01TUXt5ZShEaDc9Kiw3czsvI1ZwKiMjVkgoelFKVipsYUp2XkE0SERgeU1MTF5AZHQ/L1hUMmJrYGdqO2A9XlZoK0NgOSp4KF0k''@;'; put 'put ''UTxAWHg9Q1NgRS94VjJBaTRnRUc8N19kdzIiaGldXSRvLFdodCkraFlAN2pRMWJXbiUrMz9LMVo7fl4qPVNyQVdlUSkkW15yZE59QkkwLiEsO196LCYxWiQxUFFfU096L29hS0pMU010M2sqfnpPZWA6dU14PDU/VzNJOUZ5JC5JKFpDcVUkL0YuPjEyJElpaVBtNnw9dkNKN2UwPXJoY1FBZH4+''@;'; put 'put ''ZkkhOkJXbzwmMWZWKissPWt4NXhqVUI6eUdIMGQ4OXB5QnMyOERpN1REcD4uLGRbOnRyZUh3PVh7e0R9eTlEJj9VZCVody8hZ0x+Nl4wTjxmaSV0dXM4SjNfWGxdc09eTX00VEo9LilOcmM4QStTVlBxKEslXiF5cEFWWndZTTc8VUBtPV9+JHlFRiw/PSJMRjJ7VldtU0MjWWUqWEJLYTROZF0o''@;'; put 'put ''YDJmN2pgNzVncmFRRyNtfDYhe1h8RmN4bDVPRlp2WnFLVSEwVG1ddl9nNHMiVT0jPSFpTk90Njt0LjtTa2ohUENUSlAsODNVIm9gdEl9Ylg8eHdCJCtRNU13dyM1dzZ2SHdPW2x8VT1MX3Epe3Jmcm06aUldJUxWNm9XZUg2WDY0PipoMCFpNG8iaXZAdyx8Qm5NS3M0dXpncERRIW5fT0JPY2NQ''@;'; put 'put ''OkBuQTlubGRtRH5WaWNKKngjI1cxaDIwRG5bVkJLbGdGRFU8ZlkkNCFdTWJuP3tlVzlnZl52ZHJ6THsoUm0zVF1PU2A+RkMvNkc0QnEpek4hYnR1K3E3MU4sRm56djBRankyQ2t4JixJVXwwVmEjciwsMWFmbSpNYzA4aUtRRCRSKGFpZUwqdVpINVM/VE9OazZtYzEiUGJLKVM2RyxMNWYoQG8i''@;'; put 'put ''N19Rd2pgLGZafUt8JXFSSF5vXXA5cmBzejlYU2U4IUZeYURGdkplQ2tCIjNUOig2ZC9BTGBmenB8ejskb3I1MEM8O29tKnQ8QjZjKEJubFVeR0hsQT9NZlh+fXB0Q3pnZXg5bkpzJVZwZlpLPDZveyNQZXVyOFtDeVspY05GQ3RxOmN1MU5oQXIqMXM1PjdCXkBxKVl5UXc7OkgkRX5pcSF+LFYj''@;'; put 'put ''S1haZkUmVHk0d0xnYUx2d0g4e3EoKWhhdXR2a1MyKC4reHxNbGF0YEYpODYvNmFHSmZUQUllK2U3ZktBLn4pWkgkUXZFdERCNU99QldkNmxNMlZRLHxDP2V7TmZ7dWd2LkQ5Ij5oKlNMa09LSW8jMXpyckY2Y21yRDhiaCt7NkZVWVM7NWgoRFt5Q2o8Iy5WNT06ISQrWUtMO1VtVkNWTTpDXy5T''@;'; put 'put ''Z2JaVV5+Qlg+dj1nb2hbaXRxS2Z0JEN9OkhyN04lKlZyT3ZyTWdVYll+bnxBXj1YOVFlblZtI0o0W2piJHw7Y11WcTRuZ0lxdyJ1WWltK3I2ajpDZ3N4XjM5fldBYiRpTmshMXZXdX4qWVlbfC8mIjFQI2RdSWMkdFJPSlpRSVV5VDl1cDJgPiFldFRoMnFyYzdSKkJdXWskc1hqZX5XZCheKnhR''@;'; put 'put ''UnZLQWZtMTtYXWJ5JGYqPD5mKndtPi9mWndzQCplfHR6VUxYKmVQISZuLjRVX25yM2ZQUFolcUFXWlYlJFdNWmBtQGlvb04pLkJ8QjI5R2I4fFR5ZktedUxjOk1ubElDYHlATD9XajlAN3pEfDRMeHF+I2k6L3ZGUk1ZZ317ez92IU9KWyJybkorWCV9b1NSXVg1RTFsQytoanxhVzdIO3BtMitV''@;'; put 'put ''ajpfNl15c25GO2k1PmFpKkt5WShoNkZSWWV4e3t5TVNoYytZU0ckU1NBXmtpMTJaPTFDfVQsa3txNn5Wd2RZYysoNkYsPl93UTJoIyopdFljQ3lWNlM8R2BFSkFjT35rb2BGTkdDLkh2LHlLUjBWR0p1NHE5bG47d1tsaSlddnBUOjtVdm0pNGt1WzdbIl5hS3M/ZihrZFNURiolNlZlJTpPOEFi''@;'; put 'put ''X19GaWE3RXcoO0w7KT8/aD9iYzprZ0hMfkcmJW1eKUp8fHBiU2MsTispQVMwSEhNWDohYktGSUlLeW5qWjpMc3cwNjIuaH1WenolXkpuXkVzNixbUlFDMjtgc3pWVj4hNGxiM0dVTFdfU1JwY3x+dT53dm50ajluSDdXcnw0TE02LGBISCVDJTc1UFVhKW58KVpHJktmdkhzUSo7PWtvZXQvaWQ5''@;'; put 'put ''YDc2SGw/WCpJaW1tSTdWa1k8XjRfflBUSWVJJTJoPXdbOEJPPCw/UX1mJWNocHojUjZtRUFZbUwvQ0twSTJmNy9CO2V6eiNKNVt8WkdGRztRJDZLcVhFWmU2VSxKcnV1RStUVXpkPWIuKzRiUk47VGpIbjthOyY4RHtba2AhdHJ7L3RxSzRSQn1uLCpFfVJwM2d7SzM4UHZvK1kmVCxFbThkMHRQ''@;'; put 'put ''Ii9OZWBnczdGcCZqMjZZTC9aPE95YSQwKGgxdW5NWW5TLGxTPXEmMTBOTnMxISVfMUQmYzFfZX5RX05VNUo8KmdSb1V2YV1VU0FALzFndHlMPiNzIjRwIXBWLzp2V0Ulak9PZHR2dHR7cGc2QyIoS1MoTipJJihtJl1eI0JeL0I+Mlk0Pzx6MztPRU5pW1NKM3EkeHFOQz99X2skUzpXcyl8TSo3''@;'; put 'put ''bTNSV2Q+OlY9YnxdUm8zKjVdZnxaVkRiRzRRbjxzPlN7c0IyYGdrYUhUZDxxdVBuKCZXfCVfNXZYVlZwWTFqWSNzaSpkMUI7VkAuSTROZ3QrZUw2cXJJa0Z0Wih0OWMiOl5SYig/YXZKVCtJZD1IeHNKNE5tNy47dFI5N1E3fD9WWkEjeyVBSlA8dyVWJW89VUFQXkYpRl1uelYmQUpic3U9Z3U+''@;'; put 'put ''VGI2a1VVeExLUDleZW84bEtKa1dTRjtqeG02V2wvJmBvZCh1RS9KIlVJV0IrPy97bj0heTdTPUowTlowLkgxclFOKmNWaCQ5Tno0ZD8xQzldNz9ONiU1YzkufkxzPmg1X24hdVV7bkQxKyNEYHdsQiRjfmV5MXk+STlUUV85dUlFV11GXj8mTjhQOG05Q2tkNUY7U0lCQ2FEUkkvOV5ufG9eW3Y1''@;'; put 'put ''My5mVltQczElY0MxQmV1PXtfdyRWKnFie25XK2RgbnJaZXUuPFY1ZXtkS1B+JF0+c3wmPG1vdlY3bldRfSk8KWN6TXk+VDs5ajklMCZ7bCUpMlQ9JHt9NGdyQ1BUXz9vVl9JeS5VUU80anlpPXU7Vy5od1ouTC8vaDVrLlJ3JVBIT2NFIWNULFpgJEN6RkMuYFNPMi47MUFHYEFRdSFKaUsySnBT''@;'; put 'put ''TjRSM1hUbiwmIToxKCtAZzF8X0kvMm1DJFhxeE1SKyZfKi4kKD9ZMkltSVB1KSlAdChoTiojX0gzRlI/IW1QR25+JGk8KUBibkFUV1piUU0xeCRsaEZ2aEguJWJveE0rZVVYP259Ujp0cWtUQmFEPjMzR0c7KlhHezwmaz8yQ28/X3RtWCpNbk8vNiVQME5INnB4ZHR8NjMqamxPPE1iL3pjY1cp''@;'; put 'put ''XnZrWCJwYyFzVUI7c2Y9bFF9aXFeWDVWfUNjT09WIXt1bTBiJGhYP0lOSTAyfnB9biNBRyskc001STFFTjpzUH1ofCF7eyJHfHdyeH54UTU0ZiVQITg/TDxTPGdoQDFeWCo5KChgWDFNYUBMO3R7NDAxSF1BJCMweSYpO3kmZnk1S2A+TWJvcEN4K0ohV3lxJilfUlVmZmZ+LFBacU9mMllJck9a''@;'; put 'put ''aUIxTSE6X3tHMlNDVlF+JFUqeTNoUkNCXyFWQXJibjVONFBXVShzPD84PW5bQW5HYCxIcCQqVjVMPFpIXkl3Q0NFNnc4VjBvdlBdRGZDXnN5OlM6RjdSVyljcylXWGBeTEF5RSlhP1RQYj8mZXMjMkQ/OG9ZbDouUlZDaUZFbnYmZkdfTjIqOD8rPDRdTF9oUCIzazl5SClqOCY4Oi8/ZmpUXS4j''@;'; put 'put ''czJNXy9RXUM5NGRiSm1rZk5WSF4pLD1GVlheQzRMcXVXMCk6dyNOPlUhVUkpalQ/aCRBcHpQNTs2O18zJHtiP288cl1Mejl5aXF6cCkwaEgxe2w2LDpKVFhlLGAkPWhYXUMkdC9GZFhGLzhSZUdPYGU2PEBtPXFGeG5KWTo7MktgclRSMmJPT3dRNjhRLDlpc154VW81QFtbUEwuQ1N2eDVmZEBy''@;'; put 'put ''UGh+emFSVjgrX1Y7WjZHQUVOc3Q/XmtTSEU6YnF5fSwlOi80WyxXNTRvLFFzSW1mbWxwSD18P3IjXy80P0FxZ31DK0JnY1Z3W2hrd1cjdnY/Umw0TnpOODZjVH1DL3p1dUl5Z35gO3NAXWFjIUlvcVlse1cvWlNfdkY1LmslSyNEPTNRUHBbXzxFT0F9KkdsTi93MUp+YFdtOlYremtaUiYwXngj''@;'; put 'put ''dGVZPEBVY2swWzpScVRnYyx7KDtEZGMjWC56ej5CeDI8cC5OSUt4YmBGOzFkZiZPJGBIS2VAIl05NCYhV3IhfVRhTSwzQz1gbFpXI3B6TlIvNiY1V2R7PXkuVkYoO1pSdStTT1MwdSZbdEQkeUgvYm4sbC5hR1hVbjhLIVpUWlYoQGhLKH5mYktuNTYhTjVYej5KbCM3Y25IfG9wTj1daHojNDRx''@;'; put 'put ''UXskJFQobylpfE5zRHN+KlVofmZXYDA5OEtvaSUyUmMje0RmeHtKWHxrI3EsOyVsKERYXUM9K1VgJSFBPCZBKTF8IUUkTXBSJjFeRHU4SXJ1dkxxdWJtVkMhPGFIcypDIzJQYX1fYUQqN0Z6LzxhT3c8LEZHR2Y6U1Q1TCFgQlp4YzdoclF5YFlKR3BZS0c5TFV4Tm9RK1N3VWlBbiN6Im5ZLEEl''@;'; put 'put ''VkVMQCxyNmk4XUI5emdAOzF5b0U2WWI2eik4S2RDN0x2QGdZJDZSN3MjIjlLL0ZhdXE9WzA6L0RBdip9NUt+UyJSQlE3Xm1xQ3cwMX0hMHBwNCwkJXc/UjdDISMpe3ImJEM9aWh4VXgxJEE8Y0VFQkxhaGFWLiQlWmhLYVtJfiFPIyN7MFZ9Ul9MMEorZkZZbD0rT1UrYTJBPF5DNExxdS9GXXc6''@;'; put 'put ''Rk5Mfkcjaj8hQVNmK1EhdEpzIXpJNkwxVn0pU1omKmZ0bnoxTzddZilvR2lRYF52RyVWKWdsKlU8JFpZdy5udz9YIUkwbUcmOjNCM1ssdXY5aHsvLkJvQnFqVSM7SVsiOHNieGltcm5AcT1pM3QzXnw5b10jW3tnUUchaiJgQj9LKEtgI0Jxckt7S3AmNW0sSDBYKExxL0dOZFk2QkNyPzAxJGQ+''@;'; put 'put ''bDNgO2JvUSx4dG0iZSYlSitPSyxib2kvYF1gamJmeGRSSCRFQnA7cm1QLm1QZmdiQjZZS2B2PHJtTncuN3hHRX1YXXAifFExcnJtWSUmTFVjd0ZDMEt1fiMrRU9mQExqRzpRSFlLbCRZbyNMRX0xMithVGYxNCJiJFc2KjBDJG5WKzRLRkZ4e0dUcHs8SzZ+RSZXJU5sbmUlUXpyTVNwUiRjMGFJ''@;'; put 'put ''JG9jRHkiO04vd2dVSkcxMCt0JnpOKUgmcyRxbGMkNHR+T3g6aSRba3VxemBxV0ZJa0x6SnwkPCRbZFEsSztjTnB8MzhzIVE1OTFJPjNMRnVrc05meT0jVlhoUTlQUj47NGpYLHV4RD5gfj5zKztgUjZHIX5CRE88WzZAUGJuTGhqUW1BTj05bFVIfGBPP1E9RiFgQjB4OzhpX2BmaENCYjxWSSN8''@;'; put 'put ''N15Ae2BtcXw8UCU4Wn1KbSFsMX5fTW1KVFp0fT9zVmIoPUNHbkZ2c3FMY0I1fl5+YX5QSWc4Kz59Qk0wX3NZYkpBOlBoQ350MnRKM0QrbEp3d0B5MyJicykqS2xwRnJ1KX1neF0+YFA+UEpvNyNaNV5EbUpEfE9yaT5OcCJuaD85XjVueiF3eH4/VSkoL2JQSzB3IipMOF4+TSg1UDByI0tPV1gz''@;'; put 'put ''IUssPTxqJVYlcG8sVC8iUE0ieV93YU13TT1LVj05eW0rKn0qUWpOJlpodSlaJGt6Uyh4VnxSJUdOfUFzMUNaIkZ7YUYwdWMsdTVkI0xHMHF0T01Hc1t8P1g2STxLVDd6YXRPKWZfe1NvSEFgdkpBNXUlTS5MKiFCSE80JnNFQ3c4bjp0a3A5XmUqWTx6QmdwWjZJaVFZSXpOZEVXMHIjS08iTENC''@;'; put 'put ''WG9bekZLRDJAK0tPMGhkMTg8ZS9sd3gvbHdKeDd+fFMzdVd0fX5sV2dDcEJoO0UwciFOIyQwa1RAPnJjYXlzK1VEemJEZl0jb1tjaH11cEs7QD89JTMpOypMdSZkNmlRRHp7LiZaRnZiclYpYk1qOGA8bGImMGZFI1tbantoeCtjYypfWmdzIUFROCtzfVYwPElFT09MemkrdTlSU2VjV2pqbEU0''@;'; put 'put ''MV10TjJBRV1GdDtnXlJAdFIwYVE0U2k0KWJZYWouTEhNK3pqUTZ1WlJLYX5MTVN2UlJjQ1l2TixnWVk4fUZrWD5FNXEldl18WzIvWy81IUdhOFk0dVtRSHY9bkNZanQvYj4iOTRqeml5cUUzaXN3WCosIkZVZ0poc2ZWe1U0WXw0YGg+W0EpcFB7SlA4O287dDA0QXcyRSRkQ0RWTUljcCsjOEoh''@;'; put 'put ''SVs/QShxbnVDfnkhaUwrU0tpSHMuVU1USl1APTM1Q3NiLC5TSnpuVEdnVE0pTFlHUklDR05FK0w2WGdHR0ozTU1TP2YhdVlAXT4+eTs0Qk1baVksZlpEOXw/XmovMmIsVWZBVzhbL0NURTF9OX5aMWVkVmIlWGBJbj5LOlYzT21iMWlMaGcjYjQvL2RuKVlXcmQjUWdTaWM7NDwhV0BwWjxTLG4q''@;'; put 'put ''VlJUYHAjMU5TTixDXXVbdUJIaH5OWWsrdWBwaHhnVjddMnVxKmE6MXlmKiRJZ2BsRDFDbCRYM35bSCV1OEdISiFyWn1OWk0mfElRKzYoSExZelIpZndpOk9wZ0U6M1A+OiV3Vzp3JXg3QX1FeW0wdUhGPGt3d0JHeWY1cnthYE06SSwwRDI6RF02cXJ1QEY1dm1+e1pgNWJ7aHpQekBaOC8wKTIw''@;'; put 'put ''dnROVWJRazFxelVAa1k7YjdxUTliViVAUHFAeXU3amJ2eFdOMGo0cWBLWEdNUFJhW3duWlEqT1l+NUlFQ21BIStzUGhbRCt3VShoaXt0R2RxZFJISSFTSVZhWXQmMC4qNi8/ZGdvK35KMEdFKmdOSj13JEAqKFJUKTBWTSR4eGV9ZzJNKz0wNFd5bzcvMChqVWkrQEI0Sj5xbVMhYXglQEgpUmRn''@;'; put 'put ''VT9xTGFkOHZrdE9INi5FfXVAeSo/ITB1WE4sKUx0WUVWP3VbeipiIzVNTilnemp7eWBrdEdFKDwrMWM/UHY4KjU/eXJ0WUVmaGFuKlVZY0NMOkByI24jRyUpS2ZyMHJeJT4kOjRnaCR7KSZKJTg5S0pKSFZGWmtHNlBuIVRMOSxNfGdKUVE2d25BI1QjSz1VfnssSCU6Wig4N110aklmYklKblNO''@;'; put 'put ''V1hWZEV3bGZ9d1tXeVFMdjBJeWcuLElYMHN+TVd+d0t5WT9OcywqKispMHZeTV1qUF82QVQ6dWZhd2YvdntgYW1FInYxZDN6RiVXVj10VClXeiRJYX5xbyJlVzF0UkF4WTUxTywsYmZQOXRWY1tteXxOI2ZAYTZlI3RjYXlCdXxlZmFdVCtCfD1Va2FUPkZ2RlJ+PUNRLm5wIz5MdkIhfGtmQzU8''@;'; put 'put ''UlIjPV9+fEpwcCNzJF5ESSl6I0MhYmQ7Rm1VViJHOEVWRDs6W3RESzo5VlpePy8oIyYhPzxaMipeLns/ZTgyTjF1MD4jXT9dYWF7ZjRbUDhPXkN2eyg0PEFyTmFdITBAPTo8Xl1ScnlwSitKfjgmTVkqeHhpOk9CdklWfWQ6dzk+OVc3bEJxKW9kSyEqWTBURjQxVmtkY0lVNWh0alVLaVFzXVdx''@;'; put 'put ''WEshUjJNRWZtOiw1ODQuMDlCO2JQP1E0O2ZSJilKY29oeDBhZ3VwLylCPnk3RV1OZ09PbzZAXy4+Um1mNWZKMGNJTl0pU2hiMkRdbz0lUERHOHIlczZHO2VsRjFlOCQvY2BqOSw1dWpYS1NgOnJNOXN3TyZ3L0J9bmR9el4mIjU0L1BTUWU4fHVVaUA2ZVNQNlpVOmYyTDUlL2VGNXRuKyM9Kmoz''@;'; put 'put ''NSlkZF51QEc1Xm8wNXN5ckp4WWhOM1R+cFZgKzFDTywuQGFzRyNGaFBCXWAoLGN4WUU4PHIlSmhQa2M6QDYhWT93NDJNUE8ocX5ZQl18YF1sIU4yVH5wciV1Pj8rVjJXeFBeaTFaRm48bG5jPGhXenFNXVNGVkBQT1MsOFZDdyg3IV1balFmZWF9N1VNaVFFfDklTmQvbnRaYmBSUXlKcmVRP15Q''@;'; put 'put ''KWdjeT9KfnUyYWpiJlVPYmlpImFuP241XUlVQylHK3YhQDpOK3I/SF5OK0xYWityc0lOPyg0L0RkfU5ZR0Reb0ArJForcmlHfXp+UXsvQ1o7Yk9pVDRAb114Y1d1MyJbN2NXZk42RiRqYSR0SzJvcCVQOlREVzUsdnBPRX46SHx6RmlgOWtBbzYoYml0ZDsuIXsjfnVbQSZyW0VAbS8wImAlKTFq''@;'; put 'put ''XktoQHgxWHMoTlJDQDMpbnpkUllrK3VBWTtPUTdfLy5PNlB3RGV5eU57W1VxS05QKkttL0NUfl9DVW5xXXFYNX4+aDQqbWEmfE43JDBqeCJGW0ZjWHoqVlhPTzZSZDNVQHx7SzRuMFpWZX5laFkma3I/cXk7bktORlpGJStucFVJIS5XZlNQNlpmWnFyLnZZaXJvOVZKTlBzV0JlYExGQVRzV19A''@;'; put 'put ''NGR6byVEdXBrZTp+SGxlMU0iNFVqfTAkNjw8b0VVQ1QuJSsqTyRkT2k1d0V+ZUx2c1AhY1h5aTdZdkdCYWoxUCksN1k7d0NqVi8/KD8qWWk1RT9EeiRxK1QvenF9Jkx1PjxgOVErQHIhRTU0Mjo5alE8P0N+ISp4dzs0ODU1L2hxYDNQQlp3ajQ4MUlBWD03YiF1QFtAcU8yM1taZz12SWFVdndd''@;'; put 'put ''WC4pSyx0Wzl8K21sIXJmfTBGc2M1dTsqXzlSMiZOXXpoZGxpTiFWIj58aD5xRHokKzlBKnVJemdCdERgV2ttPDVRJHxocl5IZzQ6Sihkak1uNGxrYS5seWgvaTR6aHosVDh0WXVoSDU5P01ZLnd0S11KP3tSfjY5U3lgWTJ1M0NwOEU1dEBJZ0lkQnZJY1NYQEgjTXllaVVXcHdCVzo7PXhQMURa''@;'; put 'put ''djZzbzUlVl1AdVJXJTBtJFdpPiFJW258ImpuMmoySWFCQChQVTdBeW1QbU0yODZOTnYzNiR5X3VCKyhhIm9KJFp9Y35FY0FVfnpmYzgxOHMjNExVd2peXUZGIjJabmUzVWVBS3YlX0BGKTVTN144OjlOI2JVb0JqV3d1cCRHKHZpRTp2MD1lezJKX3hTTF02MDw+PWA8bTVsZH54aHt9ek9mJiMw''@;'; put 'put ''IUNPNUNbPFRdYURydngmMzkvQFA7SThBOFt9PDYqdTw/RWtUVmRvNSV+MyNdcUQsRlt9ZjxeS3pGY2AkVDc+dThhQmpuSUFTMEUuZyNXQj57SUcvWWFqQyspYmRRSEVYMyppLDBNInRxIjtodGJ1NjtDTndUWz14d0ErPGYuT3Y9KzRDR2B4SWRxZHduT0ZoPFBHZiYzOTluRC9mRVQudl09LHtT''@;'; put 'put ''OiNKYl1pQVMmOnYlb31PVVFLOFVhM35be0UoWSJKcztZaUcuUkl2JUZoaCM8VithQU1BUyV4WlFYJiltWlUqYylMfk9NaT08aCtnbEpQRFRJVUJmdV56bTx3PEsqfnBJYmVwaGMxTmQjfHYzbVdzS3dLY3FwZHVPUkFEfXt5Jnlqb0VCVDpCeXAyOWFXczJQL3ZdWT1LNjlvIVE/IUNQMUBvfkNR''@;'; put 'put ''UUNrJSw4VCpNKWB+JHM/KDYuQGZaQGtOSUVNZFZXKnAldUc8RUBZbDR2KCxMLmlGfSQ7XTI7ckt7Q3A3RHdpKE9EVXVKUi56WSVfPyZnSTo/OlQwWElFczd+Z3pDLFdNN2pIYHQ3ZC5MSCpmJWNkeW4ibVNJXT1HTE5tUCNHYH5sfEk8e2VCO3lFIlo8a3wwNDMpUkszNiNnJl0kZ1IkPjNPLm5Y''@;'; put 'put ''WF9tLyEoUCRsR1FDX1F5ODtCM044aSowNjxCXThqOXQwN0c6cDxlJkBZXVVDfTBteGU/KVtqW0lRRWc3ZDBgaEtoSlorO0Q6TUZncCxncTcxZ3ZGJW1tOG8sR1NJcXVfKDw5JX4kLmNNUztaclkqYCQ+KmB+el5AMD43OFUqN0xXSTJXanAzYCttdTk+UlJyNXdDREI6Y357K1tnJENtXTwuTWo6''@;'; put 'put ''Ly8pekJFTHlpMD5EVEJaZVsjO2ZfcTFnP3A1Pz0/XUZ2OSJpYWNqd3BybHZ7VGwvLGw2LFVkOTUmVWFlaX5WYSMmM2IzUTU/cU1tZDZPUnNsWkNLJHZWdW1iJE89MG1obXhNb01mcW9rYlVVPWklZVsoTG5GSjB+cngxNTl9XjNpRkRDPCg8VDZALjUpTj9VKkxeRzhwW2ohaCU0PCVMVE0pJmhQ''@;'; put 'put ''U3giTkdxJCYva09EcDpWYks6YS9Rcyh4YVlHcVc3VTlMWT1uYHByWiVQeV4pZXx0bi51IWNoYFMjNnxvZVI/UjhaIS9uVlJdOTNDPVlINSFGXWsrfWslS2BhIz12W0gybWlvV1YrQEtMeV9MZ1VqXiZgRk1gSXFdRHolT3QzPFcpYEt7YDdmXkpASlEoM1srYjRkPiJidDQ0WHtiI307e0k0MCky''@;'; put 'put ''WmV+YWkhLENHP2NVdnUrZkhNU2pYZEJHSkRhLk5IPT9dRmxpN0YkJCpSXT5FLDBvLGNpPyhucGU7RD54eFVhT2lSIXt5LHpzbUpkRi9MXmhFWHdAbWp7fjs2S0BZJFBHeXtUK0E6TDBJV351eiEheXZbX20+IiI2MU5eKWFTYX1CS3pRLCIye1cmPHlHWnEyJFB2UiNZbU42fnRXVis1YiRvc0Yv''@;'; put 'put ''fVA2ckxGc1oyTWFIdDB7S09vTFc6e0NjNV57L1VuZ25TeDhERzVCImYyWl1NIWg2WTBsISRJezNDRTlxJj5NMz53UGhdO09FXmJHSWxKNitFSXgxO31CWl5mXUx9YC9ZZG1vajpXOCs7NTA7UVJBKlYlT29NRD5uYGY+PV49XkhKeXIzbGgweEcoaGAoLDpqc0A0cXJtRXZueWx5OTdDWmV+fFJD''@;'; put 'put ''fUxHcDh+aClbanw8bSRxPlQjUndQOi9CMTBQOFsmfFZgeCx0XzErOi5uRX1oPTxwe2k5byRwe2dRPH0vUEMsS0IiUkBpU2NveTBhJmp6O2ghSCE6MDlTZUIyOTZgNG9tY3IlUj57fENaUm88a2tJNkV9VFMucWJoWDVlTjElbns/Im94UUtmZlV1UERwTk5VZWxiYmhGdGZqQXxAeFkseClwODlA''@;'; put 'put ''dCE1ZktRPnFQNk9yIWk4QntOdXZSSlZhRi5VRmRvcWBddUdoQFVYVmoxN25acj43SGEiZGYoKTg8XT9fXj9BXn5uO2l3SmJFIjBTfiM9JChbTl5be2xhenssc3IpREJ5QishPSNARFlge3N0NHk+cC87QVEiXV1gK0IkIUdgWX0qYEQmVj4rYEc0dn1DPkxffStUQiowYFN2Vm1eW2p9Vk1SLzYl''@;'; put 'put ''KVRnc1tdMH4/Ik51JHBMcEhvcllpYCFxKktHR0JAa1syRjFdcVFJdktvRzlvUk99MFNmd35hfT8randGYns2bmoyIz5HWWJOTTtvUXd4NEdIclkialZTWmMrYV40ejtSemhPaX5VV3sxOU4+N19YMDJUOyV+JSNrUlRZWytib0IxPyt0e2BeTWRdMUM1Z355ZT5iKzMyRVJhPFh8ekp7QnB6KUxi''@;'; put 'put ''fWl8Tnt3PV5QYzRXemdHTSxrJDRQb2FmTmQjWlc+fCR7YVNLNFtQYlpWUz9BZ1cpWWk+QGV+RCNMXzF5bFQ1LGUwUmxtI21CdDY/WW8/JndrUCUmTm94Y11VdT5KSy86QSFJZiQ+fGNXIzF1MlJDTCllW0xgalcjeT8/MUd5LDxPVj51UylFOkAvdj1CZ1V1VUN9blUvPDl3JD5EZlc5V1Z1bVVP''@;'; put 'put ''Q2s3Ky5lQFcoVHdjajtAPTY+N2xQQ01ET3g3Qlo1fHNoY2oiLlorYVc7S0tRKHBbNT5DWCpzMnFXT1Q2MntTTCsvKTxlJXE2JWk2Unp6X14+UFZ7fGdrRWdGXnNGRW0zSVp2LEtBJmApZmhmI3EsayFAWClwbEs+MW92QStESGZpLGFzLCRvJEs1SlpIayMmaDFWPUx2PWklQ2xCS141c1BtaVM3''@;'; put 'put ''dStnQzNkIktMeltSRU0iYDB5IyEmbF5neFhyI0MhL0k5ZmVeR1I8MEh7bzwrI3U2WnBtdm9CZVs1Xi8wNmthQylyTTEzeEcoNjZmamYyVkR3WExaX1koWzh0VnNqLFtxXkBiaHVKTyNaa2p2N1d8LzQsLmFSNjlodEZEOFZpW3tbUWksKW1NYDIxNEpwJi87eX5WMnBvfDpOUFsqP1hGM1E5aUBW''@;'; put 'put ''Kn1MaFcvZSglW3w/P1BGcUwqfH1bWjwyRlhaM2JJWkE2Y0BNLDczcHh+Wm51OldAWUBASzokfDVgPHNuP3EmXUBqW0c8SGomVX5pTFopPSQvYms2SHsmVWEwcCx4c31ofmEpRkddd1cwQzpyPkVGSmokOiZHZ2xtd0NpcGxSUnVMUCR3T2BnMnYpWD1TPDxgS0VlViU/JDthRlYzNzAsRDBoVjJd''@;'; put 'put ''OlYqTmo8X0podzhdJXxPVlMle1N5QGx8dlt1VncjLl8kbHpZMHEleENFXiluP2tVeH0oZ0VbTl89QC9jRTo3O1dvY1hNdmAuZXl4eGNzaWVhTnxSSXBReGZNb29AYkNWL211K2U6M21nUENzLmF5LCFGc2cvaElddlMhQHUlbjkwMEJdaXBganpiQH1jJkxSPjZ5WmZgNDAuLC9fM3dbQE0rPWgh''@;'; put 'put ''d0BHRTRCMUt4NUBOP0pTXm8hOGF4UjJiV2QsYldmVyxjYzllJlRXZXNILD5oQ3F7aXUuJU03fTNKSWRvOjBAbHMhJXxiKWlzYHFPMkQ7eGlybGssUFMlbndlR0dkTH1YOnhVIUVEMUprPTRVJHI5SGg4YTl1IVslUCg7JV5oZEYqI10iXzx9JFtuUUZsQHBTUEElaHFGRn0lSztKVDdKQFlAKUN0''@;'; put 'put ''TG94aWthQUxPQUR2eTA9Mlo9P2cmbiVlVVVLbVQ7WDlKVE41Kk0seHYwSlRpS29wQzpqQy9eSHY9QkQkVjI3MUdQQnRAJXU3dzd2WDkjbGxqZlRaQjM5byVnd1IxN0chSjw0Xn5eSzFPa3ZLPi5DLGtpdTFOQzZqalRSJW4kbEJsQ1JKZjtZKTFtZDIldjtaOU9fYmBTTHovbT8kfW49KVBhVlMh''@;'; put 'put ''aGZkPEtBTHN8R3g1KTh9LF9QaXpnV0ojYndVdiQpTWA0ez9YL05sZUlAbEV4KW0uK0ohTDV0QDEjNCoyQGBuI2kuajApQkxHIyYhez9nUmY5NjNiaCpnb2UzSlgjblBsV1AvXXwmY2hsZ2BpL2BvT3ZdJTU6TiYkel5kN2pEK0BVfiFJKGAsPGlGYzVtbUtLWixjKGVGY1d9TFokM2BgPW1GS2pQ''@;'; put 'put ''dCRMViF9eCk6cDtSOzk3OSFUKV0wLGJ4Z3M1NFBoP2dScXxdd0VwNjMpOCY7dHJgYjlVT0sxK0VMaCVAbmsuN2hvI29XckFmXTAwRl1EaUxTflthIm9rdjltTiE5aWZJYUUoTWtGe3tEbi49LEYhJH03dEpxMVNsdkAiXWRPNyFXZ3N6NjdQMHo5RDhgeisjKCVCZGdSZUUzTW1JQGV7cyRVRW1d''@;'; put 'put ''bkt8LiR2QF1vM25Ydzl5LF54PDd4eyNPbXh2aVtRRl8ocUYvV0N5Rm1JdmtGWmtEal1WVTx4VSQhfCV8e0wuK1pCJGphcG9oUHxwWmkoZXJackdUYzUmKCVWRGM8XmxNJFRuQWdvMjhgfV1hWWFYdk9hUnlPPFcxWl5CaiNjbF0yWTAjcFk9b1tiUl0+YHNWaFMrVUBkQktVRStsNEFtSTBZJVdB''@;'; put 'put ''JDhOOFZPe3V6RDtdSikpYU1QS2kxV1A7XzVjQG0lOkJKMnc4JTsyVk9JSXF1V11Xcmk5bEwsanhjY0xlMFpCKF1hKl90UGk7fWg+Ykt2YVpIeHJPZzUoN0h2VSxYRCw2anJ4R2IlSWteREx6QkZHL0YrdFYma306RD1xJC4wM2lUWVFufXhtUmBqP0tSV2hWLH1IPSVvcSpkIV18X3dBMVNkLlRZ''@;'; put 'put ''W0R3OlghJmx5ZjdaMklxZ0hgdl02LjdXamtJZmBkWXg0c0lgXTgvMHFGVGA7Sl1XZXBoPVdze3cqdSxvfWsobGxPW354InQ2eFcmZndtUjYpQHFsV0guLjZyQ0xSV0g9aS5NIyYoMSR7PW44Sj1QPnZBK2daWDt9RVd4aHJ3UiI/WkczV1RmPEI+UFQkL0hxRV5XNldyITZxNSF4UmUmMHwuQz5N''@;'; put 'put ''d2EialZYZkA9T3pQZU1wWWNARmd3VVI3aS8mMlhSbTY/dHNUdVY3N29nb04jJnpJL2YrZy9hJk5Wd1Q6ZHFoe2k7azMjVjtOK3tXUkohQVtsREo+NjFaWWYxaTMuXXRjVlNTWl1jPyk9Wlt0VypVLkhtL2ZCL3BATVBsNntIMlk3Y0tZYElfYFYmUVhOP2VOQVdBVEMwa1NQJjhQcEY6U1YlLFVB''@;'; put 'put ''JkkvcDx5USpeUjFaIVF0S11YRUkveHZPLygiXnxQMlEwb0IrY3lAUzFkLCI3WGdtPF5bNmx9OVM1SGVuP0ZdOnlyS35JZnk9ZSVNI3FXVjM5aT5bRXYwaXx0PW1QU2ArS0NVTlY/Lz4pT2x1Yj4pbiFkfG08NEFKOTwoKCptYD5yVWVYOUlUYlgib21wN2xYclUsbGQwaCQ5XkNESGhUMn09bmQ4''@;'; put 'put ''dVVTQ11bSzZueGtoU1B+JCIyNTNeUXhdUnwrYyYqQD8mVVR2ZmI+N0w/UWM2fk84ZCgqLCQ5TG9lR0JqPkNJQi95eFE0RWVQWyI2eGw+flcwZEk4ZChiVkFefXttKHJjNFI8SVhGPWloeGpLIT1OV14yNSt5dCJlYCpTNXxHKylmMi5BVUJgQ3Bxbks0ZztVfjYwLC5RVEJRXyY1OW9Bal1oNiVz''@;'; put 'put ''eDJ2ZSJnYiElPFFvWHw5JmttPl1rJGRKI2IwdCFJI3RReyQ3XSltbUMkO3peWjEvJmttWFR9XyU+ZENSLDZAZThDNkwkND1mMHIrUCN0UE5DOzFTKHwldk0yaCRqbSpqOWpyZyx1bH0zT0wxLlV1SFMlRHQlY2ZIXmtaZ2hyTkN9dVZqIzxScWE/OFVJYUVReCs9SW9RRmFaQ3BZd1Jia3dnMiVH''@;'; put 'put ''Li9hVltdTk50KztDImMjV3hiL0JDR211PkE1NElFU2VgKWEjI0IlNWlRUXNJeFtmbGo6KTwkIVl2Tkt3bj4zZk01M2UyaWlvJiU8VXAyP0taKG4yNXN9XllsKTVzdislIXJzOSElV19hXnJRZnZDIyFPWi5OPmQjXj1CQksqPVhXQHk/cm9MPWFJKDlTciZZVWA3TlppVEh+a2xJcXU/cWA8Oz8u''@;'; put 'put ''RUlKfiFYO0NOLktQZ345Im0mTnFjWCozZUNwKytLUjhdZlUlekJ3YT0kVnB2Y3pMKGB5KGNbUTtsTWdHMW0haTVnITFRTlVmMlEueUMzV0FtJFR3SVFCcm49QyhhVixycHNwLFEkM0gjNSN0LGshbFtfNlhdfG0kUGEhZT5KWVhkPmR1cixWe1A6MSFYMitRWFopcD1oKiNXPzRxK3JXYDBoSTtN''@;'; put 'put ''UWhibFRLVHZeSWZ7IWQ1Wit9WD1ldFAmVmc8dEpJLHQ9SWEhN1gmeEpYdDZDalNqcElZX0ptenpHTWlNI1I7cDd4bWZZUXJCe0ZVRV55TElkTWBDQFVNaDhDWFhAeUwzTFpzN35WNDxJLHtfWS41ZnZQMXAkUkZIOV06azl3Mi91QD0rPGEvVEBeITFpPElkOy9OOFN3dCVBSXx7YyRDaCloSVlb''@;'; put 'put ''KH03W09EeWxYOmNDWTIvU3RIJnUkLGB7eEJNYTUwYncvI3svSDQ7NFI1RE49Q1VMXiZKQEYiO0Y2MTVFd1AzelAwcU19SEp2NT1GMXFMSWVNOkhbQEVhOyViJEExcTw9QjIrUS5AYT0wNyFvbkxTNztVPG9qPVRRcjQ6N0srKSVkPz1oVTspTmJjeEAzSDwjInVKImwxJl04L0Mra3M0JU0uNiZZ''@;'; put 'put ''czdiaD0hXWtqYS88YCRrVWtyblFoW1RhaDglSEBgRlJ2dnd6UFtgPT0lbHl4aG5LKFlmQmtaWFZ+TGsxdkxaa0YqOlBKLzpAcns3Z3grYzJ0KSpXKipHOnFoUHY1PE4oUF83UVFRLk1pIUxaekwiMTNsa1BYPzNxOHp0ZjZ1LFJvYXZPNWN3T0dOJCN0ZmZPWjB6eipmdVNdY1V5biEwaiNZcDxI''@;'; put 'put ''Njs7NlRQL0tAYFR4WWskZFN4VCg8dmtEPldNSXkscnpyQEAjcjldak80T2l+flluamZNZD5DaD9vLCtATmFqRWJsRSpnPEdWNlAzTyF3cj0jaz5Dcns5ZFZ2NWtiNmdxNFRvb2lbVTlrfjgwXm56VXBFOFReeENEPkA9MDpObzh+P2tKTyxpSlVdcjpHcH1wJnV0eDNKeUhaaUBBTENlZ2VFNSxv''@;'; put 'put ''eXh9eT9YN19lUEw5YmBtLHJfaExvTUYoTUZKK3tZMiZTO05zZXI+PSx7WS48bl1CaSpBYGROXz8/ZyZoeSNMOEt2bUJhQHRxIWgpXmlzZXBvXll9OCx5VFtjZGRFJD04VDVqbUw8WiFdNF1MMEpUdyQiem5oTVgmVzMpZSNdLilDOnlKZE9RbWdoeSsuOztEOTkhP3hfYzt1fHBPazlBJCU6cFsi''@;'; put 'put ''MUZuJFEwQHE4MSRTV3E7dGcvWmt7MCNWKTNiJl1JIUt0Q19GM1F0PVovZGM2QzA0RlUlUHcraltTbk5bUHV2cFo9clowfm1AaWc+RkY1XklsNj04VShPI0ZIeiNxYEl1bjBhUn0rZmxUK3xEfkYveW5JPHp8RU5IaHZWKUlkTTN3PU0xWCt9fiozenZ8KyhFWFAmXVhzTjVPdSx2P1F3JlYjUWdT''@;'; put 'put ''dHQ5fVdRXU0uJX1uMkh6QHNPPGpUJkZFJCs2NT0zX2VJfXMjQm1EWXQ8bWcvYF5wX1FRei50KChxKU5id0l1MVB0aUVlQlhiNyhoTFhacHQhZShhYi9lLmIuRTliJCR2amVAXVErWEVoPjVhV2sxYn5WUz19dUIydD5Ma1oyYyJNXzFYTD9bOT12ME9xVSJRUWUjenJAKD0mV2BRTVg8W3Q0T0g8''@;'; put 'put ''b3NMSUVOM29BSCJucEt2b3V8RldJayZ9SSh6SDxvP3YwdmNiQ2lhfmokbkFTOGhaNlpMbnVWQjZDWnhEdCxGUzBGbS8obkZ2QCVwPUd1aEBQeklfMjNJb0tNZ0c2Xko5RTM2ZTcsJm02UVhePnhie14sNWMydHAocDBOajMpeD1GO1ZAISp2L0NxN3czOVFdQHVPWHVsZHVTUyk6RVR9e0QzKXU8''@;'; put 'put ''LFRSZ1RCVnlQPDdGV2lGTDVYfVRNRSZjbCMwSmUqKXtDWWRqV0NEbFt5bH0ycV5NJjsrWSRMdk1Eb043P1NIOXdhcF5zXl00W3BqPEUjaXJIaz1lPUJQYF5gNj5FUFZTSThLcHJsJiNVdlJNPiVeSldqWTZ6O0xSfGM4e2x7NDZbUyh3eTBGXzx3bXl0ZXpFKzMrUTV4dUVZTEV9eEh9UE94Uzd+''@;'; put 'put ''VlsqNFEvLy92QElfIW4+UnoiOTRZclt2U0Ihcj9yIUZVbTJGLzE2KlRkcDZVfFM/dyRTVXVNPF4yfXBtJF05K3xwJEY8RT82JW5ESHYhaV9FZXExWFdDUi9hZVk/RG1bQFEzQlhhOnx7LF5sIW5mcXAmJWQ/WEkhQDlCbkZTMTpUOGVJKSVafmE7KEM4NG5GW2A2SSkiMVBVX3V1VUBNK14jZEFv''@;'; put 'put ''dXFpLzhIeDc/Zl51ciomOUd9blplMkpNdWJMWEQ2JSFGZW4wPDZCK1hhXUpLUD1ocEpaSlhQXVJUZ1F6fFBZM3VwbUwpfHEuQV9CWy58e3BCU1ZaRzRkeU4hclRZOWtTU2tSaENedSlrcDdCb1huRjlHci9KOXhfeylAaWpCLzwuWlc0aCJtIXx8SUtYLkRLQ2A4VTkiXVtRLldoWmkmZSt9V2s0''@;'; put 'put ''Vk1oaC5nciYlN1g9XXMmP3NQNkQ2Q3szeEFbb35AMjoqeTJkQ0IrPER2JUsiRkNrVGxePiUuXihrOzxBaDZnY1U9MzJRan0kMXJeTik2NXR1b2hHWjFbWEY9T2ArLHUxU2s/V2BBUjdvImRka2hTNGw0SC9xQlVBS0J5Nn1IOjtyTnBOMzBDbjpTOmlPemcqVE4sQjB3UiZrSixAOEZRbTMhMyQy''@;'; put 'put ''MEA2cXZ9ZzJ9MlI4WzRJRUZGN306JT9KczA4ZW9IPFR6MVp1eEBLc311d3tOeEIhVmN8YnBGTyN0XSM7V0VMYEp0bkA/XjdHcTFwL0ZARWVOJlIyJnplbzg4R00oTV9xKFpjbGJDeF12ejRiQFpRSiZ9Q1spU01sYmtCI089d2M8ejFpbXxCRGlWKGVWYGBrQ211ZGJaenZKS0JtfWNPZz8/TjF9''@;'; put 'put ''MylLWkQjWT9qKTNFXSgjVSsrQ2JXVSk4VXVnWTI1MjY7Q2JgLEJATnojbHloSlp9TllgVkw1bDhNWEZuVzxVX1A4MVg2ZzBwUDRWdVs4YCh3KkgyZ0difi8xVnc7T1oiSyNpekxyR0I0S0hLcEFmWy9QYWM9L2ZaXXxaOTlGcThTNXk2MVtGdXo3OXRzUCtocEg8I11UK0Q7LzVlLDsvPj0rW3pV''@;'; put 'put ''KTpVKVs1NmlEOVpKKXguO1tmaUFCUGxjK0ZJJTFUOl4qTkxVemAwUU5MeyxFSXdaQzJCLkJbJXVwaH4xczI5MEFVNC9dbj9SKz5UVXIoND1KVWhgPTZFW1YhO1lQWUUpaWtMQH40UT18fDchRl9WeUgiT2p2IVdMbj1KTHtLRjtgVlhFKmcmKVcsZS4ueDdAbz0wRj40YS5FVnJMRXlDPUxBaDFu''@;'; put 'put ''VGlrTEBXWyY9aDgodmtQJTcwL0pFPUt7Jmx9L3BUbVBreGBpVlk5fVdENyhuXX0xJkEzZlNQLkd2VyZIW291TTc4d0BjL3cuNnFGLHchKEA0WCs+N1tjTW5aJUR0elp0P1tkUXRbdnpYW2RRO1Z+UkJCQyY1LG9iRjhoOSg4c0QpPi9IMiN9dH16REY3MDttYnpMOzIwZ1BrMm9PWTIsQkEoW1Ml''@;'; put 'put ''IyNrL0A/STZJdlZybVhocnovUTJRNDZFQ0VydSx1eVIzKSNffnArYDBJJTo8cVp7Ujw/Lmc6ZjxLfkEvYWd5Zjo2VSNqWGdtJEl6LyU8WSlxeXFAPloqLG06ViNmeCR0TDkwQFlTT3M+KkluPFsmOiJva1I4eH5ae2p0L1dOJXRgb0hjMTc5OGA6dDtsN3JhT3ZlVkpaQW0zZTY7MktkVX48RmlP''@;'; put 'put ''aj4zRXojXTplUjlZJDRHM1B2LmtpUWg7Yn46Tz1LPW0mPWJbU0J5dGU/R3tWMixIaytle3QoNSY/T2UiKkQ4K1pjLHtjYzZ3QHVSb1tFY0Q4dnw7NlBlQHZJW1pgR0trOClfIUJMJks7YFY9XXZ6PFRZQDptWCZBXipeImJZOWUsIW9LVUh+UzFrYVR8QFk5SWVpUmMuTFRqcGJeOyxrfWtqW2xV''@;'; put 'put ''elZWbz1HWG9uZzoxVEY5SFJ9MlAkO0NOXWhLbiEld3s4YTB6fDlDfis4Yk9oLzg5cmMqc0dQVHNLPEt9a2FuJGlJZUhLWTBbYiUhZSowWVVmaSRKTn47ajt+Jks1LntyYltFMlZXLzZyezBgM2hOeCRrYEBaUXdQQGkrcXUsKGorQF0wWSU+ND07JjtffVU0LEN1PyJ5UUwiMiJhSH1bfHV3QmJY''@;'; put 'put ''TVlkN3tvJE9JQHlEZEZQNjYxNTErRjZWJVFsOFZKdnZMVEBvb185OFo2PX1SZXkjZEFtPyxyOXIyN3hJVVZLJFJDLEFEKjgmZHJte2YmTXJeUXppZmNQRio7OWJZTUVBQyhXLFQ5UHlDTGkzMj47eEAoU3Bhc1Vwc35veWBsUHZgSTI2XkI1bGMjOUdLeUVISzdpcUBzYXxqNjF0V09ESVZEQz1Q''@;'; put 'put ''MSx1bUIxO3RGQnhYNktPcn1AXkN3UkxofV94d0NOMT9ZcT51ITM9MTRSP1A0W08vMlZgUUVYeEdzN3NbT1p0Qj5QQUpzW196OTMqfn1lYUxlcEt5KUxtYWxRQX1wJH5OPERPfiFHOiUuPUprbUk7d3xTJmp1fio5bmY5YkFWRE1ucCVaSW1HTj8hd0AlLjZ9K0JZfD84aTx3PTk8QX1qXX5RX2Fi''@;'; put 'put ''P05OPXc8S1FYXzUkQ3ssaipgL158SzBuWStjZVddYV41TTk2OiQlfWoqKmszXWp0UHBERi5lKmlpMD06RTg3Mip0WHVNMSo8dXdjMyYocipUPncmVGp0QldASkFvSWtrU1JIXlZUMFoydXh1byxgd2pzNFJbPC5vL3N3QmZvM3hbPmVZd15OXXt0a0Vlcz87NGA9dVU9VGY5KUYxI35GZiMpX3hv''@;'; put 'put ''ejY9Y0s1W3JrXkw/UCRxVS9qOVVMK0A0d0woYkIrTHt2ZnRMJjBwI0Vpcz9pPFBYNEBlaEhFNV5JcnU9YE8iSHQjPy4hOXhNOVYzLn1mYjU/cT9iZjhRR0ltU3hGK0FQdWJHKkMwOnRCWllJPDNhIzJZVSshU05sMiRRNHt3aDJvKnIubl8hYnE7YDxbXU5scz8mdHJfPDh5Xk5sWmElOllAUWd5''@;'; put 'put ''MERrI25BeT81PCxjUnMzZE8vMCRCODtgSGAuTDQqTCwsTXxBWVhBQVZaVXRnYFs7ejo/VWFbQC89Kkp5XVg7VF1dNCs2NmJNVUNSO15KfHNGJWt1b0EyQi5CW35ST1Updj52PE92U3BjbFImU1d2WWY6XnIkMjFGUWNpT0FGRz4rUVlYVHJxNDJfRER5d1FJcyR6akl+JEFvIV59bTVqR3JZZ2d2''@;'; put 'put ''OlZrVm8/fVA/UktgdVtsSzd8PmIqbyJWUlUuP1NdNXRSV2I+ZG41OyUxRTsqTldUfktaVWM6dXVEOVdtWUcsdW1rNnE1dms8alZIfjJTZFZmQ042X2FVS011OElCbFVhbmBTRm0yWU1CJTZAQW98I1M4OWhdOEhbJFsrOTklUzBFK0RAPnd8NUpbWmZQRm1YMjhoIzpvPEVoXV87cks0ZkFAQEIp''@;'; put 'put ''WFJJflRePnEjMmZXdXh8MSM2ZypSflRpU0EyI2RRQjdpZypaRDU8aG8+amxwOmpPS191PlJUJW1hTVlDKlRINFJaQD1VNXR5QjpqdlpwcXsubSoiUzZeV2BRS0dTc0FMSit2ezgyeVVvIjlhXmEkKkdBRXw5Jj1UOTxbTUl3Q3slaDJOe0VCZVtMWi5mRi4kVWtAfVVCMk0zQVUzbDt7MWJCJTpn''@;'; put 'put ''REtCeW5mdWdLeV9hdVJ9YFl6OXlFZTo7Nl1KcF1hamk3RmV9KClvcldgYEU/TktXOFAvU0chPEl+MDV0NkpaQHspQ0s/c3t1OG44Rl1NTj5xS3Y/MzdyVSJZPEpfVDNSbEQ5a19mfHx5cW9mZmxCdyJyL3tpSWB2X1hEdkMkKyVdSzQpfEBYLEFkeGRyenkvcVEvPGx1e1E9I21qfTtkJjMqPk1A''@;'; put 'put ''Lzw5VzBNMUpPI1EqbmszMSl9XWJOYjZdZ04hMlZdKTgkM203JCY7MERFWHhsemFVclEwaXFhcU96eXRfTXF3O0N8I1VYXV1qMSQsPWpfW1dbKW59byw9bHBlR1FqR3YuP0lZP1NCb3xUME8wSUg5P3FxWXIwP0BnYk8qelduJiM5eUxgVWZYcHkwK1B6YWlAW05yTj1UUik4cUBfIjFiXWxkQEo1''@;'; put 'put ''JGBAK3JdVSp3RVtDVD5rIV1TTXZsSTZeYnA2flJPbllvKEwzU2c2bFJibGlGM0NSTG9hdEYuIUo0SUA7RW40d0RyNFVaS119OlV9YFd+dmBmNF9dPCFyQEIvNj04UE42cUYmKWtHRGFOSVs9amdaP1BnPlhhbFBacH5JdTg4RE9gey5RXU8uT2g2OzovT3R7TT0sdXRuRHpRaFZTeCk4dC88Q3FQ''@;'; put 'put ''I3RfM2k0TyJ4ZXQicCxee0BILyxvMSFVND9vUTlfNFAkLGZvNkxGXSNgVkssTmdvNkhLeHZSSF1ee1t2dm56cWBEeXlnV344Ny4wL0d6dlRTTG9XcE5SSGY/LHgwU29UdmxsQXUoakhsMFNJI0IjKXBhUUNtQ1Q5OzVKdnZ6YXVkeG1YWW00OVNtWCs5Vi5LWjxgKmY3KitbLi8yNWAhdlFGJU9N''@;'; put 'put ''Qlk6PiwoRXQkcUBAOkxeb2VCOTswPWVIWE94UCFSYUV3cENELmFPZFRjaiRpJih7Q1NgPjg6aF5afXJoM1E3aHY8LylJUUtpYWkvey8vVCFueSJAMktDRW0yS0tXPG4pWl50ZjIwJXtyOmI5eGM2NyVJPWlGZlhvZUpUPFRpa3BZMn07QmJvdkpKPnxQKl5qN3BwMkZLdEB4LEErfHFwcGhhbXp0''@;'; put 'put ''Wj4ufSwlanRmYzduUnMhU2xPPUtpMWZKWn0kTzlpXjVob3J6OHlee3RGJjF5aXoiPVFpLHN6KWJMN2IkRVpwZ2k4RT43TzJZa1BqdnEpenVmPUx8PzgjI0VPYlUpbyJyZiVQTCRebXJ0JVcwOjs+IXlpQ0VETThnQF45LE9xST44eSpPdGR5Ym5GV3w/QFE0KWA6VjU7LGwwPDNkSjpsLjlIXzxo''@;'; put 'put ''aGo5cXR7NWVpV10kdk06OzQ7ZVNNaSZoI3NdVGdYVyNtREBlcFoqZzJ1W3NuM2sxUDFGJW8icTJFMEhsc3dnVGZuRFpTN0ZNWD9YIVlJQTJ2OElwXlBNYEd5SzNNZiRyQ1FzRjZZaUY0KURwOEJ9bWN6IWtBYmk7TT18cE09IzFWVF8xZWx1YFMhKVQ9OypfOlRkVmh3eUYsOHQuQyJiUl5DOzl+''@;'; put 'put ''MndXaipaRk0mLEZHQ0lsREt6TVBEYkV9amxAWz9mMzohdmRvPlpoWixleHc4eXtmWm9zL0lUdSZmNUlWVX4vWF0yckgqOFU5aGhgcSlMXmhyPV9scV5sVDwma1EhSiF7XmpjKCRPbTVbaWxCLiklZmhlPzBNW1ZWU2ZuajUzWmRoL3RkeSF7IUBMZ2tJKHtZXnJdJmU1LHAsbzk3Mm5nJTtxayNf''@;'; put 'put ''ZTlZaCxLO2c9ZTE3c357OUZZeF5AZjw3a1t3VjRSY1JHTWw/VSp6TGkpSGhbdUlkVGQ4OlB2KHVQJjtffHY2WHp6dz1qLDFIYXBYSCQrZS9XVXQ/dnc2bENHNlRSRGxiVmBEXnFFZm52W150MVpAWVtbQk0pK0Y8Umx3UGJMITBnUlJJKX1bVilgWkUodUZZezBuezBNezFTN3xgPVAjTWBJYC5F''@;'; put 'put ''OmN5PGMiaiglUk50Sm5ra1lpKTUzMik9THErT3QvKVJmYU8iXUZkbFkhXlZpd1ZeZVN5XVJONjhwLlgycGl5fjxPRmg8NVlMTyEuLmE+Qnk4KHdafWoweGEoXVdfVTFfbWdrMDVjPG9PQj5NQE8hXz1wQGl7RlNQMHNYXit8QEluQUosdXdNY0BAUnlIcTFEYUZLeXFldHIvMl9KNz5SVipfQ1U/''@;'; put 'put ''T116LzVrSUY6JVJ5RWVLYn5WY1shZXw6ZWUuW3FbZVFebkIjdC54P1cpPi9hPWRMVlVwV04hbmkrOEkvSStZfXkvR1FNOW59Py4qcWYoO1RXMjFiMGZaR3daOG1dO1QvUXd9V1B3cyRFelFjJGlxb2IrbnArO1EjeCV7ZCo7UGUiN3FOYGF+VXcmVFRlPW43Q3BFdlJde213IUlwclRaPHhVV2dI''@;'; put 'put ''K2VXS15mfjRjPXosVSJ4TT9xZlcmQ31KNiYsQ31FL1FhYCtmNXAwRiMrU2hlJmp9JDAxK2xeL2lsazJ1YEQ6dD5ZZm5wVDRoaWhZN2QmKSZ3Ujx7YXVjRixrYnJEODtNUkF4a20rOiZHal5eYVNZNyNHWV1ZfjdpUU82LDwsd293VkszNiNTNXFmQD1pR110eiEhYTBgPyNHRVRCXy9CUHchYT80''@;'; put 'put ''Kmcvaz0/fk02enRydiV1MCF3NSZTbmEhKUZgaGlgKld9TEdYWncuIXpPZUZbTXFlZEU1alh3JFhdQzRMM0g/OF9DYF8ra0c7Y0N1VHxKdFlXIzFaQWs7YSJlQjVyJHpzRCRpUSY5NHE9WjhVUjNMQHs7KDxYcmlRVl9HZUo/Q3AlWk0vemolb2VPUklYMjNMfEtbIWRdaCFLKnxAMU9CSVssdi9E''@;'; put 'put ''PGRFMlA7XWh6X2Bve15sYURHJF5AUXZQYDN8dCRBZVc7XSRYVmYkP0sjSEpxfD1yR05nVztMX0pgblAwPldXVX52M09GZHV7Lnk4Jnc3JGZRWHk2d2JhPnJ+e0NwWHpoP11bWyVUZTFmeHNIczFZKVtSTU8maio8O3x7YCQrPy84X3VrZSkuWk1UO1puPHBQTUl9dSR5SG9xfkU6I2Q4T0RGZXdU''@;'; put 'put ''P20uaHg+Y1RCZ3pZNHU3SkI9O3tsRFVGTispOUc6PU1WWmxoYCtpTEdiPntmTHNZWT8kST1pVkZxW3lFajVyIyI8Pi5ye3gwVU83QzJqV1BAI0lvZD82Lz9YR1tNPj4/cyM4VDRkLjNlbkQjb0hmbm5bLEgoQEVMKH5AfTNpfj85V1JCenFZPGlMI0NCZ3ZgdzRpQD5uSW0iXnVVaUBuK11USFA+''@;'; put 'put ''XyNkKDRQdD1ncHE/L3VgRyhsb2BHfW9NM3hTVG95Vz5iXU82P31dTjVuMVcoaCx7JTUwIklAbHN5PlQ7elF0Mi48bHJGa0ZfK3JVfVZ1ZUZ2ZCNyMntpIV5vcUNUNzY2VHVLQV8iPSQ6Q0dtVj9BIXNtQ1loNDReU0tpLl1mZCkjJTVzTlJzWCI5XndxR2VVXXsuN1F8Ij96fW9qJm42PnJXJm4k''@;'; put 'put ''UU9ARCJuK1p9Sl9oU3VTPFZFcStXVTczPGZRJF5QImExWChqIk1MUkFDa3tCIU12Qk4kK2h0MjFaJnAhRlJpZllDLzM0YFlrWipaa1dZQltuJE5hdk96KGJmZiZsTltOWVksPF5bJHEkb0E5e01dMEx7Z3t3O3pFRFEsPF5oS3ZMU2R1bmBdTDFTQ0dINj8jKW18Xl9EakJCVG1wUylHOj5gRWZH''@;'; put 'put ''N21gL25hPFBDTXU/LFtweC8yPXh0d0w5U3l6LCgreXxnP25wcmshInl7dn4+IU85bFsqdS8kdXYlQzxkbiN9fnAmJU5VbG03NTRmSE1ae1p+VH1IfGIuV00layRHOy5IYyQrTGRFXVo3U2hgendtP10+Z1dEbHk2Lm86XUM+YlZGMEM9cGR1NkFrMkAwZSNOOF9lVHo5cWsqLEVFZG5sW2QmRXhH''@;'; put 'put ''SUglaywvYDZtfHclVzJDPjRsI0pEQHs/LzVSeVVPcnA2WktZLkt3TiM7Lk5nNlVWTiFtbHs2anRkOj9bMS5xVUldUmhrYzpAYXM5Zz1tYE93WD9beVhWK2cvdSojU0JURXZHSmVONk0mcUE3ViozYX1jSUdUdiZCLzA0aUReVVErXUZLdn1LOWMoYnxBLyhzO1NqMl9ZV21wYnlwJiVnS08lSVpe''@;'; put 'put ''Vl0qYlN8ZU5kVktnODpPQDA1fV9qfiQvJFBFWF8iPTB5ZXlpcj8zazkqPSJwOUZJMHN2KCI7eFt8eXVvdD07UEtec1ZMITl3W1pEUD1wY1NqbHFoP2FWKWdAc2ZOP1JPP2pbLl1xI3teKj0ubmY6KCVeb2N0PTtWNE1OZmhmfUVSY0B1JHkhNXlxRUY8IzFFbEVpP3FaOkkpP2A1PTh6Xj5SQGZf''@;'; put 'put ''ZylkbHgrJXxCRk9iLyVhQiNHZD4qRzRBb2JnLzZzcjQ+ci9US1VGUkFeaUIsRy8zdjJmVF5xV2B4RFMxU19CTylnLC9wdytkXmwwUHprLHAiYTR7W1JYPSk1OjVfaCx4RHszJSh6YjJzRntQYlk7WitAKnovTTJ6TjFzeSRVRjJNQEUmdzxaNztLQnNPazleMTpoIyRYanUiX2NnPy8rZkw5aTxo''@;'; put 'put ''YGssZDtEcz4hO1Mxb1grRV4+cl0hXyMxLnNSemJeVWlKWThdVnE+Yz5Wem59TCxETTEyTmROMXN5UF8yajJ8JGExLlhAXTtYPGI7UiFpK3tkPVgyYnJAMk5oaCxwTTN3fmswW3AvQ15NWG5tV2UpQDMpOCY7bDpOZmU7XXpPfHJRMUc0eT49bVF9aDpyVFhGaS84T1M3OENePjlhdTdHZmtsLC5O''@;'; put 'put ''YDpnUG5mQiR5JEE5UEUucEZhVGFkWGopVzR5Q1Y0LzZeUzBaTDZCIXlKMzFwezM7YHl7X0ZvVytPIX0jJSpFckd9LjZ1JSZxSVU8LkEwckBtW0JHajw2PSghMkQqMnFLJn4jNXEzeixNJSIrTSU3YjY8WCVuT0RAVn5eTmdbPndVcl5MO0NsQ0JUOHQwMHx9c3IsMDlUUV9KPGIod146b3NwN1sm''@;'; put 'put ''Ky5bQHw8Yn1eKCZnVjkmLzZeTiVvc1skKzdbQ3p2dDB3Xy45TU11WWlZeVheKmMvY2Y5d1I9PW1SM292P2YoKF9nVzV5ej1YYEIsODlQYWN3M1dEaD1lPUU4O3hQOk4rP11WPUtFdylWcHc1S1lWW0ZAbzt2TUBhcEdHPjhMdTdkV2hxJVM9YVRkUXlKbXlecnMpOFUjJUwoemU9NmZJeSFeVSUw''@;'; put 'put ''emcoIVJANTU1aGArOSFlOWtgY1BpVSxdWkheU198ciQuZzt6RzFtPT8vVEd4IT8pNiEwcChuNz5rIXBtWEtzJEk6R34/XUBVV1FjTCF2YFpbWXdSPig/WCVHUSE7ZUNGdE90cWRebDwlYDtySGo5XUlpe21AYWJyeiVXb2BaV1pXZ1MsfTlQb18reCxDPGlSImxWezFmWD5AZTBzI2lmMyU4eikx''@;'; put 'put ''ZipVVzloOlI2eV5GKFczTCtnS0Blcz0/Z3cjUjYmXkgoVkt1JGdLTCtvS2wmaWMyQ3Ekd1hTMUA2LmRjNmUjaFYwb1ZmMS44TCFVSEVVaWAmR3tHemRCZnt8ayw5MDFLcl05PC4vWUkqS2tFaEpLWClneGw1KTMkemwhUz1wW2whbGNSfkYkcS5bIz5zMmkxJTRZTmZfS1BmQG43ZVtjZDZ+PGwj''@;'; put 'put ''JTg3akluSWNiJFQ+c0VRJmx4cGpOUEtQQDh3ITVVTWVIJEkrd111ZSV9Yyxqfl5iQ18mUFJeP11rZCldaXp5aCZ+Ukw9fXZrPU9nWHhjRiQ0WDJjbnttIyhJKE1LWkxla31jYWNhY2FFemE2Y29Lc35LayZqYWl+UiEjPzlUejdqLCgpJURDXTA2bSgqdH5RJmExTHRjNjZlRUYwIiszaWlTczJt''@;'; put 'put ''ZiE1Z1A8O35mSns0eDljQ1pUYXNSNmRvSHZzU2dQSUFzVlFnKSYrZ1pAMCo9JVc4MCU4N2pRUEFWaCE0Yz95fFBqbWw4R1BMME9mXXBTUFZaejlXVVM1bEgvSnZ9ajVud3VWPS59TzlzdW1nbyU0NjZzWU49fkJvXnUlX1VIemFwaXt+YzZDNl83V2JmW0M5Rmc0Iy5xNWVIN1AleEt4T1tQfFkj''@;'; put 'put ''KFshVnZbZnJQIzMxTiFbMmVQN3FnLCk7I10sTys0Ql41Rj1qLm5Da0JKSkhGZ1FWMCZ8JTFIR01yMXJHeDdXbUJ9UW83YnUveEJBQUMiVmNBQUdIPVREempYNVljRj4wODchRGtVaToxZ0FTaWBEWENLbFgjKl15O0NBQUFBQUFBQUFBNUIpJS9fe1RyY0I5PDVQJXkpR21KKnZSMlcqNEkub19V''@;'; put 'put ''UVYsJigveWg9Z2pnOHsyQDkkWF1PaTtsQnBZNDpsXl9LIUZeJDxSRX5bI2A2I0csVjgzNEwocilWaGA7RzJQW21sMEtoWWJIZUlneDFTOU9mSjw8K2oyZl9QPzhjWEV2MlkjT0IoWi5VXzQ4Sns+LHRMaH07Vkx6Ti9INEYkUG8zUG5iRV5xI1oqNW5qZmYje1A1RiMqPSI4RzYxNTQkX0BLVEtK''@;'; put 'put ''bl1fK2lzPUsudFJaey9YLz97eFUqZGx4ayl+bDchWm9EQU9oS0FNQExDQjhacU5fI1U2U0ZbQTJsRnMhVmNgYmBTTGBgdWl3NyhCUXIhfHNiO0k0JTVDVCsrckxeWihJblBrPXJPdFB4US9LRjFCa2A8ZWl2L0orIi9QSExZfiE9K191eyksO3IiKHdPN0JbbkpMZ1N4aDRpM31GUzljODNeeUJY''@;'; put 'put ''TGhdVUguRHZVSERTOSpRU1RCNCsvMUtwTzkhKig8IW8qcWhDOlNxRk84SFZNdTQiU1BIZCJKa2JjLGpxIixHaitQaUc5b28jXmk/ej9iSzl1ekZJKS56Y01UOX44JHshWXw7YFo2XzAibHh+YGFyKHRkJW0wTUU4NVNWUGJ4PURtU0g+ZmUkYDR4I1l+Tk4qJVhjOSxCNE93Q2s9OU5YITpNK0pN''@;'; put 'put ''YFlPQ2hyVywwQnF1dHJ6MUdvfl5balpuT1YiYERQdUxRTjlzVCtqQS90NzNJMjNoS1B4W1B5TltaWE01LF1aLmhDPltRN0VdYEc3cDhWaDNZQGZmSHhxO3srSWFpIiJNRkZdWjpvWXI3L0A3SEtFU0FtLjB9RzheXkVMXkMobGttMCZFSjBoQEAkUSZaSn5UZ1BFU0coQCxVKXtUOlRIW1IqKV1o''@;'; put 'put ''Y2V7QWFxVzheKV9EL3Y3eDZEcyZGc2tPKF5TNldhMj4hPXN2dHBCXUpdc196VFV1VG83MXN6SyZtQGJENWVTaXRPKUNwfmZuRkZmN05YVEZEWzl7VSVlTER9RzB8UklBfGQzPH02IUtfZTlFNzdxbUAmJDozOEdOVyh0UXNdbmpGNz01NU59O314JFNjRGwvdVZYJlR7R3RAWz19IzxTNSxzUk52''@;'; put 'put ''YjFJLFdEfikvb2NxKV8yaUVbS206ZVdvJiNKais8UH1LRXFlR09tMm1MIjBKIy96PF1yRkRxVjtoJFtYZCN4VWA3aVtCbHM4STptMCY3JTJWR1dkazcvKl19Skd7JnExaiZ2ZWx9aSVEVFpOZ2Q3SCtSOm4oPWRoaEZCMGhSWjk5U2tie1gqYzZ1bGkrXk1pa2dhM2NgYnlTZ3k0dmFpRldiXmN8''@;'; put 'put ''L2FFPD07elZIQlV2U3k4fTtYJTZaKSgrcFFNbmguRG5HPGhFaz9CS303QmNVSkJleCMvUSR9SHEwZmVUZWR2NmN9bGE9Ki87IXFoaSVVZT5dZG9iZ0RSTiVfejJ7QUBdZCp3NVsydiRyZm9uIyV8SW8vWFBjJFN7dHs+amRoWXFdLmNnLF92c2xvbGE7NVopUEoxS2cqKS5IRzJCTyx2MFlEfkNK''@;'; put 'put ''fkM9L0VySTJaQlBGQTZEc3V8dUpJIXNyQWsyWip1M340VSliUm9oRih5Ry9gVW8pWzRaNHFqM2t2WFlPekJLMGFlfVdGNnxSOUYwaWshe1RvJEZ2MDg3SlAuQVNtYkYmMkcodzB8PSFteipnPX1DeEwoWmZsWj0helBPWiloQGoidS5gUzoiTzw1NSRgWHZ+aUVSInhQRkVHJSE4TFh2bz8jPDU+''@;'; put 'put ''Nk1XYUQufFgqI3ExWG49NlVlMHhWS1deXmZjY2VhbGMpSCtBM0c8ek1hXSNJaj5gdDYmWCZQQilVcXZTNWFrQSUuNFdscXJeZnIyK1p1UlFfcWxrcXtqVWpTaVU5az96OVh6T09te1cqJXs4e1kyXyV5elVlIUF9dGBZJG1CNHhoaEd4U1QmNSkpKnVqUlg8Kn5UPXpVQFEuQSVSVF5abk1gbyJj''@;'; put 'put ''QUZrRElDeldBTFFsd0cpPGQuIUduKTxDbnQ7PDY+NU5XTlk5Tko0UDN1SDUsVHp0T20wMzF0bzIlKFFTe1YjaVMpLC9PdXkjQ3FgLihXU0BEMlYpdWssd3xUfltkKENXWUJmVHxmdn0odC85O0k9QXh6KWxvK3olfFVgUSNiZDclRn5HLHtZdSFjZW9gXiN4SkExVjA5P3omUGcibklYaCZRXjlf''@;'; put 'put ''SmpmSSRveFk9JmVgbmVsLClNZGtUTypiPk5pTTdpWnluRzJZRndKOClGfmIuU0JISWpXV2w6V25hREx1S0tQTVYrR1o3TlVDK0ZEJTkoJGg1O0JCSVdeUzRVRF9sdyZ6NzNkM3p3OFs8IzcwVjclN1tyZ2IxJGlOX19ESH54U3BLTSJ0Vnd5PHhlX2c0bjhzKzZDK0lRSUxYMGhnNF9RV3Q8VkZx''@;'; put 'put ''cUMudGkmUS81Ni8zekY3PCgwaUtURWxNNmdqPTR7YmhzaXgpREpOMEZoQkheaiszYjskJS9BeSNncThaK0h0LncpWVNHTWBGW0ZMe2ZKNClafk4reDk8cStVXVhyJWhfLDsyaSxSSUpDV0ZdYEh2UWJ9Mnt1clZvfS4/NHFQVXNkO1N4NkZLSzpLSEl6JVs8WX0wdmAoSEQ+IStweGtnYyQsMWBq''@;'; put 'put ''Pk4qYFVLaVNhOnZGY2JFKXBxX204ZjFILHV8UH5rYSl6PT5PTWBvQ3pgSyhMRFRiV0crLDAmcz08dDB4KVJjUWdQU3hHJkZtXjtTcHQob1E7Xn5iREUxZGxkLDNZNDAjQnJ4VSYqQ1JbK1MzRCJ0PmVCXmshKGtnV1F2bk9YQUJJVUhsOz0yJCNNMmIrXndRdDhOVVl6Xy5mTiU7eGVFajEhd1Rj''@;'; put 'put ''X2RuRHhSelMwNHU/RjZ0JWpjelp4cy90ZFhiLCRGdkgoY1BPS0VrUnNwRSVlREExTDFxSVFvfkY0Q1lLeVc6ZjBnKVUmIj5VXW8kVHc7YWtTVSJWMjx7YGpnSFFvdkpjejdZQilWcERTa2pqajohaXZlQlYuMj4oSWlKJmglOyRTWGpwQ1RRYnRXaWFKVko9eGl+c0t5Z2djRihBOE1zVUcvJUV7''@;'; put 'put ''RzolZmxbSixZOHwpfFdrWjZ9LCliOGBDRXtGc0dkMjJWMypdeXo7T1FVP3AvZjFzZj8+XTpeWE9Ke0MxMlEyQXEjYjZaInd1eENnfSVgRG9xeW0vTU5qO0JZY1Q8aU8vNXEkPltNN1RRMzhjOU5INnJPR0RFNDRgPGhmNzVvTl0lWk9hUHA1d2ltQ0Y/QjBSJVFDW0lCPGVSYCReViVNNGk1K3cv''@;'; put 'put ''PHhCK1ZnKlpmfiR9bCxOKWc4MG01SGJHI2shUyQ8Wm00L3BpLFdkRm5JOTUkfGlbTEdZRC8reFUuWjVFOHx0P0E6My5Ebyk/W1BHQ1pDSUcmPF0hS1V9JmR5c2VaIUw+dC8hNTh6Nm9JKzExPGRqWltjTmFLWyQlJihtKn1aakxmJk4hcm1uMkFtQzVnbnNSSjlpSDIjQU1GKTBxQzI+K1N1eitt''@;'; put 'put ''Y2ZxfVtIQGk5Xyw2QF8+R1dDcERqcHI4WTMqdSYycTNuVUVnUXElXlpeKF9BMCpSI1o0UWloI3IqOkE+PXcqYWsvXlskSV01InY9aUdeJndVO0laeyxNUiY8PnkhXW02T0UsS3AmXzxMQC9NNkk6U0BySF4lTStESFcjbVUsZWkiPy8mRTI+KGdhWD8ralhNYFhjJF1sbCx+R3VvIUJGLypqLj0k''@;'; put 'put ''akomcCo7OlZAOyM0fiRsVkxIUzpUWmYqRHE4ITg5Wy5uSjlGOFd4dTlbMzptVWlmL1YhN2dySEpfdyhfelFWYlFNS0xXZmBaS2kmUU86RGtPezY0TG5ASmE6Z3t1eTlkMSYqRjgmPkIueUg0Q1U5bncjeltlZUhvO3hGUCFwZHdGcj4lLGpqe3hNbVU7MkA3ZUJtYSs6OWhbMjxMU2pqXlNafiFa''@;'; put 'put ''cWdCczJJS1Y8ITdqMnptYCkrUnFCRz5PaX1pZXs/W2hyOmxHRklQaUpEP1hAOXkrOmNPVmp8L2c8eENabSFkdmY6eUFiczd6XXUqMFVEWDg9fDF0bDNnO0NpcWVkJDh3RGRWLCZQT2I+VHt0V0Z0fFkoa3ZZfEVlcG8jImkzNjwuNV9QfGdFXTY2YEVfPzhkLHpKX2pzaTpoYzgvZ0guRml4dTdv''@;'; put 'put ''VnhDQUAuP14leCtiLiFKaiJNbyMmek9heE52ci8jdGdgS24zP31sckFQUUptdXszUl1WTVQ6UW8rNkopXzM6bHBIdzlKOmZYWElWJWcweiZ0M1tsUyFiT1piJnFlTjV1KDpsd3FHeCtyUlN6LjhHX1dVY3E1aS5pVUR8RU5dUVI9ZlpZYVFJIzVna1FuPSM4Zj52dzB4WSZtRk1CWzNHbWIqaFBC''@;'; put 'put ''aDt4dE1CZFsxX21mKXoiNyshTCRbWERxdDAhZUU/cH1XS0l2eyNPK1U4WGl4PnhjN3NHPWshZUMyUjVycVNgWUc9KlRIT1QjPjk/TlNebmd7MFszNFJmRFZEQ04lRnV7QlovQS5eNDVCZHIwcTh6ZHZuJD50VU55Qmo0RkRfUFF0Ml9jYTR+NWB9elFBOyZ+M1k9X0dfL0kjWUgzVDpxL3shK0RM''@;'; put 'put ''VDFkT2VnXXludUQ3cSosRz1II0YrVWd4SmFRKl5qbDxAYVFgPndgUk88QVt0VFYldmY7cTFZYitAKiw3Wi9lNCFWMVJgVThbN0I2YnpbfVcqaCZJPU8qSXMhbVQyPkwoMCZOMEZUPDJqZDokdThZZF5ZS01semJFPXo+OGJSOFlDWWQrJWp1LyZzKjBPd1g2fktRXl4/UWxqXWBDRWtIM3pbUj9v''@;'; put 'put ''KG1dM2JZMndOMUMkLHlqTiNZQH1sX10zLjpfOmlPflU6TTgzcDkvYiFWITp3WjdtREgoNiQ0Q28jXkdVMmA9TmlAU1dGYTc9cEJTOkdnaHc5SCZZNXYyVSUhSSg2PVpaZ1Jhc0JWRk4hJCY+QjY4dEY4MVtHP1VreDlwayVeSTovbmM9ZSIqaldSdCZGLygzNSszMDtMRmM8ZlBJa15OND9Hbyol''@;'; put 'put ''Ml5BSyxRNmV3QjRQTSp8U1dbUHEkSWF9fWhnb09qQW08eSZ7eCVbPlF2W1UsX1NscDFFMW9DPzZHdj53UXJhaGorNzdvdypBUDlqfXdAXmFzXyE1N0tKfSZLTyg0NW9WdmVZdFpXQkJlRzBUK2h9YFBjViNDYTBnZ3pUeUBNNlJ1VGBMdz1yfFBrOVBUdn1pcDZ4TWFjRkQxVypMWjxacGZKUXIj''@;'; put 'put ''N2FfTiV5W0BOLk84ZiFLdkdEez02MmBiTX4sSm17byRwZnApIT1SM0dNKml8Tj06azZzUXAvdCltcHB0YHV+V1UjWS9memMuSSVpLyF3N35xJldZVX50V25zei51S21edSkjbiw6Nls4QHFoS1g1TEdKTTd2NzI4a3V+XzlmLCVue1EiMl0rZFArayh5NysiVkRTMVQ1OTddWF5eRC4kdTQiLit7''@;'; put 'put ''RV9ycFduUTtTXVpSLlpSOTxYQiJWUyh6eXJRXm1JeDdnWV4uLzUmfXcqb0VpZFU5fldLfTozQn03bVtuPD90YjRNeStxLFg0ZlU8KURobixVQlZyI3l3dit+ZHM0Z09OPk9MVlp+V3M3byNUcyFzRlVvInVCeTJeVnRYYElFTXJPQkpnS0IhMzdqLDImXzp2VmxfcHE0IzQoTDN4emApbFovO1M2''@;'; put 'put ''eUIwbF91PV1pJjZ6a2B3RWlLQm9SOmg0Zy5DfmRrOCYuOUJHTHtmY3dGTk5Jei49fiY7YHRWOzheck8ie3heNWJ6KVpoZ0BxSTg8YmZxXSF4TytFeTpoRiljKSNHdz1bdk1JNlljP3xXL044Jlcsemh3JSw7eW1SbEhMSGZhLjV9VClIaEBJPFB2Z2x2ZDE+ViU7YHY2RDJ2ZU4+Snw/RzFeOyt1''@;'; put 'put ''TVQ9dDw2VlhwU1gxM3E+YHc2WGBDQnEhKnMyWlJCODMsNlchQk9xKUxbLE07R19iYUVYLmpvJjZQOjk7M3FiImV7aXx4OiohTlQ6U2JqTTlYUH1zUkdVfkloWEhnPkEvW15JT3lhI0MkITViX1o/JF8jKHFaPVlEezZZMHtqcl9kKzJyKlgvRClhXjBZMTU7cWh+cjpneE0kVys3bDR5SyUyNnFr''@;'; put 'put ''RmQvN2YkYkZBazcra2BXTzIqdndxaURLJTFoTTVDYStyVkBhP1NHfExMZi81UWgpWD4xQHBLcTExJlhFO0h6Vi9GWV9FXUdrZjtKNz10Kl8iVHlGSl1NUis2byF+MEVjOCZRLy8jRntLd0pjKUN6fnxeXUhMVTw3L1tnQkV3R341QlZqcjlMMHZTek1vWTFRPi9NRXNyOn55TWYyVCluLkUlJFR3''@;'; put 'put ''dGpzODF+VC52YlozNV1mNEBaR206NVNPfjNHOyIuWmdoKUtadnRVV2RHfE97bEZ8JC85dHNvcXtEeiFNfm0iNmBTRldOVn5wfSN+cHdgY2A7LipAT2UrWGVVbltBKnJtUzg7QWN3VU14KF1acGhxKXl1MlpkS3N8SyQrX3dmdlFBSEZtLikiWXhvSjRlKSljPTl9ejx2QH1LVDt6ckJpSnIjIjJk''@;'; put 'put ''QDl3PUZ8W3N0dlclVTpTTVtia2QyVjg3Iy53QFt3RXl7dUpYPzksaVVmfHxQWnFqJkFjfTdIUHZ4XT4qMjVzWkJMSlN1KWk7IWpwKThCRGVfV15ieXpxKV5dOjNAaXlAL2NxVVsobywqQS4vZjguK1U9YV1xNHAleHRBVWNvKmUseXolJTNWRi4kUEFjTH1OJkhrdSkrWUg7U2F+Sl5IdWpfP3A9''@;'; put 'put ''LiJIKHR6NV4xL1sqaHB9Zz8xO2FuOigyS2g1IzhtWkBkdnFmZk99ZERuQ35RJHImOW9gWnByWShUeGteO2o2U01FJDxbU3poZUcudldEZFZNYGxHTyk+bTZyfWpHLCt8YDJueFdedlF4KmBqNDR2VmAua1hKdShQSywhSmZASXFJRH5qeHE6O15CJGNwWltIN1gzT1NdL3NWUkVxbkZWS1l1elEm''@;'; put 'put ''YTU7fiJGRU1xVENYXVUxLCFHeDlRN0Ikb3U/QzwydmU8JEtmRSskaWgxJUI6bW1RJHg5dWRZUnNYMSwsSUluOzxXNC4jITM2RXsoMktxbDJ6SSlsIzJSMT1PVWlvK31lTy8oXjxFcmVKM0J8I1hTWWxvRG1WaGopOyo7U1huWz4hSi5yd05XWzk3IUYpdGk1ZW8veWNxJWo6Kj44QXA2bEs5NT4m''@;'; put 'put ''d3prWiRKdygzYExYQW94LFlZQnhmekU/W3tycV5FOGVUcE5HSXZULCEzSzlLZj1CL3gxRSlYYHMyIyE+YSFjN0NYYGt9WF05JT17UjRMPVQjSCxENDByRjxZRlBpfGVnalhefiZmUjw0dH40RztNT3F0cyVSLGVbKjl8ZXV2UmdPe0Z9JileIW1YPnF3Z21SZk9ZJiFRQE48e0V8NClRTjlgIVMz''@;'; put 'put ''dH1gJFQ2VUQwaVMmc2o2N298IiwsdkpsM1Uqe3pkJl5zLitRfnE0TF52RlA9dDNncy93XkBmMC5yOCw5NW5ucn5eI3JMKERQMj9FO3lBKWl3a3tgXWEydTN2fEFfQ3tbQFptazwsUkwoX0dwYkVffn5uZFlPZnl7PEFJal9zY3cxVmVgKDNFMGVXIT1Db3RHZnxWcjQpYFIpdCxjTXQ8XXZMZy89''@;'; put 'put ''NnBePCsrcUYoUm9MQmZUSypFQm9Jb2dMSi5EK3c/Z28hKWo9Wn1aSkxJZ0VxRTopcVB9Lz9WOGxqaTExNHY0PFlbWj4jTjJ0akgzeXVYUyhHSjZiNVN6PU1GP3toRWNIfGAwWTphWXduRzs4VzdvPSZ7MDp6cGM8TXg1ZVJabFQqdntEOSo4MEUqaT9nPVQobD9bbGloNGtQITxtKmIuWTVhOHZ7''@;'; put 'put ''OXxMSTEobj9YKHo5UGxxN3Z5WFVNYT9Md3xVNWI8d1glJjB8SX0rOjt4ZT9XcTtzYVBGdlQvb0IuNUZINjMlblZ+UHJFZFVtdnJoSTdSe2QxdHd1eVhqa35oPSIxRXsmLn5lQDQ9WmRXO10mRzRpZ3VqZC8maS86KHlfeSZXWX56bC8lT2gxRn5oXV1yITRTOGI3N1NlXl1XU3Z0Y2wrcFV4OXsv''@;'; put 'put ''ZGVEXSZLckE7IylUbUx4aWlqKD0pdnlYOWVHUmYicmRPKVB+Pl02I0xuRiNiVXMyMCU4Lz1zKnB7bFU5NkhwbHNTYy42Tikjb1JvMFBiRz1BYkBGM3djUFMyY0gsMi5yOT9zMld+R2Fna1h5cmYlaUhjUSh1VUs0OE8kP3Z2KSM2cGkhTE9bR1ojZDh3fGF8S3NdWnZ+Ik9vQHlgQCZWI1pVJExd''@;'; put 'put ''bU1EWmwoRn4qdD9hdEd5MTw2aV1jaGwoNTpvP29RIWRhWlFJInYjZT9QfD4qYlR0QmZeX3lIbXA9OjpFfF8uUktrYUpUTlQ5OTlFQGE0LlolSzorYHx1QUMlVFArO0hjaiordDk5MXBJWi5JSjVYal41eFVAM0YiZDVfJk5FXzEwaStrODZmSS99OXYsXTZIIlt2Ym0qYzE7e2xUcSVKWEk2VlFA''@;'; put 'put ''KEdBc0ZMeyQkMXAoKGgkalJZcmtPRERnTj5jQntYW0RaVExxTzdPbzRHSD59LkE0VVJgOXVnXTN4SywiPGB+cDNIeStrOjZpSlpnOGczJihgenZEYH4yQVA3VXxeOkcqQXNjRjJ2PGlYRDQrO2NfcnttPnR7MTBJPV0qKzk6Sj9vOT5rJVtFfFN8MjNQTjVCaV51amhgeGJJeUx3NmQ2dG4rbzB4''@;'; put 'put ''e29LWWIuJmFNPWtjcV90fUM5K2AzazpzeD5kMy5MIyJ2TzR1aX1QYGVMYlNXZ21RYmpvX2IyW3clXWhZS19jRXR1VjEmW1M+eF5Vdy5vaGAqW0R3SyNnU1lvQloqWCwxZiRBbi9DVlczUj9uWzp9ZnAsdFFkPTR2NUt1QDhXOHFqOltNMTdlei5yfWhQdUFzXWt8bE9qI0xqWjA0T3liazlELylO''@;'; put 'put ''UzdafnxdRSFIN05pUVY5QyRqbnNgUiV7cE1vNzRie1NzOEpBcGhbajI+VldrP0pJVnZGImNxaW8sMypiRWtLWyNZfUpldyZrc3pZa0poI10odylfUVBmdCpMYFN+XTZlfGw8aFtyPFNFP3UwekN3R2ptJWNJUU9zOCNwTXJjL3ppTix7cW9Yc2grYGgzYmo8b2FEQkUjS0ZeeH5UPDxUTk1HaiQ3''@;'; put 'put ''SlNsTzV+YXUzeVhWTiVtZTdJPzNDNGcjbkwsLnJuOW8rPCkzZippT1dfbEkycWJjY0NYOnBNYT5GNF85X3ArbHYjKkdXLilDNHZUcjVWRkNrNXRfMjFfbiteWzFLOFB4azFLb35+KjZXJm8xRzx1Sz82Wlg1YUkvVUhUeChre31hekVQPCVEZ0hTVCl4Rk9AaTB4VkgsNXFyeGI/RkpPez9XZTJO''@;'; put 'put ''JG9nZikjLixzLlR0bnkrNT55YXxVYWxxbUJELzV3NiFRZjFsdWdoUk9PSSNCJiFXIklhODJhRmZpa3hFTy46aHd0XThFZkZ0NyNVUyY9bTRWNFd0SDdgP2k/JEx3dzpBTllqRDE/PlEkJlIuWz5kTk0hJTFhXVZiWHVNZUk3XTgpdWY6Z0p0JEM+Oz9GJml2KjBRX1RSX1RZbSQ7TiVCTShWKiwr''@;'; put 'put ''akZTaVJKTE12U1EmXWtQcDBNa21LejFHWXZgY0VpaG1tYGN1bmtvP25GMS47IVZkQmlCXmJeSm5ORVFSNkw+IXxRUzs5dTkpVyQ7ZGk9b3kqM1ZjZHZ2e1Z5P301NSgpa2dPeFd6TzVfdCJoWUo6KDkiVTdQTGxUMFJQNHVoNTghQGBddm1TPEtJSG5DZDRuMkt4bkMiRzNucHdFO2ZrWV9fRmoj''@;'; put 'put ''eWZ9fmBMRixuYUUzdys1IlZ3TFhoWXJCdj83PyErdTZSJUtbaWVoLlB+PGt0TF90bFFEMiprSnYvJVl6RV5nUllmc3t+YVpNfUkxZkNdQ3Qwc0o5MSphWlFIazxAajhMczRdWFkvaV0/VixFS3ZGW1ViLzo/fn5sPUJydk1FVVI+PlJdJDQpTC9GNmokKz81QWVfcmYhRDttMl5xKFteRz1JVnV2''@;'; put 'put ''PHVleE0yQzY1Oi9gbiFyZjFnWT5KKHdNYSJfIjw1SUZkal86XyVkZ1FzITN6PFtvWiQwSj9YaW44YTNyQCY/ZDlJKUNuVHpwOW5QbiYub2FuZFdzcClSNFY1NlBaJTEja3FEJmtdcyhMYC9oS0dOVkM1fiRRQ3ZvXjNFa2VGVUUjZE8mWCh8LHwzUSp9Tn0mfjA6SkJYU1N0NDF9KXJ2QzY8Y1VB''@;'; put 'put ''e0V3InUleXh2PlN9PUJWcnIraX1QWTJyKUZEWTQjdGtyTHMwWEx5anJ1PVFdVXs2d0ZYbD85JX15TWpbN0JsYyFsTXY7Uk1FVU1xTkx9U1tEfGltLzFTfWRoZCE/a2pfI1FkMHsmU2F5eTl5SjpgYylBLzBRZFJSN0ZMQSJgSntNO1p5N3ZqRzA6TXRIMkBxKmJFcShGeHVXLyI0aEN7SGVnX3d2''@;'; put 'put ''e0BUanJIJC4lJktGMVo3M1lyI1ZvOFtVVGNZZmckOHN2OHsiOnklUTcpbTF9ak0jMlp9ak1aPSs3MyVeXUwhPTtQOCgvfFcpQj8/Pl5OdXpjRX5eW3xXKXszNyNVQTFnb1hFU3B7Y1txQj9aQTptPFEzW0pqKDN2UXhCQ0dKSjdhI3cuWSJ9Uz5eUmVtPUc/SU1lXnR9WHtgNl5DMlR9JT98XTte''@;'; put 'put ''My9pSUdLLGRQMik9IS9hPCY6QUdZPFBdeWRid3F4TilURiNNRTJufDdoOSx+bWwsblRSMENuLDJyTE0pRDwzbTM/OXV0NUxDQ35SbmBgWDIyeEt6QHlfKV81akNxQjx0biVRLm5CdShCNEttX3w8eEpJZTpacyJRQ19oKy5tWGN8RnFLNVtJSnNuVixXbiE3Ym1oVWdyKlFzeSklOUUwJFk2emBu''@;'; put 'put ''WFdVYCNwVHpBZkArZ2hHREo6WVVXdFZkRV8kfDd8em9SdnFIPXw0V29qN15taXlqTVY7UEN7VlVGISF4YzFRRzBZdjIxNTVRVWI5SlN3IVR2UDZCVURVZGRvaj9zU3okSTVzKCtJRExLWmE6VDhvNDBOJEssITYiVTJWOjs/RDQwPTAoUjN0dC9uLCR3Zy9YIWI7ZntvMktXYiw4JEl6JnJORDJm''@;'; put 'put ''Tn1jL01wXlJhVV5XSERtdU1BaSVTJnYvMUpyVXVZSk13KU5DXiU/fVloPHcsdD1tTiprKHJIRzxQJjxxPWR4fiRKMGpEe3NpSFNpP05zIXNzNHFHY3Q6cENiPFhzL0xIY1lTLDNHRWg+LChLIlhkSDAhejdGWDBMbyFeOCxrN11SODJQaE5ESW56YnhhJTpiOUc4PUszJExndHpRc3k1IXNaX0Nx''@;'; put 'put ''KDRuWjBVPCoreH0raCxFQj45YXQ+U0Y3N1gsa0ksO1U6JCFuXztTO1k8TnYhIzQjRDJoSS5QenBOK1s2d2smISw0aF5aQHAiT1ByZTY4NzYsMGFIanNnMC5SZHY8c1FSOEkiOjtKekEzTz81MCxCOT9eV2E5VlEyUnRZKSRaXW0sPkNSW1UlU3lFSF5keCg/OmJ0XXdLeDVMdGFSI14zYip8IzR+''@;'; put 'put ''cmhmLEYpO1czISNkeF9SfGFHaChpfWlGSnNka0c1JW1ENF9kK0RRbixXajJxeEJIJURre2hMUlt8L2dVOl57JGlCSF5udWR0Oi5OTlJEVlUhclB2I2dMeFdHOC42MXBraiYucjtPJm5LaWhWTzs8PUxCVyE4MWBLaXdRcy5lNkQvWmd7TVJbXnc+MCRjcTxOYmNzcXI0Mlo8RUl4azh0dWt8fm54''@;'; put 'put ''KSlJQDhAIiM2WzZBJD85XXc1P3pYTWQ3M2VHO0hqLzt8Uyo7JVlwQDJfdT1aYS5DKE0zX1h2T2w5a0t+UExTQEVQXk0sY2UmQTwqfCN6SHBWVGMrLDJPP241cVpzQGhXI1VXRi8vK214O01sYHNdfC5EQjomcnxsN3F6UyxQQi5RKkxfWnh3QkUsV3RCZXd9emQhW1o3cWJUcGF6U311WFY7Kn5J''@;'; put 'put ''VDhHUk4vdFM/dE9+QUlbZWFOeSwkXnReLjpPfWxTJFoyIUw3eDV+dyZUSktdJU9EekU2QTY5InxUY0F1aCVoSTJXOD5JQiI2eVF5RjBrLERDQTRhXnw+ZlM3MHNWcSlEcSkqI1Q+ezo9K0F0YzpRcjp+ZzBWU19mPXU+YD87PTtTaWcxdCRtXWUhdyVLN1tNVWdoX1FmOl1WfSU5RncpKCo3dClS''@;'; put 'put ''Q3kjbEVYTDIzSXd9fWh3KDNEfSJhUyEpTCM1Mn5mTHplLzJbTGhxNmxsTihNWzhRRk1QNDhLZ0Q8ZCFAbjUkL0FyPFR0YUw4enBde2BrbnRKQkouYyV0PXk7NmRkQDN6XlJfbCEzQmIhd21VdmpOP0BtQV4haytKTkVAQDA1N15+UCE1c3UwU0diJmY5PiVuJjFjKkVOfjlPXldESXopd3FUREd7''@;'; put 'put ''anhndHx1V3w+SytSSm5yanVZPFt9Sk83MzFTR1N8PnJfOS9bPyFNajRFR2FFN212KyNzeFpCaE9rWCokeFJgRzpyXWx1bHF4aSpOcSpNNykzbTwmdjB2WmN3WyRuQlBxeXgieTZiQzBKeTdpL0w6eztkJGMxayxhe0VAcWhyczkqcDZjYjVFeyM/NW40TnQvRXN+Xnp7VWZhZD5gPjZ4cnFaeiEy''@;'; put 'put ''MzloTExJKWZnQDl+QW1ePnBETkhHUj40UHFZIT9OPSNSVWdiKUxmfHVgVDYiZnR4LD9tOmdGYTBjYCpDS3MyXml9WG4/I0w/SndaJUBncHhfSGRvTkcuWjh6PSlCY35gZVAhcj8vTC5Kal57fnZeeG1rVVg/TzJgbCN9fl16fFtRdGZfT1MpfkN8PTs5NH0oekM/blA+YDspNXh3am5IfklHajZ9''@;'; put 'put ''XilbPURTQSE7RDRDIjRkSUhJOCZqa0BXK1F9eH1MIUpSZFI3RC5ddCh8cUV0YSVEZDFPdF88PkcyI0BfK3ZoajsmIn1OcCs2Pm4/JHY1MjhvIjxUcHdBY05TVTEjU3MxVlQ4b1s1OTAvdCMpK1J0Xmd2QS4lKzJSbz94Tld5RiYsN2dhcmo3Vy5bPEIwOm11RyRjaXFwRkpaJTE0dllWcTwpWkNB''@;'; put 'put ''ZS95am83UC9HS2RkL09tTjNXUUFaZHp3XW5sIioiXjhsUDQ3ZVRbJWloe2ExZVkoUlMrfE08WVlvS2dMPiwzNEUhVzhQelk2IkQlQSNnOiwjPC43ZGAwMT18WnRvaHJtbjg8dlFzLG13cGNWQzQwPWxYMzBATjIsP1V4MyFrQTp3Vj1xI1ZpL0FeZix8ay81PkVubFhqb3YlbEdWTkNRLkYvYGYp''@;'; put 'put ''LD5nLCJaP2kwekZwXncrPyMxfnMpOkJLWnYiUzVWdD9TYi45c1ZAODg3PWB0M1Y1dSp0WzFPZlh4azpBPVVocXA6fGguZWtSTG88eElDKl5pMixyRip3L2plYnFsY01gWTA4NUBvaFNOYiVVdTI3PWpvY3wwfXZRNlpfVGhnUnl4QHwhTk8+dFh2MSVAaEgqKXhZMH58ZkUyWkNZUkBLOWRUXWJ1''@;'; put 'put ''ITgpeWwlO0pKUWhJInozI2RASSJnanlDXUB8eCh8KXhBejl6dGgiOWgxN1hFKHdSeGdeOCRxMCgkaXM0dWpQOkZnXnBCZnQ6QDA+RCk2fVJXYC4vV0tJPmYuUXloSUE9KHU9emR2SUM5KywjUFpUaGJqbnVjKkZULnhQcSFPSmRCNHpeZVQ+VVsuKDNzODd7Tnp3VUdIS1RtfDNFLDZ6dWw4d2JU''@;'; put 'put ''fk5vNGl2NTs7VFRDU1dbUHxvWFA4V0x9I0pDY2Nud2p4SnpMSj9FPVp2eTElJGB3K3h5UT95d1R7fnhFWWpLI3RdV1d2Lm9NI2EjW2Q0PjxdVy4qODVgWz5gZndHe2FyQUM6K0E1bHcxVThFdUEmNjRzfFIkeVNfITEkNzohanNwITQ+QkhtRUJ0QFdbdT5yV0MjZTRaX0M/Y3M2TXpnJUwxXVRt''@;'; put 'put ''WGd5OWN+YDM2WmY7L09ROXVRMUpEY3VkSVRHelJjS1Y2aDckQ0gxK3g1YHs1YVI6T3VXRHFienNzNy8iOnIwQDZba3FuUkhxbXorbEVCTjg/cXMsPDthb1l8ajNHeDQ8Uy9gN2M1eCw/a2I4ezUkOkxxZVkrQTFkdip2RU41N1pPY3UleDJsRD5vaVVtdl9xfGJDdFJEaE4/I21McmxGSWIwSmFX''@;'; put 'put ''WU06OUVsVTRbMXM0a3cpTX1gVXRrTSh8WTdLcmF8L2tmNHglMExmVSJUM2JRQyIhXkRecSt+ME5gaGZKajRGZHpYLkxBOCFMZnQiMjpERWt+bTUkYDRdfH0qeEcjeTdZKXNAeVEyVk4/MnA5ZFd5NVl9ZklrUF0ubEwhM3wieFpeUmRlQSp7aztUNnxHK1hPV0duWH5neU9IWUNJTUZKRF1dOilu''@;'; put 'put ''KjR3dF1BIWZEfUxxIkRePVg0Ql1jKl1zdk4helBFVH1hIlkrRnU5IyZScVp8JG1wcnhzVVRJbShfYXBTYUNzdl9gYmxufHxDLjZ1flplWVZJc2xDa2tMVnYiYntCJkVnYXp6d31UVUE6IkpXbmZzQW4hUWx5NGs6SlcpOV8xRUtsRm9yN0xjKn1lcUA3OXJIJTo4PU0sXjlGbjJSSUg8PUddLG8l''@;'; put 'put ''Xih4RGlNR2UpOEQjfEdSRVBKPHtdTXp2PUFRXVoyJWNMWUklNHxZPkhpPEJjYSheajFTNUV4WVhybUU3bjoifjpEb0dRVzEvWjZhZGpMSGR7ISxCMXt0c1lqKmIpNGshK3JuJEA8ZXRnPXIzWFEzY0MxUTtWM1QsPTQkRHQ7QTUvUWd8KVlXPixRTy5TMUN8NX1KOGtsNHsxcFtQLjdtQVN5Oi58''@;'; put 'put ''ZV4hYEo8WmkoK0pbdiYyLHZELy8kIlojbFdEPjNJfDhVRjxIcnQ2T1dbIzh4JkoxfksiTlgzMV1eT0Apcjt3PiZsSiUsMERZNkcmWUtFczVpSV1YcXF3TG5hVzh5RmZIRl50dndOIV8sOjM0VGN3KTd1U3huVFBYZTg6RmJ8WkBpOi5edHx5NWZVZi5+QzZ7SCxUPzZFdio0Rz1tWCx+TVc7a3Vx''@;'; put 'put ''REhGcEoxbTtKPkA8N3N+TGZRRTxZfUtJbmlkeSYrPVMsRU81KHhkM3FAblszVX0hQHJLeVEoJjQ2TH02JERlM0BBNm9CbHd3KD5DQFIsNWgoMVltOzUjIWJHU2N2fUV6dmN2TnR3OlIvOyhgTklWeXQlSFhKXzRWMiR6YDd6WXFDNiRIO2g6YU4oZGh5aDYvTGMzJWgmMnNDYTIpZ1JfKFpGJm1t''@;'; put 'put ''TnVFdXxXK0FAL18kSVswcXI8dyw6UE1dMUZtS1BuaFRqdjFSQ2YxLHYjKEZsZ11baE5gRSorVF1WPGoxQyYqQnUmSS58O0xhUSFDajlSKExGN21wVm1lRkM9UUFJc0xVTTlERkRfTVlYaTRyMjZWeDxNRlBmdTxCZjFxc0E6VF02NTplKjcvTEkqezk2WHBBK1RQdkUpemRAKXJHW25EdFUla15X''@;'; put 'put ''Q29gUjVxemNfRnp6Nng1Mko8akFpWH4yNXxbSH45cmciNkMsSGQreE5AUVJeOUU1XVM0bDN4TTleP1JVSiVVdUxeQ1BFTHp1QSkybTJrcVVIdy5TYVA5Zzs/Y008aHk5JGJzZGhqTHR8elsuMmlROzBHOFAyIXQwXStpM1dDPVlbZEkzfX1lK2dIYXQ+M2k4aUw9S2FrInF+KyRxcE1YN0JWcSEw''@;'; put 'put ''fC9iUV9mNUdOfVFddmo7JVhoWHZkWSpRNTh+S0hzSDU6TDJdbXE9NUQoPTBEfmI9Qmh4Iz19SypoWlo4NHtHR0lgRWVaZEdlWk48PGwxZyM3LCQxWTcrJHApRjlsbnt7MXpkUTJieGZlS3dbWFtUVXpIYE90OH1jQ0lqL3UsNmIoVzY5SXZ+T2NadEU6V20zXVNEd358QzNILGkmKk0rPElrK1Fe''@;'; put 'put ''ajIuOjYwUjpbK0F1WE9wIUQyVDBnL2NMUFp1Mj04IilRbSU9aCk8MFM2ZUleQnhSZSNBMUloPCtTbS59ezJBTXE6clY2ZUcqfFo1SytCRm90TEFGOEBwMTw/eFRvbUIqelkhU1tQLiMjTD5tPztrQXgvazp2W31EM1MqVzlzKy84TCtZOT1WfFlLXldUdm1wPShLd2kvbEZKKypRdVJkdWQlN3lv''@;'; put 'put ''Z11BPSx5JChMVWtxTlNFdGVRMjJAJWBQTzUqekIhYkJhWVNXO2hRbmhMU2x7W3E0Li8/ZUMhUEU3WyF3Wn5vMDp2XmB2TDhgaD1ONjtDQ0E5dnJbLDlGQk8oeUFdP3o4L2V9OSFjOEt0dkQ/SWRScTZoa0Q6dUo5Ii5AaUpSaXEsRUUvQEdOPHtdZF1eSytXWnFZZko8IThlOVdwNW1EJHhGT3RT''@;'; put 'put ''bVR4U14xNE1KTCN6JW8zb35VLClnIXlpW20yPitBMjtuVGM4Z1R2KFMmUnBtUWZrMTVoJVM5Q1MmY2JxKkRDPm9ZUS5VbGZVYD4iNXBYX1twUHNYMm4qITVWcHVgclUuaSpiZSo6VHguR1tFYDsvO00+Q3IrO2VES3RLKW9tZVRDYEdJTTlFSmtMfVl6el1NJCpzTzN3KEd6TCsjfj9BdExVazw3''@;'; put 'put ''THJXV2BnJHJeKHo8cC96ZURHR0BafjUlPGxrSXlVcH5hTFVzNEskODQoTiozRUZjPjk5OFI3KV8wSSZkNHJzQWM4T25MWk9deCM1RjBPQHYvPCtfN0FUKSU6dSI+bWg6JW1tV0RjQ0J7cDAvazBULixAfU52b3AyUilPTlhwcG9MRWhmd2llYCRJYllubnFSI2Q5eF52MkdiTCFdIlhHVil4NyU9''@;'; put 'put ''UyovUk1TRUdqO0JzPFpwdEwsWzZxezl6ajhuLkdlKVAheiV5UER3aXcsSzsse35VQlghaDZzOTJ2X2hOTm9LUzZ3fUFpPXRgWURnKV1xcTVOIWI5OSgpX2VURltdcVlQSm54MCY3eFtdO3daR0xeSDJyc2dfbnhVVH1NQmBQcXMkaFs2N0w7IUErbllFM1poZER+Sj9qPnhxZ0pQfjJ9Vj8qPiJU''@;'; put 'put ''Vl97WHooKXxrInRTOjpRVHhXXWRHRExgeTtWYEUxIkxFRWklQTBFNns0cWpmfTtBKFNIdV1QRV9qSzxGdG9bYVg6Q2Z+dVlAOT5+e0JqeDdEZHYlTCtXTGpPc1lBSkhRU2xkLk9SWmI3UVJrK3FtODdVezpiUnxISVIuVGdhfiRTR1pidV16Rzg9YXZXZ3BBZUM1SHt+TmVdOGpHeCwhP0ooc21b''@;'; put 'put ''O3BVUjgoVkVCSFlVI2puTk1SeTBaOHZIQ2QxVWNBSm8/MT9CdUdXX3RKeHkjdiV4YXMyaSUzV0RNcXBPcXs/Xn0mWGw8N0BPXiQrazshRl9pbzowMXduPS5hV0xUYUFEP30yUUFHUDY5bylZfiFmPHJnPS95IlZrYklsP05OeSV5UFVjNCFgbX40b3c9XnxiYndPbjN0cXV9cnE/eE0hQ2FUSyEw''@;'; put 'put ''W19PdjNkSDsvXVRqK2BONj0+JmUiQzJOYG1XNyZZc1E3Pm1dSF5+W2Q7KDpCd2d2bCo3JTFATyV6ajRPX0oucX1UIX5NU0B3YUx8RFptJEY2QytUQi5idCUwJUNJUEgiQ3s0OnJOYyxwXiZUS3xiTjZPMHVMfkZSWjtXZWlVUlZCNS4vPjxyJUo1aTVvcUMxc0FKdEJFczVDVkdEbzNQVyVYYFcx''@;'; put 'put ''Vm5beHR2cU1BciVnQUFtZHQwbHxARTBHYVBnSX1zTnEzaTI4Xl5mXVJzcFMiLnp1PG5AcEVMbih0QXxAQEZSPCRBKFU+WGdvOF5XZltuMGosSHlRKTg6S2hQVXklJU4rWzJpWzh6NlMpWCVXZ2NnVWYjMlshVSZSJk5zd2RBPl5UP2AlPk1kXyhuVSl8LDU2cmpfRyw3WHUrZDZLLGxNbHZwQ15R''@;'; put 'put ''Qi9lOm5gSGlMUklhcTBXfD8xeExrSH5YYFhPQDYlV3EqVW97aTdyOyt5UlNmY2IuZ0VXLylubEtSPmtZaDY8dERXfCxFP1lodiNIWERBRHByXUpAa2BSM2tHLDQ2O0p0XzU2SnNgKF9fUEghI21ibStCcC5AfjlpdmwrcDw5YT9GckBeOE57WkYheTB3fEt0Szc1JioiOC9lOClCaF1BRW9RP0sl''@;'; put 'put ''U3EhKkBDZVJsNEhqUTE3PVA/L0NpbH0rP3BAbl9HQzI9TzZZWmYhRUA7QHpDMGwuPk1feUdbcWFsfix9R1c5SHMxKEF0N0pUSms3N2oyTXEsXWAwa1UwW2N5YFRUQkMjb2UwS1AwLjQjeFBRN309UmdlRGxfUUYsI2dTVWd3VS5IJDJXWU86cEVyT017dGhSRSJbPXIzcS9EfG9xU25XTz9rUXR4''@;'; put 'put ''PnJAbWtEbSg3UHc5LFVDSGdSc1ZWQWNOVEJ9PWldaUVANkIsZyVELF1MUks8cC9abCNafG0jRzRXeDNVeX10U041JioxIT4yWmpnNzsqcFIhfSg9YDkwTWFVWSR5ODIwJFlVUnlVKnkuOUd1OD1TVSh1Z1lVRGU0YHgmYlksVEZnJSx0NTRHOV5NJWZIQHA8QXM4ZUFiZ05uSy8sQ0teQ1dae3Iy''@;'; put 'put ''cihSaUFbcShMc29BQGE/TWx0fF0zWGAzOzR4KT09cSVnJWVLSUJAKWdwbClsZ1ZeJWVsd1Frczx2amUlTk1Ceit5QyIjYWFKIUciVS43LjxkXVRvTEppKyN9OXhtZCVTaX58bXVde2ByMnxKQmNASCRNRWxpSE17WzF2IS9UcEUkSH17Um52SHNPY0NNLj9sPClDfGp0UEshdSN+VywldGA7Smhz''@;'; put 'put ''TSwofkk9MV5dPShfeD5wdlp1Tnh+RU9Fa0RuQCRGMnV6OCZ0W0hKbVUuJlpoZnFEQVVhMylqb3NfUElKLlNYQEc3M11MbFF9UnY2enQ0Lkd3Q0lhSyEjTEBVS30sNDFdKV0hYW9AbkZyZ2k3X1Y5M3d1dFgkKjdbOHtndWMpXks6ZzA8dndRTUBJN3pxTCVdOl0hUlYpNmBbT1BnRElVeSZbVjtx''@;'; put 'put ''Zjg9fm4jQEByVk5UXVtzNmVXVF40QVRhdklVV35gQ20laz9FQiY5QjdYL1QiWUtSR11YUktzKTl7ZjokLHk9Wy82WWEobTlycmRGSUZONTowP0dqVn4rbn4+OSQjVFBGWCtXa0NjUSZ0bnk1c3NuNXI/fnxjIm9eampkSDcyblQyWm40TmloPTM2LjczVEdXQG5zc251bE1ANGl3O3xhbSxgbEBn''@;'; put 'put ''VEpGd1NOPyVCOGBNKyVqVGRfO2U3al07YEBSInNOL2tnfFh+In1uXTlPL11md043VCgzOj46PzwlYn5fSzp+RHIpM1VDNSFkby9uZFRRYE9KZ307TyRsLl15NkA9RHI8OX5RKUVXUnBbNHt7PFpZODBgIz9daW5dKmxUPm4pUHRPPzE7QUkvfixeX29GclU/UXU1XlN+K3NkflYmUVdESmY4QmY0''@;'; put 'put ''ZVlkK2ZwbztBN2F4X1pNPk9ka1M/TVdeTWFKbzB6OWc2MXRbTzJCJThwVjY4OWojQlpOUGAhQl5vUntsUENOZn1NQmQlbmJLSXE2T0JHIXFOekFPUSU4WUo3P2F0XlsydlpwbWFhX3xISUMpLyhXWTp0W0RdZkYlPGY8I2RwdnRDT0tNPlFpNlNAREVlfD1XQ09ffkReM2EkVHU6YSV0OGMlKk8q''@;'; put 'put ''bEQrOyJVYk4ha3B1USxpbUkoNyE+QClAUktSfkpUS2pRRmlSaC9kfWFwWzRbTTgxfDkxbklKM2FycERFfShjJUxsKXhjU3dIVm0pVmYvTmtSQDtZZVFET1ltOX5sJkN9TEpwX19vYWc3YXl1PW40QV1DNnVDRHRSZz9GdyhNY1RdfWNFdkEjeShyb1krfDc8SkcxUF5rYnx8Y2Q4IzVEWyNie1BU''@;'; put 'put ''anhpPFl4YThoTDg9OzZdX2M5N2VJJlkzW1J3fkd1QS5fbS9WPWtyPz9yMVB8RE5HeVVuU3kkdyt7VlZ2Ymp3WlVtfmlCZDk4M2BGfnlafHFBUjwhTTxYVlkvRXJuUV9dXj5OWENFcmU1Y18rQi4kP3JQNj53dnwrdHpGJCwyPiMlald3TGVnMllleGA0MEYye1VFQ3psQzxAZlkyOCVqVn0lMlkx''@;'; put 'put ''d0YiMVNIT1t+cHFaKURbQ0oofWM3aixLdEZ5T1E2bjx0bUVMTGd7fDNqdnBvQkpBdjpbMixTbVciTC9ET3s6VTwyUnohbmN3O002W2JlIy48QjkpWkhUJV84Zjw1K1hYTWlVXkZPX0BiMDtPXl1ENkosdWheenVGNjFCMVBSb1pBbVMlJiRDTXJFSD1mK0BMbnpKU3BWdDguWENnYHpXU31daWo6''@;'; put 'put ''bmpmM1A5LmgwSmUqQik9RWNbKn4lXzklUiZ6ezZMNnk8TVBYL21CYGIxU3V4ZlFSdmdnbUwrTXttfFQzKUciT0U7dFRvSzNeKGNmdk08b0l+TG5GQmJ9RX1Ccm09bzYhKTBwX1NjQTEiNCQvT2RQP1A/VWorZkgzPHRbbikhbF5ffEJQeFUqY3duKzZVbGFjZTx8cEBzYTZxbjUsPiUqWGRGSHhU''@;'; put 'put ''ZCRVXWVrZCloeCZTW3M2bzVlYTE0W1NqQlpHaFl6YXQ/UzteViQhSyU0O0lWfS9QRFIlXXprUSN7VzQsaEtGSUUhPis3UWlmXyVGWks6QGprNk9ObWtBYnhTXjhET3RYY2RNKE12dXtRSkdrcjksWXlsISZLLnAmIzZFfF11Tl9USUlZZyQhWVBpIj5bKyZ9VCw7OVJhcX4hV2BGc2ZmL1tEZTlZ''@;'; put 'put ''USFjYElQSHtQR2p0Wlo/QnRDPjI9N2F7PERDYld7V0YlJE51NFM9XUNRL1Bnen5OPVUyX3o2KFAzR015QlkpZzlRfmV2N1ZrLnchXks7dTd+ZDxgJEhzbEttLEI6RUomRmUweVQ9fWdZS28yWS5kRzZPdmEhdiF9LipjT1JKWVJwRlI/K0lyLylqezU1RUspNUNaSHY7YUc2VUJ6S29wZmBSMng7''@;'; put 'put ''cD5jandyJW1IZUhpUE0zSExdJSxTeUU6PWcuUUpLYDZRQVFwRHNOMjF8UWdoJjRYWGg2KSx1cCVvY0lRYXN1NHhjZ0ZWPjA5LlgkTEs1YzF4TFZ4TkpOWixEQ1ovPkQ+LCQ8ZlZgQFlWUlV5OmRbVyRjZihjSVpCNzdGOXg1bjUoWyUuISUvZjNjeHRGZkhJd2d9e0YrT3JbNkxNVUo8aCM7OUQi''@;'; put 'put ''fTs0Q2t2a3RjcXlOezpyVCU3MmxTOHxAeVUyNSx5QG9bVFBzLGEqVGBkbjd7YFk6I19UZXovL1g7WDNHdVA9ZW5NWn5EY3NAfEsjPnl1O2x+TDRqfFFLazc7Ol4/YCYxLD5LYUBgL19+YGpSb00pXzo8Jmp2fD5XfH43SURGTiFZOy54ITVHcDQxQEp5b3k5WkoiREl3TTB8OFoxO0lkQTYjYUBM''@;'; put 'put ''bCVnMTZlQGNSeGFjWT5xckhUWnkxYmgmOk8pUD50SCNNL04pfStrVGpVP3trcTRWVzV4LjNFPV42bypKKWs2Rj8oPXlnY1F3TmdDbUs4PHsoLmNFa0JoKlQ6JnRlfncmb2AqRixRJkVaKlBtY1I3Ryg3bURENFgue25HK09FJkF6T19Tc24yUSJlQEtwJlE4TWN9bUtNcF5xeGJEdjBvUWRlelpZ''@;'; put 'put ''NVgvRFl8QUlPQGhQO0BCWCMiRFpiTGMyJF4uQzhTSSQiQ0NYOD1OSWMzdUglIyt1RmJURmYhNmsuKSk3T1Arfk5gNT9Cd1QqeVFQdFVZO1BTPDIpcSYlOmFLcjQwZy9VOF8qTDRIcTJJMnlVbm8rMTtjYCo3Ik48emJCcUl1X3dgYFU6W2xVcDVKT0chZF5lV1E9a0hCfHllMikvbig0YGtYcUc1''@;'; put 'put ''RT9jXVBBTWtRPlhdZD5beCF7fWI4TTtKRik/YkBjVlNmSn1LMXUyOztecjEvQ1E7YFM9OywpdSJhVVh4N0ZPZ09VeEQlWmRvRixjY0JSUlJDRF0/PmIlIX46PTZGRSZ6RWliZTdzaHtjUDtkdiJ+dHx5dkxNcWEsYDVGdzsyaS9hWyIrNTxQenx3dVM3XnY5L1ExWnFjck9lOjEkaG50Qm1jMyxs''@;'; put 'put ''WHh9PjBTWWFfXkBjOygjbVowRCF3NUhyMmlobEJNfSk/ajJhRXsiZCxCaXNKeGhwRStoVWpvKEpgWT0xYT9fVlRTR2BifncuPFpUQTgwUFZxN2Nqc11DUDpmIWQjQ2ROS3g8W2JNSnxFOmgjdCl3aHpnfVNeRHg1WyJ3YVFRYCpSWShFeD5YJlE9eXEibU5IYSwrJWNBcmRGT3FzU1dZYzhVKFFL''@;'; put 'put ''M1d9bExZNHo/MlIwQCk6Ol0pPW0iL052cSxaVXloUSo0flNacGRGZHk8Sz5vJFcoLkZMdF1tITZScCE9UDplfj5hVTA2LHAkaFE8O2gqb1hUT21NT2JrMlh5WnE7cjtAbDNVKFd2eEBHMVN0WGkwLG0yenFGbV1nPDBgK0cyJnVgVUEmaD9zWVtGcXNzUDBJV3UrNWNOI2Rgc24sdVFuNW1sPiJW''@;'; put 'put ''Iyg6RzU8TFBiWSZYTFhkb098PCN3eDUyZHlSUjp0XnEjPVVnLE9jQ3N2Y1c1S3lvWiM4Sm9Pcmd4K0JrclArUVRGK1hMcmVHO0Z5JlN6YCMiakV2NnhxRnZ8fGdLQElmb0JLWUVLR1ptdCUoN00/M0loUE8odH5vIUszXzgqMHhAbGwkbjAreWJFYUAoOXorRGU/VTIxUkNiP1dVTkNMbT9oVmFw''@;'; put 'put ''ZE9tKW9ebFI+c34mSUl4M3FfTHckSixkVkV2LmEmPCNUUXM1OTBGWEF0dS53dEo4W3g5QFtqeGZJSSM0Tm1feVQsTCx4Q1RIdyN8P1ApbCxSImtEbDxBRz83cFsjRU9nW15dSX1VM1JCdVJaVjVQeEwoS2hPIipRVypANUJdQD1ZMUJHaFJGMF56WlA0QXRAST5eazc0ald7SV0jTDdedkpGI1ta''@;'; put 'put ''O2hzfEJrZ3ZXMl10O35odFQ7QyRkWiE+PmFBSnRQWzo7NUZRQU42cCg2dTQuJGsjRjlQbHQ2PFlCM11lIUooTHZZXTMmaldvciFqYkZfVUBrI11eKV8jR0Z0RXt4MnAmTVBuPiY0d0RbOyNScFAmXj1kays7Qk08e3Z7NnMwK1QiL3ZJPH5UR1FoOzN9JWRmVThddiVGI08iJmo8ZUN7L1ExSyEu''@;'; put 'put ''O3gqY1hgNHBrX2lJb0kkOXUrUj5QVzVQKnVRTEFLT3VEfjN1aCtjXy51P19vT3N0N3JyKXc/WEg1dUpfayhQTm5sM0hoO2NNUEtdQV4pMHF9Nnhuel1LSHVde2ViaVhJbDIrIVFsdkBQbGpMIy5paT0+QEF5NnV4V3Z4TUYkQDNJZ016UC5HWiZ9bGVha0d+Mz8qPlJHSXV3XjY1Z2M0fVI4VHh3''@;'; put 'put ''KFdkJiUsaE8zNTxzQzNKLm10PmtOUWtmMUxAIjZvNFptZH4oVj5ALC57JTZFMkYpcT08TT1JMlBteVcxMmZ1b3w4W35wTjhqemE6WXMsa11hQUlGSUUmeUQjKFlZeFc/eTciOGVSZ0BmJlhqUS5GLls8WSRTWF8ke2JjaTAmTzRIWUkkP0BoYWtSYnNWU2V9dSFMQiw0UyRyMisuelN9b2N4dU9v''@;'; put 'put ''bDtBblB9c0R1fCVjampbUnZELGJ8KUglRl8zeGp8cldTU1F3eCFqZDBqdUd6MSpAKWx7Z1cpPkFkW3JTaV9ULCIqIyp7bylmdkJ0LztTPVkvTlhBc0dGVk9TRCxWWTpRPD1rYmMhbVA9VHNkT0orK0d1eHUqZmtNITMzIVljcnFhN2wifWtYKHFLeTViOjR1TXFFMGZ+alo5UUc/VzwlZW0lQ3xz''@;'; put 'put ''cHdFX0U9cUska3JmbDNEUVc2aF5AbGRPYixGbUZGTGVBK19mdDU2Jiw0MERPekRULDxoN1N7P0FabiYrbDFtY29sIXxLenM2KUMqJikpajt3Olp+UHM6JF4zUXA2Y0tGZi9vLHk6ViFmJDl1fkxvR3BwXTUpWEBWfjJOKmpxe3tOaVhRXSp0JjVAU11BcC93dGJ2UnJ0QHdUcltSNT9AVEJTNDYy''@;'; put 'put ''NFE8KlRYZEpLeHQiYz9OdmExQSQpan0sRHQzQj1VY2dMTTp3TFpbU0IuV0pATyJoJip4YFAzPitAck50VjAyQDhrYCl3WVomY0VyWDZXLyQySjlrR1psekw1TjtCOXBhMXx1O05NZGVDbEdDeSJoYWB2MzxAc2BmeHFKSnJnRXU3ZEpxSTdFMVlAVzUmV0siTTVMVnxUOzliVmIzV0dNNS9aZy8k''@;'; put 'put ''cXQiPGNfNWZfITFxcjZCRTFhWVoqcCY5KyR8PF9zcig9KCNHUz1dQGteTyV+aFRedCp+eltCazdWcVlzfj1pWTVwVjtQOlAuYUNVWWV6fFM1QUpbaS9vMVNgay9pQkt3PT5pbzcwOm5hOVd+SElLS3Q+L0p0NWB4ZyxqY2w4UiN7VD08XylUQXVEX0BwXzl5ME4oUllRUFhdVC9URiQqazc7WSQ2''@;'; put 'put ''SCZiOTlgSkxTVH5pNk5Ua3s0dTJkJXcvcVJCRTU3UkNsImhIUyZ0YSZkc2N0N1t+Unt2TCJVfUhvOyk0MERAY1lYdk9lP1JEPj1gdXVgWHR1SEl4T2BLWWtZSDxVNlImTS5BVlA7X0VkQVBpTVZGYFgmJEFDLi5ea0dxQy5+YX5JTnZmQXw0Q0hoRVM2bnFxfkFMeF9sZmxmM2lgQmhzRiR8QjtN''@;'; put 'put ''TXs+T0l3eWg7XVliQjx+ZF1JeElaMDtGZVkuV1VJMV5meChyU3pgOVdhOz4sKmlLLE9PQzNBXnUzIUowVjZrQHpuT09ZY1NLLi9WJFFVMitedXldMWhSXWhtVitUOCo0XnFAeEBrdzwpXiRIZ2pXL3BibVg8TSJUeFZ2dDhpdD4kSXxmdTxjTyE7c1J8PC58L3Z8JUlRMUEzdTA7bGImWnswJStO''@;'; put 'put ''Y1dSOWJrIz5WYSt6c2lsfDpyTTM6U1BGdE9iR0EzfVQ1YyF8KF1oPXk6SHg4I015dk86VXhsQlZac0c4XWVNSD59MFc9c3tuZ3k8bldEL0pgIkA5alYmcVQ0KDg9Rk04YFZfUlRBeFoqdDAqUiNmNDRSY0shISJ4Pj9vNFIoKmQ7PFM9RXRoIWlhcDxRJjRGSEY4WXpvcXAjUVJELDVtPEkjekxv''@;'; put 'put ''S3I9PUpNL0Z0MSkrISJ1Zz5ob2pkYSJJPHRYOztLaGMpVVBadz1VR1hoRHRrZ3tSJlQua2ZDXm99NFtENiFzOWZdRkR0TXREKnVlO2hGXk9edSRHRERqIzFDeFVLPW1KWm0pX1VgVGA7MEdDeDM0OzZbdzg8UyVURGlzVVZuW0hvJUgpKEtwb2hyTWJzRzBYaSEwSmRWSyQ5JTF3JEs1MERjcmRZ''@;'; put 'put ''YU5CVU4keUxuIiVQdWBKfU1dOTltTD4mUWk4cnUuTEFYTjc5ZjF2MER7X3R0OyU9K3hpT0A4Pm93c1NfKjRUMUJwUU5DNWpDc3hVMHRmcW49PX5qNnIjcGJwSSIuZilnO0MpXkQsU1loVlpPWCxUSn47ZytxbzhZZSI8NUN4dj1VYlMmfW5RMjJYSzdWY0BqNlRoM0wyajI+endNdHB7NDgxXiRF''@;'; put 'put ''bGh4KHI4Y3JKRT53VzV2Q31zPnZ9UWBKM1NXU1lxMGN+VzBWWm56bWVASDNzXkhsb1R4fT9SVys0RGJxJmk0MitHXXFyQGJybTAiNkBEPVhYdTtnUClPS0V5PTl5VnMlSkRFbHA0SnY6MWJYZjByTTJAMzQyISVGUlV6PHRnWjAvRk46YkhzM1o7WTdyZn0jcjpZQXpPYnU2dnskJjlgcS5rQWkl''@;'; put 'put ''Mno9eSo3OUMrLkkxW0Y+XzZUMl0mdSsycl9iR2U+dEt+dV1mKEApTkx5OSlaPlVhOCRebV5eWSxDXzNgM2JPWk1jL0VIIWkhYGBDaUpmZjddWT9BKS9gUG56KC9bYERXLnorI3h5O3NYfXReekl9R0p3YmJQRDZNent2SHZwSCVFRCN5ckohW3VMQ3FJbFJOanRPM19dVXMsKy9rdVZJVFswfUhK''@;'; put 'put ''bVBiaUtYSE9mc2F4UHFKN3BXVEpJZCNMS2wwKjQjdE44UzBZczg6ZGAieHdpclZqYT8xNnxtaFN6RGJPWV0vPkB0YGQ+TDRJSVApLF1JRFBoaUdeTFYkd3tqfV51VjBpYF1SMUUidHUoVnxVcEwzSGBeX0xFImdzdjZ5a3FPXWZUVEIrQEl6Q3pwVVhUWGV2OCVTTDpOdz4lRFBWdlhqNE9TTmU9''@;'; put 'put ''U19bVyRCc0dSITNLUmJ2eTdCTmhnIiMiPl8yUmdFWmdWY0s8K1IuaXpRJHFvdWgzSiZCanAsailsfjp+K3lxcjdLUVhqb2leRFs7W25kOiFaSFF5LD1lRmpvTTpiVm97Sz45OGI0OUAla1IoIilqTj5eRkhtVmguZW4+ZmFdVmFydktGRCpteklUIkIvc2gmdDNeWSxFS2E8KnhEXmFCcklVUk1Y''@;'; put 'put ''PV9rQ3E4ZDB7UjBqUEwhc0FkSlBOajh1QDIhVmVudnpYMiFbSEdEMztON2NjSCpGeGE1I3VsfXEvM1VAVGpNeS5tYmAiX3ooMFJgaCpqfkFuZUldcXRtT214aVsjJk0qPGBrNjtzQW8sfUsyN2NAelRCQiQ6PWp1aywqKmpsdVIyY2cmJCRFLHFFZnIsal5NZUc7NG8zWUQvaGlwLmV+VzlmZSto''@;'; put 'put ''a3FsTGgjZzVEMXFffnVQJm4hKldzUUA4bGAhdmZUYVZfNH44N2liT3d3NF5mLjFmTy5xYVBWY1VnIkBNNmZUenVSTzxFKC8lWj9IKjRYTDJdLiIxcDVba2dwU09tKWZpcHAqdmM4eHEjZ3d2RX5GVDV2MWtMWkFJMHFpIUhnTjE/Q3BJNjR1VXVTaW5ST1kpUDhqXkxzPFtzOW47U0YoZElleFls''@;'; put 'put ''OX4zb1l1K3I5Pz50OixEfH19c0U6QiorODRHRGlkVHwwWCt3NmkhNWo5dkJeLEIrNGE7d2FNLzx+R0kmKX0uX017XW91KGZxby9iMFJxfW1NRHhaMCVlUzJ0eHpsdDtvOyp7JUg9eWBeMzNeTjVKalNmcXteJV0xXntFdll0YzZbYF5hW25oejReOHolJGYjIWMiV0hZWmI1PEdLOyg8cyI5JjBX''@;'; put 'put ''ZilpSSlCc3AiSFhARFJfdHdwb0o4JHFaOjIucGBWTjB5YnZaU3BbeEJBZ1JubDM2eEhlPWVNLyo+I310azhBbF06TE47LFNoIiU8eyhuNGcpdD4+W3k/ZldLKS8+R10+dGw/UEwlKj5QR184KjhfMlcifGMpJkNveztMYjR7QmtLVms6SlJdb2VXLFZwNkZ0KVdOajFLNzVCVihkQVpOQzhwUm43''@;'; put 'put ''R2NFfThHa1g+RyVaMHZ9IVBuPyMlNVFKckw/YTJERHBSd3dEYk1xaCE+SU13aUJiWS44NDFNXih4Mm1SISNjaHhWUT8uSSt1RlVRUT5da3F1RypQOnZwTUFMclYkeW1VYHdtT08jR0h+W257OGd5XSM4VGk7Lj5AdHExelp8WEdwKlJbVnlhRlpAUUg3OFB8VipubSM0JkxmND53cjwsZUMjOCVf''@;'; put 'put ''fHE9OVImYnM7citkXWtGTGdBYFQ7Uk1aQzI7IX1VOEVaR21PPE5fckBpezdYIW5lXSJyJTdtXzBJSUdEPEshYC9vVW02TlhiKjI6L2V0UWNFMyJ+cE8mLmZMZ2UvVztWfmdhW2t8fDlhPn5GaWBHU3IwWEF5N2AiK0VaSmshV0dxMUQ8MXsoWyl4N2xGKVEocFtFJF5kKnwvbzFxN3piTzVHX0tS''@;'; put 'put ''Rj9gaWN+aDd3VVpvM3dLbHBBZyk/SlFCZj05ej54cGYrLGY3OUZyUzBFPFcvfD4xZ0s6Pn58SERnZDokMU43KU1fKW5PRSUhZGNwMShTKFY6a2hPJDB6dS9JUz4sXmtRdTRqVjB6SSNQRDQ+Rk9ASCQkcV0/eFQlemh3dT83d1R5MiNid3t3fCp3e1R4Z1k5Vm1AVi9ETT8iUFo1Vyp8cjBifFZi''@;'; put 'put ''d11CNn1tTnxicCwman10WlVbPVhwelYraz9ifUlFRTdkfkYjQW5sTGZULihET20kNWdlW1dVLzI9dUx5d3BfOCUhV25EPmZXXiZwdS8yY0NOd1dfZmBLJSI7VUdwSD9nTk1SYms5aSVNdFo9Z2sxIURFTCUla1g6a1pHX3ZZTGZOUHp3eUdFZ0BFYWNjPlhSSV1jXzVpeGlKQHBKfj1kMVVITG52''@;'; put 'put ''QE9kKEdVeEMjemY/cVBhVmYkWWVGOVhlIXRCclFyZXkwb2tyWXE2fWNpM2trb35KX0lpeFJ5Oz1NOFFvRiNzLlNmaHM8ODFNbkJzYzkyaXAjI2soZUJfOWFDSihdLm9TWkUudD8wYDcqQFdIQXFZJHdTfSJ3Q1FrNEEuLHZCNHAlaSwmY2FmYGQ0alRVOGoyQU9hPVE6X0RDJmEubUNKXzlZUE9Q''@;'; put 'put ''N1lXLD9jXzVLSlMzezI0THJOZCJNYUx7eDdaJXRTNTZENWQwJnQwZFtkQHR+aFVfalp3XU5PeE1fbiFAN30zYGl8dVZNfHpYLlBCcnhdVz13PmE9ZjM9UWEhXVkyOkddfT87JWJYRTlsIVcwOitXWE0/I2h3P2hmbCZ7LlYzdEklekJTamZkdyhuR2Q8Rj9DVn13aVRdKDtKJUZ0TG5eRGB4eU8/''@;'; put 'put ''aSVEb3hPKW9TR1VPTVd3YTAzJFdvPXl4MyZJZGtzU01XazVENWY7WGNEZV1aIkc8OX52PHA8dHhlJmpEV153eUo0eHgsZ0xHbCp9bCgjZDFyZEZ8ej05U1U6fFMvOyFTeno+R1oyUCpwM347ek9yJnZLbHI4UThTX35EaCR2M2RKe1Q7eH5uTnFxQnIkXilPPHRWX2kkS3tOM3A0JG9IZ2lqZSQj''@;'; put 'put ''QGRFYWZ5Wyx5LGdCeVRfJVtqNWZ+RTdzSTR2ckNZQSVOPV1vUj5PLlQ0L19vZ10sYFEjbUdwPGgwKD9hJj9CYjojJS90JC5IMXlZd1gve3tnclBRMyZtPDdBMj9aciNLfEYjYE9RZVFoZjV3bzwsRHFIfEV6VWtuciJMV202TmUhQGNCemg8UGU2V3Bufik3e1ROSE1CemtiPXJYQHxCWn0jQWRh''@;'; put 'put ''NnlIdTVVKHwyYjc5RH0kcU1MSHdWeTR0Rn5UXV5mMjBxPWhebz5qfkB0eHI+RmtuYmMsUm9wcTp1QGNeeX17cDxmaFg/SXlAalFfInw5a0hmRlB7UW99fHs+TX40MlNqW3wwI2gma0U4YUZYSHRvO1pebmA5RyJSNV1wKl8hfDkuME5iLy87Z0JZYFchYlhyKGcqWGREPlAyYnRveFpLe1dvUGVZ''@;'; put 'put ''ZGE8VTdVRVZTKnBmMFQxcnpZVD0rT346IiVad0RqcTJmIWsqUHBdZ3AwU1tBPm5SXk5GeFM9WVZTKXF2d152an5xeGZpM3g0VE5mVGRwN183LmBHSjJgUTpyLCpQREJkQyRGPko8WmMkclh3bUhPeFI4bkQ9djZ7JEtLQGRnWnBsST1UZkdhKTF5dHJKWF0pdEczfUVfT1p4ZVRDfj03KXFeSGZB''@;'; put 'put ''ZFhlTkZUYnRAfUk/KyU5fXhHTT11VCt7KkRzd1I/NjFiOHg6YE1TN1UwZXRfIUN8UVJYRW1TQmt0Zz1aWnFEX08/R2J0YXxUIXdoNnVSbHQ7cDdfXkB1K0lxdE5mMVpMO1Vmem1aNnAsPzlsVlZbVHRxeXRyOU59cC86UyNEOkRVUnd6ekNgcXljXVo3V1l3WytGPGM0XnZ9JW5OYU9WTiF+TCZN''@;'; put 'put ''aHcoJSJPcU5YUERSPCZOOzVoWThZKGJTVXo5YClRPSwzYCZyV09zJT9IWSpGP0lKc2xrbnBiLFFmNHBpYW5PN3EwJV4vWHBbZChdLElQdD0oPWpKQ11ibU9xVWhnLFBkUk4qQl0hWihYKWldRSkqdSNhKVJ8dCRSNTtYRlhsXUByfU1FbXo9Ky9BJlI2TF49I05NO1RhTTtXKiExPSg0e2QlOmt0''@;'; put 'put ''bF1HdTFidklRNHJNbUV0QkFYQjhQdSovMm80XW8yc3pDYmJHVDQ0SCprT3k0W30vLFFHWFk4WGNHayxuVUgzPW9NMWtseHsrbC48ZDh+QkxmdWUwcXk8WTdpMVFnLiZ6P2IjMClQXSIocFh8U2luTzFpSXp6bkhzb1syJWo5VjNgLF97LC9KV3k5SlpEVEx3VmUwYll5T3VJY3B7dzleT0I8ezcj''@;'; put 'put ''Kl0rJnpQdXlZfDpXLjlaflhMeVBUOHYvYzc+YUJ0elFPVDlNWj4lV04wc2MpZ1RkcWxSIW9QdTlUO3ouVHJrPDd3IWdvPl9Qa2hTaFs1VzQuLkQ1SVM/Xkx6anovbHp8Jl9kaDtLVW5mSDpGWnsyOWl0O1spUU5VSV5uT0A0QjIrP3NWVl8yL0tuRGJRS2FdWnpdTmhjTDVbZCo2Ql1yNk5IP0FL''@;'; put 'put ''eyMiUXdSfTJ4bHV2NzQzdCl0KzVRPyF2Zl58dyFyS3hddUI/Rjk6eWFmSHlbdCxmVll5bihUaFo7LkdOQEIyKlQyVyY0dnZrcz9NaDojTHBkWzUuKldrMj1uKWguR0gzOF55JjkkSmMjTCUvPUtyIksmbk9lRDtpZ09QV2B+ZFhYWUhdVC8mLm0wS2Ftd0szJlBXN056Z31HMXFrZWsiY3o7Rlok''@;'; put 'put ''L3spaDIyQnA9RjRjQnwsXXNqem9MZEFKeldXMkk/cywwJT5eP2RkcHkuKCwoYCEoTyp1bktedGpJYUVAeSRDTVlFVUVRQTpPRX5DTnRCREhWUF5eVTRLOGFedXx8P3BYUzNhc29hTi5AIVRqTHR8Jmcyd0YqNCNBa2NEcWMzSSwxVHk5cDI3S11PUlhKJDZncjZ3Z2pPbSN1MFJOfDtOSnQpQ2RK''@;'; put 'put ''Uy87cXdAUDJpcXtRVUd2d2koTn0iREtIRlhCQUxnPXsxZHs4L25sUH4ue2lpWD46MXdzXm9AUnV0WDZ9U0I+ZWNgIW9QUFBZQTBuXXlRdDdTPiw0dWMlQ08ueUVnUnlkK1ZjRSQqZj93KjghdzI3PmM8P2I9Zz0hI15baEE1SDVzTHl3dXh4QDExTX14cyV4KURBT0pAIiRMRFlvQW51UUx2N2hy''@;'; put 'put ''L1I2VjpGZ0Nfal9hTDt2Z2QjcTVgSCMuSEA+eipyLm5Jb3RaezhoXnV+U2w7X3NxbjMvfnlGLF14e25TKFtwM3YkSW9nT0RbLiJ+WDZRcF85fF0paHI4KTxJWmEoKzRnOGRkdSl6IzRaSjkvWUFpNj8xaWEpKDhjd01VS3trUF5aNUZpKFtebndLKURPKGcmInU/YGJATSMoLixvXzElTUtxXiRC''@;'; put 'put ''TVEibVVMKnVKJmB6ZHN8a35UZkk1RHQlQ3xQO30jUTIlXUFzd3Zqdj1xMj1OfUdsMFg1al07Pjt5ZnwqIU5GYmRPbSxJQUFFSTBCJDRZPE1uXmVATGUpPFB3QzpGO3JRYDAxaWh0fSNOcXZiaVoxL21xcV81T2hQLm9oVVlPRzNidlY4TGRVTSoyMV8mRX5ZZDAxOGpPLzVISCFFTDkkKnlEejVF''@;'; put 'put ''aEBgVDR2TTU3Z14zTXBjUTNmSkpNVyNRaSR2IltCUCJBVlgjKmM7YDpwTlh7ImxqPntCLlpsWmJEcVBHZHooXTM9ITwzdDFiVWFQIilBYEtQcHciNGhASUQiMEdhRXJQdDl8dSojRCgpT0JycHV+JVFjUHtoXmVpTj02ZF5DKiZmVyRIZHNWampOWTpZaUdaLmBXQigrT0UjRG1BNmtQPVdrdWFL''@;'; put 'put ''SUJRRk5yL0I5bi85UD5+RUJAVDo3TFFXfmRVflVLUCp5elZ4djpvTlpJKD1IXyQ0K3xoTy9GUSw9ZWMrdUcweW96fjNQR355aG5BJWchZ2xIeTFFTFNPYyxOa25rZysrXSg0PX1JMH4raUFEczVSQWxrREhGXXo0S0ksdipgcFNVZnR1PUc8PVVeYiZxT3RxfDN4ayhSTUAlSFN+Kk0+a3RPQEZr''@;'; put 'put ''S3ZldFMqeD1oJCoqPmEyPS5dXkZHK2dhMSVmQ28vODQreSwxU1V2bSNEQDpDKl5NVWd5amJfWT1wRj8yImI2RX1veWQ6MyxWSzc2TUVSampWZVNjVE9tXWd5O31gUGc/NCRxRGFHbVpISzFwRitubC9COU5NbCI1W0Z6RVddb21TIj14aVJlZlRZJFM1W30/NSlZbmptc0VlX2R5cnZifUdbOTV6''@;'; put 'put ''Wkt6KTB7JTFVeDMyOGQlVWQ3b1hpXi9eO01ifSRoUXJuc30zQSYjWVosWGxMPl9PfUlmUz8wW2gwQC58K1N4cSM9ekNtT0pRbGl2OCQmM1kqeVUlTE1IJDYuandeL30vSytxMjsjb0RlNXUqayp4RnpOc3R5dyQ7KnRGTCZwRXZ8OSFPYjFJNDlJVC5FclR3c0khRzcpLClDVFlmLiMoeDo2PzFh''@;'; put 'put ''biEqSStOMSZwQUF1bCpMenZ6aWhpQVFVYWFOPm1eIzN8KHNXNXxMRlVMdCJ5ZmRzbTF9P1UsciteVGhydSxtWilDLCJze1cjPyshQ2ZqL2kjfG56b1Q0OXdJdygqaTp0b21YL285U0gmfGBhfEJVbWFlI2xXOm45enZYR2pYUFdYcm9eUVRMZTshOjlsREh3TjVYbmlCOVU1Qm83Sk59WWVOOlZh''@;'; put 'put ''Kls4VDcsb0xGZ2NRdncybykyLmEvVFRjRmJtOnA0TEIpWF5DcCpiMGkhNCVrMXB0P0ZvM3cpIk8lMmErT2JPbmt5JWlVUFhZflddX0lPQTJ0dGpaXXxmP3FZIilxX05veEZ3PW1ROThRJlNlakc4MT5Ndz9iWndtP1MwI1p6blBvbmNuXypMS093YmZ2YHQ5KkhWfDV9MT5uaEU1cmtoe0YjWFQ4''@;'; put 'put ''b1peNVt9PGJIZCQ9Pzt6Smx+MFBNbld7TF1rKTZOOTdeKjVKM0YkOiVpZ0FlRV8pPzRidG9eK2tweypdUXxxJVRZT2k1RXl4U0UwdmdCQEMpSz0mP0pEc3N+KE9fVFlAdWJlcl4qMUJmRDNnUVRsSCFtanNsJWt5WnJWanBdQjQwSTl7dmh9RmJPb35kPlF6L1FPfCVqZ3lpOz5+czRgVWFQellS''@;'; put 'put ''c3FxYGZMVlRHdnE8VWUycVdGeFJqZzhsZFB8WiNaL1pGVUg/QUAsaURMXi4kZ1FLbXBsZkRiJVpfNnxVLm91aEgmOXZUd3ZaP0pkZ3EkMnRvOnAkeEM/aVJ0Zj0ucUEoaU1hfjlNJlgscEZ0QEkjNyVHSD9OMXoiJEVyX3o4RT4vNV5+VjVgNHYhLGY2I1JKd2VAJVhxZnZ0dCgjLHZBLGZNc2ZW''@;'; put 'put ''QSx5b19iPD1xP35ZaSp3Q0RQQHc1djZ5b3x0dyZ4b0dhISZrbWRYV1RCY1tscCFkcDtYUm9tPE9uJjJiPSlYSjYwKHR5RUVtI3JAYEJyUC9LeUx4UiozSWA6Zy8rXShyVX5RSDxJMHhyeGtbakEiaCtlZHNUfCIxQ3xZN1Fhe1hXJUg5KCs8IUt4bkUrXkg5fGEmdDQ3ZGJaPFBVRVZncFtufFsx''@;'; put 'put ''fT9ZWGp1ayFfPiR0P2lfNmAmVyNmRm1JQ2F0XzZWeTwvPmt+WUpQZyxUKkVobnZUVF1bdmpkQDU+bEx8Y3kmU2ZhO3wubC4jJWdnJnNOIn5FVC9ub3hSaVEhSEt0SS81JVJEXnxMUmFreGFCQjtxLzp1ISQpL2NvcHpEZDI5KS9Ue0M3aTw5YSkxTF0/Lzh2S0RPdnkvNm4pWT5ITE9vXTYiUCM1''@;'; put 'put ''WD5OOCovdDFNJTx+K1N6U0hzKCk+YWlZd0pAR101MixjQ1okZyJSeCV4THdgKlZ5cVBfOXpzZTI+bHQhaHh6cDJsKjh1enlfL1hBaDQsKGByNzRMN15pYiNqbEw+UCorMWk6RjRiL01TYFJJbit5UjxHRnV2OlZGQzw2eyphMEI/VFU3NiRyKzBxPG5vODJFMDlGSWQjMUQ9LChFaFE7TjksW1ZW''@;'; put 'put ''JUh2K3dZdVtUSG4uNyY7THckZmdUOjspVTtJaE9vP0RfdCpldTtuRikjTXddNjN8cm4jeXVxIyYoekdhREo9OUtpR3tZIyMkXUlZMiIpTG1jVEhdZmx9YUVmfXhlMz49PitYO2xBemptUS5iVThYSS5HSUVBOTEwKjY0YWYwRClbRl84JUsoRFZ7RFJ4TiI0O19Hcjo9Nm0pdGpASiExaDtXeixQ''@;'; put 'put ''e2s9XiVEd0pJRjNGIj08fXFsZ1ZyUjxQYiJ3diw7LHAyN2krM0k2bVJGb2tmdz87UEo7d09GJCo/QTx6KHwqRU9jb2Q2LHV4cjA+SW1yMU9VVHI2RF9rVSt3eUF6WVVybnROLDdZXX0/U3d7cWZ6R1BTWVd1PXpMYmAlVkRuNFJ0Z1lDYUwxTXVFKWZ9e0RINz0kYDNvUyJONDJfMDxCKnVIfnRq''@;'; put 'put ''bzs5MmdFI1ZUKTFXVHBXMkF6X0dDVWMyNTNJa1IyQWVkI0h9MX16VDF2T2leWnNhczpYNyokXkFVTSpSXn5iW115WDUqPih3ZSVtOUdva3FreVZfNkpGZH4pOzMudzJdIlVMXSJvMCo9T0R1UVR+S1UpOVJ2a1JVU01yRzB8I2phKmgxR2E0QVpAcV9VIiVAaik0OUR5Y2oxTzRDYFhGcGspZFl5''@;'; put 'put ''TWl4WzorV2kycSpTOChQcmQvOXF7aFpmOUp9JVNKXUBCeGZjKiFeI3hVZCMsZ0c1d2ZbO2plQ11rUksmfS5CWG0lbW1sPWV4aTQqUnp8S3lHPlRPWl4yRCFjaFZVVjp+dGszXiM1NmtDS3c5UF5Db2hQLCwxW2FxVXpAb3E5SkA5YkojZG9+KyJmenlxam1WJU5YTkxsS05fbTM+QFhCNDhlbHko''@;'; put 'put ''TzFBSHk5RWFpaiJuQXxlaG4zOGF5dXk7dFBjXzVobDR0QEpJJlZlTT45QkZ6WFJPMzkpRnYuPjgjYV8lPEc5UCpYUVQxPjlUViw3IyYwZzM2LzJ6TzFtJnojWEApe1Bab0U/Qj1MeVZXfSx9O2xmPzJmLHJJaGByd0BoUF9RcV9BYkpyR09YXjVXfmskd3pMdl9uRG12NipDSz5WVGordGRJM1t6''@;'; put 'put ''cmV5NU15aTRoOmZpM0dlQ3dpeC9fKmRgRVA2b3VRaVBfJXkrM0wmIldDKURqS180Ul91TGw6PHgjQiZjRlMxW3dbW1lKPVA0Pnd6cypRVTw0MGt0TV5Sb2N5UCQ4Y1k8K2BtLE1AaCE1KmBbXlo2PSsqdiIsSEZ5VWp1R3o0S25rVl97WGVfVUU4dVtafTlaRV9ZRjVHb3R8VCJWc11IbCZgWDpe''@;'; put 'put ''WStYSy9uO0J6SUssR3Z3KztLT25YSFB0O0NwLnxDUWRoe1khZzUwejN7Sys3UHU1VjsxdUhqZCNhRSwuL3N6elE3PCp3XVFVOXxuWW9bdUg3L0VCM0NdImQ2L29nM0RSd3dtMXdjKHB7NHVWMjg2Im00Y3spTGcuSVAwRUZYfClAb3hVKXNzR0BqeHdYbHZQSDJuISo4PDopTXN4QX5idClPVm5e''@;'; put 'put ''W1VtY2N+PG5uPXh0Xyg+ISR3ckA+VSVxSGt5SzQoUyYxdm1YJi57enMqdXAlPSteT1E8Wj1LdVAwUSgsYCRBI3xbQEJ8RSxuNF5NUSYkOzl2WWhnajhkX0Z6dHkwbjBdbGEkQERFPF43PEt5X3l9N34pMERIa1J5ZCs+LHtTTW46eih8SD4wdXU+YF5VaFIodVdNbmUhKTxoYChyY1tiUiVVYi5R''@;'; put 'put ''IyoyOy8zajV8IWBEUXchVFgvSmM+QGFuamxOKFZDXUgkV2BbeWZGKmA+XSE8UjVeTWxLLCl4RGNvcE0/T0Jhdl0ud3lEaUtIQlpaW0YqVDQkWDtSP0tkR1o5VURMfUM3UlcjUGZkdTN9XX5mIndfVDlBYGAze0I9RGRzditqVXdyIVVkQEIsek1lRSx7aVdgekpleHI2Yzo7VjZXOVFJLkZtTjk0''@;'; put 'put ''Y1l7NEVnNylPJFlYXixFfE05MUlkbjUmTGR6bGI1IUN2fnA7KUVray9CXUxgOjhHSCYlcDFkNF0yNlNrdXZJV1V7RHgzfD92O3ArTmZwSVtzQT1HKn5HN0J0fkVxT3YuZEltbz1XPCo/OGY0cEQzNmhyY3hhcG5BSGZSTXNlPWkwJn4waFhNLl5JSV0lfGIuVjI+P280fDlEbnAuXWg2T0oofUhd''@;'; put 'put ''Q3k+JCw9TiU6KjMpQVsxMWNEcSNwPygpP3EhIUV3OChObiJGV1BWWTQqK3FeR3VraSYmUEd9JUZVUTZKLzc1aTcjRHJmaTxUJjYhdEdabSkxRXk/VmYsKUAybiRRJXgvfiN+WClzPTtySXJTfSNyW2wpVFlYLDZqSUZCNm1LcVtYdSI+X3JRTyYoPUBBO1BzPWBWNiZCT1FEeTkkRTA8MDU1Mzk/''@;'; put 'put ''YlgxQDBSOi4jL3xga2A4bFU+NSExYVhMQkxZRkReSlpoUFg/VXdHUVZoOz5FO0BARDgwalk9eUgmcWosdFA/OzVXSFFIfD54NlErP2g3TTxDSkxTQHw1fiVRen0/dzNHKF07R0wzdjdpRFdQend5SzNlKG1rNnBVOFNmUV0xaG9hP3F8QGV8I3p0R0JRKVZWMVhrQVVQWHg2Sm0xSmBTN0BkMikr''@;'; put 'put ''bFUhOGApSUdXYFBofk0/MVl3XVZ3ekRBKEJQMEYoY0NfaWRfU1EleC43RXpgJkgyKy9vcGcuQj8kSStEYjNoM052P3gub2lNWGc8LyYxU09PKGMjbGpvflBXQV8wMkR3Z0l7dyx5anYkISFUYzUoREUrPyRvN2lNK0tCZE51e2hRLj9uVGspX0FoSSlLZUJzPnJCMnZTSmJnSDFhJmk4djVGcTY2''@;'; put 'put ''KllscEsjU2BiKnc4TWlsM25hZ2p3KSZAQmRhSHVhLlVHKCQyWCNobHQ9OGwjblM3Um1IMyNBQUtsdWZPdHY/MyxaVDAmek5dQiFDJE1HTGAqOTcvJVo8JHFgNXhvSlV2T1ZlQjxFMDN7JC54Vj4vSWwhXzspRDJyVk5EK3cyVzdKb1M0UmMuM3l7UTREMUd1bERyL35pLyhtNUc4XS4hPVBXKz8p''@;'; put 'put ''Yj5ZZWd1Ik10fVl1cExGZDhbIj5vST88QS5xSGhkXzZKK0FOYixDMnc/d3lCUXQwZWcwSX5wSjZNPSNYa2AoPnU0YnxifGFCfFc/RCNeWjBePmg5UEpNTztHLiNHKm0qVEd8VGdqXylDMUQpUnsiSCYhMFRJQXx3d2lqd18/dipUeUlVQE81Nj91MDk8ZGhnPmVKRSIxTGsxaj9gMV5We2VAWlds''@;'; put 'put ''fnN1RU5ZWnJ3TyFhPWFCdEJFOlJULC4pcCNLYExQYmlnYWk8RjV6PVIwamtLWTRAS2NsI0I/VGwwPyVUdDxtYz1eI317cFtuK3o2L3JhRyo0MXNgcFRhOkRYczhQPWBSI3NKRVhrKXBCIjchMEdxT2ljdk4qT0U3ZUAkNXo/PjFXIi97fCltfTtwJT1ZfTZAYSVVUC8iZVVVVTdsKTA8SCFWRjo6''@;'; put 'put ''OUAuZzFLdEgvPFlWQH5NZytTLlVvb256fE5fT2VNPXlIaTM6dFh1UTV3ND5gTk14JWYxc30+c29kbE1Eb3tJbHlaMW54X1pXZjR6KCJjMFM3al85TyUjd0o8SmBTMmlKa0p6c0NHJCZJcEtNY2NaS0RidzBDNiNNZU4yOHB+Tk5CdW1nfFlWPypEKDQybTA9eiU2WG5eIT48UEp3N2VqJGt9Pitk''@;'; put 'put ''d3YvYit7MFV9Tk96ZilkXj8mSnw6NCp2ZjtZZ3U7LGpMTTFwcGI1VyFaP1dIQV5ySnZMK1R5QjghM3IjZnswayltSUd3Z09LN3h8IlN1KF4zKUxJfUVKRnIrZXoxNlJSPzlEeVJXWD95X0VdZC9qOlJZbVJ6a1F6M3o9fmphLChFVERzbGxdKlNJUShbfVhPYml1Vj55NDVLQVlGeW08c3E8WHZE''@;'; put 'put ''O2pbWjY8cD1xQ00/a3BfZitsYlNfXWpKWD9uJTBtb0dJJUgjZTRBJEMsKnlUWWdXY1ZGK3ZZRUNbS2Zqe2J6KiYyLDxwOW1KZl89PH1MPlM+UE1WSXZPenNLPiM3OTRlZ1o6OjElJihEMTlGQ259JHQyYn0kUShwMClwWTNgbG4sfTswN3JIaSF7SnJlQFQpI0AqIjU4Y0x8WCkpTUtqWGU8OTxZ''@;'; put 'put ''e1B7ajBTeSphRTczMjh8bGFhOVtJcXdZaGJSUFMzVjlRRHZFfTs6IXpreU4kbDYqUX1EVGhkcD07WkY4NDw1XztaVU1RaSgoU1ZKYn1BYDZCbXQlLnF4NVMxeyM1QCRTaVclQn1RSj5nTn1MNVAjNjJeQjVSent+Vkc8O1hZZFYkOzBnXkE9UnpgTEU3N2t5WnR2YzI1LkBHUDUuY3lmXVhVVl1s''@;'; put 'put ''WGRlKmdWNCk3ZTUqZnlXSXc0aSp1MnJQcDxxJnhZTkl9Qy8pXTR6dS8rfWlJQCxlUCVqIjgvZyxKMCNqWUZFM1Epd2U1cTRrTkxDSkY0RCtVN2FFckR8V0JUS21qbip6VVZhZlYyP313UiZAPGY+QihOSXxsaV5ra0hsPCg/NXZ3VGY2Sy9bZGEsRHF2UXxzb2FtKFAicHNIVUsvLHZ9UCxjMkUq''@;'; put 'put ''ZTpGcyRUMmF9QC9XNkhddU96dUROX1ZvUVV9LlF4WiopR1g7IyU6e0w7V0J5RyR7c244KlBWMHN6PzUuOEMoPCpfaXk+YnI5VWg9JDgqM0p9YGdZQlBnVSV8OEcjT0s2SihpKlk4XTolU1ZyREJ8YixDQ3prZjNjOHJJRj8mM2h1cVQqIS5AeVtKZDNpQDRpPyE9KVhRRjhPUk9KXX40c0hQTzxL''@;'; put 'put ''e0tsbTpRQ3d7YVtdakNpek1TcVU9V140b18pRSUmODVzbEA0WU1VRCl1clpENCp5dFE6YnBdKj9CUUBzeVdtPWJDUVJ8Rzx9PG5hRDJJenUwSiMsSkdlME8ySj1LPC4+aV5qTG5MSlcuRHZMXnl4R09CRFZXdERrTFhZR2R+dzxEJWlaQStUeF8raEd7KjVgbk1SOy42SihzazJjRCw6ZS98akE5''@;'; put 'put ''ZipgclNlUUx+ZDtzIVU3RjIiVCV+UjNTSWgiK3JdYS5BL0JReyQoVE40LG9kOG1xTD1KP3p2Mn4uJS51NSl4eHNTX2IqYzFrMn5VLDt0LH5bR11HT3ZpZXVVSHRFRDgzJFkoJSxkZGh4eCtYSyFYVSFrQHV2JWZUQFl2Mk9Zb09TVi5oOjtda1NaKU0lP1J3R3I7O30rMnUleV5ZWH4vRD54PS4s''@;'; put 'put ''ZTh6YU5VTll6OXNQVV9gOUxpRzFZY0VFOjdXS0N9dSkuKWc1akNkcVN9TGtNOzg4LnB3S3YsVHw8cyxiOG8uR3V7cWBsSTssQT48V1ZYU19zJHlkVH4wXTMuW2lXRk8hVWdOS21ieDshNnpOPEBxZklAW2NAYmFyYyNMdzJrJmpDNmVmbDY/KXcoYTdaeTcsKXRXa2dRVCt7WikmT01BWVdIZCF8''@;'; put 'put ''STouY2dzUCkjdGZnMExWWXVofV8yU2tvKUtRXUc1PUN6dFdJKGpQMWtIOSQrPXp7Z00pRH5OfjxEU3AhI2FMUXI8NmNhKTwyTDAuYkN8VUdgVXQxXyxnaUh9ODpGKitTdSZYbkU4PillPV4uVkgvKVR+PkZIeD1sYlBQZUVmdXk5KTJBfC9lekMkNGBiKVhqKDtlJExrWG9zZlRAUFMrU2xQQyFK''@;'; put 'put ''fVY2MjY8M0NwdTB3MiY5XUZ8TVJyYmRoIVR0M2tNfmAyfTNgcWtlNmp2aFE5YURxeWo8c1ByPUxTRl80ImdGO1c9XU1pRDNqMHlpcUtzOC4xMkRoSnF2VU84byNiUGdscE5eVXxzPDIoKlhYdmhrT3pyJnc4Z1BjT0JCXTh1VEZSdnEmXjs8bGIzV2klOWtnIlNQLC8kbyZAWkozYUcpel0rMkV9''@;'; put 'put ''LnsrTVpSYWR2W3Q+SUhyLkxpc1BDcWVaTHthQXAyS3xfTXouVUFjPzAkfUlIZS5hOk5qTn0pJF9KJHV3ciRjU1hxLmgqPEJTRlA3PTU4YGJGJismU2AzUm5Xe29tWjZKYCxqRUk+XU9nel4kYz9ldUNqRyk+d2B8eSYhfGQ6bXN4LFR4VWs+fGIvNSRwZWl9Z1pdV2p5fmtqT0U5dkBSXiorUGVL''@;'; put 'put ''cXpWbFdULGAsfFQjRmt1V1NHIi82b2lDLH58WUJiL1MvTW1FfUYxZnBvXUpuKF1QIzwkJDFwNy9tTk99c0tWW2w2M29mJnVvKFh5aVJtZENmcWI1W2JFSFRafmBqL1lzWXJKWzhVUm51PVQlbSh5PHtfckV5Xmo0Rip3a2x4VGEwfSI6W0JzWT90WF09LHdMdSQkdTR6RGNbNjVkNF5ZeVpfMj9N''@;'; put 'put ''czUxcz5acHcwPWJwRj0jKHdkY0l6djU+Z3N+Ul4xOU5iTUdTaXx0TTJVPyJBYy9nbVttUGx7cmEpMHheKyIpUWdIRD1gaFE3d0orXUc1ekBAP2kyW2p7a2h9Lkk5X1o2VVJfTVcxSyZjMVdOSi4oeXZ5elZsP0NdPWRMdWlqS0EjbVt0PFAxKl1JPyR1PE8+dlMhaEtyTHFUWDFPSk5vd1FfdktQ''@;'; put 'put ''Izwkd359dntXMixpMn51ZGFuNnxyaSJJZnVGb31NRnFhXkN8S2R6ci56K1EvNi5OZEc0R2p3dTszSDVeWDssVkBvKEZaI1pTVF9udlU/Mz0oLn48MitrSz1RKVJfYCE1K2RHQyldckRUaFtGXnsjaiJSYmYyWmNecj1jaXJzSXhzbGZEOG52I1h3JEZ+NkQsLFM0cUxpN1h1aT4lWGFEPXh6KVlo''@;'; put 'put ''MDUybzZDWTlzOmtBWX1qUitTflpwWFVFT1EiUyR5RyloZmhSbGEvYzQ7NmZGLyRCbHcjazxdVExQNGNNUC9FZ0hwMTNDI0YvWy82XWhzX2NmZXssdWp5aXlUKzg8IVFyaXpOT2Y8eDNYSnFXZEhkeF4mLyloOnBHZ3d4OmQ3VnJqeXNiQ1BddjVAdklNemJHXTtiKjBfYE19T0R7fl43ZHI8YUxH''@;'; put 'put ''M2coPFcjKyR1MSt3eHRmNyNJOm19RD4+dllQUW5Pe352TWxkO288OXJrVUtOTVUhUjdbY2I2LH5VezZ7VTtyXSo1dDV5MTg6KVsqYzxMRS9vPmp1WlZXfWNzLixaRlh2KFg7LF8jc0YlLzR0c0k0R1hhVWdPLkl3PnBIZz80M1BXR2g4VkZyIzRiL2RNNn4hOHx4dzNiWTB7Oi9LTDV0VzJCSj90''@;'; put 'put ''Mi54I1E9RWhxe14kayQkYUZBe0BGdFFCS0VxU3JGUUdHPChge19VNFhdTVdPPylJLz9KTD4/eCtrXV0xRVBWMjp5Nnp0dGg5fSMrNDtNaSpJbFQ3aTIwOCZEY0osRWoqPzw2YT9SXVYudmdka1o2SkQqW1VbNVt+fik4VypCW3JVeXR3R19PfTMoMF0yeGAwNGlCMUBSTEZuOFE+Z0ozVUp2Ni9e''@;'; put 'put ''SyMkVyJOYF5Vb14qXWdlallOXytjdlgha3BNMXolY1ZALGZYUVtDPHFURmU7Xmk/OkhhUWY0bVIoSEFAZFpUPkg8P2QkMSE0XmVjb2hxOSh3aHdIUCk9O2g6IltqN0AuWW5YMiFyLlY7a24oKWk5b1Z+a1M6L0o6ITtpWTFGdzRAQW86VzF2Rm0iYER6NFFTSSF7IVRLfDV6MnpMMjZPPn0vbjJG''@;'; put 'put ''WyRKI3Z8KloxTVNURGNCaHEqU3tFQS5ZaHM/L213SGF8P25BfVBUfSp6VXNOXnZFeWdObUBlKWFsTTlsKyg3JFtjdlp6UUAkJnZ6XiRYWF5UZFcsejdRbGJSSiJ8T1NEIS8kI1EwMnEoSldkbkh7PlVsbXJQQTBbeDlhUnYjRiFOT0NSXlJXMmp7ODp8PHIpbjlZdVhtZVY2WkxbR3I8YipPPWYo''@;'; put 'put ''PjkwMDZTX2NbcFJeUjR9bG8mN0skWl5oIkhTWzhZd2M6XTE4Zzc6RypVL0Q8Rik6biokJiUkOkV7RT80JTcoRmhnTXF6YC4+NTNZMTZ4bF9hY0FHZXV9MDVkenBJcFpkeTBEXiVMbD86SXFXME5ISilQUjtPKmF+ZDcwcj89fitlbD1DOEgzKHBKU0xaK1MsdTZkZlUlKGp+QDlYWn4xYmc+bFlM''@;'; put 'put ''Nig/eiVQd2hebnswQUN9cz9JcEglQ29aOjFMazJUZyZkSX4/NFJPOTRNTiNqOTE5WCVPNVJWR1p4V0V2cHgjPlNzbyZLYllYP2BOW0I7ISVkcUUyZ0pVREBRbF97aFZJdypdQTFFZjU8fG9makRjPyxyNmE1bjs2bGQpMGtTV092eT44WGNVSDRHVTQ0K1pWaUlYcCI7P2wwPUh9RkAuSEwzMGB3''@;'; put 'put ''fk88VXJ2RH1gM25sSVVdWS4+bzNZZ0s6bXEjLE50ek4rQFt4QG9uZkZoL3lyI30iJTU5M0kwcSFESGo8YGYzMlc0KSpEc2pyWEN+T2xiZz1CayxmPnN7SWFdIXpIdlB8YG5NP3tTdlM2c1pHMjhLNig4ez08ZmQwYCFobF1FT1Z+I0lwRCNmSHJjYHUmYCZma29KMV9CJGZyLG4zRCk/I0NYa2J8''@;'; put 'put ''KmV4JTR4TFJQQUV2Y3luVytAPHM7SDdFPk4lKlk4OFB6QG9QS0U8SUNmPXU3bCxTcml+JStDNl4lPiY5ZztNfmN1PUtVXnQidVE3SV9tcjQyJmc3O2s2RXo7aEc8Ym9vM09lMHw0REBsUW00ZHhVX0ZYbXskYzF0RF1ZI1tJeTVxZFpWYX5gPUo3M2tafnQ2T3slMyxjayhJMVVlaXpAJHQ4fDA4''@;'; put 'put ''aHZnOkN0WUR+dWk+aXJrNyU/X2pdOH4peykiVWFIaFdlTnt2d11sbTVMOE5KOCEmKXUpVihKOXB5L0ZocF5yM3FNKm1meGVhI1U9a2czNl1VUl1KV2JKQiF+V0NBYEU8Yl98XVUvU1J2THBENTFFUndPNW8pO2gmXjpdL0VmNGVNYTJyM1J6ImlDSSRzSyUrR3M2L2hqcTIxXnZ4YV90ckpHcyRT''@;'; put 'put ''T1JAOVVvdVlxYXZFR3tgdkAsK20hMXssYyp+e15iNGlXeD8kPGN8OVp2Ji89I3N9NlUhYUNHXzgmMno0IWc5US90ZDJwYUYyYmwwMnloYEM2Z20yQ09sRn0oNS5xO115NEg6UCpbRF9fbFVuVUBOXTBLZkVuSXdkZnwrZmx6PEJsRnhlamNIPHMualAjYEVZdlArbCI4S28qNSsoS3dVVDZLYGEh''@;'; put 'put ''VVBQb0ZOZ01dQjJKKD8wRiMreC8ueCpDe1ppJl4xMkVNN0d4ZC5dQzVUOjU3SFg5ZnhaX1FmT1o6IlREREgqXk9PZDc4ZmFtZFFjNGAvU1pBKUBzaVNmP3Ipc1h7fEwmIkBtYXlqQzJzQGFwPFh+PDhUdWYpenpFLDMmVCFtak1me35JdC4jZnxVWndoKD1qOiRiZ2ciN3V+M0w+e3RsengxYGZb''@;'; put 'put ''T3NpLGo+dV5XKk5IK3UxQmpudWoqQVR0YzFAKzZOeT5bUStpRUdDLkdJeld8YkNwdFRMbC45RzsoZiIlb3UwUXd8ey53SVl+QWAjfFdqPVB1OFQ9JCRqQjtYUzhdfXxlZD53O2JyTz0qQ2c7RXxxZDRqR0xASSF0NlZLJU5nKUlWMiNNTWN6bSYkekcqRX50bVFtWmJeL08sQ0tvayJmKHNxQVN+''@;'; put 'put ''e0V3XXZPZDltYmJIXWNNZ2I2Tm0vUzMhSmh4Pl07T21mL3Y6Oy9Re30mMGlRZXUxc0A7QGVkPyt1c1ReWmpBTS5YNjB4X0BUTG9dXVNJUEVbQyVDbDZTNEheL2FHYyFVPGE/JH05T0pvOVgkQVRnT196JiUvZk00SDNQaE4vRm41RitOXiZxQ09HTkcmSV9Iey5oODkrUiR7LDBAMF9wI1poWG50''@;'; put 'put ''MSJVcy80Rz1qaWtqJURhYDNYNGFkaUw7ZWNHb0cvLjwrSEcjaylaQyt3Ukg8VkZaVGdBW0NHdWgqYFVHPVpPfTQ1Q3lqPzRAe2BCRVp9aCRwZEZ8bDM3YEtUZUddL2g/MGhNYV1DR25bez07RiJaN0BXdDNpPEooJF0xXm9rRC9vNC9DeWxmfj1VVUkzNTAzNjpwY11sSmcjK01rMGthLHpPPzFS''@;'; put 'put ''bFM3bGJ6N0gweF09SzZVVXFoamhLPUNMWSgmUmt5ezd7OFtqT3hdNl85TnpZNVNDS2pURnc+bntJSzxyXWswTFNORGlPTjtYPUZ5cFNEWGUuRSsufDciO251ZH19QUpbNVdzKlV2bFhRVihadD9oe3YwKjpvRXI/Jn12bWI7I0tDflYwRXteWzFAd2lHJGhSd1R9ZTZeRGRRM00ifTF1elc4KHZ0''@;'; put 'put ''JmpIKj5pXkxpflljTjosI2VLfURZVCw9T2QsJXgoIUVNUEV5TCZtMEpdMlVifTJARSRoWXs5QlklQC5OdFp0JSpzcDsyeWMjOWpMPlphUjw0SDpJRFMuNH1oXzd2N0BUR0dSRGpLdSR4LF9ZIyleJGpmdCNjaEN2TGBJXnUjTHh7PEtadjlpQk1YbWJpfUNJeVBiOHZ7fFpNMkhnKF8/a2JEXyVw''@;'; put 'put ''fSMlXjN9ej8qNHhzP1J7MmE1NCg8Q3laKn42JHI1NUNGaCY9R3pefXFuSXVKLF5NSWpnQmBFOEY5dkoyQSZ4KyhdblFKaCZ2K3dKQW1XIyFQQ348O0VNTTpRNStYbUE6PEhMWSoocih1VC9oUmo0U0x2dmN6PztgUU9tVEdyeHVsRXFJXSlIYXIvSS4oLEViKCZmQiNJdz0/Nl8yQllebFY2QXJa''@;'; put 'put ''RmskTlQ1ZFYobm5vZjBYWXZbdHJNQmpIYThGYHYwUkM6XyVgZl50ZyM6R3lwOzp6SS46dGE+MWcwXnVzVWYmN1l8QlVOOkMkM30pL0Z9M1YzN3IjUk94TGx5UTlMLCReaEtLTVFAPT4zSD9oQj5XX1spbkppY1NkZTdkaCNUOCN5YiJ2fCIsOWlNWWNfOSJpZWRKJlA6OjI8ODliPDgwSj5gSS5j''@;'; put 'put ''fiN7b0JwOXVXaXwzcX0iRCE9QGo/V3dOYkRqPXouTD5TUGJyaEk3bXojKD1YUlE4cUNndz5TcXJfezYxOnYyNjx7bTRLbiVDaywkIWpJPGoke1hpRTZmdk51Ky9rbj0vM3pwNThzNTpkKW9qZUdCOW9TY0VdRHIjPGU4WCVZVSZ3M2MlemBFMFcyaXcqVGJ0UFJzTGElSD5NKDFjP2B1I1FUPk1T''@;'; put 'put ''SjhEQn17b2Z5TVZlI2RlV05uU0tlekhGSzBnUDw5WEwqei52UkJ5czU6WzU7SGBuaV1oJGA1OHYmTX18VVZARmZvaHxERn1lUEtiSlVHXlIiMzEsOCk/Kil4fGdIKTVXazYiWnErcTo6RTs4Zzx4P0prbFF6YVd7bG4jVUBub1JXOnpkY1AhVFlyPnx6YnN9Z0t3SVNVMlEkaSZYVT48IStGbDA7''@;'; put 'put ''V1owQG03eGc/NjA1NXd3IWM7U1VHXV5nISw9dX5rPV1mYTtELmFmUy98KkVVSWNablhaKHkhR0swNzgufCFVRz85Qm0jdFhifj1eWTVxeUIjX2xDPUYiUl8xUWouL05+Png9a3o7dj4vJmBDNU1RM1dhYGwlRlhnd3NueissJm16OXhFe0I7JFUjJSpsIzN0c0FdR0w7ZVJAUW02Rik/cENHVjR9''@;'; put 'put ''NVFOST5dVzNibnc6T1t1UzF2aXlaNktaVkxmbWRAV141V0pqKiUpLHJodGtFWjUze3sqJGZVPVo3aTU/azc6bFNBfEdMcj97VDIzd2ZHc2RAP3I9IzBXfEJAMzBDa0RJejNEU0h3RDRGe3FxPW55UmI9P1khYyN8cH5hVj5hRGwjMjVSamxUQ0lGeld6b0AzblosUXU7OU1qfl94LjN7M3MrY3FA''@;'; put 'put ''NiFJbkhrY2JYbTVMQDljfihHWnc3IX5+Y29+SXYhPzFPVDlxYV4kTnNfdVc4NUZgTlIqZj1jYGcme0J5RzRUJncjIUVRUTpmfmVmZys8cV1QU2UpOU9lQitMQXQpdVckRX5TfmQ0Ni8hRzJBRXo/LEVhOlc6Mn1DdkNnZ2txJll6an40YnxkSH14Lzo/XkMubS5LdVYlbWFGWnhgXkxNMGVhYWRp''@;'; put 'put ''JlckbE4oJlp2SURTXlt8N1JFOCorfkY6Vlk3Qk5KKGQlS3wmWFM+NnssVSNFSF9QQEVyUCR7WmNOYjlBUmw4PHFAIThzNVg1K3g0TFVOdW5jY2A2MXFUdzokRmtgRkYmdVBGPzoqRWVLNzJwJGt7b2dDJW8yLnNUKk4ldHNbaiFefnJRfmxHfTA9V0FyNWw3NzVxfSslQiM1O1ZuTC55a0JhNVJy''@;'; put 'put ''IXd1IUlhcyMzUkoyOUQ5aVUsS21QPFgqY0sla14wSD5BOTg/cS5daFpGV05iP0J+JjJrdXZqYFBvRGRzMiloX3UvUUwjZl9dKDhEKFVfTlEuJG8/e2FBZVcreVN3RSlyOio1UTxaVzxlU052Q2VxIUZNcE1jJm5JPGMpMGEoXVB6RDhDI0d2e19OPXAhaS46NnBIZFl1ZnR3UkN4R0QpOmZedlE9''@;'; put 'put ''YTU0dylOQzFgW15LTk1POEt7RVM3azhlcSJ4ek8xOW88Vkl4K2NLYGB6QyRhM0pPbiM8SE08JSpCQll0REdIQCh1MCg8cGJaYmd5Qk5uJHsrKnRnd0p6cyM8aXptRVgpP2xMSGNQSE5fRk9eSUx3WV45Y35VVWg5X30rTyROfHJEbipSZGM0bSVmbWkrbFB1PnEze2tVWGguUzJRXyReSGFHUjtN''@;'; put 'put ''P2NTVTRQfEc7XlswNztMbUhaOmlJTjBnYXlxYnklZStCckFzcnIzVCwsI3F1d21OQitPZk9xa0VKLiYubnNTUGl2WkVnRUFgM2REWClYcShYZXVVOTY/LjlfUls0WF1vJEE9W1NCPVY8cU9UQHcuXUNhMVZJYldaKHxbJkRlIS8wPjl9YiRQODpWUSpNWmk8XmUuUzpoL1k9bjE+OSojUS54QkBl''@;'; put 'put ''W1tXQVhFMFR2c35CN1MudDFiJH1iQHtCQlI2W1lKOCswaUcrMiU4UkIxaXEqd2JWRzUsVWJZTWt7NWslcm9uezhLOXB0QUJIdjNoYTx2bUNlJk0sYCo9a3gvRk4pO00uW1VyOWJEbGlden0yWklaL15+aD1FRTBVVHw3KXQ/SG94ISNTUlFDWV9Da352THkibl80PTdnP0ZCRFtReStWN0k+N04q''@;'; put 'put ''cWI+R0R3IjI+Pz56TTRRTUMybVZmVF4qbERlI3E9NDFzWVFlW0pOKWdQU0l8TUlnRUA/Iio8TTBzWyV7eSgpdyRNWzI5PXt8Qm9nOXpYNkN9Y100ZkhmODwjaGR5dz8sKVlIX09YS2ZMeG9ZbktmTFVGSD1URnZCfjQhdkc/O1B1bnkpQ01jRyVWK24jNH00N3UoT29+SnhuW0Qja3ZzMmYmZEgm''@;'; put 'put ''ZDdCdFMkLjErb1Ukekh5Vzk9KE9FYXcic0NHaE5uckVLYnVgOEI/Nnx2Uj1kM1NGMHlCUU9oRHlKZ15ARF5mLj5MKVR1L0FoT1dpLkgjeU9ZcTp4SWZwOExeJVVhOX5vIipVT3hDaGl+MyZGPXY3TzRaRU44bG9gLEZ5K3x6bFE+Wn5na2EvJlFJQyxMb2g/d3doI04yKUpfUzEwN2slZWRCT3NQ''@;'; put 'put ''S2hNaDtlcTQyLnh6cXp3QjZ1aGB3WV5KSiVtYkZ3PUY7eF9gend0WDRMY0ckOTlNe0FGIz0ifEd1Z19+Yj1OSVMlTy8+bmhEa3JVWlJCa0NgKlVFIjxtPF4/IX5fRT89VXE7VX12OiJBUDtQWC4zP2p0KylhT21SRXBfQ000TzxRc3VxSyIsSXE2VV9BXlB2T1tFclA1TUN1YT5yfU1CWkpEQyZ8''@;'; put 'put ''U0YhVXpCRUdTXWJRSl1sfXIzTGIybCFnYChWZztMNEt+LEI6Uz0qQDNBVnEsN0JxKW5KbnhIbDtpYmYhdS8pfVVhZXgvXnYkVFVXU05ITUp3dVkjdy4rd3ZNXyxnVHohQmJWIj8sfSMvP18hPjVYOSp5JmV3aG0uMk17UjlrNStpaTZaTFRkbTsrNz5yLkI1UFFqNldHSDlmfTMqL180M3dna2Qx''@;'; put 'put ''PXdSdWdfV3huRmQrallXX09zZCY3ZishU3w7Q0VXQ2dbWEdPOCg6bTlNUTxASVkuKjJLIVBPQlcuKDRfcEBXKndNVEVkPiJjPH0iPk1PJGJEaWB7RjZeY0B3M1tYI0Z2dURzKnJKV29VXzhRI0w+Sj19JFN7UFtqIThkMSVaJmlsaTo+PnBtYlhSczk+YyJ+QkJEY2YzLlsvNVYrPClZczRsdkBZ''@;'; put 'put ''an1LWHtCUUkxNVhuJlJUMD5ZNFhKIkxffDJTK307amRfOSJkdlVTMmx5U0xfK1YrMElXV1peblJQTEM9MTFub2dRQ3J5eTBdPWJDNlZ9e2ldXlFebzZQfko1KyZ0dElhJm5YKnQ6RzV3MV9FQmE1InRUNF5KfGMjO3NEa2dwRUcpQjJSQ2B8czVVQmw7YjdFUSpWWUd8ISFVZF01S29hZy5gTXhu''@;'; put 'put ''cWNuZiQrTFVtcXduQy9WLypxcm5nZSx6PEUrImV6IUIibVk6Ikd5Rl8velZjWEFPJDU+L1dAXnsxNjk0RUAmZ002eEtGO2Z+eyEjZn02Sl1XVi46a308YF1JX3FWZHh2aURdbH1ka2BfZjFHK1RlLiV0S2t+TCw3ZEVSZjAkemAyJX07YkNNOTxMYU16WHZZciFwe110QUF7RkR2fD9fOUplKXFR''@;'; put 'put ''Xnd3MVAuSkszJDY1Ln0yNmhjMntrYDNVdmpqOF1adzJEdlZkeE1GK0Q7NERGWHZsMGxsI2x5S3U3eCpAMzxkdCFgVXVkO1JubDRCZ35YdjUoKHFUT3ttSilUdFd0PEB1KFtifEl2ZDpaYHNGK0s7YF1FdDZqczB0P0dpeVs+PDJzXXFgZ110V2tlW0xIJWd8YWBhVSk0bWw1eDcoUSNQaUo5VUc3''@;'; put 'put ''LCJDfTdIUihLM0VRVy97cUpMMlc6JDx1ZUtKPUN1SHskP2YkeWVpOEhGd2Yub2dMbkNEUXJCRHYrZzZ6O1E9N1VIdFlyUSJnWzYvNzl7NGN1TF1DaUREQXNJfjs7KjI+Nm12SUoxV1lJdXVdPmgscTQwNUZWdj0qRnJfI0svRHk9fXEmM2IrREJqLCkoMCIsN3hweGx8JDRpTjVGb2xWRmZBZzdD''@;'; put 'put ''NzZ0NGN7ME1DTWspVVpGfUtuPWlgZ0JFc2plOXMmfHRaaFMqVSFzMjlZc3V2LD9layUock9YPGxoVHQkMzBmY1JxL3lgWXh0cGp9W3V2MEJuOmFLbkdFUENCTXAhRjhlQ0QlQzUpbXxeLyFjbXUybFVtUnsvW2ZgTTpnfDFfXUR9M1YsKkpnSFEwWWw4ekIiVF1vcWsiTCJWSlU2WlVlNEUrWHxP''@;'; put 'put ''MS9CbW0iS1ZmRTpAVjRofTBTOGJKaUV5c210QEs+JSE8TzYpYl1HVjVRYUg1VXBaNlpla2o9K0IhWixAPSFNe0VydURHS1pqOGdaJFAwPDksbkwxUXlWYFYvaEU0OiUvdyF3SVVJb0JvPCN6TzhlKks3SEhiV0JrbSEvKTZONkBvNyksPFgpNis1OT0vZlg2OWIoeip5a2YuW2FXKkBAXThXYkx+''@;'; put 'put ''aHVrUGROU2RDKSZrJi9+eFQjdkE1SDhGTVhRb0hFUzVsc298ZjlObik0KVQyWn47UkNROk1OZj4saGV5dW45aCRWV1BSZSIpZyNiNip6X006IihkKUFRWjFfdVI5Q0pMQ0chWmd7OjJiKkdNYkF9JCl8VC9qU0YpIzhpI2A+RGRhPVV9fD1DQXEmeEhPNDQpPStsNSspNm5QeS9jcmUrKyRYMF0s''@;'; put 'put ''OmhffUZwSlYjPkpnSjJKPlEvSno5QSlFUUlobCV0QE48dGMrQ20pNiV0NTg6UkBeQE0lU1M5ZXwiKUFXO2A9S25ia35CJmxGNFkudEY9MC9WRUZ+czoyfVpSfG4lc0Yrb14qP3N5dG1KMDNXPDpaXXtLZUVuQ2BEMlkpSHtNJnQxX25XckooJFNaQm1AZCwzcmsxMlsmem5+Nj1UNyFDcSp4eT5a''@;'; put 'put ''dTl3JnJXaWluJFNFIVN0Vi4hJlpsTk98NHwkdm4ieDZsdCxJMjQhY3JePUI6dXpXOVtdZmlVNyQxcFdmPlZ2I0VLTH5YNFdzSTRzNlpSW14+UzlGIl1XclpMYmtwLk0oYUtyPixPWHpWPVYoJW8sa2w+PjdxeXQ/YD9AJS95QFJPKDgjRDwoPFQyeWJ+MjosYno2X3siSkcsWT4sK185OGV5SEk3''@;'; put 'put ''Lnl9O19ncCVMcVBGU3cxUExVW0NWMzBlcX10L3kyYENGeHhtSWkwa3luRylqSyR0b31VPyhGKztdLk4vNEZSRT50R1hZKHByNUlxaSIsejR1MTY9UWhsNUVkKXB0Xy5WMjw3ayNRUnFXPzdAU2QrUE8oVHw2SGdnVz5GdzJPISlmO0gsXjcxU1MxMmdyKHQ3JTpCVl8hez9mW0dmUiJYMkozMXBN''@;'; put 'put ''eyplPko+fCNaVFN0eWtUJHdzeFJVN1EmLn02KVtldVNiKnlUIT1DWyFKQXNZQ0o9azcsbz14PTF4MF5UV3BvZS8iR1ojRjpAVVNYUl9Jey56dFk/O3ByMHsqKTtBSkpeL3dGdGVAJip4OzBAQ3J5PyR3QHJ3P2QiRDddLkgoflFyXyNFO0hXKn5tRXlKNEQuaiR9fUwmWmBWTlN5N1BjZHFlVV96''@;'; put 'put ''RiR+UWkvSD1lUjpSKzRVaGRCVj8hKlFIYWArVEhdRkQxNT5ec2Q0Y2xGZHY6SE5vaSh6Ly50RkJoaGZ1OV0idC5fSy9SO0dWZlJ+aShBOlJ9W35SPyhgNDd3K2JydSYzdUldQ3xPVjsoa3lPazdbWDdfSUg4OHQwJURXUmdZbHt2aSFPYysvMG96K2shcX13RWVZQ3J7KHcyOnRLfFZfN28pYEMo''@;'; put 'put ''YT4yIXl6I2xTdFhfc3RGSWY8KDRSeXt6W3g3M0A3VjdTTTBbO3pPT1ZwJnVbR1JBSmp8T3kvIi9zSDt3TiQvJEM3fWwiMFFjTXpQW0srPkI7RSFXcGkqalRmWWo5UF5PLCVKZnJVektuMH5fXmEraEdgc2NoXj0lOShEYDt6RS9OYkJ4bFpXWUxscExESCZQJW9+dT1PeTI9LyJ0RUc7UmVlT3wm''@;'; put 'put ''MFM2SHh6ZHQrbEZaZi9DQksmTzRmfld7ZlVifGV8Z3FPRmd+eTFRYHUwVEchSHV+M0o7fVNJWDN3QkY1UGxhd1hsJmx6K2JGNz1tZjFMMTZ3SWltQGpBUlJrTCxSb1VqOGR6LkBrWFUkcSRtU1t2WSxPWFlxUHIpXlFnXkZxXXVxVGU9d3g0KGFSOT42NjZffFAwKCwhVEtuSCJXWXtMc0VBcX4+''@;'; put 'put ''WFVme3UiXz9rTkF0RC5zNHp0LF81XyFOK24sK3lXaltCdDBmeEsxI3VtW2hCXTNPV0RjKikzKCooWF49ej9+Pn5MQlRMV304cTw9UCV1cDVnIz0qNk9tajdZfjJKSW1TWUV1dipdY1pZa3ApLFJGVkpmSyVSLiRiYlZefF0oOl8wVkJHZzJTI0xaYFNsaTFieWRqPzx7dzdYQ2hqeDRCI0I9fD5l''@;'; put 'put ''RyZ1T1I+e31bdGRAb19RKE1maytmdzoybEZTZk91Mm56YnptSndxakw7O0JVPVYuLFRSWUovVilzSVMqITVzWFBpO0NJYyZTUEhGPlshdCs4RTB2cWV1TFdAQWordl1QUy9aPX47R1lYUlNIV0dYcX0hI3xFamtnPmMpPyMmOmkya1BiWGdOIkFmaXc9bk1NUyEoWFdUPW86VCZSWlY1Wl1XKGla''@;'; put 'put ''TGk7W1YmW2IvSmpIQX56RDBVZ1dGKmFCR1NkWG4hTWYuV2JIP1c9Oihsbi5dQkhqRTQxfEo5Q1NJWVBXUDJiTD1tKGwhZTUvcnorIm1xUkJSOzleWlgsYmgqJmJEQGhjcz9HQ3NKeyY5RCE/XT09Z3omdTtuXkVuOFR2VWVyfFs1ZCtxRXEwLF9BNjRDcGVLa0B+MSx6Y3JRRmZHfDt0Y1BHTFpM''@;'; put 'put ''SDlkO3MzIkIjRntRTjVjIiQ9VjgsUWUsRnxoXnRSaWJCKShnYyUhWWUmNyYyVERBPzQjVTNEPFdBVSJBYzl2PHhMOjNGeCk/ZiEoRXNBaD1XaVdyQH1iLkc2PVJxSGpyYnN2X2BSRk1DL29NZkMjSXhAVW9EYHNxfXBReDc9WV1yYzxISTxLJGpGbDFhS3dpWGt0PWckKER+UllYN05jZlUhQm1J''@;'; put 'put ''PUskLjdpZV9hfnI3Xyk3Um99JGl6Jk1UX2lHKUxLd1ZjS01gST9oKjsuaSthdjsiMGkzeFF7WHQwNmIrfXo3ZyZxWFJ0Q0I8fmxFTlowSFJgcnU8dXkuSHg+YzwuRHBDfHlMK3l1QixwWlVpJXpwYFlaMyUjSWYkVUckcFt4WUs6Qyt3OXIsMDtfMUJGZHV8UVMmUDluWm0zNGwlajFzOCRVLntG''@;'; put 'put ''UE1OPzdofV9RdzpRdSojLyFIeGFuajtgMTBAa0s2c15gX11ee29eRDRrZSpnV3guMVImOHtfUFdwVHEmTX4qenA5dlRlYVJVSWJqKGozQF1IOzxVL1Y6SCVgRFlqbHpIVyZBZTd0TUBsNTJwUD88JFF3Q2NTOm1sNyMrTi8sZmJJUC9sPXhsX2V6PStwLiNnSjU7Lm1QfiliUX5Tc1d8LnZyRVNw''@;'; put 'put ''QXQ+UHAiYys7TltiWktOaVNCKT1QcDI3TGJnU19OUTBqTWFkP1h2IVNlNihhdDNaT0BpSE8/WWcrdkUkaFRqRF95VSxFdGhUenV+PVV6Z2lKZ2gvaSJKRC9jKFU+dno4QG8lPHFjbD5NQXFpO28vP11YQiwyM0dmZyIlaTtXajJifFpNeDEubDNBSSIlPiwqPUNCUFo2cms/MCkjNX1aZj4hZyMo''@;'; put 'put ''RT51OTNAZzBNYG9oeCxRWUJfY11TKSNiTyQuTmxFT0U7cD9RYW5gX0cwVGJAWzRObEdffjZ8Kl53PEV7cCFeUnpfQVMxISZRQmEoeU0qcWZ9PS9AVXREaGtNbiVWKUAmPjlIPyJUL2kwR1Y4L2s3WD92V2Vhd09ZcmEyUj0qUlhLWVZjW3R9diQ4aTBoR0RTTjB6YlR9ZmBpO05lYFd7cjEsRF0o''@;'; put 'put ''NnFORVV0UCgwZ0YmOEBZTlRUKT47UVtXMHdUM2tMQE0mLFhTWCNibl5KRWVGdiFscTs0alVMdVcrdkVRPlNPMWIibnd4KUZifFk/SEk+RmkwRjpxcnpofFtFJUYlX2UqYH0jZzc1bV59PzFzNEdMXUJBT15eU1k+XzFXMTExMEs/NHEmbk50dXx2YDR5WzJnV30zeWc9eiR4fCFWXX4kd1hkSy8+''@;'; put 'put ''ZVVvPGIlYmVOQWlgQT88b20rLkZXKWZkWT52RT4sPl5DX0ojbyM3bTVtKSE4M3lnO3hKUzNheCpwUGo7VGs1fFdVbSZLJVdfYTllJmw/IXIxb2poLyg5b1NdVjFPRiJ1ZD5fanJodXEmJW4qTUV8TiVQPzA7IXB2WXVQdTRzWUBNbWhTTVRaNlkwL0Y8Ji4oIT0kMWllNTowMT1OVFUhVTRzVH4s''@;'; put 'put ''ezRzVS9ILlRrJFZ3bDEsITJVcyJuU197ViRsMSxbVkJhL21LVGhUUWJIPl0+VXRjVmZnYSguMlVzZTNVPj9eUWA/dyNRMGoxQixHVFI6ZmMpXXw4dGo/TGM2S292PFlYT3AjLkZbMDhkPFB+cD9aPlN+SGUvN18oV2lWIy4yLE81SkBkLjYhWXR4M2M8YGh+Ylt2QmUic20+bHM7dHJwdUxZXVss''@;'; put 'put ''UGA2KWZ7KixYUmM5ej9URXxCdjwpWzxhfVVvInhLe0kuYH1VUGdrRzhHMkF3W0VRdllFQm5+K28ua05UTiRtaGQuQU0xLl18dSUpTnded1QjUD0zT3NQQCZPYi5BVGwjIjBYIS9IKUxudUtQNG01NE5wK20yMFd2UFFiKFRRIzxlLkg5JG5Ie0N2aFVzTXBwWyZqclF3PmoyYH1Vei9yMnlCNlt5''@;'; put 'put ''clU7QUhhMntTdURXa2kwKzwqI19wKDxscTxNVjlfIUgzM10/aVljVXdqWWpOUCU9e1ptP1UybUFkSFJ4VHZNeTxfW3osWHJ2fjAsIkksMkBqZVtmOFcpSn4mTF5EVk1hajU0cC9SJUleSzVKRTd8VzFoPW87JDFBLkF1dn1FNm4uP3xELjpyOFRHfGYoM2hFKF1CfVg9VWYuP0NbSUY2aHhZPllp''@;'; put 'put ''Ij1KZE4sOzUjcCllVVVoX1lGM1h7aGZ+eHA8M0dZbChMWEY7OmtbUm52PHJ0RU5genF0KmglaFY5Vj07TWcmdExTe1d3O3B1fXo4YmZmZ243bjkhKDZVVWVbU1R7cDh0ZX1xLCMvdiNPIyMmJCU+djBtZms8djd8eltCXUhnMn5uZz07UHA2JC8pXjwkKkxua1dKS2ZXa1FaZVlWOVAyXzs8TFs8''@;'; put 'put ''bD4qdHNqU0w8NiNTfWsjOU5wNUcvRjdOaUNqM3UiamoueXJ9dGJyRi9oVnV4bVN9cGVtbH1fa1teVCpFel0ma1p1YCxqPDhmM1JddXppa317NUd7VTdVS3oiTkQwRX5NcCZvMXZvQiorMnV8WG4vU2F5PE5uJCYrfFtLO1J6K1lpI3VvMF5qV15zcyJ3cDllZUAybl5vdTp5N0BXcipqakF5dE84''@;'; put 'put ''VS5BNjhwdVBpQHg0emV7TTshWk49S20/ZU90KWooW0NkekBGaExjVTlORmwyYlteIW9MQWB3N0JQKXtkXl1je0ZOczAlRkpOVD8qMi8wWm4jazh5PntWOlRlQWlHaklHflNSV2FXZGdWNz9YVVJWcyFOQTJeWEFjYFZaLkdKO2lAKXo7ZVI3V1pDeVFbb0R3QWtCfDohPmpJUmwmLjZUNFU9fUY6''@;'; put 'put ''NEYmW28hO1hXWyE4UCpmeGFeQFRBcSE4Pzs2JVJPKjE6NSkmOHdoTEZyRWcjVnBCYX5VKXVwIyQhP2NiWXw6Z0BIfUFzOnYsO1oqKEJTTFgzZ1dzXTpqTCpxWzJxKE4+ZGFfTjt2PiRdPiF4bGUzUEBsQipgXU1CXyVqeD5jNn0rPjl4Uy5qXlJ7bVt8MEMyc19ve0E7ez0yaDBeUVsmPV1IS11e''@;'; put 'put ''NHZKO0oldixreT80ei41N09lPk4+VXxmc0ZiWz02YFhQfEIrLCk1IiR9akImRiJzQzNQTGs/U3xYRy8meClibzY0KE95P2ZzZE5ZcGZ0Z3NbQmx8JUFSQH5zOkNMfEp5b3R9TWRdU18mVlVVP1FCI34wU2Esbmh6M3xVaFB3NmhfJnlJaSIlNXNCVDh2JSphW11ZRnJiKWt9fX5RMFY4ZiErPTBI''@;'; put 'put ''JkYzb31vTFZ+JEMjNSROcSV6d2ptTnBnbDU6Q2xFW3RlemVgMkY4eyFyUTM4LGNNIUFbTD10JSUrM3RRVWxDP34uRX4zdVdHWCJoLmgxcVovZ0w7O1ZDOHJWNWooNjNmRmNPX3JUQ2VGflV4NCk0altHLCIvKj0zK0AuIl5YNWVufDN0QDIqbHQ4bSRWWmkxL0M+a2NtSTBKZ3J6YSZhe11TSGxX''@;'; put 'put ''Ql1CcCglc0Z9WnRLeU1jT0U3dXE1e1BHRj58MjNENHAjWWJDNjBFOnJZQj9bPDxYX3BxTUNEJn5fPns+TF5bdi8vfSgzUEBaa1A6UUxaX00xX2J1NU0+SXsxPlBhRCNZaSNfNDlbaWtyaFFISm5PZiFhY34mfHgqLl5oc0xEYmlfLHxdd0cqfn5iKUcheyklSzp0Yz5lX0ciJmpJdGNbdHcrUXpr''@;'; put 'put ''fjpkNF97bjMxN2c5cyxsdSpXZGguT3A3TCskKExjN1pTRVoiKndRJCpeL00xaFEzd3woXi84YnBVRV5ZRSRoendPIXliQlRIT3t2em4uMWtvcWtFVSI9PHV9aDYwNzpibV04YHA9Tlh+aVdyTGFhITB5Ty8sLHghIWYsPyEyJSw4b01Tcz4lOyZOYVBPZCpKOD1pWEhXT3tXUFcuN2hedHs9TkEu''@;'; put 'put ''d0VkNGBmdGQqPypNJGYuNU91e1d3RFdjM0xxdShQV081em5zI2JASFlEM3dXP18hTk56PDdZeGcxemVkW1twcmhWOkM9QG8mKjR9WFhTVnZ8K3Y/fl07XipSdnApeyJFO3dMWkFNclZkXjF1ISRYUDd+PU40UUk8UjxDX0FxPSYwYmpYNyx6UW1AfGpgV0I+OH5uZiVQI2MoY0QsUVgoeXd3UGNR''@;'; put 'put ''PzFHJFdmRC5iYV1TfH1LKGpJJV9vZ25ldkZSb2kpaWo7eTQ7W0B0NSNOMXx9NVtHSGt1eE8lQiUpREhWTHF1MF9iQ3NeVnM2UGJbQWtPYz83US9GXkojTWZVR3NCamZWWGc0fXBJbDR+ZnFUPUp7VTtme2gjfT80KnxUKVZnSFdMR2pPIyJsJXhlJTg+Ql84cHdGSCZSbmo2eXJMJWc1MCRYKTB1''@;'; put 'put ''JEsvL2BSczN6Wz1OSCteb0AxeTFmRFVGRUhJJmIzNXJNRzU+I007NnJNOUNKU2A9S2A8Vkp2NSlbbk9MSSZPb0wiZ0UsJUdVNSt2NyFWdHIrVWg0aG5BRjVaT3sycnl2PV0jKm9+dERdayNmOGp8YjVhfnJpWCJWYT8oJCx2c1J1Vj99LEZ7Q310aFFiWXJLUHpvfnZ9eVEkRTB+RHF4JmQjfmdM''@;'; put 'put ''cWV7LkVBU1R0L3wkMmxkP250U0pteHApSy4xVF8maG1+YX11Lmt2JS5rdjM6dEAwNUhva3E2dV5beltrUmpbIlllUjZ8YXFRSUImRyp6UEtEaDlLUWFDakxNQncsI0JUV0Mrcj9JYj14QHgpb0BSLCNxP31NNzFTN0FoLCoxen0zNkJYTkRMeUZlQFhpeCMrUCRMWzVEaytzI25bMyh1UWJXMVlG''@;'; put 'put ''VDIpcy84JXx9dEZwbGRVe1Z4UnZQPVddaUU3c25nQjxdcmlpUn5OPGE5QU9MPnpnLkMuYitya2N1dUtleVdAX0Qrc0NtYFp1eiMzKSVPNCU3byVQbHN1O09vPSZWbTRbPUh0UGQ4KVUyd0k4ZktuX0g6eiJWPnNLejsuI15UZiJNR1BPZH1QN21HSyVnazBaNFo3dy4jZSwweTs6Lj9bXSY8Wk1m''@;'; put 'put ''IzI2ZEdKekdheDkvLDtKZmdebVVLdjg8NnNjfVVDOFJZUkM9MiZCdl8mKGNzandDOGxZLGtOfV1vVDdCYnZSRi8hTiFOWHluLkFzfHE1dyU3NmN6YHhlRyZyNi5FTzBwVzRnZ3RdSHY+OUdQd3RAdSUrSCtpenclPXh2Q15eKTxadyxxd3xVWWsiPzx4NGZlTipXZUApMntDV3NoMFV0IlklfFo5''@;'; put 'put ''ZCxMNFkqR2QmYC9xSThvcVFxdmdaMChzWitvWFRTK2BYZ0Y7NnddIUx0UUAqI1Vjd2dZSCVnSixnUTJyWjk5I2hLIWYsV0UkVV0hI3M2PitbcUkpIXVMKkZ9VjcraDosYixkQCsqRF9HbkswSXtwY3koMzFBKFlePDUqc3VncGtuVV1ra3MmSGBCJnFDJnYkR2xMO2JdWHAiVz1gV2p8Szh0MHNB''@;'; put 'put ''fSZuQywjYVg2KFB5JlRpdF95NXNsXWx5PCZuPl5qYWtXdFZpRkkxdlh3YSRjcm07TGRnN3x7JDlleG1jKldNIlprPGtPfkNmZ1dGRVFPaWkhbztIZH5wLGpSKEhhTlkjVjY1fTBNe103TEd3N3VZeTIvRTt7bDwuczM5WiY3ViRTfUR8eHIvTy5JfCg4TCUyaVJ4ZC8mPWU9NHQ0ST5YMExOcEFG''@;'; put 'put ''dT42N0BiSVBzcTcoV0ooRSV2UktYLjNLV211Z3FfcWYiJGpMMm4oVS5IU0lxWUJtbmNZMGBPL2koclApeXVPQjA7MmwwYCgmaWt8bGF4PiNOUzRgZC9RNmJDNC4ubCFeeTtWL0ZNKlBJIWRldGNVc2FtRCU/TGg7TjdsXzs1azF1bX1wQGwicVJ8KVddMTY9czlPPU0+VVNrWkx2TyR0MzQ8cDJz''@;'; put 'put ''RloxXmw1P0V8JVZWMFFVIUhxVzZ8U1EpaFZ7MHcpZXlbQXFWV3hnUXEpfHlLZ3xMe2ZAT3RAaTJvcXIkRlZ7YHZFSj9MdFZya1VEWGdiL2tbe2lfPExmXXttbkdPUzdDP2d7JHVlfGVXaXoxdztGLjwuP0o+dXg1dnQpVUlgXmQ3Lj1ucl9jdHdpVz1AQDcxI2tmTV1NZFYjZmZ3Pkx1TGx7UnVx''@;'; put 'put ''SSk9ZX46OmQ8Kz5Fb3BPaC4rWFJjRWk7KGclUHdwOHpEZFBobzlIPFFmOSk+c0xddik+czUkVEw1S2BJaE52azZORUw9ZTRqR3B9NU1xa1RoLmlUSGZGSWdSKkYjKklTZ001eyYlPzA1KWpUPUVuMD1+aW0mWHF3NH56PUF9SDMkJnNna1ErYEI6bGRwOXVUVis3VFozb3tnSHB8JS9KO1ZLeSV7''@;'; put 'put ''LEo7ezFgWTE6ayV3PlB7M0lRNUJfSEdTSnR1JiVeeS9JMExeVnU8ZTNFJiIuRzUkTyFROWN3Nn1sfkNHWERVX1phYD5QSHY6VkRUeTk/NH5HTyZyVCFoR2gpW09jQl0pPzR8RUpOci5ZV1FedzlEfiM6SGRKKk1DfS5nQEhrc05aV3Q/ZUpJXjBoeVtmWTg8RV1IR1AvP3A6cDVxXng4b1QmaVlp''@;'; put 'put ''UzFPZW0hfC57fEooTEAmNHhSXlAwVmw1WnM4dShifTJLMDBFcUNgJiJreDwmMX5JL0wpPSlmNSVsYTk6YmVaJiVnVyV3SyhyXSE3andTQl9Pc3RmNnxdLGRXSkJSUzNgTEpyW2FMKCQxczVrandzQ0Y9RntWelVFJU4sYE1WJCZHJiYhY1s+fVkkQkw/RiFybWAqWmh+WDBXO3lfS2VMTGc/aVg3''@;'; put 'put ''dHJwWioxZlZ4SlN3a3J+NilweWI8fkBXI3pGNDd9VTFtdjBubCFrLGVncF1POVBbWD16OCxafUwkaUpWMjFCK3UjJD8iQzhyLE4xLHtBdXtMJHQwR2VnMXNrc3RmVDEje0dMZ1JzeHd5STFdK2k1NEhnJW4jWU5CXkE5cTJVKyRiYnNhbW50UURRVzxRTjxuRnsmbmpNL2NTOk9MTSF8KzM0WCFp''@;'; put 'put ''WWpwMHY0PEwlTDIwY3hUT0xeJGRsYCVxPX0ze3lQL1huNUFZcFhQUHowfEBqc3o3U25wMF5tPipnam5hQ3gvaj5Pfm9Bcnk+QCtXZFROPyF8ZFtYUGMoUy5qPXhjYXQuWzIjMmtdRiZlMGQxZlFtPUN4K291IWZmdFt9OHcwMihMalJmOyllTSk9S2hXfXlPRC5IXWdaSlopSiZ3MnUrV0Bud2dF''@;'; put 'put ''R18hPncrNCt1Yk0kOHl5PEp0dX5gTytmTTAhVU9hLG5nUU1ieWt8NzxzeTNMZ0dzPz5fLHI+Q2JYaXU4KmImdChQIz94KDA9fDlxK2RNaXlGfndqR3cjRX0/RmssInZuc0luKV1tYXZQVlRrUTZVPW5uV25xeTE2S1tXRWUzLD9AUFkoWXwkVy5uQHE6cFEvTGwwfl1YS1tvejE/OmhyTlpPPEBe''@;'; put 'put ''cyZ5KUtZVXA8anpAP0JqPklJM0ElSk5XVHYieVpZfj97bkoxW2xsYGhRR1E9fXd1e1NFR11sJiE2L05OTmhjMU8qbiQ1OStkemd2MTB3T0ZwVHZrSSxuZGU4KEQoUXFVeTdsZHF+MTtxSlJEYXh+KFBsWl9OfChZXUMhNzBZaGMqSX43TislZD9dJTFUYSlCJmguekt7ci9zailbV2FdSEdWejtj''@;'; put 'put ''VHZ+ZDhMZkYqSWU9eDNxY3NaTV52VXJQJkl0TDQ/RVsrRVIpQnZENExBS25DbSlqMml8U0gyWVk4TFRpODU/NF88SV5JU3IockZYW2VmLGkmNWpwRmZ2TG02ZmlYejNMbTltY0NALGAkVXhKU2V0UH5RVy99c3xFM1NXZkRqUnN4IXdpalQ4QDZ1PCIvJWYqeixzKC9hT297QE06W019MTo9Xyhk''@;'; put 'put ''Vnp2I25QJF1PPCtvX3AueGpYI110bjRXY3cwJVlbfVVrdjZnRX5jaH11JE9zaEBeOT1WZD4rWFNaVDF3dzJELGJfR1hlWn4lYj0pPWV+JSFZUi9qNk0kXmpdMkt0VmFufkd7Pkx6bkRGVT9Ha2A5eCxfWSojTUhNNX5gRFZNYWo1NC9IV1grRV9dUD1QZlEra3YrVEZpW0duJSVpZUhUb2VyZUgl''@;'; put 'put ''P3xWQ3Q0IWAkRDN5JWI0OTZ2emVkKlteQlIiVEwiKnRHSCJEaDZINSlzalMwPDUqYyR1KCV6cy46bWplL0U0LCt6bnVsflouW1QjU15jOGA/LF5eMjQ7ZmFhK0NKOWIpQTVNM2teMHx7bFBRKFpeSisoSEY2NDUyNnhvR0ZXUmllNjp9cFYrMUcqTE5uIyx6QkpqWWkzdHUzSS8yTDZRSTJkbTx9''@;'; put 'put ''S3w/YEQxIW5lKU5VYmslbVFSKkZROiJscGRCM2s6RygvU0hHUEZhMiZfLCZ6cy84bj52ZnNhSm1ZS1lvbCIwSmk8T080KTJbdmt9NEdMbFkucD15Kkk6TzxpQEguYEpedSRhKzUyIntoUEEmJEIuMHRZfmp1dEdsaCRBaz95SDYxQzRfJlZMb1BseHZOQzZvNHRfNW1PZnJ7a30mWWV9VT48Z0I6''@;'; put 'put ''JElofDBuc01oUiZbUFNmODRefDF2KSokYiFVOD8oYE5VRTp6dDNqbzoqfUw6KjxbJWRITmM1Z2pZYVN7SUFGanF8Xz5qQypELl8+Mm1QfmBQNkIxVzZWL3tyfSMqdVtiQ19SayVUJkNRUT4jZT9kbGRsIXIqc1JeLkE/fnBMJX0/cFByfHcsUSshZWE2PkhMJH47RXYjSXVmOixMI2FUNyRlPVpC''@;'; put 'put ''YT90b31MYF0lOV9ET3woMlR5OH5VM215OzZHTHVMdGY+SFM4Vm5nKGxmTj1wT3svZ1htfXF+ZSE5TlRsUTsqYmheT2djLlhCTXFjQkFPSUVTLzJUX15bKnxobDQ7KT9wYUZEN3hDdXl8RUUhQSpbfSxOQU5DdkV6TjlYfEYjPDM/XTtWMSgmQTRreygvJFkiSCk0eCw+YkMiIVIiVUoyLnQ4JDJ7''@;'; put 'put ''dTJsfj46KjB9fnVgWXJsKEhFbTg2UnUhKyQySER8XVNVOT0vPFdxZD8uOml5SFc5Vk09XT87em5pKi50b18reXVmfnJ9IXt3ISs4LDUvNU5zTkArfGdzai9lRixpX3o7b0ZlXkVURiY7cntDYHhRVjh5QiRzNWJDaFhfMV4oa0VQNFpMKmdoO1AoWVBjUT1xLDBdcmk0PmtvWno4RlptdiQ3dCpm''@;'; put 'put ''NW52OTJfai5UWmpVN2d8TENuLjBNMXNYSFV4Xz0/en1UbjhxMk5ybE8kKzxDJWtZOjZ2RHY/cFc7Xzo9SyV8XkosMy4qM05hTWF+XTEwNz0pJV5iJXQkOVJ2Sldpb2JWdVQ6fFl2Y35ZOikoVT52RSppbE9XUmliIjlNZGdMOjN6OllmPnMmRDQ4SW1rbTYmKShKbDBTYUpHUkImfT0hPUFuSTxi''@;'; put 'put ''c19AMj8pKDxtd3lOPXpWRz92RmdiQzghdSEqViZIdT0vXSkqdUBjdHlTa0YxZzJTa2MwNzxRU3ZCPnEqcWtbcEI6XjZieXNKUyUoMDFyLlhzdyQmPUZNfCFePGFCYkFuWWR1aUUyV2VqZldGPCx4fDVUWUBsZ3hIY3smQS4hPU0zW1g7X1U9MVt+RmgwcjB5W05MdF9TeVIsdHtJdnJLa195MT1w''@;'; put 'put ''OGJMdWkkRFUkT2dBSGgsdTorcXhfT1JQM149T3kxRV57WmRifjRlfFkxYldTR3s+cnBtPHBuSS9BUHR6UF93LnNvLFordml1RT1vKVRfZV59PUA1PnxFUldadlJqNTFrcT9TUFBKPEIzfiVSZW19W3NtfngiJU0/eXJ+JnB6S15ZKXtdOElUfjRUbVp4ajEiOD42QlZATUBDW0EsY2pYPXwoZV1O''@;'; put 'put ''ejJsKn57bz5VTUA6Km9UdWFsSSgla15IT3tMQXA8YVdpRCRReDtQWyt2RW5bR24yUVRWIX5jV2o0PTA2IU53LGEwR2lfa3xsMSw/WXxOQm56bT4yVCtINjlEe1JyWHJ+Tih7dHA5JGpAZn1pUFlwSS5nYWJuSD1bMkEsbmc7c3EjRX5iUH4pZH1QdFtYb1pCbyFEYiluJW51JTcxO29pNWMle1kk''@;'; put 'put ''On1TfjlgVkM+YHZAanNyLCh0QDN3eT95a2BWQ3tGWWt2IiFAa2A8fjQvYGsmYDkzVSg9ZmJrI0B+OUpkSE0jcT99UG56N2ghRyIhQD8hWFtsdHJrZm9dRi5Ea2xERzZfVWthTEU1QXlCKn0zTTErflk3dE1ITSNxZlYqTjV9ZiwjKStVfFhoYCoiYFhFfUZVNGYkNnEsbnc4QHNCKEY4LHQrM3sy''@;'; put 'put ''SyVjbTpTdFRdZ2AmfD19OUJgPzwwZWU+UWtXJnxwJipwdUQ9KjhQSCF9cyYhbklZSn5hN016TSYhTiVFfTdgI0NRKm1+JHFgYWtXJntPakFHdTlpUkRbT2NaU3J3MmJnPG1JbTNKVXppc1tjOWJvSWNbS15AVX1pXyR3QzdGPT1de3A0c0tbLk1RMVczKilHZStvSSFbRVswPkQhM2VlKFBSQl0l''@;'; put 'put ''VUUwPmk1dDprfD4qN1BEKlZuYChTRD0qTWYwb1tSJWhbZyIqZnd3fWFXWV8sRX1yeEtEVVt3IjVSZSlVeWZCeGtlN0ByI1BDZ2phQi9zIiJ8JDJ6YWIxKlIkeiVxKmxlKWM4b3xePT1KNHAwUlAjUWliQllJMGxIZFltUH5ESEtYK0ZmTFhePFAke0N7VkI5YHBMWip8SVgue09xWXk0Q2JZL1s2''@;'; put 'put ''IzRQeVV0UCgwP3dCRS8ka1pbdHRgRTF6dSI9JjpWKTpsMD4ibUBTSWRrJXxjdTxCbUtPaFBHUSRuZDBeYjU+My40UzFvRWNBNk9YeC5FbSRmNEcrP2BLV2J4dXQqcktQVWNxJkckNF9yV0ZuWk5oMzA9OFkkKWk6OXNNR1Y4YWhLfDEsOiRuUyo7fSRWJVd0VWBzd2J6N2JYOmBtRlZ6TFUzbXlf''@;'; put 'put ''TFldO2E1M2Frei9IaiFCaFZmKXdsSD9leW9qZjU1cV5BejVCXjxMNGd9c0x3PStkUzx9YTI7OTNrXmU+bVA1VTNeciwmalk2WyNWbnlsL2EuJFglTz08IStIWTZbI1RGYzhmIkEvRHFEOW1fNilFW2pCdTNiQisyIX5ER0pTN1RKPkM9RzE1bjIlYWpBXU56eXB8UVNfIVopW2hyQl1hPipZSH07''@;'; put 'put ''Jl48JnY5VjB+KzI9OF5MTlRUNz0xdGJ9USF2Mm1AWlcla3I7fDA9L3xAS21DaW1DKHtWOmBET0pUUiwhSW1mVFh2JmRpNWdgPThMTGo8TSsoXm5ATUVlcG4jbTBvYXhVZlM3Rk5yTyxae0JxLj9kRz0kcGFISz90TDkuaEZ2JjVFdCElXWZUPH1bVGs8e2p+JVZaJD9IYjlXYFk9S2E6Lj9BWn46''@;'; put 'put ''QlBeckRoMVosbkZSRUM8TyU5K3t+V3FlQ2QlPXI3fipFLkd5YW0iX0ckYmMrRyFAcGk3PEJLWlNbVEtFV2pwYVZeOFcrXXwxdmE7JW5yVT1aNXgpQjxQJkdOLGg4fVlpOEJtdih9eU91Yipjd2o/TF1eNnpLPzQhdF95MFAwLmI5akQsUVFVISMwY20hIWpXWHd1fmxvNTF+JXV3Q2ZwUF1IOl58''@;'; put 'put ''dTh0fkEsMm51QHJxcXB5WkU9YTw3YX1NfHple0k7ZFpOViN3KlI1WW0qXVthOkcqU35VYk5hbiI8I05Id3puajx6OEI9TD9OX2krQ3U0fUEmQVY8Qk58c1guXk1Pc35MPylITTUlTUN1QyZOW1t7bT9BdUNuK2Y0KSRpa2ZXalZlYyVvLzl7fElYe00oQz4pX0p+QXJkaEZjM1Z2bT4kKHMoTywk''@;'; put 'put ''IzFebXBvbDFvMVdhOmB6eyIoRi9GL0ZyK315fCQiXV1dVUN4fHArWk0zQD0iQ3A7anx7Vy5pKSU8ZHY5MiQwajtXTnsuL3VScnR7cGooPnZ0c1F0PHtiRWY6ZHB9fW1HV3A9Nms6Vn0+I0AqIz9tdXdGQ2pLSyxFbXk8M1RCTGM4OyM8X0BZdndSeyxvWy9BP2dCaFRSSlJHUDw9Q34rOm5teXI7''@;'; put 'put ''NEBLXkRTbipecSh3NCI8czk0W1ZWdTNsVFAyc0R5Iy4wfjdtNFRmREIoMzFacEhuQ2Zde2FnYFp9Zm1nJjFpYn1kbmJrPik+SD1GQjE1NmtDNmhvaWpxVD5AQ0tqR1daOXpHRHx8IU1acSZzV0BlNng4TlBnbyhsL19PPDlJNEBMcGAjXlBHIUtjdXYxVS90ZGhWLyowUEwwLyRGNzNfflFROzNW''@;'; put 'put ''WW4+ZD5JIk9vMUx0dn5bT1RINiluK1ZvSFArXnwrQltDP2A7MG1hREc9MEd2JWFgbzlseUQ5RzoyJCYlQGU6PSpncDBmPVUra10pO1c5UTtMcUxLNztqPmJwXyU/cmhVdj00bFA9UGwqcVt9eGspfDEpOXRmcDNyV20zSTdzTWcwO3omY3FjUjdjRnVFZWdbUEAlfUpHNVl0dy9zKiVTbkM8bllW''@;'; put 'put ''TktpVSRdPGMsLkNPMXZ7USVDIWc9TXB7SUBfOVlUOFFbczRHVEQ/TWt6eShpdVZ7TERifnImVllLLzlefDBDan5jd21mL25YV0QyKzQ2azRtMyVabzZWdm5yZks2elhSNU1fJHJveUhMMVhEJjMwYWtRMW9EV3hNdTZ2L25bSzY8RVt9eUFWfTgrKUVpcmgob2x8cUdgbVBoPkhSfl9vK3Mkdk80''@;'; put 'put ''PiFVMCp7Ly96JmQ8Iz5uVG5abk9jZT0pPGk/ZCJnc1kiKn4lVH5aIX1HTnZeZWU5TXsoJFZXcXw3fEdeQXEpSmVnRSRNa0U5Xn41aixdfjdbZV5ePTRUYXt2P1lGJlU5W1I3fDI9KzFjM0Ysb2QoN2dybl4mb2pUbGtOVC50V1FIMEQvUy4pTDZxej5SWHMscm9zZ0pUQ309P3paMWNeXzgxOj1D''@;'; put 'put ''OWZbeiJFNSV1bElRWkhfan59cGRkKGw/VXJFfn4+YXZ9U3NmdzI1OyY0fiJaUVp6MiFgM19scXduW2xOJWpMYD5vSTV5OzZhYTdGTCpbWWJlVGNoWDNiTWF2T0g2UG9EXUlWTD5bMSpjVX10e0huel1qXmdLWkVeaSxYZEtQYj1EQXMucF1QSDBeZ3tUfXFXWGlMVkZAdToqcjhnSStaQTc4QGdg''@;'; put 'put ''MS4oNVs1flo2VWg5PiFucT8rWj8keWlnb2NHaVVkRks3fnxVPyFlc2RKWTRmRTFQYXpwKyRUREM6Jmd4MWc6X1VMbjBZS01jZyUzP3lEXih0LkY/bT1pXyw7K0NlTEhldm59TTwkUXxvTFQpbj5GUCltUTkjaTd+JnxjI2x9LCRqUmpEYlVEKDlARCVuI1thZH1PdVQ1VWw4UmpGcnNVXy8yWVRh''@;'; put 'put ''eGtvMDtSMHFjWT00PGJlQ3cxbXElLn4xJXIkQXs3dl1gYUNfXkViOnFLV2pYZDVpQ0J1aEspdFJLcnUoSDpgKW5aK09fe3A3bXtQIWNWJlZlbGI3YndeOkdINkg5dnpxY3tjUkxbfUopbWg4MSl4OFRrXyJKPHttdFU8O1dzYGs/RCJsQVlVTGo/bi89OmAuaj46V2R4VD4vbGllJGxYSXpuaVBm''@;'; put 'put ''amlkM1RjdCU/VUhtQmd1OWw+KksuR2UxSnhdWTY1QkhbeV12bCNdLjlyY2NbXT9iKTZAVytdZF1+UF5qPzBOT31STEAqR0lPSXg1W2t2WWNFTTQvemd2fXNVWHErWj9rSjt3X11vWCRgWHU5P295ZlVNWk4iNCJXRyV+c0YyciN2QntXKHRHLGlZd2N2JUUxOVU6a2orXVgjNSR+dFs1NCF8NntZ''@;'; put 'put ''MXl1TigvdiUicj9PQkc9ZlQ8RnU+VTs7L05sekxqRW1GcS98QnI8RzFucUJJe3s1WS9IO3d5TFguNFtLaHw4RnM5UVBCMDkmaD8pYjN+OHA1VyRUanpRS2c0ISY5fjh8P3NoV1NIQSQuNEFHIlhMWExHT2h8KnYyJTNrZ3FyfGU3RyIzfih9e144PCJ+fVQpb3VtISo0Q01LWmBWZlNMKz5bVURJ''@;'; put 'put ''Kmg4fm9GSDdYKTUpOTI6Nz4kZnxVZFh1JWkzSXdmY29zZjBZKi4vMzY2T0ZKUj5yR1AxW0d2Slg0bkF+amZITG1kQToyL2FEPSk2YlVEXUNWZDIrcj4xPT5bek9BTiJRS14hQDEuVC8rbUo6d0BZUjZsSGYsKWFkQCgxN309TmMxNXJLNm5kelZpYzYrR0A2cT9mYyZecFcrRGd4TWVFbmBrREh7''@;'; put 'put ''KDByfFp8RTpuTzFNdmZ4eUYoeEglWWM5Z14vJkBnZFU4VlE+eV5rUUY3fUwofFRATihWZXFzfnBhb2BwUj53ND1FKlY5Qj5aaShaNzNdO2l8a1JNcyosKX1BZzw4ezlpIWdRalVtbWtRNlFxRiZ2MjVpfSJ1VWd4P3pjTjR3QFl7PTw2S3Y4U0llMXUrSnU+WCtJQ2VSK0p1KVZXWH1Ia0tzUV9L''@;'; put 'put ''RWVKT2J8Rm9ENVhAUno7eTJgel5ePCJhekl9aDxqW0sxJis0dDNeWWJOYV0hInFgUXZ6K1U9Kzc4XTozUHFIdzkpJS43e2k+WzNrUiZSdmsqIkpMPCpjYiw3KWYlMTxBVFdeczlOPTwqbGcoRyllSHcvOjJlTWwxKFJLOjRsSXJINjtWWzdfbCRrNXoiMUIuQWtBU0IyNj18bkE/bHFtU2J6I1lA''@;'; put 'put ''QmRALzR0UFErV1c2R2t4KkR3K2c1c3Z4UlosXUZ3IWdaVlp9b0I+Ql9CfG5GRHpwL1Qhbmc2Z29GJithdnhtUTEjayouSDEiLkRsV2wkNks/SSxZYChKX3hGaHVRPEoyWTN7VWxbO359dn0md1ksJjZSYTd7MTd2Vls3cGkwN282aSNIVDpKd0BhKFIlQj5CX0FxQiZCPjNBeWg3LHpgL3A8VktW''@;'; put 'put ''Y1N0UGlnZlooVEtPN0wrRG1rWjlCXlArVTh8cit1eSt7dGBJUGVvWWVAfVdPe14kIlE2SzNFeUJ7eShZW1B6VDIzRjJGJWtTSW9oY3c/WHBTJTZRVjlAK1k5aF5kOF9fckRQZSZYeEhDTSx3ZXc2akp6WntPbzYlc1ZEJkRMcGpDbGxyRHYoMF16elU0VEpEWi9xUHNrYjohTjo1ZzAsdH0hTF1b''@;'; put 'put ''SGQ7Xl4ifT45cEdXdzhFKT5HSHxwUDo0fHZYZ0gofjZILHNhcFUoemRNeHxPVl02S29xLjV5NlhDfnBkUnRVVSlBYGlNb3JWPEliZC9tLk1xdmMmVSlYc1haWUEvXUZCNXs2Q3NKNTx9TiVLaENIeSkkLG40OjNhP11KWU9VfU1ze1N1TzJbVWNEbHNIckA8VG0xJHpgXWNCYnFaY2J+Y0dOVmdI''@;'; put 'put ''LlsxTi9DQSkjOlNDKl9MJExdangyJW1TRlhrcyhIRDtMO1lfQUtzMWBJRV5WN2AyW1hpdCskPFs5T20qY0BJJnlyMEdDNiRhMzAxW0xJKDpDLk5abkJPSil4TWNGLC5zRHU8W103RGVzS35tP3JPV3ltQFMiJTY1KVY2Mj9oJTc2e3Qjazw+XVNrJG8ve2wuKyZiOSQ7LG9YJXFuYlVbV11eVTo/''@;'; put 'put ''S2AyamsxLEhER2JRPE1hIVZHXiZWInZBY3UqZVBOWX0zQigvNVZsViZJPU9zanldbFNzK34jLykjI2oqUXVoMzViYDBaXUhzQ3tWX35VSlkxISw6NjhpJlZtc0Fycn56XXF7SGVJL2gxITE2cERXRyVFI2Yob1VeZCNdYVFUJDd8cHFmU2tWcFMsMXdWIU5GUG1xPCksRWp2PnZMMDpMa1lae24/''@;'; put 'put ''YUZKITlzKF8+azx+KV9FaTtzRC80eGo4eUBhRnpVZTJtMjFxSk1xI3xKKUV+XTE1XjY+OWhyWSM/O0M0dXtoe21aYF1oIUpHW3Y1STttIjIoK3dAOHZaO2BfSGAse2BwbT8pPT5WLE1BPkttSjdNK04vdT18ayhjcDRydyxLeSomKnlSVUkob1VpJjgwNk4vI2FtX2Z+N3llTmFFSGMsTSRPZk9p''@;'; put 'put ''NVBNTzk6eXpafiV+ZCxbSXcmfF5mV052UjVMWjdGNSRDW2E5fHppe0pjPF9Wc0hfXnpmWWEjVndvNTwjMGQ+S1RPTEZgTXs4PUt4VyNjLz9qVVVndEkrJiVCYHVveWxmPl5UfCVRWGMiZGJaNDUrTmt4e19VZ3VMYWNuVjN0I00yXXgmeWxVcD5SKVJdUVg7YUs7ZXglUEZRelovOV9ESU9TNyl7''@;'; put 'put ''UXphYnBwYHdvPFY2K0A4bClOcWJiVT9pZCUubyZqa0hPUGIhVUJBXi5ONWFPODRQWio4QCtzaSsqfWV4WWIsZGREamZgWFZXPz17UD47OzIkJGM0IXFFUHFQcGFDeCtGNHBGKU5sTk5yIjhFP0RSSWkoOSNBKU9kJX1vcTZkWEpLMHkjNkkySjkzVnc/dVozIndeeVNSVFRgLi57KWdyUUVFWHIp''@;'; put 'put ''UGFDLzM7K2hyOVAuMH1mSWooL0ReLjFGXlI7d2phcGFpa1JsLHEkW11ucEtoRGReVko8Tn01I0txYzd5XVRuKzVnUmE7IXN0WWo7VTlYXnQpKyE6LyYqJmVwcCNDWW0rWit4KGk2VTY7e2p5P2ojb3UmXTY7PiNJI2w/WjJnIkpZK0J5cDc1SENZckhiWnFZOyolaFtTVilpJm5WPHAqaCV2Vkpt''@;'; put 'put ''NG5VI1l5KkxVMTJQfUsyY2pFbkYoITRxdm42PlZwXXZKYjYsXUZ3IXcvJEMhXzEuem4sS3Q2KkNLcllYRmtiPjV3NUd+Lih7Y1o2clhXOEYqWkhJU3xhdGFdclE7fGdXUVBHYSpeQWNRNFBTdmpsZCY/ZVEpLi5Id14pLjo2YkI/Z01KZyU1SU08cCpGPUQ9dCx0KzpmIXFfdkQ3bU5mVkg8Y317''@;'; put 'put ''SFVtZXBYOWYzfklwIXxVUGNQaEpLZ1AzY3RRUDBSczRUTmomdm9dfWtnZEYsKFkqMiYlMiNne0gvSEp0IVBwSzshPVlwbiQ9Nl1LTjQwc2pgJXxwJmpie0xbcVI0c1cjcTprcDJIRVI+VFdTV0R+K34sMERFPyRLe3cmW08xMncvblsubj1rSGxVI293UzNSJVlRaV4vaUs1cFM3cSIsOmpwejAj''@;'; put 'put ''TmY0ODNbJHY0TXN4bF5NM2MvQSR7JEVPNVtXVTM0WjRzS3d5c05aWF1DWVs+STI2OzFSKkBgSCRddzloRnZ8TU55UioxTnBIcEBnXWVRV2woPW0wVW03byltR11SQnlNd2x9ZFRYT09eS3B1YEhBeSxESD5CaUUpQitdIWg8OVBSRDxJcU9QZiZSOjQzc0BMRk1hTnFZYzhiMEY6byRSOlJgUmBi''@;'; put 'put ''cSg/en1IVzVmT3JJOF9WOXVPZTplTT0laCtQOWpSenlsWUckOjQyd3doc0BDUDprZz1YUDpYVT1nXyJocCxHbVFCLEddQ1tTPixzUj13NGc0Qz9BXWZwO3l1TlFEKXZVWWZOMzFENjEhMS88XzxfRWY6K1U9PStmPDVlJHpHb2M3Pnl0WyZlOjhEaHVOK242bGhEeSYiYHpiUiZbR0c+NmpFayxJ''@;'; put 'put ''YEtWXjpOe1NGdzl7Nk9tMFtNYFIuUi9HfWg4MTRRfXImUDgxM15ffkBhSjVLciNQRD92ezgybVp1SW52PSQ/en1hIS9kO0ZeWCY6VHtwPjlWZW44VDNxP2Z5MEYsUVIlOnlHJjp5N0AxWEJYNmV5Kncrb09HRSFlZ1ElZyl0OktdPH5gOzsiZlB3M1c+STQ3PWh6SnJiSG96UUBiX10pUXlWezR5''@;'; put 'put ''MGNYT2FrLG5zcWtaTW5wNmVAalIxeGd0SSVnTm8iaDpvZHdAQmI0RFl4SG1dcVp9LElEVDFNI3t1MkAoTyMyXis6YSpBPDY+ODNXWUssMmFAZGJ4aTh5XWFNYDc9MH1KTUxsflFYLkxtcVQ5VDx+MEprVyZjR0JOMVkoXk84dyxqe3NLcm1IJDYiWV4rRTwpRVp4JGhIN1QpVClfNUguUT5KUE4y''@;'; put 'put ''ISYiTU1UMG8mVDd+Xm4oVEVJQXk2bS5zIWVWSVF7e0QydzpzeEYuISNbIT5fOGFZbWlPK0g6NmxbYnZnKXorckk4TWlyR3FJdD9eMTBdVXRXfWlQOzhdYm1dNF5DSCtEZVlJQH4oSDdZOSlhLHJIUEhEX3ZAQjpMa3g3NWsvVzg/MSVSb2poRF1VPlZmMUFvJlR9aXR2TzEjPUEmWjJgcCE5XV96''@;'; put 'put ''YTRXdWZfNVFRJmMjVWV+SiF4JD8ybi4rdmViLF00az0pNEtrfkdUUzN+eWI8d309floufSpGK3Z3UyEvcV5ybExocDRETzprZyw/NmJ5KnU3TFR+OjRkIiRyenlhfjIuMlQxZyZGVH1Tfm50S1swQ3JTdVAxfSYkM2g5JDtfYkBUTG5VJG8+PWwxLEQjZlkvMj5EdUgre0oofjsiPXxQWUlsMk9G''@;'; put 'put ''fVoqMmY+L3Yrdix5O1d4cXtuIVBHfTZAb201NFIsVlFbbnphK2ZNOmBIfl1qak1NUmRRTWRkV0BWblhPV01peTZrfVM+VCgpPSRnVG52ZCIzLyhqfjAzI3x2O1tyLHNwOmdCJldpdEJBNTNza3FpXTs2VCU+K0w+cFUqV0V2YTleRmo/dzlMRiRfaTNiTj1dPlYyJnRban4iaW85aCFVNjEvUWhu''@;'; put 'put ''YDl2QXpae1AqcClhQDJjSSVzNihnN3NoVi9AMj93Q2UzLiY8e0UmUDdLcldbczFQcHwvMjA6NFhNVktIe1VRRW9qeSZyWU1VUVMlRXdMamR0UW9KIlUleV13ZDRiZ11yTFpFTlJgQEkxe1lkTFcmbmZeXzReJWE3UUBxOkYrRDlhYiYxW15XSWxQZXd8eHwxSE8+SjUjYTdRPEpdNTxeQXE4aDBf''@;'; put 'put ''JV8rKTBMTSM/eyQpV1Z5dVtSeVtrTzxKX3pZNHQoPn49RSlsbUVkTkw0Xi4oIXx8OCZmVHsuaztjT0N4MC5nU09RPDZbLlksQ0gid2FeYHBbXy4vWWY3NS4wTDhdZmN2flhBd0VKX3NhbSVSZFVMP3VKLjooaHEyJGtlVytgN1hzVU1ifXx4SHJORDhRcHl+M0tmOERyPXN4SFU3djBWOkIiQCM/''@;'; put 'put ''PUE6QDY8M0IqKWxrM3AsMDFxYjI6eGh5diQ9eG88clI4L2ZqYiZIdEZoZkVZdz99M1g5TXk+cnhxSSlDUHpXIkI8QH5DLHdUcXlGNWJrcnRrYV1PY1d0Y0t0WVI1eFJmVGJxcUFVQj5DJFJHRyY4ZlhVfkp3aERQZVopXUVQZUIxT2VwSFBlck1EOChZel4jX2ptRDUqOzk/WXZTJi4oLH0mUlNr''@;'; put 'put ''R3V+JUFGbmA5OD5WQ2ZPYWw1b0NLOEBFVCx+alY9RUI6IXxCO3s1NnxCX05Vfjc3QSl8dlowSyViK2wwVzljO3h1cUdsLFs4M3MvZH1hWG8lPi9PYlFUb0kvL09iUU5vO1FuMGUxJT0lLDohUTpVPS4xaDtTVlV+OGM5VXorYyh1MHRJaiVKYzshZDVXPXdkX0RIdG19UmVBaSpbTzRIN1IldC86''@;'; put 'put ''fjlkMmcvWzg+PCFjTW8kIiMmQC9ifnQyLzp+VjdBKVtbXn5wME5JaCUsQytPYlFAKUh4X207YyRQWEE7e2Q2SjtMVj9ubyUifj4wZTQ0fmU3RmxUb0V0LEpsOCZRPipoKiFwZWBSbj05LHNgOk4xL0BvOSY7SWhfNGBbcn4zMTB8UHxsVjVib2JbXV58SjtiUiVHWj8qfWw1ZjBZKk4qTnNMNjsp''@;'; put 'put ''PStMc3h2SEcpeClyd24rNjAkPTw7Ri9US2dXP0YvZTBnZTkzQnY8amNMKHJmTDJzV1VjOCNpMn5KXXBuTTtibzhAU35SOiFIfng2MEVZay5YcnsuIlJwfV1APz9YQyVHXWZ2JilQXyt8cTh8dn5KMk01MC4oaWRdKHhYTz8waDBZeFhAfmJ5YVZZXzR1JC87Iz1mTTw2aF44WV5eYGY8ajNPcSpr''@;'; put 'put ''WUImcUlwfDh0YitfdS9bLDMybmdgdHl5OVomKjh9Z0hkczQzdkljMjR+Qk5fQnEiWVhdPj4hPiE+dW00diJqQStfQi82IzpOeT14PHheRVNMJG4qOCg3ImovMEEmZiYjOl5jMnBFPlt6L3hVdXtTYlh3KC5+eEw+fjhJV3NrbzdEJj1lZDhrS1R7cSZoZXl0cXRxQSVafXdKPEptaVIrUCt1SlNM''@;'; put 'put ''dXFsJko8IT5vLlVbNW9FPXtFXUwlYyV+PHhnLGhNfH1oaXdwMFNvX30/Ij8+JVgxPyYjOmk3WTF8IT50fiVMfDc4fG46WyNAIlUiZ0JbP14qQXhRXiZBLkFrQVNvUiNYWSleNUp0IU10MUZVIShyfTA8dnZZIzJXUV9xZipQYVlERE5HdlRyNS5xd1lBcWo4QFl6e2taSnckT0xbej1SfHt1Olts''@;'; put 'put ''KGcvanUxRVVRMTAvOG0mJk1DRl57JWRMRG16aXFpWE1VU1ZgZitCU1cvVmJzdXsyeXc5PTtDRHMvYlBXYUBTY0Rac2pHWm5yRWt8NX1UbHd8Tz0ucF1DJj1CX2IyI2tNO0kmQWhZK0BddUpnRzlTfXZpdDdsVDEqUDNaTFE/MCNdVGsraj8hTWdMNF1Dc0ZZOF5COklNPE0yVFdGOCF8WjtdWy5F''@;'; put 'put ''W147JSRCZTxHc0EsRyE7WiskTHFhcjExfHlnT1MuZkBdI1JXY2hbdk82V3l+YGt0QndNKy9YfVVbWGUmdFR9QkwldCRlTkZWWz1PMiIuYCI/fkpFVW9xaDRAfXxMPnglb1YjaVIoPX4ocjUvcCtuSTxwbnIzIXFXJD1YJUV7dmB9U3h+K3JeR2toXT99Um9LYlQ/Nlh+bGZIWHQzanlyLkoreGRN''@;'; put 'put ''MiROOjpFfVVPKzhNUzxvMkMyX29Mbml1ZSMkKTRRSWgsLF5xaGxiJDkzeyZRbE8oRT9AME5mbGZuWXJFNHpHLkR4bXRzdj5RV2IkInFRcTJGcltNZ0lXL0coeWh8e0UheDJFSzFrUEdkIiRkOXU7cFQkRXJobiNDLnBqc35XUngyfDxycUk4L0ZIJiVRcjgiMFM1Lmc1MDpOK3VScW4hMSUvS2E7''@;'; put 'put ''bWBFNUJ8XmF5fGBbcWVHSiswUTYxSyVtXVJNc20lfVVCX0kuYVdLO3VyRktDT3RRIyo8a2pUVSkiPSNmNlRINlEwL0NYfDgzTls9JXMjVGB7fWtnIygmUEdtcjhqLj8wdWo/SVU5U2QzW1tSMH5sdClCZSFzZFo6RWRnQT54PjNpOlN8ciU/dFM/aH5MQD1+KD5sJG14Yzw8MEVfRSQlK25zd0Bi''@;'; put 'put ''Wko6Xl5RTUdILD0/bS5GPWF1ckN+X3c0KjVoSD45aHpAMjU3WTBIbTRMQk47KStsbXU9dFZHZklfK0JfRHxOSnRTUXpzdShjXiRfQDRCLnA8b1NCa10pUCFYYlc1ST8uTERCVFI0MXtKb3I4WlU6SjtvdS5GQyRMP0Nec3VxdGlIYixnLHteW3VQNX4rNCVESU47MmwvPyxzJGZBWkc5P3JTeHg7''@;'; put 'put ''OnZ4W1tVPDp4Oyh9OT4+TDkqeGpVbml8JTAvTyVrKm9qJl9FWUg9N1pRbms3c1tlemc+Lj5Ad2wjTHdITmNIciJ1NVlnYH1yTnYoZ2kxZFdQY3osOXtWRUF6RDkjaXtLIXJTPjN+SUIuRFQpVFc+dnwpTil0dmU3OzMkOylCZT9gRCFxTXx9W0pSUURUNn4wfUtNcGtTNE1fR01HaURaT2ZFL0Aq''@;'; put 'put ''R2ExKyZzW1J8az55clRfIz55clNuan5OOU0hQ2l0eUYhWXRCRzk4OjZwKjJlMjx8TD99ZGhiUClYel1xdCkkZm5Ne3smLmd4azFiPTFwLkg9P2wkaFtIfXFnbjo7K15lNVNBU31fX2hhTi9xfGQrXl43ZjBSUGdjQlN4dyoucmFIfU1OaGJJIW8lPFB4fnlwJm9ZYntnSj43bzNBWylsWntYQH46''@;'; put 'put ''dloqUzB1flJBPnFefH15L2goX2lIfHQpUD89RFghWzxLayY5UClTc1h5Vi55US4xKlBGQiJVPFQ6fWE1ajFeX2U4ZTdIWCZwfDE3RSJVKn0iSU18SVg9JE9xRCVyPWJGaHEpInFaaTgyZTdJJG9IVV59KCx0QlhadDE0dWhyQ3A4eGhlfSk9PWB0PCJ0WyZJPls1UF1eRGdnfT9LWCZ0KEYyMXI6''@;'; put 'put ''OCVqUjsjTjI9WlBqdiM6X21DcExrLiJ5QClxNzlEU1dTWnNFSl16SDpgfTs4RTIxPGB9XyF4TmJfK1ZMcGssbmhlN1dpZWlyL2FMOEdgckdEIXZBVmhfKCVhe01qVl8mYmN+eG1uRjlDfUNjdWZ1cDRxYE5KfCw/YyZvTkNZRkR8QW82X0BgQH5qbEoxdFc8RUdQPlZiKG4ucUs8IWhgRWFAXmQ1''@;'; put 'put ''WDtAOXVGUnszS1p7dkBlRU92MSlhaXVlfFBKdTMmTHQmfDw/Nj92d0deU1ZyYGVgXXRVLERfUHA4VDVKeVRldnZEZi9BdzdCNHxEN1Ywc3Q6WjB8eTc4Y31Ve1tYYFE1aVhqWFBON3o6SUxDXWwrKV9WPnloQ1ImQCl6cXF+fEtaNy8hXVErVDhDOmBPdXV5QktVaXIoNyp1dnx+QT9TdFp9YVUl''@;'; put 'put ''cCNJdDBaaXl4V3BQMEFPSng+PDh6PWI/TGgpPk57eXpCKX1FKnM6Xj5xKCtMc0gueGkqWTtCX1NWLH43c0A7OWIiJDM/fDx4SD5saUBWQnxpU2tSTCJwPWI2L3swPmZnQGxkbF0pMl90X2t8a0JNKz5oQFBWOWJuQ2hlSCwvdUVBWkRPMnY4SG9kcFF9YGI3fC46aSZHcCJIKTJ4OFdpSTlpJGch''@;'; put 'put ''ImYlR09tZGN7L1RyOllXTmgyWkFBQXVXJmE/QW9JZ2N5InxMSyp8eD5PUSEhfEdPdihXZTVVbXgsLChAcWlOLCRJPWloeEFBQUFBQUFBQUFsQjYuXWYrZHBGZmQiWlJRcmdiLykrXTkybj5WL002aU5oZWVZeEsuK3I5Zl9JcmorWnYsT1ZKOCs2V2BbaFpdUyIrYnVIc0tiLlsuLylKd2kvLjMq''@;'; put 'put ''cGtyfjZ7eyRNVX1mYjMqYTpYZU1LYXpvUXRnMDtgPl0lbEpLVzsjKjRyNE0xcGZ1XSY5UnYoe09aOmI+PztXLiQxcG8yTiQpQnVlV3VNT1ZeLmRJfXA9aU5eJnF9eVAhZHtXJmRINlRUe2tSPT9AaT1aUzs1JFZjRUE6JT05c2UmTHNBXT1aM3w2RV1QQm4pOFBiUCx1ZUJaNntSSjFEajQqP2Yp''@;'; put 'put ''NT0/WntYIXMwRCVARWkvL0MoOEZdUk06IXB6eHVZVmROcHchZClzTCwoQ1o9Ml1ffnV5eilbMCVMKTkpSU9SJWhmcmQ5SihoY0l3ejc/VHA1e1RIZGgwXjNoWDg+Wl1tX3ZGZjUzc1daOjBdREBXOys9L3Z7WmssX1ZCTCxxPzE0MSUlKyVHQj5PeXVHSV5FZXZMPlAsXlc3fEhvP0x0TiEhUkhk''@;'; put 'put ''ZjhCY2paNTJlcUVoJlZYNmk4YSR8KjxCLEgvezBIKyp9Pnx1cVZvZ0ZCbl9bM0deITMod0MiTGJ5YGhAZV1ZViNga3BYUDAuRj8oTn1nP1ZTUX0+MTdgfGBoKlMwVmhwTCtVVWZVRWJuVHFkYU0sWFRackZ4UWwxV2VqLDxyOk0xQD9gU20oXzhsT1dyJGJJOk99K2t3dj80XUNTRTllOD5rbTss''@;'; put 'put ''SSpgOjtTWVFJMk1XPGpxfVo2PDk4Y1ZpPnEmWlBsOTFtUCt1MkVTUF52USo5Ri8qVUc9eGQ3X2hORntvQlQ4RDxTNUg4XU1ZNDEsYmR3fjhiXWlMMHoyZUR2Kz4hWF50fUBMdSE3QHRRKENVTGhsbSU1WXhveSRdP3E6Il87eCpQJD1tOTtiR3kvVChpSEMxZ3dTYytLQ0t4TTxNXW12QGNLTSxu''@;'; put 'put ''O1JWKmAyMUVsUTpwUXp+cm9RbCEpXVhycVJtcm49aEIzOGRxcWo1TmxkbyZxXTVNND1IJUlgPCo1UkhbMjIiZD83emIuXWVGMXA+L05wR2s5WlJZOjErOW50emRvL04ycWE9cDgqRz1ZKiFaK09HMnhgfSthSDJNODNYVTR9bVdnMm8yXlI+L1dkOFhbcmd9Ojp7ZGQzVCpDdUo0LyRgfEgwaUVb''@;'; put 'put ''SE9FRS4iZC50YyQxWSYrJEVpdGx3fUJAeTl3Q2cycyY6WjxFcUR5T2I8X0huTW9SODU8NzVScXhLNVhVOy5DT3V9ViFYPlB4S2R1Jn5iMm88UDx0Q1kqTDQoSFJ9WFYzLGoiZT08U0w1JHJNWCxiSF0vM3lRc3R5dFtYcSZHMUFkbmZVMXkpc29+MVVZUStoPVp1flsqdCtscWo8ME96aFJwJSRG''@;'; put 'put ''dlswfihfWnxOKyV1Xnt9V3tmMXE3XiZfRHoiRk0xV2E1MCJzRjw0Iz5bdE9vUnFAeUVKajdhbCFhOTlCPHNkeWk5S2ZuTX07KiN4PSsmZC5gdURySmR4aiRVLHcqJEpOZ15ZPF4+XWlrYCV8aGZWdXUxej4iX2l+MWx8dzpXZXg1WzYlIj9+JnIuRlshRDNnLm1Nd1Z+bV5TPyZPO1drenVvMGVa''@;'; put 'put ''JHJ9XV8yR0ZVPCJjT1VYSGZ9XyV4NSthRD81WikwTyIjb1JURyFLTWRXJHEiMXtfJH1OfjBaVDZreWp5bEJgLnVEUU1raE9lMl9WMnNFWzl2ajhxYSY7W2RJRkBBQGJVaFJaKjlfZG9ZeGlqKX5saC9odFRyRzhQTDVVcCRRcHVFPjRNPjhyT2k9WTN+RDdgUU5ebFY4M1lEeHtQYlg3cGlLc3ds''@;'; put 'put ''eFQqOUB+dmdSOihWRF9YKnM8SG40Km14OFVYTiYkdlUkJikqV3FqWmZDIjtsclBAT0pGQFc5dzpXcnBid1R7Y1dPN0lyJChgZn02Yz9sOnldOEVpU0QvJS56USl8JHB8OXRRJTt6UW8lTDJRWUh2TjNgZzJIZ2pdQ0wmMVp+XSkueUpqfHk4QGNMdj9XKjpVP05DZFc4Yn5ldFAxU21kWTEqfWZ8''@;'; put 'put ''ZDArRSs9PVdeNXR7cU9LUCk6dV5Rb0RfY2NJdzRhWDJDSzQoU3RBU3x1TSRyPSRHSGhLMWxJM1VmTzhvJHZJeFpKITA0KmRZTH5AcTxYcVU+dFNmdSMsWERjYVVZd1EjLnZ6PlZHRFIyZyROOmRkWnVoM2A/VntISzJGYWgqRGpZdS5uelBuVE9DKGtVcmZhQFI3Zj5GQ0QxNSRfal9QNVZCdTpW''@;'; put 'put ''L288T2NLbGxEeix9ejc2b1NXV1l1QWYpO0QmQj18TE1SSSt1KX5HIi8hbD1pUloiJCtVNGlTLzI4dEZmU1lPUnR6RzB0PCw6T2V4PVVWTG9YZGJ4ZDpEKHQ6JHtXXi89YHZKbVdoQVU0RXlsYFUwPSNSM0pjJiQsMjJPWEk3MTlQNHB3RW9edS5UJSk4TXBzdHwmcUwzZH40VWd7YUxxaEZdWHhK''@;'; put 'put ''Q3ArUGQpUitacmltMWhfX1BvdldfSzRyTUdPT2hNaV55OG9RfkF5Kj9NJXBoeVc+L1BvSjFOYlpeWl9YOHwoJSpyN2BYPmt8YXB7d2ZPNUBCJTdVW35ubH4yVUQ7UlsoZV5kWChlaUozOlJQfTMxSCxQVXcwVkx3an4kWFtUMDE/VDpZYENyMThIWTFDe341OzF8Kj8oYFNCdW16TDFga3MqezQy''@;'; put 'put ''Jkc8M20jcl5wNiFVVzs6LzUsN1BAenMufmhCPkgpejJlYyEuWnNnUHJeQmBkbyV2ZCpYb0NDZWZvKWU9aixXWmhdQnJyUl9ISWxwW09zaiwzVS5LVmA8RSxSfjVsfkJgYChjKTEmeV56UGB5Ji4mZCMpLjFCbk0mOXZMKkhiWC5CSz5GayNUUll2MnV1d0k8QnFpNURWLy9fWXBQcClQOio7IWY+''@;'; put 'put ''SlBmK3VvZzR1Ym1SWDA3TT92eDFpY2lSPS8lTllhT1lUUkQkVn08OEZNOmZYY2FOM1glSnNIeHJpeUVvOWc/ODd7eWIwPk9weU42ZVRhLE43JCQxI0xoT3ZkR0Q6NH4kTSRLYi9lZkJEODt9cm5SPUJSeHdGODQ1e187ak9LQFgkfipoL1tKbC4yViU9PklEc1ZZKz85JjkoVCsrNHUsbEt9UXVO''@;'; put 'put ''eExkYj9iYDR+Mj9tQGA9LDdrKHolfltbXXF6T2wsdSplWkZfJTVpM1lrOztWPl9PcXVwOi9OP3ssUXBdND08dHVMVEkwajtZTGx8PkEpXkh4OWtQUkcuJE1TZUVBR1llWUxXPntXfj5uaVRKP1lZYEIqPm1zfUk8Kl16Oj5dd19nMi5jY0BLcCtdeTAqbT8pW1VUfDFAMiNtOzVBRDlJcE99dlhB''@;'; put 'put ''Sl1BZWBBdThLTT5hV0MpJVJ8YV47SilGPVc/NUVqWSNxOVM5bjV6ZDM4UGdSSjZBeU9wOzsxfltxL0kwVFt6KUpddX1fYCQjfGxJMC98djZNZzV1NGU6U3FXKlU/UW45YylfeSZXX0wjUVAoeGhGXzJpYzJRdnV3RD1oZ3BZRWpASyNKZTdXPCpJcnF7W3goIUZVVDdtcSFUSlJMaDhXVVY6M2Mh''@;'; put 'put ''d3dzSFFrZlMsNGdpeUVOcWBzVUJSfC9DI018QHNSJTw/YUIhVWl1fHZZUF0lUzpwOEN6Rlo+eStheEhlemtXQTRVY3RxYjV0MmV+bHkuKz5hO3Q9NFBIfmAzMjBHQXImTkQ/aD5fZjA4fWZ7ZVlHIzt9JC5eP3V7US9zWHVFbThTPFR9ci5rYTIib3s5enA8dj9ocjB1L1AzJmlNYnMlWT46aHZj''@;'; put 'put ''TSRONXxoMlt0eEdzJWJzcFgyTW83eSROIThvUztkITJWI1hdTkNeMVheOTBEcHNLe3FvOUg+KWU4SVRgKVJtelBdTVE6STNPPDBgQzYxQF9APXdXIiZDNGp7TzsoPHZGQWFsSlJZZl9LIiYuYktAWSptRjtDYH1lVHQ4L3I1Qk9jQ3FjVWAvQy94R1dBe14uZnRUZTp2bFldVD45PCoiVChRJj5Z''@;'; put 'put ''ZitEWFA0fjFHN3Z2ZXorIUQzQyxLanw/OSMxPylTOWhrflA+cyRPfTNydVZSb3hzVitUajI4ciVQKj9xbzY/NTR2XW9vNi9+Tnd7OTNAK34+aHtYRmt+U2JHJmwmeVVRUWpqXWtzNEg6Ni41PlN6dU0qOE4iYDBQXyhUTSplNEFWYCJbIVMrdzBmLC87NHFfSnZoJS49STR8ViJtdjY+Xl1PQmF5''@;'; put 'put ''c0xWRDFnelN7RUdEP213TiQ8SS5rMjs/V0QrP2cyQzVHMEVpd3FWc2hvfUIwU25gYyt4bzVnIUtVTzs1YHhgNFUsbT4oKEBge1ZaYzN9JTNuY3cpcUZ+WERhQmRkZm9NeVhNdDZIdl5hfU9Qc3JTZjRsVHxXa0wrMipFJH1yaCJDfjE1dz5ZJCNgbmphMVooVlUpSzB0LlUqeCs5dGEqYG0rOXYk''@;'; put 'put ''djRbWzcwYihMNWhDTm4sUSpxZnx0OjVuKSk4Z31iUFR0MzRZKGA4L2haQGdudCZtTGheYT0pYjk7V3RPYjNLeUglS0prbWI5RlJxLyhCPEg1KXJlXj4vZT5mQCxKOzF0T1I/L2o9X2I9Lyt2JCtUTTAzJWlGQG5MQ111L1s8a01ASHptdkBvbms1X3ReMVVgUSlXfUN9SUVYWzQ8UTglSD5Ba3Bb''@;'; put 'put ''Tk4rK3JmcyNwK3sleSp4M2xMOGUlVHcoSFpLOlliTDBWVnZZSkRfSkE9VSw+eUo2bl85dHdXdEFRbzYxZ3puQkZjUGlGNGFLJGdpa3xma3AuOEd5QGF4fVl3OSEmPDpoe3h2bGphUzVzNDd8WmZFKkk6WjhycWkpUk83JV0ofTMrey9zYlsmUiQlZUxFXylZWiZdQ2lMZVZpVCxQTnMoI1s0IU9h''@;'; put 'put ''c3IvbW1qTzB9InIxemZvX2M/W2h2Sm9FZWpScW9mMDVKRnx1Li9felhlR2w5VzJQbVglSUBST2A6Xi53Uz11JEQ1N1trX3hSS0V9RW4oOzZnJEFlVW1xRXUpSUZkN2JWaVZ6PmVZall7bU9KSl5xb0lNX1s7NU5XQ0RhdmsraVBbSC40RThgKmUvPjJkOnNiUm54OFc9WjIzYWw1UyFNMCl5dGxn''@;'; put 'put ''NHE5MXFxXUNvOlNwO3ZPaV1ldj5uakV3eXZtT1JySURdeXt3OD9lOTp7YUUzOCs0OmguOXU6UDRdRlBjS2g3TWpySVZebm13dVcyanF0alpBdkJ8Qmozakh0UyJfRHBacCs4RG9adHRvaGRHRF86RypwXUFnSmdbSDxXYTFZL3t9RmpfNHh4YXZ0Z1N2YWc5STZXe2U8UmAvb30kKnVpV0ZhMSlF''@;'; put 'put ''RmtXPUpZQF11bWlDSXcsSExEeVBhKlJfbE9CcThOc3BrUktWcWJzKCt5P256YlM3OyMxfjd5aV9JQUUmW2VvXVlmK1d7aWltfXgqZHBFI0VZZmwuU2EkQ0wiWitGeG83UWM1R0Nicitue1Y8OX1+MUc5eX1yWSl6dHM0VW5Ha25mVktaaUYrIXk2RFZwUiRbbyFsMF5tQWU7XVFJaklrKUhpbCVe''@;'; put 'put ''OE99aD9JaUU8TD5IMmY8Y3BbMmZMUyVbMzQwP21icUVbci9VYXE8Pl9+KVd1dVhvazI1OktAX2ozW1t8eEoke0g2PDEkLyw4fDo5IWFFez5abEFSLHN1cnd3Ul84PmJtVS8oKDhWM340SEFhQHFhfEg9NCFUNC9vKldfSFNxPzlAO0BFRmpuU3p5U0YsV3kyZj0mMyQqdlhAeEw0VHVFLkVAVDUx''@;'; put 'put ''OVksNG47eWUmaEhIS0FWNyt8QD49aFJvKkpiKGxTaENneDZ1Lm8mMmJpVkx7bno3YTl1TVo6dE05aCF5X1g7NWtXOGx0OE9OQUZIaE5MQl8xNkp3KEh8OHo/RUtNOkpJUWJfUDk+R3FKNjEpcVt3KE4xWnVgRkRdUjFJTjMyM2ohfDRrSTtASyRAPDY3eTMzJjUxWVNFdkRHejJzRytLbk10KjBG''@;'; put 'put ''PzkiXlFNKUhQW2Zea2ImUmIsOkBGKilvaiZvTD0vOllYT0J7JTI/NCE0MXx+JS82MitTbTlbIkZBaWZqejs5a2RFOzRtIjt4TWx+OEo2YV1HOFRIISt5cH14eU5RZEA9NCM7MzhrOk9ve18rSzsiUFg9LitUWWhRTUJSdGlmaElpUyVGJlRlSGhXdkRDSTRDUDg+blo2K0Z+cmx2Zlg8Zi9yYj8m''@;'; put 'put ''cnhWSHhDdDowSE01fHhBVSp9Lz8wYVtfejRAIiNFRXNjI3NzYDdNInZ0cyheIWRtWUwwRGVXZXJnQmpAQl1TOSYrdUhEY2NHRWdSUUBsQk1qU1Y7aVNXI0JUT2Y0ViFZLyNQR2ZsdE4uNylQZzZkSTVEaDd3fl5qK2VsTTZKQktDI28ib1BGW0cuPWt8bERgN0pJeStCV31pYTImWnF6MlhaRD1A''@;'; put 'put ''R3lEQjRIZWUjJjM1LjtOU3d9TSo9VHcxcWNwSDZFeEwqZnY3TUkpO153XiFnUGN5Mmg2KHEoXUNnUWRjTzFxVXslTHxjVytddkR+YjFJN3ksP28/bWZSL2luOmhSOWdMOl1Aa3lAYiNje1M5M2BtJE5uL0U4U2ddRndhNzRaQWNeVCNNVk8mT0RkNlpVXkpKX3VUQCIhOjBacCZFPGk+QWRTZkR4''@;'; put 'put ''TiJaTkpxKEM1bUYpTzNzLkhEdmYsXmtMcyskX3g/eVJwPzUiWlgyJU1XTlAveEdbfjJJU0BeblV5OWJUcGp+XjVZY1lMcC5KayUkOmpzIjIiSGIqd050JSRqelMifHxxTX1fPE1Te218ZVlmQFM1dzs6dUo7TCJ9Oixgc0JkY01VO2g8MSRYPlpgVn1MRjRkJHNGSH4zNS5mYEUyWFNRRTBCeCJw''@;'; put 'put ''QjY3XlA9WVo8QylAcnpIMTdjSThxSWJafXs+bTR2W1FyOEk5XU1PTy8hR2dfeWV+aG4vTH1qJDdoNHx6ViFpUHk4XWE0UyhjTjBoQXxqIW19U1FORnh1fEolPXRSZGQ+QDJZfE42Y1BzSypwV09BWCZJa25VdmJVaU5eKVFbJFp2XUkzako/eX53OCFtMix7cE5JUkwqIXErWyJ8O1N6VC4xNzY4''@;'; put 'put ''c21gLnxRJiwxXTxWNDl8WDJxfTZ0a0IjYiFMQFBvfTp6N0w/MkM4OlM7XTR4RE1LRS5CdTpMcXduW2JleWguUTpwJDNdM35nfFd2eEk2WTRuJWJlXkshQlMvZSVCMFJHZ059aVIqX1t3dX5daEdCcj5dNk1UMFQxczslJDBsQE9SeXEkXVBPSCRiQComOHV9bW1xZEN2dFZpb1ttPjlbRVddPHBA''@;'; put 'put ''ZkRjUFNVcy47fl5gOkgqSDk4N0M6cEU/LlZMSn5RJX56QDZDSlB7X2x4LyNvV35LJUYje3k6bUJqNy5BJXxZPmgpamk9fVhidzQ+O1c7OGlEdHUmZUQ7N1k2Q1VxNiNCWDNYejpwSU1+ODAoRFNzRHVtRWpWNUY3Ok1aZkMmQVR2cG9ITVsqU14/K3VIOTFsJDluPmJmRmA+NUhCTj0/Xl5VRCpD''@;'; put 'put ''RWc9cmpaRHVwT1lnR0Yzb1FTQlpAJG17W31DZ0RXeHgzOTxXZ25xTnRGREQ1Uihjc0Y+YzdabmFrM15CMjtqTEpqdWtqQGRBS3wveHQ8Q2E1anspLzFpfmJtfE1VfVtAbkl7b3Y+bEhNKG1gZ3AqJnlkZF1qbGlmdHZOOzghbCZLc2EjZTtoRlNWbWBCOHZOcH5RT2Axd2tvZyteQV9VfjVERUJk''@;'; put 'put ''RiVHfWtMfUBdTiY4JHZlUmwhUT5FIjUlbTZqKU8yTT17dlZENExaLHxYLjZbNUFvSDVQeXJ7TFQ2IiJJaHBZVnRvLkFmUSQ3UzZicTV0QWo9Z2lANSxWISwvX05sRExxKHYwQmROO2RbQVlqeyU/LiRWSyo5UXokczlqI3AxT2VpXmFkak8iOUxAQkljcnxZTEV7L1NbPGJ3SV0+PyYmJEx8YmJ9''@;'; put 'put ''cTMwUVlVRzZEVi51RmNEfXFDXmJ8ZV9taH5PNDorRXdleSkqUnxWKEBCLD87SzVjLnx3YCh+blpmTm4kIWA7Kj1SSWVTNkI3KHszMlNTeyhXN2BWSnxqZnQ8PTFSeHk2aHQ8VFMvXWNEXVR5PSQ/MmsxcEc1dzxRYH0rREBdQ3UwQXI1Z0VvRmQ2Y3pgRjtSej8kYmU2NXh9SiVJUXFsVGJ1cGxq''@;'; put 'put ''QVU4eCFtRm1nIi9CKkx1Ky9TPG48fSU7Oz09N29GPSxLQ28xbi9adkh2ey8vQDh2XWwlPk8zYTlEYiNDPk5fb242T3c+fDBDbWZwO3JYeE80JExvIVtXeGs3V2lJLEJzKVQ2I2xZbzd8SC44ZG0qSDZILmpNTlZkcEwrOW5eeGE/Z1Yxe18yOEo0JmA1I0pPIVZKYiFHd11fQ1dmd305KVYpYCVr''@;'; put 'put ''Jl4/S1k/VFR0UWcvXSEvL3UjKitEbyQ+NCZjbltUQ0t0M2p6U0pSYXJVWEc+UjYwWzclMTFVJihiYUVneURqWFNNXjVrVktyTUZpNVYyPE9BbHs3TkdrKztmPmI0OUg+V24waS9kTj9ZWks/P0txYUEsNU1AdGl1ODhuNGApcnxPP1BBUV91P2A1OWkuUn16dDVYVUExSU42IV07bHFNaGt7NCVK''@;'; put 'put ''OVtDSCQ9REhfNilSSXJnKWExUFY4UEVOYVYwLGE6Z0U5Jms5YH1VV2pKJmJlcU41IzBPK1QqRX53UGJwZTNoKjZedlU6PXVKTl9PUUNdOzczTWcrRD87K11gPHckeixHSyRpS15FVzBmfW5GfmR9dDJzLjA/c05mY25IZntDdzc6JVhOUCx2YTRjS3kqZ2c5KnNQKDNAYER6M3VHYG0sI1hfSTti''@;'; put 'put ''SU0vLF8qXTJTPFo6Ujw9KytNdDxFWS8xd3Ihfio5MW50UGI2IVJPYTckTyMseUo5dVpLdC80WEk5KiopIT1Qbz1Icj1JTXZiV1F7YCRKeT5jWHFKSyY0P0RiSVJ4Y0hDTW5+I015RzxXNTtiQ2J4IV10b0BdMSY5IWR8NE5mOSoqR0Q9d3U6Jk41ZyUjO2xaYSw4cCNiZ2REOlElL0g0Rl46cHFO''@;'; put 'put ''IT85MmQ1PmExNEcpO0B+aj8sKSxReSs7IzgzOUAqdjNqO3J9bz40biRnPnByO3p5eTQ0PTI9bEJSNT8rbGppO05KLChUTSw0V3oqNiVGL2tiIUpRV3czaFd1THteJipAIW53RFlKfWcoL1oxbGx5UzR5XjkzM28rKEBkZEFjfEZlSjxUfnwpIWQvKCRYakdNXXQ9XWR0Qzw3ZWwofkgsOXxfSD4p''@;'; put 'put ''aFo1akAxZERWJClqbjhrS1BjfEIpKkNaU185WmoqemooZSJHKUM4W3JJK1kxdm5iO01hIVQ5REIsajgvYz1dW09uP1EkSW0wPVhtc1BKdCojPVBlZ1ZAc0UvPCEycmNBTWlbczhXRjg7L0M6RERhaEk5a3sqSXcqZHFuMl0pZColM0d8TTQrMUYrI2klaGIoMXFAMlI7d1p5NkVBMEhUKW06K3RE''@;'; put 'put ''d3wkRFZbIUMkdyl1VHhIfEgzZG9uVWtjekdRakR3Ik5DYk1MMkNFYyMidXo3MkIuNT9jNStHRVhzeiIqd2EqO3t5aDJtbTpYeSQ2ejNFUyIoZDppfkoqQEl0bTp8UHksRDR8MS9XPXQ1KmJxfUtQLlFOaXRMSzFsWztSS3tsQV96TV4+VkRJI3hVQG0vdTMqaVAxZFdUYnYqOllCKjVWcV5uPzJw''@;'; put 'put ''S31RfkBUc09acXJ9QWVZdSkhS1NOalZwJmJla2RPVng3U0t3dFdlQ1FdU11YJmpXYGUxeVV+UFNNciNITUx5fFA+ZSh2ZUwsVUdPbk4qc0RKMnhCO0pXU2I4W3c/elAyVSROLFtqWFtKM1QyS1tIYX1OQDpQdGBXWDNaaCQyM3FoQT4pJjlmLDlGJUA1c11iWTx3dCxhNkhLL0d9a0k7aSNpYCFg''@;'; put 'put ''SygvVVBCW2EyXWsjb3hqX3FoJS5CTSQhQzN2UHk7NlFeTGsydXBmfkk3TE0hPWBaenwqXkk2WGV2T1NrRmJaYVBCK1NAfE1CSyZkbWFGajouRTNXbWpeUCk6SEF0aj9LbDM5b1EpVF0iTi80QG94NnljPzNvPWxCX3p7W1cjSXQ5UGBdUDxvdX1BSj1veiJpc2wlTzN6TERPKlEoVjMldl9+TTFx''@;'; put 'put ''djVAMV9xZGpfOFhqZl9NTEtUNys/Yj83M0d2YnVHVD4lbF8saCJJWE50U2praWFkW2A9W2VOS0ZWMGs+O2FWXl90V0RPVmpYO31vS1B8V1NZS04oaFVrREZpXXYzSk41ZnhBKi8uXVZyXXRfV2oscVYsPzY5M21qbSNuYU8+e1ZURFVqU2B7O0h7bj1+Zzg1PXxnW11LYzNfVm44bm9HLGJkTWF6''@;'; put 'put ''KEJeWThrWUZaUUpAUW55Qlk1cj9CSjpxaTFjZitLblZeUTMzVDFtdUlMSSNlfHJ5K1BLLzZNZn5hKFlnUzJMO1pqVXNRX1RqNEQ1PXBfKmwrYm11YGBKZDlSUTBuSSs1KS9pVWJpeWcjZXE6R3BoQTp7VXNoK0UoYT9EMjRyaGRuejthMGc3aVpoU1VIeU5MaiRlOFRddEZITVNYaStQSyhaUXc8''@;'; put 'put ''Xi5jOTR1Q1dvUC92VVdheV5qIz1ZVVswRFJPckc9TTd6VFovL15faGk7eyxVUyZ6WX59UmVkPkxdTUJ+OGpUZSE+JnpMS0cwaW1PWDxGdCl0aDs1P3U3MG94ZUN+V2k4MEpqP1RCSmslJmQ5TUdTZEViUUgzViNoMFBfNldKSyJLPClLRHVFbHNHeHkzUS5HKk48cCkiVik0R0lRW0c1ZyMiQk1j''@;'; put 'put ''R0BSWWB1aCU6WEpubFBSN31rR3ZNJkVBcSMrflRXOCk5WSpzYEwzLy51TV59ckZIOigqbDFNfnwvdU42US55Tl1hMkRiRDc3SEslWF5scyg1Qk41bHRIYWQ1bihvekNUS0ZzYUxrIkY6aCFLfXNWOFJRRVE7U1B1MVphO3VyX04jKFUue2V9K35dYkAvJD94VGNZNS9fbToxLyg/fF9HYTB8SEoh''@;'; put 'put ''bkJGandITEwwZFNpJT5kPmtENlFXezZ9MXFHXUYoVzUkLDEmOGpOTDBHJUJ5S1UiLmhDL0prYCw3LD1jNExlam8mJX0yPiF4UFRVdkM2dXB3SjxLelFAbk8vUSNmfGFGMiUhciguP3pvNV97cThnZCQ/QkIoXi9YRklgZlt5UVJzYWNvM2tmPkw9KlNfK1hgS2p2KlYhU0d5dH1wZDhaYy5ZbHlN''@;'; put 'put ''OmssVGwkKClyIXFkVFMkUSVwd21LL2tZQkR4SiZIVl5LVD8wdnV3VERxK0k8TT07N0d2eHZ7R2xtVDpeWWlwRFpNVjk0Kk8kOyNFO0RnR3tjdl42PUhwSjMrMkZtVSpwTmc3bHJ2O1pvYixxOSVNaTlKOSp3P1AzR0QjNnwqdWNVcj9FOkRlJGcyc1R0QzRMaClxR0klMVsxYkxhTDdgempMZkl0''@;'; put 'put ''WlV5Iio5P3AhcVl0S1BqeGYvVlo8enFidkYuUi8ub30xJS5RN3Q4cFdbVkFxLGhJTnN1PD0pVzM5Pyt+P2pDRl5tQ2tfUjk7R0FpWFRLTl4wUF93PCFyfVovdkw9WjNGSyNHVnAoTmsyaT5ZWzlCQ29FPzxDKHVDWHVSRG5vSG9kQTg/b2FUJF9oYUgwdnBCJCZnQkZmZXRydHJoLGd9WE1nQzc2''@;'; put 'put ''QWZMV2dud18jJTw5e1c3P1g3NEhFYF1kcEh8UVZYR11TNlk0ZC4vXThFJWFMZV5PJiFQNXgsXWFadUR5MDJVSGlzPDNyelFbMlFQWHlEQWtyQyhjM35XbEFLSmZecCV2MTgxbkFXRHJiV01xak5NWVtaIjNGQ0lWczZvJmBWc0gkPz9sZEZtaT9TMHsqL1VMQEZxKGgkNUJDay5VLjMuKnZ1LEAh''@;'; put 'put ''T2xxcHFwNktDcGVVVCYkeWtOZj5nKV5xMXIqO1MrfVRDPCx8RWgpK29bMzt4M353NjNwX112JkQmUywmKXc9e289fkNLS2V4bzxiTWleanYwPldkLGw4ayRSQzx4OFpdITQzQEJ9Pn08SzQ6JGNxQFBsa2EsdndAdUNUOkFnZkZ4c1U/SmlyKjhUPCF3LFE+KndnIitvXWl0JCxxVT01eyRRbylw''@;'; put 'put ''OFYxbStUNnguMXBVYk1NSyJBcyxxc2BUfiZNKzsoYjZicVtlIUpBTW5QUkcuPX03NGt4RGllJXRIUnFSejtibkhWXjZwKVBOeWR8TTtjIkR4R19STmNafiJKWzdIS0FmaURhPmFZSmAmJnZ8N3ZZKzhaMzVWZV5VPlkkezBuTzFNU2lUPDkrejo8Wz4vVFNJb08uJDM2eCNZJmh9QzQ1UStXZFVI''@;'; put 'put ''JUZFbWMubjI6SmpsQlJ2S3hZdntEYEIjNEFlY0BDYXxkW1BZTyN0V0VjVi9YQWlOeGBQTDY8YkM6K0YlbnBSVyg6cUlKQyxxRU4zdmA3ejNQdUEzdnkjX2B0QlNqez55REF1bEljOVhqeUJtTFppclUwPTowPCEqQzIzamF5W3J9XykkUFAmKU1fd1B2ai5WSSIzcGZjL0ljMUk7KHF3O3NVe1Mx''@;'; put 'put ''TS5+KTBxLl8hWD9nQG9lOHMxS3lMXXozckk8KzVLaVhZJixhIjpjdnt2VTt6XVFaSSZ7X3Y7U2EvSXZPPXY6I2d0QUt0O01ISiVhJVt1dTJAeDx3VUl7LHc2TmhFLm1HME9gISh0KDJuRT1uNDt6SGl2O2hfTmMqdl1hSH1ddDhpXmIuRz56RjZFeiJ1QGArfmVPLF0/XmFLVjhZP1Y1amFQUmBB''@;'; put 'put ''YXs4Ki9lcE9ZVktJQSs1K0ZYJF4qdHFKSjhqY3tSSEBMYWx+MlE4fEdJRSw/T0FUYSMxNXZBSXlId3IlVnRTdE1LS11+JVhCbDNbcnNgLF8yKzlMSGBKbV5ibyNbP1h5RyRQVXA6b19tUUYzInYiMSxwNTR6eSkuPjFfNmM8YHRSIUtjeUNuJWZnJVovUV5sX25uMFkqcGJoQ0B4STxYVU0lWlhN''@;'; put 'put ''QWx0eEVQaEVrLzljMiNWUzhiKF1EJGZSKV53VURobnFHVDp8dm5gfUFFPmApN24oUHg8PFE6S1F2MjdkYDsiOC90RT5wdm0qTjsyJE5JakszU0ovKVlWZCxhPFpkJlovcmReP2V+dFc5fWpzPWIleUQ7RmNwLCJRfSl8YkRnZFJPYUo5JnhNcSYhUiJAdkgvVFcmckFufmpuWiVAS1lnO3h9aWJn''@;'; put 'put ''NDkiflN8TDNLUjN5PXVhbCZGRyM5b2hCOWhhdHd4R1IrP0gzb1V6cChPSDM/QmBSLjd9X3EhPjJaMFgrTjQxImJmSiFDdF1KcT9ueyQqY2xRVkxIJjN9WV1kU000S2MmLF5+U10hYDh5Vlk6TV5De3o4RG0wUXZSJnpaJmIxcDBkci5GZFZDbVFsZD1wP11LWSpkaGJVYF53SSg8RWRhNVB5NkYk''@;'; put 'put ''Pk9CL0FTSHFeSFJXPV00bjpMMCZufUx1Z042OmJkZjhEW3s2NXZmW2pyaF1IV3pZOUVefmR7OEdxbmB5N0NhQmpJUixGbismJj1LUGhLcko1YWU1Wk4yY0FaIyVsREsuM34uaERZUj14YzphazghUDhoZXE2YXxMS3x9XjxuZnsmXkleP3hpRH55OyI4YEJLL2B9bypSWiZLX1EjLHZyREZeZTRl''@;'; put 'put ''RlQwRG1Ld2UjN15EJDlkeiptWFswJWtuVXVxdl0wbFpJcU01KExnUkp1eSNIW1taVEVQN3trZzFoW3MpRlE8PTFVJmBma3wjfElLfjNTM0B6b3ZmeDNKOXd0XWVqUHNwP2UwQDBhYSJZJnQ8U303JF1MdFY2ZVgwYnJmO0U0TV8vWkY2TGZ3Pz57SSsyb2pwZT9LZkwrSl5GTWBWdHc3MWZOQyhd''@;'; put 'put ''UiY3JFFCbzVXOTltM29TZFZwNVE1YCJyQnVZV21fKXgiR1hdVkwqbHxuPUlOK2x4L3N+RChXbll8MEowKkR5Zy5qek9lfD1AclRiQEcoRnVTUlRWeGw0RkhKPm5fPGxIZV48MDxSQT41U1slJVVSamRZc3FEKSQhWH47YyxmWEw5NXZqO0Q3RD9GYHJsMX5LK0VjZz9oO3BJIi5rZkcqS3xfQGM/''@;'; put 'put ''fFUod0taKWQ6fjdLWDRFMXZDaF5SNGBER2tie10kcX4xIl81dXBTc1NhSzR0N1I6an1iYVFBNiN1VC5IRm9nR1liN3BjV29RdHc+O1ZsMUs2TEJgNDM6YXc3bFFYRjc+WyxLO2tgJDg8T0leJXNXbEFhZiljVUFVXSZfK3ZXMj4sX0JKSXN+KnYxRjZVfCpJOWdjYE88N0Q7KzZfZ3MxZz16X2c0''@;'; put 'put ''a2ZXPU4qJkw1aE4ldVZAcDQwSHhdbCo3ekpQOjhER3JObWJtZ0x7bGdld0VAO0hidjlIUlQmYD5QJVh2XiI3TiZfW1sqKC9IVzwoUG5tMTtTOFV6aEYzOzMpP3F1PkVJVnE7TWZaU3twP3BHR0NCNiVxI1FDZ3NTLFU2RW9AXVZUeW1MbSNtR18mezY1U0ZkYSRKMEdKZ1dwNF0jNkdgZmA2OFpI''@;'; put 'put ''PSFQNix3YUUyd0Z7RTs2YWlHKlQzNypOZygldXdqP01LclltelFvUXo2eSNrfV42LEhTQ3NhWUNnc2hvdUojeTQ0Sz0rOXJuPF4oXUVVfkM8RTdCWldlXzx3Ti5JWXRVSG0/bjlmMkNpZSF+O35BK1IwcFZNWnBzL11HVCYyY2c4K0lfQEQ+OzVeK1AlLlhTXl10P2M7byMvWWkuej08TmZVNDt7''@;'; put 'put ''VUlfNWVuUlZBcSppRWc5aU9CQEU0djBpZT9oSWZnRV9PTz8/enoqLil6MUNyOH4kMXJfR215UX1Hci9WeEpTYmBXMF1QYXFMLkBOTEBicihHYTxGbkk0eV5bTX11JHxZWWRFbzY/L2xeczYjaXROfiIoTkZGQ3NDYVU/cUJ1JDV+Wno+S0k6O3ohfWQrVV0hRTlOYypXUW4kcVpaVSspTzZ7WWps''@;'; put 'put ''U1VVRiVvfm1HPCE2ODE5JTQ7TUdrIjVrczB5SGtPRD9SNXEjNV5TSnlXJExkdyh9TUFGem5wcGUqcClAai9xeDUvUChsW25KRHo1KWFkMDwpKjFMeE8pJmwmPFYkcFZCcE5hPkk0LlolVF15fjtTVFN8ZlM+QU1+UldiLz50MkJPXnpMPyRmOTZpWSYrOnZMfSgreFJYUU5mSVVmeVQxPnJLe1I5''@;'; put 'put ''WSJAZCksdUlFTVNINltAUnFJSzVWcSNXaCske11UXW8mX2tSOyR0W0VkalpbbFBbfCkuT2hVST5eNmdPQXVsYDNsaFk0Oiw0LHIsPHA4dilEYVFHS1A6VCZQPE96K1AqU3NFU1RRdWlzWXdXb0JtY3Mhb3FNWjtZLCo3QjVWQVBbbWRvTnwjS18ydUdDWld1OHZlX2VndzM9MGc4NyMiTGdbJVpn''@;'; put 'put ''c0J4fklxbCNGaUcuTHNHZUw7ZEp3O1YjQTZhTWJ3IUMrZ35qZCJ6K3gmN0pufTxvdSs9azUpcWYjTmFYXlAqa15RWT0+MG4rYEs3ekByMndkRlVlPHdrUnlTbGx9fiNsViFjMThMXSJjcUNRKl86NFZoWnAhcTVSd0U8X2hBeGpwK3AlaGdYXkkvL1ckRFUzSihmcG14K0wmRC5BViF7ZG90U2lA''@;'; put 'put ''L3o9cnAva3guRz80QE5RRVZBVyhvSjs2KjoyQkZOKi9pdzpgaHM3cDEmY2QrT2R5QSZ4US5eZDpBT2VbNHthMyxVX0N5TkU5dFdMV2xaNU9GLzRyYjRLYlVOMXt2ciVNQ01JNz8jZGpaPkw0KnN+aGcqUTZtYTAxdU9sb2AuSCNUNWkzUHRUQ3x1Q3JKXUtENWpOWzFlTUJQPSVRXmxtKnJFeilX''@;'; put 'put ''Pl5vO2kuXlM/QDFdVFdGeXtwPG84OSg0Y3Y+cGI8JFNWPFswLFBuPTQ0QHlgbTtTNnhkZ11ePUR7fE4+eDMqMF02R0VmPnYja1t+UzAweHFSI3ViNUtUOTJIbzU7Z0tKQE4ld25NKVAsdkk0Mk1aOi8kdlQue0BVITJKZU4kYXBsIlQlQzpvSj5xLHsrYVhfZ1h0UTQyL3tvRD9EYjA6cyFPb0Y4''@;'; put 'put ''bXhWdFNfQ0kmUkgzRDIuZUUkQVhuN3leMHVmYD0xIzppbE87bV07an1fVWxwI2JFWTA8Z3RZb0grfCkyQnd6PU8pPGBrKTMhLj8xR1prOCp8T0deNXRqWkx3cF46bk9XdkFIXStQZnxSM2d+TjN8ISpWXSsiUlhvXk41eFZvdkJlaks6eHx+XyJVXkV7Rj95cnEqPXIqT34vSSFVa1cjeG1PRkpZ''@;'; put 'put ''WFVNazJjOlojdTg1L35LVD5YRz8/LmFPV21fRFExI2FxaUg9ajohRSRWS0B9IjUicDxuI3shO2hYSytIczdGT0luclk0Okw4L1QjMyhSVHhnZUo+NVc2bjElJFFIRiZqY2QrSXJxQSpuTDB9Nzc/QkJZRiVyRyF2Vm0kQjliITchdDwpaltJdls/Xn5ZQWNwVkwkeChIQyNtUXUsRVUkWSxHRmQ9''@;'; put 'put ''cEpVY2difF93P0V8JDs/UDlefFM7WCtkWGYzMTNxcVVNb3RPR0srV3lbSFQxOGBXfHVAckc8eEYpelpCcV5ENlN0UFNJLmxvYndqKEUpMU1PayZqLCpfNCJlXSReTCF0TF1XLktwcCkxMk4xPj47Zjh0ITpbZV9qI0lCTmZ0V10xKWMyXlh9OF98ejcrKnViXjZYR1spdFtkZFojRFUhVDRJaFou''@;'; put 'put ''bmJVVzkjXWp1RV4qQD4uZGFDL2paUUZ+ST5FZChoQ0lqSyFEa3BtUTMwV3BgUmx1PV57YVt2YW5uNXpRK3I5M243SlMqalhhLktOOllgaU1eeU1aYTRNbyMueXcpaiYiO2tfQHxRal9VYkBBTDA4QzVAVCtXS0lhKmhKLi9fQGVzaGl4PF5VdHI1bFN3aFIuSkNucERlOyEzfDJ2KW8wZ3dAbyp0''@;'; put 'put ''SE9yLnxUJTMscyhEMFpSXndrNmFTVXsqZDZBNWlIYCFvMVk7NSxVZzlfa2IyfEBdSG9aIW15NV9dJjg3RiY/M2s4d1tXQSlPNzwvPSRFXzEydVlWalg0c2EpLjkreDIialdfSFJPJChEcTVySlNJanpTVy9DcF1wYytKQEBWPEBpVTtHUDB5RVdUWU4od0U3TkFnajA0b3IzPD5HdTAuRzl2eUNV''@;'; put 'put ''aX44RCRzWnIxSDgrVSNhX1NnNXEhOCkxYWhZfEVwIWNtRSpnb08rZlhjcChkTyNEcyhddlo8c3tpIldVYDJbemFSWiR9ZTxUeDs6XUQsS3VmcSMzVk9NNlJ8QS5sQyFuTUVxWTI2WnlrIi51Y1slTH5NOG8vbE5aOygvMjo4JlUrKlMieGBvUl9qc1NPK1YxaX0/LlkpXzVuOWhIOnMhKmhybGVp''@;'; put 'put ''OFEyJnspVlt3bnI4bVRGfUU+fDlqQy9NKTolWnJxVW9rJFM6TlJ+NXp1aUV6NnV+aHBFMiZZdnd1MnFwO30yRT08RU0wKS84SEJmNi9eanJILkNyZis/cW9CKjkxTmwlaiNZNC9SYH41Qj57LFlPRSN6YU5fTEhQKXNZazZOQUh1cFpIXlZ0aXo9aFNMW2ZTKFIqYU9FLmswNXpzR1BPYSVSek0/''@;'; put 'put ''X1N+dVp1MSV7ZHpwLyYrbDhjeGRrIk8rMmk2R3U/ZEhdS2pmRDdkWyZnKjpeYWU+aWZqcjRJfXM/Wyh0M15uMzwrO2gpYjdfQnF2P3NaaSJTZTYoZkpWdUR7fCFvKihXYU8kLGVAJCluJV9nUmVsYVQ5Z1IrLno4XU0rOVN7OmVPUDNQeSZZW1lhPFtuTlFjY2lEV0NAfVVPeipGanxNLjVkIk14''@;'; put 'put ''bXdfJllwY2g+YnFgWng8PmV1ZClXPy9OaDR7ZkhIakk6JGlaR1UzfnpgUzpWYXsyM1Q0P0o/RjpdKyVJJTd4QiFoeWptfjxSYUJeKlY1KGBuZ2I3YShkO2hEJGFDQH0vaXlwa3skNGlaJipyRGw6LzxddGdHLFtnYSNzdiNsRGByTWRUTUhGND5YLCUueTsyZTpnc0QhRDFJYkVJRjBPIWU2OCpw''@;'; put 'put ''ODxkSUZZTEwoJjFGKTk+Yn44RyZUZlQyXUlXeXlvKz9xQy4zblhIO18wNyspeHZqJntqK2tkfVhLIkt0fmpZQ0picXNCUDtLSns1USxIQH02cFk2P1NLMkZedk1GWThCbkRaJG4mcng1Pl9QVDclSW50c19VbWpQTHlrSVA2YTMvJUgqLi8oMmRIQ0p9XyVvTll+TjZ+bSRhSkpTZ2xLRklNOkJP''@;'; put 'put ''RjZ4TWMzY0RtKTVRI01hLnFeQkchZjs9QTVjL189MGBTNEgocyhOemlZcDMrbURManFhTltJNVNHclBQREleazh7fH1EOD5DREpJRVNvNFJGfF5CTjFgVStrQypidjdFaDh+MXxsdiptQmpCJXJTSzc0PCFHSSNqSWJ+XkIiOWBNUEdycndBYyFxWlhlaGRVI0NHMFR9Uk43clBEfn1HKkx5ZFFp''@;'; put 'put ''MGhjcV1TcSt+O15uWEM2WXUwNFRgNTd4VEgvcyFzeyRhUSgsI1ByejpGbGJ2Q28kSkhrfTZWSCJuQFIrWUo4c1IxSSZlZ2J8aVlyY3BdfnV+PXMxeGE9KkprKSN8WytlfjpUKWU4NXBTZ01JZCw6QCh4Wy5zRkhNZi9zNHxUQ25sUHZXK3RhK19re2VdNiNWfXhfcUhUfjs+aE02MSR9RXgkSjp7''@;'; put 'put ''aTwpJn18N0p+dikhTGFBQ3hka2xWN3VOYVF1elc+TDdsdU8ydCtDRGNdJig2ZG90e2ltKzoxcGhxTEJOOUheTks8QyE3OXRpJTNOd3RkRlk+Y05hOnovJXE9KnpRQ1UhW1YkcEFCQjMqKTJAJF9LeWZQTk0kNjQkdTkwanxZTWYhOCZ2dHAsQklIJig/fChhXW0/fX14ZjM4cEB2ISlRTylnXSF1''@;'; put 'put ''digiWUEhXSFJa1lXSjlGIm9GZzA4QXtJQktGQF5oTCtxLmZGMGpCPGVhU2tJQFY6U2I1YzJASlEqWUhJcWdGKHgyaSIocjRaRSRFNFsiYSJDZEBDU0lXMjVCYWc7UXNUOGgvRkZlV1Z3VmtxTHokaiFjaUtVKH00bD4wZDUzdEd+eHpEIitbTDA2WmJiTSQ0NjFgTyEqRUBZaDtNRSxKMntXTFZU''@;'; put 'put ''dW9Md09FWmo3YzYhTTorSDcqVld3OClrYzt6ZGUrKGh0IT5vK0cvNXI6I05ZOzZ5SHEpSk1uK11+Rm5LJU05ZWhXLlghZCxmelZvRlJ7YkFvVSslRG1oTTdMdC9saUI2MFhpZ0lnPEVzUixbcX5qIz40aXZUanNqOUt1UGMmXUhMMHZYKDZCPzswe2ZoTSJ9U2p4eWlReytlLH1XLkpqaXEudVld''@;'; put 'put ''Wk41NHchcGBgSHElSEI6OFpSUCVzeiF7cl5rWCQiZzB7YFleKU4sYFlZNmpGWCFbazV4UyJCTmVSTDs4UkZDRmhfYDpmbk5gPzJEJD9NVSJBKn4hVD9rdXB0MSk6Jm5UMmBIUlFLPz5PXnJaVilSQ3E+WEdqX3FHXV12YW8/LDo2c1gpR3JNQmtBTm9RQCVgaD5wK1tpWlNLYXIvVHNuWGRwWG1H''@;'; put 'put ''fUUqe3F3SGchYyYrQnooWF5EODRpYmxqPFY/e3Q7PF9FIVFbVGFnfX51byRDWVEwfiQ1I346OEwsbX1TbGZ5RUVLZH5EUlM/KHFlOjRqKjomRmE0IS8paDVlQ1RSP1V8LH1qKzV8bSpdOUUsZS58LGhdRW97a1M+KFF6amdPUCs1Y0J7KjlmayEqT2pFKkl8ekt1QkNzMHRZS3tMMV1DeH0mLCN0''@;'; put 'put ''VX5YVmg1Onx9TFNueCkoSVRxQDRRMWdOX2RbT2ZFcTp6OlokS1dqbm5rWHU+TmpJUjgxd08pQm89SlZPfFkySnJnKTVWNU98QD4qIm4zInNAYk0/WyZ3P3smZDRUUWohRS4/ITsxUGgmQUNIelRJZnExUlBdOV16RlkuOmFtV2xKUnZzMU5wcllIZiImYEo+cm90QT9gJTUmJmlWbnljPDByb34+''@;'; put 'put ''YFtqZ04sITNBSz9CLFUkQ3NmI0Z8SVJVYElMakRDa1t1aixiZ1Ehc292I0p8I0kvYDk/NGFSVks8eHZKUUcjUSpJXkpyQCheIXwrXlQsKipbP2pbTkR5dUBHMzB4QC9LZyx0VVV2PEd3QmdMa2x3SnBZfExRR3dDQEIxI2djL1MkUzB1JE9nIzppMVUyRzpUfnRfaG1eI302b0hUcXEzdC9nfEJO''@;'; put 'put ''XVQ5RTxhLC54WD5NVTgsIjU3MmRNQkQ+fH5RJn4hcElbd3RDOShlcnkjQ3ZeRWs3YWFGM2E2cGY2ZnxUVGh7N3U6ZyRXT3FAPlZ1UElVUUdPb3FZUFpEN0J1ZWRxKy9ILE58UTxaPl9yU2lAQlNpOlRMNCM0e3s+VnVLcGEjN1IpJWVzbi5zY0d+VndKV0NNbHp6OnJFU3hfIXpDNHEreF57WjxO''@;'; put 'put ''MnJLSjpRZjFQQCxAUEFIJCkwIkRLQjMoKCZ4KjNZO3FYWHZlNWg6XWpAI3x3dFZNdEEzNXwve29yUz1HaG86UHlOZyIvQCo3TiZhWWAldkhCSUx1KkxQOEE8YCR6KmRJV01xNyV6WVlSOUEuZSRHSHo6OkVRLk1EUnI4RGtxT0pGekBxP1N6fF5jX1lRU00sYmJaRjZOMFZXUFVYImdKUUtHSDJA''@;'; put 'put ''dW9RdD0zNThNJHduJU9pejF4PCJ1L25wK3ErV3ZhJjc3YUVAbEw3LHBkVW03VTA0M3hIKCRib05rdEhUeXUySyEiUF9bMn1PMVt5NiRbeV9vV1Iydzc4fTpWPjtdSTZAZEJxLjI+UEpMNVNgbj9IOjtEMyM8QE9gOjBIUEpnI19PZkpyOnsrVzptcjt2IyF0MH5JZyJVODdKdkZEOlszfHo2bSxR''@;'; put 'put ''MSZLLF85UyY/LCosPXRHZGZJKkJSOFU2OlEuKjthQjlwSGlYJHNpSkxEelJEVTg4U2JGUDArfnFPPj5xR3BJV3F0SlBJej5OI3ZyLDxQREAxX0BoSCFOJXxPKSFVZVl7fE1VWVlTR3AvfDxhM0J6PmJyez5uIVFxPSJhcVBxXUQqKHVrPnQoRmNTIzZIJVEkOk0kP2hVcntlUzBibX0yXkQmNSpQ''@;'; put 'put ''dzVLTTVjQ3JQQF9zT31INXRhclo7VVV+bUlgd2h5Z2h9N2FRYlBvIXNVSjMpOlhOX0RIbFBAKmVjN18jVFJJRnA+NSEjL1hoRj9RdEE1S09OZitHVT1aX1FIYDReT0ZMOSE9WVQ4Lyx4SW89cnVQMjEvIzx+d3VtdDdZNnZ2PC8jfDBbbSM9WF9VSlJsLDRjbjNRbFNzZFUhOkxLZU89V1hIWkxr''@;'; put 'put ''bHt0SS9Xelp3LEJOSDBuWWp0MVdGT1YvdjsqNndOP0t8RHMmNjpbQkYwVDo+UXRNQkZ9OW8hYzZqKHxQbCxALG53ajkkfSx5UmpDUns2ekAjQCJAI0g2Qk1gJj5gQDZDWi5Ke3RKenJAaihUPV1pci5nPXF0c3RzM3dGPCR9eEA5JnxdM3o2WF0zSXNufiF2KHV3SDkjdDl4Q2RXaGs+cSE6TnI2''@;'; put 'put ''cm04TiVyVVJlfHB0fCJhSis/WWleYGNnTW15R2JPLGpAfjF0VEdLZFBHI0tyWz9UO3w4a2VROXspfkp5aHd6elslZGolIkZnJihkUiNATnN2OEVbYkUvZkYle21uQURnVCtra0pbUG1LRENJZFpEYF8uVElTRVdge11fQylQcD8lb0JNQ1ldeGg3ZjdXZjdCTXBQeWE0blt4KntdYn1oVSlXZixJ''@;'; put 'put ''dHdQXSphdVlqN2ZhRDpEeHxkNnxkMShjNT58VlhNMkxzRTMpSj0ldTc4P0lTejhXQiVRUDJwJEwlVUQ7Ol0pdDg5V2F+Y1NVQEZhWHlEIWNkdXQxSjNhazshMyNAN0s1RTM9Pk1KI2p0Xm1EJDEsVWNdPjc8KyV3Lmp7W2g2UXMwPFlvbGBiKEg2IWF3XTFaPipDeHVxWnlPOkZ3M0w0U21sfH1U''@;'; put 'put ''ZVNObGg9fVpNR3xzUSpvd2hXS0lEdCtqTDB1PCZwd1JBIiEzakJ3KV9SJkxbWFV0WyFZQ2h1al5UbDVdbFpueW1EOz0+bEdVW29pKXtSIWlSYlRWbElkJXU6bl0wbTlBYCZSdSNqJF5VQWdoYmEyRDtzbExpeWhzZ0gheTpjc1o4WSUraVJXUmZZbURmX2t8fSZebGpoXn1EWHRNXUFXdGRUMjlv''@;'; put 'put ''Pk1vYiwxOStOZytuWURRciZRaDZ9eiImQVVDdUlwJkQ7WGRHcmA0OGRLTDtfSUZKLEZVYytpalEhV2Q7QnB3WVtTYSt5JGRQQUlbaSRSNC5vbDpNQGh2b2syd0s5YnM7cF9uaVpgRTh6Z25fSVVMMj4odUB5clJvcSkzPW5HQGVCeWM9W0lgdFYwZCtBcmgmd0xVPUprY31xPj1Kb2Rwalg2NkBJ''@;'; put 'put ''VTNjVHRDXW0raEtzKi90VFZZQEVvWHxHPD5Rel1qYSU5MTMpNitEIVRPa2xob3E1UCM1KCxlN240SDooR2xNYTkrdSgoXm5fNlhJWG4vV0NXMFRhNWN5b0s5JmU+Mn4qJG92Mj5BMyh2MngmeDs5L3BSMiEvRj9nSU49ZWJ+cH0meGxIZDgrb3goNSNRdnBIWS5ePkZvZ0tuR2VlO2pVYypITFpM''@;'; put 'put ''MyxzY0dRLCpaJls6azFuKyQ0S3kub2hTN0cxRnx+QVA0NChoXU5HfCxXVElaZTVEU2doTkh2Z3pIU3ZZK2FEVCFDLEg6UEw+RngoTio0MlNlSXxnQEVEfXE1az52Njopc2VZTSQvIltfYSNnRXYqWnt0di9le31xKT5XV0AkLyIjKi4wbV4iUikoW106ak1eOzpjdDp4QG05ME1DfCU3Q0tGLzU/''@;'; put 'put ''L1pTUENYezolLCJvTXYwcFs3SVRzMVVNWSJJUGRTb1JOJHM3LFsoOHtMJH1iQ0JuL3orP2NXWFU0Jk9kP29ANzp7cVlSWUJxNlJGelUhY1BiOzZAUj5QJnNFe24ycipPMCpyJnpCPXYrcyNDanRYMklEM09ibEdhT3d2bk9+OCUzPyxnPX1Wbk1qMXpoVGg4UVBsNyJTfnt+USJWfn1na0t4RUM6''@;'; put 'put ''W1NFRGh0OXo7eGtaYnouLkpsSzJiWmI4biZiK3hvXjJaM3F0bXttXSVMZTtOaitZcTxfeEVLQ01BKlMpNSgvY3slMFtwbWIjczI4R1hGVF1IaFpQZmJmMyhaaVdUaiR8ZDxvRCRzSjZSYTYleGckOGFKe2V9QVl3OW1KJHNiaSh3M2ErSlZIJTU9ZEA9aU9RLF09aklgN3RFOnZZJCRvRyt9b1NI''@;'; put 'put ''fjxgVmxrOHR0W3pkV3hPZWF9c2g8UihSWXdSbDpoJCElSjxdfXNnbkt1R3tUT3lbSSp+ZHhLNUxMS11IRmNzY0U2JnhbRyt1a05qdy5lZWt7Vk5fMyJuOyVgcVFYX111diFNXSg4ZzQsQ2xBengkWmhxKyxgWHdgdTI7TzojeDhFZnY6IUpiVWR+NjV0YXo4TGV3ZEBaQ0YuV3hvXTVGajo4OmtR''@;'; put 'put ''S3BqX3Q/MSRacWZta1k4OFN7RjtQSCojPyUjLixXUWo9d3JuIVlTZU9USipYd0wyQXA8UFJNS2Aldy5Wd3NsW25WYFdAa1BkZTN0Sj1aKmk/ZU9AJF5rU29RSUpeSUV8XTxMajAjdyFFSj1QbipRSyNPPGVsQy8sWl9eQFJFcD1wbmFwVDtOZTd2ejk0UGEzVC55RCZKQ1tCQFUsMi97YCNmQFF6''@;'; put 'put ''aHFDcXFCQGZyYzVHaTJ2bE1oaVcwTCV1R3lbQEY3cjc8Y3lyTmBoe2kvR0h8WmFUVEU+Qk9ja1cwfUImb1FpKVNvNyhFL1NrNHh5Nz9vY250Vl9jWjF0dmR4NHo7eHA1NnomMzVKRT83Jkd0K2hnRVRqNGU7QUlpZTdfSzx1YGc/IVt9eiExTmR9al1ieVV2a2xVdmN+OTc4dE9id0IyK3RebUxL''@;'; put 'put ''eWNdK0AoXnMvU1N1NGgidX1DJTFTZWp8Iyg6a3ZbOXdgL1RVfnJhczE7RzdzLH1EVnUyKlU8MncsaXUvTmRlMSQyaHEzLncqaF1raiVBXVpzW2d8UmMzUmVUQDRnaHRtYSRaL28rQllRJiRtVytSdWg8REpBcS5JO2NGbDpmNTkhLmRsT1FBcEdSIWpDSDQyYVJwajA+ODZYMSRaRFViWUMqfT88''@;'; put 'put ''JXhAOzxDTnVMVDpeS1V9Njo2OjdrWygxQlhsNmtRR1VEIUJrP0ttMjlyNyt2RT91dDJnPDJvc31DbVFFODclJWkvd3dkUl5ja3hpYFs1ckkoXXJXPFRjITg3c1NQUjxLZn48JSZNU2hzQmY0SitbXU0meShvZnpHTXBrLkJKIiU+eFVKLDpiIiVYVzpwJWhIeHQlKnsmb3o9dkF+Qlt8c0BbfEVZ''@;'; put 'put ''Qkk6fTVhWEg9LyNjc0cuMHtMXXNDTExvaEgse01NdTRWR3Q2OnFreSR+eFF+V11VZF1oVjcjRClFPUwoQF17aEU5dWx9bTpyfWgoSUB+bX4lfEJJXmtZOGtMb0EzPzQ4ZkJKJmgsISM0USxlUjA3Mlp0InBkdDpOR1d8e2pGSiNZcTsjM1FOMCtjZFFuOihfbkVePF8/WURpMXF8SkArQ186Uz55''@;'; put 'put ''JXg5TDwwTz01SCVlJjwxX10kTXdERGJ1TlZOdF1IbnszeVU5anNnKTssJkg6M3tfXll6OmlWKyYpbn1pLyZsMDRbKDsxT0N+LlEhVFUhIlgvRHQoaU92QytKbylDP0ZwSDFMczlxM0goeiN7VEZSRCRISW8qeEhASWVhQS4hbndEPi47YEpgSm4zN1Z5YDU5IU9TXnJUOXV3VDs2VmBPdj12UCZ3''@;'; put 'put ''WVtyKWNrPzZgMGttWGpHK1RJZ09VJHtPWHZlLkU1LH5pR3NYP3tNYnk6VlcoQXwpJCl9V28jOSwlb1MrXkQ7TV88W3okT01OVSFlKjZ7VkNaSDsiSkIuazJnbUpOU0Z3bTh4TlhZSlYpRjBmSXlefno2d0szUU1UYk0zXnohUU5GVF9zOjdhYzQ5KlJXdWo9ZVk+SmdraTYqRGBRWjR3Ik4zXXoj''@;'; put 'put ''MXhPUWE3Nzxbe2UjPHR+KkdlT1RyOEtiN31fPHJOR1c3XihlU0hrRVtJOnhiMWRrZHV+ITt4e05iakxFK0xqU2lAb1tubD0ueWtfXn0lZ3RvPiF7bntgST5AM1lFSUBGWFhYdnNYX319RCpdWVpKPXkuRyFjdzAzT1k3aCRteDIyJHhUb1QmVGxVdkZiRGUvRkwsVVhAOiwuREA3ZTtZJk9EcEg7''@;'; put 'put ''WmpWM3l7NytAcSVWa3lfbVg3IXg+dz92LClpVk42JVZ0NWdJVWtBX1ROcDh7YnhxcEJFOGs9QDQhdGo0QDAvQjpsZzF0djcxazdEIlF5bHhhVHpMNFIoWkNDPG4vMlZOOFRtLyZDVE9OTzJ+Il1MOWVDci5tYFA9YjVjejclUyVpLGZvOy8mNGFEKHtKdFMiZT1rQ0lxdmIqbEomMnAkYnNhU3gp''@;'; put 'put ''QnpWdHR4ZEhmeFBnKnIsN1I3VF42MkhlS0BuRTpZSGpNKV1zUDdKUjVWQzhfQ1E6VUAuWzBXc3RHZjdFPXs1MyVfKEVbIlldVzZrKGc0TC9mMXhdbCg9UFJXL191NytBU35fPzdzWHUpc3NjOE1MUj8hN0tbLFZ0M003dHNJREI2cVB8MERKSzRibiFWTV0/SlAzWloqcmBCY050RDpwLGliUXV4''@;'; put 'put ''UyxNYW55RWdRV3VIYSw4VEBtR3ZTeDFBS2MxKXI+QS5qcCQ+UjxKKGtWI01TVU4uZCRxRVYzfX07PCVbcSt9WldTZzo6cDwkIXNOOmEwXj8hemkjd2p8Mi9oa2w1bUJqZEBlaEwsSFhSLlgvfTx1OGpkXzZKfUw1Vi5rdjRRSHw+IUQ4bE5Zci48ajFgNHImOSpPOmx3YF5gcG4sfldEeHhAKix7''@;'; put 'put ''RjAvXn0oNSx5ZXo4WCJkL05dazd7XU9XMkZ6dSFfOSFJZn5iSjQxWjB5KWFVczAjYGFDYWAqNj9XSWApV3xxaDl1OCx2aTdTPVBoOXc3Nz1XdVtfbDpoPGhxTW0meT1HSWkscUM9bF11OTVOKDklckh7JXNWV3l2Z2BVNig9MVFhJTJxWUIzW014dT1tb2YjR248KUlfVT5VVmxkTFgsUGEoN0w/''@;'; put 'put ''PU9uUyUxQERFNDR9QmY+TypgfUw+KkQxXTVLcXpJTVl7eUV0WmZsdjgiMzVzSHd4Wnc/Um5dfF8zbio2ZitFejhjYnk2cVZPXTArdTM+XXUuKTwsaWwoJGJYYmMkSmE9PD1kOCxHS0gsIUxXMEpDaDV3JEcvO1k8MDhmW1JCT0I1M0ViWCR9d0lkNnRYfGgxc2M6T0QoYWBFLGdgJG01fjZtdis8''@;'; put 'put ''YH5ifjU/JmFqMFJMIzJmbCxKQilJbG48RSFvOHdCVF15ejF7eVNwU0YiLHp7V0BYdUs1LFFBKypxJmBvdih6eWluJVImPVJtbl4sJHRYXjdDclIhXUNoVEdRalpORT91NnNUNmRLVUxsMldtX11sYWZ5UU1+MmEla3B7SDxMWUAxXlI2THdAK0R0VllXbURDNVZLSSk3ezhlPTRVZXw1QTA/dTN4''@;'; put 'put ''MltjUXg7VVApcEMraSJIa15IVDZjRUhDeDhPNSwjXl4mM0Jydm82ISJUakd4JlQuWXQ3LndreXNCRFEpYnsqQXFQRyZkR1BaRjtuPEcwSXlmQjYsTXRtOyxdPjw1Q2JmL1UpcllNREs/dihDeUE3NUtDPHJQJlJlLDNXWy93azJrc2U/ZzJSVkpxJEF2TnRfNGBJRTp5TH1zSl8qc2Z5LyxgZXhD''@;'; put 'put ''W3UraFhzJUVham5uQ2puRCZ7JCspaFtgXjU7VHlBImtsUiQsOHQ8ZyYjJV0lM2lJdzBPXXEmc3UjKW9nNyRASTZyYCRuIV5OIVNaWWpyc0RvOTowXURXSlsuMldaKlJbKU1EKCt8P0peSDlCa11GSkM7JHdRSiJsO1dGTUs6JWVTNTVPImhATmdRZi80Ozo+UHxaY052KzJFUEM1T2QocGd4c141''@;'; put 'put ''LGNMP1YkTzZiU0FPMWUifTZPdE8qL2JFbTNOdDZuemR6Qk1dMmA3Mi9uIyFJZV5kXX5EaixPJG9lLjFFKmZIPCQuOC43aXBPIjd4WmNnPz1dODZNcT4iPkBAZyIuJnI/KChCbDA0P1V1SXpZdHhYVEI2QissOiokaEJxcldkUFpsSi8sL0w6MDl9bzdQOUk3dVovNjElMmoofHZDO10sW2R0U0pO''@;'; put 'put ''Q3EoJlFLNy57VUBaXj8yK3l1X0c4OnhGLk5aVnhbQiJuLnwueEh+Klh6YWp0VzAlKnwkRi9nN31lIk9iMUxUWHhfXlhYcz1oMnlPYXpfX3NpZjAmOlRFJGk6YWAkQjs/ejdOSDJYR20qaitLJDU0d2A/X2FBeDZNfTQ+cUhLL283MzcrdH5dUV4xc3crZXxXR11Mc1IlQ1c0Y0Y2b3U8UzxLfEF4''@;'; put 'put ''NiNWXyV+QCVoTngzTjFdZi5INT8mSC9tfGJfIygxPnxmYGAud3ZeSyRSUDBGd2pjTXFCak9dM1IlbT9OYSlGcDBQQ21PaWBqQyJIaTZUbWhSdkN1My9oNz1IMDNNcFtLdld6TGpPbmApL2I9VyhvXSpXb097X2NsNyV9RTlFZihzdSR9MFkpc1JzJkhkPmVub2htSVQ0QEw7UjVxJEN+Xlo4TWZj''@;'; put 'put ''V35lZGdndFR1a34rb0d8KTN2MGQvJmcxLiZSZEhkMDtqMUBEdWEhMGNid3oyLklmTWU2YkcjYHhaNSJMXkRHMH58XWNBdSpWYzomSHo+c01lfW54RCJUOENFJHcrKF9XMyE+cDQ+VT92JT9QT05kKmFAYXVdajNKfXw/NVszJXopL0I3MGtWeDxIT0Ywdm85dm57SjY5Ty5uVz86Jl1vQkMsclVh''@;'; put 'put ''TEt9bTc+a3YoJHc8aldWJX1lVjBRVjloPV0zKTk6Vy51WkZxKkBgbllKNC9GL0cweiNKVCg1X3tweEBIOkFwNTw3Yi4sTkdqI0AuNkx5Mz9lLjhmTkRrJHssKi8hbUlAM3kva0hGYG1GNXFTcyFRKnBfKkZKVUJrSEhWVjArUWJKcHBVaig4RWhHJXxEQD1XfmY7bVoqWHBhMmE1bmQzOHlXSjwy''@;'; put 'put ''QjlaT2dtMmA8e11zYWRJQTVdcHFoQGxiXUJZMVswV3MoKD9VU0Vea0MzPXN5LHBYc15PJCQpI1MmL3ZAT2RhV1YiaXsjPjxyJiE3QEVKdXR8fHklKG1fYVtrISkrfDEjSn01cT86QFFfS1hHdmYsaDI3YDk+N0xqY1BlTCw0P1k3Kih0PGk8JCJTaT5lXyUjYHcvWz1XT2xmMld6akk1PCRbTFt0''@;'; put 'put ''cClTS1VtN2ozQ3xpK1VbL3ovQG5rRl8haG5xaCJFNC8uQ0IkKlQ7Y3ppelJzcT92XUxtVjdOVlQoJHpQOCovYEsrK0RMJCFlOXtjQHhLV10kazcyalJyZiI0KGZ4XVJ9eG4mSnZtaGRiUXNOfHRfS15oNF9gREd6eEVOUWJ1NHdOfm09fXEwQF89UF1SRVdROUpORTdaLmlCOzJWZCF5SklJa3dU''@;'; put 'put ''e2dQTGBNL3VUd11WUGx0bS9uK3RhVlhDU3AydXFmZFMsQnR2dVZBVyxjbn5La2VhWVcxJisjNWZEcTxLLjQ6OkIkNGR2M086dkVyIyNkX31uVVAvanI/aCQ9V31qS1BzLnFWOlZaR0xCVGc5cHFOQmtFaEtJJip5MilDMl1rbS5lSEd4JHRXaUE8b3REIUt5TyRfWiJDJXF6SGBuQXNwXWxRWHcu''@;'; put 'put ''XmlUKUA1JEgzLGhGZ0I+UmkySlZSZFdoQ3JrezVBez0yej46SVtxdyNWMW1TKVV3W0FJOUpgW3NUVCFwVSJ7YCI7JDI/YUNScnddeC94VXdAVGFfPmJjJlEzNzE2WUk/d3Q7S19DZWgxRXZbTkhMZ3N3VnZQK3NsdjslNXlkeUdxIkBnejNWRU02cl5NNz0vRkZ1TG1JSVZYbm1OTkUka1RdQkRB''@;'; put 'put ''dlozc1NMSlpOdEcoRzY7JHw1XkNJblQrMH1HdWh8eEMyeDV1cVFWWztGbGBePHJEbnJ0QDdEOTlEclRZTz8xeFV7OVFtUCFUZSxbIVpEYT1FUT1WdE55ZUkyIk18L2BgT0djYSMvOVhbY0VgamBiKkNUT2psZEVvSipseVZKJmF4LjAyWis/Wzgwdy4rPywlalNPU3Zkd0ksV0xnYFswUzhWTCYx''@;'; put 'put ''SF5WflY2SCp+RWc6RC5EcHVpNnowdzwpW1JvRUU3S3pAakBHQVRiOE1fQFIyQ2ttO21za0NLKj8lVnU6Ml1ebGkqME92dkUyeVc9PlVMN30xdGpdfGk4Qn5dOV5vNnV3Okw3NnYvY0BgeVFmJElxLiMkIThLcFVMVD1SdWd5e1hUfUdORXFPNz1GIkovXUY5NWZ4RyQ0MFdiLylgeTwqVG12OGFE''@;'; put 'put ''b0QiVyZ6TU54UXJ8LjtNXjxpbjcrX2MqfGl6WT5pdjUoTUZ3ODFtYzx1IndaIn42QztfJlBiKi9ncGtfeTJhKDs1U15zYmRQMXJXP3VdRT9sYEMke3B1cDRNJGJ4djJqS1hHaVAvRTJlPG5xODdZJkp7YSpmPnc+LFptQUxqMHJXQlMxVXt7KUIhXmhsPiNrNVcpRTluKHVNOH1ZOVBoNWY0WyRn''@;'; put 'put ''d05pfFpBLn5CIkteanhNKGhTYUhMem0pSDdhNCg0fVNRbGE6Kis8KFA+eyxtT3JJNkAwfHpxVW00dG12SEk3dkI9PDBofmtNb2kvYzc5dl8jLjZuRzp4REhqNTFnez56di4iVWhbXThqZWlfVy9PYD9jY2VVKTcpeThDajpPIzB9e0FHK3FlOk9tQzh1TktTK3M0ajwuMHFvLlRQdGp6TzM4P25z''@;'; put 'put ''VjhFKjtVNjhKeEdXdlNhfEIqTlgpc2JSWn4pUFVUbXhkJkg9d1Y5fVpQKEZdJXhNMjtfd2xEIywzInlWbVE4PnV5aChPYCxjdGl8O1VFckZHOkFxOz1DP2N2VklbcWg+Un0lbXV4JGExPHU+R1JGNk5FPUo5MU4zc2x+NF9rNFRbLzFERjdtJURzYFsrOk5RUHVNdkJ0PTdTXm9jZlZ6OnV1W0ky''@;'; put 'put ''WFZ5UkIjeyYoUSwsOF4kV3hzPGBddj5YLFt2fXV9QlldZVh7bUdfX21wRHJ1ZihVRThvelpwZHMiXUBNciM3aW9ZTkJMTHx3Q01NUihxbGt6Y2lRbVIuZ3QkVFNaX1haN0wiKT5WK0RsRTArXml0UWw+e0U1Ii58QUphUytXJC9tMlpUajl8aS5nMTFoeyNFZU9ESGBKYVQoTlpHLDNzNlJ6KyYi''@;'; put 'put ''LjE+JjZeJCtdI293bFB4TlpYck9uWltmN3U9ZFY4X3B0c08rJn11ZCRBeX5vMkllTDZXMFJFQF4vbkw8QyklU2k3KmYoPlMlXzVFWVE9JFJqXUZePX5ffG59ck9aTWQoU1ddZypRWGovInN9Zy5vNmI0OmpedENSWSZUQXUuakFnZVFqLyJ+R2F9VnxsP2UmRHx2KkV7JGhxaDZ9e0pOP28ufEBI''@;'; put 'put ''KUxLS1E6Y0E4RjQ3cHtSWXwpPkBSMlA6OWpxX11IcG9eUzJ7fmUwbkZiP1MuL3lsMWs+M0UzJCJbWHF7JChuPVdaQzdIUVAlcXY2endMS3w2YGNfV0M8W2dJeThEVUlgelJneWJ6UytwOjlfN09KQiRNYTVeZ2ZBU0QuTDxFfT06ITNWcTFDKWZ9VS5qbVM9MGRDNDBkXmMkZCErMmtIfEU6Zyh+''@;'; put 'put ''OHxZc3spb346aHtnKyZWOzl8MWhNaCF5IWssaExbUDJCUjZITy9wKSlUZ3gyPHkxIUE7UHBuUU0vJHJ2LCtgTGRvRVNRdiRHPjg1M1tXIyU7K3ZlLDtOS2k6WS5oMTRPM108U1toZzhmUk8yaG1fejZsK25TLz1leTpgb2FqYipMSkZid0woZUZLcCYoYHF9V0F9QCxGVXFgbTp5ayhkMkledEph''@;'; put 'put ''bGBmODJNa2RMa0U5czF5SyJMfTFqfC4xP24hPkpeciljbXwje3FaXTo9UGhAYmV0MC4yRSx3SE1JalFuL3BhRkZfO3A5OyZrKi4jSz0vUDJBbkNMfWBWZTY4IzpDZkkrIVNFJFh5dUNMKTZvV3IlLHIrJSkvSkosdmk8OCRzZyZuV1kxZUVlOj5qenFTbG5SPl5yW1dwYU5qK35mM0ZHUHlWRFE2''@;'; put 'put ''Onk+MUYzUU0wMHhsOGFmOipOKVJnP2kwV2ZhbXN7eShJc3UzRS9LQ2NZL25EJG8uNGcyU2gsPlQ5a0J9aH5Wek13Y2x4MCFpen46cXhRJmxJJGowVGFkWTNmMWZ1YyZjMFVgbC9iOEtbQi8mJklWempEQV4jOnokKWtyKXJbYjN7RXdWKmlDfTR5XWFMS050YXdpUSJsVGlSdms6JFdpYC5RYmo2''@;'; put 'put ''aDJASDRHJVl6d3Eqb2VZb3RGeyFTZlpoajYqWE9vYVNrMlE5bn5UTiR+V0s1aHglWXF8RWF0c2VGMjZLc3h6fTJWemBTVFVYUi90NWRVMDgkdV8iLEV9WkxLXW8iJStmVkl5SHh6TDlKbiFmMjo+fGouaGFyVjpHYiJNa3JnWEFURFFyeEQzWElkaWdQdTk/dnJEMmFWX3I2MXo4aU9nVDB3ZUQs''@;'; put 'put ''UFg4dDI2PkdSaTVnZXh6Q0B5ZlFIdS9dXXJSeFVQKF5OMzshPVpnTiROeSMyWWpAPlYqJFV6amBQOWc4YVM7IUMsWHY9YVpwTDouOUhjUjlXL2xkdXdVMz5kSXo8XUw3NEYiaUp0cGRyJjJObDY/VH5SUFp0cjlncnhZQjVBKS5xO1QlL2U/NCgjZTQ/WDlrNSlZeklbNzxscGkrZDE0UUlnSDVn''@;'; put 'put ''bThaR1RpRzMyYnVNU1JfI0NGW0NfVSQwbnlBd10hemBCdHdXNklzKjZGPU96SDsyNytmZ1FnM0V6bXB8cT42O21PSGA4KWAyLyFwal9BMW92clkwb19CfEJxczx5WmgkfFo6e2s1cylVVkYuP1l9Uml1bW1zb0toK3c4ITFKNEw6PEshVlZ1VWF1ZiFjUXo/ZEo5R0hfOVN8QjRucjg5Yzd2KGwr''@;'; put 'put ''PilldV1ZeioiWkckNz0/X3RbNWhyKlk3YSs2O3swLDN5QXJ6JXRkfkxtVlpQR1EidnFDZH5sO0JuZ0QuPigjRXFwIVUxQlVeUU9+JE4sMCN1KHBNR2M3VXEiM05sXTYlWypTKytDSzc6KiRUS0QwVmlLSypyX2VUWVNDcElkPC9IJGFrM1kpJn55RXlfMUJYVDd0K0RBNExjfm4ofEdrb1h8QnBj''@;'; put 'put ''UERpP1V5fX1mJlNgcyoscWFTUldEVyMoW1hgSHZYVm1NNC9+UU0hcnE1M1ghKVVraCR8d0VwcEhQUGlraC5zSU1rcTR7cXp1In0oSWU7QHFLbyNoRFMhXjNUYHt4QjpKYGEoRCorfmt7RDNqP14lQzhjYVtUXTJHXVNDaG9gTjQoeWg7QWsuI2slOC5CWSF9PU5xNXd1V1cscEpTbklUTip0NEJ3''@;'; put 'put ''LyFiaUVlOlRhckx2fl9ISmMqaEomWTh4Sj1fTnpDLnl2ZXswX0t8ekhnPmV7MU9PXm5QIUhTImEkOzhJcVM/ITp7R1ssKGdFdFNaVnI8Z2hAKEQ6Rk9XVUo9WCVLKHNqRn5MNVROZlUyNlkoTVojUS42PXsvTmg/QlYkQjdHc2tqJTFXSkkjYiFGK2hGYDZ+SnZGYT04dnR0VWF9QXp7RkddJV5u''@;'; put 'put ''VTtpUl5KWFNAM09vfjdmejVeLmxgczEycVhGYFE1KTs3OiRZLDdiclVGR31FQkdeeDEmbHxubElBd3chdFc7QT07SWN0RnMwJHJQLG8/VGxEVzciN0hvQFRBWnpLbmh7Q3tBWXR0QVBDJns3bH58KFVZM3V7LFYpUUdFME9JbThXJi81diNkbCorVUV0YUIkYkY4NFt6QTkyOls7XjBBdWdpOWBl''@;'; put 'put ''QHtrVDZTcXVgMWNBcio/c0lrWCF0OixhQWhAWTN7Pl8uIjJISywvKGV6LEtMVz4/aG1HfSFTSiFjL1M8fD1ZSkVRUSxZQFMmUGQrdjUpe0VBbURIZGJ+dnV+WC4oN0BGJF5EL09kUDBAMTV7YDl8S1NffCZHMTReO0IiLDxHQU9hWUlYaDZjNXQ4NHNsQURvPERCMHFCNTtWQlNxQD4yW0FOSXR0''@;'; put 'put ''YiwhMEokO2lnI0xoN3VAPzFIQ2RUP2NZOVRHa11aTzc5P1liWTk8PnV4cj9VYU5lP34/JGhhPmEiWm4pNzNEfTlKNkkpUDw/LDtoI1lJam5+U1pjfVo/Iy9CYF1fWEJuWzFHXTNNQ2wmPXxBcS9+QnEhQG5zPTlaNStiMm1yOGRYMXpYPigzRVEqTndZXjFmcl4vO1l4ZDZNTVlgP2B0fCY5YVZj''@;'; put 'put ''fDpaOzprNzFETjckc0kuNGFNejhsNSVkd0lyWWtUTndlbVdQeTB3R0pvcC8/bV4rRy5QQWI1TSp8RVckRUVneD5QPG9EZDBJZXUhZHVbM3FueXk5XW81WStlWFdvRyJHRT5HbiZ0W0hyJSNrM3M3XW1sRWBlXixjJCRsa1plbj1aL3VGbk9yN1t6K3BUZnJQSF92JUBCbyMyQEhwLHR8eT5NRzpt''@;'; put 'put ''VHU/MkRBfTwmOn5gdVZ9TG9oL3wwL2ZuIlkxVVNPcEwhaT1qdkxSX09WW2ghVF9QMl9jbGxNclYlMXFwOGhUIU1SfiomaTYjbW12IXxTWi9AMU9MbC8jSVBaNFN1TTRHKXQ8SFpzbjNuV0pbKWR1dGw7NyJWSlpYQzV5dCJPIn01R15RNztHMkpNKiFjJGFSO3pfWngrPSxJfW9NJkMiOVVPOEx0''@;'; put 'put ''VjhJcEFdR1JMczdJOU84akt+S1UwS3dIdFF6L1ApTUNec29Ee2lPZU15VypkQ11wWmlWJmcuQG8lX2hGaVlFV00sYlBKX2IpU0RufEQ0UzMjJHM2a1tyKkooUSp2clMwXyY4X3htVFVIQzZwI0l7OXdIKUs8d29sYj9oSChhSX5oSFBpdVUuIWEhbi4xejcpbFF0M187O2tdWDk7SlVzbHVdJFMs''@;'; put 'put ''OSxaRyFvSShLMyNnPm9NYUx5QzRXV0oubjo8VWF4N35jTEt+bm0vMkNRNHtKKEtJMFh1SWYhbXIzVCNdb1h5RlhANFgvUkdOYXkqZDR8c19wcG9aNTZTJEksdFlJTj5OTFBSYGM2N1JaJndqKzcyfFlaalgvYXAzJkpCPG4qcmBwNEhgb1luRix5dClSSTM8Kzh2czw3dEhWMmJPMz5GVyNVKmNs''@;'; put 'put ''N0dbJHpZW3NaSk4sY3o2L3t+emNicTg7d3x0YEYpRTguUDtiX19XJXZvZDNpNlF6bURNa1hIN0R2YzwoXURqOnpUZ11aR2h9K3glYjZuSFY8OV4lNVNWOFB7ZStDYXwmazopJmpLfCk1YjMoJFc9XkJxPj12UVc5cHsmbyhbVVpRWFVXMl1ARVNDPGlhL0AkPTUyWChHVDc5JEdAS0YyZ2J0WlZ2''@;'; put 'put ''UmRkPVlSeGgqRjVkfFlKZk5PKW4ucnw1Vk0sW2lqYG9gTXZLSik7bi9jcUJLSiN0azUweShEaTZiYTxWMXNFLGU+ZDxucW9mfkpJLlZ7IVN0LkxPY1MkflhaNGFBUHtzPi9yVkBFbFtrU1VMPl8kNSpnfkxBOn5xOlhCImVxVGklQ201RyhuPlJCXTshel9UVC5eZyZ7RCZ7aCVuTCl3dSg3eHZS''@;'; put 'put ''RGtpb1drXVlQLFs1L351WFZAX1d3Mzdjei94LkdtN0h5JVdlQUMha3lGOzMweGRiUWlOcUB+dDQ5d0JUOXZ2LE49K2gyN2QuNVMsI1A0fmAmLjQsRHVXVXdQcHl1I0h6bml2WmIrezo0SHJrb2FIMkB7RWd9dlpnMjNAay5GMXN2clpjWmR4Oll8dkcoazolbnMme0dtO0Z7JG1aIS5MZnEyaCEs''@;'; put 'put ''c20kMEtaIXdaezkzUkd+aiM/OU5wWj4rfHg2cVpJZExxLkFYbEw0NGYsIT0sMWRwaWBlLChMempncmhvSVRBNSF3fTA2K2wkaSI/THlGPjV+Vns5PVpGY25uIjAyO1pZYm5qJjxJKWx7NCNpaFNtTTZfPDdpIkZDSlkkXnA9XzM/MlZEIUt6REJdeVgiQT0rNTVFRDhTUS9tUTMpPGBPUUtTdzhI''@;'; put 'put ''elUjUlNJSzlkc0gjbnw8TTBpU347NFI8dW41c1RfNy8jMGNfUkozZjxyTVt7ak0idCsiWFluVVlVVl9HV10xM1RxRixXRFgzeTh4YjFhWVh9QUBNSG0rS2cqMDEoOV87JldBbDNRY0RmQjcjQXxHMWd5LCRWWT4rci9jMktHMlFQaS5SMGphZ09tVWp9fGVBdywrMEQ8eGJ7K05QSDNkXURjST06''@;'; put 'put ''dWI0Omk3UVdBOCttd0h0Om8lK19KPCUlKUtdaCJianwoMkdPYl5iXjJoRTtwR2hPTG5HV3kjKmU6d3cofEh1bUl0ajp2M2dQdmw+U0N2TS8pSWVTMUUkaDJsVEc7OU0yISosKW9UY2VGXjlvb3Q/cGckVXxmUyt7MVJTfkU4XkJbSzhoSU1SMGMqMnx5a2heMD9DNjEqUmIoISUsNnF2OnJudmJx''@;'; put 'put ''RWY8SF0pTjtDeW0oViQ6X21FT3N4KDZmfFVrIiw/OXMkJnRHVWIhQSFDUkFvZihiQkM0QjcwZGBYSHM8RHBtO1BXY0FQaSg9eHhBVFFafGRQfW1ZfWlFJDNFRjdMd3hwPkJkcyMyb3lWTCohVEZHXjgkeSVLNkNAd1grOXNSWld0cT5XRyVwKXRYXlFPPlhddW16RnNudSI8L2hnRWhIMmVtez8h''@;'; put 'put ''VUkrbk59PXRsOixGJGd6WGVsQGNBM0pTbnd6XXVyKWZXMCpKLFlvXXE/RF5wQ1crMyQlPzlPbEFFa0FDMWwwNmF4KUt5SWNNKGBxXy5xb0lKcDF+Vj07WnJibjBdUWtXcj1nPEFIXiFOKjMrXTkxd2RPJGZZUjk0Jj9DIVI+fHk/LyxYQXQ6Sil6QWc3VnA2dEtNZyZ1UD40SDt4bE9eWnU7dHVQ''@;'; put 'put ''bDZpZ3lqe3dEJSlsQk9Ke1ArbzdlRG16LmtOQG16d2E4RXFDMiIjSVJieysze3gwWyV1YmJrPXg/QlZEN0drJjJJTWNha2QubTtub2Z+SiQwIXBuUH1JYVF9S3RfYFA1Z0dtTlpLalF5ZWAhKnJVUkZhMT0lPF1LZElpQEVTTk1tc21RbHAqUl4lY2M1X1YibDp7UTJXWnZ3dilARHc6byUvWTFJ''@;'; put 'put ''YjBAeDFZPDR5Q0ErMk0ueyVqZHJjS0lJekhpU21POyZLKVljYXxuPHFdVVhWTDwvfWdrWTNQLm8+Y0VAIUYiSTZJNjhYPzZQJCJDZH41TUNde0ljdGpoI05kKHJgLypjMSlPLmg6fU86T3A/UFs+b1UlRkp1bnpHJktQNjI8e0RXLFZEW3NMQVVQYEEmIzRRIl9NKmMmP1s6RHFkVytoVksyMil5''@;'; put 'put ''cilCandXfn4+QT4jKThycGBmO1g3I2tSakVJJWs3cEFEZVA9YF1rVEBke1IvUjVJJUMjM14sRDwkQDRuOEp2Wi5EeEZTQlRVamlqdU9+bmhvNi8qO0w7ZXhkal0kJWRFIjRGPWVGKU4xRklnPmRLR3t3Z1NLVFVkZDlPfDQsTHhFOXU5ek0kSGIiUkkxQmpbLGJtenVSXkQqUixfQWskdnxqRitI''@;'; put 'put ''fHVjNHQ6JnFdIk0xZ34kJEBEWjMmZCwqMUlqRCxUVHlKKkBQOkkuSlAwVkJtZl1hJDxWM2tLITxnJCo7YXghXkM5IkJyazU9OVFFeGlGYk12MlR1UENQNT9FdSFbOl1VWDdeZE1CQHklOnw0TGlQbSliL3QjQE0sOWVgXTU/Xyo5Jn04QEpVb1ZjQjFgKmdgL2FXdD9ENCEmXV1LPl5yaGdrbkgm''@;'; put 'put ''RVByPHYpc2g/MEowXkdHQ3JHalRLK2toPGx5P1YiSnt7TW1gJlMzQVQlUmU0YWx5V09edUNvM1Z+OGo/O0xlakxBUHBUTUg8aHx5VisvWyYxTSQhWD4yZUIuWnZ0OmkmYUc0MD8/NXxyYkJ3alRsKzBScWh+Y0omU2tVeWxoKVN0KTp1czN2dSg0OW8oaVhxUzA7bUtZRHhUUmpxIzJsM2pOKjJs''@;'; put 'put ''Q0RQTyUzLis1Jl4wdVBvbkxTWyxgOFVmUkNpajZ1M0FjVE9WakkybGs3aVU3RXNYRmhUa2Q5THY+d2QrRztVfCJhUSRBKVt7XWN7JXcoXUhfQ05Mdl5wbkNXYnlWe3kycH55cys+aGJYcyEoJHFsR1FodXRfPDkxSVBNPHFDWygiSExtTUM9SEB5PjB8NlEuTFpSK2hDbi9uSzBZKSptZ0Rvb1lK''@;'; put 'put ''Ml9YQk1iOTY/SnpEOjdxazczeClwQHooeXxJa3JRZyE5T0grMCpHbm0kNmMvXnNvOzUva0FmcDF5cH5VSTJvbSJ5KjdJOm9OSDFsamFBOSZDKGBYZDRYLmNAM2U6TDEidCJfO11dald+Wj0jKV01NC5ddkt3RjNnPTh1WFZqT3RJJj1OJE1zOVI5YE8mQ2o9WyIpK3V4NV10UEtgdE8jd0MqTzRw''@;'; put 'put ''byw+bk4hSEIuUi4pXlkhRjxMPWhHcVRNZ1JJWEt8XTVse1JpRWhKK0BLW05WNzpMbElofXMmK0wjO2Y8V00wbjAyeHl7MUU2V0xNYUhzZ01jSzxRcjEwQGBiWUI4W3lqUWAxRTA6cXooLnRSdyokaiQrPXE/cUtCbUVBTjUwNGZkNi9AXkBFUSYufUxNQzFYUixnMlM8SmAyI3J8PGtEQGFrWTYk''@;'; put 'put ''KGIvamE2Mkk/TWhYQ1piTHBlMkFmIXNiK0pVbkw2KXJhUyZlXlprP28pail0cGFmO1JmfCt1ME9fRyp5VipodVJbKjw/aWNxKUs3byQqeHhLeFViXnY5R1cyeXB4UFdPM1AuQTAsXkBgMDpseGkqQiFVXyRYVi8wNGJrTiksVXc4S1dmREpWYjhybkpAPXQwfENZNVpfbnJ7Q19KOnxVX2tZPHFS''@;'; put 'put ''RUw5Km01ZXUxJShPaFZjU09PVUhwWmwhO3lEMTtGTSh2KHVoc2JsJkJFc3EuekZRezF0alBlcC85dntdXUovUEp9WGoibHl5SjxQPTtASnZTb29eSnAhYHQpRER9dy9KJl1sJXNMcVZ+QEdpNGZ2bERbUVs/WGU2dlAjPVlWYlFvPzV7UGokc0U4ZVJBL2c/MjZTc002SmReZU1oYD9peUZYWypi''@;'; put 'put ''Tk0/VSwlIXZmeVhQPmk+P29xYngmLGVnJGcrdW0vKHRVTTRgKTxEQT9edi5sJXYlSTFrPkJGeT1kOD5yQUt7eUNxeGhqNUljfSxpbzF2bilQYDN9LFFVTmZsV3NMeERJOjpIcWYrb0MsPFlDQkhHSCYuNW5QTzg3dWdCWWB4bV5EQVMuaFJJVGBnKipUP2JXeE06S29bSSg4Wj9rYCNTQVNdeDl9''@;'; put 'put ''Iik5cilQU0QxOGlhMHl0V2RoXiFdclF1anZHYFVGdnt4LHRnPzUqaHI4KHBhISwidW9URGxdPnFqIkpOcmpnMF1XfDZ9MDYyJioiemwkMT1PJn46ezxLTURfN0NMQ2k/dSNje2NOQ29ufFhxPEhYXjBWOm12bmhZfTNCT3dZR2FFZTJ+UCIlMy5IMlpEW3lxbWAiKkomMlJqeVhxZjU9PGNWdTNg''@;'; put 'put ''d0pdPzBkLl83OShUc0V9c3JMPEBWLm8yNkZSVjMjQm9AW0R+dH1EOEVlX0t2Z0VqYHVobyNtMHNvOzkwOG1iUDVEUVlfP0dwc3Qlezc6IUgrSkBAdH1XPVVJWFNTZnldMX0rcnFsZj85bWprM0IubnZdQzs9KTBrMCFQMVc7Rm1Bd30/YEYrWHR6bFRYZ2I1e2s6T3E6fHJJT3kzYnt3ai5OUXEm''@;'; put 'put ''QlZVVG5PKCtoLyozP3chISV+OiY4ZVUpWWJqU2xGa1RzeTI/a0A0KnVLfUZfW1ZJWVckaCpRPG9MQ1dIMGlyI2dtKT9xWDZrenkvWHgpTUQ8JWd0aEU/cFF3cF5TamxadEcrXllaJFJrTilrSGwie0IkOU4jInlKQ0k3cmsjaXVHMnF4SWFETExIN1prLGk5OVFrR3VfJk00d1FbUEVMI0NQNGVa''@;'; put 'put ''P1MqdkdPPSl1Iiw0PWpWNU54Zi9oMFg7bDY3N2AwYltHJmIjRklWQGREQytZTmx3SE8rTD1aMmRldW1yeysrZWNsSWphdW8jUHU8UkViWFlqX3p6LkA5R2FLVUlAamBzUFZyb1UjQCxVd21CL2xnKXE0fSIrRmZ8KlUvYTMrJEsvelViPGRdZUdkZF9+OklKRVtaV1FiRSVgTmlQfT1zXlZvckIr''@;'; put 'put ''QSRjPDBeJGk5azEwMSRbLnsuV097MjVPczBIUkJjeDEuPnZTQjZzUXZhUHVBJVBUZSo5d2JsJTdvUnFEekdxYSZLMlEhSyttUiUhInpKPTVnUSRZcCVRVz51R3JlIVdeR14wY0MmYl8wajF2YlVsOCZfdFI6Wi50NyJNVXJnIyFjLj5qVjtQbkRLPjc1eUFNJmtsYTkmb2d6cXw5Q1dKdDovdyV2''@;'; put 'put ''OSwpXWNwJjhrTWFJIyE8fXt5QXd2bDdTNTlkfVA0aUheIVhCV2BFZ3BIIVB7X3xZVk44IUxhQmRCWWhvRHl0X104M0d+QWJPfj1QezBaXzA1fFFMTHdRMUwrW3NYKitHMUQ7UTlzWlhDUzAxW3pTPjhgS2ZAUUoxO0EpRXpeTk56TDgxZ05sUCVoc3RjQl9xQ0MrV3BtO3k1QS4hOWNVYT1KM30u''@;'; put 'put ''X1U9XU46PVlOYUZOdlZnPG5EOFApUFR4I1Q0eCR0Pk44e35GNSwid1c2eWN6PFJHQnwsW259SkJmT0A4dTpPRio/TnAkVX5dQ2lsQitQV1tjMX42KF9+X357cClxRTBwRmYqczQ9UnRoZE1kSXY/VW9mPXh3JF8kZSh7ZnU2cEFMTnxkXztERXBpN2N5L2UjdHZ0LH1YbElMVm5tYFIzZVlUW1Mx''@;'; put 'put ''N1Yoan1KcV5oal9lR35KQm5EIWNfLzFdN1RzbjQuYnIrPilSIV04WzxUWUVUcmhufXhBYVghK3Z6bjVaV3dgXl12T3hoPXkoMl45fkdrSHM/aU9MPmY7NT0vOi45L2IzciVkVk0mOHo8bUs7YWU2JlQrI1JITEI8fU5rW206ZTJTMUxYdyxFaUpKTTMkZGBUQEVwbmcsUGpnKHEqXU46UE05KVNk''@;'; put 'put ''bWlwKEBmXUUpMiZlSHkzaGpjcW1hSEJucjliLzBgVlgwYzNGWjhNRmFPVDdIcmRpcV40VWEsKFBnfjF3Pz4ldFNnO1t9WD1iW11CZHspJCk2WVMydXNoaiVHQUBDKFheRD5+cm8wVUN6W0plJFNmV3BrYDNeTF1WcnpCO3l4Z0N4bFovY0IvViQhYUJVJDkzb0s4P3V2MzosN35MI0N0NDYwPjpo''@;'; put 'put ''MS8oTUt5ck8rJU1BbTZXOHM5ZW5mO2RPX1UsemNLQj0zI2ksbzUkMSpdYmw2KXVMS0NPfTFkY3ZPKDp3bSJnKHlgV1N4P2daUlFSVGdwK28+YVJKN0Y5dlhrMjdWJH10W0YsLk95YDpCNkowS1Q/N29SSzNWS1VJMzpRKSV5M2FVJGBNP0tOekJgelVFWFJtLE18WkZkaSMyV3hPT1o8YT1QajRE''@;'; put 'put ''ZXRdRCtXT2UpNk5EZStsa1MqPywwTXIkRTIuU2I1cjleQmEmY0JQdFcje191cT9gfm0xOHIxMit8WDhJMTY3KF57IyYyMkF5RG59MUJtNy4iYFBRR3hjVXBvci5ZTGcvLFlnYEBCSjZyRSpVPUMlTUpyWXA2RSR0PzcsQGNkaWFBRmd6S14iRHRqKygqY0p1JW0uaVU8Ik57a2NPUV9AI080WmZu''@;'; put 'put ''JDlEMGYzNkVZRS96VFRvYEJBIkpgQHglWEB3em1IOm5NQUEueHg/TiFDVThGdCg2V0NIWCN7RFZqKVhTck9oKDpAQEQoKV1sJGNlNGY9bTJ4SGRdKSJMKEAsMEZrSmE0JHZIbUNHPyVncFZwe0Q0cmFVelBqPyU2ezB7W2lKdmJETFI4TGJ1ZVEiYTc+OEVIaExETWR6dXE2JT9PbEk3clh0Qzo4''@;'; put 'put ''KXxtcGdJVzwsRzRCTHxVSz5eSW4uW21mWF4xX0JqcSozWXAxNzJvXmxkKzBxSGxnSzg7T2w9c0swXzU6bSFeX3s+ZFQ5NTZkVi98WUdGWTdXQElgKXhXQnpnNiN3bHlNd2gsaW9XPiF5Qjx6Pj58REY/MEFFaXViMFlzdUFTJVQsOjNqPFIzMUxZM1heIzRyKFMyMGJRfHFTaXkzIl9BbzZQRnUm''@;'; put 'put ''VmZUel5+c3Q+T2siRUpfO1VaZ0pOLE9+ZD5LT0FuP2s9cldvREZBenU+NVhfPS9Wd14/YStdQn5YRSl5UWlqMFd4IXczd0lMeSozNGhnYklVTkg4K0FJV34jaWpudHJ3el5IWzsjeVUlY2EsW0I4LF12bFU5Pj1gUnYzT3JLcDpAS1I+b05FYlNlOGJjOXxXTj1qWHEubE4jPTszM2loYD9yUiUw''@;'; put 'put ''RmpJR1tfSXthMGEiLk50RHltWVg5bTZyTTp5UUlVcFFDc2VjaX0oaENVLFsqW203MUk7QzdLd2BjNX1+WXhvLkxCMmF3YVZkP1ZlSXVtfHc7Izk8fE97Wig6ayRBYD06Nl40Ln0lY0Z6U0ZoNnQkOFJyREQrW3BwTThXSW1lS3dDMi4sW019PSFgaEhNe19UJWBHXVVyOihoP1ZfeCpAUkpPOENX''@;'; put 'put ''LmwyKXRefVIvKW0qcSw4WE90U0xDfjVlRyZ4JFY4KHk3cVZWIzdCJTlkQ0ZvSTxSMU8mJGkzRzolIlVHIXtKUEp5b35UaCRRQEBSK0RBSFUoZk09fkgmOjskLipSaCk9P2x5LEdeYH5mYkVMYl1YcC5JLm5jIz5oUX5vUS9wdzV2JnVkTmFsQmBiMUo0IWQkfSooLHdMIXdGeTd5MlY/TFAxejsp''@;'; put 'put ''c0Y0ZD5xdy5oYiJJWV45NCZgdWMqNTdoM0QobjNQaSxXfiMkZHMjYUI/IyVrOFByMzUlaUE4ek4/RUg2RlZVXygrR0prTTErXi9vRWNsTG9RWndOZE4heU96P31gQyh1VTtpOm5mPm9pNUx3RG1iMEswJkJda1tAJGNaViNNUiZ2QmY5LjJnMFlHIVZxLGg3JH1UfXFMfGtIIyMzUlgvUHByJnMq''@;'; put 'put ''OWxfbEFNPkIrd1owQl9xXnBXYC5ASXI3WGxfc2pwazh8YUludFpTcTtmfTsmRnl9SVhuLE1UPlhzZyo7bmJfNi5zb2poKyRTa2c7Inwva31kZz1vVj45SWgoWGc8RypsfG5jXj5NOEF9L105T0djZC8iOjl2e1UjPk89YlN+OEJdLzIobGhwVlt8KG85JmdlIiZYbHdyU250QDFsXj1DaW9ke3Vg''@;'; put 'put ''W11VQmBvYGtJekJnSiE3T3FuTjU/U0x7azEmZmJOMmo+YnROO0Q0dTMsLEEqVC9SaHxfQjpMd3xRQCx9fD10X2NsW2l6KDBNQnopWEA5fEhJSChJJV0rZXFPWVhuWlBuSmB+U3hkX0F7OnJ6aDZiVWglUCNuSClEbDxgTmhXfW51L3t1XnxuQ2NTfnVLRVQyOnkhUF90VUB5Y052QnFKIndTfik9''@;'; put 'put ''K1hJWX01fHsxYCx1UXM9MD8ubixEfVJbdGdKJmE+UXJuKXcmTiRZMktidHthOD95XVUianRCKTswLHVVSTRnUT1mcT9EUS9iPmF5dzNTTnd+PzBeKDdRTCk/PGZ9SjA6a31mJW9qVy4/dXFwdTxHez8zRGZ+fUdkKl1lbERYeDN2OWR4SXhtYTUrIiRBeUkoZ3JDQGM4fWNpVkxjVnlPJW5qcjhp''@;'; put 'put ''R0guZCNwRkc1dSNHV0lFV2dmWiExLHR5e295clZjZ2okXksvW19Jazp4TzxdWSF+QSptQ35wemU1XTh9Ziw7ZmJjfGsxZjhMOTAvREdOJi5ia3NyZGVYYWtmc3tbUmJpPko2KGBgLD9WaU5qR25uWWV6ISs0Y2ohfUVBeShYNnVgYlY6fmwqQW5tNFFDcy81QCshYjApZHZEKSRwXnFIaDdSQW1j''@;'; put 'put ''WnIpblkrNE9ubHMycFRPPjEwJmpsUVp2e1JPQzopSzJPYzUiT1ZeKEhFRVV3UElZVzJOUWBmRkE5ezhEKjxTY1tNdT4uazhuYmQwQ2oxKiJLX24uVEYiSSJ5aVdlKXtAUTNjYD5LeFM2a3I3PyRGc20iayRSU15BO0lLMFg1PTx3TmV1Qzg/IzRSSHMoLCxyP0Q6e3NsZzYuO0ZzYyFLMGJfVDdw''@;'; put 'put ''TU8oUFBjLjUjfGFRY3szd1NlbUM2NzdZa3pBaXFtS0lVZ3dKZkRaWEhPcENhJShISkh6fSw4Y20sKG1IYFRZNW9BaGc7dy9ASElaNEJQKmgocU87aCx3YWJPNlM4SFQkblVrak5AJTxYSTdnMjRafmRUYCI6eD8+OzFVOzhyT0dnIVBGRVA+UklfMl9CNUx1Tz4wKyh1bEwhQDg0anc0fW5LNHUj''@;'; put 'put ''ITwmWE9uQCJuQ0lHNXhAO3UjZGg3Iz1pezJYX3csOG5+cVcvMilddFkhLmJrMk4vNkFPcGFBIklETzVbPFI5TkZQZCwkSGVgdn4qQnJbP0N2OTUvZDw3MFp+OF9oRCUyalp2PXBBRlhgcX1yZz5VZyJSQDp+VzskaHtNbCxdc3IzM28sSzJYMkttUyM5UXdwLjZ8U208RS93PGd9ejNCcCw6T1ZL''@;'; put 'put ''IX56dykwfkVEMn1LOFY2M1NOVTp4KVhzQWlpfj8wXWpHK1RVMUBkYjFLSlFeO3N4OF9TW3Y0K1IiMmg4ODJ5NjVNbCFLWWF1bG8kLDI7NktPS1VyfXE7QVc5bEEuRTV7XVZ2fnJNM1ZuV3pYY3h1LkRmInMzQjtRVix6VGZrQjQ+P2tmMy9CbiY4LG96P2l+NixTL0dbcm9hKXk5Wk5CKmAzLmN1''@;'; put 'put ''Q2N5TVNUdXY1Wy41Rz8jZzpIakkhIlo/V1lpODtqPF10ZXRZWXxiSGdTUjkuSml7WVZ6M0w0YyE3OV9nTmAsRztwMnxoalcyaVNSd3dyXlJQcGRvaylrOEx9cm0+Uy5BaVR3ZlhYYG1bbGAzL25OWHtMVnRQY2siWU4hPDZ3UXpZSHhKKTU0VitFdH08MXkpXjFZeylrezRxJiR+dzxtI1B6Yihr''@;'; put 'put ''M2ooPUQyO3BsX3xlNVM5KkVdd0VVU3V0fXowMi9rQiIpQEVZJnFVR0htUlpqQ01qRm1UVXBZakMiYH1GalQmdl4sUzE5RnMoN0RqWStnW2c2W3thS0peTnx4WkEyZypEdlspPmYyVWtBZU9NSHlnbGlfUCEjK0tSbXslZ0ImLFdUJD55UCRsPlgrT3ZvQn5MQjxYZzV9Tj15R2B2anU0e2A1OT9a''@;'; put 'put ''UmlbNDEjPGp8Y1pgQmxuJVEwY1FzQjRBJnJ8NlNfXSg/amE4aHVfYltEUk9CZGs+aFZIUXJST0xgNTk7d19SWExRPH0oOCF9LEh9Zl44aDEkYVBfQSVtS15wR3tQOjpTSk9lNCZmSm9lSHAsfEtLL1RIXnssP3Z2cWtldW57P1J+Sj44UGlmOG00VSRPISh8Jj5hOH1JV2QwT3I6NH46PVFhRmc5''@;'; put 'put ''KEI1NVdKe1V3cnw+JFE6JnZrfXNYWkpMK2lwTGpgKCxMWXJURnxPb0BeLD1MbmJLIlE/KVoifXxnRmBncUo4P35ESFJFNVlydyRGfWdnNztddWdPN1hLaHY+Nmg7cUM/UG5Zfl1ORUl6fWgvLCVEZ2w7NUh4QGoyK2F4XTxQZnteLyklTXVjVmRkNGAwZDEuMEdsd0BfWzA9WHwyNm9TaT1NfHRV''@;'; put 'put ''XzMoWThee1E6c0IpVzNrOkphMEU5b3p4KFRSQjo5QChKek1iSDJYa3B5UEpjclpwMT1LVlpzNDc7IzBIYjtnSGZTZSp+PHpXTiZyRGZrPl02bDdpLnA6TGExITRmSEUoKixgaWBgbmhnW0xMLHZ5aztSMj5+ekZBIjJ3RWxRVV1aMSYuMDAxPVVZbWRQfkg2MFdZfCshfjZ6LkRiQ2poQHh6U0Ro''@;'; put 'put ''ek4pakRzR0laKkJsO3g7WmUsSEJ5fWhRITUvM1EjfisvSW91eitWQFQ3SWY3S2JNdCo5dS46WGhvYSFLWEwkVik/LllneERhKTMkUEV+PCtpT11halslNXQ/RVJmYFgkPkIhNTVmJjw7LiZINSpKT0lsdTpMW2U/dzloQmlBMGtCYHI0UjF8TkpsQVkmMC9aU3J5VjM1WzpHO15pc2xQTU1NK3Vw''@;'; put 'put ''dVt8MTMobU80MDk7SFEpJiMlMzBqaHYzcSJSbXFxJjBLcno2YXRvVk0lQGw+QTx7NUxdXl5tW3dPWnlVeGVWJGJ1K3hNU1VXQ3FLRzdnPzA2MlUlbDBjfU1zVGV+fm8vSnwlZ1t4LFs+Y2J0azVOQiJzMzdRfVBgO2wwPC5LSispU0kxKHdlejRtbSNhIlA0fllVYU58ZHRSNVB3UHZfb0AxLldj''@;'; put 'put ''MW9DdXhKdW1hZ1tEO0xAISQiZ0txK3M0M25ORFVtfighIkRpdVlUYkQoSWhRMW9qLFlZZ21CZzNGKG5UXiE1O25oYEBCT2lHJmZ1bEhPYE1aSmBiYXc8Wm08MTlSdyFGO2BRWSEjKGpENk81fm5RIyw0RUkxNnk7L28zekUwKmVHMzlKaTdwWUBZcytjWyJwc01sN1Q8fTFCNURkb3omI3s6Q3hH''@;'; put 'put ''NlYwV2NbTGAzQUgqfEZmYlMyVmUlTSh8bmFdKkdjVS9ifTwyaj5eNDQrRFVlKnU+fkAhJnJ4UU9lPUU+SiVpJE56Q0wuYzB3U0BkdCwrVCFba24rRz9GSmNxIz5vLzguajQiKC5Lbyl+IWdaIU5AQTYmbkk0dioxP1g5YixpMnxLTCZ0cE84MHYqWnp2WEIoW2V9cGBTdDl1Pk9WRVBRM18yT2o1''@;'; put 'put ''R0xreGNoZHhRRFhEUWIjayF4UEpTOlY3T1kyXnhOVEYoXnsrZEQieHowd0NWbmxiTVBQMk46bXVWdkMwZS5YKGM2c2BTIXc7QzpEbH04azFjUFhFLDczTEMkL3E6S2Z5XnElVnFTV34+a0A1cSZ3S0p8ZyIuSWlmckhufnpFdGcyXzJUOnJvdnwjeWFmPjslNHJdOkZ7eD1aTDNdcWg7cGlxInNX''@;'; put 'put ''SyoqU0AucX49IilOU21FSTN6I3VlQG5ERmAoZGtPYXZpOlFCUDx5TXs+dy8hdEh+dHJTdVUrUHdGT0kxRVZENFE0TW1mZ3JYdmgiN2U/Z3xCQnB2Q1Z0X3xWTVgxc3ExcH47LF1gN15qKyNkNSFfdGtoJHJmNU8lRjw0eT1ga3pYIzdDVjBPL2N3OURoRT15XzMmJHUsa2dCdEdqd01hbzkmMWEz''@;'; put 'put ''IWZoPFtxaCFSSUMieUt3fVBkWy5UVGFbYj1YXz80eV06QGNvMj1hX1tfdUtgNlNrKHVaQm5ZemtMT2x0QF9aJWNlMyoxZCp0YjVTYz8+MihkYDB8USF8a1NWY2ZXS3I4cT1xMWEyRXBQW1I6OWpIeF18PnR7Kz0mKjRSWkZybFomblAuSjs7Un5rdU8icnJlZnM+V19kOk93WlN3XStsMiE5N2db''@;'; put 'put ''RlN1aEg0WkI+aWx5TF5YUUhwYWNmZVRfbiNgPnQ8OjldJTVEYyo/TWJ8KSk4LnBJQ3BVdlpUaHR5K0t+aDAuaGhONlhIMzo6VFZJSmRXYlRtdz9QWnxSV056PypSLnVRSk4kUmkxU3hKVio9QUcucSFjPyR8RTo1cHloI2pweitaSTZXdXYscmFAKmR9ZlE9ZHVyU0pbPlE8LDFNTXlwR1R4XnpQ''@;'; put 'put ''VktOeiwvKEleMXVZMnA1OlZxWzxVY2E3Ljx8I0p0U11welNrczlKS3B7QSNYWUA4M1tRVjtHd1RJKD5xIT9yZnsxUEN5RloxTmhsSkRKcHo7I1QpInZfdlM+azF+MTorYFh1PSwuNSlbc2dgTikwTj5HJm4vUCEoWW9QI2VkPUtVMTN4dFt7QTh8cW5sQj8lb1BFSXUjQXBYX2l1I3toMj4wODIo''@;'; put 'put ''OyxIYjllS3RSdzBGSTU6K2FteTJVT2dRK2Y5Zj56UTpAYmNeeklFTyQvKGNvPnpDd0FUa1FyVkREREBveH1AejI4Tj5Sb2g1XkQ4fWF9b2VANHJIMz1IK2IzYXNDSl5mI3pbRFckalVRZVJ+dlJpLkckZnA9KCs1Z10+OClKJltGcT54V3loTEt5RC5rXk1fVXRdKDJpaU0sOnMsM0peZXlLXV1u''@;'; put 'put ''OHFmV05eTUBUaUxJVkNqUi5aNVJSPH1rRjw5Pi90VndmaDozdXl8IWFeTnNXLl8uTXJVUjUkZjROaGs/cmArQnBgIU8pJmdaZDRBNGRVLytOVkAoK08mP3dwXnZKVy5PbVhFRkcsbz1+dCN+Jkt9KXUyRGYhXzVjRkReTXZwZ1RVej87Rz57LDYqMkQhYEZVLjQiaTN7amZBYnxpUWV6a3xzWGoh''@;'; put 'put ''aWtOblhnPzwocmcyJkcpKXpFRzBpZUJMY2U8OjoqbXgvMyJKRmkyLipJdkY/aUY2QHJLOlplMSV6Wik0XWpdJnZ2OUNddFIhP2debH57LDhjOmJfQzx1R0ZhRjcjT3UpLCZdXjRKPyFJa1d1Y0U+ZFomQllyNDEoWlB+Yi8jPXFSNjtVQFNraUd1dVg/Q1l8ZGBTSDVjamk+ZEphNmBHc29vKnRl''@;'; put 'put ''czM3TjpkWEw4I0B3S143WkVmeHFrajN5OWxbLn5nc2h0L3xESiwibylUMCRMcjBYOF5jTVt4UENaUFA0IyJJay9JYUNYKE52TiY4O3csey9+WnB4OSw6d143MVohSEhbcz1dN1YpS0NPSEJmWUs1dU5UdnkwRiJTbGBpY05IQVEmbHkkKD52IyRdPEpLbHhEOkB0W1heS0hKeEVPeXhibCFMOD1i''@;'; put 'put ''enUjaCQhSlIuV19Icyowdjp0OVJPI3tWPkRKeCMrc2J6UXVGL2A1amssL3wpZXokaihAKXtDbCo4ZXFiYTRnKSFGSjdENj8sdStQfiN7bEB1b3wwclR9SC9UVSVlVkssaCouNFp5bn59dElnaiNdQ0ZbcTdzcDF2YC5MMSgqfGRQdF5PaW58fFdxVit2b2Z3bHx8R2dARjFaalJ6PUldbFNASUk0''@;'; put 'put ''OyQmRik/YT0qKDdFSTByKi83dl1ydkZkY1E/bkddRFkuTSYwJXBsUlslLnxsezdtZmRpSXRTXnhhTHFGaXZuckl+cUgkZTFII01qPVJsST1tcG13eHdUOTElPG8kSyN3KHFYRUJgK3lMTz1aPHYwckFITGVtdHJLbCszfHIjWTdFPjMqcDE2RTxDVTJmNVA4RltnIzM3PipAX0hZcnIkeiE4fTVt''@;'; put 'put ''b05rd2o6Z05ZSH5CVVhHSWZYXSZxRkxUYGhQVU1lVU5vYE14PVV0JSUhQjBXNWVibmN5bSR0UFdFPzZvNW91ZzNbSWBYez4oL3lgeyQvL29leWciYW1PdjIhNkBmdFYkfSRTVW80OCZSSXh8fioqbGg2eHRBcnJzZHxqX1FhPjxsfFM+KEppdFVdaSM9O0t4ZFlKRU4mayVxV2gmOVtdRVd8KTx1''@;'; put 'put ''OmtqRGRwMUNAOF0wQ0d5ZWRyWF52NyFMPy9+XXUhNyltOFZyTnpuaElAZnFiJV8rPjg+Mn1VYyRtbDpuQ3Z0V0QkV3FVcSEyQE5tK3M9aGUoSzJEZ0h5aj5tVm8rMXsvNm1nRTdzRm5iZy5lYnp9RG1qbmdxSjJyVjM7dDp5YzBiUTBtS1o5Xk5WT1lme21UfmxpWEllW1lfOCNiQG51VjUuXmM5''@;'; put 'put ''UzFoaUw2bmVFV1UuTzopeHYqT0FSc2lWUHdXWzNZJm0qR1lzbEx9WV9ZZ0ZWMW0rNSNhcnpMUGFycyt1QmxRKDEuMm1NYlV8X1gpekwvNSJhSyZ2JFUrUSVpSHx1NVo0IypxUEo7SSIoejlGKjVrRHBRPmc4bmlOST1fSV11RnBZVjhhWnU8aSQuM2xvMDNTRmdHK15zVksmfi9LOFAsYHQoM3FJ''@;'; put 'put ''WkJJfV93PXNpN1pvKyZBP3U7Ql5nbDFkWnY2Yyx2YD5lMWhOUzZka2grIUBnKjdFRVRvQEBgd3Y3amV5cik2RTImQEUuQ2sxI213IWV7JGhTdV1yLy8kbik/bWV9a0M2ckRZZyZOQihBMGBoJCszcEJYOnRDKjoxPkpLaW1jbyE5OyY3T1NFe3FbWC8kYVtKKDUyYWQ+OFcxRCx5dzJbPVdldVld''@;'; put 'put ''Wj9fYkwkTC5CdVo1QV5iKXxHXzNbb09JckBZKnZoTVc2OGt+RU0zflBLO3I4Nis/UCopaTxAYEosVnpZKzU0PUhrTFBfbTA1IlQzWGFvfU97UlJ2WnE+JHArNDpnbypCaDVLX29aZVlHJjlvdTZhUlpwfnVeR3xhRzwrZX5NPDopSlljM3RfPSxkYnVISGFLeV90cHllNUIuS0oxTjQxIko7PWt+''@;'; put 'put ''W1l9Ok98cV17R3A4IXR9Ok4sa31XNV97JU8uRCw/LExKTEhYLHZLfXZjZE04NndPaVBAOH1kK19tLHU0PS5+a1g1ViowNjAkT2MuTGJEKzcsI3lhVShwPEZgPCorWT05YC94QFlVYylNOEJDRjZGUjw7Rmk4eWFme09KNjE+VGt5VFJNVH1lbUc/SjtCfmlAfGltaXsyZmZFOzQ7RkdNJTdvbGp+''@;'; put 'put ''eSwuaExacSVYY0hOT1ZkW14+cEN6UWZrRkxgXk1EPjp6Wjl8Uih+aThuVCV5Q08lfW4pVD8wNlBiTkxQUmk4bGlTKDRoXUg/IzAxJFIwPC5dV0tdTjUoc1NESnR6aypMb1N8RnBWYVdjfnMkNiY4NiZFNn0rU3hzWG8ydkAyKiJqOTxtX1UueUs1NEt+R3F0KTlQVWNWMmwyM3UucFVIcVpoZ2c7''@;'; put 'put ''b3swfXoyOFJoYWA4MXRnPm1lX3JTKUB9Ql1zPUBtYXEiN1ZrTyo6b0pAVnM7VGNnaXJCbDNuWVRoeWlAW312bT12KkZ+Qn11L3tFfVNBKlE6MF1oOzZIY11hIWZ+TSt3cnsodCpKYV07SmFBUCIuIUxJKyNNeCthPzhxYzRRNmQzWkM2SSM9UEU3YT1DMGxOLz9nOVowaUh5SmRmVVhDeyY4NT19''@;'; put 'put ''bGk3dT10OExQUlR6RCMmbEFYQSNBSCpTNX1Hcix8QjVwOFldLDd+Yi9KZi8ufigqTUV6Q1J1VyVobkZvX0FtXXMqfi43OXVNbEQsd3M6QWJDYUFYWGNRJUBqb3J3SHUjeiE4X2NUVilMfj1ndyRqPFgzQkh0MXk/MXQ3PTxkPm8lTn4jb04iaERLdXFDXVRLY3NpZ1MhPUgzYjVMPX5MISZ9P2dX''@;'; put 'put ''IzA+KndaQVMrQSUhdGl0S1N1cD5RZmEpJDF3az9tWVleT0hFbDcuVl1PL0xnQ3FUciJTdDt+JCVAa1RtcVc9T3IzO15KW3R3RytTWlE9N11+KEx+TSlSfXtuJkpAVjx4aElneylEIlhoOHduTkJLfCJEUHRTOH5tLEN2RztCLkI9aG46eiRDRFVCPHx1b3xvRWNLdFQ9KEtmY3Fid1FZazY3ckFs''@;'; put 'put ''KVRMYTIvVTkjcF9gekloXk15IkVxdXZ2TyV+MmslLkVQIUk8LF0mSkAhfUpBNHR8X3J5bEZ5SkR6ImEmTTd7JTZZNDQ5YmdyWm5LVDZMIzhseVVdRUl0QHVnZV5vLFY7aXtCQ0hDZi5iOGxKWURxPCtaWGYyVypZQzdSbyJ8LHchby48b0VRYXY5ciVjVG48e3pbYnpCJj19RHduWmUyV3hpZ012''@;'; put 'put ''SndeWTVkOi5yPTx+LDZfL3skLFg3ViwkOnBDd08+QjZvcyw0R0t5YTorRXhmZ1BJXl4vNmwkeGUwc1lXUm95cnVXV3JIZ1N4Ul8mUzJHWjp5Lzo8Yjl4XkxXVSRIb2tlPSFXeHV0aUQhK0BlL2xtbDIvPCt6aWN4QVEsdzw4ZCVNNWxbZS40OmZpOEM1VWxrenRUfjIsTFt5TyQ6Nlpdc0VOUD9w''@;'; put 'put ''WDdUQCN6YHssaz03cktdSmwjNkUkQmxifiZbcEpBRm94SENkWml2biFWVF0iXTlxLjlQNjpWeXUlcCR8ZD5FKTM8KURGPzJXVi4zK2VQNGhfY3QlI009cmlQQU4qPF5GbU95OmxqRjtQPzwhTDFNenwiLiomODdtaGtMcz5wPnBXXlspcnxvR2VjbCZpcCo2c2xXQm06ei9FOks/U1Q2YDg3Ikg2''@;'; put 'put ''NXQqYkhHTXl3aiV+PnhQPWNDcEZyRX5xZVJPLzFdejMsWkBUQzxocXUmSHEoSChNKGpoQWUiMkRYdHpFYHk8KS5aS0M6d3BpWmouV1g1ZyhAKzFpRWx+KSN7cUBFb3dHcEo9JEZfKUp3Q04+OjB5biFuTH4meUN6cnl8TllnPDtAIyVwam9lOXouNHhGbXxZUjJdLkZUfE4vSG1tMFdFPlM2NUVj''@;'; put 'put ''K0lMcHJJcyVDYDsiP0tDLGo7fl1kIittTXA2XyVsejksWXMvUWwjRkZuWDNsRXh8VmVncHQ9T2VZfCp6azEkI0ByaX1UUTJtZ112bWFNJUd0YipWP3dLUCUrZilDNXVmOTlDbEAwTDF9aV0iMCRePF8sb1tvY0VCWipLamAvalk3aU1kV1Q2NTd6OXI0RCIrQH1UcDpoPkxGZn0+Wjw4JmtOLDJK''@;'; put 'put ''eUw8XWRxeTBOMyQsJCV+WHc1MTQmcXIpTnN5I298NzVbK0Ihdjw0O0U4fVs2VH5bRGJMVy5rWD03ODMsMiNUMVZGa3QkNGt8MldGUVIzIyNVXU9fJCU8THMucix4QEdjNFJiWkFzPXNdOi5WWGBKVyF1UXhIRUU6Uz9bdTVhYXFUSEk4Zlp1eCZgNG4wUVd7ZSM6d1pQJlpObXJJImkkQUpGQUIx''@;'; put 'put ''cU8iZV1vUCRvPnlSeU53UUNzYyImaGk9U1hfRC49OSxlKyFNfDEzM2d7RDwpfXB1RF82YHZHRnAwMW56MT5GR1h4LDFgOmhuemhhUm5bTUM/PGNLYzZqekZAI2czYDRlMVdRckBJLGtPdjFrcXx4WnxsdXteSVtEZTtid3BeRlkuX0JLPDk0aUsvQlQ5Tk5wTXJxc3lTRyhZbHp8OShtV0dCeVY5''@;'; put 'put ''XmpvbWJNa3tEVUdgXTJTSS5OWkZXLi53SV1NL2leeFAwWD5XaUdsb019T3lBMExUWjliVEYxJUhDJS9ER14sbEFNKk1ePUoyLFI9PSksfUMsWExBOm8iNmAqelN4ZkZETWBPdnN+QGdYRUtwdUUubzAzWSQlant5diZ8M3REND5QKSM0R3p7dGZxNnhoaEZpRWI9Wi5TRWo/YVFxYUpOKGZ8a1I6''@;'; put 'put ''LzJ0PEUyNnIyIV92UldPRkMhdlJFcERxfSYvW3BXYyxpcHJrfVtpZzw+bDhnai95cmlYSEwiWHIoYmRJJltxUm9+eWMwKF9PSFNVPTVRclZYVnxiKjxGT19RLFc3UiY+dmM1ITIrfjhGNSh0VnByQ0t4YDU1XkZYLDdCVUVGam89fkpvPUQrPiR9VD9fOykrKiFUWm5tK0EqVEtoMFI+Mnt5eTYi''@;'; put 'put ''PXFDQjZ2d3h7MyhubH4hOzpXa3t+aHArcEYpZypLWVR+QGtFfHV0WkAqKV41a3MrMVZ4QHQoaSJjTSRhYyZNIXljeCYyZlVtdlszLEVIbl95WVdJLHszV0NOZUR6LDx+WipodXVeUXw8e0t8UyFSWDdDbU5sQCJ8KDlgNjBRd3BRbFdYMHNpMzQmVV9eM3F1WmBqcFZmbEd+IXBia3NONW81dzhu''@;'; put 'put ''c2huRil7cy58SFBuL3IsSUw+Pzg9YnRuZmAmQTZ9MUpbc1pyMlpxNk8wT1U1QHxEYTB9Qzg/KTRgJndbYC5WQDsmfVV5cS9+OTpzQVZdQGYwZEp+dXR9fWlpJnJgMTg0SmpJa31RKixWTk8rUl9SSWElSVhVaXh+Vj1HelFzUDs9cVhXTSxZdzBmekdLPls/cVZSKV0iJEwodCk5SG1kUGFofSE9''@;'; put 'put ''MFVUKGIqOzNxU0A0W2I/JE90dnJbTkZfe1J6LCkzaT1MXkI0dnBRem9ZKEhhX1EzREB3cmdkRiM+M29OO0tiSXk+NylNcyVQMGUiW2twejpIYGVzan1oN0toUGI4Kmwwc041ezIvXjB6ITFdX2RLcz19V1FvRjZtXUMjX2c1NEVPQiI/dz5KKHdefC81XWEiPW8wMzJDTE04JTtsSkMlSWlqeGhR''@;'; put 'put ''P3pHIjZuUXV6Tk5WNG5RJDtVakVZJSpNV3JzRl9wJHVePD5GdiRFOFoiVUp6QzEpWEBGWn1OMSVvX0FbRDw3Ikg/cT10RkU9VDdUdlRWX3c+elVtKDR8YT99QG8zdDZmTkZxcjt5YltYQVMhMiVveTxAeDQ6QSZFYHVyfWN5Pi9taD10PXsjPmQyakplMFVVX2RVY1tQfkljRUlPNGVecHtZKDFk''@;'; put 'put ''KWttYzMha3JIZHp5cXdyVyg7OlRRb1U6cGlmJjIoXilGX2tuOHUvOFpgOHw1PihvSSlBQy5+c2twMHlSWFt2Yz5XRm09ZlEzInooeCUyeypRfDxRaEw9YnJyLFhJdy9ZNSRZKSp0YldKaT0wY1VmW1MhcnVUSDpZW0NEX3RfT0hgOGd7Jl92W19EMCxKfVBxXUhUJDwpR1E5bGEuNnZ2On1eOWdf''@;'; put 'put ''UHA8QEs1ezxxWGdNPDFoImg6LC4wImh0TytgdDc7ck1pN29+c05gaXk1UDM1WitRW2I9RFtUc01GIX14QnNCd3llXmleOytyQWNPJXAzaFssVEdkR3w2WClDSSQyTy84S2xdLklnSC4mIiVyQSF8P05ZWHRybylDW15xNkVZZW8ybTU7PDVtLy9bPVpXSEQ6Ly9jWi55YldMbnFmUTghcWtiNy9z''@;'; put 'put ''XV49fj8/Xy5UXSRkX1NkYD5RNHx7fUc8SnE6aDFya1tLQW9QN2FwMHVPJnhATkFtUz5dKUEvTG5UbDB4ZSRiSURvPTA6KzxsJFErUCtOK2IofS4oMV5wJSxjIXRTfG9GJj1WWSp4MFszM11MKmA5cmJHS1peVi5zJFEhfF9MYix1ckFCbi5wPVNTTSNdQyZOUDNAJFRLeW9bKGhySTxCeXRdZ2NH''@;'; put 'put ''V11qeU5PLGdmVE4kUVVRV2pzdXpfQGovIk1WUCFZVmdtTisyfixdZSRDXjM8ciheeS5wdWNpfEEqUTQpL1tpJCpkel54PXtpeUB+OkVUeTxOXm8weD54d2BvdDt2dj4vRlk1XSkwfX1WQ0c2RWJsPS95Vnt9YnhPKkNrNzUkbSlHKmlXX3Y+JmhvfGpNdHxgT2A1UnBIfll7fGMoNSRkdGxEMVU2''@;'; put 'put ''PmViMUBPIiU2fkhgNjM9d0oxdjhKS3tYfD5gP2R9LCY2fCVOeXBFNGcqTDxjWltYVjp6ZkU2TG1hX2FPK2QzeCppT2heOTwue0B1NGJuOyQjMXZxVlM8Ly4rO0E6QTtgPU9rb0Fre3NgdDtNYEoqcyFhbmY7I11yWTQvT2VjaC5aRD5uODlFUEl+d0IxRER9TTx7fnZjJnQ/TTtzZTZyMD85UV8r''@;'; put 'put ''O15scSg5LyVpXXMrKm9kejspRnEoPlFMfDt8fTFUQlJnZHtvflp7WjxyZXpDeShBUXt2I3d8VFNgdjB5cD88LDVSWlV2ZWtDVGk1ejtVWWpqdHVpOUNgOSVsdVRkY303Lj0ySkt7dXV6WnlHT31edVZQeiJ7JXxbYT9ZWV1SOnNbPzNneFF4NHxELHttc0JnQShiLFtyTE9mSzNhZSojeXJUXywm''@;'; put 'put ''JnY6MWlDLnJpUF49WjN0Y2g4NSsuZ19OcjJGbVZFNWMyLyxxSy47WkNrLkZGLyJ8Z2FwMEs4WXk3e1JuXVdaWDo9cD54aX1hUVl9fWZNS3M2SSwvVTFONl1obkJmTU9HKWElKH5CVU5AS0gvZVl3VE8yQDBIQT9+Pyk1WywmJEY/THRvZFlHSj1paHgiYGJ1cE90fWcwQEdXKXpjVjNdfTthJTpB''@;'; put 'put ''Oyp4NzhZUSFeVG97cF5VXzxTZ31GfSFaO0toLzZOKkBaemxETjdhbFMrdWJ4SiM7LkRIYkMsI1ZLTj9ESFJnY0IidjMuOS45ImRLRjE7TipuSkAjb14pY3B+KTUiTzNNQiRxVWEudnwuOS5ddnUzJEZqOGNCJHFXWUFfZDVVVyR9bl84KEtCOWBEb0lqYXhUKkdMTylgSUx7SGt1WlZXPXA+T2Ru''@;'; put 'put ''ZVshYEdvKTVfOjUkI2BtP1libkUkK3NjaHhpZDIucHdafS5ad152YlBeIW08ditie29ldVdxaVVdM355KzNJRktFMF5KQGRvI21Adj8uMUMlfSJdekZ5MzVdZ1tQM3BqNT9sYU16X2UwfmklQ3t5MFczWjwiMSk5Ozx2PVtbXWVNbWJwOSlpU0dZJFpBOTRzUFI0R3MmR0M7dFVzckNZKFpNbDBz''@;'; put 'put ''TnRAYFV7OlNWdjkuM0xVTVJKb0h7TitheHdnRH4sTEcwMTEkWmZHNV8/M2xybHI7dlNMSWM4U0VZb2ZSaVNAbz8idFZjJl4zYmtlPkZWWHMvLncwcGkrZUBdNm5LJkg0MVg3JDVNOyIjNT4ld1Z9RWRNYV17KV96dEFEJnpCN3Z6b2U/SF1fPjNTZVszXjRffWVAJm0yPFtSNTJ3Zyx9Nnk3TCJl''@;'; put 'put ''UTxyRWhvUzVLPnlyLnpYUTBjK09QaCNaS2QmWTRWRXk1PjlTPT1qI1E8KzN3dmF4NUZeNEczcmV9K1NGVytLOEpQUVZJQEhAXkdROElGWG9jdUQ8bzNaeXQvel1FQzxvY3UrXkl+XmhjaD58d3xhaGtabFshYHM/NVhfWX1RXjNXWklOYXQ0TG5uZC84b0R9OT1fLmY8ZD5ebVsuVT0sWjhGLzl7''@;'; put 'put ''fV8+Sy53VTc+fFVtS1c7a1sma3Fufm99eT1sZXUuVXA5ZEV1dXJEN2k6Ok17b15sWz1RRjYvR2Z1ayxrPHVwKHVXaF41MVU5ZSkrMWdMMSRyUE9yMiIsMkVfanFORHljSmVia1NtPCI6LF9KOks5V2B3WWVYW1JoV3c5ZDkxdz5daEBgd29PPmpPaFtgUDUjSTxqfFEkaFZXOXR8RyxBRjIhPjgs''@;'; put 'put ''TW0kJERpcSkjYDdoRCZ7XXYlWU4+bFhmTDtwKm9AbTU+JjZ8NS8kNH10TixoUUowKlc7NiIpXlZ7UWIsS0h2enJiN0R5ZzU0UXlzdzVJaHcsQip3NUx3RyQieDFtK1FtTWNVd1REIU18TGdNa0Brc1l3NF9DTmJdJk53WXpuXmQmb1BQcTdjWTYzcUMxPUxIXkY+KklSKGRGdylIZlFuYCp0NGlT''@;'; put 'put ''UXB6VF5BNCN6UixQfV99RzxgI3ZbWXNEPDQzLC56MCNNSUApYG8/aT0vYjJdK29lVz1PfFs8fXNDVWp0UGxTUTBHcjNaM3g+X19GbGtJc2lUKGpdRl02SUFnU0NScmZHWXshVEomPENGKXtoKkohaUBVa2kzaXZWTXIxTnNNYU99NG54bnVfYldXKGVfPClIXmtAPD9IaX53eH5MejlEYEwqPTtd''@;'; put 'put ''ZnAiNVU9SWU5PCJ6QT0uKD1qdCIiQjwhTVVzVz9lcT96dHciLGpMP3Y9Nm5mamFCIXw4Mj1pbylfJiN4Unc8cnBaZmB+eTxnUGRgTFsjbVFjJXdJbyFkbU1HVmpvd0tubiZ+XWJNPyF8W3R8Nyk2VWV7P298Zn07V155OmNtdEkiaGZpPH1BTDdZQjwlcj1nS1UiSC9HPXRFYGZ4N1B3ZG1Za0ZN''@;'; put 'put ''T0xgPzBJZVg3YXxSOSVrcjFiRHhaIU1SYT1ga0AqNXZ6X2smTks0fj5jU1h2eFs7N013YDAzRGNWXU4mQUg1K2lfWDYpOElzSCZBUk9KSXtXOkZGTnppMHE/QkZAMEFIMDlSI3txdUs0VEh1UjA/bTZ2RHAiIU1xWF84MXF6PSxJWVIvXmpFWk8vXlthfDdJSTs3X0tBRShaNEd2IkglVVJHOjJ0''@;'; put 'put ''ZDAmRVcwQHcoeHhaeT00MTQvWlVLSTg/OzdELGFWUXo+NSl3dE9GSFd3fkwxfDRZXjVuWl1Ob1lOYUNDREQvXl0pOVo0Tk8lVVJjXU1LSXpHUiNHRiwudlZjNTZvYFZqZkRzMyQjLGw6I05yIy48RXFUaVR5Pj8wPmRKW09HYSlJREV+fSYhMkw/VWgkQ0UwQyptbms/JSQuKF9+b1RPU10ha0BI''@;'; put 'put ''JVp5ZnExfEZFd3Ntb2xJaVlMfnIxXXtSZV1fZCx8MXUxcSZjYUxlfnFLO08sak1kUlB4ZSZNd2U0SltjJExkTHtTPyErSzlZQTIuYD5JOy9UPExyQi99WlhednB4ZEJQTW1ia2UkVnsiVnhbZl98Ykpma1tbNWd3K0FmLj45VWNEW01pWlt2OlF+cTFFamZNKFZDc1V1MTN8PnRESG1ic1prSG1i''@;'; put 'put ''fiZVUiQ/aT9NfE5DbHNxTEBnVVVSenBDSF4zVChGM1Rubk9CKFp6RlVOcVVEQz4mfFEkfHBzM1QxSTx2JGhAM0t1LmcrSD10S3V1JTNkKUZxRlB2bHBie0VgdD9bI0k+fi4zbSNDdypBL29ERWhxXyZgX1VjdWcse34sOyNtTCtSK0E1QDoyYG9PPG1jMWpWNz5sWzJgbFJSKGJ5Zi5rTmtzMUtl''@;'; put 'put ''JXE/Uno4VmpCYThyTzdXMz42Q3F2cW40cEJ5JmlvWD85Om1zWlJdPiYlQjViND9+Tn5lMUchdUpaajliXSxnLnc3VGxnRyVDbmxhY35RaV9CJHcqK1FaMkdwSzspNHBhPThJL05NLmQiN0UxfC5mPXxFKDVTYUBRbEwrY1sqQzRBeShrX3xfO0xSSjA/UWw9QE5WblZSXXh9PHNZeiU2LCQuMzRG''@;'; put 'put ''cj9bKTNZJn0wV2ckfH5VOTQsNntsYFVzIWcxZ3ZgUyM2Ln5Fc3grXixiPCU7dnRHUmshMStkckI1YmJlc0gsKGxqX3ZlTUdITVVVXWZTfFdXMD9gMW59Nnl6dGJbayRiSyUrYiJSdz5WITwoTmxmaHlVe0NuP3t2LFtwaml8Iyhqe1RSdFdiVE9ddjJZKkhkVHRSeW88b0UlK3NjeT1KSHI9LjZJ''@;'; put 'put ''JVNocj1zT09SVD1iLDhjfWRXc3pjU2x2JSUjYX08QGtde18/OkI6VjNwRDs2VT9hMUszMkAlNWE3VVkrTkBuPy8pZlVZMVFgbnUmUm1OaHRyfSY7NF9ocnhbV0Yzcn17RSZ3OikkajhrK15neG8mTiVDbjBRfno0TH1UajlBanAmX0l4aTpMbzhRdz9qT1J4XjJ4fDNwcFZqZzZRIU1MNExxdXZM''@;'; put 'put ''T0NGNGNlOGtTe1dCJiQiZFF9PkZ1ans6dmJdYy9NfituelREQUVkRENHc0EiZjhkZ01NVSswXSptWCwrZU8iaDdzX01vPGxDUzgkJDZmKWEhdzkxeENdY3lJXzNTSkQ1bFJwRHw7dzErZF41ZTdIUlQwYmZTcXRrWXZzcyolSGZ7OTBpTjVKWWEqbHQvRjtWWnhGUlZYd0kjc1hRJWRWOUcieDg0''@;'; put 'put ''SVFNfTM9aF1KPV9ZZSgoNG4sQyU/aitlNSM0NUZOUHpjSj42QD5pc2NqTHtKXjc8Q0JGbiovVEo1WGMxUiRNTE9sVW5ebiUwRSRBUyF7RSYoQXpJPFVFUVVQR0tDSz9KdnQvczhWQls4VyRBSWpCckE1W2JIY3pwMVlZYixyNlMiez47TzB3TCI+Sk97ZEoyIkBoeFZXP2pEXWhrK19xITx2UHlD''@;'; put 'put ''R1IuQSk4TCM+Qz5bcW5ZaVRjaU55SSh0bHYzWlA2WHhbRlRjaUZiej1DW3doNyN+REEwMGNWLEdMam4rRj8xUT1CYy9yMShIZnRLZig2ZXhwLntkZ1ksazd5VkIuQTJSaVBZPGRaP0JoT1o0djtaRElANnlpYTxpXUpMdHkxIXh3Wi4ya25STkJGcyIoeTAwRkspdmdMKlQud15ocksxSDR0OjtG''@;'; put 'put ''IWUrTFBMREFEaz9eUVRIc2klc0ozXSIkKENmTzU0bnl1RzVORlsieUlJO0xnXUMhWCpGMEU4QG9VU0NJOCI0cUN2OHhYJlZeaFFRcnZgKEkwJWwrTlcpM24sVTEhOXlNUHMvfj5FInhGO3Q7MS5Efkt1R0JMV0FyMTIwZmdOJXt6LChifGZHZkRdUExQY1JWWDVYWnw7dntlVTtGLEZvL0JKUipL''@;'; put 'put ''P0FZJVt6JVcmazdhZTR2V044amMyST8+NitvenUiKl90MV9YMWkrTkdsfllDQyx1Y2klczVLJm9rcmB0PnVncj55I0RfbEkxWEp3YXEoeEJRdn08ckope2RdQkNYP0AlYSkkbS45fTlgcSFeNTplXjpAK0AiQXp+czlIIShoTy8kKVU4WH42N3NmcjwoJmZfNyFuaHB4LHlVKEdyfnNtcnhyWG88''@;'; put 'put ''JkttUk5NOyN1T0ZrN3d6IylUWipbaWRlQkQvOGthb0JvYGVhTy5NN1lFSGgxSEhXd2A3RDVIKGkzYlYxS01jalVhL1pfWTNwcmAhQj1wKU0rPnJhZH4/IShlTk0+aVh+VTxvM31UWFMhXmV9bjhVOWo9QGY9cGRRQCkySWJqLlZ+KjBXU0ZLRSEhPzpGRTd2XlhJKT1US0UmTmlfbzk+ckg7Yiw+''@;'; put 'put ''WUlVMlFrUXdqLGEubDpBIXU4ODhXRWtLNXN0XXhufCw/fnBwektRfC9vUiZSP0I5UCksIShGalNQMmA+Z0EmKUs5TVd2bjs7JF5IVFlDfmVJVmhyTjNxeSV9RGFWLnJCfntWJGdgSio3NnoqTkZ+WWdgJl9rN1hdSURPT1FNJHQ1bGFKdXsmYmBlPmR+SiRteWNCKFVadkB0NlpAfWM0e19sZSgq''@;'; put 'put ''e1RLRkhDN1ldJT5+e2BhLltkKFoyQFt+VGYuNmJOMyZpaWA3aDVTfigobjo5JWgkfHJ8U2wuYGpvTGdEKTIwW2VdPiVpWERSPlY9UHhiMH5CcD5zeTV9ZnhSXVJfPE5eO2xTZiZte0p6ZS9CRXtRK3kpKjRmamB+KHpsWStUI0Q3cXZCPFg6LEBbUElRQygkI2w+fXBmVXo4bnwqIzR4fSoqJCpq''@;'; put 'put ''cVBhXywleSRTfCw4ZyRdITNJKDBqMFFXNmNrc1FZanRJLmZXSEkxe2J4N1A1U15AQjdIPm5iVzIhWmJDaUs1QlUmcFpTJGNQKlZ6Yzs+OFU6NGsrSzRdYkE9Wl4kLChoJWg7alErJWEoJD1KWUo2KXM9OjFhdTldInVdVFdGSFdtU0ZzfSQiOEJoNFM7Sj99XnJbbWlqLElvOWZWYCYyQFFsPUVu''@;'; put 'put ''c3E4dSplUWg6I1MlQGVBZDpmQWp9IXFKSSwoZVFqJGFIOW18LlcoKV5+UnVRIWJnTUNKI2J8OXxFKm4uTGE+UXhbUlJuJG05dnZdSyElYUJNYWlid0pNZ0gwciFiemlVTUssNiQxKUtdaWFwRTY6YyhULE5IT01ROS5AQlYyITJESXouP2kpPXkhOTFDMG1Nc2l8SlgvcENeJnpLeltLP05qdTtg''@;'; put 'put ''cUpOR3wlcy8pJGU8TildKEIoOU5CXjIsfHlvRUF2LCs+OW05VWV5dmppMklMJSVNVUAvSXNXPCpkUzl4UWF5dmppMkkyd05WTlJuL3dVbSJydk5DNWJndl96Ni4mWnV1OEBqczMzK1d0OX1IczRnWExgW1VxakgzMi4kN0w5QiZAeVdqLzk5cTpOOWdTRHAsTXM8dT9yPkw9PV9WNFdkNWJbfVpU''@;'; put 'put ''XTcjPng2WGMwaj5DeHZMMj8mODVCdFkmeEA8VzJqOUBiPWNWYSxFXkx+NkF9K21DbzIuN0NJYVhsKlJiJl1jSU5gVWZzdT1vOlN1RUZHVGMwcWg8MnduMHR6RT9RKXUzdntYNDN7QltmL0h7bWt4N2g9MC5IMlB3RjViTGEwMVBpYGkzUjg+NmM9VHo4VDcuSTk2eX5Ic2tSeip4WUQ7Lj9Aezds''@;'; put 'put ''MFk8ektvZm5dQS9EbkFedVYicSl+UVJeYUN5QGlTV09eNF9YSU1DO1psW0lHbkksSEN9QVE/TXROb0V4U1MjKnd9REJMent0STJmaVVkP3dpSklET3Z5W3BwN011fFVNZjJVY0dOeUB1YltJP2kiMiV0PXFSWWcueWliIUVxOUA/IXByMSxMLGUobENJWGQoXnIxPGhdYlk9L2Q7Jmh5RTMkY11U''@;'; put 'put ''dF9JOWo+T0J6RG0lK1g6VixUPX0raE1NbmFRZjxAN0BUOkN5fkNDKH1WbileZmF2dk9xUFAoXzY1M3AqaCZLKmI6a311WD9ZTnVBX0dmc0w8NitwRiVHN3UpOD8+OjZfISlyN0VxWTRhaSQ+aVUrVltgU1JnU1QhLGw5SDY7Nk4oSS9SN2pSYmBHa3dpdE9KYy9OY1RtNDFYSUchcCs/aSs4fFpj''@;'; put 'put ''XXxLNCpjX1siJDtEc1VrZiUkekBYPGVMI0w1VnZ5X1trQHU6cHd0Ind4RyZQJFJuczBAMC4vWmNMNENoSFc/JWFsZU04O2o4elslNi5zfWcuTXo1WFBGfk9SclBIfn0xe3dWMV5kdHArSzIuV35qQF5zOmtidlB8PDQoZFVhUmJgOiRjbTd6ejViL2o1YkRkTGEiUkVKfF5SI3NNRXttK31JSS9g''@;'; put 'put ''ZmghXlA6MEMyVFIjKn0kbGFaeV9lclI9TF97eyFRX3k1TUgzJSxUTnVFc109Q19IaDJ7KjBPMTdMJmlWOSprRTZPZkgzbVJ3aXZMVSJLb15qXndATENGZF9tQk92U2RpPSYhI2teMnJQNjpmfFkpKWs/NTZOS1VXP31LTmIrM0dST1ZkbWhFeHtJWFYpYWk+WlF5MS5pbTlfalNkY0REMS5GSlpr''@;'; put 'put ''UDN4R29KaTZmfF0yLn09PyV3TGx5dU9HNllbSTBqcXV7NFc0PXkxfCZoO2dGOioifVkwZ35TNEM5I1c3S2ZSNWtJN0wvJWF3eWc0TDxvUC4/TmhqOV0zTHROSDZhdXk2ZG1ZJHdFWDAsUkwkXndEPlcsSXd2aU1maHh4VFBOeG1WT0dYdU9hUlBUJmU9NjBRT21II3FIZy4vTj8wfjsiTnR2Yjsh''@;'; put 'put ''bHlGQENMYEZ5Q3wuUlIsVGZXOUN5bVI0e0M7c1pyUjRkMEphX0g2QnAhRGdfX2ZIITdjRUV+I2N1WEhEZDt8WSE7b0shdF1dMW54UFdFSkppQnFWanNMdz1eeWJpM3dzNWNALjdocSsmZ0I3Q3goUz92OHRGbVFCJllJXj1JL3dBK1F9QlBqNCQ0UnFXTCkrVDxQLyU2LCxZTkpePTAqNFk6Vit7''@;'; put 'put ''MXlTWUBhcShLd1ZiI3k5RGA6PyQlWTZsRFZOKnc6byFRRlBWJjlpN2ZaQCorXmQhTTViKCtIejdaXTV8TX4sdCZVRUpaIWRrR15meEIqNnZMMXNgWkt7d3YuNCNNW3d+VlpPWl8lTWA+c2pgaHRVaEZeMHFReDJyfnNwfVFrViglJiV9bSEwaFQxU0xqMDN0VDM3c2UpI1B8XjhtamFqSyZ9SVRj''@;'; put 'put ''XkI5cU1uJHZTSmN4ZHFmYjUvfjFnISxNeSN8YE0ybzRienkuVXV9eDR8eDNoemg+T2lPSzd7dFBnTkpTPTkqKVZycl9NU1VpT3RKZD9+Nk4+WnVMJl5qNFdRQFV3UD8mYzN4dihYQHlRc3hSTnQ3dUNqfnNJUDsiX05DaFQ+VlR2aUh5JUQhYFU0QDJZdG89S0wvRyElSWBEbjB6IVRjTHhrLHd7''@;'; put 'put ''YGh5ZkFpVXtZKGQuRFJRVVJwIThvfipCOiU9XzJSaUcvQlZvQ3k4dlE9aFFjWEtRTXM7dD95Pj83KnJHQEtGQjVsdWZyWj1aUWtwSjRRY2csOk4pVnBhRUB3RCRpQigrcE0jdGBRMXAvXWpkQCpDW2F+ZiVpVkwzfURWYGozfnt1UHVbVSglS3RuRjIhb2QyRnlwJl1MIylRflheNl1YNH5hPlhm''@;'; put 'put ''KCVQeT5XXmB0O1d2MTdQRj5BbjR3I1UwMDdITXNXdDQsNkpHZnxlV14oYnZ3eCFpcUU+em91UmRGaUhRQ29iPFNrdHkxLlUjSVpZVFNPMH1mTTZweCFjfSs5W3xbSWR5STRMbX1ycmRgQVd0TypnX3tvT1p4cGw3MyhbSk5dNXE/Nmo5b205LCVDYkRKVTNReExsbl4rRC4mUTEzbkVhfFp3N2sl''@;'; put 'put ''U1gmQ0FOQTBhTS5+c1tJRlJLUzRZfXd1UHw/NSh3Rj97JH12LyZGXiZQJUxlNnYjczlaR3I9ZSUoczQhVF9JQ1NiWDBRWTI8Sy98fSFoR1FZRWFoIV1rT1NlRGl3LFl9Xj0idlkmWGxNfjU1KWFac2N+QXYvRlcpZDtmZnM2dlJxSnAmKjE0VTR8c344Sn4meXpZMVB+e31SNExrU05PZzhsV1h4''@;'; put 'put ''I2Z8diRyUWA7LlBJMDEhb2guaF4hVG9ASHF6IT0lXS43dyVNPk5+aCpdVSE7dF5QM0U1bXVhK2N4KVF4azl3MEkoJXt6X0c7clA0QFc8dil2O0YuJmRVY1tgYEw8WyZaNDdUNlJEcikxMlF4c3BqP31wbHVLOUc5VzhWc3ZjSzY2JE92bnsrKll1MT11fn5fTUd4PEAoP1chI3h7by88YX59WEQm''@;'; put 'put ''VCU1VDNTQ21FPEZ1fT0kaCFHXlMjay99dV14O3Q1ez9WbjcjIVBtWVcuXmRHPiFvMi4kNyZze2JyKmhAMDw8N3BUNSUhSk5YVktDMktGOklbdjNVPipNK340Ym9kWEpzXmtNP1slO1kyPEk7TjFBPU8xXV1dUDRBVV04Z0soL0wxVy87WXwmU1c1MFQoVmhwJEU2XyEleT04V1pgVUI/bzBZJklM''@;'; put 'put ''Vy9jRXM1c3VeN29KdjNMXV1qSkVAIUxIXndLInc8QCsmLCkidV0lJUN4cjtXIzp9IkJpdWkkWWd7ZShqOChpayMmRWJRRDxLYEVWR3lbdkxgcFdbTCFgUDgpKiFdZVBES149cDNYTEU9OSVhZ19SMVl5W2I2flkmYCxCXnU9eV1SI0QhdWt0WWp2ciQyJHojTFVoLzhLNlJMI0VgcEx3Pis5NEhH''@;'; put 'put ''V3NFOD1wSGJfTVp8OT1nU3IlSi88fD1RKD5+JksqIWU9aXlwMWxEZyZuVUYqUn54JTpVaEFhcjYye35bS2BeSUU0RW0kIzJyRVBRP2VYWChROjM2O2BUcVohUGcoaUN8clEsOUhTK3s4JUxEaFpNLzljfHVLS3k1NDEvMCUlMkNrYXVsM2RkKypwMWNZfFAjPlhUUChCbH5TfWRDM3NFSiQuQj1C''@;'; put 'put ''cVtDe0ZAZHMqdlp8WSxVTXB8WlBPLkxOKm1SWlhdQ0kvZE1fbz1bPV5mQn5sd0ooVV90eHIkfWs2Vzo4NDtWKVtzWi59X31kVXpzfG1lLHJwXmg3czRCTVE0VVkoVGhIaXErMHomdE54bEU2XzNTSyx8Lk54c1ByV1A/bCteTDFpPU8yai94U3hGV1BLbSpgYVFfeSoiJmtIb2k/QDRvQnFbLHBy''@;'; put 'put ''NmNDQHhLXWwre0hvWTtWc3NMV0AmdipXfG1OeTZiTXBnKkFYVl5HfHl1cEFeKW0mMiZIaTtLcmAxSVojSU9rc2UoRCxmaSF+aXlMQSVAUlleUks8OmF2Ol1GOnc6bmlSVzRUIi8+KHt6QiUrbktSWUE2LEZ6WVtJP2lHUTVaUCp5c31lX3NELG4pWUFfJls2KzJ1TkZzb0oubHpVbWRpfDF9YDlu''@;'; put 'put ''M3hyQCg6PW90YXBYR21nWSZQfD1ebT0hS0ZeMGdHMHNgJClDbnIrPG0xcFdNZCtCNC57QnNudnopPi9iaFpndGVWRnM5ImYiQFMsS0JNP1s6UyhzLCRhcT8ibjJ+d3l2Jm1zJEovTiNgX2RAS1pyXmJyflczPSM5T2gkaGBoUWcmdDZKaVJRdnB8XzYsJX5FTFVSU1VzPjVTQDROfGJuWyNbI0V9''@;'; put 'put ''eWgid3FoXS5iOVdQezFwUDdofDwubTJQYVBeR1VRQWlVXm5ZQSs0PHosNWhpMVtiWilmWn46bCglVXJFPTl2WChMPzpIfXNCbks7WzI/Okk2LjdJWXwqIjEvUC4kcXlQVyswMDo2c0BueTBKYytld1QjP3tsa2d+dyRSViNfTVs6dzRwYztvez0jIXxiTzRMfDF1UUd3MC5zLzEsRnt7ZkNzalla''@;'; put 'put ''XSNtWDZEaEVTXkxRPWZ9Mmc4cERFQF1+MGVEVzcqJFJgM1FzfmBGTm8rNWJvIV4qaiRtRXFnP09RQj8mZ0VKOT5ycDg7Ij0oPyU7UT45XkJDXSNta25XPXJgJm9LMXooa0wvbDxPKCxkZXNIeyFuTjY9e3VULiM4JC5gL3I9fDhSTmhhOVFuOzlTK0A/dVFBaX56SlQ+Lm49OjN7fWQkM1UsS3FR''@;'; put 'put ''PWZTWWVsPy5Ac21ib35NamJRfVdqYDg+eSRzSlVyVW5Ee3E8PmdQayQ7Nj42Y2koeFQyWyNzbCRlJDs/RjQpVE8xVF1VfmtXXmU2Y0VNaXNVKHN5d1RhNTFCUj56VDRmfmZMazhibXA+e3osSGo+eyxqPTkoT19qaWx7VEdpTzo/VUNmNW5GWk1bb2tlU3IyKl9lYmY2bk1vZjJZR3U5JS5NPm9P''@;'; put 'put ''XXVFeUZbdExsT0B5WWA3c2xNfEwqRVdHJnFwPV5lVTtSSU1wWS5nXmhuSXMvSU84VDJHejd5R10yR3IlOyQpWTFZKF8lVzdxTFg9dmcxK00lYiI3LG5GNVN2ajU4UDdmaVEzN298VkVZXypEK2pzSEQoX29MSmA7Llhvbzt6JnZ4bVpCXnxvXS4zUUx3OURbaiRGdy9OVXdfRTcze1ZHVFhTXmNK''@;'; put 'put ''b2NUKyR9eyt+TWBTWClJRD9sMUJmaytuK2guem9gYVZ3bjVhd0doWCpWJiZrfFlMZUdYMzxdS0VaTHg/PiIueEZ5WlZYTyJGeytrMSslMlF0VXd2NXgmXlZmWHpba3c9MHshQyN+bSJrYjtfPD00S3JTR349MCMqJEkvdWE2UTVCZGNhLG4mOjZeIjQrVldLLjdbaGdoKT1rPWBveW5bSz8wN3s0''@;'; put 'put ''IUt4NGk7OTR0fXtaX25uWEdmPHRVN11QZGU1IkN2TmBeISE0cEFvWl9EPilgTkdhX05FOS5APHRxIjZXNVo7SyFmJVdgVWFVLl1kel0wQHhwOC5kVXl2THtUY0xHXWN3TyRqPSwyJnNlNnpFPWNrLiokfWZITkQmd3Uma09oZCQ0bGQsRnRiMElFbXJgZFUuTlAzbDpZI1MzUTAiRzkmYD45NnVQ''@;'; put 'put ''M2pZaiJoWT1xLz1JJSxqUkU4I0RJVkVKam58X0gqU24pRiRxXjkicyVSNyE/KUBsNz4iUnxlVl4rIXleflQ2eWhfamlmQXosSzFEPl5PKGx1RFZabltbeWw+aCk1WUlgamxeai8vPCguQ0l9eiFINzdaST4vJkNZWjV6NSx1aH5kTVdbXkZnaXVyQG9eZGFTRyt7Wl50Qj17Xl46RXpTYk96bTNX''@;'; put 'put ''Zjc3flp9YmFGKCl4VXxBPU0kYFVLSmp5dXlbajV8M2NFSSUjQmJMdFssWHNeK280LkJfaT5sPnYwWFElJmg+QnwvNFdze0R1cFs5XiNYbDluR085bldPbGNePU0kODhyQ3QhOVdqWEB3bUVweTo0XkpBRUY4U2M9Q2FATj0/QXlZaHZ4VzJwZj5QYCVDR3dWfiU0dyxQe3tsVHdmW3N7WFNhPixj''@;'; put 'put ''NGBRe1B6fX05VTN1JVclVHppbyhiJSxqcSglUiZodkYjJDtle1BvMVtmUmcmfHw4P31EfXRlJl8qSSlacFF0emFXJTxYeHVQW3E7dyZII3xTPFdaUlZOKzNRPSZCVnJ8WWhgajUqO09MaFo1PT9FQjlJO1huQmJ+Y0I8fUdfInY2enl0Ymx0YmZ6VkVGMDw/SU9NcFEzV3Y1RUV2TnxVS3F1OWM0''@;'; put 'put ''PmE7Vj9FNUwoSmpoeD1ealt8RiV7cCM5RFZjI3xBcWxXXU58bTcuP2hsPm1kdFo1VSZYYF5qPmtfMWRNSEhRLkVmRzQhRVZrSiM5MEw3ckdCTlJhSkZ8NUJgaFY6KE1oMDFpIyVFPX48JU9ldzl9RHpwJShaaFp9bz50UkJiQUp0KyZFJXVxSzkiOyZ2VF8wMlllLiY4e1RfKCYiXiM8N313cnwu''@;'; put 'put ''SmckQzFMMCo/bDRONCFFeUVMZ0o6Z0tqSlozJERnOjMqJkQ+UXxTSyhKSDhRUU4+LClzIW5GQWBdU2k4emROJVc7U047QClHUlp3WWl2aXdgN3VVNjF6K3Z+OUZkPUcweEkuXmYmbV5xN2lBPE15IzchRiZvfGd+JUc1TXFKVUp8LFJqbHNaWD5gZGw6MnJ0a0tfLi5vfVZ2eiJAbXFWajFvYVB5''@;'; put 'put ''W0xmalVdQ2JpMU9eJiJieyNjNzddWSFWPnQmZWBPaC8hcyV7dnNkPiFOLD1RL0BvfW1JOz1uIlB8YEFrQGokK2FMMzttSTJVc3hwaUV6U0hvYVZzdnlqUmZYVWYra2ROLCRJNEx+JUIme3pQaiMkK31ka2d5ZXFpLlc2aHhkLzdzaCt1TTUxaHF0b31WN15sRW1LUThWW2Z5dkhWKkBtRH5QRzcq''@;'; put 'put ''PkhYI1szPWh7bzlbRk9gOU5ERXRjdXMkOHZwfl5dYkZ9PWVxNCk5SzhIUGA8MC5geVlSdjJwKVpVdnUkN0FmYHA+L0MqeDsrYDJlXn18QmBPVSUpLGR9X0Uxdz4zPj5zdl8rbltPWFJ9O0xxdVhwK2A2NS9XQFFEWFt7KVZzR0RbJTBfZDAqVHZrcTx2ZF5FPWA3TkgoMk5lPmcsRDRPSXlIR3gs''@;'; put 'put ''d2EuN1N3cipkSVNuRitiUyh+d1dRKjo/RXNwJiUkZz9QTzwjSzUlci5AIXB5ZFMlODwyVW9Zei9VKGIuZDEsdHNHXjhLND1GLlt7UDM9cUw2an43eWBoJUAoTSRFZlg4MTo5L1Q8SEFtb3M1PzN8eTk9P2ZYUkVrWiF0N3sxfiNDbjlMaVUxZyg9NmZ8TjE4UHhyOHxxWXRKU1gyL2wmQS9nWWx0''@;'; put 'put ''LCV5YEB+PnNgRjgkOXpvUXFQV0hKWGw7Tm8sOU1eNXJSQzFGdTUmXTF3YVI/WDp6UVp2PiZQYVBsIy5nMHtFXmx7bXJya2ZRNz53bDs4Mig2c3szPH53Xzkmc1tvYSN0blcwaktxTzwualdTeyUoSXdLalk9UyVQPzZEbENZeU1gYTF+ZTtGeSl0dHdBd0VaPkwjSyFLaTRzbThEajNINDNSRkZ5''@;'; put 'put ''RnZnOXJgfWMwXktwUF9ERzBlVE1YcCsqMXRANlNXYTg+dHg1RU0sQmNobXpkYlREJTJ0JGtmWkU6dHEsP1c+SUBodilwcDBNQFp2RX00Pzd8UVRITyppI1JfO3Y3UVRlNTgkeUJRU2slQ2F1bz86MjIwY2xAekpLNHZFO0dILH1dVHlxKzZQSFc0aSgsejcsMGN9XUp0ODVwZGAvXmxtPjhrNDdo''@;'; put 'put ''WV44MHd2YmJPTy4qYVR9ZVhedVlab0AvQj9iM2goT0g9dGpMKmp4eTtJNE9BJlo0UkdLOj8scStOXiVqXSRaWmovcUNdN1p7IVZ+c05IezRuPGZQUXguYDl7R3xSV05JSz9TOzMkW1p5ZVspbih+Oj5ROCR0STMmRXMhKiRoWHNMe2ReNyUkczE7eCN9bDRLSS9ZK1B+N2hTKnBQbkleVy9jMjtF''@;'; put 'put ''bXFiajk4OVRWLHx7XyJJJkhrSS55MSUqZWozS1Zrd0VqTHUkYVZuYkZKTFJXMGg+PGAmUnB6aWRtfUN4e2ooSXYkNXZ+eDEsYkJhb2hBc3NLNHt0RjtzekJ9NjdNJCZgbHhTcV8qUmVLRH1lPzJZUFI/PVs4MGklNmFedyVRZjFUWn1jbmRPPShuX1Qwe3VNPll8MXddNXUxUGguazl+Rko8ampL''@;'; put 'put ''fVc6ISJBfDlPRUVaWk0hL155RmRNcTc2fGRlalBnUmdpKDUpcDwmLCZtbH1ycSpXeSxbIy9jQ3wyJF4lVSVgLCp1OFVReXIyWH1JKFllIWVCNCwmNil8MVRSZk5GMWxTRjd8d1g9R0V2eXFsUXtBJUAhfnM4QDxiXjAkaV1lbmBxQkxoJjB6LG5zJGRfX2dRP301USs3cXEvJFBKP3ZhNWNKTl53''@;'; put 'put ''e0Z+QiEweDN9dCQ9ajh+UyU6I3VLWl1hcFFMNW0mKl1zRCIjWT9pKGhkKztKSDYqOUc2Sl0+UUkmQl41ZX1NJiVEQmtfZmpXXWxeYz82biVkV3N9dGd2KE1+ZTswWT5CfUA8MCVCck9qZDE0OT19OjtFeXtMdyg8TnM+bFdFNUh8VHMie0QrfEk3XWJGcVBSRkEoKk9JcWNoY2xxfiFYbTlkRTtA''@;'; put 'put ''WH1ufF1KempaXzJzfSZ1X00wN35dLzYvKSxIQSFLc3hWMFBAJWQqPXtVfHxBL1RRVSsyPiJoW19XT1F5X3I8cG9fQGhXclRzbDxAQnYiS1BMXU5fPTtrIThodnNOKG4oS1pjVTkscX1bcm9XZCRuYGE/bU9wbnIjcX1NXTxufHkpaFJVS0Z0YkYzZDoybUhDKVZxJENKLlFze2xIL2VxSWtbNmMm''@;'; put 'put ''cSwoV2JOTnd0MWM5Y0wxMkRXUS5RSiEyLGcuXTsqWzxWZDsmRiZ9VixzQ04iQHddOnNPOCNlMWZSXzQ9fHU9YXI7MGUodDZNfV1KYSFlNl9WTypAZzY+ZCxmc09IQ3YxfX4iSjl4ZUBibWBpcTZLQjwpdmE/YFs8TEY0RHswJH18NSYjRFt2aDteOWJJT0dJcTxHR3YoRi82Rj1ufXJ4I0RYWzVC''@;'; put 'put ''NEtxXyFIeGhaRjkpdyE4bm48JGhPfEIrZTF2X1NhNzxLfWp8XjIiKCU/SV4rOHA5L3M2IUV+NzRlNVIoLzBNfjhwJXdtVytZQ2BlLCQ2I29qVUZIYncwW09ESGZCfWhpIWlCaEEpNFJiKlRVPi9iOS9PcV92Z1I/bzdDU2wxcUwyW0Z3TCtLP0B8NCU6I3U/SFd6c2NsVl5TOCJsa1NaOTUoNXVB''@;'; put 'put ''XjdvMi5lfiZ4NERsdn1VPG91cnpyQF4uQUlUQGx8RiwoeVV+P0NWdjhdc051YntjcDs0ayxoKmY5M2RYMUNOfUV+e1BaTTBsPk1EMVUkdjNBaGNDc19rZ2RFKkRMOWdVN0FdITx8V2czZTA3b3kuPDJibzFiMTwlOkpfbF5kNlcpYUlSJUFYejsyUFN8JXwmUCRhPz5jfm5+KG1GeVNyZHNmZz5R''@;'; put 'put ''M18yUCZoPSkiRHttSjkhOWV+NXtEfSp+fmFSOlsmVzA3dlI1UlVvekskQHNoWWdgSnxHTl5+dSIoeypnU0h4aExYSy5oUWQyIm87NnhqYlFvMUY8RTx+OD59PkhBQikyUEBAOWMqSVcvaz5uYVEsSV5qMStPZi4mTWlMUEduQDlaPkBzISpqfTNnR0kpfTdRPHsvaSwyPzlmJjlyMzU8e0pEZDpU''@;'; put 'put ''RytRJFAmbXt+dG9NRXFjeyxJbEVWPHJOKCE6e2xeUHt5T1c+KHVuUUI8aCZ+NW46dWFSWnFVfFhqeV1+MGBQOFg1KHp3YyJSZnJ7MSJHMFNDTCprPWYhe0VYY0dPLy5sbk0mNVk9TFZKbkIwMWJme1o/RmdnREtVRWNVY0A7byVOQV5YL0xQNkxFVS51U0FaND1aJih6cVdlUFQsRHk3diVVcVAs''@;'; put 'put ''KWsxQUp3TkMxUnZYOVptQ1c/TER1Ql1DYjV1OD1KKU8vRl50Jl9MUFVZV0opdTZ3ZDdSQF1LP1lONlp0NG5VQzBjSk8/VWN3bEFUajpWPmdJRVBVTEsidSFXQVkxUjB3NCVYTCM0I1RKVk8pL1RtImV4b286eVEifVhaQVdvV3E9Sj5EZUw4RWJ0Y2khb05dc0thT15zRDNDRjlAKXthTTpDRSxK''@;'; put 'put ''KFs5MjRsMUw4JUZsM09SYVJRIU9eLEg2KUNNQ1pCbDN8eHd+WFZ2OnlXKXFHRSpLaWh4NzFHNjxreThlWjgqIWVKPEA2IXUicDFLTnMqZWhtc0Z4YkVoRmlUQDYkdmlVITJMc0x1RCp2X2R9OXYkL3kqdy5YWChUV0QkLC8mLzpRdSVKSH5DbXkmRSY4XXN1RVRTMFNkcDRUVE5rdXVjZ1UiRVR+''@;'; put 'put ''YWM3ZDBKRjtTK0w+X2h9b3NZSCFZbzBRcEk9UFBYaHRaMDh8ZlcoWEpwdHRra29FKDA9MyglKk8iJD9vRTxtfFAhK0hMaVsuc1Y3VH1tZWkwNT9rKS84Y1ZdTnJnfUgyX3YmSyRXWWg+TUB2YFBnc3leekpuRmpRQCRbaCgwUj1Te3AiUytMPE5OYlRuWGJUOFdiVFolXStYYnVtLmptU1R1fERg''@;'; put 'put ''SyJaQ2BKYz09Iy5JQHd7RD46RWpyS297bnl0VVh7SCRNcCxKc09SKEBrMWVGXl4lLDQkSUJxPnRXXWlPfS4xbGQ7fml1VTVDVW9OYHQzLmA+KThPTG1LKHJKPHdJX19YcCVFVEk+KSZnfDAiLDQkdyVRSmVwWiE5VGNbenIzXyJrX30+eHMpW0NYP1IyIiRyJTQlKDZaLiw9QC4qc0VgYCg4PmhV''@;'; put 'put ''eFVtOVZVRyo4PjBqOSwwPHFJUnJedEosK1NjWCo1YGlRanJJPilzJUZUQEJDPHZ8RDIrJCJlWWhROlh7Im5jYypAREpBPUp1S1tMVndyOTBQOEN5fWRaSzx1KUkuTD5DRyUiVU1KPzJNc1tPLy5SITVdKmdMaWBDQ3IuJF83eHQkZ3VwKXMwUi49akVqcHJxfHtPJi5lUX14ZntaNWUxRlR3XmBX''@;'; put 'put ''M3x4Xl1dQD8qYyRwYHNSSTkrPldCcDEmcm1URi54VTVQdFZXI09+Rl0uaHYpP3BHal9ob1kzQyVqIUZXKSxmKFU+VUZ9UzA6PDhIUF9NcU8hajg9S20zNT5RJTc8WkIoc1M7UWloeD1RVjVQKEdxT2BBJUZMUEBOQFcrKntaQCJuTENpSCphN01venosdnI4a01GVC88Y3swTjh+a1FHRSZdM08j''@;'; put 'put ''XygpXW88IilYIzgwRTIoP2NpbGQoKl1DdmElOUM0YHQoN11GYndkUWxldl59KEdrcTo0LF9uYCEyYTNAQkRIKH5KTURiLDosUVUrUm98WCZrc04xVCZ6YT9HLmpjeXl1RGR+Xkw4Ym9IfGFnfF1SWD11Y3klM3wuOWdYRTYlMVQuaGQ8aSU0bUFxeUdUalN8Nng2NXlkUF51XipNPS5VMXNkTXM8''@;'; put 'put ''QVRAIy5YenxLW0wrUUpZIz4mfnttTlhNLCYsSDF4UytRVVhQeW9wLzQ1fnJwLGlqZnUxbyxKO019Lmkrdn5uZSE0YklfdS9iQF9MK0BHLERwQVZ5PVlLUU1lYjRaUzdpanFfX2hsRHYlWDlANW5NNzw6TnRhXmkkX04iXSxdRGdBZWlJdT5+NG1gKCtdMkEuLkJtLmliSTxXelFvVi9wYiZSJmZU''@;'; put 'put ''UkFpNmk9VG9UPUp4WUAzeEFnKH02MmclMzp9bnpTe1dXfldIPDx1TiJqKlg+dihiKHF3NE5xXSh3RnJoSl9tJUtgQSVzdTEwPXBsK1VCRnFlVHF9aHxNKGs+QWlRZyh8UEEzfXh5UGdGKW0qJWg0Jld1Nk9uYHgoMyklJUZ0Oix8QDlIM3JwfmUkRnQjI0NBU0VrWmdELm01PTpjN3dTLCExMDo+''@;'; put 'put ''VGdHR3dvT3FKTHJvY05kL0J3YjNRaDBDTW1iZ1IzfX5QaFZIVkNpY2giaG52TDFvckQicWp1X0NxRik0JkoldD1zcFM9WVFbe0JBYCtzNERxaGFMSVR8aDYmOWNKPyR2KDwqZUZvMVlKdShVJVBgaz9VfCJaJUN+NjpsfDNiSUNPS2gqQkdYQF07ZFt5JFpFd2hRaEo8WCt9IUVFPGthZS8yQlQm''@;'; put 'put ''PFh1fWAqbDY5OUN1MVRwY0RMI0xZQH16WHIvcmQkVWQ0XzZQNGZrUTdiY3lTUU1oKlc9dnZHTFY0KUEqWF1ZJTB2UGx0aTQ2YEM5dmJzTjU6TT5kNTVlIUs+M081aXV6X09Hb0IxOGMkfHhXTiUxUWJzL2NnLmdzeS86KGpeQ1FwbUdLQDlGPF4sR0VEK3ZGJE95UFByVU1mfTlfeFV1PzsrbHxX''@;'; put 'put ''TjtiUl5KKE9pRz4iby5td0lbTnBVXntLNHlRRmUuVks9R0NdfCU9az1QKS86W3R8SSJ2O1FIbCshc2cuS3krU1hJJm9oIlUsL2lqR1tKSGJjPiY5Q2JvfXhoNHNjfjp+PVo8L3NnKXd2L21jYX1afk1pIV5FNyxAcyY8MU8pNiIkWCtRaCokKjZ8b3UuMyQ8dGZhKTVXdkZSMTowfCJKX3QlNUZl''@;'; put 'put ''RWRYZTtWNWFZREdOKmBFRDddKFA2K0hkTmhIK0dyQFBVamtofXBCJkI+Ql9BcUImQj5ie2BdZChvYTkhREB1elRre3s4ZGhzOkw/clg+QU5AeF1naVQ5SWR9Q0RjbjVCbHU6NCh3VVsjKmpANHR6SyZ3b2dfWUUmbzd0Ql9HPD9vN3V1MStPMXRCdUVaQ311X0NmbTopP2B9JDo+N0h6KT55L3V1''@;'; put 'put ''bTp7MXJKZmFMbUhvTUF5YGVsTmZ6RiFVN0o3ZEp0e2A5RzElMkJAYHBBVm80N3p3MC5CO3hWfH42WSQ6aTBwWyV4VTM2WnZhYUd7UzNTVHp9X3N0fENSMnNYNmRlOGEpZncmLDlpfHJlNyk6I05+XXNFJVY4Mn5vLHdhUnEmUlJ6a1M2MHgvOi9HTl01dUdSKDJxPUxTKEFhd3I/Y1dbaz5PIzdd''@;'; put 'put ''THkxfUJASD1fWX0vJDZwXkdOQnNZbE09SldRdjRsRSh2OlBndzR2NHpuJSspemZPN3xtYVN8aVlmaSNuaiYjWFRpW0deT3RnNCVvNDxKYzdFcCVjYCF7OSxsVHYrOWJAa1AlcygqI08/Oit+OCNwd3M1Y2BTM1txPVFlPyQ9SS5ePnZUbkMhYFlbVGokKz5RPUNNM1p9UmxteFt3M1BQOEViQ0hP''@;'; put 'put ''QEVeMXwmTVp4YWByJWdTeHFzNXNsfmldK11bQDREYWxifVRhIUBFNFN6biJ0dkNWam15Y3JjYjUlTyExeE1nVE98Wkw5ZXIwYW9eWWE0alMsfT9QYEo/ME9gbX5YbSpMRU0+ZERyZyNxRkQ1a2wkdkMlZzA3ZSRxL05HT1RTTWI8eyNqPXc4cVQyfFVNSSZfeXF3R1djbX5CSF95d3h1eEJ4aHtn''@;'; put 'put ''b2V4K014cj50LCQqSygjQERtdyxoOEFmdXdUI1V8SDUod2gpV3NgXS9EPEdJbX1FUCNnc2tKfi5PTWNtOiZjS2okLEtlYn45S0BqQ1p4WjJFMSEzbCRdSnswelJDfVcpMilkUntjYDM+Z2dLT0Z5TEJgcTFeISN6KVVoYWozKFBOT2Y+KktxPzB6Mjp6YkVFPW5sZF1USm56KV9lJilqPTEscypl''@;'; put 'put ''ZzNgJiROSS9+TSF0OXJEVH5WXyZfN00vR25mI2Q3Vl5DdkdDWCw7WENFYUNteitVQkcqQD80dDI/e186KEYlakx3TSQ3dUtBTDZaQmFxN2kqVEBdY3tkKTosUk1kNWpgelhafDFFXVN7PGYiQHFwMHRPIWRVYmlKKHt0ODFHd3QuZFVgVTE/Zm5VPTFUYjI5SiJAKH5oMV52PWNLSDQhdE0kNylA''@;'; put 'put ''Il8/UFM9azh0YHg3a2EyZFcwJE1QP3MkbFhtem12M2RiVFh6Ik9xOSJLbWRGUn45K21sOnZrWn4kejJtSHJzeC5uejRAZypmODIuKDZNa01rTV0ibTsmeik1b05zKStAKD5zaVUjZD16UEx4SW5tN1lzWXxdSiYrbFdEbCtufVRteGksX3pDKEZZfDlPRFZhUTBDZH0mO3JrOHh7UXtrOTAjMU9y''@;'; put 'put ''Y0RmSChWMzBhLHM2d0VYPCRIWUh1UH5xaGVANWJiRyFtSTZkS0pOUTRxW09vPF8xcT5UXk4jMm9ycFFbYypCZ2V7b2pUND4pQH1xYjhpYDlubWUsTVlKNFc5OFh4SSFMWXxFPk1AQkVOdWFHOG1kVF88ald6bXYqVGVAJmMjQ0t3Mms4YEFRKHY1fHBmWHpPKDcqYVp0Y1FXfFhjfG5dZ1I/OXRl''@;'; put 'put ''PlFrTT14aEpqJDUwcGExMTQmSDV1aG9fIjNTMyEyb3JpLFN+MEMlWi5AaTo6SWZsPW4oZG5uRiZ7b3wmMSFzaEU8MX5GSi5gMEN5JVV7MVdPSnZ+aCJHMGNbNUUxRG8lWmg8Y19+NVFKRiVVLmpQbjdROm5Mey89Lk0xN0BQZW5tcCVAbWAuPTJnblA8fnByKi9pcmxvIyQ4cnZwM20lQENnfmFk''@;'; put 'put ''TDJWfHUqUEIhb0BhYHdCPGcvLG88RCVvI1FtLjwjTk86NkU5aW1RPCpFPjdzfmxWVyhIYmxRdDJkVlh3ISQjMihdQF5zczhzbFF0YUJlQjFWJXt7ZXJzOGJrPXpGdl46R151MCMwdihtKiFmNiRXN1Ardk1PQFYqcix9RHZdI3dWTTZLfUxyMzVFJm5TIntFJT5fc0wmajhWZ11QIV9gbD12cHoq''@;'; put 'put ''SzFsayFiI1ZAXSQ8dXZQa0QkUSFHfDQuRnRELmA6Umc/dkE5WX1bQj5IZl1HVGd+WEU8dVpaQEpkfVtJJEchbTJReGlMXnYyOEZNcC8pIypYITg0cFg3MG85OXMkTG4uN0JPfGV6RllGPl5KT3wjdDRbeWQwSk47Y0lYSUx9PDJoJmclc2dfTTFHTTczUWBlMjpic1N4Rns/QHBfN3RONW1PcHIs''@;'; put 'put ''Mz5YM3BJcDpRcjw+UTRoVVtDOyUvYzJPYWRdMHpsWERdUDNlLFJ7ZVdreiZSWSN4cVFdbVQrMVZyTF1fP3N7aj04WTF+UmtpezZdMFAkZmIyXThFZ0lHSldCRCE5QmpPIVVhVHtZJDkldCpAUHVZIkMsZiN3QFllU31GajlCSVJdU3VPMzhBSDlpPEBAd1t+d1pUMElhRXJZfngweWksaSwpbD9l''@;'; put 'put ''ez16ey5TM0xoeDNfXXBnWVZfY11hNT1zRCZfa2JDPXpePjJsKDdbUlA9N29YbVJVWiRIcmYmNV5mYWBgKEtPVGhoczt3UUlxZ2BrMSgyeShZKyxFOWhqeTBKTTxGYXxbKzhsKislb11VNjRoKlJ1biMzWCZ6RSEoUzhrLDJrczQ3RFQvaHk3ZywwJXNWIz1kQ0AxfCUwIztZfSxRajliQzpPeCx2''@;'; put 'put ''KTlwK1IrJT1+P3BOaCFhSVhrb3BaeEMjMk0zd1RDQmdeWVJvYUh0eXlNeE5HZURyLH4mWiZ5V0JmdT53Qkw/MT0sMChyOjJOPyohISlmfmJRWVd1OjQ9YlIhdFZSO3l7TGYlKSguOD8+RjpMUGFzVnI0PEB9LnlnVix+aWcyOlpjVilnfj0ubW4yQmtrc2BRZFdzLkRkcG0vLnhscD8oayttOWtI''@;'; put 'put ''bTcmLDlvPWMzfCVxNVVwa1VkU3FoPyVBbStfbntJfWFpfC89YmhGeFlAQSNbPUJbKSVBYlRMLD1KeWQwNl09O0Urc2Rre3o0bmBVX3RoLGxNKjI3WkB+QzZRVitWWC9vO0hqOWRfR09GT0IoQn58WyxUMX46Nih+TGhoakgvYGBHbm5wSiwuO0RhSEZ2clJrSj88PmA/fnN1UWhdUz49Q2MrZk8k''@;'; put 'put ''KkNbcDMrUn54VSMpfCYibGs5QCVVdEl8bjk6OXZ9N1daTGtxKDZKUnRtV3VReVlsamh9X2VteXwhNz8jMn55bGRbfjI6Mi8lXVBPQlc+Pl1GaHtXb0gpIjxrXkpSZ1ZnUiZfaWA5fGZjNTYoLntXMlpfU0RYRSw1aF5nUE9QaUImP0UzR1t7WTkrW2E+O0BnKyx5b10wcj1sV3U5Pk97JXE8VDBj''@;'; put 'put ''U3MjR01SOU1iOWQyKTtTOlZCeGpiKjgpcUM5LkVtfnhlZX5aXUoxdDAsdHN0Tzp6bUdYXT9Pa1RXfCw6RCs/WGtZWTxeaFt0a0tjWkkiNkJ3TypweT9Eck15Si5JQU1BQUFAQG9BVUUiUVp0OiJFTXtCKHo0LG5wREgubyFPZTM/anoqJHpFVXN1aHgvSTx2QUFBQUFBbkIqaEU2UTJEJDpGWXY6''@;'; put 'put ''bCxaaH48KDAiR1RiJiJNTFNGQjl9VEQlb05kJHZvKX1MNjNrNUJYP0lBSUtyM15jZD5AWCJQZTRuT04pTz1KbnsqYmBQSWI8TihTS3pGflltbDY1cFV3dm9zZk4xQEtaQ1kweyRuTjMyZixaNis4ckpzV2RYWDQkfklfKzE2Vzdpeiw6QyJLZjBhZF9xb2lbc1ApPys3XmljfTFQL1Z0fExCSVp5''@;'; put 'put ''OV8xem0lMTk8V0BjQ0dfbEJQPGBEWEE0MyRDJk5NVHxkSmN0NDxdfSh0SSZda2g9b1VBO0RTdXRpdlRXL35lQXBRQCFaS3dlLmpsZ3AhTmlXbH5PLGYyaT9Qd1cqSFtdWlJIKixPQzp1RjhKNypuPHF9LG9HQ1k+dUVXfCVTZzJ2UWYrLEclbWN3USojNzQwUlshRnNpNE84Rjs0MW5HMEk7LjRs''@;'; put 'put ''JFsyTTN5SiJmX30uLENuQzVfcWU+KFRQUU1TKzt6ZXt7TGBaZjp6dkckPDh1Mi9qLEsmSjQwdiFGXUZtZVAvSmAjZixiIj40JDVsS2hyPj9aXVMja29YJSFsZnJlXlp9R2h8Lj83O2VWRWs5PjxJL29+TzsyWnlOZURCR0BOTnRCRmgsQk11TCNlTDtveXkxW01nNX41SjZDJjtYbXJbYVhpSVkp''@;'; put 'put ''ZDl1UTxvK1s0UzdZdDlMN2lAXmRZPmN5ZWJGU2k8SFsmKldYNFt2dGVaMk5+V3lHOTlAcmlddWcvO2lhIUFLMzhxUWw/KExLNFduPURpNn1LOV0kU048c1pCOn0lRixYZEcvRGJyZGExe1tjVEtBeEJSQFN5VU1MM3k3KiZiTH1fZz8jXjZ4VSR7e2V5P35WLyJ2WiNuY0A8eTJCUV5leWlgVzhn''@;'; put 'put ''Qjsmb3AiNn5qNzxPYm5paCEqPWAhQCNMKWYobjh3Tn5YXVJNfiZzV2YyYCFoRWN2Inx4Mmo+cm1nMmdJJSU0Pj5lSUsmbFtEJVVqNV0lIUMrZmRMSCZaSFdDZnY0dlJRXUtTNEMpXUxlMDIqNSw4d2dMdmFnW1tHQHBMU0RuNGlhVV1ONTshKX1od3p6SllSYXJFKHlEYFhZTFNvdWBYfVVKaTVM''@;'; put 'put ''MyZGJTB9bDsscytNW1JZUDdMZ1hNWHB7SjdVakJCbkd0UXhRWCprallPPE9DaUw3byU8MVJTMVgwO1ViU0p8UjFVT05Vcl93M3hgWGB2dGRbd2FdckJqIT9QOF5sezxUZGhKcFF6VEd2L2F1TFRnVTd8W1dtJCU0Nks3LE06OSFUeU5MM3ReKU1DKix2RjtySj1MSipOQTVdMmZBMlJlb3s2Iil5''@;'; put 'put ''O2pFXi9yPlBWWHpLTDBvM05BNjdyLDBTNkk7M0IuJGx0ZDlxMylNNVpzOiVjckRGT1J7V3EqKXs8YjxmV2JiWXwydjUmZEpzY3RwNyEkSjYwaWBdQHh6ckAqX29iUkk5NmE4JnJYPkBZbXs7ZmZQc0dgPylVRllnL1ByPmRBYHRrKnx8WCQ5di4wW3hMWldjLHYzdk1oKlNZWXNhSShMaSNZXndF''@;'; put 'put ''XnFHalF6QjQ+ejdXZ0lUa3VBNT0wKEhOeXIsKXJ7K3cueTVyYXFFZj5wQnJZVnZHPEI6MU4hPTFKU3J5Izp7RiY4Ti9RSCpLbmNCSD54KnU9PExRZCl+MTFQdjZxby5ePkZDdnF5aE80fGEvRi88bC5tWiNPU3hZRWF3dyNDb3orN15CPitIXXd8RVRNODxZTFllKzFxUldvK2lkT1NPalZFTkV+''@;'; put 'put ''fDRaXklJV0txbmB0QC9hYD1TbUU2VFpvJkM0QUZuZ1RCcFN4L1gvYlBpIzliP0YpKXt2eTZsfTN8aT4sSHEjcV0kNUdvOXoqRmpzaUsqZUpbcVlkUCguOGYrYC9MUUIvPCNeZjw7fGp5K3w0KXpKT1lxNm0qTC4ocVAyT2ZVKysxflgqRkh9M0dpOzNbQShaMy5VaCM1OVRHJndzW251T0cqZ3kx''@;'; put 'put ''MEQrN25qbzJxWEBHN1ZUdCw5I1prQDAma2orPmVPX1M9TyRHP30wbzg6NHImSzpacEV3a3dJZU8vVlN7SzVFVG53ZUlBLlk3VmhWPmxuelQvPWB+bC5aSSx+eXlXSXdncWEqcV1PY1A3IUUvVF54UFBHajlsdGFybjJXdkwiWXtBfSJfVHIpfnZSKko+cVEpV1IoVXkwd3tdN29SZTtfKik1biRf''@;'; put 'put ''I3I2cVtLfCp7QEQwNVlZfH1NTEZoSUV0TCNgNWZZPjlvcmFWdS9EWTw+R1VJRj9ySGh7QUR8WXpNR2BkU314JU1fYEhdYlYhfHp3dGIrQzRyY2lhUXtATCZ4Lk80TkhqSSFSJFZoSGUrQ2opS3J3ZkprN282TmlHOGleWSQhNVhYPHFzK2lbdldRcSEufCw/UEkvNEhnPj52TUAlPTREenAjI1gv''@;'; put 'put ''Nn17IXZDLzwoJVl+T1lgRTBuUCxxX09WRFBCNF5sZGZISU8pN3MrZCkyUmtSVDQyUCtjWFIsMX5WfkdyKVc7Q2MqWy9WR35xfm53PHFqQU18bCQ8Tl1IK01WLlJMYDAoUXc0PDBnM3okOHojfF9eI1hzZVhyUENOSVpZe2BRamhVQzdkVjg2TTBbfDI5S0cvQHA/ODxMWS5HM35oR0VEMGVEI3Fn''@;'; put 'put ''SF4hR1J+TTh6bHRXKis1cmk8bD5KelEmR10/TztfJEEmLlBONG5uN31RPiJoSSt4PytUZlZaQ0tSdykhYEVPc1EvLzRFN3woTm8pInw0R0NvU1pDI1cjRzB6PyMpRT8rMHtPRG4iK3NHenxtUj1zOXA0VWo9b0ZkR3wlSUZRJiRsXkNjPTd9blNlO1N+JFdNTUM8c21hem17amBjS2RLZjdgNmc2''@;'; put 'put ''JCU4N3NHP1RST3djUCpKSDl7NjcuXig7UWdibmBBKFlUZDMuezo6PWpyOUhLKy5CbkQzc3BUfjA5bnRPIm9rM190N3ZQUjQqdlN1eCRKWm50d3YoXTlPdzlEOV5YQHY1S15TZm9UUnp9ekdoSzxVLDRTLl4iOy5INDs5Lj8hTEY8XU5VSD1RaFVQdGZGTjFuJTFRUWAldFVwREtmOXBXKyZ4OFdZ''@;'; put 'put ''QC41VWBLXnVaPHE0YFlkS1ZJKiQ8XSx7TnB4NzE4PC99VUVib0t1KU8ren1VQ1FSdE44Yzk5KWcvZU10RjlAez5gXjM8NFtrZCw4QCVYcylxd0NSUnJtUkNSUUx3fmxAX19LXSkva2JFXXpNd1B2QiYoImBiY2Z2MWppOjo0MW1jKXVxcmVpV1UzS3g7JiYjVkhZLkQmNzIqM3pEeHVZfXpwM2h6''@;'; put 'put ''MEQyQ3Z0WDcxaD8lR2skeE05bWdCYFpjImZkVTQza2tAbUptRWlpU25JYkZMUy5fJkp5aDJTVmRWQ2QhO2EsVW41dUpNVVhJc35PT1FseUhTNHZiKDlBb2VYdHVLM0xIUiNqTz06WnRYXjV3OldoOn53YUZocCx4XS9dYDY8Qk5ETkN1KkM2OzExRl9falpfaWI9O1Y0STVNMDU8InY3bHRxQj9i''@;'; put 'put ''NDNNc25Ge3RhVj00WU1oYWNQWChrOmg9NnlKRDR6TFR7JWslP01kZz4uS0VPITNmTXttLzpvVShTQHJ7Vl0+U1ZvW3BbSEJJJkRycnFwU1JGSGV0OWFHWHcoPyV3LGE3N0J2LE1NNDdOP2sjNmJ2QDF8NXwhb1RBTXc0STw5RFJCW0tqMSVvbV12ekwiXTt7JGw9cn5ZeUFlS34wK1R8PGxVc3x0''@;'; put 'put ''Z1hAPXQ3W3JEWzRXXSF2cUkjc1JBJHJnNzRbM2FwKV9hQ2l+Pi5oLFZrQmhQT2wmZ2p7T10rVUk6MXwvMWpxLjArJGEkM3o3PFcrYn0xS2w4bmckNXM0USJmaldNVWFSbFlGNjhiQilweS5mRkhKTSl5VDxXLi5HOGZvMTxnYGE0QiUqVll9JShOPT9bakZSaGg2VkxhVSQhPk5aY3I1T3VfeHY4''@;'; put 'put ''VyNudD8kdC96bm5NUGFIR2pGbS8oKXJdPjMiWmRdQCg9YFgwN0hKLnFybCFUP0hnTyQyMiIjb3laOy9bPU00X2tKUz1iamFHN09IZUs5MT0zV1g4d2o8Ln1bYD5je1htc0oycXhSekd0MXdEMjl6RGslIzRlPyNvMWheeXhCOGVQKS9dSyppM25fWj0yMyR6XU8iKFo/LGR1Kip9T0FVYlJhfERL''@;'; put 'put ''WEAsWU1yaEFOfDcmcCZUTG1KZzBCTWtrY149ISledDNxQ3Y2VSJLWWJ8WF59TFttO01Pdm59I1RoX2N2OkU4QjcyT3ppUmdUX3tZJCFGR1Esd3p6KE08YXtYbV4hemdjRCNIUX5XYWBUQ15Gfi8/eDxhPVdsTnB4em5+RyFMYSx0ZD5HcUdBYH5HTjxqe3Q7eV17WyY+Kmx1Mlg8LnRFO0t8Pk5M''@;'; put 'put ''WkNxdjArTCh4M0srVTQlST9IfD8ubD0lOHlwU0FWOiZJRk1qKF05RVZVUiJxRz9wTFBHM2MuLmJOQ0JyeHJ8MUwrQFE8WHVUJnF6TWc5K19hdFJmNnssXWAyQGExL2FKNj1DLGVSTW5ReXxKNSJORWZTVSZXMipHY2sjKkdMK3RuUlkhV1ttRiolNzdxKzZYPjN9PXMlMUo/NGQ5amk5Zy8yQCxr''@;'; put 'put ''cWtnbU0ic05+RzU9PEhUWWVPL2UoMkNpd1kiQWdTMFgmV3hEfnxbOzBNe1J9Vj1sOiN5OVEpPGhXZygoOCJscHdlTHNFSm5RejhSdDBeRFIlfUk2Xi4pO3FoInY4NX16QCgleD1MbSpxeCooYV5XOGRIbnQ1TjlOZGRGMXczdH5Yd2s2SDx7aDpUUEVtMyttRTo1OVowbUNfQk47PEMwMFk5aW8i''@;'; put 'put ''XV4sQSQzWTMva1FzXk9NVDwwR0VZUzAvW3NCOmFaT0E0N2UuVlAzam9RI1haYVJjLjciUXFNSlorQiRoRDt8OW1gZFgkUGBDWFlXV1FnZ25KemI8bHo/S1ZhIjFKYT1bTjovdGAubUJ+Y2EzXT99digmbzNoUlc2eHd+cSI4XyQ+Tnl9QlIvSCEjLy8+VzZNTyRrdVtQbTRhN0wkfXoxZyNIbyll''@;'; put 'put ''W35uXU9RV2soT0BqS2chYXM8byYvJCpORH5nMk5VLyRicG47WVRAPkkoVkBpYyxFMkdSdy58YSlzc1dgUkorYGlifmNTcHVIPykpbTUqTFVATzFbWTp6RDNDOjBFTHk6Li9vQ18oNWNZKmk2O3l7Z3dveXNjV3d6XU4wezhsSjR4SzguZ2U5Z2wqVWt6MCFCLzZIL30mVnI5emBbdHYwPWBFO1tD''@;'; put 'put ''b2hiYGA5bzlVTX51QmtVN2x9Y003JUk1Vmhlc00kSTBkSCVvMlEoR1BwTyNMN0pWOnAsKjp0R35kQj12WipaNElyYjJLKEd4ZG1xWlRJdEFdSmFpeE1hbT91QEtWVVJ1eVJ8IUckMGZWXzM5cEYwfVUsKGl2bV8+MnMlRkR3JUZvJGR0NzY4SzNdZSE+YTdgfi96SCNHYVI+dkkkQm51VzBGNDAm''@;'; put 'put ''Ikk2MlI5RVdER11IK3hgbk9CN0NlemZyb0IvZ31PPXFVYyJpfiFjOFFHeX4hbjFGJUZOZFQ2M28wVE5+UlIheGdaa1M6dVVvbmVBbSkmciZeO09JbHhyWU1KJC4xYWNoPDNWaH4ubHpZWkR9WFMxdSxGZjNwZW1lSGM/OEI4WmphNEYhYHR7ZXMuPV15JU1Ndygvd2g1JSVtJnR3RTFjYXZaLnt2''@;'; put 'put ''RntmVlY3T1RPSy4zNEB2I0E8eXtWNDNEYXlhSkdGazReR3xOVlF5RFtNZyZTITVEWFc/XmouYmpiMUZjM09dNlA/K2t7NEtpb2JpZHJufUc3Qyw0dz9ucSI6RlpnRDpyYUtremIuc1Mxcjd+LyRhYms/VF1eJShvMXJMbkd2NUZsVmpyTzN4MUVoMWBgKEBTbVRrRSQlVFNlSUZncTJaZ1k+WzRZ''@;'; put 'put ''MCVTRVc5SW04SGA/bHdDQzFieUYidCY1PDVqKWV4Vmw4Om9eaDhbPmlHLn5TYyp7KlJsKUlbQXQ0ZU1JMCwpfXp9ZGx+fXRpQFg7bTc6P2IuR0Z9PGo8IXM3QF8qUz8iZHA7UGY6WFFlTVhLeFFAM3leKjVyeXpIJFVxLj80VU97TDhKI1p9a0A5QXx0bE49OF1eTTRKJVBhRVhMa2BFfEdoM0d7''@;'; put 'put ''N0EoN0o1a0ExdyM5M2lXbldEalMvYzZ9PUx0OGtZcnoiTmFzMDtSRyhdWil8WCkhfl4iQUFARFp9czJBfT1+RHBofn1SOEJ1QkdPakxlVjR3VXVuVHE/OnF4aWhnUSQ5Wj4sdmd0THwjKWZzP3s9NlQsTW05QEhKSHA/eFRZNzRtPzNANGJrVXZlMTdIcmJiU1FldzZmLkxUJmo7RGlpKUpVWDNB''@;'; put 'put ''bDlve0B2X0F6JkoqL0ZiW3o2VnAxRzwoOENWU3oqdVgrZmFZX0JPKEFyeFVJa0ViRyFaRmFSNjlwey8pOGpTRnlFUFtgKHhEdXF7TWIiQDRHbSJ1K0NYbkx9ZiRNQn1lUiVLUmk0aEdvQj4/VVhEcUJUflM4b0t1KEBVcjYvbysldVQ9K15TN11dZFQ9W3ArOm08MCZWRzJqRE1qQnRDS1FzTDpA''@;'; put 'put ''RlhvKSJ8bzFSe1VQWTFRcSJRWFBQYmhPU05adylSdElpdlpzP1F2Mn1VNytDc20sJDlXNS94UjNOSGFySCZuYH1VJipfR008Pkt1SCNsJilgdCN5b00yIlBYXkciXjImK0UsMiNNJF9aKHxsSio8UkZ7ZUxGMS9XPV9WbS4/bz92Zms3b2crMXZsQWlFbT95ZjFOLnFiYWJoMjkpY1NpSEtWckQw''@;'; put 'put ''L3JjVFlDK34ifXAqOSw3VzFOW3trV1ZEeFNbdEd9OiphWj9OdEFJOjNaSm5vTkJMKzkxK2Z3UVVVfEN0ZkVXYXxSRktMP19TfjhvJDZJe0ZHX1lIeDk2aGUzYmo5dik0eWs6PE4ydDJbRnVlMzt3Qn0lNTp9d2V3W2E5cno6SlZ0e1N5S1J4YWNtQnclVDk6T0dCRENqRkJJdTEyUmApKGEjNWE5''@;'; put 'put ''O240N3xmTH17I2o7aiFNclByTUExNkV0aGE4MXc6cEUsaHMxMSVxXmthMUciT3QoOnJsbipEaXZ1YVpfJm9rIUpRfndCMUI9TGR8ZzpmbjFdSD4sZCZ0I1kkPF9BUlVFPUF9Ly5USTRsdSptLHlLd2UoUyt4Uy55XjpbSnd7dlRYTkozd1MkM3k8b3QhZlQmO0ZHYjh1KUc5eXtSPmh8QVFkeHAx''@;'; put 'put ''QHFdb11JRzxDb3duSk9ASGJzeU1tYztaL1dKaGp8OkJdPGRpZFJERm4+PEA9Rjo4SkksTGhGVj40cmQhOSlUamUxNkxuNlFuUDZHXSZ1O0JVIiMzKHZrPWRSQmVRJExCcTNMM0haWHphcC9UZmFPeXFzX0N+WWkpTTtFVDE5XktsRGw1PU8yZD8sfTBSYFhUZnNxdWcrTURkaCJxZXxbLmE+R0Bp''@;'; put 'put ''ZFVhOE9jQyJyJCNVTH5hXlp5Wyoqem47MHtYcGtsPmtXSCgxPEdNXUdCe0xVazVhNDsxUVlLVmxnQ1Zlamc0YEY1PWh+Y1dRaFAqNlFGQml5SUhlPmNedUhiJjB5UkAwTX1vVH4/K2JVSWMheUJnejpUTCpTP3IrVUIwT1BsU3plXXFHfkprdFhjUU5tZThzRWdRIkFAKCFnfn5zUzhzdD9QM3F3''@;'; put 'put ''e3xERn4kXytyZkloVXxZKnVKdFJUSzptd3JkcHkuXStPfkVsQWZFTmtTNihFaWRkcTFqYFZ5MnN0Ji9ESzYoeGYyMnp9NEUvdWwxTmAzdXAoKFV8KGNYOSx6aFkqRCpVT1JdTUA0SE8rJigiZnQ8d0goUHpeUnE0RVJ9ViI5VTxaTmhaXk5TU2hffUUiPWhSNy9hYnJOfWJEIVYjPipDJGwpcCVo''@;'; put 'put ''b3IhKEFWWzdnUSwyI3tINiRpU144K2JYOz05R1FKSHskP3FOWC45bmYjMClBflhXIWFpRWpjS3QufGxRP3NlNGNhKkQwN2xEKX1DflFeaFp+KGM3OXdJezBWeD5vXldUM0MyOmg6cW8mXmRbeiVjMDQiKWxWVl1KKmV+Kz8/RlZTLz1zKiU/QGEjL1s0MikoaT57Z3Fpd0Q6VkZjNms0LD0jUCxZ''@;'; put 'put ''flp8WWNyMX5yKiNlI293ZUMmcEVDMUNJdiltSjYkQzpKQEg5aFpmdzxoaSpBJj1MJGJgdnYzQHJwYVFgYk5aRCxOPj1oa2Q1LnhsL0oleE5wIz53Qy8uNzl4PkZiT3kySS9TYz54MkZQJVY1fF1hO11DQV1QM3w5Z0tKJG5Vey97IlE+RTEzZkhYXyQlcmRQdjVaa2pCK31kam95LHIzNCsjOnw3''@;'; put 'put ''dE9xantkSUk/MFg1PDxnT0wpKCRSPk9uTUhvP2JMZ1RIc3o4Tz49MDFhZlM/ek1uNixLPmV1Wyw9QFdDX2l6aFdpN2NSUE81ZTVxKnt2S1VlXmQyPilJQXRRWEJtbS9wKntiNEdRTkRNM2FOQ3A+VE54UyhMJjdUSkdsUWo2aGYkNlZGKDJES15yRl89PEgkP14yUzIjRUVfUFhIbHA1Smc7ekts''@;'; put 'put ''QE9GT0JNYGV0X149Vj1FbVg9SWJ9RzthIk9SSi5id3A8RHk1N1RZIW4vS2pvNnsuMnRodUgpU3BLUGU4czdGJVIlOE51PjQkancvWzM7fFM0RmF2XSZjQ2pJLiFXS2thfVgzdnQlPWx5PkJ+cT9Oak5JVDpXKXpgZTdjRE8ieGs9KE0mIjZZTCU9PShCSl9ATjI2Vloweit7PEI5SlpuPjpXTz5L''@;'; put 'put ''Y3dteHdQQlB3PzR7TWBxNTdxM3U9V15YZTpxLkFvUlIwLylRYWc/eipvZyU2MCR5I0o4QFdTTDM2fl0wNENZOW1teHlNZjI1RDIoejZUW3dXdjF4MzxHeW0rWltJXTJnK0Q7eU0lLjZPKDtQNU1aWXxSQjN+JE1HWShDMS9GdWpmTyYpeWNqPVN0fEF9Y2BzfUluWDoqNmheflBVNilbYjg2RGtq''@;'; put 'put ''aDxTUTh1QWE5bkl1JTR8ZnhQYUJuN0Qra2ovKmZ5djVXQTxmO3RtV3FfWXdHcFowb1JRIyI8MyRSbz94S0YzKnBWZ1t9NXUoYGx4fi9OPFhSeypLOCR+Uklwd0t1WF81eTJSeHY7ellKSzk/L0JkMkNhcz95aHJpT1dhWSxGZFhONG95aTdAd0QjJFlFOSkvUVpFQnxvPCNgfGJFejYsT1V0STlU''@;'; put 'put ''IWk9MXxneilpMjMvUG4qP15HYUlSJmElN3pSaFpyTXArejtAe11ET199MCxYe1ArKXJqNW9OMHxCbSx5dmF9Km9mRGR7O2xmbSZgRTRGUiFCRntvP1drKHwqPzpiMTJbP1dRcntKRmwkfDdCPy84T3RrJitFUW19TCZNKVQxSlgkRXx8R2ZtQ2ZJSzcvUWZUNT8vOChuYGA2OENFa3Mpc3xmfm8j''@;'; put 'put ''MExFbVdFOW4/RWpWQEQ7X0ptKiYsUCUmQkVlb01ZdG8kUCsoPTtKdCZncjd+OHROXWMldnNhXW89ez0hJD8uWHtrTGY9TTd4PURlJjskY2cjZG0sUSZafGBnMDNAWFQhe1h4WXw8XXBOLz5neXZvRT9DSGFpVSN4Rl8mRVdBMiJaOHNnMk5mS1Q6NEtKQDk8KS9HUmxRRWc5dz5DMixpXjlqRXco''@;'; put 'put ''PG81QTx+IlZ0ZiVrYCloO0RgQipSVU80eDchTSNJRUxqRUM0P3h1UmdwbF8yYk5EU2NUY2s1QlhTUHJPVzdfNmNvWjZ7WzBbWyx6YGpCejI9ejcvaDVxTXNSaWh+dkd3VmZpS2okP0J1Mms3fm9qWzMjUSs4W3ZkNWdGN0pXfFQ1PFZNekJ8bz1KY3plYkp1NjAzZmFlYEwqL2pyZU9RfC5fdiI5''@;'; put 'put ''JG5ve0J1W2htT0wqLj5obmg5TX46RGlBRixVMEJ0YV4kXmMsNEJkbl5QUUxNI2xeTzBObnJlY0R9JFdkSFlzNSsuNGE6a3QrKU5OeyZjd2FLSGxaK3RsUSlTej1LMERMcT0sNTkrSDdvP2MsKXpjK2t9QWJ9YGdRTz9ROUEiUCwmRXx8aylAOVl1WDlnW0BmbCszdGQ4JW5eKCx1ImRXVisxaDY5''@;'; put 'put ''WFc0fCJUPEt9UD1YeHgqeWJEbkBse2MxR1l0VXQjN1pWVjtJW19qYEROXkp7LER3L0ZzNiZ3JE1ELk11XlQkSV8uRGBSXzZ6Uz4hY0s/WSxWenFaKldrNW99XmU4NlVaek5xL0JmbGdpa3NJPDQ/b3dqKFouTHg4U0ZJPXM5ZnhgYW1NQlNDPjpnSDp2dXYyUkMpazZ7JUksWiZmfntHczRAe3Vi''@;'; put 'put ''UjQwTCN2S0BuWzZ5IyVVPmRVYihQNVJhQX4kciJAdig/ZGxtO15fKmkjJm1DeCQya315Pnd0PntIYzoxPE8yfT9ubGl4QW00czcmOFdNNTVrXUYlXit3NTpRIksxNntSIzszMl9QPFVCZDZacjQ3TTkzKCZ7U0QodTMsa3l2PFY2fDE4aTxUQkdtLCxeMSpRUiREPWMwP24pRTFFJFh6cFc7aExd''@;'; put 'put ''S25GVFZUfFBMUSI0cXwweXIoV0wzJiVfaXR8Xl8lYl8qJStmOFc1cSw2OW9sRCpkLHJdQmcxSTlHY0cxeiNRQnthST5HSXguWGMjejwjTVs/fkYpMXlqNX5ZUjdFTm9XYy93TjJhan1rejNWfmAwVk5zUDhiVCNEMzU+a2pzN1B2VC93UjpZNE4rQztgWUJRZTh5aE9+Kkl6fV8keGVhZW1fZ08l''@;'; put 'put ''Kkh3XTNkc3VddElYd3ZuLHg5OldQJE9bMGBZLFpbdVQkdF1fSlRWVEZyPVRvXlhDZGxITEJXfiRFZjkwUE5jdXYoNWNFc1hTeylZdSNIXjpeMSMqZWM3YV9Tb0htZ2sydmlVM1VXX3h6ZlEwVldKS2k4YWdzN1Y5JmpXMnZkP2RvTG44b09SQG07em8mdW1VL1J3Vj9kWXVvPmpGITcweVk0Uk5w''@;'; put 'put ''JTBOaCNGd2phYUVuTTV0alRDfjc/Skt+eHxuRV9GaDk7aig0XzoycmlmOEdoUilTd1Q/MSg2cXl0bk42ZD5gcl46LFI1Um1HTTx+VjRfdyV5Mk1fUVIrbiYsSHczbj1AbjFIalNJO3VqPHlNUF8yZ10/Y3UlRFJUZjdwYzB4NlBReXkwKn5+I3NVMDhsMTJCU2d0bHY2VXw5LEF7UyNNezVXclgp''@;'; put 'put ''T1lSZmFOPzltRG1KcyRCdzJLdVtafU1QXUkoKURdODMpR0h4Y15wNjpheHU/Ik8rQUcpc3kyUSViNDJHOGF2U309WWRQOFhhfEVCQWwkejYmIiJ9LyFfMTt+VndSKmdPaWttbEZ6eV97dnV+KWV6RXZsWD5IKyhuTTQ4QFFtajVVNFFbZFk4PWxLQU8kZjE3czhWI3B3LyYhfiF5QVh6e2NsTzRf''@;'; put 'put ''QDRFbSlwOCwkMStRdUk3dTYsaUZ+W1tDOzorIl5aRjBZRX5BbTVLJUdXVGpjc1FGQlsqKUAiUGAxKkUwO2soJVNfZGpBK2tyLmk7LFlUbCRSdjZvWX5oT25HY3NHRUZ5LEpYVk9pSGdZQ0ptM01qWCV+PUtzc3M/RUJEJkg7bih9VipFWDhJJSNPNE5tIns/aVd0RSJtUks0XnQ4WyNMdTNKM1dX''@;'; put 'put ''QzYsOl4mXXdZeix4RzUhJls5cTFbU3lDMWhwLiQvRzBTNmVmenxYdlI3L3NqUkF6bl9JO1JSSkEzWTI1Vl1fc0liNENIXXtsZ3kvUXhrQlFBSyw4Nj0wJFRCW0cmcnA1ZURZdzI3V1YraEo/ITI0cjJ0e1Y4PDBqKzF7eWYuQEFuVCFgdEddPkxufllOMmVoUGxjJHZ9X019b0gxMiQ7ezdwJGtt''@;'; put 'put ''YFsjXi56WHwwW1tBRy41OGQ+clFAInw1dFt6V2BZYVtYLl9rcX5MbTlfczQmOXFAZ0JDTWd6OTFTV3VKK3xhOFI0OVt7aEZYK0x1eGxxYl10SVprZTdKWlJ6L357RC5hWmp7RCl0RmErXjF7cz5IV0woMXY8P3oxI0RHQkJbXXtCfkcqNFZRdGBxPGptUFNvSGFeX3tZSyxBeHJ2QGIoLnpgcUow''@;'; put 'put ''ayh9UG0uZnxRWzdQUk1LLEx3ImtCMjlmJXBTe2l4dSgubnVoNT9iV2Zmaz1HZVBtaV8mJGI/NzNHOnRPMzk4SixQZzg7Nm48VH5hWl9oUlA5Z2ljSGhANT1RW2IuLlk4JHd2RikkTkBJW1MuYDxZUHAueD1haEY9SC8/OjpVS2wlQ2M+OHxeWmpUSXdBNCxHODtUfD9HWn4uP0Z3XnJNJGRDMU49''@;'; put 'put ''W1psKyNjX1N8aDJTMHRReFEkJDJiUVMwQHBQYzNvemprfS5bbVdGc0RwNkw1ZiNINWNQZ0lzOnAiIyRRQTlrc3FTXiohdH1NLEZxcmI7Rk95OE1ndFZoWyt8fjdmKnhkezhCeWgpIU1GYj84dCZtbC5BTExAazJ+fDRrXnw9O0cvY1d6aVo8USFnfF0wM18vPHo4UCx5RXxCVyV5WE8mbnBeSk1e''@;'; put 'put ''YDlvP1VTOWlCRXtjPWVsSURGfFVVVWdze35OYklVbjxVcGJmR1toPjF1aSlRK0RIYk1wd1FLPlE5SF1XRSlVdyxhcjhWRiUqZkA/W0g7OiI4XlU2emZyOWdePzluMVN9X3cpaj1EYjlPQWNVK2I4KztZV0xhZWRbQVdgQ1JYXjg7S311fjpXPF0ieENEe0VoUjxUPUYmLiNJLExSZiZXLl8kczNZ''@;'; put 'put ''I19GSlF1a0pGaTV9VDVld2hIRzthJS91QjB1fnhtU1JYUiR3SE56Wl54LiFeb28/bHMpYiluXm5MZH1seWldUldVUWE4Xz5OeU06dk8oUDRJRkhRSX1TMVB4MW9wMz5GQk80Nz8oeiElSWs8fkJxOzBCIW80O018M3Z9JWI9NEY8Z3dMR0ReKnl9NTFYSjk0XnAqPCRpL2MmOVI4QUNvfkchKSJZ''@;'; put 'put ''Kk93U2cuSW1lOlFxSiFYRU18Zz1+MkQ/SHcmaH0zXXdHYXpSRzpiaEhHRXU7bD9oRFV+bXNidll+VjRpQDN9JnM0QyxkSj52emRsL31BXyYkNHwvellQLHNdP0pFS18/WHpFVDZbfWBwRmhkL31vfjdGIjsibSNEWFthfDR0Imx9NG1qdzdWSEMvcCU7RSYqRW5eSjZLVUg1OEVpTEkqMl4lIV5O''@;'; put 'put ''eXI+TCFNVH1TRCM5c1UmdXMvTi5IJUA8OytZWWBhdUpOcUNSfDlHUi9+MFpYVFM3Z1pfWEV3JS4kaUNPcy5YbHkvZnVTcyptMD5SdEJ9OEk0Z1N1LDI9d3Azdzomc08xQCRDLFYlKzQ3L2ZEKSUyWVF+UHFdJTciJGZKcjQyNVA9ZH4sVjIwYmV2KFlzQXNmOWRlQz5uUjFEOEdvME5oKnAocUc+''@;'; put 'put ''WVJ2XTpdUUwsKVM9ZDxBcCRNdG81JGxZUnF0ViFZWCZ5Tk0uTERCcVYvLjEyYmB6RDBsdlFGazlKKlh8RzJbUzI3VXhXRFAmX0RNQHo2MVFNQkQpVlUjclEiLGFEQ1hTSUIwd0E6XmxeXzpvXW9QfjlGQjt2I0oye0x8OEgmSmovRmtuam00NEIkciI1Lkc5WT4+Zk9pZ1t4JHBNQGQ1bG9XTjRe''@;'; put 'put ''TzQ3QT9WX0FVXXl2Qi9ROGppO08zaHtdJEE7dyxDU1o6ZndQVT4xdHUvYGZwXmEyaVBqSyRDUXBSJDlsOUUqLk8iSitVIjcpM1dme2Ujdn1YUEtSRWJeUSQzKShTVjJzdXxbR0F7dHU7IkEjTEd0RFMsd0RZQ2s0aSMhRzpwT0tiYzhHZkZsMENtMFZPSjFwTE9GfFcrUit+YlNDaHhZITM6WCpq''@;'; put 'put ''RzovV1hGJXwle2ZWeHxaJDw1IyNGPmNreD8uaE5OaUJwSC5jeilWTzAmKVJkQlRXQW5AK3dJOztkNztSMUg/MVZqcUBdZEdCMWdmfUJhZThAKWx5TTBgJlsqUUl7NHloQ30/PlFQTzJCeWAxbkQxIU1iXWVgPURwT2FEZmJHVU10ejNKYHk8V113UyplP3xRQEM2bm5Ifiwwc1RmTG05KHZjSkMr''@;'; put 'put ''aSsyOmhpcGA7UkhzWUtmK3x7VCJRX0NnMSUkWnpgQz07KCRafER6XUdFT0AoSkV4MHMzfXNKfS58YHpVPGIqUSxYSEhsPTtsJmMzKW9SQmdCellJSkshP2hRJmQwNFR6UzwsQTBvKWp6QHRkb2Z9OC9CNHIhWGVCTkczen4reW5XLGU/MkA5Xm5RQ24iYEhXRyRRflAqKyFgT2FYXWBXbHh4JG53''@;'; put 'put ''ajswPzJ1JlBbaShWX2Z4OU1uQ1hXZlkzKTUjZXBNfEdNaERqWnovRTp3QVRUVV9SO2M+NUNEelslVEhmSHgsM08hY0t7bz4wZkU0TH46cmVVM2I3WV5vVlYzUCw/dDtEdTlzN3I+MD9IXVk6KUVsb1pAI2ZTbWM3O3xQN09uNHYpYldZOVhZOSxKWHp5XkFTTCo5YUtOWyR2Pz9NW3B6OjRbaiRK''@;'; put 'put ''SH1BM1d7MjsmbEM2QmxqSXtYbn5mNG5wa31yK2o0UlJ+Y3dkWz5TYGA+ZGgpZE5pTyNUXSMhbFVLazMrODFGNWMjaDMuQ2giWHBaWTpFeVFCejYqYW1oaSNXeDNlIW1UY29iKFM8NHJtcWlzT15AWU8lNnF1aXR1V2BtUF9gfWU1TmRlZFdSdUdiOTB3UitGaDFIW25OVkh9UzVZQyE1eSFAPlFm''@;'; put 'put ''R2Jla2hUZ2JuQ0xwc2locWVwQ2tfa3NkdT1MS2VMR0ZdK1Y3djw8cFpgZFE4KDtVZXB8ZU9FQzJpRk01ImopcWs6Q0J2Pk0pZTpURU1iKjB4VCpuaGZCL2hBREJgJHxsSWouWHchYHBNR0NTSzxaKDByOlY0bldINzN1XjRDQnJrWnpQXS5jYzJTcTxGQDwkaz06SUBbcXhzWUg4VHBja0d4bU8o''@;'; put 'put ''YjpXNmVhUSxNI1JObnlrdUM1TSZ4QkhHQEM/W1RVRml9JWoyNzR4UnBSMCpCIXElTFNGaDIvZFA3NnhyR20pWUFBKzNgYkh6dDNPdEp7JFk9fSFNOTYvWnRIa180IzY1XkdrMlpUfmN3WFB4Jj4xI3NFZmFHVyYhQ204IUhbKT1sMW18eCJxeiZBeVddMT9CaTU+KmBibmBrXXEsWXlqbXwsSSVD''@;'; put 'put ''RDx2aVJEQV1zOTttY19oTmwlYkA9PlhQVGA4cEw+WDtNYTptWkZAIzA8ZHlOVStEZClZTU9XTzhaWGNoRzMxRGI+YUo1cl1vMnsoYCZPTz1qNz8sYTxmR1E/an5PVEFCVTojKFd5PTcqbGcmOXJURF5wI2xqYlF2Q1IodHwkdyJyNHpXaXdSSShVMF8qcT12PnQjLyJ0UEBld0xLa24saG5dbD11''@;'; put 'put ''QzlZU3ppLEFkdy91WHQ5KzBQUDVJLCV7Wy43W0BXdFZxKFVRdX5jSCo1dXkmVlJSa1dkTjBaR2l4JiZkfVVKQnpzUzJ9MU5lcE08XzV4JTohYTU2XWg8KjkmJU9JXyZaVXhxdzs1MkpZVzJtSkQkXWxIZzdRfGtvLGVlTTxbO3x6d14pT0NaSDxqREZbJC5xMmp6SFNncEY/L0hlfiJrPklkSHZT''@;'; put 'put ''Qkc3djNqV1paN1p6WiVpdHBUNCl7XVRMPjJwaChaL1dPZCJiVGl2N3I/LGRMSTRuRDRoZ18lYyF6KjNqXUx6PE5XOyEzbnxKW1ZkNXE4YSZKcFpwT2VedUZ8byEhQjRzc3xOWmJvQj5MIW43SUQzUFR6W0wxJFs6JixiPit7W156YzxfK0JGTkZDKEV6X1R5TTlGR2Z3d1NvMXJZeT0sL006ZiZ1''@;'; put 'put ''byw+bz44XXl8MDwiYzd8VFE8OGxsV0p8YUB1OFhSZjtQbE9nZlpaWVJVLGhVVE80L15DbmRBTzdwTn1XITFIWntmcS84fHFYWjxQcCpheGF2TFttRkMuNUVhd2hCRTAkWlclIU9IQGBPXlBVNj00K1tES3RrSixvPmh0ZX1wfn0vYEs0YmIvdD86bVF1fkshN3ckJTs1bFhpRnZscT56MnF3dTE3''@;'; put 'put ''UFA7cG1fPDZyWSJvJHNtIWV+aW9AemEqSVF5TzcyU3cxNiQ8ZHh6OF41W2pwRERtRjJFUXRaRVtvbzJePkVudT5TMloxaCpNQHtzWlRXN2p+OSgyeXY1XzNfTy5zflIzSWhfVkx3VHpTLlI/Zlh5Zyg+b0F1Q1ZGNz85NVQrOUgvNDIiOUZBXjEkJTk3TG5NdTVpL1l9enMjWktoey8vPSNrQC9e''@;'; put 'put ''bSxndEsjRWVvbk9aJS5GdDM5L19naSJYKn1APFM7Yl5hbDV1KE4zNyM+OG5ENXFAM04pdHlJW05VOmJzR20hT1tHdWReIiNCWjNZWmYlSX5bPWtmQFsrd3lLX25QP0psZlUkXi9aVGJIUmMkZ3hzNTR1bi98YV43ckdEa2Y7ekxDUHZjUTd0JWpLX3VMeWluNUR4Yj5wMDIkRyZgeGhuKGFBKVM6''@;'; put 'put ''ZzI6eXRPQFE7JmVZck5tL0RkamBfQG1TTmR+cHRCe2d+SDxWL0gsKDFheHxKbTxzL316T0Mua0tsYmVfZUxGOU5LV29Ic0RwIylKRCx8amZSZyElNHQ4PDw7bEJrcVtlayIoPC83LzBCSFY8YXR1WUJ0cHNEWnsvdixOInhoJG5EMiUkbkIvXk0yK0QrcTBkMSFFWz83PkI1ayopUylabko/JFdm''@;'; put 'put ''QVdtZVVaL0F4PT5VdzlVe1VZUF09QzM3Z0IoajElYipKOz84NUAyLGIhdihjMDlEflBwY3Ffa2B1NXxVS3YsYXo4PFNtTDdNaGMmQyErdE8yUU9eZHtheFpdVDcyaExCZldHMjl6WCtSdGxLOmdYOHkpVW5TKGNEaGAhfT1dWipXKW4vQEo1Xy5LZVFdOGBPY2dKaSI5SmJ+eXhVfGhyeHp0dj5X''@;'; put 'put ''JF56TyJjNSFLS0ZNZE1SZn1mbzwoeC4zT0QvM2tXQ1RYel5ldkkqUVEuN0dGbmN2d1teMzc1MGJKeyohLml5fHRwVCgzSGUoOzJVI0FHdTpgPk87SzF9M3RJfG03b29uPztjSXs4fCxVfHokR1dUfHVfcHFffk5JP1pwbDsxTyYmMTx6fWFZVzE2QFU8ZW03PixXPGU6PWBJejkmTCNZPTdNc00i''@;'; put 'put ''QTw1RHBXVmlKY0NASjpQciE2ZSRzaiZvcHMhUXxuZyxuNlZIfip0ZSYpQklII0REbzhSJUc8JnBVZUhTQEFvTHhMYytDQyR9eWVXZWAwQlI3KEA6ZigyYmc3YzZMQGxZZTY0bk1eZHQkaGF6NWc3NSVuISlaVGRLNSYyT3R1SXtNK3FHRERwN3NiRlEsWTdfeDl1Lko8YnxVdzsqcTkkdiw4e0Yo''@;'; put 'put ''Nmd3QlBMVHc4O2JPZklIdjR4Si4wZTREP0xPako2bjM/ZkY+WGAqOnplZn1aRloxQXh1fTpPbUV6MF1LYl0reFN5Sk9YKHE8b2dYQio9RjFjRT16UyNgZ2Y8YnJWKWlXXSU9OVpSJDZHeT1IPSU7a0d7Xy51R3JqX0QmfSNsZk5bY25ZQ3xuRXNSfCNYNDcpOlJbM3t+SWRreyw1PnJxR3tPI2Nb''@;'; put 'put ''WkwzWmpYdTRSe2NneUY3KVE8ZWArQlVlbUJQKGp7TlhIL31bP04iYCs6WzpxLyUqNHFaI05jWGZqYjJpayx+VjVecip7KWYwUS5SXU4rOGZgR0ZBcX19bDB0OUlqdDRnP0EpfipWV3VdPSRldFZ1RkNybSYpQSY9eztkIk42UXQ7a1NAS3lGMT51RWNpflBeTCJfTVI7amhDSiEpb0xLMU4lPyo/''@;'; put 'put ''PjteeDB9Q1JmeSJxRVhgTn5MeiguT3pwRTUzRVFPb2V9QnwybDRZUDB3PnJvOzlnMHR0VilGOiQ7Q1NWZ25UJntBZWlPfSltd35ARlBHTDs1V2pOWzVAKytsX1oiNCEvZyMzayYuM0ROQCY4cndXMU4zUHg5bVUlMWY3RE4rO1skPl9BS0h9KiRDaExwWGFqWnEufWxYdG1qU0tDdmlMJExUU281''@;'; put 'put ''XXtRQmQ5OXQrXW1iRzRTQmVUakt3PVomZ2ZaOjR8dTI7SC87ZXA9cl1vJklGbGp7IkhTMFpoN2c/eDsib21zRThkc213IiQlZmZ+IyVFYS9yajU6dS5MRHYlMEQ/VzZtZD4xaGQ5SHFkOlAjdTBJYnJ7WHRUWGtJK0oyWVM+fVVieDVZVk5FeDxDSCRmRGdlKm8kY0l1cnNfYiNaZj9LbChNOGRb''@;'; put 'put ''eFVePXFeYS9lZzhSaj9RaztVejtuZG0rUEpTOlo7PUwqSUdTS3Z0W3UhJjNsZClrOlB3M1h2VU9MPGhwMjksSnZjSyRUTSo0VllPckthdEJIOT9eVkkpdik/RE9edzZbd2MuYURCSz9FQ0QlKVp2bG5lY0NqeUMjMmtCM2dveH1EZDtOe0p+cSZtfSlYKX1kNHN3fFF2WkIiXTFpQlVgQCVrMTR3''@;'; put 'put ''eSQpeV50aFBQdXBuRktDPFEiZl42dUwhNEc4WFdRPyp0ZXdULFIldER2fWhQRXdqI1t7UG9QQG1NdlFgWiYoXWNOMmdXPVhYbHc8PHVBP1c9flgoMlBUKHFBPlNIVmFveGd0dDs5TFckTzpgKFRwLjMwPEQrSmsrIXwkeiZuTURsSC5SIVhscEcvXT5KcFtedWp+Z21kYDlYLG5YQTRmdUtOeXs+''@;'; put 'put ''M3hPKHRRIzBMZWlrUkIrOjgoUGlgTUdjIzR8RSxaYENFcGwyb2lEZ21sS355aHlFK19sZWBmQ15GWVNkRTFHJFNPS181SERUZjBAJX5RQkNeXTRmMjN3O2BhL0hkM1kwZ2dAPHl2KzNiZSlJUW17dUFJXmReNWZuPzlQIV5RaH5ocmtCRCNzUWNbJGZ9Sj0hclRhJWpIJUBPbmdGcDlSQEB7eT5N''@;'; put 'put ''Uy8rKDwjSCUycWtnTHQlM2JSd3U3UlQ/al8uRX5rOXdSM2pnM2AuWFdQVVlndVIpZF5QXTtPdC8wcilDXkRUZFQ7JF9rWE55WkZxcGRrbGM9Z0VqJlh5LGVuImVrK1E4PFR5VlN6QCxfSWJobDxRTWRASk9fa1BEIWkzYWd9U0dXZnwiIy9BYjxVY2hdKjlkJENiRVVCQGh8YT8hcVU5fWFLREF6''@;'; put 'put ''IWQ4cEdRLFlWd19GVm9AcHRvP1lrR3UlOmZeSzdvTF1DJm5MXylWbFskaEl+Nldpck0lO0w9OnhtKi5NMikmRCNHYEpNenR3X34kNTZ3dVBDdEBxU0Y4Pyg7X0hqc1kpZzBuTm80PCRTdig9OGtIRi5DIkB+WkprXjpueERIZ01tcXtoQTp+UHQwYFRpbGpSbi5dSW9XenlSWnV3OE5rVFE8TDtA''@;'; put 'put ''WEMhfk5EPHR9NiVIMGxKPnVqYDpgRE82TGxFeXEhXTpdPSgzbCpzVzYzWyU/RHVYIzh7ek01YjRBcHtKWXp4RDk+PztwZ092bTpDX0dWRm01JmZUKndjanZQLyNVMGhQQ016WlNwTUJOdjAwV1VxVmhGVl4lLERRKXo0Q18mTGkvO1NBcXd4ZFhXczdQZnxbJmB8WWJLbT4vfDl7dCNEbipiYUg+''@;'; put 'put ''QX5xXztTeyIjalpdIkg+akYrKnZMLH1NMHY0KFdVTE9JPj4iNz9ZblNna1pfKzlPWH07aGxROTJQQGB8KUNPaUZyKi5rRSNHW2tue2lQWTtGVFFFfXoyREpTfHxId0AqYlFpcGdkOlV5JlljOz9rWEB6TmJlaVEjdCMmQ0FVOT8+YEFBL3phYG5bZzZgQSt9MDBxI1ZoIXk0ci4oQFQ2VTFTMiEz''@;'; put 'put ''SlQ4U3VRbHlQZCUvX0tuJjM7R2pbbmV7aCYsUHBHZjBRUnt0TWB2b1ZENkpvUUROen0oNUs6TTsyJTZvaVYibTZTYU5zYTt4MiRZW2xzRHgsTkVtPjsoKSQ/bUVmdVUqQG5LOCEsXmcrTVhKXSFgMEg5LHx0QU8hakdEaG9bI1dYI1UxMGd0Sz91JEgpQDQ+bDloJV5dbGYuJH15Z3ZxdGtFYkA+''@;'; put 'put ''ZWgvQkw8TSF5RExIcGdLUDdtfHNWYGRQajEkJG5INCgpWUYlZys7UFY5a1ZhTWRbX0oxZDxxXk9EYTdrJWNbSWlDeXRUTyhZVF5WIVojNU1Ufm0mVVgpelhMSW48Iz1DSS81TWUqVDlfd1dWYHErTW83JVB9dDRrcWpHaFZmTDduQE18Y1M0c34kdSVNPyRRVW5gNUFzTFtyN3RJLF1SPmhYYDdZ''@;'; put 'put ''NDBvNTxUOS9IOnNZVWRIK05dfFBeITg1YFN2WmtHJFF7eWIySj5eTzlCTyF+fXZ5YWhOfEhWOk1dInFAQyRYSllvPDpdXTkqclVCNHJGX2B3cEVnckpiKnJrZ0tqW1Qla0cuVilFRz0+VG9XM2R5flMjWU1mNjl3TSJUaD0wIX5DeF9NT0sqWTtSNTB0JiVVOD5MalYmKnJ9TGBnYzZLaXdWTFko''@;'; put 'put ''bzl2WHA0PXwsbmAhNDRORyFGPGxDfkFUKGMmbXk+dlcxNmFJU2hOWkZLR200JTJCI3svRTJ5KiwlSHw6YGhpPWZAYD41OkJrJm5jMDJ2U307XXpjMnVsTX0/W2VnRjQ8OU0mZndTXSwqLE5MJWwpXU5nSV15JEh9eVFVcyEsdmR0PFRWWj8wK3ZCSUlefFhzbTljKjI2ZyF+dUk6W31EfkdHYGFU''@;'; put 'put ''X2ZDOl5MWDUoMldhbCx1TlM6MSZuRU9aW3NZeSk8ZEpuR3ZuM1siXWVaYS5Nc31IYHROViZtXTkpITlkPlFVfWxmSUBnODJ1S01mW0Q3QyNtQ2BHdiYhPT9ueCNJfU0uLntZVnUlXT8/QjFDfWg6a1FUdnNycHdRKnhSeloyeVljdDIjMWBEejplY1V2a0lOMVtpVGxQX1hGNktePDlFYGJvWiFK''@;'; put 'put ''b1J8bCIlKHp7cGl8Y1FJPlslIlghb3BQSE07b0lFaFlOZUNdZn5mNGlxcGUsZD0vTWZTb3pDUVtHTDt9K0J9Izl9UmBjW2QufGNTZy4kWTIsMjssYTVmTFZ+MlRxPGpSU01ELHNUXWBnamQseSlGSCQrXyNFalBBQDZ7XVhyJUAqa0x2OzFJPSRaWXA8Zm5gPlA8Lnt7Y2VVS1F+cm1McmhhTXBd''@;'; put 'put ''WDcrd3JMSFQwcjc9QHMidFVmSnw6YD40MnssQXd2ckpTNCp3bWBMcXhieTFDVV5+cFR4PEhfRTF3Mz9FY2grKSowRSFVQV4jTHdhdjphRWM9eSNtXjszbER+SSlfP0tlPERqOiFtWTUrJX5mX000dE4rPWZiV2xzfiE6T3BVTk54YSYzbEs4MT9+XU9nInRWXmZuKUQ9TEc/fFEwM215SCxgNEdf''@;'; put 'put ''ODxLUXlUfng4Km5EWTw2QmNDPVpNImpKcj9KOz5WZzd9bFRzKUJ1UEx+V0Q7YyxNcE4lN3ZZUXc1e1BiNjUxVFEkIzVfRGRRYGs6N0EqTVcseVdmZ2BeeiUmems1IiRaXi87TzxSfUlCfDozQSF3Sn53SHdeazdsRmB5I2N0QnFwOWAhOzQxREJ3cms4InQ1bEh6NkY0KDdZbHA3Sjk/UE9YdE8z''@;'; put 'put ''WSRhZEZuYlo5MldxWTxbfl88OTJuTWcyc2xGI2EpNzpnL1drdjttOlswbjMueVVJVjxpdXsjaS5kaTl0bENAej1+bWc4bHZrM0EuSHFSIW1EfUd7cStCP3U5XUApPWEoPkYyWDtAPDEwNDtrITE8SDFoLmFUQUgjZlZdMWBmSVFaa0Vmby86JThNTyJWaTRMVE9DJHdnZkkwRShnPTdlflpzdmNF''@;'; put 'put ''OHYsJjdjfTZqaSh4SjAhLjpqUDY8eG5VeiNtRVNnRzpwYFljQGJYOFhgLk4sJU0ybW9dQU1ZbG5VSishSixuQG9NaGkyKlltPEtqcSElSWRlPmwwRTl7UjNwZU1lWzJmQUdfNkxuUG45UWdMRyh1QFVTS0pyd2deaDhVNU9yYjl4VkhyfnE4NiQuaCxbRXJ7em98XXE5dTdhfDpAWyJFNyFoXUR0''@;'; put 'put ''KDt9Vzs5M1BGMU1qdTxsXiZScVQ/MWoldThxU29ScFVeMl5qQis7RHBMS1tzQVVINzYlZkcwOStaPTgwfGdQInAwK1JEOG98flQ7dFkmOVBGYncjQ2I2W0AiU0t1ITNxNX42JmdlbUkrXk1weitAbFtzV3BRO0QhazwxKVRyazw5QkReR1lPWmpEOGBNcT19R3l2UHgxMiEvRVA6MD1eM1hLbXpU''@;'; put 'put ''PE5lQiw4LHA8cVU0NXwzS34zeXlPaWUkY0E/Zyx2bGtOeTdmT0U7RndQWV9ubXhEZCN4ND5TbmFZLDR+Xl12WlVNWjE9QlIwTlo2YG5GfTNsdmczNGVzSTU8LEFuQThdOk0hKjg0WzpEMFtYcD1Tajl1XT54NFdOVVB8NEdzdzRGWzN4SHg+XWE2LlhXJn4qPUZ3KGZJIkVCbi9SQixZJm9IZztk''@;'; put 'put ''RjhEWGhlUE5uV0RxVDRiRE9hIjlHaDF9Tmk8fXZLK0ZJM3J6OTlyNmJ3Il5ualU7bCRSR0w1a04wVnAsOzhPUD9jJFlXdHNbMn42VkJlKVgkI0h0bWgpR3tbQH5VNGpDYjtgdk4rI3JtcjJuRF9AOjtyRDRTSTovMUxpJTBXd2hJUEVyXnlnMGxVYWZwQisqZ3BnengwSSQ5a3c8OHVzUi5FIzso''@;'; put 'put ''UFMyc1B8cllBMzshOCFJQEozaHclYG87QS5lbFopLlFZe1pFeCI/I09dLy9LeVtXcmdLZlE9bi5pRHNIOFA9UTRkIzUkRXVzW11YalsmP35iZmJDbm1+aW5FPnxITT12TylSNz1dezA2fnpQUlZ+KntKM3FMSzVhMEZNSEJRMyxITzlkPWgiY2thWS9RPk0jcE4pMDwvJW00TG5JSEw8WFB4S0Vi''@;'; put 'put ''SVBzd3dVdGlwJWc3IlJ5e2RVVTVbfXZ2TVdlMGhGPExVflFzbi9zb2pYe195WFd3KE41Jntxfm0rdz1aRkZtNVsje1d0aHZyXnRbcEM+TmBYNFMhRTg2VTVOMj1XVFkyOypATkRlNjE2Lnx5dmYvaXEjMXNMWlZyOyo5VCRvNnhMV0JqeD8rU202QjNAcDc1MkBeOldyJE45OE1DYURyYy4uKW19''@;'; put 'put ''RiVoL2piPDlCJCQ3TWY5NlZGOFQkXl4hS3VCIXRQRm92YjByMWM7eUB6TGomJCs+dUNDYEooaUVCO2pQPiolY1JSbWReKHluZlB2YH0wWFtyd310bC9lYG0pJmhST1cqNnApOGN5Y14vK0ohJUpiQSM6RF8kZmtIWGR6WmtmfEU4UHlxSn5YOkBsPEhnOURoajpGTmB+NVY9b2opYEZjMiRPSUVB''@;'; put 'put ''TnNpfEgwNTR+LHZ0WUlKT3pEZTpCKVBiOnFae3UqNltASVlRRE4sK191WV8mV3crRHpCU1p6RjJuL0opZF5tfC5wQW5ML31eNzEiPmluVkRUemAlWTwsREx6Nl93I0g1fmlAcGhXPnQvZGBfT21LOXNdTn1lNC89ZHB7ISJDR0MhMC8ua3V3eDxackZ7WGFkJHhTUkNEcUVWIlN1bn50Pkh2a1Fx''@;'; put 'put ''Q0duME1Oan44I3c/OTJ7X0pMTilCMkQvPVhOdklgPi82Oy9naDFsaSIoW1FuYTY2U2tebE8mKnxDK3RqbjQ8VlFuZHNtQmhQY2R1diEpQXZpV0x+X29CPkw9Kj0+OnJNPSE+SHpGb3BxMj9JPyFzQEBoayhFcjA8JT8xIklgXW5IOCZJQlUsMCsmYkklYS9gJl9GLD4/cU5ZW2gjKHxDektyfGRp''@;'; put 'put ''YnR0eTpSbFV+dERyWHhpQngjaDczSUpZVFlgVWk0TldiO1kjWkQmVjldUE5eP3lwQnYwayVtNnVWM09yMiwuJTJbRjx9fXkzTnYrISMyOC4wTDdDMnp1eSV+U2h0fnR4WExnbXA/TlZgTUB0amVKZHBwdmVMYjlfbHU6InhPRDNNOHUze3U/LjV3OiJgVFtJM2QpPWYveG5NakhwM3tSWnpTdklS''@;'; put 'put ''Q21CZ0t6NUkmJiNDU0hZPHJWbk0qUlFbKSVxY2Z4PFVRPH5LfjlCKGtTWTZ+O2xoZHNTYzBDLypjfE1COTF0dEpzPj10Y2gwfHNXMGVge2tYVyYvPjx7SkQsZF18MlJEa2JdPnBHV01bXnRYYzQ4eHlXNjo5Vjk3R3tjPik2SHZ5KjRPantXbDo6WjZmZjNGc1AyQjJSWTRNKyx6NXtFZ3deRXkh''@;'; put 'put ''UWNGUjREXXU9dz9xaHIoQW89NCZVfS87eUhuYTdlUU1tfG1nIUlQSjJXVlN0WXlYM2xaIj9HeytwfWg+UGEiUUA5KS8+cTIiZ2c+NjVrRG9PR2t3d2EsNSpmMGVtNj9Ebi9WLmFNVyJhQVVRTDEyQlpoNDIiX25IN3NGKm57aGRAJFpqRVQ6e0VuL3p6PFt7KnpXXyVLKiQ+dFN2JF4hWG9AYCM6''@;'; put 'put ''UDAvX1MjTFZ+RVh9L2Z6fDpBOEtnXmp1dyxkKi5sL01IVSE5Sip0ZGlBMTM/dWF8QHkzUD89Ll87UkIlKEh+MCxrNSJsfTlgLDZ5SjFLTn0hSXprfVZnbW9NYmg4X153RWRra1ldQnw8Wk4kUSRNOEVVYDEjY2UofXIxKT50Ln5wOG4pMWxMS0J1XWVwPjxwfmZVXSlaQ0xlTXgiQVpFTCM8OXFE''@;'; put 'put ''PkE0cTV6PTVVR2FwSDZjZ10mOlNqUGk0d1Q1bnxkLHdrR3dkN3s4VTRKOVJdVWRtKi5fXkk/eF9OSmxPP1BVW05yQGgpa2ohYDZodjc+XlssW314LCkyPFhRJU4mW284YlEhVFYuVzg4LyFUQkUse3NvX1daLyY+e2BNW1IzRCtOPGpfZTF3S2N9XjF2Uz1ML252bCxRbnQ7fF9QdHF7SmE7OkNX''@;'; put 'put ''fjBvQ0hYYylodCNvJGFNeCVaZ0B5cmZUe1lrbXI5b289KGAiPzYjeCl+IjhFfUNaRSwzP2p4I2o1S0BRezo7MT9xVHY8ITB6e319ZyFzMEQsfVQ3fU9rdT9ENDRTOVNLfmBrTXAkXi48ekxjTDQ3U0VPemlGJkc5KEl2UT9HPG5CTjNGUz40YG08IyFNWmFafU1pMDwjaWtyWHZsdjNbdm1lSnMv''@;'; put 'put ''WTQjZWE2IWAhZHpBfUR6a1pdLHFSOWBLY3FDV1Z1QnBOaVg5ZiFWQU5IRlFidDZXOjlbT3pATF5lcy5zNVNXdmkxWTtvKio+XyhsQmFCTXlwPC50MTEkRV9JI20lLDZ3QWExLGlkPU1Nczwsd2lCTiM8QCw7O0o5Jms/REZGXkUkYHtqaiRDSyNBaFQ/ek9Ac1dPLyNFQ0s2ayo6c1k9bGBZUUUz''@;'; put 'put ''ISJTdF1aOnFIN0BqJEZxOGY7QlJoOipqbTQwe089LkJ2OylNVT9BUGczdGk8PGpdVEd9ejphYUR3bkpRbDYvYGhUUjdCbSQ9ViNSTWQ9YFsodW1RKCFCIUF+X3ZwOlk0eihWL3clakBeYXo9Tz9vRGcrRWA+bSUsMXNgSHYkPiF9U1tVLmlQRCg6Y14mWTU4eCJVJFgrWmUoZDIoWmU2WHdGVjN4''@;'; put 'put ''MEEhR3hvPTh7bjRgejdxV19+KkZ8NGkkKD8+KTVxUDd9b3x2fnZEN0M8dmgkOkh1dlIkXiJVQ2orVG81UXB2eFEmdCQzP2w/RGlnUm9ZOTc1eyV+VHo5eXUsXTY5K2pzUHVfVXE/OG9TZmU/UWRwIkJLRmBpRWp4Z3QhTVR7VXUmTiohWXBPUHhNX3ZHZm06VyhWMGhIRktHLExQOEBSW2AyWHBV''@;'; put 'put ''N0tTa2F+YUo0fkFSOTIhTEFlfXc3VSh8R255dHcvfCN9PX5jbXYpMCxjeyRgPihvW0QmUXQkMDNJfmZGJkolOHR1cm9LNykwOGR+Mi4jXlQxR3tbflBUP1QwazlKIylvbmt4Yk0/Tz4veGVVTkRzWyJbXkZEZ3pjTXE3SFJWVCU9NUY7RzhKfStZZVUsNzpgKyNsbGwzW1M6bnswVjlALE8la2t7''@;'; put 'put ''Lyg4QHN9b1J7W2p7Rzh0dE5wM0xnaGVRbSIkVFpbKmV0WiE2RThhZiRJNksoanFtZyxPcTtyQ3BOZWBjX10/d0R6XkkmM3hHKUNlKDl4SD9odStoOmY4IWNIMXVmckVlU098alEjNClxKFNaLFc/RHYvcW9yKH04SH1Sb3cqSSg1Xj5wWlYoT3d1LnskejhoKzZQdj8odG9VaUVHMG81VSVOOGp6''@;'; put 'put ''VFBBJW1fVS55OXJqMHl8fD4pMWlNLnRbXkVkUE9keDZqe1YqVjJkVVouQm0lMy9AXStQe2A4UjhpJlZTbFhbTy99Zl97Q3UuWVt5SWdkdW4sejkkIUFYOlIxKlAjV05BaiRQK0JyPWhXWTN2WSsiYXNGZSlzOH5OeGtRSFBqW3ZCJjhhe3I8RW1TQ3UjSUpvI2RyKUg3OytLYV9WLEVjUEFAd18h''@;'; put 'put ''SUA+PnFkSV0hV2hHKTZxb0MmYDRhcX5XMnN5aDBUazVQWC9icWc6emoodSNKSShOLzNpczNPVmtkTC4vVkBmWzF4IjwmMzRKcStPaGp8YjVRQ2AyWjpKbnlrLENhRypoW3pYbFErWCRmR3JETW5GSHYielV1akA2MHhwJVt+JkIza3l+QVclTnNZT00oemImV3VUfC5FVS9gfHZYR1AvezEjJGpZ''@;'; put 'put ''OD40M2JNfVBYLGpOOU9CTVtxbkp2JXJgbXNecmN0cDd4Y1ozWXhEZDA3KHdnSVFsU19NZ0pmaU9eSk4lSlRLTm1gJHxga1FOVDZsXzgpRiUiTkRKZk99cntaU1E1Z2NdUHVdfFAhcHxxZVAsU1RzbnAwdVpofHkiTG9ZTjFpWE97PE1wd2dzWmI1Ol15YCVCKEwsKmo7OkNzYD4/UzlQRVBoQzN4''@;'; put 'put ''STgoc1YwZEEsSy9pdEEwb2ZMXmNAcFI7R1NlO2dQOiNefTI3PnxfYV94MyhbYVZzUVVPU0dAKjs+X3ovVEpLLipsfUIxUEd1Mm1QVGNwe0ZCI1sjMGBbVVkvKF93IjsqXy51Z3klMT17bWtgWF4jWFRzP2l1akc9T1BqeWdOVyZ3O0JBaU5Uayg2NGA2bGEraktzRVs6Q0FuVmo8PFVsMkxSR1dE''@;'; put 'put ''Y3lsXUZeVFFwJHguM1FebXdbbkpTJT1gVGxBbnAmbWdEdmpIP2pAaSZIPyVlTUhlKVl3emZDK3ldej1PRDhffUFgRXZgYFlQXWVkPGFWPURBUmd7dDo1KWpSME9kWm47YWN4dHU4MHheKmhCRCVMeytraThAQl5vOjBhYVozPU00b1hlb1U0dEMuaG8mWTcmT3EkdGB6WHZfZlFlcVtvTyVXTGRF''@;'; put 'put ''P2Vtek5bVUh5b19TVCtjbFIyPFNmVDghfT5yPmFeSk9vTVhmNjVTIlJPe0hPPj5afl08fUZiPH1YPk9raUc2MV5KW2V6VCxDMXVONnhRZXwmQDopIXAzT2xbLnArMD4uIV50PWAoPGt2W0s4WkU2NWs9TTFqM0lIdG9weyIwa0BffiUsR29sU0kvKlBvNz4rejlBYntMfWojcFBDezI7YT5vS1Vk''@;'; put 'put ''Rl5RaTZOLy41QlM5WFdsTmQ1Y104ZCMlcEojdCM9aSowUjB6MC5SeD1aMG9URj0rVis9NCQzXlZEXnMlVmVEelt+OHxNdnp7d2NoU1dTYnQiZFg/fUhXLk9KIzNsTU9HSmNGRDRLVntGfGxraHFtPDpRNlYuXzpLKDh2RT85Z3FIRE87fDpmYjI4fSx4TS5sVUhXbWZTIklgcl5pNWNDV2tYKC5j''@;'; put 'put ''a1ROJSE0Ym9IQjUsO35uME0sZks8LkI0cUpja3g+PmcvPmw5Q0JuMmlOMS9sSUFTekdiJUYpL3NuOllldCImNU49ZFI9dD9mbXZjMk9qVVg+ImdabXZSTjJHZzRuL2pDT2sve3dxMSV+WHNDNit3RFglTlV0IVI5KHYoIiE2cWJ4Pnc1ell2dU55UmtxJHpPSGtROFs+eGZ1fGQ8WnI5OkEwVlIk''@;'; put 'put ''Z1c3WjUqL3x9Zz5KLnx2fGZwXiZgSyh9LkM9XnFaUzBbQjxrLzRkY3dKQTBOTXYrfEokNDUpPHZjK2RJZzUkZiRNMSlacUUhbmYjWGA7TCN0PWpCeVpzVDw8S183JTdLIV8uXkRkTDJhciojd3RfXUtPNy9zS3NJQiZqKmo3MG0/YUtjJDxAOUwvbCk0e0JZQU5HelpWNSNjQ29XSkUwUi4yRSN2''@;'; put 'put ''KyNtcWYmNl14JkBTbFk7VEQxZWQ/Tl02O3t5aD80M21UMV85PUdkeEBqJjgzUERkOUxmaEhZQHhEfl9rSEtMeDR8VHcoKyZxRnl3PWE9UEJRLHEjNmImVV9iKERddTEiX01OJltvYEo0U3o+fmBWS1pmclJAOk49JTBERWg1e0w+ZUYqPi9lazZgU01LP3tGMVMiRltUK1Y6TXpaTkxPRkIjeCZ5''@;'; put 'put ''IStbd0lOckhgOGd8ZzdMUzZoKkVgJVBUV055e2xAZ1pXZ3p4dn46d2ZrWilgOT9eR2tDRyFfdjdveEx4Kz1eVzVJR0hmKTdxMD1uMj4wbDB4WSImJjpJaFcmV2w9Wzg0JXl8OzYvMV4xNXQpa05HQjdTZmNIVEBMe1doK1ZAQ0hUKCFnQ2VjZFdhWTwreWMxLGgiMV9nYkBqZF5acm1QOyQwTH0z''@;'; put 'put ''Y20lJmQ/ZCxATVgyTSZCR2p7azopdXo6VzszcHhBeyw6fTxGPT9sKDcoSFtEWV1VZEVMM0IpKnRkOV1QOFN3NmRGLDEre2UyRmU2IXE+e0JUYkE+Qy5VO2ZAK1chaTs1Xm1kXV9ZbFNrT0s5althNHsoajw/bThvXm51Ukkma1FqYjppMHs8XTw3R3syVS42JToxIjFJLiFOWUVjRz8lcShiUy9i''@;'; put 'put ''SkAjYmVVKD5tPz84KWZycF5MIjovPksyJU9hMzJCS1ozRUMpeWZfeDZpJHJFcEUzcmA9a25jWThRcWZ5SExCQy4xWzwwJGFkZXBubkQmY0lpQmdMb1hGZnh8Nko9di9FNFV0RHdRWW9bcyM5TmR+ZXwvMShAMGVPWmksIjFDOi5FT2clIS53fElWXi5zLmE+Z3ozW3c8d1Bndl4+bF9dJjMxTE1r''@;'; put 'put ''U35UfHJIWnpTdzNCbUZrLHhxRmlfSnR6PCt2XyZKNWRTOyx3bk9hMTp+N0Jibl4vdXZjcGw7MTB7cnE9JlUiXjYzMltwZUBFeS9OTSE+dikrZjBxMTpHNCQzSV1IL2Y2VSpwcytzVypyaz8xbjJ6TF5pdnByc0xielMsajYrS2s0XzVKSTUhc3NVK0p3aXxDclJiYG1DbHtHbzcjVVk6Q2UyWCV5''@;'; put 'put ''R0V8JX5SNyp1bHYwOm9nan0uI0EwNWMxMUElMEMqWG8qTlBaMTo4T2BGWWs/cDRxIzY0fUtEaFchSD9tI1JdYjQ3TTlyPSRrVCkwYHJEQEteI3w8K0txO0AhVGBbQU43ZTtWSWxqQ11nbGE4ZmpBKHhgZWorWTZodGJtbGZOQ1BrVURdcjI3V01kTlFWZSR8MnZaZ2M7MUpFW0VeKU9dNFQ7PzVT''@;'; put 'put ''NUd3Uyt6JGtIPD8/VlpJSSs6d0VVMVI7YntkXkhWM3NFWiErPVJOLmV9SFhUTm9DOD4va2cqJnpuYmhkaEpgQHZseWc7IVslNnRzW3BlQkl2PTRMYSNUKDFYVW5eLGJuOUBLaHtDe1ptKGEwUzMvdlZ3OX4mRjJKWDV6NWQpIUkheFg9eD8rOCJiW3Qrdn17MlYkVD9QMnA5dl8ve2RTLitrWERk''@;'; put 'put ''bWIlTiVudjpSUFN8bHolSXRgMnNYd19VOz5ZJn5lS0VJWCJRLEQmdXYjPXtveHMzeSxQdE1DR1tYYEFAeHcqQFJ0L2lXdmk6eVIzdnwwPF9wTHp7RHh7bHI8cUZRazRNM3FNSmBmTVVgPSFlRmAwI2ZPSi97UFdZQTRZZEB3OF48ME9HUy9QZyxrPil2P3gqJXNaQnlDbCNlUk9OMzE/O3w1cVpC''@;'; put 'put ''ND53N05BcUJpPDt9SjhfSXgkZjxnP09JLixlfD42OXBNMV84dyRqR18uSkgvYWokeVA7bXtBVkRGPz1+JDFuIm0ufVJGLCYsVSNXSmhjWCYiZklIMHVEYWlOd2w2MUlveVJXXiI9Oj5AeE1JSStQY3Rxe0s4TXtOb1A1OjNHUzZYfm5jJUl1Oyt8aG9MKmVDWGhTTkowNlF4XUpYIywuZT1eMWVI''@;'; put 'put ''cjkvQTpHMXxsN1VWYCZLdlJpYCREPkk8SExKOUV1SGNYey5sVk0hISJ1THFqMl5zR348Tio4PlhoelZ8NUQ9VEdFbSMmeWtGO0VQSmJoMGgzVyk2bmhdN0A2OjIlRG02JnlDYzcoc3MwJHhzZFluTFg2JU8xblUyc1VwIyUyRlpPPDl5QTNqJDl8Ik40c2FEXkY2aDYuej9QYUBieXd0LypDZ3Ij''@;'; put 'put ''dkApSEl7QERYYGpzJik/b01aZGFiQ09NW2QhfCUmYz9xa2wrOENOSmNYKU14SE93Uz5zcyRUZENLdUZrb1NvYT07TWpjV1tMflkyNykqK05QYnNuOV1HVnghO0IuQmVAWVdVM2Fycj4lc1NHQHF4KSRLWyRHZjdNPng7OWJPYHNjRW02XkBHLmY5bz0hRzkldSY7azpobjg+Xy5RSWQ8Rz9vUmZN''@;'; put 'put ''ZyRPaytTbmVUYV91QStoe19fYTg+fVNCZ30iLlo/Q09nOkxmLkc1VSJFKElJW1F8S3tIaVUzK2o+UG5pT0MvPS5XVSJPfDRZaX5+fHFdPF5sV215b0U1ZkVkZ2lPNXEkM0lpb0htKiZbfGtsRj1CIz0wYlZaeWRCVXguTXJEPERsPWJAU25UK2BWO3IrbHI0SjpyWVMsWkxdU0pVPyZEbEM4cj15''@;'; put 'put ''UntCWTVVXW03YmAuSz9EaGVIbEpdT0lNO0EyNnUqVUVWK2cidW5sZ2R6LC9lTiw4KnJxVWFWZSk3cWlmeF9UfjJJJX1iKHksfjhpV240eHw1fihTKjk7YjdzODhBd0p5SHxhQiQ1dCt9fUxrM1hqO0s8RUF7ZyRYZHYsTVJVSlVwempbPyomNFN2ZHNqSmxMMzo7RDwhbHdnaGpvNj9uS2RiMl0/''@;'; put 'put ''NWZhPkNgZWBYfXxdb0VQPlZTVEtqIUAvKzBaVzEyTUI3aD55UyIvWih1TWFPNSF0V2FNPENlazExTCptYEJ7clJSVlt7aVlle3hoRURnWCg4NkF6Xyl8JHNZWUFhKipLcElQTzQsZmF7Ly9naHx+YkU8UVooXV1OOSVDVGgjd3U1W0FKKG86ayJ1UlFxU11fIzxUQ2A7TUBAPGNZbk5SRUUvM0xO''@;'; put 'put ''bUN4WnJ0fUkrTCQwUj5WdXl4eys4QzUyLzoidFguSVg2V0R6cz4rSTxNPlplVVV0MV4uR2tKRFhrQmBQSVB+KShKUltPQDNyd1JdJE9CT0A3JHlqKm5Takh8TlQ6WVhAUWFfWUckW0J9azpzUWY9ODpeRGkrQnMieS5zcltZT0QoX2pYV2RGL2VuW2c/LiQ9aGAlR3dHUDIzMEs/ezpaYHFRcGQ3''@;'; put 'put ''bSlhTToyZEhER1heIkRRdH49ZSteI3RZJF1hVD1nPk5HMkc/aV5aSCkoSWdHZVh8TmpHWHoyKnpeWUM3P2lTTmxEPGh+WXxLYH5eK2NFbSwoazRNVlttTmQ1LC86SiZTWWkrSmF2YXlvV3ZBT2pseilXOUtrYl0wcCFaZ35bZmh3SmdMPHhqVltdU1IjX3JAaTErTHRgYz8hTWVvcDckZngvOyt1''@;'; put 'put ''RzVrJVtkWl0ydWd7MC9VSkBNXzAjMiVeWFQvQG1OO0lEflt2ez5kS0JKI0ppazNGfig3SGhwfnZGZ0w+ZTEicls8YU88U28hMy9bJmxVWi5qJm4rd1pVeUQvM180ZCkvUnJTIUB2K1h6OyRQOGE8cjUxX1E7aG87NkZ9cXF7alp3VVcjbz9WQXA8Tn5ld2AsfHp5fE9rZ2J+O3lDWEpePzl1W3g2''@;'; put 'put ''bCpDVjdmWWNXa0U4UzdJUXJRTmwie0gkSipFZj14b349M1shUEQxUn5JeHhzZWw1O2spOV5oTm8kanMjLEkwQ0k2Y3MofjhkZnArbipeYXhFWF0mXjNzOFtCS2t9WSVEd11FY340YVI2PyYqQDd7MSY6OT5gcUJ+TmZySXxdbUoiai49OzAvLDB+ZHBfeClFRUF6NlJVZX5LO0QzQUR4SH1rZnZi''@;'; put 'put ''RkhVIiFkamF4cnRvUVlLPm02S1BzJktCKEYoL35jPl9xdn50XVZLcTpjKChedkw/Q2h4UitKa1FjZ0VPSn1sYjdUY2tOSzhVcWVMOzxhSkAuJkZMJUQ/WSV5dUNoR0NDWSJOZWwqM2VKUHQrU11oOiwhUkt5YDdyMlpCJXpzbWE8dy9EKDJ4Nyp+aF9bcCtXeHNPZiRRe2Q/R118Nl8hY3UmRl0s''@;'; put 'put ''dnNwS29zVzpDTV1+bUB0XzU7fChoZDwpIXJCW3M6N0NwUm8zUk1kQmNyNVhlaDNvVklXZ3dGbnNPNChlRntdPTZna1slMTojOFNoNj5WPTt6PzhGfWIlNFI6fTMjWzV1fE11UCZ8RERiOj5WazhSbUZqbkpDUUMoP05kVS5vdWgkOGYpInMyO2NjaF1TT2xPYXQxOzpQXiJLYEsoU1ZMMEFCM0h8''@;'; put 'put ''OHpJSkk4I346Iz52I2NSeUFqek4zI0p0KzhVYEdGfjAyOmZAYkBweHdqeTpJcz1lKyUhUmFbdGssIU5JVDZJN2lFPFJtYmopNDtedFNQMClybXVXWF8yNnM3aVs8OTR6L3w0Vn1tfmU5d0RdWzQmbz9iZltDKU5jaio0c1JyYWhMVTBjOV5WaF07cHY+YyxoUWZFY343I10+Z0ImeW9vZm5td3s5''@;'; put 'put ''R1NzYENoKVBKZHR+JGorWFtoKm5gLDkuIW40aUcjbUVtaXZtQ0A+NGt4SHs/S0RWInshSnA1ZTVOYV9OZkNlUmhLMjtLcGR4Kz5iLE8/VD5SL3AlP2tvY2pEW09YY1QhZzhIYVNxT1lSSWt8di5yRnxYUz4/cEU2M2tpXTcyQ2BnSCxfUG9tWEAuXzEpO1ZKV3UyMztlN31LcXpOSCVITHk0WVQ7''@;'; put 'put ''Q0MoMyomeFNNTDUkQDZnWTlneVlnSWdya2V2fmpUcnIpemBAb349SlkrJT58PWpyazMoYGJnKD1kSnpyQWkjU3U1WGF4aCRkKis7PjtJY3o3e0d+KDpoPD1OY0UjS1Ffeyh6VTZkd05EKmM2WndUZm9FZko2L0V7UWpxZ0k3cSxCMXhMdWYmcjJFWWV5b1dhdHtMQz55X15fdEZTdDVZaFVpNGFA''@;'; put 'put ''JFU9VFJdKj0qTDxhdn1ibmdYVTxvP2NQNT9CZDRzbEtocDlMK0NaU1l5WjMrM3Q6Yzd5JV92RGVtLjBBbVJONjVCTiZ2MX5TQ1IyMkNVcUNCZ2IoVSh5X0YscTM1dCJQZUVGTCZqTWkjUCVlL2JnajthK1cqe1U5SmhLXTg5bDphLD5IQiokZjVJfCNBa35ubk4se1phdHJwa2xUQm9le3h8K04h''@;'; put 'put ''XShQaHVPZjpCKihjcncrdm9BNH59LGtEZSN0RkgjYUdtJjtNbkUxJlcvTkhEfGJZR3prRWpYOnd4TFh8bV8hWjNvJnklW3RbbmIyPVUwYVNGIVJ3XyE9SnVbNEZCLnJDLCRRSHV8W3A3ci9LPSNXQDR7PSRCcGN6ZV0lZzElVDQxemRMVEJOaH1gWFAqP0l2bXJFQmN5X00pdyovfUliW0UhOUo3''@;'; put 'put ''TyJVPF96SlVZZXVQcXU4Vj4kSytvP0guaFFNLikpSFVhWD1yXW1ucWojRm43ZU9bNjlsSCEyRWxmYVZ0Rz1UcVhALzpHI3pAckl0ZipCfXY9VCopVFJxZ1l0IzpdVDwkMThgdVdZPEBaVWQ3aUxwKWlELEh0QzdafHFMYV5EY2YzZkxsdXdQPVY5KWB6X3Q/UlhnbiZsMjg2XzcpYkRBYlErKmVK''@;'; put 'put ''S3krYDlRRj0lKWxZR159NHR4K2lNNkduKHBmOzsudmtdOGZBRjMvYXhWQSx8fnBjJnVVPSUiISU4JT1jJEtiWjolU1RITkllXy8mVnhSdV1INVZyd3ldRlNPTGt4W1VMKi8yLndVaF9uVEJXbEszPHJqUjxye1M0WVdEb2p1Li5uZ1h9IWIvQzE3OUhrT1tAPSZTRGVdZ0Z6IXNGI35lSTc+aTNw''@;'; put 'put ''dWEiZWEsO3o0UFhQZGdIY3Z+c2tXJDF1JGIhNUsxS3RwNTx0d31VNn1qfCNKTGp2ejo+Mms7W1NrRXYuT14oU0khb3FGTWorSC93ZS43XXduPEBpcFo1IU5vTG58TklUUmM4ZnozdDhrSWBwalR4OCEmSTJUN0B2ez99Wm13OHkxdmU/OjxMV2c0bHIxQnYpYSIyMGZEVipsJVZ8RDtPcC9CaXdO''@;'; put 'put ''ISFpRzQjWXJmKChpaGMkIj9YanQxZj5QUjVCeCVqa1IwZ2hDKSRnanheMUAqbntDU2hXaD8+c2tPKnhJT0skUWglIjRScH56SH18KTpXLzNfWGNaNi5OOH5xak9bQ2xrO3g3LDVJUGtaY3plc0pxXnNoXVlQPmVNUFY9fXwqcW1XeEg1aj8vZFVXWE1FbWNZQj46I35ANFhncm83JlpYSklfZ2kz''@;'; put 'put ''PmZVO19QVDQ7eTliL3MkaUwxWHd4OllON3M2P29XV2lAUHsvTjApY1U9UG15dDBlVz59KXtkS2FHYkNNPGs2bjkyP3g+OlR1XnxSJVFBbyNTNkRoRTYhSWFJWWR0dS5FU05ibUtVVWhSYytwMllbNjJ4Xlt2eHtXakAyZF5AYFFgSTxDQ1drb1FvV15RWFo3YngoQnxyVG4kREZNLFRwcD96KjZC''@;'; put 'put ''ZFs0aF0ud3JObVAyVHRVJUhNKUpzUXxtX0I1Sls/eGlbViIqTXVYRGsmdXtKYFF5akokM2thOSQvdzV6Om0qXmhgUmQyeSp6JX45Q3tHPGptLG9mWDlvWklnczdAOF4+aENvRG53QCFhQ10oeEYlJDtDY3FKQyxOTkgpX3R3OEZ0dU9lfnZpITQ1L3B0WXFXOC58NzdIMX0ha19rVSlyYCJldFIp''@;'; put 'put ''Ny89JmFGWDlXRGQpelspXUZeV1siOnBVbkc4bnA8eTRpbkImZjU7M1AoR3BpR2ZmYD5lRCVdKyFHKiMuNkw7MSpMbnY7KlVoOGRHTC9NXjA4XWAjemFXZylhPUE0NFBLclpMJi8pKSxeezl6bSVONTxuKXJsaE5IYlNjYjJRTmZvNGZjRU9NUTptQyEqNWRyeF1rZzU+TnwhKmNob3g5N2QmY3Q0''@;'; put 'put ''I0F+U2chQElLJDFpNzNpMzk3I2hzSllgREs/KEFrPkpCZl5oYVZBUV1qWnhZPCYiMzA1ekxmMy5+dCRjWmhLbVJTaHJPTGFyensuOVAkeD5fOiskaUNmVWUkRT5TMitMYFY+djsjQj5oU01+TH1JLkN5SEtTQzBsIzooZX17aHRHcjQiUXc7QSJ3fWxqOnoyUlh1Z01TQz9aUF0wL3gsNUthS2VQ''@;'; put 'put ''a2dILCRyMiYoam5YNyQiPEBfWnhkbGBmNCJmNnAwOkkuZjY/JX5WcUNBeFR5QyE/bzBIWFIxZF05dm1wVUk3WlR7OlYrRTJYfTxFKnMqRlpmfkRxNHwlcSYzR3hPPHhYd3pbXWpuVmdRN0ZBN29HcCUmeC5wNzx4QEw3XTJicUIjb2MyZiM0X1YlPClsQG9DYFo0fDE/akhqLntAdEBffjRVbXY5''@;'; put 'put ''flQ1XlgjfD1fVD54KHdCN3BYaHkmOWhfQztvRH1aa0pGeVlyTzJ+KC5jbnZEUm9LfCRiZDxYIy4kQXhuQDZzJDhGN05IeCk8W0BbTD0/ViZjP3J3bzBFOGZAfn1afSNqZVg1NH1gQnBOJVo6bV5TX01eL21TLylkKStlVylNKF9NZylYcithXnRdeDFfNHZ4Pm06cnsoUUBYeXY6NUJdQ1V9PTxv''@;'; put 'put ''RzpJZiwsNTBkQ0ZDMGdMO3o6THYyVyNxZG09UG0pN3M3NTE8YSJyKDQ0aCh5dDFMTW5xNy9LcClSJC50fSZyd1VYZCo7Ukw3dl4yYz9MYVd2VS8xUF5lJnkyVkhjbm93aGVoSHReZXs2dkN6cXY5eGAvfV1KR1k8SGUiR0NoTzcuNiRaSCJGOF5YLE9ZUkZpJCpKPUR2XSRIeHskYl1DQiJYcmdl''@;'; put 'put ''Z1B4WX0kR18xIWNBKTdIbVVbRm1kXU5FT1UqSkMhY1JmRmtfZSZOL0NbWyw9YTRTdHM3VFtPcDsmfGZSRHFbQTFOMzVRRUY8TFdzVyRRQEc4R2NaN10iTHY9MU1ufldPQn5URS5JVUREKyFZa0NFTTdyUTA8OF1DQW52cm1hW0U2ZDldUiRUW3NRcyJNU0k+TXVDVzY6SHJ9OW5YKThVaUtsRixD''@;'; put 'put ''WS5xWyE8MWgqLnR9aXpDQVkrMzJBXnRXciYsPD8odEJETDZWLmJOZl9jOEUoWTlWPDYpL3F5Q0dlbzZOLmF7P00kdFpYUGRNI1oseDE6NHVrL1pdXUA2TmdZSlNASSkqJWREZENIRUA5Uj1BZTB1IWl+NypdZy4jZWklVHdsNjRjN1JVe1diS0pASHRRTShATHcsTkh6ZTkwI2U7NTd1SmV1Vz8s''@;'; put 'put ''flMsN0glI3g8NjI5QFYxek1JKHhHcCFAT11pUTo/Rl9adFIhdko9LkJaVkAkW3VBcHViSVVsWUlUWSY7aSNSfEBjbmw6VDQrVC80ayg2NUwjL2NmLzZSNU1FPn42RGo9N3JJMHxGT0JqaHZ6JSRPRkNuZF55Ump1Xy45eUlFNjQpaixlRVhmQyV3WT87VHBaLjJwW2EvdWBaWF4rJDRVUUxhRTNp''@;'; put 'put ''Lm53RCFlXypNdXIzSCZhaWgodyNTUj9eKWd5eyImRFE7Z3BreEhdbSFlP202JiFNd3R7ZC8mJTViV1MxYXxAYixbL3t5T01FOnZdc1lyNUM+IiNqVWJWKFcxajZyanZJKUosUFNdXz0uMHdJaGguakJvNCpaSUUoTzU0OzJGWCV5I2cxRlJBJnk8eDA8R1FJbVpkYzR0KCpgenFOVHQzYTo5WHlk''@;'; put 'put ''Wn1EVzpmW0t7MyxyPXp5TlYrN0ZPeX4mP2AmV2lGcHJ8LiFFeXNgPV8vS1M8RSRhR1VQSShNLzFwdF1jMGN7WTtBdl1iOGk2c35pRGFKY0AkfntoX2I0bDtxMSNpQns9QDEySSVUMUdxSnZ0NFI8US89dUEmITliT0VWdzcwLj95a1AvfVFRVTBXYV8wXixPOTZaPnQuV3pLZl5FfkpselQpWyUv''@;'; put 'put ''eDwzZyhSJFV8PVo6Knl2L1NuVVdmUmYvQzMiP1EhYWJjIihHflpScmYuODF4ZVBLPl4lQmFWRlBNJCFwd0kjcDdhaio7bVVydnpIbyk9YCE8bnl6W3Ejb1ZFQD9EQy8zYDhjY3Q4NHVtOF80MnpRUDEwV2UvSmxuOTpuXnpwRTNaUU10N01sIztYJCk4LHw9Ukx1aVFTZEVZL1lfSkRIZipWTDY2''@;'; put 'put ''bUh9bUwiI2wmbzViKEx3ci5Ze1RibDJ8N2l4WTgpc3t5Y3gsM2EkR24kQDlWRis6fihZdEVuS1M6TSx2alV9Zj9jWUBdeilhJT90VyNadz5XfmNDPTk/dj4/T3c0I3hwOWJ4InRvc15pSWM7SjBxPV0iNlNqOmpELGE0K3A7fn1sRGVTfDByO1YqNEFSZ0UifU98cj48ZEY2K2QvVl14QCY+Njc0''@;'; put 'put ''VEZgJldUVn5WM08mREFoIUN0TWBqWWlodkMlIUJGPm5UYD1vbSxPY0d4ZkQicERXfFhpakZgbGM6S28vKiRqREg6c0huRiRGIXt9cFNQSTF8KmI0IyMreFlSaEMxPCVDak5kXj1IWiFNeSpbfWV3ckNvUixYZDc6ZTwkcWB+alF9ejhzJl1wbWh3YG8sI2RuXlNCKS5pendIOjN0Zl5FMkY5Sn5f''@;'; put 'put ''Kl1oRm14U0RYRzdkemJUQU5vJSYqeDYwZiFLMWkwYVgmSmEkc1hHZUM4YTEoOm5CMS9zITNmb2Y4Wz9vTyNrdHhzSyNKYWk2LylpSWF1PXFlfk49UnZeI1M5V0BCNG5qJXlQLi98Nn5BVT8pekJgPDRqVDUuNlRHQl17el4zeTxabWApKix4aGAwJDoyPj50VD9MdGdtLE9oKUx+fFN5S1hSYnFU''@;'; put 'put ''ejh9NDM9IyRYeXQra1Q0cStXaUI+TnJQaFs6aG1wPHk+bHpPQlozaSYuemY1ckN4YUlWZF06WSE3IVIqS301cnlsPlptXXZsMUBudHNOVF5iUltVZ342Nk18KkMqV0RtfFkwIUh+MmghSFQ+WmFvcUdUdit9W2E4aGpJS3M/bHddfW1TNjBzQilvQVl4Vyw3TGduOFUsZyptKmlifFJNYzVLcEgx''@;'; put 'put ''empUOCYuSFIhLHp4L1Iyez5WP2BNcXZla1UsWSp+ZFc5RDQ7VklDLGQxfH42OWpKUHB9bUA2LzRIXjYzUk40OjJ6RnVlbWFDd0AjJjo4U1slYEpkVVM9UEI2Tjc3X3FHeVhCYClkZ05Bb0VKZkYjPHlsPTZORVpWL3VDczF2MD9bUiFteFU1aX0meXozUFY+THZ0MjY7NitTRGByQzxEZUk2NjV1''@;'; put 'put ''PGhLd1RqSlA/bS9FbHdTMGk5JXZjb3xHSEdASHdscVc4UmUsI1ZROlFdekUqS3xbUW0rRipERTJOL2puPTQ1fGU2PHwmJDc9dVZfY3x4by9pKCptSURbOVZ2WXJXVmN+ZD4mcFFfRChYcDFyKnBrSnYocH40aU1AfkozK189cnFuSy8+Km10X2p5PiZGTzZxWntPWG1WVEc0N0dMTVpVWkhwMXh7''@;'; put 'put ''LkpDWnxscUw/KjEre2g3O0xkPktvWy4ifTNnRU0hWUVEMUxERislUERnYkZoLGZGMlcsXTlOLjAuRHlaVzAmLzV8TndUbV1CJE06d1ZdTm19T3MqV1c3JDdkeyYyXn52LFVNK3w0TCpkZFckfk85MiZhTDxLQyVobnU3dix7OCVRRzlmKzhWWW9jLz95Y1smOEFqc04yUGkhUEhRaGloMFhYZHFJ''@;'; put 'put ''VllMe3c2JC5RQmdPMG1zVGwzM0B3SDtwNno4R31OflBgIyZJSVQ/WEA9Q0V3YSFiSGYhLiYzfSk8P1J7OlomNUNBOksyc1p4LzBrYntWP2BWUHZ5PlJXeTd2LGlhQkg4bDJ1PnlJcF17Jnl1Ml9dZ3FoRHVeMS98cixTc1hia1UpJEBIJnF7UUhBN2xma2EheFdWWSssWHU1O2YhbXkqXyhsQllg''@;'; put 'put ''bTBQVzEjdVtCRFAsQHJUKiF3JD9ia3c/TkpgPkg9MClsVTBrSE8kYypdb1tidldSNj1RbjM3Zy9KYllwcE5QVHJ3eEBudn04SVN0VHRiKl5MQFh7fUpAN2h5K2ErcnM1SUZDZkgrLyFUWkxoWW1HJk4yK2YlTU0yMmA1TzMuSjdLbVk7bHpTN3BISDszWHxlRzljVTIrKFRDdntdITo7X10pTkpA''@;'; put 'put ''anhRcEVDNTBsWjpFTzg2eVBsWjwiWVoqe3NkcjhaRVE7VFdpZHIoRjhqK1V9fFJvPkxeeTtTLywuW2BMW2Y6P3VoXyE2QzxecUw0RjMiZHdaRi5idFFgbW8vXmtKW0EqQyo+Mzh1YHklb2Asc2tJdyF5Vnl2Q3lkfih0NUV+TigzKCJAbElZWXFNMG9ybmlobzt7YSgpPFosVCUoNyNUcExQZTF4''@;'; put 'put ''UUR4T1ApIntoKUsrPDVXaEx5Oy5HQH1VLFNvWWZxTyJQX0VJWGcjcXJCKnIyfGJgRi9WRDdATFEhVnokIWxtdHhkRjJOMk9QbiN1RyxGdWZHYGhvOzxGNUgvLmZmbCxgRExOVHI3cXVpMkw/LmQsejdIVSVVdmhkNi93UDZnO255WnhwW25ZUTZ7WSUiKyp2WDpdST1rUHY0bi9FaD4pSno6a3ow''@;'; put 'put ''e0R4ZTBrRzB1V3IqJjZuTFJoYUZbbDxxKjhCIlZ3e1FjPFViL04/cm9QYStkNzM8Q0BvZkdFdlsyKGh+KyEvRGRbMFEjej1JJmw5Qk10ckwwLGYkQWlRKiJfekpxODFbPTRKVUJuNyZUNjAjUURmRTJESngzKHBQe2x+flNIQX0wZEo7OlNeb31LNFhsNSZiVn1vQHY0c05ENHk2eCwiJEx2IiFt''@;'; put 'put ''X1dLWGRsRFRINm8jb1VyaHombktpa1h3ZFBtaEsjfj5Xb2dwUV5bJihbZkgzT2BEZjx+OTQiS04pNjIvVmJDVio/UWk6d1Vhazg/Ump0SlR+MUpuUXRKTSkuczI5I0Mvd3ByNmdLfDRJOn0kcGp3YzN1WSFbVl8xPG08JlFpK2B1NXNtY0pMbnwkOF14Vi80OiRbcWYpQyhKK3dXOms4Ml5dZDco''@;'; put 'put ''RSNCbCIqPU5hLyJvJU98ezUzY1QhTXw3MGE4MHN2clRELHJoeE4+ZUZGd2lBbWYrMEQ3UD1lNEhBPEAhV0dEaDQ2VlVjJFc4Ym9iQm1bJExpYnNqciZYUyo9ayR3OV9SRlAifigwTHdmdytrMHwkNT52S34wcW0rQzpLcyw2Rll9eDQjZDBkWj1IcGBWdGpRb0xSZD8yeT5jellae0lBeFZqb100''@;'; put 'put ''Z3docio1bHxee3xwZmB8LEo6TjdjPUZ2ZFg3IW4mbWYwbDRKJEx7OHNyPFlrPjwlZ3lHaX45eFtiJnZvTmZ3XUpNSnhiJUNYKEBISi5ydzIrOCU8IyU9Z3xdP0tzdj4pakgsY1VbSEMxSTR0YXVsV3lMJkdVTnZGW0VhaF9bYjZ7aypRNTNCS2ImdDZFJlc5JW5zVCUuNT4hVEgwaz99Jk9kSXxJ''@;'; put 'put ''cF5uT0U3Vn5yYl8ofTEvcT1PPWBLYDlePXN7VFJkUU5kNjx5QEQhPnB3fTV5MCpCUTZ3WCJGPW1pVit9TH1WRFs9flpJWmc8ZzszbSI/QChxcVEjW3U2Q1tEanIzc2pHQHUvQWtpUitKe0JEI1ZNJC9LTn0mMWZAeWFUJWF4KGF2Ujwje2c3ZEZiXnlpI3tlezddN2dLVndweCE5QTNbI2d8TS4y''@;'; put 'put ''cnhfa2wiRlldOHxhflJ4dGZiPXZaY2RXRkVBeVhgOn0hYjRKLjdNRldlKGB8P2xJMTs3bkhOamskfGY0WHMmenwvWDFWZVU0czp2UkkuZCF1UTV+YFZkeH4uJjgsWFh3XSp0Q0BeMVhnK0JWOmdKOzciaz5HJXYiQndxcCZ8eEFqNEQ5Qjl8L0I/bDxLTTUlMChhdFVTJXYoL2A3byNzKCV8Q21Q''@;'; put 'put ''ci9HdFZAWnxhfTo3OG0oUSl8IWRYOEY4cjhtI2NqNkMjeTY7cDowUz5hJkNKSzhYMFIkIVdPNl5zbk9IdlskY0VgaDhhK3xrTD5wKjl2dDZMJE5fSkgxWXxKaylnLmNQeEBqLlVkK1F0ZU07IlZ9PHhkWU0kRGRUQShANnJ6Nm5nPU1uR1NhbSgxeV14ZG9XV0Z9bFgjZiM8SDtjVTVUKl1gYXxa''@;'; put 'put ''MUh7cVZWcVlkMjRrZkZxZXhwUl8rWlBhTWpMM19+blA1SCsscl8rUDlQRkczOGlCc0hqRVQvV099fixUcWhueD1dWXMrT3hOSyJfM2U8KXVoRHc4KSR5Om5pU2Y2YSFVTHFCZldPaF1qKDFfNH1CQ1ooIzN6PGM3LiUiMFQ1ezFvfH1lUjUvXkdMSiJnMDB8Ui9QZFBoO3JJVF51VjcrVnMoXSN6''@;'; put 'put ''OD1GI3l4LjFiKyx3RjQwJjw0Zi5XJkJ8S1IqZDJAeEp2X2siV340PipTVlJWcGBXXlB8UTJicExPelt8PCoyOmZDQEVDZVNJZCNLa1twdF17T0ZnM3IxX1A4eTpmJDhHWEhyaUguWXFAP0dWZ1g7eXR4bzVBQylZSGchSXlVbnJuWFBBYkVaVVJkez5ka2ZHOiR5OXFdbDY2NlgiR21iR0lMc1Jl''@;'; put 'put ''ZjJIZUBJeWwifHx6TVtWe1FKcXpMc0o1ejxbW1ZTNTw6XXk1fndaX1ckIUdHU3JuMkZnTShOOiZrTUlFcU5DXV1dL3BzM3FRZixbNH4uWHo3YikjRFc9fS9UPHooQ3xKOz9AQiUqMy9sZFtWZ0RtbzwpYz01JiR7fHslcko1MlN8ZlMxWztCPzFNRFNPKjA3JHtFXl1xR31aTWhTdHwuWyhxKWxn''@;'; put 'put ''ZzspZkJsJnQucmZESSkuRFQsT0c2clA3Un0mN0FGN1FVbzQrYDdrN085diRaUzlFMWNUWiFTTCklW10xUGpjRUpUd2pXOi9GfEMjKmFBLCliXi4rbVk5OU9RKiM9SndfTFBWKUw9P1tCQ09LekBaMVYxI3B1X2ZzIyNPPj1vbSM2LHZTVHlzMkZYdiMyd3pDUm94UzspSUFmfS9oUzJLRG45Kmpo''@;'; put 'put ''YHI5Z0h9c291LDhydn07flZ6PjNsIm0za2NLUV1kMjAreCo2N0QrLjN8UW9UajFmX11tYmltPVswNHE5N1B6bWhaIyFzPSlhRVJ2YWgyQU9JInsqaWBXWzNIbH5OWV99QHdFQHNUa2JhfiRVSl4wOjNYLzNIL2FaIW82YVcrIiQ6PTAxR1R+dSROKXFjQyVbeSs3dXQuUTA8KUFoazlnPz9BMkl6''@;'; put 'put ''UksjMXJaSEBsNGskWFt5VGJDb2paYytkbiZhLEQqVko8Z0I3Wkc5RUpWN3RyKzJjfS40PHV7V1kvcTt7ZH0xfGRvSl46ciNKNE1XJVFwaENTPEp2Sj9yNTojfENkVjZwNGM9VTEpUXEkcFh0PismK1dHbiRbMzNtYVdTdztAPVNdP3gzT3EyYkxsJmhxMHorZkNgOUs9OX1sc3J6JHd9QVIsYVlL''@;'; put 'put ''UCk3I2RQR28/W202S0FYYiwwfFk3SHxnWERwPFpaS2d6UyQpZ20jYkxzeTFWa2J+anRZNVVpRVhHVX5NJSJsPmpwZFQvfDNTWTlrQEQ5WStEazNrZzkrLnpMPV50Rz5yR1p4VldoUVZxKFc0el09KmhgWzUmdVEucVNXayReZjJNRVc6I3p+W1A1O14xWyhFT1UheExsXUNpQWpPKDk1NFZIXXgv''@;'; put 'put ''XjxWXUl9O3w+TF5wV2N8ZGtEVnFkfihSJl5jU19DPktxMDxHKiIsYWRmKmNiKV9OJjJ2Y35pN1RRM00yOnVCVUc7TkRYPyt4cDtZWzM8NnUreF8oTDdDKVBwWyExK353My9GZnw2RjNHaSxUcklGPmFWN2FObD5ELyJVayQpZWI/WlQmOnBPYCllMys7M2AlRmIoK28pI21zQ3hKImBbSStea2lW''@;'; put 'put ''MSYuKXRDWWJhKyohVS9uP0dLbVE+VyJDS0IzWlclaDRTKk5xRjg/emdsfi86QURWOlpYW1o9LD1KPXpzIXJJWnhdUi5ZPHtdczllUV9nWG5NQDdxJHNETFFmWlJyPzpyfW1SUT8zRWcjTGIjN1lZS2Esa0NYPCw1WkpeU3RtSnU1WEdGQ04lOEVTfGNVSk9PaTRKQDxrdCJKbmgkVDIkSjx8a0Nx''@;'; put 'put ''OWlGWjh7bmJRUFR6ZS5kUzZyMWRzSXkxU3MhIVU9SHJ1aU1sW0hSbHJrbnB2KDRMUWVTV2hNO3wxSGwzYGs4LEJ6VEJ+Zn5aRj1xK2gpLGg8VU1AQ3dwVjVdYXVMIVFdbylqeD5UdVduSk5PNGw1ITtHclZfKWF5K1pUKjZiV1JmPz9aalNDQ3hBKGIlcGw2bit1Mmk7Wz5iTVBtemV5R3N9RV5z''@;'; put 'put ''TWVtNGM7b2plNXd4KWIjbWtVUGRTOnJ4RFY0XlFKND9CPTwjKm1BXXhWfTJYKU4vbz0uS0hwITtWQGklUjI0cz5MaDljLk1NZmRlJnc/NV5wT2YkZ1NdPyN2MXJMdm0oO0BtIS9TXjZONUtwY0ZhYFc/SkdSN2wyMDl4Mk8peHQ8QEY9KmEpSSo8WVRULm0iLG0kLGovLj9BNkI8SSw4cjMpJSsv''@;'; put 'put ''aVJQYFQsOWF4Y01DY05aTGAsLlhiaDRebSkrblF2Il53fTFmYUNJcmIxbGI9MGpgJFUpN18wbDkxNlB9PChgY1Y5b3R6QVB+UVswd1Z7Vjk0NippRiF0bVtvSnAvJTBsX3NlISZ9dk4wQGN8JWI4a1dRWVUldG1GXXB1KXtaOHRpYFI5dGJVNEYiTnchREFrLFFfIVUkN1NEdV9fJmkiKDN0QmRT''@;'; put 'put ''L0FATTNvVEFbTnRscV48VysmfHU4eFR+U0E4UDMmfXxsM307L0psQnlRNTZrIkU/Q1RpXXNqO3NNLDQmbXQxe1tkbWd3Y0lLdE5aPEI4R216RyF4JVtvOWFRJlYhVWdySENATUtSRF90LnRXXnY2ZjtnWW1oV1MlUSV6Z2tHL0pfQV52cHF1LmQrNDJCYVNNYTNKOmo6dG1lR2B4akZUe35aVjxh''@;'; put 'put ''Njo1S11kTz5TTVJWSUxMLn1TODRuJTdAankjNy9SMkRyVS9fWXpDQkUvZFRLSn5CdlRiQ11leTp4by4jQm9Ga1p9PiFKcyt3VnE4bmljRjxWJHNxPWRvKCpfVGtOU2NHQV5TQk8jLnZjekVsQTYmXnBHMnlsSmUodCJYeitfOFpndD5vR0p+Q2ZySVp4XS5YbmoieUcjPVVtZTB3b0RbN1hvJipY''@;'; put 'put ''YSxfZTJQciopOVtuWSEkXXA3WF5yNmUwe3U+KUY4YzQ0XWhhOXx5WyFjTVYmYFY8NXQlWH15cWg5UE18X3ZUT0J+ZjFZdGFOOStwSkZpZntDTWpIOE86SiNvRG5uWjUrZiFLJlQwVHlXZWRjJWR4Ryp4XnVbRUxYRDkpRXQ3MSgqdWgqTFkkTDM6I2NgU0pvZ1I+MjUhZyZpV0tnfjtNX25SUiF+''@;'; put 'put ''NUZQXyRjaCZnfHc5I0didzs8KTl5ZCJISEx4Z1pxfk98ez5Pbmh7TWQmZmdCdTxTZG5PLHAhcTQxWS9XQHxbOUc3ZEZnIlhFRkpmTlNkMCl7JiNXIztIdjEyZzl2JEtuSkt3IyFHZXhUbVRhb1AqRSYobltLMXxAc29DKXV6NjBCSkpzZDkhZmFCajJiJTwhUEV5YSE8QXNWUyMkKyRgdDcjNjws''@;'; put 'put ''VmVIKXYjRnNZTFA4IUJNTFcoViwyNnRtTjNHOiY5aSxBNC4kJDBtMF9jRFB0IVIuOSl7VU1RclAscXE1eSRmUTlrZ2R6IXxHOi9hQVdAfj9yTD4yX15mUHs9T0ByNXdyUzkkNHU1VDpvXUxOeGRtU1Q4JTE1I0ZYJGVUWFJJNi45SVg+ZGIrfDEvJSJfNjV+QHIhejxdJD11T3wrRk83cEpCWk94''@;'; put 'put ''NF1jQ0B3ZFs+XUl4Sj5ydTBeZDI8NEg0WGoiTGteISlpal5YeTx9ejRQdFgxPEFzJG8+IzdWN01wUSJsSU01bGJPQXpPeCNZTFsxKU4qRXovaHlncU47dnw+Ty9KX0txM0UuKiFocm9ZPDVIc2V3K0BRQiE0Y3IwclMsVkYkJlE+aylqNUNxKXEmaz1SI1o2b35mQU1dZT5qXV8oWT89ITVZU1RB''@;'; put 'put ''XTtFT1l8Yk9tcCZ2bjp5d2tQaGEjJCFdLEFwPm9lIkhYNXxGS2FpMW4uVHd+PiMxW0pNJEgxOy9gOyhtN0tiXUJkMXU9JmV9NzN1P21eX2wvO2FLL1llUyhaJW9eNGlxOHIlSyFCSDZ5WndTbmVDMyN4M049bElOXm1RZHc/NzZ8cj1AMWIyJDZhMEBUNDpiSSZCM1FWND0lMTZlLCwyaVQhelJY''@;'; put 'put ''azA7PzlPeFNAKkx4XnBoQzpsSlUkJXo6aTVKZERYSUcrSWJsXXJgWDVHV0N+RHY/IlFeXyR7N01faSlHLyRsNCZEQkZdZktpZ1NdQGlWPHZeQkchM05BXkpTRlVzWWg6ekljUGpKdVh5Yl0jQkJIMVlES2p5TWNuSnY3eCV4c1tJO1dAYThLOU53YkpvMlFoIkp+W3U4eT5oRV5uYlQybm8iMHEu''@;'; put 'put ''fUpycEN4JSMxezZBRU5FYFRwOnkxJlRGVXxUPC8vSWh3YFhEITdMT0J5X2E3eGNDXmV5IStPR1hwaiVmdiJ0ZXs9PCRjN05XNDdTP3luYUVaJCEwYkhfRF54JSk0dTs2UX5BWT88V2VDTiw/Q1NwOitHXyY5QER6K3R4ZjNTXSxETT8uUzVAWCh8JWIwOGMlW0Q+dCNkajBGUE1pakJyMnhJdEA/''@;'; put 'put ''SWVuOHlhJklbOX0qPW5kNDpocT1LVGUjVG5JT3tDW3NpX3JDMSpWfl40QjtQJVVFRzV0T0kpb15oXkBpd112Z30rO0QsT2ZlNVMiTzNlQ3ReYFI3XUNLQCImaHdsLktmJnFNYkNrTmRoeD5XOW0xajcwJFBkZUJ9aFR+N2d9NSRRKCV4SCNabWxadFNlcnwyQHtBdV03KXdZcGt3X2d2NjMkTSUz''@;'; put 'put ''NytTez5wcks5SG0rR0BGdE5GVUpLPD83Xi9RPDZ2JDsqezFVc2ZJMTR0dExSdnBHdklTKDssblQ5MUojTE94ckFITFtPU3E0b154QDZfcnk8a1pRbVlYOjc6aC9YLFJMUl1fW3xALlIlWGUlbn1zKWJ7YnQjK0NJSFZHPnxgQDBjLGY9TWlUMFpDKy98cChxfWNifm1JQDlBeCQqalsoe2NMZHtv''@;'; put 'put ''aHhoZyphQmRTU0FzNiRyW0EhbkRgRjEhcGAvVS9OQEdGPkgrWGhqMTtpIzs+WUtPdCFHQC83ZXVlKi83WX58REs2ZjokUGtTKihsUEdqeUdZUWA6UzI6bzFidnE5M3IlYVhFVV4/WV12RHRxVHlNNCUofjs8W34wISFEOn5mQ2plWShDZk8+QXg8b2JmVCx2ZUtsVy5iPVM4Wlh6cjY/RHB7SzAj''@;'; put 'put ''KmN4LHQvTD5GV1d0U1RXPkU8N3dVUTVMKnljbXQzY2FOW3IxSTRDZUV7ekVNeHo+SjI7U3psbGRyaDBnWHQsUU5Jen40P0Y2WkRkJVF+QlFkPyV5RmFHUGFHL2tUNG5Rb3RhanlFO0EuQ1JKa1MjRXZuLzBIIlRQaDZZc090VVBxK2h8MntlcTJWKFFHYCl9NE0jc1JWRC92SEdfYDkkdDdwU01p''@;'; put 'put ''RXJGUVNuIT9tKX1lZ0pAV080TUZIP34+KXFWRzM0a0NAUi5QKzxRTVNeUiQ6eCxoOEo9PFd1O3lhWmNnXyp9aT98N2Jgejcsbm1QKEk7WURVb11Kayg5WlVEMzdhZio1KEY2ZHExTEMod3pQT0ZtdCN4ZWszbStlSWVZZitQSEwme3omUjBUKyQxMTUzb3wyOWRQbFgjWzJBPztyIW0kKj45PDsr''@;'; put 'put ''cGpfbmtTTjAwMWQpYS85UElLTGQxTiE7SjVJK1tSNyJvfUQiZEJFMC9JUEFtKD9lWnFIYUR1dEl8XnFgc3FWKktVe3dmWD0hTCIualFFJUJ1OXR2QjBwQD9TMCtrOClxVSJ6MnY7ZmYkRHo5XXhrVnlvc253c2U/bjU4RXxZZVIlM1RJV31uK25zZVFjJGciKWxsPXVpT0YqXjZsXzM2UnNHSlFe''@;'; put 'put ''RDhiOmReWDNvbGI7V3ZlYiRFWDVEYXhzdSQ5R3sqPmkwOVV+KVpWMzIqa01YT2tORiEuO3c7P3h5O0YkJFRSQ0ImOyZXLmd+cE5OUmlxYUtsZ3xqfWl0bk9mWV9VaVVHKUtAS08ibzVgOiFgbjt1SVs0PEM7M0o4SWs/ZmFoNGZ7QF8wXSh6WitlTGYpVGQqd15vMXBJZDY6NkV6Wy5IZnpBc0lS''@;'; put 'put ''VnFqeTRyfS94cHVmTnBvX2dCNyVYMUpHKFo9Tm1BYmhecU1QN0JKIntEUDcwXjVdc3MoLlpBeG5MKTI8ckA1TUdyTGFdciViIjksNz96TV9aYy8zWz81UGdjIXM1cTdbWihXTWZXbSp+KkNhZn0ob298fiVLX3MsX1N2ZCpyPH5+JDB8WEUrOShPZF9SbXMiO1BddGhObz9eQ1UhIUpyKnJEMnpv''@;'; put 'put ''VWlEIT5VKHRBOm9zbUNyYEkvVkcoL3YwYT82PU56RVp5dWxsczQkMkI3bSZTcEJYPT5Mdkx6KnpaVF16bDQ2XmJdal85JFZhUSFudFE0aDJ9MlhYOU9OIkc2dmpYcioxSnJlWVNJNXdHS35AbEtrSXw0U1U3PkJLNzpNM2dZNVBNOCxBJGlfUi90NX0sbVVyYUo4Sj9EXmIsI0MkN1MiRiF6JU9i''@;'; put 'put ''TEgmMHwwdFl7V282T0gjPzs1Mm9HMzMpOklrfUVPLCliJStzQCh+X21nZ2JlWVMidDltRncsRH1nelFYZW0mME0mVFgjN1NLcjdhT3AxbV89OSw6LHJDLkUoYSZWVFpbXldLQFQlbDZnXXUkey83MTEzXXBUVXFpTXdvLiN9ZW1zTldIciFeMkx3aVlXZCNdfUReYil3XkNLaURXQmRjOHFvfGBm''@;'; put 'put ''bTtPbj4iZikmUHs0aVY3fkdpK3VWdmcqVmFOK3NgYzZmPmFQJk9wUi9QeyU5PHlLXkU4d35SPnksakYkV3w9RkhrfEl3eH5wKCUzZWhFbVZmfDs2O1MpTWFVN29OZGYwdUooVTZYJkRVdzt2OUwrWDZifFNVMi5FX1h7LEo1VmJ5c20jQDo5PmM5XXEwe3VVbE9iPEJLTUNZdl87WUNmcmZ6c2xt''@;'; put 'put ''RjwwW1FJT3JSPShWMSZhOyN3K3NFKCpGK2NQNEVte1QyJTx1JnNbZEdwb31sTGQrU01xb05nXnIzfGRKSyp6S1B+ITg1In05S0A4UzludyQ3PW52QCsxZDZzPy9uYypCJGRMeS5BSH1xezYzNz83Km5lSC9ASFhvelZ+KytDb3hWYGg+aXI/JiZdPk9LJmU/PSh0YEZWSmtGLyhTWGhud1EwXjxM''@;'; put 'put ''IjVBUjlRYkA+XWx0UWVwdH1YTSZXVFEre0cwT0QjMnN5TWNTNG1ZSipLcUB4Om0wWSw3PkF0OH1NImU/Ri83VFhyfTJ5ZjRfVk9pcV5Ydkw7ejdbZW92VlNZY3FwPFl7SW9LNTQ8VXRAOzNaUF1VU0NBVn0kLCt8XjolVD0qTE1JQkVoW21lMUtWRkZRYiJPc29kYWsmVCs8JUBRQ1kjQk4vRFo6''@;'; put 'put ''PnVNTFl3PjhuSSZHdGVuMztaMS5+RCp3XnBDc0NMXnJ0fSUwUDVDcXRyLEU2Sk9+ZmRgU0U3NDB+aVpvfTxVMk8wUDtzOCEqLEUqOT9NSlNEMDZAYjA8WDwoOlpJQ0QwUzt5SURUfH1KdC5VTiFdVHIvRyZmaCY+UGNaPiNgfjR1dWEjITMkWTA0TzpCKXJFKSM8UlJ4ODZfMV94Xy5ITkk0Y144''@;'; put 'put ''L2VvWWczeElPSlY9QXl9SGNHMEddRTloRSlgUjNHalVaTCxGZDZkcn1SblQpRylHPXomTDJ6Jm0zaHxAZCJsclUpcipWdldvV2ZkV001elV2LzZXK3xvOksjW2QqbCFufV16U0MpNTgzT3skZlQ/KlBmJGFZUU5lIjUmdVcwY2YwLEs0Om5UKDleZmE6a2YlXlNDTHxoL3ZYM0JUUS91TkdzODxm''@;'; put 'put ''dDBlIkJCc35eNldHO1JIZDFLI3dAenM8fEBvVWI+bUNYfj8mfFBjYlYiW30wbGRqeDZbclJgeCkleCRFSUJwZ2VSa1E3Wlt3Lz0+Mk5sa1N7LFBIZ0hiNykkbTZhcDRVL2xTUCleKzZXZD40Wyw2U0ZoL0UjSzcsNlNGJS8zQXsqd2NpNGhWX21WYipiTV8/YH1wJT9+fCZHUlphSF1vaCZoZ21V''@;'; put 'put ''PG96WVdqfnUqZUs5YF96RWNpPHlnUCpIaXAuTmEpJkhKblsoY0s4MT8/anshTyYyJnpFR195YCQzPlNaNE5MTWFPPzpEM21IWjI8bSNOfWozW3h2ODtISGNgND1qYVVwcztBY2VRUWh6fD9CI1tXXTc9Y1E9JkFoMzRObWhDdGhQTF1TImFvdnQiJVoiY29MSUdNNF5jYmVAWT59aUdTaVplQkhY''@;'; put 'put ''Mip4fn1pR0Qpc3VCSE4wKng1fCpNYyksdEJIbHNpQ3NzJndpaTpoRmM9bmJlbC9BZHxPfSJscyZ3Y2YuYkNPc0xfZDlKQmE0MyhEYWApZD1aKShTV2hZOnl6REtZc0ghfG5hRTMmPzlleFtoeWlheCM8UHZ3a3oveCF8MFA7NVpjRmNJLlFUeUBvdFU2V1ZGY0YlUVQ1KlsiSzZUT0ZjOVo3eTw8''@;'; put 'put ''WHopQkBHJHxnTF5uVFdjIzFkQkgyV1hgJVdbIkgiLGAhaz0wcCZ9ZXlANDl6SDV8a1BlWWxzPndOJTEzRi90IltULGBrU3QwcCZIaGx4cCZFYTtgL2UhKzRCJS9tcyxgJn1Ad0tpb0w6KzQ+PEcsMi5sSmB5TCpOIUluLyVLTEtYNDN8MFA2QC9BYG9BWkJIZkVnLH0sLGVhfk9xbSt2T1VZKlp2''@;'; put 'put ''ZC9UZS9QZkhHIUBKNmJIOXF3V2JgRWRyREJOVy9xLFJhPU1ffGxBamRaalVIaWBRWjtCZnw/T2ZqQiFLNCM/Y1JyKTJiQFR0Um9JK29xZ09KZUAvNnMwfVdXV2cqbzRJNF90K3lDKzJiXU5FUUYvfShhZStvdkJWRWpVa3pWbCZBJlplfCNPMHUmd2owcW9+Vko0T01TN3VHJjRWZDRAckVqKypN''@;'; put 'put ''V1g6NG9WaFRfdU1CPl9wZT14T2IyV0lCaHMvRDhxJHV4ZFEvOmZuT24pOn0zSGB8dThENzRuOVB+QllsMChFODNPRDdRZk5QbXU/TVlsNDNpeWQ/VDheSClaUldAQkFpOlZGL1VpdVZhdTs4VGRrQFQ4TTBPYjJXWXRZP1Q4aXlbX0plXSswTmM0b1JSV1t1cHEkdWFTMkg2ZkowajMxSjZmI3lW''@;'; put 'put ''bCZBTi5RV2sqVj5+RkJIMD9xOnBCPl06aEo0UW88YjxGVCwkfCpNZWBqRDJbYnpYWS9MS3piZV93QSU0PkVHKk46azQ+bmxddzV8MU1CQEhZMzhJNH1BPGI8RipSM25QV3BZfWhYT1VNUGh0I3Y6YnpCYFFaKUAxRzJ1QVdSM3d2NShTOnBzNUttTWA0SWNVP1QyVmx1ZSpSfD5nczVEOC9UKEd0''@;'; put 'put ''ZzBSaiVbYkMyX0VkbHh+fVdBSXpjQW9EO19ZSkl6WGZLNF8iS2h7Tns5LlFLNUFjUHMifXdMOXwzc2goUlhoPzF4KnQ7fUBlZEROIWZdKUR7UGxYRCRQL3Rvd29kQiVvSUtUR04vQUFLQyVjX2RHezF0K1U9KlJhOClqLiMsQ3E3fmExIntEWCRfWGwhUVVYc01bVWVRVHN4ckt5MWVzc3xDW2Ui''@;'; put 'put ''VnA7PStbZjAqSXk9S30/K2YsTltvbztvfDs2fD1EfkJqd2VOeUZ9UV0rRUh7JF4iLmxlaVBlMldANzJ1elcveHlvO0R6dmN2NkVMNFosVVslJUsxaXx2LGFrP3Aya19ITWo3Ol46cTpqSjNpW2RbYGZGM09fVzk3aUQ7OV4rM0RtZHJoMik8VnpAa2ltUF1IVVgyUyghITgyRy5oPHZ7RU1zL1E5''@;'; put 'put ''YSNlQDViTUslb01vOUVJeCoxT0lOe3JTQDU7cyZaUHhqQHtrMSZpMlIjQF4wKk9gT3haJWE2eTwyaldJTEdqNHJURndCW31rUVlwZk5ZY1phTSNIWlp5MGE3I0JhfkEvNVlHaztge2BYVWYzKyNubzJEJVVVPmdbMCYsOVU3Qyt5InF9NC5OQF88UlBKOyV2Z242NTNbOTIpeFRFe1o9MUg9RzRE''@;'; put 'put ''Y3YuX3wyfXtDeWlYPlQlIm0pL3p+YGlxJllVQVhJKGl9VDtgSyN8VT0iUy9JMEI/eHJTcitZcFYwMnYzPGdGRiZUZVFWMjZoVXouUDw2Q3poWz10NjY1K0FxY2pBYylzRkxRR0wkXTlWJEM5PDNoQlV+eTZFN0MwKTZFN0NFQHpTMktkNX0pSSVGVEhCO0pLPnJzQl9KSEFeM2ZzIUxvXjtVI1JC''@;'; put 'put ''KU15ciVoYkZRKDtTfV0pN1RMSXRbWjJ7cWR7TS8lZSE+fGlyc1pvXk9wVkRUbl1CYm5hTE81KVhYKCVfVi5JVjVSKUMmMl5Fbn5Zbis+R0chfmtvKTtoRk4oPyFOVjFQcTohdzdLaS9VN2tBRzVxdWlxX1QuUyVbLjlEaXdnTUckNDBZWXVsc0R1eHtldD51K2JjM00lNGdkWG1kZChpUUtdPG5u''@;'; put 'put ''Qzs2dVthdG5AOlVzI3A6Un4le1MoV3RDez49TH4we0VfI0NZXzFFUkw5MCZ9PXJVUng8az5NfFtrSmZjPEkoJXN8Zy5MajRHVCVnXlUmYHsmW0hoVXJUXj84XzRoL0xufmQzUHM6LmQsX048cTFWUmFeM1QuXzR7dy9vZn0mT0Q+MXh0TXRocChQeWBRJkAhN1B2fCw+PFRZejhzOWt1ZS94RSxa''@;'; put 'put ''cW99VTRVKXppKEVwODQlN0kmIT0mOjhgPkw5RjM9OmNBSDk+RElGTmQzamxudSUhVF0qZEVWaHNYRiIyaTJXYlkqK3JoK1pmTD89RWlMbj9ZTj9nNjgkQ2l8S2p4WTBUIUN5dlhTXT8rfiMmOXNGcyk2WjVrbUF+YzdROmd1KHtiSGZyUytwdjhUbnZbRWNOSmcoZmhRKjpnfGpHcWNkXShVeHN3''@;'; put 'put ''cSJhRllDViU2PSNeSE8mJVIvVmA/YUZGUUVfQis0TUwseFMmaSt1cTg1aUxHNj5OJUN1Nl9oT081Z2RVVUlYRyh0U2dkcWFeP01STmM2eU8rKiklQX5DKUVQVCVoZypoaS5sOnwkP0RAdj1IRD1paHhZYWxJanZhXm94PXkmUTwwQixBfSguZWA9ZnMwMUc6L0lbIi9rNlNlYUosa2Q9Ql4zYl9R''@;'; put 'put ''YEVKTHpva1VePHg5WEJQa3B8RmNiIUVxfGE7fCYyWFl+UF8jWVRVRUQ+Ll1qJVo1MCY9TyVKRE9PL30vbmxmQWwrPEcwMFN8fkU5LG1wOVt0SWxvcmNLYjRXLFFHcVJgcXN3P3BWcUJWZ0ROaDBbTS8/biZ7S2JYam4xdCtwRjluVG0mRUZeUDVhW1Q7SmY5Oyx3I1tAajpmIS47WmVJS0BXPFhI''@;'; put 'put ''b3VjMHd5cWNwQGApTnJCWEd8WGg5c3NWKkZSLnRUOzxUR2AyeXd1aV9edWI2XXwzMEwrQmZ1IUw9aDQhbnJCO0x6UHhdbUp9NHpENUJARDtiJE9wJnxVUz9IPyRmMkUxYTBZMFVkLnwrai4sZWxAVDZ5L0tdVT4kP0k2UT5IeSwzeTtgcWRVRjFKZntfN0pveEFGOzs5cG9JWjt6cyVkdz1gQjgk''@;'; put 'put ''IT9JNyxvSXYvRi9MY0ArVyJAcDJVaHwxWT0+STl+el5yfFckNH1UQms/TXIlN3hBOnRDUjomc2o3UmNzLCJCcDxYd3w/NjwpdWAhPT8ubTkicVpudj15KldRWzR3VkNNb1dqTTM+MklqLGQrazRUblkiOmh2JF1AfWw0YEtoM10mb2xJeT8oImQvaWQ2ckBsKlsrdDxgQmNsNXxTVTBfT0t0SUQ+''@;'; put 'put ''dXdnb0ZLZil9cXIsTyQiYUZROVhYVWBnenB1N3FKWVUucEV5dmRVPGhMP3kuKFBBNXcifkUxayE8K0pZOSVVTHQ4UGZHVTI0PFZWN1U2fCJVQFJSM2wlOVQlNT9XbVE6MXd3KGtCdF8wUUZfSGJ1JDRAdEgqTng+QD1LLEV6YURSODttM2xbR00qZGQsXUdZZjFGditAfEhxbGI7TDBzcVssZTRb''@;'; put 'put ''dWI0RXd0eVt1YjV4LExxLnJzfCp3Kz5MK2FNLyohSUlfdyxoTUV3L3x9S0MuIjs7STBFLGZgTDQ/bm1nL1hdfDxIY2A6NHx9YFpzNGs9U1dIbzRPT0dIL0MzJXg4XzRWaGYkOkF3YS9qR0B1S2k/YT1vKEBWVyw/dUJWMGQwXklSWUBJMytRMHZ1fkBnezNYR0VJI3ssYWp8UjtJMiskWWpzbiNX''@;'; put 'put ''TXRjIlFmM1JFTmtlZmV9XXtxJFBfYzR9RSg6dmpZOiFPL289LFtGZUNRSUMzRFV9TEZ4YmYyTTs/a3MiQlZoNWh+OjdTfEw7dFN1cE4uUD9rdm9nYDkjdXxdKltdNmM7aTpheGA5S1gzdWI3aGlrc0RgfCtmWy5RcjdgZ1U+TkgsUjpHQE1yaCVGVnxzUk13dDpAKzIrTzl7RyNibyxxKHhjMm9n''@;'; put 'put ''dmpkW2hINHJZcF4yejguODZYcCgmb2AmVU5jRlopRixUdTgmTmgsaDF9PHB9YW1XTVROeXd2d1ImXzRmQGlRPmoiJGAocFdbP3dPKy89RlchWyhAYH1pfXUrYH11dG52I29yUyQqMlsxYTUsVVkyX3FCISUuZ3dAVT9fcnl5eVdyPSYwWjFnOiJOb0MvMzw4LipscT9geEh0RWRWIzl8WDxwRCUx''@;'; put 'put ''R0coZmE9VktmdT5SPGhHLHVuV15NZFFiU0Y8ZzBCaHFyISt+I09bI2Y/WEhufnlRWDJsYzgoNlVbNnVIezZeNXNvPl58VlRMN0dIfEFSd097RFVZTCVaUF5hVm50aW9STz05TTpyeHlYIX4jeH5WQFcqc2IqUSImdDxndDRSTyVoc1pdUCQjNTpTP3k6OW0uMHg0TE1BWDpbQ2VSJGwlNlpxSGEl''@;'; put 'put ''fVtrOXpEVilVPiZ0aEJPI1BRN1AuLkBhfVokJUdpVl03Z2FhUF4wVX4wQVd+OHhsM2NMLDxyfkdvSTZaUEk8RE1qS1lxWFEjSkJlRD8iWG0lNHh+S0wrNHdCdkdBTzcqXTQ2Q3hJNXQ/PSQ2QVlrW350IUYzVDYjOltRZUx5QWZgWyUudyFYcl9OPzNlPnk+KHsjTmNDPl1rWD89OVtoUF1gRzs/''@;'; put 'put ''TmJDdGg6LDYlR2BDTDtsOExFVntQeFt9PUhIPWpdTDdjfntlQjlmPkdjYComUn1IWmJxUFpPUnNTWyg3XWk0W3hqKG1nQldwPHFgbnM/V1k1QGxnekM6d0UxdCw6KSNOcXQ1IiZjSzd8Z2IjejJVRlFRLERbOH0vRygqdXJvfHV8eilAO08wOV44LlImOWdsWj0mRWhhOzUmRSxBS21JJDEhW3c1''@;'; put 'put ''QStPRW4pNCo5fi9gP3MrcHNRc0ZIZSpNdX50NCJ8TD1TVVR6RU9kc3pIVi96djU9bltrb2tNP20zNlpISk0zWz9xPk5wVyRFUS9DUjBbNTJ0Pkk3UlUpNnkvInlSSnovbFsyT11sQEFCT29LeStLeyVXcWhHT2ZzaUQjbTFIUXdsUCguW3NCS2osQD0iQSNHW25nYz1PazwvNmYsYEBPWClhVnts''@;'; put 'put ''NUs3T3wwK0lvYTM5TElnfFElQGY5WXU6RnEhYGdwP3FMM3ZEZGdKeFhDIy5WMjtWOzIsRldrM3VnUW55JnY4UVtfPWh5YFMvRj1geFIpcyJDXXFFQ3xCfXUsaDopdyJodiklKls/V2E5I3kvPlZ5MW90WnsyPWAhQ2pEUTlxZCIzMTdHRXtZJC5iTSpxPmdZckFwOz9bUHwvK2A/MFkxWmtPaDZl''@;'; put 'put ''KE86OVI1UXspdyRgamt4WzptblF3aEE7JiMuJSxmSDNIa1MlcUNwQyk5NHZMXSpnXmwlNzdVSjI5XzMzfVV+YzVUYzY/UERAcCZGZ3VtZzZtO3F4PHMpS1V8SmUlczU2dG08SW5aL3xzVWBAfUB+PWBZUD9NQCJONCwqJEF1XlV2d29dKkhgL1FiPWtNfHBLIkJBV318PyU0UT9AN1ZVJVcyPFk+''@;'; put 'put ''a04xZ1UxLCFieSplUiorNVlZUW9+dDklO1UhQE4rdVZoQGR6R1RjUTFoJTZvUTFaRDElWTdpOExNXm0sQXcvIzhMc1o3bkJnSCNGdUMsRTlgbyhxZlQzfD84bmA5VmlqWW5nbG9JUjN9dVtZcChHKUdbZjZlZT1XO3srR0AhdnBpMSFsO2wlRn1DUzZWeHI0JmxMJWFQXUclb3xdI3U/QWNSZXg1''@;'; put 'put ''NDYvNjtzWUMkPTQ5aUIrODh+UF0zbmZ2a31ESHNdflZJI1RrVV13amlKYyplYHcsNDpoNjpgUlVGZnVjMFtMK2AzZmxGKCkmL281JGY9WWBBc0BHQVY9RStgc1J2OV5dLCZuJGo2WjhyW00+dyM8bC5KOFVkLnZEcX00W0YsbWRgb1srLHlCMGo7QWdqLFhjKHNYK1M5RHBsJWVOQ09Bc1E6aldm''@;'; put 'put ''RmElQUZ8SSM0fUtJbGQpTEU3UV5Adjo7Xj5jT117MH09OkBlOEZGQlVKM34hcSRlOXxOJTJ9KT9lSy8zZklQTnJYczBeOmcpZlshRmdDK2clYEpwOShqMUtAZWglL0ojRGFYW2B0akxTekg6KSldOypGSyFnemtwTWA0aTtbPEdrSzlrXSE4Q3hiVkpOJGxwNDVjO2x2e3lnfDYlMjxaIkQvbyxL''@;'; put 'put ''bi5aandLRiF0R3goS0QjS25wWUBWSXppXkVZWkJ5OkdUMXMoOCRoJkVAXjttQis6K3cqTG8heEhMMiJ8VFp+PyE0NW5eejUkVnU9LkZYdjYvSS9ROFpqbDRic0lMZllyZVshNER+VUVZWjI7ZyIyKyVxTDxFcCxtRixsPiJJKHZvc2tESVBdNEBOa2lrfGozOl5maCt1OV4hbmoydkIpXXZ7QjNQ''@;'; put 'put ''SV5tSVUmKzddIzE5JUh4Y2AhPl1lMnkxN1lwbTo5JSFzJX5nISQmQ2FuaXZIZU4wOGNYWTRnOnZaJkZCK3llQjhnNX0/ZiQoQEVZRHJvXn5vbiQqakwkMEV8STpKbSQ3eio1fnErU3YrZTtMIVRrI08vLjNFVFA0ckgxL21JS1A/a3kqW1pNO0YxWWtPZG5OOzF5OjI+UmRzWSVmWzQ/K2A+PDtb''@;'; put 'put ''TCU4S0BXektbR1tASTt+W2wxRzRlRCpgc00qdl9WI3h5MF5vX3BwKSokQWdlb3ApJU1PeHw8fDswZFB4W1BkaDA2SGFsP1ptWDlUMUMyWmpbcD16dWd6RzgkNE1nRnUpZSNpS0g7UXhQMyNDXnZsMVs2TmN5KnZdcyNhaF1HdTlmW1R7RGZYMVlHaGAuckxyfFhiOENmKmU8eFpaOUJATlMkdUIw''@;'; put 'put ''czUlcTV4WzlnMFF9ZVdZc3dNcC4zODhNczVIOHArUSVVOlRUUiYwPVVVKXpWfkwzRitbS2wvIkIwfUBDYmlTRHd4KkxZSnhSZTlpXWVOJFRDJHBKaGxWSSV4R2BuOCVNISUoS241Ukc0VXhITj8/RWVEdjN8LDI2cyROaHR5Uk5XPGV5KmE6SSg4dnslSj1tVyxoOW1NaHFvSndtOTk9VE4lJndw''@;'; put 'put ''LzlSO19GJDI8djwoeHAvKmFkUyo9VEpSNSQmWFMrVlJ9RCZeezFsQmtfS0tZQng5Kylrd2wxJVBRWlswPj9vPmVTVEt7R2JrYlV7bVI4Q2JwaSNALGdmTns/bz5CNTlIa19YPkdwUiNyKWw2JXZ0VTRIQntiOixnVCttQmszfDhidGxyVmA3Lj1Lc3NoYmlHSS9qPn1FajMhTmJrOWNpc3RDel9M''@;'; put 'put ''JThLKlpTKHFYdHw5b2ZjeWc4Wyk5KiUkZjopdWxHSlJVSiUma0Z6dmgydVV4Ml98STpiVVMmJH5EQF0hezY0KVpTKGpGfjtjPHFsYDlDO1thPTl5MVl9eCoqWSl5PlNWfm5kKXwwVGQmKG9ReiU2UF5WK2tSMzVAUnFafkJobTJXYlsyIT45Pzx+WGwyRCphPXBbfSZhfXFeITRicC5+ZD0iWF9R''@;'; put 'put ''V25SX1BZW1YzZyhuMm8vN1UhRV9UPmVQQmM7JDVyU2slQyphfGNfMHd9PkV4RVB6PnkyZzV6V1pdMFBNb0AoXiEjN1FIYyhWVSRgS3dmR0x8QC5XVlhBYkBWYGVhbl5vRC9lW2JwNltGNDlBcFEjZ0gjZFo8Wz5ea2FeL0VHO2EifTR2Y15zOys6WzJGMkl2Vj1abXhnQkttWU9CeVt7bUVqNDAq''@;'; put 'put ''YGRMaDxrcFFWTVEzYyZuXjprZk44ZDRzaShVaVlqaGQka1NecU5DZmBWNSpqQzY2bCVnL1ciZkVvSig8PSoxSkh2bjFUV3s+JTdBJVoxWGFAbWY8NlNzejYhVEJPU2tVWDsuLjNLImE9aXQseTlqcjEkUjExYXsqMU8rYiptLj4pVzNZPjxdSTRKNkRjdFpeUCtje2RaaFF3OSMrdXRnZ317Ni5y''@;'; put 'put ''T0JMVyxvUlt0eHE8WV1lYCJvMFUjXSp3VEJ5LjpJR0JmMm8uQVdXMTZDNz55NFMhfUFkJHY6eW9vdjVfNStCM1U/YG1NNyhRMmZhOT05e3JwMzQrdjpmKCU9U3lXJkZRaUxOcXlzMCFzQ0BlQW44PFl0NUJEXUV9fkhnPWRaJVMwYzdibDQyMmU0enpyVTUyIzo7bSlwMnFtOmgzRldfI3wmZmk9''@;'; put 'put ''KyJwI0MyPjVXZHFnOVA3ZHtffWc5KC5maSsuO1NvVmxVal5sUiRnNjhRW1QpaWljIztIYXF8KURoJWdARk1fe0h1LkZFdFhHMUlRdiMod09Ca1N3W3h6XWgpK1BlNFYxVENvI05XX200U3BiYiMlK2RjWXkmWG8hVFhrcWFlVDR2M1lnNiFGSHlnPklzYEREXk4kPmN5Y2s4NnN1e3EiRTRrbG9t''@;'; put 'put ''e09FKHZ0fnZFWUpPe0FQOUx7SE1nTS5XZF9TXW1bWzJGbFJATz1XW19ZP19bNnQ2OTJJcGQ9cF1wZTpIcm5FQFhffFdacyFVR31pe0t7ZT5TK2crKnJZeWFUL2B1bzlMJGl0UVZQKHN3RSsmanM/SF9mWlU7PmVsbG8wXm4zYHlncyxLSllSd1ZnRjJvU3AmOGBSdCsuaT1NckBvUyhLfC96LEQk''@;'; put 'put ''Li56VSN+MytiJDN0UVs2YiJVW2hsXyh4cjhnTjB2OVErVlddfEcvPz0rXmBLUzg6WUJpenBBPV51Rlt8PCtONn5LPVVuazsiUHp8Ozx2PlNZeEs6NHl0M1hdIjRONCM/KiZXMTA6en1DSDUlTS50Q200Y3EpeGp7OS80W1dhNHsoKComeSRQd3piIVNRPXhBKXd1TlIzen44bWFKdkksR2ZhPiU9''@;'; put 'put ''ZGhnSWtZPTA/dlhKS3QxQiI5XnZHQl1ZIU1JU2dASnQ9Qm4yQWEwL3teOGcsNls0RSwwWyQjYjgoaTh0LlNwJmVRUF1zbHg2TmF8UDIkJktOJV9wVVthQCE8Xjh9Vj8qQ3hiNGsrTFM0b2lTZSMyclNoKkd3PnBqZWdgWDo0KVgpSWNZZWVjWX5kSzYxP0RIW2w1YkVse0MyOHEyRmRCTkc4SU82''@;'; put 'put ''WGNrMHc0Li5Jalh7ZEB1SDVMTzZYYlh5dy5PI2lbY0s2MjhuRG8lVTZWdiRAQSEyNnRHNFtPI1kwYmRGUyZUaEJYOSsmeTk0WjZlc3JBWVU+dyFGXzs3P19DJjVeMVZmMzt1I31gQj94JmpULkxzL2VVSFt9NiRbfT18ZDR3bF53NF8mSW5KL1I+U2Q3MDtnYDJQdjokUE9tc3xDL2tAe1NnUzs7''@;'; put 'put ''N1tAJnRQdHs5bnZTWkoqWDxrYFpfa0BYL01vJFMwTyhURTRbMzVVbFgiXkIkZiU9dWU/KlNrbVZSY3U+Ry9NMGVyeldKOGNYJjRscEtKUDB7TytPViNONUI5OCRfMWg0aE9lRiV3QnBKXipTfWdNRTc7UlBgJGMwOmgkVGdIInJ8ZX00RTBnfHk0ays0QWA/MyhOdGshK2kzcH1YMXBqOFZqP0hm''@;'; put 'put ''SG9iUyJSPjosM2ZqUjolNCEqQz92VyErUENSP3pGeHd0TVhkTn1NbClmKXM/UT8objRfc3N9XSVSeCorKHlPJVJKZF5mO1glUiljSmQ7WHxQc3AiMEtjeCNZX35sLF0+cSRbJCVlUUYhQkNGZkcjVW1rMGJYOXVMYjs+d0JpQF5VNkJgWnVmR0FNamh4OyQhSElnfnJxZ0RfO2d+cn0ySU9yaGN4''@;'; put 'put ''OjNiQGxYK1FCak56Rjwvei9dQ087L2tQUyZjZ1tnR28jKTZAO25eIm1vRXZXRzo5bkA4diF0IlM3M3l2QGBLbndyKHxEK09dXXV4JSFTTXwvSmpUc3A5blozaS9gIjdOcioqd0xeMmslUHNwP0w1XldsVChffD1QUkhkUmZnR15YV3lEaUw6XytlbnM1QCRWR0NAMj17P3ZoeXUsSl5HXUYpRzVg''@;'; put 'put ''WmI3ZSI/Qy8pTHMySCVnP29YL1ZuaE9CP35IPHlmdFs0JCpsdihOITJGPixDejtaYHg+KUY5ZSpuNHMzZlc+QTpbIiFVSGZkRzgjX1duY0hIPylyOC5dRl10dHxCNVtkPn1pIkJdYE5KZk1qL0N4Z2ZBK25ZXltFNSE/OTRMa2tVMjpwPUE9N0dmWDV4cXZzJU8xNFBzVC5VWC8rZEdMflYrYz5t''@;'; put 'put ''NFB0ezFZP1MsT1JrVWdVdHNGVytKd0MiWiY1Ym1wLCgkXzg6I0J8aWRrVDZNWDpgSUQ3KSZ2YWZ6R35LeVcxQiVFQDtXcDpgcWQ/cVFgVmxLbzpDUTlJWFhjPz1XV0xofVBuVDxoUk99RElrZnZnUjtvbWtpRUtEbGt5d2tQU3o/Z2xYWz5fUXRjX0V+QmM8PldhdX45aEAkfGJAQ3RnTWA+Sz5T''@;'; put 'put ''Z2FWWHpwUlRTUkNpaGZjZlhnRG1OOTFsPyVmS1M2WVZ0RiJdS2lDcmlhTj8sXkh3RS9abG5jTSNESlghVzk8Mjs6b3tIbSRKbHtAeSsvRUVWWGM/PVRMeVJraWJCSmFzU3Y6QXt6THtZaHg1MmtNO2whUDElPFclLmJKaUR8Zmp3UWM1PGJrWzR6YU9eLlZNVCZyTns4YFk6aEFLXXFlTmlkX1Q+''@;'; put 'put ''e0QyTypNeDAxfHhUWmdfTythWiVOWHQxbUFOUU5tcExNSEJMZUI5cWJRY1s4Yl98KVlOYGx7SyQrfDZqL2UmI0oycjhdNG0lelVfMVRqQyNfOFloPyFwLz96bCVrSWdRcTQ+WU0uSkt7TUw5PlN0UWQlO2o5eiZIM1l8QEJNJC81NCxALFhtIUpYeSx1aGRGcUBTJT8sfCwsUFNBblZiOHdmODwx''@;'; put 'put ''T2p3PDYxZlQsZWwqb1MlRS4ocjxgWjIwbmVpLz9BMjMrb2pCMlN6TWt1b1l2QlNZW2smandMeUIuWHZzU0MuQWtpTUMuQWtsKi4oaiY5X31xbjRAfSN4KU46VCNxWC9hNX5yKC4zPiFvei9vXnU6PXdJb2gwWmAva3A+d2M/XjxxazRoPi9yW2VFKjNbYltpc1RneSQmbXRVYVs/bS5Zb048cGQ+''@;'; put 'put ''OXowfTZbY0JoYD1bVW5wPDhKYUN4emtHUT8mPVhaM1o/NSohJDxabXluP14kNlV2I2d2bUZhTCptamJIXXxNSFN1Ll1HekdhbVklK0tSeFc8Y3E0fmt+W3xrd0A8Y3JObT5dWTltWDssV1t5eHRebmYvSmxabD5VZyVCZnI7KC57L21eYkkmXXRiM2hxR1M3RCt5ZU05L3pZUWFnZ1Bobk5bTDtZ''@;'; put 'put ''JlFsV1ZNUSplMSkxNzNlZjIhRkpYQWB9aC8xO11acmNLS09XQGpgeVBCMCxLNFFxWj5tKmVIMVlfbUdzVHt7MEolPVNVOTRKQSZ9bC85fWlvcy83cF9fMmdwdiEqfCpnV10lVH1PKjhMImNCaEo4UFUxUC9tUn0iRnFAUlViPCVFXkw1cXouVyklI35HVzdedlJ1bHJwWE0+JkB4PiZpbWlaZ1tI''@;'; put 'put ''XURjfT4iPF0vSGFnRWVBOHNYRDpubV80YUhvfiRAZmEmIzksYUlpK0dWQCwyLjtDXyM/R3lvbkdXL0dGYUBueCYxN1t6MS5sRVo8M0dFTlZMUTl7UiNXbixZN05kPH5Ld11iZFQ0ajgoM2FibClfXnNuPz8vOHxjJTcvUEo0YWYhViQ8Yi5zRD9OfDcmVSNdR15vZFViQC4oZjA9VFlbOnA3Vmgl''@;'; put 'put ''LHIpRjEmSHpdQmoyTkUzLjFQMDIzZDxqaHwsfV4iO0plTFlvWFgjV3dIVnhjUHgqMVd7UyRKVyUwTnJ3OUUpc0guMmVyfWsqV05MQGwrIXJNXztQRW4sUWNZcG4wOjwsK2tTJE9DXUA8cithSS9kO1gsKHVHPHhiZSswb1k9cz9qJV5NJl0yS09zR0Upaik8IjhCUkhaSHVJOU5DTyhMYUhaSHIv''@;'; put 'put ''cj47WHpPXU96T1hQXzRubHVVRCtIOkU6TG9FYX1lY3xlZTskVkpjPHEoY2dbU0dxVVpDKkdeKzJbRTY5fHxXMytUeSx6ZCtfVzN2b2VEJW9eW3F5ZmAxP3dIJWlEbD17e3UsVl4vM0ltYl9OKG8qV1RGe2xkUSQ5e2g8RGJlaz5yVDRTVl8hMEM3dWxvVjZNTG86QDJOd01Ua0dKRmdJQztJMVFR''@;'; put 'put ''WXojbDYkei5qcFFsdFFESE5rNFtsazROcSouL286cE1pNEN+PF0vSlhQP2pBN0NWPWdhPH0lMiNUYm5bT1YpLEN8V3h+SkxOWHF9SklrN1E9cTR5aCFNVXBGczo8eVs1aSFDc3BJYEwxMzRTWFtiMVd8JWtRIio7LjdBayhRTSIqaz0/SkJnTXtrWlhdZFplMWdCMTc2PzMjZ0t6X1J0USYwTjRW''@;'; put 'put ''TmwjfShLPl05U2pMUWVAcWszUi8yLzUhMl9DLHR8L1llMTlXJXFaezlqciZdSXE9bCRRVWk4QCZyU2lHZHpZXXhZPVRmMlM7RDheQFN3K2ltOiFzdStNWFNdcUxCd1hmPXc2YEg7Z0RkfX4/fGtBR1M1R2V+aDdCbWQ3L353RjVfdHBFensjRkZaOFMmMEswS0JoOFhwN0FDLn5hXnx3VSF1ZDwm''@;'; put 'put ''RWtHYjk8QHZIbU1rSStocThGNFk8OGJOJXN5PmNCRG9aREchTHkwbD5gXTU4TmBdR1RoYkd0aEtOT2pEKSRbPG9TO3wvcmlKSC82PUUhYFBJR0MyTDh1M3E6NmZgbkYyUGFGP0t0dXtZU3V4e3k4akZLe0leXjR5NyoqbyVwXi5vZFh1cXwjfVlyL3B1c0Y8V1ZqeU4/diJiXlhYRGJaWT0mPXhm''@;'; put 'put ''JkBUSy5USz8raFUwKG5mTl5yNkMuNCthckhIQl5XejFbV2VhOVc+P0VuVFJyfm1Zc3F0JUlSOituVW53MEY7Xl99cy5acTlKSXk+JSVYI2dLU315OixLdTJUQlJ2LFRROXdrKTVUKD5YQThUai91djNvQGsiWypCQ2AvKjppNGB+TWg5UDRbWll4KjdwOkc3TlYxeDNxXVEveF8oMVAoeTIkdjRv''@;'; put 'put ''SihyaWJkOU8iZiVNUHlFTExeM21wNzpPV2FZbE4mVyFlNVczaG53JkIhRkMuYXwiJU5lN0Y6ezokQlYxMm11VyNMNEkqY3xASDxXQmlFME15PnF2ajpuSl9aTkM/ZmFJKT58e01vX2Y+TTd6d0cxaiZhaW56OH4wVVdOe3t3SHtlInVJUm5oIkNgQn0oP3ZBVF1AOjZhYWo3JU4zSWteJTBUUSpy''@;'; put 'put ''SUo+SGojdHRGRiZkYilobzRFOk9yKWpgISZLfDx7SUxJYEl8bComOz9dKENPSyQuTTJqK2ZqdT1aeDt2Ry5mOVVqOTBRNiFeIy9yJkc5XSRuMTUrWl9YJHdCXXE+dml5QmJDODMxOTN6OFUoUDlaeyJ8MCZZUGQyJWBAeWFvPUU2XkpOZVVaYzM0fiY9aXUrYEpOY2g5eUc+eHshKmkzRiY4QnxU''@;'; put 'put ''aFBdRCZmfnk6MGFoIyJZTmsqaUkkfj1SW0FTTWRHMEQ0N1hFWWlIOWdkJGdgQF40c0QsZ3E2W3s0cTRkK3lASXdVITIhQzdzLG0lc11obW5oNzdvcHw6ZGJnOWdmeFI1OjlQOV5IUndWYC5bQGRKMUYyMjZaclQ+MUIuP3FRS2Q5cSRxa2w9VytHaVZmZDRlfjVFRikkcCZ9WVdsJVY+NVdgcGdF''@;'; put 'put ''Ql9ycEpZU3dlXTguZSUxcnwufmdVX05RT0QkX1BuLj1JN3FyVF8rVmprcj9qQ3xKMn1tV0tdITVbcFkleH1XQGlBTF9rdGgzX0IzcC5rbGk4VyN1Kj5KWUhHaFBMaFRNNF9VSmVlRXF4fGI0IWZjMklLVj0yfSIsJD9MT34iZ1FGP2JGVUZjaSorM0lpNCJUXVY4MyZNQU9McEs8b3w+SyNYei95''@;'; put 'put ''VnMwOEZjNFRneC82LyJ7ck9rNlN4XWwyLmo4NF1iIWBZXVFZY3xUcWYmPz5TLzYpQF4wS1swKzNDeCYyLHtUb2YlUUZ5I0NjWzBCfUxzJkFIb31nRHQlJjtUZ0spSC9VYTFfK2VoeFFGfHRXPmppeXNfPV9fInRNM25CfiVMKDVWKDtPM0FwZjRNbWcjZ2JYM3BnTCxBU19tQGlOUj09Ql9ecCZ2''@;'; put 'put ''elIrfCIxNj0ySWJbT0tYd3p3aXdZXSgmSihtY1BPJEFqUjxkRF5xVHxDYG1OL0R1a0suSlVedTtkb0F7OFhBYz55ZUw1ZT1rXnBZJVNmd0B1b0Yyfm1mNHEpYSZRQyVVPzBBUERMeUp+blZJJktGMG0xdzRiKHxYTDpfI0BDYkZYKSVNIXtJQVRgPUspIlhxX0dKcFhnaStNempmZ1VaYzI7XixB''@;'; put 'put ''azF6b10rSig5bHQ6c0xjXnV7Z3l1O1VpTn13e3JYSHdHPDduLF0sOnB0XlVPPTM5XTE1Kz5BXSVwa1ddcCtRIlAwXyMmdmUzZ0FEXTt1Qkg3SnQkMFQodjpHTixJb3hFRWpgancuNlJCamEhemR5Sk1RSVIxTGRsNFdYdHUvRnx4b2MiRXdqNWppWXlhamFBa1YoanMiJlk4RmNwbnxZRzRofDI0''@;'; put 'put ''SUtja1V6YnhnOl4sSURYfSwmbCtzd2diIkxiIUpRVGBDJXVRJGxEWHdqeDI2YiNJIVl8QCFROzYveHZpN1J9U2c7Qno6RkVhOSVLW1R5OlpaVHlnMzVWLzV3PlJFMyhqN0xfdmQ9OUUjK1klI3hPY1JsWTssMVckbHhaQ2EpP1VReTswazU4elIkIjEwYlpdUU5PPEtnZC8zTXIsTU8zLythPEI0''@;'; put 'put ''JUlMKW0hKiRJZk0jWSFLPWloeG1SZDspcl8sUXpWPClvUjM1SSVpeDtWVTMpXjttNkxTZyJAb2M5XV9sQC8kUz50QEZYRilWVnxMUXU7QGlJamtDYFBqITZ1QGRCfW5zcSF3PitdPyppKW0kMm9LOXg8KkImSWh5ejxkXTd9VWVrZWE+YUVEQFp6bXVWOW94NChqIiZCLFB4OWF8Okpbb25TUGtY''@;'; put 'put ''LGlOKExXRTtWVT5eSjwlNmY5b10xLiFGJDoje3F7aVtCQn5BS0Z+My5KbXA/PW1wTXJ2dFk4RSF+VDFvMz5EaCNPfFJgbiRseV1vOjJiPmpQY2AmT1smfHlKPm1jMXVIMjlPbmJpWl8xUU5YYnxRS1ZYXUNQbyJLeUx4dFUzYG5eS1NHe25qJnRoNzhbbiUudU0qNkBiZUw0JV9qZE4yYkdSTHFk''@;'; put 'put ''QjV8Z3FwND5aKUZDP1hlWmRZZDYjazA2UTs6OS45SWN4Z0pfejZneFJjYUIwd3ZSJGVEOnhAKU8xMys0THh4Imo3UmR6Ny5SLChtYTlFLHMyIThgSFJYcTh3Z0cqc2dBU2ZRPDFJe2ZlNyteIUY0dT50eVZyWjN0IUpxNy9yb3JZRmJgMiNoYmQ8Nj03ZDcydmFQTlFSeV1baGRWaTNrKjpPUW0m''@;'; put 'put ''K3EhR3pqanFpa0poU3BQWDouOHtZPWxtK3ZVRlA7NltxVSE9RCtORTVeYDROS2QxZHkpOzA0WDhycGchcjVqPyE9eEAxYlNkLzdmbGBkbThKRGZuOn02W2lVI3dsYD8uJW98LlEzcXJXSUIwXltTIV5QVGNSfXQxbXVYOnRafURyJTFEYjM3b2BffFtqNkY6O3hPOnQld0NsZjo1STF1RG8ifW9l''@;'; put 'put ''dmNAMXpQKDxnW2dBPlJmZFdPfXV2dCUqJCxaJkFucFVhLnBROzAvK2J4NFB9NVtxfXljTkplPXVoR0gvKkw5ZkZKOG0ybmxSb3c+U1FuMWVbYEZdZm00InNHeEk6ZENIVV0vNjBiNTpeQXw3bWUoLlglfHQzN29JVXdVM2EkPkRSJm5vOyxNVGtPKXtdQmJlcFlRNlAwOkFyQ00uUyg7cEolSmd0''@;'; put 'put ''LkBeLl1gPWcyVnA/KDlkZVtXfk14XSw2Vi85LFArfFpXSTQ4NT16XWomOjIoI0xfKXxtdnZDYmRbJFZiIn14PjlITFFFL3ZZcThNam9CTUM8fV8oZ3FPPy9DKnR1c0V6d2AhOXhHL3c6LDNCPTkyXTdXTSo8OXd5dWtJWmB5MS95dCYrTHVeZE1PZ3F5PVlOOC5NclpdMj5FXi4rNER8I0I+TzFC''@;'; put 'put ''NyZ4LFdlZlo5Rj91RW8kSnFTNVtiNTpdb3cwM1ExbWFjZF4uVjBzWHVsOWtIc3BKOmYlKkBPeUgkUGtxJj8zaHspLnByQXFVcnxiYF1yNCUmZzRJOVk5PDxBQlVISjQoUkhHTkYlW09jMTQ1a0M7TSVYbGFCKnVqJWdxdX1eaGZhcGtRRnVEXSV5LkJlQjA9XUNxIm1SaEUvT3A0JElJX2RpUjs9''@;'; put 'put ''ZU0yNyVwNUsxbG04NyFTLiUrdyhWJTtvYy9Cb3VEWSxzRFRHWE1KTjVLLEJtJWh8Wm5VO1EiV2ZQPmF6dTRFM1hjOCVke19eZmRMV2NEIiVLP2Y1Yjl7UHN9SDl+RUpGRm8vOzpXKGN9Uy93cDleSV84fi9kVTFXWEtVS1NLV0NXc2p4aTkhUU89dnlCLHFRd1gubWlNO1h7JHZmT1EjfGwkNS8u''@;'; put 'put ''b0JPdjRYKE5YNS53UFBJd11GRG04Vn1NIV4lUipzRkBVaSE/NVExUFVNVW1AOnVyJTMvS18rVkdJPSUockdLLz9gQT5gSUMoJERCVXIuVHEyfTJYbGlyQWNgZSw1ZTVhbFN9UDlRbClsMVQ5ajRJSSZYc3hrcEFGX2dDSXYiKVRuUC5ucVtTUjEldUE/RGV4d01PeEtBUjhyLi87UHczbnhsa3FQ''@;'; put 'put ''PCMpN2skTEIjWzUyJVhiU2tDcUI0Yzg5SDcsVC98RklkKSltQk4qTGxGKzByNEI4UDclKU5jSGBZcTNofUY+ZHFIVUI1fD49KXNNYzw3aSR1ZVA2KDEvb3p9aF1hLm5ZUVV0ZSFlNz59RGZmMSVNOjp9V25VaD9eMV06b35dbFhXWyhseXQ4InFAL0srZl83IjowRjxOQHdvTlEvTV9MeyJvOmdq''@;'; put 'put ''PjJqVXBYcFJNWDNTMVYyU1VJcGlKTF1pUVkjRHhZP0IwIlssYj40Mls4OnRTbHh1eEZGTlQlPWpobXNQdUM0cUUufVAvWVRnUGNGaV5QbiosZG99P2d7enY2ZyJVTUk0LE92d3Z6W0V0bGBAQDw/JkBkTVNBbnt0QXBmLmBiP3hSYUk2V3R1V30rOWNAT2s6Sk8xa1pdZXg+K2g1QFEiQjBvcHtf''@;'; put 'put ''emNmMSZ1Qi45I1lPPEtdNDpmVSE8X1djQCEseTUyUTFZbjRCLkFzOSFCYylzL0Y0cFhSKVJbbnppOyJxLnleS1JjNnxGNEFPLlR1QGJVeTZwJV5bSz42YSJXbHNsT04oIlI3d1tCZ1habDdgcER0Oj9DVF5xfTBAbHhyWjE6OmokZlltQU9xcSlEVk0lTmNbWFQvZntRN3dJS3ZaPnhURGZAZkwz''@;'; put 'put ''bmNjRWtTbjROMnUscyNTbGBkP3dfd3F2fUw/ckwuP2V1LkYsVkRfNyomQ1I6fW8qKWs/V0lkSC9JWCVkSEImQUk2WSZTKWd5dV1FfUs8P047ImVHdDtPOGFneEw6I11eLGIhOkV9S157MjBXcWFqIkc5ZjQ9cWN1bzIhe2xfPT53Lkw4JGNoUiFtTGl1T14/dCglUXVNV0VwU0QsOXklJm15Vyll''@;'; put 'put ''JCVeTUoofm5mUW8zWkwjLm9wSShOdEs0d2dYUT5tWzoyLkpVUlVuO1NlfTciNm92NSMpRn5kdmdbIT9vVCIpLmlVZTRwV1FAdSR4dit6bWtgO2VoZ3JIKFt1Nj1hLDNFdiw2JDF2d0hQRkIwXzl+Jl8leT5TIVhfKGsuMVN4QEI2NTJbVGcxa3U6MWxsJWxAfU11d0xXPzZ7JWVsMWtKeEJCP1tk''@;'; put 'put ''Zm0ldFhabD8lMGMlPUx+eVQjS3g0VkQ2YDNjLGtRT2FVZFJNWE14NHViWXd9ekRGQ1U6ZytSfDc2MXcrflt3VlZ5UTtKR05pfWpESTdmKXlOS3ZWMDFbRDRSakkjV2h7PGY0OzQ6P1JWRTxKQzJ2KU9ZQDc5NWlMe2tgYHhCLlt0XTRybzIuZU5YR0FIaFBgXWNTIng3WS9gcGZXUHJzdUhRZTxH''@;'; put 'put ''IiI3dl1dOm9seSVGQjAxOjpgK2Ypb1EmTyEjVn52KjdgdlpWYU8jVytSclRoNTM1WG9rSWJJODFSKkNxRCw9XjhlOD88MHFjYlF5QkdsIks7ZmBoWzAjXWV4Q3FPeHB7LypvJCg9cmxTej5AYDRYbypMQjA5QzRifXYrZipbRzM0aElJaC9TeGFNTl94VXpZWzUyL2JAYktEW2hWZWs9W106Mllw''@;'; put 'put ''Wmh3SHtpJldKdUk4Ln1oWmBwXTZ7NVE9M3M0aD55ckZYZENlbypGZ1pNaWhaY015dStbRzNEd0IsMkJpTEpaQl5BMyYzRVJQSlYvTSVsR1BuX304REw5W3Z1dzI4JFAwKnQ+SV1NWTg/WHlFb1A1aE9rWykpS2wzOEkrP19VJjdsKUpnaVdYJEkkSSUxUiorJj47RyFZQjRMO2pSL1ZnLnFzaEYp''@;'; put 'put ''UT4/YC5kMypjMVpqMj44flo5Mk1aTFpGNGJuS1NeI2BHQyRPVitFQ2QkMDQwX1hjOSVQNjpDfEs+SnNwM1Z+O3YqUSsqMUYhUjt7d19oalYxQi5qMlFTbkEmQWt7WWtGe2dpe0I9JHxCJGtgVD1lMXQyVFBuW1JhWn52W0koZiwrSFYjamM/dW1uW0ZBNUc6cz1kWWU2eVl4ZkZhSUo+XUY7O0xx''@;'; put 'put ''YzA7QC52ak5laDwwMSIpe1kzNSNjRWl4ZyRLZThhd0UvOGdPKiRoTnoldTBmPDt2Y0xHXW57VHZsSmhRby86aSFMT34zbDtaSkVhVXlpd1U8SXwvUXokKkhdRiFAe1tlaDd2MCRtPF9gY1hGNT88YGZ2OW1aak9YQGlrRFlVKz5STz95fWF3fkZsdD1GfkhIXWgyX2d+ckNAfGgyVCk0Q19AXShs''@;'; put 'put ''RUouIThranBUIl0rYXFFYGFZek1iOmp3MDJbNzJofCR5RzozfD91ZG59MjZ4VklXOjl6NjtldyolOzlYXlZoU2VCT3xrUFNRWktxXUlEKUd6ZSYlaFBMRUVidz9yblohbyVEeD4sKSRzdFo4PUcoaWRLYmxxaX10YXNLOXEobjlAVW0xdHdxPlgwWWAkanpyVF91JWUkWSZEVDdTdnFhaGMvdip1''@;'; put 'put ''V1hMaTFoWmJpYCplIT5PSDZBME5SNncxKTRRQVJ6KlZRQylhaXhsNmFfWjh6R1pNaE1denY5KEY9WFcyYSsxO2ZmcTgwYT04MzNWb1t5dzojIWJSMj82UFZZX3t8YD8kfDIrSVlwciYrcVNAP0tJfCRfZ0VNJVk3Unp0UnpsRSpNaGpKLDUjKm8lUEQuQWs1WFN3Wy9PI1kmIywrKTRbb2xUN3Bd''@;'; put 'put ''JmBoJmt5NDkzWigwJlMuZXlGUX5aMSxDOGgpeih8ZU9RRmtLOCpIRE8/N1JYVWNpKW94KFU4MXA6czQ/I3JmfX59WGZIVDdvfiRicF8/MnlOMVdtWSg+ZFYiQ3R5MjxwXS5ue2VVVy5UUGxGKixGW0NWIjZ1X0Zoe04uVU0iNUd9XU1Xe30mQSgsWXF8Lm9bKSRgfWNPd25PPj5BeCp3L3JzLGB3''@;'; put 'put ''bGtfRzske3BwYSg/bHRudF4mLi49YDshP3ViYiw1K0RBYGU9KWtgdGxYXiZaKnAofCxSIWM3Uk1pZ1EpcTgsXm8wWTYzcXgkYHwrdnpyJVc6eShVOHxsJXFfOFQmXmJtZjt5aUcqTXhyI1FjZXNZajQvbTxCKUpWIUc8fXl+S308JWouO0ZRPzBKVWlvQCY+Zy9LfT03byh2b1hJd00mJit0LDpf''@;'; put 'put ''YlZCMD82TGMuU0lbZmtAKjpeamVDR0BdZTA2SEN6N3Ztcmh7az5LKyVgL3ZYKzM5cXRAcT4/bzUiaG5WTVF9cCMmXzgqQyxFNFFkPj5ucUAxVCs4bHI+eDo2TzFrUCZieGlOUmQ5KElBOVJ3KDBTPmoqNSw3b2w7dH06aUIzVzE8dnpzVF8mVmJwXm1zNWx9bnBVclRfZSVsJEdFOzJdeCpvMmJT''@;'; put 'put ''KDZ7N1p8VVBuTV1XbVMxSFtrPTZXWVVYME5HIyo6JUt6UDhoPm93fjFIKEN8dEtIVmlEWFd6O0FkVXdpRzxIZztLWSQrSllTd0BjWTEhQ1lKd0g5Z2p6ez1hXms8bDUzOVU4QmtPa2owNltiJVdse29YbC5fZiVXd2lHcCxDdG5AYSh3O2wkbD5jPTZhdlBdYksqZTY6XmBWPlRmcVFyOHoiJWou''@;'; put 'put ''JWZafUVEaTsvMmZYJD5LLi5OSDZ4WkR6VFByTkJ+YnB3UDdvdk8uR30xPzY3PEdnTlVVeTduXlQ+az5DUG9MYkk2KmQ8IU9INVN8fT42Si9AUGlQOCpOUkhmOGxjRXdwMSlhaShQXnZpJTpZall1JEBofUsuSU92N11taj8vcjhQTkAhKSp7JjZXfGpwYkFSPzB0bzwzbywlcmxlMWE/OGkkSElx''@;'; put 'put ''dV8wfTJtWjpMRFFjV1NmPmtvfCh0Kk12Wj5dbnA7XV5AajFFRHhxMkxPJl88THcrbk5Oa2dCb2NvW1taT1lMLzxYeXdIMXYrJktbbmBOJD8wMjN4Z3ZUblt6fkZ3Kn5tPGUlc1c3ODEmaDFQfFV5a2I3Zm07RUl5cCIzSFZfajM8YUZfUnpxWyw5amwhaEkpbyhJP2d1TWVbSj55ciQzYChPdig/''@;'; put 'put ''R0Y5elo/SShPejBjdjkrLENKIk5JWWFgemdxWGtCR1JNaGUxKjY6bzJsaHNkQmdVVUZsIWNxeyU0S1hsdiR0ISVOT0xzNUteJnZjangkWHM0KzJLLGBrd3I4NmpwLjIqSEQpPXJnZ1IjSmo1NVVWRCFIRzBMbW8+QUQqPldLV2hLNCNEPj1kPjk6fTZiNiU9Yz5tS0ByRiRleWQxTTdIX25iMHM5''@;'; put 'put ''SjRMTGs0MChvNDEzIThSRmsjNUBVbEZWez5HVHtJW000KyFFLHZWN2o7Riw5bypQTSp+O1twbWxiNVtmJE9rQlcoZVFzUWUkWGEhP2Q+OT9kWnNyKi5NKiZld319cG1RW3tdViEibmpbRkB2U1Q5NjpDLy55UWkuLm1WVnF8V1duWCo5OEg5biZaVCFPYCokNiJ6TTFqYFpPPFdLK3xnZlVGK0Jb''@;'; put 'put ''O1lIQyFNJStWPmxaKXxje3tSUi9AND88fEo3LyJ4I0VmayQ5bWVALiIjXml6cX0rOHYlT0hdPEgjR1JrSHowRjQrQ1pGYjNsJV5eJXZZN2lOXio8b2BLSUBwOj1rPn5FXW49eXo/MVpXfjtrRW8rOzJJVihfZ0pmdlE5TnBYLGl+JWBwLnRmJm9TUyIsTztJX1pSQ35qbXdgfXpWWD5XRTpFPyw+''@;'; put 'put ''UmswfiJPaHZSP0BZMWRGWEc1dDxONlZiPW9yKDQ8W1l4b0tBKCVVaFJCMmA/Okg9bzJyZT07QXkzQ0ROaUFzNGZ6dCtSZD98QFE/UEI5V05vJHB1Nn01LmshRXtFNGI/OGFlQHt9UklYZGl0L30+biNGMz8wd3BoSmUvYCpwRUQ/dl1bNXRVfnI/RXtPQEUjVDRTOE8xMzAyT1pRMWxfUCZ6VUV5''@;'; put 'put ''OVZ4Vz92cUYlXntqXV9PV3FmTno1LGY0Nj0+a2dXVGdqW3pqI044T0x1JVk3UnsxcywjPTM1MSsmNj1dIl4sJlExRCtWIyQ2cHxtd1hiTXMuKUgrMCsxZzdrWXI8M3RmcSxgbiVQbSNjXyhHT2hOa3ljPmpyam98NSZMXmgmKFpnUXtSS3A/QF5yKj93JVlJTzNpTHhqYXprdmk6N3YvMn09Wm1F''@;'; put 'put ''cH5+Vj9UW3RrRnpiUSVddSQqWT5uZiZXe1FudjlZPWtWL2k+IUUuW0UrdyNdfTsrYXljRVlodzthNDhSKl5qanohMVIqKiVdaTppWU8oby5qW0kzKyRZRHpGNTtZSS9VMn0rTDNUZV5VdmFdcmUzZWs5QWs1Ol5oPWpLXUxHajBwMFkoTSs1fHl0RTVwWzUsVTdWJGxAK1dAPUA4bWQoJXw/ZEhZ''@;'; put 'put ''cSZnQjAkSiI1L35rOE8xSHIyVDxALjVNMyY8Lmgxc0RvYDNpMU81cm0xdWZSeHFZYUhXYERrazFPeU5YTWE1YzZ3XiFlTTJgeHpaSjlANCYxVldoWnhRJmg+QmQqZjFzTjBqZ0Q4UXQvRmtpWVksOEs7bHxJey9XWSVZUV4rI2Uwa1VXckNnWHVxZ1VXSnBrOW5KUFJlKWVKW0lAOGdAOHAmJXZ0''@;'; put 'put ''RElDSkVge1VhX2dKTks+NEhJPn1YWlVRTSZlOnAxPF0vNCZreCM0YUtxdT9eNUJ+X1VOTF8uT0AoU18uT3UvOjhON0MrelFfRjMkRDdSLFJ+TnomMFdCNnxxeGI0NklkfVs/am5ySFB7SDFlO2U7OXo3ZiVQOnpYfjxVd2whcGk4dSl4PD5sQCRaRlNNI3BiIWQhZ0BmP3I6bD12elZiTDF0K0Yv''@;'; put 'put ''cnNyJDZMREZ3OSRFUlZdVj1pTCQ4JGI5UGxXKy5sV3piX3lsRldKLF56RCQ/O0drTWBBVmUzJjgjOWxHOj08IS9XR35TY3BxfjM0dDF2cEN5SV5FcFJNImVATSJ5WVo0XW5HdDF2ckF5SXxBcFJXTjVLXTY7a1ZYWlVBSzlXUjFSc1YkPTN4bzUyb114KUhkaSVfRUJCQUZHJV1pU24vPmNmMkF0''@;'; put 'put ''KylLQjdVcyV4bXxIMWIpV3tWWCk9WUQ2P2BuaTAsOjJkVylHdmRYcVNwXi5PKl9bYnxrXl48KTdDIy4zVXQuNXRwJGBuI1RKOX5KYHhlLDRBWmtjdFlofVQ9SnVxVDtAVUdMZT8+bWtqUjQoWCxpTyY0LDh2WVFyPkE1WHI6NkQ7bV5VREJfTixyVU4rL3peKWZ+N0NjWjVzdGBgezJub31zZnUq''@;'; put 'put ''TFQzeXZfTFB6W1B8Mmo+ZilbYT4oW1tie1d6aGhqO3YrJSY7Qy8lP3B2JmgkSSlzXjwuPjlfSkVqOz5ae0QxezspMnZqa3UzIkpZMSgyYG1LZVZDV197NUN6czl+ezhvRiErSjwzKGVdTzptX1daTFMxTCtWKGB8Pj1yOER4MSxjdUNocDNkX2VYW3F8RmpnV1IlaGplZVN3OVZpUXJLI2w7MG08''@;'; put 'put ''fTpnXSNeVlssPkFGPCRnI0ksbjZhXk14Ll9nbCVhYCE4KDJmLDE2RkM5b1BuXWVUK3xQZHFtW1FVdFFnWWpFMjF7TGU+fmdgITNbXTQhV0coQm5GWlFKSXtaJmhOVVc7PyJ7Mm5XdS9eSmFDay5GY1cvWD43Q0QlXy9kW183MXNdZi9VLFhxekg6ZHYiNUAuT00/RTQ+MlA3cEJzX1drJG49Wzgp''@;'; put 'put ''UHZ2X0xQciFbenlDWSVmVXxibyQ6VF1mYi8yejs7OlNHez87W05Fb0pqcDAobCpLXSslc0h5Onk6MXVSMVAwX014ZTdReWpzQ0NmNm5zamklN0VGZV1xdXEraWV2cEtNflRmSVhZa3c8NDJ4N28qciheSUAxUX1wXV83aGdRZ0JrTV1vaG85PTNFZ3xzVU5JfG83Qz97ZnNwKElAZ3hSbFFzNm8x''@;'; put 'put ''bm9wNT4hV2ZfbE89fXk6PlhZJTdvWyxhbV5USmJ+UilyeV5ZVUJlT2w6QSJKKy9jVXE2cyw2RSpZcjU9TTB7ITAqZms4Y0FhRUkyTVBBMEEsTi88VDBbO1pqSEMzXWtvJGVNL01heWBSPHlHY3dVRiZJUDJmeXJRMn5nZCQpdFZYLGgkT15re1Y9JXhFZUdeKjVtWl54azYlMHZFaVRbSS9QZ1hp''@;'; put 'put ''VjNJe2FSRDQxITdmUFhsdUVlSUpeQFE1eDg9W1sxUEh3dXpkRHp9UkIyRHU5QitXeEtrVVpRbXBUKTJkKyhLcSolYHxbMEtMe2h7KlB3MnF9fUhIOHE0XjRVKnl6OTksV3htVXhANks5M2ZYLEdNVWIxOC9gZjRAbShjdDIrJURpc203KDdmWE5jfFdzcFNYWlk6dGZYZS9yei9HOTNibklOTUtd''@;'; put 'put ''fFBPW3E/TGg5O3NRM3JvZXopWSNVLDF+QSl9XVlfbVAlMDxtT0c2aFkpY2ZbcE0yXUt4djg7WURHTWxDNEp6NFJUMlQiQUEwV1lMUnQwKTx2SEg6VHNxMiFwZlFGQEFTQyElNCtFNFkyMEQ8aW0rW0Y9aXhCRUFBQUFBK2EmQV9AN3UiPUhGLnJTITNlekVIZCMoZXYoaDRtdzcrVG92SjBGdUxp''@;'; put 'put ''OX0qcDldNnAoUCY4Mk4vXU98UVZoZG0/VXlITGZHYEpLfFRZUX57ZDllNSkpQjVtKTskT21nK34qbV8lZWhxZjBLYFVgKkJLNT57dHRtWU8iWlI/NiNDfH1KSUVVL2I6b0dYME1GPnpxV28vVlB0KCNLTUNvTjQuaGFzYkBRMlA0WF5Jdy8hfkhyQkF5V0gyL10iazdfanF4djppUHk5bG09b0dG''@;'; put 'put ''UXtPa31yNmNQSEUyJmFQTm9DaFlic2I9K0dIZ1hVOmtMOjdmbzlbXW1rPCl4XXNCMiEsQ09EaVNlSTRZRyRpW1lLT2JuZFg0fUw1P11aTnFwWyJQJm9daDxBZmlSRmJAfilDPEg6UjBMOXNgcXksSHlfOEJQTTpGY3cqdT03dT9KUiIyJEVURjM4U2tNZmhqaW1LWGBlfmpiOEw1fDJNWz0oVGxV''@;'; put 'put ''PCYvSy5YKWlpeylpQ3J0aHUsOHMzdmd6IUwkWihGRS5NKkR6WW1LOzBCXSYkRTpDUHg7TDZxPT0+QjV6VF1+IVF6UXVlRXRQTStOMlt3VUhZIXd2VGNrRlRiYkliNzdAZF85IyVbYmFvZ3Q/SHV7fCZ7NjRJUXV1QX1ncixDYWRmR1FVZCU3dVFaIiFMPUNwMmpERzE4I1IlUiNhR309YDdXeHU5''@;'; put 'put ''aFFgP2EwRWkxS2ZFaGNDQThSdiNzYzlZeHU1LmpieX5sVS53Nm8iMCkoQFgoOndBXWo7ejZCfkxZSnI/eFJfNElxJDlFRzpeOTIoZ316Iil7T2I8JHFZXWspYFhGenZRdzhNfkJHZXRzPHJNNGk8NGFXcndiL2FZdX1BMnolbSg3aF5DP3NXMi8ic2RDPFQ9PVVFTWQ+NmpWV2E6PVRPfl5IPnA5''@;'; put 'put ''dndSdjJpLy9nZGVLRzhvQ3lwX0c5QD1vQzVvU1tQVFgjW0xMKXx8WyMjWTtTcU0ja20/eWRYQGJYL2V6LHZPZlB8Qm4qL1o0Y1ElVk5YXllNeig6RypaK0FXL156cSU4eU10dFc2KEBEIithbTteYXxGZ2VkNFJmYlAyMDZoQkpDNltWSDtyJVBFaWM1YHdPNyxOe0I+cy9ibVUoYU5+U2dgYGVl''@;'; put 'put ''Z1ZEJFsjKkc3KURHISpFMTA4TUh2W3lxXXV+MUZyIXohIiFQMkpMbyUoVjs8QHRMaXk0JXIjQ2p9JllNW0NUfG1zPVFHZExCWyV3UXNXTGt3aUIlfX0oXW9aKyxFZXl6L0I+antqQzYpZnZhcUk3N0cieE9CQVpkN2BnK0hKJFF4dWh4eUN8ZV1gL2VpNTh8bkpHe11Wcl1jaGJDMHJGND9+eDd2''@;'; put 'put ''Uzk7MVV0e29QVmBqY0toL2FjX2tLal50Olp5Wy5OZ3EuWStqVX48MX0sYismajhuYzE9Ti88Y3lXcy4rUjxBfnUoKCxSQSE+Png7RyZVUWd0YXVeQlVuXXxjfDxoXTptaHVNZTFKI2ZQfHd9Ult0VSZZfS4rdHQmXyZWLEQ2UHVtRGsoYjA3a305KXt9ci95ME1rWCtrQmooLHF5Z016MiVJW0xO''@;'; put 'put ''Vk1COyo8UX1LKnZOI3YzNVArYkpaUzZgPFhTMCltQk9qU2A4eWwsSUJ4bC9waU9IUC8zRE9AdE05TWMrfXhycCZjRDUwcE03Y2BIfGc6Z0tkWSxSazA2VUhKN2VkZX1CdHw7XndrL3huVyFUIWlhMlE8U3VUKHk/QHZebDNlNEE7eFQ9W0NRYm4iX0cxXkZ5ZCxoP3RWUEU8Tl5MLEkhK0clazV4''@;'; put 'put ''IjlPanV7MTdlfWhxMlp2SCJaITokWn1zJkdNN3BKP35beCZid2w5bkFJZntSYFhFTEFWPmRZbHhBMnJhSlZMdz0kPytVOkN0TDw3WXFkaDxpTnc0QHJRSHsiXkFSTkZIa3d0JWJ0MShtR1U8dXFxKltCVGF0N0ZARXZrJGdXRCU5TlJpPTo9TFpsamlFUjMrZU1IPXp4XzVvRzB6N11+L2w+YEp8''@;'; put 'put ''MF5Gdn1WTjo1IysocUo5fnZeZik/aUsqP051dXw4UFk9SjhlOUU6K29McztUb218WzBNfDshY356emFqWEByUSEpQnc/OUhgXk5kdnI5U1V7TjdqLlF+bSVDNmdEfiEsNj1UcFhUKHYrKUpMb3F4Ol9MXStrc017STREX2xKezZOYmw1dSomSTVKXi8uQFBgbkU7XzdsLDtAJDY4TS5fNl1vNDIl''@;'; put 'put ''YSJFVF8md3xPZXV+dTomWjRIKmMrK089L3pmJn1qejB0WlBhZj4wPCMxPXZYWHh7Tn03QmY8K2A3YnlvOnFHY2ZWLm1jZ0pVTm14T2IrQVF3NyRwMSkuW2MlU3BUdktFS2dJRlhYeWwzbzlwT2F3VElmVHlFfVtzaVEzRClbM2NuenVmQmZbcmdsR2g2M0RjV1FFdl9EYztuPWh8NSU5NXhRIjVV''@;'; put 'put ''SV5CckI2KFZoS3Vmcjl5ZEdgKyQqQkFkZSE5eCh2NWQwKXpyfChtQHlaXSl5PVc5JXtIKnlQUTd3WS8sXXVKNDwwP1MsYHZhRWguLyYvNjVVIXVONyo6PlgzPTQrcUJlNnJqNVNsKUdmOip4Sjw/Z110YGo8PUkkN21+ZzMhQjcsMEhQVV1uVG8iS2RALFpQMloqYUhVISRHPjBVeTJXRDQqSGt8''@;'; put 'put ''OkZVI2llMHg6Wj40e2lNTWYidXEuNXxVWTxNNFIiZlp2RlchZSNUZS9kMCtrSjJ1NkI7c1NaUn5pPl1HUkp+RnlnSF9uYmwzJXdxc0o/QWswNW9mfjQuWXUmJnRaKmkmYEdnbCphU1M4cDxZJWBUcC9eZSZVbSQ3YntecGhNSEg0NDlyRnMiPF5eajMzUGdvNiRTTSI1ODNHRDBnTiVQJlt7cSsm''@;'; put 'put ''Pi9vNUMiVS9oIyUjLmY+Wm8qI25hMzdwbT1LU3Fabn17VnlgRiwxfjhDLHc7STNjJGNyUiRkQk1VfnBbOF4rJWxHb1YraTo+cnROKj13ZDgpWUYuTGo/YkIpM1o1fENFUnwzNFJHcz5DZXBjTih8N0UvcSs6STJyVXc5YX40UHQvOV1GfGxCZCx9U2wqJElncmtRRXV+L0tkJCZqVWFreXwsTGJ4''@;'; put 'put ''QE1UOE1HZ3MiM1lhPkg3YklZVCYoPGJoVVN7YzBFanhycDBEZ15JcU5XTDskdlV7dHNaWj4xOD07UD96WkxldFlLXXNvanpyJGVlTyRsdGBDbk8qPko1eVtZKVQsYmhYQkUmWFkwKjVCdEojXWV4Wz95fl48dCRdQWxyQkNtND1NOFZTbDRidFMyLjJGZ2g6bmNyZV1bUDRoKHRiLzh0SHZrTSlJ''@;'; put 'put ''XkxWTjpadnZeYnkwdCY+X1okJDJrMjQ4Qk1GNT57dltgRGV+Nnt8VkdrPUhOdTJuWHkkKGJrNEdwZkxgbzFUOERPT3ouSzU+NExTOmU+al1COSRJMkphSDwlSWJvenZ2Tn4oT2k8TiNLb0lBX0BATHhZJlRjIy5sM2wqUyhoRzIoSGQxdjszI2VYI2RNNUl8Zk53SzZGNXtYdyQ0VktIOENZTXwx''@;'; put 'put ''bUxwJUFhL1lzQ09YKTQxeyI6TltIMkd6Q3B0I1Y+O2RYYkRWblowV3E7VWdSYGxxI0d3bTFJR3BwayVhTjFGfmdeQzZMZEV6bjNtXTUjdSMqNzNSLz1pSUJ6PDxfPEhrVGpHOEx9X1U6InZlWjlsMHt9Rnowc0FzTDIsPD8rYzhdQF9GQE5TcVo3TiE0bD06SV5FWERUUXBhJCphOl04eHosPlZ3''@;'; put 'put ''UlVCbW00IWxfPTVvIXB6Z2hWS2xyQVptdXB2PkJQfmxiQUIxWSF0ZzpyUmx9KEhQdiQjLy58PlRmQz83dlNpZ21pW15kRVIvIWNRLCVCMVRmKDRVVT5mLGchZWFJPWksOHhdSiYmZGFROj58LFhMN1NfWjw+ZyVhZl8kZlhTQ2RRYHt5dVc3KiJlc2Z0S016KnlAU05KVmBtR0t1InskX3wpVi5V''@;'; put 'put ''fHRVa09PMExXPDBFKnlCRD5ZRCNxeW5WXzltZUdkJCMrSjpuOFZfbi5yayIiYmV+STJwIyJlazZFeUtWOVUmKilBZmNNQzp1ZTI7TE1QNSMwPzA1L2RgJS5GfWtQTz9rPTRkPEJCZ2prS3E/ZVQyOXx5MzRQYlU7TVg5KDNdMndzLlM/clFHeCZ8SGkkYXJ+SjM8NmQjIVpxRC9xJDYjV1soJG03''@;'; put 'put ''d0JaRnhXOyhCMFNrPHIyVyxQX30lK1U4Nml+R1VDQkR7bismd1VoRS5XI3pbTWxbejlLUnZ7ZF1ST2pxIVYyVGgsKTtmMihJaFh+InFUSVByWmMiTWVaOCFhVG1wLHxUP09MVk53Wzlsanh+YD1xTEpAfWowbkokUVsjeD1VLk9AMlsvJiFuIWNQaTJwSXx0RzB5N0tbRkk/R21EdiI7Kz9gPyh9''@;'; put 'put ''KlpHcGskYSorXnJnYz5tfC5tIiQuP3UpSzhYMWJbLCZSQmtjV2U0dl8qYEQzV35NS0xsSWdPQWBNLChsTCUqXnxgXSZqW3pZaDV2bUd0MmsyTUZ9LFckaFAmJXUhRXxYb2UjPEVbXkQlMk5bWWZEXmFOeURRPVR0fD9eZFR7QWZ1cjouPG82KGBlISM+eTdIaCVOTT1hd0YobCh9T3xKN1ZST3Z8''@;'; put 'put ''Ql4xNVM/MDMwNyVYb3J3YDN9MnpLeTRKMjBjYip+fnNeSkt7L2Q1KGhNKXlMMndkOiQ/NXtgdT0uImtyfi8+SS5zM1BKXUc/THldNTJTVDk/Yn46c1MlcTAoMVloV0c1RVl2c1FIQEtEMSFVN3kzUD0wbnh2ZDlINzwpSSN4PT16anJ8X3JVOz1XSjBjbjZaQSRoR0lfRFZaYHV+SmZmO0x8bkdD''@;'; put 'put ''IWNfcHZjKlBuQ2o1S3pAWmRlOUh6cUEiQGZ4NkxQflVGPzpTSG5+ekx8NEl2alZ0fUdQe3dHUCpRRDp0W0dqIVp7ZyVhMl9NdH1NOzMjXlZgJUkqNHYlVHZSPko6LDl+ZjdDeFghVyQ3dXN5ZHYuSCFrR1QldyRXPz5ASmtrMmJ3Wn5hMXlVOXZTODMuVDZkM3VadWFdbEJANjJLdT0kKXVmaURB''@;'; put 'put ''Pz06TjhmWmVQPVFdaWovTmIpeFdmJSs+JTYoclt7ZkR1Uld7UkZbSnFQaUtIeWlYQDU7akchVW5dRndzWXdYUX1sbnJLLzJpSmZuJnZpaXNhPW4vSzY8MXF8WFlvOGwyaCowSj4pXjtEOXhWfntjbVo4WzQuP0txQ1RLTHs7Zl5RVGJne3cmLjVxTUM3MzozW0hFOHM7dyUoVllrMn0/JXZyITF6''@;'; put 'put ''WV0jajdtI3oyKiE/bj55Y3p9Qj91PypVR3RdYnp2QUpsJE1oX3pvKCReaGAvZEBzJCNkXz4ueWUkbF8sV0RoYSRSd0xoUHBMU3BbWnNhVUxSJSYhP31aWTR6QH13JTVeYENUW3ZkLFhPfUkoKTBFP2k6Y3cpVktadmhSNSU1RV0iQTB5cmRqT0FoXzB1NTtnWyVIN3lnQ2ojVzpvK2NuP0lnMit2''@;'; put 'put ''aWp0bnNNbXlkb3JbWE5yc3BASj83P0JDc1ZwYyp7U11zPUNlKmZkOX5San1+cnQvQlJOJFNrRCMxRXBYPTIzZDBxU0A/JltDZEkwMysqIWlNIz5Lei4hblVINEo2SGREJklIKyU6QkVzQX11aGt5YT9fcCg5L3U8WFM8alpSXTtnbnhlPFBTbHBXMUtCbFR9dFJYVkA0VVphQW0iZHxQNF5gS2Is''@;'; put 'put ''KWU/KmhJKUY3aSsyZkxIPEBXaGV+fiIsSk98dE5QYmVfKTMkM1R7ZStXanNrZyxjQVUkdTMsbDBsWkMxY3xOJnJKLz1YcWArcTVHJFIpPVN8R2o6R1doc05NISJgQmF3PF1eWyQmKHBoTHU1eWh+WX4jJElEejApdElEOS90ImZwKDB1fl90PjhaNyNHaFRaeDI8d3Z2RHg8Yjc3IXpsNmE3di86''@;'; put 'put ''Lmc2SkNiM3wwSzpua2liPEBEfW1ASW5NZjUxVlVIdTE7IlRQXj9JTUUxZGhnJSguLCQwQzouY0U+ajVJaUMoZlhpKnI7KjdCd2VjXm1jdHpWbHFLRzZMNmxRTz1jPjprSDk+b0RoWW1bbXhXVDRrbj8vVWdzVGw2dUlpOlhPM3xQbExgIXF9YkxNUD91PX0yMHgiLHQzfXNtT3M8R0R1VlZxciYx''@;'; put 'put ''PkNyJmw5dF9XdVRRb2JXd1FGSFlsMmpRZSV5RV4mbzpTVThOWlUlRngzc3VkY09+a1dsdDV3NWFVcj1ATzo+JHQpOmR2X0k1XWcuMzZMV1Qvb2VKa25Wc3ZnMXlqeyIkN1YlSVJOKnBHZlBVZnIvK0YzL2hoKzVbJTR2ZDpeKitndUt4PUVgNikmPk4vKERrYSNSOSFnUW9vYnpddWlfLEZSUlB+''@;'; put 'put ''NHQ1clVWWGh+ayU9JVJmaEVWb2tCSDBQQDd3UWwxY1svTWgiamdGRCQ3NXZFV0lyQylvUD0lPUQqKE1kemtgJnRzKEUralFrY0ROSD9kUXdzeW5GWU5OYzBhL2xWUkEjYmpKcmx2c10hMGciZUt0WVJnZnE1Wl5IejJOMXZQTmRmI0VEST53VChmSCJgbV0wZz87aVBYcmB4VWZ+W116IUFOJWBM''@;'; put 'put ''flcpOU1scnBsXV4xO3lHPipyaT1zKXlKd0VaTkB5WXNCYDdAMD1+dk9PcVZlS2djelRQV1MlclBVNGRAN0QpQzF6OismY01ZeXdiKD9gX1c+eld1RGpVRE8yV2pPU2F2UkB2PWFJbnE8YjROfkZSKTpxSj9FP3V4eGR1QmV2dzVkc1hGaXMiIVAxO0hbTk0xfU9Xe3orMlduI1o5MX1fdSNlPEB6''@;'; put 'put ''dms+WSRiVjM0JUtgQDpMV0wwJFE+WjQxY2U2RSNwTFt0eFB2SmBUZkk/O2RfclE2WTtHWkN6Q3xgSHFYJiFQKmE/Q0QjdnZUe2Jzb3d9JWkxKDlPNG1ALFA3VnV+WE1eVFJsNDk0YjV7Pz1JRFRqTWsvTktDQUBZXkcqP3ckPG9NelFNTmJiMlk6UVZ0ZCN7YltfYSt+dmdAcCtYPUEzUkZbb01A''@;'; put 'put ''LDYscT1ZbD48aEchW1ZnZy80MGRlLC5nbnkqRGE+P2pbUnlRR11EIjd7SSpsfTQpOWRxWHJaQVBgfl5ycC4mPjkpODVHOXpkK2ltOmtyYnszO2xfVHx8ZD1oQFsqYlIzPUlPXmBfeVVgJkYsJXNGdlopImFrV19TJVlkW29SJld1fkZBZlQ6bTBiQGJ9XnFFJWU6L1hRNU16cyJvKF06WG9yWjwr''@;'; put 'put ''eXwpNEQkVkEzQ0g7ZzZfR1B1TF9pcVlyYkRxP19NUGF1QzheZTtZP0tjUDU2fFRDdEpgT3Q8fUdLUCx4c1pPTD5sdG4sYnJ9TmZ4ZHFRUl9XUG4sPWtRPFllW3tZaz0pSHZQRnBFZTRbVFs6WGlbYFhudX0uPXlzIUAlfEF6Ono+KHRlZXt1ZVpIaSJiRUh4T01hbDssTlliN0NXUk9zeyJUdXRp''@;'; put 'put ''MnZMT3NJP0R7TzgmJUBuJD5HVGUwanp1fSF9Z1QmVWk4NSlDR2xsTDVmV0BpRjdeeyZpejc+bEhDKztSJiEvUWhyPVA1LyRbamJCP1VHJiJGPjhgLjtfdHR8P0hHUyM/PVVAZCZwR1ZVZz1lM01XZzopM35HUWVCaGIkOyZZNDwuJFNhYnVbakkzVFNeRSpaUnVUL3g9NVNZWWwhfXJ1ZSJ1PWhj''@;'; put 'put ''OnQpW1AxJUIlb1dXV2xxUSpUKyJjPX05YUwjMDN9MVk4ODFUQEJzbixWeiNrYShrSEAoa3RofERVciFmRXo3OSF4Qn1GMVtdaCEkUzZIV1A9VkNsY35rMUYvKWVYek8rJTJFXVRXcTQyIV5oa2djOUglKz80U0U2eFBjRzt4an1NfE5PSTk4PjYsTHhjRGxvRHxEV2pEelNwSXVDcF8jMmglVWd8''@;'; put 'put ''filWSFMod3Z1M0xoMy58WSlyRVZrclVdUD1NbnFfN11qMH4pciRKdDNiWkhzYVYwWGJqZEVpRCFsaEFpLmF1YU5dNylWNi8iJXZ0PlNUQllsS2p8Xj46eDIpWUU9d0FCTS5TYmhEaT0maDVjYHZrZiQ1dDMlTXQ2RUcmdW5rSjRAP096WXRYckFiIkNkPXZQVyxIPEhKaztaWWhnJEZOOSl8OVQ9''@;'; put 'put ''MC8ud3tHbVZDRGxWK2RJYnYlUkpuMTFjTHJ+QDpEcTl3Nz47SzNVdXglN2RyRjZfIVlmRFIkLmVwaXN5KTA1di4wenlGUUdQQEhCNVp4cl1XKnMoXlJORylLVm5nYEhrKzMiX0lYVExxdy9zNih3TFpYTDBZbXRpenQvWE8kbGB6R2I5PEBQRzU/d21NTkQ0X1VkViN2KnomP2wmL3pPZ3d2R2p7''@;'; put 'put ''KmMhd1dDUmdQKkVpUWglMDFUOjxaTTtEPUk/ZyI1ZyV8NzQ4S3R0N1VRIU1iTWdpI1tWayxwSEgiJlN2JTlndFhGeSw5PkFrdSptP3VBTFI+VksjU2VjJURRRz1AUE9sUmg3U3ssN0luNXFvY2pjS2lzcD5abTtCbms2T0oocWkiU0E0PD1aKThDYXdNQCF3ND9DQCtzRmVhTnIjbjM+Jkd9MEx2''@;'; put 'put ''RT5ieSNCTHM/LEwjWyEhbCt1XXdyTVFGO3RgSXomMHBaQTFwaCE8LkBCdX13SCFNVzBOOGtnNCxndmN1XyMvY2AjW0V1PDVBfDFRQSo7dEx2U1JnPkMqckhrdC9HdS4kOjdJLFRpKm1gQEk4R0FmWzNHXWtlMjFVWWVOekJsaHRFIUxIfkZ6OzZJR2A9OisrNi8lRjF7UjU9PXYjT1NSVDlEXk8h''@;'; put 'put ''byEjKjFRP2VKd0B1RGA5WmZddXBGeC9FLmhQdEdSLFlCZnoiIVQ8YS59azF8TntvLjBWRGcoQyMsWDMpPkcifGNRTUQhbGA0STQpXzxDPTdSey9jVGg6LjopTVtefC4mdHhkTCFCe0g/dlh7SiFuU0ZAYS5eb3dVbkome0dIJTc9NGVwLihmfjxpJnhuRW0sPF9ZdUguLlFEOlFjNEVOMFFKfUxl''@;'; put 'put ''JStTVWx0RWh9OE03cF4ocHYoVjhscH58bF0yfHcvTi5iMDttdGVVZ2pxR3BJQlEwdV9LbHFVc2BVWSl+RDtXITVkVUo9MlozUnk3Qm4lM0I1aDxwKCVUKjlxRH1SUWhwNWhiSlRMO2lELDQlRnxARDkjSTk9WFFgfk4rO11UV0k8QVFdNDovNFtWLkwpdnowdVBJLi5uRVlRJkNeSiVRTms1YT1w''@;'; put 'put ''bWpBN1R2ckN8Wno4cC9XMlsxPiR0RChtTHkwbVJRKVRTUHQvVERbMTtdbiJhJHN3InZeXnBWfDVJeyhWK1YmezhEdy5Id0h1JXRGJVp0NmAoNipKPX14eWQ/d1NPdixpKHZkbyh6UERQQzFhOCoqRGVISUIzZXVpInBsfHlhQVhzcnB1bH5mekBQbj9TIyVuSlZxTGliWTJiZlhbP2tvRD9bbSZj''@;'; put 'put ''ImJkM3cvX3tXWy9lQnRgaEk+OmYibk5qNX18IUVEbF90SVQ3KC9DOGp7a2tbfGp1K3QzRmB0S3khSzN+YnxnN28uLmIrY2hvU20rYkUyV0R+SUc3JUo5eEQxdzlqUldoaFo4JCgmejsuSmlqbCV8RCE3U1YzOGMyKCslQlhzbTIxTTFfW2RWNnU7ITNFPnNuZ3Z0SzxPL3xPaE52dCUqKj1rb2p7''@;'; put 'put ''XnRFeWthVyZtZCRXL0pbMzxvKVBXTTg6I0skd05+eWlGYDFJfk5dQGlZc3hiWGAxdH1eUnZUTXZ1SEFlPjRzK3kiQSlQPklIakgoaGA5WXZPS0pec3RQbmB0OFsxIXpqY1ptSE9NUX1kSTg8ODlzcjV6MEgwO0F6cVciSWJiPiZpXTFdNlYpaD1hcl1qdnUxKlhGfGI6N3l5UlslNyJtOUwvWm99''@;'; put 'put ''UE9VJEYzUS5TczBXcklPamEja25xNElCfCohfmIrWEcsYmtkPkJPJVFPbTVdPHFoc14qZ3d2OSRsbDsscHBmZSY/cUBLS2F3cXlma3lLfG8oTn1BTks2NUhDOXQyfWNCNFpqLFh7LHd6XT1sYld1NmIxbCtgRFM/MXleS09ZRmVwSWNQdnBSfklJe1hWaGdIQmtyWVFAVGguOktkVis6N3gsTn1S''@;'; put 'put ''NlNLX2t4RmIlSEZCJnhtK1MpTzZsPW94TWFGaWw4ITwoNllxQz85SiEsNTYmeDckNkNbInFtZVAvWDtaMj1tUk8jYHorR2RofmEqSnBJM1hEeT5HKm43UGYjcnpQLFR1MGd3XiEqeTJQUWZmJj18RFtCWGE1aFoyVCZoVVNDY0t1ZkJWdiJLZDJXczVKKkpjNzwsRDhmcXdTNntjMjh+U3UuOktt''@;'; put 'put ''XnZFUUg5R2t9QmVaZHA5e11kVFhIcjw0QCwsZ2MoXW1BNmY0WVJSMkheK0V2MUpTVkBKYXwrR0BDW1NbUVo9e0tPZy5GcmtqeTVGQlJEQEM8JkhVTUthQW8xdkA2VDJibDNkaEhBVEglTXBKSFN9b2U9QWY+bVlETjxja3R8RCRmZVRVJi97TCNFP1RCSk1AW1JdTFdOREQjTVU/YHBCek5VVGtj''@;'; put 'put ''bSYkMyt1ZVJJZld8WTUzLztIOjo3OGt6Si4jZkMrMD0iVlVzWmYsSFZxOWAyQn1GaGc2TkVeYGg0NiNRblcmOHl1Q3FwTz45WUokVmJfbUptT2pTe1dfTjp0MWluS2AsU25WYEM8e3VBW043PFhXQSVRb290Tzc3MnltTXpjK1dnI1tbdTJPM2BSKGQ9OGI6WypwamVrfj5Nd3k1LGZtXmMyZWZH''@;'; put 'put ''bHp9Tm1dYjAoUGQ8SFpCKyFGZCxQIjo5eV5OY0srakREdEZHNlFMUyYrMWVJLyxFVE5pJnJtVSwuL1hlKXVfOU1hfjUqZXw2U0woYEVmPF5fZGd8IkBKOnxlb1ZKVyMqX2ZHP3dGPTUiN0ssXTI1S2hQS28oImldT2xdUjtXOU1jZG4xS20xU11tS2ZUV1IvLFhBQW43dDN1RHZXQWZOdkZVTjFk''@;'; put 'put ''RW89VDdNJFh2YXwsPl1hcDMqdzBlTld4MXZ6YSZoVDMlZC4xdzJVdiZDW0gqcVMwWFB5aC5xITo4ZHU+UzdSfXRSenY/UGxuaE5yclVpNHFjKEQ4LERKZnZCLjR2d0ZjLD9NQElffjwwZ0QiLnloRVhJd2wsZGB7bHBlKy44fnZ3NnBAbHpAQk4yL1kvJn1sRTRgS2BTTkMvbFI+IWp1KT9Gcitz''@;'; put 'put ''dFRzLzpFVz1PYUVAPyU7MmUrejwhWVJiaVFHYnc1SFR8MjIqPFVmQm58PmplSE9fXUQubE5vWmx6emRmTHVDUzI7MXNRXSwxNHJKYHNEKSRjTiplT3A/ej1iXixKJUlmPUJWJiU8V2IjayM9PTJPL2h4IS5NJVcycTRtRCxOP1duajxed1FpKlE2aj9zTXNROGRNQHczaERNcEVSRkY1YFhKWyNG''@;'; put 'put ''bDthY3EiKzBsRUUqZFUkfFdvLjpSfkFSNElJLkIzcVgsaz89UTFnWFUoTGw/dz5qQ0ljWW5rREBEJSwxOTAyOCw1bGJWMnZUUn5zW3UwSUhvP2c7bXFwN2EoUENjbnpucU5ieSI+QVozVzZDPkw2Pj0/OSZkLlBjKjM0dmwhTVhzVCpVMClqM1tzLkl4QFF1aGsvTFQoVmkuTXZUK09XQVpvNl9N''@;'; put 'put ''bSM0YGFoLGVFIUp1ai9rW1E8Qj5EQzNQP3l0aSIkV1FPLzUyZ2pafWg2Z3hYVWNlRWhrYVU+fiEqQWUqYWJue1BRTVlWXjtXe0hjSGRmYjViJCtQT2hLSCRjWF5tdCsheHgwal51Nm1LJU56a0FpMz0+SSReXWZTdyovMmVoTU0xOnFnfVM2fFF3UFRTZTZmfU1mczV7YCtbRTRlPml5clk6cXBp''@;'; put 'put ''eHBvUnsoXUlXUSNlWDYsN2hPVVRzLk4sTWZOeCYxajNaVT4wSTE5PHtZSmxwQnJPWmshZ09GUk9KYzcyc1JhdUVlSHJaNHdtYWo5d1cwSFJTPkF0bkQ1fEt8OiRCWk4uPy5VX11QNDMqMD1qbHpdQjUmMCtXLFVNSTRxbD1YYTpNayxfIlZQMiNUJUR2bmgkcCMwX2RuUGVZfUFfbF19YjNuITN2''@;'; put 'put ''dE8lSnUuRz5jM2p8ND1bRjc5WyklT3Y+XjptTSgsZXZ3RXhoeGtDejguaE08JU5COWgqPnI9OkF0YDhDPTZnPXkpdCFCLmhMTGx5K1lLe1c0cFshMnJPMzF+bFpYKihfeHgxJGBDTjA0N1lNaVFKT3Y8NFJ+U2hxKnAsdGYvXi5xMk11WlVHQV1hKDRNLkIhci9jbV1EI0dgYFJvY1FyaTBQY3RD''@;'; put 'put ''RWQoOmRCWl91YnxHP2B8fTRId3h1Q0Y2M3lDTUIwM09nWTIoUzxzKD5CcFBAQTN2dEB5IyRgb0V4XnlwV3Q2SyZlNkM2aiNhQHIwXWdASFplSD5nTiUlMU5oW2h6OlM7QkN8InglO0wuUCslZmZ+KytHWSksS3lnYWk1XyZHdSVYInt1LCxnbS9kUmY5flI9eV8jcXg9X2cxKClPP3dZQG5ueDwj''@;'; put 'put ''V104Zzo5bTREdkM4P3dwelcoL08qIjw2Qj9JbyZrMXUwbHhWV31LMzJ4e0c2NmNXQ2dITkI7WWBIeng/aDNXbWY7Lz19Y3RkS2ZhTmVnfnU8SCpBW2RjM0lhSVE7dzdjQ35GczkvOUZYen5AZUM6MUdCfl5DVyF9TiE/T2tRNHQzTDhLPCZFbSpiLjRjYC47NG1VQS5Mcko8ZldMVGAmWiorbnQ7''@;'; put 'put ''dkVKeS4pdEtDYHB3QGoyPnMmem5bMEtxJngrLi5oWUpwO3dFaGpnIWA+IjhwS3FzRSRiZ1NEUHBDdVJbQVJVTXQ0OjpGYnJbOERha1sjRUo8bWI6bnZxZiJGKWtEKDJ7aGtETmsuand6OzRZWmJafFVXcm9idzlBP2VVKnI2SmgqZyVIeGxufmFPWlpMbj5BTk00PX4lYl5jQGdaXStYPFN5RHA5''@;'; put 'put ''TlN0UF9ZQlQ9bWgyU3A1bmdyRSN0JkgzSUMzKTA0Zn1vTV9YaFA+YH4leFFKblhfbH4jWGA5ekhLUUFxSWg5NXArRnU3ezJDaTBVbSh5YHYjPW5udE9PR1ErOyMjK35RXXxUfUhIfVRwO2xnVkZAQltpe3QvcH5KW2RbbEhwVkk+OyN0ZiMhV0FuNWk6Qk5KOEl+TEpJeiJBMVQ2VnFNUWw9Mn5U''@;'; put 'put ''YFZ7blZHOmpLVix+MUwlcDYkI309cl58QWs3O14rWGVjZCVPOm8saGtdPlZWei82eWp6ZVIyPjFJIiZsUTIsI101RStZVW1vZXlSRHRrLihPbmM9ez1sTVhpN1FvXj1qbkp+NnZNSiRAYF94eGE+NkR1Jk9wOyFdTGIqRDNIWEN+Qz54LDtPXTR3QyhHSmJYXUhsMkYkejkvIyhqYT9BcVh0KyhJ''@;'; put 'put ''cnhWPTZHQCprTTU6IiVqdFNSKyV7WWRBZVs9OEpKPz95aTIzZF9eazNeT2NFe3dFa3pJJiVrMShGTiMuND5ZS3JBNV5IWXxFLDI+MFd4XUhhbTVdTHxuJihxSFdSe2M0X0M1XXswRj5ZP0JlWT9EO2lOS31HRWBhZihtOD1BOTlKU2xqVFdLT0pRcihGLih8bz1rLF9mZU84NFFvKGZKZnVnV2ZC''@;'; put 'put ''cn5QO2VOQHQpNGcuXnZbW0dWKjlLO3U0L0omLkJxZzNbQD9uTG13REl8Ll1OalRdZHVGdippIW4+UWk5JmBLcTkjfHxMbGZVZUAjO2hRcykwKlQybDZPWVJMUWpbL0M2c1crMGAkKWJhQkVHTFBHYyU/bntDJDBlTF1ze1RbeDBUMEV3UzIoeWNaYDk9dT5mdGYyJFY4OmUjJVMiQDVzZEVrXlJz''@;'; put 'put ''Jk1Ya0koY2QlNU9ONTxRM2ghUCZZNmFgVjJtM1Y4Z3c+d09ySDZxYDhsdzdVNGZvR0ltdipmNVh2RSxzV3wxIUMselpbRHlnMmhncXB+ODg5MllUZSJQLEoyQj1bKVM8VFB7XiFEcjA8Lk00LyJLcFFzZj1pOThOMVAqPUNYKGxFQGpaM055T1I6TGJVQUhlRC44MktDV301eyhUO2pvQTAhN0B0''@;'; put 'put ''NlooN2JXOGVYZ2JFRTlGNmAsNSRHSyNZYTZmbEdhQ1lXT3JOQm9GOGJffiFyWWpkXlk3KC9nL2lhcD5QOWQ2OmkkSTd8NHdFIlBVQVImVkhsLGk3UitnSCtWZlEocDRpVno7S0N3fmwoTm1fQCloS0UwLzMxPWMhbHZYO1dOKkp9JDMpVXxlSSpiR2VhYClJbHgrJXZPeWZodj5LKlhWPWFiMGNO''@;'; put 'put ''bXI0XTV5TzBAUyY9SntPOllwLn0jWn1sM3ssQFclcGcwSEdIVHJuRT1ZXi9OPVVwI3FoMDdBL30/WC5beXBLbVZ+ZENjb25oIVkmJV5xK3M1YSk0K318Rj93Yy9QKSh4UTQ0ajMhNkQkYyIhaH5dO05vIW8mOGBDcGNDWFplLzR5VjduT2MiUmM0SExnUFMxMU50QWlkRFNaVj17VD19b1grR1Az''@;'; put 'put ''MDtVWiZaLEx6PHBwbHx8VU1GVFIiUV9zZXVWU0RNTmhtayFpMXBJOSIuLmBtTjo2dk5SR19iMSFfL2pHMmp9Z10xZEoheGxCbj0yMlEzW1dSWDI4SXpLLDV6bX1gJEgxcjMrMDltOztQNVUqb01fT1UwQHIqNHN0WzZ7M19gNF9nR299Z3k9RD1UOnk6akVJMWBvUDEpe218S1t8fFhTbUk8USVW''@;'; put 'put ''bURrbUxmPVUwVUhXVnZIcywyUCEjXVUmdGYkNUsrWjc/KCxrRFYhLG5yWS47QHRmfCZ5M1c3U29XeG0vUFY3KDR5OiRVeDskcT9nQyMpX0QrMWskKlpEcCRPZCxDbH16ZCVuO3QzNCVYMWsyKkxhSmpHZEg3XSReZ09yJj03fkBgYHJKSjxDPGpCfEBiOlMkV3V8QCJEblc5JSREPS84K0xjcSNq''@;'; put 'put ''cFA4S0omb19kMjBLZUN0UixmbkhuTzJ+dlVFXXdeRyVodkJ5cGI+WVQzWDE0blByfHIhRmpQL05Xa31zcGUwVmo3OlZ1QlglTSRRdlJFOGw0ckVtbmNIOkRgWmVxT3ZRZz1PJG9mS01qUG4mUGVTbVR+ZU9hKW8wRihmIk5+LypeOEp2SVthL2lLQz1YNVBuLkVYRCkxPXhabGNXLDlkPFYyLExr''@;'; put 'put ''QV9XS0YxdTpAQENqTj9Efj53U09reHVienJTWTJKJXluREc7cWdUYlplSCNBOUkjbTkrb3lJcEVXMkBdWn1MOD0jTmNgUFBISUFSJkFdfjE4cXcxRj9CdUI4cTRORTw7PHFzZHRFIUNER0tALjteM0o5W09HOiRNSF96S1ZBZWt9cUxIY0dKYGkjJXFnMTRJbCJyWlcmOTFFciRwa1JyIjUhQDpW''@;'; put 'put ''PkVVYEkrXWpdOjlCYmQ/ZEYiRTlTaCNiZWFpbDQ6MGFwSXltT0o6MmtObS9PIlk6c04ifVNrPGI0Lnorfno4OVZxS0tzZFRmQyhSd2xySnokeWU6cHR0WXVNSXA3OTpxa0JqeFNveUFhZzNdPEwyRVZVJTlsOGVQam5XXmw4fl58X1tqNH1FaHlOW2dYMiopTDwuIldXU3tTYkl+bzwrMWovTlRy''@;'; put 'put ''e20mZXB6QllsKl89W0wiOHhJWWhNXWBqXSh+b1F4bS5NWUl4cTlfW2R5YiE9UmZALjwrOFRkaVd1SURUSDIrNUklQmdvMWg/InJrTUQke21kSjFqVktnbkBPb0x9aXlMeUZpTXtCIkcqKiUvM3o7b0VHbiNXRXp3MG40NU4+WjJXfHJRfV9ERUwvRlAzRiRSVm16JEcoQkEvKXpASkRCMzV3VmRf''@;'; put 'put ''NT9PQnRBTzJzeyg5aGlGVXB0PnYiaVdtWmR7LD9YQzRaIXs0MXxTJFBOeVAseFB1KDFmTldPX1p4ejs+SEFbTDZpdEJdai5reEhsSHw/KDsuViNpY317KDNZSWlHbk1CQF82KHI0R0R6JDg5fEdwcnB6VVY8eXUyVHZDdCZCVV56XUpofUN0JEUjOnM+ZGx0ZVRbckthU0xVUktzOVNOJDk7Xy41''@;'; put 'put ''LGFQW3s5TFJzd2BCPVk9TSw9eXUyXW5NOyZuUkRHWylXTU5vdXU2eEBZUXNafERKL3xfY2h6TVN9TVh4VkcoeXx7I0FIc0w6Lkk0V1YjR2tkT3JaI01SakVWQyg1ZSFqLD5ZPjFrcms/LDgpXzhRQjJNR1Ntd0FFM09PLFg7aW4zfjF7elFgdk1DPVssdXxPWlBUd0pxR2lvQShAZ1Z1e0pAPEAw''@;'; put 'put ''dTlbLmtxOjluS0RaSyVQS3A5VlQlZ2tQLj9xU11yfj1VMn0uJV0wQyFzVlk4PEtzX2xzLkMqeXo1Z0FIQmBkUlhNLmQwTEsqKHNiIlprSWcsX0tzPHp0c0FJKSZnMHN1TiRkNkJMP34+MHguR2x7PFF2aHB9UUc2VEZeMXMzMnV3I15qbT0/MVNnRFJ9RSwyYSxNLnsvP2t2SFE0ITdVRmJ0Pz53''@;'; put 'put ''Q2QuKVopam5MaUtjQ1Yzd2ZOVzAzfjxwKmpvJnVtRHE4QXpLKzJsbnQhanlXcz5MQkgxaHFhS11INyNZViFuVDhIYzNQNT9UV3VbcHNyU2Q7cm5ocz50ekh7cHF9LGQjXWMldjJpM0s2Ilo1fWxnUEpZcyN9RTR+ZiYkV2dgKXguRUNhYkd2OW50YWF3JDMhXUw6OShLOzFRVzZBL1QlTXNRL04j''@;'; put 'put ''fkBrYF1vIVNfK1tkeVgvSTtTZj43I31TVHIvYTRJPj98VGB8bVQmblZScjxsclg1QisyKEE0KjY3O0JyMlJHST4+WyphfWRDWHZjKjFRaT0iNno/PmNuXU5eI2IjOllNOTAzV1NENCNvQ0ckLHw2QTVHMVV7JFQ3IS9TV2p7TSRBSi88V3g/eCZ0M3poQ3VMP1FXS1hRXW8xclZVQixVb1A2ZFB8''@;'; put 'put ''djM3YXRldFNqcXlYXyxlK0ZwKU1aXlIpODhnTCkwM0p6OTJYOClMQVZQZlFCVlNHYGBMO1JbMVA3ZWp3aSVHXmFrQnppS0ltRy51RzsrIjlFcSswK2UoV053YEt7bHo0Qi44SHkwYTszUnh7ZyRXazZPKE5iQjlMOVdeTi9rYmFyUiQ0bURzZHB0dFBJfHxaYlp9ZiRHWHwzRUdMYGlQZ0JddkZm''@;'; put 'put ''ZCpXWiIxdilAYUFgIn5WbTdUfFIxITdIR0leY3RCRi9fYWZgQnJ8fCI0aUpWWndzOkNHTmAkQj5wOihIV0ZTaCwkN0h2KEtzSXRINmowS2dCUDBiQDkoR2UoQ3lYcWRLQmpiNS97IWx4PU9zKWV1RFZnVnZWajpBaiEickwoP3gvY3pgLmk3Tk5wcHlfMEhMekhAUEZPdUlAQEVGfE9XIyo9SWwo''@;'; put 'put ''WXA1Ul8uaitYRmpGLF0/ZChHO01ERXxRdEt6UjtGZ1E8fjxTYCpXTGpwKX1bTTU8T3FmRE53Ris9W21uSmh4aiRdOSlPdyNkcHl1bCt4dXhqIzNvN2ohW247MzN5LEV9JEQlbVk0NC4pfXxbfWBofG9pTFV7c2M5PSMpIitvalJ1K09FQkp+dzxWdEYsLFl9eUhOVUFJJjlkemYmLmZEJVp1TU5j''@;'; put 'put ''WGtmc2JiTC5NNkclN0hpfSpLXW83LFp9bXhISEExeDp0Z3s7Z1hlcE9NS0slRXxlYl8mPF1zQG1dYEhTQ3NrVyR2RmQ4Xzc0LEIlNFd8Z3dvbSNAW2ImJjN9eVtmRC89Il43cGUsYkdiZGRzUFVLUCMjXSFeYUBbPkpLUEtTZzNIJDdlenE1eF1sPF4+ajVCPGxnaFhQLyUyPERyZkJxY2NVVVtn''@;'; put 'put ''dUFzUS51cj16TmF2VSVTS3c8ZTo0ZUVRYVlUeWw8PlAjZlBtNmg9ODF5RTRxb1tBSCl+ZlNGLC4wfVNbNXhZMXpqbFpPUEpOaHRwbzRacC9fd2B9X3FeSWRXVyw6WylxX3swZ1cpLGxzYHw3RyVXZ01QM093U0YuLkM3OH5iTVtkbW01dFU5alAhO3B+c11vPlpKS0w6N2l5MT1fUEhmOH1yNnJs''@;'; put 'put ''OU9dbz1COypCVF1hRWBUOV51X0toVXVLXzUvb2JGNT9IfiZmTWF2ZCVNLDszb1N4LihqXiNvezAqS25GSkhNKmk/MEJ3JT4qKjRGN2kqcHtAXmB1eChBRzVPZEpzaEU5d3UpaF0iNkBPQ3gvQTRQQ08mJEE8Pm92Y2VUIk45XmBHQE5FTksqWUh1cWBGOmpmWH0wNiRaenUxQWdrZmI4S30lTiht''@;'; put 'put ''LGkjLyZ6UlskNFYsUDBpfX4wOmpta0JsdnV2Zk18dFMiRmIzTHxTY0ApUXg8JHlEMnx5ZT9bNjpJOGZXa0U/QUAzZnBMS05YOT9wQ1VARGRKLz5QaTh3aWImazNDM1tdXVV0MCNYeV5WaWlyTlFFMHdtdTJ6byVvIlszKih8TGRkIWZTYHJXQFc/aFFndXQvMStNRyE8Uj5fZn5TM3tYUyNJVFRX''@;'; put 'put ''WCF3YTs6VE9dLytnTnYsRyI0VHpgLEh+OmxGNUYpZy4hRkcvaygiS2E9dFtNIXUuTDVtdjhKVCw6PHYuSjI9QTRedDQqTTA+RzRCOSgrNlF7Qy9DfXEmN010P0loLkNlPE5KXnl0LyU4aGdvcUh7VEptNjYzU3VRPk5IcEkhP0xLJGU4LyV4UmxEPlQ5LjJkIUEudmA5eldkfmBbK3t6UkJ3VXZE''@;'; put 'put ''LkZSUF1SU25dWig0Nk1efXZrMFdOZk5HZDl9OU00NlhLJE9rfFB1aDV7OFs4YWAiRUBTcWgmPTA6W21CRn13fk59dXN2N2A7TkRvT1ZQN0wxJEhqLFI4T0plRSsmO2FoUHBHNkpIIzIvNSIoYm84cWQ7R3ZOWXJMI0d8aTVKRDM4SDw7KiUsUWt8a2xweChkKFpTelFII3ltc0RUWGl0TkMzUENH''@;'; put 'put ''T0JpYjpDLlNtO3lXb1Q8b2xPdjkrZHJMUnI0OC5qVXdWIilxcix5fmdzP2Asb3dXOyNtPih0YlhsWDlmQFlGeGJNRE0mWllnX2M2WV1EJUI1STJBYjw+ZVFEWE9UUDohfEE5RE5BMltoS2tIe35XNHc8NCEuV3V7MU9melQxb2w2WGpKcnoqMSY4NHdYZmxAd3ddITJDVEtyc0xrLHFjXU0+K3lm''@;'; put 'put ''XVVPRHhiXmxrM15SdUlYPDdIQElNeylESF1qTTw6YTMoKXYsbUhVQjtlKUM/IVolaW81RmFbLCYkVD8ke004Y3RVLl9vQittJiwpNFBnIUhVVH5oTT91aG4qWDFuPXMvbiJjKHNtPnpZIXNRVTJKNTJ+X25uNisoZlk2YiMyQCF4JWksWEdUOjR8NCZbISNuKF5xNmAia0ZvI0I1K2ZdTFhuTSpk''@;'; put 'put ''VEJfIXFfT0lWSVRoTD5nOzhgQGdBSTZRZCNjT0wubkdEe1B1RCEuXTxtTU8xTlNGW2psMzk0ZmkwSFpRZ0RmT3coKyZtZV0wU3QkVzBwKlFYVXpiP1EmVmxyaEh1IUMsXy93enAmQXNgTUxhNTttL3s2TUlhJiN9eT9IISJyWjFSSmJ5dylyMiNgWVVNSCxNLnwoWzhwJXlvOG4yKVM3R1opSH51''@;'; put 'put ''X1BvUDZ3Xl4ve0gwZSxrfDZ5Pjg3YT9HQjBKUVhyNFFGbF9TLFJWN1tDZDd2aH0sQ1hNTFAsNDZpPjNEcEM2OUxKaUUhXmI8RW51JlU4OFBmYn5sYylFXyt3M2tnbG42aiUhJXEicSpOfTc4WDdKQV09Pn48MVgxcT5WJi9Jb155dXRZd100PFBgVm1rNihEdll2X3h8WnEzNC5FNXQhOjQ8Y2E9''@;'; put 'put ''RThhMEF1YD1eRi4/MlVudFM6LE55M3xOKiI7VnZxekg2NG9ZTmh7PDYmVl92aiNgeUpQZ09+ZzJ7TztXVEpnJCw+UD5JQmZmakBeI2I9XndYRVh8VklnaCp4dnU8eDxjZExNemoqcjk3alg9RF8+L0ZxXnckdVJ5VCYjMkY7dFZ7KyM/QlUsVHlkO312SzB2XzpLWHlZXnlidCYsY2E+QEttNjVG''@;'; put 'put ''bGQzPCVGbU9tNXFZdWxaNlEwXSE9NGpRbz1PO2pzRTUicj4hRUsrM1NuWVtDWVc1UGs4JU47PU4/K1t+RDtdKmtpT2VLalhKaXY9P2Z1ST59MGd4eD5pIUNzX1NdSCUjezVLLkcoVGNtX3Y6K1ZUMnlBQnY7QlU6UV9eUVZ+ZyN5Kl4/YnZ0dTpWSSJzIUhiJEFgUl1uLF9pZl55cGs1b3tKWXQu''@;'; put 'put ''IlN3TzoodUEzL0BpXjpiYzxLTUpqISpvSClYczVrdChQNkcvcltZYlVkUlo+IUNIfCZ0U3pRL3U6NTgxI2V5XjdOdDhvOSk0MldVJnpvPHBBeV9aQHJ9dG0wKURZY0UqI0dJNkdAOmhAUlAxYGlhalBZWUtHODAmeVBiXmpqQlZ5MXJ+R1RpJSI2UEQpLy4yKzVAbGRtbHE7KzVuNFs5ZyMhbUtF''@;'; put 'put ''RVVzPEZbMVZAWyE8ckpmTHooZ2MxTnlNSjFCSEk/Q3NwbW9OSVQ6WmB7SEBELCVeJHN5Z0VKKG1eNThOYj9LVj18VSR3S28wTnNCNmkvV2leLG1BPFQvQztgfj9AbThFTnlxTGF6RG1aZi5HPDdHd1IpKEomfVF0VWIkfnhaQC8+SyhNWWAjcyh5eyhXai5wYE5CcURyemNRdDQsIyZ8dVNhWXZp''@;'; put 'put ''NHMqTlR6MnVIQlYhaVNtVTx1TEF0QlBIXlgyeStWKnhQYVJEL1h8SHAmbkNULlcwenN2LD1vPmI7UUZ6cV1nWD1SPnViaU1wP2Y5aF80aFtIeUdbd1ZeNjMpWUpLK0YxMD9qZHA1QXlEYkhmOXRkIm05OmpmME48Wm87K2tQMkQpWHx4SyZ6QGE8QGlnOUw3NzlHZHR0ejU8d3wpVTRPeFskX2Eu''@;'; put 'put ''X2BaWHJfQHlvcD8rckI7Rl9gck5pU2ZXdENOail2PlcufDlGQC8wPlYyUGxJay9DcVtBRThHc2tla3RCUmN4c0BLQUBZSGEzemFLOlN5USswSmAhTXZwcmlKZX1sMyxUQygyQ1pSY0NxRm9TWG9KXTUqeXdfb2tkPzVVPG14MnhuTGN0Ryt4QDM1IT01ZmheY28jOm0+eXorfnFuJHUrfnJCUGdo''@;'; put 'put ''SlZtblFXPjx2L010Ol9XNFhzW3BidTdCcVBzVXYhVT5YUmpUKXBsM0J9T2VrLnptMU47NTF6bSFOT1ooV25oSEpNVFZ7aVc8KmArLENAfXxEQHRUaT88PTwjeEoxfWR8OmxxLDlNMnxdcndiUVcyfi8vJFN5QFhEaVsvISpEOHx7PjNAPlZLRCNZL1t6dlcjaD00YUBDanxQMn08PU5lRmtZaUJS''@;'; put 'put ''SXpzNjxve31YWD81Kj5IcSF2Y0VGUzhKRjwyeGQmQkh6KjtwZFpaOyssLG9ZTU1eM0JXNmdEalslSyZvQDVhOjpAQnFnfGIsdV9YYF5YI3UwOElyKDw/WmxsX0xYcEJDUihufUBqeWsweFdiUktgVTlXKT9xXXpgazt5QiJtKCZJSTVUdF1qY1YmQFIhbigqJl19Nl82L0duQy9+VTVuPUY2M3F1''@;'; put 'put ''ImYlPUouV11LdDlYb2tyfjJ8N30mY0oidm9XdklHXi8uK28mMGlbU3JrJC9vKSw2W0lQS1ZOR2NNdmIuRHF3KT1TWExoeGBPdFpWYG00WiZ+cz8qUnFnOD1BX3w8c0V2SE8xLmwxP20zSXEkZixmYy8ve2hQUjhyW1Bad2hRRyZWaEQrRX4sUytXJXFLdUYman5FXnlpQGg6JCN5XXMjXWtgLGRs''@;'; put 'put ''LFV4Qkc7dTRKU00kUWJYY3hjKSp0X1hxeFV+fj97OUgkeVZKPzYuY1QvK3EkcGF2SGQ/PCJ0JVYhVFFudz80UyIwKUkoUyxKWHI3L0RDJlZPeVpdaDRfWWl0Z0FRdE5SRyNnXzRyWGJMXnYxb1FpWEtrYjcsJWBmSCJGK11EP0ZrcVgiK15wT0ZaKnZ8VGxLY0N8WHpzZVFNYjhKSDVFIzd0aGE/''@;'; put 'put ''JHZLN0B2N3g5JkNUaT5AdXVicW01ODJaY1Q8dVhrS2FWd19QenR6ZkQiY3hiOStJfSsxNEBPRW5sfF9vS2lBaSJieU5zN35yK319eTU/QDFDeyprbjNSa15uK0ViVylIYmdkQm9MMTlbUXFDbnVJQnxUWXk5eit8XnFkWCJuYG9aczNIdWUveWJNYm1ZOiY1eCs3U199RndJYEJKez5MVmcyRDd+''@;'; put 'put ''Q1FYbEp5RWdnOHApfG5OKVkpdn51Pj4qdnoxL1U+OSRNV1JFfGJDT1l5KDsqXW1heWJWRDUqTTVZQ3Ekd2JXNiZkdXV2YXpCe1ZyJiErSTA+REBHWSt4OUBkWENXdGg5IyV2SVBdSChle2xkSmksPkUmVjhXT2RgX2pgTVY2Z3RKRWJpV285e0t3KlBpSDdga3h7YU5bMSQkOkhPOHQ3XlZXajN0''@;'; put 'put ''NCFVKzBhL1N5UD1qNT1tNEpLdCsqaWBDJXFjPzJAVU4yWk82Z0hqU0Y0Y1RRbUdNJWo/b2ptQTQ5MVNRO3RhbFdCVitfcDlVREgvZjhZUVR0M1lIVDZvJl1ub309eX4hZkNBZnVVQiooMXc5SmBBWG1COE1mI3czQFh3IzZSckxOMn1pIklKVS5pKG5oUENbcTFuVnR4dHs9bltGQ2xqfXpDUSZE''@;'; put 'put ''e1p3PHA6eEwzTDVrYnpWelFMd0pIYHZDe1pzRlVySUZEJVFOQlUpTHFmPC5Tc3Q0KltMLFlLX3hfRjwvKWBxeiZaTEU7YXFTdXVXfG8zV102L3gqaiohM3V7eWFVdTJ+Ukp2YDF2VGppU19yey5VI3BYLHhAXj0jRFBRJWBaP2ROa2sySipPRT4yXVhDdUAiInI7fmwmP0x0cT1jIzhKRTdSNl1B''@;'; put 'put ''RDd9fCZPXmlsSlBzYzd+T3tvQHkjcmFmM2JYWU5gRGBRLHliNWokeDxaME88Uzo+Ym4wTXFDKC82U0EiP3M9UD4jTV42I0RpQVkmOCZxUFBaR0pLJkZbQj1kZXxXVUNqKXdOO2NSTVs2LnJHJiVwKmloQVBMPHw2aCZ1NyNRanx8NXFtWyp1QGFUYDtuSn5FfG8oZnQvPlVCQn4mcjx+ZyprXlFl''@;'; put 'put ''PXVsZ3UuNHtrTEI7ZV11MkheN2h0XyRqbnolb3FKPiZ5SnwlZV9bMCsma1ZbVGFVakohR2NGPFNHX0hya1ZPN0NZRF9OMG4meDlbWFUsNDlTYWs7SDtAa1suYClLNHB8ViYuYU5PbGZLcnpwPFtGVmhjV0QsVmdnYG9qM2tHflNFYUA2REk6YyRdV3xmYH5tSmw/LzMqMmdMLE9LcClfNDpmYmx1''@;'; put 'put ''OVBHWD82bygwYD9FOWVlKU0uaSFzTWNXcGdVbik5TkZmJUBjVmdbZkJgVH46SWk5OFlMVj9zZm4kXiZEayh1Q0AoTDt5JDx4ZSN3VzNKNGZedTQxO1pNQnZJSj9iP1I8PzteSF9gfEV8JkV1fXZ8Ji5OM1dAdzZ5UVdUOnpdI3N5Z2JiNz85QEtdbFRHK2VURz8mTSh3aVMsdjl0aF1mOUQofkZ9''@;'; put 'put ''dSlUeldKemg5RD1vbHM/NFF2d30/V2hKRlVGZ2hyR2xdamA9VjNESX18USk4TXpmS3Y4Q35OQU1gdmNUSElye2d6KlskYHptLDNgcERfLE5xaGZDbVN0S15EeCh5bTdSJXF6bDBxSzAqbFg8UCxFOXFxSzdRMkM+Um43Ojh4O0xTens3YSFFUVQoIUVOTVZEUj40PWIzTXpvPEp4fHBaZWNkdH5C''@;'; put 'put ''KFQ6d3tHUT0kXUcpfWxYb1RyLD49RFJOfE0hL0Y2cFNyQn41USp1OWhdbzlAWCpOelsuSmNIYkU3OE9dUUcwRCUmX21fJGRaQF5IaUh7b28hJlNgdnYoWHMyX0M2SUttInU4NW96K3dyS1tVPUBUTHBgfEdmSD1EKFEsNTZlUl9GJHBtSi5pZXw/MDZXUzM8bTgodUdjfl8iNU1UWyt8O3cufHx3''@;'; put 'put ''NHUqU3RhQWZmeW08bWEoKjp+WFFxbl1kP1YyTnpubnRfISlZbWI8N0UkSnwwP35WXSR4QlYkfXlGVjF8N3ZPYn0rTWR1WnZ6eWxddUkuZHtje3ZmbHYrQFo1Vi4/WGJQdkU7QFt5aUpEIlF+LD9Na3Y2XXBdUWt8KHEhNEdiZWg9VGd0XiorMXRHTy9jbTxURFMsR1I1b2V5YEIuVEA7bkluYDti''@;'; put 'put ''Pk81NHJLMDciXWBCNnczenxpcXgkZHUweDxrI00heSZIYls9byNjT1QjayZvRyYlcWFKcXNedUtlcVIiWmw3RHYsakdeWyI3JnpAfkpSVXFSTXhue0RpenwjRkw3PCEiQnlUYnU2bGpQZE9YUDsrNVdURzdhanFCKDhBb3V2aX0zNnw6TTJSbFpyTmRAJEklcCl4b0cma2ErVGo+enZaRU4pQ19M''@;'; put 'put ''fVNUSk9UWmguQXl5cHdjQUVIazE1L3QmUihLbC9vMltbR18zNzV7bnJOaT5rezU0a1NHTzg6TW9uRC9NcSk4XShAKlpuZHlJNjhvTn1rPUtbdGpnPEk1bSkrSFZEPzpVdzMyZ0JWRF8hIXpUYD5adyMkJHt4WTV9fHUkQTIiOTpyJXRKTUl8KGtzcDB1Xm16eFBDKU5EZisybDpgSEk4OSQie111''@;'; put 'put ''U0U5WXt1W001SDJOa2hOQEZ0M2ghNHw0JUZfa3Y5SzBzW1t3aCU6cVZ7W0RWbHdyMH0zK2lKMUhhbGF6VEEjRH5HSjNJVVdmbWsoIStVZmgxNVp+JmAsWnw6I3kkUU5rS00hUylfR21Vc2B3eHR+ND5nIl8xR2gwRipAKiR5I2pnOm8lYExdZnZHSj8rZWNNfDJeUjAuOX1gSzpLWiNVXUdte2ws''@;'; put 'put ''OGBWcHpfUzpAXUI0KkR0LEc6Y1pHdDE7VXU2VyZteEs5NWgjY203Tk4+fHlTOzBtSG1HTEshOEpkcH5KVUd9R2JCIlB9JWh1SWVyP0lNfixxMT1XUlQ+WUdCQH4sfkw9JjJ7I21pUl9vclZEMHpwWz5PYyEpJnluUDtsbUZRM3YrJTI5JUFVWXBJIW5neFdqdVF8JE4oS24vRHhMMjVRYGFKN2Yr''@;'; put 'put ''YU5iZ2taKU56NGxhTVZpT3h4a3ZuVjhASTwkNHZzVDpZYlVsZ2BzfiptYksha2o+LGhCXnttJWlXayQrYTtLYyhXRCk+XzAhSyFkcUQ2YHI6dFBUblIjUlNkW0lVZD9EQ0tMbHpETCpJSWNdc1EpMzIxOVYoWz5oXUZYRUhOYy9gbzA1fW5MQH1UOU93dnBDSGdrLk8uY1Q2LFFFWSZnPFVMS1Ms''@;'; put 'put ''LjVoV09TS3ooOiVvQGcwJHsiVTA1UHZaa3liajlZYkIqb0NPOWUmQHNzPHJ8M04zU0JQcG96VnwrQnpJZUVRbnQkYlVleyl2UTBzYTNPO3hvdENDWy9VU2Muc09AM1VzTWdxdHA0M09xaTJ+bT1Mb3RAKm05aiJDcnwkRGk0VGRSPHEoR0hkL1hhLi5nX2JYb15ocVJQRjUqbk93Qi9BfGdYdWpZ''@;'; put 'put ''K3NpL3k1R1ImQ0BNV2QuXj8kaClxN3V5S35KQ3A6M1dWIkh4cDIkZkpSPXgjd0s7MmNLNldRNk1eI0J1MEluWUpZSVRJSj9NTUpMejpyPkxPUVF5eGVAfHpkNFl0VixtZDtXKEMmPXYxT2lrdVJmQlsxY3h+WyM9dzJxalNSOE4mX1ArdSlfP1NyP0hrOD05PTUsNnZ3QHtZdmw+NkQ3IWl9WWJY''@;'; put 'put ''c31ecS9HPzV5cX4leEpySGxXSm9dRHdjeHh0NlpYX1lJUmp5ZGxWcmk3diN7MHxfUTt4c3FAdF42bltCPGd2M18uQjY+MTcydTAkd2kzeGRTXiVuJHpKfjY8K3hyImwjUkVMYWFTYCp6TnFUWDFYTjh4aGNeZW4qWE1VTEdbd1FYR3A4KFFRRllLP2VIdSQ6eH1lNHUhKGFkdD4+SV11Ik5ZMDo+''@;'; put 'put ''b292Yzc1NSpzKGI1UlNtZlU5LyV2MTYjPj1jJnJOSGg9c2RVSGteNn0/N34re1lEJENGLl9HU0FYKzM5JVhKSClje3c0bm1HP3dsTlJGVGhnQClsIjwrcGc1aFQ0akZmMEFSPWZqPDBSYTJFKnlRUnR+bl9HbSptTyFVLnkzejVzW11SIzFocG1vSDBoW2ZPUjRBQGAxSWBRZG49XjNgVlVfNUdH''@;'; put 'put ''RlRmLjUrO0shLktUZjU2ZVhfXW0mXllQTEp2bkJBXVtNUSkzd21RfjpAXl9UQWc/RUtUOyFoLEkxJS98Pn5pJFVtS0gzSkdbcHd5e10yXyJEMC90N0o1YF0vKXA9UiFOJmc+aE9UdjxJI0VSYT9JKHp0b1YkPyt7TypiOz05PHMjZCpxKzI3Wzc+JiRvcUA0Ymg8WXFBOj9FUGg9TUpLP3khVTJA''@;'; put 'put ''KSIhMWI7QGUyc1goSTVAR2gpRVJIYkdpWywkZjB7eCEqalA0eTMhWV1fUXM5Ri93U15NamhyY20uMUNlTClYPCR8QT81c2M3KXg6enlucys+Q3dgPFQre2xWKEAqSHJCOVlzT3BkYDdMKFtQKFBAR3ZPPkN0PW1EMGU3XUpqZlJrTytTL2ZiUyR9ekoyQTU6ZGVbYGNdVks1cz1YPVgiOGYqZCRv''@;'; put 'put ''NlZxXjJ4RitAPn0jYnxxaVhSMjMyXSh8e2gqNDY3YFtUW3QpU092UmF6bWsyN3YhKmZjcm42XjA/UT9nWXV2I0d2UCFXZ19ZKGJUcm00ayw0YSVqSlVqX2h0eTZxaGJddzc/TU1lNzJwN218LnFGQyNhNDtkV31sZkB2eUI8QFhxa1YpWn1kW1hValsjfmJdVGpNZXhRe15aKUtaPTBhaGZmIURj''@;'; put 'put ''cmlzTTBoV21OP0pPZFA6dkkzMk1BMTQ4OGI8WmBTN11FVmtsKnZhM3A3NC56flZ5Nil7RjpyRFhVaDRXSElCdDhvWyFsTStJajgsdmdJKV5eRj9JSFVCInJLPDM0IztlRGFZbXcua2c5d2hTWXZlZnQuYXJATDsoMDlRb1I1Vz87RWpEXSNnY08/QSkrYSM+WylKVzVHUy91aiEmZClKSTozPEtv''@;'; put 'put ''LyNTSDwyIjhqcVoxe0wiTkhQMD9xayRUfSV2diV8a01TQitibFtUISh5Izs+WX08W3RhJFdRWnUhI0p+UE5RQnU3QmYrPnR7SkxGJlNlJjN2Xzx2TiExc3dTO1l4W1I/Z3hUP2NIMyk6OnsraC9jL247dFpiI1I8LGhgUm5EQUZMVnpLLktHR3lAZlBzK0k9c2RULjF0JUV0d1szPFQ5S3E0Zl8h''@;'; put 'put ''XyteXWFvTz1AWDwmUzdHKTtROUgwSTRNL3hteWNmfFQxYFdEWk1ATCYqVHRXTy9JU15vSmJCdTZBREsuTztgdjMmR1h7WkFiYFhqaS5IfXk9VSJMfGRtZ1grInhIKGAjIz9iZFMoPTM+LiV3InEuXmhOWF1MJTtbYyRqPkU/eU15dEM+YzpqbDUvSXVXfCk3QDM7SUleez5hcFNyKTVENCMyZSYu''@;'; put 'put ''fiw2XkRaWyVjJi90dFNlTUlEaiwwJDUseCYvWkk1NkQ4KiFXTlpWTXt3OHEsYUxCN0F7eHpnMyp4RG4mVWxmOU57bit4UWw2OkpfKSx7PSI9LHNhMD5walZYOX4udn0pOE5UQEc9cyVzcDsjbCJFLF9ecHpIImo/eCpkRVRYTS43NnF3bnhhQTE/PHU/b1lCKC4wYG44eWI3PylyRT1EeWYkUUFd''@;'; put 'put ''P0dbSngucHNrfXUocT9NMW9WU1hPVzZoYlpLaSEjeCgkODchRngrZDk4MmZfTCJYTSZYdmokcllxMW40N2h0PmthXy9keGZJb0IyWCt0c3FYKy9neTNmaWldbkkkTVRvaD10eSx+eDxvMDAlcWI3V2BpbDlFP21FUVdrMmw0R2c9IlVtTVBoWk1OQ15KLHVrOHV2aEVyPS53RU8rVCxsWGo7XjVA''@;'; put 'put ''RTEmMGBkK2duMSkqbUB3TkwiMGdtVV1MblJpUSs0IWFhSHxQa0c6U29SaXFQX341cl9YdnI8TH0vXj9QMiEuJmNTOHdnTUQoI05NTnJnKT86STdKRG9MT2kkRWhiWUpKMmlKRVl3eWd7Qnp9JTlJfSowW3tLfDg4LzMpWz0hOikoMy9URlFia1BwbXZEfiUuK0pyKFZYZCx7R3YhT1RmNkssR2Es''@;'; put 'put ''NzJAO3RwZE9IIVJnY046TD88LnF9WHpzWHgyakI9NzV5KnNzR2RhWHRlZF5nayNle0dIL2d2VSZ3RXtBYU0yYUN9ZGRqJH4pN1dQPFd1UWFzUiVLZEwqcEBden5JWzo8XTlWSSRhYzVDK3ZLV2MudFA0M2UxXTNKRlQuI2lBYFUpaCN+WTZKVTtVdFBGek5qI10mMWEkdllidUhIT0xEU1tiQlpv''@;'; put 'put ''O0NYSVpMVUcjTyZaa0pEI251JHw8QzkpMzJNenFFUGojaiUlKHloaU9LaFhtTk94YURma0kwcF4yNXhhVFMqZmskWCIjeVlkdUtLJTFSNVFnLjRBJFJKNDxfKEdIYCE6anxLaGVyYFA9OmxTYEwvUGssWjZyYyY5M1EhZmxzakR8ZFBRPHs2KVFDOitsTT4pTzFwfWl8TCUrWTJ3YlhYQEVtbTNZ''@;'; put 'put ''RmRIQHFzQCo8VXhZMiFwNU4+RVZkbG9CIVs8P1o5dW8keFl6Yzg3Onc2Vmt2RURVUF8xVTAqZE9aajRuLk0mK3x+R1p4ZlZUT1MkNmUyekkuR3leVzM4L3UxcF5eI3cmejFVIWROOFNbMz0wRmIwIU8uY3pgaExSeTNrTVB1MyFMTzNqeWc1YlZ0eG5pKUo9MTE2fmFjSV89ZFgxUDJUS1dZczpD''@;'; put 'put ''cD90WWheTHEvX1MzRk92KDBhbH46fGhzezh5W0B8e0guYV1ORkhVN1oiJUhmQXM9LD19SHRIRnQrUTZuUTZTbilFNSple3lieUYrNkNgXm85VEF1ZHEuXn12WSZnayReIyg9cF96YHJxaX5IWD4pNileRD9QIWokO2JbbnM9YjUhdWpGL2A3bHRhXkJvZCsxJD9RVURtZUEpJVl6VzFLbj5SMTxx''@;'; put 'put ''Lk9oSWhAT21JZTU2dz1vNEpZNi5LV2Q0ImZUNEM7VGhiQiNkUCVRdisrXnxtWUZ2WkddIV9YPW0lKVNWM1IkKDtvenk6LyVxUkcsSV1sbm5DOzwuMkpxfCQlOV94SkVqLDdFe1NZc1RbPEg/PT5geFRmWVt2fT89Zjg/PV09UXFvclVzMVVtV2Uwd0U7N3VmJXs+PnZac290P3RvYWtycUV0KixJ''@;'; put 'put ''ZyFDV3dQWE9CWGpQOTFeNFVgWVF2PiIjKV9bajpsY2VLLkBzLy5mNSZHWXBjIzFEOGZiUXhsUHxSK2MmUVRpKXsjY0E7ZEtMc25PSktwPHwlQClsdnNpbHFEYy40WCFPdnE2QWNMe09mV1JXN3M/WjdIeDFyfG9oKDwmZWs6Z0FWUS5dVzRzYE48PXhpUHlTX0NrX0dgVCMhSyZ2aWlzYkskKEE4''@;'; put 'put ''UiNTYlB+WHA0SCM6RS5mfTlJLFpseGhYdEg0Lzx6NkZ8dVZNMkZ6SE5Wckc2MXpUTWdzazprbjIkbkxKO1lNR05tbTYkYj80YEY1JH0kdFtPUVJndz9maEN7S2xTTjk0WDZKOks5SkFNQi9TNTFJJUZyNWwhVW9ROXU+KUZiQUpPZmx8fVplRzNqPyo/aWVHOUdaNDU/TWZufGZLbSU7QHdaMmpJ''@;'; put 'put ''fUtFZFQmQ1FqbWE/Kz14SGxMYFdRW2MhJnRTd3o0M1lyKlNKcVprWC8zcWsyQGJaWCwsVCFaJCFyPDA4O31fZVs2blEvdksmODd6Wj5feS4zUnZpLEw1QlovQzJIVHk+Yl9IfjFmcH1nI34lb3lKOVoxLz91Kk5QNTI/eUB3KDJuWnddYSkmKV5pMHxUOE1gZXp9UEA5IT5XS1MzOm9gKXpyX0tW''@;'; put 'put ''TFQ8Q1BCTVREfUppdVNYJT4pXnssWnFsejZePVRjTileIXljTXpldXIyMGIqdk1pLyFZem59fm4mYX1jSj0wWmJfPjlDYCpRWHEkWFNzfkhCeztRZ1o5UT1XbF48d1Vwd1FPUjoyWEB1NCRCazI9YTwyXl5SJV06Sj43I3JDcjIxWXIkPzNmJl9kZG8oTDc2cFFqIkBPfTR+X1txMyExTi4kMGBQ''@;'; put 'put ''fFNDfWJaQFtNMTdeKlF0WyYucV1XakY3TDpOKCNJfHcmJW0yZCt7O1d+XUY6SHpfak8jZWR+L0lsXWl1fCQlQzF9YnxkQGZ5dnl6UiMsPEdgYz9lS0Z4UDxBdl87ejhVVFNTRVhefFhTIi9SeXc/Wi8uWikxRHladVBFcVRAT09GNjlzUmc4MiR6Wy5nQFQrdF86JiJQRiFOUSUhKGVHQXh9Jk9l''@;'; put 'put ''al0wVChpej5pNiRXX0pqVDFNcSFBdUsxa1M5PVtXRyFAc0NfYiJ3ZDlyNj8qQH56UlVmMkUxI0UjWWc7KV9RaUd9TENfQzxlMEJBZEFIREVwa2RLWGQiYnZSblsuOl52bTU/MkgpbjUlQ31DQWNAc0A8NDpOQzExQE40fSJZSiVFR2NLYy86NE9ST0thSGg/V1RGW0F8PmgwdVY1VnhfcV9SYWJz''@;'; put 'put ''djc4KnFnJGMoaSpWKDJWbykpRkczc0JmYEFpMyhVfDRgN2xzPVN5S2Q+W19hNC53RmBGXnx1ZFsiQGEydl5xT1dZX01dejBFZ0NLWzo7XV1dXzNXMCJPNkhDNnU2JVdOJWZ1UixsLHxifC9YTmMvVCpbbXFaQnt8LjMwQmVIMVkqdm9WV0w1bHpEZl9kLDFpUTZzMH1DYyVERi9eM1YmYkx5LCtn''@;'; put 'put ''OE5WVCV2M3haW3hMaTBOJmQwRFY+Si5oNmtWRV0hUDIjclF3P3ZKIXo7WVo6LChJKThPXj82KlkrPyErKlgxWWJTb3VsTVRXXnJ2fEphRio/UH5+WyhpU1lKZjhmUyFsOE42TV1RcEl4UzEqT0NzX2lpcCY8dHxlSUk9JndLYDBVRTtUOjxUO0VkVltCX2dLK1AiOn5OYE5PUiZvNExmRk1nZTx5''@;'; put 'put ''ZnY5JiEiIUkrNjVCdSRLXiEhZX1gcCk+ISw9Ol5qS08oanFseX0sfGs9dmRnfkFwNmJLMHIjNUhIVFVqNnl3S3JgUipITzNgSDN6UVdoazo4JSMsV1ZFKX04WUo3JX1CKCMuNHYwIV17QTpXVUtAJkN2PjhwSlY4K0UoKUwrXTh+NS5Be1pIfFRVOERWOGFhNTZGWnc/OHBSdjMjPFUzVCNeTFU+''@;'; put 'put ''SlYqVyRkLz4vVjRZVW9MNmpGPj1OWCRSSm1OUE9ibTNwV2x8My5zUzZuNGdfNHo+I1dSW0kuOiRrfDMrRnpfX2hSZHc/NmhaQl9Acn0sci56VFFATn1BMlBZbTNAZGl4MnJLVCIyP29EUGk7e3VoOTE2MCI2WkZidzhCaWNIPm4hblYzc2dTU3RCcyZUfTBIbX5STD1zU00mfktWUkIqRTF6PnRk''@;'; put 'put ''P3h5US5RNSR3QkZESH1FOmQ6YEBkP3oqcjduQUZVVW9CT3l0WjE0MTRYWXkuI3VtcTElJHIsJF00em1BUG5RZTxmdEtETHRmJlokaWREWCN7TWt1SnVrXVgpcXYhZ2hlRXBMTjNGMjIsfFt9cGRCZWkuZERCej9qJHxvWnomNihzJVg2a2ouN1IwTUw4UENuOyIjY0xNOkZGZTRTamQvdk99JjZr''@;'; put 'put ''RWkvUXZZWDxUM20qbjRUKFJIellgTHElXTp0X1ZaVyhAflhFS3Q3MXw5V0QqKFVPKyFYbGh0Oi9XPiVdLkh4cnw6RXppOTpDY0UmYT9EfkkqWDFaWSZuR11ZQGphfVlIbmM1V140VytZS29OfUh4YHFpKFg6eWAlMnU0S2B8M0hEYUFNRHwhU1oyRXJJdlVUOXBfX3BZKjJtZHo0X21geGNKVH0v''@;'; put 'put ''Wj5OUCsjfS9hOntpI0BjSEx5bSlIaiZvIThnTlZmK3syT2RMWkFyfVJfXzUvVHFkaSxienR6JWVOKilnMjNrLD1xQ2dkS05GRyZ4LFAsZXVNU2QwZnpJSDYwNEtFNktbeyEqY3s0c2FgdDtPW3tFZ2BTQ0krJUQ/WyolOmk9U049Ik5vOilULlVUW09MUnZHP0ZkMF9OJSwucz0jJTFIRmhVbzha''@;'; put 'put ''KG4rQDw0aFNTNVMjKF9bLmxUZyFNdXZ0dCM1eUBDbU1STCVNQ20vZTM3X0pubixWZ2hTLnV7KntzMzc2KW5Ee1EjfmV0IWB9fn18QlBRRF1eWnFNNlNHMClHL2JlPjBpWkJfQXJfNHIwVGApWntvYFVPNEhsKTAwLCFFNDMmR0ZpXnlTSUVJOTVYOEpWdSV+Vm9QKHo2VkRIcnxdK3IqeiN7QGVM''@;'; put 'put ''UmZOel4rOVoqNlZ1YlRgaV0uP1Z1TX14JSRSPSVJb1N2Wk5zVGROQylHfGg4VjRWWkdybk9iXUZbS3hHUmN7V2x5QjlSekMxW2BkSUJEMjc1dTVjTXQqJHsuNmNdazhzX2UxdT4peTtae1N8OVU2QHVzODNFfVBCQ11MXjB1RT0/MVBCXTliLG9YUndhUTk3QkEvSyRtQ2BMJHdme2w+fE5FLyFt''@;'; put 'put ''MiVDMHBHMUZIe0lSJjB7O1NFLjUqa0x+YHM1KiEwa3A4MF59bUZuYCFxQX4zZS9HPTI5NGJXfDpbLHxhXWsqaWFtR01LU1QjYTdWOkxzbnliaWRlUXRGVWhYUUw6dFY/ODpBIyZhIkszdmI2ajEmTHpdb0lVWStaMSpKKnRKY3RgVDFYQ0c2M0wjZkFlZVJeTWgrOmY3N2wvT012LDx9Q0dRbF45''@;'; put 'put ''KjVCakRFeFhXYFJESzdYWEQ2PjE+Wj5yW0VAPUJdbWh1ayI+KmVmLHtkdjhrUnEkelFbX1U3azAkTDl5ZCZwVnYzXlJOQWdwU0A1Tm9LOmg1ZnVYdUgqbm8iJi5xWXFzZEs3KGRsJmp9MnZ3MzUremUmSWovO0N7MWkoLjpbLHkzImJ3aj40OFUySVprRGosYDNFWmN+TWtLU1d6RXgqKWRzYEcm''@;'; put 'put ''RGM5bVEzQzd6XnQ6aGBXaD5NVVdXZz15YSE1U2dYUDthe3ZVVzJnJV8/Jlp+ejI/PUV1WG1TWnhSfCNTdWZeVlIlcDI1KGUwYC9OIjVManBHV1k/KEAwaCJmMn1aI0pLKFpxR2ZYJGguLHAiPnlJYVssaVUpRyh1YTIkXnI6cWovZj9pNjB2MUU8PlI/OFdCa2NSMnBAdzZnO3RnaiFCcj82U09t''@;'; put 'put ''UDoxIVghQGlQKW85aXM8U2NoaltFI2NbVlNgLzFpbmo5fC9LaWd0Tmp5ZFIqZWYyeGJtJTptaSg2aXtWN0x5NVI+ZjxrXj94QzBGU0tVOCNNbj9VQ1dBakklSjB7fT1yJndsVj5tWit5dl4mQj5yUlN6ZypzWTl9N3NMSXM0UGpLZWB4fGx1JkhLTCpmeFdFdTR6ZFBrUDB2WGE4c0o3Tk83O2p0''@;'; put 'put ''N317b0hzS2M4Y0lPNCE/UDI+YmFPKi4+Wnl6cCN6T1Q0dDM/NEYxcmBWLiRMKW1rPGIsKkdVbjJNYmN1TXwkNGUkSyVfRkM+RSFvTE1hczMwVU50KmdVQyZxZC9HLygvWThAdjFNU0g8KSMye109dUh8OFMhVihvS1N2VXgmciMqJFVAdHBHZHIrZS9ncmRofTcvLnYvSFV7PWNhfiwoJC88SThl''@;'; put 'put ''JEAqVlVHVGtjMDtyZDspTSkiVSRBeXN+eyl4e2Z+QSN6NCQycCpGaGkjfSYoPm14QW9uKzM3VkJ8KCJFZyxOMip9X3w9fXA/dm5uNUV+PG4rXn00aTk0eUhFIWM7UmNKUyUyNXopXV4jbGsvLCJ0aiMuSk9IKUNsNXpTRkN+JV0rOSp9WWRmaTo1QlgsJjcxY29mZGgxNSh4SGpDYU06fDJ0QDlW''@;'; put 'put ''SUxpI0l9Y2pKfmxLTUIsN3d5WTs5UURSUUFZYSxFSVgmRXVqJD9aXzp0enIyTHZzLmcyKU07XnoieWBsb2Vhak1aKXBvdmdSLEchK115Sy59MyFGQzZhW2ZYcEg6fm5KQ1hsPiRbPDNjTVFpSitPOzU2PXZ+LmA7SWV6fXtdXjJDeDd0TmpDRi4uaTNwTTtsMGU/dT5raCFZfSp3Mll+MW86b09F''@;'; put 'put ''NUlXPXtAISZrbVREK29PcjA2WS4sLnFgal5KQVZEb2Ayd29aPHZiTlIjZ0R5PnQzZEZlRWhnbGdFa3JyWCtsbzZSUDwjWDtnd3tHUkZlSUFVemo1Zi9COyQ2TStlX0Y5Mk0mVGlWPkQrL0J7KHZ+OTN3azo4ZT5xeGo4V19ralQ+dE5XbmQpSDtZYmtNJl1CLHhbQVNfaFBDNkkwI3toKTp7TVpj''@;'; put 'put ''cT12N0NzWCF+SHBPN1s6blJ3cDNNKFtnMFNoeEZhWUZlIWh2UUJhJnFdb1U1P0hNL3wjSyhYQHczcVROQGtNaypybiZjTU1QIltpdCYrM3YhRVY1Y0Q0OVNqK2JtRVJ2Mk8sMSZYal80SSFsUmJrOk0ldE8/Omt6X3Z1Uz0sPykhRStxd1opZm1eaDU0NlpFP2ZsXVJraGE6dHImVjBKbl4lekFf''@;'; put 'put ''SzJKInB+ejw1RjNuQWJha15JfXRrKi5jOFY9UFF3Ly40Y1BqLlFHdWAkY1lCVzUiRUFrRDZFJFgpJk5XbUw4JmE4cEt+OlhFVSEyQklJUl1CPip+JE45UUVFTnI9YmlXPH5fK1F9TF4lYUJNQ3B4ZSVzLFRYP2V3U2siO2lUaGBHOTRQbmlGNVdERUVXQzc5IkBmWiEmTGk8SXVHKTgjeyV6M1Rt''@;'; put 'put ''Il5ZP0UqKFRiND03VCYuO1prQWtFS0wsRXlBOlYxS19rOSYsOntlbzclWGkoZjtRR0d1biUrV1A+KSQhTCtmem9vZnM1SWZ6T0ZQL3puaih0cHoqXkgzblAxRzNfPnJ4bCU2YDw1R2dhTSN9Ij1Sc1U1RTc9WnxyfGdeSUpJS3kjVDx5Jm1AR1o5fE9ZcikuMDl9ZnxGMS48MGNYSHUvbHJQIig6''@;'; put 'put ''ZkJrWElFXU1ANFl7Ql8kKlJwQXpWZTRmZmRuQDFtYlplOXU5QkdTd3NyMmxCZkZ9YXdOKW99L3J5VFU2aEF5aHxHTUJ8fU4zc215I3Aodnt4UioiSjxnJmBNQ1BGNlJRbj9AXWgxeEt4QmUkVnQwPnpXKVtyQV9rO3B4dVZ7K0M4b3QwK0Q6cmRqRjhKMkRjXktZKGFJRylYSnB9LzV8a1h9Vjok''@;'; put 'put ''fUk6WWcqWG9qcHN4MXQ9OS5PVyR6I3wpbC55dT5vVGR3NG5Eeisubz5yUTw/ZitAIX1wdFdUPXUwN308ZFU6RjpGczU5TFZsRGVOUiIoJFgkX11bd0lFfSVnbiN6KFY8QmdKYHAiQyl+KTZ4TTJQZnQuKCh5WVd2ISlkNiRha04yVmZeSCFwcmprY0o6Ml09YkJ0ZGAoOGouS1AkfiladzdhTkRs''@;'; put 'put ''YFlgZHRmdi5oJnFOOXY9QXN7VCg9KVhNKWdrcSlpTnZEJDIuZE5GbzJOazE5NGVSSE5xY1JsOUZnaEorOXs9KVtbY1BBL3UqLHtxd1NNQiFMO35JTUBCRkVtMW9FbmIkZT90NEcibk9iJDM7d2RrNUpNVHVdJTE+cHprR3NQKCFxZyFeaSp+X1dnZ2U6SVQvPClKTVoiW2ZuSChKIlhDa206eztX''@;'; put 'put ''ZTphfXBIaU17fVN+W1VAUEV0I3NqYktKYWYiSXo6KzB8RStJb15JMWleYzRgaktDPXJbOzs4ZnNjNHxfOiF7VnZfMUU5Li85Pk97TG5IJlVKLk1jbipsK2Y7UV4oS0BTU05RQ00zLDFQQ3t3c086U2VydXFRcG51SzFQYUt4KSFIIURTXzh9fndzYXtPVTA2cT9Bcj1LJXo5JnZgdStSU2EiI3hX''@;'; put 'put ''QmNrbD8/bEZ1R115Iy57bU5zPi9FKCRgMUNFZ3tmR2pgWzgrRHBMUn5UY00+ZlJLbTpZdnwhPCJeW0ROd2dEcVtyc25wXSlJUlE9ezBlTjtCfEQxa1dlN1RmbHlLV1FTaihnXn1MJkshOWcjYGQ1STtuaEc9JnxIak9QcCF0bGRJPH5kVmMidl4vQkgodzZRZig7KkpHRF80TW11UytaKzhGWXdK''@;'; put 'put ''WSE1NGcpTj1AS3tVNzBNM0E5cnUvMWtJYT10d3pOZ281Q1E/VzJMZD9JZ1QvW2ZpJD08fTVWcj47PGojQHk1bXhhczdOOHkqP08mOUEyXjYsbix4LHpfYEpPNEBmW2JEaGdhMzhVaSVUZEV1NEQlI0UmOllMVDZmSG5iP1NkRUhaPDpFMiROfXg1PTZrM199ZWM/PSk0OXNWdHN6e255KW41K040''@;'; put 'put ''Wm8ucmpgVHRDLFloPT4/WkMmbDJocCpWZWh3NXtwKUoqLGRneVdrWztqcF1jWypOalQ0eFY9bW1bYmIyMFF1SmVGeEs8Omg7R1ZrPi5zcHxTRmxOMy84WF1bVTdRVyxJQ3krWiJdXnZ7bGxbfTc5OXZyQiFjdmI2LGQscCF4dUY0bjpwZkldbCwodi4wOShmZ3VnU2VqaiwmVjJBRlJrfnVKbW9u''@;'; put 'put ''OzJ3S2p3NjZOdmBYJj5pU0RPL1U9WiZtMlB+USF6VVllZ3NIMHYmQyxOezd4PFtbIyx1ZlNKTS5nXUpNTSZtQi9ec085WHY4ZnozfkkrT0JYdiZ3QzxEdVtxdCw2QSs2YHpIezxRIlYjfmE0TlBPUjs4QUhseXkiPFdAU2t6Z0suT21WQUx5W2tyIXcyayw1VXoiWyJ1YTM3eF9pNm98KX5lbWMw''@;'; put 'put ''dTdANzhrYTJDfHpEa0YqbUxMQXw7bkRvRHNFfWdpPjVkeGBdZCl3bmYrOngrMTomXnB2bXwlKixTZlssP3h0MEJYWCI7I2NmWjsvNDg/ZGFtUHp6NSpnQHV+K3tZbDB6SCJnL0VWXjh+VDcoWG5YOXEoW1JJbiViajE5QFZIKzJ8JV1YPGRQXkU3dX5rdCpaWWMuR0B0WkRofUBNN2h+XWJ4also''@;'; put 'put ''MnhIQjkqXWBJREMuUmgpLEBTdD5iLztkdVRoT341LHlveFVUNmtFM0FVK2hFJEIiIV03Z2w9dD0yaklhTTh1XSNGWVpmPyhOaSpIImZUJWFWdWk7TV9naldRZVE6RSZJWzVxOSl8fFQ6JCE0Tk9qWV04elVKWiZSMENDPygsL01eNGF4cG1MUmlablVOUFZDVG1RNXRpW14sblcpP10xMDRpNjls''@;'; put 'put ''VEViOlBeUzMuLFh0b19FJVlUP2ZISjhfNENYRldWe2pRNWw3el0kWXNJaiJwKGw6KX1gNEg/eHhjYEpeN1NZTHM9RGsuKktiXix4d21uOlg1ajMhVEpLc3x3PDFqVTQsJSooTnUjV3RmfCs7YH0lP0N3YkZPQSZ6QkhmX0sseV9FPHZAdFsoXV8uPVRQLHBEMylPZkc/OWV9aH16NElPZXFlcWcx''@;'; put 'put ''P0tdMVc3Mnd4TCl8UVZaKm1rVSVHUnh4MShoTFVQeDxmYUlxJUV+VVQ1RHZjYSZ8dHVyVSwmTDtDPF9HKG16UXF7NjVRMTZOTGo0S3k/L3ZAeXxyU2cme3dDMEo3PXx6ZW5BNmglIUxzWVtNZmBkYFpQXU5+RTtjcUE0bDJxOTB4NyhjUEN1SXE6IVorSjYpSjs+LGFraCNrNXp6cSwuIWI9XnR1''@;'; put 'put ''QjM+RzhXRTZAIThZKC8wdGVGNHUwZDx2JUwhLEtpOkJUQmYxJEJQbnREO1QpRnFAZyV5fWdEOGspTV55ejBfaTBVLitIVXYveHgxWjcjb11wQSI9LDFRQEZnUWkkRUgpRm0iUjwzUEFIXi81WjtdYjMzOzF7aDZuVCVNYyRgSSgmLHBeM15bT0dOKD5fJTpDJEIwQ1FYNW8uS0s+QGtARlBGZnNz''@;'; put 'put ''NTBwNTVAciU4Mkk+bEBYc3xkUlIqLyJCNX5pdlpNPyRvbmtfP0RZVHpdLGhuakIvOklIW30/JVVJTEhIaEh7eVNaUHl+aEgyJC93KS42aFZtVnp2X1B2PkkhJVcrRk9HaDtEWC5qQ0dpKTx9d0oxWnR3TGdFWCpKM0ArUHV5PX48cSlTJWw4Mj1oVll0bF1geXY4R2FMZW9FN0o4M21hdDRTTGsw''@;'; put 'put ''Nll0YWYxRGAuZ05vP1s2NFkrSnc0MDgiYEFZNzhnPSZuUVAhVm9WSlt0Jk9FaWJZOngyJFVqXXlRQFFtNl9wP3ZZNV5fRG1GdWNqJWtLQ1YsQkYmLlApJDF3cXpqO3pCUDB1fCxyPil3cFRiVWchXzVdSXBLVypTWCNxflhoTi50QGNjL0Q4emw6Xj1iLEJyV0cqTzFfVXU4XltuRn50O2FrSCFt''@;'; put 'put ''P3N+YlAkMD11N29iYipTUTVBJDxoQz48S1s8eiE/WzZuTVd7eipEdzImL2YqMno1IXVFbDcoVHgiTjMud1lwK0E3XXg4ZERPPUUrR2BwbV5NXno6Qk9fPG50OVllNyR9Yzt4ZmArK1RKUG0wdmxHbylYUHRiQ19qRXNPU1lNRW5ZOl9eJWtgWGFHMW5ycnpHUG5VaX40dDlhSmY7eGFhfmBKJGtv''@;'; put 'put ''IXgvenFYdFFCQkBFK1M6ZiRodWVKOitva19UTHgkdzFJQ1dlfltaSXpfNmw4OkxHSmFrcT13SD1APDwyXThEK2o7b24pWVImVWgufHNMQj96ITR5Ok1uNCgoMU1eVzU5RW1FXkw8MFEme2RYezZEKjkjcUJOLilxKV5nNEZ3KGJ+ellgb2g5UHk1cSxZcUczelA5dGpPY0hHJHE5e0NqVFRYXUJz''@;'; put 'put ''aFZrcztzN11eRTtlOSo3VSJLXVRAfkUxfn1pNXdsP1tCZUs/Zj1pVlkuaGowa3N+IVlVKDQlPzBHQHo9QEJdWi5mXThGeHcxZ14iV1FrU09RanFzKjB8UkpUZjpKSzV3YT5dby5iYyIxQChXfl9dMV9nWTpYc0JPJnM8QTYuezk7cXVyfDgzQDJ9Ui5HUyYqTnp6fSlmNS9ySlQiYnRZXX4wWS88''@;'; put 'put ''Rl50SDhFdj9iLmU+WlFVcWRsUXd3dUpmTl09IjUsOERWYGM8MUQ+fTlLVXdyI3pYPDt9KlRMTXJGYGlwUSgmX1llb0xKXmA9WmVPOEEidHBSTj88eSpuYWlZKDA+Ym08VVc3e29lTHFucnB7eHFJPi9qfl5PUVJxUSlHbDg6YyJuVm51R0s+ZjpFKnRWRVg8RiEjUnJ2X2tVLmt9T0RpRFtHXT5m''@;'; put 'put ''VE41d209OCtvcjByQiEqT2gxWDA9UFAkVW8sJjBTcmNlbS8oRlEkdi46P3NBb1VOYEw+alloUSNaNT1GbkF3P3c5UlA+SVR5S2UrZTxNWz9XOXJBbFlTMkluLzQ3Kl83VypCNF9TbyI5V3BGQi46KFpYclY2SHFQdCN0TkclNGhVPyNMIzUuSlAkLntQezMwJjd7SX04Qz1LTXxNXSszNHReeC4x''@;'; put 'put ''QG84VnxyfUFSZGpeKyo4R2F7JE9OVl0yKENndDsoTUQ9ZyNiSzhHNl5xNmFWUD1iZ3B7e1RXeCxvVXN7VkRPNFtoQEhNPV5hOHVxX0llQmhaJGhCV1B3OWhTYHR4dHJyMT90eT9VVVA6PV8lX1BIPF5+YVpWJGhLLyMpLGR4YUAwPypfJWJCZm57SllXbGguVFtDO09TQygpUEV8SkM5ezJ6elhL''@;'; put 'put ''YWNnOl1rRiwuUCZ0VkpgM29OVUpMcz1PPSU/RD4vODxOWEx1b1lpNnlDVDxtTXk2Wj0mTHwsbz1zPChoLGFaYW1Rbj8wOV1gVGoiLlhjW0UrVXM5QT0wQy4mOVowPGJkIjcpbGR6YTBiIVFzcihIfihmcVJYTTdYRE0uVUpmMSRbdFlofSxFbnMqRSphRmFtVWpNYUM1IiguYyVkY09RWz4xTV5L''@;'; put 'put ''ViJdTUVuVD5uZyZ3T2l5Im5oZlcxL0JiMWdUcjU8NmFrd3VwYjVZfGowWVVwZXNZVDYqR0V8OSFIT2N3eD06VTwiMlFNM0pJLFVgIjBzJV94UWRbMk1pJiM3ITBXSzBxIVlLWTxKLGhuc20pTTwuZ1IrUSJwKFhHIzF0T2NPemowMX5IV2szV3xVOSJUeG5LWSQrSGgmUVNSJkdoam9UeTxpfGZJ''@;'; put 'put ''RlAlKHY0VElmI0hoPChlJWFBeW5RXzhlI30hfD0oMC8yXVpSPiE+NTl5SWV1ZWBrTW5UNUxsR3lRNFZ5eTArfDolSFlaKzR6aVBvV11ya0EvSjYvd1pEMlZ8OnZUcG4oXT5pKXZ8SHx8QyxGWkd2X1VPQ1R6P0VOISZieTsvcSs7KEFbJGE+bkJiQ2o5a3I/VkU8XUFnelRTMmpiNGE9LkxYXS9p''@;'; put 'put ''T10qekwyRWErXkhDZmwqZiVpS3tGJTJYUSM/bXh7K0srdEg6bEphRmNyWEFmLHcvRXk0IkNJV0ViaiRIIXU6MzVkV28qTkt+ZHEsOGowSHFQYGo+PnBNbFk7QDUpMklGbVpnbkVraFNnbFF2PmYoNDNZT1koVjB1clgkbXlfdU5idms5TChwV3hfcVklZihFLGE6c1pdJXg4ajlJQ0pdeGNmWzJQ''@;'; put 'put ''IjEhMHIhRW47VyYzIShkRl4mZTJ5ZE4oUlduNk5YImpqRSQ2XyEyWXdNckpITDdYSCtEfEQjKV1YZEguNngmT1JfIyZofXVeUUt2PG1fJStCREhKP15LZT9ITSY/UzE1VUhePEowYVo8KS5tO1gufkBeP3h4NlJgdltFPWJ3Q2BUK3xYM0dPUWJvfC9HQ1paeUBlPFJIVlp6QnY1cjpse3MycDNe''@;'; put 'put ''OX5HYFdMfWRTbmZoI0hgXkhCVl1afU5wVzcoUDFGOEk3QVlybX4selJDR3AxaVgsYCVtfjhePmA7bGJjJnM9SlpNWTp2cHlAO19lSV90dkNtX2g5T0JYRVZ0ZmhOLitMLyM2TTdZVDlFWlQ7aGRwekt6PlUlXiwkRjhHRll2Y2VDbzt4Tl0vc0dhVlEjWl5NXylYTmBic35VTltXTT5ILHw7W292''@;'; put 'put ''OF9ha15Xd3dDXU5QRyssfGswTXE2I3Y1UlMyendmJG5qeSROQGFUfSYrVCNwSWY+JXZVQmRaMiwkViNaIUdTe3pyUXhrQkdnMncyI0BPQHkwMXwqeiYuN11MdjJ+Z1A0d0ZZbElrWzhwcFooIip7S3hxcnBJKSVYTVE8V2d3YUlLNHB0KD9sKiteRWRPSjFIfU1dNTAsY3k4NjxzYm96PlVIW0ha''@;'; put 'put ''Rm14O3kxbyx1aEJQXiZLWnJacC5PY157ZyNrIlVUKksmfCwuLkx9KU5xWFlvfF4jX2FXS1MjdXBOKEwuUlY3Q0NLVll2QHA/RFpaMEpKKFNvdyF5YGUqdFdIP2pFNjtUXj03eyw1Q3hiaFVgZD01Ki9ZKzh2NHYhaixIeDF3SSJCQnUudjQ8ODMlKCQ0O1lLZDpuO0FufjVpVEwyWTxGMnZLJnRp''@;'; put 'put ''e0xodVk8QSN1fSV8RTVZd0BOdkFbaSs+YWZLSThsP2omNF5JKS5OakBdO2htRyw4UHVXaUdRNj59QnV8U1lMe0xQNVMhakZebjV6akB1WSlqcCJgI0wycjNER3VoYClAWzRKOXtOd1N3TWs4aUQsO3hZc0VvI2UmaEwqc0V+cHhIQm09SFBKQzlPby9pdjZyUm1VUHAvXTlgRjQyQ2g0TCxNSEpO''@;'; put 'put ''VDQyM2NISWAvOnpfVlQvXl5bRzV0bV5WQllHKjNqW0hlcjYoK0Vydygicnc4V0cyXUFzPV1Ya2dAJCF7alVeWCZmVXt2fSxPTV5wcjxjckY1YUwiN19hb0JHJSMxYEVCQH15NlomWDw1ZzdaKylvRSFsJHZOckx4ST1pY1ZDWlBfYGJoY3EkI3hrbHl6U2olSGI+akNnS28+ekppIjx1PHZ+S30p''@;'; put 'put ''Qkw5MD06RD5RMCtYcDpsTChNNzA2alIiNmBMfllhYWZWSEs1TFtYTjdPZkRCMUg2eykvQkNkbT1uNFp8P3txLCMoUjBfIUM/YjtGfk90THtxQDNJb3hUV1s5YTlGeFRiPG1Jalg/MHRXQDBPaCVxYG9tUm5GeiY1JmwrLHhFfWJnXVZaYzgycEpuLHE+a3Q2NE07KW86KT1QdjY+YllPWFVhInZ7''@;'; put 'put ''b0c5T3N8Y2szJC5bZXZJLiIxeWZmWTl2a0pGYW9oI1s1enFgQnpmR3NRIjJCRXopens9WEMpdSorVVhidjA2PywjSE1HPXEmTH1KRSUmI1hpVGRiP3JiezM6LjQlRywkSytHRENUNnRAOl1QKlg5fGk4ZTxGeTo9RVV5OiwqXnFgWmF4UXJxW15hPW95PVEqVU1HYS48O0VOQ0dfd3h2eXYybXFZ''@;'; put 'put ''SDtjblIvKlNiVz5GbG43Vz5dInJiXW9JS08xd2VnKDkjal9TZ1tgMmd8biV3bjZTeEo/QjkmX1ZUcXFuYkxISjcpYUdoXX4pLig/KnZeYmRscXo/YV9lQzl8dF1UdzYsbTFFNTlXMSYweXgwLltZUT5JQkpeQ3VUMCk8T2BSWnUsKHxuaHdXIUprSyt3MHEjdnc8bkdRS0ZwQEQ2OkNmUnkqe3o1''@;'; put 'put ''KTVwcWxxcU40TyQ4cm0mR3puTFc+aUFXK3hLVXRgTCw6KUhBOlomIiJ0Lzs2VS99LldddH16QHx6eDcuNSNIYCpiblY2PC9OfVpAPzRQR1JIMDMuXShpcTFwXyMzZC5SXVgyYURZdiMjTHZPKSV3cj05dChGY0NdOElwZHI0MStWeVpSUW5KZmNuZ1luKmgyJShwQXQjZlsyekUjREh0WnM7YWtu''@;'; put 'put ''PkshQz4hKV5AcmJhUzMpIyo9eklmXWduUlRyc0dbbjQxVE1TR2BONU0xViRNdiFoU2dEQDtfbCVfKjVSR1Q/Z0NBSHYoOkFRbHRRezIqMzQrOWtzMTNAKGgsK14sJVlMKGMhX1RBPlVxQVdhS2xBajBIW1JETFVfQW5beDAmKEY2ZTRNb0ksQXVrYlJ+SktnaHozcn06Rkc0WSpXOTxxM28waTYp''@;'; put 'put ''fTliKUdrRTo/N25mODJFd3UxczlEaXFJKWZQIzhuVTZFMmpma21RaWpQcCM2PGE4fnlWNmpqYiNEU044PG9Oe3J9NjZ6VWwjMlc4dSlINDdhV3ZXZ2N4c2BjcUg6NE1GM3d0Mjxbc2cxQUJhYndQfmNFbipXSzVMZUB+am1JdlYyXng2QWNgbjYxSVNuR1BjJGZVZl8+SUpTc20uMy4vIWRlMTdw''@;'; put 'put ''PTc/WDAremc8MXlKMHRzdU1IN2QzeWtoaXUwb0FJQnt0XnhlLE5wZnJ6UCVvQm5iNT9wKTEhV1F2LnAvMDIuYVFia35uZHNRaEV7XVpqKUNVSzNJZ0pwdG5FXjFXUkJPfVdrSXlnNkteQkxgZz1jYUorRm4zPX1wblFCTytSSWlUcCVLb0RydUBnSCgjVzA/LkRVIWYhKnpmRz9SfDJUJmNsWyRq''@;'; put 'put ''RS90SXlSdjpseyQ7KUsqK1A9RkFXcUMsVktMVStuK0VLMzUoJHolay4qL2ZgR346eHxkL0BfIXNQfXN2KHVETEozTXdzX0pjJT9QYE9zNVJuZkZ3Z247KiFaVUtzR2xrT0R6a1ZkNDRPKj5uQ10xbD0zNk41RV5DbXYmKDd9TEtiV1R9THpMZjo8amN6XzlAfmxfX0cubmBCdlJucF5geVlTNm1H''@;'; put 'put ''PituLjBnKkl6aixRR00scjxfKWchSGI7Ik97cDsyPz18TF5qT3NzNU0mVHJyMUksKWc4MD5FMUV+KmpQa21UUDZMSEBAZE12fjRMRy5WdGZ5Wyt1aFMxRnwpSnN+VDYhQnA1W2l5Rj1pNnBHMlJlXTFNZWhUSkE0dFFYNklCM25aXjgqOCRoWjUsXWldYGN3MjN4Lm4zIXpsdT1fdTFnIzVfRihI''@;'; put 'put ''PHMvOSZTNlQod247Nz9dciFwY3AqdSpaRj8pL3txP29vbCZ1YnFBXz01UGV+OHhTalN8ZSN7V29LQ3FrN0BAVmghVk4kWTRXMiE1YUgsMzhrXXpGPjE6T0VjU3lKcUVtYz98bXpRMHB8L1lydXV6N2paXj1JfFBSX009VndQbm8+bUhWcUtObVJMMl1wRVJqeCYscTgifTV1cTIuO2w/cn04Ukdo''@;'; put 'put ''eFJ3V0NeZD1jUz12fXhSeEZWZ3p3YjspTjgmeChzUGhWKyp1MEQsaHEuKFMqMUtweC8wXTl7VDlFL1hEMGhpWn5wTmE/XiRBK2dvPT90L1JiYjFTRyQ7VGJqLCsvWGcicjR3QFh7JUhHW0EiKzJxKnRXYWBXeGQyKHxGV1RsTjBfUHp7JS90Vj4uS3RqKV5DLz17SiJJL3J2TVcrPnk/NHMrTlV8''@;'; put 'put ''VFl1OEV8PW83b089WWw7KEozR1oiflN5bUIkPDs5fGh3W3JuT0MrMVFXZ20sTjVHOjY3T2UuazdlMFoiJFZ+UTp6fTB5XkFmanBnKVhMTmF2ZGNwYF0kfGYlZC43SEdgQjM4RExVWW1qO3Uve05HY1suU3guXUE1SXA0clNoRXI0a1dKN0BMc3ZxLns/fXpvUyspM1o9Pk44NzlhQnVpd00/MEpI''@;'; put 'put ''Z2RdKExibSljOHlKKS4mfDQ8entyfkBfejhwJU5DaHA3dE8mPmZsdTFiUUglJCYhQzY9bnl5MEIoRipJeHt4QVViVEo9Y19LNW88Yz5JND5seEF+Nmk2WkIkcTpvPFNSY1J9W1tuT0Y+QFBjTX1Vd0phdkQ1O1teb2RnaiIiWTRuaCxkW1RuKSxfZ3AqJUJ4JDN7IXZfa2kxYkRRSltNTik4biVg''@;'; put 'put ''dVhgOGdaPSMqUyxjbS8jSGwmUC4kXkM/MzN3Zi4rOEI9dD17WHI0fXZ7MnFnUWlEflJKZzJgTzpIXzVtIn5vMHVnK2JXLnRzJGQuOHwhK1Z1NVJHPm46akwueyVLW1h3Szx4TUUsU1I6bm9YcUpmREwzaHVBST52Tmg/JXtoIk5JXlNTSX4lQlUpZF81TWY4PS9PK3ArUDAhNCwsRSpxe2R8Y1g6''@;'; put 'put ''OGIqR2shPiwqajJmSDZ+PFJLRj1yZEpLTExdOXZwJWFJPyl7W0xwOjg5a05yY3FsQnRyIShTYUImQF8oQlBFa354JFt1QEpXNyhyOSNBbGttdW9wPW99YFUpUVpwYjVoTVgyR2AyY2lpdGJzWTJbW2JnZW1ROTQmRHNba1pCYEM4NT15WnhnMmZSPW1zISshdDUvPnwhMjZqVE5MTzNXcCEuUkJe''@;'; put 'put ''IlVuZ24jVX5zakxzelB0RW9CbnRlZT1RQXRMcUI4Jl9velk7ZFo5VCRUdDRIV3g7SHJRSkhbUCw0R3BTIWReRkRHUGRuYjFGe3osTDN0U1lgNzVCJS41bFRwYzs5YGM0b0wkTy5mXU0qNU1uTXdWfmIuJUZ8Q0VleGpbTUQiTyFuVkJReHlgaURoW0JOJT9uMnkqMl5EKl4qW2BRTG8odi9xVVlI''@;'; put 'put ''YXw9TDU9dCtfUWEhTV5sK2p2YiZyN0VaaD9jK1FOXzFrK0h4fFF5Tl52P15uLlZIVV0wZ3Y5XTFMPFQ6YDd9cDNSTUMxfTBAUW0mSTpvZms+PyteTTZASDBGUmZPTUpMQWFOPnE1bDJePWVsYmUhRHFefjJRazM7KDw3YXNVclpZazdkKDdZJkJybFZUJk88bE5WdV07SGZbNXMrKU5FbCxGUzMy''@;'; put 'put ''ZEVFa0hsd1lOKUQxXn1aMzEwPXFvYFdOWV1oWG5mMEwwQXdER0IzejN+YTg4PWhiISZqYGxQNCthJj9QTVVTZyZBUCYoYThfRCEsVyFvTV5laFlxOXthXnV2TWAhPGxQdTRuQVpvR2h+NDFSfEZII2sueygzKX4lUldYUFJjL3Q4fGozO1NGP2YsV0FVWW5KSUBkTEBOS1c6QTA6eWJNOlZueTAh''@;'; put 'put ''ak8xSHA3diF7ei5LPG0mfDt1UUY7TENoam9GSHd7UFh1Mm5QNWI/RlBGISY/JFFLTHNJNCI3NzZ7P0UyI3BmLk58QTJKVjxXU1o5YzNAOGQ6TjR8LiRXTUBaUT4yXikoZzVkSSpkTXxZREpeMjElNV5LYUIjWmh9NllMPWNdOk1dLz54d2xwZ1V2JnBNb1NiOTY5ZXZQV2lScS44cCowTHplQjo0''@;'; put 'put ''MkJoZ1AyWStgM3YzXmE4elg4Z1FWNVlDMVheTj9KNT1Acm1fTnJye3w3S2swU28+OFExKDhIOkVJQy94YFRUMDlwaHRDUFV8TysuOVEyOGtbfDxHTk91Sml3NSNvKyRoTUUqd0Y0OyNnXUYlX3tNIVFaZXR9azdVXU5sNUBSflN8b0tFRnRVQTMiK3R4MXJeMUB0NHQkc3JAT097NjVMeH57dWIm''@;'; put 'put ''LyoxRGI4TVBbOHcsPmNKYTdAX3s+a3wzJGxWZChBZkc+LzhDTGklKHkjNHxeezVfRzIreXA9M0Y+Jl1NcDM4N3BwSi5MQno2cnthe2E5VmBPQXAmJExVOD1bPkYjTShed25DS0oqKkBYQ3tAKnlvRUFFYHQ6UVpVMStnQ0c5Pj1ERz9KN0pxWkxtPWIwPlJScEIvZCokNl4hPm8mSEhiOXA/cyM9''@;'; put 'put ''OiRMQXgxTUteLyN7SC53YyRnY2YycUR+NU4xT1JNM1d4YGN3dFcmYTxYY14pYEUuKkMkUT1sIkYkVHV6TEE1YjJodThZQEgxTj8vSF5wJVE9NFoha2lIVUhJUkkmOTd8bUV5fUIlZFJFKEQpRXNaWHFBcjFNUD9raHl4fk86Nnx3cE9gWiNAN294YzE4XmsrRGtwezZjRV1rYDYkKnVKaStmP0w1''@;'; put 'put ''djlmJjQ/cT9bQm5mYV9fP3B0NWxGWkF8Ump2ai8wfUY9XXg9WHRVWXhFbnokYnNLUGNTZnRZX2BFTlVdaz46SDFiI05hKUJtTVs2aUU2N1ZtPmZiZ2FpMVtXVFoiPU5GUWk0Oy5sOzRHVng3XTg6ekV+QTAwRGE7emFsTnc4ek5aMV12Qjp7T3Rablp6QyNaJj44YG5WTj5SYilvWj8wdGYoPlEq''@;'; put 'put ''UnZ7LihrVlpAZHo2JjA1aCo8VnJ+TC8lUX5YLn56R1I4N2VXdy9PN24rTzUmflJTfj9ILDBfSnRXWHI0e1VEZj4kMlFfek9XZDVEW04za1EhV0NHVWxVMmZ8Q0J1TD8vS19AQnxjTV0lblUvT0UwI19SX2wqZlZkL2l5cmkkfUtAYlJMQlBVdDh7YTR4Kld9Ui5RKEhaKmNBYVk0dD41SXdlMWVN''@;'; put 'put ''JmNnMHNeUy9fLEJFZU4sQDNXMkdILjxDIi56LGN3YXZhdlEqWDpmJk9TW1JJTENiS2ppUEguLiFTIVsuUDNdfGp1KnFRUz5KSl5LdlsuS1IidVFZO0dyPmVnIklFdiF2X09SJSooX2tjUF0ybXcvdDlZKFo2cVFURyksZCVHW0woazdvJiJIaH1dXXRlRnl4Lix4XncmfjNBJW4ybmRCQ35tKVc2''@;'; put 'put ''Jiw9LD0qLH1tbyY4WUpAczdpT2xecTRWeFFba0xdRG9jRVk9dDE7XzYvU0FrSkp7QHpsU1BzZzRQODNqSnk7bmxzMWhWMCQsKDQ0N3dzPzNTS0w0SldUSGZsZnJqPSl9V2pPWyNDaW4lJW9OIWRzL2NnWTYpLFs2Q2Z6WytHZkE/YkwuQSZsPkpaVDFkIkcxP0JpaTZuNi86KnpFKFE0RVQzVS88''@;'; put 'put ''Oj0lZnlzLltjRH5LfHlAaDFCfUQreU0hfExvYmRDV0IkenFvZ0Jvc0NTJEYmSXNWIyokSXlYIXl+Tl91Xjd8REY0NXB4MXglRCo/MVJjLmM9YSx3d2E/QzUydE5zU2pNW3c1blYwMF0jRXw5R1pXeChQQi97MFh2Q2xNezZbN31lbXZWPXxePmQ9fHJNRXdoQ1JfW0NSVToyeiVtcXk6OCVAdCZK''@;'; put 'put ''Q2srQGhTUXM/X2lleEcpKmtoazptLH0vKk1HZXM6SktEfV0/bj0pRTx6X21QP3Q4MkNFbk5FRDNUfWIhQ2ZBc0JZW3lpTDNqSTJCaUIoPGVMMilKVU9dKyVUQ0JfTUdZSTIsW0NmfEhNMWFPNjFzYCYySGxgIj8kfTxxc251aEZ4SSEqJHtiYkVbX31ieHhCM0g/P3cwP1l8LlhLWGdzVTN8cldp''@;'; put 'put ''LlcuMVdYJn0kT1ZDamBhTUdZMzl3OGhzKlcvRzVsaUtJb0hwNTIhdlk0TFdxd0o/cTMoVzZ9aD9ALiwuNShFPl5la0ZhI0ohbCszaH1oKX1lVWZ3bEFhfChHcz9aYVUuUztwc186fHR9NjllX00mU3F2cFtMRUVDUzpWYnBlSldZWSluPSNvJSpoVjlhU1ROdi5CaSp6YFJGdS9xOHVJSU1AOHU8''@;'; put 'put ''WD1PIndfbkU7YXBuaTMucnM/JDdaRWhYNUFMKUJvfDFJSikiP01QSipufSM1ekNkUkN1fSprRFNeSGtNRS9dczZUVjsyeS9hODZ6OkopcT9iT3NWNigpVnpoc2NeXUJ6Kz9DVS9sbUpYTSU6OUt2aWMrUj8xN2ZnWStFfEQjISZmdkd+NDE8QjZ+KTApTj43dldye2FtQlVkUlopJC4ucFhNVit2''@;'; put 'put ''fW9RU01SfGh3PTA2eS90Pz9tYnVMQkxDJkdSSnYxQlJ3YWBGLj9xM1toLm5dWWM9Xll6KjVsU0U2QmJvJUZXUl1qO0owQi9bMDtaNT0uXld7Um51bVUiRz0/UUZ2Ois/SjBbTXwmSiglSUUzU2UvTGwpY1l0fCIldldjNTdsUlh1Zn02RVtPTUhhVTR6eW1XMVNuYj5HQmgqNCJLeFFlU2ZgaGMi''@;'; put 'put ''a3dBdHUwYWdWIm9TSnRFImlgVmF4YFk0enpTUiNNVUZUb3gqX2k7M1s5eUV2SyoiIiQifUNYS1M0ekR3I3hOJCosbkZjdCVMRn5rT1B9RCNNPnd0fDRRK2ZlXmIrL2ZkITZIR1lUL15BVUpuaylxIUAhRn4kWEdVPUhVaXxmUFdnbiw6RDtGOVtvRzRxKW4mQjIzekRzTFopajViZ1kwfUhZYzJ1''@;'; put 'put ''bE4jR3x3cCw3TDxJbT8yXipSSkZ9XX5WRWchOENdR1JYJThZI0svcV9vIzFqLzxvMjU8WlBsQU5WVnNgWWpKeC5vOEhNdSVfTyxNOmhLaVMiWCtgNzgkZHAsRE5+YV1OUiheeFkwXnt8dCFNY1lUJTR1T2h8RHBVWS9VL1hRalAjO3svaCQlRn1dLjRHNSNEaUdJIWJYfkhZP3FJeEo2bjo5Z1pN''@;'; put 'put ''QVMoSV08UShYTiU3bjAibSM8WnxyJWo5XjxGQTRXaVE4ZSZBPDViLEhHJGV0RUdDRWw0b25MWz1pPj9zUkpnK0NEWGQjaXVMajsqJWw2PWE8Qz9YIWsuMSs2aGZMcEIwdGNHRXZdfTNWe0AkdEQ1RX11aD92anVJRGw6KGs0VHFYSnksO1QjWytnVSNyMjd1ZEdOdTZbXWVuIWdMRWE+UktfLCZe''@;'; put 'put ''aXxJKjBJaTw8JWBbL2JzcEV6dS9Qc1ZZXUxxWE0/Xnx+cFoxPHBJcCJEPG8rRjM+NHQ1ZlhUflZ4PkxpZnZsJjFsI3xNZjRCKUh5TH11PzkhdiYxZlB9XXw0QltGLGg2IXxaP2lzJG5kNGBGbHhOV1QufCw5NFZxOkMoaT9dSnJQTD0qUyxCNzImMUYpP1FGUktzT0B3bktLfWU4UWZEcmNfUEFS''@;'; put 'put ''ajVPWjskeUhNKVlsMUd2MyhzWFJ5REZxakBRKVt5Wzgva0FyL2hTS0Z1VT5UdENgJTo5MzxRI2Z6cD9HKF58KlgqV3QjJH1bejsmOXQheypSfV1uKm1WdEZnYGRLInZ+a0kmUFgoW0dCV1tTNihVJGtQe2JyOkk6Pz9ZSUwmQloqOHZUKSN9Vy5ZOVRScz1XOj0pKExTKHk+RHM3aj8iayl7PmF8''@;'; put 'put ''U1p9RG5PWXxKYz8oNkkhV288UShoWyt8djxvNylbJVdFc09ZZ3lxTUtGMjpzaH1dJkppViI8KX55PjM4NlB8Ujk5NjVaTy4oZjRhMSQ6Q2YqezYrN3h1RjAhW2puRzQxX2pUUj92P3FUUlRvU1MjXXhVNT1+dF87P2UsenZsfV1yLl47bz1OL3d4ckxMP3p3dFF4eyRxOCw7REImIm1lT2B5OCg/''@;'; put 'put ''V1pYbDlnb2k/dHEuJV8uKmE6QkwyVTkiJD0weTVXYUluV2pCdWZAPVtuUCtLfF00djt2LkxUIXliKlsrU3plZExGW2xXdHQpcS8oeVFjQiEwUHVKLClfPWlyYEQ0byZ7Rm59KH15PUVqWTFLL25VPkR3WHVqJi8+UjZbLz5eO0Y2YV1kVT1CdHttRixUbiFkaURSWzFeVVYxeC9ueWh3WnN+JXIy''@;'; put 'put ''PUtUWDtLQSpAfWIxaDFEeHJXXj8hYnB1Ll1rMn05MmgzbzRfIXBsYjh1Li5MZCU8fV84Zk97amw3VFsrJF82O1RPQn4wK1JNMD9eRnY/Iy4/UGA9d24oZndQN1JqTUhFajZDRz9VX3x8P1AiL0ZWWG0rREs0THF1RlIhWV1DNExaeD5OOF9Ibi51VnY+R2FvLnopcT9WQl56YjkqJElnNXROcyok''@;'; put 'put ''ST1pQDBBREY/RjJGdy9iTWMjPnRPXzsyZlhPdjk0UU88XylrLzhqKkx6ZUxbPUo2a15bTTVJLDo2a3FnWmIwdlpFM2tEKnZBQmh+UU9OQzVNR1ZZKWtJdU03X2Z0Kjc4eTNpUjM3KF1tUGFOMnZFSip+REAzQCVhOEorMjJubyx7TEd7Q3R0L3ZjaXtXTSYlSyJZanx5NVhiK218cixGfj8pSn5P''@;'; put 'put ''VzAiTHtKO1A8XVhVYE4mKklGIiZ9YVZgVXFJQUl8SVlVLnM1ZmdvZltkQlF2OXBOSzpkNHRLRWRAXWRbVjNeb2pSfXFoXUJFUTdQOGNsZSREeVt7ZjZxJHAvRypdRTJ1ajAxX1JfQS5kWComcDQ1LFl6Ky5+ZyRgclZAYCIifEcvdTg6NDEiXUh3SWRAVmdwYVQpbXo7fWorMWtwZCRnLl9gNjRw''@;'; put 'put ''L08jQFlmbmZJS0pJcnh4SD8rUXF9STZufTVMeXZJaTI9eVdCcmRwInJkYXc9dFZNYU9bL28vPF0yP1RWPzk6PWlOMXR5M1ZZIlc+OzBRI09PQzg5bSs5ITk7MjNmNlBEKGNvYllBczM8O24hckN8bVB6JT1sNE9FcEtaKTdAe24iSmM9e3x1OSR2eGdVV3tjKDo6OztUdTxEIzpBfTUlSy9zLzNg''@;'; put 'put ''NltlcSVwSGExdVlaPnhkSlArX045WSU9ZHhKMUl9anA7Z1IwZi9ZPV9ZZU8yRnIkUVUjSCgxZmNGN34pKGlZUGlVSFZnK3lSLntRbnRWfVsoc3c6Jn10aHNaJUh0VSQ4Xn04RXNwcGl5YFVLQzB0XkcsWEQjYm1JSDNgcVdPMyxGK3wrUlIwVnxweWcqfX5mamtyOzl2TzpPZiM6NjVRVGgsfT1N''@;'; put 'put ''OSYvb0M9eytuYDExUVUrbiJ9Iko9UWw3Knt8YXdrSVB7YVchcyhKIVp2XyhzMWlMRUJUTEVZT2cxWUh5Y1RYZnd+Y0osY2skQ2k1UTBjUD9pTXpZMCxSPjAvSTgsYCFqJV49MW5FNmQpa1QkZVNhZkBlbHNCRV1ZN2IvcTNtfikyWiRlNztkQl0iQjYlLGZyO1s9Kj8sKkV5QisxJFBFaXB8TURe''@;'; put 'put ''VW1iMC9GZ2kxe34/UmNYKXwqTV85fXchTz9QWWp2Q2hNK3dJTmlrb0dUbD1dUkNtQjRScjJeSStEQi5MeG58Q1p9P0V0RWp9NFFmb0tkMEM5Jm1KYzpwUkFsKSE1eztbZTxKX0VPJV4+VC9eRnxXXnBBdWUsQCIhZ3R6di5DW2xxaW5DTWo8YG5lTzt0bSppMGcpX3wxSUQpOGRQdkhkQlt1PmB8''@;'; put 'put ''dX1MbU43REo9XWY8VVgxLiwlWWdtaF4hMztLei90OCE8OT4kPDlPUmZlbFk0VX5sX15LMUNQMmNCbChuZlA3SypSdDNWb05IRTpAQDRuWTI7OytERTtiRmYiSz97dH59bSx0TVQ9ajo5Ylc1Z2ckWDcmLjlofj4yY1J1Mm92amdlZEptWiFlN0RyUHxJLiEzVz08NSl1YCQxbyxMM1c9amJ2ZyxZ''@;'; put 'put ''cFE9OlB+MEBNXmhiTW57dzBTdVNoOlExVDh9MF9qQFRUbD17fWR6ZTBlUkZGcWVPJXBSI1srQF46Nm89ZklHeTYrREsmJWgzcHxhPTBtYSQybWxhcipPOF53YmV4bmxkaSpVeShbMDBuVU1MP1VkSjdvNFMxKzIzYls9R3xhdmBjfCkzQV14b0ZMRyg4c3FWYlcuJWFXL1VSNCQlYldyXWtXVywu''@;'; put 'put ''VVJNRStpKiVZe21VVFBmMjl1N0BXO3J9cFU1clJ8UW0kfEAoa155QzoqNDhnfD1pJElRfXEyLk42emViUiQ0b3Uidz1zUWY4ZXk5MypweWFbSG53OHF9X2ZwdUM+ZzJSYXNtT3dAdytJOV9JSUdHZFFIdXElfkhgRlNPRntIM296OF1LLjtxaGo/YXEwXzYvSnAvXXU4I3ApfnIqSHhHYVFVZC83''@;'; put 'put ''SkRWSVQ+Tm9mRUB4dUpCOFBgLip8XSxHZE9FM1FZKzZGZDleJmQ2L3xaT247aTZBM35OPUg9aFBdamQ5YTwxXkBtT21FTHw4e304VmQpb3o9SkNKMWtGblZqOyFsWFhZP2d7WFVGXllpYzhZdk9INnB4QlFINlkwWm1fXVd1ND0jdiFdTnc+ajlRPE1fcFpVVT5LWSNnNCw5XnEsKVNKYTg9QHFm''@;'; put 'put ''X3J8c3JqeHBHcHshXUBiMCVNe29rbzNTVVRdNmxQbyN2clVzSEBqOWNzOT1gcmpJIXBRNjltN057WCVabkNIP0JfZG9tP1J3N3pgdTA0ZXV4N05MT3VgJjw5ZipwRDJGNDZwaDw7Sit7ImpPJEE8KEJhT1goJXB1TDJybWRLcUFuPyspWClWT0AkR3wwcUU4PTxAQTJlblZ7ZkQ8I34+P1RmU3Vz''@;'; put 'put ''cDNydlVTYjRtKTxnTSQrMCJkeUlMeDNla00vWGcueEpGL3FSLywpTXIzd2ptVExvKjI0XmZhc05yeGMvM1MkW2E7djMzOV5QQSNfLGBIQGhoXV9Hb2NDOCVwO2BLMTF0KXRvM3J2ZU1qRm45OzI2d2VsXTFDUmUqWSF1T0d3bmEwOy9ITT0iOSNadFBsNllRXUxlfFBfTnVfSHFvVjA6K0JbWiMx''@;'; put 'put ''amR8OG5HXnRaSCsrTWpoOUYyWTg1RGowI2BodGdxSXtoUCxUXkc+JWdUXnRaJHJaITBfLCE3Zm9RQ1RuVEE0M2BXVUdpenBTRm5HXUx0UmpNSXcjR29jVzA3O1VsKnpATXoheXpva25sVUdNKjJrUUh2MDkjOmF4RUY4T01PWXh0ZHpMVFY6QiplKnp0TlF4azcpPkE3R19fLGtCL04obDB6aGFO''@;'; put 'put ''e3tZKlglSC47eWU9a041aWxjUVNOIUl3UkBPQ2F4REMrPGhHQ1d6YGJuKF19OG9nOj9kUl1YdlkoQnNvOnNefkVUJXp0a0U+VlYkan0hUigpTzh5fkByaSl9KSZzTC5DZ3N1OU9pYUllTWpkQmZvayV8OVl0Yj1aKnt8KV47XVpDRTtTXXU2SDdMTm9kZz12amM6UX1oTVlUU0ZFQ3dOdUE8ZUdE''@;'; put 'put ''KVt2RnRbTm5ObXd3TEJmUyhmTmN1WH0yMVRCLFRecVNjMklROUVjdmZbSHFhdFgpMUh6aWNyXmd6InIpUXQ0aFU/fml5UFNPJFAycHlAeVAjK092MFEkfSFERT0zTHA3YmBIZ2UmNUJ1WVhYNkRuOUYzZndlbCVxJEdXKyFdSDR6ai85VDpfZXA1d1BEKHg4M3BIaVd4fklFUn5aJCM8YDlPZX1A''@;'; put 'put ''Sk02al98UHJoeXpbUV1eWyhwZ1s0eS5FXX09PFcyQTB4Wl0jREw6Q20xWH1dY141dW5rPG5Od3R4dShuaEc/NTprN3pmK2lxTzBzWUtRc3Vxb3JRd0l0e04kU2xVSSk/e146L3l3JkppcXdPR05BbHc1SnBfTiRYbFFBY0h3W2claDpGIyojSzZqTEdNXmxEbVFGUzdzW3IoNEFFVzFZdElZKVcj''@;'; put 'put ''c0BJbTJWWj9MfSYjIkJCSHh7e1hVSVtlNSFGeW45bltyZzl3aVtILFBifiUwRzNifkVRaStKPGtobmBnMWdWblFTbFJsfGx6Xm8jQlszL2FwfjJhNDRWPy5hZjhbOi5pMGNRIkd3fkxPOU5na0smYUYxdDtRNEQlQzhKfGBJWnApYXA+JWg4MWpycmA7PWlTaD1qXS4iZl1WKlZlZno+RWZZWWZB''@;'; put 'put ''ajRSMSNnN1Z8clAifWAhYlZaYHtnI2ouOytfLEd5RkVYNjtEY10+YTlHcGZuVFhFIjk1UTNPUz5yLDp2QlRnIzcsa1Z8KzIxKipIWyhrXUdpVypTQD9KVzg7fHI9U1RbQGJuJiV4fl89YiwuUj5XXXF+ZSF4OCRUPSs4UXBdZHJ0MXFBNFJXOjdhYzcsaG5qeDNZdG51JVJwYDN3THQsWCQxP31g''@;'; put 'put ''ZDdNRFAkeFs/S0g3Tl9tdCtvOEVjUkYwQ241YC4udD5Ifl57WSNsTyVMOXdIKVt6bD5GdVBpWTFeS09kU0dCbmdDME0qeyU1cHZ5Yj1FO19NJiNxMVNwOmpCbnlONGd0U0JbUCljQ0VmWX1YUipPYGpBZ145ZVJwVUIxMkdYYlZfR3U4REgoIjYyR0Msey9DUSo/S2hPKSpqbSM3LGR1fnc7a0sx''@;'; put 'put ''Jl9DUSpPaEModTxEcFpgQktGaFAsTEB2NUNoR3BaYWlhRn50Il19Mj8qLG0hNmMxd2YpTjp8VGhzQHRiSSMkMmZpUEo/MXtSPHFPSmVpIkksLjAxV0NGOiNqVC9DT1h3RnJbSXFmZV9zKyNgLFJfIT1WWF87aj1VY31fIWlXSW1nXjBGeX1CMmlQRyR9R2x5OWBNU3VgND4pKz86YFYpO2RJYlMv''@;'; put 'put ''fDk4el9efSJLVmlaPjFFSHBhZmYkfWM3cEFRfFNmSV8vQiR3czBnakpGNHtZPGlHZltjPGo7e3sxb0BHQnVMckx8WHVZTH4wQm5gTzVeQ3JlTSVJSW8xLFhjTDxsezU7NzUsR0NuNExUTFRRfloofkQ1WzI3ci8qMnZwSmclaGg5Wnp4eHg+Qjs8Q1l7QXxda2FacytQPURjcVgpVzdPTj1DI290''@;'; put 'put ''WU9GOj8vYUAiQHhIb3pQaUpic05yWXQ8SDAuWnJoZSh2JCNaYjAsKm1oeHAkZWhJbzN7WTdUdV5XfEBXWVJWKigxKHtbZFV0MSQiI3RZMV14LFFScTVIJDpxW1Q5Wz5LIWtUdX1gUzVqWWhqayN7MVVaWldhbDFFfkFkczQhPS9iZCIifX1mNC4iWkZ3WG4sRTVkP0FJWlV8diNOWyJgSFcwfDVi''@;'; put 'put ''RDRxWVl9elpgPlcoX3VtaUhdNGQvX0soNFJDbyxDcmNjL0ZbKElifVFhMWxgSWh2a1ZVX1tJT0M7L31vd3xle1Q2WzdoViU6L2EucHEoXVZNc0lCfl4+PlFAbjJ1ZDFHME8sQnBfdEdual46MytbN11qaiYzNFFGTU01ZkklJXVhPFpsaGZIYylAPUFZSC59enxdSDlpWm59SU5XMWQuZ1M4K0o/''@;'; put 'put ''P29CJmBDPnBCJmppTm1uY1BiXlR8Kml4YiZbeiIsVDZ5dUMydGkwM3tfcmZfNHtESU9TLDwpej51IygzMiIoQk5YbnR3eU9pLHgmQEhsPHRjRio5OVFDWm0+Xm10dWBDN3xQKVRbXzUxXTxfSGlKUz8mQm0qfUJ2RTJtPkxDTF9rU3hUOH5qcERZYy4sTj0qNFZKZjI+Ol88PnlMLF9XLzBrInVg''@;'; put 'put ''NVAoJDYmXzlpJX13ITFKc3BWZkIhMTgsZUduc0VfJVcqNFpiSWZiT3RKTVFZL3llOjZhTygockdVZEViOTc7YltBZ0dFNmNJRmo+ZjxhOzRnTFF4YDRRXjxxdTBPLjkiNWZpMisoc01Ic3AjJUNWJjReMjNSfmFQMnQ2WS4jXTRfNWE/Lzd3Oks8QylbfEkiYD13djUqYF5vOjl8XXx1ankqUVl3''@;'; put 'put ''WmZQMENWPl9QWzh6InVpWCxYV1tRM15IdERlcGR8N2duVWswJTU9eyNxYClKY1lae2JOLF56VmpYL0JNNEJNQi4qLGtXRFBXInJZWyp9TF48d2tHcCU1VXAxPC9Dal1TakJIPz8pV1AmNHlQWEBQcD9tKFthYF9Rd0A+a1tUMjs2JTBjNWY3R2R2QEskSylMP1tqN1M8ak9uQmQiLDUiV3c7a2kx''@;'; put 'put ''QiNDcFgueihCKFZzczVoPWdYPjpadjRFcip4Z0khIXNKfF5gRGkrUU19XXJUe1NKTHJ3b3ZSa0pNP0V9WiJickpxWjpNbjxASGRSM0I0QW9pb1pyVXxve2spbnJZPzVydWwsVFlJW29eVCMkOUU0ej5ILFdvZ1krZC9UJFU1dCU1dEA2Q21GZDdFQGw4X19+KiZrX0hnaUNUbWwuR1IhYWRQPGt3''@;'; put 'put ''SDwpRTFTODdIbTY2UWJlOnNJQFVYYDYrLy5mTVt6OCVHMyRTSXJFWTFgO3ZhZGgyeFJZIWVCe1NdbHtFa3hHbWVBcCNtYyElWVtmMjsuRXxNfUBPXltLNjYuXz5geHRAc3MyPnpgK1UudmZgcWU9e11iQ2M0NVA5Iz0hTDA7bTdGQEl4ZX1LZUQoc1Z+KzEydn1kW3A2YVh9biYrMkpBPE8yO1tn''@;'; put 'put ''czcscC8jOCxaRk9hQy9aV0QjWz8oWFt+fV44aWNecCtSc2dLUWcqbX19SU51Pm1Tb1JXJEUiQ24lKDIxNjpEIWZIdmhGfV12XkZ9ZHMrSnNsT09ZOl47M3FELC5HOiwsUHl6ZjQuI3s8QnRpdDZTMFgqfVVdX2kzNSNNMjxlTF1ETnlLWT88bDFvd2JAMj5yIj1TdHtERyo/IWJYU08yKSV6d3tf''@;'; put 'put ''a0Y6b3oxfFlbUXNwJDE5KmkzaDQ9RmRzU1IxUlhPfV1rWHwpPTViZXIsZGNTKH1JcEklMVtRc3RSZiRHJD9+YSl0IyhbNShVcURzbjJoPEpJVVhPPTUjUzNEfkJ1SVtoZk5NdEw6OFZDd21mfUdQdUleV09SMVdyJjdrI2t8SlU5WkptMVIiQSJlMmh0dWBFUkVHIVgpPldeO0AoaUtFPFlyTU07''@;'; put 'put ''SmlyPEt7RnYldzJ7NkZTZGljU3w7QHApMFdqK1VTMmovI3h+JDk4aS9xWUc+elhVcHRhaUQ8bztjX3ZEblopYm5nTDRLPi5sQG1FU29iT1B5bGJiSTQ8TTF8XlpqS3NgLiJ1fHlzNmovKlQxZCZHIyhSaVUoU183ejpCd1ArWjhvWCQ9V2RvT3JLK0txKTFTZG0pWUUqRiRxaFgqTjtyeiV6an5E''@;'; put 'put ''IyJzL1khN1lQcn5MPCopdyYqNGVkXlhlPk4rdUZNJTxDJnRYViorMn1gI1phSWhTamBVeTB9JStwL2NqX2BHT2hTTjpHbG1kK3VaYGJjcyZ6YURQb2kkdTlZdGIwP1FFWSN+Vl0hQ2tvQjZCTn42JEAuczpXWGlGM1NYMnZVUCNzUWJhcDU3akU6ciZRZm09RDo8bFFkbEwlSn5td1B7Z35od15K''@;'; put 'put ''ak05dl5BcUU6Z2MmMnAjX09BUDtUUWk4cUVZWTVrbjBKZ2kxNiRTKkUxU2x3YjIpaUNUZToyNmMhdjIkU1liX3RHMEVhQVt8K1IuM2Zgbzt1YmQ0Nkl3Tlsxa0hbNCxlMF4rZk13MkhBZ3hQYipLQkdrViZhTSkzQDNISGEzY2gzaGJxXmglXjxWJDtOaFJnbXJDeSsleHVaWnEvYnN3O19jNEdH''@;'; put 'put ''QlhFczhteldWWldFOTdRcD11P3ZFd3NJT3E4YDJXfDkjSWA/PUtqKVgwe30qTmRePHQjfTBDcGA3dEEhdWAyaDZDXnEwTWhOU3EpTVNZYkRwQmEsa19OWip4T1RmRkpZaU9dQjkvUllUKWJjXzwhSEFdMUhPRUxOUnlJOHEqUC9BTzNraHxifHl1LFtpeFBEcU1IYGdJQ3pPZjt+Q1lTYzM9N3JQ''@;'; put 'put ''R3wrQFZNYmFTZ2w+VHRfMl8pSEN6S3J9Z0Q7bDdeNHA+ZChtYGdJQ3pNKl58eHBZL1srWWMrZ2d7dkM4ZFFWMHBnVV9pTW9Xa0NvRigyPVI8azZ6QGY4RVIkbiRuX3J2XktxKW9JKGVwQ3EzXmwmZC5UQCg9dlhydm5kcG8/bSYwaDpVbjlEaSNMRlVbUiVvJE9rSWFRVlZ5JDpJdzMjVkt4Ljx1''@;'; put 'put ''d2QyWz5yU1oraGpCcFYwdCFyUVZfSllLQjo9VGl8aHx9JjM0QzloaD81OTF1ZzVLVUZZRjAvYV46XStDZywha1IrREBwR2AmSF9kMnQ7QT5jOHpVOXF1XXJATnU1ZzF9RSxSZGx1MXZma2MiRWlzQmZtJTpJQyY9eDQrSHRGPHdedThPKjNOeSZmUkk8cC5mKl00On1iTlUkVVkwUXBhNG9HfVtE''@;'; put 'put ''UihYJlUudEorSktrP3RNJiZ1T2YhJF9qN3wvO11sWzl4WE9KdFp3Wz51T1p4di80OypNezNBNG5+cUlHdUUpIis0MT8sYms8bk44NyoxQmR7JHYuXyNddklTXlBeeF9HOixTUl54XzQuLlVSL0w2a1pBQG0jSylMb2FIMmhiMGkvSl1Vbz9pW3xdeWxoOnFYRytzYnY9VXxveH53QGVKKnp0JltG''@;'; put 'put ''dCsoJFpzYjRtI1dafUQjQ2YlJFsyT3hnUGVSTlMieHExXk5aYHJ8VVQlWVtWX2dJWkcxP1ZfckhFXShwfCVfclYlZCNgS2NRZV5dVWxie21AVipwaWlFb2ReOnFVaUVvQDpYZjtgXWA3M1JMfiVMQkFIcEE9K2h4JClBKDJwOjUkcnIwbloyR05ZMmhTfHNET2RgOSg/RGNSMVRCTCpeO0p9Vlt1''@;'; put 'put ''VS9pdFlLQTx6RFc/OjBzaDl6TT8zVFtNZFt0WXQ4Wn4qYjswbktDUGpBdSJMLjJ5PipURk5XdFl7UEdwdyIyN143ems8SHV2Kj14QSVoVygjMzRAcn1yXXVTb3Q9PXhtZnFCclojRWZ4aytxKm58UWFTXWlqQyFxOmljaFBTbSpOKlJxclZ0WiNyfXk3MW5ZK2dkI2g4WipqYW1gcl5ZZz0wbSk5''@;'; put 'put ''YmdkOVs3OWQwW0FjbDwrSWhVbn5ZO2toXztHNlkwMGUydVQ3dyVIPGRVS3hdQDBhR0spVCxIRTMlalk+QTJQfX43aDc/T1JeekAvY1R8Wm80VXcxKFVPalQlXkgqeytDREc/VE5NdTlCTVR6dyMqaUxFQk9yUitnTEE4OyM0JDwlVHR7IzRwJWJGd0VaUlhlPVdES3QuNSZ2JWpJTTkyNUVQQzlX''@;'; put 'put ''eE9hZjVOeVM2U21nYU9PWmtmUjxTMHNlMV9JcS4wJVksTl10RzJkKE4yYXx7Ylk9MWlBOD5LUUUoUlNsO29zYCE+QE9EfmxdcmoodSFiI2pAeClmWkhkcCRMbF9YQy5Pc3hbaTk4YCZgemh5Ln15Pl1XYV5tQjswQCYmRnZCLEROImc3cEpLP2dYVjc4L2VYMEdzcWRoM1MwWXl8emwsZDh5ISUz''@;'; put 'put ''M2gqJTV3c1R2T1J5QyMwM1ttVTswQD5lQWgyTi8wamRBZDtUMyMoWjYlPipUO0c2JGUjaGpWVXB0MiFNKEt5L0pAUztGQDB0TG5rQG1wZWFQSz9vX2kmdDVmUnkkKGVKfEV1VHRFYiE4PV4vfWZCbzFAYDFoeGI5bzAzVVVyYW5BYThLMix9WEA7JXs0ViE5aEQ4UV58aTZpPmhdPHw+KUdzPVo5''@;'; put 'put ''emJgJDpkb35eW3t2PVhfOEBgckkzNFNUeTdALGMoe10rYjkoOVgsRHFRS1lhZj1lXllhYEBMMDRReFQ6dltZTDVAcFVLcEN2OjV0JlRycGgzSyN1bnFDUU9CcHJwUEtbJkMpZDx+WWVYbSttZHhYcDBbNyNuOCVvZ0ZJT0wvTk14YXRKNC5NPl88eUI+c1F2YCEheXxYeGoyc09fZ09iTUYmWVB8''@;'; put 'put ''Z1VsYWhxK1klU0EzKWAoISopSktHRFZLK0F5LmwuKC8oNWUoZkl1ZEBhPH1JZkE9YEZOfWo9TTMlVSU0LC5yXWJPaXxZe2xRVns/Q2RfcWQweCV0c1tCYD1AUTlyT2JRSmM6aTBmbUk2XXZ6WDMycD0qQipuTmkrVXw1SU02YXFGVk86RUJ7eXJuKnMlVENHX2lkbDRbNi5sS0kxdHR1JlFCeS48''@;'; put 'put ''eHhkXTRhdG9idn53fFk2NW84OytxfldNVURiXnE/NWYlJDo2bjE1Pm5fXnYwTVVmfmMsaV11NC9IWjIifHkyRSw9bVYvazdoVTJFb0thPHNfJG58PkVvOF8zWHYzOHA5Z1o0ZVBlXllvVE1jOk05cmoyOntKX2U4S2hVeEsrUnFoQ3BZLyZgdnU8Wl0oLCJ2JTZbISkjVDMzRzw9VEJLUzRfRXlC''@;'; put 'put ''ZGNBYGNnQTR8JmBLPmAkYkxtfGUsSUM8KjFKRnRrQX1QaVtjdTRWPlA4di5WbmBfJFFZL3okPTZxWC5WMHh6eEtdanNPPz46OjVZSDIsOHI2d1ArdjJLLy90YHAyMT1wZDptTXl1V01xdXM8L3E6JVpsd2FEVWdTV25ERFRbay41b0d0YVUxXz5ab2xteE9wVmcqMyMyY1NieFtfXy5BPlAhYjs9''@;'; put 'put ''ST12PjIuNDQ6ZEovRkMkez5VKEtXSSYqdG0rM0wsLEFpYkRfaC9gaH1AaDVMK2QvZC4mY0svREdkNUB8Q3BvIjpwXnJAUjFeSDptOV5deihKbDB6TnNUdi99NWBZXnwpWXg6KjRvV1dkRi81Z2N1Oy9ObGpkcCxLMmhmezlSdzo6Tmw4NlM7fSU4Tl8lZzVodXEuVEs/bGFdYU5dLmw4NTc1RGlC''@;'; put 'put ''WnN6NGJjKWV1QzddXm9RW2JwJjh6cHNmaHh0PChXMXxMUHF1b3Z8Qzw/XT4uaCxIclI5RkFUaSQ+MjkvTCNGJHZWOUVkalA/d1BXcWhJQV5RPkBENVtiaTg8Zk1CIiN2Lnw7S0t7Z1s9MEpPL0Nxc0wjKndbQENFLzdzPEMjMDh+dzFXfCxHKWY3WmclanBRMTpdK0puZUNHTng3fCZUQ3Q8RSlj''@;'; put 'put ''PHI8VUcoUn0qbXdFIz9lNnsuNSs7UXJnXlF6ZjJlUlZ8a0UremVZT2lWYT1GOVlha1J4OXAoSCxqUk1LRjZsUFlLJUR0ITlbQ31pNFFCMm00U1t3KShuX3w3SCUvQztTI1J4Jlhlalh0O35pclQzOVk5SyNoMyZ1Q2htWkNWKGxib3NLcFkoXTBbfW9LR3s8Tjd4JUJWVFt6P2JocmxUQEdfPGg0''@;'; put 'put ''dTdmMmReclF4eTx8bHt8PFZnbXZAZ285VUZzcD8yRktRT0gzK3Y7PS9meHtVVSxnU3M0YSk6U1c8IUMzUjYlbVBLWSxYW0sodTQwJSUzKm9oc1FVR1tobmY2VDhHQ1YjeDN9b3hPVj4/SV1te2Q3cVE4ZTx5YWt3dnZTbFFZS1F9bTJgSnQiVTI3K3AvZGFIc25yRktmPy5+LkdMZjMzQE1XNjZZ''@;'; put 'put ''YHxEZmVadyxQdj80PXl8ZFUwblhdIXIvSGYmTTl2W25YbShlVDl7bUlmTTErR2RVaD05N0hHIyRJfVJuZnRVQGN+al49MUl7eXkuZC56PVJrWnR3Q2lJK3IyZjQ/MXBaNjBtYDZAcWJfcWxbYUAiJWd5KSFGcS9kQDNbfWVFPUldYTBvIUR9RTFmZUFeMEcxYVQscG97TXY+RTB3dUtDPThfQVFX''@;'; put 'put ''aCU6NmFmbE90JDBjKy8uOC9uTDl+W0d3VWdhVHlvc3E5QyJqMkkiMGI6RTZNPi5mVTl9T0JMXyxse0RXOll1c1F9K0VBNipwd3Rsb11aX25ZXTV3VjhiJHtNNmMkXzdPJVFMV1UoeHFgQ0c8RSosSWtifnQ3fnAkImc/WT90e1VFLEtYWFlvbUx4ZS54Ul8qdF5USWl4TFZxWFR5d1Q2fWtmYm51''@;'; put 'put ''OVVtKzVFdil0IVZGcmJQNyojSVBKNEk4WUxMV2FlXS43fUlzMWZhKVFDWCw+M1JPIn0ic2NZWUooJkcrSE01ckk0R3kvJlRydCtJanFQVHkpPUhEMmo2R0dzT2BILDVbTWlHamdmYmtFMGt1Intreil5Y2peekkleG14MloiTi9oJXQxa21DOyhYTzdsb3d7a2t4ZXEhezIrIiJ8W2EqWGpbMkJB''@;'; put 'put ''IUoxQm50fFtMTnMmZUpFOkl6PD5oWTxpR1hCWVBYcVo7NmBKQVFqOVs3ejQ7TXh7NnkkdmolRiJJUyowe0opS100ezVjbjMlfkJbKVBHJDdJNVlOXVd9VThZIUtFdH4jV285PG1pe0dEey4xRUgqZVJPVmNlWzFESzZIdz4uInFPbkxkLDddQkc6ZDZWX01Zc3FpdHlEUE1UPlNkJXBHSVhpeFJA''@;'; put 'put ''fDVxJF1PIiFCJSRxRGouKGNLTDN7ZDwqUjNnWUR8WSJBX3xLKjxCRVlzX214MkszKmtgbFJjNHh6MkIqMnJZdWtDa0FTUiorU15CLFg2cT9vL1FdUHgxfDQ3IXF7JDFySTJJTlRIKTRjWz9+MGpXTGhPc0VuYUBZRzZUIXp+eClIfkVqdThya2c7IkZFfCZAfGlwUihmbmsvSnM/ZU8jQElYdihQ''@;'; put 'put ''LCUsV0ZtYERAWnlSZ1dmUCwrKU12YUF7IUs2O0ZOJmw7VWdEQlJfTm1gPnNgTmlkU1lFMGowODtnU3IyOTtWSHZZRVIkS1dIOWd0PmZOeEBdXk5AcnAhekVzfTczT3N2fjo8U0hONVomcE9bPSNITWhSIWNAO1JHNzRYPkNmRVlDQlM8RFo1JC5rWkUscSheVFA4Vighb3BDaSlJR3BVLFMyYWtX''@;'; put 'put ''JExuLCFaJTQ6dS5aVUksYSUxTnY6dSp8NTFiUTN3JWQzM0A5byFpNndNKFY1YjheIUlqVzFSMUg6QExQSkxMU09reDhrb3NRejFFRD1JOEVSY3BxVipRX21+Vng9MFVvZyN9PFtGU2VNKkFfczZbWlVEQFEyaH1QbDFpKFpMYUNNKF16aUZ7XzxRRlR9dmxKaTJ7PlovcmopRkVvUFgoMyZqK0Jr''@;'; put 'put ''cW9raSFKUz4zIkt3IVR0YDBnV245Z2w6Ik81LyVjSXlFcUtSezVtSkVkIjNPUU9oP2EvZ1RHRV0+I1hjcGZHdlduJkp1eUk8eDArJWQuKi5oRD9VTywyQEdTe3skfn0zPiJALzlsOmUmaXJHeEhdOHxbLEU5WSs2ZFYmUzlJdmNhUSNmaXh2YmkqSlViIypPcGFgT11wVURvY3s2bGBDYiJvZzkj''@;'; put 'put ''YXpOak8sfT81NFRFUmY5KmM6P0Q8cTBaYUxnbTBqNk9DajAuV1syNDprRU9hMTEuTyhSVlEjU2gxcSJaIjZJT3VeVGNIPW5QSn1NSW1pQ1N1UmFsNGJTUHZtL3JiRk4wV3RFQTpVUXNiZipqUzRJRk5+WGo6a0UxNVJCa3o2STIifiteVEYwMS9abHNFO0xfOXVKOEU8NGpafXosV25VdEoyKWJC''@;'; put 'put ''eXooYTFFNT9ldE4qTkowIndfUFIpXn5SYUNHeihOWXR3WitwUmRhWW1uI0o3WHw5PCh9dmJTTUFdPkM8d0FvS2pIb3Q2SU11SjxQdGpsfHpJemZKLEImRmV7MVI5SiJNMGlUSFtoIXRjImd7aTZLYUk8VnguS3lDPnUoJHVKYkh5TDlZQ2Qza2FDQzY1OV0+flFFRWBaeywuSTIpMnU/diNEREhR''@;'; put 'put ''QFtDbzQsQ3RkN1g9JEJ0Y2dSY1VZIilHTz90YlNAem08eDc/SmJUNUIvQ2JUNnV+RVM/XTJwRj9uQ0M6b0VhJFF+dndHI1g5a3dHJCJsQ2pMLmE3eV1uKUVRP35lIVdqbGMwdkxzYkU2eFBARiphKmlqMD1ieGdmLG1DZW5mSDFhXUM3bzAvZkQ3PCNsXkQwczJFVVI6KkxSSmdQSl5fWFVSZGFj''@;'; put 'put ''VVdZQm0hdUJZVX4xZiRFa18+TTQ1QSh9RkYiQDspPFtpNnlVKHZ5VT9EX31lMyRQS0ZpbDpjOFtfdV9WMENLcCkwJTpsVXN0IXZiOmBreFVJVVEjIU0xYz8maXozWntSWUYmbCRhPSVuIWYjT0hnYDhpMWY2MWlQJjsuRDtbTk5GWWNQLC5EKlAjc1MvOGsuUyMpNmtlUFsyNUBEaGt2aTFmLDIs''@;'; put 'put ''ZzdhcFF7Wy45NFQsZHBDR3cjfnZ4dFMiUFsiQVRHe1duQHd3PUhPIUxvLjAlWE9UUkJrI25DMUMzfihNNHU1PGJVLi4qSklrTTh1Ll0ocHVvXjl+YSNzQkpBbGdVVT5eOy49fUAvaCtMeG5QWy49RnBsYUQ3WDw0PmovdHM+RS5fLy9EdiwqV0paXTowY18kUT5qR2Nxa0VBWW9Qb3pHJE9nbiph''@;'; put 'put ''dHtndVY7MHI8Z1VVTyN1YGduVyg3IV9ddUM4YS9rbFNtKFtnI1dMVkVCfUBCKC97Xzowam4/Wj4vOVk5Skl1VGt9PkkwM2ckby5sazB0TndhcUUyJF94aFZnaGllQj0+anYldmlyMzEmX2hbIkZSWEhEKD1XOCxscDJ+QUNHSm4reyhZSW9Bd3FSeCk1L100JnNNY31XO3RsYldhd0MkVFVjOGZq''@;'; put 'put ''R3FIKnxGKCFNMXd4Rm9QZkRIYD1pMlJIYFF4MXJyJDxlPHcsfX5mMHI0NVlaWi40KUs3e0cmPVJUZF48OWNeelUkc2Vza3NLSnc7NVcpSmg5IiNlPXZ1XlZHYlpjXlgjZz4vYmcjJHo+NntFRChoel1IVj8lNGUsN0B2UkAlbnsqWCk7WHIvPyYiOUlKVz5HIXMzRSwxTDs5On5ValRuNjR9LjEp''@;'; put 'put ''fVEidipSOlhMMVdyPk5xe2hjemgsezR9cW95O1AzKVckKD8lbW1sYmFTX3NsfTRdXTRLWWJJaH1eZE9kfGJoXyg3QDo0diJxc09VMWw6bTVVW3Z9RTl9U0N+djxfeSJpeyE7RDNYNlNFbXhlPjIkaDRiI3oiWENdKXdAXXcpZEZkYyM+WnZaY1JGOVp3d255QTFFZip4bUR0e1NdbWc6XWBqKjEy''@;'; put 'put ''Pk96UWhOMWZ3OCpVJjBgQSZjYzU0PVdPZlYvK1F7Pm9rMVlic2hzN05FJCVPQi81Nmh+NC90OnQ/MXJaIzZNO19WYDkhPGpgbXEqb0AiRj0zNCwsfWNtVVQ8WGw9ez07PWpgIkN+RSZXRklQdGhva15RfmYiMnBgcEVUcCI8ejV2NGMqZFJjempAYmooTjtfR19VNzdrPUliKmUsLHc7UilWYyhK''@;'; put 'put ''MVJUOCFJLnE/WCsoLH1RKWMjNk1tNENycTdDVXBsez9Sfj1FImBUS1UvXjJdWDpXd2wvUFBMWnpYPzFiTGZXdnpEcE0sRXsiQUNaO3VhbnVXK1VVOlZBT25RZXFjKUNWS30jMmVDVFk6cV9jW01BL183VThmRitqMlNqan0wSnpUNXBWKmxSa110PlFHSzokIlhfXjJrYXxMZUJDUkV4NT5Ubjsi''@;'; put 'put ''MzJ4U0hTQ0tuaj1ldz1DVlpgZj12Tz0pcWApOUF9RFFNO0ojS0V3SyNAcmhpeVVKR08mLzE6aldJRDlhOlthfEZFfFhQUio6dzlGcUAje0Zgb2tVTT10S25APiFkNDxUTXZEY1AjN3hAZl1IY3U/SFddOUMoWkZIJnI/Slg8b3s0NEkxM25pUUV+LCE9fkV4fmZhbXZtL31tUEUwa0oqdj9acWFf''@;'; put 'put ''VWMuaHE4WytASi5nZW1sbVlRNmlEPGglU0QjO0xtQFsqdEhiNHQ0Wzt4PmJfJVs0ZFhmPjQsfD5PUkNCKXpUU3dfRkVsOVJpfEUyYU1PSWYlOyxTIkR1eXZFIzs3YXhoIkhESVgmU3ltfXZociksNU0zO1VWSWgiTzpnc1RBNEJDV0p0ZVFaYGovc2UhIVpnZl5NKlVncG9OSSM7SW0iRilXZig2''@;'; put 'put ''SXJzTTJIKVhFbE50Kyh6Lm8pKm54YzU+K0o+T1lJKEFHfStxZlRZeHZOIjF2e1dlODdheFo3YFJfWXpeckYmS3c0UWNCOSUsfnZvPyZ3WFt1KVl1azFmZy9afmx3dkhyZzVrYGdaK1s7XURSL0JnXn4pWUBhSj84PClDb288M3Y8Sjo0aWIkOHluR2VDOF9fRTguemxtOXY2TUA1RkZiT2MzNF07''@;'; put 'put ''VjhCRDt7OHRNVltlWTRMMl5MfkxZMEU8RHVuK09bR0VWPSRLQltLamMjOEE/VjFyP11BTlghazVvJmUjZjcrYmVTYF1CRiVuRElUIV1WTERfKVBzRWo4Q1UvYElVZ3Z1dHJMSkQ/Mn54O2hzQyxTVkFodmp8WUkwJHZdV2pWT3xDIzVtckwje31NYiFpM0xuYSloeHZiKGUyOHViWUBbNV5Ha2J6''@;'; put 'put ''RzlhKFBNeX4kNWt+SiR8OS5DK2AwJnhDdXolZ3VjWXBmKmdQeDxRIz5ISXxEfnhyflJsaixUd34wNkx6TElZaUcqNFghZ0c1OkJmO1h9PnQlYEh5WyhCbHopKltGN019XWImYCg9UytvSH1zeTVnMVU1QnthNUojWmVONGE2d2gpSnV5KnF4Kz1CekglSFB6Tl4zInpQKj9JTCY/dkt2Pz5fMmZq''@;'; put 'put ''fEsxbXt9c14wX3cjNnU8PV5sSGM7SkpWYEJwXWhzN3Y1Z3AsUigqb2glNiJEJmErK2R0WF8ve0BWS0dNbSxLTFRwbk5NUlReZEtJWXBMSVJENXJuJUl1aVd2Ym4wO1FmRktmPVUoeT9rcEdmeUN9Piw1SURBdUxHfWUsdmhSZiM/RERHYWVvSSlrOGYmS24qJUZYeEFecFFCXnJxYV9bTnlAKEw+''@;'; put 'put ''Lm5QKCorI0F2VmZ9XXNeMF99QnE/SShnUUwze2ZiM0pfL31oOWU9cEp5R3prfVAqUnh2a3xRUG5JOm59b3c/XkRrPGl0JlRgJmxuaCoxNzRhdUxeYVt5Z3o2dkxEaUZMVnsxT2EoSDtefUI2fXRsIXo6PTAySU57aFI5RSx5emYzfVRNRDZ1LFJwdWEuL20heVZbMG1SPjJtQiUzbUIrQkBOM31h''@;'; put 'put ''bXNIYEhgbio+MW1WTVo5YGBuMCNxNUNHd19TWUNTPzYwTUk8YjpObDQjU1UpMyptYE9gT2JPSDZsXXFkJmAoN2hiJTNKejguWG9AWi88JVojWCxZNFlTWV9yQzJvZEF7WVcqVTd8bStzSV0oTTBHayIhQyFeXXNIXiZnOHI6WmBzbFJsODRqTV4/RERkeWkmIl42KW5vdihXeHc+KCVKVz9SQ1As''@;'; put 'put ''L2pNZDpLZU5rQGEjajhSYUhWJVZ0UFNOXXp2RmFIWkxVfCt7eEg/NjpXXS9OO31BQFEjQnNWajxNNmFdKHpBZ2lbbWRTUCozZGhwUCZsMT9WPkQ+REFpMmgzX0ZDM35teV1KXihpdCR9RyReVD81TU1lPTBqaEcxe2NdYGQ/I15xNnVzaChqekttUWxVZ0UxakcoZz4zYCwlY2N9aGE0MXs5NUsj''@;'; put 'put ''a1U8YylMdz9bUDt0MGglUUYqNyJsWjh7eFJydH5RQEQoan1XIVZBeElHTzFAUlJNenlkVGd9XmlKSllDcn0jVSNXImV9MipZNDxmIUZKdldpY0lPWmQ1SG93Zn0idm8/LDxbYCY2bU91Wj9RbSlGTkcyWFVMSSFPXXFSZkQmM3hVKXdWNU1JIUVFdio1fm4pUnc6YFBTLCYmZnw/I2VIfV4vfnVq''@;'; put 'put ''SDZET0pPQDo0TX4lQiFQRHQvUS95JDUlUTl7ZHNfcmF4VCNtNy5WTVEhQ3R+KERXcV01RGszX1FbRElOM0BnUTNSYUJsZGwpcSUpOSlAeDwqUyVkQEFvfiQyK1pnKzB4TzNxM3t0WVlTUT5bTE1SKjlzbXxubiZKbkRebnBLNiw9S1tgPyNWW15HKiI/YFN6JFtKdCxRXjw6JWwwZHthLnhXdk43''@;'; put 'put ''dEBGPGsuNnphW2pWfCZLbDo7N3hxSV84aH09KjVvKVA/MEBqNW95LjM5ZGpLPGs9fVMpOGFyRWJSYlltKWtQbHlMMjpAfXxxSm4vJGoyKyo5KW1KJlJyTFZQMGczYzdbMmApUFVTazZoPyZPZXgrQUxvV1ZtdFR5LnMhN1dVbGZ3dDVMVXghYzA/TyN2NyhtYiQyUWMkTz1YZHlnXVBeSUIlKFpC''@;'; put 'put ''PSVaPzFCMEp5JUJja2FCW117ZEhIOiNAVCF1blV6WCRsLil4RzgwKjg3Xj1OVykzU2NwNVpJbmc7bmtkbD5xPHp6UWZxd25wZEo3bWs0a2NvX0ssdT55NkA7K2U4bVVTPW54bkBNflVeZk04UV8wKld+SS8vezd0UndEOF5CPjMqUmF+Y3E1OmIwP2Z9bGh2U3s4Yyx4R0Yvc3tRNSY9RHlXb156''@;'; put 'put ''RzNzQGMpS0tVVF5Ua3Y9PGVhNzoyV3JvM2V1ZVF0JENCUD1VRiZfQ1tVMStIbmc5Qk5+V0ZNYHYqSz1pOWRURi45bFYxO1ZfdyR2dzlYXig8fDpmamZgUGZmUTNtPyImRSgzNEZdMH0uN0ZLN3NGWykpR0AmN0Q1IWB3dmR7JUBKKCNaN0tXck99KUE2MD1UKz5lS2t4OmFEb3YobntQeXdoKS41''@;'; put 'put ''b29Qb2lGZUJnbXBANGg6UXo8VHQ5NF1DRGgzck10W30mdWV7SVZwJFUzKkM4KmZ+ZzRVXVpDbyZfRFcsV21kc2RsY3hOdUJpLHRTaWdBRmNGM3EmYHFrQHw7WGt+b2hmUT8sL14zVUNNXW0wWykxZGNLWE1wblZmMCh2RkhFeWBLK3JTTyx6ZmB3cSJvWU1TXUszLFllYC5NOT9lc0xqRUBDKUBW''@;'; put 'put ''UzhYNTUsRS9zUkdge3JmTX1laDNUVUNzIUBoW3xqKDEqckY6eS5Ifm0lQHVUNiJidFVRS2pXVnBVaW4/bj9DbyJyLiJ3UXc1TFV2NTRhNUZTcT4uJC5OfEgwa1RyViRLN3NaYDlKUkFfaUxdYjNXZXZXNFBJSz1ZLz0sKW9kS0JfYmF4K0JIeUZmO15gKEp1eUJdLG89Q0I+dUpBNlBSJl57ejFL''@;'; put 'put ''anp0N0J5LCt0SitEQCRCcWE+dTZCb0ZGKD13JFFITm5ROTU5NVdFWjBUN0Rza1lSN0VTaUFBQSgoT09DIndEX0pjY2UhVjU4dnpEKSpRIkNBPW9JZSxtQTpRb3JMPXUvRm5Sflh8TEFBdVcqaD5NQUElT2JULnxpTkVrWzZtdyZsaE5OKz9AeiNhWmZpTVRJOChSUWJtU3VlKFpYTktuSVo/SDZu''@;'; put 'put ''YXdFJn01NzteT1lGNUl1UDc6d1NBU3pGJE9mellNYGpmPEMxUnpCJixEPDAsaUV2RlBgY1A6SnxEdz5dVF9JJlVUe3xqR0ZKYlRFSj8+IlFKJVZFLkMpTTIoQGlLcndyPzY3anhscj1LdDt5ckgoJSlPVFQ1XktdUD9LcTssVlY+elkmUH1odGdBdyoqXkhicVN1dlpdOTZEcVRnN1YuMkVqIVlt''@;'; put 'put ''ZTdTQ2FvJHclZiE+PmV5QStYNipRVjVwNjtdQWtmJUVwNC9AT3I1OiE/MX1sSDxfazhGazIiTX1YVyJlVXBQOF40U3lQcl1nbk4yPiMueXs+YmdFK29vUy8sQGQ/WEtOX19XIzdwL3piSkBRSFojTEBCJUMyZ3xlZ2E9ej1wWl8veSR1R1lXTDgwfSFlNEhjOCwwMU57X25DcDNGPkZFQDhySTl1''@;'; put 'put ''OVkydV1VakB4cCZ1fGVsQldaLjBmdSl1I2sxYV9OMnxdMigzYDF6c1FVM3tNcmJWMGZAb09WPTB5WnBRLi5EMEgpZyoqbkZgeWczS143U3c5XX0vTUhxL1VQTGdMK0p4WXpENXhbWmkrPEA0LiM5JSt1aE13IV93SCZUfWt2I0s/K1BTUEUjYUxLSVB9YlQlPUJlYyJiY1MqQCxJdGApdztMbm9e''@;'; put 'put ''WkYmUTVKeEouanddRUhFcXhnZ3VbOFFwd2ZOfWdeaHs7LnJ1Xm9Pay53WzAkUDE6VzZ8RlFqNWI2L2V7akhkSzBgdjc3LnZJOGJwc1Msa0FhazZ0fVA7bmZaZTVIO3p4b2hdT2ghLC98SjpCW10rbUxmKmR5PXVkMnMyVWU0UzN0W1QoP0hjUjcye3o4ZCZHVHNUM1s+SVMhcTguMXhURFh6eUpO''@;'; put 'put ''XUZ1YkRsdTA2YHpicjk+NE4yaVE2fk9rQkV2V0NecWBIaGNvfSNWVlciN05IRlVoWDtwa0dJTnldczMiZUg6ImtIa0RfJCFYeCpzMW4rJGw7Xjdfd34rZ0RPNzlHTy8+RldZZGAya3l9KWttQms5PTY4IUcuRnQ5JiwsQjVASC50MFhaOGtOJWNrd045eT9FaCE/LF1XP1hfbT05UE1RWDhyWmVi''@;'; put 'put ''NkYqTFlbcHlueXZmOElFSWFoIyhxKnJiUyJsRzooJTllImBGI2F9Uy92czM1RC9tYlMoWV9IMlNncSs6fnl+VzgxLkhLcGJTRz4wX2pGOj10a29PYkBkKk8mRSRgMGdUZDo8Mkg+IW18dj5ZOj5bd0JbJTpaIj02MmhGYGJtXmVwbVklbWUvbSFAWW1aXjd5V0lJZ09SXX1GOkh1bz9HXjo3aGU7''@;'; put 'put ''fDlzeTx7aHkjXjdJZzYvIWFMTyV9YE4ufWRrKiJtI0cud0RYem5dN3cqL1M0UjhFbX1gO0FePmUvaUlvUGlsQTBYXjpjQExraVVmWzJ1NSRmZkA6fD9CT3NqQVEuIk5FYSUoTzEhS35HOyMyQGVHMj5vODUmOllPZmBwXzlIW3lzNCJsR0c1U3FzcT48R1hXOEUoODglTVUrPGxwaHk7fDFBV2BI''@;'; put 'put ''bzpTYnUjVi9OVHd7P2QkVG5hUmRvSn5iMmp1YnByejF8aFk1dUVXPXtgNU9SSlZ9NX41OC5GbVMrWT9MLlF7UGVCX2RURHAxWHY3fCJdZkokPVl2Uis1e3t9LkZXQiZpKHpBTURVJj9YKHNzaURFWGhBT3o2PlpzbSxxVWUzYzVvZ0dtW2dwXiNXNnR3TVozck5adFZmRlFlX3FsUyFkPnBtQFlX''@;'; put 'put ''UWZBWVVbQyooVDc5fWtDV0libUtkPXo4SlArP0Q/OFleZSg9PjVYKFUvRGhlZ05yWFAyK3YjUHxPbkJ0YEhgJU9MYnR1aGcucHQ7dGxPX25SJXgzU3opV0t+Yk1yKDI3aGwwcERBfndKPiFKe1FwRypnRn5Qc3lVfUFRenYlSkY7LiZoY0guS1FzfV0wZyxXMk04ZihmcktTRSJvMmtuWHZ4dGZv''@;'; put 'put ''N2p+Oio5M0tbZDBjdWpwVDEvV0FQaEcpbnQrJHlnY0cwYlt5dDJGX2NZIXRWXzFjenNWYDpqSTJARClVNyNwbUdmR2B5YSNjaGIyVkVWUWlBQjp7UltyNCV8NnZCWTAlKUpIT0UiaWNsWDJpXTNzUzk1YXN9UnFbZGRLV2JHW2NZQzZGYV4hbD89aEBdM2l3JWdTWnMzaERpSUo7O1FdfmdgLFpF''@;'; put 'put ''NnAzLntFYmVhVjtpXzBVeHUkQSgocUQicFovIUkrbCo4Zj1SSSV0WjIjbEdUZllIcTYrZlpYO21oMVF6NSpeKF5gfUUxcmEhWCNRPyQucDJHdDFtaSw5Ly89bXB+e05ETDNCY3hfJk4yQ3A1dyVTUSM9JSlGJGIyfT03XkU4OnFjXVs2Uzc9cV0iKUA3TkxpPHo1Pl9CVVpqY0x1cit2U0NbUl4+''@;'; put 'put ''a3pGTmxVS3gsRSVqQ3lHRVRlYl5HZHlydmsxWXEzXzQiZD1kQkhnPj9sa1VKOFBNLmErMDkzdWxndnxKNmJfW0V0TjNqZUIybkdPZUA4c0I/cV04Lkc9YG0kd1Q0cilWcGpUXWpvfTtNInQsVGZTM1FIPXA/PW9Ccix1JntWfSZVbSt5TDh8Y1QlJEouTCM4az89bGZlV0RlcVovWl9PSEZOWlJh''@;'; put 'put ''X2xtVjRjZyozUS5vKG57bSxNZnF8PC8iYWdIRSojZiV+X1E/WT4lNDZVYCMxSSpMWUQ5Q1o6PUlkYUdLLzZYITJQNmtPVmplYFg7K3EuW1FLdjRsPEFQaltjZSQsOEROUX1rPFQhZWBnV353aSFVNyY5JFlWWlk7dEFgL0k6XjZ4aEZFMFVlJHxLVSlCemNFczMuej1IOD5qPTlicXVLdUV6MylZ''@;'; put 'put ''U0U9ZVsxXWQ2c2MzbEMxO01IUTl6am9EWGNHb3s7O1J4e1hMViVScTM2W1s1ek0maHRnJURNW1I1JVArbmVlRlE4bjsjKVc/PGd6cUlVMEtyfC9vN2ltcXN3aGgmditHQG1bX3ZkSnljQDxyTDk7dTQyVWklKUNZJWZEKWZSUT4mN1F0XjZfYEM/eSFlIiRiQ3FTUTNDZnhufGshU2xzWDcsJXt0''@;'; put 'put ''Xz4rZ2lAYHkyMkxoU2lhNC98P3ZATSpYZVpTa25DemJ8bDRDV0V6MVMrKUR1bW54WE9DR2VMJXJddUNZQi50ZVlyWl1uZFlTYF9SaHE4YER8RjUzSEhPVTtVVXNUQDohQlY/Wz1ROkNxMHE3Ji9XYlJNTVZPT1ZSeUUodHFEYH13WWJMP25ZXm9WTz9iTiorcjp5cSZmc35xZTIkaD0vSDhlXlEs''@;'; put 'put ''NllXZkAmZXltajVqL2VNS0lneWlzWCpbUldAZUJdem90TjdzPiJEZGlKK1dGLEUjQFtpZ1paN3pfOFZFQ2ovVHRvKDU1KXxeWCNCWnxIPk4yVktLdH1OTmxVcSFOOnRVKzQuV01HfEZ9WiJxU1ErWSY1Z307aVQ7S1MyZVYoO0xYSktJOytfMyEoUzA3SCMmKnF4emFlJno3RVZGZGtNZWl6PVRd''@;'; put 'put ''YkVFaW9Le2JpUD8mZVZmSGVhY09wdzNqTU05Ni5fXSVIXiJjVndzNCY6S21TZmlrQ2JYWTkhS3VhNmBWYDMwNn04WTh6d2k6eiN8YnQ4Ql13akZfRUpEK2dpOWRgWntaWW54eiYydHJxfjxJTT03bnhndnVVKUpEaVFTZD9hbSM7Y2duIm15az8ocyswMkNdVzdZNEh3VjJxKjVoXXlzQk1qMmx2''@;'; put 'put ''dE1aWzpHT0R2b2MsVGNFOzU6SUNxYTMlb1pWMndEeTdYQ1NuaE13YihtYCEwbkN2Lks0TFltd3xecyMzfENje3wzOUJ4WS44R2dmVmFMcjhMWFJgNWxdVFAqSWQ0VnR2TGJDNzgheiFrPSozfCRSSiU2aCMuZGFVbn00d3lwSExqT3B3VSpLZlJIa1tjb3JbbVouW0B4UzFLZTp8SkJwd1Fsd1Vr''@;'; put 'put ''SVoiMm5xSyE1UXEmZSFkS0BuPzpiO19aWjJQYEs5d081Q0lkYF1sdUpndGElMl9TekVnNGEqSFchZFtFRnw3bGxFVyRNdi5aRndwfFEjZWIxcDdGbU85XmM4cy9tOHY/Wz1+OGowe0lmekokbCMhOFBQPTNxSFhza043JjFnN3czNzd9TD0mVGErVCleTj0mWWtweVcpaFFnUShSIX1zdSJrdmpM''@;'; put 'put ''Z1N3PTY9fV4+Vl92cC89OUcvZ0J9RjZnezB1NDFrUlAoVld+dmcxNU1AYT55VjdSajlCdS90cT5+fFUlfGpWTDVofWgyW3dyKkouVXdqTyNRWTx9dU9JaSx5M3cxdy5UfllWYTFdUzNHfExEI2pPIn52SSwqdXRab0lCJDY8Nm5kMGQhbUNONnkpNDJwPSRNdThxL0RfdVI0JXEmUntuKnpbTyl2''@;'; put 'put ''UXFBbjxVW3E6c31bNzVheHljPH1yUX1zfXQwRFppP3tkNyZwdDUvRUhOOn4xRUJnaUwldG9AR1JuLk1VKmNMOk49bzRRIWxqREZJW0FgM2M7WVNWeWBaIzVXU3YrUX1QRHdeUlRmcTNEW25KJjw5dEg0ZEdfP244ek8rZ2tUantXfEI6U3VOZjNuTEM4MnMqQUJ2STR7N3xmTX49RFRrMVZSRGh6''@;'; put 'put ''RDZ+Li4iKlIvNk1GcHZiRU1LKlN0KyxUM1FqOEVAa0Q5dW5PMmdTMVBMOTdGblp5R2Y5KXE0Kn50IUpvKmw4IltCTnxnVl83WU8meTE9YH1jRHZGWDx1fnE1fjw/QXBMVVBZPzhAKjtFP1RUOUdXO05yMXlNLyFbQ3F5bXMyNjBMSyVaVEZYMCI9cmprdnNCVHZ2R0JnYyUyb2dUSWtudzh7JHxl''@;'; put 'put ''QDE1YUsreiVpK1N6aVdpYnFQL1dkeiJtbiVwK1dLcl1UL34hO0laWDpFbGBqNSE4Ty4rSEJqM25kX1l4QEpZVHQ0ZSIudWgqQmlaZ1VRbFZLQ3YjPHpJIXhCS2ZnYyxaTU9ubD9te1FxeUtjQW1qcXNPeERXKFYqWSgqUlc7RlApbmVFN2NHVilrPUZ+bjdzbklRfUlzb0E5PHRaWXdgX0R8PVZs''@;'; put 'put ''VUxVd29aQkx1cSNOSDVuPjs9fjRqdXgwSlNbLHVpc31SW01SMEBgcyZkX2lpKU4vV1VTTFZVdUE0Um1ufH0ySUc6UWFdIWNDUG1EIzwvMCkmc0RyPWpUbEVoOUJ8MX5GJVg7dG5lST8jOHFkQU9IMV4hdSksWF53RENbTSZTdFJpWTdMcT9ETFFDIUp1Yj1UK0IuUEYsZlJWL1Rje3RVR1pBeCs0''@;'; put 'put ''LH0pSmplQGZpc3YxKHVwSGpgKiFQR3UmSmF1OD1bdDpGcFNsaHMrZ1JKYXovPlBjSyx4RXNNImBMQjs7ZitHUmVSfmV4JVhScURROUZJXk1Sc1Zndlp4aVksTywyLFJqMShra29OU0ZDQGkwKUgubCxqVEtfM3U9cm5bW3xDSDZSX0kmVj15ZHJ0KkhDWlAsYEhJYDo5SkQxeFEiSlllNiFKfT9E''@;'; put 'put ''MGtpaFUmRls+aFhCISpydFg0MCVVL151JS9vPXN4ejtbekdlcVN2RmxyQjR1ZEB6NnpkRkduLENdIm93PkZ5Sk5wY0pJYTlrTks/ckNqTilAbzYvalhmckszV15GcFNPXl1va3V1KEtTIU01VUhtTCFFPFtKY2hVfUlgZ1hkX19JNSpZPChkMDlgRF86OzMqTHU/eDR3R1c6QW51KjNJb2BwKWlD''@;'; put 'put ''QW0vKnQ6fShnfHE+IVt7WkxFYThWTz09RE0sTUZ9NH5xMU9dRGNxYW51Lk9KJFZ8OmtRIVJKLnBxdGFEc3QrVihITV5ON3g4NXRtYkRIYTIlL35rIiZiTTdvVl9WXVl1dE5dW2svVGVtVzpWP1pWayhpR3NbdW1KOl8wPHoyPTc5X2x2Xj93JUUxQyEoLF1FKj1gY15sPVt+e1N7eCVxPk1GV0lk''@;'; put 'put ''OEJbe2V2UlhkRE1rc2IiIm9UZmc0eiVQRCFAbWJWKSZkbDlAa050KmlKLno2ZlRMNThiMTtaNXtxUk0xU0J9IUZ3NWV3bktFNXwsTmwvRGNJRFo7b2IwfiFBcHpHZU5PbCpJckUqOH5UOCNISXNsP3pOUjxEL1dNdTthQV9MOV99VzVOM1ArNGQ7Vj1AX3I9TmkjVzgqayR4SntBYShlSy8hNT5C''@;'; put 'put ''eU19QGZPV04+YmBlKnFCRzJeOk17alV7cGh1Jn1OWTNvSyYhTzsyelplSVV9V0x5XUVLODZLSWxFOm9FMm5TSTldZ0hESF9RPXBpVldxK0oseUEsT2FfSFg6Qng/OjlQNzdnMlB8L0IxQmsuY0YrTVpWQ1ZsfnVIQjBiYVBTfio7al5VclBaO2NrJCMia10/VT47UmxwZkRANEc4KFB6NzhZKH0i''@;'; put 'put ''KSswO3AvSUg2UW8xZSoofnIxQi4oRjI1Rl5Rdn5zKW9dKjE5ISQkJHpyYHJ7enpnSGhHQ0x0c1ErTDYpYUk2ckgpTXF6W1JwL1Q8UisjNEIhbFkxRzZxVUZuRyNQZig7WlR8dlVbJUQqQkZmemI7JGM5TEBqMXlYSXU1VkQsWmNkRl5uNTpILlNNbyhMbkZLM0pvY2R9fCMwQVtpaHc4XTFgOkJ2''@;'; put 'put ''W2loeyFtTWQiOHdVc3tdcFgzLENMYkNRQywwdDEpcktaKWdefWp7KkBNW1luRnRYJExUfiRtYjloRm5HTWokTjokQXVrbyMrNHp7NFcwcjdbRVF3b2VXV3NiTkI7I2w0XT5WKzhncExvIyVGYkdeWTp1UmVrPDFzZisoKX4oLl0pd0B3QCR5bCU4LlFCL0NjUl80VjlILnN9YWdNbXpSLFgpYndV''@;'; put 'put ''PjVPOWFPL3Y3PjIvTC9UfWx+ZUclemhaKk5VWFJLJjQpZSVhcktLY15rMWVLZH5BNCFhJkpRI059WHMpc2lJd1c3WUs6O2dIX3skU05XaVldXnZISTgjZEY1aHluNlgrfiFNcnQkOTA2bX0jSnl6SGthMWR9XVdDLGdbN1RQQkB3Xig6LzRuMEJdLClKM3EsYEtufWdUaj41IV0sQnFJX2g3citG''@;'; put 'put ''bk1yPldkPHJASXVFfUVrNGA3TENBbWVfS050Mn54XVs8MkVbZmV6TlZPUCEvWnI/MjQ4QnJMSEY7MytINSokVHxRSGZ+cU1SUExkazxGckMqL3g+VyNoWlhgZHVNVX4+UE9xRlkiPXo+TSZJOUk4diJkdmlEbj4iOmopL05Jc3c4Ii5mZkk7dmVTKjNjejhgISNtbS9ZWX00LmBTc28kIzE0Oi5m''@;'; put 'put ''Tk5kaiUiWFNCOENMXXc0UEYsLj1NeCNiL3UzRDU8JjwvVj9CJThGO3k7bGMzNWVfJnc8SEp6fW9EV11PQ0ZlJnRvRTF2ZDh7XjIoXmEiInt2cExpN3wsVVpGOXFfOU59WEVoMSVaVldFTl4rYD1jbVJLaTlVSmpsdV5UaCN5d1spcUY5P2dgVjFuRm5Mclc/JCwqNUJ7fkRIQl17aTMzL3tGXmNs''@;'; put 'put ''fG9uVEYpciV+OThaNjkzS1B+e1RNKl5WTkVecC96IVlRemJfaT13dSJCQVpuTzJyIjQoTDNmZHVDRV5YaD5WN0k7dTtEJXh6RENQZHhjT1tWMDBONU9QcGpPQC55KkNxLGElNnVbeHNtMVZCMiNkSmBMXlclYih7amBTaSUhVmk2UDp6cyIlRi8yOWJseF5eIVhGWDl0NksoPFEiR0w6LnxSMzYx''@;'; put 'put ''QUxNN18mVGBgbW1ANDFYNV9kJnFMTGJ2NV9YMmBHfi4wSXxYJEwrJChBODFgSjhlWm5DZmEvbjdfcGFgd2dten50Wjo4X3FaeDEkU2x2OlFRKSQwSDA3I3hIIWJERkJHT2AhfXhAJlU5Wzlxb3w6M3ZWSy5DRilLMVJ7L3VFSkVaeyxUS1d5NlV1KXtbUVBXKEdRN1ZORS9aOitMdHxUVkBeW2Vt''@;'; put 'put ''aG5gZz1SOERPTjhlK1M5WCU2bTJIQ3UpM2w5ez9DMCteZjxjXzBZPWJQL0FkfWFMaGM/Q25AUUpdRmooRzssRUx0LGUrNzA4bE9+VUcwVVFEVzhDPEVqRlI4PSU2aSw3fCs3OT8vIk5tfHsqMUwiQzR+K3RtIWVZK1BZV0tqeFY9YixMaS9SfF1DVVdVayMlTSFeMDNYSmx+LkwuVTczVmxMZGY2''@;'; put 'put ''NUFvOj1heXVTeEBlWmsjUzxifVJfI0FwNChhNmNPS1A5Mi8zSlNpJDZlQlFGYkYkZjR7S24zSEsmPVQsY3gmV1tXVilkQXx6YzRweH04K1VPOD9WLmIlQS9OeCpIRCtCfDRsaCI/T0FsPTUxLkhiUFhscmFaWDdHNGM/JXgxU05kY0ttRTBbU11zV1R2NHwuNGU1eiVQJFl5ZXtEMTxSWzk7Wjok''@;'; put 'put ''OE10TzAoPmtYLDQ8WFJMRWtGYT9dUyJgZnQrYGArNF99KnQkVjw+QyprLkB8SHBjdmZadDU1VXIiJClKJjw4UEhhQChDJmRCU0luOzk8ZFJCMyQyY21nVzY5TnJSfD5lMFQsREloQz81IUR4S09WUUsmdGV9JWlpaGZOZ3Q3a2VRJSx+MHM8V35hRzEpd3khTCpPbiJ5QiZXI0E9eyJ3WDRlWmN+''@;'; put 'put ''XSkrZHhYQ1EwdXgreEswN0ZvW1NXVmVdMiUpMCJSSSV1P2FzPGZOJllRT11odGM6PERobi9uI10vMVhOKSEoUHxJeWtrV2s0RSNgOm5xcio/eVh3PU83Y2s+V3Y8fl96WXAiTWAoQl9wezRbX3xGQzNOLHRrY1dSbGdAYk5qKDRLLixoaHFeaDYuLjIreFcyaStTKHQ9TUZOeUIhUXJKLy9VdCJZ''@;'; put 'put ''VmpdLFVIXjFpYFFVNENzXTdTMm8ycWRkdXprbCYyS1gxVmt6P0k2OXd1fTtETkxRNkkzWHo9OiZ0Vk1rN1tYYzNFXjslfk81VjtUMER9bnpfalphJUwmKTB1Lmhjci5EYnRhJjp2XzRYM2VyLlVpaEgmOUxgd3JAfl8yL1dHWlk9JVEhbzQzaF1LTDo/dndqdGF+LHg1JlBofDR0RVFwbSozUnto''@;'; put 'put ''MWlmVjkpNGpleSJLZSlBVGd5XXYreWZpcnssWWlCZmk9cz1fV21xa2o3TmFgaEo/fDUlQEdrNEJbTX5MJEs3TWRRTmsiaTFdPjNYZ2RaUlF8MmNFI21oYiFwZXgscVtOKDBCN2FiVlZ5aFJIfixKPWpdflByfSsrO295UXl5SWQ3VWchJkRIcU5nXzZoVS9kUyopJWVgaCI7fV9CZm5eZHpIencp''@;'; put 'put ''dVpHfE99RkBtOXpJcSkyai5RO2pxNHZAd3p6elBNTmQsKGUyUm9ReiFTZjAqMkU9QmdeX1Ezd00lM3BCQFlQSis3PTR+KXRGfGcvKWB0NER5JEZiTlFFfUdIJWFbWGAiSmtvezN6PlJ6XSpOZnF5Q2ROb2Y2I29HU0JtdVM5Yl9+LmcxOUU8ZHl+ZSxZYSJtOXFzSDsjcmYsRUApKncyNzJOLEYz''@;'; put 'put ''LH1hYmIoaXRNOU5fVU9qWm5TInttPy4jSlJfOkJdITxQTnR8QHslPV4sXXdSNy5oazhWe1AjMlRgfFsxdlElVk1mUyJfWGMmRGY4YDB5MDcsVUtGfjloRDUjW2VQb0U8UTtGWlZAe0AyZ2I3T2FNLkBQTHMxTVs8SiRYflQjMyh7ZUB6cUQ2eG43ayw0cW1bUU1bfmYsRjYzezgqJnRmJn5zaFY7''@;'; put 'put ''bShXdV90bEYoWlpqbysrYWpWeFo5aFh7a1lDLj9mUHspYT8oQTtET1FFMUYzZytgKCFgPilvPjt0Rnh6cGluKHc7X35xcUokW0tQKXQ9ZV9hLEU+MW1eSFEqO1dSODB6M18yfWNqYHp5OzRwSGJaNy8qeTJXM2B1LEI4Y1tLTj9sSDQ5Jl9veDNjbG42STlua248dCVbZmNAWWM3K0ZmJD8kJmxn''@;'; put 'put ''XXR2aDVvbHEqPDI5KykqL14uJTkwcy5RODppP1JSN0xORjs1ZXtxcGUlX3g4K29RaEBKUFVvVTpYeWVSSSI/L004ezZeKVZia3VgRjY5SztJIUk4O11OLnwwNnY8eERuUmNgRytQSz8lZ3dsWV9wQWMlKTJAMntqei9QTXM+NDBNMTxrQTlIJm9ULFQhNkh1Tm12PW4oLEpMS1RUZzd2aW8iQEdF''@;'; put 'put ''WlVVTmw0fUtVYmJMcGtITGg5d0R5Z1s3ZEprdFVRfm9+OG4ubiZYVnV0Tj89QkVsW2IsSFk9NTxvXTcsSV5aO0UmZn5rRXEwPktAXVVGels1Z0BjbX0kKCsvQXhXIX13QV9Qaj0raX1kVHJ1fmdwVDowT2t5TntUNzM3JkhGZCVfe21haSphZHpTdkEqL3c3WFlaOWFhPHZud0k1NkYmR0ZJNHwh''@;'; put 'put ''Z05rOTxrYlRAeyRfZ0xvMyhxWnFiPEs5RHIvPXRIKTd2SkdwVCQydzAqNys4ZXwhek9teGJSbismS3VVPG4sfTZ6NUIiOS9iRTlNKmYzTDo/e3hPYTImQFlob15XOWpAWCo9QTBHM1Q8Xm5MTnVla2FFdmFMZGVnRUBVUykwQ1klcVFOWUxdd110d3NzKTZfcDZaa2FTfnJ3eU1jXndZVSkpOkVa''@;'; put 'put ''dEI4ZX10ZzxbZWd6IkBMX0BfIk5VTF5CVCU9WGEsb11RYSozP2NIeVBMbTU+dSpbRj85WW9KVGQ2YFM9byJtM1d4IXBXTFp1W2J5UzV6UmYlc3hyNUNePWg+Z0IpOjNhaW9RX1BGUFpCclltQkpeQUMrVHJQU18yV31NTUYkITdId145ejoqZHlzW19xOEQ9SkhWfVFtSVoyTVlyfi9TISZabXMs''@;'; put 'put ''UmBjIj9EeXprZHN0ZTlqdigqZTdvTj11YiVjY11KLyVJKyFIUDUiTWdAUV4/fSZ6WENeSXw8O0JMc28qOFBWYlZBO2tSOj5aXWhlX3lwIT1bKihWNXdHU1ZKVC85ezkpfE1qQkBSPWREclZUd18wRTQjR2R8ImQ1RXh5SE1OM0dhfU8kc1Ajblc+LzxFTCkqNjA8NWV5XzdicyVvWjE7V3xxbzpn''@;'; put 'put ''U3huVH1YSXNqSFFxayZ1cFlnXWJbflB9bnR2bTJOP0lgcDd8MGMhcDFtMTVDflheYz9WXW13fmtpJU9INzxCYCo0bTZaSHpPOEp1e2MvRjYwYixhKHAhQDRWZ3xPaUhfOURPW3lbei5Cd11XRyksPFF5PT15RTReNUl3VkdhTFJETCUmKnBSIU5aPHhpUTc/V1s5PFYpUl8kI3NzYXZLMVd2Nkk7''@;'; put 'put ''a1t9P1AiOSZTLEpQKH0+OnNfJnIrOGt1bG8kTDtSUGNLdHV5PVBlYF4+L3dXT1o3SFZGLDN6dylrTlpeMDJWenw0MCFnVkpvNy8rY3VpLyQ9ZWljKFl+Ji9VKypPdDkpYi4/PjRqN0pzQTRpbC5Te2ZJKk5Cdk1fakBvI3pyZX1ySVI6eVpeKnxxYUVyVEJrVTg6K0AuUXVgRihkPkh7fXE7UVNo''@;'; put 'put ''Q2QxJX5ycmgmZVNDbElsT1k3PSF9JltyKHRtQFZYUFhZJGxJKTcvMVh9QncoTSNFVHZJS0UuPlVIUCo6fkpMJV1XfFFoSGM3OnxyZXBEZUtyfV9PVG06e0I9TGUudjl+b1tIeHk/QztFaDNfKUA1Oj9majhfe1FWYEhSK3VXQXZONlI1e2pHMUMkfC85MSs0dCtlKDcofEBQMHN4XS4wT189bnss''@;'; put 'put ''UTl7W0szK0I4TyYsJDdXZUouS1J+MnBHNnBnalswTHpqbzdrQFdmVnFAako0Mmp7ezg8enVdbElQd0BrPTtuNylISS4kaTxudXtPVUIyMjglL01udFh0VWU3dSFxekJrPkksKWROJnZXITsuO1dJRDUjYjVNbUteczZIY1tyal4pPS9CYjBeckAhNFc7Lk8rdmgyZm8qalJeJF1FfiQjM1IkaENO''@;'; put 'put ''TUZ6TFZXOVg2SUlKdisseV9RUkY+VEpYa2hZb2NldnB8ajxhSVhreUNOJXRjPCkuOSRsQzA7VENxYnlzaEBQMmh8TjdjcH5nNjBXaXY+UlgyZWc3M282QTElPFBmQVYvInJ0JDo7dW5SSGlFeHc8Iyh+XSxsYSsvVFJeeWEvVEoqKmxMVnhIcjdNXlp8PkVwSlVIXkxQT1BudGdkcEdpTHN+JHtJ''@;'; put 'put ''bSFZZHBfIixEfl09dnl4Xz5xYU19fXhwdjNNLERMLj1LTyhBYHQpbHdkSFN4VlJtMy47Xms8ZCt4ek0zQEpAO2g6a1lrIWZbcmNUcUlbfTYqUkRgV18vJihTTEd+P0N5ci4rW0VaO156TjJ5ek1XPDhea2pkZXQiNSZjLyppKiMqVHBxOEU9R045ZnVSXkxZNUd1RVdFMGhoR2ZqUCZtZzlFO01h''@;'; put 'put ''L1M6eDFDX1UjVy50KjdpWTxDfk1wYngpOGBzY2lKJmhKWztAKko7MWwwJl0vJkF3bjc4NF8qPlk0L099SUwlIzFoPTwvIThfK1N6M0o+U2B6IkpdeigifCVNQjM6LE5dVUVxKlArQHV3NTNENyR4PF9YQlVoPUtAdW8iY0pASEV5aT8wdHosPlM7KGkjUF93QF53VWd3fVc/TXwxKnpKIjs7XnVy''@;'; put 'put ''MVdQdmgkQWQjcSRNV09VQEp7YGRoYXJvPyhGXUc/MSxtLCR7MkxhP1kuI1IpKVpzYiN0UGAiRHtoYFRVLGg1OE81bzMhKUJGUlVCekRBdGV+JjQ9fXooe0h8MjUzNHNuXkBZRSViI1h6ZWp6fTg8THtwXy8ifWc8MlBKLE05aiJldnw+L0gvc0c1Py9eUVR3fklWc1RPS1FlfGJia3ZZeVFjVWNd''@;'; put 'put ''L2svVGpGWFIjZG9+ej92fCNfUnxPXzJIQUFHeCohbTE1PV5rNihfSSR2c3w9a3dlPmxgaHxdVStNczNEUDhMWC5Ad19mZV5YMSx1fWd4eGR6NHVSXVhuKk5qQUBMdEYsUXokaltON0Q8UW8+SShZMm57JT5FWjNxdkdYJVtHRD9KNEJTTkNpJVhASVRtbk9VT3R4NGJoK3g3KzR6dX0iXj9QbkRp''@;'; put 'put ''bXRpKEFrMCxZZ0RwPTljdClsSTtDMm12KjYmZk5nMzBJXzZhWncqImQ0aVZoe246MSw/Y1dUTEBOclM8YDV3OUtrQlRQPysqWjZ1S2o1Q2xHX3pYc0FTcHNpWnFCPjoielFlYXM9RVtCa2g6cSI7UltXOnFuNFp6YnE+XVZofG19P3x4ZSIwK2JhWWRsJHV7YkZDL1Feb1tNXV5AImAqIWFQOHRw''@;'; put 'put ''Zll9JlVMPD9+QGpLdnc/dDlbVm4+dEAudF0lb3pnMk88OzV4VVkvInxvSzxtZFY3enUkVVV9RnkrSlJgSklFYy8rPzE9JCFXdi92SXcyI1dLMGRPWTJAUmpDOGl+Sn59dnM0PmgvMWY2aSltVERDP2lZbzlZdC53aUMsSWtYNzFgTXBoSiVuOihYMm05XUlePmEwQzRQKC8lenMlTm4ld3pVXkJq''@;'; put 'put ''SVJwPU1BJWtscyFaIytfJm9nek5dbWwiay4qV254Sls4LilvW1B2WldjaSFUOSlKS1E/X0ZMPFhCSnZlNTRhVUw/XWtQdXVhaXxKcylJO2R2Pz9GbS5FfGM4JXJNQEohdTdANXpZKi44fi47cURjdDVNSVJmMVJWPWBdcXxeVVAsLixSITdxKkR4dWZqezNwN2FmfW4mLiQyezh1IVRsYzx4VWQy''@;'; put 'put ''PHJHZTtuQFkrMnMoJk5fJjN3OT8kWlNAaWxbT2xTL3pHNHk/Y0YwXVQ2TzBFc2dRJDs6QVFQU28oRitbUDFCeTdgZVAseT5Ja317I0M3ZD8kMzJ9bm52bVFFVE4jTVZdQ2VXOjUxPT5pa0ZrRFA0QDV6WSFXMk9WSVFLeDpHJVl+MlRDK3RbWE5JUkpBISFXKG8mTG8lczRTcC9OR041IX1nR3dI''@;'; put 'put ''MmE2fXcoQyFIJkBCJSwkP0A8fFdOJn5QbDdne2grR11fOH58O0FSZUV6SEg3YHxZcGMzI3pQU0BkTFZwbH5jcGxfayl2ZzRtd0ZsOjVvazh8JkJ5ZmdmMzQhVz4+NjQ5JGFyPHNYKX1yQmIuOVo0RCJvWHReTyM8PC40ZUVnNHdUJmlBOFNsTyN9aFshKG4yci5Aan5xU2N5amNufHI7bS98Mkx6''@;'; put 'put ''L2FVY0E9PFBONClzKnAye1tSbXVKdT5vfTc8VTQ4QFg9X15VRnwpbkliYVk8R0BIaXh1SFJdSXFnckpONDdmeGdXQS5MaHZDQjR8YEtGNHlpV20vUntTM1c5Sl0yZ3AlZloodjRXWT9iV1AkeUJLUnx1SmEoeVM+dGtzJG14XTQleiVNJCkodSI2IWhXQGxPLzNtMGJiNzN3QFdGSlo0bjIyMl1L''@;'; put 'put ''VnpPS0kvcWpwT187Pis2dz9zNU92bTFIVjNwRlJEPU4sV1ZdaWt6LDJ0V2NeZ1Y9c2MyOUZbR0RfJj9QRWNyeUg9VH5nREZTTFQ9TmluJHRKQHEpWnF1Uj1vUEtldntkNHJ8eWF8Rzs+YFhTbmYwNCZadjBMS2RAUW5ISlA9KEgxaSluelZqc3s7cTVRSGg6V2FpSXApeEovU0RGelluIlomWSFa''@;'; put 'put ''cU8zfWxOMGBvc2l9Jj8yeiV5TCppPztFO0t5ezpte2Y4IUdHalFbflAlUF5TWDA4RiwzK1c7bSEoNCUkImM8MFt4Uzs/IUNRSmRDOyNlbmAjcU4oJChWakdYYEpdcDV2QyFwL0VdeDk2Q3x5UExnXiUvX283ZiFdRG9APFhbWHx9N1NzOld2VVhIQktrWis4IXkoKTdiPWJnVnMyPHwrMHJPYylb''@;'; put 'put ''biRoNXUkJFYhNVY0Rzhkek82VjhxeUZOQnhGJCJJJHNgZCE0OjZLLy43ISlsZmFmclIsQko9WVdvPXA4Pm9PQUMvR1FVM1I1XSNJNyQqSzlzMSVgSltwVGlKVzhjcntYNys8OkRHaFJoKFQockx0bF5ve3h1dStzKnJqOjBTOjN+d3RvfDhpQ1N3fUI+cjZzJl1DaVk6KE8wT05uWFtdImg+SD53''@;'; put 'put ''amN1c2JGJl5uKEpwKjIuQ21DOSs/NnpiZHFiU3sjdmRvOUwhblJlUWw2Kitfbkc8IXN1RiVjYCtwSldnRy9CWmY0JnFeOTwqKmN8STIsa0ZNKUc6TElSTGJ7M2UiPzpBRm9+Q316ajlkRiVuJVQ1bF5HfXliZDUuLkh2b35bTmEhaE1LaHgjQmdeNVZ0REpEISpBcztITXw7Y2xKQmIvfUdNKTNH''@;'; put 'put ''KDZPQEVXSFtpLH5tZUFKfi9QYS9YNjRHTz9QREx7XnJiNl19JHlzOXoyTEh0Zz92KUlZT15lVX5hJHArV3A/PjYjO1RqNypAV3dwOj1UZnRUfnYoUThLZ104MC58LCN2QSloNDVpQjQhODg6emJ1JlQ5OWQ8NyZ1QFd6RW8oZix4OnUjK2wkOzNIMl5DQWQwUFJTPnlUIVtnRihQe11ycSVJRXFa''@;'; put 'put ''IlZ2OiI1WnhmWCs+PUZQS0cyYSJ2PkdAejteJF0zPyE7NipmbndTX0NTMkRPKTpaTWYiOyV+cURIXU8pJkg8OCQlc0JleE95cnYueTxKTkxqYVl9KUBkLlYwcHN6OFAybUdRcCt8UWRRekEiN2ArdktxV0RVUCJGaz1xPGwrJXhkSDNxSiRicyQvdnxdcnJESU89NywpKUZ2YG83VVIoMWV5UVQ3''@;'; put 'put ''NHtAX0YpWSE8M157L3ppdT9SWVJidTFuR1JDNTBuVk08azt3a3Y4dWYqUXVBbVtlYkVGb25FYzA/aEdHPGcyVWpqSlAvc0EyYWZaZ1k4TjJMQStnIzZsNT9FXk5OcVlgQzo6LCR3NWpoNiY3SVIkOjp0KEM2Ykc9PmpVKndaX15gQjVYJjdWKk0+KzpvOElydVB0Nn50OjR3KDthQzpnSGhWMmJ6''@;'; put 'put ''JHgwKCY+UVRkdlJOQD14ODsoMm9WOmNtNWRePFJTS3x8cDgwY1Q3cDc/SVoxRWhecSVDcEBibn55XjxiVHF7Ry5NV2NHVVNqMnZEdGlSN1UxKWpdPHg9Kjk0JiMoZXQ/MG40X3duNU9KclBUR3xxWk9iTVY0SU9JZiNiQD5haEclO3szLihRVz8ycmZ6OFRZZmRXZmtaYElpfnI9JFMkO1lHWUti''@;'; put 'put ''NkwuJChaaTNjUTVaNEwocmBqVlh5Rmo0X1spIiMiZ3hXNjpKRzBgWFBtWTliMXI6dXIoPFJnN1hgN21ZInNzVThgdVg6cklrJiJCTSYoSzhtaXMialIkfko4SDglNGBCRklveVFmKi44PGNmbFJrW3NsdGNWKlJibit0IW0qRUU0aVRMWjF2X2B3NXc7Rl9zMz49VG5ldFIxXyV4KGBxYWpDR1g0''@;'; put 'put ''Y3hBJFJYXil4MFFEKmJQbHg0U0VSanpwSXRMKlJdVXBZPjJFOXlPYTJmOFciVkRTXiMjI2piTmBLTWgoNTNNP1hlIjg2bWssNXkxYSkuais1SE5eZThxanhFUEZwTzBWNnIrNH1oaVNSPm45KEliRUtwcjZoPkFla0klSnIlaVNqc1hsR1NxVEFodDMrVWZ+Xm58Rn4/MGpdQkwjSDlsbTQ6Tz47''@;'; put 'put ''N2YwUTpCRiJ6ZGdzblguaUdoV0hNNj9UNkkzZyFDdz17T0ZeTVYxXUNfV3hmKDcwI0BiP2o8KDJ0L2s6NVBbRHpQMDg0UnwsQnwxaXlDJV0xXztDUSZzJTIrXWVwNl1mPWRwInhobWZmdmNTUndvTWZkTE9JZEBKPDhmKmxxSTZTUX16eV5FbT52TiI8QTlba3d4RTNka01mcG1aTjV3aiRFPl8o''@;'; put 'put ''ITU6NjN0RTIkVUtGJCJARmA+JmVdKTY0Oz06MChfL1QpZjolKUxncWN6bzdkLnNbSF5CWS4/YHswNSl8WF4lNE4layV9OUo5RnFvV0hOdT4hPlh7NEJ9RHc3IV9mcDRfS14xL0Y4bCUvYVM6aUpIVi81cmlrV0dPaCwiaVR6M0NWWFojJWxeYTNjJWhYJF5QRXpwO3d0OXteYzVlfWxTeFVnWCpi''@;'; put 'put ''ais0R1FoTGQkRDFkQ2ZOLldkP35+al1jV1p9YjMlQmF4YlJIOTw1X1NVLFVTfSJvR2diI3BVd2JbZXpvQFVmcmw+OFd0MHkmWmQ1UzU6SnRHfm9aaiY/bmpyPzc6RVhfV2hSYyFrOl0rc1g9YmFdclFEe0ZvSzU3PyE1UUhAIkUvZntBXmVebFVSNyJJXlplWHpOLGVBfT1xIjQwQyFbZTY7My57''@;'; put 'put ''fmtsVV04LigwdzlFcj8jaj13PSY0ODJTe3oqVWNEXWRuaUlCOFE4eG56ND8lX2N1Z0hFSFJ8YmxlZUUpcEdlc0x6RFpkeU1PY0spQEFZRVNtekJ7LHtgZ344fVluZUFwZExpfmsyUmswKElSOD46PT8oN0wkUUwmTFs1LztYZEZYK2xQfWcqeF1AUEJmfTEpYEhYV0V0Q0VmYmlsSDYqNlZrQ3le''@;'; put 'put ''dU9vT3dRYEM+ei9ObnBGV1BhX0xEPDRoYms/bj5Zel09V35PJDwqVixxWWtvQ2BTVy95cWgvSH1jNkIoR118YS8+MW4rbTBZWT4zTWU+aDd0U319L3UzSDhCOFBvfH1mbTZwI3FxKiYhLkZDUFB5I2xYQEBpQiZbKjVkTUVZT29TekVnQm9pYkM8RDVAXk9jZmZ8a0dFIXMoLm80Q2JMTG8lYmI+''@;'; put 'put ''QWJfKkUzPG0xYixlbTFTcSVmLklUNXBQdihsXm9nUD5GSndsUlR5bzZNNFROXyshNW9XZzBFfWw8bm9BbUshSG5lcXYzWys9I19nL0VzRndXNXxeOitST1B+SVhxWUhLJTc9TDlxdF17L1crWilQOUw2MlNSND9oeTRzZyIhUk9FSlU7KWY7cCVsK0Y+YiRsWjFlU3A8dmFaPzVOVHZXOWxmNzox''@;'; put 'put ''Y2h2fjxwTys1cF86NkxGU3VYTXJjJjVuQmhOO0M6aCkjQGFxMFdyckpua1ksYmJDOnY+LHZJQ3xmMWNMOipBKWooRTUlUmclTihtPkdOMitEdF9Fb0dUaCZiTStHMHYoME5gQD9oOmNhaGQkWn5NL0hbfTYrJVlqWld5P0hEbmd8eWYqSktjXy98PDwzUFZCXUBSOTtYa0t3JCZIMGR0KEokNlRY''@;'; put 'put ''aTl6Tm09fn50T1JefThwLDRjJFBbQzNxMllkTVc3dCVjMUBmKHA5PU40TnlkWmE0fjJbWWdMRV9tQ3tpOT0qLihrRltIbFJ3YHAoQ1BGbTEvP0gwXTZHW0tVVTs5djVtfFhbYSsjTk00R3MqYElBR2hAbXNuSmJwW3Yvc0UmP3BweFEqJiNDaUNScFhhMFRXNTs6JF9tdFlJaFNqbUl6UltsMUU2''@;'; put 'put ''dnV+MkViYW91aUVnfVcqT1E5c3AwPyxjV3p8b0AqVDElRzZTNmdXNXVuaD8lNWZ5NGwuOEZdKlZIcFp0YywjaEU6NixlPSlkQnkzc1FDdENoP05LNzl7T01eS317U19PdD8icz5mRXR4MChJSjF8WlVjYlciOWxuJjVKfjNodT1heSwqZDsjZj5kTVZASGRiMyl5dUJQRF1jVkw+UHE/ZDQ+OWd1''@;'; put 'put ''Lj0zZGxFeTsqTlVndCxXSyVfXUljZkEoOCkuKixIU3t9UERwQ1c1YX5hYzY+andIQFJdYCR7THVyQzg/fTdjfUhWR00mKzk5TGxyaiR0ejNbVnxJe0p4TTdZXl4odTc7QUlnVzk9ak1LO2lfMyVjPlloPShCQG1BKTRhSiZkOTwiajt5TkB8WVBwYTAmT2h0YTBrMDx3V0RDXl5aR1lwejliLjV5''@;'; put 'put ''KVJPOFQ9JkNoR355ZzJhTGx6OEwlWENMR1AvZ2x3LDhSMFE3SClUXmA/Rnk5OmQoOE1YbWVSRzRGKH06OWElbWZ2VU1+TzRFJkhlVnxIIV01IVtqVFdPNWtBYTRkVm09b1RWeilQT0dbWCxAK215bzV4JTI1Z2srN1VbL0xCKkQ0Mj1Xez9FWCE+bHomOi9geCZUK3RrRyRGd0tdYik0Q0g4NV5Z''@;'; put 'put ''XklTKipxSVhVcmA1SVYqX25CRGUudEdaKmB8XmEsJjRTLzp6PTxYZHgrMnJXRXMuSXRfY35lcks0YkJ5XWE5IilWK2RGQEd6LEZaRDJgSjQ+IUUwXlslK0gkTDEkOXdMfnheaWxRL1JpKCJ8XmVqajAlaWxMaTMod080K3VSemp5YC9pWlRVPXw+MTs5Y2B3eyVXLE1BJCw6cCRaUjpEfT13Slg2''@;'; put 'put ''LkAvZHxVe0Y8amxgX3VyUVJYSXNWdXJ1XVk6MVcjPiUoW01nezwwWSkuQVpANWY+bzRqXXk1ZFN7fF9HW35QcEVeel1bZ1YlJCo6KX51YGJqfStDMEkqKigudUpTdypkISF9I15EPCJkKD9HL1VZUy50Rk5QO0EmMEclI15bV1hHQjRoLChGbE5WTW5aVnA8NDFicFJ2WHlGTVZnLz1tbnh4ckw+''@;'; put 'put ''cyhCTUszYVg3b0hqUmF3ITk6Vn1aQkpfMGZLYyVEcE9pZWZRQ31vbitGOjBvVEVifWtbTF5UcnFyTWUpQEdVO08rZWZzZ0hQZD9YeHhheltgPGxMX3FNcWZOd01Je3s0OXU9aF56UE9eIXE4U2o/Snk6RWZeQGphMy5fUVkqSWVFWXhec3RgT1lfOEdJdmcwRD87eTlUMDtJfF1gWHFUZkpQdTk/''@;'; put 'put ''dWFlXj5RL25lTz8iW2p0W3hnP016dDpxVCVhWUtaNGw7fSVHZk5kQGQ4VExiND5DJWFjZ2okJFFLLy9iITUscl1gaW9Je3okPmk/SCJnOyIvK2l0M0kwMjB1Kl1WWmlwZW9sXitnO19tPXt+eTJNI0c1P2FTM1U6Qn0jWilaXWV1IkRnUGswU2gsd29JKE8mNGh9Iy86NSQvfnEiU1FROHxjY1Ux''@;'; put 'put ''WSQkekQ5YihYajpUQGwuejQmQVlCSzYkM1U2ZGQ3SG9zL1QyOnIkdSJjZzVtKEJnUiEsVXdLNFoyemdgdWdHKj83allISGBxJCMjUF17fGRJPnwjWyUvVnFXVzBQQmdbYFhNOUdlPEI2Vmg1NjhlMT1lem8lcXl0QTJgJEQzMyNnQW8vI1ZxP2VAJSM5U0l9NDUoRFg6QX1PSEM9SlU5IUAxU2xz''@;'; put 'put ''PEwlaGEjelBZYk5YdEpIYCl3Tyk+WzYlYnlRKytLam9oNDlOIylDcT07aDBXNVcvT3wvc35OITRicyp4cGNYVFl9cHxMPmRfOD1CWEd6Kil7amg0Wz5RL3lPPC5XR2k5XSgxMWZDfkFjSU05NiM1RH43cXAsTnQ1XTtCV0hjIlg6fl1aTSZJPjBWOFkxPUhtUWRyL19CSmUiIW1vJGVJZWlqS0B2''@;'; put 'put ''PCN4LlkpQmZsOH0pLihkRXNLd2Z5TUIuZXhBP3U4VXlpV2EqVDZvYzVbPXlEdSU/OGt7VU8kWXRTMltGR2tQM1tgWyg3bkVEK1dnTVdhQEhyW1FwfT5VaSpvSlpOXThNcm5KI3xaNyFOVClrcm1XXkFLJSlIaG5paVEpOno2THZqS1pmeCJiQjoobGJ+Qi90XUt1MV1MfCwwXl1WUShoX3RXKGZR''@;'; put 'put ''RE1vS0ovI31HPXJ9cVJiOTlnWkpxVGouSUA7bDx0Q0tZIjB+c0s3ZWQxey5XbjVRYE9nISsoO25qTSJeO2o6PS8uaztWTEdTcCFIcjpea2chdXUyMCRbdHB5WGRYX3tudiheYGxPcz82My5wTCUuOjE3YGJIc1F7YSsydGBwYT5vYlFOTHRudmdOenJkeXg7OmlXZU9KXWNjajxJOlBJNiZYUm49''@;'; put 'put ''bWRTKn01I3ovYjIqWiZ2R2o5VnNVOnlPS2FfTkUrYzkva0dPSmIhUCp8Yn17VClEP3M7b08vdjVMTzBpOUAiUWx5ejJjXWBxSzdwTEEhRnM+Y2RIdSY+NEZiMlBUOVJNQiw/Q0JhQ3Ehd0dJXlAlUzJWOjFna1l9JkpGRmZ+NEtJMlM8Ty9fUmxkOlY2ISU5c2wxPF9PXiR4a00qS3J1Snh5I2F7''@;'; put 'put ''N2lrIUR9KH46dlVaW190dyZWIXdzMENEcSZpW2tTKzYlNFhEXk8pcCVlKkpoV3FifGJ9LGIhSGE0aFo1Z248cWlDRFUlKDZUaiZYUlY2YlBWcUM3Wz4uMmgvSjRiWHBUWGIvTjYpcUZuaVZsRFAyWT4ob3dNXXNeZnc8eD5GOUxuT3lGSX05YX1hQlR4SkkuWHEiam1nITJFeEQ7YFguXlZWK1VD''@;'; put 'put ''ZGVjVFdVNCFdVG1dLHsjXSQ0Uzt8TTlGQU9DPEQ2aGN0UCNecHhgKnRbVUFKLnV0T288YVVaO1N6IipFK3sxR0FORmI3VG10VEVmXyI9YXt0QkxdK3Qpei5Qb0sjb0heOmlbfSJnIjVDd30sTFVmQ14qPyY5ZExddiQsNCRXNlE2Y2xSPWUzZXJOZko4SkRPVkh6VEFja0llWUZ2M0hYfHoyXkMj''@;'; put 'put ''N145OTVnOG5XTSNrLnpEK010Szx7UXY9LGFVSmZqNCtkYlFkPHt5UDhVNExxQ0kxQDorfFI0RXVrNEg5IlldcVdaen5yTlp+PVZpaDpMe0p7T2AsRVtpWy9tPlAzVE8qOikjdTt4PFBsIW5LREtfVjtVOEtOdVtFZzhSOSxsJThsTVp2KllmKXEiPkxWJHkqOUNKRGxpUFhGWlBkMislWnBhUEhx''@;'; put 'put ''OUMkOzMrRi5DXk1OWFFVR2xeekVkOG9ETjF4RlMyR1VhUDpPL2k+W2lLKGBtWHNbQU9yNVVrcCl5NTU9RHNXQl1AcWw1XihCeHFgM2hOMTc6Kj46K1JRd09RPH0mRkdCU1A+STh2Xi5KbTJLIlY8MXprKz8jR0BWfCRfJW1eZXJfJVhgfHlzTlUrSXVCUVJ+WCNJKG1layJXYml+elNbYmhESilx''@;'; put 'put ''PXMrRzlYfjFSMDh1JFRGbHhWWXdZQnYiP2BkOW84aGhtT0B1Km9+YjZBdnpeSlo4fkUpfEZVUDZAI01BS0VMbShPd156WT0ifVE3KkBdOz4qYGhBNkA5YGwjWmlxYnE/SXg+W3I2PXlyPE0wZ3w9N1ZITWAmRyVncTVGVjxqKVRuTF5+T2gpPVRmUktMK2V1JXkoVVAiW0NoTTZJVH5QLzApNXk6''@;'; put 'put ''YDhueFQqfWs6eUd7XVAoNzhINGpNWVp3MGUiRz18IiwkKCxKTklmM1I4XThKOXJSPStPXTpdRiEmcVovfCo8QEZmUFNvfUd6QTtlTlsyX1BxIk1IQkt4JG5JeHZVTSMvQ2xsS2tiNChqbTYmPi5iI2JTSzs3UmJTQHQuYFc1WUFyTEwlIno/XnkqVjspQXErezx3TCU+K0M3P0leUmheaCI1ZFJP''@;'; put 'put ''fmM4LFtyWEo0cSFrT0JZJnFaUTBdOEQoKGtAN1BbN1FeY0IzKz12eEoiWHRiN35PdjwmdlFVTihBYyVlTXBRfXFjRn5BTU1SRUFUXjF9V2V3cFs+SVBYJUVPdG4xOU1fRy96PyhofStCYSE5UzBwQldhOnd9UVcsbE0kOHEhWzkoT0Z6UHU5QHd9PEFjVlMyPVZJMnlPajpMa1pRbWQyW2gpZUZd''@;'; put 'put ''TlJzU3RuVTw1fjtOO3dxclt8VHFONnF7Y2dbUn1dbjdAXT81OFlUWyhRYDg/MHYmWWhNZENxQ2tRdlM9aWZpRWFZQGY9Yn5JTT1XVTpfajNTUShXLFM4SGAlaDJudS5QOT13TX5OVGgwREs9QjtpWHBfVi4qdHM4VDB5VVhVbCs3cUxIXVhfYVNZO217dEMrSWJvJnlEQHs6ZCJiKz5kSUVbRjhE''@;'; put 'put ''UWxPQG9RRyJ3eip+Q01GJXB4dEYqY0J4WmsjMk0sVnZ1X1o5VGc/VmoqSEs2JS9rY1NvKXYmZmwmU2FKeT5IZF5YIS5YQzwrOjRsZ3EzeG5PV3QpcWBFXU9vMXxCZlFkdVcwJk9NVXEjJXBveyNvJSxVe3tTPzcicmVHOT44SDl1aFBSRVgoXVBzVUwkOHY5Ty9eMmdgZHBpKHZSWElkfSg8NnF6''@;'; put 'put ''NSRLUDtUXT9BT1g3IkVZQylreTkvck1vN1JCOkV1fF5RY0NrX3A7Zis1Ljx5JWdZSE1kaWdEbUokX3A2d3g7UXpuUzp+WlYiLHw4W1NUfW09Vz0/NFA4Pyo6LCVHOShufXVnOSpxdCosYE8ofGtrL0Q8Pzd0YVYoM00+fUJJTktfJEhiSSMseCRjVzsxTEd3RFlQTFNJVm17RWZAbyJzYjprflVr''@;'; put 'put ''IkBgbih2LDwlJFJ2S15pajF6QUlIW3Y9bFB2TmxfVVR0fFRUTmdVbz5UdVJqVWNgNW9iM301SV9pVF0mMnxCNFpecUF9ViM+eDxgc1VZbGM5LnpSPGRBYV1HMVokcVFeNiMpYkNbaDF5YVdIRHBuYCZhMHF+P0JnI0pVWzlCPUhISGZgVC92WnhmVzwjVjpzfV4uQiZMeFM1JXhSe0IocTdwKT8u''@;'; put 'put ''QmBddVZrPW5RYXZwMiFLbEZ3T1BRfSFqLms0UXVITGMhe0deUSl1dnR+fU1BbiVyOl5gKFFERktQP1ghaTdEPlRkSV4obSs3Xi42KCF6eD9JZnZRQWA+fDBZZjY3ZXQsNSlkdHtvdjNeTDcxczN6eSNwJlZpbU1BTjJXJXJDbD9fZ1huPVZUUD09PGs4dTNpblA0VGxtOmVNMFBwY0B+fHRtKGVl''@;'; put 'put ''ZU5SXnlPezdaSSJZOE09QFgzWWV7RzljX1ZQdE1YUUxqaG5BOTs1b3IxUENKQGB0Yz57YkE+JEMkfUUuOnxgZixnektWYyo/dDpVdnI1YCJ6S01dK3dXSmJ6dSVrSGJAR0tzU3QvJmBdOklwYUtOcFpxNCF0Y2g8TWc7V0hZUXMyKz8sSFQ4USVfZnFpP2lVMFs7fGB6OWR3TkRzX0xUWTZhO0xD''@;'; put 'put ''eE9wbUA3Ljo6LzQ9MHJAbXZBXylMTHxUS1VgOT9IUDZAfnA+SCNmRTJbW1ZJeyYvSDRpVEF0RzVoYTJKV2ZBJXllMGlaQDF6LitjMm5obnsiOGB5VTEjSXl9NXZ6NXw4eSRzbihEX3U6IXAoUE9+cWlkXSxdQipMNCEoZChyZkA1MHk4KzIsKUc0VHx4UlI2Z30wMHlHfkMqS2V8LmJrKVh0ZkJy''@;'; put 'put ''VXlWJSJGeUlIdXl8JmNYQWdwNHYuPVtkdF93NHBYMEklbWFFWWtCcU0/JE5ALnNhfDNnSTMkNWM2cF97YlsqMnhgKTpQfWMkaTdwPUtPPXAxaThJVkkwOjp6WDpDLCNgZ1ZweH1JU1UucC97MSYpP0VebGhgcGJtPXElTUpCYX48WHNwMU9mJU86V25JXjR9KmVaRG1EPT9Qdil0TzcweFFHTUFT''@;'; put 'put ''ckdGQyhKaFdQSSFZM0sudEM6bTY+I1FaYit7LHJZUilveHQmOiYvbWw5LiQ4PzJ9ZTI4SmJrbHxRY1FpOkg/YjtQaD85TiIyWzhTKXR2VVM1SXdaZT9zLyxNLkxxUTt3OStfdCl+YVJkN24pfiopZjwsTEleeF9fPkYieE1PKjFnP0RGYXVsQmRQd0hIV3spLD50bjJxV0lRY0ReTEJTKU0rYGFp''@;'; put 'put ''cUs3OSh+MHlGUkd1OUtOL3wwekNvSzN2IUs8PD4vVyMsJUpLTTBQeElxXSMjW3RVaSM9JXt0aztRbG03OVVGTlg1RltXSDZQLEU/aSlEaSgoZXVUe2glN3dQU1RTLl1maTw2TmY1aXdIQTdMVElFTjo+Rl9Hdm8jfTZ2LlJPKi5HQVo7QDVPNkUkKjRTTllMc2RTbDM0cjxnRDd0cV1oTDIpLmU6''@;'; put 'put ''ZU8lPFVuME0vUXVkOVZKXnBAfVQ6O1dPfk9JcywlblZ0eFRwQmdfU0MkbWs1dlVfV099ZHhsOF1HK1dTXSwsQlUiRnJWZnEwZjojYWZyUVQyYUhSYlpdenszMTsoV1E0dmJyW0BoRWteRVo+JE80S3teR2l+UkxCeFokNSVbWDZRQ15LP1hUe2xwU0EiQ3V4QVtgXUVRdSJWcCEjVzRkYFdJcVJr''@;'; put 'put ''UXZDQDFLfEdobVkoJWB1NlYrN08oQzRqNyVFXmgmUndtTTFbcnZqdXBMI1VhdShDXkl+VEQ+KUE1VHUyYGR6ZTJTOCxlRzA+WXMwX3FyeHcxVFQvdkFoN3psfiFfckVnOyJBOjMxejJqIXArbHh1MGJZaWVrfShSI0RmNS5GMXdtaXFNOTkoPl9NY158KkM8YFFefl4uRXR3Vj9WXV4lbVNiTHJN''@;'; put 'put ''QnRDWEx3bT8mbVI8en4hc0N7YyQ5b0xTYFMjdS9UVkRBWitgZzM0bzBSWStQI3NoOCtTQ35jZHJ1KXtaVSFuNVJJZDVXYCg7RWlVRjQ8L11hTChIXk13MWZgRT9RNFFRb0gwYSk7cktlMz5uKF1YLilXT05iZHhvXnkoTyZVK0BxIntpazVvc0c5Rzl9ISRRUTw8OEpuL0ZeTEV9OD14d0wlaWBh''@;'; put 'put ''cFpmciwrQU8lNVksNzFzeks1U30xJHxSQk5GXkoqSyt2I1osXVtMYzIiXkRtbCMrZlFUflduOT1mNDJIVE4+Il9AUWhySD15clAwMndHT2czR1M5PW1oTXNMdV12cCloO0IzKklEYk1APWRMVU4kQzVGWCJFTGVtSlQ4I3doQzYudGsycCsyXjQpbUhZN1lSTk1FR0pUQH16PCkvPj0oXlFYXXpK''@;'; put 'put ''ZCxueWN0WWN0YFplVk89JkJ2YWNqQSlzalBMNEd3ZnFAQm5YQE9ZNyJoPTxKQzxoNnllWCY9K14mbHMkY3oqfWA6VXB2bVtlR1IiUFtyYX05YFkwQkYoRDI2SWBFfkJoTzF8YmJ3KHhfJmBfciReOD0ld0wwQjU2Zns1ZlQ7eWpnPDRmTHRWeVdQU3JwOzNlXlEwRTdfNUQ1P3xbM05WMS9vcil0''@;'; put 'put ''KilUP3I6SD1iLHR3IyFIMUtDfF13b2lSKiRjcWU8JTt0Yi44fi5zOn10K3Z4Sl5rRXVQdndXdzJPWyQwNT9nOmVjQiFwJStqVjF0TF5mZWxfYnRNYS89ZlYwRnBfcl0ubW8ydmlAW3tLZmNbMVVwfX5sXXhWUzxwRDk3Iml9VzZgN1lLP1t2L2hLTnopbGdTLCQzNEYsJCRdYkUkX1kqb3FGKUBu''@;'; put 'put ''dGBGcHJzYmVIZzc5dEtbSGZGQk07Kkc3WkgxYjBiQVNfbSJKeiRsQGk0KSYrUzZGM0VJdGEyfVVzJmZyT1RTPXBWN09xXypyRmtHazZ6MGtvLi9pTGV3Pjc9c1FQSyJGMm9EOzsjSHFMWlNeJlNlQl89Ui9eYF9ffj5wV1NIL3xoN0JVKyN4QkkzOS4+N359TkpbTERObDZgNW5ZYXk4O2syfnlS''@;'; put 'put ''XWFNemRfUEsjbmtHa0dMNHd1MTdmLkNwQyNGe3hLe00uMzhQNXFWV1ZVNiE5X1BwJHUiKEkha357O21iMylnRyo6Sy8qelMwJUQmOXJrOyxYR0hqczMyOyYxVkY4d0dzP3g1QWxbTzVfLChwLnVuXShSRDxAM3YmNSFlIl9lK29OVX1oayNHXTYoXS9MQ3oifm1nMlslXTwyVSpuQkVeZ3klXSNh''@;'; put 'put ''dWRjNk0lX3ozcEc+bWkoUX04aDRZVy44VU0qPzZLLz1TYEZfMEtPPnIwN1ZabnxSa1N+XyE8JmopfHBSIT5aNXRMeVE4P1Ria3tHJXROOUoiSiJ+TEQoZzhQbX4rdGZLMzUxfmN1JWRATVdpSkYpQVJ6fjQoWlBjMXBDIU4kOTo1ejd5QTpQZXhnaTFDRSY/eThFPjBjW25jRGF2L0pIU3xCTSQm''@;'; put 'put ''cykuYmQ0Vl82fEtFLnczXU1gMFBzdypDK3F7T2hsQ3IrO0w9P3lNYExRe3l1akoiUzFDNjUvKDYpWGowRC8sRUY/c3diTEFnP3VBPGdiNS8+UF5qSiteM1Q5KDVoUzRHKThqRFpIa3NpW2M0PlsrKVFXaGImWU19Jn5SL3ZdYUVGXU9yIXtJYnZMMkZ3PyhrVT0xaVVoLltaKE4zcmpXYH5TRWRE''@;'; put 'put ''NDBiLl5RSFJ8cXxVeTFZaXhsaCYhbk8uQHZJNTA/RHk4SWgzb3xKRDdONE4qb3omeWg+NGYxOiVsUCxPRWleJVBeW3w6JmkhcGluOkBhMVBQIXRzfEZxe31FUnhxUUIjPVt7aVkwZH56ZDUuK2glV0Nrcm5vU3M2REw9eSRqLlJJSmVdZSlZT1poJUVORm04R19SVzJENXprSCZeal5jUXIjKyxy''@;'; put 'put ''ZGE2cWRSMldRdlswbm9wQ3Yra0c2eDVpYTdgZHs5a1hCNnk+dCM4JmBlYz1zd1JpV2l+YlBJeDpxV0BdT204OWt0eGtHYmNBe3JKVTszLk01KjNldns+ZHtZdClFSXJ6ZnosOEQ8MFZASzZ+L2lpUlFoMUppJVVwRyJuY3A8QiVLVjA8a108Kz1BWlNMI0doVFA0OUVmXm0sfFVPWG9JX0NxSTZE''@;'; put 'put ''O3dCTCxOKzEqTCIoeHAsYSh1SHN6PHB4c082NHFMJVVsW2ZwaTAkZEo5Q2htdHxadVdaRSNeNCxyfFZocEtdND18ezZVZUcjQ1djeSpkalQrZjMzV118bUJSXUF9dDFsMDtONiFkdFNqVjBfc1hgal1NcE8sIVIqZU4uT0VOeHF7Yzs1L3BdO31GPGNGTlh8M3tBb31DITRIOTxBN2ZhNSp9LF46''@;'; put 'put ''T0U9VHZOPC5EMmQ2TTBjQjxUKVVbam9NeHYjJGlGSzM3SXZVfTVHWygxeE1UNHhNK0ZDVEtJQzN0TCwkIUVHYlIueCJMNypMZXVCfCshbSUxeCRLXyxNXWUsT349NHU9WHFDfHNDUGg/JSFOL35mVlAmVTVaLjpiI0dIJCowKD8lIn5aO0VfYVQlcERmNiNvXyt6YFgwcDNUMFZMSzNhfmNpMX1W''@;'; put 'put ''cFMoeVZbSjZZTFcmJCUiMy9OQXFlTHk6UV4vJnNqVFdRQ0R9UUkoRWcpREx6V2pncTYoRl5vOkdAOU5vVy5QI2BOIUVJV1Q9SUlRfGY4a2BOZUtDUzQ+Vi5BNGh+NEEuSmtfKl84TU9TbVtgNng+OFAxMVhVMSUmK0p+MStsTV42c2leengzSEhVc2I5aFo5Q0NuPGlFTlRMM2xvOWRIXz1vRE9h''@;'; put 'put ''NEt6SWQ9e2B8QFRwZWF8IWQ2U11XVls8TC5hMkZdRHclPSFKSnNHKEBjeE1gajF6a3cwUSVKVFVpeyxbey5vP2tgLmxgR0x5MlI1aiVZXylvamxieGp9JV4jRGUhaitiO2lYYVp8MmJZdnIkLztVbUxDIWUwJCx2LnBXN31hXlAmZUxaKjdgKCQ6UTVSME5NR0JPW2Bsd0BWaSg5XVE6aytdflRm''@;'; put 'put ''ey49fiFsNWxkWWI0OFBMO1Voc3lnMGcqP1FOSzx3L3J1fTJPXnZKMGJMIjd4KTl9YzhUVmQyLjRka3grZ1hEcTZIbi4kLnwrfUBxKGxkPikwLEp3ZWJ3I1dCPVMlcGViZjA0JW9+JkpzVlNYWDhBKzdXbC95eCtjfnVZbll0cmIiLlRXQCh2JS9MI099fjM3VSRqJnhPYTMwbUdWfDQ1MUMsRTZQ''@;'; put 'put ''QHt+cGJOUWBHNHYzX1B4fVBjWkFvWy49Vng3c2JhQi9wJktnZCpUYHorQEdJRTk7VmVzS2EyI21lIlM1N2ozV1FIZlZXNyNHZihfNCJfZzwwRCokVWA/VUxCXWlfLHlrTFYybyUvUjBMcldFXmUkdWRSOzAmflFCbEpSQD15XWBhMShMP0tkZHFKcTgpKHlkbnhZY1Z0TXBKKSolOEw5eEdqVjw+''@;'; put 'put ''W0Bfd3lJalVfKF4iajw3Lj5VS1A2VF43Qm5FeEBqTjN0Ri5FLlJbNUlTZixVO0lfcl5VVHBzIy5mRiVJKHVvaWldYzsyJmxOWSRRZTFLUX1IVT1SXUtnOFUyVWJKZE1gZTRAJjd2MnY5QCRUPWh0KUxnWTRUU3BEXzRNR3QqeXo+K1lHLHs7NHdTWDkqTDJCQyh6YiVaYjJ5JkMyaTJQcE0lKz9p''@;'; put 'put ''KnRXel1RfVdyRjR4e0cxVFRHKDkrMSU2WUhBIjBFLC4xbXdUK2N7UG1mPD00OnNhaHV+O1U1bDRbRFZpXUk8W2F0JmJUKDx0czhZSWQ1Y1JPVD1GMFs/Tzkxa0JUNCRRdUxuPjpFMj9tXmIpI3V4fl1MNSw5TjBDNSh3Llk7eVZxOGoiM0IqZ2olJUA9K1dbfVkpTXwxUy8sVF9bYDdINTg0REhW''@;'; put 'put ''LzIpViN8S1htPClYSSZZVUFjKVdJIUU6Vjp7Q14qXjNAa3BqMnNsaGJwKnNUKW9He1csdmFPcCVjMjdxZ1Z6b0h4UTA4d2RnRiR8Ij9LL2h4Jik/QUVLLnFRblpDJDVQZEJrM2EkVlVTU2RCQE45YTx4Xio/SHtAXXIjYGRLfCpRNHR4ZWk1djAlenUwUEFeLCxxW29lI2RdY3wrSzVZRVI4ZnJQ''@;'; put 'put ''blkrOE9CbT09STkhNj9KSXBDaDMhbD5TYyQjeH5yR2E+WE5aT3VkZWhWdnhQKE9jMitQPGhEV1pzaXJoKHJ0cjV3dzQqL1o+Z3BVNHgsLEBHNXFvZU1BQlh1PFVnJElFQSIuREEoeXtZayUrW1toVXVuflM5c2hRUTpNIjwrPT1+QXxsXzlgc3JSVjp1ZjBtNWYqZkViPyxndWNsIzJbd28pPTNz''@;'; put 'put ''b3V6R0EkSC9gdXBraTw2ZSNEOG88Snk2UWN3L0J1QFNNKktQRDJDUDVaIk42LHU4T0c7P2A+MDRgPVZ9JUVPNU0/SjgrWjp3cSoiRGBXXUVHUFIlLltyOjU3dXcqbVlaO31yZT1yby9zJjphSTA1UnA6Wl9NNkFDMHE2XmAqJl0hIW10TDUhK3JZYDJzREMyQ253KHAqLnAwV3d2SV1CW2g2LkJs''@;'; put 'put ''PT5VfVZ8R1ppJkJ8KCNqSmZrdnEucV55QyReZjZWfSJ1V2NzQDsuSSlXVENsWFEpMnk3aV5CUX1eWnNATF1UMHcjMz5VQzFaJUZqY3dbUEVdT094fFNrfitSVnlPTDtCRlhCUVFhI15XNmFlb2EwMCpiU20iMW9vWTckeGJmOy5JXitLTDxAaVdvVy8xWG19TUxBQEVIeloyRDIqQyg5JmJnJEFw''@;'; put 'put ''fmdhfVtMYllmczNpSilwQmE0ODBKIWNGPSpsM3IlXXt8fFRHXkl2aHFVaDAhM34yIX5ZcFljNmZBKnEjaSMjaDs6TXRKcDlKeVI/fUpRfG1Yd1RBTzhbelB1UCNxajU6cT82aTs+ODwxZEU6LnoqPn5FJEQ7eF9Namp8RSRlKnxBLyU0RUtTazZDc19JbXlxOiRxfEx3YTJ8IlFzYVYvSmJPWnt1''@;'; put 'put ''SW58NVlCZ2VGZ0RMM3ZYJjxgVlUwK1BsR0xYVHRha2NefS5reDxRPSlAKi5OfjU4XmgieyF+Ly8vfFpUd0BnKEBWeD5rbztMZyluKUEqTXJ3a1lfeFtsQzE3P25qYFFJPnRmQnM4Jk9uWHIwZSF8fm16ZkQkSytiaitQQD5HaXRIMShTNDp2dlNwQEhmRnJOa1U/LCwiOnhebDxvJks6VVckTSlU''@;'; put 'put ''W0A/anU8flhfamJqJiRFclBQQmRoKF03SUU+dD5fa3hWcig5JkksRVNoakFVWzY5USZEWzYrbjpKTXheSXM6fXIjOU1VfGdYTW1RY1JhRiV8JG90dXg6ZlVqbSYrLF1MVj9leXZVMmZyezEqQix4ZExubFNHI3dQQjo0a3N5bXdgPVZTVjpdbV5HbihUZ19iIndCTk1bTDgjSnRjWlM5RklANToh''@;'; put 'put ''S3hJP1pUKmNkSzV7a21Ta3FAPzo1fVU6cCxuKylNWmA8UTFnbEUldlFmRTFSRXdBdmNMK0ZvQ158PCQhNVJaTWtvT0wkPHN+TXlYQzdwMzVaWDF2cDQzMTtwQlV6c09CRiQhRUIwd0lidE41c0V1ZXtoZ05gRDVvLlJIST86Li8+X15dPSMycV1YM0pQY1d1bF1qOlRKTDRYcmIhZy9SN3lPKnks''@;'; put 'put ''cCt7YGRfY35MU00vXn5fVlA4eFF1SzQ8QEBVdEZ+bUp+Wi8iVkMwU04sX2NVOmNzV2RiVlEhWlcqTnsmSkNqOUMxWWZZWFc9M31jPjJ8dDM1SUZ3N15fVWVdYG09NW1lX2FVaXRgNld7UGZ3QkFaaDVXOm04UW8wYDA4UCRHKkx6PmZzZy5bPzZGdiRFQjIuOCZXUigrSylTakQ3Mis1bjRRVH4u''@;'; put 'put ''PiR8Tm5RT3VxVSYuMUJOZjEjeGF9d1cxLm9NUmlMSCw+XjRvOD86TSE7ZzBDKihlbzg7ZDJ1bkxTfHtKWFV3fnM1PkN1SzlbRmhManlXVGQqZEBSbn5DJXB1VkpQUjRWbyUwUC5kSGJVcSopSF4uNWRQVn13aF1eK2BPUz8mJCI7VUQkUGo3TVN2ImpIe30zPzNCY3p8Ki9QI0pzI11hWXxwLHxq''@;'; put 'put ''MXVtXzB8RHVfUjd9JEREdyReT3hzT2MhODQ8THJnMyI9aG5mM3okWmJpI2NeQCtCOyFAcXxSRSF9OmRZc3RXZFY/Nl9xKXRHdm86UTN3PG1hSjIwL0orcnQ9aSw7ez1QZ146eHh5eEdqV05pSnVDL21LbXZQfjJWQzNSQGxHe1FZR2MxM3h6SVA/WE0+cyVhTE97IWh8LFJWTm1OYypSUUdtS0JP''@;'; put 'put ''MUY9fHZUMiRdVV40SjtoNih9ck8iLGleSDJfKXZWXy9JaSRjW1N9aHBJdj16XmJjJlFjOkU2W0Mze0VLUS8/Wl5SeS9DdXhCTCRdPHw0X3J+VT9LQCwxUiUydklQY35tNUVwNUE3d25MXiIpTXtoUDFIVFZrdDJyfm9NJD1pTGxVV2AkUmhaOWlWa2UkNWIofD4xdiEkVCI7InVqaW1zeklxNGlC''@;'; put 'put ''X1d6TWJtSCRXcnFvWE9uXlU4YjxvUGNXZmA6JXpWakw8JXxiIjhWVTR1LyhzTH1HdlAqODFXfVtwXk49Zjg7eWRxSHJxQ0BuLHE8dSZ7JTEjQFgpNn5QdHJ0Ml5SOVlxXykkfitxX1JGUWp7ektvUSg0LnlANVVhZmJycmc/Kz51KSV1cWAoUDB2YTlBSiM/T3M+YntGeUlpXnZTez1mYTZSdHM8''@;'; put 'put ''PiYhPyNMcSk6YHFkKXtBdH07O35KOmNqNUkiLjlWOFVYNldQN188IUU1Z14pSmVYcE57TipqS1ciWHJJajB6MnhhN2FTdnIufVtGS1ZKKjtfdkJ1M1B4NlJGN2NNLkQ0fGcjJnI1TURLUmBVRn19UnhiQFh7Tys0JW9VMFc8bj9kME5VS0lvRmJ9bV46VUxCKGxxQ094dUZoPTUzO0wxJGFqL0Fz''@;'; put 'put ''Z2tlYy5BJWgwKiVDXXJvP3ppaHRwdXREJkhSTmFYdWcjdiM7MExnZDIyfjJHK0ZpQy9PPjpjKCRGJF8ueTQ9PksqbkFELylXNy5BVjZfUU5lfDcyfEp3ZGx7MUd9bT93QGJIQjZRNTh2MiJkdiVpRjs8alZkS3Jie2k8In0qNEtQalV9IW8lbTghPiNTIjgzUzpsTl4hcGxkMStNT04jcEY3IilA''@;'; put 'put ''bSt9Mm9ue1pDLi5eNVt7Lj07al07aXkpV10hdmdHXUpoPm5vVTI7SHtPMGRtflpNJjhIO0JOUVNIXkRNUzN5WHpXY283U1R5fiMkcWIsRClqPkVdfjZ+ZSpabGVQO1ZGbl5RbjxVXkxvPTAjXzpAQiNVaFNoaFlHfTh8JVRqdmZEdXBxazwoc2RCNlducnZVbzEqMjJ1e3F8MlJ9QyEvMlk2UyRz''@;'; put 'put ''PldKQGVyS0BZUHV0fVlJJD9ZIV1LX1ZfKHtZOmUzW3o/cHVpJlc9VWY2Pz1RISIkXiVXNU4oYTV3O191dEt1ZjM4SnJbPyleOyZ3KVp7JUYhKVsxLnBhNmNsIk8uLEk4P2NBSy4+RTh3P0NfOy5BTmNLX3oiPGM4NlsvT0QyIXBkUE9NYUpfXl9UeXJuIThbdCtyOTQqPExAWFdaIz5ecmQ9bExj''@;'; put 'put ''VG85OHY9NCUxTVVDcjlYOilQbTlUQG85SiwrVzxue3JhfU97bStjSy5CLi9abEVCP1YyS3VMVzIydWRVYD9yLH5QRWAlb2Juc2kmaF9EaGZTQWtte2ZTMWUjQT14MWchN3hxP1V+YUdkaXN8JiE2WW5mcUM5Tyk6WzNmM2MzTyVTeiU+YGY0TjZHPm1ITVdxfkpkRHtTXz5uYHpheyEzQVt3eDVU''@;'; put 'put ''VjMofUMpSC9bOTYzUTxzcHtYZFhmOGNjaWRsWTIuWWIldks8PWlQKmhQLiQ2JkJzS0dEb2pGK0BYOyVqIl5JVyZERTl3RkgvUCQ9QitiYX1dNkw7VHd+STlGVjwke35LKTdtOiZrKGtoYGJgVWpkeDUkY1NjUGdmZVBJQ3Z1MyhIOmAqdHIrR2codHI4aExDIy4/aHcxcn5SfHwqWm4mM080JCFO''@;'; put 'put ''Q1Z2dW5WTUxmQipAVFppfl9CdEV1SVtLfCliaWw4NyV9bXhgbm9eIzRENj1ZOCpLMVRpZ0k6KlNBRnJbdTEoZCwiKCYzP1JdRThQcypSanhWJE5pYn5bYXl4TnhYNyJZS1NrYntVel1HK21gKyszLEE3NlRDJHZjdUdOQ29MO0ZSYz9zUE9wVDFQN1NrSnNSJDU4dCU6VE5aN3ZfaWMjL2ZLZXdO''@;'; put 'put ''IkoxTXRReHMhKFtQcF85PGEhO1VxS3EjUzxKdXN6UnhRUV58UEg/V2cpMDYscEY4YnBpSF0oVmZwcEZjdnBtP1EzOypdOjF7LyxjfCZCR3V2fUxLOT4zYElqJVVGey4mIndhRzFeZU94SExTYCs/KHpYN1FqfFFvWUpFfD5daiFieEBaTSZCTWRVWE1ZfCFCYWJgNFskSk9sU1I1QVY+d3gvNGR8''@;'; put 'put ''PS9DNW1hXVUvXjg1T25mOXh6NGZkTStAWCtIKDFdRm9QcXRiankjekJXOWlHJGtsb11teUkrOkRSakM1ejgrXm49N0dgMUNJeTZpRzRHSk4saEZTSm1HdkkxfS83NGpuLlk4UnhYd041O1NYWGRILnYydXJKey91OH4uTE1jNEhCISVnPyVzVEFkWFJQR19pfDR0VVlafmJ7RWI5eCNofTdtWyJj''@;'; put 'put ''XXVbKklefCVjM2Z9TT4qJkxtL31PeDopPmkvLnowb2FvViElNWRaL3BnQyg6fkw6ZzZvSjhTNT9GUT9+PkY/QklhSihQfkRwPj9OTjZFR1ppc3ZqQmxldG5lTnRXQzAqNGI8XWlOIjQ5bHcpRSRFWkJgU2RWN01zO18hJk1FdkI3Ok84Pn00IVUxaVEjUm13JHhKKXwvQShaPzpiUXxyc3RoW2tJ''@;'; put 'put ''JTlOMEsmcEwud3ZrczB2WEI1SGxCSmhwdGhVaW5kY1hvQT5BKiZ8Vilwc0N5cDpmKyZZb25mK24jTH1SP0Vle1BKTVI9cCNuTXRWcGEsTH5sQTJZM3t6fXI2UnBxJDlJXnd2ayxMQ05ZKHwxeSN8PCs+TTwyPyViJFpxcU0mYXBWdHolXVBJamVgamJPQzo0WU90RjlvYnVCKjUjOmouN1R2WWFU''@;'; put 'put ''Kko+Rn5HfVlrXXxgM19XTTVGMFkkLlloUGouflRiezxjczJRRmNeSWNmJlo4ZTFoWU86dj1pRHN4RU5bckZfTSRCSVNeQjd0UTJLTnh8ZnJ1V1QjWEJPYG9kKUVQRVJhZHwpRG4ybW9jMFEzKCwvNWArN2lCfV1QYV48RmF3NjkuIzIsXlIlYnZxWWYqKUcrdUJ8Zj0rX11WZ1o8bF06fGs1e3xM''@;'; put 'put ''TWNpS2Q3MzxsM2swPGNRTUk7bTxjfnBvOGxSej19RlVIaGo5UmZ2L0pRe209QUJBfjFOQkslMiwoSUduQDNvNFR+WW1nUF1LSlNQNGUpQ2BlYXRtRyNzO01jM1M/JVA1c0BhazxUfWklaUhpWHduRERFUkI7ZSYrKygzMGJePFo3dnVRbG4iVS82RT4jeVVhRnouJnZRS0h6W0U4VEx8YzBdUXcv''@;'; put 'put ''SVgwbCg9Rl9rLkh2JF8kRk0uUE0yKFtTKG1ZRz1oSGBhO1FqZ1c/YlJTbSxdJnlKYnB9M1oiJHdTRCNlPnReeU8kT1tFXnVTImcvYjs8MEdEMCZqWExtM1ddQiY5YFJWX25GW1Y8cSxkfj9GODxIcVt7Ji4+NWtXYi9FbVM3XSEyM0smZGhGNGF6OCFwU0heJlskV3pPez9OLjhid35jPENGekwp''@;'; put 'put ''MXVMRDlSQSl7TXJsV2BzQ2JdKUFuK05dTXJsJjM3dnd0LHwiYU9qdHEic3E9OTpbWV9uOWs/KDc1Tj82ZHx8QkJyImRGc3UkTX0rUSlSJihpXkddZEJmd3wmb3V2JUJTS35JI318OWpaQiRdQWNbQiFzQVVTRnRkU19aeGhyXXhLbk1HMSM/Kk9pUl1vKk1nJXtXUHBxTXJ5e2E9UFdCRHU5I3x1''@;'; put 'put ''TkJoXl1vYHkwLCV8WzxpVGpoZCs/T0ZoW0ZhcU58Z08yfX1HS3duPEBzRzEwOCY+bShOVGQ/Py46YVd7dShjVG9rYyEkK0FuVn1KZ0ZuRlBfI0g2Z14+Nnk6YjR3cjFWIm46JmxVUEVvSSlRKVcqIU43VUgqbCtScUAqYF9OfkBPRy4wKjZiKyJxTD5WKG1nelB9SkRiOVI0XTBkPnRRUj5wZTA7''@;'; put 'put ''ckchQi8qUDw7ITFDP0Y+LjB7Qkt4ZE9iZH5eR0hvNSR8QXtiWEkrQy4jNE49K0dsPnVgaXl3I1A3OiVGQV5kYSErZkRzfVk2cjUjOkhEeldALlMudGx4VDg2Z3E/Kys9OnAjfFteSDU5cGclVCoqM0ZxSUlTTSlZTF5hIVBLLj1KTVRVMjEjSXc5MT15Yk97WUF2WTRgTjJtWntQRjN0Y01lcExB''@;'; put 'put ''YkZPLmIxdmhEZGsiSE1Qayl0MTlFPCVvaUN7YTE1dHkoMy55RlAhbjRxTHZFY0pBP29tckopKj9lLFAldHdSflBsRWlOPTprbWN1fjtjb2wlb01EZmtVcDRhWEJvaGFzYEVwKzdRY0QkKnxURk1jRjp4eVV0KEJRQDA0VSl3JFp4M05SJDE0NHY7IVE6c047ZF41VF1pRVFrPnRwY1t2VXpMKSZe''@;'; put 'put ''WT5eVio6IT1kKm4iMC5GUGM4Qi5kaHVXSUx3UEB0LDR9dTtlOkdad15uRmssTUJQWXpHMnFCRGB9OSgweEh8USM1UE45VFhGTjc6clJqKzleIzVNeTJtPG5RUkIoU2FiVEpQdn09XnomVFh0NilyI1hpcCFAdkQoaVVaTzJHODJQfXMvXyYrej0mfFJtdSpTPXRbPyhMOFVOYjVQZHZWXTYzJChM''@;'; put 'put ''YyxKaFkrWkFvTzU6VCx+b2xEcV0oWTZ9UjssRnlubXhnQ2Q6JDZUOjpfOT9BS01bY2d7VGptIztGM3J4cTN2bC4yLyp9MV54PWp7dWBbImI6WCtoeTRqSkNbMSNZV2krJHArOGs3dzdIUEVqKERfSiZqO0wmZytpZUolbXApRFlGJjYvRDAmby9OIiY3Jk9uJSNLSChzOnUuWmg7JDJfeWElUDJ0''@;'; put 'put ''JjAhOlsjS3JoX2BsNjwvcEpzOkNBWXIkPyhNS3tyYnE/Unw6KjdXcm9ARGIhWFNKYDZvcU1qLHxHeHpEPF8hOHgvOjtwKFpITU1uZnxNR0R8PDE3KzR5RndQeHxZQl1hNWRtbFAkbktkV1F2cW1XbzJ8V1EwPEQ5WGhfeSp0fTdFIjZEcD48MDpMYjpbOSJEMy5LR3VpZE87IXxnKTgkKjVIcSEz''@;'; put 'put ''VkpoOUFMREhgeXJBck9xciVAako4N0QrPTUsQnFaaTIzT3hfby9uNmE8WVdraCROMyE5ZDtzPkl2PixlP3Z2VDlTaVg1UWdlYGJKdjNMUmh7L0IrOHdyfE09SXsxeDBwO2UvaU5PQCw7YF55ZDhwVUIsWVVfLi5sOV5QcldMW3VkeHw2V1F1alEvZDM3cmpDQHJVJUdDTSxlVkghaWohNjUjPXpg''@;'; put 'put ''TnY2InBDMW01Kz07NHlmcjBfK3RVVz91W11ASygockxBZk1JQlNIbTkrcnNTIkolZ2MoP3hKI1RjTU9nV2dqLm4vc3peYypHc017LGxKOSE3eSljTEE6MTQ6OkRDcXhUPXYqKDplUSs5YGFwbFUscW08Q0xTOFQiZT9UQlUhSiZ0L19CRzoxZCFdRnpmSnwlQCh5Om5zbGRlL002N35QWzp1ZlIw''@;'; put 'put ''Iy5JUi9PKytrXjouZTcjRjhVQEdoWVJPTk5sYzROLz40bHsqYHwoRmV9VV5sT3RCIlFndVkzJkM/XU84WytkLFAiVT55N2BnYDxkPnt3d0BdWWFMKntneVVqeT5DZUViRWhMNmFEXUVdRWkpRllYfnQuPkBLfFFBJmoybGRmajFra3olNGF+TkJ+eDp0IXhyMXc7ckEmK284SlZ8cT9za0xmdl91''@;'; put 'put ''I0ZgJkVgUj0sampnXlF+bjlpIWVMdnJVJFVHMj49Zl14dE9kbFc6cVJSNkZbeSZTei9MOFpOfTpyMmZLZDNaK3xTJkFqfHxkNnJna2pOaGclUlp1c15RVjhfeEYyWHlaYDk2YyFmTXtndjNIUjRNQGQzN05SZiNjLHRjekdPelR7YVEhYzlsOjFPP25FelcwW19tZHlMSFdlV0xeOzcicCNvT317''@;'; put 'put ''dys6T2ljP0l4TEluXjIoUkRBQWF+ZS9SNm0hfTUsVW5BTHdPKjE4JT5eOWFiemxKKU45TTZDbEQ3UShwRXpgUj95fEJLUlBJZj5HN119L0Y3c0w2bEwuJCo4MDghUTVoTWFvTlA4NUppUUVbe3o7bioibng0cToyJS58YGJ7SDZHUS5GRWxWdyMyPX52emozMnciQTpHVkBIUk9eaV5mWFk7WEgv''@;'; put 'put ''RWFadXRyWV5Ze3NXbXQ4O2U1ZjpDTmRoTG1WRkI5V1JZVUlFNXdvaEwpeWJOUHJhV1BJIVplW0kjc0V7dC5+dEpoRE0ybTBMX2BOfCl6V2ZDTlZuTkc6NDBgVC5lZFFRVEpoTitYLEhNcFUkbWpeTk5zL2NuSl40UHxvLDBJUTB+fnxARk4uQzVwTypoQzo6UTF6PDs3dDBVRCNFfjZvO0ksQnRD''@;'; put 'put ''LGkrdzJjWzFEWWEsSCVpdy9fQVdgW3A4elQkYHExNlkuM1l3bkJOKyhOanRab1FYKUoqaihjR11Va1YxU1RQXXdgSzJfbmtwfkt2QjtAWEB1ayNFaXQlMHd3RUlBfCgufHVod0JhZTNiJkVFfFckK1pOa1g3QH1ZPyl2UGBhJW04Il1Ab0xIYSg8NzI6UzsyJHJlfkxsfUdSR2twQiFwWW9Jd20p''@;'; put 'put ''eEI5fEsiSzx4fj8lP09kYVRFOCZjZkQqSztpYShlZTRFdS41XTxPYng2IXcjaW5UU2ltU2gqRj8iNGdRSnpJKHcjMSVKOFt+b1RWOnhke1ZvNCJae3FsUSQsRFIsK2JPRD1NUzY4THVlamxOUWR+VEMlSndba1ZnaXFZTGAlbFlvWD5+RmNtOFdCa1VhVm4vPXIkSTVWfUw6e1Z8aXFxY2VZLDph''@;'; put 'put ''fmxqRXJOYzp4fE8+Z0NzQk0wTXo8aWk1ST0mUFp4O1dpSmkqW0ZKdSNjcUYjcXM1WHdKPiNNXmxURWN4OkNxRXU5eWs4ckNNMFZoditMRGlKfHUwYmN7UUFOIW1vUTldRyM9eStkLiplZjkuWSZzKnlvTGY4TSFdeHdmZjBMdE1dMyZFL3pKO3w1SV53d0w0PCw4MzRDV1NVR1d7L3p4JVdAQ1lj''@;'; put 'put ''OjMkI0dpXWxHTHgrUER5QVNlSn5NREg8az1sQklWVlU4VTZCfFRYJUJze3cxeyR6T1guXnJUYmhnOVhHRFlJOmokVihxOVMwa3s9IjZnIz0pbnU+JG0+czZQcXBPZyV9c2V1e30ia0AlRG9WckdUI1NPVyN5R2xDWVtvT1UoYyhlM20ue2N7LChSWEMlRHUoQjI5ZXYzXXxBJDFQP0V2VVdeJDF+''@;'; put 'put ''PnJAYG0hKlM+Ti5PUFJsKHJzNn5dQGgoK3EqZUJHSlJXQCJkYlpTKltKPVlOTj4zNXNTbEZJVjk4PElhdTx0TlJQN2FBSGllT08yNFN5aEJPeXRNMjBMaDpWWWp0eDFTUENAZyFSc01xa18zI3J1ZlFid3hCbWU/XmNSRUI0IWMwbz1PUG5GOGU7TjhoTT9VaCNAckIhJWMiL05IQSxoRmUzXWE8''@;'; put 'put ''WjVQKT5gbHVOSGdmTCFkaTBlKyozOVgmKz8qLlRPSlRJfFswZjUzRTpZL2R6PDspJlpFJCFVKEpeYWlve0d5dS8iYVQmVF5PfWh4XUoofWsrJEJrN3lsM3V3JEVhRW4iIUV3cj86P1NJK1A8OFteXzc+MUVpQXZNYEZ9WENNPXIwSFd2NV1GRkFKaFU0JGc/QiYyI1lnXkddOHEjVEQ8cWs1X1M7''@;'; put 'put ''YmFZan1rZS5kekgsWUJwUEAzJH5IaW1MaTl9ejFmVipBU3xDWiElWlosI3l5JGA/aXZETypHe1Y5ZllFJEtdP0FINmpybjooezx1ZFNnZjR+PG0jTUVfV3phV013RjxVLzR7fl1pWjF+JEFbRVdlTmI1LnxyQmJ4TGF8bWpQcjRLXWJQe0U8TVZaRnAwZjJrQzRTQiJoTFN0UjY4Z0cqaCVtYjF4''@;'; put 'put ''TWVsdm8yS1gpL0AvPVg2TC5IWWNuemZUcnIoZ0oiUVJTdEI1QWV0PD5JUVEhPTRzW3hmUF1TaHZAXkh4XjFgbjVzfG8zS2wyI0c1Y1E1aTt+WSVROUxZQCUrQD1RSms+OCZ7a01AXz0iWWpCdGFAcXJRX1lrL1Z1Wy4reFc3SiNbVk8qNT5gTFJmemkoVkE4Lz50Xz1CWFhyei5idWxZcDUqaiU/''@;'; put 'put ''TWokIT8zPEYxYWIqfEZbbCsuX0pYKlVJTmFIM3pva3tkLzBpV2A4aiM8YzNHLmAmYmdmXm52OiYzW2NRYiZ+bWBZZjRlR3hwNmBXSiljPHQrTkBzZD1vRF1WbFBuZix2dSNNYjNaYDZAdkJXKGt5eUtpJHc4Y00sbSI7Pnt4ZGJQVExdT2hvR1VoISxwditsRzxTWilvLCRoXyNhck83ZStveGR0''@;'; put 'put ''a0l0WmFYSk82U3pVamwpZ2FUIjpkOyRlO0hdK0AuZH1PZm0rcnhnTSwrZTY3bHcwYiZsVlJSKiYhRzF5PHQuYH5Sbz85VEhtfi91PV5+fkhKYSZSQEoyTjs8ZUA3bHpYK3p2Wzc1cXcoZ3VYO3c0KTo+YCFFZTVqcTMwL1svT0U6Mm0wL1FmWmdyRjZIKUs2LmpRbVNMKT98XmRDUSt5RithYXpA''@;'; put 'put ''Qld+Qm02biVqTkM9Lj4sRCIvSC9xXSg5TGFtKi96JTw+JkdYdmZwPzpudSRxOkh+L0VVV0NrdnxQaztqPz0lVX0xfjVlV11RSkorcjkhTEU/b01YImN8PDhDIzc2aDg1dD09ZWd0SW5JV2FNImNrOHNPPjI0YD05e3tlITZucCFhd1RVYHxaZDNOImM/PTZKVjR7czN5YVtvMmZ9W3ozWj1PazxK''@;'; put 'put ''ayomeU1+a2dTdyYwU3A5PSQoNypTXTFgSXd+THY2I3soV25pPl50MHRDKUVQXzxGcSp+WFtKYkQ7eCplNCExRz5zTDM9XzViRlIiZlJoVDRfJSE9Qncjd0RUZWBIIX41Yj8hVFNRSmdCYX5GMEhxT2N1PTVda0M9U01qWm4mdEJQUnZJaCope1ltJUtmJEVuW0orPHM5VygpKTd2Z3M3Z0JiVShK''@;'; put 'put ''aWQufiUxfVhKKWZ4P3osM10/UiIwdVk4Q3htKWVuVzA4IXVJVFdJbjh2UklOMjthVEA/JXtSSHgoYm9OZiEsMSEueUJJIlhhQmJpdVJ9ajJCJChae1J8XXBoQW4lY3khRmpheThAL1ZLM2V4KVtYLlZGJXJGSTk/TEJjLGkkJnpkVmk2VSVAVmRZbTF+Qn5kKkA8WHcqZzReNVA1MHAqNWBtdDp7''@;'; put 'put ''KmgyUnhgZDgxN340bnV3enU8KVRveTh4Lld1PFoubGtfLjJGdDJPSG48ZE44WHxUSXQqKGcqOygzN2tHZ3trUXVJLChyM0dNR1RGaz56LCt4KU40e2FUfGB+ZlM9I2NgUENfXWV+dSxKeTdVI0djNTE2OUJTJENbRXNWfFZ2JVpGYjI4b29VKCZPaGdLLy43JV1jNnM5cyVtTU1VXUVlcGROLkBY''@;'; put 'put ''Myk6M2FgcDxud0N8YXk1Nz5oZ3NCNWFtJnRBUiEod3ltaT4yVl9FT0VYe3pGbkUmfEQ7XXg7XVUuRUswakx5SFl5fk9UbW9NUCxKcC5UKDguaihNIy5MI2BDSDVYIk9udjswMVg9TzVscS9jbUUkPFJRK3d4TSRaP2giMHpyXXhncUgwMU9FTFBbVkdLVSVlNCh1UjtgOlRBb2xZem1AYVcyL31d''@;'; put 'put ''Vl11cSpSTkZpNEZNNHlpTX5VbmkvJiN4dyImVn11SVpwZHtzV3pYRWxvQ1B5VjBJOEt+MjBWcjg9alBsRDczO3gqVlgoaGhQYU1KUnpQbyojVjBOamA7cW09N1d5U3M+NGNvK1ovSlNIdH04c05DRWt5LElxODFlPGt6KVpKcWdMb3k3fiozRUc1JnJpNVFmWUBmSTosfXVdem0qQWUlJWI6PF5U''@;'; put 'put ''dFtNKjVrY0Z5eEduZTpKQj01cnUycVRrJUt6RG1rPW8wKkx3bXB9KFttNWBxI15GViUxcmJXRipQckooYjMqQkEvMiV2fXtVaUYiOTB0KzAre0tlVjA/PXpaKVQ6WiZsY0J9dWdCRX1oIi9NTVY5dTFNa21+emhtV0xtT1tmQixoekZzPVBmOWRrbzU6ekA0em8wKVpVaz9TJTxvKiJHW0lgPkxM''@;'; put 'put ''bjNUe19jO0E3TyViIWksRSNQIUFOd3Z1UnVCS0Z9Jmg+L1M6bihRblN2QFc4fl1UaDE5cmBVUFlAZiNdVGY9WSh5Xis/OWhARFB3QX1+WmkucWlHbVcral57PSssNjcrNStKQkRbUjEwMGpEZ0c1SHomfH0mfjJLVzxzd3NiSkh0cDd+TFQuJWB5cWZ6X3JfJT9KSX5veTVyVUFmPEcmMnJyNmN4''@;'; put 'put ''flg/OEVNQmZheWQ3LGFxUzQwUGdCZ2FzejZ0W3lOaTU2LGc4Xy50QjdbOHp+YmI9P1FbXWojKUpWZ1dmejslaVJAMzxWU305WSZgKURYUD5gdi4mZksmJE9kZWQ3LlBIN34/Rj4hPSpmbzRNWUV7VWc9TWYxaTU1fkZWR0dydHRsSCE4WyNGbiFWOyI4OUBwUTwrK1tUUnhTMF1aS045ejBmNHB7''@;'; put 'put ''ekpMOWx2W1twe35eSTNdNylOMGUlZjdjK2xJPSQvZ2wqZV1eUU54QSE2NTEsXVNKTjg/UnhAa1R+K3NsXTp2PCEqfkNXZj53X15AVi9WdG82IztNZGtzeXNuYWB3VjRLLyNReFJ0XSpgK0xXYGssLn5IUCs9V1BCcWZzUHovRGl3N2ZCOXMlL2JTVEpXPXg5fWlhY284dTZuayZYOG1xVHF4bmF4''@;'; put 'put ''WVF7WixfSXBydHw9QmdOdCZWI1gySEUyNkQ6JjgzfElidDFdd3UqXXlxZTddajA7e1FdbzA0RC5uQE8pYUhMYWVmTiw3L0tAVE1hXzI6TjwkIUd5amhlQ29RfVhDPl0maW4yZzl+TlA1fS8iWHRfXl8qOkNbcVE9QUooLjJ6bmx8MUtpJVIiPHMrOF40OS4lVCZeIz4pOV03MHxvNyk2RUE1Nmtz''@;'; put 'put ''V1MlOFdIOzdpLyQicFQ8XktFUlUpO0lNdTJLWmIyaURvWChbOThKLDdLLkNHN1dCODY6I0Z7RX1za3pkLFdJXmN9cGVjR1pgJHBeRT9hc0EzOXI4Il5wQUtaZTRXVD0/cmhVSyZncUk/THZEOFRUQTxAKENEfGI1fUA+TUJPUS9WZEZXQXNDaSI5dHxWNXc9OkNkZzowRyh2OWBYMl1LdXNdI35m''@;'; put 'put ''XyJbOit6SyJVKVNiK2NtIkNJSWIhaTdGUjd2RHdnen1IWDRaZl8/PG1PVVR3Ojs+SjY+Pys2LGVGdHxyXUFkczR7KnF4Wn5EYUUjITApTG5+Yz5iQ090JDFPeyJhNHw9UnBlQEY5KTZmKkFkanMue3sjMV9ZaENMbzlRPkdkbTdGNjw2KTlCOmc1PERkZ2VxM3EzXX1jUGdvOCRgZClzNVciR3VE''@;'; put 'put ''dDZ2P0o1elopTERUQUxDOz56XT92ZCs4LCZ7ZigyfkBpZH4sTl5DSU4hfUc9SW4hPi86JXV0e308ez5FOS9wUihoKXJNJXQlNnUlYU8wSCldX1p4WlcjWHJ5VSg6UTZpbTM+L3gqSVM/UWxhMytqSWBiJEkjQ3B1fHc6QFJQKHA8PG5pcntDaFZAVkB0eXx0TjJrUXl1WXxuc05vZE5yODovLklH''@;'; put 'put ''W1RzayQjZnw4QCEoeUspX2tZMVVsU0laLlBOM351VHd1M2AzYk9qcVQ1XjMjXzY9UkF8fTIiWzZNSGtUOH15VWdzS0xeY1BbMiYpN0NXXVkkS0gwPzdiS3lWNCxGVWBbMSZNRkRddTdiWWg+UFtTKHxtJmdFZk1lRzp2ZD4xQVl5Jk09ant4ZXV8RmJ7PlcjOyYuTkh2Kzs3RUlaNHVocHZwdyxV''@;'; put 'put ''X1p7N1FpNzwmMU8lciI/JTU8RWw+XypQeTk/VDRfTjRyYSM6JlE5RzZnbnx+MWw8S1ZMLF8yLz43YDc9cmdsVXVmUGxxbk84VGclS25pfF4kan13fC9bMW1TVXw2bmQvTzZ5LHNlSmZsNSkvUG0+LEJ9MEh0Z0ldJlNGNXJXdF1IJTlWfDFIaDErcmBPVG59UH1EelJgbD87O05LJklmKV9yT0NO''@;'; put 'put ''JVcwUENhLkVZcix5X2d0ME1ZfDJOT0tUJVhnO0NOQzd4d3QjSGFBSXVHTHgydXBjVm5HQEw3RmNzYWVMcmolVH03bCNJTEcqP0ckWCxrKl1OTGZZeHoqKSNzUkgybD5HM2xGUGU1VlQjSzxgZzk1Y0xnc05Qb1psdSQ+OHdrYyojNiJ3M1NWJFY2JFBBKkpnSDYxMTQhTGxUNDJhKW5hJFBLUz9+''@;'; put 'put ''M19VJk40c0dJe3lofS4rek4/RFM/aWspTjw1OXQ2cUlBOEttNFpGekR8RkdPPCllWmZ1TFYvRlNBOFdoTFdBOTVRKUNBVTBacXNBZFohQnh6cFo9Y255MCMpNTVKW1Umeygzby9TTD9jX3l8eHdnWzhxQ20pR1JpOWhae1IzRElIRzY8Q3AwPUg1OnNDQnVlVl56JGpEb0lVWF52NVNwdVZRKUBR''@;'; put 'put ''R09SVklBOVMjVEZgO3ZoUzpDXmN0Sz4kaX0pbipubkc1OklXLyxbRywkXUp4ekxAKjV8RyZmfDw/VXB4RFUwMD9oZ2ZDPVN0dCJdNWhyUXw1d0k2T3RVZUxQNUBRfHsia2pBU0IyWV40aXM3dj5kPiM3NWNVd2svIm5Xen1JYkxTaV56c1VEezIsfVtFZ2ptKX4wPCVzQj95OHc8JWFMdWVWNjh2''@;'; put 'put ''PzhqXy4xMFF2Oj1PZl9mQTd4dyU4V0QwMGxqMEc+biZ1X1Q6c0MoTlgqK3paTzNRNHg7NXBVWCxPb0FuV1BOdUxsZXIjIWBKM3JiTmFzODlgQ0p5QmFhQjI3VmNlKlBRcmVnSyltc2IkSmdqbV5ZWzwjKXU+THFVQWBxcFZDaV9fZWtFKTdYJlo7KWQ1RkVHcW5MPGskY0NaOVdPe107e0VeSm1T''@;'; put 'put ''Nisya19IV1EmOnRVVUpOXkIlYF80OXtvXWRSW05CMU1vc18wJWZtYFs8QHBiZ009VDtMNV0lNF1oRmdRJjp8UkN5dFF4TmErOmB1Oks1VkklbDZKWFFDS18pW3F5UilBdXlyMDRbXjZtOHNWbkwjRGdRJjprIS4vVFghOF9xWU92QlJAaTBNYHxwRmA7dnhCITBNSHQjc24lL2w1I1tZTCtUc3Fw''@;'; put 'put ''VmQvMFZTPVpZWmQxITxObDUkamdRUCgqP1YvN0UwKkN1MToiWSk8PX0zVzsre0dNKUZFdHwpbSVkdnMkcGg2PTdzZWIlbSVhXSw8NS9vbjN2W25OY19kUUkpPHhOOUwlVFdPQjtGRDNbOi5VbEZ2PzNybF8qKE89KlMvUmNnKUxndD5baz5XNDRqNDlCXXtWaHF0d1N0fHl2SXtkOEVvNlNLQ3Nx''@;'; put 'put ''JmtHTmNwZEpOQlF0PFcqV2dEblM8V0JGMXQxV050VCRvU3xbOWxCQn40Yld9KCwmc0tuU3g7K1JuU0B1WGxpL2R5MVc2I2xxKXUzRVImPXhmbVtrdlBYY1FKREkpVXQic2p9a0M8L2dIR2RjKVI/VGwhImJmWyZvL3hLcC8jLkVESj42bWFxd29kP2heSXEwQVF0SjIpTXBbdzIjcHpdNyhlLixN''@;'; put 'put ''OkNtdWxzV15zckRZOClOTCF0fSRBalJSaWUzKjZMSGt7LyEiYjlmM209USgrQjlnRVs3Izc6dGpsWmlENH4kcUp8PC4rUnJ6MHxaR14qdyhqeDJ4PCQreE4vcCk4em08OlEoIzIwakdFRC5TYmYpKG9jYklRezB5OWxML2t9UlRgR1A2OHc8dHNfV0pkZl86e1kuNnNGPEovcVtDeDttRU82QiZi''@;'; put 'put ''fjtjREVeUCpDXlAqdnBJNV09a3F8Xm8paltDXjdwdnB+S1dnVnlSSEJ1UXBATSljQUVIWmQpYX16KDdhMz9QeX5zMHNWKlVFfTBifCZnUTlUWEZ1dWNZNHZvInI9Y1phelEmUXs3b2ZDTFJFemBTQCp5bG4qQipQYi9GbGFDdGh7T0ted3FPVWtNNHN4aS9gWkVMdGg7JWp1diI/QENTeGI0XW4k''@;'; put 'put ''UXRoJF9+RSlRZGNpTG80ZnckUTlbfS9iRnlLdTRJbEo/YUYiV0s9VjFsYVYkQkYxO2ZCW0RBT1JfUWNISFFnLyhLPW1yZzBsdCtfR1pPNV5fNlt3KCtIT0NZVjd2IUZOP3peJGBIY2JDUkxGbH5IOmVwVlQ8aiY3dXkwaDlsL2oyb0RyMjg+WkRRZSs9dyE+RjVkUmdkYW1XciVyJHZ5YiQlN2hU''@;'; put 'put ''WS9CcEthfms+bH1bUVoxSTJKLF9wT3B1OWose3U9eyI5anZrZlAqXWZVYCMoZWB3e0ZmYXtSM19BWnRlP159fUE3YHFNWzhhYURPL0UvInJxKHQjfHF4SHJkJEoqOV97MEUxUCx3SmJ0USgjejRZTl5nYyt1bWBxRH0/TSo0I1tNXkBuVDlsS2QsZ25YTWxtQDkmV24kNjVtM3xadVluJDsvbipa''@;'; put 'put ''WV9bTUdMdHE5MFdNeGRCOlhNeE41TTliW2VPLjtqbClWMUcoVnZFImciXihidyxueFQkLGtsYHZXRk9xNT0yV1VIWmEkUzd4RHAwVG1LK3Q4QDpwY0lIQHMvIWFrQDNxYXkvPW95NSEmI1s6QEs6dX4/OjhbYjgseCEkKUk+OWBJQU9WRipdS2whLjdsPEgielFRfE4lJGU+Oj5acll0S15LQmsh''@;'; put 'put ''eENJSTlhK2kjd0teQG42VldRSnxGeFRlRnhab3VXUVE2KSY0UVFBUy5AfG06XTtdL0FVNm86SFEsKUsqWWZgL356MyFAVWU2V1BWXV1hQ0p2ZWQ8WnosU28hdCwrb0Y1REY/P20oVGpJdnsmVkklQXh6QTx+bTElYihpbVFeUlU9O3krUUtmPixAZENROCVgQy9lZkw+IWVEPTxDRFhHdH50fEha''@;'; put 'put ''KVk2X2YwNF9mOyhDOX47c0FNZGBYKThYd20wMn08dSFHIkI0aVdlVk5beyQ8QVFESVJpdyU+fTw1JkRrYDAvJjhxT2JMRShNeVcxJCF9Sjs2NDJOMWx7aD5CbU1xMW94e1lhT1Jlc09kTWU2Nlo4fnYuZkh1fGgjVXNqem5VTlkkSTxQRnk7NU8uO1Q8RC9KPEB9UlV8PzUoKW1aXio6ImEkMWRl''@;'; put 'put ''MTgvbSU+Xl4/Oit4fk19fHRKJjdpIW9CfD9rcjBlODNiT3klKypfcHgzPzo9TSVMZ0RKdEA8a2woRUtvZnd6LyxgczAzOmM2amBfWE8zVVRRbDJ9VWlIX1BRP2xlWE1PIl8jJV9sTSRMRjtDQSFXJW94NGJwdHU9cEBZdCp9dXVjTE1eTj1SLiVLPjN6KFRaImxKeUZYYHJEM047PSo8Nn0zVFQu''@;'; put 'put ''YiV0d0RnUW9IOzZNNnpHfjBkVGdUKHdxcktWUmZRQGdMXVBYJUpnNjpDZGVlazYrYW4ra2UwXmlELn1TR1htfitALHIzcUVoLlcmZjpYVzchMnxveHx9L3t1InhbR0AlYUw7TW51Lno3eFh3OkRuVWdXT09ZbylDd0VmaDkzW3lBTENIInwxZ1FDJTFsN3VsUW4yTyNzTV1OfSVFZ2hDIVJtanA0''@;'; put 'put ''Wk5lWCNZYFd+Oiovdk8zYilEX1BPa2h2KGIpYiliQW41Lkd+SCZwSlY9K3pOTlA6KGVyOWwkNCosdklRcD0sQllmVUtKdTY4L2JFQD5vL3BHK09ERFgjWn1qOGooZy9mNTchTStaeTAiWCpPWiQxYVc3T3F5SmJnMExMYT9SNERWd3BRQ3NvKltrTXEmYnc2R1lIM2JLIztSO1cvTTtVM01sZFs4''@;'; put 'put ''d1U+RC8pPWVYViszQ0AzM0VGQmB0MFdzeiU1WExUWDd9X3E7dnJnOTVYYFNsL0A4KU9seGNxQndETEhadCZJMzJ4NS9ob0lQRG43T1lKQTZGJSh7TCZmaF8zWzJrRDR7Sm8jIjgxfUAiamAyNUVXLFkwZVRjR3VUSWdbVEBPSDpObzV7eU80fGsmK2FBJEdBcTd0d1M0SV5YJl4lMC83ZClVNl46''@;'; put 'put ''UD9iQzR4QVNzcVcoUj9hW0pQUz41LyokPS9LRT0qb1NDaTw0YyZueExoMExfalBidUw8azVoWEJ3ekd5ViYrY2s5ZEw2Q2UiS1Y2QyFDZnRKP2tIRSlOQlVxcFYmS1d0NVlIX0QqfWAoeGxkRlVWbDBVdSk9Qm1TSFhdW3tFMzYrWXE3LltyQ1dBIXRzY2xNWTJjditvXWRXT21TPGsrIUpjSWEs''@;'; put 'put ''Yz1VPGtCQkB8YXUvPSk7QVdNcGZbbEAvL2k4KEtCUmg3QW9fcUtDNHh1KntgO3ZbUTxrblQyJiM1UiFRYU03Rzlwd2QjRSkxXlNpQXloQmQpZ1VCalJDWXh1ST5UPGtXaUUpeCp1VS5XKGhofkhTSiQ5Zj5rOS98ejBjVEo7aztbXVFuL1YoTT1IdWN2XjkoSGIvUVFjWFBxc1lpNHNQTkJ1SW1T''@;'; put 'put ''LzkxbiM/L1g5LlgyejR5byNwZDREViojSjcjMzlTeUoyNk5kYCo8JF9hMWQ2UypAW2VLTiY7dVlCWnU7XmRne3FbL3htPCRkNTB3MHZQdlg+NHs4WSNVYUYkWio6R0E3Mls1PClfc1ZZKF1UWEJ1KmVbS29nd3kxfkZkdEVBMkJ5MWpIXWFFTStIeGQ2NUxOczBIdjtOLzhGZGpPdF9pdWVrcXh8''@;'; put 'put ''MDttV3ZKRCpxdlBKZ2ZMRVlmYSpnTSRPY0lkPUdJOlo3NWNTKHVIVDExNnheV1dvMzElVUdUTCY7eGZJLy8wPlcldEU2KkY+T3gwVmQsUk9rXUdsb3lbMn0uZzE+dD5hLkthc1BJYWI0JWovT3JRNldNdX1vTD1pSXF1KSF1Ok9tLHMmdV4qYCZtbW52LnttIk9jXVJQZWJRNSVNQFZwfiZIUD1t''@;'; put 'put ''NkQpPEE3R2hJNzBiTltlS1N+PUx0eWs5VWd3OnNzKDBbMHslRnw9dTF2eGR4OlFxUkxlekVRWVd7VEo0Jm1+NVI3ZV5oOj0qUTc4RX5WSjx5LFRtM2xBSStaI1ZkJktMVyhzRCtzJD0oeCIsNUprKDBlMG01Om1UeGtxUX42SX1dLF5+YTdNeiRNZylValZCMyUsdntza2ZiXUBCdz53dV9nIk42''@;'; put 'put ''SlluUVBoaEdzfmllZEohdzVFOCZsImN8YS5+MDwlIzpHMW9BZWt8VGQ9TUUxOk4qTF1APWhDV3hfdWA6UVFEMm4vSTMlOWQjIW1WV2FPNExGczA1aFg1JilOWHZPUVtqXTUlJilucFFKRUpII2pIZFpuZTBtO1l+dXdEVCxnZHchYTtaVGNFIkMxNEpAQEQucU8rK0hGIjA0fkFtTChIPWgyU3hm''@;'; put 'put ''WkZZL30xRClgRGspQW1UPzh2Qjx9QV8rQjw9MWdwcDVTIXFsWWE2NVMwKC93Onc8RlQkMyJ6c10rOHlEWnFDcnhtd1g9QX50aztzQ01rfEtII095Lzx2Sl08JUNtQiFuUnV1PTIvInQsUHV1Xz4xdHlQeUNQL11WRTpCXXssckV+TXg1S3kmNCgvdTVja1pteG1lLm13QUAoTFFEW3lja2IwNS5z''@;'; put 'put ''bXQ1eG1xVVNiSS9XMz1yRlAqVWtqejR8MCRbKGpKNmA2SldEazhlb1pXTixCNCNnLHI7akNUM2pwUVVSd29VQ3h2YjhOOTU5JHk8USlsbjVGPUdsbT15enksKE1SVFg2JHdHempBT0BMeTcid3RHXSVDSSJZNGV8dyRdYUtxPUsqcGM4R0diNiZ3LCp1eGtBQGpdW0JNQEVvW3E3a3JRRnVDMype''@;'; put 'put ''VmNQOFhCRjBbNywsel4pdno5eG45SUhgdGxZdFlWSzNyeSVlNnJmbnQ8Nk1WJGtMXjN9Vk1wRHZuXX0uJkwuK14zQlN4KmdnTHRbdSpDLj5TKWg9V0R4eSxNWFk/bEdwbCwoRDx4dyhrVEojKSQ5RFJ5NXEvcHooSFMjMFMiSitnZzspOkI2L2k8YiNual5RJUQuTT4xMyhfY2pSMHY+NUhTZz5X''@;'; put 'put ''dyNJfGliajMmWlUyUlFURU1wPCxrYGkxb0FlOFokJXwvZVVeL1R+P0xzI0Vqal5JUEhEdk1MWDVVU3R4YSpNT0dBUzFaX05COlpLUGAuckFNdmdhdC8rWjF8KSw6WDl4fiQhbFR8ZlEueE88P0l1YncmZ28wKnZ5dzZke081WD4wSnY1Mn5DL2x2U0BQfGZtbHxmc2VuZy5wJFd8ZlkrdF1uKzk6''@;'; put 'put ''SkloeXQ2MER5QD55K1IuYVl2MjJ+IVQiRGFaNXUhPkczIUlzZkQqQiN3fGlOb1kwXTFKd0FZanpyTGlsKDJjPTJiMHA8OG9+Qk1LQHJtZUh0blZeLExQRCRURiZFM3dHeis7RmloSzx8dDVza1hDYWA7dncsSHZjR21zcjVJN1g7Nzc4bkVZM3wzP2J9IztbVV1iS2N8KiZALGlffUpoKjtJNH16''@;'; put 'put ''VjRSc3JEfjhXSjtVeC56fTw6LiwkSH1MPCNtelZufVRiUHEsIX5oMSt1TVE1U0o6UWdkOSFFa19pKjM1KyphL2JhdDZOUy9fK2AiRWJSYnB6Yk8ucy5KIUBgTDc3KmNALmEsLj5ATz9TcHFqVV10Qi89cnFMS2NzXyQsZl5lNUZyNGU0fnU/RzBbeExncXY1JUNwSntCWHVvaDtfbVQkWyZ9ZkFD''@;'; put 'put ''WW8sSWRsIVAlQ2VsU01LSk4mfmluUUs0ZWkvbXNjSyZeWkRFYCRRWFJnPCVOcFM7U2tdJENsMUBBXT0jdnVmVDVLUT4xZGdkS2pyNDtgJHZxVy80TUopSXd7TnNvJngiXWFUPnRaJCExSS5SfVNoJkcsWko9PD9Ld3ovPyVvSFU1cXpscm4/cz1DMk97cXNDdigxJVF1elZvcUxxNSgjJGI1a2pw''@;'; put 'put ''aCZQUitSbT8reHRxZlpILlRKa0RkbFF5Wl9jT191PHtbXUVuMUhyOTBEbF4sITZpbExKUVsiR1o9Ylk+Llt+bDNqbyJbN2JjOTRrbnZuW0Z6M0hMITNZdiIhTDZXZntWalRYS2ZmTmJyTiM2Vnx5ZyEkNTZYPnIwSWg1TEptYkEyNmRnSVNmODtVOEF1KnU2diMvXUswIig1MT8sazJ1SFpnUWFr''@;'; put 'put ''JFZ6ciQiaWx9dSszP0pOKEtLPmFdQyJ3VSxfRGpxTVpfdyNNfGY/cldAImM1dlZwLDxHMHlmPVk9PXxnVlpLJSo2Vk9kIyR4d1NvJX0rdHRydm9YaCoqIkBSTj97T3tAJlRdOXlXRFkufXpOTHZRZUB1an16e3BUM3dSM0NJRkdleXE+elJ2QHZyVzAmMkdEfEJ4OzticC9PeUwiMyp1SXVkZk5z''@;'; put 'put ''Q1lsVD54b1Y8PDxaU19jSl9FZUNHVntpbFkmLkliWl1NL0kqVVFXdHoiTnAxflNUeFY9Kk58ailsWmphL1dKX3xiSSYlJGFbKHRLZjI9QylgLyEpd3o/OXJCIT1me3coMj0jWEo5Yjo6PHhuSER6K3xXVlcjJTpvVl8halEsTHFPQUJlIXx5dk5jJm1kK0NYWzk8QSFkQEVUOitSTVVAOU4hWVM8''@;'; put 'put ''REg6bl8qez4/UWMqIX09Tl5SQyVgLi9tekd3M1Bhck8iWmFBZl5Ubl0iS0hZe2BEJC8kYj1RJDk4KEx0LGI6ViUoTE94LiFTUlVFMSNmfjBrXTZLSlk8d3pqfURvTCMjREhlPX4zJjs5ZVpIbHJ4K2hGKWI5UCRFKCtIM3JYXj1pXjpVZ2JJfiJRdHYpT0BlJlpyJUhdTGpZRH5aZm8wPG9DaShS''@;'; put 'put ''UTZ9X3JOX1o2fGt9MCRfTEF9X1VhUHk+OCh6RXVOY0xeNF9EOVd5MCIpM1d8QmBEP29BQVpSZUtjRihNUmtmRD9YcyVCXVlVXXV4dkNRaXlYamVuL1MmaGswK0A3dGR7Y0B0VWNYW3N0NkBEZDBWMit5RjJveEB0Zj9yZFYjUHEqZ09TZCQ0eStuVHpneWJvI1RNZnEocjhZZTF4I0ouVVRfbHAk''@;'; put 'put ''RXEoU2tCUihzbURBRU52TEledUlMKn56T1NqWmQ8fWsmbXwxcjczSDh2ejVIV314amMleX1pdzJeO35BOEUvJChYbSNxLGkuUH1QPyg0KGtxXm4kV2pxe3l5JUB4Si9sOjgvUyk1e3A+KitidXVJQ1I/KCVzdWElOVo6X1ZOIVs/SHtUaF89RCVgcSJdNW5jYSoicVdmdiZnRG5TZChGbS5VJFNU''@;'; put 'put ''JCFkekg1VltnSGdpMSEpY0AyZShWaSo3Nzc1SXduMi9KTy8mJWpaOWdmaWsjS2VPXVFCRSNBYjYxK2d8YmFtaSs9OjwoRG9iZWtnZ0BpVTlxJm16STRIe0o8dl1WZzJ9TlQmViVwXSMlQkkzMzJTSkZ8KFBlai9uLmxbZ3s3VXlWL1UpOnd0ciwibzRPRGtPa2c4P2MpcGpEPn5GQ3RfQjR9e1Nj''@;'; put 'put ''Kkp6UCMxfWVRTEpWVjgiUyMiOHdMbGEoMmQwMSFIUlssfG4yUndLNT08QmtOPDp9W3lfTVt1NFJnTHFWRnN2U1Rxfn4lQmxfS25aTG9XMVJ4ZEJqJmBvZ1F3eHE5RGlqbEQsQVE5aGAsa3l3OVNaR1EpMmM+QXZPI0Yie0E8MjdpeCwhMis6QDF3L2pEaWNEPVJXPlouaThgZj9CS1czSjtoX1oh''@;'; put 'put ''fnpPd2NFRnc4fT47YyovSkZ2TlAyW0FNLlZCU08yY1lRfnJ6bCFkSnYlRSZuei92KmBDeHdxNjFNNDJRYm02ZnV7SnI4YjMkdGRpc1RDYz9ZNUw9Ol5LdnRUOiIqQ2cpT3F6KG0mQik0RU1xOS5dflNaan5ZWSRVV2AjcmBlTzt2YzMvYnwlY0o1KWkuOiJCMW5oWXhla1M5ZzF7O0VCVV5FMihq''@;'; put 'put ''TkZ1ezthYXdLXihtKVJDTjAsM20zUDU/a0Z6YDA8VmRzQ0Q7Zjs8bkZmR343aUE8JGs8UEc8aSp2b0dSQSpXOTsoc3opeE88TVN6eThgKzg7LEIqYE1IVHJ1STEkWnwmS2M+I1I7djtAdkBBSytHXnp2Y1dlSmBfNVtPaGkyezEmTkFrTz5lSiJiOz9dOnFGNDMiSDY6LjNkbmRtU3R3em9YO0wh''@;'; put 'put ''bl4sd3NwViRsND83NGlGIVR1UXUrfl9WYztWcFE/U2J0ejk2KzBSTy8pLiRyQ25ATDAuQkxQZkE+NWsuZ28meXEzci5TTkN8UntMJTE4K3BxQXpuWF1KKDFEVy4oNlFwZ3c7U0tmWS9GUnclITQpMkJwIkp3SCxHdD5GfmNjLFteZz53WlI6elAxV3IpQT0mPUVBO2x4QjtgT11CdWB+OmF0fn53''@;'; put 'put ''d0dZeT98KzcqUGJzZTgodVRCI353RHFQaklnWX1xTmtgcFtXPltLQT54YD9vY29PbkUycUkwXmBFbn0+Q0gleXVLSHV8UXA6Mj9oS1t7RlpON2d1NXkiSSFzaUlfWC5oPmhweEp0NE4wNWpmYHRwPHhFISNxbVVYOEp4TDRNb1VXPjI5RkhfNkhoeFhhNzs8Y257I3NTWythMzckLlAjViZzJjpG''@;'; put 'put ''OXQsd0RTJExsUDZISkFBME9SIntzKF94aFNyW0R0TkJQPzouQ3hUc3FXMkIvIj9HSF9kdHZpWUo9JDFzTWBpWU4sWi5oVWl1OHFCVVV9MSY7YUJJJj5xWFY7SSgsZnZ4T0EwMUxaajc5MjFaMXwxdGE1JXJuMyg8aDsyPypPd11LP05PMWZkdEVxJkFCQih0fTguNCRqc0E9dnZubUtab29PQmMv''@;'; put 'put ''VF9BdGs3eDtDOn1jK0R1S1o3XnhhI2MjM0RlISRpQWApPHlLJHZ7fH5IVUVlYVpbPVFjY11kcntPLnxUMkpiZmRLemsuQCNyWkNvRWUlLzJwdiVHRip2KFQ+YTY1XU1rKyJWe3src1hdIlhbNi5oLGVxaiIxOXNbYXEpaDVUXmtvOG4wQlg0alNWITl5MV4+eX1Id0RHWSFzR0c1RGRfUz92c1Qo''@;'; put 'put ''ST4zaztJdDZqO1s0X1JJUWlZOHtVfjQufUQ2Zj4sKnJUWDF8KyhQNmkjbiMpIyFqWUY5XjdCKndeNH0vK3dGOlIuUVcrWFB8XUlRS0lNZ0xiQSkqOzAhU3NVO31pJFZ9WUVWX1czMV5Ja2g1bCpvU3Vmem1wI21oUC4pYFlZLyR8dyp2MUdXP3hKX1dAdSkjMFRLWXtwS3NmOGw3byNkdkAuTDg6''@;'; put 'put ''ODE6bUxCMmFISU4kdEpERjVRUCI8OVlRWEl9SFFBRU00Ly5SPVpzajcrTCtAW2h2XzJdRTxTRSZQNiQ4O1BGRTA7WSVmUyg5cFt8aH4yPUlOUCI0Y0QrdzpbYilpc2w4Z15oaSg4dURDKyEhMD8jWWt5OXJXJjVyLz5WIkp9Xz1lUVUoXTohP35dc2tmZE9nPyJWMyQodjdSXWozTkxeNllQU1Y8''@;'; put 'put ''LE96N2h0cnNjPzYiOGpNfiJsWGRgd0RzK154NlAuMDNJVms6d1RnLlckTT4qMU0xMDpfUjwocDBgLklAUjt+XWs0UG1ha3NwZ3o/ZiZSVDpwYHR3dEgxc1hkNXtUOEBBdjUpJFkpIzZbQV4pQTheWjRjJC9CYkNBd1hqOkUqekNoL2AxQ25bWCg8JkhHNk5CRnNfcFdsImNwbT9hWXkraDBidmEm''@;'; put 'put ''MjVAKz83Rk9ENkkyeDcyLmgvK0FJRDNUcnYjRnoxU3dJTWMwUk9OJVt0R0VMT2pjQmQzT1lIOmFrdlE/aWFRKUkhKHolQCowOUIlaSQkIllJSGlMPHclR2VPaixsZyFCMDo4RlY5K2lCWW1nW0FITWpWODBxZy9ZendjRlJPZC9iUD1XWE4xM1JOMjMqQlBWd0QjS3N3elddTjIhbF8lUXpfMmRN''@;'; put 'put ''STlLZ2N7V2dJTzB7Sm1qPldRRXxhSUg3cnVCX1J2dT0rJFFLdCYxbkczajcqej8mKmpuI0YuR2tjZDVbJFR1Zj8uTWFPalZnWUtTU3RvQEsuWzJpKlJETnUpWD12Oj5CKltKKldgUkJZSEU6QmAxeTZsLDxJVUpvQFtELD4ydXVJVDckUjduPkl5KClQK09yLiM/VyYyMUAye2VsX3IxOmkhQjB0''@;'; put 'put ''RGYoM2B2Y3RUSm5TbUNKYERBeDlgQ0Mpel9haWtuZHNrazkmalZFZWpLW3QwS2lLZXVPNyRAQ1UoLDhdalJNc0kzPGgyKE9BaGdfOzVDakRsaXpfUTR2SSFBPDpdSkpsS2Y9XWR2Sik2U0tDT0J0P0FFZmleT1lXKTRieGpufikvRWA+Onc3UWZLeHZUOSk4b107QjFsVmU7JEIjS3B4bkQreGVQ''@;'; put 'put ''ZTV7USN7PiFFWltdJE5rZG99PHI2MSl7PiViJVM1ZXhIdmtWIlBVa2V+ZWpucVtvWDM7X3k1OyF7UzlmbS8+bi9kLC9sZ318THBKSiN8VCw4YkJtaC5IKTIvbCNiNWUkRF84b3xBSUkjMERNZUM5ekYueEkuIUVnP3hsUDtAaF57QzleRis2PyFBSVF5b2ZGPFkrdWFpKyVReSh2NCVySm8wRVB0''@;'; put 'put ''SXQwT2oscWkhVWVLZn1QJlhsLDg5bjxOQyt5OCJeYF5TJDxIWUxxdUtwREpRRjxBM2xzaHJuYn10QUZqKyg/XW06UDpSbCpVQUVhbU0hRCRpYXk7W3dPbXZ7fXBCKXZ0PD1Fb1llK0xkUncoU0kwPDdEJShzQV8hPzs/Jm9NOFVOVF1qLlZdPj5IWCNjUF1xT3dQQVdsTi9KSFhzYGw8bDxsb0Ih''@;'; put 'put ''YVplWWxaPHBOfGgpfThReTBnWnZiN3gzeElsK0lIbHh8MXZjcDpXOWY6RG4jNVBdJkNvdnQ6UDFkJnJXPTA0YyFONXpsd3xCNzdHQDsleXd0YU0lOUg7WXV+d11hfUJKdVRSS0d8JSUvQSl3NGJFfT07STdFKU50ciV0KG55NHZJZUNabV9vVlJZQTxpVEgkSTV4ODtdJW9tZlNnRTRlIXRQUmpa''@;'; put 'put ''OEY8aWc9PyE+ZDlKUDhJS0Q7PWlLS0JiVUFgalppaWVXeGIkYFBkI2E/OGw1PFBsbnFHaSNFbXA5V107NmB5OkNpRW8sYk1WZXU+UjAyfCEiaEAwZjgycy8zSCJbZj0xNzN6JTkyQ21scDQxc2Y4V0EzOkVSeXQ8LmZvdiV7bGRCb2xIbFIoLmBtOCplLn0iK3ApSTY7fURmaSUlZ3g3MiMqUiU1''@;'; put 'put ''aWd9fCFUUjBGdnYxc2dFJns4a1ghWjg6M2kzRC9XI3E9bEIhOUhNIjZuUjBGPCZmeEhzWSQmcDFSSWkoM3tRZX1GQExsM0k5V2ZMcFtoe1dzJlVQPEU7dmtKbyFJe148aXRMXzhhYiVDWGtzZmhLPj1qOCNgbFIjX3ZrRGV2KiNYNmlhW0lXKipvTWd9aFIjKj1SbHhnckhsK1BGRWhONG98XSUx''@;'; put 'put ''bVFxSWxDbnVVPHQ3VkI+V0hBbiE2SntYJktZJG5GTWckbFUxQz1EYHx3X25XPSEqT2UrO3ZsX00kSXAseSpebS8zQUtYRTgyWkskKm93XVIuJGBQa0xvODklZnhKV19IPlkxXWhtM3lNZXAjMzBwIzpZVWw+a2FQLjomOmdASjlLOmoka2F4PTFQTm9oIWVdJGlvejt3Kz0xUHppbnosdVpMc3dL''@;'; put 'put ''bDBTYjJOYjE2YjpObDBTYjJOYjE2XVU3ciExaSNPV35Cc3BeWUU0QC51a3lKLHFvVntJKi9TRTE8JWVXTj4pbGJyVmo6V20wU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyNiQvYj9La3JxXj0laFJ1QCVFWWBzK2I6WmQ2NUt+UiRFeWpwcCNDcDQwJjxiOmZyP189Kj0qQyttKipLNkhAdHll''@;'; put 'put ''Jk9TZ11OcSQvYl9hPyg/TTZIKiFTXl93SlZIU0hTVHVKVjtHYUBwJC9iO1k7UU9IMXd4O1NQaTdKQE9zKFUpMyVsWDx5Unh7QFhZLykxRTdJI0AoNzl8NDVrWWwsS34sdWt5SixxMV0xbXl7K2Asaj1QWD4lXXIkKn1raU80YCR+QSg8fTF6bXl7MCw7eE9ZTDwwLyxrdXRXZl1pWHZkZ2ZUNiRw''@;'; put 'put ''XlIkWFpUfWhtSEssXUBrRl1UUHFSYjImPDt3P2tBbz5uZHk7d2N0eWVfWWskaFQvPXI9Z0AlPyMqOlFpVCY8fEllP3pLTXVTOCQiXnlqOk1pMUNmbF5KUmY/TH5CejxycnBwQCh7UXkofFZfRjEqV0M/Z1YvfTt+NGojX3hQRFJGXUVoWnRwMk9vTH07T0owQjQoUHRVWHRweDloMiJdS2k3QjJD''@;'; put 'put ''aCQvaFtDcnc0V145amdRSWZHOUpCP01POUpidF8/QzxkcDo7KkU9RUNBOkFASjUqUEokX1ZCaWkidTZDQyJUIXJQeEY7VDtMX2ErSG4vTyt9XXMhLks/SHkrMztvclp0UFdUWCV6ZlNITEh6cE4yRSx2OUtePldqZyFgL2NzN1hrX28ubHAiVDddUko9KE1yMClmU0hMUGxwSnhGelhie3Q6NH0l''@;'; put 'put ''OTZvbz9ZTGVDOnYyU3d6V0BrdzJTZjIkTDh4JXtidkZmTEdlaUZCakFVcVA7IzRTeWZjaypMfT8/fG5fdWRJUEF6NSVTWlA6KVJnakt3PUpeUUAkaURNNkhPWHplM3Z0Vmc/Sjl5eSptaHNJbz9fQ3o7dzM0WlBbWFNnSUwoKEhMKTciKm0qWlZaUHJCU2cuTHk9ZUVPcGdSano7dzckIlksPXxK''@;'; put 'put ''Xz8lP2BKNkhRYEo5V0crbSJ4TW8+bjFkbkhGZlo/UDc9aE13c00vUlVmTj9QNzt3Q3p5ZTYrSEhBUkd5blgmdFh6UU9MendvWlkrNSJZZVN3ZyQ0SkBydm5nfTkyc00iNVouYTchL2QqaUdzZ1I4NyIqZHk7d3xXWlBwSFQ2Sy4qYU5vZ1JmXSRpcHo7dzFjMjIhWkpIOHc5djtJZVlJanl3dlom''@;'; put 'put ''RzthPCsyT2hMPW5WZDdTQypGRXQxaiolRC8hMzdITUYlTFg8P0IqZVNyNGgqeHc9diJFIWsiTWRCNE9TT3JaYkgvSGhMOHdMMTExUEJ9aDIrL1IkailhJD9QOTJHcCRrYSw9MVBfPyRpe0o2SFVgSjkyRyttLzBNb2ghMjptKnZaTCVSTno9MVA0aiswclgmdDN6O3c0TGdEQTVzQyFGb05nd3Y/''@;'; put 'put ''OUI6T3pnbnQwWGNvYCl4RH5FM1cvUnI2eERpTD9UUWlFdmJGSUcxSXxqX2FKMD5Jb05ZIjFYKXcldEN6QWo7MTFQaGpjd3NNaXdKNSNUOkl8SiV3QDEldFh1VkVYcSx4N3hSa2RvO3g1RG1BQkIyT2ZRQTNpS2JMPl1xbSVVZVEhSzJAJmBwdFJPYkhvTkBUWWl8Sl0kSmRTZElpUU9pPUJfQXFC''@;'; put 'put ''JkI+Ql9BcUImQj5CX0FxQiZCPkJfQXFCJkI+Ql9BcUImQj5CX0FxQiZgXXUhQj41c2ghWX5CIkIiQiJCIkIiQiJCIlk9W3FbUmw7LFtafWI1O197akIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIi''@;'; put 'put ''QiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCImJzP19ZPSJ+YW9yfkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCInR3enxCImZnPn5RZEouRGRNYXZPSDZZMERkTWF2T0g2cyQuYCxqLjh5L3h7NXdXWXVSdGF2T0g2WTBEZE1hdk9I''@;'; put 'put ''NlkwRGRNYXZPRmdNYXZPSDZZMERkTWF2T0g2WTBEZE1hbDxEZE1hdk9INlkwRGRNYXZPSDZZMERkTixhMERkTWF2T0g2WTBEZE1hdk9INlkwRGRNYXZPSDZZMERkTWF2T0g2WTBEZE1hbDxkZyRqfT0oPFp7OTZiWlBVRVpkYSZmbTUzU28jNkhLVHhKdj0xUEUlUWZLb2ghY0AkaWpdJGksK20q''@;'; put 'put ''OVBMOkh+bSFtYVAqanBVZlU2bWFsamh9aG80IW1hbGo9MDorOVA0emdmVE4lIW1hbGo9MG88WyRJamE5VmphOVkmM3pnZlJqPTA6KzlQPyFVSyV5SW4vMDldc3hHTn1WaHEwIm9AMDM/LGRVY1tQMzdvMi5kVWNbUDNfPUwvTTFNI09ZTDw5T31HRiswbzIuZFVjW1AzN28yLmRVY1tQMzdvMi5k''@;'; put 'put ''VWNbUDM3bzIuZFVjW1AzN28yLmRVY1tQMzdvMi5kVWNbUDM3bzIuZFVjW1AzN28yLmRVY1tQMzdvMi5kVWNbUDM3bzIuZFVjW1AzN28yLkdKemUhVndlXmssc0Y5djVnM2htWEtQNiFwMFNnPlRWKTE/YSptNDN3PVRWRyVucU9vP19ScD9fa0AlP0Ficyp6JDouTGF2T0g2WTBEZE1hdk9INlkw''@;'; put 'put ''WD1bcVtSbDssW1p9Z1lMTSsxQ2RNYXZPSDZZMERkTWF2T0g2WTBEZE1hdk9INlkwRGRNYXZPSDZZMERkTWF2T0g2WTBEZE1hdk9INlkwRGRNYXZPSDZZMERkTWF2T0g2ZGcoe0lnNjVLflIkRXlqcHAjQ3A0MCY8YjpmcmdSVHVKWEMlITFHb2dSVkAkaTQrbSorOm0qeno7d01ubjYoRFswJVo+''@;'; put 'put ''TW96JVo+TW96JVo+TW96JVopOjp+RW99VHRhI3ZCMHtxRTYiMSVaPk1veiVaPk1veiVaPk1veiVaPk1veiVaPk1veiVaPk1veiVaPk1veiVaPk1veiVaPk1veiVaPk1vekQodWxNaHttTlJnM11KTyE5bzpQM3Q1blsqWCI1bk1zTko6YTRCeSg/VmFqXkg+JF1IPThpWyg2OnRrbntNV0koWyJ1''@;'; put 'put ''ZElRViUzVzlyRXUpQEQuaTJ4VEpZdjchSyJ7dmFZSnZ4aD11YHUuTzJjfHVgUU1FTG81bmUrLF1LVzEqJV11QjZuLiQ6KjFrWGVrRn5tRTg6JWRAO0RjKHs+Wkx4V11IR3U3blRpZ1tYbH5GIkFUWDlXIW5pe0I9JDQ5eTd2R0RyPEV4MWh8Q1o/RmhYP0ZodD08cTpUKDc3aFNCXSh7RVg8Qksw''@;'; put 'put ''VyY2XSVjSkhESSFBSGpDLjRgMlBEZHQ/SlpGbU9AQXlELERyTHdrbGlTSG11Ij4/ZVMlYDI3dj15VDZwYnMpVTNAPV8yYEJ3NEE8OlMiezRmbmJ+dHlXT2UpdFtyQFdrZTNfaW92eD5UYC4hTXR0ZylxSTNmRkJMT3B0KUhebiMxSjw2ZDVGJiJ0PXY4UnJSdExWcHQ5YklPdytYWHx4PkhAY1JZ''@;'; put 'put ''eWQkNCtCeSokK21fT2l6UUtDeWBaSURIb3BPb0MlJHVBRk1FbXdXIkkhQj1Gej0idUxhRkNYamNUYjwpazRLQ3tRTVZFKXFDYHRHP2dUelgwa2BSXXk1Ujx2RT9wUnNFTE9lOkhXMEVQUHZmcTFeZWd0MlBMcD8zTjUjQyoqUHVjOGZCUFU5V2hGKDR8dHB3fVZ6LnAsUmw4I3lIWlQuKmR7Z1tF''@;'; put 'put ''ajxWLjhXRH5Xd0Q+V2hGVThqQTpQdS44Ry9JLDRQRVlJPl8lVG0pZGlhcEtLW2g5THVXaU9OSFpVODpzZ1FpfnR7NXlNM294WnZIMXdhWU81eFZ7d2FZTzUwY2I3Qz8xVUhaeUJqN2FQJDpBfFFUWFowQmpXd2UrLyEuUiRNeUk6MUo5dzlMfVkxNm01TzkpYzR4Q3k7d3NWWlB6Qks5KWNrJCJZ''@;'; put 'put ''XW0ieEolX1RWdl9kNis4IThQbG5iYmJiLkVsbk5GXmZKLmwuJS90NWw1bTEhL0wzImtBKWcpKllCJkI+Ql9BcUImQj5CX0FxQiZCPkJfQXFCJkI+Ql9BcUImQj5CX0FxQiZCPkJfQXFCJkI+Ql9BcUImQj5CX0FxQiZCPkJfQXFCJkI+Ql9BcUImQj5CX0FxQiZCPkJfQXFCJkI+Ql9BcUImQj5C''@;'; put 'put ''X0FxQiZCPkJfQXFCJkI+Ql9BcUImQj5CX0FxQiZCPkJfQXFCJkI+Ql9BcUImQj5CX0FxQiZRcEImQj5BbkpxQiZCPkJfQXFCJkI+Ql9BcUImQj5CX0FxQiZCPkJfQXFCJkI+Ql9BcUImOD1CX2xyQlVsckBXQXFCJmFQQXFBaEouQXFCJkI+Ql9BcUImQj5CX0FxQiZCPkJfQXFCJkI+Ql9BcUIm''@;'; put 'put ''Qj5CX0FxQiZCPkJfQXFCJkI+Ql9BcUImQj5CX0FxQiZCPkJfQXFCJkI+Ql9BcUImQj5CX0FxQiZCPkJfQXFCJkI+Ql9BcUImQj5CX0FxQiZCPkJfQXFCJkI+Ql9BcUImQj5CX0FxQiZCPkJfQXFCJkI+Ql9BcUImQj5CX0FxdXJjPVpzQztdazY1MSRSVnlHYHltWXxXdXUka0FBbXg0a31RKUU1''@;'; put 'put ''RkpVPSxWUlFDJUNvQWV1K1t3KT1URzVfTSJMUUFnQXVXQUFYTGRaZkw4KEZ1JT1KWjgoSnBWd35fT3hHczY8VjNxZUdTbm04ZGBDeU1DdlovSENTNiIySltxL348d1FeaCoweXVSY115cVs5WD0rV1JfOF9neCFad1JaK2YxJSxjPWwyN3twRkB4Z00lKn5YZSRwSzVUY21ZWlpJcyM1R1g1OmN2''@;'; put 'put ''NUxAb0RseiozPWpeODs4YnB+NVVuNEAhMzVqd0lWXTRvZEdsSkphXXRZV0xQOyRCUTdkM0hHVTY0OyJ9RjxOX2REYDRWeyp5QF5+WXtFVFJGL2YkVUpiRzFGW1shLl43M0VIaFBvbjtMOUQ/dH1GcSUkK2FUKXtiaGJoQlA3d3hFMnhXWXsuL3pHYH5lTHliTitRejhkREBKL1N5QlZHLnZZVVhU''@;'; put 'put ''a3IyI1VySGVMYkU0Lnsybks1X3xCL313TC5APkM7W2huPmw2Zz9gT2Y1PGB0QjE1fWNxKl1aMDxxTWZES2U5c1pAYHA2Um5+dTRKYSt5a0U0aTBOLl5PV0xGNDxZIyNEbnAwU1kmPlgobk1oYmI0IjdKY2x5diM1YzJnVCVZZUszOzJUd2xUPEYifkMlWms+cDAhV0J4VUVeWC9RcFV2eSVGcmA9''@;'; put 'put ''VXJtUEhZOzdVL0lWdTl8OEUvUms2Pl1kVUxRL099Z3VkTjF3PXtBPHtKJkg7aS90LzxQfl1TZzhYUFFyRW5RTC59IyNkPFBCJHd8QGc9b0ZfRklefT1LYk0sInUxXnBxaWUsVGJgZCkiTz44UzNReyM4VihUKTQkUiRVbzN5Q1l9SGR2RV17WXpnenpZOUBnTkFfNDMlaTZePnhTKSNKWF5RK2l7''@;'; put 'put ''bkUmcSRWTnczcCU0JDQxMC5QVUE+dEdqNylfVy5seCJVeTNpKGl5TURpSmBSc002V09RWFR9aE5haUJFQig7MkMqWDd6fmNoY0pzQHQiZWw5KC8vNTlzI04lPExHKmNWNlBtam8iRWpiJWNvR29NPnVJPjA5TjJTVCRzeTR+eWZnVE5ldzFtQywlTFJeajBGeXk2NnRbcS9ZUE90I0F8PkUmVi9U''@;'; put 'put ''K1N+WSQiKVJbSlF2IU15bmQ9ekU2OD80OipIcCVBWGt9WWhrXXx9KXshRGRyfHRiNTFIR1hebjVlbylPWGpIRFc7LCheS0MpPH1bPSIyLil8enlIbm1xQzBQI3F0SChZflRVeDQ4KEJlfStqWTc8I19RTmE2Uk9nbmk6XTB8NCl0dTshSzp3bkBUIUMveXpzXyxRXit5QDwzYFlMIzdSbSx5O3Z5''@;'; put 'put ''LiZSOVZrV1t1NmUrOUh5TSNhODR1MG9bXT5JZGEqd1dZKzVKeWBYd2ZfKn5DIlt5SDM0eihfcDxhOSEzfTQ+OSolODlJR09JZztocEgqfjBuKWE0dlVCS2VETGxNZlhXMUhkfWosWTdJKk5fIXN6KEs5VG08V3R9cWxHUGA3RWopXlcuZmg3dW90QjB0cnk0bmA0PX1jMFM0bkQ7aXtIb0h6O3JB''@;'; put 'put ''c2szIk1qPHp4RiReI2V9czJpclJwTGFwQzEuPztAbHMsNi8oP2NWYEZsS05HfSVbPTA4ZkV+Nk1rZFo9b1k/YTApL0MmJVdaQ3hWXmNRKmduLEspXjcjQytbNiZLRTIxRDFYeihBKVNnT0Fqd2VXflkjOTttfUJQa1A5PHdDcmZxVFVmfHpfRD49MUQ+Yz5hQ2JeKExlN2xtcCZ+UmRdfmlwQEg1''@;'; put 'put ''cWRNeHFUSUhuYEA7eDF3RDlyUX1wJDRSXV1gfl1LJG0lSyJhLGYzUitzRGg4LFhJajgrUjhaN3smNlh2UDc7emx+L09XOTIlXnhaKjhqOnRwMFZ0Q1FrJFAwREp6KFhGXzQ7LC4zSiRzfC84K0xRZ0pnKihwNnZJanRsfSFnLFYjOm1vSFtvK0RvZSlta3Y9UCxeNWhOPDk9Xy5LIms3TnEyInN3''@;'; put 'put ''Tys2S0klWT9RUVJ8VDtja3FJWXp+TVJROn1hI0klNFtAW3VjRFp0bkk4PDkkZ08wTXIjazVYPSU1LCp7RlgweilNNj9tLEFuPTVlcikkUHciOj94MVlrPX5LMFd0enkpc2V8My8wRV56Q2ArLF52Wy8oOzRkRHBzS0NHLH5oSE9BW0kweklfWjkxTVdNI1hRang6Kl5gQi55c2NjUFJtJkBHcHdD''@;'; put 'put ''TnU+N2QzU2wjYFJOZUYsSFpfWi5dZi89fUxoYntgVnk4ZjdocVhbUE9sXXIxcEdFSnAhem1+cGFPPC94VFU+OE1ARCZjVFg8RyI6cE5VIiFINDo7ZHs9SUlvdSttLyN6Yk1IYD9aPlcvZ3dteDcrUFkpdVAsPnZzSnx+NUZGPnUhUGFvP0MzJmNoaFdqIWU4c0FwLypGaj0uTWZKXkFpU21IO1R6''@;'; put 'put ''fGtbNjFfODF7PlVjSHUrW0RgJF1rSW5lZ3YmeF9AciM4OF1ORlN+KVtoRWJ4OSFzb35VUVBzUkshVipzOStiMm10KixHNSNedGtYe2BYNUd9RTViXlg9RyJfNGIwUTpATSZ0Z3k4IjFES0ljWi4heGZ5KXgmJHlKfkhfbj8/KUBheWZFRD1MWD0xInYvbDZ5JSl7MjdKU1ZzTk4jcFo9MUFRW1Qk''@;'; put 'put ''MEY6YHopekwxVm5aKzdMdzJZakB2W098eVI8Ryx0Y3A5NVJIeTk2TDxSWUBQRHlrNDRjTyU3Ok1QQVBDS0UpYiwmc1osZH1GYT84X0NfO2EuanI3Rk0lfUJ1WUJzN2olL3U2dVAxZiJsYH03Il8lbSpAWTleOz80SlBRJHtrLlI8OGY/JTd3O0dfYy9IfmIxWFMxcXdEWjpDTmYzfjx5LkBweStd''@;'; put 'put ''aHxEUntyQzA3Lzl5WHZNc0RaZH06RUBEX3V8QnhDRzMzMW1ZaDYkO2ErW2tNPWBoOXhiTlA9aXZLXXRYIn1xdUJqaiRkdmZyR219RyJ+ITBUdU1HRmhBIzIuW3syOkg6eEAocU4xWGEvUl0zIkZAeSlscVJQdXAmOERvZHpqPypPQk05enhtbkplWkhNN2MpLHU5cT45LHlNbEooTV9oI0EjOVkj''@;'; put 'put ''ejhiVk98aClxN05NQUIoNzpld1hnPFRPK31rUjouTmUre1BdTkkzK2pSe0d7ZzouaCxYWD1Ob25sam9DeVdlJi81eCpHLytCX311VG9hI3krR2xvMlV0ZDB6TD5dSlRNMVlzPzAzNCFebis+dT8/Km45QEhpXm9PUXpde0thT09jNnpdMX0zeTxGaSpwPnFrQE8xWToqaTs4eHtyK2siflAlIVZG''@;'; put 'put ''cWs2NmNWV3ZwWVdeIkBOfUwzZiFhJihsJS49JjwuI3JnQihUP1VbKipJZ0kydmdZbyRnX18kbC96OUNjRnteUTgyQEpoTH1eND1CXiF9MSFBPSlbQURtJGE4e2tfQD9mST1LdzVUdFopZiNybTRYaGxJKCY0fTg0c29JNWRpPkwseEp7XShYfmduXTQhTCVZRyhPeWR9VDUzMG9YPXdidXdiQmZ2''@;'; put 'put ''NGQ2NmxEMFtrVElNRFlGZHc6KC5bRSZvWmdXRDZDbXplW28xdy40P28kYTJ6YS9oQTZHOGl+UFFFQGdsS0JGemFeWmBBbmBaRTg4K10/WlBvYH5mOmhlW1tZSF4oUHc5QG80TXVpNDF8LjpHTjJLWTpUa0AhMUswOzUyPDlKczkqOElURl1jRFV0cHoiQGZ+KzVSJVZDVVNZVip6alM5JCFvfXF8''@;'; put 'put ''Ulh7ZHlGLC5Bd1FVSUE9cTB5fSRqdGtQblArNT8/S0RlRiRZPXZFIylmTEBuW2dRRmR4OjZyfSNYWj4iNHBbcG9EXXNDMkY5U1ArLzdHXWBuPDZUfnQyRFAlWTs9KVhHT2xJRTw/XiZebjxxNCZgZVRsbjJVeHs/cjdYQ3huVzNTcW8rTlRabH47YHxTbm4uX1tlZmRDQSo2NVRQN2ReVUQsK34w''@;'; put 'put ''TFklbTcxQCxSKTt3NW1HfGNSYyNJJDk0YDJgdng3Ujk2JHtwKUgkZyowe1pJXndARiMybCheX2w9fCl9WFI2biFYdkFKKWBzJjJKWysqZCp1ZExBV21uSUN9VSxZcklULDRvPFhtQzBQJDJPMGYmOkV5ZDRiYVJGe180SkZeP0hZcV4id2t0bT5lOSlOUSosRDQqNnZ7N21NTileMUkydjFDZWsw''@;'; put 'put ''VHNAVS8/aVB+PTk0T2M2ckIqM3RhZ0YlUl5KR3EkQXYoXyEpIjAlViE9MTwkV3g6PU97JHk0bjdzdGh7NnZqVyo3V1ElOytSTlY8QEc8YlZ9LCV1SXImcDxQc1E9LiJZayUxVkY5YkUwVSxKbHVTWnBXayFHayljS19NMn1DZVt5dnkpdC4yXSY3RVRkUDtPRHwmcS9iTlpmUW8/dVRPT0V2SFQv''@;'; put 'put ''RCNVRnVQbWFsdmhsfShOWzJdIU9JbDZVOCNnOi9DdzhqO257TH1bVC88WnA/R19bWDA6QkNEajFNKS8jOkB+PlQ8c3VDaGkhaTdOJHtDejpfR3YuXj51XWM/dihIKFMrUSJ4IzBlPTFIU2hbeVp+M0kwMns7PSxsaixCRi9bVWI6aEc5WEt2TF9NbmIvOGMpUXB1Z3ZJJmEwX3ZCbEB0ciNOe3p2''@;'; put 'put ''MGBYe3p0QXNJbyUwRjo9I3tpcGFvTjRUWnB7aTNgPV58U0B9Zz17RTRzfk49L3UwXmQ8Om9CLm5AI3NvNX1xZ2l8LEN9fSxVRSUqOWQ5TllDak1tVSZCT0k7c1YqZlUsR3khJHA+MiE+PHxLNGZrPWlONm8jW2NeYUR6V1I7R3tRKkVFdHd1TntjdTpTYDswS1dISkFNKFU/IV1ebVFDS3ovZH0v''@;'; put 'put ''STJGJV9WOEMsVFV5W1A6SEJLTU50Uj9wUlZJcmpLdnpSOGFUN18lQkpuIiNGUGJqJiVWcGEvSVczOHlSTCw4TVl1aEw5b0BhRTZaLkJkblJ+MigoSj03Si98UihLViYuQ1R7YGNsYVQ2JSwxRGJlIiFTcU1EUS59aSNhPjhoOllpR0NLWj9yak0mUzRScyQrTmkmQFRfOTUwIz87dFBFIjlmO3Zk''@;'; put 'put ''Wiome1tGbiVnfSlZanBnYk9oRF9TV3ovckY9P1loV2NwbHo9ZCJQZiYhbmAwZTVec3M9SUJyV15UfFgqNDZBfSVtQVZ0IlsjSjo8YE5BZmcpZmwxbU8iUjc7IikkT15yI0VzPkt9VjlhU2lMMH5GIX1lQWZBZkpRQnM3W2ZOSH5KdzM1QHk4ZX5POn19WzNyKD9zeHpJbjlocWkuMU5vVV8waiFI''@;'; put 'put ''a1ooQzxlVnR+dihQTll9RiU6WXNqeGs3bWIzbDkweTF0TE1ycUBycDUrRXtbZWllfCxWfT1GbSh4MjBZKCkvJWsjRlFme0xWXU9pQUlzKkluKFBRZDN1Ll4zP0p5JVFCKiVFbUo4I05yNHlCaURtYms3JjNab3p3dT9GQ14+WSVqIVchPWFfdVN2Y0FKKSVzWilTSzkpS3BdVCM8dlAhciYoSFU2''@;'; put 'put ''TEdGZC4vXlc6YSlbIkJpTldGbDNQaiE1fGVOQHY9NGA6JG0payZbSEskKWk1cmM4RjU4LzJALEY2PnBoKlR9M2kvIzo1dG5DaVFidWtWNUIzUUJUbDxpSSFvQChRIX55MTsmfVIkS3l7QiUlZj87VmJVVj97ZlswT31QTEQ3N0VnPT45OGdxeTRfe1J2RkdfJE4mcjMlMzAhM3tMV2NJXmV3Qm5m''@;'; put 'put ''dz15IWlmYCR5ZGkxUzJCMX5SdjluS1VHS0ksKnR1NWsiPVJ+eVBWJSxjKXUkSUl4IkhtJFM5RFRxW2lmcSYiZmB7Pn1eJGJ9eVV5cV9tVTBeLnlpcEN6VDA4R2VLNlQlfkdLYEtXJFVJdHxKcjNQTj5lbytoP2J3PHBWImUhT01paE1pOH1LdXNsc2ZuYTFLZVBOQV5qaFRZVHdicUorKTJqY1o0''@;'; put 'put ''S1c4YEZeYCtxZXMpa1ssbTo6fjUjMTo6WTtjeXFMYnw1RCVuMGFWVnxiZGdPfWkwe2l2PnJJdmp2JXlUZCg0d3MhQTs3LCE4Wzo8OyZ4QzFARGR9STo0dSNwbUZMaTVpS1Z+eV5QXiwmIns4SVg6d3suJHo7NGRnM3BhQHkrdHY8ZWU4e2A2KH0iMzN3VztHMyE1VjtaYVg8L0tCfTN3UD9rRGRO''@;'; put 'put ''LHZmaCI7TTpLXkdzKnZCYk16S1NZeVF0JSpbMCk7TndhOX0zRDhXME49W3p2RElHeXs6SV5ZT05gJCQrUyxDWk1PbyNUSDdtfDpCMGshW3EhXVZfV2s5Jm5YJTRpRnA1MTVnaGNRWkJUfld0Q3FaVlluIVcpTFJ5QUFxVyJKT3J5ZlM4YmAxQVJITypuamdlTk1LREptIVA7U1ZtWDohXmNePlBa''@;'; put 'put ''Tj9bNHE3ckZeRylUWXFONSRQNkdmR2lLPTdwWlZZTSs9OUJ3YTQxTSEoKnpVa2kmcXdGSWhMc2ZPZWxxdzo9U1BHbnReRyIqKkg4W3RHLHFdeyY6UGNqLHF3K1hfaiE2XVZqZWxrJERQYSsmcXc8b0k6N31TMkdNR3Q7VD03OFVJckZOfjZObWElTy9wei5KK0wwVU5zNTc+bUAha2dtL0BHV3Ms''@;'; put 'put ''ek43Wk9sWkY8VVFbPmFZP0Y4djl8LndxdyY1aTxEfWR0M01jTCNJbTJiWlcqWSk9I0UiRjhiSzk/Y2ZXaSJwXkc/a3VuNlc5S3B9QkM1V31xYyJOcGJGfENteXpqXiQ5L112NlhYUis3d1o+aHRUPXkxPTNZaWRZeHY7JjprIyNQa2NHUTspVEdYN05WTT83JXF3e006bkNNLzB+PXxPJCwsTCZM''@;'; put 'put ''IWJLTyF4alMkXld3fkZfZjFGb3RfOEx8V2NuTV5qfFVmP2hNOC8iOCU/LzRmajJFY1NYdU5nQUM1LDs6fTJ6MVJVVTFqUzBWY017NF9wKjUkaTJbKEgzd1JtPENuPXRwbys1N2M3NlMiNiNEYitEMihUR0JAJT9kSkdhNFZkJE1YNUpuZTooPXZXTVJXUF50PVByTm1tYzh9az5lT3YwZ3FlR0N4''@;'; put 'put ''PC5NPnZaXjJ2QGhCRFImP2ZeYWJHbVJKZGArVFEiPnQjVFIhI0ErZjU1XmAqO2QvTExtP1BBdSMjOF1WTyJJKTVNLjMqS0tGWm1rcWV2diVbVyV+RkpbS2ZFYitIV0c9ZlBtSiNKNztWSjFCRiI/N3BnRWpsWik3Q2dwU0BHa2ZjODYzMDNhLyM0ZU5SV2pXQTRlNEQpQjBCdDdibFlYJWkhOFMj''@;'; put 'put ''O0cjcmhaU0IvXXNlUnhiSilGQXpVUUpZJmkqTWIxeWx2aTE2R0pdKCptc0podClnWEdXNzlJKmFmW1Z2RVlQc3g6SHpWNVkpcWVbeG8iQzFgSVNneHBfV3h0JTE3IyFzWS5uNzM/NDtKc2VFUlQ/TzxmT1puYHF0OUkjbTcxUEQkW3ZKSTc6W1svZkRqVzgoU3hDaXA/d2w9I084dnowfnRGdlNt''@;'; put 'put ''O2BqKXAiWls6XmBlTVl0NHZtbH52T1JQejxPemRsWUdYYWw2fFp0UDFqRHgjX0VFPnJlNjJSR0hGUj9hOkZlQGs/JnpbOiN8W1BiQiQiY09iM21MPT15ZltfZi5yVjF9WGUwb2d0L0MoIVs7TD9kaCF4dGx1a1V5bVt2fnl3STNTLFdtKlpYXykobHlDenNNRzBkXkxGNDp3KzpZa15dInp6SU1T''@;'; put 'put ''W048b15QVlAvelokdTpyKUhwbUVbKHBWTDliaHs6fE02WEc1KTkxaWtFIjU4aipjQitGcElMeG4yM2ZoPU5JWDlpQzJSci9qcn14P2pYcVpPOmNjV1llWVU3d0p5Vy5vcSl9ZCs5TVlJXkE7SUhfUFAuOndqdnY2OTcvJHd6d2ouP3phV1hyOl5FMlhWSzpvTXNnVGNdZTtwM25xcyE9PCNiRzs5''@;'; put 'put ''JjtVeXtOPUsqcVR+MEtRM3NSKC5wP1s+ZnIkW1d5O1JyMTI1WyYjeDY/OikjczUySG44WD0vak1uOyNEZXNeJCY/cWpycjl6bU83eDw8NkY5O2ZAIzhdUFYyZlJlLGdXIz40e21LOyxsUnMhN3Q7VH57Llo6YkppckVdQDxwXldXZGwsVWs7UzB7LkgjYV9qPz08QDxtZSp1SWE4bGwyRkc8eDMk''@;'; put 'put ''LiVJSChsYjU7PD08YWxrO0Y7dzdDZF44SDBbI255KjciKnpsSmF8PDAyJTdyckRXTVowbG09cmV5Nzw0M1U4I3w2PE9dITM0OXM7KkZQJmcmbl07NjlnODFebCohKWhrZi5eKlRKIWBLW0Y4aztqRiU6N3B5N1dnKyNfPCw5SHxtJC5iNyR+cjdOUz01VXAwMGV4ZmghIW4zPFIjNDV6JS5ITGcx''@;'; put 'put ''XSFycjxpW3RoVVFjYnVkdmsxTi9QNzIkTyFyS2YqXSU9b2F8PFRaK2w0SE9aX2IrI0Y2KyM3bDZedDpzYUJhKWxPPU1OLGVEcysuMSNQUWtTOFMhZENZLlB+RCxCfipBfX1gQH5dU2VEV0xlVC9tV3dJansiUm9AeV9uXyEkKHguZ0d0LjV7LzFWYFB5eC4/L3IuRCRjPGk2RjNvQjUuOW1qZ2Rn''@;'; put 'put ''RCtTJWImfSZxfWordFM8dG0mOjNUJUNpRFIzNzUjbm9SKlZgYkZHdzsuPT83ImlNUlckT2xzbzZNVjY7WXh5TUE/UjJua2I1WG0hR2ddU0A3KnEic0RUSkFvJmYzcithMTlPeVBvLCtJVjxfQSo6VUhLWF1uTCRKJCpTTDgvOm00OFFmRHwycXhpKVRtfSozXmldMHt6ZFRadHowSVU9Q19UcENh''@;'; put 'put ''L2VHRjM3TTRCSVVjWlUzSkt9eEczODVgN197ezImVj1qZ3k6Nys4cHUkXSEyZFVEZi58TU98JiNXV25CWktbc3tYeSYyQDdLd2M0IiRzdmY/cChSLGZnWytdM353bXpnVz1jZVZTWmlmTDl4c3w1emJDNnwyTmxTdH5+LH14eWpfPn5GYElWKGhrfkYrUEBgfnV8OEoqPl9+fl81UyJzan5WQyhN''@;'; put 'put ''IWxKTEp1UmRLVWl8XXxzV2p+VF90e3NXPH5FfGc9ezsic15+T34zSUF0fnMuflB9UnFMYypnYmA7dVROa1VQQVVgcSp8bm1vTSwwUFlbWUxkY1YxeWQiIWgod0okaGM/IWg1fDEqTGN1KHtvP1F+c31+QX4pW098I3kwQCs8V1ttSGM3Z1lSY2JgfWs2YH1RaFlfe0xjV05uYSw1dCVAMnB4LEQ1''@;'; put 'put ''ZG0pfkNgPjBFdkxFdWZaJlkwNC9lPDgwQD9jN2BSTT41QCkpbnREUUF0T0AvVjMkdC9XZitNLFUwdy5WIlBCYkxpNktZeCgyN2FLcSxjP2ZaVnZIWExfX0UsKGZHTFglVCpCa1pxQ2tLOldJT1d1ZVpLQXZ0ImUkQTZrZkQxemtVJkExWFZCczFsSE0mLmEzcHVTJEtjc0NHemIzcDZPcn5OQEdJ''@;'; put 'put ''TS8jfiY/VmV9cyZ9M3d0Vz5+Ol9nTlZMO349e0FOInNOYDA+Q056dXpBV0wwdUlwTSxHKnQufEVOfVY3NEMxL3BjVUJyfCt9c3BbUnQ5YFV9ezN6IklyeWkoV1tYUz1LZCV5TkJTK3QyLEFifD4uX0Y+S3x1eF8+Qzo8SkAiI01CR1AsaVRaU0p4WncxdWh1W257X1BMfnF6clsiNU1YMEJhfXN8''@;'; put 'put ''LnxDWW5PYShyYV5QOUJWYn4vPVA0NWwwPk1wS0hwQ0orU3hLUUQ8dHoxSCl6S0wvVn0mLHR6ajBEOWB7aGY3Wkd0dnx+VWVfY0w1cFVtN19acHclW147Tj9NTT5LNVYwbjtuXW9PKDE+a29vOSY7Yl9MfDlBLzkvUkMvZjlhJVQlajZnaDZITTY/WTF9YXN4MnB4Q3lecjB9d0t9ez5aSnc7Klda''@;'; put 'put ''U0t4ZGZEdFlwMD05aCIiJDE+OlhBWCxSMXw8fG4oX0hoIUV8YFk2UlYxUkgmeT5bOF8qdT98IzRmSjE+aUhSdmR1dlFzV0RoSF91MzwpcXlEVT1+bSxfP0gmQDU4X1BAfX5TP2J+bm8qZXU9UUdoYyV3ODoxfSRhKFprdjlbbj8iJDE+a0hkPnJ9LiY8Y05QUjchKGBZUDs5eDAlb0ZRMkBaa3Z2''@;'; put 'put ''W0xqR316fV1FPSxPfGU9VkIwPmhFaUpGcEAqMX0yJTZ2Y3lOcSsrLyZfNXcpcFU7ey5rOGByIiRKPTpGNyF4PVZOKlA3SyoxNnZGem9FPStUV1ssZnM5a0d2L1BGJm5YNk8qWlR6XnxFV1RyIW5tbWxvPUpXJEV4bnJ+I182bG1jJG0xMkY/SDFGbmwyTWQhbXtYal5DM0R+QTI/QHB8WDouUVIr''@;'; put 'put ''fTFmKCQ4K0NPR2V6d31hVmhXRSMpQnt7b3QsfWpMUlcxOl9zNEx8bEcqeDYofW5gMEYyJHBpIV95UGh+KUUweTlzJixEP2F2OHxLW15zI3FxOHJ2S1BSfGB1XX0iKEsvemQ2ZkUpXUgkYHJZe30pNFhXcz1mZzsoSEl3X0N2N312ImYoNltQUVZ+QnVzc1t5SiY2OlhJeF9GQzh9QylSKEBoSiZd''@;'; put 'put ''NnZRYV1NeEl9dXY4czYrYyt0X3ZnRn5qZFt+QklYNE1gdUQpfkl4WDRGe0p5aG5ZLzFPK31Kci9RQD96VX58eilmKGVWaG51P3N4KnN2cW5JXnlRZCo/bkksc1dJZm49JjltVUBYSW5+Y3tnX24vdlFEfjBkPX59dn1zJVdxPyh8fEUzc2NVSUwiY2ZuLixuV2JFYDtIPm9WeH1be1koZSJzVyQ/''@;'; put 'put ''Q0hsfnhDdFdGXUA9PH1oUFt+akZJYCN+I2M5c0hZN01HNUBkWFttTH19I1g4c3o7bDF8czw+fX50PUc3N3NmKkJIfXc/UWx8cDIlfjhPJSxPPmhLMV9Idz99bSlffnh1eFtQKkRVPnxeeyV+TUZzV359dWo/fk5VWl1wfHJRWihbcyMkW18oWTdzeHxKTCYqdmQ2dCR0VX1+Z2ZXOnMlLFEsRzc4''@;'; put 'put ''fW07fnNGLEZPOXMvamRuLyIyOzd8cTM7UW5VLGAlMThaNntXLDZ9NX1ILzI9RFVgfHd2Jn5iLk0vWX5BZHt+PzNNcE17clFkc1g4Jj5bXnN4eXxlQnBzeC9JNGhMMUZZPGc5cld+diUsQCxHN0B+UDxNLyN8KUJNNEJ8XyVafEU7PnNsXXxJTmA5Q2xXIm9FYyhHLkNaXmB7aX50UjpRaFNYNCRf''@;'; put 'put ''TjJffjVRWDQ5fTxOIyRBflR9Jn5MUiUsZnpvVlJbbXpTfmB0aldkSitvS35AcDloV29zV3U/d2RqfmcqfXN6LyhVVHw/NmZuKzFmZ1p+e19QNHxAWlpRRys3K11faCN9MWxkK0Q6VFVmfjAlfnNeKjBbW31PVCNoeEMhXjB7R1ApfkVXJSxaMW9WZHwkWmlXdDQyRil3I2d4fFhrWSg6e31zUCow''@;'; put 'put ''Wyt9Zzl7fnY/KSVMfktFMz5kWCMkWWAoWWxXYmMweTJxKzc3XmA+NXM4MlB8bjcyTDdbOnZQfmE0Xn5FMHRXdStqa19+V10uRjZ+PCgqc3A9UUxOdklWY19ddlB+VyEjfkxEaDY1Wy86IXNvZkZjJU16a1N+UE1KTHgwRjd2Omc5ZHwxV29zRlhtVyorWlNnfmFJP1FhNixvaChAIUwvNmA4eHNz''@;'; put 'put ''a25nKFBgP0lCfmlMbSg0SjNGdSlJRnJ+QSFec1k2IVRSe0ZyKj5rakBNI11oNFhfJkkzK1hebkpuY31zNTJ0WHRCWTwueyE3Wyl9KmFsRHp2Rjs8I30ybiNUbUVrRUpGMW90eSRaIy4seE8uU0pYMlFhNi8rWlNufGAsZEZdJmpUbTpZL0QwXTBnYDw/bT91NlUodSRaOFpJcEBmKSNQSWJ7Jmw1''@;'; put 'put ''I0Y6QiNFO2Bmek1UJCpnaThOZk42YGZgOjxkJE81OHJlRVBYa3M7IyV8OEFDO3UuVGs6RCN9NjJuQDghJj03fFN1VTtqa1Yib01PXTVlVi5lOG5wRWEsOHE1a1ZnLCM4UkdmfGpgdzBQfjhEOjFeRmwyVmQuODYpPXhmc0E5WitYNz1jayEjJFhwa2Z9SmhCY2w1fmpdNUgpRzAwJFBkP2w3USJb''@;'; put 'put ''VGw6I0Y2QCM+MXQjUSFja31eaH0xUG1jIltEI0NrJGZHOUFIbFN0ZlY1e2RSVD5QZG9tZnt3fnwpZz03MmxDL05YZWpXYWxZM2dSUE1OOmskNF8vMG81aDAuKlArYytONC5uI25dZmMzPDwxIltHKC8jPiNtMzsqYTgiUng3TXp4OHQ0ZGtWLmdlMFAxZkEjeGJte2s7RV0lakAje3AiITkqLEhG''@;'; put 'put ''ST8jUlp7ZD8scDBhZ15CWSNybSF4YTtvQ083b2VbI15tKyM2LjZ3Km9wI1dnfntxYUo2KWo6JShscmVLOnpdaGxiYVdQL2o3JSMlc299anJnYXAjIyY6TzBVXT5md1JPLjBdKGY2WlZpOHgvRCo4UyRuJnw/PyNoRX5rd0thOTdqJGpyVSNLVlQ6OGN1cjlsQ0olOSNua3AwRSZSX306KWAiY0sl''@;'; put 'put ''eCpoOHhmODlQI0I6NHpqdkRlcm1LYnhdUlpIeHJnXmYuPVJ2eWc9PGNobSo9N2ptUzxOVUZbXWdAI21TWCRja0d8YGR1VTQyZiVDIztZI2VPPVU9VjNVO08kL2ZnWyg7JF5Rb1I4b3ZjJVMqVVZaJDpgaEBCOyVINF5WL1o1RTtqOSFVNnBpN1V5NztsN3xtZzM3bHBhcHlmJUMjPzxTI154OTs+''@;'; put 'put ''W2QzXS5lVVI7cTRyOXwwNGtxPElXZyozbHp7X11RWjBhL0B5ZyNuSiVKOz4wRjtEXXY3Ik85MD9LNW5aJU1ffE8iWWRQYzlOLiMjcUVaUXReVGFVRilsfXl9L2o1SHMqMyRxQV18JDFwN3tZUS9AcFVxXitxVG97bH1KVFskU1haKXEia304P2Y0dCp6cGZ9YVAxfGZYJTd6Inhiej88OilvMiZm''@;'; put 'put ''TGdtZlc1Xmddd21JQTE2P094c2VzO29ebl5pYns9WHBLXkM4c2V9I3hNMioqUXNLI3RrTjYrTHM6bEFyOzxFI1s8d2UkdCtnbjp4MHFsYmVIOGhjbix3MDZVNnhvPDhQSztfLDdQOSlhNn0wQDwmI21kWGhkcn5SZHh3aDJuflIvQiE5Ni89dDpsQn1fSSo/fGoub2xQc2VuSktNSWZFbGA4cyFC''@;'; put 'put ''OlMjPTZhcEFPc3JKay5vbFBdW21tUWVLWis9VSFeZn1Ca0VFUFAkd1ZDbHhPcEVOQ18xTjhjb09SJkxEayU4MXFTOCgjWm8/K1dLXyFmYWpnIyVvQH0hZEszPz1nc1hKNnMjNDIjJXoqTUlBcHcxKkozU2E2aDg0SnJwJmd+PDFIW0VWITZFUT9VMmdxTDp5bzZEMm1Bd1taeGA3M0N4N1JJWmNt''@;'; put 'put ''TGd1eTNmKDhkPzxmKyNBMko4LDprNVB5Q3gvPmUpfmpbZkh4VVA6TGxlR1ArUF9nQiNaeiVdYzpMSiYlU1lkXnRVO2pMc3Y5VC5qOFpAISVqVm1rdClVSzp4QUhgYHg0OSEkOiQ6MG1uNjlVdixdbz07JV07I2BZSXhLOTw2SVc1NnYmP118VFI5NGt8PGwuWVBMTjYuSWYicnFwPyVHXUxsWFlT''@;'; put 'put ''LnRnSSRYent5eThsZm47TixWQFshZm9BdyZrKkNYeiJDd25BV1lPXixUSGxkZkRkWnM0KyM9NlhLYUVUbzpaeWZrSHZOTHs/NzFSP2MzYmxVWzc5b155ZCM+W3M0RCIoRCxwLGQxU0Zmel1aOSRnXThPbDkhJU05bHFwYmU7N3UmRzlmPGthOGU7N0J+Qnh0NHd0TT5iSV4/aTlBT11mOzc8d0Zs''@;'; put 'put ''LiMzQkk6N3RMSkZJfE99dGtlWWFsKls4YG9GODwqVGFjejVjeU12KVhQOk10ZiIhJlldNWVqfSRHJE1JYGF3ZXJtOTl5bUU0M2JSNnpJemd5Yi9lV14jYzFmIltHXVR3WSNrZV5jTDZ+YkYyNys8NlJTWj5SbTxXPjdBc2lnc2Vka2Y6WF0wMkR+PDZgekc4PW9nT0AzOFJ7OGRebjV8L1QjNyZ7''@;'; put 'put ''MGNhVDhxez5bL2V8PH04cFhiOl8vZ09DL201fC9PXTw2XW1ONmlRSWhhbXw/SHx1S2s3QXtibWZbbCpnYSNZLjg+KmJ5TlRyZUdsWjhvbE07Ll1CZ2A8I2lbOk8yMEdgeDlkWDJiaFdhOGpdNUY2S1plalgsbVldNV9kdnhmYE1nIWlBdjgrczBZOihkRSMlMUdnY3pgTjVaLGMoNGJ1TEpSc1Jd''@;'; put 'put ''KWRfOEojaDsmJHYjcyY3ayZwdiNxZX1HPSNSayU4OyFIV0AjWkpbWzw2USFaSG5yfUIxN2kqUiZNYlRPI3QjPGw/YTsyU1FUNjBtMkdtWj1fdlBEQFQhYzlhdWYuRHlGbmVedSYuQ0VNPWpWcUtnNy84R2srbXZhLDxyXisvQ2QiZE15d3BST2s3dTxFNEo6L1UwYVlPX3wqbG81UHM5Yj9VRH1n''@;'; put 'put ''a1VnU3lMXVptKFYwO3ElTmtDY1o4XTw8ZisjSTtDZz03aFVCNEtkM0A/VEEjSGQ/OHI5UWEpNW5dPzM3YlkqVyNLUShwS2VFXWQzOV4xcCZDMzFbTl0lJE8mcHM7djdSYSZ4QHFIZ3FeeCtVOHd5YnpKa09ackVMUXNTdlp8PG9tITl7aXBZdVM9IVQjJmczUzNNS1pQLmo5RnJNNy5lZzgubmg1''@;'; put 'put ''cyF5bWpibzNWUG1mOEA3K3JUb1UvMHAjXVIvcWh3Ti5VbUdxXmNMTkkjZWZJNkRkfmssXWIqY2FMZXZVNWokNjhiKjZ6e0NWRmx0MHg1VzZ8L0M6fU9bLmAwLFpbcUc2fC9PXXxrQF1BcF5jTTZpYG97L3hCMCIwK3E/I2BkUlRBfi94WzhVXmJtPzYwJC5MODtWMCpYQCF3KXUwNlsibjoqWiw5''@;'; put 'put ''SUhrRXxpZWJORUt7WURnN2V0O2x5X0lfYUJiL2pRYGxTWjhXZ1N9UmYrI0Z7cmc2Sz1FT11XTyszYjJDcyIhIl81IyF4S2I4Wn0obUB4enwxZWlOZHVzJEpkPiY1PHttQGFJSnJjPVloRzxTNTR3aC89S1RUbyZWWmo4QjdEL3w4Xjx0cnY5Xm9pOH0vTmwwUy5mN1Fbck9dT0lWSUpyZiFVSjVr''@;'; put 'put ''MFMrVlJyYj16dzcvYXhPLC9bKjM5b216WWlaNVhNN0A9LDxeYC8iWlowYnBtI3hrbjpMX3tpWFdeaXgwJF1FVDgvXmZEU0s9a2RNYW8zfFNFXWZgbCo4XV9JQ1J1a1AjejVxIWsyU0Z2W25LWyMvMGQ7e297OC9jfT9fN3w6WUQkV2J9Wy9lVUJdcm1SJDNKQCNLWjZVaWhDL05YbzNVYX5xfC40''@;'; put 'put ''PEBmKjZUZXM7Q118aTVKIWZuOkBxbkslcDE0Zzg2Yj91QVdQWklhNTBadn5rbEt6XXVTXTxbIzE8JjVKOGs5L1k8bTckNy9NVGNeSmJmPDtgZFAlbFFJRn1tbEk/VWc8W1JmOGZsZT0kOndvdjcvPm5QP2UpPWc3M3l4Njw/IW9sJkNZT2hRaS5BXXg0MzBCN0QvXj50JiJZS31KaEw7NDlJZWdh''@;'; put 'put ''JWVFUCFqbGFXUHYlVS5KWjMmMUNSO0NseXJfYy54Ky5GUDZKOmY+NFs8PFdmOEc4aS8+NkQ6JGJiOn1PO00rZG5jWFo3JWptV0BkJEw6T11pazM6bSN1NFlocCQ9T2NedmZrNGplZ0hVXXcjKHB4IyIwPHdjMmxtXiF4XT9xQlNYWntrfjBkel1mZC44K2xpSnM2LkFhOFpyXl5pMFVBSDskVHdj''@;'; put 'put ''ej40VWgoQHdlQn08ViQpTzM9Zj5MRzh+OCl7VXliO00+UTxDXVFsPiM/eDdwIVVIXWwuUiRuJEI4TTt3WSsjM2dYaEdrV1VyVSwjUiNTK14jYnp1eWllV0o/IUJdbC41Llo7WjN4Zlg8bV57OClpNS4zMGhye290O1ZsKTsmbDsuZiV0PmAqQjhDcEw7bV49NkxkJSY/OC9VbzZfZmBnJVBPJENj''@;'; put 'put ''NG1jNVZQUlo3bG5LWTN1ZE8kNThjbyMlNDJoMFkyKXVzMD8jUiMqOXwvaiFoRTdlS3l2bFg4LjxvbVFlWzpwOz1IO1tMbDwjZ2FBeHVkK1AuUGtZZypbXnxqISM2VURhcDAwaUlQJWVebV9OViQkTzxlLy8obXwucSRBZEtaWiksPVttQE8rZDouanhzLDNIZ0hxXj41KWpyJURyWyNgPDE1Ond4''@;'; put 'put ''XWgvPDE2UkxOazdHayw5dDp3YXJFV1BSZjIjPCFdZjJWdGYkI19mWDYoWXhdJXBEVyt4dmxaMiRIV1B+OC5QSjtCNHMhQ2RdI1kyVTsrZ2gwU3M1MDBtUDgzOj5rN2IvajQ1MF1IPXsuelldNXAkNiZiZXclNls7SXMlXj9eLERsNGxqbTNVPWdeW3cwJEsqOFJUKEpRa3xxfXhEO1kyQ3IqITcr''@;'; put 'put ''emZgQiRbVDFNOzFxNTBZSy4jQjU7PFEjVzNHZ2gwVV0/PHhtTHlzYT9VdmtBY1dmQzRQI0VbdzdAMHRsW1ljKkJOcDhzOykjPSNlM2o5X09YSypvImNnSyo4KGRdO1dsaGs8dDhlJXA+YU42MkgzSkBSRjQ7KWQsfllTOG5mWE5kalosdzBFUCNld1YuZSY/TzI5OzshUGhsVWJlan18YFZ5OWRB''@;'; put 'put ''ciU6ezh8T0s9Tn0uMHwxVm1raXo+bmFHZmJ1LGx+MC46dVVMZ207VGxJWlJdT2ZJI0Y5TTpnOFFhVHt2T05RMWY8ZEE0T2tiazZ4YlR7USpaJGwoSVJkOF18aik7OGYudjwxIVZ6e3VbKzhSIU9GMTZMeS4rfll7dzA7eDc8IX5qTz14bCNlSjYqdVVhIiwpez5bVmdqNEU5YXAyTT4jez0oZ2Bn''@;'; put 'put ''Z1YscEVkXSNGVDpxTEhXUEFjNzlzITAkYTp5bCsjfXIyWUFjUWUucDUjclslbEI2QnIiIXltfjhEOjhiWzBgZzZ4ajtvbW1kMWZJI3wvPWZHWk89RDo0NX58T0tOUXhyJWJaNklwQXFMTW5rLzBkVEosbDM8ZGFqTWVHIzlpelM0UmBdSDxLOnJbMEM0IyRxdGAzcDI4OFQpL2FfVS5oci9FPmAq''@;'; put 'put ''PGs+RnE/I207cmExMmFwdWtZYTQrRmwwYFc2NTA7IXErbXlGMUdJdGZIXSUrSHZaKEo9dnJReSl7Qjs3aiw6Z2UxOH04JWlQNkpZKHh3bjxXc2w+Xl8jZWYiWWxeaGwrI0c5L0Q2eExlWzcmW1YwamxiZUR9Kjhvbl0xZWBFUHpZb0pOLi9rQy9II2k4PyNSI0Y5ezxsVWczQ2MyPDcoSihAcU4u''@;'; put 'put ''VmRaaXBKPzg+ZGsmZCE8Zlg2VTNnYVBZI1VyRFkzWEtDY3g7IUB0cyRKPFt3MDhSe0BJNlMkSDlUbG5kKiN7ZiJqXyozSjtrQi8kWlQ4KWdoMFtIdFVNTl1SS1FNZV5CL01TZ35rSXt5PXYlTjFdZ2pvKkpDOFdpZDxRJWVALGREbCsjUCNePE9rKF0/cSg8bVNDY0NsRyN4NXo1IlYhVlQ9SXc9''@;'; put 'put ''NyMzJi8lXSx4PiNXOHcwSTooZHtQLztsbT5UcHJ3NW5ATTpsOzowUWhIPSEjVzhjXngjP1tUbG1qcDs4OmQ7PlVMUTNdZmNuLzY5eDUqQCRmcWI1eGJwQjdHVng7RiNqbH44aVFwe31UIyM3YnEzInJqXnY3e2ZaWTZVWTN2JmltcVVBT05yIS43KyhPXmllbVRKXVZzS2dAVks6UltuXzx8bW9w''@;'; put 'put ''M3x+NSRYSHNhfVFzcntYMlNzWSNSbm16Tm03NzJiPCNSc1hGdSVeb2FtajRTWnE7TEo7VXw4RzpUb1MlSTw6azYvdXN6YTZOX1tkIWFfKXU4K3g0QzsjJV8xVG97MXJ7UD0rLzU1UCQ2R3VhYGZuZVJJYUUraT9adGEqb3FOQTF1NUplZUV8ZlMkTzI8ZVtbdzBIW0tiVDh5KypMTUJVI08xYlFs''@;'; put 'put ''TXJFTTE7a2o0UCRJPHl1YElgamkmXUBXOX5rfVBuQHxSMElaO1drV3Y6bClmdGFdbjpaV1B1YX5QfTVFWnlQPUB5Z2M5bXtEJiovT11Qejpsal0hb3ttWDYmeDddQGt0YE82cmxmS3VOfjhEUSZsPlopbE9bKjpLelcjTCQ7Z1BvTjd7bXlgcC4sPUZxMzRIZ2JARiplbENuWm1DY1tyUCMpWFlD''@;'; put 'put ''WSNPMXFgRDEiMGJRaDYqQGNpTFR5YEx5TG82a1tyezYvS0dKb2t4TjY7dCNjXkhkOzZEOlVvOlpMZyFWIT1AMyx8eGBoKUUzOGZ8YyJbYXBDQjA3L3IiVkpnWDYjZUtwS2ZueXh4dzBNY080NjAlOGdrSTVJRz40VWhxdm8zMDt+anlsXjg3Qlo4czB1NTUjXzZpcGFnWTVHckxnZi9BczZnLD9d''@;'; put 'put ''SSZbRWROcWxlYXAvajwhPjg6Un5XWSpqbD8malEzME5yWyM2VV1ScW1TZV51THA3NnFyeSl6V21UVHtPXXIkNj56JW5mPGJzeHtJSFNSOzQ5UiN6XkdzTCpCNEN4WV1Je01uU105N2dicmIhXjplbjtibExZPFtfVFhTQzRgZj97Iy9+ZlAlYk9CMVVnOSptcT5uLC9VOH02YWFoZW86eW1xJDxm''@;'; put 'put ''NnZSc107V2xCNGRnciR0aCJRME9yYXBAVGxZKEZ+NXpPLDE2JCM0U2gwT11FNFozWF0xNmQyQU86OFk1ak1NTmYkQTRicFkyZDt4N25xOGJHckJlWDhsbX4we2dXPVRsJmwrI19xQjc8Izh4WXJ8YDprTSlTKlE8O19GWk5zd2FRVmI9KVYkeDQ3M11APH44R1daLnQmOltTVGpwOHg1MFozOlJ0''@;'; put 'put ''Oj8jQzpJV0I0Q3NebERWRn0wJHwvPEs2QGI6KGBMZEpRYj1rY1M4V11sLkx5YkJjRD08RmQqdUt9eWVLXm1xeW1zJF4lUi9maE59STBbSFZeJTFtLjokO0FXUFJmJi85Nz9eJSleVzJrUWV4JjNsVz1RPyVtUVBNbEZzQig7ITo2TGJJTlo4fmtgOE00Pl1uM2d5M0pDN0QvXj9KW2BUYmNzPSs1''@;'; put 'put ''L3dfdWk0PiNpbVZEel5FNCwpTDk0UW5AN2RVUCQvNzAmMUUmfSw1PSszKntFNntwK2AkOi82IlZ3XnhObWtiYUtabCZ9LFpwaS5lLEFrQGYlUzV7O1JIMFA5dTZ5UHYjXm1BIzFZSmdHbCJSOi8kM2JhLmpRWSVsPmwibUEjbmlKZ3plPCVRZnlldzUhVTtrJnBwMTw+RjdDaUpSMl0lViRtdlUs''@;'; put 'put ''Nmc2PlZ6U2M1bD1EJV5pSU0oW3NdLDxxcmxYSllwbjo1dVRycEhHMzthSFBMWEQ4RUZ4LGE1TmhbMzpuQE9MWHo8Uyw4TmNSdWtKS3JGKCFdRWI0emspOl9AS2NDfCRCOTxaKF43Z1EsR1t5PUpTYGNYfkdzcyxlOypFIzJFOjwle2s7REM7UFlCY2YrSmZ5YGhsSUVnZiRpcmx8Y2suUEwub3Re''@;'; put 'put ''WGBTSVlEbiVEMXJbLjZrWVAyKH5faUxzMz5sN3pPJFF7IVhkdmZwaHFjO2hFOWR3K20xJWlnZlMmNWszZjd2R2IhWTZaV2VHSDVYMldgQmg2KF1oS2dUPWFMZTJLIVBPVXJsIzdpMjgwN3Ikd1Y8aWxTKTVRdENAPCtRO09Ze04zNlRhZy5jVktQMXB2OGU3Wj0mRHIhWi5tLl02P3FVMF83MSso''@;'; put 'put ''czlALipJUTMlMSg8YyxhMCYsKHkzJUw4PUI+ODp1SSpqSHJKWUFxYzZPWDFgQXlKdWRqP3A2UVd9OnEqcEwuIltKSHxeISs4Ok9IeyVwNGE0cj1zNzNPZHQmSWE7S14/eD1VSEIqJFNYb2hTKTd5MmRdbiFtJjxlOFNneXhGX2VWUjVUNUdfJlJbSjAyYWlUdzU0TWhtNlNNJD1LYGlPOiRGKFkv''@;'; put 'put ''NVJAdV9mYmltfWJpdy9DU0pTKnYocWJFPGZKWSFRPDZBb3tVdzFLRlFZUT06d2M+NyMhbD9sYlo+TjBFVjNVN2JPP3AsPW9Jc1NeKVEmTmQ3Qkg1JT85dk5aU1huZ2t8bE5jSGFqIjg2IkoyMVg9aGJwO1B9UE1DdUI7Tl1fQ2QlbSNubkNdekRie3UoOlpATlNwdCgxMDY2c2s0bDR2NjRpNT1d''@;'; put 'put ''b3tkXz9EWip1d1lmcDE7XWBxREgsZEFgYlpkJGlRPHNPO05ScixfbmchV1A8e2Y9dilnRDVMNXA9XzVRRFE8cT5vdilFbkhnM3A5bXZGNSxGUmcmVC5ZLmxZV15HPT4lMzcvJE1qZWRXK1hVcTU1UE5MPlQwVihsbFUraE9ybz4sMV0xP25rPTxRalhDIXgleVNEQjouZ1RpPEdrS35KMWxMdSZ5''@;'; put 'put ''VHpBZmw5VChmKSY9SUksbEFjTTxRaz0vJGVveyRVMktJKjBEdyhFVUdHYmRnUEMqOlouSj9URn05Sm1iUjZtWGdQJHxvSVhiYy8vcDJ3fXdbZDRZZmFMcmNTKDYja3JaYHlTeEN7UDdlMG1xfGM+P3g5QEwlLyJFRlpJITdPYC5GWWMpLmJKOXs/SVkoV1FAZTBVcVZjZFh0U3MqdTV9b1FHXTda''@;'; put 'put ''dyxeQn1Delpsd0MhZCk/dkV3N0hOUF87dH4+L253NWdLYjBraXAyS1lLV2w5dmNmVG1jTkgmQD1kUmIvZ0hRcjpqUy5HcD0wdzRrLmlhbFhKbnJfLEVfdGchbkxoVDlmZiwzZCpPMypCWVlOZHM1emlqWjR1fnpyW05MaWY5eCRbcDhKaEZ2Izd0TzptZXpNWlMyUUc4cVRgcG4lNyJNSCVyd2xH''@;'; put 'put ''PDhRTE87c2siWC44QTZdYnRjYVc+cHVUdl06KSM1LDNDR0xFTFlHRnslZklkI2cvaXV+em5wS0hARldZfk82OHAhMldBIUE2JSRyK1B0L2szKmxrSkhJWUdkcXpHX354ODgrXkEzVCE0fX5QPmYkez5LX1FkL289MkprVCs7ZDhyT3ckfkZ7RCRefW9XWypKI0heUGxzZHVufFJEZXdvd0JTY10x''@;'; put 'put ''WFdOVn1sK1VRKGtUWkdHQno8eyY4KCs/NjV6RDxGUyk8Myx2Z3IzMDp0IzU1PlljVjg3OF45czBjcE5zYV86M1d1dFBvODVQMVp7LEQhXShmVmxDclFHazsyTWtUNGk/O3MjX3BCc35OTyU5dDYpcmN0TWtjXmM1PUIqa2ddP1Bac0p4Wj9mUGZsR3k9OWQxeSs+VnJqZ1s1NyoyNjpNUF9kbClX''@;'; put 'put ''Jm52dS9IZHFKeVlwVXc8RVp3LCF4ZiJyQkVpTl9fSFpqYDEoNHJBbVkrL3csYlUsVjlUdzF2LGJ1NTBOSzxdS1kqbHArU2xIVnVKemQ8IW1CSypURjFYJXg/Iz1wU2ZDVCl5eDQvc0UqIiV4LCg7d21mWyRIYHg3WF4xYjxZRHoiekxsKVIqV2AjaHdUfEg5anFXbHhfVlVGfW8kP1VsaXo7QG8x''@;'; put 'put ''eWksdERsVy5PNi5jd0lUbU0lfGNLX0hyUzY1IX1GKj84cDhDTWxRQmFzTDhPS3U5JUgwQCJGc2gqYXpydGxfM15DTEhkaEJzQ3VGc1tRNixwPV52U3UwT1Y9PHVGXkBVT2RubjcySn0/eWM/WkF5KnZNb35HIzp4SUVwKkIxcT57JDwqdnpzMVtYKnc9Vj9wN006Wld1Rnc/U015TFlJWENHSnwi''@;'; put 'put ''ZnFqWFspPz1ZWTBaUy9xPnpPTUFteWVdP2NDQkZqQn1hNiJWdEU8a09uPEw9X0E2bjJsO354VEZ3QH14IVdxWilvPWhnVFQqMkYhNyF2L08wJCg1L1ZXY2s/ZFBkUy8jWkhQL2xKQ3dWRmRZREFJW3I0Jit4bmI5Z3Y+XWA6JF14Uyk1OCEzdiRnUDJfeTp7dVd3V15sbloyem4/WT8kRXMse2pf''@;'; put 'put ''MX1rY0NsbCprLncjbEY1I2hAVC4lYnQkMEBZXVJ7XVIyNDRRRHp0QTtDSEVNKU9AMExzJiYuZ0I7XU4sfk9obT13ek0mezQybiY9WU8lNlZMMChybFRAV311bXBONnZCW2tsZEc2R19FcixDTFJ6ZWNaZWZlYldIR0tYbjt8U2N5PnpPRzJnTFdKcF9GSH1ySl9IJCJnfU5OfXskelk0JEJocUZZ''@;'; put 'put ''WyRbeSxHQTs1TTRLPkQ6Vil4bl5gJGZYRFdLW3hXTHhrS0coeD9wQ1M3Xj4yV3tWUHorQWIpNDlOPCxLfSgyLFEuLEF8SHV1K3FGWUVNLkwlQ0RhK1ZsQUUpOXxxcC9CQXc3LzJCezp9R0huWl5jP0lafjs6V1s0Y3g5LmlUUkIiRTZyNlopNFd3MEdEPXNxNk90dFBYIzkkWiwkSGxdYGc4NTM1''@;'; put 'put ''L2FGZHVoSz5oSDNHWil9dz4vd3toYTFVaF8vOVorQmNsSlhnWG43dUNTfXRhT0VOQlBvRnNMPW1KRikmdT07PzVfRH1dO0ZEODxOLiEmNkZzIlA6Tnk2SyJ0dGw5b0IrLE9DJnI6WjUiTX1iY21heFVeP0dhS319Izp1ZUIyQClZVHttJjZLV2NwKkExM1g2OnphLDU8Zkl5a0VIc3B8fnpYTCRN''@;'; put 'put ''USlwTEkrZUp0PDlZa2h0R1lxVDNMezZ5OW5ERGMyYzVfXSMhMlpSSHg2aUo1P1YpR1VsciJaOyIzN2YiV2U4VGhjI0tTUVdyOT98biFYMT8lI0lwS3lRUiUoOjN7YVh6S2F6OGtGTEZSUUREZmhFZHUxQDszWih5Imc9MVB6UW9XYlBPMnUuZit1cTJNVFp0UUZZKEhObjdfVSt5Imd8UzM1PVNZ''@;'; put 'put ''TD47KzpecHp6Y3IvbHVwa3ZhVXg9Y2RjNl0uPjZlViYvPUZ5KS8/P2cjZSo/S0l1QlR7TEtfdHVid19nUHx1MFp2dz5ga1FUUSlBVjwpJW54TmQsUitNM1ZKbjs6b0E1aDFHbj5LLG9KdDcoJCl6eGlHKSFiYGxJQV5TaHcjaGN7eXcwLz47MFBKRzpXTC9tXVhpPkprTUQoIWJ9MEk3RCxIM0Qo''@;'; put 'put ''SkwiKExfbGhGR0V9R3F4aWM2aTBlRylLVnw8Tl1jVyp2aXJ2bzM0d05LcXkiI20wPDozP25ARnN7cUxOVT5ZXzRIRDZpNCp9ZDhneUxvLywuc20qPG52VFJhUyRNZTYxKyk7c2xZN1k2NnVfT0NnLFRDNVZkfDdRTWFIYF8pJVpPciFGXkVDfmRJV3RUOXFPa0ZTW350OyNKMXR7WSE1SjszWCQl''@;'; put 'put ''SithOy9Me2NoWTxFLik/Vm0kO345KU8uJD05cXxeS182cSNeO3pHYi5ueXtgcntUZC5fUU9fejclfmMrMC90fHxWciVRdE5jKVhqbSVddEk/P2F3PjdRfmJ2JWx2QmMpYil2MndpQSE5I0kpZ052fUVjN0dQQF9gSyJ7cns2NFtGVEFPdD09c3RKSV1HRChjaDExWj9LS2Z7b1RDcloqQz87Ji8/''@;'; put 'put ''eyFTQ1lSSHV1JDh3bjQpKGxoOC9COl06OUghW0tFYjA1Wmt+UHh7b0FFKnlyVjVzJExqIjZLZmhrUnhHZjQ2cFc6MUlNNUp2fH1GUWZdJkR2Q3MpZlArQTsoc281aDVHdVBwWX1qWF5pRStWdHpJJVgkP1A/KH43JkQzYXJoVWpQRTomWTYiQWwqbnN0O2BJX2hKWTlpPzt3Uyh0SSZ8SlBwKypx''@;'; put 'put ''Qld5InwiPFA1Z0dAU2BEc3IlZnxjWDxBPWJgW1hoWXsuSnhaWDl6YTEiI0N+ZkwsLmYsLD1JKXtFS3VJP0xnTzBvZClpS1M8RCxGSEZJOz47XU03UiEmJkQoOmoyIzwpPUslWCRJVSVXJU43WHIlZDpbb3BNeihYJFhYUllgWF5iOmp+T0tVPE4hJlhOMGkrQy5xISFhVHZMR043WGBdQ3JYV0hM''@;'; put 'put ''WW9AbX1OanZfRjByI2F+OUlOSUA6ZWR1I0sqdkBBc3tnZnZyQmc5cCw9Yl0heFA8fHwqUXhFPSRTeS9SPl1Pb3k1fEhsaFI6ejRxQ2dqdzI/PSN6RVVtRiU5MjdkanNAMlJWPTpKZnRMNHQ0cntOLl02XVQzTzs6XjJafF89I30qUU1EZW88aHAsWj9vXywkQmBHKEVRLEZVZGEvKz1qPzw4MV9p''@;'; put 'put ''KGc2UV0/UGE6fER7KkBMY0csMnFoUWQzTHhRQjFZXXhiUVNOWmssRyhbWk5nP01zQH5wdHpnKTFFbGhWOiNVN243UnNwLzZZMm5Eayt8U3NPTz5uZC4+byVtOmEyYltLcz9hLGlxVmJfalhFcD92TCw7KCg5aHd4eyF1T3RuO2ZLdzRwWVR1KXhfUHBbPSZkeDIlUVMiJXlWI3woMXtnRlVYR3xF''@;'; put 'put ''YCM+UGw4aHU/Jm5OWCE4S1U/KCRlWD00ZDg0fXJKazlrKURtUk95JVRqLlUlYCFyckpQPCttJWQybyY9eCF8T1ghLjdAKiZXcUJVb016eipuVXNOaXU3OTNPSlkqP1hYdVpwcVp8eGJSKExrITpRSEhKYyomMlBvenpmJj8maU1IU0tNJjZwXWpGZSJzWUA+RlNWXkRsKXovT1I7T1BEU2A6KDlz''@;'; put 'put ''fHEpe0xeQSUldDpZTEg5QD5GUypiY0pBKTF6Ql9gTXk3TCtuaHAhe2pLQURGZHBBN2FMMkJObHMyJmRQQmlFPX1oUTVTOEhgUTs3TGt5MixFNzlrXTMscjAmQ01IcEBDSjlreHtDR2ovNV4pTnIyJnlZaFJHRHdaQjJHWmNUc2lAV0k5dFloWjp7ZW0vTyFPNW19Wy94amcsJDlbKyRtPFQhRXMl''@;'; put 'put ''K29LVT1jeFYmVTNVKytqZmA/dCVrdTRFRyRmP2ZrOm9dYHAvOnNve3daLzVCRjByRWJYU1tBRFJ6SzZ+T0oxZCpFbGgqR2RWMjdrRTs7VUx5L3RTSCVycHQ3P3trZS5RMiV3ZGV4XkRhMiMuWFhPU1BNNEdoUW43SURAcnIsZmswNipaRkYzOEpFVWNVNjxmOntvMlB0TF53QEpGSUVXMndBMHBm''@;'; put 'put ''clViX1JSUVhYKW4+RUNHRmlZIWdoL0dfdiE+KFdTaTR0InVfVXhbPjsjQj9jKChYSiE0flcofCxiZX5vMiw1PSZfUyNTPEQidzJfRDRqaDp6P3JfY1IsQWN9dEdrISpTNj47PDpDZlsoJXQpWWR1azRsRXl1bWhkOigrTSx7LFs5T1gzTmxiNH0wVGF0amhUUE9NfVVhcV9pL3lQfC4yQSQsVC5h''@;'; put 'put ''cU9yMlFEIjt3eWpgPFl3SnQhVGlWWnMlNn19NXxDPT1yMnpJNnRfRGBYe21LfFlQRWk7JTwybjR7T3JhKGpmb0g1R2EzYm9mTD0jPjh+M0J6NkE+fFVhQjI5IylpUElOU3NEajZabm0oczNYKjA4R2BwPl5PfHI3OjltNFlPdkdaITx3JkV0MkZFNmJMRHEvb2ZoR3hTSTA4eCE9fFtLTEExfm82''@;'; put 'put ''VVdIQDNRY3sheU5ObVcwa2koQyMucU8sUVIpdDdLMUhBcyt7S2tZOS5fJEB4UFhkOz8xcUN4QDZLVkY5LkREQWBSOXhBY3syV2JhTXJoZSpZSWhLPDtoNTtRVnx1WFk6XSVTbCJWbT5jNTUrSm0pU0teflM2ajU+SzppL0xOYl95ejE1PCJJdmxeL289UVZ0VHVqKl5jQUJybzhuTkloWnZQR3pv''@;'; put 'put ''MCpPdlBMLyskeEt0UTFCdHpLcjVEVDwjbWkiYz9heyVlN3dXNzt3RUR9WXt0WlI5bzYuJFJdXkhzNTpORlhwWEp1WTN2aFA1bXY5VTtJPWV6ZjduWUxqZDlHXjN3UCVkUS5QRF9EPlhBVyhjIXpoaD1jUDcuJDovW1Zpcn5ibmM5RzJGT09lNzxdKUp2QD51IkE7Iz1JU0VIWk1WLHxCWjFiXWFA''@;'; put 'put ''bDtBKEIwWUJ4RHZmSlJjWkU0ZHFtPG5PTEM5XSZFRTMzPllJVyxxPzxPTVJbSlIvenE9SCUmOWhvb3FPezJFWkNkODh2fkdRMEVzLmBoWTZRbV9pXTwwLGs1dilaIkZfTW1oMip+PSM6L3QlO156LyhGPX1KcDVhTSQsbjJsJTRxXUdrPUl6bzdzZVI1OHQ7aCFyRngyRSZrZUpXTjsjRTZfWSt5''@;'; put 'put ''XnxLSUNScTg8PTRkM2MjOTJPPExhTnZKfilpfUNNNEh1aFhJTEI/JFsvajhdV0pWZDtqUyg3R3A4UjxFRUs0QTZTOUwwVVN0VmU1RSF3WUosbTdpNDIoN0w1NHNJdXt1ZTI7L25RTWNQMzddWy96OGJLd3U2XmBDPmhydXxkMnpFbjFhU0RxQFRxeihIdEQqJGVXMG5jW0JWZGxgJipAR0JhKWFn''@;'; put 'put ''UClecEgybnNNWjVfMFs1UmdUVGdQWikpYjpEPTNkcm06N1Vsd3RFUmI1d1dJJkU3ZjlKJFpmPyluTEdiZC4+OWUzeFQpcXgqWjhIb2dNN0hOcks+dCRCTmJjTmwsWE0+eD86TVlxUExYdX43PTpJbEd1KVRDXWJkP14+ayMrYXY8Xk9dR11gcXslWn5nblRgLy98IlVAZlVVR3RQe2QqMDtTRGg0''@;'; put 'put ''aj0qX3xYbm92JnU3dE8kbTZEYFJAU081YV1uekIlKzgmWj9tfHxOZl0kV3p3cEFrWENaN11NTyUhW1ZYKzRyS3AhXld7a0xec2FyPVZZV19QPzMqV2FBUSEoLlk6WjBuLkZrSmw2QEwlY1JGVilrbjZaXW9yY1FnSjokMCE/fUV5L29nbEdeM2FsN3R1Z0M+OzIkVEN4Wno/cGNGb1pBTDNgckQk''@;'; put 'put ''a3dXeWZeY2w9ITp4MCIke0xVZG8vXzN6bFJKdGosWG1POlhUKHcoKE1eaUZZTyU5T0heejtDPmJSViwjU3Z1S3dxfWZWRUgjbllCd0MuJCtVSjg1ST5wcDAlSXE/MWJFeX1XIzh5Nns0Rl9ZSDN1TWIiWmd6WWNDQ1Q7c0JRRWRoI1craUElezE0KFZrQFhySz1jSyJTLl5rJDwkPyVYbV03WTJt''@;'; put 'put ''bVd9a0lrdz1uaWU8cTdkSm1FMFIuN3g9QEVXPHxVRn1RYnFaYW99eGIxKzZ1Wz5Oc1NlYk1kaXpzUSlCTyFPXUxvSkskcHVvcVo1aCV0QkZGc1R2JGltUWZofnk1diRPL15uN312ZlFWRTBFWH0xaE82cUNSdGRwOCNddCx+fS5DTGBuLFY0ZEM4UzdJbjBQej1uTWIlWWtqWHRaLkdfeTAvfkkx''@;'; put 'put ''ckcqdnFbWjA6fiVndTApWWBgL25oLF9VaGE8WEgsZFkvYnwhcHszUnl8fHgrVXU5YWFCWjhOQUskPzt+b3hNSixQTHBKS3lwL0tVMHI2Wmg6fktRSXZoaX0uTENBUU89Jl41WHwlbXZhPGN4eSIsc3JhfDV6Qnxwcm1OXzpYI1dqbS9aX1dOeC40SCZAOCFSclhCT1JKaj87TFkzOGI5TkcheG5B''@;'; put 'put ''eWBlc2Z8fnpNdTksaiI7I3hFRk1jPGQjOjN8WHVMbV9yO2M6NzpXQFBHXzsqZH5DLEIqLjY6WHVuUT9HbF83T2MsS0tUdCo0ez17eUUlZ3ZoaEo6fCxqLHpabmM7RVZ6blomPCVlUT5WPCVWN1IiQlZBW1Y9Lz47RHsvdDArYGolZG5FcHFWKWg0cXAvYlReeGF7Il88SDwrT0p0WV9eR11Oe2NZ''@;'; put 'put ''dSlTW2JXQjNmMiIuJiRpWl48L21hKmNNWnkmZXg0fjp3JDU0YiwsLCUzYHdvNUxAY1RhIVI7TCY9MHEkREw6JGhdblZNJVh+Q0Nwd2pkI3cueH5QeFohfnhhNHxlPWxhUktZTmBgOz4sLFpNVWF0KGdrIUt3fCw9OSQxWWthKmhTe1twbkdTK1dOQ1dyKms5WkJkKjlAZzU3MFQyUWZoOC8qW0Zg''@;'; put 'put ''W0l+b0RraXhsP3B+UHg4IzYieWZKOH5XaC5aQWJ9Ijx6TloqM2cifDMscj4xODo2OyZYTiJ2MUN8bnpUOnBCNkokZTo+OyxkRm94dE43cTlELjt1a1N5X0ZRIytqb2Z2Yj47MldvekRyQmBsK2Y4Rkh6ZzxePUxYX2F+byFzdmFRMFsqKDdgWCouP2VMUldtPztiMHZ2cVUwMWVwR1p7Pldzfl09''@;'; put 'put ''IiN1K3BodEZwS1peSjJhWUVYfXlnLEQrTWpyXl4+ZFMmYkIzciNhYkdeUH4kaiRdX0ljO1drOz47LmRQYCtJNzNAW2t5WyxqSHV6YF0kUnp6Imk6aTElKmAsYnBwLkBgaUx0QWZTS29NK2dIYFdLNFhlP2BpXjEpPXh0fXhwJCFEV0J6dWZyP2FNRmQwIX51NlpXRVNJbn5MPjtHe3hDKG43eHQv''@;'; put 'put ''VUxZd1lFI0I/O25qKVpFa1FPYjtjTFMhZUxQdCl4QjQ4R2RCVylAbWM8PyJ9MnFdQ0pZTjcyU0RQOX5XLm5AaiooJDlmT0FWTkhudGxeLnlCV1RsZkV0Mj5aZWVyaEJ6b1E8UEJJd0kxcipZazZdRmA+ezNDRTk0M2Q/emhoWjpKR0R7a0llXT9GOm9pKn0iaTNZajZ5I1o5RCY7dno5YF4xbWgq''@;'; put 'put ''RzlkYnRMN1ZYJnZleSNXbCJpM09oUzgxQnVaXV4mPWBScFUxckVibmdNUGdCPzxDNS9IeUFoRSJmME5wZDtGIUdvXXljKytNZitrQTlAYlRgX0tYcD1sS3F5KCJ5WWhkOjkxNChUdDc1Iyk6V0JUSUA6OzEjMjJTe01WRjpaTTt2MWkoQnN7eWMpMFcqTUV+OiNNalF6N0Y1YD1BYH5ZVzVyISRd''@;'; put 'put ''eysiVlFnUkIqW0xGMDpfWXMqaWw7VjdDKW5VT245ci9CQU4/dis+UF91Zjx1TFFwamI/SzNOUDNIeEI7cGczXVRLRyk+TU8/KXtjVjs9ejk8WGR1bzRBNSlwdWRWWVpCcnZyTmViJnZWL3Z7Oz4vMVNGTnVMMXA3cXs5THlDSntPVHBOQVhnZURMY0twdEBZQ2QsXnh1RjMjQ2NDTz9bT2IhUy9Q''@;'; put 'put ''ZiRGZVRPOWh8Ik9kVW1MXnlwbS8jWE8iNWFLZWUhR3FSV2VKVT8uaH1OQlREYmE3V0ZqZU9AZkJQZFUpWz5naUZOL1cvQFM/KDp5NHQxVVhhMi5kU05VNkk0fF1Gamw3ZipSPEZedlhhLCpIVTVPU0NyM1l6SWZ4fnlURHouOVI4RjNeNjQuRldFNElEaTJvdGEwN1VdflN5Z3EkWEI4WWthRzlg''@;'; put 'put ''dUZmK2RSYlpRMmFkTS98ZVg1ZXpCZU1Te308fCp2NnIvYkw/PzE8IzYjVzV+SjNoMHpYX3AvdFo3WiFTMDRseml9NyJ+XmJMXzdGMzZ2OjBYSktGU3VUcE1wL0Mqd1FlSlUrYmpANzYuWnRKdH1TeSleTUV9ZEpVWUZ5QF1XWTQ9IXlDdH10bCttO0RIZXguRF5aW25NQ2NDdF1XeXpwN34zMDwo''@;'; put 'put ''PWJvWGF2Tik0KTlBRHZiNWlYRHg3bFl6YFd4PysqRTw3RjNQT2Rbbk1iLyRFNXZCREo2cix4cnpbeGRoRENlTVMhfmhYM1dYcll2IVcyVkh7InhXT2d6eV57R1NbZUg4MFAzc2d0O3lUJSRLZmlTOyRYaTxGX1FacE93c2ZpIl1lbEBAVUcwNjtZT01QSmFDKW9seSF3OixQfjcuKytwLkNKOUF3''@;'; put 'put ''V0hiUEtTWl9wRmt4NFhMVShVY0NrTmltXyFvZ3c+JHozYltCQGRKVSFiVTNoS1V2e20hMm1aeiNSPyZkemBiRXYwOGcudH0mXjUrUFQxe3VEdEk5MF4+dXxKODZoWmY5ME59Jl1Nc1l0RXVnI1pIcyU7MzJ+MTYhaFp3NjpiNm9tT205NyFwb3hVYExvVUhbcFg3RlBaTE1bd10uKGlEImpyQT9J''@;'; put 'put ''SWxGKWteK3YmJm9MNXJtb3VBZXguOWBjW3RhY2k4cipfejZHWCYjOGdjektiYE1+VCRDQCokL2RLZllYdm9odDhTb1IzbVVXcmYvTjNqUXsxL0ZRfThFR1Q9QlsoTEQ9fH56aUl5REhxcDV1NndzQlcyYktaTDhGM2NbMy46M3lXOGpeeS94MkYsIyFuREMoMXAqTE5xLDpOc2h1emtIfDZIZzIl''@;'; put 'put ''QDxfN1dAWDlIZn1RZkczT0hUYF5ZIW0rQlopa29KPGcrV2cyN10+NDRSOldqOVNvSjNDLHwie3xHeWNxUjQ3PTxXYTFOYVBqSUJ9XUd2Xzc0NV5sYjUwdVJ4SThGM3V2Y0NNVG1CVjVLbV00cGxkc3hZLjU3ZjB6REBqYjt0M0xBQnAwU2VMLi9DK1o2YGNbJWUhPFMrR2c4QWJsanduSE1neChM''@;'; put 'put ''TjcpOk5zaDJ6Ml14KjlJTD1dOjQpPzFVNmpFdjB3RT11fSZQTjojZ3c7dihOdSovWj9gckNQZUpVfXhUMz9nVXZvTWxCdk52cHp0L1MxWnFvTlo7fDhgXkdFI0h1ImcwQ1cpN2Q5UXt6I0t7cTZifSZLTUNJOFFjfGdZLixfOGlaLkA5NWpiVTNpM0goaSt4LDd4RThsWSJRXyk2QnguczV1LiFi''@;'; put 'put ''SD89IjMhUzZecSNFY2tlfD9MRzhGM1VbMy50ZSEiYD9vSGAiSmtyRjBpJGIhTTwlXU5zaEpHO0cmayJ4biNsc2l9UVRFSF8vRDhZazlPOWA0SFlaMHBsdUdFMDhZWnFCVH0vdFlrKGNZW1dQRFJXbykyXW5ze04/WWtFSmFJdzI6aDRVdkRKLjIlZml8RHo1ZkpndWgpUk0meUlibHU8YmJORlhj''@;'; put 'put ''REw3aFo9Xn56KTlId1IjKjAjKE53UmljZjVhQTxzY3o6RDhaW0NFLDZDc3pdQEJ4NEJBaF1OLDxUVCI4R0lVWT1Bcz86dE48azU3Vlh6YU5lLnVzQjo3UnRSaj5QNz9bOVoyTCpKI313UTJ7U0U4WlsvfEZpTFU9eHFxXVdvOVc9U0oiQy9IaC9AO2xTIj5IZHpEfnZxWn5vTkMvQFBEWS43czFS''@;'; put 'put ''QkJIWT9CbCU8aTJQSGVbO1tvOCNaNTBfXnpIT1QxIjIkNTRFU09pUzt+eDkkb3VnVVlMa3hMWXt+bzB6Ojteeik5Olp3YUUpfSZDUV5eKVBIL1lWeWdafTRrMVJyKm1RYTdxVF4+UGI1MXM4U29zMiNBcndXaW9nUlFuOmlKSSVeSXdJQlAwZjhEX3J2YU1Wa1Y6Omg0b2dOSztARUNNd2wqTThG''@;'; put 'put ''Mz1ZNC5YJDNYT2x8Uk4icywqSFRrMW14SHZdJU1Rb3U0TFVYfUIoXUo4ZEA7U3BkNlFNWkpjaWBrUDJGVTB6PFc7RHpwK1RpU0t1LH11MCxQbVdocDRlOzhxIiw3KlpgbS8qKSJiTnFYdiErQmNmKkR4Pz83NlRjWEAyTWlddHtsNXo7cHZedG4jXXtFTnQyRWRzWGExYmhXdHB0ZjM2UltPUnxT''@;'; put 'put ''QHhEJGo0KmI+RGtaRkdqfGVsQHZmUHFIbDd6NlFjNC5HKDNYLHxwdWs8bU9jb2VmZm8hUVguUih5VW5jKy84ZCVJbHoiVS50PD5FRSI2ciMwRXlGNlQhV2hRS3BxRi9keThTb00yMSFwJGFFfEcubz02SSJQbFldSVUkW21YfG1INzIlL1guTyl1P21FXnFMaE8jTT1YSD9semJOJUJxTThjTThG''@;'; put 'put ''M0NbUXRfNzJKaHB4fCo8OExpPEpncENVbEVFQ0lwTm80QXpTX2suJmssQHFYc2gmeitCOiNGR196RUs2XWJGUG1WM21BQlBlJXB+SVNWY1BNIVg5JTdbZkZvWmozY0VfR01Udl1CRFA7ITdSO2Y4fmRYaXx1PSUjRHhgLlVOdm4lViMuUSNvUW9HMHVmPjJ7dSV8OnpzJTNNPUIjb2MjTE4reiFo''@;'; put 'put ''KFV7JWUha3c3KkU7UjFjL01ZLFJ0ZDMobDxFenVJXURSMXs3XSIsIUJIekw8ZF8wUmwuOD8vbX1XQzViOz9dZHguc2BjW0ZTbi9LR01pfSYlWD5INl5uVTtbaVFNOmp5RlJ6O3tGV29UczF2cT1QLDp1dzxsdFdjWDs6RHk5Wldob3c6XlsmRjNpL3ZtdXFuZHJ9ZVtdQFZvKWVHU1oqK3wiLkYv''@;'; put 'put ''dk9JUDdaV1hqIVNEWU4hUyx+aGFMVF1Tejt+WkI4UyR6dERQL24jQS5UeSNXSCU7fmosY2FtXV1keC41fUZpIXYyInQwcU0/IXciMFFHamkjXnopOVsrRWswVy5nVSFJS3E6ZDRvdFt4aCs1X29NTClSWmZwNil3IjdOO1pfNmBXNmdMLH5Zdkd0JWFdI0Y2cmJ5QG5BZTZvQH1mbV1ATk40LjNe''@;'; put 'put ''Pz1VKVFoLDpONWpAWypTOTR3a0Vud3RUSX1YYmRPYGRsQEJSPW9+I1V7UF00anEiWkV6L285X2t7KlVEOWIwekgpVi9AOyNCeCpFQiVkOEUuPUR9ekg1P2FsKDo2NVlPdkc/ITZJMWNnbS9FT146Y04wWXdZT0clJkVCIm4uRHY6TjB1KFsmOFJ3WUpGLDwqfmY2MVRbPXZMdiNTZVRAeGJvSUAh''@;'; put 'put ''I2JGeypENXl5ZTImYGxFWFBiVkJkNC9kSj9AKjxlIl1MdzRBeTo0fE9yZXtLTjl+ZCVrcX5AbzAxNjVUdzRIYVtdUSNiWzBDMkxJMUJPJHJ6d2w8N1B1PVYkP1MuaXRVOXpncWFyZTBJTDxeRjFmNGUzKGZES2I5cGZsJGZ4SWchUih0P3crcEgieSpPcio6dyZSYDNjazxUVCpGVXVTT2N7dTxm''@;'; put 'put ''dHMkVSF5bzI8Onp4UiVne1E0OndQKXJDTGwkIW17QEQqLEpGK2gmI3hqOitxfH1Ndj1LRFREfE9PI1A3ITE2QkRyKFlXLmlPNkQlcVZJOSMpNlRIYHlFcFlVOk9FSSttRiprbEksJWN+O2BFUj97WUpZMnhTOEk3Rnd4RChbIzhOWj88My9zUHt3PjA6d1soP2MsPk0xbXtMQXR4XSV8S1ZQOikp''@;'; put 'put ''V0gsV2p5YXBoWDU5Xmc7OndfenkvbG5zd0socmM9SkhqaXNWUEhCQFheYDIjdFVVbHFsXkQkZWghfXBRb180elNKLklSOGxJQlI7VSZUTmgzQTQpa3h2Und0Rjk1WjE6d34lKF5+MzxrcloxcXx1dVMjWm0qb25gWE5YL2JDLipEcCx+MTsxOndwX1JQQENDQUlRQlR2QCVZUiprbHNiJnR5WD14''@;'; put 'put ''NVMjJltDfVRILD5mNW9KMWJvPkNEeER6UV43P2IpO058KmQ2WG9LRno7JkZCKz5AMyg7Tl9HcFhrT0ksbXsySFtRK0hnWGUzOmF6ekNNez5eJG4ibVhdVF9RYmRjUjljM0dNU2FvYitETXQvPXU/ZEZHQ2RGNyFzZzZ3TCt5ak0kYDNLXkc1Kz89VCk4SWk+TjUzZi9MQmRUcCRHcTl5e1c8SFNw''@;'; put 'put ''NipjamVqKzdiV2k4STN6WWNPXVFWYFZGTXZzO05TY3hSWWRBQ3ZZNDZzfmAlQEM7TnN5ZmM9dkpza0R9RXo1NUl+SVZwK19MLCJIZWoyLExvRWcxLlgvcXdhQkR1VTJmRFQ+RmNBSToxcjJxd2lkalQ1anRzaCl3STElTU0mbzVVWHVEcFBpKzpjOHB1TkYib2JYN2J5MmB5S1kxbzY7SFRTdTlJ''@;'; put 'put ''cndsXTs3Kjw/OlJ3LD4yVVUzNClAdDFjRkdDUl9RZkBhR0hRWE5PdCNEY2ZeRyJqa3pOb0lGVVpYTDQhJXQ4bjdiOEkofCl0c3deK09iWHpyMUwxNlViaSQwP2pgSGtndmtde01vZ3EhYmQxXy8/RGFTMjZvNFMxK1B7Yzs6WkBtVTl9e1t0MjJ9biU+RkhMaTNeUD1vc1NxN1VRU0E+eEchemNn''@;'; put 'put ''MyhQNygjR2RbOyQqb0RLRmc5SmNdSmhyeVE5anlrbmVqVVNhMHBJV2UwL2I5PXBRQzAobnlJempRdTwzRV5HPkJNKn02MW8vPHUjLmc/djRHXkdKNlk+Kz1rOCpNKzosVD5Fcjk1P0dLMXBYaEo/Ii4ydmkraFBiY0ZHaGR1WnxIKDIxcntVdUF1V3dkemNyTiN1VC9TRkFWKigpRjpBWFc7Tk1h''@;'; put 'put ''bHE3SG8vfCVUd1ZSZkxSRzhVQ2R1WUc2UmxRO3h1QmxoKix7N2JZMD5bU0duems9d0siSXdFS2plXUdhJjFrbTdbS0l1VW42Ij1dTTliL2gibCFQa1EsUUA+ZHEmYXZUO05dUSw1VXp6cSVWM1JKXkZ2TCE7TlFhSkFybSUhJDNqSEZ7OipgWDxOVix7bTZ1WjA+SyhLWy9pRCZXMVVIZTRBUFYo''@;'; put 'put ''WCUyR24oYEZFMkJUcD44LllqLGRYLCRLYEpVeDRIVDA3bHFgdz92Olh2KCtGLyIlYGhxYmAvNDJ5QU5gemZiYyszfTlhdV9YOj4reHFUJjlCViQkNkNFVjpiVisrRFUwUC58Sl0+VlJgQFZbVGJRZmwkc1lNRFk+fn4/d1F+fDN5dUIwblNkR3kwfF1ETzV8Ki9bPldjK0pga35eS1BAeHxzYDlo''@;'; put 'put ''W2NKfS9wZiNyZGE7PmtWJD5oXzB3fDldfHpmcVZVa3wxP2dvMnl0TTxmLyYpOG18an5YVGMrU3huTTd4UTlWOU06RXtMTmYuUEwoWUg2YWxYfSNsbCZ5U3E+RFVJInpUK2Q1XjIjNDZteHQjen05XUNkdFFuTnVWVT4sSTtzNm1xbWJeK2JmNThrPXVRYVRlb2xvYGpGL35OUj8/RnsxOjEqfU0q''@;'; put 'put ''JDR5ZzM2T2tpeEUieix+S3FpQFo2Xk1eIm9XcDNxT2IzbzpKIUN8Tj1YaG5gIXNWbCRVP2owdm46PixobFteNlA6NWtSQndkIXJXfGBqRVdWbFcsYDZQbFd2PWJNLEYpXTQrV09QSVBAKVdsPV9hOCFQTGB1aExRS049eSUyUTJaZlcyd14kMXJgMml3SG9DKl9VPXRSYTxPWyJWKkc4bkNrUnZA''@;'; put 'put ''L3NxRzJ9fjpYN01eWm5EcmZHfiksXzBwI01TLyldKj0ybjcuZSV+UnF+Zi9KWTJ5XyoyUWp9dXY7djN3VXkyKUtiUWImN3k8M209eyp+SVohYDlzbEY8KDNDV1U/SiN9STspNll6dHVMXTFKYysuV0crMF0xUWQzT2o+U0VLc2VmOmQ7UW9VfStydGIlOj9kJE9DL0taUngqTWV9aVRYa2l5MWUr''@;'; put 'put ''XX1ZIVlEUFNMb3hESzgkISMxXkVsMHskKndRPWZMK0d7Y2pQMGMhSG9BSUxtUD1Uc0tsMldZfSNzUCEpIV5SITosc3U2dGNmbk92VlFkK2xvY30oVm17O11aJmteej5Zci4zdSkvZDpPS34lUUh6Y2d+WTJRNmZQTFNQa34wJWxeTDt6X0dNVmZQQE1ONkFKOHV6RGZMUDJ5dyNUPX5WSTtSTkR3''@;'; put 'put ''Olk5c3JEaVNDOG46WThVaHw2OlVBNDJvYzE3X3ldNlBIdUNkOUBtIXp3dn5BWj9MbnxlTTh9SUwpX1A9QjtYXnJDUEAkeWZXVzNCPjxsJFJyK3BJMnkrKFg3e2lmLmNhb3Z6SGFJWXw1ZU8vYi8uPUd7JUxSTlBMXSh5fHZETVBGbF0+dmc4czxBMjd7PHtReUheWmpXZnQxIURIJXxtbUxzTWI0''@;'; put 'put ''fV42YytBciQ3PDxFI0A9QEo1dV5IMnxSQ2VXWkhpdFBxNWlNcDtvezglVVo4eXI4MSY/ZV0rcmEyfnsyZU1pb0I6fDZQL3lfSjBoUkg1eSNHQ1EjO2NfeXxGSFFIXl4mbl5Qc1c8O1hzIXtVUEhLOSprNF1rMUYwZCErSDshRV1EfHx2czszM1tkfmFmfDwkOyFBMFdBXkxMLE4yIXJsJWJvSEc4''@;'; put 'put ''SihIN2dicGk9QT9Sd1tieDJGdmp6RnxfcF1oJUxpQ0huNihfQ354d1VCJElIXVImQVl4Nz1tVGZXTy92UDx5Iz4xW1hKOjQxOn06V2ReZ2lBNEMyTExeNUhgQyQ1Zi41VVJhfWVtUD0yXnR3Yzt1Um1VMUZoR11rPiM/eGpdQX5pS3J5S3txMF4qP3hWPldXKVlXJltiYUpsam5GOVB6RmB5OHtT''@;'; put 'put ''K0hpU1Y4N15+SGlLVkZnfX5ZQzczZngvfklKJnErPC5zNW09QjEycldiT31NdzxlVElEPjJ6e19KI1c8Jnh7ajBGPzg0MX5PTV1CXkUkaFc4ImhnaU0vciJIdFhpOCR4SWk7bXM9O0VoOnRraE1+KiZ2V0U+W3Npdl90eiZuMWUudV9yOT9AQmlvSSpdVFUsRkFnS347RzFIcUd6fi90WlY0OXAo''@;'; put 'put ''X09dJkhkfDNGO1I6fFR8O2N7fHdAMVZXSX50Szh9Q186c0YyMnV6JiU+WjB9KFo+bTE8dUE/ez1tMVV1QT8/JDtRUHlEdFg2bjF5d3YoS2QlYTk0Kmg9OlFkb2Zkc1J7fHd2dDldRn0hZj1CNWx8e0soTEE5NjtRPnRFdDEpTC8sQlVBMGwjJD1rQWZEXjltNikiUWI1Zz1jRW5mQFtUKTd5RjN7''@;'; put 'put ''YGhLUGAoOip+SVNeJl1bKzdXPzg0dX4/bnZgfi4pc0grW0JUWWooYFgpY2NxdTVfdW4xVU4xZSp+JXxAQXdLaihdcj9KO09bflgsJU4sdXQodzUoN3FxbUlgUjhSfC5ScUIzSjY9QTJdaFdecmxzQi8mbkJba19BL2YkZmZkcylgeFNWUDJtJjM6PjRBZlZtNFdXVVlwaW9VTEw+NCZufn1FRSFU''@;'; put 'put ''VzdZJCh6c3NldU8rYjlodVBzcmtfKk8rb0Iudj1DMF9ObH1lKyM6KGNJfH05NEF+eUZIY199M30sdnVbOShKWnJtIjtFVi88dXI7eHZbZ2NdO3NSc1t6OFZXbFY8KTxyPGgyclFgYH1mRF4pI2BVOUtMWjMoX199JEAsdnRDPDJnTntLK0Z4US42PGkiSTNRSD1dKTNgMUsxRnZ9YTtSVGlnN0xU''@;'; put 'put ''bV0pNX4sOyx2S1t5UFBMYzJnTjpHckpbfGJRfn1RP3UpZiohQ0F0O1M+RVp7In4maSpaaV5DLFM8I1ROfE1KI3ZqTV17bWI1P2hOMX1aU2Y6a3tAOX1aO1YyeGYzbnhaekhvYXNhaVQjZSprMWNNeFZDfC9lfjsmSCY/TCNaMU0ofmt+Py5MVGpFaFBpKk9gdE0xLiFjVWkhWHxEd2tAIzVuVHVR''@;'; put 'put ''c2p9S3tCZm8oL2V7WSJ8UmIwJlp4RjQ/L1Y9MSZAOEdkdEB0Wi9ANCJuc0R7NT82R045UVZham5HXTo9P00rZklDYC9CWnNZKktDWVB9MngwMHRPQm1qUnhpN2hySGZfM1o0fThbUV1MKixEPTJyKjx8JVtAXjtuKUA7L2E+XmVxVkRCQW5GSlU4a1twMl4yNjM0VVJeKF1QIWhHaiVhL1ZfRDM9''@;'; put 'put ''VGY3LjRweXdFLkBnLnx9TFYjKzdNVkAmdS8+YXkmR3h5Q2Mmbnd3UFopNVBgQkB5Q09zeVBjKXtkOXc5dX5UdURGbyg2SmIvXzhfOFM2SERgRm9RQDRlS09PcDIxcCV+YXpZZnc9VExMVkhfZ3d7PitzP1p8KFJDTUpJRDRHfSE4VCtWNmdsUng9aVtLPWJ4Ijk8SHhAO0NubEErbkxVUD9kZWdU''@;'; put 'put ''ZVF6UElMWUdBPnZoenBzZlgrQGpweWFjVjIlVjR2I3J6blpvV3dsKS5GSTZjVXFhO1YwRF1AWUBBZyVDK1dsZHl4flYrVHg/PzNWNXFEVFY1UzshZVAlLCxeM1hgcGUlfTQ6YmlMdXdDdWRnQ3VMMjRDN2I/anJ8WUxkSkxNNzpLMzdkMTUhUnY6ZiwyZXxCT2hGW3dfNGQqSFhWfHRodT05YC4r''@;'; put 'put ''Ul5VRlUjO0VCPVY2WishLjtUaU1WckcweyorbnBxRDY7Qk8ld0kxMCImb01jKWc/VT1bNiwsTEZPV1FOWGc8SUB7SjV9MFBiXiw/dnB1TEFYck1AfFhzIXVQRl9HeXNfVkA+RHRlcklTTGRsVDxQPG8/K2d6cWJ+MHBQWGkyNF1NZVEmU0lvSk9HNmd4MURuWUQyWj1xIVArZkU3cVJqK1Z2Wl8/''@;'; put 'put ''RWR0SiJIbkJfczp5ZjF3eHJVTTcje1tRYnhjR1YyJHgrMThIejJZbjwzRn0pRkwzc0ZXI0ZhLHF6Ui9pQGx1WCpeXWNRYFNsXT4+Wzw3W3ltJVRVSzA+KUQqfUdWdlB5OnRofGhsajsxTSUzaXZYVWpQTWJHPmlnbmB1UnNdancqfUVvRTFjVXEiSj5gMTc9dkRbX2s6YTo4RmFAJG5QKnkuNjIx''@;'; put 'put ''M041WGAwdygqVyp9KVFGK0JAM0o7R0BmMi8uOlhAViRrNnJeSjdAV3VzejYoYFclVk4qezJaQ3xAOEd2THxnYT5VdE4kK3olJU4yNiFYX3xMcnxZSiYzPmlIJjo6cl9yMzAwbGE+W2BDQUJ+Wnp2bGtsSDtvU1UsXUlHRE1+UFdBR3hOeChWdiU1clNpW3IofG0+LFk+JXVYXUR0d2x2WFFyYjNx''@;'; put 'put ''XStXfEdZNi9wcTZTOEdXO0JlaWd8d1t5NG0jRC8ufGRsb3NSKk4iM0UyMz4kTCYkPm9eMWY8JmdXTCVMQH48RGlCZ3kjciNrTGAzKktyQ188PXo2TW9GPDVCZUxRelVnT0ovZ1JoYm9GSjlDSElJXXFLcDxjeUM7eUs7MHJwakQ+Q1N2MW4kaGx8P0VoKTt+bFtDLylITSZpSDU9UClaRGVMcDdx''@;'; put 'put ''SzFVQGRaUHJNez1QLi5QNFZePD0pP2Q7SnVZPmJZWVI+TkNEK1U1QVslWV5NZHtHWVRSKE0xYXZKU3NLSHMpM1lzW1FweThVWzoqW1c1VXxsLC5hY2pvKDckb3pUO3hZVm9FWCt1fDczT1FZVVVncHRYfFs1bT5HdHZfL1B8T206dGhTJk0kZnAiTkRbUWArUT56KHx0NncwMHhjZjBNS3k3c1BZ''@;'; put 'put ''KW9wZndzZmMiNEBsV2gsKm0uNyJqITVRZEZFYFlzPzJqLkZ1Y2ddTSZzJCR+JmVyQ3FVejEsejY3P2lPVSltfmBjSkp1bCg+I2pJeXgwdmcjRndLaTNSPzI1NkhndH0rP3d1fF8jQUlMU0oxTD50TntdSTpRQzdabi9iQjZLazNWSlYqXnU/LC5DI2RQTDlAR1pfVSg5fFdCfk9zbG9wVXU4VWRa''@;'; put 'put ''bUQpRnJhMUJfQ3E0Pz4mbjN5NTVnUzFDUWlJQjdGczUod2tqdHMmdDYoLEYpIVd+TTk1KWUqRipWcDR2X1RsfTRUd35veSpBQyozdkkmQHFYWSRBKiIsSkAxWkNzOz5kL1N0QDpfZFZqV0xGcS5GX2ddU0xHYHhRcDxRaHdlfnppK11qcn0lKld7OU0pRmRAfV83USliNm9NWUNFTTl+VUMjVCVu''@;'; put 'put ''fHxFZXF5MixZTH5TO1I9bEkyQn1WJCZuaTF4W1N1PTdZLzhbYGxqWzFNODBySyFEOT8vPnQhQSokWDQxOmNpWGBKOUpoQXhzQXM9bnV7cSp4IjtDeUUrTU1MSmIsSzZlb1U+eTMreCt+QFNqLEF7WWc8JFEvZ0QrX1hUb0FKfnxocX1bIkImTV5lT3spJW02JFpkYGRUU01DbnhsTFdHPCNzNVlI''@;'; put 'put ''VlZGIyxIQ0VbM2Z+T1E7Ml06VndwKF9YcGN5RUYiTW92OjQ7XkwlfkV4Y09yOVpgPkhrfXU/RThNS1A+OjhXOS9ablgkQHs4Q2kzd3VCfDVZYz9WTXZHKEVzL1ArdXRVK3hFV2g4W0wzWlhXOjQqPWBlRCZWUHdse15TeVpMSyp5cSshMTxjNjg0ZDZQcCE7Nj5XMG8odmc+dmdsP0h6XzghYiVM''@;'; put 'put ''UXFxQWR1OCxgYWliMnokTEl0eT9YbCFXL159SEtvOCg3KikjbiV+YWxxQ0N8bmRReyR+PXkwS0BmKSY+WUI2SSNhMUJFfFpZVlZpXjtxdFo2Ji8rU1JPRGkjWX58QiU+TyphPjFRYn5peC4pZSo8JHxWImdFT1MvQisjIztiR0FVfURpZy5namR6XncuWyNuclpLX1VOQnJaMy4oYTchO2NGJFdM''@;'; put 'put ''WGQuezdabFRMQFh6fnlKMVsvZGsoJSp2Xi56M1VDM0V3fFVzdlZ8eWQufTQ8cXRwK1duY1dBdUt4P3krZU5pfDI8bVY/bCM0THkze0lWT1VtYm1rK204JnlWJV8hSWBda0BxdXF+Tyl4eSEuUWssJVFpKGslImh6cT9xMyo8TF5oaFhCKiZ+blVHc3hXPCkxT3BMe1NWfHFoLkxIey9LQUBlUD1K''@;'; put 'put ''dzFrbm9QVDcuLjhDRnA7RXddUlNPdkB0bHopJixUYmt5RHFVP3A2XT4hSzRMdz9NfUdLQiVydUdfKEk3RHhFdGY3JjMpYzxARnZzfX00UnlHJDhiJlNePyVfT2h6WyV9PVE+VyQ+T2E4SFsuTSY3eURwNVltV2tuPl9afm80LC5RY1crdU1RaHtXOG5tfEUpfUYuN0JIV3g1b21FdT5MdTQmeldd''@;'; put 'put ''YCt1SCR0IkFlVmIwSiFDWkRmfGhqXTFXdmowblcuOWArQVU1JGQ1NS57UkdAW186PUlUS340PyMsd2osPilvOSh7Ji9Jez5hPWpgP2RsNFZDUCZaTkVjan5KVkddTyZoSnFmcXV0UWBaYjk8VSxUKjFwKXxTOGxXWVsoQlo7O2wmN3hNfiQ6Si88JUZ8cHcpVC51KjxPKl05RW82Q2skPUo9X1dY''@;'; put 'put ''RnR8RW1gdUtXazpWdkxBJilJVl95bGsza3QmRkcuZHlIZzxlbWJFc2hLJHVFb0hBN15aXT9MMnRaaDticXxCbW01bURjKixWTzp8ZyZQUUt3d3VUanFORX1EeVY0aU4/aGpEYzRGSFJQWlBtW20kcjpVRWIzNW1yI1NDM2ltfSMkY29TWyhRKHNLJCQ8a18uWEk+cCRGKFc+d1pNfS4lUmxoe1Up''@;'; put 'put ''MyJGU11lOkVmSnk2InJqKHJbeiIqJmJTTTtgKi81YHRlWzFFWnRWZSUzTmMoSCFEckozKl9sTGhmVzd3MUh8UEcrVF5NdyhmcSx2UUJefWZIYFA7QHN3S19LWTBgZEoyW0wpMy4qK3QyMzRKLkwyTHZYKHF3aVVSano6cG0sPEw2Mm5+fmBfdC9ZNH5DNTF5ISV3X310L0lJJlkpcjp0TXBsJj03''@;'; put 'put ''eGlAX0s8QkpMSSEpOmdESl9eZCo7ek5qUjJ+NUNNLDRefXBKZS9VYFVjVUAqTmRKPDFMaSx8XzN7fjlecjxAX3I4KmkmSG4oPG8wUSUjbXJdKjtzIVt8alhCJE8vOC9SZDAkaG1VaWcofisjPmpPUHRgMUtAfjR2PmomVF84RmQlWT83Pmp0Q0NyaH1mMShZTGw9eytIS0xsTEh3cWBOQ0B+ZHc+''@;'; put 'put ''ajo3KWgwWXU9NXZ8JHRSb15KTFAxKF8+fTsjXkRmb0hrTElaNiJIbzFdN2dOeDU0PUVoOCpAbFg3bSh6bylzZ3ZaPmc/Ykl8N3I4XzJ2OT97RztpOmBTNX0qU0t7KHg9fWlKRnJpdm1+IUV4Ji9HJHNndlo+UF07b1pjJXhdc1ZzRXFkQF9lPFRDaCgkVmVxYis7PClMOCZOQzR3ZXo+S0pfO2dP''@;'; put 'put ''VnhUV25QcGkhfDNleUZXLFhrZTF8blJnbFBsfmYvSCFHQCJZJFNbfiFFSDxIV19waUpLfjk0Yyp+RW9CYXx9dE97OXV7b1FsXiFHeDdJYGExKiJ4fEM+OSlfMFlNJnpmNHh+MiQxKWFpKG5CP2ZtJlsqbn5XY2p+Zi90czQuaSsjdG1XVUVhdiYhUGIiUE9ARk9LK2dmU1tPajU0TVB3NXIxckhE''@;'; put 'put ''QVgveFBrIl91OEs3di4kV0tVTDBFVTVaem1HVGBxYVVAV1NqRCF+blIyNWsifU0lR1U3bDUlc3hZcmdUVEQvL2pMSXxRJSMlYV4jKk9bNSg2aW1iLmhrbDo0OmMyaWNwNHk7cWQoIlU7ZFVOSzRdcUxRczhtI1UwPHYpbH0xVFBhPTk1XTxRWk1aX1NKX2BPOTN4dndFOnA6cXQsVjUoT0BvLFAk''@;'; put 'put ''VV14IVo3YXZUcDhuVXs3blRwN25Ve0BsVXtyLiNBO3w7PnN+QnQ/c3RuRU9XW2xHcXNCdDRodG5iWnAuN01ffWU/bDFXW2pFVlc7VEs/T0Q3fUxpPX5YRVFxRSleRVp8SCk5fnRJPTlHdXI4Wnx7KDhzc0l9c0d1XkV3X3d0ZX5fUVE0UXUvQ3dfWXRlfltRX3NRdUQwN31ESzFGR3VoNlp8Z2w9''@;'; put 'put ''flh1MFtlfjhDZCs3fS8ub3ouY18icn4seU13Y1Z7Yz9UMjdVJCRjJTQ2LkJ9WTB+Lz5aRVhmUjkpL0JCe3xjPFpkMDBPLDowbWdsY2wzLnc6PzF5UihJQnhTRixFZX1MJFZtbF5qbW01ejUvWTJ4ZVF1a2pqTHkxd3RjcFkrSEFmNWhJckksX29nN2djby8kNGpYeENBSCNSRytaKkg3dzRIdVdF''@;'; put 'put ''OlF5JnZqbiUxZGVVKG81LmxVYyUmVkVaYiVaLjEpVipPSWFVWS57bFRoQ2o8bWRVQjRPNCJWfXI9XnVbaWpKeXR3LmI2Vnh7QTw0aEdyQSwpb0E3ampfK0ROSDAwb2JybnhiamZNTkNpdzhQYmpjTWpJaiYlKmc8aGpNeTtLXm9aL1ouTV51Uix4TG0wSW5OcyEqeCJseGhzYCZJQ2pGeTV3QVR+''@;'; put 'put ''WHhBUXZqaXtHaCthaTBJbkhEUWQ3dzR3MlA8OWkmRykxYDV8IStIMUllaUhFVlNianVKMDF+aEspLEJHSDBvWHJYeFtoSUJCezV7VTVGdXxsemhyc1FeYGkhejksPGVaaEhyMS5dYk96XWxSaCxSSFN5akYsT0siYikrS0tVZGM2PGoyYVIxVGdqJWc8QmoxaUtDYml3SUh0MSlNUk1FczFPIU9D''@;'; put 'put ''KkY4MXMpT0NjIWZ3N2E+YUJRUXZMaVtER2YsKHd7S1JgdX5JKmpOUiZhW2hHQnJJSChAQGBRYCg3Qk92ZndvUHhoWX1bO2gmMypeOzNoRD9hUmB1TkVSaG9gYjEkMX5mT0VzMTxpYnh+UVYoR3tOdmUqcUU1R3YsIlAyKih6cU4yLD4xY1E1Z0Ara29hTjIsPjF3JSJ+IjVdektRejQ5KTUyU01B''@;'; put 'put ''ImFfPyNlW25ITDc4VUIiKyFmPlcjKEZIKFEsQmd3WUxNOlRUflg0RShlRnI2LHZVfCwwWU9kNWxJeVNvMS9sVHlWRSwoNEFtc0VjXSlBOmM0eFRpJjxATi4zZ1N8XWpUTjo/K1F1XzJkeTVTV31NRjVeeztsbmBuW1NweFg5K0w8NHc2YWxfUmBMWGhAVDtyO1NwZjsqZ3BbT0xGej9XQGprL0xg''@;'; put 'put ''fEVKTCR5KF8sfU1zLHZMQDosUld1S3BpNytoUSYzQz94Rn0qTDxpc1VzcT90fFQ6eEYuKktmaXM/clBHJX53TnN4Ul96OE9MVT4zSWRXN15LZlNMOHtjeDJGOCoxZ35obF1tbWUlRlE2PUZYaCEvdkl+bj4udkd+Qz0udjo/UVYyRnteL2FCXW1AMVFQZ0Y9dX4uNHI4Ing5Xn0se199ZUk1cXIv''@;'; put 'put ''dl57XWZ7MF1QVixRaF8hTGI0c29RXSlbX11qSUw+d1YhJn1oZGZucHxhKml8Z3M1Tl0pL19PdjBGIV4vYWVNXSltfStQMn14OnR3TGVabTA0R3hzPVhoVzU4cy8kN1J1Ik9zITdGakt9VGtrSExSIyp5UStfJW0wRnleUiZOTH52VVIkfWVXPFFtQCJdUFdWRnBpaHxOOC52JXtKPkhMZ0Moczxr''@;'; put 'put ''VXhKVUEiPSksQjgsUj40bi5+fS5dKWV9Z1ReKTlfVFEwRlNeUVZhRWdgRj04OXJefC9tWWk7ITlmb1dlVlphV1MhVVIwczlocGlNfn4xcT8lc31nXSElKEF0OjhTMmgmM2ZuMnlaLF16OE1MSnZWITl9TCNdKVF9bWgudlc/ejgxRm4paHF1OD9CZldFOGhaLD88MCR+MWVrSClsfjUoLl5hNTJb''@;'; put 'put ''blk9KkRDUHp6SExEfn14SExzdShfN31pSyx2Rz86LE9XR0NwaVl8M2VvYitPRFlITCN0ViFFSHhGJigrYlo0dF1RVk9XdSJUfC5iaF9ZMHt+Z0ZnI21lJSZCbjFdZjciXWVETURATyV5NylnTndNfDx1Nz9mYSpFKWdOeDVQXzd4cz0lT1lgOXVTMGhdbm9RVGdIQSltflB6cGlUfGphLnZSezxW''@;'; put 'put ''L3Y3KV82aGwwU1UpPHNjX3p9PEosfl5Zalh3bUAhT0IkPEV+NFZ+c1ZdJiwrfmliKWhGfVRrZU1gW00vNkVFUn5zSl19bCt+MCpAOSN+bncqPkg1MFE5elo3fm59JXJnKjFmWH59O1AyNHo1cFhFWEZmTCw1Tn5zIls8Sit+RSpqXyF+W3l0KGZAX2MiPiRSL3VzfjFuN3tzcnRYWmVLbi5rcldp''@;'; put 'put ''T3VgKC9vMXV+TXh0KCF9S1B8fnovbkl1fiZ2dCg/YFBRW35ZP28xYUMjK31sJFhqMC8sIUltYyFUKCpuMUt5NVs8SilzYlkjRShOMU1EY199VEg1LiJaOnhSRSp+cFcpaF18PXt7fiIue31kezxRJTg9Lm5Jc35KcXQoOH1BPWMzP1FgfW9IVS57fnkuIVRyfjZudCg0YHNwQH5IaV9+YVRJViFs''@;'; put 'put ''YlAzcXM0X1QmfGp+X11qfnUpI0UiaTlfUVV9aVBaeEE9fFZtdCg1fis7fXNLW3FQYH5iMj9RXX18LkEuIyRwfjlEOmIofndSKWgpfCVPMn19NTdLcklkW09bOmB1KHdefUZEPnp+ZyppMCo+MUA0SjdLTkM0Lkk5ekY0JSYlSkUkNDJUPX5RUn1sI2YofDdzIWh3L2d5YU5fPiZ+clFdISZ+e1Bl''@;'; put 'put ''WCRQKWgjfG5NIyU/fjUwflM+ODl8UWR7fjlEOX5JZFpbN3FbT3k9S1A4djd8eVh7fkIsezttfmVidCgzfV9Se348K2BlbX5fWnQoUmAuVj9+VXppbi99MHoofjM0MD5LWHMoV2dfMW96aXMpaDpJNUwqPjlaeVFKYGN+ZygqQVhzVVtzfW0uK35DTCo+eHxYTVl9ZSosVVpCfmg4NzVVIWRabSw/''@;'; put 'put ''T1kiWTZ0JH4uSiloQFt9fmdDKn1qa31zQD9Pei9GY1FaS20kTSs6d2M7QmY2K1FZaCgvdHFJV3EmaGZmM2xhck18X3hnKEVNIyZAOTd+Nm5VeEhIbyY/UTd+WT1AOV5+YV5uSX1+YXgzWU5QWF8rW1Z9IiNobnYrV3sycm0oQk1IXypraF9KWVN8cD1SfExIfXNHfkE9aF9kYzE+W11MKCs7e34z''@;'; put 'put ''KlJxcChhWHJXbzo1VU03flMyVT1jLG4uTSNxOCxRaDFfIWhtVTFIXiYwPmh4eztocUEiTXpTfk5JVzFdVUImbV5sUjM2N1JEeiNoZEcjaG1VfH5gXiVhX35Ee31sQXRBfnlYdShyfU5XdShxfX0qfnMuP2c9I34+SCo+b3xuTTV+fFQjUlB8ajRbZEt0cUNrNEFBWzNpWWJWTWFTMy5kUStUPz18''@;'; put 'put ''ek0lTmt4IU0lMzE6UyRPSl5yNn0oeUFBQXQpJFRgT09HQCJHamJORERtX301fXFuQUFCIiVMUmBPT3Y/MUZqYk5EKVRsVjpDUmB+Tk9ASkp5ImV+SClFQlRFVyJkfilCM0xKQF1UNmBwXzRxIkcqbj9kKzcmU0pgNEYldGV5KSF3LnRdV2AvTlJARDdLYzhEVUV+flAiIStXM193TDQuMi8vfDI6''@;'; put 'put ''cVV8Oz5rX0VCKz49flR8dFB+dGRaTHQkTU5tcVlyfnVuQTBEMCxBXWU8TTR9NjVseEJpKUhRd2tJIit0VzNyQSJEKXRQfHpFQit6R1RKNFFaWyQpVjEmKmJzOVBfel5Xc0BsXXtKYyZvTygicEhEX3RIMjtbKkciWypDTkIzfjRDOX4zYzN5QndUO31eZ0J6P0lXQGhKTztfMS92RipNLH1qNEB+''@;'; put 'put ''NX0seVBfT3x+TUdFeC8kTWVqcVkpfiUjeG45Xm1sfFdwYiM3Y2JBPGVDY1t4O3VpIjshQTtFPVdibFhQUiQybXA9eTguWFBabUFISmxAXmF2W35+V1hQWlE/WVtoNGB+WCpTfEgsYlZWRFczbDJYNXhNOz5Ne3BbIlU0Y1BAQ1hhOlpsM01RJT94WF0wZHNzI3pDKjs2MTYiWlBsNzZ6Mm0kPEAy''@;'; put 'put ''OSk1MjYkU1dXN1BSbmVkZ0pMTG5qKl5ybXNzWUlZaEd4azFabk4maDc2P3tsfWo0fjl2PX1RP2lvaV1QYjdLV2opWHAxP2MzUmRbOW1RKy5JI0gjUT5NMEJ3V3ZvaylgU3xEVEs7bnJ7QGVtemt+STRMNGBQMjVqRXQsKj5SPSJQaEA2ViVbSnAvcytYLHMvJElLPnl5RG4xQk9ATF1+fWwpKzFx''@;'; put 'put ''Ti8haCFwcntIeWV5bT9jW2w0XzdtQDFVN1tEN2k/KEpscnA9bHhuSVU9bD44PHIrSV5TbjwpOUd0XjZiKWpRbiN6fEB1PmVWY0NvbDdLdE00LjAlI2wmPz0pPWxXJCUjZXloaWRbLGc9U2had3FKdXd+ZnkrcUxrRjRSLHxrKTBGYH58X31rKFZyJEhZVkhbcUpSfltxTS5BdFVdPDtFaD5QMH5F''@;'; put 'put ''TCh9Jj9fOyFYKjlrfnF9VGptfUpXKVtSe1UlWG9QfkY0NH4xbnRnODRiU3A4NzckVVdIR0xOYmZ8SjFIbXMpdE9dTFlwOl9RTEApbG45MCk2PnkpYkQhdzYvVnAzQUpFIzdrQ3l6dU81NV1WYG44UXc/QkhwaVFURGozfEQ4LiFdbSpNKUJFRlc6aT8uLlJWcFd3ZmJVdj5nNWV1JTM1KkdHQ05w''@;'; put 'put ''W1ApQik5ZjVOVVlUcFpsWVpweWNIQ1VPfHxaJSFTNE1iSzNvZTJHeGd0NDNQR15zWXg3KnImcmYqWUBxYzd5MG9nSiV6NmQibGNULk5ST0xjYjAreFVPSmdnXjE6aEZTdytsWTw9e3l8TUdIKU4zb3NuQ0ozJlhPLmw2Nnc9MTYlSXJjZjJOTUZMKFosV1UqWklJIWhTdkpFUyV8WHA2eStTSCt4''@;'; put 'put ''SWkka1UkNGlNUHlGaDEpNU4qOnIzIWlFTTpTc09IMSgoIWNFazcoaTVxJHAxcVJgLkViPWkuTjw6ZUpBJkZuQnhfaUA+aE1KTF4+I1pUT29KIVB2YyVHeT1oMCZnQW1hXy5HbkFudSVTK2dbIjs8VER1TiF4UiE4eUZpZ0owPSlPKTRpRER4Im1lSmEvPlc/YSYlRywyP1F1NEpjeCVuc1B2NzhG''@;'; put 'put ''JmwjfWZDI1FtZSo0eGZzayRsQzBhT3w/SW5QdiI7ZSskfTdCTmlSR3tafX57a2Y9LG13blQ2aG5Od2w+cFlFI0BvZX08eDI+QTAoeTU3M1JsMVdbYVBRISt4LkYqc0gqZF9tVWxhRHBUWlV4O15MKTBRdkdhRmcoNnVRfG1TQ0tkVWhadShUXmZJe3Eva1ZtZz0zKD56QlYzWEpEK35XPHNIYDlt''@;'; put 'put ''NSNJMyJKTGgjaW1nYDdSYGB0cTIrOVAybGRzd0g5OUl9Jkk8STlCQyFseD1rYm5WJXN9T3djfD9lKEopTHJiU1liIywobGNjbn4raFowI3IhRFVNa1tWe1pWZ1piV3xwSzt5bXhDP1goMWVzdyVuUUxwLjhUSEJXRmVNeytsT1V9OVFyOlsqb0wyPmAmSFYzSWxFL3VKfVQuXn1nNnclMmFCIjh8''@;'; put 'put ''VkYqaDBRZWpJKTtWU1kvQU82NSpQLGdkJjRGVGhYQn44YmpLdSZXOz57UVY7K3U5QWdLX0sjNTR+cT9QYXx1KjYmKSFyQ340KWE4Qyh9QS5pKG1bYXMhLGVzZzY8RV1GOFMoIUBQJlVpVF94O3VrSFFPIj5CeSJMTUNLTUVnLk0vTTgkKT1GTWdsVSk3c2BfbzAuQDNCcE1HPEh2Z3MqYUByQjd2''@;'; put 'put ''Klc7S0dsY1lEM2Q8LjFrJnt+SSMhRFB6U0tVQnZeR30jOXhifjIyUGk+dzIrdmJPNFUrQ3NhRTxDfWMiZU4qUTB5bjNrVlgjc2EwVDIrWUoiaXp2YndpPWFJLlczdHc3bkdKLjcjV2lnSHtRJEZpdEM/cDp1KH1jZWB2NUlHSkk0ZHxgOS9GMjZ9Pns4al4hX0F6X30uT0N9TnhRd0BERTJhfUJD''@;'; put 'put ''aEUrQnQpX313dFcoc0piX0tEZWc6flsjXyprR0E7IV56czkiT0omLy51OlFFTjJ9V2JZXXI0WDRwdWVnTXRFQlpKbHx3QmUoXVg6KjEvNy5RZHA/Niw0UUYsMnk4fklsZl9iUlF4NXw1MjltVD8pSmlGd1MrPC59UnVYKHs7OXh9fjNAYmxdKEl3SkowRSl8UFRDRlt1OyolOTVEbEooSzFsSV86''@;'; put 'put ''LGJEbjkrXTlPZjpIJkRIQ08mXjx+M31Zfjc8LDxfMT17QWcldyVHayhWdW5CcTEhQ0ZEfkk9Pjh0OigzTDR+Kl8wNU1jd0oqNjhzLGRISnN8VjRxKzV+QkskUmx0VipEJClFR0ZQcXZQN2sjRGl+bEk4PiRMYzRELDpBc1dgMDh+S1ZMbWllZHMlfDQ+bGdUN0JkRylEKSZzVEVSSlV6RS44NWld''@;'; put 'put ''I29UYndKcmtQKDhCY19OWFQ3dUdCdTRsdUAsQEM7OEViMm9XaUJSYnBKWnF3UkRnS0A9WlI1MT9sTkRxPHRRM3JVO0xYV1M2cmJbQmYodE9dXipDez5AMUx+ZyZzTDMhYWRhI11zdHs2Jkl+M3RfUDR6d2NoXz1DYFtTTip1MVEiTEYpQ1RaTiVGIyRSKD91Y0pBJTxDeWtFM2ZPUXFoUkEpL2Js''@;'; put 'put ''X3RDKlhfNGc7cix0L0IqZShwY3MpUUNFYyNmSSYkTExtL0pWfEI2ZHNJWjFTJmM1Qytvfn1yd3dPblhRVGVXaClPcUUwOE0oZlZ0cmNMfC5wUzpbKllSZihEfWVnbUwyZF5QfD5sMlV8In5APXhjYT9vV045c0U/WyNtIm8pRFIqby5rNzhjNnFpWChnXmt6enw4anJSekRRKktGfk5UWm1Tc1JB''@;'; put 'put ''YEhmKTllSjdKNUYpQlRtTUU8Zm4jPndQV2l8ISwsMz84JFVhcDA/NDdYMjQlfVZOVy9rKT56UERwTD5+R3pzfE9OSDVHYXB8dHE2Q3pffn5ZTnZzaDprbTg2QXRxQGJuJDRqWFM9SyN1SmdpeEcvJngqMEQrYztXRV5GUFQjazV+cXpiPHlZLFMqPC4lXzApYWB7dUZeWlpZMFB2LDpjXz4iN04k''@;'; put 'put ''dzl2dWo6PiUmIz89bkx9MTJHQHYkUUk8JTB3NX49ajtDRzFoL2JPXjFfaWhsPFZvdXJ+NHtodUpZR3p0KmtXa2wkLyRKclM2ZSIvI2YvQj0kSUBBYCJZIlRQUzM+U1Y4VH1UZkpsR009UFFec2xHfWQpNlV8ZVdZdjdUSThyZj9pX3t6dyZ9YHpwYiU0LCRoX10kZVR1NksscEIpX0FSZyhTQn5j''@;'; put 'put ''PjRKTn5dPXZzIjZqRV9HU2Rebk9gY1tkTE5CZlgxdUkmel1QNFByeTxjYkZxKTg+d0JjYjZTS1swUkBgLGNqWDJjSV1sfkFFaEZzczRGMCMyRnxyPTlZYmVHWE5pb3FoczYlSXshP0dneiRzS31SVTV1K3pyKmtXO0FCW2xzOWEiNUdDKHdyKGJTaHpRYjw2XXBNQlooOE5ZUS94TERGY0ZOSFZ5''@;'; put 'put ''X3BGTm1ifiJjVyhtcCFTSCpeRyMkPC5yTW86K1VTdD9zUSFibj5jakNLbyh5cmNle1BrdFopRilQOnNWbTkkTGkvTFtQXzxDWGE4bnQiSjheOXgkfCopeGNjUHRNTSo3c0pWQSlRV3hfdGFZcmZqREE+LyhhZUN3JVk6OD5gJWVHbHR3dXtyI25VZCMrek5rNERHWUNvcyhBLjVzKWJrSG9SRkpZ''@;'; put 'put ''e1pLbSF4U0cyPmV6Lyl4eys1N3NycmxYWjUvdHl+PzFyJCZHLFE4NVReaT83SD9GKERQfEt9JGBFNn40MUZsKD9bZF8/VFg8NEMjaE1SL1hUO29ffmg3UlMrfXl1R1FmNzFFPiVBLHQxOW5TMCliKVl3JTgyXW9zIl4uI1djOmBsYUFycGAqaVVJdWlnbWkofnxlK3JQPnhXPytSJkYoQUspKkZf''@;'; put 'put ''MTkvJlhTNCpMQ0I6fWdvQ1N3fWBJLmhDVHpadH5oTzVMdDpSSlc2ci5WLyZYTSNmNFREOXN8W2VfKmNwTFlCemRIVmwwQ25kVlc6U2lQYHhhR3dQcSMxaXlYP34ycmM5fipMcjU9RmVMIz54Y24uS2FWaiEiN3MsT2Rfalp0OlA9RzdbVzN5UFUuYkJrInlwU256bzd1TT1pIiVQKTlQSDRQQmVz''@;'; put 'put ''e3VSXjBIXnxgWTw8PSpAcENPNFtnZHd3YypIXWVePXslP0FgNSp+USxSKD5VSlUpKXpZaXxlLihleHIhSll0PzhzTmBgeVhEVk9FUDtzdExIMmN8fjhZfnUkaVdCM312bVNPNUxSMkUrfWpKXWE2eUUySGN2dmY9UT5BfX1xX192dyR9aU1USjdZTzhKNFs+Mn1dVEg6V0RpeVlsP1tIQGdZOGRo''@;'; put 'put ''Wk9MZSk4JHtGUkxpdCt7WTEqfCliSHtiM1B0anN4PDM3Y2N4QzEoXTZqUyoodWJURE44Xy59JCZTRzxiey40M2QrQyFQU2BSNyRZJCFjI1lOdWRhTFYqeHBnb3sxd1JRXXVJXUMmfSliNl9IMmo/ZHghWilOTiFuYU9dOVQlW2s4NHh6fUU3LGJtdSh9PDIwM350THV7PkJpOH1mMSFjK1JKKU9M''@;'; put 'put ''ck40LCFzOE5XWH0pfEVxOCF4WiIoI3MjcmBKMjRPLlIifk18b05hK2VPRUBYcV5qQTwrKyZ9S0V1aHxXJipuSTRgVFldTXVhbVlpcyVlOCRyQHVoWCpOX2VUYSg4WixbX2NFXm0xOkZeRV12fDU+aDBfeXZ7fXp4KGNjWUZXOWgyOmw+LHheJXM1UCgrOl94TXdQREVhTn1nTmMoVm1tLj1xZz1B''@;'; put 'put ''KXwuZilvYkhleztKL1E9ek86JXppPnNnTzMvXkJOJmZrNVp9YG96S2UoQy5MfVVjdGEqc3cxRV58W0F5L01QSWBPfGxtS1ElTUMsQSlyTWYyPnlLOjp9L3c6SzV9UUt3L1VVKz9tKF9oJXQ4enMlI1pBIyNJYWlnWnspc34mezt3Z1Mzd1l0JHNYdH4xZn5DMDt5fUdOYT9+dUlBKlNibVk7JDBF''@;'; put 'put ''MXN2RXBafUlpVUs0ZHg4JGh0azNdOiJ5TGMofnA/VyFATEh3eFtTQDE+YDUrMntjRjcjPksjPUVpPFFnU1dRPC8mdXUsISNMV0BZMXF8a2JYMDIyQj9rc3VwZG5MNlVhQiJ1cjcqdUBFRFIwcnl8Y0Q9UGg+YUV+Rjtdb2BTbHQ3PEldS2RZRjpDMFBFMyZMYDFufHFKWUlHRGB2T2p5dSVrU2pw''@;'; put 'put ''fnwsW0RpTSE+ITU1UDFobUBeRU5KXyJ6LzxQJHRgRDJ9Q3xkZ35Ednc2XWV5dVlFOlFfSnFDISt4Q1ZITDg6O0ojKC5FZW1WLnZRKV9gUz42Rl5zWSV9dFBbSld6UkMyYm5QVXMoenFOY1Y0cUsrSSsoeiReQFQrUik/OnlxTmBhPDZ2aikxPk4jKWZIJC9VaXNaQ1lqQkNpUVdoPVBgaCttTDR0''@;'; put 'put ''K0NiKTVZYVdKTFB2O31KYHJJdXVIejdpKTJZOGguVWYraUchNiplQkVSOGVnKTloI2xJbVBvMyhbR2lEPXlgRipYfGpGS0ErdHE5TzFMeysqMnZ2I3JxbnQrd3oiTDlEQEw8aSlhbSg+ZV9zPn4lKnlnZE9dK0ZTIVA0NmxwRj1oVjUhLyw3Lj5VM2RnVWhvbSFBJGpWLHFyaWZ3PlR0TzlPV3Z3''@;'; put 'put ''KV5QTkNHXmNxLj5XaTMvJmFHbksuOlJVLzgoWGBgYlljNG99RSZUeT9sKndHS25jMmtjS3VMQ09mLGhGLCN6aU5bYUM8IS99dDRla1A2OSErQHd0Q2J4UTRLdTQzbkVgVGBoUmw1ZVk7Kl5SdjN8MmNuTGQrWThdeSFzbXhyYHJqVC41Mlk/TFhSZyUqdFBgOV9JSltpKjlHdmNITlNsSWU3M1o3''@;'; put 'put ''ayopR0dIMChyTDVXSFBTU2JeRVZON3c0bT47Ji5Kd2AhbzQrN0YwZFJSI2JDX094MHZMYXRjJU5SaEclSTVgTkAveyY1TjtiODgvfEZTcWp+dG9hSlZzbk4uJjIkSFJhO3AwMjFGQjI4VlN5SGY6TUJqeVpOLmRFI3YpSWQ/Q3orbTA9X1FXKl0qZU1PdjZXXWxrOnpEKmgveVRDfEV2ZEc0fU1d''@;'; put 'put ''NjMzSSUwP0l6djA1dWdAVDJQT3Z0Q0M/cHVFN3x+SV0mQlJeU04xWEcsIV0sTkcxYUxCMGZjMXlUemJyZik1OClJU0xBSUtadHJoNFgxODtyc29xamMudExCeUovPjJwSThaZ1VyeTAudDxLeWZCanxDQzBwaiZGMkpAUVo7MXZARU1FNSg6TiN+SkBYXzJ3WV86R0Ahb1FrZFU5LEEpdEM1WnNj''@;'; put 'put ''Ziw0Lj4yJFQ4RmFNMSp+Z2A2RDl9JXE+WV40fFFLNjMsfDA/NnRwSTZEPD43KGp2X0skcm9fUHl6NSpodlZQYyN0dFJ6N2MsTlJRV2J4clh5USZZWnZfJGpAbnQmTmRUNEN1UnhKUV5oZks1O0JwdTFGWGI0WWNmYWpFdHxNS01BYlRkXyxpZlRgU1BTUFJXSWkjLDRNRjpSUkQ6WSV+eFlMJnpK''@;'; put 'put ''Sjs0QWtlJkNTZHk8Ri9VYXRmRl5hV1JbSkVqJEtMcVAxR0YscV1AMTFaTUI7WnRSUFNQU1A/eyReeyw1ITYrJmp9eXNOMnZrSWd7bmhDWlRWd0l1bnwobTJxeDpOT0AmSE9LRSt+eTtrO1J9Q1RmI04keXFFeWdacTZpS3pRTkZXZGJEQjZ0WnJHbWQhcCtxTX14QlJYQkksQyFyamh0dkN5YmxM''@;'; put 'put ''OG5EWFA+M3A3SWdqWHpgWUBTbjElUlRmLCVWeDZSbSs/TE1SJGVrOkJbRyVVbWhmR1tnejhqMjRDemtYZ2VeVlp4cF9fLCZSMnZ8Zm13L1FTVyE4eWBQKzcqLz9dOWwrX3pUSUZDcEBbTHZvdiFSdERYTkZ3S21wVV8sSGtxMz9OMj54I1lSSCJhbz4/JkVVYUBIejZYUzBzViowJXJEZkEha0BI''@;'; put 'put ''ejEpVUchemlPIzJDeWRmV2p7Py8rViIlQWdGKkY7bFdaP2Uxe2FWYyVqUisrJWo6MX5ZZ3k4bkRaQm8zP2F6Q3ZuQUBsRT5rSUxdWjl1RT9JYmphejw/c1UyaExEbE9RRiRLVlpdU1BkeWc2fDpoUXRvP11we3d2Y1o5XXIpbkE/SU9sfFNvLj9rKkwwfVg8Pnx1fXVqO2lxbCFnKi9Sc2xxMCoq''@;'; put 'put ''bUp4an1RcSsjQk5DMEk9U2Y7anFRakQyS05UKV1PNnR4SmVFNCExKDJHO0UvSDpkdnZZbXVjKS4oVVFhcEhtcDhWW1tyYE9ae1RdWVZ0Zjt0PENSKihnb3l1THFCWnVgdjYrcUBqaC5ZR0c5VXMjeiJdSm9LKlR1OUFPRHFHSHh8alV8XT4wdFE/VlosYU56aElVOlZFbV8+SjBQSyVrISM/VnpH''@;'; put 'put ''TipxPTFIZjpNX3NAe3wyNXxaYHhAZnpwTyJRXUslczpWO1ZFeTJxeV8zKzpMVVJASyl2TiN2NWFlZTwvaHJ0R0Qod1lNKnxCWjZkc2pHMmNaeDNqNyFhe2p4PUYrO1RAT1pqKDlCWkxWa24vLGAyY1o3QjE8NnQ9YjxeQmJiT0BpTU4pMHp8Pj5aKVUiZkAyTldaVCgiXV45ViZNU2MvVGF7S0By''@;'; put 'put ''KW5EP0t0bUw7PDpxWnRlK29FJWMsVTYmZXk6TlkyT1pHbm00Z1UsKVM4TTBJLnQycU4lSCI9OzNBU0IuflJALGdNZVY1PXBRJXpbQHZOQjIwP2JrZi5JTUQudE4jY0ZGOHdkVSs2WF5zYFZLZEFzY3JVdSFgamlbVVUhKVVZKCtHQ01oa0U1IX1KfkBGSkgpYXFgdGMqUHA4IWN5Z3g6SDZQNG85''@;'; put 'put ''KFJILkZKWlhRSEZIM0tvNShpbyRNayR3Q0QlWzEzP0YpbUNAclZSfSxlTHVQWGppa2oqMnorTFNFeDRLdVFtQ1NTNTBDZjFjUXJUNiZYZFRDdTFmQFh6RGFJQ3g0IV1NM3hkfk55elNraXpdVE9uN2g1KyYuZUdaYVVJJCoudG1+a1Z9WTAxa2pyeFFyMyVFSVJDO2FhUn0sJkYmRDVaNDdgeERq''@;'; put 'put ''XiwmRlZhXU9iUEJbcTdAMX4+dkw3JlY5cDFmQFZ4IXY8di5eOHR+SVA+LklXakxVME8mYmRUO3hkaF9LXmFbMSpSdit9bjNIUVlleTssQFF5KzxMPlhsRjNoLF5HJEolUSUxSXp7ODFnalYyMFRJSlBdbSZATHZgRHlrVE93SyVBW1sxbz8lRjEsJnMobWtnL3wzYGNvMisqLmFMcmNiSll6cCNp''@;'; put 'put ''cUxnXTZwIWBWOTFWVHt3TWt6YUVjOXFtZjVQNHFXYHJSUVksNnUhI3hLSTR7Nn0rKFByMSxROEokLGNXYG5qbHc0SHdKJmJlSVpndGA3UDE1TGlAeXhDSkczZDgyQyxUTXN0LFB4VEZCZlhtUn1Ab3hqZk01NFdANjpkenk2ZSxtdzxiQCIxJFRZKlRiNTdhSUluZ2d4ZjNvc0BOelVqO0J6eTQp''@;'; put 'put ''QWJ9WXt2JFheaExEV3g2SEJKQVtBLEYwPUNKR2FNKDclaXN3PFpQVm9SIk1CbzwjdzJ5cHlxOXFQVVVAcUtdQmBEWkF6SFlyQ0tpZl8yUm9wK18qe01hUFl4ez5JLF56RE9pckRMb2oyUXFocGdqZkFbfSsrMlczRmltSTVBbDNfQCgkMG84YGRgbkAveVhPVnkhS2s6QGtsX3hqRCl4dUdEXl80''@;'; put 'put ''dlVmWltRXmg8dl9LP1opLyFNSGdGUGN4PStqNGpSLnx2IXZJNzNvbXgoYXlgMis/UjMpLjhnWVtpaFY6XzkrPkdSOitTSztkOShxLzU8QWYucUdSPSFtKnFBa2x3NFRDbmpKM21TOClQfUhjMDdsTTN3YFBLQ1grc2RqWmZzYFFTT0tncCMzSndbLERAUVliOkdDanN2e0E8Tnlyb0x6O3E4YHAj''@;'; put 'put ''dGZMeXVuVmRUMU9OX2U9OXhZUmRmeD5hWFJRK1J6IUh0YXxQTCN+cVcwaCVDeWhNeVgzUHZeWGZ1b0E/IjFNTiVhOGVfe2ZMWCVIRTMzenxzaTUxX2gkIlpaSEVlXV5oQCt7IlRDUm12dChDPnteYXlgZis2LmVMViEzP0p0b04wdUByI0pDWzhkTS4vMnFacjUoQylHQm9XYFJLV1QxOjh2eSQ8''@;'; put 'put ''bChQeyEpY0hgVG97LGxuajtOTm5rUz4qOjg7OzBLVnFfQS57dFJDI0Y9eEZCdiFjQEJ5P1QuPmhLQEgyTmY4NVA3STM/RSlyPzk0bFY2Vy4yUTxGXnUxOyJRSC5CIUtKXWdWR0l0UFs5JD9UdEhBKClLKEh3bXIwRS92S3EubCxEfCpeRWtCP0gyNyxMNFlhMWBoVnRSaSFRZj5OKXYiRUJlNGZI''@;'; put 'put ''dl4/alh8eG5JaWd3SkFrWjxBYzAiWVlyZX5FVmcxcz9QIUxpRCluInNEfkg1dE9HezN3cmAyMWIuVXgmcm8/dDg/STNKOko6JUciV3Eqd19LezkoaD1oaW1xXnt4KFEldXIwKVZCaH4jVC8se11HX3MmbSlmIjdBIkRaZlBIbCFeUmkwR1lIakRYO2o2cmpuUiZnQmNCQkJ8SV9SNll3VEo+WXF6''@;'; put 'put ''QSxFXkpUTHU8QHcoYX45NShhdStCXUVvRl1FLGMiR3NNTHZ3VFJfOyR9aCZ0cEFjQnBaXTZBJCYkX19pJnpvcyU5U3FLVTt7VVh4R19sJmRyNnAqdHVOcEhlT2Q1Wj1AcGNJU0U0eFYvIyMkWmtmS05nRlEvZG9uVkZNZ0Y5eXcxaHN6fG16eC4ubSFDI0osbSFDPitZa2tUKixObyUrUXI3Sz54''@;'; put 'put ''PVQ2YkZWViVoTmJJZGhdSyJdT2A9MGN6UWhaem8xVGhlVWNRTiNdPV4sQjV9KV5qPXk0MUdTNlordC44OFE+KyN6bEU/MVEqISh+IUJZIXQuOCxQUFg+KyN6UndDVTNJSkZMKChHImwzUTsoeU03PEgjaXdRWStLTFQvWVFpIlkpTGF6Mj9hfDZ9b3w/X3wpZ0dwKzpHfHVnc3AxaSE6eVpRakJu''@;'; put 'put ''aklMJS94Z2pUQmI4eFk6WXpiQGdrRHdxQlAxZmxKJU81clh5a2RrZGtka3Y+WFVSXllRc2ZQUFY7OlQmOX11YU5rdThAei5OREhFJVIxPHtpQXozMHxJLjVTVUoySXkoekBbOVJdVF9hT0ArVFJeOVI+eDAyImFCUzwoLHJSWSZHXmFfUSsodlhfUVR5WU10SVYlOiY8JGV1ZFRTVmUhXixdRyNB''@;'; put 'put ''UDElKyN6bXhiQDpIcjFiQDBwczFAaEcpWU1XenFTRjNibXxSNyslLk9TNmIrSyttQzI1P0l0LmpaM0dwWWtrVEJiQyM8LGJSNmIwZyxIOkk8aEcpS3VUQ1VSKyhzeE1gcG8pLDFRfkoycE4xSSlCQl5rRTBNeUc2IzVBMyN9TDAoTm9IbHQkS1IzeHZNQiZfPktRVldyU1N8Snp4OilwIWdxfTpr''@;'; put 'put ''LC4yPTVgdHZ2IXZxaClOOkJdMmxWUiVdbkRkVFh4LiwwTEBLMzxRZWZRUmZ6XUFMS1pBPmpyIlZ4dHk6UWhdPnJkVm8xODtHezQsPXM4bjIqcFprXWVMO3FvKFB8P31sdnFOVHtgcW8+UEAwVV4kPXNZY2RJYGFrXUU1O3xhbkRkcT9jW2R7TUJDfiU6ekVbTUFkbzk6WVZAQkt9dkJBfUVKTUVU''@;'; put 'put ''OzxCQXBGaWVgemJgdldoeWwoe2l6YCI7KElUdj5ZWzEqZDZQPHE7TDNGVmltMlc7eUAlOiF+SEtKYUcuP0ZzL3VKKGhRL3QobS5UdiF+entwaTRGXn5YfWdOeSNBIjQhdChJT35+a2d+THIoN31WdUQpcVAvdFZ8WyIhKFRFYH5TcUhSRk5INl53fFY+VWZ6RTpVWDdwR0Q5WkRdS0s+YnBdNDEj''@;'; put 'put ''fVpCMUYsPHl8b3MoV1t+XnNmd3t+IXxSZTl+dXw6UGx+Mm0vdndeOEJZfFQ2KH5iXT47W30lQCY+bz5iPHJzeXR7cyR8JEgrflZdNGBgfk57WC5zc1BPaCgidyk+d35sSy9RfXJfZXY6ZURPfTwqIn5ffF9oPS9dQF1YXztWP2NKY3MvWlFMRS9EazZ+UmxxOGQ1MWVZfWR1dn5BbzZNX1smSERP''@;'; put 'put ''eD5hUHh8X0gpfn5ATkdefDBSaDZYLFRFQSJSVFE5QUBkZS99U01JNCgmMWVFYHw4aXM8PS85X0tfZXg9a0I2fnZsUnx1PHl8cX4xSG4qMn4mLDdNQH1eMGtCPEA3MF99XTl9fFAuOX5CPEU3Qz9KQ1R+MywoaFZ4Tns0fWFNU0xqLkE5Rn49eT05KmhWTG9zUH4vUWBFa3VnXkV+OX4mNW1XQkF1''@;'; put 'put ''KGw/OEIyfFlwYH4wYHlYKn19aFBXOVU4JEl1OW12Xzx0fH11X1JhPXMkVV4pOnsxXWV+JEUhJGJ0NGxoYCV7ZV94eEA5SzQ0UnIoQH08d2hXdTQ4WlREXz14cXJ+KUUhJCEwYWZ2YFloQSIhPGFQYH5vRUIicH5FRD1+SXtfbHBze1BgcyRBWDQqc2J0cVdFfkQ9dChdfVBkfHMlfCkqVyhMIXBQ''@;'; put 'put ''XTYxZVNgVXRdc0FfUFFIfndeJWg3Jk57MXN1N0F0KnN6QWo8K31dPyIjfXxbYU0vcUBdLFVXVHQpPnZ+QkpjbkhLVmU8KWFQVHxtcCl+PUBqMEV+WWEzRjR4MWVxfXl4SjQzdC9pNXQpKDFlSn19dGh+NT05K198RGVPV3lkV0xxflk0fHMrfGE/cXMpQ1R4WCs6dkcvKmgqPjxRSGJ3OnVfeikz''@;'; put 'put ''c3BqP1FNX11QUCheTV1lMl9WbVYoQjhLYztdKUIkc2BRNT4zLzxKQ0BtXjl+filWNG43KWhrfV8oO3NiT35zP312NCR+VGpET3w8eHFxflZBL1E0cnBQQH1kZT9zMERyKCFzKEUhJCk6ZzlbfERfKzdJfntCcjhCMTFlN182KDl9fHRJNH4yJGFodFlsbH5KNm4uV3wqT3UofltDSEA5JV9xUHJX''@;'; put 'put ''ZjBNcDl9dEw5c0I8dURbKmVEUmBhLHVzSkE7OWUrdFdwV3BgYVB8cyJBMnl+QD5ETX5tOjFyaF9nPWdfV1ssb1N8R3s3PEQ3K1VROUEid2gpejI+Pl91aiFzZmgoaE8yWDQ2PlRvInM9c3JYM3lHWyx3R31iezJ5e3kxIVt9dilKNCF9XURuc0RgNzglfCxTbzEiW2RHIVRHP2dOJmhONjV5W34s''@;'; put 'put ''ZiJzd35DMiFoPi9wQ2Q/dmdWKF5ge35kfi5VNWh8eD05MDY1U35zRCJnTkovX0JuXzFlUXF1fjhqUFdKM2wxYFJyOGBbIyRxV3wqYVBTflY6ZihhNDRGQ0c6RDJ5ZVtLZl99cjBFQj0/eDp+fjp3dFd+fjEkMWVSfXZBTzROO0A5Wnw2UE1KVX01SzRoakd4OjBfRnUifnxgUXg9fkBbOzw3czlx''@;'; put 'put ''UTQvVUIiKn44XzgkIn1gYSU+JGVqVW9fcVBKLzY0MSFAfT5uOGhXKVlTXntxdj0yT31zWkMsU0AmLHFXKDR6a0BzMjEic3V+fnUkRFZgPTNjWlt+Z2t3eyl+KVtmSX19JjkmPjh5P1EmPmo7PEpwKDliKWgqflY8PUJCeiJgdndJJmM8LDUsXSpmVXYkXkV+Nz57SiNHaVc6MHBpIWBGdTFyNV9r''@;'; put 'put ''QkpjLz5DSDpRPklJMTVyZWxyKHx9ZFFXTHR+ez1CIil+KT99czA/QDFvTHF8YnNGN19ENzFxKWVlfChqX2RfTlkrRCh8WVY9MjhfV3JaI3F+b1ZNL2lrISpBInFzL1MmdyltNyt7OyM+NDxDSHlrVWAhXnFXTDQwW2hXaUUhaXNzNEc+UTwwYj9gcz18aDYuT1NdUEBQfHQ/ZEMofmFbLjE7OEkk''@;'; put 'put ''KSNBdEw0eUIpPnF+MkhBIl99PmlxWU9qZ34wSE0oMT5DZHFaIWMhQmRbWnVmVy5kUTlCYEBiekRFOyNkeVpmR08/QENjL3dDJmlBJD9DK0IlbiQjRzxsQlpkdnhGLG50SDdkTEEiYj9vQ3lUNEFVdVl6VkZtOUBWXUo9Ozh+LH5FP2FzZDpqcTE6Q1JMKSsmZ2o4SXlbMFlBWXw8WypmRjBgL0Zl''@;'; put 'put ''QWFGcy9US05YIkp7MHgjSjwwRXdvbjk4cEIjQVMkOHJnTjpwO0FmYEJwKz1mIWNvQHUuS3Z6KWE/aDEmfEpMZnNTfDwpMGg4XzZUaUV7UGc3JSFaWypZcUVdeT07PC9rISNFVS43OH5wOGFVOTdISXFGLiZYRyhyKF9PeEkiQy9ENkNNUmZDYDlBZ09jX0RGTTtIY0MlTGZgOisuZypIM1EvKU5y''@;'; put 'put ''T2o0RGR+YnBDaDNdODpuUDBFYEV2TGBFKChvdEk+NHx+Zi5dNCE4MFEwTWI3YEdCOjtdZyQlODh9bClfKWg1cEoxJVBxV2VRJSRSfnpmaHZgKzZmYStRTGJbSXMsUCwpbmtxOStHeklhdFo7WVsqJnxEfFpvLCh6cz1NIyU4TWcsdSU4R2tbPGNLRDsjUEZuWlomZWNpT3VwbmJDYS9AUWNEYlJG''@;'; put 'put ''RC9dXmpCOChURkJTLz57MX04bSpCMD5qOFR0X0UrV2k9cEtIWFpMXTozQ0NSYUJqbk8odD5+NjA+XyUxNDsmW3RRQjA0ajZbdE1IdFhsYjZ5KGZJLl9FYyIwZyJCIlF4OEJlL2Q7Rj0oT0pZRUpaOC80cHFsUUJ2dDIhL2hFU1FHJFN+Y0Flc25zQ2s0fTRrYUpRZn5mKmI3ZHApRHtjKi9zemYy''@;'; put 'put ''Nk9yfnVJPyRbQGhybj1HdSR2PGprbissUz9vXzs9cGA6JFtAVHJdbSZxQm4mcUE/WGYkIlsrYD4wfUFuPXAmNyZFWzo8ck1jRUNtQ3J9W21LXUEvUD5vbyssLnIkPW9veiY6YTxPXyJUaDVEenAwKDl2ems0eVFhP1NLRCVZW2M+VHl8XT5oNUF3ZFtDOUt9UEVoczgvUXwscFVvJkhYXmd4YmBn''@;'; put 'put ''V1gxMFJWbSFoPiIkRyszcixEVW9+VGYhQGtSZF8+PEcoaH1iO2YldTd6YGFJeWMwMEhvImhdQWMxcUlXLHhxbn5adFQ2Z19nZlQmLCtNVTo0aWpQWSluZFZqajxPc0g7IVh6dGBQWHBMaTVDR2xYJFM4NEpBRFp2V2FpdVp+eFUyZkZMNz9LdkQrTz14P21HOiZGL2F2NURYOEllRVZYckJbRnNC''@;'; put 'put ''QUE+eGQ1VkVfa1UyNWB6bClZan5ZfFt3KkQsLjJUVWc9M2w+WFN6RTlod0pqbl15TzJSY0sibUIyc19YYEV6M3F5LChEM012OkheaDNuLjBbQUcrbnV1dUBvXkM5dFQ/eFA7QUx5OEZifHVKJUY+cEBDKHZJdFh2Z1MxdUgkI1FFU2hmeG96bEZUV1AyMG87fXZKezlIR3lMbnMjTy5MZmk4WiYy''@;'; put 'put ''In44an4hc2s4ZFpwU201XWNUNEtGW2w7OV5oe149QmU2flU1PH1jKnJ+UHQpdmZeViRkU0twfE1DYSluTyg7KVF0OFhlM004KyJYTzRfPyZlJiZkPypeNjI1PDJPVDIpZGI2QXxvNmRtUnM+Uzs5KiUzP2N9YzUjKStMS0NhRiFkLypwKm9xRkF6PVB1dDp1QSkpbkwqPzFwfEBqRTZ+MXhRREp0''@;'; put 'put ''Lm1PMFlecTs0WiZpQjJ1bExtJHhlSnlIcEwmLjNRbixlO0xVfHtOKW5POHJKPVhXQ0koUjVDNTo2PDVDcGB7diouc1N7NG98P21RWWA+Q1tCV190R3Nmazh0UiFeKF1wQXRhYjRrS3E5elQmaG1vfVNQX0BNKz84QiZlcjNgeTU0KitwZShdLFdMPl5YMTYxd1hqdzQ2fHBRfm5AKys2I0subzhS''@;'; put 'put ''PWBpP3FmKGBIe3BSM0B8JUZHdTZGQ0M+cFsvdEdKKE9KOkhkNWo7Mz9dWjxBQClBQX1KcikoQXVJQU1aTW9ffTRmfk96Q3RbeTtCPlA9Tl12IWE4Yyt1XUQibDBfPUo7Q0FAe1BtSy5IUV06P1FiJXliQCR9dFAwNUByRXFqaEMlPiVTVGhzeE93eU0oMCtYKWxhRU0ucndHWUt1Tn5OVmlDb0BW''@;'; put 'put ''LzNfYSxUWXcmUTduU3YiTllbKz87WEhVZiFEWjp8PlR7O1gyKGt+dFtKXl8pRzZiOTM9ZDViNnFlR3clNXp+QDFudlhFSyUpXUkrXTYuXn0zRUJxYnZ4S1YyaTpEckhKXSRScU9zQEpGKWJSJm52Xz1+IkNETHQ2NVZOKEE0ZWZGfTpkNmBSSXJvdzpkUERKTFovXUl6U0M8dlp8fEJhbih8Yj80''@;'; put 'put ''TUxEK3lVSD9Hej84dl9LdHQ4SCI+LExiQ0MxbEVKVm9NNEZTT2xCQUoxKDZyZ3Q5TVQoRUpbOVpPMkgxfngjOiMkR3JJSk1YI2dea3dgbXQ4KW99NGRAZztbbC5ed1hFcixATS51e15aNTU4Tmx9TixJXkUlYSs2K0B1WXkvdlJWLEVaOWZLbXM4UldTam5fOn47MT1ITDZ0OCRhQSQiV2gscjEh''@;'; put 'put ''ISxgRyZiYzxefENzaHs4TTp+VlNvSjhjI3ZnfnlBeCR3OztXbWRbfnp0aF0vK2x5e0VEXSlbQnQ2SGBefDdRNT1DdFZocGBGYUpFWDA7WE1naWdhcUZkeHtWdkQlMXx4LGA/WTg5YHZ8X0BqUFlEWTxFOmV4QFprYSpgcEhdblhwV1Z3QzhNUWxMa0UlPTY9dU52P05kVXczK0lzcEkkMm96c0NP''@;'; put 'put ''RittWXZlTGAmbTQodUY3OG84PU9HUjRmaVBqPGFFe10+d1ZdNUd9PShndlduUSNARFQhTUY9eF5bWzwsVVVMeXFub0ZzREsvcTt9OkJzUGdsWWh8UWg9eVB5L2QkTEYpPEZ9TDdYVTZQLDl2V0xEKSgxP2BvOXRpeXB1bi52PilXbkM8fVo7PztjI01eOzx4Jj4+Um49R0swVTI/KGUrcFA/TnE+''@;'; put 'put ''TkliOztqVzJqX3J6XlEyIXYkPC8sc2I7dyk5LD1DSXtDX1FAMXliUzY3XipeJFZ8QDw+X3xRbSUwPiN2OyNSal47bkVbblIqa0AxL09CfGxsPUB2UXpXQEA6aSYrLktMIX50RlU5Y00+RClIdT8rQ0ZfRXddZFpKWiM5YDVZJHBodDRfMCp4JFk6XT5PWTlbZUVGIVd4OCJrYTBjPFcySU54OjlY''@;'; put 'put ''Vz4vSz4icEJmOVZFMHZdJGZzXVZ2IVtDTzApfE5hWkZuTTVyM1RxfVckUjl0NmBsTGlTRV0uUlhuM35vO0tqcFZWZXpTRTN7PT5+PjdXQlt6Xmc3XmNwZktWKmxXUFkpRCwuWFpAZ2p+STh1JWZqVz1nVmBOWnlXMzMjRlgvO2NFZ3pYbytrKGg7LHdmejJjJHk2L25NWkswSWlZUURbXn4xL2R4''@;'; put 'put ''XUcvdFciMSRlWTZ0RHY6b3JZUVUlRyFpP2huaVk1JmciTCt9NDRvem45aiF1NnhIPFFZTlRSV0RzelFaTkRLTyFOTW5FJVhAV1czWkpJa1BGd1VvOipka2ksWlpMT3F+RzBNMDREfWNFUXRoe29MPk9IZH07eit5QEl6Mj4hIklrP2JmK3lDYXYzUVcvNV1tNDdRREF5JTIiWSJWTCV5fG9pKCxl''@;'; put 'put ''Tm9UeDhBMWEwNGk1cSU3P2RRNXI1OSVPc1s2eUNPPkQzQXcvfk5hMUdXaFVdZUouaislOSZnMGJqdy86VWYha1hKMUlgNDoiSy9lUEpYdjk6RGQiV0Isai94fSJYeSp2MkBQfUh1SVlOdTIvMCJ6dGpEQy54e2NbIko9L044aT02dTRyMUJhfkpqdylZW2FONTQsQ24wd113SzFKIl9NQHg2WXA5''@;'; put 'put ''ekVVXkh6cjdtMHtbakUpZldXKF95aWVzTkczdC5iLnIhRC4+ayV9VHB1c3F3WltEalIhTyFyRnR5Mnw1JSkscVI9YlM5UnQyMWYkUW59bHNpLEtlOWIyO2tOY2MpZSV+PmdkNHRZTF5AYihqb19mYDxBWnFdLyZ3OEhBYS5JaHxQUio1V01iJis5bDhSKTxdZCoyVUUkJC4uZGRHIWBofilLemxr''@;'; put 'put ''QFU4QCk0MWpESztVQFJmQ3Ira2FRZz5bcDFvZnMhNnBbaX47P1M0Ri5qTDRUTGNyKUVrcCU3RF9QYW1gdzdbOzdDQjltTiQsflQhLHdAIyUpQlhjIkl9JDxGe2ZsPzV4NUtbRGxLclBaTF9oPmkuTjRlcTd4ZzwpajQmZU13MSksXm1TWCtRSStdXSs5QypgZzJ8NUFbd1pSbjtvWXVQLjheN01f''@;'; put 'put ''anJBdGt6Py5gRnVoVFFOZ1YuVzBlbzI5KVdbV2JEVFpbK0U/VG1dVEUva0lPI0RleWQrYyhZLkM+T1pWQkdTO2dLcmp5S0ZPZWVrR3VyfUNBQVt1RzcvSmpgWk1+fjRnZFRzJnJbMyp2dnkofHgoJk9rZ2lCY3FHRzo3Ujd7SSw3WWBpYDZYdkd8Z2phJXlxfUZZSVUoaW5iOHApbX5YRFA9MkBu''@;'; put 'put ''WWltZFdeMip8Ky42bH5TISg7KEtPfnIvfnZQfCV7KGoxbyVdLmJdPj9fdT0mUThDLkQpWEo2X0p0S0ZpQz83MnB5YDxZTzsqYUEsYyY0ZUt8RCo6LFk0US5BX3g/M00qUEo1S1owNDQ4UD1oYVJfXnBGSlA8MHByYHJseCViPWVva2YxRUpENjxgeURoP2k4aSR8Lz1mcVZyPkpKc2YoODF0O3NK''@;'; put 'put ''V1lUOTtZQUJkNm52RTBibGx1dkpZKWheYE0/NXA7cyo5XTZaKnsockI+Olc/WnR1OU1DU25LKHN+SD0sIX0+bVd4QGZIel0zQlR7en1XWUNdK1VfYDBqOHI9bCwkT1AuMUlbLj8mcyFrZylHLjtSKEJxYUJTPUtTZn4hOmsjInJofFh0R3smJHwpZCJFTDkpOU0oTysoKio2USJKRnoqYG9JRTwi''@;'; put 'put ''QDJCOmEzMntCNyY/JFZeOik2VVdvK2BXV3wjYGMuW0dbYH57enNNdXRbQytjeEZiajpdXUtIfldfVjEwUCw8dm5BSytPU1ZkU1V0RVA/LExhLkhVM2l+PXpCMmNgRFVeVWhRflJAZWVYRlVoUiVnSTNgLyMuTFZlVSlXYiQ6KHFTJDFWazNxRmgxS2RZPzdsNThybUQzKFU0b2poWzdweE8wbGVX''@;'; put 'put ''Lk08dzJDISV6U215LiFdflYuPzlsViIlNU4xXUkqXz5fJXRJN0hvaVdkPGBeKllUbUUvMHw9eW4lOzIjaEUkKT93cGh1MVlhWVBkdDUxN3V3MHJrdExxNERfO2pzR3ZtO280fShwMjgkSzBRXz9oUjdOdD9CK3NlLl43IzlFLHZSQjNyI3wvK0N2a2l1dF4zZXQvWVg5TG4/NSkuK3lVI1o5WjdD''@;'; put 'put ''RSl7SjJKa0NFPHdBNmNVbSE3c3Q5JDokPSxvPSo/cVFgRHB2ST48Wyg7WzVqX3c2UGd4LjR1VH1kY2RFbD1GOW5yMm8rdzJ5YkArSFFXWG5mbWdoSE9fKUJaWTk8ZXxDdyskWThjOituPGNrbDRLSCY4WmJLIyomfGlTP2hFd0o2PCZFQU5uZzcvOkp7P2xIbVl0aWwhXWBzNkBPcTNnNiM6ezVb''@;'; put 'put ''eVc8UmBMK0M4bmtycz18Nk1+fSNMMDhCalZ3anozNWdtJXNoLjBLZH5HTC93cC9vWzN3cT4xXzFifWE6eHpXKnxkbGZxejguW1lEZm9tc2tNWmN1JDE0JnF8PC9wSz4rPDpBMzZ6eyRJd29MQ0YocSU/YTtdW3VDOzxnVHU+LChYQSpyOVJOZWxHclJBPjx4IW1oUz9zI2ZNeUBdRGJLd0oqVC44''@;'; put 'put ''R2IqeD1DJXNJdCo0KzxwO1c9YHpUKXUyQV95aGBAWmR1V0Z5V2JmcUVYUlZ3RGhzKDxJY0dlPD9eIXI/W09HOik7U000bC9rXVdwb1kwMHFJbC9XVFc0d0UvPS9HcXM5X2FKRyQ5JXZnKEJIQDckLylebXcuXyJ6d184OjEvcSNtMVpmKnY/OCREIUJUeF1+R1ZdIiNkSlVgS28veWUwKjoiNFdF''@;'; put 'put ''TCFNaDNsZz9VJElWVFl6Vl40dSF3Tndmdkc9X0RhNl5ANyR0OEJDJm5ZX1V+cVRkYF9JNjBodDdnd1g8RjF3LCZNSHpJakk+PUdFYjFVQGs4PkxbUzdyYjBDNFZSezdHfW0lYF1mVGltTGZlYl18SWJgLkp7LnBQMHVONyRNJHNtQ3wxKlg2S0BGVUp+LnwrI11+S1MlTm8yfHRKVHlLOSYzNjRd''@;'; put 'put ''dGE+VUlKd2BhN2B7UFRoeD1obyFTcDIoLGUwQmJ+QVs/a2w2MHExIWxFU3NDTSQmN0Mqc3BFTTVmWFFLRF5AM2dMZlNqWF5YdGFRSD1rUFJoI0ZjSGYia3Y7cltgZkc7bCRPPDN8MTdaZmhDRkNdOSozcTIjJSEiYn1jR3ptQEB2ZiMrLDU3akJSLypxUE5scGJiNzZCdzk7N2J0eENdeEhYeHg3''@;'; put 'put ''MFs0TVcwRlAkKzFwJFolXzRae3ByemddSlcyVUs0LDVMTDdeXmR+ImppKEVHV2o5SFgvTkhxe3hLWkNYNm02Kj0yaEdfSTVhQ25+aj1SaEpDbn1hI2oqTkgmPTAsV0YpVmZoVEYyNTtNdStfR1RPYkhqUkR+bHNibHl+dnZwOldkI2duVyU2MGt9fExNPiNVZ2xUJmMsVXhrUi5oXytQWUd4QH1i''@;'; put 'put ''ezFpeX5kT3dDQV1MK2FaITFoJGBaYGd2PD1eQ0NGLmJsZ3h3cnBjQX41eyE9M1V9JnBSRnx4bixsYUBlV3FxT2JPeEAybjMkcDY8YXUoaVhOOUtALzBJZTF6KUgrVFIucTM/Yl0pIW5Sc3MqKn1RclZkeSQmMzN7cEhqKmZZTWRGYlNwKD9pZ2pUKGJ1KUIrZiRxMV9XQX4idGVkIlIoTy9efmpq''@;'; put 'put ''O3gpanZhK3MmfWN4aTBQRVNKLDtqW2VCQU5ney5gfSZheDUlfVpfTDBKc1NLaCJrc2IjMGdyPGxBVT9OdkVZI3c/XmtOa2t7YXZTYl0wJiRab0VER0IveH1HRWooV309Q3MpWyhkdmxdNX0qdntfOElvL0VnPXtNeHo5VF9JfmA5cH5PTj00N0RYc2tpQkN1RFNDOzE6JWB7d1ZsOEhGJUA8SF88''@;'; put 'put ''S1VXcV1gUXgjYHxYPXlHXUx2aSspQ3RRMjJCIkA2TzZNdGgoOWB4RWxwNUxIY1YsfXtxeUNlKDkxQW45emdofUlWVHpFKmlda1RiU2wpXkJgSl4yUmhbJiRHUj0pbk0xK0Njd1MpaGM2SnNbIiUoczMmdU9KIj1CU3taXXVKIShmai5aMEE/S3VDWFIvNDpCbiMqLnBfWmVzcT5JL1ZDIklzX0x2''@;'; put 'put ''bTt2IW8lV019R1ttanYkMWEmflhSOi46bFQpKkZZZThqbFV0VlNESU9le3F1IzQhV2koS2AhRileZmF5eSxUWS5lQnw4PHp+TSxGcnZJXytkbihsdWU2azs/SV9gbH0kV3BYcDw2fnkwdkoxbHhPak1kTyRdLnB2MXZ9NSk9WE9bRWNtYHM2PyxbMF0/SkF+dkteWGc2azcsOylpZmc8YFF0RlFG''@;'; put 'put ''O3t4KUpMeU9MeHczPG9IbCghc09KQGk1JU1mQE4xfV0kdm8uaCRgNCowYlVVdCZGZV4wRFJvWGEzY0NgPDZRJFc2KFBWM3RPfihVZjwjaSJENDo6aSNeWmQuT0JzZUZtdFY7Xj5QS1kicn5zQzVHdn4keCV6cyY6SilqVXxdSFdNPzhsLHojYmd2U2g9ZmAzWC9walMuWG4+dS5yckV0TntqUCRA''@;'; put 'put ''L3lUWSl1cSNURjpAXlpKWToldH45YzYzPXJtSFQhOF1LNnU5MUN+OlU+KnJHdjIlWn48Jm9OZWpOKiQhTFNge2VGYz1xKmkwOipbOjh2NFJEaihZNnNbO2c+OmQhWEFFcEx7fD1wZmZFLis+JSFCMUhicnZLMzwhekFdazRvYUJAKltmfmd9dHcpeG0vZUJLT3wvPClsK1l8RX5Je05+WERgZzxq''@;'; put 'put ''OXxJeypiYHomV30idjUmfUdpM2toYUhMcSQhPClUcXB5PDthPW5fbm9MMUplcl1JQzRGcEZJa219XjYic3EmOGNoKDpHKjJvdig9QXx2I35yezhncFh6U0NsNnkkN05rTC5OJU9oTlo3LFU3NTtmenV+QVY9TXpnP2s4fTo3WkxTOjhaVV9kMkl2THMhZzgsZjYuPUc9VnxpZThSKSQmVHEkX0xf''@;'; put 'put ''OGh+KCw5a318OSJ7S0U+czV9ZTdMMUBCfGRiQ1d2bUpFSTJ0M3s9a0hSMW9CKXdlRUM+KSw8UD0+Pm9xOX1EJW5YKlFYdjg6e2ZVaixwPGZlVltPSVQ0bz43Z0N5N0BYIXZaTSVOJVpjKmpCZ1pGSDA4SVYiJkR1Mmc2PFokeFZpOy9fYXowS25ac3NCTTI8NzMlPENrZjtsOSRPfFg0O1pdYEA/''@;'; put 'put ''NT9gOUpdOXR+TXpMMnRLM2AvfXxXSkYyWSJsQyYjX3FvVTQmclZHaCxnW2tnI0srZkIkOHV0XjhQMW9LfipXTCpbQzRuKmRZcT14Rn1gRndfbG5EfWc3PkdmKlUmbSVFW09rNDxLaDU+ek1FXVFxfWdGUk0qM2wpfiQsWFV5SVFDeFczRkBbPS5mKmZ1dGQ6dUJtXiFVWik9LyxKbUVIISlDYWR1''@;'; put 'put ''KmM6Rkx4LnFxPEpEKzU+fVV5TWw2I3koI1pHcy9jKyVlNkYjekVDRUpZeWhYK2R4RXtRN2Jqe1hZTXcweTIkdFJUWysyPy9WRypKTixBbGRfNEs8Ny96V0dANDBbZXBYLHtrV3ZDenc3STdFaXh8RHI9P3wlOVE3PlFjTVJZRm8vNWElNiU9NHVsbyMvbFQyXjdKLChnJl9ScmI+VCspT2p9ZVVr''@;'; put 'put ''KjJtYysqT3FUd2hNeEAuNzdXZD4iS25oRVg0VkpFdDlLXyxubihHNyNuYjc6NmIpYHZddl1QPG5eR1ZOV24jZWI2e3slTkJRQGFuK31ddSgpMjFdTT1pIilfXyM7cEJdWzBZbk1hTkopM3JoQCtTMzhEYlhsOGs5ZXkwNWU7a19PbnlJTEU9WHQiJSZRNi9OOXN5NyQ4KExXX3lbI21jTTIxfjZb''@;'; put 'put ''SXhpcHl0QV5+W3xnSCI6O1E0Om1hRytVXk0wLDl9QTxUdHRwZF5jdCpCKE9Mbn1jaXc8ajgqRX5tbDxXd285PU11ZV8wckJrUGxFcG95SjllNXl1MVtKI2pyXTFgPDBlZEU9KjI0RzJYdFg9KW5UYHE5OjR0NVYwKXd9VWl4OTQkeVZjNnZqZyZ6ZytDKT1iKUZlfGhkSmBFSnJLKzVvOzhKS1ZL''@;'; put 'put ''MTE2Mj1raiZxTTFLZS5Fai96Q3pxL3Z6YUhwXlRFKmM0aURMQzdrK0hhNXhUJF93anFNVExWIUtCQXFtcnhjRHVCQFBhYG91ZnU9Vyh4WTE8V1BORCl0b3R5dnBuP3RJQnB6QmI3Siw8eCtRMUNxODx0bCN1NDtMRCkyY3dkRDA8VG90PWpKOzhQeWk9L2JYVzFFZzdPV1ZkL0wzclFIMzJaI3J1''@;'; put 'put ''a2ozUHNlUEYva11xInsqan0vMXZVelNTR2M5WHdJWjQpejlXckNJQF94ZnZMJlF2WC9GU1s+NU5pK1AkTkhISy95N1s9bjJtYHZSXT57NnpkS10yPTZJdmw/XTB4dz0jVDQsOmB4Lzh6dGs0fEM0MDhSRUk3dG1CPjFxVnNuI2VidD8zUHhPVSxVRHRnZkwwUz5peDYrZnpWRmdTP0FLXVZJNFYx''@;'; put 'put ''SnNdclN6dmRiLHVEZzpCPlh8UW80flJdRz1uWUU0KWQ6KVRodllraXBJZ3klYzdSZXh1Uj9ufi9oSS5PRyhReGNPKWhfakVWezFZTjgyKy9sYmUwRSJNRnBEc0BqRGJ4bihIYHMwKFhqVz1PeWBvWjMvdVdDdiUvYnU0cVslNSViNSg0cERPPjdYWl9fYl1qSkRfb1sjPTVPTmllK358OmN8fktb''@;'; put 'put ''RUZFXnVgenRDb1s2K0Y5KVUzQERCem9sYHxNOT91bEMhOmIyZj1SMGxgRyJTO0p0fE5LdHdLcSN7V0FCMlo2TyN8P1EzTXJfWWR4dCZEaUU2QzAofTAmRmlMUm4hK3NRdGNbPiE0aV9OVm5PWFZWXkFWcVV9bCw1NmxzdXJZc3x6SyFNejBZZ0JAKWJtLD11VjsqNE1ZT1ohMWp0OEo3NGNOblB4''@;'; put 'put ''KWUpZDlJNkRTcG8xYUsmTWdyOFBpLFNqSUk4NW9dZGBlRU5rUDk9Y2V8big0aUcscUo3LE8wZDsmNGM0Ol5jbHBCaHMhaWpAM1k+O3lKJVlHRGlhRVBsYzZKKSRWQW0zWSpnUi83fHdXMztNLyVVemE6UjBaQEZyRkFDcWFkKlhfb0RtNDZZdjI3dmBZSDchUmglOmt1IWFYUi8/REhOMD5USkBl''@;'; put 'put ''enIjKWUuIWA2Mkl5N3Q/MiF0LzFIRUYhUDhCRktNKTRzeFNqW1VhZmw1biN2VEtMbHlwNnZ7dXUzW1lqKVFsYnt2ZTxKLkJeKzJKfkh2QGZfbVYhKmtUU3Rad1VuaWM6WjZmelZwfCRjcUxueCZLKzAkSyUsTntwZU1YUmJlYTQiay4sQyk0OD04VzssSCpQTzdOP0oxP25zPHZkNFtWOEF4ek5q''@;'; put 'put ''VzBrWGAuV3NpRnJ8TkEvMS5ue04lcDo8PGxbT3cpeDZ7X3woNFFLX15neTcpTE9bbWFCRV0hNTErc0wqQmc+WHdLLHRLWyY8Ol9AbCtOQltwQXs0U1JlLjN2IyMhSiFnSi55YyFyXldNVExnM1VwcD02KHxrQXNtQ0dfWl9vVGBYJH5POk8sJW1QI31pLEpuJmA1Y1RDQk87fnRHe0YoQHpCNFh+''@;'; put 'put ''KWAyQCR4JEZ0Jls0ST10Z0NvKkZ5aGByJnpvUzBCOXthVk0iOyREc0YqNm4+OCVGY3xJKEMzQmJ0TThbT18yeEJeQHx1PVdaV2gpezFxelZCdkR6KD5iSkx8YzU1T1Qoaj0sa1M8PHQuREVUPTNOaXNWYy4oPng9SnhyZWxDfTlxKlNvUzRRbV9hO01HLiowc31YTGl2QUQrOE9heWFIOUpsRF4h''@;'; put 'put ''Yi9LUFdWVV9IMURye2B+amE2eXlNdV4xeWgwVW1MbEpPV2I1OFZMNVR1OkZfYns9dXAucD1sXityfkYiOTVYLlQ3PFdqUmJ7bWRTTlN8ayY+KDBHfiIpWy5Ne2F3Z2U0cHd8PXw+Kk4xOTw2fGlCXjg8JHZHRG1qQlhjUXt9TWs9OC59ZHZXWFJkK3s2dHFiUy9EcnF8ZDtXUWVjRnJXTkdVPk95''@;'; put 'put ''bzJwXyMyfVQvaEI4Q3RPMFE0eXd5SjFKNlR0QSIpNXNjTUlEVVBldUcrTXtmel95T0Q6Jlt6dGtzKTJKXVE9bEFOQmpIfkIwWFc4MTRONyUqLzJsOD82SH1MIz52L1hTeSNIaDx2SnFfPHUzJmY8amlONT9uU0hjaT9BRGhlIjlBKnE7TFZxak1NfUNURnM/P2h3JlEpaVBVeDlLY0t+fUx6IXxb''@;'; put 'put ''MUoxczkvJl5YKEBHSExLXSkoIyFvM3F8UCpFQiVyOUNSUW9Qfi5lakhxWEhAWGErKlZ3M24zO0Qlbj5eV3hubC5USWBkNC8raG1yVkkoQHVMOkldZWA+N2AoZD5sblFbQXZuQmgseFtLYUpQWylsWkp9P3R2JUM4YyxUajJdcHd0Oy5EPE5OVVB6aHpLfU5iJjA7L2BbeXxrUSZiN0svYnRVYDtL''@;'; put 'put ''YkhvVj96Vi4vcSxzYGE0TW5tfXZqPDtZIUI7YiYwbVpnbHtfZTFtTDYvYiNhKntLTExkSkFhT0RFZlIza3R2b2x9L2RiNVckU2lhU2M6UVNXPFV7QVYqRXdecyk6fVZtSC5LOSpiI2FTcTlDaVpiRSs9VyRlU1l5U0x4X01vR0FxQi9tSWovXmFeXkJJNyNuIUpgLnV1eE9qPXF0RFR1Oy5IRHUr''@;'; put 'put ''aCprRVtefCpWJmFJYztEJGRRZ0g2bC5yYHplXkw5SXIsaDBnUjlga0JoPFB2VlpeWDJ5UlJXVzRSYEo/Yk1yMm9JPk5fe3tlbURxdz5oamdddW9RLlVgTmlLITFULE1iLjVLfE1iT2pEMW18dDkyKkVKSChBSmQrJUxZWDMhPzchend+QncpK0MjKjVtYFNIWTY5fkpbQHdBfmJndixzMFB5a0pH''@;'; put 'put ''On14TklOYVIrT2A6bmA7UXtZSztgdnlSY15FaDN7KClsUHY6Z2pOZFRkcyE1JDEody4pUlswSUhjYUpuO1NJZHBWR191WncsR3Q9JEJIL0FyRHZpc0hPSFo6TXx2RC89eU5mV0s6YDxqQXYhI01KQlF9MUoqVXg5VGsiSiF1OWB8VyZZJCgkLjYhKD9vRiVlazwmUWgxME9FZFRJNXNDRDgrNkxi''@;'; put 'put ''KERKdUExSys9YzxrK2giYnl+cmdoYHR6aktqbDtILDgyPCg+UiNJb3AiUVFbJTMkVF5Xd3ZGZT97VHQhQitdUDJPMiF6ZWgoKCVuUFdeImcrL3VBfFtCSnhhYFNgdChzUXhubERMY00xPHJUWk9KVjRNMmlodTRLbHFsb0hJfTxvLENyVEklMnZAaShgKnBJWEVbT0BGWEJSJGtuK1U9SHQwdixP''@;'; put 'put ''Y1FGQEMjdHxTXmgwfjc0dEUjNV0pK0NSVjt4MC9zSU8ofiN+Q2VXL1FBUC5TLnYoVWEsQzpHSnA+UW5vPUwpSFghLj5VWkB6I3ErO35sbWJjej9MOnFZVWE/YGpdVGt3c3YvXXNjKzNPXkgoLzpkdFU7JVdxNDl9RGJTIzQ8RnVxUUZ2Sm87KGxVJnw9Imw+M2JBKW1TT2FJUywlTk5NcUZxJDtF''@;'; put 'put ''MnFGW1tlW1FJJXhfL3VzXml2dFNscncoN04xfmtsLFYjVz06di5EdnomWjtrPlJGLENlVDZzU24yO3RFe014djlnN0hJJm5GaGxaZU5wXnh2MXh3dGw4bV9Od2JVYCxAVENNRSVaZHdvZ1k5OTAwWjJ9cGBYIlord09DKSlbQTdvP3NtXzdIPC9jeTh+aG1UKnx0Z25dNDYoN28rPiZqM0BKTCVY''@;'; put 'put ''bDd2ZUAhNytMNX0uREdRY0pZRGVGZ1lEb3ZLMlsyOyYvQF4vZExldzVwYCVSOUM6NlUxI18kQTpebVYvRTJkTnliKk0pJG1IYSxaRi9OJEpkTVk/XSIvWTFFblhjMyQ4KjV5XWdwVUxVcGVMYj9TNn05IUlhRH1CcFdbMHVUVkNpbG14N2lnLk18dj8+cUp6JTx7IXUyPWN9cj0zb2w/Oj1KO0Jj''@;'; put 'put ''OCR+aSlMbUQxKVkoNjdzTWFdTnMwTzA7Smh+dX4ufHtRfFFreEV5KmFlNHc8QkFtejE6ciNHIyJba1p7NDlCeGM/V0x+PCJIWGAhWUZnIzVhQXFbIlhaYyFTT1pgTjgsPE0sY2w1MVB3WEBxJFY4MigwQVJSRlo9ZERpM3U/WVJmOzQyQDZxbHZXMit1flchZ01ASXpMTXtHdSsmTSptUHw8QEIu''@;'; put 'put ''eTNUKk1daFpEN21lYjIkVHZmdklBbiF9dk9JJiQpSX5XOW1Hd3Y0QURoOWRVQ3kuKlE5V2haN11UOyt8bDh7JHNwclZYYX13biNmZn5BJltxTjBMTjpFVSQ8VHouRCkmTWF0P1tIIytndDkvUmVMSExvdWRUUUYwWTZafm9NVComck1tM2x2b3QhPFg4W243cFA+ZTZQOyIldE89LnBdQmhsP2Us''@;'; put 'put ''WjIiJXlhMTNCSnQ2PjwjXzJlZUJAOjByfixSSFBWJiQ2Pko/cWNXW2AoYCxASVk8KTFCVSkoTXJnO0RsOF42Vz48dDdpMXllaVgrLEUkUXxeRyNXQzViJi4hb2JKQFpeYTZFMn5KOC5VS3U/dFF1UjBtcj9QRCE2MjJYInRDcXs4MUMpLjFba34pdn1zRmZvNHtQRWBgdHdRZ2xLcWVrZ1Z9c1km''@;'; put 'put ''IyxsbEI5MTBjJnUwYEVkfigjckp1ans7UUQ0N1o6dCN6XWdJRWpxJjQ6e2FXXSslRFFuaUx7QHBpbV4oUUhDblA1WkRUODE1eFRMbDI4YkddJiIhMyQ9NiE0Y0hjUzhrQ3E4LmlOSiw4NGN8K3pDYGAzY3xHU0Y4eCReZVtdfD9IITdEQVdUTTw7KW0rdFUqZz8hYmFmezF3OytDUFIuWEsuSlJw''@;'; put 'put ''PWswZXpXaE8/RDRgelchcUx5Z00kTHc0SGhdYnJ5X2IyKUJbOUs3eFhEJUdPTDxHWFlaMjdsZDlvQX4sPi9QOUp6eGh1IT8oPjtxN3lmOHNATSM7Ljs3U1BbbD1KJXtIQj8mMjlMb0A6eldFSjN2e1RmJE4lLzJDSGI7RCpean5WIzh3b2lEMnheVHBYdXNZP3VGQ3RWdGMreV1gfVg5UylsZ3wi''@;'; put 'put ''TyhRbEYqZndQNHZNcUNqJjRLZj5wcmtHO2hRTUFBbE1FWyFdYUlRZks8OEJTNWwjZ2lpdmliMkN9SFY0Vnt5OmZKaFVIekswMD4lRSsxPDhMRnt9Wjh+ZXBGRkQ4eCwvcEpufCNnb2dnX1clfDh8V1VzQylyaiFnN2paej4/ciQxQClbNFdUNE9VVH1sXkk5ciM9KTAqaUElVjxITWN4KEI1L3Y1''@;'; put 'put ''azI+PHgockdbPlA9YzoxL0VjPi8sKEhZSn5BQjF1M0shNGtaTFAuNHljRGhybUJ2Kzhubi5fe3djRHhPP3haUz05YlpIW2MpJD9mYDcxR2ArJnouXTd9SmYyKEA3bGFrPVRHPVgibTYiPHEuSi4vYDFpd3A5RTdqMlBCXzZqR013MiNZTm9ESSZ0OCt4LjlDa2pfdVdaeClOWHp8R1Q5MUZbcSoi''@;'; put 'put ''T2dUPixZIj1qTkRFPS9dRVRhdEk4fFBkeEA+b1puWEU9RmBRXi5sZnFvLHwiZlJpI2N+WzR+QyguTjs9X3BgQnczRVtJRW9oOEJhdFpEQHRpbjVUamQ3flp2T2o4UG81K3N5T3p6WUBYQ3x3en1kaUVIV1BeUCtNWFRfKCp7QXBvSUwpMlM9KEhoWVpMPHFqWS85QSlsYnVCQ31pRzNWN0c+aW0k''@;'; put 'put ''YUUpMCpzPmg9bSQ4cSsuTD5FWF9yaj1NfkJYXXN4NjAlcmBMOWp9NTwyNGhJYThAZ0N6fXRsfll1ZzlvclNwa058LF9WaUYxLF5WQVtPVy53NlUkOXZTazpQPmVUOChkYFRVSytAVmp9VkgpZ3BWOzMqUCgpfm5MP0hpIXV8LDM3Q29ZfjBUcmAoTCRtR3dMVWk5Y3ZvP3hqcGZdJGJqMGkkclRj''@;'; put 'put ''KFY1YE9rWnNgPUlaNkBMaUVSKGZLQ2liM1VIRXxSLyhqJGZuWG4zQHpCaCs+UVQlKGdGJDY4R19WbDhYe0NJR1IiajUzPjY1RkJQSD09NGteNGssRjYmcFlDVkkjRDs0MC87XzFkUDIqdHNOP2A3JkkhITNWSC9hTFZgQX4xQDRdMTUpbTZrKU1dbjZsfWVAIjB8OVl6cHQrQF1IYlZ7eCRMKntt''@;'; put 'put ''cFV2YEA4RVNHV2YqN29ITTEpRiFbPlgqRnVMSEdkfV56JXglUSpuSXY8TzJCTmguQ0RnLy8yUkBaYXpMYXVfSkhbeVIjZSVnYjs3X1BAZzk2fV5Vcl9XKF1AU2IudEA5a14wTFNCaiVhJkopMWtlcHVpdG9reHsvMCZmNHB5cS50RC5iS3AuYWNfYyYuYWV0TyN4dW5WZSwpSUI8TSlPLE8hOy9g''@;'; put 'put ''WzxPRnwrYEplcj1yQmIuPj5AUVBVOGFFelpXLiRCQ2ZlO0lIbVJ4JkpleVkxUVY8JWA9TSxye0Y2X2F0XyI+NHglUGkkKE5oUXdpODN+clpUek1LKDtSOWNjIz9MU0AsJnxoZGxROExONXFyfihfRjk8PFF8XyNGbis2eVk0Y11mJDM6bGVZPiNqKndHbl1Lfk5oR1I3akRSbn1AWkBvd1ZMTz1f''@;'; put 'put ''e3hdeiRyeUs0ISs9aTJqISU3eDlrR3B5fFJVcisicnQ4PTVNKHQxbDlBS0JBL3R2ajQwOXhOY2hlOHUrdWE2QHIwVkZbWDRISmtNXTZ5MHR6IzI6aiNrQD0/YVszeFA0KyZGTkV6PlZqOXpDSyFCaEVHbHo4K0Z4SFs0UWhyUHYuZ2B+NTl5ImJfMjl4T15oQ2RRV0BkQlJTSH1ddmNNIWhANS85''@;'; put 'put ''cV5dVDxGSHExYnlAaU82QkBoUF5Nays8eUNLVFlMLj5teTE6fGUpNUpre15hQ05Lc2dCOC44Yz8rOzQqRWd4L0ZVJGpeKSI/VmU/LzghQj8hPDFVeltxbW9JYkpyMTlkaihHIVUmXjxxTF42OUcoNXBEK0oqfSFRR2Z1cz40bk1MY2g/M2EsXU5MNVFfXy4rdUNGQiVLJlp8V2I5Xz58VzpUOm1D''@;'; put 'put ''MSQ7OzEmYmdqOHoqbSZ9RmB8THdNR0tWUT8yY0BuJWFCP1J8ak89Zjd3NzlpJn12YlhoU1E2TzB+VUtEb0VMMlVGanRranV8M0UiPUVZSVJeRHtAczc/LysvUipvUDpqUl9OK1Y6dVd2a3heZ08mUUI2cEVhSElMdVQ3P1hdYiVkPTlwQ0BOPFQwQHBmZFYmMHQ8bkgkNUxgSUFCZk5zS1UuZURJ''@;'; put 'put ''fjsqOmUmSmRuRW1VL0lFUz5yUmIjaGgmZDdsLl8vSj0vWnghaT5NWV4hbl52SjRqSUNoPiNuZ0NWMXtnO1lQbiV2Jk5sdHo5NWpuU2pZcVdDVDN8ZCllcUYrKkozLDd6XXNSdlM/OHJ2WDV2ZHo8TVdwJkJgans6NTZgcXU2aVk1RSMxQk9ffDJDXy8iPStlJm9LelZ0Mig1N1dsImYzb2cwKFJv''@;'; put 'put ''M2g7Y3Z4aDZvTXZDbHZ2WXVhJX1BdFE2Jm1iTFMmP2M8Rl8kZz9MV3NEU3x0NF9vfT5BVSt+Q31eL0BKIS9eOGg8VFdaS35XPGkvInwyPnwmKGcxNUo/T0NNWW1NWFl8KXEuayxkcWx6N19qOnFZSy5RJXg5S0FGJWNael8zRG50dnB1dVopemY2REQpY3lwVlt3ZW9nOz9JJE95bHpsKllAPSZg''@;'; put 'put ''LFYzajdoYiZmdmoldykjODEjUlZTMm8/JVZmfXo+KSlyMlM8ezMkKEciYGpoRTJefSEzZ3lOMlUlTGc3SUFdaSJVN119YzVAc3pVYFBRa3NjVVU5My8rZFkxam5+eGNeVzVIKi5IRlNSK1hMOmxBY0E8ZChnNDJiT2ZiV0wsJSUhJGlbfjdjPTF+QEZDdFlPOGtMUSQqWi92cDlxaDo+bHx4Z3tO''@;'; put 'put ''d1l3SUsvR35tS3Q+aElxVnNzanxyQCR9WlQ6ejt0aWc8KlpUSCI/PHolejhheiEzc2NCakNUPCp9WWhkfHMwTlRFX1VIfmBBY0N6X3JoWVBNa0B+bEhYWUJAdXR4cCFqQyhJIUc7Q1Y8N2RxdXtpIjlVTk41cVJFenBFaXtNTXROWj5MbmN6KD1OOz5Gfld5JS5DNWZrT0d1ZiNybCxnKi5eKDVN''@;'; put 'put ''Yis9R2pyUzp4Z3EqI3N7VnxrUHN7PGgrc1ZeaEpidW43SUB3SVE0NCpTaFp6L3VGX3NmQSNBKjlmUW5Yb0lvNHRgQCVGTVgzfTpKMSxWYGlEdSxCQ3A7Q3okUUZ7cFE2LGdxMCU3aHh8Zn56MC9qJHxrUWlHSHxAbG5+VXszaVh2ZytxVW16WUFDMmYyWk1ORUhBQ0pYOS5wJDtOQUdCbGt8aFJI''@;'; put 'put ''cC9ENCg6WVU+e2JjJjU6c2paWT9pTTp2WzgrYW88MGlHYDB6Y2M/PUtebDxMcEkjJE8wRmpSVyZfKSQ2V0pPJispOGhNOmQ3L2kwXVBlWmk+JEZvZXkrMkkjXXpufCY0bTA2aihhX3dlPSxpQ2dFOSljIWFLcTooOD89S15MKCRqUzwmU04+aWA5dVtPRU9FR2x0cWY2YXpkSG5iV3VuOTBsN35n''@;'; put 'put ''aTBzUFFVXkckNzF6KWxYQkFJQ2NBakF6UnRQLzhWSEckTkNgcCNpIkc5Kjp6YT1zSFldLzp5SCZjKlhNaW4oOyRDRWJHUipzfEdTOGZOXTU3OlgkMHFvdmk5VF5Kd0Y4dTQyckUxZ2ZjVVddQWAocldyYToiKX5AdU1aViZQNWcsZyxOV0FWcltgb2FLQVpWL2ROVEttbS9MdWBHTS48S1FiRTdR''@;'; put 'put ''MylWTEchLzQzMSMxcGNLXnhhVit+QypKaS9mbD9PNS5hMHRZenc/UldkUWo5MVk3diw+a0B5bHojMWFJRmExNE09dD80bUNfUExEO150O2RlRTJTdXl+S3g8NHwreXE9OHB3e1lsOGtheG4zRFdVQ0puUjFJUl9+Q25vTWNVZDMxW1Y8fE9NOmkiamFaODM3bnZFbVdVRi9KMUU2OmpRRmRLXnV1''@;'; put 'put ''XUwsWm8uQSwuOUMyaWczOz5HKHtyflVESWhTezBkUTp6Vjp8bmRbV2E0KT8/eGNqZEp4WTYuJVYuXSVHTCElZFgoeEh+QDBOMDFTYkYyISNZQ2NUM21zQkZJSigrVD51MGZlYTJJcmFvIkR2dF9VIWwsUm9CRjlHKFl4a0VRTyUyTXBXemc/eHJMPnswJlU/MHo1O0VPOSxdKCkvNlpIO106Tmgm''@;'; put 'put ''Olk4OVtRJXNJd1lJQXRRTlo7RX1rSk5OdVNiRFk/PChkejViZzRXJDtpcmdGIV5LX3ZKKFZJMlR5a2ZAZVZOKiw3SGZZSD82Rjw3YXE9I00zKjtmVX0vQmZVfS9rZGhALEBQY1tSQ2E/PV9eVFVWSUgxWEJYP2ltTSU2JWEkWFlnXyFbSlUwUzhEPz5tK0k2bytuMipHdFoobGZbT217QFtCYzws''@;'; put 'put ''Sy5VWj5yWlZXVTxPZzYkLnNYJCJvIXJYN154W3h8T3skOSRFLExrWFl+bUZmNV1pZEpfNzR2JUhvNGlEdXQ4OCJ7SVVKI1UpZjA8Vil4ckBYbF0meHQ0ekZ3U3VOJl5ZUV1eTyx1SzlSSmt5dDdSQFlzRDF7TU9MQEdoJjh4eXtdK1dLS2NmezJISkVEVT9hQSksdk1ge11EJF0xUlFNLjQvOEAl''@;'; put 'put ''OmVlRXI0UDljNUwxdFM8TUZTdy5dXm5IKGZtdX07UXpzdWNlbCFZKXQqPFNRKkFTY2oxKF5dNEZse19YdSE3UTg/Nz5sP3pkfTxZZiZuKU5FSUg2VCpJN2kkTzlGRT9SXjBzR0dpI11TMXBIVm5uMmFDL1hpXnw5JiJUTj5jclF0WVo8e0VVK0VMMUR5Vzl+Tl12MXNxXj5lWUY6dmkkMkpmN15Q''@;'; put 'put ''cXQwY3Y4X1MmbXxINzJ6YGlAK007cyV5N0cvKGFqP0JHM0dXPms8eyZRNzJ9REJDVmx+TDtVMmU7clNtbGBZTn1nKDhsIklxK3cxdz5nLDl5Jm92Ryo3ZUlMNklqUTxTQVs4MUY3alB+c3MxcnlfbnIqbk1ebHIhbj8/fjhoZ0dzJUFGcEJRWElmK285b0shOXRqa1IxZ053dzB3QFJ9aXk3YHBO''@;'; put 'put ''Q2k7b2twfS5Yczh8THl9XSx2bj9QfGY5OEYsNnJ+eVliNWUxUH1QVGpYSDN6O00+di40VjF3LkM7JEJATF8hPXQlVG9MZnU6JU18cXxoMj5zeFErcnFefnY8LGN2Z2t1cWVFWyx7UiVPKkdUeXEzXX5iUXQoYTgkWCpjNUx8UHMsLFdeZ3FMPFhuLF1Lc2JkQS9DZCoqZzdaOz9NaERSIXRFN2ZQ''@;'; put 'put ''YVJQe3Y9VyllNF5pdz9VcTlfNkl6JEcyZltDOixNd0BTfShpOi49SDE4JUlFV2NtKD4ueFQpU0FdUC9JJStZd35ZMGFNP2FEO3soXk16KDpec0AqVVMvW3JiTiUpSz86JkxUWHJZekBQOiw8dEhCJCYkYk9wNGl6P04lO3lNNDs6fDthIVlSa2J2PENhe21hUHhCYzN1UV5sTEJiIT8zdzZDP1ch''@;'; put 'put ''SV1OMkB3cl9lfHxEKDRwcVlDZUZ9a047ZH1KWy5AZVgucEUzMENUI2IlKy8jd3dxaF9pUXVRc0tqZmtEN3ZnOkNjOjhvUChucyxsU0hOZXU6P3hyVUhuQzJXMTorKVc5ZiZ1diQlWjRHVWVXV108UDJ+Lnc6UEpASGhgO1JwOFQ2MVFzTnhPWXIqPF4ra34kYXgyKj5oQFEmfXk7MjE1PyUoJH0/''@;'; put 'put ''fWRlOSI2LzVOUUd+M15COz9uaDtfI19QZG50PzA2OnJDRUYsfil+RWlFbzkpVzxPeW5+W25odThKSHN+fTQsbHtRJG5yKiw6XTNKNXlCayEiakYzKjhXUnQpWV5RWkBbTUgmKDE5QnVFakg1O2RiJVljZkN7P1lCR0BwMVpOYyF+SkJMQFQreHVHUT0wVi4pb3NIaWR3ZnUhPiJleTNKSVFLRyFa''@;'; put 'put ''bEE0KSQqa117O31Kc1pNV0ZsPTYoLkllNH0lKWZUOTJfZ30lSzoib1V4N0l1ZUVvL35EIz8uUG89LzJJNCNUVUM0ek8/SGNANzVwW0UxQUlyakMreV8lMX5XYEYvaE1qaFtHQHM/KzhdViw0ej9pNl1rSzkrT2JmTF5iXU5MYlU2WC5ZUilhTS5oQktaKzAjR0pELzVLZ0tXdFQqTkFYPVhHcVlC''@;'; put 'put ''eUQ1VnttZmcqQF1fMmFbWGRpQHxNaGBUKmFXRU5EW2siclExe2g2VDtbYnQrNDVrP1siQ0RUMWQiPTdGI1N1NVlBUE4wNGFld0UrQT59M101Ij1nbW0xfno0dGFSUSgrOCxCWWM+QFUwa0UxLmdXN2p+c0JyQV9HOCV7bU9VTHgyQi5vL0N1KEhvXUUjKVd8bk02MjdiRGxOVTtJIXNsZj9rNEts''@;'; put 'put ''eFtjZ1ZeR2pAJCgxRUd3TExKZ19gP1JQKXc7YjBHfkJzXkMqaD9zbHteRkNCUys2Ql80JVl3UHtaWloyOkxiT3ksWjEhbCRSR29CM0ovMXhIQj9oZUo0bW8zdG46OFVlNV1ZJlA5QE9qbWc4Lmolc3xtJDp5WStpTmxrYV5Od1k9RTptcnxkNDo6cXA4SHAoKS9oOnxgLz4pWHEhfV5mMiolRnFp''@;'; put 'put ''Q3VbKUoxNS5jcnJjWy9pQktdWnlJMVo1VnlXcW1Hd3V1OWxqLkROVnJ1QE82KCEkaV0pRWI4Zjw8eGhZd2d1Sk9TY1RgbERJdTxkNERSOkV2U2k+TyowNWhMI0hkem5oVlUoaz07eDxmKCJse1VTIklPUn4rWF85MmQ7WGtVPktEI2xMPldbYm5KJXBCckMyZV9DNmNhZGNrbURbbjsqME92aT97''@;'; put 'put ''WmthYWlMOk9ZSTFLc2t9d2FAdnc4TjRQYXBJa159dDBeOUxxTy8lMyFbaEh1ejQzNXozc3gpKnRJYSZId2QqcEdmKVA2cHEqVEdxSlFCQzNofDBmb1t6emd3JjkpcWIzIzlrc0oocnNCQj5lcXRxR3FARChwdns7am0rXWJ1QDgzM0Z0di5pekYoeSNJNGkjN2ZMdEdrYCFjKHA1WXhRLmguaUx2''@;'; put 'put ''XXxkQ0Y3MnVNeGkjVE8sVmFeRUVZaHB0SU8rIUpfMy9SZW5rfDwpVnhefTp5VjFQeHJ5YFA6Oy8qYUpoa2xBZ2QsZT0wVyZRel9QRCVuXSRGdT1xKiEiKkNWZnNdPnZyOlhBVkRUenxrRER8cz1qSDhxLjtFKmImLmA1fkBMR189MXU+cU8sL3F2ZyZ+bWlQUFc+djxaM0R0WnVKcHEkV0l8eFt5''@;'; put 'put ''KmNJd1dSNipGNUx1MGh8PUY2ZXkmWysmIUpgLl80OV5bKEtMMmJnd05od1t1LDlMQ1szVldVW0B8VyhodjNRK3l9ekAxP0J9Rnw+e05fPFF2SDxXLy5hYCgvPzQ8TltueTNeUSE6Yz5dU0peVHFDYFo4UWw2TihTPXF4c3gxfXJVUWAuTnBydipPOUhNcHQ0R2N8Vzx3bCEpTVZdYCJYamheImRK''@;'; put 'put ''cWx3d0VSJCZ+S0loYjUpIzVHZHJ6NC8yWkxkVGg3JiUydWJFbV9+elElZTg2N3hrRzpBaFdRKD84bXNyS2xqJHwleFRrP0JfQHhQRWMzQEZvMDorVnY4Jkk8Q2gmaUN1Ul9mTWk0MyxHSz1EIiQ/bnJ6RUchW3luI0RWaVhHfWdgSkAsOTBzQU1iY09hSVJ6dEtddGFMRkhgWE19ZWNlUEAqdXRu''@;'; put 'put ''Wllvb0VKIWpLLFQrM0N2VUN6RCYvP0tzWjltaElzaVoxb0ZZXzJbaSJTMzIoVmNiKjs3bnpFe2xjXT58RypJdkYifVtCLnV1eEh3Lyo5Rm0vTFc0e2IsVyYkYCRyQixleUhJNyZBQE02O0RMYUApJnV9fXp2Z1Y9P0tWXlhRck52W2xRVkYqRFt4WyprKSU2Wj9vJWxNJi9JSDU3cWdQaDR2VT5h''@;'; put 'put ''ZFpkU0hTfXBXNHghKEhWKSJaKGJsd3pUeHRvTltkTDEqV3lnbTxpQnZ8JkZ4dExbcG8saCIvKjlYdTJEMEtWISxPQExyViFSZHhrPzpYVyN1dWd1U1FgRnhibEV2Z10xcSlZaD12LztyTm9RZFQ3XnU6amFfWGEqaHphd0BQMEJON2YqXm8qN0hZeUZyTFY/L2s4YSFrd0o7Ik5uN2V4WEhPJiJI''@;'; put 'put ''SnF8TXosZSZGfnc+fU4/a05QPlVgSSUxaU0mRjJJcnBZSiMkXSN8LDIhLD91Q3dTVDhfMUNOaDg8V0Y3IyM0YSYpTTpYWUBNMXV3MT82NStmMWElIi5KLzdZdDpDUyIyaS5MdDl+eG9sOyg9OnozQUFiYiZ8S3d4Wl92ZWg2KDEqaUBkLHZOcUMwQn1OO2ZkTlliTTlZRUVSYVJPTG81e1RvSmQx''@;'; put 'put ''T3thfkliMDpJVV1fTHVIVCZXc0coM0BJUGZ8SSF4XTEveklyP3wyPn47TkNdQ0wmQXtbUz81ZnN6VSNfLiswUyZjb114eWZoLmNIYlVBSmZKdjlbWTduUEg6IWxVZD0vPC5RLGxpZVc1YElHaiZsUFRVKzkhTUs6Kz5ZSTFXISlObjlCbjQ1RjImSWlsQiokPWgiUE8/YXh0YHRwRUE4eHNJcXRT''@;'; put 'put ''QHR3Ql9yN1IpUytdISV4WSpjdmRzbzQuMGI2cndEeT5bWDIuMFtFVkZuREJKQnJCaDM+bl4sTyh0LkpVRS8pbnI7PjB2TT5+eC93aH5YPkRjWSYzbiZjbUgqI0p2T11fOzU/eEprRnxLZVlQPmF3X2BsTmQvRyJQbCRXPV9lZnlHelA4XTBhVWR6Oit1ckBzM0BxPls/JW9vNkNjSWUoemg8cEVX''@;'; put 'put ''Yzk3LFQmKl9POEM4eHpUVW1uckZbSH45NkZhWzV7JFlQXkc4MmJEQm1jd0orNTpWeDZSLzImUUExS3hSJGZfUiQoVVdYW2JDQWxidk45KlJvenNZU31dTF1Fc2MjbFkiQj9fO0VuPURYPCFPayghTEJucDdHOC9FWH1SSjksfUx2RGtRd3xrZGZJX2BXPHx6MDNPXiZVcCpHOD5GWH1RMkdPJFJo''@;'; put 'put ''cyY/VlF1I0RsQjVxfj12Tk80QEohSUFMKGkkJFN6R002MGslIXF5amNES3JKPUpfdCJfOiZCTjgqQ0oiVnZEV2NPMGlGZ2lIVWhdM2VsJiw9RS4iSnZ6RWhaKGc8ME5je1JEMUB2RyIkeVtMem1IOHlUP3tPLDUhbCRrVXFOWW90WFNXVzlYUFA/XyRDUDNwLkpVV1pVMzVhWDcmRjdhVHFtZndU''@;'; put 'put ''SlRzbklbPT8ralBfUGUyIzJjNT9sNko+SXhMZW1mWD9Ca1lgdDV2TkZSUl9UVkZjSGRPd3woVXRkSGJxVks0PTUxe1dIKUUyIygsfC5MOls3SGRdWFJzYHhTd0ByQld5VXw/Yz5Sa25BTkUvcXFSVzBNXnZ+X0RtS3V4cG06ZCFzdyFXU1NnKjg3X1Q8UllRZSM7ZSMocXU7UFE+LC5ZQDN6dGo4''@;'; put 'put ''YUBqUUFVWHM7Y1JMJiI1NnFzaiNeK287dCRkZC9EdDsqRGw+UFVgMy91JG1sRVI+XTEzcSY/LHVKditeO0UqMDdgKTtxdHk9UCJQZGMyUGcsaj5fJmI1N05SWENKemBNOjVRW0JAd0dlZ1NFUml7Rm48I1c4WC9Ta117KFpga287e3krYCF7WUN3I1c4e3FYXUg7VUZSdTVGeUc0PnFINm1tSHkv''@;'; put 'put ''OXJuW1k3V2gySXpfPGdbRUBeUjB2TTR7dX5uRzt1Yj4wdWJRY0VsNExLI2dUeSN8V0pFXWJQZjp2Qz8sXzVHNWN0cjMjJncocV4zdDd9bE8qSH10ejRhbjc/Qlc5Y0ZzQVUuUC8ybHE3dnxEYk1RancpeG4/ejc5S0ldaU5pM3xSams0JiZsb2wxSWxoQmslemZLYnRNS0M+WE1NQlZFKypIcDsj''@;'; put 'put ''fjVQREJCLDEmZmhqMTxWZUQpbktrfllvaElGP3dbN0c4MERYfUgsazgpRyoobV9URCtvdz4sN2VmcVlAOGByd3t3OntrbmU1emlYIWAqdHdHSD5hdTYoMz8pciUoMWJKRShXODBNXWZKc2AqdDVYU0xzaTJCKSldVHo/YjEpfGoxTXo3Q2BTPzJyR0tPXjFSMn1uXlRpUiRJb3U4bUxnfDxNK0pv''@;'; put 'put ''WFpETTx7KzlMc1R4IVZAI1Nje1dJM0F1dih7YVk/Ry9sI3t5K2QzfDF2KFtLeTZxJWU4JWJOSEkmNC5PQHNqIUdxR3hyZ01BN3o4UkVkSXxnaztVNkwmcXpkX3RFbklAX0tCdUh0bHYqIkw/PXVKTlo5KWN2NCVJQWEwZCVYW3BpQDNJfnUvPlFhLlNOPmBGL1BzaStyYEVSeitVWF0vdWglIVdg''@;'; put 'put ''Mj9NZ2lGUiNNR1hZcmhxUmNDK0J7MjoyI2Iic1BJc28+d0MvLFphSWtyZWdiTVZdZE8wRWVaNFJmN0s5Xy92S3M9KjNJdC8zMTheME5rLzdFVV9iWSFRaV5YQ3pAIj07d2VoO2ZdcU5wWDt8Izo6KFkuITkqcSEpdkh1eHlxdzprPkJlPkxeKy4uYisjVDFMc0A6NF1melAsKCgyVnEvT0V4ai5g''@;'; put 'put ''NjM4XV92OjI5bGRhWWUzYFhqVXZGfD0sL0xTOGhGdml4R0c+dytxaF5qYi9sZGFePWhsX3ZjY29nYVpwLzR6ImZKdG59JW0/OWFHIzNab1p8cUQsRHxxK3goPWtINV1IOj4oR0dJNkk4SHMiQHF5KkZKSm4qRDpmWCF7JlVFbS9rM1Z7UCs8ZFYqdzdHJCIzVldmWk0mW11ITHpNLFhrJSlpcklB''@;'; put 'put ''akxYfUV2eDR0Ykw8IkBHaig1Pm9aKVgleUN1VV99OVU1I1pLWV4iZihXajBoUXpNJiJBX3xPQ3N7cE8rPy9haHxDajI5IUxbTDs8RSl+SyNxMmx1OGU4KkxTRTR8dSk1P21hektyPTdEKmd1SldeQ2lWSn1rMWF6OmlXImNQaT1ScG5DeDVHMUFdRTlfWF41OE5yUWYqaSFDSSk8UlRoMGVEVzVX''@;'; put 'put ''OCx2QDIrTFoqL0BXZURrUSZxe0kzTkJ9S10rTlcpcmJSUkI0MTJ1QHl4ckNrZUUoUCxZLiQrd0RXbEVYfmBidDtTYUNubCxLWElAS250JUZwLklySWBVOyZXIVdCV086e2JPRD0pclE0X0I0dkRUfFNsSXxrfG9PR2tXOiJiMiZ1SHM2WixgRVJFMUU5MWJIN3E4Tk56TFlhOlhUMEdeUEQwbzBT''@;'; put 'put ''KU4jXV9wUipTMG8sKXFEeVdUenFoR0NXQGRqXz4rYS9GaXFzaFpaMndKWkhzeSxEUXpkcnh7OUl6WEpoQnwpSG5KaTFadkBkL1lGL31XJHRPQEtANVdhYDBHVyt4XlJ3MnpSI3hdfE4pNTIxbVFqYmUmTW1oVkp4akNlVlpWJkJGIV9+dj1eKnZyc1R2XUM0KWxTJV8zazxDIlY4OjdeIVA8XUtM''@;'; put 'put ''L2Axenk5Lz5oV1B0OH18I0g7PGR+NXc3VHZ+S2ZGPUQpaUU7fHg4Jn4kRCZVd3NZVG9QPyF2eVFPW3skcGQxX1Ejd1F9dDVGW2QyIVJpTiYsaDpGaixpeTczO3AxWSw/TXlbRXgudUh+bi94YDw5dnZKeEczJDQoUXY9Pz0vdzhRLDlGcX46Ik5IJGpzSVt7WmwyVyk9Kk12RHkkdzE2KzV4bGB0''@;'; put 'put ''KUxoPVhwZkd9PkorRitDbE4lLCMrTzpLd0MvVmA1eGswMVlSZEIzOyolfFdVQVQxR2s1W3ZRdT57IUV3TEprTFtRcW1ASTBbcEt8NHhBLEV8cmV7dHhdRTZNNXcmWykvdVVlNz0zLiVfKTNzeEU2ZnhRIilRLEhWdWBCRlg4XTt+X3djWWM+KXU5OjhZVS9zQHw4aE5hWiRkKHA9b0VDJip7YSpQ''@;'; put 'put ''I0pfJHtIamtVO14lcV0vQ1hoczw9TSwoQT5sYUIpPV9STT9kO25NPE1AXihORSgpUVZAWCN2PFo8MVAhO0lSbDEkI1BHZHQweF90SXN0RltxSm5PTVtfXitvaGdmYzZgSnUyVzNiK1ZkPVBGNV06c3dgR046L0VheSwhLHM/bmMzdSQ0UFhUaH5DTzltT0JlZ1FgfHY/S0s4Jih1L3RXKjFUfVZk''@;'; put 'put ''cnF0dzcsQkZ3KXVAQ1lYMWoqZWVANllUZERsPDRUPlIvO3MldCJRW3dHPygqYnV7TWZUSHAiMzBrJCFTeU1SeGdGST1KP0Z4SihOI2FDejQ3eDx+VnsrWFVGSHhqVXUmW3NDZ0MmbFBedjlPMkZrckBNWm1zMyFmWW5gIUI4X0NSQVd9N0V1TzUhTztGeXx7WkI1c3g/Kmx4cDVBKGFDTEhSNyRX''@;'; put 'put ''TGRZcSEiRVptOkZXRUA6SEF3QllCaCUkS3RBQlNgbCkyVDREJjVgaFNAbFlLPnNwfGgwL2l5QTFRcmZ3IzJJdzJBVVI1X2hIPzEkT3JuRG4mczFPYnlhNF1HfWBPeGExVj5ZK3hDLy9SeWU+IWNNMS9MUkJqKTJXVmRfQjJtLGg6KF9GPFciMXxXZlA/KChHPmFLOkpaK1BpNEF+NkZ4N3dQYCJM''@;'; put 'put ''d1dHNlN1ciNNL1BYTGArP1p5KU9vK294SGlPcDRxTHx0PFouTkBTLy88Qm5bMkJhdFglQlRLMFhFczpIdTVbd3Y7LyJWMHVkeXxRbi5fYmo+V0h4N2JWIzpmY08mXiJCdFJ0Ymp4W0xILjEsSnF0ckh3cztXNjRLT0RuJVQ3YG15UHJ8WnckTV5ONWJHODlIUWVEPk5QYSpoIn5DQDk0JV5UdFF9''@;'; put 'put ''RWF3THBuNndWcUoiMC5ncDhfT1FkY3ZmZD9VWktxJTNwMUtfImRTO21FKCk6JnJ9dVNbMGZ8Rj9HfD98K05mImI1R0dyXT4qMVNYNkBzUlBSeD00SXxgMUxVRTEmc3JCMFk5SU83VDdeXTp0UWxYfHUjbWwic15gKWUyL2RifCYhMitAZGdOM3BhLik3LlBoc3dISGNEZ3F2S0tQLzc3N0htPztl''@;'; put 'put ''QlRqYzQ7JllkYlt6Q1p7NlhJcXNQeXc4IiY5eyhfNSMxO0JIOCo+YUg6UVpRRD5MUz5iRl1lVyk5eWZMRGVsWEtWciFgajlHOlhuJV8mLEZ8eEgie2ZLSnZlZExuTTM+YmJOdlF5d1BwNyMlS2s+bjZiOmVVVykuWis5ez0ybC9DOFg9O2xnbFZNfFFGUmhnQXh3ZS59VjQmJSF9a18mZ3RRe0lh''@;'; put 'put ''VF5XX2hpfVJTZUtJPmIhQV02KjZwcS90PjgiN2Q+ZSZ8R35rX1NYe31sUXhEUGouREF5WGg8eiQwLldVOzZHXzY0eHU2QVtWa3h1UStnLGZ+cU8mP01tNEpYelhtek50ZEV3UVFwImxOdCp9REgrOldHcndueHh8eih3aUtSJnQzcTpZY3hvMFRLLz1SYngrI3lpRWNIQ0c1Yy4+fERRUlZIN3xI''@;'; put 'put ''UkxhS1g0b1ojMTlCWGUjOEQ8KiVXSz5XWXZUOG88RjJAXUo/aGd3RjticmpAVDl+aitPKHlmPG1HPEcraVg+cnNqOVY+THk2UU0+KzNobl11ZSEyUThKWDxAWWFxbmFsamZlRWZHNXsxeklFb0VfdDEhRz10MHF+T0dke2RWJlVwPDZgN0smY1ksNUthIzloWjFCc25DQWdhUERsdFdxYkZ9X0ZI''@;'; put 'put ''cHRJT0NyJjczVW1kJXUwP0NiZDBdMUhaNlFRaWpOMz9jPXRhbGo9MGdrSyZNWU4wQ11YYiZrI1EzKyRZY09We11jY1ksNWQhRXwoSzovJFo3Ijx4aDdlSmMseSY0V0hPKkIqaiU5b09PTTBEJFpidTpSPUc4MVIqMXFKT10iZys2RFp5TG17aWVvS3w3dlFWMnk5dSRNT2lVcSl2aXxxeWhjQ3FX''@;'; put 'put ''dUBKczR9dEZIIj53JlZFW2hGJURCN0ZSdHdyMHYoW0pGZiYsYEw0NV0oW1ZoeHRWRU1nNShaTzgsQFZIYExhZyY4LFFoaz5EP0Q+Ql91JDZ4IjwlLjdwVXsjeGg3ZUpIWGUzRXB4NVZLaSYlMjg9fTxbeHJnLD82c3xdd2hwbzI5SXc1SShxeSQ4aD5AYCYzRGomV3VASmk+UD9HMXA8Q1ErP1Up''@;'; put 'put ''UDs3JCUmTlFLPng3fU9vWD5lLDU0d1s1amlaRmI6N1ElcU94Q2spUkpuPk1vekR6fCU/WUYqZHg2bUloNUx+TDYhYHdORyRBRnRfKTN8ZnRtbl9FTkpwcVBAanMrQ3pFbC45S1EpTVZEN2E+YnBoODlxNXJ4VzpDZ0Eie3wqdT09eDtxbzVmbD0qVCYybyUyTWRQRyEsRlRzITFFWiZeX3lRRXVP''@;'; put 'put ''el8hP0RBaSpVOXJvWDJkaCprSCtWP0c6bjN4diRbIzVVa2BzbStsQXhGcThZRipvZ09FWkwkQV1AMEYoX15LdCg2eFRVVkJxbnt1a0pIWFEveStQRTZuSklML1tDfmZgQkIhPHNPWGQxSU9dIntFeU5URjUmcU4/TT09JWd+dEZyVENhW3diZ30lN1lnSm9ONSZ1OD5ZNSNJNTEyQGYjPT5tJlIh''@;'; put 'put ''PSUmdTFUekxPckkxbmtuQ0JWdGNycns+Y3owNmxCM1heemRqJXdSeGk+bTNtVkRdTUpwaF8+REhINldyenIiTFsvWTBBIkEseyMwXkU6eVg9NER8V3lqM10/MFFgUDRYZElPblVTPnlpX0VIRWVjbWoxc1s6cnlFWCZePzlkfTEkNixvcCgqT341bXE/KWdbImRVezJhbm94STdkWG9oOjNQRn1P''@;'; put 'put ''TFZAIllfV2wlWzNEc15yXSQsZ2RoYjd2NHRHRS9PM1FsX1NjMyheZmtRPk0oSFdxPTJuYGBHK1JPIzR4eFlMelU+cXZDSEtwUlFAMSR5UVRkbTZ4QT9+SHM7aztrSUJdJk1NZ3U7YSpWYz93YnBVWzsjKzk6dj9bZHg1a2gwJi9nSWNpWX5xL1ZFJi80PSVDeXB2eEBKX31uIWdifHlZdnJyNFFJ''@;'; put 'put ''ZXNRdGtbc1N3WGRCZnhuPmQvTCRKZVU+eSo2YlNoP1czQ3czViZrT1lzQXtDOmclPzs8PzckS0JFVnF8fHhNYnwzZko1JXxnPz4iK2ojaTNUJmEvTU8mWVJ+fEZxcFUpNk93L2Z0MHI1WT0lRVkuSjdGNHxpeGV3N2N4NU9FRG5Je0BzVFBOPXp4T0VoUz5icStdNnY4enNQRDF3cElWcnpgclZ2''@;'; put 'put ''U1hDZnxNSiU0YyRKfEtZIjJ4Q257fiUwJFJ2WVkkdjg5OEI8e00wNzclbiJ+Kj8xQW88LjNZfHtFQDt3TFA5eE4wY3NHZl9dKlBFN3psXmEhZUxRJl5GfT1zRy5KTnYwJjs4NmBQSHZLO0dycjo+KE9fNURIMSk/ayF8blZeQTEyfCx6RWImUUlnSTdiIkBlMWxiNXciL3NPQH5JQis7QT9mM3ws''@;'; put 'put ''Nm58LEdDOVA/LkV6JTkrfD0sMjRSMWMpU25ZPk1RcVM3R2JxX0UmMDFhOmpSRCZYOmh6QHZFOG5GYk00XkIqVj9HMGN9fFFaT19WJlcyMy8oVT1gSDldJV5gPEYwPTNeNnsyJEVuR2NUcWY/WnhmMiMmT01iW1JJMl9CU3lReEV5d3lZTyZoSFlGZkJiOl18aGNrRWRCfC4maiUzbzdkT3lZYUso''@;'; put 'put ''Xj47SW5IcDNPP0QsTFI8VTtOI3RifmdSNEpBLko6O0NkO1pIT1B2IkE/cHkpfSx8R0cseWtYfHFjWE8hRTJfS2pEcU9NVzJRdU5WISs7cEc4MmwydWk/WUBjLEVGeWJicGVZazlAWUVwaEUqNUYwIl8oKEl9eiRmUiwwTylDWiE2US5vJj5CUSl1VyxgKylPQCVdQzRuNnBbWzxvU1VHe0g8QCkr''@;'; put 'put ''VGhzTSx0SEVaUmFpViVMZlpPMX1kMUtUcmUqNDk8aHlYRCEwSktDTSQ8dV8/aUdUNldLPFMrVHViRG9sOGB3K3s6YFAmNzI+LFU8fn5wLlhfYkpOJDZIQztJWWxaV2kjWEZlV0xlLHM0e2p1MH1tRHRyc0lKdkZ8O2xSMmpEUyhxYy5pbCNqYl8kV3loVlkyLiNoZ1oqSWNQY2dMOitnUW5IblFy''@;'; put 'put ''IWdUPG9Yd3g1VyY9KiUhITd9T2hKISxBLHxXdFJxTF5GY3xYcVNDcDtjOFVoVFs6dEc4O082X1RTLHRze09ZQShTKVs7c3h9OS56MDxIWGRKOk9Pei5oek5URy5zRVpkVyo5dmwhdGFxIiM3LDAyVzhjPlQ/fU5MaC48SjhvXkR3cnBzTTIjQ2wwc0d9bmBsNUc4NFhjcXs0R3xWaCk7NkpKdnY/''@;'; put 'put ''LHkjWyhGUTU/c01DSE41JFc/QEc8aU4vJTlASGA5NX1CRncjODBXXUlPPWl4UzcoSjxNK1JfbF5TVW5eZCtYaGlEYkNAaV1vNWZXQTBaeUgvZXh3SHBPQHVdQDxELnpLT1hjdyZ8MVJ5KG5scnZiaEI1Mk1jb2VKb1ZTQ1E+X1ZRPC9WcSVMNEQ0MUEoblpqU2F5XTE0e2h3NEolIz5HdDx4aStw''@;'; put 'put ''NXlSYzF7WE5Hb0REM2MkMTkyRER6SyZleHt2Ok9LJlMzY3F8QyJKe01rYGl1eTk+KCNCMDBFTil1eFsudiIkRyQ4S1s3T2EhZ21CdnRxaVBQSWYuRSlCJl9lalQsVGl4QTgwKV4zOk54aTdzS05yaWxAbCUjZUxvRGFJeytlJXNuSHRQRHI/UihhOn04fndzeytKJSozaW0ib3xGYFtXWVA6TEIw''@;'; put 'put ''ZEMyTUpYMnI3KSVSdHg8UCM+Yzs3UXpCRVo8QUZ8ZjBUc0g2Q2FlWil9IWc1NEJdejJMTUQ3NTRtW2xhZUR+X2lKNlg+Jjp5e1NiU2FjNyF8enF5d2xaQyRTaG1LdVRoJiJkUFU1Z0RWIUpyNy5NYn1CKkt3VTBlKWlEST9DeyZJZms+M3ohTjxdVilUaH5jTGI7ZHExQm4wX3hieCx9P2tPIz9u''@;'; put 'put ''S1VLVkI7YzdoSTVId08jX1grL1cjRTtBJUgmYWA4NDY5Oit+XnlzJHlCdWFxXU4yVEBFUHhuWnM0TWB8ZEs3XTdOVWRtcmg7TzMvS0c+d3F5Y35hL3pzVi8kNi8jUVJPfkhtdnJvLkBUVitsc2xZYU1zM3ZsX1R6XzU0MFEwKz0wejc4fE1pSl8xOjpxfnpHV1VAcHZGSDs0SjclMy4jaz5CX0pG''@;'; put 'put ''d14idm1fK294dGZveWJEeE5fQVN4YVtfUzZ5KSMzL3M2cyQ+RHMrRUV9NzFtUDV3IzAsZVNISXtVQ3BjI3ZicmtSWjE/VCk7ayt1UVRbaUIrIzBGZXJhJUMmMyRvXUpSYXtMWEtuPDpLXUYqZT1lQF4yInR1ZjxBM2hSdXVyX085d0BKfVNZXXY2Im4oTj4raih7UiQ5XT1Lfnt5RVZkXj9Od2sl''@;'; put 'put ''L3ZFb01EbXkreVFzb1kxRzN5ZTp+fSFIMWRQWDVVRDNfSVgyOWhoXiVzaHc6ZVg8PGxBOSZFWStKbDUpMlhrZEdIezQ6bl4+ODgkMSltZiVlVkNhYHljS19ELjZ7RFopYEdTYjEsRl5bL1kjOkFaayZpai5UeU9JKmQ9JT8iSl9mdDs5MyxIa2IpQn4vdEtOalYqbVBsQkV0Uytsc1lQO3BiPSZV''@;'; put 'put ''LixxJmtWKyZiTD1vc25BXSZYT2h1eUJ8NDx+Wz9LYmJidlpzfCsvczBuPXl9cTd3LCFfdypGIk1yP2tEMU5DOnl9RGh5cU1sdVFBcUFYYC4zckV1bjUpdHl3L3FqcDU7MCZAWGpRTWo7JkVCKyZKO2FdOWw6XmNtZnJzW0I6YytMKl47Zj9tMSFeQmJOJkheQyYvdCkyXzlrTy92IkQxKjd3YjBL''@;'; put 'put ''dH5aRS45YUVwUzFxQGFCVE4lIVBYYC4xW0I+Vzl+KV87RltJMylJVjwmfjQoYWdZMkRmI1JIWyx7ZUklOEcxcnZQdzwmc1JaSjFtdEc0cj13eyU6aW84Ink9IVs3ampQbVY+JEV8I3hPN1IxRCFydkI5LH49dTEyc042Ky50QVRncF9oQTlhfFhONXV9WUI5UTY0clQuPkJLNyNfXUBmW31xS2Vl''@;'; put 'put ''NSZeTlduQkUqZFlILDo3OWZvc29+UjBeL0BmTWBXPjMpbHE3IndnOT1aV3ttOE4yeSNyI1E4Y2gvLjd6LiswSFZKaj1QSCZLSSJlTX12SiRSP2twOD51PGI4b019dk8+NHUxZTh9dEw4JEhUZHYyQDphVnQ1WmlhekJtI0BFck0ja1Jnel9vSmVuSV42SDg+fjs7SGs2fXY3S0pAZD5EPEZ+Wkxs''@;'; put 'put ''OERQZGkxUn5wMF5WTn07MStrJjVJZHohK3k9Y3puLDkrTig6YVJ4N154dUpWcEw9Y0k7fDguazxHcUxIZHZReHd1dFRVKnNXMWEqcV11P1tnS3E9LkRnJFF1flkvLylLbCh2WHo6aCQsVS8mZ01Ka2BxN1hOVClIdFd8SGl6YiJzZGdJKVpDezVKMSN3OXxZVispJVRydDZRIlEiQCZaY2YxWWZH''@;'; put 'put ''fCZiITZRTSI/MGt3TXIwSEFaTmokYnJjMiphd2xUJEdiTTVyU0QzTV8za2h5YGUwOlorSChaK0goWmYwYmIjRyhMQlEsbntrZkxBWD1MfSg3OWNvVVd4fGFSJCwxaX1JeCtlP213cyRJd1pJeCtDWC8lfXdVP29xITkvKU1vV2p7dV9Dc2Z4Qn52VEA1MS9IT1c3eDYoNSFuTG5MTitEYH07VUVO''@;'; put 'put ''MW1XdyIyKHcoZ1V3eUpAKkllO3Q8RUcwcWdndENUbiwjQ2olKDljIkdfKk5nIyovbGdFeV5YPFB2LGV2SGcqKG4hczpLJntedktLcHZnP29aP2tobT0kI21bTntDKXQjLnJCMzB8Q2YpR1IheSE5MkxTdSE5ST9APTM7VGU/OU9FSEsmcXlnJFVDKWxuQyVFaklqdytkeVg4eFhlVl9ORmNZQG9f''@;'; put 'put ''JVp+NT0wKlpwTFhHSFVLTV5jWXs1NzBSaDZAXlRQcXdJLzkyJUtkdHYuRiZyNFgsW2NCWlpqY2Yye3FGY1V2MWV6Y2oye0tsfko4PUwrLzEiPU9CTmtxdzR9VE9gTW13eT9RPGZzS2g7XUg9cDopYFUmbmQiR00qK25ieVU4MFokekZNNj9MYntNNX1LdHkxOitdJipOe1pmanVJRHkxWjN1c0Rj''@;'; put 'put ''dHBpRVVsTnNmUyt9XzVQdUN4QXp8RyQ9c0RMVXRsQHdxWTksZWNBRitPIVRWNSpVbmZIXypkRVMoXVNtdyVpUGZaOHhsPG5DMXxiL2xscW81UUhiKWd9RTRJI3VwakM1R0M8KiV9cHohentTeXAqRXVDP1cuIkJnVj8hXzdxWDN5eSppPHUyM3YmUjdrPitgOy8lUl5CVDpqZG16MU9uVikwX0Ay''@;'; put 'put ''YEZhPCMoZDVCRU9iMTMyT045Uj43IVomTnZVRUgpR1JwcmhFIyk3XyxhU2RsSlNWZXV2SSJGaEE4I2F8WkYlX1pGSj8kVFN1UFZTQzwkcVM6VFMpT1ptS0s/ektRKTBkK3UuVGdCMzBkKU1WZXVddjpDYnJtIXdKWGZZVlB4bSVCPzBNWCQ4S0pZc08iOkQ0YixoaFR0WzUidHVXTHdpNGZEaD9K''@;'; put 'put ''SEZHV2tSUDRCME5gTFpMODgxSzQ4Ll1GLFBOOzRfXXtIaVZoOFhITGI2KnZTLzxfa0hwI2lNYn51bzYrfiVpMmRnWSw1M0QmV0VIL25ETj5ZZU1aWFhYcEIjcjZDel9KRjE0T0ppaTRSSkJtZ0R2VzYidGQ0PTguT10iak5nKUIuZ2U7Ui5UNk1AK1thR1UmQEJ5eWVRK2V5L11ZVld3TmBkeWtz''@;'; put 'put ''RmB5eS4xVmBDejR3JHdtcXpXbl5GbGopTGllSU5pQ05qPzZZQEJRdERIKF84c0BJUypBJChHNih9SElnNEJqTEtGZzUiQ0lSTSF1XnRQNGlkUzNYa0pRTUk/UTRnei5GWHp8Un1pWmUleCY8a3dUalB2bSNlMkEhNipQMHJ2NnkvT21pL00sSCg1M2RgQk04Z2dHVGh2XnZEbUwqXUBiIWxSe2Uq''@;'; put 'put ''VD5lLmhwOTY9cjttJFtDN0NFK0hUN1I3STdDfFImOVV6dXVndyxhaEVJaXhoYS9gUVNVfnRTV31DZn1QQmF8UEJLc0lYR0VBJDpSUn1TRCg1YUxqIjxJckZrRShJOGlTdFZsZEhYaWI6T10iV3RSYjJdOHFTNGY2TkxiQVs/ajVLIUhga0pqOlFSNmI6UytUNlUibSE/I0Q/eVMuZkVsXWcveWtt''@;'; put 'put ''YUM8RH1aVk55MUB3bGpZelFSZkBZVndxRmB5VypZYTM1TDBpQ0RVSG90ZyF9T08sPk1jSDR8Plt7NkNOZyFZVzRLY0pMYC9uIjN7QTlHeDpNQGFCSUx0ViZVeV13NWt+SixYZytyalMrMkdgOCJ0RmtLOUczXzAhUyhCK0p5d3woSUYmTCsxQ01XdEJCVms4d0ZsX100fDMoQSlPRFshTkZoI1l2''@;'; put 'put ''OkNAO2lvRl9KWkNWYH50Y0ZbMnFjQUBwTVloc25taSUvW0NYVjZ6UktCYGk/Rl9eSntMNX1mPzwpaj9sK1cmLHtuVls/fT9iPkhTJlVWfGs/MiRdZDVTJFZ5dShDKXw7bkpfXkA3WVZ8UlIqT0p8SVNaQXldLGFTU2QyI2swSEtVYEliSiNGSndqTSZ8RkFva0hYe192KVV2ZVJGbD9JTFI1M0E8''@;'; put 'put ''L2J1ODViKWFdTnVwKU1haEZ7QlNDbWZuOTVKP0Noc18+O3JTdlRWKXpFPXRycyhyPlF2N0ZfYkYwY31yNVcqUlJfWnJlekU6OX5xMVZMZEBsc2h4K28xYzlzOVk/XUhVbC95dGFoUCp3b0Y/WzsieWB1W2UuJmlWNTg5LH1PTTMxQ1p+PnFAbUs+TzV4YCVbV2wxIyQ6ZC97N0p2fVhMLFRZTjBZ''@;'; put 'put ''dy5XJUI4bW5SPy4mMV02TT1xVHJ1RTZnRG9WWG43U01iXmk8Jit9R0k1NzA7IXVTP0M2I3hOPGZEfGApQ18ycUh0XX57ZUl2Tk41PGE3Piw4KXBOenxkXjdlTFdxIU56cGRPYj44OC8/Wzh9TygiV3E2K2BLfC4rfDd6UjQoNjxbcUk4emRfUSxmMDdibWpmdEJgPmdDaClxL09SSWVMYTEwZGxW''@;'; put 'put ''X3ZdYilKUGc2Q2tTOTIoJXVaMSN9Q15DN3FbM29vOjgmYVpTaklrTC5rOmhlX1IuPTohNTIvS119O0lfNDo3L0tdVE9TI3BxVVh3LiF2YnJiTlhoWiZYR0FsPVhQfjVTPEBLVilWZzxrL3VJK1ZSWXNiMTxUNGk9UDBZVkl9Tl9zWzBURUwjWkU3X355NyoyWk5aVywmRW4xJHUuQjo8LDhORloj''@;'; put 'put ''Q2YxfS9xOzJCbT1CN1FsSFtLMkljckVyTWpHbCNVNDspZTd7Ty5mOm4sLCk9TyZ7KFAsPEgyYHdNUXhXYzE0QilFLy8+SntCRDBqUVQoVW1yVTVAa1c1JDM0b0BgKXUhSjtfZnw3KTJRdkIqQjQzOXNJbGdkNnxWSGF2dShAJldQQSNTUy9KK0FQPlduLD5WMVp+RT9OeHRuV2NqP3J7U11fN3RS''@;'; put 'put ''VT9EfENIR3EvV0ZJZ3F6KSQhZ0RUVWAqfXoiJnJwJWB2KnI0K0d0e2NnYF0yUWI6Z3M4XkkpLkpVPTQ/MH5DS2Q/IT1NMzcpMHtKeDplX0h3d05uTmhNTXZTUjwxfjtNblp5Ojo2NDlwLyxXWCtPaCNRbmArPVYwQzN+fnV7IS5jK3N5OnJqYVl3ZCZpUm8uW21EP2VbSV9aJlpZb3Y6VmwhSlA1''@;'; put 'put ''Zzw6MUl7XXxyYSpeJSYpLGJwZHRYS3xNZ2AyMGQoczFqYjV5P0o3XTpkX1YpMiN+aldLNFV0V05yM2ciaU83VT46U2x6LDRELFRTaXNEYGpQUG9ONWBfM1FaaEFNTmI+P2kzXXE7ayFwPj9SaTpCO3EhLlVPXlZtWl5BRXRmc0Q6Sygsa0IoL2NHcWR5c1thdH41ZCppM04mTVVjRU1hJn1ye2ti''@;'; put 'put ''IkwxT3JPJCJrYCo7WWsrWlg+Q3F8SSV7JCpvbEdxWjJecU9UO3FZQ3ZWKkkxWW5DSGFzMVZySmBbUGEyY0NEfk5XQmgjPDVFRX14RDElb2RtQEsyVTlMcCI+WTNfNE5CYzg6M2omNzp0U0dGUH1KQ0QmJiIpMlU5SnZvYE4wI05nUT8ueExUNFV2MW18dl86ajQ5dVcwXTg3Q3UoNk97S0MsWWdq''@;'; put 'put ''VCUzMSl2aDlPaDpyRDdkSGZRfDRdZks8Wih3Tjg9PnYmV1N8Z2JpMFQlQjRyJjNWbytZNX4lUjFZMiVEYStuLyY1cTE2LGFsTW5GVkpCcSVrbE1SbmtNVmBjK1FMQDFlK2pRVT5EWE5DKEd5cUl2WypdKjZOWEx5WCpGYTdRbH4/SkpmRntdb0AvTXtXY3ZyNmw+MCZXe35rUFJIe0UwOmVaLHJU''@;'; put 'put ''JVJbRT9PVD5pPzNmUlMwaEVIfTNlPkUxO0IlQm5nbCVMRTtxYF5RXyxYQF4vLkxATGJlWlJ2QEc1UV8yWW9Kej8mJHE1NSw7W2NDYXorYkZEZn5pdkhNeCg/PlQ2VSRJLDwhdytGZV1UR1RVJjN2Pn5HY2NycilfOHlFOkNXNntnZzApQiE1YkQpOyxVI0MkeWt+W2w0VVhuZVJgPWUxOVZxX2s1''@;'; put 'put ''KExSdSI4V1VOUkJ9eH1BSF8rSk5vLyx8ciYlYjV1ek43c0VlX1Jfbl1TcCZ3eDRmNGYmZlU1Zn5JelRaSmpxZzloMXtufltnW3pRQkxBWUJPWShEY2g6WiF2I3V6ZnQ9YDgyP25CT01uNmEiYyZGSlAsdWA2NXhzOm4rViY5VzRiaDcmMzAmVSN3U101Sn0rY1FFT09oUG01KXVMeyQrVEZzWlU4''@;'; put 'put ''YU1yNXFzOC9PNXtddlRXbD5VN0twWEA4JUVJVGUobFZCOlspRFlhT2pWXnF6T2IyUEZNRFVbVV9+UWRvPHVefW9qT3gkeTE0PV9WKEk5ITcmVHVTTD5+fmNdb3ZIQmVINGBeMnUqdmxGcVRrUzhGX35RUW9NKzZ+OWQwWTVrWmNJaTo7JDVSXSs9TSxAcHUoPXFVNT4kRW8sUUo1ZnwsOzNDbFY7''@;'; put 'put ''NjE5PHl4d2o5OlZBOS5pMzI3NyN1eDBsJHo9PmM7aFA6bCRlWChsYUspcUVmb2BFKFtCY3tvNW9JKGxUPzY9ezhKbStxKmNmO3lZVTJiMGUrIyUpYz1iVEwvezswI2FiSnw4eHViYkw4S3hoU3I8ZDo5dXFpaXAucmZGdDYmfDomKGw0aytxWmFEfTIwJSxaMChEP1MsaClxMlo5R0IoNTVKXXRo''@;'; put 'put ''dnRJO0pENmt2OThseUJZU3I8bStuSmxfUmhSelZ8SHhAT2oxW29bZmFsR1s5bn04K3V+QFo5QzR4Z21OLyZzYVMyO2ZiXUZbM259OE5wfEBlRkYwRi45SzQhfHR6PSYjKXE4WGFjWld9ejdhV1h0O3s3QWNjan1DPSJqTmhpN1pjWFIuPFFzdlh6OzZzY2dse046Uno2WUNScTt5aEBvaTV9TiJ3''@;'; put 'put ''eFJ9bntKSFRgL11jWHpeZndxT29AKVJsfjZNS2oxQVU/c01uQTFXNF9ndHpbRH1pMSN9ZHZVRD5qe3JdVm5vfiYsM1RVLlFvWzZEJGE/fEVxT291OG9QeUwlNmVvUDVZelYiX35DQzUwTUZIeSJPQXlBOEx9ak5IO3hiWGRxXyw8MlpCOCo5aE1bZlFsR1t2YiJpQnU/dnhsIU5nbEdmfjhJcHtA''@;'; put 'put ''NktsakU7UGZEWnRIMDQ1Rkg7UmJuajs1fihjaiFFTkR4bDM2d1JlRC5RU3wjXSFhPXw2b09xW2ZdWkRbMUB+eHdscUJsU3I8K1RROD5GS3l6eX0/NFo0VSVXQHJLRjB4TFhzeShDYVYpeDVJP14pVDs7amplL0JqMnFhY1ltVEBIYVNiKW0mel5GZmlUdjI9UEZ4bV4mJk5hISp6QmsrP1kvPi5x''@;'; put 'put ''RURZcTFmRUdDYmB4O00kezFPQ3o8am18Oll6WXIoK0MhfER8WkF5XkxCTUxvdixiSSMsVD9vJFN0antjVTJpQENtWlhbeDdNN19sMXJrciF3Oyt8N05reHY5SjN8PCl8XyJTcz9WQEl5TVAxUXJlZUx2b3dQNFguIzxZTmIvWixLMXE6Z2kwOCM1eiYxPnIoUVNbTCRpMTB9cHJEVnw4dyN4YClx''@;'; put 'put ''OUcwaENfJSFpMTBga142NHNlUDU4LDRoUy5+YShRR1t7Jio9eFMuUi9jeE9GMG8oJWttcWUsQDg7bVc4WjBoWnNuQ10/LF5henhaSnI7MSh3b0xiSDpkK2krIj59c2VsU0JHajs1fShjanomUEd4bCU8IkAoKyFhVnN+JFRVcmg9LHJFXlFVOGJPPTE/fSZRPUBmKSQsJXx5Z2NlNC9QMjQ9JlEq''@;'; put 'put ''QCJqaTFnb0luUjpfJncwP091YCR+UnohI15aY1MpUl4vLnssbjUqYVZNOVtWYDkzXjBvKi5FOT1ZRlUsSSEhNk5lS2pSWFQpSWZjNl9JNSM5SV4wNGFUL1tMa3NrVnkyREJyOE95YUlyXUNDbmZgJmNVK0FUNXV0JnVJP1lxVjBQNk5OVlZxeFh7ayFuWz1rQGFPW1pnLlk6M2hjMXNaRkxnPjRk''@;'; put 'put ''eEZhYmN4YktYOSMxTUlaISEqKkg4Rl8qQDhZZU0yY25uPHZFUj43UntTXnE6YHJUJDFbLyl0bnNrcmNtYz1Ba1NrcX1yWVUjQi5QQHEoPj5sQyFzUG5FUiUmLnkrMiJ5QTgvRDB2RFpaSGRxaEV4bCVNb1I5IVgsXWM7YCw7OygpXU5pKXE/T25vXyZZMHxJcWhGLEczcztVSitxOk5gIV4mPiI9''@;'; put 'put ''K31FKV03NChxYU5RZF4mcnpmd3BoOCt4UyZRYkBwR155L3xxeU07SFplQGNrR3k1Qlg6aEFNOEpFI3pZeixCbk07T3hVZEIsI3Z0d1IxT3BoanR8SXBoZnRJbEJ0LjhWVHRQYzFJYF9EMmVybU1ZYzFIYFVEamZybWpUSm5Ubip5VEArI1FHWzFIUXErZCxAbzAuYXEpejUwMV8hS2w/UjM9Zj5D''@;'; put 'put ''bWQ+VWhjNGRnQjV5T2R1SEQzWXosdVd6ZkVkI2QrTzdLeC4rO2ptTCpdIn1qJmV5VSVqZ0xlbXhKbiRKZSV4Z344Q1kjS1ZqImVNZzIrVzhlPGhWcStoTUVFKzUpcDI4MFhEZXQqUn5xQnw4d3V3b01JVUQsI0p6JjFhSGxoSHR9MW9oQStoJiVRfT9pO3pmVWJMYjJRXz96LmgxbX0wNjE6U1lq''@;'; put 'put ''U3I8VmpVYihUMlFAPykqfExHYXxYZjs9WDdqOXp8aWp7RlIqODZ5dChDd1k/VjRsQU07O2Y6ZGpXXUZ+PjBVeTpeWUMwNWROYyNFdXg3YXJ8JlFnZWFEfCI3YSZuO2ZQT0FEMnhoSWteYGZscSJALnovSUBjMUN8Ii9RdnxEQyV+akp8SGUkSWNJeWBXZz5Pam5xST5hLGlPJiMoRksuImAwJGhA''@;'; put 'put ''Nk93P3lWT28+ZlNkNDouVzhqXyE/Jl93VSVuaGlZQ1lfOHo6fUB4YyZ1d2xsNFAyeFNRaiVFTlZFJClxM0dub3RnNEhkSkh5dE5fVy5MRk9+KiZ9VUxQPHVqI0k8UXdONkw2TSQ/ZEchUmo3KCM0eUguP3xvcH5eTUJaZVA1VEVgWyE7aEMoPk84KWhjRTY+ejo4XWdFOVRVPGhhYkwrfSRIP3ZX''@;'; put 'put ''NCVfJCpmfEQubE5vdyIxMX4vVUxDZ04jdjZkZVczW2J6fX1vNFdXakN8RGV+RVIxWiV9RiQpc115I3VPUGh8Qm1zdEAjM0lTaEQqckUlUXM/XTckLGl8KUs9aiFyQ0YyfGR+OG1PQDtmWVpHW3xqLjJMN3djd2R3I3pVSyU4aStpZFlFVTRpPFF1MEE4QFZgX1hIXk8qNHpCIlhvOmc+cWVbfCpx''@;'; put 'put ''OUVhUiMsZXxMbFU4c3JqLGU2OHJrI3FmbWhtKUszZVc9ZmphJSw5JkU4SnRRfUdrbCFbX2sxZH1YNytIUWQwS0poQn5RR1hGRTh3aFcpdjgkYTgmOFAlMUc4Y3hKbl9Idy9+TDI0d11LTl9OcjFMTSV8NHVPTW1HZ3d0Y0tEUnh4L1J7aEdDYSsveVRwe0w/aUZwNz1qQWBLaU5fPUlLI0tMV1tP''@;'; put 'put ''O0tLLnZ2fFBBKG9fXn40eX5wLjNGcD8xNG95X0tbWE58UmBzYD5TTHJlN0VxbVIiI0d9YSV+ekFeImE/UyRkR0J3bCNLKVJhZlV8YF9EdixbLkp+NFFGNmN8OCVvfEBqUldqVi4mVG9hZUtMb1tmTTciQEpOeE10WmU3e3QjTXB1O0VlYHs4U0ArfClXSmM1ZXdIQkowTjV2KyNiRnBPYzglPyhp''@;'; put 'put ''alM9Qn5aXSs9SFpCKms2Y1BfS2VKe2ZuQ3t7OFMjRCNzZ2p7X09AcighMGldQERqVi8pXXhFNz1CQDVbOTVZJV84PkpYOixUZ25nRTJ3PDhnQ315SiRPaUREdm5QSmVPdkpFe3toPDFTNl08TzV+ZzBFRFIjekl0L1lFPTxmVHEiQGdpb1RRKSsjN0Z7LF5ucmUiUyp8MUJJKyMoSHpLOzRXTjJC''@;'; put 'put ''QUJSKFtRUSldNVM2PXhQNkojQEBmezt9QHIhJHNtbnM7e0wwUz1LNFt1R007IVVuUzAqQGZJWn0sSGlBcHx2aUVLRmsuUXxmeGBmX3BBXSE/S21LOngod0lSIVolZjVJOl1OYDYvMVd6SDouTEZDLyhHRzFaY01WUCE9VyVqNCFoZThJOl8zKmNQLDUrelZxZyxlUDZIVWMxeV9mQ0QwVTg5b09d''@;'; put 'put ''Vy40IXcod1hnM0JXX3shOClSNl9nZUl+eGxgLCtyWE1dfFt9TVU5bDZoP2RbfSlNZjtPVU9wfUBrfkRLSjJ8X15md3ZWVkByYDApNl0sRl1eZnRDKng4ZVE4IVJxP1F7Ry99c2U7SigoNyp8NlZjXV4sTm1LTHUhK3w6bGY7L1Q/P35AcDZMOkp7KXxiaWY7NVR+bFlVWmZzei9AMCsqfXB+Rmph''@;'; put 'put ''cGNWOlJtejhsNzJwbCtYMlF4IVckWzR6eU84em1Za18hMmk1MHowKHYjclspMVdjMV9sQ09XblFuPjxTWS8jYF4wbnJzSm4vR2FOWDhda2lWQWVTZ0xlNnZPbysjXS5EW3xALno3YTdMOF4kflllMGAway5DZClBTzVda098ODtYPVlKbjZMRmBAckwrOnd4U3lqNSNnWCtxU3lqe0ZyUmgrLj8s''@;'; put 'put ''R3Z+QDYoXnAwLnJlY2ptWWA6QGZMa0Zbe2Y8VjIsMUJuTShjS197OGN1fFh6JGt2N3pNO3NtZ2tVezFOX05WPlclJmdxd0Y7fUcuZkxLWWpzSSs1W1BfOEYjeGA7SXFlWlUsfHFsdTY2RVlLTmVkOld5WXo3V3FNRUQoc3VJQCM3eHNAdVFwdD9tdTRUNVc1WXolcig5d1RpaUpIbDRXQ2ZIR0hH''@;'; put 'put ''NTs6eTZFclYpSlV4VihEZUshNXRMam4lP1lqSkJgQ3d6al1ueG8vN0w6UkBJbCJuPD8+dEJ+WmxmaVZmSH1UeS95T0Vrbj0jNU90NyhCbXRGfWFEIjxJVkFJTiJ7Jm1iKl9xKDpUR3g6QkpyIkkpeTwhSkEhSyI0Wnp7KzJ1dGFVTUUzRGJBSGZDMihUPnlRem5FaXt7PkY2RHkwbnxKclN8ek1m''@;'; put 'put ''eWlpQXNlP3A5bX54WFJHWURldTBUYVZ7QEYubERhQF9FIUAjJjE/R3coZiRHZUt3W1MkPj5PbF5HdnJIT2VAQl4zL0JBTkhzbnh2QEdzTV1MVTpWMWNCNmQzLForPkxZXTVGc1U2QWF3cFpjeDBUNDgsUDgiSH1hS31UYXc6UEFYfHRWaDx8Mj5RPyhNJXVob2hBYUZ9Q1EodEE9PzhEOlZxWjdB''@;'; put 'put ''TnZWalN+TkpdcCkuTVs3Qi4xSUIsQnJTNiJORF1uQ0NjM3Q/SX1yLFtmRV5We1pwQ3xgTGEkPmI/KitHPiVNNnRPJTIvajQ4bG88Q2cwWSp5cmY6MXhjLFdKWSNNUTdtODh2VVdOO0xXTWU7ZWleR3lBTTR3IUgwJlM4fCwzaUImY2N8Uzd3XnBTYSRafDhve1Z9W3tfa2RGKUg0ZFguUEpxck1y''@;'; put 'put ''ZmU8MXhxYXshOH50aVdvK0RVPUpMcj0wSC5IWWUrNlE+UnNgZksxJltEfiwxJltEdVpaYU95SGVvKlBKeGwmNV1kSXU2UV5mY0kjfExLSWpkSW88TEsjZSNgUkMsblA3JkdsNT9IQEpbYXJIM0Q1WUdYcStPMnxrR3QyaDVGIVdmPzxjbkx2NzRMUGNNY3dXa3Vkdkw3c2FdQ1R0UUFDdClNRVVF''@;'; put 'put ''QUFBIz12JEhDQEwzMndbd1VmLj4uTHg0RGF0SzEzX209cGUwREBTbmVSJi81LCZocT4hWDZxRD15bzt9KGZSOGdtSnZVI0l9Yks5QSx1VmZgZXZTRDs6fWYkQ0ZGfCk7KF8seF4rQl9UNnJCXj0lR3g5LGJBR00mSD5ZOlJiaiksNn1hQkNiVzsuYSF9KXFQa0tWdGA8Tjt1ZS5NKFopQ3VIJVRz''@;'; put 'put ''R0khbCkmKSNIdzdXPDxLLDpUJCF6eHNdQWB2aXlhakIpYSlfODd0KztFRUc4WSQyYywleWlvLj1SYjZLWE9pP0NyJj8yKVlmeV1UbVYvJEtQVEEwKToqZCZsbittMEo4K1VwKU5PJHNBZGY3UDswUTUjYU5LbmU3YU13c1BqP1JJT2VxVE9xZHhISENPbjRgPDZqVV1dXTM0XnpzLH40PiJBJV4j''@;'; put 'put ''Qn0mbkxeUTNXX2ssV2loY0Nvaz8hWk1RKVh4RF57Vzcve2E0JUgyMTRXSmorX1dgKGRiTElWRXB1MihIRkpoI00/Kn1DKjhqTy9QPFdgRk4xInN+OW1DOj1qRU1JNXYzWjdHO0dGSTxuM2AlRjhWPVssRz5KUTRVKDQ4ZTlGQSgoQW1ZJCNUM1NxPSN4KEtlPitUTS4qbVg6Ompedmd6TjN+W15o''@;'; put 'put ''YDNsTHgmLG5yZyVGSyU6KEdOeEVNYVgrcU8qN3tjfm5NSnVSUj8iRUE0eUgoVHJLY0xGKWYrRGwsdXgxN1goSGY0RHozZ0wsUkQmNiZLcTp5IlRLcSlXaDNbZUFWaGN4ViUmUDdbNi8qc3g4SU5naW5OJl8kd1U9YzFKJSlNPkgpIXpKejVoRiJgazF5WiUwNFludW58RkgkWzBXWSkoazdMYiFp''@;'; put 'put ''RmxYRil+QU5QYnguIjsqPklBRjNLV0ZwPUdXP1tjRXkyPltMSE9eZkxKI31rbTppPFEwNndhfWgkfTRiR3pTMSxiYEA0UjFlczhmS1FXbUF+NVgqR2xYNXpvczBxNnBLXkt1MV5KQ28jYUAvK2A8SF5JK190VGgjR0shdzheW3NTKl8sN0k2Ii9AL1Nae0lrUHpDJjNXKTQpd1lXM29XUGJRNV0p''@;'; put 'put ''TlpmQlAvSUkqbGo/ZC8rfnpXa3UjPUVFV09FZ3g1PXlZKzl0SSFbT1lga3l0SlBFOUBEMkV3O0l7eS5OTT45YlRse3lrVTVBOnsrUjAwPjdkM0lDaihTbSoueFFRL2BhLFFDMDA+PHR6YXp8P3kyKCRLfmNTM3s0eC5WISZZcWl+L3MpTndJQCJUU0AjVCM6bTEubmksZmc6cH4mTTJJJk56K21+''@;'; put 'put ''Tlh+TEB0clFwbi9wIUcwX3t0JjhqTHNoVXt9I10lY0tUPGRedVMrKUtzPlojX3VgK187WU0vXT1mczUvcDozdFJSblVbSm8+Wk0+cGJ7bj09M196OHY4NFNmTi5qK1NDO00rYCElPmF0fFBwfVB1NmJpPl1peEU2X3x6Sm1OXXRMV2hoK3AvPmRIRE0kalMkQjB1bDd9QjRLYGtEbE5KbytIKyM5''@;'; put 'put ''SCYhVD8qUWokNC5uR1MxMGhIXyNUW0xiOGRyWE9pfn0vODVdbzRBMXE/YXk+QGpScGo5MW42eURgQnlPaG1ueD9wVGh2fSx6YzcrNEoyM1lVajRxNCpkczJuSFZbXndtajF8P11pa2Y7eCV6WUxdfnl4TGIvSEoqJl89R1p3MDk5Olh1RTI/WzYlK1owI09Kcll5V3locUErfTU6aGxDamJ8ZHJs''@;'; put 'put ''UnZrZkpGeiJJWShxRGUlL3tgQHBmdXYiUWB0eCExaGlaOzdQWlI2WUdGZjg1akMsKztfXj9eS2BrJnk/RjM0ZjdMYj0ycGRRcUs0KyM0R0F1L3tKXlswT0FUQlM/dlM4OWd2SjB0WDQjWmguU35fIitBWWMvcUdMIXN+cGJ6bkMqbGxRU2whQTptenB3STYyRCJrZikwTTo1Xm8rNlc+cDk5Llkk''@;'; put 'put ''UjcvRmBvNGpbb0ghSjQmRFd8RT9hQFh1SGJ0WUN3dnl0N3FGNkxXYGE4NzFlI0Z0M19YNjtiUCFpeXFzIUhxaTBXdWFjXkooMkhtIShiSjtlPmtGO156OHEoYE5PUlJtITdGdHpmQDQ4JWlKJF84JWtWe1V5KkB3bHU7WW8yaU1TYzNhdyw0NXFsazBSJEkxMT5vVzB4cFsxdiIjYTZaI144MyQj''@;'; put 'put ''dW8sU2I0JnQsJjx4PlVTezteOHBKR3RdZGBaeDQsfl13cjRucXBrb1BXYiZIPnhTVU5RQWk4cEQwTFNJZnhfSStLby9KOz8iTlk6aUVJNms/TD9rZjY7eG04Lmt1WCx5IyNTZWpZYHhFfTR+d0E5L3VjYUxGcz9LOm9FZVFsJnJKNm4iMGMxcmJ0TjsmSis2Xm8sZkMkPnFJPT5tSkNTOH5BX09f''@;'; put 'put ''bCUhUnBsJTBxPE4oRyxKI0U5TH00e1slbX5MMyZLenZ7LlAjOmU5SEU3Mm89akd6aWc1djE/QSRpcHNJXUdbQkglZGZIW31UUCt6Sm5ZWTR7K3QwO213KWtbR081XV1oYSVgVVdfNy9fSzx4RnhqM30zWEwobFpJYD5ITHQueHdyVkN7UUpMTV01bnVYJHhrL1FpO0p8Jk5ZQzcrWjE4O1YmRypw''@;'; put 'put ''VWlUY3hdXTt8dyV0ejBxPy8+N1JUZyQyYSRpM1dqbHFiQjckMGUuYkl3YzxTWkNLRjBIL19lUltRVVApOl4pTVg+XWI4JHwmWGNpWmBbSGojYmEuMnQrS11he3h7Xzt8N0QvO1tjUjs9OXMqNzx4aTsqI08jfCo1YyVmUjFCWVclYlVZOSt0RFsqLjFQfTc1RX1mR0RxZWN+OyE+WSY+XTx+ZkA7''@;'; put 'put ''P1dCTW8uezczNjU5XVk3IzUrIXtxLmxqfXA1WSguTComZjc9KWlHdmlVZl1KYmcpfnxeZ24jfDR3VllsSyZDbyFrNz4mWC8iNXJHcG9jJk9AKiRYPHBtTDEyVTJuZzxZXl1WfS9zUzxIKVRXSy8ibjYiLk1bRzE0cyxKYDNjKnxtWWl9R3oxeVdzIUBGI2ZHdiMxZUxMZjBTLHZRdVFUKzw4Nzlo''@;'; put 'put ''P1VvTUg3OmloOXwwdT9YK2k4WG1POiZjN3V1TW4iMz9tI0FLUXkjYE89Q0NvYXFUPTVjXkIpO3dNLj9WPjAvcW58P2hLIW03O0VOdEE6by5ATWw8Z3JEbXAhXWBWY24sJlpNT0hvSUhNOy9EXUVURSErenghbXhJaH5eRVt0djxzIytnI1BtUWh5SCxmJjxvJFVeN2EldiMqPDNnaCkyP3JuPyxp''@;'; put 'put ''XkkhL0ZjcHUzR1t5aEVOWU48cEAweyZbZ3t3VH0qZkxRdig9Xj9SZnIvdnVdUXtbKix8bmJiVTZHOVAobFpmWzFMXzBqcVVLbEUlTkhqYiNvREVeWDpKaFVPbjIlanJ5MihTOCJEdkteX1c3fnk5XnkoJSFaI2YvZ3w1Mk0uUjFFSyl9MjNUPCwkKSx9SzU2MXxITlldRTIiTFNfMW05Mm0uPDVK''@;'; put 'put ''Q2dnSjt1NEtxO0pWbHheMUhqQTwpInttPnx3b1Z2TnZdK3wuP3Q1X2p7cTlbViVxK3hTaEYvYWB8fUEhOGZOTmV2ellJVHosdlREMD1McGAxXyRTKTIzbnxSejp8KipqPnNtQXNCeVJWRHBaKHRNKWheLG5TWCY0M0dmSHxqJV9hZzVSdkwzT1IzYDhTYSptRCltUTBDS3xRIUc7KWc6bHA9azpm''@;'; put 'put ''Y2VRUjxvYyFEaCpFVkJ1NW1VJH1wcyk0ay5ZW1MybWVGMUpWPFgzaHF9eyYjWltfOitfeDxGOiRwPVlWNEBldXZReGlSImByc15vVlVvJmNreXBFMGZ4aGxwcW4pP3NMK2BRUDhPLDE3bFh4dV4qNVZ9MjRRdjk0S1V6UHA9Km1uZyNJVnw6Yy5TayRrNEl9dD5mSSxaQz4/NHNQR3QmaChvJnNg''@;'; put 'put ''KDtVZD84fE9gJXR8cEojJFhmOlkuKjFUL3x3W0F1TjgmeEMre014I2RreHlzaHQwPXlXXVkmKEdMQStQTFRzaVYxeS53PSZqOkJfZG0mW3cmKi9fWjdnVnRVVjRKWkk1Tno5QV5bImVLWns4MEAzLF8/ZyMlW3AwJCQ7KkUhelByelE7Zl02MF5Welkqan1USX5dJDlWe0syNV1AW3xvdHx8dytP''@;'; put 'put ''YiNEJixfOWB8fTl6ZG96IXM9RmIiM2B7KjJ7SWZoNFVaPGFRbl1IU1kjI2Z0eyE2cmxNPT89fDJqIXtiPUtQKS9rbDF0V3YpWW5DcnVPXSM8O1BtTTN8KDZ0fHA6Sm8lX1l9Y2JaIiQ8I0toTnBwIWxUV3pkeXk4PX55TXx2NCFbelNxfS59Rn1ueENOSyNDTGB1VyEqeWJMPUorW0tOdlZVe2U3''@;'; put 'put ''L0VKOysoV3VXJGVDUkZxQ0Y1I05XfmgrOmFzNEVOT25oOCQlS18ueEFpIzs+S3JoamxoUWJ6MiJSe3xwRUhAX0J6XzxIQixUeEVpcWtsITImamluWXRQLDQ1dFQ3YF1BPktseXk3byFOYkImMD06dHRyPGQqcVZPbWA6LCIiWTdeeFc4SDAyQVdReiE2ZS4+VTVURipGcyQobGJjP2Q7KUtlTXJf''@;'; put 'put ''L2BGNCZhQFpaSX4wTE0hJXB+KEBWMixNV0hkUWRzc20zd3gqMHchZ0chW25Sfn07N3E+bkptQW9JMjVWR0tfUWIrXj9mOTgwcih1d0NEbXciT0ZMOj9LQD87enxWV3tJSWhFX3hOfjJGQUhzPEcxdzBCaUI+aGY+MGtvRnQ/NFZjS2hDQ1c4cmBxUCM8PWk9NzB+VE9UR1V0UFsqeldfTVcoYGxV''@;'; put 'put ''fjwzYlRjfiFAIiw0ZCtyMEY/QWB6VTBkS2UuW1BDZn4rYnttZjZsKnxgL15uczU3IzBwej1uKXtdUihnLlFFP1ZmcUZANT9qeTdyUFJLdiFoJEBvciN9OTFPRHszfjFYfmVXbTNaWjgpL1MyeWtNVHN+fkhlX15odGBzdE1LaUNPNjVpQCEqIT1dWDt8Lkp7cldJd2AzWVc6eGFNLnNgVmhSOCku''@;'; put 'put ''SGBqXndoM2FufXJ8cEYjJG9OSlN8NHNweCtIX3ciJVd9bGR7NyxtZTNfJU95TTZ5dm91TTZTPFBxRUxaWTR8c0svcygwKVpfekIoZjx0NnxwY3tlY0dpOil5fGo9Mkh6PzVhZncvRX52JFpdSz0wTE81ZSVyPWZJZV5LeEwvN01kc0NYUSNySGdOW2Z7U1RwYV5YNCpuaz8zLig/cXBSZHYseyx9''@;'; put 'put ''c0ojeTVyOiRnV15HY3JOYSRgZ2RKZHVsUDhAL3A5JStXUy9OeFQkNnJUKVlOXmE3bks8Sl9EMDBGOStmUGk9JDkmUDRVc2lDLyJVZyZLP0FxcnM5SFY6ZW5VU0tGMlA2c2c4KSFMXyorTjg2ImQ2USRsS2FHcDpYO3p9azs9anAmMmZMXlVQekJZbVU5TyY7eC81bixZVl5gX2AkdF8yTl5TVD5B''@;'; put 'put ''fXxrKWBlIj1aeXYkNDJ0X2JOZShwb2NwVn5HNy5pMVdUQk5eW3EoRn0qLkNfbWUmaEMiIyh7NngoPD9+ZSMsMVN+XXxmM1osfiE3elNLV2ZweEcqcDEycCZ+XSEpUUg0W15Vfip1PUxtW1A/bm8ofig5Xnthe1B5KXgvU35vJiNDT3NbJntMPiwmRzd7fTFKbHlCbiIvdTZmb2o+TlozQVE7VH1l''@;'; put 'put ''U34zbG8kSXxfSXYoSTFHcXJCSX1PPjtZWlA5R21HcE17LkpGPlJ7NH49XmF+XjBwVT1eTF1tQFRWOUVya2QpSEsvbnN0Q2hmY28/KH1pamUmWyskQDVLRiZ9P2AoUDM8O09DTkRlM18hKVJpbUBeMnxUNXcsW3FDT0JbKUAsc1olRSMsYEssfWxtN2dGKy5yTmt6WW9JaTFZNmFafVBuZ2tnUj4q''@;'; put 'put ''aSZEOHw7X3wvUTU8VyMoJnkmRUJoQix+dU1mdTtmbXwpL3RLSi5LU0luOH08eyxTOCNHVlJhYmEkK08+PGQ0JmVrKGgsIylOc25Hdmw+Vlp+e1I3JTk6RjA9ITNraGlzQU1ZcDRjVDsheWclNmQoVilOWDQ4MT5Ye1c4MVF8UUFzTEs5aEJqW2F3KnAyJFF5I3w0PlJwPCh3dFhVIXg6cTJ9QVpK''@;'; put 'put ''YE5RZVFqVH1bZWJET1lVfH0zcXV5dDFwZ1BgfTxUJixeIjpucVZ5eEMsQ0JWNCgyenJ9RE9yWUZyfDIldXZ3ZUReST5eLnZHMyhvLDJtOz1XU31yNDZ+PktlKz99X295fj5ycmpZODI1Jjc2M2NfWyNbblJfezN1XyJ8Y1U8NCM3N35ObkglRT5ZTmwieDk2JmlrRk8pe2I8aXthUWhfO308VlZa''@;'; put 'put ''L25UVDQuOWl2Ji49OnMyXzVfJks5Zz0rRjZ4LFE0dXZtQWNqSl1rWz9Se3d+WThmIz41bjt+KTVeNDM+TVdpdkMuMS5fdyxvQ3MlfGlUITUkSj0rKFZ7bWszWGk/QD9nNGxrQiN4cG5JYHorOntQbUd6Sig9YittX2lsaFI6OzM2MntVInNAJmhkODEzTDRzKl1pMU5kLGBuOFhWVGpdWj5wWTIw''@;'; put 'put ''LyZYZToxKnNyPnx6el9bdENLRjpkRnsvQDp8XkBlNyopYkwmPGFQdmYiUGAobWEoJWpfYFkvalZaZjlMbnJxe31nL2NOTjRbaWVwOFZ0PjN+YGVsPiojU14wcmZkMy4wfHlPVyl4RSpvVygxRlhzNyYhfi9JRXJMQXE6P2FLU1pvUmtDZ2wxb3l9ITtsKz81fnNaR2psKEtacTczQEMjMX4oc3op''@;'; put 'put ''e2M0QScpKSxmdW5jdGlvbiBEZm4oKXtyZXR1cm4gazRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oe3dhc21CaW5hcnk6UjRlLGxvY2F0ZUZpbGU6KCk9PiIifSl9ZnVuY3Rpb24gSW0obixlKXtpZihuKWZvcihsZXRbdCxyXW9mIE9iamVjdC5lbnRyaWVzKG4pKXZvaWQgMCE9PXImJmUodCxy''@;'; put 'put ''KX1mdW5jdGlvbiBJNGUobil7cmV0dXJuIEpTT04ucGFyc2Uobil9ZnVuY3Rpb24gb3kobil7bGV0IGU9SlNPTi5wYXJzZShuKSx0PVtdO2ZvcihsZXQgcj0wO3IrMjxlLmxlbmd0aDtyKz0zKXQucHVzaCh7dGFpbDplW3JdLGhlYWQ6ZVtyKzFdLGtleTplW3IrMl19KTtyZXR1cm4gdH1mdW5j''@;'; put 'put ''dGlvbiBEUChuKXtyZXR1cm5gY2x1c3Rlcl8ke259YH1mdW5jdGlvbiBWZm4obil7cmV0dXJuIG4uc3RhcnRzV2l0aCgiY2x1c3Rlcl8iKT9uLnNsaWNlKDgpOm59ZnVuY3Rpb24gQmZuKG4pe3JldHVybntwYXRoOm4ucGF0aCxkYXRhOmA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJV''@;'; put 'put ''VEYtOCIgc3RhbmRhbG9uZT0ibm8iPz5cbjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+XG48c3ZnIHdpZHRoPSIke24ud2lkdGh9IiBoZWlnaHQ9IiR7bi5oZWln''@;'; put 'put ''aHR9Ij48L3N2Zz5gfX1mdW5jdGlvbiBqZm4obil7cmV0dXJuIG4ubWFwKEJmbil9ZnVuY3Rpb24gYSRlKG4sZSl7bGV0IHQ9e2ltYWdlczpbXSxmaWxlczpbXSwuLi5lfTtbLi4udC5maWxlcywuLi5qZm4odC5pbWFnZXMpXS5mb3JFYWNoKHI9Pm4uY3JlYXRlRmlsZShyLnBhdGgsci5kYXRh''@;'; put 'put ''KSl9dmFyIFpLLHMkZT1jbGFzcyBscWV7X3NnO2NvbnN0cnVjdG9yKGUpe3RoaXMuX3NnPWV9YWRkTm9kZShlLHQscil7bGV0IGk9InN0cmluZyI9PXR5cGVvZiBlP3tpZDplLGF0dHJzOnQsaHRtbEF0dHJzOnJ9OmUse2lkOm8sYXR0cnM6YSxodG1sQXR0cnM6bH09aTtyZXR1cm4gdGhpcy5f''@;'; put 'put ''c2cuYWRkTm9kZShvKSx2b2lkIDA9PT1hPy5pZCYmdGhpcy5zZXROb2RlQXR0cihvLCJpZCIsbyksSW0oYSwodSxnKT0+dGhpcy5zZXROb2RlQXR0cihvLHUsZykpLEltKGwsKHUsZyk9PnRoaXMuc2V0Tm9kZUh0bWxBdHRyKG8sdSxnKSksdGhpc31hZGRWZXJ0ZXgoZSx0LHIpe3JldHVybiB0''@;'; put 'put ''aGlzLmFkZE5vZGUoZSx0LHIpfWFkZEVkZ2UoZSx0LHI9IiIsaSxvKXtsZXQgYT0ic3RyaW5nIj09dHlwZW9mIGU/InN0cmluZyI9PXR5cGVvZiByP3t0YWlsOmUsaGVhZDp0LGtleTpyLGF0dHJzOmksaHRtbEF0dHJzOm99Ont0YWlsOmUsaGVhZDp0LGF0dHJzOnIsaHRtbEF0dHJzOml9OmUs''@;'; put 'put ''e3RhaWw6bCxoZWFkOnUsa2V5Omc9IiIsYXR0cnM6RSxodG1sQXR0cnM6T309YTtyZXR1cm4gdGhpcy5fc2cuYWRkRWRnZShsLHUsZyksSW0oRSwoWixlZSk9PnRoaXMuc2V0RWRnZUF0dHIobCx1LGcsWixlZSkpLEltKE8sKFosZWUpPT50aGlzLnNldEVkZ2VIdG1sQXR0cihsLHUsZyxaLGVl''@;'; put 'put ''KSksdGhpc31hZGRTdWJncmFwaChlLHQscil7bGV0IGk9InN0cmluZyI9PXR5cGVvZiBlP3tpZDplLGF0dHJzOnQsaHRtbEF0dHJzOnJ9OmU7cmV0dXJuIG5ldyBscWUodGhpcy5fc2cuYWRkU3ViZ3JhcGgoRFAoaS5pZCkpKS5hcHBseUluaXQoaSl9YXBwbHlJbml0KGUpe3JldHVybiB0aGlz''@;'; put 'put ''LnNldEF0dHIoImlkIixlLmlkKSxJbShlLmF0dHJzLCh0LHIpPT50aGlzLnNldEF0dHIodCxyKSksSW0oZS5odG1sQXR0cnMsKHQscik9PnRoaXMuc2V0SHRtbEF0dHIodCxyKSksdGhpc31yZW1vdmVOb2RlKGUpe3JldHVybiB0aGlzLl9zZy5yZW1vdmVOb2RlKGUpLHRoaXN9cmVtb3ZlVmVy''@;'; put 'put ''dGV4KGUpe3JldHVybiB0aGlzLnJlbW92ZU5vZGUoZSl9cmVtb3ZlRWRnZShlLHQscj0iIil7cmV0dXJuIHRoaXMuX3NnLnJlbW92ZUVkZ2UoZSx0LHIpLHRoaXN9c2V0QXR0cihlLHQ9IiIscil7cmV0dXJuIHZvaWQgMD09PXI/dGhpcy5fc2cuc2V0QXR0cihlLFN0cmluZyh0KSk6dGhpcy5f''@;'; put 'put ''c2cuc2V0QXR0cihlLFN0cmluZyh0KSxTdHJpbmcocikpLHRoaXN9c2V0SHRtbEF0dHIoZSx0LHIpe3JldHVybiB2b2lkIDA9PT1yP3RoaXMuX3NnLnNldEh0bWxBdHRyKGUsU3RyaW5nKHQpKTp0aGlzLl9zZy5zZXRIdG1sQXR0cihlLFN0cmluZyh0KSxTdHJpbmcocikpLHRoaXN9c2V0RGVm''@;'; put 'put ''YXVsdEF0dHIoZSx0KXtyZXR1cm4gdGhpcy5fc2cuc2V0RGVmYXVsdEF0dHIoZSxTdHJpbmcodCkpLHRoaXN9c2V0RGVmYXVsdEh0bWxBdHRyKGUsdCl7cmV0dXJuIHRoaXMuX3NnLnNldERlZmF1bHRIdG1sQXR0cihlLFN0cmluZyh0KSksdGhpc31yZW1vdmVBdHRyKGUpe3JldHVybiB0aGlz''@;'; put 'put ''LnNldEF0dHIoZSwiIil9c2V0Tm9kZUF0dHIoZSx0LHI9IiIsaSl7cmV0dXJuIHZvaWQgMD09PWk/dGhpcy5fc2cuc2V0Tm9kZUF0dHIoZSx0LFN0cmluZyhyKSk6dGhpcy5fc2cuc2V0Tm9kZUF0dHIoZSx0LFN0cmluZyhyKSxTdHJpbmcoaSkpLHRoaXN9c2V0VmVydGV4QXR0cihlLHQscj0i''@;'; put 'put ''IixpKXtyZXR1cm4gdGhpcy5zZXROb2RlQXR0cihlLHQscixpKX1zZXROb2RlSHRtbEF0dHIoZSx0LHIsaSl7cmV0dXJuIHZvaWQgMD09PWk/dGhpcy5fc2cuc2V0Tm9kZUh0bWxBdHRyKGUsdCxTdHJpbmcocikpOnRoaXMuX3NnLnNldE5vZGVIdG1sQXR0cihlLHQsU3RyaW5nKHIpLFN0cmlu''@;'; put 'put ''ZyhpKSksdGhpc31zZXRWZXJ0ZXhIdG1sQXR0cihlLHQscixpKXtyZXR1cm4gdGhpcy5zZXROb2RlSHRtbEF0dHIoZSx0LHIsaSl9c2V0RGVmYXVsdE5vZGVBdHRyKGUsdCl7cmV0dXJuIHRoaXMuX3NnLnNldERlZmF1bHROb2RlQXR0cihlLFN0cmluZyh0KSksdGhpc31zZXREZWZhdWx0VmVy''@;'; put 'put ''dGV4QXR0cihlLHQpe3JldHVybiB0aGlzLnNldERlZmF1bHROb2RlQXR0cihlLHQpfXNldERlZmF1bHROb2RlSHRtbEF0dHIoZSx0KXtyZXR1cm4gdGhpcy5fc2cuc2V0RGVmYXVsdE5vZGVIdG1sQXR0cihlLFN0cmluZyh0KSksdGhpc31zZXREZWZhdWx0VmVydGV4SHRtbEF0dHIoZSx0KXty''@;'; put 'put ''ZXR1cm4gdGhpcy5zZXREZWZhdWx0Tm9kZUh0bWxBdHRyKGUsdCl9cmVtb3ZlTm9kZUF0dHIoZSx0KXtyZXR1cm4gdGhpcy5zZXROb2RlQXR0cihlLHQsIiIpfXJlbW92ZVZlcnRleEF0dHIoZSx0KXtyZXR1cm4gdGhpcy5yZW1vdmVOb2RlQXR0cihlLHQpfXNldEVkZ2VBdHRyKGUsdCxyLGks''@;'; put 'put ''bz0iIixhKXtyZXR1cm4gdm9pZCAwPT09YT90aGlzLl9zZy5zZXRFZGdlQXR0cihlLHQscixpLFN0cmluZyhvKSk6dGhpcy5fc2cuc2V0RWRnZUF0dHIoZSx0LHIsaSxTdHJpbmcobyksU3RyaW5nKGEpKSx0aGlzfXNldEVkZ2VIdG1sQXR0cihlLHQscixpLG8sYSl7cmV0dXJuIHZvaWQgMD09''@;'; put 'put ''PWE/dGhpcy5fc2cuc2V0RWRnZUh0bWxBdHRyKGUsdCxyLGksU3RyaW5nKG8pKTp0aGlzLl9zZy5zZXRFZGdlSHRtbEF0dHIoZSx0LHIsaSxTdHJpbmcobyksU3RyaW5nKGEpKSx0aGlzfXNldERlZmF1bHRFZGdlQXR0cihlLHQpe3JldHVybiB0aGlzLl9zZy5zZXREZWZhdWx0RWRnZUF0dHIo''@;'; put 'put ''ZSxTdHJpbmcodCkpLHRoaXN9c2V0RGVmYXVsdEVkZ2VIdG1sQXR0cihlLHQpe3JldHVybiB0aGlzLl9zZy5zZXREZWZhdWx0RWRnZUh0bWxBdHRyKGUsU3RyaW5nKHQpKSx0aGlzfXJlbW92ZUVkZ2VBdHRyKGUsdCxyLGkpe3JldHVybiB0aGlzLnNldEVkZ2VBdHRyKGUsdCxyLGksIiIpfWhh''@;'; put 'put ''c05vZGUoZSl7cmV0dXJuIHRoaXMuX3NnLmhhc05vZGUoZSl9aGFzVmVydGV4KGUpe3JldHVybiB0aGlzLmhhc05vZGUoZSl9aGFzRWRnZShlLHQscj0iIil7cmV0dXJuIHRoaXMuX3NnLmhhc0VkZ2UoZSx0LHIpfW5vZGVDb3VudCgpe3JldHVybiB0aGlzLl9zZy5ub2RlQ291bnQoKX12ZXJ0''@;'; put 'put ''ZXhDb3VudCgpe3JldHVybiB0aGlzLm5vZGVDb3VudCgpfWVkZ2VDb3VudCgpe3JldHVybiB0aGlzLl9zZy5lZGdlQ291bnQoKX1ub2RlRGVncmVlKGUsdD0xLHI9MSl7cmV0dXJuIHRoaXMuX3NnLm5vZGVEZWdyZWUoZSx0LHIpfXZlcnRleERlZ3JlZShlLHQ9MSxyPTEpe3JldHVybiB0aGlz''@;'; put 'put ''Lm5vZGVEZWdyZWUoZSx0LHIpfWdldEF0dHIoZSl7cmV0dXJuIHRoaXMuX3NnLmdldEF0dHIoZSl9Z2V0Tm9kZUF0dHIoZSx0KXtyZXR1cm4gdGhpcy5fc2cuZ2V0Tm9kZUF0dHIoZSx0KX1nZXRWZXJ0ZXhBdHRyKGUsdCl7cmV0dXJuIHRoaXMuZ2V0Tm9kZUF0dHIoZSx0KX1nZXRFZGdlQXR0''@;'; put 'put ''cihlLHQscixpKXtyZXR1cm4gdGhpcy5fc2cuZ2V0RWRnZUF0dHIoZSx0LHIsaSl9bm9kZU5hbWVzKCl7cmV0dXJuIEk0ZSh0aGlzLl9zZy5ub2RlTmFtZXMoKSl9dmVydGV4TmFtZXMoKXtyZXR1cm4gdGhpcy5ub2RlTmFtZXMoKX1lZGdlcygpe3JldHVybiBveSh0aGlzLl9zZy5lZGdlcygp''@;'; put 'put ''KX1vdXRFZGdlcyhlKXtyZXR1cm4gb3kodGhpcy5fc2cub3V0RWRnZXMoZSkpfWluRWRnZXMoZSl7cmV0dXJuIG95KHRoaXMuX3NnLmluRWRnZXMoZSkpfW5vZGVFZGdlcyhlKXtyZXR1cm4gb3kodGhpcy5fc2cubm9kZUVkZ2VzKGUpKX1kZWxldGUoKXt0aGlzLl9zZy5kZWxldGUoKX1bU3lt''@;'; put 'put ''Ym9sLmRpc3Bvc2VdKCl7dGhpcy5kZWxldGUoKX19LFVmbj1jbGFzc3tfZ3JhcGg7X21vZHVsZTtjb25zdHJ1Y3RvcihuLGUpe3RoaXMuX2dyYXBoPW4sdGhpcy5fbW9kdWxlPWV9ZW5zdXJlRGVmYXVsdEZvbnRzKG4peyIiPT09dGhpcy5nZXRHcmFwaEF0dHIoImZvbnRuYW1lIikmJnRoaXMu''@;'; put 'put ''c2V0R3JhcGhBdHRyKCJmb250bmFtZSIsIkFyaWFsIiksdGhpcy5zZXREZWZhdWx0R3JhcGhBdHRyKCJmb250bmFtZSIsIkFyaWFsIiksbiYmKHRoaXMuc2V0RGVmYXVsdE5vZGVBdHRyKCJmb250bmFtZSIsIkFyaWFsIiksdGhpcy5zZXREZWZhdWx0RWRnZUF0dHIoImZvbnRuYW1lIiwiQXJp''@;'; put 'put ''YWwiKSl9YWRkTm9kZShuLGUsdCl7bGV0IHI9InN0cmluZyI9PXR5cGVvZiBuP3tpZDpuLGF0dHJzOmUsaHRtbEF0dHJzOnR9Om4se2lkOmksYXR0cnM6byxodG1sQXR0cnM6YX09cjtyZXR1cm4gdGhpcy5fZ3JhcGguYWRkTm9kZShpKSx2b2lkIDA9PT1vPy5pZCYmdGhpcy5zZXROb2RlQXR0''@;'; put 'put ''cihpLCJpZCIsaSksSW0obywobCx1KT0+dGhpcy5zZXROb2RlQXR0cihpLGwsdSkpLEltKGEsKGwsdSk9PnRoaXMuc2V0Tm9kZUh0bWxBdHRyKGksbCx1KSksdGhpc31hZGRWZXJ0ZXgobixlLHQpe3JldHVybiB0aGlzLmFkZE5vZGUobixlLHQpfWFkZEVkZ2UobixlLHQ9IiIscixpKXtsZXQg''@;'; put 'put ''bz0ic3RyaW5nIj09dHlwZW9mIG4/InN0cmluZyI9PXR5cGVvZiB0P3t0YWlsOm4saGVhZDplLGtleTp0LGF0dHJzOnIsaHRtbEF0dHJzOml9Ont0YWlsOm4saGVhZDplLGF0dHJzOnQsaHRtbEF0dHJzOnJ9Om4se3RhaWw6YSxoZWFkOmwsa2V5OnU9IiIsYXR0cnM6ZyxodG1sQXR0cnM6RX09''@;'; put 'put ''bztyZXR1cm4gdGhpcy5fZ3JhcGguYWRkRWRnZShhLGwsdSksSW0oZywoTyxaKT0+dGhpcy5zZXRFZGdlQXR0cihhLGwsdSxPLFopKSxJbShFLChPLFopPT50aGlzLnNldEVkZ2VIdG1sQXR0cihhLGwsdSxPLFopKSx0aGlzfWFwcGx5SW5pdChuKXtyZXR1cm4gdGhpcy5lbnN1cmVEZWZhdWx0''@;'; put 'put ''Rm9udHMoITApLHZvaWQgMCE9PW4uaWQmJnRoaXMuc2V0R3JhcGhBdHRyKCJpZCIsbi5pZCksSW0obi5hdHRycywoZSx0KT0+dGhpcy5zZXRHcmFwaEF0dHIoZSx0KSksSW0obi5odG1sQXR0cnMsKGUsdCk9PnRoaXMuc2V0R3JhcGhIdG1sQXR0cihlLHQpKSx0aGlzfXJlYWQobil7aWYoIXRo''@;'; put 'put ''aXMuX2dyYXBoLnJlYWQobikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIERPVCBzb3VyY2UiKTtyZXR1cm4gdGhpcy5lbnN1cmVEZWZhdWx0Rm9udHMoITEpLHRoaXN9c2V0R3JhcGhBdHRyKG4sZT0iIix0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLl9ncmFwaC5zZXRHcmFwaEF0dHIobixT''@;'; put 'put ''dHJpbmcoZSkpOnRoaXMuX2dyYXBoLnNldEdyYXBoQXR0cihuLFN0cmluZyhlKSxTdHJpbmcodCkpLHRoaXN9c2V0R3JhcGhIdG1sQXR0cihuLGUsdCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5fZ3JhcGguc2V0R3JhcGhIdG1sQXR0cihuLFN0cmluZyhlKSk6dGhpcy5fZ3JhcGguc2V0R3Jh''@;'; put 'put ''cGhIdG1sQXR0cihuLFN0cmluZyhlKSxTdHJpbmcodCkpLHRoaXN9c2V0RGVmYXVsdEdyYXBoQXR0cihuLGUpe3JldHVybiB0aGlzLl9ncmFwaC5zZXREZWZhdWx0R3JhcGhBdHRyKG4sU3RyaW5nKGUpKSx0aGlzfXNldERlZmF1bHRHcmFwaEh0bWxBdHRyKG4sZSl7cmV0dXJuIHRoaXMuX2dy''@;'; put 'put ''YXBoLnNldERlZmF1bHRHcmFwaEh0bWxBdHRyKG4sU3RyaW5nKGUpKSx0aGlzfXNldE5vZGVBdHRyKG4sZSx0PSIiLHIpe3JldHVybiB2b2lkIDA9PT1yP3RoaXMuX2dyYXBoLnNldE5vZGVBdHRyKG4sZSxTdHJpbmcodCkpOnRoaXMuX2dyYXBoLnNldE5vZGVBdHRyKG4sZSxTdHJpbmcodCks''@;'; put 'put ''U3RyaW5nKHIpKSx0aGlzfXNldFZlcnRleEF0dHIobixlLHQ9IiIscil7cmV0dXJuIHRoaXMuc2V0Tm9kZUF0dHIobixlLHQscil9c2V0Tm9kZUh0bWxBdHRyKG4sZSx0LHIpe3JldHVybiB2b2lkIDA9PT1yP3RoaXMuX2dyYXBoLnNldE5vZGVIdG1sQXR0cihuLGUsU3RyaW5nKHQpKTp0aGlz''@;'; put 'put ''Ll9ncmFwaC5zZXROb2RlSHRtbEF0dHIobixlLFN0cmluZyh0KSxTdHJpbmcocikpLHRoaXN9c2V0VmVydGV4SHRtbEF0dHIobixlLHQscil7cmV0dXJuIHRoaXMuc2V0Tm9kZUh0bWxBdHRyKG4sZSx0LHIpfXNldERlZmF1bHROb2RlQXR0cihuLGUpe3JldHVybiB0aGlzLl9ncmFwaC5zZXRE''@;'; put 'put ''ZWZhdWx0Tm9kZUF0dHIobixTdHJpbmcoZSkpLHRoaXN9c2V0RGVmYXVsdFZlcnRleEF0dHIobixlKXtyZXR1cm4gdGhpcy5zZXREZWZhdWx0Tm9kZUF0dHIobixlKX1zZXREZWZhdWx0Tm9kZUh0bWxBdHRyKG4sZSl7cmV0dXJuIHRoaXMuX2dyYXBoLnNldERlZmF1bHROb2RlSHRtbEF0dHIo''@;'; put 'put ''bixTdHJpbmcoZSkpLHRoaXN9c2V0RGVmYXVsdFZlcnRleEh0bWxBdHRyKG4sZSl7cmV0dXJuIHRoaXMuc2V0RGVmYXVsdE5vZGVIdG1sQXR0cihuLGUpfXNldEVkZ2VBdHRyKG4sZSx0LHIsaT0iIixvKXtyZXR1cm4gdm9pZCAwPT09bz90aGlzLl9ncmFwaC5zZXRFZGdlQXR0cihuLGUsdCxy''@;'; put 'put ''LFN0cmluZyhpKSk6dGhpcy5fZ3JhcGguc2V0RWRnZUF0dHIobixlLHQscixTdHJpbmcoaSksU3RyaW5nKG8pKSx0aGlzfXNldEVkZ2VIdG1sQXR0cihuLGUsdCxyLGksbyl7cmV0dXJuIHZvaWQgMD09PW8/dGhpcy5fZ3JhcGguc2V0RWRnZUh0bWxBdHRyKG4sZSx0LHIsU3RyaW5nKGkpKTp0''@;'; put 'put ''aGlzLl9ncmFwaC5zZXRFZGdlSHRtbEF0dHIobixlLHQscixTdHJpbmcoaSksU3RyaW5nKG8pKSx0aGlzfXNldERlZmF1bHRFZGdlQXR0cihuLGUpe3JldHVybiB0aGlzLl9ncmFwaC5zZXREZWZhdWx0RWRnZUF0dHIobixTdHJpbmcoZSkpLHRoaXN9c2V0RGVmYXVsdEVkZ2VIdG1sQXR0cihu''@;'; put 'put ''LGUpe3JldHVybiB0aGlzLl9ncmFwaC5zZXREZWZhdWx0RWRnZUh0bWxBdHRyKG4sU3RyaW5nKGUpKSx0aGlzfXJlbW92ZU5vZGUobil7cmV0dXJuIHRoaXMuX2dyYXBoLnJlbW92ZU5vZGUobiksdGhpc31yZW1vdmVWZXJ0ZXgobil7cmV0dXJuIHRoaXMucmVtb3ZlTm9kZShuKX1yZW1vdmVF''@;'; put 'put ''ZGdlKG4sZSx0PSIiKXtyZXR1cm4gdGhpcy5fZ3JhcGgucmVtb3ZlRWRnZShuLGUsdCksdGhpc31yZW1vdmVTdWJncmFwaChuKXtyZXR1cm4gdGhpcy5fZ3JhcGgucmVtb3ZlU3ViZ3JhcGgoRFAobikpLHRoaXN9cmVtb3ZlR3JhcGhBdHRyKG4pe3JldHVybiB0aGlzLnNldEdyYXBoQXR0cihu''@;'; put 'put ''LCIiKX1yZW1vdmVOb2RlQXR0cihuLGUpe3JldHVybiB0aGlzLnNldE5vZGVBdHRyKG4sZSwiIil9cmVtb3ZlVmVydGV4QXR0cihuLGUpe3JldHVybiB0aGlzLnJlbW92ZU5vZGVBdHRyKG4sZSl9cmVtb3ZlRWRnZUF0dHIobixlLHQscil7cmV0dXJuIHRoaXMuc2V0RWRnZUF0dHIobixlLHQs''@;'; put 'put ''ciwiIil9aGFzTm9kZShuKXtyZXR1cm4gdGhpcy5fZ3JhcGguaGFzTm9kZShuKX1oYXNWZXJ0ZXgobil7cmV0dXJuIHRoaXMuaGFzTm9kZShuKX1oYXNFZGdlKG4sZSx0PSIiKXtyZXR1cm4gdGhpcy5fZ3JhcGguaGFzRWRnZShuLGUsdCl9aGFzU3ViZ3JhcGgobil7cmV0dXJuIHRoaXMuX2dy''@;'; put 'put ''YXBoLmhhc1N1YmdyYXBoKERQKG4pKX1ub2RlQ291bnQoKXtyZXR1cm4gdGhpcy5fZ3JhcGgubm9kZUNvdW50KCl9dmVydGV4Q291bnQoKXtyZXR1cm4gdGhpcy5ub2RlQ291bnQoKX1lZGdlQ291bnQoKXtyZXR1cm4gdGhpcy5fZ3JhcGguZWRnZUNvdW50KCl9c3ViZ3JhcGhDb3VudCgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9ncmFwaC5zdWJncmFwaENvdW50KCl9bm9kZURlZ3JlZShuLGU9MSx0PTEpe3JldHVybiB0aGlzLl9ncmFwaC5ub2RlRGVncmVlKG4sZSx0KX12ZXJ0ZXhEZWdyZWUobixlPTEsdD0xKXtyZXR1cm4gdGhpcy5ub2RlRGVncmVlKG4sZSx0KX1nZXRHcmFwaEF0dHIobil7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2dyYXBoLmdldEdyYXBoQXR0cihuKX1nZXROb2RlQXR0cihuLGUpe3JldHVybiB0aGlzLl9ncmFwaC5nZXROb2RlQXR0cihuLGUpfWdldFZlcnRleEF0dHIobixlKXtyZXR1cm4gdGhpcy5nZXROb2RlQXR0cihuLGUpfWdldEVkZ2VBdHRyKG4sZSx0LHIpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9ncmFwaC5nZXRFZGdlQXR0cihuLGUsdCxyKX1zdWJncmFwaE5hbWVzKCl7cmV0dXJuIEk0ZSh0aGlzLl9ncmFwaC5zdWJncmFwaE5hbWVzKCkpLm1hcChWZm4pfW5vZGVOYW1lcygpe3JldHVybiBJNGUodGhpcy5fZ3JhcGgubm9kZU5hbWVzKCkpfXZlcnRleE5hbWVzKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMubm9kZU5hbWVzKCl9ZWRnZXMoKXtyZXR1cm4gb3kodGhpcy5fZ3JhcGguZWRnZXMoKSl9b3V0RWRnZXMobil7cmV0dXJuIG95KHRoaXMuX2dyYXBoLm91dEVkZ2VzKG4pKX1vdXRFZGdlc0Zyb20obil7cmV0dXJuIHRoaXMub3V0RWRnZXMobil9aW5FZGdlcyhuKXtyZXR1cm4gb3kodGhp''@;'; put 'put ''cy5fZ3JhcGguaW5FZGdlcyhuKSl9aW5FZGdlc1RvKG4pe3JldHVybiB0aGlzLmluRWRnZXMobil9bm9kZUVkZ2VzKG4pe3JldHVybiBveSh0aGlzLl9ncmFwaC5ub2RlRWRnZXMobikpfXZlcnRleEVkZ2VzKG4pe3JldHVybiB0aGlzLm5vZGVFZGdlcyhuKX1hZGRTdWJncmFwaChuLGUsdCl7''@;'; put 'put ''bGV0IHI9InN0cmluZyI9PXR5cGVvZiBuP3tpZDpuLGF0dHJzOmUsaHRtbEF0dHJzOnR9Om47cmV0dXJuIG5ldyBzJGUodGhpcy5fZ3JhcGguYWRkU3ViZ3JhcGgoRFAoci5pZCkpKS5hcHBseUluaXQocil9Z2V0U3ViZ3JhcGgobil7bGV0IGU9dGhpcy5fZ3JhcGguZ2V0U3ViZ3JhcGgoRFAo''@;'; put 'put ''bikpO3JldHVybiBlP25ldyBzJGUoZSk6bnVsbH1sYXlvdXQobj0ic3ZnIixlPSJkb3QiLHQpe2lmKHQ/LmltYWdlcz8ubGVuZ3RofHx0Py5maWxlcz8ubGVuZ3RoKXtsZXQgbz1uZXcgdGhpcy5fbW9kdWxlLkNHcmFwaHZpeigwLDApO3RyeXthJGUobyx0KX1maW5hbGx5e28uZGVsZXRlKCl9''@;'; put 'put ''fWxldCByPSIiLGk9IiI7dHJ5e3I9dGhpcy5fZ3JhcGgubGF5b3V0KG4sZSl9Y2F0Y2gobyl7aT1vLm1lc3NhZ2V9aWYoaT10aGlzLl9tb2R1bGUuQ0dyYXBodml6Lmxhc3RFcnJvcigpfHxpLCFyJiZpKXRocm93IG5ldyBFcnJvcihpKTtyZXR1cm4gcn13cml0ZSgpe3JldHVybiB0aGlzLl9n''@;'; put 'put ''cmFwaC53cml0ZSgpfXRvRG90KCl7cmV0dXJuIHRoaXMud3JpdGUoKX1kZWxldGUoKXt0aGlzLl9ncmFwaC5kZWxldGUoKX1bU3ltYm9sLmRpc3Bvc2VdKCl7dGhpcy5kZWxldGUoKX19LGwkZT1jbGFzcyBUQXtfbW9kdWxlO2NvbnN0cnVjdG9yKGUpe3RoaXMuX21vZHVsZT1lfXN0YXRpYyBs''@;'; put 'put ''b2FkKCl7cmV0dXJuIFpLfHwoWks9UGZuKCkudGhlbihlPT5uZXcgVEEoZSkpKSxaS31zdGF0aWMgdW5sb2FkKCl7KGZ1bmN0aW9uIEhmbigpe1I0ZT12b2lkIDB9KSgpLFpLPXZvaWQgMH12ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX21vZHVsZS5DR3JhcGh2aXoudmVyc2lvbigpfWxheW91dChl''@;'; put 'put ''LHQ9InN2ZyIscj0iZG90IixpKXtpZighZSlyZXR1cm4iIjtsZXQgbz1uZXcgdGhpcy5fbW9kdWxlLkNHcmFwaHZpeihpPy55SW52ZXJ0PzE6MCxpPy5ub3A/aT8ubm9wOjApLGE9IiIsbD0iIjt0cnl7YSRlKG8saSk7dHJ5e2E9by5sYXlvdXQoZSx0LHIpfWNhdGNoKHUpe2w9dS5tZXNzYWdl''@;'; put 'put ''fWw9dGhpcy5fbW9kdWxlLkNHcmFwaHZpei5sYXN0RXJyb3IoKXx8bH1maW5hbGx5e28uZGVsZXRlKCl9aWYoIWEmJmwpdGhyb3cgVEEudW5sb2FkKCksbmV3IEVycm9yKGwpO3JldHVybiBhfWFjeWNsaWMoZSx0PSExLHI9ITEpe2lmKCFlKXJldHVybnthY3ljbGljOiExLG51bV9yZXY6MCxv''@;'; put 'put ''dXRGaWxlOiIifTtsZXQgaT1uZXcgdGhpcy5fbW9kdWxlLkNHcmFwaHZpeixvPSExLGE9MCxsPSIiLHU9IiI7dHJ5e3RyeXtvPWkuYWN5Y2xpYyhlLHQsciksYT1pLmFjeWNsaWNfbnVtX3JldixsPWkuYWN5Y2xpY19vdXRGaWxlfWNhdGNoKGcpe3U9Zy5tZXNzYWdlfXU9dGhpcy5fbW9kdWxl''@;'; put 'put ''LkNHcmFwaHZpei5sYXN0RXJyb3IoKXx8dX1maW5hbGx5e2kuZGVsZXRlKCl9aWYodSl0aHJvdyBUQS51bmxvYWQoKSxuZXcgRXJyb3IodSk7cmV0dXJue2FjeWNsaWM6byxudW1fcmV2OmEsb3V0RmlsZTpsfX10cmVkKGUsdD0hMSxyPSExKXtpZighZSlyZXR1cm57b3V0OiIiLGVycjoiIn07''@;'; put 'put ''bGV0IGk9bmV3IHRoaXMuX21vZHVsZS5DR3JhcGh2aXosbz0iIixhPSIiLGw9IiI7dHJ5e3RyeXtpLnRyZWQoZSx0LHIpLG89aS50cmVkX291dCxhPWkudHJlZF9lcnJ9Y2F0Y2godSl7bD11Lm1lc3NhZ2V9bD10aGlzLl9tb2R1bGUuQ0dyYXBodml6Lmxhc3RFcnJvcigpfHxsfWZpbmFsbHl7''@;'; put 'put ''aS5kZWxldGUoKX1pZighbyYmbCl0aHJvdyBUQS51bmxvYWQoKSxuZXcgRXJyb3IobCk7cmV0dXJue291dDpvLGVycjphfX11bmZsYXR0ZW4oZSx0PTAscj0hMSxpPTApe2lmKCFlKXJldHVybiIiO2xldCBvPW5ldyB0aGlzLl9tb2R1bGUuQ0dyYXBodml6LGE9IiIsbD0iIjt0cnl7dHJ5e2E9''@;'; put 'put ''by51bmZsYXR0ZW4oZSx0LHIsaSl9Y2F0Y2godSl7bD11Lm1lc3NhZ2V9bD10aGlzLl9tb2R1bGUuQ0dyYXBodml6Lmxhc3RFcnJvcigpfHxsfWZpbmFsbHl7by5kZWxldGUoKX1pZighYSYmbCl0aHJvdyBUQS51bmxvYWQoKSxuZXcgRXJyb3IobCk7cmV0dXJuIGF9Y2lyY28oZSx0PSJzdmci''@;'; put 'put ''LHIpe3JldHVybiB0aGlzLmxheW91dChlLHQsImNpcmNvIixyKX1kb3QoZSx0PSJzdmciLHIpe3JldHVybiB0aGlzLmxheW91dChlLHQsImRvdCIscil9ZmRwKGUsdD0ic3ZnIixyKXtyZXR1cm4gdGhpcy5sYXlvdXQoZSx0LCJmZHAiLHIpfXNmZHAoZSx0PSJzdmciLHIpe3JldHVybiB0aGlz''@;'; put 'put ''LmxheW91dChlLHQsInNmZHAiLHIpfW5lYXRvKGUsdD0ic3ZnIixyKXtyZXR1cm4gdGhpcy5sYXlvdXQoZSx0LCJuZWF0byIscil9b3NhZ2UoZSx0PSJzdmciLHIpe3JldHVybiB0aGlzLmxheW91dChlLHQsIm9zYWdlIixyKX1wYXRjaHdvcmsoZSx0PSJzdmciLHIpe3JldHVybiB0aGlzLmxh''@;'; put 'put ''eW91dChlLHQsInBhdGNod29yayIscil9dHdvcGkoZSx0PSJzdmciLHIpe3JldHVybiB0aGlzLmxheW91dChlLHQsInR3b3BpIixyKX1ub3AoZSl7cmV0dXJuIHRoaXMubGF5b3V0KGUsImRvdCIsIm5vcCIpfW5vcDIoZSl7cmV0dXJuIHRoaXMubGF5b3V0KGUsImRvdCIsIm5vcDIiKX1jcmVh''@;'; put 'put ''dGVHcmFwaChlPSJHIix0PSJkaXJlY3RlZCIpe2xldCByPSJzdHJpbmciPT10eXBlb2YgZT97aWQ6ZSx0eXBlOnR9OmUsaT1yLmlkPz8iRyIsbz1yLnR5cGU/PyJkaXJlY3RlZCIsYT1vLmluY2x1ZGVzKCJ1bmRpcmVjdGVkIik/MDoxLGw9by5zdGFydHNXaXRoKCJzdHJpY3QiKT8xOjA7cmV0''@;'; put 'put ''dXJuIG5ldyBVZm4obmV3IHRoaXMuX21vZHVsZS5DR3JhcGgoaSxhLGwpLHRoaXMuX21vZHVsZSkuYXBwbHlJbml0KHIpfXJlYWQoZSl7bGV0IHQ9dGhpcy5jcmVhdGVHcmFwaCgpO3RyeXtyZXR1cm4gdC5yZWFkKGUpLHR9Y2F0Y2gocil7dGhyb3cgdC5kZWxldGUoKSxyfX19O2Z1bmN0aW9u''@;'; put 'put ''IEdLKG4pe3JldHVybiBPYmplY3QuYXNzaWduKHt9LG4pfWZ1bmN0aW9uIGF5KG4pe3JldHVybiBNYXRoLnJvdW5kKDEwMCpuKS8xMDB9ZnVuY3Rpb24gYyRlKG4sZSl7aWYoInBvbHlnb24iPT1uLnRhZyl7KHQ9R0sobikpLnRhZz0icGF0aCI7dmFyIGk9R0socj1uLmF0dHJpYnV0ZXMpLG89''@;'; put 'put ''ci5wb2ludHM7aWYoInBvbHlnb24iPT1lLnRhZyl7KGE9bi5iYm94KS5jeD1hLngrYS53aWR0aC8yLGEuY3k9YS55K2EuaGVpZ2h0LzI7Zm9yKHZhciB1PXIucG9pbnRzLnNwbGl0KCIgIiksZz11Lm1hcChmdW5jdGlvbihmbil7dmFyIHlyPWZuLnNwbGl0KCIsIik7cmV0dXJuW3lyWzBdLWEu''@;'; put 'put ''Y3gseXJbMV0tYS5jeV19KSxFPWdbZy5sZW5ndGgtMV1bMF0sTz1nW2cubGVuZ3RoLTFdWzFdLFo9MDtaPGcubGVuZ3RoO1orKyxFPWVlLE89dmUpe3ZhciBNZT0oZWU9Z1taXVswXSktRTtpZigwIT0oSGU9KHZlPWdbWl1bMV0pLU8pJiYwPD0oV2U9RS1PKk1lL0hlKSYmV2U8MS8wJiYoRTw9''@;'; put 'put ''V2UmJldlPD1lZXx8ZWU8PVdlJiZXZTw9RSkpYnJlYWt9dmFyIGF0PVtbYS5jeCtXZSxhLmN5KzBdLmpvaW4oIiwiKV07bz0oYXQ9KGF0PWF0LmNvbmNhdCh1LnNsaWNlKFopKSkuY29uY2F0KHUuc2xpY2UoMCxaKSkpLmpvaW4oIiAiKX1pLmQ9Ik0iK28rInoiLGRlbGV0ZSBpLnBvaW50cyx0''@;'; put 'put ''LmF0dHJpYnV0ZXM9aX1lbHNle3ZhciB0Oyh0PUdLKG4pKS50YWc9InBhdGgiLGk9R0socj1uLmF0dHJpYnV0ZXMpO3ZhciByLGVlLHZlLFdlLEN0PXIuY3gsQXQ9ci5jeSxLdD1yLnJ4LHF0PXIucnk7aWYoInBvbHlnb24iPT1lLnRhZyl7dmFyIGE7KGE9ZS5iYm94KS5jeD1hLngrYS53aWR0''@;'; put 'put ''aC8yLGEuY3k9YS55K2EuaGVpZ2h0LzI7dmFyIGduPWUuYXR0cmlidXRlcy5wb2ludHMuc3BsaXQoIiAiKVswXS5zcGxpdCgiLCIpLEhlPShNZT1nblswXS1hLmN4LGduWzFdLWEuY3kpLHFyPU1hdGguc3FydChNYXRoLnBvdyhNZSwyKStNYXRoLnBvdyhIZSwyKSksJG49TWUvcXIsVHI9LUhl''@;'; put 'put ''L3FyfWVsc2UgJG49MSxUcj0wO2kuZD0iTSAiK0N0KyIgIitBdCsiIG0gIisoZWU9S3QqJG4pKyIsIisodmU9LXF0KlRyKSsiIGEgIitLdCsiLCIrcXQrIiAwIDEsMCAiKyhNZT0oV2U9S3QqLSRuKS1lZSkrIiwiKyhIZT0tcXQqLVRyLXZlKSsiIGEgIitLdCsiLCIrcXQrIiAwIDEsMCAiKy1N''@;'; put 'put ''ZSsiLCIrLUhlKyJ6IixkZWxldGUgaS5jeCxkZWxldGUgaS5jeSxkZWxldGUgaS5yeCxkZWxldGUgaS5yeSx0LmF0dHJpYnV0ZXM9aX1yZXR1cm4gdH1mdW5jdGlvbiBZZm4oKXt0cnl7bCRlLmxvYWQoKS50aGVuKHQ9Pnt0LmxheW91dCgiIiwic3ZnIiwiZG90IiksdGhpcy5sYXlvdXRTeW5j''@;'; put 'put ''PXQubGF5b3V0LmJpbmQodCksbnVsbD09dGhpcy5fd29ya2VyJiZ0aGlzLl9kaXNwYXRjaC5jYWxsKCJpbml0RW5kIix0aGlzKSx0aGlzLl9hZnRlckluaXQmJnRoaXMuX2FmdGVySW5pdCgpfSl9Y2F0Y2h7fWlmKG51bGwhPXRoaXMuX3dvcmtlcil7dmFyIG49dGhpcy5fdml6VVJMLGU9dGhp''@;'; put 'put ''czt0aGlzLl93b3JrZXJQb3J0Lm9ubWVzc2FnZT1mdW5jdGlvbih0KXtlLl93b3JrZXJDYWxsYmFja3Muc2hpZnQoKS5jYWxsKGUsdCl9LG4ubWF0Y2goL15odHRwcz86XC9cL3xeXC9cLy9pKXx8KG49bmV3IHdpbmRvdy5VUkwobixkb2N1bWVudC5sb2NhdGlvbi5ocmVmKS5ocmVmKSxENGUu''@;'; put 'put ''Y2FsbCh0aGlzLHt0eXBlOiJsYXlvdXQiLGRvdDoiIixlbmdpbmU6ImRvdCIsdml6VVJMOm59LGZ1bmN0aW9uKHQpe30pLEQ0ZS5jYWxsKHRoaXMse3R5cGU6InZlcnNpb24ifSxmdW5jdGlvbih0KXsidmVyc2lvbiI9PT10LmRhdGEudHlwZSYmKGUuX2dyYXBodml6VmVyc2lvbj10LmRhdGEu''@;'; put 'put ''dmVyc2lvbixlLl9kaXNwYXRjaC5jYWxsKCJpbml0RW5kIix0aGlzKSl9KX19ZnVuY3Rpb24gRDRlKG4sZSl7dGhpcy5fd29ya2VyQ2FsbGJhY2tzLnB1c2goZSksdGhpcy5fd29ya2VyUG9ydC5wb3N0TWVzc2FnZShuKX1mdW5jdGlvbiAkZm4obixlKXt2YXIgdD10aGlzLl9vcHRpb25zLmtl''@;'; put 'put ''eU1vZGUscj10aGlzLl9vcHRpb25zLnR3ZWVuUGF0aHMsaT10aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVzO2lmKCJzdHJpbmciPT10eXBlb2YgdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbiYmdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbi5pbmNsdWRlcygiJSIpKXZhciBvPSt0aGlz''@;'; put 'put ''Ll9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLnNwbGl0KCIlIilbMF0vMTAwLGE9dGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbi5pbmNsdWRlcygiJSIpO2Vsc2Ugbz10aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLGE9ITE7dmFyIGw9dGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdl''@;'; put 'put ''cyx1PXt9LGc9dGhpcy5fZGljdGlvbmFyeXx8e30sRT17fSxPPXRoaXMuX25vZGVEaWN0aW9uYXJ5fHx7fTtmdW5jdGlvbiBXZSgkbixUcj0wLHJpKXsoZnVuY3Rpb24gWigkbixUcil7dmFyIHJpPSRuLnRhZztpZigiaW5kZXgiPT10KSRuLmtleT1UcjtlbHNlIGlmKCIjIiE9cmlbMF0paWYo''@;'; put 'put ''ImlkIj09dCkkbi5rZXk9JG4uYXR0cmlidXRlcy5pZDtlbHNlIGlmKCJ0aXRsZSI9PXQpe3ZhciBmbj0kbi5jaGlsZHJlbi5maW5kKGZ1bmN0aW9uKHlyKXtyZXR1cm4idGl0bGUiPT15ci50YWd9KTtmbiYmKCRuLmtleT1mbi5jaGlsZHJlbi5sZW5ndGg+MD9mbi5jaGlsZHJlblswXS50ZXh0''@;'; put 'put ''OiIiKX1udWxsPT0kbi5rZXkmJihpJiYoImVsbGlwc2UiPT1yaXx8InBvbHlnb24iPT1yaSkmJihyaT0icGF0aCIpLCRuLmtleT1yaSsiLSIrVHIpfSkoJG4sVHIpLGZ1bmN0aW9uIGVlKCRuLFRyKXskbi5pZD0oVHI/VHIuaWQrIi4iOiIiKSskbi5rZXl9KCRuLHJpKTt2YXIgeXI9Z1skbi5p''@;'; put 'put ''ZF07KGZ1bmN0aW9uIHZlKCRuKXt1WyRuLmlkXT0kbn0pKCRuKSxmdW5jdGlvbiBNZSgkbixUcil7aSYmJG4uaWQgaW4gZyYmKCJwb2x5Z29uIj09VHIudGFnfHwiZWxsaXBzZSI9PVRyLnRhZ3x8InBhdGgiPT1Uci50YWcpJiYoVHIudGFnIT0kbi50YWd8fCJwb2x5Z29uIj09JG4udGFnKSYm''@;'; put 'put ''KCJwYXRoIiE9VHIudGFnJiYoJG4uYWx0ZXJuYXRpdmVPbGQ9YyRlKFRyLCRuKSksInBhdGgiIT0kbi50YWcmJigkbi5hbHRlcm5hdGl2ZU5ldz1jJGUoJG4sVHIpKSl9KCRuLHlyKSxmdW5jdGlvbiBIZSgkbixUcil7aWYociYmVHImJigicGF0aCI9PVRyLnRhZ3x8JG4uYWx0ZXJuYXRpdmVP''@;'; put 'put ''bGQmJiJwYXRoIj09JG4uYWx0ZXJuYXRpdmVPbGQudGFnKSl7dmFyIHJpPSgkbi5hbHRlcm5hdGl2ZU5ld3x8JG4pLmF0dHJpYnV0ZXMuZDtpZigkbi5hbHRlcm5hdGl2ZU9sZCl2YXIgZm49QzRlKCRuLmFsdGVybmF0aXZlT2xkKTtlbHNlIGZuPUM0ZShUcik7KCRuLmFsdGVybmF0aXZlT2xk''@;'; put 'put ''fHwoJG4uYWx0ZXJuYXRpdmVPbGQ9e30pKS5wb2ludHM9ZnVuY3Rpb24gdWZuKG4sZSx0LHIpe2NvbnN0IGk9bixvPWkuY2xvbmVOb2RlKCksYT1pLmdldFRvdGFsTGVuZ3RoKCksbD0oby5zZXRBdHRyaWJ1dGUoImQiLGUpLG8pLmdldFRvdGFsTGVuZ3RoKCksdT1bMF07bGV0IGc9MDtjb25z''@;'; put 'put ''dCBFPXI/dDp0L01hdGgubWF4KGEsbCk7Zm9yKDsoZys9RSk8MTspdS5wdXNoKGcpO3JldHVybiB1LnB1c2goMSksdS5tYXAoZnVuY3Rpb24oWil7Y29uc3QgZWU9aS5nZXRQb2ludEF0TGVuZ3RoKFoqYSksdmU9by5nZXRQb2ludEF0TGVuZ3RoKFoqbCk7cmV0dXJuW1tlZS54LGVlLnldLFt2''@;'; put 'put ''ZS54LHZlLnldXX0pfShmbixyaSxvLGEpfX0oJG4seXIpO3ZhciBBbj17fTskbi5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKEhyKXt2YXIgdGk9SHIudGFnOygiZWxsaXBzZSI9PXRpfHwicG9seWdvbiI9PXRpKSYmKHRpPSJwYXRoIiksbnVsbD09QW5bdGldJiYoQW5bdGldPTApLFdlKEhy''@;'; put 'put ''LEFuW3RpXSsrLCRuKX0pfWZ1bmN0aW9uIEF0KCRuKXsoZnVuY3Rpb24gYXQoJG4pe2lmKGwmJiRuLnBhcmVudCYmIm5vZGUiPT0kbi5wYXJlbnQuYXR0cmlidXRlcy5jbGFzcyYmInRpdGxlIj09JG4udGFnKXtpZigkbi5jaGlsZHJlbi5sZW5ndGg+MCl2YXIgZm49JG4uY2hpbGRyZW5bMF0u''@;'; put 'put ''dGV4dDtlbHNlIGZuPSIiO0VbZm5dPSRuLnBhcmVudH19KSgkbiksZnVuY3Rpb24gQ3QoJG4pe3ZhciByaT0kbi50YWc7aWYobCYmIWdbJG4uaWRdJiYkbi5wYXJlbnQmJm4kZSgkbikmJigicGF0aCI9PXJpfHwicG9seWdvbiI9PXJpKSl7aWYoInBvbHlnb24iPT1yaSl7dmFyIHlyPSRuLnBh''@;'; put 'put ''cmVudC5jaGlsZHJlbi5maW5kKGZ1bmN0aW9uKGFvKXtyZXR1cm4icGF0aCI9PWFvLnRhZ30pO3lyJiYoJG4udG90YWxMZW5ndGg9eXIudG90YWxMZW5ndGgpfXZhciBBbj1mdW5jdGlvbiBmZm4obil7cmV0dXJuIGZ1bmN0aW9uIGhmbihuKXtyZXR1cm4iZWRnZSI9PW4ucGFyZW50LmF0dHJp''@;'; put 'put ''YnV0ZXMuY2xhc3M/bi5wYXJlbnQ6bi5wYXJlbnQucGFyZW50LnBhcmVudH0obikuY2hpbGRyZW4uZmluZChmdW5jdGlvbihlKXtyZXR1cm4idGl0bGUiPT1lLnRhZ30pfSgkbiksSHI9QW4uY2hpbGRyZW5bMF0sdGk9SHIudGV4dC5zcGxpdCgiLT4iKTsyIT10aS5sZW5ndGgmJih0aT1Ici50''@;'; put 'put ''ZXh0LnNwbGl0KCItLSIpKTt2YXIgZnI9dGlbMF0sZWk9RVtmcl07aWYoT2JqZWN0Lmhhc093bihPLGZyKSl7dmFyIFBvPU9bZnJdO2lmKCh4aT1laS5jaGlsZHJlbi5maW5kSW5kZXgoZnVuY3Rpb24oYW8sdXQpe3JldHVybiJnIj09YW8udGFnfSkpPj0wKXt2YXIgSG89ZWkuY2hpbGRyZW5b''@;'; put 'put ''eGldLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihhbyx1dCl7cmV0dXJuImEiPT1hby50YWd9KTtlaT1laS5jaGlsZHJlblt4aV0uY2hpbGRyZW5bSG9dfSh4aT1Qby5jaGlsZHJlbi5maW5kSW5kZXgoZnVuY3Rpb24oYW8sdXQpe3JldHVybiJnIj09YW8udGFnfSkpPj0wJiYoSG89UG8u''@;'; put 'put ''Y2hpbGRyZW5beGldLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbih1dCxIdCl7cmV0dXJuImEiPT11dC50YWd9KSxQbz1Qby5jaGlsZHJlblt4aV0uY2hpbGRyZW5bSG9dKTtmb3IodmFyIFRvPWVpLmNoaWxkcmVuLHhpPTA7eGk8VG8ubGVuZ3RoO3hpKyspaWYoInBvbHlnb24iPT1Ub1t4''@;'; put 'put ''aV0udGFnfHwiZWxsaXBzZSI9PVRvW3hpXS50YWd8fCJwYXRoIj09VG9beGldLnRhZ3x8InRleHQiPT1Ub1t4aV0udGFnKXt2YXIgd3M9VG9beGldO2JyZWFrfXZhciB0cz1Qby5jaGlsZHJlbjtmb3IoeGk9MDt4aTx0cy5sZW5ndGg7eGkrKylpZigicG9seWdvbiI9PXRzW3hpXS50YWd8fCJl''@;'; put 'put ''bGxpcHNlIj09dHNbeGldLnRhZ3x8InBhdGgiPT10c1t4aV0udGFnfHwidGV4dCI9PXRzW3hpXS50YWcpe3ZhciBrYT10c1t4aV07YnJlYWt9JG4ub2Zmc2V0PWthJiZ3cz97eDprYS5jZW50ZXIueC13cy5jZW50ZXIueCx5OmthLmNlbnRlci55LXdzLmNlbnRlci55fTp7eDowLHk6MH19fX0o''@;'; put 'put ''JG4pLCRuLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oVHIpe0F0KFRyKX0pfXRoaXMuX2Rpc3BhdGNoLmNhbGwoImxheW91dEVuZCIsdGhpcyk7dmFyIEt0PUJsKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkuYXBwZW5kKCJkaXYiKSxnbj0obmV3IHdpbmRvdy5ET01QYXJz''@;'; put 'put ''ZXIpLnBhcnNlRnJvbVN0cmluZyhuLCJpbWFnZS9zdmcreG1sIik7S3QuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIGduLmRvY3VtZW50RWxlbWVudH0pO3ZhciBDbj1xQyhLdC5zZWxlY3QoInN2ZyIpKTt0aGlzLl9kaXNwYXRjaC5jYWxsKCJkYXRhRXh0cmFjdEVuZCIsdGhpcyksV2UoQ24p''@;'; put 'put ''LHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzUGFzczFFbmQiLHRoaXMpLEF0KENuKSx0aGlzLl9kaXNwYXRjaC5jYWxsKCJkYXRhUHJvY2Vzc1Bhc3MyRW5kIix0aGlzKSx0aGlzLl9kYXRhPUNuLHRoaXMuX2RpY3Rpb25hcnk9dSx0aGlzLl9ub2RlRGljdGlvbmFyeT1FLHRoaXMu''@;'; put 'put ''X2V4dHJhY3REYXRhPWZ1bmN0aW9uKCRuLFRyLHJpKXt2YXIgZm49cUMoJG4pO3JldHVybiBXZShmbixUcixyaSksQXQoZm4pLGZufSx0aGlzLl9idXN5PSExLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzRW5kIix0aGlzKSxlJiZlLmNhbGwodGhpcyksdGhpcy5fcXVldWUubGVu''@;'; put 'put ''Z3RoPjAmJnRoaXMuX3F1ZXVlLnNoaWZ0KCkuY2FsbCh0aGlzKX1mdW5jdGlvbiAkSyhuLGUpe2lmKCFpc0Zpbml0ZShuKXx8MD09PW4pcmV0dXJuIG51bGw7dmFyIHQ9KG49ZT9uLnRvRXhwb25lbnRpYWwoZS0xKTpuLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpLHI9bi5zbGljZSgw''@;'; put 'put ''LHQpO3JldHVybltyLmxlbmd0aD4xP3JbMF0rci5zbGljZSgyKTpyLCtuLnNsaWNlKHQrMSldfXZhciBxSyx5M249L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gTDRlKG4pe2lmKCEoZT15''@;'; put 'put ''M24uZXhlYyhuKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIituKTt2YXIgZTtyZXR1cm4gbmV3IE80ZSh7ZmlsbDplWzFdLGFsaWduOmVbMl0sc2lnbjplWzNdLHN5bWJvbDplWzRdLHplcm86ZVs1XSx3aWR0aDplWzZdLGNvbW1hOmVbN10scHJlY2lzaW9uOmVbOF0mJmVb''@;'; put 'put ''OF0uc2xpY2UoMSksdHJpbTplWzldLHR5cGU6ZVsxMF19KX1mdW5jdGlvbiBPNGUobil7dGhpcy5maWxsPXZvaWQgMD09PW4uZmlsbD8iICI6bi5maWxsKyIiLHRoaXMuYWxpZ249dm9pZCAwPT09bi5hbGlnbj8iPiI6bi5hbGlnbisiIix0aGlzLnNpZ249dm9pZCAwPT09bi5zaWduPyItIjpu''@;'; put 'put ''LnNpZ24rIiIsdGhpcy5zeW1ib2w9dm9pZCAwPT09bi5zeW1ib2w/IiI6bi5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhbi56ZXJvLHRoaXMud2lkdGg9dm9pZCAwPT09bi53aWR0aD92b2lkIDA6K24ud2lkdGgsdGhpcy5jb21tYT0hIW4uY29tbWEsdGhpcy5wcmVjaXNpb249dm9pZCAwPT09bi5w''@;'; put 'put ''cmVjaXNpb24/dm9pZCAwOituLnByZWNpc2lvbix0aGlzLnRyaW09ISFuLnRyaW0sdGhpcy50eXBlPXZvaWQgMD09PW4udHlwZT8iIjpuLnR5cGUrIiJ9ZnVuY3Rpb24gdSRlKG4sZSl7dmFyIHQ9JEsobixlKTtpZighdClyZXR1cm4gbisiIjt2YXIgcj10WzBdLGk9dFsxXTtyZXR1cm4gaTww''@;'; put 'put ''PyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrcjpyLmxlbmd0aD5pKzE/ci5zbGljZSgwLGkrMSkrIi4iK3Iuc2xpY2UoaSsxKTpyK25ldyBBcnJheShpLXIubGVuZ3RoKzIpLmpvaW4oIjAiKX1MNGUucHJvdG90eXBlPU80ZS5wcm90b3R5cGUsTzRlLnByb3RvdHlwZS50b1N0cmluZz1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh2b2lkIDA9PT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodm9pZCAwPT09dGhpcy5w''@;'; put 'put ''cmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O2NvbnN0IGQkZT17IiUiOihuLGUpPT4oMTAwKm4pLnRvRml4ZWQoZSksYjpuPT5NYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDIpLGM6bj0+bisiIixkOmZ1bmN0''@;'; put 'put ''aW9uIGczbihuKXtyZXR1cm4gTWF0aC5hYnMobj1NYXRoLnJvdW5kKG4pKT49MWUyMT9uLnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6bi50b1N0cmluZygxMCl9LGU6KG4sZSk9Pm4udG9FeHBvbmVudGlhbChlKSxmOihuLGUpPT5uLnRvRml4ZWQoZSksZzoobixlKT0+''@;'; put 'put ''bi50b1ByZWNpc2lvbihlKSxvOm49Pk1hdGgucm91bmQobikudG9TdHJpbmcoOCkscDoobixlKT0+dSRlKDEwMCpuLGUpLHI6dSRlLHM6ZnVuY3Rpb24gdzNuKG4sZSl7dmFyIHQ9JEsobixlKTtpZighdClyZXR1cm4gcUs9dm9pZCAwLG4udG9QcmVjaXNpb24oZSk7dmFyIHI9dFswXSxpPXRb''@;'; put 'put ''MV0sbz1pLShxSz0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkpKzEsYT1yLmxlbmd0aDtyZXR1cm4gbz09PWE/cjpvPmE/cituZXcgQXJyYXkoby1hKzEpLmpvaW4oIjAiKTpvPjA/ci5zbGljZSgwLG8pKyIuIityLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEt''@;'; put 'put ''bykuam9pbigiMCIpKyRLKG4sTWF0aC5tYXgoMCxlK28tMSkpWzBdfSxYOm49Pk1hdGgucm91bmQobikudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkseDpuPT5NYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KX07ZnVuY3Rpb24gaCRlKG4pe3JldHVybiBufXZhciBLSyxEbSxmJGU9QXJyYXku''@;'; put 'put ''cHJvdG90eXBlLm1hcCxwJGU9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07IWZ1bmN0aW9uIEUzbihuKXtLSz1mdW5jdGlvbiBDM24obil7dmFyIGU9dm9pZCAwPT09bi5ncm91cGluZ3x8dm9pZCAwPT09bi50''@;'; put 'put ''aG91c2FuZHM/aCRlOmZ1bmN0aW9uIHYzbihuLGUpe3JldHVybiBmdW5jdGlvbih0LHIpe2Zvcih2YXIgaT10Lmxlbmd0aCxvPVtdLGE9MCxsPW5bMF0sdT0wO2k+MCYmbD4wJiYodStsKzE+ciYmKGw9TWF0aC5tYXgoMSxyLXUpKSxvLnB1c2godC5zdWJzdHJpbmcoaS09bCxpK2wpKSwhKCh1''@;'; put 'put ''Kz1sKzEpPnIpKTspbD1uW2E9KGErMSklbi5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKGUpfX0oZiRlLmNhbGwobi5ncm91cGluZyxOdW1iZXIpLG4udGhvdXNhbmRzKyIiKSx0PXZvaWQgMD09PW4uY3VycmVuY3k/IiI6bi5jdXJyZW5jeVswXSsiIixyPXZvaWQgMD09PW4uY3Vy''@;'; put 'put ''cmVuY3k/IiI6bi5jdXJyZW5jeVsxXSsiIixpPXZvaWQgMD09PW4uZGVjaW1hbD8iLiI6bi5kZWNpbWFsKyIiLG89dm9pZCAwPT09bi5udW1lcmFscz9oJGU6ZnVuY3Rpb24gXzNuKG4pe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKHQpe3Jl''@;'; put 'put ''dHVybiBuWyt0XX0pfX0oZiRlLmNhbGwobi5udW1lcmFscyxTdHJpbmcpKSxhPXZvaWQgMD09PW4ucGVyY2VudD8iJSI6bi5wZXJjZW50KyIiLGw9dm9pZCAwPT09bi5taW51cz8iXHUyMjEyIjpuLm1pbnVzKyIiLHU9dm9pZCAwPT09bi5uYW4/Ik5hTiI6bi5uYW4rIiI7ZnVuY3Rpb24gZyhP''@;'; put 'put ''LFope3ZhciBlZT0oTz1MNGUoTykpLmZpbGwsdmU9Ty5hbGlnbixNZT1PLnNpZ24sSGU9Ty5zeW1ib2wsV2U9Ty56ZXJvLGF0PU8ud2lkdGgsQ3Q9Ty5jb21tYSxBdD1PLnByZWNpc2lvbixLdD1PLnRyaW0scXQ9Ty50eXBlOyJuIj09PXF0PyhDdD0hMCxxdD0iZyIpOmQkZVtxdF18fCh2b2lk''@;'; put 'put ''IDA9PT1BdCYmKEF0PTEyKSxLdD0hMCxxdD0iZyIpLChXZXx8IjAiPT09ZWUmJiI9Ij09PXZlKSYmKFdlPSEwLGVlPSIwIix2ZT0iPSIpO3ZhciBnbj0oWiYmdm9pZCAwIT09Wi5wcmVmaXg/Wi5wcmVmaXg6IiIpKygiJCI9PT1IZT90OiIjIj09PUhlJiYvW2JveFhdLy50ZXN0KHF0KT8iMCIr''@;'; put 'put ''cXQudG9Mb3dlckNhc2UoKToiIiksVG49KCIkIj09PUhlP3I6L1slcF0vLnRlc3QocXQpP2E6IiIpKyhaJiZ2b2lkIDAhPT1aLnN1ZmZpeD9aLnN1ZmZpeDoiIiksQ249ZCRlW3F0XSxxcj0vW2RlZmdwcnMlXS8udGVzdChxdCk7ZnVuY3Rpb24gJG4oVHIpe3ZhciB5cixBbixIcixyaT1nbixm''@;'; put 'put ''bj1UbjtpZigiYyI9PT1xdClmbj1DbihUcikrZm4sVHI9IiI7ZWxzZXt2YXIgdGk9KFRyPStUcik8MHx8MS9UcjwwO2lmKFRyPWlzTmFOKFRyKT91OkNuKE1hdGguYWJzKFRyKSxBdCksS3QmJihUcj1mdW5jdGlvbiBiM24obil7ZTpmb3IodmFyIGksZT1uLmxlbmd0aCx0PTEscj0tMTt0PGU7''@;'; put 'put ''Kyt0KXN3aXRjaChuW3RdKXtjYXNlIi4iOnI9aT10O2JyZWFrO2Nhc2UiMCI6MD09PXImJihyPXQpLGk9dDticmVhaztkZWZhdWx0OmlmKCErblt0XSlicmVhayBlO3I+MCYmKHI9MCl9cmV0dXJuIHI+MD9uLnNsaWNlKDAscikrbi5zbGljZShpKzEpOm59KFRyKSksdGkmJjA9PStUciYmIisi''@;'; put 'put ''IT09TWUmJih0aT0hMSkscmk9KHRpPyIoIj09PU1lP01lOmw6Ii0iPT09TWV8fCIoIj09PU1lPyIiOk1lKStyaSxmbj0oInMiIT09cXR8fGlzTmFOKFRyKXx8dm9pZCAwPT09cUs/IiI6cCRlWzgrcUsvM10pK2ZuKyh0aSYmIigiPT09TWU/IikiOiIiKSxxcilmb3IoeXI9LTEsQW49VHIubGVu''@;'; put 'put ''Z3RoOysreXI8QW47KWlmKDQ4PihIcj1Uci5jaGFyQ29kZUF0KHlyKSl8fEhyPjU3KXtmbj0oNDY9PT1Icj9pK1RyLnNsaWNlKHlyKzEpOlRyLnNsaWNlKHlyKSkrZm4sVHI9VHIuc2xpY2UoMCx5cik7YnJlYWt9fUN0JiYhV2UmJihUcj1lKFRyLDEvMCkpO3ZhciBmcj1yaS5sZW5ndGgrVHIu''@;'; put 'put ''bGVuZ3RoK2ZuLmxlbmd0aCxlaT1mcjxhdD9uZXcgQXJyYXkoYXQtZnIrMSkuam9pbihlZSk6IiI7c3dpdGNoKEN0JiZXZSYmKFRyPWUoZWkrVHIsZWkubGVuZ3RoP2F0LWZuLmxlbmd0aDoxLzApLGVpPSIiKSx2ZSl7Y2FzZSI8IjpUcj1yaStUcitmbitlaTticmVhaztjYXNlIj0iOlRyPXJp''@;'; put 'put ''K2VpK1RyK2ZuO2JyZWFrO2Nhc2UiXiI6VHI9ZWkuc2xpY2UoMCxmcj1laS5sZW5ndGg+PjEpK3JpK1RyK2ZuK2VpLnNsaWNlKGZyKTticmVhaztkZWZhdWx0OlRyPWVpK3JpK1RyK2ZufXJldHVybiBvKFRyKX1yZXR1cm4gQXQ9dm9pZCAwPT09QXQ/NjovW2dwcnNdLy50ZXN0KHF0KT9NYXRo''@;'; put 'put ''Lm1heCgxLE1hdGgubWluKDIxLEF0KSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxBdCkpLCRuLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIE8rIiJ9LCRufXJldHVybntmb3JtYXQ6Zyxmb3JtYXRQcmVmaXg6ZnVuY3Rpb24gRShPLFope3ZhciBlZT0zKk1hdGgubWF4KC04LE1hdGgubWlu''@;'; put 'put ''KDgsTWF0aC5mbG9vcihmdW5jdGlvbiBtM24obil7cmV0dXJuKG49JEsoTWF0aC5hYnMobikpKT9uWzFdOk5hTn0oWikvMykpKSx2ZT1NYXRoLnBvdygxMCwtZWUpLE1lPWcoKChPPUw0ZShPKSkudHlwZT0iZiIsTykse3N1ZmZpeDpwJGVbOCtlZS8zXX0pO3JldHVybiBmdW5jdGlvbihIZSl7''@;'; put 'put ''cmV0dXJuIE1lKHZlKkhlKX19fX0obiksRG09S0suZm9ybWF0fSh7dGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KTtjb25zdCBONGU9TWF0aC5QSSxGNGU9MipONGUsWEM9MWUtNix4M249RjRlLVhDO2Z1bmN0aW9uIGckZShuKXt0aGlzLl8rPW5bMF07Zm9y''@;'; put 'put ''KGxldCBlPTEsdD1uLmxlbmd0aDtlPHQ7KytlKXRoaXMuXys9YXJndW1lbnRzW2VdK25bZV19Y2xhc3MgUDRle2NvbnN0cnVjdG9yKGUpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIiLHRoaXMuX2FwcGVuZD1udWxsPT1lP2ckZTpmdW5jdGlvbiBB''@;'; put 'put ''M24obil7bGV0IGU9TWF0aC5mbG9vcihuKTtpZighKGU+PTApKXRocm93IG5ldyBFcnJvcihgaW52YWxpZCBkaWdpdHM6ICR7bn1gKTtpZihlPjE1KXJldHVybiBnJGU7Y29uc3QgdD0xMCoqZTtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5fKz1yWzBdO2ZvcihsZXQgaT0xLG89ci5sZW5ndGg7''@;'; put 'put ''aTxvOysraSl0aGlzLl8rPU1hdGgucm91bmQoYXJndW1lbnRzW2ldKnQpL3QrcltpXX19KGUpfW1vdmVUbyhlLHQpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rZX0sJHt0aGlzLl95MD10aGlzLl95MT0rdH1gfWNsb3NlUGF0aCgpe251bGwhPT10aGlzLl94MSYmKHRoaXMu''@;'; put 'put ''X3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuX2FwcGVuZGBaYCl9bGluZVRvKGUsdCl7dGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxPStlfSwke3RoaXMuX3kxPSt0fWB9cXVhZHJhdGljQ3VydmVUbyhlLHQscixpKXt0aGlzLl9hcHBlbmRgUSR7K2V9LCR7K3R9LCR7dGhpcy5f''@;'; put 'put ''eDE9K3J9LCR7dGhpcy5feTE9K2l9YH1iZXppZXJDdXJ2ZVRvKGUsdCxyLGksbyxhKXt0aGlzLl9hcHBlbmRgQyR7K2V9LCR7K3R9LCR7K3J9LCR7K2l9LCR7dGhpcy5feDE9K299LCR7dGhpcy5feTE9K2F9YH1hcmNUbyhlLHQscixpLG8pe2lmKGU9K2UsdD0rdCxyPStyLGk9K2ksKG89K28p''@;'; put 'put ''PDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7b31gKTtsZXQgYT10aGlzLl94MSxsPXRoaXMuX3kxLHU9ci1lLGc9aS10LEU9YS1lLE89bC10LFo9RSpFK08qTztpZihudWxsPT09dGhpcy5feDEpdGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gxPWV9LCR7dGhpcy5feTE9dH1g''@;'; put 'put ''O2Vsc2UgaWYoWj5YQylpZihNYXRoLmFicyhPKnUtZypFKT5YQyYmbyl7bGV0IGVlPXItYSx2ZT1pLWwsTWU9dSp1K2cqZyxIZT1lZSplZSt2ZSp2ZSxXZT1NYXRoLnNxcnQoTWUpLGF0PU1hdGguc3FydChaKSxDdD1vKk1hdGgudGFuKChONGUtTWF0aC5hY29zKChNZStaLUhlKS8oMipXZSph''@;'; put 'put ''dCkpKS8yKSxBdD1DdC9hdCxLdD1DdC9XZTtNYXRoLmFicyhBdC0xKT5YQyYmdGhpcy5fYXBwZW5kYEwke2UrQXQqRX0sJHt0K0F0Kk99YCx0aGlzLl9hcHBlbmRgQSR7b30sJHtvfSwwLDAsJHsrKE8qZWU+RSp2ZSl9LCR7dGhpcy5feDE9ZStLdCp1fSwke3RoaXMuX3kxPXQrS3QqZ31gfWVs''@;'; put 'put ''c2UgdGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxPWV9LCR7dGhpcy5feTE9dH1gfWFyYyhlLHQscixpLG8sYSl7aWYoZT0rZSx0PSt0LGE9ISFhLChyPStyKTwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke3J9YCk7bGV0IGw9cipNYXRoLmNvcyhpKSx1PXIqTWF0aC5zaW4o''@;'; put 'put ''aSksZz1lK2wsRT10K3UsTz0xXmEsWj1hP2ktbzpvLWk7bnVsbD09PXRoaXMuX3gxP3RoaXMuX2FwcGVuZGBNJHtnfSwke0V9YDooTWF0aC5hYnModGhpcy5feDEtZyk+WEN8fE1hdGguYWJzKHRoaXMuX3kxLUUpPlhDKSYmdGhpcy5fYXBwZW5kYEwke2d9LCR7RX1gLHImJihaPDAmJihaPVol''@;'; put 'put ''RjRlK0Y0ZSksWj54M24/dGhpcy5fYXBwZW5kYEEke3J9LCR7cn0sMCwxLCR7T30sJHtlLWx9LCR7dC11fUEke3J9LCR7cn0sMCwxLCR7T30sJHt0aGlzLl94MT1nfSwke3RoaXMuX3kxPUV9YDpaPlhDJiZ0aGlzLl9hcHBlbmRgQSR7cn0sJHtyfSwwLCR7KyhaPj1ONGUpfSwke099LCR7dGhp''@;'; put 'put ''cy5feDE9ZStyKk1hdGguY29zKG8pfSwke3RoaXMuX3kxPXQrcipNYXRoLnNpbihvKX1gKX1yZWN0KGUsdCxyLGkpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rZX0sJHt0aGlzLl95MD10aGlzLl95MT0rdH1oJHtyPStyfXYkeytpfWgkey1yfVpgfXRvU3RyaW5nKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX319ZnVuY3Rpb24gbSRlKCl7cmV0dXJuIG5ldyBQNGV9ZnVuY3Rpb24gazNuKG4sZSx0LHIpe3JldHVybiBlPS1lLHI9LXIsW24sZV09W24qdC1lKnIsbipyK2UqdF0sW24sZT0tZV19ZnVuY3Rpb24gdiRlKG4sZSx0LHIsaSxvLGEpe3ZhciB1PXFDKHckZS5jYWxsKHRoaXMs''@;'; put 'put ''bykpO24uZGF0YShbdV0pLEFQLmNhbGwobi5ub2RlKCksdSksXyRlKG4sZSx0LHIsaSxvLGEpfWZ1bmN0aW9uIF8kZShuLGUsdCxyLGksbyxhKXt2YXIgbD1hLnNob3J0ZW5pbmd8fDAsTz1bWzAsLTMuNV0sWzEwLDBdLFswLDMuNV0sWzAsLTMuNV1dLFo9ci1lLGVlPWktdCx2ZT1NYXRoLnNx''@;'; put 'put ''cnQoWipaK2VlKmVlKTtpZigwPT12ZSl2YXIgTWU9MSxIZT0wO2Vsc2UgTWU9Wi92ZSxIZT1lZS92ZTtpZihyPWUrKHZlLWwtMTAtLjEpKk1lLGk9dCsodmUtbC0xMC0uMSkqSGUsby5VUkx8fG8udG9vbHRpcCl2YXIgV2U9bi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2Vs''@;'; put 'put ''ZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpLGF0PVdlLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBhdGgiKSxDdD1XZS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJwb2x5Z29uIik7ZWxzZSBhdD1uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBhdGgi''@;'; put 'put ''KSxDdD1uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBvbHlnb24iKTt2YXIgQXQ9bSRlKCk7QXQubW92ZVRvKGUsdCksQXQubGluZVRvKHIsaSksYXQuYXR0cigiZCIsQXQpLHI9ZSsodmUtbC0xMCkqTWUsaT10Kyh2ZS1sLTEwKSpIZTtmb3IodmFyIEt0PTA7S3Q8Ty5sZW5ndGg7''@;'; put 'put ''S3QrKylPW0t0XT1rM24oKHF0PU9bS3RdKVswXSxxdFsxXSxNZSxIZSk7Zm9yKEt0PTA7S3Q8Ty5sZW5ndGg7S3QrKylPW0t0XT1bcisocXQ9T1tLdF0pWzBdLGkrcXRbMV1dO3ZhciBnbj1bXTtmb3IoS3Q9MDtLdDxPLmxlbmd0aDtLdCsrKXt2YXIgcXQ7Z24ucHVzaCgocXQ9T1tLdF0pLmpv''@;'; put 'put ''aW4oIiwiKSl9dmFyIFRuPWduLmpvaW4oIiAiKTtyZXR1cm4gQ3QuYXR0cigicG9pbnRzIixUbiksdGhpc31mdW5jdGlvbiB5JGUoKXtyZXR1cm4gdGhpcy5fZHJhd25FZGdlPyh0aGlzLl9kcmF3bkVkZ2UuZy5yZW1vdmUoKSx0aGlzLl9kcmF3bkVkZ2U9bnVsbCx0aGlzKTp0aGlzfWZ1bmN0''@;'; put 'put ''aW9uIGIkZSgpe3JldHVybiB0aGlzLl9kcmF3bkVkZ2U/dGhpcy5fZHJhd25FZGdlLmc6QmwobnVsbCl9ZnVuY3Rpb24gdyRlKG4pe3ZhciBlPSIiO2Zvcih2YXIgdCBvZiBPYmplY3Qua2V5cyhuKSludWxsIT1uW3RdJiYoZSs9JyAiJyt0KyciPSInK25bdF0rJyInKTt2YXIgaT10aGlzLmxh''@;'; put 'put ''eW91dFN5bmMoImRpZ3JhcGgge2EgLT4gYiBbIitlKyJdfSIsInN2ZyIsImRvdCIpLGE9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoaSwiaW1hZ2Uvc3ZnK3htbCIpO3JldHVybiBCbChkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpLmFwcGVuZChmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBhLmRvY3VtZW50RWxlbWVudH0pLnNlbGVjdCgiLmVkZ2UiKX1mdW5jdGlvbiBDJGUobixlLHQscixpLG8pe3ZhciBsPXFDKFQkZS5jYWxsKHRoaXMscixpKSk7cmV0dXJuIG4uZGF0YShbbF0pLEFQLmNhbGwobi5ub2RlKCksbCksUyRlKG4sZSx0LGkpLHRoaXN9ZnVu''@;'; put 'put ''Y3Rpb24gUyRlKG4sZSx0LHIsaSl7aWYoci5VUkx8fHIudG9vbHRpcCl2YXIgbz1uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJhIik7ZWxzZSBvPW47dmFyIGE9by5zZWxlY3RBbGwoImVsbGlwc2UscG9seWdvbixwYXRo''@;'; put 'put ''LHBvbHlsaW5lIiksbD1uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKTtpZigwIT1hLnNpemUoKSl7dmFyIHU9YS5ub2RlKCkuZ2V0QkJveCgpO3UuY3g9dS54K3Uud2lkdGgvMix1LmN5PXUueSt1LmhlaWdodC8yfWVsc2UgMCE9bC5zaXplKCkmJih1PXt4OitsLmF0dHIo''@;'; put 'put ''IngiKSx5OitsLmF0dHIoInkiKSx3aWR0aDowLGhlaWdodDowLGN4OitsLmF0dHIoIngiKSxjeTorbC5hdHRyKCJ5Iil9KTtyZXR1cm4gYS5lYWNoKGZ1bmN0aW9uKGcsRSl7dmFyIE89QmwodGhpcyk7aWYoTy5hdHRyKCJjeCIpKU8uYXR0cigiY3giLGF5KGUpKS5hdHRyKCJjeSIsYXkodCkp''@;'; put 'put ''O2Vsc2UgaWYoTy5hdHRyKCJwb2ludHMiKSl7dmFyIFo9Ty5hdHRyKCJwb2ludHMiKS50cmltKCk7Ty5hdHRyKCJwb2ludHMiLGZ1bmN0aW9uIHpmbihvLGUsdCl7dmFyIGkscj0oaT1vLnNwbGl0KCIgIikpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5zcGxpdCgiLCIpfSk7cmV0dXJuIHI9''@;'; put 'put ''aS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuW2F5KCtlKyArYS5zcGxpdCgiLCIpWzBdKSxheSgrdCsgK2Euc3BsaXQoIiwiKVsxXSldfSksKGk9ci5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEuam9pbigiLCIpfSkpLmpvaW4oIiAiKX0oWixlLXUuY3gsdC11LmN5KSl9ZWxzZXt2YXIgZWU9Ty5h''@;'; put 'put ''dHRyKCJkIik7Ty5hdHRyKCJkIixmdW5jdGlvbiBXZm4obixlLHQpeyhvPW4uc3BsaXQoL1tBLVogXS8pKS5zaGlmdCgpO3ZhciByPW4uc3BsaXQoL1teW0EtWiBdKy8pLG89KG8ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLnNwbGl0KCIsIil9KSxvLm1hcChmdW5jdGlvbihhKXtyZXR1cm5b''@;'; put 'put ''YXkoK2UrICthLnNwbGl0KCIsIilbMF0pLGF5KCt0KyArYS5zcGxpdCgiLCIpWzFdKV19KS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEuam9pbigiLCIpfSkpO3JldHVybiByLnJlZHVjZShmdW5jdGlvbihhLGwsdSl7cmV0dXJuIGEuY29uY2F0KGwsb1t1XSl9LFtdKS5qb2luKCIiKX0oZWUs''@;'; put 'put ''ZS11LmN4LHQtdS5jeSkpfX0pLDAhPWwuc2l6ZSgpJiZsLmF0dHIoIngiLGF5KCtsLmF0dHIoIngiKStlLXUuY3gpKS5hdHRyKCJ5IixheSgrbC5hdHRyKCJ5IikrdC11LmN5KSksdGhpc31mdW5jdGlvbiBFJGUoKXtpZighdGhpcy5fZHJhd25Ob2RlKXJldHVybiB0aGlzO3ZhciBuPXRoaXMu''@;'; put 'put ''X2RyYXduTm9kZS5nO3JldHVybiBuLmVtcHR5KCl8fG4ucmVtb3ZlKCksdGhpcy5fZHJhd25Ob2RlPW51bGwsdGhpc31mdW5jdGlvbiBNJGUoKXtyZXR1cm4gdGhpcy5fZHJhd25Ob2RlP3RoaXMuX2RyYXduTm9kZS5nOkJsKG51bGwpfWZ1bmN0aW9uIFQkZShuLGUpe3ZhciB0PSIiO2Zvcih2''@;'; put 'put ''YXIgciBvZiBPYmplY3Qua2V5cyhlKSludWxsIT1lW3JdJiYodCs9JyAiJytyKyciPSInK2Vbcl0rJyInKTt2YXIgbz10aGlzLmxheW91dFN5bmMoJ2dyYXBoIHsiJytuKyciIFsnK3QrIl19Iiwic3ZnIiwiZG90IiksbD0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhv''@;'; put 'put ''LCJpbWFnZS9zdmcreG1sIik7cmV0dXJuIEJsKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIGwuZG9jdW1lbnRFbGVtZW50fSkuc2VsZWN0KCIubm9kZSIpfWZ1bmN0aW9uIFhLKG4pe3NlbGYuZG9jdW1lbnQ9e30sbi5hZGRFdmVu''@;'; put 'put ''dExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihlKXtsZXQgdD1zZWxmWyJAaHBjYy1qcy93YXNtIl07bnVsbD09dCYmZS5kYXRhLnZpelVSTCYmKGltcG9ydFNjcmlwdHMoZS5kYXRhLnZpelVSTCksdD1zZWxmWyJAaHBjYy1qcy93YXNtIl0pLCJ2ZXJzaW9uIiE9ZS5kYXRhLnR5cGU/dC5H''@;'; put 'put ''cmFwaHZpei5sb2FkKCkudGhlbihyPT57Y29uc3QgaT1yLmxheW91dChlLmRhdGEuZG90LCJzdmciLGUuZGF0YS5lbmdpbmUsZS5kYXRhLm9wdGlvbnMpO24ucG9zdE1lc3NhZ2UoaT97dHlwZToiZG9uZSIsc3ZnOml9OmUuZGF0YS52aXpVUkw/e3R5cGU6ImluaXQifTp7dHlwZToic2tpcCJ9''@;'; put 'put ''KX0pLmNhdGNoKHI9PntuLnBvc3RNZXNzYWdlKHt0eXBlOiJlcnJvciIsZXJyb3I6ci5tZXNzYWdlfSl9KTp0LkdyYXBodml6LmxvYWQoKS50aGVuKHI9PntuLnBvc3RNZXNzYWdlKHt0eXBlOiJ2ZXJzaW9uIix2ZXJzaW9uOnIudmVyc2lvbigpfSl9KX0pfWZ1bmN0aW9uIEgzbigpe1hLKHNl''@;'; put 'put ''bGYpfWZ1bmN0aW9uIFYzbigpe3NlbGYub25jb25uZWN0PWZ1bmN0aW9uKG4pe2NvbnN0IGU9bi5wb3J0c1swXTtYSyhlKSxlLnN0YXJ0KCl9fWZ1bmN0aW9uIEg0ZShuLGUpe2lmKHRoaXMuX29wdGlvbnM9e3VzZVdvcmtlcjohMCx1c2VTaGFyZWRXb3JrZXI6ITEsZW5naW5lOiJkb3QiLGtl''@;'; put 'put ''eU1vZGU6InRpdGxlIixmYWRlOiEwLHR3ZWVuUGF0aHM6ITAsdHdlZW5TaGFwZXM6ITAsY29udmVydEVxdWFsU2lkZWRQb2x5Z29uczohMCx0d2VlblByZWNpc2lvbjoxLGdyb3dFbnRlcmluZ0VkZ2VzOiEwLHpvb206ITAsem9vbVNjYWxlRXh0ZW50OlsuMSwxMF0sem9vbVRyYW5zbGF0ZUV4''@;'; put 'put ''dGVudDpbWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSx3aWR0aDpudWxsLGhlaWdodDpudWxsLHNjYWxlOjEsZml0OiExfSxlIGluc3RhbmNlb2YgT2JqZWN0KWZvcih2YXIgdCBvZiBPYmplY3Qua2V5cyhlKSl0aGlzLl9vcHRpb25zW3RdPWVbdF07ZWxzZSJib29sZWFuIj09dHlwZW9mIGUmJih0''@;'; put 'put ''aGlzLl9vcHRpb25zLnVzZVdvcmtlcj1lKTt2YXIgcj10aGlzLl9vcHRpb25zLnVzZVdvcmtlcixpPXRoaXMuX29wdGlvbnMudXNlU2hhcmVkV29ya2VyO2lmKHR5cGVvZiBXb3JrZXI+InUiJiYocj0hMSksdHlwZW9mIFNoYXJlZFdvcmtlcj4idSImJihpPSExKSxyfHxpKXt2YXIgYT1uNGUo''@;'; put 'put ''InNjcmlwdCIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiJqYXZhc2NyaXB0L3dvcmtlciI9PUJsKHRoaXMpLmF0dHIoInR5cGUiKXx8QmwodGhpcykuYXR0cigic3JjIikmJkJsKHRoaXMpLmF0dHIoInNyYyIpLm1hdGNoKC8uKlwvQGhwY2MtanNcL3dhc20vKX0pOzA9PWEuc2l6ZSgpPyhj''@;'; put 'put ''b25zb2xlLndhcm4oJ05vIHNjcmlwdCB0YWcgb2YgdHlwZSAiamF2YXNjcmlwdC93b3JrZXIiIHdhcyBmb3VuZCBhbmQgInVzZVdvcmtlciIgaXMgdHJ1ZS4gTm90IHVzaW5nIHdlYiB3b3JrZXIuJykscj0hMSxpPSExKToodGhpcy5fdml6VVJMPWEuYXR0cigic3JjIiksdGhpcy5fdml6VVJM''@;'; put 'put ''fHwoY29uc29sZS53YXJuKCdObyAic3JjIiBhdHRyaWJ1dGUgb2Ygd2FzIGZvdW5kIG9uIHRoZSAiamF2YXNjcmlwdC93b3JrZXIiIHNjcmlwdCB0YWcgYW5kICJ1c2VXb3JrZXIiIGlzIHRydWUuIE5vdCB1c2luZyB3ZWIgd29ya2VyLicpLHI9ITEsaT0hMSkpfWlmKGkpe2NvbnN0IGc9ImRh''@;'; put 'put ''dGE6YXBwbGljYXRpb24vamF2YXNjcmlwdDtiYXNlNjQsIitidG9hKFhLLnRvU3RyaW5nKCkrIigiK1Yzbi50b1N0cmluZygpKyIpKCkiKTt0aGlzLl93b3JrZXI9dGhpcy5fd29ya2VyPW5ldyBTaGFyZWRXb3JrZXIoZyksdGhpcy5fd29ya2VyUG9ydD10aGlzLl93b3JrZXIucG9ydCx0aGlz''@;'; put 'put ''Ll93b3JrZXJQb3J0Q2xvc2U9dGhpcy5fd29ya2VyLnBvcnQuY2xvc2UuYmluZCh0aGlzLl93b3JrZXJQb3J0KSx0aGlzLl93b3JrZXIucG9ydC5zdGFydCgpLHRoaXMuX3dvcmtlckNhbGxiYWNrcz1bXX1lbHNlIGlmKHIpe3ZhciBsPW5ldyBCbG9iKFtYSy50b1N0cmluZygpKyIoIitIM24u''@;'; put 'put ''dG9TdHJpbmcoKSsiKSgpIl0pLHU9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobCk7dGhpcy5fd29ya2VyPW5ldyBXb3JrZXIodSksdGhpcy5fd29ya2VyUG9ydD10aGlzLl93b3JrZXIsdGhpcy5fd29ya2VyUG9ydENsb3NlPXRoaXMuX3dvcmtlci50ZXJtaW5hdGUuYmluZCh0aGlzLl93''@;'; put 'put ''b3JrZXIpLHRoaXMuX3dvcmtlckNhbGxiYWNrcz1bXX1lbHNlIGwkZS5sb2FkKCkudGhlbigoZz0+e3RoaXMuX2dyYXBodml6VmVyc2lvbj1nLnZlcnNpb24oKX0pLmJpbmQodGhpcykpO3RoaXMuX3NlbGVjdGlvbj1uLHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9idXN5PSExLHRoaXMuX2pvYnM9''@;'; put 'put ''W10sdGhpcy5fcXVldWU9W10sdGhpcy5fa2V5TW9kZXM9bmV3IFNldChbInRpdGxlIiwiaWQiLCJ0YWctaW5kZXgiLCJpbmRleCJdKSx0aGlzLl9pbWFnZXM9W10sdGhpcy5fdHJhbnNsYXRpb249dm9pZCAwLHRoaXMuX3NjYWxlPXZvaWQgMCx0aGlzLl9ldmVudFR5cGVzPVsiaW5pdEVuZCIs''@;'; put 'put ''InN0YXJ0IiwibGF5b3V0U3RhcnQiLCJsYXlvdXRFbmQiLCJkYXRhRXh0cmFjdEVuZCIsImRhdGFQcm9jZXNzUGFzczFFbmQiLCJkYXRhUHJvY2Vzc1Bhc3MyRW5kIiwiZGF0YVByb2Nlc3NFbmQiLCJyZW5kZXJTdGFydCIsInJlbmRlckVuZCIsInRyYW5zaXRpb25TdGFydCIsInRyYW5zaXRp''@;'; put 'put ''b25FbmQiLCJyZXN0b3JlRW5kIiwiZW5kIiwiem9vbSJdLHRoaXMuX2Rpc3BhdGNoPXI0ZSguLi50aGlzLl9ldmVudFR5cGVzKSxZZm4uY2FsbCh0aGlzKSxuLm5vZGUoKS5fX2dyYXBodml6X189dGhpc31mdW5jdGlvbiBRSyhuLGUpe3JldHVybiBCbChuKS5ncmFwaHZpeihlKX1tJGUucHJv''@;'; put 'put ''dG90eXBlPVA0ZS5wcm90b3R5cGUsSDRlLnByb3RvdHlwZT1RSy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkg0ZSxlbmdpbmU6ZnVuY3Rpb24gaTNuKG4pe3JldHVybiB0aGlzLl9vcHRpb25zLmVuZ2luZT1uLHRoaXN9LGFkZEltYWdlOmZ1bmN0aW9uIG8zbihuLGUsdCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2ltYWdlcy5wdXNoKHtwYXRoOm4sd2lkdGg6ZSxoZWlnaHQ6dH0pLHRoaXN9LGtleU1vZGU6ZnVuY3Rpb24gYTNuKG4pe2lmKCF0aGlzLl9rZXlNb2Rlcy5oYXMobikpdGhyb3cgRXJyb3IoIklsbGVnYWwga2V5TW9kZTogIituKTtpZihuIT10aGlzLl9vcHRpb25zLmtleU1vZGUmJm51bGwh''@;'; put 'put ''PXRoaXMuX2RhdGEpdGhyb3cgRXJyb3IoIlRvbyBsYXRlIHRvIGNoYW5nZSBrZXlNb2RlIik7cmV0dXJuIHRoaXMuX29wdGlvbnMua2V5TW9kZT1uLHRoaXN9LGZhZGU6ZnVuY3Rpb24gczNuKG4pe3JldHVybiB0aGlzLl9vcHRpb25zLmZhZGU9bix0aGlzfSx0d2VlblBhdGhzOmZ1bmN0aW9u''@;'; put 'put ''IGwzbihuKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblBhdGhzPW4sdGhpc30sdHdlZW5TaGFwZXM6ZnVuY3Rpb24gYzNuKG4pe3JldHVybiB0aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVzPW4sbiYmKHRoaXMuX29wdGlvbnMudHdlZW5QYXRocz0hMCksdGhpc30sY29udmVydEVxdWFsU2lk''@;'; put 'put ''ZWRQb2x5Z29uczpmdW5jdGlvbiB1M24obil7cmV0dXJuIHRoaXMuX29wdGlvbnMuY29udmVydEVxdWFsU2lkZWRQb2x5Z29ucz1uLHRoaXN9LHR3ZWVuUHJlY2lzaW9uOmZ1bmN0aW9uIGQzbihuKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbj1uLHRoaXN9LGdyb3dFbnRl''@;'; put 'put ''cmluZ0VkZ2VzOmZ1bmN0aW9uIGgzbihuKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdlcz1uLHRoaXN9LHpvb206ZnVuY3Rpb24gcmZuKG4pe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb209bix0aGlzLl9vcHRpb25zLnpvb20mJiF0aGlzLl96b29tQmVoYXZpb3I/ZSRl''@;'; put 'put ''LmNhbGwodGhpcyk6IXRoaXMuX29wdGlvbnMuem9vbSYmdGhpcy5fem9vbUJlaGF2aW9yJiYodGhpcy5fem9vbVNlbGVjdGlvbi5vbigiLnpvb20iLG51bGwpLHRoaXMuX3pvb21CZWhhdmlvcj1udWxsKSx0aGlzfSxyZXNldFpvb206ZnVuY3Rpb24gaWZuKG4pe3ZhciBlPXRoaXMuX3pvb21T''@;'; put 'put ''ZWxlY3Rpb247cmV0dXJuIG4mJihlPWUudHJhbnNpdGlvbihuKSksZS5jYWxsKHRoaXMuX3pvb21CZWhhdmlvci50cmFuc2Zvcm0sdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm0pLHRoaXN9LHpvb21CZWhhdmlvcjpmdW5jdGlvbiBzZm4oKXtyZXR1cm4gdGhpcy5fem9vbUJlaGF2aW9yfHxudWxs''@;'; put 'put ''fSx6b29tU2VsZWN0aW9uOmZ1bmN0aW9uIGxmbigpe3JldHVybiB0aGlzLl96b29tU2VsZWN0aW9ufHxudWxsfSx6b29tU2NhbGVFeHRlbnQ6ZnVuY3Rpb24gb2ZuKG4pe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb21TY2FsZUV4dGVudD1uLHRoaXN9LHpvb21UcmFuc2xhdGVFeHRlbnQ6ZnVu''@;'; put 'put ''Y3Rpb24gYWZuKG4pe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb21UcmFuc2xhdGVFeHRlbnQ9bix0aGlzfSxyZW5kZXI6ZnVuY3Rpb24gcGZuKG4pe3JldHVybiB0aGlzLl9idXN5Pyh0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVuZGVyLmJpbmQodGhpcyxuKSksdGhpcyk6KHRoaXMuX2Rpc3Bh''@;'; put 'put ''dGNoLmNhbGwoInJlbmRlclN0YXJ0Iix0aGlzKSx0aGlzLl90cmFuc2l0aW9uRmFjdG9yeT94SyhmdW5jdGlvbigpe3RoaXMuX3RyYW5zaXRpb249djRlKHRoaXMuX3RyYW5zaXRpb25GYWN0b3J5KCkpLHIkZS5jYWxsKHRoaXMsbil9LmJpbmQodGhpcyksMCk6ciRlLmNhbGwodGhpcyxuKSx0''@;'; put 'put ''aGlzKX0sbGF5b3V0OmZ1bmN0aW9uIFpmbihuLGUsdCxyKXtpZih0aGlzLl93b3JrZXIpRDRlLmNhbGwodGhpcyx7dHlwZToibGF5b3V0Iixkb3Q6bixlbmdpbmU6ZSxvcHRpb25zOnR9LGZ1bmN0aW9uKG8pe3IuY2FsbCh0aGlzLG8uZGF0YSl9KTtlbHNlIHRyeXt2YXIgaT10aGlzLmxheW91''@;'; put 'put ''dFN5bmMobiwic3ZnIixlLHQpO3IuY2FsbCh0aGlzLHt0eXBlOiJkb25lIixzdmc6aX0pfWNhdGNoKG8pe3IuY2FsbCh0aGlzLHt0eXBlOiJlcnJvciIsZXJyb3I6by5tZXNzYWdlfSl9fSxkb3Q6ZnVuY3Rpb24gR2ZuKG4sZSl7dmFyIHQ9dGhpcyxpPXRoaXMuX29wdGlvbnMuZW5naW5lLG89''@;'; put 'put ''dGhpcy5faW1hZ2VzO3JldHVybiB0aGlzLl9kaXNwYXRjaC5jYWxsKCJzdGFydCIsdGhpcyksdGhpcy5fYnVzeT0hMCx0aGlzLl9kaXNwYXRjaC5jYWxsKCJsYXlvdXRTdGFydCIsdGhpcyksdGhpcy5fd29ya2VyfHxudWxsIT10aGlzLmxheW91dFN5bmM/KHRoaXMubGF5b3V0KG4saSx7aW1h''@;'; put 'put ''Z2VzOm99LGZ1bmN0aW9uKGwpe3N3aXRjaChsLnR5cGUpe2Nhc2UiZXJyb3IiOmlmKCF0Ll9vbmVycm9yKXRocm93IGwuZXJyb3IubWVzc2FnZTt0Ll9vbmVycm9yKGwuZXJyb3IpO2JyZWFrO2Nhc2UiZG9uZSI6JGZuLmNhbGwodGhpcyxsLnN2ZyxlKX19KSx0aGlzKToodGhpcy5fYWZ0ZXJJ''@;'; put 'put ''bml0PXRoaXMuZG90LmJpbmQodGhpcyxuLGUpLHRoaXMpfSxkYXRhOmZ1bmN0aW9uIGRmbigpe3JldHVybiB0aGlzLl9kYXRhfHxudWxsfSxyZW5kZXJEb3Q6ZnVuY3Rpb24gcWZuKG4sZSl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5kb3QobixmdW5jdGlvbiByKCl7dC5yZW5kZXIoZSl9KSx0''@;'; put 'put ''aGlzfSx0cmFuc2l0aW9uOmZ1bmN0aW9uIEtmbihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEZ1bmN0aW9uP3RoaXMuX3RyYW5zaXRpb25GYWN0b3J5PW46dGhpcy5fdHJhbnNpdGlvbj12NGUobiksdGhpc30sYWN0aXZlOmZ1bmN0aW9uIFhmbihuKXt2YXIgdD10aGlzLl9zZWxlY3Rpb24uc2Vs''@;'; put 'put ''ZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIik7cmV0dXJuIDAhPXQuc2l6ZSgpP2Z1bmN0aW9uIE8ybihuLGUpe3ZhciByLGksdD1uLl9fdHJhbnNpdGlvbjtpZih0KWZvcihpIGluIGU9bnVsbD09ZT9udWxsOmUrIiIsdClpZigocj10W2ldKS5zdGF0ZT4xJiZyLm5hbWU9PT1lKXJl''@;'; put 'put ''dHVybiBuZXcgZTgoW1tuXV0sTDJuLGUsK2kpO3JldHVybiBudWxsfSh0Lm5vZGUoKSxuKTpudWxsfSxvcHRpb25zOmZ1bmN0aW9uIFFmbihuKXtpZih0eXBlb2Ygbj4idSIpcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sdGhpcy5fb3B0aW9ucyk7Zm9yKHZhciBlIG9mIE9iamVjdC5rZXlzKG4p''@;'; put 'put ''KXRoaXMuX29wdGlvbnNbZV09bltlXTtyZXR1cm4gdGhpc30sd2lkdGg6ZnVuY3Rpb24gSmZuKG4pe3JldHVybiB0aGlzLl9vcHRpb25zLndpZHRoPW4sdGhpc30saGVpZ2h0OmZ1bmN0aW9uIGUzbihuKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5oZWlnaHQ9bix0aGlzfSxzY2FsZTpmdW5jdGlv''@;'; put 'put ''biB0M24obil7cmV0dXJuIHRoaXMuX29wdGlvbnMuc2NhbGU9bix0aGlzfSxmaXQ6ZnVuY3Rpb24gbjNuKG4pe3JldHVybiB0aGlzLl9vcHRpb25zLmZpdD1uLHRoaXN9LGF0dHJpYnV0ZXI6ZnVuY3Rpb24gcjNuKG4pe3JldHVybiB0aGlzLl9hdHRyaWJ1dGVyPW4sdGhpc30sb246ZnVuY3Rp''@;'; put 'put ''b24gZjNuKG4sZSl7cmV0dXJuIHRoaXMuX2Rpc3BhdGNoLm9uKG4sZSksdGhpc30sb25lcnJvcjpmdW5jdGlvbiBwM24obil7cmV0dXJuIHRoaXMuX29uZXJyb3I9bix0aGlzfSxsb2dFdmVudHM6ZnVuY3Rpb24gTTNuKG4pe3ZhciBlPURhdGUubm93KCksdD17fSxyPXRoaXMuX2V2ZW50VHlw''@;'; put 'put ''ZXMsaT1NYXRoLm1heCguLi5yLm1hcCh1PT51Lmxlbmd0aCkpO2ZvcihsZXQgdT0wO3U8ci5sZW5ndGg7dSsrKXtsZXQgZz1yW3VdO3RbZ109W107dmFyIGEsbCxvPXRoaXM7dGhpcy5vbihnKyIubG9nIixuP2Z1bmN0aW9uKCl7dmFyIEU9RGF0ZS5ub3coKSxPPXRbZ10ubGVuZ3RoO3RbZ10u''@;'; put 'put ''cHVzaChFKTt2YXIgWj0iIjtpZihaKz0iRXZlbnQgIixaKz1EbSgiID4yIikodSkrIiAiLForPWcrIiAiLnJlcGVhdChpLWcubGVuZ3RoKSxaKz1EbSgiID41IikoRS1lKSsiICIsImluaXRFbmQiIT1nJiYoWis9RG0oIiA+NSIpKEUtdC5zdGFydFtPXSkpLCJkYXRhUHJvY2Vzc0VuZCI9PWcm''@;'; put 'put ''JihaKz0iIHByZXBhcmUgICAgICAgICAgICAgICAgICIrRG0oIiA+NSIpKEUtdC5sYXlvdXRFbmRbT10pKSwicmVuZGVyRW5kIj09ZyYmby5fdHJhbnNpdGlvbiYmKForPSIgdHJhbnNpdGlvbiBzdGFydCBtYXJnaW4gIitEbSgiID41Iikoby5fdHJhbnNpdGlvbi5kZWxheSgpLShFLXQucmVu''@;'; put 'put ''ZGVyU3RhcnRbT10pKSxhPW8uX3RyYW5zaXRpb24uZGVsYXkoKSxsPW8uX3RyYW5zaXRpb24uZHVyYXRpb24oKSksInRyYW5zaXRpb25TdGFydCI9PWcpe3ZhciBlZT1FLXQucmVuZGVyU3RhcnRbT107Wis9IiB0cmFuc2l0aW9uIGRlbGF5ICAgICAgICAiK0RtKCIgPjUiKShFLXQucmVuZGVy''@;'; put 'put ''U3RhcnRbT10pLForPSIgZXhwZWN0ZWQgIitEbSgiID41IikoYSksWis9IiBkaWZmICIrRG0oIiA+NSIpKGVlLWEpfWlmKCJ0cmFuc2l0aW9uRW5kIj09Zyl7dmFyIHZlPUUtdC50cmFuc2l0aW9uU3RhcnRbT107Wis9IiB0cmFuc2l0aW9uIGR1cmF0aW9uICAgICAiK0RtKCIgPjUiKSh2ZSks''@;'; put 'put ''Wis9IiBleHBlY3RlZCAiK0RtKCIgPjUiKShsKSxaKz0iIGRpZmYgIitEbSgiID41IikodmUtbCl9Y29uc29sZS5sb2coWiksZT1FfTpudWxsKX1yZXR1cm4gdGhpc30sZGVzdHJveTpmdW5jdGlvbiBUM24oKXtyZXR1cm4gZGVsZXRlIHRoaXMuX3NlbGVjdGlvbi5ub2RlKCkuX19ncmFwaHZp''@;'; put 'put ''el9fLHRoaXMuX3dvcmtlciYmdGhpcy5fd29ya2VyUG9ydENsb3NlKCksdGhpc30sZHJhd0VkZ2U6ZnVuY3Rpb24gUjNuKG4sZSx0LHIsaSxvPXt9KXtpZigoaT1PYmplY3QuYXNzaWduKHt9LGkpKS5zdHlsZSYmaS5zdHlsZS5pbmNsdWRlcygiaW52aXMiKSl2YXIgYT1CbChudWxsKTtlbHNl''@;'; put 'put ''e3ZhciBnPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIiksTz1xQyh3JGUuY2FsbCh0aGlzLGkpKTthPWcuYXBwZW5kKCJnIikuZGF0YShbT10pLEFQLmNhbGwoYS5ub2RlKCksTyksdiRl''@;'; put 'put ''LmNhbGwodGhpcyxhLG4sZSx0LHIsaSxvKX1yZXR1cm4gdGhpcy5fZHJhd25FZGdlPXtnOmEseDE6bix5MTplLHgyOnQseTI6cixhdHRyaWJ1dGVzOml9LHRoaXN9LHVwZGF0ZURyYXduRWRnZTpmdW5jdGlvbiBJM24obixlLHQscixpPXt9LG89e30pe2lmKCF0aGlzLl9kcmF3bkVkZ2UpdGhy''@;'; put 'put ''b3cgRXJyb3IoIk5vIGVkZ2UgaGFzIGJlZW4gZHJhd24iKTt2YXIgYT10aGlzLl9kcmF3bkVkZ2UuZztyZXR1cm4gaT1PYmplY3QuYXNzaWduKHRoaXMuX2RyYXduRWRnZS5hdHRyaWJ1dGVzLGkpLHRoaXMuX2RyYXduRWRnZS54MT1uLHRoaXMuX2RyYXduRWRnZS55MT1lLHRoaXMuX2RyYXdu''@;'; put 'put ''RWRnZS54Mj10LHRoaXMuX2RyYXduRWRnZS55Mj1yLCFhLmVtcHR5KCl8fGkuc3R5bGUmJmkuc3R5bGUuaW5jbHVkZXMoImludmlzIil8fChhPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJn''@;'; put 'put ''IikuYXBwZW5kKCJnIiksdGhpcy5fZHJhd25FZGdlLmc9YSksYS5lbXB0eSgpfHx2JGUuY2FsbCh0aGlzLGEsbixlLHQscixpLG8pLHRoaXN9LG1vdmVEcmF3bkVkZ2VFbmRQb2ludDpmdW5jdGlvbiBEM24obixlLHQ9e30pe2lmKCF0aGlzLl9kcmF3bkVkZ2UpdGhyb3cgRXJyb3IoIk5vIGVk''@;'; put 'put ''Z2UgaGFzIGJlZW4gZHJhd24iKTt2YXIgcj10aGlzLl9kcmF3bkVkZ2UuZyxpPXRoaXMuX2RyYXduRWRnZS54MSxvPXRoaXMuX2RyYXduRWRnZS55MSxhPXRoaXMuX2RyYXduRWRnZS5hdHRyaWJ1dGVzO3JldHVybiB0aGlzLl9kcmF3bkVkZ2UueDI9bix0aGlzLl9kcmF3bkVkZ2UueTI9ZSxf''@;'; put 'put ''JGUocixpLG8sbixlLGEsdCksdGhpc30saW5zZXJ0RHJhd25FZGdlOmZ1bmN0aW9uIEwzbihuKXtpZighdGhpcy5fZHJhd25FZGdlKXRocm93IEVycm9yKCJObyBlZGdlIGhhcyBiZWVuIGRyYXduIik7dmFyIGU9dGhpcy5fZHJhd25FZGdlLmc7aWYoZS5lbXB0eSgpKXJldHVybiB0aGlzO2Uu''@;'; put 'put ''c2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGl0bGUiKS50ZXh0KG4pO3ZhciBhPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIiksbD1hLmRhdHVtKCksdT10aGlzLl9leHRyYWN0''@;'; put 'put ''RGF0YShlLGwuY2hpbGRyZW4ubGVuZ3RoLGEuZGF0dW0oKSk7cmV0dXJuIGwuY2hpbGRyZW4ucHVzaCh1KSxTNGUoZSx1KSx0aGlzLl9kcmF3bkVkZ2U9bnVsbCx0aGlzfSxyZW1vdmVEcmF3bkVkZ2U6eSRlLHJlbW92ZURyYXduRWRnZTp5JGUsZHJhd25FZGdlU2VsZWN0aW9uOmIkZSxkcmF3''@;'; put 'put ''bkVkZ2VTZWxlY3Rpb246YiRlLGRyYXdOb2RlOmZ1bmN0aW9uIE8zbihuLGUsdCxyPXt9LGk9e30pe2lmKChyPU9iamVjdC5hc3NpZ24oe30scikpLnN0eWxlJiZyLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpKXZhciBvPUJsKG51bGwpO2Vsc2V7dmFyIHU9dGhpcy5fc2VsZWN0aW9uLnNlbGVj''@;'; put 'put ''dFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxFPXFDKFQkZS5jYWxsKHRoaXMsdCxyKSk7bz11LmFwcGVuZCgiZyIpLmRhdGEoW0VdKSxBUC5jYWxsKG8ubm9kZSgpLEUpLEMkZS5jYWxsKHRoaXMsbyxuLGUsdCxyLGkpfXJl''@;'; put 'put ''dHVybiB0aGlzLl9kcmF3bk5vZGU9e2c6byxub2RlSWQ6dCx4Om4seTplLGF0dHJpYnV0ZXM6cn0sdGhpc30sdXBkYXRlRHJhd25Ob2RlOmZ1bmN0aW9uIE4zbihuLGUsdCxyPXt9LGk9e30pe2lmKCF0aGlzLl9kcmF3bk5vZGUpdGhyb3cgRXJyb3IoIk5vIG5vZGUgaGFzIGJlZW4gZHJhd24i''@;'; put 'put ''KTt2YXIgbz10aGlzLl9kcmF3bk5vZGUuZztyZXR1cm4gbnVsbD09dCYmKHQ9dGhpcy5fZHJhd25Ob2RlLm5vZGVJZCkscj1PYmplY3QuYXNzaWduKHRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzLHIpLHRoaXMuX2RyYXduTm9kZS5ub2RlSWQ9dCx0aGlzLl9kcmF3bk5vZGUueD1uLHRoaXMu''@;'; put 'put ''X2RyYXduTm9kZS55PWUsIW8uZW1wdHkoKXx8ci5zdHlsZSYmci5zdHlsZS5pbmNsdWRlcygiaW52aXMiKXx8KG89dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5hcHBlbmQoImciKSx0''@;'; put 'put ''aGlzLl9kcmF3bk5vZGUuZz1vKSxvLmVtcHR5KCl8fEMkZS5jYWxsKHRoaXMsbyxuLGUsdCxyLGkpLHRoaXN9LG1vdmVEcmF3bk5vZGU6ZnVuY3Rpb24gRjNuKG4sZSx0PXt9KXtpZighdGhpcy5fZHJhd25Ob2RlKXRocm93IEVycm9yKCJObyBub2RlIGhhcyBiZWVuIGRyYXduIik7dmFyIHI9''@;'; put 'put ''dGhpcy5fZHJhd25Ob2RlLmcsaT10aGlzLl9kcmF3bk5vZGUuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5fZHJhd25Ob2RlLng9bix0aGlzLl9kcmF3bk5vZGUueT1lLHIuZW1wdHkoKXx8UyRlKHIsbixlLGkpLHRoaXN9LGluc2VydERyYXduTm9kZTpmdW5jdGlvbiBQM24obil7aWYoIXRoaXMu''@;'; put 'put ''X2RyYXduTm9kZSl0aHJvdyBFcnJvcigiTm8gbm9kZSBoYXMgYmVlbiBkcmF3biIpO251bGw9PW4mJihuPXRoaXMuX2RyYXduTm9kZS5ub2RlSWQpO3ZhciBlPXRoaXMuX2RyYXduTm9kZS5nO2lmKGUuZW1wdHkoKSlyZXR1cm4gdGhpczt2YXIgdD10aGlzLl9kcmF3bk5vZGUuYXR0cmlidXRl''@;'; put 'put ''cztpZihlLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRpdGxlIikudGV4dChuKSx0LlVSTHx8dC50b29sdGlwKXZhciBvPWUuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImEiKSxsPShvLnNlbGVjdFdpdGhvdXRE''@;'; put 'put ''YXRhUHJvcGFnYXRpb24oImVsbGlwc2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksby5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0ZXh0IikpO2Vsc2UgZS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJlbGxpcHNlLHBvbHlnb24scGF0aCxwb2x5bGluZSIpLGw9ZS5zZWxl''@;'; put 'put ''Y3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0ZXh0Iik7bC50ZXh0KHQubGFiZWx8fG4pO3ZhciBFPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIiksTz1FLmRhdHVtKCksWj10aGlzLl9l''@;'; put 'put ''eHRyYWN0RGF0YShlLE8uY2hpbGRyZW4ubGVuZ3RoLEUuZGF0dW0oKSk7cmV0dXJuIE8uY2hpbGRyZW4ucHVzaChaKSxTNGUoZSxaKSx0aGlzLl9kcmF3bk5vZGU9bnVsbCx0aGlzfSxyZW1vdmVEcmF3bk5vZGU6RSRlLHJlbW92ZURyYXduTm9kZTpFJGUsZHJhd25Ob2RlU2VsZWN0aW9uOk0k''@;'; put 'put ''ZSxkcmF3bk5vZGVTZWxlY3Rpb246TSRlLGdyYXBodml6VmVyc2lvbjpmdW5jdGlvbiBnZm4oKXtyZXR1cm4gdGhpcy5fZ3JhcGh2aXpWZXJzaW9ufX0sekMucHJvdG90eXBlLmdyYXBodml6PWZ1bmN0aW9uIEIzbihuKXt2YXIgZT10aGlzLm5vZGUoKS5fX2dyYXBodml6X187cmV0dXJuIGU/''@;'; put 'put ''KGUub3B0aW9ucyhuKSx4SyhmdW5jdGlvbigpe2UuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMpfS5iaW5kKHRoaXMpLDApKTplPW5ldyBINGUodGhpcyxuKSxlfSx6Qy5wcm90b3R5cGUuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbj1mdW5jdGlvbiBqM24obil7cmV0dXJuIEJs''@;'; put 'put ''KHRoaXMuc2l6ZSgpPjA/dGhpcy5ub2RlKCkucXVlcnlTZWxlY3RvcihuKTpudWxsKX07dmFyIFUzbj1oKDk4MDgzKTtmdW5jdGlvbiB6M24obixlKXsxJm4mJkl0KDAsImNsci1pY29uIiwyNCl9ZnVuY3Rpb24gVzNuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItaWNvbiIs''@;'; put 'put ''MjYpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtZZSh0KTtjb25zdCBpPVRlKDIpO3JldHVybiBpLmxpYnJhcmllc1NlYXJjaD0iIixYZShpLmxpYnJhcnlPbkZpbHRlcigpKX0pLHRlKCl9fWZ1bmN0aW9uIFkzbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLXRyZWUtbm9kZSIs''@;'; put 'put ''NSkoMSwiZGl2IiwyMikoMiwiaW5wdXQiLDIzLDIpLGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKCk7cmV0dXJuIGZpKG8ubGlicmFyaWVzU2VhcmNoLGkpfHwoby5saWJyYXJpZXNTZWFyY2g9aSksWGUoaSl9KSx3dCgia2V5dXAiLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIFllKHQpLFhlKFRlKCkubGlicmFyeU9uRmlsdGVyKCkpfSksdGUoKSx2dCg0LHozbiwxLDAsImNsci1pY29uIiwyNCksdnQoNSxXM24sMSwwLCJjbHItaWNvbiIsMjUpLHRlKCkoKX1pZigyJm4pe2NvbnN0IHQ9b28oMykscj1UZSgpO2llKDIpLGRpKCJuZ01vZGVsIixyLmxpYnJh''@;'; put 'put ''cmllc1NlYXJjaCksaWUoMiksX3QodC52YWx1ZS5sZW5ndGg8MT80Oi0xKSxpZSgpLF90KHQudmFsdWUubGVuZ3RoPjA/NTotMSl9fWZ1bmN0aW9uIFozbihuLGUpezEmbiYmSXQoMCwiY2xyLWljb24iLDI0KX1mdW5jdGlvbiBHM24obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImNs''@;'; put 'put ''ci1pY29uIiwyNiksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpLFRlKCk7Y29uc3QgaT1vbygzKSxvPVRlKDIpLiRpbXBsaWNpdCxhPVRlKCk7cmV0dXJuIGkudmFsdWU9IiIsby5zZWFyY2hTdHJpbmc9IiIsWGUoYS50cmVlT25GaWx0ZXIobywidGFibGVzLlRBQkxFTkFNRSIpKX0pLHRl''@;'; put 'put ''KCl9fWZ1bmN0aW9uICQzbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLXRyZWUtbm9kZSIsNSkoMSwiZGl2IiwyMikoMiwiaW5wdXQiLDMxLDMpLGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKDIpLiRpbXBsaWNpdDtyZXR1cm4gZmko''@;'; put 'put ''by5zZWFyY2hTdHJpbmcsaSl8fChvLnNlYXJjaFN0cmluZz1pKSxYZShpKX0pLHd0KCJrZXl1cCIsZnVuY3Rpb24oKXtZZSh0KTtjb25zdCBpPVRlKDIpLiRpbXBsaWNpdDtyZXR1cm4gWGUoVGUoKS50cmVlT25GaWx0ZXIoaSwidGFibGVzLlRBQkxFTkFNRSIpKX0pLHRlKCksdnQoNCxaM24s''@;'; put 'put ''MSwwLCJjbHItaWNvbiIsMjQpLHZ0KDUsRzNuLDEsMCwiY2xyLWljb24iLDI1KSx0ZSgpKCl9aWYoMiZuKXtjb25zdCB0PW9vKDMpLHI9VGUoMikuJGltcGxpY2l0O2llKDIpLGRpKCJuZ01vZGVsIixyLnNlYXJjaFN0cmluZyksaWUoMiksX3QodC52YWx1ZS5sZW5ndGg8MT80Oi0xKSxpZSgp''@;'; put 'put ''LF90KHQudmFsdWUubGVuZ3RoPjA/NTotMSl9fWZ1bmN0aW9uIHEzbihuLGUpezEmbiYmSXQoMCwiY2xyLWljb24iLDI0KX1mdW5jdGlvbiBLM24obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImNsci1pY29uIiwyNiksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpLFRlKCk7Y29u''@;'; put 'put ''c3QgaT1vbygzKSxvPVRlKCkuJGltcGxpY2l0LGE9VGUoMyk7cmV0dXJuIGkudmFsdWU9IiIsby5zZWFyY2hTdHJpbmc9IiIsWGUoYS50cmVlT25GaWx0ZXIobywiY29sdW1ucy5DT0xOQU1FIikpfSksdGUoKX19ZnVuY3Rpb24gWDNuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJj''@;'; put 'put ''bHItdHJlZS1ub2RlIiw1KSgxLCJkaXYiLDIyKSgyLCJpbnB1dCIsMzQsMyksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoKS4kaW1wbGljaXQ7cmV0dXJuIGZpKG8uc2VhcmNoU3RyaW5nLGkpfHwoby5zZWFyY2hTdHJpbmc9aSksWGUoaSl9KSx3dCgi''@;'; put 'put ''a2V5dXAiLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3QgaT1UZSgpLiRpbXBsaWNpdDtyZXR1cm4gWGUoVGUoMykudHJlZU9uRmlsdGVyKGksImNvbHVtbnMuQ09MTkFNRSIpKX0pLHRlKCksdnQoNCxxM24sMSwwLCJjbHItaWNvbiIsMjQpLHZ0KDUsSzNuLDEsMCwiY2xyLWljb24iLDI1KSx0ZSgp''@;'; put 'put ''KCl9aWYoMiZuKXtjb25zdCB0PW9vKDMpLHI9VGUoKS4kaW1wbGljaXQ7aWUoMiksZGkoIm5nTW9kZWwiLHIuc2VhcmNoU3RyaW5nKSxpZSgyKSxfdCh0LnZhbHVlLmxlbmd0aDwxPzQ6LTEpLGllKCksX3QodC52YWx1ZS5sZW5ndGg+MD81Oi0xKX19ZnVuY3Rpb24gUTNuKG4sZSl7aWYoMSZu''@;'; put 'put ''KXtjb25zdCB0PXduKCk7SigwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiwzNSksd3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGk9WWUodCkuJGltcGxpY2l0LG89VGUoKS4kaW1wbGljaXQsYT1UZSgyKS4kaW1wbGljaXQ7cmV0dXJuIFhlKFRlKCkuY29sdW1uT25DbGljayhpLGEs''@;'; put 'put ''bykpfSksSXQoMiwiY2xyLWljb24iLDM2KSxTZSgzKSx0ZSgpKCl9aWYoMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0LHI9VGUoNCk7aWUoKSx3cigiY29sdW1uLWFjdGl2ZSIsci5saWJDb2x1bW5BY3RpdmUodC5DT0xVUkkpKSxpZSgyKSxTcigiICIsdC5DT0xOQU1FLCIgIil9fWZ1bmN0aW9u''@;'; put 'put ''IEozbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLXRyZWUtbm9kZSIsMjgpLHd0KCJjbGljayIsZnVuY3Rpb24oaSl7Y29uc3Qgbz1ZZSh0KS4kaW1wbGljaXQsYT1UZSgyKS4kaW1wbGljaXQ7cmV0dXJuIFhlKFRlKCkudHJlZU5vZGVDbGlja2VkKGksbyxhLnRhYmxlcykp''@;'; put 'put ''fSksaGkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihpKXtjb25zdCBvPVllKHQpLiRpbXBsaWNpdDtyZXR1cm4gZmkoby5leHBhbmRlZCxpKXx8KG8uZXhwYW5kZWQ9aSksWGUoaSl9KSxKKDEsInAiLDMyKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaT1ZZSh0KS4kaW1wbGlj''@;'; put 'put ''aXQsbz1UZSgyKS4kaW1wbGljaXQ7cmV0dXJuIFhlKFRlKCkudGFibGVPbkNsaWNrKGkuVEFCTEVVUkksaSxvKSl9KSxJdCgyLCJjbHItaWNvbiIsMzMpLFNlKDMpLHRlKCksdnQoNCxYM24sNiwzLCJjbHItdHJlZS1ub2RlIiw1KSxfbyg1LFEzbiw0LDMsImNsci10cmVlLW5vZGUiLG51bGws''@;'; put 'put ''Q28pLHRlKCl9aWYoMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0O3dyKCJjbHItZXhwYW5kZWQiLHQuZXhwYW5kZWQpLGRpKCJjbHJFeHBhbmRlZCIsdC5leHBhbmRlZCkscnQoImNsckxvYWRpbmciLHQubG9hZGluZ0NvbHVtbnMmJiF0LmNvbHVtbnMpLGllKCkscnQoImlkIix0LlRBQkxFVVJJ''@;'; put 'put ''KSxpZSgyKSxTcigiICIsdC5UQUJMRU5BTUUsIiAiKSxpZSgpLF90KHQuY29sdW1ucz80Oi0xKSxpZSgpLHlvKHQuY29sdW1ucyl9fWZ1bmN0aW9uIGVwbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLXRyZWUtbm9kZSIsMjgpLHd0KCJjbGljayIsZnVuY3Rpb24oaSl7WWUo''@;'; put 'put ''dCk7Y29uc3Qgbz1UZSgpLiRpbXBsaWNpdCxhPVRlKCk7cmV0dXJuIFhlKGEudHJlZU5vZGVDbGlja2VkKGksbyxhLmxpYnJhcnlMaXN0KSl9KSxoaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoKS4kaW1wbGljaXQ7cmV0dXJuIGZpKG8uZXhwYW5k''@;'; put 'put ''ZWQsaSl8fChvLmV4cGFuZGVkPWkpLFhlKGkpfSksSigxLCJwIiwyOSksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoKS4kaW1wbGljaXQsbz1UZSgpO3JldHVybiBvLmxpYj1pLkxJQlJBUllJRCxYZShvLmxpYnJhcnlPbkNsaWNrKG8ubGlifHwiIixpKSl9KSxJdCgy''@;'; put 'put ''LCJjbHItaWNvbiIsMzApLFNlKDMpLHRlKCksdnQoNCwkM24sNiwzLCJjbHItdHJlZS1ub2RlIiw1KSxfbyg1LEozbiw3LDcsImNsci10cmVlLW5vZGUiLDI3LENvKSx0ZSgpfWlmKDImbil7Y29uc3QgdD1UZSgpLiRpbXBsaWNpdDt3cigiY2xyLWV4cGFuZGVkIix0LmV4cGFuZGVkKSxkaSgi''@;'; put 'put ''Y2xyRXhwYW5kZWQiLHQuZXhwYW5kZWQpLHJ0KCJjbHJMb2FkaW5nIix0LmxvYWRpbmdUYWJsZXMmJiF0LnRhYmxlcyksaWUoMyksU3IoIiAiLHQuTElCUkFSWU5BTUUsIiAiKSxpZSgpLF90KHQudGFibGVzPzQ6LTEpLGllKCkseW8odC50YWJsZXMpfX1mdW5jdGlvbiB0cG4obixlKXtpZigx''@;'; put 'put ''Jm4mJnZ0KDAsZXBuLDcsNiwiY2xyLXRyZWUtbm9kZSIsMjcpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdDtfdCghdC5oaWRkZW4mJnQuaW5Gb3JlZ3JvdW5kPzA6LTEpfX1mdW5jdGlvbiBucG4obixlKXsxJm4mJihKKDAsImRpdiIsNikoMSwic3BhbiIsMzcpLFNlKDIsIiBMb2FkaW5nLi4u''@;'; put 'put ''ICIpLHRlKCkoKSl9ZnVuY3Rpb24gcnBuKG4sZSl7MSZuJiYoSigwLCJkaXYiLDkpLEl0KDEsImNsci1pY29uIiwzOCksSigyLCJwIiwzOSksU2UoMywiIFBsZWFzZSBzZWxlY3QgYSBjb2x1bW4gb3IgdGFibGUgIiksdGUoKSgpKX1mdW5jdGlvbiBpcG4obixlKXtpZigxJm4mJihKKDAsImgz''@;'; put 'put ''Iiw0NiksU2UoMSksdGUoKSksMiZuKXtjb25zdCB0PVRlKDMpO2llKCksU3IoIiAiLHQuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uP3QuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUrIi4iK3QuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uOnQuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUs''@;'; put 'put ''IiAiKX19ZnVuY3Rpb24gb3BuKG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiLDQwKSx2dCgxLGlwbiwyLDEsImgzIiw0NiksdGUoKSksMiZuKXtjb25zdCB0PVRlKDIpO2llKCksX3QodC5jdXJyZW50TGluZWFnZVBhdGhDb2x1bW58fHQuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGU/LTE6MSl9''@;'; put 'put ''fWZ1bmN0aW9uIGFwbihuLGUpe2lmKDEmbiYmKEooMCwic3BhbiIpLFNlKDEpLEooMiwiYSIsNDcpLFNlKDMpLHRlKCksU2UoNCksdGUoKSksMiZuKXtjb25zdCB0PVRlKDIpO2llKCksU3IoIiAiLHQubGluZWFnZVRhYmxlTmFtZS5zcGxpdCgiLiIpWzBdLCIuIiksaWUoKSxydCgicm91dGVy''@;'; put 'put ''TGluayIsIi92aWV3L2RhdGEvIit0LmxpbmVhZ2VUYWJsZU5hbWUpLGllKCkscHIodC5saW5lYWdlVGFibGVOYW1lLnNwbGl0KCIuIilbMV0pLGllKCksU3IoIiIsdC5saW5lYWdlQ29sdW1uTmFtZS5sZW5ndGg+MD8iLiIrdC5saW5lYWdlQ29sdW1uTmFtZToiIiwiICIpfX1mdW5jdGlvbiBz''@;'; put 'put ''cG4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRpdiIsNTYpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoNCkuZG93bmxvYWRDU1YoKSl9KSxTZSgxLCJDU1YiKSx0ZSgpfX1mdW5jdGlvbiBscG4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAs''@;'; put 'put ''ImNsci1kcm9wZG93bi1tZW51Iiw1NSkoMSwiZGl2Iiw1Niksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgzKS5kb3dubG9hZFNWRygpKX0pLFNlKDIsIlNWRyIpLHRlKCksSigzLCJkaXYiLDU2KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhl''@;'; put 'put ''KFRlKDMpLmRvd25sb2FkUE5HKCkpfSksU2UoNCwiUE5HIiksdGUoKSxKKDUsImRpdiIsNTYpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoMykuZG93bmxvYWREb3QoKSl9KSxTZSg2LCJEb3QiKSx0ZSgpLHZ0KDcsc3BuLDIsMCwiZGl2Iiw1NyksdGUoKX1pZigy''@;'; put 'put ''Jm4pe2NvbnN0IHQ9VGUoMyk7aWUoNyksX3QodC5mbGF0ZGF0YT83Oi0xKX19ZnVuY3Rpb24gY3BuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItY2hlY2tib3gtd3JhcHBlciIsNTQpKDEsImlucHV0Iiw1OCksd3QoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCks''@;'; put 'put ''WGUoVGUoMykuZ2VuZXJhdGVHcmFwaCgpKX0pLGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKDMpO3JldHVybiBmaShvLnJlZnJlc2hDYWNoZSxpKXx8KG8ucmVmcmVzaENhY2hlPWkpLFhlKGkpfSksdGUoKSxKKDIsImxhYmVsIiksU2UoMywiUmVmcmVz''@;'; put 'put ''aCBDYWNoZSIpLHRlKCkoKX1pZigyJm4pe2NvbnN0IHQ9VGUoMyk7aWUoKSxkaSgibmdNb2RlbCIsdC5yZWZyZXNoQ2FjaGUpfX1mdW5jdGlvbiB1cG4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRpdiIsNDQpKDEsImJ1dHRvbiIsNDgpLHd0KCJjbGljayIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gWWUodCksWGUoVGUoMikubGltaXREb3REZXB0aD0hMCl9KSxTZSgyLCIgTGltaXQgZGVwdGggIiksdGUoKSxKKDMsImRpdiIsNDkpKDQsImRpdiIsNTApLHd0KCJjbGljayIsZnVuY3Rpb24oKXtZZSh0KTtjb25zdCBpPVRlKDIpO3JldHVybiBpLmZvcndhcmRMaW5lYWdlPSExLFhl''@;'; put 'put ''KGkucm91dGVyLnVybC5pbmNsdWRlcygiY29sdW1uIik/aS5vbkdlbmVyYXRlQ2xpY2soKTppLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSl9KSxJdCg1LCJpbnB1dCIsNTEpLEooNiwibGFiZWwiKSxTZSg3LCJCYWNrd2FyZCIpLHRlKCkoKSxKKDgsImRpdiIsNTApLHd0KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXtZZSh0KTtjb25zdCBpPVRlKDIpO3JldHVybiBpLmZvcndhcmRMaW5lYWdlPSEwLFhlKGkucm91dGVyLnVybC5pbmNsdWRlcygiY29sdW1uIik/aS5vbkdlbmVyYXRlQ2xpY2soKTppLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSl9KSxJdCg5LCJpbnB1dCIsNTEpLEoo''@;'; put 'put ''MTAsImxhYmVsIiksU2UoMTEsIkZvcndhcmQiKSx0ZSgpKCkoKSxKKDEyLCJjbHItZHJvcGRvd24iLDUyKSgxMywiYnV0dG9uIiw1MyksU2UoMTQsIiBEb3dubG9hZCAiKSxJdCgxNSwiY2xyLWljb24iLDIwKSx0ZSgpLFluKDE2LGxwbiw4LDEsImNsci1kcm9wZG93bi1tZW51IiwyMSksdGUo''@;'; put 'put ''KSx2dCgxNyxjcG4sNCwxLCJjbHItY2hlY2tib3gtd3JhcHBlciIsNTQpLHRlKCl9aWYoMiZuKXtjb25zdCB0PVRlKDIpO2llKDUpLHJ0KCJjaGVja2VkIiwhdC5mb3J3YXJkTGluZWFnZSksaWUoNCkscnQoImNoZWNrZWQiLHQuZm9yd2FyZExpbmVhZ2UpLGllKDQpLHJ0KCJkaXNhYmxlZCIs''@;'; put 'put ''IXQuY29sdW1uJiYhdC50YWJsZSksaWUoNCksX3QodC5jb2x1bW4/MTc6LTEpfX1mdW5jdGlvbiBkcG4obixlKXsxJm4mJihKKDAsInNwYW4iLDYwKSxTZSgxLCIgTG9hZGluZy4uLiAiKSx0ZSgpKX1mdW5jdGlvbiBocG4obixlKXsxJm4mJkl0KDAsInNwYW4iLDM3KX1mdW5jdGlvbiBmcG4o''@;'; put 'put ''bixlKXtpZigxJm4mJihKKDAsImRpdiIsNjEpKDEsImRpdiIsNjIpLHZ0KDIsaHBuLDEsMCwic3BhbiIsMzcpLHRlKCksSXQoMywiZGl2Iiw2MyksdGUoKSksMiZuKXtjb25zdCB0PVRlKDMpO2llKDIpLF90KHQuZ3JhcGhSZW5kZXJpbmc/MjotMSl9fWZ1bmN0aW9uIHBwbihuLGUpe2lmKDEm''@;'; put 'put ''biYmKEooMCwiZGl2IikoMSwiZGl2Iiw1OSksdnQoMixkcG4sMiwwLCJzcGFuIiw2MCksdnQoMyxmcG4sNCwxLCJkaXYiLDYxKSx0ZSgpKCkpLDImbil7Y29uc3QgdD1UZSgyKTt3cigibXQtMiIsdC50YWJsZUZsYWcpLGllKDIpLF90KHQuZ3JhcGhMb2FkaW5nPzI6LTEpLGllKCksX3QodC5n''@;'; put 'put ''cmFwaExvYWRpbmc/LTE6Myl9fWZ1bmN0aW9uIGdwbihuLGUpe2lmKDEmbiYmKHZ0KDAsb3BuLDIsMSwiZGl2Iiw0MCksSigxLCJkaXYiLDQxKSgyLCJzZWN0aW9uIiw0MikoMywiZGl2Iiw0MyksdnQoNCxhcG4sNSw0LCJzcGFuIiksdGUoKSx2dCg1LHVwbiwxOCw0LCJkaXYiLDQ0KSx0ZSgp''@;'; put 'put ''LHZ0KDYscHBuLDQsNCwiZGl2Iiw0NSksdGUoKSksMiZuKXtjb25zdCB0PVRlKCk7X3QodC5ncmFwaENvbnRhaW5lcj8tMTowKSxpZSg0KSxfdCh0LmxpbmVhZ2VUYWJsZU5hbWUubGVuZ3RoPjA/NDotMSksaWUoKSxfdCh0LmdyYXBoQ29udGFpbmVyPzU6LTEpLGllKCksX3QodC5ncmFwaENv''@;'; put 'put ''bnRhaW5lcj82Oi0xKX19ZnVuY3Rpb24gbXBuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItZHJvcGRvd24tbWVudSIsNTUpKDEsImRpdiIsNTYpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoKS5yZW5kZXJUb0Rvd25sb2FkKCJTVkciKSl9KSxT''@;'; put 'put ''ZSgyLCJTVkciKSx0ZSgpLEooMywiZGl2Iiw1Niksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLnJlbmRlclRvRG93bmxvYWQoIlBORyIpKX0pLFNlKDQsIlBORyIpLHRlKCksSig1LCJkaXYiLDU2KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3Qg''@;'; put 'put ''aT1UZSgpO3JldHVybiBpLmRvd25sb2FkRG90KCksWGUoaS5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpKX0pLFNlKDYsIiBEb3QgIiksdGUoKSgpfX1jb25zdCB2cG49aCg5NzU4Nik7bGV0IEpLPSgoKT0+e3ZhciBuO2NsYXNzIGV7Y29uc3RydWN0b3IocixpLG8sYSxsLHUsZyxFKXt0aGlzLmxp''@;'; put 'put ''Y2VuY2VTZXJ2aWNlPXIsdGhpcy5zYXNTZXJ2aWNlPWksdGhpcy5yb3V0ZT1vLHRoaXMucm91dGVyPWEsdGhpcy5sb2NhdGlvbj1sLHRoaXMuZXZlbnRTZXJ2aWNlPXUsdGhpcy5sb2dnZXJTZXJ2aWNlPWcsdGhpcy5oZWxwZXJTZXJ2aWNlPUUsdGhpcy5zd2l0Y2hGbGFnPSExLHRoaXMudGFi''@;'; put 'put ''bGVGbGFnPSEwLHRoaXMuZm9yd2FyZExpbmVhZ2U9ITEsdGhpcy5mbGF0ZGF0YT1bXSx0aGlzLmdyYXBoTG9hZGluZz0hMSx0aGlzLmdyYXBoUmVuZGVyaW5nPSExLHRoaXMuZ3JhcGhDb250YWluZXI9ITEsdGhpcy52aXpJbnB1dD0iIix0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSx0aGlzLmxp''@;'; put 'put ''YnJhcnlUYWJsZXNSZWY9IiIsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy50YWJsZUNvbHVtbnNSZWY9IiIsdGhpcy5saW5lYWdlVGFibGVOYW1lPSIiLHRoaXMubGluZWFnZUNvbHVtbk5hbWU9IiIsdGhpcy5saWI9bnVsbCx0aGlzLnRhYmxlRGlzYWJsZT0hMSx0aGlzLnJlZnJlc2hD''@;'; put 'put ''YWNoZT0hMSx0aGlzLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlPSIiLHRoaXMuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uPSIiLHRoaXMubGFyZ2VEb3RGaWxlTGluZXM9bnVsbCx0aGlzLmxhcmdlRG90RmlsZUxpbWl0PTFlMyx0aGlzLmxpbWl0RG90RGVwdGg9ITEsdGhpcy5wZW5kaW5n''@;'; put 'put ''UmVuZGVyRG93bmxvYWQ9bnVsbCx0aGlzLmRlYm91bmNlVGltZT0yMDB9c2hvd1RhYmxlU2VsZWN0KCl7dGhpcy50YWJsZUZsYWc9IXRoaXMudGFibGVGbGFnfXRhYmxlT25DbGljayhyLGksbyl7dmFyIGE9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKGwsdSxnLEU9ITEpe3UuY29sdW1ucz8o''@;'; put 'put ''dS5leHBhbmRlZD0hdS5leHBhbmRlZCwhMD09PXUuZXhwYW5kZWQmJihhLnRhYmxlPWwsRXx8YS5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkpKToodS5leHBhbmRlZD0hdS5leHBhbmRlZCx1LmxvYWRpbmdDb2x1bW5zPSEwLGEudGFibGU9bCxhLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRh''@;'; put 'put ''YmxlPXUuTElCTkFNRSsiLiIrdS5UQUJMRU5BTUUseWllbGQgYS5zZWxlY3RUYWJsZShsLHUpLEV8fGEub25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygpKSxhLmNvbGxhcHNlVHJlZUl0ZW1zKGcudGFibGVzLHUpfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXNlbGVjdFRhYmxlKHIsaSl7dmFy''@;'; put 'put ''IG89dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7by5jb2x1bW5zTGlzdD1bXTtsZXQgYT17U0FTQ29udHJvbFRhYmxlOlt7dGFibGV1cmk6cn1dfTt5aWVsZCBvLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9nZXRtZXRhY29scyIsYSkudGhlbihsPT57by5jb2x1bW5zTGlzdD1sLmFk''@;'; put 'put ''YXB0ZXJSZXNwb25zZS5tZXRhY29scyxvLmNvbHVtbnNMaXN0JiZvLmNvbHVtbnNMaXN0Lmxlbmd0aD4wJiYoaS5jb2x1bW5zPW8uY29sdW1uc0xpc3QsaS5leHBhbmRlZD0hMCxpLmxvYWRpbmdDb2x1bW5zPSExKX0pLmNhdGNoKGw9PmwpLG8uc2V0R2xvYmFsRGF0YSgpfSkoKX1sb2FkTW9y''@;'; put 'put ''ZUxpYnJhcmllcygpe3RoaXMubGlicmFyaWVzUGFnaW5nfHwodGhpcy5saWJyYXJpZXNQYWdpbmc9ITAsdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJyYXJ5TGlzdCwhMCksdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEpfWNvbGxhcHNlVHJlZUl0ZW1zKHIsaSl7''@;'; put 'put ''ci5mb3JFYWNoKG89PntKU09OLnN0cmluZ2lmeShvKSE9PUpTT04uc3RyaW5naWZ5KGkpJiYoby5leHBhbmRlZD0hMSl9KX10cmVlTm9kZUNsaWNrZWQocixpLG8peyJDb2xsYXBzZSI9PT1yLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhvLGkpfWxpYnJhcnlPbkNsaWNr''@;'; put 'put ''KHIsaSl7dmFyIG89dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7aS5pbkZvcmVncm91bmQ9ITAsaS50YWJsZXM/aS5leHBhbmRlZD0haS5leHBhbmRlZDooaS5sb2FkaW5nVGFibGVzPSEwLHlpZWxkIG8uc2VsZWN0TGlicmFyeShyLGkpKSxvLmNvbGxhcHNlVHJlZUl0ZW1zKG8ubGlicmFy''@;'; put 'put ''eUxpc3QsaSl9KSgpfXNlbGVjdExpYnJhcnkocixpKXt2YXIgbz10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtvLnRhYmxlc0xpc3Q9W10sby5jb2x1bW5zTGlzdD1bXTtsZXQgYT17U0FTQ29udHJvbFRhYmxlOlt7bGlidXJpOnJ9XX07eWllbGQgby5zYXNTZXJ2aWNlLnJlcXVlc3QoImxp''@;'; put 'put ''bmVhZ2UvZ2V0bWV0YXRhYmxlcyIsYSkudGhlbihsPT57by50YWJsZXNMaXN0PWwuYWRhcHRlclJlc3BvbnNlLm1ldGF0YWJsZXMsby50YWJsZXNMaXN0JiZvLnRhYmxlc0xpc3QubGVuZ3RoPjAmJihpLnRhYmxlcz1vLnRhYmxlc0xpc3QsaS5leHBhbmRlZD0hMCksby5zZXRHbG9iYWxEYXRh''@;'; put 'put ''KCl9KS5jYXRjaChsPT5sKSxpLmxvYWRpbmdUYWJsZXM9ITF9KSgpfWNvbHVtbk9uQ2xpY2socixpLG8pe3RoaXMubGliPWkuTElCUkFSWUlELHRoaXMudGFibGU9by5UQUJMRVVSSSx0aGlzLmNvbHVtbj1yLkNPTFVSSSx0aGlzLnNldEdsb2JhbERhdGEoKSx0aGlzLm9uR2VuZXJhdGVDbGlj''@;'; put 'put ''aygpfXRyZWVPbkZpbHRlcihyLGkpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIocixpKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMubGlicmFyeUxpc3QsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllOQU1FIiks''@;'; put 'put ''VW4ubGluZWFnZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9bGliQ29sdW1uQWN0aXZlKHIpe2lmKCF0aGlzLmNvbHVtbilyZXR1cm4hMTtsZXQgaT1yLnNwbGl0KCJcXCIpLG89dGhpcy5jb2x1bW4uc3BsaXQoIlxcIik7cmV0dXJuIGlbaS5sZW5ndGgtMV09PW9bby5s''@;'; put 'put ''ZW5ndGgtMV19c2V0R2xvYmFsRGF0YSgpe1VuLmxpbmVhZ2UubGlicmFyeUxpc3Q9dGhpcy5saWJyYXJ5TGlzdCxVbi5saW5lYWdlLnRhYmxlc0xpc3Q9dGhpcy50YWJsZXNMaXN0LFVuLmxpbmVhZ2UuY29sdW1uc0xpc3Q9dGhpcy5jb2x1bW5zTGlzdCxVbi5saW5lYWdlLmxpYj10aGlzLmxp''@;'; put 'put ''YixVbi5saW5lYWdlLnRhYmxlPXRoaXMudGFibGUsVW4ubGluZWFnZS5jb2x1bW49dGhpcy5jb2x1bW59bG9hZEdsb2JhbERhdGEoKXt0aGlzLmxpYnJhcnlMaXN0PVVuLmxpbmVhZ2UubGlicmFyeUxpc3QsdGhpcy50YWJsZXNMaXN0PVVuLmxpbmVhZ2UudGFibGVzTGlzdCx0aGlzLmNvbHVt''@;'; put 'put ''bnNMaXN0PVVuLmxpbmVhZ2UuY29sdW1uc0xpc3QsdGhpcy5saWJyYXJpZXNTZWFyY2g9VW4ubGluZWFnZS5saWJyYXJpZXNTZWFyY2h9cmVzdWJtaXRXaXRoTWF4RGVwdGgocil7bGV0IGk7dGhpcy5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpLHImJihpPXttYXhfZGVwdGg6cn0pLHRoaXMucm91''@;'; put 'put ''dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRvOnRoaXMucm91dGUscXVlcnlQYXJhbXM6aX0pfW5nT25Jbml0KCl7VW4udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvbGluZWFnZSI7bGV0IHI9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMucmVsb2FkO2lmKHZvaWQgMCE9PXIpe2xl''@;'; put 'put ''dCBpPXRoaXMucm91dGVyLnVybDsicmVsb2FkIj09PXI/bG9jYWxTdG9yYWdlLmdldEl0ZW0oImZpcnN0TG9hZCIpPyhsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgiZmlyc3RMb2FkIiksdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoaS5zbGljZSgwLGkubGFzdEluZGV4T2YoIi8iKSkpKToo''@;'; put 'put ''bG9jYWxTdG9yYWdlLmZpcnN0TG9hZD0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpfSwyZTMpKTp0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShpLnNsaWNlKDAsaS5sYXN0SW5kZXhPZigiLyIpKSl9dGhpcy5pbml0RGF0YSgpfWluaXREYXRhKCl7''@;'; put 'put ''dmFyIHI9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7VW4ubGluZWFnZS5saWJyYXJ5TGlzdCYmKFVuLmxpbmVhZ2UubGlicmFyeUxpc3QubGVuZ3RoPjA/ci5sb2FkR2xvYmFsRGF0YSgpOnlpZWxkIHIuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld2xpYnMiLG51bGwpLnRoZW4o''@;'; put 'put ''bD0+e3IubGlicmFyeUxpc3Q9bC5hZGFwdGVyUmVzcG9uc2Uuc2FzbGlicyxyLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhyLmxpYnJhcnlMaXN0KSxyLmxpYnJhcnlMaXN0JiZyLmxpYnJhcnlMaXN0Lmxlbmd0aD4wJiYoci5saWI9ci5saWJyYXJ5TGlzdFswXS5MSUJSQVJZSUQp''@;'; put 'put ''LHIuc2V0R2xvYmFsRGF0YSgpfSkuY2F0Y2gobD0+bCksci5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUobD0+e3Iub25Sb3V0ZUNoYW5nZSgpfSksci5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKGw9PntyLm9uUm91dGVDaGFuZ2UoKX0pKX0pKCl9b25Sb3V0ZUNoYW5nZSgpe2NsZWFyVGlt''@;'; put 'put ''ZW91dCh0aGlzLmRlYm91bmNlVGltZW91dCksdGhpcy5kZWJvdW5jZVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e2NvbnN0IHI9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuY29sdXJpLGk9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZGlyZWN0aW9uLG89dGhpcy5yb3V0ZS5zbmFwc2hv''@;'; put 'put ''dC5wYXJhbXMudGFibGVpZCxhPXRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMubWF4X2RlcHRoO3ImJmkmJih0aGlzLmZvcndhcmRMaW5lYWdlPSJGT1JXQVJEIj09PWksdGhpcy5jb2x1bW49cix0aGlzLmdlbmVyYXRlR3JhcGgocixpLGEpKSwhdGhpcy5yb3V0ZXIudXJsLmluY2x1''@;'; put 'put ''ZGVzKCJjb2x1bW4iKSYmbyYmaSYmKHRoaXMuZm9yd2FyZExpbmVhZ2U9IkZPUldBUkQiPT09aSx0aGlzLnRhYmxlPW8sdGhpcy5nZW5lcmF0ZUdyYXBoVGFibGVMZXZlbChvLGksYSkpfSx0aGlzLmRlYm91bmNlVGltZSl9bmdBZnRlckNvbnRlbnRJbml0KCl7fWRpcmVjdGlvblRleHQoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5mb3J3YXJkTGluZWFnZT8iRk9SV0FSRCI6IlJFVkVSU0UifW9uR2VuZXJhdGVDbGljaygpe2xldCByPXRoaXMuZGlyZWN0aW9uVGV4dCgpLGk9dGhpcy5jb2x1bW4/dGhpcy5jb2x1bW4uc3Vic3RyaW5nKHRoaXMuY29sdW1uLmluZGV4T2YoIlxcIikrMSk6bnVsbDt0aGlz''@;'; put 'put ''LnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlL2NvbHVtbi8iK2krIi8iK3IpfW9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKXtsZXQgcj10aGlzLmRpcmVjdGlvblRleHQoKSxpPXRoaXMudGFibGUuaW5jbHVkZXMoIlxcIik/dGhpcy50YWJsZS5zcGxpdCgiXFwiKVsxXTp0''@;'; put 'put ''aGlzLnRhYmxlO3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UvIitpKyIvIityKX1nZW5lcmF0ZUdyYXBoVGFibGVMZXZlbChyLGksbyl7dmFyIGE9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7bGV0IGw9e1NBU0NvbnRyb2xUYWJsZTpbe3RhYmxlX2lkOnIsZGly''@;'; put 'put ''ZWN0aW9uOml8fGEuZGlyZWN0aW9uVGV4dCgpfV19O3JldHVybiJ1bmRlZmluZWQiPT09bC5TQVNDb250cm9sVGFibGVbMF0udGFibGVfaWQmJmEuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJnZW5lcmF0ZUdyYXBoVGFibGVMZXZlbCgpIiwidGFibGVfaWQgaXMgdW5kZWZpbmVkLiIs''@;'; put 'put ''dm9pZCAwLCJGcm9udGVuZCBlcnJvciIpLG8mJihsLlNBU0NvbnRyb2xUYWJsZVswXS5tYXhfZGVwdGg9byksYS50YWJsZUZsYWc9ITEsYS5zd2l0Y2hGbGFnPSEwLGEuZ3JhcGhDb250YWluZXI9ITAsYS5ncmFwaExvYWRpbmc9ITAsYS52aXpJbnB1dD0iIixuZXcgUHJvbWlzZSgodSxnKT0+''@;'; put 'put ''e2Euc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2ZldGNodGFibGVsaW5lYWdlIixsKS50aGVuKGZ1bmN0aW9uKCl7dmFyIEU9Q3IoZnVuY3Rpb24qKE8pe2lmKE8uYWRhcHRlclJlc3BvbnNlLmZsYXRkYXRhLmxlbmd0aD4wJiZhLmxpY2VuY2VTZXJ2aWNlLmNoZWNrTGluZWFnZUxpbWl0''@;'; put 'put ''KCkpcmV0dXJuIGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk5vdGljZSIsIllvdSBoYXZlIHJlYWNoZWQgZGFpbHkgbWF4aW11bSBvZiBsaW5lYWdlIGRpYWdyYW0gcmVuZGVyaW5ncy4gVG8gdW5sb2NrIGFkZGl0aW9uYWwgZGlhZ3JhbXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29u''@;'; put 'put ''dHJvbGxlci5pbyIpLHZvaWQgYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFnZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgTylyZXR1cm4gYS52aXpJbnB1dD0iZGlncmFwaCBHIHtTQVMgRXJyb3J9Iix2b2lkIGEuYnVpbGRHcmFwaCgpO2EubGluZWFnZVRhYmxlTmFtZT1PLmFk''@;'; put 'put ''YXB0ZXJSZXNwb25zZS5pbmZvWzBdLkxJQlJFRisiLiIrTy5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5UQUJMRU5BTUU7bGV0IFo9Ty5hZGFwdGVyUmVzcG9uc2UuZmluYWxmaW5hbCxlZT0iIjtmb3IobGV0IHZlPTA7dmU8Wi5sZW5ndGg7dmUrKyllZSs9dW5lc2NhcGUoWlt2ZV0uTElORSkr''@;'; put 'put ''IlxuIjtpZihhLmZsYXRkYXRhPU8uYWRhcHRlclJlc3BvbnNlLmZsYXRkYXRhLGEubGlicmFyeUxpc3Qpe2xldCB2ZT1hLmxpYnJhcnlMaXN0LmZpbmQoTWU9Pk8uYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uTElCVVJJLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoTWUuTElCUkFSWUlELnRvVXBw''@;'; put 'put ''ZXJDYXNlKCkpKTtpZih2ZSl7bGV0IE1lO2lmKHlpZWxkIGEubGlicmFyeU9uQ2xpY2sodmUuTElCUkFSWUlELHZlKSx2ZS50YWJsZXMmJihNZT12ZS50YWJsZXMuZmluZChIZT0+SGUuVEFCTEVVUkkudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhPLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLlRB''@;'; put 'put ''QkxFSUQudG9VcHBlckNhc2UoKSkpLE1lKSl7aWYoYS50YWJsZT1NZS5UQUJMRVVSSSxhLnRhYmxlKXtjb25zdCBIZT1hLnRhYmxlLnJlcGxhY2UoIlxcIiwiXFxcXCIpO3NldFRpbWVvdXQoKCk9PntsZXQgV2U9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPScke0hlfSddYCk7V2UmJldl''@;'; put 'put ''LnNjcm9sbEludG9WaWV3KCl9LDFlMyl9YS50YWJsZU9uQ2xpY2soTWUuVEFCTEVVUkksTWUsdmUsdm9pZCAwIT09aSl9dmUmJih2ZS5leHBhbmRlZD0hMCksTWUmJihNZS5leHBhbmRlZD0hMCl9fWEudml6SW5wdXQ9ZWV8fCJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsYS52''@;'; put 'put ''aXpJbnB1dD1hLnZpeklucHV0LnJlcGxhY2UoL1xzZHM6L2csIlxuZHM6IikucmVwbGFjZSgvXHNcbi9nLCJcbiIpLGEuaWRsb29rdXA9Ty5hZGFwdGVyUmVzcG9uc2UuaWRsb29rdXAsTy5hZGFwdGVyUmVzcG9uc2UuZmluYWxmaW5hbC5sZW5ndGg+YS5sYXJnZURvdEZpbGVMaW1pdD9hLmxh''@;'; put 'put ''cmdlRG90RmlsZUxpbmVzPU8uYWRhcHRlclJlc3BvbnNlLmZpbmFsZmluYWwubGVuZ3RoOmEuYnVpbGRHcmFwaCgpLHUoKX0pO3JldHVybiBmdW5jdGlvbihPKXtyZXR1cm4gRS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaChFPT57YS5ncmFwaExvYWRpbmc9ITEsYS5ncmFwaENv''@;'; put 'put ''bnRhaW5lcj0hMX0pfSl9KSgpfWNhbmNlbFJlbmRlcmluZ0dyYXBoKCl7dGhpcy52aXpJbnB1dD0iZGlncmFwaCBHIHtObyBMaW5lYWdlIEF2YWlsYWJsZX0iLHRoaXMubGFyZ2VEb3RGaWxlTGluZXM9bnVsbCx0aGlzLmJ1aWxkR3JhcGgoKX1jb250aW51ZVJlbmRlcmluZ0dyYXBoKCl7dGhp''@;'; put 'put ''cy5sYXJnZURvdEZpbGVMaW5lcz1udWxsLHRoaXMuYnVpbGRHcmFwaCgoKT0+e2lmKG51bGwhPT10aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZCl7c3dpdGNoKHRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkKXtjYXNlIlBORyI6dGhpcy5kb3dubG9hZFBORygpO2JyZWFrO2Nhc2UiU1ZHIjp0''@;'; put 'put ''aGlzLmRvd25sb2FkU1ZHKCl9dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9bnVsbCx0aGlzLnZpeklucHV0PSJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsdGhpcy5idWlsZEdyYXBoKCl9fSl9cmVuZGVyVG9Eb3dubG9hZChyKXtzd2l0Y2gocil7Y2FzZSJQTkciOnRoaXMu''@;'; put 'put ''cGVuZGluZ1JlbmRlckRvd25sb2FkPSJQTkciLHRoaXMuY29udGludWVSZW5kZXJpbmdHcmFwaCgpO2JyZWFrO2Nhc2UiU1ZHIjp0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZD0iU1ZHIix0aGlzLmNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKX19bWFrZUdyYXBoTGlua2FibGUocil7bGV0IGk9''@;'; put 'put ''ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiI2dyYXBoIC5ub2RlIik7Zm9yKGxldCBvIG9mIGkpe2xldCB1LGE9by5xdWVyeVNlbGVjdG9yKCJ0aXRsZSIpLmlubmVySFRNTCxsPXIuZmluZChnPT5nLk1FVEFJRD09PWEpO2wmJih1PSJUQUJMRSI9PT1sLk1FVEFUWVBFPyIvdmlldy9kYXRh''@;'; put 'put ''LyIrbC5NRVRBTkFNRToiL3ZpZXcvbWV0YWRhdGEvb2JqZWN0LyIrbC5NRVRBSUQsby5jbGFzc0xpc3QuYWRkKCJjdXJzb3ItcG9pbnRlciIpLG8uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGc9Pnt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHUpfSkpfX1nZW5lcmF0ZUdyYXBoKHIsaSxv''@;'; put 'put ''KXt2YXIgYT10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtsZXQgbD17U0FTQ29udHJvbFRhYmxlOlt7Y29sdXJpOnJ8fGEuY29sdW1uLGRpcmVjdGlvbjppfHxhLmRpcmVjdGlvblRleHQoKSxyZWZyZXNoOmEucmVmcmVzaENhY2hlPzE6MH1dfTtyZXR1cm4idW5kZWZpbmVkIj09PWwuU0FT''@;'; put 'put ''Q29udHJvbFRhYmxlWzBdLmNvbHVyaSYmYS5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoImdlbmVyYXRlR3JhcGgoKSIsImNvbHVyaSBpcyB1bmRlZmluZWQuIix2b2lkIDAsIkZyb250ZW5kIGVycm9yIiksbyYmKGwuU0FTQ29udHJvbFRhYmxlWzBdLm1heF9kZXB0aD1vKSxhLnRhYmxl''@;'; put 'put ''RmxhZz0hMSxhLnN3aXRjaEZsYWc9ITAsYS5ncmFwaENvbnRhaW5lcj0hMCxhLmdyYXBoTG9hZGluZz0hMCxhLnZpeklucHV0PSIiLG5ldyBQcm9taXNlKCh1LGcpPT57YS5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZmV0Y2hjb2xsaW5lYWdlIixsKS50aGVuKGZ1bmN0aW9uKCl7dmFy''@;'; put 'put ''IEU9Q3IoZnVuY3Rpb24qKE8pe2lmKE8uYWRhcHRlclJlc3BvbnNlLmZsYXRkYXRhLmxlbmd0aD4wJiZhLmxpY2VuY2VTZXJ2aWNlLmNoZWNrTGluZWFnZUxpbWl0KCkpcmV0dXJuIGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk5vdGljZSIsIllvdSBoYXZlIHJlYWNoZWQgZGFpbHkg''@;'; put 'put ''bWF4aW11bSBvZiBsaW5lYWdlIGRpYWdyYW0gcmVuZGVyaW5ncy4gVG8gdW5sb2NrIGFkZGl0aW9uYWwgZGlhZ3JhbXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpLHZvaWQgYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFnZSIpO2lmKCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgTy5hZGFwdGVyUmVzcG9uc2UpcmV0dXJuIGEudml6SW5wdXQ9ImRpZ3JhcGggRyB7U0FTIEVycm9yfSIsdm9pZCBhLmJ1aWxkR3JhcGgoKTthLmxpbmVhZ2VUYWJsZU5hbWU9Ty5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5MSUJSRUYrIi4iK08uYWRhcHRlclJlc3BvbnNlLmluZm9b''@;'; put 'put ''MF0uVEFCTkFNRSxhLmxpbmVhZ2VDb2x1bW5OYW1lPU8uYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uQ09MTkFNRSxhLmlkbG9va3VwPU8uYWRhcHRlclJlc3BvbnNlLmlkbG9va3VwO2xldCBaPU8uYWRhcHRlclJlc3BvbnNlLmZyb21zYXMsZWU9IiI7Zm9yKGxldCB2ZT0wO3ZlPFoubGVuZ3Ro''@;'; put 'put ''O3ZlKyspZWUrPXVuZXNjYXBlKFpbdmVdLlNUUklORykrIlxuIjtpZihhLnZpeklucHV0PWVlfHwiZGlncmFwaCBHIHtObyBMaW5lYWdlIEF2YWlsYWJsZX0iLGEudml6SW5wdXQ9YS52aXpJbnB1dC5yZXBsYWNlKC9cc2RzOi9nLCJcbmRzOiIpLnJlcGxhY2UoL1xzXG4vZywiXG4iKSxhLmZs''@;'; put 'put ''YXRkYXRhPU8uYWRhcHRlclJlc3BvbnNlLmZsYXRkYXRhLGEubGlicmFyeUxpc3Qpe2xldCBNZSx2ZT1hLmxpYnJhcnlMaXN0LmZpbmQoSGU9Pk8uYWRhcHRlclJlc3BvbnNlLmluZm9bMF0/LkxJQlVSST8udG9VcHBlckNhc2UoKT8uaW5jbHVkZXMoSGU/LkxJQlJBUllJRD8udG9VcHBlckNh''@;'; put 'put ''c2UoKSkpO3ZlJiYoeWllbGQgYS5saWJyYXJ5T25DbGljayh2ZS5MSUJSQVJZSUQsdmUpLHZlLnRhYmxlcyYmKE1lPXZlLnRhYmxlcy5maW5kKEhlPT5IZS5UQUJMRVVSST09PU8uYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uVEFCVVJJKSxNZSYmYS50YWJsZU9uQ2xpY2soTWUuVEFCTEVVUkks''@;'; put 'put ''TWUsdmUsITApLnRoZW4oKCk9PntsZXQgSGU9TWUuVEFCTEVVUkk7aWYoSGUpe2NvbnN0IFdlPUhlLnJlcGxhY2UoIlxcIiwiXFxcXCIpO2xldCBhdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9JyR7V2V9J11gKTtzZXRUaW1lb3V0KCgpPT57YXQmJihhLmxvZ2dlclNlcnZpY2UubG9n''@;'; put 'put ''KCJsaWJyYXJ5VG9TZWxlY3QiLHZlKSxhdC5zY3JvbGxJbnRvVmlldygpKX0sMWUzKX19KSksdmUmJih2ZS5leHBhbmRlZD0hMCksTWUmJihNZS5leHBhbmRlZD0hMCkpfU8uYWRhcHRlclJlc3BvbnNlLmZyb21zYXMubGVuZ3RoPmEubGFyZ2VEb3RGaWxlTGltaXQ/YS5sYXJnZURvdEZpbGVM''@;'; put 'put ''aW5lcz1PLmFkYXB0ZXJSZXNwb25zZS5mcm9tc2FzLmxlbmd0aDphLmJ1aWxkR3JhcGgoKSx1KCl9KTtyZXR1cm4gZnVuY3Rpb24oTyl7cmV0dXJuIEUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkuY2F0Y2goRT0+e2EuZ3JhcGhMb2FkaW5nPSExLGEuZ3JhcGhDb250YWluZXI9ITF9KX0p''@;'; put 'put ''fSkoKX1nZXRTVkdVUkwoKXtsZXQgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JhcGgiKSxpPW5ldyBYTUxTZXJpYWxpemVyLG89bmV3IEJsb2IoW2kuc2VyaWFsaXplVG9TdHJpbmcocildLHt0eXBlOiJpbWFnZS9zdmcreG1sIn0pO3JldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKG8p''@;'; put 'put ''fWRvd25sb2FkU1ZHKCl7UUsoIiNncmFwaCIpLnJlc2V0Wm9vbSgpO2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyLmhyZWY9dGhpcy5nZXRTVkdVUkwoKSxyLmRvd25sb2FkPXRoaXMuY29uc3RydWN0TmFtZSgic3ZnIiksci5jbGljaygpfWRvd25sb2FkUE5HKCl7dmFyIHI9''@;'; put 'put ''dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7UUsoIiNncmFwaCIpLnJlc2V0Wm9vbSgpLFUzbi5zYXZlU3ZnQXNQbmcoZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2dyYXBoIHN2ZyIpLHIuY29uc3RydWN0TmFtZSgicG5nIikpfSkoKX1kb3dubG9hZENTVigpe2xldCByPXRoaXMuZmxhdGRh''@;'; put 'put ''dGE7Y29uc3QgaT0oTyxaKT0+bnVsbD09PVo/IiI6WixvPU9iamVjdC5rZXlzKHJbMF0pO2xldCBhPXIubWFwKE89Pm8ubWFwKFo9PkpTT04uc3RyaW5naWZ5KE9bWl0saSkpLmpvaW4oIiwiKSk7YS51bnNoaWZ0KG8uam9pbigiLCIpKTtsZXQgbD1hLmpvaW4oIlxyXG4iKTt2YXIgdT1kb2N1''@;'; put 'put ''bWVudC5jcmVhdGVFbGVtZW50KCJhIiksZz1uZXcgQmxvYihbbF0se3R5cGU6InRleHQvY3N2In0pLEU9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoZyk7dS5ocmVmPUUsdS5kb3dubG9hZD10aGlzLmNvbnN0cnVjdE5hbWUoImNzdiIpLHUuY2xpY2soKSx3aW5kb3cuVVJMLnJldm9rZU9i''@;'; put 'put ''amVjdFVSTChFKX1nZXREb3RVcmwoKXtsZXQgaT1uZXcgQmxvYihbdGhpcy52aXpJbnB1dF0se3R5cGU6InRleHQvcGxhaW4ifSk7cmV0dXJuIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGkpfWRvd25sb2FkRG90KCl7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3IuaHJl''@;'; put 'put ''Zj10aGlzLmdldERvdFVybCgpLHIuZG93bmxvYWQ9dGhpcy5jb25zdHJ1Y3ROYW1lKCJ0eHQiKSxyLmNsaWNrKCl9c2hvd1N2Zygpe3dpbmRvdy5vcGVuKHRoaXMuZ2V0U1ZHVVJMKCksIl9ibGFuayIpfWJ1aWxkR3JhcGgocil7dGhpcy5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksdGhp''@;'; put 'put ''cy5ncmFwaExvYWRpbmc9ITEsdGhpcy5ncmFwaFJlbmRlcmluZz0hMCxzZXRUaW1lb3V0KCgpPT57UUsoIiNncmFwaCIpLnpvb20oITApLmFkZEltYWdlKCJodHRwczovL2RhdGFjb250cm9sbGVyLmlvL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIwLzAxL2ZjMS5wbmciLCIzMHB4IiwiMzBweCIp''@;'; put 'put ''LnJlbmRlckRvdCh0aGlzLnZpeklucHV0LCgpPT57dGhpcy5ncmFwaFJlbmRlcmluZz0hMSx0aGlzLmlkbG9va3VwJiZ0aGlzLm1ha2VHcmFwaExpbmthYmxlKHRoaXMuaWRsb29rdXApLHImJnIoKX0pfSwxMDApfWNvbnN0cnVjdE5hbWUocil7bGV0IGk9IiIsbz0iIixhPSIiLGw9dnBuKCku''@;'; put 'put ''Zm9ybWF0KCJZWU1NRERfSEhtbSIpO2lmKHRoaXMubGlicmFyeUxpc3QmJnRoaXMubGlicmFyeUxpc3QubGVuZ3RoKXtsZXQgdT10aGlzLmxpYnJhcnlMaXN0LmZpbmQoZz0+Zy5MSUJSQVJZSUQ9PXRoaXMubGliKTt1JiYoaT1gXyR7dS5MSUJSQVJZTkFNRX1gKX1pZih0aGlzLnRhYmxlc0xp''@;'; put 'put ''c3QmJnRoaXMudGFibGVzTGlzdC5sZW5ndGgpe2xldCB1PXRoaXMudGFibGVzTGlzdC5maW5kKGc9PmcuVEFCTEVVUkk9PXRoaXMudGFibGUpO3UmJihvPWBfJHt1LlRBQkxFTkFNRX1gKX1pZih0aGlzLmNvbHVtbnNMaXN0JiZ0aGlzLmNvbHVtbnNMaXN0Lmxlbmd0aCl7bGV0IHU9dGhpcy5j''@;'; put 'put ''b2x1bW5zTGlzdC5maW5kKGc9PmcuQ09MVVJJPT10aGlzLmNvbHVtbik7dSYmKGE9YF8ke3UuQ09MTkFNRX1gKX1yZXR1cm5gJHt0aGlzLmRpcmVjdGlvblRleHQoKX0ke2l9JHtvfSR7YX1fJHtsfS4ke3J9YH1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0''@;'; put 'put ''dXJuIG5ldyhpfHxlKSh6ZShGMiksemUoaWMpLHplKHAxKSx6ZSh2YyksemUoVjApLHplKHVkKSx6ZSh4MyksemUoZmgpKX0sdGhpcy5cdTAyNzVjbXA9UHIoe3R5cGU6ZSxzZWxlY3RvcnM6W1siYXBwLWxpbmVhZ2UiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5k''@;'; put 'put ''YWxvbmU6ITEsZGVjbHM6NTksdmFyczoxMCxjb25zdHM6W1sibWF4RGVwdGhEb3QiLCIiXSxbIm1heERlcHRoIiwiIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFszLCJzY3JvbGxlZFRvQm90dG9tIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInct''@;'; put 'put ''MTAwIiwidGV4dC1jZW50ZXIiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsIm1vZGFsLWZvb3RlciIs''@;'; put 'put ''ImQtZmxleCIsImZsZXgtY29sdW1uIl0sWzEsImJpZ2xpbmVhZ2Utcm93IiwibWItMGkiXSxbInR5cGUiLCJudW1iZXIiLCJtaW4iLCIxIiwicGxhY2Vob2xkZXIiLCJNYXggZGVwdGggdmFsdWUiLDEsImNsci1pbnB1dCIsIm1heC1kZXB0aC1pbnB1dCJdLFsxLCJtYi0yMCJdLFsxLCJiaWds''@;'; put 'put ''aW5lYWdlLXJvdyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwibXQtMy1uZWdhdGl2ZSIsMywiZGlzYWJsZWQiXSxbInNoYXBl''@;'; put 'put ''IiwiY2FyZXQgZG93biJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsNCwiY2xySWZPcGVuIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0''@;'; put 'put ''b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIl0s''@;'; put 'put ''WzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRl''@;'; put 'put ''ciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siLCJpZCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiYXBwU3RlYWxGb2N1cyIsIiIs''@;'; put 'put ''ImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJDb2x1bW5zIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsic2hhcGUiLCJvYmplY3RzIl0s''@;'; put 'put ''WzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiIsMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5IiwibXQtMTAiXSxbMSwiY2FyZC1o''@;'; put 'put ''ZWFkZXIiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiY2FyZC1ibG9jayJdLFsxLCJmb3JtLWJsb2NrIiwic3ciLCJwb3NpdGlvbi1yZWxhdGl2ZSIsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJsaW5hZ2UtdGl0bGUtd3Jh''@;'; put 'put ''cHBlciIsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciIsImZvbnQtd2VpZ2h0LWJvbGQiLCJwb3NpdGlvbi1hYnNvbHV0ZSJdLFsxLCJjbHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtZW5kIl0sWzMsIm10LTIiXSxbMSwidGV4dC1jZW50''@;'; put 'put ''ZXIiLCJwYi0xMCJdLFszLCJyb3V0ZXJMaW5rIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsIm1yLTUiLDMsImNsaWNrIl0sWzEsImJ0bi1ncm91cCIsImRpcmVjdGlvbiIsImQtYmxvY2siXSxbMSwicmFkaW8iLCJidG4iLDMsImNsaWNrIl0sWyJ0eXBlIiwicmFk''@;'; put 'put ''aW8iLCJuYW1lIiwiYnRuLWdyb3VwLWRlbW8tcmFkaW9zIiwzLCJjaGVja2VkIl0sWzEsIm1yLTEwIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1pbmZvLW91dGxpbmUiLDMsImRpc2FibGVkIl0sWzEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xy''@;'; put 'put ''UG9zaXRpb24iLCJib3R0b20tbGVmdCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsIm5hbWUiLCJyZWZyZXNoQ2FjaGUiLDMsImNoYW5nZSIsIm5nTW9kZWxDaGFuZ2Ui''@;'; put 'put ''LCJuZ01vZGVsIl0sWzEsInRleHQtY2VudGVyIl0sWzEsInNwaW5uZXIiXSxbMSwicG9zaXRpb24tcmVsYXRpdmUiXSxbMSwiZ3JhcGgtcmVuZGVyLXNwaW5uZXIiXSxbImlkIiwiZ3JhcGgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oaSxvKXtpZigxJmkpe2NvbnN0IGE9d24oKTtKKDAsImFwcC1z''@;'; put 'put ''aWRlYmFyIiw0KSx3dCgic2Nyb2xsZWRUb0JvdHRvbSIsZnVuY3Rpb24oKXtyZXR1cm4gWWUoYSksWGUoby5sb2FkTW9yZUxpYnJhcmllcygpKX0pLEooMSwiY2xyLXRyZWUiKSx2dCgyLFkzbiw2LDMsImNsci10cmVlLW5vZGUiLDUpLF9vKDMsdHBuLDEsMSxudWxsLG51bGwsQ28pLHRlKCks''@;'; put 'put ''dnQoNSxucG4sMywwLCJkaXYiLDYpLHRlKCksSig2LCJkaXYiLDcpKDcsImRpdiIsOCksdnQoOCxycG4sNCwwLCJkaXYiLDkpLHZ0KDksZ3BuLDcsNCksdGUoKSgpLEooMTAsImNsci1tb2RhbCIsMTApKDExLCJoMyIsMTEpLFNlKDEyLCJMaW1pdCBEZXB0aCIpLHRlKCksSigxMywiZGl2Iiwx''@;'; put 'put ''MikoMTQsInAiKSxTZSgxNSwiRW50ZXIgdGhlIGRlcHRoIG51bWJlciB5b3Ugd291bGQgbGlrZSB0byBsaW1pdCBET1QgcmVuZGVyaW5nIHRvOiIpLHRlKCkoKSxKKDE2LCJkaXYiLDEzKSgxNywiZGl2IiwxNCksSXQoMTgsImlucHV0IiwxNSwwKSx0ZSgpLEooMjAsImNsci1jb250cm9sLWhl''@;'; put 'put ''bHBlciIsMTYpLFNlKDIxLCJUbyByZW5kZXIgd2l0aCB1bmxpbWl0ZWQgZGVwdGgsIGxlYXZlIHRoZSBpbnB1dCBlbXB0eSIpLHRlKCksSigyMiwiZGl2IiwxNykoMjMsImJ1dHRvbiIsMTgpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUoYSksWGUoby5saW1pdERvdERlcHRoPSEx''@;'; put 'put ''KX0pLFNlKDI0LCIgQ2FuY2VsICIpLHRlKCksSigyNSwiYnV0dG9uIiwxOCksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKGEpO2NvbnN0IHU9b28oMTkpO3JldHVybiBvLnJlc3VibWl0V2l0aE1heERlcHRoKHUudmFsdWUpLFhlKG8ubGltaXREb3REZXB0aD0hMSl9KSxTZSgyNiwiIFJlc3Vi''@;'; put 'put ''bWl0ICIpLHRlKCkoKSgpKCksSigyNywiY2xyLW1vZGFsIiwxMCkoMjgsImgzIiwxMSksU2UoMjksIldhcm5pbmciKSx0ZSgpLEooMzAsImRpdiIsMTIpKDMxLCJwIiksU2UoMzIpLHRlKCkoKSxKKDMzLCJkaXYiLDEzKSgzNCwiZGl2IiwxNykoMzUsInAiKSxTZSgzNiwiUmVuZGVyIGFueXdh''@;'; put 'put ''eSAodGhpcyBtYXkgdGFrZSBhIGxvbmcgdGltZSkiKSx0ZSgpLEooMzcsImJ1dHRvbiIsMTgpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUoYSksWGUoby5jb250aW51ZVJlbmRlcmluZ0dyYXBoKCkpfSksU2UoMzgsIiBSZW5kZXIgIiksdGUoKSgpLEooMzksImRpdiIsMTcpKDQw''@;'; put 'put ''LCJwIiksU2UoNDEsIkRvd25sb2FkIHRoZSByZXN1bHQgKFBORyAmIFNWRyByZXF1aXJlIHJlbmRlcmluZykiKSx0ZSgpLEooNDIsImNsci1kcm9wZG93biIpKDQzLCJidXR0b24iLDE5KSxTZSg0NCwiIERvd25sb2FkICIpLEl0KDQ1LCJjbHItaWNvbiIsMjApLHRlKCksWW4oNDYsbXBuLDcs''@;'; put 'put ''MCwiY2xyLWRyb3Bkb3duLW1lbnUiLDIxKSx0ZSgpKCksSig0NywiZGl2IiwxNykoNDgsInAiKSxTZSg0OSwiUmVzdWJtaXQgd2l0aCBhIG1heC1kZXB0aCAoc3BlY2lmeSBkZXB0aCkiKSx0ZSgpLEl0KDUwLCJpbnB1dCIsMTUsMSksSig1MiwiYnV0dG9uIiwxOCksd3QoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe1llKGEpO2NvbnN0IHU9b28oNTEpO3JldHVybiBYZShvLnJlc3VibWl0V2l0aE1heERlcHRoKHUudmFsdWUpKX0pLFNlKDUzLCIgUmVzdWJtaXQgIiksdGUoKSgpLEooNTQsImRpdiIsMTcpKDU1LCJwIiksU2UoNTYsIkNhbmNlbCB0aGlzIHN1Ym1pc3Npb24iKSx0ZSgpLEooNTcs''@;'; put 'put ''ImJ1dHRvbiIsMTgpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUoYSksWGUoby5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpKX0pLFNlKDU4LCIgQ2FuY2VsICIpLHRlKCkoKSgpKCl9MiZpJiYoaWUoMiksX3Qoby5saWJyYXJ5TGlzdD8yOi0xKSxpZSgpLHlvKG8ubGlicmFyeUxpc3Qp''@;'; put 'put ''LGllKDIpLF90KG8ubGlicmFyaWVzUGFnaW5nPzU6LTEpLGllKDMpLF90KG8uY29sdW1ufHxvLnRhYmxlPy0xOjgpLGllKCksX3Qoby5jb2x1bW58fG8udGFibGU/OTotMSksaWUoKSxydCgiY2xyTW9kYWxPcGVuIixvLmxpbWl0RG90RGVwdGgpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksaWUo''@;'; put 'put ''MTcpLHJ0KCJjbHJNb2RhbE9wZW4iLG51bGwhPT1vLmxhcmdlRG90RmlsZUxpbmVzKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGllKDUpLFNyKCIgVGhlIGdlbmVyYXRlZCBkb3QgZmlsZSBoYXMgIixvLmxhcmdlRG90RmlsZUxpbmVzLCIgbGluZXMuIFJlbmRlcmluZyBtYXkgdGFrZSBhIGxv''@;'; put 'put ''bmcgdGltZSwgaG93IHdvdWxkIHlvdSBsaWtlIHRvIHByb2NlZWQ/ICIpLGllKDExKSxydCgiZGlzYWJsZWQiLCFvLmNvbHVtbiYmIW8udGFibGUpKX0sZGVwZW5kZW5jaWVzOltQMixsdSxIMixvYyxYbCxQcCxPMyxkNyxjdSx4ZCxtaCwkMCxMcCxlbCxZeixVMixGZixQZixvNyxqYixVYixw''@;'; put 'put ''TSwkNixHNl0sZW5jYXBzdWxhdGlvbjoyfSkpfXJldHVybiBuKCksZX0pKCk7Y29uc3QgX3BuPSgpPT5bMTAsMjAsNTAsMTAwXTtmdW5jdGlvbiB5cG4obixlKXtpZigxJm4mJihKKDAsIm9wdGlvbiIsNSksU2UoMSksdGUoKSksMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0O3J0KCJ2YWx1ZSIs''@;'; put 'put ''emoodCkpLGllKCksU3IoIiAiLHQsIiAiKX19ZnVuY3Rpb24gYnBuKG4sZSl7MSZuJiZJdCgwLCJjbHItaWNvbiIsMTUpfWZ1bmN0aW9uIHdwbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLWljb24iLDE3KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3QgaT1U''@;'; put 'put ''ZSgyKTtyZXR1cm4gaS5tZXRhRGF0YVNlYXJjaD0iIixYZShpLm1ldGFMaXN0T25GaWx0ZXIoKSl9KSx0ZSgpfX1mdW5jdGlvbiBDcG4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsMTMpKDIsImlucHV0IiwxNCwwKSxoaSgibmdNb2Rl''@;'; put 'put ''bENoYW5nZSIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgpO3JldHVybiBmaShvLm1ldGFEYXRhU2VhcmNoLGkpfHwoby5tZXRhRGF0YVNlYXJjaD1pKSxYZShpKX0pLHd0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoKS5tZXRhTGlzdE9uRmlsdGVyKCkpfSks''@;'; put 'put ''dGUoKSx2dCg0LGJwbiwxLDAsImNsci1pY29uIiwxNSksdnQoNSx3cG4sMSwwLCJjbHItaWNvbiIsMTYpLHRlKCkoKX1pZigyJm4pe2NvbnN0IHQ9b28oMykscj1UZSgpO2llKDIpLGRpKCJuZ01vZGVsIixyLm1ldGFEYXRhU2VhcmNoKSxpZSgyKSxfdCh0LnZhbHVlLmxlbmd0aDwxPzQ6LTEp''@;'; put 'put ''LGllKCksX3QodC52YWx1ZS5sZW5ndGg+MD81Oi0xKX19ZnVuY3Rpb24gU3BuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItdHJlZS1ub2RlIiwxOSksd3QoImNsaWNrIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKCkuJGltcGxpY2l0LGE9VGUoKTtyZXR1cm4gWGUo''@;'; put 'put ''YS50cmVlTm9kZUNsaWNrZWQoaSxvLGEubWV0YURhdGFMaXN0KSl9KSxoaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoKS4kaW1wbGljaXQ7cmV0dXJuIGZpKG8uZXhwYW5kZWQsaSl8fChvLmV4cGFuZGVkPWkpLFhlKGkpfSksSigxLCJwIiwyMCks''@;'; put 'put ''d3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoKS4kaW1wbGljaXQsbz1UZSgpO3JldHVybiBvLm1ldGFEYXRhSWQ9aS5JRCxYZShvLm1ldGFEYXRhT25DbGljayhvLm1ldGFEYXRhSWQsaSkpfSksSXQoMiwiY2xyLWljb24iLDIxKSxTZSgzKSx0ZSgpKCl9aWYoMiZuKXtj''@;'; put 'put ''b25zdCB0PVRlKCkuJGltcGxpY2l0O2RpKCJjbHJFeHBhbmRlZCIsdC5leHBhbmRlZCkscnQoImNsckxvYWRpbmciLHQubG9hZGluZ1RhYmxlcyYmIXQudGFibGVzKSxpZSgzKSxTcigiICIsdC5JRCwiICIpfX1mdW5jdGlvbiBFcG4obixlKXsxJm4mJnZ0KDAsU3BuLDQsMywiY2xyLXRyZWUt''@;'; put 'put ''bm9kZSIsMTgpLDImbiYmX3QoZS4kaW1wbGljaXQuaGlkZGVuPy0xOjApfWZ1bmN0aW9uIE1wbihuLGUpezEmbiYmKEooMCwiZGl2IiwxMCksSXQoMSwiY2xyLWljb24iLDIyKSxKKDIsInAiLDIzKSxTZSgzLCIgUGxlYXNlIHNlbGVjdCBhIHR5cGUgIiksdGUoKSgpKX1mdW5jdGlvbiBUcG4o''@;'; put 'put ''bixlKXsxJm4mJihKKDAsImg0IiksU2UoMSwiTG9hZGluZyBtZXRhZGF0YSB0eXBlcyIpLHRlKCkpfWZ1bmN0aW9uIHhwbihuLGUpezEmbiYmKEooMCwiaDQiKSxTZSgxLCJMb2FkaW5nIG1ldGFkYXRhIG9iamVjdHMiKSx0ZSgpKX1mdW5jdGlvbiBBcG4obixlKXtpZigxJm4mJihKKDAsImRp''@;'; put 'put ''diIpLHZ0KDEsVHBuLDIsMCwiaDQiKSx2dCgyLHhwbiwyLDAsImg0IiksdGUoKSksMiZuKXtjb25zdCB0PVRlKDIpO2llKCksX3QodC5tZXRhdHlwZXNMb2FkaW5nPzE6LTEpLGllKCksX3QodC5tZXRhdHlwZXNMb2FkaW5nPy0xOjIpfX1mdW5jdGlvbiBrcG4obixlKXtpZigxJm4mJihKKDAs''@;'; put 'put ''ImRpdiIsMTEpKDEsInNwYW4iLDI0KSxTZSgyLCIgTG9hZGluZy4uLiAiKSx0ZSgpLHZ0KDMsQXBuLDMsMiwiZGl2IiksdGUoKSksMiZuKXtjb25zdCB0PVRlKCk7aWUoMyksX3QodC5sb2FkaW5nPzM6LTEpfX1mdW5jdGlvbiBScG4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImRp''@;'; put 'put ''diIsMjYpKDEsImlucHV0IiwzMCwxKSxoaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgyKTtyZXR1cm4gZmkoby5tZXRhT2JqZWN0U2VhcmNoLGkpfHwoby5tZXRhT2JqZWN0U2VhcmNoPWkpLFhlKGkpfSksd3QoImtleXVwIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBZZSh0KSxYZShUZSgyKS5tZXRhT2JqZWN0T25GaWx0ZXIoKSl9KSx0ZSgpKCl9aWYoMiZuKXtjb25zdCB0PVRlKDIpO2llKCksZGkoIm5nTW9kZWwiLHQubWV0YU9iamVjdFNlYXJjaCl9fWZ1bmN0aW9uIElwbihuLGUpezEmbiYmSXQoMCwiY2xyLWljb24iLDMyKX1mdW5jdGlvbiBEcG4o''@;'; put 'put ''bixlKXsxJm4mJkl0KDAsImNsci1pY29uIiwyMSl9ZnVuY3Rpb24gTHBuKG4sZSl7aWYoMSZuJiYoSigwLCJwIiwzOSksU2UoMSksdGUoKSksMiZuKXtjb25zdCB0PVRlKCkuJGltcGxpY2l0O2llKCksU3IoIiAiLHQuVVJJLCIgIil9fWZ1bmN0aW9uIE9wbihuLGUpe2lmKDEmbiYmKEooMCwi''@;'; put 'put ''Y2xyLXRyZWUtbm9kZSIsMzcpKDEsImRpdiIsMzgpKDIsImRpdiIpLHZ0KDMsSXBuLDEsMCwiY2xyLWljb24iLDMyKSx2dCg0LERwbiwxLDAsImNsci1pY29uIiwyMSksU2UoNSksdGUoKSx2dCg2LExwbiwyLDEsInAiLDM5KSx0ZSgpKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdDtydCgi''@;'; put 'put ''Y2xyRXhwYW5kYWJsZSIsITApLGllKCksd3IoIm9iamVjdC1oZWFkZXIiLCF0LmNvdW50KSxpZSgyKSxfdCh0LmNvdW50Py0xOjMpLGllKCksX3QodC5jb3VudD80Oi0xKSxpZSgpLFNyKCIgIix0LmRpc3BsYXksIiAiKSxpZSgpLF90KHQuY291bnQ/LTE6Nil9fWZ1bmN0aW9uIE5wbihuLGUp''@;'; put 'put ''e2lmKDEmbiYmKEooMCwiY2xyLXRyZWUiLDM1KSxZbigxLE9wbiw3LDcsImNsci10cmVlLW5vZGUiLDM2KSxBYygyLCJhc3luYyIpLHRlKCkpLDImbil7Y29uc3QgdD1UZSg2KTtydCgiY2xyTGF6eSIsITApLGllKCkscnQoImNsclJlY3Vyc2l2ZUZvck9mIixUZCgyLDMsdC5yb290JCkpKCJj''@;'; put 'put ''bHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiIsdC5nZXRDaGlsZHJlbil9fWZ1bmN0aW9uIEZwbihuLGUpe2lmKDEmbiYmKEooMCwiY2xyLWFjY29yZGlvbi1jb250ZW50IiksdnQoMSxOcG4sMyw1LCJjbHItdHJlZSIsMzUpLHRlKCkpLDImbil7Y29uc3QgdD1UZSg1KTtpZSgpLF90KHQuc2hv''@;'; put 'put ''d0FjYz8xOi0xKX19ZnVuY3Rpb24gUHBuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItYWNjb3JkaW9uLXBhbmVsIiwzMSksd3QoImNsckFjY29yZGlvblBhbmVsT3BlbkNoYW5nZSIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgpLiRpbXBsaWNpdCxhPVRlKDMpO3Jl''@;'; put 'put ''dHVybiBYZShpP2EucGFuZWxDaGFuZ2UoaSxvKToiIil9KSxKKDEsImNsci1hY2NvcmRpb24tdGl0bGUiKSxJdCgyLCJjbHItaWNvbiIsMzIpLFNlKDMpLEooNCwicCIsMzMpLFNlKDUpLHRlKCkoKSxZbig2LEZwbiwyLDEsImNsci1hY2NvcmRpb24tY29udGVudCIsMzQpLHRlKCl9aWYoMiZu''@;'; put 'put ''KXtjb25zdCB0PVRlKCkuJGltcGxpY2l0O2llKDMpLFNyKCIgIix0Lk5BTUUsIiAiKSxpZSgyKSxwcih0LklEKX19ZnVuY3Rpb24gSHBuKG4sZSl7MSZuJiZ2dCgwLFBwbiw3LDIsImNsci1hY2NvcmRpb24tcGFuZWwiKSwyJm4mJl90KGUuJGltcGxpY2l0LmhpZGRlbj8tMTowKX1mdW5jdGlv''@;'; put 'put ''biBWcG4obixlKXtpZigxJm4mJihKKDAsImRpdiIsMjcpKDEsImNsci1hY2NvcmRpb24iKSxfbygyLEhwbiwxLDEsbnVsbCxudWxsLENvKSx0ZSgpKCkpLDImbil7Y29uc3QgdD1UZSgyKTtpZSgyKSx5byh0Lm1ldGFPYmplY3RTaG93TGlzdCl9fWZ1bmN0aW9uIEJwbihuLGUpezEmbiYmSXQo''@;'; put 'put ''MCwiY2xyLWljb24iLDMyKX1mdW5jdGlvbiBqcG4obixlKXsxJm4mJkl0KDAsImNsci1pY29uIiwyMSl9ZnVuY3Rpb24gVXBuKG4sZSl7aWYoMSZuJiYoSigwLCJwIiwzOSksU2UoMSksdGUoKSksMiZuKXtjb25zdCB0PVRlKCkuJGltcGxpY2l0O2llKCksU3IoIiAiLHQuVVJJLCIgIil9fWZ1''@;'; put 'put ''bmN0aW9uIHpwbihuLGUpe2lmKDEmbiYmKEooMCwiY2xyLXRyZWUtbm9kZSIsMzcpKDEsImRpdiIsMzgpKDIsImRpdiIpLHZ0KDMsQnBuLDEsMCwiY2xyLWljb24iLDMyKSx2dCg0LGpwbiwxLDAsImNsci1pY29uIiwyMSksU2UoNSksdGUoKSx2dCg2LFVwbiwyLDEsInAiLDM5KSx0ZSgpKCkp''@;'; put 'put ''LDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdDtydCgiY2xyRXhwYW5kYWJsZSIsITApLGllKCksd3IoIm9iamVjdC1oZWFkZXIiLCF0LmNvdW50KSxpZSgyKSxfdCh0LmNvdW50Py0xOjMpLGllKCksX3QodC5jb3VudD80Oi0xKSxpZSgpLFNyKCIgIix0LmRpc3BsYXksIiAiKSxpZSgpLF90KHQu''@;'; put 'put ''Y291bnQ/LTE6Nil9fWZ1bmN0aW9uIFdwbihuLGUpe2lmKDEmbiYmKEooMCwiY2xyLXRyZWUiLDM1KSxZbigxLHpwbiw3LDcsImNsci10cmVlLW5vZGUiLDM2KSxBYygyLCJhc3luYyIpLHRlKCkpLDImbil7Y29uc3QgdD1UZSg0KTtydCgiY2xyTGF6eSIsITApLGllKCkscnQoImNsclJlY3Vy''@;'; put 'put ''c2l2ZUZvck9mIixUZCgyLDMsdC5yb290JCkpKCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiIsdC5nZXRDaGlsZHJlbil9fWZ1bmN0aW9uIFlwbihuLGUpe2lmKDEmbiYmKEooMCwiZGl2Iiw0MCksSXQoMSwiY2xyLWljb24iLDMyKSxKKDIsImRpdiIsNDEpKDMsInAiLDQyKSxTZSg0KSx0''@;'; put 'put ''ZSgpLEooNSwicCIsNDMpLFNlKDYpLHRlKCkoKSgpLHZ0KDcsV3BuLDMsNSwiY2xyLXRyZWUiLDM1KSksMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0LHI9VGUoMyk7aWUoNCksU3IoIiAiLHQuTkFNRSwiICIpLGllKDIpLFNyKCIgIix0LklELCIgIiksaWUoKSxfdChyLnNob3dBY2M/NzotMSl9''@;'; put 'put ''fWZ1bmN0aW9uIFpwbihuLGUpe2lmKDEmbiYmKEooMCwiZGl2IiwyNyksX28oMSxZcG4sOCwzLG51bGwsbnVsbCxDbyksdGUoKSksMiZuKXtjb25zdCB0PVRlKDIpO2llKCkseW8odC5tZXRhT2JqZWN0U2hvd0xpc3QpfX1mdW5jdGlvbiBHcG4obixlKXtpZigxJm4mJihKKDAsImNsci1kZy1y''@;'; put 'put ''b3ciKSgxLCJjbHItZGctY2VsbCIpLFNlKDIpLHRlKCksSigzLCJjbHItZGctY2VsbCIpLFNlKDQpLHRlKCksSig1LCJjbHItZGctY2VsbCIpLFNlKDYpLHRlKCkoKSksMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0O2llKDIpLHByKHQuVFlQRSksaWUoMikscHIodC5OQU1FKSxpZSgyKSxwcih0''@;'; put 'put ''LlZBTFVFKX19ZnVuY3Rpb24gJHBuKG4sZSl7aWYoMSZuJiYoSigwLCJjbHItZGF0YWdyaWQiLDI5KSgxLCJjbHItZGctY29sdW1uIiksU2UoMiwiIFRZUEUgIiksSXQoMywiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDQ0KSx0ZSgpLEooNCwiY2xyLWRnLWNvbHVtbiIpLFNlKDUsIiBOQU1FICIp''@;'; put 'put ''LEl0KDYsImNsci1kZy1zdHJpbmctZmlsdGVyIiw0NCksdGUoKSxKKDcsImNsci1kZy1jb2x1bW4iKSxTZSg4LCIgVkFMVUUgIiksSXQoOSwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDQ0KSx0ZSgpLFluKDEwLEdwbiw3LDMsImNsci1kZy1yb3ciLDQ1KSxKKDExLCJjbHItZGctZm9vdGVyIiko''@;'; put 'put ''MTIsImNsci1kZy1wYWdpbmF0aW9uIiw0NiwyKSgxNCwiY2xyLWRnLXBhZ2Utc2l6ZSIsNDcpLFNlKDE1LCJBdHRyaWJ1dGVzIHBlciBwYWdlIiksdGUoKSxTZSgxNiksdGUoKSgpKCkpLDImbil7Y29uc3QgdD1vbygxMykscj1UZSgyKTtpZSgzKSxydCgiY2xyRGdTdHJpbmdGaWx0ZXIiLHIu''@;'; put 'put ''dHlwZUZpbHRlciksaWUoMykscnQoImNsckRnU3RyaW5nRmlsdGVyIixyLm5hbWVGaWx0ZXIpLGllKDMpLHJ0KCJjbHJEZ1N0cmluZ0ZpbHRlciIsci52YWx1ZUZpbHRlciksaWUoKSxydCgiY2xyRGdJdGVtc09mIixyLm1ldGFPYmplY3RBdHRyaWJ1dGVzKSxpZSgyKSxydCgiY2xyRGdQYWdl''@;'; put 'put ''U2l6ZSIsMTApLGllKDIpLHJ0KCJjbHJQYWdlU2l6ZU9wdGlvbnMiLG1jKDksX3BuKSksaWUoMiksZTQoIiAiLHQuZmlyc3RJdGVtKzEsIiAtICIsdC5sYXN0SXRlbSsxLCIgb2YgIix0LnRvdGFsSXRlbXMsIiBBdHRyaWJ1dGVzICIpfX1mdW5jdGlvbiBxcG4obixlKXtpZigxJm4mJihKKDAs''@;'; put 'put ''ImRpdiIsMTIpKDEsImRpdiIsMjUpLHZ0KDIsUnBuLDMsMSwiZGl2IiwyNiksSXQoMywiYnIiKSx2dCg0LFZwbiw0LDAsImRpdiIsMjcpLHZ0KDUsWnBuLDMsMCwiZGl2IiwyNyksdGUoKSxKKDYsImRpdiIsMjgpKDcsImgzIiksU2UoOCksdGUoKSx2dCg5LCRwbiwxNywxMCwiY2xyLWRhdGFn''@;'; put 'put ''cmlkIiwyOSksdGUoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoKTtpZSgyKSxfdCh0Lm1ldGFPYmplY3RMaXN0JiYhdC5vYmplY3RSb3V0ZT8yOi0xKSxpZSgyKSxfdCh0Lm9iamVjdFZpZXc/LTE6NCksaWUoKSxfdCh0Lm9iamVjdFZpZXc/NTotMSksaWUoMykscHIodC5hc3NvT2JqZWN0U2VsZWN0''@;'; put 'put ''ZWQpLGllKCksX3QodC5zaG93VGFibGU/OTotMSl9fWNsYXNzIEtwbnthY2NlcHRzKGUsdCl7cmV0dXJuIiIrZS5OQU1FPT09dHx8ZS5OQU1FLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0KT49MH19Y2xhc3MgWHBue2FjY2VwdHMoZSx0KXtyZXR1cm4iIitlLlRZUEU9PT10fHxlLlRZUEUudG9M''@;'; put 'put ''b3dlckNhc2UoKS5pbmRleE9mKHQpPj0wfX1jbGFzcyBRcG57YWNjZXB0cyhlLHQpe3JldHVybiIiK2UuVkFMVUU9PT10fHxlLlZBTFVFLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0KT49MH19bGV0IFY0ZT0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKHIsaSxvLGEsbCx1KXt0aGlz''@;'; put 'put ''LmV2ZW50U2VydmljZT1yLHRoaXMuc2FzU2VydmljZT1pLHRoaXMuaGVscGVyU2VydmljZT1vLHRoaXMubG9jYXRpb249YSx0aGlzLnJvdXRlcj1sLHRoaXMucm91dGU9dSx0aGlzLm1ldGFEYXRhU2VhcmNoPSIiLHRoaXMubWV0YU9iamVjdFNlYXJjaD0iIix0aGlzLm1ldGFPYmplY3RBc3Nv''@;'; put 'put ''Y2lhdGlvbnM9W10sdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLnNob3dUYWJsZT0hMSx0aGlzLnNob3dBY2M9ITEsdGhpcy5tZXRhRGF0YUlkPSIiLHRoaXMubG9hZGluZz0hMCx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITAsdGhpcy5tZXRhT2JqZWN0U2l6ZT0yMDAsdGhpcy5h''@;'; put 'put ''c3NvVHlwZVNlbGVjdGVkPSIiLHRoaXMuYXNzb09iamVjdFNlbGVjdGVkPSIiLHRoaXMucmVwb3NpdG9yeT0iIix0aGlzLm9iamVjdFJvdXRlPSExLHRoaXMuc2hvd0RhdGE9ITEsdGhpcy5vYmplY3RWaWV3PSExLHRoaXMuZ2V0Q2hpbGRyZW49Zz0+Zy5jb3VudD9QYShnLmRldGFpbHMpOnRo''@;'; put 'put ''aXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFkZXRhaWxzIix7U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOmcuQVNTT0NVUkl9XX0pLnRoZW4oTz0+e3RoaXMuc2hvd1RhYmxlPSEwLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9Ty5hZGFwdGVyUmVzcG9uc2UuYXR0cmli''@;'; put 'put ''dXRlcyx0aGlzLmFzc29PYmplY3RTZWxlY3RlZD1nLk5BTUU7bGV0IFo9dGhpcy5yb3V0ZXIudXJsO3JldHVybiB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLm9iamVjdFJvdXRlP1ouc2xpY2UoMCxaLmxhc3RJbmRleE9mKCJvYmplY3QiKSkrIm9iamVjdC8iK2cuQVNTT0NVUkku''@;'; put 'put ''c2xpY2UoMStnLkFTU09DVVJJLmluZGV4T2YoIlxcIikpOlorIi9vYmplY3QvIitnLkFTU09DVVJJLnNsaWNlKDErZy5BU1NPQ1VSSS5pbmRleE9mKCJcXCIpKSksdGhpcy5nZXRBc3Nvc2lhdGlvbnNDb3VudChPLmFkYXB0ZXJSZXNwb25zZS5hc3NvY2lhdGlvbnMpfSksdGhpcy5kZWJvdW5j''@;'; put 'put ''ZT0hMX1uZ09uSW5pdCgpe1VuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L21ldGFkYXRhIix0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoIi92aWV3L21ldGFkYXRhL29iamVjdC8iKSYmKHRoaXMub2JqZWN0Um91dGU9ITAsdGhpcy5vYmplY3RWaWV3PSEwKSx0aGlzLnBhZ2VTaXpl''@;'; put 'put ''PTUsdGhpcy50eXBlRmlsdGVyPW5ldyBYcG4sdGhpcy5uYW1lRmlsdGVyPW5ldyBLcG4sdGhpcy52YWx1ZUZpbHRlcj1uZXcgUXBuLFVuLm1ldGFkYXRhLm1ldGFEYXRhTGlzdCYmVW4ubWV0YWRhdGEubWV0YVJlcG9zaXRvcmllcyYmIXRoaXMub2JqZWN0Um91dGU/KHRoaXMubWV0YURhdGFM''@;'; put 'put ''aXN0PVVuLm1ldGFkYXRhLm1ldGFEYXRhTGlzdCx0aGlzLnJlcG9zaXRvcmllcz1Vbi5tZXRhZGF0YS5tZXRhUmVwb3NpdG9yaWVzLHRoaXMucmVwb3NpdG9yeT1Vbi5tZXRhZGF0YS5zZWxlY3RlZFJlcG9zaXRvcnksdGhpcy5sb2FkaW5nPSExLHRoaXMubWV0YXR5cGVzTG9hZGluZz0hMSx0''@;'; put 'put ''aGlzLm1ldGFEYXRhU2VhcmNoPVVuLm1ldGFkYXRhLm1ldGFEYXRhU2VhcmNoKToodGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YXR5cGVzIixudWxsKS50aGVuKHI9Pnt0aGlzLm1ldGFEYXRhTGlzdD1yLmFkYXB0ZXJSZXNwb25zZS50eXBlcyxVbi5tZXRhZGF0YS5tZXRh''@;'; put 'put ''RGF0YUxpc3Q9dGhpcy5tZXRhRGF0YUxpc3QsdGhpcy5sb2FkaW5nPSExLHRoaXMubWV0YXR5cGVzTG9hZGluZz0hMX0pLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFyZXBvcyIsbnVsbCkudGhlbihyPT57bGV0IGk9ITE7dGhpcy5yZXBvc2l0b3JpZXM9W107Zm9yKGxl''@;'; put 'put ''dCBvPTA7bzxyLmFkYXB0ZXJSZXNwb25zZS5vdXRyZXBvcy5sZW5ndGg7bysrKXRoaXMucmVwb3NpdG9yaWVzLnB1c2goci5hZGFwdGVyUmVzcG9uc2Uub3V0cmVwb3Nbb10uTkFNRSksIkZvdW5kYXRpb24iPT09ci5hZGFwdGVyUmVzcG9uc2Uub3V0cmVwb3Nbb10uTkFNRSYmKGk9ITApO2lm''@;'; put 'put ''KHRoaXMucmVwb3NpdG9yeT1pPyJGb3VuZGF0aW9uIjpyLmFkYXB0ZXJSZXNwb25zZS5vdXRyZXBvc1swXS5OQU1FLFVuLm1ldGFkYXRhLm1ldGFSZXBvc2l0b3JpZXM9dGhpcy5yZXBvc2l0b3JpZXMsVW4ubWV0YWRhdGEuc2VsZWN0ZWRSZXBvc2l0b3J5PXRoaXMucmVwb3NpdG9yeSx0aGlz''@;'; put 'put ''Lm9iamVjdFJvdXRlKXt0aGlzLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSx0aGlzLnNob3dEYXRhPSEwO2xldCBvPSIiLGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMub2JqZWN0SUQ7dGhpcy5tZXRhT2JqZWN0TGlzdD1bXSx0aGlzLm1ldGFPYmplY3RMaXN0LnB1c2goe0lEOmEs''@;'; put 'put ''TkFNRTpvfSksdGhpcy5tZXRhT2JqZWN0U2hvd0xpc3Q9dGhpcy5tZXRhT2JqZWN0TGlzdCx0aGlzLm1ldGFPYmplY3RPbkNsaWNrKHRoaXMubWV0YU9iamVjdFNob3dMaXN0WzBdLklELHRoaXMubWV0YU9iamVjdFNob3dMaXN0WzBdKX19KSl9dHJlZU5vZGVDbGlja2VkKHIsaSxvKXsiQ29s''@;'; put 'put ''bGFwc2UiPT09ci50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMobyxpKX1jb2xsYXBzZVRyZWVJdGVtcyhyLGkpe3IuZm9yRWFjaChvPT57SlNPTi5zdHJpbmdpZnkobykhPT1KU09OLnN0cmluZ2lmeShpKSYmKG8uZXhwYW5kZWQ9ITEpfSl9bWV0YURhdGFPbkNsaWNrKHIs''@;'; put 'put ''aSl7dGhpcy5vYmplY3RWaWV3PSExLHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvdmlldy9tZXRhZGF0YSIpLHRoaXMuc2hvd0RhdGE9ITEsdGhpcy5sb2FkaW5nPSEwLHRoaXMuc2VsZWN0bWV0YURhdGEocixpKX1tZXRhT2JqZWN0T25DbGljayhyLGkpe3RoaXMuYXNzb09iamVjdFNl''@;'; put 'put ''bGVjdGVkPSIgLiAiLHRoaXMuc2hvd0FjYz0hMSx0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuc2VsZWN0bWV0YU9iamVjdChyLGkpfXNlbGVjdG1ldGFEYXRhKHIsaSl7dmFyIG89dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7by5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFu''@;'; put 'put ''YXYvbWV0YW9iamVjdHMiLHtTQVNDb250cm9sVGFibGU6W3ttZXRhdHlwZTpyLHJlcG86by5yZXBvc2l0b3J5fV19KS50aGVuKGw9PntvLm1ldGFPYmplY3RMaXN0PWwuYWRhcHRlclJlc3BvbnNlLm9iamVjdHMsby5nZXRNZXRhT2JqZWN0QXR0cmlidXRlcyhvLm1ldGFPYmplY3RTaXplKSxv''@;'; put 'put ''LmxvYWRpbmc9ITEsby5hc3NvVHlwZVNlbGVjdGVkPXIsby5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksby5zaG93RGF0YT0hMH0pfSkoKX1zZWxlY3RtZXRhT2JqZWN0KHIsaSl7dmFyIG89dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7by5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFu''@;'; put 'put ''YXYvbWV0YWRldGFpbHMiLHtTQVNDb250cm9sVGFibGU6W3tvYmplY3R1cmk6cn1dfSkudGhlbihsPT57by5tZXRhT2JqZWN0QXNzb2NpYXRpb25zPWwuYWRhcHRlclJlc3BvbnNlLmFzc29jaWF0aW9ucyxvLnJvb3QkPVBhKG8uZ2V0QXNzb3NpYXRpb25zQ291bnQobC5hZGFwdGVyUmVzcG9u''@;'; put 'put ''c2UuYXNzb2NpYXRpb25zKSksby5zaG93QWNjPSEwLG8uc2hvd1RhYmxlPSEwO2xldCB1PWwuYWRhcHRlclJlc3BvbnNlLmF0dHJpYnV0ZXMuZmluZChFPT4iTmFtZSI9PT1FLk5BTUUpLlZBTFVFO28uYXNzb09iamVjdFNlbGVjdGVkPXUsaS5OQU1FPXU7bGV0IGc9by5yb3V0ZXIudXJsO28u''@;'; put 'put ''bG9jYXRpb24ucmVwbGFjZVN0YXRlKG8ub2JqZWN0Um91dGU/Zy5zbGljZSgwLGcubGFzdEluZGV4T2YoIm9iamVjdCIpKSsib2JqZWN0LyIrci5zbGljZSgxK3IuaW5kZXhPZigiXFwiKSk6ZysiL29iamVjdC8iK3Iuc2xpY2UoMStyLmluZGV4T2YoIlxcIikpKSxvLm1ldGFPYmplY3RBdHRy''@;'; put 'put ''aWJ1dGVzPWwuYWRhcHRlclJlc3BvbnNlLmF0dHJpYnV0ZXN9KX0pKCl9c2VsZWN0QXNzb3NpYXRpb25zRGV0YWlscyhyLGkpe3ZhciBvPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe28uc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFkZXRhaWxzIix7U0FTQ29udHJvbFRhYmxl''@;'; put 'put ''Olt7b2JqZWN0dXJpOnJ9XX0pLnRoZW4obD0+e28ubWV0YU9iamVjdEF0dHJpYnV0ZXM9bC5hZGFwdGVyUmVzcG9uc2UuYXR0cmlidXRlcyxvLnNob3dUYWJsZT0hMH0pfSkoKX1nZXRBc3Nvc2lhdGlvbnNDb3VudChyKXtsZXQgaT1uZXcgTWFwO2ZvcihsZXQgYSBvZiByKXtpLmhhcyhhLkFT''@;'; put 'put ''U09DKXx8aS5zZXQoYS5BU1NPQyx7Y291bnQ6MCxkZXRhaWxzOltdfSk7bGV0IGw9aS5nZXQoYS5BU1NPQyk7bC5jb3VudCsrLGwuZGV0YWlscy5wdXNoKHtBU1NPQ1VSSTphLkFTU09DVVJJLE5BTUU6YS5OQU1FLGRpc3BsYXk6YS5OQU1FLFVSSTphLkFTU09DVVJJLnNsaWNlKGEuQVNTT0NV''@;'; put 'put ''UkkuaW5kZXhPZigiOiIpKzEpfSl9bGV0IG89W107cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihhLGwpe28ucHVzaCh7QVNTT0M6bCxjb3VudDphLmNvdW50LGRldGFpbHM6YS5kZXRhaWxzLGRpc3BsYXk6bCsiICggIithLmNvdW50KyIgKSJ9KX0pLG99c2V0VHlwZUFzc29zaWF0aW9ucyhy''@;'; put 'put ''KXtsZXQgaT1bXTtmb3IobGV0IG8gb2YgdGhpcy5tZXRhT2JqZWN0QXNzb2NpYXRpb25zKW8uQVNTT0M9PT1yJiZpLnB1c2gobyk7cmV0dXJuIHRoaXMuYXNzb3NpYXRpb25OYW1lcz1pLGl9YXNzb3NpYXRpb25OYW1lT25DbGljayhyKXt0aGlzLmFzc29PYmplY3RTZWxlY3RlZD0iIC4gIix0''@;'; put 'put ''aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuc2hvd1RhYmxlPSExLHRoaXMuc2VsZWN0QXNzb3NpYXRpb25zRGV0YWlscyhyKX1tZXRhTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLm1ldGFEYXRhTGlzdCx0aGlzLm1ldGFEYXRh''@;'; put 'put ''U2VhcmNoLCJJRCIpLFVuLm1ldGFkYXRhLm1ldGFEYXRhU2VhcmNoPXRoaXMubWV0YURhdGFTZWFyY2h9bWV0YU9iamVjdE9uRmlsdGVyKCl7dGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLmhlbHBlclNlcnZpY2UubWV0YU9iamVjdE9uRmlsdGVyKHRoaXMubWV0YU9iamVjdExp''@;'; put 'put ''c3QsdGhpcy5tZXRhT2JqZWN0U2VhcmNoLCJOQU1FIiksdGhpcy5nZXRNZXRhT2JqZWN0QXR0cmlidXRlcyh0aGlzLm1ldGFPYmplY3RTaXplKSxVbi5tZXRhZGF0YS5tZXRhT2JqZWN0U2VhcmNoPXRoaXMubWV0YU9iamVjdFNlYXJjaH1nZXRNZXRhT2JqZWN0QXR0cmlidXRlcyhyKXtpZih2''@;'; put 'put ''b2lkIDAhPT10aGlzLm1ldGFPYmplY3RMaXN0JiZ0aGlzLm1ldGFPYmplY3RMaXN0Lmxlbmd0aD5yKXtsZXQgaT0wLG89LTE7Zm9yKGxldCBhPTA7YTx0aGlzLm1ldGFPYmplY3RMaXN0Lmxlbmd0aDthKyspaWYoKHZvaWQgMD09PXRoaXMubWV0YU9iamVjdExpc3RbYV0uaGlkZGVufHwhMT09''@;'; put 'put ''PXRoaXMubWV0YU9iamVjdExpc3RbYV0uaGlkZGVuKSYmaSsrLGk9PT1yKXtvPWE7YnJlYWt9dGhpcy5tZXRhT2JqZWN0U2hvd0xpc3Q9LTEhPT1vP3RoaXMubWV0YU9iamVjdExpc3Quc2xpY2UoMCxvKTp0aGlzLm1ldGFPYmplY3RMaXN0fWVsc2UgdGhpcy5tZXRhT2JqZWN0U2hvd0xpc3Q9''@;'; put 'put ''dGhpcy5tZXRhT2JqZWN0TGlzdH1wYW5lbENoYW5nZShyLGkpe3RoaXMuZGVib3VuY2V8fCh0aGlzLm1ldGFPYmplY3RPbkNsaWNrKGkuSUQsaSksdGhpcy5kZWJvdW5jZT0hMCxzZXRUaW1lb3V0KCgpPT57dGhpcy5kZWJvdW5jZT0hMX0sNjAwKSl9dXBkYXRlU2VsZWN0ZWRSZXBvc2l0b3J5''@;'; put 'put ''KCl7VW4ubWV0YWRhdGEuc2VsZWN0ZWRSZXBvc2l0b3J5PXRoaXMucmVwb3NpdG9yeX1zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKSh6ZSh1ZCksemUoaWMpLHplKGZoKSx6ZShWMCksemUodmMpLHplKHAxKSl9LHRoaXMuXHUwMjc1''@;'; put 'put ''Y21wPVByKHt0eXBlOmUsc2VsZWN0b3JzOltbImFwcC1tZXRhZGF0YSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczoxOSx2YXJzOjYsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2VhcmNoT2JqVHJlZUlucHV0Iiwi''@;'; put 'put ''Il0sWyJwYWdpbmF0aW9uIiwiIl0sWzEsInJlcG8tZHJvcGRvd24iXSxbImNsclNlbGVjdCIsIiIsImlkIiwicmVwb3NpdG9yeSIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiXSxbMywidmFsdWUiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwiY29udGVudC1hcmVhIl0sWzEs''@;'; put 'put ''ImNhcmQiLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50LWkiXSxbMSwiY29sb3ItZ3JheSJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJjbHItcm93IiwiY2xyLWZsZXgtZ3Jvdy0xIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFs''@;'; put 'put ''Rm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwic2VhcmNoIFNBUyBUeXBlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMi''@;'; put 'put ''XSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFszLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiwiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUi''@;'; put 'put ''LCJibG9jayJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl0sWzEsInNwaW5uZXIiXSxbMSwiY2xyLWNvbC02''@;'; put 'put ''Il0sWzEsInNlYXJjaC1pbnB1dCJdLFsxLCJvYmplY3RzLWNvbCJdLFsxLCJjbHItY29sLTYiLCJ0ZXh0LWNlbnRlciJdLFsxLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwic2VhcmNoIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRl''@;'; put 'put ''Iiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzMsImNsckFjY29yZGlvblBhbmVsT3BlbkNoYW5nZSJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFsxLCJmbG9hdC1yaWdodCJdLFs0LCJjbHJJZkV4cGFuZGVkIl0sWzMsImNsckxhenkiXSxbMywiY2xyRXhw''@;'; put 'put ''YW5kYWJsZSIsNCwiY2xyUmVjdXJzaXZlRm9yIiwiY2xyUmVjdXJzaXZlRm9yT2YiLCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiJdLFszLCJjbHJFeHBhbmRhYmxlIl0sWzEsImZ1bGwtd2lkdGgiXSxbMSwiZmxvYXQtcmlnaHQiLCJvYmplY3QtdXJpIl0sWzEsImNvbHMtaGVhZCJdLFsx''@;'; put 'put ''LCJvYmplY3QtdGV4dCJdLFsxLCJtLTAiLCJ3b3JkLWJyZWFrIiwibXItMjAiXSxbMSwiZmxvYXQtcmlnaHQiLCJtbC0zIl0sWzMsImNsckRnU3RyaW5nRmlsdGVyIl0sWzQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMywiY2xyRGdQYWdlU2l6ZSJdLFszLCJjbHJQYWdlU2l6ZU9w''@;'; put 'put ''dGlvbnMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oaSxvKXsxJmkmJihKKDAsImFwcC1zaWRlYmFyIikoMSwiZGl2IiwzKSgyLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDMsImxhYmVsIiksU2UoNCwiTWV0YWRhdGEgUmVwb3NpdG9yeSIpLHRlKCksSig1LCJzZWxlY3QiLDQpLGhpKCJuZ01vZGVs''@;'; put 'put ''Q2hhbmdlIixmdW5jdGlvbihsKXtyZXR1cm4gZmkoby5yZXBvc2l0b3J5LGwpfHwoby5yZXBvc2l0b3J5PWwpLGx9KSx3dCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBvLnVwZGF0ZVNlbGVjdGVkUmVwb3NpdG9yeSgpfSksX28oNix5cG4sMiwzLCJvcHRpb24iLDUsQ28pLHRlKCkoKSgp''@;'; put 'put ''LEooOCwiY2xyLXRyZWUiKSx2dCg5LENwbiw2LDMsImNsci10cmVlLW5vZGUiLDYpLF9vKDEwLEVwbiwxLDEsbnVsbCxudWxsLENvKSx0ZSgpKCksSigxMiwiZGl2Iiw3KSgxMywiZGl2Iiw4KSgxNCwiaDMiLDkpLFNlKDE1KSx0ZSgpLHZ0KDE2LE1wbiw0LDAsImRpdiIsMTApLHZ0KDE3LGtw''@;'; put 'put ''biw0LDEsImRpdiIsMTEpLHZ0KDE4LHFwbiwxMCw1LCJkaXYiLDEyKSx0ZSgpKCkpLDImaSYmKGllKDUpLGRpKCJuZ01vZGVsIixvLnJlcG9zaXRvcnkpLGllKCkseW8oby5yZXBvc2l0b3JpZXMpLGllKDMpLF90KG8ubWV0YURhdGFMaXN0Pzk6LTEpLGllKCkseW8oby5tZXRhRGF0YUxpc3Qp''@;'; put 'put ''LGllKDUpLHByKG8uYXNzb1R5cGVTZWxlY3RlZCksaWUoKSxfdChvLmxvYWRpbmd8fG8ubWV0YU9iamVjdExpc3Q/LTE6MTYpLGllKCksX3Qoby5sb2FkaW5nPzE3Oi0xKSxpZSgpLF90KG8uc2hvd0RhdGE/MTg6LTEpKX0sZGVwZW5kZW5jaWVzOltYZyxRZyxsdSxLZyxvYyxYbCxOdix2NCx0''@;'; put 'put ''dyxmVyx4TSxZRCxwVyxMdixqTWUsRzUsbncsUk0sT3YsUWIsRHYsSmIsU00sUHAsTzMsJE1lLGN1LCQwLHpFZSxlbCxQZixxYixDTSxrRWUsQnosSUVlLFJFZSxERWUsVm9lLCQ2LEc2LG1JXSxlbmNhcHN1bGF0aW9uOjJ9KSx0aGlzLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOmUsZmFjdG9yeTpl''@;'; put 'put ''Llx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pKX1yZXR1cm4gbigpLGV9KSgpO2Z1bmN0aW9uIEpwbihuLGUpezEmbiYmSXQoMCwiY2xyLWljb24iLDcpfWZ1bmN0aW9uIGVnbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLWljb24iLDkpLHd0KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXtZZSh0KTtjb25zdCBpPVRlKDIpO3JldHVybiBpLnJvbGVTZWFyY2g9IiIsWGUoaS5yb2xlTGlzdE9uRmlsdGVyKCkpfSksdGUoKX19ZnVuY3Rpb24gdGduKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItdHJlZS1ub2RlIiwyKSgxLCJkaXYiLDUpKDIsImlucHV0Iiw2''@;'; put 'put ''LDApLGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKCk7cmV0dXJuIGZpKG8ucm9sZVNlYXJjaCxpKXx8KG8ucm9sZVNlYXJjaD1pKSxYZShpKX0pLHd0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoKS5yb2xlTGlzdE9uRmlsdGVy''@;'; put 'put ''KCkpfSksdGUoKSx2dCg0LEpwbiwxLDAsImNsci1pY29uIiw3KSx2dCg1LGVnbiwxLDAsImNsci1pY29uIiw4KSx0ZSgpKCl9aWYoMiZuKXtjb25zdCB0PW9vKDMpLHI9VGUoKTtpZSgyKSxkaSgibmdNb2RlbCIsci5yb2xlU2VhcmNoKSxpZSgyKSxfdCh0LnZhbHVlLmxlbmd0aDwxPzQ6LTEp''@;'; put 'put ''LGllKCksX3QodC52YWx1ZS5sZW5ndGg+MD81Oi0xKX19ZnVuY3Rpb24gbmduKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItdHJlZS1ub2RlIiwxMSksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoKS4kaW1wbGljaXQ7cmV0dXJuIFhlKFRlKCkucm9s''@;'; put 'put ''ZU9uQ2xpY2soaSkpfSksSigxLCJwIiwxMiksSXQoMiwiY2xyLWljb24iLDEzKSxTZSgzKSx0ZSgpKCl9aWYoMiZuKXtjb25zdCB0PVRlKCkuJGltcGxpY2l0LHI9VGUoKTt3cigiYWN0aXZlIix0LlJPTEVVUkk9PT1yLnJvbGVVcmkpLGllKDMpLFNyKCIgIix0LlJPTEVOQU1FLCIgIil9fWZ1''@;'; put 'put ''bmN0aW9uIHJnbihuLGUpezEmbiYmdnQoMCxuZ24sNCwzLCJjbHItdHJlZS1ub2RlIiwxMCksMiZuJiZfdChlLiRpbXBsaWNpdC5oaWRkZW4/LTE6MCl9ZnVuY3Rpb24gaWduKG4sZSl7MSZuJiYoSigwLCJkaXYiLDQpKDEsInNwYW4iLDE0KSxTZSgyLCIgTG9hZGluZy4uLiAiKSx0ZSgpKCkp''@;'; put 'put ''fWZ1bmN0aW9uIG9nbihuLGUpezEmbiYmKEooMCwiaDUiKSxTZSgxLCJObyBNZW1iZXJzIFByZXNlbnQiKSx0ZSgpKX1mdW5jdGlvbiBhZ24obixlKXtpZigxJm4mJihKKDAsInRyIiwyNSkoMSwidGQiLDI0KSxTZSgyKSx0ZSgpLEooMywidGQiLDI0KSxTZSg0KSx0ZSgpLEooNSwidGQiLDI0''@;'; put 'put ''KSxTZSg2KSx0ZSgpLEooNywidGQiLDI0KSxTZSg4KSx0ZSgpKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdDtydCgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIit0LlVSSU1FTSksaWUoMikscHIodC5NRU1CRVJOQU1FKSxpZSgyKSxwcih0LkVNQUlMKSxpZSgyKSxwcih0''@;'; put 'put ''Lk1FTUJFUkNSRUFURUQpLGllKDIpLHByKHQuTUVNQkVSVVBEQVRFRCl9fWZ1bmN0aW9uIHNnbihuLGUpe2lmKDEmbiYmKEooMCwidGFibGUiLDIyKSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDIzKSg0LCJiIiksU2UoNSwiTkFNRSIpLHRlKCkoKSxKKDYsInRkIiwyMykoNywiYiIpLFNl''@;'; put 'put ''KDgsIkVNQUlMIiksdGUoKSgpLEooOSwidGQiLDIzKSgxMCwiYiIpLFNlKDExLCJDUkVBVEVEIiksdGUoKSgpLEooMTIsInRkIiwyNCkoMTMsImIiKSxTZSgxNCwiVVBEQVRFRCIpLHRlKCkoKSgpKCksSigxNSwidGJvZHkiKSxfbygxNixhZ24sOSw1LCJ0ciIsMjUsQ28pLHRlKCkoKSksMiZu''@;'; put 'put ''KXtjb25zdCB0PVRlKDIpO2llKDE2KSx5byh0LnJvbGVNZW1iZXJzKX19ZnVuY3Rpb24gbGduKG4sZSl7MSZuJiYoSigwLCJoNSIpLFNlKDEsIk5vIEdyb3VwcyBQcmVzZW50ICEiKSx0ZSgpKX1mdW5jdGlvbiBjZ24obixlKXtpZigxJm4mJihKKDAsInRyIiwyNSkoMSwidGQiLDI0KSxTZSgy''@;'; put 'put ''KSx0ZSgpLEooMywidGQiLDI0KSxTZSg0KSx0ZSgpLEooNSwidGQiLDI0KSxTZSg2KSx0ZSgpLEooNywidGQiLDI0KSxTZSg4KSx0ZSgpKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdDtydCgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvZ3JvdXBzLyIrdC5VUklNRU0pLGllKDIpLHBy''@;'; put 'put ''KHQuTUVNQkVSTkFNRSksaWUoMikscHIodC5FTUFJTCksaWUoMikscHIodC5NRU1CRVJDUkVBVEVEKSxpZSgyKSxwcih0Lk1FTUJFUlVQREFURUQpfX1mdW5jdGlvbiB1Z24obixlKXtpZigxJm4mJihKKDAsInRhYmxlIiwyMikoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwyMykoNCwiYiIp''@;'; put 'put ''LFNlKDUsIk5BTUUiKSx0ZSgpKCksSig2LCJ0ZCIsMjMpKDcsImIiKSxTZSg4LCJFTUFJTCIpLHRlKCkoKSxKKDksInRkIiwyMykoMTAsImIiKSxTZSgxMSwiQ1JFQVRFRCIpLHRlKCkoKSxKKDEyLCJ0ZCIsMjQpKDEzLCJiIiksU2UoMTQsIlVQREFURUQiKSx0ZSgpKCkoKSgpLEooMTUsInRi''@;'; put 'put ''b2R5IiksX28oMTYsY2duLDksNSwidHIiLDI1LENvKSx0ZSgpKCkpLDImbil7Y29uc3QgdD1UZSgyKTtpZSgxNikseW8odC5yb2xlR3JvdXBzKX19ZnVuY3Rpb24gZGduKG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiKSgxLCJkaXYiLDE1KSgyLCJkaXYiLDE2KSgzLCJ0YWJsZSIsMTcpKDQsInRi''@;'; put 'put ''b2R5IikoNSwidHIiKSg2LCJ0ZCIsMTgpKDcsInAiLDE5KSg4LCJiIiksU2UoOSksdGUoKSgpKCkoKSxKKDEwLCJ0ciIpKDExLCJ0ZCIsMTgpKDEyLCJpIiksU2UoMTMpLHRlKCkoKSgpKCkoKSgpKCksSigxNCwiZGl2IiwxNSkoMTUsImRpdiIsMTYpKDE2LCJkaXYiLDIwKSgxNywiZGl2Iiko''@;'; put 'put ''MTgsImgzIiksU2UoMTkpLHRlKCksdnQoMjAsb2duLDIsMCwiaDUiKSxKKDIxLCJkaXYiLDIxKSx2dCgyMixzZ24sMTgsMCwidGFibGUiLDIyKSx0ZSgpKCksSXQoMjMsImhyIiksSigyNCwiZGl2IikoMjUsImgzIiksU2UoMjYpLHRlKCksdnQoMjcsbGduLDIsMCwiaDUiKSxKKDI4LCJkaXYi''@;'; put 'put ''LDIxKSx2dCgyOSx1Z24sMTgsMCwidGFibGUiLDIyKSx0ZSgpKCksSXQoMzAsImJyIiksdGUoKSgpKCkoKSksMiZuKXtjb25zdCB0PVRlKCk7aWUoOSkscHIodC5yb2xlTmFtZSksaWUoNCkscHIodC5yb2xlRGVzYyksaWUoNiksU3IoIk1FTUJFUlMgKCIsdC5yb2xlTWVtYmVyc0NvdW50LCIp''@;'; put 'put ''IiksaWUoKSxfdCgwPT10LnJvbGVNZW1iZXJzQ291bnQ/MjA6LTEpLGllKDIpLF90KDAhPXQucm9sZU1lbWJlcnNDb3VudD8yMjotMSksaWUoNCksU3IoIkdyb3VwcyAoIix0LnJvbGVHcm91cHNDb3VudCwiKSIpLGllKCksX3QoMD09dC5yb2xlR3JvdXBzQ291bnQ/Mjc6LTEpLGllKDIpLF90''@;'; put 'put ''KDAhPXQucm9sZUdyb3Vwc0NvdW50PzI5Oi0xKX19bGV0IHgkZT0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKHIsaSxvLGEsbCl7dGhpcy5zYXNTZXJ2aWNlPXIsdGhpcy5oZWxwZXJTZXJ2aWNlPWksdGhpcy5yb3V0ZXI9byx0aGlzLmxvY2F0aW9uPWEsdGhpcy5yb3V0ZT1sLHRo''@;'; put 'put ''aXMucm9sZVNlYXJjaD0iIix0aGlzLnJvbGVVcmk9IiIsdGhpcy5yb2xlTmFtZT0iIix0aGlzLnJvbGVEZXNjPSIiLHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFyYW1VUkk9IiIsdGhpcy5sb2FkaW5nPSExfW5nT25Jbml0KCl7VW4udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcv''@;'; put 'put ''dXNlcm5hdi9yb2xlcyIsdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbVVSST10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkpLFVuLnVzZXJuYXYucm9sZUxpc3QmJiF0aGlzLnBhcmFtUHJlc2VudD8o''@;'; put 'put ''dGhpcy5yb2xlcz1Vbi51c2VybmF2LnJvbGVMaXN0LHRoaXMucm9sZVNlYXJjaD1Vbi51c2VybmF2LnJvbGVTZWFyY2gpOnZvaWQgMD09PVVuLnVzZXJuYXYucm9sZUxpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2Vycm9sZXMiLG51bGwp''@;'; put 'put ''LnRoZW4ocj0+e2lmKHRoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVzPXIuYWRhcHRlclJlc3BvbnNlLnJvbGVzLFVuLnVzZXJuYXYucm9sZUxpc3Q9ci5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsdGhpcy5wYXJhbVByZXNlbnQmJnZvaWQgMCE9PXRoaXMucm9sZXMpe2xldCBpPXRoaXMuZmluZFJv''@;'; put 'put ''bGUodGhpcy5yb2xlcyx0aGlzLnBhcmFtVVJJKTshMSE9PWkmJih0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDp0aGlzLnBhcmFtVVJJfV19KS50aGVuKGE9Pnt0aGlzLmxvYWRpbmc9ITEs''@;'; put 'put ''dGhpcy5yb2xlTWVtYmVycz1hLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLHRoaXMucm9sZU1lbWJlcnNDb3VudD1hLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLmxlbmd0aCx0aGlzLnJvbGVHcm91cHM9YS5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLHRoaXMucm9sZUdyb3Vwc0Nv''@;'; put 'put ''dW50PWEuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcy5sZW5ndGgsdGhpcy5yb2xlVXJpPWkuUk9MRVVSSSx0aGlzLnJvbGVOYW1lPWkuUk9MRU5BTUUsdGhpcy5yb2xlRGVzYz1pLlJPTEVERVNDfSkpfX0pKToodGhpcy5yb2xlcz1Vbi51c2VybmF2LnJvbGVMaXN0LHRoaXMucm9sZVNlYXJj''@;'; put 'put ''aD1Vbi51c2VybmF2LnJvbGVTZWFyY2gsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcnJvbGVzIixudWxsKS50aGVuKHI9PntpZih0aGlzLnJvbGVzPXIuYWRhcHRlclJlc3BvbnNlLnJvbGVzLFVuLnVzZXJuYXYucm9sZUxpc3Q9ci5hZGFwdGVyUmVzcG9uc2Uucm9sZXMs''@;'; put 'put ''dGhpcy5wYXJhbVByZXNlbnQmJnZvaWQgMCE9PXRoaXMucm9sZXMpe2xldCBpPXRoaXMuZmluZFJvbGUodGhpcy5yb2xlcyx0aGlzLnBhcmFtVVJJKTshMSE9PWkmJih0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtp''@;'; put 'put ''d2FudDpbe3JvbGVpZDp0aGlzLnBhcmFtVVJJfV19KS50aGVuKGE9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlTWVtYmVycz1hLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLHRoaXMucm9sZU1lbWJlcnNDb3VudD1hLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLmxlbmd0aCx0aGlz''@;'; put 'put ''LnJvbGVHcm91cHM9YS5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLHRoaXMucm9sZUdyb3Vwc0NvdW50PWEuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcy5sZW5ndGgsdGhpcy5yb2xlVXJpPWkuUk9MRVVSSSx0aGlzLnJvbGVOYW1lPWkuUk9MRU5BTUUsdGhpcy5yb2xlRGVzYz1pLlJPTEVE''@;'; put 'put ''RVNDfSkpfX0pKX1yb2xlTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLnJvbGVzLHRoaXMucm9sZVNlYXJjaCwiUk9MRU5BTUUiKSxVbi51c2VybmF2LnJvbGVTZWFyY2g9dGhpcy5yb2xlU2VhcmNofXJvbGVPbkNsaWNrKHIpe3RoaXMubG9h''@;'; put 'put ''ZGluZz0hMDtsZXQgaT10aGlzLnJvdXRlci51cmw7dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5wYXJhbVByZXNlbnQ/aS5zbGljZSgwLGkubGFzdEluZGV4T2YoIi8iKSkrIi8iK2VuY29kZVVSSShyLlJPTEVVUkkpOmkrIi8iK2VuY29kZVVSSShyLlJPTEVVUkkpKSx0aGlzLnNh''@;'; put 'put ''c1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5cm9sZSIse2l3YW50Olt7cm9sZWlkOnIuUk9MRVVSSX1dfSkudGhlbihhPT57dGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZU1lbWJlcnM9YS5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLnJvbGVNZW1iZXJzQ291''@;'; put 'put ''bnQ9YS5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGgsdGhpcy5yb2xlR3JvdXBzPWEuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcyx0aGlzLnJvbGVHcm91cHNDb3VudD1hLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91cHMubGVuZ3RoLHRoaXMucm9sZVVyaT1yLlJPTEVVUkksdGhp''@;'; put 'put ''cy5yb2xlTmFtZT1yLlJPTEVOQU1FLHRoaXMucm9sZURlc2M9ci5ST0xFREVTQ30pfWZpbmRSb2xlKHIsaSl7bGV0IG89ITE7cmV0dXJuIHIuZm9yRWFjaChhPT57YS5ST0xFVVJJPT09aSYmKG89YSl9KSxvfXN0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1''@;'; put 'put ''cm4gbmV3KGl8fGUpKHplKGljKSx6ZShmaCksemUodmMpLHplKFYwKSx6ZShwMSkpfSx0aGlzLlx1MDI3NWNtcD1Qcih7dHlwZTplLHNlbGVjdG9yczpbWyJhcHAtcm9sZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczo4LHZhcnM6Myxj''@;'; put 'put ''b25zdHM6W1sic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWzEsInNpZGViYXItaGVpZ2h0Il0sWzEsInNlYXJjaC1ub2RlIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5w''@;'; put 'put ''dXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBSb2xlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiXSxbInNoYXBlIiwidGltZXMi''@;'; put 'put ''LDMsImNsaWNrIl0sWzMsImFjdGl2ZSJdLFszLCJjbGljayJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsImxpc3QtcGFkZGluZyJdLFsic2hhcGUiLCJibG9ja3MtZ3JvdXAiXSxbMSwic3Bpbm5lciJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJ0YWJsZSIsInJvbGUt''@;'; put 'put ''aW5mbyJdLFsxLCJsZWZ0Il0sWzEsInJvbGUtaW5mby10ZXh0Il0sWzEsImNhcmQiLCJyb2xlLWRhdGEiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWzEsInRhYmxlIiwibWVtYmVyLXRhYmxlIl0sWzEsIndpZHRoLTI1Il0sWzEsIiJdLFszLCJyb3V0ZXJMaW5rIl1dLHRlbXBsYXRlOmZ1bmN0''@;'; put 'put ''aW9uKGksbyl7MSZpJiYoSigwLCJhcHAtc2lkZWJhciIsMSkoMSwiY2xyLXRyZWUiKSx2dCgyLHRnbiw2LDMsImNsci10cmVlLW5vZGUiLDIpLF9vKDMscmduLDEsMSxudWxsLG51bGwsQ28pLHRlKCkoKSxKKDUsImRpdiIsMyksdnQoNixpZ24sMywwLCJkaXYiLDQpLHZ0KDcsZGduLDMxLDgs''@;'; put 'put ''ImRpdiIpLHRlKCkpLDImaSYmKGllKDIpLF90KG8ucm9sZXM/MjotMSksaWUoKSx5byhvLnJvbGVzKSxpZSgzKSxfdChvLmxvYWRpbmc/NjotMSksaWUoKSxfdChvLnJvbGVNZW1iZXJzJiYhby5sb2FkaW5nPzc6LTEpKX0sZGVwZW5kZW5jaWVzOltQMixsdSxvYyxYbCxQcCxPMyxjdSxQZiwk''@;'; put 'put ''NixHNl0sc3R5bGVzOlsiOjpuZy1kZWVwIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5yb2xle2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtib3JkZXItY29sb3I6IzMxNDM1MX06Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9ZGFya10gLnJvbGUtZGF0YXtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7''@;'; put 'put ''Ym9yZGVyLWNvbG9yOiMzMTQzNTF9OjpuZy1kZWVwIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5tZW1iZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMjk0MDRifTo6bmctZGVlcCBib2R5W2Nkcy10aGVtZT1saWdodF0gLnJvbGUtaW5mb3tiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OiNmOWY5Zjk7Ym9yZGVyLWNvbG9yOiNhN2E3YTc7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN306Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5yb2xlLWRhdGF7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlci1jb2xvcjojYTdhN2E3O2JveC1zaGFkb3c6MCAycHgg''@;'; put 'put ''NXB4ICNkYWQ3ZDd9OjpuZy1kZWVwIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAubWVtYmVyLXRhYmxlIHRib2R5IHRyOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNn0uc2lkZWJhci1oZWlnaHR7aGVpZ2h0OjEwMCV9LnJvbGUtaW5mby10ZXh0e2Rpc3BsYXk6aW5saW5lO2ZvbnQtc2l6''@;'; put 'put ''ZToyMHB4fS5yb2xlLWluZm97Ym9yZGVyOjFweCBzb2xpZDtib3JkZXItcmFkaXVzOjNweH0ucm9sZS1pbmZvIHRke3RleHQtYWxpZ246Y2VudGVyfS5yb2xlLWRhdGF7Ym9yZGVyOjFweCBzb2xpZDtib3JkZXItcmFkaXVzOjNweH0ucm9sZS1kYXRhe21pbi1oZWlnaHQ6dW5zZXR9LnJvbGUt''@;'; put 'put ''ZGF0YSBoMywucm9sZS1kYXRhIGg1e3RleHQtYWxpZ246Y2VudGVyfS5tZW1iZXItdGFibGV7d2lkdGg6MTAwJX0ubWVtYmVyLXRhYmxlIHRib2R5IHRyOmhvdmVye2N1cnNvcjpwb2ludGVyfS50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3cteTpzY3JvbGw7bWF4LWhlaWdodDo3MDBweH1AbWVk''@;'; put 'put ''aWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2OHB4KXsucm9sZS1kYXRhe21pbi1oZWlnaHQ6dW5zZXQhaW1wb3J0YW50fX1cbiJdLGVuY2Fwc3VsYXRpb246Mn0pKX1yZXR1cm4gbigpLGV9KSgpLGhnbj0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fXN0''@;'; put 'put ''YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpfSx0aGlzLlx1MDI3NWNtcD1Qcih7dHlwZTplLHNlbGVjdG9yczpbWyJhcHAtdXNlcm5hdi1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZToh''@;'; put 'put ''MSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihpLG8pezEmaSYmSXQoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W2U3XSxlbmNhcHN1bGF0aW9uOjJ9KSl9cmV0dXJuIG4oKSxlfSkoKSxmZ249KCgpPT57dmFyIG47Y2xhc3MgZXtjb25zdHJ1Y3Rvcigpe31uZ09u''@;'; put 'put ''SW5pdCgpe31uZ09uRGVzdHJveSgpe31zdGF0aWMjZT1uPSgpPT4odGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKX0sdGhpcy5cdTAyNzVjbXA9UHIoe3R5cGU6ZSxzZWxlY3RvcnM6W1siYXBwLXZpZXctcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNv''@;'; put 'put ''bnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oaSxvKXsxJmkmJkl0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltlN10sZW5jYXBzdWxhdGlvbjoyfSkpfXJldHVybiBuKCksZX0pKCk7ZnVuY3Rpb24gcGduKG4sZSl7MSZu''@;'; put 'put ''JiZJdCgwLCJjbHItaWNvbiIsNyl9ZnVuY3Rpb24gZ2duKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItaWNvbiIsOSksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoMik7cmV0dXJuIGkudXNlclNlYXJjaD0iIixYZShpLnVzZXJMaXN0T25GaWx0ZXIo''@;'; put 'put ''KSl9KSx0ZSgpfX1mdW5jdGlvbiBtZ24obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImNsci10cmVlLW5vZGUiLDIpKDEsImRpdiIsNSkoMiwiaW5wdXQiLDYsMCksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoKTtyZXR1cm4gZmkoby51c2Vy''@;'; put 'put ''U2VhcmNoLGkpfHwoby51c2VyU2VhcmNoPWkpLFhlKGkpfSksd3QoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLnVzZXJMaXN0T25GaWx0ZXIoKSl9KSx0ZSgpLHZ0KDQscGduLDEsMCwiY2xyLWljb24iLDcpLHZ0KDUsZ2duLDEsMCwiY2xyLWljb24iLDgpLHRlKCko''@;'; put 'put ''KX1pZigyJm4pe2NvbnN0IHQ9b28oMykscj1UZSgpO2llKDIpLGRpKCJuZ01vZGVsIixyLnVzZXJTZWFyY2gpLGllKDIpLF90KHQudmFsdWUubGVuZ3RoPDE/NDotMSksaWUoKSxfdCh0LnZhbHVlLmxlbmd0aD4wPzU6LTEpfX1mdW5jdGlvbiB2Z24obixlKXtpZigxJm4pe2NvbnN0IHQ9d24o''@;'; put 'put ''KTtKKDAsImNsci10cmVlLW5vZGUiLDExKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3QgaT1UZSgpLiRpbXBsaWNpdDtyZXR1cm4gWGUoVGUoKS51c2VyT25DbGljayhpKSl9KSxKKDEsInAiLDEyKSxJdCgyLCJjbHItaWNvbiIsMTMpLFNlKDMpLHRlKCkoKX1pZigyJm4pe2Nv''@;'; put 'put ''bnN0IHQ9VGUoKS4kaW1wbGljaXQscj1UZSgpO3dyKCJhY3RpdmUiLChudWxsPT1yLnVzZXJJbmZvP251bGw6ci51c2VySW5mby5VUkkpPT09dC5VUkkpLGllKDMpLFNyKCIgIix0Lk5BTUUsIiAiKX19ZnVuY3Rpb24gX2duKG4sZSl7MSZuJiZ2dCgwLHZnbiw0LDMsImNsci10cmVlLW5vZGUi''@;'; put 'put ''LDEwKSwyJm4mJl90KGUuJGltcGxpY2l0LmhpZGRlbj8tMTowKX1mdW5jdGlvbiB5Z24obixlKXsxJm4mJihKKDAsImRpdiIsNCkoMSwic3BhbiIsMTQpLFNlKDIsIiBMb2FkaW5nLi4uICIpLHRlKCkoKSl9ZnVuY3Rpb24gYmduKG4sZSl7aWYoMSZuJiYoSigwLCJ0ciIpKDEsInRkIiwyMSks''@;'; put 'put ''U2UoMiwiIE1ldGFkYXRhIENyZWF0ZWQ6ICIpLEooMywiYiIpLFNlKDQpLHRlKCkoKSgpLEooNSwidHIiKSg2LCJ0ZCIsMjEpLFNlKDcsIiBNZXRhZGF0YSBVcGRhdGVkOiAiKSxKKDgsImIiKSxTZSg5KSx0ZSgpKCkoKSksMiZuKXtjb25zdCB0PVRlKDMpO2llKDQpLHByKHQudXNlckluZm8u''@;'; put 'put ''TUVUQURBVEFDUkVBVEVEKSxpZSg1KSxwcih0LnVzZXJJbmZvLk1FVEFEQVRBVVBEQVRFRCl9fWZ1bmN0aW9uIHdnbihuLGUpe2lmKDEmbiYmKEooMCwiZGl2IiwxNSkoMSwiZGl2IiwxNikoMiwidGFibGUiLDIwKSgzLCJ0Ym9keSIpKDQsInRyIikoNSwidGQiLDIxKSg2LCJwIiwyMikoNywi''@;'; put 'put ''YiIpLFNlKDgpLHRlKCkoKSgpKCksSig5LCJ0ciIpKDEwLCJ0ZCIsMjEpKDExLCJwIiwyMikoMTIsImIiKSxTZSgxMyksdGUoKSgpKCkoKSx2dCgxNCxiZ24sMTAsMiksdGUoKSgpKCkoKSksMiZuKXtjb25zdCB0PVRlKDIpO2llKDgpLHByKHQudXNlckluZm8uTkFNRSksaWUoNSkscHIodC51''@;'; put 'put ''c2VySW5mby5ESVNQTEFZTkFNRSksaWUoKSxfdCh0LnNlcnZlclR5cGU9PT10LlNlcnZlclR5cGUuU2FzOT8xNDotMSl9fWZ1bmN0aW9uIENnbihuLGUpe2lmKDEmbiYmKEooMCwiZGl2IiwxNSkoMSwiZGl2IiwxNikoMiwidGFibGUiLDIwKSgzLCJ0Ym9keSIpKDQsInRyIikoNSwidGQiLDIx''@;'; put 'put ''KSg2LCJwIiwyMikoNywiYiIpLFNlKDgpLHRlKCkoKSgpKCksSig5LCJ0ciIpKDEwLCJ0ZCIsMjEpLFNlKDExLCIgVXNlciBJRDogIiksSigxMiwiYiIpLFNlKDEzKSx0ZSgpKCkoKSxKKDE0LCJ0ciIpKDE1LCJ0ZCIsMjEpLFNlKDE2LCIgVXNlciBwcm92aWRlciBJRDogIiksSigxNywiYiIp''@;'; put 'put ''LFNlKDE4KSx0ZSgpKCkoKSgpKCkoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoMik7aWUoOCkscHIodC51c2VySW5mby5OQU1FKSxpZSg1KSxwcih0LnVzZXJJbmZvLlVSSSksaWUoNSkscHIodC51c2VySW5mby5QUk9WSURFUil9fWZ1bmN0aW9uIFNnbihuLGUpezEmbiYmKEooMCwiaDUiKSxTZSgx''@;'; put 'put ''LCJObyBFbWFpbHMgUHJlc2VudCIpLHRlKCkpfWZ1bmN0aW9uIEVnbihuLGUpe2lmKDEmbiYmKEooMCwidHIiKSgxLCJ0ZCIsMjQpLFNlKDIpLHRlKCksSigzLCJ0ZCIsMjQpLFNlKDQpLHRlKCkoKSksMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0O2llKDIpLHByKHQuRU1BSUwpLGllKDIpLHBy''@;'; put 'put ''KHQuVFlQRSl9fWZ1bmN0aW9uIE1nbihuLGUpe2lmKDEmbiYmKEooMCwidGFibGUiLDE5KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDIzKSg0LCJiIiksU2UoNSwiRU1BSUwiKSx0ZSgpKCksSig2LCJ0ZCIsMjQpKDcsImIiKSxTZSg4LCJUWVBFIiksdGUoKSgpKCkoKSxKKDksInRib2R5''@;'; put 'put ''IiksX28oMTAsRWduLDUsMiwidHIiLG51bGwsQ28pLHRlKCkoKSksMiZuKXtjb25zdCB0PVRlKDMpO2llKDEwKSx5byh0LnVzZXJFbWFpbHMpfX1mdW5jdGlvbiBUZ24obixlKXtpZigxJm4mJihKKDAsImRpdiIpKDEsImgzIiksU2UoMiksdGUoKSx2dCgzLFNnbiwyLDAsImg1IiksSig0LCJk''@;'; put 'put ''aXYiLDE4KSx2dCg1LE1nbiwxMiwwLCJ0YWJsZSIsMTkpLHRlKCkoKSksMiZuKXtjb25zdCB0PVRlKDIpO2llKDIpLFNyKCJFTUFJTFMgKCIsdC51c2VyRW1haWxzQ291bnR8fCIwIiwiKSIpLGllKCksX3QoMD09dC51c2VyRW1haWxzQ291bnQ/MzotMSksaWUoMiksX3QoMCE9dC51c2VyRW1h''@;'; put 'put ''aWxzQ291bnQ/NTotMSl9fWZ1bmN0aW9uIHhnbihuLGUpezEmbiYmSXQoMCwiaHIiKX1mdW5jdGlvbiBBZ24obixlKXsxJm4mJihKKDAsImg1IiksU2UoMSwiTm8gR3JvdXBzIFByZXNlbnQiKSx0ZSgpKX1mdW5jdGlvbiBrZ24obixlKXtpZigxJm4mJihKKDAsInRkIiwyNSksU2UoMSksdGUo''@;'; put 'put ''KSksMiZuKXtjb25zdCB0PVRlKCkuJGltcGxpY2l0O3J0KCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9ncm91cHMvIit0LlVSSSksaWUoKSxTcigiICIsdC5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gUmduKG4sZSl7aWYoMSZuJiYoSigwLCJ0ZCIsMjUpLFNlKDEpLHRlKCkpLDImbil7''@;'; put 'put ''Y29uc3QgdD1UZSgpLiRpbXBsaWNpdDtydCgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvZ3JvdXBzLyIrKHQuR1JPVVBVUkl8fHQuVVJJKSksaWUoKSxTcigiICIsdC5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gSWduKG4sZSl7aWYoMSZuJiYoSigwLCJ0ciIpLHZ0KDEsa2duLDIsMiwi''@;'; put 'put ''dGQiLDI1KSx2dCgyLFJnbiwyLDIsInRkIiwyNSksdGUoKSksMiZuKXtjb25zdCB0PVRlKDMpO2llKCksX3QodC5zZXJ2ZXJUeXBlPT09dC5TZXJ2ZXJUeXBlLlNhc1ZpeWE/MTotMSksaWUoKSxfdCh0LnNlcnZlclR5cGUhPT10LlNlcnZlclR5cGUuU2FzVml5YT8yOi0xKX19ZnVuY3Rpb24g''@;'; put 'put ''RGduKG4sZSl7aWYoMSZuJiYoSigwLCJ0YWJsZSIsMTkpKDEsInRib2R5IiksX28oMixJZ24sMywyLCJ0ciIsbnVsbCxDbyksdGUoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoMik7aWUoMikseW8odC51c2VyR3JvdXBzKX19ZnVuY3Rpb24gTGduKG4sZSl7MSZuJiZJdCgwLCJociIpfWZ1bmN0aW9u''@;'; put 'put ''IE9nbihuLGUpezEmbiYmKEooMCwiaDUiKSxTZSgxLCJObyBSb2xlcyBQcmVzZW50IiksdGUoKSl9ZnVuY3Rpb24gTmduKG4sZSl7aWYoMSZuJiYoSigwLCJ0ciIpKDEsInRkIiwyNiksU2UoMiksdGUoKSgpKSwyJm4pe2NvbnN0IHQ9ZS4kaW1wbGljaXQscj1UZSg0KTtpZSgpLHJ0KCJyb3V0''@;'; put 'put ''ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9yb2xlcy8iK3IuZ2V0Um9sZVVSSSh0LlJPTEVVUkkpKSxpZSgpLFNyKCIgIix0LlJPTEVOQU1FLCIgIil9fWZ1bmN0aW9uIEZnbihuLGUpe2lmKDEmbiYmKEooMCwidGFibGUiLDE5KSgxLCJ0Ym9keSIpLF9vKDIsTmduLDMsMiwidHIiLG51bGwsQ28p''@;'; put 'put ''LHRlKCkoKSksMiZuKXtjb25zdCB0PVRlKDMpO2llKDIpLHlvKHQudXNlclJvbGVzKX19ZnVuY3Rpb24gUGduKG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiKSgxLCJoMyIpLFNlKDIpLHRlKCksdnQoMyxPZ24sMiwwLCJoNSIpLEooNCwiZGl2IiwxOCksdnQoNSxGZ24sNCwwLCJ0YWJsZSIsMTkp''@;'; put 'put ''LHRlKCkoKSksMiZuKXtjb25zdCB0PVRlKDIpO2llKDIpLFNyKCJST0xFUyAoIix0LnVzZXJSb2xlc0NvdW50fHwiMCIsIikiKSxpZSgpLF90KDA9PXQudXNlclJvbGVzQ291bnQ/MzotMSksaWUoMiksX3QoMCE9dC51c2VyUm9sZXNDb3VudD81Oi0xKX19ZnVuY3Rpb24gSGduKG4sZSl7MSZu''@;'; put 'put ''JiZJdCgwLCJociIpfWZ1bmN0aW9uIFZnbihuLGUpezEmbiYmKEooMCwiaDUiKSxTZSgxLCJObyBMb2dpbnMgUHJlc2VudCIpLHRlKCkpfWZ1bmN0aW9uIEJnbihuLGUpe2lmKDEmbiYmKEooMCwidHIiKSgxLCJ0ZCIsMjQpLFNlKDIpLHRlKCksSigzLCJ0ZCIsMjQpLFNlKDQpLHRlKCkoKSks''@;'; put 'put ''MiZuKXtjb25zdCB0PWUuJGltcGxpY2l0O2llKDIpLHByKHQuRE9NQUlOKSxpZSgyKSxwcih0LlVTRVJJRCl9fWZ1bmN0aW9uIGpnbihuLGUpe2lmKDEmbiYmKEooMCwidGFibGUiLDE5KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDIzKSg0LCJiIiksU2UoNSwiRE9NQUlOIiksdGUoKSgp''@;'; put 'put ''LEooNiwidGQiKSg3LCJiIiksU2UoOCwiVVNFUiBJRCIpLHRlKCkoKSgpKCksSig5LCJ0Ym9keSIpLF9vKDEwLEJnbiw1LDIsInRyIixudWxsLENvKSx0ZSgpKCkpLDImbil7Y29uc3QgdD1UZSgzKTtpZSgxMCkseW8odC51c2VyTG9naW5zKX19ZnVuY3Rpb24gVWduKG4sZSl7aWYoMSZuJiYo''@;'; put 'put ''SigwLCJkaXYiKSgxLCJoMyIpLFNlKDIpLHRlKCksdnQoMyxWZ24sMiwwLCJoNSIpLEooNCwiZGl2IiwxOCksdnQoNSxqZ24sMTIsMCwidGFibGUiLDE5KSx0ZSgpKCkpLDImbil7Y29uc3QgdD1UZSgyKTtpZSgyKSxTcigiTE9HSU5TICgiLHQudXNlckxvZ2luc0NvdW50fHwiMCIsIikiKSxp''@;'; put 'put ''ZSgpLF90KDA9PXQudXNlckxvZ2luc0NvdW50PzM6LTEpLGllKDIpLF90KDAhPXQudXNlckxvZ2luc0NvdW50PzU6LTEpfX1mdW5jdGlvbiB6Z24obixlKXtpZigxJm4mJihKKDAsImRpdiIpLHZ0KDEsd2duLDE1LDMsImRpdiIsMTUpLHZ0KDIsQ2duLDE5LDMsImRpdiIsMTUpLEooMywiZGl2''@;'; put 'put ''IiwxNSkoNCwiZGl2IiwxNikoNSwiZGl2IiwxNyksdnQoNixUZ24sNiwzLCJkaXYiKSx2dCg3LHhnbiwxLDAsImhyIiksSig4LCJkaXYiKSg5LCJoMyIpLFNlKDEwKSx0ZSgpLHZ0KDExLEFnbiwyLDAsImg1IiksSigxMiwiZGl2IiwxOCksdnQoMTMsRGduLDQsMCwidGFibGUiLDE5KSx0ZSgp''@;'; put 'put ''KCksdnQoMTQsTGduLDEsMCwiaHIiKSx2dCgxNSxQZ24sNiwzLCJkaXYiKSx2dCgxNixIZ24sMSwwLCJociIpLHZ0KDE3LFVnbiw2LDMsImRpdiIpLEl0KDE4LCJiciIpLHRlKCkoKSgpKCkpLDImbil7Y29uc3QgdD1UZSgpO2llKCksX3QodC5zZXJ2ZXJUeXBlIT09dC5TZXJ2ZXJUeXBlLlNh''@;'; put 'put ''c1ZpeWE/MTotMSksaWUoKSxfdCh0LnNlcnZlclR5cGU9PT10LlNlcnZlclR5cGUuU2FzVml5YSYmdC51c2VySW5mbz8yOi0xKSxpZSg0KSxfdCh0LnNlcnZlclR5cGU9PT10LlNlcnZlclR5cGUuU2FzOT82Oi0xKSxpZSgpLF90KHQuc2VydmVyVHlwZT09PXQuU2VydmVyVHlwZS5TYXM5Pzc6''@;'; put 'put ''LTEpLGllKDMpLFNyKCJHUk9VUFMgKCIsdC51c2VyR3JvdXBzQ291bnR8fCIwIiwiKSIpLGllKCksX3QoMD09dC51c2VyR3JvdXBzQ291bnQ/MTE6LTEpLGllKDIpLF90KDAhPXQudXNlckdyb3Vwc0NvdW50PzEzOi0xKSxpZSgpLF90KHQuc2VydmVyVHlwZT09PXQuU2VydmVyVHlwZS5TYXM5''@;'; put 'put ''PzE0Oi0xKSxpZSgpLF90KHQuc2VydmVyVHlwZT09PXQuU2VydmVyVHlwZS5TYXM5PzE1Oi0xKSxpZSgpLF90KHQuc2VydmVyVHlwZT09PXQuU2VydmVyVHlwZS5TYXM5PzE2Oi0xKSxpZSgpLF90KHQuc2VydmVyVHlwZT09PXQuU2VydmVyVHlwZS5TYXM5PzE3Oi0xKX19bGV0IEEkZT0oKCk9''@;'; put 'put ''Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKHIsaSxvLGEsbCl7dGhpcy5oZWxwZXJTZXJ2aWNlPXIsdGhpcy5zYXNTZXJ2aWNlPWksdGhpcy5yb3V0ZT1vLHRoaXMubG9jYXRpb249YSx0aGlzLnJvdXRlcj1sLHRoaXMubG9hZGluZz0hMSx0aGlzLnVzZXJTZWFyY2g9IiIsdGhpcy5wYXJh''@;'; put 'put ''bVByZXNlbnQ9ITEsdGhpcy5wYXJhbU5hbWU9IiIsdGhpcy5zYXNqc0NvbmZpZz1uZXcgeHAuU0FTanNDb25maWcsdGhpcy5pc1ZpeWE9ITEsdGhpcy5zZXJ2ZXJUeXBlPSIiLHRoaXMuU2VydmVyVHlwZT1fMC5ZLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlw''@;'; put 'put ''ZSgpLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksIlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlJiYodGhpcy5pc1ZpeWE9ITApfW5nT25Jbml0KCl7aWYoVW4udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvdXNlcm5h''@;'; put 'put ''di91c2VycyIsdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbU5hbWU9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpKSxVbi51c2VybmF2LnVzZXJMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQpdGhpcy51''@;'; put 'put ''c2Vycz1Vbi51c2VybmF2LnVzZXJMaXN0LHRoaXMudXNlclNlYXJjaD1Vbi51c2VybmF2LnVzZXJTZWFyY2g7ZWxzZSBpZih2b2lkIDA9PT1Vbi51c2VybmF2LnVzZXJMaXN0Pyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9p''@;'; put 'put ''ZGVudGl0aWVzL3VzZXJzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4ocj0+ci50ZXh0KCkpLnRoZW4ocj0+e2xldCBvPUpTT04ucGFyc2UocikuaXRlbXMubWFwKGE9Pih7TkFNRTphLm5hbWUsVVJJOmEuaWQsUFJPVklERVI6YS5wcm92''@;'; put 'put ''aWRlcklkfSkpO3RoaXMubG9hZGluZz0hMSx0aGlzLnVzZXJzPW8sVW4udXNlcm5hdi51c2VyTGlzdD1vfSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnMiLG51bGwpLnRoZW4ocj0+e3RoaXMubG9hZGluZz0hMSx0aGlzLnVzZXJzPXIuYWRhcHRlclJlc3Bv''@;'; put 'put ''bnNlLnVzZXJzLFVuLnVzZXJuYXYudXNlckxpc3Q9ci5hZGFwdGVyUmVzcG9uc2UudXNlcnN9KSk6KHRoaXMudXNlcnM9VW4udXNlcm5hdi51c2VyTGlzdCx0aGlzLnVzZXJTZWFyY2g9VW4udXNlcm5hdi51c2VyU2VhcmNoKSx0aGlzLnBhcmFtUHJlc2VudClpZih0aGlzLmxvYWRpbmc9ITAs''@;'; put 'put ''dGhpcy5pc1ZpeWEpe2xldCByPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaTtmZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvdXNlcnMvIityKyIvbWVtYmVyc2hpcHM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNv''@;'; put 'put ''biJ9fSkudGhlbihpPT5pLnRleHQoKSkudGhlbihpPT57bGV0IG89SlNPTi5wYXJzZShpKTt0aGlzLnVzZXJEYXRhPW8sdGhpcy5sb2FkaW5nPSExO2xldCBhPW8uaXRlbXMubWFwKGw9Pih7R1JPVVBOQU1FOmwubmFtZSxVUkk6bC5pZH0pKTt0aGlzLnVzZXJHcm91cHM9YSx0aGlzLnVzZXJH''@;'; put 'put ''cm91cHNDb3VudD1hLmxlbmd0aCx0aGlzLnVzZXJzJiYodGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQobD0+bC5VUkk9PT1yKSl9KX1lbHNle2NvbnN0IHI9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpO3RoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJncm91''@;'; put 'put ''cHNieW1lbWJlciIse2l3YW50Olt7dXJpOnJ9XX0pLnRoZW4obz0+e3N3aXRjaCh0aGlzLmxvYWRpbmc9ITEsdGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIF8wLlkuU2FzOTp0aGlzLnVzZXJJbmZvPW8uYWRhcHRlclJlc3BvbnNlLmluZm9bMF0sdGhpcy51c2VyRW1haWxzPW8uYWRhcHRlclJlc3Bv''@;'; put 'put ''bnNlLmVtYWlscyx0aGlzLnVzZXJFbWFpbHNDb3VudD1vLmFkYXB0ZXJSZXNwb25zZS5lbWFpbHMubGVuZ3RoLHRoaXMudXNlclJvbGVzPW8uYWRhcHRlclJlc3BvbnNlLnJvbGVzLHRoaXMudXNlclJvbGVzQ291bnQ9by5hZGFwdGVyUmVzcG9uc2Uucm9sZXMubGVuZ3RoLHRoaXMudXNlckxv''@;'; put 'put ''Z2lucz1vLmFkYXB0ZXJSZXNwb25zZS5sb2dpbnMsdGhpcy51c2VyTG9naW5zQ291bnQ9by5hZGFwdGVyUmVzcG9uc2UubG9naW5zLmxlbmd0aDticmVhaztjYXNlIF8wLlkuU2FzanM6aWYodGhpcy51c2Vycyl0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZChhPT5hLlVSST09PXIpO2Vs''@;'; put 'put ''c2V7Y29uc3QgYT1vLmFkYXB0ZXJSZXNwb25zZS5ncm91cHNbMF07dGhpcy51c2VySW5mbz17VVJJOmEuSUQsTkFNRTphLk5BTUUsRElTUExBWU5BTUU6YS5OQU1FfX19dGhpcy51c2VyRGF0YT1vLmFkYXB0ZXJSZXNwb25zZSx0aGlzLnVzZXJHcm91cHM9by5hZGFwdGVyUmVzcG9uc2UuZ3Jv''@;'; put 'put ''dXBzLHRoaXMudXNlckdyb3Vwc0NvdW50PW8uYWRhcHRlclJlc3BvbnNlLmdyb3Vwcy5sZW5ndGh9KX19dXNlckxpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy51c2Vycyx0aGlzLnVzZXJTZWFyY2gsIk5BTUUiKSxVbi51c2VybmF2LnVzZXJT''@;'; put 'put ''ZWFyY2g9dGhpcy51c2VyU2VhcmNofXVzZXJPbkNsaWNrKHIpe3RoaXMubG9hZGluZz0hMDtsZXQgaT10aGlzLnJvdXRlci51cmw7dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5wYXJhbVByZXNlbnQ/aS5zbGljZSgwLGkubGFzdEluZGV4T2YoIi8iKSkrIi8iK2VuY29kZVVSSShy''@;'; put 'put ''LlVSSSk6aSsiLyIrZW5jb2RlVVJJKHIuVVJJKSksdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL3VzZXJzLyIrci5VUkkrIi9tZW1iZXJzaGlwcz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19''@;'; put 'put ''KS50aGVuKG89Pm8udGV4dCgpKS50aGVuKG89PntsZXQgYT1KU09OLnBhcnNlKG8pO3RoaXMudXNlckRhdGE9YSx0aGlzLmxvYWRpbmc9ITE7bGV0IGw9YS5pdGVtcy5tYXAodT0+KHtHUk9VUE5BTUU6dS5uYW1lLFVSSTp1LmlkfSkpO3RoaXMudXNlckdyb3Vwcz1sLHRoaXMudXNlckdyb3Vw''@;'; put 'put ''c0NvdW50PWwubGVuZ3RoLHRoaXMudXNlcnMmJih0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZCh1PT51LlVSST09PXIuVVJJKSl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VyZ3JvdXBzYnltZW1iZXIiLHtpd2FudDpbe3VyaTpyLlVSSX1dfSkudGhlbihhPT57''@;'; put 'put ''c3dpdGNoKHRoaXMubG9hZGluZz0hMSx0aGlzLnNlcnZlclR5cGUpe2Nhc2UgXzAuWS5TYXM5OnRoaXMudXNlckluZm89YS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXSx0aGlzLnVzZXJFbWFpbHM9YS5hZGFwdGVyUmVzcG9uc2UuZW1haWxzLHRoaXMudXNlckVtYWlsc0NvdW50PWEuYWRhcHRl''@;'; put 'put ''clJlc3BvbnNlLmVtYWlscy5sZW5ndGgsdGhpcy51c2VyUm9sZXM9YS5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsdGhpcy51c2VyUm9sZXNDb3VudD1hLmFkYXB0ZXJSZXNwb25zZS5yb2xlcy5sZW5ndGgsdGhpcy51c2VyTG9naW5zPWEuYWRhcHRlclJlc3BvbnNlLmxvZ2lucyx0aGlzLnVzZXJM''@;'; put 'put ''b2dpbnNDb3VudD1hLmFkYXB0ZXJSZXNwb25zZS5sb2dpbnMubGVuZ3RoO2JyZWFrO2Nhc2UgXzAuWS5TYXNqczppZih0aGlzLnVzZXJzKXRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKGw9PmwuVVJJPT09ci5VUkkpO2Vsc2V7Y29uc3QgbD1hLmFkYXB0ZXJSZXNwb25zZS5ncm91cHNb''@;'; put 'put ''MF07dGhpcy51c2VySW5mbz17VVJJOmwuSUQsTkFNRTpsLk5BTUUsRElTUExBWU5BTUU6bC5OQU1FfX19dGhpcy51c2VyRGF0YT1hLmFkYXB0ZXJSZXNwb25zZSx0aGlzLnVzZXJHcm91cHM9YS5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLHRoaXMudXNlckdyb3Vwc0NvdW50PWEuYWRhcHRlclJl''@;'; put 'put ''c3BvbnNlLmdyb3Vwcy5sZW5ndGh9KX1nZXRSb2xlVVJJKHIpe3JldHVybiByLnNwbGl0KCJPTVNPQko6SWRlbnRpdHlHcm91cCIpWzFdLnNsaWNlKDEpfXN0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpKHplKGZoKSx6ZShpYyksemUo''@;'; put 'put ''cDEpLHplKFYwKSx6ZSh2YykpfSx0aGlzLlx1MDI3NWNtcD1Qcih7dHlwZTplLHNlbGVjdG9yczpbWyJhcHAtdXNlciJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczo4LHZhcnM6Myxjb25zdHM6W1sic2VhcmNoTGliVHJlZUlucHV0Iiwi''@;'; put 'put ''Il0sWzEsInNpZGViYXItaGVpZ2h0Il0sWzEsInNlYXJjaC1ub2RlIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBi''@;'; put 'put ''eSBVc2VycyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImFjdGl2ZSJdLFszLCJj''@;'; put 'put ''bGljayJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsImxpc3QtcGFkZGluZyJdLFsic2hhcGUiLCJ1c2VyIl0sWzEsInNwaW5uZXIiXSxbMSwiY2xyLXJvdyJdLFsxLCJjbHItY29sLTgiXSxbMSwiY2FyZCIsInVzZXItZGF0YSJdLFsxLCJ0YWJsZS1jb250YWluZXIiXSxbMSwidGFibGUi''@;'; put 'put ''LCJ1c2VyLXRhYmxlIl0sWzEsInRhYmxlIiwidXNlci1pbmZvIl0sWzEsImxlZnQiXSxbMSwidXNlci1pbmZvLXRleHQiXSxbMSwid2lkdGgtNTAiXSxbMSwiIl0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwxLCIiLDMsInJvdXRlckxpbmsiXSxbMywicm91dGVyTGluayJdXSx0ZW1w''@;'; put 'put ''bGF0ZTpmdW5jdGlvbihpLG8pezEmaSYmKEooMCwiYXBwLXNpZGViYXIiLDEpKDEsImNsci10cmVlIiksdnQoMixtZ24sNiwzLCJjbHItdHJlZS1ub2RlIiwyKSxfbygzLF9nbiwxLDEsbnVsbCxudWxsLENvKSx0ZSgpKCksSig1LCJkaXYiLDMpLHZ0KDYseWduLDMsMCwiZGl2Iiw0KSx2dCg3''@;'; put 'put ''LHpnbiwxOSwxMSwiZGl2IiksdGUoKSksMiZpJiYoaWUoMiksX3Qoby51c2Vycz8yOi0xKSxpZSgpLHlvKG8udXNlcnMpLGllKDMpLF90KG8ubG9hZGluZz82Oi0xKSxpZSgpLF90KG8udXNlckRhdGEmJiFvLmxvYWRpbmc/NzotMSkpfSxkZXBlbmRlbmNpZXM6W1AyLEpFLGx1LG9jLFhsLFBw''@;'; put 'put ''LE8zLGN1LFBmLCQ2LEc2XSxlbmNhcHN1bGF0aW9uOjJ9KSl9cmV0dXJuIG4oKSxlfSkoKTtjb25zdCBXZ249bj0+WyJzZWdtZW50IixuXSxZZ249KG4sZSk9Pih7InNlZ21lbnQtbWFpbiI6ITAsZXhwYW5kYWJsZTpuLGV4cGFuZGVkOmV9KTtmdW5jdGlvbiBaZ24obixlKXsxJm4mJkl0KDAs''@;'; put 'put ''ImRpdiIsOSl9ZnVuY3Rpb24gR2duKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJzcGFuIiwxMCksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoKS4kaW1wbGljaXQ7cmV0dXJuIFhlKFRlKCkub25WYWx1ZUNsaWNrKGkpKX0pLFNlKDEpLHRlKCl9aWYoMiZu''@;'; put 'put ''KXtjb25zdCB0PVRlKCkuJGltcGxpY2l0O2llKCkscHIodC5kZXNjcmlwdGlvbil9fWZ1bmN0aW9uICRnbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwic2VjdGlvbiIsMTEpKDEsIm5neC1qc29uLXZpZXdlciIsMTIpLHd0KCJzZWdtZW50TGlua0NsaWNrZWQiLGZ1bmN0aW9uKGkp''@;'; put 'put ''e3JldHVybiBZZSh0KSxYZShUZSgyKS5vblNlZ21lbnRMaW5rQ2xpY2soaSkpfSksdGUoKSgpfWlmKDImbil7Y29uc3QgdD1UZSgpLiRpbXBsaWNpdCxyPVRlKCk7aWUoKSxydCgianNvbiIsdC52YWx1ZSkoImV4cGFuZGVkIixyLmV4cGFuZGVkKSgiZGVwdGgiLHIuZGVwdGgpKCJfY3VycmVu''@;'; put 'put ''dERlcHRoIixyLl9jdXJyZW50RGVwdGgrMSl9fWZ1bmN0aW9uIHFnbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwic2VjdGlvbiIsMikoMSwic2VjdGlvbiIsMyksd3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGk9WWUodCkuJGltcGxpY2l0O3JldHVybiBYZShUZSgpLnRvZ2ds''@;'; put 'put ''ZShpKSl9KSxZbigyLFpnbiwxLDAsImRpdiIsNCksSigzLCJzcGFuIiw1KSxTZSg0KSx0ZSgpLEooNSwic3BhbiIsNiksU2UoNiwiOiAiKSx0ZSgpLFluKDcsR2duLDIsMSwic3BhbiIsNyksdGUoKSxZbig4LCRnbiwyLDQsInNlY3Rpb24iLDgpLHRlKCl9aWYoMiZuKXtjb25zdCB0PWUuJGlt''@;'; put 'put ''cGxpY2l0LHI9VGUoKTtydCgibmdDbGFzcyIsdDQoNixXZ24sInNlZ21lbnQtdHlwZS0iK3QudHlwZSkpLGllKCkscnQoIm5nQ2xhc3MiLE41KDgsWWduLHIuaXNFeHBhbmRhYmxlKHQpLHQuZXhwYW5kZWQpKSxpZSgpLHJ0KCJuZ0lmIixyLmlzRXhwYW5kYWJsZSh0KSksaWUoMikscHIodC5r''@;'; put 'put ''ZXkpLGllKDMpLHJ0KCJuZ0lmIiwhdC5leHBhbmRlZHx8IXIuaXNFeHBhbmRhYmxlKHQpKSxpZSgpLHJ0KCJuZ0lmIix0LmV4cGFuZGVkJiZyLmlzRXhwYW5kYWJsZSh0KSl9fWxldCBLZ249KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuZXhwYW5kZWQ9ITAsdGhpcy5kZXB0aD0t''@;'; put 'put ''MSx0aGlzLl9jdXJyZW50RGVwdGg9MCx0aGlzLnNlZ21lbnRMaW5rQ2xpY2tlZD1uZXcgS3IsdGhpcy5zZWdtZW50cz1bXX1uZ09uQ2hhbmdlcygpe3RoaXMuc2VnbWVudHM9W10sdGhpcy5qc29uPXRoaXMuZGVjeWNsZSh0aGlzLmpzb24pLCJvYmplY3QiPT10eXBlb2YgdGhpcy5qc29uP09i''@;'; put 'put ''amVjdC5rZXlzKHRoaXMuanNvbikuZm9yRWFjaCh0PT57dGhpcy5zZWdtZW50cy5wdXNoKHRoaXMucGFyc2VLZXlWYWx1ZSh0LHRoaXMuanNvblt0XSkpfSk6dGhpcy5zZWdtZW50cy5wdXNoKHRoaXMucGFyc2VLZXlWYWx1ZShgKCR7dHlwZW9mIHRoaXMuanNvbn0pYCx0aGlzLmpzb24pKX1p''@;'; put 'put ''c0V4cGFuZGFibGUodCl7cmV0dXJuIm9iamVjdCI9PT10LnR5cGV8fCJhcnJheSI9PT10LnR5cGV9dG9nZ2xlKHQpe3RoaXMuaXNFeHBhbmRhYmxlKHQpJiYodC5leHBhbmRlZD0hdC5leHBhbmRlZCl9b25WYWx1ZUNsaWNrKHQpeyJsaW5rIj09PXQudHlwZSYmdGhpcy5zZWdtZW50TGlua0Ns''@;'; put 'put ''aWNrZWQuZW1pdCh0LnZhbHVlKX1vblNlZ21lbnRMaW5rQ2xpY2sodCl7dGhpcy5zZWdtZW50TGlua0NsaWNrZWQuZW1pdCh0KX1wYXJzZUtleVZhbHVlKHQscil7Y29uc3QgaT17a2V5OnQsdmFsdWU6cix0eXBlOnZvaWQgMCxkZXNjcmlwdGlvbjoiIityLGV4cGFuZGVkOnRoaXMuaXNFeHBh''@;'; put 'put ''bmRlZCgpfTtzd2l0Y2godHlwZW9mIGkudmFsdWUpe2Nhc2UibnVtYmVyIjppLnR5cGU9Im51bWJlciI7YnJlYWs7Y2FzZSJib29sZWFuIjppLnR5cGU9ImJvb2xlYW4iO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOmkudHlwZT0iZnVuY3Rpb24iO2JyZWFrO2Nhc2Uic3RyaW5nIjppZih0aGlzLmlz''@;'; put 'put ''TGluayhpLnZhbHVlKSl7aS50eXBlPSJsaW5rIjticmVha31pLnR5cGU9InN0cmluZyIsaS5kZXNjcmlwdGlvbj0nIicraS52YWx1ZSsnIic7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmkudHlwZT0idW5kZWZpbmVkIixpLmRlc2NyaXB0aW9uPSJ1bmRlZmluZWQiO2JyZWFrO2Nhc2Uib2JqZWN0''@;'; put 'put ''IjpudWxsPT09aS52YWx1ZT8oaS50eXBlPSJudWxsIixpLmRlc2NyaXB0aW9uPSJudWxsIik6QXJyYXkuaXNBcnJheShpLnZhbHVlKT8oaS50eXBlPSJhcnJheSIsaS5kZXNjcmlwdGlvbj0iQXJyYXlbIitpLnZhbHVlLmxlbmd0aCsiXSAiK0pTT04uc3RyaW5naWZ5KGkudmFsdWUpKTppLnZh''@;'; put 'put ''bHVlIGluc3RhbmNlb2YgRGF0ZT9pLnR5cGU9ImRhdGUiOihpLnR5cGU9Im9iamVjdCIsaS5kZXNjcmlwdGlvbj0iT2JqZWN0ICIrSlNPTi5zdHJpbmdpZnkoaS52YWx1ZSkpfXJldHVybiBpfWlzTGluayh0KXtyZXR1cm4iaHR0cHM6Ly8iPT09dC5zdWJzdHJpbmcoMCw4KXx8Imh0dHA6Ly8i''@;'; put 'put ''PT09dC5zdWJzdHJpbmcoMCw3KXx8Ii8iPT09dFswXX1pc0V4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQmJiEodGhpcy5kZXB0aD4tMSYmdGhpcy5fY3VycmVudERlcHRoPj10aGlzLmRlcHRoKX1kZWN5Y2xlKHQpe2NvbnN0IHI9bmV3IFdlYWtNYXA7cmV0dXJuIGZ1bmN0aW9uIGko''@;'; put 'put ''byxhKXtsZXQgbCx1O3JldHVybiJvYmplY3QiIT10eXBlb2Ygb3x8bnVsbD09PW98fG8gaW5zdGFuY2VvZiBCb29sZWFufHxvIGluc3RhbmNlb2YgRGF0ZXx8byBpbnN0YW5jZW9mIE51bWJlcnx8byBpbnN0YW5jZW9mIFJlZ0V4cHx8byBpbnN0YW5jZW9mIFN0cmluZz9vOihsPXIuZ2V0KG8p''@;'; put 'put ''LHZvaWQgMCE9PWw/eyRyZWY6bH06KHIuc2V0KG8sYSksQXJyYXkuaXNBcnJheShvKT8odT1bXSxvLmZvckVhY2goZnVuY3Rpb24oZyxFKXt1W0VdPWkoZyxhKyJbIitFKyJdIil9KSk6KHU9e30sT2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbihnKXt1W2ddPWkob1tnXSxhKyJbIitK''@;'; put 'put ''U09OLnN0cmluZ2lmeShnKSsiXSIpfSkpLHUpKX0odCwiJCIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVjbXA9UHIoe3R5cGU6bixzZWxlY3RvcnM6W1sibmd4LWpzb24tdmlld2VyIl1dLGlucHV0czp7anNvbjoianNvbiIsZXhw''@;'; put 'put ''YW5kZWQ6ImV4cGFuZGVkIixkZXB0aDoiZGVwdGgiLF9jdXJyZW50RGVwdGg6Il9jdXJyZW50RGVwdGgifSxvdXRwdXRzOntzZWdtZW50TGlua0NsaWNrZWQ6InNlZ21lbnRMaW5rQ2xpY2tlZCJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2l1XSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1sx''@;'; put 'put ''LCJuZ3gtanNvbi12aWV3ZXIiXSxbMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsIm5nQ2xhc3MiXSxbMywiY2xpY2siLCJuZ0NsYXNzIl0sWyJjbGFzcyIsInRvZ2dsZXIiLDQsIm5nSWYiXSxbMSwic2VnbWVudC1rZXkiXSxbMSwic2VnbWVudC1zZXBhcmF0b3IiXSxbImNs''@;'; put 'put ''YXNzIiwic2VnbWVudC12YWx1ZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiY2hpbGRyZW4iLDQsIm5nSWYiXSxbMSwidG9nZ2xlciJdLFsxLCJzZWdtZW50LXZhbHVlIiwzLCJjbGljayJdLFsxLCJjaGlsZHJlbiJdLFszLCJzZWdtZW50TGlua0NsaWNrZWQiLCJqc29uIiwiZXhw''@;'; put 'put ''YW5kZWQiLCJkZXB0aCIsIl9jdXJyZW50RGVwdGgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24odCxyKXsxJnQmJihKKDAsInNlY3Rpb24iLDApLFluKDEscWduLDksMTEsInNlY3Rpb24iLDEpLHRlKCkpLDImdCYmKGllKCkscnQoIm5nRm9yT2YiLHIuc2VnbWVudHMpKX0sZGVwZW5kZW5jaWVzOltG''@;'; put 'put ''aCxSZixZcyxuXSxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOy5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OnZhcigtLW5neC1qc29uLWZvbnQtZmFtaWx5LCBtb25vc3BhY2UpO2ZvbnQtc2l6ZTp2YXIoLS1uZ3gtanNvbi1mb250LXNpemUsIDFlbSk7''@;'; put 'put ''d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHg7bWFyZ2luOjFweCAxcHggMXB4IDEycHh9Lm5neC1q''@;'; put 'put ''c29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLXdyYXA6YnJlYWstd29yZH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO21hcmdpbi1sZWZ0Oi0xNHB4O21hcmdpbi10b3A6M3B4O2ZvbnQtc2l6ZTouOGVtO2xpbmUtaGVpZ2h0OjEuMmVt''@;'; put 'put ''O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtjb2xvcjp2YXIoLS1uZ3gtanNvbi10b2dnbGVyLCAjNzg3ODc4KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAg''@;'; put 'put ''LnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVdOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbnRlbnQ6IlxcMjViYSI7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjFzIGVhc2UtaW59Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LWtleVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24ta2V5LCAjNEUxODdDKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRl''@;'; put 'put ''bnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtc2VwYXJhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1zZXBhcmF0b3IsICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNl''@;'; put 'put ''Z21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdmFsdWUsICMwMDApfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''ICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNoaWxkcmVuW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDoxMnB4fS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1zdHJpbmdbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21l''@;'; put 'put ''bnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tc3RyaW5nLCAjRkY2QjZCKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbnVtYmVyW19uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLW51bWJlciwgIzAwOTY4OCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2Vn''@;'; put 'put ''bWVudC10eXBlLWJvb2xlYW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tYm9vbGVhbiwgI0I5MzhBNCl9Lm5neC1qc29uLXZpZXdlcltf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWRhdGVbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tZGF0ZSwgIzA1NjY4RCl9''@;'; put 'put ''Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWFycmF5W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1q''@;'; put 'put ''c29uLWFycmF5LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtb2JqZWN0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''e2NvbG9yOnZhcigtLW5neC1qc29uLW9iamVjdCwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWZ1bmN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFs''@;'; put 'put ''dWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWZ1bmN0aW9uLCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbGlua1tfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1saW5rLCAjOUI1OUI2KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbnVsbFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1t''@;'; put 'put ''YWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1udWxsLCAjZmZmKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtdW5kZWZpbmVkW19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXVuZGVmaW5lZCwgI2ZmZil9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10''@;'; put 'put ''eXBlLW51bGxbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1uZ3gtanNvbi1udWxsLWJnLCByZWQpfS5uZ3gtanNvbi12aWV3ZXJbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS11bmRlZmluZWRbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1rZXlbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXVuZGVmaW5lZC1rZXks''@;'; put 'put ''ICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS11bmRlZmluZWRbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1uZ3gtanNvbi11bmRlZmluZWQta2V5LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbGlua1tfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdt''@;'; put 'put ''ZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVyfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1vYmplY3RbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV0sIC5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1hcnJheVtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9Lm5neC1qc29uLXZpZXdl''@;'; put 'put ''cltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kZWRbX25nY29udGVudC0lQ09NUCVdID4gLnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVdOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZGFibGVbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdLCAubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b2dnbGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcn0nXX0pLG59KSgpLFhnbj0oKCk9PntjbGFzcyBue31yZXR1''@;'; put 'put ''cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltxb119KSxufSkoKSxRZ249KCgpPT57dmFyIG47Y2xhc3MgZXt0cmFuc2Zvcm0ocil7aWYoIXIuaW5jbHVkZXMoIi8iKSly''@;'; put 'put ''ZXR1cm4gcjtsZXQgaT0iIjtjb25zdCBvPXIuc3BsaXQoIi8iKTtmb3IobGV0IGE9MDthPG8ubGVuZ3RoO2ErKylpZigiIiE9PW9bYV0pe2NvbnN0IGw9b1thXTtpKz0iLyIrbCxvW2FdPWA8YSBocmVmPSR7aX0+JHtsfTwvYT5gfXJldHVybiBvLmpvaW4oIi8iKX1zdGF0aWMjZT1uPSgpPT4o''@;'; put 'put ''dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKX0sdGhpcy5cdTAyNzVwaXBlPXVoKHtuYW1lOiJsaW5raW56ZSIsdHlwZTplLHB1cmU6ITAsc3RhbmRhbG9uZTohMX0pKX1yZXR1cm4gbigpLGV9KSgpLEpnbj0oKCk9Pnt2YXIgbjtjbGFzcyBle3RyYW5zZm9ybShy''@;'; put 'put ''KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkocixudWxsLDIpfXN0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpfSx0aGlzLlx1MDI3NXBpcGU9dWgoe25hbWU6InByZXR0eWpzb24iLHR5cGU6ZSxwdXJlOiEwLHN0YW5kYWxvbmU6ITF9KSl9''@;'; put 'put ''cmV0dXJuIG4oKSxlfSkoKTtmdW5jdGlvbiBlbW4obixlKXtpZigxJm4mJihKKDAsIm9wdGlvbiIsMjApLFNlKDEpLHRlKCkpLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdDtydCgidmFsdWUiLHpqKHQudmFsdWUpKSxpZSgpLFNyKCIgIix0LmtleSwiICIpfX1mdW5jdGlvbiB0bW4obixlKXtp''@;'; put 'put ''ZigxJm4mJihKKDAsIm9wdGdyb3VwIiw0KSxfbygxLGVtbiwyLDMsIm9wdGlvbiIsMjAsQ28pLEFjKDMsImtleXZhbHVlIiksdGUoKSksMiZuKXtjb25zdCB0PWUuJGltcGxpY2l0LHI9VGUoKTtydCgibGFiZWwiLHQua2V5KSxpZSgpLHlvKFRkKDMsMSxyLmNvbGxlY3Rpb25zW3Qua2V5XSkp''@;'; put 'put ''fX1mdW5jdGlvbiBubW4obixlKXsxJm4mJihKKDAsInAiLDUpLFNlKDEsIlNlbGVjdCBjb2xsZWN0aW9uIHRvIHN0YXJ0IiksdGUoKSl9ZnVuY3Rpb24gcm1uKG4sZSl7MSZuJiZJdCgwLCJjbHItc3Bpbm5lciIsNyl9ZnVuY3Rpb24gaW1uKG4sZSl7MSZuJiZJdCgwLCJjbHItaWNvbiIsMjMp''@;'; put 'put ''fWZ1bmN0aW9uIG9tbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLWljb24iLDI1KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3QgaT1UZSgyKTtyZXR1cm4gaS5saW5rc1NlYXJjaD0iIixYZShpLmxpbmtzTGlzdE9uRmlsdGVyKCkpfSksdGUoKX19ZnVuY3Rp''@;'; put 'put ''b24gYW1uKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItdHJlZS1ub2RlIiw4KSgxLCJkaXYiLDIxKSgyLCJpbnB1dCIsMjIsMCksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoKTtyZXR1cm4gZmkoby5saW5rc1NlYXJjaCxpKXx8KG8u''@;'; put 'put ''bGlua3NTZWFyY2g9aSksWGUoaSl9KSx3dCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCkubGlua3NMaXN0T25GaWx0ZXIoKSl9KSx0ZSgpLHZ0KDQsaW1uLDEsMCwiY2xyLWljb24iLDIzKSx2dCg1LG9tbiwxLDAsImNsci1pY29uIiwyNCksdGUoKSgpfWlmKDImbil7''@;'; put 'put ''Y29uc3QgdD1vbygzKSxyPVRlKCk7aWUoMiksZGkoIm5nTW9kZWwiLHIubGlua3NTZWFyY2gpLGllKDIpLF90KHQudmFsdWUubGVuZ3RoPDE/NDotMSksaWUoKSxfdCh0LnZhbHVlLmxlbmd0aD4wPzU6LTEpfX1mdW5jdGlvbiBzbW4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImNs''@;'; put 'put ''ci10cmVlLW5vZGUiLDI3KSx3dCgiY2xpY2siLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoKS4kaW1wbGljaXQsYT1UZSgpO3JldHVybiBYZShhLnRyZWVOb2RlQ2xpY2tlZChpLG8sYS5lbmRwb2ludExpbmtzKSl9KSxoaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGkpe1ll''@;'; put 'put ''KHQpO2NvbnN0IG89VGUoKS4kaW1wbGljaXQ7cmV0dXJuIGZpKG8uZXhwYW5kZWQsaSl8fChvLmV4cGFuZGVkPWkpLFhlKGkpfSksSigxLCJwIiwyOCksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoKS4kaW1wbGljaXQ7cmV0dXJuIFhlKFRlKCkubGlua09uQ2xpY2so''@;'; put 'put ''aSkpfSksSXQoMiwiY2xyLWljb24iLDI5KSxTZSgzKSx0ZSgpKCl9aWYoMiZuKXtjb25zdCB0PVRlKCkuJGltcGxpY2l0O2RpKCJjbHJFeHBhbmRlZCIsdC5leHBhbmRlZCkscnQoImNsckxvYWRpbmciLCEhdC5sb2FkaW5nVGFibGVzJiYhdC50YWJsZXMpLGllKDMpLE5oKCIgIix0Lm1ldGhv''@;'; put 'put ''ZCwiICIsdC5yZWwsIiAiKX19ZnVuY3Rpb24gbG1uKG4sZSl7MSZuJiZ2dCgwLHNtbiw0LDQsImNsci10cmVlLW5vZGUiLDI2KSwyJm4mJl90KGUuJGltcGxpY2l0LmhpZGRlbj8tMTowKX1mdW5jdGlvbiBjbW4obixlKXsxJm4mJkl0KDAsImNsci1pY29uIiwyMyl9ZnVuY3Rpb24gdW1uKG4s''@;'; put 'put ''ZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItaWNvbiIsMjUpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtZZSh0KTtjb25zdCBpPVRlKDIpO3JldHVybiBpLml0ZW1zU2VhcmNoPSIiLFhlKGkuaXRlbXNMaXN0T25GaWx0ZXIoKSl9KSx0ZSgpfX1mdW5jdGlvbiBkbW4obixlKXtpZigx''@;'; put 'put ''Jm4pe2NvbnN0IHQ9d24oKTtKKDAsImNsci10cmVlLW5vZGUiLDgpKDEsImRpdiIsMjEpKDIsImlucHV0IiwzMCwxKSxoaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgpO3JldHVybiBmaShvLml0ZW1zU2VhcmNoLGkpfHwoby5pdGVtc1NlYXJjaD1pKSxY''@;'; put 'put ''ZShpKX0pLHd0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoKS5pdGVtc0xpc3RPbkZpbHRlcigpKX0pLHRlKCksdnQoNCxjbW4sMSwwLCJjbHItaWNvbiIsMjMpLHZ0KDUsdW1uLDEsMCwiY2xyLWljb24iLDI0KSx0ZSgpKCl9aWYoMiZuKXtjb25zdCB0PW9vKDMpLHI9''@;'; put 'put ''VGUoKTtpZSgyKSxkaSgibmdNb2RlbCIsci5pdGVtc1NlYXJjaCksaWUoMiksX3QodC52YWx1ZS5sZW5ndGg8MT80Oi0xKSxpZSgpLF90KHQudmFsdWUubGVuZ3RoPjA/NTotMSl9fWZ1bmN0aW9uIGhtbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLXRyZWUtbm9kZSIsMjcp''@;'; put 'put ''LHd0KCJjbGljayIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgpLiRpbXBsaWNpdCxhPVRlKCk7cmV0dXJuIFhlKGEudHJlZU5vZGVDbGlja2VkKGksbyxhLmVuZHBvaW50SXRlbXMpKX0pLGhpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgp''@;'; put 'put ''LiRpbXBsaWNpdDtyZXR1cm4gZmkoby5leHBhbmRlZCxpKXx8KG8uZXhwYW5kZWQ9aSksWGUoaSl9KSxKKDEsInAiLDI4KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3QgaT1UZSgpLiRpbXBsaWNpdDtyZXR1cm4gWGUoVGUoKS5pdGVtT25DbGljayhpKSl9KSxJdCgyLCJjbHIt''@;'; put 'put ''aWNvbiIsMjkpLFNlKDMpLHRlKCkoKX1pZigyJm4pe2NvbnN0IHQ9VGUoKS4kaW1wbGljaXQ7ZGkoImNsckV4cGFuZGVkIix0LmV4cGFuZGVkKSxydCgiY2xyTG9hZGluZyIsISF0LmxvYWRpbmdUYWJsZXMmJiF0LnRhYmxlcyksaWUoMyksU3IoIiAiLHQubmFtZXx8dC5pZCwiICIpfX1mdW5j''@;'; put 'put ''dGlvbiBmbW4obixlKXsxJm4mJnZ0KDAsaG1uLDQsMywiY2xyLXRyZWUtbm9kZSIsMjYpLDImbiYmX3QoZS4kaW1wbGljaXQuaGlkZGVuPy0xOjApfWZ1bmN0aW9uIHBtbihuLGUpezEmbiYmSXQoMCwiY2xyLXNwaW5uZXIiLDE4KX1mdW5jdGlvbiBnbW4obixlKXtpZigxJm4pe2NvbnN0IHQ9''@;'; put 'put ''d24oKTtTZSgwLCJcbiAgICAgICAgICAgICIpLEooMSwibmd4LWpzb24tdmlld2VyIiwzOSksd3QoInNlZ21lbnRMaW5rQ2xpY2tlZCIsZnVuY3Rpb24oaSl7cmV0dXJuIFllKHQpLFhlKFRlKDMpLm9uSnNvbkxpbmtDbGljayhpKSl9KSx0ZSgpLFNlKDIsIlxuICAgICAgICAgICIpfWlmKDIm''@;'; put 'put ''bil7Y29uc3QgdD1UZSgzKTtpZSgpLHJ0KCJqc29uIix0LmVuZHBvaW50SnNvbikoImV4cGFuZGVkIiwhMSl9fWZ1bmN0aW9uIG1tbihuLGUpezEmbiYmKFNlKDApLEFjKDEsInByZXR0eWpzb24iKSksMiZuJiZTcigiXG4gICAgICAgICAgICAiLFRkKDEsMSxUZSgzKS5lbmRwb2ludEpzb24p''@;'; put 'put ''LCJcbiAgICAgICAgICAiKX1mdW5jdGlvbiB2bW4obixlKXtpZigxJm4mJihTZSgwLCJcbiAgICAgICAgICAiKSx2dCgxLGdtbiwzLDIpLHZ0KDIsbW1uLDIsMykpLDImbil7Y29uc3QgdD1UZSgyKTtpZSgpLF90KHQucmF3SnNvbj8tMToxKSxpZSgpLF90KHQucmF3SnNvbj8yOi0xKX19ZnVu''@;'; put 'put ''Y3Rpb24gX21uKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJkaXYiLDMxKSgxLCJzcGFuIiwzMiksU2UoMiwiIEdFVCAiKSxKKDMsInAiLDMzKSxBYyg0LCJsaW5raW56ZSIpLHd0KCJjbGljayIsZnVuY3Rpb24oaSl7cmV0dXJuIFllKHQpLFhlKFRlKCkub25CcmVhZGN1bXNDbGlj''@;'; put 'put ''ayhpKSl9KSx0ZSgpLEooNSwiYnV0dG9uIiwxNSksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLmNvcHlCcmVhZGNydW1zKCkpfSksSXQoNiwiY2xyLWljb24iLDE2KSx0ZSgpKCksSig3LCJkaXYiLDM0KSg4LCJjbHItaW5wdXQtY29udGFpbmVyIiwxMykoOSwi''@;'; put 'put ''bGFiZWwiKSxTZSgxMCwiU3RhcnQiKSx0ZSgpLEooMTEsImlucHV0IiwzNSksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoKTtyZXR1cm4gZmkoby5lbmRwb2ludC5zdGFydCxpKXx8KG8uZW5kcG9pbnQuc3RhcnQ9aSksWGUoaSl9KSx0ZSgpKCksSigx''@;'; put 'put ''MiwiY2xyLWlucHV0LWNvbnRhaW5lciIsMTMpKDEzLCJsYWJlbCIpLFNlKDE0LCJMaW1pdCIpLHRlKCksSigxNSwiaW5wdXQiLDM1KSxoaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qgbz1UZSgpO3JldHVybiBmaShvLmVuZHBvaW50LmxpbWl0LGkpfHwoby5lbmRw''@;'; put 'put ''b2ludC5saW1pdD1pKSxYZShpKX0pLHRlKCkoKSxKKDE2LCJidXR0b24iLDM2KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCkuYXBwbHlRdWVyeVBhcmFtcygpKX0pLEl0KDE3LCJjbHItaWNvbiIsMzcpLHRlKCkoKSgpLEooMTgsInByZSIsMzgpLFNlKDE5LCIg''@;'; put 'put ''ICAgICAgICIpLHZ0KDIwLHZtbiwzLDIpLHRlKCl9aWYoMiZuKXtjb25zdCB0PVRlKCk7aWUoMykscnQoImlubmVySFRNTCIsVGQoNCw3LHQuZW5kcG9pbnQudXJsKSx4NSksaWUoOCksZGkoIm5nTW9kZWwiLHQuZW5kcG9pbnQuc3RhcnQpLHJ0KCJkaXNhYmxlZCIsdm9pZCAwPT09dC5lbmRw''@;'; put 'put ''b2ludC5zdGFydCksaWUoNCksZGkoIm5nTW9kZWwiLHQuZW5kcG9pbnQubGltaXQpLHJ0KCJkaXNhYmxlZCIsdm9pZCAwPT09dC5lbmRwb2ludC5saW1pdCksaWUoKSxydCgiZGlzYWJsZWQiLHZvaWQgMD09PXQuZW5kcG9pbnQubGltaXQmJnZvaWQgMD09PXQuZW5kcG9pbnQuc3RhcnQpLGll''@;'; put 'put ''KDQpLF90KHQuZW5kcG9pbnRKc29uPzIwOi0xKX19bGV0IHltbj0oKCk9Pnt2YXIgbjtjbGFzcyBle2NvbnN0cnVjdG9yKHIsaSxvLGEpe3RoaXMuaGVscGVyU2VydmljZT1yLHRoaXMuc2FzVml5YVNlcnZpY2U9aSx0aGlzLnNhc1NlcnZpY2U9byx0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMu''@;'; put 'put ''Y29sbGVjdGlvbnM9e30sdGhpcy5jb2xsZWN0aW9uPSIiLHRoaXMuZW5kcG9pbnRMaW5rcz1bXSx0aGlzLmVuZHBvaW50SXRlbXM9W10sdGhpcy5lbmRwb2ludD17dXJsOiIiLHN0YXJ0Oi0xLGxpbWl0Oi0xfSx0aGlzLmVuZHBvaW50TG9hZGluZz0hMSx0aGlzLmNvbGxlY3Rpb25Mb2FkaW5n''@;'; put 'put ''PSExLHRoaXMucmF3SnNvbj0hMSx0aGlzLmxpbmtzU2VhcmNoPSIiLHRoaXMuaXRlbXNTZWFyY2g9IiIsdGhpcy5zYXNqc0NvbmZpZz1uZXcgeHAuU0FTanNDb25maWd9bmdPbkluaXQoKXt0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuY29s''@;'; put 'put ''bGVjdGlvbnM9dGhpcy5zYXNWaXlhU2VydmljZS5nZXRBbGxDb2xsZWN0aW9ucygpfWxpbmtzTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmVuZHBvaW50TGlua3MsdGhpcy5saW5rc1NlYXJjaCwicmVsIiksVW4udml5YUFwaS5saW5rc3NT''@;'; put 'put ''ZWFyY2g9dGhpcy5saW5rc1NlYXJjaH1pdGVtc0xpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5lbmRwb2ludEl0ZW1zLHRoaXMuaXRlbXNTZWFyY2gsIm5hbWUiKSxVbi52aXlhQXBpLml0ZW1zU2VhcmNoPXRoaXMuaXRlbXNTZWFyY2h9bGlu''@;'; put 'put ''a09uQ2xpY2socil7dGhpcy5sb2FkVXJsKHIuaHJlZil9aXRlbU9uQ2xpY2socil7dGhpcy5sb2FkVXJsKHIubGlua3NbMF0uaHJlZil9dHJlZU5vZGVDbGlja2VkKHIsaSxvKXsiQ29sbGFwc2UiPT09ci50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMobyxpKX1jb2xsYXBz''@;'; put 'put ''ZVRyZWVJdGVtcyhyLGkpe3IuZm9yRWFjaChvPT57SlNPTi5zdHJpbmdpZnkobykhPT1KU09OLnN0cmluZ2lmeShpKSYmKG8uZXhwYW5kZWQ9ITEpfSl9dXBkYXRlU2VsZWN0ZWRDb2xsZWN0aW9uKCl7VW4udml5YUFwaS5zZWxlY3RlZENvbGxlY3Rpb249dGhpcy5jb2xsZWN0aW9uLHRoaXMu''@;'; put 'put ''ZW5kcG9pbnQudXJsPXRoaXMuY29sbGVjdGlvbix0aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSEwLHRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0QnlDb2xsZWN0aW9uKHRoaXMuY29sbGVjdGlvbikuc3Vic2NyaWJlKHI9Pnt0aGlzLmVuZHBvaW50TGlua3M9ci5saW5rcyx0aGlzLmVuZHBvaW50SXRl''@;'; put 'put ''bXM9ci5pdGVtcz9yLml0ZW1zOltdLHRoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITEsdGhpcy5lbmRwb2ludEpzb249cix0aGlzLmVuZHBvaW50LnN0YXJ0PXIuc3RhcnQsdGhpcy5lbmRwb2ludC5saW1pdD1yLmxpbWl0fSxyPT57dGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMTtsZXQgaT0iRXJy''@;'; put 'put ''b3Igb2NjdXJyZWQgd2hpbGUgc2VuZGluZyByZXF1ZXN0IjtyLm1lc3NhZ2UmJihpPXIubWVzc2FnZSksci5lcnJvciYmKHIuZXJyb3IubWVzc2FnZSYmKGk9ci5lcnJvci5tZXNzYWdlKSxyLmVycm9yLnJlbWVkaWF0aW9uJiYoaT1gJHtpfVxuJHtyLmVycm9yLnJlbWVkaWF0aW9ufWApKSx0''@;'; put 'put ''aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLGksbnVsbCwiSFRUUCBFcnJvciIpfSl9b25Kc29uTGlua0NsaWNrKHIpe3RoaXMubG9hZFVybChyKX1vbkpzb25DbGljayhyKXtpZihyLnByZXZlbnREZWZhdWx0KCksIkEiPT09ci5zcmNFbGVtZW50LnRhZ05hbWUpe2NvbnN0''@;'; put 'put ''IGk9ci5zcmNFbGVtZW50LmhyZWYuc3BsaXQoci5zcmNFbGVtZW50Lmhvc3QpWzFdO3RoaXMubG9hZFVybChpKX19b25CcmVhZGN1bXNDbGljayhyKXtpZihyLnByZXZlbnREZWZhdWx0KCksIXIuc3JjRWxlbWVudC5ocmVmKXJldHVybjtjb25zdCBpPXIuc3JjRWxlbWVudC5ocmVmLnNwbGl0''@;'; put 'put ''KHIuc3JjRWxlbWVudC5ob3N0KVsxXTt0aGlzLmxvYWRVcmwoaSl9Y29weUpzb24oKXt0aGlzLmVuZHBvaW50SnNvbiYmbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoSlNPTi5zdHJpbmdpZnkodGhpcy5lbmRwb2ludEpzb24sbnVsbCwyKSl9Y29weUJyZWFkY3J1bXMoKXt0aGlzLmVu''@;'; put 'put ''ZHBvaW50JiZ0aGlzLmVuZHBvaW50LnVybCYmbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5lbmRwb2ludC51cmwpfWFwcGx5UXVlcnlQYXJhbXMoKXtjb25zdCByPXRoaXMuZW5kcG9pbnQuc3RhcnQsaT10aGlzLmVuZHBvaW50LmxpbWl0LG89YD8ke3ZvaWQgMCE9PXI/InN0''@;'; put 'put ''YXJ0PSIrcjoiIn0ke3ZvaWQgMCE9PWk/IiZsaW1pdD0iK2k6IiJ9YCxhPWAke3RoaXMuZW5kcG9pbnQudXJsLnNwbGl0KCI/IilbMF19JHtvfWA7dGhpcy5sb2FkVXJsKGEpfWxvYWRVcmwocil7dGhpcy5lbmRwb2ludExvYWRpbmc9ITAsdGhpcy5zYXNWaXlhU2VydmljZS5nZXRCeVVybChy''@;'; put 'put ''KS5zdWJzY3JpYmUoaT0+e3RoaXMuZW5kcG9pbnRMaW5rcz1pLmxpbmtzLHRoaXMuZW5kcG9pbnRJdGVtcz1pLml0ZW1zP2kuaXRlbXM6W10sdGhpcy5lbmRwb2ludEpzb249aSx0aGlzLmVuZHBvaW50TG9hZGluZz0hMSx0aGlzLmVuZHBvaW50LnVybD1yLHRoaXMuZW5kcG9pbnQuc3RhcnQ9''@;'; put 'put ''aS5zdGFydCx0aGlzLmVuZHBvaW50LmxpbWl0PWkubGltaXR9LGk9Pnt0aGlzLmVuZHBvaW50TG9hZGluZz0hMTtsZXQgbz0iRXJyb3Igb2NjdXJyZWQgd2hpbGUgc2VuZGluZyByZXF1ZXN0IjtpLm1lc3NhZ2UmJihvPWkubWVzc2FnZSksaS5lcnJvciYmKGkuZXJyb3IubWVzc2FnZSYmKG89''@;'; put 'put ''aS5lcnJvci5tZXNzYWdlKSxpLmVycm9yLnJlbWVkaWF0aW9uJiYobz1gJHtvfVxuJHtpLmVycm9yLnJlbWVkaWF0aW9ufWApKSx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLG8sbnVsbCwiSFRUUCBFcnJvciIpfSl9c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSkoemUoZmgpLHplKENpZSksemUoaWMpLHplKHVkKSl9LHRoaXMuXHUwMjc1Y21wPVByKHt0eXBlOmUsc2VsZWN0b3JzOltbImFwcC12aXlhLWFwaS1leHBsb3JlciJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRh''@;'; put 'put ''bG9uZTohMSxkZWNsczozNix2YXJzOjEwLGNvbnN0czpbWyJzZWFyY2hMaW5rc1RyZWVJbnB1dCIsIiJdLFsic2VhcmNoSXRlbXNUcmVlSW5wdXQiLCIiXSxbMSwiYXBpLWNvbGxlY3Rpb24tZHJvcGRvd24iXSxbImNsclNlbGVjdCIsIiIsImlkIiwicmVwb3NpdG9yeSIsMywibmdNb2RlbENo''@;'; put 'put ''YW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiXSxbMywibGFiZWwiXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJj''@;'; put 'put ''YXJkIiwiaC0xMDAiLCJwLTEwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsInctMTAwIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwic2l0aW9uLXJlbGF0aXZlIl0sWzEsImpzb24tdG9nZ2xlIiwiZC1mbGV4''@;'; put 'put ''IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJtLTAiXSxbInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIiwiYnRuLXNtIiwzLCJjbGljayJdLFsic2hhcGUi''@;'; put 'put ''LCJjb3B5Il0sWzEsInRleHQtY2VudGVyIiwibS0wIl0sWyJjbHJTbWFsbCIsIiJdLFsxLCJ3LTEwMCIsImxpZ2h0Il0sWzMsInZhbHVlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIGxp''@;'; put 'put ''bmtzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJM''@;'; put 'put ''b2FkaW5nIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJsb2NrIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIGl0ZW1z''@;'; put 'put ''IiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWdu''@;'; put 'put ''LWl0ZW1zLWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImVuZHBvaW50LWJyZWFkY3J1bXMiLDMsImNsaWNrIiwiaW5uZXJIVE1MIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJxdWVyeS1wYXJhbXMiXSxbImNscklucHV0IiwiIiwidHlwZSIsIm51bWJlciIsMywi''@;'; put 'put ''bmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLCJidG4tc20iLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwicGxheSJdLFsxLCJqc29uLWFyZWEiXSxbMSwiZC1ibG9jayIsMywic2VnbWVudExpbmtD''@;'; put 'put ''bGlja2VkIiwianNvbiIsImV4cGFuZGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGksbyl7MSZpJiYoSigwLCJhcHAtc2lkZWJhciIpKDEsImRpdiIsMikoMiwiY2xyLXNlbGVjdC1jb250YWluZXIiKSgzLCJsYWJlbCIpLFNlKDQsIkFQSSBDb2xsZWN0aW9uIiksdGUoKSxKKDUsInNlbGVjdCIs''@;'; put 'put ''MyksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGwpe3JldHVybiBmaShvLmNvbGxlY3Rpb24sbCl8fChvLmNvbGxlY3Rpb249bCksbH0pLHd0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIG8udXBkYXRlU2VsZWN0ZWRDb2xsZWN0aW9uKCl9KSxfbyg2LHRtbiw0LDMsIm9wdGdyb3Vw''@;'; put 'put ''Iiw0LENvKSxBYyg4LCJrZXl2YWx1ZSIpLHRlKCkoKSgpLHZ0KDksbm1uLDIsMCwicCIsNSksSigxMCwiZGl2Iiw2KSx2dCgxMSxybW4sMSwwLCJjbHItc3Bpbm5lciIsNyksdGUoKSxKKDEyLCJjbHItdHJlZSIpLHZ0KDEzLGFtbiw2LDMsImNsci10cmVlLW5vZGUiLDgpLF9vKDE0LGxtbiwx''@;'; put 'put ''LDEsbnVsbCxudWxsLENvKSx0ZSgpLEooMTYsImNsci10cmVlIiksdnQoMTcsZG1uLDYsMywiY2xyLXRyZWUtbm9kZSIsOCksX28oMTgsZm1uLDEsMSxudWxsLG51bGwsQ28pLHRlKCkoKSxKKDIwLCJkaXYiLDkpKDIxLCJkaXYiLDEwKSgyMiwiZGl2IiwxMSkoMjMsImRpdiIsMTIpKDI0LCJj''@;'; put 'put ''bHItdG9nZ2xlLWNvbnRhaW5lciIsMTMpKDI1LCJjbHItdG9nZ2xlLXdyYXBwZXIiKSgyNiwiaW5wdXQiLDE0KSxoaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24obCl7cmV0dXJuIGZpKG8ucmF3SnNvbixsKXx8KG8ucmF3SnNvbj1sKSxsfSksdGUoKSxKKDI3LCJsYWJlbCIpLFNlKDI4LCJS''@;'; put 'put ''QVcgSnNvbiIpLHRlKCkoKSgpLEooMjksImJ1dHRvbiIsMTUpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gby5jb3B5SnNvbigpfSksSXQoMzAsImNsci1pY29uIiwxNiksdGUoKSgpLEooMzEsImg0IiwxNyksU2UoMzIsIiBBUEkgRXhwbG9yZXIgIiksdnQoMzMscG1uLDEsMCwiY2xy''@;'; put 'put ''LXNwaW5uZXIiLDE4KSx0ZSgpKCksSXQoMzQsImhyIiwxOSksdnQoMzUsX21uLDIxLDkpLHRlKCkoKSksMiZpJiYoaWUoNSksZGkoIm5nTW9kZWwiLG8uY29sbGVjdGlvbiksaWUoKSx5byhUZCg4LDgsby5jb2xsZWN0aW9ucykpLGllKDMpLF90KG8uZW5kcG9pbnRMaW5rcy5sZW5ndGg8MSYm''@;'; put 'put ''IW8uY29sbGVjdGlvbkxvYWRpbmc/OTotMSksaWUoMiksX3Qoby5jb2xsZWN0aW9uTG9hZGluZz8xMTotMSksaWUoMiksX3Qoby5lbmRwb2ludExpbmtzLmxlbmd0aD4wPzEzOi0xKSxpZSgpLHlvKG8uZW5kcG9pbnRMaW5rcyksaWUoMyksX3Qoby5lbmRwb2ludEl0ZW1zLmxlbmd0aD4wPzE3''@;'; put 'put ''Oi0xKSxpZSgpLHlvKG8uZW5kcG9pbnRJdGVtcyksaWUoOCksZGkoIm5nTW9kZWwiLG8ucmF3SnNvbiksaWUoNyksX3Qoby5lbmRwb2ludExvYWRpbmc/MzM6LTEpLGllKDIpLF90KG8uY29sbGVjdGlvbi5sZW5ndGg+MD8zNTotMSkpfSxkZXBlbmRlbmNpZXM6W1hnLFFnLGx1LEV6LEgyLEtn''@;'; put 'put ''LG9jLFhsLFBwLE8zLGN1LCQwLGVsLFUyLEV2LEZmLFBmLFh6LHFiLENNLHoyLCQ2LEc2LEtnbixFVSxRZ24sSmduXSxlbmNhcHN1bGF0aW9uOjJ9KSl9cmV0dXJuIG4oKSxlfSkoKTtjb25zdCBibW49bmV3IEVyKCJXaW5kb3dUb2tlbiIsdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5kb2N1''@;'; put 'put ''bWVudD97cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+d2luZG93fTp7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+e319KTtsZXQgd21uPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IodCxyLGkpe3RoaXMubmdab25lPXQsdGhpcy5kb2N1bWVudD1yLHRoaXMud2luZG93PWks''@;'; put 'put ''dGhpcy5jb3B5U3ViamVjdD1uZXcgTXIsdGhpcy5jb3B5UmVzcG9uc2UkPXRoaXMuY29weVN1YmplY3QuYXNPYnNlcnZhYmxlKCksdGhpcy5jb25maWc9e319Y29uZmlndXJlKHQpe3RoaXMuY29uZmlnPXR9Y29weSh0KXtpZighdGhpcy5pc1N1cHBvcnRlZHx8IXQpcmV0dXJuIHRoaXMucHVz''@;'; put 'put ''aENvcHlSZXNwb25zZSh7aXNTdWNjZXNzOiExLGNvbnRlbnQ6dH0pO2NvbnN0IHI9dGhpcy5jb3B5RnJvbUNvbnRlbnQodCk7cmV0dXJuIHRoaXMucHVzaENvcHlSZXNwb25zZShyP3tjb250ZW50OnQsaXNTdWNjZXNzOnJ9Ontpc1N1Y2Nlc3M6ITEsY29udGVudDp0fSl9Z2V0IGlzU3VwcG9y''@;'; put 'put ''dGVkKCl7cmV0dXJuISF0aGlzLmRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZCYmISF0aGlzLmRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZCgiY29weSIpJiYhIXRoaXMud2luZG93fWlzVGFyZ2V0VmFsaWQodCl7aWYodCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnR8fHQg''@;'; put 'put ''aW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KXtpZih0Lmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKSl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgInRhcmdldCIgYXR0cmlidXRlLiBQbGVhc2UgdXNlICJyZWFkb25seSIgaW5zdGVhZCBvZiAiZGlzYWJsZWQiIGF0dHJpYnV0ZScpO3Jl''@;'; put 'put ''dHVybiEwfXRocm93IG5ldyBFcnJvcigiVGFyZ2V0IHNob3VsZCBiZSBpbnB1dCBvciB0ZXh0YXJlYSIpfWNvcHlGcm9tSW5wdXRFbGVtZW50KHQscj0hMCl7dHJ5e3RoaXMuc2VsZWN0VGFyZ2V0KHQpO2NvbnN0IGk9dGhpcy5jb3B5VGV4dCgpO3JldHVybiB0aGlzLmNsZWFyU2VsZWN0aW9u''@;'; put 'put ''KHI/dDp2b2lkIDAsdGhpcy53aW5kb3cpLGkmJnRoaXMuaXNDb3B5U3VjY2Vzc0luSUUxMSgpfWNhdGNoe3JldHVybiExfX1pc0NvcHlTdWNjZXNzSW5JRTExKCl7Y29uc3QgdD10aGlzLndpbmRvdy5jbGlwYm9hcmREYXRhO3JldHVybiEodCYmdC5nZXREYXRhJiYhdC5nZXREYXRhKCJUZXh0''@;'; put 'put ''IikpfWNvcHlGcm9tQ29udGVudCh0LHI9dGhpcy5kb2N1bWVudC5ib2R5KXtpZih0aGlzLnRlbXBUZXh0QXJlYSYmIXIuY29udGFpbnModGhpcy50ZW1wVGV4dEFyZWEpJiZ0aGlzLmRlc3Ryb3kodGhpcy50ZW1wVGV4dEFyZWEucGFyZW50RWxlbWVudHx8dm9pZCAwKSwhdGhpcy50ZW1wVGV4''@;'; put 'put ''dEFyZWEpe3RoaXMudGVtcFRleHRBcmVhPXRoaXMuY3JlYXRlVGVtcFRleHRBcmVhKHRoaXMuZG9jdW1lbnQsdGhpcy53aW5kb3cpO3RyeXtyLmFwcGVuZENoaWxkKHRoaXMudGVtcFRleHRBcmVhKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIkNvbnRhaW5lciBzaG91bGQgYmUgYSBEb20gZWxl''@;'; put 'put ''bWVudCIpfX10aGlzLnRlbXBUZXh0QXJlYS52YWx1ZT10O2NvbnN0IGk9dGhpcy5jb3B5RnJvbUlucHV0RWxlbWVudCh0aGlzLnRlbXBUZXh0QXJlYSwhMSk7cmV0dXJuIHRoaXMuY29uZmlnLmNsZWFuVXBBZnRlckNvcHkmJnRoaXMuZGVzdHJveSh0aGlzLnRlbXBUZXh0QXJlYS5wYXJlbnRF''@;'; put 'put ''bGVtZW50fHx2b2lkIDApLGl9ZGVzdHJveSh0PXRoaXMuZG9jdW1lbnQuYm9keSl7dGhpcy50ZW1wVGV4dEFyZWEmJih0LnJlbW92ZUNoaWxkKHRoaXMudGVtcFRleHRBcmVhKSx0aGlzLnRlbXBUZXh0QXJlYT12b2lkIDApfXNlbGVjdFRhcmdldCh0KXtyZXR1cm4gdC5zZWxlY3QoKSx0LnNl''@;'; put 'put ''dFNlbGVjdGlvblJhbmdlKDAsdC52YWx1ZS5sZW5ndGgpLHQudmFsdWUubGVuZ3RofWNvcHlUZXh0KCl7cmV0dXJuIHRoaXMuZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKX1jbGVhclNlbGVjdGlvbih0LHIpe3QmJnQuZm9jdXMoKSxyLmdldFNlbGVjdGlvbigpPy5yZW1vdmVBbGxSYW5n''@;'; put 'put ''ZXMoKX1jcmVhdGVUZW1wVGV4dEFyZWEodCxyKXtjb25zdCBpPSJydGwiPT09dC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkaXIiKTtsZXQgbztyZXR1cm4gbz10LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIiksby5zdHlsZS5mb250U2l6ZT0iMTJwdCIsby5zdHlsZS5ib3JkZXI9''@;'; put 'put ''IjAiLG8uc3R5bGUucGFkZGluZz0iMCIsby5zdHlsZS5tYXJnaW49IjAiLG8uc3R5bGUucG9zaXRpb249ImFic29sdXRlIixvLnN0eWxlW2k/InJpZ2h0IjoibGVmdCJdPSItOTk5OXB4IixvLnN0eWxlLnRvcD0oci5wYWdlWU9mZnNldHx8dC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKSsi''@;'; put 'put ''cHgiLG8uc2V0QXR0cmlidXRlKCJyZWFkb25seSIsIiIpLG99cHVzaENvcHlSZXNwb25zZSh0KXt0aGlzLmNvcHlTdWJqZWN0Lm9ic2VydmVycy5sZW5ndGg+MCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jb3B5U3ViamVjdC5uZXh0KHQpfSl9cHVzaENvcHlSZXBvbnNlKHQpe3RoaXMu''@;'; put 'put ''cHVzaENvcHlSZXNwb25zZSh0KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikob3IoZ2EpLG9yKFRsKSxvcihibW4sOCkpfSxuLlx1MDI3NXByb3Y9Sm4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgp''@;'; put 'put ''LENtbj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKHQscixpLG8pe3RoaXMubmdab25lPXQsdGhpcy5ob3N0PXIsdGhpcy5yZW5kZXJlcj1pLHRoaXMuY2xpcGJvYXJkU3J2PW8sdGhpcy5jYk9uU3VjY2Vzcz1uZXcgS3IsdGhpcy5jYk9uRXJyb3I9bmV3IEtyLHRoaXMub25DbGljaz1hPT57''@;'; put 'put ''dGhpcy5jbGlwYm9hcmRTcnYuaXNTdXBwb3J0ZWQ/dGhpcy50YXJnZXRFbG0mJnRoaXMuY2xpcGJvYXJkU3J2LmlzVGFyZ2V0VmFsaWQodGhpcy50YXJnZXRFbG0pP3RoaXMuaGFuZGxlUmVzdWx0KHRoaXMuY2xpcGJvYXJkU3J2LmNvcHlGcm9tSW5wdXRFbGVtZW50KHRoaXMudGFyZ2V0RWxt''@;'; put 'put ''KSx0aGlzLnRhcmdldEVsbS52YWx1ZSxhKTp0aGlzLmNiQ29udGVudCYmdGhpcy5oYW5kbGVSZXN1bHQodGhpcy5jbGlwYm9hcmRTcnYuY29weUZyb21Db250ZW50KHRoaXMuY2JDb250ZW50LHRoaXMuY29udGFpbmVyKSx0aGlzLmNiQ29udGVudCxhKTp0aGlzLmhhbmRsZVJlc3VsdCghMSx2''@;'; put 'put ''b2lkIDAsYSl9fW5nT25Jbml0KCl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmNsaWNrTGlzdGVuZXI9dGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsImNsaWNrIix0aGlzLm9uQ2xpY2spfSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNs''@;'; put 'put ''aWNrTGlzdGVuZXImJnRoaXMuY2xpY2tMaXN0ZW5lcigpLHRoaXMuY2xpcGJvYXJkU3J2LmRlc3Ryb3kodGhpcy5jb250YWluZXIpfWhhbmRsZVJlc3VsdCh0LHIsaSl7bGV0IG89e2lzU3VjY2Vzczp0LGNvbnRlbnQ6cixzdWNjZXNzTWVzc2FnZTp0aGlzLmNiU3VjY2Vzc01zZyxldmVudDpp''@;'; put 'put ''fTt0P3RoaXMuY2JPblN1Y2Nlc3Mub2JzZXJ2ZWQmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY2JPblN1Y2Nlc3MuZW1pdChvKX0pOnRoaXMuY2JPbkVycm9yLm9ic2VydmVkJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLmNiT25FcnJvci5lbWl0KG8pfSksdGhpcy5jbGlwYm9hcmRT''@;'; put 'put ''cnYucHVzaENvcHlSZXNwb25zZShvKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8bikoemUoZ2EpLHplKG5vKSx6ZShOdCksemUod21uKSl9LG4uXHUwMjc1ZGlyPSRyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5neENsaXBib2FyZCIsIiJdXSxpbnB1''@;'; put 'put ''dHM6e3RhcmdldEVsbTpbMCwibmd4Q2xpcGJvYXJkIiwidGFyZ2V0RWxtIl0sY29udGFpbmVyOiJjb250YWluZXIiLGNiQ29udGVudDoiY2JDb250ZW50IixjYlN1Y2Nlc3NNc2c6ImNiU3VjY2Vzc01zZyJ9LG91dHB1dHM6e2NiT25TdWNjZXNzOiJjYk9uU3VjY2VzcyIsY2JPbkVycm9yOiJj''@;'; put 'put ''Yk9uRXJyb3IifSxzdGFuZGFsb25lOiExfSksbn0pKCksU21uPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3KHR8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3FvXX0pLG59KSgpO3Zh''@;'; put 'put ''ciBFbW49aCgyNTAwMSk7bGV0IE1tbj0oKCk9Pnt2YXIgbjtjbGFzcyBle3RyYW5zZm9ybShyLC4uLmkpe2NvbnN0IG89cGFyc2VJbnQoaVswXSl8fDIsYT0ibnVtYmVyIiE9dHlwZW9mIHI/cGFyc2VJbnQocik6cjtyZXR1cm4oMCxFbW4uQykoYSxvKX1zdGF0aWMjZT1uPSgpPT4odGhpcy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyhpfHxlKX0sdGhpcy5cdTAyNzVwaXBlPXVoKHtuYW1lOiJjb252ZXJ0U2l6ZSIsdHlwZTplLHB1cmU6ITAsc3RhbmRhbG9uZTohMX0pKX1yZXR1cm4gbigpLGV9KSgpO2NvbnN0IFRtbj1bImhvdEluc3RhbmNlIl0seG1uPVsiaW5mb0Jh''@;'; put 'put ''ciJdLEFtbj1bInF1ZXJ5RmlsdGVyIl0sa21uPSgpPT5bIiIsIiAiXTtmdW5jdGlvbiBSbW4obixlKXsxJm4mJihKKDAsImRpdiIsOCksSXQoMSwiY2xyLXNwaW5uZXIiLDU0KSx0ZSgpKX1mdW5jdGlvbiBJbW4obixlKXsxJm4mJkl0KDAsImNsci1pY29uIiw1Nyl9ZnVuY3Rpb24gRG1uKG4s''@;'; put 'put ''ZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItaWNvbiIsNTkpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtZZSh0KTtjb25zdCBpPVRlKDIpO3JldHVybiBpLmxpYnJhcmllc1NlYXJjaD0iIixYZShpLmxpYnJhcnlPbkZpbHRlcigpKX0pLHRlKCl9fWZ1bmN0aW9uIExtbihuLGUpe2lm''@;'; put 'put ''KDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLXRyZWUtbm9kZSIsOSkoMSwiZGl2Iiw1NSkoMiwiaW5wdXQiLDU2LDEpLGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKCk7cmV0dXJuIGZpKG8ubGlicmFyaWVzU2VhcmNoLGkpfHwoby5saWJyYXJpZXNT''@;'; put 'put ''ZWFyY2g9aSksWGUoaSl9KSx3dCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKCkubGlicmFyeU9uRmlsdGVyKCkpfSksdGUoKSx2dCg0LEltbiwxLDAsImNsci1pY29uIiw1NyksdnQoNSxEbW4sMSwwLCJjbHItaWNvbiIsNTgpLHRlKCkoKX1pZigyJm4pe2NvbnN0IHQ9''@;'; put 'put ''b28oMykscj1UZSgpO2llKDIpLGRpKCJuZ01vZGVsIixyLmxpYnJhcmllc1NlYXJjaCksaWUoMiksX3QodC52YWx1ZS5sZW5ndGg8MT80Oi0xKSxpZSgpLF90KHQudmFsdWUubGVuZ3RoPjA/NTotMSl9fWZ1bmN0aW9uIE9tbihuLGUpezEmbiYmSXQoMCwiY2xyLWljb24iLDU3KX1mdW5jdGlv''@;'; put 'put ''biBObW4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImNsci1pY29uIiw1OSksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpLFRlKCk7Y29uc3QgaT1vbygzKSxvPVRlKDIpLiRpbXBsaWNpdCxhPVRlKCk7cmV0dXJuIGkudmFsdWU9IiIsby5zZWFyY2hTdHJpbmc9IiIsWGUoYS50''@;'; put 'put ''cmVlT25GaWx0ZXIobywidGFibGVzIikpfSksdGUoKX19ZnVuY3Rpb24gRm1uKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJjbHItdHJlZS1ub2RlIiw5KSgxLCJkaXYiLDU1KSgyLCJpbnB1dCIsNjQsMiksaGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0''@;'; put 'put ''IG89VGUoMikuJGltcGxpY2l0O3JldHVybiBmaShvLnNlYXJjaFN0cmluZyxpKXx8KG8uc2VhcmNoU3RyaW5nPWkpLFhlKGkpfSksd3QoImtleXVwIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoMikuJGltcGxpY2l0O3JldHVybiBYZShUZSgpLnRyZWVPbkZpbHRlcihpLCJ0YWJsZXMi''@;'; put 'put ''KSl9KSx0ZSgpLHZ0KDQsT21uLDEsMCwiY2xyLWljb24iLDU3KSx2dCg1LE5tbiwxLDAsImNsci1pY29uIiw1OCksdGUoKSgpfWlmKDImbil7Y29uc3QgdD1vbygzKSxyPVRlKDIpLiRpbXBsaWNpdDtpZSgyKSxydCgiaWQiLCJzZWFyY2hfIityLkxJQlJBUllSRUYpLGRpKCJuZ01vZGVsIixy''@;'; put 'put ''LnNlYXJjaFN0cmluZyksaWUoMiksX3QodC52YWx1ZS5sZW5ndGg8MT80Oi0xKSxpZSgpLF90KHQudmFsdWUubGVuZ3RoPjA/NTotMSl9fWZ1bmN0aW9uIFBtbihuLGUpezEmbiYmSXQoMCwiY2xyLWljb24iLDY5KX1mdW5jdGlvbiBIbW4obixlKXsxJm4mJkl0KDAsImNsci1pY29uIiw3MCl9''@;'; put 'put ''ZnVuY3Rpb24gVm1uKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJidXR0b24iLDY4KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3QgaT1UZSgpLm5nVmFyLG89VGUoKS4kaW1wbGljaXQsYT1UZSgyKS4kaW1wbGljaXQsbD1UZSgpO3JldHVybiBYZShpPyIiOmwub25U''@;'; put 'put ''YWJsZUNsaWNrKG8sYSkpfSksdnQoMSxQbW4sMSwwLCJjbHItaWNvbiIsNjkpKDIsSG1uLDEsMCwiY2xyLWljb24iLDcwKSxTZSgzKSx0ZSgpfWlmKDImbil7bGV0IHQ7Y29uc3Qgcj1UZSgpLm5nVmFyLGk9VGUoKS4kaW1wbGljaXQsbz1UZSgyKS4kaW1wbGljaXQsYT1UZSgpO3dyKCJkYy1s''@;'; put 'put ''b2NrZWQtY29udHJvbCIscikoImFjdGl2ZSIsYS5saWJUYWJBY3RpdmUoby5MSUJSQVJZUkVGLGkpKSxpZSgpLF90KCEwPT09KHQ9aS5pbmNsdWRlcygiLUZDIikpPzE6ITE9PT10PzI6LTEpLGllKDIpLFNyKCIgIixpLnJlcGxhY2UoIi1GQyIsIiIpLCIgIil9fWZ1bmN0aW9uIEJtbihuLGUp''@;'; put 'put ''ezEmbiYmKEooMCwiY2xyLXRvb2x0aXAtY29udGVudCIsNjcpKDEsInNwYW4iKSxTZSgyLCIgVG8gdW5sb2NrIGFsbCB0YWJsZXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSx0ZSgpKCkpfWZ1bmN0aW9uIGptbihuLGUpezEmbiYmWW4oMCxCbW4sMywwLCJjbHItdG9v''@;'; put 'put ''bHRpcC1jb250ZW50Iiw3MSl9ZnVuY3Rpb24gVW1uKG4sZSl7aWYoMSZuJiYoSigwLCJjbHItdG9vbHRpcCIpLHZ0KDEsVm1uLDQsNiwiYnV0dG9uIiw2NiksdnQoMixqbW4sMSwwLCJjbHItdG9vbHRpcC1jb250ZW50Iiw2NyksdGUoKSksMiZuKXtjb25zdCB0PWUubmdWYXIscj1UZSgpLiRp''@;'; put 'put ''bXBsaWNpdDtpZSgpLF90KHIubGVuZ3RoPjA/MTotMSksaWUoKSxfdCh0PzI6LTEpfX1mdW5jdGlvbiB6bW4obixlKXtpZigxJm4mJihKKDAsImNsci10cmVlLW5vZGUiKSxZbigxLFVtbiwzLDIsImNsci10b29sdGlwIiw2NSksdGUoKSksMiZuKXtjb25zdCB0PWUuJGluZGV4LHI9VGUoMyk7''@;'; put 'put ''aWUoKSxydCgibmdWYXIiLHQrMT5yLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIFdtbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLXRyZWUtbm9kZSIsNjEpLHd0KCJjbGljayIsZnVuY3Rpb24oaSl7WWUodCk7Y29uc3Qg''@;'; put 'put ''bz1UZSgpLiRpbXBsaWNpdDtyZXR1cm4gWGUoVGUoKS50cmVlTm9kZUNsaWNrZWQoaSxvKSl9KSxoaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGkpe1llKHQpO2NvbnN0IG89VGUoKS4kaW1wbGljaXQ7cmV0dXJuIGZpKG8uZXhwYW5kZWQsaSl8fChvLmV4cGFuZGVkPWkpLFhlKGkp''@;'; put 'put ''fSksSigxLCJwIiw2Miksd3QoImNsaWNrIixmdW5jdGlvbigpe1llKHQpO2NvbnN0IGk9VGUoKS4kaW1wbGljaXQsbz1UZSgpO3JldHVybiBvLmxpYj1pLkxJQlJBUllSRUYsWGUoby5saWJyYXJ5T25DbGljayhpLkxJQlJBUllSRUYsaSkpfSksSXQoMiwiY2xyLWljb24iLDYzKSxTZSgzKSx0''@;'; put 'put ''ZSgpLHZ0KDQsRm1uLDYsNCwiY2xyLXRyZWUtbm9kZSIsOSksX28oNSx6bW4sMiwxLCJjbHItdHJlZS1ub2RlIixudWxsLENvKSx0ZSgpfWlmKDImbil7Y29uc3QgdD1UZSgpLiRpbXBsaWNpdDt3cigiY2xyLWV4cGFuZGVkIix0LmV4cGFuZGVkKSxkaSgiY2xyRXhwYW5kZWQiLHQuZXhwYW5k''@;'; put 'put ''ZWQpLHJ0KCJjbHJMb2FkaW5nIix0LmxvYWRpbmdUYWJsZXMmJiF0LnRhYmxlcyksaWUoMyksU3IoIiAiLHQuTElCUkFSWU5BTUUsIiAiKSxpZSgpLF90KHQudGFibGVzPzQ6LTEpLGllKCkseW8odC50YWJsZXMpfX1mdW5jdGlvbiBZbW4obixlKXtpZigxJm4mJnZ0KDAsV21uLDcsNiwiY2xy''@;'; put 'put ''LXRyZWUtbm9kZSIsNjApLDImbil7Y29uc3QgdD1lLiRpbXBsaWNpdDtfdCghdC5oaWRkZW4mJnQuaW5Gb3JlZ3JvdW5kPzA6LTEpfX1mdW5jdGlvbiBabW4obixlKXsxJm4mJihKKDAsImRpdiIsMTApKDEsInNwYW4iLDcyKSxTZSgyLCIgTG9hZGluZy4uLiAiKSx0ZSgpKCkpfWZ1bmN0aW9u''@;'; put 'put ''IEdtbihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiZGl2IiwxMikoMSwiZGl2Iiw3MykoMiwiZGl2Iiw3NCkoMywiZGl2Iiw3NSkoNCwiYnV0dG9uIiw3NiksSXQoNSwiY2xyLWljb24iLDc3KSx0ZSgpLEooNiwiaDMiLDQ3KSxTZSg3LCJFcnJvciIpLHRlKCkoKSxKKDgsImRpdiIs''@;'; put 'put ''MTYpKDksInAiKSxTZSgxMCwiWW91IGNhbm5vdCBzdWJtaXQgZW1wdHkgY2xhdXNlcyIpLHRlKCkoKSxKKDExLCJkaXYiLDI3KSgxMiwiYnV0dG9uIiw3OCksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSgpLm51bGxWYXJpYWJsZXM9ITEpfSksU2UoMTMsIiBPayAi''@;'; put 'put ''KSx0ZSgpKCkoKSgpKCl9fWZ1bmN0aW9uICRtbihuLGUpezEmbiYmSXQoMCwiZGl2IiwxMyl9ZnVuY3Rpb24gcW1uKG4sZSl7MSZuJiZJdCgwLCJhcHAtcXVlcnkiLG51bGwsMyl9ZnVuY3Rpb24gS21uKG4sZSl7MSZuJiYoSigwLCJkaXYiLDUwKSgxLCJzcGFuIiw3OSksU2UoMiwiIExvYWRp''@;'; put 'put ''bmcuLi4gIiksdGUoKSxKKDMsImRpdiIsODApKDQsInAiLDgxKSxTZSg1LCJMb2FkaW5nIFRhYmxlIFZpZXdlciIpLHRlKCkoKSgpKX1mdW5jdGlvbiBYbW4obixlKXtpZigxJm4pe2NvbnN0IHQ9d24oKTtKKDAsImNsci1pY29uIiwxMDQpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtZZSh0KSxU''@;'; put 'put ''ZSgpO2NvbnN0IGk9b28oNSk7cmV0dXJuIFhlKFRlKDIpLnNlYXJjaFRhYmxlKGkpKX0pLHRlKCl9fWZ1bmN0aW9uIFFtbihuLGUpezEmbiYmKEooMCwic3BhbiIsOTIpLFNlKDEsIiBMb2FkaW5nLi4uICIpLHRlKCkpfWZ1bmN0aW9uIEptbihuLGUpezEmbiYmSXQoMCwiY2xyLWljb24iLDk4''@;'; put 'put ''KX1mdW5jdGlvbiBlNG4obixlKXtpZigxJm4mJihKKDAsInNwYW4iLDk5KSxTZSgxKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoMyk7aWUoKSxTcigiICIsbnVsbD09dC50YWJsZVRpdGxlP251bGw6dC50YWJsZVRpdGxlLnJlcGxhY2UoIi1GQyIsIiIpLCIgIil9fWZ1bmN0aW9uIHQ0bihuLGUp''@;'; put 'put ''e2lmKDEmbiYmKEooMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMTAwKSxTZSgxKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoNCk7aWUoKSxTcigiICIsdC5kc05vdGUsIiAiKX19ZnVuY3Rpb24gbjRuKG4sZSl7MSZuJiZZbigwLHQ0biwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDEwNSl9ZnVu''@;'; put 'put ''Y3Rpb24gcjRuKG4sZSl7aWYoMSZuJiYoSigwLCJzcGFuIiksU2UoMSksQWMoMiwidGhvdXNhbmRTZXBhcmF0b3IiKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoNCk7aWUoKSxVaigiICgiLHNiKDIsNCx0Lm51bWJlck9mUm93cywiLCIpLCIgIiwxPT09dC5udW1iZXJPZlJvd3M/InJvdyI6InJv''@;'; put 'put ''d3MiLCIsICIsdC5maWx0ZXJDb2xzLmxlbmd0aCwiIiwxPT09dC5maWx0ZXJDb2xzLmxlbmd0aD8iIGNvbCI6IiBjb2xzIiwiKSAiKX19ZnVuY3Rpb24gaTRuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7dnQoMCxyNG4sMyw3LCJzcGFuIiksSigxLCJjbHItaWNvbiIsMTA2KSx3dCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKDMpLnJlbG9hZFRhYmxlRGF0YSgpKX0pLHRlKCl9MiZuJiZfdChudWxsIT09VGUoMykubnVtYmVyT2ZSb3dzPzA6LTEpfWZ1bmN0aW9uIG80bihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiZGl2IiwxMTEpLHd0KCJjbGlj''@;'; put 'put ''ayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoNSkuZWRpdFRhYmxlKCkpfSksSXQoMSwiY2xyLWljb24iLDExNyksSigyLCJzcGFuIiksU2UoMywiRWRpdCIpLHRlKCkoKX19ZnVuY3Rpb24gYTRuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJkaXYiLDExMSksd3QoImNs''@;'; put 'put ''aWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSg1KS5nb1RvTGluZWFnZSgpKX0pLEl0KDEsImNsci1pY29uIiwxMTgpLEooMiwic3BhbiIpLFNlKDMsIkxpbmVhZ2UiKSx0ZSgpKCl9fWZ1bmN0aW9uIHM0bihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiY2xyLWRyb3Bk''@;'; put 'put ''b3duLW1lbnUiLDExMCkoMSwiZGl2IiwxMTEpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoNCkubmV3Vmlld2JveCgpKX0pLEl0KDIsImNsci1pY29uIiwxMTIpLEooMywic3BhbiIpLFNlKDQsIlZpZXdib3hlcyIpLHRlKCkoKSx2dCg1LG80biw0LDAsImRpdiIs''@;'; put 'put ''MTEzKSx2dCg2LGE0biw0LDAsImRpdiIsMTEzKSxKKDcsImRpdiIsMTExKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKHQpLFhlKFRlKDQpLm9wZW5RYigpKX0pLEl0KDgsImNsci1pY29uIiwxMTQpLEooOSwic3BhbiIpLFNlKDEwLCJGaWx0ZXIiKSx0ZSgpKCksSigxMSwiZGl2''@;'; put 'put ''IiwxMTEpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoNCkub3BlbkRvd25sb2FkPSEwKX0pLEl0KDEyLCJjbHItaWNvbiIsMTE1KSxKKDEzLCJzcGFuIiksU2UoMTQsIkRvd25sb2FkIiksdGUoKSgpLEooMTUsImRpdiIsMTExKSx3dCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIFllKHQpLFhlKFRlKDQpLnNob3dXZWJRdWVyeSgpKX0pLEl0KDE2LCJjbHItaWNvbiIsMTE2KSxKKDE3LCJzcGFuIiksU2UoMTgsIldlYiBRdWVyeSBVUkwiKSx0ZSgpKCkoKX1pZigyJm4pe2NvbnN0IHQ9VGUoNCk7aWUoNSksX3QodC50YWJsZUVkaXRFeGlzdHMoKT81Oi0x''@;'; put 'put ''KSxpZSgpLF90KHQudGFibGV1cmk/NjotMSl9fWZ1bmN0aW9uIGw0bihuLGUpezEmbiYmKEooMCwiY2xyLWRyb3Bkb3duIiwxMDIpKDEsImJ1dHRvbiIsMTA3KSxJdCgyLCJjbHItaWNvbiIsMTA4KSxTZSgzLCIgb3B0aW9ucyAiKSx0ZSgpLFluKDQsczRuLDE5LDIsImNsci1kcm9wZG93bi1t''@;'; put 'put ''ZW51IiwxMDkpLHRlKCkpLDImbiYmcnQoImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIiwhMCl9ZnVuY3Rpb24gYzRuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJidXR0b24iLDEyMiksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZSh0KSxYZShUZSg0KS50b2dnbGVGaWx0''@;'; put 'put ''ZXJQYW5lbCgpKX0pLEl0KDEsImNsci1pY29uIiwxMjMpLHRlKCl9aWYoMiZuKXtjb25zdCB0PVRlKDQpO1JyKCJhcmlhLWV4cGFuZGVkIix0LmZpbHRlckV4cGFuZGVkKSgiYXJpYS1sYWJlbCIsdC5maWx0ZXJFeHBhbmRlZD8iQ29sbGFwc2UgdGhlIGZpbHRlciBjbGF1c2UiOiJFeHBhbmQg''@;'; put 'put ''dGhlIGZpbHRlciBjbGF1c2UiKX19ZnVuY3Rpb24gdTRuKG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiLDExOSw1KSgyLCJzcGFuIiwxMjApLFNlKDMsIkZJTFRFUiA6ICIpLEooNCwiYiIpLFNlKDUpLHRlKCkoKSx2dCg2LGM0biwyLDIsImJ1dHRvbiIsMTIxKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9''@;'; put 'put ''VGUoMyk7d3IoImV4cGFuZGVkIix0LmZpbHRlckV4cGFuZGVkKSxpZSg1KSxwcih0LnF1ZXJ5VGV4dCksaWUoKSxfdCh0LmZpbHRlck92ZXJmbG93cz82Oi0xKX19ZnVuY3Rpb24gZDRuKG4sZSl7aWYoMSZuKXtjb25zdCB0PXduKCk7SigwLCJkaXYiLDgyKSgxLCJzZWN0aW9uIiw4NykoMiwi''@;'; put 'put ''Zm9ybSIsODgpKDMsImRpdiIsODkpKDQsImlucHV0Iiw5MCw0KSx3dCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKCl7WWUodCk7Y29uc3QgaT1vbyg1KTtyZXR1cm4gWGUoVGUoMikuc2VhcmNoVGFibGUoaSkpfSksdGUoKSx2dCg2LFhtbiwxLDAsImNsci1pY29uIiw5MSksdnQoNyxRbW4sMiww''@;'; put 'put ''LCJzcGFuIiw5MiksdGUoKSxKKDgsImNsci1jaGVja2JveC1jb250YWluZXIiKSg5LCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEwLCJpbnB1dCIsOTMpLGhpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtZZSh0KTtjb25zdCBvPVRlKDIpO3JldHVybiBmaShvLnNlYXJjaE51bWVyaWMs''@;'; put 'put ''aSl8fChvLnNlYXJjaE51bWVyaWM9aSksWGUoaSl9KSx0ZSgpLEooMTEsImxhYmVsIiksU2UoMTIsIk51bWVyaWMiKSx0ZSgpKCkoKSgpKCksSigxMywiZGl2Iiw5NCkoMTQsInAiLDk1KSgxNSwiY2xyLXRvb2x0aXAiLDk2KSgxNiwiY2xyLWljb24iLDk3KSx3dCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIFllKHQpLFhlKFRlKDIpLmRhdGFzZXRJbmZvPSEwKX0pLHRlKCksdnQoMTcsSm1uLDEsMCwiY2xyLWljb24iLDk4KSx2dCgxOCxlNG4sMiwxLCJzcGFuIiw5OSksdnQoMTksbjRuLDEsMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMTAwKSx0ZSgpLHZ0KDIwLGk0biwyLDEpLHRl''@;'; put 'put ''KCkoKSxKKDIxLCJkaXYiLDEwMSksdnQoMjIsbDRuLDUsMSwiY2xyLWRyb3Bkb3duIiwxMDIpLHRlKCksdnQoMjMsdTRuLDcsNCwiZGl2IiwxMDMpLHRlKCl9aWYoMiZuKXtjb25zdCB0PVRlKDIpO2llKDQpLHJ0KCJ0eXBlIix0LnNlYXJjaE51bWVyaWM/Im51bWJlciI6InRleHQiKSxpZSgy''@;'; put 'put ''KSxfdCh0LnNlYXJjaExvYWRpbmc/LTE6NiksaWUoKSxfdCh0LnNlYXJjaExvYWRpbmc/NzotMSksaWUoMyksZGkoIm5nTW9kZWwiLHQuc2VhcmNoTnVtZXJpYyksaWUoNyksX3QobnVsbCE9dC50YWJsZVRpdGxlJiZ0LnRhYmxlVGl0bGUuaW5jbHVkZXMoIi1GQyIpPzE3Oi0xKSxpZSgpLF90''@;'; put 'put ''KHQudGFibGVUaXRsZSYmdC50YWJsZVRpdGxlLmxlbmd0aD4wPzE4Oi0xKSxpZSgpLF90KHQuZHNOb3RlJiZ0LmRzTm90ZS5sZW5ndGg+MD8xOTotMSksaWUoKSxfdCh0LnRhYmxlVGl0bGUmJnQudGFibGVUaXRsZS5sZW5ndGg+MD8yMDotMSksaWUoMiksX3QodC50YWJsZVRpdGxlJiYhdC5h''@;'; put 'put ''Ym9ydEFjdGl2ZT8yMjotMSksaWUoKSxfdCgiMT0xIj09PXQucXVlcnlUZXh0fHxtYygxMCxrbW4pLmluY2x1ZGVzKHQucXVlcnlUZXh0KXx8dC5hYm9ydEFjdGl2ZT8tMToyMyl9fWZ1bmN0aW9uIGg0bihuLGUpezEmbiYmKEooMCwiZGl2Iiw4MyksSXQoMSwiaW1nIiwxMjQpLEooMiwiaDMi''@;'; put 'put ''LDEyNSksU2UoMywiIFBsZWFzZSBzZWxlY3QgYSBsaWJyYXJ5ICIpLHRlKCkoKSl9ZnVuY3Rpb24gZjRuKG4sZSl7MSZuJiZJdCgwLCJjbHItc3Bpbm5lciIsNTQpfWZ1bmN0aW9uIHA0bihuLGUpezEmbiYmKEooMCwiZGl2IiwxMzApLEl0KDEsImltZyIsMTMyKSxKKDIsInAiLDEyNSksU2Uo''@;'; put 'put ''MywiIFBsZWFzZSBzZWxlY3QgYSB0YWJsZSAiKSx0ZSgpKCkpfWZ1bmN0aW9uIGc0bihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwicCIsMTMzKSxTZSgxLCIgTm8gbGlicmFyeSBpbmZvIGZvdW5kLiBDbGljayAiKSxKKDIsImNsci1pY29uIiwxMzQpLHd0KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gWWUodCksWGUoVGUoNCkucmVsb2FkTGliSW5mbygpKX0pLHRlKCksU2UoMywiIGJ1dHRvbiB0byByZWZyZXNoLiAiKSx0ZSgpfX1mdW5jdGlvbiBtNG4obixlKXtpZigxJm4mJihKKDAsInRyIikoMSwidGQiLDEzNSksU2UoMiwiRU5HSU5FOiIpLHRlKCksSigzLCJ0ZCIs''@;'; put 'put ''MTM2KSxTZSg0KSx0ZSgpKCkpLDImbil7Y29uc3QgdD1UZSg1KTtpZSg0KSxTcigiICIsdC5saWJpbmZvWzBdP3QubGliaW5mb1swXS5FTkdJTkU6IiIsIiAiKX19ZnVuY3Rpb24gdjRuKG4sZSl7aWYoMSZuJiYoSigwLCJ0ciIpKDEsInRkIiwxMzUpLFNlKDIsIkxJQklEOiIpLHRlKCksSigz''@;'; put 'put ''LCJ0ZCIsMTM2KSxTZSg0KSx0ZSgpKCkpLDImbil7Y29uc3QgdD1UZSg1KTtpZSg0KSxTcigiICIsdC5saWJpbmZvWzBdP3QubGliaW5mb1swXS5MSUJJRDoiIiwiICIpfX1mdW5jdGlvbiBfNG4obixlKXtpZigxJm4mJihKKDAsInRyIikoMSwidGQiLDEzNSksU2UoMiwiTElCTkFNRToiKSx0''@;'; put 'put ''ZSgpLEooMywidGQiLDEzNiksU2UoNCksdGUoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoNSk7aWUoNCksU3IoIiAiLHQubGliaW5mb1swXT90LmxpYmluZm9bMF0uTElCTkFNRToiIiwiICIpfX1mdW5jdGlvbiB5NG4obixlKXtpZigxJm4mJihKKDAsInRyIikoMSwidGQiLDEzNSksU2UoMiwiTElC''@;'; put 'put ''U0laRToiKSx0ZSgpLEooMywidGQiLDEzNiksU2UoNCksQWMoNSwiY29udmVydFNpemUiKSx0ZSgpKCkpLDImbil7Y29uc3QgdD1UZSg1KTtpZSg0KSxTcigiICIsdC5saWJpbmZvWzBdP1RkKDUsMSx0LmxpYmluZm9bMF0uTElCU0laRSk6IiIsIiAiKX19ZnVuY3Rpb24gYjRuKG4sZSl7aWYo''@;'; put 'put ''MSZuJiYoSigwLCJ0ciIpKDEsInRkIiwxMzUpLFNlKDIsIk9XTkVSUzoiKSx0ZSgpLEooMywidGQiLDEzNiksU2UoNCksdGUoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoNSk7aWUoNCksU3IoIiAiLHQubGliaW5mb1swXT90LmxpYmluZm9bMF0uT1dORVJTOiIiLCIgIil9fWZ1bmN0aW9uIHc0bihu''@;'; put 'put ''LGUpe2lmKDEmbiYmKEooMCwidHIiKSgxLCJ0ZCIsMTM1KSxTZSgyLCJQQVRIUzoiKSx0ZSgpLEooMywidGQiLDEzNiksU2UoNCksdGUoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoNSk7aWUoNCksU3IoIiAiLHQubGliaW5mb1swXT90LmxpYmluZm9bMF0uUEFUSFM6IiIsIiAiKX19ZnVuY3Rpb24g''@;'; put 'put ''QzRuKG4sZSl7aWYoMSZuJiYoSigwLCJ0ciIpKDEsInRkIiwxMzUpLFNlKDIsIlBFUk1TOiIpLHRlKCksSigzLCJ0ZCIsMTM2KSxTZSg0KSx0ZSgpKCkpLDImbil7Y29uc3QgdD1UZSg1KTtpZSg0KSxTcigiICIsdC5saWJpbmZvWzBdP3QubGliaW5mb1swXS5QRVJNUzoiIiwiICIpfX1mdW5j''@;'; put 'put ''dGlvbiBTNG4obixlKXtpZigxJm4mJihKKDAsInRyIikoMSwidGQiLDEzNSksU2UoMiwiU0NIRU1BUzoiKSx0ZSgpLEooMywidGQiLDEzNiksU2UoNCksdGUoKSgpKSwyJm4pe2NvbnN0IHQ9VGUoNSk7aWUoNCksU3IoIiAiLHQubGliaW5mb1swXT90LmxpYmluZm9bMF0uU0NIRU1BUzoiIiwi''@;'; put 'put ''ICIpfX1mdW5jdGlvbiBFNG4obixlKXtpZigxJm4mJihKKDAsInRyIikoMSwidGQiLDEzNSksU2UoMiwiVEFCTEVfQ05UOiIpLHRlKCksSigzLCJ0ZCIsMTM2KSxTZSg0KSx0ZSgpKCkpLDImbil7Y29uc3QgdD1UZSg1KTtpZSg0KSxTcigiICIsdC5saWJpbmZvWzBdP3QubGliaW5mb1swXS5U''@;'; put 'put ''QUJMRV9DTlQ6IiIsIiAiKX19ZnVuY3Rpb24gTTRuKG4sZSl7aWYoMSZuJiYoSigwLCJ0ciIpKDEsInRkIiwxMzUpLFNlKDIsIkNBVEFMT0dfQ05UOiIpLHRlKCksSigzLCJ0ZCIsMTM2KSxTZSg0KSx0ZSgpKCkpLDImbil7Y29uc3QgdD1UZSg1KTtpZSg0KSxTcigiICIsdC5saWJpbmZvWzBd''@;'; put 'put ''P3QubGliaW5mb1swXS5DQVRBTE9HX0NOVDoiIiwiICIpfX1mdW5jdGlvbiBUNG4obixlKXtpZigxJm4mJihKKDAsInRhYmxlIiksdnQoMSxtNG4sNSwxLCJ0ciIpLHZ0KDIsdjRuLDUsMSwidHIiKSx2dCgzLF80biw1LDEsInRyIiksdnQoNCx5NG4sNiwzLCJ0ciIpLHZ0KDUsYjRuLDUsMSwi''@;'; put 'put ''dHIiKSx2dCg2LHc0biw1LDEsInRyIiksdnQoNyxDNG4sNSwxLCJ0ciIpLHZ0KDgsUzRuLDUsMSwidHIiKSx2dCg5LEU0biw1LDEsInRyIiksdnQoMTAsTTRuLDUsMSwidHIiKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoNCk7aWUoKSxfdCgiIiE9PXQubGliaW5mb1swXS5FTkdJTkU/MTotMSks''@;'; put 'put ''aWUoKSxfdCgiIiE9PXQubGliaW5mb1swXS5MSUJJRD8yOi0xKSxpZSgpLF90KCIiIT09dC5saWJpbmZvWzBdLkxJQk5BTUU/MzotMSksaWUoKSxfdChudWxsIT09dC5saWJpbmZvWzBdLkxJQlNJWkU/NDotMSksaWUoKSxfdCgiIiE9PXQubGliaW5mb1swXS5PV05FUlM/NTotMSksaWUoKSxf''@;'; put 'put ''dCgiIiE9PXQubGliaW5mb1swXS5QQVRIUz82Oi0xKSxpZSgpLF90KCIiIT09dC5saWJpbmZvWzBdLlBFUk1TPzc6LTEpLGllKCksX3QoIiIhPT10LmxpYmluZm9bMF0uU0NIRU1BUz84Oi0xKSxpZSgpLF90KG51bGwhPT10LmxpYmluZm9bMF0uVEFCTEVfQ05UPzk6LTEpLGllKCksX3QobnVs''@;'; put 'put ''bCE9PXQubGliaW5mb1swXS5DQVRBTE9HX0NOVD8xMDotMSl9fWZ1bmN0aW9uIHg0bihuLGUpe2lmKDEmbiYmKEooMCwiZGl2IiwxMzEpLHZ0KDEsZzRuLDQsMCwicCIsMTMzKSx2dCgyLFQ0biwxMSwxMCwidGFibGUiKSx0ZSgpKSwyJm4pe2NvbnN0IHQ9VGUoMyk7aWUoKSxfdCh0LmxpYmlu''@;'; put 'put ''Zm8ubGVuZ3RoPDE/MTotMSksaWUoKSxfdCh0LmxpYmluZm8ubGVuZ3RoPjA/MjotMSl9fWZ1bmN0aW9uIEE0bihuLGUpe2lmKDEmbil7Y29uc3QgdD13bigpO0ooMCwiZGl2IiwxMjYpLEl0KDEsInNlY3Rpb24iLDg3KSxKKDIsImRpdiIsMTI3KSgzLCJwIiw4MSksU2UoNCksdGUoKSxKKDUs''@;'; put 'put ''ImNsci1pY29uIiwxMjgpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUodCksWGUoVGUoMikucmVsb2FkTGliSW5mbygpKX0pLHRlKCkoKSxJdCg2LCJkaXYiLDEwMSksdGUoKSxKKDcsImRpdiIsMTI5KSx2dCg4LGY0biwxLDAsImNsci1zcGlubmVyIiw1NCksdGUoKSx2dCg5LHA0''@;'; put 'put ''biw0LDAsImRpdiIsMTMwKSx2dCgxMCx4NG4sMywyLCJkaXYiLDEzMSl9aWYoMiZuKXtjb25zdCB0PVRlKDIpO2llKDQpLFNyKCIgIix0LmxpYiwiICIpLGllKDQpLF90KG51bGw9PT10LmxpYmluZm8/ODotMSksaWUoKSxfdChudWxsIT09dC5saWJpbmZvPzk6LTEpLGllKCksX3QobnVsbCE9''@;'; put 'put ''PXQubGliaW5mbz8xMDotMSl9fWZ1bmN0aW9uIGs0bihuLGUpezEmbiYmKEooMCwiaDMiLDEzOCksU2UoMSwiIE5vIGRhdGEgZm91bmQgd2l0aCBnaXZlbiBjb25kaXRpb25zICIpLHRlKCkpfWZ1bmN0aW9uIFI0bihuLGUpezEmbiYmKEooMCwiaDMiLDEzOCksU2UoMSwiIE5vIGRhdGEgZm91''@;'; put 'put ''bmQgZHVlIHRvIHNhcyByZXF1ZXN0IGVycm9yICIpLHRlKCkpfWZ1bmN0aW9uIEk0bihuLGUpe2lmKDEmbiYmKEooMCwiZGl2Iiw4NCksSXQoMSwiY2xyLWljb24iLDEzNyksdnQoMixrNG4sMiwwLCJoMyIsMTM4KSx2dCgzLFI0biwyLDAsImgzIiwxMzgpLHRlKCkpLDImbil7Y29uc3QgdD1U''@;'; put 'put ''ZSgyKTtpZSgyKSxfdCh0Lm5vRGF0YT8yOi0xKSxpZSgpLF90KHQubm9EYXRhUmVxRXJyPzM6LTEpfX1mdW5jdGlvbiBENG4obixlKXtpZigxJm4mJihKKDAsImRpdiIsODUpKDEsImRpdiIsMTM5KSxJdCgyLCJob3QtdGFibGUiLDE0MCw2KSx0ZSgpKCkpLDImbil7Y29uc3QgdD1UZSgyKTtp''@;'; put 'put ''ZSgyKSxydCgiZGF0YSIsdC5ob3RUYWJsZS5kYXRhKSgic2V0dGluZ3MiLHQuaG90VGFibGVTZXR0aW5ncyl9fWZ1bmN0aW9uIEw0bihuLGUpe2lmKDEmbiYmKEooMCwicCIsODYpLFNlKDEpLEl0KDIsImNvbnRhY3QtbGluayIpLHRlKCkpLDImbil7Y29uc3QgdD1UZSgyKTtpZSgpLFNyKCIg''@;'; put 'put ''VG8gZGlzcGxheSBtb3JlIHRoYW4gIix0LmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkLCIgcm93cywgY29udGFjdCAiKX19ZnVuY3Rpb24gTzRuKG4sZSl7aWYoMSZuJiYoSigwLCJkaXYiLDUxKSx2dCgxLGQ0biwyNCwxMSwiZGl2Iiw4MiksdnQoMixoNG4sNCwwLCJk''@;'; put 'put ''aXYiLDgzKSx2dCgzLEE0biwxMSw0KSx2dCg0LEk0biw0LDIsImRpdiIsODQpLHZ0KDUsRDRuLDQsMiwiZGl2Iiw4NSksSig2LCJkaXYiKSx2dCg3LEw0biwzLDEsInAiLDg2KSx0ZSgpKCkpLDImbil7Y29uc3QgdD1UZSgpO2llKCksX3QodC50YWJsZT8xOi0xKSxpZSgpLF90KHQubGlifHx0''@;'; put 'put ''LnRhYmxlfHx0Lm5vRGF0YVJlcUVycnx8dC5ub0RhdGE/LTE6MiksaWUoKSxfdCh0Lm5vRGF0YXx8dC5ub0RhdGFSZXFFcnJ8fHQudGFibGV8fCF0LmxpYj8tMTozKSxpZSgpLF90KHQubm9EYXRhfHx0Lm5vRGF0YVJlcUVycj80Oi0xKSxpZSgpLF90KHQubm9EYXRhfHx0Lm5vRGF0YVJlcUVy''@;'; put 'put ''cnx8IXQudGFibGU/LTE6NSksaWUoMiksX3QodC5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCE9PXQuSW5maW5pdHkmJnQuaG90VGFibGUuZGF0YSYmdC5ob3RUYWJsZS5kYXRhLmxlbmd0aD50LmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkPzc6''@;'; put 'put ''LTEpfX1sZXQgZVg9KCgpPT57dmFyIG47Y2xhc3MgZXt1cGRhdGVIb3RUYWJsZVNldHRpbmdzKCl7dGhpcy5ob3RUYWJsZVNldHRpbmdzPXttdWx0aUNvbHVtblNvcnRpbmc6ITAsdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ6MzAsY29sSGVhZGVyczp0aGlzLmhvdFRhYmxlLmNvbEhlYWRl''@;'; put 'put ''cnMsY29sdW1uczp0aGlzLmhvdFRhYmxlLmNvbHVtbnMsY29weVBhc3RlOnRoaXMuaG90VGFibGUuY29weVBhc3RlLGNvbnRleHRNZW51OnRoaXMuaG90VGFibGUuY29udGV4dE1lbnUsZmlsdGVyczohMCxkcm9wZG93bk1lbnU6dGhpcy5ob3RUYWJsZS5kcm9wZG93bk1lbnUsaGVpZ2h0OnRo''@;'; put 'put ''aXMuaG90VGFibGUuaGVpZ2h0LHN0cmV0Y2hIOiJhbGwiLG1vZGlmeUNvbFdpZHRoOnRoaXMubWF4V2lkdGhDaGVrZXIsY2VsbHM6dGhpcy5ob3RUYWJsZS5jZWxscyxoaWRkZW5Db2x1bW5zOntjb2x1bW5zOnRoaXMuaGlkZGVuVmlld0NvbHVtbnMsaW5kaWNhdG9yczohMX0sbWF4Um93czp0''@;'; put 'put ''aGlzLmhvdFRhYmxlLm1heFJvd3MsbWFudWFsQ29sdW1uUmVzaXplOiEwLGFmdGVyR2V0Q29sSGVhZGVyOnRoaXMuaG90VGFibGUuYWZ0ZXJHZXRDb2xIZWFkZXIscm93SGVhZGVyczp0aGlzLmhvdFRhYmxlLnJvd0hlYWRlcnMscm93SGVhZGVyV2lkdGg6dGhpcy5ob3RUYWJsZS5yb3dIZWFk''@;'; put 'put ''ZXJXaWR0aCxyb3dIZWlnaHRzOnRoaXMuaG90VGFibGUucm93SGVpZ2h0cyxsaWNlbnNlS2V5OnRoaXMuaG90VGFibGUubGljZW5zZUtleSxjbGFzc05hbWU6Imh0RGFyayIsdGhlbWU6Imh0LXRoZW1lLWNsYXNzaWMifX1jb25zdHJ1Y3RvcihyLGksbyxhLGwsdSxnLEUsTyxaKXt0aGlzLmxp''@;'; put 'put ''Y2VuY2VTZXJ2aWNlPXIsdGhpcy5zYXNTdG9yZVNlcnZpY2U9aSx0aGlzLnNhc1NlcnZpY2U9byx0aGlzLnJvdXRlcj1hLHRoaXMucm91dGU9bCx0aGlzLmV2ZW50U2VydmljZT11LHRoaXMubG9nZ2VyU2VydmljZT1nLHRoaXMuaGVscGVyU2VydmljZT1FLHRoaXMubG9jYXRpb249Tyx0aGlz''@;'; put 'put ''LmNkZj1aLHRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdD1uZXcgazgsdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy5saWJyYXJ5VGFibGVzUmVmPSIiLHRoaXMubGlicmFyaWVzVHJlZUV4cGFuZGVkPSExLHRoaXMubGliaW5mbz1udWxsLHRoaXMu''@;'; put 'put ''dGFibGV1cmk9bnVsbCx0aGlzLmZpbHRlcj0hMSx0aGlzLmZpbHRlckNvbHM9W10sdGhpcy5jb2xOYW1lcz1bXSx0aGlzLnVzZUxhYmVscz0hMSx0aGlzLm51bGxWYXJpYWJsZXM9ITEsdGhpcy5hYm9ydEFjdGl2ZT0hMSx0aGlzLnVybEZpbHRlclBrPW51bGwsdGhpcy5xdWVyeVRleHQ9IiIs''@;'; put 'put ''dGhpcy53ZWJRdWVyeVRleHQ9IiIsdGhpcy5maWx0ZXJFeHBhbmRlZD0hMSx0aGlzLmZpbHRlck92ZXJmbG93cz0hMSx0aGlzLmZpbHRlck1lYXN1cmVkS2V5PSIiLHRoaXMucXVlcnlFcnI9ITEsdGhpcy50YWJsZUZsYWc9ITAsdGhpcy5saWJyYXJpZXNMb2FkaW5nPSExLHRoaXMubG9hZGlu''@;'; put 'put ''Z1RhYmxlVmlldz0hMSx0aGlzLnN3aXRjaEZsYWc9ITEsdGhpcy5ub0RhdGE9ITEsdGhpcy5ub0RhdGFSZXFFcnI9ITEsdGhpcy50YWJsZURpc2FibGU9ITEsdGhpcy5hY3Rpb25EaXNhYmxlPSExLHRoaXMub3BlbkRvd25sb2FkPSExLHRoaXMud2ViUXVlcnk9ITEsdGhpcy53ZWJRdWVyeVRh''@;'; put 'put ''Yj0hMSx0aGlzLmRvd25sb2FkRm9ybWF0PSJDU1YiLHRoaXMuc2FzanNDb25maWc9bmV3IHhwLlNBU2pzQ29uZmlnLHRoaXMuc2VhcmNoTG9hZGluZz0hMSx0aGlzLnNlYXJjaE51bWVyaWM9ITEsdGhpcy5ob3RUYWJsZVNldHRpbmdzPXt9LHRoaXMubnVtYmVyT2ZSb3dzPW51bGwsdGhpcy5o''@;'; put 'put ''ZWFkZXJQa3M9W10sdGhpcy4kZGF0YUZvcm1hdHM9bnVsbCx0aGlzLmhpZGRlblZpZXdDb2x1bW5zPVtdLHRoaXMuZGF0YXNldEluZm89ITEsdGhpcy5kc21ldGE9W10sdGhpcy52ZXJzaW9ucz1bXSx0aGlzLmRzTm90ZT0iIix0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNl''@;'; put 'put ''LmxpY2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmhvdFRhYmxlPXtkYXRhOltdLGNvbEhlYWRlcnM6W10sY29sdW1uczpbXSxoZWlnaHQ6ImNhbGMoMTAwdmggLSAxODJweCkiLG1heFJvd3M6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZHx8MS8w''@;'; put 'put ''LHNldHRpbmdzOnt9LGxpY2Vuc2VLZXk6dm9pZCAwLHJvd0hlYWRlcnM6ZWU9PiIgIixhZnRlckdldENvbEhlYWRlcjooZWUsdmUsTWUpPT57aWYodGhpcy5ob3RJbnN0YW5jZSYmIXRoaXMuaG90SW5zdGFuY2UuaXNEZXN0cm95ZWQpdHJ5e2NvbnN0IEhlPXRoaXMuaG90SW5zdGFuY2UuY29s''@;'; put 'put ''VG9Qcm9wKGVlKTtIZSYmdGhpcy5oZWFkZXJQa3MuaW5kZXhPZihIZSk+LTEmJnZlLmNsYXNzTGlzdC5hZGQoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIpLHZlLmNsYXNzTGlzdC5hZGQoVW4uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX1jYXRjaHt2ZS5jbGFzc0xpc3QuYWRk''@;'; put 'put ''KFVuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9ZWxzZSB2ZS5jbGFzc0xpc3QuYWRkKFVuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9LHJvd0hlYWRlcldpZHRoOjE1LHJvd0hlaWdodHM6MjAsY29udGV4dE1lbnU6e2l0ZW1zOntjb3B5X3dpdGhfY29s''@;'; put 'put ''dW1uX2hlYWRlcnM6e30sY29weV9jb2x1bW5faGVhZGVyc19vbmx5Ont9LGV4cG9ydF9maWxlOnZnZSgoKT0+dGhpcy50YWJsZVRpdGxlfHwiZXhwb3J0IiksdG9nZ2xlX2xhYmVsczp7bmFtZTooKT0+dGhpcy51c2VMYWJlbHM/IlNob3cgbmFtZXMiOiJTaG93IGxhYmVscyIsY2FsbGJhY2s6''@;'; put 'put ''KCk9Pnt0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLnJvdXRlLHF1ZXJ5UGFyYW1zOntsYWJlbHM6IXRoaXMudXNlTGFiZWxzfHxudWxsfSxxdWVyeVBhcmFtc0hhbmRsaW5nOiJtZXJnZSJ9KX19fX0sY29weVBhc3RlOntjb3B5Q29sdW1uSGVhZGVyczohMCxjb3B5''@;'; put 'put ''Q29sdW1uSGVhZGVyc09ubHk6ITB9LGRyb3Bkb3duTWVudTp7aXRlbXM6e21ha2VfcmVhZF9vbmx5OntuYW1lOiJtYWtlX3JlYWRfb25seSJ9LGFsaWdubWVudDp7bmFtZToiYWxpZ25tZW50In0sc3AxOntuYW1lOiItLS0tLS0tLS0ifSxpbmZvOntuYW1lOiJ0ZXN0IGluZm8iLHJlbmRlcmVy''@;'; put 'put ''OihlZSx2ZSxNZSxIZSxXZSxhdCk9Pntjb25zdCBDdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7bGV0IEt0LEF0PSIiLHF0PSJObyBpbmZvIGZvdW5kIjtpZih0aGlzLmhvdEluc3RhbmNlJiYhdGhpcy5ob3RJbnN0YW5jZS5pc0Rlc3Ryb3llZCYmIXRoaXMuaXNUYWJsZVN3aXRj''@;'; put 'put ''aGluZyl7dHJ5e2NvbnN0IGduPXRoaXMuaG90SW5zdGFuY2UuZ2V0U2VsZWN0ZWQoKXx8W107QXQ9dGhpcy5ob3RJbnN0YW5jZS5jb2xUb1Byb3AoZ24/Z25bMF1bMV06LTEpLEt0PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW0F0XX1jYXRjaHtLdD12b2lkIDB9cXQ9U1plKEF0LEt0KX1yZXR1''@;'; put 'put ''cm4gQ3QuaW5uZXJIVE1MPXF0LEN0fX19fX0sdGhpcy5ob3RJbnN0YW5jZT1udWxsLHRoaXMuaG90SW5zdGFuY2VDbGlja0xpc3RlbmVyPSExLHRoaXMuaXNUYWJsZVN3aXRjaGluZz0hMSx0aGlzLnN3aXRjaGluZ1RpbWVvdXQ9bnVsbCx0aGlzLmxhc3RTZXR1cFRpbWU9MCx0aGlzLnZpZXdi''@;'; put 'put ''b3hPcGVuPSExLHRoaXMuaG9va3NBdHRhY2hlZD0hMSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpfW5nT25Jbml0KCl7IiIhPT1Vbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbiYmMD09PU9iamVjdC5rZXlzKHRoaXMucm91dGUuc25hcHNob3QucGFy''@;'; put 'put ''YW1zKS5sZW5ndGgmJnRoaXMucm91dGVyLm5hdmlnYXRlKFtVbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbl0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLHZvaWQgMCE9PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSYmKFVuLnZpZXdlci5jdXJyZW50U2VsZWN0''@;'; put 'put ''aW9uPSJ2aWV3L2RhdGEiKSx0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUocj0+e3RoaXMuaG90VGFibGUubGljZW5zZUtleT1yLHRoaXMudXBkYXRlSG90VGFibGVTZXR0aW5ncygpfSksdGhpcy5fcXVlcnlQYXJhbXM9dGhpcy5yb3V0ZS5xdWVyeVBhcmFt''@;'; put 'put ''cy5zdWJzY3JpYmUocj0+e3RoaXMudXNlTGFiZWxzPUNaZShuZXcgVVJMU2VhcmNoUGFyYW1zKHIpLnRvU3RyaW5nKCkpLHRoaXMuYXBwbHlEaXNwbGF5Q29sSGVhZGVycygpfSl9YXBwbHlEaXNwbGF5Q29sSGVhZGVycygpe3RoaXMuaG90VGFibGUuY29sSGVhZGVycz1nQSh0aGlzLmNvbE5h''@;'; put 'put ''bWVzLHRoaXMuZmlsdGVyQ29scyx0aGlzLnVzZUxhYmVscyksdGhpcy5ob3RJbnN0YW5jZSYmIXRoaXMuaG90SW5zdGFuY2UuaXNEZXN0cm95ZWQmJnRoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe2NvbEhlYWRlcnM6dGhpcy5ob3RUYWJsZS5jb2xIZWFkZXJzfSl9bmV3Vmlld2Jv''@;'; put 'put ''eCgpe3RoaXMudmlld2JveE9wZW49ITB9cmVzZXRGaWx0ZXIoKXt0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3QuZmlyc3QmJnRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdC5yZXNldEZpbHRlcigpfXNlYXJjaFRhYmxlKHIpe3ZhciBpPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe2ku''@;'; put 'put ''c2VhcmNoTG9hZGluZz0hMDtsZXQgbz1yLnZhbHVlLGE9aS5saWIrIi4iK2kudGFibGUsbD1wYXJzZUludChpLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCl8fDA7eWllbGQgaS5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGFTZWFyY2gobyxpLnNlYXJjaE51bWVyaWMsYSxsKS50aGVu''@;'; put 'put ''KHU9Pnt1LnNhc3BhcmFtc3x8dS52aWV3RGF0YT8oaS5ob3RUYWJsZS5kYXRhPXUudmlld2RhdGEsaS4kZGF0YUZvcm1hdHM9dS4kdmlld2RhdGEsaS5kc21ldGE9dS5kc21ldGEsaS52ZXJzaW9ucz11LnZlcnNpb25zfHxbXSxpLnNldERTTm90ZSgpLGkubnVtYmVyT2ZSb3dzPXUuc2FzcGFy''@;'; put 'put ''YW1zWzBdLk5PQlMsaS5xdWVyeVRleHQ9dS5zYXNwYXJhbXNbMF0uRklMVEVSX1RFWFQsaS5oZWFkZXJQa3M9dS5zYXNwYXJhbXNbMF0uUEtfRklFTERTLnNwbGl0KCIgIiksMD09PWkuaG90VGFibGUuZGF0YS5sZW5ndGg/aS5ub0RhdGE9ITA6KGkubm9EYXRhPSExLGkudGFibGVGbGFnPSEx''@;'; put 'put ''LGkuc2V0dXBIb3QoKSkpOmkuc2VhcmNoTG9hZGluZz0hMX0pLmNhdGNoKHU9PntpLmxvZ2dlclNlcnZpY2UuZXJyb3IodSl9KSxpLnNlYXJjaExvYWRpbmc9ITF9KSgpfXJlbG9hZFRhYmxlRGF0YSgpe3RoaXMudmlld0RhdGEodGhpcy51cmxGaWx0ZXJQa3x8MCl9cmVsb2FkTGliSW5mbygp''@;'; put 'put ''e3ZhciByPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe3IubGliaW5mbz1udWxsLHIuc2FzU3RvcmVTZXJ2aWNlLnJlZnJlc2hMaWJJbmZvKHIubGliKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGk9Q3IoZnVuY3Rpb24qKG8pe3IubGliaW5mbz1vLmxpYmluZm8sVW4udmlld2VyLmxpYmluZm89''@;'; put 'put ''ci5saWJpbmZvO2NvbnN0IGE9ci5saWJyYXJpZXMuZmluZChsPT5sLkxJQlJBUllSRUY9PT1yLmxpYik7YSYmKGEubGliaW5mbz1yLmxpYmluZm8pfSk7cmV0dXJuIGZ1bmN0aW9uKG8pe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksaT0+e3IubG9nZ2VyU2VydmljZS5lcnJv''@;'; put 'put ''cihpKSxudWxsPT09ci5saWJpbmZvJiYoci5saWJpbmZvPVtdKX0pfSkoKX1maWx0ZXJGbihyKXt0aGlzLmxpYnJhcmllcz10aGlzLmxpYnJhcmllcy5maWx0ZXIobz0+LTEhPT1vLkxJQlJBUllOQU1FLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihyLnRvTG9jYWxlTG93ZXJDYXNlKCkpKX1kb3du''@;'; put 'put ''bG9hZERhdGEoKXtsZXQgcj10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCxpPXRoaXMuc2FzanNDb25maWcuYXBwTG9jO2NvbnN0IG89dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTtsZXQgZyxhPSImdHlwZT0iK3RoaXMuZG93bmxvYWRGb3JtYXQsbD0iJnRhYmxlPSIrdGhp''@;'; put 'put ''cy50YWJsZVRpdGxlLHU9IlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlP2AmX2NvbnRleHRuYW1lPSR7dGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZX1gOiIiO2c9dHlwZW9mIHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkPiJ1Ij8wOnBhcnNlSW50''@;'; put 'put ''KHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkKSx3aW5kb3cub3BlbihyK28rIi8/X3Byb2dyYW09IitpKyIvc2VydmljZXMvcHVibGljL2dldHJhd2RhdGEiK2ErbCt1KyImZmlsdGVyPSIrZyksdGhpcy5vcGVuRG93bmxvYWQ9ITF9ZG93bmxvYWREREwoKXtsZXQgcj10aGlz''@;'; put 'put ''LmxpYixpPXRoaXMudGFibGUsbz10aGlzLmRvd25sb2FkRm9ybWF0LnJlcGxhY2UoIl9EREwiLCIiKSxhPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLGw9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2M7Y29uc3QgdT10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5v''@;'; put 'put ''cGVuKGErdSsiLz9fcHJvZ3JhbT0iK2wrIi9zZXJ2aWNlcy9wdWJsaWMvZ2V0ZGRsIitgJmRzPSR7aX0mbGlicmVmPSR7cn0mZmxhdm91cj0ke299JHsiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU/YCZfY29udGV4dG5hbWU9JHt0aGlzLnNhc2pzQ29uZmlnLmNvbnRl''@;'; put 'put ''eHROYW1lfWA6IiJ9YCksdGhpcy5vcGVuRG93bmxvYWQ9ITF9b25DbGlDb21tYW5kRm9jdXMocil7ci5wcmV2ZW50RGVmYXVsdCgpLHIudGFyZ2V0LnNlbGVjdCgpfWVkaXRUYWJsZSgpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIit0aGlzLmxpYlRhYil9dGFibGVFZGl0''@;'; put 'put ''RXhpc3RzKCl7bGV0IHI9e307cj1Vbi5lZGl0b3IubGlic0FuZFRhYmxlcztsZXQgaT10aGlzLmxpYlRhYi5zcGxpdCgiLiIpWzFdLG89dGhpcy5saWJUYWIuc3BsaXQoIi4iKVswXTtyZXR1cm4hIXJbb10mJnJbb10uaW5jbHVkZXMoaSl9Z29Ub0xpbmVhZ2UoKXtsZXQgaT1gL3ZpZXcvbGlu''@;'; put 'put ''ZWFnZS8ke3RoaXMudGFibGV1cmkuc3BsaXQoIlxcIilbMV19L1JFVkVSU0VgO3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoaSl9c2hvd1dlYlF1ZXJ5KCl7bGV0IHI7dGhpcy53ZWJRdWVyeT0hMCxyPXR5cGVvZiB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZD4idSI/MDpw''@;'; put 'put ''YXJzZUludCh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCk7bGV0IGk9d2luZG93LmxvY2F0aW9uLnBvcnQubGVuZ3RoPjA/IjoiK3dpbmRvdy5sb2NhdGlvbi5wb3J0OiIiO2NvbnN0IG89dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTtsZXQgbD1gJHt3aW5k''@;'; put 'put ''b3cubG9jYXRpb24ucHJvdG9jb2x9Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZX0ke2l9LyR7b30vP19wcm9ncmFtPSR7dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2N9L3NlcnZpY2VzL3B1YmxpYy9nZXRyYXdkYXRhJnR5cGU9V0VCJHt0aGlzLndlYlF1ZXJ5VGFiPyJUQUIiOiJDU1YifSZ0''@;'; put 'put ''YWJsZT0ke3RoaXMudGFibGVUaXRsZX0keyImZmlsdGVyPSIrcn1gO3RoaXMud2ViUXVlcnlUZXh0PWwucmVwbGFjZSgvIC9naW0sIiUyMCIpfWNvcHlUb0NsaXAoKXtuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLndlYlF1ZXJ5VGV4dCl9Z29Ub1ZpZXdlcigpe3RoaXMucm91''@;'; put 'put ''dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEiKX1zaG93VGFibGVTZWxlY3QoKXt0aGlzLnRhYmxlRmxhZz0hdGhpcy50YWJsZUZsYWd9Y2hlY2tFeHBhbmQocil7fWNvbGxhcHNlTGlicmFyeUl0ZW1zKHIsaSl7ci5mb3JFYWNoKG89PntvLkxJQlJBUllSRUYhPT1pLkxJQlJBUllSRUYm''@;'; put 'put ''JihvLmV4cGFuZGVkPSExKX0pfWxvYWRNb3JlTGlicmFyaWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2luZz0hMCx0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcmllcywhMCksdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEp''@;'; put 'put ''fXRyZWVOb2RlQ2xpY2tlZChyLGkpeyJDb2xsYXBzZSI9PT1yLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxpKX1saWJyYXJ5RXhwYW5kZWRDaGFuZ2UocixpKXtyJiZ0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVz''@;'; put 'put ''LGkpfWxpYnJhcnlPbkNsaWNrKHIsaSxvKXt2YXIgYT10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtpZihpLnRhYmxlcz9pLmV4cGFuZGVkPSEhb3x8IWkuZXhwYW5kZWQ6eWllbGQgYS5zZWxlY3RUYWJsZShyLCExLGkpLGkuZXhwYW5kZWQpe2EuY2RmLmRldGVjdENoYW5nZXMoKTtsZXQg''@;'; put 'put ''bD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjc2VhcmNoXyR7aS5MSUJSQVJZUkVGfWApO2wmJmwuZm9jdXMoKSxpJiZpLmxpYmluZm8mJihhLmxpYmluZm89aS5saWJpbmZvKSxhLmxpYiYmYS50YWJsZSYmIW8/YS5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhIl0se3NraXBMb2NhdGlv''@;'; put 'put ''bkNoYW5nZTohMCxxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KS50aGVuKCgpPT57YS5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhLyIrYS5saWJdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KX0pOmEubGliJiYhYS50YWJsZSYmYS5sb2NhdGlvbi5yZXBsYWNl''@;'; put 'put ''U3RhdGUoIi92aWV3L2RhdGEvIithLmxpYil9YS5jb2xsYXBzZUxpYnJhcnlJdGVtcyhhLmxpYnJhcmllcyxpKX0pKCl9b25UYWJsZUNsaWNrKHIsaSl7dGhpcy5pc1RhYmxlU3dpdGNoaW5nfHwodGhpcy5zd2l0Y2hpbmdUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5zd2l0Y2hpbmdUaW1l''@;'; put 'put ''b3V0KSx0aGlzLnN3aXRjaGluZ1RpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMubGliPWkuTElCUkFSWVJFRix0aGlzLnRhYmxlPXIsdGhpcy5zZWxlY3RMaWJUYWJsZShyKSx0aGlzLnZpZXdEYXRhKDApfSw1MCkpfXNlbGVjdFRhYmxlKHIsaSxvKXt2YXIgYT10aGlzO3JldHVybiBDcihm''@;'; put 'put ''dW5jdGlvbiooKXtvLmxvYWRpbmdUYWJsZXM9ITAsYS50YWJsZT0hMSxhLnRhYmxlRGlzYWJsZT0hMCwiUGxlYXNlIHNlbGVjdCBsaWJyYXJ5IiE9PXI/VW4udmlld2VyLnRhYmxlc1NldCYmaT8oYS5hYm9ydEFjdGl2ZT0hMSxhLnRhYmxlRGlzYWJsZT0hMSxhLnRhYmxlcz1Vbi52aWV3ZXIu''@;'; put 'put ''dGFibGVzLGEubGliaW5mbz1Vbi52aWV3ZXIubGliaW5mbyk6KGEubGliaW5mbz1udWxsLHlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMocikudGhlbihsPT57YS5hYm9ydEFjdGl2ZT0hMSxhLnRhYmxlRGlzYWJsZT0hMTtsZXQgdT1sLm1wdGFibGVzLm1hcChmdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gZy5NRU1OQU1FfSk7YS5saWJpbmZvPWwubGliaW5mb3x8W10sYS50YWJsZXM9dSxvJiYoby50YWJsZXM9dSxvLmxpYmluZm89YS5saWJpbmZvKSxVbi52aWV3ZXIubGlicmFyaWVzPWEubGlicmFyaWVzLFVuLnZpZXdlci5saWJyYXJ5PWEubGliLFVuLnZpZXdlci50YWJsZXM9''@;'; put 'put ''YS50YWJsZXMsVW4udmlld2VyLmxpYmluZm89YS5saWJpbmZvLFVuLnZpZXdlci50YWJsZXNTZXQ9ITB9KS5jYXRjaChsPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGwpLGEuYWJvcnRBY3RpdmU9ITAsYS5ub0RhdGE9ITAsYS50YWJsZVRpdGxlPSIiLGEudGFibGVEaXNhYmxlPSEwfSkpOmEu''@;'; put 'put ''dGFibGVEaXNhYmxlPSEwLFVuLnZpZXdlci5saWJyYXJ5PWEubGliLGl8fGEuY2xlYXJHbG9iYWxzRmlsdGVyKCksby5sb2FkaW5nVGFibGVzPSExLG8uZXhwYW5kZWQ9IW8uZXhwYW5kZWR9KSgpfXNlbGVjdExpYlRhYmxlKHIsaSl7IlBsZWFzZSBzZWxlY3QgdGFibGUiIT09cj8odGhpcy5h''@;'; put 'put ''Y3Rpb25EaXNhYmxlPSExLHRoaXMubGliVGFiPXRoaXMubGliKyIuIit0aGlzLnRhYmxlKTp0aGlzLmFjdGlvbkRpc2FibGU9ITAsVW4udmlld2VyLnRhYmxlPXIsaXx8dGhpcy5jbGVhckdsb2JhbHNGaWx0ZXIoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMubGliVGFiKX1jbGVhckds''@;'; put 'put ''b2JhbHNGaWx0ZXIoKXtVbi52aWV3ZXIuZmlsdGVyLmxpYmRzPSIiLFVuLnZpZXdlci5maWx0ZXIud2hlcmVDbGF1c2U9IiIsVW4udmlld2VyLmZpbHRlci5ncm91cExvZ2ljPSIiLFVuLnZpZXdlci5maWx0ZXIuY2xhdXNlcz1bXSxVbi52aWV3ZXIuZmlsdGVyLmNvbHM9W10sVW4udmlld2Vy''@;'; put 'put ''LmZpbHRlci52YWxzPVtdfWxpYlRhYkFjdGl2ZShyLGkpe3JldHVybiEhdGhpcy5saWJUYWImJnIrIi4iK2k9PT10aGlzLmxpYlRhYn10cmVlT25GaWx0ZXIocixpKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKHIsaSl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2''@;'; put 'put ''aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmxpYnJhcmllcyx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWU5BTUUiKSxVbi52aWV3ZXIubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofWxpYnJhcnlSZXNldEZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5yZXNldEFy''@;'; put 'put ''cmF5RmlsdGVyKHRoaXMubGlicmFyaWVzKX12aWV3RGF0YShyKXt2YXIgaT10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtsZXQgbztpZihpLmlzVGFibGVTd2l0Y2hpbmc9ITAsaS5sb2FkaW5nVGFibGVWaWV3PSEwLHR5cGVvZiBpLmxpYkRhdGFzZXQ+InUiKW89aS5saWIrIi4iK2kudGFi''@;'; put 'put ''bGU7ZWxzZSBpZih0eXBlb2YgaS5saWI+InUiJiZ0eXBlb2YgaS50YWJsZT4idSIpe2xldCB1PVtdO2lmKHU9aS5saWJEYXRhc2V0LnNwbGl0KCIuIikseWllbGQgaS5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKGc9PntpLmxpYnJhcmllcz1nLnNhc2xpYnN9KS5jYXRjaChnPT57''@;'; put 'put ''aS5sb2dnZXJTZXJ2aWNlLmVycm9yKGcpfSksaS5saWI9dVswXSxVbi52aWV3ZXIuc3RhcnR1cFNldClpLnRhYmxlcz1Vbi52aWV3ZXIudGFibGVzO2Vsc2V7bGV0IGc9aS5saWJyYXJpZXMuZmluZChFPT5FLkxJQlJBUllSRUYudG9Mb3dlckNhc2UoKT09PWkubGliLnRvTG93ZXJDYXNlKCkp''@;'; put 'put ''O3lpZWxkIGkuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoaS5saWIpLnRoZW4oRT0+e2kudGFibGVzPUUubXB0YWJsZXMubWFwKGZ1bmN0aW9uKE8pe3JldHVybiBPLk1FTU5BTUV9KSxnLnRhYmxlcz1pLnRhYmxlcyxVbi52aWV3ZXIubGlicmFyaWVzPWkubGlicmFyaWVzLFVuLnZpZXdl''@;'; put 'put ''ci50YWJsZXM9aS50YWJsZXMsVW4udmlld2VyLnN0YXJ0dXBTZXQ9ITB9KS5jYXRjaChFPT57aS5sb2dnZXJTZXJ2aWNlLmVycm9yKEUpfSl9aS50YWJsZT11WzFdLGkudGFibGVGbGFnPSExLG89aS5saWJEYXRhc2V0LGkubGliVGFiPW99ZWxzZSB5aWVsZCBpLnNhc1N0b3JlU2VydmljZS52''@;'; put 'put ''aWV3TGlicygpLnRoZW4odT0+e2kubGlicmFyaWVzPXUuc2FzbGlic30pLmNhdGNoKHU9PntpLmxvZ2dlclNlcnZpY2UuZXJyb3IodSl9KSx0eXBlb2YgaS50YWJsZTwidSImJihVbi52aWV3ZXIuc3RhcnR1cFNldD9pLnRhYmxlcz1Vbi52aWV3ZXIudGFibGVzOnlpZWxkIGkuc2FzU3RvcmVT''@;'; put 'put ''ZXJ2aWNlLnZpZXdUYWJsZXMoaS5saWIpLnRoZW4odT0+e2kudGFibGVzPXUubXB0YWJsZXMubWFwKGZ1bmN0aW9uKGcpe3JldHVybiBnLk1FTU5BTUV9KX0pLmNhdGNoKHU9PntpLmxvZ2dlclNlcnZpY2UuZXJyb3IodSksaS5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhIl0se3F1ZXJ5''@;'; put 'put ''UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pfSksaS50YWJsZUZsYWc9ITEsbz1pLmxpYisiLiIraS50YWJsZSxpLnRhYmxlVGl0bGU9byxpLmxpYlRhYj1vKTtpLnJvdXRlci51cmwuc3BsaXQoIi8iKS5sZW5ndGg+MyYmbyYmKHlpZWxkIGkuc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKG8s''@;'; put 'put ''cikudGhlbih1PT57aWYodS5xdWVyeS5sZW5ndGg+MCYmInZpZXciPT09VW4ucm9vdFBhcmFtJiYwPT09VW4udmlld2VyLmZpbHRlci5jbGF1c2VzLmxlbmd0aCYmKFVuLnZpZXdlci5maWx0ZXIucXVlcnk9aS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh1LnF1ZXJ5KSxVbi52aWV3ZXIuZmls''@;'; put 'put ''dGVyLmxpYmRzPWkucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSxpLnNhc1N0b3JlU2VydmljZS5pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKCJ2aWV3ZXIiLHUuY29scykpLGkuYWJvcnRBY3RpdmU9ITEsaS5maWx0ZXJDb2xzPXUuY29scyx5Z2UoaS5maWx0ZXJDb2xzLFtdLHUu''@;'; put 'put ''JHZpZXdkYXRhKSxpLm51bWJlck9mUm93cz11LnNhc3BhcmFtc1swXS5OT0JTLGkuaGVhZGVyUGtzPXUuc2FzcGFyYW1zWzBdLlBLX0ZJRUxEUy5zcGxpdCgiICIpLCJTQVM5Ij09PWkuc2FzanNDb25maWcuc2VydmVyVHlwZSl7bGV0IEU9dS5zYXNwYXJhbXNbMF0uVEFCTEVVUkk7RSYmRS5s''@;'; put 'put ''ZW5ndGg+MCYmKGkudGFibGV1cmk9RSl9aWYoaS5ob3RUYWJsZS5kYXRhPXUudmlld2RhdGEsaS4kZGF0YUZvcm1hdHM9dS4kdmlld2RhdGEsaS5kc21ldGE9dS5kc21ldGEsaS52ZXJzaW9ucz11LnZlcnNpb25zfHxbXSxpLnNldERTTm90ZSgpLGkucXVlcnlUZXh0PXUuc2FzcGFyYW1zWzBd''@;'; put 'put ''LkZJTFRFUl9URVhULHUudmlld2RhdGEmJnUudmlld2RhdGEubGVuZ3RoPjApe2xldCBFPVtdLE89W107Zm9yKGxldCBNZSBpbiB1LnZpZXdkYXRhWzBdKU1lJiZPLnB1c2goTWUpO2NvbnN0IFo9e30sZWU9bmV3IFNldDtpZihBcnJheS5pc0FycmF5KHUuZHFydWxlcykpZm9yKGNvbnN0IE1l''@;'; put 'put ''IG9mIHUuZHFydWxlcykiTlVNQkVSX0ZPUk1BVCI9PT1NZS5SVUxFX1RZUEUmJihaW01lLkJBU0VfQ09MXT1NZS5SVUxFX1ZBTFVFKSwiSElEREVOIj09PU1lLlJVTEVfVFlQRSYmZWUuYWRkKE1lLkJBU0VfQ09MKTtjb25zdCB2ZT1bXTtmb3IobGV0IE1lPTA7TWU8Ty5sZW5ndGg7TWUrKyl7''@;'; put 'put ''Y29uc3QgSGU9T1tNZV0sV2U9e2RhdGE6SGV9O1pbSGVdJiYoV2UucmVuZGVyZXI9X3plKFpbSGVdKSksZWUuaGFzKEhlKSYmdmUucHVzaChNZSksRS5wdXNoKFdlKX1pLmNvbE5hbWVzPU8saS5ob3RUYWJsZS5jb2xIZWFkZXJzPWdBKE8sdS5jb2xzLGkudXNlTGFiZWxzKSxpLmhvdFRhYmxl''@;'; put 'put ''LmNvbHVtbnM9RSxpLmhpZGRlblZpZXdDb2x1bW5zPXZlfWVsc2UgaS5jb2xOYW1lcz1bXSxpLmhvdFRhYmxlLmNvbEhlYWRlcnM9W10saS5ob3RUYWJsZS5jb2x1bW5zPVtdLGkuaGlkZGVuVmlld0NvbHVtbnM9W107aS5ob3RUYWJsZS5jZWxscz0oKT0+KHtyZWFkT25seTohMH0pLGkudXBk''@;'; put 'put ''YXRlSG90VGFibGVTZXR0aW5ncygpLGkudGFibGVGbGFnPSExO2xldCBnPVtdO2c9by5zcGxpdCgiLiIpLGkubGliPWdbMF0saS50YWJsZT1nWzFdLDA9PT1pLmhvdFRhYmxlLmRhdGEubGVuZ3RoPyhpLm5vRGF0YT0hMCxpLnRhYmxlRmxhZz0hMCk6KGkubm9EYXRhPSExLGkudGFibGVGbGFn''@;'; put 'put ''PSExKSxpLm5vRGF0YVJlcUVycj0hMX0pLmNhdGNoKHU9PntpLmxvZ2dlclNlcnZpY2UuZXJyb3IodSksaS5hYm9ydEFjdGl2ZT0hMCxpLm5vRGF0YVJlcUVycj0hMH0pKSxpLnJvdXRlci51cmwuaW5jbHVkZXMoIi9kYXRhIikmJm8mJmkucm91dGVyLm5hdmlnYXRlKDAhPT1yP1siL3ZpZXcv''@;'; put 'put ''ZGF0YS8iK28rIi8iK3JdOlsiL3ZpZXcvZGF0YS8iK29dLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KTtsZXQgYT1pLnRhYmxlLGw9aS5saWJyYXJpZXMuZmluZCh1PT51LkxJQlJBUllSRUYudG9Mb3dlckNhc2UoKT09PWkubGliLnRvTG93ZXJDYXNlKCkpO2w/KFVuLnZpZXdl''@;'; put 'put ''ci5saWJyYXJpZXMubGVuZ3RoPjAmJihpLmxpYnJhcmllcz1Vbi52aWV3ZXIubGlicmFyaWVzLGkubGlicmFyaWVzU2VhcmNoPVVuLnZpZXdlci5saWJyYXJpZXNTZWFyY2gpLGkubGlicmFyeU9uQ2xpY2soaS5saWIsbCwhMCkpOmkubGliaW5mbz1bXSxpLnRhYmxlPWF8fGkudGFibGUsaS5s''@;'; put 'put ''aWJyYXJpZXMmJmkuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKGkubGlicmFyaWVzKSxpLnJvdXRlci51cmwuaW5jbHVkZXMoIi9kYXRhIikmJmkuZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLGkubG9hZGluZ1RhYmxlVmlldz0hMSxzZXRUaW1lb3V0KCgpPT57IWkubm9EYXRh''@;'; put 'put ''JiYhaS5ub0RhdGFSZXFFcnImJm8mJmkuc2V0dXBIb3QoKX0sNTApLHNldFRpbWVvdXQoKCk9PntpLmlzVGFibGVTd2l0Y2hpbmc9ITF9LDMwMCksc2V0VGltZW91dCgoKT0+e2kuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0sNTAwKSxpLmhvdEluc3RhbmNlQ2xpY2tMaXN0ZW5lcnx8c2V0VGlt''@;'; put 'put ''ZW91dCgoKT0+e2xldCB1PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3RJbnN0YW5jZSIpO3UmJih1LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsZz0+e3NldFRpbWVvdXQoKCk9PntsZXQgRT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZGVidWctc3dpdGNoLWl0ZW0iKXx8dm9p''@;'; put 'put ''ZCAwO0UmJkUuY2xpY2soKX0sMTAwKX0pLGkuaG90SW5zdGFuY2VDbGlja0xpc3RlbmVyPSEwKX0sMWUzKX0pKCl9bWF4V2lkdGhDaGVrZXIocixpKXtyZXR1cm4gcj4yMDA/MjAwOnJ9b3BlblFiKCl7dGhpcy5maWx0ZXI9ITAsdGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2FzU3Rv''@;'; put 'put ''cmVTZXJ2aWNlLnNldFF1ZXJ5VmFyaWFibGVzKHRoaXMubGliKyIuIit0aGlzLnRhYmxlLHRoaXMuZmlsdGVyQ29scyl9c2VuZENsYXVzZSgpe3ZhciByPXRoaXM7cmV0dXJuIENyKGZ1bmN0aW9uKigpe3Iuc3VibWl0TG9hZGluZz0hMDtsZXQgaT1bXSxvPVtdO2lmKHR5cGVvZiByLmNsYXVz''@;'; put 'put ''ZXM+InUiKXJldHVybiByLm51bGxWYXJpYWJsZXM9ITAsdm9pZChyLnN1Ym1pdExvYWRpbmc9ITEpO3tsZXQgYT1yLmNsYXVzZXMucXVlcnlPYmo7aWYoYVswXS5lbGVtZW50cy5sZW5ndGg8MSlyZXR1cm4idmlldyI9PT1Vbi5yb290UGFyYW0mJihVbi52aWV3ZXIuZmlsdGVyLmNsYXVzZXM9''@;'; put 'put ''W10sVW4udmlld2VyLmZpbHRlci5xdWVyeT1bXSxVbi52aWV3ZXIuZmlsdGVyLmdyb3VwTG9naWM9IiIpLHZvaWQgci5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhLyIrci5saWJkc10se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2ZvcihsZXQgbD0wO2w8YS5sZW5ndGg7''@;'; put 'put ''bCsrKXtjb25zdCB1PWFbbF0uZWxlbWVudHM7aT11LmZpbHRlcihmdW5jdGlvbihnKXtyZXR1cm4gbnVsbD09PWcudmFyaWFibGV9KSxpLmxlbmd0aCYmby5wdXNoKHUpfX1pZihvLmxlbmd0aClyZXR1cm4gci5udWxsVmFyaWFibGVzPSEwLHZvaWQoci5zdWJtaXRMb2FkaW5nPSExKTt7Y29u''@;'; put 'put ''c3QgYT17Z3JvdXBMb2dpYzpyLmNsYXVzZXMuZ3JvdXBMb2dpYyxmaWx0ZXJHcm91cHM6W119O3IuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKHU9Pntjb25zdCBnPXtmaWx0ZXJDbGF1c2VzOltdfTt1LmVsZW1lbnRzLmZvckVhY2goRT0+e2cuZmlsdGVyQ2xhdXNlcy5wdXNoKHIuaGVscGVy''@;'; put 'put ''U2VydmljZS5kZWVwQ2xvbmUoRSkpfSksZy5jbGF1c2VMb2dpYz11LmNsYXVzZUxvZ2ljLGEuZmlsdGVyR3JvdXBzLnB1c2goci5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShnKSl9KTtjb25zdCBsPXIuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoYSk7eWllbGQgci5z''@;'; put 'put ''YXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KHIubGliZHMsbCkudGhlbih1PT57ci5xdWVyeVRleHQ9dS5yZXN1bHRbMF0uRklMVEVSX1RFWFQ7bGV0IGc9dS5yZXN1bHRbMF0uRklMVEVSX1JLO3Iucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8iK3IubGliZHMrIi8iK2ddLHtxdWVyeVBh''@;'; put 'put ''cmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KSxyLnZpZXdEYXRhKGcpLHIuZmlsdGVyPSExfSkuY2F0Y2godT0+e3IubG9nZ2VyU2VydmljZS5lcnJvcih1KX0pLHIuc3VibWl0TG9hZGluZz0hMX19KSgpfXJlbW92ZVF1ZXJ5KCl7dGhpcy5zYXNTdG9yZVNlcnZpY2UucmVtb3ZlQ2xhdXNlKCl9''@;'; put 'put ''ZGF0YXNldEluZm9Nb2RhbFJvd0NsaWNrZWQocil7dm9pZCAwIT09ci5MT0FEX1JFRiYmdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Avc3RhZ2UvJHtyLkxPQURfUkVGfWBdKX1zZXREU05vdGUoKXtjb25zdCByPXRoaXMuZHNtZXRhLmZpbmQoYT0+Ik5PVEVTIj09PWEuTkFNRSksaT10aGlzLmRz''@;'; put 'put ''bWV0YS5maW5kKGE9PiJERF9MT05HREVTQyI9PT1hLk5BTUUpLG89dGhpcy5kc21ldGEuZmluZChhPT4iRERfU0hPUlRERVNDIj09PWEuTkFNRSk7dGhpcy5kc05vdGU9ciYmci5WQUxVRT9yLlZBTFVFOmkmJmkuVkFMVUU/aS5WQUxVRTpvJiZvLlZBTFVFP28uVkFMVUU6IiJ9Y2xlYW51cEhv''@;'; put 'put ''dEluc3RhbmNlKCl7aWYodGhpcy5ob3RJbnN0YW5jZSYmIXRoaXMuaG90SW5zdGFuY2UuaXNEZXN0cm95ZWQpdHJ5e3RoaXMuaG90SW5zdGFuY2UuZGVzdHJveSgpfWNhdGNoKHIpe2NvbnNvbGUud2FybigiRXJyb3IgZGVzdHJveWluZyBIYW5kc29udGFibGUgaW5zdGFuY2U6IixyKX10aGlz''@;'; put 'put ''LmhvdEluc3RhbmNlPW51bGwsdGhpcy5ob29rc0F0dGFjaGVkPSExfXNldHVwSG90KCl7Y29uc3Qgcj1EYXRlLm5vdygpO2lmKCEoci10aGlzLmxhc3RTZXR1cFRpbWU8NTAwKSYmKHRoaXMubGFzdFNldHVwVGltZT1yLCF0aGlzLmxvYWRpbmdUYWJsZVZpZXcmJnRoaXMubGliRGF0YXNldCkp''@;'; put 'put ''e2lmKCghdGhpcy5ob3RJbnN0YW5jZXx8dGhpcy5ob3RJbnN0YW5jZS5pc0Rlc3Ryb3llZCkmJih0aGlzLmhvdEluc3RhbmNlPXRoaXMuaG90VGFibGVDb21wb25lbnQ/LmhvdEluc3RhbmNlKSx0aGlzLmhvdEluc3RhbmNlJiYhdGhpcy5ob3RJbnN0YW5jZS5pc0Rlc3Ryb3llZClyZXR1cm4g''@;'; put 'put ''dm9pZCB0aGlzLmNvbmZpZ3VyZUhvdEluc3RhbmNlKCk7c2V0VGltZW91dCgoKT0+e3RoaXMuaXNUYWJsZVN3aXRjaGluZ3x8dGhpcy5sb2FkaW5nVGFibGVWaWV3fHwhdGhpcy5saWJEYXRhc2V0fHwodGhpcy5ob3RJbnN0YW5jZT10aGlzLmhvdFRhYmxlQ29tcG9uZW50Py5ob3RJbnN0YW5j''@;'; put 'put ''ZSx0aGlzLmNvbmZpZ3VyZUhvdEluc3RhbmNlKCkpfSwyNTApfX1jb25maWd1cmVIb3RJbnN0YW5jZSgpeyF0aGlzLmhvdEluc3RhbmNlfHx0aGlzLmhvdEluc3RhbmNlLmlzRGVzdHJveWVkfHwodGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7aGVpZ2h0OnRoaXMuaG90VGFibGUu''@;'; put 'put ''aGVpZ2h0LG1vZGlmeUNvbFdpZHRoOihyLGkpPT5yPjUwMD81MDA6cixhZnRlckdldENvbEhlYWRlcjoocixpKT0+e2lmKHRoaXMuaG90SW5zdGFuY2UmJiF0aGlzLmhvdEluc3RhbmNlLmlzRGVzdHJveWVkKXRyeXtjb25zdCBvPXRoaXMuaG90SW5zdGFuY2UuY29sVG9Qcm9wKHIpO28mJnRo''@;'; put 'put ''aXMuaGVhZGVyUGtzLmluZGV4T2Yobyk+LTEmJmkuY2xhc3NMaXN0LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIiksaS5jbGFzc0xpc3QuYWRkKFVuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9Y2F0Y2h7aS5jbGFzc0xpc3QuYWRkKFVuLmhhbmRzb250YWJsZS5kYXJr''@;'; put 'put ''VGFibGVIZWFkZXJDbGFzcyl9ZWxzZSBpLmNsYXNzTGlzdC5hZGQoVW4uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX19KSx0aGlzLmhvb2tzQXR0YWNoZWR8fCh0aGlzLmhvdEluc3RhbmNlLmFkZEhvb2soImFmdGVyUmVuZGVyIiwoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2li''@;'; put 'put ''aWxpdHkoKX0pLHRoaXMuaG90SW5zdGFuY2UuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0sNTApfSksdGhpcy5ob29rc0F0dGFjaGVkPSEwKSx0aGlzLmhvdEluc3RhbmNlLnJlbmRlcigpKX1sb2FkV2l0aFBh''@;'; put 'put ''cmFtZXRlcnMoKXt2YXIgcj10aGlzO3JldHVybiBDcihmdW5jdGlvbiooKXtyLnN3aXRjaEZsYWc9ITAsci50YWJsZVRpdGxlPXIucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbXx8MCxyLnVybEZpbHRlclBrPXBhcnNlSW50KHIucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkfHwi''@;'; put 'put ''MCIpO2xldCBvPXIucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbTtyLmxpYkRhdGFzZXQ9byxvLmluY2x1ZGVzKCIuIil8fChyLmxpYj1vKSx5aWVsZCByLnZpZXdEYXRhKHIudXJsRmlsdGVyUGspLHIubm9EYXRhP3NldFRpbWVvdXQoKCk9PntyLnRhYmxlRmxhZz0hMH0sMTIwMCk6c2V0''@;'; put 'put ''VGltZW91dCgoKT0+e3IudGFibGVGbGFnPSExfSwxMjAwKX0pKCl9bG9hZFdpdGhvdXRQYXJhbWV0ZXJzKCl7dmFyIHI9dGhpcztyZXR1cm4gQ3IoZnVuY3Rpb24qKCl7ci5zd2l0Y2hGbGFnPSExLHIubGlicmFyaWVzTG9hZGluZz0hMCxVbi52aWV3ZXIuc3RhcnR1cFNldD9zZXRUaW1lb3V0''@;'; put 'put ''KCgpPT57ci5saWJyYXJpZXM9VW4udmlld2VyLmxpYnJhcmllcyxyLmxpYnJhcmllc1NlYXJjaD1Vbi52aWV3ZXIubGlicmFyaWVzU2VhcmNoLHIubGliPVVuLnZpZXdlci5saWJyYXJ5LHIubGlicmFyaWVzVHJlZUV4cGFuZGVkPSEwLHIubGlicmFyaWVzTG9hZGluZz0hMSxyLmhlbHBlclNl''@;'; put 'put ''cnZpY2UuZGlzcGxheUxpYnJhcmllcyhyLmxpYnJhcmllcyl9LDEwMCk6KHIubm9EYXRhUmVxRXJyPSExLHlpZWxkIHIuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihpPT57ci5saWJyYXJpZXM9aS5zYXNsaWJzLFVuLnZpZXdlci5saWJyYXJpZXM9ci5saWJyYXJpZXMsVW4udmll''@;'; put 'put ''d2VyLnN0YXJ0dXBTZXQ9ITAsci5saWJyYXJpZXNMb2FkaW5nPSExLHIuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHIubGlicmFyaWVzKX0pLmNhdGNoKGk9PntyLmxvZ2dlclNlcnZpY2UuZXJyb3IoaSksci5saWJyYXJpZXNMb2FkaW5nPSExLHIubm9EYXRhUmVxRXJyPSEwfSkp''@;'; put 'put ''fSkoKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnNjaGVkdWxlRmlsdGVyT3ZlcmZsb3dDaGVjaygpfXNjaGVkdWxlRmlsdGVyT3ZlcmZsb3dDaGVjaygpe2NvbnN0IHI9dGhpcy5pbmZvQmFyPy5uYXRpdmVFbGVtZW50O2lmKCFyKXJldHVybjtjb25zdCBpPXIucXVlcnlTZWxlY3Rvcigi''@;'; put 'put ''LmluZm9CYXItdGV4dCIpO2lmKCFpKXJldHVybjtjb25zdCBvPWAke3RoaXMucXVlcnlUZXh0fXwke2kuY2xpZW50V2lkdGh9fCR7dGhpcy5maWx0ZXJFeHBhbmRlZH1gO28hPT10aGlzLmZpbHRlck1lYXN1cmVkS2V5JiYodGhpcy5maWx0ZXJNZWFzdXJlZEtleT1vLHNldFRpbWVvdXQoKCk9''@;'; put 'put ''Pnt0aGlzLmZpbHRlckV4cGFuZGVkfHwodGhpcy5maWx0ZXJPdmVyZmxvd3M9aS5zY3JvbGxXaWR0aD5pLmNsaWVudFdpZHRoKX0pKX10b2dnbGVGaWx0ZXJQYW5lbCgpe3RoaXMuZmlsdGVyRXhwYW5kZWQ9IXRoaXMuZmlsdGVyRXhwYW5kZWR9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91''@;'; put 'put ''dCgoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0sMWUzKX1uZ09uRGVzdHJveSgpe3RoaXMuX3F1ZXJ5UGFyYW1zPy51bnN1YnNjcmliZSgpLHRoaXMuaXNUYWJsZVN3aXRjaGluZz0hMCx0aGlzLnN3aXRjaGluZ1RpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5zd2l0Y2hpbmdU''@;'; put 'put ''aW1lb3V0KSx0aGlzLnN3aXRjaGluZ1RpbWVvdXQ9bnVsbCksdGhpcy5jbGVhbnVwSG90SW5zdGFuY2UoKSx0aGlzLmFyaWFPYnNlcnZlciYmKHRoaXMuYXJpYU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLmFyaWFPYnNlcnZlcj12b2lkIDApLHRoaXMuYXJpYUNoZWNrSW50ZXJ2YWwmJihj''@;'; put 'put ''bGVhckludGVydmFsKHRoaXMuYXJpYUNoZWNrSW50ZXJ2YWwpLHRoaXMuYXJpYUNoZWNrSW50ZXJ2YWw9dm9pZCAwKX1maXhBcmlhQWNjZXNzaWJpbGl0eSgpe2NvbnN0IHI9KCk9Pntkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuaHQtd3JhcHBlciwgLnd0SG9sZGVyLCBbaWRePSJodF8i''@;'; put 'put ''XScpLmZvckVhY2goRT0+e0UucmVtb3ZlQXR0cmlidXRlKCJyb2xlIiksRS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQiKSxFLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1jb2xjb3VudCIpLEUucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpfSk7Y29uc3Qgbz1k''@;'; put 'put ''b2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT0idHJlZWdyaWQiXScpLGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9InByZXNlbnRhdGlvbiJdJyk7by5mb3JFYWNoKEU9PntFLnJlbW92ZUF0dHJpYnV0ZSgicm9sZSIpLEUucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXJv''@;'; put 'put ''d2NvdW50IiksRS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtY29sY291bnQiKSxFLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1tdWx0aXNlbGVjdGFibGUiKX0pLGEuZm9yRWFjaChFPT57RS5xdWVyeVNlbGVjdG9yQWxsKCJidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBbdGFiaW5kZXhd''@;'; put 'put ''LCBbb25jbGlja10sIFtjb250ZW50ZWRpdGFibGVdIikubGVuZ3RoPjAmJkUucmVtb3ZlQXR0cmlidXRlKCJyb2xlIil9KSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbYXJpYS1yb3djb3VudD0iLTEiXScpLmZvckVhY2goRT0+e0UucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXJvd2NvdW50''@;'; put 'put ''Iil9KSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJ0YWJsZSIpLmZvckVhY2goRT0+e0UuZ2V0QXR0cmlidXRlKCJyb2xlIil8fEUuc2V0QXR0cmlidXRlKCJyb2xlIiwidGFibGUiKSxFLnF1ZXJ5U2VsZWN0b3JBbGwoInRoIikuZm9yRWFjaChaPT57Wi5nZXRBdHRyaWJ1dGUoInNjb3Bl''@;'; put 'put ''Iil8fFouc2V0QXR0cmlidXRlKCJzY29wZSIsImNvbCIpfSl9KSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBbY29udGVudGVkaXRhYmxlXSIpLmZvckVhY2goRT0+e2lmKCFFLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpJiYh''@;'; put 'put ''RS5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIpKXtjb25zdCBPPUUudGV4dENvbnRlbnQ/LnRyaW0oKTtPJiZFLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsTyl9fSl9O3IoKSxzZXRUaW1lb3V0KHIsMTAwKSxzZXRUaW1lb3V0KHIsNTAwKSxzZXRUaW1lb3V0KHIsMWUzKSxzZXRU''@;'; put 'put ''aW1lb3V0KHIsMmUzKSx0aGlzLmFyaWFDaGVja0ludGVydmFsfHwodGhpcy5hcmlhQ2hlY2tJbnRlcnZhbD1zZXRJbnRlcnZhbChyLDNlMykpLHRoaXMuYXJpYU9ic2VydmVyfHwodGhpcy5hcmlhT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoaT0+e2xldCBvPSExO2kuZm9yRWFjaChh''@;'; put 'put ''PT57ImF0dHJpYnV0ZXMiPT09YS50eXBlJiYoInJvbGUiPT09YS5hdHRyaWJ1dGVOYW1lfHwiYXJpYS1yb3djb3VudCI9PT1hLmF0dHJpYnV0ZU5hbWUpJiYobz0hMCksImNoaWxkTGlzdCI9PT1hLnR5cGUmJmEuYWRkZWROb2Rlcy5mb3JFYWNoKGw9PntpZihsLm5vZGVUeXBlPT09Tm9kZS5F''@;'; put 'put ''TEVNRU5UX05PREUpe2NvbnN0IHU9bDsodS5oYXNBdHRyaWJ1dGUoInJvbGUiKXx8dS5oYXNBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQiKSkmJihvPSEwKX19KX0pLG8mJnNldFRpbWVvdXQociw1MCl9KSx0aGlzLmFyaWFPYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkse2NoaWxkTGlz''@;'; put 'put ''dDohMCxzdWJ0cmVlOiEwLGF0dHJpYnV0ZXM6ITAsYXR0cmlidXRlRmlsdGVyOlsicm9sZSIsImFyaWEtcm93Y291bnQiLCJhcmlhLWNvbGNvdW50IiwiYXJpYS1tdWx0aXNlbGVjdGFibGUiXX0pKX1uZ0FmdGVyQ29udGVudEluaXQoKXt2YXIgcj10aGlzO3JldHVybiBDcihmdW5jdGlvbioo''@;'; put 'put ''KXtyLmhvdFRhYmxlLmRhdGEubGVuZ3RoPjAmJihyLnRhYmxlRmxhZz0hMCksci5fcXVlcnk9ci5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGk9PntyLndoZXJlU3RyaW5nPWkuc3RyaW5nLHIuY2xhdXNlcz1pLm9iaixyLmxpYmRzPWkubGliZHN9KSx0eXBlb2Ygci5yb3V0ZS5z''@;'; put 'put ''bmFwc2hvdC5wYXJhbXMubGliTWVtPCJ1Ij9yLmxvYWRXaXRoUGFyYW1ldGVycygpOnIubG9hZFdpdGhvdXRQYXJhbWV0ZXJzKCl9KSgpfXN0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpKHplKEYyKSx6ZShCcCksemUoaWMpLHplKHZj''@;'; put 'put ''KSx6ZShwMSksemUodWQpLHplKHgzKSx6ZShmaCksemUoVjApLHplKFVsKSl9LHRoaXMuXHUwMjc1Y21wPVByKHt0eXBlOmUsc2VsZWN0b3JzOltbImFwcC12aWV3ZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGksbyl7aWYoMSZpJiYoV28oVG1uLDUpLFdvKHhtbiw1KSxXbyhMNyw1KSxXbyhB''@;'; put 'put ''bW4sNSkpLDImaSl7bGV0IGE7Y2koYT11aSgpKSYmKG8uaG90SW5zdGFuY2VWaWV3Q2hpbGQ9YS5maXJzdCksY2koYT11aSgpKSYmKG8uaW5mb0Jhcj1hLmZpcnN0KSxjaShhPXVpKCkpJiYoby5ob3RUYWJsZUNvbXBvbmVudD1hLmZpcnN0KSxjaShhPXVpKCkpJiYoby5xdWVyeUZpbHRlckNv''@;'; put 'put ''bXBMaXN0PWEpfX0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6OTYsdmFyczoyOSxjb25zdHM6W1siY2xpQ29tbWFuZElucHV0IiwiIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFsicXVlcnlG''@;'; put 'put ''aWx0ZXIiLCIiXSxbInNlYXJjaEVsIiwiIl0sWyJpbmZvQmFyIiwiIl0sWyJob3RJbnN0YW5jZSIsIiJdLFszLCJzY3JvbGxlZFRvQm90dG9tIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWzEs''@;'; put 'put ''ImNvbnRlbnQtYXJlYSJdLFsxLCJtb2RhbCIsInotaW5kZXgtaGlnaGVzdCJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1iYWNrZHJvcCJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50''@;'; put 'put ''ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHkiXSxbMSwiY2xyLWNvbC1tZC02Il0sWzEsImRvd25sb2FkLXNlbGVjdCJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsidmFsdWUiLCJDU1YiXSxbInZhbHVl''@;'; put 'put ''IiwiU0FTIl0sWyJ2YWx1ZSIsIlBHU1FMX0RETCJdLFsidmFsdWUiLCJTQVNfRERMIl0sWyJ2YWx1ZSIsIlRTUUxfRERMIl0sWyJ2YWx1ZSIsIkVYQ0VMIl0sWyJ2YWx1ZSIsIk1BUktET1dOIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwi''@;'; put 'put ''YnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwic3VibWl0IiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImlkIl0sWzEsIm1vZGFsLWJvZHkiLCJ3ZWItcXVlcnkiXSxbMSwicm93Il0sWzEsImNsci1jb2wtbGctMTIiLCJjbHItY29sLW1k''@;'; put 'put ''LTEyIiwiY2xyLWNvbC1zbS0xMiIsImNsci1jb2wteHMtMTIiXSxbMSwiY2FyZCIsIm5vLWJvcmRlcnMiXSxbMSwiY2FyZC1oZWFkZXIiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJidG4tZ3JvdXAiXSxbMSwicmFkaW8iLCJidG4iLDMsImNsaWNrIl0sWyJ0eXBl''@;'; put 'put ''IiwicmFkaW8iLCJuYW1lIiwiYnRuLWdyb3VwLWRlbW8tcmFkaW9zIiwzLCJjaGVja2VkIl0sWzEsImNhcmQtYmxvY2siLCJ3ZWItcXVlcnktd3JhcHBlciIsIndvcmQtYnJlYWstYWxsIl0sWyJjbHJUZXh0YXJlYSIsIiIsInJvd3MiLCI0IiwiY29scyIsIjUwIiwidHlwZSIsInRleHQiLCJy''@;'; put 'put ''ZWFkb25seSIsIiIsMSwid2ViLXF1ZXJ5LXRleHQiLDMsImZvY3VzIiwidmFsdWUiXSxbMSwiY2FyZC1mb290ZXIiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMsImNsaWNrIiwibmd4Q2xpcGJvYXJkIl0sWyJhcmlhLW1vZGFsIiwidHJ1ZSIsMSwiZmlsdGVyLW1vZGFsIiwzLCJj''@;'; put 'put ''bHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwi''@;'; put 'put ''YnRuLXNtIiwzLCJjbGljayJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsidHlwZSIs''@;'; put 'put ''ImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwiY2FyZCIsIm5vLWJvcmRlcnMiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNv''@;'; put 'put ''bHVtbiJdLFszLCJvcGVuQ2hhbmdlIiwicm93Q2xpY2tlZCIsIm9wZW4iLCJkc21ldGEiLCJ2ZXJzaW9ucyJdLFszLCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLCJ2aWV3Ym94TW9kYWwiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwi''@;'; put 'put ''IiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkxpYnJhcmllcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJzZWFyY2giXSxbImFyaWEtbGFi''@;'; put 'put ''ZWwiLCJDbGVhciBzZWFyY2giLCJzaGFwZSIsInRpbWVzIl0sWyJhcmlhLWxhYmVsIiwiQ2xlYXIgc2VhcmNoIiwic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFu''@;'; put 'put ''Z2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsInJhY2stc2VydmVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRh''@;'; put 'put ''YmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwiaWQiLCJuZ01vZGVsIl0sWzQsIm5nVmFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImRjLWxvY2tlZC1jb250cm9sIiwi''@;'; put 'put ''YWN0aXZlIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJib2x0Il0sWyJhcmlhLWhpZGRlbiIs''@;'; put 'put ''InRydWUiLCJzaGFwZSIsInRhYmxlIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIl0sWyJyb2xlIiwiZGlhbG9nIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1kaWFsb2ci''@;'; put 'put ''XSxbMSwibW9kYWwtY29udGVudCJdLFsxLCJtb2RhbC1oZWFkZXIiXSxbImFyaWEtbGFiZWwiLCJDbG9zZSIsInR5cGUiLCJidXR0b24iLDEsImNsb3NlIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsImNsb3NlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJi''@;'; put 'put ''dG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwic3Bpbm5lciJdLFsxLCJtdC0xMCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIl0sWzEsImhlYWRlci1yb3ciLCJjbHItcm93IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsInctMTAwIiwibS0w''@;'; put 'put ''Il0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWzEsImNhcmQtYmxvY2siLCJub0RhdGEiXSxbMSwiY2xyLWZsZXgtMSJdLFsxLCJtdC0yLWkiLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWzEsImZvcm0tYmxvY2siLCJ0YWJsZS1zZWFyY2gtd3JhcHBlciIsInN3IiwiY2xyLWNvbC1tZCJdLFsi''@;'; put 'put ''Y2xyRm9ybSIsIiIsMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImlucHV0LXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2giLCJuYW1lIiwic2VhcmNoLWlucHV0IiwzLCJrZXl1cC5lbnRlciIsInR5cGUiXSxbImFyaWEtbGFiZWwiLCJT''@;'; put 'put ''ZWFyY2giLCJzaGFwZSIsInNlYXJjaCJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwibmFtZSIsIm51bWVyaWNfY2hlY2siLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsInRpdGxlLWNvbCIsImNsci1j''@;'; put 'put ''b2wtYXV0byIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LXNtLXJvdyJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJjbHItZmxleC1jb2x1bW4iLCJkLWZsZXgiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50''@;'; put 'put ''ZXIiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJhcmlhLWxhYmVsIiwiVmlldyBkYXRhc2V0IG1ldGEgaW5mbyIsInNoYXBlIiwiaW5mby1jaXJjbGUiLCJzaXplIiwiMjQiLDEsImlzLWhpZ2hsaWdodCIsImN1cnNvci1w''@;'; put 'put ''b2ludGVyIiwzLCJjbGljayJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJib2x0IiwxLCJjb2xvci15ZWxsb3ciLCJtci01Il0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyJdLFsxLCJvcHRpb25zLWNv''@;'; put 'put ''bCIsImNsci1jb2wtbWQiXSxbMSwib3B0aW9ucy1kcm9wZG93biIsMywiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siXSxbMSwiY2xyLWNvbC1tZC0xMiIsImluZm9CYXIiLDMsImV4cGFuZGVkIl0sWyJhcmlhLWxhYmVsIiwiU2VhcmNoIiwic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIl0sWyJj''@;'; put 'put ''bHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImFyaWEtbGFiZWwiLCJSZWxvYWQgZGF0YSIsInNoYXBlIiwicmVmcmVzaCIsMSwicmVmcmVzaC10YWJsZSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLCJjbHJEcm9wZG93blRyaWdn''@;'; put 'put ''ZXIiLCIiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwiZmlsdGVyU2lkZSJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJjb2ciLCJzaXplIiwiMTUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0Iiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90''@;'; put 'put ''dG9tLXJpZ2h0Il0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsInZpZXctY2FyZHMiXSxbImNsckRyb3Bkb3duSXRlbSIsIiJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJmaWx0ZXIiXSxbImFyaWEtaGlkZGVu''@;'; put 'put ''IiwidHJ1ZSIsInNoYXBlIiwiZG93bmxvYWQiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInNoYXBlIiwiZG93bmxvYWQtY2xvdWQiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInNoYXBlIiwicGVuY2lsIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsInN3aXRjaCJdLFsxLCJjbHIt''@;'; put 'put ''Y29sLW1kLTEyIiwiaW5mb0JhciJdLFsxLCJpbmZvQmFyLXRleHQiXSxbInR5cGUiLCJidXR0b24iLDEsImluZm9CYXItdG9nZ2xlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJpbmZvQmFyLXRvZ2dsZSIsMywiY2xpY2siXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInNoYXBlIiwiY2FyZXQgZG93''@;'; put 'put ''biJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9zZWxlY3QtbGlicmFyeS1wbmciLCJhbHQiLCJzZWxlY3QgYSBsaWJyYXJ5IGljb24iLDEsInNlbGVjdC10YWJsZS1pY29uIl0sWyJjZHMtdGV4dCIsInNl''@;'; put 'put ''Y3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl0sWzEsImhlYWRlci1yb3ciLCJjbHItcm93IiwiYm9yZGVyLWJvdHRvbS1kaXZpZGVyIiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJ3LTEwMCIsIm0tMCJdLFsxLCJ0aXRsZS1jb2wiLCJjbHItY29sLWF1dG8i''@;'; put 'put ''LCJtdC0xNSIsIm1iLTE1Il0sWyJhcmlhLWxhYmVsIiwiUmVsb2FkIGxpYnJhcnkgaW5mbyIsInNoYXBlIiwicmVmcmVzaCIsMSwicmVmcmVzaC10YWJsZSIsMywiY2xpY2siXSxbMSwidGV4dC1jZW50ZXIiLCJtdC0xMCJdLFsxLCJuby10YWJsZS1zZWxlY3RlZC1pbmZvIiwicG9pbnRlci1l''@;'; put 'put ''dmVudHMtbm9uZSJdLFsxLCJsaWJpbmZvIiwibS0wIiwiY2xyLXJvdyJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9zZWxlY3QtdGFibGUtcG5nIiwiYWx0Iiwic2VsZWN0IHRhYmxlIGljb24iLDEsInNl''@;'; put 'put ''bGVjdC10YWJsZS1pY29uIl0sWzEsInRleHQtY2VudGVyIiwibS0wIiwidy0xMDAiXSxbImFyaWEtbGFiZWwiLCJSZWxvYWQgbGlicmFyeSBpbmZvIiwic2hhcGUiLCJyZWZyZXNoIiwxLCJyZWZyZXNoLXRhYmxlIiwibS0wIiwzLCJjbGljayJdLFsxLCJtLTAiXSxbMSwibS0wIiwiZm9udC1i''@;'; put 'put ''b2xkIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImhvdC13cmFwcGVyIiwiY2xyLWZsZXgtMSJdLFsiaWQiLCJob3RUYWJsZSIsMSwidmll''@;'; put 'put ''dy1ob3QiLDMsImRhdGEiLCJzZXR0aW5ncyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihpLG8pe2lmKDEmaSl7Y29uc3QgYT13bigpO0ooMCwiYXBwLXNpZGViYXIiLDcpLHd0KCJzY3JvbGxlZFRvQm90dG9tIixmdW5jdGlvbigpe3JldHVybiBZZShhKSxYZShvLmxvYWRNb3JlTGlicmFyaWVzKCkp''@;'; put 'put ''fSksdnQoMSxSbW4sMiwwLCJkaXYiLDgpLEooMiwiY2xyLXRyZWUiKSx2dCgzLExtbiw2LDMsImNsci10cmVlLW5vZGUiLDkpLF9vKDQsWW1uLDEsMSxudWxsLG51bGwsQ28pLHRlKCksdnQoNixabW4sMywwLCJkaXYiLDEwKSx0ZSgpLEooNywiZGl2IiwxMSksdnQoOCxHbW4sMTQsMCwiZGl2''@;'; put 'put ''IiwxMiksdnQoOSwkbW4sMSwwLCJkaXYiLDEzKSxKKDEwLCJjbHItbW9kYWwiLDE0KSxoaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih1KXtyZXR1cm4gWWUoYSksZmkoby5vcGVuRG93bmxvYWQsdSl8fChvLm9wZW5Eb3dubG9hZD11KSxYZSh1KX0pLEooMTEsImgzIiwxNSksU2Uo''@;'; put 'put ''MTIsIkRvd25sb2FkIiksdGUoKSxKKDEzLCJkaXYiLDE2KSgxNCwiZGl2IiwxNykoMTUsImNsci1zZWxlY3QtY29udGFpbmVyIiwxOCkoMTYsImxhYmVsIiksU2UoMTcsIlBsZWFzZSBjaG9vc2UgZG93bmxvYWQgZm9ybWF0IiksdGUoKSxKKDE4LCJzZWxlY3QiLDE5KSxoaSgibmdNb2RlbENo''@;'; put 'put ''YW5nZSIsZnVuY3Rpb24odSl7cmV0dXJuIFllKGEpLGZpKG8uZG93bmxvYWRGb3JtYXQsdSl8fChvLmRvd25sb2FkRm9ybWF0PXUpLFhlKHUpfSksSigxOSwib3B0aW9uIiwyMCksU2UoMjAsIkNTViIpLHRlKCksSigyMSwib3B0aW9uIiwyMSksU2UoMjIsIkRhdGFsaW5lcyAoY2FyZHMgZmls''@;'; put 'put ''ZSkiKSx0ZSgpLEooMjMsIm9wdGlvbiIsMjIpLFNlKDI0LCJEREwgKFBHU1FMIEZsYXZvdXIpIiksdGUoKSxKKDI1LCJvcHRpb24iLDIzKSxTZSgyNiwiRERMIChTQVMgRmxhdm91cikiKSx0ZSgpLEooMjcsIm9wdGlvbiIsMjQpLFNlKDI4LCJEREwgKFRTUUwgRmxhdm91cikiKSx0ZSgpLEoo''@;'; put 'put ''MjksIm9wdGlvbiIsMjUpLFNlKDMwLCJFeGNlbCAoLnhsc3gpIiksdGUoKSxKKDMxLCJvcHRpb24iLDI2KSxTZSgzMiwiTWFya2Rvd24gKC5tZCkiKSx0ZSgpKCkoKSgpKCksSigzMywiZGl2IiwyNykoMzQsImJ1dHRvbiIsMjgpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUoYSks''@;'; put 'put ''WGUoby5vcGVuRG93bmxvYWQ9ITEpfSksU2UoMzUsIiBDYW5jZWwgIiksdGUoKSxKKDM2LCJidXR0b24iLDI5KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKGEpLFhlKG8uZG93bmxvYWRGb3JtYXQuaW5jbHVkZXMoIkRETCIpP28uZG93bmxvYWREREwoKTpvLmRvd25sb2FkRGF0''@;'; put 'put ''YSgpKX0pLFNlKDM3LCIgT2sgIiksdGUoKSgpKCksSigzOCwiY2xyLW1vZGFsIiwxNCksaGkoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odSl7cmV0dXJuIFllKGEpLGZpKG8ud2ViUXVlcnksdSl8fChvLndlYlF1ZXJ5PXUpLFhlKHUpfSksSigzOSwiaDMiLDE1KSxTZSg0MCwiIFdl''@;'; put 'put ''YiBRdWVyeSBVUkwgIiksdGUoKSxKKDQxLCJkaXYiLDMwKSg0MiwiZGl2IiwzMSkoNDMsImRpdiIsMzIpKDQ0LCJkaXYiLDMzKSg0NSwiZGl2IiwzNCkoNDYsInNwYW4iKSxTZSg0NywiQ29weSB0aGUgYmVsb3cgaW50byB5b3VyIHByZWZlcnJlZCBjbGllbnQgdG9vbDoiKSx0ZSgpLEooNDgs''@;'; put 'put ''ImRpdiIsMzUpKDQ5LCJkaXYiLDM2KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKGEpLG8ud2ViUXVlcnlUYWI9ITAsWGUoby5zaG93V2ViUXVlcnkoKSl9KSxJdCg1MCwiaW5wdXQiLDM3KSxKKDUxLCJsYWJlbCIpLFNlKDUyLCJUQUIiKSx0ZSgpKCksSig1MywiZGl2IiwzNiks''@;'; put 'put ''d3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZShhKSxvLndlYlF1ZXJ5VGFiPSExLFhlKG8uc2hvd1dlYlF1ZXJ5KCkpfSksSXQoNTQsImlucHV0IiwzNyksSig1NSwibGFiZWwiKSxTZSg1NiwiQ1NWIiksdGUoKSgpKCkoKSxKKDU3LCJkaXYiLDM4KSg1OCwidGV4dGFyZWEiLDM5LDAp''@;'; put 'put ''LHd0KCJmb2N1cyIsZnVuY3Rpb24odSl7cmV0dXJuIFllKGEpLFhlKG8ub25DbGlDb21tYW5kRm9jdXModSkpfSksU2UoNjAsIiAgICAgICAgICAgICAgIiksdGUoKSgpLEooNjEsImRpdiIsNDApKDYyLCJidXR0b24iLDQxKSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKGEpLFhl''@;'; put 'put ''KG8uY29weVRvQ2xpcCgpKX0pLFNlKDYzLCIgY29weSB0byBjbGlwYm9hcmQgIiksdGUoKSgpKCkoKSgpKCksSig2NCwiZGl2IiwyNykoNjUsImJ1dHRvbiIsMjgpLHd0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWWUoYSksWGUoby53ZWJRdWVyeT0hMSl9KSxTZSg2NiwiIGNsb3NlICIp''@;'; put 'put ''LHRlKCkoKSgpLEooNjcsImNsci1tb2RhbCIsNDIpLGhpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHUpe3JldHVybiBZZShhKSxmaShvLmZpbHRlcix1KXx8KG8uZmlsdGVyPXUpLFhlKHUpfSksSig2OCwiaDMiLDE1KSxTZSg2OSwiIEZpbHRlciBmb3IgdGFibGU6IiksSig3MCwi''@;'; put 'put ''c3BhbiIpLFNlKDcxKSx0ZSgpKCksSig3MiwiZGl2IiwxNiksdnQoNzMscW1uLDIsMCwiYXBwLXF1ZXJ5IiksdGUoKSxKKDc0LCJkaXYiLDI3KSg3NSwiYnV0dG9uIiw0Myksd3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBZZShhKSxYZShvLnJlc2V0RmlsdGVyKCkpfSksU2UoNzYsIiBy''@;'; put 'put ''ZXNldCBmaWx0ZXIgIiksdGUoKSxKKDc3LCJidXR0b24iLDQ0KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKGEpLG8uZmlsdGVyPSExLFhlKG8ucmVtb3ZlUXVlcnkoKSl9KSxTZSg3OCwiIENhbmNlbCAiKSx0ZSgpLEooNzksImJ1dHRvbiIsNDUpLHd0KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gWWUoYSksWGUoby5zZW5kQ2xhdXNlKCkpfSksU2UoODAsIiBPayAiKSx0ZSgpKCkoKSxKKDgxLCJjbHItbW9kYWwiLDQ2KSxoaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih1KXtyZXR1cm4gWWUoYSksZmkoby5xdWVyeUVycix1KXx8KG8ucXVlcnlFcnI9dSks''@;'; put 'put ''WGUodSl9KSxKKDgyLCJoMyIsNDcpLFNlKDgzLCJFcnJvciIpLHRlKCksSig4NCwiZGl2IiwxNikoODUsInAiKSxTZSg4NiksdGUoKSgpLEooODcsImRpdiIsMjcpKDg4LCJidXR0b24iLDQ4KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKGEpLFhlKG8ucXVlcnlFcnI9ITEpfSks''@;'; put 'put ''U2UoODksIiBDYW5jZWwgIiksdGUoKSxKKDkwLCJidXR0b24iLDQ5KSx3dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFllKGEpLFhlKG8ucXVlcnlFcnI9ITEpfSksU2UoOTEsIiBPayAiKSx0ZSgpKCkoKSx2dCg5MixLbW4sNiwwLCJkaXYiLDUwKSx2dCg5MyxPNG4sOCw2LCJkaXYiLDUx''@;'; put 'put ''KSx0ZSgpLEooOTQsImFwcC1kYXRhc2V0LWluZm8iLDUyKSxoaSgib3BlbkNoYW5nZSIsZnVuY3Rpb24odSl7cmV0dXJuIFllKGEpLGZpKG8uZGF0YXNldEluZm8sdSl8fChvLmRhdGFzZXRJbmZvPXUpLFhlKHUpfSksd3QoInJvd0NsaWNrZWQiLGZ1bmN0aW9uKHUpe3JldHVybiBZZShhKSxY''@;'; put 'put ''ZShvLmRhdGFzZXRJbmZvTW9kYWxSb3dDbGlja2VkKHUpKX0pLHRlKCksSig5NSwiYXBwLXZpZXdib3hlcyIsNTMpLGhpKCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLGZ1bmN0aW9uKHUpe3JldHVybiBZZShhKSxmaShvLnZpZXdib3hPcGVuLHUpfHwoby52aWV3Ym94T3Blbj11KSxYZSh1KX0pLHRl''@;'; put 'put ''KCl9aWYoMiZpKXtjb25zdCBhPW9vKDU5KTtpZSgpLF90KG8ubGlicmFyaWVzTG9hZGluZz8xOi0xKSxpZSgyKSxfdChvLmxpYnJhcmllcz8zOi0xKSxpZSgpLHlvKG8ubGlicmFyaWVzKSxpZSgyKSxfdChvLmxpYnJhcmllc1BhZ2luZz82Oi0xKSxpZSgyKSxfdChvLm51bGxWYXJpYWJsZXM/''@;'; put 'put ''ODotMSksaWUoKSxfdChvLm51bGxWYXJpYWJsZXM/OTotMSksaWUoKSxkaSgiY2xyTW9kYWxPcGVuIixvLm9wZW5Eb3dubG9hZCkscnQoImNsck1vZGFsU2l6ZSIsIm1kIiksaWUoOCksZGkoIm5nTW9kZWwiLG8uZG93bmxvYWRGb3JtYXQpLGllKDE4KSxydCgiaWQiLG8udGFibGVUaXRsZSks''@;'; put 'put ''aWUoMiksZGkoImNsck1vZGFsT3BlbiIsby53ZWJRdWVyeSkscnQoImNsck1vZGFsU2l6ZSIsImxnIiksaWUoMTIpLHJ0KCJjaGVja2VkIixvLndlYlF1ZXJ5VGFiKSxpZSg0KSxydCgiY2hlY2tlZCIsIW8ud2ViUXVlcnlUYWIpLGllKDQpLHJ0KCJ2YWx1ZSIsby53ZWJRdWVyeVRleHQpLGll''@;'; put 'put ''KDQpLHJ0KCJuZ3hDbGlwYm9hcmQiLGEpLGllKDUpLGRpKCJjbHJNb2RhbE9wZW4iLG8uZmlsdGVyKSxydCgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGllKDQpLFNyKCIgIixvLmxpYlRhYiwiICIpLGllKDIpLF90KG8uZmlsdGVyPzczOi0xKSxpZSg2KSxy''@;'; put 'put ''dCgiY2xyTG9hZGluZyIsby5zdWJtaXRMb2FkaW5nKSxpZSgyKSxkaSgiY2xyTW9kYWxPcGVuIixvLnF1ZXJ5RXJyKSxpZSg1KSxwcihvLnF1ZXJ5RXJyTWVzc2FnZSksaWUoNiksX3Qoby5sb2FkaW5nVGFibGVWaWV3PzkyOi0xKSxpZSgpLF90KG8ubG9hZGluZ1RhYmxlVmlldz8tMTo5Myks''@;'; put 'put ''aWUoKSxkaSgib3BlbiIsby5kYXRhc2V0SW5mbykscnQoImRzbWV0YSIsby5kc21ldGEpKCJ2ZXJzaW9ucyIsby52ZXJzaW9ucyksaWUoKSxkaSgidmlld2JveE1vZGFsIixvLnZpZXdib3hPcGVuKX19LGRlcGVuZGVuY2llczpbSVplLENtbixMYixYZyxRZyxsdSxIMixLZyxvYyxJYixYbCxk''@;'; put 'put ''NCxQcCxPMyxkNyxjdSx4ZCxtaCwkMCxMcCxpbSxlbCxuTWUsVTIsRXYsRmYsUGYscWIsQ00sclcsbzcsamIsVWIscE0sd3YsU3YsQ3YsejIsTDcsJDYsT1plLF9XLHptZSxtQSxHNixGWmUsTW1uXSxlbmNhcHN1bGF0aW9uOjJ9KSl9cmV0dXJuIG4oKSxlfSkoKTtjb25zdCBONG49W3twYXRo''@;'; put 'put ''OiIiLGNvbXBvbmVudDpmZ24sY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoiZnVsbCIscmVkaXJlY3RUbzoiZGF0YSJ9LHtwYXRoOiJkYXRhIixjb21wb25lbnQ6ZVh9LHtwYXRoOiJkYXRhIixjb21wb25lbnQ6ZVh9LHtwYXRoOiJkYXRhLzpsaWJNZW0vOmZpbHRlcklkIixjb21wb25l''@;'; put 'put ''bnQ6ZVh9LHtwYXRoOiJkYXRhLzpsaWJNZW0iLGNvbXBvbmVudDplWH0se3BhdGg6ImxpbmVhZ2UiLGNvbXBvbmVudDpKS30se3BhdGg6ImxpbmVhZ2UvOnRhYmxlaWQvOmRpcmVjdGlvbiIsY29tcG9uZW50OkpLfSx7cGF0aDoibGluZWFnZS9jb2x1bW4vOmNvbHVyaS86ZGlyZWN0aW9uIixj''@;'; put 'put ''b21wb25lbnQ6Skt9LHtwYXRoOiJsaW5lYWdlL2NvbHVtbi86Y29sdXJpLzpkaXJlY3Rpb24vOnJlbG9hZCIsY29tcG9uZW50OkpLfSx7cGF0aDoidml5YS1hcGktZXhwbG9yZXIiLGNvbXBvbmVudDp5bW59LHtwYXRoOiJtZXRhZGF0YSIsY29tcG9uZW50OlY0ZX0se3BhdGg6Im1ldGFkYXRh''@;'; put 'put ''L29iamVjdC86b2JqZWN0SUQiLGNvbXBvbmVudDpWNGV9LHtwYXRoOiJtZXRhZGF0YS9vYmplY3QvOm9iamVjdElELzpvYmplY3ROYW1lIixjb21wb25lbnQ6VjRlfSx7cGF0aDoidXNlcm5hdiIsY29tcG9uZW50OmhnbixjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRp''@;'; put 'put ''cmVjdFRvOiJncm91cHMifSx7cGF0aDoidXNlcnMiLGNvbXBvbmVudDpBJGV9LHtwYXRoOiJ1c2Vycy86dXJpIixjb21wb25lbnQ6QSRlfSx7cGF0aDoiZ3JvdXBzIixjb21wb25lbnQ6aUdlfSx7cGF0aDoiZ3JvdXBzLzp1cmkiLGNvbXBvbmVudDppR2V9LHtwYXRoOiJyb2xlcyIsY29tcG9u''@;'; put 'put ''ZW50OngkZX0se3BhdGg6InJvbGVzLzp1cmkiLGNvbXBvbmVudDp4JGV9XX1dfV07bGV0IEY0bj0oKCk9Pnt2YXIgbjtjbGFzcyBle3N0YXRpYyNlPW49KCk9Pih0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3KGl8fGUpfSx0aGlzLlx1MDI3NW1vZD1HaSh7dHlwZTplfSks''@;'; put 'put ''dGhpcy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1dkLmZvckNoaWxkKE40biksV2RdfSkpfXJldHVybiBuKCksZX0pKCksUDRuPSgoKT0+e3ZhciBuO2NsYXNzIGV7c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcoaXx8ZSl9LHRoaXMuXHUwMjc1''@;'; put 'put ''bW9kPUdpKHt0eXBlOmV9KSx0aGlzLlx1MDI3NWluaj1taSh7aW1wb3J0czpbSFplLHFvLEY0bixTbW4saGQscTAsTHcsTEMsJHgsUUYsWW1lLEVtXX0pKX1yZXR1cm4gbigpLGV9KSgpO2NvbnN0IFY0bj1XZC5mb3JSb290KFt7cGF0aDoiIixyZWRpcmVjdFRvOiJob21lIixwYXRoTWF0Y2g6''@;'; put 'put ''ImZ1bGwifSx7cGF0aDoidmlldyIsbG9hZENoaWxkcmVuOigpPT5QNG59LHtwYXRoOiJyZXZpZXciLGNvbXBvbmVudDprZG4sY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoiZnVsbCIscmVkaXJlY3RUbzoidG9hcHByb3ZlIn0se3BhdGg6IiIsbG9hZENoaWxkcmVuOigpPT5BZG59XX0s''@;'; put 'put ''e3BhdGg6ImxpY2Vuc2luZyIsbG9hZENoaWxkcmVuOigpPT5OY259LHtwYXRoOiJob21lIixsb2FkQ2hpbGRyZW46KCk9PlBsbn0se3BhdGg6ImVkaXRvciIsbG9hZENoaWxkcmVuOigpPT54YW59LHtwYXRoOiJzdGFnZSIsbG9hZENoaWxkcmVuOigpPT5WZG59LHtwYXRoOiJzeXN0ZW0iLGxv''@;'; put 'put ''YWRDaGlsZHJlbjooKT0+SmRufSx7cGF0aDoiZGVwbG95Iixsb2FkQ2hpbGRyZW46KCk9PkpFdH0se3BhdGg6IioqIixjb21wb25lbnQ6eFN0fV0se3VzZUhhc2g6ITB9KTtsZXQgQjRuPSgoKT0+e3ZhciBuO2NsYXNzIGV7c3RhdGljI2U9bj0oKT0+KHRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGkpe3JldHVybiBuZXcoaXx8ZSl9LHRoaXMuXHUwMjc1bW9kPUdpKHt0eXBlOmUsYm9vdHN0cmFwOltEd3RdfSksdGhpcy5cdTAyNzVpbmo9bWkoe3Byb3ZpZGVyczpbdXosQnAsJG1lLEpVLGtodChUYihwdi5MZWdhY3lJbnRlcmNlcHRvcnMsW3twcm92aWRlOkh3ZSx1c2VGYWN0b3J5OnZo''@;'; put 'put ''dH0se3Byb3ZpZGU6cUksdXNlRXhpc3Rpbmc6SHdlLG11bHRpOiEwfV0pKV0saW1wb3J0czpbVFN0LE1fZSxoZCx4Z3QsVjRuLCR4LHEwLExDLFFGLEVtLFhnbl19KSl9cmV0dXJuIG4oKSxlfSkoKTtPYXQoKS5ib290c3RyYXBNb2R1bGUoQjRuKX0sMzczNChtb2R1bGUsX191bnVzZWRfd2Vi''@;'; put 'put ''cGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBfYXN5bmNUb0dlbmVyYXRvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKDI5MjkzKS5kZWZhdWx0LF93cmFwQXN5bmNHZW5lcmF0b3I9X193ZWJwYWNrX3JlcXVpcmVfXyg0Mjk1OCkuZGVmYXVsdCxfYXdhaXRBc3luY0dlbmVyYXRv''@;'; put 'put ''cj1fX3dlYnBhY2tfcmVxdWlyZV9fKDUzMzQ0KS5kZWZhdWx0LF9hc3luY0dlbmVyYXRvckRlbGVnYXRlPV9fd2VicGFja19yZXF1aXJlX18oOTM1MTMpLmRlZmF1bHQsX2FzeW5jSXRlcmF0b3I9X193ZWJwYWNrX3JlcXVpcmVfXyg4Mjg4MSkuZGVmYXVsdCxoO3NlbGYsaD0oKT0+KCgpPT57''@;'; put 'put ''dmFyIF9fd2VicGFja19tb2R1bGVzX189ezQ5NzkyKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNDgyODcpLkJ1ZmZlcjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5Dc3ZGb3JtYXR0ZXJTdHJlYW09dm9pZCAwO2NvbnN0IGM9aCg4ODMx''@;'; put 'put ''MCkscz1oKDE3NjkzKTtqLkNzdkZvcm1hdHRlclN0cmVhbT1jbGFzcyBBIGV4dGVuZHMgYy5UcmFuc2Zvcm17Y29uc3RydWN0b3IoQyl7c3VwZXIoe3dyaXRhYmxlT2JqZWN0TW9kZTpDLm9iamVjdE1vZGV9KSx0aGlzLmhhc1dyaXR0ZW5CT009ITEsdGhpcy5mb3JtYXR0ZXJPcHRpb25zPUMs''@;'; put 'put ''dGhpcy5yb3dGb3JtYXR0ZXI9bmV3IHMuUm93Rm9ybWF0dGVyKEMpLHRoaXMuaGFzV3JpdHRlbkJPTT0hQy53cml0ZUJPTX10cmFuc2Zvcm0oQyl7cmV0dXJuIHRoaXMucm93Rm9ybWF0dGVyLnJvd1RyYW5zZm9ybT1DLHRoaXN9X3RyYW5zZm9ybShDLHcsUyl7bGV0IEw9ITE7dHJ5e3RoaXMu''@;'; put 'put ''aGFzV3JpdHRlbkJPTXx8KHRoaXMucHVzaCh0aGlzLmZvcm1hdHRlck9wdGlvbnMuQk9NKSx0aGlzLmhhc1dyaXR0ZW5CT009ITApLHRoaXMucm93Rm9ybWF0dGVyLmZvcm1hdChDLChSLHgpPT5SPyhMPSEwLFMoUikpOih4JiZ4LmZvckVhY2goVT0+e3RoaXMucHVzaCh5LmZyb20oVSwidXRm''@;'; put 'put ''OCIpKX0pLEw9ITAsUygpKSl9Y2F0Y2goUil7aWYoTCl0aHJvdyBSO1MoUil9fV9mbHVzaChDKXt0aGlzLnJvd0Zvcm1hdHRlci5maW5pc2goKHcsUyk9Pnc/Qyh3KTooUyYmUy5mb3JFYWNoKEw9Pnt0aGlzLnB1c2goeS5mcm9tKEwsInV0ZjgiKSl9KSxDKCkpKX19fSw2ODUwMihmZSxqKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouRm9ybWF0dGVyT3B0aW9ucz12b2lkIDAsai5Gb3JtYXR0ZXJPcHRpb25zPWNsYXNzIGh7Y29uc3RydWN0b3IoYz17fSl7dmFyIHM7dGhpcy5vYmplY3RNb2RlPSEwLHRoaXMuZGVs''@;'; put 'put ''aW1pdGVyPSIsIix0aGlzLnJvd0RlbGltaXRlcj0iXG4iLHRoaXMucXVvdGU9JyInLHRoaXMuZXNjYXBlPXRoaXMucXVvdGUsdGhpcy5xdW90ZUNvbHVtbnM9ITEsdGhpcy5xdW90ZUhlYWRlcnM9dGhpcy5xdW90ZUNvbHVtbnMsdGhpcy5oZWFkZXJzPW51bGwsdGhpcy5pbmNsdWRlRW5kUm93''@;'; put 'put ''RGVsaW1pdGVyPSExLHRoaXMud3JpdGVCT009ITEsdGhpcy5CT009Ilx1ZmVmZiIsdGhpcy5hbHdheXNXcml0ZUhlYWRlcnM9ITEsT2JqZWN0LmFzc2lnbih0aGlzLGN8fHt9KSx0eXBlb2YgYz8ucXVvdGVIZWFkZXJzPiJ1IiYmKHRoaXMucXVvdGVIZWFkZXJzPXRoaXMucXVvdGVDb2x1bW5z''@;'; put 'put ''KSwhMD09PWM/LnF1b3RlP3RoaXMucXVvdGU9JyInOiExPT09Yz8ucXVvdGUmJih0aGlzLnF1b3RlPSIiKSwic3RyaW5nIiE9dHlwZW9mIGM/LmVzY2FwZSYmKHRoaXMuZXNjYXBlPXRoaXMucXVvdGUpLHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzPSEhdGhpcy5oZWFkZXJzJiYobnVsbD09PShz''@;'; put 'put ''PWMud3JpdGVIZWFkZXJzKXx8dm9pZCAwPT09c3x8cyksdGhpcy5oZWFkZXJzPUFycmF5LmlzQXJyYXkodGhpcy5oZWFkZXJzKT90aGlzLmhlYWRlcnM6bnVsbCx0aGlzLmVzY2FwZWRRdW90ZT1gJHt0aGlzLmVzY2FwZX0ke3RoaXMucXVvdGV9YH19fSw2ODA5MShmZSxqLGgpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgeT10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oQyl7cmV0dXJuIEMmJkMuX19lc01vZHVsZT9DOntkZWZhdWx0OkN9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5GaWVsZEZvcm1hdHRlcj12b2lkIDA7Y29u''@;'; put 'put ''c3QgYz15KGgoODc5MTQpKSxzPXkoaCg3NDczMykpLEE9eShoKDEwOTEyKSk7ai5GaWVsZEZvcm1hdHRlcj1jbGFzcyB2e2NvbnN0cnVjdG9yKHcpe3RoaXMuX2hlYWRlcnM9bnVsbCx0aGlzLmZvcm1hdHRlck9wdGlvbnM9dyxudWxsIT09dy5oZWFkZXJzJiYodGhpcy5oZWFkZXJzPXcuaGVh''@;'; put 'put ''ZGVycyksdGhpcy5SRVBMQUNFX1JFR0VYUD1uZXcgUmVnRXhwKHcucXVvdGUsImciKTtjb25zdCBTPWBbJHt3LmRlbGltaXRlcn0ke0EuZGVmYXVsdCh3LnJvd0RlbGltaXRlcil9fFxyfFxuXWA7dGhpcy5FU0NBUEVfUkVHRVhQPW5ldyBSZWdFeHAoUyl9c2V0IGhlYWRlcnModyl7dGhpcy5f''@;'; put 'put ''aGVhZGVycz13fXNob3VsZFF1b3RlKHcsUyl7Y29uc3QgTD1TP3RoaXMuZm9ybWF0dGVyT3B0aW9ucy5xdW90ZUhlYWRlcnM6dGhpcy5mb3JtYXR0ZXJPcHRpb25zLnF1b3RlQ29sdW1ucztyZXR1cm4gYy5kZWZhdWx0KEwpP0w6QXJyYXkuaXNBcnJheShMKT9MW3ddOm51bGwhPT10aGlzLl9o''@;'; put 'put ''ZWFkZXJzJiZMW3RoaXMuX2hlYWRlcnNbd11dfWZvcm1hdCh3LFMsTCl7Y29uc3QgUj1gJHtzLmRlZmF1bHQodyk/IiI6d31gLnJlcGxhY2UoL1wwL2csIiIpLHtmb3JtYXR0ZXJPcHRpb25zOnh9PXRoaXM7cmV0dXJuIiIhPT14LnF1b3RlJiYtMSE9PVIuaW5kZXhPZih4LnF1b3RlKT90aGlz''@;'; put 'put ''LnF1b3RlRmllbGQoUi5yZXBsYWNlKHRoaXMuUkVQTEFDRV9SRUdFWFAseC5lc2NhcGVkUXVvdGUpKTotMSE9PVIuc2VhcmNoKHRoaXMuRVNDQVBFX1JFR0VYUCl8fHRoaXMuc2hvdWxkUXVvdGUoUyxMKT90aGlzLnF1b3RlRmllbGQoUik6Un1xdW90ZUZpZWxkKHcpe2NvbnN0e3F1b3RlOlN9''@;'; put 'put ''PXRoaXMuZm9ybWF0dGVyT3B0aW9ucztyZXR1cm5gJHtTfSR7d30ke1N9YH19fSw1MDgwMyhmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24odyl7cmV0dXJuIHcmJncuX19lc01vZHVsZT93OntkZWZhdWx0Ond9fTtPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5Sb3dGb3JtYXR0ZXI9dm9pZCAwO2NvbnN0IGM9eShoKDg1NzEwKSkscz15KGgoODE0MikpLEE9aCg2ODA5MSksdj1oKDkwNTY1KTtjbGFzcyBDe2NvbnN0cnVjdG9yKFMpe3RoaXMucm93Q291bnQ9MCx0aGlzLmZv''@;'; put 'put ''cm1hdHRlck9wdGlvbnM9Uyx0aGlzLmZpZWxkRm9ybWF0dGVyPW5ldyBBLkZpZWxkRm9ybWF0dGVyKFMpLHRoaXMuaGVhZGVycz1TLmhlYWRlcnMsdGhpcy5zaG91bGRXcml0ZUhlYWRlcnM9Uy5zaG91bGRXcml0ZUhlYWRlcnMsdGhpcy5oYXNXcml0dGVuSGVhZGVycz0hMSxudWxsIT09dGhp''@;'; put 'put ''cy5oZWFkZXJzJiYodGhpcy5maWVsZEZvcm1hdHRlci5oZWFkZXJzPXRoaXMuaGVhZGVycyksUy50cmFuc2Zvcm0mJih0aGlzLnJvd1RyYW5zZm9ybT1TLnRyYW5zZm9ybSl9c3RhdGljIGlzUm93SGFzaEFycmF5KFMpe3JldHVybiEhQXJyYXkuaXNBcnJheShTKSYmQXJyYXkuaXNBcnJheShT''@;'; put 'put ''WzBdKSYmMj09PVNbMF0ubGVuZ3RofXN0YXRpYyBpc1Jvd0FycmF5KFMpe3JldHVybiBBcnJheS5pc0FycmF5KFMpJiYhdGhpcy5pc1Jvd0hhc2hBcnJheShTKX1zdGF0aWMgZ2F0aGVySGVhZGVycyhTKXtyZXR1cm4gQy5pc1Jvd0hhc2hBcnJheShTKT9TLm1hcChMPT5MWzBdKTpBcnJheS5p''@;'; put 'put ''c0FycmF5KFMpP1M6T2JqZWN0LmtleXMoUyl9c3RhdGljIGNyZWF0ZVRyYW5zZm9ybShTKXtyZXR1cm4gdi5pc1N5bmNUcmFuc2Zvcm0oUyk/KEwsUik9PntsZXQgeD1udWxsO3RyeXt4PVMoTCl9Y2F0Y2goVSl7cmV0dXJuIFIoVSl9cmV0dXJuIFIobnVsbCx4KX06KEwsUik9PntTKEwsUil9''@;'; put 'put ''fXNldCByb3dUcmFuc2Zvcm0oUyl7aWYoIWMuZGVmYXVsdChTKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgdHJhbnNmb3JtIHNob3VsZCBiZSBhIGZ1bmN0aW9uIik7dGhpcy5fcm93VHJhbnNmb3JtPUMuY3JlYXRlVHJhbnNmb3JtKFMpfWZvcm1hdChTLEwpe3RoaXMuY2FsbFRyYW5zZm9y''@;'; put 'put ''bWVyKFMsKFIseCk9PntpZihSKXJldHVybiBMKFIpO2lmKCFTKXJldHVybiBMKG51bGwpO2NvbnN0IFU9W107aWYoeCl7Y29uc3R7c2hvdWxkRm9ybWF0Q29sdW1uczpILGhlYWRlcnM6Vn09dGhpcy5jaGVja0hlYWRlcnMoeCk7aWYodGhpcy5zaG91bGRXcml0ZUhlYWRlcnMmJlYmJiF0aGlz''@;'; put 'put ''Lmhhc1dyaXR0ZW5IZWFkZXJzJiYoVS5wdXNoKHRoaXMuZm9ybWF0Q29sdW1ucyhWLCEwKSksdGhpcy5oYXNXcml0dGVuSGVhZGVycz0hMCksSCl7Y29uc3QgTj10aGlzLmdhdGhlckNvbHVtbnMoeCk7VS5wdXNoKHRoaXMuZm9ybWF0Q29sdW1ucyhOLCExKSl9fXJldHVybiBMKG51bGwsVSl9''@;'; put 'put ''KX1maW5pc2goUyl7Y29uc3QgTD1bXTtpZih0aGlzLmZvcm1hdHRlck9wdGlvbnMuYWx3YXlzV3JpdGVIZWFkZXJzJiYwPT09dGhpcy5yb3dDb3VudCl7aWYoIXRoaXMuaGVhZGVycylyZXR1cm4gUyhuZXcgRXJyb3IoImBhbHdheXNXcml0ZUhlYWRlcnNgIG9wdGlvbiBpcyBzZXQgdG8gdHJ1''@;'; put 'put ''ZSBidXQgYGhlYWRlcnNgIG9wdGlvbiBub3QgcHJvdmlkZWQuIikpO0wucHVzaCh0aGlzLmZvcm1hdENvbHVtbnModGhpcy5oZWFkZXJzLCEwKSl9cmV0dXJuIHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5pbmNsdWRlRW5kUm93RGVsaW1pdGVyJiZMLnB1c2godGhpcy5mb3JtYXR0ZXJPcHRpb25z''@;'; put 'put ''LnJvd0RlbGltaXRlciksUyhudWxsLEwpfWNoZWNrSGVhZGVycyhTKXtpZih0aGlzLmhlYWRlcnMpcmV0dXJue3Nob3VsZEZvcm1hdENvbHVtbnM6ITAsaGVhZGVyczp0aGlzLmhlYWRlcnN9O2NvbnN0IEw9Qy5nYXRoZXJIZWFkZXJzKFMpO3JldHVybiB0aGlzLmhlYWRlcnM9TCx0aGlzLmZp''@;'; put 'put ''ZWxkRm9ybWF0dGVyLmhlYWRlcnM9TCx0aGlzLnNob3VsZFdyaXRlSGVhZGVycz97c2hvdWxkRm9ybWF0Q29sdW1uczohcy5kZWZhdWx0KEwsUyksaGVhZGVyczpMfTp7c2hvdWxkRm9ybWF0Q29sdW1uczohMCxoZWFkZXJzOm51bGx9fWdhdGhlckNvbHVtbnMoUyl7aWYobnVsbD09PXRoaXMu''@;'; put 'put ''aGVhZGVycyl0aHJvdyBuZXcgRXJyb3IoIkhlYWRlcnMgaXMgY3VycmVudGx5IG51bGwiKTtyZXR1cm4gQXJyYXkuaXNBcnJheShTKT9DLmlzUm93SGFzaEFycmF5KFMpP3RoaXMuaGVhZGVycy5tYXAoKEwsUik9Pntjb25zdCB4PVNbUl07cmV0dXJuIHg/eFsxXToiIn0pOkMuaXNSb3dBcnJh''@;'; put 'put ''eShTKSYmIXRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzP1M6dGhpcy5oZWFkZXJzLm1hcCgoTCxSKT0+U1tSXSk6dGhpcy5oZWFkZXJzLm1hcChMPT5TW0xdKX1jYWxsVHJhbnNmb3JtZXIoUyxMKXtyZXR1cm4gdGhpcy5fcm93VHJhbnNmb3JtP3RoaXMuX3Jvd1RyYW5zZm9ybShTLEwpOkwobnVs''@;'; put 'put ''bCxTKX1mb3JtYXRDb2x1bW5zKFMsTCl7Y29uc3QgUj1TLm1hcCgoVSxIKT0+dGhpcy5maWVsZEZvcm1hdHRlci5mb3JtYXQoVSxILEwpKS5qb2luKHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5kZWxpbWl0ZXIpLHtyb3dDb3VudDp4fT10aGlzO3JldHVybiB0aGlzLnJvd0NvdW50Kz0xLHg/W3Ro''@;'; put 'put ''aXMuZm9ybWF0dGVyT3B0aW9ucy5yb3dEZWxpbWl0ZXIsUl0uam9pbigiIik6Un19ai5Sb3dGb3JtYXR0ZXI9Q30sMTc2OTMoZmUsaixoKXsidXNlIHN0cmljdCI7ai5Sb3dGb3JtYXR0ZXI9dm9pZCAwO3ZhciBjPWgoNTA4MDMpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJSb3dGb3JtYXR0''@;'; put 'put ''ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBjLlJvd0Zvcm1hdHRlcn19KSxoKDY4MDkxKX0sMTY5NihmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDQ4Mjg3KS5CdWZmZXIsYz10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVu''@;'; put 'put ''Y3Rpb24oSCxWLE4seil7dm9pZCAwPT09eiYmKHo9TiksT2JqZWN0LmRlZmluZVByb3BlcnR5KEgseix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVltOXX19KX06ZnVuY3Rpb24oSCxWLE4seil7dm9pZCAwPT09eiYmKHo9TiksSFt6XT1WW05dfSkscz10aGlzJiZ0aGlz''@;'; put 'put ''Ll9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oSCxWKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoSCwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6Vn0pfTpmdW5jdGlvbihILFYpe0guZGVmYXVsdD1WfSksQT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8''@;'; put 'put ''ZnVuY3Rpb24oSCl7aWYoSCYmSC5fX2VzTW9kdWxlKXJldHVybiBIO3ZhciBWPXt9O2lmKG51bGwhPUgpZm9yKHZhciBOIGluIEgpImRlZmF1bHQiIT09TiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEgsTikmJmMoVixILE4pO3JldHVybiBzKFYsSCksVn0sdj10aGlz''@;'; put 'put ''JiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oSCxWKXtmb3IodmFyIE4gaW4gSCkiZGVmYXVsdCIhPT1OJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFYsTikmJmMoVixILE4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEw''@;'; put 'put ''fSksai53cml0ZVRvUGF0aD1qLndyaXRlVG9TdHJpbmc9ai53cml0ZVRvQnVmZmVyPWoud3JpdGVUb1N0cmVhbT1qLndyaXRlPWouZm9ybWF0PWouRm9ybWF0dGVyT3B0aW9ucz1qLkNzdkZvcm1hdHRlclN0cmVhbT12b2lkIDA7Y29uc3QgQz1oKDQwNTM3KSx3PWgoODgzMTApLFM9QShoKDIz''@;'; put 'put ''MjcpKSxMPWgoNjg1MDIpLFI9aCg0OTc5Mik7dihoKDkwNTY1KSxqKTt2YXIgeD1oKDQ5NzkyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiQ3N2Rm9ybWF0dGVyU3RyZWFtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geC5Dc3ZGb3JtYXR0ZXJTdHJlYW19fSk7dmFy''@;'; put 'put ''IFU9aCg2ODUwMik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIkZvcm1hdHRlck9wdGlvbnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBVLkZvcm1hdHRlck9wdGlvbnN9fSksai5mb3JtYXQ9SD0+bmV3IFIuQ3N2Rm9ybWF0dGVyU3RyZWFtKG5ldyBMLkZvcm1hdHRl''@;'; put 'put ''ck9wdGlvbnMoSCkpLGoud3JpdGU9KEgsVik9Pntjb25zdCBOPWouZm9ybWF0KFYpLHo9Qy5wcm9taXNpZnkoKFksRik9PntOLndyaXRlKFksdm9pZCAwLEYpfSk7cmV0dXJuIEgucmVkdWNlKChZLEYpPT5ZLnRoZW4oKCk9PnooRikpLFByb21pc2UucmVzb2x2ZSgpKS50aGVuKCgpPT5OLmVu''@;'; put 'put ''ZCgpKS5jYXRjaChZPT57Ti5lbWl0KCJlcnJvciIsWSl9KSxOfSxqLndyaXRlVG9TdHJlYW09KEgsVixOKT0+ai53cml0ZShWLE4pLnBpcGUoSCksai53cml0ZVRvQnVmZmVyPShILFY9e30pPT57Y29uc3QgTj1bXSx6PW5ldyB3LldyaXRhYmxlKHt3cml0ZShZLEYsVyl7Ti5wdXNoKFkpLFco''@;'; put 'put ''KX19KTtyZXR1cm4gbmV3IFByb21pc2UoKFksRik9Pnt6Lm9uKCJlcnJvciIsRikub24oImZpbmlzaCIsKCk9PlkoeS5jb25jYXQoTikpKSxqLndyaXRlKEgsVikucGlwZSh6KX0pfSxqLndyaXRlVG9TdHJpbmc9KEgsVik9Pmoud3JpdGVUb0J1ZmZlcihILFYpLnRoZW4oTj0+Ti50b1N0cmlu''@;'; put 'put ''ZygpKSxqLndyaXRlVG9QYXRoPShILFYsTik9Pntjb25zdCB6PVMuY3JlYXRlV3JpdGVTdHJlYW0oSCx7ZW5jb2Rpbmc6InV0ZjgifSk7cmV0dXJuIGoud3JpdGUoVixOKS5waXBlKHopfX0sOTA1NjUoZmUsail7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9k''@;'; put 'put ''dWxlIix7dmFsdWU6ITB9KSxqLmlzU3luY1RyYW5zZm9ybT12b2lkIDAsai5pc1N5bmNUcmFuc2Zvcm09aD0+MT09PWgubGVuZ3RofSw0OTIyMChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oUix4''@;'; put 'put ''LFUsSCl7dm9pZCAwPT09SCYmKEg9VSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIsSCx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geFtVXX19KX06ZnVuY3Rpb24oUix4LFUsSCl7dm9pZCAwPT09SCYmKEg9VSksUltIXT14W1VdfSksYz10aGlzJiZ0aGlzLl9fc2V0TW9k''@;'; put 'put ''dWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oUix4KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoUiwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6eH0pfTpmdW5jdGlvbihSLHgpe1IuZGVmYXVsdD14fSkscz10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24o''@;'; put 'put ''Uil7aWYoUiYmUi5fX2VzTW9kdWxlKXJldHVybiBSO3ZhciB4PXt9O2lmKG51bGwhPVIpZm9yKHZhciBVIGluIFIpImRlZmF1bHQiIT09VSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFIsVSkmJnkoeCxSLFUpO3JldHVybiBjKHgsUikseH07T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouZGVjb2RlVG9rZW49ai5oYXNUb2tlbkV4cGlyZWQ9ai5pc1JlZnJlc2hUb2tlbkV4cGlyaW5nPWouaXNBY2Nlc3NUb2tlbkV4cGlyaW5nPXZvaWQgMDtjb25zdCBBPXMoaCg2NzY1KSk7ZnVuY3Rpb24gUyhSLHgpe2xldCBVO3Ry''@;'; put 'put ''eXtVPSgwLEEuZGVmYXVsdCkoUil9Y2F0Y2goVil7aWYoIShWIGluc3RhbmNlb2YgQS5JbnZhbGlkVG9rZW5FcnJvcikpdGhyb3cgVjtyZXR1cm4gY29uc29sZS5kZWJ1ZygiaXNUb2tlbkV4cGlyaW5nOiB0b2tlbiBpcyBub3QgYSBkZWNvZGFibGUgSldULCB0cmVhdGluZyBpdCBhcyBub3Qg''@;'; put 'put ''ZXhwaXJpbmcuIiksITF9cmV0dXJuIG51bGwhPVUuZXhwJiZVLmV4cC0obmV3IERhdGUpLnZhbHVlT2YoKS8xZTM8PXh9ai5pc0FjY2Vzc1Rva2VuRXhwaXJpbmc9ZnVuY3Rpb24gdihSLHg9MzYwMCl7cmV0dXJuIVJ8fFMoUix4KX0sai5pc1JlZnJlc2hUb2tlbkV4cGlyaW5nPWZ1bmN0aW9u''@;'; put 'put ''IEMoUix4PTMwKXtyZXR1cm4hUnx8UyhSLHgpfSxqLmhhc1Rva2VuRXhwaXJlZD1mdW5jdGlvbiB3KFIpe3JldHVybiFSfHxTKFIsMCl9LGouZGVjb2RlVG9rZW49ZnVuY3Rpb24gTChSKXtsZXQgeDt0cnl7eD0oMCxBLmRlZmF1bHQpKFIpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiSW52YWxp''@;'; put 'put ''ZCB0b2tlbiBzdXBwbGllZC4iKX1yZXR1cm4geH19LDE2MDcyKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihzLEEsdixDKXt2b2lkIDA9PT1DJiYoQz12KSxPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''cyxDLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBBW3ZdfX0pfTpmdW5jdGlvbihzLEEsdixDKXt2b2lkIDA9PT1DJiYoQz12KSxzW0NdPUFbdl19KSxjPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihzLEEpe2Zvcih2YXIgdiBpbiBzKSJkZWZhdWx0IiE9''@;'; put 'put ''PXYmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQSx2KSYmeShBLHMsdil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxjKGgoNDkyMjApLGopfSwzODM5KGZlLGopeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5wcmVmaXhNZXNzYWdlPXZvaWQgMCxqLnByZWZpeE1lc3NhZ2U9KHksYyk9PntpZigib2JqZWN0Ij09dHlwZW9mIHkpaWYoeS5oYXNPd25Qcm9wZXJ0eSgibWVzc2FnZSIpKXkubWVzc2FnZT1jK3kubWVzc2FnZTtlbHNle2lmKCF5Lmhh''@;'; put 'put ''c093blByb3BlcnR5KCJib2R5IikpcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx5KSx7bWVzc2FnZTpjfSk7aWYoIm9iamVjdCI9PXR5cGVvZiB5LmJvZHkmJih5Lm1lc3NhZ2U9eS5ib2R5Lm1lc3NhZ2U/Yyt5LmJvZHkubWVzc2FnZTpjKSwic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IHkuYm9keSl7bGV0IHM7dHJ5e3M9SlNPTi5wYXJzZSh5LmJvZHkpfWNhdGNoe3JldHVybiB5Lm1lc3NhZ2U9Yyx5fXJldHVybiBzLm1lc3NhZ2U9cy5tZXNzYWdlP2Mrcy5tZXNzYWdlOmMseS5ib2R5PXMseX19cmV0dXJuInN0cmluZyI9PXR5cGVvZiB5JiYoeT1jK3kpLHl9fSw2MzQwKGZl''@;'; put 'put ''LGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihzLEEsdixDKXt2b2lkIDA9PT1DJiYoQz12KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocyxDLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBBW3ZdfX0pfTpmdW5jdGlvbihzLEEsdixDKXt2b2lkIDA9PT1DJiYoQz12KSxzW0NdPUFbdl19KSxjPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihzLEEpe2Zvcih2YXIgdiBpbiBzKSJkZWZhdWx0IiE9PXYmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh''@;'; put 'put ''bGwoQSx2KSYmeShBLHMsdil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxjKGgoMzgzOSksaiksYyhoKDczODIzKSxqKX0sNzM4MjMoZmUsaixoKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1''@;'; put 'put ''ZTohMH0pLGouU2VydmVyVHlwZUVycm9yPXZvaWQgMDtjb25zdCB5PWgoMzYzMSk7Y2xhc3MgYyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKEE9W10pe2xldCB2PShBPVsuLi5uZXcgU2V0KEEpXSkubGVuZ3RoP0Euam9pbigiLCAiKS50cmltKCk6W3kuU2VydmVyVHlwZS5TYXNWaXlhLHku''@;'; put 'put ''U2VydmVyVHlwZS5TYXM5LHkuU2VydmVyVHlwZS5TYXNqc10uam9pbigiLCAiKS50cmltKCk7dj12LnJlcGxhY2UoLyxccyhbXixdKikkLywiIGFuZCAkMSIpLHN1cGVyKGBJbnZhbGlkIHNlcnZlciB0eXBlOiB2YWxpZCBvcHRpb24kezEhPT1BLmxlbmd0aD8icyI6IiJ9ICR7MSE9PUEubGVu''@;'; put 'put ''Z3RoPyJhcmUiOiJpcyJ9ICR7dn1gKSx0aGlzLm5hbWU9IlNlcnZlclR5cGVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsYy5wcm90b3R5cGUpfX1qLlNlcnZlclR5cGVFcnJvcj1jfSw1NzgzOChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT10aGlzJiZ0aGlzLl9fYXdhaXRl''@;'; put 'put ''cnx8ZnVuY3Rpb24oUyxMLFIseCl7cmV0dXJuIG5ldyhSfHwoUj1Qcm9taXNlKSkoZnVuY3Rpb24oSCxWKXtmdW5jdGlvbiBOKEYpe3RyeXtZKHgubmV4dChGKSl9Y2F0Y2goVyl7VihXKX19ZnVuY3Rpb24geihGKXt0cnl7WSh4LnRocm93KEYpKX1jYXRjaChXKXtWKFcpfX1mdW5jdGlvbiBZ''@;'; put 'put ''KEYpe0YuZG9uZT9IKEYudmFsdWUpOmZ1bmN0aW9uIFUoSCl7cmV0dXJuIEggaW5zdGFuY2VvZiBSP0g6bmV3IFIoZnVuY3Rpb24oVil7VihIKX0pfShGLnZhbHVlKS50aGVuKE4seil9WSgoeD14LmFwcGx5KFMsTHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJf''@;'; put 'put ''X2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLnVwZGF0ZUNzdj1qLmNyZWF0ZUNzdj1qLnJlYWRDc3Y9dm9pZCAwO2NvbnN0IGM9aCg1MTI3Nikscz1oKDE2OTYpO2oucmVhZENzdj1TPT55KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCgwLGMucmVhZEZpbGUp''@;'; put 'put ''KFMpKS5zcGxpdCgiXG4iKS5maWx0ZXIoUj0+Ui5sZW5ndGgpLm1hcChSPT5SLnNwbGl0KCIsIikpfSksai5jcmVhdGVDc3Y9KFMsTCxSKT0+eSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCB4PXlpZWxkKDAscy53cml0ZVRvU3RyaW5nKShMLHtoZWFkZXJzOlJ9KTt5''@;'; put 'put ''aWVsZCgwLGMuY3JlYXRlRmlsZSkoUyx4KX0pLGoudXBkYXRlQ3N2PShTLEwsUix4KT0+eSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBVPXlpZWxkIHcoUyxMLFIseCk7aWYoeCl7Y29uc3QgSD0wPT09VS5sZW5ndGg/MTpVLmxlbmd0aCxWPVIuZmluZEluZGV4KE49''@;'; put 'put ''Pk49PT14KTtWPi0xP0wuc3BsaWNlKFYsMCxIKTooUi5zcGxpY2UoMCwwLHgpLEwuc3BsaWNlKDAsMCxIKSl9VS5wdXNoKEwpLHlpZWxkKDAsai5jcmVhdGVDc3YpKFMsVSxSKX0pO2NvbnN0IHc9KFMsTCxSLHgpPT55KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKEwubGVu''@;'; put 'put ''Z3RoIT09Ui5sZW5ndGgpe2lmKEwubGVuZ3RoPlIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYSByZWNvcmQgY2FuIG5vdCBoYXZlIG1vcmUgZmllbGRzIHRoYW4gcHJvdmlkZWQgY29sdW1ucyIpO2lmKCF4fHxMLmxlbmd0aCsxIT09Ui5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29y''@;'; put 'put ''ZCBjYW4gbm90IGhhdmUgbGVzcyBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIil9ZWxzZSBpZih4JiZSLmluY2x1ZGVzKHgpKXRocm93IG5ldyBFcnJvcigiYSByZWNvcmQgY2FuIG5vdCBoYXZlIG1vcmUgZmllbGRzIHRoYW4gcHJvdmlkZWQgY29sdW1ucyIpO2NvbnN0IFU9eWllbGQo''@;'; put 'put ''MCxqLnJlYWRDc3YpKFMpLmNhdGNoKFY9PltdKSxIPVVbMF07aWYoSCl7aWYoUi5sZW5ndGg+SC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJudW1iZXIgb2YgcHJvdmlkZWQgY29sdW1ucyBhcmUgZ3JlYXRlciB0aGFuIG51bWJlciBvZiBleGlzdGluZyBjb2x1bW5zIik7aWYoUi5sZW5ndGg8''@;'; put 'put ''SC5sZW5ndGgpe2lmKCF4fHxSLmxlbmd0aCsxIT09SC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJudW1iZXIgb2YgcHJvdmlkZWQgY29sdW1ucyBhcmUgbGVzcyB0aGFuIG51bWJlciBvZiBleGlzdGluZyBjb2x1bW5zIik7Y29uc3QgVj1ILmZpbmRJbmRleCh6PT56PT09eCksTj1bLi4uUl07''@;'; put 'put ''aWYoIShWPi0xKSl0aHJvdyBuZXcgRXJyb3IoInByb3ZpZGVkIGNvbHVtbnMgZG9lcyBub3QgbWF0Y2ggZXhpc3RpbmcgY29sdW1ucyIpO2lmKE4uc3BsaWNlKFYsMCx4KSxKU09OLnN0cmluZ2lmeShSKSE9PUpTT04uc3RyaW5naWZ5KE4pKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29s''@;'; put 'put ''dW1ucyBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIil9ZWxzZXtpZihKU09OLnN0cmluZ2lmeShSKSE9PUpTT04uc3RyaW5naWZ5KEgpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIik7aWYoeCYmIVIuaW5j''@;'; put 'put ''bHVkZXMoeCkpdGhyb3cgbmV3IEVycm9yKCJjYW4gbm90IGFkZCBuZXcgaWQgdG8gZXhpc3RpbmcgZGF0YSIpfX1yZXR1cm4gVX0pfSw1MTI3NihmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24ocCxJ''@;'; put 'put ''LHVlLG5lKXt2b2lkIDA9PT1uZSYmKG5lPXVlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkocCxuZSx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSVt1ZV19fSl9OmZ1bmN0aW9uKHAsSSx1ZSxuZSl7dm9pZCAwPT09bmUmJihuZT11ZSkscFtuZV09SVt1ZV19KSxjPXRoaXMm''@;'; put 'put ''JnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihwLEkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpJfSl9OmZ1bmN0aW9uKHAsSSl7cC5kZWZhdWx0PUl9KSxzPXRoaXMmJnRoaXMuX19pbXBvcnRT''@;'; put 'put ''dGFyfHxmdW5jdGlvbihwKXtpZihwJiZwLl9fZXNNb2R1bGUpcmV0dXJuIHA7dmFyIEk9e307aWYobnVsbCE9cClmb3IodmFyIHVlIGluIHApImRlZmF1bHQiIT09dWUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwLHVlKSYmeShJLHAsdWUpO3JldHVybiBjKEkscCks''@;'; put 'put ''SX0sQT10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24ocCxJLHVlLG5lKXtyZXR1cm4gbmV3KHVlfHwodWU9UHJvbWlzZSkpKGZ1bmN0aW9uKFBlLG90KXtmdW5jdGlvbiBsdChhZSl7dHJ5e1JlKG5lLm5leHQoYWUpKX1jYXRjaCh4ZSl7b3QoeGUpfX1mdW5jdGlvbiBkdChhZSl7dHJ5''@;'; put 'put ''e1JlKG5lLnRocm93KGFlKSl9Y2F0Y2goeGUpe290KHhlKX19ZnVuY3Rpb24gUmUoYWUpe2FlLmRvbmU/UGUoYWUudmFsdWUpOmZ1bmN0aW9uIF9lKFBlKXtyZXR1cm4gUGUgaW5zdGFuY2VvZiB1ZT9QZTpuZXcgdWUoZnVuY3Rpb24ob3Qpe290KFBlKX0pfShhZS52YWx1ZSkudGhlbihsdCxk''@;'; put 'put ''dCl9UmUoKG5lPW5lLmFwcGx5KHAsSXx8W10pKS5uZXh0KCkpfSl9LHY9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHApe3JldHVybiBwJiZwLl9fZXNNb2R1bGU/cDp7ZGVmYXVsdDpwfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZToh''@;'; put 'put ''MH0pLGouZ2V0TGluZUVuZGluZz1qLmlzVGVzdEZpbGU9ai50ZXN0RmlsZVJlZ0V4cD1qLmNyZWF0ZVJlYWRTdHJlYW09ai5jcmVhdGVXcml0ZVN0cmVhbT1qLmdldFJlYWxQYXRoPWouYmFzZTY0RW5jb2RlRmlsZT1qLmJhc2U2NEVuY29kZUltYWdlRmlsZT1qLnBhdGhTZXBFc2NhcGVkPWou''@;'; put 'put ''Y29weT1qLm1vdmVGaWxlPWouZ2V0UmVsYXRpdmVQYXRoPWoudW5pZnlGaWxlUGF0aD1qLmRlbGV0ZUZvbGRlcj1qLmRlbGV0ZUZpbGU9ai5jcmVhdGVGaWxlPWouY3JlYXRlRm9sZGVyPWoubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyPWoubGlzdFN1YkZvbGRlcnNJbkZvbGRlcj1q''@;'; put 'put ''Lmxpc3RTYXNGaWxlc0luRm9sZGVyPWoubGlzdEluaUZpbGVzSW5Gb2xkZXI9ai5saXN0RmlsZXNJbkZvbGRlcj1qLnJlYWRGaWxlQmluYXJ5PWoucmVhZEZpbGU9ai5pc0ZvbGRlcj1qLmZvbGRlckV4aXN0cz1qLmZpbGVFeGlzdHM9dm9pZCAwO2NvbnN0IEM9dihoKDIxNjA1KSksdz12KGgo''@;'; put 'put ''NDM2MjcpKSxTPWgoNTI3NjMpLEw9cyhoKDI1OTA4KSksUj1oKDM2MzEpO2Z1bmN0aW9uIFUocCl7cmV0dXJuIEEodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBDLmRlZmF1bHQucHJvbWlzZXMuYWNjZXNzKHAsQy5kZWZhdWx0LmNvbnN0YW50cy5GX09LKS50aGVuKCgp''@;'; put 'put ''PT4hMCkuY2F0Y2goKCk9PiExKX0pfWZ1bmN0aW9uIE4ocCl7cmV0dXJuIEEodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBDLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUocCl9KX1mdW5jdGlvbiB6KHApe3JldHVybiBBKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv''@;'; put 'put ''biooKXtyZXR1cm4gQy5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIocCx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4oST0+SS5maWx0ZXIodWU9PiF1ZS5pc0RpcmVjdG9yeSgpKS5tYXAodWU9PnVlLm5hbWUpKX0pfWZ1bmN0aW9uIHEocCxJPSEwLHVlPVtdKXtyZXR1cm4gQSh0aGlzLHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIEMuZGVmYXVsdC5wcm9taXNlcy5yZWFkZGlyKHAse3dpdGhGaWxlVHlwZXM6ITB9KS50aGVuKG5lPT5BKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZihJJiZuZS5maWx0ZXIoUGU9PlBlLmlzRGlyZWN0b3J5KCkpLmxlbmd0aCl7''@;'; put 'put ''bGV0IFBlPVtdO3JldHVybiB5aWVsZCgwLFMuYXN5bmNGb3JFYWNoKShuZS5maWx0ZXIob3Q9Pm90LmlzRGlyZWN0b3J5KCkpLG90PT5BKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBsdD1vdC5uYW1lO2lmKCF1ZS5pbmNsdWRlcyhsdCkpe2NvbnN0IGR0PXcuZGVmYXVs''@;'; put 'put ''dC5qb2luKHAsbHQpO1BlPVsuLi5QZSwuLi4oeWllbGQgcShkdCxJLHVlKSkubWFwKFJlPT53LmRlZmF1bHQuam9pbihsdCxSZSkpXX19KSksWy4uLm5lLmZpbHRlcihvdD0+IW90LmlzRGlyZWN0b3J5KCkpLm1hcChvdD0+b3QubmFtZSksLi4uUGVdfXJldHVybiBuZS5tYXAoX2U9Pl9lLm5h''@;'; put 'put ''bWUpfSkpfSl9ZnVuY3Rpb24gcmUocCl7cmV0dXJuIEEodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBDLmRlZmF1bHQucHJvbWlzZXMubWtkaXIocCx7cmVjdXJzaXZlOiEwfSl9KX1mdW5jdGlvbiBrZShwLEk9dy5kZWZhdWx0LnNlcCx1ZT0iLyIpe2NvbnN0IG5lPXt1''@;'; put 'put ''bml4OiIvIix3aW46IlxcIn07bGV0IF9lPU9iamVjdC5rZXlzKG5lKS5maW5kKFBlPT5uZVtQZV09PT1JKTtpZihfZSl7Y29uc3QgUGU9bmVbT2JqZWN0LmtleXMobmUpLmZpbmQob3Q9Pm90IT09X2UpXTtyZXR1cm4gX2U9bmVbX2VdLHAuc3BsaXQoUGUpLmpvaW4oX2UpfXJldHVybiBwLnNw''@;'; put 'put ''bGl0KHVlKS5qb2luKEkpfWouZmlsZUV4aXN0cz1mdW5jdGlvbiB4KHApe3JldHVybiBBKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gQy5kZWZhdWx0LnByb21pc2VzLmFjY2VzcyhwLEMuZGVmYXVsdC5jb25zdGFudHMuRl9PSykudGhlbigoKT0+ITApLmNhdGNoKCgp''@;'; put 'put ''PT4hMSl9KX0sai5mb2xkZXJFeGlzdHM9VSxqLmlzRm9sZGVyPWZ1bmN0aW9uIEgocCl7cmV0dXJuIEEodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBDLmRlZmF1bHQucHJvbWlzZXMubHN0YXQocCkudGhlbihJPT5JLmlzRGlyZWN0b3J5KCkpLmNhdGNoKCgpPT4hMSl9''@;'; put 'put ''KX0sai5yZWFkRmlsZT1mdW5jdGlvbiBWKHAsST0idXRmOCIpe3JldHVybiBBKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gQy5kZWZhdWx0LnByb21pc2VzLnJlYWRGaWxlKHAsSSl9KX0sai5yZWFkRmlsZUJpbmFyeT1OLGoubGlzdEZpbGVzSW5Gb2xkZXI9eixqLmxp''@;'; put 'put ''c3RJbmlGaWxlc0luRm9sZGVyPWZ1bmN0aW9uIFkocCl7cmV0dXJuIEEodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCB6KHApKS5maWx0ZXIoST0+SS5lbmRzV2l0aCgiLmluaSIpKX0pfSxqLmxpc3RTYXNGaWxlc0luRm9sZGVyPWZ1bmN0aW9uIEYocCxJPSEx''@;'; put 'put ''LHVlPVtdKXtyZXR1cm4gQSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHEocCxJLHVlKSkuZmlsdGVyKFBlPT5QZS5lbmRzV2l0aCgiLnNhcyIpKX0pfSxqLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXI9ZnVuY3Rpb24gVyhwKXtyZXR1cm4gQSh0aGlzLHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIEMuZGVmYXVsdC5wcm9taXNlcy5yZWFkZGlyKHAse3dpdGhGaWxlVHlwZXM6ITB9KS50aGVuKEk9PkkuZmlsdGVyKHVlPT51ZS5pc0RpcmVjdG9yeSgpKS5tYXAodWU9PnVlLm5hbWUpKX0pfSxqLmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZv''@;'; put 'put ''bGRlcj1xLGouY3JlYXRlRm9sZGVyPXJlLGouY3JlYXRlRmlsZT1mdW5jdGlvbiBtZShwLEksdWUpe3JldHVybiBBKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZigocD1rZShwKSkuc3BsaXQody5kZWZhdWx0LnNlcCkubGVuZ3RoPjEpe2xldCBuZT1wLnNwbGl0KHcuZGVmYXVs''@;'; put 'put ''dC5zZXApO25lLnBvcCgpO2NvbnN0IF9lPW5lLmpvaW4ody5kZWZhdWx0LnNlcCk7KHlpZWxkIFUoX2UpKXx8KHlpZWxkIHJlKF9lKSl9cmV0dXJuIEMuZGVmYXVsdC5wcm9taXNlcy53cml0ZUZpbGUocCxJLHVlKX0pfSxqLmRlbGV0ZUZpbGU9ZnVuY3Rpb24gQ2UocCl7cmV0dXJuIEEodGhp''@;'; put 'put ''cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBDLmRlZmF1bHQucmVtb3ZlKHApfSl9LGouZGVsZXRlRm9sZGVyPWZ1bmN0aW9uIEllKHApe3JldHVybiBBKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gQy5kZWZhdWx0LnJtKHAse3JlY3Vyc2l2ZTohMCxm''@;'; put 'put ''b3JjZTohMH0pfSl9LGoudW5pZnlGaWxlUGF0aD1rZSxqLmdldFJlbGF0aXZlUGF0aD1mdW5jdGlvbiBxZShwLEkpe2NvbnN0IHVlPXAuc3BsaXQody5kZWZhdWx0LnNlcCksbmU9SS5zcGxpdCh3LmRlZmF1bHQuc2VwKTtsZXQgX2U9W10sUGU9W107dWUuZm9yRWFjaCgoYWUseGUpPT57dm9p''@;'; put 'put ''ZCAwIT09bmVbeGVdJiZ1ZVt4ZV09PT1uZVt4ZV0/X2UucHVzaChhZSk6YWUmJlBlLnB1c2goYWUpfSk7Y29uc3Qgb3Q9X2Uuam9pbih3LmRlZmF1bHQuc2VwKSxsdD1uZXcgUmVnRXhwKGBeJHt3LmRlZmF1bHQuc2VwLnJlcGxhY2UoL1xcL2csIlxcXFwiKX1gKSxkdD1uZXcgUmVnRXhwKGAk''@;'; put 'put ''e3cuZGVmYXVsdC5zZXAucmVwbGFjZSgvXFwvZywiXFxcXCIpfSRgKTtyZXR1cm4oUGUubGVuZ3RoP2AuLiR7dy5kZWZhdWx0LnNlcH1gLnJlcGVhdChQZS5sZW5ndGgpOmAuJHt3LmRlZmF1bHQuc2VwfWApK0kucmVwbGFjZShvdCwiIikucmVwbGFjZShsdCwiIikucmVwbGFjZShkdCwiIil9''@;'; put 'put ''LGoubW92ZUZpbGU9ZnVuY3Rpb24gWChwLEkpe3JldHVybiBBKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gQy5kZWZhdWx0LnByb21pc2VzLnJlbmFtZShwLEkpfSl9LGouY29weT1mdW5jdGlvbiBmKHAsSSl7cmV0dXJuIEEodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0''@;'; put 'put ''aW9uKigpe3JldHVybiBDLmRlZmF1bHQuY29weShwLEkpfSl9LGoucGF0aFNlcEVzY2FwZWQ9dy5kZWZhdWx0LnNlcC5yZXBsYWNlKC9cXC9nLCJcXFxcIiksai5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9ZnVuY3Rpb24gYihwKXtyZXR1cm4gQSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q''@;'; put 'put ''KCl7cmV0dXJuIE4ocCkudGhlbihJPT57bGV0IHVlPXcuZGVmYXVsdC5leHRuYW1lKHApLnN1YnN0cigxKXx8InBuZyI7cmV0dXJuInN2ZyI9PT11ZSYmKHVlPSJzdmcreG1sIiksImRhdGE6aW1hZ2UvIit1ZSsiO2Jhc2U2NCwiK0kudG9TdHJpbmcoImJhc2U2NCIpfSl9KX0sai5iYXNlNjRF''@;'; put 'put ''bmNvZGVGaWxlPWZ1bmN0aW9uIGsocCl7cmV0dXJuIEEodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBDLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUocCx7ZW5jb2Rpbmc6ImJhc2U2NCJ9KX0pfSxqLmdldFJlYWxQYXRoPWZ1bmN0aW9uIE0ocCl7cmV0dXJuIEMuZGVm''@;'; put 'put ''YXVsdC5yZWFscGF0aFN5bmMocCl9LGouY3JlYXRlV3JpdGVTdHJlYW09ZnVuY3Rpb24gQihwKXtyZXR1cm4gQSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIEwuZmlsZUV4aXN0cyhwKSl8fCh5aWVsZCBMLmNyZWF0ZUZpbGUocCwiIikpLEMuZGVmYXVsdC5j''@;'; put 'put ''cmVhdGVXcml0ZVN0cmVhbShwLHtmbGFnczoiYSJ9KX0pfSxqLmNyZWF0ZVJlYWRTdHJlYW09cD0+QSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gQy5kZWZhdWx0LmNyZWF0ZVJlYWRTdHJlYW0ocCl9KSxqLnRlc3RGaWxlUmVnRXhwPS9cLnRlc3RcLihcZCtcLik/''@;'; put 'put ''c2FzJC9pLGouaXNUZXN0RmlsZT1wPT5qLnRlc3RGaWxlUmVnRXhwLnRlc3QocCksai5nZXRMaW5lRW5kaW5nPXA9Pm5ldyBSZWdFeHAoUi5MaW5lRW5kaW5ncy5DUkxGKS50ZXN0KHApP1IuTGluZUVuZGluZ3MuQ1JMRjpSLkxpbmVFbmRpbmdzLkxGfSw5MTkxMChmZSxqLGgpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgeT10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24odil7cmV0dXJuIHYmJnYuX19lc01vZHVsZT92OntkZWZhdWx0OnZ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5nZXRBYnNvbHV0ZVBhdGg9dm9pZCAwO2Nv''@;'; put 'put ''bnN0IGM9eShoKDQzNjI3KSkscz15KGgoNTEwNzIpKTtqLmdldEFic29sdXRlUGF0aD0odixDKT0+Yy5kZWZhdWx0LmlzQWJzb2x1dGUodil8fC9efi8uZXhlYyh2KT9jLmRlZmF1bHQubm9ybWFsaXplKHYucmVwbGFjZSgvXn4vLHMuZGVmYXVsdC5ob21lZGlyKCkpKTpjLmRlZmF1bHQuam9p''@;'; put 'put ''bihDLHYpfSwyNTkwOChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24odixDLHcsUyl7dm9pZCAwPT09UyYmKFM9dyksT2JqZWN0LmRlZmluZVByb3BlcnR5KHYsUyx7ZW51bWVyYWJsZTohMCxnZXQ6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gQ1t3XX19KX06ZnVuY3Rpb24odixDLHcsUyl7dm9pZCAwPT09UyYmKFM9dyksdltTXT1DW3ddfSksYz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24odixDKXtmb3IodmFyIHcgaW4gdikiZGVmYXVsdCIhPT13JiYhT2JqZWN0LnByb3RvdHlwZS5o''@;'; put 'put ''YXNPd25Qcm9wZXJ0eS5jYWxsKEMsdykmJnkoQyx2LHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5yZWFkQ3N2PWouY3JlYXRlQ3N2PWoudXBkYXRlQ3N2PWouZ2V0TGluZUVuZGluZz1qLnRlc3RGaWxlUmVnRXhwPWouaXNUZXN0RmlsZT1q''@;'; put 'put ''LmdldFJlYWxQYXRoPWouYmFzZTY0RW5jb2RlRmlsZT1qLmJhc2U2NEVuY29kZUltYWdlRmlsZT1qLmNvcHk9ai5wYXRoU2VwRXNjYXBlZD1qLm1vdmVGaWxlPWoudW5pZnlGaWxlUGF0aD1qLmdldFJlbGF0aXZlUGF0aD1qLmRlbGV0ZUZvbGRlcj1qLmRlbGV0ZUZpbGU9ai5jcmVhdGVXcml0''@;'; put 'put ''ZVN0cmVhbT1qLmNyZWF0ZVJlYWRTdHJlYW09ai5jcmVhdGVGb2xkZXI9ai5jcmVhdGVGaWxlPWoubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyPWoubGlzdFN1YkZvbGRlcnNJbkZvbGRlcj1qLmxpc3RTYXNGaWxlc0luRm9sZGVyPWoubGlzdEluaUZpbGVzSW5Gb2xkZXI9ai5saXN0''@;'; put 'put ''RmlsZXNJbkZvbGRlcj1qLnJlYWRGaWxlQmluYXJ5PWoucmVhZEZpbGU9ai5pc0ZvbGRlcj1qLmZvbGRlckV4aXN0cz1qLmZpbGVFeGlzdHM9dm9pZCAwO3ZhciBzPWgoNTEyNzYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJmaWxlRXhpc3RzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gcy5maWxlRXhpc3RzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJmb2xkZXJFeGlzdHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmZvbGRlckV4aXN0c319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiaXNGb2xkZXIiLHtlbnVtZXJh''@;'; put 'put ''YmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmlzRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJyZWFkRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMucmVhZEZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosInJlYWRGaWxlQmlu''@;'; put 'put ''YXJ5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5yZWFkRmlsZUJpbmFyeX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwibGlzdEZpbGVzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmxpc3RGaWxlc0luRm9sZGVyfX0p''@;'; put 'put ''LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJsaXN0SW5pRmlsZXNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMubGlzdEluaUZpbGVzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosImxpc3RTYXNGaWxlc0luRm9sZGVyIix7ZW51bWVy''@;'; put 'put ''YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5saXN0U2FzRmlsZXNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwibGlzdFN1YkZvbGRlcnNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMubGlzdFN1YkZvbGRlcnNJbkZvbGRl''@;'; put 'put ''cn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwibGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosImNyZWF0''@;'; put 'put ''ZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmNyZWF0ZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosImNyZWF0ZUZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuY3JlYXRlRm9sZGVyfX0pLE9iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShqLCJjcmVhdGVSZWFkU3RyZWFtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5jcmVhdGVSZWFkU3RyZWFtfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJjcmVhdGVXcml0ZVN0cmVhbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHMuY3JlYXRlV3JpdGVTdHJlYW19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosImRlbGV0ZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmRlbGV0ZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosImRlbGV0ZUZvbGRlciIse2VudW1l''@;'; put 'put ''cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuZGVsZXRlRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJnZXRSZWxhdGl2ZVBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmdldFJlbGF0aXZlUGF0aH19KSxPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoaiwidW5pZnlGaWxlUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMudW5pZnlGaWxlUGF0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwibW92ZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLm1vdmVGaWxlfX0p''@;'; put 'put ''LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJwYXRoU2VwRXNjYXBlZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMucGF0aFNlcEVzY2FwZWR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosImNvcHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBzLmNvcHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosImJhc2U2NEVuY29kZUltYWdlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuYmFzZTY0RW5jb2RlSW1hZ2VGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJiYXNlNjRFbmNvZGVGaWxl''@;'; put 'put ''Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5iYXNlNjRFbmNvZGVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJnZXRSZWFsUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuZ2V0UmVhbFBhdGh9fSksT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KGosImlzVGVzdEZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmlzVGVzdEZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosInRlc3RGaWxlUmVnRXhwIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy50ZXN0Rmls''@;'; put 'put ''ZVJlZ0V4cH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiZ2V0TGluZUVuZGluZyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuZ2V0TGluZUVuZGluZ319KTt2YXIgQT1oKDU3ODM4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwidXBkYXRlQ3N2Iix7ZW51bWVy''@;'; put 'put ''YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQS51cGRhdGVDc3Z9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosImNyZWF0ZUNzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEEuY3JlYXRlQ3N2fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJyZWFkQ3N2''@;'; put 'put ''Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQS5yZWFkQ3N2fX0pLGMoaCg5MTkxMCksail9LDU1NzQ4KGZlLGosaCl7InVzZSBzdHJpY3QiO2oucGFkV2l0aE51bWJlcj12b2lkIDA7dmFyIGM9aCg1MDExKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwicGFkV2l0aE51''@;'; put 'put ''bWJlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMucGFkV2l0aE51bWJlcn19KSxoKDY2NjcpLGgoMzk5MzEpfSw1MDExKGZlLGopeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5wYWRXaXRoTnVt''@;'; put 'put ''YmVyPXZvaWQgMCxqLnBhZFdpdGhOdW1iZXI9KHksYz0wKT0+eT45P3k6YCR7Y30ke3l9YH0sMzk5MzEoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg2NTYwNik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGoubmV3TGluZT12b2lkIDAsai5u''@;'; put 'put ''ZXdMaW5lPSgpPT4id2luMzIiPT09eS5wbGF0Zm9ybT8iXFxyXFxuIjoiXFxuIn0sNjY2NyhmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouY2FwaXRhbGl6ZUZpcnN0Q2hhcj1qLnNhbml0aXplU3BlY2lhbENoYXJz''@;'; put 'put ''PXZvaWQgMCxqLnNhbml0aXplU3BlY2lhbENoYXJzPWM9PmMucmVwbGFjZSgvW1x1MDAxYlx1MDA5Yl1bWygpIzs/XSooPzpbMC05XXsxLDR9KD86O1swLTldezAsNH0pKik/WzAtOUEtT1JaY2YtbnFyeT0+PF0vZywiIiksai5jYXBpdGFsaXplRmlyc3RDaGFyPWM9PmMuY2hhckF0KDApLnRv''@;'; put 'put ''VXBwZXJDYXNlKCkrYy5zbGljZSgxKX0sNDMzNzEoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHcpe3JldHVybiB3JiZ3Ll9fZXNNb2R1bGU/dzp7ZGVmYXVsdDp3fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNN''@;'; put 'put ''b2R1bGUiLHt2YWx1ZTohMH0pLGouaXNTcGVjaWFsTWlzc2luZz1qLmNob2ljZVZhbGlkYXRvcj1qLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1qLnVybFZhbGlkYXRvcj12b2lkIDA7Y29uc3QgYz15KGgoMTc4NTMpKTtqLnVybFZhbGlkYXRvcj0odyxTKT0+ISFjLmRlZmF1bHQuaXNIdHRwVXJp''@;'; put 'put ''KHcpfHwhIWMuZGVmYXVsdC5pc0h0dHBzVXJpKHcpfHwiIj09PXd8fFMsai5jb25maXJtYXRpb25WYWxpZGF0b3I9dz0+ITA9PT13fHwhMT09PXcsai5jaG9pY2VWYWxpZGF0b3I9KHcsUyxMKT0+dz4wJiZ3PD1TfHxMLGouaXNTcGVjaWFsTWlzc2luZz13PT4oInN0cmluZyIhPXR5cGVvZiB3''@;'; put 'put ''fHwhdy5pbmNsdWRlcygiLi4iKSkmJm5ldyBSZWdFeHAoIl4oXFwuKT9bYS16Xy5dezF9JCIsImkiKS50ZXN0KHcpfSw4NzI0NyhmZSxqLGgpeyJ1c2Ugc3RyaWN0IjtqLmdlbmVyYXRlVGltZXN0YW1wPWoudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUz12b2lkIDA7dmFyIGM9aCg1NTk0Nyk7''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KGosInRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBjLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1N9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosImdlbmVyYXRlVGltZXN0YW1wIix7''@;'; put 'put ''ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5nZW5lcmF0ZVRpbWVzdGFtcH19KX0sNTU5NDcoZmUsaixoKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouY29udmVydFNlY29uZHNUb0htcz1qLmdlbmVy''@;'; put 'put ''YXRlVGltZXN0YW1wPWoudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUz12b2lkIDA7Y29uc3QgeT1oKDU1NzQ4KTtqLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1M9KHY9RGF0ZS5ub3coKSk9Pntjb25zdCBDPW5ldyBEYXRlKHYpO3JldHVybltDLmdldEZ1bGxZZWFyKCksKDAseS5wYWRXaXRo''@;'; put 'put ''TnVtYmVyKShDLmdldE1vbnRoKCkrMSksKDAseS5wYWRXaXRoTnVtYmVyKShDLmdldERhdGUoKSldLmpvaW4oIi8iKSsiICIrWygwLHkucGFkV2l0aE51bWJlcikoQy5nZXRIb3VycygpKSwoMCx5LnBhZFdpdGhOdW1iZXIpKEMuZ2V0TWludXRlcygpKSwoMCx5LnBhZFdpdGhOdW1iZXIpKEMu''@;'; put 'put ''Z2V0U2Vjb25kcygpKV0uam9pbigiOiIpfSxqLmdlbmVyYXRlVGltZXN0YW1wPSh2PSIiLEMpPT57Y29uc3Qgdz1uZXcgRGF0ZTtsZXQgUz1bdy5nZXRVVENGdWxsWWVhcigpLHcuZ2V0VVRDTW9udGgoKSsxLHcuZ2V0VVRDRGF0ZSgpLHcuZ2V0VVRDSG91cnMoKSx3LmdldFVUQ01pbnV0ZXMo''@;'; put 'put ''KSx3LmdldFVUQ1NlY29uZHMoKV07cmV0dXJuIFM9Uy5tYXAoTD0+KDAseS5wYWRXaXRoTnVtYmVyKShMKSksQyYmdiYmQzxTLmxlbmd0aCYmQz49MCYmUy5zcGxpY2UoQywwLHYpLFM9Uy5qb2luKEM/IiI6diksU30sai5jb252ZXJ0U2Vjb25kc1RvSG1zPXY9PntpZighdilyZXR1cm4iMCBz''@;'; put 'put ''ZWNvbmQiO2NvbnN0IEM9TWF0aC5mbG9vcih2LzYwKSx3PU1hdGguZmxvb3IoQy82MCksUz1DJTYwLEw9diU2MDtsZXQgUj0iIjtyZXR1cm4gdz4wJiYoUj13KyIgaG91ciIrKHc+MT8icyI6IiIpKSxTPjAmJihSKz1gJHtSPyIsICI6IiJ9JHtTfSBtaW51dGUke1M+MT8icyI6IiJ9YCksTD4w''@;'; put 'put ''JiYoUis9YCR7Uj8iLCAiOiIifSR7TH0gc2Vjb25kJHtMPjE/InMiOiIifWApLFJ9fSwyMjkxNyhmZSxqKXsidXNlIHN0cmljdCI7dmFyIHk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouQ29uZmlnVHlwZXM9dm9pZCAwLCh5PWouQ29uZmlnVHlw''@;'; put 'put ''ZXN8fChqLkNvbmZpZ1R5cGVzPXt9KSkuQnVpbGQ9ImJ1aWxkQ29uZmlnIix5LlNlcnZpY2U9InNlcnZpY2VDb25maWciLHkuSm9iPSJqb2JDb25maWciLHkuVGVzdD0idGVzdENvbmZpZyIseS5Eb2M9ImRvY0NvbmZpZyIseS5EZXBsb3k9ImRlcGxveUNvbmZpZyIseS5TdHJlYW09InN0cmVh''@;'; put 'put ''bUNvbmZpZyIseS5BdXRoPSJhdXRoQ29uZmlnIn0sMTUwNShmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1NzMxMihmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUi''@;'; put 'put ''LHt2YWx1ZTohMH0pfSw5NTExNShmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw3MjU1NyhmZSxqKXsidXNlIHN0cmljdCI7dmFyIHk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZToh''@;'; put 'put ''MH0pLGouTGluZUVuZGluZ3M9dm9pZCAwLCh5PWouTGluZUVuZGluZ3N8fChqLkxpbmVFbmRpbmdzPXt9KSkuQ1JMRj0iXHJcbiIseS5MRj0iXG4ifSwzNTk0NShmZSxqKXsidXNlIHN0cmljdCI7dmFyIHk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p''@;'; put 'put ''LGouTWVtYmVyVHlwZT12b2lkIDAsKHk9ai5NZW1iZXJUeXBlfHwoai5NZW1iZXJUeXBlPXt9KSkuc2VydmljZT0ic2VydmljZSIseS5maWxlPSJmaWxlIix5LmZvbGRlcj0iZm9sZGVyIn0sMzU3MjMoZmUsail7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9k''@;'; put 'put ''dWxlIix7dmFsdWU6ITB9KX0sMTMwMjMoZmUsail7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMzYzMShmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVh''@;'; put 'put ''dGU/ZnVuY3Rpb24ocyxBLHYsQyl7dm9pZCAwPT09QyYmKEM9diksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsQyx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQVt2XX19KX06ZnVuY3Rpb24ocyxBLHYsQyl7dm9pZCAwPT09QyYmKEM9diksc1tDXT1BW3ZdfSksYz10aGlz''@;'; put 'put ''JiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24ocyxBKXtmb3IodmFyIHYgaW4gcykiZGVmYXVsdCIhPT12JiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEEsdikmJnkoQSxzLHYpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEw''@;'; put 'put ''fSksYyhoKDIyOTE3KSxqKSxjKGgoMTUwNSksaiksYyhoKDU3MzEyKSxqKSxjKGgoOTUxMTUpLGopLGMoaCgzNTk0NSksaiksYyhoKDM1NzIzKSxqKSxjKGgoMTMwMjMpLGopLGMoaCgyNzU5MSksaiksYyhoKDY3NzQ3KSxqKSxjKGgoNTQ0ODMpLGopLGMoaCgxNTAyOCksaiksYyhoKDIwNzU2''@;'; put 'put ''KSxqKSxjKGgoMjc3MTcpLGopLGMoaCgzMTgyKSxqKSxjKGgoNzI1NTcpLGopfSwyNzU5MShmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouaXNNYWNyb1ZhcnM9dm9pZCAwLGouaXNNYWNyb1ZhcnM9eT0+eSYmIm9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiB5Lm1hY3JvVmFycyYmIUFycmF5LmlzQXJyYXkoeS5tYWNyb1ZhcnMpfSw2Nzc0NyhmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1NDQ4MyhmZSxqKXsidXNlIHN0cmljdCI7dmFyIHk7T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouU0FTSnNGaWxlVHlwZT12b2lkIDAsKHk9ai5TQVNKc0ZpbGVUeXBlfHwoai5TQVNKc0ZpbGVUeXBlPXt9KSkuc2VydmljZT0iU2VydmljZSIseS5qb2I9IkpvYiIseS50ZXN0PSJUZXN0Iix5LmZpbGU9IkZp''@;'; put 'put ''bGUifSwxNTAyOChmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwyMDc1NihmZSxqKXsidXNlIHN0cmljdCI7dmFyIHk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouU2Vy''@;'; put 'put ''dmVyVHlwZT12b2lkIDAsKHk9ai5TZXJ2ZXJUeXBlfHwoai5TZXJ2ZXJUeXBlPXt9KSkuU2FzVml5YT0iU0FTVklZQSIseS5TYXM5PSJTQVM5Iix5LlNhc2pzPSJTQVNKUyJ9LDI3NzE3KGZlLGopeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3Zh''@;'; put 'put ''bHVlOiEwfSl9LDMxODIoZmUsaixoKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouVGFyZ2V0PXZvaWQgMDtjb25zdCB5PWgoMjI5MTcpLGM9aCgyMDc1Nikscz1oKDE3NDczKTtqLlRhcmdldD1jbGFzcyBBe2NvbnN0cnVj''@;'; put 'put ''dG9yKEMsdz17fSl7dGhpcy5fc2VydmVyVHlwZT1jLlNlcnZlclR5cGUuU2FzVml5YSx0aGlzLmdldENvbmZpZz0oUyxMKT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuX2NvbmZpZ1tTXXx8e30pLExbU10pO3RyeXtpZighQyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQg''@;'; put 'put ''dGFyZ2V0OiBJbnB1dCBKU09OIGlzIG51bGwgb3IgdW5kZWZpbmVkLiIpO3RoaXMuX2NvbmZpZz13LHRoaXMuX25hbWU9KDAscy52YWxpZGF0ZVRhcmdldE5hbWUpKEMubmFtZSksdGhpcy5fc2VydmVyVXJsPSgwLHMudmFsaWRhdGVTZXJ2ZXJVcmwpKEMuc2VydmVyVXJsKSx0aGlzLl9zZXJ2''@;'; put 'put ''ZXJUeXBlPSgwLHMudmFsaWRhdGVTZXJ2ZXJUeXBlKShDLnNlcnZlclR5cGUpLHRoaXMuX2h0dHBzQWdlbnRPcHRpb25zPSgwLHMudmFsaWRhdGVIdHRwc0FnZW50T3B0aW9ucykoQy5odHRwc0FnZW50T3B0aW9ucyksdGhpcy5fYXBwTG9jPSgwLHMudmFsaWRhdGVBcHBMb2MpKEMuYXBwTG9j''@;'; put 'put ''KSx0aGlzLl9jb250ZXh0TmFtZT0oMCxzLnZhbGlkYXRlQ29udGV4dE5hbWUpKEMuY29udGV4dE5hbWUsdGhpcy5fc2VydmVyVHlwZSksdGhpcy5fc2VydmVyTmFtZT0oMCxzLnZhbGlkYXRlU2VydmVyTmFtZSkoQy5zZXJ2ZXJOYW1lLHRoaXMuX3NlcnZlclR5cGUpLHRoaXMuX3N5bmNGb2xk''@;'; put 'put ''ZXI9KDAscy52YWxpZGF0ZVN5bmNGb2xkZXIpKEMuc3luY0ZvbGRlciksdGhpcy5fcmVwb3NpdG9yeU5hbWU9KDAscy52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lKShDLnJlcG9zaXRvcnlOYW1lLHRoaXMuX3NlcnZlclR5cGUpLEMuZG9jQ29uZmlnJiYodGhpcy5fZG9jQ29uZmlnPSgwLHMudmFs''@;'; put 'put ''aWRhdGVEb2NDb25maWcpKHRoaXMuZ2V0Q29uZmlnKHkuQ29uZmlnVHlwZXMuRG9jLEMpKSksQy5hdXRoQ29uZmlnJiYodGhpcy5fYXV0aENvbmZpZz0oMCxzLnZhbGlkYXRlQXV0aENvbmZpZykodGhpcy5nZXRDb25maWcoeS5Db25maWdUeXBlcy5BdXRoLEMpKSksQy5hdXRoQ29uZmlnU2Fz''@;'; put 'put ''OSYmKHRoaXMuX2F1dGhDb25maWdTYXM5PSgwLHMudmFsaWRhdGVBdXRoQ29uZmlnU2FzOSkoQy5hdXRoQ29uZmlnU2FzOSkpLEMuYnVpbGRDb25maWcmJih0aGlzLl9idWlsZENvbmZpZz0oMCxzLnZhbGlkYXRlQnVpbGRDb25maWcpKHRoaXMuZ2V0Q29uZmlnKHkuQ29uZmlnVHlwZXMuQnVp''@;'; put 'put ''bGQsQyksdGhpcy5fbmFtZSkpLHRoaXMuX2RlcGxveUNvbmZpZz0oMCxzLnZhbGlkYXRlRGVwbG95Q29uZmlnKShDLmRlcGxveUNvbmZpZz90aGlzLmdldENvbmZpZyh5LkNvbmZpZ1R5cGVzLkRlcGxveSxDKTp7ZGVwbG95U2VydmljZVBhY2s6ITAsZGVwbG95U2NyaXB0czpbXX0pLEMuc2Vy''@;'; put 'put ''dmljZUNvbmZpZyYmKHRoaXMuX3NlcnZpY2VDb25maWc9KDAscy52YWxpZGF0ZVNlcnZpY2VDb25maWcpKHRoaXMuZ2V0Q29uZmlnKHkuQ29uZmlnVHlwZXMuU2VydmljZSxDKSkpLEMuam9iQ29uZmlnJiYodGhpcy5fam9iQ29uZmlnPSgwLHMudmFsaWRhdGVKb2JDb25maWcpKHRoaXMuZ2V0''@;'; put 'put ''Q29uZmlnKHkuQ29uZmlnVHlwZXMuSm9iLEMpKSksQy5zdHJlYW1Db25maWcmJih0aGlzLl9zdHJlYW1Db25maWc9KDAscy52YWxpZGF0ZVN0cmVhbUNvbmZpZykodGhpcy5nZXRDb25maWcoeS5Db25maWdUeXBlcy5TdHJlYW0sQykpKSxDLnRlc3RDb25maWcmJih0aGlzLl90ZXN0Q29uZmln''@;'; put 'put ''PSgwLHMudmFsaWRhdGVUZXN0Q29uZmlnKSh0aGlzLmdldENvbmZpZyh5LkNvbmZpZ1R5cGVzLlRlc3QsQykpKSxDLm1hY3JvRm9sZGVycyYmQy5tYWNyb0ZvbGRlcnMubGVuZ3RoJiYodGhpcy5fbWFjcm9Gb2xkZXJzPUMubWFjcm9Gb2xkZXJzKSxDLnByb2dyYW1Gb2xkZXJzJiZDLnByb2dy''@;'; put 'put ''YW1Gb2xkZXJzLmxlbmd0aCYmKHRoaXMuX3Byb2dyYW1Gb2xkZXJzPUMucHJvZ3JhbUZvbGRlcnMpLEMuYmluYXJ5Rm9sZGVycyYmQy5iaW5hcnlGb2xkZXJzLmxlbmd0aCYmKHRoaXMuX2JpbmFyeUZvbGRlcnM9Qy5iaW5hcnlGb2xkZXJzKSxDLnN5bmNEaXJlY3RvcmllcyYmQy5zeW5jRGly''@;'; put 'put ''ZWN0b3JpZXMubGVuZ3RoJiYodGhpcy5fc3luY0RpcmVjdG9yaWVzPSgwLHMudmFsaWRhdGVTeW5jRGlyZWN0b3JpZXMpKEMuc3luY0RpcmVjdG9yaWVzKSksQy5zYXNqc0J1aWxkRm9sZGVyJiYodGhpcy5fc2FzanNCdWlsZEZvbGRlcj0oMCxzLnZhbGlkYXRlU2FzanNCdWlsZEZvbGRlciko''@;'; put 'put ''Qy5zYXNqc0J1aWxkRm9sZGVyKSksQy5zYXNqc1Jlc3VsdHNGb2xkZXImJih0aGlzLl9zYXNqc1Jlc3VsdHNGb2xkZXI9KDAscy52YWxpZGF0ZVNhc2pzUmVzdWx0c0ZvbGRlcikoQy5zYXNqc1Jlc3VsdHNGb2xkZXIpKX1jYXRjaChTKXt0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHBhcnNpbmcg''@;'; put 'put ''dGFyZ2V0OiAke1MubWVzc2FnZX1gKX19Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5fbmFtZX1nZXQgc2VydmVyVXJsKCl7cmV0dXJuIHRoaXMuX3NlcnZlclVybH1nZXQgc2VydmVyVHlwZSgpe3JldHVybiB0aGlzLl9zZXJ2ZXJUeXBlfWdldCBodHRwc0FnZW50T3B0aW9ucygpe3JldHVybiB0''@;'; put 'put ''aGlzLl9odHRwc0FnZW50T3B0aW9uc31nZXQgYXBwTG9jKCl7cmV0dXJuIHRoaXMuX2FwcExvY31nZXQgZG9jQ29uZmlnKCl7cmV0dXJuIHRoaXMuX2RvY0NvbmZpZ31nZXQgYXV0aENvbmZpZygpe3JldHVybiB0aGlzLl9hdXRoQ29uZmlnfWdldCBhdXRoQ29uZmlnU2FzOSgpe3JldHVybiB0''@;'; put 'put ''aGlzLl9hdXRoQ29uZmlnU2FzOX1nZXQgYnVpbGRDb25maWcoKXtyZXR1cm4gdGhpcy5fYnVpbGRDb25maWd9Z2V0IGRlcGxveUNvbmZpZygpe3JldHVybiB0aGlzLl9kZXBsb3lDb25maWd9Z2V0IHNlcnZpY2VDb25maWcoKXtyZXR1cm4gdGhpcy5fc2VydmljZUNvbmZpZ31nZXQgam9iQ29u''@;'; put 'put ''ZmlnKCl7cmV0dXJuIHRoaXMuX2pvYkNvbmZpZ31nZXQgc3RyZWFtQ29uZmlnKCl7cmV0dXJuIHRoaXMuX3N0cmVhbUNvbmZpZ31nZXQgbWFjcm9Gb2xkZXJzKCl7cmV0dXJuIHRoaXMuX21hY3JvRm9sZGVyc31nZXQgcHJvZ3JhbUZvbGRlcnMoKXtyZXR1cm4gdGhpcy5fcHJvZ3JhbUZvbGRl''@;'; put 'put ''cnN9Z2V0IGJpbmFyeUZvbGRlcnMoKXtyZXR1cm4gdGhpcy5fYmluYXJ5Rm9sZGVyc31nZXQgY29udGV4dE5hbWUoKXtyZXR1cm4gdGhpcy5fY29udGV4dE5hbWV9Z2V0IHNlcnZlck5hbWUoKXtyZXR1cm4gdGhpcy5fc2VydmVyTmFtZX1nZXQgcmVwb3NpdG9yeU5hbWUoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fcmVwb3NpdG9yeU5hbWV9Z2V0IHRlc3RDb25maWcoKXtyZXR1cm4gdGhpcy5fdGVzdENvbmZpZ31nZXQgc3luY0ZvbGRlcigpe3JldHVybiB0aGlzLl9zeW5jRm9sZGVyfWdldCBzeW5jRGlyZWN0b3JpZXMoKXtyZXR1cm4gdGhpcy5fc3luY0RpcmVjdG9yaWVzfWdldCBzYXNqc0J1aWxk''@;'; put 'put ''Rm9sZGVyKCl7cmV0dXJuIHRoaXMuX3Nhc2pzQnVpbGRGb2xkZXJ9Z2V0IHNhc2pzUmVzdWx0c0ZvbGRlcigpe3JldHVybiB0aGlzLl9zYXNqc1Jlc3VsdHNGb2xkZXJ9dG9Kc29uKEM9ITApe3ZhciB3LFMsTDtjb25zdCBSPXtuYW1lOnRoaXMubmFtZSxzZXJ2ZXJVcmw6dGhpcy5zZXJ2ZXJV''@;'; put 'put ''cmwsc2VydmVyVHlwZTp0aGlzLnNlcnZlclR5cGUsaHR0cHNBZ2VudE9wdGlvbnM6dGhpcy5odHRwc0FnZW50T3B0aW9ucyxhcHBMb2M6dGhpcy5hcHBMb2MsZG9jQ29uZmlnOnRoaXMuZG9jQ29uZmlnLGRlcGxveUNvbmZpZzp0aGlzLmRlcGxveUNvbmZpZ307cmV0dXJuIShudWxsPT09KHc9''@;'; put 'put ''dGhpcy5tYWNyb0ZvbGRlcnMpfHx2b2lkIDA9PT13KSYmdy5sZW5ndGgmJihSLm1hY3JvRm9sZGVycz10aGlzLm1hY3JvRm9sZGVycyksIShudWxsPT09KFM9dGhpcy5wcm9ncmFtRm9sZGVycyl8fHZvaWQgMD09PVMpJiZTLmxlbmd0aCYmKFIucHJvZ3JhbUZvbGRlcnM9dGhpcy5wcm9ncmFt''@;'; put 'put ''Rm9sZGVycyksIShudWxsPT09KEw9dGhpcy5iaW5hcnlGb2xkZXJzKXx8dm9pZCAwPT09TCkmJkwubGVuZ3RoJiYoUi5iaW5hcnlGb2xkZXJzPXRoaXMuYmluYXJ5Rm9sZGVycyksdGhpcy5hdXRoQ29uZmlnJiYoUi5hdXRoQ29uZmlnPXRoaXMuYXV0aENvbmZpZyksdGhpcy5hdXRoQ29uZmln''@;'; put 'put ''U2FzOSYmKFIuYXV0aENvbmZpZ1Nhczk9dGhpcy5hdXRoQ29uZmlnU2FzOSksdGhpcy5zYXNqc0J1aWxkRm9sZGVyP1Iuc2FzanNCdWlsZEZvbGRlcj10aGlzLnNhc2pzQnVpbGRGb2xkZXI6QyYmKFIuc2FzanNCdWlsZEZvbGRlcj1zLkRFRkFVTFRfU0FTSlNfQlVJTERfRk9MREVSKSx0aGlz''@;'; put 'put ''LnNhc2pzUmVzdWx0c0ZvbGRlcj9SLnNhc2pzUmVzdWx0c0ZvbGRlcj10aGlzLnNhc2pzUmVzdWx0c0ZvbGRlcjpDJiYoUi5zYXNqc1Jlc3VsdHNGb2xkZXI9cy5ERUZBVUxUX1NBU0pTX1JFU1VMVFNfRk9MREVSKSx0aGlzLnN5bmNEaXJlY3Rvcmllcz9SLnN5bmNEaXJlY3Rvcmllcz10aGlz''@;'; put 'put ''LnN5bmNEaXJlY3RvcmllczpDJiYoUi5zeW5jRGlyZWN0b3JpZXM9W10pLHRoaXMuYnVpbGRDb25maWc/Ui5idWlsZENvbmZpZz10aGlzLmJ1aWxkQ29uZmlnOkMmJihSLmJ1aWxkQ29uZmlnPXtpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixidWlsZE91dHB1dEZpbGVOYW1lOmAke3Ro''@;'; put 'put ''aXMubmFtZX0uc2FzYCxtYWNyb1ZhcnM6e319KSx0aGlzLmpvYkNvbmZpZz9SLmpvYkNvbmZpZz10aGlzLmpvYkNvbmZpZzpDJiYoUi5qb2JDb25maWc9e2pvYkZvbGRlcnM6W10saW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsbWFjcm9WYXJzOnt9fSksdGhpcy5zZXJ2aWNlQ29uZmln''@;'; put 'put ''P1Iuc2VydmljZUNvbmZpZz10aGlzLnNlcnZpY2VDb25maWc6QyYmKFIuc2VydmljZUNvbmZpZz17c2VydmljZUZvbGRlcnM6W10saW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsbWFjcm9WYXJzOnt9fSksdGhpcy5zdHJlYW1Db25maWc/Ui5zdHJlYW1Db25maWc9dGhpcy5zdHJlYW1D''@;'; put 'put ''b25maWc6QyYmKFIuc3RyZWFtQ29uZmlnPXtzdHJlYW1XZWJGb2xkZXI6IiIsc3RyZWFtV2ViOiExLHdlYlNvdXJjZVBhdGg6IiIsc3RyZWFtU2VydmljZU5hbWU6IiIsYXNzZXRQYXRoczpbXX0pLHRoaXMudGVzdENvbmZpZz9SLnRlc3RDb25maWc9dGhpcy50ZXN0Q29uZmlnOkMmJihSLnRl''@;'; put 'put ''c3RDb25maWc9e2luaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLG1hY3JvVmFyczp7fSx0ZXN0U2V0VXA6IiIsdGVzdFRlYXJEb3duOiIifSksdGhpcy5zZXJ2ZXJUeXBlPT09Yy5TZXJ2ZXJUeXBlLlNhc1ZpeWE/Ui5jb250ZXh0TmFtZT10aGlzLmNvbnRleHROYW1lOnRoaXMuc2VydmVy''@;'; put 'put ''VHlwZT09PWMuU2VydmVyVHlwZS5TYXM5JiYoUi5zZXJ2ZXJOYW1lPXRoaXMuc2VydmVyTmFtZSxSLnJlcG9zaXRvcnlOYW1lPXRoaXMucmVwb3NpdG9yeU5hbWUpLFJ9fX0sMTc0NzMoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0''@;'; put 'put ''aW9uKGYpe3JldHVybiBmJiZmLl9fZXNNb2R1bGU/Zjp7ZGVmYXVsdDpmfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGoudmFsaWRhdGVTYXNqc1Jlc3VsdHNGb2xkZXI9ai52YWxpZGF0ZVNhc2pzQnVpbGRGb2xkZXI9ai52YWxpZGF0ZVN5bmNE''@;'; put 'put ''aXJlY3Rvcmllcz1qLnZhbGlkYXRlUmVwb3NpdG9yeU5hbWU9ai52YWxpZGF0ZVN5bmNGb2xkZXI9ai52YWxpZGF0ZVNlcnZlck5hbWU9ai52YWxpZGF0ZUNvbnRleHROYW1lPWoudmFsaWRhdGVTdHJlYW1Db25maWc9ai52YWxpZGF0ZURlcGxveUNvbmZpZz1qLnZhbGlkYXRlSm9iQ29uZmln''@;'; put 'put ''PWoudmFsaWRhdGVUZXN0Q29uZmlnPWoudmFsaWRhdGVTZXJ2aWNlQ29uZmlnPWoudmFsaWRhdGVCdWlsZENvbmZpZz1qLnZhbGlkYXRlQXV0aENvbmZpZ1Nhczk9ai52YWxpZGF0ZUF1dGhDb25maWc9ai52YWxpZGF0ZURvY0NvbmZpZz1qLnZhbGlkYXRlQXBwTG9jPWoudmFsaWRhdGVIdHRw''@;'; put 'put ''c0FnZW50T3B0aW9ucz1qLnZhbGlkYXRlU2VydmVyVXJsPWoudmFsaWRhdGVUYXJnZXROYW1lPWoudmFsaWRhdGVTZXJ2ZXJUeXBlPWouREVGQVVMVF9TQVNKU19SRVNVTFRTX0ZPTERFUj1qLkRFRkFVTFRfU0FTSlNfQlVJTERfRk9MREVSPXZvaWQgMDtjb25zdCBjPXkoaCgxNzg1MykpLHM9''@;'; put 'put ''aCgzNjMxKTtqLkRFRkFVTFRfU0FTSlNfQlVJTERfRk9MREVSPSJzYXNqc2J1aWxkIixqLkRFRkFVTFRfU0FTSlNfUkVTVUxUU19GT0xERVI9InNhc2pzcmVzdWx0cyIsai52YWxpZGF0ZVNlcnZlclR5cGU9Zj0+e2lmKCFmKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZXJ2ZXIgdHlwZTog''@;'; put 'put ''YHNlcnZlclR5cGVgIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZihmIT09cy5TZXJ2ZXJUeXBlLlNhczkmJmYhPT1zLlNlcnZlclR5cGUuU2FzVml5YSYmZiE9PXMuU2VydmVyVHlwZS5TYXNqcyl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2VydmVyIHR5cGU6IFN1cHBvcnRl''@;'; put 'put ''ZCB2YWx1ZXMgZm9yICBcYHNlcnZlclR5cGVcYCBhcmUgJHtzLlNlcnZlclR5cGUuU2FzVml5YX0sICR7cy5TZXJ2ZXJUeXBlLlNhczl9IGFuZCAke3MuU2VydmVyVHlwZS5TYXNqc30uYCk7cmV0dXJuIGZ9LGoudmFsaWRhdGVUYXJnZXROYW1lPWY9PntpZighZil0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IkludmFsaWQgdGFyZ2V0IG5hbWU6IGBuYW1lYCBjYW5ub3QgYmUgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKGYudHJpbSgpLmluY2x1ZGVzKCIgIikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldCBuYW1lOiBgbmFtZWAgY2Fubm90IGluY2x1ZGUgc3BhY2VzLiIpO2lm''@;'; put 'put ''KCEvXlthLXpBLVowLTlcLV0rJC9pLnRlc3QoZikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldCBuYW1lOiBgbmFtZWAgY2FuIG9ubHkgY29udGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgZGFzaGVzLiIpO3JldHVybiBmfSxqLnZhbGlkYXRlU2VydmVyVXJsPWY9Pntp''@;'; put 'put ''ZihudWxsPT1mJiYoZj0iIiksIiIhPT1mJiYhYy5kZWZhdWx0LmlzSHR0cFVyaShmKSYmIWMuZGVmYXVsdC5pc0h0dHBzVXJpKGYpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZXJ2ZXIgVVJMOiBgc2VydmVyVXJsYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IHN0cmluZyBvciBhIHZh''@;'; put 'put ''bGlkIFVSTCBvZiB0aGUgZm9ybSBodHRwKHMpOi8veW91ci1zZXJ2ZXIuY29tKDpwb3J0KS4iKTtyZXR1cm4gZn0sai52YWxpZGF0ZUh0dHBzQWdlbnRPcHRpb25zPWY9PntpZihmKXtpZigib2JqZWN0IiE9dHlwZW9mIGYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhbHVlOiBgaHR0cHNB''@;'; put 'put ''Z2VudE9wdGlvbnNgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgb3IgYW4gb2JqZWN0IG9mIGBIdHRwc0FnZW50T3B0aW9uc2AiKTtpZihudWxsPT1mLmFsbG93SW5zZWN1cmVSZXF1ZXN0cylmLmFsbG93SW5zZWN1cmVSZXF1ZXN0cz0hMTtlbHNlIGlmKCJib29sZWFuIiE9dHlwZW9mIGYu''@;'; put 'put ''YWxsb3dJbnNlY3VyZVJlcXVlc3RzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZTogYGh0dHBzQWdlbnRPcHRpb25zLmFsbG93SW5zZWN1cmVSZXF1ZXN0c2Agc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBvciBhIGJvb2xlYW4iKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGYuY2FQ''@;'; put 'put ''YXRoJiYoZi5jYVBhdGg9dm9pZCAwKSwic3RyaW5nIiE9dHlwZW9mIGYua2V5UGF0aCYmKGYua2V5UGF0aD12b2lkIDApLCJzdHJpbmciIT10eXBlb2YgZi5jZXJ0UGF0aCYmKGYuY2VydFBhdGg9dm9pZCAwKSxmfX0sai52YWxpZGF0ZUFwcExvYz1mPT57aWYoIWYpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJJbnZhbGlkIGFwcCBsb2NhdGlvbjogYGFwcExvY2AgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZighZi5zdGFydHNXaXRoKCIvIikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGFwcCBsb2NhdGlvbjogYGFwcExvY2AgbXVzdCBzdGFydCB3aXRoIGEgYC9gLiIp''@;'; put 'put ''O3JldHVybiBmfSxqLnZhbGlkYXRlRG9jQ29uZmlnPWY9PntpZihmfHwoZj17fSksImJvb2xlYW4iIT10eXBlb2YgZi5kaXNwbGF5TWFjcm9Db3JlJiYoZi5kaXNwbGF5TWFjcm9Db3JlPXZvaWQgMCksImJvb2xlYW4iIT10eXBlb2YgZi5lbmFibGVMaW5lYWdlJiYoZi5lbmFibGVMaW5lYWdl''@;'; put 'put ''PXZvaWQgMCksInN0cmluZyIhPXR5cGVvZiBmLm91dERpcmVjdG9yeSYmKGYub3V0RGlyZWN0b3J5PXZvaWQgMCksInN0cmluZyI9PXR5cGVvZiBmLmRhdGFDb250cm9sbGVyVXJsKXtpZigiIiE9PWYuZGF0YUNvbnRyb2xsZXJVcmwmJiFjLmRlZmF1bHQuaXNIdHRwVXJpKGYuZGF0YUNvbnRy''@;'; put 'put ''b2xsZXJVcmwpJiYhYy5kZWZhdWx0LmlzSHR0cHNVcmkoZi5kYXRhQ29udHJvbGxlclVybCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIERhdGEgQ29udHJvbGxlciBVcmw6IGBkYXRhQ29udHJvbGxlclVybGAgc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBV''@;'; put 'put ''Ukwgb2YgdGhlIGZvcm0gaHR0cChzKTovL3lvdXItc2VydmVyLmNvbSg6cG9ydCkuIil9ZWxzZSBmLmRhdGFDb250cm9sbGVyVXJsPXZvaWQgMDtyZXR1cm4gZn0sai52YWxpZGF0ZUF1dGhDb25maWc9Zj0+e2lmKCFmKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhdXRoIGNvbmZpZzogSlNP''@;'; put 'put ''TiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIGZ9LGoudmFsaWRhdGVBdXRoQ29uZmlnU2FzOT1mPT57aWYoIWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmlnIGZvciBzYXM5OiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZigh''@;'; put 'put ''Zi51c2VyTmFtZXx8IWYucGFzc3dvcmQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmlnIGZvciBzYXM5OiB1c2VyTmFtZSBhbmQgcGFzc3dvcmQgY2FuIG5vdCBiZSBlbXB0eSIpO3JldHVybiBmfSxqLnZhbGlkYXRlQnVpbGRDb25maWc9KGYsYik9PntpZighZil0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIkludmFsaWQgYnVpbGQgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gZi5idWlsZE91dHB1dEZpbGVOYW1lfHwoZi5idWlsZE91dHB1dEZpbGVOYW1lPWAke2J9LnNhc2ApLGYuaW5pdFByb2dyYW18fChmLmluaXRQcm9ncmFtPSIi''@;'; put 'put ''KSxmLnRlcm1Qcm9ncmFtfHwoZi50ZXJtUHJvZ3JhbT0iIiksZi5tYWNyb1ZhcnN8fChmLm1hY3JvVmFycz17fSksZn0sai52YWxpZGF0ZVNlcnZpY2VDb25maWc9Zj0+e2lmKCFmKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZXJ2aWNlIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBv''@;'; put 'put ''ciB1bmRlZmluZWQuIik7cmV0dXJuIGYuaW5pdFByb2dyYW18fChmLmluaXRQcm9ncmFtPSIiKSxmLnRlcm1Qcm9ncmFtfHwoZi50ZXJtUHJvZ3JhbT0iIiksZi5zZXJ2aWNlRm9sZGVyc3x8KGYuc2VydmljZUZvbGRlcnM9W10pLGYubWFjcm9WYXJzfHwoZi5tYWNyb1ZhcnM9e30pLGZ9LGou''@;'; put 'put ''dmFsaWRhdGVUZXN0Q29uZmlnPWY9PntpZighZil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGVzdCBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBmLmluaXRQcm9ncmFtfHwoZi5pbml0UHJvZ3JhbT0iIiksZi50ZXJtUHJvZ3JhbXx8KGYudGVy''@;'; put 'put ''bVByb2dyYW09IiIpLGYubWFjcm9WYXJzfHwoZi5tYWNyb1ZhcnM9e30pLGYudGVzdFNldFVwfHwoZi50ZXN0U2V0VXA9IiIpLGYudGVzdFRlYXJEb3dufHwoZi50ZXN0VGVhckRvd249IiIpLGZ9LGoudmFsaWRhdGVKb2JDb25maWc9Zj0+e2lmKCFmKXRocm93IG5ldyBFcnJvcigiSW52YWxp''@;'; put 'put ''ZCBqb2IgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gZi5pbml0UHJvZ3JhbXx8KGYuaW5pdFByb2dyYW09IiIpLGYudGVybVByb2dyYW18fChmLnRlcm1Qcm9ncmFtPSIiKSxmLmpvYkZvbGRlcnN8fChmLmpvYkZvbGRlcnM9W10pLGYubWFjcm9W''@;'; put 'put ''YXJzfHwoZi5tYWNyb1ZhcnM9e30pLGZ9LGoudmFsaWRhdGVEZXBsb3lDb25maWc9Zj0+e2lmKCFmKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkZXBsb3kgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gZi5kZXBsb3lTZXJ2aWNlUGFjaz0hIWYu''@;'; put 'put ''ZGVwbG95U2VydmljZVBhY2ssZi5kZXBsb3lTY3JpcHRzfHwoZi5kZXBsb3lTY3JpcHRzPVtdKSxmfSxqLnZhbGlkYXRlU3RyZWFtQ29uZmlnPWY9PntpZighZil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQu''@;'; put 'put ''Iik7aWYoITAhPT1mLnN0cmVhbVdlYiYmITEhPT1mLnN0cmVhbVdlYil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogYHN0cmVhbVdlYmAgY2Fubm90IGJlIGEgbm9uLWJvb2xlYW4gdmFsdWUuIik7aWYoZi5zdHJlYW1XZWImJiFmLnN0cmVhbVdlYkZvbGRlcil0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogYHN0cmVhbVdlYkZvbGRlcmAgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGBzdHJlYW1XZWJgIGlzIHRydWUuIik7aWYoZi5zdHJlYW1XZWImJiFmLndlYlNvdXJjZVBhdGgpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IGB3ZWJTb3VyY2VQYXRoYCBzaG91bGQgY29udGFpbiB0aGUgcGF0aCB0byB5b3VyIGZyb250ZW5kIGFwcGxpY2F0aW9uIGVnIGJ1aWxkLCBkaXN0LCBvciBzcmMuIik7cmV0dXJuIGYuc3RyZWFtTG9nbyYmInN0cmluZyIhPXR5cGVvZiBmLnN0cmVh''@;'; put 'put ''bUxvZ28mJihmLnN0cmVhbUxvZ289dm9pZCAwKSxmLmFzc2V0UGF0aHN8fChmLmFzc2V0UGF0aHM9W10pLGYuc3RyZWFtU2VydmljZU5hbWV8fChmLnN0cmVhbVNlcnZpY2VOYW1lPSJjbGlja21lIiksZn0sai52YWxpZGF0ZUNvbnRleHROYW1lPShmLGIpPT5iIT09cy5TZXJ2ZXJUeXBlLlNh''@;'; put 'put ''c1ZpeWF8fGY/ZjoiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0IixqLnZhbGlkYXRlU2VydmVyTmFtZT0oZixiKT0+YiE9PXMuU2VydmVyVHlwZS5TYXM5fHxmP2Y6IlNBU0FwcCIsai52YWxpZGF0ZVN5bmNGb2xkZXI9Zj0+e2lmKCJzdHJpbmciPT10eXBlb2YgZiYmZilyZXR1''@;'; put 'put ''cm4gZn0sai52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lPShmLGIpPT5iIT09cy5TZXJ2ZXJUeXBlLlNhczl8fGY/ZjoiRm91bmRhdGlvbiIsai52YWxpZGF0ZVN5bmNEaXJlY3Rvcmllcz1mPT57aWYoIWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN5bmNEaXJlY3RvcmllcyBjb25maWc6IEpT''@;'; put 'put ''T04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBmLmZvckVhY2goYj0+e2lmKCFiLmxvY2FsfHwhYi5yZW1vdGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN5bmNEaXJlY3RvcnkgY29uZmlnOiB2YWx1ZXMgb2YgcHJvcGVydHkgJ2xvY2FsJyBhbmQgJ3JlbW90ZSBj''@;'; put 'put ''YW4gbm90IGJlIGVtcHR5IG9yIHVuZGVmaW5lZCIpfSksZn0sai52YWxpZGF0ZVNhc2pzQnVpbGRGb2xkZXI9Zj0+e2lmKCJzdHJpbmciIT10eXBlb2YgZil0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHlwZSBvZiB2YWx1ZSAoJHt0eXBlb2YgZn0pIGlzIHByb3ZpZGVkIGZvciBwcm9wZXJ0''@;'; put 'put ''eSAnc2FzanNCdWlsZEZvbGRlcicgaW4gY29uZmlnLiBSZXF1aXJlZCBpcyBzdHJpbmcuYCk7cmV0dXJuIGZ8fGouREVGQVVMVF9TQVNKU19CVUlMRF9GT0xERVJ9LGoudmFsaWRhdGVTYXNqc1Jlc3VsdHNGb2xkZXI9Zj0+e2lmKCJzdHJpbmciIT10eXBlb2YgZil0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''YEludmFsaWQgdHlwZSBvZiB2YWx1ZSAoJHt0eXBlb2YgZn0pIGlzIHByb3ZpZGVkIGZvciBwcm9wZXJ0eSAnc2FzanNSZXN1bHRzRm9sZGVyJyBpbiBjb25maWcuIFJlcXVpcmVkIGlzIHN0cmluZy5gKTtyZXR1cm4gZnx8ai5ERUZBVUxUX1NBU0pTX1JFU1VMVFNfRk9MREVSfX0sNjk4OTIo''@;'; put 'put ''ZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg0ODI4NykuQnVmZmVyLGM9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHcpe3JldHVybiB3JiZ3Ll9fZXNNb2R1bGU/dzp7ZGVmYXVsdDp3fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1''@;'; put 'put ''ZTohMH0pLGouZGVjb2RlRnJvbUJhc2U2ND1qLmVuY29kZVRvQmFzZTY0PXZvaWQgMDtjb25zdCBzPWMoaCg5MTU2NSkpLEE9IntzYXNqc19lbmNvZGVkfSI7ai5lbmNvZGVUb0Jhc2U2ND13PT57Y29uc3QgUz1zLmRlZmF1bHQucmFuZG9tQnl0ZXMoMTAwKS50b1N0cmluZygiaGV4IiksTD15''@;'; put 'put ''LmZyb20oUyt3KS50b1N0cmluZygiYmFzZTY0Iik7cmV0dXJuIEErTH0sai5kZWNvZGVGcm9tQmFzZTY0PXc9Pncuc3RhcnRzV2l0aChBKT8odz13LnJlcGxhY2UoL157c2FzanNfZW5jb2RlZH0vLCIiKSx5LmZyb20odywiYmFzZTY0IikudG9TdHJpbmcoKS5zdWJzdHJpbmcoMjAwKSk6d30s''@;'; put 'put ''OTk3NDAoZmUsail7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmJ5dGVzVG9TaXplPXZvaWQgMCxqLmJ5dGVzVG9TaXplPSh5LGM9MSxzPTEwOTk1MTE2Mjc3NzYpPT57aWYoMD09PXkpcmV0dXJuIjAgQiI7eT15PnM/czp5''@;'; put 'put ''O2NvbnN0IEM9YzwwPzA6Yyx3PU1hdGguZmxvb3IoTWF0aC5sb2coeSkvTWF0aC5sb2coMTAyNCkpO3JldHVybih5L01hdGgucG93KDEwMjQsdykpLnRvRml4ZWQoQykrIiAiK1siQiIsIktCIiwiTUIiLCJHQiIsIlRCIl1bd119fSw3ODI4NihmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouY2h1bms9dm9pZCAwLGouY2h1bms9ZnVuY3Rpb24gaCh5LGM9MjIwKXtyZXR1cm4geS5sZW5ndGg8PWM/W3ldOih5Lm1hdGNoKG5ldyBSZWdFeHAoIi57MSwiK2MrIn0iLCJnIikpfHxbXSkuZmlsdGVyKHM9PiEhcyl9''@;'; put 'put ''fSw2MjgyMChmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouZGlmZj12b2lkIDAsai5kaWZmPWZ1bmN0aW9uIGgoeSxjKXtyZXR1cm5bLi4ueS5maWx0ZXIodj0+Im9iamVjdCI9PXR5cGVvZiB2PyFKU09OLnN0cmlu''@;'; put 'put ''Z2lmeShjKS5pbmNsdWRlcyhKU09OLnN0cmluZ2lmeSh2KSk6IWMuaW5jbHVkZXModikpLC4uLmMuZmlsdGVyKHY9PiJvYmplY3QiPT10eXBlb2Ygdj8hSlNPTi5zdHJpbmdpZnkoeSkuaW5jbHVkZXMoSlNPTi5zdHJpbmdpZnkodikpOiF5LmluY2x1ZGVzKHYpKV19fSw1MTY2MihmZSxqKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouZ2V0RXhlY3V0b3JQYXRoPXZvaWQgMDtjb25zdCBoPXtTQVNWSVlBOiIvU0FTSm9iRXhlY3V0aW9uIixTQVM5OiIvU0FTU3RvcmVkUHJvY2Vzcy9kbyJ9O2ouZ2V0RXhlY3V0b3JQ''@;'; put 'put ''YXRoPWM9PmM/KGM9Yy50b1VwcGVyQ2FzZSgpLGhbY118fCIiKToiIn0sMTE0MjkoZmUsaixoKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouZ2V0VHJlZUV4YW1wbGU9ai5pc0ZpbGVUcmVlPXZvaWQgMDtjb25zdCB5PWgo''@;'; put 'put ''MzYzMSk7ai5pc0ZpbGVUcmVlPXc9PncmJncubWVtYmVycyYmQXJyYXkuaXNBcnJheSh3Lm1lbWJlcnMpJiYwPT09dy5tZW1iZXJzLmZpbHRlcihTPT4hcyhTKSYmIUEoUykmJiF2KFMpKS5sZW5ndGg7Y29uc3Qgcz13PT53JiYic3RyaW5nIj09dHlwZW9mIHcubmFtZSYmdy50eXBlPT09eS5N''@;'; put 'put ''ZW1iZXJUeXBlLnNlcnZpY2UmJiJzdHJpbmciPT10eXBlb2Ygdy5jb2RlLEE9dz0+dyYmInN0cmluZyI9PXR5cGVvZiB3Lm5hbWUmJncudHlwZT09PXkuTWVtYmVyVHlwZS5maWxlJiYic3RyaW5nIj09dHlwZW9mIHcuY29kZSx2PXc9PncmJiJzdHJpbmciPT10eXBlb2Ygdy5uYW1lJiZ3LnR5''@;'; put 'put ''cGU9PT15Lk1lbWJlclR5cGUuZm9sZGVyJiZ3Lm1lbWJlcnMmJkFycmF5LmlzQXJyYXkody5tZW1iZXJzKSYmMD09PXcubWVtYmVycy5maWx0ZXIoUz0+IXMoUykmJiFBKFMpJiYhdihTKSkubGVuZ3RoO2ouZ2V0VHJlZUV4YW1wbGU9KCk9Pih7bWVtYmVyczpbe25hbWU6ImpvYnMiLHR5cGU6''@;'; put 'put ''eS5NZW1iZXJUeXBlLmZvbGRlcixtZW1iZXJzOlt7bmFtZToiZXh0cmFjdCIsdHlwZTp5Lk1lbWJlclR5cGUuZm9sZGVyLG1lbWJlcnM6W3tuYW1lOiJtYWtlZGF0YTEiLHR5cGU6eS5NZW1iZXJUeXBlLnNlcnZpY2UsY29kZToiJXB1dCBIZWxsbyBXb3JsZCE7In1dfV19XX0pfSw1Mjc2Myhm''@;'; put 'put ''ZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oUix4LFUsSCl7dm9pZCAwPT09SCYmKEg9VSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIsSCx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4geFtVXX19KX06ZnVuY3Rpb24oUix4LFUsSCl7dm9pZCAwPT09SCYmKEg9VSksUltIXT14W1VdfSksYz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oUix4KXtmb3IodmFyIFUgaW4gUikiZGVmYXVsdCIhPT1VJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5j''@;'; put 'put ''YWxsKHgsVSkmJnkoeCxSLFUpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5jaHVuaz1qLmRpZmY9ai5ieXRlc1RvU2l6ZT1qLmdldEV4ZWN1dG9yUGF0aD1qLmRlY29kZUZyb21CYXNlNjQ9ai5lbmNvZGVUb0Jhc2U2ND1qLnVybE9yaWdpbj1q''@;'; put 'put ''LmdlbmVyYXRlUGF0aEZvclNhcz1qLmdldE1hY3Jvc1BhdGg9ai5lc2NhcGVXaW5TbGFzaGVzPWouaXNMaW51eD1qLmlzV2luZG93cz1qLnVuaXFBcnJheT1qLmFzeW5jRm9yRWFjaD1qLnV1aWR2ND12b2lkIDA7dmFyIHM9aCgyNjA4Nik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosInV1aWR2''@;'; put 'put ''NCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMudXVpZHY0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJhc3luY0ZvckVhY2giLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmFzeW5jRm9yRWFjaH19KSxPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoaiwidW5pcUFycmF5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy51bmlxQXJyYXl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosImlzV2luZG93cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuaXNXaW5kb3dzfX0pLE9iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShqLCJpc0xpbnV4Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5pc0xpbnV4fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJlc2NhcGVXaW5TbGFzaGVzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5lc2NhcGVX''@;'; put 'put ''aW5TbGFzaGVzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJnZXRNYWNyb3NQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5nZXRNYWNyb3NQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJnZW5lcmF0ZVBhdGhGb3JTYXMiLHtlbnVtZXJhYmxl''@;'; put 'put ''OiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmdlbmVyYXRlUGF0aEZvclNhc319KSxjKGgoMTE0MjkpLGopO3ZhciBBPWgoOTIwNDIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJ1cmxPcmlnaW4iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBBLnVybE9yaWdpbn19''@;'; put 'put ''KTt2YXIgdj1oKDY5ODkyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiZW5jb2RlVG9CYXNlNjQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB2LmVuY29kZVRvQmFzZTY0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJkZWNvZGVGcm9tQmFzZTY0Iix7ZW51bWVy''@;'; put 'put ''YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdi5kZWNvZGVGcm9tQmFzZTY0fX0pO3ZhciBDPWgoNTE2NjIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJnZXRFeGVjdXRvclBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBDLmdldEV4ZWN1dG9yUGF0aH19''@;'; put 'put ''KTt2YXIgdz1oKDk5NzQwKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiYnl0ZXNUb1NpemUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB3LmJ5dGVzVG9TaXplfX0pO3ZhciBTPWgoNjI4MjApO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJkaWZmIix7ZW51bWVyYWJs''@;'; put 'put ''ZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUy5kaWZmfX0pO3ZhciBMPWgoNzgyODYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJjaHVuayIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEwuY2h1bmt9fSl9LDkyMDQyKGZlLGopeyJ1c2Ugc3RyaWN0IjtPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai51cmxPcmlnaW49dm9pZCAwLGoudXJsT3JpZ2luPXk9PntpZigiIj09PXkpcmV0dXJuIHk7bGV0IGM7dHJ5e2M9bmV3IFVSTCh5KS5vcmlnaW59Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFVSTC4iKX1y''@;'; put 'put ''ZXR1cm4gY319LDI2MDg2KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciBjPWgoNjU2MDYpLHM9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFYsTix6LFkpe3JldHVybiBuZXcoenx8KHo9UHJvbWlzZSkpKGZ1bmN0aW9uKFcscSl7ZnVuY3Rpb24gcmUoSWUpe3RyeXtDZShZLm5leHQo''@;'; put 'put ''SWUpKX1jYXRjaChrZSl7cShrZSl9fWZ1bmN0aW9uIG1lKEllKXt0cnl7Q2UoWS50aHJvdyhJZSkpfWNhdGNoKGtlKXtxKGtlKX19ZnVuY3Rpb24gQ2UoSWUpe0llLmRvbmU/VyhJZS52YWx1ZSk6ZnVuY3Rpb24gRihXKXtyZXR1cm4gVyBpbnN0YW5jZW9mIHo/VzpuZXcgeihmdW5jdGlvbihx''@;'; put 'put ''KXtxKFcpfSl9KEllLnZhbHVlKS50aGVuKHJlLG1lKX1DZSgoWT1ZLmFwcGx5KFYsTnx8W10pKS5uZXh0KCkpfSl9LEE9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKFYpe3JldHVybiBWJiZWLl9fZXNNb2R1bGU/Vjp7ZGVmYXVsdDpWfX07T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouZ2VuZXJhdGVQYXRoRm9yU2FzPWouZ2V0TWFjcm9zUGF0aD1qLmVzY2FwZVdpblNsYXNoZXM9ai5pc0xpbnV4PWouaXNXaW5kb3dzPWoudW5pcUFycmF5PWoudXVpZHY0PWouYXN5bmNGb3JFYWNoPXZvaWQgMDtjb25zdCB2PUEoaCg0''@;'; put 'put ''MzYyNykpO2ouYXN5bmNGb3JFYWNoPWZ1bmN0aW9uIEMoVixOKXtyZXR1cm4gcyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Zm9yKGxldCB6PTA7ejxWLmxlbmd0aDt6KyspeWllbGQgTihWW3pdLHosVil9KX0sai51dWlkdjQ9KCk9PiJ4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14''@;'; put 'put ''eHh4eHh4eHh4eHgiLnJlcGxhY2UoL1t4eV0vZyxWPT57Y29uc3QgTj0xNipNYXRoLnJhbmRvbSgpfDA7cmV0dXJuKCJ4Ij09Vj9OOjMmTnw4KS50b1N0cmluZygxNil9KSxqLnVuaXFBcnJheT1WPT5BcnJheS5mcm9tKG5ldyBTZXQoVikpLGouaXNXaW5kb3dzPSgpPT4id2luMzIiPT09Yy5w''@;'; put 'put ''bGF0Zm9ybSxqLmlzTGludXg9KCk9PiJsaW51eCI9PT1jLnBsYXRmb3JtLGouZXNjYXBlV2luU2xhc2hlcz1WPT4oMCxqLmlzV2luZG93cykoKT9WLnJlcGxhY2UoL1xcL2csIlxcXFwiKTpWLGouZ2V0TWFjcm9zUGF0aD0oKT0+di5kZWZhdWx0LmpvaW4oIi8iLCIuLiIsIm1hY3JvcyIpLGou''@;'; put 'put ''Z2VuZXJhdGVQYXRoRm9yU2FzPVY9PlYucmVwbGFjZSgvXFwvZywiLyIpfSw4NzU2OChmZSxqLGgpe3ZhciB5PWo7eS5iaWdudW09aCg3MjM0NCkseS5kZWZpbmU9aCg0NzM2MykuZGVmaW5lLHkuYmFzZT1oKDk2NzMpLHkuY29uc3RhbnRzPWgoMjIxNTMpLHkuZGVjb2RlcnM9aCgyMjg1Myks''@;'; put 'put ''eS5lbmNvZGVycz1oKDI0NjY5KX0sNDczNjMoZmUsaixoKXt2YXIgeT1oKDg3NTY4KSxjPWgoNTY2OTgpO2Z1bmN0aW9uIEEodixDKXt0aGlzLm5hbWU9dix0aGlzLmJvZHk9Qyx0aGlzLmRlY29kZXJzPXt9LHRoaXMuZW5jb2RlcnM9e319ai5kZWZpbmU9ZnVuY3Rpb24oQyx3KXtyZXR1cm4g''@;'; put 'put ''bmV3IEEoQyx3KX0sQS5wcm90b3R5cGUuX2NyZWF0ZU5hbWVkPWZ1bmN0aW9uKEMpe3ZhciB3O3RyeXt3PWgoNjg5NjEpLnJ1bkluVGhpc0NvbnRleHQoIihmdW5jdGlvbiAiK3RoaXMubmFtZSsiKGVudGl0eSkge1xuICB0aGlzLl9pbml0TmFtZWQoZW50aXR5KTtcbn0pIil9Y2F0Y2h7dz1m''@;'; put 'put ''dW5jdGlvbihMKXt0aGlzLl9pbml0TmFtZWQoTCl9fXJldHVybiBjKHcsQyksdy5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbihMKXtDLmNhbGwodGhpcyxMKX0sbmV3IHcodGhpcyl9LEEucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmRlY29kZXJz''@;'; put 'put ''Lmhhc093blByb3BlcnR5KEM9Q3x8ImRlciIpfHwodGhpcy5kZWNvZGVyc1tDXT10aGlzLl9jcmVhdGVOYW1lZCh5LmRlY29kZXJzW0NdKSksdGhpcy5kZWNvZGVyc1tDXX0sQS5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKEMsdyxTKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2Rlcih3KS5kZWNv''@;'; put 'put ''ZGUoQyxTKX0sQS5wcm90b3R5cGUuX2dldEVuY29kZXI9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoQz1DfHwiZGVyIil8fCh0aGlzLmVuY29kZXJzW0NdPXRoaXMuX2NyZWF0ZU5hbWVkKHkuZW5jb2RlcnNbQ10pKSx0aGlzLmVuY29kZXJzW0NdfSxB''@;'; put 'put ''LnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oQyx3LFMpe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKHcpLmVuY29kZShDLFMpfX0sNDcyMjcoZmUsaixoKXt2YXIgeT1oKDU2Njk4KSxjPWgoOTY3MykuUmVwb3J0ZXIscz1oKDQ4Mjg3KS5CdWZmZXI7ZnVuY3Rpb24gQShDLHcpe2MuY2FsbCh0''@;'; put 'put ''aGlzLHcpLHMuaXNCdWZmZXIoQyk/KHRoaXMuYmFzZT1DLHRoaXMub2Zmc2V0PTAsdGhpcy5sZW5ndGg9Qy5sZW5ndGgpOnRoaXMuZXJyb3IoIklucHV0IG5vdCBCdWZmZXIiKX1mdW5jdGlvbiB2KEMsdyl7aWYoQXJyYXkuaXNBcnJheShDKSl0aGlzLmxlbmd0aD0wLHRoaXMudmFsdWU9Qy5t''@;'; put 'put ''YXAoZnVuY3Rpb24oUyl7cmV0dXJuIFMgaW5zdGFuY2VvZiB2fHwoUz1uZXcgdihTLHcpKSx0aGlzLmxlbmd0aCs9Uy5sZW5ndGgsU30sdGhpcyk7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIEMpe2lmKCEoMDw9QyYmQzw9MjU1KSlyZXR1cm4gdy5lcnJvcigibm9uLWJ5dGUgRW5jb2RlckJ1''@;'; put 'put ''ZmZlciB2YWx1ZSIpO3RoaXMudmFsdWU9Qyx0aGlzLmxlbmd0aD0xfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBDKXRoaXMudmFsdWU9Qyx0aGlzLmxlbmd0aD1zLmJ5dGVMZW5ndGgoQyk7ZWxzZXtpZighcy5pc0J1ZmZlcihDKSlyZXR1cm4gdy5lcnJvcigiVW5zdXBwb3J0ZWQgdHlwZTog''@;'; put 'put ''Iit0eXBlb2YgQyk7dGhpcy52YWx1ZT1DLHRoaXMubGVuZ3RoPUMubGVuZ3RofX15KEEsYyksai50PUEsQS5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6Yy5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sQS5wcm90b3R5cGUu''@;'; put 'put ''cmVzdG9yZT1mdW5jdGlvbih3KXt2YXIgUz1uZXcgQSh0aGlzLmJhc2UpO3JldHVybiBTLm9mZnNldD13Lm9mZnNldCxTLmxlbmd0aD10aGlzLm9mZnNldCx0aGlzLm9mZnNldD13Lm9mZnNldCxjLnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcyx3LnJlcG9ydGVyKSxTfSxBLnByb3RvdHlw''@;'; put 'put ''ZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0PT09dGhpcy5sZW5ndGh9LEEucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlz''@;'; put 'put ''LmVycm9yKHd8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKX0sQS5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbih3LFMpe2lmKCEodGhpcy5vZmZzZXQrdzw9dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzLmVycm9yKFN8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKTt2YXIgTD1uZXcgQSh0aGlzLmJh''@;'; put 'put ''c2UpO3JldHVybiBMLl9yZXBvcnRlclN0YXRlPXRoaXMuX3JlcG9ydGVyU3RhdGUsTC5vZmZzZXQ9dGhpcy5vZmZzZXQsTC5sZW5ndGg9dGhpcy5vZmZzZXQrdyx0aGlzLm9mZnNldCs9dyxMfSxBLnByb3RvdHlwZS5yYXc9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMuYmFzZS5zbGljZSh3P3cu''@;'; put 'put ''b2Zmc2V0OnRoaXMub2Zmc2V0LHRoaXMubGVuZ3RoKX0sai5kPXYsdi5wcm90b3R5cGUuam9pbj1mdW5jdGlvbih3LFMpe3JldHVybiB3fHwodz1uZXcgcyh0aGlzLmxlbmd0aCkpLFN8fChTPTApLDA9PT10aGlzLmxlbmd0aHx8KEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1''@;'; put 'put ''ZS5mb3JFYWNoKGZ1bmN0aW9uKEwpe0wuam9pbih3LFMpLFMrPUwubGVuZ3RofSk6KCJudW1iZXIiPT10eXBlb2YgdGhpcy52YWx1ZT93W1NdPXRoaXMudmFsdWU6InN0cmluZyI9PXR5cGVvZiB0aGlzLnZhbHVlP3cud3JpdGUodGhpcy52YWx1ZSxTKTpzLmlzQnVmZmVyKHRoaXMudmFsdWUp''@;'; put 'put ''JiZ0aGlzLnZhbHVlLmNvcHkodyxTKSxTKz10aGlzLmxlbmd0aCkpLHd9fSw5NjczKGZlLGosaCl7dmFyIHk9ajt5LlJlcG9ydGVyPWgoODkyMjApLmEseS5EZWNvZGVyQnVmZmVyPWgoNDcyMjcpLnQseS5FbmNvZGVyQnVmZmVyPWgoNDcyMjcpLmQseS5Ob2RlPWgoOTA5OTMpfSw5MDk5Myhm''@;'; put 'put ''ZSxqLGgpe3ZhciB5PWgoOTY3MykuUmVwb3J0ZXIsYz1oKDk2NzMpLkVuY29kZXJCdWZmZXIscz1oKDk2NzMpLkRlY29kZXJCdWZmZXIsQT1oKDQzMzQ5KSx2PVsic2VxIiwic2Vxb2YiLCJzZXQiLCJzZXRvZiIsIm9iamlkIiwiYm9vbCIsImdlbnRpbWUiLCJ1dGN0aW1lIiwibnVsbF8iLCJl''@;'; put 'put ''bnVtIiwiaW50Iiwib2JqRGVzYyIsImJpdHN0ciIsImJtcHN0ciIsImNoYXJzdHIiLCJnZW5zdHIiLCJncmFwaHN0ciIsImlhNXN0ciIsImlzbzY0NnN0ciIsIm51bXN0ciIsIm9jdHN0ciIsInByaW50c3RyIiwidDYxc3RyIiwidW5pc3RyIiwidXRmOHN0ciIsInZpZGVvc3RyIl0sQz1bImtl''@;'; put 'put ''eSIsIm9iaiIsInVzZSIsIm9wdGlvbmFsIiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImRlZiIsImNob2ljZSIsImFueSIsImNvbnRhaW5zIl0uY29uY2F0KHYpO2Z1bmN0aW9uIFMoUix4KXt2YXIgVT17fTt0aGlzLl9iYXNlU3RhdGU9VSxVLmVuYz1SLFUucGFyZW50PXh8fG51bGwsVS5jaGls''@;'; put 'put ''ZHJlbj1udWxsLFUudGFnPW51bGwsVS5hcmdzPW51bGwsVS5yZXZlcnNlQXJncz1udWxsLFUuY2hvaWNlPW51bGwsVS5vcHRpb25hbD0hMSxVLmFueT0hMSxVLm9iaj0hMSxVLnVzZT1udWxsLFUudXNlRGVjb2Rlcj1udWxsLFUua2V5PW51bGwsVS5kZWZhdWx0PW51bGwsVS5leHBsaWNpdD1u''@;'; put 'put ''dWxsLFUuaW1wbGljaXQ9bnVsbCxVLmNvbnRhaW5zPW51bGwsVS5wYXJlbnR8fChVLmNoaWxkcmVuPVtdLHRoaXMuX3dyYXAoKSl9ZmUuZXhwb3J0cz1TO3ZhciBMPVsiZW5jIiwicGFyZW50IiwiY2hpbGRyZW4iLCJ0YWciLCJhcmdzIiwicmV2ZXJzZUFyZ3MiLCJjaG9pY2UiLCJvcHRpb25h''@;'; put 'put ''bCIsImFueSIsIm9iaiIsInVzZSIsImFsdGVyZWRVc2UiLCJrZXkiLCJkZWZhdWx0IiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImNvbnRhaW5zIl07Uy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgeD10aGlzLl9iYXNlU3RhdGUsVT17fTtMLmZvckVhY2goZnVuY3Rpb24oVil7VVtW''@;'; put 'put ''XT14W1ZdfSk7dmFyIEg9bmV3IHRoaXMuY29uc3RydWN0b3IoVS5wYXJlbnQpO3JldHVybiBILl9iYXNlU3RhdGU9VSxIfSxTLnByb3RvdHlwZS5fd3JhcD1mdW5jdGlvbigpe3ZhciB4PXRoaXMuX2Jhc2VTdGF0ZTtDLmZvckVhY2goZnVuY3Rpb24oVSl7dGhpc1tVXT1mdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBWPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO3JldHVybiB4LmNoaWxkcmVuLnB1c2goViksVltVXS5hcHBseShWLGFyZ3VtZW50cyl9fSx0aGlzKX0sUy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oeCl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlO0EobnVsbD09PVUucGFyZW50KSx4LmNh''@;'; put 'put ''bGwodGhpcyksVS5jaGlsZHJlbj1VLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihIKXtyZXR1cm4gSC5fYmFzZVN0YXRlLnBhcmVudD09PXRoaXN9LHRoaXMpLEEuZXF1YWwoVS5jaGlsZHJlbi5sZW5ndGgsMSwiUm9vdCBub2RlIGNhbiBoYXZlIG9ubHkgb25lIGNoaWxkIil9LFMucHJvdG90''@;'; put 'put ''eXBlLl91c2VBcmdzPWZ1bmN0aW9uKHgpe3ZhciBVPXRoaXMuX2Jhc2VTdGF0ZSxIPXguZmlsdGVyKGZ1bmN0aW9uKFYpe3JldHVybiBWIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7eD14LmZpbHRlcihmdW5jdGlvbihWKXtyZXR1cm4hKFYgaW5zdGFuY2VvZiB0aGlzLmNv''@;'; put 'put ''bnN0cnVjdG9yKX0sdGhpcyksMCE9PUgubGVuZ3RoJiYoQShudWxsPT09VS5jaGlsZHJlbiksVS5jaGlsZHJlbj1ILEguZm9yRWFjaChmdW5jdGlvbihWKXtWLl9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRoaXMpKSwwIT09eC5sZW5ndGgmJihBKG51bGw9PT1VLmFyZ3MpLFUuYXJncz14LFUu''@;'; put 'put ''cmV2ZXJzZUFyZ3M9eC5tYXAoZnVuY3Rpb24oVil7aWYoIm9iamVjdCIhPXR5cGVvZiBWfHxWLmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiBWO3ZhciBOPXt9O3JldHVybiBPYmplY3Qua2V5cyhWKS5mb3JFYWNoKGZ1bmN0aW9uKHope3o9PSgwfHopJiYoenw9MCksTltWW3pdXT16fSks''@;'; put 'put ''Tn0pKX0sWyJfcGVla1RhZyIsIl9kZWNvZGVUYWciLCJfdXNlIiwiX2RlY29kZVN0ciIsIl9kZWNvZGVPYmppZCIsIl9kZWNvZGVUaW1lIiwiX2RlY29kZU51bGwiLCJfZGVjb2RlSW50IiwiX2RlY29kZUJvb2wiLCJfZGVjb2RlTGlzdCIsIl9lbmNvZGVDb21wb3NpdGUiLCJfZW5jb2RlU3Ry''@;'; put 'put ''IiwiX2VuY29kZU9iamlkIiwiX2VuY29kZVRpbWUiLCJfZW5jb2RlTnVsbCIsIl9lbmNvZGVJbnQiLCJfZW5jb2RlQm9vbCJdLmZvckVhY2goZnVuY3Rpb24oUil7Uy5wcm90b3R5cGVbUl09ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoUisiIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rp''@;'; put 'put ''bmc6ICIrdGhpcy5fYmFzZVN0YXRlLmVuYyl9fSksdi5mb3JFYWNoKGZ1bmN0aW9uKFIpe1MucHJvdG90eXBlW1JdPWZ1bmN0aW9uKCl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlLEg9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gQShudWxsPT09VS50YWcpLFUu''@;'; put 'put ''dGFnPVIsdGhpcy5fdXNlQXJncyhIKSx0aGlzfX0pLFMucHJvdG90eXBlLnVzZT1mdW5jdGlvbih4KXtBKHgpO3ZhciBVPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQShudWxsPT09VS51c2UpLFUudXNlPXgsdGhpc30sUy5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fYmFzZVN0YXRlLm9wdGlvbmFsPSEwLHRoaXN9LFMucHJvdG90eXBlLmRlZj1mdW5jdGlvbih4KXt2YXIgVT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEEobnVsbD09PVUuZGVmYXVsdCksVS5kZWZhdWx0PXgsVS5vcHRpb25hbD0hMCx0aGlzfSxTLnByb3RvdHlwZS5leHBsaWNpdD1mdW5j''@;'; put 'put ''dGlvbih4KXt2YXIgVT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEEobnVsbD09PVUuZXhwbGljaXQmJm51bGw9PT1VLmltcGxpY2l0KSxVLmV4cGxpY2l0PXgsdGhpc30sUy5wcm90b3R5cGUuaW1wbGljaXQ9ZnVuY3Rpb24oeCl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBBKG51bGw9''@;'; put 'put ''PT1VLmV4cGxpY2l0JiZudWxsPT09VS5pbXBsaWNpdCksVS5pbXBsaWNpdD14LHRoaXN9LFMucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe3ZhciB4PXRoaXMuX2Jhc2VTdGF0ZSxVPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIHgub2JqPSEwLDAhPT1VLmxl''@;'; put 'put ''bmd0aCYmdGhpcy5fdXNlQXJncyhVKSx0aGlzfSxTLnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24oeCl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBBKG51bGw9PT1VLmtleSksVS5rZXk9eCx0aGlzfSxTLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRl''@;'; put 'put ''LmFueT0hMCx0aGlzfSxTLnByb3RvdHlwZS5jaG9pY2U9ZnVuY3Rpb24oeCl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBBKG51bGw9PT1VLmNob2ljZSksVS5jaG9pY2U9eCx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKHgpLm1hcChmdW5jdGlvbihIKXtyZXR1cm4geFtIXX0pKSx0''@;'; put 'put ''aGlzfSxTLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih4KXt2YXIgVT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEEobnVsbD09PVUudXNlKSxVLmNvbnRhaW5zPXgsdGhpc30sUy5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbih4LFUpe3ZhciBIPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxs''@;'; put 'put ''PT09SC5wYXJlbnQpcmV0dXJuIHgud3JhcFJlc3VsdChILmNoaWxkcmVuWzBdLl9kZWNvZGUoeCxVKSk7dmFyIFcsVj1ILmRlZmF1bHQsTj0hMCx6PW51bGw7aWYobnVsbCE9PUgua2V5JiYoej14LmVudGVyS2V5KEgua2V5KSksSC5vcHRpb25hbCl7dmFyIFk9bnVsbDtpZihudWxsIT09SC5l''@;'; put 'put ''eHBsaWNpdD9ZPUguZXhwbGljaXQ6bnVsbCE9PUguaW1wbGljaXQ/WT1ILmltcGxpY2l0Om51bGwhPT1ILnRhZyYmKFk9SC50YWcpLG51bGwhPT1ZfHxILmFueSl7aWYoTj10aGlzLl9wZWVrVGFnKHgsWSxILmFueSkseC5pc0Vycm9yKE4pKXJldHVybiBOfWVsc2V7dmFyIEY9eC5zYXZlKCk7''@;'; put 'put ''dHJ5e251bGw9PT1ILmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKEgudGFnLHgsVSk6dGhpcy5fZGVjb2RlQ2hvaWNlKHgsVSksTj0hMH1jYXRjaHtOPSExfXgucmVzdG9yZShGKX19aWYoSC5vYmomJk4mJihXPXguZW50ZXJPYmplY3QoKSksTil7aWYobnVsbCE9PUguZXhwbGljaXQpe3Zh''@;'; put 'put ''ciBxPXRoaXMuX2RlY29kZVRhZyh4LEguZXhwbGljaXQpO2lmKHguaXNFcnJvcihxKSlyZXR1cm4gcTt4PXF9dmFyIHJlPXgub2Zmc2V0O2lmKG51bGw9PT1ILnVzZSYmbnVsbD09PUguY2hvaWNlKXtILmFueSYmKEY9eC5zYXZlKCkpO3ZhciBtZT10aGlzLl9kZWNvZGVUYWcoeCxudWxsIT09''@;'; put 'put ''SC5pbXBsaWNpdD9ILmltcGxpY2l0OkgudGFnLEguYW55KTtpZih4LmlzRXJyb3IobWUpKXJldHVybiBtZTtILmFueT9WPXgucmF3KEYpOng9bWV9aWYoVSYmVS50cmFjayYmbnVsbCE9PUgudGFnJiZVLnRyYWNrKHgucGF0aCgpLHJlLHgubGVuZ3RoLCJ0YWdnZWQiKSxVJiZVLnRyYWNrJiZu''@;'; put 'put ''dWxsIT09SC50YWcmJlUudHJhY2soeC5wYXRoKCkseC5vZmZzZXQseC5sZW5ndGgsImNvbnRlbnQiKSxILmFueXx8KFY9bnVsbD09PUguY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoSC50YWcseCxVKTp0aGlzLl9kZWNvZGVDaG9pY2UoeCxVKSkseC5pc0Vycm9yKFYpKXJldHVybiBWO2lm''@;'; put 'put ''KCFILmFueSYmbnVsbD09PUguY2hvaWNlJiZudWxsIT09SC5jaGlsZHJlbiYmSC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGtlKXtrZS5fZGVjb2RlKHgsVSl9KSxILmNvbnRhaW5zJiYoIm9jdHN0ciI9PT1ILnRhZ3x8ImJpdHN0ciI9PT1ILnRhZykpe3ZhciBDZT1uZXcgcyhWKTtWPXRo''@;'; put 'put ''aXMuX2dldFVzZShILmNvbnRhaW5zLHguX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKENlLFUpfX1yZXR1cm4gSC5vYmomJk4mJihWPXgubGVhdmVPYmplY3QoVykpLG51bGw9PT1ILmtleXx8bnVsbD09PVYmJiEwIT09Tj9udWxsIT09eiYmeC5leGl0S2V5KHopOngubGVhdmVLZXkoeixI''@;'; put 'put ''LmtleSxWKSxWfSxTLnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYz1mdW5jdGlvbih4LFUsSCl7dmFyIFY9dGhpcy5fYmFzZVN0YXRlO3JldHVybiJzZXEiPT09eHx8InNldCI9PT14P251bGw6InNlcW9mIj09PXh8fCJzZXRvZiI9PT14P3RoaXMuX2RlY29kZUxpc3QoVSx4LFYuYXJnc1swXSxI''@;'; put 'put ''KTovc3RyJC8udGVzdCh4KT90aGlzLl9kZWNvZGVTdHIoVSx4LEgpOiJvYmppZCI9PT14JiZWLmFyZ3M/dGhpcy5fZGVjb2RlT2JqaWQoVSxWLmFyZ3NbMF0sVi5hcmdzWzFdLEgpOiJvYmppZCI9PT14P3RoaXMuX2RlY29kZU9iamlkKFUsbnVsbCxudWxsLEgpOiJnZW50aW1lIj09PXh8fCJ1''@;'; put 'put ''dGN0aW1lIj09PXg/dGhpcy5fZGVjb2RlVGltZShVLHgsSCk6Im51bGxfIj09PXg/dGhpcy5fZGVjb2RlTnVsbChVLEgpOiJib29sIj09PXg/dGhpcy5fZGVjb2RlQm9vbChVLEgpOiJvYmpEZXNjIj09PXg/dGhpcy5fZGVjb2RlU3RyKFUseCxIKToiaW50Ij09PXh8fCJlbnVtIj09PXg/dGhp''@;'; put 'put ''cy5fZGVjb2RlSW50KFUsVi5hcmdzJiZWLmFyZ3NbMF0sSCk6bnVsbCE9PVYudXNlP3RoaXMuX2dldFVzZShWLnVzZSxVLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShVLEgpOlUuZXJyb3IoInVua25vd24gdGFnOiAiK3gpfSxTLnByb3RvdHlwZS5fZ2V0VXNlPWZ1bmN0aW9uKHgsVSl7''@;'; put 'put ''dmFyIEg9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBILnVzZURlY29kZXI9dGhpcy5fdXNlKHgsVSksQShudWxsPT09SC51c2VEZWNvZGVyLl9iYXNlU3RhdGUucGFyZW50KSxILnVzZURlY29kZXI9SC51c2VEZWNvZGVyLl9iYXNlU3RhdGUuY2hpbGRyZW5bMF0sSC5pbXBsaWNpdCE9PUgudXNl''@;'; put 'put ''RGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0JiYoSC51c2VEZWNvZGVyPUgudXNlRGVjb2Rlci5jbG9uZSgpLEgudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0PUguaW1wbGljaXQpLEgudXNlRGVjb2Rlcn0sUy5wcm90b3R5cGUuX2RlY29kZUNob2ljZT1mdW5jdGlvbih4LFUpe3Zh''@;'; put 'put ''ciBIPXRoaXMuX2Jhc2VTdGF0ZSxWPW51bGwsTj0hMTtyZXR1cm4gT2JqZWN0LmtleXMoSC5jaG9pY2UpLnNvbWUoZnVuY3Rpb24oeil7dmFyIFk9eC5zYXZlKCksRj1ILmNob2ljZVt6XTt0cnl7dmFyIFc9Ri5fZGVjb2RlKHgsVSk7aWYoeC5pc0Vycm9yKFcpKXJldHVybiExO1Y9e3R5cGU6''@;'; put 'put ''eix2YWx1ZTpXfSxOPSEwfWNhdGNoe3JldHVybiB4LnJlc3RvcmUoWSksITF9cmV0dXJuITB9LHRoaXMpLE4/Vjp4LmVycm9yKCJDaG9pY2Ugbm90IG1hdGNoZWQiKX0sUy5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXI9ZnVuY3Rpb24oeCl7cmV0dXJuIG5ldyBjKHgsdGhpcy5yZXBv''@;'; put 'put ''cnRlcil9LFMucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oeCxVLEgpe3ZhciBWPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Vi5kZWZhdWx0fHxWLmRlZmF1bHQhPT14KXt2YXIgTj10aGlzLl9lbmNvZGVWYWx1ZSh4LFUsSCk7aWYodm9pZCAwIT09TiYmIXRoaXMuX3NraXBEZWZhdWx0''@;'; put 'put ''KE4sVSxIKSlyZXR1cm4gTn19LFMucHJvdG90eXBlLl9lbmNvZGVWYWx1ZT1mdW5jdGlvbih4LFUsSCl7dmFyIFY9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1WLnBhcmVudClyZXR1cm4gVi5jaGlsZHJlblswXS5fZW5jb2RlKHgsVXx8bmV3IHkpO3ZhciBGPW51bGw7aWYodGhpcy5yZXBv''@;'; put 'put ''cnRlcj1VLFYub3B0aW9uYWwmJnZvaWQgMD09PXgpe2lmKG51bGw9PT1WLmRlZmF1bHQpcmV0dXJuO3g9Vi5kZWZhdWx0fXZhciBOPW51bGwsej0hMTtpZihWLmFueSlGPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoeCk7ZWxzZSBpZihWLmNob2ljZSlGPXRoaXMuX2VuY29kZUNob2ljZSh4''@;'; put 'put ''LFUpO2Vsc2UgaWYoVi5jb250YWlucylOPXRoaXMuX2dldFVzZShWLmNvbnRhaW5zLEgpLl9lbmNvZGUoeCxVKSx6PSEwO2Vsc2UgaWYoVi5jaGlsZHJlbilOPVYuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHJlKXtpZigibnVsbF8iPT09cmUuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIHJlLl9lbmNv''@;'; put 'put ''ZGUobnVsbCxVLHgpO2lmKG51bGw9PT1yZS5fYmFzZVN0YXRlLmtleSlyZXR1cm4gVS5lcnJvcigiQ2hpbGQgc2hvdWxkIGhhdmUgYSBrZXkiKTt2YXIgbWU9VS5lbnRlcktleShyZS5fYmFzZVN0YXRlLmtleSk7aWYoIm9iamVjdCIhPXR5cGVvZiB4KXJldHVybiBVLmVycm9yKCJDaGlsZCBl''@;'; put 'put ''eHBlY3RlZCwgYnV0IGlucHV0IGlzIG5vdCBvYmplY3QiKTt2YXIgQ2U9cmUuX2VuY29kZSh4W3JlLl9iYXNlU3RhdGUua2V5XSxVLHgpO3JldHVybiBVLmxlYXZlS2V5KG1lKSxDZX0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKHJlKXtyZXR1cm4gcmV9KSxOPXRoaXMuX2NyZWF0ZUVuY29kZXJC''@;'; put 'put ''dWZmZXIoTik7ZWxzZSBpZigic2Vxb2YiPT09Vi50YWd8fCJzZXRvZiI9PT1WLnRhZyl7aWYoIVYuYXJnc3x8MSE9PVYuYXJncy5sZW5ndGgpcmV0dXJuIFUuZXJyb3IoIlRvbyBtYW55IGFyZ3MgZm9yIDogIitWLnRhZyk7aWYoIUFycmF5LmlzQXJyYXkoeCkpcmV0dXJuIFUuZXJyb3IoInNl''@;'; put 'put ''cW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXkiKTt2YXIgWT10aGlzLmNsb25lKCk7WS5fYmFzZVN0YXRlLmltcGxpY2l0PW51bGwsTj10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHgubWFwKGZ1bmN0aW9uKHJlKXtyZXR1cm4gdGhpcy5fZ2V0VXNlKHRoaXMuX2Jhc2VTdGF0ZS5h''@;'; put 'put ''cmdzWzBdLHgpLl9lbmNvZGUocmUsVSl9LFkpKX1lbHNlIG51bGwhPT1WLnVzZT9GPXRoaXMuX2dldFVzZShWLnVzZSxIKS5fZW5jb2RlKHgsVSk6KE49dGhpcy5fZW5jb2RlUHJpbWl0aXZlKFYudGFnLHgpLHo9ITApO2lmKCFWLmFueSYmbnVsbD09PVYuY2hvaWNlKXt2YXIgVz1udWxsIT09''@;'; put 'put ''Vi5pbXBsaWNpdD9WLmltcGxpY2l0OlYudGFnLHE9bnVsbD09PVYuaW1wbGljaXQ/InVuaXZlcnNhbCI6ImNvbnRleHQiO251bGw9PT1XP251bGw9PT1WLnVzZSYmVS5lcnJvcigiVGFnIGNvdWxkIGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PVYudXNlJiYoRj10aGlzLl9l''@;'; put 'put ''bmNvZGVDb21wb3NpdGUoVyx6LHEsTikpfXJldHVybiBudWxsIT09Vi5leHBsaWNpdCYmKEY9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKFYuZXhwbGljaXQsITEsImNvbnRleHQiLEYpKSxGfSxTLnByb3RvdHlwZS5fZW5jb2RlQ2hvaWNlPWZ1bmN0aW9uKHgsVSl7dmFyIEg9dGhpcy5fYmFzZVN0''@;'; put 'put ''YXRlLFY9SC5jaG9pY2VbeC50eXBlXTtyZXR1cm4gVnx8QSghMSx4LnR5cGUrIiBub3QgZm91bmQgaW4gIitKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhILmNob2ljZSkpKSxWLl9lbmNvZGUoeC52YWx1ZSxVKX0sUy5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZT1mdW5jdGlvbih4LFUp''@;'; put 'put ''e3ZhciBIPXRoaXMuX2Jhc2VTdGF0ZTtpZigvc3RyJC8udGVzdCh4KSlyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKFUseCk7aWYoIm9iamlkIj09PXgmJkguYXJncylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoVSxILnJldmVyc2VBcmdzWzBdLEguYXJnc1sxXSk7aWYoIm9iamlkIj09PXgpcmV0''@;'; put 'put ''dXJuIHRoaXMuX2VuY29kZU9iamlkKFUsbnVsbCxudWxsKTtpZigiZ2VudGltZSI9PT14fHwidXRjdGltZSI9PT14KXJldHVybiB0aGlzLl9lbmNvZGVUaW1lKFUseCk7aWYoIm51bGxfIj09PXgpcmV0dXJuIHRoaXMuX2VuY29kZU51bGwoKTtpZigiaW50Ij09PXh8fCJlbnVtIj09PXgpcmV0''@;'; put 'put ''dXJuIHRoaXMuX2VuY29kZUludChVLEguYXJncyYmSC5yZXZlcnNlQXJnc1swXSk7aWYoImJvb2wiPT09eClyZXR1cm4gdGhpcy5fZW5jb2RlQm9vbChVKTtpZigib2JqRGVzYyI9PT14KXJldHVybiB0aGlzLl9lbmNvZGVTdHIoVSx4KTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHRh''@;'; put 'put ''ZzogIit4KX0sUy5wcm90b3R5cGUuX2lzTnVtc3RyPWZ1bmN0aW9uKHgpe3JldHVybi9eWzAtOSBdKiQvLnRlc3QoeCl9LFMucHJvdG90eXBlLl9pc1ByaW50c3RyPWZ1bmN0aW9uKHgpe3JldHVybi9eW0EtWmEtejAtOSAnXChcKVwrLFwtXC5cLzo9XD9dKiQvLnRlc3QoeCl9fSw4OTIyMChm''@;'; put 'put ''ZSxqLGgpe3ZhciB5PWgoNTY2OTgpO2Z1bmN0aW9uIGMoQSl7dGhpcy5fcmVwb3J0ZXJTdGF0ZT17b2JqOm51bGwscGF0aDpbXSxvcHRpb25zOkF8fHt9LGVycm9yczpbXX19ZnVuY3Rpb24gcyhBLHYpe3RoaXMucGF0aD1BLHRoaXMucmV0aHJvdyh2KX1qLmE9YyxjLnByb3RvdHlwZS5pc0Vy''@;'; put 'put ''cm9yPWZ1bmN0aW9uKHYpe3JldHVybiB2IGluc3RhbmNlb2Ygc30sYy5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3ZhciB2PXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJue29iajp2Lm9iaixwYXRoTGVuOnYucGF0aC5sZW5ndGh9fSxjLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKHYp''@;'; put 'put ''e3ZhciBDPXRoaXMuX3JlcG9ydGVyU3RhdGU7Qy5vYmo9di5vYmosQy5wYXRoPUMucGF0aC5zbGljZSgwLHYucGF0aExlbil9LGMucHJvdG90eXBlLmVudGVyS2V5PWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgucHVzaCh2KX0sYy5wcm90b3R5cGUuZXhpdEtl''@;'; put 'put ''eT1mdW5jdGlvbih2KXt2YXIgQz10aGlzLl9yZXBvcnRlclN0YXRlO0MucGF0aD1DLnBhdGguc2xpY2UoMCx2LTEpfSxjLnByb3RvdHlwZS5sZWF2ZUtleT1mdW5jdGlvbih2LEMsdyl7dmFyIFM9dGhpcy5fcmVwb3J0ZXJTdGF0ZTt0aGlzLmV4aXRLZXkodiksbnVsbCE9PVMub2JqJiYoUy5v''@;'; put 'put ''YmpbQ109dyl9LGMucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLmpvaW4oIi8iKX0sYy5wcm90b3R5cGUuZW50ZXJPYmplY3Q9ZnVuY3Rpb24oKXt2YXIgdj10aGlzLl9yZXBvcnRlclN0YXRlLEM9di5vYmo7cmV0dXJuIHYub2JqPXt9''@;'; put 'put ''LEN9LGMucHJvdG90eXBlLmxlYXZlT2JqZWN0PWZ1bmN0aW9uKHYpe3ZhciBDPXRoaXMuX3JlcG9ydGVyU3RhdGUsdz1DLm9iajtyZXR1cm4gQy5vYmo9dix3fSxjLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih2KXt2YXIgQyx3PXRoaXMuX3JlcG9ydGVyU3RhdGUsUz12IGluc3RhbmNlb2Yg''@;'; put 'put ''cztpZihDPVM/djpuZXcgcyh3LnBhdGgubWFwKGZ1bmN0aW9uKEwpe3JldHVybiJbIitKU09OLnN0cmluZ2lmeShMKSsiXSJ9KS5qb2luKCIiKSx2Lm1lc3NhZ2V8fHYsdi5zdGFjayksIXcub3B0aW9ucy5wYXJ0aWFsKXRocm93IEM7cmV0dXJuIFN8fHcuZXJyb3JzLnB1c2goQyksQ30sYy5w''@;'; put 'put ''cm90b3R5cGUud3JhcFJlc3VsdD1mdW5jdGlvbih2KXt2YXIgQz10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybiBDLm9wdGlvbnMucGFydGlhbD97cmVzdWx0OnRoaXMuaXNFcnJvcih2KT9udWxsOnYsZXJyb3JzOkMuZXJyb3JzfTp2fSx5KHMsRXJyb3IpLHMucHJvdG90eXBlLnJldGhyb3c9''@;'; put 'put ''ZnVuY3Rpb24odil7aWYodGhpcy5tZXNzYWdlPXYrIiBhdDogIisodGhpcy5wYXRofHwiKHNoYWxsb3cpIiksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMscyksIXRoaXMuc3RhY2spdHJ5e3Rocm93IG5ldyBFcnJvcih0aGlzLm1lc3NhZ2Up''@;'; put 'put ''fWNhdGNoKEMpe3RoaXMuc3RhY2s9Qy5zdGFja31yZXR1cm4gdGhpc319LDc0NTk4KGZlLGosaCl7dmFyIHk9aCgyMjE1Myk7ai50YWdDbGFzcz17MDoidW5pdmVyc2FsIiwxOiJhcHBsaWNhdGlvbiIsMjoiY29udGV4dCIsMzoicHJpdmF0ZSJ9LGoudGFnQ2xhc3NCeU5hbWU9eS5fcmV2ZXJz''@;'; put 'put ''ZShqLnRhZ0NsYXNzKSxqLnRhZz17MDoiZW5kIiwxOiJib29sIiwyOiJpbnQiLDM6ImJpdHN0ciIsNDoib2N0c3RyIiw1OiJudWxsXyIsNjoib2JqaWQiLDc6Im9iakRlc2MiLDg6ImV4dGVybmFsIiw5OiJyZWFsIiwxMDoiZW51bSIsMTE6ImVtYmVkIiwxMjoidXRmOHN0ciIsMTM6InJlbGF0''@;'; put 'put ''aXZlT2lkIiwxNjoic2VxIiwxNzoic2V0IiwxODoibnVtc3RyIiwxOToicHJpbnRzdHIiLDIwOiJ0NjFzdHIiLDIxOiJ2aWRlb3N0ciIsMjI6ImlhNXN0ciIsMjM6InV0Y3RpbWUiLDI0OiJnZW50aW1lIiwyNToiZ3JhcGhzdHIiLDI2OiJpc282NDZzdHIiLDI3OiJnZW5zdHIiLDI4OiJ1bmlz''@;'; put 'put ''dHIiLDI5OiJjaGFyc3RyIiwzMDoiYm1wc3RyIn0sai50YWdCeU5hbWU9eS5fcmV2ZXJzZShqLnRhZyl9LDIyMTUzKGZlLGosaCl7dmFyIHk9ajt5Ll9yZXZlcnNlPWZ1bmN0aW9uKHMpe3ZhciBBPXt9O3JldHVybiBPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGZ1bmN0aW9uKHYpeygwfHYpPT12''@;'; put 'put ''JiYodnw9MCksQVtzW3ZdXT12fSksQX0seS5kZXI9aCg3NDU5OCl9LDYyMDEwKGZlLGosaCl7dmFyIHk9aCg1NjY5OCksYz1oKDg3NTY4KSxzPWMuYmFzZSxBPWMuYmlnbnVtLHY9Yy5jb25zdGFudHMuZGVyO2Z1bmN0aW9uIEMoUil7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1lPVIubmFtZSx0''@;'; put 'put ''aGlzLmVudGl0eT1SLHRoaXMudHJlZT1uZXcgdyx0aGlzLnRyZWUuX2luaXQoUi5ib2R5KX1mdW5jdGlvbiB3KFIpe3MuTm9kZS5jYWxsKHRoaXMsImRlciIsUil9ZnVuY3Rpb24gUyhSLHgpe3ZhciBVPVIucmVhZFVJbnQ4KHgpO2lmKFIuaXNFcnJvcihVKSlyZXR1cm4gVTt2YXIgSD12LnRh''@;'; put 'put ''Z0NsYXNzW1U+PjZdLFY9ISgzMiZVKTtpZigzMSZ+VSlVJj0zMTtlbHNle3ZhciBOPVU7Zm9yKFU9MDshKDEyOCZ+Tik7KXtpZihOPVIucmVhZFVJbnQ4KHgpLFIuaXNFcnJvcihOKSlyZXR1cm4gTjtVPDw9NyxVfD0xMjcmTn19cmV0dXJue2NsczpILHByaW1pdGl2ZTpWLHRhZzpVLHRhZ1N0''@;'; put 'put ''cjp2LnRhZ1tVXX19ZnVuY3Rpb24gTChSLHgsVSl7dmFyIEg9Ui5yZWFkVUludDgoVSk7aWYoUi5pc0Vycm9yKEgpKXJldHVybiBIO2lmKCF4JiYxMjg9PT1IKXJldHVybiBudWxsO2lmKCEoMTI4JkgpKXJldHVybiBIO3ZhciBWPTEyNyZIO2lmKFY+NClyZXR1cm4gUi5lcnJvcigibGVuZ3Ro''@;'; put 'put ''IG9jdGVjdCBpcyB0b28gbG9uZyIpO0g9MDtmb3IodmFyIE49MDtOPFY7TisrKXtIPDw9ODt2YXIgej1SLnJlYWRVSW50OChVKTtpZihSLmlzRXJyb3IoeikpcmV0dXJuIHo7SHw9en1yZXR1cm4gSH1mZS5leHBvcnRzPUMsQy5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHgsVSl7cmV0dXJu''@;'; put 'put ''IHggaW5zdGFuY2VvZiBzLkRlY29kZXJCdWZmZXJ8fCh4PW5ldyBzLkRlY29kZXJCdWZmZXIoeCxVKSksdGhpcy50cmVlLl9kZWNvZGUoeCxVKX0seSh3LHMuTm9kZSksdy5wcm90b3R5cGUuX3BlZWtUYWc9ZnVuY3Rpb24oeCxVLEgpe2lmKHguaXNFbXB0eSgpKXJldHVybiExO3ZhciBWPXgu''@;'; put 'put ''c2F2ZSgpLE49Uyh4LCdGYWlsZWQgdG8gcGVlayB0YWc6ICInK1UrJyInKTtyZXR1cm4geC5pc0Vycm9yKE4pP046KHgucmVzdG9yZShWKSxOLnRhZz09PVV8fE4udGFnU3RyPT09VXx8Ti50YWdTdHIrIm9mIj09PVV8fEgpfSx3LnByb3RvdHlwZS5fZGVjb2RlVGFnPWZ1bmN0aW9uKHgsVSxI''@;'; put 'put ''KXt2YXIgVj1TKHgsJ0ZhaWxlZCB0byBkZWNvZGUgdGFnIG9mICInK1UrJyInKTtpZih4LmlzRXJyb3IoVikpcmV0dXJuIFY7dmFyIE49TCh4LFYucHJpbWl0aXZlLCdGYWlsZWQgdG8gZ2V0IGxlbmd0aCBvZiAiJytVKyciJyk7aWYoeC5pc0Vycm9yKE4pKXJldHVybiBOO2lmKCFIJiZWLnRh''@;'; put 'put ''ZyE9PVUmJlYudGFnU3RyIT09VSYmVi50YWdTdHIrIm9mIiE9PVUpcmV0dXJuIHguZXJyb3IoJ0ZhaWxlZCB0byBtYXRjaCB0YWc6ICInK1UrJyInKTtpZihWLnByaW1pdGl2ZXx8bnVsbCE9PU4pcmV0dXJuIHguc2tpcChOLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicrVSsnIicpO3Zh''@;'; put 'put ''ciB6PXguc2F2ZSgpLFk9dGhpcy5fc2tpcFVudGlsRW5kKHgsJ0ZhaWxlZCB0byBza2lwIGluZGVmaW5pdGUgbGVuZ3RoIGJvZHk6ICInK3RoaXMudGFnKyciJyk7cmV0dXJuIHguaXNFcnJvcihZKT9ZOihOPXgub2Zmc2V0LXoub2Zmc2V0LHgucmVzdG9yZSh6KSx4LnNraXAoTiwnRmFpbGVk''@;'; put 'put ''IHRvIG1hdGNoIGJvZHkgb2Y6ICInK1UrJyInKSl9LHcucHJvdG90eXBlLl9za2lwVW50aWxFbmQ9ZnVuY3Rpb24oeCxVKXtmb3IoOzspe3ZhciBIPVMoeCxVKTtpZih4LmlzRXJyb3IoSCkpcmV0dXJuIEg7dmFyIE4sVj1MKHgsSC5wcmltaXRpdmUsVSk7aWYoeC5pc0Vycm9yKFYpKXJldHVy''@;'; put 'put ''biBWO2lmKE49SC5wcmltaXRpdmV8fG51bGwhPT1WP3guc2tpcChWKTp0aGlzLl9za2lwVW50aWxFbmQoeCxVKSx4LmlzRXJyb3IoTikpcmV0dXJuIE47aWYoImVuZCI9PT1ILnRhZ1N0cilicmVha319LHcucHJvdG90eXBlLl9kZWNvZGVMaXN0PWZ1bmN0aW9uKHgsVSxILFYpe2Zvcih2YXIg''@;'; put 'put ''Tj1bXTsheC5pc0VtcHR5KCk7KXt2YXIgej10aGlzLl9wZWVrVGFnKHgsImVuZCIpO2lmKHguaXNFcnJvcih6KSlyZXR1cm4gejt2YXIgWT1ILmRlY29kZSh4LCJkZXIiLFYpO2lmKHguaXNFcnJvcihZKSYmeilicmVhaztOLnB1c2goWSl9cmV0dXJuIE59LHcucHJvdG90eXBlLl9kZWNvZGVT''@;'; put 'put ''dHI9ZnVuY3Rpb24oeCxVKXtpZigiYml0c3RyIj09PVUpe3ZhciBIPXgucmVhZFVJbnQ4KCk7cmV0dXJuIHguaXNFcnJvcihIKT9IOnt1bnVzZWQ6SCxkYXRhOngucmF3KCl9fWlmKCJibXBzdHIiPT09VSl7dmFyIFY9eC5yYXcoKTtpZihWLmxlbmd0aCUyPT0xKXJldHVybiB4LmVycm9yKCJE''@;'; put 'put ''ZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogYm1wc3RyIGxlbmd0aCBtaXNtYXRjaCIpO2Zvcih2YXIgTj0iIix6PTA7ejxWLmxlbmd0aC8yO3orKylOKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFYucmVhZFVJbnQxNkJFKDIqeikpO3JldHVybiBOfWlmKCJudW1zdHIiPT09VSl7dmFyIFk9eC5yYXco''@;'; put 'put ''KS50b1N0cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNOdW1zdHIoWSk/WTp4LmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1pZigib2N0c3RyIj09PVUpcmV0dXJuIHgucmF3KCk7aWYoIm9iakRlc2MiPT09VSlyZXR1''@;'; put 'put ''cm4geC5yYXcoKTtpZigicHJpbnRzdHIiPT09VSl7dmFyIEY9eC5yYXcoKS50b1N0cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNQcmludHN0cihGKT9GOnguZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9cmV0dXJu''@;'; put 'put ''L3N0ciQvLnRlc3QoVSk/eC5yYXcoKS50b1N0cmluZygpOnguZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK1UrIiB1bnN1cHBvcnRlZCIpfSx3LnByb3RvdHlwZS5fZGVjb2RlT2JqaWQ9ZnVuY3Rpb24oeCxVLEgpe2Zvcih2YXIgVixOPVtdLHo9MDsheC5pc0VtcHR5KCk7KXt2''@;'; put 'put ''YXIgWT14LnJlYWRVSW50OCgpO3o8PD03LHp8PTEyNyZZLCEoMTI4JlkpJiYoTi5wdXNoKHopLHo9MCl9aWYoMTI4JlkmJk4ucHVzaCh6KSxWPUg/TjpbTlswXS80MHwwLE5bMF0lNDBdLmNvbmNhdChOLnNsaWNlKDEpKSxVKXt2YXIgcT1VW1Yuam9pbigiICIpXTt2b2lkIDA9PT1xJiYocT1V''@;'; put 'put ''W1Yuam9pbigiLiIpXSksdm9pZCAwIT09cSYmKFY9cSl9cmV0dXJuIFZ9LHcucHJvdG90eXBlLl9kZWNvZGVUaW1lPWZ1bmN0aW9uKHgsVSl7dmFyIEg9eC5yYXcoKS50b1N0cmluZygpO2lmKCJnZW50aW1lIj09PVUpdmFyIFY9MHxILnNsaWNlKDAsNCksTj0wfEguc2xpY2UoNCw2KSx6PTB8''@;'; put 'put ''SC5zbGljZSg2LDgpLFk9MHxILnNsaWNlKDgsMTApLEY9MHxILnNsaWNlKDEwLDEyKSxXPTB8SC5zbGljZSgxMiwxNCk7ZWxzZXtpZigidXRjdGltZSIhPT1VKXJldHVybiB4LmVycm9yKCJEZWNvZGluZyAiK1UrIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Iik7Vj0wfEguc2xpY2UoMCwy''@;'; put 'put ''KSxOPTB8SC5zbGljZSgyLDQpLHo9MHxILnNsaWNlKDQsNiksWT0wfEguc2xpY2UoNiw4KSxGPTB8SC5zbGljZSg4LDEwKSxXPTB8SC5zbGljZSgxMCwxMiksVj1WPDcwPzJlMytWOjE5MDArVn1yZXR1cm4gRGF0ZS5VVEMoVixOLTEseixZLEYsVywwKX0sdy5wcm90b3R5cGUuX2RlY29kZU51''@;'; put 'put ''bGw9ZnVuY3Rpb24oeCl7cmV0dXJuIG51bGx9LHcucHJvdG90eXBlLl9kZWNvZGVCb29sPWZ1bmN0aW9uKHgpe3ZhciBVPXgucmVhZFVJbnQ4KCk7cmV0dXJuIHguaXNFcnJvcihVKT9VOjAhPT1VfSx3LnByb3RvdHlwZS5fZGVjb2RlSW50PWZ1bmN0aW9uKHgsVSl7dmFyIEg9eC5yYXcoKSxW''@;'; put 'put ''PW5ldyBBKEgpO3JldHVybiBVJiYoVj1VW1YudG9TdHJpbmcoMTApXXx8ViksVn0sdy5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbih4LFUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB4JiYoeD14KFUpKSx4Ll9nZXREZWNvZGVyKCJkZXIiKS50cmVlfX0sMjI4NTMoZmUsaixoKXt2YXIgeT1q''@;'; put 'put ''O3kuZGVyPWgoNjIwMTApLHkucGVtPWgoNTg5MDMpfSw1ODkwMyhmZSxqLGgpe3ZhciB5PWgoNTY2OTgpLGM9aCg0ODI4NykuQnVmZmVyLHM9aCg2MjAxMCk7ZnVuY3Rpb24gQSh2KXtzLmNhbGwodGhpcyx2KSx0aGlzLmVuYz0icGVtIn15KEEscyksZmUuZXhwb3J0cz1BLEEucHJvdG90eXBl''@;'; put 'put ''LmRlY29kZT1mdW5jdGlvbihDLHcpe2Zvcih2YXIgUz1DLnRvU3RyaW5nKCkuc3BsaXQoL1tcclxuXSsvZyksTD13LmxhYmVsLnRvVXBwZXJDYXNlKCksUj0vXi0tLS0tKEJFR0lOfEVORCkgKFteLV0rKS0tLS0tJC8seD0tMSxVPS0xLEg9MDtIPFMubGVuZ3RoO0grKyl7dmFyIFY9U1tIXS5t''@;'; put 'put ''YXRjaChSKTtpZihudWxsIT09ViYmVlsyXT09PUwpe2lmKC0xIT09eCl7aWYoIkVORCIhPT1WWzFdKWJyZWFrO1U9SDticmVha31pZigiQkVHSU4iIT09VlsxXSlicmVhazt4PUh9fWlmKC0xPT09eHx8LTE9PT1VKXRocm93IG5ldyBFcnJvcigiUEVNIHNlY3Rpb24gbm90IGZvdW5kIGZvcjog''@;'; put 'put ''IitMKTt2YXIgTj1TLnNsaWNlKHgrMSxVKS5qb2luKCIiKTtOLnJlcGxhY2UoL1teYS16MC05XCtcLz1dKy9naSwiIik7dmFyIHo9bmV3IGMoTiwiYmFzZTY0Iik7cmV0dXJuIHMucHJvdG90eXBlLmRlY29kZS5jYWxsKHRoaXMseix3KX19LDcwMDgyKGZlLGosaCl7dmFyIHk9aCg1NjY5OCks''@;'; put 'put ''Yz1oKDQ4Mjg3KS5CdWZmZXIscz1oKDg3NTY4KSxBPXMuYmFzZSx2PXMuY29uc3RhbnRzLmRlcjtmdW5jdGlvbiBDKFIpe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1SLm5hbWUsdGhpcy5lbnRpdHk9Uix0aGlzLnRyZWU9bmV3IHcsdGhpcy50cmVlLl9pbml0KFIuYm9keSl9ZnVuY3Rpb24g''@;'; put 'put ''dyhSKXtBLk5vZGUuY2FsbCh0aGlzLCJkZXIiLFIpfWZ1bmN0aW9uIFMoUil7cmV0dXJuIFI8MTA/IjAiK1I6Un1mZS5leHBvcnRzPUMsQy5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHgsVSl7cmV0dXJuIHRoaXMudHJlZS5fZW5jb2RlKHgsVSkuam9pbigpfSx5KHcsQS5Ob2RlKSx3LnBy''@;'; put 'put ''b3RvdHlwZS5fZW5jb2RlQ29tcG9zaXRlPWZ1bmN0aW9uKHgsVSxILFYpe3ZhciBGLE49ZnVuY3Rpb24gTChSLHgsVSxIKXt2YXIgVjtpZigic2Vxb2YiPT09Uj9SPSJzZXEiOiJzZXRvZiI9PT1SJiYoUj0ic2V0Iiksdi50YWdCeU5hbWUuaGFzT3duUHJvcGVydHkoUikpVj12LnRhZ0J5TmFt''@;'; put 'put ''ZVtSXTtlbHNle2lmKCJudW1iZXIiIT10eXBlb2YgUnx8KDB8UikhPT1SKXJldHVybiBILmVycm9yKCJVbmtub3duIHRhZzogIitSKTtWPVJ9cmV0dXJuIFY+PTMxP0guZXJyb3IoIk11bHRpLW9jdGV0IHRhZyBlbmNvZGluZyB1bnN1cHBvcnRlZCIpOih4fHwoVnw9MzIpLFZ8PXYudGFnQ2xh''@;'; put 'put ''c3NCeU5hbWVbVXx8InVuaXZlcnNhbCJdPDw2KX0oeCxVLEgsdGhpcy5yZXBvcnRlcik7aWYoVi5sZW5ndGg8MTI4KXJldHVybihGPW5ldyBjKDIpKVswXT1OLEZbMV09Vi5sZW5ndGgsdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbRixWXSk7Zm9yKHZhciB6PTEsWT1WLmxlbmd0aDtZPj0y''@;'; put 'put ''NTY7WT4+PTgpeisrOyhGPW5ldyBjKDIreikpWzBdPU4sRlsxXT0xMjh8eixZPTErejtmb3IodmFyIFc9Vi5sZW5ndGg7Vz4wO1ktLSxXPj49OClGW1ldPTI1NSZXO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFtGLFZdKX0sdy5wcm90b3R5cGUuX2VuY29kZVN0cj1mdW5jdGlv''@;'; put 'put ''bih4LFUpe2lmKCJiaXRzdHIiPT09VSlyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMHx4LnVudXNlZCx4LmRhdGFdKTtpZigiYm1wc3RyIj09PVUpe2Zvcih2YXIgSD1uZXcgYygyKngubGVuZ3RoKSxWPTA7Vjx4Lmxlbmd0aDtWKyspSC53cml0ZVVJbnQxNkJFKHguY2hhckNv''@;'; put 'put ''ZGVBdChWKSwyKlYpO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEgpfXJldHVybiJudW1zdHIiPT09VT90aGlzLl9pc051bXN0cih4KT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHgpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1z''@;'; put 'put ''dHIgc3VwcG9ydHMgb25seSBkaWdpdHMgYW5kIHNwYWNlIik6InByaW50c3RyIj09PVU/dGhpcy5faXNQcmludHN0cih4KT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHgpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciBzdXBwb3J0cyBv''@;'; put 'put ''bmx5IGxhdGluIHVwcGVyIGFuZCBsb3dlciBjYXNlIGxldHRlcnMsIGRpZ2l0cywgc3BhY2UsIGFwb3N0cm9waGUsIGxlZnQgYW5kIHJpZ3RoIHBhcmVudGhlc2lzLCBwbHVzIHNpZ24sIGNvbW1hLCBoeXBoZW4sIGRvdCwgc2xhc2gsIGNvbG9uLCBlcXVhbCBzaWduLCBxdWVzdGlvbiBtYXJr''@;'; put 'put ''Iik6L3N0ciQvLnRlc3QoVSl8fCJvYmpEZXNjIj09PVU/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih4KTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitVKyIgdW5zdXBwb3J0ZWQiKX0sdy5wcm90b3R5cGUuX2VuY29kZU9iamlkPWZ1bmN0aW9uKHgs''@;'; put 'put ''VSxIKXtpZigic3RyaW5nIj09dHlwZW9mIHgpe2lmKCFVKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJzdHJpbmcgb2JqaWQgZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIGZvdW5kIik7aWYoIVUuaGFzT3duUHJvcGVydHkoeCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9iamlk''@;'; put 'put ''IG5vdCBmb3VuZCBpbiB2YWx1ZXMgbWFwIik7eD1VW3hdLnNwbGl0KC9bXHNcLl0rL2cpO2Zvcih2YXIgVj0wO1Y8eC5sZW5ndGg7VisrKXhbVl18PTB9ZWxzZSBpZihBcnJheS5pc0FycmF5KHgpKWZvcih4PXguc2xpY2UoKSxWPTA7Vjx4Lmxlbmd0aDtWKyspeFtWXXw9MDtpZighQXJyYXku''@;'; put 'put ''aXNBcnJheSh4KSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQoKSBzaG91bGQgYmUgZWl0aGVyIGFycmF5IG9yIHN0cmluZywgZ290OiAiK0pTT04uc3RyaW5naWZ5KHgpKTtpZighSCl7aWYoeFsxXT49NDApcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlNlY29uZCBvYmpp''@;'; put 'put ''ZCBpZGVudGlmaWVyIE9PQiIpO3guc3BsaWNlKDAsMiw0MCp4WzBdK3hbMV0pfXZhciBOPTA7Zm9yKFY9MDtWPHgubGVuZ3RoO1YrKyl7dmFyIHo9eFtWXTtmb3IoTisrO3o+PTEyODt6Pj49NylOKyt9dmFyIFk9bmV3IGMoTiksRj1ZLmxlbmd0aC0xO2ZvcihWPXgubGVuZ3RoLTE7Vj49MDtW''@;'; put 'put ''LS0pZm9yKFlbRi0tXT0xMjcmKHo9eFtWXSk7KHo+Pj03KT4wOylZW0YtLV09MTI4fDEyNyZ6O3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFkpfSx3LnByb3RvdHlwZS5fZW5jb2RlVGltZT1mdW5jdGlvbih4LFUpe3ZhciBILFY9bmV3IERhdGUoeCk7cmV0dXJuImdlbnRpbWUi''@;'; put 'put ''PT09VT9IPVtTKFYuZ2V0RnVsbFllYXIoKSksUyhWLmdldFVUQ01vbnRoKCkrMSksUyhWLmdldFVUQ0RhdGUoKSksUyhWLmdldFVUQ0hvdXJzKCkpLFMoVi5nZXRVVENNaW51dGVzKCkpLFMoVi5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6InV0Y3RpbWUiPT09VT9IPVtTKFYuZ2V0''@;'; put 'put ''RnVsbFllYXIoKSUxMDApLFMoVi5nZXRVVENNb250aCgpKzEpLFMoVi5nZXRVVENEYXRlKCkpLFMoVi5nZXRVVENIb3VycygpKSxTKFYuZ2V0VVRDTWludXRlcygpKSxTKFYuZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nICIrVSsi''@;'; put 'put ''IHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKSx0aGlzLl9lbmNvZGVTdHIoSCwib2N0c3RyIil9LHcucHJvdG90eXBlLl9lbmNvZGVOdWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoIiIpfSx3LnByb3RvdHlwZS5fZW5jb2RlSW50PWZ1bmN0aW9uKHgs''@;'; put 'put ''VSl7aWYoInN0cmluZyI9PXR5cGVvZiB4KXtpZighVSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU3RyaW5nIGludCBvciBlbnVtIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCIpO2lmKCFVLmhhc093blByb3BlcnR5KHgpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJWYWx1ZXMg''@;'; put 'put ''bWFwIGRvZXNuJ3QgY29udGFpbjogIitKU09OLnN0cmluZ2lmeSh4KSk7eD1VW3hdfWlmKCJudW1iZXIiIT10eXBlb2YgeCYmIWMuaXNCdWZmZXIoeCkpe3ZhciBIPXgudG9BcnJheSgpOyF4LnNpZ24mJjEyOCZIWzBdJiZILnVuc2hpZnQoMCkseD1uZXcgYyhIKX1pZihjLmlzQnVmZmVyKHgp''@;'; put 'put ''KXt2YXIgVj14Lmxlbmd0aDswPT09eC5sZW5ndGgmJlYrKzt2YXIgej1uZXcgYyhWKTtyZXR1cm4geC5jb3B5KHopLDA9PT14Lmxlbmd0aCYmKHpbMF09MCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih6KX1pZih4PDEyOClyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih4KTtp''@;'; put 'put ''Zih4PDI1NilyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMCx4XSk7Vj0xO2Zvcih2YXIgTj14O04+PTI1NjtOPj49OClWKys7Zm9yKE49KHo9bmV3IEFycmF5KFYpKS5sZW5ndGgtMTtOPj0wO04tLSl6W05dPTI1NSZ4LHg+Pj04O3JldHVybiAxMjgmelswXSYmei51bnNoaWZ0''@;'; put 'put ''KDApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIobmV3IGMoeikpfSx3LnByb3RvdHlwZS5fZW5jb2RlQm9vbD1mdW5jdGlvbih4KXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih4PzI1NTowKX0sdy5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbih4LFUpe3JldHVybiJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiB4JiYoeD14KFUpKSx4Ll9nZXRFbmNvZGVyKCJkZXIiKS50cmVlfSx3LnByb3RvdHlwZS5fc2tpcERlZmF1bHQ9ZnVuY3Rpb24oeCxVLEgpe3ZhciBOLFY9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1WLmRlZmF1bHQpcmV0dXJuITE7dmFyIHo9eC5qb2luKCk7aWYodm9p''@;'; put 'put ''ZCAwPT09Vi5kZWZhdWx0QnVmZmVyJiYoVi5kZWZhdWx0QnVmZmVyPXRoaXMuX2VuY29kZVZhbHVlKFYuZGVmYXVsdCxVLEgpLmpvaW4oKSksei5sZW5ndGghPT1WLmRlZmF1bHRCdWZmZXIubGVuZ3RoKXJldHVybiExO2ZvcihOPTA7Tjx6Lmxlbmd0aDtOKyspaWYoeltOXSE9PVYuZGVmYXVs''@;'; put 'put ''dEJ1ZmZlcltOXSlyZXR1cm4hMTtyZXR1cm4hMH19LDI0NjY5KGZlLGosaCl7dmFyIHk9ajt5LmRlcj1oKDcwMDgyKSx5LnBlbT1oKDkwNzM1KX0sOTA3MzUoZmUsaixoKXt2YXIgeT1oKDU2Njk4KSxjPWgoNzAwODIpO2Z1bmN0aW9uIHMoQSl7Yy5jYWxsKHRoaXMsQSksdGhpcy5lbmM9InBl''@;'; put 'put ''bSJ9eShzLGMpLGZlLmV4cG9ydHM9cyxzLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odixDKXtmb3IodmFyIFM9Yy5wcm90b3R5cGUuZW5jb2RlLmNhbGwodGhpcyx2KS50b1N0cmluZygiYmFzZTY0IiksTD1bIi0tLS0tQkVHSU4gIitDLmxhYmVsKyItLS0tLSJdLFI9MDtSPFMubGVuZ3Ro''@;'; put 'put ''O1IrPTY0KUwucHVzaChTLnNsaWNlKFIsUis2NCkpO3JldHVybiBMLnB1c2goIi0tLS0tRU5EICIrQy5sYWJlbCsiLS0tLS0iKSxMLmpvaW4oIlxuIil9fSw3MjM0NChmZSxqLGgpeyFmdW5jdGlvbih5LGMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBzKFgsZil7aWYoIVgpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKGZ8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQShYLGYpe1guc3VwZXJfPWY7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPWYucHJvdG90eXBlLFgucHJvdG90eXBlPW5ldyBiLFgucHJvdG90eXBlLmNvbnN0cnVjdG9yPVh9ZnVuY3Rpb24gdihYLGYsYil7aWYodi5p''@;'; put 'put ''c0JOKFgpKXJldHVybiBYO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1YJiYoKCJsZSI9PT1mfHwiYmUiPT09ZikmJihiPWYsZj0xMCksdGhpcy5faW5pdChYfHwwLGZ8fDEwLGJ8fCJiZSIpKX12YXIgQzsib2JqZWN0''@;'; put 'put ''Ij09dHlwZW9mIHk/eS5leHBvcnRzPXY6Yy5CTj12LHYuQk49dix2LndvcmRTaXplPTI2O3RyeXtDPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpoKDc4OTgyKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIHcoWCxmKXt2YXIgYj1YLmNo''@;'; put 'put ''YXJDb2RlQXQoZik7cmV0dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZiPD0xMDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIFMoWCxmLGIpe3ZhciBrPXcoWCxiKTtyZXR1cm4gYi0xPj1mJiYoa3w9dyhYLGItMSk8PDQpLGt9ZnVuY3Rpb24gTChYLGYsYixrKXtmb3IodmFyIE09MCxCPU1h''@;'; put 'put ''dGgubWluKFgubGVuZ3RoLGIpLEs9ZjtLPEI7SysrKXt2YXIgRz1YLmNoYXJDb2RlQXQoSyktNDg7TSo9ayxNKz1HPj00OT9HLTQ5KzEwOkc+PTE3P0ctMTcrMTA6R31yZXR1cm4gTX12LmlzQk49ZnVuY3Rpb24oZil7cmV0dXJuIGYgaW5zdGFuY2VvZiB2fHxudWxsIT09ZiYmIm9iamVjdCI9''@;'; put 'put ''PXR5cGVvZiBmJiZmLmNvbnN0cnVjdG9yLndvcmRTaXplPT09di53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShmLndvcmRzKX0sdi5tYXg9ZnVuY3Rpb24oZixiKXtyZXR1cm4gZi5jbXAoYik+MD9mOmJ9LHYubWluPWZ1bmN0aW9uKGYsYil7cmV0dXJuIGYuY21wKGIpPDA/ZjpifSx2LnByb3Rv''@;'; put 'put ''dHlwZS5faW5pdD1mdW5jdGlvbihmLGIsayl7aWYoIm51bWJlciI9PXR5cGVvZiBmKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGYsYixrKTtpZigib2JqZWN0Ij09dHlwZW9mIGYpcmV0dXJuIHRoaXMuX2luaXRBcnJheShmLGIsayk7ImhleCI9PT1iJiYoYj0xNikscyhiPT09KDB8YikmJmI+''@;'; put 'put ''PTImJmI8PTM2KTt2YXIgTT0wOyItIj09PShmPWYudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoTSsrLHRoaXMubmVnYXRpdmU9MSksTTxmLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChmLE0sayk6KHRoaXMuX3BhcnNlQmFzZShmLGIsTSksImxlIj09PWsmJnRo''@;'; put 'put ''aXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLGspKSl9LHYucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGYsYixrKXtmPDAmJih0aGlzLm5lZ2F0aXZlPTEsZj0tZiksZjw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZl0sdGhpcy5sZW5ndGg9MSk6Zjw0NTAzNTk5''@;'; put 'put ''NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZmLGYvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihzKGY8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZixmLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1rJiZ0''@;'; put 'put ''aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYixrKX0sdi5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihmLGIsayl7aWYocygibnVtYmVyIj09dHlwZW9mIGYubGVuZ3RoKSxmLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMu''@;'; put 'put ''bGVuZ3RoPU1hdGguY2VpbChmLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBNPTA7TTx0aGlzLmxlbmd0aDtNKyspdGhpcy53b3Jkc1tNXT0wO3ZhciBCLEssRz0wO2lmKCJiZSI9PT1rKWZvcihNPWYubGVuZ3RoLTEsQj0wO00+PTA7TS09Myl0''@;'; put 'put ''aGlzLndvcmRzW0JdfD0oSz1mW01dfGZbTS0xXTw8OHxmW00tMl08PDE2KTw8RyY2NzEwODg2Myx0aGlzLndvcmRzW0IrMV09Sz4+PjI2LUcmNjcxMDg4NjMsKEcrPTI0KT49MjYmJihHLT0yNixCKyspO2Vsc2UgaWYoImxlIj09PWspZm9yKE09MCxCPTA7TTxmLmxlbmd0aDtNKz0zKXRoaXMu''@;'; put 'put ''d29yZHNbQl18PShLPWZbTV18ZltNKzFdPDw4fGZbTSsyXTw8MTYpPDxHJjY3MTA4ODYzLHRoaXMud29yZHNbQisxXT1LPj4+MjYtRyY2NzEwODg2MywoRys9MjQpPj0yNiYmKEctPTI2LEIrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGYs''@;'; put 'put ''YixrKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGYubGVuZ3RoLWIpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIE09MDtNPHRoaXMubGVuZ3RoO00rKyl0aGlzLndvcmRzW01dPTA7dmFyIEcsQj0wLEs9MDtpZigiYmUiPT09aylmb3IoTT1mLmxlbmd0aC0x''@;'; put 'put ''O00+PWI7TS09MilHPVMoZixiLE0pPDxCLHRoaXMud29yZHNbS118PTY3MTA4ODYzJkcsQj49MTg/KEItPTE4LHRoaXMud29yZHNbSys9MV18PUc+Pj4yNik6Qis9ODtlbHNlIGZvcihNPShmLmxlbmd0aC1iKSUyPT0wP2IrMTpiO008Zi5sZW5ndGg7TSs9MilHPVMoZixiLE0pPDxCLHRoaXMu''@;'; put 'put ''d29yZHNbS118PTY3MTA4ODYzJkcsQj49MTg/KEItPTE4LHRoaXMud29yZHNbSys9MV18PUc+Pj4yNik6Qis9ODt0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZixiLGspe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBNPTAsQj0xO0I8''@;'; put 'put ''PTY3MTA4ODYzO0IqPWIpTSsrO00tLSxCPUIvYnwwO2Zvcih2YXIgSz1mLmxlbmd0aC1rLEc9SyVNLEQ9TWF0aC5taW4oSyxLLUcpK2sscD0wLEk9aztJPEQ7SSs9TSlwPUwoZixJLEkrTSxiKSx0aGlzLmltdWxuKEIpLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1w''@;'; put 'put ''OnRoaXMuX2lhZGRuKHApO2lmKDAhPT1HKXt2YXIgdWU9MTtmb3IocD1MKGYsSSxmLmxlbmd0aCxiKSxJPTA7STxHO0krKyl1ZSo9Yjt0aGlzLmltdWxuKHVlKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRkbihwKX10aGlzLnN0cmlwKCl9LHYu''@;'; put 'put ''cHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZil7Zi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKWYud29yZHNbYl09dGhpcy53b3Jkc1tiXTtmLmxlbmd0aD10aGlzLmxlbmd0aCxmLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZi5yZWQ9''@;'; put 'put ''dGhpcy5yZWR9LHYucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGY9bmV3IHYobnVsbCk7cmV0dXJuIHRoaXMuY29weShmKSxmfSx2LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGYpe2Zvcig7dGhpcy5sZW5ndGg8ZjspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVy''@;'; put 'put ''biB0aGlzfSx2LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHYucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx2LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBSPVsiIiwiMCIs''@;'; put 'put ''IjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLHg9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sVT1bMCwwLDMzNTU0NDMy''@;'; put 'put ''LDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUz''@;'; put 'put ''NjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBWKFgsZixiKXtiLm5lZ2F0aXZlPWYubmVnYXRpdmVe''@;'; put 'put ''WC5uZWdhdGl2ZTt2YXIgaz1YLmxlbmd0aCtmLmxlbmd0aHwwO2IubGVuZ3RoPWssaz1rLTF8MDt2YXIgTT0wfFgud29yZHNbMF0sQj0wfGYud29yZHNbMF0sSz1NKkIsRD1LLzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZLO2Zvcih2YXIgcD0xO3A8aztwKyspe2Zvcih2YXIgST1E''@;'; put 'put ''Pj4+MjYsdWU9NjcxMDg4NjMmRCxuZT1NYXRoLm1pbihwLGYubGVuZ3RoLTEpLF9lPU1hdGgubWF4KDAscC1YLmxlbmd0aCsxKTtfZTw9bmU7X2UrKylJKz0oSz0oTT0wfFgud29yZHNbcC1fZXwwXSkqKEI9MHxmLndvcmRzW19lXSkrdWUpLzY3MTA4ODY0fDAsdWU9NjcxMDg4NjMmSztiLndv''@;'; put 'put ''cmRzW3BdPTB8dWUsRD0wfEl9cmV0dXJuIDAhPT1EP2Iud29yZHNbcF09MHxEOmIubGVuZ3RoLS0sYi5zdHJpcCgpfXYucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGYsYil7dmFyIGs7aWYoYj0wfGJ8fDEsMTY9PT0oZj1mfHwxMCl8fCJoZXgiPT09Zil7az0iIjtmb3IodmFyIE09MCxC''@;'; put 'put ''PTAsSz0wO0s8dGhpcy5sZW5ndGg7SysrKXt2YXIgRz10aGlzLndvcmRzW0tdLEQ9KDE2Nzc3MjE1JihHPDxNfEIpKS50b1N0cmluZygxNik7Qj1HPj4+MjQtTSYxNjc3NzIxNSwoTSs9Mik+PTI2JiYoTS09MjYsSy0tKSxrPTAhPT1CfHxLIT09dGhpcy5sZW5ndGgtMT9SWzYtRC5sZW5ndGhd''@;'; put 'put ''K0QrazpEK2t9Zm9yKDAhPT1CJiYoaz1CLnRvU3RyaW5nKDE2KStrKTtrLmxlbmd0aCViIT09MDspaz0iMCIraztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihrPSItIitrKSxrfWlmKGY9PT0oMHxmKSYmZj49MiYmZjw9MzYpe3ZhciBwPXhbZl0sST1VW2ZdO2s9IiI7dmFyIHVlPXRoaXMu''@;'; put 'put ''Y2xvbmUoKTtmb3IodWUubmVnYXRpdmU9MDshdWUuaXNaZXJvKCk7KXt2YXIgbmU9dWUubW9kbihJKS50b1N0cmluZyhmKTtrPSh1ZT11ZS5pZGl2bihJKSkuaXNaZXJvKCk/bmUrazpSW3AtbmUubGVuZ3RoXStuZStrfWZvcih0aGlzLmlzWmVybygpJiYoaz0iMCIrayk7ay5sZW5ndGglYiE9''@;'; put 'put ''PTA7KWs9IjAiK2s7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoaz0iLSIrayksa31zKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHYucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGY9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3Ro''@;'; put 'put ''P2YrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9mKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmcyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBi''@;'; put 'put ''aXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWY6Zn0sdi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx2LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihmLGIpe3JldHVybiBzKHR5cGVvZiBDPCJ1IiksdGhpcy50b0FycmF5TGlrZShDLGYs''@;'; put 'put ''Yil9LHYucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZixiKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxmLGIpfSx2LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihmLGIsayl7dmFyIE09dGhpcy5ieXRlTGVuZ3RoKCksQj1rfHxNYXRoLm1heCgxLE0pO3MoTTw9Qiwi''@;'; put 'put ''Ynl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLHMoQj4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEQscCxLPSJsZSI9PT1iLEc9bmV3IGYoQiksST10aGlzLmNsb25lKCk7aWYoSyl7Zm9yKHA9MDshSS5pc1plcm8oKTtwKysp''@;'; put 'put ''RD1JLmFuZGxuKDI1NSksSS5pdXNocm4oOCksR1twXT1EO2Zvcig7cDxCO3ArKylHW3BdPTB9ZWxzZXtmb3IocD0wO3A8Qi1NO3ArKylHW3BdPTA7Zm9yKHA9MDshSS5pc1plcm8oKTtwKyspRD1JLmFuZGxuKDI1NSksSS5pdXNocm4oOCksR1tCLXAtMV09RH1yZXR1cm4gR30sdi5wcm90b3R5''@;'; put 'put ''cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGYpe3JldHVybiAzMi1NYXRoLmNsejMyKGYpfTpmdW5jdGlvbihmKXt2YXIgYj1mLGs9MDtyZXR1cm4gYj49NDA5NiYmKGsrPTEzLGI+Pj49MTMpLGI+PTY0JiYoays9NyxiPj4+PTcpLGI+PTgmJihrKz00LGI+Pj49NCksYj49MiYm''@;'; put 'put ''KGsrPTIsYj4+Pj0yKSxrK2J9LHYucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihmKXtpZigwPT09ZilyZXR1cm4gMjY7dmFyIGI9ZixrPTA7cmV0dXJuISg4MTkxJmIpJiYoays9MTMsYj4+Pj0xMyksISgxMjcmYikmJihrKz03LGI+Pj49NyksISgxNSZiKSYmKGsrPTQsYj4+Pj00KSwh''@;'; put 'put ''KDMmYikmJihrKz0yLGI+Pj49MiksISgxJmIpJiZrKyssa30sdi5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0sdi5wcm90b3R5cGUuemVyb0Jp''@;'; put 'put ''dHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZj0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIGs9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYoZis9aywyNiE9PWspYnJlYWt9cmV0dXJuIGZ9LHYucHJvdG90eXBlLmJ5dGVMZW5ndGg9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHYucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihmKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihmKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHYucHJvdG90eXBlLmZyb21U''@;'; put 'put ''d29zPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLnRlc3RuKGYtMSk/dGhpcy5ub3RuKGYpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHYucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx2LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdi5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdi5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihmKXtmb3IoO3RoaXMubGVuZ3RoPGYubGVuZ3RoOyl0aGlzLndv''@;'; put 'put ''cmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxmLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfGYud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGYpe3JldHVybiBzKDA9PT0odGhpcy5uZWdhdGl2ZXxm''@;'; put 'put ''Lm5lZ2F0aXZlKSksdGhpcy5pdW9yKGYpfSx2LnByb3RvdHlwZS5vcj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihmKTpmLmNsb25lKCkuaW9yKHRoaXMpfSx2LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMubGVu''@;'; put 'put ''Z3RoPmYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGYpOmYuY2xvbmUoKS5pdW9yKHRoaXMpfSx2LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihmKXt2YXIgYjtiPXRoaXMubGVuZ3RoPmYubGVuZ3RoP2Y6dGhpcztmb3IodmFyIGs9MDtrPGIubGVuZ3RoO2srKyl0aGlzLndvcmRzW2tdPXRo''@;'; put 'put ''aXMud29yZHNba10mZi53b3Jkc1trXTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGYpe3JldHVybiBzKDA9PT0odGhpcy5uZWdhdGl2ZXxmLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChmKX0sdi5wcm90b3R5cGUuYW5k''@;'; put 'put ''PWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmxlbmd0aD5mLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChmKTpmLmNsb25lKCkuaWFuZCh0aGlzKX0sdi5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGYpOmYu''@;'; put 'put ''Y2xvbmUoKS5pdWFuZCh0aGlzKX0sdi5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZil7dmFyIGIsazt0aGlzLmxlbmd0aD5mLmxlbmd0aD8oYj10aGlzLGs9Zik6KGI9ZixrPXRoaXMpO2Zvcih2YXIgTT0wO008ay5sZW5ndGg7TSsrKXRoaXMud29yZHNbTV09Yi53b3Jkc1tNXV5rLndvcmRz''@;'; put 'put ''W01dO2lmKHRoaXMhPT1iKWZvcig7TTxiLmxlbmd0aDtNKyspdGhpcy53b3Jkc1tNXT1iLndvcmRzW01dO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZil7cmV0dXJuIHMoMD09PSh0aGlzLm5lZ2F0aXZlfGYubmVn''@;'; put 'put ''YXRpdmUpKSx0aGlzLml1eG9yKGYpfSx2LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMubGVuZ3RoPmYubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGYpOmYuY2xvbmUoKS5peG9yKHRoaXMpfSx2LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmxl''@;'; put 'put ''bmd0aD5mLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZik6Zi5jbG9uZSgpLml1eG9yKHRoaXMpfSx2LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihmKXtzKCJudW1iZXIiPT10eXBlb2YgZiYmZj49MCk7dmFyIGI9MHxNYXRoLmNlaWwoZi8yNiksaz1mJTI2O3RoaXMuX2V4cGFuZChiKSxr''@;'; put 'put ''PjAmJmItLTtmb3IodmFyIE09MDtNPGI7TSsrKXRoaXMud29yZHNbTV09NjcxMDg4NjMmfnRoaXMud29yZHNbTV07Zm9yKGs+MCYmKHRoaXMud29yZHNbTV09fnRoaXMud29yZHNbTV0mNjcxMDg4NjM+PjI2LWssTSsrKTtNPHRoaXMubGVuZ3RoO00rKyl0aGlzLndvcmRzW01dPTA7cmV0dXJu''@;'; put 'put ''IHRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUubm90bj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGYpfSx2LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGYsYil7cygibnVtYmVyIj09dHlwZW9mIGYmJmY+PTApO3ZhciBrPWYvMjZ8MCxNPWYlMjY7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2V4cGFuZChrKzEpLHRoaXMud29yZHNba109Yj90aGlzLndvcmRzW2tdfDE8PE06dGhpcy53b3Jkc1trXSZ+KDE8PE0pLHRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihmKXt2YXIgYixrLE07aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1mLm5lZ2F0aXZlKXJldHVy''@;'; put 'put ''biB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIoZiksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zi5uZWdhdGl2ZSlyZXR1cm4gZi5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKGYpLGYubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigp''@;'; put 'put ''O3RoaXMubGVuZ3RoPmYubGVuZ3RoPyhrPXRoaXMsTT1mKTooaz1mLE09dGhpcyk7Zm9yKHZhciBCPTAsSz0wO0s8TS5sZW5ndGg7SysrKXRoaXMud29yZHNbS109NjcxMDg4NjMmKGI9KDB8ay53b3Jkc1tLXSkrKDB8TS53b3Jkc1tLXSkrQiksQj1iPj4+MjY7Zm9yKDswIT09QiYmSzxrLmxl''@;'; put 'put ''bmd0aDtLKyspdGhpcy53b3Jkc1tLXT02NzEwODg2MyYoYj0oMHxrLndvcmRzW0tdKStCKSxCPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD1rLmxlbmd0aCwwIT09Qil0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1CLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihrIT09dGhpcylmb3IoO0s8ay5sZW5ndGg7''@;'; put 'put ''SysrKXRoaXMud29yZHNbS109ay53b3Jkc1tLXTtyZXR1cm4gdGhpc30sdi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGYpe3ZhciBiO3JldHVybiAwIT09Zi5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGYubmVnYXRpdmU9MCxiPXRoaXMuc3ViKGYpLGYubmVnYXRpdmVePTEsYik6MD09''@;'; put 'put ''PWYubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1mLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+Zi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZik6Zi5jbG9uZSgpLmlhZGQodGhpcyl9LHYucHJvdG90eXBlLmlzdWI9ZnVu''@;'; put 'put ''Y3Rpb24oZil7aWYoMCE9PWYubmVnYXRpdmUpe2YubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQoZik7cmV0dXJuIGYubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGYpLHRoaXMubmVnYXRpdmU9''@;'; put 'put ''MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBNLEIsaz10aGlzLmNtcChmKTtpZigwPT09aylyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7az4wPyhNPXRoaXMsQj1mKTooTT1mLEI9dGhpcyk7Zm9yKHZhciBLPTAsRz0wO0c8Qi5sZW5ndGg7''@;'; put 'put ''RysrKUs9KGI9KDB8TS53b3Jkc1tHXSktKDB8Qi53b3Jkc1tHXSkrSyk+PjI2LHRoaXMud29yZHNbR109NjcxMDg4NjMmYjtmb3IoOzAhPT1LJiZHPE0ubGVuZ3RoO0crKylLPShiPSgwfE0ud29yZHNbR10pK0spPj4yNix0aGlzLndvcmRzW0ddPTY3MTA4ODYzJmI7aWYoMD09PUsmJkc8TS5s''@;'; put 'put ''ZW5ndGgmJk0hPT10aGlzKWZvcig7RzxNLmxlbmd0aDtHKyspdGhpcy53b3Jkc1tHXT1NLndvcmRzW0ddO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxHKSxNIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5zdWI9ZnVu''@;'; put 'put ''Y3Rpb24oZil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGYpfTt2YXIgTj1mdW5jdGlvbihmLGIsayl7dmFyIEQscCxJLE09Zi53b3JkcyxCPWIud29yZHMsSz1rLndvcmRzLEc9MCx1ZT0wfE1bMF0sbmU9ODE5MSZ1ZSxfZT11ZT4+PjEzLFBlPTB8TVsxXSxvdD04MTkxJlBlLGx0PVBlPj4+''@;'; put 'put ''MTMsZHQ9MHxNWzJdLFJlPTgxOTEmZHQsYWU9ZHQ+Pj4xMyx4ZT0wfE1bM10samU9ODE5MSZ4ZSxBZT14ZT4+PjEzLERlPTB8TVs0XSxGZT04MTkxJkRlLGdlPURlPj4+MTMsY2U9MHxNWzVdLGhlPTgxOTEmY2Usd2U9Y2U+Pj4xMyxKZT0wfE1bNl0sdHQ9ODE5MSZKZSxLZT1KZT4+PjEzLCR0''@;'; put 'put ''PTB8TVs3XSxSdD04MTkxJiR0LEx0PSR0Pj4+MTMsR3Q9MHxNWzhdLGd0PTgxOTEmR3QsWHQ9R3Q+Pj4xMyxMcj0wfE1bOV0sbG49ODE5MSZMcixPbj1Mcj4+PjEzLFFyPTB8QlswXSx0cj04MTkxJlFyLEhuPVFyPj4+MTMsT289MHxCWzFdLHVyPTgxOTEmT28sWm49T28+Pj4xMyxTbj0wfEJb''@;'; put 'put ''Ml0seHI9ODE5MSZTbixUdD1Tbj4+PjEzLEFyPTB8QlszXSxfbj04MTkxJkFyLFp0PUFyPj4+MTMsTm49MHxCWzRdLHB0PTgxOTEmTm4scG49Tm4+Pj4xMyxNaT0wfEJbNV0sR2U9ODE5MSZNaSxVdD1NaT4+PjEzLHZyPTB8Qls2XSx4dD04MTkxJnZyLEJ0PXZyPj4+MTMsem49MHxCWzddLEdu''@;'; put 'put ''PTgxOTEmem4seW49em4+Pj4xMyx2aT0wfEJbOF0scnI9ODE5MSZ2aSxocj12aT4+PjEzLHBvPTB8Qls5XSx2bj04MTkxJnBvLEJuPXBvPj4+MTM7ay5uZWdhdGl2ZT1mLm5lZ2F0aXZlXmIubmVnYXRpdmUsay5sZW5ndGg9MTk7dmFyIGphPShHKyhEPU1hdGguaW11bChuZSx0cikpfDApKygo''@;'; put 'put ''ODE5MSYocD0ocD1NYXRoLmltdWwobmUsSG4pKStNYXRoLmltdWwoX2UsdHIpfDApKTw8MTMpfDA7Rz0oKEk9TWF0aC5pbXVsKF9lLEhuKSkrKHA+Pj4xMyl8MCkrKGphPj4+MjYpfDAsamEmPTY3MTA4ODYzLEQ9TWF0aC5pbXVsKG90LHRyKSxwPShwPU1hdGguaW11bChvdCxIbikpK01hdGgu''@;'; put 'put ''aW11bChsdCx0cil8MCxJPU1hdGguaW11bChsdCxIbik7dmFyIGpvPShHKyhEPUQrTWF0aC5pbXVsKG5lLHVyKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsWm4pfDApK01hdGguaW11bChfZSx1cil8MCkpPDwxMyl8MDtHPSgoST1JK01hdGguaW11bChfZSxabil8MCkrKHA+''@;'; put 'put ''Pj4xMyl8MCkrKGpvPj4+MjYpfDAsam8mPTY3MTA4ODYzLEQ9TWF0aC5pbXVsKFJlLHRyKSxwPShwPU1hdGguaW11bChSZSxIbikpK01hdGguaW11bChhZSx0cil8MCxJPU1hdGguaW11bChhZSxIbiksRD1EK01hdGguaW11bChvdCx1cil8MCxwPShwPXArTWF0aC5pbXVsKG90LFpuKXwwKStN''@;'; put 'put ''YXRoLmltdWwobHQsdXIpfDAsST1JK01hdGguaW11bChsdCxabil8MDt2YXIgWHI9KEcrKEQ9RCtNYXRoLmltdWwobmUseHIpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxUdCl8MCkrTWF0aC5pbXVsKF9lLHhyKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLFR0''@;'; put 'put ''KXwwKSsocD4+PjEzKXwwKSsoWHI+Pj4yNil8MCxYciY9NjcxMDg4NjMsRD1NYXRoLmltdWwoamUsdHIpLHA9KHA9TWF0aC5pbXVsKGplLEhuKSkrTWF0aC5pbXVsKEFlLHRyKXwwLEk9TWF0aC5pbXVsKEFlLEhuKSxEPUQrTWF0aC5pbXVsKFJlLHVyKXwwLHA9KHA9cCtNYXRoLmltdWwoUmUs''@;'; put 'put ''Wm4pfDApK01hdGguaW11bChhZSx1cil8MCxJPUkrTWF0aC5pbXVsKGFlLFpuKXwwLEQ9RCtNYXRoLmltdWwob3QseHIpfDAscD0ocD1wK01hdGguaW11bChvdCxUdCl8MCkrTWF0aC5pbXVsKGx0LHhyKXwwLEk9SStNYXRoLmltdWwobHQsVHQpfDA7dmFyIGVhPShHKyhEPUQrTWF0aC5pbXVs''@;'; put 'put ''KG5lLF9uKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsWnQpfDApK01hdGguaW11bChfZSxfbil8MCkpPDwxMyl8MDtHPSgoST1JK01hdGguaW11bChfZSxadCl8MCkrKHA+Pj4xMyl8MCkrKGVhPj4+MjYpfDAsZWEmPTY3MTA4ODYzLEQ9TWF0aC5pbXVsKEZlLHRyKSxwPShw''@;'; put 'put ''PU1hdGguaW11bChGZSxIbikpK01hdGguaW11bChnZSx0cil8MCxJPU1hdGguaW11bChnZSxIbiksRD1EK01hdGguaW11bChqZSx1cil8MCxwPShwPXArTWF0aC5pbXVsKGplLFpuKXwwKStNYXRoLmltdWwoQWUsdXIpfDAsST1JK01hdGguaW11bChBZSxabil8MCxEPUQrTWF0aC5pbXVsKFJl''@;'; put 'put ''LHhyKXwwLHA9KHA9cCtNYXRoLmltdWwoUmUsVHQpfDApK01hdGguaW11bChhZSx4cil8MCxJPUkrTWF0aC5pbXVsKGFlLFR0KXwwLEQ9RCtNYXRoLmltdWwob3QsX24pfDAscD0ocD1wK01hdGguaW11bChvdCxadCl8MCkrTWF0aC5pbXVsKGx0LF9uKXwwLEk9SStNYXRoLmltdWwobHQsWnQp''@;'; put 'put ''fDA7dmFyIHJhPShHKyhEPUQrTWF0aC5pbXVsKG5lLHB0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUscG4pfDApK01hdGguaW11bChfZSxwdCl8MCkpPDwxMyl8MDtHPSgoST1JK01hdGguaW11bChfZSxwbil8MCkrKHA+Pj4xMyl8MCkrKHJhPj4+MjYpfDAscmEmPTY3MTA4''@;'; put 'put ''ODYzLEQ9TWF0aC5pbXVsKGhlLHRyKSxwPShwPU1hdGguaW11bChoZSxIbikpK01hdGguaW11bCh3ZSx0cil8MCxJPU1hdGguaW11bCh3ZSxIbiksRD1EK01hdGguaW11bChGZSx1cil8MCxwPShwPXArTWF0aC5pbXVsKEZlLFpuKXwwKStNYXRoLmltdWwoZ2UsdXIpfDAsST1JK01hdGguaW11''@;'; put 'put ''bChnZSxabil8MCxEPUQrTWF0aC5pbXVsKGplLHhyKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsVHQpfDApK01hdGguaW11bChBZSx4cil8MCxJPUkrTWF0aC5pbXVsKEFlLFR0KXwwLEQ9RCtNYXRoLmltdWwoUmUsX24pfDAscD0ocD1wK01hdGguaW11bChSZSxadCl8MCkrTWF0aC5pbXVsKGFl''@;'; put 'put ''LF9uKXwwLEk9SStNYXRoLmltdWwoYWUsWnQpfDAsRD1EK01hdGguaW11bChvdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKG90LHBuKXwwKStNYXRoLmltdWwobHQscHQpfDAsST1JK01hdGguaW11bChsdCxwbil8MDt2YXIgY2E9KEcrKEQ9RCtNYXRoLmltdWwobmUsR2UpfDApfDApKygoODE5''@;'; put 'put ''MSYocD0ocD1wK01hdGguaW11bChuZSxVdCl8MCkrTWF0aC5pbXVsKF9lLEdlKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLFV0KXwwKSsocD4+PjEzKXwwKSsoY2E+Pj4yNil8MCxjYSY9NjcxMDg4NjMsRD1NYXRoLmltdWwodHQsdHIpLHA9KHA9TWF0aC5pbXVsKHR0LEhuKSkr''@;'; put 'put ''TWF0aC5pbXVsKEtlLHRyKXwwLEk9TWF0aC5pbXVsKEtlLEhuKSxEPUQrTWF0aC5pbXVsKGhlLHVyKXwwLHA9KHA9cCtNYXRoLmltdWwoaGUsWm4pfDApK01hdGguaW11bCh3ZSx1cil8MCxJPUkrTWF0aC5pbXVsKHdlLFpuKXwwLEQ9RCtNYXRoLmltdWwoRmUseHIpfDAscD0ocD1wK01hdGgu''@;'; put 'put ''aW11bChGZSxUdCl8MCkrTWF0aC5pbXVsKGdlLHhyKXwwLEk9SStNYXRoLmltdWwoZ2UsVHQpfDAsRD1EK01hdGguaW11bChqZSxfbil8MCxwPShwPXArTWF0aC5pbXVsKGplLFp0KXwwKStNYXRoLmltdWwoQWUsX24pfDAsST1JK01hdGguaW11bChBZSxadCl8MCxEPUQrTWF0aC5pbXVsKFJl''@;'; put 'put ''LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoUmUscG4pfDApK01hdGguaW11bChhZSxwdCl8MCxJPUkrTWF0aC5pbXVsKGFlLHBuKXwwLEQ9RCtNYXRoLmltdWwob3QsR2UpfDAscD0ocD1wK01hdGguaW11bChvdCxVdCl8MCkrTWF0aC5pbXVsKGx0LEdlKXwwLEk9SStNYXRoLmltdWwobHQsVXQp''@;'; put 'put ''fDA7dmFyIENpPShHKyhEPUQrTWF0aC5pbXVsKG5lLHh0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsQnQpfDApK01hdGguaW11bChfZSx4dCl8MCkpPDwxMyl8MDtHPSgoST1JK01hdGguaW11bChfZSxCdCl8MCkrKHA+Pj4xMyl8MCkrKENpPj4+MjYpfDAsQ2kmPTY3MTA4''@;'; put 'put ''ODYzLEQ9TWF0aC5pbXVsKFJ0LHRyKSxwPShwPU1hdGguaW11bChSdCxIbikpK01hdGguaW11bChMdCx0cil8MCxJPU1hdGguaW11bChMdCxIbiksRD1EK01hdGguaW11bCh0dCx1cil8MCxwPShwPXArTWF0aC5pbXVsKHR0LFpuKXwwKStNYXRoLmltdWwoS2UsdXIpfDAsST1JK01hdGguaW11''@;'; put 'put ''bChLZSxabil8MCxEPUQrTWF0aC5pbXVsKGhlLHhyKXwwLHA9KHA9cCtNYXRoLmltdWwoaGUsVHQpfDApK01hdGguaW11bCh3ZSx4cil8MCxJPUkrTWF0aC5pbXVsKHdlLFR0KXwwLEQ9RCtNYXRoLmltdWwoRmUsX24pfDAscD0ocD1wK01hdGguaW11bChGZSxadCl8MCkrTWF0aC5pbXVsKGdl''@;'; put 'put ''LF9uKXwwLEk9SStNYXRoLmltdWwoZ2UsWnQpfDAsRD1EK01hdGguaW11bChqZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLHBuKXwwKStNYXRoLmltdWwoQWUscHQpfDAsST1JK01hdGguaW11bChBZSxwbil8MCxEPUQrTWF0aC5pbXVsKFJlLEdlKXwwLHA9KHA9cCtNYXRoLmltdWwoUmUs''@;'; put 'put ''VXQpfDApK01hdGguaW11bChhZSxHZSl8MCxJPUkrTWF0aC5pbXVsKGFlLFV0KXwwLEQ9RCtNYXRoLmltdWwob3QseHQpfDAscD0ocD1wK01hdGguaW11bChvdCxCdCl8MCkrTWF0aC5pbXVsKGx0LHh0KXwwLEk9SStNYXRoLmltdWwobHQsQnQpfDA7dmFyIGhvPShHKyhEPUQrTWF0aC5pbXVs''@;'; put 'put ''KG5lLEduKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUseW4pfDApK01hdGguaW11bChfZSxHbil8MCkpPDwxMyl8MDtHPSgoST1JK01hdGguaW11bChfZSx5bil8MCkrKHA+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzLEQ9TWF0aC5pbXVsKGd0LHRyKSxwPShw''@;'; put 'put ''PU1hdGguaW11bChndCxIbikpK01hdGguaW11bChYdCx0cil8MCxJPU1hdGguaW11bChYdCxIbiksRD1EK01hdGguaW11bChSdCx1cil8MCxwPShwPXArTWF0aC5pbXVsKFJ0LFpuKXwwKStNYXRoLmltdWwoTHQsdXIpfDAsST1JK01hdGguaW11bChMdCxabil8MCxEPUQrTWF0aC5pbXVsKHR0''@;'; put 'put ''LHhyKXwwLHA9KHA9cCtNYXRoLmltdWwodHQsVHQpfDApK01hdGguaW11bChLZSx4cil8MCxJPUkrTWF0aC5pbXVsKEtlLFR0KXwwLEQ9RCtNYXRoLmltdWwoaGUsX24pfDAscD0ocD1wK01hdGguaW11bChoZSxadCl8MCkrTWF0aC5pbXVsKHdlLF9uKXwwLEk9SStNYXRoLmltdWwod2UsWnQp''@;'; put 'put ''fDAsRD1EK01hdGguaW11bChGZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKEZlLHBuKXwwKStNYXRoLmltdWwoZ2UscHQpfDAsST1JK01hdGguaW11bChnZSxwbil8MCxEPUQrTWF0aC5pbXVsKGplLEdlKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsVXQpfDApK01hdGguaW11bChBZSxHZSl8MCxJ''@;'; put 'put ''PUkrTWF0aC5pbXVsKEFlLFV0KXwwLEQ9RCtNYXRoLmltdWwoUmUseHQpfDAscD0ocD1wK01hdGguaW11bChSZSxCdCl8MCkrTWF0aC5pbXVsKGFlLHh0KXwwLEk9SStNYXRoLmltdWwoYWUsQnQpfDAsRD1EK01hdGguaW11bChvdCxHbil8MCxwPShwPXArTWF0aC5pbXVsKG90LHluKXwwKStN''@;'; put 'put ''YXRoLmltdWwobHQsR24pfDAsST1JK01hdGguaW11bChsdCx5bil8MDt2YXIgTWE9KEcrKEQ9RCtNYXRoLmltdWwobmUscnIpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxocil8MCkrTWF0aC5pbXVsKF9lLHJyKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLGhy''@;'; put 'put ''KXwwKSsocD4+PjEzKXwwKSsoTWE+Pj4yNil8MCxNYSY9NjcxMDg4NjMsRD1NYXRoLmltdWwobG4sdHIpLHA9KHA9TWF0aC5pbXVsKGxuLEhuKSkrTWF0aC5pbXVsKE9uLHRyKXwwLEk9TWF0aC5pbXVsKE9uLEhuKSxEPUQrTWF0aC5pbXVsKGd0LHVyKXwwLHA9KHA9cCtNYXRoLmltdWwoZ3Qs''@;'; put 'put ''Wm4pfDApK01hdGguaW11bChYdCx1cil8MCxJPUkrTWF0aC5pbXVsKFh0LFpuKXwwLEQ9RCtNYXRoLmltdWwoUnQseHIpfDAscD0ocD1wK01hdGguaW11bChSdCxUdCl8MCkrTWF0aC5pbXVsKEx0LHhyKXwwLEk9SStNYXRoLmltdWwoTHQsVHQpfDAsRD1EK01hdGguaW11bCh0dCxfbil8MCxw''@;'; put 'put ''PShwPXArTWF0aC5pbXVsKHR0LFp0KXwwKStNYXRoLmltdWwoS2UsX24pfDAsST1JK01hdGguaW11bChLZSxadCl8MCxEPUQrTWF0aC5pbXVsKGhlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoaGUscG4pfDApK01hdGguaW11bCh3ZSxwdCl8MCxJPUkrTWF0aC5pbXVsKHdlLHBuKXwwLEQ9RCtN''@;'; put 'put ''YXRoLmltdWwoRmUsR2UpfDAscD0ocD1wK01hdGguaW11bChGZSxVdCl8MCkrTWF0aC5pbXVsKGdlLEdlKXwwLEk9SStNYXRoLmltdWwoZ2UsVXQpfDAsRD1EK01hdGguaW11bChqZSx4dCl8MCxwPShwPXArTWF0aC5pbXVsKGplLEJ0KXwwKStNYXRoLmltdWwoQWUseHQpfDAsST1JK01hdGgu''@;'; put 'put ''aW11bChBZSxCdCl8MCxEPUQrTWF0aC5pbXVsKFJlLEduKXwwLHA9KHA9cCtNYXRoLmltdWwoUmUseW4pfDApK01hdGguaW11bChhZSxHbil8MCxJPUkrTWF0aC5pbXVsKGFlLHluKXwwLEQ9RCtNYXRoLmltdWwob3QscnIpfDAscD0ocD1wK01hdGguaW11bChvdCxocil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KGx0LHJyKXwwLEk9SStNYXRoLmltdWwobHQsaHIpfDA7dmFyIGtzPShHKyhEPUQrTWF0aC5pbXVsKG5lLHZuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsQm4pfDApK01hdGguaW11bChfZSx2bil8MCkpPDwxMyl8MDtHPSgoST1JK01hdGguaW11bChfZSxCbil8MCkrKHA+''@;'; put 'put ''Pj4xMyl8MCkrKGtzPj4+MjYpfDAsa3MmPTY3MTA4ODYzLEQ9TWF0aC5pbXVsKGxuLHVyKSxwPShwPU1hdGguaW11bChsbixabikpK01hdGguaW11bChPbix1cil8MCxJPU1hdGguaW11bChPbixabiksRD1EK01hdGguaW11bChndCx4cil8MCxwPShwPXArTWF0aC5pbXVsKGd0LFR0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoWHQseHIpfDAsST1JK01hdGguaW11bChYdCxUdCl8MCxEPUQrTWF0aC5pbXVsKFJ0LF9uKXwwLHA9KHA9cCtNYXRoLmltdWwoUnQsWnQpfDApK01hdGguaW11bChMdCxfbil8MCxJPUkrTWF0aC5pbXVsKEx0LFp0KXwwLEQ9RCtNYXRoLmltdWwodHQscHQpfDAscD0ocD1wK01h''@;'; put 'put ''dGguaW11bCh0dCxwbil8MCkrTWF0aC5pbXVsKEtlLHB0KXwwLEk9SStNYXRoLmltdWwoS2UscG4pfDAsRD1EK01hdGguaW11bChoZSxHZSl8MCxwPShwPXArTWF0aC5pbXVsKGhlLFV0KXwwKStNYXRoLmltdWwod2UsR2UpfDAsST1JK01hdGguaW11bCh3ZSxVdCl8MCxEPUQrTWF0aC5pbXVs''@;'; put 'put ''KEZlLHh0KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsQnQpfDApK01hdGguaW11bChnZSx4dCl8MCxJPUkrTWF0aC5pbXVsKGdlLEJ0KXwwLEQ9RCtNYXRoLmltdWwoamUsR24pfDAscD0ocD1wK01hdGguaW11bChqZSx5bil8MCkrTWF0aC5pbXVsKEFlLEduKXwwLEk9SStNYXRoLmltdWwoQWUs''@;'; put 'put ''eW4pfDAsRD1EK01hdGguaW11bChSZSxycil8MCxwPShwPXArTWF0aC5pbXVsKFJlLGhyKXwwKStNYXRoLmltdWwoYWUscnIpfDAsST1JK01hdGguaW11bChhZSxocil8MDt2YXIgQmk9KEcrKEQ9RCtNYXRoLmltdWwob3Qsdm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChvdCxC''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKGx0LHZuKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKGx0LEJuKXwwKSsocD4+PjEzKXwwKSsoQmk+Pj4yNil8MCxCaSY9NjcxMDg4NjMsRD1NYXRoLmltdWwobG4seHIpLHA9KHA9TWF0aC5pbXVsKGxuLFR0KSkrTWF0aC5pbXVsKE9uLHhyKXwwLEk9TWF0''@;'; put 'put ''aC5pbXVsKE9uLFR0KSxEPUQrTWF0aC5pbXVsKGd0LF9uKXwwLHA9KHA9cCtNYXRoLmltdWwoZ3QsWnQpfDApK01hdGguaW11bChYdCxfbil8MCxJPUkrTWF0aC5pbXVsKFh0LFp0KXwwLEQ9RCtNYXRoLmltdWwoUnQscHQpfDAscD0ocD1wK01hdGguaW11bChSdCxwbil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEx0LHB0KXwwLEk9SStNYXRoLmltdWwoTHQscG4pfDAsRD1EK01hdGguaW11bCh0dCxHZSl8MCxwPShwPXArTWF0aC5pbXVsKHR0LFV0KXwwKStNYXRoLmltdWwoS2UsR2UpfDAsST1JK01hdGguaW11bChLZSxVdCl8MCxEPUQrTWF0aC5pbXVsKGhlLHh0KXwwLHA9KHA9cCtNYXRoLmltdWwo''@;'; put 'put ''aGUsQnQpfDApK01hdGguaW11bCh3ZSx4dCl8MCxJPUkrTWF0aC5pbXVsKHdlLEJ0KXwwLEQ9RCtNYXRoLmltdWwoRmUsR24pfDAscD0ocD1wK01hdGguaW11bChGZSx5bil8MCkrTWF0aC5pbXVsKGdlLEduKXwwLEk9SStNYXRoLmltdWwoZ2UseW4pfDAsRD1EK01hdGguaW11bChqZSxycil8''@;'; put 'put ''MCxwPShwPXArTWF0aC5pbXVsKGplLGhyKXwwKStNYXRoLmltdWwoQWUscnIpfDAsST1JK01hdGguaW11bChBZSxocil8MDt2YXIgdGE9KEcrKEQ9RCtNYXRoLmltdWwoUmUsdm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChSZSxCbil8MCkrTWF0aC5pbXVsKGFlLHZuKXwwKSk8''@;'; put 'put ''PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKGFlLEJuKXwwKSsocD4+PjEzKXwwKSsodGE+Pj4yNil8MCx0YSY9NjcxMDg4NjMsRD1NYXRoLmltdWwobG4sX24pLHA9KHA9TWF0aC5pbXVsKGxuLFp0KSkrTWF0aC5pbXVsKE9uLF9uKXwwLEk9TWF0aC5pbXVsKE9uLFp0KSxEPUQrTWF0aC5pbXVs''@;'; put 'put ''KGd0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoZ3QscG4pfDApK01hdGguaW11bChYdCxwdCl8MCxJPUkrTWF0aC5pbXVsKFh0LHBuKXwwLEQ9RCtNYXRoLmltdWwoUnQsR2UpfDAscD0ocD1wK01hdGguaW11bChSdCxVdCl8MCkrTWF0aC5pbXVsKEx0LEdlKXwwLEk9SStNYXRoLmltdWwoTHQs''@;'; put 'put ''VXQpfDAsRD1EK01hdGguaW11bCh0dCx4dCl8MCxwPShwPXArTWF0aC5pbXVsKHR0LEJ0KXwwKStNYXRoLmltdWwoS2UseHQpfDAsST1JK01hdGguaW11bChLZSxCdCl8MCxEPUQrTWF0aC5pbXVsKGhlLEduKXwwLHA9KHA9cCtNYXRoLmltdWwoaGUseW4pfDApK01hdGguaW11bCh3ZSxHbil8''@;'; put 'put ''MCxJPUkrTWF0aC5pbXVsKHdlLHluKXwwLEQ9RCtNYXRoLmltdWwoRmUscnIpfDAscD0ocD1wK01hdGguaW11bChGZSxocil8MCkrTWF0aC5pbXVsKGdlLHJyKXwwLEk9SStNYXRoLmltdWwoZ2UsaHIpfDA7dmFyIE1yPShHKyhEPUQrTWF0aC5pbXVsKGplLHZuKXwwKXwwKSsoKDgxOTEmKHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwoamUsQm4pfDApK01hdGguaW11bChBZSx2bil8MCkpPDwxMyl8MDtHPSgoST1JK01hdGguaW11bChBZSxCbil8MCkrKHA+Pj4xMyl8MCkrKE1yPj4+MjYpfDAsTXImPTY3MTA4ODYzLEQ9TWF0aC5pbXVsKGxuLHB0KSxwPShwPU1hdGguaW11bChsbixwbikpK01hdGgu''@;'; put 'put ''aW11bChPbixwdCl8MCxJPU1hdGguaW11bChPbixwbiksRD1EK01hdGguaW11bChndCxHZSl8MCxwPShwPXArTWF0aC5pbXVsKGd0LFV0KXwwKStNYXRoLmltdWwoWHQsR2UpfDAsST1JK01hdGguaW11bChYdCxVdCl8MCxEPUQrTWF0aC5pbXVsKFJ0LHh0KXwwLHA9KHA9cCtNYXRoLmltdWwo''@;'; put 'put ''UnQsQnQpfDApK01hdGguaW11bChMdCx4dCl8MCxJPUkrTWF0aC5pbXVsKEx0LEJ0KXwwLEQ9RCtNYXRoLmltdWwodHQsR24pfDAscD0ocD1wK01hdGguaW11bCh0dCx5bil8MCkrTWF0aC5pbXVsKEtlLEduKXwwLEk9SStNYXRoLmltdWwoS2UseW4pfDAsRD1EK01hdGguaW11bChoZSxycil8''@;'; put 'put ''MCxwPShwPXArTWF0aC5pbXVsKGhlLGhyKXwwKStNYXRoLmltdWwod2UscnIpfDAsST1JK01hdGguaW11bCh3ZSxocil8MDt2YXIgRnM9KEcrKEQ9RCtNYXRoLmltdWwoRmUsdm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChGZSxCbil8MCkrTWF0aC5pbXVsKGdlLHZuKXwwKSk8''@;'; put 'put ''PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKGdlLEJuKXwwKSsocD4+PjEzKXwwKSsoRnM+Pj4yNil8MCxGcyY9NjcxMDg4NjMsRD1NYXRoLmltdWwobG4sR2UpLHA9KHA9TWF0aC5pbXVsKGxuLFV0KSkrTWF0aC5pbXVsKE9uLEdlKXwwLEk9TWF0aC5pbXVsKE9uLFV0KSxEPUQrTWF0aC5pbXVs''@;'; put 'put ''KGd0LHh0KXwwLHA9KHA9cCtNYXRoLmltdWwoZ3QsQnQpfDApK01hdGguaW11bChYdCx4dCl8MCxJPUkrTWF0aC5pbXVsKFh0LEJ0KXwwLEQ9RCtNYXRoLmltdWwoUnQsR24pfDAscD0ocD1wK01hdGguaW11bChSdCx5bil8MCkrTWF0aC5pbXVsKEx0LEduKXwwLEk9SStNYXRoLmltdWwoTHQs''@;'; put 'put ''eW4pfDAsRD1EK01hdGguaW11bCh0dCxycil8MCxwPShwPXArTWF0aC5pbXVsKHR0LGhyKXwwKStNYXRoLmltdWwoS2UscnIpfDAsST1JK01hdGguaW11bChLZSxocil8MDt2YXIgJGk9KEcrKEQ9RCtNYXRoLmltdWwoaGUsdm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChoZSxC''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKHdlLHZuKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKHdlLEJuKXwwKSsocD4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRD1NYXRoLmltdWwobG4seHQpLHA9KHA9TWF0aC5pbXVsKGxuLEJ0KSkrTWF0aC5pbXVsKE9uLHh0KXwwLEk9TWF0''@;'; put 'put ''aC5pbXVsKE9uLEJ0KSxEPUQrTWF0aC5pbXVsKGd0LEduKXwwLHA9KHA9cCtNYXRoLmltdWwoZ3QseW4pfDApK01hdGguaW11bChYdCxHbil8MCxJPUkrTWF0aC5pbXVsKFh0LHluKXwwLEQ9RCtNYXRoLmltdWwoUnQscnIpfDAscD0ocD1wK01hdGguaW11bChSdCxocil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEx0LHJyKXwwLEk9SStNYXRoLmltdWwoTHQsaHIpfDA7dmFyIF9zPShHKyhEPUQrTWF0aC5pbXVsKHR0LHZuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwodHQsQm4pfDApK01hdGguaW11bChLZSx2bil8MCkpPDwxMyl8MDtHPSgoST1JK01hdGguaW11bChLZSxCbil8MCkrKHA+''@;'; put 'put ''Pj4xMyl8MCkrKF9zPj4+MjYpfDAsX3MmPTY3MTA4ODYzLEQ9TWF0aC5pbXVsKGxuLEduKSxwPShwPU1hdGguaW11bChsbix5bikpK01hdGguaW11bChPbixHbil8MCxJPU1hdGguaW11bChPbix5biksRD1EK01hdGguaW11bChndCxycil8MCxwPShwPXArTWF0aC5pbXVsKGd0LGhyKXwwKStN''@;'; put 'put ''YXRoLmltdWwoWHQscnIpfDAsST1JK01hdGguaW11bChYdCxocil8MDt2YXIganM9KEcrKEQ9RCtNYXRoLmltdWwoUnQsdm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChSdCxCbil8MCkrTWF0aC5pbXVsKEx0LHZuKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKEx0LEJu''@;'; put 'put ''KXwwKSsocD4+PjEzKXwwKSsoanM+Pj4yNil8MCxqcyY9NjcxMDg4NjMsRD1NYXRoLmltdWwobG4scnIpLHA9KHA9TWF0aC5pbXVsKGxuLGhyKSkrTWF0aC5pbXVsKE9uLHJyKXwwLEk9TWF0aC5pbXVsKE9uLGhyKTt2YXIgQ2w9KEcrKEQ9RCtNYXRoLmltdWwoZ3Qsdm4pfDApfDApKygoODE5''@;'; put 'put ''MSYocD0ocD1wK01hdGguaW11bChndCxCbil8MCkrTWF0aC5pbXVsKFh0LHZuKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKFh0LEJuKXwwKSsocD4+PjEzKXwwKSsoQ2w+Pj4yNil8MCxDbCY9NjcxMDg4NjM7dmFyIFRpPShHKyhEPU1hdGguaW11bChsbix2bikpfDApKygoODE5MSYo''@;'; put 'put ''cD0ocD1NYXRoLmltdWwobG4sQm4pKStNYXRoLmltdWwoT24sdm4pfDApKTw8MTMpfDA7cmV0dXJuIEc9KChJPU1hdGguaW11bChPbixCbikpKyhwPj4+MTMpfDApKyhUaT4+PjI2KXwwLFRpJj02NzEwODg2MyxLWzBdPWphLEtbMV09am8sS1syXT1YcixLWzNdPWVhLEtbNF09cmEsS1s1XT1j''@;'; put 'put ''YSxLWzZdPUNpLEtbN109aG8sS1s4XT1NYSxLWzldPWtzLEtbMTBdPUJpLEtbMTFdPXRhLEtbMTJdPU1yLEtbMTNdPUZzLEtbMTRdPSRpLEtbMTVdPV9zLEtbMTZdPWpzLEtbMTddPUNsLEtbMThdPVRpLDAhPT1HJiYoS1sxOV09RyxrLmxlbmd0aCsrKSxrfTtmdW5jdGlvbiBZKFgsZixiKXty''@;'; put 'put ''ZXR1cm4obmV3IEYpLm11bHAoWCxmLGIpfWZ1bmN0aW9uIEYoWCxmKXt0aGlzLng9WCx0aGlzLnk9Zn1NYXRoLmltdWx8fChOPVYpLHYucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGYsYil7dmFyIGssTT10aGlzLmxlbmd0aCtmLmxlbmd0aDtyZXR1cm4gaz0xMD09PXRoaXMubGVuZ3RoJiYx''@;'; put 'put ''MD09PWYubGVuZ3RoP04odGhpcyxmLGIpOk08NjM/Vih0aGlzLGYsYik6TTwxMDI0P2Z1bmN0aW9uIHooWCxmLGIpe2IubmVnYXRpdmU9Zi5uZWdhdGl2ZV5YLm5lZ2F0aXZlLGIubGVuZ3RoPVgubGVuZ3RoK2YubGVuZ3RoO2Zvcih2YXIgaz0wLE09MCxCPTA7QjxiLmxlbmd0aC0xO0IrKyl7''@;'; put 'put ''dmFyIEs9TTtNPTA7Zm9yKHZhciBHPTY3MTA4ODYzJmssRD1NYXRoLm1pbihCLGYubGVuZ3RoLTEpLHA9TWF0aC5tYXgoMCxCLVgubGVuZ3RoKzEpO3A8PUQ7cCsrKXt2YXIgX2U9KDB8WC53b3Jkc1tCLXBdKSooMHxmLndvcmRzW3BdKSxQZT02NzEwODg2MyZfZTtHPTY3MTA4ODYzJihQZT1Q''@;'; put 'put ''ZStHfDApLE0rPShLPShLPUsrKF9lLzY3MTA4ODY0fDApfDApKyhQZT4+PjI2KXwwKT4+PjI2LEsmPTY3MTA4ODYzfWIud29yZHNbQl09RyxrPUssSz1NfXJldHVybiAwIT09az9iLndvcmRzW0JdPWs6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMsZixiKTpZKHRoaXMsZixiKSxrfSxGLnBy''@;'; put 'put ''b3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGYpe2Zvcih2YXIgYj1uZXcgQXJyYXkoZiksaz12LnByb3RvdHlwZS5fY291bnRCaXRzKGYpLTEsTT0wO008ZjtNKyspYltNXT10aGlzLnJldkJpbihNLGssZik7cmV0dXJuIGJ9LEYucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihmLGIsayl7aWYo''@;'; put 'put ''MD09PWZ8fGY9PT1rLTEpcmV0dXJuIGY7Zm9yKHZhciBNPTAsQj0wO0I8YjtCKyspTXw9KDEmZik8PGItQi0xLGY+Pj0xO3JldHVybiBNfSxGLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGYsYixrLE0sQixLKXtmb3IodmFyIEc9MDtHPEs7RysrKU1bR109YltmW0ddXSxCW0ddPWtbZltH''@;'; put 'put ''XV19LEYucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihmLGIsayxNLEIsSyl7dGhpcy5wZXJtdXRlKEssZixiLGssTSxCKTtmb3IodmFyIEc9MTtHPEI7Rzw8PTEpZm9yKHZhciBEPUc8PDEscD1NYXRoLmNvcygyKk1hdGguUEkvRCksST1NYXRoLnNpbigyKk1hdGguUEkvRCksdWU9MDt1''@;'; put 'put ''ZTxCO3VlKz1EKWZvcih2YXIgbmU9cCxfZT1JLFBlPTA7UGU8RztQZSsrKXt2YXIgb3Q9a1t1ZStQZV0sbHQ9TVt1ZStQZV0sZHQ9a1t1ZStQZStHXSxSZT1NW3VlK1BlK0ddLGFlPW5lKmR0LV9lKlJlO1JlPW5lKlJlK19lKmR0LGtbdWUrUGVdPW90KyhkdD1hZSksTVt1ZStQZV09bHQrUmUs''@;'; put 'put ''a1t1ZStQZStHXT1vdC1kdCxNW3VlK1BlK0ddPWx0LVJlLFBlIT09RCYmKGFlPXAqbmUtSSpfZSxfZT1wKl9lK0kqbmUsbmU9YWUpfX0sRi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZixiKXt2YXIgaz0xfE1hdGgubWF4KGIsZiksTT0xJmssQj0wO2ZvcihrPWsvMnwwO2s7az4+''@;'; put 'put ''Pj0xKUIrKztyZXR1cm4gMTw8QisxK019LEYucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihmLGIsayl7aWYoIShrPD0xKSlmb3IodmFyIE09MDtNPGsvMjtNKyspe3ZhciBCPWZbTV07ZltNXT1mW2stTS0xXSxmW2stTS0xXT1CLEI9YltNXSxiW01dPS1iW2stTS0xXSxiW2stTS0xXT0t''@;'; put 'put ''Qn19LEYucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihmLGIpe2Zvcih2YXIgaz0wLE09MDtNPGIvMjtNKyspe3ZhciBCPTgxOTIqTWF0aC5yb3VuZChmWzIqTSsxXS9iKStNYXRoLnJvdW5kKGZbMipNXS9iKStrO2ZbTV09NjcxMDg4NjMmQixrPUI8NjcxMDg4NjQ/MDpCLzY3MTA4''@;'; put 'put ''ODY0fDB9cmV0dXJuIGZ9LEYucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZixiLGssTSl7Zm9yKHZhciBCPTAsSz0wO0s8YjtLKyspa1syKktdPTgxOTEmKEIrPTB8ZltLXSksa1syKksrMV09ODE5MSYoQj4+Pj0xMyksQj4+Pj0xMztmb3IoSz0yKmI7SzxNOysrSylrW0tdPTA7cygw''@;'; put 'put ''PT09QikscyghKC04MTkyJkIpKX0sRi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihmKXtmb3IodmFyIGI9bmV3IEFycmF5KGYpLGs9MDtrPGY7aysrKWJba109MDtyZXR1cm4gYn0sRi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihmLGIsayl7dmFyIE09Mip0aGlzLmd1ZXNzTGVuMTNiKGYubGVu''@;'; put 'put ''Z3RoLGIubGVuZ3RoKSxCPXRoaXMubWFrZVJCVChNKSxLPXRoaXMuc3R1YihNKSxHPW5ldyBBcnJheShNKSxEPW5ldyBBcnJheShNKSxwPW5ldyBBcnJheShNKSxJPW5ldyBBcnJheShNKSx1ZT1uZXcgQXJyYXkoTSksbmU9bmV3IEFycmF5KE0pLF9lPWsud29yZHM7X2UubGVuZ3RoPU0sdGhp''@;'; put 'put ''cy5jb252ZXJ0MTNiKGYud29yZHMsZi5sZW5ndGgsRyxNKSx0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxJLE0pLHRoaXMudHJhbnNmb3JtKEcsSyxELHAsTSxCKSx0aGlzLnRyYW5zZm9ybShJLEssdWUsbmUsTSxCKTtmb3IodmFyIFBlPTA7UGU8TTtQZSsrKXt2YXIgb3Q9RFtQ''@;'; put 'put ''ZV0qdWVbUGVdLXBbUGVdKm5lW1BlXTtwW1BlXT1EW1BlXSpuZVtQZV0rcFtQZV0qdWVbUGVdLERbUGVdPW90fXJldHVybiB0aGlzLmNvbmp1Z2F0ZShELHAsTSksdGhpcy50cmFuc2Zvcm0oRCxwLF9lLEssTSxCKSx0aGlzLmNvbmp1Z2F0ZShfZSxLLE0pLHRoaXMubm9ybWFsaXplMTNiKF9l''@;'; put 'put ''LE0pLGsubmVnYXRpdmU9Zi5uZWdhdGl2ZV5iLm5lZ2F0aXZlLGsubGVuZ3RoPWYubGVuZ3RoK2IubGVuZ3RoLGsuc3RyaXAoKX0sdi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGYpe3ZhciBiPW5ldyB2KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtmLmxlbmd0''@;'; put 'put ''aCksdGhpcy5tdWxUbyhmLGIpfSx2LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGYpe3ZhciBiPW5ldyB2KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtmLmxlbmd0aCksWSh0aGlzLGYsYil9LHYucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZil7cmV0dXJuIHRo''@;'; put 'put ''aXMuY2xvbmUoKS5tdWxUbyhmLHRoaXMpfSx2LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihmKXtzKCJudW1iZXIiPT10eXBlb2YgZikscyhmPDY3MTA4ODY0KTtmb3IodmFyIGI9MCxrPTA7azx0aGlzLmxlbmd0aDtrKyspe3ZhciBNPSgwfHRoaXMud29yZHNba10pKmYsQj0oNjcxMDg4NjMm''@;'; put 'put ''TSkrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1NLzY3MTA4ODY0fDAsYis9Qj4+PjI2LHRoaXMud29yZHNba109NjcxMDg4NjMmQn1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW2tdPWIsdGhpcy5sZW5ndGgrKyksMD09PWYmJih0aGlzLmxlbmd0aD0xLHRoaXMuX25vcm1TaWduKCkpLHRoaXN9''@;'; put 'put ''LHYucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihmKX0sdi5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx2LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25l''@;'; put 'put ''KCkpfSx2LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZil7dmFyIGI9ZnVuY3Rpb24gSChYKXtmb3IodmFyIGY9bmV3IEFycmF5KFguYml0TGVuZ3RoKCkpLGI9MDtiPGYubGVuZ3RoO2IrKyl7dmFyIE09YiUyNjtmW2JdPShYLndvcmRzW2IvMjZ8MF0mMTw8TSk+Pj5NfXJldHVybiBmfShmKTtp''@;'; put 'put ''ZigwPT09Yi5sZW5ndGgpcmV0dXJuIG5ldyB2KDEpO2Zvcih2YXIgaz10aGlzLE09MDtNPGIubGVuZ3RoJiYwPT09YltNXTtNKyssaz1rLnNxcigpKTtpZigrK008Yi5sZW5ndGgpZm9yKHZhciBCPWsuc3FyKCk7TTxiLmxlbmd0aDtNKyssQj1CLnNxcigpKTAhPT1iW01dJiYoaz1rLm11bChC''@;'; put 'put ''KSk7cmV0dXJuIGt9LHYucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihmKXtzKCJudW1iZXIiPT10eXBlb2YgZiYmZj49MCk7dmFyIEIsYj1mJTI2LGs9KGYtYikvMjYsTT02NzEwODg2Mz4+PjI2LWI8PDI2LWI7aWYoMCE9PWIpe3ZhciBLPTA7Zm9yKEI9MDtCPHRoaXMubGVuZ3RoO0IrKyl7''@;'; put 'put ''dmFyIEc9dGhpcy53b3Jkc1tCXSZNO3RoaXMud29yZHNbQl09KDB8dGhpcy53b3Jkc1tCXSktRzw8YnxLLEs9Rz4+PjI2LWJ9SyYmKHRoaXMud29yZHNbQl09Syx0aGlzLmxlbmd0aCsrKX1pZigwIT09ayl7Zm9yKEI9dGhpcy5sZW5ndGgtMTtCPj0wO0ItLSl0aGlzLndvcmRzW0Ira109dGhp''@;'; put 'put ''cy53b3Jkc1tCXTtmb3IoQj0wO0I8aztCKyspdGhpcy53b3Jkc1tCXT0wO3RoaXMubGVuZ3RoKz1rfXJldHVybiB0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGYpe3JldHVybiBzKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihmKX0sdi5wcm90b3R5cGUu''@;'; put 'put ''aXVzaHJuPWZ1bmN0aW9uKGYsYixrKXt2YXIgTTtzKCJudW1iZXIiPT10eXBlb2YgZiYmZj49MCksTT1iPyhiLWIlMjYpLzI2OjA7dmFyIEI9ZiUyNixLPU1hdGgubWluKChmLUIpLzI2LHRoaXMubGVuZ3RoKSxHPTY3MTA4ODYzXjY3MTA4ODYzPj4+Qjw8QixEPWs7aWYoTS09SyxNPU1hdGgu''@;'; put 'put ''bWF4KDAsTSksRCl7Zm9yKHZhciBwPTA7cDxLO3ArKylELndvcmRzW3BdPXRoaXMud29yZHNbcF07RC5sZW5ndGg9S31pZigwIT09SylpZih0aGlzLmxlbmd0aD5LKWZvcih0aGlzLmxlbmd0aC09SyxwPTA7cDx0aGlzLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT10aGlzLndvcmRzW3ArS107''@;'; put 'put ''ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgST0wO2ZvcihwPXRoaXMubGVuZ3RoLTE7cD49MCYmKDAhPT1JfHxwPj1NKTtwLS0pe3ZhciB1ZT0wfHRoaXMud29yZHNbcF07dGhpcy53b3Jkc1twXT1JPDwyNi1CfHVlPj4+QixJPXVlJkd9cmV0dXJuIEQmJjAhPT1JJiYo''@;'; put 'put ''RC53b3Jkc1tELmxlbmd0aCsrXT1JKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihmLGIsayl7cmV0dXJuIHMoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGYsYixr''@;'; put 'put ''KX0sdi5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGYpfSx2LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihmKX0sdi5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''bG9uZSgpLmlzaHJuKGYpfSx2LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihmKX0sdi5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZil7cygibnVtYmVyIj09dHlwZW9mIGYmJmY+PTApO3ZhciBiPWYlMjYsaz0oZi1iKS8yNjtyZXR1cm4h''@;'; put 'put ''KHRoaXMubGVuZ3RoPD1rfHwhKHRoaXMud29yZHNba10mMTw8YikpfSx2LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZil7cygibnVtYmVyIj09dHlwZW9mIGYmJmY+PTApO3ZhciBiPWYlMjYsaz0oZi1iKS8yNjtyZXR1cm4gcygwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9u''@;'; put 'put ''bHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PWs/dGhpczooMCE9PWImJmsrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihrLHRoaXMubGVuZ3RoKSwwIT09YiYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Yjw8YiksMD09PXRoaXMu''@;'; put 'put ''bGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKSl9LHYucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGYpfSx2LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihmKXtyZXR1cm4gcygibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIGYpLHMoZjw2NzEwODg2NCksZjwwP3RoaXMuaXN1Ym4oLWYpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zj8odGhpcy53b3Jkc1swXT1mLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdh''@;'; put 'put ''dGl2ZT0wLHRoaXMuaXN1Ym4oZiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGYpfSx2LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZil7dGhpcy53b3Jkc1swXSs9Zjtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKyspdGhp''@;'; put 'put ''cy53b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdi5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZil7aWYocygibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIGYpLHMoZjw2NzEwODg2NCksZjwwKXJldHVybiB0aGlzLmlhZGRuKC1mKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZiksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZiwxPT09dGhpcy5s''@;'; put 'put ''ZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3Jl''@;'; put 'put ''dHVybiB0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihmKX0sdi5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGYpfSx2LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx2LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdi5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGYsYixrKXt2YXIgQjt0aGlzLl9leHBhbmQoZi5sZW5ndGgrayk7dmFyIEssRz0w''@;'; put 'put ''O2ZvcihCPTA7QjxmLmxlbmd0aDtCKyspe0s9KDB8dGhpcy53b3Jkc1tCK2tdKStHO3ZhciBEPSgwfGYud29yZHNbQl0pKmI7Rz0oKEstPTY3MTA4ODYzJkQpPj4yNiktKEQvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tCK2tdPTY3MTA4ODYzJkt9Zm9yKDtCPHRoaXMubGVuZ3RoLWs7QisrKUc9''@;'; put 'put ''KEs9KDB8dGhpcy53b3Jkc1tCK2tdKStHKT4+MjYsdGhpcy53b3Jkc1tCK2tdPTY3MTA4ODYzJks7aWYoMD09PUcpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IocygtMT09PUcpLEc9MCxCPTA7Qjx0aGlzLmxlbmd0aDtCKyspRz0oSz0tKDB8dGhpcy53b3Jkc1tCXSkrRyk+PjI2LHRoaXMud29y''@;'; put 'put ''ZHNbQl09NjcxMDg4NjMmSztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZixiKXt2YXIgayxNPXRoaXMuY2xvbmUoKSxCPWYsSz0wfEIud29yZHNbQi5sZW5ndGgtMV07MCE9KGs9MjYtdGhpcy5fY291bnRCaXRzKEsp''@;'; put 'put ''KSYmKEI9Qi51c2hsbihrKSxNLml1c2hsbihrKSxLPTB8Qi53b3Jkc1tCLmxlbmd0aC0xXSk7dmFyIHAsRD1NLmxlbmd0aC1CLmxlbmd0aDtpZigibW9kIiE9PWIpeyhwPW5ldyB2KG51bGwpKS5sZW5ndGg9RCsxLHAud29yZHM9bmV3IEFycmF5KHAubGVuZ3RoKTtmb3IodmFyIEk9MDtJPHAu''@;'; put 'put ''bGVuZ3RoO0krKylwLndvcmRzW0ldPTB9dmFyIHVlPU0uY2xvbmUoKS5faXNobG5zdWJtdWwoQiwxLEQpOzA9PT11ZS5uZWdhdGl2ZSYmKE09dWUscCYmKHAud29yZHNbRF09MSkpO2Zvcih2YXIgbmU9RC0xO25lPj0wO25lLS0pe3ZhciBfZT02NzEwODg2NCooMHxNLndvcmRzW0IubGVuZ3Ro''@;'; put 'put ''K25lXSkrKDB8TS53b3Jkc1tCLmxlbmd0aCtuZS0xXSk7Zm9yKF9lPU1hdGgubWluKF9lL0t8MCw2NzEwODg2MyksTS5faXNobG5zdWJtdWwoQixfZSxuZSk7MCE9PU0ubmVnYXRpdmU7KV9lLS0sTS5uZWdhdGl2ZT0wLE0uX2lzaGxuc3VibXVsKEIsMSxuZSksTS5pc1plcm8oKXx8KE0ubmVn''@;'; put 'put ''YXRpdmVePTEpO3AmJihwLndvcmRzW25lXT1fZSl9cmV0dXJuIHAmJnAuc3RyaXAoKSxNLnN0cmlwKCksImRpdiIhPT1iJiYwIT09ayYmTS5pdXNocm4oaykse2RpdjpwfHxudWxsLG1vZDpNfX0sdi5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGYsYixrKXtyZXR1cm4gcyghZi5pc1plcm8o''@;'; put 'put ''KSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB2KDApLG1vZDpuZXcgdigwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1mLm5lZ2F0aXZlPyhLPXRoaXMubmVnKCkuZGl2bW9kKGYsYiksIm1vZCIhPT1iJiYoTT1LLmRpdi5uZWcoKSksImRpdiIhPT1iJiYoQj1LLm1vZC5uZWcoKSxrJiYwIT09''@;'; put 'put ''Qi5uZWdhdGl2ZSYmQi5pYWRkKGYpKSx7ZGl2Ok0sbW9kOkJ9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWYubmVnYXRpdmU/KEs9dGhpcy5kaXZtb2QoZi5uZWcoKSxiKSwibW9kIiE9PWImJihNPUsuZGl2Lm5lZygpKSx7ZGl2Ok0sbW9kOksubW9kfSk6MCE9PSh0aGlzLm5lZ2F0aXZlJmYu''@;'; put 'put ''bmVnYXRpdmUpPyhLPXRoaXMubmVnKCkuZGl2bW9kKGYubmVnKCksYiksImRpdiIhPT1iJiYoQj1LLm1vZC5uZWcoKSxrJiYwIT09Qi5uZWdhdGl2ZSYmQi5pc3ViKGYpKSx7ZGl2OksuZGl2LG1vZDpCfSk6Zi5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGYpPDA/e2RpdjpuZXcgdigw''@;'; put 'put ''KSxtb2Q6dGhpc306MT09PWYubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihmLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHYodGhpcy5tb2RuKGYud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZi53b3Jkc1swXSksbW9kOm5ldyB2KHRo''@;'; put 'put ''aXMubW9kbihmLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZixiKTt2YXIgTSxCLEt9LHYucHJvdG90eXBlLmRpdj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5kaXZtb2QoZiwiZGl2IiwhMSkuZGl2fSx2LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuZGl2bW9kKGYs''@;'; put 'put ''Im1vZCIsITEpLm1vZH0sdi5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5kaXZtb2QoZiwibW9kIiwhMCkubW9kfSx2LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihmKXt2YXIgYj10aGlzLmRpdm1vZChmKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7''@;'; put 'put ''dmFyIGs9Yi5tb2QuYWJzKCksTT1mLmFicygpLml1c2hybigxKSxCPTEmZi53b3Jkc1swXSxLPWsuY21wKE0pO2lmKEs8MHx8MT09PUImJjA9PT1LKXJldHVybiBiLmRpdjt2YXIgRz1uZXcgdigxKTtyZXR1cm4gRy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlXmYubmVnYXRpdmUsYi5kaXYuaWFk''@;'; put 'put ''ZChHKX0sdi5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihmKXtzKGY8PTY3MTA4ODYzKTtmb3IodmFyIGI9KDE8PDI2KSVmLGs9MCxNPXRoaXMubGVuZ3RoLTE7TT49MDtNLS0paz0oYiprKygwfHRoaXMud29yZHNbTV0pKSVmO3JldHVybiBrfSx2LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihm''@;'; put 'put ''KXtzKGY8PTY3MTA4ODYzKTtmb3IodmFyIGI9MCxrPXRoaXMubGVuZ3RoLTE7az49MDtrLS0pe3ZhciBNPSgwfHRoaXMud29yZHNba10pKzY3MTA4ODY0KmI7dGhpcy53b3Jkc1trXT1NL2Z8MCxiPU0lZn1yZXR1cm4gdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGYp''@;'; put 'put ''e3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZil9LHYucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZil7cygwPT09Zi5uZWdhdGl2ZSkscyghZi5pc1plcm8oKSk7dmFyIGI9dGhpcyxrPWYuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChmKTpiLmNsb25lKCk7Zm9yKHZhciBNPW5l''@;'; put 'put ''dyB2KDEpLEI9bmV3IHYoMCksSz1uZXcgdigwKSxHPW5ldyB2KDEpLEQ9MDtiLmlzRXZlbigpJiZrLmlzRXZlbigpOyliLml1c2hybigxKSxrLml1c2hybigxKSwrK0Q7Zm9yKHZhciBwPWsuY2xvbmUoKSxJPWIuY2xvbmUoKTshYi5pc1plcm8oKTspe2Zvcih2YXIgdWU9MCxuZT0xOzA9PT0o''@;'; put 'put ''Yi53b3Jkc1swXSZuZSkmJnVlPDI2OysrdWUsbmU8PD0xKTtpZih1ZT4wKWZvcihiLml1c2hybih1ZSk7dWUtLSA+MDspKE0uaXNPZGQoKXx8Qi5pc09kZCgpKSYmKE0uaWFkZChwKSxCLmlzdWIoSSkpLE0uaXVzaHJuKDEpLEIuaXVzaHJuKDEpO2Zvcih2YXIgX2U9MCxQZT0xOzA9PT0oay53''@;'; put 'put ''b3Jkc1swXSZQZSkmJl9lPDI2OysrX2UsUGU8PD0xKTtpZihfZT4wKWZvcihrLml1c2hybihfZSk7X2UtLSA+MDspKEsuaXNPZGQoKXx8Ry5pc09kZCgpKSYmKEsuaWFkZChwKSxHLmlzdWIoSSkpLEsuaXVzaHJuKDEpLEcuaXVzaHJuKDEpO2IuY21wKGspPj0wPyhiLmlzdWIoayksTS5pc3Vi''@;'; put 'put ''KEspLEIuaXN1YihHKSk6KGsuaXN1YihiKSxLLmlzdWIoTSksRy5pc3ViKEIpKX1yZXR1cm57YTpLLGI6RyxnY2Q6ay5pdXNobG4oRCl9fSx2LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZil7cygwPT09Zi5uZWdhdGl2ZSkscyghZi5pc1plcm8oKSk7dmFyIHVlLGI9dGhpcyxrPWYuY2xv''@;'; put 'put ''bmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChmKTpiLmNsb25lKCk7Zm9yKHZhciBNPW5ldyB2KDEpLEI9bmV3IHYoMCksSz1rLmNsb25lKCk7Yi5jbXBuKDEpPjAmJmsuY21wbigxKT4wOyl7Zm9yKHZhciBHPTAsRD0xOzA9PT0oYi53b3Jkc1swXSZEKSYmRzwyNjsrK0csRDw8PTEpO2lm''@;'; put 'put ''KEc+MClmb3IoYi5pdXNocm4oRyk7Ry0tID4wOylNLmlzT2RkKCkmJk0uaWFkZChLKSxNLml1c2hybigxKTtmb3IodmFyIHA9MCxJPTE7MD09PShrLndvcmRzWzBdJkkpJiZwPDI2OysrcCxJPDw9MSk7aWYocD4wKWZvcihrLml1c2hybihwKTtwLS0gPjA7KUIuaXNPZGQoKSYmQi5pYWRkKEsp''@;'; put 'put ''LEIuaXVzaHJuKDEpO2IuY21wKGspPj0wPyhiLmlzdWIoayksTS5pc3ViKEIpKTooay5pc3ViKGIpLEIuaXN1YihNKSl9cmV0dXJuKHVlPTA9PT1iLmNtcG4oMSk/TTpCKS5jbXBuKDApPDAmJnVlLmlhZGQoZiksdWV9LHYucHJvdG90eXBlLmdjZD1mdW5jdGlvbihmKXtpZih0aGlzLmlzWmVy''@;'; put 'put ''bygpKXJldHVybiBmLmFicygpO2lmKGYuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGI9dGhpcy5jbG9uZSgpLGs9Zi5jbG9uZSgpO2IubmVnYXRpdmU9MCxrLm5lZ2F0aXZlPTA7Zm9yKHZhciBNPTA7Yi5pc0V2ZW4oKSYmay5pc0V2ZW4oKTtNKyspYi5pdXNocm4oMSksay5pdXNo''@;'; put 'put ''cm4oMSk7Zm9yKDs7KXtmb3IoO2IuaXNFdmVuKCk7KWIuaXVzaHJuKDEpO2Zvcig7ay5pc0V2ZW4oKTspay5pdXNocm4oMSk7dmFyIEI9Yi5jbXAoayk7aWYoQjwwKXt2YXIgSz1iO2I9ayxrPUt9ZWxzZSBpZigwPT09Qnx8MD09PWsuY21wbigxKSlicmVhaztiLmlzdWIoayl9cmV0dXJuIGsu''@;'; put 'put ''aXVzaGxuKE0pfSx2LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmVnY2QoZikuYS51bW9kKGYpfSx2LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHYucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgx''@;'; put 'put ''Jn50aGlzLndvcmRzWzBdKX0sdi5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMud29yZHNbMF0mZn0sdi5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZil7cygibnVtYmVyIj09dHlwZW9mIGYpO3ZhciBiPWYlMjYsaz0oZi1iKS8yNixNPTE8PGI7aWYodGhpcy5sZW5n''@;'; put 'put ''dGg8PWspcmV0dXJuIHRoaXMuX2V4cGFuZChrKzEpLHRoaXMud29yZHNba118PU0sdGhpcztmb3IodmFyIEI9TSxLPWs7MCE9PUImJks8dGhpcy5sZW5ndGg7SysrKXt2YXIgRz0wfHRoaXMud29yZHNbS107Qj0oRys9Qik+Pj4yNix0aGlzLndvcmRzW0tdPUcmPTY3MTA4ODYzfXJldHVybiAw''@;'; put 'put ''IT09QiYmKHRoaXMud29yZHNbS109Qix0aGlzLmxlbmd0aCsrKSx0aGlzfSx2LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdi5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihmKXt2YXIgayxiPWY8MDtpZigwIT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZSYmIWIpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmIpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpaz0xO2Vsc2V7YiYmKGY9LWYpLHMoZjw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIE09MHx0aGlzLndvcmRzWzBd''@;'; put 'put ''O2s9TT09PWY/MDpNPGY/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtazprfSx2LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZil7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1mLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zi5uZWdhdGl2ZSly''@;'; put 'put ''ZXR1cm4gMTt2YXIgYj10aGlzLnVjbXAoZik7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWI6Yn0sdi5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihmKXtpZih0aGlzLmxlbmd0aD5mLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxmLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGI9''@;'; put 'put ''MCxrPXRoaXMubGVuZ3RoLTE7az49MDtrLS0pe3ZhciBNPTB8dGhpcy53b3Jkc1trXSxCPTB8Zi53b3Jkc1trXTtpZihNIT09Qil7TTxCP2I9LTE6TT5CJiYoYj0xKTticmVha319cmV0dXJuIGJ9LHYucHJvdG90eXBlLmd0bj1mdW5jdGlvbihmKXtyZXR1cm4gMT09PXRoaXMuY21wbihmKX0s''@;'; put 'put ''di5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZil7cmV0dXJuIDE9PT10aGlzLmNtcChmKX0sdi5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbXBuKGYpPj0wfSx2LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuY21wKGYpPj0wfSx2LnByb3RvdHlw''@;'; put 'put ''ZS5sdG49ZnVuY3Rpb24oZil7cmV0dXJuLTE9PT10aGlzLmNtcG4oZil9LHYucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGYpe3JldHVybi0xPT09dGhpcy5jbXAoZil9LHYucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuY21wbihmKTw9MH0sdi5wcm90b3R5cGUubHRlPWZ1''@;'; put 'put ''bmN0aW9uKGYpe3JldHVybiB0aGlzLmNtcChmKTw9MH0sdi5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGYpe3JldHVybiAwPT09dGhpcy5jbXBuKGYpfSx2LnByb3RvdHlwZS5lcT1mdW5jdGlvbihmKXtyZXR1cm4gMD09PXRoaXMuY21wKGYpfSx2LnJlZD1mdW5jdGlvbihmKXtyZXR1cm4gbmV3''@;'; put 'put ''IGtlKGYpfSx2LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihmKXtyZXR1cm4gcyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxzKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGYuY29udmVydFRvKHRo''@;'; put 'put ''aXMpLl9mb3JjZVJlZChmKX0sdi5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBzKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHYucHJvdG90eXBlLl9m''@;'; put 'put ''b3JjZVJlZD1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5yZWQ9Zix0aGlzfSx2LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihmKXtyZXR1cm4gcyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChmKX0sdi5wcm90b3R5''@;'; put 'put ''cGUucmVkQWRkPWZ1bmN0aW9uKGYpe3JldHVybiBzKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZil9LHYucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZil7cmV0dXJuIHModGhpcy5yZWQsInJlZElBZGQgd29ya3Mg''@;'; put 'put ''b25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGYpfSx2LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZil7cmV0dXJuIHModGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxmKX0sdi5wcm90b3R5''@;'; put 'put ''cGUucmVkSVN1Yj1mdW5jdGlvbihmKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZil9LHYucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihmKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkU2hsIHdvcmtz''@;'; put 'put ''IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGYpfSx2LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZil7cmV0dXJuIHModGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGYpLHRoaXMu''@;'; put 'put ''cmVkLm11bCh0aGlzLGYpfSx2LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGYpe3JldHVybiBzKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxmKSx0aGlzLnJlZC5pbXVsKHRoaXMsZil9LHYucHJvdG90eXBl''@;'; put 'put ''LnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBzKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx2LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcy5y''@;'; put 'put ''ZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdi5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBzKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQg''@;'; put 'put ''bnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHYucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlz''@;'; put 'put ''KSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx2LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdi5wcm90b3R5cGUu''@;'; put 'put ''cmVkUG93PWZ1bmN0aW9uKGYpe3JldHVybiBzKHRoaXMucmVkJiYhZi5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZil9O3ZhciBXPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVu''@;'; put 'put ''Y3Rpb24gcShYLGYpe3RoaXMubmFtZT1YLHRoaXMucD1uZXcgdihmLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdigxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gcmUoKXtxLmNhbGwodGhpcywiazI1''@;'; put 'put ''NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gbWUoKXtxLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAw''@;'; put 'put ''IDAwMDAwMDAxIil9ZnVuY3Rpb24gQ2UoKXtxLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gSWUoKXtxLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24ga2UoWCl7aWYoInN0cmluZyI9PXR5cGVvZiBYKXt2YXIgZj12Ll9wcmltZShYKTt0aGlzLm09Zi5wLHRoaXMucHJpbWU9Zn1lbHNlIHMoWC5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRo''@;'; put 'put ''YW4gMSIpLHRoaXMubT1YLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBxZShYKXtrZS5jYWxsKHRoaXMsWCksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdigxKS5pdXNobG4o''@;'; put 'put ''dGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhp''@;'; put 'put ''cy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1xLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGY9bmV3IHYobnVsbCk7cmV0dXJuIGYud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxmfSxxLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGYpe3ZhciBrLGI9''@;'; put 'put ''Zjtkb3t0aGlzLnNwbGl0KGIsdGhpcy50bXApLGs9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKGs+dGhpcy5uKTt2YXIgTT1rPHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PU0/KGIud29yZHNbMF09MCxiLmxlbmd0aD0x''@;'; put 'put ''KTpNPjA/Yi5pc3ViKHRoaXMucCk6dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxxLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihmLGIpe2YuaXVzaHJuKHRoaXMubiwwLGIpfSxxLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihmKXtyZXR1cm4gZi5pbXVsKHRoaXMu''@;'; put 'put ''ayl9LEEocmUscSkscmUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGYsYil7Zm9yKHZhciBrPTQxOTQzMDMsTT1NYXRoLm1pbihmLmxlbmd0aCw5KSxCPTA7QjxNO0IrKyliLndvcmRzW0JdPWYud29yZHNbQl07aWYoYi5sZW5ndGg9TSxmLmxlbmd0aDw9OSlyZXR1cm4gZi53b3Jkc1swXT0w''@;'; put 'put ''LHZvaWQoZi5sZW5ndGg9MSk7dmFyIEs9Zi53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1LJmssQj0xMDtCPGYubGVuZ3RoO0IrKyl7dmFyIEc9MHxmLndvcmRzW0JdO2Yud29yZHNbQi0xMF09KEcmayk8PDR8Sz4+PjIyLEs9R31mLndvcmRzW0ItMTBdPUs+Pj49MjIsZi5sZW5n''@;'; put 'put ''dGgtPTA9PT1LJiZmLmxlbmd0aD4xMD8xMDo5fSxyZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZil7Zi53b3Jkc1tmLmxlbmd0aF09MCxmLndvcmRzW2YubGVuZ3RoKzFdPTAsZi5sZW5ndGgrPTI7Zm9yKHZhciBiPTAsaz0wO2s8Zi5sZW5ndGg7aysrKXt2YXIgTT0wfGYud29yZHNba107''@;'; put 'put ''Zi53b3Jkc1trXT02NzEwODg2MyYoYis9OTc3Kk0pLGI9NjQqTSsoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PWYud29yZHNbZi5sZW5ndGgtMV0mJihmLmxlbmd0aC0tLDA9PT1mLndvcmRzW2YubGVuZ3RoLTFdJiZmLmxlbmd0aC0tKSxmfSxBKG1lLHEpLEEoQ2UscSksQShJZSxxKSxJZS5w''@;'; put 'put ''cm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZil7Zm9yKHZhciBiPTAsaz0wO2s8Zi5sZW5ndGg7aysrKXt2YXIgTT0xOSooMHxmLndvcmRzW2tdKStiLEI9NjcxMDg4NjMmTTtNPj4+PTI2LGYud29yZHNba109QixiPU19cmV0dXJuIDAhPT1iJiYoZi53b3Jkc1tmLmxlbmd0aCsrXT1iKSxmfSx2''@;'; put 'put ''Ll9wcmltZT1mdW5jdGlvbihmKXtpZihXW2ZdKXJldHVybiBXW2ZdO3ZhciBiO2lmKCJrMjU2Ij09PWYpYj1uZXcgcmU7ZWxzZSBpZigicDIyNCI9PT1mKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09ZiliPW5ldyBDZTtlbHNle2lmKCJwMjU1MTkiIT09Zil0aHJvdyBuZXcgRXJyb3IoIlVu''@;'; put 'put ''a25vd24gcHJpbWUgIitmKTtiPW5ldyBJZX1yZXR1cm4gV1tmXT1iLGJ9LGtlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihmKXtzKDA9PT1mLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHMoZi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl''@;'; put 'put ''cnMiKX0sa2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGYsYil7cygwPT09KGYubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscyhmLnJlZCYmZi5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxr''@;'; put 'put ''ZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZikuX2ZvcmNlUmVkKHRoaXMpOmYudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sa2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihmKXtyZXR1cm4gZi5pc1plcm8oKT9m''@;'; put 'put ''LmNsb25lKCk6dGhpcy5tLnN1YihmKS5fZm9yY2VSZWQodGhpcyl9LGtlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZixiKXt0aGlzLl92ZXJpZnkyKGYsYik7dmFyIGs9Zi5hZGQoYik7cmV0dXJuIGsuY21wKHRoaXMubSk+PTAmJmsuaXN1Yih0aGlzLm0pLGsuX2ZvcmNlUmVkKHRoaXMpfSxr''@;'; put 'put ''ZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihmLGIpe3RoaXMuX3ZlcmlmeTIoZixiKTt2YXIgaz1mLmlhZGQoYik7cmV0dXJuIGsuY21wKHRoaXMubSk+PTAmJmsuaXN1Yih0aGlzLm0pLGt9LGtlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZixiKXt0aGlzLl92ZXJpZnkyKGYsYik7dmFyIGs9''@;'; put 'put ''Zi5zdWIoYik7cmV0dXJuIGsuY21wbigwKTwwJiZrLmlhZGQodGhpcy5tKSxrLl9mb3JjZVJlZCh0aGlzKX0sa2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZixiKXt0aGlzLl92ZXJpZnkyKGYsYik7dmFyIGs9Zi5pc3ViKGIpO3JldHVybiBrLmNtcG4oMCk8MCYmay5pYWRkKHRoaXMubSks''@;'; put 'put ''a30sa2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihmLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKGYpLHRoaXMuaW1vZChmLnVzaGxuKGIpKX0sa2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZixiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihmLGIpLHRoaXMuaW1vZChmLmltdWwoYikpfSxrZS5w''@;'; put 'put ''cm90b3R5cGUubXVsPWZ1bmN0aW9uKGYsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZixiKSx0aGlzLmltb2QoZi5tdWwoYikpfSxrZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5pbXVsKGYsZi5jbG9uZSgpKX0sa2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihmKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5tdWwoZixmKX0sa2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZil7aWYoZi5pc1plcm8oKSlyZXR1cm4gZi5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihzKGIlMj09MSksMz09PWIpe3ZhciBrPXRoaXMubS5hZGQobmV3IHYoMSkpLml1c2hybigyKTtyZXR1''@;'; put 'put ''cm4gdGhpcy5wb3coZixrKX1mb3IodmFyIE09dGhpcy5tLnN1Ym4oMSksQj0wOyFNLmlzWmVybygpJiYwPT09TS5hbmRsbigxKTspQisrLE0uaXVzaHJuKDEpO3MoIU0uaXNaZXJvKCkpO3ZhciBLPW5ldyB2KDEpLnRvUmVkKHRoaXMpLEc9Sy5yZWROZWcoKSxEPXRoaXMubS5zdWJuKDEpLml1''@;'; put 'put ''c2hybigxKSxwPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IocD1uZXcgdigyKnAqcCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHAsRCkuY21wKEcpOylwLnJlZElBZGQoRyk7Zm9yKHZhciBJPXRoaXMucG93KHAsTSksdWU9dGhpcy5wb3coZixNLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlz''@;'; put 'put ''LnBvdyhmLE0pLF9lPUI7MCE9PW5lLmNtcChLKTspe2Zvcih2YXIgUGU9bmUsb3Q9MDswIT09UGUuY21wKEspO290KyspUGU9UGUucmVkU3FyKCk7cyhvdDxfZSk7dmFyIGx0PXRoaXMucG93KEksbmV3IHYoMSkuaXVzaGxuKF9lLW90LTEpKTt1ZT11ZS5yZWRNdWwobHQpLEk9bHQucmVkU3Fy''@;'; put 'put ''KCksbmU9bmUucmVkTXVsKEkpLF9lPW90fXJldHVybiB1ZX0sa2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZil7dmFyIGI9Zi5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sa2Uu''@;'; put 'put ''cHJvdG90eXBlLnBvdz1mdW5jdGlvbihmLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB2KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIGYuY2xvbmUoKTt2YXIgTT1uZXcgQXJyYXkoMTYpO01bMF09bmV3IHYoMSkudG9SZWQodGhpcyksTVsxXT1mO2Zvcih2YXIg''@;'; put 'put ''Qj0yO0I8TS5sZW5ndGg7QisrKU1bQl09dGhpcy5tdWwoTVtCLTFdLGYpO3ZhciBLPU1bMF0sRz0wLEQ9MCxwPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1wJiYocD0yNiksQj1iLmxlbmd0aC0xO0I+PTA7Qi0tKXtmb3IodmFyIEk9Yi53b3Jkc1tCXSx1ZT1wLTE7dWU+PTA7dWUtLSl7dmFy''@;'; put 'put ''IG5lPUk+PnVlJjE7SyE9PU1bMF0mJihLPXRoaXMuc3FyKEspKSwwIT09bmV8fDAhPT1HPyhHPDw9MSxHfD1uZSwoND09PSsrRHx8MD09PUImJjA9PT11ZSkmJihLPXRoaXMubXVsKEssTVtHXSksRD0wLEc9MCkpOkQ9MH1wPTI2fXJldHVybiBLfSxrZS5wcm90b3R5cGUuY29udmVydFRvPWZ1''@;'; put 'put ''bmN0aW9uKGYpe3ZhciBiPWYudW1vZCh0aGlzLm0pO3JldHVybiBiPT09Zj9iLmNsb25lKCk6Yn0sa2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGYpe3ZhciBiPWYuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx2Lm1vbnQ9ZnVuY3Rpb24oZil7cmV0dXJuIG5ldyBxZShm''@;'; put 'put ''KX0sQShxZSxrZSkscWUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5pbW9kKGYudXNobG4odGhpcy5zaGlmdCkpfSxxZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZil7dmFyIGI9dGhpcy5pbW9kKGYubXVsKHRoaXMucmludikpO3JldHVybiBi''@;'; put 'put ''LnJlZD1udWxsLGJ9LHFlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGYsYil7aWYoZi5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gZi53b3Jkc1swXT0wLGYubGVuZ3RoPTEsZjt2YXIgaz1mLmltdWwoYiksTT1rLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0''@;'; put 'put ''aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxCPWsuaXN1YihNKS5pdXNocm4odGhpcy5zaGlmdCksSz1CO3JldHVybiBCLmNtcCh0aGlzLm0pPj0wP0s9Qi5pc3ViKHRoaXMubSk6Qi5jbXBuKDApPDAmJihLPUIuaWFkZCh0aGlzLm0pKSxLLl9mb3JjZVJlZCh0aGlzKX0scWUucHJvdG90eXBlLm11''@;'; put 'put ''bD1mdW5jdGlvbihmLGIpe2lmKGYuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB2KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgaz1mLm11bChiKSxNPWsubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLEI9ay5pc3Vi''@;'; put 'put ''KE0pLml1c2hybih0aGlzLnNoaWZ0KSxLPUI7cmV0dXJuIEIuY21wKHRoaXMubSk+PTA/Sz1CLmlzdWIodGhpcy5tKTpCLmNtcG4oMCk8MCYmKEs9Qi5pYWRkKHRoaXMubSkpLEsuX2ZvcmNlUmVkKHRoaXMpfSxxZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5pbW9k''@;'; put 'put ''KGYuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShmZT1oLm5tZChmZSksdGhpcyl9LDk0MTQ4KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNjU2MDYpO2Z1bmN0aW9uIGMoZ2Upe3JldHVybihjPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJz''@;'; put 'put ''eW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGNlKXtyZXR1cm4gdHlwZW9mIGNlfTpmdW5jdGlvbihjZSl7cmV0dXJuIGNlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZjZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmY2UhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1i''@;'; put 'put ''b2wiOnR5cGVvZiBjZX0pKGdlKX1mdW5jdGlvbiBzKGdlLGNlKXtmb3IodmFyIGhlPTA7aGU8Y2UubGVuZ3RoO2hlKyspe3ZhciB3ZT1jZVtoZV07d2UuZW51bWVyYWJsZT13ZS5lbnVtZXJhYmxlfHwhMSx3ZS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHdlJiYod2Uud3JpdGFibGU9ITAp''@;'; put 'put ''LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnZSx2KHdlLmtleSksd2UpfX1mdW5jdGlvbiBBKGdlLGNlLGhlKXtyZXR1cm4gY2UmJnMoZ2UucHJvdG90eXBlLGNlKSxoZSYmcyhnZSxoZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGdlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGdlfWZ1bmN0''@;'; put 'put ''aW9uIHYoZ2Upe3ZhciBjZT1mdW5jdGlvbiBDKGdlLGNlKXtpZigib2JqZWN0IiE9PWMoZ2UpfHxudWxsPT09Z2UpcmV0dXJuIGdlO3ZhciBoZT1nZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWhlKXt2YXIgd2U9aGUuY2FsbChnZSxjZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0''@;'; put 'put ''IiE9PWMod2UpKXJldHVybiB3ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWNlP1N0cmluZzpOdW1iZXIpKGdlKX0oZ2UsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09YyhjZSk/''@;'; put 'put ''Y2U6U3RyaW5nKGNlKX12YXIga2UscWUsTD1oKDY5NTk3KS5jb2RlcyxSPUwuRVJSX0FNQklHVU9VU19BUkdVTUVOVCx4PUwuRVJSX0lOVkFMSURfQVJHX1RZUEUsVT1MLkVSUl9JTlZBTElEX0FSR19WQUxVRSxIPUwuRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFLFY9TC5FUlJfTUlTU0lOR19B''@;'; put 'put ''UkdTLE49aCgzOTE4KSxZPWgoNDA1MzcpLmluc3BlY3QsRj1oKDQwNTM3KS50eXBlcyxXPUYuaXNQcm9taXNlLHE9Ri5pc1JlZ0V4cCxyZT1oKDExNTE0KSgpLG1lPWgoOTM5NCkoKSxDZT1oKDM4MDc1KSgiUmVnRXhwLnByb3RvdHlwZS50ZXN0Iik7ZnVuY3Rpb24gaygpe3ZhciBnZT1oKDgy''@;'; put 'put ''Mjk5KTtrZT1nZS5pc0RlZXBFcXVhbCxxZT1nZS5pc0RlZXBTdHJpY3RFcXVhbH12YXIgRz0hMSxEPWZlLmV4cG9ydHM9X2UscD17fTtmdW5jdGlvbiBJKGdlKXt0aHJvdyBnZS5tZXNzYWdlIGluc3RhbmNlb2YgRXJyb3I/Z2UubWVzc2FnZTpuZXcgTihnZSl9ZnVuY3Rpb24gbmUoZ2UsY2Us''@;'; put 'put ''aGUsd2Upe2lmKCFoZSl7dmFyIEplPSExO2lmKDA9PT1jZSlKZT0hMCx3ZT0iTm8gdmFsdWUgYXJndW1lbnQgcGFzc2VkIHRvIGBhc3NlcnQub2soKWAiO2Vsc2UgaWYod2UgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyB3ZTt2YXIgdHQ9bmV3IE4oe2FjdHVhbDpoZSxleHBlY3RlZDohMCxtZXNz''@;'; put 'put ''YWdlOndlLG9wZXJhdG9yOiI9PSIsc3RhY2tTdGFydEZuOmdlfSk7dGhyb3cgdHQuZ2VuZXJhdGVkTWVzc2FnZT1KZSx0dH19ZnVuY3Rpb24gX2UoKXtmb3IodmFyIGdlPWFyZ3VtZW50cy5sZW5ndGgsY2U9bmV3IEFycmF5KGdlKSxoZT0wO2hlPGdlO2hlKyspY2VbaGVdPWFyZ3VtZW50c1to''@;'; put 'put ''ZV07bmUuYXBwbHkodm9pZCAwLFtfZSxjZS5sZW5ndGhdLmNvbmNhdChjZSkpfUQuZmFpbD1mdW5jdGlvbiB1ZShnZSxjZSxoZSx3ZSxKZSl7dmFyIEtlLHR0PWFyZ3VtZW50cy5sZW5ndGg7aWYoMD09PXR0P0tlPSJGYWlsZWQiOjE9PT10dD8oaGU9Z2UsZ2U9dm9pZCAwKTooITE9PT1HJiYo''@;'; put 'put ''Rz0hMCwoeS5lbWl0V2FybmluZz95LmVtaXRXYXJuaW5nOmNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpKSgiYXNzZXJ0LmZhaWwoKSB3aXRoIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBhc3NlcnQuc3RyaWN0RXF1YWwoKSBpbnN0ZWFkIG9yIG9u''@;'; put 'put ''bHkgcGFzcyBhIG1lc3NhZ2UuIiwiRGVwcmVjYXRpb25XYXJuaW5nIiwiREVQMDA5NCIpKSwyPT09dHQmJih3ZT0iIT0iKSksaGUgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBoZTt2YXIgUnQ9e2FjdHVhbDpnZSxleHBlY3RlZDpjZSxvcGVyYXRvcjp2b2lkIDA9PT13ZT8iZmFpbCI6d2Usc3Rh''@;'; put 'put ''Y2tTdGFydEZuOkplfHx1ZX07dm9pZCAwIT09aGUmJihSdC5tZXNzYWdlPWhlKTt2YXIgTHQ9bmV3IE4oUnQpO3Rocm93IEtlJiYoTHQubWVzc2FnZT1LZSxMdC5nZW5lcmF0ZWRNZXNzYWdlPSEwKSxMdH0sRC5Bc3NlcnRpb25FcnJvcj1OLEQub2s9X2UsRC5lcXVhbD1mdW5jdGlvbiBnZShj''@;'; put 'put ''ZSxoZSx3ZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBWKCJhY3R1YWwiLCJleHBlY3RlZCIpO2NlIT1oZSYmSSh7YWN0dWFsOmNlLGV4cGVjdGVkOmhlLG1lc3NhZ2U6d2Usb3BlcmF0b3I6Ij09IixzdGFja1N0YXJ0Rm46Z2V9KX0sRC5ub3RFcXVhbD1mdW5jdGlvbiBnZShj''@;'; put 'put ''ZSxoZSx3ZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBWKCJhY3R1YWwiLCJleHBlY3RlZCIpO2NlPT1oZSYmSSh7YWN0dWFsOmNlLGV4cGVjdGVkOmhlLG1lc3NhZ2U6d2Usb3BlcmF0b3I6IiE9IixzdGFja1N0YXJ0Rm46Z2V9KX0sRC5kZWVwRXF1YWw9ZnVuY3Rpb24gZ2Uo''@;'; put 'put ''Y2UsaGUsd2Upe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVigiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1rZSYmaygpLGtlKGNlLGhlKXx8SSh7YWN0dWFsOmNlLGV4cGVjdGVkOmhlLG1lc3NhZ2U6d2Usb3BlcmF0b3I6ImRlZXBFcXVhbCIsc3RhY2tTdGFydEZuOmdl''@;'; put 'put ''fSl9LEQubm90RGVlcEVxdWFsPWZ1bmN0aW9uIGdlKGNlLGhlLHdlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFYoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09a2UmJmsoKSxrZShjZSxoZSkmJkkoe2FjdHVhbDpjZSxleHBlY3RlZDpoZSxtZXNzYWdlOndlLG9wZXJh''@;'; put 'put ''dG9yOiJub3REZWVwRXF1YWwiLHN0YWNrU3RhcnRGbjpnZX0pfSxELmRlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbiBnZShjZSxoZSx3ZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBWKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PWtlJiZrKCkscWUoY2UsaGUpfHxJKHth''@;'; put 'put ''Y3R1YWw6Y2UsZXhwZWN0ZWQ6aGUsbWVzc2FnZTp3ZSxvcGVyYXRvcjoiZGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46Z2V9KX0sRC5ub3REZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24gUGUoZ2UsY2UsaGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVigiYWN0dWFsIiwi''@;'; put 'put ''ZXhwZWN0ZWQiKTt2b2lkIDA9PT1rZSYmaygpLHFlKGdlLGNlKSYmSSh7YWN0dWFsOmdlLGV4cGVjdGVkOmNlLG1lc3NhZ2U6aGUsb3BlcmF0b3I6Im5vdERlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOlBlfSl9LEQuc3RyaWN0RXF1YWw9ZnVuY3Rpb24gZ2UoY2UsaGUsd2Upe2lmKGFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVigiYWN0dWFsIiwiZXhwZWN0ZWQiKTttZShjZSxoZSl8fEkoe2FjdHVhbDpjZSxleHBlY3RlZDpoZSxtZXNzYWdlOndlLG9wZXJhdG9yOiJzdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOmdlfSl9LEQubm90U3RyaWN0RXF1YWw9ZnVuY3Rpb24g''@;'; put 'put ''Z2UoY2UsaGUsd2Upe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVigiYWN0dWFsIiwiZXhwZWN0ZWQiKTttZShjZSxoZSkmJkkoe2FjdHVhbDpjZSxleHBlY3RlZDpoZSxtZXNzYWdlOndlLG9wZXJhdG9yOiJub3RTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOmdlfSl9O3ZhciBv''@;'; put 'put ''dD1BKGZ1bmN0aW9uIGdlKGNlLGhlLHdlKXt2YXIgSmU9dGhpczsoZnVuY3Rpb24gdyhnZSxjZSl7aWYoIShnZSBpbnN0YW5jZW9mIGNlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsZ2UpLGhlLmZvckVhY2goZnVuY3Rp''@;'; put 'put ''b24odHQpe3R0IGluIGNlJiYoSmVbdHRdPXZvaWQgMCE9PXdlJiYic3RyaW5nIj09dHlwZW9mIHdlW3R0XSYmcShjZVt0dF0pJiZDZShjZVt0dF0sd2VbdHRdKT93ZVt0dF06Y2VbdHRdKX0pfSk7ZnVuY3Rpb24gZHQoZ2UsY2UsaGUsd2Upe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjZSl7aWYo''@;'; put 'put ''cShjZSkpcmV0dXJuIENlKGNlLGdlKTtpZigyPT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgeCgiZXhwZWN0ZWQiLFsiRnVuY3Rpb24iLCJSZWdFeHAiXSxjZSk7aWYoIm9iamVjdCIhPT1jKGdlKXx8bnVsbD09PWdlKXt2YXIgSmU9bmV3IE4oe2FjdHVhbDpnZSxleHBlY3RlZDpjZSxt''@;'; put 'put ''ZXNzYWdlOmhlLG9wZXJhdG9yOiJkZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjp3ZX0pO3Rocm93IEplLm9wZXJhdG9yPXdlLm5hbWUsSmV9dmFyIHR0PU9iamVjdC5rZXlzKGNlKTtpZihjZSBpbnN0YW5jZW9mIEVycm9yKXR0LnB1c2goIm5hbWUiLCJtZXNzYWdlIik7ZWxzZSBpZigw''@;'; put 'put ''PT09dHQubGVuZ3RoKXRocm93IG5ldyBVKCJlcnJvciIsY2UsIm1heSBub3QgYmUgYW4gZW1wdHkgb2JqZWN0Iik7cmV0dXJuIHZvaWQgMD09PWtlJiZrKCksdHQuZm9yRWFjaChmdW5jdGlvbihLZSl7InN0cmluZyI9PXR5cGVvZiBnZVtLZV0mJnEoY2VbS2VdKSYmQ2UoY2VbS2VdLGdlW0tl''@;'; put 'put ''XSl8fGZ1bmN0aW9uIGx0KGdlLGNlLGhlLHdlLEplLHR0KXtpZighKGhlIGluIGdlKXx8IXFlKGdlW2hlXSxjZVtoZV0pKXtpZighd2Upe3ZhciBLZT1uZXcgb3QoZ2UsSmUpLCR0PW5ldyBvdChjZSxKZSxnZSksUnQ9bmV3IE4oe2FjdHVhbDpLZSxleHBlY3RlZDokdCxvcGVyYXRvcjoiZGVl''@;'; put 'put ''cFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46dHR9KTt0aHJvdyBSdC5hY3R1YWw9Z2UsUnQuZXhwZWN0ZWQ9Y2UsUnQub3BlcmF0b3I9dHQubmFtZSxSdH1JKHthY3R1YWw6Z2UsZXhwZWN0ZWQ6Y2UsbWVzc2FnZTp3ZSxvcGVyYXRvcjp0dC5uYW1lLHN0YWNrU3RhcnRGbjp0dH0pfX0oZ2Us''@;'; put 'put ''Y2UsS2UsaGUsdHQsd2UpfSksITB9cmV0dXJuIHZvaWQgMCE9PWNlLnByb3RvdHlwZSYmZ2UgaW5zdGFuY2VvZiBjZXx8IUVycm9yLmlzUHJvdG90eXBlT2YoY2UpJiYhMD09PWNlLmNhbGwoe30sZ2UpfWZ1bmN0aW9uIFJlKGdlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZ2UpdGhyb3cgbmV3''@;'; put 'put ''IHgoImZuIiwiRnVuY3Rpb24iLGdlKTt0cnl7Z2UoKX1jYXRjaChjZSl7cmV0dXJuIGNlfXJldHVybiBwfWZ1bmN0aW9uIGFlKGdlKXtyZXR1cm4gVyhnZSl8fG51bGwhPT1nZSYmIm9iamVjdCI9PT1jKGdlKSYmImZ1bmN0aW9uIj09dHlwZW9mIGdlLnRoZW4mJiJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBnZS5jYXRjaH1mdW5jdGlvbiB4ZShnZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgY2U7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGdlKXtpZighYWUoY2U9Z2UoKSkpdGhyb3cgbmV3IEgoImluc3RhbmNlIG9mIFByb21pc2UiLCJwcm9taXNlRm4iLGNl''@;'; put 'put ''KX1lbHNle2lmKCFhZShnZSkpdGhyb3cgbmV3IHgoInByb21pc2VGbiIsWyJGdW5jdGlvbiIsIlByb21pc2UiXSxnZSk7Y2U9Z2V9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gY2V9KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHB9KS5jYXRjaChmdW5j''@;'; put 'put ''dGlvbihoZSl7cmV0dXJuIGhlfSl9KX1mdW5jdGlvbiBqZShnZSxjZSxoZSx3ZSl7aWYoInN0cmluZyI9PXR5cGVvZiBoZSl7aWYoND09PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IHgoImVycm9yIixbIk9iamVjdCIsIkVycm9yIiwiRnVuY3Rpb24iLCJSZWdFeHAiXSxoZSk7aWYoIm9i''@;'; put 'put ''amVjdCI9PT1jKGNlKSYmbnVsbCE9PWNlKXtpZihjZS5tZXNzYWdlPT09aGUpdGhyb3cgbmV3IFIoImVycm9yL21lc3NhZ2UiLCdUaGUgZXJyb3IgbWVzc2FnZSAiJy5jb25jYXQoY2UubWVzc2FnZSwnIiBpcyBpZGVudGljYWwgdG8gdGhlIG1lc3NhZ2UuJykpfWVsc2UgaWYoY2U9PT1oZSl0''@;'; put 'put ''aHJvdyBuZXcgUigiZXJyb3IvbWVzc2FnZSIsJ1RoZSBlcnJvciAiJy5jb25jYXQoY2UsJyIgaXMgaWRlbnRpY2FsIHRvIHRoZSBtZXNzYWdlLicpKTt3ZT1oZSxoZT12b2lkIDB9ZWxzZSBpZihudWxsIT1oZSYmIm9iamVjdCIhPT1jKGhlKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGhlKXRocm93''@;'; put 'put ''IG5ldyB4KCJlcnJvciIsWyJPYmplY3QiLCJFcnJvciIsIkZ1bmN0aW9uIiwiUmVnRXhwIl0saGUpO2lmKGNlPT09cCl7dmFyIEplPSIiO2hlJiZoZS5uYW1lJiYoSmUrPSIgKCIuY29uY2F0KGhlLm5hbWUsIikiKSksSmUrPXdlPyI6ICIuY29uY2F0KHdlKToiLiIsSSh7YWN0dWFsOnZvaWQg''@;'; put 'put ''MCxleHBlY3RlZDpoZSxvcGVyYXRvcjpnZS5uYW1lLG1lc3NhZ2U6Ik1pc3NpbmcgZXhwZWN0ZWQgIi5jb25jYXQoInJlamVjdHMiPT09Z2UubmFtZT8icmVqZWN0aW9uIjoiZXhjZXB0aW9uIikuY29uY2F0KEplKSxzdGFja1N0YXJ0Rm46Z2V9KX1pZihoZSYmIWR0KGNlLGhlLHdlLGdlKSl0''@;'; put 'put ''aHJvdyBjZX1mdW5jdGlvbiBBZShnZSxjZSxoZSx3ZSl7aWYoY2UhPT1wKXtpZigic3RyaW5nIj09dHlwZW9mIGhlJiYod2U9aGUsaGU9dm9pZCAwKSwhaGV8fGR0KGNlLGhlKSl7dmFyIEplPXdlPyI6ICIuY29uY2F0KHdlKToiLiI7SSh7YWN0dWFsOmNlLGV4cGVjdGVkOmhlLG9wZXJhdG9y''@;'; put 'put ''OmdlLm5hbWUsbWVzc2FnZToiR290IHVud2FudGVkICIuY29uY2F0KCJkb2VzTm90UmVqZWN0Ij09PWdlLm5hbWU/InJlamVjdGlvbiI6ImV4Y2VwdGlvbiIpLmNvbmNhdChKZSwiXG4iKSsnQWN0dWFsIG1lc3NhZ2U6ICInLmNvbmNhdChjZSYmY2UubWVzc2FnZSwnIicpLHN0YWNrU3RhcnRG''@;'; put 'put ''bjpnZX0pfXRocm93IGNlfX1mdW5jdGlvbiBEZShnZSxjZSxoZSx3ZSxKZSl7aWYoIXEoY2UpKXRocm93IG5ldyB4KCJyZWdleHAiLCJSZWdFeHAiLGNlKTt2YXIgdHQ9Im1hdGNoIj09PUplO2lmKCJzdHJpbmciIT10eXBlb2YgZ2V8fENlKGNlLGdlKSE9PXR0KXtpZihoZSBpbnN0YW5jZW9m''@;'; put 'put ''IEVycm9yKXRocm93IGhlO3ZhciBLZT0haGU7aGU9aGV8fCgic3RyaW5nIiE9dHlwZW9mIGdlPydUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSAnKyIiLmNvbmNhdChjKGdlKSwiICgiKS5jb25jYXQoWShnZSksIikiKToodHQ/IlRo''@;'; put 'put ''ZSBpbnB1dCBkaWQgbm90IG1hdGNoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gIjoiVGhlIGlucHV0IHdhcyBleHBlY3RlZCB0byBub3QgbWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAiKSsiIi5jb25jYXQoWShjZSksIi4gSW5wdXQ6XG5cbiIpLmNvbmNhdChZKGdlKSwiXG4iKSk7dmFy''@;'; put 'put ''ICR0PW5ldyBOKHthY3R1YWw6Z2UsZXhwZWN0ZWQ6Y2UsbWVzc2FnZTpoZSxvcGVyYXRvcjpKZSxzdGFja1N0YXJ0Rm46d2V9KTt0aHJvdyAkdC5nZW5lcmF0ZWRNZXNzYWdlPUtlLCR0fX1mdW5jdGlvbiBGZSgpe2Zvcih2YXIgZ2U9YXJndW1lbnRzLmxlbmd0aCxjZT1uZXcgQXJyYXkoZ2Up''@;'; put 'put ''LGhlPTA7aGU8Z2U7aGUrKyljZVtoZV09YXJndW1lbnRzW2hlXTtuZS5hcHBseSh2b2lkIDAsW0ZlLGNlLmxlbmd0aF0uY29uY2F0KGNlKSl9RC50aHJvd3M9ZnVuY3Rpb24gZ2UoY2Upe2Zvcih2YXIgaGU9YXJndW1lbnRzLmxlbmd0aCx3ZT1uZXcgQXJyYXkoaGU+MT9oZS0xOjApLEplPTE7''@;'; put 'put ''SmU8aGU7SmUrKyl3ZVtKZS0xXT1hcmd1bWVudHNbSmVdO2plLmFwcGx5KHZvaWQgMCxbZ2UsUmUoY2UpXS5jb25jYXQod2UpKX0sRC5yZWplY3RzPWZ1bmN0aW9uIGdlKGNlKXtmb3IodmFyIGhlPWFyZ3VtZW50cy5sZW5ndGgsd2U9bmV3IEFycmF5KGhlPjE/aGUtMTowKSxKZT0xO0plPGhl''@;'; put 'put ''O0plKyspd2VbSmUtMV09YXJndW1lbnRzW0plXTtyZXR1cm4geGUoY2UpLnRoZW4oZnVuY3Rpb24odHQpe3JldHVybiBqZS5hcHBseSh2b2lkIDAsW2dlLHR0XS5jb25jYXQod2UpKX0pfSxELmRvZXNOb3RUaHJvdz1mdW5jdGlvbiBnZShjZSl7Zm9yKHZhciBoZT1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''LHdlPW5ldyBBcnJheShoZT4xP2hlLTE6MCksSmU9MTtKZTxoZTtKZSsrKXdlW0plLTFdPWFyZ3VtZW50c1tKZV07QWUuYXBwbHkodm9pZCAwLFtnZSxSZShjZSldLmNvbmNhdCh3ZSkpfSxELmRvZXNOb3RSZWplY3Q9ZnVuY3Rpb24gZ2UoY2Upe2Zvcih2YXIgaGU9YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aCx3ZT1uZXcgQXJyYXkoaGU+MT9oZS0xOjApLEplPTE7SmU8aGU7SmUrKyl3ZVtKZS0xXT1hcmd1bWVudHNbSmVdO3JldHVybiB4ZShjZSkudGhlbihmdW5jdGlvbih0dCl7cmV0dXJuIEFlLmFwcGx5KHZvaWQgMCxbZ2UsdHRdLmNvbmNhdCh3ZSkpfSl9LEQuaWZFcnJvcj1mdW5jdGlvbiBn''@;'; put 'put ''ZShjZSl7aWYobnVsbCE9Y2Upe3ZhciBoZT0iaWZFcnJvciBnb3QgdW53YW50ZWQgZXhjZXB0aW9uOiAiOyJvYmplY3QiPT09YyhjZSkmJiJzdHJpbmciPT10eXBlb2YgY2UubWVzc2FnZT9oZSs9MD09PWNlLm1lc3NhZ2UubGVuZ3RoJiZjZS5jb25zdHJ1Y3Rvcj9jZS5jb25zdHJ1Y3Rvci5u''@;'; put 'put ''YW1lOmNlLm1lc3NhZ2U6aGUrPVkoY2UpO3ZhciB3ZT1uZXcgTih7YWN0dWFsOmNlLGV4cGVjdGVkOm51bGwsb3BlcmF0b3I6ImlmRXJyb3IiLG1lc3NhZ2U6aGUsc3RhY2tTdGFydEZuOmdlfSksSmU9Y2Uuc3RhY2s7aWYoInN0cmluZyI9PXR5cGVvZiBKZSl7dmFyIHR0PUplLnNwbGl0KCJc''@;'; put 'put ''biIpO3R0LnNoaWZ0KCk7Zm9yKHZhciBLZT13ZS5zdGFjay5zcGxpdCgiXG4iKSwkdD0wOyR0PHR0Lmxlbmd0aDskdCsrKXt2YXIgUnQ9S2UuaW5kZXhPZih0dFskdF0pO2lmKC0xIT09UnQpe0tlPUtlLnNsaWNlKDAsUnQpO2JyZWFrfX13ZS5zdGFjaz0iIi5jb25jYXQoS2Uuam9pbigiXG4i''@;'; put 'put ''KSwiXG4iKS5jb25jYXQodHQuam9pbigiXG4iKSl9dGhyb3cgd2V9fSxELm1hdGNoPWZ1bmN0aW9uIGdlKGNlLGhlLHdlKXtEZShjZSxoZSx3ZSxnZSwibWF0Y2giKX0sRC5kb2VzTm90TWF0Y2g9ZnVuY3Rpb24gZ2UoY2UsaGUsd2Upe0RlKGNlLGhlLHdlLGdlLCJkb2VzTm90TWF0Y2giKX0s''@;'; put 'put ''RC5zdHJpY3Q9cmUoRmUsRCx7ZXF1YWw6RC5zdHJpY3RFcXVhbCxkZWVwRXF1YWw6RC5kZWVwU3RyaWN0RXF1YWwsbm90RXF1YWw6RC5ub3RTdHJpY3RFcXVhbCxub3REZWVwRXF1YWw6RC5ub3REZWVwU3RyaWN0RXF1YWx9KSxELnN0cmljdC5zdHJpY3Q9RC5zdHJpY3R9LDM5MTgoZmUsaixo''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIHk9aCg2NTYwNik7ZnVuY3Rpb24gYyhJLHVlKXt2YXIgbmU9T2JqZWN0LmtleXMoSSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIF9lPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoSSk7dWUmJihfZT1fZS5maWx0ZXIoZnVuY3Rp''@;'; put 'put ''b24oUGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEksUGUpLmVudW1lcmFibGV9KSksbmUucHVzaC5hcHBseShuZSxfZSl9cmV0dXJuIG5lfWZ1bmN0aW9uIHMoSSl7Zm9yKHZhciB1ZT0xO3VlPGFyZ3VtZW50cy5sZW5ndGg7dWUrKyl7dmFyIG5lPW51bGwhPWFy''@;'; put 'put ''Z3VtZW50c1t1ZV0/YXJndW1lbnRzW3VlXTp7fTt1ZSUyP2MoT2JqZWN0KG5lKSwhMCkuZm9yRWFjaChmdW5jdGlvbihfZSl7QShJLF9lLG5lW19lXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJLE9iamVjdC5nZXRPd25Qcm9w''@;'; put 'put ''ZXJ0eURlc2NyaXB0b3JzKG5lKSk6YyhPYmplY3QobmUpKS5mb3JFYWNoKGZ1bmN0aW9uKF9lKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoSSxfZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5lLF9lKSl9KX1yZXR1cm4gSX1mdW5jdGlvbiBBKEksdWUsbmUpe3JldHVybih1ZT1T''@;'; put 'put ''KHVlKSlpbiBJP09iamVjdC5kZWZpbmVQcm9wZXJ0eShJLHVlLHt2YWx1ZTpuZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOklbdWVdPW5lLEl9ZnVuY3Rpb24gQyhJLHVlKXtmb3IodmFyIG5lPTA7bmU8dWUubGVuZ3RoO25lKyspe3ZhciBfZT11ZVtuZV07''@;'; put 'put ''X2UuZW51bWVyYWJsZT1fZS5lbnVtZXJhYmxlfHwhMSxfZS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIF9lJiYoX2Uud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLFMoX2Uua2V5KSxfZSl9fWZ1bmN0aW9uIFMoSSl7dmFyIHVlPWZ1bmN0aW9uIEwoSSx1ZSl7aWYoIm9i''@;'; put 'put ''amVjdCIhPT1xKEkpfHxudWxsPT09SSlyZXR1cm4gSTt2YXIgbmU9SVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PW5lKXt2YXIgX2U9bmUuY2FsbChJLHVlfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09cShfZSkpcmV0dXJuIF9lO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Q''@;'; put 'put ''cmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dWU/U3RyaW5nOk51bWJlcikoSSl9KEksInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09cSh1ZSk/dWU6U3RyaW5nKHVlKX1mdW5jdGlvbiBVKEksdWUpe2lmKHVlJiYoIm9iamVjdCI9''@;'; put 'put ''PT1xKHVlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIHVlKSlyZXR1cm4gdWU7aWYodm9pZCAwIT09dWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gSChJKX1mdW5jdGlvbiBIKEkpe2lm''@;'; put 'put ''KHZvaWQgMD09PUkpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gSX1mdW5jdGlvbiBWKEkpe3ZhciB1ZT0iZnVuY3Rpb24iPT10eXBlb2YgTWFwP25ldyBNYXA6dm9pZCAw''@;'; put 'put ''O3JldHVybiBWPWZ1bmN0aW9uKF9lKXtpZihudWxsPT09X2V8fCFmdW5jdGlvbiBZKEkpe3JldHVybi0xIT09RnVuY3Rpb24udG9TdHJpbmcuY2FsbChJKS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIil9KF9lKSlyZXR1cm4gX2U7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIF9lKXRocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7aWYodHlwZW9mIHVlPCJ1Iil7aWYodWUuaGFzKF9lKSlyZXR1cm4gdWUuZ2V0KF9lKTt1ZS5zZXQoX2UsUGUpfWZ1bmN0aW9uIFBlKCl7cmV0dXJuIE4oX2UsYXJndW1lbnRzLFco''@;'; put 'put ''dGhpcykuY29uc3RydWN0b3IpfXJldHVybiBQZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShfZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpQZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxGKFBlLF9lKX0sVihJKX1mdW5jdGlvbiBOKEksdWUs''@;'; put 'put ''bmUpe3JldHVybihOPXooKT9SZWZsZWN0LmNvbnN0cnVjdC5iaW5kKCk6ZnVuY3Rpb24oUGUsb3QsbHQpe3ZhciBkdD1bbnVsbF07ZHQucHVzaC5hcHBseShkdCxvdCk7dmFyIGFlPW5ldyhGdW5jdGlvbi5iaW5kLmFwcGx5KFBlLGR0KSk7cmV0dXJuIGx0JiZGKGFlLGx0LnByb3RvdHlwZSks''@;'; put 'put ''YWV9KS5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24geigpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJv''@;'; put 'put ''b2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBGKEksdWUpe3JldHVybihGPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmlu''@;'; put 'put ''ZCgpOmZ1bmN0aW9uKF9lLFBlKXtyZXR1cm4gX2UuX19wcm90b19fPVBlLF9lfSkoSSx1ZSl9ZnVuY3Rpb24gVyhJKXtyZXR1cm4oVz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihuZSl7cmV0dXJuIG5lLl9fcHJvdG9fX3x8T2Jq''@;'; put 'put ''ZWN0LmdldFByb3RvdHlwZU9mKG5lKX0pKEkpfWZ1bmN0aW9uIHEoSSl7cmV0dXJuKHE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odWUpe3JldHVybiB0eXBlb2YgdWV9OmZ1bmN0aW9uKHVlKXtyZXR1cm4gdWUm''@;'; put 'put ''JiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnVlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ1ZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHVlfSkoSSl9dmFyIG1lPWgoNDA1MzcpLmluc3BlY3QsSWU9aCg2OTU5NykuY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEU7ZnVu''@;'; put 'put ''Y3Rpb24ga2UoSSx1ZSxuZSl7cmV0dXJuKHZvaWQgMD09PW5lfHxuZT5JLmxlbmd0aCkmJihuZT1JLmxlbmd0aCksSS5zdWJzdHJpbmcobmUtdWUubGVuZ3RoLG5lKT09PXVlfXZhciBYPSIiLGY9IiIsYj0iIixrPSIiLE09e2RlZXBTdHJpY3RFcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJl''@;'; put 'put ''IHN0cmljdGx5IGRlZXAtZXF1YWw6IixzdHJpY3RFcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIHN0cmljdGx5IGVxdWFsOiIsc3RyaWN0RXF1YWxPYmplY3Q6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIHJlZmVyZW5jZS1lcXVhbCB0byAiZXhwZWN0ZWQiOicsZGVlcEVxdWFsOiJFeHBl''@;'; put 'put ''Y3RlZCB2YWx1ZXMgdG8gYmUgbG9vc2VseSBkZWVwLWVxdWFsOiIsZXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBsb29zZWx5IGVxdWFsOiIsbm90RGVlcFN0cmljdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiBub3QgdG8gYmUgc3RyaWN0bHkgZGVlcC1lcXVhbCB0bzonLG5vdFN0cmlj''@;'; put 'put ''dEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSBzdHJpY3RseSB1bmVxdWFsIHRvOicsbm90U3RyaWN0RXF1YWxPYmplY3Q6J0V4cGVjdGVkICJhY3R1YWwiIG5vdCB0byBiZSByZWZlcmVuY2UtZXF1YWwgdG8gImV4cGVjdGVkIjonLG5vdERlZXBFcXVhbDonRXhwZWN0ZWQgImFjdHVh''@;'; put 'put ''bCIgbm90IHRvIGJlIGxvb3NlbHkgZGVlcC1lcXVhbCB0bzonLG5vdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSBsb29zZWx5IHVuZXF1YWwgdG86Jyxub3RJZGVudGljYWw6IlZhbHVlcyBpZGVudGljYWwgYnV0IG5vdCByZWZlcmVuY2UtZXF1YWw6In07ZnVuY3Rpb24gSyhJKXt2''@;'; put 'put ''YXIgdWU9T2JqZWN0LmtleXMoSSksbmU9T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoSSkpO3JldHVybiB1ZS5mb3JFYWNoKGZ1bmN0aW9uKF9lKXtuZVtfZV09SVtfZV19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobmUsIm1lc3NhZ2UiLHt2YWx1ZTpJLm1lc3NhZ2V9KSxu''@;'; put 'put ''ZX1mdW5jdGlvbiBHKEkpe3JldHVybiBtZShJLHtjb21wYWN0OiExLGN1c3RvbUluc3BlY3Q6ITEsZGVwdGg6MWUzLG1heEFycmF5TGVuZ3RoOjEvMCxzaG93SGlkZGVuOiExLGJyZWFrTGVuZ3RoOjEvMCxzaG93UHJveHk6ITEsc29ydGVkOiEwLGdldHRlcnM6ITB9KX12YXIgcD1mdW5jdGlv''@;'; put 'put ''bihJLHVlKXshZnVuY3Rpb24gUihJLHVlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdWUmJm51bGwhPT11ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO0kucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodWUm''@;'; put 'put ''JnVlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOkksd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHVlJiZGKEksdWUpfShfZSxJKTt2YXIgbmU9ZnVuY3Rpb24geChJKXt2YXIgdWU9''@;'; put 'put ''eigpO3JldHVybiBmdW5jdGlvbigpe3ZhciBQZSxfZT1XKEkpO2lmKHVlKXt2YXIgb3Q9Vyh0aGlzKS5jb25zdHJ1Y3RvcjtQZT1SZWZsZWN0LmNvbnN0cnVjdChfZSxhcmd1bWVudHMsb3QpfWVsc2UgUGU9X2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBVKHRoaXMsUGUpfX0oX2Up''@;'; put 'put ''O2Z1bmN0aW9uIF9lKFBlKXt2YXIgb3Q7aWYoZnVuY3Rpb24gdihJLHVlKXtpZighKEkgaW5zdGFuY2VvZiB1ZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsX2UpLCJvYmplY3QiIT09cShQZSl8fG51bGw9PT1QZSl0aHJv''@;'; put 'put ''dyBuZXcgSWUoIm9wdGlvbnMiLCJPYmplY3QiLFBlKTt2YXIgbHQ9UGUubWVzc2FnZSxkdD1QZS5vcGVyYXRvcixSZT1QZS5zdGFja1N0YXJ0Rm4sYWU9UGUuYWN0dWFsLHhlPVBlLmV4cGVjdGVkLGplPUVycm9yLnN0YWNrVHJhY2VMaW1pdDtpZihFcnJvci5zdGFja1RyYWNlTGltaXQ9MCxu''@;'; put 'put ''dWxsIT1sdClvdD1uZS5jYWxsKHRoaXMsU3RyaW5nKGx0KSk7ZWxzZSBpZih5LnN0ZGVyciYmeS5zdGRlcnIuaXNUVFkmJih5LnN0ZGVyciYmeS5zdGRlcnIuZ2V0Q29sb3JEZXB0aCYmMSE9PXkuc3RkZXJyLmdldENvbG9yRGVwdGgoKT8oWD0iXHgxYlszNG0iLGY9Ilx4MWJbMzJtIixrPSJc''@;'; put 'put ''eDFiWzM5bSIsYj0iXHgxYlszMW0iKTooWD0iIixmPSIiLGs9IiIsYj0iIikpLCJvYmplY3QiPT09cShhZSkmJm51bGwhPT1hZSYmIm9iamVjdCI9PT1xKHhlKSYmbnVsbCE9PXhlJiYic3RhY2siaW4gYWUmJmFlIGluc3RhbmNlb2YgRXJyb3ImJiJzdGFjayJpbiB4ZSYmeGUgaW5zdGFuY2Vv''@;'; put 'put ''ZiBFcnJvciYmKGFlPUsoYWUpLHhlPUsoeGUpKSwiZGVlcFN0cmljdEVxdWFsIj09PWR0fHwic3RyaWN0RXF1YWwiPT09ZHQpb3Q9bmUuY2FsbCh0aGlzLGZ1bmN0aW9uIEQoSSx1ZSxuZSl7dmFyIF9lPSIiLFBlPSIiLG90PTAsbHQ9IiIsZHQ9ITEsUmU9RyhJKSxhZT1SZS5zcGxpdCgiXG4i''@;'; put 'put ''KSx4ZT1HKHVlKS5zcGxpdCgiXG4iKSxqZT0wLEFlPSIiO2lmKCJzdHJpY3RFcXVhbCI9PT1uZSYmIm9iamVjdCI9PT1xKEkpJiYib2JqZWN0Ij09PXEodWUpJiZudWxsIT09SSYmbnVsbCE9PXVlJiYobmU9InN0cmljdEVxdWFsT2JqZWN0IiksMT09PWFlLmxlbmd0aCYmMT09PXhlLmxlbmd0''@;'; put 'put ''aCYmYWVbMF0hPT14ZVswXSl7dmFyIERlPWFlWzBdLmxlbmd0aCt4ZVswXS5sZW5ndGg7aWYoRGU8PTEwKXtpZighKCJvYmplY3QiPT09cShJKSYmbnVsbCE9PUl8fCJvYmplY3QiPT09cSh1ZSkmJm51bGwhPT11ZXx8MD09PUkmJjA9PT11ZSkpcmV0dXJuIiIuY29uY2F0KE1bbmVdLCJcblxu''@;'; put 'put ''IikrIiIuY29uY2F0KGFlWzBdLCIgIT09ICIpLmNvbmNhdCh4ZVswXSwiXG4iKX1lbHNlIGlmKCJzdHJpY3RFcXVhbE9iamVjdCIhPT1uZSYmRGU8KHkuc3RkZXJyJiZ5LnN0ZGVyci5pc1RUWT95LnN0ZGVyci5jb2x1bW5zOjgwKSl7Zm9yKDthZVswXVtqZV09PT14ZVswXVtqZV07KWplKys7''@;'; put 'put ''amU+MiYmKEFlPSJcbiAgIi5jb25jYXQoZnVuY3Rpb24gcWUoSSx1ZSl7aWYodWU9TWF0aC5mbG9vcih1ZSksMD09SS5sZW5ndGh8fDA9PXVlKXJldHVybiIiO3ZhciBuZT1JLmxlbmd0aCp1ZTtmb3IodWU9TWF0aC5mbG9vcihNYXRoLmxvZyh1ZSkvTWF0aC5sb2coMikpO3VlOylJKz1JLHVl''@;'; put 'put ''LS07cmV0dXJuIEkrSS5zdWJzdHJpbmcoMCxuZS1JLmxlbmd0aCl9KCIgIixqZSksIl4iKSxqZT0wKX19Zm9yKHZhciBnZT1hZVthZS5sZW5ndGgtMV0sY2U9eGVbeGUubGVuZ3RoLTFdO2dlPT09Y2UmJihqZSsrPDI/bHQ9IlxuICAiLmNvbmNhdChnZSkuY29uY2F0KGx0KTpfZT1nZSxhZS5w''@;'; put 'put ''b3AoKSx4ZS5wb3AoKSwwIT09YWUubGVuZ3RoJiYwIT09eGUubGVuZ3RoKTspZ2U9YWVbYWUubGVuZ3RoLTFdLGNlPXhlW3hlLmxlbmd0aC0xXTt2YXIgaGU9TWF0aC5tYXgoYWUubGVuZ3RoLHhlLmxlbmd0aCk7aWYoMD09PWhlKXt2YXIgd2U9UmUuc3BsaXQoIlxuIik7aWYod2UubGVuZ3Ro''@;'; put 'put ''PjMwKWZvcih3ZVsyNl09IiIuY29uY2F0KFgsIi4uLiIpLmNvbmNhdChrKTt3ZS5sZW5ndGg+Mjc7KXdlLnBvcCgpO3JldHVybiIiLmNvbmNhdChNLm5vdElkZW50aWNhbCwiXG5cbiIpLmNvbmNhdCh3ZS5qb2luKCJcbiIpLCJcbiIpfWplPjMmJihsdD0iXG4iLmNvbmNhdChYLCIuLi4iKS5j''@;'; put 'put ''b25jYXQoaykuY29uY2F0KGx0KSxkdD0hMCksIiIhPT1fZSYmKGx0PSJcbiAgIi5jb25jYXQoX2UpLmNvbmNhdChsdCksX2U9IiIpO3ZhciBKZT0wLHR0PU1bbmVdKyJcbiIuY29uY2F0KGYsIisgYWN0dWFsIikuY29uY2F0KGssIiAiKS5jb25jYXQoYiwiLSBleHBlY3RlZCIpLmNvbmNhdChr''@;'; put 'put ''KSxLZT0iICIuY29uY2F0KFgsIi4uLiIpLmNvbmNhdChrLCIgTGluZXMgc2tpcHBlZCIpO2ZvcihqZT0wO2plPGhlO2plKyspe3ZhciAkdD1qZS1vdDtpZihhZS5sZW5ndGg8amUrMSkkdD4xJiZqZT4yJiYoJHQ+ND8oUGUrPSJcbiIuY29uY2F0KFgsIi4uLiIpLmNvbmNhdChrKSxkdD0hMCk6''@;'; put 'put ''JHQ+MyYmKFBlKz0iXG4gICIuY29uY2F0KHhlW2plLTJdKSxKZSsrKSxQZSs9IlxuICAiLmNvbmNhdCh4ZVtqZS0xXSksSmUrKyksb3Q9amUsX2UrPSJcbiIuY29uY2F0KGIsIi0iKS5jb25jYXQoaywiICIpLmNvbmNhdCh4ZVtqZV0pLEplKys7ZWxzZSBpZih4ZS5sZW5ndGg8amUrMSkkdD4x''@;'; put 'put ''JiZqZT4yJiYoJHQ+ND8oUGUrPSJcbiIuY29uY2F0KFgsIi4uLiIpLmNvbmNhdChrKSxkdD0hMCk6JHQ+MyYmKFBlKz0iXG4gICIuY29uY2F0KGFlW2plLTJdKSxKZSsrKSxQZSs9IlxuICAiLmNvbmNhdChhZVtqZS0xXSksSmUrKyksb3Q9amUsUGUrPSJcbiIuY29uY2F0KGYsIisiKS5jb25j''@;'; put 'put ''YXQoaywiICIpLmNvbmNhdChhZVtqZV0pLEplKys7ZWxzZXt2YXIgUnQ9eGVbamVdLEx0PWFlW2plXSxHdD1MdCE9PVJ0JiYoIWtlKEx0LCIsIil8fEx0LnNsaWNlKDAsLTEpIT09UnQpO0d0JiZrZShSdCwiLCIpJiZSdC5zbGljZSgwLC0xKT09PUx0JiYoR3Q9ITEsTHQrPSIsIiksR3Q/KCR0''@;'; put 'put ''PjEmJmplPjImJigkdD40PyhQZSs9IlxuIi5jb25jYXQoWCwiLi4uIikuY29uY2F0KGspLGR0PSEwKTokdD4zJiYoUGUrPSJcbiAgIi5jb25jYXQoYWVbamUtMl0pLEplKyspLFBlKz0iXG4gICIuY29uY2F0KGFlW2plLTFdKSxKZSsrKSxvdD1qZSxQZSs9IlxuIi5jb25jYXQoZiwiKyIpLmNv''@;'; put 'put ''bmNhdChrLCIgIikuY29uY2F0KEx0KSxfZSs9IlxuIi5jb25jYXQoYiwiLSIpLmNvbmNhdChrLCIgIikuY29uY2F0KFJ0KSxKZSs9Mik6KFBlKz1fZSxfZT0iIiwoMT09PSR0fHwwPT09amUpJiYoUGUrPSJcbiAgIi5jb25jYXQoTHQpLEplKyspKX1pZihKZT4yMCYmamU8aGUtMilyZXR1cm4i''@;'; put 'put ''Ii5jb25jYXQodHQpLmNvbmNhdChLZSwiXG4iKS5jb25jYXQoUGUsIlxuIikuY29uY2F0KFgsIi4uLiIpLmNvbmNhdChrKS5jb25jYXQoX2UsIlxuIikrIiIuY29uY2F0KFgsIi4uLiIpLmNvbmNhdChrKX1yZXR1cm4iIi5jb25jYXQodHQpLmNvbmNhdChkdD9LZToiIiwiXG4iKS5jb25jYXQo''@;'; put 'put ''UGUpLmNvbmNhdChfZSkuY29uY2F0KGx0KS5jb25jYXQoQWUpfShhZSx4ZSxkdCkpO2Vsc2UgaWYoIm5vdERlZXBTdHJpY3RFcXVhbCI9PT1kdHx8Im5vdFN0cmljdEVxdWFsIj09PWR0KXt2YXIgQWU9TVtkdF0sRGU9RyhhZSkuc3BsaXQoIlxuIik7aWYoIm5vdFN0cmljdEVxdWFsIj09PWR0''@;'; put 'put ''JiYib2JqZWN0Ij09PXEoYWUpJiZudWxsIT09YWUmJihBZT1NLm5vdFN0cmljdEVxdWFsT2JqZWN0KSxEZS5sZW5ndGg+MzApZm9yKERlWzI2XT0iIi5jb25jYXQoWCwiLi4uIikuY29uY2F0KGspO0RlLmxlbmd0aD4yNzspRGUucG9wKCk7b3Q9bmUuY2FsbCh0aGlzLDE9PT1EZS5sZW5ndGg/''@;'; put 'put ''IiIuY29uY2F0KEFlLCIgIikuY29uY2F0KERlWzBdKToiIi5jb25jYXQoQWUsIlxuXG4iKS5jb25jYXQoRGUuam9pbigiXG4iKSwiXG4iKSl9ZWxzZXt2YXIgRmU9RyhhZSksZ2U9IiIsY2U9TVtkdF07Im5vdERlZXBFcXVhbCI9PT1kdHx8Im5vdEVxdWFsIj09PWR0PyhGZT0iIi5jb25jYXQo''@;'; put 'put ''TVtkdF0sIlxuXG4iKS5jb25jYXQoRmUpKS5sZW5ndGg+MTAyNCYmKEZlPSIiLmNvbmNhdChGZS5zbGljZSgwLDEwMjEpLCIuLi4iKSk6KGdlPSIiLmNvbmNhdChHKHhlKSksRmUubGVuZ3RoPjUxMiYmKEZlPSIiLmNvbmNhdChGZS5zbGljZSgwLDUwOSksIi4uLiIpKSxnZS5sZW5ndGg+NTEy''@;'; put 'put ''JiYoZ2U9IiIuY29uY2F0KGdlLnNsaWNlKDAsNTA5KSwiLi4uIikpLCJkZWVwRXF1YWwiPT09ZHR8fCJlcXVhbCI9PT1kdD9GZT0iIi5jb25jYXQoY2UsIlxuXG4iKS5jb25jYXQoRmUsIlxuXG5zaG91bGQgZXF1YWxcblxuIik6Z2U9IiAiLmNvbmNhdChkdCwiICIpLmNvbmNhdChnZSkpLG90''@;'; put 'put ''PW5lLmNhbGwodGhpcywiIi5jb25jYXQoRmUpLmNvbmNhdChnZSkpfXJldHVybiBFcnJvci5zdGFja1RyYWNlTGltaXQ9amUsb3QuZ2VuZXJhdGVkTWVzc2FnZT0hbHQsT2JqZWN0LmRlZmluZVByb3BlcnR5KEgob3QpLCJuYW1lIix7dmFsdWU6IkFzc2VydGlvbkVycm9yIFtFUlJfQVNTRVJU''@;'; put 'put ''SU9OXSIsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxvdC5jb2RlPSJFUlJfQVNTRVJUSU9OIixvdC5hY3R1YWw9YWUsb3QuZXhwZWN0ZWQ9eGUsb3Qub3BlcmF0b3I9ZHQsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNl''@;'; put 'put ''KEgob3QpLFJlKSxvdC5uYW1lPSJBc3NlcnRpb25FcnJvciIsVShvdCl9cmV0dXJuIGZ1bmN0aW9uIHcoSSx1ZSxuZSl7dWUmJkMoSS5wcm90b3R5cGUsdWUpLG5lJiZDKEksbmUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShfZSxbe2tleToi''@;'; put 'put ''dG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIiIuY29uY2F0KHRoaXMubmFtZSwiIFsiKS5jb25jYXQodGhpcy5jb2RlLCJdOiAiKS5jb25jYXQodGhpcy5tZXNzYWdlKX19LHtrZXk6dWUsdmFsdWU6ZnVuY3Rpb24ob3QsbHQpe3JldHVybiBtZSh0aGlzLHMocyh7fSxsdCkse30s''@;'; put 'put ''e2N1c3RvbUluc3BlY3Q6ITEsZGVwdGg6MH0pKX19XSksX2V9KFYoRXJyb3IpLG1lLmN1c3RvbSk7ZmUuZXhwb3J0cz1wfSw2OTU5NyhmZSxqLGgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB5KG1lKXtyZXR1cm4oeT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9m''@;'; put 'put ''IFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihDZSl7cmV0dXJuIHR5cGVvZiBDZX06ZnVuY3Rpb24oQ2Upe3JldHVybiBDZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmQ2UuY29uc3RydWN0b3I9PT1TeW1ib2wmJkNlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgQ2V9''@;'; put 'put ''KShtZSl9ZnVuY3Rpb24gYyhtZSxDZSl7Zm9yKHZhciBJZT0wO0llPENlLmxlbmd0aDtJZSsrKXt2YXIga2U9Q2VbSWVdO2tlLmVudW1lcmFibGU9a2UuZW51bWVyYWJsZXx8ITEsa2UuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBrZSYmKGtlLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkobWUsQShrZS5rZXkpLGtlKX19ZnVuY3Rpb24gQShtZSl7dmFyIENlPWZ1bmN0aW9uIHYobWUsQ2Upe2lmKCJvYmplY3QiIT09eShtZSl8fG51bGw9PT1tZSlyZXR1cm4gbWU7dmFyIEllPW1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09SWUpe3ZhciBrZT1JZS5j''@;'; put 'put ''YWxsKG1lLENlfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09eShrZSkpcmV0dXJuIGtlO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09Q2U/U3RyaW5nOk51bWJlcikobWUpfShtZSwi''@;'; put 'put ''c3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT15KENlKT9DZTpTdHJpbmcoQ2UpfWZ1bmN0aW9uIFMobWUsQ2Upe3JldHVybihTPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGtlLHFlKXtyZXR1cm4ga2UuX19wcm90b19fPXFlLGtl''@;'; put 'put ''fSkobWUsQ2UpfWZ1bmN0aW9uIEgobWUpe3JldHVybihIPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKEllKXtyZXR1cm4gSWUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoSWUpfSkobWUpfXZhciBOLHosVj17fTtm''@;'; put 'put ''dW5jdGlvbiBZKG1lLENlLEllKXtJZXx8KEllPUVycm9yKTt2YXIgcWU9ZnVuY3Rpb24oWCl7IWZ1bmN0aW9uIHcobWUsQ2Upe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBDZSYmbnVsbCE9PUNlKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVs''@;'; put 'put ''bCBvciBhIGZ1bmN0aW9uIik7bWUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQ2UmJkNlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOm1lLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobWUsInByb3RvdHlwZSIse3dyaXRhYmxlOiEx''@;'; put 'put ''fSksQ2UmJlMobWUsQ2UpfShiLFgpO3ZhciBmPWZ1bmN0aW9uIEwobWUpe3ZhciBDZT1mdW5jdGlvbiBVKCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5''@;'; put 'put ''KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBxZSxrZT1IKG1lKTtpZihDZSl7dmFyIFg9''@;'; put 'put ''SCh0aGlzKS5jb25zdHJ1Y3RvcjtxZT1SZWZsZWN0LmNvbnN0cnVjdChrZSxhcmd1bWVudHMsWCl9ZWxzZSBxZT1rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIFIobWUsQ2Upe2lmKENlJiYoIm9iamVjdCI9PT15KENlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIENlKSly''@;'; put 'put ''ZXR1cm4gQ2U7aWYodm9pZCAwIT09Q2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24geChtZSl7aWYodm9pZCAwPT09bWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9y''@;'; put 'put ''KCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbWV9KG1lKX0odGhpcyxxZSl9fShiKTtmdW5jdGlvbiBiKGssTSxCKXt2YXIgSztyZXR1cm4gZnVuY3Rpb24gQyhtZSxDZSl7aWYoIShtZSBpbnN0YW5jZW9mIENlKSl0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxiKSxLPWYuY2FsbCh0aGlzLGZ1bmN0aW9uIGtlKFgsZixiKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIENlP0NlOkNlKFgsZixiKX0oayxNLEIpKSxLLmNvZGU9bWUsS31yZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24gcyhtZSxDZSxJZSl7cmV0dXJuIENlJiZjKG1lLnByb3RvdHlwZSxDZSksSWUmJmMobWUsSWUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxtZX0oYil9KEllKTtWW21lXT1xZX1mdW5jdGlvbiBGKG1lLENlKXtpZihBcnJheS5p''@;'; put 'put ''c0FycmF5KG1lKSl7dmFyIEllPW1lLmxlbmd0aDtyZXR1cm4gbWU9bWUubWFwKGZ1bmN0aW9uKGtlKXtyZXR1cm4gU3RyaW5nKGtlKX0pLEllPjI/Im9uZSBvZiAiLmNvbmNhdChDZSwiICIpLmNvbmNhdChtZS5zbGljZSgwLEllLTEpLmpvaW4oIiwgIiksIiwgb3IgIikrbWVbSWUtMV06Mj09''@;'; put 'put ''PUllPyJvbmUgb2YgIi5jb25jYXQoQ2UsIiAiKS5jb25jYXQobWVbMF0sIiBvciAiKS5jb25jYXQobWVbMV0pOiJvZiAiLmNvbmNhdChDZSwiICIpLmNvbmNhdChtZVswXSl9cmV0dXJuIm9mICIuY29uY2F0KENlLCIgIikuY29uY2F0KFN0cmluZyhtZSkpfVkoIkVSUl9BTUJJR1VPVVNfQVJH''@;'; put 'put ''VU1FTlQiLCdUaGUgIiVzIiBhcmd1bWVudCBpcyBhbWJpZ3VvdXMuICVzJyxUeXBlRXJyb3IpLFkoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihtZSxDZSxJZSl7dmFyIGtlLHFlO2lmKHZvaWQgMD09PU4mJihOPWgoOTQxNDgpKSxOKCJzdHJpbmciPT10eXBlb2YgbWUsIiduYW1l''@;'; put 'put ''JyBtdXN0IGJlIGEgc3RyaW5nIiksInN0cmluZyI9PXR5cGVvZiBDZSYmZnVuY3Rpb24gVyhtZSxDZSxJZSl7cmV0dXJuIG1lLnN1YnN0cighSWV8fEllPDA/MDorSWUsQ2UubGVuZ3RoKT09PUNlfShDZSwibm90ICIpPyhrZT0ibXVzdCBub3QgYmUiLENlPUNlLnJlcGxhY2UoL15ub3QgLywi''@;'; put 'put ''IikpOmtlPSJtdXN0IGJlIixmdW5jdGlvbiBxKG1lLENlLEllKXtyZXR1cm4odm9pZCAwPT09SWV8fEllPm1lLmxlbmd0aCkmJihJZT1tZS5sZW5ndGgpLG1lLnN1YnN0cmluZyhJZS1DZS5sZW5ndGgsSWUpPT09Q2V9KG1lLCIgYXJndW1lbnQiKSlxZT0iVGhlICIuY29uY2F0KG1lLCIgIiku''@;'; put 'put ''Y29uY2F0KGtlLCIgIikuY29uY2F0KEYoQ2UsInR5cGUiKSk7ZWxzZXt2YXIgWD1mdW5jdGlvbiByZShtZSxDZSxJZSl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBJZSYmKEllPTApLCEoSWUrQ2UubGVuZ3RoPm1lLmxlbmd0aCkmJi0xIT09bWUuaW5kZXhPZihDZSxJZSl9KG1lLCIuIik/InBy''@;'; put 'put ''b3BlcnR5IjoiYXJndW1lbnQiO3FlPSdUaGUgIicuY29uY2F0KG1lLCciICcpLmNvbmNhdChYLCIgIikuY29uY2F0KGtlLCIgIikuY29uY2F0KEYoQ2UsInR5cGUiKSl9cmV0dXJuIHFlKyIuIFJlY2VpdmVkIHR5cGUgIi5jb25jYXQoeShJZSkpfSxUeXBlRXJyb3IpLFkoIkVSUl9JTlZBTElE''@;'; put 'put ''X0FSR19WQUxVRSIsZnVuY3Rpb24obWUsQ2Upe3ZhciBJZT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06ImlzIGludmFsaWQiO3ZvaWQgMD09PXomJih6PWgoNDA1MzcpKTt2YXIga2U9ei5pbnNwZWN0KENlKTtyZXR1cm4ga2UubGVuZ3Ro''@;'; put 'put ''PjEyOCYmKGtlPSIiLmNvbmNhdChrZS5zbGljZSgwLDEyOCksIi4uLiIpKSwiVGhlIGFyZ3VtZW50ICciLmNvbmNhdChtZSwiJyAiKS5jb25jYXQoSWUsIi4gUmVjZWl2ZWQgIikuY29uY2F0KGtlKX0sVHlwZUVycm9yLFJhbmdlRXJyb3IpLFkoIkVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSIs''@;'; put 'put ''ZnVuY3Rpb24obWUsQ2UsSWUpe3ZhciBrZTtyZXR1cm4ga2U9SWUmJkllLmNvbnN0cnVjdG9yJiZJZS5jb25zdHJ1Y3Rvci5uYW1lPyJpbnN0YW5jZSBvZiAiLmNvbmNhdChJZS5jb25zdHJ1Y3Rvci5uYW1lKToidHlwZSAiLmNvbmNhdCh5KEllKSksIkV4cGVjdGVkICIuY29uY2F0KG1lLCcg''@;'; put 'put ''dG8gYmUgcmV0dXJuZWQgZnJvbSB0aGUgIicpLmNvbmNhdChDZSwnIicpKyIgZnVuY3Rpb24gYnV0IGdvdCAiLmNvbmNhdChrZSwiLiIpfSxUeXBlRXJyb3IpLFkoIkVSUl9NSVNTSU5HX0FSR1MiLGZ1bmN0aW9uKCl7Zm9yKHZhciBtZT1hcmd1bWVudHMubGVuZ3RoLENlPW5ldyBBcnJheSht''@;'; put 'put ''ZSksSWU9MDtJZTxtZTtJZSsrKUNlW0llXT1hcmd1bWVudHNbSWVdO3ZvaWQgMD09PU4mJihOPWgoOTQxNDgpKSxOKENlLmxlbmd0aD4wLCJBdCBsZWFzdCBvbmUgYXJnIG5lZWRzIHRvIGJlIHNwZWNpZmllZCIpO3ZhciBrZT0iVGhlICIscWU9Q2UubGVuZ3RoO3N3aXRjaChDZT1DZS5tYXAo''@;'; put 'put ''ZnVuY3Rpb24oWCl7cmV0dXJuJyInLmNvbmNhdChYLCciJyl9KSxxZSl7Y2FzZSAxOmtlKz0iIi5jb25jYXQoQ2VbMF0sIiBhcmd1bWVudCIpO2JyZWFrO2Nhc2UgMjprZSs9IiIuY29uY2F0KENlWzBdLCIgYW5kICIpLmNvbmNhdChDZVsxXSwiIGFyZ3VtZW50cyIpO2JyZWFrO2RlZmF1bHQ6''@;'; put 'put ''a2UrPUNlLnNsaWNlKDAscWUtMSkuam9pbigiLCAiKSxrZSs9IiwgYW5kICIuY29uY2F0KENlW3FlLTFdLCIgYXJndW1lbnRzIil9cmV0dXJuIiIuY29uY2F0KGtlLCIgbXVzdCBiZSBzcGVjaWZpZWQiKX0sVHlwZUVycm9yKSxmZS5leHBvcnRzLmNvZGVzPVZ9LDgyMjk5KGZlLGosaCl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO2Z1bmN0aW9uIHkoR3QsZ3Qpe3JldHVybiBmdW5jdGlvbiBDKEd0KXtpZihBcnJheS5pc0FycmF5KEd0KSlyZXR1cm4gR3R9KEd0KXx8ZnVuY3Rpb24gdihHdCxndCl7dmFyIFh0PW51bGw9PUd0P251bGw6dHlwZW9mIFN5bWJvbDwidSImJkd0W1N5bWJvbC5pdGVyYXRvcl18''@;'; put 'put ''fEd0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9WHQpe3ZhciBMcixsbixPbixRcix0cj1bXSxIbj0hMCxPbz0hMTt0cnl7aWYoT249KFh0PVh0LmNhbGwoR3QpKS5uZXh0LDA9PT1ndCl7aWYoT2JqZWN0KFh0KSE9PVh0KXJldHVybjtIbj0hMX1lbHNlIGZvcig7IShIbj0oTHI9T24uY2FsbChY''@;'; put 'put ''dCkpLmRvbmUpJiYodHIucHVzaChMci52YWx1ZSksdHIubGVuZ3RoIT09Z3QpO0huPSEwKTt9Y2F0Y2godXIpe09vPSEwLGxuPXVyfWZpbmFsbHl7dHJ5e2lmKCFIbiYmbnVsbCE9WHQucmV0dXJuJiYoUXI9WHQucmV0dXJuKCksT2JqZWN0KFFyKSE9PVFyKSlyZXR1cm59ZmluYWxseXtpZihP''@;'; put 'put ''byl0aHJvdyBsbn19cmV0dXJuIHRyfX0oR3QsZ3QpfHxmdW5jdGlvbiBzKEd0LGd0KXtpZihHdCl7aWYoInN0cmluZyI9PXR5cGVvZiBHdClyZXR1cm4gQShHdCxndCk7dmFyIFh0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChHdCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT1Y''@;'; put 'put ''dCYmR3QuY29uc3RydWN0b3ImJihYdD1HdC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PVh0fHwiU2V0Ij09PVh0KXJldHVybiBBcnJheS5mcm9tKEd0KTtpZigiQXJndW1lbnRzIj09PVh0fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChYdCkpcmV0''@;'; put 'put ''dXJuIEEoR3QsZ3QpfX0oR3QsZ3QpfHxmdW5jdGlvbiBjKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUg''@;'; put 'put ''YSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBBKEd0LGd0KXsobnVsbD09Z3R8fGd0Pkd0Lmxlbmd0aCkmJihndD1HdC5sZW5ndGgpO2Zvcih2YXIgWHQ9MCxMcj1uZXcgQXJyYXkoZ3QpO1h0PGd0O1h0KyspTHJbWHRdPUd0W1h0XTtyZXR1cm4gTHJ9ZnVuY3Rp''@;'; put 'put ''b24gdyhHdCl7cmV0dXJuKHc9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZ3Qpe3JldHVybiB0eXBlb2YgZ3R9OmZ1bmN0aW9uKGd0KXtyZXR1cm4gZ3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmd0LmNv''@;'; put 'put ''bnN0cnVjdG9yPT09U3ltYm9sJiZndCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGd0fSkoR3QpfXZhciBTPXZvaWQgMCE9PS9hL2cuZmxhZ3MsTD1mdW5jdGlvbihndCl7dmFyIFh0PVtdO3JldHVybiBndC5mb3JFYWNoKGZ1bmN0aW9uKExyKXtyZXR1cm4gWHQucHVzaChM''@;'; put 'put ''cil9KSxYdH0sUj1mdW5jdGlvbihndCl7dmFyIFh0PVtdO3JldHVybiBndC5mb3JFYWNoKGZ1bmN0aW9uKExyLGxuKXtyZXR1cm4gWHQucHVzaChbbG4sTHJdKX0pLFh0fSx4PU9iamVjdC5pcz9PYmplY3QuaXM6aCgzNzY1MyksVT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP09iamVj''@;'; put 'put ''dC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sSD1OdW1iZXIuaXNOYU4/TnVtYmVyLmlzTmFOOmgoMjQxMzMpO2Z1bmN0aW9uIFYoR3Qpe3JldHVybiBHdC5jYWxsLmJpbmQoR3QpfXZhciBOPVYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSksej1W''@;'; put 'put ''KE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUpLFk9VihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSxGPWgoNDA1MzcpLnR5cGVzLFc9Ri5pc0FueUFycmF5QnVmZmVyLHE9Ri5pc0FycmF5QnVmZmVyVmlldyxyZT1GLmlzRGF0ZSxtZT1GLmlzTWFwLENlPUYuaXNSZWdF''@;'; put 'put ''eHAsSWU9Ri5pc1NldCxrZT1GLmlzTmF0aXZlRXJyb3IscWU9Ri5pc0JveGVkUHJpbWl0aXZlLFg9Ri5pc051bWJlck9iamVjdCxmPUYuaXNTdHJpbmdPYmplY3QsYj1GLmlzQm9vbGVhbk9iamVjdCxrPUYuaXNCaWdJbnRPYmplY3QsTT1GLmlzU3ltYm9sT2JqZWN0LEI9Ri5pc0Zsb2F0MzJB''@;'; put 'put ''cnJheSxLPUYuaXNGbG9hdDY0QXJyYXk7ZnVuY3Rpb24gRyhHdCl7aWYoMD09PUd0Lmxlbmd0aHx8R3QubGVuZ3RoPjEwKXJldHVybiEwO2Zvcih2YXIgZ3Q9MDtndDxHdC5sZW5ndGg7Z3QrKyl7dmFyIFh0PUd0LmNoYXJDb2RlQXQoZ3QpO2lmKFh0PDQ4fHxYdD41NylyZXR1cm4hMH1yZXR1''@;'; put 'put ''cm4gMTA9PT1HdC5sZW5ndGgmJkd0Pj1NYXRoLnBvdygyLDMyKX1mdW5jdGlvbiBEKEd0KXtyZXR1cm4gT2JqZWN0LmtleXMoR3QpLmZpbHRlcihHKS5jb25jYXQoVShHdCkuZmlsdGVyKE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuYmluZChHdCkpKX1mdW5jdGlvbiBw''@;'; put 'put ''KEd0LGd0KXtpZihHdD09PWd0KXJldHVybiAwO2Zvcih2YXIgWHQ9R3QubGVuZ3RoLExyPWd0Lmxlbmd0aCxsbj0wLE9uPU1hdGgubWluKFh0LExyKTtsbjxPbjsrK2xuKWlmKEd0W2xuXSE9PWd0W2xuXSl7WHQ9R3RbbG5dLExyPWd0W2xuXTticmVha31yZXR1cm4gWHQ8THI/LTE6THI8WHQ/''@;'; put 'put ''MTowfWZ1bmN0aW9uIEFlKEd0LGd0LFh0LExyKXtpZihHdD09PWd0KXJldHVybiAwIT09R3R8fCFYdHx8eChHdCxndCk7aWYoWHQpe2lmKCJvYmplY3QiIT09dyhHdCkpcmV0dXJuIm51bWJlciI9PXR5cGVvZiBHdCYmSChHdCkmJkgoZ3QpO2lmKCJvYmplY3QiIT09dyhndCl8fG51bGw9PT1H''@;'; put 'put ''dHx8bnVsbD09PWd0fHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoR3QpIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKGd0KSlyZXR1cm4hMX1lbHNle2lmKG51bGw9PT1HdHx8Im9iamVjdCIhPT13KEd0KSlyZXR1cm4obnVsbD09PWd0fHwib2JqZWN0IiE9PXcoZ3QpKSYmR3Q9PWd0O2lmKG51bGw9''@;'; put 'put ''PT1ndHx8Im9iamVjdCIhPT13KGd0KSlyZXR1cm4hMX12YXIgbG49WShHdCk7aWYobG4hPT1ZKGd0KSlyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KEd0KSl7aWYoR3QubGVuZ3RoIT09Z3QubGVuZ3RoKXJldHVybiExO3ZhciBRcj1EKEd0KSx0cj1EKGd0KTtyZXR1cm4gUXIubGVuZ3RoPT09''@;'; put 'put ''dHIubGVuZ3RoJiZGZShHdCxndCxYdCxMciwxLFFyKX1pZigiW29iamVjdCBPYmplY3RdIj09PWxuJiYoIW1lKEd0KSYmbWUoZ3QpfHwhSWUoR3QpJiZJZShndCkpKXJldHVybiExO2lmKHJlKEd0KSl7aWYoIXJlKGd0KXx8RGF0ZS5wcm90b3R5cGUuZ2V0VGltZS5jYWxsKEd0KSE9PURhdGUu''@;'; put 'put ''cHJvdG90eXBlLmdldFRpbWUuY2FsbChndCkpcmV0dXJuITF9ZWxzZSBpZihDZShHdCkpe2lmKCFDZShndCl8fCFmdW5jdGlvbiBkdChHdCxndCl7cmV0dXJuIFM/R3Quc291cmNlPT09Z3Quc291cmNlJiZHdC5mbGFncz09PWd0LmZsYWdzOlJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2Fs''@;'; put 'put ''bChHdCk9PT1SZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZ3QpfShHdCxndCkpcmV0dXJuITF9ZWxzZSBpZihrZShHdCl8fEd0IGluc3RhbmNlb2YgRXJyb3Ipe2lmKEd0Lm1lc3NhZ2UhPT1ndC5tZXNzYWdlfHxHdC5uYW1lIT09Z3QubmFtZSlyZXR1cm4hMX1lbHNle2lmKHEoR3Qp''@;'; put 'put ''KXtpZihYdHx8IUIoR3QpJiYhSyhHdCkpe2lmKCFmdW5jdGlvbiBhZShHdCxndCl7cmV0dXJuIEd0LmJ5dGVMZW5ndGg9PT1ndC5ieXRlTGVuZ3RoJiYwPT09cChuZXcgVWludDhBcnJheShHdC5idWZmZXIsR3QuYnl0ZU9mZnNldCxHdC5ieXRlTGVuZ3RoKSxuZXcgVWludDhBcnJheShndC5i''@;'; put 'put ''dWZmZXIsZ3QuYnl0ZU9mZnNldCxndC5ieXRlTGVuZ3RoKSl9KEd0LGd0KSlyZXR1cm4hMX1lbHNlIGlmKCFmdW5jdGlvbiBSZShHdCxndCl7aWYoR3QuYnl0ZUxlbmd0aCE9PWd0LmJ5dGVMZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBYdD0wO1h0PEd0LmJ5dGVMZW5ndGg7WHQrKylpZihHdFtY''@;'; put 'put ''dF0hPT1ndFtYdF0pcmV0dXJuITE7cmV0dXJuITB9KEd0LGd0KSlyZXR1cm4hMTt2YXIgSG49RChHdCksT289RChndCk7cmV0dXJuIEhuLmxlbmd0aD09PU9vLmxlbmd0aCYmRmUoR3QsZ3QsWHQsTHIsMCxIbil9aWYoSWUoR3QpKXJldHVybiEoIUllKGd0KXx8R3Quc2l6ZSE9PWd0LnNpemUp''@;'; put 'put ''JiZGZShHdCxndCxYdCxMciwyKTtpZihtZShHdCkpcmV0dXJuISghbWUoZ3QpfHxHdC5zaXplIT09Z3Quc2l6ZSkmJkZlKEd0LGd0LFh0LExyLDMpO2lmKFcoR3QpKXtpZighZnVuY3Rpb24geGUoR3QsZ3Qpe3JldHVybiBHdC5ieXRlTGVuZ3RoPT09Z3QuYnl0ZUxlbmd0aCYmMD09PXAobmV3''@;'; put 'put ''IFVpbnQ4QXJyYXkoR3QpLG5ldyBVaW50OEFycmF5KGd0KSl9KEd0LGd0KSlyZXR1cm4hMX1lbHNlIGlmKHFlKEd0KSYmIWZ1bmN0aW9uIGplKEd0LGd0KXtyZXR1cm4gWChHdCk/WChndCkmJngoTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoR3QpLE51bWJlci5wcm90b3R5cGUudmFs''@;'; put 'put ''dWVPZi5jYWxsKGd0KSk6ZihHdCk/ZihndCkmJlN0cmluZy5wcm90b3R5cGUudmFsdWVPZi5jYWxsKEd0KT09PVN0cmluZy5wcm90b3R5cGUudmFsdWVPZi5jYWxsKGd0KTpiKEd0KT9iKGd0KSYmQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKEd0KT09PUJvb2xlYW4ucHJvdG90eXBl''@;'; put 'put ''LnZhbHVlT2YuY2FsbChndCk6ayhHdCk/ayhndCkmJkJpZ0ludC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKEd0KT09PUJpZ0ludC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKGd0KTpNKGd0KSYmU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoR3QpPT09U3ltYm9sLnByb3RvdHlwZS52YWx1''@;'; put 'put ''ZU9mLmNhbGwoZ3QpfShHdCxndCkpcmV0dXJuITF9cmV0dXJuIEZlKEd0LGd0LFh0LExyLDApfWZ1bmN0aW9uIERlKEd0LGd0KXtyZXR1cm4gZ3QuZmlsdGVyKGZ1bmN0aW9uKFh0KXtyZXR1cm4geihHdCxYdCl9KX1mdW5jdGlvbiBGZShHdCxndCxYdCxMcixsbixPbil7aWYoNT09PWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGgpe09uPU9iamVjdC5rZXlzKEd0KTt2YXIgUXI9T2JqZWN0LmtleXMoZ3QpO2lmKE9uLmxlbmd0aCE9PVFyLmxlbmd0aClyZXR1cm4hMX1mb3IodmFyIHRyPTA7dHI8T24ubGVuZ3RoO3RyKyspaWYoIU4oZ3QsT25bdHJdKSlyZXR1cm4hMTtpZihYdCYmNT09PWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGgpe3ZhciBIbj1VKEd0KTtpZigwIT09SG4ubGVuZ3RoKXt2YXIgT289MDtmb3IodHI9MDt0cjxIbi5sZW5ndGg7dHIrKyl7dmFyIHVyPUhuW3RyXTtpZih6KEd0LHVyKSl7aWYoIXooZ3QsdXIpKXJldHVybiExO09uLnB1c2godXIpLE9vKyt9ZWxzZSBpZih6KGd0LHVyKSlyZXR1''@;'; put 'put ''cm4hMX12YXIgWm49VShndCk7aWYoSG4ubGVuZ3RoIT09Wm4ubGVuZ3RoJiZEZShndCxabikubGVuZ3RoIT09T28pcmV0dXJuITF9ZWxzZXt2YXIgU249VShndCk7aWYoMCE9PVNuLmxlbmd0aCYmMCE9PURlKGd0LFNuKS5sZW5ndGgpcmV0dXJuITF9fWlmKDA9PT1Pbi5sZW5ndGgmJigwPT09''@;'; put 'put ''bG58fDE9PT1sbiYmMD09PUd0Lmxlbmd0aHx8MD09PUd0LnNpemUpKXJldHVybiEwO2lmKHZvaWQgMD09PUxyKUxyPXt2YWwxOm5ldyBNYXAsdmFsMjpuZXcgTWFwLHBvc2l0aW9uOjB9O2Vsc2V7dmFyIHhyPUxyLnZhbDEuZ2V0KEd0KTtpZih2b2lkIDAhPT14cil7dmFyIFR0PUxyLnZhbDIu''@;'; put 'put ''Z2V0KGd0KTtpZih2b2lkIDAhPT1UdClyZXR1cm4geHI9PT1UdH1Mci5wb3NpdGlvbisrfUxyLnZhbDEuc2V0KEd0LExyLnBvc2l0aW9uKSxMci52YWwyLnNldChndCxMci5wb3NpdGlvbik7dmFyIEFyPWZ1bmN0aW9uICR0KEd0LGd0LFh0LExyLGxuLE9uKXt2YXIgUXI9MDtpZigyPT09T24p''@;'; put 'put ''e2lmKCFmdW5jdGlvbiBKZShHdCxndCxYdCxMcil7Zm9yKHZhciBsbj1udWxsLE9uPUwoR3QpLFFyPTA7UXI8T24ubGVuZ3RoO1FyKyspe3ZhciB0cj1PbltRcl07aWYoIm9iamVjdCI9PT13KHRyKSYmbnVsbCE9PXRyKW51bGw9PT1sbiYmKGxuPW5ldyBTZXQpLGxuLmFkZCh0cik7ZWxzZSBp''@;'; put 'put ''ZighZ3QuaGFzKHRyKSl7aWYoWHR8fCFoZShHdCxndCx0cikpcmV0dXJuITE7bnVsbD09PWxuJiYobG49bmV3IFNldCksbG4uYWRkKHRyKX19aWYobnVsbCE9PWxuKXtmb3IodmFyIEhuPUwoZ3QpLE9vPTA7T288SG4ubGVuZ3RoO09vKyspe3ZhciB1cj1IbltPb107aWYoIm9iamVjdCI9PT13''@;'; put 'put ''KHVyKSYmbnVsbCE9PXVyKXtpZighZ2UobG4sdXIsWHQsTHIpKXJldHVybiExfWVsc2UgaWYoIVh0JiYhR3QuaGFzKHVyKSYmIWdlKGxuLHVyLFh0LExyKSlyZXR1cm4hMX1yZXR1cm4gMD09PWxuLnNpemV9cmV0dXJuITB9KEd0LGd0LFh0LGxuKSlyZXR1cm4hMX1lbHNlIGlmKDM9PT1Pbil7''@;'; put 'put ''aWYoIWZ1bmN0aW9uIEtlKEd0LGd0LFh0LExyKXtmb3IodmFyIGxuPW51bGwsT249UihHdCksUXI9MDtRcjxPbi5sZW5ndGg7UXIrKyl7dmFyIHRyPXkoT25bUXJdLDIpLEhuPXRyWzBdLE9vPXRyWzFdO2lmKCJvYmplY3QiPT09dyhIbikmJm51bGwhPT1IbiludWxsPT09bG4mJihsbj1uZXcg''@;'; put 'put ''U2V0KSxsbi5hZGQoSG4pO2Vsc2V7dmFyIHVyPWd0LmdldChIbik7aWYodm9pZCAwPT09dXImJiFndC5oYXMoSG4pfHwhQWUoT28sdXIsWHQsTHIpKXtpZihYdHx8IXdlKEd0LGd0LEhuLE9vLExyKSlyZXR1cm4hMTtudWxsPT09bG4mJihsbj1uZXcgU2V0KSxsbi5hZGQoSG4pfX19aWYobnVs''@;'; put 'put ''bCE9PWxuKXtmb3IodmFyIFpuPVIoZ3QpLFNuPTA7U248Wm4ubGVuZ3RoO1NuKyspe3ZhciB4cj15KFpuW1NuXSwyKSxUdD14clswXSxBcj14clsxXTtpZigib2JqZWN0Ij09PXcoVHQpJiZudWxsIT09VHQpe2lmKCF0dChsbixHdCxUdCxBcixYdCxMcikpcmV0dXJuITF9ZWxzZSBpZighKFh0''@;'; put 'put ''fHxHdC5oYXMoVHQpJiZBZShHdC5nZXQoVHQpLEFyLCExLExyKXx8dHQobG4sR3QsVHQsQXIsITEsTHIpKSlyZXR1cm4hMX1yZXR1cm4gMD09PWxuLnNpemV9cmV0dXJuITB9KEd0LGd0LFh0LGxuKSlyZXR1cm4hMX1lbHNlIGlmKDE9PT1Pbilmb3IoO1FyPEd0Lmxlbmd0aDtRcisrKXtpZigh''@;'; put 'put ''TihHdCxRcikpe2lmKE4oZ3QsUXIpKXJldHVybiExO2Zvcih2YXIgdHI9T2JqZWN0LmtleXMoR3QpO1FyPHRyLmxlbmd0aDtRcisrKXt2YXIgSG49dHJbUXJdO2lmKCFOKGd0LEhuKXx8IUFlKEd0W0huXSxndFtIbl0sWHQsbG4pKXJldHVybiExfXJldHVybiB0ci5sZW5ndGg9PT1PYmplY3Qu''@;'; put 'put ''a2V5cyhndCkubGVuZ3RofWlmKCFOKGd0LFFyKXx8IUFlKEd0W1FyXSxndFtRcl0sWHQsbG4pKXJldHVybiExfWZvcihRcj0wO1FyPExyLmxlbmd0aDtRcisrKXt2YXIgT289THJbUXJdO2lmKCFBZShHdFtPb10sZ3RbT29dLFh0LGxuKSlyZXR1cm4hMX1yZXR1cm4hMH0oR3QsZ3QsWHQsT24s''@;'; put 'put ''THIsbG4pO3JldHVybiBMci52YWwxLmRlbGV0ZShHdCksTHIudmFsMi5kZWxldGUoZ3QpLEFyfWZ1bmN0aW9uIGdlKEd0LGd0LFh0LExyKXtmb3IodmFyIGxuPUwoR3QpLE9uPTA7T248bG4ubGVuZ3RoO09uKyspe3ZhciBRcj1sbltPbl07aWYoQWUoZ3QsUXIsWHQsTHIpKXJldHVybiBHdC5k''@;'; put 'put ''ZWxldGUoUXIpLCEwfXJldHVybiExfWZ1bmN0aW9uIGNlKEd0KXtzd2l0Y2godyhHdCkpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4gbnVsbDtjYXNlIm9iamVjdCI6cmV0dXJuO2Nhc2Uic3ltYm9sIjpyZXR1cm4hMTtjYXNlInN0cmluZyI6R3Q9K0d0O2Nhc2UibnVtYmVyIjppZihIKEd0KSly''@;'; put 'put ''ZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBoZShHdCxndCxYdCl7dmFyIExyPWNlKFh0KTtyZXR1cm4gTHI/PyhndC5oYXMoTHIpJiYhR3QuaGFzKExyKSl9ZnVuY3Rpb24gd2UoR3QsZ3QsWHQsTHIsbG4pe3ZhciBPbj1jZShYdCk7aWYobnVsbCE9T24pcmV0dXJuIE9uO3ZhciBRcj1ndC5n''@;'; put 'put ''ZXQoT24pO3JldHVybiEodm9pZCAwPT09UXImJiFndC5oYXMoT24pfHwhQWUoTHIsUXIsITEsbG4pKSYmIUd0LmhhcyhPbikmJkFlKExyLFFyLCExLGxuKX1mdW5jdGlvbiB0dChHdCxndCxYdCxMcixsbixPbil7Zm9yKHZhciBRcj1MKEd0KSx0cj0wO3RyPFFyLmxlbmd0aDt0cisrKXt2YXIg''@;'; put 'put ''SG49UXJbdHJdO2lmKEFlKFh0LEhuLGxuLE9uKSYmQWUoTHIsZ3QuZ2V0KEhuKSxsbixPbikpcmV0dXJuIEd0LmRlbGV0ZShIbiksITB9cmV0dXJuITF9ZmUuZXhwb3J0cz17aXNEZWVwRXF1YWw6ZnVuY3Rpb24gUnQoR3QsZ3Qpe3JldHVybiBBZShHdCxndCwhMSl9LGlzRGVlcFN0cmljdEVx''@;'; put 'put ''dWFsOmZ1bmN0aW9uIEx0KEd0LGd0KXtyZXR1cm4gQWUoR3QsZ3QsITApfX19LDYyODQxKGZlLGopeyJ1c2Ugc3RyaWN0IjtqLndyYXBwZXI9ZnVuY3Rpb24geShjKXtyZXR1cm4gY319LDY3NTI2KGZlLGopeyJ1c2Ugc3RyaWN0IjtqLmJ5dGVMZW5ndGg9ZnVuY3Rpb24gdyhIKXt2YXIgVj1D''@;'; put 'put ''KEgpLHo9VlsxXTtyZXR1cm4gMyooVlswXSt6KS80LXp9LGoudG9CeXRlQXJyYXk9ZnVuY3Rpb24gTChIKXt2YXIgVixyZSxOPUMoSCksej1OWzBdLFk9TlsxXSxGPW5ldyBjKGZ1bmN0aW9uIFMoSCxWLE4pe3JldHVybiAzKihWK04pLzQtTn0oMCx6LFkpKSxXPTAscT1ZPjA/ei00Ono7Zm9y''@;'; put 'put ''KHJlPTA7cmU8cTtyZSs9NClWPXlbSC5jaGFyQ29kZUF0KHJlKV08PDE4fHlbSC5jaGFyQ29kZUF0KHJlKzEpXTw8MTJ8eVtILmNoYXJDb2RlQXQocmUrMildPDw2fHlbSC5jaGFyQ29kZUF0KHJlKzMpXSxGW1crK109Vj4+MTYmMjU1LEZbVysrXT1WPj44JjI1NSxGW1crK109MjU1JlY7cmV0''@;'; put 'put ''dXJuIDI9PT1ZJiYoVj15W0guY2hhckNvZGVBdChyZSldPDwyfHlbSC5jaGFyQ29kZUF0KHJlKzEpXT4+NCxGW1crK109MjU1JlYpLDE9PT1ZJiYoVj15W0guY2hhckNvZGVBdChyZSldPDwxMHx5W0guY2hhckNvZGVBdChyZSsxKV08PDR8eVtILmNoYXJDb2RlQXQocmUrMildPj4yLEZbVysr''@;'; put 'put ''XT1WPj44JjI1NSxGW1crK109MjU1JlYpLEZ9LGouZnJvbUJ5dGVBcnJheT1mdW5jdGlvbiBVKEgpe2Zvcih2YXIgVixOPUgubGVuZ3RoLHo9TiUzLFk9W10sRj0xNjM4MyxXPTAscT1OLXo7VzxxO1crPUYpWS5wdXNoKHgoSCxXLFcrRj5xP3E6VytGKSk7cmV0dXJuIDE9PT16P1kucHVzaCho''@;'; put 'put ''WyhWPUhbTi0xXSk+PjJdK2hbVjw8NCY2M10rIj09Iik6Mj09PXomJlkucHVzaChoWyhWPShIW04tMl08PDgpK0hbTi0xXSk+PjEwXStoW1Y+PjQmNjNdK2hbVjw8MiY2M10rIj0iKSxZLmpvaW4oIiIpfTtmb3IodmFyIGg9W10seT1bXSxjPXR5cGVvZiBVaW50OEFycmF5PCJ1Ij9VaW50OEFy''@;'; put 'put ''cmF5OkFycmF5LHM9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLEE9MDtBPDY0OysrQSloW0FdPXNbQV0seVtzLmNoYXJDb2RlQXQoQSldPUE7ZnVuY3Rpb24gQyhIKXt2YXIgVj1ILmxlbmd0aDtpZihWJTQ+MCl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTt2YXIgTj1ILmluZGV4T2YoIj0iKTtyZXR1cm4tMT09PU4mJihOPVYpLFtOLE49PT1WPzA6NC1OJTRdfWZ1bmN0aW9uIFIoSCl7cmV0dXJuIGhbSD4+MTgmNjNdK2hbSD4+MTImNjNd''@;'; put 'put ''K2hbSD4+NiY2M10raFs2MyZIXX1mdW5jdGlvbiB4KEgsVixOKXtmb3IodmFyIFk9W10sRj1WO0Y8TjtGKz0zKVkucHVzaChSKChIW0ZdPDwxNiYxNjcxMTY4MCkrKEhbRisxXTw8OCY2NTI4MCkrKDI1NSZIW0YrMl0pKSk7cmV0dXJuIFkuam9pbigiIil9eVs0NV09NjIseVs5NV09NjN9LDM5''@;'; put 'put ''NDA0KGZlLGosaCl7IWZ1bmN0aW9uKHksYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHMoayxNKXtpZighayl0aHJvdyBuZXcgRXJyb3IoTXx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBBKGssTSl7ay5zdXBlcl89TTt2YXIgQj1mdW5jdGlvbigpe307Qi5wcm90b3R5cGU9TS5wcm90''@;'; put 'put ''b3R5cGUsay5wcm90b3R5cGU9bmV3IEIsay5wcm90b3R5cGUuY29uc3RydWN0b3I9a31mdW5jdGlvbiB2KGssTSxCKXtpZih2LmlzQk4oaykpcmV0dXJuIGs7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PWsmJigoImxl''@;'; put 'put ''Ij09PU18fCJiZSI9PT1NKSYmKEI9TSxNPTEwKSx0aGlzLl9pbml0KGt8fDAsTXx8MTAsQnx8ImJlIikpfXZhciBDOyJvYmplY3QiPT10eXBlb2YgeT95LmV4cG9ydHM9djpjLkJOPXYsdi5CTj12LHYud29yZFNpemU9MjY7dHJ5e0M9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cu''@;'; put 'put ''QnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOmgoNDc3OTApLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gdyhrLE0pe3ZhciBCPWsuY2hhckNvZGVBdChNKTtyZXR1cm4gQj49NDgmJkI8PTU3P0ItNDg6Qj49NjUmJkI8PTcwP0ItNTU6Qj49OTcmJkI8PTEwMj9CLTg3OnZvaWQgcyghMSwiSW52YWxp''@;'; put 'put ''ZCBjaGFyYWN0ZXIgaW4gIitrKX1mdW5jdGlvbiBTKGssTSxCKXt2YXIgSz13KGssQik7cmV0dXJuIEItMT49TSYmKEt8PXcoayxCLTEpPDw0KSxLfWZ1bmN0aW9uIEwoayxNLEIsSyl7Zm9yKHZhciBHPTAsRD0wLHA9TWF0aC5taW4oay5sZW5ndGgsQiksST1NO0k8cDtJKyspe3ZhciB1ZT1r''@;'; put 'put ''LmNoYXJDb2RlQXQoSSktNDg7Ryo9SyxEPXVlPj00OT91ZS00OSsxMDp1ZT49MTc/dWUtMTcrMTA6dWUscyh1ZT49MCYmRDxLLCJJbnZhbGlkIGNoYXJhY3RlciIpLEcrPUR9cmV0dXJuIEd9ZnVuY3Rpb24gUihrLE0pe2sud29yZHM9TS53b3JkcyxrLmxlbmd0aD1NLmxlbmd0aCxrLm5lZ2F0''@;'; put 'put ''aXZlPU0ubmVnYXRpdmUsay5yZWQ9TS5yZWR9aWYodi5pc0JOPWZ1bmN0aW9uKE0pe3JldHVybiBNIGluc3RhbmNlb2Ygdnx8bnVsbCE9PU0mJiJvYmplY3QiPT10eXBlb2YgTSYmTS5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXYud29yZFNpemUmJkFycmF5LmlzQXJyYXkoTS53b3Jkcyl9LHYu''@;'; put 'put ''bWF4PWZ1bmN0aW9uKE0sQil7cmV0dXJuIE0uY21wKEIpPjA/TTpCfSx2Lm1pbj1mdW5jdGlvbihNLEIpe3JldHVybiBNLmNtcChCKTwwP006Qn0sdi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oTSxCLEspe2lmKCJudW1iZXIiPT10eXBlb2YgTSlyZXR1cm4gdGhpcy5faW5pdE51bWJlcihN''@;'; put 'put ''LEIsSyk7aWYoIm9iamVjdCI9PXR5cGVvZiBNKXJldHVybiB0aGlzLl9pbml0QXJyYXkoTSxCLEspOyJoZXgiPT09QiYmKEI9MTYpLHMoQj09PSgwfEIpJiZCPj0yJiZCPD0zNik7dmFyIEc9MDsiLSI9PT0oTT1NLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEcrKyx0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPTEpLEc8TS5sZW5ndGgmJigxNj09PUI/dGhpcy5fcGFyc2VIZXgoTSxHLEspOih0aGlzLl9wYXJzZUJhc2UoTSxCLEcpLCJsZSI9PT1LJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQixLKSkpfSx2LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihNLEIs''@;'; put 'put ''Syl7TTwwJiYodGhpcy5uZWdhdGl2ZT0xLE09LU0pLE08NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJk1dLHRoaXMubGVuZ3RoPTEpOk08NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmTSxNLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToocyhN''@;'; put 'put ''PDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJk0sTS82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09SyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEIsSyl9LHYucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oTSxCLEsp''@;'; put 'put ''e2lmKHMoIm51bWJlciI9PXR5cGVvZiBNLmxlbmd0aCksTS5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoTS5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgRz0w''@;'; put 'put ''O0c8dGhpcy5sZW5ndGg7RysrKXRoaXMud29yZHNbR109MDt2YXIgRCxwLEk9MDtpZigiYmUiPT09Sylmb3IoRz1NLmxlbmd0aC0xLEQ9MDtHPj0wO0ctPTMpdGhpcy53b3Jkc1tEXXw9KHA9TVtHXXxNW0ctMV08PDh8TVtHLTJdPDwxNik8PEkmNjcxMDg4NjMsdGhpcy53b3Jkc1tEKzFdPXA+''@;'; put 'put ''Pj4yNi1JJjY3MTA4ODYzLChJKz0yNCk+PTI2JiYoSS09MjYsRCsrKTtlbHNlIGlmKCJsZSI9PT1LKWZvcihHPTAsRD0wO0c8TS5sZW5ndGg7Rys9Myl0aGlzLndvcmRzW0RdfD0ocD1NW0ddfE1bRysxXTw8OHxNW0crMl08PDE2KTw8SSY2NzEwODg2Myx0aGlzLndvcmRzW0QrMV09cD4+PjI2''@;'; put 'put ''LUkmNjcxMDg4NjMsKEkrPTI0KT49MjYmJihJLT0yNixEKyspO3JldHVybiB0aGlzLl9zdHJpcCgpfSx2LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oTSxCLEspe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoTS5sZW5ndGgtQikvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5n''@;'; put 'put ''dGgpO2Zvcih2YXIgRz0wO0c8dGhpcy5sZW5ndGg7RysrKXRoaXMud29yZHNbR109MDt2YXIgSSxEPTAscD0wO2lmKCJiZSI9PT1LKWZvcihHPU0ubGVuZ3RoLTE7Rz49QjtHLT0yKUk9UyhNLEIsRyk8PEQsdGhpcy53b3Jkc1twXXw9NjcxMDg4NjMmSSxEPj0xOD8oRC09MTgsdGhpcy53b3Jk''@;'; put 'put ''c1twKz0xXXw9ST4+PjI2KTpEKz04O2Vsc2UgZm9yKEc9KE0ubGVuZ3RoLUIpJTI9PTA/QisxOkI7RzxNLmxlbmd0aDtHKz0yKUk9UyhNLEIsRyk8PEQsdGhpcy53b3Jkc1twXXw9NjcxMDg4NjMmSSxEPj0xOD8oRC09MTgsdGhpcy53b3Jkc1twKz0xXXw9ST4+PjI2KTpEKz04O3RoaXMuX3N0''@;'; put 'put ''cmlwKCl9LHYucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oTSxCLEspe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBHPTAsRD0xO0Q8PTY3MTA4ODYzO0QqPUIpRysrO0ctLSxEPUQvQnwwO2Zvcih2YXIgcD1NLmxlbmd0aC1LLEk9cCVHLHVlPU1hdGgubWluKHAs''@;'; put 'put ''cC1JKStLLG5lPTAsX2U9SztfZTx1ZTtfZSs9RyluZT1MKE0sX2UsX2UrRyxCKSx0aGlzLmltdWxuKEQpLHRoaXMud29yZHNbMF0rbmU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bmU6dGhpcy5faWFkZG4obmUpO2lmKDAhPT1JKXt2YXIgUGU9MTtmb3IobmU9TChNLF9lLE0ubGVuZ3RoLEIp''@;'; put 'put ''LF9lPTA7X2U8STtfZSsrKVBlKj1CO3RoaXMuaW11bG4oUGUpLHRoaXMud29yZHNbMF0rbmU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bmU6dGhpcy5faWFkZG4obmUpfXRoaXMuX3N0cmlwKCl9LHYucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oTSl7TS53b3Jkcz1uZXcgQXJyYXkodGhpcy5s''@;'; put 'put ''ZW5ndGgpO2Zvcih2YXIgQj0wO0I8dGhpcy5sZW5ndGg7QisrKU0ud29yZHNbQl09dGhpcy53b3Jkc1tCXTtNLmxlbmd0aD10aGlzLmxlbmd0aCxNLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsTS5yZWQ9dGhpcy5yZWR9LHYucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKE0pe1IoTSx0aGlzKX0s''@;'; put 'put ''di5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgTT1uZXcgdihudWxsKTtyZXR1cm4gdGhpcy5jb3B5KE0pLE19LHYucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oTSl7Zm9yKDt0aGlzLmxlbmd0aDxNOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHYu''@;'; put 'put ''cHJvdG90eXBlLl9zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHYucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhp''@;'; put 'put ''cy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx0eXBlb2YgU3ltYm9sPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3IpdHJ5e3YucHJvdG90eXBlW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildPXh9Y2F0''@;'; put 'put ''Y2h7di5wcm90b3R5cGUuaW5zcGVjdD14fWVsc2Ugdi5wcm90b3R5cGUuaW5zcGVjdD14O2Z1bmN0aW9uIHgoKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In12YXIgVT1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxIPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFY9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2''@;'; put 'put ''MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwx''@;'; put 'put ''MTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gWShrLE0sQil7Qi5uZWdhdGl2ZT1NLm5lZ2F0aXZlXmsubmVnYXRpdmU7dmFyIEs9ay5sZW5ndGgrTS5s''@;'; put 'put ''ZW5ndGh8MDtCLmxlbmd0aD1LLEs9Sy0xfDA7dmFyIEc9MHxrLndvcmRzWzBdLEQ9MHxNLndvcmRzWzBdLHA9RypELHVlPXAvNjcxMDg4NjR8MDtCLndvcmRzWzBdPTY3MTA4ODYzJnA7Zm9yKHZhciBuZT0xO25lPEs7bmUrKyl7Zm9yKHZhciBfZT11ZT4+PjI2LFBlPTY3MTA4ODYzJnVlLG90''@;'; put 'put ''PU1hdGgubWluKG5lLE0ubGVuZ3RoLTEpLGx0PU1hdGgubWF4KDAsbmUtay5sZW5ndGgrMSk7bHQ8PW90O2x0KyspX2UrPShwPShHPTB8ay53b3Jkc1tuZS1sdHwwXSkqKEQ9MHxNLndvcmRzW2x0XSkrUGUpLzY3MTA4ODY0fDAsUGU9NjcxMDg4NjMmcDtCLndvcmRzW25lXT0wfFBlLHVlPTB8''@;'; put 'put ''X2V9cmV0dXJuIDAhPT11ZT9CLndvcmRzW25lXT0wfHVlOkIubGVuZ3RoLS0sQi5fc3RyaXAoKX12LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihNLEIpe3ZhciBLO2lmKEI9MHxCfHwxLDE2PT09KE09TXx8MTApfHwiaGV4Ij09PU0pe0s9IiI7Zm9yKHZhciBHPTAsRD0wLHA9MDtwPHRo''@;'; put 'put ''aXMubGVuZ3RoO3ArKyl7dmFyIEk9dGhpcy53b3Jkc1twXSx1ZT0oMTY3NzcyMTUmKEk8PEd8RCkpLnRvU3RyaW5nKDE2KTtEPUk+Pj4yNC1HJjE2Nzc3MjE1LChHKz0yKT49MjYmJihHLT0yNixwLS0pLEs9MCE9PUR8fHAhPT10aGlzLmxlbmd0aC0xP1VbNi11ZS5sZW5ndGhdK3VlK0s6dWUr''@;'; put 'put ''S31mb3IoMCE9PUQmJihLPUQudG9TdHJpbmcoMTYpK0spO0subGVuZ3RoJUIhPT0wOylLPSIwIitLO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEs9Ii0iK0spLEt9aWYoTT09PSgwfE0pJiZNPj0yJiZNPD0zNil7dmFyIG5lPUhbTV0sX2U9VltNXTtLPSIiO3ZhciBQZT10aGlzLmNsb25l''@;'; put 'put ''KCk7Zm9yKFBlLm5lZ2F0aXZlPTA7IVBlLmlzWmVybygpOyl7dmFyIG90PVBlLm1vZHJuKF9lKS50b1N0cmluZyhNKTtLPShQZT1QZS5pZGl2bihfZSkpLmlzWmVybygpP290K0s6VVtuZS1vdC5sZW5ndGhdK290K0t9Zm9yKHRoaXMuaXNaZXJvKCkmJihLPSIwIitLKTtLLmxlbmd0aCVCIT09''@;'; put 'put ''MDspSz0iMCIrSztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihLPSItIitLKSxLfXMoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdi5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgTT10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/''@;'; put 'put ''TSs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP00rPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZzKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJp''@;'; put 'put ''dHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tTTpNfSx2LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNiwyKX0sQyYmKHYucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKE0sQil7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQyxNLEIpfSksdi5wcm90''@;'; put 'put ''b3R5cGUudG9BcnJheT1mdW5jdGlvbihNLEIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LE0sQil9LHYucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKE0sQixLKXt0aGlzLl9zdHJpcCgpO3ZhciBHPXRoaXMuYnl0ZUxlbmd0aCgpLEQ9S3x8TWF0aC5tYXgoMSxHKTtzKEc8''@;'; put 'put ''PUQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxzKEQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIik7dmFyIHA9ZnVuY3Rpb24oTSxCKXtyZXR1cm4gTS5hbGxvY1Vuc2FmZT9NLmFsbG9jVW5zYWZlKEIpOm5ldyBNKEIpfShNLEQpO3JldHVybiB0aGlz''@;'; put 'put ''WyJfdG9BcnJheUxpa2UiKygibGUiPT09Qj8iTEUiOiJCRSIpXShwLEcpLHB9LHYucHJvdG90eXBlLl90b0FycmF5TGlrZUxFPWZ1bmN0aW9uKE0sQil7Zm9yKHZhciBLPTAsRz0wLEQ9MCxwPTA7RDx0aGlzLmxlbmd0aDtEKyspe3ZhciBJPXRoaXMud29yZHNbRF08PHB8RztNW0srK109MjU1''@;'; put 'put ''JkksSzxNLmxlbmd0aCYmKE1bSysrXT1JPj44JjI1NSksSzxNLmxlbmd0aCYmKE1bSysrXT1JPj4xNiYyNTUpLDY9PT1wPyhLPE0ubGVuZ3RoJiYoTVtLKytdPUk+PjI0JjI1NSksRz0wLHA9MCk6KEc9ST4+PjI0LHArPTIpfWlmKEs8TS5sZW5ndGgpZm9yKE1bSysrXT1HO0s8TS5sZW5ndGg7''@;'; put 'put ''KU1bSysrXT0wfSx2LnByb3RvdHlwZS5fdG9BcnJheUxpa2VCRT1mdW5jdGlvbihNLEIpe2Zvcih2YXIgSz1NLmxlbmd0aC0xLEc9MCxEPTAscD0wO0Q8dGhpcy5sZW5ndGg7RCsrKXt2YXIgST10aGlzLndvcmRzW0RdPDxwfEc7TVtLLS1dPTI1NSZJLEs+PTAmJihNW0stLV09ST4+OCYyNTUp''@;'; put 'put ''LEs+PTAmJihNW0stLV09ST4+MTYmMjU1KSw2PT09cD8oSz49MCYmKE1bSy0tXT1JPj4yNCYyNTUpLEc9MCxwPTApOihHPUk+Pj4yNCxwKz0yKX1pZihLPj0wKWZvcihNW0stLV09RztLPj0wOylNW0stLV09MH0sdi5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKE0p''@;'; put 'put ''e3JldHVybiAzMi1NYXRoLmNsejMyKE0pfTpmdW5jdGlvbihNKXt2YXIgQj1NLEs9MDtyZXR1cm4gQj49NDA5NiYmKEsrPTEzLEI+Pj49MTMpLEI+PTY0JiYoSys9NyxCPj4+PTcpLEI+PTgmJihLKz00LEI+Pj49NCksQj49MiYmKEsrPTIsQj4+Pj0yKSxLK0J9LHYucHJvdG90eXBlLl96ZXJv''@;'; put 'put ''Qml0cz1mdW5jdGlvbihNKXtpZigwPT09TSlyZXR1cm4gMjY7dmFyIEI9TSxLPTA7cmV0dXJuISg4MTkxJkIpJiYoSys9MTMsQj4+Pj0xMyksISgxMjcmQikmJihLKz03LEI+Pj49NyksISgxNSZCKSYmKEsrPTQsQj4+Pj00KSwhKDMmQikmJihLKz0yLEI+Pj49MiksISgxJkIpJiZLKyssS30s''@;'; put 'put ''di5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrQn0sdi5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVy''@;'; put 'put ''biAwO2Zvcih2YXIgTT0wLEI9MDtCPHRoaXMubGVuZ3RoO0IrKyl7dmFyIEs9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tCXSk7aWYoTSs9SywyNiE9PUspYnJlYWt9cmV0dXJuIE19LHYucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0''@;'; put 'put ''TGVuZ3RoKCkvOCl9LHYucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihNKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihNKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHYucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKE0pe3JldHVybiB0aGlzLnRlc3RuKE0t''@;'; put 'put ''MSk/dGhpcy5ub3RuKE0pLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHYucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx2LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdi5wcm90b3R5''@;'; put 'put ''cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdi5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihNKXtmb3IoO3RoaXMubGVuZ3RoPE0ubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBCPTA7QjxN''@;'; put 'put ''Lmxlbmd0aDtCKyspdGhpcy53b3Jkc1tCXT10aGlzLndvcmRzW0JdfE0ud29yZHNbQl07cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHYucHJvdG90eXBlLmlvcj1mdW5jdGlvbihNKXtyZXR1cm4gcygwPT09KHRoaXMubmVnYXRpdmV8TS5uZWdhdGl2ZSkpLHRoaXMuaXVvcihNKX0sdi5wcm90b3R5''@;'; put 'put ''cGUub3I9ZnVuY3Rpb24oTSl7cmV0dXJuIHRoaXMubGVuZ3RoPk0ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoTSk6TS5jbG9uZSgpLmlvcih0aGlzKX0sdi5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKE0pe3JldHVybiB0aGlzLmxlbmd0aD5NLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihNKTpN''@;'; put 'put ''LmNsb25lKCkuaXVvcih0aGlzKX0sdi5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oTSl7dmFyIEI7Qj10aGlzLmxlbmd0aD5NLmxlbmd0aD9NOnRoaXM7Zm9yKHZhciBLPTA7SzxCLmxlbmd0aDtLKyspdGhpcy53b3Jkc1tLXT10aGlzLndvcmRzW0tdJk0ud29yZHNbS107cmV0dXJuIHRoaXMu''@;'; put 'put ''bGVuZ3RoPUIubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LHYucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oTSl7cmV0dXJuIHMoMD09PSh0aGlzLm5lZ2F0aXZlfE0ubmVnYXRpdmUpKSx0aGlzLml1YW5kKE0pfSx2LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oTSl7cmV0dXJuIHRoaXMubGVuZ3RoPk0u''@;'; put 'put ''bGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKE0pOk0uY2xvbmUoKS5pYW5kKHRoaXMpfSx2LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKE0pe3JldHVybiB0aGlzLmxlbmd0aD5NLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoTSk6TS5jbG9uZSgpLml1YW5kKHRoaXMpfSx2LnByb3RvdHlwZS5p''@;'; put 'put ''dXhvcj1mdW5jdGlvbihNKXt2YXIgQixLO3RoaXMubGVuZ3RoPk0ubGVuZ3RoPyhCPXRoaXMsSz1NKTooQj1NLEs9dGhpcyk7Zm9yKHZhciBHPTA7RzxLLmxlbmd0aDtHKyspdGhpcy53b3Jkc1tHXT1CLndvcmRzW0ddXksud29yZHNbR107aWYodGhpcyE9PUIpZm9yKDtHPEIubGVuZ3RoO0cr''@;'; put 'put ''Kyl0aGlzLndvcmRzW0ddPUIud29yZHNbR107cmV0dXJuIHRoaXMubGVuZ3RoPUIubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LHYucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oTSl7cmV0dXJuIHMoMD09PSh0aGlzLm5lZ2F0aXZlfE0ubmVnYXRpdmUpKSx0aGlzLml1eG9yKE0pfSx2LnByb3RvdHlw''@;'; put 'put ''ZS54b3I9ZnVuY3Rpb24oTSl7cmV0dXJuIHRoaXMubGVuZ3RoPk0ubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKE0pOk0uY2xvbmUoKS5peG9yKHRoaXMpfSx2LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKE0pe3JldHVybiB0aGlzLmxlbmd0aD5NLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3Io''@;'; put 'put ''TSk6TS5jbG9uZSgpLml1eG9yKHRoaXMpfSx2LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihNKXtzKCJudW1iZXIiPT10eXBlb2YgTSYmTT49MCk7dmFyIEI9MHxNYXRoLmNlaWwoTS8yNiksSz1NJTI2O3RoaXMuX2V4cGFuZChCKSxLPjAmJkItLTtmb3IodmFyIEc9MDtHPEI7RysrKXRoaXMu''@;'; put 'put ''d29yZHNbR109NjcxMDg4NjMmfnRoaXMud29yZHNbR107Zm9yKEs+MCYmKHRoaXMud29yZHNbR109fnRoaXMud29yZHNbR10mNjcxMDg4NjM+PjI2LUssRysrKTtHPHRoaXMubGVuZ3RoO0crKyl0aGlzLndvcmRzW0ddPTA7cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHYucHJvdG90eXBlLm5vdG49''@;'; put 'put ''ZnVuY3Rpb24oTSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihNKX0sdi5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihNLEIpe3MoIm51bWJlciI9PXR5cGVvZiBNJiZNPj0wKTt2YXIgSz1NLzI2fDAsRz1NJTI2O3JldHVybiB0aGlzLl9leHBhbmQoSysxKSx0aGlzLndvcmRzW0tdPUI/dGhp''@;'; put 'put ''cy53b3Jkc1tLXXwxPDxHOnRoaXMud29yZHNbS10mfigxPDxHKSx0aGlzLl9zdHJpcCgpfSx2LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKE0pe3ZhciBCLEssRztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PU0ubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxCPXRoaXMuaXN1YihN''@;'; put 'put ''KSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1NLm5lZ2F0aXZlKXJldHVybiBNLm5lZ2F0aXZlPTAsQj10aGlzLmlzdWIoTSksTS5uZWdhdGl2ZT0xLEIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+TS5sZW5ndGg/KEs9dGhpcyxH''@;'; put 'put ''PU0pOihLPU0sRz10aGlzKTtmb3IodmFyIEQ9MCxwPTA7cDxHLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT02NzEwODg2MyYoQj0oMHxLLndvcmRzW3BdKSsoMHxHLndvcmRzW3BdKStEKSxEPUI+Pj4yNjtmb3IoOzAhPT1EJiZwPEsubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPTY3MTA4ODYz''@;'; put 'put ''JihCPSgwfEsud29yZHNbcF0pK0QpLEQ9Qj4+PjI2O2lmKHRoaXMubGVuZ3RoPUsubGVuZ3RoLDAhPT1EKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPUQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKEshPT10aGlzKWZvcig7cDxLLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT1LLndvcmRzW3BdO3Jl''@;'; put 'put ''dHVybiB0aGlzfSx2LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oTSl7dmFyIEI7cmV0dXJuIDAhPT1NLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oTS5uZWdhdGl2ZT0wLEI9dGhpcy5zdWIoTSksTS5uZWdhdGl2ZV49MSxCKTowPT09TS5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/''@;'; put 'put ''KHRoaXMubmVnYXRpdmU9MCxCPU0uc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxCKTp0aGlzLmxlbmd0aD5NLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChNKTpNLmNsb25lKCkuaWFkZCh0aGlzKX0sdi5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihNKXtpZigwIT09TS5uZWdhdGl2ZSl7TS5u''@;'; put 'put ''ZWdhdGl2ZT0wO3ZhciBCPXRoaXMuaWFkZChNKTtyZXR1cm4gTS5uZWdhdGl2ZT0xLEIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoTSksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEcsRCxLPXRo''@;'; put 'put ''aXMuY21wKE0pO2lmKDA9PT1LKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztLPjA/KEc9dGhpcyxEPU0pOihHPU0sRD10aGlzKTtmb3IodmFyIHA9MCxJPTA7STxELmxlbmd0aDtJKyspcD0oQj0oMHxHLndvcmRzW0ldKS0oMHxELndv''@;'; put 'put ''cmRzW0ldKStwKT4+MjYsdGhpcy53b3Jkc1tJXT02NzEwODg2MyZCO2Zvcig7MCE9PXAmJkk8Ry5sZW5ndGg7SSsrKXA9KEI9KDB8Ry53b3Jkc1tJXSkrcCk+PjI2LHRoaXMud29yZHNbSV09NjcxMDg4NjMmQjtpZigwPT09cCYmSTxHLmxlbmd0aCYmRyE9PXRoaXMpZm9yKDtJPEcubGVuZ3Ro''@;'; put 'put ''O0krKyl0aGlzLndvcmRzW0ldPUcud29yZHNbSV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEkpLEchPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLl9zdHJpcCgpfSx2LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oTSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5p''@;'; put 'put ''c3ViKE0pfTt2YXIgRj1mdW5jdGlvbihNLEIsSyl7dmFyIHVlLG5lLF9lLEc9TS53b3JkcyxEPUIud29yZHMscD1LLndvcmRzLEk9MCxQZT0wfEdbMF0sb3Q9ODE5MSZQZSxsdD1QZT4+PjEzLGR0PTB8R1sxXSxSZT04MTkxJmR0LGFlPWR0Pj4+MTMseGU9MHxHWzJdLGplPTgxOTEmeGUsQWU9''@;'; put 'put ''eGU+Pj4xMyxEZT0wfEdbM10sRmU9ODE5MSZEZSxnZT1EZT4+PjEzLGNlPTB8R1s0XSxoZT04MTkxJmNlLHdlPWNlPj4+MTMsSmU9MHxHWzVdLHR0PTgxOTEmSmUsS2U9SmU+Pj4xMywkdD0wfEdbNl0sUnQ9ODE5MSYkdCxMdD0kdD4+PjEzLEd0PTB8R1s3XSxndD04MTkxJkd0LFh0PUd0Pj4+''@;'; put 'put ''MTMsTHI9MHxHWzhdLGxuPTgxOTEmTHIsT249THI+Pj4xMyxRcj0wfEdbOV0sdHI9ODE5MSZRcixIbj1Rcj4+PjEzLE9vPTB8RFswXSx1cj04MTkxJk9vLFpuPU9vPj4+MTMsU249MHxEWzFdLHhyPTgxOTEmU24sVHQ9U24+Pj4xMyxBcj0wfERbMl0sX249ODE5MSZBcixadD1Bcj4+PjEzLE5u''@;'; put 'put ''PTB8RFszXSxwdD04MTkxJk5uLHBuPU5uPj4+MTMsTWk9MHxEWzRdLEdlPTgxOTEmTWksVXQ9TWk+Pj4xMyx2cj0wfERbNV0seHQ9ODE5MSZ2cixCdD12cj4+PjEzLHpuPTB8RFs2XSxHbj04MTkxJnpuLHluPXpuPj4+MTMsdmk9MHxEWzddLHJyPTgxOTEmdmksaHI9dmk+Pj4xMyxwbz0wfERb''@;'; put 'put ''OF0sdm49ODE5MSZwbyxCbj1wbz4+PjEzLGphPTB8RFs5XSxqbz04MTkxJmphLFhyPWphPj4+MTM7Sy5uZWdhdGl2ZT1NLm5lZ2F0aXZlXkIubmVnYXRpdmUsSy5sZW5ndGg9MTk7dmFyIGVhPShJKyh1ZT1NYXRoLmltdWwob3QsdXIpKXwwKSsoKDgxOTEmKG5lPShuZT1NYXRoLmltdWwob3Qs''@;'; put 'put ''Wm4pKStNYXRoLmltdWwobHQsdXIpfDApKTw8MTMpfDA7ST0oKF9lPU1hdGguaW11bChsdCxabikpKyhuZT4+PjEzKXwwKSsoZWE+Pj4yNil8MCxlYSY9NjcxMDg4NjMsdWU9TWF0aC5pbXVsKFJlLHVyKSxuZT0obmU9TWF0aC5pbXVsKFJlLFpuKSkrTWF0aC5pbXVsKGFlLHVyKXwwLF9lPU1h''@;'; put 'put ''dGguaW11bChhZSxabik7dmFyIHJhPShJKyh1ZT11ZStNYXRoLmltdWwob3QseHIpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChvdCxUdCl8MCkrTWF0aC5pbXVsKGx0LHhyKXwwKSk8PDEzKXwwO0k9KChfZT1fZStNYXRoLmltdWwobHQsVHQpfDApKyhuZT4+PjEzKXwwKSso''@;'; put 'put ''cmE+Pj4yNil8MCxyYSY9NjcxMDg4NjMsdWU9TWF0aC5pbXVsKGplLHVyKSxuZT0obmU9TWF0aC5pbXVsKGplLFpuKSkrTWF0aC5pbXVsKEFlLHVyKXwwLF9lPU1hdGguaW11bChBZSxabiksdWU9dWUrTWF0aC5pbXVsKFJlLHhyKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsVHQpfDApK01h''@;'; put 'put ''dGguaW11bChhZSx4cil8MCxfZT1fZStNYXRoLmltdWwoYWUsVHQpfDA7dmFyIGNhPShJKyh1ZT11ZStNYXRoLmltdWwob3QsX24pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChvdCxadCl8MCkrTWF0aC5pbXVsKGx0LF9uKXwwKSk8PDEzKXwwO0k9KChfZT1fZStNYXRoLmlt''@;'; put 'put ''dWwobHQsWnQpfDApKyhuZT4+PjEzKXwwKSsoY2E+Pj4yNil8MCxjYSY9NjcxMDg4NjMsdWU9TWF0aC5pbXVsKEZlLHVyKSxuZT0obmU9TWF0aC5pbXVsKEZlLFpuKSkrTWF0aC5pbXVsKGdlLHVyKXwwLF9lPU1hdGguaW11bChnZSxabiksdWU9dWUrTWF0aC5pbXVsKGplLHhyKXwwLG5lPShu''@;'; put 'put ''ZT1uZStNYXRoLmltdWwoamUsVHQpfDApK01hdGguaW11bChBZSx4cil8MCxfZT1fZStNYXRoLmltdWwoQWUsVHQpfDAsdWU9dWUrTWF0aC5pbXVsKFJlLF9uKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsWnQpfDApK01hdGguaW11bChhZSxfbil8MCxfZT1fZStNYXRoLmltdWwoYWUsWnQp''@;'; put 'put ''fDA7dmFyIENpPShJKyh1ZT11ZStNYXRoLmltdWwob3QscHQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChvdCxwbil8MCkrTWF0aC5pbXVsKGx0LHB0KXwwKSk8PDEzKXwwO0k9KChfZT1fZStNYXRoLmltdWwobHQscG4pfDApKyhuZT4+PjEzKXwwKSsoQ2k+Pj4yNil8MCxD''@;'; put 'put ''aSY9NjcxMDg4NjMsdWU9TWF0aC5pbXVsKGhlLHVyKSxuZT0obmU9TWF0aC5pbXVsKGhlLFpuKSkrTWF0aC5pbXVsKHdlLHVyKXwwLF9lPU1hdGguaW11bCh3ZSxabiksdWU9dWUrTWF0aC5pbXVsKEZlLHhyKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRmUsVHQpfDApK01hdGguaW11bChnZSx4''@;'; put 'put ''cil8MCxfZT1fZStNYXRoLmltdWwoZ2UsVHQpfDAsdWU9dWUrTWF0aC5pbXVsKGplLF9uKXwwLG5lPShuZT1uZStNYXRoLmltdWwoamUsWnQpfDApK01hdGguaW11bChBZSxfbil8MCxfZT1fZStNYXRoLmltdWwoQWUsWnQpfDAsdWU9dWUrTWF0aC5pbXVsKFJlLHB0KXwwLG5lPShuZT1uZStN''@;'; put 'put ''YXRoLmltdWwoUmUscG4pfDApK01hdGguaW11bChhZSxwdCl8MCxfZT1fZStNYXRoLmltdWwoYWUscG4pfDA7dmFyIGhvPShJKyh1ZT11ZStNYXRoLmltdWwob3QsR2UpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChvdCxVdCl8MCkrTWF0aC5pbXVsKGx0LEdlKXwwKSk8PDEz''@;'; put 'put ''KXwwO0k9KChfZT1fZStNYXRoLmltdWwobHQsVXQpfDApKyhuZT4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsdWU9TWF0aC5pbXVsKHR0LHVyKSxuZT0obmU9TWF0aC5pbXVsKHR0LFpuKSkrTWF0aC5pbXVsKEtlLHVyKXwwLF9lPU1hdGguaW11bChLZSxabiksdWU9dWUrTWF0''@;'; put 'put ''aC5pbXVsKGhlLHhyKXwwLG5lPShuZT1uZStNYXRoLmltdWwoaGUsVHQpfDApK01hdGguaW11bCh3ZSx4cil8MCxfZT1fZStNYXRoLmltdWwod2UsVHQpfDAsdWU9dWUrTWF0aC5pbXVsKEZlLF9uKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRmUsWnQpfDApK01hdGguaW11bChnZSxfbil8MCxf''@;'; put 'put ''ZT1fZStNYXRoLmltdWwoZ2UsWnQpfDAsdWU9dWUrTWF0aC5pbXVsKGplLHB0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoamUscG4pfDApK01hdGguaW11bChBZSxwdCl8MCxfZT1fZStNYXRoLmltdWwoQWUscG4pfDAsdWU9dWUrTWF0aC5pbXVsKFJlLEdlKXwwLG5lPShuZT1uZStNYXRoLmlt''@;'; put 'put ''dWwoUmUsVXQpfDApK01hdGguaW11bChhZSxHZSl8MCxfZT1fZStNYXRoLmltdWwoYWUsVXQpfDA7dmFyIE1hPShJKyh1ZT11ZStNYXRoLmltdWwob3QseHQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChvdCxCdCl8MCkrTWF0aC5pbXVsKGx0LHh0KXwwKSk8PDEzKXwwO0k9''@;'; put 'put ''KChfZT1fZStNYXRoLmltdWwobHQsQnQpfDApKyhuZT4+PjEzKXwwKSsoTWE+Pj4yNil8MCxNYSY9NjcxMDg4NjMsdWU9TWF0aC5pbXVsKFJ0LHVyKSxuZT0obmU9TWF0aC5pbXVsKFJ0LFpuKSkrTWF0aC5pbXVsKEx0LHVyKXwwLF9lPU1hdGguaW11bChMdCxabiksdWU9dWUrTWF0aC5pbXVs''@;'; put 'put ''KHR0LHhyKXwwLG5lPShuZT1uZStNYXRoLmltdWwodHQsVHQpfDApK01hdGguaW11bChLZSx4cil8MCxfZT1fZStNYXRoLmltdWwoS2UsVHQpfDAsdWU9dWUrTWF0aC5pbXVsKGhlLF9uKXwwLG5lPShuZT1uZStNYXRoLmltdWwoaGUsWnQpfDApK01hdGguaW11bCh3ZSxfbil8MCxfZT1fZStN''@;'; put 'put ''YXRoLmltdWwod2UsWnQpfDAsdWU9dWUrTWF0aC5pbXVsKEZlLHB0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRmUscG4pfDApK01hdGguaW11bChnZSxwdCl8MCxfZT1fZStNYXRoLmltdWwoZ2UscG4pfDAsdWU9dWUrTWF0aC5pbXVsKGplLEdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoamUs''@;'; put 'put ''VXQpfDApK01hdGguaW11bChBZSxHZSl8MCxfZT1fZStNYXRoLmltdWwoQWUsVXQpfDAsdWU9dWUrTWF0aC5pbXVsKFJlLHh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsQnQpfDApK01hdGguaW11bChhZSx4dCl8MCxfZT1fZStNYXRoLmltdWwoYWUsQnQpfDA7dmFyIGtzPShJKyh1ZT11''@;'; put 'put ''ZStNYXRoLmltdWwob3QsR24pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChvdCx5bil8MCkrTWF0aC5pbXVsKGx0LEduKXwwKSk8PDEzKXwwO0k9KChfZT1fZStNYXRoLmltdWwobHQseW4pfDApKyhuZT4+PjEzKXwwKSsoa3M+Pj4yNil8MCxrcyY9NjcxMDg4NjMsdWU9TWF0''@;'; put 'put ''aC5pbXVsKGd0LHVyKSxuZT0obmU9TWF0aC5pbXVsKGd0LFpuKSkrTWF0aC5pbXVsKFh0LHVyKXwwLF9lPU1hdGguaW11bChYdCxabiksdWU9dWUrTWF0aC5pbXVsKFJ0LHhyKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUnQsVHQpfDApK01hdGguaW11bChMdCx4cil8MCxfZT1fZStNYXRoLmlt''@;'; put 'put ''dWwoTHQsVHQpfDAsdWU9dWUrTWF0aC5pbXVsKHR0LF9uKXwwLG5lPShuZT1uZStNYXRoLmltdWwodHQsWnQpfDApK01hdGguaW11bChLZSxfbil8MCxfZT1fZStNYXRoLmltdWwoS2UsWnQpfDAsdWU9dWUrTWF0aC5pbXVsKGhlLHB0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoaGUscG4pfDAp''@;'; put 'put ''K01hdGguaW11bCh3ZSxwdCl8MCxfZT1fZStNYXRoLmltdWwod2UscG4pfDAsdWU9dWUrTWF0aC5pbXVsKEZlLEdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRmUsVXQpfDApK01hdGguaW11bChnZSxHZSl8MCxfZT1fZStNYXRoLmltdWwoZ2UsVXQpfDAsdWU9dWUrTWF0aC5pbXVsKGplLHh0''@;'; put 'put ''KXwwLG5lPShuZT1uZStNYXRoLmltdWwoamUsQnQpfDApK01hdGguaW11bChBZSx4dCl8MCxfZT1fZStNYXRoLmltdWwoQWUsQnQpfDAsdWU9dWUrTWF0aC5pbXVsKFJlLEduKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUseW4pfDApK01hdGguaW11bChhZSxHbil8MCxfZT1fZStNYXRoLmlt''@;'; put 'put ''dWwoYWUseW4pfDA7dmFyIEJpPShJKyh1ZT11ZStNYXRoLmltdWwob3QscnIpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChvdCxocil8MCkrTWF0aC5pbXVsKGx0LHJyKXwwKSk8PDEzKXwwO0k9KChfZT1fZStNYXRoLmltdWwobHQsaHIpfDApKyhuZT4+PjEzKXwwKSsoQmk+''@;'; put 'put ''Pj4yNil8MCxCaSY9NjcxMDg4NjMsdWU9TWF0aC5pbXVsKGxuLHVyKSxuZT0obmU9TWF0aC5pbXVsKGxuLFpuKSkrTWF0aC5pbXVsKE9uLHVyKXwwLF9lPU1hdGguaW11bChPbixabiksdWU9dWUrTWF0aC5pbXVsKGd0LHhyKXwwLG5lPShuZT1uZStNYXRoLmltdWwoZ3QsVHQpfDApK01hdGgu''@;'; put 'put ''aW11bChYdCx4cil8MCxfZT1fZStNYXRoLmltdWwoWHQsVHQpfDAsdWU9dWUrTWF0aC5pbXVsKFJ0LF9uKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUnQsWnQpfDApK01hdGguaW11bChMdCxfbil8MCxfZT1fZStNYXRoLmltdWwoTHQsWnQpfDAsdWU9dWUrTWF0aC5pbXVsKHR0LHB0KXwwLG5l''@;'; put 'put ''PShuZT1uZStNYXRoLmltdWwodHQscG4pfDApK01hdGguaW11bChLZSxwdCl8MCxfZT1fZStNYXRoLmltdWwoS2UscG4pfDAsdWU9dWUrTWF0aC5pbXVsKGhlLEdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoaGUsVXQpfDApK01hdGguaW11bCh3ZSxHZSl8MCxfZT1fZStNYXRoLmltdWwod2Us''@;'; put 'put ''VXQpfDAsdWU9dWUrTWF0aC5pbXVsKEZlLHh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRmUsQnQpfDApK01hdGguaW11bChnZSx4dCl8MCxfZT1fZStNYXRoLmltdWwoZ2UsQnQpfDAsdWU9dWUrTWF0aC5pbXVsKGplLEduKXwwLG5lPShuZT1uZStNYXRoLmltdWwoamUseW4pfDApK01hdGgu''@;'; put 'put ''aW11bChBZSxHbil8MCxfZT1fZStNYXRoLmltdWwoQWUseW4pfDAsdWU9dWUrTWF0aC5pbXVsKFJlLHJyKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsaHIpfDApK01hdGguaW11bChhZSxycil8MCxfZT1fZStNYXRoLmltdWwoYWUsaHIpfDA7dmFyIHRhPShJKyh1ZT11ZStNYXRoLmltdWwo''@;'; put 'put ''b3Qsdm4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChvdCxCbil8MCkrTWF0aC5pbXVsKGx0LHZuKXwwKSk8PDEzKXwwO0k9KChfZT1fZStNYXRoLmltdWwobHQsQm4pfDApKyhuZT4+PjEzKXwwKSsodGE+Pj4yNil8MCx0YSY9NjcxMDg4NjMsdWU9TWF0aC5pbXVsKHRyLHVy''@;'; put 'put ''KSxuZT0obmU9TWF0aC5pbXVsKHRyLFpuKSkrTWF0aC5pbXVsKEhuLHVyKXwwLF9lPU1hdGguaW11bChIbixabiksdWU9dWUrTWF0aC5pbXVsKGxuLHhyKXwwLG5lPShuZT1uZStNYXRoLmltdWwobG4sVHQpfDApK01hdGguaW11bChPbix4cil8MCxfZT1fZStNYXRoLmltdWwoT24sVHQpfDAs''@;'; put 'put ''dWU9dWUrTWF0aC5pbXVsKGd0LF9uKXwwLG5lPShuZT1uZStNYXRoLmltdWwoZ3QsWnQpfDApK01hdGguaW11bChYdCxfbil8MCxfZT1fZStNYXRoLmltdWwoWHQsWnQpfDAsdWU9dWUrTWF0aC5pbXVsKFJ0LHB0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUnQscG4pfDApK01hdGguaW11bChM''@;'; put 'put ''dCxwdCl8MCxfZT1fZStNYXRoLmltdWwoTHQscG4pfDAsdWU9dWUrTWF0aC5pbXVsKHR0LEdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwodHQsVXQpfDApK01hdGguaW11bChLZSxHZSl8MCxfZT1fZStNYXRoLmltdWwoS2UsVXQpfDAsdWU9dWUrTWF0aC5pbXVsKGhlLHh0KXwwLG5lPShuZT1u''@;'; put 'put ''ZStNYXRoLmltdWwoaGUsQnQpfDApK01hdGguaW11bCh3ZSx4dCl8MCxfZT1fZStNYXRoLmltdWwod2UsQnQpfDAsdWU9dWUrTWF0aC5pbXVsKEZlLEduKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRmUseW4pfDApK01hdGguaW11bChnZSxHbil8MCxfZT1fZStNYXRoLmltdWwoZ2UseW4pfDAs''@;'; put 'put ''dWU9dWUrTWF0aC5pbXVsKGplLHJyKXwwLG5lPShuZT1uZStNYXRoLmltdWwoamUsaHIpfDApK01hdGguaW11bChBZSxycil8MCxfZT1fZStNYXRoLmltdWwoQWUsaHIpfDAsdWU9dWUrTWF0aC5pbXVsKFJlLHZuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsQm4pfDApK01hdGguaW11bChh''@;'; put 'put ''ZSx2bil8MCxfZT1fZStNYXRoLmltdWwoYWUsQm4pfDA7dmFyIE1yPShJKyh1ZT11ZStNYXRoLmltdWwob3Qsam8pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChvdCxYcil8MCkrTWF0aC5pbXVsKGx0LGpvKXwwKSk8PDEzKXwwO0k9KChfZT1fZStNYXRoLmltdWwobHQsWHIp''@;'; put 'put ''fDApKyhuZT4+PjEzKXwwKSsoTXI+Pj4yNil8MCxNciY9NjcxMDg4NjMsdWU9TWF0aC5pbXVsKHRyLHhyKSxuZT0obmU9TWF0aC5pbXVsKHRyLFR0KSkrTWF0aC5pbXVsKEhuLHhyKXwwLF9lPU1hdGguaW11bChIbixUdCksdWU9dWUrTWF0aC5pbXVsKGxuLF9uKXwwLG5lPShuZT1uZStNYXRo''@;'; put 'put ''LmltdWwobG4sWnQpfDApK01hdGguaW11bChPbixfbil8MCxfZT1fZStNYXRoLmltdWwoT24sWnQpfDAsdWU9dWUrTWF0aC5pbXVsKGd0LHB0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoZ3QscG4pfDApK01hdGguaW11bChYdCxwdCl8MCxfZT1fZStNYXRoLmltdWwoWHQscG4pfDAsdWU9dWUr''@;'; put 'put ''TWF0aC5pbXVsKFJ0LEdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUnQsVXQpfDApK01hdGguaW11bChMdCxHZSl8MCxfZT1fZStNYXRoLmltdWwoTHQsVXQpfDAsdWU9dWUrTWF0aC5pbXVsKHR0LHh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwodHQsQnQpfDApK01hdGguaW11bChLZSx4dCl8''@;'; put 'put ''MCxfZT1fZStNYXRoLmltdWwoS2UsQnQpfDAsdWU9dWUrTWF0aC5pbXVsKGhlLEduKXwwLG5lPShuZT1uZStNYXRoLmltdWwoaGUseW4pfDApK01hdGguaW11bCh3ZSxHbil8MCxfZT1fZStNYXRoLmltdWwod2UseW4pfDAsdWU9dWUrTWF0aC5pbXVsKEZlLHJyKXwwLG5lPShuZT1uZStNYXRo''@;'; put 'put ''LmltdWwoRmUsaHIpfDApK01hdGguaW11bChnZSxycil8MCxfZT1fZStNYXRoLmltdWwoZ2UsaHIpfDAsdWU9dWUrTWF0aC5pbXVsKGplLHZuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoamUsQm4pfDApK01hdGguaW11bChBZSx2bil8MCxfZT1fZStNYXRoLmltdWwoQWUsQm4pfDA7dmFyIEZz''@;'; put 'put ''PShJKyh1ZT11ZStNYXRoLmltdWwoUmUsam8pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChSZSxYcil8MCkrTWF0aC5pbXVsKGFlLGpvKXwwKSk8PDEzKXwwO0k9KChfZT1fZStNYXRoLmltdWwoYWUsWHIpfDApKyhuZT4+PjEzKXwwKSsoRnM+Pj4yNil8MCxGcyY9NjcxMDg4''@;'; put 'put ''NjMsdWU9TWF0aC5pbXVsKHRyLF9uKSxuZT0obmU9TWF0aC5pbXVsKHRyLFp0KSkrTWF0aC5pbXVsKEhuLF9uKXwwLF9lPU1hdGguaW11bChIbixadCksdWU9dWUrTWF0aC5pbXVsKGxuLHB0KXwwLG5lPShuZT1uZStNYXRoLmltdWwobG4scG4pfDApK01hdGguaW11bChPbixwdCl8MCxfZT1f''@;'; put 'put ''ZStNYXRoLmltdWwoT24scG4pfDAsdWU9dWUrTWF0aC5pbXVsKGd0LEdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoZ3QsVXQpfDApK01hdGguaW11bChYdCxHZSl8MCxfZT1fZStNYXRoLmltdWwoWHQsVXQpfDAsdWU9dWUrTWF0aC5pbXVsKFJ0LHh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwo''@;'; put 'put ''UnQsQnQpfDApK01hdGguaW11bChMdCx4dCl8MCxfZT1fZStNYXRoLmltdWwoTHQsQnQpfDAsdWU9dWUrTWF0aC5pbXVsKHR0LEduKXwwLG5lPShuZT1uZStNYXRoLmltdWwodHQseW4pfDApK01hdGguaW11bChLZSxHbil8MCxfZT1fZStNYXRoLmltdWwoS2UseW4pfDAsdWU9dWUrTWF0aC5p''@;'; put 'put ''bXVsKGhlLHJyKXwwLG5lPShuZT1uZStNYXRoLmltdWwoaGUsaHIpfDApK01hdGguaW11bCh3ZSxycil8MCxfZT1fZStNYXRoLmltdWwod2UsaHIpfDAsdWU9dWUrTWF0aC5pbXVsKEZlLHZuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRmUsQm4pfDApK01hdGguaW11bChnZSx2bil8MCxfZT1f''@;'; put 'put ''ZStNYXRoLmltdWwoZ2UsQm4pfDA7dmFyICRpPShJKyh1ZT11ZStNYXRoLmltdWwoamUsam8pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChqZSxYcil8MCkrTWF0aC5pbXVsKEFlLGpvKXwwKSk8PDEzKXwwO0k9KChfZT1fZStNYXRoLmltdWwoQWUsWHIpfDApKyhuZT4+PjEz''@;'; put 'put ''KXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsdWU9TWF0aC5pbXVsKHRyLHB0KSxuZT0obmU9TWF0aC5pbXVsKHRyLHBuKSkrTWF0aC5pbXVsKEhuLHB0KXwwLF9lPU1hdGguaW11bChIbixwbiksdWU9dWUrTWF0aC5pbXVsKGxuLEdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwobG4sVXQp''@;'; put 'put ''fDApK01hdGguaW11bChPbixHZSl8MCxfZT1fZStNYXRoLmltdWwoT24sVXQpfDAsdWU9dWUrTWF0aC5pbXVsKGd0LHh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoZ3QsQnQpfDApK01hdGguaW11bChYdCx4dCl8MCxfZT1fZStNYXRoLmltdWwoWHQsQnQpfDAsdWU9dWUrTWF0aC5pbXVsKFJ0''@;'; put 'put ''LEduKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUnQseW4pfDApK01hdGguaW11bChMdCxHbil8MCxfZT1fZStNYXRoLmltdWwoTHQseW4pfDAsdWU9dWUrTWF0aC5pbXVsKHR0LHJyKXwwLG5lPShuZT1uZStNYXRoLmltdWwodHQsaHIpfDApK01hdGguaW11bChLZSxycil8MCxfZT1fZStNYXRo''@;'; put 'put ''LmltdWwoS2UsaHIpfDAsdWU9dWUrTWF0aC5pbXVsKGhlLHZuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoaGUsQm4pfDApK01hdGguaW11bCh3ZSx2bil8MCxfZT1fZStNYXRoLmltdWwod2UsQm4pfDA7dmFyIF9zPShJKyh1ZT11ZStNYXRoLmltdWwoRmUsam8pfDApfDApKygoODE5MSYobmU9''@;'; put 'put ''KG5lPW5lK01hdGguaW11bChGZSxYcil8MCkrTWF0aC5pbXVsKGdlLGpvKXwwKSk8PDEzKXwwO0k9KChfZT1fZStNYXRoLmltdWwoZ2UsWHIpfDApKyhuZT4+PjEzKXwwKSsoX3M+Pj4yNil8MCxfcyY9NjcxMDg4NjMsdWU9TWF0aC5pbXVsKHRyLEdlKSxuZT0obmU9TWF0aC5pbXVsKHRyLFV0''@;'; put 'put ''KSkrTWF0aC5pbXVsKEhuLEdlKXwwLF9lPU1hdGguaW11bChIbixVdCksdWU9dWUrTWF0aC5pbXVsKGxuLHh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwobG4sQnQpfDApK01hdGguaW11bChPbix4dCl8MCxfZT1fZStNYXRoLmltdWwoT24sQnQpfDAsdWU9dWUrTWF0aC5pbXVsKGd0LEduKXww''@;'; put 'put ''LG5lPShuZT1uZStNYXRoLmltdWwoZ3QseW4pfDApK01hdGguaW11bChYdCxHbil8MCxfZT1fZStNYXRoLmltdWwoWHQseW4pfDAsdWU9dWUrTWF0aC5pbXVsKFJ0LHJyKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUnQsaHIpfDApK01hdGguaW11bChMdCxycil8MCxfZT1fZStNYXRoLmltdWwo''@;'; put 'put ''THQsaHIpfDAsdWU9dWUrTWF0aC5pbXVsKHR0LHZuKXwwLG5lPShuZT1uZStNYXRoLmltdWwodHQsQm4pfDApK01hdGguaW11bChLZSx2bil8MCxfZT1fZStNYXRoLmltdWwoS2UsQm4pfDA7dmFyIGpzPShJKyh1ZT11ZStNYXRoLmltdWwoaGUsam8pfDApfDApKygoODE5MSYobmU9KG5lPW5l''@;'; put 'put ''K01hdGguaW11bChoZSxYcil8MCkrTWF0aC5pbXVsKHdlLGpvKXwwKSk8PDEzKXwwO0k9KChfZT1fZStNYXRoLmltdWwod2UsWHIpfDApKyhuZT4+PjEzKXwwKSsoanM+Pj4yNil8MCxqcyY9NjcxMDg4NjMsdWU9TWF0aC5pbXVsKHRyLHh0KSxuZT0obmU9TWF0aC5pbXVsKHRyLEJ0KSkrTWF0''@;'; put 'put ''aC5pbXVsKEhuLHh0KXwwLF9lPU1hdGguaW11bChIbixCdCksdWU9dWUrTWF0aC5pbXVsKGxuLEduKXwwLG5lPShuZT1uZStNYXRoLmltdWwobG4seW4pfDApK01hdGguaW11bChPbixHbil8MCxfZT1fZStNYXRoLmltdWwoT24seW4pfDAsdWU9dWUrTWF0aC5pbXVsKGd0LHJyKXwwLG5lPShu''@;'; put 'put ''ZT1uZStNYXRoLmltdWwoZ3QsaHIpfDApK01hdGguaW11bChYdCxycil8MCxfZT1fZStNYXRoLmltdWwoWHQsaHIpfDAsdWU9dWUrTWF0aC5pbXVsKFJ0LHZuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUnQsQm4pfDApK01hdGguaW11bChMdCx2bil8MCxfZT1fZStNYXRoLmltdWwoTHQsQm4p''@;'; put 'put ''fDA7dmFyIENsPShJKyh1ZT11ZStNYXRoLmltdWwodHQsam8pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh0dCxYcil8MCkrTWF0aC5pbXVsKEtlLGpvKXwwKSk8PDEzKXwwO0k9KChfZT1fZStNYXRoLmltdWwoS2UsWHIpfDApKyhuZT4+PjEzKXwwKSsoQ2w+Pj4yNil8MCxD''@;'; put 'put ''bCY9NjcxMDg4NjMsdWU9TWF0aC5pbXVsKHRyLEduKSxuZT0obmU9TWF0aC5pbXVsKHRyLHluKSkrTWF0aC5pbXVsKEhuLEduKXwwLF9lPU1hdGguaW11bChIbix5biksdWU9dWUrTWF0aC5pbXVsKGxuLHJyKXwwLG5lPShuZT1uZStNYXRoLmltdWwobG4saHIpfDApK01hdGguaW11bChPbixy''@;'; put 'put ''cil8MCxfZT1fZStNYXRoLmltdWwoT24saHIpfDAsdWU9dWUrTWF0aC5pbXVsKGd0LHZuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoZ3QsQm4pfDApK01hdGguaW11bChYdCx2bil8MCxfZT1fZStNYXRoLmltdWwoWHQsQm4pfDA7dmFyIFRpPShJKyh1ZT11ZStNYXRoLmltdWwoUnQsam8pfDAp''@;'; put 'put ''fDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChSdCxYcil8MCkrTWF0aC5pbXVsKEx0LGpvKXwwKSk8PDEzKXwwO0k9KChfZT1fZStNYXRoLmltdWwoTHQsWHIpfDApKyhuZT4+PjEzKXwwKSsoVGk+Pj4yNil8MCxUaSY9NjcxMDg4NjMsdWU9TWF0aC5pbXVsKHRyLHJyKSxuZT0obmU9''@;'; put 'put ''TWF0aC5pbXVsKHRyLGhyKSkrTWF0aC5pbXVsKEhuLHJyKXwwLF9lPU1hdGguaW11bChIbixociksdWU9dWUrTWF0aC5pbXVsKGxuLHZuKXwwLG5lPShuZT1uZStNYXRoLmltdWwobG4sQm4pfDApK01hdGguaW11bChPbix2bil8MCxfZT1fZStNYXRoLmltdWwoT24sQm4pfDA7dmFyIFduPShJ''@;'; put 'put ''Kyh1ZT11ZStNYXRoLmltdWwoZ3Qsam8pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChndCxYcil8MCkrTWF0aC5pbXVsKFh0LGpvKXwwKSk8PDEzKXwwO0k9KChfZT1fZStNYXRoLmltdWwoWHQsWHIpfDApKyhuZT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMs''@;'; put 'put ''dWU9TWF0aC5pbXVsKHRyLHZuKSxuZT0obmU9TWF0aC5pbXVsKHRyLEJuKSkrTWF0aC5pbXVsKEhuLHZuKXwwLF9lPU1hdGguaW11bChIbixCbik7dmFyIFFoPShJKyh1ZT11ZStNYXRoLmltdWwobG4sam8pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChsbixYcil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKE9uLGpvKXwwKSk8PDEzKXwwO0k9KChfZT1fZStNYXRoLmltdWwoT24sWHIpfDApKyhuZT4+PjEzKXwwKSsoUWg+Pj4yNil8MCxRaCY9NjcxMDg4NjM7dmFyIGRjPShJKyh1ZT1NYXRoLmltdWwodHIsam8pKXwwKSsoKDgxOTEmKG5lPShuZT1NYXRoLmltdWwodHIsWHIpKStNYXRo''@;'; put 'put ''LmltdWwoSG4sam8pfDApKTw8MTMpfDA7cmV0dXJuIEk9KChfZT1NYXRoLmltdWwoSG4sWHIpKSsobmU+Pj4xMyl8MCkrKGRjPj4+MjYpfDAsZGMmPTY3MTA4ODYzLHBbMF09ZWEscFsxXT1yYSxwWzJdPWNhLHBbM109Q2kscFs0XT1obyxwWzVdPU1hLHBbNl09a3MscFs3XT1CaSxwWzhdPXRh''@;'; put 'put ''LHBbOV09TXIscFsxMF09RnMscFsxMV09JGkscFsxMl09X3MscFsxM109anMscFsxNF09Q2wscFsxNV09VGkscFsxNl09V24scFsxN109UWgscFsxOF09ZGMsMCE9PUkmJihwWzE5XT1JLEsubGVuZ3RoKyspLEt9O2Z1bmN0aW9uIFcoayxNLEIpe0IubmVnYXRpdmU9TS5uZWdhdGl2ZV5rLm5l''@;'; put 'put ''Z2F0aXZlLEIubGVuZ3RoPWsubGVuZ3RoK00ubGVuZ3RoO2Zvcih2YXIgSz0wLEc9MCxEPTA7RDxCLmxlbmd0aC0xO0QrKyl7dmFyIHA9RztHPTA7Zm9yKHZhciBJPTY3MTA4ODYzJkssdWU9TWF0aC5taW4oRCxNLmxlbmd0aC0xKSxuZT1NYXRoLm1heCgwLEQtay5sZW5ndGgrMSk7bmU8PXVl''@;'; put 'put ''O25lKyspe3ZhciBsdD0oMHxrLndvcmRzW0QtbmVdKSooMHxNLndvcmRzW25lXSksZHQ9NjcxMDg4NjMmbHQ7ST02NzEwODg2MyYoZHQ9ZHQrSXwwKSxHKz0ocD0ocD1wKyhsdC82NzEwODg2NHwwKXwwKSsoZHQ+Pj4yNil8MCk+Pj4yNixwJj02NzEwODg2M31CLndvcmRzW0RdPUksSz1wLHA9''@;'; put 'put ''R31yZXR1cm4gMCE9PUs/Qi53b3Jkc1tEXT1LOkIubGVuZ3RoLS0sQi5fc3RyaXAoKX1mdW5jdGlvbiBxKGssTSxCKXtyZXR1cm4gVyhrLE0sQil9ZnVuY3Rpb24gcmUoayxNKXt0aGlzLng9ayx0aGlzLnk9TX1NYXRoLmltdWx8fChGPVkpLHYucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKE0s''@;'; put 'put ''Qil7dmFyIEc9dGhpcy5sZW5ndGgrTS5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09TS5sZW5ndGg/Rih0aGlzLE0sQik6Rzw2Mz9ZKHRoaXMsTSxCKTpHPDEwMjQ/Vyh0aGlzLE0sQik6cSh0aGlzLE0sQil9LHJlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKE0pe2Zv''@;'; put 'put ''cih2YXIgQj1uZXcgQXJyYXkoTSksSz12LnByb3RvdHlwZS5fY291bnRCaXRzKE0pLTEsRz0wO0c8TTtHKyspQltHXT10aGlzLnJldkJpbihHLEssTSk7cmV0dXJuIEJ9LHJlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oTSxCLEspe2lmKDA9PT1NfHxNPT09Sy0xKXJldHVybiBNO2Zvcih2''@;'; put 'put ''YXIgRz0wLEQ9MDtEPEI7RCsrKUd8PSgxJk0pPDxCLUQtMSxNPj49MTtyZXR1cm4gR30scmUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oTSxCLEssRyxELHApe2Zvcih2YXIgST0wO0k8cDtJKyspR1tJXT1CW01bSV1dLERbSV09S1tNW0ldXX0scmUucHJvdG90eXBlLnRyYW5zZm9ybT1m''@;'; put 'put ''dW5jdGlvbihNLEIsSyxHLEQscCl7dGhpcy5wZXJtdXRlKHAsTSxCLEssRyxEKTtmb3IodmFyIEk9MTtJPEQ7STw8PTEpZm9yKHZhciB1ZT1JPDwxLG5lPU1hdGguY29zKDIqTWF0aC5QSS91ZSksX2U9TWF0aC5zaW4oMipNYXRoLlBJL3VlKSxQZT0wO1BlPEQ7UGUrPXVlKWZvcih2YXIgb3Q9''@;'; put 'put ''bmUsbHQ9X2UsZHQ9MDtkdDxJO2R0Kyspe3ZhciBSZT1LW1BlK2R0XSxhZT1HW1BlK2R0XSx4ZT1LW1BlK2R0K0ldLGplPUdbUGUrZHQrSV0sQWU9b3QqeGUtbHQqamU7amU9b3QqamUrbHQqeGUsS1tQZStkdF09UmUrKHhlPUFlKSxHW1BlK2R0XT1hZStqZSxLW1BlK2R0K0ldPVJlLXhlLEdb''@;'; put 'put ''UGUrZHQrSV09YWUtamUsZHQhPT11ZSYmKEFlPW5lKm90LV9lKmx0LGx0PW5lKmx0K19lKm90LG90PUFlKX19LHJlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihNLEIpe3ZhciBLPTF8TWF0aC5tYXgoQixNKSxHPTEmSyxEPTA7Zm9yKEs9Sy8yfDA7SztLPj4+PTEpRCsrO3JldHVy''@;'; put 'put ''biAxPDxEKzErR30scmUucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihNLEIsSyl7aWYoIShLPD0xKSlmb3IodmFyIEc9MDtHPEsvMjtHKyspe3ZhciBEPU1bR107TVtHXT1NW0stRy0xXSxNW0stRy0xXT1ELEQ9QltHXSxCW0ddPS1CW0stRy0xXSxCW0stRy0xXT0tRH19LHJlLnByb3Rv''@;'; put 'put ''dHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oTSxCKXtmb3IodmFyIEs9MCxHPTA7RzxCLzI7RysrKXt2YXIgRD04MTkyKk1hdGgucm91bmQoTVsyKkcrMV0vQikrTWF0aC5yb3VuZChNWzIqR10vQikrSztNW0ddPTY3MTA4ODYzJkQsSz1EPDY3MTA4ODY0PzA6RC82NzEwODg2NHwwfXJldHVy''@;'; put 'put ''biBNfSxyZS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihNLEIsSyxHKXtmb3IodmFyIEQ9MCxwPTA7cDxCO3ArKylLWzIqcF09ODE5MSYoRCs9MHxNW3BdKSxLWzIqcCsxXT04MTkxJihEPj4+PTEzKSxEPj4+PTEzO2ZvcihwPTIqQjtwPEc7KytwKUtbcF09MDtzKDA9PT1EKSxzKCEo''@;'; put 'put ''LTgxOTImRCkpfSxyZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihNKXtmb3IodmFyIEI9bmV3IEFycmF5KE0pLEs9MDtLPE07SysrKUJbS109MDtyZXR1cm4gQn0scmUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oTSxCLEspe3ZhciBHPTIqdGhpcy5ndWVzc0xlbjEzYihNLmxlbmd0aCxCLmxl''@;'; put 'put ''bmd0aCksRD10aGlzLm1ha2VSQlQoRykscD10aGlzLnN0dWIoRyksST1uZXcgQXJyYXkoRyksdWU9bmV3IEFycmF5KEcpLG5lPW5ldyBBcnJheShHKSxfZT1uZXcgQXJyYXkoRyksUGU9bmV3IEFycmF5KEcpLG90PW5ldyBBcnJheShHKSxsdD1LLndvcmRzO2x0Lmxlbmd0aD1HLHRoaXMuY29u''@;'; put 'put ''dmVydDEzYihNLndvcmRzLE0ubGVuZ3RoLEksRyksdGhpcy5jb252ZXJ0MTNiKEIud29yZHMsQi5sZW5ndGgsX2UsRyksdGhpcy50cmFuc2Zvcm0oSSxwLHVlLG5lLEcsRCksdGhpcy50cmFuc2Zvcm0oX2UscCxQZSxvdCxHLEQpO2Zvcih2YXIgZHQ9MDtkdDxHO2R0Kyspe3ZhciBSZT11ZVtk''@;'; put 'put ''dF0qUGVbZHRdLW5lW2R0XSpvdFtkdF07bmVbZHRdPXVlW2R0XSpvdFtkdF0rbmVbZHRdKlBlW2R0XSx1ZVtkdF09UmV9cmV0dXJuIHRoaXMuY29uanVnYXRlKHVlLG5lLEcpLHRoaXMudHJhbnNmb3JtKHVlLG5lLGx0LHAsRyxEKSx0aGlzLmNvbmp1Z2F0ZShsdCxwLEcpLHRoaXMubm9ybWFs''@;'; put 'put ''aXplMTNiKGx0LEcpLEsubmVnYXRpdmU9TS5uZWdhdGl2ZV5CLm5lZ2F0aXZlLEsubGVuZ3RoPU0ubGVuZ3RoK0IubGVuZ3RoLEsuX3N0cmlwKCl9LHYucHJvdG90eXBlLm11bD1mdW5jdGlvbihNKXt2YXIgQj1uZXcgdihudWxsKTtyZXR1cm4gQi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5n''@;'; put 'put ''dGgrTS5sZW5ndGgpLHRoaXMubXVsVG8oTSxCKX0sdi5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihNKXt2YXIgQj1uZXcgdihudWxsKTtyZXR1cm4gQi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrTS5sZW5ndGgpLHEodGhpcyxNLEIpfSx2LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKE0p''@;'; put 'put ''e3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oTSx0aGlzKX0sdi5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oTSl7dmFyIEI9TTwwO0ImJihNPS1NKSxzKCJudW1iZXIiPT10eXBlb2YgTSkscyhNPDY3MTA4ODY0KTtmb3IodmFyIEs9MCxHPTA7Rzx0aGlzLmxlbmd0aDtHKyspe3ZhciBEPSgw''@;'; put 'put ''fHRoaXMud29yZHNbR10pKk0scD0oNjcxMDg4NjMmRCkrKDY3MTA4ODYzJkspO0s+Pj0yNixLKz1ELzY3MTA4ODY0fDAsSys9cD4+PjI2LHRoaXMud29yZHNbR109NjcxMDg4NjMmcH1yZXR1cm4gMCE9PUsmJih0aGlzLndvcmRzW0ddPUssdGhpcy5sZW5ndGgrKyksMD09PU0mJih0aGlzLmxl''@;'; put 'put ''bmd0aD0xLHRoaXMuX25vcm1TaWduKCkpLEI/dGhpcy5pbmVnKCk6dGhpc30sdi5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihNKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKE0pfSx2LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHYucHJvdG90eXBl''@;'; put 'put ''LmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHYucHJvdG90eXBlLnBvdz1mdW5jdGlvbihNKXt2YXIgQj1mdW5jdGlvbiB6KGspe2Zvcih2YXIgTT1uZXcgQXJyYXkoay5iaXRMZW5ndGgoKSksQj0wO0I8TS5sZW5ndGg7QisrKU1bQl09ay53b3Jkc1tC''@;'; put 'put ''LzI2fDBdPj4+QiUyNiYxO3JldHVybiBNfShNKTtpZigwPT09Qi5sZW5ndGgpcmV0dXJuIG5ldyB2KDEpO2Zvcih2YXIgSz10aGlzLEc9MDtHPEIubGVuZ3RoJiYwPT09QltHXTtHKyssSz1LLnNxcigpKTtpZigrK0c8Qi5sZW5ndGgpZm9yKHZhciBEPUsuc3FyKCk7RzxCLmxlbmd0aDtHKyss''@;'; put 'put ''RD1ELnNxcigpKTAhPT1CW0ddJiYoSz1LLm11bChEKSk7cmV0dXJuIEt9LHYucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihNKXtzKCJudW1iZXIiPT10eXBlb2YgTSYmTT49MCk7dmFyIEQsQj1NJTI2LEs9KE0tQikvMjYsRz02NzEwODg2Mz4+PjI2LUI8PDI2LUI7aWYoMCE9PUIpe3ZhciBw''@;'; put 'put ''PTA7Zm9yKEQ9MDtEPHRoaXMubGVuZ3RoO0QrKyl7dmFyIEk9dGhpcy53b3Jkc1tEXSZHO3RoaXMud29yZHNbRF09KDB8dGhpcy53b3Jkc1tEXSktSTw8QnxwLHA9ST4+PjI2LUJ9cCYmKHRoaXMud29yZHNbRF09cCx0aGlzLmxlbmd0aCsrKX1pZigwIT09Syl7Zm9yKEQ9dGhpcy5sZW5ndGgt''@;'; put 'put ''MTtEPj0wO0QtLSl0aGlzLndvcmRzW0QrS109dGhpcy53b3Jkc1tEXTtmb3IoRD0wO0Q8SztEKyspdGhpcy53b3Jkc1tEXT0wO3RoaXMubGVuZ3RoKz1LfXJldHVybiB0aGlzLl9zdHJpcCgpfSx2LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihNKXtyZXR1cm4gcygwPT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZSksdGhpcy5pdXNobG4oTSl9LHYucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihNLEIsSyl7dmFyIEc7cygibnVtYmVyIj09dHlwZW9mIE0mJk0+PTApLEc9Qj8oQi1CJTI2KS8yNjowO3ZhciBEPU0lMjYscD1NYXRoLm1pbigoTS1EKS8yNix0aGlzLmxlbmd0aCksST02NzEwODg2M142NzEw''@;'; put 'put ''ODg2Mz4+PkQ8PEQsdWU9SztpZihHLT1wLEc9TWF0aC5tYXgoMCxHKSx1ZSl7Zm9yKHZhciBuZT0wO25lPHA7bmUrKyl1ZS53b3Jkc1tuZV09dGhpcy53b3Jkc1tuZV07dWUubGVuZ3RoPXB9aWYoMCE9PXApaWYodGhpcy5sZW5ndGg+cClmb3IodGhpcy5sZW5ndGgtPXAsbmU9MDtuZTx0aGlz''@;'; put 'put ''Lmxlbmd0aDtuZSsrKXRoaXMud29yZHNbbmVdPXRoaXMud29yZHNbbmUrcF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgX2U9MDtmb3IobmU9dGhpcy5sZW5ndGgtMTtuZT49MCYmKDAhPT1fZXx8bmU+PUcpO25lLS0pe3ZhciBQZT0wfHRoaXMud29yZHNbbmVdO3Ro''@;'; put 'put ''aXMud29yZHNbbmVdPV9lPDwyNi1EfFBlPj4+RCxfZT1QZSZJfXJldHVybiB1ZSYmMCE9PV9lJiYodWUud29yZHNbdWUubGVuZ3RoKytdPV9lKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5fc3RyaXAoKX0sdi5wcm90b3R5cGUuaXNocm49''@;'; put 'put ''ZnVuY3Rpb24oTSxCLEspe3JldHVybiBzKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihNLEIsSyl9LHYucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oTSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihNKX0sdi5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oTSl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y2xvbmUoKS5pdXNobG4oTSl9LHYucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oTSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihNKX0sdi5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oTSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oTSl9LHYucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9u''@;'; put 'put ''KE0pe3MoIm51bWJlciI9PXR5cGVvZiBNJiZNPj0wKTt2YXIgQj1NJTI2LEs9KE0tQikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9S3x8ISh0aGlzLndvcmRzW0tdJjE8PEIpKX0sdi5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKE0pe3MoIm51bWJlciI9PXR5cGVvZiBNJiZNPj0wKTt2YXIg''@;'; put 'put ''Qj1NJTI2LEs9KE0tQikvMjY7cmV0dXJuIHMoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1LP3RoaXM6KDAhPT1CJiZLKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oSyx0aGlzLmxlbmd0aCksMCE9PUImJih0''@;'; put 'put ''aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkI8PEIpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLl9zdHJpcCgpKX0sdi5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oTSl7cmV0dXJuIHRoaXMuY2xvbmUo''@;'; put 'put ''KS5pbWFza24oTSl9LHYucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKE0pe3JldHVybiBzKCJudW1iZXIiPT10eXBlb2YgTSkscyhNPDY3MTA4ODY0KSxNPDA/dGhpcy5pc3VibigtTSk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTw9TT8odGhp''@;'; put 'put ''cy53b3Jkc1swXT1NLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oTSksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKE0pfSx2LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oTSl7dGhpcy53b3Jkc1sw''@;'; put 'put ''XSs9TTtmb3IodmFyIEI9MDtCPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0JdPj02NzEwODg2NDtCKyspdGhpcy53b3Jkc1tCXS09NjcxMDg4NjQsQj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tCKzFdPTE6dGhpcy53b3Jkc1tCKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4''@;'; put 'put ''KHRoaXMubGVuZ3RoLEIrMSksdGhpc30sdi5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oTSl7aWYocygibnVtYmVyIj09dHlwZW9mIE0pLHMoTTw2NzEwODg2NCksTTwwKXJldHVybiB0aGlzLmlhZGRuKC1NKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRo''@;'; put 'put ''aXMuaWFkZG4oTSksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09TSwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgQj0wO0I8dGhpcy5sZW5ndGgmJnRo''@;'; put 'put ''aXMud29yZHNbQl08MDtCKyspdGhpcy53b3Jkc1tCXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tCKzFdLT0xO3JldHVybiB0aGlzLl9zdHJpcCgpfSx2LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKE0pe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oTSl9LHYucHJvdG90eXBlLnN1Ym49ZnVuY3Rp''@;'; put 'put ''b24oTSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihNKX0sdi5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdi5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHYucHJvdG90eXBlLl9pc2hs''@;'; put 'put ''bnN1Ym11bD1mdW5jdGlvbihNLEIsSyl7dmFyIEQ7dGhpcy5fZXhwYW5kKE0ubGVuZ3RoK0spO3ZhciBwLEk9MDtmb3IoRD0wO0Q8TS5sZW5ndGg7RCsrKXtwPSgwfHRoaXMud29yZHNbRCtLXSkrSTt2YXIgdWU9KDB8TS53b3Jkc1tEXSkqQjtJPSgocC09NjcxMDg4NjMmdWUpPj4yNiktKHVl''@;'; put 'put ''LzY3MTA4ODY0fDApLHRoaXMud29yZHNbRCtLXT02NzEwODg2MyZwfWZvcig7RDx0aGlzLmxlbmd0aC1LO0QrKylJPShwPSgwfHRoaXMud29yZHNbRCtLXSkrSSk+PjI2LHRoaXMud29yZHNbRCtLXT02NzEwODg2MyZwO2lmKDA9PT1JKXJldHVybiB0aGlzLl9zdHJpcCgpO2ZvcihzKC0xPT09''@;'; put 'put ''SSksST0wLEQ9MDtEPHRoaXMubGVuZ3RoO0QrKylJPShwPS0oMHx0aGlzLndvcmRzW0RdKStJKT4+MjYsdGhpcy53b3Jkc1tEXT02NzEwODg2MyZwO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fc3RyaXAoKX0sdi5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oTSxCKXt2YXIgSyxH''@;'; put 'put ''PXRoaXMuY2xvbmUoKSxEPU0scD0wfEQud29yZHNbRC5sZW5ndGgtMV07MCE9KEs9MjYtdGhpcy5fY291bnRCaXRzKHApKSYmKEQ9RC51c2hsbihLKSxHLml1c2hsbihLKSxwPTB8RC53b3Jkc1tELmxlbmd0aC0xXSk7dmFyIG5lLHVlPUcubGVuZ3RoLUQubGVuZ3RoO2lmKCJtb2QiIT09Qil7''@;'; put 'put ''KG5lPW5ldyB2KG51bGwpKS5sZW5ndGg9dWUrMSxuZS53b3Jkcz1uZXcgQXJyYXkobmUubGVuZ3RoKTtmb3IodmFyIF9lPTA7X2U8bmUubGVuZ3RoO19lKyspbmUud29yZHNbX2VdPTB9dmFyIFBlPUcuY2xvbmUoKS5faXNobG5zdWJtdWwoRCwxLHVlKTswPT09UGUubmVnYXRpdmUmJihHPVBl''@;'; put 'put ''LG5lJiYobmUud29yZHNbdWVdPTEpKTtmb3IodmFyIG90PXVlLTE7b3Q+PTA7b3QtLSl7dmFyIGx0PTY3MTA4ODY0KigwfEcud29yZHNbRC5sZW5ndGgrb3RdKSsoMHxHLndvcmRzW0QubGVuZ3RoK290LTFdKTtmb3IobHQ9TWF0aC5taW4obHQvcHwwLDY3MTA4ODYzKSxHLl9pc2hsbnN1Ym11''@;'; put 'put ''bChELGx0LG90KTswIT09Ry5uZWdhdGl2ZTspbHQtLSxHLm5lZ2F0aXZlPTAsRy5faXNobG5zdWJtdWwoRCwxLG90KSxHLmlzWmVybygpfHwoRy5uZWdhdGl2ZV49MSk7bmUmJihuZS53b3Jkc1tvdF09bHQpfXJldHVybiBuZSYmbmUuX3N0cmlwKCksRy5fc3RyaXAoKSwiZGl2IiE9PUImJjAh''@;'; put 'put ''PT1LJiZHLml1c2hybihLKSx7ZGl2Om5lfHxudWxsLG1vZDpHfX0sdi5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKE0sQixLKXtyZXR1cm4gcyghTS5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB2KDApLG1vZDpuZXcgdigwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1NLm5l''@;'; put 'put ''Z2F0aXZlPyhwPXRoaXMubmVnKCkuZGl2bW9kKE0sQiksIm1vZCIhPT1CJiYoRz1wLmRpdi5uZWcoKSksImRpdiIhPT1CJiYoRD1wLm1vZC5uZWcoKSxLJiYwIT09RC5uZWdhdGl2ZSYmRC5pYWRkKE0pKSx7ZGl2OkcsbW9kOkR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PU0ubmVnYXRpdmU/''@;'; put 'put ''KHA9dGhpcy5kaXZtb2QoTS5uZWcoKSxCKSwibW9kIiE9PUImJihHPXAuZGl2Lm5lZygpKSx7ZGl2OkcsbW9kOnAubW9kfSk6MCE9PSh0aGlzLm5lZ2F0aXZlJk0ubmVnYXRpdmUpPyhwPXRoaXMubmVnKCkuZGl2bW9kKE0ubmVnKCksQiksImRpdiIhPT1CJiYoRD1wLm1vZC5uZWcoKSxLJiYw''@;'; put 'put ''IT09RC5uZWdhdGl2ZSYmRC5pc3ViKE0pKSx7ZGl2OnAuZGl2LG1vZDpEfSk6TS5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKE0pPDA/e2RpdjpuZXcgdigwKSxtb2Q6dGhpc306MT09PU0ubGVuZ3RoPyJkaXYiPT09Qj97ZGl2OnRoaXMuZGl2bihNLndvcmRzWzBdKSxtb2Q6bnVsbH06''@;'; put 'put ''Im1vZCI9PT1CP3tkaXY6bnVsbCxtb2Q6bmV3IHYodGhpcy5tb2RybihNLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKE0ud29yZHNbMF0pLG1vZDpuZXcgdih0aGlzLm1vZHJuKE0ud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihNLEIpO3ZhciBHLEQscH0sdi5wcm90b3R5cGUuZGl2PWZ1''@;'; put 'put ''bmN0aW9uKE0pe3JldHVybiB0aGlzLmRpdm1vZChNLCJkaXYiLCExKS5kaXZ9LHYucHJvdG90eXBlLm1vZD1mdW5jdGlvbihNKXtyZXR1cm4gdGhpcy5kaXZtb2QoTSwibW9kIiwhMSkubW9kfSx2LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKE0pe3JldHVybiB0aGlzLmRpdm1vZChNLCJtb2Qi''@;'; put 'put ''LCEwKS5tb2R9LHYucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKE0pe3ZhciBCPXRoaXMuZGl2bW9kKE0pO2lmKEIubW9kLmlzWmVybygpKXJldHVybiBCLmRpdjt2YXIgSz1CLm1vZC5hYnMoKSxHPU0uYWJzKCkuaXVzaHJuKDEpLEQ9MSZNLndvcmRzWzBdLHA9Sy5jbXAoRyk7aWYocDww''@;'; put 'put ''fHwxPT09RCYmMD09PXApcmV0dXJuIEIuZGl2O3ZhciBJPW5ldyB2KDEpO3JldHVybiBJLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmVeTS5uZWdhdGl2ZSxCLmRpdi5pYWRkKEkpfSx2LnByb3RvdHlwZS5tb2Rybj1mdW5jdGlvbihNKXt2YXIgQj1NPDA7QiYmKE09LU0pLHMoTTw9NjcxMDg4NjMp''@;'; put 'put ''O2Zvcih2YXIgSz0oMTw8MjYpJU0sRz0wLEQ9dGhpcy5sZW5ndGgtMTtEPj0wO0QtLSlHPShLKkcrKDB8dGhpcy53b3Jkc1tEXSkpJU07cmV0dXJuIEI/LUc6R30sdi5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihNKXtyZXR1cm4gdGhpcy5tb2RybihNKX0sdi5wcm90b3R5cGUuaWRpdm49ZnVu''@;'; put 'put ''Y3Rpb24oTSl7dmFyIEI9TTwwO0ImJihNPS1NKSxzKE08PTY3MTA4ODYzKTtmb3IodmFyIEs9MCxHPXRoaXMubGVuZ3RoLTE7Rz49MDtHLS0pe3ZhciBEPSgwfHRoaXMud29yZHNbR10pKzY3MTA4ODY0Kks7dGhpcy53b3Jkc1tHXT1EL018MCxLPUQlTX1yZXR1cm4gdGhpcy5fc3RyaXAoKSxC''@;'; put 'put ''P3RoaXMuaW5lZygpOnRoaXN9LHYucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oTSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihNKX0sdi5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihNKXtzKDA9PT1NLm5lZ2F0aXZlKSxzKCFNLmlzWmVybygpKTt2YXIgQj10aGlzLEs9TS5jbG9uZSgpO0I9''@;'; put 'put ''MCE9PUIubmVnYXRpdmU/Qi51bW9kKE0pOkIuY2xvbmUoKTtmb3IodmFyIEc9bmV3IHYoMSksRD1uZXcgdigwKSxwPW5ldyB2KDApLEk9bmV3IHYoMSksdWU9MDtCLmlzRXZlbigpJiZLLmlzRXZlbigpOylCLml1c2hybigxKSxLLml1c2hybigxKSwrK3VlO2Zvcih2YXIgbmU9Sy5jbG9uZSgp''@;'; put 'put ''LF9lPUIuY2xvbmUoKTshQi5pc1plcm8oKTspe2Zvcih2YXIgUGU9MCxvdD0xOzA9PT0oQi53b3Jkc1swXSZvdCkmJlBlPDI2OysrUGUsb3Q8PD0xKTtpZihQZT4wKWZvcihCLml1c2hybihQZSk7UGUtLSA+MDspKEcuaXNPZGQoKXx8RC5pc09kZCgpKSYmKEcuaWFkZChuZSksRC5pc3ViKF9l''@;'; put 'put ''KSksRy5pdXNocm4oMSksRC5pdXNocm4oMSk7Zm9yKHZhciBsdD0wLGR0PTE7MD09PShLLndvcmRzWzBdJmR0KSYmbHQ8MjY7KytsdCxkdDw8PTEpO2lmKGx0PjApZm9yKEsuaXVzaHJuKGx0KTtsdC0tID4wOykocC5pc09kZCgpfHxJLmlzT2RkKCkpJiYocC5pYWRkKG5lKSxJLmlzdWIoX2Up''@;'; put 'put ''KSxwLml1c2hybigxKSxJLml1c2hybigxKTtCLmNtcChLKT49MD8oQi5pc3ViKEspLEcuaXN1YihwKSxELmlzdWIoSSkpOihLLmlzdWIoQikscC5pc3ViKEcpLEkuaXN1YihEKSl9cmV0dXJue2E6cCxiOkksZ2NkOksuaXVzaGxuKHVlKX19LHYucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihN''@;'; put 'put ''KXtzKDA9PT1NLm5lZ2F0aXZlKSxzKCFNLmlzWmVybygpKTt2YXIgUGUsQj10aGlzLEs9TS5jbG9uZSgpO0I9MCE9PUIubmVnYXRpdmU/Qi51bW9kKE0pOkIuY2xvbmUoKTtmb3IodmFyIEc9bmV3IHYoMSksRD1uZXcgdigwKSxwPUsuY2xvbmUoKTtCLmNtcG4oMSk+MCYmSy5jbXBuKDEpPjA7''@;'; put 'put ''KXtmb3IodmFyIEk9MCx1ZT0xOzA9PT0oQi53b3Jkc1swXSZ1ZSkmJkk8MjY7KytJLHVlPDw9MSk7aWYoST4wKWZvcihCLml1c2hybihJKTtJLS0gPjA7KUcuaXNPZGQoKSYmRy5pYWRkKHApLEcuaXVzaHJuKDEpO2Zvcih2YXIgbmU9MCxfZT0xOzA9PT0oSy53b3Jkc1swXSZfZSkmJm5lPDI2''@;'; put 'put ''OysrbmUsX2U8PD0xKTtpZihuZT4wKWZvcihLLml1c2hybihuZSk7bmUtLSA+MDspRC5pc09kZCgpJiZELmlhZGQocCksRC5pdXNocm4oMSk7Qi5jbXAoSyk+PTA/KEIuaXN1YihLKSxHLmlzdWIoRCkpOihLLmlzdWIoQiksRC5pc3ViKEcpKX1yZXR1cm4oUGU9MD09PUIuY21wbigxKT9HOkQp''@;'; put 'put ''LmNtcG4oMCk8MCYmUGUuaWFkZChNKSxQZX0sdi5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKE0pe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIE0uYWJzKCk7aWYoTS5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgQj10aGlzLmNsb25lKCksSz1NLmNsb25lKCk7Qi5uZWdhdGl2ZT0wLEsu''@;'; put 'put ''bmVnYXRpdmU9MDtmb3IodmFyIEc9MDtCLmlzRXZlbigpJiZLLmlzRXZlbigpO0crKylCLml1c2hybigxKSxLLml1c2hybigxKTtmb3IoOzspe2Zvcig7Qi5pc0V2ZW4oKTspQi5pdXNocm4oMSk7Zm9yKDtLLmlzRXZlbigpOylLLml1c2hybigxKTt2YXIgRD1CLmNtcChLKTtpZihEPDApe3Zh''@;'; put 'put ''ciBwPUI7Qj1LLEs9cH1lbHNlIGlmKDA9PT1EfHwwPT09Sy5jbXBuKDEpKWJyZWFrO0IuaXN1YihLKX1yZXR1cm4gSy5pdXNobG4oRyl9LHYucHJvdG90eXBlLmludm09ZnVuY3Rpb24oTSl7cmV0dXJuIHRoaXMuZWdjZChNKS5hLnVtb2QoTSl9LHYucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdi5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx2LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihNKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZNfSx2LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlv''@;'; put 'put ''bihNKXtzKCJudW1iZXIiPT10eXBlb2YgTSk7dmFyIEI9TSUyNixLPShNLUIpLzI2LEc9MTw8QjtpZih0aGlzLmxlbmd0aDw9SylyZXR1cm4gdGhpcy5fZXhwYW5kKEsrMSksdGhpcy53b3Jkc1tLXXw9Ryx0aGlzO2Zvcih2YXIgRD1HLHA9SzswIT09RCYmcDx0aGlzLmxlbmd0aDtwKyspe3Zh''@;'; put 'put ''ciBJPTB8dGhpcy53b3Jkc1twXTtEPShJKz1EKT4+PjI2LHRoaXMud29yZHNbcF09SSY9NjcxMDg4NjN9cmV0dXJuIDAhPT1EJiYodGhpcy53b3Jkc1twXT1ELHRoaXMubGVuZ3RoKyspLHRoaXN9LHYucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgm''@;'; put 'put ''JjA9PT10aGlzLndvcmRzWzBdfSx2LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKE0pe3ZhciBLLEI9TTwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhQilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmQilyZXR1cm4gMTtpZih0aGlzLl9zdHJpcCgpLHRoaXMubGVuZ3RoPjEpSz0xO2Vs''@;'; put 'put ''c2V7QiYmKE09LU0pLHMoTTw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEc9MHx0aGlzLndvcmRzWzBdO0s9Rz09PU0/MDpHPE0/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtSzpLfSx2LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oTSl7aWYoMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmUmJjA9PT1NLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09TS5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgQj10aGlzLnVjbXAoTSk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUI6Qn0sdi5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihNKXtpZih0aGlz''@;'; put 'put ''Lmxlbmd0aD5NLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxNLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEI9MCxLPXRoaXMubGVuZ3RoLTE7Sz49MDtLLS0pe3ZhciBHPTB8dGhpcy53b3Jkc1tLXSxEPTB8TS53b3Jkc1tLXTtpZihHIT09RCl7RzxEP0I9LTE6Rz5EJiYoQj0xKTti''@;'; put 'put ''cmVha319cmV0dXJuIEJ9LHYucHJvdG90eXBlLmd0bj1mdW5jdGlvbihNKXtyZXR1cm4gMT09PXRoaXMuY21wbihNKX0sdi5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oTSl7cmV0dXJuIDE9PT10aGlzLmNtcChNKX0sdi5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihNKXtyZXR1cm4gdGhpcy5jbXBu''@;'; put 'put ''KE0pPj0wfSx2LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oTSl7cmV0dXJuIHRoaXMuY21wKE0pPj0wfSx2LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oTSl7cmV0dXJuLTE9PT10aGlzLmNtcG4oTSl9LHYucHJvdG90eXBlLmx0PWZ1bmN0aW9uKE0pe3JldHVybi0xPT09dGhpcy5jbXAoTSl9LHYu''@;'; put 'put ''cHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oTSl7cmV0dXJuIHRoaXMuY21wbihNKTw9MH0sdi5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKE0pe3JldHVybiB0aGlzLmNtcChNKTw9MH0sdi5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKE0pe3JldHVybiAwPT09dGhpcy5jbXBuKE0pfSx2LnByb3RvdHlw''@;'; put 'put ''ZS5lcT1mdW5jdGlvbihNKXtyZXR1cm4gMD09PXRoaXMuY21wKE0pfSx2LnJlZD1mdW5jdGlvbihNKXtyZXR1cm4gbmV3IGYoTSl9LHYucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKE0pe3JldHVybiBzKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIp''@;'; put 'put ''LHMoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksTS5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKE0pfSx2LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJl''@;'; put 'put ''cnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdi5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKE0pe3JldHVybiB0aGlzLnJlZD1NLHRoaXN9LHYucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKE0pe3JldHVybiBzKCF0aGlzLnJlZCwi''@;'; put 'put ''QWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKE0pfSx2LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oTSl7cmV0dXJuIHModGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxN''@;'; put 'put ''KX0sdi5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihNKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsTSl9LHYucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihNKXtyZXR1cm4gcyh0aGlzLnJlZCwi''@;'; put 'put ''cmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLE0pfSx2LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKE0pe3JldHVybiBzKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhp''@;'; put 'put ''cyxNKX0sdi5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKE0pe3JldHVybiBzKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsTSl9LHYucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihNKXtyZXR1cm4gcyh0aGlzLnJlZCwi''@;'; put 'put ''cmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsTSksdGhpcy5yZWQubXVsKHRoaXMsTSl9LHYucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oTSl7cmV0dXJuIHModGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51''@;'; put 'put ''bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLE0pLHRoaXMucmVkLmltdWwodGhpcyxNKX0sdi5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlz''@;'; put 'put ''KSx0aGlzLnJlZC5zcXIodGhpcyl9LHYucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx2LnByb3RvdHlw''@;'; put 'put ''ZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdi5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBzKHRo''@;'; put 'put ''aXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHYucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBzKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJl''@;'; put 'put ''ZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx2LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oTSl7cmV0dXJuIHModGhpcy5yZWQmJiFNLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJl''@;'; put 'put ''ZC5wb3codGhpcyxNKX07dmFyIG1lPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gQ2UoayxNKXt0aGlzLm5hbWU9ayx0aGlzLnA9bmV3IHYoTSwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHYoMSkuaXVzaGxuKHRo''@;'; put 'put ''aXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIEllKCl7Q2UuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBrZSgpe0Nl''@;'; put 'put ''LmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gcWUoKXtDZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZiIpfWZ1bmN0aW9uIFgoKXtDZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIGYoayl7aWYoInN0cmluZyI9PXR5cGVvZiBrKXt2YXIgTT12Ll9wcmlt''@;'; put 'put ''ZShrKTt0aGlzLm09TS5wLHRoaXMucHJpbWU9TX1lbHNlIHMoay5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1rLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBiKGspe2YuY2FsbCh0aGlzLGspLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRo''@;'; put 'put ''aXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHYoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52''@;'; put 'put ''Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9Q2UucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgTT1uZXcgdihudWxsKTtyZXR1cm4gTS53b3Jkcz1uZXcg''@;'; put 'put ''QXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLE19LENlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKE0pe3ZhciBLLEI9TTtkb3t0aGlzLnNwbGl0KEIsdGhpcy50bXApLEs9KEI9KEI9dGhpcy5pbXVsSyhCKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEs+dGhpcy5u''@;'; put 'put ''KTt2YXIgRz1LPHRoaXMubj8tMTpCLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUc/KEIud29yZHNbMF09MCxCLmxlbmd0aD0xKTpHPjA/Qi5pc3ViKHRoaXMucCk6dm9pZCAwIT09Qi5zdHJpcD9CLnN0cmlwKCk6Qi5fc3RyaXAoKSxCfSxDZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oTSxC''@;'; put 'put ''KXtNLml1c2hybih0aGlzLm4sMCxCKX0sQ2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKE0pe3JldHVybiBNLmltdWwodGhpcy5rKX0sQShJZSxDZSksSWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKE0sQil7Zm9yKHZhciBLPTQxOTQzMDMsRz1NYXRoLm1pbihNLmxlbmd0aCw5KSxEPTA7''@;'; put 'put ''RDxHO0QrKylCLndvcmRzW0RdPU0ud29yZHNbRF07aWYoQi5sZW5ndGg9RyxNLmxlbmd0aDw9OSlyZXR1cm4gTS53b3Jkc1swXT0wLHZvaWQoTS5sZW5ndGg9MSk7dmFyIHA9TS53b3Jkc1s5XTtmb3IoQi53b3Jkc1tCLmxlbmd0aCsrXT1wJkssRD0xMDtEPE0ubGVuZ3RoO0QrKyl7dmFyIEk9''@;'; put 'put ''MHxNLndvcmRzW0RdO00ud29yZHNbRC0xMF09KEkmSyk8PDR8cD4+PjIyLHA9SX1NLndvcmRzW0QtMTBdPXA+Pj49MjIsTS5sZW5ndGgtPTA9PT1wJiZNLmxlbmd0aD4xMD8xMDo5fSxJZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oTSl7TS53b3Jkc1tNLmxlbmd0aF09MCxNLndvcmRzW00u''@;'; put 'put ''bGVuZ3RoKzFdPTAsTS5sZW5ndGgrPTI7Zm9yKHZhciBCPTAsSz0wO0s8TS5sZW5ndGg7SysrKXt2YXIgRz0wfE0ud29yZHNbS107TS53b3Jkc1tLXT02NzEwODg2MyYoQis9OTc3KkcpLEI9NjQqRysoQi82NzEwODg2NHwwKX1yZXR1cm4gMD09PU0ud29yZHNbTS5sZW5ndGgtMV0mJihNLmxl''@;'; put 'put ''bmd0aC0tLDA9PT1NLndvcmRzW00ubGVuZ3RoLTFdJiZNLmxlbmd0aC0tKSxNfSxBKGtlLENlKSxBKHFlLENlKSxBKFgsQ2UpLFgucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKE0pe2Zvcih2YXIgQj0wLEs9MDtLPE0ubGVuZ3RoO0srKyl7dmFyIEc9MTkqKDB8TS53b3Jkc1tLXSkrQixEPTY3''@;'; put 'put ''MTA4ODYzJkc7Rz4+Pj0yNixNLndvcmRzW0tdPUQsQj1HfXJldHVybiAwIT09QiYmKE0ud29yZHNbTS5sZW5ndGgrK109QiksTX0sdi5fcHJpbWU9ZnVuY3Rpb24oTSl7aWYobWVbTV0pcmV0dXJuIG1lW01dO3ZhciBCO2lmKCJrMjU2Ij09PU0pQj1uZXcgSWU7ZWxzZSBpZigicDIyNCI9PT1N''@;'; put 'put ''KUI9bmV3IGtlO2Vsc2UgaWYoInAxOTIiPT09TSlCPW5ldyBxZTtlbHNle2lmKCJwMjU1MTkiIT09TSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitNKTtCPW5ldyBYfXJldHVybiBtZVtNXT1CLEJ9LGYucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKE0pe3MoMD09PU0ubmVn''@;'; put 'put ''YXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscyhNLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxmLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihNLEIpe3MoMD09PShNLm5lZ2F0aXZlfEIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHBvc2l0aXZlcyIpLHMoTS5yZWQmJk0ucmVkPT09Qi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sZi5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihNKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoTSkuX2ZvcmNlUmVkKHRoaXMpOihSKE0s''@;'; put 'put ''TS51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpKSxNKX0sZi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKE0pe3JldHVybiBNLmlzWmVybygpP00uY2xvbmUoKTp0aGlzLm0uc3ViKE0pLl9mb3JjZVJlZCh0aGlzKX0sZi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKE0sQil7dGhpcy5fdmVyaWZ5''@;'; put 'put ''MihNLEIpO3ZhciBLPU0uYWRkKEIpO3JldHVybiBLLmNtcCh0aGlzLm0pPj0wJiZLLmlzdWIodGhpcy5tKSxLLl9mb3JjZVJlZCh0aGlzKX0sZi5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihNLEIpe3RoaXMuX3ZlcmlmeTIoTSxCKTt2YXIgSz1NLmlhZGQoQik7cmV0dXJuIEsuY21wKHRoaXMu''@;'; put 'put ''bSk+PTAmJksuaXN1Yih0aGlzLm0pLEt9LGYucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihNLEIpe3RoaXMuX3ZlcmlmeTIoTSxCKTt2YXIgSz1NLnN1YihCKTtyZXR1cm4gSy5jbXBuKDApPDAmJksuaWFkZCh0aGlzLm0pLEsuX2ZvcmNlUmVkKHRoaXMpfSxmLnByb3RvdHlwZS5pc3ViPWZ1bmN0''@;'; put 'put ''aW9uKE0sQil7dGhpcy5fdmVyaWZ5MihNLEIpO3ZhciBLPU0uaXN1YihCKTtyZXR1cm4gSy5jbXBuKDApPDAmJksuaWFkZCh0aGlzLm0pLEt9LGYucHJvdG90eXBlLnNobD1mdW5jdGlvbihNLEIpe3JldHVybiB0aGlzLl92ZXJpZnkxKE0pLHRoaXMuaW1vZChNLnVzaGxuKEIpKX0sZi5wcm90''@;'; put 'put ''b3R5cGUuaW11bD1mdW5jdGlvbihNLEIpe3JldHVybiB0aGlzLl92ZXJpZnkyKE0sQiksdGhpcy5pbW9kKE0uaW11bChCKSl9LGYucHJvdG90eXBlLm11bD1mdW5jdGlvbihNLEIpe3JldHVybiB0aGlzLl92ZXJpZnkyKE0sQiksdGhpcy5pbW9kKE0ubXVsKEIpKX0sZi5wcm90b3R5cGUuaXNx''@;'; put 'put ''cj1mdW5jdGlvbihNKXtyZXR1cm4gdGhpcy5pbXVsKE0sTS5jbG9uZSgpKX0sZi5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKE0pe3JldHVybiB0aGlzLm11bChNLE0pfSxmLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKE0pe2lmKE0uaXNaZXJvKCkpcmV0dXJuIE0uY2xvbmUoKTt2YXIgQj10aGlz''@;'; put 'put ''Lm0uYW5kbG4oMyk7aWYocyhCJTI9PTEpLDM9PT1CKXt2YXIgSz10aGlzLm0uYWRkKG5ldyB2KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KE0sSyl9Zm9yKHZhciBHPXRoaXMubS5zdWJuKDEpLEQ9MDshRy5pc1plcm8oKSYmMD09PUcuYW5kbG4oMSk7KUQrKyxHLml1c2hybigxKTtz''@;'; put 'put ''KCFHLmlzWmVybygpKTt2YXIgcD1uZXcgdigxKS50b1JlZCh0aGlzKSxJPXAucmVkTmVnKCksdWU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG5lPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobmU9bmV3IHYoMipuZSpuZSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG5lLHVlKS5jbXAoSSk7''@;'; put 'put ''KW5lLnJlZElBZGQoSSk7Zm9yKHZhciBfZT10aGlzLnBvdyhuZSxHKSxQZT10aGlzLnBvdyhNLEcuYWRkbigxKS5pdXNocm4oMSkpLG90PXRoaXMucG93KE0sRyksbHQ9RDswIT09b3QuY21wKHApOyl7Zm9yKHZhciBkdD1vdCxSZT0wOzAhPT1kdC5jbXAocCk7UmUrKylkdD1kdC5yZWRTcXIo''@;'; put 'put ''KTtzKFJlPGx0KTt2YXIgYWU9dGhpcy5wb3coX2UsbmV3IHYoMSkuaXVzaGxuKGx0LVJlLTEpKTtQZT1QZS5yZWRNdWwoYWUpLF9lPWFlLnJlZFNxcigpLG90PW90LnJlZE11bChfZSksbHQ9UmV9cmV0dXJuIFBlfSxmLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKE0pe3ZhciBCPU0uX2ludm1w''@;'; put 'put ''KHRoaXMubSk7cmV0dXJuIDAhPT1CLm5lZ2F0aXZlPyhCLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEIpLnJlZE5lZygpKTp0aGlzLmltb2QoQil9LGYucHJvdG90eXBlLnBvdz1mdW5jdGlvbihNLEIpe2lmKEIuaXNaZXJvKCkpcmV0dXJuIG5ldyB2KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1CLmNt''@;'; put 'put ''cG4oMSkpcmV0dXJuIE0uY2xvbmUoKTt2YXIgRz1uZXcgQXJyYXkoMTYpO0dbMF09bmV3IHYoMSkudG9SZWQodGhpcyksR1sxXT1NO2Zvcih2YXIgRD0yO0Q8Ry5sZW5ndGg7RCsrKUdbRF09dGhpcy5tdWwoR1tELTFdLE0pO3ZhciBwPUdbMF0sST0wLHVlPTAsbmU9Qi5iaXRMZW5ndGgoKSUy''@;'; put 'put ''Njtmb3IoMD09PW5lJiYobmU9MjYpLEQ9Qi5sZW5ndGgtMTtEPj0wO0QtLSl7Zm9yKHZhciBfZT1CLndvcmRzW0RdLFBlPW5lLTE7UGU+PTA7UGUtLSl7dmFyIG90PV9lPj5QZSYxO3AhPT1HWzBdJiYocD10aGlzLnNxcihwKSksMCE9PW90fHwwIT09ST8oSTw8PTEsSXw9b3QsKDQ9PT0rK3Vl''@;'; put 'put ''fHwwPT09RCYmMD09PVBlKSYmKHA9dGhpcy5tdWwocCxHW0ldKSx1ZT0wLEk9MCkpOnVlPTB9bmU9MjZ9cmV0dXJuIHB9LGYucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihNKXt2YXIgQj1NLnVtb2QodGhpcy5tKTtyZXR1cm4gQj09PU0/Qi5jbG9uZSgpOkJ9LGYucHJvdG90eXBlLmNv''@;'; put 'put ''bnZlcnRGcm9tPWZ1bmN0aW9uKE0pe3ZhciBCPU0uY2xvbmUoKTtyZXR1cm4gQi5yZWQ9bnVsbCxCfSx2Lm1vbnQ9ZnVuY3Rpb24oTSl7cmV0dXJuIG5ldyBiKE0pfSxBKGIsZiksYi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKE0pe3JldHVybiB0aGlzLmltb2QoTS51c2hsbih0aGlz''@;'; put 'put ''LnNoaWZ0KSl9LGIucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKE0pe3ZhciBCPXRoaXMuaW1vZChNLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gQi5yZWQ9bnVsbCxCfSxiLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKE0sQil7aWYoTS5pc1plcm8oKXx8Qi5pc1plcm8oKSlyZXR1cm4g''@;'; put 'put ''TS53b3Jkc1swXT0wLE0ubGVuZ3RoPTEsTTt2YXIgSz1NLmltdWwoQiksRz1LLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxEPUsuaXN1YihHKS5pdXNocm4odGhpcy5zaGlmdCkscD1EO3JldHVybiBELmNtcCh0aGlzLm0p''@;'; put 'put ''Pj0wP3A9RC5pc3ViKHRoaXMubSk6RC5jbXBuKDApPDAmJihwPUQuaWFkZCh0aGlzLm0pKSxwLl9mb3JjZVJlZCh0aGlzKX0sYi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKE0sQil7aWYoTS5pc1plcm8oKXx8Qi5pc1plcm8oKSlyZXR1cm4gbmV3IHYoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBL''@;'; put 'put ''PU0ubXVsKEIpLEc9Sy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksRD1LLmlzdWIoRykuaXVzaHJuKHRoaXMuc2hpZnQpLHA9RDtyZXR1cm4gRC5jbXAodGhpcy5tKT49MD9wPUQuaXN1Yih0aGlzLm0pOkQuY21wbigwKTww''@;'; put 'put ''JiYocD1ELmlhZGQodGhpcy5tKSkscC5fZm9yY2VSZWQodGhpcyl9LGIucHJvdG90eXBlLmludm09ZnVuY3Rpb24oTSl7cmV0dXJuIHRoaXMuaW1vZChNLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oZmU9aC5ubWQoZmUpLHRoaXMpfSwxNTAzNyhmZSxq''@;'; put 'put ''LGgpe3ZhciB5O2Z1bmN0aW9uIGMoQSl7dGhpcy5yYW5kPUF9aWYoZmUuZXhwb3J0cz1mdW5jdGlvbih2KXtyZXR1cm4geXx8KHk9bmV3IGMobnVsbCkpLHkuZ2VuZXJhdGUodil9LGZlLmV4cG9ydHMuUmFuZD1jLGMucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9yYW5kKHYpfSxjLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih2KXtpZih0aGlzLnJhbmQuZ2V0Qnl0ZXMpcmV0dXJuIHRoaXMucmFuZC5nZXRCeXRlcyh2KTtmb3IodmFyIEM9bmV3IFVpbnQ4QXJyYXkodiksdz0wO3c8Qy5sZW5ndGg7dysrKUNbd109dGhpcy5yYW5kLmdldEJ5dGUoKTty''@;'; put 'put ''ZXR1cm4gQ30sIm9iamVjdCI9PXR5cGVvZiBzZWxmKXNlbGYuY3J5cHRvJiZzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXM/Yy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odil7dmFyIEM9bmV3IFVpbnQ4QXJyYXkodik7cmV0dXJuIHNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhDKSxD''@;'; put 'put ''fTpzZWxmLm1zQ3J5cHRvJiZzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcz9jLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih2KXt2YXIgQz1uZXcgVWludDhBcnJheSh2KTtyZXR1cm4gc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMoQyksQ306Im9iamVjdCI9PXR5cGVvZiB3aW5k''@;'; put 'put ''b3cmJihjLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIHlldCIpfSk7ZWxzZSB0cnl7dmFyIHM9aCg3Mzc3Nik7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHMucmFuZG9tQnl0ZXMpdGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVk''@;'; put 'put ''Iik7Yy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odil7cmV0dXJuIHMucmFuZG9tQnl0ZXModil9fWNhdGNoe319LDUwNDYyKGZlLGosaCl7dmFyIHk9aCg5Mjg2MSkuQnVmZmVyO2Z1bmN0aW9uIGMoUyl7eS5pc0J1ZmZlcihTKXx8KFM9eS5mcm9tKFMpKTtmb3IodmFyIEw9Uy5sZW5ndGgv''@;'; put 'put ''NHwwLFI9bmV3IEFycmF5KEwpLHg9MDt4PEw7eCsrKVJbeF09Uy5yZWFkVUludDMyQkUoNCp4KTtyZXR1cm4gUn1mdW5jdGlvbiBzKFMpe2Zvcig7MDxTLmxlbmd0aDtTKyspU1swXT0wfWZ1bmN0aW9uIEEoUyxMLFIseCxVKXtmb3IodmFyIHJlLG1lLENlLEllLEg9UlswXSxWPVJbMV0sTj1S''@;'; put 'put ''WzJdLHo9UlszXSxZPVNbMF1eTFswXSxGPVNbMV1eTFsxXSxXPVNbMl1eTFsyXSxxPVNbM11eTFszXSxrZT00LHFlPTE7cWU8VTtxZSsrKXJlPUhbWT4+PjI0XV5WW0Y+Pj4xNiYyNTVdXk5bVz4+PjgmMjU1XV56WzI1NSZxXV5MW2tlKytdLG1lPUhbRj4+PjI0XV5WW1c+Pj4xNiYyNTVdXk5b''@;'; put 'put ''cT4+PjgmMjU1XV56WzI1NSZZXV5MW2tlKytdLENlPUhbVz4+PjI0XV5WW3E+Pj4xNiYyNTVdXk5bWT4+PjgmMjU1XV56WzI1NSZGXV5MW2tlKytdLEllPUhbcT4+PjI0XV5WW1k+Pj4xNiYyNTVdXk5bRj4+PjgmMjU1XV56WzI1NSZXXV5MW2tlKytdLFk9cmUsRj1tZSxXPUNlLHE9SWU7cmV0''@;'; put 'put ''dXJuIHJlPSh4W1k+Pj4yNF08PDI0fHhbRj4+PjE2JjI1NV08PDE2fHhbVz4+PjgmMjU1XTw8OHx4WzI1NSZxXSleTFtrZSsrXSxtZT0oeFtGPj4+MjRdPDwyNHx4W1c+Pj4xNiYyNTVdPDwxNnx4W3E+Pj44JjI1NV08PDh8eFsyNTUmWV0pXkxba2UrK10sQ2U9KHhbVz4+PjI0XTw8MjR8eFtx''@;'; put 'put ''Pj4+MTYmMjU1XTw8MTZ8eFtZPj4+OCYyNTVdPDw4fHhbMjU1JkZdKV5MW2tlKytdLEllPSh4W3E+Pj4yNF08PDI0fHhbWT4+PjE2JjI1NV08PDE2fHhbRj4+PjgmMjU1XTw8OHx4WzI1NSZXXSleTFtrZSsrXSxbcmU+Pj49MCxtZT4+Pj0wLENlPj4+PTAsSWU+Pj49MF19dmFyIHY9WzAsMSwy''@;'; put 'put ''LDQsOCwxNiwzMiw2NCwxMjgsMjcsNTRdLEM9ZnVuY3Rpb24oKXtmb3IodmFyIFM9bmV3IEFycmF5KDI1NiksTD0wO0w8MjU2O0wrKylTW0xdPUw8MTI4P0w8PDE6TDw8MV4yODM7Zm9yKHZhciBSPVtdLHg9W10sVT1bW10sW10sW10sW11dLEg9W1tdLFtdLFtdLFtdXSxWPTAsTj0wLHo9MDt6''@;'; put 'put ''PDI1NjsrK3ope3ZhciBZPU5eTjw8MV5OPDwyXk48PDNeTjw8NDtSW1ZdPVk9WT4+PjheMjU1JlleOTkseFtZXT1WO3ZhciBGPVNbVl0sVz1TW0ZdLHE9U1tXXSxyZT0yNTcqU1tZXV4xNjg0MzAwOCpZO1VbMF1bVl09cmU8PDI0fHJlPj4+OCxVWzFdW1ZdPXJlPDwxNnxyZT4+PjE2LFVbMl1b''@;'; put 'put ''Vl09cmU8PDh8cmU+Pj4yNCxVWzNdW1ZdPXJlLEhbMF1bWV09KHJlPTE2ODQzMDA5KnFeNjU1MzcqV14yNTcqRl4xNjg0MzAwOCpWKTw8MjR8cmU+Pj44LEhbMV1bWV09cmU8PDE2fHJlPj4+MTYsSFsyXVtZXT1yZTw8OHxyZT4+PjI0LEhbM11bWV09cmUsMD09PVY/Vj1OPTE6KFY9Rl5TW1Nb''@;'; put 'put ''U1txXkZdXV0sTl49U1tTW05dXSl9cmV0dXJue1NCT1g6UixJTlZfU0JPWDp4LFNVQl9NSVg6VSxJTlZfU1VCX01JWDpIfX0oKTtmdW5jdGlvbiB3KFMpe3RoaXMuX2tleT1jKFMpLHRoaXMuX3Jlc2V0KCl9dy5ibG9ja1NpemU9MTYsdy5rZXlTaXplPTMyLHcucHJvdG90eXBlLmJsb2NrU2l6''@;'; put 'put ''ZT13LmJsb2NrU2l6ZSx3LnByb3RvdHlwZS5rZXlTaXplPXcua2V5U2l6ZSx3LnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIFM9dGhpcy5fa2V5LEw9Uy5sZW5ndGgsUj1MKzYseD00KihSKzEpLFU9W10sSD0wO0g8TDtIKyspVVtIXT1TW0hdO2ZvcihIPUw7SDx4O0grKyl7''@;'; put 'put ''dmFyIFY9VVtILTFdO0glTD09PTA/KFY9Qy5TQk9YWyhWPVY8PDh8Vj4+PjI0KT4+PjI0XTw8MjR8Qy5TQk9YW1Y+Pj4xNiYyNTVdPDwxNnxDLlNCT1hbVj4+PjgmMjU1XTw8OHxDLlNCT1hbMjU1JlZdLFZePXZbSC9MfDBdPDwyNCk6TD42JiZIJUw9PT00JiYoVj1DLlNCT1hbVj4+PjI0XTw8''@;'; put 'put ''MjR8Qy5TQk9YW1Y+Pj4xNiYyNTVdPDwxNnxDLlNCT1hbVj4+PjgmMjU1XTw8OHxDLlNCT1hbMjU1JlZdKSxVW0hdPVVbSC1MXV5WfWZvcih2YXIgTj1bXSx6PTA7ejx4O3orKyl7dmFyIFk9eC16LEY9VVtZLSh6JTQ/MDo0KV07Tlt6XT16PDR8fFk8PTQ/RjpDLklOVl9TVUJfTUlYWzBdW0Mu''@;'; put 'put ''U0JPWFtGPj4+MjRdXV5DLklOVl9TVUJfTUlYWzFdW0MuU0JPWFtGPj4+MTYmMjU1XV1eQy5JTlZfU1VCX01JWFsyXVtDLlNCT1hbRj4+PjgmMjU1XV1eQy5JTlZfU1VCX01JWFszXVtDLlNCT1hbMjU1JkZdXX10aGlzLl9uUm91bmRzPVIsdGhpcy5fa2V5U2NoZWR1bGU9VSx0aGlzLl9pbnZL''@;'; put 'put ''ZXlTY2hlZHVsZT1OfSx3LnByb3RvdHlwZS5lbmNyeXB0QmxvY2tSYXc9ZnVuY3Rpb24oUyl7cmV0dXJuIEEoUz1jKFMpLHRoaXMuX2tleVNjaGVkdWxlLEMuU1VCX01JWCxDLlNCT1gsdGhpcy5fblJvdW5kcyl9LHcucHJvdG90eXBlLmVuY3J5cHRCbG9jaz1mdW5jdGlvbihTKXt2YXIgTD10''@;'; put 'put ''aGlzLmVuY3J5cHRCbG9ja1JhdyhTKSxSPXkuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBSLndyaXRlVUludDMyQkUoTFswXSwwKSxSLndyaXRlVUludDMyQkUoTFsxXSw0KSxSLndyaXRlVUludDMyQkUoTFsyXSw4KSxSLndyaXRlVUludDMyQkUoTFszXSwxMiksUn0sdy5wcm90b3R5cGUuZGVj''@;'; put 'put ''cnlwdEJsb2NrPWZ1bmN0aW9uKFMpe3ZhciBMPShTPWMoUykpWzFdO1NbMV09U1szXSxTWzNdPUw7dmFyIFI9QShTLHRoaXMuX2ludktleVNjaGVkdWxlLEMuSU5WX1NVQl9NSVgsQy5JTlZfU0JPWCx0aGlzLl9uUm91bmRzKSx4PXkuYWxsb2NVbnNhZmUoMTYpO3JldHVybiB4LndyaXRlVUlu''@;'; put 'put ''dDMyQkUoUlswXSwwKSx4LndyaXRlVUludDMyQkUoUlszXSw0KSx4LndyaXRlVUludDMyQkUoUlsyXSw4KSx4LndyaXRlVUludDMyQkUoUlsxXSwxMikseH0sdy5wcm90b3R5cGUuc2NydWI9ZnVuY3Rpb24oKXtzKHRoaXMuX2tleVNjaGVkdWxlKSxzKHRoaXMuX2ludktleVNjaGVkdWxlKSxz''@;'; put 'put ''KHRoaXMuX2tleSl9LGZlLmV4cG9ydHMuQUVTPXd9LDkyMzU2KGZlLGosaCl7dmFyIHk9aCg1MDQ2MiksYz1oKDkyODYxKS5CdWZmZXIscz1oKDU2MTY4KSxBPWgoNTY2OTgpLHY9aCgyNTg5MiksQz1oKDMwMjk1KSx3PWgoNDUxMjIpO2Z1bmN0aW9uIFIoeCxVLEgsVil7cy5jYWxsKHRoaXMp''@;'; put 'put ''O3ZhciBOPWMuYWxsb2MoNCwwKTt0aGlzLl9jaXBoZXI9bmV3IHkuQUVTKFUpO3ZhciB6PXRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2soTik7dGhpcy5fZ2hhc2g9bmV3IHYoeiksSD1mdW5jdGlvbiBMKHgsVSxIKXtpZigxMj09PVUubGVuZ3RoKXJldHVybiB4Ll9maW5JRD1jLmNvbmNhdChb''@;'; put 'put ''VSxjLmZyb20oWzAsMCwwLDFdKV0pLGMuY29uY2F0KFtVLGMuZnJvbShbMCwwLDAsMl0pXSk7dmFyIFY9bmV3IHYoSCksTj1VLmxlbmd0aCx6PU4lMTY7Vi51cGRhdGUoVSkseiYmVi51cGRhdGUoYy5hbGxvYyh6PTE2LXosMCkpLFYudXBkYXRlKGMuYWxsb2MoOCwwKSk7dmFyIFk9OCpOLEY9''@;'; put 'put ''Yy5hbGxvYyg4KTtGLndyaXRlVUludEJFKFksMCw4KSxWLnVwZGF0ZShGKSx4Ll9maW5JRD1WLnN0YXRlO3ZhciBXPWMuZnJvbSh4Ll9maW5JRCk7cmV0dXJuIHcoVyksV30odGhpcyxILHopLHRoaXMuX3ByZXY9Yy5mcm9tKEgpLHRoaXMuX2NhY2hlPWMuYWxsb2NVbnNhZmUoMCksdGhpcy5f''@;'; put 'put ''c2VjQ2FjaGU9Yy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PVYsdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLHRoaXMuX21vZGU9eCx0aGlzLl9hdXRoVGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfUEoUixzKSxSLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHgpe2lmKCF0aGlzLl9j''@;'; put 'put ''YWxsZWQmJnRoaXMuX2FsZW4pe3ZhciBVPTE2LXRoaXMuX2FsZW4lMTY7VTwxNiYmKFU9Yy5hbGxvYyhVLDApLHRoaXMuX2doYXNoLnVwZGF0ZShVKSl9dGhpcy5fY2FsbGVkPSEwO3ZhciBIPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHgpO3JldHVybiB0aGlzLl9naGFzaC51cGRhdGUodGhp''@;'; put 'put ''cy5fZGVjcnlwdD94OkgpLHRoaXMuX2xlbis9eC5sZW5ndGgsSH0sUi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdCYmIXRoaXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRh''@;'; put 'put ''dGEiKTt2YXIgeD1DKHRoaXMuX2doYXNoLmZpbmFsKDgqdGhpcy5fYWxlbiw4KnRoaXMuX2xlbiksdGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0aGlzLl9maW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQmJmZ1bmN0aW9uIFMoeCxVKXt2YXIgSD0wO3gubGVuZ3RoIT09VS5sZW5ndGgmJkgrKztm''@;'; put 'put ''b3IodmFyIFY9TWF0aC5taW4oeC5sZW5ndGgsVS5sZW5ndGgpLE49MDtOPFY7KytOKUgrPXhbTl1eVVtOXTtyZXR1cm4gSH0oeCx0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3RoaXMuX2F1''@;'; put 'put ''dGhUYWc9eCx0aGlzLl9jaXBoZXIuc2NydWIoKX0sUi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHR8fCFjLmlzQnVmZmVyKHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0''@;'; put 'put ''ZWQgc3RhdGUiKTtyZXR1cm4gdGhpcy5fYXV0aFRhZ30sUi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbihVKXtpZighdGhpcy5fZGVjcnlwdCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fYXV0aFRh''@;'; put 'put ''Zz1VfSxSLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oVSl7aWYodGhpcy5fY2FsbGVkKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgQUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fZ2hhc2gudXBkYXRlKFUpLHRoaXMuX2FsZW4rPVUubGVuZ3RofSxmZS5leHBv''@;'; put 'put ''cnRzPVJ9LDEyNDEoZmUsaixoKXt2YXIgeT1oKDI1Nzk5KSxjPWgoMzYxNzEpLHM9aCgzMjE5KTtqLmNyZWF0ZUNpcGhlcj1qLkNpcGhlcj15LmNyZWF0ZUNpcGhlcixqLmNyZWF0ZUNpcGhlcml2PWouQ2lwaGVyaXY9eS5jcmVhdGVDaXBoZXJpdixqLmNyZWF0ZURlY2lwaGVyPWouRGVjaXBo''@;'; put 'put ''ZXI9Yy5jcmVhdGVEZWNpcGhlcixqLmNyZWF0ZURlY2lwaGVyaXY9ai5EZWNpcGhlcml2PWMuY3JlYXRlRGVjaXBoZXJpdixqLmxpc3RDaXBoZXJzPWouZ2V0Q2lwaGVycz1mdW5jdGlvbiBBKCl7cmV0dXJuIE9iamVjdC5rZXlzKHMpfX0sMzYxNzEoZmUsaixoKXt2YXIgeT1oKDkyMzU2KSxj''@;'; put 'put ''PWgoOTI4NjEpLkJ1ZmZlcixzPWgoNTMwKSxBPWgoNTA2NTApLHY9aCg1NjE2OCksQz1oKDUwNDYyKSx3PWgoNjgwNzgpO2Z1bmN0aW9uIEwoVixOLHope3YuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgUix0aGlzLl9sYXN0PXZvaWQgMCx0aGlzLl9jaXBoZXI9bmV3IEMuQUVTKE4pLHRo''@;'; put 'put ''aXMuX3ByZXY9Yy5mcm9tKHopLHRoaXMuX21vZGU9Vix0aGlzLl9hdXRvcGFkZGluZz0hMH1mdW5jdGlvbiBSKCl7dGhpcy5jYWNoZT1jLmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIFUoVixOLHope3ZhciBZPXNbVi50b0xvd2VyQ2FzZSgpXTtpZighWSl0aHJvdyBuZXcgVHlwZUVycm9yKCJp''@;'; put 'put ''bnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlwZW9mIHomJih6PWMuZnJvbSh6KSksIkdDTSIhPT1ZLm1vZGUmJnoubGVuZ3RoIT09WS5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK3oubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIE4mJihO''@;'; put 'put ''PWMuZnJvbShOKSksTi5sZW5ndGghPT1ZLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQga2V5IGxlbmd0aCAiK04ubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PVkudHlwZT9uZXcgQShZLm1vZHVsZSxOLHosITApOiJhdXRoIj09PVkudHlwZT9uZXcgeShZLm1vZHVsZSxOLHos''@;'; put 'put ''ITApOm5ldyBMKFkubW9kdWxlLE4seil9aCg1NjY5OCkoTCx2KSxMLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFYpe3RoaXMuX2NhY2hlLmFkZChWKTtmb3IodmFyIE4seixZPVtdO049dGhpcy5fY2FjaGUuZ2V0KHRoaXMuX2F1dG9wYWRkaW5nKTspej10aGlzLl9tb2RlLmRlY3J5cHQo''@;'; put 'put ''dGhpcyxOKSxZLnB1c2goeik7cmV0dXJuIGMuY29uY2F0KFkpfSxMLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgVj10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBmdW5jdGlvbiB4KFYpe3ZhciBOPVZbMTVdO2lmKE48MXx8Tj4xNil0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoInVuYWJsZSB0byBkZWNyeXB0IGRhdGEiKTtmb3IodmFyIHo9LTE7Kyt6PE47KWlmKFZbeisoMTYtTildIT09Til0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBkZWNyeXB0IGRhdGEiKTtpZigxNiE9PU4pcmV0dXJuIFYuc2xpY2UoMCwxNi1OKX0odGhpcy5fbW9kZS5k''@;'; put 'put ''ZWNyeXB0KHRoaXMsVikpO2lmKFYpdGhyb3cgbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sTC5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oVil7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhVix0aGlzfSxSLnByb3RvdHlwZS5hZGQ9''@;'; put 'put ''ZnVuY3Rpb24oVil7dGhpcy5jYWNoZT1jLmNvbmNhdChbdGhpcy5jYWNoZSxWXSl9LFIucHJvdG90eXBlLmdldD1mdW5jdGlvbihWKXt2YXIgTjtpZihWKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNilyZXR1cm4gTj10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNo''@;'; put 'put ''ZS5zbGljZSgxNiksTn1lbHNlIGlmKHRoaXMuY2FjaGUubGVuZ3RoPj0xNilyZXR1cm4gTj10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksTjtyZXR1cm4gbnVsbH0sUi5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hl''@;'; put 'put ''Lmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZX0sai5jcmVhdGVEZWNpcGhlcj1mdW5jdGlvbiBIKFYsTil7dmFyIHo9c1tWLnRvTG93ZXJDYXNlKCldO2lmKCF6KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO3ZhciBZPXcoTiwhMSx6LmtleSx6Lml2KTtyZXR1cm4g''@;'; put 'put ''VShWLFkua2V5LFkuaXYpfSxqLmNyZWF0ZURlY2lwaGVyaXY9VX0sMjU3OTkoZmUsaixoKXt2YXIgeT1oKDUzMCksYz1oKDkyMzU2KSxzPWgoOTI4NjEpLkJ1ZmZlcixBPWgoNTA2NTApLHY9aCg1NjE2OCksQz1oKDUwNDYyKSx3PWgoNjgwNzgpO2Z1bmN0aW9uIEwoVixOLHope3YuY2FsbCh0''@;'; put 'put ''aGlzKSx0aGlzLl9jYWNoZT1uZXcgeCx0aGlzLl9jaXBoZXI9bmV3IEMuQUVTKE4pLHRoaXMuX3ByZXY9cy5mcm9tKHopLHRoaXMuX21vZGU9Vix0aGlzLl9hdXRvcGFkZGluZz0hMH1oKDU2Njk4KShMLHYpLEwucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVil7dGhpcy5fY2FjaGUuYWRk''@;'; put 'put ''KFYpO2Zvcih2YXIgTix6LFk9W107Tj10aGlzLl9jYWNoZS5nZXQoKTspej10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxOKSxZLnB1c2goeik7cmV0dXJuIHMuY29uY2F0KFkpfTt2YXIgUj1zLmFsbG9jKDE2LDE2KTtmdW5jdGlvbiB4KCl7dGhpcy5jYWNoZT1zLmFsbG9jVW5zYWZlKDApfWZ1''@;'; put 'put ''bmN0aW9uIFUoVixOLHope3ZhciBZPXlbVi50b0xvd2VyQ2FzZSgpXTtpZighWSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlwZW9mIE4mJihOPXMuZnJvbShOKSksTi5sZW5ndGghPT1ZLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''ImludmFsaWQga2V5IGxlbmd0aCAiK04ubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIHomJih6PXMuZnJvbSh6KSksIkdDTSIhPT1ZLm1vZGUmJnoubGVuZ3RoIT09WS5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK3oubGVuZ3RoKTtyZXR1cm4ic3RyZWFt''@;'; put 'put ''Ij09PVkudHlwZT9uZXcgQShZLm1vZHVsZSxOLHopOiJhdXRoIj09PVkudHlwZT9uZXcgYyhZLm1vZHVsZSxOLHopOm5ldyBMKFkubW9kdWxlLE4seil9TC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFY9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZyly''@;'; put 'put ''ZXR1cm4gVj10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxWKSx0aGlzLl9jaXBoZXIuc2NydWIoKSxWO2lmKCFWLmVxdWFscyhSKSl0aHJvdyB0aGlzLl9jaXBoZXIuc2NydWIoKSxuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSxMLnByb3RvdHlwZS5zZXRB''@;'; put 'put ''dXRvUGFkZGluZz1mdW5jdGlvbihWKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFWLHRoaXN9LHgucHJvdG90eXBlLmFkZD1mdW5jdGlvbihWKXt0aGlzLmNhY2hlPXMuY29uY2F0KFt0aGlzLmNhY2hlLFZdKX0seC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5s''@;'; put 'put ''ZW5ndGg+MTUpe3ZhciBWPXRoaXMuY2FjaGUuc2xpY2UoMCwxNik7cmV0dXJuIHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksVn1yZXR1cm4gbnVsbH0seC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIFY9MTYtdGhpcy5jYWNoZS5sZW5ndGgsTj1zLmFsbG9jVW5z''@;'; put 'put ''YWZlKFYpLHo9LTE7Kyt6PFY7KU4ud3JpdGVVSW50OChWLHopO3JldHVybiBzLmNvbmNhdChbdGhpcy5jYWNoZSxOXSl9LGouY3JlYXRlQ2lwaGVyaXY9VSxqLmNyZWF0ZUNpcGhlcj1mdW5jdGlvbiBIKFYsTil7dmFyIHo9eVtWLnRvTG93ZXJDYXNlKCldO2lmKCF6KXRocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO3ZhciBZPXcoTiwhMSx6LmtleSx6Lml2KTtyZXR1cm4gVShWLFkua2V5LFkuaXYpfX0sMjU4OTIoZmUsaixoKXt2YXIgeT1oKDkyODYxKS5CdWZmZXIsYz15LmFsbG9jKDE2LDApO2Z1bmN0aW9uIEEoQyl7dmFyIHc9eS5hbGxvY1Vuc2FmZSgx''@;'; put 'put ''Nik7cmV0dXJuIHcud3JpdGVVSW50MzJCRShDWzBdPj4+MCwwKSx3LndyaXRlVUludDMyQkUoQ1sxXT4+PjAsNCksdy53cml0ZVVJbnQzMkJFKENbMl0+Pj4wLDgpLHcud3JpdGVVSW50MzJCRShDWzNdPj4+MCwxMiksd31mdW5jdGlvbiB2KEMpe3RoaXMuaD1DLHRoaXMuc3RhdGU9eS5hbGxv''@;'; put 'put ''YygxNiwwKSx0aGlzLmNhY2hlPXkuYWxsb2NVbnNhZmUoMCl9di5wcm90b3R5cGUuZ2hhc2g9ZnVuY3Rpb24oQyl7Zm9yKHZhciB3PS0xOysrdzxDLmxlbmd0aDspdGhpcy5zdGF0ZVt3XV49Q1t3XTt0aGlzLl9tdWx0aXBseSgpfSx2LnByb3RvdHlwZS5fbXVsdGlwbHk9ZnVuY3Rpb24oKXtm''@;'; put 'put ''b3IodmFyIFMsUixDPWZ1bmN0aW9uIHMoQyl7cmV0dXJuW0MucmVhZFVJbnQzMkJFKDApLEMucmVhZFVJbnQzMkJFKDQpLEMucmVhZFVJbnQzMkJFKDgpLEMucmVhZFVJbnQzMkJFKDEyKV19KHRoaXMuaCksdz1bMCwwLDAsMF0seD0tMTsrK3g8MTI4Oyl7Zm9yKCEhKHRoaXMuc3RhdGVbfn4o''@;'; put 'put ''eC84KV0mMTw8Ny14JTgpJiYod1swXV49Q1swXSx3WzFdXj1DWzFdLHdbMl1ePUNbMl0sd1szXV49Q1szXSksUj0hISgxJkNbM10pLFM9MztTPjA7Uy0tKUNbU109Q1tTXT4+PjF8KDEmQ1tTLTFdKTw8MzE7Q1swXT1DWzBdPj4+MSxSJiYoQ1swXT0tNTIwMDkzNjk2XkNbMF0pfXRoaXMuc3Rh''@;'; put 'put ''dGU9QSh3KX0sdi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEMpe3RoaXMuY2FjaGU9eS5jb25jYXQoW3RoaXMuY2FjaGUsQ10pO2Zvcih2YXIgdzt0aGlzLmNhY2hlLmxlbmd0aD49MTY7KXc9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYp''@;'; put 'put ''LHRoaXMuZ2hhc2godyl9LHYucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKEMsdyl7cmV0dXJuIHRoaXMuY2FjaGUubGVuZ3RoJiZ0aGlzLmdoYXNoKHkuY29uY2F0KFt0aGlzLmNhY2hlLGNdLDE2KSksdGhpcy5naGFzaChBKFswLEMsMCx3XSkpLHRoaXMuc3RhdGV9LGZlLmV4cG9ydHM9dn0s''@;'; put 'put ''NDUxMjIoZmUpe2ZlLmV4cG9ydHM9ZnVuY3Rpb24gaihoKXtmb3IodmFyIGMseT1oLmxlbmd0aDt5LS07KXtpZigyNTUhPT0oYz1oLnJlYWRVSW50OCh5KSkpe2MrKyxoLndyaXRlVUludDgoYyx5KTticmVha31oLndyaXRlVUludDgoMCx5KX19fSw5Mjg4NChmZSxqLGgpe3ZhciB5PWgoMzAy''@;'; put 'put ''OTUpO2ouZW5jcnlwdD1mdW5jdGlvbihjLHMpe3ZhciBBPXkocyxjLl9wcmV2KTtyZXR1cm4gYy5fcHJldj1jLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEEpLGMuX3ByZXZ9LGouZGVjcnlwdD1mdW5jdGlvbihjLHMpe3ZhciBBPWMuX3ByZXY7Yy5fcHJldj1zO3ZhciB2PWMuX2NpcGhlci5kZWNy''@;'; put 'put ''eXB0QmxvY2socyk7cmV0dXJuIHkodixBKX19LDQ2MzgzKGZlLGosaCl7dmFyIHk9aCg5Mjg2MSkuQnVmZmVyLGM9aCgzMDI5NSk7ZnVuY3Rpb24gcyhBLHYsQyl7dmFyIHc9di5sZW5ndGgsUz1jKHYsQS5fY2FjaGUpO3JldHVybiBBLl9jYWNoZT1BLl9jYWNoZS5zbGljZSh3KSxBLl9wcmV2''@;'; put 'put ''PXkuY29uY2F0KFtBLl9wcmV2LEM/djpTXSksU31qLmVuY3J5cHQ9ZnVuY3Rpb24oQSx2LEMpe2Zvcih2YXIgUyx3PXkuYWxsb2NVbnNhZmUoMCk7di5sZW5ndGg7KXtpZigwPT09QS5fY2FjaGUubGVuZ3RoJiYoQS5fY2FjaGU9QS5fY2lwaGVyLmVuY3J5cHRCbG9jayhBLl9wcmV2KSxBLl9w''@;'; put 'put ''cmV2PXkuYWxsb2NVbnNhZmUoMCkpLCEoQS5fY2FjaGUubGVuZ3RoPD12Lmxlbmd0aCkpe3c9eS5jb25jYXQoW3cscyhBLHYsQyldKTticmVha313PXkuY29uY2F0KFt3LHMoQSx2LnNsaWNlKDAsUz1BLl9jYWNoZS5sZW5ndGgpLEMpXSksdj12LnNsaWNlKFMpfXJldHVybiB3fX0sNTUyNjQo''@;'; put 'put ''ZmUsaixoKXt2YXIgeT1oKDkyODYxKS5CdWZmZXI7ZnVuY3Rpb24gYyhBLHYsQyl7Zm9yKHZhciB4LFUsUz0tMSxSPTA7KytTPDg7KVIrPSgxMjgmKFU9QS5fY2lwaGVyLmVuY3J5cHRCbG9jayhBLl9wcmV2KVswXV4oeD12JjE8PDctUz8xMjg6MCkpKT4+UyU4LEEuX3ByZXY9cyhBLl9wcmV2''@;'; put 'put ''LEM/eDpVKTtyZXR1cm4gUn1mdW5jdGlvbiBzKEEsdil7dmFyIEM9QS5sZW5ndGgsdz0tMSxTPXkuYWxsb2NVbnNhZmUoQS5sZW5ndGgpO2ZvcihBPXkuY29uY2F0KFtBLHkuZnJvbShbdl0pXSk7Kyt3PEM7KVNbd109QVt3XTw8MXxBW3crMV0+Pjc7cmV0dXJuIFN9ai5lbmNyeXB0PWZ1bmN0''@;'; put 'put ''aW9uKEEsdixDKXtmb3IodmFyIHc9di5sZW5ndGgsUz15LmFsbG9jVW5zYWZlKHcpLEw9LTE7KytMPHc7KVNbTF09YyhBLHZbTF0sQyk7cmV0dXJuIFN9fSw4Njk3NShmZSxqLGgpe3ZhciB5PWgoOTI4NjEpLkJ1ZmZlcjtmdW5jdGlvbiBjKHMsQSx2KXt2YXIgdz1zLl9jaXBoZXIuZW5jcnlw''@;'; put 'put ''dEJsb2NrKHMuX3ByZXYpWzBdXkE7cmV0dXJuIHMuX3ByZXY9eS5jb25jYXQoW3MuX3ByZXYuc2xpY2UoMSkseS5mcm9tKFt2P0E6d10pXSksd31qLmVuY3J5cHQ9ZnVuY3Rpb24ocyxBLHYpe2Zvcih2YXIgQz1BLmxlbmd0aCx3PXkuYWxsb2NVbnNhZmUoQyksUz0tMTsrK1M8Qzspd1tTXT1j''@;'; put 'put ''KHMsQVtTXSx2KTtyZXR1cm4gd319LDYzMDUzKGZlLGosaCl7dmFyIHk9aCgzMDI5NSksYz1oKDkyODYxKS5CdWZmZXIscz1oKDQ1MTIyKTtmdW5jdGlvbiBBKEMpe3ZhciB3PUMuX2NpcGhlci5lbmNyeXB0QmxvY2tSYXcoQy5fcHJldik7cmV0dXJuIHMoQy5fcHJldiksd31qLmVuY3J5cHQ9''@;'; put 'put ''ZnVuY3Rpb24oQyx3KXt2YXIgUz1NYXRoLmNlaWwody5sZW5ndGgvMTYpLEw9Qy5fY2FjaGUubGVuZ3RoO0MuX2NhY2hlPWMuY29uY2F0KFtDLl9jYWNoZSxjLmFsbG9jVW5zYWZlKDE2KlMpXSk7Zm9yKHZhciBSPTA7UjxTO1IrKyl7dmFyIHg9QShDKSxVPUwrMTYqUjtDLl9jYWNoZS53cml0''@;'; put 'put ''ZVVJbnQzMkJFKHhbMF0sVSswKSxDLl9jYWNoZS53cml0ZVVJbnQzMkJFKHhbMV0sVSs0KSxDLl9jYWNoZS53cml0ZVVJbnQzMkJFKHhbMl0sVSs4KSxDLl9jYWNoZS53cml0ZVVJbnQzMkJFKHhbM10sVSsxMil9dmFyIEg9Qy5fY2FjaGUuc2xpY2UoMCx3Lmxlbmd0aCk7cmV0dXJuIEMuX2Nh''@;'; put 'put ''Y2hlPUMuX2NhY2hlLnNsaWNlKHcubGVuZ3RoKSx5KHcsSCl9fSw1MjYzMihmZSxqKXtqLmVuY3J5cHQ9ZnVuY3Rpb24oaCx5KXtyZXR1cm4gaC5fY2lwaGVyLmVuY3J5cHRCbG9jayh5KX0sai5kZWNyeXB0PWZ1bmN0aW9uKGgseSl7cmV0dXJuIGguX2NpcGhlci5kZWNyeXB0QmxvY2soeSl9''@;'; put 'put ''fSw1MzAoZmUsaixoKXt2YXIgeT17RUNCOmgoNTI2MzIpLENCQzpoKDkyODg0KSxDRkI6aCg0NjM4MyksQ0ZCODpoKDg2OTc1KSxDRkIxOmgoNTUyNjQpLE9GQjpoKDQ2ODQzKSxDVFI6aCg2MzA1MyksR0NNOmgoNjMwNTMpfSxjPWgoMzIxOSk7Zm9yKHZhciBzIGluIGMpY1tzXS5tb2R1bGU9''@;'; put 'put ''eVtjW3NdLm1vZGVdO2ZlLmV4cG9ydHM9Y30sNDY4NDMoZmUsaixoKXt2YXIgeT1oKDQ4Mjg3KS5CdWZmZXIsYz1oKDMwMjk1KTtmdW5jdGlvbiBzKEEpe3JldHVybiBBLl9wcmV2PUEuX2NpcGhlci5lbmNyeXB0QmxvY2soQS5fcHJldiksQS5fcHJldn1qLmVuY3J5cHQ9ZnVuY3Rpb24oQSx2''@;'; put 'put ''KXtmb3IoO0EuX2NhY2hlLmxlbmd0aDx2Lmxlbmd0aDspQS5fY2FjaGU9eS5jb25jYXQoW0EuX2NhY2hlLHMoQSldKTt2YXIgQz1BLl9jYWNoZS5zbGljZSgwLHYubGVuZ3RoKTtyZXR1cm4gQS5fY2FjaGU9QS5fY2FjaGUuc2xpY2Uodi5sZW5ndGgpLGModixDKX19LDUwNjUwKGZlLGosaCl7''@;'; put 'put ''dmFyIHk9aCg1MDQ2MiksYz1oKDkyODYxKS5CdWZmZXIscz1oKDU2MTY4KTtmdW5jdGlvbiB2KEMsdyxTLEwpe3MuY2FsbCh0aGlzKSx0aGlzLl9jaXBoZXI9bmV3IHkuQUVTKHcpLHRoaXMuX3ByZXY9Yy5mcm9tKFMpLHRoaXMuX2NhY2hlPWMuYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2Fj''@;'; put 'put ''aGU9Yy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PUwsdGhpcy5fbW9kZT1DfWgoNTY2OTgpKHYscyksdi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsQyx0aGlzLl9kZWNyeXB0KX0sdi5wcm90b3R5cGUuX2ZpbmFsPWZ1''@;'; put 'put ''bmN0aW9uKCl7dGhpcy5fY2lwaGVyLnNjcnViKCl9LGZlLmV4cG9ydHM9dn0sMzAxMjUoZmUsaixoKXt2YXIgeT1oKDg0MDUwKSxjPWgoMTI0MSkscz1oKDUzMCksQT1oKDMyNDM4KSx2PWgoNjgwNzgpO2Z1bmN0aW9uIFMoeCxVLEgpe2lmKHg9eC50b0xvd2VyQ2FzZSgpLHNbeF0pcmV0dXJu''@;'; put 'put ''IGMuY3JlYXRlQ2lwaGVyaXYoeCxVLEgpO2lmKEFbeF0pcmV0dXJuIG5ldyB5KHtrZXk6VSxpdjpILG1vZGU6eH0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfWZ1bmN0aW9uIEwoeCxVLEgpe2lmKHg9eC50b0xvd2VyQ2FzZSgpLHNbeF0pcmV0dXJuIGMuY3Jl''@;'; put 'put ''YXRlRGVjaXBoZXJpdih4LFUsSCk7aWYoQVt4XSlyZXR1cm4gbmV3IHkoe2tleTpVLGl2OkgsbW9kZTp4LGRlY3J5cHQ6ITB9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1qLmNyZWF0ZUNpcGhlcj1qLkNpcGhlcj1mdW5jdGlvbiBDKHgsVSl7dmFyIEgsVjtp''@;'; put 'put ''Zih4PXgudG9Mb3dlckNhc2UoKSxzW3hdKUg9c1t4XS5rZXksVj1zW3hdLml2O2Vsc2V7aWYoIUFbeF0pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7SD04KkFbeF0ua2V5LFY9QVt4XS5pdn12YXIgTj12KFUsITEsSCxWKTtyZXR1cm4gUyh4LE4ua2V5LE4uaXYp''@;'; put 'put ''fSxqLmNyZWF0ZUNpcGhlcml2PWouQ2lwaGVyaXY9UyxqLmNyZWF0ZURlY2lwaGVyPWouRGVjaXBoZXI9ZnVuY3Rpb24gdyh4LFUpe3ZhciBILFY7aWYoeD14LnRvTG93ZXJDYXNlKCksc1t4XSlIPXNbeF0ua2V5LFY9c1t4XS5pdjtlbHNle2lmKCFBW3hdKXRocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''ImludmFsaWQgc3VpdGUgdHlwZSIpO0g9OCpBW3hdLmtleSxWPUFbeF0uaXZ9dmFyIE49dihVLCExLEgsVik7cmV0dXJuIEwoeCxOLmtleSxOLml2KX0sai5jcmVhdGVEZWNpcGhlcml2PWouRGVjaXBoZXJpdj1MLGoubGlzdENpcGhlcnM9ai5nZXRDaXBoZXJzPWZ1bmN0aW9uIFIoKXtyZXR1''@;'; put 'put ''cm4gT2JqZWN0LmtleXMoQSkuY29uY2F0KGMuZ2V0Q2lwaGVycygpKX19LDg0MDUwKGZlLGosaCl7dmFyIHk9aCg1NjE2OCksYz1oKDI5NTYwKSxzPWgoNTY2OTgpLEE9aCg5Mjg2MSkuQnVmZmVyLHY9eyJkZXMtZWRlMy1jYmMiOmMuQ0JDLmluc3RhbnRpYXRlKGMuRURFKSwiZGVzLWVkZTMi''@;'; put 'put ''OmMuRURFLCJkZXMtZWRlLWNiYyI6Yy5DQkMuaW5zdGFudGlhdGUoYy5FREUpLCJkZXMtZWRlIjpjLkVERSwiZGVzLWNiYyI6Yy5DQkMuaW5zdGFudGlhdGUoYy5ERVMpLCJkZXMtZWNiIjpjLkRFU307ZnVuY3Rpb24gQyh3KXt5LmNhbGwodGhpcyk7dmFyIFIsUz13Lm1vZGUudG9Mb3dlckNh''@;'; put 'put ''c2UoKSxMPXZbU107Uj13LmRlY3J5cHQ/ImRlY3J5cHQiOiJlbmNyeXB0Ijt2YXIgeD13LmtleTtBLmlzQnVmZmVyKHgpfHwoeD1BLmZyb20oeCkpLCgiZGVzLWVkZSI9PT1TfHwiZGVzLWVkZS1jYmMiPT09UykmJih4PUEuY29uY2F0KFt4LHguc2xpY2UoMCw4KV0pKTt2YXIgVT13Lml2O0Eu''@;'; put 'put ''aXNCdWZmZXIoVSl8fChVPUEuZnJvbShVKSksdGhpcy5fZGVzPUwuY3JlYXRlKHtrZXk6eCxpdjpVLHR5cGU6Un0pfXYuZGVzPXZbImRlcy1jYmMiXSx2LmRlczM9dlsiZGVzLWVkZTMtY2JjIl0sZmUuZXhwb3J0cz1DLHMoQyx5KSxDLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHcpe3Jl''@;'; put 'put ''dHVybiBBLmZyb20odGhpcy5fZGVzLnVwZGF0ZSh3KSl9LEMucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiBBLmZyb20odGhpcy5fZGVzLmZpbmFsKCkpfX0sMzI0MzgoZmUsail7alsiZGVzLWVjYiJdPXtrZXk6OCxpdjowfSxqWyJkZXMtY2JjIl09ai5kZXM9e2tleTo4LGl2''@;'; put 'put ''Ojh9LGpbImRlcy1lZGUzLWNiYyJdPWouZGVzMz17a2V5OjI0LGl2Ojh9LGpbImRlcy1lZGUzIl09e2tleToyNCxpdjowfSxqWyJkZXMtZWRlLWNiYyJdPXtrZXk6MTYsaXY6OH0salsiZGVzLWVkZSJdPXtrZXk6MTYsaXY6MH19LDY3MzMyKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgo''@;'; put 'put ''Mzk0MDQpLGM9aCg1MzIwOSkscz1oKDkyODYxKS5CdWZmZXI7ZnVuY3Rpb24gQSh3KXt2YXIgTCxTPXcubW9kdWx1cy5ieXRlTGVuZ3RoKCk7ZG97TD1uZXcgeShjKFMpKX13aGlsZShMLmNtcCh3Lm1vZHVsdXMpPj0wfHwhTC51bW9kKHcucHJpbWUxKXx8IUwudW1vZCh3LnByaW1lMikpO3Jl''@;'; put 'put ''dHVybiBMfWZ1bmN0aW9uIEModyxTKXt2YXIgTD1mdW5jdGlvbiB2KHcpe3ZhciBTPUEodyk7cmV0dXJue2JsaW5kZXI6Uy50b1JlZCh5Lm1vbnQody5tb2R1bHVzKSkucmVkUG93KG5ldyB5KHcucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCksdW5ibGluZGVyOlMuaW52bSh3Lm1vZHVsdXMp''@;'; put 'put ''fX0oUyksUj1TLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLHg9bmV3IHkodykubXVsKEwuYmxpbmRlcikudW1vZChTLm1vZHVsdXMpLFU9eC50b1JlZCh5Lm1vbnQoUy5wcmltZTEpKSxIPXgudG9SZWQoeS5tb250KFMucHJpbWUyKSksVj1TLmNvZWZmaWNpZW50LE49Uy5wcmltZTEsej1TLnByaW1l''@;'; put 'put ''MixZPVUucmVkUG93KFMuZXhwb25lbnQxKS5mcm9tUmVkKCksRj1ILnJlZFBvdyhTLmV4cG9uZW50MikuZnJvbVJlZCgpLFc9WS5pc3ViKEYpLmltdWwoVikudW1vZChOKS5pbXVsKHopO3JldHVybiBGLmlhZGQoVykuaW11bChMLnVuYmxpbmRlcikudW1vZChTLm1vZHVsdXMpLnRvQXJyYXlM''@;'; put 'put ''aWtlKHMsImJlIixSKX1DLmdldHI9QSxmZS5leHBvcnRzPUN9LDU1NzE1KGZlLGosaCl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9aCg2Mjk1MSl9LDIwKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoOTI4NjEpLkJ1ZmZlcixjPWgoNDcxMDgpLHM9aCg0NjczNyksQT1oKDU2Njk4KSx2''@;'; put 'put ''PWgoMzUzNTkpLEM9aCg3NDg0Nyksdz1oKDYyOTUxKTtmdW5jdGlvbiBTKFUpe3MuV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgSD13W1VdO2lmKCFIKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2hUeXBlPUguaGFzaCx0aGlzLl9oYXNoPWMoSC5o''@;'; put 'put ''YXNoKSx0aGlzLl90YWc9SC5pZCx0aGlzLl9zaWduVHlwZT1ILnNpZ259ZnVuY3Rpb24gTChVKXtzLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIEg9d1tVXTtpZighSCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoPWMoSC5oYXNoKSx0aGlzLl90''@;'; put 'put ''YWc9SC5pZCx0aGlzLl9zaWduVHlwZT1ILnNpZ259ZnVuY3Rpb24gUihVKXtyZXR1cm4gbmV3IFMoVSl9ZnVuY3Rpb24geChVKXtyZXR1cm4gbmV3IEwoVSl9T2JqZWN0LmtleXModykuZm9yRWFjaChmdW5jdGlvbihVKXt3W1VdLmlkPXkuZnJvbSh3W1VdLmlkLCJoZXgiKSx3W1UudG9Mb3dl''@;'; put 'put ''ckNhc2UoKV09d1tVXX0pLEEoUyxzLldyaXRhYmxlKSxTLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oSCxWLE4pe3RoaXMuX2hhc2gudXBkYXRlKEgpLE4oKX0sUy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEgsVil7cmV0dXJuIHRoaXMuX2hhc2gudXBkYXRlKCJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgSD95LmZyb20oSCxWKTpIKSx0aGlzfSxTLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKEgsVil7dGhpcy5lbmQoKTt2YXIgTj10aGlzLl9oYXNoLmRpZ2VzdCgpLHo9dihOLEgsdGhpcy5faGFzaFR5cGUsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKTtyZXR1cm4gVj96LnRvU3RyaW5nKFYp''@;'; put 'put ''Onp9LEEoTCxzLldyaXRhYmxlKSxMLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oSCxWLE4pe3RoaXMuX2hhc2gudXBkYXRlKEgpLE4oKX0sTC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEgsVil7cmV0dXJuIHRoaXMuX2hhc2gudXBkYXRlKCJzdHJpbmciPT10eXBlb2YgSD95LmZyb20o''@;'; put 'put ''SCxWKTpIKSx0aGlzfSxMLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oSCxWLE4pe3ZhciB6PSJzdHJpbmciPT10eXBlb2YgVj95LmZyb20oVixOKTpWO3RoaXMuZW5kKCk7dmFyIFk9dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4gQyh6LFksSCx0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcp''@;'; put 'put ''fSxmZS5leHBvcnRzPXtTaWduOlIsVmVyaWZ5OngsY3JlYXRlU2lnbjpSLGNyZWF0ZVZlcmlmeTp4fX0sMzUzNTkoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg5Mjg2MSkuQnVmZmVyLGM9aCg4MzUwNykscz1oKDY3MzMyKSxBPWgoODY3MjkpLmVjLHY9aCgzOTQwNCksQz1oKDc4MTcw''@;'; put 'put ''KSx3PWgoNjQ1ODkpO2Z1bmN0aW9uIEgoRixXLHEscmUpe2lmKChGPXkuZnJvbShGLnRvQXJyYXkoKSkpLmxlbmd0aDxXLmJ5dGVMZW5ndGgoKSl7dmFyIG1lPXkuYWxsb2MoVy5ieXRlTGVuZ3RoKCktRi5sZW5ndGgpO0Y9eS5jb25jYXQoW21lLEZdKX12YXIgQ2U9cS5sZW5ndGgsSWU9ZnVu''@;'; put 'put ''Y3Rpb24gTihGLFcpe0Y9KEY9VihGLFcpKS5tb2QoVyk7dmFyIHE9eS5mcm9tKEYudG9BcnJheSgpKTtpZihxLmxlbmd0aDxXLmJ5dGVMZW5ndGgoKSl7dmFyIHJlPXkuYWxsb2MoVy5ieXRlTGVuZ3RoKCktcS5sZW5ndGgpO3E9eS5jb25jYXQoW3JlLHFdKX1yZXR1cm4gcX0ocSxXKSxrZT15''@;'; put 'put ''LmFsbG9jKENlKTtrZS5maWxsKDEpO3ZhciBxZT15LmFsbG9jKENlKTtyZXR1cm4gcWU9YyhyZSxxZSkudXBkYXRlKGtlKS51cGRhdGUoeS5mcm9tKFswXSkpLnVwZGF0ZShGKS51cGRhdGUoSWUpLmRpZ2VzdCgpLGtlPWMocmUscWUpLnVwZGF0ZShrZSkuZGlnZXN0KCkse2s6cWU9YyhyZSxx''@;'; put 'put ''ZSkudXBkYXRlKGtlKS51cGRhdGUoeS5mcm9tKFsxXSkpLnVwZGF0ZShGKS51cGRhdGUoSWUpLmRpZ2VzdCgpLHY6a2U9YyhyZSxxZSkudXBkYXRlKGtlKS5kaWdlc3QoKX19ZnVuY3Rpb24gVihGLFcpe3ZhciBxPW5ldyB2KEYpLHJlPShGLmxlbmd0aDw8MyktVy5iaXRMZW5ndGgoKTtyZXR1''@;'; put 'put ''cm4gcmU+MCYmcS5pc2hybihyZSkscX1mdW5jdGlvbiB6KEYsVyxxKXt2YXIgcmUsbWU7ZG97Zm9yKHJlPXkuYWxsb2MoMCk7OCpyZS5sZW5ndGg8Ri5iaXRMZW5ndGgoKTspVy52PWMocSxXLmspLnVwZGF0ZShXLnYpLmRpZ2VzdCgpLHJlPXkuY29uY2F0KFtyZSxXLnZdKTttZT1WKHJlLEYp''@;'; put 'put ''LFcuaz1jKHEsVy5rKS51cGRhdGUoVy52KS51cGRhdGUoeS5mcm9tKFswXSkpLmRpZ2VzdCgpLFcudj1jKHEsVy5rKS51cGRhdGUoVy52KS5kaWdlc3QoKX13aGlsZSgtMSE9PW1lLmNtcChGKSk7cmV0dXJuIG1lfWZ1bmN0aW9uIFkoRixXLHEscmUpe3JldHVybiBGLnRvUmVkKHYubW9udChx''@;'; put 'put ''KSkucmVkUG93KFcpLmZyb21SZWQoKS5tb2QocmUpfWZlLmV4cG9ydHM9ZnVuY3Rpb24gTChGLFcscSxyZSxtZSl7dmFyIENlPUMoVyk7aWYoQ2UuY3VydmUpe2lmKCJlY2RzYSIhPT1yZSYmImVjZHNhL3JzYSIhPT1yZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUi''@;'; put 'put ''KTtyZXR1cm4gZnVuY3Rpb24gUihGLFcpe3ZhciBxPXdbVy5jdXJ2ZS5qb2luKCIuIildO2lmKCFxKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjdXJ2ZSAiK1cuY3VydmUuam9pbigiLiIpKTt2YXIgQ2U9bmV3IEEocSkua2V5RnJvbVByaXZhdGUoVy5wcml2YXRlS2V5KS5zaWduKEYpO3Jl''@;'; put 'put ''dHVybiB5LmZyb20oQ2UudG9ERVIoKSl9KEYsQ2UpfWlmKCJkc2EiPT09Q2UudHlwZSl7aWYoImRzYSIhPT1yZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24geChGLFcscSl7Zm9yKHZhciBxZSxyZT1XLnBhcmFtcy5wcml2X2tleSxt''@;'; put 'put ''ZT1XLnBhcmFtcy5wLENlPVcucGFyYW1zLnEsSWU9Vy5wYXJhbXMuZyxrZT1uZXcgdigwKSxYPVYoRixDZSkubW9kKENlKSxmPSExLGI9SChyZSxDZSxGLHEpOyExPT09Zjspa2U9WShJZSxxZT16KENlLGIscSksbWUsQ2UpLDA9PT0oZj1xZS5pbnZtKENlKS5pbXVsKFguYWRkKHJlLm11bChr''@;'; put 'put ''ZSkpKS5tb2QoQ2UpKS5jbXBuKDApJiYoZj0hMSxrZT1uZXcgdigwKSk7cmV0dXJuIGZ1bmN0aW9uIFUoRixXKXtGPUYudG9BcnJheSgpLFc9Vy50b0FycmF5KCksMTI4JkZbMF0mJihGPVswXS5jb25jYXQoRikpLDEyOCZXWzBdJiYoVz1bMF0uY29uY2F0KFcpKTt2YXIgcmU9WzQ4LEYubGVu''@;'; put 'put ''Z3RoK1cubGVuZ3RoKzQsMixGLmxlbmd0aF07cmV0dXJuIHJlPXJlLmNvbmNhdChGLFsyLFcubGVuZ3RoXSxXKSx5LmZyb20ocmUpfShrZSxmKX0oRixDZSxxKX1pZigicnNhIiE9PXJlJiYiZWNkc2EvcnNhIiE9PXJlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIp''@;'; put 'put ''O2lmKHZvaWQgMCE9PVcucGFkZGluZyYmMSE9PVcucGFkZGluZyl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgb3IgdW5zdXBwb3J0ZWQgcGFkZGluZyBtb2RlIik7Rj15LmNvbmNhdChbbWUsRl0pO2Zvcih2YXIgSWU9Q2UubW9kdWx1cy5ieXRlTGVuZ3RoKCksa2U9WzAsMV07Ri5sZW5ndGgr''@;'; put 'put ''a2UubGVuZ3RoKzE8SWU7KWtlLnB1c2goMjU1KTtrZS5wdXNoKDApO2Zvcih2YXIgcWU9LTE7KytxZTxGLmxlbmd0aDspa2UucHVzaChGW3FlXSk7cmV0dXJuIHMoa2UsQ2UpfSxmZS5leHBvcnRzLmdldEtleT1ILGZlLmV4cG9ydHMubWFrZUtleT16fSw3NDg0NyhmZSxqLGgpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgeT1oKDkyODYxKS5CdWZmZXIsYz1oKDM5NDA0KSxzPWgoODY3MjkpLmVjLEE9aCg3ODE3MCksdj1oKDY0NTg5KTtmdW5jdGlvbiBMKFIseCl7aWYoUi5jbXBuKDApPD0wKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKTtpZihSLmNtcCh4KT49MCl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoImludmFsaWQgc2lnIil9ZmUuZXhwb3J0cz1mdW5jdGlvbiBDKFIseCxVLEgsVil7dmFyIE49QShVKTtpZigiZWMiPT09Ti50eXBlKXtpZigiZWNkc2EiIT09SCYmImVjZHNhL3JzYSIhPT1IKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uIHcoUix4LFUpe3ZhciBIPXZbVS5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIildO2lmKCFIKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjdXJ2ZSAiK1UuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIpKTtyZXR1cm4gbmV3IHMoSCkudmVyaWZ5KHgsUixVLmRhdGEuc3Vi''@;'; put 'put ''amVjdFByaXZhdGVLZXkuZGF0YSl9KFIseCxOKX1pZigiZHNhIj09PU4udHlwZSl7aWYoImRzYSIhPT1IKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIFMoUix4LFUpe3ZhciBIPVUuZGF0YS5wLFY9VS5kYXRhLnEsTj1VLmRhdGEuZyx6''@;'; put 'put ''PVUuZGF0YS5wdWJfa2V5LFk9QS5zaWduYXR1cmUuZGVjb2RlKFIsImRlciIpLEY9WS5zLFc9WS5yO0woRixWKSxMKFcsVik7dmFyIHE9Yy5tb250KEgpLHJlPUYuaW52bShWKTtyZXR1cm4gMD09PU4udG9SZWQocSkucmVkUG93KG5ldyBjKHgpLm11bChyZSkubW9kKFYpKS5mcm9tUmVkKCku''@;'; put 'put ''bXVsKHoudG9SZWQocSkucmVkUG93KFcubXVsKHJlKS5tb2QoVikpLmZyb21SZWQoKSkubW9kKEgpLm1vZChWKS5jbXAoVyl9KFIseCxOKX1pZigicnNhIiE9PUgmJiJlY2RzYS9yc2EiIT09SCl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3g9eS5jb25jYXQoW1Ys''@;'; put 'put ''eF0pO2Zvcih2YXIgej1OLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLFk9WzFdLEY9MDt4Lmxlbmd0aCtZLmxlbmd0aCsyPHo7KVkucHVzaCgyNTUpLEYrPTE7WS5wdXNoKDApO2Zvcih2YXIgVz0tMTsrK1c8eC5sZW5ndGg7KVkucHVzaCh4W1ddKTtZPXkuZnJvbShZKTt2YXIgcT1jLm1vbnQoTi5t''@;'; put 'put ''b2R1bHVzKTtSPShSPW5ldyBjKFIpLnRvUmVkKHEpKS5yZWRQb3cobmV3IGMoTi5wdWJsaWNFeHBvbmVudCkpLFI9eS5mcm9tKFIuZnJvbVJlZCgpLnRvQXJyYXkoKSk7dmFyIHJlPUY8OD8xOjA7Zm9yKHo9TWF0aC5taW4oUi5sZW5ndGgsWS5sZW5ndGgpLFIubGVuZ3RoIT09WS5sZW5ndGgm''@;'; put 'put ''JihyZT0xKSxXPS0xOysrVzx6OylyZXw9UltXXV5ZW1ddO3JldHVybiAwPT09cmV9fSwzMjI0MChmZSl7dmFyIGo9e30udG9TdHJpbmc7ZmUuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihoKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1qLmNhbGwoaCl9fSwyNjI0OChmZSxqLGgp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDMzMjI1KSxjPU9iamVjdC5rZXlzfHxmdW5jdGlvbihVKXt2YXIgSD1bXTtmb3IodmFyIFYgaW4gVSlILnB1c2goVik7cmV0dXJuIEh9O2ZlLmV4cG9ydHM9TDt2YXIgcz1PYmplY3QuY3JlYXRlKGgoMTU2MjIpKTtzLmluaGVyaXRzPWgoNTY2OTgpO3Zh''@;'; put 'put ''ciBBPWgoMzAyMDYpLHY9aCg3MzE0KTtzLmluaGVyaXRzKEwsQSk7Zm9yKHZhciBDPWModi5wcm90b3R5cGUpLHc9MDt3PEMubGVuZ3RoO3crKyl7dmFyIFM9Q1t3XTtMLnByb3RvdHlwZVtTXXx8KEwucHJvdG90eXBlW1NdPXYucHJvdG90eXBlW1NdKX1mdW5jdGlvbiBMKFUpe2lmKCEodGhp''@;'; put 'put ''cyBpbnN0YW5jZW9mIEwpKXJldHVybiBuZXcgTChVKTtBLmNhbGwodGhpcyxVKSx2LmNhbGwodGhpcyxVKSxVJiYhMT09PVUucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSxVJiYhMT09PVUud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSx0aGlzLmFsbG93SGFsZk9wZW49ITAsVSYm''@;'; put 'put ''ITE9PT1VLmFsbG93SGFsZk9wZW4mJih0aGlzLmFsbG93SGFsZk9wZW49ITEpLHRoaXMub25jZSgiZW5kIixSKX1mdW5jdGlvbiBSKCl7dGhpcy5hbGxvd0hhbGZPcGVufHx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHx5Lm5leHRUaWNrKHgsdGhpcyl9ZnVuY3Rpb24geChVKXtVLmVuZCgp''@;'; put 'put ''fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShMLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMLnByb3RvdHlw''@;'; put 'put ''ZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1''@;'; put 'put ''bmN0aW9uKFUpe3ZvaWQgMD09PXRoaXMuX3JlYWRhYmxlU3RhdGV8fHZvaWQgMD09PXRoaXMuX3dyaXRhYmxlU3RhdGV8fCh0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1VLHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPVUpfX0pLEwucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0''@;'; put 'put ''aW9uKFUsSCl7dGhpcy5wdXNoKG51bGwpLHRoaXMuZW5kKCkseS5uZXh0VGljayhILFUpfX0sNzUyNDIoZmUsaixoKXsidXNlIHN0cmljdCI7ZmUuZXhwb3J0cz1zO3ZhciB5PWgoODE4MTYpLGM9T2JqZWN0LmNyZWF0ZShoKDE1NjIyKSk7ZnVuY3Rpb24gcyhBKXtpZighKHRoaXMgaW5zdGFu''@;'; put 'put ''Y2VvZiBzKSlyZXR1cm4gbmV3IHMoQSk7eS5jYWxsKHRoaXMsQSl9Yy5pbmhlcml0cz1oKDU2Njk4KSxjLmluaGVyaXRzKHMseSkscy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihBLHYsQyl7QyhudWxsLEEpfX0sMzAyMDYoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg2NTYw''@;'; put 'put ''NiksYz1oKDMzMjI1KTtmZS5leHBvcnRzPXJlO3ZhciBBLHM9aCgzMjI0MCk7cmUuUmVhZGFibGVTdGF0ZT1xLGgoMzcwMDcpO3ZhciBDPWZ1bmN0aW9uKGFlLHhlKXtyZXR1cm4gYWUubGlzdGVuZXJzKHhlKS5sZW5ndGh9LHc9aCg1NTY3KSxTPWgoMjQxMTYpLkJ1ZmZlcixMPSh0eXBlb2Yg''@;'; put 'put ''aC5nPCJ1Ij9oLmc6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sVT1PYmplY3QuY3JlYXRlKGgoMTU2MjIpKTtVLmluaGVyaXRzPWgoNTY2OTgpO3ZhciBIPWgoOTI2NjgpLFY9dm9pZCAwO1Y9SCYmSC5k''@;'; put 'put ''ZWJ1Z2xvZz9ILmRlYnVnbG9nKCJzdHJlYW0iKTpmdW5jdGlvbigpe307dmFyIFksTj1oKDIwNjcyKSx6PWgoMzYyNzgpO1UuaW5oZXJpdHMocmUsdyk7dmFyIEY9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gcShhZSx4ZSl7dmFyIGplPXhl''@;'; put 'put ''IGluc3RhbmNlb2YoQT1BfHxoKDI2MjQ4KSk7dGhpcy5vYmplY3RNb2RlPSEhKGFlPWFlfHx7fSkub2JqZWN0TW9kZSxqZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhYWUucmVhZGFibGVPYmplY3RNb2RlKTt2YXIgQWU9YWUuaGlnaFdhdGVyTWFyayxEZT1hZS5yZWFk''@;'; put 'put ''YWJsZUhpZ2hXYXRlck1hcms7dGhpcy5oaWdoV2F0ZXJNYXJrPUFlfHwwPT09QWU/QWU6amUmJihEZXx8MD09PURlKT9EZTp0aGlzLm9iamVjdE1vZGU/MTY6MTYzODQsdGhpcy5oaWdoV2F0ZXJNYXJrPU1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmJ1ZmZlcj1uZXcgTix0''@;'; put 'put ''aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRh''@;'; put 'put ''YmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9YWUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlz''@;'; put 'put ''LmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsYWUuZW5jb2RpbmcmJihZfHwoWT1oKDY0MjcpLkkpLHRoaXMuZGVjb2Rlcj1uZXcgWShhZS5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1hZS5lbmNvZGluZyl9ZnVuY3Rpb24gcmUoYWUpe2lmKEE9QXx8aCgyNjI0OCksISh0aGlzIGlu''@;'; put 'put ''c3RhbmNlb2YgcmUpKXJldHVybiBuZXcgcmUoYWUpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IHEoYWUsdGhpcyksdGhpcy5yZWFkYWJsZT0hMCxhZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBhZS5yZWFkJiYodGhpcy5fcmVhZD1hZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgYWUuZGVzdHJv''@;'; put 'put ''eSYmKHRoaXMuX2Rlc3Ryb3k9YWUuZGVzdHJveSkpLHcuY2FsbCh0aGlzKX1mdW5jdGlvbiBtZShhZSx4ZSxqZSxBZSxEZSl7dmFyIGdlLEZlPWFlLl9yZWFkYWJsZVN0YXRlO3JldHVybiBudWxsPT09eGU/KEZlLnJlYWRpbmc9ITEsZnVuY3Rpb24gYihhZSx4ZSl7aWYoIXhlLmVuZGVkKXtp''@;'; put 'put ''Zih4ZS5kZWNvZGVyKXt2YXIgamU9eGUuZGVjb2Rlci5lbmQoKTtqZSYmamUubGVuZ3RoJiYoeGUuYnVmZmVyLnB1c2goamUpLHhlLmxlbmd0aCs9eGUub2JqZWN0TW9kZT8xOmplLmxlbmd0aCl9eGUuZW5kZWQ9ITAsayhhZSl9fShhZSxGZSkpOihEZXx8KGdlPWZ1bmN0aW9uIEllKGFlLHhl''@;'; put 'put ''KXt2YXIgamU7cmV0dXJuIWZ1bmN0aW9uIHgoYWUpe3JldHVybiBTLmlzQnVmZmVyKGFlKXx8YWUgaW5zdGFuY2VvZiBMfSh4ZSkmJiJzdHJpbmciIT10eXBlb2YgeGUmJnZvaWQgMCE9PXhlJiYhYWUub2JqZWN0TW9kZSYmKGplPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9i''@;'; put 'put ''dWZmZXIgY2h1bmsiKSksamV9KEZlLHhlKSksZ2U/YWUuZW1pdCgiZXJyb3IiLGdlKTpGZS5vYmplY3RNb2RlfHx4ZSYmeGUubGVuZ3RoPjA/KCJzdHJpbmciIT10eXBlb2YgeGUmJiFGZS5vYmplY3RNb2RlJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoeGUpIT09Uy5wcm90b3R5cGUmJih4ZT1m''@;'; put 'put ''dW5jdGlvbiBSKGFlKXtyZXR1cm4gUy5mcm9tKGFlKX0oeGUpKSxBZT9GZS5lbmRFbWl0dGVkP2FlLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IikpOkNlKGFlLEZlLHhlLCEwKTpGZS5lbmRlZD9hZS5lbWl0KCJlcnJvciIsbmV3IEVy''@;'; put 'put ''cm9yKCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpKTooRmUucmVhZGluZz0hMSxGZS5kZWNvZGVyJiYhamU/KHhlPUZlLmRlY29kZXIud3JpdGUoeGUpLEZlLm9iamVjdE1vZGV8fDAhPT14ZS5sZW5ndGg/Q2UoYWUsRmUseGUsITEpOkIoYWUsRmUpKTpDZShhZSxGZSx4ZSwhMSkpKTpBZXx8''@;'; put 'put ''KEZlLnJlYWRpbmc9ITEpKSxmdW5jdGlvbiBrZShhZSl7cmV0dXJuIWFlLmVuZGVkJiYoYWUubmVlZFJlYWRhYmxlfHxhZS5sZW5ndGg8YWUuaGlnaFdhdGVyTWFya3x8MD09PWFlLmxlbmd0aCl9KEZlKX1mdW5jdGlvbiBDZShhZSx4ZSxqZSxBZSl7eGUuZmxvd2luZyYmMD09PXhlLmxlbmd0''@;'; put 'put ''aCYmIXhlLnN5bmM/KGFlLmVtaXQoImRhdGEiLGplKSxhZS5yZWFkKDApKTooeGUubGVuZ3RoKz14ZS5vYmplY3RNb2RlPzE6amUubGVuZ3RoLEFlP3hlLmJ1ZmZlci51bnNoaWZ0KGplKTp4ZS5idWZmZXIucHVzaChqZSkseGUubmVlZFJlYWRhYmxlJiZrKGFlKSksQihhZSx4ZSl9ZnVuY3Rp''@;'; put 'put ''b24gZihhZSx4ZSl7cmV0dXJuIGFlPD0wfHwwPT09eGUubGVuZ3RoJiZ4ZS5lbmRlZD8wOnhlLm9iamVjdE1vZGU/MTphZSE9YWU/eGUuZmxvd2luZyYmeGUubGVuZ3RoP3hlLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOnhlLmxlbmd0aDooYWU+eGUuaGlnaFdhdGVyTWFyayYmKHhlLmhpZ2hX''@;'; put 'put ''YXRlck1hcms9ZnVuY3Rpb24gWChhZSl7cmV0dXJuIGFlPj04Mzg4NjA4P2FlPTgzODg2MDg6KGFlLS0sYWV8PWFlPj4+MSxhZXw9YWU+Pj4yLGFlfD1hZT4+PjQsYWV8PWFlPj4+OCxhZXw9YWU+Pj4xNixhZSsrKSxhZX0oYWUpKSxhZTw9eGUubGVuZ3RoP2FlOnhlLmVuZGVkP3hlLmxlbmd0''@;'; put 'put ''aDooeGUubmVlZFJlYWRhYmxlPSEwLDApKX1mdW5jdGlvbiBrKGFlKXt2YXIgeGU9YWUuX3JlYWRhYmxlU3RhdGU7eGUubmVlZFJlYWRhYmxlPSExLHhlLmVtaXR0ZWRSZWFkYWJsZXx8KFYoImVtaXRSZWFkYWJsZSIseGUuZmxvd2luZykseGUuZW1pdHRlZFJlYWRhYmxlPSEwLHhlLnN5bmM/''@;'; put 'put ''Yy5uZXh0VGljayhNLGFlKTpNKGFlKSl9ZnVuY3Rpb24gTShhZSl7VigiZW1pdCByZWFkYWJsZSIpLGFlLmVtaXQoInJlYWRhYmxlIiksdWUoYWUpfWZ1bmN0aW9uIEIoYWUseGUpe3hlLnJlYWRpbmdNb3JlfHwoeGUucmVhZGluZ01vcmU9ITAsYy5uZXh0VGljayhLLGFlLHhlKSl9ZnVuY3Rp''@;'; put 'put ''b24gSyhhZSx4ZSl7Zm9yKHZhciBqZT14ZS5sZW5ndGg7IXhlLnJlYWRpbmcmJiF4ZS5mbG93aW5nJiYheGUuZW5kZWQmJnhlLmxlbmd0aDx4ZS5oaWdoV2F0ZXJNYXJrJiYoVigibWF5YmVSZWFkTW9yZSByZWFkIDAiKSxhZS5yZWFkKDApLGplIT09eGUubGVuZ3RoKTspamU9eGUubGVuZ3Ro''@;'; put 'put ''O3hlLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIEQoYWUpe1YoInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLGFlLnJlYWQoMCl9ZnVuY3Rpb24gSShhZSx4ZSl7eGUucmVhZGluZ3x8KFYoInJlc3VtZSByZWFkIDAiKSxhZS5yZWFkKDApKSx4ZS5yZXN1bWVTY2hlZHVsZWQ9ITEseGUuYXdh''@;'; put 'put ''aXREcmFpbj0wLGFlLmVtaXQoInJlc3VtZSIpLHVlKGFlKSx4ZS5mbG93aW5nJiYheGUucmVhZGluZyYmYWUucmVhZCgwKX1mdW5jdGlvbiB1ZShhZSl7dmFyIHhlPWFlLl9yZWFkYWJsZVN0YXRlO2ZvcihWKCJmbG93Iix4ZS5mbG93aW5nKTt4ZS5mbG93aW5nJiZudWxsIT09YWUucmVhZCgp''@;'; put 'put ''Oyk7fWZ1bmN0aW9uIG5lKGFlLHhlKXtyZXR1cm4gMD09PXhlLmxlbmd0aD9udWxsOih4ZS5vYmplY3RNb2RlP2plPXhlLmJ1ZmZlci5zaGlmdCgpOiFhZXx8YWU+PXhlLmxlbmd0aD8oamU9eGUuZGVjb2Rlcj94ZS5idWZmZXIuam9pbigiIik6MT09PXhlLmJ1ZmZlci5sZW5ndGg/eGUuYnVm''@;'; put 'put ''ZmVyLmhlYWQuZGF0YTp4ZS5idWZmZXIuY29uY2F0KHhlLmxlbmd0aCkseGUuYnVmZmVyLmNsZWFyKCkpOmplPWZ1bmN0aW9uIF9lKGFlLHhlLGplKXt2YXIgQWU7cmV0dXJuIGFlPHhlLmhlYWQuZGF0YS5sZW5ndGg/KEFlPXhlLmhlYWQuZGF0YS5zbGljZSgwLGFlKSx4ZS5oZWFkLmRhdGE9''@;'; put 'put ''eGUuaGVhZC5kYXRhLnNsaWNlKGFlKSk6QWU9YWU9PT14ZS5oZWFkLmRhdGEubGVuZ3RoP3hlLnNoaWZ0KCk6amU/ZnVuY3Rpb24gUGUoYWUseGUpe3ZhciBqZT14ZS5oZWFkLEFlPTEsRGU9amUuZGF0YTtmb3IoYWUtPURlLmxlbmd0aDtqZT1qZS5uZXh0Oyl7dmFyIEZlPWplLmRhdGEsZ2U9''@;'; put 'put ''YWU+RmUubGVuZ3RoP0ZlLmxlbmd0aDphZTtpZihEZSs9Z2U9PT1GZS5sZW5ndGg/RmU6RmUuc2xpY2UoMCxhZSksMD09PShhZS09Z2UpKXtnZT09PUZlLmxlbmd0aD8oKytBZSx4ZS5oZWFkPWplLm5leHQ/amUubmV4dDp4ZS50YWlsPW51bGwpOih4ZS5oZWFkPWplLGplLmRhdGE9RmUuc2xp''@;'; put 'put ''Y2UoZ2UpKTticmVha30rK0FlfXJldHVybiB4ZS5sZW5ndGgtPUFlLERlfShhZSx4ZSk6ZnVuY3Rpb24gb3QoYWUseGUpe3ZhciBqZT1TLmFsbG9jVW5zYWZlKGFlKSxBZT14ZS5oZWFkLERlPTE7Zm9yKEFlLmRhdGEuY29weShqZSksYWUtPUFlLmRhdGEubGVuZ3RoO0FlPUFlLm5leHQ7KXt2''@;'; put 'put ''YXIgRmU9QWUuZGF0YSxnZT1hZT5GZS5sZW5ndGg/RmUubGVuZ3RoOmFlO2lmKEZlLmNvcHkoamUsamUubGVuZ3RoLWFlLDAsZ2UpLDA9PT0oYWUtPWdlKSl7Z2U9PT1GZS5sZW5ndGg/KCsrRGUseGUuaGVhZD1BZS5uZXh0P0FlLm5leHQ6eGUudGFpbD1udWxsKTooeGUuaGVhZD1BZSxBZS5k''@;'; put 'put ''YXRhPUZlLnNsaWNlKGdlKSk7YnJlYWt9KytEZX1yZXR1cm4geGUubGVuZ3RoLT1EZSxqZX0oYWUseGUpLEFlfShhZSx4ZS5idWZmZXIseGUuZGVjb2RlciksamUpO3ZhciBqZX1mdW5jdGlvbiBsdChhZSl7dmFyIHhlPWFlLl9yZWFkYWJsZVN0YXRlO2lmKHhlLmxlbmd0aD4wKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcignImVuZFJlYWRhYmxlKCkiIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFtJyk7eGUuZW5kRW1pdHRlZHx8KHhlLmVuZGVkPSEwLGMubmV4dFRpY2soZHQseGUsYWUpKX1mdW5jdGlvbiBkdChhZSx4ZSl7IWFlLmVuZEVtaXR0ZWQmJjA9PT1hZS5sZW5ndGgmJihhZS5lbmRFbWl0''@;'; put 'put ''dGVkPSEwLHhlLnJlYWRhYmxlPSExLHhlLmVtaXQoImVuZCIpKX1mdW5jdGlvbiBSZShhZSx4ZSl7Zm9yKHZhciBqZT0wLEFlPWFlLmxlbmd0aDtqZTxBZTtqZSsrKWlmKGFlW2plXT09PXhlKXJldHVybiBqZTtyZXR1cm4tMX1PYmplY3QuZGVmaW5lUHJvcGVydHkocmUucHJvdG90eXBlLCJk''@;'; put 'put ''ZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihhZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPWFl''@;'; put 'put ''KX19KSxyZS5wcm90b3R5cGUuZGVzdHJveT16LmRlc3Ryb3kscmUucHJvdG90eXBlLl91bmRlc3Ryb3k9ei51bmRlc3Ryb3kscmUucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGFlLHhlKXt0aGlzLnB1c2gobnVsbCkseGUoYWUpfSxyZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihhZSx4''@;'; put 'put ''ZSl7dmFyIEFlLGplPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIGplLm9iamVjdE1vZGU/QWU9ITA6InN0cmluZyI9PXR5cGVvZiBhZSYmKCh4ZT14ZXx8amUuZGVmYXVsdEVuY29kaW5nKSE9PWplLmVuY29kaW5nJiYoYWU9Uy5mcm9tKGFlLHhlKSx4ZT0iIiksQWU9ITApLG1lKHRoaXMs''@;'; put 'put ''YWUseGUsITEsQWUpfSxyZS5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihhZSl7cmV0dXJuIG1lKHRoaXMsYWUsbnVsbCwhMCwhMSl9LHJlLnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxyZS5wcm90b3R5cGUu''@;'; put 'put ''c2V0RW5jb2Rpbmc9ZnVuY3Rpb24oYWUpe3JldHVybiBZfHwoWT1oKDY0MjcpLkkpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1uZXcgWShhZSksdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz1hZSx0aGlzfSxyZS5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihhZSl7VigicmVhZCIs''@;'; put 'put ''YWUpLGFlPXBhcnNlSW50KGFlLDEwKTt2YXIgeGU9dGhpcy5fcmVhZGFibGVTdGF0ZSxqZT1hZTtpZigwIT09YWUmJih4ZS5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT1hZSYmeGUubmVlZFJlYWRhYmxlJiYoeGUubGVuZ3RoPj14ZS5oaWdoV2F0ZXJNYXJrfHx4ZS5lbmRlZCkpcmV0dXJuIFYo''@;'; put 'put ''InJlYWQ6IGVtaXRSZWFkYWJsZSIseGUubGVuZ3RoLHhlLmVuZGVkKSwwPT09eGUubGVuZ3RoJiZ4ZS5lbmRlZD9sdCh0aGlzKTprKHRoaXMpLG51bGw7aWYoMD09PShhZT1mKGFlLHhlKSkmJnhlLmVuZGVkKXJldHVybiAwPT09eGUubGVuZ3RoJiZsdCh0aGlzKSxudWxsO3ZhciBEZSxBZT14''@;'; put 'put ''ZS5uZWVkUmVhZGFibGU7cmV0dXJuIFYoIm5lZWQgcmVhZGFibGUiLEFlKSwoMD09PXhlLmxlbmd0aHx8eGUubGVuZ3RoLWFlPHhlLmhpZ2hXYXRlck1hcmspJiZWKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsQWU9ITApLHhlLmVuZGVkfHx4ZS5yZWFkaW5nP1YoInJlYWRpbmcgb3Ig''@;'; put 'put ''ZW5kZWQiLEFlPSExKTpBZSYmKFYoImRvIHJlYWQiKSx4ZS5yZWFkaW5nPSEwLHhlLnN5bmM9ITAsMD09PXhlLmxlbmd0aCYmKHhlLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZCh4ZS5oaWdoV2F0ZXJNYXJrKSx4ZS5zeW5jPSExLHhlLnJlYWRpbmd8fChhZT1mKGplLHhlKSkpLG51bGw9''@;'; put 'put ''PT0oRGU9YWU+MD9uZShhZSx4ZSk6bnVsbCk/KHhlLm5lZWRSZWFkYWJsZT0hMCxhZT0wKTp4ZS5sZW5ndGgtPWFlLDA9PT14ZS5sZW5ndGgmJih4ZS5lbmRlZHx8KHhlLm5lZWRSZWFkYWJsZT0hMCksamUhPT1hZSYmeGUuZW5kZWQmJmx0KHRoaXMpKSxudWxsIT09RGUmJnRoaXMuZW1pdCgi''@;'; put 'put ''ZGF0YSIsRGUpLERlfSxyZS5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oYWUpe3RoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigiX3JlYWQoKSBpcyBub3QgaW1wbGVtZW50ZWQiKSl9LHJlLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKGFlLHhlKXt2YXIgamU9dGhpcyxBZT10aGlzLl9yZWFk''@;'; put 'put ''YWJsZVN0YXRlO3N3aXRjaChBZS5waXBlc0NvdW50KXtjYXNlIDA6QWUucGlwZXM9YWU7YnJlYWs7Y2FzZSAxOkFlLnBpcGVzPVtBZS5waXBlcyxhZV07YnJlYWs7ZGVmYXVsdDpBZS5waXBlcy5wdXNoKGFlKX1BZS5waXBlc0NvdW50Kz0xLFYoInBpcGUgY291bnQ9JWQgb3B0cz0laiIsQWUu''@;'; put 'put ''cGlwZXNDb3VudCx4ZSk7dmFyIEZlPXhlJiYhMT09PXhlLmVuZHx8YWU9PT15LnN0ZG91dHx8YWU9PT15LnN0ZGVycj9HdDpjZTtmdW5jdGlvbiBjZSgpe1YoIm9uZW5kIiksYWUuZW5kKCl9QWUuZW5kRW1pdHRlZD9jLm5leHRUaWNrKEZlKTpqZS5vbmNlKCJlbmQiLEZlKSxhZS5vbigidW5w''@;'; put 'put ''aXBlIixmdW5jdGlvbiBnZShndCxYdCl7Vigib251bnBpcGUiKSxndD09PWplJiZYdCYmITE9PT1YdC5oYXNVbnBpcGVkJiYoWHQuaGFzVW5waXBlZD0hMCxmdW5jdGlvbiBKZSgpe1YoImNsZWFudXAiKSxhZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLFJ0KSxhZS5yZW1vdmVMaXN0ZW5lcigi''@;'; put 'put ''ZmluaXNoIixMdCksYWUucmVtb3ZlTGlzdGVuZXIoImRyYWluIixoZSksYWUucmVtb3ZlTGlzdGVuZXIoImVycm9yIiwkdCksYWUucmVtb3ZlTGlzdGVuZXIoInVucGlwZSIsZ2UpLGplLnJlbW92ZUxpc3RlbmVyKCJlbmQiLGNlKSxqZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixHdCksamUucmVt''@;'; put 'put ''b3ZlTGlzdGVuZXIoImRhdGEiLEtlKSx3ZT0hMCxBZS5hd2FpdERyYWluJiYoIWFlLl93cml0YWJsZVN0YXRlfHxhZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pJiZoZSgpfSgpKX0pO3ZhciBoZT1mdW5jdGlvbiBHKGFlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgeGU9YWUuX3JlYWRhYmxl''@;'; put 'put ''U3RhdGU7VigicGlwZU9uRHJhaW4iLHhlLmF3YWl0RHJhaW4pLHhlLmF3YWl0RHJhaW4mJnhlLmF3YWl0RHJhaW4tLSwwPT09eGUuYXdhaXREcmFpbiYmQyhhZSwiZGF0YSIpJiYoeGUuZmxvd2luZz0hMCx1ZShhZSkpfX0oamUpO2FlLm9uKCJkcmFpbiIsaGUpO3ZhciB3ZT0hMSx0dD0hMTtm''@;'; put 'put ''dW5jdGlvbiBLZShndCl7Vigib25kYXRhIiksdHQ9ITEsITE9PT1hZS53cml0ZShndCkmJiF0dCYmKCgxPT09QWUucGlwZXNDb3VudCYmQWUucGlwZXM9PT1hZXx8QWUucGlwZXNDb3VudD4xJiYtMSE9PVJlKEFlLnBpcGVzLGFlKSkmJiF3ZSYmKFYoImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBw''@;'; put 'put ''YXVzZSIsQWUuYXdhaXREcmFpbiksQWUuYXdhaXREcmFpbisrLHR0PSEwKSxqZS5wYXVzZSgpKX1mdW5jdGlvbiAkdChndCl7Vigib25lcnJvciIsZ3QpLEd0KCksYWUucmVtb3ZlTGlzdGVuZXIoImVycm9yIiwkdCksMD09PUMoYWUsImVycm9yIikmJmFlLmVtaXQoImVycm9yIixndCl9ZnVu''@;'; put 'put ''Y3Rpb24gUnQoKXthZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixMdCksR3QoKX1mdW5jdGlvbiBMdCgpe1YoIm9uZmluaXNoIiksYWUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixSdCksR3QoKX1mdW5jdGlvbiBHdCgpe1YoInVucGlwZSIpLGplLnVucGlwZShhZSl9cmV0dXJuIGplLm9uKCJk''@;'; put 'put ''YXRhIixLZSksZnVuY3Rpb24gVyhhZSx4ZSxqZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGFlLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gYWUucHJlcGVuZExpc3RlbmVyKHhlLGplKTthZS5fZXZlbnRzJiZhZS5fZXZlbnRzW3hlXT9zKGFlLl9ldmVudHNbeGVdKT9hZS5fZXZlbnRzW3hlXS51''@;'; put 'put ''bnNoaWZ0KGplKTphZS5fZXZlbnRzW3hlXT1bamUsYWUuX2V2ZW50c1t4ZV1dOmFlLm9uKHhlLGplKX0oYWUsImVycm9yIiwkdCksYWUub25jZSgiY2xvc2UiLFJ0KSxhZS5vbmNlKCJmaW5pc2giLEx0KSxhZS5lbWl0KCJwaXBlIixqZSksQWUuZmxvd2luZ3x8KFYoInBpcGUgcmVzdW1lIiks''@;'; put 'put ''amUucmVzdW1lKCkpLGFlfSxyZS5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKGFlKXt2YXIgeGU9dGhpcy5fcmVhZGFibGVTdGF0ZSxqZT17aGFzVW5waXBlZDohMX07aWYoMD09PXhlLnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09PXhlLnBpcGVzQ291bnQpcmV0dXJuIGFlJiZhZSE9''@;'; put 'put ''PXhlLnBpcGVzfHwoYWV8fChhZT14ZS5waXBlcykseGUucGlwZXM9bnVsbCx4ZS5waXBlc0NvdW50PTAseGUuZmxvd2luZz0hMSxhZSYmYWUuZW1pdCgidW5waXBlIix0aGlzLGplKSksdGhpcztpZighYWUpe3ZhciBBZT14ZS5waXBlcyxEZT14ZS5waXBlc0NvdW50O3hlLnBpcGVzPW51bGws''@;'; put 'put ''eGUucGlwZXNDb3VudD0wLHhlLmZsb3dpbmc9ITE7Zm9yKHZhciBGZT0wO0ZlPERlO0ZlKyspQWVbRmVdLmVtaXQoInVucGlwZSIsdGhpcyx7aGFzVW5waXBlZDohMX0pO3JldHVybiB0aGlzfXZhciBnZT1SZSh4ZS5waXBlcyxhZSk7cmV0dXJuLTE9PT1nZXx8KHhlLnBpcGVzLnNwbGljZShn''@;'; put 'put ''ZSwxKSx4ZS5waXBlc0NvdW50LT0xLDE9PT14ZS5waXBlc0NvdW50JiYoeGUucGlwZXM9eGUucGlwZXNbMF0pLGFlLmVtaXQoInVucGlwZSIsdGhpcyxqZSkpLHRoaXN9LHJlLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1yZS5wcm90b3R5cGUub249ZnVuY3Rpb24oYWUseGUpe3ZhciBqZT13LnBy''@;'; put 'put ''b3RvdHlwZS5vbi5jYWxsKHRoaXMsYWUseGUpO2lmKCJkYXRhIj09PWFlKSExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpO2Vsc2UgaWYoInJlYWRhYmxlIj09PWFlKXt2YXIgQWU9dGhpcy5fcmVhZGFibGVTdGF0ZTshQWUuZW5kRW1pdHRlZCYmIUFlLnJl''@;'; put 'put ''YWRhYmxlTGlzdGVuaW5nJiYoQWUucmVhZGFibGVMaXN0ZW5pbmc9QWUubmVlZFJlYWRhYmxlPSEwLEFlLmVtaXR0ZWRSZWFkYWJsZT0hMSxBZS5yZWFkaW5nP0FlLmxlbmd0aCYmayh0aGlzKTpjLm5leHRUaWNrKEQsdGhpcykpfXJldHVybiBqZX0scmUucHJvdG90eXBlLnJlc3VtZT1mdW5j''@;'; put 'put ''dGlvbigpe3ZhciBhZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBhZS5mbG93aW5nfHwoVigicmVzdW1lIiksYWUuZmxvd2luZz0hMCxmdW5jdGlvbiBwKGFlLHhlKXt4ZS5yZXN1bWVTY2hlZHVsZWR8fCh4ZS5yZXN1bWVTY2hlZHVsZWQ9ITAsYy5uZXh0VGljayhJLGFlLHhlKSl9KHRo''@;'; put 'put ''aXMsYWUpKSx0aGlzfSxyZS5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gVigiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoVigicGF1c2UiKSx0aGlzLl9yZWFkYWJs''@;'; put 'put ''ZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzfSxyZS5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihhZSl7dmFyIHhlPXRoaXMsamU9dGhpcy5fcmVhZGFibGVTdGF0ZSxBZT0hMTtmb3IodmFyIERlIGluIGFlLm9uKCJlbmQiLGZ1bmN0aW9uKCl7aWYoVigid3JhcHBl''@;'; put 'put ''ZCBlbmQiKSxqZS5kZWNvZGVyJiYhamUuZW5kZWQpe3ZhciBnZT1qZS5kZWNvZGVyLmVuZCgpO2dlJiZnZS5sZW5ndGgmJnhlLnB1c2goZ2UpfXhlLnB1c2gobnVsbCl9KSxhZS5vbigiZGF0YSIsZnVuY3Rpb24oZ2Upe1YoIndyYXBwZWQgZGF0YSIpLGplLmRlY29kZXImJihnZT1qZS5kZWNv''@;'; put 'put ''ZGVyLndyaXRlKGdlKSksamUub2JqZWN0TW9kZSYmbnVsbD09Z2V8fCEoamUub2JqZWN0TW9kZXx8Z2UmJmdlLmxlbmd0aCl8fHhlLnB1c2goZ2UpfHwoQWU9ITAsYWUucGF1c2UoKSl9KSxhZSl2b2lkIDA9PT10aGlzW0RlXSYmImZ1bmN0aW9uIj09dHlwZW9mIGFlW0RlXSYmKHRoaXNbRGVd''@;'; put 'put ''PWZ1bmN0aW9uKGdlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYWVbZ2VdLmFwcGx5KGFlLGFyZ3VtZW50cyl9fShEZSkpO2Zvcih2YXIgRmU9MDtGZTxGLmxlbmd0aDtGZSsrKWFlLm9uKEZbRmVdLHRoaXMuZW1pdC5iaW5kKHRoaXMsRltGZV0pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5j''@;'; put 'put ''dGlvbihnZSl7Vigid3JhcHBlZCBfcmVhZCIsZ2UpLEFlJiYoQWU9ITEsYWUucmVzdW1lKCkpfSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkocmUucHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9y''@;'; put 'put ''ZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSkscmUuX2Zyb21MaXN0PW5lfSw4MTgxNihmZSxqLGgpeyJ1c2Ugc3RyaWN0IjtmZS5leHBvcnRzPUE7dmFyIHk9aCgyNjI0OCksYz1PYmplY3QuY3JlYXRlKGgoMTU2MjIpKTtmdW5jdGlvbiBzKHcsUyl7dmFyIEw9dGhpcy5fdHJhbnNmb3Jt''@;'; put 'put ''U3RhdGU7TC50cmFuc2Zvcm1pbmc9ITE7dmFyIFI9TC53cml0ZWNiO2lmKCFSKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIndyaXRlIGNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIpKTtMLndyaXRlY2h1bms9bnVsbCxMLndyaXRlY2I9bnVsbCxudWxsIT1TJiZ0''@;'; put 'put ''aGlzLnB1c2goUyksUih3KTt2YXIgeD10aGlzLl9yZWFkYWJsZVN0YXRlO3gucmVhZGluZz0hMSwoeC5uZWVkUmVhZGFibGV8fHgubGVuZ3RoPHguaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoeC5oaWdoV2F0ZXJNYXJrKX1mdW5jdGlvbiBBKHcpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEEp''@;'; put 'put ''KXJldHVybiBuZXcgQSh3KTt5LmNhbGwodGhpcyx3KSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT17YWZ0ZXJUcmFuc2Zvcm06cy5iaW5kKHRoaXMpLG5lZWRUcmFuc2Zvcm06ITEsdHJhbnNmb3JtaW5nOiExLHdyaXRlY2I6bnVsbCx3cml0ZWNodW5rOm51bGwsd3JpdGVlbmNvZGluZzpudWxsfSx0''@;'; put 'put ''aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZT0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsdyYmKCJmdW5jdGlvbiI9PXR5cGVvZiB3LnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT13LnRyYW5zZm9ybSksImZ1bmN0aW9uIj09dHlwZW9mIHcuZmx1c2gmJih0aGlzLl9m''@;'; put 'put ''bHVzaD13LmZsdXNoKSksdGhpcy5vbigicHJlZmluaXNoIix2KX1mdW5jdGlvbiB2KCl7dmFyIHc9dGhpczsiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fZmx1c2g/dGhpcy5fZmx1c2goZnVuY3Rpb24oUyxMKXtDKHcsUyxMKX0pOkModGhpcyxudWxsLG51bGwpfWZ1bmN0aW9uIEModyxTLEwp''@;'; put 'put ''e2lmKFMpcmV0dXJuIHcuZW1pdCgiZXJyb3IiLFMpO2lmKG51bGwhPUwmJncucHVzaChMKSx3Ll93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiB3cy5sZW5ndGggIT0gMCIpO2lmKHcuX3RyYW5zZm9ybVN0YXRlLnRyYW5z''@;'; put 'put ''Zm9ybWluZyl0aHJvdyBuZXcgRXJyb3IoIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmciKTtyZXR1cm4gdy5wdXNoKG51bGwpfWMuaW5oZXJpdHM9aCg1NjY5OCksYy5pbmhlcml0cyhBLHkpLEEucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odyxTKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSx5LnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyx3LFMpfSxBLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHcsUyxMKXt0aHJvdyBuZXcgRXJyb3IoIl90cmFuc2Zvcm0oKSBpcyBub3QgaW1wbGVtZW50ZWQiKX0s''@;'; put 'put ''QS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHcsUyxMKXt2YXIgUj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihSLndyaXRlY2I9TCxSLndyaXRlY2h1bms9dyxSLndyaXRlZW5jb2Rpbmc9UywhUi50cmFuc2Zvcm1pbmcpe3ZhciB4PXRoaXMuX3JlYWRhYmxlU3RhdGU7KFIubmVlZFRyYW5z''@;'; put 'put ''Zm9ybXx8eC5uZWVkUmVhZGFibGV8fHgubGVuZ3RoPHguaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoeC5oaWdoV2F0ZXJNYXJrKX19LEEucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKHcpe3ZhciBTPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGwhPT1TLndyaXRlY2h1bmsmJlMud3JpdGVj''@;'; put 'put ''YiYmIVMudHJhbnNmb3JtaW5nPyhTLnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0oUy53cml0ZWNodW5rLFMud3JpdGVlbmNvZGluZyxTLmFmdGVyVHJhbnNmb3JtKSk6Uy5uZWVkVHJhbnNmb3JtPSEwfSxBLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbih3LFMpe3ZhciBMPXRo''@;'; put 'put ''aXM7eS5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLHcsZnVuY3Rpb24oUil7UyhSKSxMLmVtaXQoImNsb3NlIil9KX19LDczMTQoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg2NTYwNiksYz1oKDMzMjI1KTtmdW5jdGlvbiBBKHApe3ZhciBJPXRoaXM7dGhpcy5uZXh0PW51bGws''@;'; put 'put ''dGhpcy5lbnRyeT1udWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uIEQocCxJLHVlKXt2YXIgbmU9cC5lbnRyeTtmb3IocC5lbnRyeT1udWxsO25lOyl7dmFyIF9lPW5lLmNhbGxiYWNrO0kucGVuZGluZ2NiLS0sX2UodWUpLG5lPW5lLm5leHR9SS5jb3JrZWRSZXF1ZXN0c0Zy''@;'; put 'put ''ZWUubmV4dD1wfShJLHApfX1mZS5leHBvcnRzPUY7dmFyIEMsdj0heS5icm93c2VyJiZbInYwLjEwIiwidjAuOS4iXS5pbmRleE9mKHkudmVyc2lvbi5zbGljZSgwLDUpKT4tMT9zZXRJbW1lZGlhdGU6Yy5uZXh0VGljaztGLldyaXRhYmxlU3RhdGU9ejt2YXIgdz1PYmplY3QuY3JlYXRlKGgo''@;'; put 'put ''MTU2MjIpKTt3LmluaGVyaXRzPWgoNTY2OTgpO3ZhciBZLFM9e2RlcHJlY2F0ZTpoKDk0NjQzKX0sTD1oKDU1NjcpLFI9aCgyNDExNikuQnVmZmVyLHg9KHR5cGVvZiBoLmc8InUiP2guZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJy''@;'; put 'put ''YXl8fGZ1bmN0aW9uKCl7fSxWPWgoMzYyNzgpO2Z1bmN0aW9uIE4oKXt9ZnVuY3Rpb24geihwLEkpe0M9Q3x8aCgyNjI0OCk7dmFyIHVlPUkgaW5zdGFuY2VvZiBDO3RoaXMub2JqZWN0TW9kZT0hIShwPXB8fHt9KS5vYmplY3RNb2RlLHVlJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0''@;'; put 'put ''TW9kZXx8ISFwLndyaXRhYmxlT2JqZWN0TW9kZSk7dmFyIG5lPXAuaGlnaFdhdGVyTWFyayxfZT1wLndyaXRhYmxlSGlnaFdhdGVyTWFyazt0aGlzLmhpZ2hXYXRlck1hcms9bmV8fDA9PT1uZT9uZTp1ZSYmKF9lfHwwPT09X2UpP19lOnRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NCx0aGlzLmhp''@;'; put 'put ''Z2hXYXRlck1hcms9TWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVjb2RlU3RyaW5ncz0h''@;'; put 'put ''KCExPT09cC5kZWNvZGVTdHJpbmdzKSx0aGlzLmRlZmF1bHRFbmNvZGluZz1wLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9''@;'; put 'put ''ZnVuY3Rpb24obHQpeyFmdW5jdGlvbiBxZShwLEkpe3ZhciB1ZT1wLl93cml0YWJsZVN0YXRlLG5lPXVlLnN5bmMsX2U9dWUud3JpdGVjYjtpZihmdW5jdGlvbiBrZShwKXtwLndyaXRpbmc9ITEscC53cml0ZWNiPW51bGwscC5sZW5ndGgtPXAud3JpdGVsZW4scC53cml0ZWxlbj0wfSh1ZSks''@;'; put 'put ''SSkhZnVuY3Rpb24gSWUocCxJLHVlLG5lLF9lKXstLUkucGVuZGluZ2NiLHVlPyhjLm5leHRUaWNrKF9lLG5lKSxjLm5leHRUaWNrKEsscCxJKSxwLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxwLmVtaXQoImVycm9yIixuZSkpOihfZShuZSkscC5fd3JpdGFibGVTdGF0ZS5lcnJv''@;'; put 'put ''ckVtaXR0ZWQ9ITAscC5lbWl0KCJlcnJvciIsbmUpLEsocCxJKSl9KHAsdWUsbmUsSSxfZSk7ZWxzZXt2YXIgUGU9ayh1ZSk7IVBlJiYhdWUuY29ya2VkJiYhdWUuYnVmZmVyUHJvY2Vzc2luZyYmdWUuYnVmZmVyZWRSZXF1ZXN0JiZiKHAsdWUpLG5lP3YoWCxwLHVlLFBlLF9lKTpYKHAsdWUs''@;'; put 'put ''UGUsX2UpfX0oSSxsdCl9LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0''@;'; put 'put ''aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IEEodGhpcyl9ZnVuY3Rpb24gRihwKXtpZihDPUN8fGgoMjYyNDgpLCEoWS5jYWxsKEYsdGhpcyl8fHRoaXMgaW5zdGFuY2VvZiBDKSlyZXR1cm4gbmV3IEYocCk7dGhpcy5fd3JpdGFibGVTdGF0''@;'; put 'put ''ZT1uZXcgeihwLHRoaXMpLHRoaXMud3JpdGFibGU9ITAscCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBwLndyaXRlJiYodGhpcy5fd3JpdGU9cC53cml0ZSksImZ1bmN0aW9uIj09dHlwZW9mIHAud3JpdGV2JiYodGhpcy5fd3JpdGV2PXAud3JpdGV2KSwiZnVuY3Rpb24iPT10eXBlb2YgcC5kZXN0''@;'; put 'put ''cm95JiYodGhpcy5fZGVzdHJveT1wLmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiBwLmZpbmFsJiYodGhpcy5fZmluYWw9cC5maW5hbCkpLEwuY2FsbCh0aGlzKX1mdW5jdGlvbiBDZShwLEksdWUsbmUsX2UsUGUsb3Qpe0kud3JpdGVsZW49bmUsSS53cml0ZWNiPW90LEkud3JpdGluZz0h''@;'; put 'put ''MCxJLnN5bmM9ITAsdWU/cC5fd3JpdGV2KF9lLEkub253cml0ZSk6cC5fd3JpdGUoX2UsUGUsSS5vbndyaXRlKSxJLnN5bmM9ITF9ZnVuY3Rpb24gWChwLEksdWUsbmUpe3VlfHxmdW5jdGlvbiBmKHAsSSl7MD09PUkubGVuZ3RoJiZJLm5lZWREcmFpbiYmKEkubmVlZERyYWluPSExLHAuZW1p''@;'; put 'put ''dCgiZHJhaW4iKSl9KHAsSSksSS5wZW5kaW5nY2ItLSxuZSgpLEsocCxJKX1mdW5jdGlvbiBiKHAsSSl7SS5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciB1ZT1JLmJ1ZmZlcmVkUmVxdWVzdDtpZihwLl93cml0ZXYmJnVlJiZ1ZS5uZXh0KXt2YXIgX2U9bmV3IEFycmF5KEkuYnVmZmVyZWRSZXF1''@;'; put 'put ''ZXN0Q291bnQpLFBlPUkuY29ya2VkUmVxdWVzdHNGcmVlO1BlLmVudHJ5PXVlO2Zvcih2YXIgb3Q9MCxsdD0hMDt1ZTspX2Vbb3RdPXVlLHVlLmlzQnVmfHwobHQ9ITEpLHVlPXVlLm5leHQsb3QrPTE7X2UuYWxsQnVmZmVycz1sdCxDZShwLEksITAsSS5sZW5ndGgsX2UsIiIsUGUuZmluaXNo''@;'; put 'put ''KSxJLnBlbmRpbmdjYisrLEkubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLFBlLm5leHQ/KEkuY29ya2VkUmVxdWVzdHNGcmVlPVBlLm5leHQsUGUubmV4dD1udWxsKTpJLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgQShJKSxJLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO3VlOyl7''@;'; put 'put ''dmFyIGR0PXVlLmNodW5rO2lmKENlKHAsSSwhMSxJLm9iamVjdE1vZGU/MTpkdC5sZW5ndGgsZHQsdWUuZW5jb2RpbmcsdWUuY2FsbGJhY2spLHVlPXVlLm5leHQsSS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLEkud3JpdGluZylicmVha31udWxsPT09dWUmJihJLmxhc3RCdWZmZXJlZFJlcXVl''@;'; put 'put ''c3Q9bnVsbCl9SS5idWZmZXJlZFJlcXVlc3Q9dWUsSS5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIGsocCl7cmV0dXJuIHAuZW5kaW5nJiYwPT09cC5sZW5ndGgmJm51bGw9PT1wLmJ1ZmZlcmVkUmVxdWVzdCYmIXAuZmluaXNoZWQmJiFwLndyaXRpbmd9ZnVuY3Rpb24gTShwLEkpe3Au''@;'; put 'put ''X2ZpbmFsKGZ1bmN0aW9uKHVlKXtJLnBlbmRpbmdjYi0tLHVlJiZwLmVtaXQoImVycm9yIix1ZSksSS5wcmVmaW5pc2hlZD0hMCxwLmVtaXQoInByZWZpbmlzaCIpLEsocCxJKX0pfWZ1bmN0aW9uIEsocCxJKXt2YXIgdWU9ayhJKTtyZXR1cm4gdWUmJihmdW5jdGlvbiBCKHAsSSl7IUkucHJl''@;'; put 'put ''ZmluaXNoZWQmJiFJLmZpbmFsQ2FsbGVkJiYoImZ1bmN0aW9uIj09dHlwZW9mIHAuX2ZpbmFsPyhJLnBlbmRpbmdjYisrLEkuZmluYWxDYWxsZWQ9ITAsYy5uZXh0VGljayhNLHAsSSkpOihJLnByZWZpbmlzaGVkPSEwLHAuZW1pdCgicHJlZmluaXNoIikpKX0ocCxJKSwwPT09SS5wZW5kaW5n''@;'; put 'put ''Y2ImJihJLmZpbmlzaGVkPSEwLHAuZW1pdCgiZmluaXNoIikpKSx1ZX13LmluaGVyaXRzKEYsTCksei5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBJPXRoaXMuYnVmZmVyZWRSZXF1ZXN0LHVlPVtdO0k7KXVlLnB1c2goSSksST1JLm5leHQ7cmV0dXJuIHVlfSxmdW5j''@;'; put 'put ''dGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsImJ1ZmZlciIse2dldDpTLmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5n''@;'; put 'put ''ZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhZPUZ1bmN0aW9uLnByb3Rv''@;'; put 'put ''dHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24ocCl7cmV0dXJuISFZLmNhbGwodGhpcyxwKXx8dGhpcz09PUYmJnAmJnAuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiB6fX0pKTpZPWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2YgdGhpc30sRi5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe3RoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpKX0sRi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24ocCxJLHVlKXt2YXIgbmU9dGhp''@;'; put 'put ''cy5fd3JpdGFibGVTdGF0ZSxfZT0hMSxQZT0hbmUub2JqZWN0TW9kZSYmZnVuY3Rpb24gSChwKXtyZXR1cm4gUi5pc0J1ZmZlcihwKXx8cCBpbnN0YW5jZW9mIHh9KHApO3JldHVybiBQZSYmIVIuaXNCdWZmZXIocCkmJihwPWZ1bmN0aW9uIFUocCl7cmV0dXJuIFIuZnJvbShwKX0ocCkpLCJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBJJiYodWU9SSxJPW51bGwpLFBlP0k9ImJ1ZmZlciI6SXx8KEk9bmUuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24iIT10eXBlb2YgdWUmJih1ZT1OKSxuZS5lbmRlZD9mdW5jdGlvbiBXKHAsSSl7dmFyIHVlPW5ldyBFcnJvcigid3JpdGUgYWZ0ZXIgZW5kIik7''@;'; put 'put ''cC5lbWl0KCJlcnJvciIsdWUpLGMubmV4dFRpY2soSSx1ZSl9KHRoaXMsdWUpOihQZXx8ZnVuY3Rpb24gcShwLEksdWUsbmUpe3ZhciBfZT0hMCxQZT0hMTtyZXR1cm4gbnVsbD09PXVlP1BlPW5ldyBUeXBlRXJyb3IoIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIik6InN0''@;'; put 'put ''cmluZyIhPXR5cGVvZiB1ZSYmdm9pZCAwIT09dWUmJiFJLm9iamVjdE1vZGUmJihQZT1uZXcgVHlwZUVycm9yKCJJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rIikpLFBlJiYocC5lbWl0KCJlcnJvciIsUGUpLGMubmV4dFRpY2sobmUsUGUpLF9lPSExKSxfZX0odGhpcyxuZSxwLHVl''@;'; put 'put ''KSkmJihuZS5wZW5kaW5nY2IrKyxfZT1mdW5jdGlvbiBtZShwLEksdWUsbmUsX2UsUGUpe2lmKCF1ZSl7dmFyIG90PWZ1bmN0aW9uIHJlKHAsSSx1ZSl7cmV0dXJuIXAub2JqZWN0TW9kZSYmITEhPT1wLmRlY29kZVN0cmluZ3MmJiJzdHJpbmciPT10eXBlb2YgSSYmKEk9Ui5mcm9tKEksdWUp''@;'; put 'put ''KSxJfShJLG5lLF9lKTtuZSE9PW90JiYodWU9ITAsX2U9ImJ1ZmZlciIsbmU9b3QpfXZhciBsdD1JLm9iamVjdE1vZGU/MTpuZS5sZW5ndGg7SS5sZW5ndGgrPWx0O3ZhciBkdD1JLmxlbmd0aDxJLmhpZ2hXYXRlck1hcms7aWYoZHR8fChJLm5lZWREcmFpbj0hMCksSS53cml0aW5nfHxJLmNv''@;'; put 'put ''cmtlZCl7dmFyIFJlPUkubGFzdEJ1ZmZlcmVkUmVxdWVzdDtJLmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rOm5lLGVuY29kaW5nOl9lLGlzQnVmOnVlLGNhbGxiYWNrOlBlLG5leHQ6bnVsbH0sUmU/UmUubmV4dD1JLmxhc3RCdWZmZXJlZFJlcXVlc3Q6SS5idWZmZXJlZFJlcXVlc3Q9SS5s''@;'; put 'put ''YXN0QnVmZmVyZWRSZXF1ZXN0LEkuYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSBDZShwLEksITEsbHQsbmUsX2UsUGUpO3JldHVybiBkdH0odGhpcyxuZSxQZSxwLEksdWUpKSxfZX0sRi5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9''@;'; put 'put ''LEYucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciBwPXRoaXMuX3dyaXRhYmxlU3RhdGU7cC5jb3JrZWQmJihwLmNvcmtlZC0tLCFwLndyaXRpbmcmJiFwLmNvcmtlZCYmIXAuYnVmZmVyUHJvY2Vzc2luZyYmcC5idWZmZXJlZFJlcXVlc3QmJmIodGhpcyxwKSl9LEYucHJvdG90eXBl''@;'; put 'put ''LnNldERlZmF1bHRFbmNvZGluZz1mdW5jdGlvbihJKXtpZigic3RyaW5nIj09dHlwZW9mIEkmJihJPUkudG9Mb3dlckNhc2UoKSksIShbImhleCIsInV0ZjgiLCJ1dGYtOCIsImFzY2lpIiwiYmluYXJ5IiwiYmFzZTY0IiwidWNzMiIsInVjcy0yIiwidXRmMTZsZSIsInV0Zi0xNmxlIiwicmF3''@;'; put 'put ''Il0uaW5kZXhPZigoSSsiIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrSSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPUksdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KEYucHJvdG90eXBl''@;'; put 'put ''LCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksRi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHAsSSx1ZSl7dWUobmV3IEVycm9yKCJfd3JpdGUoKSBpcyBub3Qg''@;'; put 'put ''aW1wbGVtZW50ZWQiKSl9LEYucHJvdG90eXBlLl93cml0ZXY9bnVsbCxGLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24ocCxJLHVlKXt2YXIgbmU9dGhpcy5fd3JpdGFibGVTdGF0ZTsiZnVuY3Rpb24iPT10eXBlb2YgcD8odWU9cCxwPW51bGwsST1udWxsKToiZnVuY3Rpb24iPT10eXBlb2YgSSYm''@;'; put 'put ''KHVlPUksST1udWxsKSxudWxsIT1wJiZ0aGlzLndyaXRlKHAsSSksbmUuY29ya2VkJiYobmUuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksbmUuZW5kaW5nfHxmdW5jdGlvbiBHKHAsSSx1ZSl7SS5lbmRpbmc9ITAsSyhwLEkpLHVlJiYoSS5maW5pc2hlZD9jLm5leHRUaWNrKHVlKTpwLm9uY2Uo''@;'; put 'put ''ImZpbmlzaCIsdWUpKSxJLmVuZGVkPSEwLHAud3JpdGFibGU9ITF9KHRoaXMsbmUsdWUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJs''@;'; put 'put ''ZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKHApe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1wKX19KSxGLnByb3RvdHlwZS5kZXN0cm95PVYuZGVzdHJveSxGLnByb3RvdHlwZS5fdW5kZXN0cm95PVYudW5kZXN0cm95LEYucHJvdG90''@;'; put 'put ''eXBlLl9kZXN0cm95PWZ1bmN0aW9uKHAsSSl7dGhpcy5lbmQoKSxJKHApfX0sMjA2NzIoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIGM9aCgyNDExNikuQnVmZmVyLHM9aCgyMTYzOCk7ZnVuY3Rpb24gQSh2LEMsdyl7di5jb3B5KEMsdyl9ZmUuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9u''@;'; put 'put ''IHYoKXsoZnVuY3Rpb24geSh2LEMpe2lmKCEodiBpbnN0YW5jZW9mIEMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyx2KSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXJldHVybiB2LnBy''@;'; put 'put ''b3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHcpe3ZhciBTPXtkYXRhOncsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PVM6dGhpcy5oZWFkPVMsdGhpcy50YWlsPVMsKyt0aGlzLmxlbmd0aH0sdi5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbih3KXt2YXIgUz17ZGF0YTp3''@;'; put 'put ''LG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9UyksdGhpcy5oZWFkPVMsKyt0aGlzLmxlbmd0aH0sdi5wcm90b3R5cGUuc2hpZnQ9ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciB3PXRoaXMuaGVhZC5kYXRhO3JldHVybiB0aGlzLmhlYWQ9MT09''@;'; put 'put ''PXRoaXMubGVuZ3RoP3RoaXMudGFpbD1udWxsOnRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsd319LHYucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9LHYucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24odyl7aWYoMD09''@;'; put 'put ''PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgUz10aGlzLmhlYWQsTD0iIitTLmRhdGE7Uz1TLm5leHQ7KUwrPXcrUy5kYXRhO3JldHVybiBMfSx2LnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24odyl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBjLmFsbG9jKDApO2Zvcih2YXIgUz1j''@;'; put 'put ''LmFsbG9jVW5zYWZlKHc+Pj4wKSxMPXRoaXMuaGVhZCxSPTA7TDspQShMLmRhdGEsUyxSKSxSKz1MLmRhdGEubGVuZ3RoLEw9TC5uZXh0O3JldHVybiBTfSx2fSgpLHMmJnMuaW5zcGVjdCYmcy5pbnNwZWN0LmN1c3RvbSYmKGZlLmV4cG9ydHMucHJvdG90eXBlW3MuaW5zcGVjdC5jdXN0b21d''@;'; put 'put ''PWZ1bmN0aW9uKCl7dmFyIHY9cy5pbnNwZWN0KHtsZW5ndGg6dGhpcy5sZW5ndGh9KTtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lKyIgIit2fSl9LDM2Mjc4KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoMzMyMjUpO2Z1bmN0aW9uIEEodixDKXt2LmVtaXQoImVycm9yIixDKX1m''@;'; put 'put ''ZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uIGModixDKXt2YXIgdz10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ/KEM/Qyh2KTp2''@;'; put 'put ''JiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHkubmV4dFRpY2soQSx0aGlzLHYpKTp5Lm5leHRUaWNrKEEsdGhpcyx2KSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUm''@;'; put 'put ''Jih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KHZ8fG51bGwsZnVuY3Rpb24oUil7IUMmJlI/dy5fd3JpdGFibGVTdGF0ZT93Ll93cml0YWJsZVN0YXRl''@;'; put 'put ''LmVycm9yRW1pdHRlZHx8KHcuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHkubmV4dFRpY2soQSx3LFIpKTp5Lm5leHRUaWNrKEEsdyxSKTpDJiZDKFIpfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbiBzKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3Rh''@;'; put 'put ''dGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEx''@;'; put 'put ''LHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhp''@;'; put 'put ''cy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfX19LDU1NjcoZmUsaixoKXtmZS5leHBvcnRzPWgoMzcwMDcpLkV2ZW50RW1pdHRlcn0sMjQxMTYoZmUsaixoKXt2YXIgeT1oKDQ4Mjg3KSxjPXkuQnVmZmVyO2Z1bmN0aW9uIHModixDKXtmb3IodmFyIHcgaW4gdilDW3ddPXZbd119''@;'; put 'put ''ZnVuY3Rpb24gQSh2LEMsdyl7cmV0dXJuIGModixDLHcpfWMuZnJvbSYmYy5hbGxvYyYmYy5hbGxvY1Vuc2FmZSYmYy5hbGxvY1Vuc2FmZVNsb3c/ZmUuZXhwb3J0cz15OihzKHksaiksai5CdWZmZXI9QSkscyhjLEEpLEEuZnJvbT1mdW5jdGlvbih2LEMsdyl7aWYoIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiB2KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIGModixDLHcpfSxBLmFsbG9jPWZ1bmN0aW9uKHYsQyx3KXtpZigibnVtYmVyIiE9dHlwZW9mIHYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJl''@;'; put 'put ''ciIpO3ZhciBTPWModik7cmV0dXJuIHZvaWQgMCE9PUM/InN0cmluZyI9PXR5cGVvZiB3P1MuZmlsbChDLHcpOlMuZmlsbChDKTpTLmZpbGwoMCksU30sQS5hbGxvY1Vuc2FmZT1mdW5jdGlvbih2KXtpZigibnVtYmVyIiE9dHlwZW9mIHYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQg''@;'; put 'put ''bXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBjKHYpfSxBLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih2KXtpZigibnVtYmVyIiE9dHlwZW9mIHYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiB5LlNsb3dCdWZmZXIodil9fSw0NjczNyhm''@;'; put 'put ''ZSxqLGgpeyhqPWZlLmV4cG9ydHM9aCgzMDIwNikpLlN0cmVhbT1qLGouUmVhZGFibGU9aixqLldyaXRhYmxlPWgoNzMxNCksai5EdXBsZXg9aCgyNjI0OCksai5UcmFuc2Zvcm09aCg4MTgxNiksai5QYXNzVGhyb3VnaD1oKDc1MjQyKX0sNjQyNyhmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''eT1oKDg4MzkzKS5CdWZmZXIsYz15LmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKEYpe3N3aXRjaCgoRj0iIitGKSYmRi50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2Fz''@;'; put 'put ''ZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0aW9uIHYoRil7dmFyIFc7c3dpdGNoKHRoaXMuZW5jb2Rpbmc9ZnVuY3Rpb24gQShGKXt2YXIgVz1mdW5jdGlvbiBzKEYpe2lmKCFGKXJldHVybiJ1''@;'; put 'put ''dGY4Ijtmb3IodmFyIFc7Oylzd2l0Y2goRil7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJs''@;'; put 'put ''YXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIEY7ZGVmYXVsdDppZihXKXJldHVybjtGPSgiIitGKS50b0xvd2VyQ2FzZSgpLFc9ITB9fShGKTtpZigic3RyaW5nIiE9dHlwZW9mIFcmJih5LmlzRW5jb2Rpbmc9PT1jfHwhYyhGKSkpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0YpO3JldHVybiBXfHxGfShGKSx0aGlzLmVuY29kaW5nKXtjYXNlInV0ZjE2bGUiOnRoaXMudGV4dD1VLHRoaXMuZW5kPUgsVz00O2JyZWFrO2Nhc2UidXRmOCI6dGhpcy5maWxsTGFzdD1MLFc9NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0''@;'; put 'put ''PVYsdGhpcy5lbmQ9TixXPTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy53cml0ZT16LHZvaWQodGhpcy5lbmQ9WSl9dGhpcy5sYXN0TmVlZD0wLHRoaXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj15LmFsbG9jVW5zYWZlKFcpfWZ1bmN0aW9uIEMoRil7cmV0dXJuIEY8PTEyNz8wOkY+''@;'; put 'put ''PjU9PTY/MjpGPj40PT0xND8zOkY+PjM9PTMwPzQ6Rj4+Nj09Mj8tMTotMn1mdW5jdGlvbiBMKEYpe3ZhciBXPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQscT1mdW5jdGlvbiBTKEYsVyl7aWYoMTI4IT0oMTkyJldbMF0pKXJldHVybiBGLmxhc3ROZWVkPTAsIlx1ZmZmZCI7aWYoRi5s''@;'; put 'put ''YXN0TmVlZD4xJiZXLmxlbmd0aD4xKXtpZigxMjghPSgxOTImV1sxXSkpcmV0dXJuIEYubGFzdE5lZWQ9MSwiXHVmZmZkIjtpZihGLmxhc3ROZWVkPjImJlcubGVuZ3RoPjImJjEyOCE9KDE5MiZXWzJdKSlyZXR1cm4gRi5sYXN0TmVlZD0yLCJcdWZmZmQifX0odGhpcyxGKTtyZXR1cm4gdm9p''@;'; put 'put ''ZCAwIT09cT9xOnRoaXMubGFzdE5lZWQ8PUYubGVuZ3RoPyhGLmNvcHkodGhpcy5sYXN0Q2hhcixXLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpKTooRi5jb3B5KHRoaXMubGFzdENoYXIsVywwLEYubGVuZ3Ro''@;'; put 'put ''KSx2b2lkKHRoaXMubGFzdE5lZWQtPUYubGVuZ3RoKSl9ZnVuY3Rpb24gVShGLFcpe2lmKChGLmxlbmd0aC1XKSUyPT0wKXt2YXIgcT1GLnRvU3RyaW5nKCJ1dGYxNmxlIixXKTtpZihxKXt2YXIgcmU9cS5jaGFyQ29kZUF0KHEubGVuZ3RoLTEpO2lmKHJlPj01NTI5NiYmcmU8PTU2MzE5KXJl''@;'; put 'put ''dHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPUZbRi5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1GW0YubGVuZ3RoLTFdLHEuc2xpY2UoMCwtMSl9cmV0dXJuIHF9cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRo''@;'; put 'put ''aXMubGFzdENoYXJbMF09RltGLmxlbmd0aC0xXSxGLnRvU3RyaW5nKCJ1dGYxNmxlIixXLEYubGVuZ3RoLTEpfWZ1bmN0aW9uIEgoRil7dmFyIFc9RiYmRi5sZW5ndGg/dGhpcy53cml0ZShGKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9XK3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2''@;'; put 'put ''bGUiLDAsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCk6V31mdW5jdGlvbiBWKEYsVyl7dmFyIHE9KEYubGVuZ3RoLVcpJTM7cmV0dXJuIDA9PT1xP0YudG9TdHJpbmcoImJhc2U2NCIsVyk6KHRoaXMubGFzdE5lZWQ9My1xLHRoaXMubGFzdFRvdGFsPTMsMT09PXE/dGhpcy5sYXN0Q2hh''@;'; put 'put ''clswXT1GW0YubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPUZbRi5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1GW0YubGVuZ3RoLTFdKSxGLnRvU3RyaW5nKCJiYXNlNjQiLFcsRi5sZW5ndGgtcSkpfWZ1bmN0aW9uIE4oRil7dmFyIFc9RiYmRi5sZW5ndGg/dGhpcy53cml0ZShGKToi''@;'; put 'put ''IjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9XK3RoaXMubGFzdENoYXIudG9TdHJpbmcoImJhc2U2NCIsMCwzLXRoaXMubGFzdE5lZWQpOld9ZnVuY3Rpb24geihGKXtyZXR1cm4gRi50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBZKEYpe3JldHVybiBGJiZGLmxlbmd0aD90aGlzLndy''@;'; put 'put ''aXRlKEYpOiIifWouST12LHYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEYpe2lmKDA9PT1GLmxlbmd0aClyZXR1cm4iIjt2YXIgVyxxO2lmKHRoaXMubGFzdE5lZWQpe2lmKHZvaWQgMD09PShXPXRoaXMuZmlsbExhc3QoRikpKXJldHVybiIiO3E9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3RO''@;'; put 'put ''ZWVkPTB9ZWxzZSBxPTA7cmV0dXJuIHE8Ri5sZW5ndGg/Vz9XK3RoaXMudGV4dChGLHEpOnRoaXMudGV4dChGLHEpOld8fCIifSx2LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24geChGKXt2YXIgVz1GJiZGLmxlbmd0aD90aGlzLndyaXRlKEYpOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP1crIlx1''@;'; put 'put ''ZmZmZCI6V30sdi5wcm90b3R5cGUudGV4dD1mdW5jdGlvbiBSKEYsVyl7dmFyIHE9ZnVuY3Rpb24gdyhGLFcscSl7dmFyIHJlPVcubGVuZ3RoLTE7aWYocmU8cSlyZXR1cm4gMDt2YXIgbWU9QyhXW3JlXSk7cmV0dXJuIG1lPj0wPyhtZT4wJiYoRi5sYXN0TmVlZD1tZS0xKSxtZSk6LS1yZTxx''@;'; put 'put ''fHwtMj09PW1lPzA6KG1lPUMoV1tyZV0pKT49MD8obWU+MCYmKEYubGFzdE5lZWQ9bWUtMiksbWUpOi0tcmU8cXx8LTI9PT1tZT8wOihtZT1DKFdbcmVdKSk+PTA/KG1lPjAmJigyPT09bWU/bWU9MDpGLmxhc3ROZWVkPW1lLTMpLG1lKTowfSh0aGlzLEYsVyk7aWYoIXRoaXMubGFzdE5lZWQp''@;'; put 'put ''cmV0dXJuIEYudG9TdHJpbmcoInV0ZjgiLFcpO3RoaXMubGFzdFRvdGFsPXE7dmFyIHJlPUYubGVuZ3RoLShxLXRoaXMubGFzdE5lZWQpO3JldHVybiBGLmNvcHkodGhpcy5sYXN0Q2hhciwwLHJlKSxGLnRvU3RyaW5nKCJ1dGY4IixXLHJlKX0sdi5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rp''@;'; put 'put ''b24oRil7aWYodGhpcy5sYXN0TmVlZDw9Ri5sZW5ndGgpcmV0dXJuIEYuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7Ri5j''@;'; put 'put ''b3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLEYubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT1GLmxlbmd0aH19LDg4MzkzKGZlLGosaCl7dmFyIHk9aCg0ODI4NyksYz15LkJ1ZmZlcjtmdW5jdGlvbiBzKHYsQyl7Zm9yKHZhciB3IGluIHYpQ1t3XT12W3dd''@;'; put 'put ''fWZ1bmN0aW9uIEEodixDLHcpe3JldHVybiBjKHYsQyx3KX1jLmZyb20mJmMuYWxsb2MmJmMuYWxsb2NVbnNhZmUmJmMuYWxsb2NVbnNhZmVTbG93P2ZlLmV4cG9ydHM9eToocyh5LGopLGouQnVmZmVyPUEpLHMoYyxBKSxBLmZyb209ZnVuY3Rpb24odixDLHcpe2lmKCJudW1iZXIiPT10eXBl''@;'; put 'put ''b2Ygdil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBjKHYsQyx3KX0sQS5hbGxvYz1mdW5jdGlvbih2LEMsdyl7aWYoIm51bWJlciIhPXR5cGVvZiB2KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1i''@;'; put 'put ''ZXIiKTt2YXIgUz1jKHYpO3JldHVybiB2b2lkIDAhPT1DPyJzdHJpbmciPT10eXBlb2Ygdz9TLmZpbGwoQyx3KTpTLmZpbGwoQyk6Uy5maWxsKDApLFN9LEEuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odil7aWYoIm51bWJlciIhPXR5cGVvZiB2KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50''@;'; put 'put ''IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gYyh2KX0sQS5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odil7aWYoIm51bWJlciIhPXR5cGVvZiB2KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4geS5TbG93QnVmZmVyKHYpfX0sMzAyOTUo''@;'; put 'put ''ZmUsaixoKXt2YXIgeT1oKDQ4Mjg3KS5CdWZmZXI7ZmUuZXhwb3J0cz1mdW5jdGlvbihzLEEpe2Zvcih2YXIgdj1NYXRoLm1pbihzLmxlbmd0aCxBLmxlbmd0aCksQz1uZXcgeSh2KSx3PTA7dzx2OysrdylDW3ddPXNbd11eQVt3XTtyZXR1cm4gQ319LDQ4Mjg3KGZlLGosaCl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciB5PWgoNjc1MjYpLGM9aCgyNTEpLHM9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKTpudWxsO2ouQnVmZmVyPXcsai5TbG93QnVmZmVyPWZ1bmN0aW9u''@;'; put 'put ''IEYoZ2Upe3JldHVybitnZSE9Z2UmJihnZT0wKSx3LmFsbG9jKCtnZSl9LGouSU5TUEVDVF9NQVhfQllURVM9NTA7dmFyIEE9MjE0NzQ4MzY0NztmdW5jdGlvbiBDKGdlKXtpZihnZT5BKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrZ2UrJyIgaXMgaW52YWxpZCBmb3Igb3B0''@;'; put 'put ''aW9uICJzaXplIicpO3ZhciBjZT1uZXcgVWludDhBcnJheShnZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihjZSx3LnByb3RvdHlwZSksY2V9ZnVuY3Rpb24gdyhnZSxjZSxoZSl7aWYoIm51bWJlciI9PXR5cGVvZiBnZSl7aWYoInN0cmluZyI9PXR5cGVvZiBjZSl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4geChnZSl9cmV0dXJuIFMoZ2UsY2UsaGUpfWZ1bmN0aW9uIFMoZ2UsY2UsaGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZ2UpcmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uIFUoZ2UsY2Upe2lmKCgic3RyaW5nIiE9dHlwZW9mIGNlfHwiIj09PWNlKSYmKGNlPSJ1dGY4IiksIXcuaXNFbmNvZGluZyhjZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitjZSk7dmFyIGhlPTB8VyhnZSxjZSksd2U9QyhoZSksSmU9d2Uud3JpdGUo''@;'; put 'put ''Z2UsY2UpO3JldHVybiBKZSE9PWhlJiYod2U9d2Uuc2xpY2UoMCxKZSkpLHdlfShnZSxjZSk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KGdlKSlyZXR1cm4gZnVuY3Rpb24gVihnZSl7aWYoQWUoZ2UsVWludDhBcnJheSkpe3ZhciBjZT1uZXcgVWludDhBcnJheShnZSk7cmV0dXJuIE4oY2UuYnVm''@;'; put 'put ''ZmVyLGNlLmJ5dGVPZmZzZXQsY2UuYnl0ZUxlbmd0aCl9cmV0dXJuIEgoZ2UpfShnZSk7aWYobnVsbD09Z2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJy''@;'; put 'put ''YXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgZ2UpO2lmKEFlKGdlLEFycmF5QnVmZmVyKXx8Z2UmJkFlKGdlLmJ1ZmZlcixBcnJheUJ1ZmZlcil8fHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSImJihBZShnZSxTaGFyZWRBcnJheUJ1ZmZlcil8fGdlJiZBZShnZS5i''@;'; put 'put ''dWZmZXIsU2hhcmVkQXJyYXlCdWZmZXIpKSlyZXR1cm4gTihnZSxjZSxoZSk7aWYoIm51bWJlciI9PXR5cGVvZiBnZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTt2YXIg''@;'; put 'put ''d2U9Z2UudmFsdWVPZiYmZ2UudmFsdWVPZigpO2lmKG51bGwhPXdlJiZ3ZSE9PWdlKXJldHVybiB3LmZyb20od2UsY2UsaGUpO3ZhciBKZT1mdW5jdGlvbiB6KGdlKXtpZih3LmlzQnVmZmVyKGdlKSl7dmFyIGNlPTB8WShnZS5sZW5ndGgpLGhlPUMoY2UpO3JldHVybiAwPT09aGUubGVuZ3Ro''@;'; put 'put ''fHxnZS5jb3B5KGhlLDAsMCxjZSksaGV9cmV0dXJuIHZvaWQgMCE9PWdlLmxlbmd0aD8ibnVtYmVyIiE9dHlwZW9mIGdlLmxlbmd0aHx8RGUoZ2UubGVuZ3RoKT9DKDApOkgoZ2UpOiJCdWZmZXIiPT09Z2UudHlwZSYmQXJyYXkuaXNBcnJheShnZS5kYXRhKT9IKGdlLmRhdGEpOnZvaWQgMH0o''@;'; put 'put ''Z2UpO2lmKEplKXJldHVybiBKZTtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9U3ltYm9sLnRvUHJpbWl0aXZlJiYiZnVuY3Rpb24iPT10eXBlb2YgZ2VbU3ltYm9sLnRvUHJpbWl0aXZlXSlyZXR1cm4gdy5mcm9tKGdlW1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLGNlLGhlKTt0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBnZSl9ZnVuY3Rpb24gTChnZSl7aWYoIm51''@;'; put 'put ''bWJlciIhPXR5cGVvZiBnZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpO2lmKGdlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytnZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyl9ZnVuY3Rp''@;'; put 'put ''b24geChnZSl7cmV0dXJuIEwoZ2UpLEMoZ2U8MD8wOjB8WShnZSkpfWZ1bmN0aW9uIEgoZ2Upe2Zvcih2YXIgY2U9Z2UubGVuZ3RoPDA/MDowfFkoZ2UubGVuZ3RoKSxoZT1DKGNlKSx3ZT0wO3dlPGNlO3dlKz0xKWhlW3dlXT0yNTUmZ2Vbd2VdO3JldHVybiBoZX1mdW5jdGlvbiBOKGdlLGNl''@;'; put 'put ''LGhlKXtpZihjZTwwfHxnZS5ieXRlTGVuZ3RoPGNlKXRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZihnZS5ieXRlTGVuZ3RoPGNlKyhoZXx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2Yg''@;'; put 'put ''YnVmZmVyIGJvdW5kcycpO3ZhciB3ZTtyZXR1cm4gd2U9dm9pZCAwPT09Y2UmJnZvaWQgMD09PWhlP25ldyBVaW50OEFycmF5KGdlKTp2b2lkIDA9PT1oZT9uZXcgVWludDhBcnJheShnZSxjZSk6bmV3IFVpbnQ4QXJyYXkoZ2UsY2UsaGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZih3ZSx3LnBy''@;'; put 'put ''b3RvdHlwZSksd2V9ZnVuY3Rpb24gWShnZSl7aWYoZ2U+PUEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK0EudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxnZX1mdW5jdGlvbiBXKGdl''@;'; put 'put ''LGNlKXtpZih3LmlzQnVmZmVyKGdlKSlyZXR1cm4gZ2UubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyhnZSl8fEFlKGdlLEFycmF5QnVmZmVyKSlyZXR1cm4gZ2UuYnl0ZUxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIGdlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBh''@;'; put 'put ''cmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBnZSk7dmFyIGhlPWdlLmxlbmd0aCx3ZT1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCF3ZSYmMD09PWhlKXJldHVy''@;'; put 'put ''biAwO2Zvcih2YXIgSmU9ITE7Oylzd2l0Y2goY2Upe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGhlO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGR0KGdlKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2Ui''@;'; put 'put ''dXRmLTE2bGUiOnJldHVybiAyKmhlO2Nhc2UiaGV4IjpyZXR1cm4gaGU+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4geGUoZ2UpLmxlbmd0aDtkZWZhdWx0OmlmKEplKXJldHVybiB3ZT8tMTpkdChnZSkubGVuZ3RoO2NlPSgiIitjZSkudG9Mb3dlckNhc2UoKSxKZT0hMH19ZnVuY3Rpb24gcShn''@;'; put 'put ''ZSxjZSxoZSl7dmFyIHdlPSExO2lmKCh2b2lkIDA9PT1jZXx8Y2U8MCkmJihjZT0wKSxjZT50aGlzLmxlbmd0aHx8KCh2b2lkIDA9PT1oZXx8aGU+dGhpcy5sZW5ndGgpJiYoaGU9dGhpcy5sZW5ndGgpLGhlPD0wKXx8KGhlPj4+PTApPD0oY2U+Pj49MCkpcmV0dXJuIiI7Zm9yKGdlfHwoZ2U9''@;'; put 'put ''InV0ZjgiKTs7KXN3aXRjaChnZSl7Y2FzZSJoZXgiOnJldHVybiBEKHRoaXMsY2UsaGUpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGsodGhpcyxjZSxoZSk7Y2FzZSJhc2NpaSI6cmV0dXJuIEsodGhpcyxjZSxoZSk7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gRyh0''@;'; put 'put ''aGlzLGNlLGhlKTtjYXNlImJhc2U2NCI6cmV0dXJuIGIodGhpcyxjZSxoZSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBwKHRoaXMsY2UsaGUpO2RlZmF1bHQ6aWYod2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNv''@;'; put 'put ''ZGluZzogIitnZSk7Z2U9KGdlKyIiKS50b0xvd2VyQ2FzZSgpLHdlPSEwfX1mdW5jdGlvbiByZShnZSxjZSxoZSl7dmFyIHdlPWdlW2NlXTtnZVtjZV09Z2VbaGVdLGdlW2hlXT13ZX1mdW5jdGlvbiBtZShnZSxjZSxoZSx3ZSxKZSl7aWYoMD09PWdlLmxlbmd0aClyZXR1cm4tMTtpZigic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIGhlPyh3ZT1oZSxoZT0wKTpoZT4yMTQ3NDgzNjQ3P2hlPTIxNDc0ODM2NDc6aGU8LTIxNDc0ODM2NDgmJihoZT0tMjE0NzQ4MzY0OCksRGUoaGU9K2hlKSYmKGhlPUplPzA6Z2UubGVuZ3RoLTEpLGhlPDAmJihoZT1nZS5sZW5ndGgraGUpLGhlPj1nZS5sZW5ndGgpe2lm''@;'; put 'put ''KEplKXJldHVybi0xO2hlPWdlLmxlbmd0aC0xfWVsc2UgaWYoaGU8MCl7aWYoIUplKXJldHVybi0xO2hlPTB9aWYoInN0cmluZyI9PXR5cGVvZiBjZSYmKGNlPXcuZnJvbShjZSx3ZSkpLHcuaXNCdWZmZXIoY2UpKXJldHVybiAwPT09Y2UubGVuZ3RoPy0xOkNlKGdlLGNlLGhlLHdlLEplKTtp''@;'; put 'put ''ZigibnVtYmVyIj09dHlwZW9mIGNlKXJldHVybiBjZSY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP0plP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChnZSxjZSxoZSk6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2Yu''@;'; put 'put ''Y2FsbChnZSxjZSxoZSk6Q2UoZ2UsW2NlXSxoZSx3ZSxKZSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gQ2UoZ2UsY2UsaGUsd2UsSmUpe3ZhciBMdCx0dD0xLEtlPWdlLmxlbmd0aCwkdD1jZS5sZW5ndGg7aWYo''@;'; put 'put ''dm9pZCAwIT09d2UmJigidWNzMiI9PT0od2U9U3RyaW5nKHdlKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PXdlfHwidXRmMTZsZSI9PT13ZXx8InV0Zi0xNmxlIj09PXdlKSl7aWYoZ2UubGVuZ3RoPDJ8fGNlLmxlbmd0aDwyKXJldHVybi0xO3R0PTIsS2UvPTIsJHQvPTIsaGUvPTJ9ZnVu''@;'; put 'put ''Y3Rpb24gUnQoTHIsbG4pe3JldHVybiAxPT09dHQ/THJbbG5dOkxyLnJlYWRVSW50MTZCRShsbip0dCl9aWYoSmUpe3ZhciBHdD0tMTtmb3IoTHQ9aGU7THQ8S2U7THQrKylpZihSdChnZSxMdCk9PT1SdChjZSwtMT09PUd0PzA6THQtR3QpKXtpZigtMT09PUd0JiYoR3Q9THQpLEx0LUd0KzE9''@;'; put 'put ''PT0kdClyZXR1cm4gR3QqdHR9ZWxzZS0xIT09R3QmJihMdC09THQtR3QpLEd0PS0xfWVsc2UgZm9yKGhlKyR0PktlJiYoaGU9S2UtJHQpLEx0PWhlO0x0Pj0wO0x0LS0pe2Zvcih2YXIgZ3Q9ITAsWHQ9MDtYdDwkdDtYdCsrKWlmKFJ0KGdlLEx0K1h0KSE9PVJ0KGNlLFh0KSl7Z3Q9ITE7YnJl''@;'; put 'put ''YWt9aWYoZ3QpcmV0dXJuIEx0fXJldHVybi0xfWZ1bmN0aW9uIEllKGdlLGNlLGhlLHdlKXtoZT1OdW1iZXIoaGUpfHwwO3ZhciBKZT1nZS5sZW5ndGgtaGU7d2U/KHdlPU51bWJlcih3ZSkpPkplJiYod2U9SmUpOndlPUplO3ZhciB0dD1jZS5sZW5ndGg7d2U+dHQvMiYmKHdlPXR0LzIpO2Zv''@;'; put 'put ''cih2YXIgS2U9MDtLZTx3ZTsrK0tlKXt2YXIgJHQ9cGFyc2VJbnQoY2Uuc3Vic3RyKDIqS2UsMiksMTYpO2lmKERlKCR0KSlyZXR1cm4gS2U7Z2VbaGUrS2VdPSR0fXJldHVybiBLZX1mdW5jdGlvbiBrZShnZSxjZSxoZSx3ZSl7cmV0dXJuIGplKGR0KGNlLGdlLmxlbmd0aC1oZSksZ2UsaGUs''@;'; put 'put ''d2UpfWZ1bmN0aW9uIHFlKGdlLGNlLGhlLHdlKXtyZXR1cm4gamUoZnVuY3Rpb24gUmUoZ2Upe2Zvcih2YXIgY2U9W10saGU9MDtoZTxnZS5sZW5ndGg7KytoZSljZS5wdXNoKDI1NSZnZS5jaGFyQ29kZUF0KGhlKSk7cmV0dXJuIGNlfShjZSksZ2UsaGUsd2UpfWZ1bmN0aW9uIFgoZ2UsY2Us''@;'; put 'put ''aGUsd2Upe3JldHVybiBqZSh4ZShjZSksZ2UsaGUsd2UpfWZ1bmN0aW9uIGYoZ2UsY2UsaGUsd2Upe3JldHVybiBqZShmdW5jdGlvbiBhZShnZSxjZSl7Zm9yKHZhciBoZSx3ZSx0dD1bXSxLZT0wO0tlPGdlLmxlbmd0aCYmISgoY2UtPTIpPDApOysrS2Upd2U9KGhlPWdlLmNoYXJDb2RlQXQo''@;'; put 'put ''S2UpKT4+OCx0dC5wdXNoKGhlJTI1NiksdHQucHVzaCh3ZSk7cmV0dXJuIHR0fShjZSxnZS5sZW5ndGgtaGUpLGdlLGhlLHdlKX1mdW5jdGlvbiBiKGdlLGNlLGhlKXtyZXR1cm4geS5mcm9tQnl0ZUFycmF5KDA9PT1jZSYmaGU9PT1nZS5sZW5ndGg/Z2U6Z2Uuc2xpY2UoY2UsaGUpKX1mdW5j''@;'; put 'put ''dGlvbiBrKGdlLGNlLGhlKXtoZT1NYXRoLm1pbihnZS5sZW5ndGgsaGUpO2Zvcih2YXIgd2U9W10sSmU9Y2U7SmU8aGU7KXt2YXIgUnQsTHQsR3QsZ3QsdHQ9Z2VbSmVdLEtlPW51bGwsJHQ9dHQ+MjM5PzQ6dHQ+MjIzPzM6dHQ+MTkxPzI6MTtpZihKZSskdDw9aGUpc3dpdGNoKCR0KXtjYXNl''@;'; put 'put ''IDE6dHQ8MTI4JiYoS2U9dHQpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKFJ0PWdlW0plKzFdKSkmJihndD0oMzEmdHQpPDw2fDYzJlJ0KT4xMjcmJihLZT1ndCk7YnJlYWs7Y2FzZSAzOkx0PWdlW0plKzJdLDEyOD09KDE5MiYoUnQ9Z2VbSmUrMV0pKSYmMTI4PT0oMTkyJkx0KSYmKGd0PSgx''@;'; put 'put ''NSZ0dCk8PDEyfCg2MyZSdCk8PDZ8NjMmTHQpPjIwNDcmJihndDw1NTI5Nnx8Z3Q+NTczNDMpJiYoS2U9Z3QpO2JyZWFrO2Nhc2UgNDpMdD1nZVtKZSsyXSxHdD1nZVtKZSszXSwxMjg9PSgxOTImKFJ0PWdlW0plKzFdKSkmJjEyOD09KDE5MiZMdCkmJjEyOD09KDE5MiZHdCkmJihndD0oMTUm''@;'; put 'put ''dHQpPDwxOHwoNjMmUnQpPDwxMnwoNjMmTHQpPDw2fDYzJkd0KT42NTUzNSYmZ3Q8MTExNDExMiYmKEtlPWd0KX1udWxsPT09S2U/KEtlPTY1NTMzLCR0PTEpOktlPjY1NTM1JiYod2UucHVzaCgoS2UtPTY1NTM2KT4+PjEwJjEwMjN8NTUyOTYpLEtlPTU2MzIwfDEwMjMmS2UpLHdlLnB1c2go''@;'; put 'put ''S2UpLEplKz0kdH1yZXR1cm4gZnVuY3Rpb24gQihnZSl7dmFyIGNlPWdlLmxlbmd0aDtpZihjZTw9TSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZ2UpO2Zvcih2YXIgaGU9IiIsd2U9MDt3ZTxjZTspaGUrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5n''@;'; put 'put ''LGdlLnNsaWNlKHdlLHdlKz1NKSk7cmV0dXJuIGhlfSh3ZSl9ai5rTWF4TGVuZ3RoPUEsISh3LlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24gdigpe3RyeXt2YXIgZ2U9bmV3IFVpbnQ4QXJyYXkoMSksY2U9e2ZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19O3JldHVybiBPYmplY3Quc2V0''@;'; put 'put ''UHJvdG90eXBlT2YoY2UsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihnZSxjZSksNDI9PT1nZS5mb28oKX1jYXRjaHtyZXR1cm4hMX19KCkpJiZ0eXBlb2YgY29uc29sZTwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBjb25zb2xlLmVycm9yJiZjb25zb2xlLmVy''@;'; put 'put ''cm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKSxPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkody5wcm90b3R5cGUsInBhcmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYody5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcucHJvdG90eXBlLCJvZmZzZXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5j''@;'; put 'put ''dGlvbigpe2lmKHcuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSx3LnBvb2xTaXplPTgxOTIsdy5mcm9tPWZ1bmN0aW9uKGdlLGNlLGhlKXtyZXR1cm4gUyhnZSxjZSxoZSl9LE9iamVjdC5zZXRQcm90b3R5cGVPZih3LnByb3RvdHlwZSxVaW50OEFycmF5LnByb3Rv''@;'; put 'put ''dHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKHcsVWludDhBcnJheSksdy5hbGxvYz1mdW5jdGlvbihnZSxjZSxoZSl7cmV0dXJuIGZ1bmN0aW9uIFIoZ2UsY2UsaGUpe3JldHVybiBMKGdlKSxnZTw9MD9DKGdlKTp2b2lkIDAhPT1jZT8ic3RyaW5nIj09dHlwZW9mIGhlP0MoZ2UpLmZpbGwo''@;'; put 'put ''Y2UsaGUpOkMoZ2UpLmZpbGwoY2UpOkMoZ2UpfShnZSxjZSxoZSl9LHcuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZ2Upe3JldHVybiB4KGdlKX0sdy5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZ2Upe3JldHVybiB4KGdlKX0sdy5pc0J1ZmZlcj1mdW5jdGlvbihjZSl7cmV0dXJuIG51bGwhPWNl''@;'; put 'put ''JiYhMD09PWNlLl9pc0J1ZmZlciYmY2UhPT13LnByb3RvdHlwZX0sdy5jb21wYXJlPWZ1bmN0aW9uKGNlLGhlKXtpZihBZShjZSxVaW50OEFycmF5KSYmKGNlPXcuZnJvbShjZSxjZS5vZmZzZXQsY2UuYnl0ZUxlbmd0aCkpLEFlKGhlLFVpbnQ4QXJyYXkpJiYoaGU9dy5mcm9tKGhlLGhlLm9m''@;'; put 'put ''ZnNldCxoZS5ieXRlTGVuZ3RoKSksIXcuaXNCdWZmZXIoY2UpfHwhdy5pc0J1ZmZlcihoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoY2U9PT1oZSlyZXR1cm4g''@;'; put 'put ''MDtmb3IodmFyIHdlPWNlLmxlbmd0aCxKZT1oZS5sZW5ndGgsdHQ9MCxLZT1NYXRoLm1pbih3ZSxKZSk7dHQ8S2U7Kyt0dClpZihjZVt0dF0hPT1oZVt0dF0pe3dlPWNlW3R0XSxKZT1oZVt0dF07YnJlYWt9cmV0dXJuIHdlPEplPy0xOkplPHdlPzE6MH0sdy5pc0VuY29kaW5nPWZ1bmN0aW9u''@;'; put 'put ''KGNlKXtzd2l0Y2goU3RyaW5nKGNlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1''@;'; put 'put ''dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LHcuY29uY2F0PWZ1bmN0aW9uKGNlLGhlKXtpZighQXJyYXkuaXNBcnJheShjZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1jZS5sZW5n''@;'; put 'put ''dGgpcmV0dXJuIHcuYWxsb2MoMCk7dmFyIHdlO2lmKHZvaWQgMD09PWhlKWZvcihoZT0wLHdlPTA7d2U8Y2UubGVuZ3RoOysrd2UpaGUrPWNlW3dlXS5sZW5ndGg7dmFyIEplPXcuYWxsb2NVbnNhZmUoaGUpLHR0PTA7Zm9yKHdlPTA7d2U8Y2UubGVuZ3RoOysrd2Upe3ZhciBLZT1jZVt3ZV07''@;'; put 'put ''aWYoQWUoS2UsVWludDhBcnJheSkpdHQrS2UubGVuZ3RoPkplLmxlbmd0aD93LmZyb20oS2UpLmNvcHkoSmUsdHQpOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKEplLEtlLHR0KTtlbHNle2lmKCF3LmlzQnVmZmVyKEtlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1l''@;'; put 'put ''bnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7S2UuY29weShKZSx0dCl9dHQrPUtlLmxlbmd0aH1yZXR1cm4gSmV9LHcuYnl0ZUxlbmd0aD1XLHcucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCx3LnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgY2U9dGhpcy5sZW5ndGg7aWYo''@;'; put 'put ''Y2UlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIGhlPTA7aGU8Y2U7aGUrPTIpcmUodGhpcyxoZSxoZSsxKTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGNl''@;'; put 'put ''PXRoaXMubGVuZ3RoO2lmKGNlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciBoZT0wO2hlPGNlO2hlKz00KXJlKHRoaXMsaGUsaGUrMykscmUodGhpcyxoZSsxLGhlKzIpO3JldHVybiB0aGlzfSx3''@;'; put 'put ''LnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgY2U9dGhpcy5sZW5ndGg7aWYoY2UlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIGhlPTA7aGU8Y2U7aGUrPTgpcmUodGhpcyxoZSxoZSs3''@;'; put 'put ''KSxyZSh0aGlzLGhlKzEsaGUrNikscmUodGhpcyxoZSsyLGhlKzUpLHJlKHRoaXMsaGUrMyxoZSs0KTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgY2U9dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1jZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9rKHRo''@;'; put 'put ''aXMsMCxjZSk6cS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHcucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPXcucHJvdG90eXBlLnRvU3RyaW5nLHcucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihjZSl7aWYoIXcuaXNCdWZmZXIoY2UpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11''@;'; put 'put ''c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWNlfHwwPT09dy5jb21wYXJlKHRoaXMsY2UpfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGNlPSIiLGhlPWouSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIGNlPXRoaXMudG9TdHJpbmcoImhleCIsMCxoZSkucmVwbGFj''@;'; put 'put ''ZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5oZSYmKGNlKz0iIC4uLiAiKSwiPEJ1ZmZlciAiK2NlKyI+In0scyYmKHcucHJvdG90eXBlW3NdPXcucHJvdG90eXBlLmluc3BlY3QpLHcucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oY2UsaGUsd2UsSmUsdHQpe2lmKEFl''@;'; put 'put ''KGNlLFVpbnQ4QXJyYXkpJiYoY2U9dy5mcm9tKGNlLGNlLm9mZnNldCxjZS5ieXRlTGVuZ3RoKSksIXcuaXNCdWZmZXIoY2UpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZl''@;'; put 'put ''ZCB0eXBlICcrdHlwZW9mIGNlKTtpZih2b2lkIDA9PT1oZSYmKGhlPTApLHZvaWQgMD09PXdlJiYod2U9Y2U/Y2UubGVuZ3RoOjApLHZvaWQgMD09PUplJiYoSmU9MCksdm9pZCAwPT09dHQmJih0dD10aGlzLmxlbmd0aCksaGU8MHx8d2U+Y2UubGVuZ3RofHxKZTwwfHx0dD50aGlzLmxlbmd0''@;'; put 'put ''aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoSmU+PXR0JiZoZT49d2UpcmV0dXJuIDA7aWYoSmU+PXR0KXJldHVybi0xO2lmKGhlPj13ZSlyZXR1cm4gMTtpZih0aGlzPT09Y2UpcmV0dXJuIDA7Zm9yKHZhciBLZT0odHQ+Pj49MCktKEplPj4+PTApLCR0''@;'; put 'put ''PSh3ZT4+Pj0wKS0oaGU+Pj49MCksUnQ9TWF0aC5taW4oS2UsJHQpLEx0PXRoaXMuc2xpY2UoSmUsdHQpLEd0PWNlLnNsaWNlKGhlLHdlKSxndD0wO2d0PFJ0OysrZ3QpaWYoTHRbZ3RdIT09R3RbZ3RdKXtLZT1MdFtndF0sJHQ9R3RbZ3RdO2JyZWFrfXJldHVybiBLZTwkdD8tMTokdDxLZT8x''@;'; put 'put ''OjB9LHcucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGNlLGhlLHdlKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihjZSxoZSx3ZSl9LHcucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oY2UsaGUsd2Upe3JldHVybiBtZSh0aGlzLGNlLGhlLHdlLCEwKX0sdy5wcm90b3R5cGUubGFzdElu''@;'; put 'put ''ZGV4T2Y9ZnVuY3Rpb24oY2UsaGUsd2Upe3JldHVybiBtZSh0aGlzLGNlLGhlLHdlLCExKX0sdy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oY2UsaGUsd2UsSmUpe2lmKHZvaWQgMD09PWhlKUplPSJ1dGY4Iix3ZT10aGlzLmxlbmd0aCxoZT0wO2Vsc2UgaWYodm9pZCAwPT09d2UmJiJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgaGUpSmU9aGUsd2U9dGhpcy5sZW5ndGgsaGU9MDtlbHNle2lmKCFpc0Zpbml0ZShoZSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO2hlPj4+PTAsaXNG''@;'; put 'put ''aW5pdGUod2UpPyh3ZT4+Pj0wLHZvaWQgMD09PUplJiYoSmU9InV0ZjgiKSk6KEplPXdlLHdlPXZvaWQgMCl9dmFyIHR0PXRoaXMubGVuZ3RoLWhlO2lmKCh2b2lkIDA9PT13ZXx8d2U+dHQpJiYod2U9dHQpLGNlLmxlbmd0aD4wJiYod2U8MHx8aGU8MCl8fGhlPnRoaXMubGVuZ3RoKXRocm93''@;'; put 'put ''IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO0plfHwoSmU9InV0ZjgiKTtmb3IodmFyIEtlPSExOzspc3dpdGNoKEplKXtjYXNlImhleCI6cmV0dXJuIEllKHRoaXMsY2UsaGUsd2UpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJu''@;'; put 'put ''IGtlKHRoaXMsY2UsaGUsd2UpO2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHFlKHRoaXMsY2UsaGUsd2UpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gWCh0aGlzLGNlLGhlLHdlKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYt''@;'; put 'put ''MTZsZSI6cmV0dXJuIGYodGhpcyxjZSxoZSx3ZSk7ZGVmYXVsdDppZihLZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0plKTtKZT0oIiIrSmUpLnRvTG93ZXJDYXNlKCksS2U9ITB9fSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToi''@;'; put 'put ''QnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBNPTQwOTY7ZnVuY3Rpb24gSyhnZSxjZSxoZSl7dmFyIHdlPSIiO2hlPU1hdGgubWluKGdlLmxlbmd0aCxoZSk7Zm9yKHZhciBKZT1jZTtKZTxoZTsrK0plKXdlKz1TdHJpbmcu''@;'; put 'put ''ZnJvbUNoYXJDb2RlKDEyNyZnZVtKZV0pO3JldHVybiB3ZX1mdW5jdGlvbiBHKGdlLGNlLGhlKXt2YXIgd2U9IiI7aGU9TWF0aC5taW4oZ2UubGVuZ3RoLGhlKTtmb3IodmFyIEplPWNlO0plPGhlOysrSmUpd2UrPVN0cmluZy5mcm9tQ2hhckNvZGUoZ2VbSmVdKTtyZXR1cm4gd2V9ZnVuY3Rp''@;'; put 'put ''b24gRChnZSxjZSxoZSl7dmFyIHdlPWdlLmxlbmd0aDsoIWNlfHxjZTwwKSYmKGNlPTApLCghaGV8fGhlPDB8fGhlPndlKSYmKGhlPXdlKTtmb3IodmFyIEplPSIiLHR0PWNlO3R0PGhlOysrdHQpSmUrPUZlW2dlW3R0XV07cmV0dXJuIEplfWZ1bmN0aW9uIHAoZ2UsY2UsaGUpe2Zvcih2YXIg''@;'; put 'put ''d2U9Z2Uuc2xpY2UoY2UsaGUpLEplPSIiLHR0PTA7dHQ8d2UubGVuZ3RoLTE7dHQrPTIpSmUrPVN0cmluZy5mcm9tQ2hhckNvZGUod2VbdHRdKzI1Nip3ZVt0dCsxXSk7cmV0dXJuIEplfWZ1bmN0aW9uIEkoZ2UsY2UsaGUpe2lmKGdlJTEhPTB8fGdlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3Io''@;'; put 'put ''Im9mZnNldCBpcyBub3QgdWludCIpO2lmKGdlK2NlPmhlKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gdWUoZ2UsY2UsaGUsd2UsSmUsdHQpe2lmKCF3LmlzQnVmZmVyKGdlKSl0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYoY2U+SmV8fGNlPHR0KXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihoZSt3ZT5nZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIklu''@;'; put 'put ''ZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIG5lKGdlLGNlLGhlLHdlLEplLHR0KXtpZihoZSt3ZT5nZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKGhlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1''@;'; put 'put ''bmN0aW9uIF9lKGdlLGNlLGhlLHdlLEplKXtyZXR1cm4gY2U9K2NlLGhlPj4+PTAsSmV8fG5lKGdlLDAsaGUsNCksYy53cml0ZShnZSxjZSxoZSx3ZSwyMyw0KSxoZSs0fWZ1bmN0aW9uIFBlKGdlLGNlLGhlLHdlLEplKXtyZXR1cm4gY2U9K2NlLGhlPj4+PTAsSmV8fG5lKGdlLDAsaGUsOCks''@;'; put 'put ''Yy53cml0ZShnZSxjZSxoZSx3ZSw1Miw4KSxoZSs4fXcucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGNlLGhlKXt2YXIgd2U9dGhpcy5sZW5ndGg7KGNlPX5+Y2UpPDA/KGNlKz13ZSk8MCYmKGNlPTApOmNlPndlJiYoY2U9d2UpLChoZT12b2lkIDA9PT1oZT93ZTp+fmhlKTwwPyhoZSs9d2Up''@;'; put 'put ''PDAmJihoZT0wKTpoZT53ZSYmKGhlPXdlKSxoZTxjZSYmKGhlPWNlKTt2YXIgSmU9dGhpcy5zdWJhcnJheShjZSxoZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihKZSx3LnByb3RvdHlwZSksSmV9LHcucHJvdG90eXBlLnJlYWRVaW50TEU9dy5wcm90b3R5cGUucmVhZFVJbnRMRT1m''@;'; put 'put ''dW5jdGlvbihjZSxoZSx3ZSl7Y2U+Pj49MCxoZT4+Pj0wLHdlfHxJKGNlLGhlLHRoaXMubGVuZ3RoKTtmb3IodmFyIEplPXRoaXNbY2VdLHR0PTEsS2U9MDsrK0tlPGhlJiYodHQqPTI1Nik7KUplKz10aGlzW2NlK0tlXSp0dDtyZXR1cm4gSmV9LHcucHJvdG90eXBlLnJlYWRVaW50QkU9dy5w''@;'; put 'put ''cm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihjZSxoZSx3ZSl7Y2U+Pj49MCxoZT4+Pj0wLHdlfHxJKGNlLGhlLHRoaXMubGVuZ3RoKTtmb3IodmFyIEplPXRoaXNbY2UrLS1oZV0sdHQ9MTtoZT4wJiYodHQqPTI1Nik7KUplKz10aGlzW2NlKy0taGVdKnR0O3JldHVybiBKZX0sdy5wcm90''@;'; put 'put ''b3R5cGUucmVhZFVpbnQ4PXcucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihjZSxoZSl7cmV0dXJuIGNlPj4+PTAsaGV8fEkoY2UsMSx0aGlzLmxlbmd0aCksdGhpc1tjZV19LHcucHJvdG90eXBlLnJlYWRVaW50MTZMRT13LnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oY2Us''@;'; put 'put ''aGUpe3JldHVybiBjZT4+Pj0wLGhlfHxJKGNlLDIsdGhpcy5sZW5ndGgpLHRoaXNbY2VdfHRoaXNbY2UrMV08PDh9LHcucHJvdG90eXBlLnJlYWRVaW50MTZCRT13LnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oY2UsaGUpe3JldHVybiBjZT4+Pj0wLGhlfHxJKGNlLDIsdGhpcy5s''@;'; put 'put ''ZW5ndGgpLHRoaXNbY2VdPDw4fHRoaXNbY2UrMV19LHcucHJvdG90eXBlLnJlYWRVaW50MzJMRT13LnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oY2UsaGUpe3JldHVybiBjZT4+Pj0wLGhlfHxJKGNlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2NlXXx0aGlzW2NlKzFdPDw4fHRoaXNb''@;'; put 'put ''Y2UrMl08PDE2KSsxNjc3NzIxNip0aGlzW2NlKzNdfSx3LnByb3RvdHlwZS5yZWFkVWludDMyQkU9dy5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGNlLGhlKXtyZXR1cm4gY2U+Pj49MCxoZXx8SShjZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2NlXSsodGhpc1tjZSsx''@;'; put 'put ''XTw8MTZ8dGhpc1tjZSsyXTw8OHx0aGlzW2NlKzNdKX0sdy5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGNlLGhlLHdlKXtjZT4+Pj0wLGhlPj4+PTAsd2V8fEkoY2UsaGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgSmU9dGhpc1tjZV0sdHQ9MSxLZT0wOysrS2U8aGUmJih0dCo9MjU2KTsp''@;'; put 'put ''SmUrPXRoaXNbY2UrS2VdKnR0O3JldHVybiBKZT49KHR0Kj0xMjgpJiYoSmUtPU1hdGgucG93KDIsOCpoZSkpLEplfSx3LnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oY2UsaGUsd2Upe2NlPj4+PTAsaGU+Pj49MCx3ZXx8SShjZSxoZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBKZT1oZSx0''@;'; put 'put ''dD0xLEtlPXRoaXNbY2UrLS1KZV07SmU+MCYmKHR0Kj0yNTYpOylLZSs9dGhpc1tjZSstLUplXSp0dDtyZXR1cm4gS2U+PSh0dCo9MTI4KSYmKEtlLT1NYXRoLnBvdygyLDgqaGUpKSxLZX0sdy5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oY2UsaGUpe3JldHVybiBjZT4+Pj0wLGhlfHxJ''@;'; put 'put ''KGNlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2NlXT8tMSooMjU1LXRoaXNbY2VdKzEpOnRoaXNbY2VdfSx3LnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihjZSxoZSl7Y2U+Pj49MCxoZXx8SShjZSwyLHRoaXMubGVuZ3RoKTt2YXIgd2U9dGhpc1tjZV18dGhpc1tjZSsxXTw8ODty''@;'; put 'put ''ZXR1cm4gMzI3Njgmd2U/NDI5NDkwMTc2MHx3ZTp3ZX0sdy5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oY2UsaGUpe2NlPj4+PTAsaGV8fEkoY2UsMix0aGlzLmxlbmd0aCk7dmFyIHdlPXRoaXNbY2UrMV18dGhpc1tjZV08PDg7cmV0dXJuIDMyNzY4JndlPzQyOTQ5MDE3NjB8d2U6''@;'; put 'put ''d2V9LHcucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKGNlLGhlKXtyZXR1cm4gY2U+Pj49MCxoZXx8SShjZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2NlXXx0aGlzW2NlKzFdPDw4fHRoaXNbY2UrMl08PDE2fHRoaXNbY2UrM108PDI0fSx3LnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5j''@;'; put 'put ''dGlvbihjZSxoZSl7cmV0dXJuIGNlPj4+PTAsaGV8fEkoY2UsNCx0aGlzLmxlbmd0aCksdGhpc1tjZV08PDI0fHRoaXNbY2UrMV08PDE2fHRoaXNbY2UrMl08PDh8dGhpc1tjZSszXX0sdy5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oY2UsaGUpe3JldHVybiBjZT4+Pj0wLGhlfHxJ''@;'; put 'put ''KGNlLDQsdGhpcy5sZW5ndGgpLGMucmVhZCh0aGlzLGNlLCEwLDIzLDQpfSx3LnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihjZSxoZSl7cmV0dXJuIGNlPj4+PTAsaGV8fEkoY2UsNCx0aGlzLmxlbmd0aCksYy5yZWFkKHRoaXMsY2UsITEsMjMsNCl9LHcucHJvdG90eXBlLnJlYWRE''@;'; put 'put ''b3VibGVMRT1mdW5jdGlvbihjZSxoZSl7cmV0dXJuIGNlPj4+PTAsaGV8fEkoY2UsOCx0aGlzLmxlbmd0aCksYy5yZWFkKHRoaXMsY2UsITAsNTIsOCl9LHcucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihjZSxoZSl7cmV0dXJuIGNlPj4+PTAsaGV8fEkoY2UsOCx0aGlzLmxlbmd0''@;'; put 'put ''aCksYy5yZWFkKHRoaXMsY2UsITEsNTIsOCl9LHcucHJvdG90eXBlLndyaXRlVWludExFPXcucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGNlLGhlLHdlLEplKXtjZT0rY2UsaGU+Pj49MCx3ZT4+Pj0wLEplfHx1ZSh0aGlzLGNlLGhlLHdlLE1hdGgucG93KDIsOCp3ZSktMSwwKTt2''@;'; put 'put ''YXIgS2U9MSwkdD0wO2Zvcih0aGlzW2hlXT0yNTUmY2U7KyskdDx3ZSYmKEtlKj0yNTYpOyl0aGlzW2hlKyR0XT1jZS9LZSYyNTU7cmV0dXJuIGhlK3dlfSx3LnByb3RvdHlwZS53cml0ZVVpbnRCRT13LnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihjZSxoZSx3ZSxKZSl7Y2U9K2Nl''@;'; put 'put ''LGhlPj4+PTAsd2U+Pj49MCxKZXx8dWUodGhpcyxjZSxoZSx3ZSxNYXRoLnBvdygyLDgqd2UpLTEsMCk7dmFyIEtlPXdlLTEsJHQ9MTtmb3IodGhpc1toZStLZV09MjU1JmNlOy0tS2U+PTAmJigkdCo9MjU2KTspdGhpc1toZStLZV09Y2UvJHQmMjU1O3JldHVybiBoZSt3ZX0sdy5wcm90b3R5''@;'; put 'put ''cGUud3JpdGVVaW50OD13LnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGNlLGhlLHdlKXtyZXR1cm4gY2U9K2NlLGhlPj4+PTAsd2V8fHVlKHRoaXMsY2UsaGUsMSwyNTUsMCksdGhpc1toZV09MjU1JmNlLGhlKzF9LHcucHJvdG90eXBlLndyaXRlVWludDE2TEU9dy5wcm90b3R5cGUu''@;'; put 'put ''d3JpdGVVSW50MTZMRT1mdW5jdGlvbihjZSxoZSx3ZSl7cmV0dXJuIGNlPStjZSxoZT4+Pj0wLHdlfHx1ZSh0aGlzLGNlLGhlLDIsNjU1MzUsMCksdGhpc1toZV09MjU1JmNlLHRoaXNbaGUrMV09Y2U+Pj44LGhlKzJ9LHcucHJvdG90eXBlLndyaXRlVWludDE2QkU9dy5wcm90b3R5cGUud3Jp''@;'; put 'put ''dGVVSW50MTZCRT1mdW5jdGlvbihjZSxoZSx3ZSl7cmV0dXJuIGNlPStjZSxoZT4+Pj0wLHdlfHx1ZSh0aGlzLGNlLGhlLDIsNjU1MzUsMCksdGhpc1toZV09Y2U+Pj44LHRoaXNbaGUrMV09MjU1JmNlLGhlKzJ9LHcucHJvdG90eXBlLndyaXRlVWludDMyTEU9dy5wcm90b3R5cGUud3JpdGVV''@;'; put 'put ''SW50MzJMRT1mdW5jdGlvbihjZSxoZSx3ZSl7cmV0dXJuIGNlPStjZSxoZT4+Pj0wLHdlfHx1ZSh0aGlzLGNlLGhlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2hlKzNdPWNlPj4+MjQsdGhpc1toZSsyXT1jZT4+PjE2LHRoaXNbaGUrMV09Y2U+Pj44LHRoaXNbaGVdPTI1NSZjZSxoZSs0fSx3LnBy''@;'; put 'put ''b3RvdHlwZS53cml0ZVVpbnQzMkJFPXcucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oY2UsaGUsd2Upe3JldHVybiBjZT0rY2UsaGU+Pj49MCx3ZXx8dWUodGhpcyxjZSxoZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1toZV09Y2U+Pj4yNCx0aGlzW2hlKzFdPWNlPj4+MTYsdGhpc1to''@;'; put 'put ''ZSsyXT1jZT4+PjgsdGhpc1toZSszXT0yNTUmY2UsaGUrNH0sdy5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihjZSxoZSx3ZSxKZSl7aWYoY2U9K2NlLGhlPj4+PTAsIUplKXt2YXIgdHQ9TWF0aC5wb3coMiw4KndlLTEpO3VlKHRoaXMsY2UsaGUsd2UsdHQtMSwtdHQpfXZhciBLZT0w''@;'; put 'put ''LCR0PTEsUnQ9MDtmb3IodGhpc1toZV09MjU1JmNlOysrS2U8d2UmJigkdCo9MjU2KTspY2U8MCYmMD09PVJ0JiYwIT09dGhpc1toZStLZS0xXSYmKFJ0PTEpLHRoaXNbaGUrS2VdPShjZS8kdHwwKS1SdCYyNTU7cmV0dXJuIGhlK3dlfSx3LnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9u''@;'; put 'put ''KGNlLGhlLHdlLEplKXtpZihjZT0rY2UsaGU+Pj49MCwhSmUpe3ZhciB0dD1NYXRoLnBvdygyLDgqd2UtMSk7dWUodGhpcyxjZSxoZSx3ZSx0dC0xLC10dCl9dmFyIEtlPXdlLTEsJHQ9MSxSdD0wO2Zvcih0aGlzW2hlK0tlXT0yNTUmY2U7LS1LZT49MCYmKCR0Kj0yNTYpOyljZTwwJiYwPT09''@;'; put 'put ''UnQmJjAhPT10aGlzW2hlK0tlKzFdJiYoUnQ9MSksdGhpc1toZStLZV09KGNlLyR0fDApLVJ0JjI1NTtyZXR1cm4gaGUrd2V9LHcucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihjZSxoZSx3ZSl7cmV0dXJuIGNlPStjZSxoZT4+Pj0wLHdlfHx1ZSh0aGlzLGNlLGhlLDEsMTI3LC0xMjgp''@;'; put 'put ''LGNlPDAmJihjZT0yNTUrY2UrMSksdGhpc1toZV09MjU1JmNlLGhlKzF9LHcucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihjZSxoZSx3ZSl7cmV0dXJuIGNlPStjZSxoZT4+Pj0wLHdlfHx1ZSh0aGlzLGNlLGhlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW2hlXT0yNTUmY2UsdGhpc1to''@;'; put 'put ''ZSsxXT1jZT4+PjgsaGUrMn0sdy5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGNlLGhlLHdlKXtyZXR1cm4gY2U9K2NlLGhlPj4+PTAsd2V8fHVlKHRoaXMsY2UsaGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbaGVdPWNlPj4+OCx0aGlzW2hlKzFdPTI1NSZjZSxoZSsyfSx3LnByb3Rv''@;'; put 'put ''dHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oY2UsaGUsd2Upe3JldHVybiBjZT0rY2UsaGU+Pj49MCx3ZXx8dWUodGhpcyxjZSxoZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNbaGVdPTI1NSZjZSx0aGlzW2hlKzFdPWNlPj4+OCx0aGlzW2hlKzJdPWNlPj4+MTYsdGhpc1toZSsz''@;'; put 'put ''XT1jZT4+PjI0LGhlKzR9LHcucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihjZSxoZSx3ZSl7cmV0dXJuIGNlPStjZSxoZT4+Pj0wLHdlfHx1ZSh0aGlzLGNlLGhlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksY2U8MCYmKGNlPTQyOTQ5NjcyOTUrY2UrMSksdGhpc1toZV09Y2U+''@;'; put 'put ''Pj4yNCx0aGlzW2hlKzFdPWNlPj4+MTYsdGhpc1toZSsyXT1jZT4+PjgsdGhpc1toZSszXT0yNTUmY2UsaGUrNH0sdy5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGNlLGhlLHdlKXtyZXR1cm4gX2UodGhpcyxjZSxoZSwhMCx3ZSl9LHcucHJvdG90eXBlLndyaXRlRmxvYXRCRT1m''@;'; put 'put ''dW5jdGlvbihjZSxoZSx3ZSl7cmV0dXJuIF9lKHRoaXMsY2UsaGUsITEsd2UpfSx3LnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGNlLGhlLHdlKXtyZXR1cm4gUGUodGhpcyxjZSxoZSwhMCx3ZSl9LHcucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oY2UsaGUsd2Up''@;'; put 'put ''e3JldHVybiBQZSh0aGlzLGNlLGhlLCExLHdlKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihjZSxoZSx3ZSxKZSl7aWYoIXcuaXNCdWZmZXIoY2UpKXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpO2lmKHdlfHwod2U9MCksIUplJiYwIT09SmUm''@;'; put 'put ''JihKZT10aGlzLmxlbmd0aCksaGU+PWNlLmxlbmd0aCYmKGhlPWNlLmxlbmd0aCksaGV8fChoZT0wKSxKZT4wJiZKZTx3ZSYmKEplPXdlKSxKZT09PXdlfHwwPT09Y2UubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoaGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0''@;'; put 'put ''U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHdlPDB8fHdlPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoSmU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtKZT50aGlzLmxlbmd0aCYmKEpl''@;'; put 'put ''PXRoaXMubGVuZ3RoKSxjZS5sZW5ndGgtaGU8SmUtd2UmJihKZT1jZS5sZW5ndGgtaGUrd2UpO3ZhciB0dD1KZS13ZTtyZXR1cm4gdGhpcz09PWNlJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbj90aGlzLmNvcHlXaXRoaW4oaGUsd2UsSmUpOlVp''@;'; put 'put ''bnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGNlLHRoaXMuc3ViYXJyYXkod2UsSmUpLGhlKSx0dH0sdy5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihjZSxoZSx3ZSxKZSl7aWYoInN0cmluZyI9PXR5cGVvZiBjZSl7aWYoInN0cmluZyI9PXR5cGVvZiBoZT8oSmU9aGUsaGU9MCx3ZT10aGlz''@;'; put 'put ''Lmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiB3ZSYmKEplPXdlLHdlPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1KZSYmInN0cmluZyIhPXR5cGVvZiBKZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBKZSYmIXcuaXNF''@;'; put 'put ''bmNvZGluZyhKZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitKZSk7aWYoMT09PWNlLmxlbmd0aCl7dmFyIHR0PWNlLmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PUplJiZ0dDwxMjh8fCJsYXRpbjEiPT09SmUpJiYoY2U9dHQpfX1lbHNlIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBjZT9jZSY9MjU1OiJib29sZWFuIj09dHlwZW9mIGNlJiYoY2U9TnVtYmVyKGNlKSk7aWYoaGU8MHx8dGhpcy5sZW5ndGg8aGV8fHRoaXMubGVuZ3RoPHdlKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZih3ZTw9aGUpcmV0dXJuIHRoaXM7dmFyIEtlO2lm''@;'; put 'put ''KGhlPj4+PTAsd2U9dm9pZCAwPT09d2U/dGhpcy5sZW5ndGg6d2U+Pj4wLGNlfHwoY2U9MCksIm51bWJlciI9PXR5cGVvZiBjZSlmb3IoS2U9aGU7S2U8d2U7KytLZSl0aGlzW0tlXT1jZTtlbHNle3ZhciAkdD13LmlzQnVmZmVyKGNlKT9jZTp3LmZyb20oY2UsSmUpLFJ0PSR0Lmxlbmd0aDtp''@;'; put 'put ''ZigwPT09UnQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInK2NlKyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3IoS2U9MDtLZTx3ZS1oZTsrK0tlKXRoaXNbS2UraGVdPSR0W0tlJVJ0XX1yZXR1cm4gdGhpc307dmFyIG90PS9bXisvMC05QS1aYS16LV9d''@;'; put 'put ''L2c7ZnVuY3Rpb24gZHQoZ2UsY2Upe2NlPWNlfHwxLzA7Zm9yKHZhciBoZSx3ZT1nZS5sZW5ndGgsSmU9bnVsbCx0dD1bXSxLZT0wO0tlPHdlOysrS2Upe2lmKChoZT1nZS5jaGFyQ29kZUF0KEtlKSk+NTUyOTUmJmhlPDU3MzQ0KXtpZighSmUpe2lmKGhlPjU2MzE5KXsoY2UtPTMpPi0xJiZ0''@;'; put 'put ''dC5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihLZSsxPT09d2UpeyhjZS09Myk+LTEmJnR0LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfUplPWhlO2NvbnRpbnVlfWlmKGhlPDU2MzIwKXsoY2UtPTMpPi0xJiZ0dC5wdXNoKDIzOSwxOTEsMTg5KSxKZT1oZTtjb250aW51ZX1oZT02''@;'; put 'put ''NTUzNisoSmUtNTUyOTY8PDEwfGhlLTU2MzIwKX1lbHNlIEplJiYoY2UtPTMpPi0xJiZ0dC5wdXNoKDIzOSwxOTEsMTg5KTtpZihKZT1udWxsLGhlPDEyOCl7aWYoKGNlLT0xKTwwKWJyZWFrO3R0LnB1c2goaGUpfWVsc2UgaWYoaGU8MjA0OCl7aWYoKGNlLT0yKTwwKWJyZWFrO3R0LnB1c2go''@;'; put 'put ''aGU+PjZ8MTkyLDYzJmhlfDEyOCl9ZWxzZSBpZihoZTw2NTUzNil7aWYoKGNlLT0zKTwwKWJyZWFrO3R0LnB1c2goaGU+PjEyfDIyNCxoZT4+NiY2M3wxMjgsNjMmaGV8MTI4KX1lbHNle2lmKCEoaGU8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigo''@;'; put 'put ''Y2UtPTQpPDApYnJlYWs7dHQucHVzaChoZT4+MTh8MjQwLGhlPj4xMiY2M3wxMjgsaGU+PjYmNjN8MTI4LDYzJmhlfDEyOCl9fXJldHVybiB0dH1mdW5jdGlvbiB4ZShnZSl7cmV0dXJuIHkudG9CeXRlQXJyYXkoZnVuY3Rpb24gbHQoZ2Upe2lmKChnZT0oZ2U9Z2Uuc3BsaXQoIj0iKVswXSku''@;'; put 'put ''dHJpbSgpLnJlcGxhY2Uob3QsIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2dlLmxlbmd0aCU0IT0wOylnZSs9Ij0iO3JldHVybiBnZX0oZ2UpKX1mdW5jdGlvbiBqZShnZSxjZSxoZSx3ZSl7Zm9yKHZhciBKZT0wO0plPHdlJiYhKEplK2hlPj1jZS5sZW5ndGh8fEplPj1nZS5sZW5ndGgp''@;'; put 'put ''OysrSmUpY2VbSmUraGVdPWdlW0plXTtyZXR1cm4gSmV9ZnVuY3Rpb24gQWUoZ2UsY2Upe3JldHVybiBnZSBpbnN0YW5jZW9mIGNlfHxudWxsIT1nZSYmbnVsbCE9Z2UuY29uc3RydWN0b3ImJm51bGwhPWdlLmNvbnN0cnVjdG9yLm5hbWUmJmdlLmNvbnN0cnVjdG9yLm5hbWU9PT1jZS5uYW1l''@;'; put 'put ''fWZ1bmN0aW9uIERlKGdlKXtyZXR1cm4gZ2UhPWdlfXZhciBGZT1mdW5jdGlvbigpe2Zvcih2YXIgZ2U9IjAxMjM0NTY3ODlhYmNkZWYiLGNlPW5ldyBBcnJheSgyNTYpLGhlPTA7aGU8MTY7KytoZSlmb3IodmFyIHdlPTE2KmhlLEplPTA7SmU8MTY7KytKZSljZVt3ZStKZV09Z2VbaGVdK2dl''@;'; put 'put ''W0plXTtyZXR1cm4gY2V9KCl9LDEzMTQ0KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNjY3NDMpLGM9aCgxMTAwMikscz1oKDEwMDc2KSxBPWgoNDcxMTkpO2ZlLmV4cG9ydHM9QXx8eS5jYWxsKHMsYyl9LDEyMjA1KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNjY3NDMpLGM9''@;'; put 'put ''aCgxMTAwMikscz1oKDEzMTQ0KTtmZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHMoeSxjLGFyZ3VtZW50cyl9fSwxMTAwMihmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9RnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5fSwxMDA3NihmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9RnVu''@;'; put 'put ''Y3Rpb24ucHJvdG90eXBlLmNhbGx9LDczMTI2KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNjY3NDMpLGM9aCg2OTY3NSkscz1oKDEwMDc2KSxBPWgoMTMxNDQpO2ZlLmV4cG9ydHM9ZnVuY3Rpb24oQyl7aWYoQy5sZW5ndGg8MXx8ImZ1bmN0aW9uIiE9dHlwZW9mIENbMF0pdGhyb3cg''@;'; put 'put ''bmV3IGMoImEgZnVuY3Rpb24gaXMgcmVxdWlyZWQiKTtyZXR1cm4gQSh5LHMsQyl9fSw0NzExOShmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0JiZSZWZsZWN0LmFwcGx5fSwzODA3NShmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDcw''@;'; put 'put ''NDUzKSxjPWgoMTA0ODcpLHM9Yyh5KCJTdHJpbmcucHJvdG90eXBlLmluZGV4T2YiKSk7ZmUuZXhwb3J0cz1mdW5jdGlvbih2LEMpe3ZhciB3PXkodiwhIUMpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB3JiZzKHYsIi5wcm90b3R5cGUuIik+LTE/Yyh3KTp3fX0sMTA0ODcoZmUsaixoKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIHk9aCg5Njg5NyksYz1oKDMwNjU1KSxzPWgoNzMxMjYpLEE9aCgxMjIwNSk7ZmUuZXhwb3J0cz1mdW5jdGlvbihDKXt2YXIgdz1zKGFyZ3VtZW50cyksUz0xK0MubGVuZ3RoLShhcmd1bWVudHMubGVuZ3RoLTEpO3JldHVybiB5KHcsUz4wP1M6MCwhMCl9LGM/Yyhm''@;'; put 'put ''ZS5leHBvcnRzLCJhcHBseSIse3ZhbHVlOkF9KTpmZS5leHBvcnRzLmFwcGx5PUF9LDM2NTU2KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNzA0NTMpLGM9aCg3MzEyNikscz1jKFt5KCIlU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJSIpXSk7ZmUuZXhwb3J0cz1mdW5jdGlvbih2LEMp''@;'; put 'put ''e3ZhciB3PXkodiwhIUMpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB3JiZzKHYsIi5wcm90b3R5cGUuIik+LTE/Yyhbd10pOnd9fSw1NjE2OChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDkyODYxKS5CdWZmZXIsYz1oKDg4MzEwKS5UcmFuc2Zvcm0scz1oKDgzMTQxKS5JLEE9aCg1''@;'; put 'put ''NjY5OCksdj1oKDE1Mzc3KTtmdW5jdGlvbiBDKHcpe2MuY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPSJzdHJpbmciPT10eXBlb2Ygdyx0aGlzLmhhc2hNb2RlP3RoaXNbd109dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZmluYWwmJih0''@;'; put 'put ''aGlzLl9fZmluYWw9dGhpcy5fZmluYWwsdGhpcy5fZmluYWw9bnVsbCksdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9QShDLGMpLEMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih3LFMsTCl7dmFyIFI9dih3LFMpLHg9dGhpcy5fdXBkYXRlKFIpO3JldHVybiB0aGlz''@;'; put 'put ''Lmhhc2hNb2RlP3RoaXM6KEwmJih4PXRoaXMuX3RvU3RyaW5nKHgsTCkpLHgpfSxDLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbigpe30sQy5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1''@;'; put 'put ''bnN1cHBvcnRlZCBzdGF0ZSIpfSxDLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LEMucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigi''@;'; put 'put ''dHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sQy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih3LFMsTCl7dmFyIFI7dHJ5e3RoaXMuaGFzaE1vZGU/dGhpcy5fdXBkYXRlKHcpOnRoaXMucHVzaCh0aGlzLl91cGRhdGUodykpfWNhdGNoKHgpe1I9eH1maW5h''@;'; put 'put ''bGx5e0woUil9fSxDLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24odyl7dmFyIFM7dHJ5e3RoaXMucHVzaCh0aGlzLl9fZmluYWwoKSl9Y2F0Y2goTCl7Uz1MfXcoUyl9LEMucHJvdG90eXBlLl9maW5hbE9yRGlnZXN0PWZ1bmN0aW9uKHcpe3ZhciBTPXRoaXMuX19maW5hbCgpfHx5LmFsbG9j''@;'; put 'put ''KDApO3JldHVybiB3JiYoUz10aGlzLl90b1N0cmluZyhTLHcsITApKSxTfSxDLnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24odyxTLEwpe2lmKHRoaXMuX2RlY29kZXJ8fCh0aGlzLl9kZWNvZGVyPW5ldyBzKFMpLHRoaXMuX2VuY29kaW5nPVMpLHRoaXMuX2VuY29kaW5nIT09Uyl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoImNhblx1MjAxOXQgc3dpdGNoIGVuY29kaW5ncyIpO3ZhciBSPXRoaXMuX2RlY29kZXIud3JpdGUodyk7cmV0dXJuIEwmJihSKz10aGlzLl9kZWNvZGVyLmVuZCgpKSxSfSxmZS5leHBvcnRzPUN9LDE1NjIyKGZlLGosaCl7dmFyIHk9aCg0ODI4NykuQnVmZmVyO2Z1bmN0''@;'; put 'put ''aW9uIHooWSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChZKX1qLmlzQXJyYXk9ZnVuY3Rpb24gYyhZKXtyZXR1cm4gQXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5KFkpOiJbb2JqZWN0IEFycmF5XSI9PT16KFkpfSxqLmlzQm9vbGVhbj1mdW5jdGlvbiBzKFkpe3Jl''@;'; put 'put ''dHVybiJib29sZWFuIj09dHlwZW9mIFl9LGouaXNOdWxsPWZ1bmN0aW9uIEEoWSl7cmV0dXJuIG51bGw9PT1ZfSxqLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uIHYoWSl7cmV0dXJuIG51bGw9PVl9LGouaXNOdW1iZXI9ZnVuY3Rpb24gQyhZKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIFl9''@;'; put 'put ''LGouaXNTdHJpbmc9ZnVuY3Rpb24gdyhZKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFl9LGouaXNTeW1ib2w9ZnVuY3Rpb24gUyhZKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIFl9LGouaXNVbmRlZmluZWQ9ZnVuY3Rpb24gTChZKXtyZXR1cm4gdm9pZCAwPT09WX0sai5pc1JlZ0V4cD1mdW5j''@;'; put 'put ''dGlvbiBSKFkpe3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09eihZKX0sai5pc09iamVjdD1mdW5jdGlvbiB4KFkpe3JldHVybiJvYmplY3QiPT10eXBlb2YgWSYmbnVsbCE9PVl9LGouaXNEYXRlPWZ1bmN0aW9uIFUoWSl7cmV0dXJuIltvYmplY3QgRGF0ZV0iPT09eihZKX0sai5pc0Vycm9y''@;'; put 'put ''PWZ1bmN0aW9uIEgoWSl7cmV0dXJuIltvYmplY3QgRXJyb3JdIj09PXooWSl8fFkgaW5zdGFuY2VvZiBFcnJvcn0sai5pc0Z1bmN0aW9uPWZ1bmN0aW9uIFYoWSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFl9LGouaXNQcmltaXRpdmU9ZnVuY3Rpb24gTihZKXtyZXR1cm4gbnVsbD09PVl8''@;'; put 'put ''fCJib29sZWFuIj09dHlwZW9mIFl8fCJudW1iZXIiPT10eXBlb2YgWXx8InN0cmluZyI9PXR5cGVvZiBZfHwic3ltYm9sIj09dHlwZW9mIFl8fHR5cGVvZiBZPiJ1In0sai5pc0J1ZmZlcj15LmlzQnVmZmVyfSw2MTMyNChmZSxqLGgpe3ZhciB5PWgoNDgyODcpLkJ1ZmZlcixjPWgoODY3Mjkp''@;'; put 'put ''LHM9aCg5MjgwMSk7ZmUuZXhwb3J0cz1mdW5jdGlvbihTKXtyZXR1cm4gbmV3IHYoUyl9O3ZhciBBPXtzZWNwMjU2azE6e25hbWU6InNlY3AyNTZrMSIsYnl0ZUxlbmd0aDozMn0sc2VjcDIyNHIxOntuYW1lOiJwMjI0IixieXRlTGVuZ3RoOjI4fSxwcmltZTI1NnYxOntuYW1lOiJwMjU2Iixi''@;'; put 'put ''eXRlTGVuZ3RoOjMyfSxwcmltZTE5MnYxOntuYW1lOiJwMTkyIixieXRlTGVuZ3RoOjI0fSxlZDI1NTE5OntuYW1lOiJlZDI1NTE5IixieXRlTGVuZ3RoOjMyfSxzZWNwMzg0cjE6e25hbWU6InAzODQiLGJ5dGVMZW5ndGg6NDh9LHNlY3A1MjFyMTp7bmFtZToicDUyMSIsYnl0ZUxlbmd0aDo2''@;'; put 'put ''Nn19O2Z1bmN0aW9uIHYodyl7dGhpcy5jdXJ2ZVR5cGU9QVt3XSx0aGlzLmN1cnZlVHlwZXx8KHRoaXMuY3VydmVUeXBlPXtuYW1lOnd9KSx0aGlzLmN1cnZlPW5ldyBjLmVjKHRoaXMuY3VydmVUeXBlLm5hbWUpLHRoaXMua2V5cz12b2lkIDB9ZnVuY3Rpb24gQyh3LFMsTCl7QXJyYXkuaXNB''@;'; put 'put ''cnJheSh3KXx8KHc9dy50b0FycmF5KCkpO3ZhciBSPW5ldyB5KHcpO2lmKEwmJlIubGVuZ3RoPEwpe3ZhciB4PW5ldyB5KEwtUi5sZW5ndGgpO3guZmlsbCgwKSxSPXkuY29uY2F0KFt4LFJdKX1yZXR1cm4gUz9SLnRvU3RyaW5nKFMpOlJ9QS5wMjI0PUEuc2VjcDIyNHIxLEEucDI1Nj1BLnNl''@;'; put 'put ''Y3AyNTZyMT1BLnByaW1lMjU2djEsQS5wMTkyPUEuc2VjcDE5MnIxPUEucHJpbWUxOTJ2MSxBLnAzODQ9QS5zZWNwMzg0cjEsQS5wNTIxPUEuc2VjcDUyMXIxLHYucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbih3LFMpe3JldHVybiB0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQ''@;'; put 'put ''YWlyKCksdGhpcy5nZXRQdWJsaWNLZXkodyxTKX0sdi5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbih3LFMsTCl7cmV0dXJuIFM9U3x8InV0ZjgiLHkuaXNCdWZmZXIodyl8fCh3PW5ldyB5KHcsUykpLEModGhpcy5jdXJ2ZS5rZXlGcm9tUHVibGljKHcpLmdldFB1YmxpYygpLm11''@;'; put 'put ''bCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpKS5nZXRYKCksTCx0aGlzLmN1cnZlVHlwZS5ieXRlTGVuZ3RoKX0sdi5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKHcsUyl7dmFyIEw9dGhpcy5rZXlzLmdldFB1YmxpYygiY29tcHJlc3NlZCI9PT1TLCEwKTtyZXR1cm4iaHlicmlkIj09''@;'; put 'put ''PVMmJihMWzBdPUxbTC5sZW5ndGgtMV0lMj83OjYpLEMoTCx3KX0sdi5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbih3KXtyZXR1cm4gQyh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpLHcpfSx2LnByb3RvdHlwZS5zZXRQdWJsaWNLZXk9ZnVuY3Rpb24odyxTKXtyZXR1cm4gUz1TfHwi''@;'; put 'put ''dXRmOCIseS5pc0J1ZmZlcih3KXx8KHc9bmV3IHkodyxTKSksdGhpcy5rZXlzLl9pbXBvcnRQdWJsaWModyksdGhpc30sdi5wcm90b3R5cGUuc2V0UHJpdmF0ZUtleT1mdW5jdGlvbih3LFMpe1M9U3x8InV0ZjgiLHkuaXNCdWZmZXIodyl8fCh3PW5ldyB5KHcsUykpO3ZhciBMPW5ldyBzKHcp''@;'; put 'put ''O3JldHVybiBMPUwudG9TdHJpbmcoMTYpLHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmtleXMuX2ltcG9ydFByaXZhdGUoTCksdGhpc319LDkyODAxKGZlLGosaCl7IWZ1bmN0aW9uKHksYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHMoWCxmKXtpZighWCl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoZnx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBBKFgsZil7WC5zdXBlcl89Zjt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9Zi5wcm90b3R5cGUsWC5wcm90b3R5cGU9bmV3IGIsWC5wcm90b3R5cGUuY29uc3RydWN0b3I9WH1mdW5jdGlvbiB2KFgsZixiKXtp''@;'; put 'put ''Zih2LmlzQk4oWCkpcmV0dXJuIFg7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVgmJigoImxlIj09PWZ8fCJiZSI9PT1mKSYmKGI9ZixmPTEwKSx0aGlzLl9pbml0KFh8fDAsZnx8MTAsYnx8ImJlIikpfXZhciBDOyJv''@;'; put 'put ''YmplY3QiPT10eXBlb2YgeT95LmV4cG9ydHM9djpjLkJOPXYsdi5CTj12LHYud29yZFNpemU9MjY7dHJ5e0M9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOmgoNzc5NjUpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gdyhYLGYpe3ZhciBi''@;'; put 'put ''PVguY2hhckNvZGVBdChmKTtyZXR1cm4gYj49NjUmJmI8PTcwP2ItNTU6Yj49OTcmJmI8PTEwMj9iLTg3OmItNDgmMTV9ZnVuY3Rpb24gUyhYLGYsYil7dmFyIGs9dyhYLGIpO3JldHVybiBiLTE+PWYmJihrfD13KFgsYi0xKTw8NCksa31mdW5jdGlvbiBMKFgsZixiLGspe2Zvcih2YXIgTT0w''@;'; put 'put ''LEI9TWF0aC5taW4oWC5sZW5ndGgsYiksSz1mO0s8QjtLKyspe3ZhciBHPVguY2hhckNvZGVBdChLKS00ODtNKj1rLE0rPUc+PTQ5P0ctNDkrMTA6Rz49MTc/Ry0xNysxMDpHfXJldHVybiBNfXYuaXNCTj1mdW5jdGlvbihmKXtyZXR1cm4gZiBpbnN0YW5jZW9mIHZ8fG51bGwhPT1mJiYib2Jq''@;'; put 'put ''ZWN0Ij09dHlwZW9mIGYmJmYuY29uc3RydWN0b3Iud29yZFNpemU9PT12LndvcmRTaXplJiZBcnJheS5pc0FycmF5KGYud29yZHMpfSx2Lm1heD1mdW5jdGlvbihmLGIpe3JldHVybiBmLmNtcChiKT4wP2Y6Yn0sdi5taW49ZnVuY3Rpb24oZixiKXtyZXR1cm4gZi5jbXAoYik8MD9mOmJ9LHYu''@;'; put 'put ''cHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGYsYixrKXtpZigibnVtYmVyIj09dHlwZW9mIGYpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZixiLGspO2lmKCJvYmplY3QiPT10eXBlb2YgZilyZXR1cm4gdGhpcy5faW5pdEFycmF5KGYsYixrKTsiaGV4Ij09PWImJihiPTE2KSxzKGI9PT0oMHxi''@;'; put 'put ''KSYmYj49MiYmYjw9MzYpO3ZhciBNPTA7Ii0iPT09KGY9Zi50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihNKyssdGhpcy5uZWdhdGl2ZT0xKSxNPGYubGVuZ3RoJiYoMTY9PT1iP3RoaXMuX3BhcnNlSGV4KGYsTSxrKToodGhpcy5fcGFyc2VCYXNlKGYsYixNKSwibGUiPT09''@;'; put 'put ''ayYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIsaykpKX0sdi5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZixiLGspe2Y8MCYmKHRoaXMubmVnYXRpdmU9MSxmPS1mKSxmPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZmXSx0aGlzLmxlbmd0aD0xKTpmPDQ1''@;'; put 'put ''MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmYsZi82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KHMoZjw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZmLGYvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09''@;'; put 'put ''PWsmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLGspfSx2LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGYsYixrKXtpZihzKCJudW1iZXIiPT10eXBlb2YgZi5sZW5ndGgpLGYubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7''@;'; put 'put ''dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGYubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIE09MDtNPHRoaXMubGVuZ3RoO00rKyl0aGlzLndvcmRzW01dPTA7dmFyIEIsSyxHPTA7aWYoImJlIj09PWspZm9yKE09Zi5sZW5ndGgtMSxCPTA7TT49MDtN''@;'; put 'put ''LT0zKXRoaXMud29yZHNbQl18PShLPWZbTV18ZltNLTFdPDw4fGZbTS0yXTw8MTYpPDxHJjY3MTA4ODYzLHRoaXMud29yZHNbQisxXT1LPj4+MjYtRyY2NzEwODg2MywoRys9MjQpPj0yNiYmKEctPTI2LEIrKyk7ZWxzZSBpZigibGUiPT09aylmb3IoTT0wLEI9MDtNPGYubGVuZ3RoO00rPTMp''@;'; put 'put ''dGhpcy53b3Jkc1tCXXw9KEs9ZltNXXxmW00rMV08PDh8ZltNKzJdPDwxNik8PEcmNjcxMDg4NjMsdGhpcy53b3Jkc1tCKzFdPUs+Pj4yNi1HJjY3MTA4ODYzLChHKz0yNCk+PTI2JiYoRy09MjYsQisrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rp''@;'; put 'put ''b24oZixiLGspe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZi5sZW5ndGgtYikvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTT0wO008dGhpcy5sZW5ndGg7TSsrKXRoaXMud29yZHNbTV09MDt2YXIgRyxCPTAsSz0wO2lmKCJiZSI9PT1rKWZvcihNPWYubGVu''@;'; put 'put ''Z3RoLTE7TT49YjtNLT0yKUc9UyhmLGIsTSk8PEIsdGhpcy53b3Jkc1tLXXw9NjcxMDg4NjMmRyxCPj0xOD8oQi09MTgsdGhpcy53b3Jkc1tLKz0xXXw9Rz4+PjI2KTpCKz04O2Vsc2UgZm9yKE09KGYubGVuZ3RoLWIpJTI9PTA/YisxOmI7TTxmLmxlbmd0aDtNKz0yKUc9UyhmLGIsTSk8PEIs''@;'; put 'put ''dGhpcy53b3Jkc1tLXXw9NjcxMDg4NjMmRyxCPj0xOD8oQi09MTgsdGhpcy53b3Jkc1tLKz0xXXw9Rz4+PjI2KTpCKz04O3RoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihmLGIsayl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIE09MCxC''@;'; put 'put ''PTE7Qjw9NjcxMDg4NjM7Qio9YilNKys7TS0tLEI9Qi9ifDA7Zm9yKHZhciBLPWYubGVuZ3RoLWssRz1LJU0sRD1NYXRoLm1pbihLLEstRykrayxwPTAsST1rO0k8RDtJKz1NKXA9TChmLEksSStNLGIpLHRoaXMuaW11bG4oQiksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNb''@;'; put 'put ''MF0rPXA6dGhpcy5faWFkZG4ocCk7aWYoMCE9PUcpe3ZhciB1ZT0xO2ZvcihwPUwoZixJLGYubGVuZ3RoLGIpLEk9MDtJPEc7SSsrKXVlKj1iO3RoaXMuaW11bG4odWUpLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApfXRoaXMuc3RyaXAo''@;'; put 'put ''KX0sdi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihmKXtmLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspZi53b3Jkc1tiXT10aGlzLndvcmRzW2JdO2YubGVuZ3RoPXRoaXMubGVuZ3RoLGYubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxm''@;'; put 'put ''LnJlZD10aGlzLnJlZH0sdi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZj1uZXcgdihudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGYpLGZ9LHYucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZil7Zm9yKDt0aGlzLmxlbmd0aDxmOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7''@;'; put 'put ''cmV0dXJuIHRoaXN9LHYucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdi5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIFI9WyIi''@;'; put 'put ''LCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAi''@;'; put 'put ''LCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0seD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxVPVswLDAsMzM1''@;'; put 'put ''NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAx''@;'; put 'put ''LDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFYoWCxmLGIpe2IubmVnYXRpdmU9Zi5uZWdh''@;'; put 'put ''dGl2ZV5YLm5lZ2F0aXZlO3ZhciBrPVgubGVuZ3RoK2YubGVuZ3RofDA7Yi5sZW5ndGg9ayxrPWstMXwwO3ZhciBNPTB8WC53b3Jkc1swXSxCPTB8Zi53b3Jkc1swXSxLPU0qQixEPUsvNjcxMDg4NjR8MDtiLndvcmRzWzBdPTY3MTA4ODYzJks7Zm9yKHZhciBwPTE7cDxrO3ArKyl7Zm9yKHZh''@;'; put 'put ''ciBJPUQ+Pj4yNix1ZT02NzEwODg2MyZELG5lPU1hdGgubWluKHAsZi5sZW5ndGgtMSksX2U9TWF0aC5tYXgoMCxwLVgubGVuZ3RoKzEpO19lPD1uZTtfZSsrKUkrPShLPShNPTB8WC53b3Jkc1twLV9lfDBdKSooQj0wfGYud29yZHNbX2VdKSt1ZSkvNjcxMDg4NjR8MCx1ZT02NzEwODg2MyZL''@;'; put 'put ''O2Iud29yZHNbcF09MHx1ZSxEPTB8SX1yZXR1cm4gMCE9PUQ/Yi53b3Jkc1twXT0wfEQ6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9di5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZixiKXt2YXIgaztpZihiPTB8Ynx8MSwxNj09PShmPWZ8fDEwKXx8ImhleCI9PT1mKXtrPSIiO2Zvcih2YXIg''@;'; put 'put ''TT0wLEI9MCxLPTA7Szx0aGlzLmxlbmd0aDtLKyspe3ZhciBHPXRoaXMud29yZHNbS10sRD0oMTY3NzcyMTUmKEc8PE18QikpLnRvU3RyaW5nKDE2KTtCPUc+Pj4yNC1NJjE2Nzc3MjE1LChNKz0yKT49MjYmJihNLT0yNixLLS0pLGs9MCE9PUJ8fEshPT10aGlzLmxlbmd0aC0xP1JbNi1ELmxl''@;'; put 'put ''bmd0aF0rRCtrOkQra31mb3IoMCE9PUImJihrPUIudG9TdHJpbmcoMTYpK2spO2subGVuZ3RoJWIhPT0wOylrPSIwIitrO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKGs9Ii0iK2spLGt9aWYoZj09PSgwfGYpJiZmPj0yJiZmPD0zNil7dmFyIHA9eFtmXSxJPVVbZl07az0iIjt2YXIgdWU9''@;'; put 'put ''dGhpcy5jbG9uZSgpO2Zvcih1ZS5uZWdhdGl2ZT0wOyF1ZS5pc1plcm8oKTspe3ZhciBuZT11ZS5tb2RuKEkpLnRvU3RyaW5nKGYpO2s9KHVlPXVlLmlkaXZuKEkpKS5pc1plcm8oKT9uZStrOlJbcC1uZS5sZW5ndGhdK25lK2t9Zm9yKHRoaXMuaXNaZXJvKCkmJihrPSIwIitrKTtrLmxlbmd0''@;'; put 'put ''aCViIT09MDspaz0iMCIraztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihrPSItIitrKSxrfXMoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdi5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZj10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5s''@;'; put 'put ''ZW5ndGg/Zis9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2YrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZzKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRv''@;'; put 'put ''IDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZjpmfSx2LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHYucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGYsYil7cmV0dXJuIHModHlwZW9mIEM8InUiKSx0aGlzLnRvQXJyYXlMaWtl''@;'; put 'put ''KEMsZixiKX0sdi5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihmLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGYsYil9LHYucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGYsYixrKXt2YXIgTT10aGlzLmJ5dGVMZW5ndGgoKSxCPWt8fE1hdGgubWF4KDEsTSk7cyhN''@;'; put 'put ''PD1CLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIikscyhCPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRCxwLEs9ImxlIj09PWIsRz1uZXcgZihCKSxJPXRoaXMuY2xvbmUoKTtpZihLKXtmb3IocD0wOyFJLmlzWmVybygp''@;'; put 'put ''O3ArKylEPUkuYW5kbG4oMjU1KSxJLml1c2hybig4KSxHW3BdPUQ7Zm9yKDtwPEI7cCsrKUdbcF09MH1lbHNle2ZvcihwPTA7cDxCLU07cCsrKUdbcF09MDtmb3IocD0wOyFJLmlzWmVybygpO3ArKylEPUkuYW5kbG4oMjU1KSxJLml1c2hybig4KSxHW0ItcC0xXT1EfXJldHVybiBHfSx2LnBy''@;'; put 'put ''b3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZil7cmV0dXJuIDMyLU1hdGguY2x6MzIoZil9OmZ1bmN0aW9uKGYpe3ZhciBiPWYsaz0wO3JldHVybiBiPj00MDk2JiYoays9MTMsYj4+Pj0xMyksYj49NjQmJihrKz03LGI+Pj49NyksYj49OCYmKGsrPTQsYj4+Pj00KSxi''@;'; put 'put ''Pj0yJiYoays9MixiPj4+PTIpLGsrYn0sdi5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGYpe2lmKDA9PT1mKXJldHVybiAyNjt2YXIgYj1mLGs9MDtyZXR1cm4hKDgxOTEmYikmJihrKz0xMyxiPj4+PTEzKSwhKDEyNyZiKSYmKGsrPTcsYj4+Pj03KSwhKDE1JmIpJiYoays9NCxiPj4+''@;'; put 'put ''PTQpLCEoMyZiKSYmKGsrPTIsYj4+Pj0yKSwhKDEmYikmJmsrKyxrfSx2LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx2LnByb3RvdHlwZS56''@;'; put 'put ''ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBmPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgaz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihmKz1rLDI2IT09aylicmVha31yZXR1cm4gZn0sdi5wcm90b3R5cGUuYnl0ZUxl''@;'; put 'put ''bmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdi5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGYpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGYpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdi5wcm90b3R5cGUu''@;'; put 'put ''ZnJvbVR3b3M9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMudGVzdG4oZi0xKT90aGlzLm5vdG4oZikuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdi5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHYucHJvdG90eXBlLm5lZz1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx2LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx2LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGYpe2Zvcig7dGhpcy5sZW5ndGg8Zi5sZW5ndGg7KXRo''@;'; put 'put ''aXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPGYubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18Zi53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZil7cmV0dXJuIHMoMD09PSh0aGlzLm5lZ2F0''@;'; put 'put ''aXZlfGYubmVnYXRpdmUpKSx0aGlzLml1b3IoZil9LHYucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmxlbmd0aD5mLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGYpOmYuY2xvbmUoKS5pb3IodGhpcyl9LHYucHJvdG90eXBlLnVvcj1mdW5jdGlvbihmKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5sZW5ndGg+Zi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZik6Zi5jbG9uZSgpLml1b3IodGhpcyl9LHYucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGYpe3ZhciBiO2I9dGhpcy5sZW5ndGg+Zi5sZW5ndGg/Zjp0aGlzO2Zvcih2YXIgaz0wO2s8Yi5sZW5ndGg7aysrKXRoaXMud29yZHNb''@;'; put 'put ''a109dGhpcy53b3Jkc1trXSZmLndvcmRzW2tdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZil7cmV0dXJuIHMoMD09PSh0aGlzLm5lZ2F0aXZlfGYubmVnYXRpdmUpKSx0aGlzLml1YW5kKGYpfSx2LnByb3RvdHlw''@;'; put 'put ''ZS5hbmQ9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMubGVuZ3RoPmYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGYpOmYuY2xvbmUoKS5pYW5kKHRoaXMpfSx2LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmxlbmd0aD5mLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQo''@;'; put 'put ''Zik6Zi5jbG9uZSgpLml1YW5kKHRoaXMpfSx2LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihmKXt2YXIgYixrO3RoaXMubGVuZ3RoPmYubGVuZ3RoPyhiPXRoaXMsaz1mKTooYj1mLGs9dGhpcyk7Zm9yKHZhciBNPTA7TTxrLmxlbmd0aDtNKyspdGhpcy53b3Jkc1tNXT1iLndvcmRzW01dXmsu''@;'; put 'put ''d29yZHNbTV07aWYodGhpcyE9PWIpZm9yKDtNPGIubGVuZ3RoO00rKyl0aGlzLndvcmRzW01dPWIud29yZHNbTV07cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihmKXtyZXR1cm4gcygwPT09KHRoaXMubmVnYXRpdmV8''@;'; put 'put ''Zi5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZil9LHYucHJvdG90eXBlLnhvcj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zi5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZik6Zi5jbG9uZSgpLml4b3IodGhpcyl9LHYucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZil7cmV0dXJuIHRo''@;'; put 'put ''aXMubGVuZ3RoPmYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihmKTpmLmNsb25lKCkuaXV4b3IodGhpcyl9LHYucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGYpe3MoIm51bWJlciI9PXR5cGVvZiBmJiZmPj0wKTt2YXIgYj0wfE1hdGguY2VpbChmLzI2KSxrPWYlMjY7dGhpcy5fZXhwYW5k''@;'; put 'put ''KGIpLGs+MCYmYi0tO2Zvcih2YXIgTT0wO008YjtNKyspdGhpcy53b3Jkc1tNXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tNXTtmb3Ioaz4wJiYodGhpcy53b3Jkc1tNXT1+dGhpcy53b3Jkc1tNXSY2NzEwODg2Mz4+MjYtayxNKyspO008dGhpcy5sZW5ndGg7TSsrKXRoaXMud29yZHNbTV09MDty''@;'; put 'put ''ZXR1cm4gdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZil9LHYucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZixiKXtzKCJudW1iZXIiPT10eXBlb2YgZiYmZj49MCk7dmFyIGs9Zi8yNnwwLE09ZiUyNjtyZXR1cm4g''@;'; put 'put ''dGhpcy5fZXhwYW5kKGsrMSksdGhpcy53b3Jkc1trXT1iP3RoaXMud29yZHNba118MTw8TTp0aGlzLndvcmRzW2tdJn4oMTw8TSksdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGYpe3ZhciBiLGssTTtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWYubmVnYXRpdmUp''@;'; put 'put ''cmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihmKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1mLm5lZ2F0aXZlKXJldHVybiBmLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIoZiksZi5uZWdhdGl2ZT0xLGIuX25vcm1T''@;'; put 'put ''aWduKCk7dGhpcy5sZW5ndGg+Zi5sZW5ndGg/KGs9dGhpcyxNPWYpOihrPWYsTT10aGlzKTtmb3IodmFyIEI9MCxLPTA7SzxNLmxlbmd0aDtLKyspdGhpcy53b3Jkc1tLXT02NzEwODg2MyYoYj0oMHxrLndvcmRzW0tdKSsoMHxNLndvcmRzW0tdKStCKSxCPWI+Pj4yNjtmb3IoOzAhPT1CJiZL''@;'; put 'put ''PGsubGVuZ3RoO0srKyl0aGlzLndvcmRzW0tdPTY3MTA4ODYzJihiPSgwfGsud29yZHNbS10pK0IpLEI9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPWsubGVuZ3RoLDAhPT1CKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPUIsdGhpcy5sZW5ndGgrKztlbHNlIGlmKGshPT10aGlzKWZvcig7SzxrLmxl''@;'; put 'put ''bmd0aDtLKyspdGhpcy53b3Jkc1tLXT1rLndvcmRzW0tdO3JldHVybiB0aGlzfSx2LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZil7dmFyIGI7cmV0dXJuIDAhPT1mLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZi5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIoZiksZi5uZWdhdGl2ZV49MSxi''@;'; put 'put ''KTowPT09Zi5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPWYuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5mLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChmKTpmLmNsb25lKCkuaWFkZCh0aGlzKX0sdi5wcm90b3R5cGUuaXN1''@;'; put 'put ''Yj1mdW5jdGlvbihmKXtpZigwIT09Zi5uZWdhdGl2ZSl7Zi5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChmKTtyZXR1cm4gZi5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZiksdGhpcy5uZWdh''@;'; put 'put ''dGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIE0sQixrPXRoaXMuY21wKGYpO2lmKDA9PT1rKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztrPjA/KE09dGhpcyxCPWYpOihNPWYsQj10aGlzKTtmb3IodmFyIEs9MCxHPTA7RzxCLmxl''@;'; put 'put ''bmd0aDtHKyspSz0oYj0oMHxNLndvcmRzW0ddKS0oMHxCLndvcmRzW0ddKStLKT4+MjYsdGhpcy53b3Jkc1tHXT02NzEwODg2MyZiO2Zvcig7MCE9PUsmJkc8TS5sZW5ndGg7RysrKUs9KGI9KDB8TS53b3Jkc1tHXSkrSyk+PjI2LHRoaXMud29yZHNbR109NjcxMDg4NjMmYjtpZigwPT09SyYm''@;'; put 'put ''RzxNLmxlbmd0aCYmTSE9PXRoaXMpZm9yKDtHPE0ubGVuZ3RoO0crKyl0aGlzLndvcmRzW0ddPU0ud29yZHNbR107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEcpLE0hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLnN1''@;'; put 'put ''Yj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZil9O3ZhciBOPWZ1bmN0aW9uKGYsYixrKXt2YXIgRCxwLEksTT1mLndvcmRzLEI9Yi53b3JkcyxLPWsud29yZHMsRz0wLHVlPTB8TVswXSxuZT04MTkxJnVlLF9lPXVlPj4+MTMsUGU9MHxNWzFdLG90PTgxOTEmUGUsbHQ9''@;'; put 'put ''UGU+Pj4xMyxkdD0wfE1bMl0sUmU9ODE5MSZkdCxhZT1kdD4+PjEzLHhlPTB8TVszXSxqZT04MTkxJnhlLEFlPXhlPj4+MTMsRGU9MHxNWzRdLEZlPTgxOTEmRGUsZ2U9RGU+Pj4xMyxjZT0wfE1bNV0saGU9ODE5MSZjZSx3ZT1jZT4+PjEzLEplPTB8TVs2XSx0dD04MTkxJkplLEtlPUplPj4+''@;'; put 'put ''MTMsJHQ9MHxNWzddLFJ0PTgxOTEmJHQsTHQ9JHQ+Pj4xMyxHdD0wfE1bOF0sZ3Q9ODE5MSZHdCxYdD1HdD4+PjEzLExyPTB8TVs5XSxsbj04MTkxJkxyLE9uPUxyPj4+MTMsUXI9MHxCWzBdLHRyPTgxOTEmUXIsSG49UXI+Pj4xMyxPbz0wfEJbMV0sdXI9ODE5MSZPbyxabj1Pbz4+PjEzLFNu''@;'; put 'put ''PTB8QlsyXSx4cj04MTkxJlNuLFR0PVNuPj4+MTMsQXI9MHxCWzNdLF9uPTgxOTEmQXIsWnQ9QXI+Pj4xMyxObj0wfEJbNF0scHQ9ODE5MSZObixwbj1Obj4+PjEzLE1pPTB8Qls1XSxHZT04MTkxJk1pLFV0PU1pPj4+MTMsdnI9MHxCWzZdLHh0PTgxOTEmdnIsQnQ9dnI+Pj4xMyx6bj0wfEJb''@;'; put 'put ''N10sR249ODE5MSZ6bix5bj16bj4+PjEzLHZpPTB8Qls4XSxycj04MTkxJnZpLGhyPXZpPj4+MTMscG89MHxCWzldLHZuPTgxOTEmcG8sQm49cG8+Pj4xMztrLm5lZ2F0aXZlPWYubmVnYXRpdmVeYi5uZWdhdGl2ZSxrLmxlbmd0aD0xOTt2YXIgamE9KEcrKEQ9TWF0aC5pbXVsKG5lLHRyKSl8''@;'; put 'put ''MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChuZSxIbikpK01hdGguaW11bChfZSx0cil8MCkpPDwxMyl8MDtHPSgoST1NYXRoLmltdWwoX2UsSG4pKSsocD4+PjEzKXwwKSsoamE+Pj4yNil8MCxqYSY9NjcxMDg4NjMsRD1NYXRoLmltdWwob3QsdHIpLHA9KHA9TWF0aC5pbXVsKG90LEhuKSkr''@;'; put 'put ''TWF0aC5pbXVsKGx0LHRyKXwwLEk9TWF0aC5pbXVsKGx0LEhuKTt2YXIgam89KEcrKEQ9RCtNYXRoLmltdWwobmUsdXIpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxabil8MCkrTWF0aC5pbXVsKF9lLHVyKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLFpuKXww''@;'; put 'put ''KSsocD4+PjEzKXwwKSsoam8+Pj4yNil8MCxqbyY9NjcxMDg4NjMsRD1NYXRoLmltdWwoUmUsdHIpLHA9KHA9TWF0aC5pbXVsKFJlLEhuKSkrTWF0aC5pbXVsKGFlLHRyKXwwLEk9TWF0aC5pbXVsKGFlLEhuKSxEPUQrTWF0aC5pbXVsKG90LHVyKXwwLHA9KHA9cCtNYXRoLmltdWwob3QsWm4p''@;'; put 'put ''fDApK01hdGguaW11bChsdCx1cil8MCxJPUkrTWF0aC5pbXVsKGx0LFpuKXwwO3ZhciBYcj0oRysoRD1EK01hdGguaW11bChuZSx4cil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLFR0KXwwKStNYXRoLmltdWwoX2UseHIpfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwo''@;'; put 'put ''X2UsVHQpfDApKyhwPj4+MTMpfDApKyhYcj4+PjI2KXwwLFhyJj02NzEwODg2MyxEPU1hdGguaW11bChqZSx0cikscD0ocD1NYXRoLmltdWwoamUsSG4pKStNYXRoLmltdWwoQWUsdHIpfDAsST1NYXRoLmltdWwoQWUsSG4pLEQ9RCtNYXRoLmltdWwoUmUsdXIpfDAscD0ocD1wK01hdGguaW11''@;'; put 'put ''bChSZSxabil8MCkrTWF0aC5pbXVsKGFlLHVyKXwwLEk9SStNYXRoLmltdWwoYWUsWm4pfDAsRD1EK01hdGguaW11bChvdCx4cil8MCxwPShwPXArTWF0aC5pbXVsKG90LFR0KXwwKStNYXRoLmltdWwobHQseHIpfDAsST1JK01hdGguaW11bChsdCxUdCl8MDt2YXIgZWE9KEcrKEQ9RCtNYXRo''@;'; put 'put ''LmltdWwobmUsX24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxadCl8MCkrTWF0aC5pbXVsKF9lLF9uKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLFp0KXwwKSsocD4+PjEzKXwwKSsoZWE+Pj4yNil8MCxlYSY9NjcxMDg4NjMsRD1NYXRoLmltdWwoRmUsdHIp''@;'; put 'put ''LHA9KHA9TWF0aC5pbXVsKEZlLEhuKSkrTWF0aC5pbXVsKGdlLHRyKXwwLEk9TWF0aC5pbXVsKGdlLEhuKSxEPUQrTWF0aC5pbXVsKGplLHVyKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWm4pfDApK01hdGguaW11bChBZSx1cil8MCxJPUkrTWF0aC5pbXVsKEFlLFpuKXwwLEQ9RCtNYXRoLmlt''@;'; put 'put ''dWwoUmUseHIpfDAscD0ocD1wK01hdGguaW11bChSZSxUdCl8MCkrTWF0aC5pbXVsKGFlLHhyKXwwLEk9SStNYXRoLmltdWwoYWUsVHQpfDAsRD1EK01hdGguaW11bChvdCxfbil8MCxwPShwPXArTWF0aC5pbXVsKG90LFp0KXwwKStNYXRoLmltdWwobHQsX24pfDAsST1JK01hdGguaW11bChs''@;'; put 'put ''dCxadCl8MDt2YXIgcmE9KEcrKEQ9RCtNYXRoLmltdWwobmUscHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxwbil8MCkrTWF0aC5pbXVsKF9lLHB0KXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLHBuKXwwKSsocD4+PjEzKXwwKSsocmE+Pj4yNil8MCxyYSY9''@;'; put 'put ''NjcxMDg4NjMsRD1NYXRoLmltdWwoaGUsdHIpLHA9KHA9TWF0aC5pbXVsKGhlLEhuKSkrTWF0aC5pbXVsKHdlLHRyKXwwLEk9TWF0aC5pbXVsKHdlLEhuKSxEPUQrTWF0aC5pbXVsKEZlLHVyKXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsWm4pfDApK01hdGguaW11bChnZSx1cil8MCxJPUkrTWF0''@;'; put 'put ''aC5pbXVsKGdlLFpuKXwwLEQ9RCtNYXRoLmltdWwoamUseHIpfDAscD0ocD1wK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKEFlLHhyKXwwLEk9SStNYXRoLmltdWwoQWUsVHQpfDAsRD1EK01hdGguaW11bChSZSxfbil8MCxwPShwPXArTWF0aC5pbXVsKFJlLFp0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoYWUsX24pfDAsST1JK01hdGguaW11bChhZSxadCl8MCxEPUQrTWF0aC5pbXVsKG90LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwob3QscG4pfDApK01hdGguaW11bChsdCxwdCl8MCxJPUkrTWF0aC5pbXVsKGx0LHBuKXwwO3ZhciBjYT0oRysoRD1EK01hdGguaW11bChuZSxHZSl8MCl8MCkr''@;'; put 'put ''KCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLFV0KXwwKStNYXRoLmltdWwoX2UsR2UpfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoX2UsVXQpfDApKyhwPj4+MTMpfDApKyhjYT4+PjI2KXwwLGNhJj02NzEwODg2MyxEPU1hdGguaW11bCh0dCx0cikscD0ocD1NYXRoLmltdWwodHQs''@;'; put 'put ''SG4pKStNYXRoLmltdWwoS2UsdHIpfDAsST1NYXRoLmltdWwoS2UsSG4pLEQ9RCtNYXRoLmltdWwoaGUsdXIpfDAscD0ocD1wK01hdGguaW11bChoZSxabil8MCkrTWF0aC5pbXVsKHdlLHVyKXwwLEk9SStNYXRoLmltdWwod2UsWm4pfDAsRD1EK01hdGguaW11bChGZSx4cil8MCxwPShwPXAr''@;'; put 'put ''TWF0aC5pbXVsKEZlLFR0KXwwKStNYXRoLmltdWwoZ2UseHIpfDAsST1JK01hdGguaW11bChnZSxUdCl8MCxEPUQrTWF0aC5pbXVsKGplLF9uKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWnQpfDApK01hdGguaW11bChBZSxfbil8MCxJPUkrTWF0aC5pbXVsKEFlLFp0KXwwLEQ9RCtNYXRoLmlt''@;'; put 'put ''dWwoUmUscHQpfDAscD0ocD1wK01hdGguaW11bChSZSxwbil8MCkrTWF0aC5pbXVsKGFlLHB0KXwwLEk9SStNYXRoLmltdWwoYWUscG4pfDAsRD1EK01hdGguaW11bChvdCxHZSl8MCxwPShwPXArTWF0aC5pbXVsKG90LFV0KXwwKStNYXRoLmltdWwobHQsR2UpfDAsST1JK01hdGguaW11bChs''@;'; put 'put ''dCxVdCl8MDt2YXIgQ2k9KEcrKEQ9RCtNYXRoLmltdWwobmUseHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxCdCl8MCkrTWF0aC5pbXVsKF9lLHh0KXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLEJ0KXwwKSsocD4+PjEzKXwwKSsoQ2k+Pj4yNil8MCxDaSY9''@;'; put 'put ''NjcxMDg4NjMsRD1NYXRoLmltdWwoUnQsdHIpLHA9KHA9TWF0aC5pbXVsKFJ0LEhuKSkrTWF0aC5pbXVsKEx0LHRyKXwwLEk9TWF0aC5pbXVsKEx0LEhuKSxEPUQrTWF0aC5pbXVsKHR0LHVyKXwwLHA9KHA9cCtNYXRoLmltdWwodHQsWm4pfDApK01hdGguaW11bChLZSx1cil8MCxJPUkrTWF0''@;'; put 'put ''aC5pbXVsKEtlLFpuKXwwLEQ9RCtNYXRoLmltdWwoaGUseHIpfDAscD0ocD1wK01hdGguaW11bChoZSxUdCl8MCkrTWF0aC5pbXVsKHdlLHhyKXwwLEk9SStNYXRoLmltdWwod2UsVHQpfDAsRD1EK01hdGguaW11bChGZSxfbil8MCxwPShwPXArTWF0aC5pbXVsKEZlLFp0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoZ2UsX24pfDAsST1JK01hdGguaW11bChnZSxadCl8MCxEPUQrTWF0aC5pbXVsKGplLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUscG4pfDApK01hdGguaW11bChBZSxwdCl8MCxJPUkrTWF0aC5pbXVsKEFlLHBuKXwwLEQ9RCtNYXRoLmltdWwoUmUsR2UpfDAscD0ocD1wK01hdGguaW11''@;'; put 'put ''bChSZSxVdCl8MCkrTWF0aC5pbXVsKGFlLEdlKXwwLEk9SStNYXRoLmltdWwoYWUsVXQpfDAsRD1EK01hdGguaW11bChvdCx4dCl8MCxwPShwPXArTWF0aC5pbXVsKG90LEJ0KXwwKStNYXRoLmltdWwobHQseHQpfDAsST1JK01hdGguaW11bChsdCxCdCl8MDt2YXIgaG89KEcrKEQ9RCtNYXRo''@;'; put 'put ''LmltdWwobmUsR24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx5bil8MCkrTWF0aC5pbXVsKF9lLEduKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLHluKXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsRD1NYXRoLmltdWwoZ3QsdHIp''@;'; put 'put ''LHA9KHA9TWF0aC5pbXVsKGd0LEhuKSkrTWF0aC5pbXVsKFh0LHRyKXwwLEk9TWF0aC5pbXVsKFh0LEhuKSxEPUQrTWF0aC5pbXVsKFJ0LHVyKXwwLHA9KHA9cCtNYXRoLmltdWwoUnQsWm4pfDApK01hdGguaW11bChMdCx1cil8MCxJPUkrTWF0aC5pbXVsKEx0LFpuKXwwLEQ9RCtNYXRoLmlt''@;'; put 'put ''dWwodHQseHIpfDAscD0ocD1wK01hdGguaW11bCh0dCxUdCl8MCkrTWF0aC5pbXVsKEtlLHhyKXwwLEk9SStNYXRoLmltdWwoS2UsVHQpfDAsRD1EK01hdGguaW11bChoZSxfbil8MCxwPShwPXArTWF0aC5pbXVsKGhlLFp0KXwwKStNYXRoLmltdWwod2UsX24pfDAsST1JK01hdGguaW11bCh3''@;'; put 'put ''ZSxadCl8MCxEPUQrTWF0aC5pbXVsKEZlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUscG4pfDApK01hdGguaW11bChnZSxwdCl8MCxJPUkrTWF0aC5pbXVsKGdlLHBuKXwwLEQ9RCtNYXRoLmltdWwoamUsR2UpfDAscD0ocD1wK01hdGguaW11bChqZSxVdCl8MCkrTWF0aC5pbXVsKEFlLEdl''@;'; put 'put ''KXwwLEk9SStNYXRoLmltdWwoQWUsVXQpfDAsRD1EK01hdGguaW11bChSZSx4dCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLEJ0KXwwKStNYXRoLmltdWwoYWUseHQpfDAsST1JK01hdGguaW11bChhZSxCdCl8MCxEPUQrTWF0aC5pbXVsKG90LEduKXwwLHA9KHA9cCtNYXRoLmltdWwob3QseW4p''@;'; put 'put ''fDApK01hdGguaW11bChsdCxHbil8MCxJPUkrTWF0aC5pbXVsKGx0LHluKXwwO3ZhciBNYT0oRysoRD1EK01hdGguaW11bChuZSxycil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGhyKXwwKStNYXRoLmltdWwoX2UscnIpfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwo''@;'; put 'put ''X2UsaHIpfDApKyhwPj4+MTMpfDApKyhNYT4+PjI2KXwwLE1hJj02NzEwODg2MyxEPU1hdGguaW11bChsbix0cikscD0ocD1NYXRoLmltdWwobG4sSG4pKStNYXRoLmltdWwoT24sdHIpfDAsST1NYXRoLmltdWwoT24sSG4pLEQ9RCtNYXRoLmltdWwoZ3QsdXIpfDAscD0ocD1wK01hdGguaW11''@;'; put 'put ''bChndCxabil8MCkrTWF0aC5pbXVsKFh0LHVyKXwwLEk9SStNYXRoLmltdWwoWHQsWm4pfDAsRD1EK01hdGguaW11bChSdCx4cil8MCxwPShwPXArTWF0aC5pbXVsKFJ0LFR0KXwwKStNYXRoLmltdWwoTHQseHIpfDAsST1JK01hdGguaW11bChMdCxUdCl8MCxEPUQrTWF0aC5pbXVsKHR0LF9u''@;'; put 'put ''KXwwLHA9KHA9cCtNYXRoLmltdWwodHQsWnQpfDApK01hdGguaW11bChLZSxfbil8MCxJPUkrTWF0aC5pbXVsKEtlLFp0KXwwLEQ9RCtNYXRoLmltdWwoaGUscHQpfDAscD0ocD1wK01hdGguaW11bChoZSxwbil8MCkrTWF0aC5pbXVsKHdlLHB0KXwwLEk9SStNYXRoLmltdWwod2UscG4pfDAs''@;'; put 'put ''RD1EK01hdGguaW11bChGZSxHZSl8MCxwPShwPXArTWF0aC5pbXVsKEZlLFV0KXwwKStNYXRoLmltdWwoZ2UsR2UpfDAsST1JK01hdGguaW11bChnZSxVdCl8MCxEPUQrTWF0aC5pbXVsKGplLHh0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsQnQpfDApK01hdGguaW11bChBZSx4dCl8MCxJPUkr''@;'; put 'put ''TWF0aC5pbXVsKEFlLEJ0KXwwLEQ9RCtNYXRoLmltdWwoUmUsR24pfDAscD0ocD1wK01hdGguaW11bChSZSx5bil8MCkrTWF0aC5pbXVsKGFlLEduKXwwLEk9SStNYXRoLmltdWwoYWUseW4pfDAsRD1EK01hdGguaW11bChvdCxycil8MCxwPShwPXArTWF0aC5pbXVsKG90LGhyKXwwKStNYXRo''@;'; put 'put ''LmltdWwobHQscnIpfDAsST1JK01hdGguaW11bChsdCxocil8MDt2YXIga3M9KEcrKEQ9RCtNYXRoLmltdWwobmUsdm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxCbil8MCkrTWF0aC5pbXVsKF9lLHZuKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLEJuKXww''@;'; put 'put ''KSsocD4+PjEzKXwwKSsoa3M+Pj4yNil8MCxrcyY9NjcxMDg4NjMsRD1NYXRoLmltdWwobG4sdXIpLHA9KHA9TWF0aC5pbXVsKGxuLFpuKSkrTWF0aC5pbXVsKE9uLHVyKXwwLEk9TWF0aC5pbXVsKE9uLFpuKSxEPUQrTWF0aC5pbXVsKGd0LHhyKXwwLHA9KHA9cCtNYXRoLmltdWwoZ3QsVHQp''@;'; put 'put ''fDApK01hdGguaW11bChYdCx4cil8MCxJPUkrTWF0aC5pbXVsKFh0LFR0KXwwLEQ9RCtNYXRoLmltdWwoUnQsX24pfDAscD0ocD1wK01hdGguaW11bChSdCxadCl8MCkrTWF0aC5pbXVsKEx0LF9uKXwwLEk9SStNYXRoLmltdWwoTHQsWnQpfDAsRD1EK01hdGguaW11bCh0dCxwdCl8MCxwPShw''@;'; put 'put ''PXArTWF0aC5pbXVsKHR0LHBuKXwwKStNYXRoLmltdWwoS2UscHQpfDAsST1JK01hdGguaW11bChLZSxwbil8MCxEPUQrTWF0aC5pbXVsKGhlLEdlKXwwLHA9KHA9cCtNYXRoLmltdWwoaGUsVXQpfDApK01hdGguaW11bCh3ZSxHZSl8MCxJPUkrTWF0aC5pbXVsKHdlLFV0KXwwLEQ9RCtNYXRo''@;'; put 'put ''LmltdWwoRmUseHQpfDAscD0ocD1wK01hdGguaW11bChGZSxCdCl8MCkrTWF0aC5pbXVsKGdlLHh0KXwwLEk9SStNYXRoLmltdWwoZ2UsQnQpfDAsRD1EK01hdGguaW11bChqZSxHbil8MCxwPShwPXArTWF0aC5pbXVsKGplLHluKXwwKStNYXRoLmltdWwoQWUsR24pfDAsST1JK01hdGguaW11''@;'; put 'put ''bChBZSx5bil8MCxEPUQrTWF0aC5pbXVsKFJlLHJyKXwwLHA9KHA9cCtNYXRoLmltdWwoUmUsaHIpfDApK01hdGguaW11bChhZSxycil8MCxJPUkrTWF0aC5pbXVsKGFlLGhyKXwwO3ZhciBCaT0oRysoRD1EK01hdGguaW11bChvdCx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVs''@;'; put 'put ''KG90LEJuKXwwKStNYXRoLmltdWwobHQsdm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwobHQsQm4pfDApKyhwPj4+MTMpfDApKyhCaT4+PjI2KXwwLEJpJj02NzEwODg2MyxEPU1hdGguaW11bChsbix4cikscD0ocD1NYXRoLmltdWwobG4sVHQpKStNYXRoLmltdWwoT24seHIpfDAs''@;'; put 'put ''ST1NYXRoLmltdWwoT24sVHQpLEQ9RCtNYXRoLmltdWwoZ3QsX24pfDAscD0ocD1wK01hdGguaW11bChndCxadCl8MCkrTWF0aC5pbXVsKFh0LF9uKXwwLEk9SStNYXRoLmltdWwoWHQsWnQpfDAsRD1EK01hdGguaW11bChSdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFJ0LHBuKXwwKStNYXRo''@;'; put 'put ''LmltdWwoTHQscHQpfDAsST1JK01hdGguaW11bChMdCxwbil8MCxEPUQrTWF0aC5pbXVsKHR0LEdlKXwwLHA9KHA9cCtNYXRoLmltdWwodHQsVXQpfDApK01hdGguaW11bChLZSxHZSl8MCxJPUkrTWF0aC5pbXVsKEtlLFV0KXwwLEQ9RCtNYXRoLmltdWwoaGUseHQpfDAscD0ocD1wK01hdGgu''@;'; put 'put ''aW11bChoZSxCdCl8MCkrTWF0aC5pbXVsKHdlLHh0KXwwLEk9SStNYXRoLmltdWwod2UsQnQpfDAsRD1EK01hdGguaW11bChGZSxHbil8MCxwPShwPXArTWF0aC5pbXVsKEZlLHluKXwwKStNYXRoLmltdWwoZ2UsR24pfDAsST1JK01hdGguaW11bChnZSx5bil8MCxEPUQrTWF0aC5pbXVsKGpl''@;'; put 'put ''LHJyKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsaHIpfDApK01hdGguaW11bChBZSxycil8MCxJPUkrTWF0aC5pbXVsKEFlLGhyKXwwO3ZhciB0YT0oRysoRD1EK01hdGguaW11bChSZSx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFJlLEJuKXwwKStNYXRoLmltdWwoYWUsdm4p''@;'; put 'put ''fDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoYWUsQm4pfDApKyhwPj4+MTMpfDApKyh0YT4+PjI2KXwwLHRhJj02NzEwODg2MyxEPU1hdGguaW11bChsbixfbikscD0ocD1NYXRoLmltdWwobG4sWnQpKStNYXRoLmltdWwoT24sX24pfDAsST1NYXRoLmltdWwoT24sWnQpLEQ9RCtNYXRo''@;'; put 'put ''LmltdWwoZ3QscHQpfDAscD0ocD1wK01hdGguaW11bChndCxwbil8MCkrTWF0aC5pbXVsKFh0LHB0KXwwLEk9SStNYXRoLmltdWwoWHQscG4pfDAsRD1EK01hdGguaW11bChSdCxHZSl8MCxwPShwPXArTWF0aC5pbXVsKFJ0LFV0KXwwKStNYXRoLmltdWwoTHQsR2UpfDAsST1JK01hdGguaW11''@;'; put 'put ''bChMdCxVdCl8MCxEPUQrTWF0aC5pbXVsKHR0LHh0KXwwLHA9KHA9cCtNYXRoLmltdWwodHQsQnQpfDApK01hdGguaW11bChLZSx4dCl8MCxJPUkrTWF0aC5pbXVsKEtlLEJ0KXwwLEQ9RCtNYXRoLmltdWwoaGUsR24pfDAscD0ocD1wK01hdGguaW11bChoZSx5bil8MCkrTWF0aC5pbXVsKHdl''@;'; put 'put ''LEduKXwwLEk9SStNYXRoLmltdWwod2UseW4pfDAsRD1EK01hdGguaW11bChGZSxycil8MCxwPShwPXArTWF0aC5pbXVsKEZlLGhyKXwwKStNYXRoLmltdWwoZ2UscnIpfDAsST1JK01hdGguaW11bChnZSxocil8MDt2YXIgTXI9KEcrKEQ9RCtNYXRoLmltdWwoamUsdm4pfDApfDApKygoODE5''@;'; put 'put ''MSYocD0ocD1wK01hdGguaW11bChqZSxCbil8MCkrTWF0aC5pbXVsKEFlLHZuKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKEFlLEJuKXwwKSsocD4+PjEzKXwwKSsoTXI+Pj4yNil8MCxNciY9NjcxMDg4NjMsRD1NYXRoLmltdWwobG4scHQpLHA9KHA9TWF0aC5pbXVsKGxuLHBuKSkr''@;'; put 'put ''TWF0aC5pbXVsKE9uLHB0KXwwLEk9TWF0aC5pbXVsKE9uLHBuKSxEPUQrTWF0aC5pbXVsKGd0LEdlKXwwLHA9KHA9cCtNYXRoLmltdWwoZ3QsVXQpfDApK01hdGguaW11bChYdCxHZSl8MCxJPUkrTWF0aC5pbXVsKFh0LFV0KXwwLEQ9RCtNYXRoLmltdWwoUnQseHQpfDAscD0ocD1wK01hdGgu''@;'; put 'put ''aW11bChSdCxCdCl8MCkrTWF0aC5pbXVsKEx0LHh0KXwwLEk9SStNYXRoLmltdWwoTHQsQnQpfDAsRD1EK01hdGguaW11bCh0dCxHbil8MCxwPShwPXArTWF0aC5pbXVsKHR0LHluKXwwKStNYXRoLmltdWwoS2UsR24pfDAsST1JK01hdGguaW11bChLZSx5bil8MCxEPUQrTWF0aC5pbXVsKGhl''@;'; put 'put ''LHJyKXwwLHA9KHA9cCtNYXRoLmltdWwoaGUsaHIpfDApK01hdGguaW11bCh3ZSxycil8MCxJPUkrTWF0aC5pbXVsKHdlLGhyKXwwO3ZhciBGcz0oRysoRD1EK01hdGguaW11bChGZSx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEZlLEJuKXwwKStNYXRoLmltdWwoZ2Usdm4p''@;'; put 'put ''fDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoZ2UsQm4pfDApKyhwPj4+MTMpfDApKyhGcz4+PjI2KXwwLEZzJj02NzEwODg2MyxEPU1hdGguaW11bChsbixHZSkscD0ocD1NYXRoLmltdWwobG4sVXQpKStNYXRoLmltdWwoT24sR2UpfDAsST1NYXRoLmltdWwoT24sVXQpLEQ9RCtNYXRo''@;'; put 'put ''LmltdWwoZ3QseHQpfDAscD0ocD1wK01hdGguaW11bChndCxCdCl8MCkrTWF0aC5pbXVsKFh0LHh0KXwwLEk9SStNYXRoLmltdWwoWHQsQnQpfDAsRD1EK01hdGguaW11bChSdCxHbil8MCxwPShwPXArTWF0aC5pbXVsKFJ0LHluKXwwKStNYXRoLmltdWwoTHQsR24pfDAsST1JK01hdGguaW11''@;'; put 'put ''bChMdCx5bil8MCxEPUQrTWF0aC5pbXVsKHR0LHJyKXwwLHA9KHA9cCtNYXRoLmltdWwodHQsaHIpfDApK01hdGguaW11bChLZSxycil8MCxJPUkrTWF0aC5pbXVsKEtlLGhyKXwwO3ZhciAkaT0oRysoRD1EK01hdGguaW11bChoZSx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVs''@;'; put 'put ''KGhlLEJuKXwwKStNYXRoLmltdWwod2Usdm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwod2UsQm4pfDApKyhwPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxEPU1hdGguaW11bChsbix4dCkscD0ocD1NYXRoLmltdWwobG4sQnQpKStNYXRoLmltdWwoT24seHQpfDAs''@;'; put 'put ''ST1NYXRoLmltdWwoT24sQnQpLEQ9RCtNYXRoLmltdWwoZ3QsR24pfDAscD0ocD1wK01hdGguaW11bChndCx5bil8MCkrTWF0aC5pbXVsKFh0LEduKXwwLEk9SStNYXRoLmltdWwoWHQseW4pfDAsRD1EK01hdGguaW11bChSdCxycil8MCxwPShwPXArTWF0aC5pbXVsKFJ0LGhyKXwwKStNYXRo''@;'; put 'put ''LmltdWwoTHQscnIpfDAsST1JK01hdGguaW11bChMdCxocil8MDt2YXIgX3M9KEcrKEQ9RCtNYXRoLmltdWwodHQsdm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bCh0dCxCbil8MCkrTWF0aC5pbXVsKEtlLHZuKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKEtlLEJuKXww''@;'; put 'put ''KSsocD4+PjEzKXwwKSsoX3M+Pj4yNil8MCxfcyY9NjcxMDg4NjMsRD1NYXRoLmltdWwobG4sR24pLHA9KHA9TWF0aC5pbXVsKGxuLHluKSkrTWF0aC5pbXVsKE9uLEduKXwwLEk9TWF0aC5pbXVsKE9uLHluKSxEPUQrTWF0aC5pbXVsKGd0LHJyKXwwLHA9KHA9cCtNYXRoLmltdWwoZ3QsaHIp''@;'; put 'put ''fDApK01hdGguaW11bChYdCxycil8MCxJPUkrTWF0aC5pbXVsKFh0LGhyKXwwO3ZhciBqcz0oRysoRD1EK01hdGguaW11bChSdCx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFJ0LEJuKXwwKStNYXRoLmltdWwoTHQsdm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwo''@;'; put 'put ''THQsQm4pfDApKyhwPj4+MTMpfDApKyhqcz4+PjI2KXwwLGpzJj02NzEwODg2MyxEPU1hdGguaW11bChsbixycikscD0ocD1NYXRoLmltdWwobG4saHIpKStNYXRoLmltdWwoT24scnIpfDAsST1NYXRoLmltdWwoT24saHIpO3ZhciBDbD0oRysoRD1EK01hdGguaW11bChndCx2bil8MCl8MCkr''@;'; put 'put ''KCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGd0LEJuKXwwKStNYXRoLmltdWwoWHQsdm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoWHQsQm4pfDApKyhwPj4+MTMpfDApKyhDbD4+PjI2KXwwLENsJj02NzEwODg2Mzt2YXIgVGk9KEcrKEQ9TWF0aC5pbXVsKGxuLHZuKSl8MCkrKCg4''@;'; put 'put ''MTkxJihwPShwPU1hdGguaW11bChsbixCbikpK01hdGguaW11bChPbix2bil8MCkpPDwxMyl8MDtyZXR1cm4gRz0oKEk9TWF0aC5pbXVsKE9uLEJuKSkrKHA+Pj4xMyl8MCkrKFRpPj4+MjYpfDAsVGkmPTY3MTA4ODYzLEtbMF09amEsS1sxXT1qbyxLWzJdPVhyLEtbM109ZWEsS1s0XT1yYSxL''@;'; put 'put ''WzVdPWNhLEtbNl09Q2ksS1s3XT1obyxLWzhdPU1hLEtbOV09a3MsS1sxMF09QmksS1sxMV09dGEsS1sxMl09TXIsS1sxM109RnMsS1sxNF09JGksS1sxNV09X3MsS1sxNl09anMsS1sxN109Q2wsS1sxOF09VGksMCE9PUcmJihLWzE5XT1HLGsubGVuZ3RoKyspLGt9O2Z1bmN0aW9uIFkoWCxm''@;'; put 'put ''LGIpe3JldHVybihuZXcgRikubXVscChYLGYsYil9ZnVuY3Rpb24gRihYLGYpe3RoaXMueD1YLHRoaXMueT1mfU1hdGguaW11bHx8KE49Viksdi5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZixiKXt2YXIgayxNPXRoaXMubGVuZ3RoK2YubGVuZ3RoO3JldHVybiBrPTEwPT09dGhpcy5sZW5n''@;'; put 'put ''dGgmJjEwPT09Zi5sZW5ndGg/Tih0aGlzLGYsYik6TTw2Mz9WKHRoaXMsZixiKTpNPDEwMjQ/ZnVuY3Rpb24geihYLGYsYil7Yi5uZWdhdGl2ZT1mLm5lZ2F0aXZlXlgubmVnYXRpdmUsYi5sZW5ndGg9WC5sZW5ndGgrZi5sZW5ndGg7Zm9yKHZhciBrPTAsTT0wLEI9MDtCPGIubGVuZ3RoLTE7''@;'; put 'put ''QisrKXt2YXIgSz1NO009MDtmb3IodmFyIEc9NjcxMDg4NjMmayxEPU1hdGgubWluKEIsZi5sZW5ndGgtMSkscD1NYXRoLm1heCgwLEItWC5sZW5ndGgrMSk7cDw9RDtwKyspe3ZhciBfZT0oMHxYLndvcmRzW0ItcF0pKigwfGYud29yZHNbcF0pLFBlPTY3MTA4ODYzJl9lO0c9NjcxMDg4NjMm''@;'; put 'put ''KFBlPVBlK0d8MCksTSs9KEs9KEs9SysoX2UvNjcxMDg4NjR8MCl8MCkrKFBlPj4+MjYpfDApPj4+MjYsSyY9NjcxMDg4NjN9Yi53b3Jkc1tCXT1HLGs9SyxLPU19cmV0dXJuIDAhPT1rP2Iud29yZHNbQl09azpiLmxlbmd0aC0tLGIuc3RyaXAoKX0odGhpcyxmLGIpOlkodGhpcyxmLGIpLGt9''@;'; put 'put ''LEYucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZil7Zm9yKHZhciBiPW5ldyBBcnJheShmKSxrPXYucHJvdG90eXBlLl9jb3VudEJpdHMoZiktMSxNPTA7TTxmO00rKyliW01dPXRoaXMucmV2QmluKE0sayxmKTtyZXR1cm4gYn0sRi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGYsYixr''@;'; put 'put ''KXtpZigwPT09Znx8Zj09PWstMSlyZXR1cm4gZjtmb3IodmFyIE09MCxCPTA7QjxiO0IrKylNfD0oMSZmKTw8Yi1CLTEsZj4+PTE7cmV0dXJuIE19LEYucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZixiLGssTSxCLEspe2Zvcih2YXIgRz0wO0c8SztHKyspTVtHXT1iW2ZbR11dLEJbR109''@;'; put 'put ''a1tmW0ddXX0sRi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGYsYixrLE0sQixLKXt0aGlzLnBlcm11dGUoSyxmLGIsayxNLEIpO2Zvcih2YXIgRz0xO0c8QjtHPDw9MSlmb3IodmFyIEQ9Rzw8MSxwPU1hdGguY29zKDIqTWF0aC5QSS9EKSxJPU1hdGguc2luKDIqTWF0aC5QSS9EKSx1''@;'; put 'put ''ZT0wO3VlPEI7dWUrPUQpZm9yKHZhciBuZT1wLF9lPUksUGU9MDtQZTxHO1BlKyspe3ZhciBvdD1rW3VlK1BlXSxsdD1NW3VlK1BlXSxkdD1rW3VlK1BlK0ddLFJlPU1bdWUrUGUrR10sYWU9bmUqZHQtX2UqUmU7UmU9bmUqUmUrX2UqZHQsa1t1ZStQZV09b3QrKGR0PWFlKSxNW3VlK1BlXT1s''@;'; put 'put ''dCtSZSxrW3VlK1BlK0ddPW90LWR0LE1bdWUrUGUrR109bHQtUmUsUGUhPT1EJiYoYWU9cCpuZS1JKl9lLF9lPXAqX2UrSSpuZSxuZT1hZSl9fSxGLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihmLGIpe3ZhciBrPTF8TWF0aC5tYXgoYixmKSxNPTEmayxCPTA7Zm9yKGs9ay8yfDA7''@;'; put 'put ''aztrPj4+PTEpQisrO3JldHVybiAxPDxCKzErTX0sRi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGYsYixrKXtpZighKGs8PTEpKWZvcih2YXIgTT0wO008ay8yO00rKyl7dmFyIEI9ZltNXTtmW01dPWZbay1NLTFdLGZbay1NLTFdPUIsQj1iW01dLGJbTV09LWJbay1NLTFdLGJbay1N''@;'; put 'put ''LTFdPS1CfX0sRi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGYsYil7Zm9yKHZhciBrPTAsTT0wO008Yi8yO00rKyl7dmFyIEI9ODE5MipNYXRoLnJvdW5kKGZbMipNKzFdL2IpK01hdGgucm91bmQoZlsyKk1dL2IpK2s7ZltNXT02NzEwODg2MyZCLGs9Qjw2NzEwODg2ND8wOkIv''@;'; put 'put ''NjcxMDg4NjR8MH1yZXR1cm4gZn0sRi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihmLGIsayxNKXtmb3IodmFyIEI9MCxLPTA7SzxiO0srKylrWzIqS109ODE5MSYoQis9MHxmW0tdKSxrWzIqSysxXT04MTkxJihCPj4+PTEzKSxCPj4+PTEzO2ZvcihLPTIqYjtLPE07KytLKWtbS109''@;'; put 'put ''MDtzKDA9PT1CKSxzKCEoLTgxOTImQikpfSxGLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGYpe2Zvcih2YXIgYj1uZXcgQXJyYXkoZiksaz0wO2s8ZjtrKyspYltrXT0wO3JldHVybiBifSxGLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGYsYixrKXt2YXIgTT0yKnRoaXMuZ3Vlc3NMZW4xM2Io''@;'; put 'put ''Zi5sZW5ndGgsYi5sZW5ndGgpLEI9dGhpcy5tYWtlUkJUKE0pLEs9dGhpcy5zdHViKE0pLEc9bmV3IEFycmF5KE0pLEQ9bmV3IEFycmF5KE0pLHA9bmV3IEFycmF5KE0pLEk9bmV3IEFycmF5KE0pLHVlPW5ldyBBcnJheShNKSxuZT1uZXcgQXJyYXkoTSksX2U9ay53b3JkcztfZS5sZW5ndGg9''@;'; put 'put ''TSx0aGlzLmNvbnZlcnQxM2IoZi53b3JkcyxmLmxlbmd0aCxHLE0pLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEksTSksdGhpcy50cmFuc2Zvcm0oRyxLLEQscCxNLEIpLHRoaXMudHJhbnNmb3JtKEksSyx1ZSxuZSxNLEIpO2Zvcih2YXIgUGU9MDtQZTxNO1BlKyspe3ZhciBv''@;'; put 'put ''dD1EW1BlXSp1ZVtQZV0tcFtQZV0qbmVbUGVdO3BbUGVdPURbUGVdKm5lW1BlXStwW1BlXSp1ZVtQZV0sRFtQZV09b3R9cmV0dXJuIHRoaXMuY29uanVnYXRlKEQscCxNKSx0aGlzLnRyYW5zZm9ybShELHAsX2UsSyxNLEIpLHRoaXMuY29uanVnYXRlKF9lLEssTSksdGhpcy5ub3JtYWxpemUx''@;'; put 'put ''M2IoX2UsTSksay5uZWdhdGl2ZT1mLm5lZ2F0aXZlXmIubmVnYXRpdmUsay5sZW5ndGg9Zi5sZW5ndGgrYi5sZW5ndGgsay5zdHJpcCgpfSx2LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZil7dmFyIGI9bmV3IHYobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2Yu''@;'; put 'put ''bGVuZ3RoKSx0aGlzLm11bFRvKGYsYil9LHYucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZil7dmFyIGI9bmV3IHYobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2YubGVuZ3RoKSxZKHRoaXMsZixiKX0sdi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihmKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jbG9uZSgpLm11bFRvKGYsdGhpcyl9LHYucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGYpe3MoIm51bWJlciI9PXR5cGVvZiBmKSxzKGY8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLGs9MDtrPHRoaXMubGVuZ3RoO2srKyl7dmFyIE09KDB8dGhpcy53b3Jkc1trXSkqZixCPSg2NzEw''@;'; put 'put ''ODg2MyZNKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPU0vNjcxMDg4NjR8MCxiKz1CPj4+MjYsdGhpcy53b3Jkc1trXT02NzEwODg2MyZCfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNba109Yix0aGlzLmxlbmd0aCsrKSwwPT09ZiYmKHRoaXMubGVuZ3RoPTEsdGhpcy5fbm9ybVNpZ24oKSks''@;'; put 'put ''dGhpc30sdi5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGYpfSx2LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHYucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMu''@;'; put 'put ''Y2xvbmUoKSl9LHYucHJvdG90eXBlLnBvdz1mdW5jdGlvbihmKXt2YXIgYj1mdW5jdGlvbiBIKFgpe2Zvcih2YXIgZj1uZXcgQXJyYXkoWC5iaXRMZW5ndGgoKSksYj0wO2I8Zi5sZW5ndGg7YisrKXt2YXIgTT1iJTI2O2ZbYl09KFgud29yZHNbYi8yNnwwXSYxPDxNKT4+Pk19cmV0dXJuIGZ9''@;'; put 'put ''KGYpO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHYoMSk7Zm9yKHZhciBrPXRoaXMsTT0wO008Yi5sZW5ndGgmJjA9PT1iW01dO00rKyxrPWsuc3FyKCkpO2lmKCsrTTxiLmxlbmd0aClmb3IodmFyIEI9ay5zcXIoKTtNPGIubGVuZ3RoO00rKyxCPUIuc3FyKCkpMCE9PWJbTV0mJihrPWsu''@;'; put 'put ''bXVsKEIpKTtyZXR1cm4ga30sdi5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGYpe3MoIm51bWJlciI9PXR5cGVvZiBmJiZmPj0wKTt2YXIgQixiPWYlMjYsaz0oZi1iKS8yNixNPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEs9MDtmb3IoQj0wO0I8dGhpcy5sZW5ndGg7''@;'; put 'put ''QisrKXt2YXIgRz10aGlzLndvcmRzW0JdJk07dGhpcy53b3Jkc1tCXT0oMHx0aGlzLndvcmRzW0JdKS1HPDxifEssSz1HPj4+MjYtYn1LJiYodGhpcy53b3Jkc1tCXT1LLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1rKXtmb3IoQj10aGlzLmxlbmd0aC0xO0I+PTA7Qi0tKXRoaXMud29yZHNbQitr''@;'; put 'put ''XT10aGlzLndvcmRzW0JdO2ZvcihCPTA7QjxrO0IrKyl0aGlzLndvcmRzW0JdPTA7dGhpcy5sZW5ndGgrPWt9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZil7cmV0dXJuIHMoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGYpfSx2LnByb3Rv''@;'; put 'put ''dHlwZS5pdXNocm49ZnVuY3Rpb24oZixiLGspe3ZhciBNO3MoIm51bWJlciI9PXR5cGVvZiBmJiZmPj0wKSxNPWI/KGItYiUyNikvMjY6MDt2YXIgQj1mJTI2LEs9TWF0aC5taW4oKGYtQikvMjYsdGhpcy5sZW5ndGgpLEc9NjcxMDg4NjNeNjcxMDg4NjM+Pj5CPDxCLEQ9aztpZihNLT1LLE09''@;'; put 'put ''TWF0aC5tYXgoMCxNKSxEKXtmb3IodmFyIHA9MDtwPEs7cCsrKUQud29yZHNbcF09dGhpcy53b3Jkc1twXTtELmxlbmd0aD1LfWlmKDAhPT1LKWlmKHRoaXMubGVuZ3RoPkspZm9yKHRoaXMubGVuZ3RoLT1LLHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPXRoaXMud29yZHNb''@;'; put 'put ''cCtLXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBJPTA7Zm9yKHA9dGhpcy5sZW5ndGgtMTtwPj0wJiYoMCE9PUl8fHA+PU0pO3AtLSl7dmFyIHVlPTB8dGhpcy53b3Jkc1twXTt0aGlzLndvcmRzW3BdPUk8PDI2LUJ8dWU+Pj5CLEk9dWUmR31yZXR1cm4gRCYmMCE9''@;'; put 'put ''PUkmJihELndvcmRzW0QubGVuZ3RoKytdPUkpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGYsYixrKXtyZXR1cm4gcygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4o''@;'; put 'put ''ZixiLGspfSx2LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZil9LHYucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGYpfSx2LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGYpe3JldHVybiB0''@;'; put 'put ''aGlzLmNsb25lKCkuaXNocm4oZil9LHYucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGYpfSx2LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihmKXtzKCJudW1iZXIiPT10eXBlb2YgZiYmZj49MCk7dmFyIGI9ZiUyNixrPShmLWIpLzI2O3Jl''@;'; put 'put ''dHVybiEodGhpcy5sZW5ndGg8PWt8fCEodGhpcy53b3Jkc1trXSYxPDxiKSl9LHYucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihmKXtzKCJudW1iZXIiPT10eXBlb2YgZiYmZj49MCk7dmFyIGI9ZiUyNixrPShmLWIpLzI2O3JldHVybiBzKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29y''@;'; put 'put ''a3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9az90aGlzOigwIT09YiYmaysrLHRoaXMubGVuZ3RoPU1hdGgubWluKGssdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSwwPT09''@;'; put 'put ''dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpKX0sdi5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZil9LHYucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGYpe3JldHVybiBzKCJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgZikscyhmPDY3MTA4ODY0KSxmPDA/dGhpcy5pc3VibigtZik6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxmPyh0aGlzLndvcmRzWzBdPWYtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPTAsdGhpcy5pc3VibihmKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZil9LHYucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihmKXt0aGlzLndvcmRzWzBdKz1mO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl0+PTY3MTA4ODY0O2Ir''@;'; put 'put ''Kyl0aGlzLndvcmRzW2JdLT02NzEwODg2NCxiPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2IrMV09MTp0aGlzLndvcmRzW2IrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYisxKSx0aGlzfSx2LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihmKXtpZihz''@;'; put 'put ''KCJudW1iZXIiPT10eXBlb2YgZikscyhmPDY3MTA4ODY0KSxmPDApcmV0dXJuIHRoaXMuaWFkZG4oLWYpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihmKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1mLDE9PT10''@;'; put 'put ''aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXTwwO2IrKyl0aGlzLndvcmRzW2JdKz02NzEwODg2NCx0aGlzLndvcmRzW2IrMV0t''@;'; put 'put ''PTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGYpfSx2LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZil9LHYucHJvdG90eXBlLmlhYnM9ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHYucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx2LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZixiLGspe3ZhciBCO3RoaXMuX2V4cGFuZChmLmxlbmd0aCtrKTt2YXIg''@;'; put 'put ''SyxHPTA7Zm9yKEI9MDtCPGYubGVuZ3RoO0IrKyl7Sz0oMHx0aGlzLndvcmRzW0Ira10pK0c7dmFyIEQ9KDB8Zi53b3Jkc1tCXSkqYjtHPSgoSy09NjcxMDg4NjMmRCk+PjI2KS0oRC82NzEwODg2NHwwKSx0aGlzLndvcmRzW0Ira109NjcxMDg4NjMmS31mb3IoO0I8dGhpcy5sZW5ndGgtaztC''@;'; put 'put ''KyspRz0oSz0oMHx0aGlzLndvcmRzW0Ira10pK0cpPj4yNix0aGlzLndvcmRzW0Ira109NjcxMDg4NjMmSztpZigwPT09RylyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihzKC0xPT09RyksRz0wLEI9MDtCPHRoaXMubGVuZ3RoO0IrKylHPShLPS0oMHx0aGlzLndvcmRzW0JdKStHKT4+MjYsdGhp''@;'; put 'put ''cy53b3Jkc1tCXT02NzEwODg2MyZLO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihmLGIpe3ZhciBrLE09dGhpcy5jbG9uZSgpLEI9ZixLPTB8Qi53b3Jkc1tCLmxlbmd0aC0xXTswIT0oaz0yNi10aGlzLl9jb3VudEJp''@;'; put 'put ''dHMoSykpJiYoQj1CLnVzaGxuKGspLE0uaXVzaGxuKGspLEs9MHxCLndvcmRzW0IubGVuZ3RoLTFdKTt2YXIgcCxEPU0ubGVuZ3RoLUIubGVuZ3RoO2lmKCJtb2QiIT09Yil7KHA9bmV3IHYobnVsbCkpLmxlbmd0aD1EKzEscC53b3Jkcz1uZXcgQXJyYXkocC5sZW5ndGgpO2Zvcih2YXIgST0w''@;'; put 'put ''O0k8cC5sZW5ndGg7SSsrKXAud29yZHNbSV09MH12YXIgdWU9TS5jbG9uZSgpLl9pc2hsbnN1Ym11bChCLDEsRCk7MD09PXVlLm5lZ2F0aXZlJiYoTT11ZSxwJiYocC53b3Jkc1tEXT0xKSk7Zm9yKHZhciBuZT1ELTE7bmU+PTA7bmUtLSl7dmFyIF9lPTY3MTA4ODY0KigwfE0ud29yZHNbQi5s''@;'; put 'put ''ZW5ndGgrbmVdKSsoMHxNLndvcmRzW0IubGVuZ3RoK25lLTFdKTtmb3IoX2U9TWF0aC5taW4oX2UvS3wwLDY3MTA4ODYzKSxNLl9pc2hsbnN1Ym11bChCLF9lLG5lKTswIT09TS5uZWdhdGl2ZTspX2UtLSxNLm5lZ2F0aXZlPTAsTS5faXNobG5zdWJtdWwoQiwxLG5lKSxNLmlzWmVybygpfHwo''@;'; put 'put ''TS5uZWdhdGl2ZV49MSk7cCYmKHAud29yZHNbbmVdPV9lKX1yZXR1cm4gcCYmcC5zdHJpcCgpLE0uc3RyaXAoKSwiZGl2IiE9PWImJjAhPT1rJiZNLml1c2hybihrKSx7ZGl2OnB8fG51bGwsbW9kOk19fSx2LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZixiLGspe3JldHVybiBzKCFmLmlz''@;'; put 'put ''WmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHYoMCksbW9kOm5ldyB2KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWYubmVnYXRpdmU/KEs9dGhpcy5uZWcoKS5kaXZtb2QoZixiKSwibW9kIiE9PWImJihNPUsuZGl2Lm5lZygpKSwiZGl2IiE9PWImJihCPUsubW9kLm5lZygpLGsm''@;'; put 'put ''JjAhPT1CLm5lZ2F0aXZlJiZCLmlhZGQoZikpLHtkaXY6TSxtb2Q6Qn0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zi5uZWdhdGl2ZT8oSz10aGlzLmRpdm1vZChmLm5lZygpLGIpLCJtb2QiIT09YiYmKE09Sy5kaXYubmVnKCkpLHtkaXY6TSxtb2Q6Sy5tb2R9KTowIT09KHRoaXMubmVnYXRp''@;'; put 'put ''dmUmZi5uZWdhdGl2ZSk/KEs9dGhpcy5uZWcoKS5kaXZtb2QoZi5uZWcoKSxiKSwiZGl2IiE9PWImJihCPUsubW9kLm5lZygpLGsmJjAhPT1CLm5lZ2F0aXZlJiZCLmlzdWIoZikpLHtkaXY6Sy5kaXYsbW9kOkJ9KTpmLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZik8MD97ZGl2Om5l''@;'; put 'put ''dyB2KDApLG1vZDp0aGlzfToxPT09Zi5sZW5ndGg/ImRpdiI9PT1iP3tkaXY6dGhpcy5kaXZuKGYud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWI/e2RpdjpudWxsLG1vZDpuZXcgdih0aGlzLm1vZG4oZi53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihmLndvcmRzWzBdKSxtb2Q6bmV3''@;'; put 'put ''IHYodGhpcy5tb2RuKGYud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihmLGIpO3ZhciBNLEIsS30sdi5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmRpdm1vZChmLCJkaXYiLCExKS5kaXZ9LHYucHJvdG90eXBlLm1vZD1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5kaXZt''@;'; put 'put ''b2QoZiwibW9kIiwhMSkubW9kfSx2LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmRpdm1vZChmLCJtb2QiLCEwKS5tb2R9LHYucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGYpe3ZhciBiPXRoaXMuZGl2bW9kKGYpO2lmKGIubW9kLmlzWmVybygpKXJldHVybiBi''@;'; put 'put ''LmRpdjt2YXIgaz1iLm1vZC5hYnMoKSxNPWYuYWJzKCkuaXVzaHJuKDEpLEI9MSZmLndvcmRzWzBdLEs9ay5jbXAoTSk7aWYoSzwwfHwxPT09QiYmMD09PUspcmV0dXJuIGIuZGl2O3ZhciBHPW5ldyB2KDEpO3JldHVybiBHLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmVeZi5uZWdhdGl2ZSxiLmRp''@;'; put 'put ''di5pYWRkKEcpfSx2LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGYpe3MoZjw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJWYsaz0wLE09dGhpcy5sZW5ndGgtMTtNPj0wO00tLSlrPShiKmsrKDB8dGhpcy53b3Jkc1tNXSkpJWY7cmV0dXJuIGt9LHYucHJvdG90eXBlLmlkaXZuPWZ1bmN0''@;'; put 'put ''aW9uKGYpe3MoZjw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLGs9dGhpcy5sZW5ndGgtMTtrPj0wO2stLSl7dmFyIE09KDB8dGhpcy53b3Jkc1trXSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW2tdPU0vZnwwLGI9TSVmfXJldHVybiB0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLmRpdm49ZnVuY3Rp''@;'; put 'put ''b24oZil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihmKX0sdi5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihmKXtzKDA9PT1mLm5lZ2F0aXZlKSxzKCFmLmlzWmVybygpKTt2YXIgYj10aGlzLGs9Zi5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKGYpOmIuY2xvbmUoKTtmb3IodmFy''@;'; put 'put ''IE09bmV3IHYoMSksQj1uZXcgdigwKSxLPW5ldyB2KDApLEc9bmV3IHYoMSksRD0wO2IuaXNFdmVuKCkmJmsuaXNFdmVuKCk7KWIuaXVzaHJuKDEpLGsuaXVzaHJuKDEpLCsrRDtmb3IodmFyIHA9ay5jbG9uZSgpLEk9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciB1ZT0wLG5lPTE7''@;'; put 'put ''MD09PShiLndvcmRzWzBdJm5lKSYmdWU8MjY7Kyt1ZSxuZTw8PTEpO2lmKHVlPjApZm9yKGIuaXVzaHJuKHVlKTt1ZS0tID4wOykoTS5pc09kZCgpfHxCLmlzT2RkKCkpJiYoTS5pYWRkKHApLEIuaXN1YihJKSksTS5pdXNocm4oMSksQi5pdXNocm4oMSk7Zm9yKHZhciBfZT0wLFBlPTE7MD09''@;'; put 'put ''PShrLndvcmRzWzBdJlBlKSYmX2U8MjY7KytfZSxQZTw8PTEpO2lmKF9lPjApZm9yKGsuaXVzaHJuKF9lKTtfZS0tID4wOykoSy5pc09kZCgpfHxHLmlzT2RkKCkpJiYoSy5pYWRkKHApLEcuaXN1YihJKSksSy5pdXNocm4oMSksRy5pdXNocm4oMSk7Yi5jbXAoayk+PTA/KGIuaXN1YihrKSxN''@;'; put 'put ''LmlzdWIoSyksQi5pc3ViKEcpKTooay5pc3ViKGIpLEsuaXN1YihNKSxHLmlzdWIoQikpfXJldHVybnthOkssYjpHLGdjZDprLml1c2hsbihEKX19LHYucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihmKXtzKDA9PT1mLm5lZ2F0aXZlKSxzKCFmLmlzWmVybygpKTt2YXIgdWUsYj10aGlzLGs9''@;'; put 'put ''Zi5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKGYpOmIuY2xvbmUoKTtmb3IodmFyIE09bmV3IHYoMSksQj1uZXcgdigwKSxLPWsuY2xvbmUoKTtiLmNtcG4oMSk+MCYmay5jbXBuKDEpPjA7KXtmb3IodmFyIEc9MCxEPTE7MD09PShiLndvcmRzWzBdJkQpJiZHPDI2OysrRyxEPDw9''@;'; put 'put ''MSk7aWYoRz4wKWZvcihiLml1c2hybihHKTtHLS0gPjA7KU0uaXNPZGQoKSYmTS5pYWRkKEspLE0uaXVzaHJuKDEpO2Zvcih2YXIgcD0wLEk9MTswPT09KGsud29yZHNbMF0mSSkmJnA8MjY7KytwLEk8PD0xKTtpZihwPjApZm9yKGsuaXVzaHJuKHApO3AtLSA+MDspQi5pc09kZCgpJiZCLmlh''@;'; put 'put ''ZGQoSyksQi5pdXNocm4oMSk7Yi5jbXAoayk+PTA/KGIuaXN1YihrKSxNLmlzdWIoQikpOihrLmlzdWIoYiksQi5pc3ViKE0pKX1yZXR1cm4odWU9MD09PWIuY21wbigxKT9NOkIpLmNtcG4oMCk8MCYmdWUuaWFkZChmKSx1ZX0sdi5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGYpe2lmKHRoaXMu''@;'; put 'put ''aXNaZXJvKCkpcmV0dXJuIGYuYWJzKCk7aWYoZi5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCksaz1mLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLGsubmVnYXRpdmU9MDtmb3IodmFyIE09MDtiLmlzRXZlbigpJiZrLmlzRXZlbigpO00rKyliLml1c2hybigxKSxr''@;'; put 'put ''Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDtrLmlzRXZlbigpOylrLml1c2hybigxKTt2YXIgQj1iLmNtcChrKTtpZihCPDApe3ZhciBLPWI7Yj1rLGs9S31lbHNlIGlmKDA9PT1CfHwwPT09ay5jbXBuKDEpKWJyZWFrO2IuaXN1YihrKX1yZXR1''@;'; put 'put ''cm4gay5pdXNobG4oTSl9LHYucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuZWdjZChmKS5hLnVtb2QoZil9LHYucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdi5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4hKDEmfnRoaXMud29yZHNbMF0pfSx2LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZmfSx2LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihmKXtzKCJudW1iZXIiPT10eXBlb2YgZik7dmFyIGI9ZiUyNixrPShmLWIpLzI2LE09MTw8YjtpZih0aGlz''@;'; put 'put ''Lmxlbmd0aDw9aylyZXR1cm4gdGhpcy5fZXhwYW5kKGsrMSksdGhpcy53b3Jkc1trXXw9TSx0aGlzO2Zvcih2YXIgQj1NLEs9azswIT09QiYmSzx0aGlzLmxlbmd0aDtLKyspe3ZhciBHPTB8dGhpcy53b3Jkc1tLXTtCPShHKz1CKT4+PjI2LHRoaXMud29yZHNbS109RyY9NjcxMDg4NjN9cmV0''@;'; put 'put ''dXJuIDAhPT1CJiYodGhpcy53b3Jkc1tLXT1CLHRoaXMubGVuZ3RoKyspLHRoaXN9LHYucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx2LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGYpe3ZhciBrLGI9ZjwwO2lm''@;'; put 'put ''KDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlrPTE7ZWxzZXtiJiYoZj0tZikscyhmPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgTT0wfHRoaXMud29y''@;'; put 'put ''ZHNbMF07az1NPT09Zj8wOk08Zj8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1rOmt9LHYucHJvdG90eXBlLmNtcD1mdW5jdGlvbihmKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWYubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1mLm5lZ2F0''@;'; put 'put ''aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChmKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx2LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGYpe2lmKHRoaXMubGVuZ3RoPmYubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGYubGVuZ3RoKXJldHVybi0xO2Zvcih2''@;'; put 'put ''YXIgYj0wLGs9dGhpcy5sZW5ndGgtMTtrPj0wO2stLSl7dmFyIE09MHx0aGlzLndvcmRzW2tdLEI9MHxmLndvcmRzW2tdO2lmKE0hPT1CKXtNPEI/Yj0tMTpNPkImJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdi5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGYpe3JldHVybiAxPT09dGhpcy5jbXBu''@;'; put 'put ''KGYpfSx2LnByb3RvdHlwZS5ndD1mdW5jdGlvbihmKXtyZXR1cm4gMT09PXRoaXMuY21wKGYpfSx2LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNtcG4oZik+PTB9LHYucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbXAoZik+PTB9LHYucHJv''@;'; put 'put ''dG90eXBlLmx0bj1mdW5jdGlvbihmKXtyZXR1cm4tMT09PXRoaXMuY21wbihmKX0sdi5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZil7cmV0dXJuLTE9PT10aGlzLmNtcChmKX0sdi5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbXBuKGYpPD0wfSx2LnByb3RvdHlwZS5s''@;'; put 'put ''dGU9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuY21wKGYpPD0wfSx2LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZil7cmV0dXJuIDA9PT10aGlzLmNtcG4oZil9LHYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGYpe3JldHVybiAwPT09dGhpcy5jbXAoZil9LHYucmVkPWZ1bmN0aW9uKGYpe3JldHVy''@;'; put 'put ''biBuZXcga2UoZil9LHYucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGYpe3JldHVybiBzKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHMoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZi5jb252ZXJ0''@;'; put 'put ''VG8odGhpcykuX2ZvcmNlUmVkKGYpfSx2LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdi5wcm90b3R5''@;'; put 'put ''cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLnJlZD1mLHRoaXN9LHYucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGYpe3JldHVybiBzKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGYpfSx2LnBy''@;'; put 'put ''b3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZil7cmV0dXJuIHModGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxmKX0sdi5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihmKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkSUFkZCB3''@;'; put 'put ''b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZil9LHYucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihmKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGYpfSx2LnBy''@;'; put 'put ''b3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGYpe3JldHVybiBzKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxmKX0sdi5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGYpe3JldHVybiBzKHRoaXMucmVkLCJyZWRTaGwg''@;'; put 'put ''d29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZil9LHYucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihmKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZiks''@;'; put 'put ''dGhpcy5yZWQubXVsKHRoaXMsZil9LHYucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZil7cmV0dXJuIHModGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGYpLHRoaXMucmVkLmltdWwodGhpcyxmKX0sdi5wcm90''@;'; put 'put ''b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHYucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcyh0''@;'; put 'put ''aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx2LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRo''@;'; put 'put ''IHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdi5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBzKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkx''@;'; put 'put ''KHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHYucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBzKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx2LnByb3Rv''@;'; put 'put ''dHlwZS5yZWRQb3c9ZnVuY3Rpb24oZil7cmV0dXJuIHModGhpcy5yZWQmJiFmLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxmKX07dmFyIFc9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxs''@;'; put 'put ''fTtmdW5jdGlvbiBxKFgsZil7dGhpcy5uYW1lPVgsdGhpcy5wPW5ldyB2KGYsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB2KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiByZSgpe3EuY2FsbCh0aGlz''@;'; put 'put ''LCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe3EuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAw''@;'; put 'put ''MDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBDZSgpe3EuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBJZSgpe3EuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBrZShYKXtpZigic3RyaW5nIj09dHlwZW9mIFgpe3ZhciBmPXYuX3ByaW1lKFgpO3RoaXMubT1mLnAsdGhpcy5wcmltZT1mfWVsc2UgcyhYLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0''@;'; put 'put ''ZXIgdGhhbiAxIiksdGhpcy5tPVgsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHFlKFgpe2tlLmNhbGwodGhpcyxYKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB2KDEpLml1''@;'; put 'put ''c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5y''@;'; put 'put ''KSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXEucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZj1uZXcgdihudWxsKTtyZXR1cm4gZi53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGZ9LHEucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZil7dmFy''@;'; put 'put ''IGssYj1mO2Rve3RoaXMuc3BsaXQoYix0aGlzLnRtcCksaz0oYj0oYj10aGlzLmltdWxLKGIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoaz50aGlzLm4pO3ZhciBNPWs8dGhpcy5uPy0xOmIudWNtcCh0aGlzLnApO3JldHVybiAwPT09TT8oYi53b3Jkc1swXT0wLGIubGVu''@;'; put 'put ''Z3RoPTEpOk0+MD9iLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1iLnN0cmlwP2Iuc3RyaXAoKTpiLl9zdHJpcCgpLGJ9LHEucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGYsYil7Zi5pdXNocm4odGhpcy5uLDAsYil9LHEucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGYpe3JldHVybiBmLmltdWwo''@;'; put 'put ''dGhpcy5rKX0sQShyZSxxKSxyZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZixiKXtmb3IodmFyIGs9NDE5NDMwMyxNPU1hdGgubWluKGYubGVuZ3RoLDkpLEI9MDtCPE07QisrKWIud29yZHNbQl09Zi53b3Jkc1tCXTtpZihiLmxlbmd0aD1NLGYubGVuZ3RoPD05KXJldHVybiBmLndvcmRz''@;'; put 'put ''WzBdPTAsdm9pZChmLmxlbmd0aD0xKTt2YXIgSz1mLndvcmRzWzldO2ZvcihiLndvcmRzW2IubGVuZ3RoKytdPUsmayxCPTEwO0I8Zi5sZW5ndGg7QisrKXt2YXIgRz0wfGYud29yZHNbQl07Zi53b3Jkc1tCLTEwXT0oRyZrKTw8NHxLPj4+MjIsSz1HfWYud29yZHNbQi0xMF09Sz4+Pj0yMixm''@;'; put 'put ''Lmxlbmd0aC09MD09PUsmJmYubGVuZ3RoPjEwPzEwOjl9LHJlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihmKXtmLndvcmRzW2YubGVuZ3RoXT0wLGYud29yZHNbZi5sZW5ndGgrMV09MCxmLmxlbmd0aCs9Mjtmb3IodmFyIGI9MCxrPTA7azxmLmxlbmd0aDtrKyspe3ZhciBNPTB8Zi53b3Jk''@;'; put 'put ''c1trXTtmLndvcmRzW2tdPTY3MTA4ODYzJihiKz05NzcqTSksYj02NCpNKyhiLzY3MTA4ODY0fDApfXJldHVybiAwPT09Zi53b3Jkc1tmLmxlbmd0aC0xXSYmKGYubGVuZ3RoLS0sMD09PWYud29yZHNbZi5sZW5ndGgtMV0mJmYubGVuZ3RoLS0pLGZ9LEEobWUscSksQShDZSxxKSxBKEllLHEp''@;'; put 'put ''LEllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihmKXtmb3IodmFyIGI9MCxrPTA7azxmLmxlbmd0aDtrKyspe3ZhciBNPTE5KigwfGYud29yZHNba10pK2IsQj02NzEwODg2MyZNO00+Pj49MjYsZi53b3Jkc1trXT1CLGI9TX1yZXR1cm4gMCE9PWImJihmLndvcmRzW2YubGVuZ3RoKytdPWIp''@;'; put 'put ''LGZ9LHYuX3ByaW1lPWZ1bmN0aW9uKGYpe2lmKFdbZl0pcmV0dXJuIFdbZl07dmFyIGI7aWYoImsyNTYiPT09ZiliPW5ldyByZTtlbHNlIGlmKCJwMjI0Ij09PWYpYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1mKWI9bmV3IENlO2Vsc2V7aWYoInAyNTUxOSIhPT1mKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiVW5rbm93biBwcmltZSAiK2YpO2I9bmV3IEllfXJldHVybiBXW2ZdPWIsYn0sa2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGYpe3MoMD09PWYubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscyhmLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQg''@;'; put 'put ''bnVtYmVycyIpfSxrZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZixiKXtzKDA9PT0oZi5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxzKGYucmVkJiZmLnJlZD09PWIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJz''@;'; put 'put ''Iil9LGtlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShmKS5fZm9yY2VSZWQodGhpcyk6Zi51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxrZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGYpe3JldHVybiBmLmlzWmVy''@;'; put 'put ''bygpP2YuY2xvbmUoKTp0aGlzLm0uc3ViKGYpLl9mb3JjZVJlZCh0aGlzKX0sa2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihmLGIpe3RoaXMuX3ZlcmlmeTIoZixiKTt2YXIgaz1mLmFkZChiKTtyZXR1cm4gay5jbXAodGhpcy5tKT49MCYmay5pc3ViKHRoaXMubSksay5fZm9yY2VSZWQodGhp''@;'; put 'put ''cyl9LGtlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGYsYil7dGhpcy5fdmVyaWZ5MihmLGIpO3ZhciBrPWYuaWFkZChiKTtyZXR1cm4gay5jbXAodGhpcy5tKT49MCYmay5pc3ViKHRoaXMubSksa30sa2UucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihmLGIpe3RoaXMuX3ZlcmlmeTIoZixiKTt2''@;'; put 'put ''YXIgaz1mLnN1YihiKTtyZXR1cm4gay5jbXBuKDApPDAmJmsuaWFkZCh0aGlzLm0pLGsuX2ZvcmNlUmVkKHRoaXMpfSxrZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihmLGIpe3RoaXMuX3ZlcmlmeTIoZixiKTt2YXIgaz1mLmlzdWIoYik7cmV0dXJuIGsuY21wbigwKTwwJiZrLmlhZGQodGhp''@;'; put 'put ''cy5tKSxrfSxrZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGYsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZiksdGhpcy5pbW9kKGYudXNobG4oYikpfSxrZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihmLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKGYsYiksdGhpcy5pbW9kKGYuaW11bChiKSl9''@;'; put 'put ''LGtlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZixiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihmLGIpLHRoaXMuaW1vZChmLm11bChiKSl9LGtlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmltdWwoZixmLmNsb25lKCkpfSxrZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9u''@;'; put 'put ''KGYpe3JldHVybiB0aGlzLm11bChmLGYpfSxrZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihmKXtpZihmLmlzWmVybygpKXJldHVybiBmLmNsb25lKCk7dmFyIGI9dGhpcy5tLmFuZGxuKDMpO2lmKHMoYiUyPT0xKSwzPT09Yil7dmFyIGs9dGhpcy5tLmFkZChuZXcgdigxKSkuaXVzaHJuKDIp''@;'; put 'put ''O3JldHVybiB0aGlzLnBvdyhmLGspfWZvcih2YXIgTT10aGlzLm0uc3VibigxKSxCPTA7IU0uaXNaZXJvKCkmJjA9PT1NLmFuZGxuKDEpOylCKyssTS5pdXNocm4oMSk7cyghTS5pc1plcm8oKSk7dmFyIEs9bmV3IHYoMSkudG9SZWQodGhpcyksRz1LLnJlZE5lZygpLEQ9dGhpcy5tLnN1Ym4o''@;'; put 'put ''MSkuaXVzaHJuKDEpLHA9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihwPW5ldyB2KDIqcCpwKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cocCxEKS5jbXAoRyk7KXAucmVkSUFkZChHKTtmb3IodmFyIEk9dGhpcy5wb3cocCxNKSx1ZT10aGlzLnBvdyhmLE0uYWRkbigxKS5pdXNocm4oMSkpLG5l''@;'; put 'put ''PXRoaXMucG93KGYsTSksX2U9QjswIT09bmUuY21wKEspOyl7Zm9yKHZhciBQZT1uZSxvdD0wOzAhPT1QZS5jbXAoSyk7b3QrKylQZT1QZS5yZWRTcXIoKTtzKG90PF9lKTt2YXIgbHQ9dGhpcy5wb3coSSxuZXcgdigxKS5pdXNobG4oX2Utb3QtMSkpO3VlPXVlLnJlZE11bChsdCksST1sdC5y''@;'; put 'put ''ZWRTcXIoKSxuZT1uZS5yZWRNdWwoSSksX2U9b3R9cmV0dXJuIHVlfSxrZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihmKXt2YXIgYj1mLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Yi5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLHRoaXMuaW1vZChiKS5yZWROZWcoKSk6dGhpcy5pbW9kKGIp''@;'; put 'put ''fSxrZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGYsYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gbmV3IHYoMSkudG9SZWQodGhpcyk7aWYoMD09PWIuY21wbigxKSlyZXR1cm4gZi5jbG9uZSgpO3ZhciBNPW5ldyBBcnJheSgxNik7TVswXT1uZXcgdigxKS50b1JlZCh0aGlzKSxNWzFdPWY7Zm9y''@;'; put 'put ''KHZhciBCPTI7QjxNLmxlbmd0aDtCKyspTVtCXT10aGlzLm11bChNW0ItMV0sZik7dmFyIEs9TVswXSxHPTAsRD0wLHA9Yi5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXAmJihwPTI2KSxCPWIubGVuZ3RoLTE7Qj49MDtCLS0pe2Zvcih2YXIgST1iLndvcmRzW0JdLHVlPXAtMTt1ZT49MDt1ZS0t''@;'; put 'put ''KXt2YXIgbmU9ST4+dWUmMTtLIT09TVswXSYmKEs9dGhpcy5zcXIoSykpLDAhPT1uZXx8MCE9PUc/KEc8PD0xLEd8PW5lLCg0PT09KytEfHwwPT09QiYmMD09PXVlKSYmKEs9dGhpcy5tdWwoSyxNW0ddKSxEPTAsRz0wKSk6RD0wfXA9MjZ9cmV0dXJuIEt9LGtlLnByb3RvdHlwZS5jb252ZXJ0''@;'; put 'put ''VG89ZnVuY3Rpb24oZil7dmFyIGI9Zi51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1mP2IuY2xvbmUoKTpifSxrZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZil7dmFyIGI9Zi5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHYubW9udD1mdW5jdGlvbihmKXtyZXR1cm4gbmV3''@;'; put 'put ''IHFlKGYpfSxBKHFlLGtlKSxxZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmltb2QoZi51c2hsbih0aGlzLnNoaWZ0KSl9LHFlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihmKXt2YXIgYj10aGlzLmltb2QoZi5tdWwodGhpcy5yaW52KSk7cmV0''@;'; put 'put ''dXJuIGIucmVkPW51bGwsYn0scWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZixiKXtpZihmLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBmLndvcmRzWzBdPTAsZi5sZW5ndGg9MSxmO3ZhciBrPWYuaW11bChiKSxNPWsubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1h''@;'; put 'put ''c2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLEI9ay5pc3ViKE0pLml1c2hybih0aGlzLnNoaWZ0KSxLPUI7cmV0dXJuIEIuY21wKHRoaXMubSk+PTA/Sz1CLmlzdWIodGhpcy5tKTpCLmNtcG4oMCk8MCYmKEs9Qi5pYWRkKHRoaXMubSkpLEsuX2ZvcmNlUmVkKHRoaXMpfSxxZS5wcm90b3R5''@;'; put 'put ''cGUubXVsPWZ1bmN0aW9uKGYsYil7aWYoZi5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHYoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBrPWYubXVsKGIpLE09ay5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksQj1r''@;'; put 'put ''LmlzdWIoTSkuaXVzaHJuKHRoaXMuc2hpZnQpLEs9QjtyZXR1cm4gQi5jbXAodGhpcy5tKT49MD9LPUIuaXN1Yih0aGlzLm0pOkIuY21wbigwKTwwJiYoSz1CLmlhZGQodGhpcy5tKSksSy5fZm9yY2VSZWQodGhpcyl9LHFlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlz''@;'; put 'put ''Lmltb2QoZi5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGZlPWgubm1kKGZlKSx0aGlzKX0sNDcxMDgoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg1NjY5OCksYz1oKDg4Mjc2KSxzPWgoNjYwMTEpLEE9aCg2MjgwMiksdj1oKDU2MTY4KTtmdW5j''@;'; put 'put ''dGlvbiBDKHcpe3YuY2FsbCh0aGlzLCJkaWdlc3QiKSx0aGlzLl9oYXNoPXd9eShDLHYpLEMucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odyl7dGhpcy5faGFzaC51cGRhdGUodyl9LEMucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNoLmRpZ2VzdCgpfSxm''@;'; put 'put ''ZS5leHBvcnRzPWZ1bmN0aW9uKFMpe3JldHVybiJtZDUiPT09KFM9Uy50b0xvd2VyQ2FzZSgpKT9uZXcgYzoicm1kMTYwIj09PVN8fCJyaXBlbWQxNjAiPT09Uz9uZXcgczpuZXcgQyhBKFMpKX19LDIwMzIwKGZlLGosaCl7dmFyIHk9aCg4ODI3Nik7ZmUuZXhwb3J0cz1mdW5jdGlvbihjKXty''@;'; put 'put ''ZXR1cm4obmV3IHkpLnVwZGF0ZShjKS5kaWdlc3QoKX19LDgzNTA3KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNTY2OTgpLGM9aCg0MTgwMCkscz1oKDU2MTY4KSxBPWgoOTI4NjEpLkJ1ZmZlcix2PWgoMjAzMjApLEM9aCg2NjAxMSksdz1oKDYyODAyKSxTPUEuYWxsb2MoMTI4KTtm''@;'; put 'put ''dW5jdGlvbiBMKFIseCl7cy5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgeCYmKHg9QS5mcm9tKHgpKTt2YXIgVT0ic2hhNTEyIj09PVJ8fCJzaGEzODQiPT09Uj8xMjg6NjQ7dGhpcy5fYWxnPVIsdGhpcy5fa2V5PXgseC5sZW5ndGg+VT94PSgicm1kMTYwIj09PVI/bmV3''@;'; put 'put ''IEM6dyhSKSkudXBkYXRlKHgpLmRpZ2VzdCgpOngubGVuZ3RoPFUmJih4PUEuY29uY2F0KFt4LFNdLFUpKTtmb3IodmFyIFY9dGhpcy5faXBhZD1BLmFsbG9jVW5zYWZlKFUpLE49dGhpcy5fb3BhZD1BLmFsbG9jVW5zYWZlKFUpLHo9MDt6PFU7eisrKVZbel09NTReeFt6XSxOW3pdPTkyXnhb''@;'; put 'put ''el07dGhpcy5faGFzaD0icm1kMTYwIj09PVI/bmV3IEM6dyhSKSx0aGlzLl9oYXNoLnVwZGF0ZShWKX15KEwscyksTC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihSKXt0aGlzLl9oYXNoLnVwZGF0ZShSKX0sTC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFI9dGhpcy5faGFz''@;'; put 'put ''aC5kaWdlc3QoKTtyZXR1cm4oInJtZDE2MCI9PT10aGlzLl9hbGc/bmV3IEM6dyh0aGlzLl9hbGcpKS51cGRhdGUodGhpcy5fb3BhZCkudXBkYXRlKFIpLmRpZ2VzdCgpfSxmZS5leHBvcnRzPWZ1bmN0aW9uKHgsVSl7cmV0dXJuInJtZDE2MCI9PT0oeD14LnRvTG93ZXJDYXNlKCkpfHwicmlw''@;'; put 'put ''ZW1kMTYwIj09PXg/bmV3IEwoInJtZDE2MCIsVSk6Im1kNSI9PT14P25ldyBjKHYsVSk6bmV3IEwoeCxVKX19LDQxODAwKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNTY2OTgpLGM9aCg5Mjg2MSkuQnVmZmVyLHM9aCg1NjE2OCksQT1jLmFsbG9jKDEyOCksdj02NDtmdW5jdGlvbiBD''@;'; put 'put ''KHcsUyl7cy5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgUyYmKFM9Yy5mcm9tKFMpKSx0aGlzLl9hbGc9dyx0aGlzLl9rZXk9UyxTLmxlbmd0aD52P1M9dyhTKTpTLmxlbmd0aDx2JiYoUz1jLmNvbmNhdChbUyxBXSx2KSk7Zm9yKHZhciBMPXRoaXMuX2lwYWQ9Yy5hbGxv''@;'; put 'put ''Y1Vuc2FmZSh2KSxSPXRoaXMuX29wYWQ9Yy5hbGxvY1Vuc2FmZSh2KSx4PTA7eDx2O3grKylMW3hdPTU0XlNbeF0sUlt4XT05Ml5TW3hdO3RoaXMuX2hhc2g9W0xdfXkoQyxzKSxDLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHcpe3RoaXMuX2hhc2gucHVzaCh3KX0sQy5wcm90b3R5cGUu''@;'; put 'put ''X2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5fYWxnKGMuY29uY2F0KHRoaXMuX2hhc2gpKTtyZXR1cm4gdGhpcy5fYWxnKGMuY29uY2F0KFt0aGlzLl9vcGFkLHddKSl9LGZlLmV4cG9ydHM9Q30sOTE1NjUoZmUsaixoKXsidXNlIHN0cmljdCI7ai5yYW5kb21CeXRlcz1qLnJuZz1qLnBz''@;'; put 'put ''ZXVkb1JhbmRvbUJ5dGVzPWoucHJuZz1oKDUzMjA5KSxqLmNyZWF0ZUhhc2g9ai5IYXNoPWgoNDcxMDgpLGouY3JlYXRlSG1hYz1qLkhtYWM9aCg4MzUwNyk7dmFyIHk9aCg1NTcxNSksYz1PYmplY3Qua2V5cyh5KSxzPVsic2hhMSIsInNoYTIyNCIsInNoYTI1NiIsInNoYTM4NCIsInNoYTUx''@;'; put 'put ''MiIsIm1kNSIsInJtZDE2MCJdLmNvbmNhdChjKTtqLmdldEhhc2hlcz1mdW5jdGlvbigpe3JldHVybiBzfTt2YXIgQT1oKDc4Mzk2KTtqLnBia2RmMj1BLnBia2RmMixqLnBia2RmMlN5bmM9QS5wYmtkZjJTeW5jO3ZhciB2PWgoMzAxMjUpO2ouQ2lwaGVyPXYuQ2lwaGVyLGouY3JlYXRlQ2lw''@;'; put 'put ''aGVyPXYuY3JlYXRlQ2lwaGVyLGouQ2lwaGVyaXY9di5DaXBoZXJpdixqLmNyZWF0ZUNpcGhlcml2PXYuY3JlYXRlQ2lwaGVyaXYsai5EZWNpcGhlcj12LkRlY2lwaGVyLGouY3JlYXRlRGVjaXBoZXI9di5jcmVhdGVEZWNpcGhlcixqLkRlY2lwaGVyaXY9di5EZWNpcGhlcml2LGouY3JlYXRl''@;'; put 'put ''RGVjaXBoZXJpdj12LmNyZWF0ZURlY2lwaGVyaXYsai5nZXRDaXBoZXJzPXYuZ2V0Q2lwaGVycyxqLmxpc3RDaXBoZXJzPXYubGlzdENpcGhlcnM7dmFyIEM9aCgxNTM4MCk7ai5EaWZmaWVIZWxsbWFuR3JvdXA9Qy5EaWZmaWVIZWxsbWFuR3JvdXAsai5jcmVhdGVEaWZmaWVIZWxsbWFuR3Jv''@;'; put 'put ''dXA9Qy5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAsai5nZXREaWZmaWVIZWxsbWFuPUMuZ2V0RGlmZmllSGVsbG1hbixqLmNyZWF0ZURpZmZpZUhlbGxtYW49Qy5jcmVhdGVEaWZmaWVIZWxsbWFuLGouRGlmZmllSGVsbG1hbj1DLkRpZmZpZUhlbGxtYW47dmFyIHc9aCgyMCk7ai5jcmVhdGVT''@;'; put 'put ''aWduPXcuY3JlYXRlU2lnbixqLlNpZ249dy5TaWduLGouY3JlYXRlVmVyaWZ5PXcuY3JlYXRlVmVyaWZ5LGouVmVyaWZ5PXcuVmVyaWZ5LGouY3JlYXRlRUNESD1oKDYxMzI0KTt2YXIgUz1oKDk3MTY4KTtqLnB1YmxpY0VuY3J5cHQ9Uy5wdWJsaWNFbmNyeXB0LGoucHJpdmF0ZUVuY3J5cHQ9''@;'; put 'put ''Uy5wcml2YXRlRW5jcnlwdCxqLnB1YmxpY0RlY3J5cHQ9Uy5wdWJsaWNEZWNyeXB0LGoucHJpdmF0ZURlY3J5cHQ9Uy5wcml2YXRlRGVjcnlwdDt2YXIgTD1oKDc2OTgzKTtqLnJhbmRvbUZpbGw9TC5yYW5kb21GaWxsLGoucmFuZG9tRmlsbFN5bmM9TC5yYW5kb21GaWxsU3luYyxqLmNyZWF0''@;'; put 'put ''ZUNyZWRlbnRpYWxzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJzb3JyeSwgY3JlYXRlQ3JlZGVudGlhbHMgaXMgbm90IGltcGxlbWVudGVkIHlldFxud2UgYWNjZXB0IHB1bGwgcmVxdWVzdHNcbmh0dHBzOi8vZ2l0aHViLmNvbS9icm93c2VyaWZ5L2NyeXB0by1icm93c2VyaWZ5Iil9''@;'; put 'put ''LGouY29uc3RhbnRzPXtESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FOjIsREhfQ0hFQ0tfUF9OT1RfUFJJTUU6MSxESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SOjQsREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUjo4LE5QTl9FTkFCTEVEOjEsQUxQTl9FTkFCTEVEOjEsUlNBX1BLQ1MxX1BB''@;'; put 'put ''RERJTkc6MSxSU0FfU1NMVjIzX1BBRERJTkc6MixSU0FfTk9fUEFERElORzozLFJTQV9QS0NTMV9PQUVQX1BBRERJTkc6NCxSU0FfWDkzMV9QQURESU5HOjUsUlNBX1BLQ1MxX1BTU19QQURESU5HOjYsUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEOjIsUE9JTlRfQ09OVkVSU0lPTl9VTkNP''@;'; put 'put ''TVBSRVNTRUQ6NCxQT0lOVF9DT05WRVJTSU9OX0hZQlJJRDo2fX0sMzAwNDEoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCgzMDY1NSksYz1oKDU4MDY4KSxzPWgoNjk2NzUpLEE9aCg3NTc5NSk7ZmUuZXhwb3J0cz1mdW5jdGlvbihDLHcsUyl7aWYoIUN8fCJvYmplY3QiIT10eXBlb2Yg''@;'; put 'put ''QyYmImZ1bmN0aW9uIiE9dHlwZW9mIEMpdGhyb3cgbmV3IHMoImBvYmpgIG11c3QgYmUgYW4gb2JqZWN0IG9yIGEgZnVuY3Rpb25gIik7aWYoInN0cmluZyIhPXR5cGVvZiB3JiYic3ltYm9sIiE9dHlwZW9mIHcpdGhyb3cgbmV3IHMoImBwcm9wZXJ0eWAgbXVzdCBiZSBhIHN0cmluZyBvciBh''@;'; put 'put ''IHN5bWJvbGAiKTtpZihhcmd1bWVudHMubGVuZ3RoPjMmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50c1szXSYmbnVsbCE9PWFyZ3VtZW50c1szXSl0aHJvdyBuZXcgcygiYG5vbkVudW1lcmFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVsbCIpO2lmKGFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+NCYmImJvb2xlYW4iIT10eXBlb2YgYXJndW1lbnRzWzRdJiZudWxsIT09YXJndW1lbnRzWzRdKXRocm93IG5ldyBzKCJgbm9uV3JpdGFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVsbCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+NSYmImJvb2xl''@;'; put 'put ''YW4iIT10eXBlb2YgYXJndW1lbnRzWzVdJiZudWxsIT09YXJndW1lbnRzWzVdKXRocm93IG5ldyBzKCJgbm9uQ29uZmlndXJhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwiKTtpZihhcmd1bWVudHMubGVuZ3RoPjYmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3Vt''@;'; put 'put ''ZW50c1s2XSl0aHJvdyBuZXcgcygiYGxvb3NlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIik7dmFyIEw9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTpudWxsLFI9YXJndW1lbnRzLmxlbmd0aD40P2FyZ3VtZW50c1s0XTpudWxsLHg9YXJndW1lbnRzLmxlbmd0aD41''@;'; put 'put ''P2FyZ3VtZW50c1s1XTpudWxsLFU9YXJndW1lbnRzLmxlbmd0aD42JiZhcmd1bWVudHNbNl0sSD0hIUEmJkEoQyx3KTtpZih5KXkoQyx3LHtjb25maWd1cmFibGU6bnVsbD09PXgmJkg/SC5jb25maWd1cmFibGU6IXgsZW51bWVyYWJsZTpudWxsPT09TCYmSD9ILmVudW1lcmFibGU6IUwsdmFs''@;'; put 'put ''dWU6Uyx3cml0YWJsZTpudWxsPT09UiYmSD9ILndyaXRhYmxlOiFSfSk7ZWxzZXtpZighVSYmKEx8fFJ8fHgpKXRocm93IG5ldyBjKCJUaGlzIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgZGVmaW5pbmcgYSBwcm9wZXJ0eSBhcyBub24tY29uZmlndXJhYmxlLCBub24td3JpdGFibGUs''@;'; put 'put ''IG9yIG5vbi1lbnVtZXJhYmxlLiIpO0Nbd109U319fSwzODQ1MihmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDExODkpLGM9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2woImZvbyIpLHM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxBPUFy''@;'; put 'put ''cmF5LnByb3RvdHlwZS5jb25jYXQsdj1oKDMwMDQxKSx3PWgoMzA1OTIpKCksUz1mdW5jdGlvbihSLHgsVSxIKXtpZih4IGluIFIpaWYoITA9PT1IKXtpZihSW3hdPT09VSlyZXR1cm59ZWxzZSBpZighZnVuY3Rpb24oUil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFImJiJbb2JqZWN0IEZ1''@;'; put 'put ''bmN0aW9uXSI9PT1zLmNhbGwoUil9KEgpfHwhSCgpKXJldHVybjt3P3YoUix4LFUsITApOnYoUix4LFUpfSxMPWZ1bmN0aW9uKFIseCl7dmFyIFU9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp7fSxIPXkoeCk7YyYmKEg9QS5jYWxsKEgsT2JqZWN0LmdldE93blByb3BlcnR5U3lt''@;'; put 'put ''Ym9scyh4KSkpO2Zvcih2YXIgVj0wO1Y8SC5sZW5ndGg7Vis9MSlTKFIsSFtWXSx4W0hbVl1dLFVbSFtWXV0pfTtMLnN1cHBvcnRzRGVzY3JpcHRvcnM9ISF3LGZlLmV4cG9ydHM9TH0sMjk1NjAoZmUsaixoKXsidXNlIHN0cmljdCI7ai51dGlscz1oKDg3NjI2KSxqLkNpcGhlcj1oKDgyODA4''@;'; put 'put ''KSxqLkRFUz1oKDgyMjExKSxqLkNCQz1oKDMzODkpLGouRURFPWgoNjUyNzkpfSwzMzg5KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNDMzNDkpLGM9aCg1NjY5OCkscz17fTtmdW5jdGlvbiBBKEMpe3kuZXF1YWwoQy5sZW5ndGgsOCwiSW52YWxpZCBJViBsZW5ndGgiKSx0aGlzLml2''@;'; put 'put ''PW5ldyBBcnJheSg4KTtmb3IodmFyIHc9MDt3PHRoaXMuaXYubGVuZ3RoO3crKyl0aGlzLml2W3ddPUNbd119ai5pbnN0YW50aWF0ZT1mdW5jdGlvbiB2KEMpe2Z1bmN0aW9uIHcoeCl7Qy5jYWxsKHRoaXMseCksdGhpcy5fY2JjSW5pdCgpfWModyxDKTtmb3IodmFyIFM9T2JqZWN0LmtleXMo''@;'; put 'put ''cyksTD0wO0w8Uy5sZW5ndGg7TCsrKXt2YXIgUj1TW0xdO3cucHJvdG90eXBlW1JdPXNbUl19cmV0dXJuIHcuY3JlYXRlPWZ1bmN0aW9uKFUpe3JldHVybiBuZXcgdyhVKX0sd30scy5fY2JjSW5pdD1mdW5jdGlvbigpe3ZhciB3PW5ldyBBKHRoaXMub3B0aW9ucy5pdik7dGhpcy5fY2JjU3Rh''@;'; put 'put ''dGU9d30scy5fdXBkYXRlPWZ1bmN0aW9uKHcsUyxMLFIpe3ZhciBVPXRoaXMuY29uc3RydWN0b3Iuc3VwZXJfLnByb3RvdHlwZSxIPXRoaXMuX2NiY1N0YXRlLml2O2lmKCJlbmNyeXB0Ij09PXRoaXMudHlwZSl7Zm9yKHZhciBWPTA7Vjx0aGlzLmJsb2NrU2l6ZTtWKyspSFtWXV49d1tTK1Zd''@;'; put 'put ''O2ZvcihVLl91cGRhdGUuY2FsbCh0aGlzLEgsMCxMLFIpLFY9MDtWPHRoaXMuYmxvY2tTaXplO1YrKylIW1ZdPUxbUitWXX1lbHNle2ZvcihVLl91cGRhdGUuY2FsbCh0aGlzLHcsUyxMLFIpLFY9MDtWPHRoaXMuYmxvY2tTaXplO1YrKylMW1IrVl1ePUhbVl07Zm9yKFY9MDtWPHRoaXMuYmxv''@;'; put 'put ''Y2tTaXplO1YrKylIW1ZdPXdbUytWXX19fSw4MjgwOChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDQzMzQ5KTtmdW5jdGlvbiBjKHMpe3RoaXMub3B0aW9ucz1zLHRoaXMudHlwZT10aGlzLm9wdGlvbnMudHlwZSx0aGlzLmJsb2NrU2l6ZT04LHRoaXMuX2luaXQoKSx0aGlzLmJ1ZmZl''@;'; put 'put ''cj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5wYWRkaW5nPSExIT09cy5wYWRkaW5nfWZlLmV4cG9ydHM9YyxjLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbigpe30sYy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEEpe3JldHVybiAwPT09QS5sZW5n''@;'; put 'put ''dGg/W106ImRlY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX3VwZGF0ZURlY3J5cHQoQSk6dGhpcy5fdXBkYXRlRW5jcnlwdChBKX0sYy5wcm90b3R5cGUuX2J1ZmZlcj1mdW5jdGlvbihBLHYpe2Zvcih2YXIgQz1NYXRoLm1pbih0aGlzLmJ1ZmZlci5sZW5ndGgtdGhpcy5idWZmZXJPZmYsQS5s''@;'; put 'put ''ZW5ndGgtdiksdz0wO3c8Qzt3KyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmYrd109QVt2K3ddO3JldHVybiB0aGlzLmJ1ZmZlck9mZis9QyxDfSxjLnByb3RvdHlwZS5fZmx1c2hCdWZmZXI9ZnVuY3Rpb24oQSx2KXtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsQSx2KSx0''@;'; put 'put ''aGlzLmJ1ZmZlck9mZj0wLHRoaXMuYmxvY2tTaXplfSxjLnByb3RvdHlwZS5fdXBkYXRlRW5jcnlwdD1mdW5jdGlvbihBKXt2YXIgdj0wLEM9MCxTPW5ldyBBcnJheSgoKHRoaXMuYnVmZmVyT2ZmK0EubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZXwwKSp0aGlzLmJsb2NrU2l6ZSk7MCE9PXRoaXMu''@;'; put 'put ''YnVmZmVyT2ZmJiYodis9dGhpcy5fYnVmZmVyKEEsdiksdGhpcy5idWZmZXJPZmY9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJihDKz10aGlzLl9mbHVzaEJ1ZmZlcihTLEMpKSk7Zm9yKHZhciBMPUEubGVuZ3RoLShBLmxlbmd0aC12KSV0aGlzLmJsb2NrU2l6ZTt2PEw7dis9dGhpcy5ibG9ja1Np''@;'; put 'put ''emUpdGhpcy5fdXBkYXRlKEEsdixTLEMpLEMrPXRoaXMuYmxvY2tTaXplO2Zvcig7djxBLmxlbmd0aDt2KyssdGhpcy5idWZmZXJPZmYrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZl09QVt2XTtyZXR1cm4gU30sYy5wcm90b3R5cGUuX3VwZGF0ZURlY3J5cHQ9ZnVuY3Rpb24oQSl7Zm9y''@;'; put 'put ''KHZhciB2PTAsQz0wLHc9TWF0aC5jZWlsKCh0aGlzLmJ1ZmZlck9mZitBLmxlbmd0aCkvdGhpcy5ibG9ja1NpemUpLTEsUz1uZXcgQXJyYXkodyp0aGlzLmJsb2NrU2l6ZSk7dz4wO3ctLSl2Kz10aGlzLl9idWZmZXIoQSx2KSxDKz10aGlzLl9mbHVzaEJ1ZmZlcihTLEMpO3JldHVybiB2Kz10''@;'; put 'put ''aGlzLl9idWZmZXIoQSx2KSxTfSxjLnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihBKXt2YXIgdixDO3JldHVybiBBJiYodj10aGlzLnVwZGF0ZShBKSksQz0iZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZmluYWxFbmNyeXB0KCk6dGhpcy5fZmluYWxEZWNyeXB0KCksdj92LmNvbmNhdChD''@;'; put 'put ''KTpDfSxjLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKEEsdil7aWYoMD09PXYpcmV0dXJuITE7Zm9yKDt2PEEubGVuZ3RoOylBW3YrK109MDtyZXR1cm4hMH0sYy5wcm90b3R5cGUuX2ZpbmFsRW5jcnlwdD1mdW5jdGlvbigpe2lmKCF0aGlzLl9wYWQodGhpcy5idWZmZXIsdGhpcy5idWZmZXJP''@;'; put 'put ''ZmYpKXJldHVybltdO3ZhciBBPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLEEsMCksQX0sYy5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKEEpe3JldHVybiBBfSxjLnByb3RvdHlwZS5fZmluYWxEZWNyeXB0PWZ1bmN0aW9uKCl7''@;'; put 'put ''eS5lcXVhbCh0aGlzLmJ1ZmZlck9mZix0aGlzLmJsb2NrU2l6ZSwiTm90IGVub3VnaCBkYXRhIHRvIGRlY3J5cHQiKTt2YXIgQT1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl9mbHVzaEJ1ZmZlcihBLDApLHRoaXMuX3VucGFkKEEpfX0sODIyMTEoZmUsaixoKXsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIHk9aCg0MzM0OSksYz1oKDU2Njk4KSxzPWgoODc2MjYpLEE9aCg4MjgwOCk7ZnVuY3Rpb24gdigpe3RoaXMudG1wPW5ldyBBcnJheSgyKSx0aGlzLmtleXM9bnVsbH1mdW5jdGlvbiBDKFMpe0EuY2FsbCh0aGlzLFMpO3ZhciBMPW5ldyB2O3RoaXMuX2Rlc1N0YXRlPUws''@;'; put 'put ''dGhpcy5kZXJpdmVLZXlzKEwsUy5rZXkpfWMoQyxBKSxmZS5leHBvcnRzPUMsQy5jcmVhdGU9ZnVuY3Rpb24oTCl7cmV0dXJuIG5ldyBDKEwpfTt2YXIgdz1bMSwxLDIsMiwyLDIsMiwyLDEsMiwyLDIsMiwyLDIsMV07Qy5wcm90b3R5cGUuZGVyaXZlS2V5cz1mdW5jdGlvbihMLFIpe0wua2V5''@;'; put 'put ''cz1uZXcgQXJyYXkoMzIpLHkuZXF1YWwoUi5sZW5ndGgsdGhpcy5ibG9ja1NpemUsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciB4PXMucmVhZFVJbnQzMkJFKFIsMCksVT1zLnJlYWRVSW50MzJCRShSLDQpO3MucGMxKHgsVSxMLnRtcCwwKSx4PUwudG1wWzBdLFU9TC50bXBbMV07Zm9yKHZh''@;'; put 'put ''ciBIPTA7SDxMLmtleXMubGVuZ3RoO0grPTIpe3ZhciBWPXdbSD4+PjFdO3g9cy5yMjhzaGwoeCxWKSxVPXMucjI4c2hsKFUsVikscy5wYzIoeCxVLEwua2V5cyxIKX19LEMucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTCxSLHgsVSl7dmFyIEg9dGhpcy5fZGVzU3RhdGUsVj1zLnJlYWRV''@;'; put 'put ''SW50MzJCRShMLFIpLE49cy5yZWFkVUludDMyQkUoTCxSKzQpO3MuaXAoVixOLEgudG1wLDApLFY9SC50bXBbMF0sTj1ILnRtcFsxXSwiZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZW5jcnlwdChILFYsTixILnRtcCwwKTp0aGlzLl9kZWNyeXB0KEgsVixOLEgudG1wLDApLE49SC50bXBb''@;'; put 'put ''MV0scy53cml0ZVVJbnQzMkJFKHgsVj1ILnRtcFswXSxVKSxzLndyaXRlVUludDMyQkUoeCxOLFUrNCl9LEMucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oTCxSKXtpZighMT09PXRoaXMucGFkZGluZylyZXR1cm4hMTtmb3IodmFyIHg9TC5sZW5ndGgtUixVPVI7VTxMLmxlbmd0aDtVKyspTFtV''@;'; put 'put ''XT14O3JldHVybiEwfSxDLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oTCl7aWYoITE9PT10aGlzLnBhZGRpbmcpcmV0dXJuIEw7Zm9yKHZhciBSPUxbTC5sZW5ndGgtMV0seD1MLmxlbmd0aC1SO3g8TC5sZW5ndGg7eCsrKXkuZXF1YWwoTFt4XSxSKTtyZXR1cm4gTC5zbGljZSgwLEwubGVu''@;'; put 'put ''Z3RoLVIpfSxDLnByb3RvdHlwZS5fZW5jcnlwdD1mdW5jdGlvbihMLFIseCxVLEgpe2Zvcih2YXIgVj1SLE49eCx6PTA7ejxMLmtleXMubGVuZ3RoO3orPTIpe3ZhciBZPUwua2V5c1t6XSxGPUwua2V5c1t6KzFdO3MuZXhwYW5kKE4sTC50bXAsMCk7dmFyIFc9cy5zdWJzdGl0dXRlKFlePUwu''@;'; put 'put ''dG1wWzBdLEZePUwudG1wWzFdKSxyZT1OO049KFZecy5wZXJtdXRlKFcpKT4+PjAsVj1yZX1zLnJpcChOLFYsVSxIKX0sQy5wcm90b3R5cGUuX2RlY3J5cHQ9ZnVuY3Rpb24oTCxSLHgsVSxIKXtmb3IodmFyIFY9eCxOPVIsej1MLmtleXMubGVuZ3RoLTI7ej49MDt6LT0yKXt2YXIgWT1MLmtl''@;'; put 'put ''eXNbel0sRj1MLmtleXNbeisxXTtzLmV4cGFuZChWLEwudG1wLDApO3ZhciBXPXMuc3Vic3RpdHV0ZShZXj1MLnRtcFswXSxGXj1MLnRtcFsxXSkscmU9VjtWPShOXnMucGVybXV0ZShXKSk+Pj4wLE49cmV9cy5yaXAoVixOLFUsSCl9fSw2NTI3OShmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''eT1oKDQzMzQ5KSxjPWgoNTY2OTgpLHM9aCg4MjgwOCksQT1oKDgyMjExKTtmdW5jdGlvbiB2KHcsUyl7eS5lcXVhbChTLmxlbmd0aCwyNCwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIEw9Uy5zbGljZSgwLDgpLFI9Uy5zbGljZSg4LDE2KSx4PVMuc2xpY2UoMTYsMjQpO3RoaXMuY2lwaGVy''@;'; put 'put ''cz0iZW5jcnlwdCI9PT13P1tBLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Okx9KSxBLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5OlJ9KSxBLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Onh9KV06W0EuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6eH0pLEEuY3JlYXRlKHt0eXBl''@;'; put 'put ''OiJlbmNyeXB0IixrZXk6Un0pLEEuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6TH0pXX1mdW5jdGlvbiBDKHcpe3MuY2FsbCh0aGlzLHcpO3ZhciBTPW5ldyB2KHRoaXMudHlwZSx0aGlzLm9wdGlvbnMua2V5KTt0aGlzLl9lZGVTdGF0ZT1TfWMoQyxzKSxmZS5leHBvcnRzPUMsQy5jcmVh''@;'; put 'put ''dGU9ZnVuY3Rpb24oUyl7cmV0dXJuIG5ldyBDKFMpfSxDLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFMsTCxSLHgpe3ZhciBVPXRoaXMuX2VkZVN0YXRlO1UuY2lwaGVyc1swXS5fdXBkYXRlKFMsTCxSLHgpLFUuY2lwaGVyc1sxXS5fdXBkYXRlKFIseCxSLHgpLFUuY2lwaGVyc1syXS5f''@;'; put 'put ''dXBkYXRlKFIseCxSLHgpfSxDLnByb3RvdHlwZS5fcGFkPUEucHJvdG90eXBlLl9wYWQsQy5wcm90b3R5cGUuX3VucGFkPUEucHJvdG90eXBlLl91bnBhZH0sODc2MjYoZmUsail7InVzZSBzdHJpY3QiO2oucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKEEsdil7cmV0dXJuKEFbMCt2XTw8MjR8QVsx''@;'; put 'put ''K3ZdPDwxNnxBWzIrdl08PDh8QVszK3ZdKT4+PjB9LGoud3JpdGVVSW50MzJCRT1mdW5jdGlvbihBLHYsQyl7QVswK0NdPXY+Pj4yNCxBWzErQ109dj4+PjE2JjI1NSxBWzIrQ109dj4+PjgmMjU1LEFbMytDXT0yNTUmdn0sai5pcD1mdW5jdGlvbihBLHYsQyx3KXtmb3IodmFyIFM9MCxMPTAs''@;'; put 'put ''Uj02O1I+PTA7Ui09Mil7Zm9yKHZhciB4PTA7eDw9MjQ7eCs9OClTPDw9MSxTfD12Pj4+eCtSJjE7Zm9yKHg9MDt4PD0yNDt4Kz04KVM8PD0xLFN8PUE+Pj54K1ImMX1mb3IoUj02O1I+PTA7Ui09Mil7Zm9yKHg9MTt4PD0yNTt4Kz04KUw8PD0xLEx8PXY+Pj54K1ImMTtmb3IoeD0xO3g8PTI1''@;'; put 'put ''O3grPTgpTDw8PTEsTHw9QT4+PngrUiYxfUNbdyswXT1TPj4+MCxDW3crMV09TD4+PjB9LGoucmlwPWZ1bmN0aW9uKEEsdixDLHcpe2Zvcih2YXIgUz0wLEw9MCxSPTA7Ujw0O1IrKylmb3IodmFyIHg9MjQ7eD49MDt4LT04KVM8PD0xLFN8PXY+Pj54K1ImMSxTPDw9MSxTfD1BPj4+eCtSJjE7''@;'; put 'put ''Zm9yKFI9NDtSPDg7UisrKWZvcih4PTI0O3g+PTA7eC09OClMPDw9MSxMfD12Pj4+eCtSJjEsTDw8PTEsTHw9QT4+PngrUiYxO0NbdyswXT1TPj4+MCxDW3crMV09TD4+PjB9LGoucGMxPWZ1bmN0aW9uKEEsdixDLHcpe2Zvcih2YXIgUz0wLEw9MCxSPTc7Uj49NTtSLS0pe2Zvcih2YXIgeD0w''@;'; put 'put ''O3g8PTI0O3grPTgpUzw8PTEsU3w9dj4+eCtSJjE7Zm9yKHg9MDt4PD0yNDt4Kz04KVM8PD0xLFN8PUE+PngrUiYxfWZvcih4PTA7eDw9MjQ7eCs9OClTPDw9MSxTfD12Pj54K1ImMTtmb3IoUj0xO1I8PTM7UisrKXtmb3IoeD0wO3g8PTI0O3grPTgpTDw8PTEsTHw9dj4+eCtSJjE7Zm9yKHg9''@;'; put 'put ''MDt4PD0yNDt4Kz04KUw8PD0xLEx8PUE+PngrUiYxfWZvcih4PTA7eDw9MjQ7eCs9OClMPDw9MSxMfD1BPj54K1ImMTtDW3crMF09Uz4+PjAsQ1t3KzFdPUw+Pj4wfSxqLnIyOHNobD1mdW5jdGlvbihBLHYpe3JldHVybiBBPDx2JjI2ODQzNTQ1NXxBPj4+Mjgtdn07dmFyIGg9WzE0LDExLDE3''@;'; put 'put ''LDQsMjcsMjMsMjUsMCwxMywyMiw3LDE4LDUsOSwxNiwyNCwyLDIwLDEyLDIxLDEsOCwxNSwyNiwxNSw0LDI1LDE5LDksMSwyNiwxNiw1LDExLDIzLDgsMTIsNywxNywwLDIyLDMsMTAsMTQsNiwyMCwyNywyNF07ai5wYzI9ZnVuY3Rpb24oQSx2LEMsdyl7Zm9yKHZhciBTPTAsTD0wLFI9aC5s''@;'; put 'put ''ZW5ndGg+Pj4xLHg9MDt4PFI7eCsrKVM8PD0xLFN8PUE+Pj5oW3hdJjE7Zm9yKHg9Ujt4PGgubGVuZ3RoO3grKylMPDw9MSxMfD12Pj4+aFt4XSYxO0NbdyswXT1TPj4+MCxDW3crMV09TD4+PjB9LGouZXhwYW5kPWZ1bmN0aW9uKEEsdixDKXt2YXIgdz0wLFM9MDt3PSgxJkEpPDw1fEE+Pj4y''@;'; put 'put ''Nztmb3IodmFyIEw9MjM7TD49MTU7TC09NCl3PDw9Nix3fD1BPj4+TCY2Mztmb3IoTD0xMTtMPj0zO0wtPTQpU3w9QT4+PkwmNjMsUzw8PTY7U3w9KDMxJkEpPDwxfEE+Pj4zMSx2W0MrMF09dz4+PjAsdltDKzFdPVM+Pj4wfTt2YXIgeT1bMTQsMCw0LDE1LDEzLDcsMSw0LDIsMTQsMTUsMiwx''@;'; put 'put ''MSwxMyw4LDEsMywxMCwxMCw2LDYsMTIsMTIsMTEsNSw5LDksNSwwLDMsNyw4LDQsMTUsMSwxMiwxNCw4LDgsMiwxMyw0LDYsOSwyLDEsMTEsNywxNSw1LDEyLDExLDksMyw3LDE0LDMsMTAsMTAsMCw1LDYsMCwxMywxNSwzLDEsMTMsOCw0LDE0LDcsNiwxNSwxMSwyLDMsOCw0LDE0LDksMTIs''@;'; put 'put ''NywwLDIsMSwxMywxMCwxMiw2LDAsOSw1LDExLDEwLDUsMCwxMywxNCw4LDcsMTAsMTEsMSwxMCwzLDQsMTUsMTMsNCwxLDIsNSwxMSw4LDYsMTIsNyw2LDEyLDksMCwzLDUsMiwxNCwxNSw5LDEwLDEzLDAsNyw5LDAsMTQsOSw2LDMsMyw0LDE1LDYsNSwxMCwxLDIsMTMsOCwxMiw1LDcsMTQs''@;'; put 'put ''MTEsMTIsNCwxMSwyLDE1LDgsMSwxMywxLDYsMTAsNCwxMyw5LDAsOCw2LDE1LDksMyw4LDAsNywxMSw0LDEsMTUsMiwxNCwxMiwzLDUsMTEsMTAsNSwxNCwyLDcsMTIsNywxMywxMyw4LDE0LDExLDMsNSwwLDYsNiwxNSw5LDAsMTAsMywxLDQsMiw3LDgsMiw1LDEyLDExLDEsMTIsMTAsNCwx''@;'; put 'put ''NCwxNSw5LDEwLDMsNiwxNSw5LDAsMCw2LDEyLDEwLDExLDEsNywxMywxMyw4LDE1LDksMSw0LDMsNSwxNCwxMSw1LDEyLDIsNyw4LDIsNCwxNCwyLDE0LDEyLDExLDQsMiwxLDEyLDcsNCwxMCw3LDExLDEzLDYsMSw4LDUsNSwwLDMsMTUsMTUsMTAsMTMsMywwLDksMTQsOCw5LDYsNCwxMSwy''@;'; put 'put ''LDgsMSwxMiwxMSw3LDEwLDEsMTMsMTQsNywyLDgsMTMsMTUsNiw5LDE1LDEyLDAsNSw5LDYsMTAsMyw0LDAsNSwxNCwzLDEyLDEwLDEsMTUsMTAsNCwxNSwyLDksNywyLDEyLDYsOSw4LDUsMCw2LDEzLDEsMywxMyw0LDE0LDE0LDAsNywxMSw1LDMsMTEsOCw5LDQsMTQsMywxNSwyLDUsMTIs''@;'; put 'put ''Miw5LDgsNSwxMiwxNSwzLDEwLDcsMTEsMCwxNCw0LDEsMTAsNywxLDYsMTMsMCwxMSw4LDYsMTMsNCwxMywxMSwwLDIsMTEsMTQsNywxNSw0LDAsOSw4LDEsMTMsMTAsMywxNCwxMiwzLDksNSw3LDEyLDUsMiwxMCwxNSw2LDgsMSw2LDEsNiw0LDExLDExLDEzLDEzLDgsMTIsMSwzLDQsNywx''@;'; put 'put ''MCwxNCw3LDEwLDksMTUsNSw2LDAsOCwxNSwwLDE0LDUsMiw5LDMsMiwxMiwxMywxLDIsMTUsOCwxMyw0LDgsNiwxMCwxNSwzLDExLDcsMSw0LDEwLDEyLDksNSwzLDYsMTQsMTEsNSwwLDAsMTQsMTIsOSw3LDIsNywyLDExLDEsNCwxNCwxLDcsOSw0LDEyLDEwLDE0LDgsMiwxMywwLDE1LDYs''@;'; put 'put ''MTIsMTAsOSwxMywwLDE1LDMsMyw1LDUsNiw4LDExXTtqLnN1YnN0aXR1dGU9ZnVuY3Rpb24oQSx2KXtmb3IodmFyIEM9MCx3PTA7dzw0O3crKylDPDw9NCxDfD15WzY0KncrKEE+Pj4xOC02KncmNjMpXTtmb3Iodz0wO3c8NDt3KyspQzw8PTQsQ3w9eVsyNTYrNjQqdysodj4+PjE4LTYqdyY2''@;'; put 'put ''MyldO3JldHVybiBDPj4+MH07dmFyIGM9WzE2LDI1LDEyLDExLDMsMjAsNCwxNSwzMSwxNyw5LDYsMjcsMTQsMSwyMiwzMCwyNCw4LDE4LDAsNSwyOSwyMywxMywxOSwyLDI2LDEwLDIxLDI4LDddO2oucGVybXV0ZT1mdW5jdGlvbihBKXtmb3IodmFyIHY9MCxDPTA7QzxjLmxlbmd0aDtDKysp''@;'; put 'put ''djw8PTEsdnw9QT4+PmNbQ10mMTtyZXR1cm4gdj4+PjB9LGoucGFkU3BsaXQ9ZnVuY3Rpb24oQSx2LEMpe2Zvcih2YXIgdz1BLnRvU3RyaW5nKDIpO3cubGVuZ3RoPHY7KXc9IjAiK3c7Zm9yKHZhciBTPVtdLEw9MDtMPHY7TCs9QylTLnB1c2gody5zbGljZShMLEwrQykpO3JldHVybiBTLmpv''@;'; put 'put ''aW4oIiAiKX19LDE1MzgwKGZlLGosaCl7dmFyIHk9aCg0ODI4NykuQnVmZmVyLGM9aCg0OTM0KSxzPWgoMjMyNDEpLEE9aCgxNDkxMCksQz17YmluYXJ5OiEwLGhleDohMCxiYXNlNjQ6ITB9O2ouRGlmZmllSGVsbG1hbkdyb3VwPWouY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPWouZ2V0RGlm''@;'; put 'put ''ZmllSGVsbG1hbj1mdW5jdGlvbiB2KFMpe3ZhciBMPW5ldyB5KHNbU10ucHJpbWUsImhleCIpLFI9bmV3IHkoc1tTXS5nZW4sImhleCIpO3JldHVybiBuZXcgQShMLFIpfSxqLmNyZWF0ZURpZmZpZUhlbGxtYW49ai5EaWZmaWVIZWxsbWFuPWZ1bmN0aW9uIHcoUyxMLFIseCl7cmV0dXJuIHku''@;'; put 'put ''aXNCdWZmZXIoTCl8fHZvaWQgMD09PUNbTF0/dyhTLCJiaW5hcnkiLEwsUik6KEw9THx8ImJpbmFyeSIseD14fHwiYmluYXJ5IixSPVJ8fG5ldyB5KFsyXSkseS5pc0J1ZmZlcihSKXx8KFI9bmV3IHkoUix4KSksIm51bWJlciI9PXR5cGVvZiBTP25ldyBBKGMoUyxSKSxSLCEwKTooeS5pc0J1''@;'; put 'put ''ZmZlcihTKXx8KFM9bmV3IHkoUyxMKSksbmV3IEEoUyxSLCEwKSkpfX0sMTQ5MTAoZmUsaixoKXt2YXIgeT1oKDQ4Mjg3KS5CdWZmZXIsYz1oKDY2NDczKSxBPW5ldyhoKDUyMjQ0KSksdj1uZXcgYygyNCksQz1uZXcgYygxMSksdz1uZXcgYygxMCksUz1uZXcgYygzKSxMPW5ldyBjKDcpLFI9''@;'; put 'put ''aCg0OTM0KSx4PWgoNTMyMDkpO2Z1bmN0aW9uIFUoRixXKXtyZXR1cm4gVz1XfHwidXRmOCIseS5pc0J1ZmZlcihGKXx8KEY9bmV3IHkoRixXKSksdGhpcy5fcHViPW5ldyBjKEYpLHRoaXN9ZnVuY3Rpb24gSChGLFcpe3JldHVybiBXPVd8fCJ1dGY4Iix5LmlzQnVmZmVyKEYpfHwoRj1uZXcg''@;'; put 'put ''eShGLFcpKSx0aGlzLl9wcml2PW5ldyBjKEYpLHRoaXN9ZmUuZXhwb3J0cz16O3ZhciBWPXt9O2Z1bmN0aW9uIHooRixXLHEpe3RoaXMuc2V0R2VuZXJhdG9yKFcpLHRoaXMuX19wcmltZT1uZXcgYyhGKSx0aGlzLl9wcmltZT1jLm1vbnQodGhpcy5fX3ByaW1lKSx0aGlzLl9wcmltZUxlbj1G''@;'; put 'put ''Lmxlbmd0aCx0aGlzLl9wdWI9dm9pZCAwLHRoaXMuX3ByaXY9dm9pZCAwLHRoaXMuX3ByaW1lQ29kZT12b2lkIDAscT8odGhpcy5zZXRQdWJsaWNLZXk9VSx0aGlzLnNldFByaXZhdGVLZXk9SCk6dGhpcy5fcHJpbWVDb2RlPTh9ZnVuY3Rpb24gWShGLFcpe3ZhciBxPW5ldyB5KEYudG9BcnJh''@;'; put 'put ''eSgpKTtyZXR1cm4gVz9xLnRvU3RyaW5nKFcpOnF9T2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJ2ZXJpZnlFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0aGlzLl9wcmltZUNvZGUmJih0aGlzLl9wcmltZUNvZGU9''@;'; put 'put ''ZnVuY3Rpb24gTihGLFcpe3ZhciBxPVcudG9TdHJpbmcoImhleCIpLHJlPVtxLEYudG9TdHJpbmcoMTYpXS5qb2luKCJfIik7aWYocmUgaW4gVilyZXR1cm4gVltyZV07dmFyIENlLG1lPTA7aWYoRi5pc0V2ZW4oKXx8IVIuc2ltcGxlU2lldmV8fCFSLmZlcm1hdFRlc3QoRil8fCFBLnRlc3Qo''@;'; put 'put ''RikpcmV0dXJuIG1lKz0xLFZbcmVdPW1lKz0iMDIiPT09cXx8IjA1Ij09PXE/ODo0LG1lO3N3aXRjaChBLnRlc3QoRi5zaHJuKDEpKXx8KG1lKz0yKSxxKXtjYXNlIjAyIjpGLm1vZCh2KS5jbXAoQykmJihtZSs9OCk7YnJlYWs7Y2FzZSIwNSI6KENlPUYubW9kKHcpKS5jbXAoUykmJkNlLmNt''@;'; put 'put ''cChMKSYmKG1lKz04KTticmVhaztkZWZhdWx0Om1lKz00fXJldHVybiBWW3JlXT1tZSxtZX0odGhpcy5fX3ByaW1lLHRoaXMuX19nZW4pKSx0aGlzLl9wcmltZUNvZGV9fSksei5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZ8fCh0aGlzLl9wcml2''@;'; put 'put ''PW5ldyBjKHgodGhpcy5fcHJpbWVMZW4pKSksdGhpcy5fcHViPXRoaXMuX2dlbi50b1JlZCh0aGlzLl9wcmltZSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSx0aGlzLmdldFB1YmxpY0tleSgpfSx6LnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKEYpe3ZhciBXPShGPShG''@;'; put 'put ''PW5ldyBjKEYpKS50b1JlZCh0aGlzLl9wcmltZSkpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCkscT1uZXcgeShXLnRvQXJyYXkoKSkscmU9dGhpcy5nZXRQcmltZSgpO2lmKHEubGVuZ3RoPHJlLmxlbmd0aCl7dmFyIG1lPW5ldyB5KHJlLmxlbmd0aC1xLmxlbmd0aCk7bWUuZmlsbCgw''@;'; put 'put ''KSxxPXkuY29uY2F0KFttZSxxXSl9cmV0dXJuIHF9LHoucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihXKXtyZXR1cm4gWSh0aGlzLl9wdWIsVyl9LHoucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oVyl7cmV0dXJuIFkodGhpcy5fcHJpdixXKX0sei5wcm90b3R5cGUu''@;'; put 'put ''Z2V0UHJpbWU9ZnVuY3Rpb24oRil7cmV0dXJuIFkodGhpcy5fX3ByaW1lLEYpfSx6LnByb3RvdHlwZS5nZXRHZW5lcmF0b3I9ZnVuY3Rpb24oRil7cmV0dXJuIFkodGhpcy5fZ2VuLEYpfSx6LnByb3RvdHlwZS5zZXRHZW5lcmF0b3I9ZnVuY3Rpb24oRixXKXtyZXR1cm4gVz1XfHwidXRmOCIs''@;'; put 'put ''eS5pc0J1ZmZlcihGKXx8KEY9bmV3IHkoRixXKSksdGhpcy5fX2dlbj1GLHRoaXMuX2dlbj1uZXcgYyhGKSx0aGlzfX0sNDkzNChmZSxqLGgpe3ZhciB5PWgoNTMyMDkpO2ZlLmV4cG9ydHM9cmUscmUuc2ltcGxlU2lldmU9VyxyZS5mZXJtYXRUZXN0PXE7dmFyIGM9aCg2NjQ3Mykscz1uZXcg''@;'; put 'put ''YygyNCksdj1uZXcoaCg1MjI0NCkpLEM9bmV3IGMoMSksdz1uZXcgYygyKSxTPW5ldyBjKDUpLHg9KG5ldyBjKDE2KSxuZXcgYyg4KSxuZXcgYygxMCkpLFU9bmV3IGMoMyksVj0obmV3IGMoNyksbmV3IGMoMTEpKSxOPW5ldyBjKDQpLFk9KG5ldyBjKDEyKSxudWxsKTtmdW5jdGlvbiBXKG1l''@;'; put 'put ''KXtmb3IodmFyIENlPWZ1bmN0aW9uIEYoKXtpZihudWxsIT09WSlyZXR1cm4gWTt2YXIgQ2U9W107Q2VbMF09Mjtmb3IodmFyIEllPTEsa2U9MztrZTwxMDQ4NTc2O2tlKz0yKXtmb3IodmFyIHFlPU1hdGguY2VpbChNYXRoLnNxcnQoa2UpKSxYPTA7WDxJZSYmQ2VbWF08PXFlJiZrZSVDZVtY''@;'; put 'put ''XSE9PTA7WCsrKTtJZSE9PVgmJkNlW1hdPD1xZXx8KENlW0llKytdPWtlKX1yZXR1cm4gWT1DZSxDZX0oKSxJZT0wO0llPENlLmxlbmd0aDtJZSsrKWlmKDA9PT1tZS5tb2RuKENlW0llXSkpcmV0dXJuIDA9PT1tZS5jbXBuKENlW0llXSk7cmV0dXJuITB9ZnVuY3Rpb24gcShtZSl7dmFyIENl''@;'; put 'put ''PWMubW9udChtZSk7cmV0dXJuIDA9PT13LnRvUmVkKENlKS5yZWRQb3cobWUuc3VibigxKSkuZnJvbVJlZCgpLmNtcG4oMSl9ZnVuY3Rpb24gcmUobWUsQ2Upe2lmKG1lPDE2KXJldHVybiBuZXcgYygyPT09Q2V8fDU9PT1DZT9bMTQwLDEyM106WzE0MCwzOV0pO0NlPW5ldyBjKENlKTtmb3Io''@;'; put 'put ''dmFyIEllLGtlOzspe2ZvcihJZT1uZXcgYyh5KE1hdGguY2VpbChtZS84KSkpO0llLmJpdExlbmd0aCgpPm1lOylJZS5pc2hybigxKTtpZihJZS5pc0V2ZW4oKSYmSWUuaWFkZChDKSxJZS50ZXN0bigxKXx8SWUuaWFkZCh3KSxDZS5jbXAodykpe2lmKCFDZS5jbXAoUykpZm9yKDtJZS5tb2Qo''@;'; put 'put ''eCkuY21wKFUpOylJZS5pYWRkKE4pfWVsc2UgZm9yKDtJZS5tb2QocykuY21wKFYpOylJZS5pYWRkKE4pO2lmKFcoa2U9SWUuc2hybigxKSkmJlcoSWUpJiZxKGtlKSYmcShJZSkmJnYudGVzdChrZSkmJnYudGVzdChJZSkpcmV0dXJuIEllfX19LDY2NDczKGZlLGosaCl7IWZ1bmN0aW9uKHks''@;'; put 'put ''Yyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHMoWCxmKXtpZighWCl0aHJvdyBuZXcgRXJyb3IoZnx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBBKFgsZil7WC5zdXBlcl89Zjt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9Zi5wcm90b3R5cGUsWC5wcm90b3R5cGU9bmV3IGIs''@;'; put 'put ''WC5wcm90b3R5cGUuY29uc3RydWN0b3I9WH1mdW5jdGlvbiB2KFgsZixiKXtpZih2LmlzQk4oWCkpcmV0dXJuIFg7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVgmJigoImxlIj09PWZ8fCJiZSI9PT1mKSYmKGI9Zixm''@;'; put 'put ''PTEwKSx0aGlzLl9pbml0KFh8fDAsZnx8MTAsYnx8ImJlIikpfXZhciBDOyJvYmplY3QiPT10eXBlb2YgeT95LmV4cG9ydHM9djpjLkJOPXYsdi5CTj12LHYud29yZFNpemU9MjY7dHJ5e0M9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVy''@;'; put 'put ''OmgoNjYwODkpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gdyhYLGYpe3ZhciBiPVguY2hhckNvZGVBdChmKTtyZXR1cm4gYj49NjUmJmI8PTcwP2ItNTU6Yj49OTcmJmI8PTEwMj9iLTg3OmItNDgmMTV9ZnVuY3Rpb24gUyhYLGYsYil7dmFyIGs9dyhYLGIpO3JldHVybiBiLTE+PWYmJihrfD13''@;'; put 'put ''KFgsYi0xKTw8NCksa31mdW5jdGlvbiBMKFgsZixiLGspe2Zvcih2YXIgTT0wLEI9TWF0aC5taW4oWC5sZW5ndGgsYiksSz1mO0s8QjtLKyspe3ZhciBHPVguY2hhckNvZGVBdChLKS00ODtNKj1rLE0rPUc+PTQ5P0ctNDkrMTA6Rz49MTc/Ry0xNysxMDpHfXJldHVybiBNfXYuaXNCTj1mdW5j''@;'; put 'put ''dGlvbihmKXtyZXR1cm4gZiBpbnN0YW5jZW9mIHZ8fG51bGwhPT1mJiYib2JqZWN0Ij09dHlwZW9mIGYmJmYuY29uc3RydWN0b3Iud29yZFNpemU9PT12LndvcmRTaXplJiZBcnJheS5pc0FycmF5KGYud29yZHMpfSx2Lm1heD1mdW5jdGlvbihmLGIpe3JldHVybiBmLmNtcChiKT4wP2Y6Yn0s''@;'; put 'put ''di5taW49ZnVuY3Rpb24oZixiKXtyZXR1cm4gZi5jbXAoYik8MD9mOmJ9LHYucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGYsYixrKXtpZigibnVtYmVyIj09dHlwZW9mIGYpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZixiLGspO2lmKCJvYmplY3QiPT10eXBlb2YgZilyZXR1cm4gdGhpcy5f''@;'; put 'put ''aW5pdEFycmF5KGYsYixrKTsiaGV4Ij09PWImJihiPTE2KSxzKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpO3ZhciBNPTA7Ii0iPT09KGY9Zi50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihNKyssdGhpcy5uZWdhdGl2ZT0xKSxNPGYubGVuZ3RoJiYoMTY9PT1iP3RoaXMuX3Bh''@;'; put 'put ''cnNlSGV4KGYsTSxrKToodGhpcy5fcGFyc2VCYXNlKGYsYixNKSwibGUiPT09ayYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIsaykpKX0sdi5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZixiLGspe2Y8MCYmKHRoaXMubmVnYXRpdmU9MSxmPS1mKSxmPDY3MTA4ODY0''@;'; put 'put ''Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZmXSx0aGlzLmxlbmd0aD0xKTpmPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmYsZi82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KHMoZjw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZm''@;'; put 'put ''LGYvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PWsmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLGspfSx2LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGYsYixrKXtpZihzKCJudW1iZXIiPT10eXBlb2YgZi5sZW5ndGgpLGYubGVuZ3Ro''@;'; put 'put ''PD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGYubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIE09MDtNPHRoaXMubGVuZ3RoO00rKyl0aGlzLndvcmRzW01dPTA7dmFyIEIs''@;'; put 'put ''SyxHPTA7aWYoImJlIj09PWspZm9yKE09Zi5sZW5ndGgtMSxCPTA7TT49MDtNLT0zKXRoaXMud29yZHNbQl18PShLPWZbTV18ZltNLTFdPDw4fGZbTS0yXTw8MTYpPDxHJjY3MTA4ODYzLHRoaXMud29yZHNbQisxXT1LPj4+MjYtRyY2NzEwODg2MywoRys9MjQpPj0yNiYmKEctPTI2LEIrKyk7''@;'; put 'put ''ZWxzZSBpZigibGUiPT09aylmb3IoTT0wLEI9MDtNPGYubGVuZ3RoO00rPTMpdGhpcy53b3Jkc1tCXXw9KEs9ZltNXXxmW00rMV08PDh8ZltNKzJdPDwxNik8PEcmNjcxMDg4NjMsdGhpcy53b3Jkc1tCKzFdPUs+Pj4yNi1HJjY3MTA4ODYzLChHKz0yNCk+PTI2JiYoRy09MjYsQisrKTtyZXR1''@;'; put 'put ''cm4gdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZixiLGspe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZi5sZW5ndGgtYikvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTT0wO008dGhpcy5sZW5ndGg7TSsrKXRoaXMud29y''@;'; put 'put ''ZHNbTV09MDt2YXIgRyxCPTAsSz0wO2lmKCJiZSI9PT1rKWZvcihNPWYubGVuZ3RoLTE7TT49YjtNLT0yKUc9UyhmLGIsTSk8PEIsdGhpcy53b3Jkc1tLXXw9NjcxMDg4NjMmRyxCPj0xOD8oQi09MTgsdGhpcy53b3Jkc1tLKz0xXXw9Rz4+PjI2KTpCKz04O2Vsc2UgZm9yKE09KGYubGVuZ3Ro''@;'; put 'put ''LWIpJTI9PTA/YisxOmI7TTxmLmxlbmd0aDtNKz0yKUc9UyhmLGIsTSk8PEIsdGhpcy53b3Jkc1tLXXw9NjcxMDg4NjMmRyxCPj0xOD8oQi09MTgsdGhpcy53b3Jkc1tLKz0xXXw9Rz4+PjI2KTpCKz04O3RoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihmLGIs''@;'; put 'put ''ayl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIE09MCxCPTE7Qjw9NjcxMDg4NjM7Qio9YilNKys7TS0tLEI9Qi9ifDA7Zm9yKHZhciBLPWYubGVuZ3RoLWssRz1LJU0sRD1NYXRoLm1pbihLLEstRykrayxwPTAsST1rO0k8RDtJKz1NKXA9TChmLEksSStNLGIpLHRoaXMu''@;'; put 'put ''aW11bG4oQiksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCk7aWYoMCE9PUcpe3ZhciB1ZT0xO2ZvcihwPUwoZixJLGYubGVuZ3RoLGIpLEk9MDtJPEc7SSsrKXVlKj1iO3RoaXMuaW11bG4odWUpLHRoaXMud29yZHNbMF0rcDw2NzEwODg2''@;'; put 'put ''ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApfXRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihmKXtmLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspZi53b3Jkc1tiXT10aGlzLndvcmRzW2JdO2Yu''@;'; put 'put ''bGVuZ3RoPXRoaXMubGVuZ3RoLGYubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxmLnJlZD10aGlzLnJlZH0sdi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZj1uZXcgdihudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGYpLGZ9LHYucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZil7Zm9y''@;'; put 'put ''KDt0aGlzLmxlbmd0aDxmOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHYucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5f''@;'; put 'put ''bm9ybVNpZ24oKX0sdi5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1S''@;'; put 'put ''OiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIFI9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAw''@;'; put 'put ''MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0seD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYs''@;'; put 'put ''Niw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxVPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3''@;'; put 'put ''NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUs''@;'; put 'put ''NjA0NjYxNzZdO2Z1bmN0aW9uIFYoWCxmLGIpe2IubmVnYXRpdmU9Zi5uZWdhdGl2ZV5YLm5lZ2F0aXZlO3ZhciBrPVgubGVuZ3RoK2YubGVuZ3RofDA7Yi5sZW5ndGg9ayxrPWstMXwwO3ZhciBNPTB8WC53b3Jkc1swXSxCPTB8Zi53b3Jkc1swXSxLPU0qQixEPUsvNjcxMDg4NjR8MDtiLndv''@;'; put 'put ''cmRzWzBdPTY3MTA4ODYzJks7Zm9yKHZhciBwPTE7cDxrO3ArKyl7Zm9yKHZhciBJPUQ+Pj4yNix1ZT02NzEwODg2MyZELG5lPU1hdGgubWluKHAsZi5sZW5ndGgtMSksX2U9TWF0aC5tYXgoMCxwLVgubGVuZ3RoKzEpO19lPD1uZTtfZSsrKUkrPShLPShNPTB8WC53b3Jkc1twLV9lfDBdKSoo''@;'; put 'put ''Qj0wfGYud29yZHNbX2VdKSt1ZSkvNjcxMDg4NjR8MCx1ZT02NzEwODg2MyZLO2Iud29yZHNbcF09MHx1ZSxEPTB8SX1yZXR1cm4gMCE9PUQ/Yi53b3Jkc1twXT0wfEQ6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9di5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZixiKXt2YXIgaztpZihiPTB8''@;'; put 'put ''Ynx8MSwxNj09PShmPWZ8fDEwKXx8ImhleCI9PT1mKXtrPSIiO2Zvcih2YXIgTT0wLEI9MCxLPTA7Szx0aGlzLmxlbmd0aDtLKyspe3ZhciBHPXRoaXMud29yZHNbS10sRD0oMTY3NzcyMTUmKEc8PE18QikpLnRvU3RyaW5nKDE2KTtCPUc+Pj4yNC1NJjE2Nzc3MjE1LChNKz0yKT49MjYmJihN''@;'; put 'put ''LT0yNixLLS0pLGs9MCE9PUJ8fEshPT10aGlzLmxlbmd0aC0xP1JbNi1ELmxlbmd0aF0rRCtrOkQra31mb3IoMCE9PUImJihrPUIudG9TdHJpbmcoMTYpK2spO2subGVuZ3RoJWIhPT0wOylrPSIwIitrO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKGs9Ii0iK2spLGt9aWYoZj09PSgwfGYp''@;'; put 'put ''JiZmPj0yJiZmPD0zNil7dmFyIHA9eFtmXSxJPVVbZl07az0iIjt2YXIgdWU9dGhpcy5jbG9uZSgpO2Zvcih1ZS5uZWdhdGl2ZT0wOyF1ZS5pc1plcm8oKTspe3ZhciBuZT11ZS5tb2RuKEkpLnRvU3RyaW5nKGYpO2s9KHVlPXVlLmlkaXZuKEkpKS5pc1plcm8oKT9uZStrOlJbcC1uZS5sZW5n''@;'; put 'put ''dGhdK25lK2t9Zm9yKHRoaXMuaXNaZXJvKCkmJihrPSIwIitrKTtrLmxlbmd0aCViIT09MDspaz0iMCIraztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihrPSItIitrKSxrfXMoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdi5wcm90b3R5cGUudG9OdW1iZXI9ZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgZj10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zis9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2YrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0''@;'; put 'put ''aD4yJiZzKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZjpmfSx2LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHYucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9u''@;'; put 'put ''KGYsYil7cmV0dXJuIHModHlwZW9mIEM8InUiKSx0aGlzLnRvQXJyYXlMaWtlKEMsZixiKX0sdi5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihmLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGYsYil9LHYucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGYsYixrKXt2''@;'; put 'put ''YXIgTT10aGlzLmJ5dGVMZW5ndGgoKSxCPWt8fE1hdGgubWF4KDEsTSk7cyhNPD1CLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIikscyhCPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRCxwLEs9ImxlIj09PWIsRz1uZXcg''@;'; put 'put ''ZihCKSxJPXRoaXMuY2xvbmUoKTtpZihLKXtmb3IocD0wOyFJLmlzWmVybygpO3ArKylEPUkuYW5kbG4oMjU1KSxJLml1c2hybig4KSxHW3BdPUQ7Zm9yKDtwPEI7cCsrKUdbcF09MH1lbHNle2ZvcihwPTA7cDxCLU07cCsrKUdbcF09MDtmb3IocD0wOyFJLmlzWmVybygpO3ArKylEPUkuYW5k''@;'; put 'put ''bG4oMjU1KSxJLml1c2hybig4KSxHW0ItcC0xXT1EfXJldHVybiBHfSx2LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZil7cmV0dXJuIDMyLU1hdGguY2x6MzIoZil9OmZ1bmN0aW9uKGYpe3ZhciBiPWYsaz0wO3JldHVybiBiPj00MDk2JiYoays9MTMsYj4+Pj0x''@;'; put 'put ''MyksYj49NjQmJihrKz03LGI+Pj49NyksYj49OCYmKGsrPTQsYj4+Pj00KSxiPj0yJiYoays9MixiPj4+PTIpLGsrYn0sdi5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGYpe2lmKDA9PT1mKXJldHVybiAyNjt2YXIgYj1mLGs9MDtyZXR1cm4hKDgxOTEmYikmJihrKz0xMyxiPj4+PTEz''@;'; put 'put ''KSwhKDEyNyZiKSYmKGsrPTcsYj4+Pj03KSwhKDE1JmIpJiYoays9NCxiPj4+PTQpLCEoMyZiKSYmKGsrPTIsYj4+Pj0yKSwhKDEmYikmJmsrKyxrfSx2LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0x''@;'; put 'put ''XSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx2LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBmPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgaz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihm''@;'; put 'put ''Kz1rLDI2IT09aylicmVha31yZXR1cm4gZn0sdi5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdi5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGYpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygp''@;'; put 'put ''Lmlub3RuKGYpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdi5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMudGVzdG4oZi0xKT90aGlzLm5vdG4oZikuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdi5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gMCE9PXRoaXMubmVnYXRpdmV9LHYucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx2LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx2LnByb3RvdHlwZS5p''@;'; put 'put ''dW9yPWZ1bmN0aW9uKGYpe2Zvcig7dGhpcy5sZW5ndGg8Zi5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPGYubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18Zi53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx2LnByb3Rv''@;'; put 'put ''dHlwZS5pb3I9ZnVuY3Rpb24oZil7cmV0dXJuIHMoMD09PSh0aGlzLm5lZ2F0aXZlfGYubmVnYXRpdmUpKSx0aGlzLml1b3IoZil9LHYucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmxlbmd0aD5mLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGYpOmYuY2xvbmUoKS5pb3Io''@;'; put 'put ''dGhpcyl9LHYucHJvdG90eXBlLnVvcj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZik6Zi5jbG9uZSgpLml1b3IodGhpcyl9LHYucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGYpe3ZhciBiO2I9dGhpcy5sZW5ndGg+Zi5sZW5ndGg/''@;'; put 'put ''Zjp0aGlzO2Zvcih2YXIgaz0wO2s8Yi5sZW5ndGg7aysrKXRoaXMud29yZHNba109dGhpcy53b3Jkc1trXSZmLndvcmRzW2tdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZil7cmV0dXJuIHMoMD09PSh0aGlzLm5l''@;'; put 'put ''Z2F0aXZlfGYubmVnYXRpdmUpKSx0aGlzLml1YW5kKGYpfSx2LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMubGVuZ3RoPmYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGYpOmYuY2xvbmUoKS5pYW5kKHRoaXMpfSx2LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGYpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmxlbmd0aD5mLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZik6Zi5jbG9uZSgpLml1YW5kKHRoaXMpfSx2LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihmKXt2YXIgYixrO3RoaXMubGVuZ3RoPmYubGVuZ3RoPyhiPXRoaXMsaz1mKTooYj1mLGs9dGhpcyk7Zm9yKHZhciBN''@;'; put 'put ''PTA7TTxrLmxlbmd0aDtNKyspdGhpcy53b3Jkc1tNXT1iLndvcmRzW01dXmsud29yZHNbTV07aWYodGhpcyE9PWIpZm9yKDtNPGIubGVuZ3RoO00rKyl0aGlzLndvcmRzW01dPWIud29yZHNbTV07cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUu''@;'; put 'put ''aXhvcj1mdW5jdGlvbihmKXtyZXR1cm4gcygwPT09KHRoaXMubmVnYXRpdmV8Zi5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZil9LHYucHJvdG90eXBlLnhvcj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zi5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZik6Zi5jbG9uZSgpLml4b3Io''@;'; put 'put ''dGhpcyl9LHYucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMubGVuZ3RoPmYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihmKTpmLmNsb25lKCkuaXV4b3IodGhpcyl9LHYucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGYpe3MoIm51bWJlciI9PXR5cGVvZiBmJiZmPj0w''@;'; put 'put ''KTt2YXIgYj0wfE1hdGguY2VpbChmLzI2KSxrPWYlMjY7dGhpcy5fZXhwYW5kKGIpLGs+MCYmYi0tO2Zvcih2YXIgTT0wO008YjtNKyspdGhpcy53b3Jkc1tNXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tNXTtmb3Ioaz4wJiYodGhpcy53b3Jkc1tNXT1+dGhpcy53b3Jkc1tNXSY2NzEwODg2Mz4+''@;'; put 'put ''MjYtayxNKyspO008dGhpcy5sZW5ndGg7TSsrKXRoaXMud29yZHNbTV09MDtyZXR1cm4gdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZil9LHYucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZixiKXtzKCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgZiYmZj49MCk7dmFyIGs9Zi8yNnwwLE09ZiUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKGsrMSksdGhpcy53b3Jkc1trXT1iP3RoaXMud29yZHNba118MTw8TTp0aGlzLndvcmRzW2tdJn4oMTw8TSksdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGYpe3Zh''@;'; put 'put ''ciBiLGssTTtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWYubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihmKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1mLm5lZ2F0aXZlKXJldHVybiBmLm5l''@;'; put 'put ''Z2F0aXZlPTAsYj10aGlzLmlzdWIoZiksZi5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zi5sZW5ndGg/KGs9dGhpcyxNPWYpOihrPWYsTT10aGlzKTtmb3IodmFyIEI9MCxLPTA7SzxNLmxlbmd0aDtLKyspdGhpcy53b3Jkc1tLXT02NzEwODg2MyYoYj0oMHxrLndvcmRz''@;'; put 'put ''W0tdKSsoMHxNLndvcmRzW0tdKStCKSxCPWI+Pj4yNjtmb3IoOzAhPT1CJiZLPGsubGVuZ3RoO0srKyl0aGlzLndvcmRzW0tdPTY3MTA4ODYzJihiPSgwfGsud29yZHNbS10pK0IpLEI9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPWsubGVuZ3RoLDAhPT1CKXRoaXMud29yZHNbdGhpcy5sZW5ndGhd''@;'; put 'put ''PUIsdGhpcy5sZW5ndGgrKztlbHNlIGlmKGshPT10aGlzKWZvcig7SzxrLmxlbmd0aDtLKyspdGhpcy53b3Jkc1tLXT1rLndvcmRzW0tdO3JldHVybiB0aGlzfSx2LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZil7dmFyIGI7cmV0dXJuIDAhPT1mLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZT8oZi5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIoZiksZi5uZWdhdGl2ZV49MSxiKTowPT09Zi5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPWYuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5mLmxlbmd0aD90aGlzLmNsb25lKCku''@;'; put 'put ''aWFkZChmKTpmLmNsb25lKCkuaWFkZCh0aGlzKX0sdi5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihmKXtpZigwIT09Zi5uZWdhdGl2ZSl7Zi5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChmKTtyZXR1cm4gZi5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUp''@;'; put 'put ''cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIE0sQixrPXRoaXMuY21wKGYpO2lmKDA9PT1rKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztrPjA/KE09''@;'; put 'put ''dGhpcyxCPWYpOihNPWYsQj10aGlzKTtmb3IodmFyIEs9MCxHPTA7RzxCLmxlbmd0aDtHKyspSz0oYj0oMHxNLndvcmRzW0ddKS0oMHxCLndvcmRzW0ddKStLKT4+MjYsdGhpcy53b3Jkc1tHXT02NzEwODg2MyZiO2Zvcig7MCE9PUsmJkc8TS5sZW5ndGg7RysrKUs9KGI9KDB8TS53b3Jkc1tH''@;'; put 'put ''XSkrSyk+PjI2LHRoaXMud29yZHNbR109NjcxMDg4NjMmYjtpZigwPT09SyYmRzxNLmxlbmd0aCYmTSE9PXRoaXMpZm9yKDtHPE0ubGVuZ3RoO0crKyl0aGlzLndvcmRzW0ddPU0ud29yZHNbR107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEcpLE0hPT10aGlzJiYo''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZil9O3ZhciBOPWZ1bmN0aW9uKGYsYixrKXt2YXIgRCxwLEksTT1mLndvcmRzLEI9Yi53b3JkcyxLPWsud29yZHMsRz0wLHVlPTB8TVswXSxu''@;'; put 'put ''ZT04MTkxJnVlLF9lPXVlPj4+MTMsUGU9MHxNWzFdLG90PTgxOTEmUGUsbHQ9UGU+Pj4xMyxkdD0wfE1bMl0sUmU9ODE5MSZkdCxhZT1kdD4+PjEzLHhlPTB8TVszXSxqZT04MTkxJnhlLEFlPXhlPj4+MTMsRGU9MHxNWzRdLEZlPTgxOTEmRGUsZ2U9RGU+Pj4xMyxjZT0wfE1bNV0saGU9ODE5''@;'; put 'put ''MSZjZSx3ZT1jZT4+PjEzLEplPTB8TVs2XSx0dD04MTkxJkplLEtlPUplPj4+MTMsJHQ9MHxNWzddLFJ0PTgxOTEmJHQsTHQ9JHQ+Pj4xMyxHdD0wfE1bOF0sZ3Q9ODE5MSZHdCxYdD1HdD4+PjEzLExyPTB8TVs5XSxsbj04MTkxJkxyLE9uPUxyPj4+MTMsUXI9MHxCWzBdLHRyPTgxOTEmUXIs''@;'; put 'put ''SG49UXI+Pj4xMyxPbz0wfEJbMV0sdXI9ODE5MSZPbyxabj1Pbz4+PjEzLFNuPTB8QlsyXSx4cj04MTkxJlNuLFR0PVNuPj4+MTMsQXI9MHxCWzNdLF9uPTgxOTEmQXIsWnQ9QXI+Pj4xMyxObj0wfEJbNF0scHQ9ODE5MSZObixwbj1Obj4+PjEzLE1pPTB8Qls1XSxHZT04MTkxJk1pLFV0PU1p''@;'; put 'put ''Pj4+MTMsdnI9MHxCWzZdLHh0PTgxOTEmdnIsQnQ9dnI+Pj4xMyx6bj0wfEJbN10sR249ODE5MSZ6bix5bj16bj4+PjEzLHZpPTB8Qls4XSxycj04MTkxJnZpLGhyPXZpPj4+MTMscG89MHxCWzldLHZuPTgxOTEmcG8sQm49cG8+Pj4xMztrLm5lZ2F0aXZlPWYubmVnYXRpdmVeYi5uZWdhdGl2''@;'; put 'put ''ZSxrLmxlbmd0aD0xOTt2YXIgamE9KEcrKEQ9TWF0aC5pbXVsKG5lLHRyKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChuZSxIbikpK01hdGguaW11bChfZSx0cil8MCkpPDwxMyl8MDtHPSgoST1NYXRoLmltdWwoX2UsSG4pKSsocD4+PjEzKXwwKSsoamE+Pj4yNil8MCxqYSY9NjcxMDg4''@;'; put 'put ''NjMsRD1NYXRoLmltdWwob3QsdHIpLHA9KHA9TWF0aC5pbXVsKG90LEhuKSkrTWF0aC5pbXVsKGx0LHRyKXwwLEk9TWF0aC5pbXVsKGx0LEhuKTt2YXIgam89KEcrKEQ9RCtNYXRoLmltdWwobmUsdXIpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxabil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KF9lLHVyKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLFpuKXwwKSsocD4+PjEzKXwwKSsoam8+Pj4yNil8MCxqbyY9NjcxMDg4NjMsRD1NYXRoLmltdWwoUmUsdHIpLHA9KHA9TWF0aC5pbXVsKFJlLEhuKSkrTWF0aC5pbXVsKGFlLHRyKXwwLEk9TWF0aC5pbXVsKGFlLEhuKSxE''@;'; put 'put ''PUQrTWF0aC5pbXVsKG90LHVyKXwwLHA9KHA9cCtNYXRoLmltdWwob3QsWm4pfDApK01hdGguaW11bChsdCx1cil8MCxJPUkrTWF0aC5pbXVsKGx0LFpuKXwwO3ZhciBYcj0oRysoRD1EK01hdGguaW11bChuZSx4cil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLFR0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoX2UseHIpfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoX2UsVHQpfDApKyhwPj4+MTMpfDApKyhYcj4+PjI2KXwwLFhyJj02NzEwODg2MyxEPU1hdGguaW11bChqZSx0cikscD0ocD1NYXRoLmltdWwoamUsSG4pKStNYXRoLmltdWwoQWUsdHIpfDAsST1NYXRoLmltdWwo''@;'; put 'put ''QWUsSG4pLEQ9RCtNYXRoLmltdWwoUmUsdXIpfDAscD0ocD1wK01hdGguaW11bChSZSxabil8MCkrTWF0aC5pbXVsKGFlLHVyKXwwLEk9SStNYXRoLmltdWwoYWUsWm4pfDAsRD1EK01hdGguaW11bChvdCx4cil8MCxwPShwPXArTWF0aC5pbXVsKG90LFR0KXwwKStNYXRoLmltdWwobHQseHIp''@;'; put 'put ''fDAsST1JK01hdGguaW11bChsdCxUdCl8MDt2YXIgZWE9KEcrKEQ9RCtNYXRoLmltdWwobmUsX24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxadCl8MCkrTWF0aC5pbXVsKF9lLF9uKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLFp0KXwwKSsocD4+PjEzKXww''@;'; put 'put ''KSsoZWE+Pj4yNil8MCxlYSY9NjcxMDg4NjMsRD1NYXRoLmltdWwoRmUsdHIpLHA9KHA9TWF0aC5pbXVsKEZlLEhuKSkrTWF0aC5pbXVsKGdlLHRyKXwwLEk9TWF0aC5pbXVsKGdlLEhuKSxEPUQrTWF0aC5pbXVsKGplLHVyKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWm4pfDApK01hdGguaW11''@;'; put 'put ''bChBZSx1cil8MCxJPUkrTWF0aC5pbXVsKEFlLFpuKXwwLEQ9RCtNYXRoLmltdWwoUmUseHIpfDAscD0ocD1wK01hdGguaW11bChSZSxUdCl8MCkrTWF0aC5pbXVsKGFlLHhyKXwwLEk9SStNYXRoLmltdWwoYWUsVHQpfDAsRD1EK01hdGguaW11bChvdCxfbil8MCxwPShwPXArTWF0aC5pbXVs''@;'; put 'put ''KG90LFp0KXwwKStNYXRoLmltdWwobHQsX24pfDAsST1JK01hdGguaW11bChsdCxadCl8MDt2YXIgcmE9KEcrKEQ9RCtNYXRoLmltdWwobmUscHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxwbil8MCkrTWF0aC5pbXVsKF9lLHB0KXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0''@;'; put 'put ''aC5pbXVsKF9lLHBuKXwwKSsocD4+PjEzKXwwKSsocmE+Pj4yNil8MCxyYSY9NjcxMDg4NjMsRD1NYXRoLmltdWwoaGUsdHIpLHA9KHA9TWF0aC5pbXVsKGhlLEhuKSkrTWF0aC5pbXVsKHdlLHRyKXwwLEk9TWF0aC5pbXVsKHdlLEhuKSxEPUQrTWF0aC5pbXVsKEZlLHVyKXwwLHA9KHA9cCtN''@;'; put 'put ''YXRoLmltdWwoRmUsWm4pfDApK01hdGguaW11bChnZSx1cil8MCxJPUkrTWF0aC5pbXVsKGdlLFpuKXwwLEQ9RCtNYXRoLmltdWwoamUseHIpfDAscD0ocD1wK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKEFlLHhyKXwwLEk9SStNYXRoLmltdWwoQWUsVHQpfDAsRD1EK01hdGguaW11''@;'; put 'put ''bChSZSxfbil8MCxwPShwPXArTWF0aC5pbXVsKFJlLFp0KXwwKStNYXRoLmltdWwoYWUsX24pfDAsST1JK01hdGguaW11bChhZSxadCl8MCxEPUQrTWF0aC5pbXVsKG90LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwob3QscG4pfDApK01hdGguaW11bChsdCxwdCl8MCxJPUkrTWF0aC5pbXVsKGx0''@;'; put 'put ''LHBuKXwwO3ZhciBjYT0oRysoRD1EK01hdGguaW11bChuZSxHZSl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLFV0KXwwKStNYXRoLmltdWwoX2UsR2UpfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoX2UsVXQpfDApKyhwPj4+MTMpfDApKyhjYT4+PjI2KXwwLGNhJj02''@;'; put 'put ''NzEwODg2MyxEPU1hdGguaW11bCh0dCx0cikscD0ocD1NYXRoLmltdWwodHQsSG4pKStNYXRoLmltdWwoS2UsdHIpfDAsST1NYXRoLmltdWwoS2UsSG4pLEQ9RCtNYXRoLmltdWwoaGUsdXIpfDAscD0ocD1wK01hdGguaW11bChoZSxabil8MCkrTWF0aC5pbXVsKHdlLHVyKXwwLEk9SStNYXRo''@;'; put 'put ''LmltdWwod2UsWm4pfDAsRD1EK01hdGguaW11bChGZSx4cil8MCxwPShwPXArTWF0aC5pbXVsKEZlLFR0KXwwKStNYXRoLmltdWwoZ2UseHIpfDAsST1JK01hdGguaW11bChnZSxUdCl8MCxEPUQrTWF0aC5pbXVsKGplLF9uKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWnQpfDApK01hdGguaW11''@;'; put 'put ''bChBZSxfbil8MCxJPUkrTWF0aC5pbXVsKEFlLFp0KXwwLEQ9RCtNYXRoLmltdWwoUmUscHQpfDAscD0ocD1wK01hdGguaW11bChSZSxwbil8MCkrTWF0aC5pbXVsKGFlLHB0KXwwLEk9SStNYXRoLmltdWwoYWUscG4pfDAsRD1EK01hdGguaW11bChvdCxHZSl8MCxwPShwPXArTWF0aC5pbXVs''@;'; put 'put ''KG90LFV0KXwwKStNYXRoLmltdWwobHQsR2UpfDAsST1JK01hdGguaW11bChsdCxVdCl8MDt2YXIgQ2k9KEcrKEQ9RCtNYXRoLmltdWwobmUseHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxCdCl8MCkrTWF0aC5pbXVsKF9lLHh0KXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0''@;'; put 'put ''aC5pbXVsKF9lLEJ0KXwwKSsocD4+PjEzKXwwKSsoQ2k+Pj4yNil8MCxDaSY9NjcxMDg4NjMsRD1NYXRoLmltdWwoUnQsdHIpLHA9KHA9TWF0aC5pbXVsKFJ0LEhuKSkrTWF0aC5pbXVsKEx0LHRyKXwwLEk9TWF0aC5pbXVsKEx0LEhuKSxEPUQrTWF0aC5pbXVsKHR0LHVyKXwwLHA9KHA9cCtN''@;'; put 'put ''YXRoLmltdWwodHQsWm4pfDApK01hdGguaW11bChLZSx1cil8MCxJPUkrTWF0aC5pbXVsKEtlLFpuKXwwLEQ9RCtNYXRoLmltdWwoaGUseHIpfDAscD0ocD1wK01hdGguaW11bChoZSxUdCl8MCkrTWF0aC5pbXVsKHdlLHhyKXwwLEk9SStNYXRoLmltdWwod2UsVHQpfDAsRD1EK01hdGguaW11''@;'; put 'put ''bChGZSxfbil8MCxwPShwPXArTWF0aC5pbXVsKEZlLFp0KXwwKStNYXRoLmltdWwoZ2UsX24pfDAsST1JK01hdGguaW11bChnZSxadCl8MCxEPUQrTWF0aC5pbXVsKGplLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUscG4pfDApK01hdGguaW11bChBZSxwdCl8MCxJPUkrTWF0aC5pbXVsKEFl''@;'; put 'put ''LHBuKXwwLEQ9RCtNYXRoLmltdWwoUmUsR2UpfDAscD0ocD1wK01hdGguaW11bChSZSxVdCl8MCkrTWF0aC5pbXVsKGFlLEdlKXwwLEk9SStNYXRoLmltdWwoYWUsVXQpfDAsRD1EK01hdGguaW11bChvdCx4dCl8MCxwPShwPXArTWF0aC5pbXVsKG90LEJ0KXwwKStNYXRoLmltdWwobHQseHQp''@;'; put 'put ''fDAsST1JK01hdGguaW11bChsdCxCdCl8MDt2YXIgaG89KEcrKEQ9RCtNYXRoLmltdWwobmUsR24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx5bil8MCkrTWF0aC5pbXVsKF9lLEduKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLHluKXwwKSsocD4+PjEzKXww''@;'; put 'put ''KSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsRD1NYXRoLmltdWwoZ3QsdHIpLHA9KHA9TWF0aC5pbXVsKGd0LEhuKSkrTWF0aC5pbXVsKFh0LHRyKXwwLEk9TWF0aC5pbXVsKFh0LEhuKSxEPUQrTWF0aC5pbXVsKFJ0LHVyKXwwLHA9KHA9cCtNYXRoLmltdWwoUnQsWm4pfDApK01hdGguaW11''@;'; put 'put ''bChMdCx1cil8MCxJPUkrTWF0aC5pbXVsKEx0LFpuKXwwLEQ9RCtNYXRoLmltdWwodHQseHIpfDAscD0ocD1wK01hdGguaW11bCh0dCxUdCl8MCkrTWF0aC5pbXVsKEtlLHhyKXwwLEk9SStNYXRoLmltdWwoS2UsVHQpfDAsRD1EK01hdGguaW11bChoZSxfbil8MCxwPShwPXArTWF0aC5pbXVs''@;'; put 'put ''KGhlLFp0KXwwKStNYXRoLmltdWwod2UsX24pfDAsST1JK01hdGguaW11bCh3ZSxadCl8MCxEPUQrTWF0aC5pbXVsKEZlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUscG4pfDApK01hdGguaW11bChnZSxwdCl8MCxJPUkrTWF0aC5pbXVsKGdlLHBuKXwwLEQ9RCtNYXRoLmltdWwoamUsR2Up''@;'; put 'put ''fDAscD0ocD1wK01hdGguaW11bChqZSxVdCl8MCkrTWF0aC5pbXVsKEFlLEdlKXwwLEk9SStNYXRoLmltdWwoQWUsVXQpfDAsRD1EK01hdGguaW11bChSZSx4dCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLEJ0KXwwKStNYXRoLmltdWwoYWUseHQpfDAsST1JK01hdGguaW11bChhZSxCdCl8MCxE''@;'; put 'put ''PUQrTWF0aC5pbXVsKG90LEduKXwwLHA9KHA9cCtNYXRoLmltdWwob3QseW4pfDApK01hdGguaW11bChsdCxHbil8MCxJPUkrTWF0aC5pbXVsKGx0LHluKXwwO3ZhciBNYT0oRysoRD1EK01hdGguaW11bChuZSxycil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGhyKXwwKStN''@;'; put 'put ''YXRoLmltdWwoX2UscnIpfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoX2UsaHIpfDApKyhwPj4+MTMpfDApKyhNYT4+PjI2KXwwLE1hJj02NzEwODg2MyxEPU1hdGguaW11bChsbix0cikscD0ocD1NYXRoLmltdWwobG4sSG4pKStNYXRoLmltdWwoT24sdHIpfDAsST1NYXRoLmltdWwo''@;'; put 'put ''T24sSG4pLEQ9RCtNYXRoLmltdWwoZ3QsdXIpfDAscD0ocD1wK01hdGguaW11bChndCxabil8MCkrTWF0aC5pbXVsKFh0LHVyKXwwLEk9SStNYXRoLmltdWwoWHQsWm4pfDAsRD1EK01hdGguaW11bChSdCx4cil8MCxwPShwPXArTWF0aC5pbXVsKFJ0LFR0KXwwKStNYXRoLmltdWwoTHQseHIp''@;'; put 'put ''fDAsST1JK01hdGguaW11bChMdCxUdCl8MCxEPUQrTWF0aC5pbXVsKHR0LF9uKXwwLHA9KHA9cCtNYXRoLmltdWwodHQsWnQpfDApK01hdGguaW11bChLZSxfbil8MCxJPUkrTWF0aC5pbXVsKEtlLFp0KXwwLEQ9RCtNYXRoLmltdWwoaGUscHQpfDAscD0ocD1wK01hdGguaW11bChoZSxwbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKHdlLHB0KXwwLEk9SStNYXRoLmltdWwod2UscG4pfDAsRD1EK01hdGguaW11bChGZSxHZSl8MCxwPShwPXArTWF0aC5pbXVsKEZlLFV0KXwwKStNYXRoLmltdWwoZ2UsR2UpfDAsST1JK01hdGguaW11bChnZSxVdCl8MCxEPUQrTWF0aC5pbXVsKGplLHh0KXwwLHA9KHA9''@;'; put 'put ''cCtNYXRoLmltdWwoamUsQnQpfDApK01hdGguaW11bChBZSx4dCl8MCxJPUkrTWF0aC5pbXVsKEFlLEJ0KXwwLEQ9RCtNYXRoLmltdWwoUmUsR24pfDAscD0ocD1wK01hdGguaW11bChSZSx5bil8MCkrTWF0aC5pbXVsKGFlLEduKXwwLEk9SStNYXRoLmltdWwoYWUseW4pfDAsRD1EK01hdGgu''@;'; put 'put ''aW11bChvdCxycil8MCxwPShwPXArTWF0aC5pbXVsKG90LGhyKXwwKStNYXRoLmltdWwobHQscnIpfDAsST1JK01hdGguaW11bChsdCxocil8MDt2YXIga3M9KEcrKEQ9RCtNYXRoLmltdWwobmUsdm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxCbil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KF9lLHZuKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLEJuKXwwKSsocD4+PjEzKXwwKSsoa3M+Pj4yNil8MCxrcyY9NjcxMDg4NjMsRD1NYXRoLmltdWwobG4sdXIpLHA9KHA9TWF0aC5pbXVsKGxuLFpuKSkrTWF0aC5pbXVsKE9uLHVyKXwwLEk9TWF0aC5pbXVsKE9uLFpuKSxE''@;'; put 'put ''PUQrTWF0aC5pbXVsKGd0LHhyKXwwLHA9KHA9cCtNYXRoLmltdWwoZ3QsVHQpfDApK01hdGguaW11bChYdCx4cil8MCxJPUkrTWF0aC5pbXVsKFh0LFR0KXwwLEQ9RCtNYXRoLmltdWwoUnQsX24pfDAscD0ocD1wK01hdGguaW11bChSdCxadCl8MCkrTWF0aC5pbXVsKEx0LF9uKXwwLEk9SStN''@;'; put 'put ''YXRoLmltdWwoTHQsWnQpfDAsRD1EK01hdGguaW11bCh0dCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKHR0LHBuKXwwKStNYXRoLmltdWwoS2UscHQpfDAsST1JK01hdGguaW11bChLZSxwbil8MCxEPUQrTWF0aC5pbXVsKGhlLEdlKXwwLHA9KHA9cCtNYXRoLmltdWwoaGUsVXQpfDApK01hdGgu''@;'; put 'put ''aW11bCh3ZSxHZSl8MCxJPUkrTWF0aC5pbXVsKHdlLFV0KXwwLEQ9RCtNYXRoLmltdWwoRmUseHQpfDAscD0ocD1wK01hdGguaW11bChGZSxCdCl8MCkrTWF0aC5pbXVsKGdlLHh0KXwwLEk9SStNYXRoLmltdWwoZ2UsQnQpfDAsRD1EK01hdGguaW11bChqZSxHbil8MCxwPShwPXArTWF0aC5p''@;'; put 'put ''bXVsKGplLHluKXwwKStNYXRoLmltdWwoQWUsR24pfDAsST1JK01hdGguaW11bChBZSx5bil8MCxEPUQrTWF0aC5pbXVsKFJlLHJyKXwwLHA9KHA9cCtNYXRoLmltdWwoUmUsaHIpfDApK01hdGguaW11bChhZSxycil8MCxJPUkrTWF0aC5pbXVsKGFlLGhyKXwwO3ZhciBCaT0oRysoRD1EK01h''@;'; put 'put ''dGguaW11bChvdCx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG90LEJuKXwwKStNYXRoLmltdWwobHQsdm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwobHQsQm4pfDApKyhwPj4+MTMpfDApKyhCaT4+PjI2KXwwLEJpJj02NzEwODg2MyxEPU1hdGguaW11bChsbix4''@;'; put 'put ''cikscD0ocD1NYXRoLmltdWwobG4sVHQpKStNYXRoLmltdWwoT24seHIpfDAsST1NYXRoLmltdWwoT24sVHQpLEQ9RCtNYXRoLmltdWwoZ3QsX24pfDAscD0ocD1wK01hdGguaW11bChndCxadCl8MCkrTWF0aC5pbXVsKFh0LF9uKXwwLEk9SStNYXRoLmltdWwoWHQsWnQpfDAsRD1EK01hdGgu''@;'; put 'put ''aW11bChSdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFJ0LHBuKXwwKStNYXRoLmltdWwoTHQscHQpfDAsST1JK01hdGguaW11bChMdCxwbil8MCxEPUQrTWF0aC5pbXVsKHR0LEdlKXwwLHA9KHA9cCtNYXRoLmltdWwodHQsVXQpfDApK01hdGguaW11bChLZSxHZSl8MCxJPUkrTWF0aC5pbXVs''@;'; put 'put ''KEtlLFV0KXwwLEQ9RCtNYXRoLmltdWwoaGUseHQpfDAscD0ocD1wK01hdGguaW11bChoZSxCdCl8MCkrTWF0aC5pbXVsKHdlLHh0KXwwLEk9SStNYXRoLmltdWwod2UsQnQpfDAsRD1EK01hdGguaW11bChGZSxHbil8MCxwPShwPXArTWF0aC5pbXVsKEZlLHluKXwwKStNYXRoLmltdWwoZ2Us''@;'; put 'put ''R24pfDAsST1JK01hdGguaW11bChnZSx5bil8MCxEPUQrTWF0aC5pbXVsKGplLHJyKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsaHIpfDApK01hdGguaW11bChBZSxycil8MCxJPUkrTWF0aC5pbXVsKEFlLGhyKXwwO3ZhciB0YT0oRysoRD1EK01hdGguaW11bChSZSx2bil8MCl8MCkrKCg4MTkx''@;'; put 'put ''JihwPShwPXArTWF0aC5pbXVsKFJlLEJuKXwwKStNYXRoLmltdWwoYWUsdm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoYWUsQm4pfDApKyhwPj4+MTMpfDApKyh0YT4+PjI2KXwwLHRhJj02NzEwODg2MyxEPU1hdGguaW11bChsbixfbikscD0ocD1NYXRoLmltdWwobG4sWnQpKStN''@;'; put 'put ''YXRoLmltdWwoT24sX24pfDAsST1NYXRoLmltdWwoT24sWnQpLEQ9RCtNYXRoLmltdWwoZ3QscHQpfDAscD0ocD1wK01hdGguaW11bChndCxwbil8MCkrTWF0aC5pbXVsKFh0LHB0KXwwLEk9SStNYXRoLmltdWwoWHQscG4pfDAsRD1EK01hdGguaW11bChSdCxHZSl8MCxwPShwPXArTWF0aC5p''@;'; put 'put ''bXVsKFJ0LFV0KXwwKStNYXRoLmltdWwoTHQsR2UpfDAsST1JK01hdGguaW11bChMdCxVdCl8MCxEPUQrTWF0aC5pbXVsKHR0LHh0KXwwLHA9KHA9cCtNYXRoLmltdWwodHQsQnQpfDApK01hdGguaW11bChLZSx4dCl8MCxJPUkrTWF0aC5pbXVsKEtlLEJ0KXwwLEQ9RCtNYXRoLmltdWwoaGUs''@;'; put 'put ''R24pfDAscD0ocD1wK01hdGguaW11bChoZSx5bil8MCkrTWF0aC5pbXVsKHdlLEduKXwwLEk9SStNYXRoLmltdWwod2UseW4pfDAsRD1EK01hdGguaW11bChGZSxycil8MCxwPShwPXArTWF0aC5pbXVsKEZlLGhyKXwwKStNYXRoLmltdWwoZ2UscnIpfDAsST1JK01hdGguaW11bChnZSxocil8''@;'; put 'put ''MDt2YXIgTXI9KEcrKEQ9RCtNYXRoLmltdWwoamUsdm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChqZSxCbil8MCkrTWF0aC5pbXVsKEFlLHZuKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKEFlLEJuKXwwKSsocD4+PjEzKXwwKSsoTXI+Pj4yNil8MCxNciY9NjcxMDg4''@;'; put 'put ''NjMsRD1NYXRoLmltdWwobG4scHQpLHA9KHA9TWF0aC5pbXVsKGxuLHBuKSkrTWF0aC5pbXVsKE9uLHB0KXwwLEk9TWF0aC5pbXVsKE9uLHBuKSxEPUQrTWF0aC5pbXVsKGd0LEdlKXwwLHA9KHA9cCtNYXRoLmltdWwoZ3QsVXQpfDApK01hdGguaW11bChYdCxHZSl8MCxJPUkrTWF0aC5pbXVs''@;'; put 'put ''KFh0LFV0KXwwLEQ9RCtNYXRoLmltdWwoUnQseHQpfDAscD0ocD1wK01hdGguaW11bChSdCxCdCl8MCkrTWF0aC5pbXVsKEx0LHh0KXwwLEk9SStNYXRoLmltdWwoTHQsQnQpfDAsRD1EK01hdGguaW11bCh0dCxHbil8MCxwPShwPXArTWF0aC5pbXVsKHR0LHluKXwwKStNYXRoLmltdWwoS2Us''@;'; put 'put ''R24pfDAsST1JK01hdGguaW11bChLZSx5bil8MCxEPUQrTWF0aC5pbXVsKGhlLHJyKXwwLHA9KHA9cCtNYXRoLmltdWwoaGUsaHIpfDApK01hdGguaW11bCh3ZSxycil8MCxJPUkrTWF0aC5pbXVsKHdlLGhyKXwwO3ZhciBGcz0oRysoRD1EK01hdGguaW11bChGZSx2bil8MCl8MCkrKCg4MTkx''@;'; put 'put ''JihwPShwPXArTWF0aC5pbXVsKEZlLEJuKXwwKStNYXRoLmltdWwoZ2Usdm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoZ2UsQm4pfDApKyhwPj4+MTMpfDApKyhGcz4+PjI2KXwwLEZzJj02NzEwODg2MyxEPU1hdGguaW11bChsbixHZSkscD0ocD1NYXRoLmltdWwobG4sVXQpKStN''@;'; put 'put ''YXRoLmltdWwoT24sR2UpfDAsST1NYXRoLmltdWwoT24sVXQpLEQ9RCtNYXRoLmltdWwoZ3QseHQpfDAscD0ocD1wK01hdGguaW11bChndCxCdCl8MCkrTWF0aC5pbXVsKFh0LHh0KXwwLEk9SStNYXRoLmltdWwoWHQsQnQpfDAsRD1EK01hdGguaW11bChSdCxHbil8MCxwPShwPXArTWF0aC5p''@;'; put 'put ''bXVsKFJ0LHluKXwwKStNYXRoLmltdWwoTHQsR24pfDAsST1JK01hdGguaW11bChMdCx5bil8MCxEPUQrTWF0aC5pbXVsKHR0LHJyKXwwLHA9KHA9cCtNYXRoLmltdWwodHQsaHIpfDApK01hdGguaW11bChLZSxycil8MCxJPUkrTWF0aC5pbXVsKEtlLGhyKXwwO3ZhciAkaT0oRysoRD1EK01h''@;'; put 'put ''dGguaW11bChoZSx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGhlLEJuKXwwKStNYXRoLmltdWwod2Usdm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwod2UsQm4pfDApKyhwPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxEPU1hdGguaW11bChsbix4''@;'; put 'put ''dCkscD0ocD1NYXRoLmltdWwobG4sQnQpKStNYXRoLmltdWwoT24seHQpfDAsST1NYXRoLmltdWwoT24sQnQpLEQ9RCtNYXRoLmltdWwoZ3QsR24pfDAscD0ocD1wK01hdGguaW11bChndCx5bil8MCkrTWF0aC5pbXVsKFh0LEduKXwwLEk9SStNYXRoLmltdWwoWHQseW4pfDAsRD1EK01hdGgu''@;'; put 'put ''aW11bChSdCxycil8MCxwPShwPXArTWF0aC5pbXVsKFJ0LGhyKXwwKStNYXRoLmltdWwoTHQscnIpfDAsST1JK01hdGguaW11bChMdCxocil8MDt2YXIgX3M9KEcrKEQ9RCtNYXRoLmltdWwodHQsdm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bCh0dCxCbil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEtlLHZuKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKEtlLEJuKXwwKSsocD4+PjEzKXwwKSsoX3M+Pj4yNil8MCxfcyY9NjcxMDg4NjMsRD1NYXRoLmltdWwobG4sR24pLHA9KHA9TWF0aC5pbXVsKGxuLHluKSkrTWF0aC5pbXVsKE9uLEduKXwwLEk9TWF0aC5pbXVsKE9uLHluKSxE''@;'; put 'put ''PUQrTWF0aC5pbXVsKGd0LHJyKXwwLHA9KHA9cCtNYXRoLmltdWwoZ3QsaHIpfDApK01hdGguaW11bChYdCxycil8MCxJPUkrTWF0aC5pbXVsKFh0LGhyKXwwO3ZhciBqcz0oRysoRD1EK01hdGguaW11bChSdCx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFJ0LEJuKXwwKStN''@;'; put 'put ''YXRoLmltdWwoTHQsdm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoTHQsQm4pfDApKyhwPj4+MTMpfDApKyhqcz4+PjI2KXwwLGpzJj02NzEwODg2MyxEPU1hdGguaW11bChsbixycikscD0ocD1NYXRoLmltdWwobG4saHIpKStNYXRoLmltdWwoT24scnIpfDAsST1NYXRoLmltdWwo''@;'; put 'put ''T24saHIpO3ZhciBDbD0oRysoRD1EK01hdGguaW11bChndCx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGd0LEJuKXwwKStNYXRoLmltdWwoWHQsdm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoWHQsQm4pfDApKyhwPj4+MTMpfDApKyhDbD4+PjI2KXwwLENsJj02''@;'; put 'put ''NzEwODg2Mzt2YXIgVGk9KEcrKEQ9TWF0aC5pbXVsKGxuLHZuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChsbixCbikpK01hdGguaW11bChPbix2bil8MCkpPDwxMyl8MDtyZXR1cm4gRz0oKEk9TWF0aC5pbXVsKE9uLEJuKSkrKHA+Pj4xMyl8MCkrKFRpPj4+MjYpfDAsVGkmPTY3MTA4''@;'; put 'put ''ODYzLEtbMF09amEsS1sxXT1qbyxLWzJdPVhyLEtbM109ZWEsS1s0XT1yYSxLWzVdPWNhLEtbNl09Q2ksS1s3XT1obyxLWzhdPU1hLEtbOV09a3MsS1sxMF09QmksS1sxMV09dGEsS1sxMl09TXIsS1sxM109RnMsS1sxNF09JGksS1sxNV09X3MsS1sxNl09anMsS1sxN109Q2wsS1sxOF09VGks''@;'; put 'put ''MCE9PUcmJihLWzE5XT1HLGsubGVuZ3RoKyspLGt9O2Z1bmN0aW9uIFkoWCxmLGIpe3JldHVybihuZXcgRikubXVscChYLGYsYil9ZnVuY3Rpb24gRihYLGYpe3RoaXMueD1YLHRoaXMueT1mfU1hdGguaW11bHx8KE49Viksdi5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZixiKXt2YXIgayxN''@;'; put 'put ''PXRoaXMubGVuZ3RoK2YubGVuZ3RoO3JldHVybiBrPTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zi5sZW5ndGg/Tih0aGlzLGYsYik6TTw2Mz9WKHRoaXMsZixiKTpNPDEwMjQ/ZnVuY3Rpb24geihYLGYsYil7Yi5uZWdhdGl2ZT1mLm5lZ2F0aXZlXlgubmVnYXRpdmUsYi5sZW5ndGg9WC5sZW5n''@;'; put 'put ''dGgrZi5sZW5ndGg7Zm9yKHZhciBrPTAsTT0wLEI9MDtCPGIubGVuZ3RoLTE7QisrKXt2YXIgSz1NO009MDtmb3IodmFyIEc9NjcxMDg4NjMmayxEPU1hdGgubWluKEIsZi5sZW5ndGgtMSkscD1NYXRoLm1heCgwLEItWC5sZW5ndGgrMSk7cDw9RDtwKyspe3ZhciBfZT0oMHxYLndvcmRzW0It''@;'; put 'put ''cF0pKigwfGYud29yZHNbcF0pLFBlPTY3MTA4ODYzJl9lO0c9NjcxMDg4NjMmKFBlPVBlK0d8MCksTSs9KEs9KEs9SysoX2UvNjcxMDg4NjR8MCl8MCkrKFBlPj4+MjYpfDApPj4+MjYsSyY9NjcxMDg4NjN9Yi53b3Jkc1tCXT1HLGs9SyxLPU19cmV0dXJuIDAhPT1rP2Iud29yZHNbQl09azpi''@;'; put 'put ''Lmxlbmd0aC0tLGIuc3RyaXAoKX0odGhpcyxmLGIpOlkodGhpcyxmLGIpLGt9LEYucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZil7Zm9yKHZhciBiPW5ldyBBcnJheShmKSxrPXYucHJvdG90eXBlLl9jb3VudEJpdHMoZiktMSxNPTA7TTxmO00rKyliW01dPXRoaXMucmV2QmluKE0sayxm''@;'; put 'put ''KTtyZXR1cm4gYn0sRi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGYsYixrKXtpZigwPT09Znx8Zj09PWstMSlyZXR1cm4gZjtmb3IodmFyIE09MCxCPTA7QjxiO0IrKylNfD0oMSZmKTw8Yi1CLTEsZj4+PTE7cmV0dXJuIE19LEYucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZixiLGss''@;'; put 'put ''TSxCLEspe2Zvcih2YXIgRz0wO0c8SztHKyspTVtHXT1iW2ZbR11dLEJbR109a1tmW0ddXX0sRi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGYsYixrLE0sQixLKXt0aGlzLnBlcm11dGUoSyxmLGIsayxNLEIpO2Zvcih2YXIgRz0xO0c8QjtHPDw9MSlmb3IodmFyIEQ9Rzw8MSxwPU1h''@;'; put 'put ''dGguY29zKDIqTWF0aC5QSS9EKSxJPU1hdGguc2luKDIqTWF0aC5QSS9EKSx1ZT0wO3VlPEI7dWUrPUQpZm9yKHZhciBuZT1wLF9lPUksUGU9MDtQZTxHO1BlKyspe3ZhciBvdD1rW3VlK1BlXSxsdD1NW3VlK1BlXSxkdD1rW3VlK1BlK0ddLFJlPU1bdWUrUGUrR10sYWU9bmUqZHQtX2UqUmU7''@;'; put 'put ''UmU9bmUqUmUrX2UqZHQsa1t1ZStQZV09b3QrKGR0PWFlKSxNW3VlK1BlXT1sdCtSZSxrW3VlK1BlK0ddPW90LWR0LE1bdWUrUGUrR109bHQtUmUsUGUhPT1EJiYoYWU9cCpuZS1JKl9lLF9lPXAqX2UrSSpuZSxuZT1hZSl9fSxGLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihmLGIp''@;'; put 'put ''e3ZhciBrPTF8TWF0aC5tYXgoYixmKSxNPTEmayxCPTA7Zm9yKGs9ay8yfDA7aztrPj4+PTEpQisrO3JldHVybiAxPDxCKzErTX0sRi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGYsYixrKXtpZighKGs8PTEpKWZvcih2YXIgTT0wO008ay8yO00rKyl7dmFyIEI9ZltNXTtmW01dPWZb''@;'; put 'put ''ay1NLTFdLGZbay1NLTFdPUIsQj1iW01dLGJbTV09LWJbay1NLTFdLGJbay1NLTFdPS1CfX0sRi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGYsYil7Zm9yKHZhciBrPTAsTT0wO008Yi8yO00rKyl7dmFyIEI9ODE5MipNYXRoLnJvdW5kKGZbMipNKzFdL2IpK01hdGgucm91bmQo''@;'; put 'put ''ZlsyKk1dL2IpK2s7ZltNXT02NzEwODg2MyZCLGs9Qjw2NzEwODg2ND8wOkIvNjcxMDg4NjR8MH1yZXR1cm4gZn0sRi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihmLGIsayxNKXtmb3IodmFyIEI9MCxLPTA7SzxiO0srKylrWzIqS109ODE5MSYoQis9MHxmW0tdKSxrWzIqSysxXT04''@;'; put 'put ''MTkxJihCPj4+PTEzKSxCPj4+PTEzO2ZvcihLPTIqYjtLPE07KytLKWtbS109MDtzKDA9PT1CKSxzKCEoLTgxOTImQikpfSxGLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGYpe2Zvcih2YXIgYj1uZXcgQXJyYXkoZiksaz0wO2s8ZjtrKyspYltrXT0wO3JldHVybiBifSxGLnByb3RvdHlwZS5t''@;'; put 'put ''dWxwPWZ1bmN0aW9uKGYsYixrKXt2YXIgTT0yKnRoaXMuZ3Vlc3NMZW4xM2IoZi5sZW5ndGgsYi5sZW5ndGgpLEI9dGhpcy5tYWtlUkJUKE0pLEs9dGhpcy5zdHViKE0pLEc9bmV3IEFycmF5KE0pLEQ9bmV3IEFycmF5KE0pLHA9bmV3IEFycmF5KE0pLEk9bmV3IEFycmF5KE0pLHVlPW5ldyBB''@;'; put 'put ''cnJheShNKSxuZT1uZXcgQXJyYXkoTSksX2U9ay53b3JkcztfZS5sZW5ndGg9TSx0aGlzLmNvbnZlcnQxM2IoZi53b3JkcyxmLmxlbmd0aCxHLE0pLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEksTSksdGhpcy50cmFuc2Zvcm0oRyxLLEQscCxNLEIpLHRoaXMudHJhbnNmb3Jt''@;'; put 'put ''KEksSyx1ZSxuZSxNLEIpO2Zvcih2YXIgUGU9MDtQZTxNO1BlKyspe3ZhciBvdD1EW1BlXSp1ZVtQZV0tcFtQZV0qbmVbUGVdO3BbUGVdPURbUGVdKm5lW1BlXStwW1BlXSp1ZVtQZV0sRFtQZV09b3R9cmV0dXJuIHRoaXMuY29uanVnYXRlKEQscCxNKSx0aGlzLnRyYW5zZm9ybShELHAsX2Us''@;'; put 'put ''SyxNLEIpLHRoaXMuY29uanVnYXRlKF9lLEssTSksdGhpcy5ub3JtYWxpemUxM2IoX2UsTSksay5uZWdhdGl2ZT1mLm5lZ2F0aXZlXmIubmVnYXRpdmUsay5sZW5ndGg9Zi5sZW5ndGgrYi5sZW5ndGgsay5zdHJpcCgpfSx2LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZil7dmFyIGI9bmV3IHYo''@;'; put 'put ''bnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2YubGVuZ3RoKSx0aGlzLm11bFRvKGYsYil9LHYucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZil7dmFyIGI9bmV3IHYobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2YubGVuZ3RoKSxZ''@;'; put 'put ''KHRoaXMsZixiKX0sdi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGYsdGhpcyl9LHYucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGYpe3MoIm51bWJlciI9PXR5cGVvZiBmKSxzKGY8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLGs9MDtrPHRoaXMu''@;'; put 'put ''bGVuZ3RoO2srKyl7dmFyIE09KDB8dGhpcy53b3Jkc1trXSkqZixCPSg2NzEwODg2MyZNKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPU0vNjcxMDg4NjR8MCxiKz1CPj4+MjYsdGhpcy53b3Jkc1trXT02NzEwODg2MyZCfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNba109Yix0aGlzLmxlbmd0''@;'; put 'put ''aCsrKSwwPT09ZiYmKHRoaXMubGVuZ3RoPTEsdGhpcy5fbm9ybVNpZ24oKSksdGhpc30sdi5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGYpfSx2LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHYucHJv''@;'; put 'put ''dG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHYucHJvdG90eXBlLnBvdz1mdW5jdGlvbihmKXt2YXIgYj1mdW5jdGlvbiBIKFgpe2Zvcih2YXIgZj1uZXcgQXJyYXkoWC5iaXRMZW5ndGgoKSksYj0wO2I8Zi5sZW5ndGg7YisrKXt2YXIgTT1i''@;'; put 'put ''JTI2O2ZbYl09KFgud29yZHNbYi8yNnwwXSYxPDxNKT4+Pk19cmV0dXJuIGZ9KGYpO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHYoMSk7Zm9yKHZhciBrPXRoaXMsTT0wO008Yi5sZW5ndGgmJjA9PT1iW01dO00rKyxrPWsuc3FyKCkpO2lmKCsrTTxiLmxlbmd0aClmb3IodmFyIEI9ay5z''@;'; put 'put ''cXIoKTtNPGIubGVuZ3RoO00rKyxCPUIuc3FyKCkpMCE9PWJbTV0mJihrPWsubXVsKEIpKTtyZXR1cm4ga30sdi5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGYpe3MoIm51bWJlciI9PXR5cGVvZiBmJiZmPj0wKTt2YXIgQixiPWYlMjYsaz0oZi1iKS8yNixNPTY3MTA4ODYzPj4+MjYtYjw8''@;'; put 'put ''MjYtYjtpZigwIT09Yil7dmFyIEs9MDtmb3IoQj0wO0I8dGhpcy5sZW5ndGg7QisrKXt2YXIgRz10aGlzLndvcmRzW0JdJk07dGhpcy53b3Jkc1tCXT0oMHx0aGlzLndvcmRzW0JdKS1HPDxifEssSz1HPj4+MjYtYn1LJiYodGhpcy53b3Jkc1tCXT1LLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1r''@;'; put 'put ''KXtmb3IoQj10aGlzLmxlbmd0aC0xO0I+PTA7Qi0tKXRoaXMud29yZHNbQitrXT10aGlzLndvcmRzW0JdO2ZvcihCPTA7QjxrO0IrKyl0aGlzLndvcmRzW0JdPTA7dGhpcy5sZW5ndGgrPWt9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZil7cmV0dXJu''@;'; put 'put ''IHMoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGYpfSx2LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZixiLGspe3ZhciBNO3MoIm51bWJlciI9PXR5cGVvZiBmJiZmPj0wKSxNPWI/KGItYiUyNikvMjY6MDt2YXIgQj1mJTI2LEs9TWF0aC5taW4oKGYtQikvMjYsdGhpcy5sZW5n''@;'; put 'put ''dGgpLEc9NjcxMDg4NjNeNjcxMDg4NjM+Pj5CPDxCLEQ9aztpZihNLT1LLE09TWF0aC5tYXgoMCxNKSxEKXtmb3IodmFyIHA9MDtwPEs7cCsrKUQud29yZHNbcF09dGhpcy53b3Jkc1twXTtELmxlbmd0aD1LfWlmKDAhPT1LKWlmKHRoaXMubGVuZ3RoPkspZm9yKHRoaXMubGVuZ3RoLT1LLHA9''@;'; put 'put ''MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPXRoaXMud29yZHNbcCtLXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBJPTA7Zm9yKHA9dGhpcy5sZW5ndGgtMTtwPj0wJiYoMCE9PUl8fHA+PU0pO3AtLSl7dmFyIHVlPTB8dGhpcy53b3Jkc1twXTt0aGlz''@;'; put 'put ''LndvcmRzW3BdPUk8PDI2LUJ8dWU+Pj5CLEk9dWUmR31yZXR1cm4gRCYmMCE9PUkmJihELndvcmRzW0QubGVuZ3RoKytdPUkpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGYs''@;'; put 'put ''YixrKXtyZXR1cm4gcygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZixiLGspfSx2LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZil9LHYucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaXVz''@;'; put 'put ''aGxuKGYpfSx2LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZil9LHYucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGYpfSx2LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihmKXtzKCJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgZiYmZj49MCk7dmFyIGI9ZiUyNixrPShmLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PWt8fCEodGhpcy53b3Jkc1trXSYxPDxiKSl9LHYucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihmKXtzKCJudW1iZXIiPT10eXBlb2YgZiYmZj49MCk7dmFyIGI9ZiUyNixrPShm''@;'; put 'put ''LWIpLzI2O3JldHVybiBzKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9az90aGlzOigwIT09YiYmaysrLHRoaXMubGVuZ3RoPU1hdGgubWluKGssdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0''@;'; put 'put ''aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpKX0sdi5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZil9''@;'; put 'put ''LHYucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGYpe3JldHVybiBzKCJudW1iZXIiPT10eXBlb2YgZikscyhmPDY3MTA4ODY0KSxmPDA/dGhpcy5pc3VibigtZik6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxmPyh0aGlzLndvcmRzWzBdPWYt''@;'; put 'put ''KDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihmKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZil9LHYucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihmKXt0aGlzLndvcmRzWzBdKz1mO2Zvcih2YXIg''@;'; put 'put ''Yj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl0+PTY3MTA4ODY0O2IrKyl0aGlzLndvcmRzW2JdLT02NzEwODg2NCxiPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2IrMV09MTp0aGlzLndvcmRzW2IrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgs''@;'; put 'put ''YisxKSx0aGlzfSx2LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihmKXtpZihzKCJudW1iZXIiPT10eXBlb2YgZikscyhmPDY3MTA4ODY0KSxmPDApcmV0dXJuIHRoaXMuaWFkZG4oLWYpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihmKSx0''@;'; put 'put ''aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1mLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXTww''@;'; put 'put ''O2IrKyl0aGlzLndvcmRzW2JdKz02NzEwODg2NCx0aGlzLndvcmRzW2IrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGYpfSx2LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGYpe3JldHVybiB0''@;'; put 'put ''aGlzLmNsb25lKCkuaXN1Ym4oZil9LHYucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHYucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx2LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rp''@;'; put 'put ''b24oZixiLGspe3ZhciBCO3RoaXMuX2V4cGFuZChmLmxlbmd0aCtrKTt2YXIgSyxHPTA7Zm9yKEI9MDtCPGYubGVuZ3RoO0IrKyl7Sz0oMHx0aGlzLndvcmRzW0Ira10pK0c7dmFyIEQ9KDB8Zi53b3Jkc1tCXSkqYjtHPSgoSy09NjcxMDg4NjMmRCk+PjI2KS0oRC82NzEwODg2NHwwKSx0aGlz''@;'; put 'put ''LndvcmRzW0Ira109NjcxMDg4NjMmS31mb3IoO0I8dGhpcy5sZW5ndGgtaztCKyspRz0oSz0oMHx0aGlzLndvcmRzW0Ira10pK0cpPj4yNix0aGlzLndvcmRzW0Ira109NjcxMDg4NjMmSztpZigwPT09RylyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihzKC0xPT09RyksRz0wLEI9MDtCPHRoaXMu''@;'; put 'put ''bGVuZ3RoO0IrKylHPShLPS0oMHx0aGlzLndvcmRzW0JdKStHKT4+MjYsdGhpcy53b3Jkc1tCXT02NzEwODg2MyZLO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihmLGIpe3ZhciBrLE09dGhpcy5jbG9uZSgpLEI9ZixL''@;'; put 'put ''PTB8Qi53b3Jkc1tCLmxlbmd0aC0xXTswIT0oaz0yNi10aGlzLl9jb3VudEJpdHMoSykpJiYoQj1CLnVzaGxuKGspLE0uaXVzaGxuKGspLEs9MHxCLndvcmRzW0IubGVuZ3RoLTFdKTt2YXIgcCxEPU0ubGVuZ3RoLUIubGVuZ3RoO2lmKCJtb2QiIT09Yil7KHA9bmV3IHYobnVsbCkpLmxlbmd0''@;'; put 'put ''aD1EKzEscC53b3Jkcz1uZXcgQXJyYXkocC5sZW5ndGgpO2Zvcih2YXIgST0wO0k8cC5sZW5ndGg7SSsrKXAud29yZHNbSV09MH12YXIgdWU9TS5jbG9uZSgpLl9pc2hsbnN1Ym11bChCLDEsRCk7MD09PXVlLm5lZ2F0aXZlJiYoTT11ZSxwJiYocC53b3Jkc1tEXT0xKSk7Zm9yKHZhciBuZT1E''@;'; put 'put ''LTE7bmU+PTA7bmUtLSl7dmFyIF9lPTY3MTA4ODY0KigwfE0ud29yZHNbQi5sZW5ndGgrbmVdKSsoMHxNLndvcmRzW0IubGVuZ3RoK25lLTFdKTtmb3IoX2U9TWF0aC5taW4oX2UvS3wwLDY3MTA4ODYzKSxNLl9pc2hsbnN1Ym11bChCLF9lLG5lKTswIT09TS5uZWdhdGl2ZTspX2UtLSxNLm5l''@;'; put 'put ''Z2F0aXZlPTAsTS5faXNobG5zdWJtdWwoQiwxLG5lKSxNLmlzWmVybygpfHwoTS5uZWdhdGl2ZV49MSk7cCYmKHAud29yZHNbbmVdPV9lKX1yZXR1cm4gcCYmcC5zdHJpcCgpLE0uc3RyaXAoKSwiZGl2IiE9PWImJjAhPT1rJiZNLml1c2hybihrKSx7ZGl2OnB8fG51bGwsbW9kOk19fSx2LnBy''@;'; put 'put ''b3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZixiLGspe3JldHVybiBzKCFmLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHYoMCksbW9kOm5ldyB2KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWYubmVnYXRpdmU/KEs9dGhpcy5uZWcoKS5kaXZtb2QoZixiKSwibW9kIiE9PWIm''@;'; put 'put ''JihNPUsuZGl2Lm5lZygpKSwiZGl2IiE9PWImJihCPUsubW9kLm5lZygpLGsmJjAhPT1CLm5lZ2F0aXZlJiZCLmlhZGQoZikpLHtkaXY6TSxtb2Q6Qn0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zi5uZWdhdGl2ZT8oSz10aGlzLmRpdm1vZChmLm5lZygpLGIpLCJtb2QiIT09YiYmKE09Sy5k''@;'; put 'put ''aXYubmVnKCkpLHtkaXY6TSxtb2Q6Sy5tb2R9KTowIT09KHRoaXMubmVnYXRpdmUmZi5uZWdhdGl2ZSk/KEs9dGhpcy5uZWcoKS5kaXZtb2QoZi5uZWcoKSxiKSwiZGl2IiE9PWImJihCPUsubW9kLm5lZygpLGsmJjAhPT1CLm5lZ2F0aXZlJiZCLmlzdWIoZikpLHtkaXY6Sy5kaXYsbW9kOkJ9''@;'; put 'put ''KTpmLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZik8MD97ZGl2Om5ldyB2KDApLG1vZDp0aGlzfToxPT09Zi5sZW5ndGg/ImRpdiI9PT1iP3tkaXY6dGhpcy5kaXZuKGYud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWI/e2RpdjpudWxsLG1vZDpuZXcgdih0aGlzLm1vZG4oZi53''@;'; put 'put ''b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihmLndvcmRzWzBdKSxtb2Q6bmV3IHYodGhpcy5tb2RuKGYud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihmLGIpO3ZhciBNLEIsS30sdi5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmRpdm1vZChmLCJkaXYiLCExKS5kaXZ9''@;'; put 'put ''LHYucHJvdG90eXBlLm1vZD1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5kaXZtb2QoZiwibW9kIiwhMSkubW9kfSx2LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmRpdm1vZChmLCJtb2QiLCEwKS5tb2R9LHYucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGYpe3Zh''@;'; put 'put ''ciBiPXRoaXMuZGl2bW9kKGYpO2lmKGIubW9kLmlzWmVybygpKXJldHVybiBiLmRpdjt2YXIgaz1iLm1vZC5hYnMoKSxNPWYuYWJzKCkuaXVzaHJuKDEpLEI9MSZmLndvcmRzWzBdLEs9ay5jbXAoTSk7aWYoSzwwfHwxPT09QiYmMD09PUspcmV0dXJuIGIuZGl2O3ZhciBHPW5ldyB2KDEpO3Jl''@;'; put 'put ''dHVybiBHLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmVeZi5uZWdhdGl2ZSxiLmRpdi5pYWRkKEcpfSx2LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGYpe3MoZjw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJWYsaz0wLE09dGhpcy5sZW5ndGgtMTtNPj0wO00tLSlrPShiKmsrKDB8dGhpcy53''@;'; put 'put ''b3Jkc1tNXSkpJWY7cmV0dXJuIGt9LHYucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGYpe3MoZjw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLGs9dGhpcy5sZW5ndGgtMTtrPj0wO2stLSl7dmFyIE09KDB8dGhpcy53b3Jkc1trXSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW2tdPU0vZnwwLGI9TSVm''@;'; put 'put ''fXJldHVybiB0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihmKX0sdi5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihmKXtzKDA9PT1mLm5lZ2F0aXZlKSxzKCFmLmlzWmVybygpKTt2YXIgYj10aGlzLGs9Zi5jbG9uZSgp''@;'; put 'put ''O2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKGYpOmIuY2xvbmUoKTtmb3IodmFyIE09bmV3IHYoMSksQj1uZXcgdigwKSxLPW5ldyB2KDApLEc9bmV3IHYoMSksRD0wO2IuaXNFdmVuKCkmJmsuaXNFdmVuKCk7KWIuaXVzaHJuKDEpLGsuaXVzaHJuKDEpLCsrRDtmb3IodmFyIHA9ay5jbG9uZSgp''@;'; put 'put ''LEk9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciB1ZT0wLG5lPTE7MD09PShiLndvcmRzWzBdJm5lKSYmdWU8MjY7Kyt1ZSxuZTw8PTEpO2lmKHVlPjApZm9yKGIuaXVzaHJuKHVlKTt1ZS0tID4wOykoTS5pc09kZCgpfHxCLmlzT2RkKCkpJiYoTS5pYWRkKHApLEIuaXN1YihJKSks''@;'; put 'put ''TS5pdXNocm4oMSksQi5pdXNocm4oMSk7Zm9yKHZhciBfZT0wLFBlPTE7MD09PShrLndvcmRzWzBdJlBlKSYmX2U8MjY7KytfZSxQZTw8PTEpO2lmKF9lPjApZm9yKGsuaXVzaHJuKF9lKTtfZS0tID4wOykoSy5pc09kZCgpfHxHLmlzT2RkKCkpJiYoSy5pYWRkKHApLEcuaXN1YihJKSksSy5p''@;'; put 'put ''dXNocm4oMSksRy5pdXNocm4oMSk7Yi5jbXAoayk+PTA/KGIuaXN1YihrKSxNLmlzdWIoSyksQi5pc3ViKEcpKTooay5pc3ViKGIpLEsuaXN1YihNKSxHLmlzdWIoQikpfXJldHVybnthOkssYjpHLGdjZDprLml1c2hsbihEKX19LHYucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihmKXtzKDA9''@;'; put 'put ''PT1mLm5lZ2F0aXZlKSxzKCFmLmlzWmVybygpKTt2YXIgdWUsYj10aGlzLGs9Zi5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKGYpOmIuY2xvbmUoKTtmb3IodmFyIE09bmV3IHYoMSksQj1uZXcgdigwKSxLPWsuY2xvbmUoKTtiLmNtcG4oMSk+MCYmay5jbXBuKDEpPjA7KXtmb3Io''@;'; put 'put ''dmFyIEc9MCxEPTE7MD09PShiLndvcmRzWzBdJkQpJiZHPDI2OysrRyxEPDw9MSk7aWYoRz4wKWZvcihiLml1c2hybihHKTtHLS0gPjA7KU0uaXNPZGQoKSYmTS5pYWRkKEspLE0uaXVzaHJuKDEpO2Zvcih2YXIgcD0wLEk9MTswPT09KGsud29yZHNbMF0mSSkmJnA8MjY7KytwLEk8PD0xKTtp''@;'; put 'put ''ZihwPjApZm9yKGsuaXVzaHJuKHApO3AtLSA+MDspQi5pc09kZCgpJiZCLmlhZGQoSyksQi5pdXNocm4oMSk7Yi5jbXAoayk+PTA/KGIuaXN1YihrKSxNLmlzdWIoQikpOihrLmlzdWIoYiksQi5pc3ViKE0pKX1yZXR1cm4odWU9MD09PWIuY21wbigxKT9NOkIpLmNtcG4oMCk8MCYmdWUuaWFk''@;'; put 'put ''ZChmKSx1ZX0sdi5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGYpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGYuYWJzKCk7aWYoZi5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCksaz1mLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLGsubmVnYXRpdmU9MDtmb3IodmFy''@;'; put 'put ''IE09MDtiLmlzRXZlbigpJiZrLmlzRXZlbigpO00rKyliLml1c2hybigxKSxrLml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDtrLmlzRXZlbigpOylrLml1c2hybigxKTt2YXIgQj1iLmNtcChrKTtpZihCPDApe3ZhciBLPWI7Yj1rLGs9S31lbHNl''@;'; put 'put ''IGlmKDA9PT1CfHwwPT09ay5jbXBuKDEpKWJyZWFrO2IuaXN1YihrKX1yZXR1cm4gay5pdXNobG4oTSl9LHYucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuZWdjZChmKS5hLnVtb2QoZil9LHYucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlz''@;'; put 'put ''LndvcmRzWzBdKX0sdi5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx2LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZmfSx2LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihmKXtzKCJudW1iZXIiPT10''@;'; put 'put ''eXBlb2YgZik7dmFyIGI9ZiUyNixrPShmLWIpLzI2LE09MTw8YjtpZih0aGlzLmxlbmd0aDw9aylyZXR1cm4gdGhpcy5fZXhwYW5kKGsrMSksdGhpcy53b3Jkc1trXXw9TSx0aGlzO2Zvcih2YXIgQj1NLEs9azswIT09QiYmSzx0aGlzLmxlbmd0aDtLKyspe3ZhciBHPTB8dGhpcy53b3Jkc1tL''@;'; put 'put ''XTtCPShHKz1CKT4+PjI2LHRoaXMud29yZHNbS109RyY9NjcxMDg4NjN9cmV0dXJuIDAhPT1CJiYodGhpcy53b3Jkc1tLXT1CLHRoaXMubGVuZ3RoKyspLHRoaXN9LHYucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBd''@;'; put 'put ''fSx2LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGYpe3ZhciBrLGI9ZjwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlrPTE7ZWxzZXtiJiYoZj0tZikscyhmPD02''@;'; put 'put ''NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgTT0wfHRoaXMud29yZHNbMF07az1NPT09Zj8wOk08Zj8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1rOmt9LHYucHJvdG90eXBlLmNtcD1mdW5jdGlvbihmKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWYubmVnYXRp''@;'; put 'put ''dmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1mLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChmKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx2LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGYpe2lmKHRoaXMubGVuZ3RoPmYubGVuZ3RoKXJl''@;'; put 'put ''dHVybiAxO2lmKHRoaXMubGVuZ3RoPGYubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLGs9dGhpcy5sZW5ndGgtMTtrPj0wO2stLSl7dmFyIE09MHx0aGlzLndvcmRzW2tdLEI9MHxmLndvcmRzW2tdO2lmKE0hPT1CKXtNPEI/Yj0tMTpNPkImJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdi5w''@;'; put 'put ''cm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGYpe3JldHVybiAxPT09dGhpcy5jbXBuKGYpfSx2LnByb3RvdHlwZS5ndD1mdW5jdGlvbihmKXtyZXR1cm4gMT09PXRoaXMuY21wKGYpfSx2LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNtcG4oZik+PTB9LHYucHJvdG90eXBl''@;'; put 'put ''Lmd0ZT1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbXAoZik+PTB9LHYucHJvdG90eXBlLmx0bj1mdW5jdGlvbihmKXtyZXR1cm4tMT09PXRoaXMuY21wbihmKX0sdi5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZil7cmV0dXJuLTE9PT10aGlzLmNtcChmKX0sdi5wcm90b3R5cGUubHRlbj1mdW5j''@;'; put 'put ''dGlvbihmKXtyZXR1cm4gdGhpcy5jbXBuKGYpPD0wfSx2LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuY21wKGYpPD0wfSx2LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZil7cmV0dXJuIDA9PT10aGlzLmNtcG4oZil9LHYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGYpe3Jl''@;'; put 'put ''dHVybiAwPT09dGhpcy5jbXAoZil9LHYucmVkPWZ1bmN0aW9uKGYpe3JldHVybiBuZXcga2UoZil9LHYucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGYpe3JldHVybiBzKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHMoMD09PXRoaXMubmVnYXRp''@;'; put 'put ''dmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZi5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGYpfSx2LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNv''@;'; put 'put ''bnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdi5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLnJlZD1mLHRoaXN9LHYucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGYpe3JldHVybiBzKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBp''@;'; put 'put ''biByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGYpfSx2LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZil7cmV0dXJuIHModGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxmKX0sdi5wcm90b3R5cGUucmVk''@;'; put 'put ''SUFkZD1mdW5jdGlvbihmKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZil9LHYucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihmKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkg''@;'; put 'put ''d2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGYpfSx2LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGYpe3JldHVybiBzKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxmKX0sdi5wcm90b3R5cGUu''@;'; put 'put ''cmVkU2hsPWZ1bmN0aW9uKGYpe3JldHVybiBzKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZil9LHYucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihmKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkg''@;'; put 'put ''d2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZiksdGhpcy5yZWQubXVsKHRoaXMsZil9LHYucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZil7cmV0dXJuIHModGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5f''@;'; put 'put ''dmVyaWZ5Mih0aGlzLGYpLHRoaXMucmVkLmltdWwodGhpcyxmKX0sdi5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhp''@;'; put 'put ''cyl9LHYucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx2LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHModGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdi5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBzKHRoaXMucmVkLCJyZWRJbnZtIHdv''@;'; put 'put ''cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHYucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBzKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y''@;'; put 'put ''ZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx2LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZil7cmV0dXJuIHModGhpcy5yZWQmJiFmLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxmKX07dmFy''@;'; put 'put ''IFc9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBxKFgsZil7dGhpcy5uYW1lPVgsdGhpcy5wPW5ldyB2KGYsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB2KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0''@;'; put 'put ''aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiByZSgpe3EuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe3EuY2FsbCh0aGlzLCJwMjI0IiwiZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBDZSgpe3EuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBJZSgp''@;'; put 'put ''e3EuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBrZShYKXtpZigic3RyaW5nIj09dHlwZW9mIFgpe3ZhciBmPXYuX3ByaW1lKFgpO3RoaXMubT1mLnAsdGhpcy5w''@;'; put 'put ''cmltZT1mfWVsc2UgcyhYLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVgsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHFlKFgpe2tlLmNhbGwodGhpcyxYKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhp''@;'; put 'put ''cy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB2KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3Vibigx''@;'; put 'put ''KS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXEucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZj1uZXcgdihudWxsKTtyZXR1cm4gZi53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMu''@;'; put 'put ''bi8xMykpLGZ9LHEucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZil7dmFyIGssYj1mO2Rve3RoaXMuc3BsaXQoYix0aGlzLnRtcCksaz0oYj0oYj10aGlzLmltdWxLKGIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoaz50aGlzLm4pO3ZhciBNPWs8dGhpcy5uPy0xOmIu''@;'; put 'put ''dWNtcCh0aGlzLnApO3JldHVybiAwPT09TT8oYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEpOk0+MD9iLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1iLnN0cmlwP2Iuc3RyaXAoKTpiLl9zdHJpcCgpLGJ9LHEucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGYsYil7Zi5pdXNocm4odGhpcy5uLDAsYil9''@;'; put 'put ''LHEucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGYpe3JldHVybiBmLmltdWwodGhpcy5rKX0sQShyZSxxKSxyZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZixiKXtmb3IodmFyIGs9NDE5NDMwMyxNPU1hdGgubWluKGYubGVuZ3RoLDkpLEI9MDtCPE07QisrKWIud29yZHNbQl09Zi53b3Jk''@;'; put 'put ''c1tCXTtpZihiLmxlbmd0aD1NLGYubGVuZ3RoPD05KXJldHVybiBmLndvcmRzWzBdPTAsdm9pZChmLmxlbmd0aD0xKTt2YXIgSz1mLndvcmRzWzldO2ZvcihiLndvcmRzW2IubGVuZ3RoKytdPUsmayxCPTEwO0I8Zi5sZW5ndGg7QisrKXt2YXIgRz0wfGYud29yZHNbQl07Zi53b3Jkc1tCLTEw''@;'; put 'put ''XT0oRyZrKTw8NHxLPj4+MjIsSz1HfWYud29yZHNbQi0xMF09Sz4+Pj0yMixmLmxlbmd0aC09MD09PUsmJmYubGVuZ3RoPjEwPzEwOjl9LHJlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihmKXtmLndvcmRzW2YubGVuZ3RoXT0wLGYud29yZHNbZi5sZW5ndGgrMV09MCxmLmxlbmd0aCs9Mjtm''@;'; put 'put ''b3IodmFyIGI9MCxrPTA7azxmLmxlbmd0aDtrKyspe3ZhciBNPTB8Zi53b3Jkc1trXTtmLndvcmRzW2tdPTY3MTA4ODYzJihiKz05NzcqTSksYj02NCpNKyhiLzY3MTA4ODY0fDApfXJldHVybiAwPT09Zi53b3Jkc1tmLmxlbmd0aC0xXSYmKGYubGVuZ3RoLS0sMD09PWYud29yZHNbZi5sZW5n''@;'; put 'put ''dGgtMV0mJmYubGVuZ3RoLS0pLGZ9LEEobWUscSksQShDZSxxKSxBKEllLHEpLEllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihmKXtmb3IodmFyIGI9MCxrPTA7azxmLmxlbmd0aDtrKyspe3ZhciBNPTE5KigwfGYud29yZHNba10pK2IsQj02NzEwODg2MyZNO00+Pj49MjYsZi53b3Jkc1tr''@;'; put 'put ''XT1CLGI9TX1yZXR1cm4gMCE9PWImJihmLndvcmRzW2YubGVuZ3RoKytdPWIpLGZ9LHYuX3ByaW1lPWZ1bmN0aW9uKGYpe2lmKFdbZl0pcmV0dXJuIFdbZl07dmFyIGI7aWYoImsyNTYiPT09ZiliPW5ldyByZTtlbHNlIGlmKCJwMjI0Ij09PWYpYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1m''@;'; put 'put ''KWI9bmV3IENlO2Vsc2V7aWYoInAyNTUxOSIhPT1mKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2YpO2I9bmV3IEllfXJldHVybiBXW2ZdPWIsYn0sa2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGYpe3MoMD09PWYubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGgg''@;'; put 'put ''cG9zaXRpdmVzIikscyhmLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxrZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZixiKXtzKDA9PT0oZi5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxzKGYucmVkJiZm''@;'; put 'put ''LnJlZD09PWIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LGtlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShmKS5fZm9yY2VSZWQodGhpcyk6Zi51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMp''@;'; put 'put ''fSxrZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGYpe3JldHVybiBmLmlzWmVybygpP2YuY2xvbmUoKTp0aGlzLm0uc3ViKGYpLl9mb3JjZVJlZCh0aGlzKX0sa2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihmLGIpe3RoaXMuX3ZlcmlmeTIoZixiKTt2YXIgaz1mLmFkZChiKTtyZXR1cm4gay5j''@;'; put 'put ''bXAodGhpcy5tKT49MCYmay5pc3ViKHRoaXMubSksay5fZm9yY2VSZWQodGhpcyl9LGtlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGYsYil7dGhpcy5fdmVyaWZ5MihmLGIpO3ZhciBrPWYuaWFkZChiKTtyZXR1cm4gay5jbXAodGhpcy5tKT49MCYmay5pc3ViKHRoaXMubSksa30sa2UucHJv''@;'; put 'put ''dG90eXBlLnN1Yj1mdW5jdGlvbihmLGIpe3RoaXMuX3ZlcmlmeTIoZixiKTt2YXIgaz1mLnN1YihiKTtyZXR1cm4gay5jbXBuKDApPDAmJmsuaWFkZCh0aGlzLm0pLGsuX2ZvcmNlUmVkKHRoaXMpfSxrZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihmLGIpe3RoaXMuX3ZlcmlmeTIoZixiKTt2''@;'; put 'put ''YXIgaz1mLmlzdWIoYik7cmV0dXJuIGsuY21wbigwKTwwJiZrLmlhZGQodGhpcy5tKSxrfSxrZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGYsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZiksdGhpcy5pbW9kKGYudXNobG4oYikpfSxrZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihmLGIpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl92ZXJpZnkyKGYsYiksdGhpcy5pbW9kKGYuaW11bChiKSl9LGtlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZixiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihmLGIpLHRoaXMuaW1vZChmLm11bChiKSl9LGtlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlz''@;'; put 'put ''LmltdWwoZixmLmNsb25lKCkpfSxrZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLm11bChmLGYpfSxrZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihmKXtpZihmLmlzWmVybygpKXJldHVybiBmLmNsb25lKCk7dmFyIGI9dGhpcy5tLmFuZGxuKDMpO2lmKHMoYiUyPT0x''@;'; put 'put ''KSwzPT09Yil7dmFyIGs9dGhpcy5tLmFkZChuZXcgdigxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhmLGspfWZvcih2YXIgTT10aGlzLm0uc3VibigxKSxCPTA7IU0uaXNaZXJvKCkmJjA9PT1NLmFuZGxuKDEpOylCKyssTS5pdXNocm4oMSk7cyghTS5pc1plcm8oKSk7dmFyIEs9bmV3''@;'; put 'put ''IHYoMSkudG9SZWQodGhpcyksRz1LLnJlZE5lZygpLEQ9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHA9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihwPW5ldyB2KDIqcCpwKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cocCxEKS5jbXAoRyk7KXAucmVkSUFkZChHKTtmb3IodmFyIEk9dGhpcy5w''@;'; put 'put ''b3cocCxNKSx1ZT10aGlzLnBvdyhmLE0uYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGYsTSksX2U9QjswIT09bmUuY21wKEspOyl7Zm9yKHZhciBQZT1uZSxvdD0wOzAhPT1QZS5jbXAoSyk7b3QrKylQZT1QZS5yZWRTcXIoKTtzKG90PF9lKTt2YXIgbHQ9dGhpcy5wb3coSSxuZXcg''@;'; put 'put ''digxKS5pdXNobG4oX2Utb3QtMSkpO3VlPXVlLnJlZE11bChsdCksST1sdC5yZWRTcXIoKSxuZT1uZS5yZWRNdWwoSSksX2U9b3R9cmV0dXJuIHVlfSxrZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihmKXt2YXIgYj1mLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Yi5uZWdhdGl2ZT8oYi5u''@;'; put 'put ''ZWdhdGl2ZT0wLHRoaXMuaW1vZChiKS5yZWROZWcoKSk6dGhpcy5pbW9kKGIpfSxrZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGYsYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gbmV3IHYoMSkudG9SZWQodGhpcyk7aWYoMD09PWIuY21wbigxKSlyZXR1cm4gZi5jbG9uZSgpO3ZhciBNPW5ldyBB''@;'; put 'put ''cnJheSgxNik7TVswXT1uZXcgdigxKS50b1JlZCh0aGlzKSxNWzFdPWY7Zm9yKHZhciBCPTI7QjxNLmxlbmd0aDtCKyspTVtCXT10aGlzLm11bChNW0ItMV0sZik7dmFyIEs9TVswXSxHPTAsRD0wLHA9Yi5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXAmJihwPTI2KSxCPWIubGVuZ3RoLTE7Qj49''@;'; put 'put ''MDtCLS0pe2Zvcih2YXIgST1iLndvcmRzW0JdLHVlPXAtMTt1ZT49MDt1ZS0tKXt2YXIgbmU9ST4+dWUmMTtLIT09TVswXSYmKEs9dGhpcy5zcXIoSykpLDAhPT1uZXx8MCE9PUc/KEc8PD0xLEd8PW5lLCg0PT09KytEfHwwPT09QiYmMD09PXVlKSYmKEs9dGhpcy5tdWwoSyxNW0ddKSxEPTAs''@;'; put 'put ''Rz0wKSk6RD0wfXA9MjZ9cmV0dXJuIEt9LGtlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZil7dmFyIGI9Zi51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1mP2IuY2xvbmUoKTpifSxrZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZil7dmFyIGI9Zi5jbG9uZSgpO3JldHVy''@;'; put 'put ''biBiLnJlZD1udWxsLGJ9LHYubW9udD1mdW5jdGlvbihmKXtyZXR1cm4gbmV3IHFlKGYpfSxBKHFlLGtlKSxxZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmltb2QoZi51c2hsbih0aGlzLnNoaWZ0KSl9LHFlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5j''@;'; put 'put ''dGlvbihmKXt2YXIgYj10aGlzLmltb2QoZi5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0scWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZixiKXtpZihmLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBmLndvcmRzWzBdPTAsZi5sZW5ndGg9MSxmO3ZhciBrPWYuaW11''@;'; put 'put ''bChiKSxNPWsubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLEI9ay5pc3ViKE0pLml1c2hybih0aGlzLnNoaWZ0KSxLPUI7cmV0dXJuIEIuY21wKHRoaXMubSk+PTA/Sz1CLmlzdWIodGhpcy5tKTpCLmNtcG4oMCk8MCYmKEs9''@;'; put 'put ''Qi5pYWRkKHRoaXMubSkpLEsuX2ZvcmNlUmVkKHRoaXMpfSxxZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGYsYil7aWYoZi5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHYoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBrPWYubXVsKGIpLE09ay5tYXNrbih0aGlzLnNoaWZ0KS5tdWwo''@;'; put 'put ''dGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksQj1rLmlzdWIoTSkuaXVzaHJuKHRoaXMuc2hpZnQpLEs9QjtyZXR1cm4gQi5jbXAodGhpcy5tKT49MD9LPUIuaXN1Yih0aGlzLm0pOkIuY21wbigwKTwwJiYoSz1CLmlhZGQodGhpcy5tKSksSy5fZm9yY2VSZWQodGhp''@;'; put 'put ''cyl9LHFlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmltb2QoZi5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGZlPWgubm1kKGZlKSx0aGlzKX0sNzE3NihmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgcyx5PWgoNzMxMjYpLGM9''@;'; put 'put ''aCg3NTc5NSk7dHJ5e3M9W10uX19wcm90b19fPT09QXJyYXkucHJvdG90eXBlfWNhdGNoKHcpe2lmKCF3fHwib2JqZWN0IiE9dHlwZW9mIHd8fCEoImNvZGUiaW4gdyl8fCJFUlJfUFJPVE9fQUNDRVNTIiE9PXcuY29kZSl0aHJvdyB3fXZhciBBPSEhcyYmYyYmYyhPYmplY3QucHJvdG90eXBl''@;'; put 'put ''LCJfX3Byb3RvX18iKSx2PU9iamVjdCxDPXYuZ2V0UHJvdG90eXBlT2Y7ZmUuZXhwb3J0cz1BJiYiZnVuY3Rpb24iPT10eXBlb2YgQS5nZXQ/eShbQS5nZXRdKToiZnVuY3Rpb24iPT10eXBlb2YgQyYmZnVuY3Rpb24oUyl7cmV0dXJuIEMobnVsbD09Uz9TOnYoUykpfX0sODY3MjkoZmUsaixo''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIHk9ajt5LnZlcnNpb249aCgxNjM2KS5yRSx5LnV0aWxzPWgoNDcwMTEpLHkucmFuZD1oKDE1MDM3KSx5LmN1cnZlPWgoODk0KSx5LmN1cnZlcz1oKDYwNDgwKSx5LmVjPWgoNTc0NDcpLHkuZWRkc2E9aCg4NjUwKX0sMzY2NzcoZmUsaixoKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIHk9aCgyODQ5MCksYz1oKDQ3MDExKSxzPWMuZ2V0TkFGLEE9Yy5nZXRKU0Ysdj1jLmFzc2VydDtmdW5jdGlvbiBDKFMsTCl7dGhpcy50eXBlPVMsdGhpcy5wPW5ldyB5KEwucCwxNiksdGhpcy5yZWQ9TC5wcmltZT95LnJlZChMLnByaW1lKTp5Lm1vbnQodGhpcy5wKSx0aGlzLnpl''@;'; put 'put ''cm89bmV3IHkoMCkudG9SZWQodGhpcy5yZWQpLHRoaXMub25lPW5ldyB5KDEpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnR3bz1uZXcgeSgyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5uPUwubiYmbmV3IHkoTC5uLDE2KSx0aGlzLmc9TC5nJiZ0aGlzLnBvaW50RnJvbUpTT04oTC5nLEwuZ1JlZCks''@;'; put 'put ''dGhpcy5fd25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDI9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMz1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQ0PW5ldyBBcnJheSg0KSx0aGlzLl9iaXRMZW5ndGg9dGhpcy5uP3RoaXMubi5iaXRMZW5ndGgoKTowO3ZhciBSPXRoaXMubiYmdGhp''@;'; put 'put ''cy5wLmRpdih0aGlzLm4pOyFSfHxSLmNtcG4oMTAwKT4wP3RoaXMucmVkTj1udWxsOih0aGlzLl9tYXh3ZWxsVHJpY2s9ITAsdGhpcy5yZWROPXRoaXMubi50b1JlZCh0aGlzLnJlZCkpfWZ1bmN0aW9uIHcoUyxMKXt0aGlzLmN1cnZlPVMsdGhpcy50eXBlPUwsdGhpcy5wcmVjb21wdXRlZD1u''@;'; put 'put ''dWxsfWZlLmV4cG9ydHM9QyxDLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LEMucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sQy5wcm90b3R5cGUuX2Zp''@;'; put 'put ''eGVkTmFmTXVsPWZ1bmN0aW9uKEwsUil7dihMLnByZWNvbXB1dGVkKTt2YXIgeD1MLl9nZXREb3VibGVzKCksVT1zKFIsMSx0aGlzLl9iaXRMZW5ndGgpLEg9KDE8PHguc3RlcCsxKS0oeC5zdGVwJTI9PTA/MjoxKTtILz0zO3ZhciBOLHosVj1bXTtmb3IoTj0wO048VS5sZW5ndGg7Tis9eC5z''@;'; put 'put ''dGVwKXt6PTA7Zm9yKHZhciBZPU4reC5zdGVwLTE7WT49TjtZLS0pej0oejw8MSkrVVtZXTtWLnB1c2goeil9Zm9yKHZhciBGPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxXPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxxPUg7cT4wO3EtLSl7Zm9yKE49MDtOPFYubGVuZ3RoO04r''@;'; put 'put ''Kykoej1WW05dKT09PXE/Vz1XLm1peGVkQWRkKHgucG9pbnRzW05dKTp6PT09LXEmJihXPVcubWl4ZWRBZGQoeC5wb2ludHNbTl0ubmVnKCkpKTtGPUYuYWRkKFcpfXJldHVybiBGLnRvUCgpfSxDLnByb3RvdHlwZS5fd25hZk11bD1mdW5jdGlvbihMLFIpe2Zvcih2YXIgeD00LFU9TC5fZ2V0''@;'; put 'put ''TkFGUG9pbnRzKHgpLEg9VS5wb2ludHMsVj1zKFIseD1VLnduZCx0aGlzLl9iaXRMZW5ndGgpLE49dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHo9Vi5sZW5ndGgtMTt6Pj0wO3otLSl7Zm9yKHZhciBZPTA7ej49MCYmMD09PVZbel07ei0tKVkrKztpZih6Pj0wJiZZKyssTj1OLmRibHAo''@;'; put 'put ''WSksejwwKWJyZWFrO3ZhciBGPVZbel07digwIT09RiksTj0iYWZmaW5lIj09PUwudHlwZT9OLm1peGVkQWRkKEY+MD9IW0YtMT4+MV06SFstRi0xPj4xXS5uZWcoKSk6Ti5hZGQoRj4wP0hbRi0xPj4xXTpIWy1GLTE+PjFdLm5lZygpKX1yZXR1cm4iYWZmaW5lIj09PUwudHlwZT9OLnRvUCgp''@;'; put 'put ''Ok59LEMucHJvdG90eXBlLl93bmFmTXVsQWRkPWZ1bmN0aW9uKEwsUix4LFUsSCl7dmFyIEYsVyxxLFY9dGhpcy5fd25hZlQxLE49dGhpcy5fd25hZlQyLHo9dGhpcy5fd25hZlQzLFk9MDtmb3IoRj0wO0Y8VTtGKyspe3ZhciByZT0ocT1SW0ZdKS5fZ2V0TkFGUG9pbnRzKEwpO1ZbRl09cmUu''@;'; put 'put ''d25kLE5bRl09cmUucG9pbnRzfWZvcihGPVUtMTtGPj0xO0YtPTIpe3ZhciBtZT1GLTEsQ2U9RjtpZigxPT09VlttZV0mJjE9PT1WW0NlXSl7dmFyIEllPVtSW21lXSxudWxsLG51bGwsUltDZV1dOzA9PT1SW21lXS55LmNtcChSW0NlXS55KT8oSWVbMV09UlttZV0uYWRkKFJbQ2VdKSxJZVsy''@;'; put 'put ''XT1SW21lXS50b0ooKS5taXhlZEFkZChSW0NlXS5uZWcoKSkpOjA9PT1SW21lXS55LmNtcChSW0NlXS55LnJlZE5lZygpKT8oSWVbMV09UlttZV0udG9KKCkubWl4ZWRBZGQoUltDZV0pLEllWzJdPVJbbWVdLmFkZChSW0NlXS5uZWcoKSkpOihJZVsxXT1SW21lXS50b0ooKS5taXhlZEFkZChS''@;'; put 'put ''W0NlXSksSWVbMl09UlttZV0udG9KKCkubWl4ZWRBZGQoUltDZV0ubmVnKCkpKTt2YXIga2U9Wy0zLC0xLC01LC03LDAsNyw1LDEsM10scWU9QSh4W21lXSx4W0NlXSk7Zm9yKFk9TWF0aC5tYXgocWVbMF0ubGVuZ3RoLFkpLHpbbWVdPW5ldyBBcnJheShZKSx6W0NlXT1uZXcgQXJyYXkoWSks''@;'; put 'put ''Vz0wO1c8WTtXKyspelttZV1bV109a2VbMyooMSsoMHxxZVswXVtXXSkpKygxKygwfHFlWzFdW1ddKSldLHpbQ2VdW1ddPTAsTlttZV09SWV9ZWxzZSB6W21lXT1zKHhbbWVdLFZbbWVdLHRoaXMuX2JpdExlbmd0aCkseltDZV09cyh4W0NlXSxWW0NlXSx0aGlzLl9iaXRMZW5ndGgpLFk9TWF0''@;'; put 'put ''aC5tYXgoelttZV0ubGVuZ3RoLFkpLFk9TWF0aC5tYXgoeltDZV0ubGVuZ3RoLFkpfXZhciBiPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxrPXRoaXMuX3duYWZUNDtmb3IoRj1ZO0Y+PTA7Ri0tKXtmb3IodmFyIE09MDtGPj0wOyl7dmFyIEI9ITA7Zm9yKFc9MDtXPFU7VysrKWtbV109''@;'; put 'put ''MHx6W1ddW0ZdLDAhPT1rW1ddJiYoQj0hMSk7aWYoIUIpYnJlYWs7TSsrLEYtLX1pZihGPj0wJiZNKyssYj1iLmRibHAoTSksRjwwKWJyZWFrO2ZvcihXPTA7VzxVO1crKyl7dmFyIEs9a1tXXTswIT09SyYmKEs+MD9xPU5bV11bSy0xPj4xXTpLPDAmJihxPU5bV11bLUstMT4+MV0ubmVnKCkp''@;'; put 'put ''LGI9ImFmZmluZSI9PT1xLnR5cGU/Yi5taXhlZEFkZChxKTpiLmFkZChxKSl9fWZvcihGPTA7RjxVO0YrKylOW0ZdPW51bGw7cmV0dXJuIEg/YjpiLnRvUCgpfSxDLkJhc2VQb2ludD13LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQi''@;'; put 'put ''KX0sdy5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKX0sQy5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oTCxSKXtMPWMudG9BcnJheShMLFIpO3ZhciB4PXRoaXMucC5ieXRlTGVuZ3RoKCk7aWYoKDQ9PT1MWzBdfHw2''@;'; put 'put ''PT09TFswXXx8Nz09PUxbMF0pJiZMLmxlbmd0aC0xPT0yKngpcmV0dXJuIDY9PT1MWzBdP3YoTFtMLmxlbmd0aC0xXSUyPT0wKTo3PT09TFswXSYmdihMW0wubGVuZ3RoLTFdJTI9PTEpLHRoaXMucG9pbnQoTC5zbGljZSgxLDEreCksTC5zbGljZSgxK3gsMSsyKngpKTtpZigoMj09PUxbMF18''@;'; put 'put ''fDM9PT1MWzBdKSYmTC5sZW5ndGgtMT09PXgpcmV0dXJuIHRoaXMucG9pbnRGcm9tWChMLnNsaWNlKDEsMSt4KSwzPT09TFswXSk7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHBvaW50IGZvcm1hdCIpfSx3LnByb3RvdHlwZS5lbmNvZGVDb21wcmVzc2VkPWZ1bmN0aW9uKEwpe3JldHVybiB0''@;'; put 'put ''aGlzLmVuY29kZShMLCEwKX0sdy5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbihMKXt2YXIgUj10aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpLHg9dGhpcy5nZXRYKCkudG9BcnJheSgiYmUiLFIpO3JldHVybiBMP1t0aGlzLmdldFkoKS5pc0V2ZW4oKT8yOjNdLmNvbmNhdCh4KTpbNF0uY29u''@;'; put 'put ''Y2F0KHgsdGhpcy5nZXRZKCkudG9BcnJheSgiYmUiLFIpKX0sdy5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKEwsUil7cmV0dXJuIGMuZW5jb2RlKHRoaXMuX2VuY29kZShSKSxMKX0sdy5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbihMKXtpZih0aGlzLnByZWNvbXB1dGVkKXJldHVy''@;'; put 'put ''biB0aGlzO3ZhciBSPXtkb3VibGVzOm51bGwsbmFmOm51bGwsYmV0YTpudWxsfTtyZXR1cm4gUi5uYWY9dGhpcy5fZ2V0TkFGUG9pbnRzKDgpLFIuZG91Ymxlcz10aGlzLl9nZXREb3VibGVzKDQsTCksUi5iZXRhPXRoaXMuX2dldEJldGEoKSx0aGlzLnByZWNvbXB1dGVkPVIsdGhpc30sdy5w''@;'; put 'put ''cm90b3R5cGUuX2hhc0RvdWJsZXM9ZnVuY3Rpb24oTCl7aWYoIXRoaXMucHJlY29tcHV0ZWQpcmV0dXJuITE7dmFyIFI9dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO3JldHVybiEhUiYmUi5wb2ludHMubGVuZ3RoPj1NYXRoLmNlaWwoKEwuYml0TGVuZ3RoKCkrMSkvUi5zdGVwKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuX2dldERvdWJsZXM9ZnVuY3Rpb24oTCxSKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcztmb3IodmFyIHg9W3RoaXNdLFU9dGhpcyxIPTA7SDxSO0grPUwpe2Zvcih2YXIgVj0wO1Y8TDtW''@;'; put 'put ''KyspVT1VLmRibCgpO3gucHVzaChVKX1yZXR1cm57c3RlcDpMLHBvaW50czp4fX0sdy5wcm90b3R5cGUuX2dldE5BRlBvaW50cz1mdW5jdGlvbihMKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLm5hZilyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7Zm9yKHZhciBS''@;'; put 'put ''PVt0aGlzXSx4PSgxPDxMKS0xLFU9MT09PXg/bnVsbDp0aGlzLmRibCgpLEg9MTtIPHg7SCsrKVJbSF09UltILTFdLmFkZChVKTtyZXR1cm57d25kOkwscG9pbnRzOlJ9fSx3LnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe3JldHVybiBudWxsfSx3LnByb3RvdHlwZS5kYmxwPWZ1bmN0''@;'; put 'put ''aW9uKEwpe2Zvcih2YXIgUj10aGlzLHg9MDt4PEw7eCsrKVI9Ui5kYmwoKTtyZXR1cm4gUn19LDMxMjk4KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNDcwMTEpLGM9aCgyODQ5MCkscz1oKDU2Njk4KSxBPWgoMzY2NzcpLHY9eS5hc3NlcnQ7ZnVuY3Rpb24gQyhTKXt0aGlzLnR3aXN0''@;'; put 'put ''ZWQ9MSE9KDB8Uy5hKSx0aGlzLm1PbmVBPXRoaXMudHdpc3RlZCYmLTE9PSgwfFMuYSksdGhpcy5leHRlbmRlZD10aGlzLm1PbmVBLEEuY2FsbCh0aGlzLCJlZHdhcmRzIixTKSx0aGlzLmE9bmV3IGMoUy5hLDE2KS51bW9kKHRoaXMucmVkLm0pLHRoaXMuYT10aGlzLmEudG9SZWQodGhpcy5y''@;'; put 'put ''ZWQpLHRoaXMuYz1uZXcgYyhTLmMsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmMyPXRoaXMuYy5yZWRTcXIoKSx0aGlzLmQ9bmV3IGMoUy5kLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5kZD10aGlzLmQucmVkQWRkKHRoaXMuZCksdighdGhpcy50d2lzdGVkfHwwPT09dGhpcy5jLmZyb21S''@;'; put 'put ''ZWQoKS5jbXBuKDEpKSx0aGlzLm9uZUM9MT09KDB8Uy5jKX1mdW5jdGlvbiB3KFMsTCxSLHgsVSl7QS5CYXNlUG9pbnQuY2FsbCh0aGlzLFMsInByb2plY3RpdmUiKSxudWxsPT09TCYmbnVsbD09PVImJm51bGw9PT14Pyh0aGlzLng9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMueT10aGlzLmN1cnZl''@;'; put 'put ''Lm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PXRoaXMuY3VydmUuemVybyx0aGlzLnpPbmU9ITApOih0aGlzLng9bmV3IGMoTCwxNiksdGhpcy55PW5ldyBjKFIsMTYpLHRoaXMuej14P25ldyBjKHgsMTYpOnRoaXMuY3VydmUub25lLHRoaXMudD1VJiZuZXcgYyhVLDE2KSx0aGlz''@;'; put 'put ''LngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnQmJiF0aGlzLnQucmVk''@;'; put 'put ''JiYodGhpcy50PXRoaXMudC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZSx0aGlzLmN1cnZlLmV4dGVuZGVkJiYhdGhpcy50JiYodGhpcy50PXRoaXMueC5yZWRNdWwodGhpcy55KSx0aGlzLnpPbmV8fCh0aGlzLnQ9dGhpcy50LnJlZE11''@;'; put 'put ''bCh0aGlzLnoucmVkSW52bSgpKSkpKX1zKEMsQSksZmUuZXhwb3J0cz1DLEMucHJvdG90eXBlLl9tdWxBPWZ1bmN0aW9uKEwpe3JldHVybiB0aGlzLm1PbmVBP0wucmVkTmVnKCk6dGhpcy5hLnJlZE11bChMKX0sQy5wcm90b3R5cGUuX211bEM9ZnVuY3Rpb24oTCl7cmV0dXJuIHRoaXMub25l''@;'; put 'put ''Qz9MOnRoaXMuYy5yZWRNdWwoTCl9LEMucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihMLFIseCxVKXtyZXR1cm4gdGhpcy5wb2ludChMLFIseCxVKX0sQy5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbihMLFIpeyhMPW5ldyBjKEwsMTYpKS5yZWR8fChMPUwudG9SZWQodGhpcy5yZWQp''@;'; put 'put ''KTt2YXIgeD1MLnJlZFNxcigpLFU9dGhpcy5jMi5yZWRTdWIodGhpcy5hLnJlZE11bCh4KSksSD10aGlzLm9uZS5yZWRTdWIodGhpcy5jMi5yZWRNdWwodGhpcy5kKS5yZWRNdWwoeCkpLFY9VS5yZWRNdWwoSC5yZWRJbnZtKCkpLE49Vi5yZWRTcXJ0KCk7aWYoMCE9PU4ucmVkU3FyKCkucmVk''@;'; put 'put ''U3ViKFYpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciB6PU4uZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKFImJiF6fHwhUiYmeikmJihOPU4ucmVkTmVnKCkpLHRoaXMucG9pbnQoTCxOKX0sQy5wcm90b3R5cGUucG9pbnRGcm9tWT1mdW5jdGlv''@;'; put 'put ''bihMLFIpeyhMPW5ldyBjKEwsMTYpKS5yZWR8fChMPUwudG9SZWQodGhpcy5yZWQpKTt2YXIgeD1MLnJlZFNxcigpLFU9eC5yZWRTdWIodGhpcy5jMiksSD14LnJlZE11bCh0aGlzLmQpLnJlZE11bCh0aGlzLmMyKS5yZWRTdWIodGhpcy5hKSxWPVUucmVkTXVsKEgucmVkSW52bSgpKTtpZigw''@;'; put 'put ''PT09Vi5jbXAodGhpcy56ZXJvKSl7aWYoUil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gdGhpcy5wb2ludCh0aGlzLnplcm8sTCl9dmFyIE49Vi5yZWRTcXJ0KCk7aWYoMCE9PU4ucmVkU3FyKCkucmVkU3ViKFYpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiaW52YWxpZCBwb2ludCIpO3JldHVybiBOLmZyb21SZWQoKS5pc09kZCgpIT09UiYmKE49Ti5yZWROZWcoKSksdGhpcy5wb2ludChOLEwpfSxDLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihMKXtpZihMLmlzSW5maW5pdHkoKSlyZXR1cm4hMDtMLm5vcm1hbGl6ZSgpO3ZhciBSPUwu''@;'; put 'put ''eC5yZWRTcXIoKSx4PUwueS5yZWRTcXIoKSxVPVIucmVkTXVsKHRoaXMuYSkucmVkQWRkKHgpLEg9dGhpcy5jMi5yZWRNdWwodGhpcy5vbmUucmVkQWRkKHRoaXMuZC5yZWRNdWwoUikucmVkTXVsKHgpKSk7cmV0dXJuIDA9PT1VLmNtcChIKX0scyh3LEEuQmFzZVBvaW50KSxDLnByb3RvdHlw''@;'; put 'put ''ZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKEwpe3JldHVybiB3LmZyb21KU09OKHRoaXMsTCl9LEMucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKEwsUix4LFUpe3JldHVybiBuZXcgdyh0aGlzLEwsUix4LFUpfSx3LmZyb21KU09OPWZ1bmN0aW9uKEwsUil7cmV0dXJuIG5ldyB3KEwsUlswXSxS''@;'; put 'put ''WzFdLFJbMl0pfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LmZyb21SZWQoKS50b1N0''@;'; put 'put ''cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LHcucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMueC5jbXBuKDApJiYoMD09PXRoaXMueS5jbXAodGhpcy56KXx8dGhpcy56T25lJiYwPT09dGhpcy55LmNt''@;'; put 'put ''cCh0aGlzLmN1cnZlLmMpKX0sdy5wcm90b3R5cGUuX2V4dERibD1mdW5jdGlvbigpe3ZhciBMPXRoaXMueC5yZWRTcXIoKSxSPXRoaXMueS5yZWRTcXIoKSx4PXRoaXMuei5yZWRTcXIoKTt4PXgucmVkSUFkZCh4KTt2YXIgVT10aGlzLmN1cnZlLl9tdWxBKEwpLEg9dGhpcy54LnJlZEFkZCh0''@;'; put 'put ''aGlzLnkpLnJlZFNxcigpLnJlZElTdWIoTCkucmVkSVN1YihSKSxWPVUucmVkQWRkKFIpLE49Vi5yZWRTdWIoeCksej1VLnJlZFN1YihSKSxZPUgucmVkTXVsKE4pLEY9Vi5yZWRNdWwoeiksVz1ILnJlZE11bCh6KSxxPU4ucmVkTXVsKFYpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFksRixx''@;'; put 'put ''LFcpfSx3LnByb3RvdHlwZS5fcHJvakRibD1mdW5jdGlvbigpe3ZhciBVLEgsVixOLHosWSxMPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKSxSPXRoaXMueC5yZWRTcXIoKSx4PXRoaXMueS5yZWRTcXIoKTtpZih0aGlzLmN1cnZlLnR3aXN0ZWQpe3ZhciBGPShOPXRoaXMuY3VydmUu''@;'; put 'put ''X211bEEoUikpLnJlZEFkZCh4KTt0aGlzLnpPbmU/KFU9TC5yZWRTdWIoUikucmVkU3ViKHgpLnJlZE11bChGLnJlZFN1Yih0aGlzLmN1cnZlLnR3bykpLEg9Ri5yZWRNdWwoTi5yZWRTdWIoeCkpLFY9Ri5yZWRTcXIoKS5yZWRTdWIoRikucmVkU3ViKEYpKTooej10aGlzLnoucmVkU3FyKCks''@;'; put 'put ''WT1GLnJlZFN1Yih6KS5yZWRJU3ViKHopLFU9TC5yZWRTdWIoUikucmVkSVN1Yih4KS5yZWRNdWwoWSksSD1GLnJlZE11bChOLnJlZFN1Yih4KSksVj1GLnJlZE11bChZKSl9ZWxzZSBOPVIucmVkQWRkKHgpLHo9dGhpcy5jdXJ2ZS5fbXVsQyh0aGlzLnopLnJlZFNxcigpLFk9Ti5yZWRTdWIo''@;'; put 'put ''eikucmVkU3ViKHopLFU9dGhpcy5jdXJ2ZS5fbXVsQyhMLnJlZElTdWIoTikpLnJlZE11bChZKSxIPXRoaXMuY3VydmUuX211bEMoTikucmVkTXVsKFIucmVkSVN1Yih4KSksVj1OLnJlZE11bChZKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChVLEgsVil9LHcucHJvdG90eXBlLmRibD1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0RGJsKCk6dGhpcy5fcHJvakRibCgpfSx3LnByb3RvdHlwZS5fZXh0QWRkPWZ1bmN0aW9uKEwpe3ZhciBSPXRoaXMueS5yZWRTdWIodGhpcy54KS5yZWRNdWwoTC55LnJlZFN1''@;'; put 'put ''YihMLngpKSx4PXRoaXMueS5yZWRBZGQodGhpcy54KS5yZWRNdWwoTC55LnJlZEFkZChMLngpKSxVPXRoaXMudC5yZWRNdWwodGhpcy5jdXJ2ZS5kZCkucmVkTXVsKEwudCksSD10aGlzLnoucmVkTXVsKEwuei5yZWRBZGQoTC56KSksVj14LnJlZFN1YihSKSxOPUgucmVkU3ViKFUpLHo9SC5y''@;'; put 'put ''ZWRBZGQoVSksWT14LnJlZEFkZChSKSxGPVYucmVkTXVsKE4pLFc9ei5yZWRNdWwoWSkscT1WLnJlZE11bChZKSxyZT1OLnJlZE11bCh6KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChGLFcscmUscSl9LHcucHJvdG90eXBlLl9wcm9qQWRkPWZ1bmN0aW9uKEwpe3ZhciBXLHEsUj10aGlzLnou''@;'; put 'put ''cmVkTXVsKEwueikseD1SLnJlZFNxcigpLFU9dGhpcy54LnJlZE11bChMLngpLEg9dGhpcy55LnJlZE11bChMLnkpLFY9dGhpcy5jdXJ2ZS5kLnJlZE11bChVKS5yZWRNdWwoSCksTj14LnJlZFN1YihWKSx6PXgucmVkQWRkKFYpLFk9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZE11bChMLngu''@;'; put 'put ''cmVkQWRkKEwueSkpLnJlZElTdWIoVSkucmVkSVN1YihIKSxGPVIucmVkTXVsKE4pLnJlZE11bChZKTtyZXR1cm4gdGhpcy5jdXJ2ZS50d2lzdGVkPyhXPVIucmVkTXVsKHopLnJlZE11bChILnJlZFN1Yih0aGlzLmN1cnZlLl9tdWxBKFUpKSkscT1OLnJlZE11bCh6KSk6KFc9Ui5yZWRNdWwo''@;'; put 'put ''eikucmVkTXVsKEgucmVkU3ViKFUpKSxxPXRoaXMuY3VydmUuX211bEMoTikucmVkTXVsKHopKSx0aGlzLmN1cnZlLnBvaW50KEYsVyxxKX0sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEwpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9MOkwuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2''@;'; put 'put ''ZS5leHRlbmRlZD90aGlzLl9leHRBZGQoTCk6dGhpcy5fcHJvakFkZChMKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEwpe3JldHVybiB0aGlzLl9oYXNEb3VibGVzKEwpP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsTCk6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLEwpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oTCxSLHgpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsUl0sW0wseF0sMiwhMSl9LHcucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24oTCxSLHgpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsUl0sW0ws''@;'; put 'put ''eF0sMiwhMCl9LHcucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe2lmKHRoaXMuek9uZSlyZXR1cm4gdGhpczt2YXIgTD10aGlzLnoucmVkSW52bSgpO3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bChMKSx0aGlzLnk9dGhpcy55LnJlZE11bChMKSx0aGlzLnQmJih0aGlzLnQ9dGhp''@;'; put 'put ''cy50LnJlZE11bChMKSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMuek9uZT0hMCx0aGlzfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTmVnKCksdGhpcy55LHRoaXMueix0aGlzLnQmJnRoaXMudC5yZWROZWcoKSl9LHcu''@;'; put 'put ''cHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfSx3LnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy55LmZyb21SZWQoKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oTCl7''@;'; put 'put ''cmV0dXJuIHRoaXM9PT1MfHwwPT09dGhpcy5nZXRYKCkuY21wKEwuZ2V0WCgpKSYmMD09PXRoaXMuZ2V0WSgpLmNtcChMLmdldFkoKSl9LHcucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbihMKXt2YXIgUj1MLnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwodGhpcy56KTtpZigwPT09dGhp''@;'; put 'put ''cy54LmNtcChSKSlyZXR1cm4hMDtmb3IodmFyIHg9TC5jbG9uZSgpLFU9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bCh0aGlzLnopOzspe2lmKHguaWFkZCh0aGlzLmN1cnZlLm4pLHguY21wKHRoaXMuY3VydmUucCk+PTApcmV0dXJuITE7aWYoUi5yZWRJQWRkKFUpLDA9PT10aGlzLnguY21wKFIp''@;'; put 'put ''KXJldHVybiEwfX0sdy5wcm90b3R5cGUudG9QPXcucHJvdG90eXBlLm5vcm1hbGl6ZSx3LnByb3RvdHlwZS5taXhlZEFkZD13LnByb3RvdHlwZS5hZGR9LDg5NChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1qO3kuYmFzZT1oKDM2Njc3KSx5LnNob3J0PWgoMzkxODgpLHkubW9udD1oKDMw''@;'; put 'put ''MzcwKSx5LmVkd2FyZHM9aCgzMTI5OCl9LDMwMzcwKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoMjg0OTApLGM9aCg1NjY5OCkscz1oKDM2Njc3KSxBPWgoNDcwMTEpO2Z1bmN0aW9uIHYodyl7cy5jYWxsKHRoaXMsIm1vbnQiLHcpLHRoaXMuYT1uZXcgeSh3LmEsMTYpLnRvUmVkKHRo''@;'; put 'put ''aXMucmVkKSx0aGlzLmI9bmV3IHkody5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5pND1uZXcgeSg0KS50b1JlZCh0aGlzLnJlZCkucmVkSW52bSgpLHRoaXMudHdvPW5ldyB5KDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmEyND10aGlzLmk0LnJlZE11bCh0aGlzLmEucmVkQWRkKHRoaXMu''@;'; put 'put ''dHdvKSl9ZnVuY3Rpb24gQyh3LFMsTCl7cy5CYXNlUG9pbnQuY2FsbCh0aGlzLHcsInByb2plY3RpdmUiKSxudWxsPT09UyYmbnVsbD09PUw/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS56ZXJvKToodGhpcy54PW5ldyB5KFMsMTYpLHRoaXMuej1uZXcgeShMLDE2''@;'; put 'put ''KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSkpfWModixzKSxmZS5leHBvcnRzPXYsdi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oUyl7dmFyIEw9Uy5u''@;'; put 'put ''b3JtYWxpemUoKS54LFI9TC5yZWRTcXIoKSx4PVIucmVkTXVsKEwpLnJlZEFkZChSLnJlZE11bCh0aGlzLmEpKS5yZWRBZGQoTCk7cmV0dXJuIDA9PT14LnJlZFNxcnQoKS5yZWRTcXIoKS5jbXAoeCl9LGMoQyxzLkJhc2VQb2ludCksdi5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24o''@;'; put 'put ''UyxMKXtyZXR1cm4gdGhpcy5wb2ludChBLnRvQXJyYXkoUyxMKSwxKX0sdi5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oUyxMKXtyZXR1cm4gbmV3IEModGhpcyxTLEwpfSx2LnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKFMpe3JldHVybiBDLmZyb21KU09OKHRoaXMsUyl9LEMu''@;'; put 'put ''cHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oKXt9LEMucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkudG9BcnJheSgiYmUiLHRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkpfSxDLmZyb21KU09OPWZ1bmN0aW9uKFMsTCl7cmV0dXJuIG5ldyBDKFMs''@;'; put 'put ''TFswXSxMWzFdfHxTLm9uZSl9LEMucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnouZnJvbVJl''@;'; put 'put ''ZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sQy5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9LEMucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3ZhciBMPXRoaXMueC5yZWRBZGQodGhpcy56KS5yZWRTcXIoKSx4PXRoaXMueC5yZWRTdWIo''@;'; put 'put ''dGhpcy56KS5yZWRTcXIoKSxVPUwucmVkU3ViKHgpLEg9TC5yZWRNdWwoeCksVj1VLnJlZE11bCh4LnJlZEFkZCh0aGlzLmN1cnZlLmEyNC5yZWRNdWwoVSkpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChILFYpfSxDLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''Ik5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxDLnByb3RvdHlwZS5kaWZmQWRkPWZ1bmN0aW9uKFMsTCl7dmFyIFI9dGhpcy54LnJlZEFkZCh0aGlzLnopLHg9dGhpcy54LnJlZFN1Yih0aGlzLnopLFU9Uy54LnJlZEFkZChTLnopLFY9Uy54LnJlZFN1YihTLnopLnJlZE11''@;'; put 'put ''bChSKSxOPVUucmVkTXVsKHgpLHo9TC56LnJlZE11bChWLnJlZEFkZChOKS5yZWRTcXIoKSksWT1MLngucmVkTXVsKFYucmVkSVN1YihOKS5yZWRTcXIoKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoeixZKX0sQy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKFMpe2Zvcih2YXIgTD1TLmNsb25l''@;'; put 'put ''KCksUj10aGlzLHg9dGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpLEg9W107MCE9PUwuY21wbigwKTtMLml1c2hybigxKSlILnB1c2goTC5hbmRsbigxKSk7Zm9yKHZhciBWPUgubGVuZ3RoLTE7Vj49MDtWLS0pMD09PUhbVl0/KFI9Ui5kaWZmQWRkKHgsdGhpcykseD14LmRibCgpKTooeD1S''@;'; put 'put ''LmRpZmZBZGQoeCx0aGlzKSxSPVIuZGJsKCkpO3JldHVybiB4fSxDLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxDLnByb3RvdHlwZS5qdW1sQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sQy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oUyl7cmV0dXJuIDA9PT10aGlzLmdldFgoKS5jbXAoUy5nZXRYKCkpfSxDLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRN''@;'; put 'put ''dWwodGhpcy56LnJlZEludm0oKSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXN9LEMucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfX0sMzkxODgoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg0NzAxMSksYz1o''@;'; put 'put ''KDI4NDkwKSxzPWgoNTY2OTgpLEE9aCgzNjY3Nyksdj15LmFzc2VydDtmdW5jdGlvbiBDKEwpe0EuY2FsbCh0aGlzLCJzaG9ydCIsTCksdGhpcy5hPW5ldyBjKEwuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgYyhMLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnRpbnY9dGhp''@;'; put 'put ''cy50d28ucmVkSW52bSgpLHRoaXMuemVyb0E9MD09PXRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSx0aGlzLnRocmVlQT0wPT09dGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSx0aGlzLmVuZG89dGhpcy5fZ2V0RW5kb21vcnBoaXNtKEwpLHRoaXMuX2VuZG9XbmFmVDE9bmV3''@;'; put 'put ''IEFycmF5KDQpLHRoaXMuX2VuZG9XbmFmVDI9bmV3IEFycmF5KDQpfWZ1bmN0aW9uIHcoTCxSLHgsVSl7QS5CYXNlUG9pbnQuY2FsbCh0aGlzLEwsImFmZmluZSIpLG51bGw9PT1SJiZudWxsPT09eD8odGhpcy54PW51bGwsdGhpcy55PW51bGwsdGhpcy5pbmY9ITApOih0aGlzLng9bmV3IGMo''@;'; put 'put ''UiwxNiksdGhpcy55PW5ldyBjKHgsMTYpLFUmJih0aGlzLnguZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpLHRoaXMueS5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10''@;'; put 'put ''aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLmluZj0hMSl9ZnVuY3Rpb24gUyhMLFIseCxVKXtBLkJhc2VQb2ludC5jYWxsKHRoaXMsTCwiamFjb2JpYW4iKSxudWxsPT09UiYmbnVsbD09PXgmJm51bGw9PT1VPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy55PXRoaXMuY3Vy''@;'; put 'put ''dmUub25lLHRoaXMuej1uZXcgYygwKSk6KHRoaXMueD1uZXcgYyhSLDE2KSx0aGlzLnk9bmV3IGMoeCwxNiksdGhpcy56PW5ldyBjKFUsMTYpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVk''@;'; put 'put ''KHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmV9cyhDLEEpLGZlLmV4cG9ydHM9QyxDLnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uKFIpe2lm''@;'; put 'put ''KHRoaXMuemVyb0EmJnRoaXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3ZhciB4LFU7aWYoUi5iZXRhKXg9bmV3IGMoUi5iZXRhLDE2KS50b1JlZCh0aGlzLnJlZCk7ZWxzZXt2YXIgSD10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTt4PSh4PUhbMF0uY21wKEhbMV0pPDA/SFsw''@;'; put 'put ''XTpIWzFdKS50b1JlZCh0aGlzLnJlZCl9aWYoUi5sYW1iZGEpVT1uZXcgYyhSLmxhbWJkYSwxNik7ZWxzZXt2YXIgVj10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTswPT09dGhpcy5nLm11bChWWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoeCkpP1U9VlswXTp2KDA9PT10aGlzLmcubXVs''@;'; put 'put ''KFU9VlsxXSkueC5jbXAodGhpcy5nLngucmVkTXVsKHgpKSl9cmV0dXJue2JldGE6eCxsYW1iZGE6VSxiYXNpczpSLmJhc2lzP1IuYmFzaXMubWFwKGZ1bmN0aW9uKHope3JldHVybnthOm5ldyBjKHouYSwxNiksYjpuZXcgYyh6LmIsMTYpfX0pOnRoaXMuX2dldEVuZG9CYXNpcyhVKX19fSxD''@;'; put 'put ''LnByb3RvdHlwZS5fZ2V0RW5kb1Jvb3RzPWZ1bmN0aW9uKFIpe3ZhciB4PVI9PT10aGlzLnA/dGhpcy5yZWQ6Yy5tb250KFIpLFU9bmV3IGMoMikudG9SZWQoeCkucmVkSW52bSgpLEg9VS5yZWROZWcoKSxWPW5ldyBjKDMpLnRvUmVkKHgpLnJlZE5lZygpLnJlZFNxcnQoKS5yZWRNdWwoVSk7''@;'; put 'put ''cmV0dXJuW0gucmVkQWRkKFYpLmZyb21SZWQoKSxILnJlZFN1YihWKS5mcm9tUmVkKCldfSxDLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzPWZ1bmN0aW9uKFIpe2Zvcih2YXIgRixXLHEscmUsbWUsQ2UsSWUscWUsWCx4PXRoaXMubi51c2hybihNYXRoLmZsb29yKHRoaXMubi5iaXRMZW5ndGgo''@;'; put 'put ''KS8yKSksVT1SLEg9dGhpcy5uLmNsb25lKCksVj1uZXcgYygxKSxOPW5ldyBjKDApLHo9bmV3IGMoMCksWT1uZXcgYygxKSxrZT0wOzAhPT1VLmNtcG4oMCk7KXt2YXIgZj1ILmRpdihVKTtxZT1ILnN1YihmLm11bChVKSksWD16LnN1YihmLm11bChWKSk7dmFyIGI9WS5zdWIoZi5tdWwoTikp''@;'; put 'put ''O2lmKCFxJiZxZS5jbXAoeCk8MClGPUllLm5lZygpLFc9VixxPXFlLm5lZygpLHJlPVg7ZWxzZSBpZihxJiYyPT09KytrZSlicmVhaztJZT1xZSxIPVUsVT1xZSx6PVYsVj1YLFk9TixOPWJ9bWU9cWUubmVnKCksQ2U9WDt2YXIgaz1xLnNxcigpLmFkZChyZS5zcXIoKSk7cmV0dXJuIG1lLnNx''@;'; put 'put ''cigpLmFkZChDZS5zcXIoKSkuY21wKGspPj0wJiYobWU9RixDZT1XKSxxLm5lZ2F0aXZlJiYocT1xLm5lZygpLHJlPXJlLm5lZygpKSxtZS5uZWdhdGl2ZSYmKG1lPW1lLm5lZygpLENlPUNlLm5lZygpKSxbe2E6cSxiOnJlfSx7YTptZSxiOkNlfV19LEMucHJvdG90eXBlLl9lbmRvU3BsaXQ9''@;'; put 'put ''ZnVuY3Rpb24oUil7dmFyIHg9dGhpcy5lbmRvLmJhc2lzLFU9eFswXSxIPXhbMV0sVj1ILmIubXVsKFIpLmRpdlJvdW5kKHRoaXMubiksTj1VLmIubmVnKCkubXVsKFIpLmRpdlJvdW5kKHRoaXMubiksej1WLm11bChVLmEpLFk9Ti5tdWwoSC5hKSxGPVYubXVsKFUuYiksVz1OLm11bChILmIp''@;'; put 'put ''O3JldHVybntrMTpSLnN1Yih6KS5zdWIoWSksazI6Ri5hZGQoVykubmVnKCl9fSxDLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKFIseCl7KFI9bmV3IGMoUiwxNikpLnJlZHx8KFI9Ui50b1JlZCh0aGlzLnJlZCkpO3ZhciBVPVIucmVkU3FyKCkucmVkTXVsKFIpLnJlZElBZGQoUi5y''@;'; put 'put ''ZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLEg9VS5yZWRTcXJ0KCk7aWYoMCE9PUgucmVkU3FyKCkucmVkU3ViKFUpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBWPUguZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKHgmJiFWfHwheCYm''@;'; put 'put ''VikmJihIPUgucmVkTmVnKCkpLHRoaXMucG9pbnQoUixIKX0sQy5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oUil7aWYoUi5pbmYpcmV0dXJuITA7dmFyIHg9Ui54LFU9Ui55LEg9dGhpcy5hLnJlZE11bCh4KSxWPXgucmVkU3FyKCkucmVkTXVsKHgpLnJlZElBZGQoSCkucmVkSUFkZCh0''@;'; put 'put ''aGlzLmIpO3JldHVybiAwPT09VS5yZWRTcXIoKS5yZWRJU3ViKFYpLmNtcG4oMCl9LEMucHJvdG90eXBlLl9lbmRvV25hZk11bEFkZD1mdW5jdGlvbihSLHgsVSl7Zm9yKHZhciBIPXRoaXMuX2VuZG9XbmFmVDEsVj10aGlzLl9lbmRvV25hZlQyLE49MDtOPFIubGVuZ3RoO04rKyl7dmFyIHo9''@;'; put 'put ''dGhpcy5fZW5kb1NwbGl0KHhbTl0pLFk9UltOXSxGPVkuX2dldEJldGEoKTt6LmsxLm5lZ2F0aXZlJiYoei5rMS5pbmVnKCksWT1ZLm5lZyghMCkpLHouazIubmVnYXRpdmUmJih6LmsyLmluZWcoKSxGPUYubmVnKCEwKSksSFsyKk5dPVksSFsyKk4rMV09RixWWzIqTl09ei5rMSxWWzIqTisx''@;'; put 'put ''XT16LmsyfWZvcih2YXIgVz10aGlzLl93bmFmTXVsQWRkKDEsSCxWLDIqTixVKSxxPTA7cTwyKk47cSsrKUhbcV09bnVsbCxWW3FdPW51bGw7cmV0dXJuIFd9LHModyxBLkJhc2VQb2ludCksQy5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oUix4LFUpe3JldHVybiBuZXcgdyh0aGlzLFIseCxV''@;'; put 'put ''KX0sQy5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihSLHgpe3JldHVybiB3LmZyb21KU09OKHRoaXMsUix4KX0sdy5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnZlLmVuZG8pe3ZhciBSPXRoaXMucHJlY29tcHV0ZWQ7aWYoUiYmUi5iZXRhKXJldHVy''@;'; put 'put ''biBSLmJldGE7dmFyIHg9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTXVsKHRoaXMuY3VydmUuZW5kby5iZXRhKSx0aGlzLnkpO2lmKFIpe3ZhciBVPXRoaXMuY3VydmUsSD1mdW5jdGlvbihWKXtyZXR1cm4gVS5wb2ludChWLngucmVkTXVsKFUuZW5kby5iZXRhKSxWLnkpfTtSLmJldGE9''@;'; put 'put ''eCx4LnByZWNvbXB1dGVkPXtiZXRhOm51bGwsbmFmOlIubmFmJiZ7d25kOlIubmFmLnduZCxwb2ludHM6Ui5uYWYucG9pbnRzLm1hcChIKX0sZG91YmxlczpSLmRvdWJsZXMmJntzdGVwOlIuZG91Ymxlcy5zdGVwLHBvaW50czpSLmRvdWJsZXMucG9pbnRzLm1hcChIKX19fXJldHVybiB4fX0s''@;'; put 'put ''dy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJlY29tcHV0ZWQ/W3RoaXMueCx0aGlzLnksdGhpcy5wcmVjb21wdXRlZCYme2RvdWJsZXM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzJiZ7c3RlcDp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMuc3RlcCxwb2ludHM6''@;'; put 'put ''dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGljZSgxKX0sbmFmOnRoaXMucHJlY29tcHV0ZWQubmFmJiZ7d25kOnRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5uYWYucG9pbnRzLnNsaWNlKDEpfX1dOlt0aGlzLngsdGhpcy55XX0sdy5m''@;'; put 'put ''cm9tSlNPTj1mdW5jdGlvbihSLHgsVSl7InN0cmluZyI9PXR5cGVvZiB4JiYoeD1KU09OLnBhcnNlKHgpKTt2YXIgSD1SLnBvaW50KHhbMF0seFsxXSxVKTtpZigheFsyXSlyZXR1cm4gSDtmdW5jdGlvbiBWKHope3JldHVybiBSLnBvaW50KHpbMF0selsxXSxVKX12YXIgTj14WzJdO3JldHVy''@;'; put 'put ''biBILnByZWNvbXB1dGVkPXtiZXRhOm51bGwsZG91YmxlczpOLmRvdWJsZXMmJntzdGVwOk4uZG91Ymxlcy5zdGVwLHBvaW50czpbSF0uY29uY2F0KE4uZG91Ymxlcy5wb2ludHMubWFwKFYpKX0sbmFmOk4ubmFmJiZ7d25kOk4ubmFmLnduZCxwb2ludHM6W0hdLmNvbmNhdChOLm5hZi5wb2lu''@;'; put 'put ''dHMubWFwKFYpKX19LEh9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgp''@;'; put 'put ''LnRvU3RyaW5nKDE2LDIpKyI+In0sdy5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZn0sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFIpe2lmKHRoaXMuaW5mKXJldHVybiBSO2lmKFIuaW5mKXJldHVybiB0aGlzO2lmKHRoaXMuZXEoUikpcmV0dXJuIHRo''@;'; put 'put ''aXMuZGJsKCk7aWYodGhpcy5uZWcoKS5lcShSKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO2lmKDA9PT10aGlzLnguY21wKFIueCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgeD10aGlzLnkucmVkU3ViKFIueSk7MCE9PXguY21wbigwKSYmKHg9''@;'; put 'put ''eC5yZWRNdWwodGhpcy54LnJlZFN1YihSLngpLnJlZEludm0oKSkpO3ZhciBVPXgucmVkU3FyKCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIoUi54KSxIPXgucmVkTXVsKHRoaXMueC5yZWRTdWIoVSkpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChVLEgpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgUj10aGlzLnkucmVkQWRkKHRoaXMueSk7aWYoMD09PVIuY21wbigwKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciB4PXRoaXMuY3VydmUuYSxVPXRoaXMueC5yZWRTcXIoKSxI''@;'; put 'put ''PVIucmVkSW52bSgpLFY9VS5yZWRBZGQoVSkucmVkSUFkZChVKS5yZWRJQWRkKHgpLnJlZE11bChIKSxOPVYucmVkU3FyKCkucmVkSVN1Yih0aGlzLngucmVkQWRkKHRoaXMueCkpLHo9Vi5yZWRNdWwodGhpcy54LnJlZFN1YihOKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZl''@;'; put 'put ''LnBvaW50KE4seil9LHcucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54LmZyb21SZWQoKX0sdy5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkuZnJvbVJlZCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oUil7cmV0dXJuIFI9bmV3IGMoUiwx''@;'; put 'put ''NiksdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLl9oYXNEb3VibGVzKFIpP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsUik6dGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlzXSxbUl0pOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxSKX0sdy5w''@;'; put 'put ''cm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKFIseCxVKXt2YXIgSD1bdGhpcyx4XSxWPVtSLFVdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoSCxWKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsSCxWLDIpfSx3LnByb3RvdHlwZS5qbXVsQWRkPWZ1''@;'; put 'put ''bmN0aW9uKFIseCxVKXt2YXIgSD1bdGhpcyx4XSxWPVtSLFVdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoSCxWLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsSCxWLDIsITApfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihSKXtyZXR1cm4g''@;'; put 'put ''dGhpcz09PVJ8fHRoaXMuaW5mPT09Ui5pbmYmJih0aGlzLmluZnx8MD09PXRoaXMueC5jbXAoUi54KSYmMD09PXRoaXMueS5jbXAoUi55KSl9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbihSKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgeD10aGlzLmN1cnZlLnBvaW50KHRoaXMueCx0''@;'; put 'put ''aGlzLnkucmVkTmVnKCkpO2lmKFImJnRoaXMucHJlY29tcHV0ZWQpe3ZhciBVPXRoaXMucHJlY29tcHV0ZWQsSD1mdW5jdGlvbihWKXtyZXR1cm4gVi5uZWcoKX07eC5wcmVjb21wdXRlZD17bmFmOlUubmFmJiZ7d25kOlUubmFmLnduZCxwb2ludHM6VS5uYWYucG9pbnRzLm1hcChIKX0sZG91''@;'; put 'put ''YmxlczpVLmRvdWJsZXMmJntzdGVwOlUuZG91Ymxlcy5zdGVwLHBvaW50czpVLmRvdWJsZXMucG9pbnRzLm1hcChIKX19fXJldHVybiB4fSx3LnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmY/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuY3Vy''@;'; put 'put ''dmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpfSxzKFMsQS5CYXNlUG9pbnQpLEMucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihSLHgsVSl7cmV0dXJuIG5ldyBTKHRoaXMsUix4LFUpfSxTLnByb3RvdHlwZS50b1A9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHko''@;'; put 'put ''KSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBSPXRoaXMuei5yZWRJbnZtKCkseD1SLnJlZFNxcigpLFU9dGhpcy54LnJlZE11bCh4KSxIPXRoaXMueS5yZWRNdWwoeCkucmVkTXVsKFIpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFUsSCl9LFMucHJvdG90eXBlLm5l''@;'; put 'put ''Zz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRoaXMueil9LFMucHJvdG90eXBlLmFkZD1mdW5jdGlvbihSKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gUjtpZihSLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgeD1S''@;'; put 'put ''LnoucmVkU3FyKCksVT10aGlzLnoucmVkU3FyKCksSD10aGlzLngucmVkTXVsKHgpLFY9Ui54LnJlZE11bChVKSxOPXRoaXMueS5yZWRNdWwoeC5yZWRNdWwoUi56KSksej1SLnkucmVkTXVsKFUucmVkTXVsKHRoaXMueikpLFk9SC5yZWRTdWIoViksRj1OLnJlZFN1Yih6KTtpZigwPT09WS5j''@;'; put 'put ''bXBuKDApKXJldHVybiAwIT09Ri5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBXPVkucmVkU3FyKCkscT1XLnJlZE11bChZKSxyZT1ILnJlZE11bChXKSxtZT1GLnJlZFNxcigpLnJlZElBZGQocSkucmVkSVN1YihyZSkucmVkSVN1Yihy''@;'; put 'put ''ZSksQ2U9Ri5yZWRNdWwocmUucmVkSVN1YihtZSkpLnJlZElTdWIoTi5yZWRNdWwocSkpLEllPXRoaXMuei5yZWRNdWwoUi56KS5yZWRNdWwoWSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG1lLENlLEllKX0sUy5wcm90b3R5cGUubWl4ZWRBZGQ9ZnVuY3Rpb24oUil7aWYodGhpcy5pc0lu''@;'; put 'put ''ZmluaXR5KCkpcmV0dXJuIFIudG9KKCk7aWYoUi5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIHg9dGhpcy56LnJlZFNxcigpLFU9dGhpcy54LEg9Ui54LnJlZE11bCh4KSxWPXRoaXMueSxOPVIueS5yZWRNdWwoeCkucmVkTXVsKHRoaXMueiksej1VLnJlZFN1YihIKSxZPVYucmVkU3Vi''@;'; put 'put ''KE4pO2lmKDA9PT16LmNtcG4oMCkpcmV0dXJuIDAhPT1ZLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIEY9ei5yZWRTcXIoKSxXPUYucmVkTXVsKHopLHE9VS5yZWRNdWwoRikscmU9WS5yZWRTcXIoKS5yZWRJQWRkKFcpLnJlZElTdWIo''@;'; put 'put ''cSkucmVkSVN1YihxKSxtZT1ZLnJlZE11bChxLnJlZElTdWIocmUpKS5yZWRJU3ViKFYucmVkTXVsKFcpKSxDZT10aGlzLnoucmVkTXVsKHopO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChyZSxtZSxDZSl9LFMucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oUil7aWYoMD09PVIpcmV0dXJuIHRo''@;'; put 'put ''aXM7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7aWYoIVIpcmV0dXJuIHRoaXMuZGJsKCk7dmFyIHg7aWYodGhpcy5jdXJ2ZS56ZXJvQXx8dGhpcy5jdXJ2ZS50aHJlZUEpe3ZhciBVPXRoaXM7Zm9yKHg9MDt4PFI7eCsrKVU9VS5kYmwoKTtyZXR1cm4gVX12YXIgSD10aGlzLmN1''@;'; put 'put ''cnZlLmEsVj10aGlzLmN1cnZlLnRpbnYsTj10aGlzLngsej10aGlzLnksWT10aGlzLnosRj1ZLnJlZFNxcigpLnJlZFNxcigpLFc9ei5yZWRBZGQoeik7Zm9yKHg9MDt4PFI7eCsrKXt2YXIgcT1OLnJlZFNxcigpLHJlPVcucmVkU3FyKCksbWU9cmUucmVkU3FyKCksQ2U9cS5yZWRBZGQocSku''@;'; put 'put ''cmVkSUFkZChxKS5yZWRJQWRkKEgucmVkTXVsKEYpKSxJZT1OLnJlZE11bChyZSksa2U9Q2UucmVkU3FyKCkucmVkSVN1YihJZS5yZWRBZGQoSWUpKSxxZT1JZS5yZWRJU3ViKGtlKSxYPUNlLnJlZE11bChxZSk7WD1YLnJlZElBZGQoWCkucmVkSVN1YihtZSk7dmFyIGY9Vy5yZWRNdWwoWSk7''@;'; put 'put ''eCsxPFImJihGPUYucmVkTXVsKG1lKSksTj1rZSxZPWYsVz1YfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChOLFcucmVkTXVsKFYpLFkpfSxTLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9E''@;'; put 'put ''YmwoKTp0aGlzLmN1cnZlLnRocmVlQT90aGlzLl90aHJlZURibCgpOnRoaXMuX2RibCgpfSxTLnByb3RvdHlwZS5femVyb0RibD1mdW5jdGlvbigpe3ZhciBSLHgsVTtpZih0aGlzLnpPbmUpe3ZhciBIPXRoaXMueC5yZWRTcXIoKSxWPXRoaXMueS5yZWRTcXIoKSxOPVYucmVkU3FyKCksej10''@;'; put 'put ''aGlzLngucmVkQWRkKFYpLnJlZFNxcigpLnJlZElTdWIoSCkucmVkSVN1YihOKTt6PXoucmVkSUFkZCh6KTt2YXIgWT1ILnJlZEFkZChIKS5yZWRJQWRkKEgpLEY9WS5yZWRTcXIoKS5yZWRJU3ViKHopLnJlZElTdWIoeiksVz1OLnJlZElBZGQoTik7Vz0oVz1XLnJlZElBZGQoVykpLnJlZElB''@;'; put 'put ''ZGQoVyksUj1GLHg9WS5yZWRNdWwoei5yZWRJU3ViKEYpKS5yZWRJU3ViKFcpLFU9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIHE9dGhpcy54LnJlZFNxcigpLHJlPXRoaXMueS5yZWRTcXIoKSxtZT1yZS5yZWRTcXIoKSxDZT10aGlzLngucmVkQWRkKHJlKS5yZWRTcXIoKS5yZWRJ''@;'; put 'put ''U3ViKHEpLnJlZElTdWIobWUpO0NlPUNlLnJlZElBZGQoQ2UpO3ZhciBJZT1xLnJlZEFkZChxKS5yZWRJQWRkKHEpLGtlPUllLnJlZFNxcigpLHFlPW1lLnJlZElBZGQobWUpO3FlPShxZT1xZS5yZWRJQWRkKHFlKSkucmVkSUFkZChxZSksUj1rZS5yZWRJU3ViKENlKS5yZWRJU3ViKENlKSx4''@;'; put 'put ''PUllLnJlZE11bChDZS5yZWRJU3ViKFIpKS5yZWRJU3ViKHFlKSxVPShVPXRoaXMueS5yZWRNdWwodGhpcy56KSkucmVkSUFkZChVKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoUix4LFUpfSxTLnByb3RvdHlwZS5fdGhyZWVEYmw9ZnVuY3Rpb24oKXt2YXIgUix4LFU7aWYodGhpcy56T25l''@;'; put 'put ''KXt2YXIgSD10aGlzLngucmVkU3FyKCksVj10aGlzLnkucmVkU3FyKCksTj1WLnJlZFNxcigpLHo9dGhpcy54LnJlZEFkZChWKS5yZWRTcXIoKS5yZWRJU3ViKEgpLnJlZElTdWIoTik7ej16LnJlZElBZGQoeik7dmFyIFk9SC5yZWRBZGQoSCkucmVkSUFkZChIKS5yZWRJQWRkKHRoaXMuY3Vy''@;'; put 'put ''dmUuYSksRj1ZLnJlZFNxcigpLnJlZElTdWIoeikucmVkSVN1Yih6KTtSPUY7dmFyIFc9Ti5yZWRJQWRkKE4pO1c9KFc9Vy5yZWRJQWRkKFcpKS5yZWRJQWRkKFcpLHg9WS5yZWRNdWwoei5yZWRJU3ViKEYpKS5yZWRJU3ViKFcpLFU9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIHE9''@;'; put 'put ''dGhpcy56LnJlZFNxcigpLHJlPXRoaXMueS5yZWRTcXIoKSxtZT10aGlzLngucmVkTXVsKHJlKSxDZT10aGlzLngucmVkU3ViKHEpLnJlZE11bCh0aGlzLngucmVkQWRkKHEpKTtDZT1DZS5yZWRBZGQoQ2UpLnJlZElBZGQoQ2UpO3ZhciBJZT1tZS5yZWRJQWRkKG1lKSxrZT0oSWU9SWUucmVk''@;'; put 'put ''SUFkZChJZSkpLnJlZEFkZChJZSk7Uj1DZS5yZWRTcXIoKS5yZWRJU3ViKGtlKSxVPXRoaXMueS5yZWRBZGQodGhpcy56KS5yZWRTcXIoKS5yZWRJU3ViKHJlKS5yZWRJU3ViKHEpO3ZhciBxZT1yZS5yZWRTcXIoKTtxZT0ocWU9KHFlPXFlLnJlZElBZGQocWUpKS5yZWRJQWRkKHFlKSkucmVk''@;'; put 'put ''SUFkZChxZSkseD1DZS5yZWRNdWwoSWUucmVkSVN1YihSKSkucmVkSVN1YihxZSl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KFIseCxVKX0sUy5wcm90b3R5cGUuX2RibD1mdW5jdGlvbigpe3ZhciBSPXRoaXMuY3VydmUuYSx4PXRoaXMueCxVPXRoaXMueSxIPXRoaXMueixWPUgucmVkU3Fy''@;'; put 'put ''KCkucmVkU3FyKCksTj14LnJlZFNxcigpLHo9VS5yZWRTcXIoKSxZPU4ucmVkQWRkKE4pLnJlZElBZGQoTikucmVkSUFkZChSLnJlZE11bChWKSksRj14LnJlZEFkZCh4KSxXPShGPUYucmVkSUFkZChGKSkucmVkTXVsKHopLHE9WS5yZWRTcXIoKS5yZWRJU3ViKFcucmVkQWRkKFcpKSxyZT1X''@;'; put 'put ''LnJlZElTdWIocSksbWU9ei5yZWRTcXIoKTttZT0obWU9KG1lPW1lLnJlZElBZGQobWUpKS5yZWRJQWRkKG1lKSkucmVkSUFkZChtZSk7dmFyIENlPVkucmVkTXVsKHJlKS5yZWRJU3ViKG1lKSxJZT1VLnJlZEFkZChVKS5yZWRNdWwoSCk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHEsQ2Us''@;'; put 'put ''SWUpfSxTLnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJsKCkuYWRkKHRoaXMpO3ZhciBSPXRoaXMueC5yZWRTcXIoKSx4PXRoaXMueS5yZWRTcXIoKSxVPXRoaXMuei5yZWRTcXIoKSxIPXgucmVkU3FyKCksVj1SLnJlZEFkZChS''@;'; put 'put ''KS5yZWRJQWRkKFIpLE49Vi5yZWRTcXIoKSx6PXRoaXMueC5yZWRBZGQoeCkucmVkU3FyKCkucmVkSVN1YihSKS5yZWRJU3ViKEgpLFk9KHo9KHo9KHo9ei5yZWRJQWRkKHopKS5yZWRBZGQoeikucmVkSUFkZCh6KSkucmVkSVN1YihOKSkucmVkU3FyKCksRj1ILnJlZElBZGQoSCk7Rj0oRj0o''@;'; put 'put ''Rj1GLnJlZElBZGQoRikpLnJlZElBZGQoRikpLnJlZElBZGQoRik7dmFyIFc9Vi5yZWRJQWRkKHopLnJlZFNxcigpLnJlZElTdWIoTikucmVkSVN1YihZKS5yZWRJU3ViKEYpLHE9eC5yZWRNdWwoVyk7cT0ocT1xLnJlZElBZGQocSkpLnJlZElBZGQocSk7dmFyIHJlPXRoaXMueC5yZWRNdWwo''@;'; put 'put ''WSkucmVkSVN1YihxKTtyZT0ocmU9cmUucmVkSUFkZChyZSkpLnJlZElBZGQocmUpO3ZhciBtZT10aGlzLnkucmVkTXVsKFcucmVkTXVsKEYucmVkSVN1YihXKSkucmVkSVN1Yih6LnJlZE11bChZKSkpO21lPShtZT0obWU9bWUucmVkSUFkZChtZSkpLnJlZElBZGQobWUpKS5yZWRJQWRkKG1l''@;'; put 'put ''KTt2YXIgQ2U9dGhpcy56LnJlZEFkZCh6KS5yZWRTcXIoKS5yZWRJU3ViKFUpLnJlZElTdWIoWSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHJlLG1lLENlKX0sUy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKFIseCl7cmV0dXJuIFI9bmV3IGMoUix4KSx0aGlzLmN1cnZlLl93bmFmTXVsKHRo''@;'; put 'put ''aXMsUil9LFMucHJvdG90eXBlLmVxPWZ1bmN0aW9uKFIpe2lmKCJhZmZpbmUiPT09Ui50eXBlKXJldHVybiB0aGlzLmVxKFIudG9KKCkpO2lmKHRoaXM9PT1SKXJldHVybiEwO3ZhciB4PXRoaXMuei5yZWRTcXIoKSxVPVIuei5yZWRTcXIoKTtpZigwIT09dGhpcy54LnJlZE11bChVKS5yZWRJ''@;'; put 'put ''U3ViKFIueC5yZWRNdWwoeCkpLmNtcG4oMCkpcmV0dXJuITE7dmFyIEg9eC5yZWRNdWwodGhpcy56KSxWPVUucmVkTXVsKFIueik7cmV0dXJuIDA9PT10aGlzLnkucmVkTXVsKFYpLnJlZElTdWIoUi55LnJlZE11bChIKSkuY21wbigwKX0sUy5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKFIp''@;'; put 'put ''e3ZhciB4PXRoaXMuei5yZWRTcXIoKSxVPVIudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh4KTtpZigwPT09dGhpcy54LmNtcChVKSlyZXR1cm4hMDtmb3IodmFyIEg9Ui5jbG9uZSgpLFY9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bCh4KTs7KXtpZihILmlhZGQodGhpcy5jdXJ2ZS5uKSxI''@;'; put 'put ''LmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKFUucmVkSUFkZChWKSwwPT09dGhpcy54LmNtcChVKSlyZXR1cm4hMH19LFMucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBKUG9pbnQgSW5maW5pdHk+IjoiPEVDIEpQb2lu''@;'; put 'put ''dCB4OiAiK3RoaXMueC50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnoudG9TdHJpbmcoMTYsMikrIj4ifSxTLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LDYwNDgwKGZlLGos''@;'; put 'put ''aCl7InVzZSBzdHJpY3QiO3ZhciBTLHk9aixjPWgoNzc5NTIpLHM9aCg4OTQpLHY9aCg0NzAxMSkuYXNzZXJ0O2Z1bmN0aW9uIEMoTCl7dGhpcy5jdXJ2ZT0ic2hvcnQiPT09TC50eXBlP25ldyBzLnNob3J0KEwpOiJlZHdhcmRzIj09PUwudHlwZT9uZXcgcy5lZHdhcmRzKEwpOm5ldyBzLm1v''@;'; put 'put ''bnQoTCksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMuaGFzaD1MLmhhc2gsdih0aGlzLmcudmFsaWRhdGUoKSwiSW52YWxpZCBjdXJ2ZSIpLHYodGhpcy5nLm11bCh0aGlzLm4pLmlzSW5maW5pdHkoKSwiSW52YWxpZCBjdXJ2ZSwgRypOICE9IE8iKX1mdW5j''@;'; put 'put ''dGlvbiB3KEwsUil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksTCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHg9bmV3IEMoUik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LEwse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZh''@;'; put 'put ''bHVlOnh9KSx4fX0pfXkuUHJlc2V0Q3VydmU9Qyx3KCJwMTkyIix7dHlwZToic2hvcnQiLHByaW1lOiJwMTkyIixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmMiLGI6IjY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFiIDcyMjQzMDQ5IGZlYjhkZWVjIGMxNDZiOWIxIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiA5OWRlZjgzNiAxNDZiYzliMSBiNGQyMjgzMSIsaGFzaDpjLnNoYTI1NixnUmVkOiExLGc6WyIxODhkYTgw''@;'; put 'put ''ZSBiMDMwOTBmNiA3Y2JmMjBlYiA0M2ExODgwMCBmNGZmMGFmZCA4MmZmMTAxMiIsIjA3MTkyYjk1IGZmYzhkYTc4IDYzMTAxMWVkIDZiMjRjZGQ1IDczZjk3N2ExIDFlNzk0ODExIl19KSx3KCJwMjI0Iix7dHlwZToic2hvcnQiLHByaW1lOiJwMjI0IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUiLGI6ImI0MDUwYTg1IDBjMDRiM2FiIGY1NDEzMjU2IDUwNDRiMGI3IGQ3YmZkOGJhIDI3MGIz''@;'; put 'put ''OTQzIDIzNTVmZmI0IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmMTZhMiBlMGI4ZjAzZSAxM2RkMjk0NSA1YzVjMmEzZCIsaGFzaDpjLnNoYTI1NixnUmVkOiExLGc6WyJiNzBlMGNiZCA2YmI0YmY3ZiAzMjEzOTBiOSA0YTAzYzFkMyA1NmMyMTEyMiAzNDMyODBkNiAxMTVj''@;'; put 'put ''MWQyMSIsImJkMzc2Mzg4IGI1ZjcyM2ZiIDRjMjJkZmU2IGNkNDM3NWEwIDVhMDc0NzY0IDQ0ZDU4MTk5IDg1MDA3ZTM0Il19KSx3KCJwMjU2Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI1YWM2MzVkOCBhYTNhOTNlNyBiM2ViYmQ1NSA3Njk4ODZiYyA2NTFkMDZiMCBjYzUzYjBmNiAzYmNlM2MzZSAyN2Qy''@;'; put 'put ''NjA0YiIsbjoiZmZmZmZmZmYgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgYmNlNmZhYWQgYTcxNzllODQgZjNiOWNhYzIgZmM2MzI1NTEiLGhhc2g6Yy5zaGEyNTYsZ1JlZDohMSxnOlsiNmIxN2QxZjIgZTEyYzQyNDcgZjhiY2U2ZTUgNjNhNDQwZjIgNzcwMzdkODEgMmRlYjMzYTAgZjRh''@;'; put 'put ''MTM5NDUgZDg5OGMyOTYiLCI0ZmUzNDJlMiBmZTFhN2Y5YiA4ZWU3ZWI0YSA3YzBmOWUxNiAyYmNlMzM1NyA2YjMxNWVjZSBjYmI2NDA2OCAzN2JmNTFmNSJdfSksdygicDM4NCIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAw''@;'; put 'put ''MCAwMDAwMDAwMCBmZmZmZmZmYyIsYjoiYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTkgMTgxZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgNTAxMzg3NWEgYzY1NjM5OGQgOGEyZWQxOWQgMmE4NWM4ZWQgZDNlYzJhZWYiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGM3NjM0ZDgxIGY0MzcyZGRmIDU4MWEwZGIyIDQ4YjBhNzdhIGVjZWMxOTZhIGNjYzUyOTczIixoYXNoOmMuc2hhMzg0LGdSZWQ6ITEsZzpbImFhODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5Zjc0''@;'; put 'put ''MWUwIDgyNTQyYTM4IDU1MDJmMjVkIGJmNTUyOTZjIDNhNTQ1ZTM4IDcyNzYwYWI3IiwiMzYxN2RlNGEgOTYyNjJjNmYgNWQ5ZTk4YmYgOTI5MmRjMjkgZjhmNDFkYmQgMjg5YTE0N2MgZTlkYTMxMTMgYjVmMGI4YzAgMGE2MGIxY2UgMWQ3ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWYiXX0pLHco''@;'; put 'put ''InA1MjEiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiIsYToiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmMiLGI6IjAwMDAwMDUxIDk1M2ViOTYxIDhlMWM5YTFmIDkyOWEyMWEwIGI2ODU0MGVlIGEyZGE3MjViIDk5YjMxNWYzIGI4YjQ4OTkxIDhlZjEwOWUxIDU2MTkzOTUxIGVjN2U5MzdiIDE2NTJjMGJkIDNiYjFiZjA3IDM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0IDZi''@;'; put 'put ''NTAzZjAwIixuOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYSA1MTg2ODc4MyBiZjJmOTY2YiA3ZmNjMDE0OCBmNzA5YTVkMCAzYmI1YzliOCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQwOSIs''@;'; put 'put ''aGFzaDpjLnNoYTUxMixnUmVkOiExLGc6WyIwMDAwMDBjNiA4NThlMDZiNyAwNDA0ZTljZCA5ZTNlY2I2NiAyMzk1YjQ0MiA5YzY0ODEzOSAwNTNmYjUyMSBmODI4YWY2MCA2YjRkM2RiYSBhMTRiNWU3NyBlZmU3NTkyOCBmZTFkYzEyNyBhMmZmYThkZSAzMzQ4YjNjMSA4NTZhNDI5YiBmOTdl''@;'; put 'put ''N2UzMSBjMmU1YmQ2NiIsIjAwMDAwMTE4IDM5Mjk2YTc4IDlhM2JjMDA0IDVjOGE1ZmI0IDJjN2QxYmQ5IDk4ZjU0NDQ5IDU3OWI0NDY4IDE3YWZiZDE3IDI3M2U2NjJjIDk3ZWU3Mjk5IDVlZjQyNjQwIGM1NTBiOTAxIDNmYWQwNzYxIDM1M2M3MDg2IGEyNzJjMjQwIDg4YmU5NDc2IDlmZDE2''@;'; put 'put ''NjUwIl19KSx3KCJjdXJ2ZTI1NTE5Iix7dHlwZToibW9udCIscHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIsYToiNzZkMDYiLGI6IjEiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQiLGhhc2g6Yy5zaGEyNTYsZ1JlZDohMSxnOlsiOSJdfSksdygiZWQyNTUxOSIse3R5cGU6ImVkd2FyZHMiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ii0xIixjOiIxIixkOiI1MjAzNmNlZTJiNmZmZTczIDhjYzc0MDc5Nzc3OWU4OTggMDA3MDBhNGQ0MTQxZDhhYiA3NWViNGRjYTEzNTk3OGEzIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNk''@;'; put 'put ''NiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOmMuc2hhMjU2LGdSZWQ6ITEsZzpbIjIxNjkzNmQzY2Q2ZTUzZmVjMGE0ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1YTdiMmM5NTYyZDYwOGYyNWQ1MWEiLCI2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2''@;'; put 'put ''NjY2NjY2NjY2NjU4Il19KTt0cnl7Uz1oKDc0MDExKX1jYXRjaHtTPXZvaWQgMH13KCJzZWNwMjU2azEiLHt0eXBlOiJzaG9ydCIscHJpbWU6ImsyNTYiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIixh''@;'; put 'put ''OiIwIixiOiI3IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFlZGNlNiBhZjQ4YTAzYiBiZmQyNWU4YyBkMDM2NDE0MSIsaDoiMSIsaGFzaDpjLnNoYTI1NixiZXRhOiI3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5''@;'; put 'put ''NmMyODcxOTUwMWVlIixsYW1iZGE6IjUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVhMTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzIiLGJhc2lzOlt7YToiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUiLGI6Ii1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJm''@;'; put 'put ''ZTRjMyJ9LHthOiIxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgiLGI6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1In1dLGdSZWQ6ITEsZzpbIjc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgiLCI0''@;'; put 'put ''ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4ZmZiMTBkNGI4IixTXX0pfSw1NzQ0NyhmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDI4NDkwKSxjPWgoMzI3MjMpLHM9aCg0NzAxMSksQT1oKDYwNDgwKSx2PWgoMTUwMzcpLEM9cy5hc3Nl''@;'; put 'put ''cnQsdz1oKDYxMjAwKSxTPWgoMjg1NDUpO2Z1bmN0aW9uIEwoUil7aWYoISh0aGlzIGluc3RhbmNlb2YgTCkpcmV0dXJuIG5ldyBMKFIpOyJzdHJpbmciPT10eXBlb2YgUiYmKEMoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEEsUiksIlVua25vd24gY3VydmUgIitSKSxS''@;'; put 'put ''PUFbUl0pLFIgaW5zdGFuY2VvZiBBLlByZXNldEN1cnZlJiYoUj17Y3VydmU6Un0pLHRoaXMuY3VydmU9Ui5jdXJ2ZS5jdXJ2ZSx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMubmg9dGhpcy5uLnVzaHJuKDEpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5nPVIuY3VydmUuZyx0aGlzLmcucHJl''@;'; put 'put ''Y29tcHV0ZShSLmN1cnZlLm4uYml0TGVuZ3RoKCkrMSksdGhpcy5oYXNoPVIuaGFzaHx8Ui5jdXJ2ZS5oYXNofWZlLmV4cG9ydHM9TCxMLnByb3RvdHlwZS5rZXlQYWlyPWZ1bmN0aW9uKHgpe3JldHVybiBuZXcgdyh0aGlzLHgpfSxMLnByb3RvdHlwZS5rZXlGcm9tUHJpdmF0ZT1mdW5jdGlv''@;'; put 'put ''bih4LFUpe3JldHVybiB3LmZyb21Qcml2YXRlKHRoaXMseCxVKX0sTC5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbih4LFUpe3JldHVybiB3LmZyb21QdWJsaWModGhpcyx4LFUpfSxMLnByb3RvdHlwZS5nZW5LZXlQYWlyPWZ1bmN0aW9uKHgpe3h8fCh4PXt9KTtmb3IodmFyIFU9''@;'; put 'put ''bmV3IGMoe2hhc2g6dGhpcy5oYXNoLHBlcnM6eC5wZXJzLHBlcnNFbmM6eC5wZXJzRW5jfHwidXRmOCIsZW50cm9weTp4LmVudHJvcHl8fHYodGhpcy5oYXNoLmhtYWNTdHJlbmd0aCksZW50cm9weUVuYzp4LmVudHJvcHkmJnguZW50cm9weUVuY3x8InV0ZjgiLG5vbmNlOnRoaXMubi50b0Fy''@;'; put 'put ''cmF5KCl9KSxIPXRoaXMubi5ieXRlTGVuZ3RoKCksVj10aGlzLm4uc3ViKG5ldyB5KDIpKTs7KXt2YXIgTj1uZXcgeShVLmdlbmVyYXRlKEgpKTtpZighKE4uY21wKFYpPjApKXJldHVybiBOLmlhZGRuKDEpLHRoaXMua2V5RnJvbVByaXZhdGUoTil9fSxMLnByb3RvdHlwZS5fdHJ1bmNhdGVU''@;'; put 'put ''b049ZnVuY3Rpb24oeCxVLEgpe3ZhciBWO2lmKHkuaXNCTih4KXx8Im51bWJlciI9PXR5cGVvZiB4KVY9KHg9bmV3IHkoeCwxNikpLmJ5dGVMZW5ndGgoKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgeClWPXgubGVuZ3RoLHg9bmV3IHkoeCwxNik7ZWxzZXt2YXIgTj14LnRvU3RyaW5nKCk7''@;'; put 'put ''Vj1OLmxlbmd0aCsxPj4+MSx4PW5ldyB5KE4sMTYpfSJudW1iZXIiIT10eXBlb2YgSCYmKEg9OCpWKTt2YXIgej1ILXRoaXMubi5iaXRMZW5ndGgoKTtyZXR1cm4gej4wJiYoeD14LnVzaHJuKHopKSwhVSYmeC5jbXAodGhpcy5uKT49MD94LnN1Yih0aGlzLm4pOnh9LEwucHJvdG90eXBlLnNp''@;'; put 'put ''Z249ZnVuY3Rpb24oeCxVLEgsVil7aWYoIm9iamVjdCI9PXR5cGVvZiBIJiYoVj1ILEg9bnVsbCksVnx8KFY9e30pLCJzdHJpbmciIT10eXBlb2YgeCYmIm51bWJlciIhPXR5cGVvZiB4JiYheS5pc0JOKHgpKXtDKCJvYmplY3QiPT10eXBlb2YgeCYmeCYmIm51bWJlciI9PXR5cGVvZiB4Lmxl''@;'; put 'put ''bmd0aCwiRXhwZWN0ZWQgbWVzc2FnZSB0byBiZSBhbiBhcnJheS1saWtlLCBhIGhleCBzdHJpbmcsIG9yIGEgQk4gaW5zdGFuY2UiKSxDKHgubGVuZ3RoPj4+MD09PXgubGVuZ3RoKTtmb3IodmFyIE49MDtOPHgubGVuZ3RoO04rKylDKCgyNTUmeFtOXSk9PT14W05dKX1VPXRoaXMua2V5RnJv''@;'; put 'put ''bVByaXZhdGUoVSxIKSx4PXRoaXMuX3RydW5jYXRlVG9OKHgsITEsVi5tc2dCaXRMZW5ndGgpLEMoIXguaXNOZWcoKSwiQ2FuIG5vdCBzaWduIGEgbmVnYXRpdmUgbWVzc2FnZSIpO3ZhciB6PXRoaXMubi5ieXRlTGVuZ3RoKCksWT1VLmdldFByaXZhdGUoKS50b0FycmF5KCJiZSIseiksRj14''@;'; put 'put ''LnRvQXJyYXkoImJlIix6KTtDKG5ldyB5KEYpLmVxKHgpLCJDYW4gbm90IHNpZ24gbWVzc2FnZSIpO2Zvcih2YXIgVz1uZXcgYyh7aGFzaDp0aGlzLmhhc2gsZW50cm9weTpZLG5vbmNlOkYscGVyczpWLnBlcnMscGVyc0VuYzpWLnBlcnNFbmN8fCJ1dGY4In0pLHE9dGhpcy5uLnN1YihuZXcg''@;'; put 'put ''eSgxKSkscmU9MDs7cmUrKyl7dmFyIG1lPVYuaz9WLmsocmUpOm5ldyB5KFcuZ2VuZXJhdGUodGhpcy5uLmJ5dGVMZW5ndGgoKSkpO2lmKCEoKG1lPXRoaXMuX3RydW5jYXRlVG9OKG1lLCEwKSkuY21wbigxKTw9MHx8bWUuY21wKHEpPj0wKSl7dmFyIENlPXRoaXMuZy5tdWwobWUpO2lmKCFD''@;'; put 'put ''ZS5pc0luZmluaXR5KCkpe3ZhciBJZT1DZS5nZXRYKCksa2U9SWUudW1vZCh0aGlzLm4pO2lmKDAhPT1rZS5jbXBuKDApKXt2YXIgcWU9bWUuaW52bSh0aGlzLm4pLm11bChrZS5tdWwoVS5nZXRQcml2YXRlKCkpLmlhZGQoeCkpO2lmKDAhPT0ocWU9cWUudW1vZCh0aGlzLm4pKS5jbXBuKDAp''@;'; put 'put ''KXt2YXIgWD0oQ2UuZ2V0WSgpLmlzT2RkKCk/MTowKXwoMCE9PUllLmNtcChrZSk/MjowKTtyZXR1cm4gVi5jYW5vbmljYWwmJnFlLmNtcCh0aGlzLm5oKT4wJiYocWU9dGhpcy5uLnN1YihxZSksWF49MSksbmV3IFMoe3I6a2UsczpxZSxyZWNvdmVyeVBhcmFtOlh9KX19fX19fSxMLnByb3Rv''@;'; put 'put ''dHlwZS52ZXJpZnk9ZnVuY3Rpb24oeCxVLEgsVixOKXtOfHwoTj17fSkseD10aGlzLl90cnVuY2F0ZVRvTih4LCExLE4ubXNnQml0TGVuZ3RoKSxIPXRoaXMua2V5RnJvbVB1YmxpYyhILFYpO3ZhciB6PShVPW5ldyBTKFUsImhleCIpKS5yLFk9VS5zO2lmKHouY21wbigxKTwwfHx6LmNtcCh0''@;'; put 'put ''aGlzLm4pPj0wfHxZLmNtcG4oMSk8MHx8WS5jbXAodGhpcy5uKT49MClyZXR1cm4hMTt2YXIgcmUsRj1ZLmludm0odGhpcy5uKSxXPUYubXVsKHgpLnVtb2QodGhpcy5uKSxxPUYubXVsKHopLnVtb2QodGhpcy5uKTtyZXR1cm4gdGhpcy5jdXJ2ZS5fbWF4d2VsbFRyaWNrPyEocmU9dGhpcy5n''@;'; put 'put ''LmptdWxBZGQoVyxILmdldFB1YmxpYygpLHEpKS5pc0luZmluaXR5KCkmJnJlLmVxWFRvUCh6KTohKHJlPXRoaXMuZy5tdWxBZGQoVyxILmdldFB1YmxpYygpLHEpKS5pc0luZmluaXR5KCkmJjA9PT1yZS5nZXRYKCkudW1vZCh0aGlzLm4pLmNtcCh6KX0sTC5wcm90b3R5cGUucmVjb3ZlclB1''@;'; put 'put ''YktleT1mdW5jdGlvbihSLHgsVSxIKXtDKCgzJlUpPT09VSwiVGhlIHJlY292ZXJ5IHBhcmFtIGlzIG1vcmUgdGhhbiB0d28gYml0cyIpLHg9bmV3IFMoeCxIKTt2YXIgVj10aGlzLm4sTj1uZXcgeShSKSx6PXgucixZPXgucyxGPTEmVSxXPVU+PjE7aWYoei5jbXAodGhpcy5jdXJ2ZS5wLnVt''@;'; put 'put ''b2QodGhpcy5jdXJ2ZS5uKSk+PTAmJlcpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGUiKTt6PXRoaXMuY3VydmUucG9pbnRGcm9tWChXP3ouYWRkKHRoaXMuY3VydmUubik6eixGKTt2YXIgcT14LnIuaW52bShWKSxyZT1WLnN1YihOKS5tdWwo''@;'; put 'put ''cSkudW1vZChWKSxtZT1ZLm11bChxKS51bW9kKFYpO3JldHVybiB0aGlzLmcubXVsQWRkKHJlLHosbWUpfSxMLnByb3RvdHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtPWZ1bmN0aW9uKFIseCxVLEgpe2lmKG51bGwhPT0oeD1uZXcgUyh4LEgpKS5yZWNvdmVyeVBhcmFtKXJldHVybiB4LnJlY292''@;'; put 'put ''ZXJ5UGFyYW07Zm9yKHZhciBWPTA7Vjw0O1YrKyl7dmFyIE47dHJ5e049dGhpcy5yZWNvdmVyUHViS2V5KFIseCxWKX1jYXRjaHtjb250aW51ZX1pZihOLmVxKFUpKXJldHVybiBWfXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgdmFsaWQgcmVjb3ZlcnkgZmFjdG9yIil9fSw2MTIw''@;'; put 'put ''MChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDI4NDkwKSxzPWgoNDcwMTEpLmFzc2VydDtmdW5jdGlvbiBBKHYsQyl7dGhpcy5lYz12LHRoaXMucHJpdj1udWxsLHRoaXMucHViPW51bGwsQy5wcml2JiZ0aGlzLl9pbXBvcnRQcml2YXRlKEMucHJpdixDLnByaXZFbmMpLEMucHViJiZ0''@;'; put 'put ''aGlzLl9pbXBvcnRQdWJsaWMoQy5wdWIsQy5wdWJFbmMpfWZlLmV4cG9ydHM9QSxBLmZyb21QdWJsaWM9ZnVuY3Rpb24oQyx3LFMpe3JldHVybiB3IGluc3RhbmNlb2YgQT93Om5ldyBBKEMse3B1Yjp3LHB1YkVuYzpTfSl9LEEuZnJvbVByaXZhdGU9ZnVuY3Rpb24oQyx3LFMpe3JldHVybiB3''@;'; put 'put ''IGluc3RhbmNlb2YgQT93Om5ldyBBKEMse3ByaXY6dyxwcml2RW5jOlN9KX0sQS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLmdldFB1YmxpYygpO3JldHVybiBDLmlzSW5maW5pdHkoKT97cmVzdWx0OiExLHJlYXNvbjoiSW52YWxpZCBwdWJsaWMga2V5In06Qy52''@;'; put 'put ''YWxpZGF0ZSgpP0MubXVsKHRoaXMuZWMuY3VydmUubikuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITAscmVhc29uOm51bGx9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5ICogTiAhPSBPIn06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgaXMgbm90IGEgcG9pbnQifX0sQS5wcm90''@;'; put 'put ''b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKEMsdyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBDJiYodz1DLEM9bnVsbCksdGhpcy5wdWJ8fCh0aGlzLnB1Yj10aGlzLmVjLmcubXVsKHRoaXMucHJpdikpLHc/dGhpcy5wdWIuZW5jb2RlKHcsQyk6dGhpcy5wdWJ9LEEucHJvdG90eXBlLmdldFBy''@;'; put 'put ''aXZhdGU9ZnVuY3Rpb24oQyl7cmV0dXJuImhleCI9PT1DP3RoaXMucHJpdi50b1N0cmluZygxNiwyKTp0aGlzLnByaXZ9LEEucHJvdG90eXBlLl9pbXBvcnRQcml2YXRlPWZ1bmN0aW9uKEMsdyl7dGhpcy5wcml2PW5ldyB5KEMsd3x8MTYpLHRoaXMucHJpdj10aGlzLnByaXYudW1vZCh0aGlz''@;'; put 'put ''LmVjLmN1cnZlLm4pfSxBLnByb3RvdHlwZS5faW1wb3J0UHVibGljPWZ1bmN0aW9uKEMsdyl7aWYoQy54fHxDLnkpcmV0dXJuIm1vbnQiPT09dGhpcy5lYy5jdXJ2ZS50eXBlP3MoQy54LCJOZWVkIHggY29vcmRpbmF0ZSIpOigic2hvcnQiPT09dGhpcy5lYy5jdXJ2ZS50eXBlfHwiZWR3YXJk''@;'; put 'put ''cyI9PT10aGlzLmVjLmN1cnZlLnR5cGUpJiZzKEMueCYmQy55LCJOZWVkIGJvdGggeCBhbmQgeSBjb29yZGluYXRlIiksdm9pZCh0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLnBvaW50KEMueCxDLnkpKTt0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLmRlY29kZVBvaW50KEMsdyl9LEEucHJvdG90eXBl''@;'; put 'put ''LmRlcml2ZT1mdW5jdGlvbihDKXtyZXR1cm4gQy52YWxpZGF0ZSgpfHxzKEMudmFsaWRhdGUoKSwicHVibGljIHBvaW50IG5vdCB2YWxpZGF0ZWQiKSxDLm11bCh0aGlzLnByaXYpLmdldFgoKX0sQS5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihDLHcsUyl7cmV0dXJuIHRoaXMuZWMuc2lnbihD''@;'; put 'put ''LHRoaXMsdyxTKX0sQS5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKEMsdyxTKXtyZXR1cm4gdGhpcy5lYy52ZXJpZnkoQyx3LHRoaXMsdm9pZCAwLFMpfSxBLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIjxLZXkgcHJpdjogIisodGhpcy5wcml2JiZ0aGlzLnByaXYudG9T''@;'; put 'put ''dHJpbmcoMTYsMikpKyIgcHViOiAiKyh0aGlzLnB1YiYmdGhpcy5wdWIuaW5zcGVjdCgpKSsiID4ifX0sMjg1NDUoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCgyODQ5MCksYz1oKDQ3MDExKSxzPWMuYXNzZXJ0O2Z1bmN0aW9uIEEoTCxSKXtpZihMIGluc3RhbmNlb2YgQSlyZXR1cm4g''@;'; put 'put ''TDt0aGlzLl9pbXBvcnRERVIoTCxSKXx8KHMoTC5yJiZMLnMsIlNpZ25hdHVyZSB3aXRob3V0IHIgb3IgcyIpLHRoaXMucj1uZXcgeShMLnIsMTYpLHRoaXMucz1uZXcgeShMLnMsMTYpLHRoaXMucmVjb3ZlcnlQYXJhbT12b2lkIDA9PT1MLnJlY292ZXJ5UGFyYW0/bnVsbDpMLnJlY292ZXJ5''@;'; put 'put ''UGFyYW0pfWZ1bmN0aW9uIHYoKXt0aGlzLnBsYWNlPTB9ZnVuY3Rpb24gQyhMLFIpe3ZhciB4PUxbUi5wbGFjZSsrXTtpZighKDEyOCZ4KSlyZXR1cm4geDt2YXIgVT0xNSZ4O2lmKDA9PT1VfHxVPjR8fDA9PT1MW1IucGxhY2VdKXJldHVybiExO2Zvcih2YXIgSD0wLFY9MCxOPVIucGxhY2U7''@;'; put 'put ''VjxVO1YrKyxOKyspSDw8PTgsSHw9TFtOXSxIPj4+PTA7cmV0dXJuIShIPD0xMjcpJiYoUi5wbGFjZT1OLEgpfWZ1bmN0aW9uIHcoTCl7Zm9yKHZhciBSPTAseD1MLmxlbmd0aC0xOyFMW1JdJiYhKDEyOCZMW1IrMV0pJiZSPHg7KVIrKztyZXR1cm4gMD09PVI/TDpMLnNsaWNlKFIpfWZ1bmN0''@;'; put 'put ''aW9uIFMoTCxSKXtpZihSPDEyOClMLnB1c2goUik7ZWxzZXt2YXIgeD0xKyhNYXRoLmxvZyhSKS9NYXRoLkxOMj4+PjMpO2ZvcihMLnB1c2goMTI4fHgpOy0teDspTC5wdXNoKFI+Pj4oeDw8MykmMjU1KTtMLnB1c2goUil9fWZlLmV4cG9ydHM9QSxBLnByb3RvdHlwZS5faW1wb3J0REVSPWZ1''@;'; put 'put ''bmN0aW9uKFIseCl7Uj1jLnRvQXJyYXkoUix4KTt2YXIgVT1uZXcgdjtpZig0OCE9PVJbVS5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgSD1DKFIsVSk7aWYoITE9PT1IfHxIK1UucGxhY2UhPT1SLmxlbmd0aHx8MiE9PVJbVS5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgVj1DKFIsVSk7aWYoITE9PT1W''@;'; put 'put ''fHwxMjgmUltVLnBsYWNlXSlyZXR1cm4hMTt2YXIgTj1SLnNsaWNlKFUucGxhY2UsVitVLnBsYWNlKTtpZihVLnBsYWNlKz1WLDIhPT1SW1UucGxhY2UrK10pcmV0dXJuITE7dmFyIHo9QyhSLFUpO2lmKCExPT09enx8Ui5sZW5ndGghPT16K1UucGxhY2V8fDEyOCZSW1UucGxhY2VdKXJldHVy''@;'; put 'put ''biExO3ZhciBZPVIuc2xpY2UoVS5wbGFjZSx6K1UucGxhY2UpO2lmKDA9PT1OWzBdKXtpZighKDEyOCZOWzFdKSlyZXR1cm4hMTtOPU4uc2xpY2UoMSl9aWYoMD09PVlbMF0pe2lmKCEoMTI4JllbMV0pKXJldHVybiExO1k9WS5zbGljZSgxKX1yZXR1cm4gdGhpcy5yPW5ldyB5KE4pLHRoaXMu''@;'; put 'put ''cz1uZXcgeShZKSx0aGlzLnJlY292ZXJ5UGFyYW09bnVsbCwhMH0sQS5wcm90b3R5cGUudG9ERVI9ZnVuY3Rpb24oUil7dmFyIHg9dGhpcy5yLnRvQXJyYXkoKSxVPXRoaXMucy50b0FycmF5KCk7Zm9yKDEyOCZ4WzBdJiYoeD1bMF0uY29uY2F0KHgpKSwxMjgmVVswXSYmKFU9WzBdLmNvbmNh''@;'; put 'put ''dChVKSkseD13KHgpLFU9dyhVKTshKFVbMF18fDEyOCZVWzFdKTspVT1VLnNsaWNlKDEpO3ZhciBIPVsyXTtTKEgseC5sZW5ndGgpLChIPUguY29uY2F0KHgpKS5wdXNoKDIpLFMoSCxVLmxlbmd0aCk7dmFyIFY9SC5jb25jYXQoVSksTj1bNDhdO3JldHVybiBTKE4sVi5sZW5ndGgpLE49Ti5j''@;'; put 'put ''b25jYXQoViksYy5lbmNvZGUoTixSKX19LDg2NTAoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg3Nzk1MiksYz1oKDYwNDgwKSxzPWgoNDcwMTEpLEE9cy5hc3NlcnQsdj1zLnBhcnNlQnl0ZXMsQz1oKDQ2NjYxKSx3PWgoOTAyMjApO2Z1bmN0aW9uIFMoTCl7aWYoQSgiZWQyNTUxOSI9''@;'; put 'put ''PT1MLCJvbmx5IHRlc3RlZCB3aXRoIGVkMjU1MTkgc28gZmFyIiksISh0aGlzIGluc3RhbmNlb2YgUykpcmV0dXJuIG5ldyBTKEwpO3RoaXMuY3VydmU9TD1jW0xdLmN1cnZlLHRoaXMuZz1MLmcsdGhpcy5nLnByZWNvbXB1dGUoTC5uLmJpdExlbmd0aCgpKzEpLHRoaXMucG9pbnRDbGFzcz1M''@;'; put 'put ''LnBvaW50KCkuY29uc3RydWN0b3IsdGhpcy5lbmNvZGluZ0xlbmd0aD1NYXRoLmNlaWwoTC5uLmJpdExlbmd0aCgpLzgpLHRoaXMuaGFzaD15LnNoYTUxMn1mZS5leHBvcnRzPVMsUy5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihSLHgpe1I9dihSKTt2YXIgVT10aGlzLmtleUZyb21TZWNyZXQo''@;'; put 'put ''eCksSD10aGlzLmhhc2hJbnQoVS5tZXNzYWdlUHJlZml4KCksUiksVj10aGlzLmcubXVsKEgpLE49dGhpcy5lbmNvZGVQb2ludChWKSx6PXRoaXMuaGFzaEludChOLFUucHViQnl0ZXMoKSxSKS5tdWwoVS5wcml2KCkpLFk9SC5hZGQoeikudW1vZCh0aGlzLmN1cnZlLm4pO3JldHVybiB0aGlz''@;'; put 'put ''Lm1ha2VTaWduYXR1cmUoe1I6VixTOlksUmVuY29kZWQ6Tn0pfSxTLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oUix4LFUpe2lmKFI9dihSKSwoeD10aGlzLm1ha2VTaWduYXR1cmUoeCkpLlMoKS5ndGUoeC5lZGRzYS5jdXJ2ZS5uKXx8eC5TKCkuaXNOZWcoKSlyZXR1cm4hMTt2YXIgSD10''@;'; put 'put ''aGlzLmtleUZyb21QdWJsaWMoVSksVj10aGlzLmhhc2hJbnQoeC5SZW5jb2RlZCgpLEgucHViQnl0ZXMoKSxSKSxOPXRoaXMuZy5tdWwoeC5TKCkpO3JldHVybiB4LlIoKS5hZGQoSC5wdWIoKS5tdWwoVikpLmVxKE4pfSxTLnByb3RvdHlwZS5oYXNoSW50PWZ1bmN0aW9uKCl7Zm9yKHZhciBS''@;'; put 'put ''PXRoaXMuaGFzaCgpLHg9MDt4PGFyZ3VtZW50cy5sZW5ndGg7eCsrKVIudXBkYXRlKGFyZ3VtZW50c1t4XSk7cmV0dXJuIHMuaW50RnJvbUxFKFIuZGlnZXN0KCkpLnVtb2QodGhpcy5jdXJ2ZS5uKX0sUy5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihSKXtyZXR1cm4gQy5mcm9t''@;'; put 'put ''UHVibGljKHRoaXMsUil9LFMucHJvdG90eXBlLmtleUZyb21TZWNyZXQ9ZnVuY3Rpb24oUil7cmV0dXJuIEMuZnJvbVNlY3JldCh0aGlzLFIpfSxTLnByb3RvdHlwZS5tYWtlU2lnbmF0dXJlPWZ1bmN0aW9uKFIpe3JldHVybiBSIGluc3RhbmNlb2Ygdz9SOm5ldyB3KHRoaXMsUil9LFMucHJv''@;'; put 'put ''dG90eXBlLmVuY29kZVBvaW50PWZ1bmN0aW9uKFIpe3ZhciB4PVIuZ2V0WSgpLnRvQXJyYXkoImxlIix0aGlzLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4geFt0aGlzLmVuY29kaW5nTGVuZ3RoLTFdfD1SLmdldFgoKS5pc09kZCgpPzEyODowLHh9LFMucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1''@;'; put 'put ''bmN0aW9uKFIpe3ZhciB4PShSPXMucGFyc2VCeXRlcyhSKSkubGVuZ3RoLTEsVT1SLnNsaWNlKDAseCkuY29uY2F0KC0xMjkmUlt4XSksSD0hISgxMjgmUlt4XSksVj1zLmludEZyb21MRShVKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludEZyb21ZKFYsSCl9LFMucHJvdG90eXBlLmVuY29kZUlu''@;'; put 'put ''dD1mdW5jdGlvbihSKXtyZXR1cm4gUi50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCl9LFMucHJvdG90eXBlLmRlY29kZUludD1mdW5jdGlvbihSKXtyZXR1cm4gcy5pbnRGcm9tTEUoUil9LFMucHJvdG90eXBlLmlzUG9pbnQ9ZnVuY3Rpb24oUil7cmV0dXJuIFIgaW5zdGFuY2Vv''@;'; put 'put ''ZiB0aGlzLnBvaW50Q2xhc3N9fSw0NjY2MShmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDQ3MDExKSxjPXkuYXNzZXJ0LHM9eS5wYXJzZUJ5dGVzLEE9eS5jYWNoZWRQcm9wZXJ0eTtmdW5jdGlvbiB2KEMsdyl7dGhpcy5lZGRzYT1DLHRoaXMuX3NlY3JldD1zKHcuc2VjcmV0KSxDLmlz''@;'; put 'put ''UG9pbnQody5wdWIpP3RoaXMuX3B1Yj13LnB1Yjp0aGlzLl9wdWJCeXRlcz1zKHcucHViKX12LmZyb21QdWJsaWM9ZnVuY3Rpb24odyxTKXtyZXR1cm4gUyBpbnN0YW5jZW9mIHY/UzpuZXcgdih3LHtwdWI6U30pfSx2LmZyb21TZWNyZXQ9ZnVuY3Rpb24odyxTKXtyZXR1cm4gUyBpbnN0YW5j''@;'; put 'put ''ZW9mIHY/UzpuZXcgdih3LHtzZWNyZXQ6U30pfSx2LnByb3RvdHlwZS5zZWNyZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VjcmV0fSxBKHYsInB1YkJ5dGVzIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMucHViKCkpfSksQSh2LCJwdWIiLGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMuX3B1YkJ5dGVzP3RoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5fcHViQnl0ZXMpOnRoaXMuZWRkc2EuZy5tdWwodGhpcy5wcml2KCkpfSksQSh2LCJwcml2Qnl0ZXMiLGZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5lZGRzYSxTPXRoaXMuaGFzaCgpLEw9dy5lbmNv''@;'; put 'put ''ZGluZ0xlbmd0aC0xLFI9Uy5zbGljZSgwLHcuZW5jb2RpbmdMZW5ndGgpO3JldHVybiBSWzBdJj0yNDgsUltMXSY9MTI3LFJbTF18PTY0LFJ9KSxBKHYsInByaXYiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMucHJpdkJ5dGVzKCkpfSksQSh2LCJoYXNoIixm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCl9KSxBKHYsIm1lc3NhZ2VQcmVmaXgiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzaCgpLnNsaWNlKHRoaXMuZWRkc2EuZW5jb2RpbmdMZW5ndGgpfSksdi5wcm90b3R5cGUu''@;'; put 'put ''c2lnbj1mdW5jdGlvbih3KXtyZXR1cm4gYyh0aGlzLl9zZWNyZXQsIktleVBhaXIgY2FuIG9ubHkgdmVyaWZ5IiksdGhpcy5lZGRzYS5zaWduKHcsdGhpcyl9LHYucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbih3LFMpe3JldHVybiB0aGlzLmVkZHNhLnZlcmlmeSh3LFMsdGhpcyl9LHYucHJv''@;'; put 'put ''dG90eXBlLmdldFNlY3JldD1mdW5jdGlvbih3KXtyZXR1cm4gYyh0aGlzLl9zZWNyZXQsIktleVBhaXIgaXMgcHVibGljIG9ubHkiKSx5LmVuY29kZSh0aGlzLnNlY3JldCgpLHcpfSx2LnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24odyl7cmV0dXJuIHkuZW5jb2RlKHRoaXMucHViQnl0''@;'; put 'put ''ZXMoKSx3KX0sZmUuZXhwb3J0cz12fSw5MDIyMChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDI4NDkwKSxjPWgoNDcwMTEpLHM9Yy5hc3NlcnQsQT1jLmNhY2hlZFByb3BlcnR5LHY9Yy5wYXJzZUJ5dGVzO2Z1bmN0aW9uIEModyxTKXt0aGlzLmVkZHNhPXcsIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBTJiYoUz12KFMpKSxBcnJheS5pc0FycmF5KFMpJiYocyhTLmxlbmd0aD09PTIqdy5lbmNvZGluZ0xlbmd0aCwiU2lnbmF0dXJlIGhhcyBpbnZhbGlkIHNpemUiKSxTPXtSOlMuc2xpY2UoMCx3LmVuY29kaW5nTGVuZ3RoKSxTOlMuc2xpY2Uody5lbmNvZGluZ0xlbmd0aCl9KSxzKFMuUiYm''@;'; put 'put ''Uy5TLCJTaWduYXR1cmUgd2l0aG91dCBSIG9yIFMiKSx3LmlzUG9pbnQoUy5SKSYmKHRoaXMuX1I9Uy5SKSxTLlMgaW5zdGFuY2VvZiB5JiYodGhpcy5fUz1TLlMpLHRoaXMuX1JlbmNvZGVkPUFycmF5LmlzQXJyYXkoUy5SKT9TLlI6Uy5SZW5jb2RlZCx0aGlzLl9TZW5jb2RlZD1BcnJheS5p''@;'; put 'put ''c0FycmF5KFMuUyk/Uy5TOlMuU2VuY29kZWR9QShDLCJTIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLlNlbmNvZGVkKCkpfSksQShDLCJSIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuUmVuY29kZWQoKSl9KSxBKEMs''@;'; put 'put ''IlJlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKX0pLEEoQywiU2VuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlSW50KHRoaXMuUygpKX0pLEMucHJvdG90eXBlLnRvQnl0ZXM9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5SZW5jb2RlZCgpLmNvbmNhdCh0aGlzLlNlbmNvZGVkKCkpfSxDLnByb3RvdHlwZS50b0hleD1mdW5jdGlvbigpe3JldHVybiBjLmVuY29kZSh0aGlzLnRvQnl0ZXMoKSwiaGV4IikudG9VcHBlckNhc2UoKX0sZmUuZXhwb3J0cz1DfSw3NDAxMShmZSl7ZmUuZXhwb3J0cz17ZG91''@;'; put 'put ''Ymxlczp7c3RlcDo0LHBvaW50czpbWyJlNjBmY2U5M2I1OWU5ZWM1MzAxMWFhYmMyMWMyM2U5N2IyYTMxMzY5Yjg3YTVhZTljNDRlZTg5ZTJhNmRlYzBhIiwiZjdlMzUwNzM5OWU1OTU5MjlkYjk5ZjM0ZjU3OTM3MTAxMjk2ODkxZTQ0ZDIzZjBiZTFmMzJjY2U2OTYxNjgyMSJdLFsiODI4MjI2''@;'; put 'put ''MzIxMmM2MDlkOWVhMmE2ZTNlMTcyZGUyMzhkOGMzOWNhYmQ1YWMxY2ExMDY0NmUyM2ZkNWY1MTUwOCIsIjExZjhhODA5ODU1N2RmZTQ1ZTgyNTZlODMwYjYwYWNlNjJkNjEzYWMyZjdiMTdiZWQzMWI2ZWFmZjZlMjZjYWYiXSxbIjE3NWUxNTlmNzI4Yjg2NWE3MmY5OWNjNmM2ZmM4NDZkZTBi''@;'; put 'put ''OTM4MzNmZDIyMjJlZDczZmNlNWI1NTFlNWI3MzkiLCJkMzUwNmUwZDllM2M3OWViYTRlZjk3YTUxZmY3MWY1ZWFjYjU5NTVhZGQyNDM0NWM2ZWZhNmZmZWU5ZmVkNjk1Il0sWyIzNjNkOTBkNDQ3YjAwYzljOTljZWFjMDViNjI2MmVlMDUzNDQxYzdlNTU1NTJmZmU1MjZiYWQ4ZjgzZmY0NjQw''@;'; put 'put ''IiwiNGUyNzNhZGZjNzMyMjIxOTUzYjQ0NTM5N2YzMzYzMTQ1YjlhODkwMDgxOTllY2I2MjAwM2M3ZjNiZWU5ZGU5Il0sWyI4YjRiNWYxNjVkZjNjMmJlOGM2MjQ0YjViNzQ1NjM4ODQzZTRhNzgxYTE1YmNkMWI2OWY3OWE1NWRmZmRmODBjIiwiNGFhZDBhNmY2OGQzMDhiNGIzZmJkNzgxM2Fi''@;'; put 'put ''MGRhMDRmOWUzMzY1NDYxNjJlZTU2YjNlZmYwYzY1ZmQ0ZmQzNiJdLFsiNzIzY2JhYTZlNWRiOTk2ZDZiZjc3MWMwMGJkNTQ4YzdiNzAwZGJmZmE2YzBlNzdiY2I2MTE1OTI1MjMyZmNkYSIsIjk2ZTg2N2I1NTk1Y2M0OThhOTIxMTM3NDg4ODI0ZDZlMjY2MGEwNjUzNzc5NDk0ODAxZGMwNjlk''@;'; put 'put ''OWViMzlmNWYiXSxbImVlYmZhNGQ0OTNiZWJmOThiYTVmZWVjODEyYzJkM2I1MDk0Nzk2MTIzN2E5MTk4MzlhNTMzZWNhMGU3ZGQ3ZmEiLCI1ZDlhOGNhMzk3MGVmMGYyNjllZTdlZGFmMTc4MDg5ZDlhZTRjZGMzYTcxMWY3MTJkZGZkNGZkYWUxZGU4OTk5Il0sWyIxMDBmNDRkYTY5NmU3MTY3''@;'; put 'put ''Mjc5MWQwYTA5YjdiZGU0NTlmMTIxNWEyOWIzYzAzYmZlZmQ3ODM1YjM5YTQ4ZGIwIiwiY2RkOWUxMzE5MmEwMGI3NzJlYzhmMzMwMGMwOTA2NjZiN2ZmNGExOGZmNTE5NWFjMGZiZDVjZDYyYmM2NWEwOSJdLFsiZTEwMzFiZTI2MmM3ZWQxYjFkYzkyMjdhNGEwNGMwMTdhNzdmOGQ0NDY0ZjNi''@;'; put 'put ''Mzg1MmM4YWNkZTZlNTM0ZmQyZCIsIjlkNzA2MTkyODk0MDQwNWU2YmI2YTQxNzY1OTc1MzVhZjI5MmRkNDE5ZTFjZWQ3OWE0NGYxOGYyOTQ1NmEwMGQiXSxbImZlZWE2Y2FlNDZkNTViNTMwYWMyODM5ZjE0M2JkN2VjNWNmOGIyNjZhNDFkNmFmNTJkNWU2ODhkOTA5NDY5NmQiLCJlNTdjNmI2''@;'; put 'put ''Yzk3ZGNlMWJhYjA2ZTRlMTJiZjNlY2Q1Yzk4MWM4OTU3Y2M0MTQ0MmQzMTU1ZGViZjE4MDkwMDg4Il0sWyJkYTY3YTkxZDkxMDQ5Y2RjYjM2N2JlNGJlNmZmY2EzY2ZlZWQ2NTdkODA4NTgzZGUzM2ZhOTc4YmMxZWM2Y2IxIiwiOWJhY2FhMzU0ODE2NDJiYzQxZjQ2M2Y3ZWM5NzgwZTVkZWM3''@;'; put 'put ''YWRjNTA4Zjc0MGExN2U5ZWE4ZTI3YTY4YmUxZCJdLFsiNTM5MDRmYWEwYjMzNGNkZGE2ZTAwMDkzNWVmMjIxNTFlYzA4ZDBmN2JiMTEwNjlmNTc1NDVjY2MxYTM3YjdjMCIsIjViYzA4N2QwYmM4MDEwNmQ4OGM5ZWNjYWMyMGQzYzFjMTM5OTk5ODFlMTQ0MzQ2OTlkY2IwOTZiMDIyNzcxYzgi''@;'; put 'put ''XSxbIjhlN2JjZDBiZDM1OTgzYTc3MTljY2E3NzY0Y2E5MDY3NzliNTNhMDQzYTliOGJjYWVmZjk1OWY0M2FkODYwNDciLCIxMGI3NzcwYjJhM2RhNGIzOTQwMzEwNDIwY2E5NTE0NTc5ZTg4ZTJlNDdmZDY4YjNlYTEwMDQ3ZTg0NjAzNzJhIl0sWyIzODVlZWQzNGMxY2RmZjIxZTZkMDgxODY4''@;'; put 'put ''OWI4MWJkZTcxYTdmNGYxODM5N2U2NjkwYTg0MWUxNTk5YzQzODYyIiwiMjgzYmViYzNlOGVhMjNmNTY3MDFkZTE5ZTllYmY0NTc2YjMwNGVlYzIwODZkYzhjYzA0NThmZTU1NDJlNTQ1MyJdLFsiNmY5ZDliODAzZWNmMTkxNjM3YzczYTQ0MTNkZmExODBmZGRmODRhNTk0N2ZiYzljNjA2ZWQ4''@;'; put 'put ''NmMzZmFjM2E3IiwiN2M4MGM2OGU2MDMwNTliYTY5YjhlMmEzMGU0NWM0ZDQ3ZWE0ZGQyZjVjMjgxMDAyZDg2ODkwNjAzYTg0MjE2MCJdLFsiMzMyMmQ0MDEyNDNjNGUyNTgyYTIxNDdjMTA0ZDZlY2JmNzc0ZDE2M2RiMGY1ZTUzMTNiN2UwZTc0MmQwZTZiZCIsIjU2ZTcwNzk3ZTk2NjRlZjVi''@;'; put 'put ''ZmIwMTliYzRkZGFmOWI3MjgwNWY2M2VhMjg3M2FmNjI0ZjNhMmU5NmMyOGIyYTAiXSxbIjg1NjcyYzdkMmRlMGI3ZGEyYmQxNzcwZDg5NjY1ODY4NzQxYjNmOWFmNzY0MzM5NzcyMWQ3NGQyODEzNGFiODMiLCI3YzQ4MWI5YjViNDNiMmViNjM3NDA0OWJmYTYyYzJlNWU3N2YxN2ZjYzUyOThm''@;'; put 'put ''NDRjOGUzMDk0Zjc5MDMxM2E2Il0sWyI5NDhiZjgwOWIxOTg4YTQ2YjA2YzlmMTkxOTQxM2IxMGY5MjI2YzYwZjY2ODgzMmZmZDk1OWFmNjBjODJhMGEiLCI1M2E1NjI4NTZkY2I2NjQ2ZGM2Yjc0YzVkMWMzNDE4YzZkNGRmZjA4Yzk3Y2QyYmVkNGNiN2Y4OGQ4YzhlNTg5Il0sWyI2MjYwY2U3''@;'; put 'put ''ZjQ2MTgwMWMzNGYwNjdjZTBmMDI4NzNhOGYxYjBlNDRkZmM2OTc1MmFjY2VjZDgxOWYzOGZkOGU4IiwiYmMyZGE4MmI2ZmE1YjU3MWE3ZjA5MDQ5Nzc2YTFlZjdlY2QyOTIyMzgwNTFjMTk4YzFhODRlOTViMmI0YWUxNyJdLFsiZTUwMzdkZTBhZmMxZDhkNDNkODM0ODQxNGJiZjQxMDMwNDNl''@;'; put 'put ''YzhmNTc1YmZkYzQzMjk1M2NjOGQyMDM3ZmEyZCIsIjQ1NzE1MzRiYWE5NGQzYjVmOWY5OGQwOWZiOTkwYmRkYmQ1ZjViMDNlYzQ4MWYxMGUwZTVkYzg0MWQ3NTViZGEiXSxbImUwNjM3MmIwZjRhMjA3YWRmNWVhOTA1ZThmMTc3MWI0ZTdlOGRiZDFjNmE2YzViNzI1ODY2YTBhZTRmY2U3MjUi''@;'; put 'put ''LCI3YTkwODk3NGJjZTE4Y2ZlMTJhMjdiYjJhZDVhNDg4Y2Q3NDg0YTc3ODcxMDQ4NzBiMjcwMzRmOTRlZWUzMWRkIl0sWyIyMTNjN2E3MTVjZDVkNDUzNThkMGJiZjlkYzBjZTAyMjA0YjEwYmRkZTJhM2Y1ODU0MGFkNjkwOGQwNTU5NzU0IiwiNGI2ZGFkMGI1YWU0NjI1MDcwMTNhZDA2MjQ1''@;'; put 'put ''YmExOTBiYjQ4NTBmNWYzNmE3ZWVkZGZmMmMyNzUzNGI0NThmMiJdLFsiNGU3YzI3MmE3YWY0YjM0ZThkYmI5MzUyYTU0MTlhODdlMjgzOGM3MGFkYzYyY2RkZjBjYzNhM2IwOGZiZDUzYyIsIjE3NzQ5Yzc2NmM5ZDBiMThlMTZmZDA5ZjZkZWY2ODFiNTMwYjk2MTRiZmY3ZGQzM2UwYjM5NDE4''@;'; put 'put ''MTdkY2FhZTYiXSxbImZlYTc0ZTNkYmU3NzhiMWIxMGYyMzhhZDYxNjg2YWE1Yzc2ZTNkYjJiZTQzMDU3NjMyNDI3ZTI4NDBmYjI3YjYiLCI2ZTA1NjhkYjliMGIxMzI5N2NmNjc0ZGVjY2I2YWY5MzEyNmI1OTZiOTczZjdiNzc3MDFkM2RiN2YyM2NiOTZmIl0sWyI3NmU2NDExM2Y2NzdjZjBl''@;'; put 'put ''MTBhMjU3MGQ1OTk5NjhkMzE1NDRlMTc5Yjc2MDQzMjk1MmMwMmE0NDE3YmRkZTM5IiwiYzkwZGRmOGRlZTRlOTVjZjU3NzA2NmQ3MDY4MWYwZDM1ZTJhMzNkMmI1NmQyMDMyYjRiMTc1MmQxOTAxYWMwMSJdLFsiYzczOGM1NmIwM2IyYWJlMWU4MjgxYmFhNzQzZjhmOWE4ZjdjYzY0M2RmMjZj''@;'; put 'put ''YmVlM2FiMTUwMjQyYmNiYjg5MSIsIjg5M2ZiNTc4OTUxYWQyNTM3ZjcxOGYyZWFjYmZiYmJiODIzMTRlZWY3ODgwY2ZlOTE3ZTczNWQ5Njk5YTg0YzMiXSxbImQ4OTU2MjY1NDhiNjViODFlMjY0Yzc2MzdjOTcyODc3ZDFkNzJlNWYzYTkyNTAxNDM3MmU5ZjY1ODhmNmMxNGIiLCJmZWJmYWEz''@;'; put 'put ''OGYyYmM3ZWFlNzI4ZWM2MDgxOGMzNDBlYjAzNDI4ZDYzMmJiMDY3ZTE3OTM2M2VkNzVkN2Q5OTFmIl0sWyJiOGRhOTQwMzJhOTU3NTE4ZWIwZjY0MzM1NzFlODc2MWNlZmZjNzM2OTNlODRlZGQ0OTE1MGE1NjRmNjc2ZTAzIiwiMjgwNGRmYTQ0ODA1YTFlNGQ3Yzk5Y2M5NzYyODA4YjA5MmNj''@;'; put 'put ''NTg0ZDk1ZmYzYjUxMTQ4OGU0ZTc0ZWZkZjZlNyJdLFsiZTgwZmVhMTQ0NDFmYjMzYTdkOGFkYWI5NDc1ZDdmYWIyMDE5ZWZmYjUxNTZhNzkyZjFhMTE3NzhlM2MwZGY1ZCIsImVlZDFkZTdmNjM4ZTAwNzcxZTg5NzY4Y2EzY2E5NDQ3MmQxNTVlODBhZjMyMmVhOWZjYjQyOTFiNmFjOWVjNzgi''@;'; put 'put ''XSxbImEzMDE2OTdiZGZjZDcwNDMxM2JhNDhlNTFkNTY3NTQzZjJhMTgyMDMxZWZkNjkxNWRkYzA3YmJjYzRlMTYwNzAiLCI3MzcwZjkxY2ZiNjdlNGY1MDgxODA5ZmEyNWQ0MGY5YjE3MzVkYmY3YzBhMTFhMTMwYzBkMWEwNDFlMTc3ZWExIl0sWyI5MGFkODViMzg5ZDZiOTM2NDYzZjlkMDUx''@;'; put 'put ''MjY3OGRlMjA4Y2MzMzBiMTEzMDdmZmZhYjdhYzYzZTNmYjA0ZWQ0IiwiZTUwN2EzNjIwYTM4MjYxYWZmZGNiZDk0MjcyMjJiODM5YWVmYWJlMTU4Mjg5NGQ5OTFkNGQ0OGNiNmVmMTUwIl0sWyI4ZjY4YjlkMmY2M2I1ZjMzOTIzOWMxYWQ5ODFmMTYyZWU4OGM1Njc4NzIzZWEzMzUxYjdiNDQ0''@;'; put 'put ''YzllYzRjMGRhIiwiNjYyYTlmMmRiYTA2Mzk4NmRlMWQ5MGMyYjZiZTIxNWRiYmVhMmNmZTk1NTEwYmZkZjIzY2JmNzk1MDFmZmY4MiJdLFsiZTRmM2ZiMDE3NmFmODVkNjVmZjk5ZmY5MTk4YzM2MDkxZjQ4ZTg2NTAzNjgxZTNlNjY4NmZkNTA1MzIzMWUxMSIsIjFlNjM2MzNhZDBlZjRmMWMx''@;'; put 'put ''NjYxYTZkMGVhMDJiNzI4NmNjN2U3NGVjOTUxZDFjOTgyMmMzODU3NmZlYjczYmMiXSxbIjhjMDBmYTliMThlYmYzMzFlYjk2MTUzN2E0NWE0MjY2YzcwMzRmMmYwZDRlMWQwNzE2ZmI2ZWFlMjBlYWUyOWUiLCJlZmE0NzI2N2ZlYTUyMWExYTlkYzM0M2EzNzM2Yzk3NGMyZmFkYWZhODFlMzZj''@;'; put 'put ''NTRlN2QyYTRjNjY3MDI0MTRiIl0sWyJlN2EyNmNlNjlkZDQ4MjlmM2UxMGNlYzBhOWU5OGVkMzE0M2QwODRmMzA4YjkyYzA5OTdmZGRmYzYwY2IzZTQxIiwiMmE3NThlMzAwZmE3OTg0YjQ3MWIwMDZhMWFhZmJiMThkMGE2YjJjMDQyMGU4M2UyMGU4YTk0MjFjZjJjZmQ1MSJdLFsiYjY0NTll''@;'; put 'put ''MGVlMzY2MmVjOGQyMzU0MGMyMjNiY2JkYzU3MWNiY2I5NjdkNzk0MjRmM2NmMjllYjNkZTZiODBlZiIsIjY3Yzg3NmQwNmYzZTA2ZGUxZGFkZjE2ZTU2NjFkYjNjNGIzYWU2ZDQ4ZTM1YjJmZjMwYmYwYjYxYTcxYmE0NSJdLFsiZDY4YTgwYzgyODBiYjg0MDc5MzIzNGFhMTE4ZjA2MjMxZDZm''@;'; put 'put ''MWZjNjdlNzNjNWE1ZGVkYTBmNWI0OTY5NDNlOCIsImRiOGJhOWZmZjRiNTg2ZDAwYzRiMWY5MTc3YjBlMjhiNWIwZTdiOGY3ODQ1Mjk1YTI5NGM4NDI2NmIxMzMxMjAiXSxbIjMyNGFlZDdkZjY1YzgwNDI1MmRjMDI3MDkwN2EzMGIwOTYxMmFlYjk3MzQ0OWNlYTQwOTU5ODBmYzI4ZDNkNWQi''@;'; put 'put ''LCI2NDhhMzY1Nzc0YjYxZjJmZjEzMGMwYzM1YWVjMWY0ZjE5MjEzYjBjN2UzMzI4NDM5NjcyMjRhZjk2YWI3Yzg0Il0sWyI0ZGY5YzE0OTE5Y2RlNjFmNmQ1MWRmZGJlNWZlZTVkY2VlYzQxNDNiYThkMWNhODg4ZThiZDM3M2ZkMDU0Yzk2IiwiMzVlYzUxMDkyZDg3MjgwNTA5NzRjMjNhMWQ4''@;'; put 'put ''NWQ0YjVkNTA2Y2RjMjg4NDkwMTkyZWJhYzA2Y2FkMTBkNWQiXSxbIjljMzkxOWE4NGE0NzQ4NzBmYWVkOGE5YzFjYzY2MDIxNTIzNDg5MDU0ZDdmMDMwOGNiZmM5OWM4YWMxZjk4Y2QiLCJkZGI4NGYwZjRhNGRkZDU3NTg0ZjA0NGJmMjYwZTY0MTkwNTMyNmY3NmM2NGM4ZTZiZTdlNWUwM2Q0''@;'; put 'put ''ZmM1OTlkIl0sWyI2MDU3MTcwYjFkZDEyZmRmOGRlMDVmMjgxZDhlMDZiYjkxZTE0OTNhOGI5MWQ0Y2M1YTIxMzgyMTIwYTk1OWU1IiwiOWExYWYwYjI2YTZhNDgwN2FkZDlhMmRhZjcxZGYyNjI0NjUxNTJiYzNlZTI0YzY1ZTg5OWJlOTMyMzg1YTJhOCJdLFsiYTU3NmRmOGUyM2EwODQxMTQy''@;'; put 'put ''MTQzOWE0NTE4ZGEzMTg4MGNlZjBmYmE3ZDRkZjEyYjFhNjk3M2VlY2I5NDI2NiIsIjQwYTZiZjIwZTc2NjQwYjJjOTJiOTdhZmU1OGNkODJjNDMyZTEwYTdmNTE0ZDlmM2VlOGJlMTFhZTFiMjhlYzgiXSxbIjc3NzhhNzhjMjhkZWMzZTMwYTA1ZmU5NjI5ZGU4YzM4YmIzMGQxZjVjZjlhM2Ey''@;'; put 'put ''MDhmNzYzODg5YmU1OGFkNzEiLCIzNDYyNmQ5YWI1YTViMjJmZjcwOThlMTJmMmZmNTgwMDg3YjM4NDExZmYyNGFjNTYzYjUxM2ZjMWZkOWY0M2FjIl0sWyI5Mjg5NTVlZTYzN2E4NDQ2MzcyOWZkMzBlN2FmZDJlZDVmOTYyNzRlNWFkN2U1Y2IwOWVkYTljMDZkOTAzYWMiLCJjMjU2MjEwMDNk''@;'; put 'put ''M2Y0MmE4MjdiNzhhMTMwOTNhOTVlZWFjM2QyNmVmYThhOGQ4M2ZjNTE4MGU5MzViY2QwOTFmIl0sWyI4NWQwZmVmM2VjNmRiMTA5Mzk5MDY0ZjNhMGUzYjI4NTU2NDViNGE5MDdhZDM1NDUyN2FhZTc1MTYzZDgyNzUxIiwiMWYwMzY0ODQxM2EzOGMwYmUyOWQ0OTZlNTgyY2Y1NjYzZTg3NTFl''@;'; put 'put ''OTY4NzczMzE1ODJjMjM3YTI0ZWIxZjk2MiJdLFsiZmYyYjBkY2U5N2VlY2U5N2MxYzliNjA0MTc5OGI4NWRmZGZiNmQ4ODgyZGEyMDMwOGY1NDA0ODI0NTI2MDg3ZSIsIjQ5M2QxM2ZlZjUyNGJhMTg4YWY0YzRkYzU0ZDA3OTM2YzdiN2VkNmZiOTBlMmNlYjJjOTUxZTAxZjBjMjk5MDciXSxb''@;'; put 'put ''IjgyN2ZiYmU0YjFlODgwZWE5ZWQyYjJlNjMwMWIyMTJiNTdmMWVlMTQ4Y2Q2ZGQyODc4MGU1ZTJjZjg1NmUyNDEiLCJjNjBmOWM5MjNjNzI3YjBiNzFiZWYyYzY3ZDFkMTI2ODdmZjdhNjMxODY5MDMxNjZkNjA1YjY4YmFlYzI5M2VjIl0sWyJlYWE2NDlmMjFmNTFiZGJhZTdiZTRhZTM0Y2U2''@;'; put 'put ''ZTUyMTdhNThmZGNlN2Y0N2Y5YWE3ZjNiNThmYTIxMjBlMmIzIiwiYmUzMjc5ZWQ1YmJiYjAzYWM2OWE4MGY4OTg3OWFhNWEwMWE2Yjk2NWYxM2Y3ZTU5ZDQ3YTUzMDViYTVhZDkzZCJdLFsiZTRhNDJkNDNjNWNmMTY5ZDkzOTFkZjZkZWNmNDJlZTU0MWI2ZDhmMGM5YTEzNzQwMWUyMzYzMmRk''@;'; put 'put ''YTM0ZDI0ZiIsIjRkOWY5MmU3MTZkMWM3MzUyNmZjOTljY2ZiOGFkMzRjZTg4NmVlZGZhOGQ4ZTRmMTNhN2Y3MTMxZGViYTk0MTQiXSxbIjFlYzgwZmVmMzYwY2JkZDk1NDE2MGZhZGFiMzUyYjZiOTJiNTM1NzZhODhmZWE0OTQ3MTczYjlkNDMwMGJmMTkiLCJhZWVmZTkzNzU2YjUzNDBkMmYz''@;'; put 'put ''YTQ5NThhN2FiYmY1ZTAxNDZlNzdmNjI5NWEwN2I2NzFjZGMxY2MxMDdjZWZkIl0sWyIxNDZhNzc4YzA0NjcwYzJmOTFiMDBhZjQ2ODBkZmE4YmNlMzQ5MDcxN2Q1OGJhODg5ZGRiNTkyODM2NjY0MmJlIiwiYjMxOGUwZWMzMzU0MDI4YWRkNjY5ODI3ZjlkNGIyODcwYWFhOTcxZDJmN2U1ZWQx''@;'; put 'put ''ZDBiMjk3NDgzZDgzZWZkMCJdLFsiZmE1MGMwZjYxZDIyZTVmMDdlM2FjZWJiMWFhMDdiMTI4ZDAwMTIyMDlhMjhiOTc3NmQ3NmE4NzkzMTgwZWVmOSIsIjZiODRjNjkyMjM5N2ViYTliNzJjZDI4NzIyODFhNjhhNWU2ODMyOTNhNTdhMjEzYjM4Y2Q4ZDdkM2Y0ZjI4MTEiXSxbImRhMWQ2MWQw''@;'; put 'put ''Y2E3MjFhMTFiMWE1YmY2YjdkODhlODQyMWEyODhhYjVkNWJiYTUyMjBlNTNkMzJiNWYwNjdlYzIiLCI4MTU3ZjU1YTdjOTkzMDZjNzljMDc2NjE2MWM5MWUyOTY2YTczODk5ZDI3OWI0OGE2NTVmYmEwZjFhZDgzNmYxIl0sWyJhOGUyODJmZjBjOTcwNjkwNzIxNWZmOThlOGZkNDE2NjE1MzEx''@;'; put 'put ''ZGUwNDQ2ZjFlMDYyYTczYjA2MTBkMDY0ZTEzIiwiN2Y5NzM1NWI4ZGI4MWMwOWFiZmI3ZjNjNWIyNTE1ODg4YjY3OWEzZTUwZGQ2YmQ2Y2VmN2M3MzExMWY0Y2MwYyJdLFsiMTc0YTUzYjljOWEyODU4NzJkMzllNTZlNjkxM2NhYjE1ZDU5YjFmYTUxMjUwOGMwMjJmMzgyZGU4MzE5NDk3YyIs''@;'; put 'put ''ImNjYzlkYzM3YWJmYzljMTY1N2I0MTU1ZjJjNDdmOWU2NjQ2YjNhMWQ4Y2I5ODU0MzgzZGExM2FjMDc5YWZhNzMiXSxbIjk1OTM5Njk4MTk0Mzc4NWMzZDNlNTdlZGY1MDE4Y2RiZTAzOWU3MzBlNDkxOGIzZDg4NGZkZmYwOTQ3NWI3YmEiLCIyZTdlNTUyODg4YzMzMWRkOGJhMDM4NmE0Yjlj''@;'; put 'put ''ZDY4NDljNjUzZjY0Yzg3MDkzODVlOWI4YWJmODc1MjRmMmZkIl0sWyJkMmE2M2E1MGFlNDAxZTU2ZDY0NWExMTUzYjEwOWE4ZmNjYTBhNDNkNTYxZmJhMmRiYjUxMzQwYzlkODJiMTUxIiwiZTgyZDg2ZmI2NDQzZmNiNzU2NWFlZTU4YjI5NDgyMjBhNzBmNzUwYWY0ODRjYTUyZDQxNDIxNzRk''@;'; put 'put ''Y2Y4OTQwNSJdLFsiNjQ1ODdlMjMzNTQ3MWViODkwZWU3ODk2ZDdjZmRjODY2YmFjYmRiZDM4MzkzMTdiMzQzNmY5YjQ1NjE3ZTA3MyIsImQ5OWZjZGQ1YmY2OTAyZTJhZTk2ZGQ2NDQ3YzI5OWExODViOTBhMzkxMzNhZWFiMzU4Mjk5ZTVlOWZhZjY1ODkiXSxbIjg0ODFiZGUwZTRlNGQ4ODVi''@;'; put 'put ''M2E1NDZkM2U1NDlkZTA0MmYwYWE2Y2VhMjUwZTdmZDM1OGQ2Yzg2ZGQ0NWU0NTgiLCIzOGVlN2I4Y2JhNTQwNGRkODRhMjViZjM5Y2VjYjJjYTkwMGE3OWM0MmIyNjJlNTU2ZDY0YjFiNTk3NzkwNTdlIl0sWyIxMzQ2NGE1N2E3ODEwMmFhNjJiNjk3OWFlODE3ZjQ2MzdmZmNmZWQzYzRiMWNl''@;'; put 'put ''MzBiY2Q2MzAzZjZjYWY2NjZiIiwiNjliZTE1OTAwNDYxNDU4MGVmN2U0MzM0NTNjY2IwY2E0OGYzMDBhODFkMDk0MmUxM2Y0OTVhOTA3ZjZlY2MyNyJdLFsiYmM0YTlkZjViNzEzZmUyZTlhZWY0MzBiY2MxZGM5N2EwY2Q5Y2NlZGUyZjI4NTg4Y2FkYTNhMGQyZDgzZjM2NiIsImQzYTgxY2E2''@;'; put 'put ''ZTc4NWMwNjM4MzkzN2FkZjRiNzk4Y2FhNmU4YTlmYmZhNTQ3YjE2ZDc1OGQ2NjY1ODFmMzNjMSJdLFsiOGMyOGE5N2JmODI5OGJjMGQyM2Q4Yzc0OTQ1MmEzMmU2OTRiNjVlMzBhOTQ3MmEzOTU0YWIzMGZlNTMyNGNhYSIsIjQwYTMwNDYzYTMzMDUxOTMzNzhmZWRmMzFmN2NjMGViN2FlNzg0''@;'; put 'put ''ZjA0NTFjYjk0NTllNzFkYzczY2JlZjk0ODIiXSxbIjhlYTk2NjYxMzk1MjdhOGMxZGQ5NGNlNGYwNzFmZDIzYzhiMzUwYzVhNGJiMzM3NDhjNGJhMTExZmFjY2FlMCIsIjYyMGVmYWJiYzhlZTI3ODJlMjRlN2MwY2ZiOTVjNWQ3MzViNzgzYmU5Y2YwZjhlOTU1YWYzNGEzMGU2MmI5NDUiXSxb''@;'; put 'put ''ImRkMzYyNWZhZWY1YmEwNjA3NDY2OTcxNmJiZDM3ODhkODliZGRlODE1OTU5OTY4MDkyZjc2Y2M0ZWI5YTk3ODciLCI3YTE4OGZhMzUyMGUzMGQ0NjFkYTI1MDEwNDU3MzFjYTk0MTQ2MTk4Mjg4MzM5NTkzN2Y2OGQwMGM2NDRhNTczIl0sWyJmNzEwZDc5ZDllYjk2MjI5N2U0ZjYyMzJiNDBl''@;'; put 'put ''OGY3ZmViMmJjNjM4MTQ2MTRkNjkyYzEyZGU3NTI0MDgyMjFlIiwiZWE5OGU2NzIzMmQzYjMyOTVkM2I1MzU1MzIxMTVjY2FjODYxMmM3MjE4NTE2MTc1MjZhZTQ3YTljNzdiZmM4MiJdXX0sbmFmOnt3bmQ6Nyxwb2ludHM6W1siZjkzMDhhMDE5MjU4YzMxMDQ5MzQ0Zjg1Zjg5ZDUyMjliNTMx''@;'; put 'put ''Yzg0NTgzNmY5OWIwODYwMWYxMTNiY2UwMzZmOSIsIjM4OGY3YjBmNjMyZGU4MTQwZmUzMzdlNjJhMzdmMzU2NjUwMGE5OTkzNGMyMjMxYjZjYjlmZDc1ODRiOGU2NzIiXSxbIjJmOGJkZTRkMWEwNzIwOTM1NWI0YTcyNTBhNWM1MTI4ZTg4Yjg0YmRkYzYxOWFiN2NiYThkNTY5YjI0MGVmZTQi''@;'; put 'put ''LCJkOGFjMjIyNjM2ZTVlM2Q2ZDRkYmE5ZGRhNmM5YzQyNmY3ODgyNzFiYWIwZDY4NDBkY2E4N2QzYWE2YWM2MmQ2Il0sWyI1Y2JkZjA2NDZlNWRiNGVhYTM5OGYzNjVmMmVhN2EwZTNkNDE5YjdlMDMzMGUzOWNlOTJiZGRlZGNhYzRmOWJjIiwiNmFlYmNhNDBiYTI1NTk2MGEzMTc4ZDZkODYx''@;'; put 'put ''YTU0ZGJhODEzZDBiODEzZmRlN2I1YTUwODI2MjgwODcyNjRkYSJdLFsiYWNkNDg0ZTJmMGM3ZjY1MzA5YWQxNzhhOWY1NTlhYmRlMDk3OTY5NzRjNTdlNzE0YzM1ZjExMGRmYzI3Y2NiZSIsImNjMzM4OTIxYjBhN2Q5ZmQ2NDM4MDk3MTc2M2I2MWU5YWRkODg4YTQzNzVmOGUwZjA1Y2MyNjJh''@;'; put 'put ''YzY0ZjljMzciXSxbIjc3NGFlN2Y4NThhOTQxMWU1ZWY0MjQ2YjcwYzY1YWFjNTY0OTk4MGJlNWMxNzg5MWJiZWMxNzg5NWRhMDA4Y2IiLCJkOTg0YTAzMmViNmI1ZTE5MDI0M2RkNTZkN2I3YjM2NTM3MmRiMWUyZGZmOWQ2YTgzMDFkNzRjOWM5NTNjNjFiIl0sWyJmMjg3NzNjMmQ5NzUyODhi''@;'; put 'put ''YzdkMWQyMDVjMzc0ODY1MWIwNzVmYmM2NjEwZTU4Y2RkZWVkZGY4ZjE5NDA1YWE4IiwiYWIwOTAyZThkODgwYTg5NzU4MjEyZWI2NWNkYWY0NzNhMWEwNmRhNTIxZmE5MWYyOWI1Y2I1MmRiMDNlZDgxIl0sWyJkNzkyNGQ0ZjdkNDNlYTk2NWE0NjVhZTMwOTVmZjQxMTMxZTU5NDZmM2M4NWY3''@;'; put 'put ''OWU0NGFkYmNmOGUyN2UwODBlIiwiNTgxZTI4NzJhODZjNzJhNjgzODQyZWMyMjhjYzZkZWZlYTQwYWYyYmQ4OTZkM2E1YzUwNGRjOWZmNmEyNmI1OCJdLFsiZGVmZGVhNGNkYjY3Nzc1MGE0MjBmZWU4MDdlYWNmMjFlYjk4OThhZTc5Yjk3Njg3NjZlNGZhYTA0YTJkNGEzNCIsIjQyMTFhYjA2''@;'; put 'put ''OTQ2MzUxNjhlOTk3YjBlYWQyYTkzZGFlY2VkMWY0YTA0YTk1YzBmNmNmYjE5OWY2OWU1NmViNzciXSxbIjJiNGVhMGE3OTdhNDQzZDI5M2VmNWNmZjQ0NGY0OTc5ZjA2YWNmZWJkN2U4NmQyNzc0NzU2NTYxMzgzODViNmMiLCI4NWU4OWJjMDM3OTQ1ZDkzYjM0MzA4M2I1YTFjODYxMzFhMDFm''@;'; put 'put ''NjBjNTAyNjk3NjNiNTcwYzg1NGU1YzA5YjdhIl0sWyIzNTJiYmY0YTRjZGQxMjU2NGY5M2ZhMzMyY2UzMzMzMDFkOWFkNDAyNzFmODEwNzE4MTM0MGFlZjI1YmU1OWQ1IiwiMzIxZWI0MDc1MzQ4ZjUzNGQ1OWMxODI1OWRkYTNlMWY0YTFiM2IyZTcxYjEwMzljNjdiZDNkOGJjZjgxOTk4YyJd''@;'; put 'put ''LFsiMmZhMjEwNGQ2YjM4ZDExYjAyMzAwMTA1NTk4NzkxMjRlNDJhYjhkZmVmZjVmZjI5ZGM5Y2RhZGQ0ZWNhY2MzZiIsIjJkZTEwNjgyOTVkZDg2NWI2NDU2OTMzNWJkNWRkODAxODFkNzBlY2ZjODgyNjQ4NDIzYmE3NmI1MzJiN2Q2NyJdLFsiOTI0ODI3OWIwOWI0ZDY4ZGFiMjFhOWIwNjZl''@;'; put 'put ''ZGRhODMyNjNjM2Q4NGUwOTU3MmUyNjljYTBjZDdmNTQ1MzcxNCIsIjczMDE2ZjdiZjIzNGFhZGU1ZDFhYTcxYmRlYTJiMWZmM2ZjMGRlMmE4ODc5MTJmZmU1NGEzMmNlOTdjYjM0MDIiXSxbImRhZWQ0ZjJiZTNhOGJmMjc4ZTcwMTMyZmIwYmViNzUyMmY1NzBlMTQ0YmY2MTVjMDdlOTk2ZDQ0''@;'; put 'put ''M2RlZTg3MjkiLCJhNjlkY2U0YTdkNmM5OGU4ZDRhMWFjYTg3ZWY4ZDcwMDNmODNjMjMwZjNhZmE3MjZhYjQwZTUyMjkwYmUxYzU1Il0sWyJjNDRkMTJjNzA2NWQ4MTJlOGFjZjI4ZDdjYmIxOWY5MDExZWNkOWU5ZmRmMjgxYjBlNmEzYjVlODdkMjJlN2RiIiwiMjExOWE0NjBjZTMyNmNkYzc2''@;'; put 'put ''YzQ1OTI2Yzk4MmZkYWMwZTEwNmU4NjFlZGY2MWM1YTAzOTA2M2YwZTBlNjQ4MiJdLFsiNmEyNDViZjZkYzY5ODUwNGM4OWEyMGNmZGVkNjA4NTMxNTJiNjk1MzM2YzI4MDYzYjYxYzY1Y2JkMjY5ZTZiNCIsImUwMjJjZjQyYzJiZDRhNzA4YjNmNTEyNmYxNmEyNGFkOGIzM2JhNDhkMDQyM2I2''@;'; put 'put ''ZWZkNWU2MzQ4MTAwZDhhODIiXSxbIjE2OTdmZmE2ZmQ5ZGU2MjdjMDc3ZTNkMmZlNTQxMDg0Y2UxMzMwMGIwYmVjMTE0NmY5NWFlNTdmMGQwYmQ2YTUiLCJiOWMzOThmMTg2ODA2ZjVkMjc1NjE1MDZlNDU1NzQzM2EyY2YxNTAwOWU0OThhZTdhZGVlOWQ2M2QwMWIyMzk2Il0sWyI2MDViZGIw''@;'; put 'put ''MTk5ODE3MThiOTg2ZDBmMDdlODM0Y2IwZDlkZWI4MzYwZmZiN2Y2MWRmOTgyMzQ1ZWYyN2E3NDc5IiwiMjk3MmQyZGU0ZjhkMjA2ODFhNzhkOTNlYzk2ZmUyM2MyNmJmYWU4NGZiMTRkYjQzYjAxZTFlOTA1NmI4YzQ5Il0sWyI2MmQxNGRhYjQxNTBiZjQ5NzQwMmZkYzQ1YTIxNWUxMGRjYjAx''@;'; put 'put ''YzM1NDk1OWIxMGNmZTMxYzdlOWQ4N2ZmMzNkIiwiODBmYzA2YmQ4Y2M1YjAxMDk4MDg4YTE5NTBlZWQwZGIwMWFhMTMyOTY3YWI0NzIyMzVmNTY0MjQ4M2IyNWVhZiJdLFsiODBjNjBhZDAwNDBmMjdkYWRlNWI0YjA2YzQwOGU1NmIyYzUwZTlmNTZiOWI4YjQyNWU1NTVjMmY4NjMwOGI2ZiIs''@;'; put 'put ''IjFjMzgzMDNmMWNjNWMzMGYyNmU2NmJhZDdmZTcyZjcwYTY1ZWVkNGNiZTcwMjRlYjFhYTAxZjU2NDMwYmQ1N2EiXSxbIjdhOTM3NWFkNjE2N2FkNTRhYTc0YzYzNDhjYzU0ZDM0NGNjNWRjOTQ4N2Q4NDcwNDlkNWVhYmIwZmEwM2M4ZmIiLCJkMGUzZmE5ZWNhODcyNjkwOTU1OWUwZDc5MjY5''@;'; put 'put ''MDQ2YmRjNTllYTEwYzcwY2UyYjAyZDQ5OWVjMjI0ZGM3ZjciXSxbImQ1MjhlY2Q5YjY5NmI1NGM5MDdhOWVkMDQ1NDQ3YTc5YmI0MDhlYzM5YjY4ZGY1MDRiYjUxZjQ1OWJjM2ZmYzkiLCJlZWNmNDEyNTMxMzZlNWY5OTk2NmYyMTg4MWZkNjU2ZWJjNDM0NTQwNWM1MjBkYmMwNjM0NjViNTIx''@;'; put 'put ''NDA5OTMzIl0sWyI0OTM3MGE0YjVmNDM0MTJlYTI1ZjUxNGU4ZWNkYWQwNTI2NjExNWU0YTdlY2IxMzg3MjMxODA4ZjhiNDU5NjMiLCI3NThmM2Y0MWFmZDZlZDQyOGIzMDgxYjA1MTJmZDYyYTU0YzNmM2FmYmI1YjY3NjRiNjUzMDUyYTEyOTQ5YzlhIl0sWyI3N2YyMzA5MzZlZTg4Y2JiZDcz''@;'; put 'put ''ZGY5MzBkNjQ3MDJlZjg4MWQ4MTFlMGUxNDk4ZTJmMWMxM2ViMWZjMzQ1ZDc0IiwiOTU4ZWY0MmE3ODg2YjY0MDBhMDgyNjZlOWJhMWIzNzg5NmM5NTMzMGQ5NzA3N2NiYmU4ZWIzYzc2NzFjNjBkNiJdLFsiZjJkYWM5OTFjYzRjZTRiOWVhNDQ4ODdlNWM3YzBiY2U1OGM4MDA3NGFiOWQ0ZGJh''@;'; put 'put ''ZWIyODUzMWI3NzM5ZjUzMCIsImUwZGVkYzliM2IyZjhkYWQ0ZGExZjMyZGVjMjUzMWRmOWViNWZiZWIwNTk4ZTRmZDFhMTE3ZGJhNzAzYTNjMzciXSxbIjQ2M2IzZDlmNjYyNjIxZmIxYjRiZThmYmJlMjUyMDEyNWEyMTZjZGZjOWRhZTNkZWJjYmE0ODUwYzY5MGQ0NWIiLCI1ZWQ0MzBkNzhj''@;'; put 'put ''Mjk2YzM1NDMxMTQzMDZkZDg2MjJkN2M2MjJlMjdjOTcwYTFkZTMxY2IzNzdiMDFhZjczMDdlIl0sWyJmMTZmODA0MjQ0ZTQ2ZTJhMDkyMzJkNGFmZjNiNTk5NzZiOThmYWMxNDMyOGEyZDFhMzI0OTZiNDk5OThmMjQ3IiwiY2VkYWJkOWI4MjIwM2Y3ZTEzZDIwNmZjZGY0ZTMzZDkyYTZjNTNj''@;'; put 'put ''MjZlNWNjZTI2ZDY1Nzk5NjJjNGUzMWRmNiJdLFsiY2FmNzU0MjcyZGM4NDU2M2IwMzUyYjdhMTQzMTFhZjU1ZDI0NTMxNWFjZTI3YzY1MzY5ZTE1ZjcxNTFkNDFkMSIsImNiNDc0NjYwZWYzNWY1ZjJhNDFiNjQzZmE1ZTQ2MDU3NWY0ZmE5Yjc5NjIyMzJhNWMzMmY5MDgzMThhMDQ0NzYiXSxb''@;'; put 'put ''IjI2MDBjYTRiMjgyY2I5ODZmODVkMGYxNzA5OTc5ZDhiNDRhMDljMDdjYjg2ZDdjMTI0NDk3YmM4NmYwODIxMjAiLCI0MTE5Yjg4NzUzYzE1YmQ2YTY5M2IwM2ZjZGRiYjQ1ZDVhYzZiZTc0YWI1ZjBlZjQ0YjBiZTk0NzVhN2U0YjQwIl0sWyI3NjM1Y2E3MmQ3ZTg0MzJjMzM4ZWM1M2NkMTIy''@;'; put 'put ''MjBiYzAxYzQ4Njg1ZTI0ZjdkYzhjNjAyYTc3NDY5OThlNDM1IiwiOTFiNjQ5NjA5NDg5ZDYxM2QxZDVlNTkwZjc4ZTZkNzRlY2ZjMDYxZDU3MDQ4YmFkOWU3NmYzMDJjNWI5YzYxIl0sWyI3NTRlMzIzOWYzMjU1NzBjZGJiZjRhODdkZWVlOGE2NmI3ZjJiMzM0NzlkNDY4ZmJjMWE1MDc0M2Jm''@;'; put 'put ''NTZjYzE4IiwiNjczZmI4NmU1YmRhMzBmYjNjZDBlZDMwNGVhNDlhMDIzZWUzM2QwMTk3YTY5NWQwYzVkOTgwOTNjNTM2NjgzIl0sWyJlM2U2YmQxMDcxYTFlOTZhZmY1Nzg1OWM4MmQ1NzBmMDMzMDgwMDY2MWQxYzk1MmY5ZmUyNjk0NjkxZDliOWU4IiwiNTljOWUwYmJhMzk0ZTc2ZjQwYzBh''@;'; put 'put ''YTU4Mzc5YTNjYjZhNWEyMjgzOTkzZTkwYzQxNjcwMDJhZjQ5MjBlMzdmNSJdLFsiMTg2YjQ4M2QwNTZhMDMzODI2YWU3M2Q4OGY3MzI5ODVjNGNjYjFmMzJiYTM1ZjRiNGNjNDdmZGNmMDRhYTZlYiIsIjNiOTUyZDMyYzY3Y2Y3N2UyZTE3NDQ2ZTIwNDE4MGFiMjFmYjgwOTA4OTUxMzhiNGE0''@;'; put 'put ''YTc5N2Y4NmU4MDg4OGIiXSxbImRmOWQ3MGE2Yjk4NzZjZTU0NGM5ODU2MWY0YmU0ZjcyNTQ0MmU2ZDJiNzM3ZDljOTFhODMyMTcyNGNlMDk2M2YiLCI1NWViMmRhZmQ4NGQ2Y2NkNWY4NjJiNzg1ZGMzOWQ0YWIxNTcyMjI3MjBlZjlkYTIxN2I4YzQ1Y2YyYmEyNDE3Il0sWyI1ZWRkNWNjMjNj''@;'; put 'put ''NTFlODdhNDk3Y2E4MTVkNWRjZTBmOGFiNTI1NTRmODQ5ZWQ4OTk1ZGU2NGM1ZjM0Y2U3MTQzIiwiZWZhZTljOGRiYzE0MTMwNjYxZThjZWMwMzBjODlhZDBjMTNjNjZjMGQxN2EyOTA1Y2RjNzA2YWI3Mzk5YTg2OCJdLFsiMjkwNzk4YzJiNjQ3NjgzMGRhMTJmZTAyMjg3ZTllNzc3YWEzZmJh''@;'; put 'put ''MWMzNTViMTdhNzIyZDM2MmY4NDYxNGZiYSIsImUzOGRhNzZkY2Q0NDA2MjE5ODhkMDBiY2Y3OWFmMjVkNWIyOWMwOTRkYjJhMjMxNDZkMDAzYWZkNDE5NDNlN2EiXSxbImFmM2M0MjNhOTVkOWY1YjMwNTQ3NTRlZmExNTBhYzM5Y2QyOTU1MmZlMzYwMjU3MzYyZGZkZWNlZjQwNTNiNDUiLCJm''@;'; put 'put ''OThhM2ZkODMxZWIyYjc0OWE5M2IwZTZmMzVjZmI0MGM4Y2Q1YWE2NjdhMTU1ODFiYzJmZWRlZDQ5OGZkOWM2Il0sWyI3NjZkYmIyNGQxMzRlNzQ1Y2NjYWEyOGM5OWJmMjc0OTA2YmI2NmIyNmRjZjk4ZGY4ZDJmZWQ1MGQ4ODQyNDlhIiwiNzQ0YjExNTJlYWNiZTVlMzhkY2M4ODc5ODBkYTM4''@;'; put 'put ''Yjg5NzU4NGE2NWZhMDZjZWRkMmM5MjRmOTdjYmFjNTk5NiJdLFsiNTlkYmY0NmY4Yzk0NzU5YmEyMTI3N2MzMzc4NGY0MTY0NWY3YjQ0ZjZjNTk2YTU4Y2U5MmU2NjYxOTFhYmUzZSIsImM1MzRhZDQ0MTc1ZmJjMzAwZjRlYTZjZTY0ODMwOWEwNDJjZTczOWE3OTE5Nzk4Y2Q4NWUyMTZjNGEz''@;'; put 'put ''MDdmNmUiXSxbImYxM2FkYTk1MTAzYzQ1MzczMDVlNjkxZTc0ZTlhNGE4ZGQ2NDdlNzExYTk1ZTczY2I2MmRjNjAxOGNmZDg3YjgiLCJlMTM4MTdiNDRlZTE0ZGU2NjNiZjRiYzgwODM0MWYzMjY5NDllMjFhNmE3NWMyNTcwNzc4NDE5YmRhZjU3MzNkIl0sWyI3NzU0YjRmYTBlOGFjZWQwNmQ0''@;'; put 'put ''MTY3YTJjNTljY2E0Y2RhMTg2OWMwNmViYWRmYjY0ODg1NTAwMTVhODg1MjJjIiwiMzBlOTNlODY0ZTY2OWQ4MjIyNGI5NjdjMzAyMGI4ZmE4ZDFlNGUzNTBiNmNiY2M1MzdhNDhiNTc4NDExNjNhMiJdLFsiOTQ4ZGNhZGY1OTkwZTA0OGFhMzg3NGQ0NmFiZWY5ZDcwMTg1OGY5NWRlODA0MWQy''@;'; put 'put ''YTY4MjhjOTllMjI2MjUxOSIsImU0OTFhNDI1MzdmNmU1OTdkNWQyOGEzMjI0YjFiYzI1ZGY5MTU0ZWZiZDJlZjFkMmNiYmEyY2FlNTM0N2Q1N2UiXSxbIjc5NjI0MTQ0NTBjNzZjMTY4OWM3YjQ4ZjgyMDJlYzM3ZmIyMjRjZjVhYzBiZmExNTcwMzI4YThhM2Q3Yzc3YWIiLCIxMDBiNjEwZWM0''@;'; put 'put ''ZmZiNDc2MGQ1YzFmYzEzM2VmNmY2YjEyNTA3YTA1MWYwNGFjNTc2MGFmYTViMjlkYjgzNDM3Il0sWyIzNTE0MDg3ODM0OTY0YjU0YjE1YjE2MDY0NGQ5MTU0ODVhMTY5NzcyMjViODg0N2JiMGRkMDg1MTM3ZWM0N2NhIiwiZWYwYWZiYjIwNTYyMDU0NDhlMTY1MmM0OGU4MTI3ZmM2MDM5ZTc3''@;'; put 'put ''YzE1YzIzNzhiN2U3ZDE1YTBkZTI5MzMxMSJdLFsiZDNjYzMwYWQ2YjQ4M2U0YmM3OWNlMmM5ZGQ4YmM1NDk5M2U5NDdlYjhkZjc4N2I0NDI5NDNkM2Y3YjUyN2VhZiIsIjhiMzc4YTIyZDgyNzI3OGQ4OWM1ZTliZThmOTUwOGFlM2MyYWQ0NjI5MDM1ODYzMGFmYjM0ZGIwNGVlZGUwYTQiXSxb''@;'; put 'put ''IjE2MjRkODQ3ODA3MzI4NjBjZTFjNzhmY2JmZWZlMDhiMmIyOTgyM2RiOTEzZjY0OTM5NzViYTBmZjQ4NDc2MTAiLCI2ODY1MWNmOWI2ZGE5MDNlMDkxNDQ0OGM2Y2Q5ZDRjYTg5Njg3OGY1MjgyYmU0YzhjYzA2ZTJhNDA0MDc4NTc1Il0sWyI3MzNjZTgwZGE5NTVhOGEyNjkwMmM5NTYzM2U2''@;'; put 'put ''MmE5ODUxOTI0NzRiNWFmMjA3ZGE2ZGY3YjRmZDVmYzYxY2Q0IiwiZjU0MzVhMmJkMmJhZGY3ZDQ4NWE0ZDhiOGRiOWZjY2UzZTFlZjhlMDIwMWU0NTc4YzU0NjczYmMxZGM1ZWExZCJdLFsiMTVkOTQ0MTI1NDk0NTA2NGNmMWExYzMzYmJkM2I0OWY4OTY2YzUwOTIxNzFlNjk5ZWYyNThkZmFi''@;'; put 'put ''ODFjMDQ1YyIsImQ1NmViMzBiNjk0NjNlNzIzNGY1MTM3YjczYjg0MTc3NDM0ODAwYmFjZWJmYzY4NWZjMzdiYmU5ZWZlNDA3MGQiXSxbImExZDBmY2YyZWM5ZGU2NzViNjEyMTM2ZTVjZTcwZDI3MWMyMTQxN2M5ZDJiOGFhYWFjMTM4NTk5ZDA3MTc5NDAiLCJlZGQ3N2Y1MGJjYjVhM2NhYjJl''@;'; put 'put ''OTA3MzczMDk2NjdmMjY0MTQ2MmE1NDA3MGYzZDUxOTIxMmQzOWMxOTdhNjI5Il0sWyJlMjJmYmUxNWMwYWY4Y2NjNTc4MGMwNzM1Zjg0ZGJlOWE3OTBiYWRlZTgyNDVjMDZjN2NhMzczMzFjYjM2OTgwIiwiYTg1NWJhYmFkNWNkNjBjODhiNDMwYTY5ZjUzYTFhN2EzODI4OTE1NDk2NDc5OWJl''@;'; put 'put ''NDNkMDZkNzdkMzFkYTA2Il0sWyIzMTEwOTFkZDk4NjBlOGUyMGVlMTM0NzNjMTE1NWY1ZjY5NjM1ZTM5NDcwNGVhYTc0MDA5NDUyMjQ2Y2ZhOWIzIiwiNjZkYjY1NmY4N2QxZjA0ZmZmZDFmMDQ3ODhjMDY4MzA4NzFlYzVhNjRmZWVlNjg1YmQ4MGYwYjEyODZkODM3NCJdLFsiMzRjMWZkMDRk''@;'; put 'put ''MzAxYmU4OWIzMWMwNDQyZDNlNmFjMjQ4ODM5MjhiNDVhOTM0MDc4MTg2N2Q0MjMyZWMyZGJkZiIsIjk0MTQ2ODVlOTdiMWI1OTU0YmQ0NmY3MzAxNzQxMzZkNTdmMWNlZWI0ODc0NDNkYzUzMjE4NTdiYTczYWJlZSJdLFsiZjIxOWVhNWQ2YjU0NzAxYzFjMTRkZTViNTU3ZWI0MmE4ZDEzZjNh''@;'; put 'put ''YmJjZDA4YWZmY2MyYTVlNmIwNDliOGQ2MyIsIjRjYjk1OTU3ZTgzZDQwYjBmNzNhZjQ1NDRjY2NmNmIxZjRiMDhkM2MwN2IyN2ZiOGQ4YzI5NjJhNDAwNzY2ZDEiXSxbImQ3Yjg3NDBmNzRhOGZiYWFiMWY2ODNkYjhmNDVkZTI2NTQzYTU0OTBiY2E2MjcwODcyMzY5MTI0NjlhMGI0NDgiLCJm''@;'; put 'put ''YTc3OTY4MTI4ZDljOTJlZTEwMTBmMzM3YWQ0NzE3ZWZmMTVkYjVlZDNjMDQ5YjM0MTFlMDMxNWVhYTQ1OTNiIl0sWyIzMmQzMWMyMjJmOGY2ZjBlZjg2ZjdjOThkM2EzMzM1ZWFkNWJjZDMyYWJkZDk0Mjg5ZmU0ZDMwOTFhYTgyNGJmIiwiNWYzMDMyZjU4OTIxNTZlMzljY2QzZDc5MTViOWUx''@;'; put 'put ''ZGEyZTZkYWM5ZTZmMjZlOTYxMTE4ZDE0Yjg0NjJlMTY2MSJdLFsiNzQ2MWYzNzE5MTRhYjMyNjcxMDQ1YTE1NWQ5ODMxZWE4NzkzZDc3Y2Q1OTU5MmM0MzQwZjg2Y2JjMTgzNDdiNSIsIjhlYzBiYTIzOGI5NmJlYzBjYmRkZGNhZTBhYTQ0MjU0MmVlZTFmZjUwYzk4NmVhNmIzOTg0N2IzY2Mw''@;'; put 'put ''OTJmZjYiXSxbImVlMDc5YWRiMWRmMTg2MDA3NDM1NmEyNWFhMzgyMDZhNmQ3MTZiMmMzZTY3NDUzZDI4NzY5OGJhZDdiMmIyZDYiLCI4ZGMyNDEyYWFmZTNiZTVjNGM1ZjM3ZTBlY2M1ZjlmNmE0NDY5ODlhZjA0YzRlMjVlYmFhYzQ3OWVjMWM4YzFlIl0sWyIxNmVjOTNlNDQ3ZWM4M2YwNDY3''@;'; put 'put ''YjE4MzAyZWU2MjBmN2U2NWRlMzMxODc0YzlkYzcyYmZkODYxNmJhOWRhNmI1IiwiNWU0NjMxMTUwZTYyZmI0MGQwZThjMmE3Y2E1ODA0YTM5ZDU4MTg2YTUwZTQ5NzEzOTYyNjc3OGUyNWIwNjc0ZCJdLFsiZWFhNWY5ODBjMjQ1ZjZmMDM4OTc4MjkwYWZhNzBiNmJkODg1NTg5N2Y5OGI2YWE0''@;'; put 'put ''ODViOTYwNjVkNTM3YmQ5OSIsImY2NWY1ZDNlMjkyYzJlMDgxOWE1MjgzOTFjOTk0NjI0ZDc4NDg2OWQ3ZTZlYTY3ZmIxODA0MTAyNGVkYzA3ZGMiXSxbIjc4Yzk0MDc1NDRhYzEzMjY5MmVlMTkxMGEwMjQzOTk1OGFlMDQ4NzcxNTEzNDJlYTk2YzRiNmIzNWE0OWY1MSIsImYzZTAzMTkxNjll''@;'; put 'put ''YjliODVkNTQwNDc5NTUzOWE1ZTY4ZmExZmJkNTgzYzA2NGQyNDYyYjY3NWYxOTRhM2RkYjQiXSxbIjQ5NGY0YmUyMTlhMWE3NzAxNmRjZDgzODQzMWFlYTAwMDFjZGM4YWU3YTZmYzY4ODcyNjU3OGQ5NzAyODU3YTUiLCI0MjI0MmE5NjkyODNhNWYzMzliYTdmMDc1ZTM2YmEyYWY5MjVjZTMw''@;'; put 'put ''ZDc2N2VkNmU1NWY0YjAzMTg4MGQ1NjJjIl0sWyJhNTk4YTgwMzBkYTZkODZjNmJjN2YyZjUxNDRlYTU0OWQyODIxMWVhNThmYWE3MGViZjRjMWU2NjVjMWZlOWI1IiwiMjA0YjVkNmY4NDgyMmMzMDdlNGI0YTcxNDA3MzdhZWMyM2ZjNjNiNjViMzVmODZhMTAwMjZkYmQyZDg2NGU2YiJdLFsi''@;'; put 'put ''YzQxOTE2MzY1YWJiMmI1ZDA5MTkyZjVmMmRiZWFmZWMyMDhmMDIwZjEyNTcwYTE4NGRiYWRjM2U1ODU5NTk5NyIsIjRmMTQzNTFkMDA4N2VmYTQ5ZDI0NWIzMjg5ODQ5ODlkNWNhZjk0NTBmMzRiZmMwZWQxNmU5NmI1OGZhOTkxMyJdLFsiODQxZDYwNjNhNTg2ZmE0NzVhNzI0NjA0ZGEwM2Jj''@;'; put 'put ''NWI5MmEyZTBkMmUwYTM2YWNmZTRjNzNhNTUxNDc0Mjg4MSIsIjczODY3ZjU5YzA2NTllODE5MDRmOWExYzc1NDM2OThlNjI1NjJkNjc0NGMxNjljZTdhMzZkZTAxYThkNjE1NCJdLFsiNWU5NWJiMzk5YTY5NzFkMzc2MDI2OTQ3Zjg5YmRlMmYyODJiMzM4MTA5MjhiZTRkZWQxMTJhYzRkNzBl''@;'; put 'put ''MjBkNSIsIjM5ZjIzZjM2NjgwOTA4NWJlZWJmYzcxMTgxMzEzNzc1YTk5YzlhZWQ3ZDhiYTM4YjE2MTM4NGM3NDYwMTI4NjUiXSxbIjM2ZTQ2NDFhNTM5NDhmZDQ3NmMzOWY4YTk5ZmQ5NzRlNWVjMDc1NjRiNTMxNWQ4YmY5OTQ3MWJjYTBlZjJmNjYiLCJkMjQyNGIxYjFhYmU0ZWI4MTY0MjI3''@;'; put 'put ''YjA4NWM5YWE5NDU2ZWExMzQ5M2ZkNTYzZTA2ZmQ1MWNmNTY5NGM3OGZjIl0sWyIzMzY1ODFlYTdiZmJiYjI5MGMxOTFhMmY1MDdhNDFjZjU2NDM4NDIxNzBlOTE0ZmFlYWIyN2MyYzU3OWY3MjYiLCJlYWQxMjE2ODU5NWZlMWJlOTkyNTIxMjliNmU1NmIzMzkxZjdhYjE0MTBjZDFlMGVmM2Rj''@;'; put 'put ''ZGNhYmQyZmRhMjI0Il0sWyI4YWI4OTgxNmRhZGZkNmI2YTFmMjYzNGZjZjAwZWM4NDAzNzgxMDI1ZWQ2ODkwYzQ4NDk3NDI3MDZiZDQzZWRlIiwiNmZkY2VmMDlmMmY2ZDBhMDQ0ZTY1NGFlZjYyNDEzNmY1MDNkNDU5YzNlODk4NDU4NThhNDdhOTEyOWNkZDI0ZSJdLFsiMWUzM2YxYTc0NmM5''@;'; put 'put ''YzU3NzgxMzMzNDRkOTI5OWZjYWEyMGIwOTM4ZThhY2ZmMjU0NGJiNDAyODRiOGM1ZmI5NCIsIjYwNjYwMjU3ZGQxMWIzYWE5YzhlZDYxOGQyNGVkZmYyMzA2ZDMyMGYxZDAzMDEwZTMzYTdkMjA1N2YzYjNiNiJdLFsiODViN2MxZGNiM2NlYzFiN2VlN2YzMGRlZDc5ZGQyMGEwZWQxZjRjYzE4''@;'; put 'put ''Y2JjZmNmYTQxMDM2MWZkOGYwOGYzMSIsIjNkOThhOWNkZDAyNmRkNDNmMzkwNDhmMjVhODg0N2Y0ZmNhZmFkMTg5NWQ3YTYzM2M2ZmVkM2MzNWU5OTk1MTEiXSxbIjI5ZGY5ZmJkOGQ5ZTQ2NTA5Mjc1ZjRiMTI1ZDZkNDVkN2ZiZTlhM2I4NzhhN2FmODcyYTI4MDA2NjFhYzVmNTEiLCJiNGM0''@;'; put 'put ''ZmU5OWM3NzVhNjA2ZTJkODg2MjE3OTEzOWZmZGE2MWRjODYxYzAxOWU1NWNkMjg3NmViMmEyN2Q4NGIiXSxbImEwYjFjYWUwNmIwYTg0N2EzZmVhNmU2NzFhYWY4YWRmZGZlNThjYTJmNzY4MTA1YzgwODJiMmU0NDlmY2UyNTIiLCJhZTQzNDEwMmVkZGUwOTU4ZWM0YjE5ZDkxN2E2YTI4ZTZi''@;'; put 'put ''NzJkYTE4MzRhZmYwZTY1MGYwNDk1MDNhMjk2Y2YyIl0sWyI0ZThjZWFmYjliM2U5YTEzNmRjN2ZmNjdlODQwMjk1YjQ5OWRmYjNiMjEzM2U0YmExMTNmMmU0YzBlMTIxZTUiLCJjZjIxNzQxMThjOGI2ZDdhNGI0OGY2ZDUzNGNlNWM3OTQyMmMwODZhNjM0NjA1MDJiODI3Y2U2MmEzMjY2ODNj''@;'; put 'put ''Il0sWyJkMjRhNDRlMDQ3ZTE5YjZmNWFmYjgxYzdjYTJmNjkwODBhNTA3NjY4OWEwMTA5MTlmNDI3MjVjMmI3ODlhMzNiIiwiNmZiOGQ1NTkxYjQ2NmY4ZmM2M2RiNTBmMWMwZjFjNjkwMTNmOTk2ODg3YjgyNDRkMmNkZWM0MTdhZmVhOGZhMyJdLFsiZWEwMTYwNmE3YTZjOWNkZDI0OWZkZmNm''@;'; put 'put ''YWNiOTk1ODQwMDFlZGQyOGFiYmFiNzdiNTEwNGU5OGU4ZTNiMzVkNCIsIjMyMmFmNDkwOGM3MzEyYjBjZmJmZTM2OWY3YTdiM2NkYjdkNDQ5NGJjMjgyMzcwMGNmZDY1MjE4OGEzZWE5OGQiXSxbImFmOGFkZGJmMmI2NjFjOGE2YzYzMjg2NTVlYjk2NjUxMjUyMDA3ZDhjNWVhMzFiZTRhZDE5''@;'; put 'put ''NmRlOGNlMjEzMWYiLCI2NzQ5ZTY3YzAyOWI4NWY1MmEwMzRlYWZkMDk2ODM2YjI1MjA4MTg2ODBlMjZhYzhmM2RmYmNkYjcxNzQ5NzAwIl0sWyJlM2FlMTk3NDU2NmNhMDZjYzUxNmQ0N2UwZmIxNjVhNjc0YTNkYWJjZmNhMTVlNzIyZjBlMzQ1MGY0NTg4OSIsIjJhZWFiZTdlNDUzMTUxMDEx''@;'; put 'put ''NjIxN2YwN2JmNGQwNzMwMGRlOTdlNDg3NGY4MWY1MzM0MjBhNzJlZWIwYmQ2YTQiXSxbIjU5MWVlMzU1MzEzZDk5NzIxY2Y2OTkzZmZlZDFlM2UzMDE5OTNmZjNlZDI1ODgwMjA3NWVhOGNlZDM5N2UyNDYiLCJiMGVhNTU4YTExM2MzMGJlYTYwZmM0Nzc1NDYwYzc5MDFmZjBiMDUzZDI1Y2Ey''@;'; put 'put ''YmRlZWU5OGYxYTRiZTVkMTk2Il0sWyIxMTM5NmQ1NWZkYTU0YzQ5ZjE5YWE5NzMxOGQ4ZGE2MWZhODU4NGU0N2IwODQ5NDUwNzdjZjAzMjU1YjUyOTg0IiwiOTk4Yzc0YThjZDQ1YWMwMTI4OWQ1ODMzYTdiZWI0NzQ0ZmY1MzZiMDFiMjU3YmU0YzU3NjdiZWE5M2VhNTdhNCJdLFsiM2M1ZDJh''@;'; put 'put ''MWJhMzljNWExNzkwMDAwNzM4YzllMGM0MGI4ZGNkZmQ1NDY4NzU0YjY0MDU1NDAxNTdlMDE3YWE3YSIsImIyMjg0Mjc5OTk1YTM0ZTJmOWQ0ZGU3Mzk2ZmMxOGI4MGY5YjhiOWZkZDI3MGY2NjYxZjc5Y2E0YzgxYmQyNTciXSxbImNjODcwNGI4YTYwYTBkZWZhM2E5OWE3Mjk5ZjJlOWMzZmJj''@;'; put 'put ''Mzk1YWZiMDRhYzA3ODQyNWVmOGExNzkzY2MwMzAiLCJiZGQ0NjAzOWZlZWQxNzg4MWQxZTA4NjJkYjM0N2Y4Y2YzOTViNzRmYzRiY2RjNGU5NDBiNzRlM2FjMWYxYjEzIl0sWyJjNTMzZTRmN2VhODU1NWFhY2Q5Nzc3YWM1Y2FkMjliOTdkZDRkZWZjY2M1M2VlN2VhMjA0MTE5YjI4ODliMTk3''@;'; put 'put ''IiwiNmYwYTI1NmJjNWVmZGY0MjlhMmZiNjI0MmYxYTQzYTJkOWI5MjViYjRhNGIzYTI2YmI4ZTBmNDVlYjU5NjA5NiJdLFsiYzE0ZjhmMmNjYjI3ZDZmMTA5ZjZkMDhkMDNjYzk2YTY5YmE4YzM0ZWVjMDdiYmNmNTY2ZDQ4ZTMzZGE2NTkzIiwiYzM1OWQ2OTIzYmIzOThmN2ZkNDQ3M2UxNmZl''@;'; put 'put ''MWMyODQ3NWI3NDBkZDA5ODA3NWU2YzBlODY0OTExM2RjM2EzOCJdLFsiYTZjYmMzMDQ2YmM2YTQ1MGJhYzI0Nzg5ZmExNzExNWE0Yzk3MzllZDc1ZjhmMjFjZTQ0MWY3MmUwYjkwZTZlZiIsIjIxYWU3ZjQ2ODBlODg5YmIxMzA2MTllMmMwZjk1YTM2MGNlYjU3M2M3MDYwMzEzOTg2MmFmZDYx''@;'; put 'put ''N2ZhOWI5ZiJdLFsiMzQ3ZDZkOWEwMmM0ODkyN2ViZmI4NmMxMzU5YjFjYWYxMzBhM2MwMjY3ZDExY2U2MzQ0YjM5Zjk5ZDQzY2MzOCIsIjYwZWE3ZjYxYTM1MzUyNGQxYzk4N2Y2ZWNlYzkyZjA4NmQ1NjVhYjY4Nzg3MGNiMTI2ODlmZjFlMzFjNzQ0NDgiXSxbImRhNjU0NWQyMTgxZGI4ZDk4''@;'; put 'put ''M2Y3ZGNiMzc1ZWY1ODY2ZDQ3YzY3YjFiZjMxYzhjZjg1NWVmNzQzN2I3MjY1NmEiLCI0OWI5NjcxNWFiNjg3OGE3OWU3OGYwN2NlNTY4MGM1ZDY2NzMwNTFiNDkzNWJkODk3ZmVhODI0Yjc3ZGMyMDhhIl0sWyJjNDA3NDdjYzlkMDEyY2IxYTEzYjgxNDgzMDljNmRlN2VjMjVkNjk0NWQ2NTcx''@;'; put 'put ''NDZiOWQ1OTk0YjhmZWIxMTExIiwiNWNhNTYwNzUzYmUyYTEyZmM2ZGU2Y2FmMmNiNDg5NTY1ZGI5MzYxNTZiOTUxNGUxYmI1ZTgzMDM3ZTBmYTJkNCJdLFsiNGU0MmM4ZWM4MmM5OTc5OGNjZjNhNjEwYmU4NzBlNzgzMzhjN2Y3MTMzNDhiZDM0YzgyMDNlZjQwMzdmMzUwMiIsIjc1NzFkNzRl''@;'; put 'put ''ZTVlMGZiOTJhN2E4YjMzYTA3NzgzMzQxYTU0OTIxNDRjYzU0YmNjNDBhOTQ0NzM2OTM2MDY0MzciXSxbIjM3NzVhYjcwODliYzZhZjgyM2FiYTJlMWFmNzBiMjM2ZDI1MWNhZGIwYzg2NzQzMjg3NTIyYTFiM2IwZGVkZWEiLCJiZTUyZDEwN2JjZmEwOWQ4YmNiOTczNmE4MjhjZmE3ZmFjOGRi''@;'; put 'put ''MTdiZjdhNzZhMmM0MmFkOTYxNDA5MDE4Y2Y3Il0sWyJjZWUzMWNiZjdlMzRlYzM3OWQ5NGZiODE0ZDNkNzc1YWQ5NTQ1OTVkMTMxNGJhODg0Njk1OWUzZTgyZjc0ZTI2IiwiOGZkNjRhMTRjMDZiNTg5YzI2Yjk0N2FlMmJjZjZiZmEwMTQ5ZWYwYmUxNGVkNGQ4MGY0NDhhMDFjNDNiMWM2ZCJd''@;'; put 'put ''LFsiYjRmOWVhZWEwOWI2OTE3NjE5ZjZlYTZhNGViNTQ2NGVmZGRiNThmZDQ1YjFlYmVmY2RjMWEwMWQwOGI0Nzk4NiIsIjM5ZTVjOTkyNWI1YTU0YjA3NDMzYTRmMThjNjE3MjZmOGJiMTMxYzAxMmNhNTQyZWIyNGE4YWMwNzIwMDY4MmEiXSxbImQ0MjYzZGZjM2QyZGY5MjNhMDE3OWE0ODk2''@;'; put 'put ''NmQzMGNlODRlMjUxNWFmYzNkY2NjMWI3NzkwNzc5MmViY2M2MGUiLCI2MmRmYWYwN2EwZjc4ZmViMzBlMzBkNjI5NTg1M2NlMTg5ZTEyNzc2MGFkNmNmN2ZhZTE2NGUxMjJhMjA4ZDU0Il0sWyI0ODQ1NzUyNDgyMGZhNjVhNGY4ZDM1ZWI2OTMwODU3YzAwMzJhY2MwYTRhMmRlNDIyMjMzZWVk''@;'; put 'put ''YTg5NzYxMmM0IiwiMjVhNzQ4YWIzNjc5NzlkOTg3MzNjMzhhMWZhMWMyZTdkYzZjYzA3ZGIyZDYwYTlhZTdhNzZhYWE0OWJkMGY3NyJdLFsiZGZlZWVmMTg4MTEwMWYyY2IxMTY0NGYzYTJhZmRmYzIwNDVlMTk5MTkxNTI5MjNmMzY3YTE3NjdjMTFjY2VkYSIsImVjZmI3MDU2Y2YxZGUwNDJm''@;'; put 'put ''OTQyMGJhYjM5Njc5M2MwYzM5MGJkZTc0YjRiYmRmZjE2YTgzYWUwOWE5YTc1MTciXSxbIjZkN2VmNmIxNzU0M2Y4MzczYzU3M2Y0NGUxZjM4OTgzNWQ4OWJjYmM2MDYyY2VkMzZjODJkZjgzYjhmYWU4NTkiLCJjZDQ1MGVjMzM1NDM4OTg2ZGZlZmExMGM1N2ZlYTliY2M1MjFhMDk1OWIyZDgw''@;'; put 'put ''YmJmNzRiMTkwZGNhNzEyZDEwIl0sWyJlNzU2MDVkNTkxMDJhNWEyNjg0NTAwZDNiOTkxZjJlM2YzYzg4YjkzMjI1NTQ3MDM1YWYyNWFmNjZlMDQ1NDFmIiwiZjVjNTQ3NTRhOGY3MWVlNTQwYjliNDg3Mjg0NzNlMzE0ZjcyOWFjNTMwOGIwNjkzODM2MDk5MGUyYmZhZDEyNSJdLFsiZWI5ODY2''@;'; put 'put ''MGY0YzRkZmFhMDZhMmJlNDUzZDUwMjBiYzk5YTBjMmU2MGFiZTM4ODQ1N2RkNDNmZWZiMWVkNjIwYyIsIjZjYjlhODg3NmQ5Y2I4NTIwNjA5YWYzYWRkMjZjZDIwYTBhN2NkOGE5NDExMTMxY2U4NWY0NDEwMDA5OTIyM2UiXSxbIjEzZTg3YjAyN2Q4NTE0ZDM1OTM5ZjJlNjg5MmIxOTkyMjE1''@;'; put 'put ''NDU5Njk0MTg4ODMzNmRjMzU2M2UzYjhkYmE5NDIiLCJmZWY1YTNjNjgwNTlhNmRlYzVkNjI0MTE0YmYxZTkxYWFjMmI5ZGE1NjhkNmFiZWIyNTcwZDU1NjQ2YjhhZGYxIl0sWyJlZTE2MzAyNmU5ZmQ2ZmUwMTdjMzhmMDZhNWJlNmZjMTI1NDI0YjM3MWNlMjcwOGU3YmY0NDkxNjkxZTU3NjRh''@;'; put 'put ''IiwiMWFjYjI1MGYyNTVkZDYxYzQzZDk0Y2NjNjcwZDBmNThmNDlhZTNmYTE1Yjk2NjIzZTU0MzBkYTBhZDZjNjJiMiJdLFsiYjI2OGY1ZWY5YWQ1MWU0ZDc4ZGUzYTc1MGMyZGM4OWIxZTYyNmQ0MzUwNTg2Nzk5OTkzMmU1ZGIzM2FmM2Q4MCIsIjVmMzEwZDRiM2M5OWI5ZWJiMTlmNzdkNDFj''@;'; put 'put ''MWRlZTAxOGNmMGQzNGZkNDE5MTYxNDAwM2U5NDVhMTIxNmU0MjMiXSxbImZmMDdmMzExOGE5ZGYwMzVlOWZhZDg1ZWI2YzdiZmU0MmIwMmYwMWNhOTljZWVhM2JmN2ZmZGJhOTNjNDc1MGQiLCI0MzgxMzZkNjAzZTg1OGEzYTVjNDQwYzM4ZWNjYmFkZGMxZDI5NDIxMTRlMmVkZGQ0NzQwZDA5''@;'; put 'put ''OGNlZDFmMGQ4Il0sWyI4ZDhiOTg1NWM3YzA1MmEzNDE0NmZkMjBmZmI2NThiZWE0YjlmNjllMGQ4MjVlYmVjMTZlOGMzY2UyYjUyNmExIiwiY2RiNTU5ZWVkYzJkNzlmOTI2YmFmNDRmYjg0ZWE0ZDQ0YmNmNTBmZWU1MWQ3Y2ViMzBlMmU3ZjQ2MzAzNjc1OCJdLFsiNTJkYjBiNTM4NGRmYmYw''@;'; put 'put ''NWJmYTlkNDcyZDdhZTI2ZGZlNGI4NTFjZWNhOTFiMWViYTU0MjYzMTgwZGEzMmI2MyIsImMzYjk5N2QwNTBlZTVkNDIzZWJhZjY2YTZkYjlmNTdiMzE4MGM5MDI4NzU2NzlkZTkyNGI2OWQ4NGE3YjM3NSJdLFsiZTYyZjk0OTBkM2Q1MWRhNjM5NWVmZDI0ZTgwOTE5Y2M3ZDBmMjljM2YzZmE0''@;'; put 'put ''OGM2ZmZmNTQzYmVjYmQ0MzM1MiIsIjZkODlhZDdiYTQ4NzZiMGIyMmMyY2EyODBjNjgyODYyZjM0MmM4NTkxZjFkYWY1MTcwZTA3YmZkOWNjYWZhN2QiXSxbIjdmMzBlYTI0NzZiMzk5YjQ5NTc1MDljODhmNzdkMDE5MWFmYTJmZjVjYjdiMTRmZDZkOGU3ZDY1YWFhYjExOTMiLCJjYTVlZjdk''@;'; put 'put ''NGIyMzFjOTRjM2IxNTM4OWE1ZjYzMTFlOWRhZmY3YmI2N2IxMDNlOTg4MGVmNGJmZjYzN2FjYWVjIl0sWyI1MDk4ZmYxZTFkOWYxNGZiNDZhMjEwZmFkYTZjOTAzZmVmMGZiN2I0YTFkZDFkOWFjNjBhMDM2MTgwMGI3YTAwIiwiOTczMTE0MWQ4MWZjOGY4MDg0ZDM3YzZlNzU0MjAwNmIzZWUx''@;'; put 'put ''YjQwZDYwZGZlNTM2MmE1YjEzMmZkMTdkZGMwIl0sWyIzMmI3OGM3ZGU5ZWU1MTJhNzI4OTViZTZiOWNiZWZhNmUyZjNjNGNjY2U0NDVjOTZiOWYyYzgxZTI3NzhhZDU4IiwiZWUxODQ5ZjUxM2RmNzFlMzJlZmMzODk2ZWUyODI2MGM3M2JiODA1NDdhZTIyNzViYTQ5NzIzNzc5NGM4NzUzYyJd''@;'; put 'put ''LFsiZTJjYjc0ZmRkYzhlOWZiY2QwNzZlZWYyYTdjNzJiMGNlMzdkNTBmMDgyNjlkZmMwNzRiNTgxNTUwNTQ3YTRmNyIsImQzYWEyZWQ3MWM5ZGQyMjQ3YTYyZGYwNjI3MzZlYjBiYWRkZWE5ZTM2MTIyZDJiZTg2NDFhYmNiMDA1Y2M0YTQiXSxbIjg0Mzg0NDc1NjZkNGQ3YmVkYWRjMjk5NDk2''@;'; put 'put ''YWIzNTc0MjYwMDlhMzVmMjM1Y2IxNDFiZTBkOTljZDEwYWUzYTgiLCJjNGUxMDIwOTE2OTgwYTRkYTVkMDFhYzVlNmFkMzMwNzM0ZWYwZDc5MDY2MzFjNGYyMzkwNDI2YjJlZGQ3OTFmIl0sWyI0MTYyZDQ4OGI4OTQwMjAzOWI1ODRjNmZjNmMzMDg4NzA1ODdkOWM0NmY2NjBiODc4YWI2NWM4''@;'; put 'put ''MmM3MTFkNjdlIiwiNjcxNjNlOTAzMjM2Mjg5Zjc3NmYyMmMyNWZiOGEzYWZjMTczMmYyYjg0YjRlOTVkYmRhNDdhZTVhMDg1MjY0OSJdLFsiM2ZhZDNmYTg0Y2FmMGYzNGYwZjg5YmZkMmRjZjU0ZmMxNzVkNzY3YWVjM2U1MDY4NGYzYmE0YTRiZjVmNjgzZCIsImNkMWJjN2NiNmNjNDA3YmIy''@;'; put 'put ''ZjBjYTY0N2M3MThhNzMwY2Y3MTg3MmU3ZDBkMmE1M2ZhMjBlZmNkZmU2MTgyNiJdLFsiNjc0ZjI2MDBhMzAwN2EwMDU2OGMxYTdjZTA1ZDA4MTZjMWZiODRiZjEzNzA3OThmMWM2OTUzMmZhZWIxYTg2YiIsIjI5OWQyMWY5NDEzZjMzYjNlZGY0M2IyNTcwMDQ1ODBiNzBkYjU3ZGEwYjE4MjI1''@;'; put 'put ''OWUwOWVlY2M2OWUwZDM4YTUiXSxbImQzMmY0ZGE1NGFkZTc0YWJiODFiODE1YWQxZmIzYjI2M2Q4MmQ2YzY5MjcxNGJjZmY4N2QyOWJkNWVlOWYwOGYiLCJmOTQyOWU3MzhiOGU1M2I5NjhlOTkwMTZjMDU5NzA3NzgyZTE0ZjQ1MzUzNTlkNTgyZmM0MTY5MTBiM2VlYTg3Il0sWyIzMGU0ZTY3''@;'; put 'put ''MDQzNTM4NTU1NmU1OTM2NTcxMzU4NDVkMzZmYmI2OTMxZjcyYjA4Y2IxZWQ5NTRmMWUzY2UzZmY2IiwiNDYyZjliY2U2MTk4OTg2Mzg0OTkzNTAxMTNiYmM5YjEwYTg3OGQzNWRhNzA3NDBkYzY5NWE1NTllYjg4ZGI3YiJdLFsiYmUyMDYyMDAzYzUxY2MzMDA0NjgyOTA0MzMwZTRkZWU3ZjNk''@;'; put 'put ''Y2QxMGIwMWU1ODBiZjE5NzFiMDRkNGNhZDI5NyIsIjYyMTg4YmM0OWQ2MWU1NDI4NTczZDQ4YTc0ZTFjNjU1YjFjNjEwOTA5MDU2ODJhMGQ1NTU4ZWQ3MmRjY2I5YmMiXSxbIjkzMTQ0NDIzYWNlMzQ1MWVkMjllMGZiOWFjMmFmMjExY2I2ZTg0YTYwMWRmNTk5M2M0MTk4NTlmZmY1ZGYwNGEi''@;'; put 'put ''LCI3YzEwZGZiMTY0YzM0MjVmNWM3MWEzZjlkNzk5MjAzOGYxMDY1MjI0ZjcyYmI5ZDFkOTAyYTZkMTMwMzdiNDdjIl0sWyJiMDE1ZjgwNDRmNWZjYmRjZjIxY2EyNmQ2YzM0ZmI4MTk3ODI5MjA1YzdiN2QyYTdjYjY2NDE4YzE1N2IxMTJjIiwiYWI4YzFlMDg2ZDA0ZTgxMzc0NGE2NTViMmRm''@;'; put 'put ''OGQ1ZjgzYjNjZGM2ZmFhMzA4OGMxZDNhZWExNDU0ZTNhMWQ1ZiJdLFsiZDVlOWUxZGE2NDlkOTdkODllNDg2ODExN2E0NjVhM2E0ZjhhMThkZTU3YTE0MGQzNmIzZjJhZjM0MWEyMWI1MiIsIjRjYjA0NDM3ZjM5MWVkNzMxMTFhMTNjYzFkNGRkMGRiMTY5MzQ2NWMyMjQwNDgwZDg5NTVlODU5''@;'; put 'put ''MmYyNzQ0N2EiXSxbImQzYWU0MTA0N2RkN2NhMDY1ZGJmOGVkNzdiOTkyNDM5OTgzMDA1Y2Q3MmUxNmQ2Zjk5NmE1MzE2ZDM2OTY2YmIiLCJiZDFhZWIyMWFkMjJlYmIyMmExMGYwMzAzNDE3YzZkOTY0ZjhjZGQ3ZGYwYWNhNjE0YjEwZGMxNGQxMjVhYzQ2Il0sWyI0NjNlMjc2M2Q4ODVmOTU4''@;'; put 'put ''ZmM2NmNkZDIyODAwZjBhNDg3MTk3ZDBhODJlMzc3YjQ5ZjgwYWY4N2M4OTdiMDY1IiwiYmZlZmFjZGIwZTVkMGZkN2RmM2EzMTFhOTRkZTA2MmIyNmI4MGM2MWZiYzk3NTA4Yjc5OTkyNjcxZWY3Y2E3ZiJdLFsiNzk4NWZkZmQxMjdjMDU2N2M2ZjUzZWMxYmI2M2VjMzE1OGU1OTdjNDBiZmU3''@;'; put 'put ''NDdjODNjZGRmYzkxMDY0MTkxNyIsIjYwM2MxMmRhZjNkOTg2MmVmMmIyNWZlMWRlMjg5YWVkMjRlZDI5MWUwZWM2NzA4NzAzYTViZDU2N2YzMmVkMDMiXSxbIjc0YTFhZDZiNWY3NmUzOWRiMmRkMjQ5NDEwZWFjN2Y5OWU3NGM1OWNiODNkMmQwZWQ1ZmYxNTQzZGE3NzAzZTkiLCJjYzYxNTdl''@;'; put 'put ''ZjE4YzljNjNjZDYxOTNkODM2MzFiYmVhMDA5M2UwOTY4OTQyZThjMzNkNTczN2ZkNzkwZTBkYjA4Il0sWyIzMDY4MmE1MDcwMzM3NWY2MDJkNDE2NjY0YmExOWI3ZmM5YmFiNDJjNzI3NDc0NjNhNzFkMDg5NmIyMmY2ZGEzIiwiNTUzZTA0ZjZiMDE4YjRmYTZjOGYzOWU3ZjMxMWQzMTc2Mjkw''@;'; put 'put ''ZDBlMGYxOWNhNzNmMTc3MTRkOTk3N2EyMmZmOCJdLFsiOWUyMTU4ZjBkN2MwZDVmMjZjMzc5MWVmZWZhNzk1OTc2NTRlN2EyYjI0NjRmNTJiMWVlNmMxMzQ3NzY5ZWY1NyIsIjcxMmZjZGQxYjkwNTNmMDkwMDNhMzQ4MWZhNzc2MmU5ZmZkN2M4ZWYzNWEzODUwOWUyZmJmMjYyOTAwODM3MyJd''@;'; put 'put ''LFsiMTc2ZTI2OTg5YTQzYzljZmViYTQwMjljMjAyNTM4YzI4MTcyZTU2NmUzYzRmY2U3MzIyODU3ZjNiZTMyN2Q2NiIsImVkOGNjOWQwNGIyOWViODc3ZDI3MGI0ODc4ZGM0M2MxOWFlZmQzMWY0ZWVlMDllZTdiNDc4MzRjMWZhNGIxYzMiXSxbIjc1ZDQ2ZWZlYTM3NzFlNmU2OGFiYjg5YTEz''@;'; put 'put ''YWQ3NDdlY2YxODkyMzkzZGZjNGYxYjcwMDQ3ODhjNTAzNzRkYTgiLCI5ODUyMzkwYTk5NTA3Njc5ZmQwYjg2ZmQyYjM5YTg2OGQ3ZWZjMjIxNTEzNDZlMWEzY2E0NzI2NTg2YTZiZWQ4Il0sWyI4MDlhMjBjNjdkNjQ5MDBmZmI2OThjNGM4MjVmNmQ1ZjIzMTBmYjA0NTFjODY5MzQ1YjczMTlm''@;'; put 'put ''NjQ1NjA1NzIxIiwiOWU5OTQ5ODBkOTkxN2UyMmI3NmIwNjE5MjdmYTA0MTQzZDA5NmNjYzU0OTYzZTZhNWViZmE1ZjNmOGUyODZjMSJdLFsiMWIzODkwM2E0M2Y3ZjExNGVkNDUwMGI0ZWFjNzA4M2ZkZWZlY2UxY2YyOWM2MzUyOGQ1NjM0NDZmOTcyYzE4MCIsIjQwMzZlZGM5MzFhNjBhZTg4''@;'; put 'put ''OTM1M2Y3N2ZkNTNkZTRhMjcwOGIyNmI2ZjVkYTcyYWQzMzk0MTE5ZGFmNDA4ZjkiXV19fX0sNDcwMTEoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aixjPWgoMjg0OTApLHM9aCg0MzM0OSksQT1oKDY0MzY3KTt5LmFzc2VydD1zLHkudG9BcnJheT1BLnRvQXJyYXkseS56ZXJvMj1BLnpl''@;'; put 'put ''cm8yLHkudG9IZXg9QS50b0hleCx5LmVuY29kZT1BLmVuY29kZSx5LmdldE5BRj1mdW5jdGlvbiB2KFIseCxVKXt2YXIgVixIPW5ldyBBcnJheShNYXRoLm1heChSLmJpdExlbmd0aCgpLFUpKzEpO2ZvcihWPTA7VjxILmxlbmd0aDtWKz0xKUhbVl09MDt2YXIgTj0xPDx4KzEsej1SLmNsb25l''@;'; put 'put ''KCk7Zm9yKFY9MDtWPEgubGVuZ3RoO1YrKyl7dmFyIFksRj16LmFuZGxuKE4tMSk7ei5pc09kZCgpP3ouaXN1Ym4oWT1GPihOPj4xKS0xPyhOPj4xKS1GOkYpOlk9MCxIW1ZdPVksei5pdXNocm4oMSl9cmV0dXJuIEh9LHkuZ2V0SlNGPWZ1bmN0aW9uIEMoUix4KXt2YXIgVT1bW10sW11dO1I9''@;'; put 'put ''Ui5jbG9uZSgpLHg9eC5jbG9uZSgpO2Zvcih2YXIgTixIPTAsVj0wO1IuY21wbigtSCk+MHx8eC5jbXBuKC1WKT4wOyl7dmFyIEYsVyx6PVIuYW5kbG4oMykrSCYzLFk9eC5hbmRsbigzKStWJjM7Mz09PXomJih6PS0xKSwzPT09WSYmKFk9LTEpLEY9MSZ6PzMhPShOPVIuYW5kbG4oNykrSCY3''@;'; put 'put ''KSYmNSE9PU58fDIhPT1ZP3o6LXo6MCxVWzBdLnB1c2goRiksVz0xJlk/MyE9KE49eC5hbmRsbig3KStWJjcpJiY1IT09Tnx8MiE9PXo/WTotWTowLFVbMV0ucHVzaChXKSwyKkg9PT1GKzEmJihIPTEtSCksMipWPT09VysxJiYoVj0xLVYpLFIuaXVzaHJuKDEpLHguaXVzaHJuKDEpfXJldHVy''@;'; put 'put ''biBVfSx5LmNhY2hlZFByb3BlcnR5PWZ1bmN0aW9uIHcoUix4LFUpe3ZhciBIPSJfIit4O1IucHJvdG90eXBlW3hdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXNbSF0/dGhpc1tIXTp0aGlzW0hdPVUuY2FsbCh0aGlzKX19LHkucGFyc2VCeXRlcz1mdW5jdGlvbiBTKFIpe3JldHVy''@;'; put 'put ''biJzdHJpbmciPT10eXBlb2YgUj95LnRvQXJyYXkoUiwiaGV4Iik6Un0seS5pbnRGcm9tTEU9ZnVuY3Rpb24gTChSKXtyZXR1cm4gbmV3IGMoUiwiaGV4IiwibGUiKX19LDI4NDkwKGZlLGosaCl7IWZ1bmN0aW9uKHksYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHMoWCxmKXtpZighWCl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoZnx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBBKFgsZil7WC5zdXBlcl89Zjt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9Zi5wcm90b3R5cGUsWC5wcm90b3R5cGU9bmV3IGIsWC5wcm90b3R5cGUuY29uc3RydWN0b3I9WH1mdW5jdGlvbiB2KFgsZixi''@;'; put 'put ''KXtpZih2LmlzQk4oWCkpcmV0dXJuIFg7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVgmJigoImxlIj09PWZ8fCJiZSI9PT1mKSYmKGI9ZixmPTEwKSx0aGlzLl9pbml0KFh8fDAsZnx8MTAsYnx8ImJlIikpfXZhciBD''@;'; put 'put ''OyJvYmplY3QiPT10eXBlb2YgeT95LmV4cG9ydHM9djpjLkJOPXYsdi5CTj12LHYud29yZFNpemU9MjY7dHJ5e0M9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOmgoNzkzNjgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gdyhYLGYpe3Zh''@;'; put 'put ''ciBiPVguY2hhckNvZGVBdChmKTtyZXR1cm4gYj49NjUmJmI8PTcwP2ItNTU6Yj49OTcmJmI8PTEwMj9iLTg3OmItNDgmMTV9ZnVuY3Rpb24gUyhYLGYsYil7dmFyIGs9dyhYLGIpO3JldHVybiBiLTE+PWYmJihrfD13KFgsYi0xKTw8NCksa31mdW5jdGlvbiBMKFgsZixiLGspe2Zvcih2YXIg''@;'; put 'put ''TT0wLEI9TWF0aC5taW4oWC5sZW5ndGgsYiksSz1mO0s8QjtLKyspe3ZhciBHPVguY2hhckNvZGVBdChLKS00ODtNKj1rLE0rPUc+PTQ5P0ctNDkrMTA6Rz49MTc/Ry0xNysxMDpHfXJldHVybiBNfXYuaXNCTj1mdW5jdGlvbihmKXtyZXR1cm4gZiBpbnN0YW5jZW9mIHZ8fG51bGwhPT1mJiYi''@;'; put 'put ''b2JqZWN0Ij09dHlwZW9mIGYmJmYuY29uc3RydWN0b3Iud29yZFNpemU9PT12LndvcmRTaXplJiZBcnJheS5pc0FycmF5KGYud29yZHMpfSx2Lm1heD1mdW5jdGlvbihmLGIpe3JldHVybiBmLmNtcChiKT4wP2Y6Yn0sdi5taW49ZnVuY3Rpb24oZixiKXtyZXR1cm4gZi5jbXAoYik8MD9mOmJ9''@;'; put 'put ''LHYucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGYsYixrKXtpZigibnVtYmVyIj09dHlwZW9mIGYpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZixiLGspO2lmKCJvYmplY3QiPT10eXBlb2YgZilyZXR1cm4gdGhpcy5faW5pdEFycmF5KGYsYixrKTsiaGV4Ij09PWImJihiPTE2KSxzKGI9PT0o''@;'; put 'put ''MHxiKSYmYj49MiYmYjw9MzYpO3ZhciBNPTA7Ii0iPT09KGY9Zi50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihNKyssdGhpcy5uZWdhdGl2ZT0xKSxNPGYubGVuZ3RoJiYoMTY9PT1iP3RoaXMuX3BhcnNlSGV4KGYsTSxrKToodGhpcy5fcGFyc2VCYXNlKGYsYixNKSwibGUi''@;'; put 'put ''PT09ayYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIsaykpKX0sdi5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZixiLGspe2Y8MCYmKHRoaXMubmVnYXRpdmU9MSxmPS1mKSxmPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZmXSx0aGlzLmxlbmd0aD0xKTpm''@;'; put 'put ''PDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmYsZi82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KHMoZjw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZmLGYvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxl''@;'; put 'put ''Ij09PWsmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLGspfSx2LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGYsYixrKXtpZihzKCJudW1iZXIiPT10eXBlb2YgZi5sZW5ndGgpLGYubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRo''@;'; put 'put ''aXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGYubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIE09MDtNPHRoaXMubGVuZ3RoO00rKyl0aGlzLndvcmRzW01dPTA7dmFyIEIsSyxHPTA7aWYoImJlIj09PWspZm9yKE09Zi5sZW5ndGgtMSxCPTA7TT49''@;'; put 'put ''MDtNLT0zKXRoaXMud29yZHNbQl18PShLPWZbTV18ZltNLTFdPDw4fGZbTS0yXTw8MTYpPDxHJjY3MTA4ODYzLHRoaXMud29yZHNbQisxXT1LPj4+MjYtRyY2NzEwODg2MywoRys9MjQpPj0yNiYmKEctPTI2LEIrKyk7ZWxzZSBpZigibGUiPT09aylmb3IoTT0wLEI9MDtNPGYubGVuZ3RoO00r''@;'; put 'put ''PTMpdGhpcy53b3Jkc1tCXXw9KEs9ZltNXXxmW00rMV08PDh8ZltNKzJdPDwxNik8PEcmNjcxMDg4NjMsdGhpcy53b3Jkc1tCKzFdPUs+Pj4yNi1HJjY3MTA4ODYzLChHKz0yNCk+PTI2JiYoRy09MjYsQisrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVu''@;'; put 'put ''Y3Rpb24oZixiLGspe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZi5sZW5ndGgtYikvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTT0wO008dGhpcy5sZW5ndGg7TSsrKXRoaXMud29yZHNbTV09MDt2YXIgRyxCPTAsSz0wO2lmKCJiZSI9PT1rKWZvcihNPWYu''@;'; put 'put ''bGVuZ3RoLTE7TT49YjtNLT0yKUc9UyhmLGIsTSk8PEIsdGhpcy53b3Jkc1tLXXw9NjcxMDg4NjMmRyxCPj0xOD8oQi09MTgsdGhpcy53b3Jkc1tLKz0xXXw9Rz4+PjI2KTpCKz04O2Vsc2UgZm9yKE09KGYubGVuZ3RoLWIpJTI9PTA/YisxOmI7TTxmLmxlbmd0aDtNKz0yKUc9UyhmLGIsTSk8''@;'; put 'put ''PEIsdGhpcy53b3Jkc1tLXXw9NjcxMDg4NjMmRyxCPj0xOD8oQi09MTgsdGhpcy53b3Jkc1tLKz0xXXw9Rz4+PjI2KTpCKz04O3RoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihmLGIsayl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIE09''@;'; put 'put ''MCxCPTE7Qjw9NjcxMDg4NjM7Qio9YilNKys7TS0tLEI9Qi9ifDA7Zm9yKHZhciBLPWYubGVuZ3RoLWssRz1LJU0sRD1NYXRoLm1pbihLLEstRykrayxwPTAsST1rO0k8RDtJKz1NKXA9TChmLEksSStNLGIpLHRoaXMuaW11bG4oQiksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29y''@;'; put 'put ''ZHNbMF0rPXA6dGhpcy5faWFkZG4ocCk7aWYoMCE9PUcpe3ZhciB1ZT0xO2ZvcihwPUwoZixJLGYubGVuZ3RoLGIpLEk9MDtJPEc7SSsrKXVlKj1iO3RoaXMuaW11bG4odWUpLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApfXRoaXMuc3Ry''@;'; put 'put ''aXAoKX0sdi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihmKXtmLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspZi53b3Jkc1tiXT10aGlzLndvcmRzW2JdO2YubGVuZ3RoPXRoaXMubGVuZ3RoLGYubmVnYXRpdmU9dGhpcy5uZWdhdGl2''@;'; put 'put ''ZSxmLnJlZD10aGlzLnJlZH0sdi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZj1uZXcgdihudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGYpLGZ9LHYucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZil7Zm9yKDt0aGlzLmxlbmd0aDxmOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytd''@;'; put 'put ''PTA7cmV0dXJuIHRoaXN9LHYucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdi5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIFI9''@;'; put 'put ''WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0seD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxVPVswLDAs''@;'; put 'put ''MzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0''@;'; put 'put ''MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFYoWCxmLGIpe2IubmVnYXRpdmU9Zi5u''@;'; put 'put ''ZWdhdGl2ZV5YLm5lZ2F0aXZlO3ZhciBrPVgubGVuZ3RoK2YubGVuZ3RofDA7Yi5sZW5ndGg9ayxrPWstMXwwO3ZhciBNPTB8WC53b3Jkc1swXSxCPTB8Zi53b3Jkc1swXSxLPU0qQixEPUsvNjcxMDg4NjR8MDtiLndvcmRzWzBdPTY3MTA4ODYzJks7Zm9yKHZhciBwPTE7cDxrO3ArKyl7Zm9y''@;'; put 'put ''KHZhciBJPUQ+Pj4yNix1ZT02NzEwODg2MyZELG5lPU1hdGgubWluKHAsZi5sZW5ndGgtMSksX2U9TWF0aC5tYXgoMCxwLVgubGVuZ3RoKzEpO19lPD1uZTtfZSsrKUkrPShLPShNPTB8WC53b3Jkc1twLV9lfDBdKSooQj0wfGYud29yZHNbX2VdKSt1ZSkvNjcxMDg4NjR8MCx1ZT02NzEwODg2''@;'; put 'put ''MyZLO2Iud29yZHNbcF09MHx1ZSxEPTB8SX1yZXR1cm4gMCE9PUQ/Yi53b3Jkc1twXT0wfEQ6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9di5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZixiKXt2YXIgaztpZihiPTB8Ynx8MSwxNj09PShmPWZ8fDEwKXx8ImhleCI9PT1mKXtrPSIiO2Zvcih2''@;'; put 'put ''YXIgTT0wLEI9MCxLPTA7Szx0aGlzLmxlbmd0aDtLKyspe3ZhciBHPXRoaXMud29yZHNbS10sRD0oMTY3NzcyMTUmKEc8PE18QikpLnRvU3RyaW5nKDE2KTtCPUc+Pj4yNC1NJjE2Nzc3MjE1LChNKz0yKT49MjYmJihNLT0yNixLLS0pLGs9MCE9PUJ8fEshPT10aGlzLmxlbmd0aC0xP1JbNi1E''@;'; put 'put ''Lmxlbmd0aF0rRCtrOkQra31mb3IoMCE9PUImJihrPUIudG9TdHJpbmcoMTYpK2spO2subGVuZ3RoJWIhPT0wOylrPSIwIitrO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKGs9Ii0iK2spLGt9aWYoZj09PSgwfGYpJiZmPj0yJiZmPD0zNil7dmFyIHA9eFtmXSxJPVVbZl07az0iIjt2YXIg''@;'; put 'put ''dWU9dGhpcy5jbG9uZSgpO2Zvcih1ZS5uZWdhdGl2ZT0wOyF1ZS5pc1plcm8oKTspe3ZhciBuZT11ZS5tb2RuKEkpLnRvU3RyaW5nKGYpO2s9KHVlPXVlLmlkaXZuKEkpKS5pc1plcm8oKT9uZStrOlJbcC1uZS5sZW5ndGhdK25lK2t9Zm9yKHRoaXMuaXNaZXJvKCkmJihrPSIwIitrKTtrLmxl''@;'; put 'put ''bmd0aCViIT09MDspaz0iMCIraztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihrPSItIitrKSxrfXMoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdi5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZj10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhp''@;'; put 'put ''cy5sZW5ndGg/Zis9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2YrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZzKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVw''@;'; put 'put ''IHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZjpmfSx2LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHYucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGYsYil7cmV0dXJuIHModHlwZW9mIEM8InUiKSx0aGlzLnRvQXJyYXlM''@;'; put 'put ''aWtlKEMsZixiKX0sdi5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihmLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGYsYil9LHYucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGYsYixrKXt2YXIgTT10aGlzLmJ5dGVMZW5ndGgoKSxCPWt8fE1hdGgubWF4KDEsTSk7''@;'; put 'put ''cyhNPD1CLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIikscyhCPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRCxwLEs9ImxlIj09PWIsRz1uZXcgZihCKSxJPXRoaXMuY2xvbmUoKTtpZihLKXtmb3IocD0wOyFJLmlzWmVy''@;'; put 'put ''bygpO3ArKylEPUkuYW5kbG4oMjU1KSxJLml1c2hybig4KSxHW3BdPUQ7Zm9yKDtwPEI7cCsrKUdbcF09MH1lbHNle2ZvcihwPTA7cDxCLU07cCsrKUdbcF09MDtmb3IocD0wOyFJLmlzWmVybygpO3ArKylEPUkuYW5kbG4oMjU1KSxJLml1c2hybig4KSxHW0ItcC0xXT1EfXJldHVybiBHfSx2''@;'; put 'put ''LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZil7cmV0dXJuIDMyLU1hdGguY2x6MzIoZil9OmZ1bmN0aW9uKGYpe3ZhciBiPWYsaz0wO3JldHVybiBiPj00MDk2JiYoays9MTMsYj4+Pj0xMyksYj49NjQmJihrKz03LGI+Pj49NyksYj49OCYmKGsrPTQsYj4+Pj00''@;'; put 'put ''KSxiPj0yJiYoays9MixiPj4+PTIpLGsrYn0sdi5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGYpe2lmKDA9PT1mKXJldHVybiAyNjt2YXIgYj1mLGs9MDtyZXR1cm4hKDgxOTEmYikmJihrKz0xMyxiPj4+PTEzKSwhKDEyNyZiKSYmKGsrPTcsYj4+Pj03KSwhKDE1JmIpJiYoays9NCxi''@;'; put 'put ''Pj4+PTQpLCEoMyZiKSYmKGsrPTIsYj4+Pj0yKSwhKDEmYikmJmsrKyxrfSx2LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx2LnByb3RvdHlw''@;'; put 'put ''ZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBmPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgaz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihmKz1rLDI2IT09aylicmVha31yZXR1cm4gZn0sdi5wcm90b3R5cGUuYnl0''@;'; put 'put ''ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdi5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGYpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGYpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdi5wcm90b3R5''@;'; put 'put ''cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMudGVzdG4oZi0xKT90aGlzLm5vdG4oZikuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdi5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHYucHJvdG90eXBlLm5lZz1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx2LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx2LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGYpe2Zvcig7dGhpcy5sZW5ndGg8Zi5sZW5ndGg7''@;'; put 'put ''KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPGYubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18Zi53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZil7cmV0dXJuIHMoMD09PSh0aGlzLm5l''@;'; put 'put ''Z2F0aXZlfGYubmVnYXRpdmUpKSx0aGlzLml1b3IoZil9LHYucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmxlbmd0aD5mLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGYpOmYuY2xvbmUoKS5pb3IodGhpcyl9LHYucHJvdG90eXBlLnVvcj1mdW5jdGlvbihmKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5sZW5ndGg+Zi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZik6Zi5jbG9uZSgpLml1b3IodGhpcyl9LHYucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGYpe3ZhciBiO2I9dGhpcy5sZW5ndGg+Zi5sZW5ndGg/Zjp0aGlzO2Zvcih2YXIgaz0wO2s8Yi5sZW5ndGg7aysrKXRoaXMud29y''@;'; put 'put ''ZHNba109dGhpcy53b3Jkc1trXSZmLndvcmRzW2tdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZil7cmV0dXJuIHMoMD09PSh0aGlzLm5lZ2F0aXZlfGYubmVnYXRpdmUpKSx0aGlzLml1YW5kKGYpfSx2LnByb3Rv''@;'; put 'put ''dHlwZS5hbmQ9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMubGVuZ3RoPmYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGYpOmYuY2xvbmUoKS5pYW5kKHRoaXMpfSx2LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmxlbmd0aD5mLmxlbmd0aD90aGlzLmNsb25lKCkuaXVh''@;'; put 'put ''bmQoZik6Zi5jbG9uZSgpLml1YW5kKHRoaXMpfSx2LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihmKXt2YXIgYixrO3RoaXMubGVuZ3RoPmYubGVuZ3RoPyhiPXRoaXMsaz1mKTooYj1mLGs9dGhpcyk7Zm9yKHZhciBNPTA7TTxrLmxlbmd0aDtNKyspdGhpcy53b3Jkc1tNXT1iLndvcmRzW01d''@;'; put 'put ''Xmsud29yZHNbTV07aWYodGhpcyE9PWIpZm9yKDtNPGIubGVuZ3RoO00rKyl0aGlzLndvcmRzW01dPWIud29yZHNbTV07cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihmKXtyZXR1cm4gcygwPT09KHRoaXMubmVnYXRp''@;'; put 'put ''dmV8Zi5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZil9LHYucHJvdG90eXBlLnhvcj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zi5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZik6Zi5jbG9uZSgpLml4b3IodGhpcyl9LHYucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZil7cmV0dXJu''@;'; put 'put ''IHRoaXMubGVuZ3RoPmYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihmKTpmLmNsb25lKCkuaXV4b3IodGhpcyl9LHYucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGYpe3MoIm51bWJlciI9PXR5cGVvZiBmJiZmPj0wKTt2YXIgYj0wfE1hdGguY2VpbChmLzI2KSxrPWYlMjY7dGhpcy5fZXhw''@;'; put 'put ''YW5kKGIpLGs+MCYmYi0tO2Zvcih2YXIgTT0wO008YjtNKyspdGhpcy53b3Jkc1tNXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tNXTtmb3Ioaz4wJiYodGhpcy53b3Jkc1tNXT1+dGhpcy53b3Jkc1tNXSY2NzEwODg2Mz4+MjYtayxNKyspO008dGhpcy5sZW5ndGg7TSsrKXRoaXMud29yZHNbTV09''@;'; put 'put ''MDtyZXR1cm4gdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZil9LHYucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZixiKXtzKCJudW1iZXIiPT10eXBlb2YgZiYmZj49MCk7dmFyIGs9Zi8yNnwwLE09ZiUyNjtyZXR1''@;'; put 'put ''cm4gdGhpcy5fZXhwYW5kKGsrMSksdGhpcy53b3Jkc1trXT1iP3RoaXMud29yZHNba118MTw8TTp0aGlzLndvcmRzW2tdJn4oMTw8TSksdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGYpe3ZhciBiLGssTTtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWYubmVnYXRp''@;'; put 'put ''dmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihmKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1mLm5lZ2F0aXZlKXJldHVybiBmLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIoZiksZi5uZWdhdGl2ZT0xLGIuX25v''@;'; put 'put ''cm1TaWduKCk7dGhpcy5sZW5ndGg+Zi5sZW5ndGg/KGs9dGhpcyxNPWYpOihrPWYsTT10aGlzKTtmb3IodmFyIEI9MCxLPTA7SzxNLmxlbmd0aDtLKyspdGhpcy53b3Jkc1tLXT02NzEwODg2MyYoYj0oMHxrLndvcmRzW0tdKSsoMHxNLndvcmRzW0tdKStCKSxCPWI+Pj4yNjtmb3IoOzAhPT1C''@;'; put 'put ''JiZLPGsubGVuZ3RoO0srKyl0aGlzLndvcmRzW0tdPTY3MTA4ODYzJihiPSgwfGsud29yZHNbS10pK0IpLEI9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPWsubGVuZ3RoLDAhPT1CKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPUIsdGhpcy5sZW5ndGgrKztlbHNlIGlmKGshPT10aGlzKWZvcig7Szxr''@;'; put 'put ''Lmxlbmd0aDtLKyspdGhpcy53b3Jkc1tLXT1rLndvcmRzW0tdO3JldHVybiB0aGlzfSx2LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZil7dmFyIGI7cmV0dXJuIDAhPT1mLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZi5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIoZiksZi5uZWdhdGl2ZV49''@;'; put 'put ''MSxiKTowPT09Zi5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPWYuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5mLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChmKTpmLmNsb25lKCkuaWFkZCh0aGlzKX0sdi5wcm90b3R5cGUu''@;'; put 'put ''aXN1Yj1mdW5jdGlvbihmKXtpZigwIT09Zi5uZWdhdGl2ZSl7Zi5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChmKTtyZXR1cm4gZi5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZiksdGhpcy5u''@;'; put 'put ''ZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIE0sQixrPXRoaXMuY21wKGYpO2lmKDA9PT1rKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztrPjA/KE09dGhpcyxCPWYpOihNPWYsQj10aGlzKTtmb3IodmFyIEs9MCxHPTA7RzxC''@;'; put 'put ''Lmxlbmd0aDtHKyspSz0oYj0oMHxNLndvcmRzW0ddKS0oMHxCLndvcmRzW0ddKStLKT4+MjYsdGhpcy53b3Jkc1tHXT02NzEwODg2MyZiO2Zvcig7MCE9PUsmJkc8TS5sZW5ndGg7RysrKUs9KGI9KDB8TS53b3Jkc1tHXSkrSyk+PjI2LHRoaXMud29yZHNbR109NjcxMDg4NjMmYjtpZigwPT09''@;'; put 'put ''SyYmRzxNLmxlbmd0aCYmTSE9PXRoaXMpZm9yKDtHPE0ubGVuZ3RoO0crKyl0aGlzLndvcmRzW0ddPU0ud29yZHNbR107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEcpLE0hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBl''@;'; put 'put ''LnN1Yj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZil9O3ZhciBOPWZ1bmN0aW9uKGYsYixrKXt2YXIgRCxwLEksTT1mLndvcmRzLEI9Yi53b3JkcyxLPWsud29yZHMsRz0wLHVlPTB8TVswXSxuZT04MTkxJnVlLF9lPXVlPj4+MTMsUGU9MHxNWzFdLG90PTgxOTEmUGUs''@;'; put 'put ''bHQ9UGU+Pj4xMyxkdD0wfE1bMl0sUmU9ODE5MSZkdCxhZT1kdD4+PjEzLHhlPTB8TVszXSxqZT04MTkxJnhlLEFlPXhlPj4+MTMsRGU9MHxNWzRdLEZlPTgxOTEmRGUsZ2U9RGU+Pj4xMyxjZT0wfE1bNV0saGU9ODE5MSZjZSx3ZT1jZT4+PjEzLEplPTB8TVs2XSx0dD04MTkxJkplLEtlPUpl''@;'; put 'put ''Pj4+MTMsJHQ9MHxNWzddLFJ0PTgxOTEmJHQsTHQ9JHQ+Pj4xMyxHdD0wfE1bOF0sZ3Q9ODE5MSZHdCxYdD1HdD4+PjEzLExyPTB8TVs5XSxsbj04MTkxJkxyLE9uPUxyPj4+MTMsUXI9MHxCWzBdLHRyPTgxOTEmUXIsSG49UXI+Pj4xMyxPbz0wfEJbMV0sdXI9ODE5MSZPbyxabj1Pbz4+PjEz''@;'; put 'put ''LFNuPTB8QlsyXSx4cj04MTkxJlNuLFR0PVNuPj4+MTMsQXI9MHxCWzNdLF9uPTgxOTEmQXIsWnQ9QXI+Pj4xMyxObj0wfEJbNF0scHQ9ODE5MSZObixwbj1Obj4+PjEzLE1pPTB8Qls1XSxHZT04MTkxJk1pLFV0PU1pPj4+MTMsdnI9MHxCWzZdLHh0PTgxOTEmdnIsQnQ9dnI+Pj4xMyx6bj0w''@;'; put 'put ''fEJbN10sR249ODE5MSZ6bix5bj16bj4+PjEzLHZpPTB8Qls4XSxycj04MTkxJnZpLGhyPXZpPj4+MTMscG89MHxCWzldLHZuPTgxOTEmcG8sQm49cG8+Pj4xMztrLm5lZ2F0aXZlPWYubmVnYXRpdmVeYi5uZWdhdGl2ZSxrLmxlbmd0aD0xOTt2YXIgamE9KEcrKEQ9TWF0aC5pbXVsKG5lLHRy''@;'; put 'put ''KSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChuZSxIbikpK01hdGguaW11bChfZSx0cil8MCkpPDwxMyl8MDtHPSgoST1NYXRoLmltdWwoX2UsSG4pKSsocD4+PjEzKXwwKSsoamE+Pj4yNil8MCxqYSY9NjcxMDg4NjMsRD1NYXRoLmltdWwob3QsdHIpLHA9KHA9TWF0aC5pbXVsKG90LEhu''@;'; put 'put ''KSkrTWF0aC5pbXVsKGx0LHRyKXwwLEk9TWF0aC5pbXVsKGx0LEhuKTt2YXIgam89KEcrKEQ9RCtNYXRoLmltdWwobmUsdXIpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxabil8MCkrTWF0aC5pbXVsKF9lLHVyKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLFpu''@;'; put 'put ''KXwwKSsocD4+PjEzKXwwKSsoam8+Pj4yNil8MCxqbyY9NjcxMDg4NjMsRD1NYXRoLmltdWwoUmUsdHIpLHA9KHA9TWF0aC5pbXVsKFJlLEhuKSkrTWF0aC5pbXVsKGFlLHRyKXwwLEk9TWF0aC5pbXVsKGFlLEhuKSxEPUQrTWF0aC5pbXVsKG90LHVyKXwwLHA9KHA9cCtNYXRoLmltdWwob3Qs''@;'; put 'put ''Wm4pfDApK01hdGguaW11bChsdCx1cil8MCxJPUkrTWF0aC5pbXVsKGx0LFpuKXwwO3ZhciBYcj0oRysoRD1EK01hdGguaW11bChuZSx4cil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLFR0KXwwKStNYXRoLmltdWwoX2UseHIpfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmlt''@;'; put 'put ''dWwoX2UsVHQpfDApKyhwPj4+MTMpfDApKyhYcj4+PjI2KXwwLFhyJj02NzEwODg2MyxEPU1hdGguaW11bChqZSx0cikscD0ocD1NYXRoLmltdWwoamUsSG4pKStNYXRoLmltdWwoQWUsdHIpfDAsST1NYXRoLmltdWwoQWUsSG4pLEQ9RCtNYXRoLmltdWwoUmUsdXIpfDAscD0ocD1wK01hdGgu''@;'; put 'put ''aW11bChSZSxabil8MCkrTWF0aC5pbXVsKGFlLHVyKXwwLEk9SStNYXRoLmltdWwoYWUsWm4pfDAsRD1EK01hdGguaW11bChvdCx4cil8MCxwPShwPXArTWF0aC5pbXVsKG90LFR0KXwwKStNYXRoLmltdWwobHQseHIpfDAsST1JK01hdGguaW11bChsdCxUdCl8MDt2YXIgZWE9KEcrKEQ9RCtN''@;'; put 'put ''YXRoLmltdWwobmUsX24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxadCl8MCkrTWF0aC5pbXVsKF9lLF9uKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLFp0KXwwKSsocD4+PjEzKXwwKSsoZWE+Pj4yNil8MCxlYSY9NjcxMDg4NjMsRD1NYXRoLmltdWwoRmUs''@;'; put 'put ''dHIpLHA9KHA9TWF0aC5pbXVsKEZlLEhuKSkrTWF0aC5pbXVsKGdlLHRyKXwwLEk9TWF0aC5pbXVsKGdlLEhuKSxEPUQrTWF0aC5pbXVsKGplLHVyKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWm4pfDApK01hdGguaW11bChBZSx1cil8MCxJPUkrTWF0aC5pbXVsKEFlLFpuKXwwLEQ9RCtNYXRo''@;'; put 'put ''LmltdWwoUmUseHIpfDAscD0ocD1wK01hdGguaW11bChSZSxUdCl8MCkrTWF0aC5pbXVsKGFlLHhyKXwwLEk9SStNYXRoLmltdWwoYWUsVHQpfDAsRD1EK01hdGguaW11bChvdCxfbil8MCxwPShwPXArTWF0aC5pbXVsKG90LFp0KXwwKStNYXRoLmltdWwobHQsX24pfDAsST1JK01hdGguaW11''@;'; put 'put ''bChsdCxadCl8MDt2YXIgcmE9KEcrKEQ9RCtNYXRoLmltdWwobmUscHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxwbil8MCkrTWF0aC5pbXVsKF9lLHB0KXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLHBuKXwwKSsocD4+PjEzKXwwKSsocmE+Pj4yNil8MCxy''@;'; put 'put ''YSY9NjcxMDg4NjMsRD1NYXRoLmltdWwoaGUsdHIpLHA9KHA9TWF0aC5pbXVsKGhlLEhuKSkrTWF0aC5pbXVsKHdlLHRyKXwwLEk9TWF0aC5pbXVsKHdlLEhuKSxEPUQrTWF0aC5pbXVsKEZlLHVyKXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsWm4pfDApK01hdGguaW11bChnZSx1cil8MCxJPUkr''@;'; put 'put ''TWF0aC5pbXVsKGdlLFpuKXwwLEQ9RCtNYXRoLmltdWwoamUseHIpfDAscD0ocD1wK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKEFlLHhyKXwwLEk9SStNYXRoLmltdWwoQWUsVHQpfDAsRD1EK01hdGguaW11bChSZSxfbil8MCxwPShwPXArTWF0aC5pbXVsKFJlLFp0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoYWUsX24pfDAsST1JK01hdGguaW11bChhZSxadCl8MCxEPUQrTWF0aC5pbXVsKG90LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwob3QscG4pfDApK01hdGguaW11bChsdCxwdCl8MCxJPUkrTWF0aC5pbXVsKGx0LHBuKXwwO3ZhciBjYT0oRysoRD1EK01hdGguaW11bChuZSxHZSl8MCl8''@;'; put 'put ''MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLFV0KXwwKStNYXRoLmltdWwoX2UsR2UpfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoX2UsVXQpfDApKyhwPj4+MTMpfDApKyhjYT4+PjI2KXwwLGNhJj02NzEwODg2MyxEPU1hdGguaW11bCh0dCx0cikscD0ocD1NYXRoLmltdWwo''@;'; put 'put ''dHQsSG4pKStNYXRoLmltdWwoS2UsdHIpfDAsST1NYXRoLmltdWwoS2UsSG4pLEQ9RCtNYXRoLmltdWwoaGUsdXIpfDAscD0ocD1wK01hdGguaW11bChoZSxabil8MCkrTWF0aC5pbXVsKHdlLHVyKXwwLEk9SStNYXRoLmltdWwod2UsWm4pfDAsRD1EK01hdGguaW11bChGZSx4cil8MCxwPShw''@;'; put 'put ''PXArTWF0aC5pbXVsKEZlLFR0KXwwKStNYXRoLmltdWwoZ2UseHIpfDAsST1JK01hdGguaW11bChnZSxUdCl8MCxEPUQrTWF0aC5pbXVsKGplLF9uKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWnQpfDApK01hdGguaW11bChBZSxfbil8MCxJPUkrTWF0aC5pbXVsKEFlLFp0KXwwLEQ9RCtNYXRo''@;'; put 'put ''LmltdWwoUmUscHQpfDAscD0ocD1wK01hdGguaW11bChSZSxwbil8MCkrTWF0aC5pbXVsKGFlLHB0KXwwLEk9SStNYXRoLmltdWwoYWUscG4pfDAsRD1EK01hdGguaW11bChvdCxHZSl8MCxwPShwPXArTWF0aC5pbXVsKG90LFV0KXwwKStNYXRoLmltdWwobHQsR2UpfDAsST1JK01hdGguaW11''@;'; put 'put ''bChsdCxVdCl8MDt2YXIgQ2k9KEcrKEQ9RCtNYXRoLmltdWwobmUseHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxCdCl8MCkrTWF0aC5pbXVsKF9lLHh0KXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLEJ0KXwwKSsocD4+PjEzKXwwKSsoQ2k+Pj4yNil8MCxD''@;'; put 'put ''aSY9NjcxMDg4NjMsRD1NYXRoLmltdWwoUnQsdHIpLHA9KHA9TWF0aC5pbXVsKFJ0LEhuKSkrTWF0aC5pbXVsKEx0LHRyKXwwLEk9TWF0aC5pbXVsKEx0LEhuKSxEPUQrTWF0aC5pbXVsKHR0LHVyKXwwLHA9KHA9cCtNYXRoLmltdWwodHQsWm4pfDApK01hdGguaW11bChLZSx1cil8MCxJPUkr''@;'; put 'put ''TWF0aC5pbXVsKEtlLFpuKXwwLEQ9RCtNYXRoLmltdWwoaGUseHIpfDAscD0ocD1wK01hdGguaW11bChoZSxUdCl8MCkrTWF0aC5pbXVsKHdlLHhyKXwwLEk9SStNYXRoLmltdWwod2UsVHQpfDAsRD1EK01hdGguaW11bChGZSxfbil8MCxwPShwPXArTWF0aC5pbXVsKEZlLFp0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoZ2UsX24pfDAsST1JK01hdGguaW11bChnZSxadCl8MCxEPUQrTWF0aC5pbXVsKGplLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUscG4pfDApK01hdGguaW11bChBZSxwdCl8MCxJPUkrTWF0aC5pbXVsKEFlLHBuKXwwLEQ9RCtNYXRoLmltdWwoUmUsR2UpfDAscD0ocD1wK01hdGgu''@;'; put 'put ''aW11bChSZSxVdCl8MCkrTWF0aC5pbXVsKGFlLEdlKXwwLEk9SStNYXRoLmltdWwoYWUsVXQpfDAsRD1EK01hdGguaW11bChvdCx4dCl8MCxwPShwPXArTWF0aC5pbXVsKG90LEJ0KXwwKStNYXRoLmltdWwobHQseHQpfDAsST1JK01hdGguaW11bChsdCxCdCl8MDt2YXIgaG89KEcrKEQ9RCtN''@;'; put 'put ''YXRoLmltdWwobmUsR24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx5bil8MCkrTWF0aC5pbXVsKF9lLEduKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLHluKXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsRD1NYXRoLmltdWwoZ3Qs''@;'; put 'put ''dHIpLHA9KHA9TWF0aC5pbXVsKGd0LEhuKSkrTWF0aC5pbXVsKFh0LHRyKXwwLEk9TWF0aC5pbXVsKFh0LEhuKSxEPUQrTWF0aC5pbXVsKFJ0LHVyKXwwLHA9KHA9cCtNYXRoLmltdWwoUnQsWm4pfDApK01hdGguaW11bChMdCx1cil8MCxJPUkrTWF0aC5pbXVsKEx0LFpuKXwwLEQ9RCtNYXRo''@;'; put 'put ''LmltdWwodHQseHIpfDAscD0ocD1wK01hdGguaW11bCh0dCxUdCl8MCkrTWF0aC5pbXVsKEtlLHhyKXwwLEk9SStNYXRoLmltdWwoS2UsVHQpfDAsRD1EK01hdGguaW11bChoZSxfbil8MCxwPShwPXArTWF0aC5pbXVsKGhlLFp0KXwwKStNYXRoLmltdWwod2UsX24pfDAsST1JK01hdGguaW11''@;'; put 'put ''bCh3ZSxadCl8MCxEPUQrTWF0aC5pbXVsKEZlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUscG4pfDApK01hdGguaW11bChnZSxwdCl8MCxJPUkrTWF0aC5pbXVsKGdlLHBuKXwwLEQ9RCtNYXRoLmltdWwoamUsR2UpfDAscD0ocD1wK01hdGguaW11bChqZSxVdCl8MCkrTWF0aC5pbXVsKEFl''@;'; put 'put ''LEdlKXwwLEk9SStNYXRoLmltdWwoQWUsVXQpfDAsRD1EK01hdGguaW11bChSZSx4dCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLEJ0KXwwKStNYXRoLmltdWwoYWUseHQpfDAsST1JK01hdGguaW11bChhZSxCdCl8MCxEPUQrTWF0aC5pbXVsKG90LEduKXwwLHA9KHA9cCtNYXRoLmltdWwob3Qs''@;'; put 'put ''eW4pfDApK01hdGguaW11bChsdCxHbil8MCxJPUkrTWF0aC5pbXVsKGx0LHluKXwwO3ZhciBNYT0oRysoRD1EK01hdGguaW11bChuZSxycil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGhyKXwwKStNYXRoLmltdWwoX2UscnIpfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmlt''@;'; put 'put ''dWwoX2UsaHIpfDApKyhwPj4+MTMpfDApKyhNYT4+PjI2KXwwLE1hJj02NzEwODg2MyxEPU1hdGguaW11bChsbix0cikscD0ocD1NYXRoLmltdWwobG4sSG4pKStNYXRoLmltdWwoT24sdHIpfDAsST1NYXRoLmltdWwoT24sSG4pLEQ9RCtNYXRoLmltdWwoZ3QsdXIpfDAscD0ocD1wK01hdGgu''@;'; put 'put ''aW11bChndCxabil8MCkrTWF0aC5pbXVsKFh0LHVyKXwwLEk9SStNYXRoLmltdWwoWHQsWm4pfDAsRD1EK01hdGguaW11bChSdCx4cil8MCxwPShwPXArTWF0aC5pbXVsKFJ0LFR0KXwwKStNYXRoLmltdWwoTHQseHIpfDAsST1JK01hdGguaW11bChMdCxUdCl8MCxEPUQrTWF0aC5pbXVsKHR0''@;'; put 'put ''LF9uKXwwLHA9KHA9cCtNYXRoLmltdWwodHQsWnQpfDApK01hdGguaW11bChLZSxfbil8MCxJPUkrTWF0aC5pbXVsKEtlLFp0KXwwLEQ9RCtNYXRoLmltdWwoaGUscHQpfDAscD0ocD1wK01hdGguaW11bChoZSxwbil8MCkrTWF0aC5pbXVsKHdlLHB0KXwwLEk9SStNYXRoLmltdWwod2UscG4p''@;'; put 'put ''fDAsRD1EK01hdGguaW11bChGZSxHZSl8MCxwPShwPXArTWF0aC5pbXVsKEZlLFV0KXwwKStNYXRoLmltdWwoZ2UsR2UpfDAsST1JK01hdGguaW11bChnZSxVdCl8MCxEPUQrTWF0aC5pbXVsKGplLHh0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsQnQpfDApK01hdGguaW11bChBZSx4dCl8MCxJ''@;'; put 'put ''PUkrTWF0aC5pbXVsKEFlLEJ0KXwwLEQ9RCtNYXRoLmltdWwoUmUsR24pfDAscD0ocD1wK01hdGguaW11bChSZSx5bil8MCkrTWF0aC5pbXVsKGFlLEduKXwwLEk9SStNYXRoLmltdWwoYWUseW4pfDAsRD1EK01hdGguaW11bChvdCxycil8MCxwPShwPXArTWF0aC5pbXVsKG90LGhyKXwwKStN''@;'; put 'put ''YXRoLmltdWwobHQscnIpfDAsST1JK01hdGguaW11bChsdCxocil8MDt2YXIga3M9KEcrKEQ9RCtNYXRoLmltdWwobmUsdm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxCbil8MCkrTWF0aC5pbXVsKF9lLHZuKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLEJu''@;'; put 'put ''KXwwKSsocD4+PjEzKXwwKSsoa3M+Pj4yNil8MCxrcyY9NjcxMDg4NjMsRD1NYXRoLmltdWwobG4sdXIpLHA9KHA9TWF0aC5pbXVsKGxuLFpuKSkrTWF0aC5pbXVsKE9uLHVyKXwwLEk9TWF0aC5pbXVsKE9uLFpuKSxEPUQrTWF0aC5pbXVsKGd0LHhyKXwwLHA9KHA9cCtNYXRoLmltdWwoZ3Qs''@;'; put 'put ''VHQpfDApK01hdGguaW11bChYdCx4cil8MCxJPUkrTWF0aC5pbXVsKFh0LFR0KXwwLEQ9RCtNYXRoLmltdWwoUnQsX24pfDAscD0ocD1wK01hdGguaW11bChSdCxadCl8MCkrTWF0aC5pbXVsKEx0LF9uKXwwLEk9SStNYXRoLmltdWwoTHQsWnQpfDAsRD1EK01hdGguaW11bCh0dCxwdCl8MCxw''@;'; put 'put ''PShwPXArTWF0aC5pbXVsKHR0LHBuKXwwKStNYXRoLmltdWwoS2UscHQpfDAsST1JK01hdGguaW11bChLZSxwbil8MCxEPUQrTWF0aC5pbXVsKGhlLEdlKXwwLHA9KHA9cCtNYXRoLmltdWwoaGUsVXQpfDApK01hdGguaW11bCh3ZSxHZSl8MCxJPUkrTWF0aC5pbXVsKHdlLFV0KXwwLEQ9RCtN''@;'; put 'put ''YXRoLmltdWwoRmUseHQpfDAscD0ocD1wK01hdGguaW11bChGZSxCdCl8MCkrTWF0aC5pbXVsKGdlLHh0KXwwLEk9SStNYXRoLmltdWwoZ2UsQnQpfDAsRD1EK01hdGguaW11bChqZSxHbil8MCxwPShwPXArTWF0aC5pbXVsKGplLHluKXwwKStNYXRoLmltdWwoQWUsR24pfDAsST1JK01hdGgu''@;'; put 'put ''aW11bChBZSx5bil8MCxEPUQrTWF0aC5pbXVsKFJlLHJyKXwwLHA9KHA9cCtNYXRoLmltdWwoUmUsaHIpfDApK01hdGguaW11bChhZSxycil8MCxJPUkrTWF0aC5pbXVsKGFlLGhyKXwwO3ZhciBCaT0oRysoRD1EK01hdGguaW11bChvdCx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5p''@;'; put 'put ''bXVsKG90LEJuKXwwKStNYXRoLmltdWwobHQsdm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwobHQsQm4pfDApKyhwPj4+MTMpfDApKyhCaT4+PjI2KXwwLEJpJj02NzEwODg2MyxEPU1hdGguaW11bChsbix4cikscD0ocD1NYXRoLmltdWwobG4sVHQpKStNYXRoLmltdWwoT24seHIp''@;'; put 'put ''fDAsST1NYXRoLmltdWwoT24sVHQpLEQ9RCtNYXRoLmltdWwoZ3QsX24pfDAscD0ocD1wK01hdGguaW11bChndCxadCl8MCkrTWF0aC5pbXVsKFh0LF9uKXwwLEk9SStNYXRoLmltdWwoWHQsWnQpfDAsRD1EK01hdGguaW11bChSdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFJ0LHBuKXwwKStN''@;'; put 'put ''YXRoLmltdWwoTHQscHQpfDAsST1JK01hdGguaW11bChMdCxwbil8MCxEPUQrTWF0aC5pbXVsKHR0LEdlKXwwLHA9KHA9cCtNYXRoLmltdWwodHQsVXQpfDApK01hdGguaW11bChLZSxHZSl8MCxJPUkrTWF0aC5pbXVsKEtlLFV0KXwwLEQ9RCtNYXRoLmltdWwoaGUseHQpfDAscD0ocD1wK01h''@;'; put 'put ''dGguaW11bChoZSxCdCl8MCkrTWF0aC5pbXVsKHdlLHh0KXwwLEk9SStNYXRoLmltdWwod2UsQnQpfDAsRD1EK01hdGguaW11bChGZSxHbil8MCxwPShwPXArTWF0aC5pbXVsKEZlLHluKXwwKStNYXRoLmltdWwoZ2UsR24pfDAsST1JK01hdGguaW11bChnZSx5bil8MCxEPUQrTWF0aC5pbXVs''@;'; put 'put ''KGplLHJyKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsaHIpfDApK01hdGguaW11bChBZSxycil8MCxJPUkrTWF0aC5pbXVsKEFlLGhyKXwwO3ZhciB0YT0oRysoRD1EK01hdGguaW11bChSZSx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFJlLEJuKXwwKStNYXRoLmltdWwoYWUs''@;'; put 'put ''dm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoYWUsQm4pfDApKyhwPj4+MTMpfDApKyh0YT4+PjI2KXwwLHRhJj02NzEwODg2MyxEPU1hdGguaW11bChsbixfbikscD0ocD1NYXRoLmltdWwobG4sWnQpKStNYXRoLmltdWwoT24sX24pfDAsST1NYXRoLmltdWwoT24sWnQpLEQ9RCtN''@;'; put 'put ''YXRoLmltdWwoZ3QscHQpfDAscD0ocD1wK01hdGguaW11bChndCxwbil8MCkrTWF0aC5pbXVsKFh0LHB0KXwwLEk9SStNYXRoLmltdWwoWHQscG4pfDAsRD1EK01hdGguaW11bChSdCxHZSl8MCxwPShwPXArTWF0aC5pbXVsKFJ0LFV0KXwwKStNYXRoLmltdWwoTHQsR2UpfDAsST1JK01hdGgu''@;'; put 'put ''aW11bChMdCxVdCl8MCxEPUQrTWF0aC5pbXVsKHR0LHh0KXwwLHA9KHA9cCtNYXRoLmltdWwodHQsQnQpfDApK01hdGguaW11bChLZSx4dCl8MCxJPUkrTWF0aC5pbXVsKEtlLEJ0KXwwLEQ9RCtNYXRoLmltdWwoaGUsR24pfDAscD0ocD1wK01hdGguaW11bChoZSx5bil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHdlLEduKXwwLEk9SStNYXRoLmltdWwod2UseW4pfDAsRD1EK01hdGguaW11bChGZSxycil8MCxwPShwPXArTWF0aC5pbXVsKEZlLGhyKXwwKStNYXRoLmltdWwoZ2UscnIpfDAsST1JK01hdGguaW11bChnZSxocil8MDt2YXIgTXI9KEcrKEQ9RCtNYXRoLmltdWwoamUsdm4pfDApfDApKygo''@;'; put 'put ''ODE5MSYocD0ocD1wK01hdGguaW11bChqZSxCbil8MCkrTWF0aC5pbXVsKEFlLHZuKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKEFlLEJuKXwwKSsocD4+PjEzKXwwKSsoTXI+Pj4yNil8MCxNciY9NjcxMDg4NjMsRD1NYXRoLmltdWwobG4scHQpLHA9KHA9TWF0aC5pbXVsKGxuLHBu''@;'; put 'put ''KSkrTWF0aC5pbXVsKE9uLHB0KXwwLEk9TWF0aC5pbXVsKE9uLHBuKSxEPUQrTWF0aC5pbXVsKGd0LEdlKXwwLHA9KHA9cCtNYXRoLmltdWwoZ3QsVXQpfDApK01hdGguaW11bChYdCxHZSl8MCxJPUkrTWF0aC5pbXVsKFh0LFV0KXwwLEQ9RCtNYXRoLmltdWwoUnQseHQpfDAscD0ocD1wK01h''@;'; put 'put ''dGguaW11bChSdCxCdCl8MCkrTWF0aC5pbXVsKEx0LHh0KXwwLEk9SStNYXRoLmltdWwoTHQsQnQpfDAsRD1EK01hdGguaW11bCh0dCxHbil8MCxwPShwPXArTWF0aC5pbXVsKHR0LHluKXwwKStNYXRoLmltdWwoS2UsR24pfDAsST1JK01hdGguaW11bChLZSx5bil8MCxEPUQrTWF0aC5pbXVs''@;'; put 'put ''KGhlLHJyKXwwLHA9KHA9cCtNYXRoLmltdWwoaGUsaHIpfDApK01hdGguaW11bCh3ZSxycil8MCxJPUkrTWF0aC5pbXVsKHdlLGhyKXwwO3ZhciBGcz0oRysoRD1EK01hdGguaW11bChGZSx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEZlLEJuKXwwKStNYXRoLmltdWwoZ2Us''@;'; put 'put ''dm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoZ2UsQm4pfDApKyhwPj4+MTMpfDApKyhGcz4+PjI2KXwwLEZzJj02NzEwODg2MyxEPU1hdGguaW11bChsbixHZSkscD0ocD1NYXRoLmltdWwobG4sVXQpKStNYXRoLmltdWwoT24sR2UpfDAsST1NYXRoLmltdWwoT24sVXQpLEQ9RCtN''@;'; put 'put ''YXRoLmltdWwoZ3QseHQpfDAscD0ocD1wK01hdGguaW11bChndCxCdCl8MCkrTWF0aC5pbXVsKFh0LHh0KXwwLEk9SStNYXRoLmltdWwoWHQsQnQpfDAsRD1EK01hdGguaW11bChSdCxHbil8MCxwPShwPXArTWF0aC5pbXVsKFJ0LHluKXwwKStNYXRoLmltdWwoTHQsR24pfDAsST1JK01hdGgu''@;'; put 'put ''aW11bChMdCx5bil8MCxEPUQrTWF0aC5pbXVsKHR0LHJyKXwwLHA9KHA9cCtNYXRoLmltdWwodHQsaHIpfDApK01hdGguaW11bChLZSxycil8MCxJPUkrTWF0aC5pbXVsKEtlLGhyKXwwO3ZhciAkaT0oRysoRD1EK01hdGguaW11bChoZSx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5p''@;'; put 'put ''bXVsKGhlLEJuKXwwKStNYXRoLmltdWwod2Usdm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwod2UsQm4pfDApKyhwPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxEPU1hdGguaW11bChsbix4dCkscD0ocD1NYXRoLmltdWwobG4sQnQpKStNYXRoLmltdWwoT24seHQp''@;'; put 'put ''fDAsST1NYXRoLmltdWwoT24sQnQpLEQ9RCtNYXRoLmltdWwoZ3QsR24pfDAscD0ocD1wK01hdGguaW11bChndCx5bil8MCkrTWF0aC5pbXVsKFh0LEduKXwwLEk9SStNYXRoLmltdWwoWHQseW4pfDAsRD1EK01hdGguaW11bChSdCxycil8MCxwPShwPXArTWF0aC5pbXVsKFJ0LGhyKXwwKStN''@;'; put 'put ''YXRoLmltdWwoTHQscnIpfDAsST1JK01hdGguaW11bChMdCxocil8MDt2YXIgX3M9KEcrKEQ9RCtNYXRoLmltdWwodHQsdm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bCh0dCxCbil8MCkrTWF0aC5pbXVsKEtlLHZuKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKEtlLEJu''@;'; put 'put ''KXwwKSsocD4+PjEzKXwwKSsoX3M+Pj4yNil8MCxfcyY9NjcxMDg4NjMsRD1NYXRoLmltdWwobG4sR24pLHA9KHA9TWF0aC5pbXVsKGxuLHluKSkrTWF0aC5pbXVsKE9uLEduKXwwLEk9TWF0aC5pbXVsKE9uLHluKSxEPUQrTWF0aC5pbXVsKGd0LHJyKXwwLHA9KHA9cCtNYXRoLmltdWwoZ3Qs''@;'; put 'put ''aHIpfDApK01hdGguaW11bChYdCxycil8MCxJPUkrTWF0aC5pbXVsKFh0LGhyKXwwO3ZhciBqcz0oRysoRD1EK01hdGguaW11bChSdCx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFJ0LEJuKXwwKStNYXRoLmltdWwoTHQsdm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmlt''@;'; put 'put ''dWwoTHQsQm4pfDApKyhwPj4+MTMpfDApKyhqcz4+PjI2KXwwLGpzJj02NzEwODg2MyxEPU1hdGguaW11bChsbixycikscD0ocD1NYXRoLmltdWwobG4saHIpKStNYXRoLmltdWwoT24scnIpfDAsST1NYXRoLmltdWwoT24saHIpO3ZhciBDbD0oRysoRD1EK01hdGguaW11bChndCx2bil8MCl8''@;'; put 'put ''MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGd0LEJuKXwwKStNYXRoLmltdWwoWHQsdm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoWHQsQm4pfDApKyhwPj4+MTMpfDApKyhDbD4+PjI2KXwwLENsJj02NzEwODg2Mzt2YXIgVGk9KEcrKEQ9TWF0aC5pbXVsKGxuLHZuKSl8MCkr''@;'; put 'put ''KCg4MTkxJihwPShwPU1hdGguaW11bChsbixCbikpK01hdGguaW11bChPbix2bil8MCkpPDwxMyl8MDtyZXR1cm4gRz0oKEk9TWF0aC5pbXVsKE9uLEJuKSkrKHA+Pj4xMyl8MCkrKFRpPj4+MjYpfDAsVGkmPTY3MTA4ODYzLEtbMF09amEsS1sxXT1qbyxLWzJdPVhyLEtbM109ZWEsS1s0XT1y''@;'; put 'put ''YSxLWzVdPWNhLEtbNl09Q2ksS1s3XT1obyxLWzhdPU1hLEtbOV09a3MsS1sxMF09QmksS1sxMV09dGEsS1sxMl09TXIsS1sxM109RnMsS1sxNF09JGksS1sxNV09X3MsS1sxNl09anMsS1sxN109Q2wsS1sxOF09VGksMCE9PUcmJihLWzE5XT1HLGsubGVuZ3RoKyspLGt9O2Z1bmN0aW9uIFko''@;'; put 'put ''WCxmLGIpe3JldHVybihuZXcgRikubXVscChYLGYsYil9ZnVuY3Rpb24gRihYLGYpe3RoaXMueD1YLHRoaXMueT1mfU1hdGguaW11bHx8KE49Viksdi5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZixiKXt2YXIgayxNPXRoaXMubGVuZ3RoK2YubGVuZ3RoO3JldHVybiBrPTEwPT09dGhpcy5s''@;'; put 'put ''ZW5ndGgmJjEwPT09Zi5sZW5ndGg/Tih0aGlzLGYsYik6TTw2Mz9WKHRoaXMsZixiKTpNPDEwMjQ/ZnVuY3Rpb24geihYLGYsYil7Yi5uZWdhdGl2ZT1mLm5lZ2F0aXZlXlgubmVnYXRpdmUsYi5sZW5ndGg9WC5sZW5ndGgrZi5sZW5ndGg7Zm9yKHZhciBrPTAsTT0wLEI9MDtCPGIubGVuZ3Ro''@;'; put 'put ''LTE7QisrKXt2YXIgSz1NO009MDtmb3IodmFyIEc9NjcxMDg4NjMmayxEPU1hdGgubWluKEIsZi5sZW5ndGgtMSkscD1NYXRoLm1heCgwLEItWC5sZW5ndGgrMSk7cDw9RDtwKyspe3ZhciBfZT0oMHxYLndvcmRzW0ItcF0pKigwfGYud29yZHNbcF0pLFBlPTY3MTA4ODYzJl9lO0c9NjcxMDg4''@;'; put 'put ''NjMmKFBlPVBlK0d8MCksTSs9KEs9KEs9SysoX2UvNjcxMDg4NjR8MCl8MCkrKFBlPj4+MjYpfDApPj4+MjYsSyY9NjcxMDg4NjN9Yi53b3Jkc1tCXT1HLGs9SyxLPU19cmV0dXJuIDAhPT1rP2Iud29yZHNbQl09azpiLmxlbmd0aC0tLGIuc3RyaXAoKX0odGhpcyxmLGIpOlkodGhpcyxmLGIp''@;'; put 'put ''LGt9LEYucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZil7Zm9yKHZhciBiPW5ldyBBcnJheShmKSxrPXYucHJvdG90eXBlLl9jb3VudEJpdHMoZiktMSxNPTA7TTxmO00rKyliW01dPXRoaXMucmV2QmluKE0sayxmKTtyZXR1cm4gYn0sRi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGYs''@;'; put 'put ''YixrKXtpZigwPT09Znx8Zj09PWstMSlyZXR1cm4gZjtmb3IodmFyIE09MCxCPTA7QjxiO0IrKylNfD0oMSZmKTw8Yi1CLTEsZj4+PTE7cmV0dXJuIE19LEYucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZixiLGssTSxCLEspe2Zvcih2YXIgRz0wO0c8SztHKyspTVtHXT1iW2ZbR11dLEJb''@;'; put 'put ''R109a1tmW0ddXX0sRi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGYsYixrLE0sQixLKXt0aGlzLnBlcm11dGUoSyxmLGIsayxNLEIpO2Zvcih2YXIgRz0xO0c8QjtHPDw9MSlmb3IodmFyIEQ9Rzw8MSxwPU1hdGguY29zKDIqTWF0aC5QSS9EKSxJPU1hdGguc2luKDIqTWF0aC5QSS9E''@;'; put 'put ''KSx1ZT0wO3VlPEI7dWUrPUQpZm9yKHZhciBuZT1wLF9lPUksUGU9MDtQZTxHO1BlKyspe3ZhciBvdD1rW3VlK1BlXSxsdD1NW3VlK1BlXSxkdD1rW3VlK1BlK0ddLFJlPU1bdWUrUGUrR10sYWU9bmUqZHQtX2UqUmU7UmU9bmUqUmUrX2UqZHQsa1t1ZStQZV09b3QrKGR0PWFlKSxNW3VlK1Bl''@;'; put 'put ''XT1sdCtSZSxrW3VlK1BlK0ddPW90LWR0LE1bdWUrUGUrR109bHQtUmUsUGUhPT1EJiYoYWU9cCpuZS1JKl9lLF9lPXAqX2UrSSpuZSxuZT1hZSl9fSxGLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihmLGIpe3ZhciBrPTF8TWF0aC5tYXgoYixmKSxNPTEmayxCPTA7Zm9yKGs9ay8y''@;'; put 'put ''fDA7aztrPj4+PTEpQisrO3JldHVybiAxPDxCKzErTX0sRi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGYsYixrKXtpZighKGs8PTEpKWZvcih2YXIgTT0wO008ay8yO00rKyl7dmFyIEI9ZltNXTtmW01dPWZbay1NLTFdLGZbay1NLTFdPUIsQj1iW01dLGJbTV09LWJbay1NLTFdLGJb''@;'; put 'put ''ay1NLTFdPS1CfX0sRi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGYsYil7Zm9yKHZhciBrPTAsTT0wO008Yi8yO00rKyl7dmFyIEI9ODE5MipNYXRoLnJvdW5kKGZbMipNKzFdL2IpK01hdGgucm91bmQoZlsyKk1dL2IpK2s7ZltNXT02NzEwODg2MyZCLGs9Qjw2NzEwODg2ND8w''@;'; put 'put ''OkIvNjcxMDg4NjR8MH1yZXR1cm4gZn0sRi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihmLGIsayxNKXtmb3IodmFyIEI9MCxLPTA7SzxiO0srKylrWzIqS109ODE5MSYoQis9MHxmW0tdKSxrWzIqSysxXT04MTkxJihCPj4+PTEzKSxCPj4+PTEzO2ZvcihLPTIqYjtLPE07KytLKWtb''@;'; put 'put ''S109MDtzKDA9PT1CKSxzKCEoLTgxOTImQikpfSxGLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGYpe2Zvcih2YXIgYj1uZXcgQXJyYXkoZiksaz0wO2s8ZjtrKyspYltrXT0wO3JldHVybiBifSxGLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGYsYixrKXt2YXIgTT0yKnRoaXMuZ3Vlc3NMZW4x''@;'; put 'put ''M2IoZi5sZW5ndGgsYi5sZW5ndGgpLEI9dGhpcy5tYWtlUkJUKE0pLEs9dGhpcy5zdHViKE0pLEc9bmV3IEFycmF5KE0pLEQ9bmV3IEFycmF5KE0pLHA9bmV3IEFycmF5KE0pLEk9bmV3IEFycmF5KE0pLHVlPW5ldyBBcnJheShNKSxuZT1uZXcgQXJyYXkoTSksX2U9ay53b3JkcztfZS5sZW5n''@;'; put 'put ''dGg9TSx0aGlzLmNvbnZlcnQxM2IoZi53b3JkcyxmLmxlbmd0aCxHLE0pLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEksTSksdGhpcy50cmFuc2Zvcm0oRyxLLEQscCxNLEIpLHRoaXMudHJhbnNmb3JtKEksSyx1ZSxuZSxNLEIpO2Zvcih2YXIgUGU9MDtQZTxNO1BlKyspe3Zh''@;'; put 'put ''ciBvdD1EW1BlXSp1ZVtQZV0tcFtQZV0qbmVbUGVdO3BbUGVdPURbUGVdKm5lW1BlXStwW1BlXSp1ZVtQZV0sRFtQZV09b3R9cmV0dXJuIHRoaXMuY29uanVnYXRlKEQscCxNKSx0aGlzLnRyYW5zZm9ybShELHAsX2UsSyxNLEIpLHRoaXMuY29uanVnYXRlKF9lLEssTSksdGhpcy5ub3JtYWxp''@;'; put 'put ''emUxM2IoX2UsTSksay5uZWdhdGl2ZT1mLm5lZ2F0aXZlXmIubmVnYXRpdmUsay5sZW5ndGg9Zi5sZW5ndGgrYi5sZW5ndGgsay5zdHJpcCgpfSx2LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZil7dmFyIGI9bmV3IHYobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3Ro''@;'; put 'put ''K2YubGVuZ3RoKSx0aGlzLm11bFRvKGYsYil9LHYucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZil7dmFyIGI9bmV3IHYobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2YubGVuZ3RoKSxZKHRoaXMsZixiKX0sdi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihmKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGYsdGhpcyl9LHYucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGYpe3MoIm51bWJlciI9PXR5cGVvZiBmKSxzKGY8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLGs9MDtrPHRoaXMubGVuZ3RoO2srKyl7dmFyIE09KDB8dGhpcy53b3Jkc1trXSkqZixCPSg2''@;'; put 'put ''NzEwODg2MyZNKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPU0vNjcxMDg4NjR8MCxiKz1CPj4+MjYsdGhpcy53b3Jkc1trXT02NzEwODg2MyZCfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNba109Yix0aGlzLmxlbmd0aCsrKSwwPT09ZiYmKHRoaXMubGVuZ3RoPTEsdGhpcy5fbm9ybVNpZ24o''@;'; put 'put ''KSksdGhpc30sdi5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGYpfSx2LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHYucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRo''@;'; put 'put ''aXMuY2xvbmUoKSl9LHYucHJvdG90eXBlLnBvdz1mdW5jdGlvbihmKXt2YXIgYj1mdW5jdGlvbiBIKFgpe2Zvcih2YXIgZj1uZXcgQXJyYXkoWC5iaXRMZW5ndGgoKSksYj0wO2I8Zi5sZW5ndGg7YisrKXt2YXIgTT1iJTI2O2ZbYl09KFgud29yZHNbYi8yNnwwXSYxPDxNKT4+Pk19cmV0dXJu''@;'; put 'put ''IGZ9KGYpO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHYoMSk7Zm9yKHZhciBrPXRoaXMsTT0wO008Yi5sZW5ndGgmJjA9PT1iW01dO00rKyxrPWsuc3FyKCkpO2lmKCsrTTxiLmxlbmd0aClmb3IodmFyIEI9ay5zcXIoKTtNPGIubGVuZ3RoO00rKyxCPUIuc3FyKCkpMCE9PWJbTV0mJihr''@;'; put 'put ''PWsubXVsKEIpKTtyZXR1cm4ga30sdi5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGYpe3MoIm51bWJlciI9PXR5cGVvZiBmJiZmPj0wKTt2YXIgQixiPWYlMjYsaz0oZi1iKS8yNixNPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEs9MDtmb3IoQj0wO0I8dGhpcy5sZW5n''@;'; put 'put ''dGg7QisrKXt2YXIgRz10aGlzLndvcmRzW0JdJk07dGhpcy53b3Jkc1tCXT0oMHx0aGlzLndvcmRzW0JdKS1HPDxifEssSz1HPj4+MjYtYn1LJiYodGhpcy53b3Jkc1tCXT1LLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1rKXtmb3IoQj10aGlzLmxlbmd0aC0xO0I+PTA7Qi0tKXRoaXMud29yZHNb''@;'; put 'put ''QitrXT10aGlzLndvcmRzW0JdO2ZvcihCPTA7QjxrO0IrKyl0aGlzLndvcmRzW0JdPTA7dGhpcy5sZW5ndGgrPWt9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZil7cmV0dXJuIHMoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGYpfSx2LnBy''@;'; put 'put ''b3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZixiLGspe3ZhciBNO3MoIm51bWJlciI9PXR5cGVvZiBmJiZmPj0wKSxNPWI/KGItYiUyNikvMjY6MDt2YXIgQj1mJTI2LEs9TWF0aC5taW4oKGYtQikvMjYsdGhpcy5sZW5ndGgpLEc9NjcxMDg4NjNeNjcxMDg4NjM+Pj5CPDxCLEQ9aztpZihNLT1L''@;'; put 'put ''LE09TWF0aC5tYXgoMCxNKSxEKXtmb3IodmFyIHA9MDtwPEs7cCsrKUQud29yZHNbcF09dGhpcy53b3Jkc1twXTtELmxlbmd0aD1LfWlmKDAhPT1LKWlmKHRoaXMubGVuZ3RoPkspZm9yKHRoaXMubGVuZ3RoLT1LLHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPXRoaXMud29y''@;'; put 'put ''ZHNbcCtLXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBJPTA7Zm9yKHA9dGhpcy5sZW5ndGgtMTtwPj0wJiYoMCE9PUl8fHA+PU0pO3AtLSl7dmFyIHVlPTB8dGhpcy53b3Jkc1twXTt0aGlzLndvcmRzW3BdPUk8PDI2LUJ8dWU+Pj5CLEk9dWUmR31yZXR1cm4gRCYm''@;'; put 'put ''MCE9PUkmJihELndvcmRzW0QubGVuZ3RoKytdPUkpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGYsYixrKXtyZXR1cm4gcygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNo''@;'; put 'put ''cm4oZixiLGspfSx2LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZil9LHYucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGYpfSx2LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGYpe3JldHVy''@;'; put 'put ''biB0aGlzLmNsb25lKCkuaXNocm4oZil9LHYucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGYpfSx2LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihmKXtzKCJudW1iZXIiPT10eXBlb2YgZiYmZj49MCk7dmFyIGI9ZiUyNixrPShmLWIpLzI2''@;'; put 'put ''O3JldHVybiEodGhpcy5sZW5ndGg8PWt8fCEodGhpcy53b3Jkc1trXSYxPDxiKSl9LHYucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihmKXtzKCJudW1iZXIiPT10eXBlb2YgZiYmZj49MCk7dmFyIGI9ZiUyNixrPShmLWIpLzI2O3JldHVybiBzKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24g''@;'; put 'put ''d29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9az90aGlzOigwIT09YiYmaysrLHRoaXMubGVuZ3RoPU1hdGgubWluKGssdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSww''@;'; put 'put ''PT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpKX0sdi5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZil9LHYucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGYpe3JldHVybiBzKCJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2YgZikscyhmPDY3MTA4ODY0KSxmPDA/dGhpcy5pc3VibigtZik6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxmPyh0aGlzLndvcmRzWzBdPWYtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0''@;'; put 'put ''aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihmKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZil9LHYucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihmKXt0aGlzLndvcmRzWzBdKz1mO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl0+PTY3MTA4ODY0''@;'; put 'put ''O2IrKyl0aGlzLndvcmRzW2JdLT02NzEwODg2NCxiPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2IrMV09MTp0aGlzLndvcmRzW2IrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYisxKSx0aGlzfSx2LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihmKXtp''@;'; put 'put ''ZihzKCJudW1iZXIiPT10eXBlb2YgZikscyhmPDY3MTA4ODY0KSxmPDApcmV0dXJuIHRoaXMuaWFkZG4oLWYpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihmKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1mLDE9''@;'; put 'put ''PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXTwwO2IrKyl0aGlzLndvcmRzW2JdKz02NzEwODg2NCx0aGlzLndvcmRzW2Ir''@;'; put 'put ''MV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGYpfSx2LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZil9LHYucHJvdG90eXBlLmlhYnM9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHYucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx2LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZixiLGspe3ZhciBCO3RoaXMuX2V4cGFuZChmLmxlbmd0aCtrKTt2''@;'; put 'put ''YXIgSyxHPTA7Zm9yKEI9MDtCPGYubGVuZ3RoO0IrKyl7Sz0oMHx0aGlzLndvcmRzW0Ira10pK0c7dmFyIEQ9KDB8Zi53b3Jkc1tCXSkqYjtHPSgoSy09NjcxMDg4NjMmRCk+PjI2KS0oRC82NzEwODg2NHwwKSx0aGlzLndvcmRzW0Ira109NjcxMDg4NjMmS31mb3IoO0I8dGhpcy5sZW5ndGgt''@;'; put 'put ''aztCKyspRz0oSz0oMHx0aGlzLndvcmRzW0Ira10pK0cpPj4yNix0aGlzLndvcmRzW0Ira109NjcxMDg4NjMmSztpZigwPT09RylyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihzKC0xPT09RyksRz0wLEI9MDtCPHRoaXMubGVuZ3RoO0IrKylHPShLPS0oMHx0aGlzLndvcmRzW0JdKStHKT4+MjYs''@;'; put 'put ''dGhpcy53b3Jkc1tCXT02NzEwODg2MyZLO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihmLGIpe3ZhciBrLE09dGhpcy5jbG9uZSgpLEI9ZixLPTB8Qi53b3Jkc1tCLmxlbmd0aC0xXTswIT0oaz0yNi10aGlzLl9jb3Vu''@;'; put 'put ''dEJpdHMoSykpJiYoQj1CLnVzaGxuKGspLE0uaXVzaGxuKGspLEs9MHxCLndvcmRzW0IubGVuZ3RoLTFdKTt2YXIgcCxEPU0ubGVuZ3RoLUIubGVuZ3RoO2lmKCJtb2QiIT09Yil7KHA9bmV3IHYobnVsbCkpLmxlbmd0aD1EKzEscC53b3Jkcz1uZXcgQXJyYXkocC5sZW5ndGgpO2Zvcih2YXIg''@;'; put 'put ''ST0wO0k8cC5sZW5ndGg7SSsrKXAud29yZHNbSV09MH12YXIgdWU9TS5jbG9uZSgpLl9pc2hsbnN1Ym11bChCLDEsRCk7MD09PXVlLm5lZ2F0aXZlJiYoTT11ZSxwJiYocC53b3Jkc1tEXT0xKSk7Zm9yKHZhciBuZT1ELTE7bmU+PTA7bmUtLSl7dmFyIF9lPTY3MTA4ODY0KigwfE0ud29yZHNb''@;'; put 'put ''Qi5sZW5ndGgrbmVdKSsoMHxNLndvcmRzW0IubGVuZ3RoK25lLTFdKTtmb3IoX2U9TWF0aC5taW4oX2UvS3wwLDY3MTA4ODYzKSxNLl9pc2hsbnN1Ym11bChCLF9lLG5lKTswIT09TS5uZWdhdGl2ZTspX2UtLSxNLm5lZ2F0aXZlPTAsTS5faXNobG5zdWJtdWwoQiwxLG5lKSxNLmlzWmVybygp''@;'; put 'put ''fHwoTS5uZWdhdGl2ZV49MSk7cCYmKHAud29yZHNbbmVdPV9lKX1yZXR1cm4gcCYmcC5zdHJpcCgpLE0uc3RyaXAoKSwiZGl2IiE9PWImJjAhPT1rJiZNLml1c2hybihrKSx7ZGl2OnB8fG51bGwsbW9kOk19fSx2LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZixiLGspe3JldHVybiBzKCFm''@;'; put 'put ''LmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHYoMCksbW9kOm5ldyB2KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWYubmVnYXRpdmU/KEs9dGhpcy5uZWcoKS5kaXZtb2QoZixiKSwibW9kIiE9PWImJihNPUsuZGl2Lm5lZygpKSwiZGl2IiE9PWImJihCPUsubW9kLm5lZygp''@;'; put 'put ''LGsmJjAhPT1CLm5lZ2F0aXZlJiZCLmlhZGQoZikpLHtkaXY6TSxtb2Q6Qn0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zi5uZWdhdGl2ZT8oSz10aGlzLmRpdm1vZChmLm5lZygpLGIpLCJtb2QiIT09YiYmKE09Sy5kaXYubmVnKCkpLHtkaXY6TSxtb2Q6Sy5tb2R9KTowIT09KHRoaXMubmVn''@;'; put 'put ''YXRpdmUmZi5uZWdhdGl2ZSk/KEs9dGhpcy5uZWcoKS5kaXZtb2QoZi5uZWcoKSxiKSwiZGl2IiE9PWImJihCPUsubW9kLm5lZygpLGsmJjAhPT1CLm5lZ2F0aXZlJiZCLmlzdWIoZikpLHtkaXY6Sy5kaXYsbW9kOkJ9KTpmLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZik8MD97ZGl2''@;'; put 'put ''Om5ldyB2KDApLG1vZDp0aGlzfToxPT09Zi5sZW5ndGg/ImRpdiI9PT1iP3tkaXY6dGhpcy5kaXZuKGYud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWI/e2RpdjpudWxsLG1vZDpuZXcgdih0aGlzLm1vZG4oZi53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihmLndvcmRzWzBdKSxtb2Q6''@;'; put 'put ''bmV3IHYodGhpcy5tb2RuKGYud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihmLGIpO3ZhciBNLEIsS30sdi5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmRpdm1vZChmLCJkaXYiLCExKS5kaXZ9LHYucHJvdG90eXBlLm1vZD1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5k''@;'; put 'put ''aXZtb2QoZiwibW9kIiwhMSkubW9kfSx2LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmRpdm1vZChmLCJtb2QiLCEwKS5tb2R9LHYucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGYpe3ZhciBiPXRoaXMuZGl2bW9kKGYpO2lmKGIubW9kLmlzWmVybygpKXJldHVy''@;'; put 'put ''biBiLmRpdjt2YXIgaz1iLm1vZC5hYnMoKSxNPWYuYWJzKCkuaXVzaHJuKDEpLEI9MSZmLndvcmRzWzBdLEs9ay5jbXAoTSk7aWYoSzwwfHwxPT09QiYmMD09PUspcmV0dXJuIGIuZGl2O3ZhciBHPW5ldyB2KDEpO3JldHVybiBHLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmVeZi5uZWdhdGl2ZSxi''@;'; put 'put ''LmRpdi5pYWRkKEcpfSx2LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGYpe3MoZjw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJWYsaz0wLE09dGhpcy5sZW5ndGgtMTtNPj0wO00tLSlrPShiKmsrKDB8dGhpcy53b3Jkc1tNXSkpJWY7cmV0dXJuIGt9LHYucHJvdG90eXBlLmlkaXZuPWZ1''@;'; put 'put ''bmN0aW9uKGYpe3MoZjw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLGs9dGhpcy5sZW5ndGgtMTtrPj0wO2stLSl7dmFyIE09KDB8dGhpcy53b3Jkc1trXSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW2tdPU0vZnwwLGI9TSVmfXJldHVybiB0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLmRpdm49ZnVu''@;'; put 'put ''Y3Rpb24oZil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihmKX0sdi5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihmKXtzKDA9PT1mLm5lZ2F0aXZlKSxzKCFmLmlzWmVybygpKTt2YXIgYj10aGlzLGs9Zi5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKGYpOmIuY2xvbmUoKTtmb3Io''@;'; put 'put ''dmFyIE09bmV3IHYoMSksQj1uZXcgdigwKSxLPW5ldyB2KDApLEc9bmV3IHYoMSksRD0wO2IuaXNFdmVuKCkmJmsuaXNFdmVuKCk7KWIuaXVzaHJuKDEpLGsuaXVzaHJuKDEpLCsrRDtmb3IodmFyIHA9ay5jbG9uZSgpLEk9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciB1ZT0wLG5l''@;'; put 'put ''PTE7MD09PShiLndvcmRzWzBdJm5lKSYmdWU8MjY7Kyt1ZSxuZTw8PTEpO2lmKHVlPjApZm9yKGIuaXVzaHJuKHVlKTt1ZS0tID4wOykoTS5pc09kZCgpfHxCLmlzT2RkKCkpJiYoTS5pYWRkKHApLEIuaXN1YihJKSksTS5pdXNocm4oMSksQi5pdXNocm4oMSk7Zm9yKHZhciBfZT0wLFBlPTE7''@;'; put 'put ''MD09PShrLndvcmRzWzBdJlBlKSYmX2U8MjY7KytfZSxQZTw8PTEpO2lmKF9lPjApZm9yKGsuaXVzaHJuKF9lKTtfZS0tID4wOykoSy5pc09kZCgpfHxHLmlzT2RkKCkpJiYoSy5pYWRkKHApLEcuaXN1YihJKSksSy5pdXNocm4oMSksRy5pdXNocm4oMSk7Yi5jbXAoayk+PTA/KGIuaXN1Yihr''@;'; put 'put ''KSxNLmlzdWIoSyksQi5pc3ViKEcpKTooay5pc3ViKGIpLEsuaXN1YihNKSxHLmlzdWIoQikpfXJldHVybnthOkssYjpHLGdjZDprLml1c2hsbihEKX19LHYucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihmKXtzKDA9PT1mLm5lZ2F0aXZlKSxzKCFmLmlzWmVybygpKTt2YXIgdWUsYj10aGlz''@;'; put 'put ''LGs9Zi5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKGYpOmIuY2xvbmUoKTtmb3IodmFyIE09bmV3IHYoMSksQj1uZXcgdigwKSxLPWsuY2xvbmUoKTtiLmNtcG4oMSk+MCYmay5jbXBuKDEpPjA7KXtmb3IodmFyIEc9MCxEPTE7MD09PShiLndvcmRzWzBdJkQpJiZHPDI2OysrRyxE''@;'; put 'put ''PDw9MSk7aWYoRz4wKWZvcihiLml1c2hybihHKTtHLS0gPjA7KU0uaXNPZGQoKSYmTS5pYWRkKEspLE0uaXVzaHJuKDEpO2Zvcih2YXIgcD0wLEk9MTswPT09KGsud29yZHNbMF0mSSkmJnA8MjY7KytwLEk8PD0xKTtpZihwPjApZm9yKGsuaXVzaHJuKHApO3AtLSA+MDspQi5pc09kZCgpJiZC''@;'; put 'put ''LmlhZGQoSyksQi5pdXNocm4oMSk7Yi5jbXAoayk+PTA/KGIuaXN1YihrKSxNLmlzdWIoQikpOihrLmlzdWIoYiksQi5pc3ViKE0pKX1yZXR1cm4odWU9MD09PWIuY21wbigxKT9NOkIpLmNtcG4oMCk8MCYmdWUuaWFkZChmKSx1ZX0sdi5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGYpe2lmKHRo''@;'; put 'put ''aXMuaXNaZXJvKCkpcmV0dXJuIGYuYWJzKCk7aWYoZi5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCksaz1mLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLGsubmVnYXRpdmU9MDtmb3IodmFyIE09MDtiLmlzRXZlbigpJiZrLmlzRXZlbigpO00rKyliLml1c2hybigx''@;'; put 'put ''KSxrLml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDtrLmlzRXZlbigpOylrLml1c2hybigxKTt2YXIgQj1iLmNtcChrKTtpZihCPDApe3ZhciBLPWI7Yj1rLGs9S31lbHNlIGlmKDA9PT1CfHwwPT09ay5jbXBuKDEpKWJyZWFrO2IuaXN1YihrKX1y''@;'; put 'put ''ZXR1cm4gay5pdXNobG4oTSl9LHYucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuZWdjZChmKS5hLnVtb2QoZil9LHYucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdi5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx2LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZmfSx2LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihmKXtzKCJudW1iZXIiPT10eXBlb2YgZik7dmFyIGI9ZiUyNixrPShmLWIpLzI2LE09MTw8YjtpZih0''@;'; put 'put ''aGlzLmxlbmd0aDw9aylyZXR1cm4gdGhpcy5fZXhwYW5kKGsrMSksdGhpcy53b3Jkc1trXXw9TSx0aGlzO2Zvcih2YXIgQj1NLEs9azswIT09QiYmSzx0aGlzLmxlbmd0aDtLKyspe3ZhciBHPTB8dGhpcy53b3Jkc1tLXTtCPShHKz1CKT4+PjI2LHRoaXMud29yZHNbS109RyY9NjcxMDg4NjN9''@;'; put 'put ''cmV0dXJuIDAhPT1CJiYodGhpcy53b3Jkc1tLXT1CLHRoaXMubGVuZ3RoKyspLHRoaXN9LHYucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx2LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGYpe3ZhciBrLGI9Zjww''@;'; put 'put ''O2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlrPTE7ZWxzZXtiJiYoZj0tZikscyhmPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgTT0wfHRoaXMu''@;'; put 'put ''d29yZHNbMF07az1NPT09Zj8wOk08Zj8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1rOmt9LHYucHJvdG90eXBlLmNtcD1mdW5jdGlvbihmKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWYubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1mLm5l''@;'; put 'put ''Z2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChmKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx2LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGYpe2lmKHRoaXMubGVuZ3RoPmYubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGYubGVuZ3RoKXJldHVybi0xO2Zv''@;'; put 'put ''cih2YXIgYj0wLGs9dGhpcy5sZW5ndGgtMTtrPj0wO2stLSl7dmFyIE09MHx0aGlzLndvcmRzW2tdLEI9MHxmLndvcmRzW2tdO2lmKE0hPT1CKXtNPEI/Yj0tMTpNPkImJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdi5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGYpe3JldHVybiAxPT09dGhpcy5j''@;'; put 'put ''bXBuKGYpfSx2LnByb3RvdHlwZS5ndD1mdW5jdGlvbihmKXtyZXR1cm4gMT09PXRoaXMuY21wKGYpfSx2LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNtcG4oZik+PTB9LHYucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbXAoZik+PTB9LHYu''@;'; put 'put ''cHJvdG90eXBlLmx0bj1mdW5jdGlvbihmKXtyZXR1cm4tMT09PXRoaXMuY21wbihmKX0sdi5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZil7cmV0dXJuLTE9PT10aGlzLmNtcChmKX0sdi5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbXBuKGYpPD0wfSx2LnByb3RvdHlw''@;'; put 'put ''ZS5sdGU9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuY21wKGYpPD0wfSx2LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZil7cmV0dXJuIDA9PT10aGlzLmNtcG4oZil9LHYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGYpe3JldHVybiAwPT09dGhpcy5jbXAoZil9LHYucmVkPWZ1bmN0aW9uKGYpe3Jl''@;'; put 'put ''dHVybiBuZXcga2UoZil9LHYucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGYpe3JldHVybiBzKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHMoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZi5jb252''@;'; put 'put ''ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGYpfSx2LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdi5wcm90''@;'; put 'put ''b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLnJlZD1mLHRoaXN9LHYucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGYpe3JldHVybiBzKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGYpfSx2''@;'; put 'put ''LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZil7cmV0dXJuIHModGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxmKX0sdi5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihmKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkSUFk''@;'; put 'put ''ZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZil9LHYucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihmKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGYpfSx2''@;'; put 'put ''LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGYpe3JldHVybiBzKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxmKX0sdi5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGYpe3JldHVybiBzKHRoaXMucmVkLCJyZWRT''@;'; put 'put ''aGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZil9LHYucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihmKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMs''@;'; put 'put ''ZiksdGhpcy5yZWQubXVsKHRoaXMsZil9LHYucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZil7cmV0dXJuIHModGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGYpLHRoaXMucmVkLmltdWwodGhpcyxmKX0sdi5w''@;'; put 'put ''cm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHYucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''cyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx2LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdi5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBzKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJp''@;'; put 'put ''ZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHYucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBzKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx2LnBy''@;'; put 'put ''b3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZil7cmV0dXJuIHModGhpcy5yZWQmJiFmLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxmKX07dmFyIFc9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpu''@;'; put 'put ''dWxsfTtmdW5jdGlvbiBxKFgsZil7dGhpcy5uYW1lPVgsdGhpcy5wPW5ldyB2KGYsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB2KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiByZSgpe3EuY2FsbCh0''@;'; put 'put ''aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe3EuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAg''@;'; put 'put ''MDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBDZSgpe3EuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBJZSgpe3EuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBrZShYKXtpZigic3RyaW5nIj09dHlwZW9mIFgpe3ZhciBmPXYuX3ByaW1lKFgpO3RoaXMubT1mLnAsdGhpcy5wcmltZT1mfWVsc2UgcyhYLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdy''@;'; put 'put ''ZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVgsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHFlKFgpe2tlLmNhbGwodGhpcyxYKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB2KDEp''@;'; put 'put ''Lml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhp''@;'; put 'put ''cy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXEucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZj1uZXcgdihudWxsKTtyZXR1cm4gZi53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGZ9LHEucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZil7''@;'; put 'put ''dmFyIGssYj1mO2Rve3RoaXMuc3BsaXQoYix0aGlzLnRtcCksaz0oYj0oYj10aGlzLmltdWxLKGIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoaz50aGlzLm4pO3ZhciBNPWs8dGhpcy5uPy0xOmIudWNtcCh0aGlzLnApO3JldHVybiAwPT09TT8oYi53b3Jkc1swXT0wLGIu''@;'; put 'put ''bGVuZ3RoPTEpOk0+MD9iLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1iLnN0cmlwP2Iuc3RyaXAoKTpiLl9zdHJpcCgpLGJ9LHEucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGYsYil7Zi5pdXNocm4odGhpcy5uLDAsYil9LHEucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGYpe3JldHVybiBmLmlt''@;'; put 'put ''dWwodGhpcy5rKX0sQShyZSxxKSxyZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZixiKXtmb3IodmFyIGs9NDE5NDMwMyxNPU1hdGgubWluKGYubGVuZ3RoLDkpLEI9MDtCPE07QisrKWIud29yZHNbQl09Zi53b3Jkc1tCXTtpZihiLmxlbmd0aD1NLGYubGVuZ3RoPD05KXJldHVybiBmLndv''@;'; put 'put ''cmRzWzBdPTAsdm9pZChmLmxlbmd0aD0xKTt2YXIgSz1mLndvcmRzWzldO2ZvcihiLndvcmRzW2IubGVuZ3RoKytdPUsmayxCPTEwO0I8Zi5sZW5ndGg7QisrKXt2YXIgRz0wfGYud29yZHNbQl07Zi53b3Jkc1tCLTEwXT0oRyZrKTw8NHxLPj4+MjIsSz1HfWYud29yZHNbQi0xMF09Sz4+Pj0y''@;'; put 'put ''MixmLmxlbmd0aC09MD09PUsmJmYubGVuZ3RoPjEwPzEwOjl9LHJlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihmKXtmLndvcmRzW2YubGVuZ3RoXT0wLGYud29yZHNbZi5sZW5ndGgrMV09MCxmLmxlbmd0aCs9Mjtmb3IodmFyIGI9MCxrPTA7azxmLmxlbmd0aDtrKyspe3ZhciBNPTB8Zi53''@;'; put 'put ''b3Jkc1trXTtmLndvcmRzW2tdPTY3MTA4ODYzJihiKz05NzcqTSksYj02NCpNKyhiLzY3MTA4ODY0fDApfXJldHVybiAwPT09Zi53b3Jkc1tmLmxlbmd0aC0xXSYmKGYubGVuZ3RoLS0sMD09PWYud29yZHNbZi5sZW5ndGgtMV0mJmYubGVuZ3RoLS0pLGZ9LEEobWUscSksQShDZSxxKSxBKEll''@;'; put 'put ''LHEpLEllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihmKXtmb3IodmFyIGI9MCxrPTA7azxmLmxlbmd0aDtrKyspe3ZhciBNPTE5KigwfGYud29yZHNba10pK2IsQj02NzEwODg2MyZNO00+Pj49MjYsZi53b3Jkc1trXT1CLGI9TX1yZXR1cm4gMCE9PWImJihmLndvcmRzW2YubGVuZ3RoKytd''@;'; put 'put ''PWIpLGZ9LHYuX3ByaW1lPWZ1bmN0aW9uKGYpe2lmKFdbZl0pcmV0dXJuIFdbZl07dmFyIGI7aWYoImsyNTYiPT09ZiliPW5ldyByZTtlbHNlIGlmKCJwMjI0Ij09PWYpYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1mKWI9bmV3IENlO2Vsc2V7aWYoInAyNTUxOSIhPT1mKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiVW5rbm93biBwcmltZSAiK2YpO2I9bmV3IEllfXJldHVybiBXW2ZdPWIsYn0sa2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGYpe3MoMD09PWYubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscyhmLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCBy''@;'; put 'put ''ZWQgbnVtYmVycyIpfSxrZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZixiKXtzKDA9PT0oZi5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxzKGYucmVkJiZmLnJlZD09PWIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1i''@;'; put 'put ''ZXJzIil9LGtlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShmKS5fZm9yY2VSZWQodGhpcyk6Zi51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxrZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGYpe3JldHVybiBmLmlz''@;'; put 'put ''WmVybygpP2YuY2xvbmUoKTp0aGlzLm0uc3ViKGYpLl9mb3JjZVJlZCh0aGlzKX0sa2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihmLGIpe3RoaXMuX3ZlcmlmeTIoZixiKTt2YXIgaz1mLmFkZChiKTtyZXR1cm4gay5jbXAodGhpcy5tKT49MCYmay5pc3ViKHRoaXMubSksay5fZm9yY2VSZWQo''@;'; put 'put ''dGhpcyl9LGtlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGYsYil7dGhpcy5fdmVyaWZ5MihmLGIpO3ZhciBrPWYuaWFkZChiKTtyZXR1cm4gay5jbXAodGhpcy5tKT49MCYmay5pc3ViKHRoaXMubSksa30sa2UucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihmLGIpe3RoaXMuX3ZlcmlmeTIoZixi''@;'; put 'put ''KTt2YXIgaz1mLnN1YihiKTtyZXR1cm4gay5jbXBuKDApPDAmJmsuaWFkZCh0aGlzLm0pLGsuX2ZvcmNlUmVkKHRoaXMpfSxrZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihmLGIpe3RoaXMuX3ZlcmlmeTIoZixiKTt2YXIgaz1mLmlzdWIoYik7cmV0dXJuIGsuY21wbigwKTwwJiZrLmlhZGQo''@;'; put 'put ''dGhpcy5tKSxrfSxrZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGYsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZiksdGhpcy5pbW9kKGYudXNobG4oYikpfSxrZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihmLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKGYsYiksdGhpcy5pbW9kKGYuaW11bChi''@;'; put 'put ''KSl9LGtlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZixiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihmLGIpLHRoaXMuaW1vZChmLm11bChiKSl9LGtlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmltdWwoZixmLmNsb25lKCkpfSxrZS5wcm90b3R5cGUuc3FyPWZ1bmN0''@;'; put 'put ''aW9uKGYpe3JldHVybiB0aGlzLm11bChmLGYpfSxrZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihmKXtpZihmLmlzWmVybygpKXJldHVybiBmLmNsb25lKCk7dmFyIGI9dGhpcy5tLmFuZGxuKDMpO2lmKHMoYiUyPT0xKSwzPT09Yil7dmFyIGs9dGhpcy5tLmFkZChuZXcgdigxKSkuaXVzaHJu''@;'; put 'put ''KDIpO3JldHVybiB0aGlzLnBvdyhmLGspfWZvcih2YXIgTT10aGlzLm0uc3VibigxKSxCPTA7IU0uaXNaZXJvKCkmJjA9PT1NLmFuZGxuKDEpOylCKyssTS5pdXNocm4oMSk7cyghTS5pc1plcm8oKSk7dmFyIEs9bmV3IHYoMSkudG9SZWQodGhpcyksRz1LLnJlZE5lZygpLEQ9dGhpcy5tLnN1''@;'; put 'put ''Ym4oMSkuaXVzaHJuKDEpLHA9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihwPW5ldyB2KDIqcCpwKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cocCxEKS5jbXAoRyk7KXAucmVkSUFkZChHKTtmb3IodmFyIEk9dGhpcy5wb3cocCxNKSx1ZT10aGlzLnBvdyhmLE0uYWRkbigxKS5pdXNocm4oMSkp''@;'; put 'put ''LG5lPXRoaXMucG93KGYsTSksX2U9QjswIT09bmUuY21wKEspOyl7Zm9yKHZhciBQZT1uZSxvdD0wOzAhPT1QZS5jbXAoSyk7b3QrKylQZT1QZS5yZWRTcXIoKTtzKG90PF9lKTt2YXIgbHQ9dGhpcy5wb3coSSxuZXcgdigxKS5pdXNobG4oX2Utb3QtMSkpO3VlPXVlLnJlZE11bChsdCksST1s''@;'; put 'put ''dC5yZWRTcXIoKSxuZT1uZS5yZWRNdWwoSSksX2U9b3R9cmV0dXJuIHVlfSxrZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihmKXt2YXIgYj1mLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Yi5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLHRoaXMuaW1vZChiKS5yZWROZWcoKSk6dGhpcy5pbW9k''@;'; put 'put ''KGIpfSxrZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGYsYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gbmV3IHYoMSkudG9SZWQodGhpcyk7aWYoMD09PWIuY21wbigxKSlyZXR1cm4gZi5jbG9uZSgpO3ZhciBNPW5ldyBBcnJheSgxNik7TVswXT1uZXcgdigxKS50b1JlZCh0aGlzKSxNWzFdPWY7''@;'; put 'put ''Zm9yKHZhciBCPTI7QjxNLmxlbmd0aDtCKyspTVtCXT10aGlzLm11bChNW0ItMV0sZik7dmFyIEs9TVswXSxHPTAsRD0wLHA9Yi5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXAmJihwPTI2KSxCPWIubGVuZ3RoLTE7Qj49MDtCLS0pe2Zvcih2YXIgST1iLndvcmRzW0JdLHVlPXAtMTt1ZT49MDt1''@;'; put 'put ''ZS0tKXt2YXIgbmU9ST4+dWUmMTtLIT09TVswXSYmKEs9dGhpcy5zcXIoSykpLDAhPT1uZXx8MCE9PUc/KEc8PD0xLEd8PW5lLCg0PT09KytEfHwwPT09QiYmMD09PXVlKSYmKEs9dGhpcy5tdWwoSyxNW0ddKSxEPTAsRz0wKSk6RD0wfXA9MjZ9cmV0dXJuIEt9LGtlLnByb3RvdHlwZS5jb252''@;'; put 'put ''ZXJ0VG89ZnVuY3Rpb24oZil7dmFyIGI9Zi51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1mP2IuY2xvbmUoKTpifSxrZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZil7dmFyIGI9Zi5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHYubW9udD1mdW5jdGlvbihmKXtyZXR1cm4g''@;'; put 'put ''bmV3IHFlKGYpfSxBKHFlLGtlKSxxZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmltb2QoZi51c2hsbih0aGlzLnNoaWZ0KSl9LHFlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihmKXt2YXIgYj10aGlzLmltb2QoZi5tdWwodGhpcy5yaW52KSk7''@;'; put 'put ''cmV0dXJuIGIucmVkPW51bGwsYn0scWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZixiKXtpZihmLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBmLndvcmRzWzBdPTAsZi5sZW5ndGg9MSxmO3ZhciBrPWYuaW11bChiKSxNPWsubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludiku''@;'; put 'put ''aW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLEI9ay5pc3ViKE0pLml1c2hybih0aGlzLnNoaWZ0KSxLPUI7cmV0dXJuIEIuY21wKHRoaXMubSk+PTA/Sz1CLmlzdWIodGhpcy5tKTpCLmNtcG4oMCk8MCYmKEs9Qi5pYWRkKHRoaXMubSkpLEsuX2ZvcmNlUmVkKHRoaXMpfSxxZS5wcm90''@;'; put 'put ''b3R5cGUubXVsPWZ1bmN0aW9uKGYsYil7aWYoZi5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHYoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBrPWYubXVsKGIpLE09ay5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSks''@;'; put 'put ''Qj1rLmlzdWIoTSkuaXVzaHJuKHRoaXMuc2hpZnQpLEs9QjtyZXR1cm4gQi5jbXAodGhpcy5tKT49MD9LPUIuaXN1Yih0aGlzLm0pOkIuY21wbigwKTwwJiYoSz1CLmlhZGQodGhpcy5tKSksSy5fZm9yY2VSZWQodGhpcyl9LHFlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGYpe3JldHVybiB0''@;'; put 'put ''aGlzLmltb2QoZi5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGZlPWgubm1kKGZlKSx0aGlzKX0sMzA2NTUoZmUpeyJ1c2Ugc3RyaWN0Ijt2YXIgaj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fCExO2lmKGopdHJ5e2ooe30sImEiLHt2YWx1ZToxfSl9Y2F0''@;'; put 'put ''Y2h7aj0hMX1mZS5leHBvcnRzPWp9LDQxMjM3KGZlKXsidXNlIHN0cmljdCI7ZmUuZXhwb3J0cz1FdmFsRXJyb3J9LDY5MzgzKGZlKXsidXNlIHN0cmljdCI7ZmUuZXhwb3J0cz1FcnJvcn0sNzkyOTAoZmUpeyJ1c2Ugc3RyaWN0IjtmZS5leHBvcnRzPVJhbmdlRXJyb3J9LDc5NTM4KGZlKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7ZmUuZXhwb3J0cz1SZWZlcmVuY2VFcnJvcn0sNTgwNjgoZmUpeyJ1c2Ugc3RyaWN0IjtmZS5leHBvcnRzPVN5bnRheEVycm9yfSw2OTY3NShmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9VHlwZUVycm9yfSwzNTM0NShmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9''@;'; put 'put ''VVJJRXJyb3J9LDc5NjEyKGZlKXsidXNlIHN0cmljdCI7ZmUuZXhwb3J0cz1PYmplY3R9LDM3MDA3KGZlKXsidXNlIHN0cmljdCI7dmFyIHksaj0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3Q/UmVmbGVjdDpudWxsLGg9aiYmImZ1bmN0aW9uIj09dHlwZW9mIGouYXBwbHk/ai5hcHBseTpmdW5j''@;'; put 'put ''dGlvbihxLHJlLG1lKXtyZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwocSxyZSxtZSl9O3k9aiYmImZ1bmN0aW9uIj09dHlwZW9mIGoub3duS2V5cz9qLm93bktleXM6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbihxKXtyZXR1cm4gT2JqZWN0LmdldE93''@;'; put 'put ''blByb3BlcnR5TmFtZXMocSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocSkpfTpmdW5jdGlvbihxKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocSl9O3ZhciBzPU51bWJlci5pc05hTnx8ZnVuY3Rpb24ocSl7cmV0dXJuIHEhPXF9O2Z1bmN0aW9uIEEo''@;'; put 'put ''KXtBLmluaXQuY2FsbCh0aGlzKX1mZS5leHBvcnRzPUEsZmUuZXhwb3J0cy5vbmNlPWZ1bmN0aW9uIHooVyxxKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmUsbWUpe2Z1bmN0aW9uIENlKGtlKXtXLnJlbW92ZUxpc3RlbmVyKHEsSWUpLG1lKGtlKX1mdW5jdGlvbiBJZSgpeyJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBXLnJlbW92ZUxpc3RlbmVyJiZXLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsQ2UpLHJlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9RihXLHEsSWUse29uY2U6ITB9KSwiZXJyb3IiIT09cSYmZnVuY3Rpb24gWShXLHEscmUpeyJmdW5jdGlvbiI9PXR5cGVvZiBXLm9u''@;'; put 'put ''JiZGKFcsImVycm9yIixxLHJlKX0oVyxDZSx7b25jZTohMH0pfSl9LEEuRXZlbnRFbWl0dGVyPUEsQS5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAsQS5wcm90b3R5cGUuX2V2ZW50c0NvdW50PTAsQS5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDA7dmFyIHY9MTA7ZnVuY3Rpb24gQyhX''@;'; put 'put ''KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgVyl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgVyl9ZnVuY3Rpb24gdyhXKXtyZXR1cm4gdm9pZCAwPT09Vy5fbWF4TGlzdGVu''@;'; put 'put ''ZXJzP0EuZGVmYXVsdE1heExpc3RlbmVyczpXLl9tYXhMaXN0ZW5lcnN9ZnVuY3Rpb24gUyhXLHEscmUsbWUpe3ZhciBDZSxJZSxrZTtpZihDKHJlKSx2b2lkIDA9PT0oSWU9Vy5fZXZlbnRzKT8oSWU9Vy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksVy5fZXZlbnRzQ291bnQ9MCk6KHZv''@;'; put 'put ''aWQgMCE9PUllLm5ld0xpc3RlbmVyJiYoVy5lbWl0KCJuZXdMaXN0ZW5lciIscSxyZS5saXN0ZW5lcj9yZS5saXN0ZW5lcjpyZSksSWU9Vy5fZXZlbnRzKSxrZT1JZVtxXSksdm9pZCAwPT09a2Upa2U9SWVbcV09cmUsKytXLl9ldmVudHNDb3VudDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBrZT9rZT1JZVtxXT1tZT9bcmUsa2VdOltrZSxyZV06bWU/a2UudW5zaGlmdChyZSk6a2UucHVzaChyZSksKENlPXcoVykpPjAmJmtlLmxlbmd0aD5DZSYmIWtlLndhcm5lZCl7a2Uud2FybmVkPSEwO3ZhciBxZT1uZXcgRXJyb3IoIlBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVh''@;'; put 'put ''ayBkZXRlY3RlZC4gIitrZS5sZW5ndGgrIiAiK1N0cmluZyhxKSsiIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQiKTtxZS5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLHFlLmVtaXR0ZXI9VyxxZS50eXBl''@;'; put 'put ''PXEscWUuY291bnQ9a2UubGVuZ3RoLGZ1bmN0aW9uIGMoVyl7Y29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oVyl9KHFlKX1yZXR1cm4gV31mdW5jdGlvbiBMKCl7aWYoIXRoaXMuZmlyZWQpcmV0dXJuIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlz''@;'; put 'put ''LndyYXBGbiksdGhpcy5maXJlZD0hMCwwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpOnRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsYXJndW1lbnRzKX1mdW5jdGlvbiBSKFcscSxyZSl7dmFyIG1lPXtmaXJlZDohMSx3cmFwRm46dm9p''@;'; put 'put ''ZCAwLHRhcmdldDpXLHR5cGU6cSxsaXN0ZW5lcjpyZX0sQ2U9TC5iaW5kKG1lKTtyZXR1cm4gQ2UubGlzdGVuZXI9cmUsbWUud3JhcEZuPUNlLENlfWZ1bmN0aW9uIHgoVyxxLHJlKXt2YXIgbWU9Vy5fZXZlbnRzO2lmKHZvaWQgMD09PW1lKXJldHVybltdO3ZhciBDZT1tZVtxXTtyZXR1cm4g''@;'; put 'put ''dm9pZCAwPT09Q2U/W106ImZ1bmN0aW9uIj09dHlwZW9mIENlP3JlP1tDZS5saXN0ZW5lcnx8Q2VdOltDZV06cmU/ZnVuY3Rpb24gTihXKXtmb3IodmFyIHE9bmV3IEFycmF5KFcubGVuZ3RoKSxyZT0wO3JlPHEubGVuZ3RoOysrcmUpcVtyZV09V1tyZV0ubGlzdGVuZXJ8fFdbcmVdO3JldHVy''@;'; put 'put ''biBxfShDZSk6SChDZSxDZS5sZW5ndGgpfWZ1bmN0aW9uIFUoVyl7dmFyIHE9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PXEpe3ZhciByZT1xW1ddO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByZSlyZXR1cm4gMTtpZih2b2lkIDAhPT1yZSlyZXR1cm4gcmUubGVuZ3RofXJldHVybiAwfWZ1bmN0''@;'; put 'put ''aW9uIEgoVyxxKXtmb3IodmFyIHJlPW5ldyBBcnJheShxKSxtZT0wO21lPHE7KyttZSlyZVttZV09V1ttZV07cmV0dXJuIHJlfWZ1bmN0aW9uIEYoVyxxLHJlLG1lKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgVy5vbiltZS5vbmNlP1cub25jZShxLHJlKTpXLm9uKHEscmUpO2Vsc2V7aWYoImZ1''@;'; put 'put ''bmN0aW9uIiE9dHlwZW9mIFcuYWRkRXZlbnRMaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImVtaXR0ZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgVyk7Vy5hZGRFdmVudExpc3RlbmVyKHEsZnVuY3Rpb24g''@;'; put 'put ''Q2UoSWUpe21lLm9uY2UmJlcucmVtb3ZlRXZlbnRMaXN0ZW5lcihxLENlKSxyZShJZSl9KX19T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB2fSxzZXQ6ZnVuY3Rpb24oVyl7aWYoIm51bWJl''@;'; put 'put ''ciIhPXR5cGVvZiBXfHxXPDB8fHMoVykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAiZGVmYXVsdE1heExpc3RlbmVycyIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytXKyIuIik7dj1XfX0pLEEuaW5pdD1m''@;'; put 'put ''dW5jdGlvbigpeyh2b2lkIDA9PT10aGlzLl9ldmVudHN8fHRoaXMuX2V2ZW50cz09PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSYmKHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlz''@;'; put 'put ''Ll9tYXhMaXN0ZW5lcnN8fHZvaWQgMH0sQS5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKHEpe2lmKCJudW1iZXIiIT10eXBlb2YgcXx8cTwwfHxzKHEpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBh''@;'; put 'put ''IG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrcSsiLiIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9cSx0aGlzfSxBLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdyh0aGlzKX0sQS5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihxKXtmb3IodmFy''@;'; put 'put ''IHJlPVtdLG1lPTE7bWU8YXJndW1lbnRzLmxlbmd0aDttZSsrKXJlLnB1c2goYXJndW1lbnRzW21lXSk7dmFyIENlPSJlcnJvciI9PT1xLEllPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1JZSlDZT1DZSYmdm9pZCAwPT09SWUuZXJyb3I7ZWxzZSBpZighQ2UpcmV0dXJuITE7aWYoQ2Upe3Zh''@;'; put 'put ''ciBrZTtpZihyZS5sZW5ndGg+MCYmKGtlPXJlWzBdKSxrZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IGtlO3ZhciBxZT1uZXcgRXJyb3IoIlVuaGFuZGxlZCBlcnJvci4iKyhrZT8iICgiK2tlLm1lc3NhZ2UrIikiOiIiKSk7dGhyb3cgcWUuY29udGV4dD1rZSxxZX12YXIgWD1JZVtxXTtpZih2''@;'; put 'put ''b2lkIDA9PT1YKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBYKWgoWCx0aGlzLHJlKTtlbHNle3ZhciBmPVgubGVuZ3RoLGI9SChYLGYpO2ZvcihtZT0wO21lPGY7KyttZSloKGJbbWVdLHRoaXMscmUpfXJldHVybiEwfSxBLnByb3RvdHlwZS5vbj1BLnByb3RvdHlwZS5hZGRMaXN0''@;'; put 'put ''ZW5lcj1mdW5jdGlvbihxLHJlKXtyZXR1cm4gUyh0aGlzLHEscmUsITEpfSxBLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXI9ZnVuY3Rpb24ocSxyZSl7cmV0dXJuIFModGhpcyxxLHJlLCEwKX0sQS5wcm90b3R5cGUub25jZT1mdW5jdGlvbihxLHJlKXtyZXR1cm4gQyhyZSksdGhpcy5vbihx''@;'; put 'put ''LFIodGhpcyxxLHJlKSksdGhpc30sQS5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbihxLHJlKXtyZXR1cm4gQyhyZSksdGhpcy5wcmVwZW5kTGlzdGVuZXIocSxSKHRoaXMscSxyZSkpLHRoaXN9LEEucHJvdG90eXBlLm9mZj1BLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5l''@;'; put 'put ''cj1mdW5jdGlvbihxLHJlKXt2YXIgbWUsQ2UsSWUsa2UscWU7aWYoQyhyZSksdm9pZCAwPT09KENlPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09KG1lPUNlW3FdKSlyZXR1cm4gdGhpcztpZihtZT09PXJlfHxtZS5saXN0ZW5lcj09PXJlKTA9PT0tLXRoaXMuX2V2ZW50''@;'; put 'put ''c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOihkZWxldGUgQ2VbcV0sQ2UucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLHEsbWUubGlzdGVuZXJ8fHJlKSk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgbWUpe2ZvcihJZT0tMSxrZT1t''@;'; put 'put ''ZS5sZW5ndGgtMTtrZT49MDtrZS0tKWlmKG1lW2tlXT09PXJlfHxtZVtrZV0ubGlzdGVuZXI9PT1yZSl7cWU9bWVba2VdLmxpc3RlbmVyLEllPWtlO2JyZWFrfWlmKEllPDApcmV0dXJuIHRoaXM7MD09PUllP21lLnNoaWZ0KCk6ZnVuY3Rpb24gVihXLHEpe2Zvcig7cSsxPFcubGVuZ3RoO3Er''@;'; put 'put ''KylXW3FdPVdbcSsxXTtXLnBvcCgpfShtZSxJZSksMT09PW1lLmxlbmd0aCYmKENlW3FdPW1lWzBdKSx2b2lkIDAhPT1DZS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIscSxxZXx8cmUpfXJldHVybiB0aGlzfSxBLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5l''@;'; put 'put ''cnM9ZnVuY3Rpb24ocSl7dmFyIHJlLG1lLENlO2lmKHZvaWQgMD09PShtZT10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PW1lLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhp''@;'; put 'put ''cy5fZXZlbnRzQ291bnQ9MCk6dm9pZCAwIT09bWVbcV0mJigwPT09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTpkZWxldGUgbWVbcV0pLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBrZSxJZT1PYmplY3Qua2V5cyhtZSk7Zm9y''@;'; put 'put ''KENlPTA7Q2U8SWUubGVuZ3RoOysrQ2UpInJlbW92ZUxpc3RlbmVyIiE9PShrZT1JZVtDZV0pJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZSk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCJyZW1vdmVMaXN0ZW5lciIpLHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwp''@;'; put 'put ''LHRoaXMuX2V2ZW50c0NvdW50PTAsdGhpc31pZigiZnVuY3Rpb24iPT10eXBlb2YocmU9bWVbcV0pKXRoaXMucmVtb3ZlTGlzdGVuZXIocSxyZSk7ZWxzZSBpZih2b2lkIDAhPT1yZSlmb3IoQ2U9cmUubGVuZ3RoLTE7Q2U+PTA7Q2UtLSl0aGlzLnJlbW92ZUxpc3RlbmVyKHEscmVbQ2VdKTty''@;'; put 'put ''ZXR1cm4gdGhpc30sQS5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKHEpe3JldHVybiB4KHRoaXMscSwhMCl9LEEucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbihxKXtyZXR1cm4geCh0aGlzLHEsITEpfSxBLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24oVyxxKXtyZXR1cm4iZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgVy5saXN0ZW5lckNvdW50P1cubGlzdGVuZXJDb3VudChxKTpVLmNhbGwoVyxxKX0sQS5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1VLEEucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD95KHRoaXMuX2V2ZW50''@;'; put 'put ''cyk6W119fSw2ODA3OChmZSxqLGgpe3ZhciB5PWgoOTI4NjEpLkJ1ZmZlcixjPWgoODgyNzYpO2ZlLmV4cG9ydHM9ZnVuY3Rpb24gcyhBLHYsQyx3KXtpZih5LmlzQnVmZmVyKEEpfHwoQT15LmZyb20oQSwiYmluYXJ5IikpLHYmJih5LmlzQnVmZmVyKHYpfHwodj15LmZyb20odiwiYmluYXJ5''@;'; put 'put ''IikpLDghPT12Lmxlbmd0aCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNhbHQgc2hvdWxkIGJlIEJ1ZmZlciB3aXRoIDggYnl0ZSBsZW5ndGgiKTtmb3IodmFyIFM9Qy84LEw9eS5hbGxvYyhTKSxSPXkuYWxsb2Mod3x8MCkseD15LmFsbG9jKDApO1M+MHx8dz4wOyl7dmFyIFU9bmV3IGM7VS51''@;'; put 'put ''cGRhdGUoeCksVS51cGRhdGUoQSksdiYmVS51cGRhdGUodikseD1VLmRpZ2VzdCgpO3ZhciBIPTA7aWYoUz4wKXt2YXIgVj1MLmxlbmd0aC1TO0g9TWF0aC5taW4oUyx4Lmxlbmd0aCkseC5jb3B5KEwsViwwLEgpLFMtPUh9aWYoSDx4Lmxlbmd0aCYmdz4wKXt2YXIgTj1SLmxlbmd0aC13LHo9''@;'; put 'put ''TWF0aC5taW4odyx4Lmxlbmd0aC1IKTt4LmNvcHkoUixOLEgsSCt6KSx3LT16fX1yZXR1cm4geC5maWxsKDApLHtrZXk6TCxpdjpSfX19LDgyNjgyKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNjk2MDApLGM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxzPU9iamVjdC5wcm90b3R5''@;'; put 'put ''cGUuaGFzT3duUHJvcGVydHk7ZmUuZXhwb3J0cz1mdW5jdGlvbihMLFIseCl7aWYoIXkoUikpdGhyb3cgbmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7dmFyIFU7YXJndW1lbnRzLmxlbmd0aD49MyYmKFU9eCksZnVuY3Rpb24gdyhTKXtyZXR1cm4iW29iamVj''@;'; put 'put ''dCBBcnJheV0iPT09Yy5jYWxsKFMpfShMKT9mdW5jdGlvbihMLFIseCl7Zm9yKHZhciBVPTAsSD1MLmxlbmd0aDtVPEg7VSsrKXMuY2FsbChMLFUpJiYobnVsbD09eD9SKExbVV0sVSxMKTpSLmNhbGwoeCxMW1VdLFUsTCkpfShMLFIsVSk6InN0cmluZyI9PXR5cGVvZiBMP2Z1bmN0aW9uKEws''@;'; put 'put ''Uix4KXtmb3IodmFyIFU9MCxIPUwubGVuZ3RoO1U8SDtVKyspbnVsbD09eD9SKEwuY2hhckF0KFUpLFUsTCk6Ui5jYWxsKHgsTC5jaGFyQXQoVSksVSxMKX0oTCxSLFUpOmZ1bmN0aW9uKEwsUix4KXtmb3IodmFyIFUgaW4gTClzLmNhbGwoTCxVKSYmKG51bGw9PXg/UihMW1VdLFUsTCk6Ui5j''@;'; put 'put ''YWxsKHgsTFtVXSxVLEwpKX0oTCxSLFUpfX0sNTE4OTQoZmUpeyJ1c2Ugc3RyaWN0IjtmZS5leHBvcnRzPSJvYmplY3QiPT10eXBlb2Ygc2VsZj9zZWxmLkZvcm1EYXRhOndpbmRvdy5Gb3JtRGF0YX0sMjM4NzYoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg2NTYwNik7Y29uc3QgYz1o''@;'; put 'put ''KDYzNzM1KSxzPWgoNDM2MjcpLEE9aCg2Mzc5OCkubWtkaXJzU3luYyx2PWgoNDcyMTEpLnV0aW1lc01pbGxpc1N5bmMsQz1oKDY2NDYyKTtmdW5jdGlvbiBTKENlLEllLGtlLHFlKXtjb25zdCBmPShxZS5kZXJlZmVyZW5jZT9jLnN0YXRTeW5jOmMubHN0YXRTeW5jKShJZSk7aWYoZi5pc0Rp''@;'; put 'put ''cmVjdG9yeSgpKXJldHVybiBmdW5jdGlvbiBZKENlLEllLGtlLHFlLFgpe3JldHVybiBJZT9XKGtlLHFlLFgpOmZ1bmN0aW9uIEYoQ2UsSWUsa2UscWUpe3JldHVybiBjLm1rZGlyU3luYyhrZSksVyhJZSxrZSxxZSksTihrZSxDZSl9KENlLm1vZGUsa2UscWUsWCl9KGYsQ2UsSWUsa2UscWUp''@;'; put 'put ''O2lmKGYuaXNGaWxlKCl8fGYuaXNDaGFyYWN0ZXJEZXZpY2UoKXx8Zi5pc0Jsb2NrRGV2aWNlKCkpcmV0dXJuIGZ1bmN0aW9uIEwoQ2UsSWUsa2UscWUsWCl7cmV0dXJuIEllP2Z1bmN0aW9uIFIoQ2UsSWUsa2UscWUpe2lmKHFlLm92ZXJ3cml0ZSlyZXR1cm4gYy51bmxpbmtTeW5jKGtlKSx4''@;'; put 'put ''KENlLEllLGtlLHFlKTtpZihxZS5lcnJvck9uRXhpc3QpdGhyb3cgbmV3IEVycm9yKGAnJHtrZX0nIGFscmVhZHkgZXhpc3RzYCl9KENlLGtlLHFlLFgpOngoQ2Usa2UscWUsWCl9KGYsQ2UsSWUsa2UscWUpO2lmKGYuaXNTeW1ib2xpY0xpbmsoKSlyZXR1cm4gZnVuY3Rpb24gcmUoQ2UsSWUs''@;'; put 'put ''a2UscWUpe2xldCBYPWMucmVhZGxpbmtTeW5jKEllKTtpZihxZS5kZXJlZmVyZW5jZSYmKFg9cy5yZXNvbHZlKHkuY3dkKCksWCkpLENlKXtsZXQgZjt0cnl7Zj1jLnJlYWRsaW5rU3luYyhrZSl9Y2F0Y2goYil7aWYoIkVJTlZBTCI9PT1iLmNvZGV8fCJVTktOT1dOIj09PWIuY29kZSlyZXR1''@;'; put 'put ''cm4gYy5zeW1saW5rU3luYyhYLGtlKTt0aHJvdyBifWlmKHFlLmRlcmVmZXJlbmNlJiYoZj1zLnJlc29sdmUoeS5jd2QoKSxmKSksQy5pc1NyY1N1YmRpcihYLGYpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgJyR7WH0nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7Zn0n''@;'; put 'put ''LmApO2lmKEMuaXNTcmNTdWJkaXIoZixYKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgJyR7Zn0nIHdpdGggJyR7WH0nLmApO3JldHVybiBmdW5jdGlvbiBtZShDZSxJZSl7cmV0dXJuIGMudW5saW5rU3luYyhJZSksYy5zeW1saW5rU3luYyhDZSxJZSl9KFgsa2UpfXJldHVy''@;'; put 'put ''biBjLnN5bWxpbmtTeW5jKFgsa2UpfShDZSxJZSxrZSxxZSk7dGhyb3cgZi5pc1NvY2tldCgpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBzb2NrZXQgZmlsZTogJHtJZX1gKTpmLmlzRklGTygpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBGSUZPIHBpcGU6ICR7SWV9YCk6bmV3IEVycm9y''@;'; put 'put ''KGBVbmtub3duIGZpbGU6ICR7SWV9YCl9ZnVuY3Rpb24geChDZSxJZSxrZSxxZSl7cmV0dXJuIGMuY29weUZpbGVTeW5jKEllLGtlKSxxZS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJmZ1bmN0aW9uIFUoQ2UsSWUsa2UpeyhmdW5jdGlvbiBIKENlKXtyZXR1cm4hKDEyOCZDZSl9KShDZSkmJmZ1bmN0''@;'; put 'put ''aW9uIFYoQ2UsSWUpe04oQ2UsMTI4fEllKX0oa2UsQ2UpLGZ1bmN0aW9uIHooQ2UsSWUpe2NvbnN0IGtlPWMuc3RhdFN5bmMoQ2UpO3YoSWUsa2UuYXRpbWUsa2UubXRpbWUpfShJZSxrZSl9KENlLm1vZGUsSWUsa2UpLE4oa2UsQ2UubW9kZSl9ZnVuY3Rpb24gTihDZSxJZSl7cmV0dXJuIGMu''@;'; put 'put ''Y2htb2RTeW5jKENlLEllKX1mdW5jdGlvbiBXKENlLEllLGtlKXtjb25zdCBxZT1jLm9wZW5kaXJTeW5jKENlKTt0cnl7bGV0IFg7Zm9yKDtudWxsIT09KFg9cWUucmVhZFN5bmMoKSk7KXEoWC5uYW1lLENlLEllLGtlKX1maW5hbGx5e3FlLmNsb3NlU3luYygpfX1mdW5jdGlvbiBxKENlLEll''@;'; put 'put ''LGtlLHFlKXtjb25zdCBYPXMuam9pbihJZSxDZSksZj1zLmpvaW4oa2UsQ2UpO2lmKHFlLmZpbHRlciYmIXFlLmZpbHRlcihYLGYpKXJldHVybjtjb25zdHtkZXN0U3RhdDpifT1DLmNoZWNrUGF0aHNTeW5jKFgsZiwiY29weSIscWUpO3JldHVybiBTKGIsWCxmLHFlKX1mZS5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uIHcoQ2UsSWUsa2UpeyJmdW5jdGlvbiI9PXR5cGVvZiBrZSYmKGtlPXtmaWx0ZXI6a2V9KSwoa2U9a2V8fHt9KS5jbG9iYmVyPSEoImNsb2JiZXIiaW4ga2UpfHwhIWtlLmNsb2JiZXIsa2Uub3ZlcndyaXRlPSJvdmVyd3JpdGUiaW4ga2U/ISFrZS5vdmVyd3JpdGU6a2UuY2xvYmJl''@;'; put 'put ''cixrZS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJiJpYTMyIj09PXkuYXJjaCYmeS5lbWl0V2FybmluZygiVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xuXG5cdHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJk''@;'; put 'put ''c29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzI2OSIsIldhcm5pbmciLCJmcy1leHRyYS1XQVJOMDAwMiIpO2NvbnN0e3NyY1N0YXQ6cWUsZGVzdFN0YXQ6WH09Qy5jaGVja1BhdGhzU3luYyhDZSxJZSwiY29weSIsa2UpO2lmKEMuY2hlY2tQYXJlbnRQYXRoc1N5bmMoQ2UscWUsSWUsImNvcHki''@;'; put 'put ''KSxrZS5maWx0ZXImJiFrZS5maWx0ZXIoQ2UsSWUpKXJldHVybjtjb25zdCBmPXMuZGlybmFtZShJZSk7cmV0dXJuIGMuZXhpc3RzU3luYyhmKXx8QShmKSxTKFgsQ2UsSWUsa2UpfX0sNDk5NChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDY1NjA2KTtjb25zdCBjPWgoOTg3MzcpLHM9''@;'; put 'put ''aCg0MzYyNykse21rZGlyczpBfT1oKDYzNzk4KSx7cGF0aEV4aXN0czp2fT1oKDI5Mjg4KSx7dXRpbWVzTWlsbGlzOkN9PWgoNDcyMTEpLHc9aCg2NjQ2Mik7ZnVuY3Rpb24gTCgpe3JldHVybihMPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihJZSxrZSxxZT17fSl7ImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIHFlJiYocWU9e2ZpbHRlcjpxZX0pLHFlLmNsb2JiZXI9ISgiY2xvYmJlciJpbiBxZSl8fCEhcWUuY2xvYmJlcixxZS5vdmVyd3JpdGU9Im92ZXJ3cml0ZSJpbiBxZT8hIXFlLm92ZXJ3cml0ZTpxZS5jbG9iYmVyLHFlLnByZXNlcnZlVGltZXN0YW1wcyYmImlhMzIiPT09eS5hcmNo''@;'; put 'put ''JiZ5LmVtaXRXYXJuaW5nKCJVc2luZyB0aGUgcHJlc2VydmVUaW1lc3RhbXBzIG9wdGlvbiBpbiAzMi1iaXQgbm9kZSBpcyBub3QgcmVjb21tZW5kZWQ7XG5cblx0c2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcHJpY2hhcmRzb24vbm9kZS1mcy1leHRyYS9pc3N1ZXMvMjY5IiwiV2FybmluZyIs''@;'; put 'put ''ImZzLWV4dHJhLVdBUk4wMDAxIik7Y29uc3R7c3JjU3RhdDpYLGRlc3RTdGF0OmZ9PXlpZWxkIHcuY2hlY2tQYXRocyhJZSxrZSwiY29weSIscWUpO2lmKHlpZWxkIHcuY2hlY2tQYXJlbnRQYXRocyhJZSxYLGtlLCJjb3B5IiksISh5aWVsZCBSKEllLGtlLHFlKSkpcmV0dXJuO2NvbnN0IGs9''@;'; put 'put ''cy5kaXJuYW1lKGtlKTsoeWllbGQgdihrKSl8fCh5aWVsZCBBKGspKSx5aWVsZCBVKGYsSWUsa2UscWUpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBSKEllLGtlLHFlKXtyZXR1cm4geC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24geCgpe3JldHVybih4PV9hc3lu''@;'; put 'put ''Y1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihJZSxrZSxxZSl7cmV0dXJuIXFlLmZpbHRlcnx8cWUuZmlsdGVyKEllLGtlKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVShJZSxrZSxxZSxYKXtyZXR1cm4gSC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gSCgpe3JldHVy''@;'; put 'put ''biBIPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihJZSxrZSxxZSxYKXtjb25zdCBiPXlpZWxkKFguZGVyZWZlcmVuY2U/Yy5zdGF0OmMubHN0YXQpKGtlKTtpZihiLmlzRGlyZWN0b3J5KCkpcmV0dXJuIGZ1bmN0aW9uIHEoSWUsa2UscWUsWCxmKXtyZXR1cm4gcmUuYXBwbHkodGhpcyxh''@;'; put 'put ''cmd1bWVudHMpfShiLEllLGtlLHFlLFgpO2lmKGIuaXNGaWxlKCl8fGIuaXNDaGFyYWN0ZXJEZXZpY2UoKXx8Yi5pc0Jsb2NrRGV2aWNlKCkpcmV0dXJuIGZ1bmN0aW9uIFYoSWUsa2UscWUsWCxmKXtyZXR1cm4gTi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KGIsSWUsa2UscWUsWCk7aWYoYi5p''@;'; put 'put ''c1N5bWJvbGljTGluaygpKXJldHVybiBmdW5jdGlvbiBtZShJZSxrZSxxZSxYKXtyZXR1cm4gQ2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfShJZSxrZSxxZSxYKTt0aHJvdyBiLmlzU29ja2V0KCk/bmV3IEVycm9yKGBDYW5ub3QgY29weSBhIHNvY2tldCBmaWxlOiAke2tlfWApOmIuaXNGSUZP''@;'; put 'put ''KCk/bmV3IEVycm9yKGBDYW5ub3QgY29weSBhIEZJRk8gcGlwZTogJHtrZX1gKTpuZXcgRXJyb3IoYFVua25vd24gZmlsZTogJHtrZX1gKX0pLEguYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIE4oKXtyZXR1cm4oTj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooSWUsa2UscWUs''@;'; put 'put ''WCxmKXtpZigha2UpcmV0dXJuIHooSWUscWUsWCxmKTtpZihmLm92ZXJ3cml0ZSlyZXR1cm4geWllbGQgYy51bmxpbmsoWCkseihJZSxxZSxYLGYpO2lmKGYuZXJyb3JPbkV4aXN0KXRocm93IG5ldyBFcnJvcihgJyR7WH0nIGFscmVhZHkgZXhpc3RzYCl9KSkuYXBwbHkodGhpcyxhcmd1bWVu''@;'; put 'put ''dHMpfWZ1bmN0aW9uIHooSWUsa2UscWUsWCl7cmV0dXJuIFkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFkoKXtyZXR1cm4oWT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooSWUsa2UscWUsWCl7aWYoeWllbGQgYy5jb3B5RmlsZShrZSxxZSksWC5wcmVzZXJ2ZVRpbWVzdGFt''@;'; put 'put ''cHMpeyhmdW5jdGlvbiBGKEllKXtyZXR1cm4hKDEyOCZJZSl9KShJZS5tb2RlKSYmKHlpZWxkIGZ1bmN0aW9uIFcoSWUsa2Upe3JldHVybiBjLmNobW9kKEllLDEyOHxrZSl9KHFlLEllLm1vZGUpKTtjb25zdCBmPXlpZWxkIGMuc3RhdChrZSk7eWllbGQgQyhxZSxmLmF0aW1lLGYubXRpbWUp''@;'; put 'put ''fXJldHVybiBjLmNobW9kKHFlLEllLm1vZGUpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiByZSgpe3JldHVybihyZT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooSWUsa2UscWUsWCxmKXtrZXx8KHlpZWxkIGMubWtkaXIoWCkpO2NvbnN0IGI9W107dmFyIEIsaz0hMSxN''@;'; put 'put ''PSExO3RyeXtmb3IodmFyIEcsSz1fYXN5bmNJdGVyYXRvcih5aWVsZCBjLm9wZW5kaXIocWUpKTtrPSEoRz15aWVsZCBLLm5leHQoKSkuZG9uZTtrPSExKXtjb25zdCBEPUcudmFsdWU7e2NvbnN0IHA9cy5qb2luKHFlLEQubmFtZSksST1zLmpvaW4oWCxELm5hbWUpO2IucHVzaChSKHAsSSxm''@;'; put 'put ''KS50aGVuKHVlPT57aWYodWUpcmV0dXJuIHcuY2hlY2tQYXRocyhwLEksImNvcHkiLGYpLnRoZW4oKHtkZXN0U3RhdDpuZX0pPT5VKG5lLHAsSSxmKSl9KSl9fX1jYXRjaChEKXtNPSEwLEI9RH1maW5hbGx5e3RyeXtrJiZudWxsIT1LLnJldHVybiYmKHlpZWxkIEsucmV0dXJuKCkpfWZpbmFs''@;'; put 'put ''bHl7aWYoTSl0aHJvdyBCfX15aWVsZCBQcm9taXNlLmFsbChiKSxrZXx8KHlpZWxkIGMuY2htb2QoWCxJZS5tb2RlKSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIENlKCl7cmV0dXJuKENlPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihJZSxrZSxxZSxYKXtsZXQgZj15''@;'; put 'put ''aWVsZCBjLnJlYWRsaW5rKGtlKTtpZihYLmRlcmVmZXJlbmNlJiYoZj1zLnJlc29sdmUoeS5jd2QoKSxmKSksIUllKXJldHVybiBjLnN5bWxpbmsoZixxZSk7bGV0IGI9bnVsbDt0cnl7Yj15aWVsZCBjLnJlYWRsaW5rKHFlKX1jYXRjaChrKXtpZigiRUlOVkFMIj09PWsuY29kZXx8IlVOS05P''@;'; put 'put ''V04iPT09ay5jb2RlKXJldHVybiBjLnN5bWxpbmsoZixxZSk7dGhyb3cga31pZihYLmRlcmVmZXJlbmNlJiYoYj1zLnJlc29sdmUoeS5jd2QoKSxiKSksdy5pc1NyY1N1YmRpcihmLGIpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgJyR7Zn0nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0''@;'; put 'put ''c2VsZiwgJyR7Yn0nLmApO2lmKHcuaXNTcmNTdWJkaXIoYixmKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgJyR7Yn0nIHdpdGggJyR7Zn0nLmApO3JldHVybiB5aWVsZCBjLnVubGluayhxZSksYy5zeW1saW5rKGYscWUpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mZS5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uIFMoSWUsa2Upe3JldHVybiBMLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LDQ0MjMoZmUsaixoKXsidXNlIHN0cmljdCI7Y29uc3QgeT1oKDQxMjM2KS5mcm9tUHJvbWlzZTtmZS5leHBvcnRzPXtjb3B5OnkoaCg0OTk0KSksY29weVN5bmM6aCgyMzg3Nil9fSw1MjU5''@;'; put 'put ''MShmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijtjb25zdCB5PWgoNDEyMzYpLmZyb21Qcm9taXNlLGM9aCg5ODczNykscz1oKDQzNjI3KSxBPWgoNjM3OTgpLHY9aCgzNTQyMiksQz15KGZ1bmN0aW9uKCl7dmFyIFM9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFIpe2xldCB4O3RyeXt4PXlpZWxk''@;'; put 'put ''IGMucmVhZGRpcihSKX1jYXRjaHtyZXR1cm4gQS5ta2RpcnMoUil9cmV0dXJuIFByb21pc2UuYWxsKHgubWFwKFU9PnYucmVtb3ZlKHMuam9pbihSLFUpKSkpfSk7cmV0dXJuIGZ1bmN0aW9uIEwoUil7cmV0dXJuIFMuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSk7ZnVuY3Rpb24gdyhTKXts''@;'; put 'put ''ZXQgTDt0cnl7TD1jLnJlYWRkaXJTeW5jKFMpfWNhdGNoe3JldHVybiBBLm1rZGlyc1N5bmMoUyl9TC5mb3JFYWNoKFI9PntSPXMuam9pbihTLFIpLHYucmVtb3ZlU3luYyhSKX0pfWZlLmV4cG9ydHM9e2VtcHR5RGlyU3luYzp3LGVtcHR5ZGlyU3luYzp3LGVtcHR5RGlyOkMsZW1wdHlkaXI6''@;'; put 'put ''Q319LDg5NjE2KGZlLGosaCl7InVzZSBzdHJpY3QiO2NvbnN0IHk9aCg0MTIzNikuZnJvbVByb21pc2UsYz1oKDQzNjI3KSxzPWgoOTg3MzcpLEE9aCg2Mzc5OCk7ZnVuY3Rpb24gQygpe3JldHVybihDPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihTKXtsZXQgTDt0cnl7TD15aWVsZCBz''@;'; put 'put ''LnN0YXQoUyl9Y2F0Y2h7fWlmKEwmJkwuaXNGaWxlKCkpcmV0dXJuO2NvbnN0IFI9Yy5kaXJuYW1lKFMpO2xldCB4PW51bGw7dHJ5e3g9eWllbGQgcy5zdGF0KFIpfWNhdGNoKFUpe2lmKCJFTk9FTlQiPT09VS5jb2RlKXJldHVybiB5aWVsZCBBLm1rZGlycyhSKSx2b2lkKHlpZWxkIHMud3Jp''@;'; put 'put ''dGVGaWxlKFMsIiIpKTt0aHJvdyBVfXguaXNEaXJlY3RvcnkoKT95aWVsZCBzLndyaXRlRmlsZShTLCIiKTp5aWVsZCBzLnJlYWRkaXIoUil9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZlLmV4cG9ydHM9e2NyZWF0ZUZpbGU6eShmdW5jdGlvbiB2KFMpe3JldHVybiBDLmFwcGx5KHRoaXMs''@;'; put 'put ''YXJndW1lbnRzKX0pLGNyZWF0ZUZpbGVTeW5jOmZ1bmN0aW9uIHcoUyl7bGV0IEw7dHJ5e0w9cy5zdGF0U3luYyhTKX1jYXRjaHt9aWYoTCYmTC5pc0ZpbGUoKSlyZXR1cm47Y29uc3QgUj1jLmRpcm5hbWUoUyk7dHJ5e3Muc3RhdFN5bmMoUikuaXNEaXJlY3RvcnkoKXx8cy5yZWFkZGlyU3lu''@;'; put 'put ''YyhSKX1jYXRjaCh4KXtpZigheHx8IkVOT0VOVCIhPT14LmNvZGUpdGhyb3cgeDtBLm1rZGlyc1N5bmMoUil9cy53cml0ZUZpbGVTeW5jKFMsIiIpfX19LDc2Mjg4KGZlLGosaCl7InVzZSBzdHJpY3QiO2NvbnN0e2NyZWF0ZUZpbGU6eSxjcmVhdGVGaWxlU3luYzpjfT1oKDg5NjE2KSx7Y3Jl''@;'; put 'put ''YXRlTGluazpzLGNyZWF0ZUxpbmtTeW5jOkF9PWgoOTE1MjIpLHtjcmVhdGVTeW1saW5rOnYsY3JlYXRlU3ltbGlua1N5bmM6Q309aCg1NTI5MSk7ZmUuZXhwb3J0cz17Y3JlYXRlRmlsZTp5LGNyZWF0ZUZpbGVTeW5jOmMsZW5zdXJlRmlsZTp5LGVuc3VyZUZpbGVTeW5jOmMsY3JlYXRlTGlu''@;'; put 'put ''azpzLGNyZWF0ZUxpbmtTeW5jOkEsZW5zdXJlTGluazpzLGVuc3VyZUxpbmtTeW5jOkEsY3JlYXRlU3ltbGluazp2LGNyZWF0ZVN5bWxpbmtTeW5jOkMsZW5zdXJlU3ltbGluazp2LGVuc3VyZVN5bWxpbmtTeW5jOkN9fSw5MTUyMihmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijtjb25zdCB5PWgoNDEy''@;'; put 'put ''MzYpLmZyb21Qcm9taXNlLGM9aCg0MzYyNykscz1oKDk4NzM3KSxBPWgoNjM3OTgpLHtwYXRoRXhpc3RzOnZ9PWgoMjkyODgpLHthcmVJZGVudGljYWw6Q309aCg2NjQ2Mik7ZnVuY3Rpb24gUygpe3JldHVybihTPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihSLHgpe2xldCBVLEg7dHJ5''@;'; put 'put ''e1U9eWllbGQgcy5sc3RhdCh4KX1jYXRjaHt9dHJ5e0g9eWllbGQgcy5sc3RhdChSKX1jYXRjaCh6KXt0aHJvdyB6Lm1lc3NhZ2U9ei5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlTGluayIpLHp9aWYoVSYmQyhILFUpKXJldHVybjtjb25zdCBWPWMuZGlybmFtZSh4KTsoeWllbGQg''@;'; put 'put ''dihWKSl8fCh5aWVsZCBBLm1rZGlycyhWKSkseWllbGQgcy5saW5rKFIseCl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZlLmV4cG9ydHM9e2NyZWF0ZUxpbms6eShmdW5jdGlvbiB3KFIseCl7cmV0dXJuIFMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksY3JlYXRlTGlua1N5bmM6ZnVuY3Rp''@;'; put 'put ''b24gTChSLHgpe2xldCBVO3RyeXtVPXMubHN0YXRTeW5jKHgpfWNhdGNoe310cnl7Y29uc3QgTj1zLmxzdGF0U3luYyhSKTtpZihVJiZDKE4sVSkpcmV0dXJufWNhdGNoKE4pe3Rocm93IE4ubWVzc2FnZT1OLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVMaW5rIiksTn1jb25zdCBI''@;'; put 'put ''PWMuZGlybmFtZSh4KTtyZXR1cm4gcy5leGlzdHNTeW5jKEgpfHxBLm1rZGlyc1N5bmMoSCkscy5saW5rU3luYyhSLHgpfX19LDczODM4KGZlLGosaCl7InVzZSBzdHJpY3QiO2NvbnN0IHk9aCg0MzYyNyksYz1oKDk4NzM3KSx7cGF0aEV4aXN0czpzfT1oKDI5Mjg4KSxBPWgoNDEyMzYpLmZy''@;'; put 'put ''b21Qcm9taXNlO2Z1bmN0aW9uIEMoKXtyZXR1cm4oQz1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooUyxMKXtpZih5LmlzQWJzb2x1dGUoUykpe3RyeXt5aWVsZCBjLmxzdGF0KFMpfWNhdGNoKEgpe3Rocm93IEgubWVzc2FnZT1ILm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVT''@;'; put 'put ''eW1saW5rIiksSH1yZXR1cm57dG9Dd2Q6Uyx0b0RzdDpTfX1jb25zdCBSPXkuZGlybmFtZShMKSx4PXkuam9pbihSLFMpO2lmKHlpZWxkIHMoeCkpcmV0dXJue3RvQ3dkOngsdG9Ec3Q6U307dHJ5e3lpZWxkIGMubHN0YXQoUyl9Y2F0Y2goSCl7dGhyb3cgSC5tZXNzYWdlPUgubWVzc2FnZS5y''@;'; put 'put ''ZXBsYWNlKCJsc3RhdCIsImVuc3VyZVN5bWxpbmsiKSxIfXJldHVybnt0b0N3ZDpTLHRvRHN0OnkucmVsYXRpdmUoUixTKX19KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZlLmV4cG9ydHM9e3N5bWxpbmtQYXRoczpBKGZ1bmN0aW9uIHYoUyxMKXtyZXR1cm4gQy5hcHBseSh0aGlzLGFyZ3Vt''@;'; put 'put ''ZW50cyl9KSxzeW1saW5rUGF0aHNTeW5jOmZ1bmN0aW9uIHcoUyxMKXtpZih5LmlzQWJzb2x1dGUoUykpe2lmKCFjLmV4aXN0c1N5bmMoUykpdGhyb3cgbmV3IEVycm9yKCJhYnNvbHV0ZSBzcmNwYXRoIGRvZXMgbm90IGV4aXN0Iik7cmV0dXJue3RvQ3dkOlMsdG9Ec3Q6U319Y29uc3QgUj15''@;'; put 'put ''LmRpcm5hbWUoTCkseD15LmpvaW4oUixTKTtpZihjLmV4aXN0c1N5bmMoeCkpcmV0dXJue3RvQ3dkOngsdG9Ec3Q6U307aWYoIWMuZXhpc3RzU3luYyhTKSl0aHJvdyBuZXcgRXJyb3IoInJlbGF0aXZlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QiKTtyZXR1cm57dG9Dd2Q6Uyx0b0RzdDp5LnJl''@;'; put 'put ''bGF0aXZlKFIsUyl9fX19LDQ3MDY0KGZlLGosaCl7InVzZSBzdHJpY3QiO2NvbnN0IHk9aCg5ODczNyksYz1oKDQxMjM2KS5mcm9tUHJvbWlzZTtmdW5jdGlvbiBBKCl7cmV0dXJuKEE9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKEMsdyl7aWYodylyZXR1cm4gdztsZXQgUzt0cnl7Uz15''@;'; put 'put ''aWVsZCB5LmxzdGF0KEMpfWNhdGNoe3JldHVybiJmaWxlIn1yZXR1cm4gUyYmUy5pc0RpcmVjdG9yeSgpPyJkaXIiOiJmaWxlIn0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmUuZXhwb3J0cz17c3ltbGlua1R5cGU6YyhmdW5jdGlvbiBzKEMsdyl7cmV0dXJuIEEuYXBwbHkodGhpcyxhcmd1''@;'; put 'put ''bWVudHMpfSksc3ltbGlua1R5cGVTeW5jOmZ1bmN0aW9uIHYoQyx3KXtpZih3KXJldHVybiB3O2xldCBTO3RyeXtTPXkubHN0YXRTeW5jKEMpfWNhdGNoe3JldHVybiJmaWxlIn1yZXR1cm4gUyYmUy5pc0RpcmVjdG9yeSgpPyJkaXIiOiJmaWxlIn19fSw1NTI5MShmZSxqLGgpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijtjb25zdCB5PWgoNDEyMzYpLmZyb21Qcm9taXNlLGM9aCg0MzYyNykscz1oKDk4NzM3KSx7bWtkaXJzOkEsbWtkaXJzU3luYzp2fT1oKDYzNzk4KSx7c3ltbGlua1BhdGhzOkMsc3ltbGlua1BhdGhzU3luYzp3fT1oKDczODM4KSx7c3ltbGlua1R5cGU6UyxzeW1saW5rVHlwZVN5bmM6''@;'; put 'put ''TH09aCg0NzA2NCkse3BhdGhFeGlzdHM6Un09aCgyOTI4OCkse2FyZUlkZW50aWNhbDp4fT1oKDY2NDYyKTtmdW5jdGlvbiBIKCl7cmV0dXJuKEg9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKE4seixZKXtsZXQgRjt0cnl7Rj15aWVsZCBzLmxzdGF0KHopfWNhdGNoe31pZihGJiZGLmlz''@;'; put 'put ''U3ltYm9saWNMaW5rKCkpe2NvbnN0W21lLENlXT15aWVsZCBQcm9taXNlLmFsbChbcy5zdGF0KE4pLHMuc3RhdCh6KV0pO2lmKHgobWUsQ2UpKXJldHVybn1jb25zdCBXPXlpZWxkIEMoTix6KTtOPVcudG9Ec3Q7Y29uc3QgcT15aWVsZCBTKFcudG9Dd2QsWSkscmU9Yy5kaXJuYW1lKHopO3Jl''@;'; put 'put ''dHVybih5aWVsZCBSKHJlKSl8fCh5aWVsZCBBKHJlKSkscy5zeW1saW5rKE4seixxKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmUuZXhwb3J0cz17Y3JlYXRlU3ltbGluazp5KGZ1bmN0aW9uIFUoTix6LFkpe3JldHVybiBILmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGNyZWF0ZVN5bWxp''@;'; put 'put ''bmtTeW5jOmZ1bmN0aW9uIFYoTix6LFkpe2xldCBGO3RyeXtGPXMubHN0YXRTeW5jKHopfWNhdGNoe31pZihGJiZGLmlzU3ltYm9saWNMaW5rKCkpe2NvbnN0IG1lPXMuc3RhdFN5bmMoTiksQ2U9cy5zdGF0U3luYyh6KTtpZih4KG1lLENlKSlyZXR1cm59Y29uc3QgVz13KE4seik7Tj1XLnRv''@;'; put 'put ''RHN0LFk9TChXLnRvQ3dkLFkpO2NvbnN0IHE9Yy5kaXJuYW1lKHopO3JldHVybiBzLmV4aXN0c1N5bmMocSl8fHYocSkscy5zeW1saW5rU3luYyhOLHosWSl9fX0sOTg3MzcoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg2NTYwNik7Y29uc3QgYz1oKDQxMjM2KS5mcm9tQ2FsbGJhY2ss''@;'; put 'put ''cz1oKDYzNzM1KSxBPVsiYWNjZXNzIiwiYXBwZW5kRmlsZSIsImNobW9kIiwiY2hvd24iLCJjbG9zZSIsImNvcHlGaWxlIiwiY3AiLCJmY2htb2QiLCJmY2hvd24iLCJmZGF0YXN5bmMiLCJmc3RhdCIsImZzeW5jIiwiZnRydW5jYXRlIiwiZnV0aW1lcyIsImdsb2IiLCJsY2htb2QiLCJsY2hv''@;'; put 'put ''d24iLCJsdXRpbWVzIiwibGluayIsImxzdGF0IiwibWtkaXIiLCJta2R0ZW1wIiwib3BlbiIsIm9wZW5kaXIiLCJyZWFkZGlyIiwicmVhZEZpbGUiLCJyZWFkbGluayIsInJlYWxwYXRoIiwicmVuYW1lIiwicm0iLCJybWRpciIsInN0YXQiLCJzdGF0ZnMiLCJzeW1saW5rIiwidHJ1bmNhdGUi''@;'; put 'put ''LCJ1bmxpbmsiLCJ1dGltZXMiLCJ3cml0ZUZpbGUiXS5maWx0ZXIodj0+ImZ1bmN0aW9uIj09dHlwZW9mIHNbdl0pO09iamVjdC5hc3NpZ24oaixzKSxBLmZvckVhY2godj0+e2pbdl09YyhzW3ZdKX0pLGouZXhpc3RzPWZ1bmN0aW9uKHYsQyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEM/''@;'; put 'put ''cy5leGlzdHModixDKTpuZXcgUHJvbWlzZSh3PT5zLmV4aXN0cyh2LHcpKX0sai5yZWFkPWZ1bmN0aW9uKHYsQyx3LFMsTCxSKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUj9zLnJlYWQodixDLHcsUyxMLFIpOm5ldyBQcm9taXNlKCh4LFUpPT57cy5yZWFkKHYsQyx3LFMsTCwoSCxWLE4p''@;'; put 'put ''PT57aWYoSClyZXR1cm4gVShIKTt4KHtieXRlc1JlYWQ6VixidWZmZXI6Tn0pfSl9KX0sai53cml0ZT1mdW5jdGlvbih2LEMsLi4udyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHdbdy5sZW5ndGgtMV0/cy53cml0ZSh2LEMsLi4udyk6bmV3IFByb21pc2UoKFMsTCk9PntzLndyaXRlKHYs''@;'; put 'put ''QywuLi53LChSLHgsVSk9PntpZihSKXJldHVybiBMKFIpO1Moe2J5dGVzV3JpdHRlbjp4LGJ1ZmZlcjpVfSl9KX0pfSxqLnJlYWR2PWZ1bmN0aW9uKHYsQywuLi53KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygd1t3Lmxlbmd0aC0xXT9zLnJlYWR2KHYsQywuLi53KTpuZXcgUHJvbWlzZSgo''@;'; put 'put ''UyxMKT0+e3MucmVhZHYodixDLC4uLncsKFIseCxVKT0+e2lmKFIpcmV0dXJuIEwoUik7Uyh7Ynl0ZXNSZWFkOngsYnVmZmVyczpVfSl9KX0pfSxqLndyaXRldj1mdW5jdGlvbih2LEMsLi4udyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHdbdy5sZW5ndGgtMV0/cy53cml0ZXYodixDLC4u''@;'; put 'put ''LncpOm5ldyBQcm9taXNlKChTLEwpPT57cy53cml0ZXYodixDLC4uLncsKFIseCxVKT0+e2lmKFIpcmV0dXJuIEwoUik7Uyh7Ynl0ZXNXcml0dGVuOngsYnVmZmVyczpVfSl9KX0pfSwiZnVuY3Rpb24iPT10eXBlb2Ygcy5yZWFscGF0aC5uYXRpdmU/ai5yZWFscGF0aC5uYXRpdmU9YyhzLnJl''@;'; put 'put ''YWxwYXRoLm5hdGl2ZSk6eS5lbWl0V2FybmluZygiZnMucmVhbHBhdGgubmF0aXZlIGlzIG5vdCBhIGZ1bmN0aW9uLiBJcyBmcyBiZWluZyBtb25rZXktcGF0Y2hlZD8iLCJXYXJuaW5nIiwiZnMtZXh0cmEtV0FSTjAwMDMiKX0sMjE2MDUoZmUsaixoKXsidXNlIHN0cmljdCI7ZmUuZXhwb3J0''@;'; put 'put ''cz17Li4uaCg5ODczNyksLi4uaCg0NDIzKSwuLi5oKDUyNTkxKSwuLi5oKDc2Mjg4KSwuLi5oKDIzMzc2KSwuLi5oKDYzNzk4KSwuLi5oKDQyNDU1KSwuLi5oKDc3MDI0KSwuLi5oKDI5Mjg4KSwuLi5oKDM1NDIyKX19LDIzMzc2KGZlLGosaCl7InVzZSBzdHJpY3QiO2NvbnN0IHk9aCg0MTIz''@;'; put 'put ''NikuZnJvbVByb21pc2UsYz1oKDEyOTM0KTtjLm91dHB1dEpzb249eShoKDY0MjYpKSxjLm91dHB1dEpzb25TeW5jPWgoMzIxODgpLGMub3V0cHV0SlNPTj1jLm91dHB1dEpzb24sYy5vdXRwdXRKU09OU3luYz1jLm91dHB1dEpzb25TeW5jLGMud3JpdGVKU09OPWMud3JpdGVKc29uLGMud3Jp''@;'; put 'put ''dGVKU09OU3luYz1jLndyaXRlSnNvblN5bmMsYy5yZWFkSlNPTj1jLnJlYWRKc29uLGMucmVhZEpTT05TeW5jPWMucmVhZEpzb25TeW5jLGZlLmV4cG9ydHM9Y30sMTI5MzQoZmUsaixoKXsidXNlIHN0cmljdCI7Y29uc3QgeT1oKDI5MDkpO2ZlLmV4cG9ydHM9e3JlYWRKc29uOnkucmVhZEZp''@;'; put 'put ''bGUscmVhZEpzb25TeW5jOnkucmVhZEZpbGVTeW5jLHdyaXRlSnNvbjp5LndyaXRlRmlsZSx3cml0ZUpzb25TeW5jOnkud3JpdGVGaWxlU3luY319LDMyMTg4KGZlLGosaCl7InVzZSBzdHJpY3QiO2NvbnN0e3N0cmluZ2lmeTp5fT1oKDExMTQ0KSx7b3V0cHV0RmlsZVN5bmM6Y309aCg3NzAy''@;'; put 'put ''NCk7ZmUuZXhwb3J0cz1mdW5jdGlvbiBzKEEsdixDKXtjb25zdCB3PXkodixDKTtjKEEsdyxDKX19LDY0MjYoZmUsaixoKXsidXNlIHN0cmljdCI7Y29uc3R7c3RyaW5naWZ5Onl9PWgoMTExNDQpLHtvdXRwdXRGaWxlOmN9PWgoNzcwMjQpO2Z1bmN0aW9uIEEoKXtyZXR1cm4oQT1fYXN5bmNU''@;'; put 'put ''b0dlbmVyYXRvcihmdW5jdGlvbioodixDLHc9e30pe2NvbnN0IFM9eShDLHcpO3lpZWxkIGModixTLHcpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mZS5leHBvcnRzPWZ1bmN0aW9uIHModixDKXtyZXR1cm4gQS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSw2Mzc5OChmZSxqLGgpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijtjb25zdCB5PWgoNDEyMzYpLmZyb21Qcm9taXNlLHttYWtlRGlyOmMsbWFrZURpclN5bmM6c309aCg5ODkxNiksQT15KGMpO2ZlLmV4cG9ydHM9e21rZGlyczpBLG1rZGlyc1N5bmM6cyxta2RpcnA6QSxta2RpcnBTeW5jOnMsZW5zdXJlRGlyOkEsZW5zdXJlRGlyU3luYzpzfX0s''@;'; put 'put ''OTg5MTYoZmUsaixoKXsidXNlIHN0cmljdCI7Y29uc3QgeT1oKDk4NzM3KSx7Y2hlY2tQYXRoOmN9PWgoMTcxMTEpLHM9QT0+Im51bWJlciI9PXR5cGVvZiBBP0E6e21vZGU6NTExLC4uLkF9Lm1vZGU7ZmUuZXhwb3J0cy5tYWtlRGlyPWZ1bmN0aW9uKCl7dmFyIEE9X2FzeW5jVG9HZW5lcmF0''@;'; put 'put ''b3IoZnVuY3Rpb24qKHYsQyl7cmV0dXJuIGModikseS5ta2Rpcih2LHttb2RlOnMoQykscmVjdXJzaXZlOiEwfSl9KTtyZXR1cm4gZnVuY3Rpb24odixDKXtyZXR1cm4gQS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGZlLmV4cG9ydHMubWFrZURpclN5bmM9KEEsdik9PihjKEEpLHkubWtk''@;'; put 'put ''aXJTeW5jKEEse21vZGU6cyh2KSxyZWN1cnNpdmU6ITB9KSl9LDE3MTExKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNjU2MDYpO2NvbnN0IGM9aCg0MzYyNyk7ZmUuZXhwb3J0cy5jaGVja1BhdGg9ZnVuY3Rpb24oQSl7aWYoIndpbjMyIj09PXkucGxhdGZvcm0mJi9bPD46Inw/Kl0v''@;'; put 'put ''LnRlc3QoQS5yZXBsYWNlKGMucGFyc2UoQSkucm9vdCwiIikpKXtjb25zdCBDPW5ldyBFcnJvcihgUGF0aCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnM6ICR7QX1gKTt0aHJvdyBDLmNvZGU9IkVJTlZBTCIsQ319fSw0MjQ1NShmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijtjb25zdCB5PWgoNDEy''@;'; put 'put ''MzYpLmZyb21Qcm9taXNlO2ZlLmV4cG9ydHM9e21vdmU6eShoKDEzMzE0KSksbW92ZVN5bmM6aCg4NjI0NCl9fSw4NjI0NChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijtjb25zdCB5PWgoNjM3MzUpLGM9aCg0MzYyNykscz1oKDQ0MjMpLmNvcHlTeW5jLEE9aCgzNTQyMikucmVtb3ZlU3luYyx2PWgo''@;'; put 'put ''NjM3OTgpLm1rZGlycFN5bmMsQz1oKDY2NDYyKTtmdW5jdGlvbiBSKFUsSCxWKXt0cnl7eS5yZW5hbWVTeW5jKFUsSCl9Y2F0Y2goTil7aWYoIkVYREVWIiE9PU4uY29kZSl0aHJvdyBOO3JldHVybiBmdW5jdGlvbiB4KFUsSCxWKXtyZXR1cm4gcyhVLEgse292ZXJ3cml0ZTpWLGVycm9yT25F''@;'; put 'put ''eGlzdDohMCxwcmVzZXJ2ZVRpbWVzdGFtcHM6ITB9KSxBKFUpfShVLEgsVil9fWZlLmV4cG9ydHM9ZnVuY3Rpb24gdyhVLEgsVil7Y29uc3QgTj0oVj1WfHx7fSkub3ZlcndyaXRlfHxWLmNsb2JiZXJ8fCExLHtzcmNTdGF0OnosaXNDaGFuZ2luZ0Nhc2U6WT0hMX09Qy5jaGVja1BhdGhzU3lu''@;'; put 'put ''YyhVLEgsIm1vdmUiLFYpO3JldHVybiBDLmNoZWNrUGFyZW50UGF0aHNTeW5jKFUseixILCJtb3ZlIiksZnVuY3Rpb24gUyhVKXtjb25zdCBIPWMuZGlybmFtZShVKTtyZXR1cm4gYy5wYXJzZShIKS5yb290PT09SH0oSCl8fHYoYy5kaXJuYW1lKEgpKSxmdW5jdGlvbiBMKFUsSCxWLE4pe2lm''@;'; put 'put ''KE4pcmV0dXJuIFIoVSxILFYpO2lmKFYpcmV0dXJuIEEoSCksUihVLEgsVik7aWYoeS5leGlzdHNTeW5jKEgpKXRocm93IG5ldyBFcnJvcigiZGVzdCBhbHJlYWR5IGV4aXN0cy4iKTtyZXR1cm4gUihVLEgsVil9KFUsSCxOLFkpfX0sMTMzMTQoZmUsaixoKXsidXNlIHN0cmljdCI7Y29uc3Qg''@;'; put 'put ''eT1oKDk4NzM3KSxjPWgoNDM2MjcpLHtjb3B5OnN9PWgoNDQyMykse3JlbW92ZTpBfT1oKDM1NDIyKSx7bWtkaXJwOnZ9PWgoNjM3OTgpLHtwYXRoRXhpc3RzOkN9PWgoMjkyODgpLHc9aCg2NjQ2Mik7ZnVuY3Rpb24gTCgpe3JldHVybiBMPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihW''@;'; put 'put ''LE4sej17fSl7Y29uc3QgWT16Lm92ZXJ3cml0ZXx8ei5jbG9iYmVyfHwhMSx7c3JjU3RhdDpGLGlzQ2hhbmdpbmdDYXNlOlc9ITF9PXlpZWxkIHcuY2hlY2tQYXRocyhWLE4sIm1vdmUiLHopO3lpZWxkIHcuY2hlY2tQYXJlbnRQYXRocyhWLEYsTiwibW92ZSIpO2NvbnN0IHE9Yy5kaXJuYW1l''@;'; put 'put ''KE4pO3JldHVybiBjLnBhcnNlKHEpLnJvb3QhPT1xJiYoeWllbGQgdihxKSksZnVuY3Rpb24gUihWLE4seixZKXtyZXR1cm4geC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KFYsTixZLFcpfSksTC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24geCgpe3JldHVybiB4PV9hc3luY1RvR2Vu''@;'; put 'put ''ZXJhdG9yKGZ1bmN0aW9uKihWLE4seixZKXtpZighWSlpZih6KXlpZWxkIEEoTik7ZWxzZSBpZih5aWVsZCBDKE4pKXRocm93IG5ldyBFcnJvcigiZGVzdCBhbHJlYWR5IGV4aXN0cy4iKTt0cnl7eWllbGQgeS5yZW5hbWUoVixOKX1jYXRjaChGKXtpZigiRVhERVYiIT09Ri5jb2RlKXRocm93''@;'; put 'put ''IEY7eWllbGQgZnVuY3Rpb24gVShWLE4seil7cmV0dXJuIEguYXBwbHkodGhpcyxhcmd1bWVudHMpfShWLE4seil9fSkseC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gSCgpe3JldHVybihIPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihWLE4seil7cmV0dXJuIHlpZWxkIHMo''@;'; put 'put ''VixOLHtvdmVyd3JpdGU6eixlcnJvck9uRXhpc3Q6ITAscHJlc2VydmVUaW1lc3RhbXBzOiEwfSksQShWKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmUuZXhwb3J0cz1mdW5jdGlvbiBTKFYsTil7cmV0dXJuIEwuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sNzcwMjQoZmUsaixoKXsidXNl''@;'; put 'put ''IHN0cmljdCI7Y29uc3QgeT1oKDQxMjM2KS5mcm9tUHJvbWlzZSxjPWgoOTg3MzcpLHM9aCg0MzYyNyksQT1oKDYzNzk4KSx2PWgoMjkyODgpLnBhdGhFeGlzdHM7ZnVuY3Rpb24gdygpe3JldHVybih3PV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihMLFIseD0idXRmLTgiKXtjb25zdCBV''@;'; put 'put ''PXMuZGlybmFtZShMKTtyZXR1cm4oeWllbGQgdihVKSl8fCh5aWVsZCBBLm1rZGlycyhVKSksYy53cml0ZUZpbGUoTCxSLHgpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mZS5leHBvcnRzPXtvdXRwdXRGaWxlOnkoZnVuY3Rpb24gQyhMLFIpe3JldHVybiB3LmFwcGx5KHRoaXMsYXJndW1l''@;'; put 'put ''bnRzKX0pLG91dHB1dEZpbGVTeW5jOmZ1bmN0aW9uIFMoTCwuLi5SKXtjb25zdCB4PXMuZGlybmFtZShMKTtjLmV4aXN0c1N5bmMoeCl8fEEubWtkaXJzU3luYyh4KSxjLndyaXRlRmlsZVN5bmMoTCwuLi5SKX19fSwyOTI4OChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijtjb25zdCB5PWgoNDEyMzYp''@;'; put 'put ''LmZyb21Qcm9taXNlLGM9aCg5ODczNyk7ZmUuZXhwb3J0cz17cGF0aEV4aXN0czp5KGZ1bmN0aW9uIHMoQSl7cmV0dXJuIGMuYWNjZXNzKEEpLnRoZW4oKCk9PiEwKS5jYXRjaCgoKT0+ITEpfSkscGF0aEV4aXN0c1N5bmM6Yy5leGlzdHNTeW5jfX0sMzU0MjIoZmUsaixoKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7Y29uc3QgeT1oKDYzNzM1KSxjPWgoNDEyMzYpLmZyb21DYWxsYmFjaztmZS5leHBvcnRzPXtyZW1vdmU6YyhmdW5jdGlvbiBzKHYsQyl7eS5ybSh2LHtyZWN1cnNpdmU6ITAsZm9yY2U6ITB9LEMpfSkscmVtb3ZlU3luYzpmdW5jdGlvbiBBKHYpe3kucm1TeW5jKHYse3JlY3Vyc2l2ZToh''@;'; put 'put ''MCxmb3JjZTohMH0pfX19LDY2NDYyKGZlLGosaCl7InVzZSBzdHJpY3QiO2NvbnN0IHk9aCg5ODczNyksYz1oKDQzNjI3KSxzPWgoNDEyMzYpLmZyb21Qcm9taXNlO2Z1bmN0aW9uIHcoKXtyZXR1cm4odz1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooTix6LFksRil7Y29uc3R7c3JjU3Rh''@;'; put 'put ''dDpXLGRlc3RTdGF0OnF9PXlpZWxkIGZ1bmN0aW9uIEEoTix6LFkpe2NvbnN0IEY9WS5kZXJlZmVyZW5jZT9XPT55LnN0YXQoVyx7YmlnaW50OiEwfSk6Vz0+eS5sc3RhdChXLHtiaWdpbnQ6ITB9KTtyZXR1cm4gUHJvbWlzZS5hbGwoW0YoTiksRih6KS5jYXRjaChXPT57aWYoIkVOT0VOVCI9''@;'; put 'put ''PT1XLmNvZGUpcmV0dXJuIG51bGw7dGhyb3cgV30pXSkudGhlbigoW1cscV0pPT4oe3NyY1N0YXQ6VyxkZXN0U3RhdDpxfSkpfShOLHosRik7aWYocSl7aWYoVShXLHEpKXtjb25zdCByZT1jLmJhc2VuYW1lKE4pLG1lPWMuYmFzZW5hbWUoeik7aWYoIm1vdmUiPT09WSYmcmUhPT1tZSYmcmUu''@;'; put 'put ''dG9Mb3dlckNhc2UoKT09PW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJue3NyY1N0YXQ6VyxkZXN0U3RhdDpxLGlzQ2hhbmdpbmdDYXNlOiEwfTt0aHJvdyBuZXcgRXJyb3IoIlNvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuIil9aWYoVy5pc0RpcmVjdG9yeSgpJiYh''@;'; put 'put ''cS5pc0RpcmVjdG9yeSgpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBub24tZGlyZWN0b3J5ICcke3p9JyB3aXRoIGRpcmVjdG9yeSAnJHtOfScuYCk7aWYoIVcuaXNEaXJlY3RvcnkoKSYmcS5pc0RpcmVjdG9yeSgpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0''@;'; put 'put ''ZSBkaXJlY3RvcnkgJyR7en0nIHdpdGggbm9uLWRpcmVjdG9yeSAnJHtOfScuYCl9aWYoVy5pc0RpcmVjdG9yeSgpJiZIKE4seikpdGhyb3cgbmV3IEVycm9yKFYoTix6LFkpKTtyZXR1cm57c3JjU3RhdDpXLGRlc3RTdGF0OnF9fSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBM''@;'; put 'put ''KE4seixZLEYpe3JldHVybiBSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBSKCl7cmV0dXJuKFI9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKE4seixZLEYpe2NvbnN0IFc9Yy5yZXNvbHZlKGMuZGlybmFtZShOKSkscT1jLnJlc29sdmUoYy5kaXJuYW1lKFkpKTtpZihxPT09''@;'; put 'put ''V3x8cT09PWMucGFyc2UocSkucm9vdClyZXR1cm47bGV0IHJlO3RyeXtyZT15aWVsZCB5LnN0YXQocSx7YmlnaW50OiEwfSl9Y2F0Y2gobWUpe2lmKCJFTk9FTlQiPT09bWUuY29kZSlyZXR1cm47dGhyb3cgbWV9aWYoVSh6LHJlKSl0aHJvdyBuZXcgRXJyb3IoVihOLFksRikpO3JldHVybiBM''@;'; put 'put ''KE4seixxLEYpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBVKE4seil7cmV0dXJuIHouaW5vJiZ6LmRldiYmei5pbm89PT1OLmlubyYmei5kZXY9PT1OLmRldn1mdW5jdGlvbiBIKE4seil7Y29uc3QgWT1jLnJlc29sdmUoTikuc3BsaXQoYy5zZXApLmZpbHRlcihXPT5XKSxG''@;'; put 'put ''PWMucmVzb2x2ZSh6KS5zcGxpdChjLnNlcCkuZmlsdGVyKFc9PlcpO3JldHVybiBZLmV2ZXJ5KChXLHEpPT5GW3FdPT09Vyl9ZnVuY3Rpb24gVihOLHosWSl7cmV0dXJuYENhbm5vdCAke1l9ICcke059JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke3p9Jy5gfWZlLmV4cG9ydHM9''@;'; put 'put ''e2NoZWNrUGF0aHM6cyhmdW5jdGlvbiBDKE4seixZLEYpe3JldHVybiB3LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGNoZWNrUGF0aHNTeW5jOmZ1bmN0aW9uIFMoTix6LFksRil7Y29uc3R7c3JjU3RhdDpXLGRlc3RTdGF0OnF9PWZ1bmN0aW9uIHYoTix6LFkpe2xldCBGO2NvbnN0IFc9WS5k''@;'; put 'put ''ZXJlZmVyZW5jZT9yZT0+eS5zdGF0U3luYyhyZSx7YmlnaW50OiEwfSk6cmU9PnkubHN0YXRTeW5jKHJlLHtiaWdpbnQ6ITB9KSxxPVcoTik7dHJ5e0Y9Vyh6KX1jYXRjaChyZSl7aWYoIkVOT0VOVCI9PT1yZS5jb2RlKXJldHVybntzcmNTdGF0OnEsZGVzdFN0YXQ6bnVsbH07dGhyb3cgcmV9''@;'; put 'put ''cmV0dXJue3NyY1N0YXQ6cSxkZXN0U3RhdDpGfX0oTix6LEYpO2lmKHEpe2lmKFUoVyxxKSl7Y29uc3QgcmU9Yy5iYXNlbmFtZShOKSxtZT1jLmJhc2VuYW1lKHopO2lmKCJtb3ZlIj09PVkmJnJlIT09bWUmJnJlLnRvTG93ZXJDYXNlKCk9PT1tZS50b0xvd2VyQ2FzZSgpKXJldHVybntzcmNT''@;'; put 'put ''dGF0OlcsZGVzdFN0YXQ6cSxpc0NoYW5naW5nQ2FzZTohMH07dGhyb3cgbmV3IEVycm9yKCJTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG11c3Qgbm90IGJlIHRoZSBzYW1lLiIpfWlmKFcuaXNEaXJlY3RvcnkoKSYmIXEuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVy''@;'; put 'put ''d3JpdGUgbm9uLWRpcmVjdG9yeSAnJHt6fScgd2l0aCBkaXJlY3RvcnkgJyR7Tn0nLmApO2lmKCFXLmlzRGlyZWN0b3J5KCkmJnEuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgZGlyZWN0b3J5ICcke3p9JyB3aXRoIG5vbi1kaXJlY3RvcnkgJyR7Tn0n''@;'; put 'put ''LmApfWlmKFcuaXNEaXJlY3RvcnkoKSYmSChOLHopKXRocm93IG5ldyBFcnJvcihWKE4seixZKSk7cmV0dXJue3NyY1N0YXQ6VyxkZXN0U3RhdDpxfX0sY2hlY2tQYXJlbnRQYXRoczpzKEwpLGNoZWNrUGFyZW50UGF0aHNTeW5jOmZ1bmN0aW9uIHgoTix6LFksRil7Y29uc3QgVz1jLnJlc29s''@;'; put 'put ''dmUoYy5kaXJuYW1lKE4pKSxxPWMucmVzb2x2ZShjLmRpcm5hbWUoWSkpO2lmKHE9PT1XfHxxPT09Yy5wYXJzZShxKS5yb290KXJldHVybjtsZXQgcmU7dHJ5e3JlPXkuc3RhdFN5bmMocSx7YmlnaW50OiEwfSl9Y2F0Y2gobWUpe2lmKCJFTk9FTlQiPT09bWUuY29kZSlyZXR1cm47dGhyb3cg''@;'; put 'put ''bWV9aWYoVSh6LHJlKSl0aHJvdyBuZXcgRXJyb3IoVihOLFksRikpO3JldHVybiB4KE4seixxLEYpfSxpc1NyY1N1YmRpcjpILGFyZUlkZW50aWNhbDpVfX0sNDcyMTEoZmUsaixoKXsidXNlIHN0cmljdCI7Y29uc3QgeT1oKDk4NzM3KSxjPWgoNDEyMzYpLmZyb21Qcm9taXNlO2Z1bmN0aW9u''@;'; put 'put ''IEEoKXtyZXR1cm4oQT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooQyx3LFMpe2NvbnN0IEw9eWllbGQgeS5vcGVuKEMsInIrIik7bGV0IFI9bnVsbDt0cnl7eWllbGQgeS5mdXRpbWVzKEwsdyxTKX1maW5hbGx5e3RyeXt5aWVsZCB5LmNsb3NlKEwpfWNhdGNoKHgpe1I9eH19aWYoUil0''@;'; put 'put ''aHJvdyBSfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mZS5leHBvcnRzPXt1dGltZXNNaWxsaXM6YyhmdW5jdGlvbiBzKEMsdyxTKXtyZXR1cm4gQS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSx1dGltZXNNaWxsaXNTeW5jOmZ1bmN0aW9uIHYoQyx3LFMpe2NvbnN0IEw9eS5vcGVuU3luYyhD''@;'; put 'put ''LCJyKyIpO3JldHVybiB5LmZ1dGltZXNTeW5jKEwsdyxTKSx5LmNsb3NlU3luYyhMKX19fSw4OTM1MyhmZSl7InVzZSBzdHJpY3QiO3ZhciBoPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcseT1NYXRoLm1heCxzPWZ1bmN0aW9uKHcsUyl7Zm9yKHZhciBMPVtdLFI9MDtSPHcubGVuZ3RoO1Ir''@;'; put 'put ''PTEpTFtSXT13W1JdO2Zvcih2YXIgeD0wO3g8Uy5sZW5ndGg7eCs9MSlMW3grdy5sZW5ndGhdPVNbeF07cmV0dXJuIEx9O2ZlLmV4cG9ydHM9ZnVuY3Rpb24odyl7dmFyIFM9dGhpcztpZigiZnVuY3Rpb24iIT10eXBlb2YgU3x8IltvYmplY3QgRnVuY3Rpb25dIiE9PWguYXBwbHkoUykpdGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAiK1MpO2Zvcih2YXIgUixMPWZ1bmN0aW9uKHcpe2Zvcih2YXIgTD1bXSxSPTEseD0wO1I8dy5sZW5ndGg7Uis9MSx4Kz0xKUxbeF09d1tSXTtyZXR1cm4gTH0oYXJndW1lbnRz''@;'; put 'put ''KSxVPXkoMCxTLmxlbmd0aC1MLmxlbmd0aCksSD1bXSxWPTA7VjxVO1YrKylIW1ZdPSIkIitWO2lmKFI9RnVuY3Rpb24oImJpbmRlciIsInJldHVybiBmdW5jdGlvbiAoIitmdW5jdGlvbihDKXtmb3IodmFyIFM9IiIsTD0wO0w8Qy5sZW5ndGg7TCs9MSlTKz1DW0xdLEwrMTxDLmxlbmd0aCYm''@;'; put 'put ''KFMrPSIsIik7cmV0dXJuIFN9KEgpKyIpeyByZXR1cm4gYmluZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsgfSIpKGZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIFIpe3ZhciB6PVMuYXBwbHkodGhpcyxzKEwsYXJndW1lbnRzKSk7cmV0dXJuIE9iamVjdCh6KT09PXo/ejp0aGlzfXJl''@;'; put 'put ''dHVybiBTLmFwcGx5KHcscyhMLGFyZ3VtZW50cykpfSksUy5wcm90b3R5cGUpe3ZhciBOPWZ1bmN0aW9uKCl7fTtOLnByb3RvdHlwZT1TLnByb3RvdHlwZSxSLnByb3RvdHlwZT1uZXcgTixOLnByb3RvdHlwZT1udWxsfXJldHVybiBSfX0sNjY3NDMoZmUsaixoKXsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IHk9aCg4OTM1Myk7ZmUuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8eX0sNDIzMyhmZSl7InVzZSBzdHJpY3QiO2NvbnN0IGo9ZnVuY3Rpb24qKCl7fS5jb25zdHJ1Y3RvcjtmZS5leHBvcnRzPSgpPT5qfSw3MDQ1MyhmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeSxjPWgoNzk2''@;'; put 'put ''MTIpLHM9aCg2OTM4MyksQT1oKDQxMjM3KSx2PWgoNzkyOTApLEM9aCg3OTUzOCksdz1oKDU4MDY4KSxTPWgoNjk2NzUpLEw9aCgzNTM0NSksUj1oKDcxNTE0KSx4PWgoNTg5NjgpLFU9aCg2MTg4KSxIPWgoNjgwMDIpLFY9aCg3NTg4MCksTj1oKDcwNDE0KSx6PWgoNzMwOTMpLFk9RnVuY3Rp''@;'; put 'put ''b24sRj1mdW5jdGlvbihhZSl7dHJ5e3JldHVybiBZKCcidXNlIHN0cmljdCI7IHJldHVybiAoJythZSsiKS5jb25zdHJ1Y3RvcjsiKSgpfWNhdGNoe319LFc9aCg3NTc5NSkscT1oKDMwNjU1KSxyZT1mdW5jdGlvbigpe3Rocm93IG5ldyBTfSxtZT1XP2Z1bmN0aW9uKCl7dHJ5e3JldHVybiBy''@;'; put 'put ''ZX1jYXRjaHt0cnl7cmV0dXJuIFcoYXJndW1lbnRzLCJjYWxsZWUiKS5nZXR9Y2F0Y2h7cmV0dXJuIHJlfX19KCk6cmUsQ2U9aCg2NDAzOSkoKSxJZT1oKDkzNjI4KSxrZT1oKDcxMDY0KSxxZT1oKDQ4NjQ4KSxYPWgoMTEwMDIpLGY9aCgxMDA3NiksYj17fSxrPXR5cGVvZiBVaW50OEFycmF5''@;'; put 'put ''PiJ1Inx8IUllP3k6SWUoVWludDhBcnJheSksTT17X19wcm90b19fOm51bGwsIiVBZ2dyZWdhdGVFcnJvciUiOnR5cGVvZiBBZ2dyZWdhdGVFcnJvcj4idSI/eTpBZ2dyZWdhdGVFcnJvciwiJUFycmF5JSI6QXJyYXksIiVBcnJheUJ1ZmZlciUiOnR5cGVvZiBBcnJheUJ1ZmZlcj4idSI/eTpB''@;'; put 'put ''cnJheUJ1ZmZlciwiJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlIjpDZSYmSWU/SWUoW11bU3ltYm9sLml0ZXJhdG9yXSgpKTp5LCIlQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSI6eSwiJUFzeW5jRnVuY3Rpb24lIjpiLCIlQXN5bmNHZW5lcmF0b3IlIjpiLCIlQXN5bmNHZW5lcmF0''@;'; put 'put ''b3JGdW5jdGlvbiUiOmIsIiVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJSI6YiwiJUF0b21pY3MlIjp0eXBlb2YgQXRvbWljcz4idSI/eTpBdG9taWNzLCIlQmlnSW50JSI6dHlwZW9mIEJpZ0ludD4idSI/eTpCaWdJbnQsIiVCaWdJbnQ2NEFycmF5JSI6dHlwZW9mIEJpZ0ludDY0QXJyYXk+InUi''@;'; put 'put ''P3k6QmlnSW50NjRBcnJheSwiJUJpZ1VpbnQ2NEFycmF5JSI6dHlwZW9mIEJpZ1VpbnQ2NEFycmF5PiJ1Ij95OkJpZ1VpbnQ2NEFycmF5LCIlQm9vbGVhbiUiOkJvb2xlYW4sIiVEYXRhVmlldyUiOnR5cGVvZiBEYXRhVmlldz4idSI/eTpEYXRhVmlldywiJURhdGUlIjpEYXRlLCIlZGVjb2Rl''@;'; put 'put ''VVJJJSI6ZGVjb2RlVVJJLCIlZGVjb2RlVVJJQ29tcG9uZW50JSI6ZGVjb2RlVVJJQ29tcG9uZW50LCIlZW5jb2RlVVJJJSI6ZW5jb2RlVVJJLCIlZW5jb2RlVVJJQ29tcG9uZW50JSI6ZW5jb2RlVVJJQ29tcG9uZW50LCIlRXJyb3IlIjpzLCIlZXZhbCUiOmV2YWwsIiVFdmFsRXJyb3IlIjpB''@;'; put 'put ''LCIlRmxvYXQxNkFycmF5JSI6dHlwZW9mIEZsb2F0MTZBcnJheT4idSI/eTpGbG9hdDE2QXJyYXksIiVGbG9hdDMyQXJyYXklIjp0eXBlb2YgRmxvYXQzMkFycmF5PiJ1Ij95OkZsb2F0MzJBcnJheSwiJUZsb2F0NjRBcnJheSUiOnR5cGVvZiBGbG9hdDY0QXJyYXk+InUiP3k6RmxvYXQ2NEFy''@;'; put 'put ''cmF5LCIlRmluYWxpemF0aW9uUmVnaXN0cnklIjp0eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk+InUiP3k6RmluYWxpemF0aW9uUmVnaXN0cnksIiVGdW5jdGlvbiUiOlksIiVHZW5lcmF0b3JGdW5jdGlvbiUiOmIsIiVJbnQ4QXJyYXklIjp0eXBlb2YgSW50OEFycmF5PiJ1Ij95OkludDhB''@;'; put 'put ''cnJheSwiJUludDE2QXJyYXklIjp0eXBlb2YgSW50MTZBcnJheT4idSI/eTpJbnQxNkFycmF5LCIlSW50MzJBcnJheSUiOnR5cGVvZiBJbnQzMkFycmF5PiJ1Ij95OkludDMyQXJyYXksIiVpc0Zpbml0ZSUiOmlzRmluaXRlLCIlaXNOYU4lIjppc05hTiwiJUl0ZXJhdG9yUHJvdG90eXBlJSI6''@;'; put 'put ''Q2UmJkllP0llKEllKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpOnksIiVKU09OJSI6Im9iamVjdCI9PXR5cGVvZiBKU09OP0pTT046eSwiJU1hcCUiOnR5cGVvZiBNYXA+InUiP3k6TWFwLCIlTWFwSXRlcmF0b3JQcm90b3R5cGUlIjp0eXBlb2YgTWFwPiJ1Inx8IUNlfHwhSWU/eTpJZSgobmV3''@;'; put 'put ''IE1hcClbU3ltYm9sLml0ZXJhdG9yXSgpKSwiJU1hdGglIjpNYXRoLCIlTnVtYmVyJSI6TnVtYmVyLCIlT2JqZWN0JSI6YywiJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlIjpXLCIlcGFyc2VGbG9hdCUiOnBhcnNlRmxvYXQsIiVwYXJzZUludCUiOnBhcnNlSW50LCIlUHJvbWlz''@;'; put 'put ''ZSUiOnR5cGVvZiBQcm9taXNlPiJ1Ij95OlByb21pc2UsIiVQcm94eSUiOnR5cGVvZiBQcm94eT4idSI/eTpQcm94eSwiJVJhbmdlRXJyb3IlIjp2LCIlUmVmZXJlbmNlRXJyb3IlIjpDLCIlUmVmbGVjdCUiOnR5cGVvZiBSZWZsZWN0PiJ1Ij95OlJlZmxlY3QsIiVSZWdFeHAlIjpSZWdFeHAs''@;'; put 'put ''IiVTZXQlIjp0eXBlb2YgU2V0PiJ1Ij95OlNldCwiJVNldEl0ZXJhdG9yUHJvdG90eXBlJSI6dHlwZW9mIFNldD4idSJ8fCFDZXx8IUllP3k6SWUoKG5ldyBTZXQpW1N5bWJvbC5pdGVyYXRvcl0oKSksIiVTaGFyZWRBcnJheUJ1ZmZlciUiOnR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcj4idSI/''@;'; put 'put ''eTpTaGFyZWRBcnJheUJ1ZmZlciwiJVN0cmluZyUiOlN0cmluZywiJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJSI6Q2UmJkllP0llKCIiW1N5bWJvbC5pdGVyYXRvcl0oKSk6eSwiJVN5bWJvbCUiOkNlP1N5bWJvbDp5LCIlU3ludGF4RXJyb3IlIjp3LCIlVGhyb3dUeXBlRXJyb3IlIjptZSwi''@;'; put 'put ''JVR5cGVkQXJyYXklIjprLCIlVHlwZUVycm9yJSI6UywiJVVpbnQ4QXJyYXklIjp0eXBlb2YgVWludDhBcnJheT4idSI/eTpVaW50OEFycmF5LCIlVWludDhDbGFtcGVkQXJyYXklIjp0eXBlb2YgVWludDhDbGFtcGVkQXJyYXk+InUiP3k6VWludDhDbGFtcGVkQXJyYXksIiVVaW50MTZBcnJh''@;'; put 'put ''eSUiOnR5cGVvZiBVaW50MTZBcnJheT4idSI/eTpVaW50MTZBcnJheSwiJVVpbnQzMkFycmF5JSI6dHlwZW9mIFVpbnQzMkFycmF5PiJ1Ij95OlVpbnQzMkFycmF5LCIlVVJJRXJyb3IlIjpMLCIlV2Vha01hcCUiOnR5cGVvZiBXZWFrTWFwPiJ1Ij95OldlYWtNYXAsIiVXZWFrUmVmJSI6dHlw''@;'; put 'put ''ZW9mIFdlYWtSZWY+InUiP3k6V2Vha1JlZiwiJVdlYWtTZXQlIjp0eXBlb2YgV2Vha1NldD4idSI/eTpXZWFrU2V0LCIlRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwlIjpmLCIlRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5JSI6WCwiJU9iamVjdC5kZWZpbmVQcm9wZXJ0eSUiOnEsIiVPYmplY3Qu''@;'; put 'put ''Z2V0UHJvdG90eXBlT2YlIjprZSwiJU1hdGguYWJzJSI6UiwiJU1hdGguZmxvb3IlIjp4LCIlTWF0aC5tYXglIjpVLCIlTWF0aC5taW4lIjpILCIlTWF0aC5wb3clIjpWLCIlTWF0aC5yb3VuZCUiOk4sIiVNYXRoLnNpZ24lIjp6LCIlUmVmbGVjdC5nZXRQcm90b3R5cGVPZiUiOnFlfTtpZihJ''@;'; put 'put ''ZSl0cnl7bnVsbC5lcnJvcn1jYXRjaChhZSl7dmFyIEI9SWUoSWUoYWUpKTtNWyIlRXJyb3IucHJvdG90eXBlJSJdPUJ9dmFyIEs9ZnVuY3Rpb24gYWUoeGUpe3ZhciBqZTtpZigiJUFzeW5jRnVuY3Rpb24lIj09PXhlKWplPUYoImFzeW5jIGZ1bmN0aW9uICgpIHt9Iik7ZWxzZSBpZigiJUdl''@;'; put 'put ''bmVyYXRvckZ1bmN0aW9uJSI9PT14ZSlqZT1GKCJmdW5jdGlvbiogKCkge30iKTtlbHNlIGlmKCIlQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUiPT09eGUpamU9RigiYXN5bmMgZnVuY3Rpb24qICgpIHt9Iik7ZWxzZSBpZigiJUFzeW5jR2VuZXJhdG9yJSI9PT14ZSl7dmFyIEFlPWFlKCIlQXN5''@;'; put 'put ''bmNHZW5lcmF0b3JGdW5jdGlvbiUiKTtBZSYmKGplPUFlLnByb3RvdHlwZSl9ZWxzZSBpZigiJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlIj09PXhlKXt2YXIgRGU9YWUoIiVBc3luY0dlbmVyYXRvciUiKTtEZSYmSWUmJihqZT1JZShEZS5wcm90b3R5cGUpKX1yZXR1cm4gTVt4ZV09amUsamV9''@;'; put 'put ''LEc9e19fcHJvdG9fXzpudWxsLCIlQXJyYXlCdWZmZXJQcm90b3R5cGUlIjpbIkFycmF5QnVmZmVyIiwicHJvdG90eXBlIl0sIiVBcnJheVByb3RvdHlwZSUiOlsiQXJyYXkiLCJwcm90b3R5cGUiXSwiJUFycmF5UHJvdG9fZW50cmllcyUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJlbnRyaWVz''@;'; put 'put ''Il0sIiVBcnJheVByb3RvX2ZvckVhY2glIjpbIkFycmF5IiwicHJvdG90eXBlIiwiZm9yRWFjaCJdLCIlQXJyYXlQcm90b19rZXlzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImtleXMiXSwiJUFycmF5UHJvdG9fdmFsdWVzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsInZhbHVlcyJdLCIlQXN5''@;'; put 'put ''bmNGdW5jdGlvblByb3RvdHlwZSUiOlsiQXN5bmNGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlQXN5bmNHZW5lcmF0b3IlIjpbIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSI6WyJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIiwi''@;'; put 'put ''cHJvdG90eXBlIiwicHJvdG90eXBlIl0sIiVCb29sZWFuUHJvdG90eXBlJSI6WyJCb29sZWFuIiwicHJvdG90eXBlIl0sIiVEYXRhVmlld1Byb3RvdHlwZSUiOlsiRGF0YVZpZXciLCJwcm90b3R5cGUiXSwiJURhdGVQcm90b3R5cGUlIjpbIkRhdGUiLCJwcm90b3R5cGUiXSwiJUVycm9yUHJv''@;'; put 'put ''dG90eXBlJSI6WyJFcnJvciIsInByb3RvdHlwZSJdLCIlRXZhbEVycm9yUHJvdG90eXBlJSI6WyJFdmFsRXJyb3IiLCJwcm90b3R5cGUiXSwiJUZsb2F0MzJBcnJheVByb3RvdHlwZSUiOlsiRmxvYXQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVGbG9hdDY0QXJyYXlQcm90b3R5cGUlIjpbIkZs''@;'; put 'put ''b2F0NjRBcnJheSIsInByb3RvdHlwZSJdLCIlRnVuY3Rpb25Qcm90b3R5cGUlIjpbIkZ1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVHZW5lcmF0b3IlIjpbIkdlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVHZW5lcmF0b3JQcm90b3R5cGUlIjpbIkdlbmVyYXRvckZ1bmN0aW9uIiwi''@;'; put 'put ''cHJvdG90eXBlIiwicHJvdG90eXBlIl0sIiVJbnQ4QXJyYXlQcm90b3R5cGUlIjpbIkludDhBcnJheSIsInByb3RvdHlwZSJdLCIlSW50MTZBcnJheVByb3RvdHlwZSUiOlsiSW50MTZBcnJheSIsInByb3RvdHlwZSJdLCIlSW50MzJBcnJheVByb3RvdHlwZSUiOlsiSW50MzJBcnJheSIsInBy''@;'; put 'put ''b3RvdHlwZSJdLCIlSlNPTlBhcnNlJSI6WyJKU09OIiwicGFyc2UiXSwiJUpTT05TdHJpbmdpZnklIjpbIkpTT04iLCJzdHJpbmdpZnkiXSwiJU1hcFByb3RvdHlwZSUiOlsiTWFwIiwicHJvdG90eXBlIl0sIiVOdW1iZXJQcm90b3R5cGUlIjpbIk51bWJlciIsInByb3RvdHlwZSJdLCIlT2Jq''@;'; put 'put ''ZWN0UHJvdG90eXBlJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiXSwiJU9ialByb3RvX3RvU3RyaW5nJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyJdLCIlT2JqUHJvdG9fdmFsdWVPZiUiOlsiT2JqZWN0IiwicHJvdG90eXBlIiwidmFsdWVPZiJdLCIlUHJvbWlzZVByb3RvdHlw''@;'; put 'put ''ZSUiOlsiUHJvbWlzZSIsInByb3RvdHlwZSJdLCIlUHJvbWlzZVByb3RvX3RoZW4lIjpbIlByb21pc2UiLCJwcm90b3R5cGUiLCJ0aGVuIl0sIiVQcm9taXNlX2FsbCUiOlsiUHJvbWlzZSIsImFsbCJdLCIlUHJvbWlzZV9yZWplY3QlIjpbIlByb21pc2UiLCJyZWplY3QiXSwiJVByb21pc2Vf''@;'; put 'put ''cmVzb2x2ZSUiOlsiUHJvbWlzZSIsInJlc29sdmUiXSwiJVJhbmdlRXJyb3JQcm90b3R5cGUlIjpbIlJhbmdlRXJyb3IiLCJwcm90b3R5cGUiXSwiJVJlZmVyZW5jZUVycm9yUHJvdG90eXBlJSI6WyJSZWZlcmVuY2VFcnJvciIsInByb3RvdHlwZSJdLCIlUmVnRXhwUHJvdG90eXBlJSI6WyJS''@;'; put 'put ''ZWdFeHAiLCJwcm90b3R5cGUiXSwiJVNldFByb3RvdHlwZSUiOlsiU2V0IiwicHJvdG90eXBlIl0sIiVTaGFyZWRBcnJheUJ1ZmZlclByb3RvdHlwZSUiOlsiU2hhcmVkQXJyYXlCdWZmZXIiLCJwcm90b3R5cGUiXSwiJVN0cmluZ1Byb3RvdHlwZSUiOlsiU3RyaW5nIiwicHJvdG90eXBlIl0s''@;'; put 'put ''IiVTeW1ib2xQcm90b3R5cGUlIjpbIlN5bWJvbCIsInByb3RvdHlwZSJdLCIlU3ludGF4RXJyb3JQcm90b3R5cGUlIjpbIlN5bnRheEVycm9yIiwicHJvdG90eXBlIl0sIiVUeXBlZEFycmF5UHJvdG90eXBlJSI6WyJUeXBlZEFycmF5IiwicHJvdG90eXBlIl0sIiVUeXBlRXJyb3JQcm90b3R5''@;'; put 'put ''cGUlIjpbIlR5cGVFcnJvciIsInByb3RvdHlwZSJdLCIlVWludDhBcnJheVByb3RvdHlwZSUiOlsiVWludDhBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUlIjpbIlVpbnQ4Q2xhbXBlZEFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50MTZBcnJheVByb3Rv''@;'; put 'put ''dHlwZSUiOlsiVWludDE2QXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQzMkFycmF5UHJvdG90eXBlJSI6WyJVaW50MzJBcnJheSIsInByb3RvdHlwZSJdLCIlVVJJRXJyb3JQcm90b3R5cGUlIjpbIlVSSUVycm9yIiwicHJvdG90eXBlIl0sIiVXZWFrTWFwUHJvdG90eXBlJSI6WyJXZWFrTWFw''@;'; put 'put ''IiwicHJvdG90eXBlIl0sIiVXZWFrU2V0UHJvdG90eXBlJSI6WyJXZWFrU2V0IiwicHJvdG90eXBlIl19LEQ9aCg2Njc0MykscD1oKDk5NTcpLEk9RC5jYWxsKGYsQXJyYXkucHJvdG90eXBlLmNvbmNhdCksdWU9RC5jYWxsKFgsQXJyYXkucHJvdG90eXBlLnNwbGljZSksbmU9RC5jYWxsKGYs''@;'; put 'put ''U3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSxfZT1ELmNhbGwoZixTdHJpbmcucHJvdG90eXBlLnNsaWNlKSxQZT1ELmNhbGwoZixSZWdFeHAucHJvdG90eXBlLmV4ZWMpLG90PS9bXiUuW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwy''@;'; put 'put ''KVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwlJCkpL2csbHQ9L1xcKFxcKT8vZyxSZT1mdW5jdGlvbih4ZSxqZSl7dmFyIERlLEFlPXhlO2lmKHAoRyxBZSkmJihBZT0iJSIrKERlPUdbQWVdKVswXSsiJSIpLHAoTSxBZSkpe3ZhciBGZT1NW0FlXTtpZihGZT09PWImJihGZT1LKEFlKSks''@;'; put 'put ''dHlwZW9mIEZlPiJ1IiYmIWplKXRocm93IG5ldyBTKCJpbnRyaW5zaWMgIit4ZSsiIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlISIpO3JldHVybnthbGlhczpEZSxuYW1lOkFlLHZhbHVlOkZlfX10aHJvdyBuZXcgdygiaW50cmluc2ljICIreGUr''@;'; put 'put ''IiBkb2VzIG5vdCBleGlzdCEiKX07ZmUuZXhwb3J0cz1mdW5jdGlvbih4ZSxqZSl7aWYoInN0cmluZyIhPXR5cGVvZiB4ZXx8MD09PXhlLmxlbmd0aCl0aHJvdyBuZXcgUygiaW50cmluc2ljIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtpZihhcmd1bWVudHMubGVuZ3RoPjEm''@;'; put 'put ''JiJib29sZWFuIiE9dHlwZW9mIGplKXRocm93IG5ldyBTKCciYWxsb3dNaXNzaW5nIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO2lmKG51bGw9PT1QZSgvXiU/W14lXSolPyQvLHhlKSl0aHJvdyBuZXcgdygiYCVgIG1heSBub3QgYmUgcHJlc2VudCBhbnl3aGVyZSBidXQgYXQgdGhl''@;'; put 'put ''IGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBpbnRyaW5zaWMgbmFtZSIpO3ZhciBBZT1mdW5jdGlvbih4ZSl7dmFyIGplPV9lKHhlLDAsMSksQWU9X2UoeGUsLTEpO2lmKCIlIj09PWplJiYiJSIhPT1BZSl0aHJvdyBuZXcgdygiaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBj''@;'; put 'put ''bG9zaW5nIGAlYCIpO2lmKCIlIj09PUFlJiYiJSIhPT1qZSl0aHJvdyBuZXcgdygiaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBvcGVuaW5nIGAlYCIpO3ZhciBEZT1bXTtyZXR1cm4gbmUoeGUsb3QsZnVuY3Rpb24oRmUsZ2UsY2UsaGUpe0RlW0RlLmxlbmd0aF09Y2U/bmUo''@;'; put 'put ''aGUsbHQsIiQxIik6Z2V8fEZlfSksRGV9KHhlKSxEZT1BZS5sZW5ndGg+MD9BZVswXToiIixGZT1SZSgiJSIrRGUrIiUiLGplKSxnZT1GZS5uYW1lLGNlPUZlLnZhbHVlLGhlPSExLHdlPUZlLmFsaWFzO3dlJiYoRGU9d2VbMF0sdWUoQWUsSShbMCwxXSx3ZSkpKTtmb3IodmFyIEplPTEsdHQ9''@;'; put 'put ''ITA7SmU8QWUubGVuZ3RoO0plKz0xKXt2YXIgS2U9QWVbSmVdLCR0PV9lKEtlLDAsMSksUnQ9X2UoS2UsLTEpO2lmKCgnIic9PT0kdHx8IiciPT09JHR8fCJgIj09PSR0fHwnIic9PT1SdHx8IiciPT09UnR8fCJgIj09PVJ0KSYmJHQhPT1SdCl0aHJvdyBuZXcgdygicHJvcGVydHkgbmFtZXMg''@;'; put 'put ''d2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcyIpO2lmKCgiY29uc3RydWN0b3IiPT09S2V8fCF0dCkmJihoZT0hMCkscChNLGdlPSIlIisoRGUrPSIuIitLZSkrIiUiKSljZT1NW2dlXTtlbHNlIGlmKG51bGwhPWNlKXtpZighKEtlIGluIGNlKSl7aWYoIWplKXRocm93IG5l''@;'; put 'put ''dyBTKCJiYXNlIGludHJpbnNpYyBmb3IgIit4ZSsiIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLiIpO3JldHVybn1pZihXJiZKZSsxPj1BZS5sZW5ndGgpe3ZhciBMdD1XKGNlLEtlKTtjZT0odHQ9ISFMdCkmJiJnZXQiaW4gTHQmJiEoIm9yaWdpbmFsVmFsdWUi''@;'; put 'put ''aW4gTHQuZ2V0KT9MdC5nZXQ6Y2VbS2VdfWVsc2UgdHQ9cChjZSxLZSksY2U9Y2VbS2VdO3R0JiYhaGUmJihNW2dlXT1jZSl9fXJldHVybiBjZX19LDcxMDY0KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNzk2MTIpO2ZlLmV4cG9ydHM9eS5nZXRQcm90b3R5cGVPZnx8bnVsbH0sNDg2''@;'; put 'put ''NDgoZmUpeyJ1c2Ugc3RyaWN0IjtmZS5leHBvcnRzPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXRQcm90b3R5cGVPZnx8bnVsbH0sOTM2MjgoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg0ODY0OCksYz1oKDcxMDY0KSxzPWgoNzE3Nik7ZmUuZXhwb3J0cz15P2Z1bmN0aW9u''@;'; put 'put ''KHYpe3JldHVybiB5KHYpfTpjP2Z1bmN0aW9uKHYpe2lmKCF2fHwib2JqZWN0IiE9dHlwZW9mIHYmJiJmdW5jdGlvbiIhPXR5cGVvZiB2KXRocm93IG5ldyBUeXBlRXJyb3IoImdldFByb3RvOiBub3QgYW4gb2JqZWN0Iik7cmV0dXJuIGModil9OnM/ZnVuY3Rpb24odil7cmV0dXJuIHModil9''@;'; put 'put ''Om51bGx9LDY1NDkoZmUpeyJ1c2Ugc3RyaWN0IjtmZS5leHBvcnRzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3J9LDc1Nzk1KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNjU0OSk7aWYoeSl0cnl7eShbXSwibGVuZ3RoIil9Y2F0Y2h7eT1udWxsfWZlLmV4cG9ydHM9eX0s''@;'; put 'put ''MTI4MyhmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9ZnVuY3Rpb24gaCh5KXtpZihudWxsPT09eXx8Im9iamVjdCIhPXR5cGVvZiB5KXJldHVybiB5O2lmKHkgaW5zdGFuY2VvZiBPYmplY3QpdmFyIGM9e19fcHJvdG9fXzpqKHkpfTtlbHNlIGM9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1''@;'; put 'put ''cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoeSkuZm9yRWFjaChmdW5jdGlvbihzKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxzLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoeSxzKSl9KSxjfTt2YXIgaj1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKHkpe3Jl''@;'; put 'put ''dHVybiB5Ll9fcHJvdG9fX319LDYzNzM1KGZlLGosaCl7dmFyIHcsUyx5PWgoNjU2MDYpLGM9aCg0OTk5Mykscz1oKDY5MTA2KSxBPWgoMTE5OTUpLHY9aCgxMjgzKSxDPWgoNDA1MzcpO2Z1bmN0aW9uIFIoRixXKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoRix3LHtnZXQ6ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gV319KX0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj8odz1TeW1ib2wuZm9yKCJncmFjZWZ1bC1mcy5xdWV1ZSIpLFM9U3ltYm9sLmZvcigiZ3JhY2VmdWwtZnMucHJldmlvdXMiKSk6KHc9Il9fX2dyYWNlZnVsLWZzLnF1ZXVl''@;'; put 'put ''IixTPSJfX19ncmFjZWZ1bC1mcy5wcmV2aW91cyIpO3ZhciBOLHg9ZnVuY3Rpb24gTCgpe307ZnVuY3Rpb24gSChGKXtzKEYpLEYuZ3JhY2VmdWxpZnk9SCxGLmNyZWF0ZVJlYWRTdHJlYW09ZnVuY3Rpb24gbmUobHQsZHQpe3JldHVybiBuZXcgRi5SZWFkU3RyZWFtKGx0LGR0KX0sRi5jcmVh''@;'; put 'put ''dGVXcml0ZVN0cmVhbT1mdW5jdGlvbiBfZShsdCxkdCl7cmV0dXJuIG5ldyBGLldyaXRlU3RyZWFtKGx0LGR0KX07dmFyIFc9Ri5yZWFkRmlsZTtGLnJlYWRGaWxlPWZ1bmN0aW9uIHEobHQsZHQsUmUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBkdCYmKFJlPWR0LGR0PW51bGwpLGZ1bmN0''@;'; put 'put ''aW9uIGFlKHhlLGplLEFlLERlKXtyZXR1cm4gVyh4ZSxqZSxmdW5jdGlvbihGZSl7IUZlfHwiRU1GSUxFIiE9PUZlLmNvZGUmJiJFTkZJTEUiIT09RmUuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgQWUmJkFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpWKFthZSxbeGUsamUsQWVdLEZlLERlfHxE''@;'; put 'put ''YXRlLm5vdygpLERhdGUubm93KCldKX0pfShsdCxkdCxSZSl9O3ZhciByZT1GLndyaXRlRmlsZTtGLndyaXRlRmlsZT1mdW5jdGlvbiBtZShsdCxkdCxSZSxhZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFJlJiYoYWU9UmUsUmU9bnVsbCksZnVuY3Rpb24geGUoamUsQWUsRGUsRmUsZ2Up''@;'; put 'put ''e3JldHVybiByZShqZSxBZSxEZSxmdW5jdGlvbihjZSl7IWNlfHwiRU1GSUxFIiE9PWNlLmNvZGUmJiJFTkZJTEUiIT09Y2UuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgRmUmJkZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpWKFt4ZSxbamUsQWUsRGUsRmVdLGNlLGdlfHxEYXRlLm5vdygpLERh''@;'; put 'put ''dGUubm93KCldKX0pfShsdCxkdCxSZSxhZSl9O3ZhciBDZT1GLmFwcGVuZEZpbGU7Q2UmJihGLmFwcGVuZEZpbGU9ZnVuY3Rpb24gSWUobHQsZHQsUmUsYWUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBSZSYmKGFlPVJlLFJlPW51bGwpLGZ1bmN0aW9uIHhlKGplLEFlLERlLEZlLGdlKXty''@;'; put 'put ''ZXR1cm4gQ2UoamUsQWUsRGUsZnVuY3Rpb24oY2UpeyFjZXx8IkVNRklMRSIhPT1jZS5jb2RlJiYiRU5GSUxFIiE9PWNlLmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIEZlJiZGZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6VihbeGUsW2plLEFlLERlLEZlXSxjZSxnZXx8RGF0ZS5ub3coKSxEYXRl''@;'; put 'put ''Lm5vdygpXSl9KX0obHQsZHQsUmUsYWUpfSk7dmFyIGtlPUYuY29weUZpbGU7a2UmJihGLmNvcHlGaWxlPWZ1bmN0aW9uIHFlKGx0LGR0LFJlLGFlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUmUmJihhZT1SZSxSZT0wKSxmdW5jdGlvbiB4ZShqZSxBZSxEZSxGZSxnZSl7cmV0dXJuIGtl''@;'; put 'put ''KGplLEFlLERlLGZ1bmN0aW9uKGNlKXshY2V8fCJFTUZJTEUiIT09Y2UuY29kZSYmIkVORklMRSIhPT1jZS5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBGZSYmRmUuYXBwbHkodGhpcyxhcmd1bWVudHMpOlYoW3hlLFtqZSxBZSxEZSxGZV0sY2UsZ2V8fERhdGUubm93KCksRGF0ZS5ub3coKV0p''@;'; put 'put ''fSl9KGx0LGR0LFJlLGFlKX0pO3ZhciBYPUYucmVhZGRpcjtGLnJlYWRkaXI9ZnVuY3Rpb24gYihsdCxkdCxSZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGR0JiYoUmU9ZHQsZHQ9bnVsbCk7dmFyIGFlPWYudGVzdCh5LnZlcnNpb24pP2Z1bmN0aW9uKEFlLERlLEZlLGdlKXtyZXR1cm4gWChBZSx4''@;'; put 'put ''ZShBZSxEZSxGZSxnZSkpfTpmdW5jdGlvbihBZSxEZSxGZSxnZSl7cmV0dXJuIFgoQWUsRGUseGUoQWUsRGUsRmUsZ2UpKX07cmV0dXJuIGFlKGx0LGR0LFJlKTtmdW5jdGlvbiB4ZShqZSxBZSxEZSxGZSl7cmV0dXJuIGZ1bmN0aW9uKGdlLGNlKXshZ2V8fCJFTUZJTEUiIT09Z2UuY29kZSYm''@;'; put 'put ''IkVORklMRSIhPT1nZS5jb2RlPyhjZSYmY2Uuc29ydCYmY2Uuc29ydCgpLCJmdW5jdGlvbiI9PXR5cGVvZiBEZSYmRGUuY2FsbCh0aGlzLGdlLGNlKSk6VihbYWUsW2plLEFlLERlXSxnZSxGZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9fX07dmFyIGY9L152WzAtNV1cLi87aWYoInYwLjgi''@;'; put 'put ''PT09eS52ZXJzaW9uLnN1YnN0cigwLDQpKXt2YXIgaz1BKEYpO0Q9ay5SZWFkU3RyZWFtLEk9ay5Xcml0ZVN0cmVhbX12YXIgTT1GLlJlYWRTdHJlYW07TSYmKEQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpLEQucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24gcCgpe3ZhciBs''@;'; put 'put ''dD10aGlzO290KGx0LnBhdGgsbHQuZmxhZ3MsbHQubW9kZSxmdW5jdGlvbihkdCxSZSl7ZHQ/KGx0LmF1dG9DbG9zZSYmbHQuZGVzdHJveSgpLGx0LmVtaXQoImVycm9yIixkdCkpOihsdC5mZD1SZSxsdC5lbWl0KCJvcGVuIixSZSksbHQucmVhZCgpKX0pfSk7dmFyIEI9Ri5Xcml0ZVN0cmVh''@;'; put 'put ''bTtCJiYoSS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSksSS5wcm90b3R5cGUub3Blbj1mdW5jdGlvbiB1ZSgpe3ZhciBsdD10aGlzO290KGx0LnBhdGgsbHQuZmxhZ3MsbHQubW9kZSxmdW5jdGlvbihkdCxSZSl7ZHQ/KGx0LmRlc3Ryb3koKSxsdC5lbWl0KCJlcnJvciIs''@;'; put 'put ''ZHQpKToobHQuZmQ9UmUsbHQuZW1pdCgib3BlbiIsUmUpKX0pfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIlJlYWRTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRH0sc2V0OmZ1bmN0aW9uKGx0KXtEPWx0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShGLCJXcml0ZVN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVybiBJfSxzZXQ6ZnVuY3Rpb24obHQpe0k9bHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7dmFyIEs9RDtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiRmlsZVJlYWRTdHJlYW0iLHtnZXQ6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gS30sc2V0OmZ1bmN0aW9uKGx0KXtLPWx0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBHPUk7ZnVuY3Rpb24gRChsdCxkdCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBEPyhNLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzKTpELmFwcGx5''@;'; put 'put ''KE9iamVjdC5jcmVhdGUoRC5wcm90b3R5cGUpLGFyZ3VtZW50cyl9ZnVuY3Rpb24gSShsdCxkdCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBJPyhCLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzKTpJLmFwcGx5KE9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUpLGFyZ3VtZW50cyl9T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KEYsIkZpbGVXcml0ZVN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVybiBHfSxzZXQ6ZnVuY3Rpb24obHQpe0c9bHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7dmFyIFBlPUYub3BlbjtmdW5jdGlvbiBvdChsdCxkdCxSZSxhZSl7cmV0dXJuImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIFJlJiYoYWU9UmUsUmU9bnVsbCksZnVuY3Rpb24geGUoamUsQWUsRGUsRmUsZ2Upe3JldHVybiBQZShqZSxBZSxEZSxmdW5jdGlvbihjZSxoZSl7IWNlfHwiRU1GSUxFIiE9PWNlLmNvZGUmJiJFTkZJTEUiIT09Y2UuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgRmUm''@;'; put 'put ''JkZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpWKFt4ZSxbamUsQWUsRGUsRmVdLGNlLGdlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShsdCxkdCxSZSxhZSl9cmV0dXJuIEYub3Blbj1vdCxGfWZ1bmN0aW9uIFYoRil7eCgiRU5RVUVVRSIsRlswXS5uYW1lLEZbMV0pLGNbd10ucHVzaChG''@;'; put 'put ''KSxZKCl9ZnVuY3Rpb24geigpe2Zvcih2YXIgRj1EYXRlLm5vdygpLFc9MDtXPGNbd10ubGVuZ3RoOysrVyljW3ddW1ddLmxlbmd0aD4yJiYoY1t3XVtXXVszXT1GLGNbd11bV11bNF09Rik7WSgpfWZ1bmN0aW9uIFkoKXtpZihjbGVhclRpbWVvdXQoTiksTj12b2lkIDAsMCE9PWNbd10ubGVu''@;'; put 'put ''Z3RoKXt2YXIgRj1jW3ddLnNoaWZ0KCksVz1GWzBdLHE9RlsxXSxyZT1GWzJdLG1lPUZbM10sQ2U9Rls0XTtpZih2b2lkIDA9PT1tZSl4KCJSRVRSWSIsVy5uYW1lLHEpLFcuYXBwbHkobnVsbCxxKTtlbHNlIGlmKERhdGUubm93KCktbWU+PTZlNCl7eCgiVElNRU9VVCIsVy5uYW1lLHEpO3Zh''@;'; put 'put ''ciBJZT1xLnBvcCgpOyJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUuY2FsbChudWxsLHJlKX1lbHNle3ZhciBrZT1EYXRlLm5vdygpLUNlLHFlPU1hdGgubWF4KENlLW1lLDEpO2tlPj1NYXRoLm1pbigxLjIqcWUsMTAwKT8oeCgiUkVUUlkiLFcubmFtZSxxKSxXLmFwcGx5KG51bGwscS5jb25j''@;'; put 'put ''YXQoW21lXSkpKTpjW3ddLnB1c2goRil9dm9pZCAwPT09TiYmKE49c2V0VGltZW91dChZLDApKX19Qy5kZWJ1Z2xvZz94PUMuZGVidWdsb2coImdmczQiKTovXGJnZnM0XGIvaS50ZXN0KHkuZW52Lk5PREVfREVCVUd8fCIiKSYmKHg9ZnVuY3Rpb24oKXt2YXIgRj1DLmZvcm1hdC5hcHBseShD''@;'; put 'put ''LGFyZ3VtZW50cyk7Rj0iR0ZTNDogIitGLnNwbGl0KC9cbi8pLmpvaW4oIlxuR0ZTNDogIiksY29uc29sZS5lcnJvcihGKX0pLGNbd118fChSKGMsaC5nW3ddfHxbXSksYy5jbG9zZT1mdW5jdGlvbihGKXtmdW5jdGlvbiBXKHEscmUpe3JldHVybiBGLmNhbGwoYyxxLGZ1bmN0aW9uKG1lKXtt''@;'; put 'put ''ZXx8eigpLCJmdW5jdGlvbiI9PXR5cGVvZiByZSYmcmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXLFMse3ZhbHVlOkZ9KSxXfShjLmNsb3NlKSxjLmNsb3NlU3luYz1mdW5jdGlvbihGKXtmdW5jdGlvbiBXKHEpe0YuYXBwbHkoYyxhcmd1''@;'; put 'put ''bWVudHMpLHooKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KFcsUyx7dmFsdWU6Rn0pLFd9KGMuY2xvc2VTeW5jKSwvXGJnZnM0XGIvaS50ZXN0KHkuZW52Lk5PREVfREVCVUd8fCIiKSYmeS5vbigiZXhpdCIsZnVuY3Rpb24oKXt4KGNbd10pLGgoOTQxNDgpLmVxdWFsKGNbd10ubGVu''@;'; put 'put ''Z3RoLDApfSkpLGguZ1t3XXx8UihoLmcsY1t3XSksZmUuZXhwb3J0cz1IKHYoYykpLHkuZW52LlRFU1RfR1JBQ0VGVUxfRlNfR0xPQkFMX1BBVENIJiYhYy5fX3BhdGNoZWQmJihmZS5leHBvcnRzPUgoYyksYy5fX3BhdGNoZWQ9ITApfSwxMTk5NShmZSxqLGgpe3ZhciB5PWgoNjU2MDYpLGM9''@;'; put 'put ''aCg4ODMxMCkuU3RyZWFtO2ZlLmV4cG9ydHM9ZnVuY3Rpb24gcyhBKXtyZXR1cm57UmVhZFN0cmVhbTpmdW5jdGlvbiB2KHcsUyl7aWYoISh0aGlzIGluc3RhbmNlb2YgdikpcmV0dXJuIG5ldyB2KHcsUyk7Yy5jYWxsKHRoaXMpO3ZhciBMPXRoaXM7dGhpcy5wYXRoPXcsdGhpcy5mZD1udWxs''@;'; put 'put ''LHRoaXMucmVhZGFibGU9ITAsdGhpcy5wYXVzZWQ9ITEsdGhpcy5mbGFncz0iciIsdGhpcy5tb2RlPTQzOCx0aGlzLmJ1ZmZlclNpemU9NjU1MzYsUz1TfHx7fTtmb3IodmFyIFI9T2JqZWN0LmtleXMoUykseD0wLFU9Ui5sZW5ndGg7eDxVO3grKyl7dmFyIEg9Ult4XTt0aGlzW0hdPVNbSF19''@;'; put 'put ''aWYodGhpcy5lbmNvZGluZyYmdGhpcy5zZXRFbmNvZGluZyh0aGlzLmVuY29kaW5nKSx2b2lkIDAhPT10aGlzLnN0YXJ0KXtpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMuc3RhcnQpdGhyb3cgVHlwZUVycm9yKCJzdGFydCBtdXN0IGJlIGEgTnVtYmVyIik7aWYodm9pZCAwPT09dGhpcy5lbmQp''@;'; put 'put ''dGhpcy5lbmQ9MS8wO2Vsc2UgaWYoIm51bWJlciIhPXR5cGVvZiB0aGlzLmVuZCl0aHJvdyBUeXBlRXJyb3IoImVuZCBtdXN0IGJlIGEgTnVtYmVyIik7aWYodGhpcy5zdGFydD50aGlzLmVuZCl0aHJvdyBuZXcgRXJyb3IoInN0YXJ0IG11c3QgYmUgPD0gZW5kIik7dGhpcy5wb3M9dGhpcy5z''@;'; put 'put ''dGFydH1udWxsPT09dGhpcy5mZD9BLm9wZW4odGhpcy5wYXRoLHRoaXMuZmxhZ3MsdGhpcy5tb2RlLGZ1bmN0aW9uKFYsTil7aWYoVilyZXR1cm4gTC5lbWl0KCJlcnJvciIsViksdm9pZChMLnJlYWRhYmxlPSExKTtMLmZkPU4sTC5lbWl0KCJvcGVuIixOKSxMLl9yZWFkKCl9KTp5Lm5leHRU''@;'; put 'put ''aWNrKGZ1bmN0aW9uKCl7TC5fcmVhZCgpfSl9LFdyaXRlU3RyZWFtOmZ1bmN0aW9uIEModyxTKXtpZighKHRoaXMgaW5zdGFuY2VvZiBDKSlyZXR1cm4gbmV3IEModyxTKTtjLmNhbGwodGhpcyksdGhpcy5wYXRoPXcsdGhpcy5mZD1udWxsLHRoaXMud3JpdGFibGU9ITAsdGhpcy5mbGFncz0i''@;'; put 'put ''dyIsdGhpcy5lbmNvZGluZz0iYmluYXJ5Iix0aGlzLm1vZGU9NDM4LHRoaXMuYnl0ZXNXcml0dGVuPTAsUz1TfHx7fTtmb3IodmFyIEw9T2JqZWN0LmtleXMoUyksUj0wLHg9TC5sZW5ndGg7Ujx4O1IrKyl7dmFyIFU9TFtSXTt0aGlzW1VdPVNbVV19aWYodm9pZCAwIT09dGhpcy5zdGFydCl7''@;'; put 'put ''aWYoIm51bWJlciIhPXR5cGVvZiB0aGlzLnN0YXJ0KXRocm93IFR5cGVFcnJvcigic3RhcnQgbXVzdCBiZSBhIE51bWJlciIpO2lmKHRoaXMuc3RhcnQ8MCl0aHJvdyBuZXcgRXJyb3IoInN0YXJ0IG11c3QgYmUgPj0gemVybyIpO3RoaXMucG9zPXRoaXMuc3RhcnR9dGhpcy5idXN5PSExLHRo''@;'; put 'put ''aXMuX3F1ZXVlPVtdLG51bGw9PT10aGlzLmZkJiYodGhpcy5fb3Blbj1BLm9wZW4sdGhpcy5fcXVldWUucHVzaChbdGhpcy5fb3Blbix0aGlzLnBhdGgsdGhpcy5mbGFncyx0aGlzLm1vZGUsdm9pZCAwXSksdGhpcy5mbHVzaCgpKX19fX0sNjkxMDYoZmUsaixoKXt2YXIgeT1oKDY1NjA2KSxj''@;'; put 'put ''PWgoMTc0NDkpLHM9eS5jd2QsQT1udWxsLHY9eS5lbnYuR1JBQ0VGVUxfRlNfUExBVEZPUk18fHkucGxhdGZvcm07eS5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm4gQXx8KEE9cy5jYWxsKHkpKSxBfTt0cnl7eS5jd2QoKX1jYXRjaHt9aWYoImZ1bmN0aW9uIj09dHlwZW9mIHkuY2hkaXIpe3ZhciBD''@;'; put 'put ''PXkuY2hkaXI7eS5jaGRpcj1mdW5jdGlvbihTKXtBPW51bGwsQy5jYWxsKHksUyl9LE9iamVjdC5zZXRQcm90b3R5cGVPZiYmT2JqZWN0LnNldFByb3RvdHlwZU9mKHkuY2hkaXIsQyl9ZmUuZXhwb3J0cz1mdW5jdGlvbiB3KFMpe2Z1bmN0aW9uIHgoRil7cmV0dXJuIEYmJmZ1bmN0aW9uKFcs''@;'; put 'put ''cSxyZSl7cmV0dXJuIEYuY2FsbChTLFcscSxmdW5jdGlvbihtZSl7WShtZSkmJihtZT1udWxsKSxyZSYmcmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fWZ1bmN0aW9uIFUoRil7cmV0dXJuIEYmJmZ1bmN0aW9uKFcscSl7dHJ5e3JldHVybiBGLmNhbGwoUyxXLHEpfWNhdGNoKHJlKXtpZigh''@;'; put 'put ''WShyZSkpdGhyb3cgcmV9fX1mdW5jdGlvbiBIKEYpe3JldHVybiBGJiZmdW5jdGlvbihXLHEscmUsbWUpe3JldHVybiBGLmNhbGwoUyxXLHEscmUsZnVuY3Rpb24oQ2Upe1koQ2UpJiYoQ2U9bnVsbCksbWUmJm1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX1mdW5jdGlvbiBWKEYpe3JldHVy''@;'; put 'put ''biBGJiZmdW5jdGlvbihXLHEscmUpe3RyeXtyZXR1cm4gRi5jYWxsKFMsVyxxLHJlKX1jYXRjaChtZSl7aWYoIVkobWUpKXRocm93IG1lfX19ZnVuY3Rpb24gTihGKXtyZXR1cm4gRiYmZnVuY3Rpb24oVyxxLHJlKXtmdW5jdGlvbiBtZShDZSxJZSl7SWUmJihJZS51aWQ8MCYmKEllLnVpZCs9''@;'; put 'put ''NDI5NDk2NzI5NiksSWUuZ2lkPDAmJihJZS5naWQrPTQyOTQ5NjcyOTYpKSxyZSYmcmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBxJiYocmU9cSxxPW51bGwpLHE/Ri5jYWxsKFMsVyxxLG1lKTpGLmNhbGwoUyxXLG1lKX19ZnVuY3Rpb24geihGKXty''@;'; put 'put ''ZXR1cm4gRiYmZnVuY3Rpb24oVyxxKXt2YXIgcmU9cT9GLmNhbGwoUyxXLHEpOkYuY2FsbChTLFcpO3JldHVybiByZSYmKHJlLnVpZDwwJiYocmUudWlkKz00Mjk0OTY3Mjk2KSxyZS5naWQ8MCYmKHJlLmdpZCs9NDI5NDk2NzI5NikpLHJlfX1mdW5jdGlvbiBZKEYpe3JldHVybiFGfHwiRU5P''@;'; put 'put ''U1lTIj09PUYuY29kZXx8ISh5LmdldHVpZCYmMD09PXkuZ2V0dWlkKCl8fCJFSU5WQUwiIT09Ri5jb2RlJiYiRVBFUk0iIT09Ri5jb2RlKX1jLmhhc093blByb3BlcnR5KCJPX1NZTUxJTksiKSYmeS52ZXJzaW9uLm1hdGNoKC9edjBcLjZcLlswLTJdfF52MFwuNVwuLykmJmZ1bmN0aW9uIEwo''@;'; put 'put ''Ril7Ri5sY2htb2Q9ZnVuY3Rpb24oVyxxLHJlKXtGLm9wZW4oVyxjLk9fV1JPTkxZfGMuT19TWU1MSU5LLHEsZnVuY3Rpb24obWUsQ2Upe21lP3JlJiZyZShtZSk6Ri5mY2htb2QoQ2UscSxmdW5jdGlvbihJZSl7Ri5jbG9zZShDZSxmdW5jdGlvbihrZSl7cmUmJnJlKEllfHxrZSl9KX0pfSl9''@;'; put 'put ''LEYubGNobW9kU3luYz1mdW5jdGlvbihXLHEpe3ZhciBDZSxyZT1GLm9wZW5TeW5jKFcsYy5PX1dST05MWXxjLk9fU1lNTElOSyxxKSxtZT0hMDt0cnl7Q2U9Ri5mY2htb2RTeW5jKHJlLHEpLG1lPSExfWZpbmFsbHl7aWYobWUpdHJ5e0YuY2xvc2VTeW5jKHJlKX1jYXRjaHt9ZWxzZSBGLmNs''@;'; put 'put ''b3NlU3luYyhyZSl9cmV0dXJuIENlfX0oUyksUy5sdXRpbWVzfHxmdW5jdGlvbiBSKEYpe2MuaGFzT3duUHJvcGVydHkoIk9fU1lNTElOSyIpJiZGLmZ1dGltZXM/KEYubHV0aW1lcz1mdW5jdGlvbihXLHEscmUsbWUpe0Yub3BlbihXLGMuT19TWU1MSU5LLGZ1bmN0aW9uKENlLEllKXtDZT9t''@;'; put 'put ''ZSYmbWUoQ2UpOkYuZnV0aW1lcyhJZSxxLHJlLGZ1bmN0aW9uKGtlKXtGLmNsb3NlKEllLGZ1bmN0aW9uKHFlKXttZSYmbWUoa2V8fHFlKX0pfSl9KX0sRi5sdXRpbWVzU3luYz1mdW5jdGlvbihXLHEscmUpe3ZhciBDZSxtZT1GLm9wZW5TeW5jKFcsYy5PX1NZTUxJTkspLEllPSEwO3RyeXtD''@;'; put 'put ''ZT1GLmZ1dGltZXNTeW5jKG1lLHEscmUpLEllPSExfWZpbmFsbHl7aWYoSWUpdHJ5e0YuY2xvc2VTeW5jKG1lKX1jYXRjaHt9ZWxzZSBGLmNsb3NlU3luYyhtZSl9cmV0dXJuIENlfSk6Ri5mdXRpbWVzJiYoRi5sdXRpbWVzPWZ1bmN0aW9uKFcscSxyZSxtZSl7bWUmJnkubmV4dFRpY2sobWUp''@;'; put 'put ''fSxGLmx1dGltZXNTeW5jPWZ1bmN0aW9uKCl7fSl9KFMpLFMuY2hvd249SChTLmNob3duKSxTLmZjaG93bj1IKFMuZmNob3duKSxTLmxjaG93bj1IKFMubGNob3duKSxTLmNobW9kPXgoUy5jaG1vZCksUy5mY2htb2Q9eChTLmZjaG1vZCksUy5sY2htb2Q9eChTLmxjaG1vZCksUy5jaG93blN5''@;'; put 'put ''bmM9VihTLmNob3duU3luYyksUy5mY2hvd25TeW5jPVYoUy5mY2hvd25TeW5jKSxTLmxjaG93blN5bmM9VihTLmxjaG93blN5bmMpLFMuY2htb2RTeW5jPVUoUy5jaG1vZFN5bmMpLFMuZmNobW9kU3luYz1VKFMuZmNobW9kU3luYyksUy5sY2htb2RTeW5jPVUoUy5sY2htb2RTeW5jKSxTLnN0''@;'; put 'put ''YXQ9TihTLnN0YXQpLFMuZnN0YXQ9TihTLmZzdGF0KSxTLmxzdGF0PU4oUy5sc3RhdCksUy5zdGF0U3luYz16KFMuc3RhdFN5bmMpLFMuZnN0YXRTeW5jPXooUy5mc3RhdFN5bmMpLFMubHN0YXRTeW5jPXooUy5sc3RhdFN5bmMpLFMuY2htb2QmJiFTLmxjaG1vZCYmKFMubGNobW9kPWZ1bmN0''@;'; put 'put ''aW9uKEYsVyxxKXtxJiZ5Lm5leHRUaWNrKHEpfSxTLmxjaG1vZFN5bmM9ZnVuY3Rpb24oKXt9KSxTLmNob3duJiYhUy5sY2hvd24mJihTLmxjaG93bj1mdW5jdGlvbihGLFcscSxyZSl7cmUmJnkubmV4dFRpY2socmUpfSxTLmxjaG93blN5bmM9ZnVuY3Rpb24oKXt9KSwid2luMzIiPT09diYm''@;'; put 'put ''KFMucmVuYW1lPSJmdW5jdGlvbiIhPXR5cGVvZiBTLnJlbmFtZT9TLnJlbmFtZTpmdW5jdGlvbihGKXtmdW5jdGlvbiBXKHEscmUsbWUpe3ZhciBDZT1EYXRlLm5vdygpLEllPTA7RihxLHJlLGZ1bmN0aW9uIGtlKHFlKXtpZihxZSYmKCJFQUNDRVMiPT09cWUuY29kZXx8IkVQRVJNIj09PXFl''@;'; put 'put ''LmNvZGV8fCJFQlVTWSI9PT1xZS5jb2RlKSYmRGF0ZS5ub3coKS1DZTw2ZTQpcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtTLnN0YXQocmUsZnVuY3Rpb24oWCxmKXtYJiYiRU5PRU5UIj09PVguY29kZT9GKHEscmUsa2UpOm1lKHFlKX0pfSxJZSksdm9pZChJZTwxMDAmJihJZSs9MTAp''@;'; put 'put ''KTttZSYmbWUocWUpfSl9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiYmT2JqZWN0LnNldFByb3RvdHlwZU9mKFcsRiksV30oUy5yZW5hbWUpKSxTLnJlYWQ9ImZ1bmN0aW9uIiE9dHlwZW9mIFMucmVhZD9TLnJlYWQ6ZnVuY3Rpb24oRil7ZnVuY3Rpb24gVyhxLHJlLG1lLENlLEllLGtl''@;'; put 'put ''KXt2YXIgcWU7aWYoa2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBrZSl7dmFyIFg9MDtxZT1mdW5jdGlvbihmLGIsayl7aWYoZiYmIkVBR0FJTiI9PT1mLmNvZGUmJlg8MTApcmV0dXJuIFgrKyxGLmNhbGwoUyxxLHJlLG1lLENlLEllLHFlKTtrZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fXJldHVy''@;'; put 'put ''biBGLmNhbGwoUyxxLHJlLG1lLENlLEllLHFlKX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2YoVyxGKSxXfShTLnJlYWQpLFMucmVhZFN5bmM9ImZ1bmN0aW9uIiE9dHlwZW9mIFMucmVhZFN5bmM/Uy5yZWFkU3luYzpmdW5jdGlvbihGKXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24oVyxxLHJlLG1lLENlKXtmb3IodmFyIEllPTA7Oyl0cnl7cmV0dXJuIEYuY2FsbChTLFcscSxyZSxtZSxDZSl9Y2F0Y2goa2Upe2lmKCJFQUdBSU4iPT09a2UuY29kZSYmSWU8MTApe0llKys7Y29udGludWV9dGhyb3cga2V9fX0oUy5yZWFkU3luYyl9fSwzMDU5MihmZSxq''@;'; put 'put ''LGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDMwNjU1KSxjPWZ1bmN0aW9uKCl7cmV0dXJuISF5fTtjLmhhc0FycmF5TGVuZ3RoRGVmaW5lQnVnPWZ1bmN0aW9uKCl7aWYoIXkpcmV0dXJuIG51bGw7dHJ5e3JldHVybiAxIT09eShbXSwibGVuZ3RoIix7dmFsdWU6MX0pLmxlbmd0aH1jYXRjaHty''@;'; put 'put ''ZXR1cm4hMH19LGZlLmV4cG9ydHM9Y30sNjQwMzkoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbCxjPWgoNDEzMzMpO2ZlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5''@;'; put 'put ''bWJvbCYmInN5bWJvbCI9PXR5cGVvZiB5KCJmb28iKSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2woImJhciIpJiZjKCl9fSw0MTMzMyhmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgU3ltYm9sfHwiZnVuY3Rpb24iIT10eXBlb2Yg''@;'; put 'put ''T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scylyZXR1cm4hMTtpZigic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcilyZXR1cm4hMDt2YXIgaD17fSx5PVN5bWJvbCgidGVzdCIpLGM9T2JqZWN0KHkpO2lmKCJzdHJpbmciPT10eXBlb2YgeXx8IltvYmplY3QgU3ltYm9sXSIhPT1P''@;'; put 'put ''YmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeSl8fCJbb2JqZWN0IFN5bWJvbF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpKXJldHVybiExO2Zvcih2YXIgQSBpbiBoW3ldPTQyLGgpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5rZXlzJiYw''@;'; put 'put ''IT09T2JqZWN0LmtleXMoaCkubGVuZ3RofHwiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMmJjAhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoKS5sZW5ndGgpcmV0dXJuITE7dmFyIHY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhoKTtpZigx''@;'; put 'put ''IT09di5sZW5ndGh8fHZbMF0hPT15fHwhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGgseSkpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ipe3ZhciBDPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURl''@;'; put 'put ''c2NyaXB0b3IoaCx5KTtpZig0MiE9PUMudmFsdWV8fCEwIT09Qy5lbnVtZXJhYmxlKXJldHVybiExfXJldHVybiEwfX0sNDkwOTIoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg0MTMzMyk7ZmUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiB5KCkmJiEhU3ltYm9sLnRvU3RyaW5nVGFn''@;'; put 'put ''fX0sNDcyOShmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDkyODYxKS5CdWZmZXIsYz1oKDg4MzEwKS5UcmFuc2Zvcm07ZnVuY3Rpb24gQShTKXtjLmNhbGwodGhpcyksdGhpcy5fYmxvY2s9eS5hbGxvY1Vuc2FmZShTKSx0aGlzLl9ibG9ja1NpemU9Uyx0aGlzLl9ibG9ja09mZnNldD0w''@;'; put 'put ''LHRoaXMuX2xlbmd0aD1bMCwwLDAsMF0sdGhpcy5fZmluYWxpemVkPSExfWgoNTY2OTgpKEEsYyksQS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihTLEwsUil7dmFyIHg9bnVsbDt0cnl7dGhpcy51cGRhdGUoUyxMKX1jYXRjaChVKXt4PVV9Uih4KX0sQS5wcm90b3R5cGUuX2ZsdXNo''@;'; put 'put ''PWZ1bmN0aW9uKFMpe3ZhciBMPW51bGw7dHJ5e3RoaXMucHVzaCh0aGlzLmRpZ2VzdCgpKX1jYXRjaChSKXtMPVJ9UyhMKX07dmFyIHY9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLEM9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZBcnJheUJ1ZmZlci5pc1Zp''@;'; put 'put ''ZXcmJih5LnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHkuVFlQRURfQVJSQVlfU1VQUE9SVCk7QS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKFMsTCl7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7Uz1mdW5jdGlv''@;'; put 'put ''biB3KFMsTCl7aWYoUyBpbnN0YW5jZW9mIHkpcmV0dXJuIFM7aWYoInN0cmluZyI9PXR5cGVvZiBTKXJldHVybiB5LmZyb20oUyxMKTtpZihDJiZBcnJheUJ1ZmZlci5pc1ZpZXcoUykpe2lmKDA9PT1TLmJ5dGVMZW5ndGgpcmV0dXJuIHkuYWxsb2MoMCk7dmFyIFI9eS5mcm9tKFMuYnVmZmVy''@;'; put 'put ''LFMuYnl0ZU9mZnNldCxTLmJ5dGVMZW5ndGgpO2lmKFIuYnl0ZUxlbmd0aD09PVMuYnl0ZUxlbmd0aClyZXR1cm4gUn1pZih2JiZTIGluc3RhbmNlb2YgVWludDhBcnJheXx8eS5pc0J1ZmZlcihTKSYmUy5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIFMuY29uc3RydWN0b3IuaXNC''@;'; put 'put ''dWZmZXImJlMuY29uc3RydWN0b3IuaXNCdWZmZXIoUykpcmV0dXJuIHkuZnJvbShTKTt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImRhdGEiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgQnVmZmVyLCBUeXBlZEFycmF5LCBvciBEYXRhVmlldy4n''@;'; put 'put ''KX0oUyxMKTtmb3IodmFyIFI9dGhpcy5fYmxvY2sseD0wO3RoaXMuX2Jsb2NrT2Zmc2V0K1MubGVuZ3RoLXg+PXRoaXMuX2Jsb2NrU2l6ZTspe2Zvcih2YXIgVT10aGlzLl9ibG9ja09mZnNldDtVPHRoaXMuX2Jsb2NrU2l6ZTspUltVKytdPVNbeCsrXTt0aGlzLl91cGRhdGUoKSx0aGlzLl9i''@;'; put 'put ''bG9ja09mZnNldD0wfWZvcig7eDxTLmxlbmd0aDspUlt0aGlzLl9ibG9ja09mZnNldCsrXT1TW3grK107Zm9yKHZhciBIPTAsVj04KlMubGVuZ3RoO1Y+MDsrK0gpdGhpcy5fbGVuZ3RoW0hdKz1WLChWPXRoaXMuX2xlbmd0aFtIXS80Mjk0OTY3Mjk2fDApPjAmJih0aGlzLl9sZW5ndGhbSF0t''@;'; put 'put ''PTQyOTQ5NjcyOTYqVik7cmV0dXJuIHRoaXN9LEEucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgaXMgbm90IGltcGxlbWVudGVkIil9LEEucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihTKXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTt0aGlzLl9maW5hbGl6ZWQ9ITA7dmFyIEw9dGhpcy5fZGlnZXN0KCk7dm9pZCAwIT09UyYmKEw9TC50b1N0cmluZyhTKSksdGhpcy5fYmxvY2suZmlsbCgwKSx0aGlzLl9ibG9ja09mZnNldD0wO2Zvcih2YXIgUj0wO1I8NDsrK1IpdGhp''@;'; put 'put ''cy5fbGVuZ3RoW1JdPTA7cmV0dXJuIEx9LEEucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl9kaWdlc3QgaXMgbm90IGltcGxlbWVudGVkIil9LGZlLmV4cG9ydHM9QX0sNzc5NTIoZmUsaixoKXt2YXIgeT1qO3kudXRpbHM9aCg2NzQyNikseS5jb21tb249''@;'; put 'put ''aCg2NjE2NikseS5zaGE9aCg0NjIyOSkseS5yaXBlbWQ9aCg0Njc4NCkseS5obWFjPWgoMjg5NDgpLHkuc2hhMT15LnNoYS5zaGExLHkuc2hhMjU2PXkuc2hhLnNoYTI1Nix5LnNoYTIyND15LnNoYS5zaGEyMjQseS5zaGEzODQ9eS5zaGEuc2hhMzg0LHkuc2hhNTEyPXkuc2hhLnNoYTUxMix5''@;'; put 'put ''LnJpcGVtZDE2MD15LnJpcGVtZC5yaXBlbWQxNjB9LDY2MTY2KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNjc0MjYpLGM9aCg0MzM0OSk7ZnVuY3Rpb24gcygpe3RoaXMucGVuZGluZz1udWxsLHRoaXMucGVuZGluZ1RvdGFsPTAsdGhpcy5ibG9ja1NpemU9dGhpcy5jb25zdHJ1Y3Rv''@;'; put 'put ''ci5ibG9ja1NpemUsdGhpcy5vdXRTaXplPXRoaXMuY29uc3RydWN0b3Iub3V0U2l6ZSx0aGlzLmhtYWNTdHJlbmd0aD10aGlzLmNvbnN0cnVjdG9yLmhtYWNTdHJlbmd0aCx0aGlzLnBhZExlbmd0aD10aGlzLmNvbnN0cnVjdG9yLnBhZExlbmd0aC84LHRoaXMuZW5kaWFuPSJiaWciLHRoaXMu''@;'; put 'put ''X2RlbHRhOD10aGlzLmJsb2NrU2l6ZS84LHRoaXMuX2RlbHRhMzI9dGhpcy5ibG9ja1NpemUvMzJ9ai5CbG9ja0hhc2g9cyxzLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odixDKXtpZih2PXkudG9BcnJheSh2LEMpLHRoaXMucGVuZGluZz10aGlzLnBlbmRpbmc/dGhpcy5wZW5kaW5nLmNv''@;'; put 'put ''bmNhdCh2KTp2LHRoaXMucGVuZGluZ1RvdGFsKz12Lmxlbmd0aCx0aGlzLnBlbmRpbmcubGVuZ3RoPj10aGlzLl9kZWx0YTgpe3ZhciB3PSh2PXRoaXMucGVuZGluZykubGVuZ3RoJXRoaXMuX2RlbHRhODt0aGlzLnBlbmRpbmc9di5zbGljZSh2Lmxlbmd0aC13LHYubGVuZ3RoKSwwPT09dGhp''@;'; put 'put ''cy5wZW5kaW5nLmxlbmd0aCYmKHRoaXMucGVuZGluZz1udWxsKSx2PXkuam9pbjMyKHYsMCx2Lmxlbmd0aC13LHRoaXMuZW5kaWFuKTtmb3IodmFyIFM9MDtTPHYubGVuZ3RoO1MrPXRoaXMuX2RlbHRhMzIpdGhpcy5fdXBkYXRlKHYsUyxTK3RoaXMuX2RlbHRhMzIpfXJldHVybiB0aGlzfSxz''@;'; put 'put ''LnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKSxjKG51bGw9PT10aGlzLnBlbmRpbmcpLHRoaXMuX2RpZ2VzdCh2KX0scy5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbigpe3ZhciB2PXRoaXMucGVuZGluZ1RvdGFsLEM9dGhpcy5fZGVs''@;'; put 'put ''dGE4LHc9Qy0odit0aGlzLnBhZExlbmd0aCklQyxTPW5ldyBBcnJheSh3K3RoaXMucGFkTGVuZ3RoKTtTWzBdPTEyODtmb3IodmFyIEw9MTtMPHc7TCsrKVNbTF09MDtpZih2PDw9MywiYmlnIj09PXRoaXMuZW5kaWFuKXtmb3IodmFyIFI9ODtSPHRoaXMucGFkTGVuZ3RoO1IrKylTW0wrK109''@;'; put 'put ''MDtTW0wrK109MCxTW0wrK109MCxTW0wrK109MCxTW0wrK109MCxTW0wrK109dj4+PjI0JjI1NSxTW0wrK109dj4+PjE2JjI1NSxTW0wrK109dj4+PjgmMjU1LFNbTCsrXT0yNTUmdn1lbHNlIGZvcihTW0wrK109MjU1JnYsU1tMKytdPXY+Pj44JjI1NSxTW0wrK109dj4+PjE2JjI1NSxTW0wr''@;'; put 'put ''K109dj4+PjI0JjI1NSxTW0wrK109MCxTW0wrK109MCxTW0wrK109MCxTW0wrK109MCxSPTg7Ujx0aGlzLnBhZExlbmd0aDtSKyspU1tMKytdPTA7cmV0dXJuIFN9fSwyODk0OChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDY3NDI2KSxjPWgoNDMzNDkpO2Z1bmN0aW9uIHMoQSx2LEMp''@;'; put 'put ''e2lmKCEodGhpcyBpbnN0YW5jZW9mIHMpKXJldHVybiBuZXcgcyhBLHYsQyk7dGhpcy5IYXNoPUEsdGhpcy5ibG9ja1NpemU9QS5ibG9ja1NpemUvOCx0aGlzLm91dFNpemU9QS5vdXRTaXplLzgsdGhpcy5pbm5lcj1udWxsLHRoaXMub3V0ZXI9bnVsbCx0aGlzLl9pbml0KHkudG9BcnJheSh2''@;'; put 'put ''LEMpKX1mZS5leHBvcnRzPXMscy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odil7di5sZW5ndGg+dGhpcy5ibG9ja1NpemUmJih2PShuZXcgdGhpcy5IYXNoKS51cGRhdGUodikuZGlnZXN0KCkpLGModi5sZW5ndGg8PXRoaXMuYmxvY2tTaXplKTtmb3IodmFyIEM9di5sZW5ndGg7Qzx0aGlz''@;'; put 'put ''LmJsb2NrU2l6ZTtDKyspdi5wdXNoKDApO2ZvcihDPTA7Qzx2Lmxlbmd0aDtDKyspdltDXV49NTQ7Zm9yKHRoaXMuaW5uZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh2KSxDPTA7Qzx2Lmxlbmd0aDtDKyspdltDXV49MTA2O3RoaXMub3V0ZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh2KX0s''@;'; put 'put ''cy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHYsQyl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKHYsQyksdGhpc30scy5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKSx0aGlzLm91dGVyLmRpZ2VzdCh2''@;'; put 'put ''KX19LDQ2Nzg0KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNjc0MjYpLGM9aCg2NjE2Nikscz15LnJvdGwzMixBPXkuc3VtMzIsdj15LnN1bTMyXzMsQz15LnN1bTMyXzQsdz1jLkJsb2NrSGFzaDtmdW5jdGlvbiBTKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgUykpcmV0dXJuIG5ldyBT''@;'; put 'put ''O3cuY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlzLmVuZGlhbj0ibGl0dGxlIn1mdW5jdGlvbiBMKHosWSxGLFcpe3JldHVybiB6PD0xNT9ZXkZeVzp6PD0zMT9ZJkZ8flkmVzp6PD00Nz8oWXx+Rile''@;'; put 'put ''Vzp6PD02Mz9ZJld8RiZ+VzpZXihGfH5XKX1mdW5jdGlvbiBSKHope3JldHVybiB6PD0xNT8wOno8PTMxPzE1MTg1MDAyNDk6ejw9NDc/MTg1OTc3NTM5Mzp6PD02Mz8yNDAwOTU5NzA4OjI4NDA4NTM4Mzh9ZnVuY3Rpb24geCh6KXtyZXR1cm4gejw9MTU/MTM1MjgyOTkyNjp6PD0zMT8xNTQ4''@;'; put 'put ''NjAzNjg0Ono8PTQ3PzE4MzYwNzI2OTE6ejw9NjM/MjA1Mzk5NDIxNzowfXkuaW5oZXJpdHMoUyx3KSxqLnJpcGVtZDE2MD1TLFMuYmxvY2tTaXplPTUxMixTLm91dFNpemU9MTYwLFMuaG1hY1N0cmVuZ3RoPTE5MixTLnBhZExlbmd0aD02NCxTLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9u''@;'; put 'put ''KFksRil7Zm9yKHZhciBXPXRoaXMuaFswXSxxPXRoaXMuaFsxXSxyZT10aGlzLmhbMl0sbWU9dGhpcy5oWzNdLENlPXRoaXMuaFs0XSxJZT1XLGtlPXEscWU9cmUsWD1tZSxmPUNlLGI9MDtiPDgwO2IrKyl7dmFyIGs9QShzKEMoVyxMKGIscSxyZSxtZSksWVtVW2JdK0ZdLFIoYikpLFZbYl0p''@;'; put 'put ''LENlKTtXPUNlLENlPW1lLG1lPXMocmUsMTApLHJlPXEscT1rLGs9QShzKEMoSWUsTCg3OS1iLGtlLHFlLFgpLFlbSFtiXStGXSx4KGIpKSxOW2JdKSxmKSxJZT1mLGY9WCxYPXMocWUsMTApLHFlPWtlLGtlPWt9az12KHRoaXMuaFsxXSxyZSxYKSx0aGlzLmhbMV09dih0aGlzLmhbMl0sbWUs''@;'; put 'put ''ZiksdGhpcy5oWzJdPXYodGhpcy5oWzNdLENlLEllKSx0aGlzLmhbM109dih0aGlzLmhbNF0sVyxrZSksdGhpcy5oWzRdPXYodGhpcy5oWzBdLHEscWUpLHRoaXMuaFswXT1rfSxTLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKFkpe3JldHVybiJoZXgiPT09WT95LnRvSGV4MzIodGhpcy5o''@;'; put 'put ''LCJsaXR0bGUiKTp5LnNwbGl0MzIodGhpcy5oLCJsaXR0bGUiKX07dmFyIFU9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwx''@;'; put 'put ''MSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10sSD1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQs''@;'; put 'put ''Niw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxWPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcs''@;'; put 'put ''MTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxOPVs4LDksOSwxMSwxMywxNSwxNSw1LDcs''@;'; put 'put ''Nyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1''@;'; put 'put ''LDE1LDEzLDExLDExXX0sNDYyMjkoZmUsaixoKXsidXNlIHN0cmljdCI7ai5zaGExPWgoNDM5MTcpLGouc2hhMjI0PWgoNDc3MTQpLGouc2hhMjU2PWgoMjI4Nyksai5zaGEzODQ9aCgyMTkxMSksai5zaGE1MTI9aCg1Nzc2Nil9LDQzOTE3KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgo''@;'; put 'put ''Njc0MjYpLGM9aCg2NjE2Nikscz1oKDY2MjI1KSxBPXkucm90bDMyLHY9eS5zdW0zMixDPXkuc3VtMzJfNSx3PXMuZnRfMSxTPWMuQmxvY2tIYXNoLEw9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdO2Z1bmN0aW9uIFIoKXtpZighKHRoaXMgaW5zdGFuY2Vv''@;'; put 'put ''ZiBSKSlyZXR1cm4gbmV3IFI7Uy5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuVz1uZXcgQXJyYXkoODApfXkuaW5oZXJpdHMoUixTKSxmZS5leHBvcnRzPVIsUi5ibG9ja1NpemU9NTEyLFIub3V0''@;'; put 'put ''U2l6ZT0xNjAsUi5obWFjU3RyZW5ndGg9ODAsUi5wYWRMZW5ndGg9NjQsUi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihVLEgpe2Zvcih2YXIgVj10aGlzLlcsTj0wO048MTY7TisrKVZbTl09VVtIK05dO2Zvcig7TjxWLmxlbmd0aDtOKyspVltOXT1BKFZbTi0zXV5WW04tOF1eVltOLTE0''@;'; put 'put ''XV5WW04tMTZdLDEpO3ZhciB6PXRoaXMuaFswXSxZPXRoaXMuaFsxXSxGPXRoaXMuaFsyXSxXPXRoaXMuaFszXSxxPXRoaXMuaFs0XTtmb3IoTj0wO048Vi5sZW5ndGg7TisrKXt2YXIgcmU9fn4oTi8yMCksbWU9QyhBKHosNSksdyhyZSxZLEYsVykscSxWW05dLExbcmVdKTtxPVcsVz1GLEY9''@;'; put 'put ''QShZLDMwKSxZPXosej1tZX10aGlzLmhbMF09dih0aGlzLmhbMF0seiksdGhpcy5oWzFdPXYodGhpcy5oWzFdLFkpLHRoaXMuaFsyXT12KHRoaXMuaFsyXSxGKSx0aGlzLmhbM109dih0aGlzLmhbM10sVyksdGhpcy5oWzRdPXYodGhpcy5oWzRdLHEpfSxSLnByb3RvdHlwZS5fZGlnZXN0PWZ1''@;'; put 'put ''bmN0aW9uKFUpe3JldHVybiJoZXgiPT09VT95LnRvSGV4MzIodGhpcy5oLCJiaWciKTp5LnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDQ3NzE0KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNjc0MjYpLGM9aCgyMjg3KTtmdW5jdGlvbiBzKCl7aWYoISh0aGlzIGluc3RhbmNlb2Ygcykp''@;'; put 'put ''cmV0dXJuIG5ldyBzO2MuY2FsbCh0aGlzKSx0aGlzLmg9WzMyMzgzNzEwMzIsOTE0MTUwNjYzLDgxMjcwMjk5OSw0MTQ0OTEyNjk3LDQyOTA3NzU4NTcsMTc1MDYwMzAyNSwxNjk0MDc2ODM5LDMyMDQwNzU0MjhdfXkuaW5oZXJpdHMocyxjKSxmZS5leHBvcnRzPXMscy5ibG9ja1NpemU9NTEy''@;'; put 'put ''LHMub3V0U2l6ZT0yMjQscy5obWFjU3RyZW5ndGg9MTkyLHMucGFkTGVuZ3RoPTY0LHMucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odil7cmV0dXJuImhleCI9PT12P3kudG9IZXgzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIik6eS5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWci''@;'; put 'put ''KX19LDIyODcoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg2NzQyNiksYz1oKDY2MTY2KSxzPWgoNjYyMjUpLEE9aCg0MzM0OSksdj15LnN1bTMyLEM9eS5zdW0zMl80LHc9eS5zdW0zMl81LFM9cy5jaDMyLEw9cy5tYWozMixSPXMuczBfMjU2LHg9cy5zMV8yNTYsVT1zLmcwXzI1NixI''@;'; put 'put ''PXMuZzFfMjU2LFY9Yy5CbG9ja0hhc2gsTj1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4''@;'; put 'put ''OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwz''@;'; put 'put ''MzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3''@;'; put 'put ''NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIs''@;'; put 'put ''MjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XTtmdW5jdGlvbiB6KCl7aWYoISh0aGlzIGluc3RhbmNlb2YgeikpcmV0dXJuIG5ldyB6O1YuY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsMzE0NDEzNDI3NywxMDEzOTA0MjQyLDI3NzM0''@;'; put 'put ''ODA3NjIsMTM1OTg5MzExOSwyNjAwODIyOTI0LDUyODczNDYzNSwxNTQxNDU5MjI1XSx0aGlzLms9Tix0aGlzLlc9bmV3IEFycmF5KDY0KX15LmluaGVyaXRzKHosViksZmUuZXhwb3J0cz16LHouYmxvY2tTaXplPTUxMix6Lm91dFNpemU9MjU2LHouaG1hY1N0cmVuZ3RoPTE5Mix6LnBhZExl''@;'; put 'put ''bmd0aD02NCx6LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEYsVyl7Zm9yKHZhciBxPXRoaXMuVyxyZT0wO3JlPDE2O3JlKyspcVtyZV09RltXK3JlXTtmb3IoO3JlPHEubGVuZ3RoO3JlKyspcVtyZV09QyhIKHFbcmUtMl0pLHFbcmUtN10sVShxW3JlLTE1XSkscVtyZS0xNl0pO3ZhciBt''@;'; put 'put ''ZT10aGlzLmhbMF0sQ2U9dGhpcy5oWzFdLEllPXRoaXMuaFsyXSxrZT10aGlzLmhbM10scWU9dGhpcy5oWzRdLFg9dGhpcy5oWzVdLGY9dGhpcy5oWzZdLGI9dGhpcy5oWzddO2ZvcihBKHRoaXMuay5sZW5ndGg9PT1xLmxlbmd0aCkscmU9MDtyZTxxLmxlbmd0aDtyZSsrKXt2YXIgaz13KGIs''@;'; put 'put ''eChxZSksUyhxZSxYLGYpLHRoaXMua1tyZV0scVtyZV0pLE09dihSKG1lKSxMKG1lLENlLEllKSk7Yj1mLGY9WCxYPXFlLHFlPXYoa2Usayksa2U9SWUsSWU9Q2UsQ2U9bWUsbWU9dihrLE0pfXRoaXMuaFswXT12KHRoaXMuaFswXSxtZSksdGhpcy5oWzFdPXYodGhpcy5oWzFdLENlKSx0aGlz''@;'; put 'put ''LmhbMl09dih0aGlzLmhbMl0sSWUpLHRoaXMuaFszXT12KHRoaXMuaFszXSxrZSksdGhpcy5oWzRdPXYodGhpcy5oWzRdLHFlKSx0aGlzLmhbNV09dih0aGlzLmhbNV0sWCksdGhpcy5oWzZdPXYodGhpcy5oWzZdLGYpLHRoaXMuaFs3XT12KHRoaXMuaFs3XSxiKX0sei5wcm90b3R5cGUuX2Rp''@;'; put 'put ''Z2VzdD1mdW5jdGlvbihGKXtyZXR1cm4iaGV4Ij09PUY/eS50b0hleDMyKHRoaXMuaCwiYmlnIik6eS5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSwyMTkxMShmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDY3NDI2KSxjPWgoNTc3NjYpO2Z1bmN0aW9uIHMoKXtpZighKHRoaXMgaW5zdGFu''@;'; put 'put ''Y2VvZiBzKSlyZXR1cm4gbmV3IHM7Yy5jYWxsKHRoaXMpLHRoaXMuaD1bMzQxODA3MDM2NSwzMjM4MzcxMDMyLDE2NTQyNzAyNTAsOTE0MTUwNjYzLDI0Mzg1MjkzNzAsODEyNzAyOTk5LDM1NTQ2MjM2MCw0MTQ0OTEyNjk3LDE3MzE0MDU0MTUsNDI5MDc3NTg1NywyMzk0MTgwMjMxLDE3NTA2''@;'; put 'put ''MDMwMjUsMzY3NTAwODUyNSwxNjk0MDc2ODM5LDEyMDMwNjI4MTMsMzIwNDA3NTQyOF19eS5pbmhlcml0cyhzLGMpLGZlLmV4cG9ydHM9cyxzLmJsb2NrU2l6ZT0xMDI0LHMub3V0U2l6ZT0zODQscy5obWFjU3RyZW5ndGg9MTkyLHMucGFkTGVuZ3RoPTEyOCxzLnByb3RvdHlwZS5fZGlnZXN0''@;'; put 'put ''PWZ1bmN0aW9uKHYpe3JldHVybiJoZXgiPT09dj95LnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKTp5LnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKX19LDU3NzY2KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNjc0MjYpLGM9aCg2NjE2Nikscz1oKDQzMzQ5''@;'; put 'put ''KSxBPXkucm90cjY0X2hpLHY9eS5yb3RyNjRfbG8sQz15LnNocjY0X2hpLHc9eS5zaHI2NF9sbyxTPXkuc3VtNjQsTD15LnN1bTY0X2hpLFI9eS5zdW02NF9sbyx4PXkuc3VtNjRfNF9oaSxVPXkuc3VtNjRfNF9sbyxIPXkuc3VtNjRfNV9oaSxWPXkuc3VtNjRfNV9sbyxOPWMuQmxvY2tIYXNo''@;'; put 'put ''LHo9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIy''@;'; put 'put ''MSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMy''@;'; put 'put ''NDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIx''@;'; put 'put ''ODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5''@;'; put 'put ''OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwy''@;'; put 'put ''MTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQz''@;'; put 'put ''MjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4''@;'; put 'put ''LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwy''@;'; put 'put ''NzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkx''@;'; put 'put ''NDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAs''@;'; put 'put ''MzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXTtmdW5jdGlvbiBZKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgWSkpcmV0dXJuIG5ldyBZO04uY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsNDA4OTIz''@;'; put 'put ''NTcyMCwzMTQ0MTM0Mjc3LDIyMjc4NzM1OTUsMTAxMzkwNDI0Miw0MjcxMTc1NzIzLDI3NzM0ODA3NjIsMTU5NTc1MDEyOSwxMzU5ODkzMTE5LDI5MTc1NjUxMzcsMjYwMDgyMjkyNCw3MjU1MTExOTksNTI4NzM0NjM1LDQyMTUzODk1NDcsMTU0MTQ1OTIyNSwzMjcwMzMyMDldLHRoaXMuaz16''@;'; put 'put ''LHRoaXMuVz1uZXcgQXJyYXkoMTYwKX1mdW5jdGlvbiBGKGssTSxCLEssRyl7dmFyIEQ9ayZCXn5rJkc7cmV0dXJuIEQ8MCYmKEQrPTQyOTQ5NjcyOTYpLER9ZnVuY3Rpb24gVyhrLE0sQixLLEcsRCl7dmFyIHA9TSZLXn5NJkQ7cmV0dXJuIHA8MCYmKHArPTQyOTQ5NjcyOTYpLHB9ZnVuY3Rp''@;'; put 'put ''b24gcShrLE0sQixLLEcpe3ZhciBEPWsmQl5rJkdeQiZHO3JldHVybiBEPDAmJihEKz00Mjk0OTY3Mjk2KSxEfWZ1bmN0aW9uIHJlKGssTSxCLEssRyxEKXt2YXIgcD1NJkteTSZEXksmRDtyZXR1cm4gcDwwJiYocCs9NDI5NDk2NzI5NikscH1mdW5jdGlvbiBtZShrLE0pe3ZhciBEPUEoayxN''@;'; put 'put ''LDI4KV5BKE0saywyKV5BKE0sayw3KTtyZXR1cm4gRDwwJiYoRCs9NDI5NDk2NzI5NiksRH1mdW5jdGlvbiBDZShrLE0pe3ZhciBEPXYoayxNLDI4KV52KE0saywyKV52KE0sayw3KTtyZXR1cm4gRDwwJiYoRCs9NDI5NDk2NzI5NiksRH1mdW5jdGlvbiBJZShrLE0pe3ZhciBEPUEoayxNLDE0''@;'; put 'put ''KV5BKGssTSwxOCleQShNLGssOSk7cmV0dXJuIEQ8MCYmKEQrPTQyOTQ5NjcyOTYpLER9ZnVuY3Rpb24ga2UoayxNKXt2YXIgRD12KGssTSwxNCledihrLE0sMTgpXnYoTSxrLDkpO3JldHVybiBEPDAmJihEKz00Mjk0OTY3Mjk2KSxEfWZ1bmN0aW9uIHFlKGssTSl7dmFyIEQ9QShrLE0sMSle''@;'; put 'put ''QShrLE0sOCleQyhrLE0sNyk7cmV0dXJuIEQ8MCYmKEQrPTQyOTQ5NjcyOTYpLER9ZnVuY3Rpb24gWChrLE0pe3ZhciBEPXYoayxNLDEpXnYoayxNLDgpXncoayxNLDcpO3JldHVybiBEPDAmJihEKz00Mjk0OTY3Mjk2KSxEfWZ1bmN0aW9uIGYoayxNKXt2YXIgRD1BKGssTSwxOSleQShNLGss''@;'; put 'put ''MjkpXkMoayxNLDYpO3JldHVybiBEPDAmJihEKz00Mjk0OTY3Mjk2KSxEfWZ1bmN0aW9uIGIoayxNKXt2YXIgRD12KGssTSwxOSledihNLGssMjkpXncoayxNLDYpO3JldHVybiBEPDAmJihEKz00Mjk0OTY3Mjk2KSxEfXkuaW5oZXJpdHMoWSxOKSxmZS5leHBvcnRzPVksWS5ibG9ja1NpemU9''@;'; put 'put ''MTAyNCxZLm91dFNpemU9NTEyLFkuaG1hY1N0cmVuZ3RoPTE5MixZLnBhZExlbmd0aD0xMjgsWS5wcm90b3R5cGUuX3ByZXBhcmVCbG9jaz1mdW5jdGlvbihNLEIpe2Zvcih2YXIgSz10aGlzLlcsRz0wO0c8MzI7RysrKUtbR109TVtCK0ddO2Zvcig7RzxLLmxlbmd0aDtHKz0yKXt2YXIgRD1m''@;'; put 'put ''KEtbRy00XSxLW0ctM10pLHA9YihLW0ctNF0sS1tHLTNdKSxJPUtbRy0xNF0sdWU9S1tHLTEzXSxuZT1xZShLW0ctMzBdLEtbRy0yOV0pLF9lPVgoS1tHLTMwXSxLW0ctMjldKSxQZT1LW0ctMzJdLG90PUtbRy0zMV07S1tHXT14KEQscCxJLHVlLG5lLF9lLFBlLG90KSxLW0crMV09VShELHAs''@;'; put 'put ''SSx1ZSxuZSxfZSxQZSxvdCl9fSxZLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE0sQil7dGhpcy5fcHJlcGFyZUJsb2NrKE0sQik7dmFyIEs9dGhpcy5XLEc9dGhpcy5oWzBdLEQ9dGhpcy5oWzFdLHA9dGhpcy5oWzJdLEk9dGhpcy5oWzNdLHVlPXRoaXMuaFs0XSxuZT10aGlzLmhbNV0s''@;'; put 'put ''X2U9dGhpcy5oWzZdLFBlPXRoaXMuaFs3XSxvdD10aGlzLmhbOF0sbHQ9dGhpcy5oWzldLGR0PXRoaXMuaFsxMF0sUmU9dGhpcy5oWzExXSxhZT10aGlzLmhbMTJdLHhlPXRoaXMuaFsxM10samU9dGhpcy5oWzE0XSxBZT10aGlzLmhbMTVdO3ModGhpcy5rLmxlbmd0aD09PUsubGVuZ3RoKTtm''@;'; put 'put ''b3IodmFyIERlPTA7RGU8Sy5sZW5ndGg7RGUrPTIpe3ZhciBGZT1qZSxnZT1BZSxjZT1JZShvdCxsdCksaGU9a2Uob3QsbHQpLHdlPUYob3QsMCxkdCwwLGFlKSxKZT1XKDAsbHQsMCxSZSwwLHhlKSx0dD10aGlzLmtbRGVdLEtlPXRoaXMua1tEZSsxXSwkdD1LW0RlXSxSdD1LW0RlKzFdLEx0''@;'; put 'put ''PUgoRmUsZ2UsY2UsaGUsd2UsSmUsdHQsS2UsJHQsUnQpLEd0PVYoRmUsZ2UsY2UsaGUsd2UsSmUsdHQsS2UsJHQsUnQpO0ZlPW1lKEcsRCksZ2U9Q2UoRyxEKSxjZT1xKEcsMCxwLDAsdWUpLGhlPXJlKDAsRCwwLEksMCxuZSk7dmFyIGd0PUwoRmUsZ2UsY2UsaGUpLFh0PVIoRmUsZ2UsY2Us''@;'; put 'put ''aGUpO2plPWFlLEFlPXhlLGFlPWR0LHhlPVJlLGR0PW90LFJlPWx0LG90PUwoX2UsUGUsTHQsR3QpLGx0PVIoUGUsUGUsTHQsR3QpLF9lPXVlLFBlPW5lLHVlPXAsbmU9SSxwPUcsST1ELEc9TChMdCxHdCxndCxYdCksRD1SKEx0LEd0LGd0LFh0KX1TKHRoaXMuaCwwLEcsRCksUyh0aGlzLmgs''@;'; put 'put ''MixwLEkpLFModGhpcy5oLDQsdWUsbmUpLFModGhpcy5oLDYsX2UsUGUpLFModGhpcy5oLDgsb3QsbHQpLFModGhpcy5oLDEwLGR0LFJlKSxTKHRoaXMuaCwxMixhZSx4ZSksUyh0aGlzLmgsMTQsamUsQWUpfSxZLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKE0pe3JldHVybiJoZXgiPT09''@;'; put 'put ''TT95LnRvSGV4MzIodGhpcy5oLCJiaWciKTp5LnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDY2MjI1KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciBjPWgoNjc0MjYpLnJvdHIzMjtmdW5jdGlvbiBBKHgsVSxIKXtyZXR1cm4geCZVXn54Jkh9ZnVuY3Rpb24gdih4LFUsSCl7cmV0dXJuIHgmVV54''@;'; put 'put ''JkheVSZIfWZ1bmN0aW9uIEMoeCxVLEgpe3JldHVybiB4XlVeSH1qLmZ0XzE9ZnVuY3Rpb24gcyh4LFUsSCxWKXtyZXR1cm4gMD09PXg/QShVLEgsVik6MT09PXh8fDM9PT14P0MoVSxILFYpOjI9PT14P3YoVSxILFYpOnZvaWQgMH0sai5jaDMyPUEsai5tYWozMj12LGoucDMyPUMsai5zMF8y''@;'; put 'put ''NTY9ZnVuY3Rpb24gdyh4KXtyZXR1cm4gYyh4LDIpXmMoeCwxMyleYyh4LDIyKX0sai5zMV8yNTY9ZnVuY3Rpb24gUyh4KXtyZXR1cm4gYyh4LDYpXmMoeCwxMSleYyh4LDI1KX0sai5nMF8yNTY9ZnVuY3Rpb24gTCh4KXtyZXR1cm4gYyh4LDcpXmMoeCwxOCleeD4+PjN9LGouZzFfMjU2PWZ1''@;'; put 'put ''bmN0aW9uIFIoeCl7cmV0dXJuIGMoeCwxNyleYyh4LDE5KV54Pj4+MTB9fSw2NzQyNihmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDQzMzQ5KSxjPWgoNTY2OTgpO2Z1bmN0aW9uIHMoYixrKXtyZXR1cm4hKDU1Mjk2IT0oNjQ1MTImYi5jaGFyQ29kZUF0KGspKXx8azwwfHxrKzE+PWIu''@;'; put 'put ''bGVuZ3RoKSYmNTYzMjA9PSg2NDUxMiZiLmNoYXJDb2RlQXQoaysxKSl9ZnVuY3Rpb24gQyhiKXtyZXR1cm4oYj4+PjI0fGI+Pj44JjY1MjgwfGI8PDgmMTY3MTE2ODB8KDI1NSZiKTw8MjQpPj4+MH1mdW5jdGlvbiBTKGIpe3JldHVybiAxPT09Yi5sZW5ndGg/IjAiK2I6Yn1mdW5jdGlvbiBM''@;'; put 'put ''KGIpe3JldHVybiA3PT09Yi5sZW5ndGg/IjAiK2I6Nj09PWIubGVuZ3RoPyIwMCIrYjo1PT09Yi5sZW5ndGg/IjAwMCIrYjo0PT09Yi5sZW5ndGg/IjAwMDAiK2I6Mz09PWIubGVuZ3RoPyIwMDAwMCIrYjoyPT09Yi5sZW5ndGg/IjAwMDAwMCIrYjoxPT09Yi5sZW5ndGg/IjAwMDAwMDAiK2I6''@;'; put 'put ''Yn1qLmluaGVyaXRzPWMsai50b0FycmF5PWZ1bmN0aW9uIEEoYixrKXtpZihBcnJheS5pc0FycmF5KGIpKXJldHVybiBiLnNsaWNlKCk7aWYoIWIpcmV0dXJuW107dmFyIE09W107aWYoInN0cmluZyI9PXR5cGVvZiBiKWlmKGspe2lmKCJoZXgiPT09aylmb3IoKGI9Yi5yZXBsYWNlKC9bXmEt''@;'; put 'put ''ejAtOV0rL2dpLCIiKSkubGVuZ3RoJTIhPTAmJihiPSIwIitiKSxLPTA7SzxiLmxlbmd0aDtLKz0yKU0ucHVzaChwYXJzZUludChiW0tdK2JbSysxXSwxNikpfWVsc2UgZm9yKHZhciBCPTAsSz0wO0s8Yi5sZW5ndGg7SysrKXt2YXIgRz1iLmNoYXJDb2RlQXQoSyk7RzwxMjg/TVtCKytdPUc6''@;'; put 'put ''RzwyMDQ4PyhNW0IrK109Rz4+NnwxOTIsTVtCKytdPTYzJkd8MTI4KTpzKGIsSyk/KEc9NjU1MzYrKCgxMDIzJkcpPDwxMCkrKDEwMjMmYi5jaGFyQ29kZUF0KCsrSykpLE1bQisrXT1HPj4xOHwyNDAsTVtCKytdPUc+PjEyJjYzfDEyOCxNW0IrK109Rz4+NiY2M3wxMjgsTVtCKytdPTYzJkd8''@;'; put 'put ''MTI4KTooTVtCKytdPUc+PjEyfDIyNCxNW0IrK109Rz4+NiY2M3wxMjgsTVtCKytdPTYzJkd8MTI4KX1lbHNlIGZvcihLPTA7SzxiLmxlbmd0aDtLKyspTVtLXT0wfGJbS107cmV0dXJuIE19LGoudG9IZXg9ZnVuY3Rpb24gdihiKXtmb3IodmFyIGs9IiIsTT0wO008Yi5sZW5ndGg7TSsrKWsr''@;'; put 'put ''PVMoYltNXS50b1N0cmluZygxNikpO3JldHVybiBrfSxqLmh0b25sPUMsai50b0hleDMyPWZ1bmN0aW9uIHcoYixrKXtmb3IodmFyIE09IiIsQj0wO0I8Yi5sZW5ndGg7QisrKXt2YXIgSz1iW0JdOyJsaXR0bGUiPT09ayYmKEs9QyhLKSksTSs9TChLLnRvU3RyaW5nKDE2KSl9cmV0dXJuIE19''@;'; put 'put ''LGouemVybzI9UyxqLnplcm84PUwsai5qb2luMzI9ZnVuY3Rpb24gUihiLGssTSxCKXt2YXIgSz1NLWs7eShLJTQ9PTApO2Zvcih2YXIgRz1uZXcgQXJyYXkoSy80KSxEPTAscD1rO0Q8Ry5sZW5ndGg7RCsrLHArPTQpR1tEXT0oImJpZyI9PT1CP2JbcF08PDI0fGJbcCsxXTw8MTZ8YltwKzJd''@;'; put 'put ''PDw4fGJbcCszXTpiW3ArM108PDI0fGJbcCsyXTw8MTZ8YltwKzFdPDw4fGJbcF0pPj4+MDtyZXR1cm4gR30sai5zcGxpdDMyPWZ1bmN0aW9uIHgoYixrKXtmb3IodmFyIE09bmV3IEFycmF5KDQqYi5sZW5ndGgpLEI9MCxLPTA7QjxiLmxlbmd0aDtCKyssSys9NCl7dmFyIEc9YltCXTsiYmln''@;'; put 'put ''Ij09PWs/KE1bS109Rz4+PjI0LE1bSysxXT1HPj4+MTYmMjU1LE1bSysyXT1HPj4+OCYyNTUsTVtLKzNdPTI1NSZHKTooTVtLKzNdPUc+Pj4yNCxNW0srMl09Rz4+PjE2JjI1NSxNW0srMV09Rz4+PjgmMjU1LE1bS109MjU1JkcpfXJldHVybiBNfSxqLnJvdHIzMj1mdW5jdGlvbiBVKGIsayl7''@;'; put 'put ''cmV0dXJuIGI+Pj5rfGI8PDMyLWt9LGoucm90bDMyPWZ1bmN0aW9uIEgoYixrKXtyZXR1cm4gYjw8a3xiPj4+MzIta30sai5zdW0zMj1mdW5jdGlvbiBWKGIsayl7cmV0dXJuIGIraz4+PjB9LGouc3VtMzJfMz1mdW5jdGlvbiBOKGIsayxNKXtyZXR1cm4gYitrK00+Pj4wfSxqLnN1bTMyXzQ9''@;'; put 'put ''ZnVuY3Rpb24geihiLGssTSxCKXtyZXR1cm4gYitrK00rQj4+PjB9LGouc3VtMzJfNT1mdW5jdGlvbiBZKGIsayxNLEIsSyl7cmV0dXJuIGIraytNK0IrSz4+PjB9LGouc3VtNjQ9ZnVuY3Rpb24gRihiLGssTSxCKXt2YXIgRD1CK2JbaysxXT4+PjA7YltrXT0oRDxCPzE6MCkrTStiW2tdPj4+''@;'; put 'put ''MCxiW2srMV09RH0sai5zdW02NF9oaT1mdW5jdGlvbiBXKGIsayxNLEIpe3JldHVybihrK0I+Pj4wPGs/MTowKStiK00+Pj4wfSxqLnN1bTY0X2xvPWZ1bmN0aW9uIHEoYixrLE0sQil7cmV0dXJuIGsrQj4+PjB9LGouc3VtNjRfNF9oaT1mdW5jdGlvbiByZShiLGssTSxCLEssRyxELHApe3Zh''@;'; put 'put ''ciBJPTAsdWU9aztyZXR1cm4gSSs9KHVlPXVlK0I+Pj4wKTxrPzE6MCxJKz0odWU9dWUrRz4+PjApPEc/MTowLGIrTStLK0QrKEkrPSh1ZT11ZStwPj4+MCk8cD8xOjApPj4+MH0sai5zdW02NF80X2xvPWZ1bmN0aW9uIG1lKGIsayxNLEIsSyxHLEQscCl7cmV0dXJuIGsrQitHK3A+Pj4wfSxq''@;'; put 'put ''LnN1bTY0XzVfaGk9ZnVuY3Rpb24gQ2UoYixrLE0sQixLLEcsRCxwLEksdWUpe3ZhciBuZT0wLF9lPWs7cmV0dXJuIG5lKz0oX2U9X2UrQj4+PjApPGs/MTowLG5lKz0oX2U9X2UrRz4+PjApPEc/MTowLG5lKz0oX2U9X2UrcD4+PjApPHA/MTowLGIrTStLK0QrSSsobmUrPShfZT1fZSt1ZT4+''@;'; put 'put ''PjApPHVlPzE6MCk+Pj4wfSxqLnN1bTY0XzVfbG89ZnVuY3Rpb24gSWUoYixrLE0sQixLLEcsRCxwLEksdWUpe3JldHVybiBrK0IrRytwK3VlPj4+MH0sai5yb3RyNjRfaGk9ZnVuY3Rpb24ga2UoYixrLE0pe3JldHVybihrPDwzMi1NfGI+Pj5NKT4+PjB9LGoucm90cjY0X2xvPWZ1bmN0aW9u''@;'; put 'put ''IHFlKGIsayxNKXtyZXR1cm4oYjw8MzItTXxrPj4+TSk+Pj4wfSxqLnNocjY0X2hpPWZ1bmN0aW9uIFgoYixrLE0pe3JldHVybiBiPj4+TX0sai5zaHI2NF9sbz1mdW5jdGlvbiBmKGIsayxNKXtyZXR1cm4oYjw8MzItTXxrPj4+TSk+Pj4wfX0sOTk1NyhmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgeT1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxjPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscz1oKDY2NzQzKTtmZS5leHBvcnRzPXMuY2FsbCh5LGMpfSwzMjcyMyhmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDc3OTUyKSxjPWgoNjQzNjcpLHM9aCg0MzM0OSk7ZnVu''@;'; put 'put ''Y3Rpb24gQSh2KXtpZighKHRoaXMgaW5zdGFuY2VvZiBBKSlyZXR1cm4gbmV3IEEodik7dGhpcy5oYXNoPXYuaGFzaCx0aGlzLnByZWRSZXNpc3Q9ISF2LnByZWRSZXNpc3QsdGhpcy5vdXRMZW49dGhpcy5oYXNoLm91dFNpemUsdGhpcy5taW5FbnRyb3B5PXYubWluRW50cm9weXx8dGhpcy5o''@;'; put 'put ''YXNoLmhtYWNTdHJlbmd0aCx0aGlzLl9yZXNlZWQ9bnVsbCx0aGlzLnJlc2VlZEludGVydmFsPW51bGwsdGhpcy5LPW51bGwsdGhpcy5WPW51bGw7dmFyIEM9Yy50b0FycmF5KHYuZW50cm9weSx2LmVudHJvcHlFbmN8fCJoZXgiKSx3PWMudG9BcnJheSh2Lm5vbmNlLHYubm9uY2VFbmN8fCJo''@;'; put 'put ''ZXgiKSxTPWMudG9BcnJheSh2LnBlcnMsdi5wZXJzRW5jfHwiaGV4Iik7cyhDLmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5faW5pdChDLHcsUyl9ZmUuZXhwb3J0cz1BLEEu''@;'; put 'put ''cHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKEMsdyxTKXt2YXIgTD1DLmNvbmNhdCh3KS5jb25jYXQoUyk7dGhpcy5LPW5ldyBBcnJheSh0aGlzLm91dExlbi84KSx0aGlzLlY9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpO2Zvcih2YXIgUj0wO1I8dGhpcy5WLmxlbmd0aDtSKyspdGhpcy5LW1Jd''@;'; put 'put ''PTAsdGhpcy5WW1JdPTE7dGhpcy5fdXBkYXRlKEwpLHRoaXMuX3Jlc2VlZD0xLHRoaXMucmVzZWVkSW50ZXJ2YWw9MjgxNDc0OTc2NzEwNjU2fSxBLnByb3RvdHlwZS5faG1hYz1mdW5jdGlvbigpe3JldHVybiBuZXcgeS5obWFjKHRoaXMuaGFzaCx0aGlzLkspfSxBLnByb3RvdHlwZS5fdXBk''@;'; put 'put ''YXRlPWZ1bmN0aW9uKEMpe3ZhciB3PXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzBdKTtDJiYodz13LnVwZGF0ZShDKSksdGhpcy5LPXcuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxDJiYodGhpcy5LPXRoaXMuX2htYWMo''@;'; put 'put ''KS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzFdKS51cGRhdGUoQykuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSl9LEEucHJvdG90eXBlLnJlc2VlZD1mdW5jdGlvbihDLHcsUyxMKXsic3RyaW5nIiE9dHlwZW9mIHcmJihMPVMsUz13LHc9bnVs''@;'; put 'put ''bCksQz1jLnRvQXJyYXkoQyx3KSxTPWMudG9BcnJheShTLEwpLHMoQy5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX3VwZGF0ZShDLmNvbmNhdChTfHxbXSkpLHRoaXMuX3Jl''@;'; put 'put ''c2VlZD0xfSxBLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbihDLHcsUyxMKXtpZih0aGlzLl9yZXNlZWQ+dGhpcy5yZXNlZWRJbnRlcnZhbCl0aHJvdyBuZXcgRXJyb3IoIlJlc2VlZCBpcyByZXF1aXJlZCIpOyJzdHJpbmciIT10eXBlb2YgdyYmKEw9UyxTPXcsdz1udWxsKSxTJiYoUz1j''@;'; put 'put ''LnRvQXJyYXkoUyxMfHwiaGV4IiksdGhpcy5fdXBkYXRlKFMpKTtmb3IodmFyIFI9W107Ui5sZW5ndGg8QzspdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxSPVIuY29uY2F0KHRoaXMuVik7dmFyIHg9Ui5zbGljZSgwLEMpO3JldHVybiB0aGlzLl91cGRhdGUo''@;'; put 'put ''UyksdGhpcy5fcmVzZWVkKyssYy5lbmNvZGUoeCx3KX19LDI1MShmZSxqKXtqLnJlYWQ9ZnVuY3Rpb24oaCx5LGMscyxBKXt2YXIgdixDLHc9OCpBLXMtMSxTPSgxPDx3KS0xLEw9Uz4+MSxSPS03LHg9Yz9BLTE6MCxVPWM/LTE6MSxIPWhbeSt4XTtmb3IoeCs9VSx2PUgmKDE8PC1SKS0xLEg+''@;'; put 'put ''Pj0tUixSKz13O1I+MDt2PTI1Nip2K2hbeSt4XSx4Kz1VLFItPTgpO2ZvcihDPXYmKDE8PC1SKS0xLHY+Pj0tUixSKz1zO1I+MDtDPTI1NipDK2hbeSt4XSx4Kz1VLFItPTgpO2lmKDA9PT12KXY9MS1MO2Vsc2V7aWYodj09PVMpcmV0dXJuIEM/TmFOOjEvMCooSD8tMToxKTtDKz1NYXRoLnBv''@;'; put 'put ''dygyLHMpLHYtPUx9cmV0dXJuKEg/LTE6MSkqQypNYXRoLnBvdygyLHYtcyl9LGoud3JpdGU9ZnVuY3Rpb24oaCx5LGMscyxBLHYpe3ZhciBDLHcsUyxMPTgqdi1BLTEsUj0oMTw8TCktMSx4PVI+PjEsVT0yMz09PUE/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLEg9cz8wOnYt''@;'; put 'put ''MSxWPXM/MTotMSxOPXk8MHx8MD09PXkmJjEveTwwPzE6MDtmb3IoeT1NYXRoLmFicyh5KSxpc05hTih5KXx8eT09PTEvMD8odz1pc05hTih5KT8xOjAsQz1SKTooQz1NYXRoLmZsb29yKE1hdGgubG9nKHkpL01hdGguTE4yKSx5KihTPU1hdGgucG93KDIsLUMpKTwxJiYoQy0tLFMqPTIpLCh5''@;'; put 'put ''Kz1DK3g+PTE/VS9TOlUqTWF0aC5wb3coMiwxLXgpKSpTPj0yJiYoQysrLFMvPTIpLEMreD49Uj8odz0wLEM9Uik6Qyt4Pj0xPyh3PSh5KlMtMSkqTWF0aC5wb3coMixBKSxDKz14KToodz15Kk1hdGgucG93KDIseC0xKSpNYXRoLnBvdygyLEEpLEM9MCkpO0E+PTg7aFtjK0hdPTI1NSZ3LEgr''@;'; put 'put ''PVYsdy89MjU2LEEtPTgpO2ZvcihDPUM8PEF8dyxMKz1BO0w+MDtoW2MrSF09MjU1JkMsSCs9VixDLz0yNTYsTC09OCk7aFtjK0gtVl18PTEyOCpOfX0sNTY2OTgoZmUpe2ZlLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oaCx5KXt5JiYoaC5zdXBl''@;'; put 'put ''cl89eSxoLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6aCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSl9OmZ1bmN0aW9uKGgseSl7aWYoeSl7aC5zdXBlcl89eTt2YXIgYz1mdW5jdGlvbigpe307Yy5w''@;'; put 'put ''cm90b3R5cGU9eS5wcm90b3R5cGUsaC5wcm90b3R5cGU9bmV3IGMsaC5wcm90b3R5cGUuY29uc3RydWN0b3I9aH19fSw0NzI0NChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDQ5MDkyKSgpLHM9aCgzNjU1NikoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKSxBPWZ1bmN0aW9uKFMp''@;'; put 'put ''e3JldHVybiEoeSYmUyYmIm9iamVjdCI9PXR5cGVvZiBTJiZTeW1ib2wudG9TdHJpbmdUYWcgaW4gUykmJiJbb2JqZWN0IEFyZ3VtZW50c10iPT09cyhTKX0sdj1mdW5jdGlvbihTKXtyZXR1cm4hIUEoUyl8fG51bGwhPT1TJiYib2JqZWN0Ij09dHlwZW9mIFMmJiJsZW5ndGgiaW4gUyYmIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBTLmxlbmd0aCYmUy5sZW5ndGg+PTAmJiJbb2JqZWN0IEFycmF5XSIhPT1zKFMpJiYiY2FsbGVlImluIFMmJiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1zKFMuY2FsbGVlKX0sQz1mdW5jdGlvbigpe3JldHVybiBBKGFyZ3VtZW50cyl9KCk7QS5pc0xlZ2FjeUFyZ3VtZW50''@;'; put 'put ''cz12LGZlLmV4cG9ydHM9Qz9BOnZ9LDY5NjAwKGZlKXsidXNlIHN0cmljdCI7dmFyIHksYyxqPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyxoPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmbnVsbCE9PVJlZmxlY3QmJlJlZmxlY3QuYXBwbHk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGgm''@;'; put 'put ''JiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkpdHJ5e3k9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXt0aHJvdyBjfX0pLGM9e30saChmdW5jdGlvbigpe3Rocm93IDQyfSxudWxsLHkpfWNhdGNoKFkpe1khPT1jJiYoaD1u''@;'; put 'put ''dWxsKX1lbHNlIGg9bnVsbDt2YXIgcz0vXlxzKmNsYXNzXGIvLEE9ZnVuY3Rpb24oRil7dHJ5e3ZhciBXPWouY2FsbChGKTtyZXR1cm4gcy50ZXN0KFcpfWNhdGNoe3JldHVybiExfX0sdj1mdW5jdGlvbihGKXt0cnl7cmV0dXJuIUEoRikmJihqLmNhbGwoRiksITApfWNhdGNoe3JldHVybiEx''@;'; put 'put ''fX0sQz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEg9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmISFTeW1ib2wudG9TdHJpbmdUYWcsVj0hKDAgaW5bLF0pLE49ZnVuY3Rpb24oKXtyZXR1cm4hMX07aWYoIm9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCl7dmFyIHo9ZG9jdW1lbnQuYWxs''@;'; put 'put ''O0MuY2FsbCh6KT09PUMuY2FsbChkb2N1bWVudC5hbGwpJiYoTj1mdW5jdGlvbihGKXtpZigoVnx8IUYpJiYodHlwZW9mIEY+InUifHwib2JqZWN0Ij09dHlwZW9mIEYpKXRyeXt2YXIgVz1DLmNhbGwoRik7cmV0dXJuKCJbb2JqZWN0IEhUTUxBbGxDb2xsZWN0aW9uXSI9PT1XfHwiW29iamVj''@;'; put 'put ''dCBIVE1MIGRvY3VtZW50LmFsbCBjbGFzc10iPT09V3x8IltvYmplY3QgSFRNTENvbGxlY3Rpb25dIj09PVd8fCJbb2JqZWN0IE9iamVjdF0iPT09VykmJm51bGw9PUYoIiIpfWNhdGNoe31yZXR1cm4hMX0pfWZlLmV4cG9ydHM9aD9mdW5jdGlvbihGKXtpZihOKEYpKXJldHVybiEwO2lmKCFG''@;'; put 'put ''fHwiZnVuY3Rpb24iIT10eXBlb2YgRiYmIm9iamVjdCIhPXR5cGVvZiBGKXJldHVybiExO3RyeXtoKEYsbnVsbCx5KX1jYXRjaChXKXtpZihXIT09YylyZXR1cm4hMX1yZXR1cm4hQShGKSYmdihGKX06ZnVuY3Rpb24oRil7aWYoTihGKSlyZXR1cm4hMDtpZighRnx8ImZ1bmN0aW9uIiE9dHlw''@;'; put 'put ''ZW9mIEYmJiJvYmplY3QiIT10eXBlb2YgRilyZXR1cm4hMTtpZihIKXJldHVybiB2KEYpO2lmKEEoRikpcmV0dXJuITE7dmFyIFc9Qy5jYWxsKEYpO3JldHVybiEoIltvYmplY3QgRnVuY3Rpb25dIiE9PVcmJiJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIhPT1XJiYhL15cW29iamVjdCBI''@;'; put 'put ''VE1MLy50ZXN0KFcpKSYmdihGKX19LDQ4MTg0KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoMzY1NTYpLHM9aCg5OTcyMSkoL15ccyooPzpmdW5jdGlvbik/XCovKSxBPWgoNDkwOTIpKCksdj1oKDkzNjI4KSxDPXkoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKSx3PXkoIkZ1bmN0''@;'; put 'put ''aW9uLnByb3RvdHlwZS50b1N0cmluZyIpLFM9aCg2OTI5NCkuYztmZS5leHBvcnRzPWZ1bmN0aW9uKFIpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBSKXJldHVybiExO2lmKHModyhSKSkpcmV0dXJuITA7aWYoIUEpcmV0dXJuIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09PUMoUik7aWYo''@;'; put 'put ''IXYpcmV0dXJuITE7dmFyIFU9UygpO3JldHVybiBVJiZ2KFIpPT09VS5wcm90b3R5cGV9fSwxMzAwMyhmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9ZnVuY3Rpb24oaCl7cmV0dXJuIGghPWh9fSwyNDEzMyhmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDEwNDg3KSxjPWgoMzg0NTIp''@;'; put 'put ''LHM9aCgxMzAwMyksQT1oKDc2NjQyKSx2PWgoOTI0NjQpLEM9eShBKCksTnVtYmVyKTtjKEMse2dldFBvbHlmaWxsOkEsaW1wbGVtZW50YXRpb246cyxzaGltOnZ9KSxmZS5leHBvcnRzPUN9LDc2NjQyKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoMTMwMDMpO2ZlLmV4cG9ydHM9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gTnVtYmVyLmlzTmFOJiZOdW1iZXIuaXNOYU4oTmFOKSYmIU51bWJlci5pc05hTigiYSIpP051bWJlci5pc05hTjp5fX0sOTI0NjQoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCgzODQ1MiksYz1oKDc2NjQyKTtmZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIEE9''@;'; put 'put ''YygpO3JldHVybiB5KE51bWJlcix7aXNOYU46QX0se2lzTmFOOmZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5pc05hTiE9PUF9fSksQX19LDE0MDM1KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB2LHk9aCgzNjU1NiksYz1oKDQ5MDkyKSgpLHM9aCg5OTU3KSxBPWgoNzU3OTUpO2lmKGMpe3Zh''@;'; put 'put ''ciBDPXkoIlJlZ0V4cC5wcm90b3R5cGUuZXhlYyIpLHc9e30sUz1mdW5jdGlvbigpe3Rocm93IHd9LEw9e3RvU3RyaW5nOlMsdmFsdWVPZjpTfTsic3ltYm9sIj09dHlwZW9mIFN5bWJvbC50b1ByaW1pdGl2ZSYmKExbU3ltYm9sLnRvUHJpbWl0aXZlXT1TKSx2PWZ1bmN0aW9uKEgpe2lmKCFI''@;'; put 'put ''fHwib2JqZWN0IiE9dHlwZW9mIEgpcmV0dXJuITE7dmFyIFY9QShILCJsYXN0SW5kZXgiKTtpZighVnx8IXMoViwidmFsdWUiKSlyZXR1cm4hMTt0cnl7QyhILEwpfWNhdGNoKHope3JldHVybiB6PT09d319fWVsc2V7dmFyIFI9eSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpO3Y9ZnVu''@;'; put 'put ''Y3Rpb24oSCl7cmV0dXJuISghSHx8Im9iamVjdCIhPXR5cGVvZiBIJiYiZnVuY3Rpb24iIT10eXBlb2YgSCkmJiJbb2JqZWN0IFJlZ0V4cF0iPT09UihIKX19ZmUuZXhwb3J0cz12fSwzNTY4MChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDI1NzY3KTtmZS5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''KHMpe3JldHVybiEheShzKX19LDY0NjM0KGZlKXt2YXIgaj17fS50b1N0cmluZztmZS5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGgpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PWouY2FsbChoKX19LDI5MDkoZmUsaixoKXtsZXQgeTt0cnl7eT1oKDYzNzM1KX1jYXRjaHt5PWgo''@;'; put 'put ''ODEwMDYpfWNvbnN0IGM9aCg0MTIzNikse3N0cmluZ2lmeTpzLHN0cmlwQm9tOkF9PWgoMTExNDQpO2Z1bmN0aW9uIEMoKXtyZXR1cm4oQz1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooSCxWPXt9KXsic3RyaW5nIj09dHlwZW9mIFYmJihWPXtlbmNvZGluZzpWfSk7Y29uc3QgTj1WLmZz''@;'; put 'put ''fHx5LHo9ISgidGhyb3dzImluIFYpfHxWLnRocm93cztsZXQgRixZPXlpZWxkIGMuZnJvbUNhbGxiYWNrKE4ucmVhZEZpbGUpKEgsVik7WT1BKFkpO3RyeXtGPUpTT04ucGFyc2UoWSxWP1YucmV2aXZlcjpudWxsKX1jYXRjaChXKXtpZih6KXRocm93IFcubWVzc2FnZT1gJHtIfTogJHtXLm1l''@;'; put 'put ''c3NhZ2V9YCxXO3JldHVybiBudWxsfXJldHVybiBGfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCB3PWMuZnJvbVByb21pc2UoZnVuY3Rpb24gdihIKXtyZXR1cm4gQy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KTtmdW5jdGlvbiBSKCl7cmV0dXJuKFI9X2FzeW5jVG9HZW5lcmF0b3Io''@;'; put 'put ''ZnVuY3Rpb24qKEgsVixOPXt9KXtjb25zdCB6PU4uZnN8fHksWT1zKFYsTik7eWllbGQgYy5mcm9tQ2FsbGJhY2soei53cml0ZUZpbGUpKEgsWSxOKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgeD1jLmZyb21Qcm9taXNlKGZ1bmN0aW9uIEwoSCxWKXtyZXR1cm4gUi5hcHBseSh0''@;'; put 'put ''aGlzLGFyZ3VtZW50cyl9KTtmZS5leHBvcnRzPXtyZWFkRmlsZTp3LHJlYWRGaWxlU3luYzpmdW5jdGlvbiBTKEgsVj17fSl7InN0cmluZyI9PXR5cGVvZiBWJiYoVj17ZW5jb2Rpbmc6Vn0pO2NvbnN0IE49Vi5mc3x8eSx6PSEoInRocm93cyJpbiBWKXx8Vi50aHJvd3M7dHJ5e2xldCBZPU4u''@;'; put 'put ''cmVhZEZpbGVTeW5jKEgsVik7cmV0dXJuIFk9QShZKSxKU09OLnBhcnNlKFksVi5yZXZpdmVyKX1jYXRjaChZKXtpZih6KXRocm93IFkubWVzc2FnZT1gJHtIfTogJHtZLm1lc3NhZ2V9YCxZO3JldHVybiBudWxsfX0sd3JpdGVGaWxlOngsd3JpdGVGaWxlU3luYzpmdW5jdGlvbiBVKEgsVixO''@;'; put 'put ''PXt9KXtjb25zdCB6PU4uZnN8fHksWT1zKFYsTik7cmV0dXJuIHoud3JpdGVGaWxlU3luYyhILFksTil9fX0sMTExNDQoZmUsaixoKXt2YXIgeT1oKDQ4Mjg3KS5CdWZmZXI7ZmUuZXhwb3J0cz17c3RyaW5naWZ5OmZ1bmN0aW9uIGMoQSx7RU9MOnY9IlxuIixmaW5hbEVPTDpDPSEwLHJlcGxh''@;'; put 'put ''Y2VyOnc9bnVsbCxzcGFjZXM6U309e30pe2NvbnN0IEw9Qz92OiIiLFI9SlNPTi5zdHJpbmdpZnkoQSx3LFMpO2lmKHZvaWQgMD09PVIpdGhyb3cgbmV3IFR5cGVFcnJvcihgQ29udmVydGluZyAke3R5cGVvZiBBfSB2YWx1ZSB0byBKU09OIGlzIG5vdCBzdXBwb3J0ZWRgKTtyZXR1cm4gUi5y''@;'; put 'put ''ZXBsYWNlKC9cbi9nLHYpK0x9LHN0cmlwQm9tOmZ1bmN0aW9uIHMoQSl7cmV0dXJuIHkuaXNCdWZmZXIoQSkmJihBPUEudG9TdHJpbmcoInV0ZjgiKSksQS5yZXBsYWNlKC9eXHVGRUZGLywiIil9fX0sNjc2NShmZSxqLGgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB5KHcpe3RoaXMubWVzc2Fn''@;'; put 'put ''ZT13fWgucihqKSxoLmQoaix7SW52YWxpZFRva2VuRXJyb3I6KCk9PkF9KSwoeS5wcm90b3R5cGU9bmV3IEVycm9yKS5uYW1lPSJJbnZhbGlkQ2hhcmFjdGVyRXJyb3IiO3ZhciBjPXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuYXRvYiYmd2luZG93LmF0b2IuYmluZCh3aW5kb3cpfHxmdW5j''@;'; put 'put ''dGlvbih3KXt2YXIgUz1TdHJpbmcodykucmVwbGFjZSgvPSskLywiIik7aWYoUy5sZW5ndGglND09MSl0aHJvdyBuZXcgeSgiJ2F0b2InIGZhaWxlZDogVGhlIHN0cmluZyB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC4iKTtmb3IodmFyIEwsUix4PTAsVT0wLEg9IiI7''@;'; put 'put ''Uj1TLmNoYXJBdChVKyspO35SJiYoTD14JTQ/NjQqTCtSOlIseCsrJTQpP0grPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1Jkw+PigtMip4JjYpKTowKVI9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5pbmRleE9mKFIp''@;'; put 'put ''O3JldHVybiBIfTtmdW5jdGlvbiBBKHcpe3RoaXMubWVzc2FnZT13fShBLnByb3RvdHlwZT1uZXcgRXJyb3IpLm5hbWU9IkludmFsaWRUb2tlbkVycm9yIixoLmQoaixbImRlZmF1bHQiLDAsZnVuY3Rpb24gdih3LFMpe2lmKCJzdHJpbmciIT10eXBlb2Ygdyl0aHJvdyBuZXcgQSgiSW52YWxp''@;'; put 'put ''ZCB0b2tlbiBzcGVjaWZpZWQiKTt2YXIgTD0hMD09PShTPVN8fHt9KS5oZWFkZXI/MDoxO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShmdW5jdGlvbiBzKHcpe3ZhciBTPXcucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIik7c3dpdGNoKFMubGVuZ3RoJTQpe2Nhc2UgMDpicmVhaztj''@;'; put 'put ''YXNlIDI6Uys9Ij09IjticmVhaztjYXNlIDM6Uys9Ij0iO2JyZWFrO2RlZmF1bHQ6dGhyb3ciSWxsZWdhbCBiYXNlNjR1cmwgc3RyaW5nISJ9dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoYyhTKS5yZXBsYWNlKC8oLikvZyxmdW5jdGlvbihSLHgpe3ZhciBVPXguY2hhckNvZGVBdCgw''@;'; put 'put ''KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4gVS5sZW5ndGg8MiYmKFU9IjAiK1UpLCIlIitVfSkpfWNhdGNoe3JldHVybiBjKFMpfX0ody5zcGxpdCgiLiIpW0xdKSl9Y2F0Y2goUil7dGhyb3cgbmV3IEEoIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkOiAiK1IubWVzc2FnZSl9''@;'; put 'put ''fV0pfSwxMDkxMihmZSxqLGgpe3ZhciB5PTEvMCxzPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxBPVJlZ0V4cChzLnNvdXJjZSksQz0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLHc9Im9iamVjdCI9PXR5cGVvZiBoLmcmJmguZyYmaC5nLk9i''@;'; put 'put ''amVjdD09PU9iamVjdCYmaC5nfHxDfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLEw9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxSPXcuU3ltYm9sLHg9Uj9SLnByb3RvdHlwZTp2b2lkIDAsVT14P3gudG9TdHJpbmc6dm9pZCAwO2ZlLmV4cG9ydHM9ZnVuY3Rpb24gWShGKXtyZXR1cm4o''@;'; put 'put ''Rj1mdW5jdGlvbiB6KEYpe3JldHVybiBudWxsPT1GPyIiOmZ1bmN0aW9uIEgoRil7aWYoInN0cmluZyI9PXR5cGVvZiBGKXJldHVybiBGO2lmKGZ1bmN0aW9uIE4oRil7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBGfHxmdW5jdGlvbiBWKEYpe3JldHVybiEhRiYmIm9iamVjdCI9PXR5cGVvZiBG''@;'; put 'put ''fShGKSYmIltvYmplY3QgU3ltYm9sXSI9PUwuY2FsbChGKX0oRikpcmV0dXJuIFU/VS5jYWxsKEYpOiIiO3ZhciBXPUYrIiI7cmV0dXJuIjAiPT1XJiYxL0Y9PS15PyItMCI6V30oRil9KEYpKSYmQS50ZXN0KEYpP0YucmVwbGFjZShzLCJcXCQmIik6Rn19LDg3OTE0KGZlKXt2YXIgeT1PYmpl''@;'; put 'put ''Y3QucHJvdG90eXBlLnRvU3RyaW5nO2ZlLmV4cG9ydHM9ZnVuY3Rpb24gYyhBKXtyZXR1cm4hMD09PUF8fCExPT09QXx8ZnVuY3Rpb24gcyhBKXtyZXR1cm4hIUEmJiJvYmplY3QiPT10eXBlb2YgQX0oQSkmJiJbb2JqZWN0IEJvb2xlYW5dIj09eS5jYWxsKEEpfX0sODE0MihmZSxqLGgpe2Zl''@;'; put 'put ''PWgubm1kKGZlKTt2YXIgYz0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIsdj05MDA3MTk5MjU0NzQwOTkxLEM9IltvYmplY3QgQXJndW1lbnRzXSIsdz0iW29iamVjdCBBcnJheV0iLEw9IltvYmplY3QgQm9vbGVhbl0iLFI9IltvYmplY3QgRGF0ZV0iLHg9IltvYmplY3QgRXJyb3JdIixV''@;'; put 'put ''PSJbb2JqZWN0IEZ1bmN0aW9uXSIsVj0iW29iamVjdCBNYXBdIixOPSJbb2JqZWN0IE51bWJlcl0iLFk9IltvYmplY3QgT2JqZWN0XSIsRj0iW29iamVjdCBQcm9taXNlXSIscT0iW29iamVjdCBSZWdFeHBdIixyZT0iW29iamVjdCBTZXRdIixtZT0iW29iamVjdCBTdHJpbmddIixrZT0iW29i''@;'; put 'put ''amVjdCBXZWFrTWFwXSIscWU9IltvYmplY3QgQXJyYXlCdWZmZXJdIixYPSJbb2JqZWN0IERhdGFWaWV3XSIsdWU9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sbmU9L14oPzowfFsxLTldXGQqKSQvLF9lPXt9O19lWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1fZVsiW29iamVjdCBG''@;'; put 'put ''bG9hdDY0QXJyYXldIl09X2VbIltvYmplY3QgSW50OEFycmF5XSJdPV9lWyJbb2JqZWN0IEludDE2QXJyYXldIl09X2VbIltvYmplY3QgSW50MzJBcnJheV0iXT1fZVsiW29iamVjdCBVaW50OEFycmF5XSJdPV9lWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPV9lWyJbb2JqZWN0IFVp''@;'; put 'put ''bnQxNkFycmF5XSJdPV9lWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLF9lW0NdPV9lW3ddPV9lW3FlXT1fZVtMXT1fZVtYXT1fZVtSXT1fZVt4XT1fZVtVXT1fZVtWXT1fZVtOXT1fZVtZXT1fZVtxXT1fZVtyZV09X2VbbWVdPV9lW2tlXT0hMTt2YXIgUGU9Im9iamVjdCI9PXR5cGVvZiBo''@;'; put 'put ''LmcmJmguZyYmaC5nLk9iamVjdD09PU9iamVjdCYmaC5nLG90PSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsbHQ9UGV8fG90fHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLGR0PWomJiFqLm5vZGVUeXBlJiZqLFJlPWR0JiZmZSYmIWZl''@;'; put 'put ''Lm5vZGVUeXBlJiZmZSxhZT1SZSYmUmUuZXhwb3J0cz09PWR0LHhlPWFlJiZQZS5wcm9jZXNzLGplPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiB4ZSYmeGUuYmluZGluZyYmeGUuYmluZGluZygidXRpbCIpfWNhdGNoe319KCksQWU9amUmJmplLmlzVHlwZWRBcnJheTtmdW5jdGlvbiBnZShjbixp''@;'; put 'put ''cil7Zm9yKHZhciBnaT0tMSx3bz1udWxsPT1jbj8wOmNuLmxlbmd0aDsrK2dpPHdvOylpZihpcihjbltnaV0sZ2ksY24pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHdlKGNuLGlyKXtyZXR1cm4gY24uaGFzKGlyKX1mdW5jdGlvbiB0dChjbil7dmFyIGlyPS0xLGdpPUFycmF5KGNuLnNp''@;'; put 'put ''emUpO3JldHVybiBjbi5mb3JFYWNoKGZ1bmN0aW9uKHdvLGxzKXtnaVsrK2lyXT1bbHMsd29dfSksZ2l9ZnVuY3Rpb24gJHQoY24pe3ZhciBpcj0tMSxnaT1BcnJheShjbi5zaXplKTtyZXR1cm4gY24uZm9yRWFjaChmdW5jdGlvbih3byl7Z2lbKytpcl09d299KSxnaX12YXIgY24sUnQ9QXJy''@;'; put 'put ''YXkucHJvdG90eXBlLEd0PU9iamVjdC5wcm90b3R5cGUsZ3Q9bHRbIl9fY29yZS1qc19zaGFyZWRfXyJdLFh0PUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyxMcj1HdC5oYXNPd25Qcm9wZXJ0eSxsbj0oY249L1teLl0rJC8uZXhlYyhndCYmZ3Qua2V5cyYmZ3Qua2V5cy5JRV9QUk9UT3x8''@;'; put 'put ''IiIpKT8iU3ltYm9sKHNyYylfMS4iK2NuOiIiLE9uPUd0LnRvU3RyaW5nLFFyPVJlZ0V4cCgiXiIrWHQuY2FsbChMcikucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1c''@;'; put 'put ''XFxdKS9nLCIkMS4qPyIpKyIkIiksdHI9YWU/bHQuQnVmZmVyOnZvaWQgMCxIbj1sdC5TeW1ib2wsT289bHQuVWludDhBcnJheSx1cj1HdC5wcm9wZXJ0eUlzRW51bWVyYWJsZSxabj1SdC5zcGxpY2UsU249SG4/SG4udG9TdHJpbmdUYWc6dm9pZCAwLHhyPU9iamVjdC5nZXRPd25Qcm9wZXJ0''@;'; put 'put ''eVN5bWJvbHMsVHQ9dHI/dHIuaXNCdWZmZXI6dm9pZCAwLEFyPWZ1bmN0aW9uIEtlKGNuLGlyKXtyZXR1cm4gZnVuY3Rpb24oZ2kpe3JldHVybiBjbihpcihnaSkpfX0oT2JqZWN0LmtleXMsT2JqZWN0KSxfbj1tMihsdCwiRGF0YVZpZXciKSxadD1tMihsdCwiTWFwIiksTm49bTIobHQsIlBy''@;'; put 'put ''b21pc2UiKSxwdD1tMihsdCwiU2V0IikscG49bTIobHQsIldlYWtNYXAiKSxNaT1tMihPYmplY3QsImNyZWF0ZSIpLEdlPUpjKF9uKSxVdD1KYyhadCksdnI9SmMoTm4pLHh0PUpjKHB0KSxCdD1KYyhwbiksem49SG4/SG4ucHJvdG90eXBlOnZvaWQgMCxHbj16bj96bi52YWx1ZU9mOnZvaWQg''@;'; put 'put ''MDtmdW5jdGlvbiB5bihjbil7dmFyIGlyPS0xLGdpPW51bGw9PWNuPzA6Y24ubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytpcjxnaTspe3ZhciB3bz1jbltpcl07dGhpcy5zZXQod29bMF0sd29bMV0pfX1mdW5jdGlvbiBCbihjbil7dmFyIGlyPS0xLGdpPW51bGw9PWNuPzA6Y24ubGVuZ3Ro''@;'; put 'put ''O2Zvcih0aGlzLmNsZWFyKCk7KytpcjxnaTspe3ZhciB3bz1jbltpcl07dGhpcy5zZXQod29bMF0sd29bMV0pfX1mdW5jdGlvbiBjYShjbil7dmFyIGlyPS0xLGdpPW51bGw9PWNuPzA6Y24ubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytpcjxnaTspe3ZhciB3bz1jbltpcl07dGhpcy5zZXQo''@;'; put 'put ''d29bMF0sd29bMV0pfX1mdW5jdGlvbiB0YShjbil7dmFyIGlyPS0xLGdpPW51bGw9PWNuPzA6Y24ubGVuZ3RoO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyBjYTsrK2lyPGdpOyl0aGlzLmFkZChjbltpcl0pfWZ1bmN0aW9uICRpKGNuKXt2YXIgaXI9dGhpcy5fX2RhdGFfXz1uZXcgQm4oY24pO3Ro''@;'; put 'put ''aXMuc2l6ZT1pci5zaXplfWZ1bmN0aW9uIGRjKGNuLGlyKXtmb3IodmFyIGdpPWNuLmxlbmd0aDtnaS0tOylpZihnZihjbltnaV1bMF0saXIpKXJldHVybiBnaTtyZXR1cm4tMX1mdW5jdGlvbiBnMihjbil7cmV0dXJuIG51bGw9PWNuP3ZvaWQgMD09PWNuPyJbb2JqZWN0IFVuZGVmaW5lZF0i''@;'; put 'put ''OiJbb2JqZWN0IE51bGxdIjpTbiYmU24gaW4gT2JqZWN0KGNuKT9mdW5jdGlvbiBhMChjbil7dmFyIGlyPUxyLmNhbGwoY24sU24pLGdpPWNuW1NuXTt0cnl7Y25bU25dPXZvaWQgMDt2YXIgd289ITB9Y2F0Y2h7fXZhciBscz1Pbi5jYWxsKGNuKTtyZXR1cm4gd28mJihpcj9jbltTbl09Z2k6''@;'; put 'put ''ZGVsZXRlIGNuW1NuXSksbHN9KGNuKTpmdW5jdGlvbiB3Zyhjbil7cmV0dXJuIE9uLmNhbGwoY24pfShjbil9ZnVuY3Rpb24gTGMoY24pe3JldHVybiBKbihjbikmJmcyKGNuKT09Q31mdW5jdGlvbiBVcyhjbixpcixnaSx3byxscyl7cmV0dXJuIGNuPT09aXJ8fChudWxsPT1jbnx8bnVsbD09''@;'; put 'put ''aXJ8fCFKbihjbikmJiFKbihpcik/Y24hPWNuJiZpciE9aXI6ZnVuY3Rpb24gc3AoY24saXIsZ2ksd28sbHMsRXIpe3ZhciB0Yz1EbChjbiksUWE9RGwoaXIpLHVsPXRjP3c6VWEoY24pLHBzPVFhP3c6VWEoaXIpLHR1PSh1bD11bD09Qz9ZOnVsKT09WSxncz0ocHM9cHM9PUM/WTpwcyk9PVks''@;'; put 'put ''T2M9dWw9PXBzO2lmKE9jJiZCdShjbikpe2lmKCFCdShpcikpcmV0dXJuITE7dGM9ITAsdHU9ITF9aWYoT2MmJiF0dSlyZXR1cm4gRXJ8fChFcj1uZXcgJGkpLHRjfHxjbChjbik/eWQoY24saXIsZ2ksd28sbHMsRXIpOmZ1bmN0aW9uIFVvKGNuLGlyLGdpLHdvLGxzLEVyLHRjKXtzd2l0Y2go''@;'; put 'put ''Z2kpe2Nhc2UgWDppZihjbi5ieXRlTGVuZ3RoIT1pci5ieXRlTGVuZ3RofHxjbi5ieXRlT2Zmc2V0IT1pci5ieXRlT2Zmc2V0KXJldHVybiExO2NuPWNuLmJ1ZmZlcixpcj1pci5idWZmZXI7Y2FzZSBxZTpyZXR1cm4hKGNuLmJ5dGVMZW5ndGghPWlyLmJ5dGVMZW5ndGh8fCFFcihuZXcgT28o''@;'; put 'put ''Y24pLG5ldyBPbyhpcikpKTtjYXNlIEw6Y2FzZSBSOmNhc2UgTjpyZXR1cm4gZ2YoK2NuLCtpcik7Y2FzZSB4OnJldHVybiBjbi5uYW1lPT1pci5uYW1lJiZjbi5tZXNzYWdlPT1pci5tZXNzYWdlO2Nhc2UgcTpjYXNlIG1lOnJldHVybiBjbj09aXIrIiI7Y2FzZSBWOnZhciBRYT10dDtjYXNl''@;'; put 'put ''IHJlOmlmKFFhfHwoUWE9JHQpLGNuLnNpemUhPWlyLnNpemUmJiEoMSZ3bykpcmV0dXJuITE7dmFyIHBzPXRjLmdldChjbik7aWYocHMpcmV0dXJuIHBzPT1pcjt3b3w9Mix0Yy5zZXQoY24saXIpO3ZhciB0dT15ZChRYShjbiksUWEoaXIpLHdvLGxzLEVyLHRjKTtyZXR1cm4gdGMuZGVsZXRl''@;'; put 'put ''KGNuKSx0dTtjYXNlIltvYmplY3QgU3ltYm9sXSI6aWYoR24pcmV0dXJuIEduLmNhbGwoY24pPT1Hbi5jYWxsKGlyKX1yZXR1cm4hMX0oY24saXIsdWwsZ2ksd28sbHMsRXIpO2lmKCEoMSZnaSkpe3ZhciBMbD10dSYmTHIuY2FsbChjbiwiX193cmFwcGVkX18iKSxBaD1ncyYmTHIuY2FsbChp''@;'; put 'put ''ciwiX193cmFwcGVkX18iKTtpZihMbHx8QWgpe3ZhciBKaD1MbD9jbi52YWx1ZSgpOmNuLE9sPUFoP2lyLnZhbHVlKCk6aXI7cmV0dXJuIEVyfHwoRXI9bmV3ICRpKSxscyhKaCxPbCxnaSx3byxFcil9fXJldHVybiEhT2MmJihFcnx8KEVyPW5ldyAkaSksZnVuY3Rpb24gZmEoY24saXIsZ2ks''@;'; put 'put ''d28sbHMsRXIpe3ZhciB0Yz0xJmdpLFFhPVZyKGNuKSx1bD1RYS5sZW5ndGg7aWYodWwhPVZyKGlyKS5sZW5ndGgmJiF0YylyZXR1cm4hMTtmb3IodmFyIGdzPXVsO2dzLS07KXt2YXIgT2M9UWFbZ3NdO2lmKCEodGM/T2MgaW4gaXI6THIuY2FsbChpcixPYykpKXJldHVybiExfXZhciBMbD1F''@;'; put 'put ''ci5nZXQoY24pO2lmKExsJiZFci5nZXQoaXIpKXJldHVybiBMbD09aXI7dmFyIEFoPSEwO0VyLnNldChjbixpciksRXIuc2V0KGlyLGNuKTtmb3IodmFyIEpoPXRjOysrZ3M8dWw7KXt2YXIgT2w9Y25bT2M9UWFbZ3NdXSxFYz1pcltPY107aWYod28pdmFyIEZyPXRjP3dvKEVjLE9sLE9jLGly''@;'; put 'put ''LGNuLEVyKTp3byhPbCxFYyxPYyxjbixpcixFcik7aWYoISh2b2lkIDA9PT1Gcj9PbD09PUVjfHxscyhPbCxFYyxnaSx3byxFcik6RnIpKXtBaD0hMTticmVha31KaHx8KEpoPSJjb25zdHJ1Y3RvciI9PU9jKX1pZihBaCYmIUpoKXt2YXIgSXU9Y24uY29uc3RydWN0b3IsTWM9aXIuY29uc3Ry''@;'; put 'put ''dWN0b3I7SXUhPU1jJiYiY29uc3RydWN0b3IiaW4gY24mJiJjb25zdHJ1Y3RvciJpbiBpciYmISgiZnVuY3Rpb24iPT10eXBlb2YgSXUmJkl1IGluc3RhbmNlb2YgSXUmJiJmdW5jdGlvbiI9PXR5cGVvZiBNYyYmTWMgaW5zdGFuY2VvZiBNYykmJihBaD0hMSl9cmV0dXJuIEVyLmRlbGV0ZShj''@;'; put 'put ''biksRXIuZGVsZXRlKGlyKSxBaH0oY24saXIsZ2ksd28sbHMsRXIpKX0oY24saXIsZ2ksd28sVXMsbHMpKX1mdW5jdGlvbiB5ZChjbixpcixnaSx3byxscyxFcil7dmFyIHRjPTEmZ2ksUWE9Y24ubGVuZ3RoLHVsPWlyLmxlbmd0aDtpZihRYSE9dWwmJiEodGMmJnVsPlFhKSlyZXR1cm4hMTt2''@;'; put 'put ''YXIgcHM9RXIuZ2V0KGNuKTtpZihwcyYmRXIuZ2V0KGlyKSlyZXR1cm4gcHM9PWlyO3ZhciB0dT0tMSxncz0hMCxPYz0yJmdpP25ldyB0YTp2b2lkIDA7Zm9yKEVyLnNldChjbixpciksRXIuc2V0KGlyLGNuKTsrK3R1PFFhOyl7dmFyIExsPWNuW3R1XSxBaD1pclt0dV07aWYod28pdmFyIEpo''@;'; put 'put ''PXRjP3dvKEFoLExsLHR1LGlyLGNuLEVyKTp3byhMbCxBaCx0dSxjbixpcixFcik7aWYodm9pZCAwIT09Smgpe2lmKEpoKWNvbnRpbnVlO2dzPSExO2JyZWFrfWlmKE9jKXtpZighZ2UoaXIsZnVuY3Rpb24oT2wsRWMpe2lmKCF3ZShPYyxFYykmJihMbD09PU9sfHxscyhMbCxPbCxnaSx3byxF''@;'; put 'put ''cikpKXJldHVybiBPYy5wdXNoKEVjKX0pKXtncz0hMTticmVha319ZWxzZSBpZihMbCE9PUFoJiYhbHMoTGwsQWgsZ2ksd28sRXIpKXtncz0hMTticmVha319cmV0dXJuIEVyLmRlbGV0ZShjbiksRXIuZGVsZXRlKGlyKSxnc31mdW5jdGlvbiBWcihjbil7cmV0dXJuIGZ1bmN0aW9uIElsKGNu''@;'; put 'put ''LGlyLGdpKXt2YXIgd289aXIoY24pO3JldHVybiBEbChjbik/d286ZnVuY3Rpb24gRmUoY24saXIpe2Zvcih2YXIgZ2k9LTEsd289aXIubGVuZ3RoLGxzPWNuLmxlbmd0aDsrK2dpPHdvOyljbltscytnaV09aXJbZ2ldO3JldHVybiBjbn0od28sZ2koY24pKX0oY24sbWksYmcpfWZ1bmN0aW9u''@;'; put 'put ''IFFjKGNuLGlyKXt2YXIgZ2k9Y24uX19kYXRhX187cmV0dXJuIGZ1bmN0aW9uIExtKGNuKXt2YXIgaXI9dHlwZW9mIGNuO3JldHVybiJzdHJpbmciPT1pcnx8Im51bWJlciI9PWlyfHwic3ltYm9sIj09aXJ8fCJib29sZWFuIj09aXI/Il9fcHJvdG9fXyIhPT1jbjpudWxsPT09Y259KGlyKT9n''@;'; put 'put ''aVsic3RyaW5nIj09dHlwZW9mIGlyPyJzdHJpbmciOiJoYXNoIl06Z2kubWFwfWZ1bmN0aW9uIG0yKGNuLGlyKXt2YXIgZ2k9ZnVuY3Rpb24gSmUoY24saXIpe3JldHVybiBjbj8uW2lyXX0oY24saXIpO3JldHVybiBmdW5jdGlvbiBScyhjbil7cmV0dXJuISghZWQoY24pfHxmdW5jdGlvbiB1''@;'; put 'put ''Myhjbil7cmV0dXJuISFsbiYmbG4gaW4gY259KGNuKSkmJihSdShjbik/UXI6dWUpLnRlc3QoSmMoY24pKX0oZ2kpP2dpOnZvaWQgMH15bi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gdmkoKXt0aGlzLl9fZGF0YV9fPU1pP01pKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSx5bi5wcm90b3R5cGUu''@;'; put 'put ''ZGVsZXRlPWZ1bmN0aW9uIHJyKGNuKXt2YXIgaXI9dGhpcy5oYXMoY24pJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tjbl07cmV0dXJuIHRoaXMuc2l6ZS09aXI/MTowLGlyfSx5bi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIGhyKGNuKXt2YXIgaXI9dGhpcy5fX2RhdGFfXztpZihNaSl7dmFyIGdp''@;'; put 'put ''PWlyW2NuXTtyZXR1cm4gZ2k9PT1jP3ZvaWQgMDpnaX1yZXR1cm4gTHIuY2FsbChpcixjbik/aXJbY25dOnZvaWQgMH0seW4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBwbyhjbil7dmFyIGlyPXRoaXMuX19kYXRhX187cmV0dXJuIE1pP3ZvaWQgMCE9PWlyW2NuXTpMci5jYWxsKGlyLGNuKX0s''@;'; put 'put ''eW4ucHJvdG90eXBlLnNldD1mdW5jdGlvbiB2bihjbixpcil7dmFyIGdpPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoY24pPzA6MSxnaVtjbl09TWkmJnZvaWQgMD09PWlyP2M6aXIsdGhpc30sQm4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIGphKCl7dGhpcy5f''@;'; put 'put ''X2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sQm4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBqbyhjbil7dmFyIGlyPXRoaXMuX19kYXRhX18sZ2k9ZGMoaXIsY24pO3JldHVybiEoZ2k8MHx8KGdpPT1pci5sZW5ndGgtMT9pci5wb3AoKTpabi5jYWxsKGlyLGdpLDEpLC0tdGhpcy5zaXplLDAp''@;'; put 'put ''KX0sQm4ucHJvdG90eXBlLmdldD1mdW5jdGlvbiBYcihjbil7dmFyIGlyPXRoaXMuX19kYXRhX18sZ2k9ZGMoaXIsY24pO3JldHVybiBnaTwwP3ZvaWQgMDppcltnaV1bMV19LEJuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gZWEoY24pe3JldHVybiBkYyh0aGlzLl9fZGF0YV9fLGNuKT4tMX0s''@;'; put 'put ''Qm4ucHJvdG90eXBlLnNldD1mdW5jdGlvbiByYShjbixpcil7dmFyIGdpPXRoaXMuX19kYXRhX18sd289ZGMoZ2ksY24pO3JldHVybiB3bzwwPygrK3RoaXMuc2l6ZSxnaS5wdXNoKFtjbixpcl0pKTpnaVt3b11bMV09aXIsdGhpc30sY2EucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIENpKCl7''@;'; put 'put ''dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgeW4sbWFwOm5ldyhadHx8Qm4pLHN0cmluZzpuZXcgeW59fSxjYS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIGhvKGNuKXt2YXIgaXI9UWModGhpcyxjbikuZGVsZXRlKGNuKTtyZXR1cm4gdGhpcy5zaXplLT1pcj8xOjAsaXJ9''@;'; put 'put ''LGNhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gTWEoY24pe3JldHVybiBRYyh0aGlzLGNuKS5nZXQoY24pfSxjYS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIGtzKGNuKXtyZXR1cm4gUWModGhpcyxjbikuaGFzKGNuKX0sY2EucHJvdG90eXBlLnNldD1mdW5jdGlvbiBCaShjbixpcil7dmFyIGdp''@;'; put 'put ''PVFjKHRoaXMsY24pLHdvPWdpLnNpemU7cmV0dXJuIGdpLnNldChjbixpciksdGhpcy5zaXplKz1naS5zaXplPT13bz8wOjEsdGhpc30sdGEucHJvdG90eXBlLmFkZD10YS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbiBNcihjbil7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KGNuLGMpLHRoaXN9''@;'; put 'put ''LHRhLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gRnMoY24pe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhjbil9LCRpLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBfcygpe3RoaXMuX19kYXRhX189bmV3IEJuLHRoaXMuc2l6ZT0wfSwkaS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIGpzKGNu''@;'; put 'put ''KXt2YXIgaXI9dGhpcy5fX2RhdGFfXyxnaT1pci5kZWxldGUoY24pO3JldHVybiB0aGlzLnNpemU9aXIuc2l6ZSxnaX0sJGkucHJvdG90eXBlLmdldD1mdW5jdGlvbiBDbChjbil7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGNuKX0sJGkucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBUaShjbil7''@;'; put 'put ''cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGNuKX0sJGkucHJvdG90eXBlLnNldD1mdW5jdGlvbiBXbihjbixpcil7dmFyIGdpPXRoaXMuX19kYXRhX187aWYoZ2kgaW5zdGFuY2VvZiBCbil7dmFyIHdvPWdpLl9fZGF0YV9fO2lmKCFadHx8d28ubGVuZ3RoPDE5OSlyZXR1cm4gd28ucHVzaChb''@;'; put 'put ''Y24saXJdKSx0aGlzLnNpemU9KytnaS5zaXplLHRoaXM7Z2k9dGhpcy5fX2RhdGFfXz1uZXcgY2Eod28pfXJldHVybiBnaS5zZXQoY24saXIpLHRoaXMuc2l6ZT1naS5zaXplLHRoaXN9O3ZhciBiZz14cj9mdW5jdGlvbihjbil7cmV0dXJuIG51bGw9PWNuP1tdOihjbj1PYmplY3QoY24pLGZ1''@;'; put 'put ''bmN0aW9uIERlKGNuLGlyKXtmb3IodmFyIGdpPS0xLHdvPW51bGw9PWNuPzA6Y24ubGVuZ3RoLGxzPTAsRXI9W107KytnaTx3bzspe3ZhciB0Yz1jbltnaV07aXIodGMsZ2ksY24pJiYoRXJbbHMrK109dGMpfXJldHVybiBFcn0oeHIoY24pLGZ1bmN0aW9uKGlyKXtyZXR1cm4gdXIuY2FsbChj''@;'; put 'put ''bixpcil9KSl9OmZ1bmN0aW9uIGV1KCl7cmV0dXJuW119LFVhPWcyO2Z1bmN0aW9uIFZ1KGNuLGlyKXtyZXR1cm4hIShpcj1pcj8/dikmJigibnVtYmVyIj09dHlwZW9mIGNufHxuZS50ZXN0KGNuKSkmJmNuPi0xJiZjbiUxPT0wJiZjbjxpcn1mdW5jdGlvbiBKYyhjbil7aWYobnVsbCE9Y24p''@;'; put 'put ''e3RyeXtyZXR1cm4gWHQuY2FsbChjbil9Y2F0Y2h7fXRyeXtyZXR1cm4gY24rIiJ9Y2F0Y2h7fX1yZXR1cm4iIn1mdW5jdGlvbiBnZihjbixpcil7cmV0dXJuIGNuPT09aXJ8fGNuIT1jbiYmaXIhPWlyfShfbiYmVWEobmV3IF9uKG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1YfHxadCYmVWEobmV3''@;'; put 'put ''IFp0KSE9Vnx8Tm4mJlVhKE5uLnJlc29sdmUoKSkhPUZ8fHB0JiZVYShuZXcgcHQpIT1yZXx8cG4mJlVhKG5ldyBwbikhPWtlKSYmKFVhPWZ1bmN0aW9uKGNuKXt2YXIgaXI9ZzIoY24pLGdpPWlyPT1ZP2NuLmNvbnN0cnVjdG9yOnZvaWQgMCx3bz1naT9KYyhnaSk6IiI7aWYod28pc3dpdGNo''@;'; put 'put ''KHdvKXtjYXNlIEdlOnJldHVybiBYO2Nhc2UgVXQ6cmV0dXJuIFY7Y2FzZSB2cjpyZXR1cm4gRjtjYXNlIHh0OnJldHVybiByZTtjYXNlIEJ0OnJldHVybiBrZX1yZXR1cm4gaXJ9KTt2YXIgbHA9TGMoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9MYzpmdW5jdGlvbihjbil7cmV0''@;'; put 'put ''dXJuIEpuKGNuKSYmTHIuY2FsbChjbiwiY2FsbGVlIikmJiF1ci5jYWxsKGNuLCJjYWxsZWUiKX0sRGw9QXJyYXkuaXNBcnJheSxCdT1UdHx8ZnVuY3Rpb24gU2woKXtyZXR1cm4hMX07ZnVuY3Rpb24gUnUoY24pe2lmKCFlZChjbikpcmV0dXJuITE7dmFyIGlyPWcyKGNuKTtyZXR1cm4gaXI9''@;'; put 'put ''PVV8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PWlyfHwiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PWlyfHwiW29iamVjdCBQcm94eV0iPT1pcn1mdW5jdGlvbiBoYyhjbil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBjbiYmY24+LTEmJmNuJTE9PTAmJmNuPD12fWZ1bmN0aW9uIGVk''@;'; put 'put ''KGNuKXt2YXIgaXI9dHlwZW9mIGNuO3JldHVybiBudWxsIT1jbiYmKCJvYmplY3QiPT1pcnx8ImZ1bmN0aW9uIj09aXIpfWZ1bmN0aW9uIEpuKGNuKXtyZXR1cm4gbnVsbCE9Y24mJiJvYmplY3QiPT10eXBlb2YgY259dmFyIGNsPUFlP2Z1bmN0aW9uIGhlKGNuKXtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''aXIpe3JldHVybiBjbihpcil9fShBZSk6ZnVuY3Rpb24gTDAoY24pe3JldHVybiBKbihjbikmJmhjKGNuLmxlbmd0aCkmJiEhX2VbZzIoY24pXX07ZnVuY3Rpb24gbWkoY24pe3JldHVybiBmdW5jdGlvbiBFbyhjbil7cmV0dXJuIG51bGwhPWNuJiZoYyhjbi5sZW5ndGgpJiYhUnUoY24pfShj''@;'; put 'put ''bik/ZnVuY3Rpb24gUWgoY24saXIpe3ZhciBnaT1EbChjbiksd289IWdpJiZscChjbiksbHM9IWdpJiYhd28mJkJ1KGNuKSxFcj0hZ2kmJiF3byYmIWxzJiZjbChjbiksdGM9Z2l8fHdvfHxsc3x8RXIsUWE9dGM/ZnVuY3Rpb24gY2UoY24saXIpe2Zvcih2YXIgZ2k9LTEsd289QXJyYXkoY24p''@;'; put 'put ''OysrZ2k8Y247KXdvW2dpXT1pcihnaSk7cmV0dXJuIHdvfShjbi5sZW5ndGgsU3RyaW5nKTpbXSx1bD1RYS5sZW5ndGg7Zm9yKHZhciBwcyBpbiBjbikoaXJ8fExyLmNhbGwoY24scHMpKSYmKCF0Y3x8ISgibGVuZ3RoIj09cHN8fGxzJiYoIm9mZnNldCI9PXBzfHwicGFyZW50Ij09cHMpfHxF''@;'; put 'put ''ciYmKCJidWZmZXIiPT1wc3x8ImJ5dGVMZW5ndGgiPT1wc3x8ImJ5dGVPZmZzZXQiPT1wcyl8fFZ1KHBzLHVsKSkpJiZRYS5wdXNoKHBzKTtyZXR1cm4gUWF9KGNuKTpmdW5jdGlvbiBKdShjbil7aWYoIWZ1bmN0aW9uIG5oKGNuKXt2YXIgaXI9Y24mJmNuLmNvbnN0cnVjdG9yO3JldHVybiBj''@;'; put 'put ''bj09PSgiZnVuY3Rpb24iPT10eXBlb2YgaXImJmlyLnByb3RvdHlwZXx8R3QpfShjbikpcmV0dXJuIEFyKGNuKTt2YXIgaXI9W107Zm9yKHZhciBnaSBpbiBPYmplY3QoY24pKUxyLmNhbGwoY24sZ2kpJiYiY29uc3RydWN0b3IiIT1naSYmaXIucHVzaChnaSk7cmV0dXJuIGlyfShjbil9ZmUu''@;'; put 'put ''ZXhwb3J0cz1mdW5jdGlvbiBOMShjbixpcil7cmV0dXJuIFVzKGNuLGlyKX19LDg1NzEwKGZlLGosaCl7dmFyIFM9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixMPSJvYmplY3QiPT10eXBlb2YgaC5nJiZoLmcmJmguZy5PYmplY3Q9PT1P''@;'; put 'put ''YmplY3QmJmguZ3x8U3x8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxSPU9iamVjdC5wcm90b3R5cGUseD1SLmhhc093blByb3BlcnR5LFU9Ui50b1N0cmluZyxIPUwuU3ltYm9sLFY9SD9ILnRvU3RyaW5nVGFnOnZvaWQgMDtmZS5leHBvcnRzPWZ1bmN0aW9uIEYocSl7aWYoIWZ1bmN0aW9u''@;'; put 'put ''IFcocSl7dmFyIHJlPXR5cGVvZiBxO3JldHVybiBudWxsIT1xJiYoIm9iamVjdCI9PXJlfHwiZnVuY3Rpb24iPT1yZSl9KHEpKXJldHVybiExO3ZhciByZT1mdW5jdGlvbiBOKHEpe3JldHVybiBudWxsPT1xP3ZvaWQgMD09PXE/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0i''@;'; put 'put ''OlYmJlYgaW4gT2JqZWN0KHEpP2Z1bmN0aW9uIHoocSl7dmFyIHJlPXguY2FsbChxLFYpLG1lPXFbVl07dHJ5e3FbVl09dm9pZCAwO3ZhciBDZT0hMH1jYXRjaHt9dmFyIEllPVUuY2FsbChxKTtyZXR1cm4gQ2UmJihyZT9xW1ZdPW1lOmRlbGV0ZSBxW1ZdKSxJZX0ocSk6ZnVuY3Rpb24gWShx''@;'; put 'put ''KXtyZXR1cm4gVS5jYWxsKHEpfShxKX0ocSk7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09cmV8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PXJlfHwiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PXJlfHwiW29iamVjdCBQcm94eV0iPT1yZX19LDc0NzMzKGZlKXtmZS5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uIGooaCl7cmV0dXJuIG51bGw9PWh9fSw3MTUxNChmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9TWF0aC5hYnN9LDU4OTY4KGZlKXsidXNlIHN0cmljdCI7ZmUuZXhwb3J0cz1NYXRoLmZsb29yfSw5NDQ1OShmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9TnVtYmVyLmlz''@;'; put 'put ''TmFOfHxmdW5jdGlvbihoKXtyZXR1cm4gaCE9aH19LDYxODgoZmUpeyJ1c2Ugc3RyaWN0IjtmZS5leHBvcnRzPU1hdGgubWF4fSw2ODAwMihmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9TWF0aC5taW59LDc1ODgwKGZlKXsidXNlIHN0cmljdCI7ZmUuZXhwb3J0cz1NYXRoLnBvd30sNzA0''@;'; put 'put ''MTQoZmUpeyJ1c2Ugc3RyaWN0IjtmZS5leHBvcnRzPU1hdGgucm91bmR9LDczMDkzKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoOTQ0NTkpO2ZlLmV4cG9ydHM9ZnVuY3Rpb24ocyl7cmV0dXJuIHkocyl8fDA9PT1zP3M6czwwPy0xOjF9fSw4ODI3NihmZSxqLGgpeyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgeT1oKDU2Njk4KSxjPWgoNDcyOSkscz1oKDkyODYxKS5CdWZmZXIsQT1uZXcgQXJyYXkoMTYpO2Z1bmN0aW9uIHYoKXtjLmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4Nzh9''@;'; put 'put ''ZnVuY3Rpb24gQyh4LFUpe3JldHVybiB4PDxVfHg+Pj4zMi1VfWZ1bmN0aW9uIHcoeCxVLEgsVixOLHosWSl7cmV0dXJuIEMoeCsoVSZIfH5VJlYpK04renwwLFkpK1V8MH1mdW5jdGlvbiBTKHgsVSxILFYsTix6LFkpe3JldHVybiBDKHgrKFUmVnxIJn5WKStOK3p8MCxZKStVfDB9ZnVuY3Rp''@;'; put 'put ''b24gTCh4LFUsSCxWLE4seixZKXtyZXR1cm4gQyh4KyhVXkheVikrTit6fDAsWSkrVXwwfWZ1bmN0aW9uIFIoeCxVLEgsVixOLHosWSl7cmV0dXJuIEMoeCsoSF4oVXx+VikpK04renwwLFkpK1V8MH15KHYsYyksdi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgeD1BLFU9''@;'; put 'put ''MDtVPDE2OysrVSl4W1VdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqVSk7dmFyIEg9dGhpcy5fYSxWPXRoaXMuX2IsTj10aGlzLl9jLHo9dGhpcy5fZDtIPXcoSCxWLE4seix4WzBdLDM2MTQwOTAzNjAsNyksej13KHosSCxWLE4seFsxXSwzOTA1NDAyNzEwLDEyKSxOPXcoTix6LEgsVix4''@;'; put 'put ''WzJdLDYwNjEwNTgxOSwxNyksVj13KFYsTix6LEgseFszXSwzMjUwNDQxOTY2LDIyKSxIPXcoSCxWLE4seix4WzRdLDQxMTg1NDgzOTksNyksej13KHosSCxWLE4seFs1XSwxMjAwMDgwNDI2LDEyKSxOPXcoTix6LEgsVix4WzZdLDI4MjE3MzU5NTUsMTcpLFY9dyhWLE4seixILHhbN10sNDI0''@;'; put 'put ''OTI2MTMxMywyMiksSD13KEgsVixOLHoseFs4XSwxNzcwMDM1NDE2LDcpLHo9dyh6LEgsVixOLHhbOV0sMjMzNjU1Mjg3OSwxMiksTj13KE4seixILFYseFsxMF0sNDI5NDkyNTIzMywxNyksVj13KFYsTix6LEgseFsxMV0sMjMwNDU2MzEzNCwyMiksSD13KEgsVixOLHoseFsxMl0sMTgwNDYw''@;'; put 'put ''MzY4Miw3KSx6PXcoeixILFYsTix4WzEzXSw0MjU0NjI2MTk1LDEyKSxOPXcoTix6LEgsVix4WzE0XSwyNzkyOTY1MDA2LDE3KSxIPVMoSCxWPXcoVixOLHosSCx4WzE1XSwxMjM2NTM1MzI5LDIyKSxOLHoseFsxXSw0MTI5MTcwNzg2LDUpLHo9Uyh6LEgsVixOLHhbNl0sMzIyNTQ2NTY2NCw5''@;'; put 'put ''KSxOPVMoTix6LEgsVix4WzExXSw2NDM3MTc3MTMsMTQpLFY9UyhWLE4seixILHhbMF0sMzkyMTA2OTk5NCwyMCksSD1TKEgsVixOLHoseFs1XSwzNTkzNDA4NjA1LDUpLHo9Uyh6LEgsVixOLHhbMTBdLDM4MDE2MDgzLDkpLE49UyhOLHosSCxWLHhbMTVdLDM2MzQ0ODg5NjEsMTQpLFY9UyhW''@;'; put 'put ''LE4seixILHhbNF0sMzg4OTQyOTQ0OCwyMCksSD1TKEgsVixOLHoseFs5XSw1Njg0NDY0MzgsNSksej1TKHosSCxWLE4seFsxNF0sMzI3NTE2MzYwNiw5KSxOPVMoTix6LEgsVix4WzNdLDQxMDc2MDMzMzUsMTQpLFY9UyhWLE4seixILHhbOF0sMTE2MzUzMTUwMSwyMCksSD1TKEgsVixOLHos''@;'; put 'put ''eFsxM10sMjg1MDI4NTgyOSw1KSx6PVMoeixILFYsTix4WzJdLDQyNDM1NjM1MTIsOSksTj1TKE4seixILFYseFs3XSwxNzM1MzI4NDczLDE0KSxIPUwoSCxWPVMoVixOLHosSCx4WzEyXSwyMzY4MzU5NTYyLDIwKSxOLHoseFs1XSw0Mjk0NTg4NzM4LDQpLHo9TCh6LEgsVixOLHhbOF0sMjI3''@;'; put 'put ''MjM5MjgzMywxMSksTj1MKE4seixILFYseFsxMV0sMTgzOTAzMDU2MiwxNiksVj1MKFYsTix6LEgseFsxNF0sNDI1OTY1Nzc0MCwyMyksSD1MKEgsVixOLHoseFsxXSwyNzYzOTc1MjM2LDQpLHo9TCh6LEgsVixOLHhbNF0sMTI3Mjg5MzM1MywxMSksTj1MKE4seixILFYseFs3XSw0MTM5NDY5''@;'; put 'put ''NjY0LDE2KSxWPUwoVixOLHosSCx4WzEwXSwzMjAwMjM2NjU2LDIzKSxIPUwoSCxWLE4seix4WzEzXSw2ODEyNzkxNzQsNCksej1MKHosSCxWLE4seFswXSwzOTM2NDMwMDc0LDExKSxOPUwoTix6LEgsVix4WzNdLDM1NzI0NDUzMTcsMTYpLFY9TChWLE4seixILHhbNl0sNzYwMjkxODksMjMp''@;'; put 'put ''LEg9TChILFYsTix6LHhbOV0sMzY1NDYwMjgwOSw0KSx6PUwoeixILFYsTix4WzEyXSwzODczMTUxNDYxLDExKSxOPUwoTix6LEgsVix4WzE1XSw1MzA3NDI1MjAsMTYpLEg9UihILFY9TChWLE4seixILHhbMl0sMzI5OTYyODY0NSwyMyksTix6LHhbMF0sNDA5NjMzNjQ1Miw2KSx6PVIoeixI''@;'; put 'put ''LFYsTix4WzddLDExMjY4OTE0MTUsMTApLE49UihOLHosSCxWLHhbMTRdLDI4Nzg2MTIzOTEsMTUpLFY9UihWLE4seixILHhbNV0sNDIzNzUzMzI0MSwyMSksSD1SKEgsVixOLHoseFsxMl0sMTcwMDQ4NTU3MSw2KSx6PVIoeixILFYsTix4WzNdLDIzOTk5ODA2OTAsMTApLE49UihOLHosSCxW''@;'; put 'put ''LHhbMTBdLDQyOTM5MTU3NzMsMTUpLFY9UihWLE4seixILHhbMV0sMjI0MDA0NDQ5NywyMSksSD1SKEgsVixOLHoseFs4XSwxODczMzEzMzU5LDYpLHo9Uih6LEgsVixOLHhbMTVdLDQyNjQzNTU1NTIsMTApLE49UihOLHosSCxWLHhbNl0sMjczNDc2ODkxNiwxNSksVj1SKFYsTix6LEgseFsx''@;'; put 'put ''M10sMTMwOTE1MTY0OSwyMSksSD1SKEgsVixOLHoseFs0XSw0MTQ5NDQ0MjI2LDYpLHo9Uih6LEgsVixOLHhbMTFdLDMxNzQ3NTY5MTcsMTApLE49UihOLHosSCxWLHhbMl0sNzE4Nzg3MjU5LDE1KSxWPVIoVixOLHosSCx4WzldLDM5NTE0ODE3NDUsMjEpLHRoaXMuX2E9dGhpcy5fYStIfDAs''@;'; put 'put ''dGhpcy5fYj10aGlzLl9iK1Z8MCx0aGlzLl9jPXRoaXMuX2MrTnwwLHRoaXMuX2Q9dGhpcy5fZCt6fDB9LHYucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhpcy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5m''@;'; put 'put ''aWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndy''@;'; put 'put ''aXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgeD1zLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4geC53cml0ZUludDMyTEUodGhpcy5fYSwwKSx4LndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLHgud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCkseC53cml0ZUlu''@;'; put 'put ''dDMyTEUodGhpcy5fZCwxMikseH0sZmUuZXhwb3J0cz12fSw1MjI0NChmZSxqLGgpe3ZhciB5PWgoNjExNTgpLGM9aCgxNTAzNyk7ZnVuY3Rpb24gcyhBKXt0aGlzLnJhbmQ9QXx8bmV3IGMuUmFuZH1mZS5leHBvcnRzPXMscy5jcmVhdGU9ZnVuY3Rpb24odil7cmV0dXJuIG5ldyBzKHYpfSxz''@;'; put 'put ''LnByb3RvdHlwZS5fcmFuZGJlbG93PWZ1bmN0aW9uKHYpe3ZhciBDPXYuYml0TGVuZ3RoKCksdz1NYXRoLmNlaWwoQy84KTtkb3t2YXIgUz1uZXcgeSh0aGlzLnJhbmQuZ2VuZXJhdGUodykpfXdoaWxlKFMuY21wKHYpPj0wKTtyZXR1cm4gU30scy5wcm90b3R5cGUuX3JhbmRyYW5nZT1mdW5j''@;'; put 'put ''dGlvbih2LEMpe3ZhciB3PUMuc3ViKHYpO3JldHVybiB2LmFkZCh0aGlzLl9yYW5kYmVsb3codykpfSxzLnByb3RvdHlwZS50ZXN0PWZ1bmN0aW9uKHYsQyx3KXt2YXIgUz12LmJpdExlbmd0aCgpLEw9eS5tb250KHYpLFI9bmV3IHkoMSkudG9SZWQoTCk7Q3x8KEM9TWF0aC5tYXgoMSxTLzQ4''@;'; put 'put ''fDApKTtmb3IodmFyIHg9di5zdWJuKDEpLFU9MDsheC50ZXN0bihVKTtVKyspO2Zvcih2YXIgSD12LnNocm4oVSksVj14LnRvUmVkKEwpO0M+MDtDLS0pe3ZhciB6PXRoaXMuX3JhbmRyYW5nZShuZXcgeSgyKSx4KTt3JiZ3KHopO3ZhciBZPXoudG9SZWQoTCkucmVkUG93KEgpO2lmKDAhPT1Z''@;'; put 'put ''LmNtcChSKSYmMCE9PVkuY21wKFYpKXtmb3IodmFyIEY9MTtGPFU7RisrKXtpZigwPT09KFk9WS5yZWRTcXIoKSkuY21wKFIpKXJldHVybiExO2lmKDA9PT1ZLmNtcChWKSlicmVha31pZihGPT09VSlyZXR1cm4hMX19cmV0dXJuITB9LHMucHJvdG90eXBlLmdldERpdmlzb3I9ZnVuY3Rpb24o''@;'; put 'put ''dixDKXt2YXIgdz12LmJpdExlbmd0aCgpLFM9eS5tb250KHYpLEw9bmV3IHkoMSkudG9SZWQoUyk7Q3x8KEM9TWF0aC5tYXgoMSx3LzQ4fDApKTtmb3IodmFyIFI9di5zdWJuKDEpLHg9MDshUi50ZXN0bih4KTt4KyspO2Zvcih2YXIgVT12LnNocm4oeCksSD1SLnRvUmVkKFMpO0M+MDtDLS0p''@;'; put 'put ''e3ZhciBWPXRoaXMuX3JhbmRyYW5nZShuZXcgeSgyKSxSKSxOPXYuZ2NkKFYpO2lmKDAhPT1OLmNtcG4oMSkpcmV0dXJuIE47dmFyIHo9Vi50b1JlZChTKS5yZWRQb3coVSk7aWYoMCE9PXouY21wKEwpJiYwIT09ei5jbXAoSCkpe2Zvcih2YXIgWT0xO1k8eDtZKyspe2lmKDA9PT0oej16LnJl''@;'; put 'put ''ZFNxcigpKS5jbXAoTCkpcmV0dXJuIHouZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKHYpO2lmKDA9PT16LmNtcChIKSlicmVha31pZihZPT09eClyZXR1cm4oej16LnJlZFNxcigpKS5mcm9tUmVkKCkuc3VibigxKS5nY2Qodil9fXJldHVybiExfX0sNjExNTgoZmUsaixoKXshZnVuY3Rpb24oeSxj''@;'; put 'put ''KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcyhYLGYpe2lmKCFYKXRocm93IG5ldyBFcnJvcihmfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEEoWCxmKXtYLnN1cGVyXz1mO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1mLnByb3RvdHlwZSxYLnByb3RvdHlwZT1uZXcgYixY''@;'; put 'put ''LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1YfWZ1bmN0aW9uIHYoWCxmLGIpe2lmKHYuaXNCTihYKSlyZXR1cm4gWDt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09WCYmKCgibGUiPT09Znx8ImJlIj09PWYpJiYoYj1mLGY9''@;'; put 'put ''MTApLHRoaXMuX2luaXQoWHx8MCxmfHwxMCxifHwiYmUiKSl9dmFyIEM7Im9iamVjdCI9PXR5cGVvZiB5P3kuZXhwb3J0cz12OmMuQk49dix2LkJOPXYsdi53b3JkU2l6ZT0yNjt0cnl7Qz10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6''@;'; put 'put ''aCg2NDY4OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiB3KFgsZil7dmFyIGI9WC5jaGFyQ29kZUF0KGYpO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBTKFgsZixiKXt2YXIgaz13KFgsYik7cmV0dXJuIGItMT49ZiYmKGt8PXco''@;'; put 'put ''WCxiLTEpPDw0KSxrfWZ1bmN0aW9uIEwoWCxmLGIsayl7Zm9yKHZhciBNPTAsQj1NYXRoLm1pbihYLmxlbmd0aCxiKSxLPWY7SzxCO0srKyl7dmFyIEc9WC5jaGFyQ29kZUF0KEspLTQ4O00qPWssTSs9Rz49NDk/Ry00OSsxMDpHPj0xNz9HLTE3KzEwOkd9cmV0dXJuIE19di5pc0JOPWZ1bmN0''@;'; put 'put ''aW9uKGYpe3JldHVybiBmIGluc3RhbmNlb2Ygdnx8bnVsbCE9PWYmJiJvYmplY3QiPT10eXBlb2YgZiYmZi5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXYud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZi53b3Jkcyl9LHYubWF4PWZ1bmN0aW9uKGYsYil7cmV0dXJuIGYuY21wKGIpPjA/ZjpifSx2''@;'; put 'put ''Lm1pbj1mdW5jdGlvbihmLGIpe3JldHVybiBmLmNtcChiKTwwP2Y6Yn0sdi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZixiLGspe2lmKCJudW1iZXIiPT10eXBlb2YgZilyZXR1cm4gdGhpcy5faW5pdE51bWJlcihmLGIsayk7aWYoIm9iamVjdCI9PXR5cGVvZiBmKXJldHVybiB0aGlzLl9p''@;'; put 'put ''bml0QXJyYXkoZixiLGspOyJoZXgiPT09YiYmKGI9MTYpLHMoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIE09MDsiLSI9PT0oZj1mLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKE0rKyx0aGlzLm5lZ2F0aXZlPTEpLE08Zi5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFy''@;'; put 'put ''c2VIZXgoZixNLGspOih0aGlzLl9wYXJzZUJhc2UoZixiLE0pLCJsZSI9PT1rJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYixrKSkpfSx2LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihmLGIsayl7ZjwwJiYodGhpcy5uZWdhdGl2ZT0xLGY9LWYpLGY8NjcxMDg4NjQ/''@;'; put 'put ''KHRoaXMud29yZHM9WzY3MTA4ODYzJmZdLHRoaXMubGVuZ3RoPTEpOmY8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZixmLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToocyhmPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmYs''@;'; put 'put ''Zi82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09ayYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIsayl9LHYucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZixiLGspe2lmKHMoIm51bWJlciI9PXR5cGVvZiBmLmxlbmd0aCksZi5sZW5ndGg8''@;'; put 'put ''PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZi5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTT0wO008dGhpcy5sZW5ndGg7TSsrKXRoaXMud29yZHNbTV09MDt2YXIgQixL''@;'; put 'put ''LEc9MDtpZigiYmUiPT09aylmb3IoTT1mLmxlbmd0aC0xLEI9MDtNPj0wO00tPTMpdGhpcy53b3Jkc1tCXXw9KEs9ZltNXXxmW00tMV08PDh8ZltNLTJdPDwxNik8PEcmNjcxMDg4NjMsdGhpcy53b3Jkc1tCKzFdPUs+Pj4yNi1HJjY3MTA4ODYzLChHKz0yNCk+PTI2JiYoRy09MjYsQisrKTtl''@;'; put 'put ''bHNlIGlmKCJsZSI9PT1rKWZvcihNPTAsQj0wO008Zi5sZW5ndGg7TSs9Myl0aGlzLndvcmRzW0JdfD0oSz1mW01dfGZbTSsxXTw8OHxmW00rMl08PDE2KTw8RyY2NzEwODg2Myx0aGlzLndvcmRzW0IrMV09Sz4+PjI2LUcmNjcxMDg4NjMsKEcrPTI0KT49MjYmJihHLT0yNixCKyspO3JldHVy''@;'; put 'put ''biB0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihmLGIsayl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChmLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBNPTA7TTx0aGlzLmxlbmd0aDtNKyspdGhpcy53b3Jk''@;'; put 'put ''c1tNXT0wO3ZhciBHLEI9MCxLPTA7aWYoImJlIj09PWspZm9yKE09Zi5sZW5ndGgtMTtNPj1iO00tPTIpRz1TKGYsYixNKTw8Qix0aGlzLndvcmRzW0tdfD02NzEwODg2MyZHLEI+PTE4PyhCLT0xOCx0aGlzLndvcmRzW0srPTFdfD1HPj4+MjYpOkIrPTg7ZWxzZSBmb3IoTT0oZi5sZW5ndGgt''@;'; put 'put ''YiklMj09MD9iKzE6YjtNPGYubGVuZ3RoO00rPTIpRz1TKGYsYixNKTw8Qix0aGlzLndvcmRzW0tdfD02NzEwODg2MyZHLEI+PTE4PyhCLT0xOCx0aGlzLndvcmRzW0srPTFdfD1HPj4+MjYpOkIrPTg7dGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGYsYixr''@;'; put 'put ''KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgTT0wLEI9MTtCPD02NzEwODg2MztCKj1iKU0rKztNLS0sQj1CL2J8MDtmb3IodmFyIEs9Zi5sZW5ndGgtayxHPUslTSxEPU1hdGgubWluKEssSy1HKStrLHA9MCxJPWs7STxEO0krPU0pcD1MKGYsSSxJK00sYiksdGhpcy5p''@;'; put 'put ''bXVsbihCKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRkbihwKTtpZigwIT09Ryl7dmFyIHVlPTE7Zm9yKHA9TChmLEksZi5sZW5ndGgsYiksST0wO0k8RztJKyspdWUqPWI7dGhpcy5pbXVsbih1ZSksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0''@;'; put 'put ''P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCl9dGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGYpe2Yud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylmLndvcmRzW2JdPXRoaXMud29yZHNbYl07Zi5s''@;'; put 'put ''ZW5ndGg9dGhpcy5sZW5ndGgsZi5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGYucmVkPXRoaXMucmVkfSx2LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBmPW5ldyB2KG51bGwpO3JldHVybiB0aGlzLmNvcHkoZiksZn0sdi5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihmKXtmb3Io''@;'; put 'put ''O3RoaXMubGVuZ3RoPGY7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdi5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9u''@;'; put 'put ''b3JtU2lnbigpfSx2LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6''@;'; put 'put ''ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgUj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSx4PVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2''@;'; put 'put ''LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFU9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3''@;'; put 'put ''NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2''@;'; put 'put ''MDQ2NjE3Nl07ZnVuY3Rpb24gVihYLGYsYil7Yi5uZWdhdGl2ZT1mLm5lZ2F0aXZlXlgubmVnYXRpdmU7dmFyIGs9WC5sZW5ndGgrZi5sZW5ndGh8MDtiLmxlbmd0aD1rLGs9ay0xfDA7dmFyIE09MHxYLndvcmRzWzBdLEI9MHxmLndvcmRzWzBdLEs9TSpCLEQ9Sy82NzEwODg2NHwwO2Iud29y''@;'; put 'put ''ZHNbMF09NjcxMDg4NjMmSztmb3IodmFyIHA9MTtwPGs7cCsrKXtmb3IodmFyIEk9RD4+PjI2LHVlPTY3MTA4ODYzJkQsbmU9TWF0aC5taW4ocCxmLmxlbmd0aC0xKSxfZT1NYXRoLm1heCgwLHAtWC5sZW5ndGgrMSk7X2U8PW5lO19lKyspSSs9KEs9KE09MHxYLndvcmRzW3AtX2V8MF0pKihC''@;'; put 'put ''PTB8Zi53b3Jkc1tfZV0pK3VlKS82NzEwODg2NHwwLHVlPTY3MTA4ODYzJks7Yi53b3Jkc1twXT0wfHVlLEQ9MHxJfXJldHVybiAwIT09RD9iLndvcmRzW3BdPTB8RDpiLmxlbmd0aC0tLGIuc3RyaXAoKX12LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihmLGIpe3ZhciBrO2lmKGI9MHxi''@;'; put 'put ''fHwxLDE2PT09KGY9Znx8MTApfHwiaGV4Ij09PWYpe2s9IiI7Zm9yKHZhciBNPTAsQj0wLEs9MDtLPHRoaXMubGVuZ3RoO0srKyl7dmFyIEc9dGhpcy53b3Jkc1tLXSxEPSgxNjc3NzIxNSYoRzw8TXxCKSkudG9TdHJpbmcoMTYpO0I9Rz4+PjI0LU0mMTY3NzcyMTUsKE0rPTIpPj0yNiYmKE0t''@;'; put 'put ''PTI2LEstLSksaz0wIT09Qnx8SyE9PXRoaXMubGVuZ3RoLTE/Uls2LUQubGVuZ3RoXStEK2s6RCtrfWZvcigwIT09QiYmKGs9Qi50b1N0cmluZygxNikrayk7ay5sZW5ndGglYiE9PTA7KWs9IjAiK2s7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoaz0iLSIrayksa31pZihmPT09KDB8Zikm''@;'; put 'put ''JmY+PTImJmY8PTM2KXt2YXIgcD14W2ZdLEk9VVtmXTtrPSIiO3ZhciB1ZT10aGlzLmNsb25lKCk7Zm9yKHVlLm5lZ2F0aXZlPTA7IXVlLmlzWmVybygpOyl7dmFyIG5lPXVlLm1vZG4oSSkudG9TdHJpbmcoZik7az0odWU9dWUuaWRpdm4oSSkpLmlzWmVybygpP25lK2s6UltwLW5lLmxlbmd0''@;'; put 'put ''aF0rbmUra31mb3IodGhpcy5pc1plcm8oKSYmKGs9IjAiK2spO2subGVuZ3RoJWIhPT0wOylrPSIwIitrO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKGs9Ii0iK2spLGt9cyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx2LnByb3RvdHlwZS50b051bWJlcj1mdW5j''@;'; put 'put ''dGlvbigpe3ZhciBmPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9mKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zis9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3Ro''@;'; put 'put ''PjImJnMoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1mOmZ9LHYucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdi5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24o''@;'; put 'put ''ZixiKXtyZXR1cm4gcyh0eXBlb2YgQzwidSIpLHRoaXMudG9BcnJheUxpa2UoQyxmLGIpfSx2LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGYsYil7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZixiKX0sdi5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZixiLGspe3Zh''@;'; put 'put ''ciBNPXRoaXMuYnl0ZUxlbmd0aCgpLEI9a3x8TWF0aC5tYXgoMSxNKTtzKE08PUIsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxzKEI+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBELHAsSz0ibGUiPT09YixHPW5ldyBm''@;'; put 'put ''KEIpLEk9dGhpcy5jbG9uZSgpO2lmKEspe2ZvcihwPTA7IUkuaXNaZXJvKCk7cCsrKUQ9SS5hbmRsbigyNTUpLEkuaXVzaHJuKDgpLEdbcF09RDtmb3IoO3A8QjtwKyspR1twXT0wfWVsc2V7Zm9yKHA9MDtwPEItTTtwKyspR1twXT0wO2ZvcihwPTA7IUkuaXNaZXJvKCk7cCsrKUQ9SS5hbmRs''@;'; put 'put ''bigyNTUpLEkuaXVzaHJuKDgpLEdbQi1wLTFdPUR9cmV0dXJuIEd9LHYucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihmKXtyZXR1cm4gMzItTWF0aC5jbHozMihmKX06ZnVuY3Rpb24oZil7dmFyIGI9ZixrPTA7cmV0dXJuIGI+PTQwOTYmJihrKz0xMyxiPj4+PTEz''@;'; put 'put ''KSxiPj02NCYmKGsrPTcsYj4+Pj03KSxiPj04JiYoays9NCxiPj4+PTQpLGI+PTImJihrKz0yLGI+Pj49MiksaytifSx2LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZil7aWYoMD09PWYpcmV0dXJuIDI2O3ZhciBiPWYsaz0wO3JldHVybiEoODE5MSZiKSYmKGsrPTEzLGI+Pj49MTMp''@;'; put 'put ''LCEoMTI3JmIpJiYoays9NyxiPj4+PTcpLCEoMTUmYikmJihrKz00LGI+Pj49NCksISgzJmIpJiYoays9MixiPj4+PTIpLCEoMSZiKSYmaysrLGt9LHYucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBiPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFd''@;'; put 'put ''KTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2J9LHYucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGY9MCxiPTA7Yjx0aGlzLmxlbmd0aDtiKyspe3ZhciBrPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbYl0pO2lmKGYr''@;'; put 'put ''PWssMjYhPT1rKWJyZWFrfXJldHVybiBmfSx2LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx2LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZil7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCku''@;'; put 'put ''aW5vdG4oZikuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx2LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy50ZXN0bihmLTEpP3RoaXMubm90bihmKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx2LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biAwIT09dGhpcy5uZWdhdGl2ZX0sdi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHYucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHYucHJvdG90eXBlLml1''@;'; put 'put ''b3I9ZnVuY3Rpb24oZil7Zm9yKDt0aGlzLmxlbmd0aDxmLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgYj0wO2I8Zi5sZW5ndGg7YisrKXRoaXMud29yZHNbYl09dGhpcy53b3Jkc1tiXXxmLndvcmRzW2JdO3JldHVybiB0aGlzLnN0cmlwKCl9LHYucHJvdG90''@;'; put 'put ''eXBlLmlvcj1mdW5jdGlvbihmKXtyZXR1cm4gcygwPT09KHRoaXMubmVnYXRpdmV8Zi5uZWdhdGl2ZSkpLHRoaXMuaXVvcihmKX0sdi5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMubGVuZ3RoPmYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZik6Zi5jbG9uZSgpLmlvcih0''@;'; put 'put ''aGlzKX0sdi5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmxlbmd0aD5mLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihmKTpmLmNsb25lKCkuaXVvcih0aGlzKX0sdi5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZil7dmFyIGI7Yj10aGlzLmxlbmd0aD5mLmxlbmd0aD9m''@;'; put 'put ''OnRoaXM7Zm9yKHZhciBrPTA7azxiLmxlbmd0aDtrKyspdGhpcy53b3Jkc1trXT10aGlzLndvcmRzW2tdJmYud29yZHNba107cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihmKXtyZXR1cm4gcygwPT09KHRoaXMubmVn''@;'; put 'put ''YXRpdmV8Zi5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZil9LHYucHJvdG90eXBlLmFuZD1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZik6Zi5jbG9uZSgpLmlhbmQodGhpcyl9LHYucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZil7cmV0''@;'; put 'put ''dXJuIHRoaXMubGVuZ3RoPmYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChmKTpmLmNsb25lKCkuaXVhbmQodGhpcyl9LHYucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGYpe3ZhciBiLGs7dGhpcy5sZW5ndGg+Zi5sZW5ndGg/KGI9dGhpcyxrPWYpOihiPWYsaz10aGlzKTtmb3IodmFyIE09''@;'; put 'put ''MDtNPGsubGVuZ3RoO00rKyl0aGlzLndvcmRzW01dPWIud29yZHNbTV1eay53b3Jkc1tNXTtpZih0aGlzIT09Yilmb3IoO008Yi5sZW5ndGg7TSsrKXRoaXMud29yZHNbTV09Yi53b3Jkc1tNXTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5p''@;'; put 'put ''eG9yPWZ1bmN0aW9uKGYpe3JldHVybiBzKDA9PT0odGhpcy5uZWdhdGl2ZXxmLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihmKX0sdi5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmxlbmd0aD5mLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihmKTpmLmNsb25lKCkuaXhvcih0''@;'; put 'put ''aGlzKX0sdi5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGYpOmYuY2xvbmUoKS5pdXhvcih0aGlzKX0sdi5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZil7cygibnVtYmVyIj09dHlwZW9mIGYmJmY+PTAp''@;'; put 'put ''O3ZhciBiPTB8TWF0aC5jZWlsKGYvMjYpLGs9ZiUyNjt0aGlzLl9leHBhbmQoYiksaz4wJiZiLS07Zm9yKHZhciBNPTA7TTxiO00rKyl0aGlzLndvcmRzW01dPTY3MTA4ODYzJn50aGlzLndvcmRzW01dO2ZvcihrPjAmJih0aGlzLndvcmRzW01dPX50aGlzLndvcmRzW01dJjY3MTA4ODYzPj4y''@;'; put 'put ''Ni1rLE0rKyk7TTx0aGlzLmxlbmd0aDtNKyspdGhpcy53b3Jkc1tNXT0wO3JldHVybiB0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihmKX0sdi5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihmLGIpe3MoIm51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBmJiZmPj0wKTt2YXIgaz1mLzI2fDAsTT1mJTI2O3JldHVybiB0aGlzLl9leHBhbmQoaysxKSx0aGlzLndvcmRzW2tdPWI/dGhpcy53b3Jkc1trXXwxPDxNOnRoaXMud29yZHNba10mfigxPDxNKSx0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZil7dmFy''@;'; put 'put ''IGIsayxNO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zi5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKGYpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWYubmVnYXRpdmUpcmV0dXJuIGYubmVn''@;'; put 'put ''YXRpdmU9MCxiPXRoaXMuaXN1YihmKSxmLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5mLmxlbmd0aD8oaz10aGlzLE09Zik6KGs9ZixNPXRoaXMpO2Zvcih2YXIgQj0wLEs9MDtLPE0ubGVuZ3RoO0srKyl0aGlzLndvcmRzW0tdPTY3MTA4ODYzJihiPSgwfGsud29yZHNb''@;'; put 'put ''S10pKygwfE0ud29yZHNbS10pK0IpLEI9Yj4+PjI2O2Zvcig7MCE9PUImJks8ay5sZW5ndGg7SysrKXRoaXMud29yZHNbS109NjcxMDg4NjMmKGI9KDB8ay53b3Jkc1tLXSkrQiksQj1iPj4+MjY7aWYodGhpcy5sZW5ndGg9ay5sZW5ndGgsMCE9PUIpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09''@;'; put 'put ''Qix0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoayE9PXRoaXMpZm9yKDtLPGsubGVuZ3RoO0srKyl0aGlzLndvcmRzW0tdPWsud29yZHNbS107cmV0dXJuIHRoaXN9LHYucHJvdG90eXBlLmFkZD1mdW5jdGlvbihmKXt2YXIgYjtyZXR1cm4gMCE9PWYubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZl''@;'; put 'put ''PyhmLm5lZ2F0aXZlPTAsYj10aGlzLnN1YihmKSxmLm5lZ2F0aXZlXj0xLGIpOjA9PT1mLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGI9Zi5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGIpOnRoaXMubGVuZ3RoPmYubGVuZ3RoP3RoaXMuY2xvbmUoKS5p''@;'; put 'put ''YWRkKGYpOmYuY2xvbmUoKS5pYWRkKHRoaXMpfSx2LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGYpe2lmKDAhPT1mLm5lZ2F0aXZlKXtmLm5lZ2F0aXZlPTA7dmFyIGI9dGhpcy5pYWRkKGYpO3JldHVybiBmLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSly''@;'; put 'put ''ZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChmKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgTSxCLGs9dGhpcy5jbXAoZik7aWYoMD09PWspcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO2s+MD8oTT10''@;'; put 'put ''aGlzLEI9Zik6KE09ZixCPXRoaXMpO2Zvcih2YXIgSz0wLEc9MDtHPEIubGVuZ3RoO0crKylLPShiPSgwfE0ud29yZHNbR10pLSgwfEIud29yZHNbR10pK0spPj4yNix0aGlzLndvcmRzW0ddPTY3MTA4ODYzJmI7Zm9yKDswIT09SyYmRzxNLmxlbmd0aDtHKyspSz0oYj0oMHxNLndvcmRzW0dd''@;'; put 'put ''KStLKT4+MjYsdGhpcy53b3Jkc1tHXT02NzEwODg2MyZiO2lmKDA9PT1LJiZHPE0ubGVuZ3RoJiZNIT09dGhpcylmb3IoO0c8TS5sZW5ndGg7RysrKXRoaXMud29yZHNbR109TS53b3Jkc1tHXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsRyksTSE9PXRoaXMmJih0''@;'; put 'put ''aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihmKX07dmFyIE49ZnVuY3Rpb24oZixiLGspe3ZhciBELHAsSSxNPWYud29yZHMsQj1iLndvcmRzLEs9ay53b3JkcyxHPTAsdWU9MHxNWzBdLG5l''@;'; put 'put ''PTgxOTEmdWUsX2U9dWU+Pj4xMyxQZT0wfE1bMV0sb3Q9ODE5MSZQZSxsdD1QZT4+PjEzLGR0PTB8TVsyXSxSZT04MTkxJmR0LGFlPWR0Pj4+MTMseGU9MHxNWzNdLGplPTgxOTEmeGUsQWU9eGU+Pj4xMyxEZT0wfE1bNF0sRmU9ODE5MSZEZSxnZT1EZT4+PjEzLGNlPTB8TVs1XSxoZT04MTkx''@;'; put 'put ''JmNlLHdlPWNlPj4+MTMsSmU9MHxNWzZdLHR0PTgxOTEmSmUsS2U9SmU+Pj4xMywkdD0wfE1bN10sUnQ9ODE5MSYkdCxMdD0kdD4+PjEzLEd0PTB8TVs4XSxndD04MTkxJkd0LFh0PUd0Pj4+MTMsTHI9MHxNWzldLGxuPTgxOTEmTHIsT249THI+Pj4xMyxRcj0wfEJbMF0sdHI9ODE5MSZRcixI''@;'; put 'put ''bj1Rcj4+PjEzLE9vPTB8QlsxXSx1cj04MTkxJk9vLFpuPU9vPj4+MTMsU249MHxCWzJdLHhyPTgxOTEmU24sVHQ9U24+Pj4xMyxBcj0wfEJbM10sX249ODE5MSZBcixadD1Bcj4+PjEzLE5uPTB8Qls0XSxwdD04MTkxJk5uLHBuPU5uPj4+MTMsTWk9MHxCWzVdLEdlPTgxOTEmTWksVXQ9TWk+''@;'; put 'put ''Pj4xMyx2cj0wfEJbNl0seHQ9ODE5MSZ2cixCdD12cj4+PjEzLHpuPTB8Qls3XSxHbj04MTkxJnpuLHluPXpuPj4+MTMsdmk9MHxCWzhdLHJyPTgxOTEmdmksaHI9dmk+Pj4xMyxwbz0wfEJbOV0sdm49ODE5MSZwbyxCbj1wbz4+PjEzO2submVnYXRpdmU9Zi5uZWdhdGl2ZV5iLm5lZ2F0aXZl''@;'; put 'put ''LGsubGVuZ3RoPTE5O3ZhciBqYT0oRysoRD1NYXRoLmltdWwobmUsdHIpKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKG5lLEhuKSkrTWF0aC5pbXVsKF9lLHRyKXwwKSk8PDEzKXwwO0c9KChJPU1hdGguaW11bChfZSxIbikpKyhwPj4+MTMpfDApKyhqYT4+PjI2KXwwLGphJj02NzEwODg2''@;'; put 'put ''MyxEPU1hdGguaW11bChvdCx0cikscD0ocD1NYXRoLmltdWwob3QsSG4pKStNYXRoLmltdWwobHQsdHIpfDAsST1NYXRoLmltdWwobHQsSG4pO3ZhciBqbz0oRysoRD1EK01hdGguaW11bChuZSx1cil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLFpuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''X2UsdXIpfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoX2UsWm4pfDApKyhwPj4+MTMpfDApKyhqbz4+PjI2KXwwLGpvJj02NzEwODg2MyxEPU1hdGguaW11bChSZSx0cikscD0ocD1NYXRoLmltdWwoUmUsSG4pKStNYXRoLmltdWwoYWUsdHIpfDAsST1NYXRoLmltdWwoYWUsSG4pLEQ9''@;'; put 'put ''RCtNYXRoLmltdWwob3QsdXIpfDAscD0ocD1wK01hdGguaW11bChvdCxabil8MCkrTWF0aC5pbXVsKGx0LHVyKXwwLEk9SStNYXRoLmltdWwobHQsWm4pfDA7dmFyIFhyPShHKyhEPUQrTWF0aC5pbXVsKG5lLHhyKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsVHQpfDApK01h''@;'; put 'put ''dGguaW11bChfZSx4cil8MCkpPDwxMyl8MDtHPSgoST1JK01hdGguaW11bChfZSxUdCl8MCkrKHA+Pj4xMyl8MCkrKFhyPj4+MjYpfDAsWHImPTY3MTA4ODYzLEQ9TWF0aC5pbXVsKGplLHRyKSxwPShwPU1hdGguaW11bChqZSxIbikpK01hdGguaW11bChBZSx0cil8MCxJPU1hdGguaW11bChB''@;'; put 'put ''ZSxIbiksRD1EK01hdGguaW11bChSZSx1cil8MCxwPShwPXArTWF0aC5pbXVsKFJlLFpuKXwwKStNYXRoLmltdWwoYWUsdXIpfDAsST1JK01hdGguaW11bChhZSxabil8MCxEPUQrTWF0aC5pbXVsKG90LHhyKXwwLHA9KHA9cCtNYXRoLmltdWwob3QsVHQpfDApK01hdGguaW11bChsdCx4cil8''@;'; put 'put ''MCxJPUkrTWF0aC5pbXVsKGx0LFR0KXwwO3ZhciBlYT0oRysoRD1EK01hdGguaW11bChuZSxfbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLFp0KXwwKStNYXRoLmltdWwoX2UsX24pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoX2UsWnQpfDApKyhwPj4+MTMpfDAp''@;'; put 'put ''KyhlYT4+PjI2KXwwLGVhJj02NzEwODg2MyxEPU1hdGguaW11bChGZSx0cikscD0ocD1NYXRoLmltdWwoRmUsSG4pKStNYXRoLmltdWwoZ2UsdHIpfDAsST1NYXRoLmltdWwoZ2UsSG4pLEQ9RCtNYXRoLmltdWwoamUsdXIpfDAscD0ocD1wK01hdGguaW11bChqZSxabil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEFlLHVyKXwwLEk9SStNYXRoLmltdWwoQWUsWm4pfDAsRD1EK01hdGguaW11bChSZSx4cil8MCxwPShwPXArTWF0aC5pbXVsKFJlLFR0KXwwKStNYXRoLmltdWwoYWUseHIpfDAsST1JK01hdGguaW11bChhZSxUdCl8MCxEPUQrTWF0aC5pbXVsKG90LF9uKXwwLHA9KHA9cCtNYXRoLmltdWwo''@;'; put 'put ''b3QsWnQpfDApK01hdGguaW11bChsdCxfbil8MCxJPUkrTWF0aC5pbXVsKGx0LFp0KXwwO3ZhciByYT0oRysoRD1EK01hdGguaW11bChuZSxwdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHBuKXwwKStNYXRoLmltdWwoX2UscHQpfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRo''@;'; put 'put ''LmltdWwoX2UscG4pfDApKyhwPj4+MTMpfDApKyhyYT4+PjI2KXwwLHJhJj02NzEwODg2MyxEPU1hdGguaW11bChoZSx0cikscD0ocD1NYXRoLmltdWwoaGUsSG4pKStNYXRoLmltdWwod2UsdHIpfDAsST1NYXRoLmltdWwod2UsSG4pLEQ9RCtNYXRoLmltdWwoRmUsdXIpfDAscD0ocD1wK01h''@;'; put 'put ''dGguaW11bChGZSxabil8MCkrTWF0aC5pbXVsKGdlLHVyKXwwLEk9SStNYXRoLmltdWwoZ2UsWm4pfDAsRD1EK01hdGguaW11bChqZSx4cil8MCxwPShwPXArTWF0aC5pbXVsKGplLFR0KXwwKStNYXRoLmltdWwoQWUseHIpfDAsST1JK01hdGguaW11bChBZSxUdCl8MCxEPUQrTWF0aC5pbXVs''@;'; put 'put ''KFJlLF9uKXwwLHA9KHA9cCtNYXRoLmltdWwoUmUsWnQpfDApK01hdGguaW11bChhZSxfbil8MCxJPUkrTWF0aC5pbXVsKGFlLFp0KXwwLEQ9RCtNYXRoLmltdWwob3QscHQpfDAscD0ocD1wK01hdGguaW11bChvdCxwbil8MCkrTWF0aC5pbXVsKGx0LHB0KXwwLEk9SStNYXRoLmltdWwobHQs''@;'; put 'put ''cG4pfDA7dmFyIGNhPShHKyhEPUQrTWF0aC5pbXVsKG5lLEdlKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsVXQpfDApK01hdGguaW11bChfZSxHZSl8MCkpPDwxMyl8MDtHPSgoST1JK01hdGguaW11bChfZSxVdCl8MCkrKHA+Pj4xMyl8MCkrKGNhPj4+MjYpfDAsY2EmPTY3''@;'; put 'put ''MTA4ODYzLEQ9TWF0aC5pbXVsKHR0LHRyKSxwPShwPU1hdGguaW11bCh0dCxIbikpK01hdGguaW11bChLZSx0cil8MCxJPU1hdGguaW11bChLZSxIbiksRD1EK01hdGguaW11bChoZSx1cil8MCxwPShwPXArTWF0aC5pbXVsKGhlLFpuKXwwKStNYXRoLmltdWwod2UsdXIpfDAsST1JK01hdGgu''@;'; put 'put ''aW11bCh3ZSxabil8MCxEPUQrTWF0aC5pbXVsKEZlLHhyKXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsVHQpfDApK01hdGguaW11bChnZSx4cil8MCxJPUkrTWF0aC5pbXVsKGdlLFR0KXwwLEQ9RCtNYXRoLmltdWwoamUsX24pfDAscD0ocD1wK01hdGguaW11bChqZSxadCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEFlLF9uKXwwLEk9SStNYXRoLmltdWwoQWUsWnQpfDAsRD1EK01hdGguaW11bChSZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLHBuKXwwKStNYXRoLmltdWwoYWUscHQpfDAsST1JK01hdGguaW11bChhZSxwbil8MCxEPUQrTWF0aC5pbXVsKG90LEdlKXwwLHA9KHA9cCtNYXRoLmltdWwo''@;'; put 'put ''b3QsVXQpfDApK01hdGguaW11bChsdCxHZSl8MCxJPUkrTWF0aC5pbXVsKGx0LFV0KXwwO3ZhciBDaT0oRysoRD1EK01hdGguaW11bChuZSx4dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLEJ0KXwwKStNYXRoLmltdWwoX2UseHQpfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRo''@;'; put 'put ''LmltdWwoX2UsQnQpfDApKyhwPj4+MTMpfDApKyhDaT4+PjI2KXwwLENpJj02NzEwODg2MyxEPU1hdGguaW11bChSdCx0cikscD0ocD1NYXRoLmltdWwoUnQsSG4pKStNYXRoLmltdWwoTHQsdHIpfDAsST1NYXRoLmltdWwoTHQsSG4pLEQ9RCtNYXRoLmltdWwodHQsdXIpfDAscD0ocD1wK01h''@;'; put 'put ''dGguaW11bCh0dCxabil8MCkrTWF0aC5pbXVsKEtlLHVyKXwwLEk9SStNYXRoLmltdWwoS2UsWm4pfDAsRD1EK01hdGguaW11bChoZSx4cil8MCxwPShwPXArTWF0aC5pbXVsKGhlLFR0KXwwKStNYXRoLmltdWwod2UseHIpfDAsST1JK01hdGguaW11bCh3ZSxUdCl8MCxEPUQrTWF0aC5pbXVs''@;'; put 'put ''KEZlLF9uKXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsWnQpfDApK01hdGguaW11bChnZSxfbil8MCxJPUkrTWF0aC5pbXVsKGdlLFp0KXwwLEQ9RCtNYXRoLmltdWwoamUscHQpfDAscD0ocD1wK01hdGguaW11bChqZSxwbil8MCkrTWF0aC5pbXVsKEFlLHB0KXwwLEk9SStNYXRoLmltdWwoQWUs''@;'; put 'put ''cG4pfDAsRD1EK01hdGguaW11bChSZSxHZSl8MCxwPShwPXArTWF0aC5pbXVsKFJlLFV0KXwwKStNYXRoLmltdWwoYWUsR2UpfDAsST1JK01hdGguaW11bChhZSxVdCl8MCxEPUQrTWF0aC5pbXVsKG90LHh0KXwwLHA9KHA9cCtNYXRoLmltdWwob3QsQnQpfDApK01hdGguaW11bChsdCx4dCl8''@;'; put 'put ''MCxJPUkrTWF0aC5pbXVsKGx0LEJ0KXwwO3ZhciBobz0oRysoRD1EK01hdGguaW11bChuZSxHbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHluKXwwKStNYXRoLmltdWwoX2UsR24pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoX2UseW4pfDApKyhwPj4+MTMpfDAp''@;'; put 'put ''Kyhobz4+PjI2KXwwLGhvJj02NzEwODg2MyxEPU1hdGguaW11bChndCx0cikscD0ocD1NYXRoLmltdWwoZ3QsSG4pKStNYXRoLmltdWwoWHQsdHIpfDAsST1NYXRoLmltdWwoWHQsSG4pLEQ9RCtNYXRoLmltdWwoUnQsdXIpfDAscD0ocD1wK01hdGguaW11bChSdCxabil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEx0LHVyKXwwLEk9SStNYXRoLmltdWwoTHQsWm4pfDAsRD1EK01hdGguaW11bCh0dCx4cil8MCxwPShwPXArTWF0aC5pbXVsKHR0LFR0KXwwKStNYXRoLmltdWwoS2UseHIpfDAsST1JK01hdGguaW11bChLZSxUdCl8MCxEPUQrTWF0aC5pbXVsKGhlLF9uKXwwLHA9KHA9cCtNYXRoLmltdWwo''@;'; put 'put ''aGUsWnQpfDApK01hdGguaW11bCh3ZSxfbil8MCxJPUkrTWF0aC5pbXVsKHdlLFp0KXwwLEQ9RCtNYXRoLmltdWwoRmUscHQpfDAscD0ocD1wK01hdGguaW11bChGZSxwbil8MCkrTWF0aC5pbXVsKGdlLHB0KXwwLEk9SStNYXRoLmltdWwoZ2UscG4pfDAsRD1EK01hdGguaW11bChqZSxHZSl8''@;'; put 'put ''MCxwPShwPXArTWF0aC5pbXVsKGplLFV0KXwwKStNYXRoLmltdWwoQWUsR2UpfDAsST1JK01hdGguaW11bChBZSxVdCl8MCxEPUQrTWF0aC5pbXVsKFJlLHh0KXwwLHA9KHA9cCtNYXRoLmltdWwoUmUsQnQpfDApK01hdGguaW11bChhZSx4dCl8MCxJPUkrTWF0aC5pbXVsKGFlLEJ0KXwwLEQ9''@;'; put 'put ''RCtNYXRoLmltdWwob3QsR24pfDAscD0ocD1wK01hdGguaW11bChvdCx5bil8MCkrTWF0aC5pbXVsKGx0LEduKXwwLEk9SStNYXRoLmltdWwobHQseW4pfDA7dmFyIE1hPShHKyhEPUQrTWF0aC5pbXVsKG5lLHJyKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsaHIpfDApK01h''@;'; put 'put ''dGguaW11bChfZSxycil8MCkpPDwxMyl8MDtHPSgoST1JK01hdGguaW11bChfZSxocil8MCkrKHA+Pj4xMyl8MCkrKE1hPj4+MjYpfDAsTWEmPTY3MTA4ODYzLEQ9TWF0aC5pbXVsKGxuLHRyKSxwPShwPU1hdGguaW11bChsbixIbikpK01hdGguaW11bChPbix0cil8MCxJPU1hdGguaW11bChP''@;'; put 'put ''bixIbiksRD1EK01hdGguaW11bChndCx1cil8MCxwPShwPXArTWF0aC5pbXVsKGd0LFpuKXwwKStNYXRoLmltdWwoWHQsdXIpfDAsST1JK01hdGguaW11bChYdCxabil8MCxEPUQrTWF0aC5pbXVsKFJ0LHhyKXwwLHA9KHA9cCtNYXRoLmltdWwoUnQsVHQpfDApK01hdGguaW11bChMdCx4cil8''@;'; put 'put ''MCxJPUkrTWF0aC5pbXVsKEx0LFR0KXwwLEQ9RCtNYXRoLmltdWwodHQsX24pfDAscD0ocD1wK01hdGguaW11bCh0dCxadCl8MCkrTWF0aC5pbXVsKEtlLF9uKXwwLEk9SStNYXRoLmltdWwoS2UsWnQpfDAsRD1EK01hdGguaW11bChoZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKGhlLHBuKXww''@;'; put 'put ''KStNYXRoLmltdWwod2UscHQpfDAsST1JK01hdGguaW11bCh3ZSxwbil8MCxEPUQrTWF0aC5pbXVsKEZlLEdlKXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsVXQpfDApK01hdGguaW11bChnZSxHZSl8MCxJPUkrTWF0aC5pbXVsKGdlLFV0KXwwLEQ9RCtNYXRoLmltdWwoamUseHQpfDAscD0ocD1w''@;'; put 'put ''K01hdGguaW11bChqZSxCdCl8MCkrTWF0aC5pbXVsKEFlLHh0KXwwLEk9SStNYXRoLmltdWwoQWUsQnQpfDAsRD1EK01hdGguaW11bChSZSxHbil8MCxwPShwPXArTWF0aC5pbXVsKFJlLHluKXwwKStNYXRoLmltdWwoYWUsR24pfDAsST1JK01hdGguaW11bChhZSx5bil8MCxEPUQrTWF0aC5p''@;'; put 'put ''bXVsKG90LHJyKXwwLHA9KHA9cCtNYXRoLmltdWwob3QsaHIpfDApK01hdGguaW11bChsdCxycil8MCxJPUkrTWF0aC5pbXVsKGx0LGhyKXwwO3ZhciBrcz0oRysoRD1EK01hdGguaW11bChuZSx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLEJuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''X2Usdm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoX2UsQm4pfDApKyhwPj4+MTMpfDApKyhrcz4+PjI2KXwwLGtzJj02NzEwODg2MyxEPU1hdGguaW11bChsbix1cikscD0ocD1NYXRoLmltdWwobG4sWm4pKStNYXRoLmltdWwoT24sdXIpfDAsST1NYXRoLmltdWwoT24sWm4pLEQ9''@;'; put 'put ''RCtNYXRoLmltdWwoZ3QseHIpfDAscD0ocD1wK01hdGguaW11bChndCxUdCl8MCkrTWF0aC5pbXVsKFh0LHhyKXwwLEk9SStNYXRoLmltdWwoWHQsVHQpfDAsRD1EK01hdGguaW11bChSdCxfbil8MCxwPShwPXArTWF0aC5pbXVsKFJ0LFp0KXwwKStNYXRoLmltdWwoTHQsX24pfDAsST1JK01h''@;'; put 'put ''dGguaW11bChMdCxadCl8MCxEPUQrTWF0aC5pbXVsKHR0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwodHQscG4pfDApK01hdGguaW11bChLZSxwdCl8MCxJPUkrTWF0aC5pbXVsKEtlLHBuKXwwLEQ9RCtNYXRoLmltdWwoaGUsR2UpfDAscD0ocD1wK01hdGguaW11bChoZSxVdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKHdlLEdlKXwwLEk9SStNYXRoLmltdWwod2UsVXQpfDAsRD1EK01hdGguaW11bChGZSx4dCl8MCxwPShwPXArTWF0aC5pbXVsKEZlLEJ0KXwwKStNYXRoLmltdWwoZ2UseHQpfDAsST1JK01hdGguaW11bChnZSxCdCl8MCxEPUQrTWF0aC5pbXVsKGplLEduKXwwLHA9KHA9cCtNYXRoLmlt''@;'; put 'put ''dWwoamUseW4pfDApK01hdGguaW11bChBZSxHbil8MCxJPUkrTWF0aC5pbXVsKEFlLHluKXwwLEQ9RCtNYXRoLmltdWwoUmUscnIpfDAscD0ocD1wK01hdGguaW11bChSZSxocil8MCkrTWF0aC5pbXVsKGFlLHJyKXwwLEk9SStNYXRoLmltdWwoYWUsaHIpfDA7dmFyIEJpPShHKyhEPUQrTWF0''@;'; put 'put ''aC5pbXVsKG90LHZuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwob3QsQm4pfDApK01hdGguaW11bChsdCx2bil8MCkpPDwxMyl8MDtHPSgoST1JK01hdGguaW11bChsdCxCbil8MCkrKHA+Pj4xMyl8MCkrKEJpPj4+MjYpfDAsQmkmPTY3MTA4ODYzLEQ9TWF0aC5pbXVsKGxuLHhy''@;'; put 'put ''KSxwPShwPU1hdGguaW11bChsbixUdCkpK01hdGguaW11bChPbix4cil8MCxJPU1hdGguaW11bChPbixUdCksRD1EK01hdGguaW11bChndCxfbil8MCxwPShwPXArTWF0aC5pbXVsKGd0LFp0KXwwKStNYXRoLmltdWwoWHQsX24pfDAsST1JK01hdGguaW11bChYdCxadCl8MCxEPUQrTWF0aC5p''@;'; put 'put ''bXVsKFJ0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoUnQscG4pfDApK01hdGguaW11bChMdCxwdCl8MCxJPUkrTWF0aC5pbXVsKEx0LHBuKXwwLEQ9RCtNYXRoLmltdWwodHQsR2UpfDAscD0ocD1wK01hdGguaW11bCh0dCxVdCl8MCkrTWF0aC5pbXVsKEtlLEdlKXwwLEk9SStNYXRoLmltdWwo''@;'; put 'put ''S2UsVXQpfDAsRD1EK01hdGguaW11bChoZSx4dCl8MCxwPShwPXArTWF0aC5pbXVsKGhlLEJ0KXwwKStNYXRoLmltdWwod2UseHQpfDAsST1JK01hdGguaW11bCh3ZSxCdCl8MCxEPUQrTWF0aC5pbXVsKEZlLEduKXwwLHA9KHA9cCtNYXRoLmltdWwoRmUseW4pfDApK01hdGguaW11bChnZSxH''@;'; put 'put ''bil8MCxJPUkrTWF0aC5pbXVsKGdlLHluKXwwLEQ9RCtNYXRoLmltdWwoamUscnIpfDAscD0ocD1wK01hdGguaW11bChqZSxocil8MCkrTWF0aC5pbXVsKEFlLHJyKXwwLEk9SStNYXRoLmltdWwoQWUsaHIpfDA7dmFyIHRhPShHKyhEPUQrTWF0aC5pbXVsKFJlLHZuKXwwKXwwKSsoKDgxOTEm''@;'; put 'put ''KHA9KHA9cCtNYXRoLmltdWwoUmUsQm4pfDApK01hdGguaW11bChhZSx2bil8MCkpPDwxMyl8MDtHPSgoST1JK01hdGguaW11bChhZSxCbil8MCkrKHA+Pj4xMyl8MCkrKHRhPj4+MjYpfDAsdGEmPTY3MTA4ODYzLEQ9TWF0aC5pbXVsKGxuLF9uKSxwPShwPU1hdGguaW11bChsbixadCkpK01h''@;'; put 'put ''dGguaW11bChPbixfbil8MCxJPU1hdGguaW11bChPbixadCksRD1EK01hdGguaW11bChndCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKGd0LHBuKXwwKStNYXRoLmltdWwoWHQscHQpfDAsST1JK01hdGguaW11bChYdCxwbil8MCxEPUQrTWF0aC5pbXVsKFJ0LEdlKXwwLHA9KHA9cCtNYXRoLmlt''@;'; put 'put ''dWwoUnQsVXQpfDApK01hdGguaW11bChMdCxHZSl8MCxJPUkrTWF0aC5pbXVsKEx0LFV0KXwwLEQ9RCtNYXRoLmltdWwodHQseHQpfDAscD0ocD1wK01hdGguaW11bCh0dCxCdCl8MCkrTWF0aC5pbXVsKEtlLHh0KXwwLEk9SStNYXRoLmltdWwoS2UsQnQpfDAsRD1EK01hdGguaW11bChoZSxH''@;'; put 'put ''bil8MCxwPShwPXArTWF0aC5pbXVsKGhlLHluKXwwKStNYXRoLmltdWwod2UsR24pfDAsST1JK01hdGguaW11bCh3ZSx5bil8MCxEPUQrTWF0aC5pbXVsKEZlLHJyKXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsaHIpfDApK01hdGguaW11bChnZSxycil8MCxJPUkrTWF0aC5pbXVsKGdlLGhyKXww''@;'; put 'put ''O3ZhciBNcj0oRysoRD1EK01hdGguaW11bChqZSx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGplLEJuKXwwKStNYXRoLmltdWwoQWUsdm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoQWUsQm4pfDApKyhwPj4+MTMpfDApKyhNcj4+PjI2KXwwLE1yJj02NzEwODg2''@;'; put 'put ''MyxEPU1hdGguaW11bChsbixwdCkscD0ocD1NYXRoLmltdWwobG4scG4pKStNYXRoLmltdWwoT24scHQpfDAsST1NYXRoLmltdWwoT24scG4pLEQ9RCtNYXRoLmltdWwoZ3QsR2UpfDAscD0ocD1wK01hdGguaW11bChndCxVdCl8MCkrTWF0aC5pbXVsKFh0LEdlKXwwLEk9SStNYXRoLmltdWwo''@;'; put 'put ''WHQsVXQpfDAsRD1EK01hdGguaW11bChSdCx4dCl8MCxwPShwPXArTWF0aC5pbXVsKFJ0LEJ0KXwwKStNYXRoLmltdWwoTHQseHQpfDAsST1JK01hdGguaW11bChMdCxCdCl8MCxEPUQrTWF0aC5pbXVsKHR0LEduKXwwLHA9KHA9cCtNYXRoLmltdWwodHQseW4pfDApK01hdGguaW11bChLZSxH''@;'; put 'put ''bil8MCxJPUkrTWF0aC5pbXVsKEtlLHluKXwwLEQ9RCtNYXRoLmltdWwoaGUscnIpfDAscD0ocD1wK01hdGguaW11bChoZSxocil8MCkrTWF0aC5pbXVsKHdlLHJyKXwwLEk9SStNYXRoLmltdWwod2UsaHIpfDA7dmFyIEZzPShHKyhEPUQrTWF0aC5pbXVsKEZlLHZuKXwwKXwwKSsoKDgxOTEm''@;'; put 'put ''KHA9KHA9cCtNYXRoLmltdWwoRmUsQm4pfDApK01hdGguaW11bChnZSx2bil8MCkpPDwxMyl8MDtHPSgoST1JK01hdGguaW11bChnZSxCbil8MCkrKHA+Pj4xMyl8MCkrKEZzPj4+MjYpfDAsRnMmPTY3MTA4ODYzLEQ9TWF0aC5pbXVsKGxuLEdlKSxwPShwPU1hdGguaW11bChsbixVdCkpK01h''@;'; put 'put ''dGguaW11bChPbixHZSl8MCxJPU1hdGguaW11bChPbixVdCksRD1EK01hdGguaW11bChndCx4dCl8MCxwPShwPXArTWF0aC5pbXVsKGd0LEJ0KXwwKStNYXRoLmltdWwoWHQseHQpfDAsST1JK01hdGguaW11bChYdCxCdCl8MCxEPUQrTWF0aC5pbXVsKFJ0LEduKXwwLHA9KHA9cCtNYXRoLmlt''@;'; put 'put ''dWwoUnQseW4pfDApK01hdGguaW11bChMdCxHbil8MCxJPUkrTWF0aC5pbXVsKEx0LHluKXwwLEQ9RCtNYXRoLmltdWwodHQscnIpfDAscD0ocD1wK01hdGguaW11bCh0dCxocil8MCkrTWF0aC5pbXVsKEtlLHJyKXwwLEk9SStNYXRoLmltdWwoS2UsaHIpfDA7dmFyICRpPShHKyhEPUQrTWF0''@;'; put 'put ''aC5pbXVsKGhlLHZuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoaGUsQm4pfDApK01hdGguaW11bCh3ZSx2bil8MCkpPDwxMyl8MDtHPSgoST1JK01hdGguaW11bCh3ZSxCbil8MCkrKHA+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEQ9TWF0aC5pbXVsKGxuLHh0''@;'; put 'put ''KSxwPShwPU1hdGguaW11bChsbixCdCkpK01hdGguaW11bChPbix4dCl8MCxJPU1hdGguaW11bChPbixCdCksRD1EK01hdGguaW11bChndCxHbil8MCxwPShwPXArTWF0aC5pbXVsKGd0LHluKXwwKStNYXRoLmltdWwoWHQsR24pfDAsST1JK01hdGguaW11bChYdCx5bil8MCxEPUQrTWF0aC5p''@;'; put 'put ''bXVsKFJ0LHJyKXwwLHA9KHA9cCtNYXRoLmltdWwoUnQsaHIpfDApK01hdGguaW11bChMdCxycil8MCxJPUkrTWF0aC5pbXVsKEx0LGhyKXwwO3ZhciBfcz0oRysoRD1EK01hdGguaW11bCh0dCx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHR0LEJuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''S2Usdm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoS2UsQm4pfDApKyhwPj4+MTMpfDApKyhfcz4+PjI2KXwwLF9zJj02NzEwODg2MyxEPU1hdGguaW11bChsbixHbikscD0ocD1NYXRoLmltdWwobG4seW4pKStNYXRoLmltdWwoT24sR24pfDAsST1NYXRoLmltdWwoT24seW4pLEQ9''@;'; put 'put ''RCtNYXRoLmltdWwoZ3QscnIpfDAscD0ocD1wK01hdGguaW11bChndCxocil8MCkrTWF0aC5pbXVsKFh0LHJyKXwwLEk9SStNYXRoLmltdWwoWHQsaHIpfDA7dmFyIGpzPShHKyhEPUQrTWF0aC5pbXVsKFJ0LHZuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUnQsQm4pfDApK01h''@;'; put 'put ''dGguaW11bChMdCx2bil8MCkpPDwxMyl8MDtHPSgoST1JK01hdGguaW11bChMdCxCbil8MCkrKHA+Pj4xMyl8MCkrKGpzPj4+MjYpfDAsanMmPTY3MTA4ODYzLEQ9TWF0aC5pbXVsKGxuLHJyKSxwPShwPU1hdGguaW11bChsbixocikpK01hdGguaW11bChPbixycil8MCxJPU1hdGguaW11bChP''@;'; put 'put ''bixocik7dmFyIENsPShHKyhEPUQrTWF0aC5pbXVsKGd0LHZuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoZ3QsQm4pfDApK01hdGguaW11bChYdCx2bil8MCkpPDwxMyl8MDtHPSgoST1JK01hdGguaW11bChYdCxCbil8MCkrKHA+Pj4xMyl8MCkrKENsPj4+MjYpfDAsQ2wmPTY3''@;'; put 'put ''MTA4ODYzO3ZhciBUaT0oRysoRD1NYXRoLmltdWwobG4sdm4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKGxuLEJuKSkrTWF0aC5pbXVsKE9uLHZuKXwwKSk8PDEzKXwwO3JldHVybiBHPSgoST1NYXRoLmltdWwoT24sQm4pKSsocD4+PjEzKXwwKSsoVGk+Pj4yNil8MCxUaSY9NjcxMDg4''@;'; put 'put ''NjMsS1swXT1qYSxLWzFdPWpvLEtbMl09WHIsS1szXT1lYSxLWzRdPXJhLEtbNV09Y2EsS1s2XT1DaSxLWzddPWhvLEtbOF09TWEsS1s5XT1rcyxLWzEwXT1CaSxLWzExXT10YSxLWzEyXT1NcixLWzEzXT1GcyxLWzE0XT0kaSxLWzE1XT1fcyxLWzE2XT1qcyxLWzE3XT1DbCxLWzE4XT1UaSww''@;'; put 'put ''IT09RyYmKEtbMTldPUcsay5sZW5ndGgrKyksa307ZnVuY3Rpb24gWShYLGYsYil7cmV0dXJuKG5ldyBGKS5tdWxwKFgsZixiKX1mdW5jdGlvbiBGKFgsZil7dGhpcy54PVgsdGhpcy55PWZ9TWF0aC5pbXVsfHwoTj1WKSx2LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihmLGIpe3ZhciBrLE09''@;'; put 'put ''dGhpcy5sZW5ndGgrZi5sZW5ndGg7cmV0dXJuIGs9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1mLmxlbmd0aD9OKHRoaXMsZixiKTpNPDYzP1YodGhpcyxmLGIpOk08MTAyND9mdW5jdGlvbiB6KFgsZixiKXtiLm5lZ2F0aXZlPWYubmVnYXRpdmVeWC5uZWdhdGl2ZSxiLmxlbmd0aD1YLmxlbmd0''@;'; put 'put ''aCtmLmxlbmd0aDtmb3IodmFyIGs9MCxNPTAsQj0wO0I8Yi5sZW5ndGgtMTtCKyspe3ZhciBLPU07TT0wO2Zvcih2YXIgRz02NzEwODg2MyZrLEQ9TWF0aC5taW4oQixmLmxlbmd0aC0xKSxwPU1hdGgubWF4KDAsQi1YLmxlbmd0aCsxKTtwPD1EO3ArKyl7dmFyIF9lPSgwfFgud29yZHNbQi1w''@;'; put 'put ''XSkqKDB8Zi53b3Jkc1twXSksUGU9NjcxMDg4NjMmX2U7Rz02NzEwODg2MyYoUGU9UGUrR3wwKSxNKz0oSz0oSz1LKyhfZS82NzEwODg2NHwwKXwwKSsoUGU+Pj4yNil8MCk+Pj4yNixLJj02NzEwODg2M31iLndvcmRzW0JdPUcsaz1LLEs9TX1yZXR1cm4gMCE9PWs/Yi53b3Jkc1tCXT1rOmIu''@;'; put 'put ''bGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLGYsYik6WSh0aGlzLGYsYiksa30sRi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihmKXtmb3IodmFyIGI9bmV3IEFycmF5KGYpLGs9di5wcm90b3R5cGUuX2NvdW50Qml0cyhmKS0xLE09MDtNPGY7TSsrKWJbTV09dGhpcy5yZXZCaW4oTSxrLGYp''@;'; put 'put ''O3JldHVybiBifSxGLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZixiLGspe2lmKDA9PT1mfHxmPT09ay0xKXJldHVybiBmO2Zvcih2YXIgTT0wLEI9MDtCPGI7QisrKU18PSgxJmYpPDxiLUItMSxmPj49MTtyZXR1cm4gTX0sRi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihmLGIsayxN''@;'; put 'put ''LEIsSyl7Zm9yKHZhciBHPTA7RzxLO0crKylNW0ddPWJbZltHXV0sQltHXT1rW2ZbR11dfSxGLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZixiLGssTSxCLEspe3RoaXMucGVybXV0ZShLLGYsYixrLE0sQik7Zm9yKHZhciBHPTE7RzxCO0c8PD0xKWZvcih2YXIgRD1HPDwxLHA9TWF0''@;'; put 'put ''aC5jb3MoMipNYXRoLlBJL0QpLEk9TWF0aC5zaW4oMipNYXRoLlBJL0QpLHVlPTA7dWU8Qjt1ZSs9RClmb3IodmFyIG5lPXAsX2U9SSxQZT0wO1BlPEc7UGUrKyl7dmFyIG90PWtbdWUrUGVdLGx0PU1bdWUrUGVdLGR0PWtbdWUrUGUrR10sUmU9TVt1ZStQZStHXSxhZT1uZSpkdC1fZSpSZTtS''@;'; put 'put ''ZT1uZSpSZStfZSpkdCxrW3VlK1BlXT1vdCsoZHQ9YWUpLE1bdWUrUGVdPWx0K1JlLGtbdWUrUGUrR109b3QtZHQsTVt1ZStQZStHXT1sdC1SZSxQZSE9PUQmJihhZT1wKm5lLUkqX2UsX2U9cCpfZStJKm5lLG5lPWFlKX19LEYucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGYsYil7''@;'; put 'put ''dmFyIGs9MXxNYXRoLm1heChiLGYpLE09MSZrLEI9MDtmb3Ioaz1rLzJ8MDtrO2s+Pj49MSlCKys7cmV0dXJuIDE8PEIrMStNfSxGLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZixiLGspe2lmKCEoazw9MSkpZm9yKHZhciBNPTA7TTxrLzI7TSsrKXt2YXIgQj1mW01dO2ZbTV09Zltr''@;'; put 'put ''LU0tMV0sZltrLU0tMV09QixCPWJbTV0sYltNXT0tYltrLU0tMV0sYltrLU0tMV09LUJ9fSxGLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZixiKXtmb3IodmFyIGs9MCxNPTA7TTxiLzI7TSsrKXt2YXIgQj04MTkyKk1hdGgucm91bmQoZlsyKk0rMV0vYikrTWF0aC5yb3VuZChm''@;'; put 'put ''WzIqTV0vYikraztmW01dPTY3MTA4ODYzJkIsaz1CPDY3MTA4ODY0PzA6Qi82NzEwODg2NHwwfXJldHVybiBmfSxGLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGYsYixrLE0pe2Zvcih2YXIgQj0wLEs9MDtLPGI7SysrKWtbMipLXT04MTkxJihCKz0wfGZbS10pLGtbMipLKzFdPTgx''@;'; put 'put ''OTEmKEI+Pj49MTMpLEI+Pj49MTM7Zm9yKEs9MipiO0s8TTsrK0spa1tLXT0wO3MoMD09PUIpLHMoISgtODE5MiZCKSl9LEYucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZil7Zm9yKHZhciBiPW5ldyBBcnJheShmKSxrPTA7azxmO2srKyliW2tdPTA7cmV0dXJuIGJ9LEYucHJvdG90eXBlLm11''@;'; put 'put ''bHA9ZnVuY3Rpb24oZixiLGspe3ZhciBNPTIqdGhpcy5ndWVzc0xlbjEzYihmLmxlbmd0aCxiLmxlbmd0aCksQj10aGlzLm1ha2VSQlQoTSksSz10aGlzLnN0dWIoTSksRz1uZXcgQXJyYXkoTSksRD1uZXcgQXJyYXkoTSkscD1uZXcgQXJyYXkoTSksST1uZXcgQXJyYXkoTSksdWU9bmV3IEFy''@;'; put 'put ''cmF5KE0pLG5lPW5ldyBBcnJheShNKSxfZT1rLndvcmRzO19lLmxlbmd0aD1NLHRoaXMuY29udmVydDEzYihmLndvcmRzLGYubGVuZ3RoLEcsTSksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsSSxNKSx0aGlzLnRyYW5zZm9ybShHLEssRCxwLE0sQiksdGhpcy50cmFuc2Zvcm0o''@;'; put 'put ''SSxLLHVlLG5lLE0sQik7Zm9yKHZhciBQZT0wO1BlPE07UGUrKyl7dmFyIG90PURbUGVdKnVlW1BlXS1wW1BlXSpuZVtQZV07cFtQZV09RFtQZV0qbmVbUGVdK3BbUGVdKnVlW1BlXSxEW1BlXT1vdH1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRCxwLE0pLHRoaXMudHJhbnNmb3JtKEQscCxfZSxL''@;'; put 'put ''LE0sQiksdGhpcy5jb25qdWdhdGUoX2UsSyxNKSx0aGlzLm5vcm1hbGl6ZTEzYihfZSxNKSxrLm5lZ2F0aXZlPWYubmVnYXRpdmVeYi5uZWdhdGl2ZSxrLmxlbmd0aD1mLmxlbmd0aCtiLmxlbmd0aCxrLnN0cmlwKCl9LHYucHJvdG90eXBlLm11bD1mdW5jdGlvbihmKXt2YXIgYj1uZXcgdihu''@;'; put 'put ''dWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZi5sZW5ndGgpLHRoaXMubXVsVG8oZixiKX0sdi5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihmKXt2YXIgYj1uZXcgdihudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZi5sZW5ndGgpLFko''@;'; put 'put ''dGhpcyxmLGIpfSx2LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZix0aGlzKX0sdi5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZil7cygibnVtYmVyIj09dHlwZW9mIGYpLHMoZjw2NzEwODg2NCk7Zm9yKHZhciBiPTAsaz0wO2s8dGhpcy5s''@;'; put 'put ''ZW5ndGg7aysrKXt2YXIgTT0oMHx0aGlzLndvcmRzW2tdKSpmLEI9KDY3MTA4ODYzJk0pKyg2NzEwODg2MyZiKTtiPj49MjYsYis9TS82NzEwODg2NHwwLGIrPUI+Pj4yNix0aGlzLndvcmRzW2tdPTY3MTA4ODYzJkJ9cmV0dXJuIDAhPT1iJiYodGhpcy53b3Jkc1trXT1iLHRoaXMubGVuZ3Ro''@;'; put 'put ''KyspLDA9PT1mJiYodGhpcy5sZW5ndGg9MSx0aGlzLl9ub3JtU2lnbigpKSx0aGlzfSx2LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZil9LHYucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdi5wcm90''@;'; put 'put ''b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdi5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGYpe3ZhciBiPWZ1bmN0aW9uIEgoWCl7Zm9yKHZhciBmPW5ldyBBcnJheShYLmJpdExlbmd0aCgpKSxiPTA7YjxmLmxlbmd0aDtiKyspe3ZhciBNPWIl''@;'; put 'put ''MjY7ZltiXT0oWC53b3Jkc1tiLzI2fDBdJjE8PE0pPj4+TX1yZXR1cm4gZn0oZik7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcgdigxKTtmb3IodmFyIGs9dGhpcyxNPTA7TTxiLmxlbmd0aCYmMD09PWJbTV07TSsrLGs9ay5zcXIoKSk7aWYoKytNPGIubGVuZ3RoKWZvcih2YXIgQj1rLnNx''@;'; put 'put ''cigpO008Yi5sZW5ndGg7TSsrLEI9Qi5zcXIoKSkwIT09YltNXSYmKGs9ay5tdWwoQikpO3JldHVybiBrfSx2LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZil7cygibnVtYmVyIj09dHlwZW9mIGYmJmY+PTApO3ZhciBCLGI9ZiUyNixrPShmLWIpLzI2LE09NjcxMDg4NjM+Pj4yNi1iPDwy''@;'; put 'put ''Ni1iO2lmKDAhPT1iKXt2YXIgSz0wO2ZvcihCPTA7Qjx0aGlzLmxlbmd0aDtCKyspe3ZhciBHPXRoaXMud29yZHNbQl0mTTt0aGlzLndvcmRzW0JdPSgwfHRoaXMud29yZHNbQl0pLUc8PGJ8SyxLPUc+Pj4yNi1ifUsmJih0aGlzLndvcmRzW0JdPUssdGhpcy5sZW5ndGgrKyl9aWYoMCE9PWsp''@;'; put 'put ''e2ZvcihCPXRoaXMubGVuZ3RoLTE7Qj49MDtCLS0pdGhpcy53b3Jkc1tCK2tdPXRoaXMud29yZHNbQl07Zm9yKEI9MDtCPGs7QisrKXRoaXMud29yZHNbQl09MDt0aGlzLmxlbmd0aCs9a31yZXR1cm4gdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihmKXtyZXR1cm4g''@;'; put 'put ''cygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZil9LHYucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihmLGIsayl7dmFyIE07cygibnVtYmVyIj09dHlwZW9mIGYmJmY+PTApLE09Yj8oYi1iJTI2KS8yNjowO3ZhciBCPWYlMjYsSz1NYXRoLm1pbigoZi1CKS8yNix0aGlzLmxlbmd0''@;'; put 'put ''aCksRz02NzEwODg2M142NzEwODg2Mz4+PkI8PEIsRD1rO2lmKE0tPUssTT1NYXRoLm1heCgwLE0pLEQpe2Zvcih2YXIgcD0wO3A8SztwKyspRC53b3Jkc1twXT10aGlzLndvcmRzW3BdO0QubGVuZ3RoPUt9aWYoMCE9PUspaWYodGhpcy5sZW5ndGg+Sylmb3IodGhpcy5sZW5ndGgtPUsscD0w''@;'; put 'put ''O3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dGhpcy53b3Jkc1twK0tdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEk9MDtmb3IocD10aGlzLmxlbmd0aC0xO3A+PTAmJigwIT09SXx8cD49TSk7cC0tKXt2YXIgdWU9MHx0aGlzLndvcmRzW3BdO3RoaXMu''@;'; put 'put ''d29yZHNbcF09STw8MjYtQnx1ZT4+PkIsST11ZSZHfXJldHVybiBEJiYwIT09SSYmKEQud29yZHNbRC5sZW5ndGgrK109SSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZixi''@;'; put 'put ''LGspe3JldHVybiBzKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihmLGIsayl9LHYucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihmKX0sdi5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNo''@;'; put 'put ''bG4oZil9LHYucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihmKX0sdi5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZil9LHYucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGYpe3MoIm51bWJl''@;'; put 'put ''ciI9PXR5cGVvZiBmJiZmPj0wKTt2YXIgYj1mJTI2LGs9KGYtYikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9a3x8ISh0aGlzLndvcmRzW2tdJjE8PGIpKX0sdi5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGYpe3MoIm51bWJlciI9PXR5cGVvZiBmJiZmPj0wKTt2YXIgYj1mJTI2LGs9KGYt''@;'; put 'put ''YikvMjY7cmV0dXJuIHMoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1rP3RoaXM6KDAhPT1iJiZrKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oayx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRzW3Ro''@;'; put 'put ''aXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCkpfSx2LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihmKX0s''@;'; put 'put ''di5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZil7cmV0dXJuIHMoIm51bWJlciI9PXR5cGVvZiBmKSxzKGY8NjcxMDg4NjQpLGY8MD90aGlzLmlzdWJuKC1mKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGY/KHRoaXMud29yZHNbMF09Zi0o''@;'; put 'put ''MHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGYpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihmKX0sdi5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGYpe3RoaXMud29yZHNbMF0rPWY7Zm9yKHZhciBi''@;'; put 'put ''PTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxi''@;'; put 'put ''KzEpLHRoaXN9LHYucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGYpe2lmKHMoIm51bWJlciI9PXR5cGVvZiBmKSxzKGY8NjcxMDg4NjQpLGY8MClyZXR1cm4gdGhpcy5pYWRkbigtZik7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGYpLHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWYsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPDA7''@;'; put 'put ''YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZil9LHYucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZil7cmV0dXJuIHRo''@;'; put 'put ''aXMuY2xvbmUoKS5pc3VibihmKX0sdi5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdi5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHYucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlv''@;'; put 'put ''bihmLGIsayl7dmFyIEI7dGhpcy5fZXhwYW5kKGYubGVuZ3RoK2spO3ZhciBLLEc9MDtmb3IoQj0wO0I8Zi5sZW5ndGg7QisrKXtLPSgwfHRoaXMud29yZHNbQitrXSkrRzt2YXIgRD0oMHxmLndvcmRzW0JdKSpiO0c9KChLLT02NzEwODg2MyZEKT4+MjYpLShELzY3MTA4ODY0fDApLHRoaXMu''@;'; put 'put ''d29yZHNbQitrXT02NzEwODg2MyZLfWZvcig7Qjx0aGlzLmxlbmd0aC1rO0IrKylHPShLPSgwfHRoaXMud29yZHNbQitrXSkrRyk+PjI2LHRoaXMud29yZHNbQitrXT02NzEwODg2MyZLO2lmKDA9PT1HKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKHMoLTE9PT1HKSxHPTAsQj0wO0I8dGhpcy5s''@;'; put 'put ''ZW5ndGg7QisrKUc9KEs9LSgwfHRoaXMud29yZHNbQl0pK0cpPj4yNix0aGlzLndvcmRzW0JdPTY3MTA4ODYzJks7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGYsYil7dmFyIGssTT10aGlzLmNsb25lKCksQj1mLEs9''@;'; put 'put ''MHxCLndvcmRzW0IubGVuZ3RoLTFdOzAhPShrPTI2LXRoaXMuX2NvdW50Qml0cyhLKSkmJihCPUIudXNobG4oayksTS5pdXNobG4oayksSz0wfEIud29yZHNbQi5sZW5ndGgtMV0pO3ZhciBwLEQ9TS5sZW5ndGgtQi5sZW5ndGg7aWYoIm1vZCIhPT1iKXsocD1uZXcgdihudWxsKSkubGVuZ3Ro''@;'; put 'put ''PUQrMSxwLndvcmRzPW5ldyBBcnJheShwLmxlbmd0aCk7Zm9yKHZhciBJPTA7STxwLmxlbmd0aDtJKyspcC53b3Jkc1tJXT0wfXZhciB1ZT1NLmNsb25lKCkuX2lzaGxuc3VibXVsKEIsMSxEKTswPT09dWUubmVnYXRpdmUmJihNPXVlLHAmJihwLndvcmRzW0RdPTEpKTtmb3IodmFyIG5lPUQt''@;'; put 'put ''MTtuZT49MDtuZS0tKXt2YXIgX2U9NjcxMDg4NjQqKDB8TS53b3Jkc1tCLmxlbmd0aCtuZV0pKygwfE0ud29yZHNbQi5sZW5ndGgrbmUtMV0pO2ZvcihfZT1NYXRoLm1pbihfZS9LfDAsNjcxMDg4NjMpLE0uX2lzaGxuc3VibXVsKEIsX2UsbmUpOzAhPT1NLm5lZ2F0aXZlOylfZS0tLE0ubmVn''@;'; put 'put ''YXRpdmU9MCxNLl9pc2hsbnN1Ym11bChCLDEsbmUpLE0uaXNaZXJvKCl8fChNLm5lZ2F0aXZlXj0xKTtwJiYocC53b3Jkc1tuZV09X2UpfXJldHVybiBwJiZwLnN0cmlwKCksTS5zdHJpcCgpLCJkaXYiIT09YiYmMCE9PWsmJk0uaXVzaHJuKGspLHtkaXY6cHx8bnVsbCxtb2Q6TX19LHYucHJv''@;'; put 'put ''dG90eXBlLmRpdm1vZD1mdW5jdGlvbihmLGIsayl7cmV0dXJuIHMoIWYuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdigwKSxtb2Q6bmV3IHYoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zi5uZWdhdGl2ZT8oSz10aGlzLm5lZygpLmRpdm1vZChmLGIpLCJtb2QiIT09YiYm''@;'; put 'put ''KE09Sy5kaXYubmVnKCkpLCJkaXYiIT09YiYmKEI9Sy5tb2QubmVnKCksayYmMCE9PUIubmVnYXRpdmUmJkIuaWFkZChmKSkse2RpdjpNLG1vZDpCfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1mLm5lZ2F0aXZlPyhLPXRoaXMuZGl2bW9kKGYubmVnKCksYiksIm1vZCIhPT1iJiYoTT1LLmRp''@;'; put 'put ''di5uZWcoKSkse2RpdjpNLG1vZDpLLm1vZH0pOjAhPT0odGhpcy5uZWdhdGl2ZSZmLm5lZ2F0aXZlKT8oSz10aGlzLm5lZygpLmRpdm1vZChmLm5lZygpLGIpLCJkaXYiIT09YiYmKEI9Sy5tb2QubmVnKCksayYmMCE9PUIubmVnYXRpdmUmJkIuaXN1YihmKSkse2RpdjpLLmRpdixtb2Q6Qn0p''@;'; put 'put ''OmYubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChmKTwwP3tkaXY6bmV3IHYoMCksbW9kOnRoaXN9OjE9PT1mLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4oZi53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9kOm5ldyB2KHRoaXMubW9kbihmLndv''@;'; put 'put ''cmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGYud29yZHNbMF0pLG1vZDpuZXcgdih0aGlzLm1vZG4oZi53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGYsYik7dmFyIE0sQixLfSx2LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuZGl2bW9kKGYsImRpdiIsITEpLmRpdn0s''@;'; put 'put ''di5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmRpdm1vZChmLCJtb2QiLCExKS5tb2R9LHYucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuZGl2bW9kKGYsIm1vZCIsITApLm1vZH0sdi5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZil7dmFy''@;'; put 'put ''IGI9dGhpcy5kaXZtb2QoZik7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciBrPWIubW9kLmFicygpLE09Zi5hYnMoKS5pdXNocm4oMSksQj0xJmYud29yZHNbMF0sSz1rLmNtcChNKTtpZihLPDB8fDE9PT1CJiYwPT09SylyZXR1cm4gYi5kaXY7dmFyIEc9bmV3IHYoMSk7cmV0''@;'; put 'put ''dXJuIEcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZV5mLm5lZ2F0aXZlLGIuZGl2LmlhZGQoRyl9LHYucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZil7cyhmPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwyNiklZixrPTAsTT10aGlzLmxlbmd0aC0xO00+PTA7TS0tKWs9KGIqaysoMHx0aGlzLndv''@;'; put 'put ''cmRzW01dKSklZjtyZXR1cm4ga30sdi5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZil7cyhmPD02NzEwODg2Myk7Zm9yKHZhciBiPTAsaz10aGlzLmxlbmd0aC0xO2s+PTA7ay0tKXt2YXIgTT0oMHx0aGlzLndvcmRzW2tdKSs2NzEwODg2NCpiO3RoaXMud29yZHNba109TS9mfDAsYj1NJWZ9''@;'; put 'put ''cmV0dXJuIHRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGYpfSx2LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGYpe3MoMD09PWYubmVnYXRpdmUpLHMoIWYuaXNaZXJvKCkpO3ZhciBiPXRoaXMsaz1mLmNsb25lKCk7''@;'; put 'put ''Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QoZik6Yi5jbG9uZSgpO2Zvcih2YXIgTT1uZXcgdigxKSxCPW5ldyB2KDApLEs9bmV3IHYoMCksRz1uZXcgdigxKSxEPTA7Yi5pc0V2ZW4oKSYmay5pc0V2ZW4oKTspYi5pdXNocm4oMSksay5pdXNocm4oMSksKytEO2Zvcih2YXIgcD1rLmNsb25lKCks''@;'; put 'put ''ST1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIHVlPTAsbmU9MTswPT09KGIud29yZHNbMF0mbmUpJiZ1ZTwyNjsrK3VlLG5lPDw9MSk7aWYodWU+MClmb3IoYi5pdXNocm4odWUpO3VlLS0gPjA7KShNLmlzT2RkKCl8fEIuaXNPZGQoKSkmJihNLmlhZGQocCksQi5pc3ViKEkpKSxN''@;'; put 'put ''Lml1c2hybigxKSxCLml1c2hybigxKTtmb3IodmFyIF9lPTAsUGU9MTswPT09KGsud29yZHNbMF0mUGUpJiZfZTwyNjsrK19lLFBlPDw9MSk7aWYoX2U+MClmb3Ioay5pdXNocm4oX2UpO19lLS0gPjA7KShLLmlzT2RkKCl8fEcuaXNPZGQoKSkmJihLLmlhZGQocCksRy5pc3ViKEkpKSxLLml1''@;'; put 'put ''c2hybigxKSxHLml1c2hybigxKTtiLmNtcChrKT49MD8oYi5pc3ViKGspLE0uaXN1YihLKSxCLmlzdWIoRykpOihrLmlzdWIoYiksSy5pc3ViKE0pLEcuaXN1YihCKSl9cmV0dXJue2E6SyxiOkcsZ2NkOmsuaXVzaGxuKEQpfX0sdi5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGYpe3MoMD09''@;'; put 'put ''PWYubmVnYXRpdmUpLHMoIWYuaXNaZXJvKCkpO3ZhciB1ZSxiPXRoaXMsaz1mLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QoZik6Yi5jbG9uZSgpO2Zvcih2YXIgTT1uZXcgdigxKSxCPW5ldyB2KDApLEs9ay5jbG9uZSgpO2IuY21wbigxKT4wJiZrLmNtcG4oMSk+MDspe2Zvcih2''@;'; put 'put ''YXIgRz0wLEQ9MTswPT09KGIud29yZHNbMF0mRCkmJkc8MjY7KytHLEQ8PD0xKTtpZihHPjApZm9yKGIuaXVzaHJuKEcpO0ctLSA+MDspTS5pc09kZCgpJiZNLmlhZGQoSyksTS5pdXNocm4oMSk7Zm9yKHZhciBwPTAsST0xOzA9PT0oay53b3Jkc1swXSZJKSYmcDwyNjsrK3AsSTw8PTEpO2lm''@;'; put 'put ''KHA+MClmb3Ioay5pdXNocm4ocCk7cC0tID4wOylCLmlzT2RkKCkmJkIuaWFkZChLKSxCLml1c2hybigxKTtiLmNtcChrKT49MD8oYi5pc3ViKGspLE0uaXN1YihCKSk6KGsuaXN1YihiKSxCLmlzdWIoTSkpfXJldHVybih1ZT0wPT09Yi5jbXBuKDEpP006QikuY21wbigwKTwwJiZ1ZS5pYWRk''@;'; put 'put ''KGYpLHVlfSx2LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZil7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZi5hYnMoKTtpZihmLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSxrPWYuY2xvbmUoKTtiLm5lZ2F0aXZlPTAsay5uZWdhdGl2ZT0wO2Zvcih2YXIg''@;'; put 'put ''TT0wO2IuaXNFdmVuKCkmJmsuaXNFdmVuKCk7TSsrKWIuaXVzaHJuKDEpLGsuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hybigxKTtmb3IoO2suaXNFdmVuKCk7KWsuaXVzaHJuKDEpO3ZhciBCPWIuY21wKGspO2lmKEI8MCl7dmFyIEs9YjtiPWssaz1LfWVsc2Ug''@;'; put 'put ''aWYoMD09PUJ8fDA9PT1rLmNtcG4oMSkpYnJlYWs7Yi5pc3ViKGspfXJldHVybiBrLml1c2hsbihNKX0sdi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5lZ2NkKGYpLmEudW1vZChmKX0sdi5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMu''@;'; put 'put ''d29yZHNbMF0pfSx2LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHYucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLndvcmRzWzBdJmZ9LHYucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGYpe3MoIm51bWJlciI9PXR5''@;'; put 'put ''cGVvZiBmKTt2YXIgYj1mJTI2LGs9KGYtYikvMjYsTT0xPDxiO2lmKHRoaXMubGVuZ3RoPD1rKXJldHVybiB0aGlzLl9leHBhbmQoaysxKSx0aGlzLndvcmRzW2tdfD1NLHRoaXM7Zm9yKHZhciBCPU0sSz1rOzAhPT1CJiZLPHRoaXMubGVuZ3RoO0srKyl7dmFyIEc9MHx0aGlzLndvcmRzW0td''@;'; put 'put ''O0I9KEcrPUIpPj4+MjYsdGhpcy53b3Jkc1tLXT1HJj02NzEwODg2M31yZXR1cm4gMCE9PUImJih0aGlzLndvcmRzW0tdPUIsdGhpcy5sZW5ndGgrKyksdGhpc30sdi5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19''@;'; put 'put ''LHYucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZil7dmFyIGssYj1mPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKWs9MTtlbHNle2ImJihmPS1mKSxzKGY8PTY3''@;'; put 'put ''MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBNPTB8dGhpcy53b3Jkc1swXTtrPU09PT1mPzA6TTxmPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWs6a30sdi5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGYpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zi5uZWdhdGl2''@;'; put 'put ''ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWYubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21wKGYpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHYucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZil7aWYodGhpcy5sZW5ndGg+Zi5sZW5ndGgpcmV0''@;'; put 'put ''dXJuIDE7aWYodGhpcy5sZW5ndGg8Zi5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAsaz10aGlzLmxlbmd0aC0xO2s+PTA7ay0tKXt2YXIgTT0wfHRoaXMud29yZHNba10sQj0wfGYud29yZHNba107aWYoTSE9PUIpe008Qj9iPS0xOk0+QiYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx2LnBy''@;'; put 'put ''b3RvdHlwZS5ndG49ZnVuY3Rpb24oZil7cmV0dXJuIDE9PT10aGlzLmNtcG4oZil9LHYucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGYpe3JldHVybiAxPT09dGhpcy5jbXAoZil9LHYucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuY21wbihmKT49MH0sdi5wcm90b3R5cGUu''@;'; put 'put ''Z3RlPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNtcChmKT49MH0sdi5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGYpe3JldHVybi0xPT09dGhpcy5jbXBuKGYpfSx2LnByb3RvdHlwZS5sdD1mdW5jdGlvbihmKXtyZXR1cm4tMT09PXRoaXMuY21wKGYpfSx2LnByb3RvdHlwZS5sdGVuPWZ1bmN0''@;'; put 'put ''aW9uKGYpe3JldHVybiB0aGlzLmNtcG4oZik8PTB9LHYucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbXAoZik8PTB9LHYucHJvdG90eXBlLmVxbj1mdW5jdGlvbihmKXtyZXR1cm4gMD09PXRoaXMuY21wbihmKX0sdi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZil7cmV0''@;'; put 'put ''dXJuIDA9PT10aGlzLmNtcChmKX0sdi5yZWQ9ZnVuY3Rpb24oZil7cmV0dXJuIG5ldyBrZShmKX0sdi5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZil7cmV0dXJuIHMoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IikscygwPT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxmLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZil9LHYucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29u''@;'; put 'put ''dGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx2LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMucmVkPWYsdGhpc30sdi5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZil7cmV0dXJuIHMoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGlu''@;'; put 'put ''IHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZil9LHYucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihmKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGYpfSx2LnByb3RvdHlwZS5yZWRJ''@;'; put 'put ''QWRkPWZ1bmN0aW9uKGYpe3JldHVybiBzKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxmKX0sdi5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGYpe3JldHVybiBzKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZil9LHYucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZil7cmV0dXJuIHModGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGYpfSx2LnByb3RvdHlwZS5y''@;'; put 'put ''ZWRTaGw9ZnVuY3Rpb24oZil7cmV0dXJuIHModGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxmKX0sdi5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGYpe3JldHVybiBzKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxmKSx0aGlzLnJlZC5tdWwodGhpcyxmKX0sdi5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihmKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92''@;'; put 'put ''ZXJpZnkyKHRoaXMsZiksdGhpcy5yZWQuaW11bCh0aGlzLGYpfSx2LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlz''@;'; put 'put ''KX0sdi5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBzKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHYucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx2LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcy5yZWQsInJlZEludm0gd29y''@;'; put 'put ''a3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdi5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl''@;'; put 'put ''ZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHYucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihmKXtyZXR1cm4gcyh0aGlzLnJlZCYmIWYucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGYpfTt2YXIg''@;'; put 'put ''Vz17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIHEoWCxmKXt0aGlzLm5hbWU9WCx0aGlzLnA9bmV3IHYoZiwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHYoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRo''@;'; put 'put ''aXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHJlKCl7cS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7cS5jYWxsKHRoaXMsInAyMjQiLCJmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIENlKCl7cS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIEllKCl7''@;'; put 'put ''cS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIGtlKFgpe2lmKCJzdHJpbmciPT10eXBlb2YgWCl7dmFyIGY9di5fcHJpbWUoWCk7dGhpcy5tPWYucCx0aGlzLnBy''@;'; put 'put ''aW1lPWZ9ZWxzZSBzKFguZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09WCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gcWUoWCl7a2UuY2FsbCh0aGlzLFgpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlz''@;'; put 'put ''LnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHYoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEp''@;'; put 'put ''LmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9cS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBmPW5ldyB2KG51bGwpO3JldHVybiBmLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5u''@;'; put 'put ''LzEzKSksZn0scS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihmKXt2YXIgayxiPWY7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSxrPShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShrPnRoaXMubik7dmFyIE09azx0aGlzLm4/LTE6Yi51''@;'; put 'put ''Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1NPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6TT4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0scS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZixiKXtmLml1c2hybih0aGlzLm4sMCxiKX0s''@;'; put 'put ''cS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZil7cmV0dXJuIGYuaW11bCh0aGlzLmspfSxBKHJlLHEpLHJlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihmLGIpe2Zvcih2YXIgaz00MTk0MzAzLE09TWF0aC5taW4oZi5sZW5ndGgsOSksQj0wO0I8TTtCKyspYi53b3Jkc1tCXT1mLndvcmRz''@;'; put 'put ''W0JdO2lmKGIubGVuZ3RoPU0sZi5sZW5ndGg8PTkpcmV0dXJuIGYud29yZHNbMF09MCx2b2lkKGYubGVuZ3RoPTEpO3ZhciBLPWYud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SyZrLEI9MTA7QjxmLmxlbmd0aDtCKyspe3ZhciBHPTB8Zi53b3Jkc1tCXTtmLndvcmRzW0ItMTBd''@;'; put 'put ''PShHJmspPDw0fEs+Pj4yMixLPUd9Zi53b3Jkc1tCLTEwXT1LPj4+PTIyLGYubGVuZ3RoLT0wPT09SyYmZi5sZW5ndGg+MTA/MTA6OX0scmUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGYpe2Yud29yZHNbZi5sZW5ndGhdPTAsZi53b3Jkc1tmLmxlbmd0aCsxXT0wLGYubGVuZ3RoKz0yO2Zv''@;'; put 'put ''cih2YXIgYj0wLGs9MDtrPGYubGVuZ3RoO2srKyl7dmFyIE09MHxmLndvcmRzW2tdO2Yud29yZHNba109NjcxMDg4NjMmKGIrPTk3NypNKSxiPTY0Kk0rKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1mLndvcmRzW2YubGVuZ3RoLTFdJiYoZi5sZW5ndGgtLSwwPT09Zi53b3Jkc1tmLmxlbmd0''@;'; put 'put ''aC0xXSYmZi5sZW5ndGgtLSksZn0sQShtZSxxKSxBKENlLHEpLEEoSWUscSksSWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGYpe2Zvcih2YXIgYj0wLGs9MDtrPGYubGVuZ3RoO2srKyl7dmFyIE09MTkqKDB8Zi53b3Jkc1trXSkrYixCPTY3MTA4ODYzJk07TT4+Pj0yNixmLndvcmRzW2td''@;'; put 'put ''PUIsYj1NfXJldHVybiAwIT09YiYmKGYud29yZHNbZi5sZW5ndGgrK109YiksZn0sdi5fcHJpbWU9ZnVuY3Rpb24oZil7aWYoV1tmXSlyZXR1cm4gV1tmXTt2YXIgYjtpZigiazI1NiI9PT1mKWI9bmV3IHJlO2Vsc2UgaWYoInAyMjQiPT09ZiliPW5ldyBtZTtlbHNlIGlmKCJwMTkyIj09PWYp''@;'; put 'put ''Yj1uZXcgQ2U7ZWxzZXtpZigicDI1NTE5IiE9PWYpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZik7Yj1uZXcgSWV9cmV0dXJuIFdbZl09YixifSxrZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZil7cygwPT09Zi5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBw''@;'; put 'put ''b3NpdGl2ZXMiKSxzKGYucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LGtlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihmLGIpe3MoMD09PShmLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHMoZi5yZWQmJmYu''@;'; put 'put ''cmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sa2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGYpLl9mb3JjZVJlZCh0aGlzKTpmLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9''@;'; put 'put ''LGtlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZil7cmV0dXJuIGYuaXNaZXJvKCk/Zi5jbG9uZSgpOnRoaXMubS5zdWIoZikuX2ZvcmNlUmVkKHRoaXMpfSxrZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGYsYil7dGhpcy5fdmVyaWZ5MihmLGIpO3ZhciBrPWYuYWRkKGIpO3JldHVybiBrLmNt''@;'; put 'put ''cCh0aGlzLm0pPj0wJiZrLmlzdWIodGhpcy5tKSxrLl9mb3JjZVJlZCh0aGlzKX0sa2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZixiKXt0aGlzLl92ZXJpZnkyKGYsYik7dmFyIGs9Zi5pYWRkKGIpO3JldHVybiBrLmNtcCh0aGlzLm0pPj0wJiZrLmlzdWIodGhpcy5tKSxrfSxrZS5wcm90''@;'; put 'put ''b3R5cGUuc3ViPWZ1bmN0aW9uKGYsYil7dGhpcy5fdmVyaWZ5MihmLGIpO3ZhciBrPWYuc3ViKGIpO3JldHVybiBrLmNtcG4oMCk8MCYmay5pYWRkKHRoaXMubSksay5fZm9yY2VSZWQodGhpcyl9LGtlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGYsYil7dGhpcy5fdmVyaWZ5MihmLGIpO3Zh''@;'; put 'put ''ciBrPWYuaXN1YihiKTtyZXR1cm4gay5jbXBuKDApPDAmJmsuaWFkZCh0aGlzLm0pLGt9LGtlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZixiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShmKSx0aGlzLmltb2QoZi51c2hsbihiKSl9LGtlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGYsYil7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3ZlcmlmeTIoZixiKSx0aGlzLmltb2QoZi5pbXVsKGIpKX0sa2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihmLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKGYsYiksdGhpcy5pbW9kKGYubXVsKGIpKX0sa2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMu''@;'; put 'put ''aW11bChmLGYuY2xvbmUoKSl9LGtlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMubXVsKGYsZil9LGtlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGYpe2lmKGYuaXNaZXJvKCkpcmV0dXJuIGYuY2xvbmUoKTt2YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYocyhiJTI9PTEp''@;'; put 'put ''LDM9PT1iKXt2YXIgaz10aGlzLm0uYWRkKG5ldyB2KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGYsayl9Zm9yKHZhciBNPXRoaXMubS5zdWJuKDEpLEI9MDshTS5pc1plcm8oKSYmMD09PU0uYW5kbG4oMSk7KUIrKyxNLml1c2hybigxKTtzKCFNLmlzWmVybygpKTt2YXIgSz1uZXcg''@;'; put 'put ''digxKS50b1JlZCh0aGlzKSxHPUsucmVkTmVnKCksRD10aGlzLm0uc3VibigxKS5pdXNocm4oMSkscD10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHA9bmV3IHYoMipwKnApLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhwLEQpLmNtcChHKTspcC5yZWRJQWRkKEcpO2Zvcih2YXIgST10aGlzLnBv''@;'; put 'put ''dyhwLE0pLHVlPXRoaXMucG93KGYsTS5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5wb3coZixNKSxfZT1COzAhPT1uZS5jbXAoSyk7KXtmb3IodmFyIFBlPW5lLG90PTA7MCE9PVBlLmNtcChLKTtvdCsrKVBlPVBlLnJlZFNxcigpO3Mob3Q8X2UpO3ZhciBsdD10aGlzLnBvdyhJLG5ldyB2''@;'; put 'put ''KDEpLml1c2hsbihfZS1vdC0xKSk7dWU9dWUucmVkTXVsKGx0KSxJPWx0LnJlZFNxcigpLG5lPW5lLnJlZE11bChJKSxfZT1vdH1yZXR1cm4gdWV9LGtlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGYpe3ZhciBiPWYuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5l''@;'; put 'put ''Z2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LGtlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZixiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdigxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEpKXJldHVybiBmLmNsb25lKCk7dmFyIE09bmV3IEFy''@;'; put 'put ''cmF5KDE2KTtNWzBdPW5ldyB2KDEpLnRvUmVkKHRoaXMpLE1bMV09Zjtmb3IodmFyIEI9MjtCPE0ubGVuZ3RoO0IrKylNW0JdPXRoaXMubXVsKE1bQi0xXSxmKTt2YXIgSz1NWzBdLEc9MCxEPTAscD1iLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09cCYmKHA9MjYpLEI9Yi5sZW5ndGgtMTtCPj0w''@;'; put 'put ''O0ItLSl7Zm9yKHZhciBJPWIud29yZHNbQl0sdWU9cC0xO3VlPj0wO3VlLS0pe3ZhciBuZT1JPj51ZSYxO0shPT1NWzBdJiYoSz10aGlzLnNxcihLKSksMCE9PW5lfHwwIT09Rz8oRzw8PTEsR3w9bmUsKDQ9PT0rK0R8fDA9PT1CJiYwPT09dWUpJiYoSz10aGlzLm11bChLLE1bR10pLEQ9MCxH''@;'; put 'put ''PTApKTpEPTB9cD0yNn1yZXR1cm4gS30sa2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihmKXt2YXIgYj1mLnVtb2QodGhpcy5tKTtyZXR1cm4gYj09PWY/Yi5jbG9uZSgpOmJ9LGtlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihmKXt2YXIgYj1mLmNsb25lKCk7cmV0dXJu''@;'; put 'put ''IGIucmVkPW51bGwsYn0sdi5tb250PWZ1bmN0aW9uKGYpe3JldHVybiBuZXcgcWUoZil9LEEocWUsa2UpLHFlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuaW1vZChmLnVzaGxuKHRoaXMuc2hpZnQpKX0scWUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0''@;'; put 'put ''aW9uKGYpe3ZhciBiPXRoaXMuaW1vZChmLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSxxZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihmLGIpe2lmKGYuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIGYud29yZHNbMF09MCxmLmxlbmd0aD0xLGY7dmFyIGs9Zi5pbXVs''@;'; put 'put ''KGIpLE09ay5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksQj1rLmlzdWIoTSkuaXVzaHJuKHRoaXMuc2hpZnQpLEs9QjtyZXR1cm4gQi5jbXAodGhpcy5tKT49MD9LPUIuaXN1Yih0aGlzLm0pOkIuY21wbigwKTwwJiYoSz1C''@;'; put 'put ''LmlhZGQodGhpcy5tKSksSy5fZm9yY2VSZWQodGhpcyl9LHFlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZixiKXtpZihmLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBuZXcgdigwKS5fZm9yY2VSZWQodGhpcyk7dmFyIGs9Zi5tdWwoYiksTT1rLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0''@;'; put 'put ''aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxCPWsuaXN1YihNKS5pdXNocm4odGhpcy5zaGlmdCksSz1CO3JldHVybiBCLmNtcCh0aGlzLm0pPj0wP0s9Qi5pc3ViKHRoaXMubSk6Qi5jbXBuKDApPDAmJihLPUIuaWFkZCh0aGlzLm0pKSxLLl9mb3JjZVJlZCh0aGlz''@;'; put 'put ''KX0scWUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuaW1vZChmLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oZmU9aC5ubWQoZmUpLHRoaXMpfSw0MzM0OShmZSl7ZnVuY3Rpb24gaihoLHkpe2lmKCFoKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cih5fHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZlLmV4cG9ydHM9aixqLmVxdWFsPWZ1bmN0aW9uKHksYyxzKXtpZih5IT1jKXRocm93IG5ldyBFcnJvcihzfHwiQXNzZXJ0aW9uIGZhaWxlZDogIit5KyIgIT0gIitjKX19LDY0MzY3KGZlLGopeyJ1c2Ugc3RyaWN0Ijt2YXIgaD1qO2Z1bmN0aW9u''@;'; put 'put ''IGMoQSl7cmV0dXJuIDE9PT1BLmxlbmd0aD8iMCIrQTpBfWZ1bmN0aW9uIHMoQSl7Zm9yKHZhciB2PSIiLEM9MDtDPEEubGVuZ3RoO0MrKyl2Kz1jKEFbQ10udG9TdHJpbmcoMTYpKTtyZXR1cm4gdn1oLnRvQXJyYXk9ZnVuY3Rpb24geShBLHYpe2lmKEFycmF5LmlzQXJyYXkoQSkpcmV0dXJu''@;'; put 'put ''IEEuc2xpY2UoKTtpZighQSlyZXR1cm5bXTt2YXIgQz1bXTtpZigic3RyaW5nIiE9dHlwZW9mIEEpe2Zvcih2YXIgdz0wO3c8QS5sZW5ndGg7dysrKUNbd109MHxBW3ddO3JldHVybiBDfWlmKCJoZXgiPT09dilmb3IoKEE9QS5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLCIiKSkubGVuZ3RoJTIh''@;'; put 'put ''PTAmJihBPSIwIitBKSx3PTA7dzxBLmxlbmd0aDt3Kz0yKUMucHVzaChwYXJzZUludChBW3ddK0FbdysxXSwxNikpO2Vsc2UgZm9yKHc9MDt3PEEubGVuZ3RoO3crKyl7dmFyIFM9QS5jaGFyQ29kZUF0KHcpLEw9Uz4+OCxSPTI1NSZTO0w/Qy5wdXNoKEwsUik6Qy5wdXNoKFIpfXJldHVybiBD''@;'; put 'put ''fSxoLnplcm8yPWMsaC50b0hleD1zLGguZW5jb2RlPWZ1bmN0aW9uKHYsQyl7cmV0dXJuImhleCI9PT1DP3Modik6dn19LDg5MjExKGZlKXsidXNlIHN0cmljdCI7dmFyIGo9ZnVuY3Rpb24oaCl7cmV0dXJuIGghPWh9O2ZlLmV4cG9ydHM9ZnVuY3Rpb24oeSxjKXtyZXR1cm4gMD09PXkmJjA9''@;'; put 'put ''PT1jPzEveT09MS9jOiEhKHk9PT1jfHxqKHkpJiZqKGMpKX19LDM3NjUzKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoMzg0NTIpLGM9aCgxMDQ4Nykscz1oKDg5MjExKSxBPWgoOTM5NCksdj1oKDM2NTc2KSxDPWMoQSgpLE9iamVjdCk7eShDLHtnZXRQb2x5ZmlsbDpBLGltcGxlbWVu''@;'; put 'put ''dGF0aW9uOnMsc2hpbTp2fSksZmUuZXhwb3J0cz1DfSw5Mzk0KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoODkyMTEpO2ZlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmlzP09iamVjdC5pczp5fX0sMzY1NzYoZmUsaixoKXsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIHk9aCg5Mzk0KSxjPWgoMzg0NTIpO2ZlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgQT15KCk7cmV0dXJuIGMoT2JqZWN0LHtpczpBfSx7aXM6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmlzIT09QX19KSxBfX0sMjg4NzUoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk7aWYo''@;'; put 'put ''IU9iamVjdC5rZXlzKXt2YXIgYz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxBPWgoMTA5Myksdj1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLEM9IXYuY2FsbCh7dG9TdHJpbmc6bnVsbH0sInRvU3RyaW5n''@;'; put 'put ''Iiksdz12LmNhbGwoZnVuY3Rpb24oKXt9LCJwcm90b3R5cGUiKSxTPVsidG9TdHJpbmciLCJ0b0xvY2FsZVN0cmluZyIsInZhbHVlT2YiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImNvbnN0cnVjdG9yIl0sTD1mdW5jdGlvbihIKXt2''@;'; put 'put ''YXIgVj1ILmNvbnN0cnVjdG9yO3JldHVybiBWJiZWLnByb3RvdHlwZT09PUh9LFI9eyRhcHBsaWNhdGlvbkNhY2hlOiEwLCRjb25zb2xlOiEwLCRleHRlcm5hbDohMCwkZnJhbWU6ITAsJGZyYW1lRWxlbWVudDohMCwkZnJhbWVzOiEwLCRpbm5lckhlaWdodDohMCwkaW5uZXJXaWR0aDohMCwk''@;'; put 'put ''b25tb3pmdWxsc2NyZWVuY2hhbmdlOiEwLCRvbm1vemZ1bGxzY3JlZW5lcnJvcjohMCwkb3V0ZXJIZWlnaHQ6ITAsJG91dGVyV2lkdGg6ITAsJHBhZ2VYT2Zmc2V0OiEwLCRwYWdlWU9mZnNldDohMCwkcGFyZW50OiEwLCRzY3JvbGxMZWZ0OiEwLCRzY3JvbGxUb3A6ITAsJHNjcm9sbFg6ITAs''@;'; put 'put ''JHNjcm9sbFk6ITAsJHNlbGY6ITAsJHdlYmtpdEluZGV4ZWREQjohMCwkd2Via2l0U3RvcmFnZUluZm86ITAsJHdpbmRvdzohMH0seD1mdW5jdGlvbigpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO2Zvcih2YXIgSCBpbiB3aW5kb3cpdHJ5e2lmKCFSWyIkIitIXSYmYy5jYWxsKHdp''@;'; put 'put ''bmRvdyxIKSYmbnVsbCE9PXdpbmRvd1tIXSYmIm9iamVjdCI9PXR5cGVvZiB3aW5kb3dbSF0pdHJ5e0wod2luZG93W0hdKX1jYXRjaHtyZXR1cm4hMH19Y2F0Y2h7cmV0dXJuITB9cmV0dXJuITF9KCk7eT1mdW5jdGlvbihWKXt2YXIgTj1udWxsIT09ViYmIm9iamVjdCI9PXR5cGVvZiBWLHo9''@;'; put 'put ''IltvYmplY3QgRnVuY3Rpb25dIj09PXMuY2FsbChWKSxZPUEoViksRj1OJiYiW29iamVjdCBTdHJpbmddIj09PXMuY2FsbChWKSxXPVtdO2lmKCFOJiYheiYmIVkpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmtleXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCIpO3ZhciBxPXcmJno7aWYo''@;'; put 'put ''RiYmVi5sZW5ndGg+MCYmIWMuY2FsbChWLDApKWZvcih2YXIgcmU9MDtyZTxWLmxlbmd0aDsrK3JlKVcucHVzaChTdHJpbmcocmUpKTtpZihZJiZWLmxlbmd0aD4wKWZvcih2YXIgbWU9MDttZTxWLmxlbmd0aDsrK21lKVcucHVzaChTdHJpbmcobWUpKTtlbHNlIGZvcih2YXIgQ2UgaW4gViko''@;'; put 'put ''IXF8fCJwcm90b3R5cGUiIT09Q2UpJiZjLmNhbGwoVixDZSkmJlcucHVzaChTdHJpbmcoQ2UpKTtpZihDKWZvcih2YXIgSWU9ZnVuY3Rpb24oSCl7aWYodHlwZW9mIHdpbmRvdz4idSJ8fCF4KXJldHVybiBMKEgpO3RyeXtyZXR1cm4gTChIKX1jYXRjaHtyZXR1cm4hMX19KFYpLGtlPTA7a2U8''@;'; put 'put ''Uy5sZW5ndGg7KytrZSkoIUllfHwiY29uc3RydWN0b3IiIT09U1trZV0pJiZjLmNhbGwoVixTW2tlXSkmJlcucHVzaChTW2tlXSk7cmV0dXJuIFd9fWZlLmV4cG9ydHM9eX0sMTE4OShmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1BcnJheS5wcm90b3R5cGUuc2xpY2UsYz1oKDEwOTMpLHM9''@;'; put 'put ''T2JqZWN0LmtleXMsQT1zP2Z1bmN0aW9uKHcpe3JldHVybiBzKHcpfTpoKDI4ODc1KSx2PU9iamVjdC5rZXlzO0Euc2hpbT1mdW5jdGlvbigpe2lmKE9iamVjdC5rZXlzKXt2YXIgdz1mdW5jdGlvbigpe3ZhciBTPU9iamVjdC5rZXlzKGFyZ3VtZW50cyk7cmV0dXJuIFMmJlMubGVuZ3RoPT09''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aH0oMSwyKTt3fHwoT2JqZWN0LmtleXM9ZnVuY3Rpb24oTCl7cmV0dXJuIGMoTCk/dih5LmNhbGwoTCkpOnYoTCl9KX1lbHNlIE9iamVjdC5rZXlzPUE7cmV0dXJuIE9iamVjdC5rZXlzfHxBfSxmZS5leHBvcnRzPUF9LDEwOTMoZmUpeyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''aj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2ZlLmV4cG9ydHM9ZnVuY3Rpb24oeSl7dmFyIGM9ai5jYWxsKHkpLHM9IltvYmplY3QgQXJndW1lbnRzXSI9PT1jO3JldHVybiBzfHwocz0iW29iamVjdCBBcnJheV0iIT09YyYmbnVsbCE9PXkmJiJvYmplY3QiPT10eXBlb2YgeSYmIm51bWJl''@;'; put 'put ''ciI9PXR5cGVvZiB5Lmxlbmd0aCYmeS5sZW5ndGg+PTAmJiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1qLmNhbGwoeS5jYWxsZWUpKSxzfX0sMzg0MDMoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCgxMTg5KSxjPWgoNDEzMzMpKCkscz1oKDM2NTU2KSxBPWgoNzk2MTIpLHY9cygiQXJyYXku''@;'; put 'put ''cHJvdG90eXBlLnB1c2giKSxDPXMoIk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUiKSx3PWM/QS5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM6bnVsbDtmZS5leHBvcnRzPWZ1bmN0aW9uKEwsUil7aWYobnVsbD09TCl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBi''@;'; put 'put ''ZSBhbiBvYmplY3QiKTt2YXIgeD1BKEwpO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB4O2Zvcih2YXIgVT0xO1U8YXJndW1lbnRzLmxlbmd0aDsrK1Upe3ZhciBIPUEoYXJndW1lbnRzW1VdKSxWPXkoSCksTj1jJiYoQS5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN8fHcpO2lmKE4pZm9y''@;'; put 'put ''KHZhciB6PU4oSCksWT0wO1k8ei5sZW5ndGg7KytZKXt2YXIgRj16W1ldO0MoSCxGKSYmdihWLEYpfWZvcih2YXIgVz0wO1c8Vi5sZW5ndGg7KytXKXt2YXIgcT1WW1ddO0MoSCxxKSYmKHhbcV09SFtxXSl9fXJldHVybiB4fX0sMTE1MTQoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCgz''@;'; put 'put ''ODQwMyk7ZmUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiFPYmplY3QuYXNzaWdufHxmdW5jdGlvbigpe2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO2Zvcih2YXIgQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLHY9QS5zcGxpdCgiIiksQz17fSx3PTA7dzx2Lmxlbmd0aDsrK3cpQ1t2W3dd''@;'; put 'put ''XT12W3ddO3ZhciBTPU9iamVjdC5hc3NpZ24oe30sQyksTD0iIjtmb3IodmFyIFIgaW4gUylMKz1SO3JldHVybiBBIT09TH0oKXx8ZnVuY3Rpb24oKXtpZighT2JqZWN0LmFzc2lnbnx8IU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucylyZXR1cm4hMTt2YXIgQT1PYmplY3QucHJldmVudEV4dGVu''@;'; put 'put ''c2lvbnMoezE6Mn0pO3RyeXtPYmplY3QuYXNzaWduKEEsInh5Iil9Y2F0Y2h7cmV0dXJuInkiPT09QVsxXX1yZXR1cm4hMX0oKT95Ok9iamVjdC5hc3NpZ259fSw1MTA3MihmZSxqKXtqLmVuZGlhbm5lc3M9ZnVuY3Rpb24oKXtyZXR1cm4iTEUifSxqLmhvc3RuYW1lPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHR5cGVvZiBsb2NhdGlvbjwidSI/bG9jYXRpb24uaG9zdG5hbWU6IiJ9LGoubG9hZGF2Zz1mdW5jdGlvbigpe3JldHVybltdfSxqLnVwdGltZT1mdW5jdGlvbigpe3JldHVybiAwfSxqLmZyZWVtZW09ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLk1BWF9WQUxVRX0sai50b3RhbG1lbT1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBOdW1iZXIuTUFYX1ZBTFVFfSxqLmNwdXM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sai50eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIkJyb3dzZXIifSxqLnJlbGVhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIG5hdmlnYXRvcjwidSI/bmF2aWdhdG9yLmFwcFZlcnNp''@;'; put 'put ''b246IiJ9LGoubmV0d29ya0ludGVyZmFjZXM9ai5nZXROZXR3b3JrSW50ZXJmYWNlcz1mdW5jdGlvbigpe3JldHVybnt9fSxqLmFyY2g9ZnVuY3Rpb24oKXtyZXR1cm4iamF2YXNjcmlwdCJ9LGoucGxhdGZvcm09ZnVuY3Rpb24oKXtyZXR1cm4iYnJvd3NlciJ9LGoudG1wZGlyPWoudG1wRGly''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIi90bXAifSxqLkVPTD0iXG4iLGouaG9tZWRpcj1mdW5jdGlvbigpe3JldHVybiIvIn19LDIxMTM3KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoODc1NjgpO2ouY2VydGlmaWNhdGU9aCgzNjQxMyk7dmFyIGM9eS5kZWZpbmUoIlJTQVByaXZhdGVLZXki''@;'; put 'put ''LGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcml2YXRlRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUxIiku''@;'; put 'put ''aW50KCksdGhpcy5rZXkoInByaW1lMiIpLmludCgpLHRoaXMua2V5KCJleHBvbmVudDEiKS5pbnQoKSx0aGlzLmtleSgiZXhwb25lbnQyIikuaW50KCksdGhpcy5rZXkoImNvZWZmaWNpZW50IikuaW50KCkpfSk7ai5SU0FQcml2YXRlS2V5PWM7dmFyIHM9eS5kZWZpbmUoIlJTQVB1YmxpY0tl''@;'; put 'put ''eSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpKX0pO2ouUlNBUHVibGljS2V5PXM7dmFyIEE9eS5kZWZpbmUoIkFsZ29yaXRobUlkZW50aWZpZXIiLGZ1bmN0aW9uKCl7dGhpcy5zZXEo''@;'; put 'put ''KS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLm9iamlkKCksdGhpcy5rZXkoIm5vbmUiKS5udWxsXygpLm9wdGlvbmFsKCksdGhpcy5rZXkoImN1cnZlIikub2JqaWQoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInAiKS5pbnQoKSx0aGlzLmtl''@;'; put 'put ''eSgicSIpLmludCgpLHRoaXMua2V5KCJnIikuaW50KCkpLm9wdGlvbmFsKCkpfSksdj15LmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShBKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIp''@;'; put 'put ''LmJpdHN0cigpKX0pO2ouUHVibGljS2V5PXY7dmFyIEM9eS5kZWZpbmUoIlByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShBKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVL''@;'; put 'put ''ZXkiKS5vY3RzdHIoKSl9KTtqLlByaXZhdGVLZXk9Qzt2YXIgdz15LmRlZmluZSgiRW5jcnlwdGVkUHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMua2V5KCJk''@;'; put 'put ''ZWNyeXB0Iikuc2VxKCkub2JqKHRoaXMua2V5KCJrZGUiKS5zZXEoKS5vYmoodGhpcy5rZXkoImlkIikub2JqaWQoKSx0aGlzLmtleSgia2RlcGFyYW1zIikuc2VxKCkub2JqKHRoaXMua2V5KCJzYWx0Iikub2N0c3RyKCksdGhpcy5rZXkoIml0ZXJzIikuaW50KCkpKSx0aGlzLmtleSgiY2lw''@;'; put 'put ''aGVyIikuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvIikub2JqaWQoKSx0aGlzLmtleSgiaXYiKS5vY3RzdHIoKSkpKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5vY3RzdHIoKSl9KTtqLkVuY3J5cHRlZFByaXZhdGVLZXk9dzt2YXIgUz15LmRlZmluZSgiRFNBUHJpdmF0ZUtleSIs''@;'; put 'put ''ZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpLHRoaXMua2V5KCJwdWJfa2V5IikuaW50KCksdGhpcy5rZXkoInByaXZfa2V5IikuaW50KCkp''@;'; put 'put ''fSk7ai5EU0FQcml2YXRlS2V5PVMsai5EU0FwYXJhbT15LmRlZmluZSgiRFNBcGFyYW0iLGZ1bmN0aW9uKCl7dGhpcy5pbnQoKX0pO3ZhciBMPXkuZGVmaW5lKCJFQ1BhcmFtZXRlcnMiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe25hbWVkQ3VydmU6dGhpcy5vYmppZCgpfSl9KSxSPXkuZGVm''@;'; put 'put ''aW5lKCJFQ1ByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicHJpdmF0ZUtleSIpLm9jdHN0cigpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIikub3B0aW9uYWwoKS5leHBsaWNpdCgwKS51c2UoTCksdGhpcy5rZXko''@;'; put 'put ''InB1YmxpY0tleSIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMSkuYml0c3RyKCkpfSk7ai5FQ1ByaXZhdGVLZXk9UixqLnNpZ25hdHVyZT15LmRlZmluZSgic2lnbmF0dXJlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJyIikuaW50KCksdGhpcy5rZXkoInMiKS5pbnQoKSl9''@;'; put 'put ''KX0sMzY0MTMoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg4NzU2OCksYz15LmRlZmluZSgiVGltZSIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7dXRjVGltZTp0aGlzLnV0Y3RpbWUoKSxnZW5lcmFsVGltZTp0aGlzLmdlbnRpbWUoKX0pfSkscz15LmRlZmluZSgiQXR0cmlidXRlVHlw''@;'; put 'put ''ZVZhbHVlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0eXBlIikub2JqaWQoKSx0aGlzLmtleSgidmFsdWUiKS5hbnkoKSl9KSxBPXkuZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0i''@;'; put 'put ''KS5vYmppZCgpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIikub3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlvbmFsKCkpfSksdj15LmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIp''@;'; put 'put ''LnVzZShBKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pLEM9eS5kZWZpbmUoIlJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXRvZihzKX0pLHc9eS5kZWZpbmUoIlJETlNlcXVlbmNlIixmdW5jdGlvbigpe3RoaXMuc2Vxb2YoQyl9''@;'; put 'put ''KSxTPXkuZGVmaW5lKCJOYW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtyZG5TZXF1ZW5jZTp0aGlzLnVzZSh3KX0pfSksTD15LmRlZmluZSgiVmFsaWRpdHkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm5vdEJlZm9yZSIpLnVzZShjKSx0aGlzLmtleSgibm90QWZ0''@;'; put 'put ''ZXIiKS51c2UoYykpfSksUj15LmRlZmluZSgiRXh0ZW5zaW9uIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJleHRuSUQiKS5vYmppZCgpLHRoaXMua2V5KCJjcml0aWNhbCIpLmJvb2woKS5kZWYoITEpLHRoaXMua2V5KCJleHRuVmFsdWUiKS5vY3RzdHIoKSl9KSx4PXku''@;'; put 'put ''ZGVmaW5lKCJUQlNDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmV4cGxpY2l0KDApLmludCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInNlcmlhbE51bWJlciIpLmludCgpLHRoaXMua2V5KCJzaWduYXR1cmUiKS51c2UoQSksdGhpcy5r''@;'; put 'put ''ZXkoImlzc3VlciIpLnVzZShTKSx0aGlzLmtleSgidmFsaWRpdHkiKS51c2UoTCksdGhpcy5rZXkoInN1YmplY3QiKS51c2UoUyksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXlJbmZvIikudXNlKHYpLHRoaXMua2V5KCJpc3N1ZXJVbmlxdWVJRCIpLmltcGxpY2l0KDEpLmJpdHN0cigpLm9w''@;'; put 'put ''dGlvbmFsKCksdGhpcy5rZXkoInN1YmplY3RVbmlxdWVJRCIpLmltcGxpY2l0KDIpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5rZXkoImV4dGVuc2lvbnMiKS5leHBsaWNpdCgzKS5zZXFvZihSKS5vcHRpb25hbCgpKX0pLFU9eS5kZWZpbmUoIlg1MDlDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24o''@;'; put 'put ''KXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidGJzQ2VydGlmaWNhdGUiKS51c2UoeCksdGhpcy5rZXkoInNpZ25hdHVyZUFsZ29yaXRobSIpLnVzZShBKSx0aGlzLmtleSgic2lnbmF0dXJlVmFsdWUiKS5iaXRzdHIoKSl9KTtmZS5leHBvcnRzPVV9LDI0MTAxKGZlLGosaCl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciB5PS9Qcm9jLVR5cGU6IDQsRU5DUllQVEVEW1xuXHJdK0RFSy1JbmZvOiBBRVMtKCg/OjEyOCl8KD86MTkyKXwoPzoyNTYpKS1DQkMsKFswLTlBLUhdKylbXG5ccl0rKFswLTlBLXpcblxyKy89XSspW1xuXHJdKy9tLGM9L14tLS0tLUJFR0lOICgoPzouKj8gS0VZKXxDRVJUSUZJ''@;'; put 'put ''Q0FURSktLS0tLS9tLHM9L14tLS0tLUJFR0lOICgoPzouKj8gS0VZKXxDRVJUSUZJQ0FURSktLS0tLShbMC05QS16XG5ccisvPV0rKS0tLS0tRU5EIFwxLS0tLS0kL20sQT1oKDY4MDc4KSx2PWgoMTI0MSksQz1oKDkyODYxKS5CdWZmZXI7ZmUuZXhwb3J0cz1mdW5jdGlvbih3LFMpe3ZhciB4''@;'; put 'put ''LEw9dy50b1N0cmluZygpLFI9TC5tYXRjaCh5KTtpZihSKXt2YXIgSD0iYWVzIitSWzFdLFY9Qy5mcm9tKFJbMl0sImhleCIpLE49Qy5mcm9tKFJbM10ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKSx6PUEoUyxWLnNsaWNlKDAsOCkscGFyc2VJbnQoUlsxXSwxMCkpLmtleSxZPVtd''@;'; put 'put ''LEY9di5jcmVhdGVEZWNpcGhlcml2KEgseixWKTtZLnB1c2goRi51cGRhdGUoTikpLFkucHVzaChGLmZpbmFsKCkpLHg9Qy5jb25jYXQoWSl9ZWxzZXt2YXIgVT1MLm1hdGNoKHMpO3g9Qy5mcm9tKFVbMl0ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKX1yZXR1cm57dGFnOkwubWF0''@;'; put 'put ''Y2goYylbMV0sZGF0YTp4fX19LDc4MTcwKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoMjExMzcpLGM9aCgxNTU3OSkscz1oKDI0MTAxKSxBPWgoMTI0MSksdj1oKDc4Mzk2KS5wYmtkZjJTeW5jLEM9aCg5Mjg2MSkuQnVmZmVyO2Z1bmN0aW9uIFMoTCl7dmFyIFI7Im9iamVjdCI9PXR5''@;'; put 'put ''cGVvZiBMJiYhQy5pc0J1ZmZlcihMKSYmKFI9TC5wYXNzcGhyYXNlLEw9TC5rZXkpLCJzdHJpbmciPT10eXBlb2YgTCYmKEw9Qy5mcm9tKEwpKTt2YXIgVixOLHg9cyhMLFIpLFU9eC50YWcsSD14LmRhdGE7c3dpdGNoKFUpe2Nhc2UiQ0VSVElGSUNBVEUiOk49eS5jZXJ0aWZpY2F0ZS5kZWNv''@;'; put 'put ''ZGUoSCwiZGVyIikudGJzQ2VydGlmaWNhdGUuc3ViamVjdFB1YmxpY0tleUluZm87Y2FzZSJQVUJMSUMgS0VZIjpzd2l0Y2goTnx8KE49eS5QdWJsaWNLZXkuZGVjb2RlKEgsImRlciIpKSxWPU4uYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCIuIikpe2Nhc2UiMS4yLjg0MC4xMTM1NDkuMS4x''@;'; put 'put ''LjEiOnJldHVybiB5LlJTQVB1YmxpY0tleS5kZWNvZGUoTi5zdWJqZWN0UHVibGljS2V5LmRhdGEsImRlciIpO2Nhc2UiMS4yLjg0MC4xMDA0NS4yLjEiOnJldHVybiBOLnN1YmplY3RQcml2YXRlS2V5PU4uc3ViamVjdFB1YmxpY0tleSx7dHlwZToiZWMiLGRhdGE6Tn07Y2FzZSIxLjIuODQw''@;'; put 'put ''LjEwMDQwLjQuMSI6cmV0dXJuIE4uYWxnb3JpdGhtLnBhcmFtcy5wdWJfa2V5PXkuRFNBcGFyYW0uZGVjb2RlKE4uc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKSx7dHlwZToiZHNhIixkYXRhOk4uYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24g''@;'; put 'put ''a2V5IGlkICIrVil9Y2FzZSJFTkNSWVBURUQgUFJJVkFURSBLRVkiOkg9ZnVuY3Rpb24gdyhMLFIpe3ZhciB4PUwuYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5zYWx0LFU9cGFyc2VJbnQoTC5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLml0ZXJzLnRvU3RyaW5nKCks''@;'; put 'put ''MTApLEg9Y1tMLmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5hbGdvLmpvaW4oIi4iKV0sVj1MLmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5pdixOPUwuc3ViamVjdFByaXZhdGVLZXksej1wYXJzZUludChILnNwbGl0KCItIilbMV0sMTApLzgsWT12KFIseCxVLHosInNoYTEiKSxGPUEuY3Jl''@;'; put 'put ''YXRlRGVjaXBoZXJpdihILFksViksVz1bXTtyZXR1cm4gVy5wdXNoKEYudXBkYXRlKE4pKSxXLnB1c2goRi5maW5hbCgpKSxDLmNvbmNhdChXKX0oSD15LkVuY3J5cHRlZFByaXZhdGVLZXkuZGVjb2RlKEgsImRlciIpLFIpO2Nhc2UiUFJJVkFURSBLRVkiOnN3aXRjaChWPShOPXkuUHJpdmF0''@;'; put 'put ''ZUtleS5kZWNvZGUoSCwiZGVyIikpLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4geS5SU0FQcml2YXRlS2V5LmRlY29kZShOLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1''@;'; put 'put ''cm57Y3VydmU6Ti5hbGdvcml0aG0uY3VydmUscHJpdmF0ZUtleTp5LkVDUHJpdmF0ZUtleS5kZWNvZGUoTi5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikucHJpdmF0ZUtleX07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIE4uYWxnb3JpdGhtLnBhcmFtcy5wcml2X2tleT15LkRTQXBh''@;'; put 'put ''cmFtLmRlY29kZShOLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKSx7dHlwZToiZHNhIixwYXJhbXM6Ti5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgaWQgIitWKX1jYXNlIlJTQSBQVUJMSUMgS0VZIjpyZXR1cm4geS5SU0FQdWJsaWNLZXku''@;'; put 'put ''ZGVjb2RlKEgsImRlciIpO2Nhc2UiUlNBIFBSSVZBVEUgS0VZIjpyZXR1cm4geS5SU0FQcml2YXRlS2V5LmRlY29kZShILCJkZXIiKTtjYXNlIkRTQSBQUklWQVRFIEtFWSI6cmV0dXJue3R5cGU6ImRzYSIscGFyYW1zOnkuRFNBUHJpdmF0ZUtleS5kZWNvZGUoSCwiZGVyIil9O2Nhc2UiRUMg''@;'; put 'put ''UFJJVkFURSBLRVkiOnJldHVybntjdXJ2ZTooSD15LkVDUHJpdmF0ZUtleS5kZWNvZGUoSCwiZGVyIikpLnBhcmFtZXRlcnMudmFsdWUscHJpdmF0ZUtleTpILnByaXZhdGVLZXl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSB0eXBlICIrVSl9fVMuc2lnbmF0dXJlPXku''@;'; put 'put ''c2lnbmF0dXJlLGZlLmV4cG9ydHM9U30sNzU5OShmZSl7ZmUuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihoLHkpe2guc3VwZXJfPXksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmgsZW51''@;'; put 'put ''bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9OmZ1bmN0aW9uKGgseSl7aC5zdXBlcl89eTt2YXIgYz1mdW5jdGlvbigpe307Yy5wcm90b3R5cGU9eS5wcm90b3R5cGUsaC5wcm90b3R5cGU9bmV3IGMsaC5wcm90b3R5cGUuY29uc3RydWN0b3I9aH19LDczMDE2KGZl''@;'; put 'put ''KXtmZS5leHBvcnRzPWZ1bmN0aW9uKGgpe3JldHVybiBoJiYib2JqZWN0Ij09dHlwZW9mIGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBoLmNvcHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBoLmZpbGwmJiJmdW5jdGlvbiI9PXR5cGVvZiBoLnJlYWRVSW50OH19LDY2OTIwKGZlLGosaCl7dmFyIHk9aCg2''@;'; put 'put ''NTYwNiksYz0vJVtzZGolXS9nO2ouZm9ybWF0PWZ1bmN0aW9uKEcpe2lmKCFxKEcpKXtmb3IodmFyIEQ9W10scD0wO3A8YXJndW1lbnRzLmxlbmd0aDtwKyspRC5wdXNoKHYoYXJndW1lbnRzW3BdKSk7cmV0dXJuIEQuam9pbigiICIpfXA9MTtmb3IodmFyIEk9YXJndW1lbnRzLHVlPUkubGVu''@;'; put 'put ''Z3RoLG5lPVN0cmluZyhHKS5yZXBsYWNlKGMsZnVuY3Rpb24oUGUpe2lmKCIlJSI9PT1QZSlyZXR1cm4iJSI7aWYocD49dWUpcmV0dXJuIFBlO3N3aXRjaChQZSl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhJW3ArK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIoSVtwKytdKTtjYXNlIiVqIjp0''@;'; put 'put ''cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KElbcCsrXSl9Y2F0Y2h7cmV0dXJuIltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIFBlfX0pLF9lPUlbcF07cDx1ZTtfZT1JWysrcF0pWShfZSl8fCFJZShfZSk/bmUrPSIgIitfZTpuZSs9IiAiK3YoX2UpO3JldHVybiBuZX0sai5kZXByZWNhdGU9''@;'; put 'put ''ZnVuY3Rpb24oRyxEKXtpZihtZShoLmcucHJvY2VzcykpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGouZGVwcmVjYXRlKEcsRCkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtpZighMD09PXkubm9EZXByZWNhdGlvbilyZXR1cm4gRzt2YXIgcD0hMTtyZXR1cm4gZnVuY3Rpb24gSSgpe2lmKCFw''@;'; put 'put ''KXtpZih5LnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKEQpO3kudHJhY2VEZXByZWNhdGlvbj9jb25zb2xlLnRyYWNlKEQpOmNvbnNvbGUuZXJyb3IoRCkscD0hMH1yZXR1cm4gRy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTt2YXIgQSxzPXt9O2Z1bmN0aW9uIHYoRyxEKXt2YXIg''@;'; put 'put ''cD17c2VlbjpbXSxzdHlsaXplOnd9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYocC5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihwLmNvbG9ycz1hcmd1bWVudHNbM10pLHooRCk/cC5zaG93SGlkZGVuPUQ6RCYmai5fZXh0ZW5kKHAsRCksbWUocC5zaG93''@;'; put 'put ''SGlkZGVuKSYmKHAuc2hvd0hpZGRlbj0hMSksbWUocC5kZXB0aCkmJihwLmRlcHRoPTIpLG1lKHAuY29sb3JzKSYmKHAuY29sb3JzPSExKSxtZShwLmN1c3RvbUluc3BlY3QpJiYocC5jdXN0b21JbnNwZWN0PSEwKSxwLmNvbG9ycyYmKHAuc3R5bGl6ZT1DKSxMKHAsRyxwLmRlcHRoKX1mdW5j''@;'; put 'put ''dGlvbiBDKEcsRCl7dmFyIHA9di5zdHlsZXNbRF07cmV0dXJuIHA/Ilx4MWJbIit2LmNvbG9yc1twXVswXSsibSIrRysiXHgxYlsiK3YuY29sb3JzW3BdWzFdKyJtIjpHfWZ1bmN0aW9uIHcoRyxEKXtyZXR1cm4gR31mdW5jdGlvbiBMKEcsRCxwKXtpZihHLmN1c3RvbUluc3BlY3QmJkQmJlgo''@;'; put 'put ''RC5pbnNwZWN0KSYmRC5pbnNwZWN0IT09ai5pbnNwZWN0JiYoIUQuY29uc3RydWN0b3J8fEQuY29uc3RydWN0b3IucHJvdG90eXBlIT09RCkpe3ZhciBJPUQuaW5zcGVjdChwLEcpO3JldHVybiBxKEkpfHwoST1MKEcsSSxwKSksSX12YXIgdWU9ZnVuY3Rpb24gUihHLEQpe2lmKG1lKEQpKXJl''@;'; put 'put ''dHVybiBHLnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKHEoRCkpe3ZhciBwPSInIitKU09OLnN0cmluZ2lmeShEKS5yZXBsYWNlKC9eInwiJC9nLCIiKS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykrIiciO3JldHVybiBHLnN0eWxpemUocCwic3Ry''@;'; put 'put ''aW5nIil9cmV0dXJuIFcoRCk/Ry5zdHlsaXplKCIiK0QsIm51bWJlciIpOnooRCk/Ry5zdHlsaXplKCIiK0QsImJvb2xlYW4iKTpZKEQpP0cuc3R5bGl6ZSgibnVsbCIsIm51bGwiKTp2b2lkIDB9KEcsRCk7aWYodWUpcmV0dXJuIHVlO3ZhciBuZT1PYmplY3Qua2V5cyhEKSxfZT1mdW5jdGlv''@;'; put 'put ''biBTKEcpe3ZhciBEPXt9O3JldHVybiBHLmZvckVhY2goZnVuY3Rpb24ocCxJKXtEW3BdPSEwfSksRH0obmUpO2lmKEcuc2hvd0hpZGRlbiYmKG5lPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEQpKSxxZShEKSYmKG5lLmluZGV4T2YoIm1lc3NhZ2UiKT49MHx8bmUuaW5kZXhPZigiZGVz''@;'; put 'put ''Y3JpcHRpb24iKT49MCkpcmV0dXJuIHgoRCk7aWYoMD09PW5lLmxlbmd0aCl7aWYoWChEKSlyZXR1cm4gRy5zdHlsaXplKCJbRnVuY3Rpb24iKyhELm5hbWU/IjogIitELm5hbWU6IiIpKyJdIiwic3BlY2lhbCIpO2lmKENlKEQpKXJldHVybiBHLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50''@;'; put 'put ''b1N0cmluZy5jYWxsKEQpLCJyZWdleHAiKTtpZihrZShEKSlyZXR1cm4gRy5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoRCksImRhdGUiKTtpZihxZShEKSlyZXR1cm4geChEKX12YXIgYWUsb3Q9IiIsbHQ9ITEsZHQ9WyJ7IiwifSJdO3JldHVybiBOKEQpJiYobHQ9ITAs''@;'; put 'put ''ZHQ9WyJbIiwiXSJdKSxYKEQpJiYob3Q9IiBbRnVuY3Rpb24iKyhELm5hbWU/IjogIitELm5hbWU6IiIpKyJdIiksQ2UoRCkmJihvdD0iICIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEQpKSxrZShEKSYmKG90PSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKEQp''@;'; put 'put ''KSxxZShEKSYmKG90PSIgIit4KEQpKSwwIT09bmUubGVuZ3RofHxsdCYmMCE9RC5sZW5ndGg/cDwwP0NlKEQpP0cuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoRCksInJlZ2V4cCIpOkcuc3R5bGl6ZSgiW09iamVjdF0iLCJzcGVjaWFsIik6KEcuc2Vlbi5wdXNoKEQp''@;'; put 'put ''LGFlPWx0P2Z1bmN0aW9uIFUoRyxELHAsSSx1ZSl7Zm9yKHZhciBuZT1bXSxfZT0wLFBlPUQubGVuZ3RoO19lPFBlOysrX2UpSyhELFN0cmluZyhfZSkpP25lLnB1c2goSChHLEQscCxJLFN0cmluZyhfZSksITApKTpuZS5wdXNoKCIiKTtyZXR1cm4gdWUuZm9yRWFjaChmdW5jdGlvbihvdCl7''@;'; put 'put ''b3QubWF0Y2goL15cZCskLyl8fG5lLnB1c2goSChHLEQscCxJLG90LCEwKSl9KSxuZX0oRyxELHAsX2UsbmUpOm5lLm1hcChmdW5jdGlvbih4ZSl7cmV0dXJuIEgoRyxELHAsX2UseGUsbHQpfSksRy5zZWVuLnBvcCgpLGZ1bmN0aW9uIFYoRyxELHApe3ZhciB1ZT1HLnJlZHVjZShmdW5jdGlv''@;'; put 'put ''bihuZSxfZSl7cmV0dXJuIF9lLmluZGV4T2YoIlxuIiksbmUrX2UucmVwbGFjZSgvXHUwMDFiXFtcZFxkP20vZywiIikubGVuZ3RoKzF9LDApO3JldHVybiB1ZT42MD9wWzBdKygiIj09PUQ/IiI6RCsiXG4gIikrIiAiK0cuam9pbigiLFxuICAiKSsiICIrcFsxXTpwWzBdK0QrIiAiK0cuam9p''@;'; put 'put ''bigiLCAiKSsiICIrcFsxXX0oYWUsb3QsZHQpKTpkdFswXStvdCtkdFsxXX1mdW5jdGlvbiB4KEcpe3JldHVybiJbIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChHKSsiXSJ9ZnVuY3Rpb24gSChHLEQscCxJLHVlLG5lKXt2YXIgX2UsUGUsb3Q7aWYoKG90PU9iamVjdC5nZXRPd25Q''@;'; put 'put ''cm9wZXJ0eURlc2NyaXB0b3IoRCx1ZSl8fHt2YWx1ZTpEW3VlXX0pLmdldD9QZT1HLnN0eWxpemUob3Quc2V0PyJbR2V0dGVyL1NldHRlcl0iOiJbR2V0dGVyXSIsInNwZWNpYWwiKTpvdC5zZXQmJihQZT1HLnN0eWxpemUoIltTZXR0ZXJdIiwic3BlY2lhbCIpKSxLKEksdWUpfHwoX2U9Ilsi''@;'; put 'put ''K3VlKyJdIiksUGV8fChHLnNlZW4uaW5kZXhPZihvdC52YWx1ZSk8MD8oUGU9WShwKT9MKEcsb3QudmFsdWUsbnVsbCk6TChHLG90LnZhbHVlLHAtMSkpLmluZGV4T2YoIlxuIik+LTEmJihQZT1uZT9QZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24obHQpe3JldHVybiIgICIrbHR9KS5qb2lu''@;'; put 'put ''KCJcbiIpLnN1YnN0cigyKToiXG4iK1BlLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihsdCl7cmV0dXJuIiAgICIrbHR9KS5qb2luKCJcbiIpKTpQZT1HLnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLG1lKF9lKSl7aWYobmUmJnVlLm1hdGNoKC9eXGQrJC8pKXJldHVybiBQZTso''@;'; put 'put ''X2U9SlNPTi5zdHJpbmdpZnkoIiIrdWUpKS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8wLTldKikiJC8pPyhfZT1fZS5zdWJzdHIoMSxfZS5sZW5ndGgtMiksX2U9Ry5zdHlsaXplKF9lLCJuYW1lIikpOihfZT1fZS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJyku''@;'; put 'put ''cmVwbGFjZSgvKF4ifCIkKS9nLCInIiksX2U9Ry5zdHlsaXplKF9lLCJzdHJpbmciKSl9cmV0dXJuIF9lKyI6ICIrUGV9ZnVuY3Rpb24gTihHKXtyZXR1cm4gQXJyYXkuaXNBcnJheShHKX1mdW5jdGlvbiB6KEcpe3JldHVybiJib29sZWFuIj09dHlwZW9mIEd9ZnVuY3Rpb24gWShHKXtyZXR1''@;'; put 'put ''cm4gbnVsbD09PUd9ZnVuY3Rpb24gVyhHKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIEd9ZnVuY3Rpb24gcShHKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEd9ZnVuY3Rpb24gbWUoRyl7cmV0dXJuIHZvaWQgMD09PUd9ZnVuY3Rpb24gQ2UoRyl7cmV0dXJuIEllKEcpJiYiW29iamVjdCBSZWdF''@;'; put 'put ''eHBdIj09PWIoRyl9ZnVuY3Rpb24gSWUoRyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBHJiZudWxsIT09R31mdW5jdGlvbiBrZShHKXtyZXR1cm4gSWUoRykmJiJbb2JqZWN0IERhdGVdIj09PWIoRyl9ZnVuY3Rpb24gcWUoRyl7cmV0dXJuIEllKEcpJiYoIltvYmplY3QgRXJyb3JdIj09PWIo''@;'; put 'put ''Ryl8fEcgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24gWChHKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgR31mdW5jdGlvbiBiKEcpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoRyl9ZnVuY3Rpb24gayhHKXtyZXR1cm4gRzwxMD8iMCIrRy50b1N0cmluZygxMCk6''@;'; put 'put ''Ry50b1N0cmluZygxMCl9ai5kZWJ1Z2xvZz1mdW5jdGlvbihHKXtpZihtZShBKSYmKEE9eS5lbnYuTk9ERV9ERUJVR3x8IiIpLEc9Ry50b1VwcGVyQ2FzZSgpLCFzW0ddKWlmKG5ldyBSZWdFeHAoIlxcYiIrRysiXFxiIiwiaSIpLnRlc3QoQSkpe3ZhciBEPXkucGlkO3NbR109ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgcD1qLmZvcm1hdC5hcHBseShqLGFyZ3VtZW50cyk7Y29uc29sZS5lcnJvcigiJXMgJWQ6ICVzIixHLEQscCl9fWVsc2Ugc1tHXT1mdW5jdGlvbigpe307cmV0dXJuIHNbR119LGouaW5zcGVjdD12LHYuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpb''@;'; put 'put ''NCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSx2LnN0eWxlcz17c3BlY2lhbDoi''@;'; put 'put ''Y3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LGouaXNBcnJheT1OLGouaXNCb29sZWFuPXosai5pc051bGw9WSxqLmlzTnVsbE9yVW5kZWZp''@;'; put 'put ''bmVkPWZ1bmN0aW9uIEYoRyl7cmV0dXJuIG51bGw9PUd9LGouaXNOdW1iZXI9VyxqLmlzU3RyaW5nPXEsai5pc1N5bWJvbD1mdW5jdGlvbiByZShHKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIEd9LGouaXNVbmRlZmluZWQ9bWUsai5pc1JlZ0V4cD1DZSxqLmlzT2JqZWN0PUllLGouaXNEYXRl''@;'; put 'put ''PWtlLGouaXNFcnJvcj1xZSxqLmlzRnVuY3Rpb249WCxqLmlzUHJpbWl0aXZlPWZ1bmN0aW9uIGYoRyl7cmV0dXJuIG51bGw9PT1HfHwiYm9vbGVhbiI9PXR5cGVvZiBHfHwibnVtYmVyIj09dHlwZW9mIEd8fCJzdHJpbmciPT10eXBlb2YgR3x8InN5bWJvbCI9PXR5cGVvZiBHfHx0eXBlb2Yg''@;'; put 'put ''Rz4idSJ9LGouaXNCdWZmZXI9aCg3MzAxNik7dmFyIE09WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXTtmdW5jdGlvbiBLKEcsRCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2Fs''@;'; put 'put ''bChHLEQpfWoubG9nPWZ1bmN0aW9uKCl7Y29uc29sZS5sb2coIiVzIC0gJXMiLGZ1bmN0aW9uIEIoKXt2YXIgRz1uZXcgRGF0ZSxEPVtrKEcuZ2V0SG91cnMoKSksayhHLmdldE1pbnV0ZXMoKSksayhHLmdldFNlY29uZHMoKSldLmpvaW4oIjoiKTtyZXR1cm5bRy5nZXREYXRlKCksTVtHLmdl''@;'; put 'put ''dE1vbnRoKCldLERdLmpvaW4oIiAiKX0oKSxqLmZvcm1hdC5hcHBseShqLGFyZ3VtZW50cykpfSxqLmluaGVyaXRzPWgoNzU5OSksai5fZXh0ZW5kPWZ1bmN0aW9uKEcsRCl7aWYoIUR8fCFJZShEKSlyZXR1cm4gRztmb3IodmFyIHA9T2JqZWN0LmtleXMoRCksST1wLmxlbmd0aDtJLS07KUdb''@;'; put 'put ''cFtJXV09RFtwW0ldXTtyZXR1cm4gR319LDQzNjI3KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNjU2MDYpLGM9IndpbjMyIj09PXkucGxhdGZvcm0scz1oKDY2OTIwKTtmdW5jdGlvbiBBKE4seil7Zm9yKHZhciBZPVtdLEY9MDtGPE4ubGVuZ3RoO0YrKyl7dmFyIFc9TltGXTshV3x8''@;'; put 'put ''Ii4iPT09V3x8KCIuLiI9PT1XP1kubGVuZ3RoJiYiLi4iIT09WVtZLmxlbmd0aC0xXT9ZLnBvcCgpOnomJlkucHVzaCgiLi4iKTpZLnB1c2goVykpfXJldHVybiBZfWZ1bmN0aW9uIHYoTil7Zm9yKHZhciB6PU4ubGVuZ3RoLTEsWT0wO1k8PXomJiFOW1ldO1krKyk7Zm9yKHZhciBGPXo7Rj49''@;'; put 'put ''MCYmIU5bRl07Ri0tKTtyZXR1cm4gMD09PVkmJkY9PT16P046WT5GP1tdOk4uc2xpY2UoWSxGKzEpfXZhciBDPS9eKFthLXpBLVpdOnxbXFxcL117Mn1bXlxcXC9dK1tcXFwvXStbXlxcXC9dKyk/KFtcXFwvXSk/KFtcc1xTXSo/KSQvLHc9L14oW1xzXFNdKj8pKCg/OlwuezEsMn18W15cXFwv''@;'; put 'put ''XSs/fCkoXC5bXi5cL1xcXSp8KSkoPzpbXFxcL10qKSQvLFM9e307ZnVuY3Rpb24gTChOKXt2YXIgej1DLmV4ZWMoTiksWT0oelsxXXx8IiIpKyh6WzJdfHwiIiksVz13LmV4ZWMoelszXXx8IiIpO3JldHVybltZLFdbMV0sV1syXSxXWzNdXX1mdW5jdGlvbiBSKE4pe3ZhciB6PUMuZXhlYyhO''@;'; put 'put ''KSxZPXpbMV18fCIiLEY9ISFZJiYiOiIhPT1ZWzFdO3JldHVybntkZXZpY2U6WSxpc1VuYzpGLGlzQWJzb2x1dGU6Rnx8ISF6WzJdLHRhaWw6elszXX19ZnVuY3Rpb24geChOKXtyZXR1cm4iXFxcXCIrTi5yZXBsYWNlKC9eW1xcXC9dKy8sIiIpLnJlcGxhY2UoL1tcXFwvXSsvZywiXFwiKX1T''@;'; put 'put ''LnJlc29sdmU9ZnVuY3Rpb24oKXtmb3IodmFyIE49IiIsej0iIixZPSExLEY9YXJndW1lbnRzLmxlbmd0aC0xO0Y+PS0xO0YtLSl7dmFyIFc7aWYoRj49MD9XPWFyZ3VtZW50c1tGXTpOPyghKFc9eS5lbnZbIj0iK05dKXx8Vy5zdWJzdHIoMCwzKS50b0xvd2VyQ2FzZSgpIT09Ti50b0xvd2Vy''@;'; put 'put ''Q2FzZSgpKyJcXCIpJiYoVz1OKyJcXCIpOlc9eS5jd2QoKSwhcy5pc1N0cmluZyhXKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO2lmKFcpe3ZhciBxPVIoVykscmU9cS5kZXZpY2UsbWU9cS5pc1VuYyxDZT1xLmlzQWJz''@;'; put 'put ''b2x1dGUsSWU9cS50YWlsO2lmKCghcmV8fCFOfHxyZS50b0xvd2VyQ2FzZSgpPT09Ti50b0xvd2VyQ2FzZSgpKSYmKE58fChOPXJlKSxZfHwoej1JZSsiXFwiK3osWT1DZSksTiYmWSkpYnJlYWt9fXJldHVybiBtZSYmKE49eChOKSksTisoWT8iXFwiOiIiKSsoej1BKHouc3BsaXQoL1tcXFwv''@;'; put 'put ''XSsvKSwhWSkuam9pbigiXFwiKSl8fCIuIn0sUy5ub3JtYWxpemU9ZnVuY3Rpb24oTil7dmFyIHo9UihOKSxZPXouZGV2aWNlLEY9ei5pc1VuYyxXPXouaXNBYnNvbHV0ZSxxPXoudGFpbCxyZT0vW1xcXC9dJC8udGVzdChxKTtyZXR1cm4hKHE9QShxLnNwbGl0KC9bXFxcL10rLyksIVcpLmpv''@;'; put 'put ''aW4oIlxcIikpJiYhVyYmKHE9Ii4iKSxxJiZyZSYmKHErPSJcXCIpLEYmJihZPXgoWSkpLFkrKFc/IlxcIjoiIikrcX0sUy5pc0Fic29sdXRlPWZ1bmN0aW9uKE4pe3JldHVybiBSKE4pLmlzQWJzb2x1dGV9LFMuam9pbj1mdW5jdGlvbigpe2Zvcih2YXIgTj1bXSx6PTA7ejxhcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoO3orKyl7dmFyIFk9YXJndW1lbnRzW3pdO2lmKCFzLmlzU3RyaW5nKFkpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJpbmdzIik7WSYmTi5wdXNoKFkpfXZhciBGPU4uam9pbigiXFwiKTtyZXR1cm4vXltcXFwvXXsyfVteXFxc''@;'; put 'put ''L10vLnRlc3QoTlswXSl8fChGPUYucmVwbGFjZSgvXltcXFwvXXsyLH0vLCJcXCIpKSxTLm5vcm1hbGl6ZShGKX0sUy5yZWxhdGl2ZT1mdW5jdGlvbihOLHope049Uy5yZXNvbHZlKE4pLHo9Uy5yZXNvbHZlKHopO2Zvcih2YXIgWT1OLnRvTG93ZXJDYXNlKCksRj16LnRvTG93ZXJDYXNlKCks''@;'; put 'put ''Vz12KHouc3BsaXQoIlxcIikpLHE9dihZLnNwbGl0KCJcXCIpKSxyZT12KEYuc3BsaXQoIlxcIikpLG1lPU1hdGgubWluKHEubGVuZ3RoLHJlLmxlbmd0aCksQ2U9bWUsSWU9MDtJZTxtZTtJZSsrKWlmKHFbSWVdIT09cmVbSWVdKXtDZT1JZTticmVha31pZigwPT1DZSlyZXR1cm4gejt2YXIg''@;'; put 'put ''a2U9W107Zm9yKEllPUNlO0llPHEubGVuZ3RoO0llKyspa2UucHVzaCgiLi4iKTtyZXR1cm4oa2U9a2UuY29uY2F0KFcuc2xpY2UoQ2UpKSkuam9pbigiXFwiKX0sUy5fbWFrZUxvbmc9ZnVuY3Rpb24oTil7aWYoIXMuaXNTdHJpbmcoTikpcmV0dXJuIE47aWYoIU4pcmV0dXJuIiI7dmFyIHo9''@;'; put 'put ''Uy5yZXNvbHZlKE4pO3JldHVybi9eW2EtekEtWl1cOlxcLy50ZXN0KHopPyJcXFxcP1xcIit6Oi9eXFxcXFtePy5dLy50ZXN0KHopPyJcXFxcP1xcVU5DXFwiK3ouc3Vic3RyaW5nKDIpOk59LFMuZGlybmFtZT1mdW5jdGlvbihOKXt2YXIgej1MKE4pLFk9elswXSxGPXpbMV07cmV0dXJuIFl8''@;'; put 'put ''fEY/KEYmJihGPUYuc3Vic3RyKDAsRi5sZW5ndGgtMSkpLFkrRik6Ii4ifSxTLmJhc2VuYW1lPWZ1bmN0aW9uKE4seil7dmFyIFk9TChOKVsyXTtyZXR1cm4geiYmWS5zdWJzdHIoLTEqei5sZW5ndGgpPT09eiYmKFk9WS5zdWJzdHIoMCxZLmxlbmd0aC16Lmxlbmd0aCkpLFl9LFMuZXh0bmFt''@;'; put 'put ''ZT1mdW5jdGlvbihOKXtyZXR1cm4gTChOKVszXX0sUy5mb3JtYXQ9ZnVuY3Rpb24oTil7aWYoIXMuaXNPYmplY3QoTikpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICdwYXRoT2JqZWN0JyBtdXN0IGJlIGFuIG9iamVjdCwgbm90ICIrdHlwZW9mIE4pO2lmKCFzLmlzU3RyaW5nKE4u''@;'; put 'put ''cm9vdHx8IiIpKXRocm93IG5ldyBUeXBlRXJyb3IoIidwYXRoT2JqZWN0LnJvb3QnIG11c3QgYmUgYSBzdHJpbmcgb3IgdW5kZWZpbmVkLCBub3QgIit0eXBlb2YgTi5yb290KTt2YXIgWT1OLmRpcixGPU4uYmFzZXx8IiI7cmV0dXJuIFk/WVtZLmxlbmd0aC0xXT09PVMuc2VwP1krRjpZK1Mu''@;'; put 'put ''c2VwK0Y6Rn0sUy5wYXJzZT1mdW5jdGlvbihOKXtpZighcy5pc1N0cmluZyhOKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhTdHJpbmcnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCAiK3R5cGVvZiBOKTt2YXIgej1MKE4pO2lmKCF6fHw0IT09ei5sZW5ndGgpdGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiSW52YWxpZCBwYXRoICciK04rIiciKTtyZXR1cm57cm9vdDp6WzBdLGRpcjp6WzBdK3pbMV0uc2xpY2UoMCwtMSksYmFzZTp6WzJdLGV4dDp6WzNdLG5hbWU6elsyXS5zbGljZSgwLHpbMl0ubGVuZ3RoLXpbM10ubGVuZ3RoKX19LFMuc2VwPSJcXCIsUy5kZWxpbWl0ZXI9''@;'; put 'put ''IjsiO3ZhciBVPS9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLyxIPXt9O2Z1bmN0aW9uIFYoTil7cmV0dXJuIFUuZXhlYyhOKS5zbGljZSgxKX1ILnJlc29sdmU9ZnVuY3Rpb24oKXtmb3IodmFyIE49IiIsej0hMSxZPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGgtMTtZPj0tMSYmIXo7WS0tKXt2YXIgRj1ZPj0wP2FyZ3VtZW50c1tZXTp5LmN3ZCgpO2lmKCFzLmlzU3RyaW5nKEYpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7RiYmKE49RisiLyIrTix6PSIvIj09''@;'; put 'put ''PUZbMF0pfXJldHVybih6PyIvIjoiIikrKE49QShOLnNwbGl0KCIvIiksIXopLmpvaW4oIi8iKSl8fCIuIn0sSC5ub3JtYWxpemU9ZnVuY3Rpb24oTil7dmFyIHo9SC5pc0Fic29sdXRlKE4pLFk9TiYmIi8iPT09TltOLmxlbmd0aC0xXTtyZXR1cm4hKE49QShOLnNwbGl0KCIvIiksIXopLmpv''@;'; put 'put ''aW4oIi8iKSkmJiF6JiYoTj0iLiIpLE4mJlkmJihOKz0iLyIpLCh6PyIvIjoiIikrTn0sSC5pc0Fic29sdXRlPWZ1bmN0aW9uKE4pe3JldHVybiIvIj09PU4uY2hhckF0KDApfSxILmpvaW49ZnVuY3Rpb24oKXtmb3IodmFyIE49IiIsej0wO3o8YXJndW1lbnRzLmxlbmd0aDt6Kyspe3ZhciBZ''@;'; put 'put ''PWFyZ3VtZW50c1t6XTtpZighcy5pc1N0cmluZyhZKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncyIpO1kmJihOKz1OPyIvIitZOlkpfXJldHVybiBILm5vcm1hbGl6ZShOKX0sSC5yZWxhdGl2ZT1mdW5jdGlvbihOLHope049SC5y''@;'; put 'put ''ZXNvbHZlKE4pLnN1YnN0cigxKSx6PUgucmVzb2x2ZSh6KS5zdWJzdHIoMSk7Zm9yKHZhciBZPXYoTi5zcGxpdCgiLyIpKSxGPXYoei5zcGxpdCgiLyIpKSxXPU1hdGgubWluKFkubGVuZ3RoLEYubGVuZ3RoKSxxPVcscmU9MDtyZTxXO3JlKyspaWYoWVtyZV0hPT1GW3JlXSl7cT1yZTticmVh''@;'; put 'put ''a312YXIgbWU9W107Zm9yKHJlPXE7cmU8WS5sZW5ndGg7cmUrKyltZS5wdXNoKCIuLiIpO3JldHVybihtZT1tZS5jb25jYXQoRi5zbGljZShxKSkpLmpvaW4oIi8iKX0sSC5fbWFrZUxvbmc9ZnVuY3Rpb24oTil7cmV0dXJuIE59LEguZGlybmFtZT1mdW5jdGlvbihOKXt2YXIgej1WKE4pLFk9''@;'; put 'put ''elswXSxGPXpbMV07cmV0dXJuIFl8fEY/KEYmJihGPUYuc3Vic3RyKDAsRi5sZW5ndGgtMSkpLFkrRik6Ii4ifSxILmJhc2VuYW1lPWZ1bmN0aW9uKE4seil7dmFyIFk9VihOKVsyXTtyZXR1cm4geiYmWS5zdWJzdHIoLTEqei5sZW5ndGgpPT09eiYmKFk9WS5zdWJzdHIoMCxZLmxlbmd0aC16''@;'; put 'put ''Lmxlbmd0aCkpLFl9LEguZXh0bmFtZT1mdW5jdGlvbihOKXtyZXR1cm4gVihOKVszXX0sSC5mb3JtYXQ9ZnVuY3Rpb24oTil7aWYoIXMuaXNPYmplY3QoTikpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICdwYXRoT2JqZWN0JyBtdXN0IGJlIGFuIG9iamVjdCwgbm90ICIrdHlwZW9m''@;'; put 'put ''IE4pO2lmKCFzLmlzU3RyaW5nKE4ucm9vdHx8IiIpKXRocm93IG5ldyBUeXBlRXJyb3IoIidwYXRoT2JqZWN0LnJvb3QnIG11c3QgYmUgYSBzdHJpbmcgb3IgdW5kZWZpbmVkLCBub3QgIit0eXBlb2YgTi5yb290KTtyZXR1cm4oTi5kaXI/Ti5kaXIrSC5zZXA6IiIpKyhOLmJhc2V8fCIiKX0s''@;'; put 'put ''SC5wYXJzZT1mdW5jdGlvbihOKXtpZighcy5pc1N0cmluZyhOKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhTdHJpbmcnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCAiK3R5cGVvZiBOKTt2YXIgej1WKE4pO2lmKCF6fHw0IT09ei5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiSW52YWxpZCBwYXRoICciK04rIiciKTtyZXR1cm4gelsxXT16WzFdfHwiIix6WzJdPXpbMl18fCIiLHpbM109elszXXx8IiIse3Jvb3Q6elswXSxkaXI6elswXSt6WzFdLnNsaWNlKDAsLTEpLGJhc2U6elsyXSxleHQ6elszXSxuYW1lOnpbMl0uc2xpY2UoMCx6WzJdLmxlbmd0aC16WzNd''@;'; put 'put ''Lmxlbmd0aCl9fSxILnNlcD0iLyIsSC5kZWxpbWl0ZXI9IjoiLGZlLmV4cG9ydHM9Yz9TOkgsZmUuZXhwb3J0cy5wb3NpeD1ILGZlLmV4cG9ydHMud2luMzI9U30sNzgzOTYoZmUsaixoKXsidXNlIHN0cmljdCI7ai5wYmtkZjI9aCg0MzgzMiksai5wYmtkZjJTeW5jPWgoMjEzNTIpfSw0Mzgz''@;'; put 'put ''MihmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgQyxSLHk9aCg5Mjg2MSkuQnVmZmVyLGM9aCg2NDE5Nikscz1oKDI0NTUpLEE9aCgyMTM1Miksdj1oKDkzMzgyKSx3PWguZy5jcnlwdG8mJmguZy5jcnlwdG8uc3VidGxlLFM9e3NoYToiU0hBLTEiLCJzaGEtMSI6IlNIQS0xIixzaGExOiJTSEEt''@;'; put 'put ''MSIsc2hhMjU2OiJTSEEtMjU2Iiwic2hhLTI1NiI6IlNIQS0yNTYiLHNoYTM4NDoiU0hBLTM4NCIsInNoYS0zODQiOiJTSEEtMzg0Iiwic2hhLTUxMiI6IlNIQS01MTIiLHNoYTUxMjoiU0hBLTUxMiJ9LEw9W107ZnVuY3Rpb24geCgpe3JldHVybiBSfHwoUj1oLmcucHJvY2VzcyYmaC5nLnBy''@;'; put 'put ''b2Nlc3MubmV4dFRpY2s/aC5nLnByb2Nlc3MubmV4dFRpY2s6aC5nLnF1ZXVlTWljcm90YXNrP2guZy5xdWV1ZU1pY3JvdGFzazpoLmcuc2V0SW1tZWRpYXRlP2guZy5zZXRJbW1lZGlhdGU6aC5nLnNldFRpbWVvdXQpfWZ1bmN0aW9uIFUoTix6LFksRixXKXtyZXR1cm4gdy5pbXBvcnRLZXko''@;'; put 'put ''InJhdyIsTix7bmFtZToiUEJLREYyIn0sITEsWyJkZXJpdmVCaXRzIl0pLnRoZW4oZnVuY3Rpb24ocSl7cmV0dXJuIHcuZGVyaXZlQml0cyh7bmFtZToiUEJLREYyIixzYWx0OnosaXRlcmF0aW9uczpZLGhhc2g6e25hbWU6V319LHEsRjw8Myl9KS50aGVuKGZ1bmN0aW9uKHEpe3JldHVybiB5''@;'; put 'put ''LmZyb20ocSl9KX1mZS5leHBvcnRzPWZ1bmN0aW9uKE4seixZLEYsVyxxKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgVyYmKHE9VyxXPXZvaWQgMCksRj1jKFksRiksTj12KE4scywiUGFzc3dvcmQiKSx6PXYoeixzLCJTYWx0IiksImZ1bmN0aW9uIiE9dHlwZW9mIHEpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJObyBjYWxsYmFjayBwcm92aWRlZCB0byBwYmtkZjIiKTt2YXIgcmU9U1soVz1XfHwic2hhMSIpLnRvTG93ZXJDYXNlKCldO3JlJiYiZnVuY3Rpb24iPT10eXBlb2YgaC5nLlByb21pc2U/ZnVuY3Rpb24gVihOLHope04udGhlbihmdW5jdGlvbihZKXt4KCkoZnVuY3Rpb24oKXt6KG51bGws''@;'; put 'put ''WSl9KX0sZnVuY3Rpb24oWSl7eCgpKGZ1bmN0aW9uKCl7eihZKX0pfSl9KGZ1bmN0aW9uIEgoTil7aWYoaC5nLnByb2Nlc3MmJiFoLmcucHJvY2Vzcy5icm93c2VyfHwhd3x8IXcuaW1wb3J0S2V5fHwhdy5kZXJpdmVCaXRzKXJldHVybiBQcm9taXNlLnJlc29sdmUoITEpO2lmKHZvaWQgMCE9''@;'; put 'put ''PUxbTl0pcmV0dXJuIExbTl07dmFyIHo9VShDPUN8fHkuYWxsb2MoOCksQywxMCwxMjgsTikudGhlbihmdW5jdGlvbigpe3JldHVybiEwfSxmdW5jdGlvbigpe3JldHVybiExfSk7cmV0dXJuIExbTl09eix6fShyZSkudGhlbihmdW5jdGlvbihtZSl7cmV0dXJuIG1lP1UoTix6LFksRixyZSk6''@;'; put 'put ''QShOLHosWSxGLFcpfSkscSk6eCgpKGZ1bmN0aW9uKCl7dmFyIG1lO3RyeXttZT1BKE4seixZLEYsVyl9Y2F0Y2goQ2Upe3JldHVybiB2b2lkIHEoQ2UpfXEobnVsbCxtZSl9KX19LDI0NTUoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIGMseT1oKDY1NjA2KTtjPWguZy5wcm9jZXNzJiZoLmcu''@;'; put 'put ''cHJvY2Vzcy5icm93c2VyPyJ1dGYtOCI6aC5nLnByb2Nlc3MmJmguZy5wcm9jZXNzLnZlcnNpb24/cGFyc2VJbnQoeS52ZXJzaW9uLnNwbGl0KCIuIilbMF0uc2xpY2UoMSksMTApPj02PyJ1dGYtOCI6ImJpbmFyeSI6InV0Zi04IixmZS5leHBvcnRzPWN9LDY0MTk2KGZlKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIGo9aXNGaW5pdGUsaD1NYXRoLnBvdygyLDMwKS0xO2ZlLmV4cG9ydHM9ZnVuY3Rpb24oeSxjKXtpZigibnVtYmVyIiE9dHlwZW9mIHkpdGhyb3cgbmV3IFR5cGVFcnJvcigiSXRlcmF0aW9ucyBub3QgYSBudW1iZXIiKTtpZih5PDB8fCFqKHkpKXRocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IkJhZCBpdGVyYXRpb25zIik7aWYoIm51bWJlciIhPXR5cGVvZiBjKXRocm93IG5ldyBUeXBlRXJyb3IoIktleSBsZW5ndGggbm90IGEgbnVtYmVyIik7aWYoYzwwfHxjPmh8fGMhPWMpdGhyb3cgbmV3IFR5cGVFcnJvcigiQmFkIGtleSBsZW5ndGgiKTtyZXR1cm4gYyswfX0sMjEzNTIoZmUs''@;'; put 'put ''aixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCgyMDMyMCksYz1oKDY2MDExKSxzPWgoNjI4MDIpLEE9aCg5Mjg2MSkuQnVmZmVyLHY9aCg2NDE5NiksQz1oKDI0NTUpLHc9aCg5MzM4MiksUz1BLmFsbG9jKDEyOCksTD17X19wcm90b19fOm51bGwsbWQ1OjE2LHNoYTE6MjAsc2hhMjI0OjI4LHNo''@;'; put 'put ''YTI1NjozMixzaGEzODQ6NDgsc2hhNTEyOjY0LCJzaGE1MTItMjU2IjozMixyaXBlbWQxNjA6MjAscm1kMTYwOjIwfSxSPXtfX3Byb3RvX186bnVsbCwic2hhLTEiOiJzaGExIiwic2hhLTIyNCI6InNoYTIyNCIsInNoYS0yNTYiOiJzaGEyNTYiLCJzaGEtMzg0Ijoic2hhMzg0Iiwic2hhLTUx''@;'; put 'put ''MiI6InNoYTUxMiIsInJpcGVtZC0xNjAiOiJyaXBlbWQxNjAifTtmdW5jdGlvbiB4KE4pe3JldHVybihuZXcgYykudXBkYXRlKE4pLmRpZ2VzdCgpfWZ1bmN0aW9uIEgoTix6LFkpe3ZhciBGPWZ1bmN0aW9uIFUoTil7cmV0dXJuInJtZDE2MCI9PT1OfHwicmlwZW1kMTYwIj09PU4/eDoibWQ1''@;'; put 'put ''Ij09PU4/eTpmdW5jdGlvbiB6KFkpe3JldHVybiBzKE4pLnVwZGF0ZShZKS5kaWdlc3QoKX19KE4pLFc9InNoYTUxMiI9PT1OfHwic2hhMzg0Ij09PU4/MTI4OjY0O3oubGVuZ3RoPlc/ej1GKHopOnoubGVuZ3RoPFcmJih6PUEuY29uY2F0KFt6LFNdLFcpKTtmb3IodmFyIHE9QS5hbGxvY1Vu''@;'; put 'put ''c2FmZShXK0xbTl0pLHJlPUEuYWxsb2NVbnNhZmUoVytMW05dKSxtZT0wO21lPFc7bWUrKylxW21lXT01NF56W21lXSxyZVttZV09OTJeelttZV07dmFyIENlPUEuYWxsb2NVbnNhZmUoVytZKzQpO3EuY29weShDZSwwLDAsVyksdGhpcy5pcGFkMT1DZSx0aGlzLmlwYWQyPXEsdGhpcy5vcGFk''@;'; put 'put ''PXJlLHRoaXMuYWxnPU4sdGhpcy5ibG9ja3NpemU9Vyx0aGlzLmhhc2g9Rix0aGlzLnNpemU9TFtOXX1ILnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oTix6KXtyZXR1cm4gTi5jb3B5KHosdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaCh6KS5jb3B5KHRoaXMub3BhZCx0aGlzLmJsb2Nrc2l6ZSks''@;'; put 'put ''dGhpcy5oYXNoKHRoaXMub3BhZCl9LGZlLmV4cG9ydHM9ZnVuY3Rpb24gVihOLHosWSxGLFcpe0Y9dihZLEYpLE49dyhOLEMsIlBhc3N3b3JkIiksej13KHosQywiU2FsdCIpO3ZhciBxPShXfHwic2hhMSIpLnRvTG93ZXJDYXNlKCkscmU9UltxXXx8cSxtZT1MW3JlXTtpZigibnVtYmVyIiE9''@;'; put 'put ''dHlwZW9mIG1lfHwhbWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGlnZXN0IGFsZ29yaXRobSBub3Qgc3VwcG9ydGVkOiAiK1cpO3ZhciBDZT1uZXcgSChyZSxOLHoubGVuZ3RoKSxJZT1BLmFsbG9jVW5zYWZlKEYpLGtlPUEuYWxsb2NVbnNhZmUoei5sZW5ndGgrNCk7ei5jb3B5KGtlLDAsMCx6''@;'; put 'put ''Lmxlbmd0aCk7Zm9yKHZhciBxZT0wLFg9bWUsZj1NYXRoLmNlaWwoRi9YKSxiPTE7Yjw9ZjtiKyspe2tlLndyaXRlVUludDMyQkUoYix6Lmxlbmd0aCk7Zm9yKHZhciBrPUNlLnJ1bihrZSxDZS5pcGFkMSksTT1rLEI9MTtCPFk7QisrKXtNPUNlLnJ1bihNLENlLmlwYWQyKTtmb3IodmFyIEs9''@;'; put 'put ''MDtLPFg7SysrKWtbS11ePU1bS119ay5jb3B5KEllLHFlKSxxZSs9WH1yZXR1cm4gSWV9fSw5MzM4MihmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDkyODYxKS5CdWZmZXIsYz1oKDE1Mzc3KSxzPXR5cGVvZiBVaW50OEFycmF5PCJ1Iix2PXMmJnR5cGVvZiBBcnJheUJ1ZmZlcjwidSIm''@;'; put 'put ''JkFycmF5QnVmZmVyLmlzVmlldztmZS5leHBvcnRzPWZ1bmN0aW9uKEMsdyxTKXtpZigic3RyaW5nIj09dHlwZW9mIEN8fHkuaXNCdWZmZXIoQyl8fHMmJkMgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx2JiZ2KEMpKXJldHVybiBjKEMsdyk7dGhyb3cgbmV3IFR5cGVFcnJvcihTKyIgbXVzdCBi''@;'; put 'put ''ZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgVWludDhBcnJheSwgb3IgYSBEYXRhVmlldyIpfX0sNzY1NzgoZmUpeyJ1c2Ugc3RyaWN0IjtmZS5leHBvcnRzPVsiRmxvYXQxNkFycmF5IiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIkludDMy''@;'; put 'put ''QXJyYXkiLCJVaW50OEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiQmlnSW50NjRBcnJheSIsIkJpZ1VpbnQ2NEFycmF5Il19LDMzMjI1KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNjU2MDYpO2ZlLmV4cG9ydHM9dHlwZW9mIHk+''@;'; put 'put ''InUifHwheS52ZXJzaW9ufHwwPT09eS52ZXJzaW9uLmluZGV4T2YoInYwLiIpfHwwPT09eS52ZXJzaW9uLmluZGV4T2YoInYxLiIpJiYwIT09eS52ZXJzaW9uLmluZGV4T2YoInYxLjguIik/e25leHRUaWNrOmZ1bmN0aW9uIGMocyxBLHYsQyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHMpdGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcignImNhbGxiYWNrIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTt2YXIgUyxMLHc9YXJndW1lbnRzLmxlbmd0aDtzd2l0Y2godyl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4geS5uZXh0VGljayhzKTtjYXNlIDI6cmV0dXJuIHkubmV4dFRpY2soZnVuY3Rpb24o''@;'; put 'put ''KXtzLmNhbGwobnVsbCxBKX0pO2Nhc2UgMzpyZXR1cm4geS5uZXh0VGljayhmdW5jdGlvbigpe3MuY2FsbChudWxsLEEsdil9KTtjYXNlIDQ6cmV0dXJuIHkubmV4dFRpY2soZnVuY3Rpb24oKXtzLmNhbGwobnVsbCxBLHYsQyl9KTtkZWZhdWx0OmZvcihTPW5ldyBBcnJheSh3LTEpLEw9MDtM''@;'; put 'put ''PFMubGVuZ3RoOylTW0wrK109YXJndW1lbnRzW0xdO3JldHVybiB5Lm5leHRUaWNrKGZ1bmN0aW9uKCl7cy5hcHBseShudWxsLFMpfSl9fX06eX0sNjU2MDYoZmUpe3ZhciBoLHksaj1mZS5leHBvcnRzPXt9O2Z1bmN0aW9uIGMoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5v''@;'; put 'put ''dCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBzKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBBKFYpe2lmKGg9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KFYsMCk7aWYoKGg9PT1jfHwhaCkmJnNldFRpbWVvdXQp''@;'; put 'put ''cmV0dXJuIGg9c2V0VGltZW91dCxzZXRUaW1lb3V0KFYsMCk7dHJ5e3JldHVybiBoKFYsMCl9Y2F0Y2h7dHJ5e3JldHVybiBoLmNhbGwobnVsbCxWLDApfWNhdGNoe3JldHVybiBoLmNhbGwodGhpcyxWLDApfX19IWZ1bmN0aW9uKCl7dHJ5e2g9ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVv''@;'; put 'put ''dXQ/c2V0VGltZW91dDpjfWNhdGNoe2g9Y310cnl7eT0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDpzfWNhdGNoe3k9c319KCk7dmFyIFMsQz1bXSx3PSExLEw9LTE7ZnVuY3Rpb24gUigpeyF3fHwhU3x8KHc9ITEsUy5sZW5ndGg/Qz1TLmNvbmNhdChDKTpM''@;'; put 'put ''PS0xLEMubGVuZ3RoJiZ4KCkpfWZ1bmN0aW9uIHgoKXtpZighdyl7dmFyIFY9QShSKTt3PSEwO2Zvcih2YXIgTj1DLmxlbmd0aDtOOyl7Zm9yKFM9QyxDPVtdOysrTDxOOylTJiZTW0xdLnJ1bigpO0w9LTEsTj1DLmxlbmd0aH1TPW51bGwsdz0hMSxmdW5jdGlvbiB2KFYpe2lmKHk9PT1jbGVh''@;'; put 'put ''clRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChWKTtpZigoeT09PXN8fCF5KSYmY2xlYXJUaW1lb3V0KXJldHVybiB5PWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoVik7dHJ5e3JldHVybiB5KFYpfWNhdGNoe3RyeXtyZXR1cm4geS5jYWxsKG51bGwsVil9Y2F0Y2h7cmV0dXJuIHkuY2Fs''@;'; put 'put ''bCh0aGlzLFYpfX19KFYpfX1mdW5jdGlvbiBVKFYsTil7dGhpcy5mdW49Vix0aGlzLmFycmF5PU59ZnVuY3Rpb24gSCgpe31qLm5leHRUaWNrPWZ1bmN0aW9uKFYpe3ZhciBOPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHo9MTt6''@;'; put 'put ''PGFyZ3VtZW50cy5sZW5ndGg7eisrKU5bei0xXT1hcmd1bWVudHNbel07Qy5wdXNoKG5ldyBVKFYsTikpLDE9PT1DLmxlbmd0aCYmIXcmJkEoeCl9LFUucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LGoudGl0bGU9ImJyb3dzZXIiLGou''@;'; put 'put ''YnJvd3Nlcj0hMCxqLmVudj17fSxqLmFyZ3Y9W10sai52ZXJzaW9uPSIiLGoudmVyc2lvbnM9e30sai5vbj1ILGouYWRkTGlzdGVuZXI9SCxqLm9uY2U9SCxqLm9mZj1ILGoucmVtb3ZlTGlzdGVuZXI9SCxqLnJlbW92ZUFsbExpc3RlbmVycz1ILGouZW1pdD1ILGoucHJlcGVuZExpc3RlbmVy''@;'; put 'put ''PUgsai5wcmVwZW5kT25jZUxpc3RlbmVyPUgsai5saXN0ZW5lcnM9ZnVuY3Rpb24oVil7cmV0dXJuW119LGouYmluZGluZz1mdW5jdGlvbihWKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGouY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxq''@;'; put 'put ''LmNoZGlyPWZ1bmN0aW9uKFYpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LGoudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LDk3MTY4KGZlLGosaCl7ai5wdWJsaWNFbmNyeXB0PWgoMjg5MDIpLGoucHJpdmF0ZURlY3J5cHQ9aCg3NzM2Miks''@;'; put 'put ''ai5wcml2YXRlRW5jcnlwdD1mdW5jdGlvbihjLHMpe3JldHVybiBqLnB1YmxpY0VuY3J5cHQoYyxzLCEwKX0sai5wdWJsaWNEZWNyeXB0PWZ1bmN0aW9uKGMscyl7cmV0dXJuIGoucHJpdmF0ZURlY3J5cHQoYyxzLCEwKX19LDQ4MjA2KGZlLGosaCl7dmFyIHk9aCg0NzEwOCksYz1oKDkyODYx''@;'; put 'put ''KS5CdWZmZXI7ZnVuY3Rpb24gcyhBKXt2YXIgdj1jLmFsbG9jVW5zYWZlKDQpO3JldHVybiB2LndyaXRlVUludDMyQkUoQSwwKSx2fWZlLmV4cG9ydHM9ZnVuY3Rpb24oQSx2KXtmb3IodmFyIFMsQz1jLmFsbG9jKDApLHc9MDtDLmxlbmd0aDx2OylTPXModysrKSxDPWMuY29uY2F0KFtDLHko''@;'; put 'put ''InNoYTEiKS51cGRhdGUoQSkudXBkYXRlKFMpLmRpZ2VzdCgpXSk7cmV0dXJuIEMuc2xpY2UoMCx2KX19LDgyNTA5KGZlLGosaCl7IWZ1bmN0aW9uKHksYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHMoWCxmKXtpZighWCl0aHJvdyBuZXcgRXJyb3IoZnx8IkFzc2VydGlvbiBmYWlsZWQiKX1m''@;'; put 'put ''dW5jdGlvbiBBKFgsZil7WC5zdXBlcl89Zjt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9Zi5wcm90b3R5cGUsWC5wcm90b3R5cGU9bmV3IGIsWC5wcm90b3R5cGUuY29uc3RydWN0b3I9WH1mdW5jdGlvbiB2KFgsZixiKXtpZih2LmlzQk4oWCkpcmV0dXJuIFg7dGhpcy5uZWdhdGl2''@;'; put 'put ''ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVgmJigoImxlIj09PWZ8fCJiZSI9PT1mKSYmKGI9ZixmPTEwKSx0aGlzLl9pbml0KFh8fDAsZnx8MTAsYnx8ImJlIikpfXZhciBDOyJvYmplY3QiPT10eXBlb2YgeT95LmV4cG9ydHM9djpjLkJO''@;'; put 'put ''PXYsdi5CTj12LHYud29yZFNpemU9MjY7dHJ5e0M9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOmgoNTEwNjkpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gdyhYLGYpe3ZhciBiPVguY2hhckNvZGVBdChmKTtyZXR1cm4gYj49NjUmJmI8''@;'; put 'put ''PTcwP2ItNTU6Yj49OTcmJmI8PTEwMj9iLTg3OmItNDgmMTV9ZnVuY3Rpb24gUyhYLGYsYil7dmFyIGs9dyhYLGIpO3JldHVybiBiLTE+PWYmJihrfD13KFgsYi0xKTw8NCksa31mdW5jdGlvbiBMKFgsZixiLGspe2Zvcih2YXIgTT0wLEI9TWF0aC5taW4oWC5sZW5ndGgsYiksSz1mO0s8QjtL''@;'; put 'put ''Kyspe3ZhciBHPVguY2hhckNvZGVBdChLKS00ODtNKj1rLE0rPUc+PTQ5P0ctNDkrMTA6Rz49MTc/Ry0xNysxMDpHfXJldHVybiBNfXYuaXNCTj1mdW5jdGlvbihmKXtyZXR1cm4gZiBpbnN0YW5jZW9mIHZ8fG51bGwhPT1mJiYib2JqZWN0Ij09dHlwZW9mIGYmJmYuY29uc3RydWN0b3Iud29y''@;'; put 'put ''ZFNpemU9PT12LndvcmRTaXplJiZBcnJheS5pc0FycmF5KGYud29yZHMpfSx2Lm1heD1mdW5jdGlvbihmLGIpe3JldHVybiBmLmNtcChiKT4wP2Y6Yn0sdi5taW49ZnVuY3Rpb24oZixiKXtyZXR1cm4gZi5jbXAoYik8MD9mOmJ9LHYucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGYsYixrKXtp''@;'; put 'put ''ZigibnVtYmVyIj09dHlwZW9mIGYpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZixiLGspO2lmKCJvYmplY3QiPT10eXBlb2YgZilyZXR1cm4gdGhpcy5faW5pdEFycmF5KGYsYixrKTsiaGV4Ij09PWImJihiPTE2KSxzKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpO3ZhciBNPTA7Ii0iPT09KGY9''@;'; put 'put ''Zi50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihNKyssdGhpcy5uZWdhdGl2ZT0xKSxNPGYubGVuZ3RoJiYoMTY9PT1iP3RoaXMuX3BhcnNlSGV4KGYsTSxrKToodGhpcy5fcGFyc2VCYXNlKGYsYixNKSwibGUiPT09ayYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgp''@;'; put 'put ''LGIsaykpKX0sdi5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZixiLGspe2Y8MCYmKHRoaXMubmVnYXRpdmU9MSxmPS1mKSxmPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZmXSx0aGlzLmxlbmd0aD0xKTpmPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4''@;'; put 'put ''ODYzJmYsZi82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KHMoZjw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZmLGYvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PWsmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXko''@;'; put 'put ''KSxiLGspfSx2LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGYsYixrKXtpZihzKCJudW1iZXIiPT10eXBlb2YgZi5sZW5ndGgpLGYubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGYubGVuZ3RoLzMp''@;'; put 'put ''LHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIE09MDtNPHRoaXMubGVuZ3RoO00rKyl0aGlzLndvcmRzW01dPTA7dmFyIEIsSyxHPTA7aWYoImJlIj09PWspZm9yKE09Zi5sZW5ndGgtMSxCPTA7TT49MDtNLT0zKXRoaXMud29yZHNbQl18PShLPWZbTV18ZltNLTFd''@;'; put 'put ''PDw4fGZbTS0yXTw8MTYpPDxHJjY3MTA4ODYzLHRoaXMud29yZHNbQisxXT1LPj4+MjYtRyY2NzEwODg2MywoRys9MjQpPj0yNiYmKEctPTI2LEIrKyk7ZWxzZSBpZigibGUiPT09aylmb3IoTT0wLEI9MDtNPGYubGVuZ3RoO00rPTMpdGhpcy53b3Jkc1tCXXw9KEs9ZltNXXxmW00rMV08PDh8''@;'; put 'put ''ZltNKzJdPDwxNik8PEcmNjcxMDg4NjMsdGhpcy53b3Jkc1tCKzFdPUs+Pj4yNi1HJjY3MTA4ODYzLChHKz0yNCk+PTI2JiYoRy09MjYsQisrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZixiLGspe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgo''@;'; put 'put ''Zi5sZW5ndGgtYikvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTT0wO008dGhpcy5sZW5ndGg7TSsrKXRoaXMud29yZHNbTV09MDt2YXIgRyxCPTAsSz0wO2lmKCJiZSI9PT1rKWZvcihNPWYubGVuZ3RoLTE7TT49YjtNLT0yKUc9UyhmLGIsTSk8PEIsdGhp''@;'; put 'put ''cy53b3Jkc1tLXXw9NjcxMDg4NjMmRyxCPj0xOD8oQi09MTgsdGhpcy53b3Jkc1tLKz0xXXw9Rz4+PjI2KTpCKz04O2Vsc2UgZm9yKE09KGYubGVuZ3RoLWIpJTI9PTA/YisxOmI7TTxmLmxlbmd0aDtNKz0yKUc9UyhmLGIsTSk8PEIsdGhpcy53b3Jkc1tLXXw9NjcxMDg4NjMmRyxCPj0xOD8o''@;'; put 'put ''Qi09MTgsdGhpcy53b3Jkc1tLKz0xXXw9Rz4+PjI2KTpCKz04O3RoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihmLGIsayl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIE09MCxCPTE7Qjw9NjcxMDg4NjM7Qio9YilNKys7TS0tLEI9Qi9i''@;'; put 'put ''fDA7Zm9yKHZhciBLPWYubGVuZ3RoLWssRz1LJU0sRD1NYXRoLm1pbihLLEstRykrayxwPTAsST1rO0k8RDtJKz1NKXA9TChmLEksSStNLGIpLHRoaXMuaW11bG4oQiksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCk7aWYoMCE9PUcpe3Zh''@;'; put 'put ''ciB1ZT0xO2ZvcihwPUwoZixJLGYubGVuZ3RoLGIpLEk9MDtJPEc7SSsrKXVlKj1iO3RoaXMuaW11bG4odWUpLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApfXRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihmKXtm''@;'; put 'put ''LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspZi53b3Jkc1tiXT10aGlzLndvcmRzW2JdO2YubGVuZ3RoPXRoaXMubGVuZ3RoLGYubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxmLnJlZD10aGlzLnJlZH0sdi5wcm90b3R5cGUuY2xvbmU9''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgZj1uZXcgdihudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGYpLGZ9LHYucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZil7Zm9yKDt0aGlzLmxlbmd0aDxmOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHYucHJvdG90eXBlLnN0cmlwPWZ1''@;'; put 'put ''bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdi5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMu''@;'; put 'put ''d29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIFI9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0seD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxVPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUs''@;'; put 'put ''NjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUs''@;'; put 'put ''MTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFYoWCxmLGIpe2IubmVnYXRpdmU9Zi5uZWdhdGl2ZV5YLm5lZ2F0aXZlO3ZhciBrPVgubGVuZ3RoK2Yu''@;'; put 'put ''bGVuZ3RofDA7Yi5sZW5ndGg9ayxrPWstMXwwO3ZhciBNPTB8WC53b3Jkc1swXSxCPTB8Zi53b3Jkc1swXSxLPU0qQixEPUsvNjcxMDg4NjR8MDtiLndvcmRzWzBdPTY3MTA4ODYzJks7Zm9yKHZhciBwPTE7cDxrO3ArKyl7Zm9yKHZhciBJPUQ+Pj4yNix1ZT02NzEwODg2MyZELG5lPU1hdGgu''@;'; put 'put ''bWluKHAsZi5sZW5ndGgtMSksX2U9TWF0aC5tYXgoMCxwLVgubGVuZ3RoKzEpO19lPD1uZTtfZSsrKUkrPShLPShNPTB8WC53b3Jkc1twLV9lfDBdKSooQj0wfGYud29yZHNbX2VdKSt1ZSkvNjcxMDg4NjR8MCx1ZT02NzEwODg2MyZLO2Iud29yZHNbcF09MHx1ZSxEPTB8SX1yZXR1cm4gMCE9''@;'; put 'put ''PUQ/Yi53b3Jkc1twXT0wfEQ6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9di5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZixiKXt2YXIgaztpZihiPTB8Ynx8MSwxNj09PShmPWZ8fDEwKXx8ImhleCI9PT1mKXtrPSIiO2Zvcih2YXIgTT0wLEI9MCxLPTA7Szx0aGlzLmxlbmd0aDtLKyspe3Zh''@;'; put 'put ''ciBHPXRoaXMud29yZHNbS10sRD0oMTY3NzcyMTUmKEc8PE18QikpLnRvU3RyaW5nKDE2KTtCPUc+Pj4yNC1NJjE2Nzc3MjE1LChNKz0yKT49MjYmJihNLT0yNixLLS0pLGs9MCE9PUJ8fEshPT10aGlzLmxlbmd0aC0xP1JbNi1ELmxlbmd0aF0rRCtrOkQra31mb3IoMCE9PUImJihrPUIudG9T''@;'; put 'put ''dHJpbmcoMTYpK2spO2subGVuZ3RoJWIhPT0wOylrPSIwIitrO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKGs9Ii0iK2spLGt9aWYoZj09PSgwfGYpJiZmPj0yJiZmPD0zNil7dmFyIHA9eFtmXSxJPVVbZl07az0iIjt2YXIgdWU9dGhpcy5jbG9uZSgpO2Zvcih1ZS5uZWdhdGl2ZT0wOyF1''@;'; put 'put ''ZS5pc1plcm8oKTspe3ZhciBuZT11ZS5tb2RuKEkpLnRvU3RyaW5nKGYpO2s9KHVlPXVlLmlkaXZuKEkpKS5pc1plcm8oKT9uZStrOlJbcC1uZS5sZW5ndGhdK25lK2t9Zm9yKHRoaXMuaXNaZXJvKCkmJihrPSIwIitrKTtrLmxlbmd0aCViIT09MDspaz0iMCIraztyZXR1cm4gMCE9PXRoaXMu''@;'; put 'put ''bmVnYXRpdmUmJihrPSItIitrKSxrfXMoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdi5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZj10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zis9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXToz''@;'; put 'put ''PT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2YrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZzKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZjpm''@;'; put 'put ''fSx2LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHYucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGYsYil7cmV0dXJuIHModHlwZW9mIEM8InUiKSx0aGlzLnRvQXJyYXlMaWtlKEMsZixiKX0sdi5wcm90b3R5cGUudG9BcnJheT1mdW5j''@;'; put 'put ''dGlvbihmLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGYsYil9LHYucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGYsYixrKXt2YXIgTT10aGlzLmJ5dGVMZW5ndGgoKSxCPWt8fE1hdGgubWF4KDEsTSk7cyhNPD1CLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2ly''@;'; put 'put ''ZWQgbGVuZ3RoIikscyhCPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRCxwLEs9ImxlIj09PWIsRz1uZXcgZihCKSxJPXRoaXMuY2xvbmUoKTtpZihLKXtmb3IocD0wOyFJLmlzWmVybygpO3ArKylEPUkuYW5kbG4oMjU1KSxJLml1c2hybig4KSxH''@;'; put 'put ''W3BdPUQ7Zm9yKDtwPEI7cCsrKUdbcF09MH1lbHNle2ZvcihwPTA7cDxCLU07cCsrKUdbcF09MDtmb3IocD0wOyFJLmlzWmVybygpO3ArKylEPUkuYW5kbG4oMjU1KSxJLml1c2hybig4KSxHW0ItcC0xXT1EfXJldHVybiBHfSx2LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVu''@;'; put 'put ''Y3Rpb24oZil7cmV0dXJuIDMyLU1hdGguY2x6MzIoZil9OmZ1bmN0aW9uKGYpe3ZhciBiPWYsaz0wO3JldHVybiBiPj00MDk2JiYoays9MTMsYj4+Pj0xMyksYj49NjQmJihrKz03LGI+Pj49NyksYj49OCYmKGsrPTQsYj4+Pj00KSxiPj0yJiYoays9MixiPj4+PTIpLGsrYn0sdi5wcm90b3R5''@;'; put 'put ''cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGYpe2lmKDA9PT1mKXJldHVybiAyNjt2YXIgYj1mLGs9MDtyZXR1cm4hKDgxOTEmYikmJihrKz0xMyxiPj4+PTEzKSwhKDEyNyZiKSYmKGsrPTcsYj4+Pj03KSwhKDE1JmIpJiYoays9NCxiPj4+PTQpLCEoMyZiKSYmKGsrPTIsYj4+Pj0yKSwhKDEmYikm''@;'; put 'put ''JmsrKyxrfSx2LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx2LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJv''@;'; put 'put ''KCkpcmV0dXJuIDA7Zm9yKHZhciBmPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgaz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihmKz1rLDI2IT09aylicmVha31yZXR1cm4gZn0sdi5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwo''@;'; put 'put ''dGhpcy5iaXRMZW5ndGgoKS84KX0sdi5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGYpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGYpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdi5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMu''@;'; put 'put ''dGVzdG4oZi0xKT90aGlzLm5vdG4oZikuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdi5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHYucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx2''@;'; put 'put ''LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx2LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGYpe2Zvcig7dGhpcy5sZW5ndGg8Zi5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFy''@;'; put 'put ''IGI9MDtiPGYubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18Zi53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZil7cmV0dXJuIHMoMD09PSh0aGlzLm5lZ2F0aXZlfGYubmVnYXRpdmUpKSx0aGlzLml1b3IoZil9LHYu''@;'; put 'put ''cHJvdG90eXBlLm9yPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmxlbmd0aD5mLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGYpOmYuY2xvbmUoKS5pb3IodGhpcyl9LHYucHJvdG90eXBlLnVvcj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1''@;'; put 'put ''b3IoZik6Zi5jbG9uZSgpLml1b3IodGhpcyl9LHYucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGYpe3ZhciBiO2I9dGhpcy5sZW5ndGg+Zi5sZW5ndGg/Zjp0aGlzO2Zvcih2YXIgaz0wO2s8Yi5sZW5ndGg7aysrKXRoaXMud29yZHNba109dGhpcy53b3Jkc1trXSZmLndvcmRzW2tdO3JldHVy''@;'; put 'put ''biB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZil7cmV0dXJuIHMoMD09PSh0aGlzLm5lZ2F0aXZlfGYubmVnYXRpdmUpKSx0aGlzLml1YW5kKGYpfSx2LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMubGVu''@;'; put 'put ''Z3RoPmYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGYpOmYuY2xvbmUoKS5pYW5kKHRoaXMpfSx2LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmxlbmd0aD5mLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZik6Zi5jbG9uZSgpLml1YW5kKHRoaXMpfSx2LnByb3Rv''@;'; put 'put ''dHlwZS5pdXhvcj1mdW5jdGlvbihmKXt2YXIgYixrO3RoaXMubGVuZ3RoPmYubGVuZ3RoPyhiPXRoaXMsaz1mKTooYj1mLGs9dGhpcyk7Zm9yKHZhciBNPTA7TTxrLmxlbmd0aDtNKyspdGhpcy53b3Jkc1tNXT1iLndvcmRzW01dXmsud29yZHNbTV07aWYodGhpcyE9PWIpZm9yKDtNPGIubGVu''@;'; put 'put ''Z3RoO00rKyl0aGlzLndvcmRzW01dPWIud29yZHNbTV07cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihmKXtyZXR1cm4gcygwPT09KHRoaXMubmVnYXRpdmV8Zi5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZil9LHYucHJv''@;'; put 'put ''dG90eXBlLnhvcj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zi5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZik6Zi5jbG9uZSgpLml4b3IodGhpcyl9LHYucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMubGVuZ3RoPmYubGVuZ3RoP3RoaXMuY2xvbmUoKS5p''@;'; put 'put ''dXhvcihmKTpmLmNsb25lKCkuaXV4b3IodGhpcyl9LHYucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGYpe3MoIm51bWJlciI9PXR5cGVvZiBmJiZmPj0wKTt2YXIgYj0wfE1hdGguY2VpbChmLzI2KSxrPWYlMjY7dGhpcy5fZXhwYW5kKGIpLGs+MCYmYi0tO2Zvcih2YXIgTT0wO008YjtNKysp''@;'; put 'put ''dGhpcy53b3Jkc1tNXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tNXTtmb3Ioaz4wJiYodGhpcy53b3Jkc1tNXT1+dGhpcy53b3Jkc1tNXSY2NzEwODg2Mz4+MjYtayxNKyspO008dGhpcy5sZW5ndGg7TSsrKXRoaXMud29yZHNbTV09MDtyZXR1cm4gdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5u''@;'; put 'put ''b3RuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZil9LHYucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZixiKXtzKCJudW1iZXIiPT10eXBlb2YgZiYmZj49MCk7dmFyIGs9Zi8yNnwwLE09ZiUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKGsrMSksdGhpcy53b3Jkc1trXT1i''@;'; put 'put ''P3RoaXMud29yZHNba118MTw8TTp0aGlzLndvcmRzW2tdJn4oMTw8TSksdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGYpe3ZhciBiLGssTTtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWYubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1''@;'; put 'put ''YihmKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1mLm5lZ2F0aXZlKXJldHVybiBmLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIoZiksZi5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zi5sZW5ndGg/KGs9dGhp''@;'; put 'put ''cyxNPWYpOihrPWYsTT10aGlzKTtmb3IodmFyIEI9MCxLPTA7SzxNLmxlbmd0aDtLKyspdGhpcy53b3Jkc1tLXT02NzEwODg2MyYoYj0oMHxrLndvcmRzW0tdKSsoMHxNLndvcmRzW0tdKStCKSxCPWI+Pj4yNjtmb3IoOzAhPT1CJiZLPGsubGVuZ3RoO0srKyl0aGlzLndvcmRzW0tdPTY3MTA4''@;'; put 'put ''ODYzJihiPSgwfGsud29yZHNbS10pK0IpLEI9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPWsubGVuZ3RoLDAhPT1CKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPUIsdGhpcy5sZW5ndGgrKztlbHNlIGlmKGshPT10aGlzKWZvcig7SzxrLmxlbmd0aDtLKyspdGhpcy53b3Jkc1tLXT1rLndvcmRzW0td''@;'; put 'put ''O3JldHVybiB0aGlzfSx2LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZil7dmFyIGI7cmV0dXJuIDAhPT1mLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZi5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIoZiksZi5uZWdhdGl2ZV49MSxiKTowPT09Zi5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRp''@;'; put 'put ''dmU/KHRoaXMubmVnYXRpdmU9MCxiPWYuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5mLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChmKTpmLmNsb25lKCkuaWFkZCh0aGlzKX0sdi5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihmKXtpZigwIT09Zi5uZWdhdGl2ZSl7''@;'; put 'put ''Zi5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChmKTtyZXR1cm4gZi5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIE0sQixr''@;'; put 'put ''PXRoaXMuY21wKGYpO2lmKDA9PT1rKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztrPjA/KE09dGhpcyxCPWYpOihNPWYsQj10aGlzKTtmb3IodmFyIEs9MCxHPTA7RzxCLmxlbmd0aDtHKyspSz0oYj0oMHxNLndvcmRzW0ddKS0oMHxC''@;'; put 'put ''LndvcmRzW0ddKStLKT4+MjYsdGhpcy53b3Jkc1tHXT02NzEwODg2MyZiO2Zvcig7MCE9PUsmJkc8TS5sZW5ndGg7RysrKUs9KGI9KDB8TS53b3Jkc1tHXSkrSyk+PjI2LHRoaXMud29yZHNbR109NjcxMDg4NjMmYjtpZigwPT09SyYmRzxNLmxlbmd0aCYmTSE9PXRoaXMpZm9yKDtHPE0ubGVu''@;'; put 'put ''Z3RoO0crKyl0aGlzLndvcmRzW0ddPU0ud29yZHNbR107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEcpLE0hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbG9uZSgp''@;'; put 'put ''LmlzdWIoZil9O3ZhciBOPWZ1bmN0aW9uKGYsYixrKXt2YXIgRCxwLEksTT1mLndvcmRzLEI9Yi53b3JkcyxLPWsud29yZHMsRz0wLHVlPTB8TVswXSxuZT04MTkxJnVlLF9lPXVlPj4+MTMsUGU9MHxNWzFdLG90PTgxOTEmUGUsbHQ9UGU+Pj4xMyxkdD0wfE1bMl0sUmU9ODE5MSZkdCxhZT1k''@;'; put 'put ''dD4+PjEzLHhlPTB8TVszXSxqZT04MTkxJnhlLEFlPXhlPj4+MTMsRGU9MHxNWzRdLEZlPTgxOTEmRGUsZ2U9RGU+Pj4xMyxjZT0wfE1bNV0saGU9ODE5MSZjZSx3ZT1jZT4+PjEzLEplPTB8TVs2XSx0dD04MTkxJkplLEtlPUplPj4+MTMsJHQ9MHxNWzddLFJ0PTgxOTEmJHQsTHQ9JHQ+Pj4x''@;'; put 'put ''MyxHdD0wfE1bOF0sZ3Q9ODE5MSZHdCxYdD1HdD4+PjEzLExyPTB8TVs5XSxsbj04MTkxJkxyLE9uPUxyPj4+MTMsUXI9MHxCWzBdLHRyPTgxOTEmUXIsSG49UXI+Pj4xMyxPbz0wfEJbMV0sdXI9ODE5MSZPbyxabj1Pbz4+PjEzLFNuPTB8QlsyXSx4cj04MTkxJlNuLFR0PVNuPj4+MTMsQXI9''@;'; put 'put ''MHxCWzNdLF9uPTgxOTEmQXIsWnQ9QXI+Pj4xMyxObj0wfEJbNF0scHQ9ODE5MSZObixwbj1Obj4+PjEzLE1pPTB8Qls1XSxHZT04MTkxJk1pLFV0PU1pPj4+MTMsdnI9MHxCWzZdLHh0PTgxOTEmdnIsQnQ9dnI+Pj4xMyx6bj0wfEJbN10sR249ODE5MSZ6bix5bj16bj4+PjEzLHZpPTB8Qls4''@;'; put 'put ''XSxycj04MTkxJnZpLGhyPXZpPj4+MTMscG89MHxCWzldLHZuPTgxOTEmcG8sQm49cG8+Pj4xMztrLm5lZ2F0aXZlPWYubmVnYXRpdmVeYi5uZWdhdGl2ZSxrLmxlbmd0aD0xOTt2YXIgamE9KEcrKEQ9TWF0aC5pbXVsKG5lLHRyKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChuZSxIbikp''@;'; put 'put ''K01hdGguaW11bChfZSx0cil8MCkpPDwxMyl8MDtHPSgoST1NYXRoLmltdWwoX2UsSG4pKSsocD4+PjEzKXwwKSsoamE+Pj4yNil8MCxqYSY9NjcxMDg4NjMsRD1NYXRoLmltdWwob3QsdHIpLHA9KHA9TWF0aC5pbXVsKG90LEhuKSkrTWF0aC5pbXVsKGx0LHRyKXwwLEk9TWF0aC5pbXVsKGx0''@;'; put 'put ''LEhuKTt2YXIgam89KEcrKEQ9RCtNYXRoLmltdWwobmUsdXIpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxabil8MCkrTWF0aC5pbXVsKF9lLHVyKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLFpuKXwwKSsocD4+PjEzKXwwKSsoam8+Pj4yNil8MCxqbyY9Njcx''@;'; put 'put ''MDg4NjMsRD1NYXRoLmltdWwoUmUsdHIpLHA9KHA9TWF0aC5pbXVsKFJlLEhuKSkrTWF0aC5pbXVsKGFlLHRyKXwwLEk9TWF0aC5pbXVsKGFlLEhuKSxEPUQrTWF0aC5pbXVsKG90LHVyKXwwLHA9KHA9cCtNYXRoLmltdWwob3QsWm4pfDApK01hdGguaW11bChsdCx1cil8MCxJPUkrTWF0aC5p''@;'; put 'put ''bXVsKGx0LFpuKXwwO3ZhciBYcj0oRysoRD1EK01hdGguaW11bChuZSx4cil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLFR0KXwwKStNYXRoLmltdWwoX2UseHIpfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoX2UsVHQpfDApKyhwPj4+MTMpfDApKyhYcj4+PjI2KXww''@;'; put 'put ''LFhyJj02NzEwODg2MyxEPU1hdGguaW11bChqZSx0cikscD0ocD1NYXRoLmltdWwoamUsSG4pKStNYXRoLmltdWwoQWUsdHIpfDAsST1NYXRoLmltdWwoQWUsSG4pLEQ9RCtNYXRoLmltdWwoUmUsdXIpfDAscD0ocD1wK01hdGguaW11bChSZSxabil8MCkrTWF0aC5pbXVsKGFlLHVyKXwwLEk9''@;'; put 'put ''SStNYXRoLmltdWwoYWUsWm4pfDAsRD1EK01hdGguaW11bChvdCx4cil8MCxwPShwPXArTWF0aC5pbXVsKG90LFR0KXwwKStNYXRoLmltdWwobHQseHIpfDAsST1JK01hdGguaW11bChsdCxUdCl8MDt2YXIgZWE9KEcrKEQ9RCtNYXRoLmltdWwobmUsX24pfDApfDApKygoODE5MSYocD0ocD1w''@;'; put 'put ''K01hdGguaW11bChuZSxadCl8MCkrTWF0aC5pbXVsKF9lLF9uKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLFp0KXwwKSsocD4+PjEzKXwwKSsoZWE+Pj4yNil8MCxlYSY9NjcxMDg4NjMsRD1NYXRoLmltdWwoRmUsdHIpLHA9KHA9TWF0aC5pbXVsKEZlLEhuKSkrTWF0aC5pbXVs''@;'; put 'put ''KGdlLHRyKXwwLEk9TWF0aC5pbXVsKGdlLEhuKSxEPUQrTWF0aC5pbXVsKGplLHVyKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWm4pfDApK01hdGguaW11bChBZSx1cil8MCxJPUkrTWF0aC5pbXVsKEFlLFpuKXwwLEQ9RCtNYXRoLmltdWwoUmUseHIpfDAscD0ocD1wK01hdGguaW11bChSZSxU''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKGFlLHhyKXwwLEk9SStNYXRoLmltdWwoYWUsVHQpfDAsRD1EK01hdGguaW11bChvdCxfbil8MCxwPShwPXArTWF0aC5pbXVsKG90LFp0KXwwKStNYXRoLmltdWwobHQsX24pfDAsST1JK01hdGguaW11bChsdCxadCl8MDt2YXIgcmE9KEcrKEQ9RCtNYXRoLmltdWwo''@;'; put 'put ''bmUscHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxwbil8MCkrTWF0aC5pbXVsKF9lLHB0KXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLHBuKXwwKSsocD4+PjEzKXwwKSsocmE+Pj4yNil8MCxyYSY9NjcxMDg4NjMsRD1NYXRoLmltdWwoaGUsdHIpLHA9KHA9''@;'; put 'put ''TWF0aC5pbXVsKGhlLEhuKSkrTWF0aC5pbXVsKHdlLHRyKXwwLEk9TWF0aC5pbXVsKHdlLEhuKSxEPUQrTWF0aC5pbXVsKEZlLHVyKXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsWm4pfDApK01hdGguaW11bChnZSx1cil8MCxJPUkrTWF0aC5pbXVsKGdlLFpuKXwwLEQ9RCtNYXRoLmltdWwoamUs''@;'; put 'put ''eHIpfDAscD0ocD1wK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKEFlLHhyKXwwLEk9SStNYXRoLmltdWwoQWUsVHQpfDAsRD1EK01hdGguaW11bChSZSxfbil8MCxwPShwPXArTWF0aC5pbXVsKFJlLFp0KXwwKStNYXRoLmltdWwoYWUsX24pfDAsST1JK01hdGguaW11bChhZSxadCl8''@;'; put 'put ''MCxEPUQrTWF0aC5pbXVsKG90LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwob3QscG4pfDApK01hdGguaW11bChsdCxwdCl8MCxJPUkrTWF0aC5pbXVsKGx0LHBuKXwwO3ZhciBjYT0oRysoRD1EK01hdGguaW11bChuZSxHZSl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLFV0KXww''@;'; put 'put ''KStNYXRoLmltdWwoX2UsR2UpfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoX2UsVXQpfDApKyhwPj4+MTMpfDApKyhjYT4+PjI2KXwwLGNhJj02NzEwODg2MyxEPU1hdGguaW11bCh0dCx0cikscD0ocD1NYXRoLmltdWwodHQsSG4pKStNYXRoLmltdWwoS2UsdHIpfDAsST1NYXRoLmlt''@;'; put 'put ''dWwoS2UsSG4pLEQ9RCtNYXRoLmltdWwoaGUsdXIpfDAscD0ocD1wK01hdGguaW11bChoZSxabil8MCkrTWF0aC5pbXVsKHdlLHVyKXwwLEk9SStNYXRoLmltdWwod2UsWm4pfDAsRD1EK01hdGguaW11bChGZSx4cil8MCxwPShwPXArTWF0aC5pbXVsKEZlLFR0KXwwKStNYXRoLmltdWwoZ2Us''@;'; put 'put ''eHIpfDAsST1JK01hdGguaW11bChnZSxUdCl8MCxEPUQrTWF0aC5pbXVsKGplLF9uKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWnQpfDApK01hdGguaW11bChBZSxfbil8MCxJPUkrTWF0aC5pbXVsKEFlLFp0KXwwLEQ9RCtNYXRoLmltdWwoUmUscHQpfDAscD0ocD1wK01hdGguaW11bChSZSxw''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKGFlLHB0KXwwLEk9SStNYXRoLmltdWwoYWUscG4pfDAsRD1EK01hdGguaW11bChvdCxHZSl8MCxwPShwPXArTWF0aC5pbXVsKG90LFV0KXwwKStNYXRoLmltdWwobHQsR2UpfDAsST1JK01hdGguaW11bChsdCxVdCl8MDt2YXIgQ2k9KEcrKEQ9RCtNYXRoLmltdWwo''@;'; put 'put ''bmUseHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxCdCl8MCkrTWF0aC5pbXVsKF9lLHh0KXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLEJ0KXwwKSsocD4+PjEzKXwwKSsoQ2k+Pj4yNil8MCxDaSY9NjcxMDg4NjMsRD1NYXRoLmltdWwoUnQsdHIpLHA9KHA9''@;'; put 'put ''TWF0aC5pbXVsKFJ0LEhuKSkrTWF0aC5pbXVsKEx0LHRyKXwwLEk9TWF0aC5pbXVsKEx0LEhuKSxEPUQrTWF0aC5pbXVsKHR0LHVyKXwwLHA9KHA9cCtNYXRoLmltdWwodHQsWm4pfDApK01hdGguaW11bChLZSx1cil8MCxJPUkrTWF0aC5pbXVsKEtlLFpuKXwwLEQ9RCtNYXRoLmltdWwoaGUs''@;'; put 'put ''eHIpfDAscD0ocD1wK01hdGguaW11bChoZSxUdCl8MCkrTWF0aC5pbXVsKHdlLHhyKXwwLEk9SStNYXRoLmltdWwod2UsVHQpfDAsRD1EK01hdGguaW11bChGZSxfbil8MCxwPShwPXArTWF0aC5pbXVsKEZlLFp0KXwwKStNYXRoLmltdWwoZ2UsX24pfDAsST1JK01hdGguaW11bChnZSxadCl8''@;'; put 'put ''MCxEPUQrTWF0aC5pbXVsKGplLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUscG4pfDApK01hdGguaW11bChBZSxwdCl8MCxJPUkrTWF0aC5pbXVsKEFlLHBuKXwwLEQ9RCtNYXRoLmltdWwoUmUsR2UpfDAscD0ocD1wK01hdGguaW11bChSZSxVdCl8MCkrTWF0aC5pbXVsKGFlLEdlKXwwLEk9''@;'; put 'put ''SStNYXRoLmltdWwoYWUsVXQpfDAsRD1EK01hdGguaW11bChvdCx4dCl8MCxwPShwPXArTWF0aC5pbXVsKG90LEJ0KXwwKStNYXRoLmltdWwobHQseHQpfDAsST1JK01hdGguaW11bChsdCxCdCl8MDt2YXIgaG89KEcrKEQ9RCtNYXRoLmltdWwobmUsR24pfDApfDApKygoODE5MSYocD0ocD1w''@;'; put 'put ''K01hdGguaW11bChuZSx5bil8MCkrTWF0aC5pbXVsKF9lLEduKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLHluKXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsRD1NYXRoLmltdWwoZ3QsdHIpLHA9KHA9TWF0aC5pbXVsKGd0LEhuKSkrTWF0aC5pbXVs''@;'; put 'put ''KFh0LHRyKXwwLEk9TWF0aC5pbXVsKFh0LEhuKSxEPUQrTWF0aC5pbXVsKFJ0LHVyKXwwLHA9KHA9cCtNYXRoLmltdWwoUnQsWm4pfDApK01hdGguaW11bChMdCx1cil8MCxJPUkrTWF0aC5pbXVsKEx0LFpuKXwwLEQ9RCtNYXRoLmltdWwodHQseHIpfDAscD0ocD1wK01hdGguaW11bCh0dCxU''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKEtlLHhyKXwwLEk9SStNYXRoLmltdWwoS2UsVHQpfDAsRD1EK01hdGguaW11bChoZSxfbil8MCxwPShwPXArTWF0aC5pbXVsKGhlLFp0KXwwKStNYXRoLmltdWwod2UsX24pfDAsST1JK01hdGguaW11bCh3ZSxadCl8MCxEPUQrTWF0aC5pbXVsKEZlLHB0KXwwLHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwoRmUscG4pfDApK01hdGguaW11bChnZSxwdCl8MCxJPUkrTWF0aC5pbXVsKGdlLHBuKXwwLEQ9RCtNYXRoLmltdWwoamUsR2UpfDAscD0ocD1wK01hdGguaW11bChqZSxVdCl8MCkrTWF0aC5pbXVsKEFlLEdlKXwwLEk9SStNYXRoLmltdWwoQWUsVXQpfDAsRD1EK01h''@;'; put 'put ''dGguaW11bChSZSx4dCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLEJ0KXwwKStNYXRoLmltdWwoYWUseHQpfDAsST1JK01hdGguaW11bChhZSxCdCl8MCxEPUQrTWF0aC5pbXVsKG90LEduKXwwLHA9KHA9cCtNYXRoLmltdWwob3QseW4pfDApK01hdGguaW11bChsdCxHbil8MCxJPUkrTWF0aC5p''@;'; put 'put ''bXVsKGx0LHluKXwwO3ZhciBNYT0oRysoRD1EK01hdGguaW11bChuZSxycil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGhyKXwwKStNYXRoLmltdWwoX2UscnIpfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoX2UsaHIpfDApKyhwPj4+MTMpfDApKyhNYT4+PjI2KXww''@;'; put 'put ''LE1hJj02NzEwODg2MyxEPU1hdGguaW11bChsbix0cikscD0ocD1NYXRoLmltdWwobG4sSG4pKStNYXRoLmltdWwoT24sdHIpfDAsST1NYXRoLmltdWwoT24sSG4pLEQ9RCtNYXRoLmltdWwoZ3QsdXIpfDAscD0ocD1wK01hdGguaW11bChndCxabil8MCkrTWF0aC5pbXVsKFh0LHVyKXwwLEk9''@;'; put 'put ''SStNYXRoLmltdWwoWHQsWm4pfDAsRD1EK01hdGguaW11bChSdCx4cil8MCxwPShwPXArTWF0aC5pbXVsKFJ0LFR0KXwwKStNYXRoLmltdWwoTHQseHIpfDAsST1JK01hdGguaW11bChMdCxUdCl8MCxEPUQrTWF0aC5pbXVsKHR0LF9uKXwwLHA9KHA9cCtNYXRoLmltdWwodHQsWnQpfDApK01h''@;'; put 'put ''dGguaW11bChLZSxfbil8MCxJPUkrTWF0aC5pbXVsKEtlLFp0KXwwLEQ9RCtNYXRoLmltdWwoaGUscHQpfDAscD0ocD1wK01hdGguaW11bChoZSxwbil8MCkrTWF0aC5pbXVsKHdlLHB0KXwwLEk9SStNYXRoLmltdWwod2UscG4pfDAsRD1EK01hdGguaW11bChGZSxHZSl8MCxwPShwPXArTWF0''@;'; put 'put ''aC5pbXVsKEZlLFV0KXwwKStNYXRoLmltdWwoZ2UsR2UpfDAsST1JK01hdGguaW11bChnZSxVdCl8MCxEPUQrTWF0aC5pbXVsKGplLHh0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsQnQpfDApK01hdGguaW11bChBZSx4dCl8MCxJPUkrTWF0aC5pbXVsKEFlLEJ0KXwwLEQ9RCtNYXRoLmltdWwo''@;'; put 'put ''UmUsR24pfDAscD0ocD1wK01hdGguaW11bChSZSx5bil8MCkrTWF0aC5pbXVsKGFlLEduKXwwLEk9SStNYXRoLmltdWwoYWUseW4pfDAsRD1EK01hdGguaW11bChvdCxycil8MCxwPShwPXArTWF0aC5pbXVsKG90LGhyKXwwKStNYXRoLmltdWwobHQscnIpfDAsST1JK01hdGguaW11bChsdCxo''@;'; put 'put ''cil8MDt2YXIga3M9KEcrKEQ9RCtNYXRoLmltdWwobmUsdm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxCbil8MCkrTWF0aC5pbXVsKF9lLHZuKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKF9lLEJuKXwwKSsocD4+PjEzKXwwKSsoa3M+Pj4yNil8MCxrcyY9Njcx''@;'; put 'put ''MDg4NjMsRD1NYXRoLmltdWwobG4sdXIpLHA9KHA9TWF0aC5pbXVsKGxuLFpuKSkrTWF0aC5pbXVsKE9uLHVyKXwwLEk9TWF0aC5pbXVsKE9uLFpuKSxEPUQrTWF0aC5pbXVsKGd0LHhyKXwwLHA9KHA9cCtNYXRoLmltdWwoZ3QsVHQpfDApK01hdGguaW11bChYdCx4cil8MCxJPUkrTWF0aC5p''@;'; put 'put ''bXVsKFh0LFR0KXwwLEQ9RCtNYXRoLmltdWwoUnQsX24pfDAscD0ocD1wK01hdGguaW11bChSdCxadCl8MCkrTWF0aC5pbXVsKEx0LF9uKXwwLEk9SStNYXRoLmltdWwoTHQsWnQpfDAsRD1EK01hdGguaW11bCh0dCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKHR0LHBuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''S2UscHQpfDAsST1JK01hdGguaW11bChLZSxwbil8MCxEPUQrTWF0aC5pbXVsKGhlLEdlKXwwLHA9KHA9cCtNYXRoLmltdWwoaGUsVXQpfDApK01hdGguaW11bCh3ZSxHZSl8MCxJPUkrTWF0aC5pbXVsKHdlLFV0KXwwLEQ9RCtNYXRoLmltdWwoRmUseHQpfDAscD0ocD1wK01hdGguaW11bChG''@;'; put 'put ''ZSxCdCl8MCkrTWF0aC5pbXVsKGdlLHh0KXwwLEk9SStNYXRoLmltdWwoZ2UsQnQpfDAsRD1EK01hdGguaW11bChqZSxHbil8MCxwPShwPXArTWF0aC5pbXVsKGplLHluKXwwKStNYXRoLmltdWwoQWUsR24pfDAsST1JK01hdGguaW11bChBZSx5bil8MCxEPUQrTWF0aC5pbXVsKFJlLHJyKXww''@;'; put 'put ''LHA9KHA9cCtNYXRoLmltdWwoUmUsaHIpfDApK01hdGguaW11bChhZSxycil8MCxJPUkrTWF0aC5pbXVsKGFlLGhyKXwwO3ZhciBCaT0oRysoRD1EK01hdGguaW11bChvdCx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG90LEJuKXwwKStNYXRoLmltdWwobHQsdm4pfDApKTw8''@;'; put 'put ''MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwobHQsQm4pfDApKyhwPj4+MTMpfDApKyhCaT4+PjI2KXwwLEJpJj02NzEwODg2MyxEPU1hdGguaW11bChsbix4cikscD0ocD1NYXRoLmltdWwobG4sVHQpKStNYXRoLmltdWwoT24seHIpfDAsST1NYXRoLmltdWwoT24sVHQpLEQ9RCtNYXRoLmltdWwo''@;'; put 'put ''Z3QsX24pfDAscD0ocD1wK01hdGguaW11bChndCxadCl8MCkrTWF0aC5pbXVsKFh0LF9uKXwwLEk9SStNYXRoLmltdWwoWHQsWnQpfDAsRD1EK01hdGguaW11bChSdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFJ0LHBuKXwwKStNYXRoLmltdWwoTHQscHQpfDAsST1JK01hdGguaW11bChMdCxw''@;'; put 'put ''bil8MCxEPUQrTWF0aC5pbXVsKHR0LEdlKXwwLHA9KHA9cCtNYXRoLmltdWwodHQsVXQpfDApK01hdGguaW11bChLZSxHZSl8MCxJPUkrTWF0aC5pbXVsKEtlLFV0KXwwLEQ9RCtNYXRoLmltdWwoaGUseHQpfDAscD0ocD1wK01hdGguaW11bChoZSxCdCl8MCkrTWF0aC5pbXVsKHdlLHh0KXww''@;'; put 'put ''LEk9SStNYXRoLmltdWwod2UsQnQpfDAsRD1EK01hdGguaW11bChGZSxHbil8MCxwPShwPXArTWF0aC5pbXVsKEZlLHluKXwwKStNYXRoLmltdWwoZ2UsR24pfDAsST1JK01hdGguaW11bChnZSx5bil8MCxEPUQrTWF0aC5pbXVsKGplLHJyKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsaHIpfDAp''@;'; put 'put ''K01hdGguaW11bChBZSxycil8MCxJPUkrTWF0aC5pbXVsKEFlLGhyKXwwO3ZhciB0YT0oRysoRD1EK01hdGguaW11bChSZSx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFJlLEJuKXwwKStNYXRoLmltdWwoYWUsdm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoYWUs''@;'; put 'put ''Qm4pfDApKyhwPj4+MTMpfDApKyh0YT4+PjI2KXwwLHRhJj02NzEwODg2MyxEPU1hdGguaW11bChsbixfbikscD0ocD1NYXRoLmltdWwobG4sWnQpKStNYXRoLmltdWwoT24sX24pfDAsST1NYXRoLmltdWwoT24sWnQpLEQ9RCtNYXRoLmltdWwoZ3QscHQpfDAscD0ocD1wK01hdGguaW11bChn''@;'; put 'put ''dCxwbil8MCkrTWF0aC5pbXVsKFh0LHB0KXwwLEk9SStNYXRoLmltdWwoWHQscG4pfDAsRD1EK01hdGguaW11bChSdCxHZSl8MCxwPShwPXArTWF0aC5pbXVsKFJ0LFV0KXwwKStNYXRoLmltdWwoTHQsR2UpfDAsST1JK01hdGguaW11bChMdCxVdCl8MCxEPUQrTWF0aC5pbXVsKHR0LHh0KXww''@;'; put 'put ''LHA9KHA9cCtNYXRoLmltdWwodHQsQnQpfDApK01hdGguaW11bChLZSx4dCl8MCxJPUkrTWF0aC5pbXVsKEtlLEJ0KXwwLEQ9RCtNYXRoLmltdWwoaGUsR24pfDAscD0ocD1wK01hdGguaW11bChoZSx5bil8MCkrTWF0aC5pbXVsKHdlLEduKXwwLEk9SStNYXRoLmltdWwod2UseW4pfDAsRD1E''@;'; put 'put ''K01hdGguaW11bChGZSxycil8MCxwPShwPXArTWF0aC5pbXVsKEZlLGhyKXwwKStNYXRoLmltdWwoZ2UscnIpfDAsST1JK01hdGguaW11bChnZSxocil8MDt2YXIgTXI9KEcrKEQ9RCtNYXRoLmltdWwoamUsdm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChqZSxCbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKEFlLHZuKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKEFlLEJuKXwwKSsocD4+PjEzKXwwKSsoTXI+Pj4yNil8MCxNciY9NjcxMDg4NjMsRD1NYXRoLmltdWwobG4scHQpLHA9KHA9TWF0aC5pbXVsKGxuLHBuKSkrTWF0aC5pbXVsKE9uLHB0KXwwLEk9TWF0aC5pbXVsKE9u''@;'; put 'put ''LHBuKSxEPUQrTWF0aC5pbXVsKGd0LEdlKXwwLHA9KHA9cCtNYXRoLmltdWwoZ3QsVXQpfDApK01hdGguaW11bChYdCxHZSl8MCxJPUkrTWF0aC5pbXVsKFh0LFV0KXwwLEQ9RCtNYXRoLmltdWwoUnQseHQpfDAscD0ocD1wK01hdGguaW11bChSdCxCdCl8MCkrTWF0aC5pbXVsKEx0LHh0KXww''@;'; put 'put ''LEk9SStNYXRoLmltdWwoTHQsQnQpfDAsRD1EK01hdGguaW11bCh0dCxHbil8MCxwPShwPXArTWF0aC5pbXVsKHR0LHluKXwwKStNYXRoLmltdWwoS2UsR24pfDAsST1JK01hdGguaW11bChLZSx5bil8MCxEPUQrTWF0aC5pbXVsKGhlLHJyKXwwLHA9KHA9cCtNYXRoLmltdWwoaGUsaHIpfDAp''@;'; put 'put ''K01hdGguaW11bCh3ZSxycil8MCxJPUkrTWF0aC5pbXVsKHdlLGhyKXwwO3ZhciBGcz0oRysoRD1EK01hdGguaW11bChGZSx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEZlLEJuKXwwKStNYXRoLmltdWwoZ2Usdm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoZ2Us''@;'; put 'put ''Qm4pfDApKyhwPj4+MTMpfDApKyhGcz4+PjI2KXwwLEZzJj02NzEwODg2MyxEPU1hdGguaW11bChsbixHZSkscD0ocD1NYXRoLmltdWwobG4sVXQpKStNYXRoLmltdWwoT24sR2UpfDAsST1NYXRoLmltdWwoT24sVXQpLEQ9RCtNYXRoLmltdWwoZ3QseHQpfDAscD0ocD1wK01hdGguaW11bChn''@;'; put 'put ''dCxCdCl8MCkrTWF0aC5pbXVsKFh0LHh0KXwwLEk9SStNYXRoLmltdWwoWHQsQnQpfDAsRD1EK01hdGguaW11bChSdCxHbil8MCxwPShwPXArTWF0aC5pbXVsKFJ0LHluKXwwKStNYXRoLmltdWwoTHQsR24pfDAsST1JK01hdGguaW11bChMdCx5bil8MCxEPUQrTWF0aC5pbXVsKHR0LHJyKXww''@;'; put 'put ''LHA9KHA9cCtNYXRoLmltdWwodHQsaHIpfDApK01hdGguaW11bChLZSxycil8MCxJPUkrTWF0aC5pbXVsKEtlLGhyKXwwO3ZhciAkaT0oRysoRD1EK01hdGguaW11bChoZSx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGhlLEJuKXwwKStNYXRoLmltdWwod2Usdm4pfDApKTw8''@;'; put 'put ''MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwod2UsQm4pfDApKyhwPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxEPU1hdGguaW11bChsbix4dCkscD0ocD1NYXRoLmltdWwobG4sQnQpKStNYXRoLmltdWwoT24seHQpfDAsST1NYXRoLmltdWwoT24sQnQpLEQ9RCtNYXRoLmltdWwo''@;'; put 'put ''Z3QsR24pfDAscD0ocD1wK01hdGguaW11bChndCx5bil8MCkrTWF0aC5pbXVsKFh0LEduKXwwLEk9SStNYXRoLmltdWwoWHQseW4pfDAsRD1EK01hdGguaW11bChSdCxycil8MCxwPShwPXArTWF0aC5pbXVsKFJ0LGhyKXwwKStNYXRoLmltdWwoTHQscnIpfDAsST1JK01hdGguaW11bChMdCxo''@;'; put 'put ''cil8MDt2YXIgX3M9KEcrKEQ9RCtNYXRoLmltdWwodHQsdm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bCh0dCxCbil8MCkrTWF0aC5pbXVsKEtlLHZuKXwwKSk8PDEzKXwwO0c9KChJPUkrTWF0aC5pbXVsKEtlLEJuKXwwKSsocD4+PjEzKXwwKSsoX3M+Pj4yNil8MCxfcyY9Njcx''@;'; put 'put ''MDg4NjMsRD1NYXRoLmltdWwobG4sR24pLHA9KHA9TWF0aC5pbXVsKGxuLHluKSkrTWF0aC5pbXVsKE9uLEduKXwwLEk9TWF0aC5pbXVsKE9uLHluKSxEPUQrTWF0aC5pbXVsKGd0LHJyKXwwLHA9KHA9cCtNYXRoLmltdWwoZ3QsaHIpfDApK01hdGguaW11bChYdCxycil8MCxJPUkrTWF0aC5p''@;'; put 'put ''bXVsKFh0LGhyKXwwO3ZhciBqcz0oRysoRD1EK01hdGguaW11bChSdCx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFJ0LEJuKXwwKStNYXRoLmltdWwoTHQsdm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoTHQsQm4pfDApKyhwPj4+MTMpfDApKyhqcz4+PjI2KXww''@;'; put 'put ''LGpzJj02NzEwODg2MyxEPU1hdGguaW11bChsbixycikscD0ocD1NYXRoLmltdWwobG4saHIpKStNYXRoLmltdWwoT24scnIpfDAsST1NYXRoLmltdWwoT24saHIpO3ZhciBDbD0oRysoRD1EK01hdGguaW11bChndCx2bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGd0LEJuKXww''@;'; put 'put ''KStNYXRoLmltdWwoWHQsdm4pfDApKTw8MTMpfDA7Rz0oKEk9SStNYXRoLmltdWwoWHQsQm4pfDApKyhwPj4+MTMpfDApKyhDbD4+PjI2KXwwLENsJj02NzEwODg2Mzt2YXIgVGk9KEcrKEQ9TWF0aC5pbXVsKGxuLHZuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChsbixCbikpK01hdGgu''@;'; put 'put ''aW11bChPbix2bil8MCkpPDwxMyl8MDtyZXR1cm4gRz0oKEk9TWF0aC5pbXVsKE9uLEJuKSkrKHA+Pj4xMyl8MCkrKFRpPj4+MjYpfDAsVGkmPTY3MTA4ODYzLEtbMF09amEsS1sxXT1qbyxLWzJdPVhyLEtbM109ZWEsS1s0XT1yYSxLWzVdPWNhLEtbNl09Q2ksS1s3XT1obyxLWzhdPU1hLEtb''@;'; put 'put ''OV09a3MsS1sxMF09QmksS1sxMV09dGEsS1sxMl09TXIsS1sxM109RnMsS1sxNF09JGksS1sxNV09X3MsS1sxNl09anMsS1sxN109Q2wsS1sxOF09VGksMCE9PUcmJihLWzE5XT1HLGsubGVuZ3RoKyspLGt9O2Z1bmN0aW9uIFkoWCxmLGIpe3JldHVybihuZXcgRikubXVscChYLGYsYil9ZnVu''@;'; put 'put ''Y3Rpb24gRihYLGYpe3RoaXMueD1YLHRoaXMueT1mfU1hdGguaW11bHx8KE49Viksdi5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZixiKXt2YXIgayxNPXRoaXMubGVuZ3RoK2YubGVuZ3RoO3JldHVybiBrPTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zi5sZW5ndGg/Tih0aGlzLGYsYik6TTw2''@;'; put 'put ''Mz9WKHRoaXMsZixiKTpNPDEwMjQ/ZnVuY3Rpb24geihYLGYsYil7Yi5uZWdhdGl2ZT1mLm5lZ2F0aXZlXlgubmVnYXRpdmUsYi5sZW5ndGg9WC5sZW5ndGgrZi5sZW5ndGg7Zm9yKHZhciBrPTAsTT0wLEI9MDtCPGIubGVuZ3RoLTE7QisrKXt2YXIgSz1NO009MDtmb3IodmFyIEc9NjcxMDg4''@;'; put 'put ''NjMmayxEPU1hdGgubWluKEIsZi5sZW5ndGgtMSkscD1NYXRoLm1heCgwLEItWC5sZW5ndGgrMSk7cDw9RDtwKyspe3ZhciBfZT0oMHxYLndvcmRzW0ItcF0pKigwfGYud29yZHNbcF0pLFBlPTY3MTA4ODYzJl9lO0c9NjcxMDg4NjMmKFBlPVBlK0d8MCksTSs9KEs9KEs9SysoX2UvNjcxMDg4''@;'; put 'put ''NjR8MCl8MCkrKFBlPj4+MjYpfDApPj4+MjYsSyY9NjcxMDg4NjN9Yi53b3Jkc1tCXT1HLGs9SyxLPU19cmV0dXJuIDAhPT1rP2Iud29yZHNbQl09azpiLmxlbmd0aC0tLGIuc3RyaXAoKX0odGhpcyxmLGIpOlkodGhpcyxmLGIpLGt9LEYucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZil7''@;'; put 'put ''Zm9yKHZhciBiPW5ldyBBcnJheShmKSxrPXYucHJvdG90eXBlLl9jb3VudEJpdHMoZiktMSxNPTA7TTxmO00rKyliW01dPXRoaXMucmV2QmluKE0sayxmKTtyZXR1cm4gYn0sRi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGYsYixrKXtpZigwPT09Znx8Zj09PWstMSlyZXR1cm4gZjtmb3Io''@;'; put 'put ''dmFyIE09MCxCPTA7QjxiO0IrKylNfD0oMSZmKTw8Yi1CLTEsZj4+PTE7cmV0dXJuIE19LEYucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZixiLGssTSxCLEspe2Zvcih2YXIgRz0wO0c8SztHKyspTVtHXT1iW2ZbR11dLEJbR109a1tmW0ddXX0sRi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1''@;'; put 'put ''bmN0aW9uKGYsYixrLE0sQixLKXt0aGlzLnBlcm11dGUoSyxmLGIsayxNLEIpO2Zvcih2YXIgRz0xO0c8QjtHPDw9MSlmb3IodmFyIEQ9Rzw8MSxwPU1hdGguY29zKDIqTWF0aC5QSS9EKSxJPU1hdGguc2luKDIqTWF0aC5QSS9EKSx1ZT0wO3VlPEI7dWUrPUQpZm9yKHZhciBuZT1wLF9lPUks''@;'; put 'put ''UGU9MDtQZTxHO1BlKyspe3ZhciBvdD1rW3VlK1BlXSxsdD1NW3VlK1BlXSxkdD1rW3VlK1BlK0ddLFJlPU1bdWUrUGUrR10sYWU9bmUqZHQtX2UqUmU7UmU9bmUqUmUrX2UqZHQsa1t1ZStQZV09b3QrKGR0PWFlKSxNW3VlK1BlXT1sdCtSZSxrW3VlK1BlK0ddPW90LWR0LE1bdWUrUGUrR109''@;'; put 'put ''bHQtUmUsUGUhPT1EJiYoYWU9cCpuZS1JKl9lLF9lPXAqX2UrSSpuZSxuZT1hZSl9fSxGLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihmLGIpe3ZhciBrPTF8TWF0aC5tYXgoYixmKSxNPTEmayxCPTA7Zm9yKGs9ay8yfDA7aztrPj4+PTEpQisrO3JldHVybiAxPDxCKzErTX0sRi5w''@;'; put 'put ''cm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGYsYixrKXtpZighKGs8PTEpKWZvcih2YXIgTT0wO008ay8yO00rKyl7dmFyIEI9ZltNXTtmW01dPWZbay1NLTFdLGZbay1NLTFdPUIsQj1iW01dLGJbTV09LWJbay1NLTFdLGJbay1NLTFdPS1CfX0sRi5wcm90b3R5cGUubm9ybWFsaXplMTNi''@;'; put 'put ''PWZ1bmN0aW9uKGYsYil7Zm9yKHZhciBrPTAsTT0wO008Yi8yO00rKyl7dmFyIEI9ODE5MipNYXRoLnJvdW5kKGZbMipNKzFdL2IpK01hdGgucm91bmQoZlsyKk1dL2IpK2s7ZltNXT02NzEwODg2MyZCLGs9Qjw2NzEwODg2ND8wOkIvNjcxMDg4NjR8MH1yZXR1cm4gZn0sRi5wcm90b3R5cGUu''@;'; put 'put ''Y29udmVydDEzYj1mdW5jdGlvbihmLGIsayxNKXtmb3IodmFyIEI9MCxLPTA7SzxiO0srKylrWzIqS109ODE5MSYoQis9MHxmW0tdKSxrWzIqSysxXT04MTkxJihCPj4+PTEzKSxCPj4+PTEzO2ZvcihLPTIqYjtLPE07KytLKWtbS109MDtzKDA9PT1CKSxzKCEoLTgxOTImQikpfSxGLnByb3Rv''@;'; put 'put ''dHlwZS5zdHViPWZ1bmN0aW9uKGYpe2Zvcih2YXIgYj1uZXcgQXJyYXkoZiksaz0wO2s8ZjtrKyspYltrXT0wO3JldHVybiBifSxGLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGYsYixrKXt2YXIgTT0yKnRoaXMuZ3Vlc3NMZW4xM2IoZi5sZW5ndGgsYi5sZW5ndGgpLEI9dGhpcy5tYWtlUkJU''@;'; put 'put ''KE0pLEs9dGhpcy5zdHViKE0pLEc9bmV3IEFycmF5KE0pLEQ9bmV3IEFycmF5KE0pLHA9bmV3IEFycmF5KE0pLEk9bmV3IEFycmF5KE0pLHVlPW5ldyBBcnJheShNKSxuZT1uZXcgQXJyYXkoTSksX2U9ay53b3JkcztfZS5sZW5ndGg9TSx0aGlzLmNvbnZlcnQxM2IoZi53b3JkcyxmLmxlbmd0''@;'; put 'put ''aCxHLE0pLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEksTSksdGhpcy50cmFuc2Zvcm0oRyxLLEQscCxNLEIpLHRoaXMudHJhbnNmb3JtKEksSyx1ZSxuZSxNLEIpO2Zvcih2YXIgUGU9MDtQZTxNO1BlKyspe3ZhciBvdD1EW1BlXSp1ZVtQZV0tcFtQZV0qbmVbUGVdO3BbUGVd''@;'; put 'put ''PURbUGVdKm5lW1BlXStwW1BlXSp1ZVtQZV0sRFtQZV09b3R9cmV0dXJuIHRoaXMuY29uanVnYXRlKEQscCxNKSx0aGlzLnRyYW5zZm9ybShELHAsX2UsSyxNLEIpLHRoaXMuY29uanVnYXRlKF9lLEssTSksdGhpcy5ub3JtYWxpemUxM2IoX2UsTSksay5uZWdhdGl2ZT1mLm5lZ2F0aXZlXmIu''@;'; put 'put ''bmVnYXRpdmUsay5sZW5ndGg9Zi5sZW5ndGgrYi5sZW5ndGgsay5zdHJpcCgpfSx2LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZil7dmFyIGI9bmV3IHYobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2YubGVuZ3RoKSx0aGlzLm11bFRvKGYsYil9LHYucHJvdG90''@;'; put 'put ''eXBlLm11bGY9ZnVuY3Rpb24oZil7dmFyIGI9bmV3IHYobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2YubGVuZ3RoKSxZKHRoaXMsZixiKX0sdi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGYsdGhpcyl9LHYu''@;'; put 'put ''cHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGYpe3MoIm51bWJlciI9PXR5cGVvZiBmKSxzKGY8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLGs9MDtrPHRoaXMubGVuZ3RoO2srKyl7dmFyIE09KDB8dGhpcy53b3Jkc1trXSkqZixCPSg2NzEwODg2MyZNKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPU0v''@;'; put 'put ''NjcxMDg4NjR8MCxiKz1CPj4+MjYsdGhpcy53b3Jkc1trXT02NzEwODg2MyZCfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNba109Yix0aGlzLmxlbmd0aCsrKSwwPT09ZiYmKHRoaXMubGVuZ3RoPTEsdGhpcy5fbm9ybVNpZ24oKSksdGhpc30sdi5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihm''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGYpfSx2LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHYucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHYucHJvdG90eXBlLnBvdz1mdW5jdGlv''@;'; put 'put ''bihmKXt2YXIgYj1mdW5jdGlvbiBIKFgpe2Zvcih2YXIgZj1uZXcgQXJyYXkoWC5iaXRMZW5ndGgoKSksYj0wO2I8Zi5sZW5ndGg7YisrKXt2YXIgTT1iJTI2O2ZbYl09KFgud29yZHNbYi8yNnwwXSYxPDxNKT4+Pk19cmV0dXJuIGZ9KGYpO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHYo''@;'; put 'put ''MSk7Zm9yKHZhciBrPXRoaXMsTT0wO008Yi5sZW5ndGgmJjA9PT1iW01dO00rKyxrPWsuc3FyKCkpO2lmKCsrTTxiLmxlbmd0aClmb3IodmFyIEI9ay5zcXIoKTtNPGIubGVuZ3RoO00rKyxCPUIuc3FyKCkpMCE9PWJbTV0mJihrPWsubXVsKEIpKTtyZXR1cm4ga30sdi5wcm90b3R5cGUuaXVz''@;'; put 'put ''aGxuPWZ1bmN0aW9uKGYpe3MoIm51bWJlciI9PXR5cGVvZiBmJiZmPj0wKTt2YXIgQixiPWYlMjYsaz0oZi1iKS8yNixNPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEs9MDtmb3IoQj0wO0I8dGhpcy5sZW5ndGg7QisrKXt2YXIgRz10aGlzLndvcmRzW0JdJk07dGhpcy53''@;'; put 'put ''b3Jkc1tCXT0oMHx0aGlzLndvcmRzW0JdKS1HPDxifEssSz1HPj4+MjYtYn1LJiYodGhpcy53b3Jkc1tCXT1LLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1rKXtmb3IoQj10aGlzLmxlbmd0aC0xO0I+PTA7Qi0tKXRoaXMud29yZHNbQitrXT10aGlzLndvcmRzW0JdO2ZvcihCPTA7QjxrO0IrKyl0''@;'; put 'put ''aGlzLndvcmRzW0JdPTA7dGhpcy5sZW5ndGgrPWt9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdi5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZil7cmV0dXJuIHMoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGYpfSx2LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZixiLGspe3ZhciBN''@;'; put 'put ''O3MoIm51bWJlciI9PXR5cGVvZiBmJiZmPj0wKSxNPWI/KGItYiUyNikvMjY6MDt2YXIgQj1mJTI2LEs9TWF0aC5taW4oKGYtQikvMjYsdGhpcy5sZW5ndGgpLEc9NjcxMDg4NjNeNjcxMDg4NjM+Pj5CPDxCLEQ9aztpZihNLT1LLE09TWF0aC5tYXgoMCxNKSxEKXtmb3IodmFyIHA9MDtwPEs7''@;'; put 'put ''cCsrKUQud29yZHNbcF09dGhpcy53b3Jkc1twXTtELmxlbmd0aD1LfWlmKDAhPT1LKWlmKHRoaXMubGVuZ3RoPkspZm9yKHRoaXMubGVuZ3RoLT1LLHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPXRoaXMud29yZHNbcCtLXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxl''@;'; put 'put ''bmd0aD0xO3ZhciBJPTA7Zm9yKHA9dGhpcy5sZW5ndGgtMTtwPj0wJiYoMCE9PUl8fHA+PU0pO3AtLSl7dmFyIHVlPTB8dGhpcy53b3Jkc1twXTt0aGlzLndvcmRzW3BdPUk8PDI2LUJ8dWU+Pj5CLEk9dWUmR31yZXR1cm4gRCYmMCE9PUkmJihELndvcmRzW0QubGVuZ3RoKytdPUkpLDA9PT10''@;'; put 'put ''aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGYsYixrKXtyZXR1cm4gcygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZixiLGspfSx2LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9u''@;'; put 'put ''KGYpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZil9LHYucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGYpfSx2LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZil9LHYucHJvdG90eXBl''@;'; put 'put ''LnVzaHJuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGYpfSx2LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihmKXtzKCJudW1iZXIiPT10eXBlb2YgZiYmZj49MCk7dmFyIGI9ZiUyNixrPShmLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PWt8fCEodGhpcy53b3Jk''@;'; put 'put ''c1trXSYxPDxiKSl9LHYucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihmKXtzKCJudW1iZXIiPT10eXBlb2YgZiYmZj49MCk7dmFyIGI9ZiUyNixrPShmLWIpLzI2O3JldHVybiBzKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0''@;'; put 'put ''aGlzLmxlbmd0aDw9az90aGlzOigwIT09YiYmaysrLHRoaXMubGVuZ3RoPU1hdGgubWluKGssdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhp''@;'; put 'put ''cy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpKX0sdi5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZil9LHYucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGYpe3JldHVybiBzKCJudW1iZXIiPT10eXBlb2YgZikscyhmPDY3MTA4ODY0KSxmPDA/''@;'; put 'put ''dGhpcy5pc3VibigtZik6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxmPyh0aGlzLndvcmRzWzBdPWYtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihmKSx0aGlzLm5l''@;'; put 'put ''Z2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZil9LHYucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihmKXt0aGlzLndvcmRzWzBdKz1mO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl0+PTY3MTA4ODY0O2IrKyl0aGlzLndvcmRzW2JdLT02NzEwODg2NCxiPT09dGhp''@;'; put 'put ''cy5sZW5ndGgtMT90aGlzLndvcmRzW2IrMV09MTp0aGlzLndvcmRzW2IrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYisxKSx0aGlzfSx2LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihmKXtpZihzKCJudW1iZXIiPT10eXBlb2YgZikscyhmPDY3MTA4ODY0''@;'; put 'put ''KSxmPDApcmV0dXJuIHRoaXMuaWFkZG4oLWYpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihmKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1mLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMu''@;'; put 'put ''d29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXTwwO2IrKyl0aGlzLndvcmRzW2JdKz02NzEwODg2NCx0aGlzLndvcmRzW2IrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdi5wcm90b3R5''@;'; put 'put ''cGUuYWRkbj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGYpfSx2LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZil9LHYucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9''@;'; put 'put ''LHYucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx2LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZixiLGspe3ZhciBCO3RoaXMuX2V4cGFuZChmLmxlbmd0aCtrKTt2YXIgSyxHPTA7Zm9yKEI9MDtCPGYubGVuZ3RoO0IrKyl7Sz0o''@;'; put 'put ''MHx0aGlzLndvcmRzW0Ira10pK0c7dmFyIEQ9KDB8Zi53b3Jkc1tCXSkqYjtHPSgoSy09NjcxMDg4NjMmRCk+PjI2KS0oRC82NzEwODg2NHwwKSx0aGlzLndvcmRzW0Ira109NjcxMDg4NjMmS31mb3IoO0I8dGhpcy5sZW5ndGgtaztCKyspRz0oSz0oMHx0aGlzLndvcmRzW0Ira10pK0cpPj4y''@;'; put 'put ''Nix0aGlzLndvcmRzW0Ira109NjcxMDg4NjMmSztpZigwPT09RylyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihzKC0xPT09RyksRz0wLEI9MDtCPHRoaXMubGVuZ3RoO0IrKylHPShLPS0oMHx0aGlzLndvcmRzW0JdKStHKT4+MjYsdGhpcy53b3Jkc1tCXT02NzEwODg2MyZLO3JldHVybiB0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx2LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihmLGIpe3ZhciBrLE09dGhpcy5jbG9uZSgpLEI9ZixLPTB8Qi53b3Jkc1tCLmxlbmd0aC0xXTswIT0oaz0yNi10aGlzLl9jb3VudEJpdHMoSykpJiYoQj1CLnVzaGxuKGspLE0uaXVzaGxuKGsp''@;'; put 'put ''LEs9MHxCLndvcmRzW0IubGVuZ3RoLTFdKTt2YXIgcCxEPU0ubGVuZ3RoLUIubGVuZ3RoO2lmKCJtb2QiIT09Yil7KHA9bmV3IHYobnVsbCkpLmxlbmd0aD1EKzEscC53b3Jkcz1uZXcgQXJyYXkocC5sZW5ndGgpO2Zvcih2YXIgST0wO0k8cC5sZW5ndGg7SSsrKXAud29yZHNbSV09MH12YXIg''@;'; put 'put ''dWU9TS5jbG9uZSgpLl9pc2hsbnN1Ym11bChCLDEsRCk7MD09PXVlLm5lZ2F0aXZlJiYoTT11ZSxwJiYocC53b3Jkc1tEXT0xKSk7Zm9yKHZhciBuZT1ELTE7bmU+PTA7bmUtLSl7dmFyIF9lPTY3MTA4ODY0KigwfE0ud29yZHNbQi5sZW5ndGgrbmVdKSsoMHxNLndvcmRzW0IubGVuZ3RoK25l''@;'; put 'put ''LTFdKTtmb3IoX2U9TWF0aC5taW4oX2UvS3wwLDY3MTA4ODYzKSxNLl9pc2hsbnN1Ym11bChCLF9lLG5lKTswIT09TS5uZWdhdGl2ZTspX2UtLSxNLm5lZ2F0aXZlPTAsTS5faXNobG5zdWJtdWwoQiwxLG5lKSxNLmlzWmVybygpfHwoTS5uZWdhdGl2ZV49MSk7cCYmKHAud29yZHNbbmVdPV9l''@;'; put 'put ''KX1yZXR1cm4gcCYmcC5zdHJpcCgpLE0uc3RyaXAoKSwiZGl2IiE9PWImJjAhPT1rJiZNLml1c2hybihrKSx7ZGl2OnB8fG51bGwsbW9kOk19fSx2LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZixiLGspe3JldHVybiBzKCFmLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHYo''@;'; put 'put ''MCksbW9kOm5ldyB2KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWYubmVnYXRpdmU/KEs9dGhpcy5uZWcoKS5kaXZtb2QoZixiKSwibW9kIiE9PWImJihNPUsuZGl2Lm5lZygpKSwiZGl2IiE9PWImJihCPUsubW9kLm5lZygpLGsmJjAhPT1CLm5lZ2F0aXZlJiZCLmlhZGQoZikpLHtkaXY6''@;'; put 'put ''TSxtb2Q6Qn0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zi5uZWdhdGl2ZT8oSz10aGlzLmRpdm1vZChmLm5lZygpLGIpLCJtb2QiIT09YiYmKE09Sy5kaXYubmVnKCkpLHtkaXY6TSxtb2Q6Sy5tb2R9KTowIT09KHRoaXMubmVnYXRpdmUmZi5uZWdhdGl2ZSk/KEs9dGhpcy5uZWcoKS5kaXZt''@;'; put 'put ''b2QoZi5uZWcoKSxiKSwiZGl2IiE9PWImJihCPUsubW9kLm5lZygpLGsmJjAhPT1CLm5lZ2F0aXZlJiZCLmlzdWIoZikpLHtkaXY6Sy5kaXYsbW9kOkJ9KTpmLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZik8MD97ZGl2Om5ldyB2KDApLG1vZDp0aGlzfToxPT09Zi5sZW5ndGg/ImRp''@;'; put 'put ''diI9PT1iP3tkaXY6dGhpcy5kaXZuKGYud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWI/e2RpdjpudWxsLG1vZDpuZXcgdih0aGlzLm1vZG4oZi53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihmLndvcmRzWzBdKSxtb2Q6bmV3IHYodGhpcy5tb2RuKGYud29yZHNbMF0pKX06dGhpcy5f''@;'; put 'put ''d29yZERpdihmLGIpO3ZhciBNLEIsS30sdi5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmRpdm1vZChmLCJkaXYiLCExKS5kaXZ9LHYucHJvdG90eXBlLm1vZD1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5kaXZtb2QoZiwibW9kIiwhMSkubW9kfSx2LnByb3RvdHlwZS51''@;'; put 'put ''bW9kPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmRpdm1vZChmLCJtb2QiLCEwKS5tb2R9LHYucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGYpe3ZhciBiPXRoaXMuZGl2bW9kKGYpO2lmKGIubW9kLmlzWmVybygpKXJldHVybiBiLmRpdjt2YXIgaz1iLm1vZC5hYnMoKSxNPWYuYWJzKCku''@;'; put 'put ''aXVzaHJuKDEpLEI9MSZmLndvcmRzWzBdLEs9ay5jbXAoTSk7aWYoSzwwfHwxPT09QiYmMD09PUspcmV0dXJuIGIuZGl2O3ZhciBHPW5ldyB2KDEpO3JldHVybiBHLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmVeZi5uZWdhdGl2ZSxiLmRpdi5pYWRkKEcpfSx2LnByb3RvdHlwZS5tb2RuPWZ1bmN0''@;'; put 'put ''aW9uKGYpe3MoZjw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJWYsaz0wLE09dGhpcy5sZW5ndGgtMTtNPj0wO00tLSlrPShiKmsrKDB8dGhpcy53b3Jkc1tNXSkpJWY7cmV0dXJuIGt9LHYucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGYpe3MoZjw9NjcxMDg4NjMpO2Zvcih2YXIgYj0w''@;'; put 'put ''LGs9dGhpcy5sZW5ndGgtMTtrPj0wO2stLSl7dmFyIE09KDB8dGhpcy53b3Jkc1trXSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW2tdPU0vZnwwLGI9TSVmfXJldHVybiB0aGlzLnN0cmlwKCl9LHYucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihm''@;'; put 'put ''KX0sdi5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihmKXtzKDA9PT1mLm5lZ2F0aXZlKSxzKCFmLmlzWmVybygpKTt2YXIgYj10aGlzLGs9Zi5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKGYpOmIuY2xvbmUoKTtmb3IodmFyIE09bmV3IHYoMSksQj1uZXcgdigwKSxLPW5ldyB2KDAp''@;'; put 'put ''LEc9bmV3IHYoMSksRD0wO2IuaXNFdmVuKCkmJmsuaXNFdmVuKCk7KWIuaXVzaHJuKDEpLGsuaXVzaHJuKDEpLCsrRDtmb3IodmFyIHA9ay5jbG9uZSgpLEk9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciB1ZT0wLG5lPTE7MD09PShiLndvcmRzWzBdJm5lKSYmdWU8MjY7Kyt1ZSxu''@;'; put 'put ''ZTw8PTEpO2lmKHVlPjApZm9yKGIuaXVzaHJuKHVlKTt1ZS0tID4wOykoTS5pc09kZCgpfHxCLmlzT2RkKCkpJiYoTS5pYWRkKHApLEIuaXN1YihJKSksTS5pdXNocm4oMSksQi5pdXNocm4oMSk7Zm9yKHZhciBfZT0wLFBlPTE7MD09PShrLndvcmRzWzBdJlBlKSYmX2U8MjY7KytfZSxQZTw8''@;'; put 'put ''PTEpO2lmKF9lPjApZm9yKGsuaXVzaHJuKF9lKTtfZS0tID4wOykoSy5pc09kZCgpfHxHLmlzT2RkKCkpJiYoSy5pYWRkKHApLEcuaXN1YihJKSksSy5pdXNocm4oMSksRy5pdXNocm4oMSk7Yi5jbXAoayk+PTA/KGIuaXN1YihrKSxNLmlzdWIoSyksQi5pc3ViKEcpKTooay5pc3ViKGIpLEsu''@;'; put 'put ''aXN1YihNKSxHLmlzdWIoQikpfXJldHVybnthOkssYjpHLGdjZDprLml1c2hsbihEKX19LHYucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihmKXtzKDA9PT1mLm5lZ2F0aXZlKSxzKCFmLmlzWmVybygpKTt2YXIgdWUsYj10aGlzLGs9Zi5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9k''@;'; put 'put ''KGYpOmIuY2xvbmUoKTtmb3IodmFyIE09bmV3IHYoMSksQj1uZXcgdigwKSxLPWsuY2xvbmUoKTtiLmNtcG4oMSk+MCYmay5jbXBuKDEpPjA7KXtmb3IodmFyIEc9MCxEPTE7MD09PShiLndvcmRzWzBdJkQpJiZHPDI2OysrRyxEPDw9MSk7aWYoRz4wKWZvcihiLml1c2hybihHKTtHLS0gPjA7''@;'; put 'put ''KU0uaXNPZGQoKSYmTS5pYWRkKEspLE0uaXVzaHJuKDEpO2Zvcih2YXIgcD0wLEk9MTswPT09KGsud29yZHNbMF0mSSkmJnA8MjY7KytwLEk8PD0xKTtpZihwPjApZm9yKGsuaXVzaHJuKHApO3AtLSA+MDspQi5pc09kZCgpJiZCLmlhZGQoSyksQi5pdXNocm4oMSk7Yi5jbXAoayk+PTA/KGIu''@;'; put 'put ''aXN1YihrKSxNLmlzdWIoQikpOihrLmlzdWIoYiksQi5pc3ViKE0pKX1yZXR1cm4odWU9MD09PWIuY21wbigxKT9NOkIpLmNtcG4oMCk8MCYmdWUuaWFkZChmKSx1ZX0sdi5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGYpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGYuYWJzKCk7aWYoZi5pc1pl''@;'; put 'put ''cm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCksaz1mLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLGsubmVnYXRpdmU9MDtmb3IodmFyIE09MDtiLmlzRXZlbigpJiZrLmlzRXZlbigpO00rKyliLml1c2hybigxKSxrLml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4o''@;'; put 'put ''KTspYi5pdXNocm4oMSk7Zm9yKDtrLmlzRXZlbigpOylrLml1c2hybigxKTt2YXIgQj1iLmNtcChrKTtpZihCPDApe3ZhciBLPWI7Yj1rLGs9S31lbHNlIGlmKDA9PT1CfHwwPT09ay5jbXBuKDEpKWJyZWFrO2IuaXN1YihrKX1yZXR1cm4gay5pdXNobG4oTSl9LHYucHJvdG90eXBlLmludm09''@;'; put 'put ''ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuZWdjZChmKS5hLnVtb2QoZil9LHYucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdi5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx2LnByb3RvdHlw''@;'; put 'put ''ZS5hbmRsbj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZmfSx2LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihmKXtzKCJudW1iZXIiPT10eXBlb2YgZik7dmFyIGI9ZiUyNixrPShmLWIpLzI2LE09MTw8YjtpZih0aGlzLmxlbmd0aDw9aylyZXR1cm4gdGhpcy5fZXhwYW5kKGsr''@;'; put 'put ''MSksdGhpcy53b3Jkc1trXXw9TSx0aGlzO2Zvcih2YXIgQj1NLEs9azswIT09QiYmSzx0aGlzLmxlbmd0aDtLKyspe3ZhciBHPTB8dGhpcy53b3Jkc1tLXTtCPShHKz1CKT4+PjI2LHRoaXMud29yZHNbS109RyY9NjcxMDg4NjN9cmV0dXJuIDAhPT1CJiYodGhpcy53b3Jkc1tLXT1CLHRoaXMu''@;'; put 'put ''bGVuZ3RoKyspLHRoaXN9LHYucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx2LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGYpe3ZhciBrLGI9ZjwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtp''@;'; put 'put ''ZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlrPTE7ZWxzZXtiJiYoZj0tZikscyhmPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgTT0wfHRoaXMud29yZHNbMF07az1NPT09Zj8wOk08Zj8tMToxfXJldHVybiAw''@;'; put 'put ''IT09dGhpcy5uZWdhdGl2ZT8wfC1rOmt9LHYucHJvdG90eXBlLmNtcD1mdW5jdGlvbihmKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWYubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1mLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChmKTty''@;'; put 'put ''ZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx2LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGYpe2lmKHRoaXMubGVuZ3RoPmYubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGYubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLGs9dGhpcy5sZW5ndGgtMTtrPj0wO2stLSl7''@;'; put 'put ''dmFyIE09MHx0aGlzLndvcmRzW2tdLEI9MHxmLndvcmRzW2tdO2lmKE0hPT1CKXtNPEI/Yj0tMTpNPkImJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdi5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGYpe3JldHVybiAxPT09dGhpcy5jbXBuKGYpfSx2LnByb3RvdHlwZS5ndD1mdW5jdGlvbihmKXty''@;'; put 'put ''ZXR1cm4gMT09PXRoaXMuY21wKGYpfSx2LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmNtcG4oZik+PTB9LHYucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbXAoZik+PTB9LHYucHJvdG90eXBlLmx0bj1mdW5jdGlvbihmKXtyZXR1cm4tMT09''@;'; put 'put ''PXRoaXMuY21wbihmKX0sdi5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZil7cmV0dXJuLTE9PT10aGlzLmNtcChmKX0sdi5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5jbXBuKGYpPD0wfSx2LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuY21wKGYp''@;'; put 'put ''PD0wfSx2LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZil7cmV0dXJuIDA9PT10aGlzLmNtcG4oZil9LHYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGYpe3JldHVybiAwPT09dGhpcy5jbXAoZil9LHYucmVkPWZ1bmN0aW9uKGYpe3JldHVybiBuZXcga2UoZil9LHYucHJvdG90eXBlLnRvUmVkPWZ1''@;'; put 'put ''bmN0aW9uKGYpe3JldHVybiBzKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHMoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZi5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGYpfSx2LnByb3RvdHlw''@;'; put 'put ''ZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdi5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGYpe3JldHVybiB0''@;'; put 'put ''aGlzLnJlZD1mLHRoaXN9LHYucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGYpe3JldHVybiBzKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGYpfSx2LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZil7cmV0dXJu''@;'; put 'put ''IHModGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxmKX0sdi5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihmKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlz''@;'; put 'put ''LnJlZC5pYWRkKHRoaXMsZil9LHYucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihmKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGYpfSx2LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGYpe3JldHVy''@;'; put 'put ''biBzKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxmKX0sdi5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGYpe3JldHVybiBzKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhp''@;'; put 'put ''cy5yZWQuc2hsKHRoaXMsZil9LHYucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihmKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZiksdGhpcy5yZWQubXVsKHRoaXMsZil9LHYucHJvdG90eXBl''@;'; put 'put ''LnJlZElNdWw9ZnVuY3Rpb24oZil7cmV0dXJuIHModGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGYpLHRoaXMucmVkLmltdWwodGhpcyxmKX0sdi5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHMo''@;'; put 'put ''dGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHYucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGgg''@;'; put 'put ''cmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx2LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEo''@;'; put 'put ''dGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdi5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBzKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHYucHJv''@;'; put 'put ''dG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBzKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx2LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZil7cmV0dXJuIHMo''@;'; put 'put ''dGhpcy5yZWQmJiFmLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxmKX07dmFyIFc9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBxKFgsZil7dGhpcy5uYW1lPVgsdGhp''@;'; put 'put ''cy5wPW5ldyB2KGYsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB2KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiByZSgpe3EuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe3EuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBDZSgpe3Eu''@;'; put 'put ''Y2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBJZSgpe3EuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBrZShYKXtpZigic3RyaW5nIj09dHlwZW9mIFgpe3ZhciBmPXYuX3ByaW1lKFgpO3RoaXMubT1mLnAsdGhpcy5wcmltZT1mfWVsc2UgcyhYLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVgsdGhpcy5wcmltZT1u''@;'; put 'put ''dWxsfWZ1bmN0aW9uIHFlKFgpe2tlLmNhbGwodGhpcyxYKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB2KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1v''@;'; put 'put ''ZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYp''@;'; put 'put ''fXEucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZj1uZXcgdihudWxsKTtyZXR1cm4gZi53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGZ9LHEucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZil7dmFyIGssYj1mO2Rve3RoaXMuc3BsaXQoYix0aGlzLnRtcCks''@;'; put 'put ''az0oYj0oYj10aGlzLmltdWxLKGIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoaz50aGlzLm4pO3ZhciBNPWs8dGhpcy5uPy0xOmIudWNtcCh0aGlzLnApO3JldHVybiAwPT09TT8oYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEpOk0+MD9iLmlzdWIodGhpcy5wKTp2b2lkIDAh''@;'; put 'put ''PT1iLnN0cmlwP2Iuc3RyaXAoKTpiLl9zdHJpcCgpLGJ9LHEucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGYsYil7Zi5pdXNocm4odGhpcy5uLDAsYil9LHEucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGYpe3JldHVybiBmLmltdWwodGhpcy5rKX0sQShyZSxxKSxyZS5wcm90b3R5cGUuc3Bs''@;'; put 'put ''aXQ9ZnVuY3Rpb24oZixiKXtmb3IodmFyIGs9NDE5NDMwMyxNPU1hdGgubWluKGYubGVuZ3RoLDkpLEI9MDtCPE07QisrKWIud29yZHNbQl09Zi53b3Jkc1tCXTtpZihiLmxlbmd0aD1NLGYubGVuZ3RoPD05KXJldHVybiBmLndvcmRzWzBdPTAsdm9pZChmLmxlbmd0aD0xKTt2YXIgSz1mLndv''@;'; put 'put ''cmRzWzldO2ZvcihiLndvcmRzW2IubGVuZ3RoKytdPUsmayxCPTEwO0I8Zi5sZW5ndGg7QisrKXt2YXIgRz0wfGYud29yZHNbQl07Zi53b3Jkc1tCLTEwXT0oRyZrKTw8NHxLPj4+MjIsSz1HfWYud29yZHNbQi0xMF09Sz4+Pj0yMixmLmxlbmd0aC09MD09PUsmJmYubGVuZ3RoPjEwPzEwOjl9''@;'; put 'put ''LHJlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihmKXtmLndvcmRzW2YubGVuZ3RoXT0wLGYud29yZHNbZi5sZW5ndGgrMV09MCxmLmxlbmd0aCs9Mjtmb3IodmFyIGI9MCxrPTA7azxmLmxlbmd0aDtrKyspe3ZhciBNPTB8Zi53b3Jkc1trXTtmLndvcmRzW2tdPTY3MTA4ODYzJihiKz05Nzcq''@;'; put 'put ''TSksYj02NCpNKyhiLzY3MTA4ODY0fDApfXJldHVybiAwPT09Zi53b3Jkc1tmLmxlbmd0aC0xXSYmKGYubGVuZ3RoLS0sMD09PWYud29yZHNbZi5sZW5ndGgtMV0mJmYubGVuZ3RoLS0pLGZ9LEEobWUscSksQShDZSxxKSxBKEllLHEpLEllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihmKXtm''@;'; put 'put ''b3IodmFyIGI9MCxrPTA7azxmLmxlbmd0aDtrKyspe3ZhciBNPTE5KigwfGYud29yZHNba10pK2IsQj02NzEwODg2MyZNO00+Pj49MjYsZi53b3Jkc1trXT1CLGI9TX1yZXR1cm4gMCE9PWImJihmLndvcmRzW2YubGVuZ3RoKytdPWIpLGZ9LHYuX3ByaW1lPWZ1bmN0aW9uKGYpe2lmKFdbZl0p''@;'; put 'put ''cmV0dXJuIFdbZl07dmFyIGI7aWYoImsyNTYiPT09ZiliPW5ldyByZTtlbHNlIGlmKCJwMjI0Ij09PWYpYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1mKWI9bmV3IENlO2Vsc2V7aWYoInAyNTUxOSIhPT1mKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2YpO2I9bmV3IEllfXJl''@;'; put 'put ''dHVybiBXW2ZdPWIsYn0sa2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGYpe3MoMD09PWYubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscyhmLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxrZS5wcm90b3R5cGUuX3ZlcmlmeTI9''@;'; put 'put ''ZnVuY3Rpb24oZixiKXtzKDA9PT0oZi5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxzKGYucmVkJiZmLnJlZD09PWIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LGtlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGYp''@;'; put 'put ''e3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShmKS5fZm9yY2VSZWQodGhpcyk6Zi51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxrZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGYpe3JldHVybiBmLmlzWmVybygpP2YuY2xvbmUoKTp0aGlzLm0uc3ViKGYpLl9mb3Jj''@;'; put 'put ''ZVJlZCh0aGlzKX0sa2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihmLGIpe3RoaXMuX3ZlcmlmeTIoZixiKTt2YXIgaz1mLmFkZChiKTtyZXR1cm4gay5jbXAodGhpcy5tKT49MCYmay5pc3ViKHRoaXMubSksay5fZm9yY2VSZWQodGhpcyl9LGtlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGYs''@;'; put 'put ''Yil7dGhpcy5fdmVyaWZ5MihmLGIpO3ZhciBrPWYuaWFkZChiKTtyZXR1cm4gay5jbXAodGhpcy5tKT49MCYmay5pc3ViKHRoaXMubSksa30sa2UucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihmLGIpe3RoaXMuX3ZlcmlmeTIoZixiKTt2YXIgaz1mLnN1YihiKTtyZXR1cm4gay5jbXBuKDApPDAm''@;'; put 'put ''JmsuaWFkZCh0aGlzLm0pLGsuX2ZvcmNlUmVkKHRoaXMpfSxrZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihmLGIpe3RoaXMuX3ZlcmlmeTIoZixiKTt2YXIgaz1mLmlzdWIoYik7cmV0dXJuIGsuY21wbigwKTwwJiZrLmlhZGQodGhpcy5tKSxrfSxrZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9u''@;'; put 'put ''KGYsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZiksdGhpcy5pbW9kKGYudXNobG4oYikpfSxrZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihmLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKGYsYiksdGhpcy5pbW9kKGYuaW11bChiKSl9LGtlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZixiKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fdmVyaWZ5MihmLGIpLHRoaXMuaW1vZChmLm11bChiKSl9LGtlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmltdWwoZixmLmNsb25lKCkpfSxrZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLm11bChmLGYpfSxrZS5wcm90''@;'; put 'put ''b3R5cGUuc3FydD1mdW5jdGlvbihmKXtpZihmLmlzWmVybygpKXJldHVybiBmLmNsb25lKCk7dmFyIGI9dGhpcy5tLmFuZGxuKDMpO2lmKHMoYiUyPT0xKSwzPT09Yil7dmFyIGs9dGhpcy5tLmFkZChuZXcgdigxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhmLGspfWZvcih2YXIgTT10''@;'; put 'put ''aGlzLm0uc3VibigxKSxCPTA7IU0uaXNaZXJvKCkmJjA9PT1NLmFuZGxuKDEpOylCKyssTS5pdXNocm4oMSk7cyghTS5pc1plcm8oKSk7dmFyIEs9bmV3IHYoMSkudG9SZWQodGhpcyksRz1LLnJlZE5lZygpLEQ9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHA9dGhpcy5tLmJpdExlbmd0aCgp''@;'; put 'put ''O2ZvcihwPW5ldyB2KDIqcCpwKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cocCxEKS5jbXAoRyk7KXAucmVkSUFkZChHKTtmb3IodmFyIEk9dGhpcy5wb3cocCxNKSx1ZT10aGlzLnBvdyhmLE0uYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGYsTSksX2U9QjswIT09bmUuY21wKEsp''@;'; put 'put ''Oyl7Zm9yKHZhciBQZT1uZSxvdD0wOzAhPT1QZS5jbXAoSyk7b3QrKylQZT1QZS5yZWRTcXIoKTtzKG90PF9lKTt2YXIgbHQ9dGhpcy5wb3coSSxuZXcgdigxKS5pdXNobG4oX2Utb3QtMSkpO3VlPXVlLnJlZE11bChsdCksST1sdC5yZWRTcXIoKSxuZT1uZS5yZWRNdWwoSSksX2U9b3R9cmV0''@;'; put 'put ''dXJuIHVlfSxrZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihmKXt2YXIgYj1mLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Yi5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLHRoaXMuaW1vZChiKS5yZWROZWcoKSk6dGhpcy5pbW9kKGIpfSxrZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGYsYil7''@;'; put 'put ''aWYoYi5pc1plcm8oKSlyZXR1cm4gbmV3IHYoMSkudG9SZWQodGhpcyk7aWYoMD09PWIuY21wbigxKSlyZXR1cm4gZi5jbG9uZSgpO3ZhciBNPW5ldyBBcnJheSgxNik7TVswXT1uZXcgdigxKS50b1JlZCh0aGlzKSxNWzFdPWY7Zm9yKHZhciBCPTI7QjxNLmxlbmd0aDtCKyspTVtCXT10aGlz''@;'; put 'put ''Lm11bChNW0ItMV0sZik7dmFyIEs9TVswXSxHPTAsRD0wLHA9Yi5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXAmJihwPTI2KSxCPWIubGVuZ3RoLTE7Qj49MDtCLS0pe2Zvcih2YXIgST1iLndvcmRzW0JdLHVlPXAtMTt1ZT49MDt1ZS0tKXt2YXIgbmU9ST4+dWUmMTtLIT09TVswXSYmKEs9dGhp''@;'; put 'put ''cy5zcXIoSykpLDAhPT1uZXx8MCE9PUc/KEc8PD0xLEd8PW5lLCg0PT09KytEfHwwPT09QiYmMD09PXVlKSYmKEs9dGhpcy5tdWwoSyxNW0ddKSxEPTAsRz0wKSk6RD0wfXA9MjZ9cmV0dXJuIEt9LGtlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZil7dmFyIGI9Zi51bW9kKHRoaXMu''@;'; put 'put ''bSk7cmV0dXJuIGI9PT1mP2IuY2xvbmUoKTpifSxrZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZil7dmFyIGI9Zi5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHYubW9udD1mdW5jdGlvbihmKXtyZXR1cm4gbmV3IHFlKGYpfSxBKHFlLGtlKSxxZS5wcm90b3R5cGUuY29u''@;'; put 'put ''dmVydFRvPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmltb2QoZi51c2hsbih0aGlzLnNoaWZ0KSl9LHFlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihmKXt2YXIgYj10aGlzLmltb2QoZi5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0scWUucHJvdG90eXBlLmlt''@;'; put 'put ''dWw9ZnVuY3Rpb24oZixiKXtpZihmLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBmLndvcmRzWzBdPTAsZi5sZW5ndGg9MSxmO3ZhciBrPWYuaW11bChiKSxNPWsubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLEI9ay5p''@;'; put 'put ''c3ViKE0pLml1c2hybih0aGlzLnNoaWZ0KSxLPUI7cmV0dXJuIEIuY21wKHRoaXMubSk+PTA/Sz1CLmlzdWIodGhpcy5tKTpCLmNtcG4oMCk8MCYmKEs9Qi5pYWRkKHRoaXMubSkpLEsuX2ZvcmNlUmVkKHRoaXMpfSxxZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGYsYil7aWYoZi5pc1plcm8o''@;'; put 'put ''KXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHYoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBrPWYubXVsKGIpLE09ay5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksQj1rLmlzdWIoTSkuaXVzaHJuKHRoaXMuc2hpZnQpLEs9Qjty''@;'; put 'put ''ZXR1cm4gQi5jbXAodGhpcy5tKT49MD9LPUIuaXN1Yih0aGlzLm0pOkIuY21wbigwKTwwJiYoSz1CLmlhZGQodGhpcy5tKSksSy5fZm9yY2VSZWQodGhpcyl9LHFlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmltb2QoZi5faW52bXAodGhpcy5tKS5tdWwodGhpcy5y''@;'; put 'put ''MikpLl9mb3JjZVJlZCh0aGlzKX19KGZlPWgubm1kKGZlKSx0aGlzKX0sNzczNjIoZmUsaixoKXt2YXIgeT1oKDc4MTcwKSxjPWgoNDgyMDYpLHM9aCg1MjA2MSksQT1oKDgyNTA5KSx2PWgoNjczMzIpLEM9aCg0NzEwOCksdz1oKDk5MjQ3KSxTPWgoOTI4NjEpLkJ1ZmZlcjtmZS5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uKEgsVixOKXt2YXIgejt6PUgucGFkZGluZz9ILnBhZGRpbmc6Tj8xOjQ7dmFyIFcsWT15KEgpLEY9WS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZihWLmxlbmd0aD5GfHxuZXcgQShWKS5jbXAoWS5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3Ii''@;'; put 'put ''KTtXPU4/dyhuZXcgQShWKSxZKTp2KFYsWSk7dmFyIHE9Uy5hbGxvYyhGLVcubGVuZ3RoKTtpZihXPVMuY29uY2F0KFtxLFddLEYpLDQ9PT16KXJldHVybiBmdW5jdGlvbiBMKFUsSCl7dmFyIFY9VS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxOPUMoInNoYTEiKS51cGRhdGUoUy5hbGxvYygwKSku''@;'; put 'put ''ZGlnZXN0KCksej1OLmxlbmd0aDtpZigwIT09SFswXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTt2YXIgWT1ILnNsaWNlKDEseisxKSxGPUguc2xpY2UoeisxKSxXPXMoWSxjKEYseikpLHE9cyhGLGMoVyxWLXotMSkpO2lmKGZ1bmN0aW9uIHgoVSxIKXtVPVMuZnJvbShV''@;'; put 'put ''KSxIPVMuZnJvbShIKTt2YXIgVj0wLE49VS5sZW5ndGg7VS5sZW5ndGghPT1ILmxlbmd0aCYmKFYrKyxOPU1hdGgubWluKFUubGVuZ3RoLEgubGVuZ3RoKSk7Zm9yKHZhciB6PS0xOysrejxOOylWKz1VW3pdXkhbel07cmV0dXJuIFZ9KE4scS5zbGljZSgwLHopKSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''ImRlY3J5cHRpb24gZXJyb3IiKTtmb3IodmFyIHJlPXo7MD09PXFbcmVdOylyZSsrO2lmKDEhPT1xW3JlKytdKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3JldHVybiBxLnNsaWNlKHJlKX0oWSxXKTtpZigxPT09eilyZXR1cm4gZnVuY3Rpb24gUihVLEgsVil7Zm9yKHZh''@;'; put 'put ''ciBOPUguc2xpY2UoMCwyKSx6PTIsWT0wOzAhPT1IW3orK107KWlmKHo+PUgubGVuZ3RoKXtZKys7YnJlYWt9dmFyIEY9SC5zbGljZSgyLHotMSk7aWYoKCIwMDAyIiE9PU4udG9TdHJpbmcoImhleCIpJiYhVnx8IjAwMDEiIT09Ti50b1N0cmluZygiaGV4IikmJlYpJiZZKyssRi5sZW5ndGg8''@;'; put 'put ''OCYmWSsrLFkpdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmV0dXJuIEguc2xpY2Uoeil9KDAsVyxOKTtpZigzPT09eilyZXR1cm4gVzt0aHJvdyBuZXcgRXJyb3IoInVua25vd24gcGFkZGluZyIpfX0sMjg5MDIoZmUsaixoKXt2YXIgeT1oKDc4MTcwKSxjPWgoNTMyMDkp''@;'; put 'put ''LHM9aCg0NzEwOCksQT1oKDQ4MjA2KSx2PWgoNTIwNjEpLEM9aCg4MjUwOSksdz1oKDk5MjQ3KSxTPWgoNjczMzIpLEw9aCg5Mjg2MSkuQnVmZmVyO2ZlLmV4cG9ydHM9ZnVuY3Rpb24oVixOLHope3ZhciBZO1k9Vi5wYWRkaW5nP1YucGFkZGluZzp6PzE6NDt2YXIgVyxGPXkoVik7aWYoND09''@;'; put 'put ''PVkpVz1mdW5jdGlvbiBSKEgsVil7dmFyIE49SC5tb2R1bHVzLmJ5dGVMZW5ndGgoKSx6PVYubGVuZ3RoLFk9cygic2hhMSIpLnVwZGF0ZShMLmFsbG9jKDApKS5kaWdlc3QoKSxGPVkubGVuZ3RoLFc9MipGO2lmKHo+Ti1XLTIpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7''@;'; put 'put ''dmFyIHE9TC5hbGxvYyhOLXotVy0yKSxyZT1OLUYtMSxtZT1jKEYpLENlPXYoTC5jb25jYXQoW1kscSxMLmFsbG9jKDEsMSksVl0scmUpLEEobWUscmUpKSxJZT12KG1lLEEoQ2UsRikpO3JldHVybiBuZXcgQyhMLmNvbmNhdChbTC5hbGxvYygxKSxJZSxDZV0sTikpfShGLE4pO2Vsc2UgaWYo''@;'; put 'put ''MT09PVkpVz1mdW5jdGlvbiB4KEgsVixOKXt2YXIgRix6PVYubGVuZ3RoLFk9SC5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZih6PlktMTEpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7cmV0dXJuIEY9Tj9MLmFsbG9jKFktei0zLDI1NSk6ZnVuY3Rpb24gVShIKXtmb3IodmFy''@;'; put 'put ''IEYsVj1MLmFsbG9jVW5zYWZlKEgpLE49MCx6PWMoMipIKSxZPTA7TjxIOylZPT09ei5sZW5ndGgmJih6PWMoMipIKSxZPTApLChGPXpbWSsrXSkmJihWW04rK109Rik7cmV0dXJuIFZ9KFktei0zKSxuZXcgQyhMLmNvbmNhdChbTC5mcm9tKFswLE4/MToyXSksRixMLmFsbG9jKDEpLFZdLFkp''@;'; put 'put ''KX0oRixOLHopO2Vsc2V7aWYoMyE9PVkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHBhZGRpbmciKTtpZigoVz1uZXcgQyhOKSkuY21wKEYubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKCJkYXRhIHRvbyBsb25nIGZvciBtb2R1bHVzIil9cmV0dXJuIHo/UyhXLEYpOncoVyxGKX19LDk5''@;'; put 'put ''MjQ3KGZlLGosaCl7dmFyIHk9aCg4MjUwOSksYz1oKDkyODYxKS5CdWZmZXI7ZmUuZXhwb3J0cz1mdW5jdGlvbiBzKEEsdil7cmV0dXJuIGMuZnJvbShBLnRvUmVkKHkubW9udCh2Lm1vZHVsdXMpKS5yZWRQb3cobmV3IHkodi5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKS50b0FycmF5KCkp''@;'; put 'put ''fX0sNTIwNjEoZmUpe2ZlLmV4cG9ydHM9ZnVuY3Rpb24oaCx5KXtmb3IodmFyIGM9aC5sZW5ndGgscz0tMTsrK3M8YzspaFtzXV49eVtzXTtyZXR1cm4gaH19LDczOTkyKGZlLGopeyJ1c2Ugc3RyaWN0Ijt2YXIgaD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGMo''@;'; put 'put ''Qyl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoQy5yZXBsYWNlKC9cKy9nLCIgIikpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBzKEMpe3RyeXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEMpfWNhdGNoe3JldHVybiBudWxsfX1qLnN0cmluZ2lmeT1mdW5jdGlvbiB2KEMs''@;'; put 'put ''dyl7dz13fHwiIjt2YXIgTCxSLFM9W107Zm9yKFIgaW4ic3RyaW5nIiE9dHlwZW9mIHcmJih3PSI/IiksQylpZihoLmNhbGwoQyxSKSl7aWYoIShMPUNbUl0pJiYobnVsbD09THx8aXNOYU4oTCkpJiYoTD0iIiksUj1zKFIpLEw9cyhMKSxudWxsPT09Unx8bnVsbD09PUwpY29udGludWU7Uy5w''@;'; put 'put ''dXNoKFIrIj0iK0wpfXJldHVybiBTLmxlbmd0aD93K1Muam9pbigiJiIpOiIifSxqLnBhcnNlPWZ1bmN0aW9uIEEoQyl7Zm9yKHZhciBMLHc9LyhbXj0/IyZdKyk9PyhbXiZdKikvZyxTPXt9O0w9dy5leGVjKEMpOyl7dmFyIFI9YyhMWzFdKSx4PWMoTFsyXSk7bnVsbD09PVJ8fG51bGw9PT14''@;'; put 'put ''fHxSIGluIFN8fChTW1JdPXgpfXJldHVybiBTfX0sNTMyMDkoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg2NTYwNiksYz02NTUzNix2PWgoOTI4NjEpLkJ1ZmZlcixDPWguZy5jcnlwdG98fGguZy5tc0NyeXB0bztmZS5leHBvcnRzPUMmJkMuZ2V0UmFuZG9tVmFsdWVzP2Z1bmN0aW9u''@;'; put 'put ''IHcoUyxMKXtpZihTPjQyOTQ5NjcyOTUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMiKTt2YXIgUj12LmFsbG9jVW5zYWZlKFMpO2lmKFM+MClpZihTPmMpZm9yKHZhciB4PTA7eDxTO3grPWMpQy5nZXRSYW5kb21WYWx1ZXMoUi5zbGljZSh4''@;'; put 'put ''LHgrYykpO2Vsc2UgQy5nZXRSYW5kb21WYWx1ZXMoUik7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEw/eS5uZXh0VGljayhmdW5jdGlvbigpe0wobnVsbCxSKX0pOlJ9OmZ1bmN0aW9uIEEoKXt0aHJvdyBuZXcgRXJyb3IoIlNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90''@;'; put 'put ''IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXG5Vc2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9fSw3Njk4MyhmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDY1NjA2KTtmdW5jdGlvbiBjKCl7dGhyb3cgbmV3IEVycm9yKCJzZWN1cmUgcmFuZG9tIG51''@;'; put 'put ''bWJlciBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyXG51c2UgY2hyb21lLCBGaXJlRm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9dmFyIHM9aCg5Mjg2MSksQT1oKDUzMjA5KSx2PXMuQnVmZmVyLEM9cy5rTWF4TGVuZ3RoLHc9aC5nLmNyeXB0b3x8aC5nLm1z''@;'; put 'put ''Q3J5cHRvLFM9TWF0aC5wb3coMiwzMiktMTtmdW5jdGlvbiBMKFYsTil7aWYoIm51bWJlciIhPXR5cGVvZiBWfHxWIT1WKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgbnVtYmVyIik7aWYoVj5TfHxWPDApdGhyb3cgbmV3IFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUg''@;'; put 'put ''YSB1aW50MzIiKTtpZihWPkN8fFY+Til0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIFIoVixOLHope2lmKCJudW1iZXIiIT10eXBlb2YgVnx8ViE9Vil0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSBudW1iZXIiKTtpZihWPlN8''@;'; put 'put ''fFY8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSB1aW50MzIiKTtpZihWK04+enx8Vj5DKXRocm93IG5ldyBSYW5nZUVycm9yKCJidWZmZXIgdG9vIHNtYWxsIil9ZnVuY3Rpb24gVShWLE4seixZKXtpZih5LmJyb3dzZXIpe3ZhciBXPW5ldyBVaW50OEFycmF5KFYuYnVm''@;'; put 'put ''ZmVyLE4seik7cmV0dXJuIHcuZ2V0UmFuZG9tVmFsdWVzKFcpLFk/dm9pZCB5Lm5leHRUaWNrKGZ1bmN0aW9uKCl7WShudWxsLFYpfSk6Vn1pZighWSlyZXR1cm4gQSh6KS5jb3B5KFYsTiksVjtBKHosZnVuY3Rpb24ocmUsbWUpe2lmKHJlKXJldHVybiBZKHJlKTttZS5jb3B5KFYsTiksWShu''@;'; put 'put ''dWxsLFYpfSl9dyYmdy5nZXRSYW5kb21WYWx1ZXN8fCF5LmJyb3dzZXI/KGoucmFuZG9tRmlsbD1mdW5jdGlvbiB4KFYsTix6LFkpe2lmKCEodi5pc0J1ZmZlcihWKXx8ViBpbnN0YW5jZW9mIGguZy5VaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmIiBhcmd1bWVudCBtdXN0''@;'; put 'put ''IGJlIGEgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgTilZPU4sTj0wLHo9Vi5sZW5ndGg7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgeilZPXosej1WLmxlbmd0aC1OO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIFkpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cignImNiIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtyZXR1cm4gTChOLFYubGVuZ3RoKSxSKHosTixWLmxlbmd0aCksVShWLE4seixZKX0sai5yYW5kb21GaWxsU3luYz1mdW5jdGlvbiBIKFYsTix6KXtpZih0eXBlb2YgTj4idSImJihOPTApLCEodi5pc0J1ZmZlcihWKXx8ViBp''@;'; put 'put ''bnN0YW5jZW9mIGguZy5VaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtyZXR1cm4gTChOLFYubGVuZ3RoKSx2b2lkIDA9PT16JiYoej1WLmxlbmd0aC1OKSxSKHosTixWLmxlbmd0aCksVShWLE4s''@;'; put 'put ''eil9KTooai5yYW5kb21GaWxsPWMsai5yYW5kb21GaWxsU3luYz1jKX0sODYwNDgoZmUpeyJ1c2Ugc3RyaWN0Ijt2YXIgaD17fTtmdW5jdGlvbiB5KEMsdyxTKXtTfHwoUz1FcnJvcik7dmFyIFI9ZnVuY3Rpb24oeCl7ZnVuY3Rpb24gVShILFYsTil7cmV0dXJuIHguY2FsbCh0aGlzLGZ1bmN0''@;'; put 'put ''aW9uIEwoeCxVLEgpe3JldHVybiJzdHJpbmciPT10eXBlb2Ygdz93OncoeCxVLEgpfShILFYsTikpfHx0aGlzfXJldHVybiBmdW5jdGlvbiBqKEMsdyl7Qy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3LnByb3RvdHlwZSksQy5wcm90b3R5cGUuY29uc3RydWN0b3I9QyxDLl9fcHJvdG9fXz13''@;'; put 'put ''fShVLHgpLFV9KFMpO1IucHJvdG90eXBlLm5hbWU9Uy5uYW1lLFIucHJvdG90eXBlLmNvZGU9QyxoW0NdPVJ9ZnVuY3Rpb24gYyhDLHcpe2lmKEFycmF5LmlzQXJyYXkoQykpe3ZhciBTPUMubGVuZ3RoO3JldHVybiBDPUMubWFwKGZ1bmN0aW9uKEwpe3JldHVybiBTdHJpbmcoTCl9KSxTPjI/''@;'; put 'put ''Im9uZSBvZiAiLmNvbmNhdCh3LCIgIikuY29uY2F0KEMuc2xpY2UoMCxTLTEpLmpvaW4oIiwgIiksIiwgb3IgIikrQ1tTLTFdOjI9PT1TPyJvbmUgb2YgIi5jb25jYXQodywiICIpLmNvbmNhdChDWzBdLCIgb3IgIikuY29uY2F0KENbMV0pOiJvZiAiLmNvbmNhdCh3LCIgIikuY29uY2F0KENb''@;'; put 'put ''MF0pfXJldHVybiJvZiAiLmNvbmNhdCh3LCIgIikuY29uY2F0KFN0cmluZyhDKSl9eSgiRVJSX0lOVkFMSURfT1BUX1ZBTFVFIixmdW5jdGlvbihDLHcpe3JldHVybidUaGUgdmFsdWUgIicrdysnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gIicrQysnIid9LFR5cGVFcnJvcikseSgiRVJSX0lO''@;'; put 'put ''VkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKEMsdyxTKXt2YXIgTCxSO2lmKCJzdHJpbmciPT10eXBlb2YgdyYmZnVuY3Rpb24gcyhDLHcsUyl7cmV0dXJuIEMuc3Vic3RyKCFTfHxTPDA/MDorUyx3Lmxlbmd0aCk9PT13fSh3LCJub3QgIik/KEw9Im11c3Qgbm90IGJlIix3PXcucmVwbGFjZSgv''@;'; put 'put ''Xm5vdCAvLCIiKSk6TD0ibXVzdCBiZSIsZnVuY3Rpb24gQShDLHcsUyl7cmV0dXJuKHZvaWQgMD09PVN8fFM+Qy5sZW5ndGgpJiYoUz1DLmxlbmd0aCksQy5zdWJzdHJpbmcoUy13Lmxlbmd0aCxTKT09PXd9KEMsIiBhcmd1bWVudCIpKVI9IlRoZSAiLmNvbmNhdChDLCIgIikuY29uY2F0KEws''@;'; put 'put ''IiAiKS5jb25jYXQoYyh3LCJ0eXBlIikpO2Vsc2V7dmFyIHg9ZnVuY3Rpb24gdihDLHcsUyl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBTJiYoUz0wKSwhKFMrdy5sZW5ndGg+Qy5sZW5ndGgpJiYtMSE9PUMuaW5kZXhPZih3LFMpfShDLCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiO1I9J1Ro''@;'; put 'put ''ZSAiJy5jb25jYXQoQywnIiAnKS5jb25jYXQoeCwiICIpLmNvbmNhdChMLCIgIikuY29uY2F0KGModywidHlwZSIpKX1yZXR1cm4gUisiLiBSZWNlaXZlZCB0eXBlICIuY29uY2F0KHR5cGVvZiBTKX0sVHlwZUVycm9yKSx5KCJFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GIiwic3RyZWFtLnB1''@;'; put 'put ''c2goKSBhZnRlciBFT0YiKSx5KCJFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCIsZnVuY3Rpb24oQyl7cmV0dXJuIlRoZSAiK0MrIiBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIn0pLHkoIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiwiUHJlbWF0dXJlIGNsb3NlIikseSgiRVJSX1NU''@;'; put 'put ''UkVBTV9ERVNUUk9ZRUQiLGZ1bmN0aW9uKEMpe3JldHVybiJDYW5ub3QgY2FsbCAiK0MrIiBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVkIn0pLHkoIkVSUl9NVUxUSVBMRV9DQUxMQkFDSyIsIkNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIpLHkoIkVSUl9TVFJFQU1fQ0FOTk9U''@;'; put 'put ''X1BJUEUiLCJDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlIikseSgiRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQiLCJ3cml0ZSBhZnRlciBlbmQiKSx5KCJFUlJfU1RSRUFNX05VTExfVkFMVUVTIiwiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iLFR5cGVFcnJvcikseSgi''@;'; put 'put ''RVJSX1VOS05PV05fRU5DT0RJTkciLGZ1bmN0aW9uKEMpe3JldHVybiJVbmtub3duIGVuY29kaW5nOiAiK0N9LFR5cGVFcnJvcikseSgiRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCIsInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IiksZmUuZXhwb3J0cy5GPWh9''@;'; put 'put ''LDI1MzgyKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNjU2MDYpLGM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHgpe3ZhciBVPVtdO2Zvcih2YXIgSCBpbiB4KVUucHVzaChIKTtyZXR1cm4gVX07ZmUuZXhwb3J0cz1TO3ZhciBzPWgoNDU0MTIpLEE9aCgxNjcwOCk7aCg1NjY5OCkoUyxz''@;'; put 'put ''KTtmb3IodmFyIHY9YyhBLnByb3RvdHlwZSksQz0wO0M8di5sZW5ndGg7QysrKXt2YXIgdz12W0NdO1MucHJvdG90eXBlW3ddfHwoUy5wcm90b3R5cGVbd109QS5wcm90b3R5cGVbd10pfWZ1bmN0aW9uIFMoeCl7aWYoISh0aGlzIGluc3RhbmNlb2YgUykpcmV0dXJuIG5ldyBTKHgpO3MuY2Fs''@;'; put 'put ''bCh0aGlzLHgpLEEuY2FsbCh0aGlzLHgpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCx4JiYoITE9PT14LnJlYWRhYmxlJiYodGhpcy5yZWFkYWJsZT0hMSksITE9PT14LndyaXRhYmxlJiYodGhpcy53cml0YWJsZT0hMSksITE9PT14LmFsbG93SGFsZk9wZW4mJih0aGlzLmFsbG93SGFsZk9wZW49''@;'; put 'put ''ITEsdGhpcy5vbmNlKCJlbmQiLEwpKSl9ZnVuY3Rpb24gTCgpe3RoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fHkubmV4dFRpY2soUix0aGlzKX1mdW5jdGlvbiBSKHgpe3guZW5kKCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KFMucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtl''@;'; put 'put ''bnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFMucHJvdG90eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFMucHJvdG90eXBlLCJ3cml0YWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3Ro''@;'; put 'put ''fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0''@;'; put 'put ''ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oVSl7dm9pZCAwPT09dGhpcy5fcmVhZGFibGVTdGF0ZXx8dm9pZCAwPT09dGhpcy5fd3JpdGFibGVTdGF0ZXx8KHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPVUsdGhpcy5fd3JpdGFi''@;'; put 'put ''bGVTdGF0ZS5kZXN0cm95ZWQ9VSl9fSl9LDYzNjAwKGZlLGosaCl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9Yzt2YXIgeT1oKDc0NjEwKTtmdW5jdGlvbiBjKHMpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGMpKXJldHVybiBuZXcgYyhzKTt5LmNhbGwodGhpcyxzKX1oKDU2Njk4KShjLHkpLGMu''@;'; put 'put ''cHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24ocyxBLHYpe3YobnVsbCxzKX19LDQ1NDEyKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciBjLHk9aCg2NTYwNik7ZmUuZXhwb3J0cz1mLGYuUmVhZGFibGVTdGF0ZT1YLGgoMzcwMDcpO3ZhciB4LEE9ZnVuY3Rpb24oRmUsZ2Upe3JldHVybiBG''@;'; put 'put ''ZS5saXN0ZW5lcnMoZ2UpLmxlbmd0aH0sdj1oKDQwMzQ1KSxDPWgoNDgyODcpLkJ1ZmZlcix3PSh0eXBlb2YgaC5nPCJ1Ij9oLmc6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sUj1oKDc5ODM4KTt4PVIm''@;'; put 'put ''JlIuZGVidWdsb2c/Ui5kZWJ1Z2xvZygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciByZSxtZSxDZSxVPWgoODAzNDUpLEg9aCg3NTg5NiksTj1oKDY1MjkxKS5nZXRIaWdoV2F0ZXJNYXJrLHo9aCg4NjA0OCkuRixZPXouRVJSX0lOVkFMSURfQVJHX1RZUEUsRj16LkVSUl9TVFJFQU1fUFVT''@;'; put 'put ''SF9BRlRFUl9FT0YsVz16LkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELHE9ei5FUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UO2goNTY2OTgpKGYsdik7dmFyIEllPUguZXJyb3JPckRlc3Ryb3ksa2U9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1l''@;'; put 'put ''Il07ZnVuY3Rpb24gWChEZSxGZSxnZSl7Yz1jfHxoKDI1MzgyKSwiYm9vbGVhbiIhPXR5cGVvZiBnZSYmKGdlPUZlIGluc3RhbmNlb2YgYyksdGhpcy5vYmplY3RNb2RlPSEhKERlPURlfHx7fSkub2JqZWN0TW9kZSxnZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhRGUu''@;'; put 'put ''cmVhZGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9Tih0aGlzLERlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLGdlKSx0aGlzLmJ1ZmZlcj1uZXcgVSx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlz''@;'; put 'put ''LmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5wYXVzZWQ9''@;'; put 'put ''ITAsdGhpcy5lbWl0Q2xvc2U9ITEhPT1EZS5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIURlLmF1dG9EZXN0cm95LHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPURlLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGlu''@;'; put 'put ''Z01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLERlLmVuY29kaW5nJiYocmV8fChyZT1oKDgzMTQxKS5JKSx0aGlzLmRlY29kZXI9bmV3IHJlKERlLmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPURlLmVuY29kaW5nKX1mdW5jdGlvbiBmKERlKXtpZihjPWN8fGgo''@;'; put 'put ''MjUzODIpLCEodGhpcyBpbnN0YW5jZW9mIGYpKXJldHVybiBuZXcgZihEZSk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgWChEZSx0aGlzLHRoaXMgaW5zdGFuY2VvZiBjKSx0aGlzLnJlYWRhYmxlPSEwLERlJiYoImZ1bmN0aW9uIj09dHlwZW9mIERlLnJlYWQmJih0aGlzLl9yZWFkPURlLnJl''@;'; put 'put ''YWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBEZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1EZS5kZXN0cm95KSksdi5jYWxsKHRoaXMpfWZ1bmN0aW9uIGIoRGUsRmUsZ2UsY2UsaGUpe3goInJlYWRhYmxlQWRkQ2h1bmsiLEZlKTt2YXIgSmUsd2U9RGUuX3JlYWRhYmxlU3RhdGU7aWYobnVsbD09''@;'; put 'put ''PUZlKXdlLnJlYWRpbmc9ITEsZnVuY3Rpb24gRChEZSxGZSl7aWYoeCgib25Fb2ZDaHVuayIpLCFGZS5lbmRlZCl7aWYoRmUuZGVjb2Rlcil7dmFyIGdlPUZlLmRlY29kZXIuZW5kKCk7Z2UmJmdlLmxlbmd0aCYmKEZlLmJ1ZmZlci5wdXNoKGdlKSxGZS5sZW5ndGgrPUZlLm9iamVjdE1vZGU/''@;'; put 'put ''MTpnZS5sZW5ndGgpfUZlLmVuZGVkPSEwLEZlLnN5bmM/cChEZSk6KEZlLm5lZWRSZWFkYWJsZT0hMSxGZS5lbWl0dGVkUmVhZGFibGV8fChGZS5lbWl0dGVkUmVhZGFibGU9ITAsSShEZSkpKX19KERlLHdlKTtlbHNlIGlmKGhlfHwoSmU9ZnVuY3Rpb24gTShEZSxGZSl7dmFyIGdlO3JldHVy''@;'; put 'put ''biFmdW5jdGlvbiBMKERlKXtyZXR1cm4gQy5pc0J1ZmZlcihEZSl8fERlIGluc3RhbmNlb2Ygd30oRmUpJiYic3RyaW5nIiE9dHlwZW9mIEZlJiZ2b2lkIDAhPT1GZSYmIURlLm9iamVjdE1vZGUmJihnZT1uZXcgWSgiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIiwiVWludDhBcnJheSJdLEZl''@;'; put 'put ''KSksZ2V9KHdlLEZlKSksSmUpSWUoRGUsSmUpO2Vsc2UgaWYod2Uub2JqZWN0TW9kZXx8RmUmJkZlLmxlbmd0aD4wKWlmKCJzdHJpbmciIT10eXBlb2YgRmUmJiF3ZS5vYmplY3RNb2RlJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoRmUpIT09Qy5wcm90b3R5cGUmJihGZT1mdW5jdGlvbiBTKERl''@;'; put 'put ''KXtyZXR1cm4gQy5mcm9tKERlKX0oRmUpKSxjZSl3ZS5lbmRFbWl0dGVkP0llKERlLG5ldyBxKTprKERlLHdlLEZlLCEwKTtlbHNlIGlmKHdlLmVuZGVkKUllKERlLG5ldyBGKTtlbHNle2lmKHdlLmRlc3Ryb3llZClyZXR1cm4hMTt3ZS5yZWFkaW5nPSExLHdlLmRlY29kZXImJiFnZT8oRmU9''@;'; put 'put ''d2UuZGVjb2Rlci53cml0ZShGZSksd2Uub2JqZWN0TW9kZXx8MCE9PUZlLmxlbmd0aD9rKERlLHdlLEZlLCExKTp1ZShEZSx3ZSkpOmsoRGUsd2UsRmUsITEpfWVsc2UgY2V8fCh3ZS5yZWFkaW5nPSExLHVlKERlLHdlKSk7cmV0dXJuIXdlLmVuZGVkJiYod2UubGVuZ3RoPHdlLmhpZ2hXYXRl''@;'; put 'put ''ck1hcmt8fDA9PT13ZS5sZW5ndGgpfWZ1bmN0aW9uIGsoRGUsRmUsZ2UsY2Upe0ZlLmZsb3dpbmcmJjA9PT1GZS5sZW5ndGgmJiFGZS5zeW5jPyhGZS5hd2FpdERyYWluPTAsRGUuZW1pdCgiZGF0YSIsZ2UpKTooRmUubGVuZ3RoKz1GZS5vYmplY3RNb2RlPzE6Z2UubGVuZ3RoLGNlP0ZlLmJ1''@;'; put 'put ''ZmZlci51bnNoaWZ0KGdlKTpGZS5idWZmZXIucHVzaChnZSksRmUubmVlZFJlYWRhYmxlJiZwKERlKSksdWUoRGUsRmUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhp''@;'; put 'put ''cy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihGZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPUZlKX19KSxmLnByb3RvdHlwZS5kZXN0cm95PUguZGVzdHJveSxmLnByb3RvdHlw''@;'; put 'put ''ZS5fdW5kZXN0cm95PUgudW5kZXN0cm95LGYucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKERlLEZlKXtGZShEZSl9LGYucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oRGUsRmUpe3ZhciBjZSxnZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBnZS5vYmplY3RNb2RlP2NlPSEwOiJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgRGUmJigoRmU9RmV8fGdlLmRlZmF1bHRFbmNvZGluZykhPT1nZS5lbmNvZGluZyYmKERlPUMuZnJvbShEZSxGZSksRmU9IiIpLGNlPSEwKSxiKHRoaXMsRGUsRmUsITEsY2UpfSxmLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKERlKXtyZXR1cm4gYih0aGlzLERlLG51''@;'; put 'put ''bGwsITAsITEpfSxmLnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxmLnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbihEZSl7cmV8fChyZT1oKDgzMTQxKS5JKTt2YXIgRmU9bmV3IHJlKERlKTt0aGlzLl9y''@;'; put 'put ''ZWFkYWJsZVN0YXRlLmRlY29kZXI9RmUsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz10aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIuZW5jb2Rpbmc7Zm9yKHZhciBnZT10aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5oZWFkLGNlPSIiO251bGwhPT1nZTspY2UrPUZlLndyaXRlKGdl''@;'; put 'put ''LmRhdGEpLGdlPWdlLm5leHQ7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmNsZWFyKCksIiIhPT1jZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIucHVzaChjZSksdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGg9Y2UubGVuZ3RoLHRoaXN9O3ZhciBCPTEwNzM3NDE4MjQ7''@;'; put 'put ''ZnVuY3Rpb24gRyhEZSxGZSl7cmV0dXJuIERlPD0wfHwwPT09RmUubGVuZ3RoJiZGZS5lbmRlZD8wOkZlLm9iamVjdE1vZGU/MTpEZSE9RGU/RmUuZmxvd2luZyYmRmUubGVuZ3RoP0ZlLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOkZlLmxlbmd0aDooRGU+RmUuaGlnaFdhdGVyTWFyayYmKEZl''@;'; put 'put ''LmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24gSyhEZSl7cmV0dXJuIERlPj1CP0RlPUI6KERlLS0sRGV8PURlPj4+MSxEZXw9RGU+Pj4yLERlfD1EZT4+PjQsRGV8PURlPj4+OCxEZXw9RGU+Pj4xNixEZSsrKSxEZX0oRGUpKSxEZTw9RmUubGVuZ3RoP0RlOkZlLmVuZGVkP0ZlLmxlbmd0aDooRmUu''@;'; put 'put ''bmVlZFJlYWRhYmxlPSEwLDApKX1mdW5jdGlvbiBwKERlKXt2YXIgRmU9RGUuX3JlYWRhYmxlU3RhdGU7eCgiZW1pdFJlYWRhYmxlIixGZS5uZWVkUmVhZGFibGUsRmUuZW1pdHRlZFJlYWRhYmxlKSxGZS5uZWVkUmVhZGFibGU9ITEsRmUuZW1pdHRlZFJlYWRhYmxlfHwoeCgiZW1pdFJlYWRh''@;'; put 'put ''YmxlIixGZS5mbG93aW5nKSxGZS5lbWl0dGVkUmVhZGFibGU9ITAseS5uZXh0VGljayhJLERlKSl9ZnVuY3Rpb24gSShEZSl7dmFyIEZlPURlLl9yZWFkYWJsZVN0YXRlO3goImVtaXRSZWFkYWJsZV8iLEZlLmRlc3Ryb3llZCxGZS5sZW5ndGgsRmUuZW5kZWQpLCFGZS5kZXN0cm95ZWQmJihG''@;'; put 'put ''ZS5sZW5ndGh8fEZlLmVuZGVkKSYmKERlLmVtaXQoInJlYWRhYmxlIiksRmUuZW1pdHRlZFJlYWRhYmxlPSExKSxGZS5uZWVkUmVhZGFibGU9IUZlLmZsb3dpbmcmJiFGZS5lbmRlZCYmRmUubGVuZ3RoPD1GZS5oaWdoV2F0ZXJNYXJrLFJlKERlKX1mdW5jdGlvbiB1ZShEZSxGZSl7RmUucmVh''@;'; put 'put ''ZGluZ01vcmV8fChGZS5yZWFkaW5nTW9yZT0hMCx5Lm5leHRUaWNrKG5lLERlLEZlKSl9ZnVuY3Rpb24gbmUoRGUsRmUpe2Zvcig7IUZlLnJlYWRpbmcmJiFGZS5lbmRlZCYmKEZlLmxlbmd0aDxGZS5oaWdoV2F0ZXJNYXJrfHxGZS5mbG93aW5nJiYwPT09RmUubGVuZ3RoKTspe3ZhciBnZT1G''@;'; put 'put ''ZS5sZW5ndGg7aWYoeCgibWF5YmVSZWFkTW9yZSByZWFkIDAiKSxEZS5yZWFkKDApLGdlPT09RmUubGVuZ3RoKWJyZWFrfUZlLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIFBlKERlKXt2YXIgRmU9RGUuX3JlYWRhYmxlU3RhdGU7RmUucmVhZGFibGVMaXN0ZW5pbmc9RGUubGlzdGVuZXJDb3Vu''@;'; put 'put ''dCgicmVhZGFibGUiKT4wLEZlLnJlc3VtZVNjaGVkdWxlZCYmIUZlLnBhdXNlZD9GZS5mbG93aW5nPSEwOkRlLmxpc3RlbmVyQ291bnQoImRhdGEiKT4wJiZEZS5yZXN1bWUoKX1mdW5jdGlvbiBvdChEZSl7eCgicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIiksRGUucmVhZCgwKX1mdW5jdGlv''@;'; put 'put ''biBkdChEZSxGZSl7eCgicmVzdW1lIixGZS5yZWFkaW5nKSxGZS5yZWFkaW5nfHxEZS5yZWFkKDApLEZlLnJlc3VtZVNjaGVkdWxlZD0hMSxEZS5lbWl0KCJyZXN1bWUiKSxSZShEZSksRmUuZmxvd2luZyYmIUZlLnJlYWRpbmcmJkRlLnJlYWQoMCl9ZnVuY3Rpb24gUmUoRGUpe3ZhciBGZT1E''@;'; put 'put ''ZS5fcmVhZGFibGVTdGF0ZTtmb3IoeCgiZmxvdyIsRmUuZmxvd2luZyk7RmUuZmxvd2luZyYmbnVsbCE9PURlLnJlYWQoKTspO31mdW5jdGlvbiBhZShEZSxGZSl7cmV0dXJuIDA9PT1GZS5sZW5ndGg/bnVsbDooRmUub2JqZWN0TW9kZT9nZT1GZS5idWZmZXIuc2hpZnQoKTohRGV8fERlPj1G''@;'; put 'put ''ZS5sZW5ndGg/KGdlPUZlLmRlY29kZXI/RmUuYnVmZmVyLmpvaW4oIiIpOjE9PT1GZS5idWZmZXIubGVuZ3RoP0ZlLmJ1ZmZlci5maXJzdCgpOkZlLmJ1ZmZlci5jb25jYXQoRmUubGVuZ3RoKSxGZS5idWZmZXIuY2xlYXIoKSk6Z2U9RmUuYnVmZmVyLmNvbnN1bWUoRGUsRmUuZGVjb2Rlciks''@;'; put 'put ''Z2UpO3ZhciBnZX1mdW5jdGlvbiB4ZShEZSl7dmFyIEZlPURlLl9yZWFkYWJsZVN0YXRlO3goImVuZFJlYWRhYmxlIixGZS5lbmRFbWl0dGVkKSxGZS5lbmRFbWl0dGVkfHwoRmUuZW5kZWQ9ITAseS5uZXh0VGljayhqZSxGZSxEZSkpfWZ1bmN0aW9uIGplKERlLEZlKXtpZih4KCJlbmRSZWFk''@;'; put 'put ''YWJsZU5UIixEZS5lbmRFbWl0dGVkLERlLmxlbmd0aCksIURlLmVuZEVtaXR0ZWQmJjA9PT1EZS5sZW5ndGgmJihEZS5lbmRFbWl0dGVkPSEwLEZlLnJlYWRhYmxlPSExLEZlLmVtaXQoImVuZCIpLERlLmF1dG9EZXN0cm95KSl7dmFyIGdlPUZlLl93cml0YWJsZVN0YXRlOyghZ2V8fGdlLmF1''@;'; put 'put ''dG9EZXN0cm95JiZnZS5maW5pc2hlZCkmJkZlLmRlc3Ryb3koKX19ZnVuY3Rpb24gQWUoRGUsRmUpe2Zvcih2YXIgZ2U9MCxjZT1EZS5sZW5ndGg7Z2U8Y2U7Z2UrKylpZihEZVtnZV09PT1GZSlyZXR1cm4gZ2U7cmV0dXJuLTF9Zi5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihEZSl7eCgicmVh''@;'; put 'put ''ZCIsRGUpLERlPXBhcnNlSW50KERlLDEwKTt2YXIgRmU9dGhpcy5fcmVhZGFibGVTdGF0ZSxnZT1EZTtpZigwIT09RGUmJihGZS5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT1EZSYmRmUubmVlZFJlYWRhYmxlJiYoKDAhPT1GZS5oaWdoV2F0ZXJNYXJrP0ZlLmxlbmd0aD49RmUuaGlnaFdhdGVy''@;'; put 'put ''TWFyazpGZS5sZW5ndGg+MCl8fEZlLmVuZGVkKSlyZXR1cm4geCgicmVhZDogZW1pdFJlYWRhYmxlIixGZS5sZW5ndGgsRmUuZW5kZWQpLDA9PT1GZS5sZW5ndGgmJkZlLmVuZGVkP3hlKHRoaXMpOnAodGhpcyksbnVsbDtpZigwPT09KERlPUcoRGUsRmUpKSYmRmUuZW5kZWQpcmV0dXJuIDA9''@;'; put 'put ''PT1GZS5sZW5ndGgmJnhlKHRoaXMpLG51bGw7dmFyIGhlLGNlPUZlLm5lZWRSZWFkYWJsZTtyZXR1cm4geCgibmVlZCByZWFkYWJsZSIsY2UpLCgwPT09RmUubGVuZ3RofHxGZS5sZW5ndGgtRGU8RmUuaGlnaFdhdGVyTWFyaykmJngoImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrIixjZT0h''@;'; put 'put ''MCksRmUuZW5kZWR8fEZlLnJlYWRpbmc/eCgicmVhZGluZyBvciBlbmRlZCIsY2U9ITEpOmNlJiYoeCgiZG8gcmVhZCIpLEZlLnJlYWRpbmc9ITAsRmUuc3luYz0hMCwwPT09RmUubGVuZ3RoJiYoRmUubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKEZlLmhpZ2hXYXRlck1hcmspLEZlLnN5''@;'; put 'put ''bmM9ITEsRmUucmVhZGluZ3x8KERlPUcoZ2UsRmUpKSksbnVsbD09PShoZT1EZT4wP2FlKERlLEZlKTpudWxsKT8oRmUubmVlZFJlYWRhYmxlPUZlLmxlbmd0aDw9RmUuaGlnaFdhdGVyTWFyayxEZT0wKTooRmUubGVuZ3RoLT1EZSxGZS5hd2FpdERyYWluPTApLDA9PT1GZS5sZW5ndGgmJihG''@;'; put 'put ''ZS5lbmRlZHx8KEZlLm5lZWRSZWFkYWJsZT0hMCksZ2UhPT1EZSYmRmUuZW5kZWQmJnhlKHRoaXMpKSxudWxsIT09aGUmJnRoaXMuZW1pdCgiZGF0YSIsaGUpLGhlfSxmLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihEZSl7SWUodGhpcyxuZXcgVygiX3JlYWQoKSIpKX0sZi5wcm90b3R5cGUu''@;'; put 'put ''cGlwZT1mdW5jdGlvbihEZSxGZSl7dmFyIGdlPXRoaXMsY2U9dGhpcy5fcmVhZGFibGVTdGF0ZTtzd2l0Y2goY2UucGlwZXNDb3VudCl7Y2FzZSAwOmNlLnBpcGVzPURlO2JyZWFrO2Nhc2UgMTpjZS5waXBlcz1bY2UucGlwZXMsRGVdO2JyZWFrO2RlZmF1bHQ6Y2UucGlwZXMucHVzaChEZSl9''@;'; put 'put ''Y2UucGlwZXNDb3VudCs9MSx4KCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLGNlLnBpcGVzQ291bnQsRmUpO3ZhciB3ZT1GZSYmITE9PT1GZS5lbmR8fERlPT09eS5zdGRvdXR8fERlPT09eS5zdGRlcnI/THI6dHQ7ZnVuY3Rpb24gdHQoKXt4KCJvbmVuZCIpLERlLmVuZCgpfWNlLmVuZEVtaXR0''@;'; put 'put ''ZWQ/eS5uZXh0VGljayh3ZSk6Z2Uub25jZSgiZW5kIix3ZSksRGUub24oInVucGlwZSIsZnVuY3Rpb24gSmUobG4sT24pe3goIm9udW5waXBlIiksbG49PT1nZSYmT24mJiExPT09T24uaGFzVW5waXBlZCYmKE9uLmhhc1VucGlwZWQ9ITAsZnVuY3Rpb24gUnQoKXt4KCJjbGVhbnVwIiksRGUu''@;'; put 'put ''cmVtb3ZlTGlzdGVuZXIoImNsb3NlIixndCksRGUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsWHQpLERlLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsS2UpLERlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsR3QpLERlLnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLEplKSxnZS5yZW1vdmVMaXN0ZW5l''@;'; put 'put ''cigiZW5kIix0dCksZ2UucmVtb3ZlTGlzdGVuZXIoImVuZCIsTHIpLGdlLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixMdCksJHQ9ITAsY2UuYXdhaXREcmFpbiYmKCFEZS5fd3JpdGFibGVTdGF0ZXx8RGUuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSYmS2UoKX0oKSl9KTt2YXIgS2U9ZnVuY3Rp''@;'; put 'put ''b24gX2UoRGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBnZT1EZS5fcmVhZGFibGVTdGF0ZTt4KCJwaXBlT25EcmFpbiIsZ2UuYXdhaXREcmFpbiksZ2UuYXdhaXREcmFpbiYmZ2UuYXdhaXREcmFpbi0tLDA9PT1nZS5hd2FpdERyYWluJiZBKERlLCJkYXRhIikmJihnZS5mbG93aW5nPSEwLFJl''@;'; put 'put ''KERlKSl9fShnZSk7RGUub24oImRyYWluIixLZSk7dmFyICR0PSExO2Z1bmN0aW9uIEx0KGxuKXt4KCJvbmRhdGEiKTt2YXIgT249RGUud3JpdGUobG4pO3goImRlc3Qud3JpdGUiLE9uKSwhMT09PU9uJiYoKDE9PT1jZS5waXBlc0NvdW50JiZjZS5waXBlcz09PURlfHxjZS5waXBlc0NvdW50''@;'; put 'put ''PjEmJi0xIT09QWUoY2UucGlwZXMsRGUpKSYmISR0JiYoeCgiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlIixjZS5hd2FpdERyYWluKSxjZS5hd2FpdERyYWluKyspLGdlLnBhdXNlKCkpfWZ1bmN0aW9uIEd0KGxuKXt4KCJvbmVycm9yIixsbiksTHIoKSxEZS5yZW1vdmVMaXN0ZW5lcigi''@;'; put 'put ''ZXJyb3IiLEd0KSwwPT09QShEZSwiZXJyb3IiKSYmSWUoRGUsbG4pfWZ1bmN0aW9uIGd0KCl7RGUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsWHQpLExyKCl9ZnVuY3Rpb24gWHQoKXt4KCJvbmZpbmlzaCIpLERlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsZ3QpLExyKCl9ZnVuY3Rpb24gTHIo''@;'; put 'put ''KXt4KCJ1bnBpcGUiKSxnZS51bnBpcGUoRGUpfXJldHVybiBnZS5vbigiZGF0YSIsTHQpLGZ1bmN0aW9uIHFlKERlLEZlLGdlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgRGUucHJlcGVuZExpc3RlbmVyKXJldHVybiBEZS5wcmVwZW5kTGlzdGVuZXIoRmUsZ2UpO0RlLl9ldmVudHMmJkRlLl9l''@;'; put 'put ''dmVudHNbRmVdP0FycmF5LmlzQXJyYXkoRGUuX2V2ZW50c1tGZV0pP0RlLl9ldmVudHNbRmVdLnVuc2hpZnQoZ2UpOkRlLl9ldmVudHNbRmVdPVtnZSxEZS5fZXZlbnRzW0ZlXV06RGUub24oRmUsZ2UpfShEZSwiZXJyb3IiLEd0KSxEZS5vbmNlKCJjbG9zZSIsZ3QpLERlLm9uY2UoImZpbmlz''@;'; put 'put ''aCIsWHQpLERlLmVtaXQoInBpcGUiLGdlKSxjZS5mbG93aW5nfHwoeCgicGlwZSByZXN1bWUiKSxnZS5yZXN1bWUoKSksRGV9LGYucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihEZSl7dmFyIEZlPXRoaXMuX3JlYWRhYmxlU3RhdGUsZ2U9e2hhc1VucGlwZWQ6ITF9O2lmKDA9PT1GZS5waXBl''@;'; put 'put ''c0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT1GZS5waXBlc0NvdW50KXJldHVybiBEZSYmRGUhPT1GZS5waXBlc3x8KERlfHwoRGU9RmUucGlwZXMpLEZlLnBpcGVzPW51bGwsRmUucGlwZXNDb3VudD0wLEZlLmZsb3dpbmc9ITEsRGUmJkRlLmVtaXQoInVucGlwZSIsdGhpcyxnZSkpLHRoaXM7''@;'; put 'put ''aWYoIURlKXt2YXIgY2U9RmUucGlwZXMsaGU9RmUucGlwZXNDb3VudDtGZS5waXBlcz1udWxsLEZlLnBpcGVzQ291bnQ9MCxGZS5mbG93aW5nPSExO2Zvcih2YXIgd2U9MDt3ZTxoZTt3ZSsrKWNlW3dlXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312''@;'; put 'put ''YXIgSmU9QWUoRmUucGlwZXMsRGUpO3JldHVybi0xPT09SmV8fChGZS5waXBlcy5zcGxpY2UoSmUsMSksRmUucGlwZXNDb3VudC09MSwxPT09RmUucGlwZXNDb3VudCYmKEZlLnBpcGVzPUZlLnBpcGVzWzBdKSxEZS5lbWl0KCJ1bnBpcGUiLHRoaXMsZ2UpKSx0aGlzfSxmLnByb3RvdHlwZS5h''@;'; put 'put ''ZGRMaXN0ZW5lcj1mLnByb3RvdHlwZS5vbj1mdW5jdGlvbihEZSxGZSl7dmFyIGdlPXYucHJvdG90eXBlLm9uLmNhbGwodGhpcyxEZSxGZSksY2U9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4iZGF0YSI9PT1EZT8oY2UucmVhZGFibGVMaXN0ZW5pbmc9dGhpcy5saXN0ZW5lckNvdW50KCJy''@;'; put 'put ''ZWFkYWJsZSIpPjAsITEhPT1jZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpKToicmVhZGFibGUiPT09RGUmJiFjZS5lbmRFbWl0dGVkJiYhY2UucmVhZGFibGVMaXN0ZW5pbmcmJihjZS5yZWFkYWJsZUxpc3RlbmluZz1jZS5uZWVkUmVhZGFibGU9ITAsY2UuZmxvd2luZz0hMSxjZS5lbWl0dGVk''@;'; put 'put ''UmVhZGFibGU9ITEseCgib24gcmVhZGFibGUiLGNlLmxlbmd0aCxjZS5yZWFkaW5nKSxjZS5sZW5ndGg/cCh0aGlzKTpjZS5yZWFkaW5nfHx5Lm5leHRUaWNrKG90LHRoaXMpKSxnZX0sZi5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oRGUsRmUpe3ZhciBnZT12LnByb3RvdHlw''@;'; put 'put ''ZS5yZW1vdmVMaXN0ZW5lci5jYWxsKHRoaXMsRGUsRmUpO3JldHVybiJyZWFkYWJsZSI9PT1EZSYmeS5uZXh0VGljayhQZSx0aGlzKSxnZX0sZi5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKERlKXt2YXIgRmU9di5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFw''@;'; put 'put ''cGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4oInJlYWRhYmxlIj09PURlfHx2b2lkIDA9PT1EZSkmJnkubmV4dFRpY2soUGUsdGhpcyksRmV9LGYucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3ZhciBEZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBEZS5mbG93aW5nfHwoeCgicmVz''@;'; put 'put ''dW1lIiksRGUuZmxvd2luZz0hRGUucmVhZGFibGVMaXN0ZW5pbmcsZnVuY3Rpb24gbHQoRGUsRmUpe0ZlLnJlc3VtZVNjaGVkdWxlZHx8KEZlLnJlc3VtZVNjaGVkdWxlZD0hMCx5Lm5leHRUaWNrKGR0LERlLEZlKSl9KHRoaXMsRGUpKSxEZS5wYXVzZWQ9ITEsdGhpc30sZi5wcm90b3R5cGUu''@;'; put 'put ''cGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4geCgiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoeCgicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0''@;'; put 'put ''KCJwYXVzZSIpKSx0aGlzLl9yZWFkYWJsZVN0YXRlLnBhdXNlZD0hMCx0aGlzfSxmLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKERlKXt2YXIgRmU9dGhpcyxnZT10aGlzLl9yZWFkYWJsZVN0YXRlLGNlPSExO2Zvcih2YXIgaGUgaW4gRGUub24oImVuZCIsZnVuY3Rpb24oKXtpZih4KCJ3cmFw''@;'; put 'put ''cGVkIGVuZCIpLGdlLmRlY29kZXImJiFnZS5lbmRlZCl7dmFyIEplPWdlLmRlY29kZXIuZW5kKCk7SmUmJkplLmxlbmd0aCYmRmUucHVzaChKZSl9RmUucHVzaChudWxsKX0pLERlLm9uKCJkYXRhIixmdW5jdGlvbihKZSl7eCgid3JhcHBlZCBkYXRhIiksZ2UuZGVjb2RlciYmKEplPWdlLmRl''@;'; put 'put ''Y29kZXIud3JpdGUoSmUpKSxnZS5vYmplY3RNb2RlJiZudWxsPT1KZXx8IShnZS5vYmplY3RNb2RlfHxKZSYmSmUubGVuZ3RoKXx8RmUucHVzaChKZSl8fChjZT0hMCxEZS5wYXVzZSgpKX0pLERlKXZvaWQgMD09PXRoaXNbaGVdJiYiZnVuY3Rpb24iPT10eXBlb2YgRGVbaGVdJiYodGhpc1to''@;'; put 'put ''ZV09ZnVuY3Rpb24odHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBEZVt0dF0uYXBwbHkoRGUsYXJndW1lbnRzKX19KGhlKSk7Zm9yKHZhciB3ZT0wO3dlPGtlLmxlbmd0aDt3ZSsrKURlLm9uKGtlW3dlXSx0aGlzLmVtaXQuYmluZCh0aGlzLGtlW3dlXSkpO3JldHVybiB0aGlzLl9yZWFk''@;'; put 'put ''PWZ1bmN0aW9uKEplKXt4KCJ3cmFwcGVkIF9yZWFkIixKZSksY2UmJihjZT0hMSxEZS5yZXN1bWUoKSl9LHRoaXN9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihmLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09bWUmJihtZT1o''@;'; put 'put ''KDI5NTUpKSxtZSh0aGlzKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLnByb3RvdHlwZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShmLnByb3RvdHlwZSwicmVhZGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZi5wcm90b3R5cGUsInJlYWRh''@;'; put 'put ''YmxlRmxvd2luZyIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sc2V0OmZ1bmN0aW9uKEZlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPUZlKX19KSxmLl9mcm9tTGlzdD1h''@;'; put 'put ''ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZi5wcm90b3R5cGUsInJlYWRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGh9fSksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGYuZnJvbT1mdW5jdGlvbihE''@;'; put 'put ''ZSxGZSl7cmV0dXJuIHZvaWQgMD09PUNlJiYoQ2U9aCg1NTE1NykpLENlKGYsRGUsRmUpfSl9LDc0NjEwKGZlLGosaCl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9Uzt2YXIgeT1oKDg2MDQ4KS5GLGM9eS5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxzPXkuRVJSX01VTFRJUExFX0NBTExC''@;'; put 'put ''QUNLLEE9eS5FUlJfVFJBTlNGT1JNX0FMUkVBRFlfVFJBTlNGT1JNSU5HLHY9eS5FUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzAsQz1oKDI1MzgyKTtmdW5jdGlvbiB3KHgsVSl7dmFyIEg9dGhpcy5fdHJhbnNmb3JtU3RhdGU7SC50cmFuc2Zvcm1pbmc9ITE7dmFyIFY9SC53cml0ZWNiO2lm''@;'; put 'put ''KG51bGw9PT1WKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgcyk7SC53cml0ZWNodW5rPW51bGwsSC53cml0ZWNiPW51bGwsbnVsbCE9VSYmdGhpcy5wdXNoKFUpLFYoeCk7dmFyIE49dGhpcy5fcmVhZGFibGVTdGF0ZTtOLnJlYWRpbmc9ITEsKE4ubmVlZFJlYWRhYmxlfHxOLmxlbmd0''@;'; put 'put ''aDxOLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKE4uaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gUyh4KXtpZighKHRoaXMgaW5zdGFuY2VvZiBTKSlyZXR1cm4gbmV3IFMoeCk7Qy5jYWxsKHRoaXMseCksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOncuYmluZCh0aGlz''@;'; put 'put ''KSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLHgmJigiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgeC50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09eC50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiB4LmZsdXNoJiYodGhpcy5fZmx1c2g9eC5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIsTCl9ZnVuY3Rpb24gTCgpe3ZhciB4PXRoaXM7ImZ1bmN0aW9uIiE9dHlwZW9m''@;'; put 'put ''IHRoaXMuX2ZsdXNofHx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD9SKHRoaXMsbnVsbCxudWxsKTp0aGlzLl9mbHVzaChmdW5jdGlvbihVLEgpe1IoeCxVLEgpfSl9ZnVuY3Rpb24gUih4LFUsSCl7aWYoVSlyZXR1cm4geC5lbWl0KCJlcnJvciIsVSk7aWYobnVsbCE9SCYmeC5wdXNo''@;'; put 'put ''KEgpLHguX3dyaXRhYmxlU3RhdGUubGVuZ3RoKXRocm93IG5ldyB2O2lmKHguX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgQTtyZXR1cm4geC5wdXNoKG51bGwpfWgoNTY2OTgpKFMsQyksUy5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih4LFUpe3JldHVybiB0aGlzLl90''@;'; put 'put ''cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLEMucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLHgsVSl9LFMucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oeCxVLEgpe0gobmV3IGMoIl90cmFuc2Zvcm0oKSIpKX0sUy5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHgsVSxIKXt2''@;'; put 'put ''YXIgVj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihWLndyaXRlY2I9SCxWLndyaXRlY2h1bms9eCxWLndyaXRlZW5jb2Rpbmc9VSwhVi50cmFuc2Zvcm1pbmcpe3ZhciBOPXRoaXMuX3JlYWRhYmxlU3RhdGU7KFYubmVlZFRyYW5zZm9ybXx8Ti5uZWVkUmVhZGFibGV8fE4ubGVuZ3RoPE4uaGln''@;'; put 'put ''aFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoTi5oaWdoV2F0ZXJNYXJrKX19LFMucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKHgpe3ZhciBVPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGw9PT1VLndyaXRlY2h1bmt8fFUudHJhbnNmb3JtaW5nP1UubmVlZFRyYW5zZm9ybT0hMDooVS50cmFuc2Zv''@;'; put 'put ''cm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKFUud3JpdGVjaHVuayxVLndyaXRlZW5jb2RpbmcsVS5hZnRlclRyYW5zZm9ybSkpfSxTLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbih4LFUpe0MucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyx4LGZ1bmN0aW9uKEgpe1UoSCl9KX19LDE2''@;'; put 'put ''NzA4KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciBBLHk9aCg2NTYwNik7ZnVuY3Rpb24gcyhSZSl7dmFyIGFlPXRoaXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uIGR0KFJlLGFlLHhlKXt2YXIgamU9UmUuZW50cnk7Zm9y''@;'; put 'put ''KFJlLmVudHJ5PW51bGw7amU7KXt2YXIgQWU9amUuY2FsbGJhY2s7YWUucGVuZGluZ2NiLS0sQWUoeGUpLGplPWplLm5leHR9YWUuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9UmV9KGFlLFJlKX19ZmUuZXhwb3J0cz1YLFguV3JpdGFibGVTdGF0ZT1rZTt2YXIgcWUsdj17ZGVwcmVjYXRlOmgo''@;'; put 'put ''OTQ2NDMpfSxDPWgoNDAzNDUpLHc9aCg0ODI4NykuQnVmZmVyLFM9KHR5cGVvZiBoLmc8InUiP2guZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSx4PWgoNzU4OTYpLEg9aCg2NTI5MSkuZ2V0SGlnaFdh''@;'; put 'put ''dGVyTWFyayxWPWgoODYwNDgpLkYsTj1WLkVSUl9JTlZBTElEX0FSR19UWVBFLHo9Vi5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxZPVYuRVJSX01VTFRJUExFX0NBTExCQUNLLEY9Vi5FUlJfU1RSRUFNX0NBTk5PVF9QSVBFLFc9Vi5FUlJfU1RSRUFNX0RFU1RST1lFRCxxPVYuRVJSX1NU''@;'; put 'put ''UkVBTV9OVUxMX1ZBTFVFUyxyZT1WLkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5ELG1lPVYuRVJSX1VOS05PV05fRU5DT0RJTkcsQ2U9eC5lcnJvck9yRGVzdHJveTtmdW5jdGlvbiBJZSgpe31mdW5jdGlvbiBrZShSZSxhZSx4ZSl7QT1BfHxoKDI1MzgyKSwiYm9vbGVhbiIhPXR5cGVvZiB4''@;'; put 'put ''ZSYmKHhlPWFlIGluc3RhbmNlb2YgQSksdGhpcy5vYmplY3RNb2RlPSEhKFJlPVJlfHx7fSkub2JqZWN0TW9kZSx4ZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhUmUud3JpdGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9SCh0aGlzLFJlLCJ3cml0YWJs''@;'; put 'put ''ZUhpZ2hXYXRlck1hcmsiLHhlKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlY29kZVN0cmluZ3M9ISghMT09PVJlLmRlY29kZVN0cmluZ3Mp''@;'; put 'put ''LHRoaXMuZGVmYXVsdEVuY29kaW5nPVJlLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oQWUpeyFmdW5jdGlv''@;'; put 'put ''biBEKFJlLGFlKXt2YXIgeGU9UmUuX3dyaXRhYmxlU3RhdGUsamU9eGUuc3luYyxBZT14ZS53cml0ZWNiO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBBZSl0aHJvdyBuZXcgWTtpZihmdW5jdGlvbiBHKFJlKXtSZS53cml0aW5nPSExLFJlLndyaXRlY2I9bnVsbCxSZS5sZW5ndGgtPVJlLndyaXRl''@;'; put 'put ''bGVuLFJlLndyaXRlbGVuPTB9KHhlKSxhZSkhZnVuY3Rpb24gSyhSZSxhZSx4ZSxqZSxBZSl7LS1hZS5wZW5kaW5nY2IseGU/KHkubmV4dFRpY2soQWUsamUpLHkubmV4dFRpY2sob3QsUmUsYWUpLFJlLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxDZShSZSxqZSkpOihBZShqZSks''@;'; put 'put ''UmUuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLENlKFJlLGplKSxvdChSZSxhZSkpfShSZSx4ZSxqZSxhZSxBZSk7ZWxzZXt2YXIgRGU9bmUoeGUpfHxSZS5kZXN0cm95ZWQ7IURlJiYheGUuY29ya2VkJiYheGUuYnVmZmVyUHJvY2Vzc2luZyYmeGUuYnVmZmVyZWRSZXF1ZXN0JiZ1''@;'; put 'put ''ZShSZSx4ZSksamU/eS5uZXh0VGljayhwLFJlLHhlLERlLEFlKTpwKFJlLHhlLERlLEFlKX19KGFlLEFlKX0sdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5wZW5kaW5n''@;'; put 'put ''Y2I9MCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuZW1pdENsb3NlPSExIT09UmUuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9ISFSZS5hdXRvRGVzdHJveSx0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9''@;'; put 'put ''bmV3IHModGhpcyl9ZnVuY3Rpb24gWChSZSl7dmFyIGFlPXRoaXMgaW5zdGFuY2VvZihBPUF8fGgoMjUzODIpKTtpZighYWUmJiFxZS5jYWxsKFgsdGhpcykpcmV0dXJuIG5ldyBYKFJlKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBrZShSZSx0aGlzLGFlKSx0aGlzLndyaXRhYmxlPSEwLFJl''@;'; put 'put ''JiYoImZ1bmN0aW9uIj09dHlwZW9mIFJlLndyaXRlJiYodGhpcy5fd3JpdGU9UmUud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBSZS53cml0ZXYmJih0aGlzLl93cml0ZXY9UmUud3JpdGV2KSwiZnVuY3Rpb24iPT10eXBlb2YgUmUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9UmUuZGVzdHJv''@;'; put 'put ''eSksImZ1bmN0aW9uIj09dHlwZW9mIFJlLmZpbmFsJiYodGhpcy5fZmluYWw9UmUuZmluYWwpKSxDLmNhbGwodGhpcyl9ZnVuY3Rpb24gQihSZSxhZSx4ZSxqZSxBZSxEZSxGZSl7YWUud3JpdGVsZW49amUsYWUud3JpdGVjYj1GZSxhZS53cml0aW5nPSEwLGFlLnN5bmM9ITAsYWUuZGVzdHJv''@;'; put 'put ''eWVkP2FlLm9ud3JpdGUobmV3IFcoIndyaXRlIikpOnhlP1JlLl93cml0ZXYoQWUsYWUub253cml0ZSk6UmUuX3dyaXRlKEFlLERlLGFlLm9ud3JpdGUpLGFlLnN5bmM9ITF9ZnVuY3Rpb24gcChSZSxhZSx4ZSxqZSl7eGV8fGZ1bmN0aW9uIEkoUmUsYWUpezA9PT1hZS5sZW5ndGgmJmFlLm5l''@;'; put 'put ''ZWREcmFpbiYmKGFlLm5lZWREcmFpbj0hMSxSZS5lbWl0KCJkcmFpbiIpKX0oUmUsYWUpLGFlLnBlbmRpbmdjYi0tLGplKCksb3QoUmUsYWUpfWZ1bmN0aW9uIHVlKFJlLGFlKXthZS5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciB4ZT1hZS5idWZmZXJlZFJlcXVlc3Q7aWYoUmUuX3dyaXRldiYm''@;'; put 'put ''eGUmJnhlLm5leHQpe3ZhciBBZT1uZXcgQXJyYXkoYWUuYnVmZmVyZWRSZXF1ZXN0Q291bnQpLERlPWFlLmNvcmtlZFJlcXVlc3RzRnJlZTtEZS5lbnRyeT14ZTtmb3IodmFyIEZlPTAsZ2U9ITA7eGU7KUFlW0ZlXT14ZSx4ZS5pc0J1Znx8KGdlPSExKSx4ZT14ZS5uZXh0LEZlKz0xO0FlLmFs''@;'; put 'put ''bEJ1ZmZlcnM9Z2UsQihSZSxhZSwhMCxhZS5sZW5ndGgsQWUsIiIsRGUuZmluaXNoKSxhZS5wZW5kaW5nY2IrKyxhZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsRGUubmV4dD8oYWUuY29ya2VkUmVxdWVzdHNGcmVlPURlLm5leHQsRGUubmV4dD1udWxsKTphZS5jb3JrZWRSZXF1ZXN0c0Zy''@;'; put 'put ''ZWU9bmV3IHMoYWUpLGFlLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO3hlOyl7dmFyIGNlPXhlLmNodW5rO2lmKEIoUmUsYWUsITEsYWUub2JqZWN0TW9kZT8xOmNlLmxlbmd0aCxjZSx4ZS5lbmNvZGluZyx4ZS5jYWxsYmFjaykseGU9eGUubmV4dCxhZS5idWZmZXJlZFJlcXVl''@;'; put 'put ''c3RDb3VudC0tLGFlLndyaXRpbmcpYnJlYWt9bnVsbD09PXhlJiYoYWUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX1hZS5idWZmZXJlZFJlcXVlc3Q9eGUsYWUuYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiBuZShSZSl7cmV0dXJuIFJlLmVuZGluZyYmMD09PVJlLmxlbmd0aCYmbnVs''@;'; put 'put ''bD09PVJlLmJ1ZmZlcmVkUmVxdWVzdCYmIVJlLmZpbmlzaGVkJiYhUmUud3JpdGluZ31mdW5jdGlvbiBfZShSZSxhZSl7UmUuX2ZpbmFsKGZ1bmN0aW9uKHhlKXthZS5wZW5kaW5nY2ItLSx4ZSYmQ2UoUmUseGUpLGFlLnByZWZpbmlzaGVkPSEwLFJlLmVtaXQoInByZWZpbmlzaCIpLG90KFJl''@;'; put 'put ''LGFlKX0pfWZ1bmN0aW9uIG90KFJlLGFlKXt2YXIgeGU9bmUoYWUpO2lmKHhlJiYoZnVuY3Rpb24gUGUoUmUsYWUpeyFhZS5wcmVmaW5pc2hlZCYmIWFlLmZpbmFsQ2FsbGVkJiYoImZ1bmN0aW9uIiE9dHlwZW9mIFJlLl9maW5hbHx8YWUuZGVzdHJveWVkPyhhZS5wcmVmaW5pc2hlZD0hMCxS''@;'; put 'put ''ZS5lbWl0KCJwcmVmaW5pc2giKSk6KGFlLnBlbmRpbmdjYisrLGFlLmZpbmFsQ2FsbGVkPSEwLHkubmV4dFRpY2soX2UsUmUsYWUpKSl9KFJlLGFlKSwwPT09YWUucGVuZGluZ2NiJiYoYWUuZmluaXNoZWQ9ITAsUmUuZW1pdCgiZmluaXNoIiksYWUuYXV0b0Rlc3Ryb3kpKSl7dmFyIGplPVJl''@;'; put 'put ''Ll9yZWFkYWJsZVN0YXRlOyghamV8fGplLmF1dG9EZXN0cm95JiZqZS5lbmRFbWl0dGVkKSYmUmUuZGVzdHJveSgpfXJldHVybiB4ZX1oKDU2Njk4KShYLEMpLGtlLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIGFlPXRoaXMuYnVmZmVyZWRSZXF1ZXN0LHhlPVtdO2Fl''@;'; put 'put ''Oyl4ZS5wdXNoKGFlKSxhZT1hZS5uZXh0O3JldHVybiB4ZX0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGtlLnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0OnYuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5i''@;'; put 'put ''dWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90''@;'; put 'put ''eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KHFlPUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24oYWUpe3JldHVybiEhcWUuY2FsbCh0aGlzLGFlKXx8dGhpcz09PVgm''@;'; put 'put ''JmFlJiZhZS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIGtlfX0pKTpxZT1mdW5jdGlvbihhZSl7cmV0dXJuIGFlIGluc3RhbmNlb2YgdGhpc30sWC5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe0NlKHRoaXMsbmV3IEYpfSxYLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihSZSxhZSx4ZSl7''@;'; put 'put ''dmFyIGplPXRoaXMuX3dyaXRhYmxlU3RhdGUsQWU9ITEsRGU9IWplLm9iamVjdE1vZGUmJmZ1bmN0aW9uIFIoUmUpe3JldHVybiB3LmlzQnVmZmVyKFJlKXx8UmUgaW5zdGFuY2VvZiBTfShSZSk7cmV0dXJuIERlJiYhdy5pc0J1ZmZlcihSZSkmJihSZT1mdW5jdGlvbiBMKFJlKXtyZXR1cm4g''@;'; put 'put ''dy5mcm9tKFJlKX0oUmUpKSwiZnVuY3Rpb24iPT10eXBlb2YgYWUmJih4ZT1hZSxhZT1udWxsKSxEZT9hZT0iYnVmZmVyIjphZXx8KGFlPWplLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0aW9uIiE9dHlwZW9mIHhlJiYoeGU9SWUpLGplLmVuZGluZz9mdW5jdGlvbiBmKFJlLGFlKXt2YXIgeGU9''@;'; put 'put ''bmV3IHJlO0NlKFJlLHhlKSx5Lm5leHRUaWNrKGFlLHhlKX0odGhpcyx4ZSk6KERlfHxmdW5jdGlvbiBiKFJlLGFlLHhlLGplKXt2YXIgQWU7cmV0dXJuIG51bGw9PT14ZT9BZT1uZXcgcToic3RyaW5nIiE9dHlwZW9mIHhlJiYhYWUub2JqZWN0TW9kZSYmKEFlPW5ldyBOKCJjaHVuayIsWyJz''@;'; put 'put ''dHJpbmciLCJCdWZmZXIiXSx4ZSkpLCFBZXx8KENlKFJlLEFlKSx5Lm5leHRUaWNrKGplLEFlKSwhMSl9KHRoaXMsamUsUmUseGUpKSYmKGplLnBlbmRpbmdjYisrLEFlPWZ1bmN0aW9uIE0oUmUsYWUseGUsamUsQWUsRGUpe2lmKCF4ZSl7dmFyIEZlPWZ1bmN0aW9uIGsoUmUsYWUseGUpe3Jl''@;'; put 'put ''dHVybiFSZS5vYmplY3RNb2RlJiYhMSE9PVJlLmRlY29kZVN0cmluZ3MmJiJzdHJpbmciPT10eXBlb2YgYWUmJihhZT13LmZyb20oYWUseGUpKSxhZX0oYWUsamUsQWUpO2plIT09RmUmJih4ZT0hMCxBZT0iYnVmZmVyIixqZT1GZSl9dmFyIGdlPWFlLm9iamVjdE1vZGU/MTpqZS5sZW5ndGg7''@;'; put 'put ''YWUubGVuZ3RoKz1nZTt2YXIgY2U9YWUubGVuZ3RoPGFlLmhpZ2hXYXRlck1hcms7aWYoY2V8fChhZS5uZWVkRHJhaW49ITApLGFlLndyaXRpbmd8fGFlLmNvcmtlZCl7dmFyIGhlPWFlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7YWUubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6amUsZW5jb2Rp''@;'; put 'put ''bmc6QWUsaXNCdWY6eGUsY2FsbGJhY2s6RGUsbmV4dDpudWxsfSxoZT9oZS5uZXh0PWFlLmxhc3RCdWZmZXJlZFJlcXVlc3Q6YWUuYnVmZmVyZWRSZXF1ZXN0PWFlLmxhc3RCdWZmZXJlZFJlcXVlc3QsYWUuYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSBCKFJlLGFlLCExLGdlLGplLEFl''@;'; put 'put ''LERlKTtyZXR1cm4gY2V9KHRoaXMsamUsRGUsUmUsYWUseGUpKSxBZX0sWC5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LFgucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciBSZT10aGlzLl93cml0YWJsZVN0YXRlO1JlLmNvcmtl''@;'; put 'put ''ZCYmKFJlLmNvcmtlZC0tLCFSZS53cml0aW5nJiYhUmUuY29ya2VkJiYhUmUuYnVmZmVyUHJvY2Vzc2luZyYmUmUuYnVmZmVyZWRSZXF1ZXN0JiZ1ZSh0aGlzLFJlKSl9LFgucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZz1mdW5jdGlvbihhZSl7aWYoInN0cmluZyI9PXR5cGVvZiBhZSYm''@;'; put 'put ''KGFlPWFlLnRvTG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1dGY4IiwidXRmLTgiLCJhc2NpaSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIiLCJ1Y3MtMiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJhdyJdLmluZGV4T2YoKGFlKyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IG1lKGFl''@;'; put 'put ''KTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9YWUsdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KFgucHJvdG90eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRo''@;'; put 'put ''aXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSks''@;'; put 'put ''WC5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKFJlLGFlLHhlKXt4ZShuZXcgeigiX3dyaXRlKCkiKSl9LFgucHJvdG90eXBlLl93cml0ZXY9bnVsbCxYLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oUmUsYWUseGUpe3ZhciBqZT10aGlzLl93cml0YWJsZVN0YXRlO3JldHVybiJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBSZT8oeGU9UmUsUmU9bnVsbCxhZT1udWxsKToiZnVuY3Rpb24iPT10eXBlb2YgYWUmJih4ZT1hZSxhZT1udWxsKSxudWxsIT1SZSYmdGhpcy53cml0ZShSZSxhZSksamUuY29ya2VkJiYoamUuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksamUuZW5kaW5nfHxmdW5jdGlvbiBsdChS''@;'; put 'put ''ZSxhZSx4ZSl7YWUuZW5kaW5nPSEwLG90KFJlLGFlKSx4ZSYmKGFlLmZpbmlzaGVkP3kubmV4dFRpY2soeGUpOlJlLm9uY2UoImZpbmlzaCIseGUpKSxhZS5lbmRlZD0hMCxSZS53cml0YWJsZT0hMX0odGhpcyxqZSx4ZSksdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KFgucHJvdG90eXBl''@;'; put 'put ''LCJ3cml0YWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihhZSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPWFlKX19KSxYLnByb3RvdHlwZS5kZXN0cm95PXguZGVz''@;'; put 'put ''dHJveSxYLnByb3RvdHlwZS5fdW5kZXN0cm95PXgudW5kZXN0cm95LFgucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKFJlLGFlKXthZShSZSl9fSwyOTU1KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciBjLHk9aCg2NTYwNik7ZnVuY3Rpb24gcyhyZSxtZSxDZSl7cmV0dXJuIG1lPWZ1bmN0''@;'; put 'put ''aW9uIEEocmUpe3ZhciBtZT1mdW5jdGlvbiB2KHJlLG1lKXtpZigib2JqZWN0IiE9dHlwZW9mIHJlfHxudWxsPT09cmUpcmV0dXJuIHJlO3ZhciBDZT1yZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PUNlKXt2YXIgSWU9Q2UuY2FsbChyZSxtZXx8ImRlZmF1bHQiKTtpZigib2Jq''@;'; put 'put ''ZWN0IiE9dHlwZW9mIEllKXJldHVybiBJZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PW1lP1N0cmluZzpOdW1iZXIpKHJlKX0ocmUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10''@;'; put 'put ''eXBlb2YgbWU/bWU6U3RyaW5nKG1lKX0obWUpLG1lIGluIHJlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyZSxtZSx7dmFsdWU6Q2UsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyZVttZV09Q2UscmV9dmFyIEM9aCg4NjIzOCksdz1TeW1ib2woImxhc3RSZXNv''@;'; put 'put ''bHZlIiksUz1TeW1ib2woImxhc3RSZWplY3QiKSxMPVN5bWJvbCgiZXJyb3IiKSxSPVN5bWJvbCgiZW5kZWQiKSx4PVN5bWJvbCgibGFzdFByb21pc2UiKSxVPVN5bWJvbCgiaGFuZGxlUHJvbWlzZSIpLEg9U3ltYm9sKCJzdHJlYW0iKTtmdW5jdGlvbiBWKHJlLG1lKXtyZXR1cm57dmFsdWU6''@;'; put 'put ''cmUsZG9uZTptZX19ZnVuY3Rpb24gTihyZSl7dmFyIG1lPXJlW3ddO2lmKG51bGwhPT1tZSl7dmFyIENlPXJlW0hdLnJlYWQoKTtudWxsIT09Q2UmJihyZVt4XT1udWxsLHJlW3ddPW51bGwscmVbU109bnVsbCxtZShWKENlLCExKSkpfX1mdW5jdGlvbiB6KHJlKXt5Lm5leHRUaWNrKE4scmUp''@;'; put 'put ''fXZhciBGPU9iamVjdC5nZXRQcm90b3R5cGVPZihmdW5jdGlvbigpe30pLFc9T2JqZWN0LnNldFByb3RvdHlwZU9mKChzKGM9e2dldCBzdHJlYW0oKXtyZXR1cm4gdGhpc1tIXX0sbmV4dDpmdW5jdGlvbigpe3ZhciBtZT10aGlzLENlPXRoaXNbTF07aWYobnVsbCE9PUNlKXJldHVybiBQcm9t''@;'; put 'put ''aXNlLnJlamVjdChDZSk7aWYodGhpc1tSXSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFYodm9pZCAwLCEwKSk7aWYodGhpc1tIXS5kZXN0cm95ZWQpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKFgsZil7eS5uZXh0VGljayhmdW5jdGlvbigpe21lW0xdP2YobWVbTF0pOlgoVih2b2lkIDAs''@;'; put 'put ''ITApKX0pfSk7dmFyIGtlLEllPXRoaXNbeF07aWYoSWUpa2U9bmV3IFByb21pc2UoZnVuY3Rpb24gWShyZSxtZSl7cmV0dXJuIGZ1bmN0aW9uKENlLEllKXtyZS50aGVuKGZ1bmN0aW9uKCl7bWVbUl0/Q2UoVih2b2lkIDAsITApKTptZVtVXShDZSxJZSl9LEllKX19KEllLHRoaXMpKTtlbHNl''@;'; put 'put ''e3ZhciBxZT10aGlzW0hdLnJlYWQoKTtpZihudWxsIT09cWUpcmV0dXJuIFByb21pc2UucmVzb2x2ZShWKHFlLCExKSk7a2U9bmV3IFByb21pc2UodGhpc1tVXSl9cmV0dXJuIHRoaXNbeF09a2Usa2V9fSxTeW1ib2wuYXN5bmNJdGVyYXRvcixmdW5jdGlvbigpe3JldHVybiB0aGlzfSkscyhj''@;'; put 'put ''LCJyZXR1cm4iLGZ1bmN0aW9uKCl7dmFyIG1lPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKENlLEllKXttZVtIXS5kZXN0cm95KG51bGwsZnVuY3Rpb24oa2Upe2tlP0llKGtlKTpDZShWKHZvaWQgMCwhMCkpfSl9KX0pLGMpLEYpO2ZlLmV4cG9ydHM9ZnVuY3Rpb24obWUpe3Zh''@;'; put 'put ''ciBDZSxJZT1PYmplY3QuY3JlYXRlKFcsKHMoQ2U9e30sSCx7dmFsdWU6bWUsd3JpdGFibGU6ITB9KSxzKENlLHcse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxzKENlLFMse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxzKENlLEwse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxzKENlLFIs''@;'; put 'put ''e3ZhbHVlOm1lLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsd3JpdGFibGU6ITB9KSxzKENlLFUse3ZhbHVlOmZ1bmN0aW9uKHFlLFgpe3ZhciBmPUllW0hdLnJlYWQoKTtmPyhJZVt4XT1udWxsLEllW3ddPW51bGwsSWVbU109bnVsbCxxZShWKGYsITEpKSk6KEllW3ddPXFlLEllW1NdPVgp''@;'; put 'put ''fSx3cml0YWJsZTohMH0pLENlKSk7cmV0dXJuIEllW3hdPW51bGwsQyhtZSxmdW5jdGlvbihrZSl7aWYoa2UmJiJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIhPT1rZS5jb2RlKXt2YXIgcWU9SWVbU107cmV0dXJuIG51bGwhPT1xZSYmKEllW3hdPW51bGwsSWVbd109bnVsbCxJZVtTXT1u''@;'; put 'put ''dWxsLHFlKGtlKSksdm9pZChJZVtMXT1rZSl9dmFyIFg9SWVbd107bnVsbCE9PVgmJihJZVt4XT1udWxsLEllW3ddPW51bGwsSWVbU109bnVsbCxYKFYodm9pZCAwLCEwKSkpLEllW1JdPSEwfSksbWUub24oInJlYWRhYmxlIix6LmJpbmQobnVsbCxJZSkpLEllfX0sODAzNDUoZmUsaixoKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7ZnVuY3Rpb24geShOLHope3ZhciBZPU9iamVjdC5rZXlzKE4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBGPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTik7eiYmKEY9Ri5maWx0ZXIoZnVuY3Rpb24oVyl7cmV0dXJuIE9iamVjdC5nZXRP''@;'; put 'put ''d25Qcm9wZXJ0eURlc2NyaXB0b3IoTixXKS5lbnVtZXJhYmxlfSkpLFkucHVzaC5hcHBseShZLEYpfXJldHVybiBZfWZ1bmN0aW9uIGMoTil7Zm9yKHZhciB6PTE7ejxhcmd1bWVudHMubGVuZ3RoO3orKyl7dmFyIFk9bnVsbCE9YXJndW1lbnRzW3pdP2FyZ3VtZW50c1t6XTp7fTt6JTI/eShP''@;'; put 'put ''YmplY3QoWSksITApLmZvckVhY2goZnVuY3Rpb24oRil7cyhOLEYsWVtGXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKFkpKTp5KE9iamVjdChZKSkuZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbihGKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoTixGLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoWSxGKSl9KX1yZXR1cm4gTn1mdW5jdGlvbiBzKE4seixZKXtyZXR1cm4oej13KHopKWluIE4/T2JqZWN0LmRlZmluZVByb3BlcnR5KE4seix7dmFsdWU6WSxlbnVtZXJh''@;'; put 'put ''YmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOk5bel09WSxOfWZ1bmN0aW9uIHYoTix6KXtmb3IodmFyIFk9MDtZPHoubGVuZ3RoO1krKyl7dmFyIEY9eltZXTtGLmVudW1lcmFibGU9Ri5lbnVtZXJhYmxlfHwhMSxGLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gRiYmKEYu''@;'; put 'put ''d3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOLHcoRi5rZXkpLEYpfX1mdW5jdGlvbiB3KE4pe3ZhciB6PWZ1bmN0aW9uIFMoTix6KXtpZigib2JqZWN0IiE9dHlwZW9mIE58fG51bGw9PT1OKXJldHVybiBOO3ZhciBZPU5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAh''@;'; put 'put ''PT1ZKXt2YXIgRj1ZLmNhbGwoTix6fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgRilyZXR1cm4gRjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXo/U3RyaW5nOk51bWJl''@;'; put 'put ''cikoTil9KE4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2Ygej96OlN0cmluZyh6KX12YXIgUj1oKDQ4Mjg3KS5CdWZmZXIsVT1oKDE1MzQwKS5pbnNwZWN0LEg9VSYmVS5jdXN0b218fCJpbnNwZWN0IjtmdW5jdGlvbiBWKE4seixZKXtSLnByb3RvdHlwZS5jb3B5LmNhbGwoTix6''@;'; put 'put ''LFkpfWZlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBOKCl7KGZ1bmN0aW9uIEEoTix6KXtpZighKE4gaW5zdGFuY2VvZiB6KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsTiksdGhpcy5oZWFkPW51bGwsdGhpcy50''@;'; put 'put ''YWlsPW51bGwsdGhpcy5sZW5ndGg9MH1yZXR1cm4gZnVuY3Rpb24gQyhOLHosWSl7eiYmdihOLnByb3RvdHlwZSx6KSxZJiZ2KE4sWSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE4sInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KE4sW3trZXk6InB1c2giLHZhbHVlOmZ1bmN0aW9uKFkpe3Zh''@;'; put 'put ''ciBGPXtkYXRhOlksbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PUY6dGhpcy5oZWFkPUYsdGhpcy50YWlsPUYsKyt0aGlzLmxlbmd0aH19LHtrZXk6InVuc2hpZnQiLHZhbHVlOmZ1bmN0aW9uKFkpe3ZhciBGPXtkYXRhOlksbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlz''@;'; put 'put ''Lmxlbmd0aCYmKHRoaXMudGFpbD1GKSx0aGlzLmhlYWQ9RiwrK3RoaXMubGVuZ3RofX0se2tleToic2hpZnQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgWT10aGlzLmhlYWQuZGF0YTtyZXR1cm4gdGhpcy5oZWFkPTE9PT10aGlzLmxlbmd0aD90aGlzLnRhaWw9''@;'; put 'put ''bnVsbDp0aGlzLmhlYWQubmV4dCwtLXRoaXMubGVuZ3RoLFl9fX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9fSx7a2V5OiJqb2luIix2YWx1ZTpmdW5jdGlvbihZKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJu''@;'; put 'put ''IiI7Zm9yKHZhciBGPXRoaXMuaGVhZCxXPSIiK0YuZGF0YTtGPUYubmV4dDspVys9WStGLmRhdGE7cmV0dXJuIFd9fSx7a2V5OiJjb25jYXQiLHZhbHVlOmZ1bmN0aW9uKFkpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gUi5hbGxvYygwKTtmb3IodmFyIEY9Ui5hbGxvY1Vuc2FmZShZPj4+''@;'; put 'put ''MCksVz10aGlzLmhlYWQscT0wO1c7KVYoVy5kYXRhLEYscSkscSs9Vy5kYXRhLmxlbmd0aCxXPVcubmV4dDtyZXR1cm4gRn19LHtrZXk6ImNvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uKFksRil7dmFyIFc7cmV0dXJuIFk8dGhpcy5oZWFkLmRhdGEubGVuZ3RoPyhXPXRoaXMuaGVhZC5kYXRhLnNs''@;'; put 'put ''aWNlKDAsWSksdGhpcy5oZWFkLmRhdGE9dGhpcy5oZWFkLmRhdGEuc2xpY2UoWSkpOlc9WT09PXRoaXMuaGVhZC5kYXRhLmxlbmd0aD90aGlzLnNoaWZ0KCk6Rj90aGlzLl9nZXRTdHJpbmcoWSk6dGhpcy5fZ2V0QnVmZmVyKFkpLFd9fSx7a2V5OiJmaXJzdCIsdmFsdWU6ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5oZWFkLmRhdGF9fSx7a2V5OiJfZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihZKXt2YXIgRj10aGlzLmhlYWQsVz0xLHE9Ri5kYXRhO2ZvcihZLT1xLmxlbmd0aDtGPUYubmV4dDspe3ZhciByZT1GLmRhdGEsbWU9WT5yZS5sZW5ndGg/cmUubGVuZ3RoOlk7aWYocSs9bWU9''@;'; put 'put ''PT1yZS5sZW5ndGg/cmU6cmUuc2xpY2UoMCxZKSwwPT09KFktPW1lKSl7bWU9PT1yZS5sZW5ndGg/KCsrVyx0aGlzLmhlYWQ9Ri5uZXh0P0YubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1GLEYuZGF0YT1yZS5zbGljZShtZSkpO2JyZWFrfSsrV31yZXR1cm4gdGhpcy5sZW5ndGgt''@;'; put 'put ''PVcscX19LHtrZXk6Il9nZXRCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKFkpe3ZhciBGPVIuYWxsb2NVbnNhZmUoWSksVz10aGlzLmhlYWQscT0xO2ZvcihXLmRhdGEuY29weShGKSxZLT1XLmRhdGEubGVuZ3RoO1c9Vy5uZXh0Oyl7dmFyIHJlPVcuZGF0YSxtZT1ZPnJlLmxlbmd0aD9yZS5sZW5n''@;'; put 'put ''dGg6WTtpZihyZS5jb3B5KEYsRi5sZW5ndGgtWSwwLG1lKSwwPT09KFktPW1lKSl7bWU9PT1yZS5sZW5ndGg/KCsrcSx0aGlzLmhlYWQ9Vy5uZXh0P1cubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1XLFcuZGF0YT1yZS5zbGljZShtZSkpO2JyZWFrfSsrcX1yZXR1cm4gdGhpcy5s''@;'; put 'put ''ZW5ndGgtPXEsRn19LHtrZXk6SCx2YWx1ZTpmdW5jdGlvbihZLEYpe3JldHVybiBVKHRoaXMsYyhjKHt9LEYpLHt9LHtkZXB0aDowLGN1c3RvbUluc3BlY3Q6ITF9KSl9fV0pLE59KCl9LDc1ODk2KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNjU2MDYpO2Z1bmN0aW9uIHMoUyxMKXtD''@;'; put 'put ''KFMsTCksQShTKX1mdW5jdGlvbiBBKFMpe1MuX3dyaXRhYmxlU3RhdGUmJiFTLl93cml0YWJsZVN0YXRlLmVtaXRDbG9zZXx8Uy5fcmVhZGFibGVTdGF0ZSYmIVMuX3JlYWRhYmxlU3RhdGUuZW1pdENsb3NlfHxTLmVtaXQoImNsb3NlIil9ZnVuY3Rpb24gQyhTLEwpe1MuZW1pdCgiZXJyb3Ii''@;'; put 'put ''LEwpfWZlLmV4cG9ydHM9e2Rlc3Ryb3k6ZnVuY3Rpb24gYyhTLEwpe3ZhciBSPXRoaXM7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfHx0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD8oTD9M''@;'; put 'put ''KFMpOlMmJih0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAseS5uZXh0VGljayhDLHRoaXMsUykpOnkubmV4dFRpY2soQyx0aGlzLFMpKSx0aGlzKToodGhpcy5fcmVhZGFibGVT''@;'; put 'put ''dGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX2Rlc3Ryb3koU3x8bnVsbCxmdW5jdGlvbihIKXshTCYmSD9SLl93cml0YWJsZVN0YXRlP1IuX3dyaXRhYmxl''@;'; put 'put ''U3RhdGUuZXJyb3JFbWl0dGVkP3kubmV4dFRpY2soQSxSKTooUi5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAseS5uZXh0VGljayhzLFIsSCkpOnkubmV4dFRpY2socyxSLEgpOkw/KHkubmV4dFRpY2soQSxSKSxMKEgpKTp5Lm5leHRUaWNrKEEsUil9KSx0aGlzKX0sdW5kZXN0cm95''@;'; put 'put ''OmZ1bmN0aW9uIHYoKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5nPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSExKSx0''@;'; put 'put ''aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZz0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkPSExLHRoaXMuX3dyaXRhYmxlU3Rh''@;'; put 'put ''dGUucHJlZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMSl9LGVycm9yT3JEZXN0cm95OmZ1bmN0aW9uIHcoUyxMKXt2YXIgUj1TLl9yZWFkYWJsZVN0YXRlLHg9Uy5fd3JpdGFibGVTdGF0ZTtSJiZS''@;'; put 'put ''LmF1dG9EZXN0cm95fHx4JiZ4LmF1dG9EZXN0cm95P1MuZGVzdHJveShMKTpTLmVtaXQoImVycm9yIixMKX19fSw4NjIzOChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDg2MDQ4KS5GLkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFO2Z1bmN0aW9uIHMoKXt9ZmUuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbiB2KEMsdyxTKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdylyZXR1cm4gdihDLG51bGwsdyk7d3x8KHc9e30pLFM9ZnVuY3Rpb24gYyhDKXt2YXIgdz0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighdyl7dz0hMDtmb3IodmFyIFM9YXJndW1lbnRzLmxlbmd0aCxMPW5ldyBBcnJheShTKSxS''@;'; put 'put ''PTA7UjxTO1IrKylMW1JdPWFyZ3VtZW50c1tSXTtDLmFwcGx5KHRoaXMsTCl9fX0oU3x8cyk7dmFyIEw9dy5yZWFkYWJsZXx8ITEhPT13LnJlYWRhYmxlJiZDLnJlYWRhYmxlLFI9dy53cml0YWJsZXx8ITEhPT13LndyaXRhYmxlJiZDLndyaXRhYmxlLHg9ZnVuY3Rpb24oKXtDLndyaXRhYmxl''@;'; put 'put ''fHxIKCl9LFU9Qy5fd3JpdGFibGVTdGF0ZSYmQy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCxIPWZ1bmN0aW9uKCl7Uj0hMSxVPSEwLEx8fFMuY2FsbChDKX0sVj1DLl9yZWFkYWJsZVN0YXRlJiZDLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsTj1mdW5jdGlvbigpe0w9ITEsVj0hMCxSfHxT''@;'; put 'put ''LmNhbGwoQyl9LHo9ZnVuY3Rpb24ocSl7Uy5jYWxsKEMscSl9LFk9ZnVuY3Rpb24oKXt2YXIgcTtyZXR1cm4gTCYmIVY/KCghQy5fcmVhZGFibGVTdGF0ZXx8IUMuX3JlYWRhYmxlU3RhdGUuZW5kZWQpJiYocT1uZXcgeSksUy5jYWxsKEMscSkpOlImJiFVPygoIUMuX3dyaXRhYmxlU3RhdGV8''@;'; put 'put ''fCFDLl93cml0YWJsZVN0YXRlLmVuZGVkKSYmKHE9bmV3IHkpLFMuY2FsbChDLHEpKTp2b2lkIDB9LEY9ZnVuY3Rpb24oKXtDLnJlcS5vbigiZmluaXNoIixIKX07cmV0dXJuIGZ1bmN0aW9uIEEoQyl7cmV0dXJuIEMuc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgQy5hYm9ydH0oQyk/''@;'; put 'put ''KEMub24oImNvbXBsZXRlIixIKSxDLm9uKCJhYm9ydCIsWSksQy5yZXE/RigpOkMub24oInJlcXVlc3QiLEYpKTpSJiYhQy5fd3JpdGFibGVTdGF0ZSYmKEMub24oImVuZCIseCksQy5vbigiY2xvc2UiLHgpKSxDLm9uKCJlbmQiLE4pLEMub24oImZpbmlzaCIsSCksITEhPT13LmVycm9yJiZD''@;'; put 'put ''Lm9uKCJlcnJvciIseiksQy5vbigiY2xvc2UiLFkpLGZ1bmN0aW9uKCl7Qy5yZW1vdmVMaXN0ZW5lcigiY29tcGxldGUiLEgpLEMucmVtb3ZlTGlzdGVuZXIoImFib3J0IixZKSxDLnJlbW92ZUxpc3RlbmVyKCJyZXF1ZXN0IixGKSxDLnJlcSYmQy5yZXEucmVtb3ZlTGlzdGVuZXIoImZpbmlz''@;'; put 'put ''aCIsSCksQy5yZW1vdmVMaXN0ZW5lcigiZW5kIix4KSxDLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIseCksQy5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixIKSxDLnJlbW92ZUxpc3RlbmVyKCJlbmQiLE4pLEMucmVtb3ZlTGlzdGVuZXIoImVycm9yIix6KSxDLnJlbW92ZUxpc3RlbmVyKCJjbG9z''@;'; put 'put ''ZSIsWSl9fX0sNTUxNTcoZmUpe2ZlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlJlYWRhYmxlLmZyb20gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnJvd3NlciIpfX0sNTc3NTgoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHkscz1oKDg2MDQ4KS5GLEE9cy5FUlJfTUlT''@;'; put 'put ''U0lOR19BUkdTLHY9cy5FUlJfU1RSRUFNX0RFU1RST1lFRDtmdW5jdGlvbiBDKEgpe2lmKEgpdGhyb3cgSH1mdW5jdGlvbiBMKEgpe0goKX1mdW5jdGlvbiBSKEgsVil7cmV0dXJuIEgucGlwZShWKX1mZS5leHBvcnRzPWZ1bmN0aW9uIFUoKXtmb3IodmFyIEg9YXJndW1lbnRzLmxlbmd0aCxW''@;'; put 'put ''PW5ldyBBcnJheShIKSxOPTA7TjxIO04rKylWW05dPWFyZ3VtZW50c1tOXTt2YXIgej1mdW5jdGlvbiB4KEgpe3JldHVybiBILmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIEhbSC5sZW5ndGgtMV0/SC5wb3AoKTpDfShWKTtpZihBcnJheS5pc0FycmF5KFZbMF0pJiYoVj1WWzBdKSxWLmxl''@;'; put 'put ''bmd0aDwyKXRocm93IG5ldyBBKCJzdHJlYW1zIik7dmFyIFksRj1WLm1hcChmdW5jdGlvbihXLHEpe3ZhciByZT1xPFYubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uIFMoSCxWLE4seil7ej1mdW5jdGlvbiBjKEgpe3ZhciBWPSExO3JldHVybiBmdW5jdGlvbigpe1Z8fChWPSEwLEguYXBwbHko''@;'; put 'put ''dm9pZCAwLGFyZ3VtZW50cykpfX0oeik7dmFyIFk9ITE7SC5vbigiY2xvc2UiLGZ1bmN0aW9uKCl7WT0hMH0pLHZvaWQgMD09PXkmJih5PWgoODYyMzgpKSx5KEgse3JlYWRhYmxlOlYsd3JpdGFibGU6Tn0sZnVuY3Rpb24oVyl7aWYoVylyZXR1cm4geihXKTtZPSEwLHooKX0pO3ZhciBGPSEx''@;'; put 'put ''O3JldHVybiBmdW5jdGlvbihXKXtpZighWSYmIUYpe2lmKEY9ITAsZnVuY3Rpb24gdyhIKXtyZXR1cm4gSC5zZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBILmFib3J0fShIKSlyZXR1cm4gSC5hYm9ydCgpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBILmRlc3Ryb3kpcmV0dXJuIEguZGVz''@;'; put 'put ''dHJveSgpO3ooV3x8bmV3IHYoInBpcGUiKSl9fX0oVyxyZSxxPjAsZnVuY3Rpb24oQ2Upe1l8fChZPUNlKSxDZSYmRi5mb3JFYWNoKEwpLCFyZSYmKEYuZm9yRWFjaChMKSx6KFkpKX0pfSk7cmV0dXJuIFYucmVkdWNlKFIpfX0sNjUyOTEoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg4''@;'; put 'put ''NjA0OCkuRi5FUlJfSU5WQUxJRF9PUFRfVkFMVUU7ZmUuZXhwb3J0cz17Z2V0SGlnaFdhdGVyTWFyazpmdW5jdGlvbiBzKEEsdixDLHcpe3ZhciBTPWZ1bmN0aW9uIGMoQSx2LEMpe3JldHVybiBudWxsIT1BLmhpZ2hXYXRlck1hcms/QS5oaWdoV2F0ZXJNYXJrOnY/QVtDXTpudWxsfSh2LHcs''@;'; put 'put ''Qyk7aWYobnVsbCE9Uyl7aWYoIWlzRmluaXRlKFMpfHxNYXRoLmZsb29yKFMpIT09U3x8UzwwKXRocm93IG5ldyB5KHc/QzoiaGlnaFdhdGVyTWFyayIsUyk7cmV0dXJuIE1hdGguZmxvb3IoUyl9cmV0dXJuIEEub2JqZWN0TW9kZT8xNjoxNjM4NH19fSw0MDM0NShmZSxqLGgpe2ZlLmV4cG9y''@;'; put 'put ''dHM9aCgzNzAwNykuRXZlbnRFbWl0dGVyfSw5MjA2MyhmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9ZnVuY3Rpb24oaCx5KXtpZih5PXkuc3BsaXQoIjoiKVswXSwhKGg9K2gpKXJldHVybiExO3N3aXRjaCh5KXtjYXNlImh0dHAiOmNhc2Uid3MiOnJldHVybiA4MCE9PWg7Y2FzZSJodHRw''@;'; put 'put ''cyI6Y2FzZSJ3c3MiOnJldHVybiA0NDMhPT1oO2Nhc2UiZnRwIjpyZXR1cm4gMjEhPT1oO2Nhc2UiZ29waGVyIjpyZXR1cm4gNzAhPT1oO2Nhc2UiZmlsZSI6cmV0dXJuITF9cmV0dXJuIDAhPT1ofX0sNjYwMTEoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg0ODI4NykuQnVmZmVyLGM9''@;'; put 'put ''aCg1NjY5OCkscz1oKDUxMTQ3KSxBPW5ldyBBcnJheSgxNiksdj1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAs''@;'; put 'put ''OCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxDPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEs''@;'; put 'put ''OCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLHc9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5''@;'; put 'put ''LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLFM9WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEs''@;'; put 'put ''MTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMs''@;'; put 'put ''MTEsMTFdLEw9WzAsMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMjg0MDg1MzgzOF0sUj1bMTM1MjgyOTkyNiwxNTQ4NjAzNjg0LDE4MzYwNzI2OTEsMjA1Mzk5NDIxNywwXTtmdW5jdGlvbiB4KEYsVyl7cmV0dXJuIEY8PFd8Rj4+PjMyLVd9ZnVuY3Rpb24gVShGLFcscSxyZSxt''@;'; put 'put ''ZSxDZSxJZSxrZSl7cmV0dXJuIHgoRisoV15xXnJlKStDZStJZXwwLGtlKSttZXwwfWZ1bmN0aW9uIEgoRixXLHEscmUsbWUsQ2UsSWUsa2Upe3JldHVybiB4KEYrKFcmcXx+VyZyZSkrQ2UrSWV8MCxrZSkrbWV8MH1mdW5jdGlvbiBWKEYsVyxxLHJlLG1lLENlLEllLGtlKXtyZXR1cm4geChG''@;'; put 'put ''KygoV3x+cSlecmUpK0NlK0llfDAsa2UpK21lfDB9ZnVuY3Rpb24gTihGLFcscSxyZSxtZSxDZSxJZSxrZSl7cmV0dXJuIHgoRisoVyZyZXxxJn5yZSkrQ2UrSWV8MCxrZSkrbWV8MH1mdW5jdGlvbiB6KEYsVyxxLHJlLG1lLENlLEllLGtlKXtyZXR1cm4geChGKyhXXihxfH5yZSkpK0NlK0ll''@;'; put 'put ''fDAsa2UpK21lfDB9ZnVuY3Rpb24gWSgpe3MuY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjB9YyhZLHMpLFkucHJvdG90eXBlLl91cGRhdGU9ZnVu''@;'; put 'put ''Y3Rpb24oKXtmb3IodmFyIEY9QSxXPTA7VzwxNjsrK1cpRltXXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KlcpO2Zvcih2YXIgcT0wfHRoaXMuX2EscmU9MHx0aGlzLl9iLG1lPTB8dGhpcy5fYyxDZT0wfHRoaXMuX2QsSWU9MHx0aGlzLl9lLGtlPTB8dGhpcy5fYSxxZT0wfHRoaXMuX2Is''@;'; put 'put ''WD0wfHRoaXMuX2MsZj0wfHRoaXMuX2QsYj0wfHRoaXMuX2Usaz0wO2s8ODA7ays9MSl7dmFyIE0sQjtrPDE2PyhNPVUocSxyZSxtZSxDZSxJZSxGW3Zba11dLExbMF0sd1trXSksQj16KGtlLHFlLFgsZixiLEZbQ1trXV0sUlswXSxTW2tdKSk6azwzMj8oTT1IKHEscmUsbWUsQ2UsSWUsRlt2''@;'; put 'put ''W2tdXSxMWzFdLHdba10pLEI9TihrZSxxZSxYLGYsYixGW0Nba11dLFJbMV0sU1trXSkpOms8NDg/KE09VihxLHJlLG1lLENlLEllLEZbdltrXV0sTFsyXSx3W2tdKSxCPVYoa2UscWUsWCxmLGIsRltDW2tdXSxSWzJdLFNba10pKTprPDY0PyhNPU4ocSxyZSxtZSxDZSxJZSxGW3Zba11dLExb''@;'; put 'put ''M10sd1trXSksQj1IKGtlLHFlLFgsZixiLEZbQ1trXV0sUlszXSxTW2tdKSk6KE09eihxLHJlLG1lLENlLEllLEZbdltrXV0sTFs0XSx3W2tdKSxCPVUoa2UscWUsWCxmLGIsRltDW2tdXSxSWzRdLFNba10pKSxxPUllLEllPUNlLENlPXgobWUsMTApLG1lPXJlLHJlPU0sa2U9YixiPWYsZj14''@;'; put 'put ''KFgsMTApLFg9cWUscWU9Qn12YXIgSz10aGlzLl9iK21lK2Z8MDt0aGlzLl9iPXRoaXMuX2MrQ2UrYnwwLHRoaXMuX2M9dGhpcy5fZCtJZStrZXwwLHRoaXMuX2Q9dGhpcy5fZStxK3FlfDAsdGhpcy5fZT10aGlzLl9hK3JlK1h8MCx0aGlzLl9hPUt9LFkucHJvdG90eXBlLl9kaWdlc3Q9ZnVu''@;'; put 'put ''Y3Rpb24oKXt0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldF09MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0Kz0xLHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0''@;'; put 'put ''aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIEY9eS5hbGxvYz95LmFs''@;'; put 'put ''bG9jKDIwKTpuZXcgeSgyMCk7cmV0dXJuIEYud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksRi53cml0ZUludDMyTEUodGhpcy5fYiw0KSxGLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLEYud3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIpLEYud3JpdGVJbnQzMkxFKHRoaXMuX2UsMTYpLEZ9LGZlLmV4''@;'; put 'put ''cG9ydHM9WX0sNTExNDcoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg5Mjg2MSkuQnVmZmVyLGM9aCg0ODUzNykscz1oKDExMDc3KS5UcmFuc2Zvcm07ZnVuY3Rpb24gdihDKXtzLmNhbGwodGhpcyksdGhpcy5fYmxvY2s9eS5hbGxvY1Vuc2FmZShDKSx0aGlzLl9ibG9ja1NpemU9Qyx0''@;'; put 'put ''aGlzLl9ibG9ja09mZnNldD0wLHRoaXMuX2xlbmd0aD1bMCwwLDAsMF0sdGhpcy5fZmluYWxpemVkPSExfWgoNTY2OTgpKHYscyksdi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihDLHcsUyl7dmFyIEw9bnVsbDt0cnl7dGhpcy51cGRhdGUoQyx3KX1jYXRjaChSKXtMPVJ9UyhMKX0s''@;'; put 'put ''di5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKEMpe3ZhciB3PW51bGw7dHJ5e3RoaXMucHVzaCh0aGlzLmRpZ2VzdCgpKX1jYXRjaChTKXt3PVN9Qyh3KX0sdi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEMsdyl7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0''@;'; put 'put ''IGFscmVhZHkgY2FsbGVkIik7Zm9yKHZhciBTPWMoQyx3KSxMPXRoaXMuX2Jsb2NrLFI9MDt0aGlzLl9ibG9ja09mZnNldCtTLmxlbmd0aC1SPj10aGlzLl9ibG9ja1NpemU7KXtmb3IodmFyIHg9dGhpcy5fYmxvY2tPZmZzZXQ7eDx0aGlzLl9ibG9ja1NpemU7KUxbeF09U1tSXSx4Kz0xLFIr''@;'; put 'put ''PTE7dGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MH1mb3IoO1I8Uy5sZW5ndGg7KUxbdGhpcy5fYmxvY2tPZmZzZXRdPVNbUl0sdGhpcy5fYmxvY2tPZmZzZXQrPTEsUis9MTtmb3IodmFyIFU9MCxIPTgqUy5sZW5ndGg7SD4wOysrVSl0aGlzLl9sZW5ndGhbVV0rPUgsKEg9dGhp''@;'; put 'put ''cy5fbGVuZ3RoW1VdLzQyOTQ5NjcyOTZ8MCk+MCYmKHRoaXMuX2xlbmd0aFtVXS09NDI5NDk2NzI5NipIKTtyZXR1cm4gdGhpc30sdi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sdi5wcm90b3R5cGUu''@;'; put 'put ''ZGlnZXN0PWZ1bmN0aW9uKEMpe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgdz10aGlzLl9kaWdlc3QoKTt2b2lkIDAhPT1DJiYodz13LnRvU3RyaW5nKEMpKSx0aGlzLl9ibG9jay5maWxs''@;'; put 'put ''KDApLHRoaXMuX2Jsb2NrT2Zmc2V0PTA7Zm9yKHZhciBTPTA7Uzw0OysrUyl0aGlzLl9sZW5ndGhbU109MDtyZXR1cm4gd30sdi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX2RpZ2VzdCBpcyBub3QgaW1wbGVtZW50ZWQiKX0sZmUuZXhwb3J0cz12fSw0''@;'; put 'put ''ODUzNyhmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDkyODYxKS5CdWZmZXIsYz1oKDE1Mzc3KSxzPXR5cGVvZiBVaW50OEFycmF5PCJ1Iix2PXMmJnR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldztmZS5leHBvcnRzPWZ1bmN0aW9uKEMsdyl7aWYoInN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBDfHx5LmlzQnVmZmVyKEMpfHxzJiZDIGluc3RhbmNlb2YgVWludDhBcnJheXx8diYmdihDKSlyZXR1cm4gYyhDLHcpO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgVWludDhBcnJheSwgb3Ig''@;'; put 'put ''YSBEYXRhVmlldycpfX0sNTk4NjAoZmUpe3ZhciBqPXt9LnRvU3RyaW5nO2ZlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oaCl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09ai5jYWxsKGgpfX0sNTAzMDgoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCgzMzIyNSksYz1PYmpl''@;'; put 'put ''Y3Qua2V5c3x8ZnVuY3Rpb24oVSl7dmFyIEg9W107Zm9yKHZhciBWIGluIFUpSC5wdXNoKFYpO3JldHVybiBIfTtmZS5leHBvcnRzPUw7dmFyIHM9T2JqZWN0LmNyZWF0ZShoKDE1NjIyKSk7cy5pbmhlcml0cz1oKDU2Njk4KTt2YXIgQT1oKDMxNzA2KSx2PWgoMjM5OCk7cy5pbmhlcml0cyhM''@;'; put 'put ''LEEpO2Zvcih2YXIgQz1jKHYucHJvdG90eXBlKSx3PTA7dzxDLmxlbmd0aDt3Kyspe3ZhciBTPUNbd107TC5wcm90b3R5cGVbU118fChMLnByb3RvdHlwZVtTXT12LnByb3RvdHlwZVtTXSl9ZnVuY3Rpb24gTChVKXtpZighKHRoaXMgaW5zdGFuY2VvZiBMKSlyZXR1cm4gbmV3IEwoVSk7QS5j''@;'; put 'put ''YWxsKHRoaXMsVSksdi5jYWxsKHRoaXMsVSksVSYmITE9PT1VLnJlYWRhYmxlJiYodGhpcy5yZWFkYWJsZT0hMSksVSYmITE9PT1VLndyaXRhYmxlJiYodGhpcy53cml0YWJsZT0hMSksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLFUmJiExPT09VS5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hh''@;'; put 'put ''bGZPcGVuPSExKSx0aGlzLm9uY2UoImVuZCIsUil9ZnVuY3Rpb24gUigpe3RoaXMuYWxsb3dIYWxmT3Blbnx8dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8eS5uZXh0VGljayh4LHRoaXMpfWZ1bmN0aW9uIHgoVSl7VS5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoTC5wcm90b3R5cGUs''@;'; put 'put ''IndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTC5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihVKXt2b2lkIDA9PT10aGlzLl9yZWFkYWJsZVN0''@;'; put 'put ''YXRlfHx2b2lkIDA9PT10aGlzLl93cml0YWJsZVN0YXRlfHwodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9VSx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1VKX19KSxMLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihVLEgpe3RoaXMucHVzaChudWxsKSx0aGlzLmVuZCgp''@;'; put 'put ''LHkubmV4dFRpY2soSCxVKX19LDE4MTU4KGZlLGosaCl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9czt2YXIgeT1oKDE1OTcyKSxjPU9iamVjdC5jcmVhdGUoaCgxNTYyMikpO2Z1bmN0aW9uIHMoQSl7aWYoISh0aGlzIGluc3RhbmNlb2YgcykpcmV0dXJuIG5ldyBzKEEpO3kuY2FsbCh0aGlz''@;'; put 'put ''LEEpfWMuaW5oZXJpdHM9aCg1NjY5OCksYy5pbmhlcml0cyhzLHkpLHMucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oQSx2LEMpe0MobnVsbCxBKX19LDMxNzA2KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNjU2MDYpLGM9aCgzMzIyNSk7ZmUuZXhwb3J0cz1yZTt2YXIgQSxz''@;'; put 'put ''PWgoNTk4NjApO3JlLlJlYWRhYmxlU3RhdGU9cSxoKDM3MDA3KTt2YXIgQz1mdW5jdGlvbihhZSx4ZSl7cmV0dXJuIGFlLmxpc3RlbmVycyh4ZSkubGVuZ3RofSx3PWgoNjE2NjcpLFM9aCgyMzM5MikuQnVmZmVyLEw9KHR5cGVvZiBoLmc8InUiP2guZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5k''@;'; put 'put ''b3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxVPU9iamVjdC5jcmVhdGUoaCgxNTYyMikpO1UuaW5oZXJpdHM9aCg1NjY5OCk7dmFyIEg9aCg4NTI0OCksVj12b2lkIDA7Vj1IJiZILmRlYnVnbG9nP0guZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0''@;'; put 'put ''aW9uKCl7fTt2YXIgWSxOPWgoMjY5NzIpLHo9aCgxMDMzMCk7VS5pbmhlcml0cyhyZSx3KTt2YXIgRj1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtmdW5jdGlvbiBxKGFlLHhlKXt2YXIgamU9eGUgaW5zdGFuY2VvZihBPUF8fGgoNTAzMDgpKTt0aGlzLm9i''@;'; put 'put ''amVjdE1vZGU9ISEoYWU9YWV8fHt9KS5vYmplY3RNb2RlLGplJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFhZS5yZWFkYWJsZU9iamVjdE1vZGUpO3ZhciBBZT1hZS5oaWdoV2F0ZXJNYXJrLERlPWFlLnJlYWRhYmxlSGlnaFdhdGVyTWFyazt0aGlzLmhpZ2hXYXRlck1h''@;'; put 'put ''cms9QWV8fDA9PT1BZT9BZTpqZSYmKERlfHwwPT09RGUpP0RlOnRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NCx0aGlzLmhpZ2hXYXRlck1hcms9TWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspLHRoaXMuYnVmZmVyPW5ldyBOLHRoaXMubGVuZ3RoPTAsdGhpcy5waXBlcz1udWxsLHRoaXMu''@;'; put 'put ''cGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0''@;'; put 'put ''aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGluZz1hZS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmF3YWl0RHJhaW49MCx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGVjb2Rlcj1udWxsLHRoaXMuZW5jb2Rpbmc9bnVsbCxh''@;'; put 'put ''ZS5lbmNvZGluZyYmKFl8fChZPWgoNDc0NzkpLkkpLHRoaXMuZGVjb2Rlcj1uZXcgWShhZS5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1hZS5lbmNvZGluZyl9ZnVuY3Rpb24gcmUoYWUpe2lmKEE9QXx8aCg1MDMwOCksISh0aGlzIGluc3RhbmNlb2YgcmUpKXJldHVybiBuZXcgcmUoYWUpO3Ro''@;'; put 'put ''aXMuX3JlYWRhYmxlU3RhdGU9bmV3IHEoYWUsdGhpcyksdGhpcy5yZWFkYWJsZT0hMCxhZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBhZS5yZWFkJiYodGhpcy5fcmVhZD1hZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgYWUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9YWUuZGVzdHJveSkpLHcu''@;'; put 'put ''Y2FsbCh0aGlzKX1mdW5jdGlvbiBtZShhZSx4ZSxqZSxBZSxEZSl7dmFyIGdlLEZlPWFlLl9yZWFkYWJsZVN0YXRlO3JldHVybiBudWxsPT09eGU/KEZlLnJlYWRpbmc9ITEsZnVuY3Rpb24gYihhZSx4ZSl7aWYoIXhlLmVuZGVkKXtpZih4ZS5kZWNvZGVyKXt2YXIgamU9eGUuZGVjb2Rlci5l''@;'; put 'put ''bmQoKTtqZSYmamUubGVuZ3RoJiYoeGUuYnVmZmVyLnB1c2goamUpLHhlLmxlbmd0aCs9eGUub2JqZWN0TW9kZT8xOmplLmxlbmd0aCl9eGUuZW5kZWQ9ITAsayhhZSl9fShhZSxGZSkpOihEZXx8KGdlPWZ1bmN0aW9uIEllKGFlLHhlKXt2YXIgamU7cmV0dXJuIWZ1bmN0aW9uIHgoYWUpe3Jl''@;'; put 'put ''dHVybiBTLmlzQnVmZmVyKGFlKXx8YWUgaW5zdGFuY2VvZiBMfSh4ZSkmJiJzdHJpbmciIT10eXBlb2YgeGUmJnZvaWQgMCE9PXhlJiYhYWUub2JqZWN0TW9kZSYmKGplPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksamV9KEZlLHhlKSksZ2U/YWUu''@;'; put 'put ''ZW1pdCgiZXJyb3IiLGdlKTpGZS5vYmplY3RNb2RlfHx4ZSYmeGUubGVuZ3RoPjA/KCJzdHJpbmciIT10eXBlb2YgeGUmJiFGZS5vYmplY3RNb2RlJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoeGUpIT09Uy5wcm90b3R5cGUmJih4ZT1mdW5jdGlvbiBSKGFlKXtyZXR1cm4gUy5mcm9tKGFlKX0o''@;'; put 'put ''eGUpKSxBZT9GZS5lbmRFbWl0dGVkP2FlLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IikpOkNlKGFlLEZlLHhlLCEwKTpGZS5lbmRlZD9hZS5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpKToo''@;'; put 'put ''RmUucmVhZGluZz0hMSxGZS5kZWNvZGVyJiYhamU/KHhlPUZlLmRlY29kZXIud3JpdGUoeGUpLEZlLm9iamVjdE1vZGV8fDAhPT14ZS5sZW5ndGg/Q2UoYWUsRmUseGUsITEpOkIoYWUsRmUpKTpDZShhZSxGZSx4ZSwhMSkpKTpBZXx8KEZlLnJlYWRpbmc9ITEpKSxmdW5jdGlvbiBrZShhZSl7''@;'; put 'put ''cmV0dXJuIWFlLmVuZGVkJiYoYWUubmVlZFJlYWRhYmxlfHxhZS5sZW5ndGg8YWUuaGlnaFdhdGVyTWFya3x8MD09PWFlLmxlbmd0aCl9KEZlKX1mdW5jdGlvbiBDZShhZSx4ZSxqZSxBZSl7eGUuZmxvd2luZyYmMD09PXhlLmxlbmd0aCYmIXhlLnN5bmM/KGFlLmVtaXQoImRhdGEiLGplKSxh''@;'; put 'put ''ZS5yZWFkKDApKTooeGUubGVuZ3RoKz14ZS5vYmplY3RNb2RlPzE6amUubGVuZ3RoLEFlP3hlLmJ1ZmZlci51bnNoaWZ0KGplKTp4ZS5idWZmZXIucHVzaChqZSkseGUubmVlZFJlYWRhYmxlJiZrKGFlKSksQihhZSx4ZSl9ZnVuY3Rpb24gZihhZSx4ZSl7cmV0dXJuIGFlPD0wfHwwPT09eGUu''@;'; put 'put ''bGVuZ3RoJiZ4ZS5lbmRlZD8wOnhlLm9iamVjdE1vZGU/MTphZSE9YWU/eGUuZmxvd2luZyYmeGUubGVuZ3RoP3hlLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOnhlLmxlbmd0aDooYWU+eGUuaGlnaFdhdGVyTWFyayYmKHhlLmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24gWChhZSl7cmV0dXJuIGFl''@;'; put 'put ''Pj04Mzg4NjA4P2FlPTgzODg2MDg6KGFlLS0sYWV8PWFlPj4+MSxhZXw9YWU+Pj4yLGFlfD1hZT4+PjQsYWV8PWFlPj4+OCxhZXw9YWU+Pj4xNixhZSsrKSxhZX0oYWUpKSxhZTw9eGUubGVuZ3RoP2FlOnhlLmVuZGVkP3hlLmxlbmd0aDooeGUubmVlZFJlYWRhYmxlPSEwLDApKX1mdW5jdGlv''@;'; put 'put ''biBrKGFlKXt2YXIgeGU9YWUuX3JlYWRhYmxlU3RhdGU7eGUubmVlZFJlYWRhYmxlPSExLHhlLmVtaXR0ZWRSZWFkYWJsZXx8KFYoImVtaXRSZWFkYWJsZSIseGUuZmxvd2luZykseGUuZW1pdHRlZFJlYWRhYmxlPSEwLHhlLnN5bmM/Yy5uZXh0VGljayhNLGFlKTpNKGFlKSl9ZnVuY3Rpb24g''@;'; put 'put ''TShhZSl7VigiZW1pdCByZWFkYWJsZSIpLGFlLmVtaXQoInJlYWRhYmxlIiksdWUoYWUpfWZ1bmN0aW9uIEIoYWUseGUpe3hlLnJlYWRpbmdNb3JlfHwoeGUucmVhZGluZ01vcmU9ITAsYy5uZXh0VGljayhLLGFlLHhlKSl9ZnVuY3Rpb24gSyhhZSx4ZSl7Zm9yKHZhciBqZT14ZS5sZW5ndGg7''@;'; put 'put ''IXhlLnJlYWRpbmcmJiF4ZS5mbG93aW5nJiYheGUuZW5kZWQmJnhlLmxlbmd0aDx4ZS5oaWdoV2F0ZXJNYXJrJiYoVigibWF5YmVSZWFkTW9yZSByZWFkIDAiKSxhZS5yZWFkKDApLGplIT09eGUubGVuZ3RoKTspamU9eGUubGVuZ3RoO3hlLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIEQoYWUp''@;'; put 'put ''e1YoInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLGFlLnJlYWQoMCl9ZnVuY3Rpb24gSShhZSx4ZSl7eGUucmVhZGluZ3x8KFYoInJlc3VtZSByZWFkIDAiKSxhZS5yZWFkKDApKSx4ZS5yZXN1bWVTY2hlZHVsZWQ9ITEseGUuYXdhaXREcmFpbj0wLGFlLmVtaXQoInJlc3VtZSIpLHVlKGFl''@;'; put 'put ''KSx4ZS5mbG93aW5nJiYheGUucmVhZGluZyYmYWUucmVhZCgwKX1mdW5jdGlvbiB1ZShhZSl7dmFyIHhlPWFlLl9yZWFkYWJsZVN0YXRlO2ZvcihWKCJmbG93Iix4ZS5mbG93aW5nKTt4ZS5mbG93aW5nJiZudWxsIT09YWUucmVhZCgpOyk7fWZ1bmN0aW9uIG5lKGFlLHhlKXtyZXR1cm4gMD09''@;'; put 'put ''PXhlLmxlbmd0aD9udWxsOih4ZS5vYmplY3RNb2RlP2plPXhlLmJ1ZmZlci5zaGlmdCgpOiFhZXx8YWU+PXhlLmxlbmd0aD8oamU9eGUuZGVjb2Rlcj94ZS5idWZmZXIuam9pbigiIik6MT09PXhlLmJ1ZmZlci5sZW5ndGg/eGUuYnVmZmVyLmhlYWQuZGF0YTp4ZS5idWZmZXIuY29uY2F0KHhl''@;'; put 'put ''Lmxlbmd0aCkseGUuYnVmZmVyLmNsZWFyKCkpOmplPWZ1bmN0aW9uIF9lKGFlLHhlLGplKXt2YXIgQWU7cmV0dXJuIGFlPHhlLmhlYWQuZGF0YS5sZW5ndGg/KEFlPXhlLmhlYWQuZGF0YS5zbGljZSgwLGFlKSx4ZS5oZWFkLmRhdGE9eGUuaGVhZC5kYXRhLnNsaWNlKGFlKSk6QWU9YWU9PT14''@;'; put 'put ''ZS5oZWFkLmRhdGEubGVuZ3RoP3hlLnNoaWZ0KCk6amU/ZnVuY3Rpb24gUGUoYWUseGUpe3ZhciBqZT14ZS5oZWFkLEFlPTEsRGU9amUuZGF0YTtmb3IoYWUtPURlLmxlbmd0aDtqZT1qZS5uZXh0Oyl7dmFyIEZlPWplLmRhdGEsZ2U9YWU+RmUubGVuZ3RoP0ZlLmxlbmd0aDphZTtpZihEZSs9''@;'; put 'put ''Z2U9PT1GZS5sZW5ndGg/RmU6RmUuc2xpY2UoMCxhZSksMD09PShhZS09Z2UpKXtnZT09PUZlLmxlbmd0aD8oKytBZSx4ZS5oZWFkPWplLm5leHQ/amUubmV4dDp4ZS50YWlsPW51bGwpOih4ZS5oZWFkPWplLGplLmRhdGE9RmUuc2xpY2UoZ2UpKTticmVha30rK0FlfXJldHVybiB4ZS5sZW5n''@;'; put 'put ''dGgtPUFlLERlfShhZSx4ZSk6ZnVuY3Rpb24gb3QoYWUseGUpe3ZhciBqZT1TLmFsbG9jVW5zYWZlKGFlKSxBZT14ZS5oZWFkLERlPTE7Zm9yKEFlLmRhdGEuY29weShqZSksYWUtPUFlLmRhdGEubGVuZ3RoO0FlPUFlLm5leHQ7KXt2YXIgRmU9QWUuZGF0YSxnZT1hZT5GZS5sZW5ndGg/RmUu''@;'; put 'put ''bGVuZ3RoOmFlO2lmKEZlLmNvcHkoamUsamUubGVuZ3RoLWFlLDAsZ2UpLDA9PT0oYWUtPWdlKSl7Z2U9PT1GZS5sZW5ndGg/KCsrRGUseGUuaGVhZD1BZS5uZXh0P0FlLm5leHQ6eGUudGFpbD1udWxsKTooeGUuaGVhZD1BZSxBZS5kYXRhPUZlLnNsaWNlKGdlKSk7YnJlYWt9KytEZX1yZXR1''@;'; put 'put ''cm4geGUubGVuZ3RoLT1EZSxqZX0oYWUseGUpLEFlfShhZSx4ZS5idWZmZXIseGUuZGVjb2RlciksamUpO3ZhciBqZX1mdW5jdGlvbiBsdChhZSl7dmFyIHhlPWFlLl9yZWFkYWJsZVN0YXRlO2lmKHhlLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcignImVuZFJlYWRhYmxlKCkiIGNhbGxlZCBv''@;'; put 'put ''biBub24tZW1wdHkgc3RyZWFtJyk7eGUuZW5kRW1pdHRlZHx8KHhlLmVuZGVkPSEwLGMubmV4dFRpY2soZHQseGUsYWUpKX1mdW5jdGlvbiBkdChhZSx4ZSl7IWFlLmVuZEVtaXR0ZWQmJjA9PT1hZS5sZW5ndGgmJihhZS5lbmRFbWl0dGVkPSEwLHhlLnJlYWRhYmxlPSExLHhlLmVtaXQoImVu''@;'; put 'put ''ZCIpKX1mdW5jdGlvbiBSZShhZSx4ZSl7Zm9yKHZhciBqZT0wLEFlPWFlLmxlbmd0aDtqZTxBZTtqZSsrKWlmKGFlW2plXT09PXhlKXJldHVybiBqZTtyZXR1cm4tMX1PYmplY3QuZGVmaW5lUHJvcGVydHkocmUucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''dm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihhZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPWFlKX19KSxyZS5wcm90b3R5cGUuZGVzdHJveT16LmRlc3Ry''@;'; put 'put ''b3kscmUucHJvdG90eXBlLl91bmRlc3Ryb3k9ei51bmRlc3Ryb3kscmUucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGFlLHhlKXt0aGlzLnB1c2gobnVsbCkseGUoYWUpfSxyZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihhZSx4ZSl7dmFyIEFlLGplPXRoaXMuX3JlYWRhYmxlU3RhdGU7''@;'; put 'put ''cmV0dXJuIGplLm9iamVjdE1vZGU/QWU9ITA6InN0cmluZyI9PXR5cGVvZiBhZSYmKCh4ZT14ZXx8amUuZGVmYXVsdEVuY29kaW5nKSE9PWplLmVuY29kaW5nJiYoYWU9Uy5mcm9tKGFlLHhlKSx4ZT0iIiksQWU9ITApLG1lKHRoaXMsYWUseGUsITEsQWUpfSxyZS5wcm90b3R5cGUudW5zaGlm''@;'; put 'put ''dD1mdW5jdGlvbihhZSl7cmV0dXJuIG1lKHRoaXMsYWUsbnVsbCwhMCwhMSl9LHJlLnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxyZS5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24oYWUpe3JldHVybiBZ''@;'; put 'put ''fHwoWT1oKDQ3NDc5KS5JKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9bmV3IFkoYWUpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9YWUsdGhpc30scmUucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oYWUpe1YoInJlYWQiLGFlKSxhZT1wYXJzZUludChhZSwxMCk7dmFyIHhlPXRo''@;'; put 'put ''aXMuX3JlYWRhYmxlU3RhdGUsamU9YWU7aWYoMCE9PWFlJiYoeGUuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09YWUmJnhlLm5lZWRSZWFkYWJsZSYmKHhlLmxlbmd0aD49eGUuaGlnaFdhdGVyTWFya3x8eGUuZW5kZWQpKXJldHVybiBWKCJyZWFkOiBlbWl0UmVhZGFibGUiLHhlLmxlbmd0aCx4''@;'; put 'put ''ZS5lbmRlZCksMD09PXhlLmxlbmd0aCYmeGUuZW5kZWQ/bHQodGhpcyk6ayh0aGlzKSxudWxsO2lmKDA9PT0oYWU9ZihhZSx4ZSkpJiZ4ZS5lbmRlZClyZXR1cm4gMD09PXhlLmxlbmd0aCYmbHQodGhpcyksbnVsbDt2YXIgRGUsQWU9eGUubmVlZFJlYWRhYmxlO3JldHVybiBWKCJuZWVkIHJl''@;'; put 'put ''YWRhYmxlIixBZSksKDA9PT14ZS5sZW5ndGh8fHhlLmxlbmd0aC1hZTx4ZS5oaWdoV2F0ZXJNYXJrKSYmVigibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLEFlPSEwKSx4ZS5lbmRlZHx8eGUucmVhZGluZz9WKCJyZWFkaW5nIG9yIGVuZGVkIixBZT0hMSk6QWUmJihWKCJkbyByZWFkIiks''@;'; put 'put ''eGUucmVhZGluZz0hMCx4ZS5zeW5jPSEwLDA9PT14ZS5sZW5ndGgmJih4ZS5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQoeGUuaGlnaFdhdGVyTWFyaykseGUuc3luYz0hMSx4ZS5yZWFkaW5nfHwoYWU9ZihqZSx4ZSkpKSxudWxsPT09KERlPWFlPjA/bmUoYWUseGUpOm51bGwpPyh4ZS5u''@;'; put 'put ''ZWVkUmVhZGFibGU9ITAsYWU9MCk6eGUubGVuZ3RoLT1hZSwwPT09eGUubGVuZ3RoJiYoeGUuZW5kZWR8fCh4ZS5uZWVkUmVhZGFibGU9ITApLGplIT09YWUmJnhlLmVuZGVkJiZsdCh0aGlzKSksbnVsbCE9PURlJiZ0aGlzLmVtaXQoImRhdGEiLERlKSxEZX0scmUucHJvdG90eXBlLl9yZWFk''@;'; put 'put ''PWZ1bmN0aW9uKGFlKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIl9yZWFkKCkgaXMgbm90IGltcGxlbWVudGVkIikpfSxyZS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihhZSx4ZSl7dmFyIGplPXRoaXMsQWU9dGhpcy5fcmVhZGFibGVTdGF0ZTtzd2l0Y2goQWUucGlwZXNDb3VudCl7''@;'; put 'put ''Y2FzZSAwOkFlLnBpcGVzPWFlO2JyZWFrO2Nhc2UgMTpBZS5waXBlcz1bQWUucGlwZXMsYWVdO2JyZWFrO2RlZmF1bHQ6QWUucGlwZXMucHVzaChhZSl9QWUucGlwZXNDb3VudCs9MSxWKCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLEFlLnBpcGVzQ291bnQseGUpO3ZhciBGZT14ZSYmITE9PT14''@;'; put 'put ''ZS5lbmR8fGFlPT09eS5zdGRvdXR8fGFlPT09eS5zdGRlcnI/R3Q6Y2U7ZnVuY3Rpb24gY2UoKXtWKCJvbmVuZCIpLGFlLmVuZCgpfUFlLmVuZEVtaXR0ZWQ/Yy5uZXh0VGljayhGZSk6amUub25jZSgiZW5kIixGZSksYWUub24oInVucGlwZSIsZnVuY3Rpb24gZ2UoZ3QsWHQpe1YoIm9udW5w''@;'; put 'put ''aXBlIiksZ3Q9PT1qZSYmWHQmJiExPT09WHQuaGFzVW5waXBlZCYmKFh0Lmhhc1VucGlwZWQ9ITAsZnVuY3Rpb24gSmUoKXtWKCJjbGVhbnVwIiksYWUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixSdCksYWUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsTHQpLGFlLnJlbW92ZUxpc3RlbmVyKCJk''@;'; put 'put ''cmFpbiIsaGUpLGFlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsJHQpLGFlLnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLGdlKSxqZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixjZSksamUucmVtb3ZlTGlzdGVuZXIoImVuZCIsR3QpLGplLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixLZSksd2U9ITAsQWUu''@;'; put 'put ''YXdhaXREcmFpbiYmKCFhZS5fd3JpdGFibGVTdGF0ZXx8YWUuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSYmaGUoKX0oKSl9KTt2YXIgaGU9ZnVuY3Rpb24gRyhhZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHhlPWFlLl9yZWFkYWJsZVN0YXRlO1YoInBpcGVPbkRyYWluIix4ZS5hd2FpdERy''@;'; put 'put ''YWluKSx4ZS5hd2FpdERyYWluJiZ4ZS5hd2FpdERyYWluLS0sMD09PXhlLmF3YWl0RHJhaW4mJkMoYWUsImRhdGEiKSYmKHhlLmZsb3dpbmc9ITAsdWUoYWUpKX19KGplKTthZS5vbigiZHJhaW4iLGhlKTt2YXIgd2U9ITEsdHQ9ITE7ZnVuY3Rpb24gS2UoZ3Qpe1YoIm9uZGF0YSIpLHR0PSEx''@;'; put 'put ''LCExPT09YWUud3JpdGUoZ3QpJiYhdHQmJigoMT09PUFlLnBpcGVzQ291bnQmJkFlLnBpcGVzPT09YWV8fEFlLnBpcGVzQ291bnQ+MSYmLTEhPT1SZShBZS5waXBlcyxhZSkpJiYhd2UmJihWKCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLEFlLmF3YWl0RHJhaW4pLEFlLmF3YWl0RHJh''@;'; put 'put ''aW4rKyx0dD0hMCksamUucGF1c2UoKSl9ZnVuY3Rpb24gJHQoZ3Qpe1YoIm9uZXJyb3IiLGd0KSxHdCgpLGFlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsJHQpLDA9PT1DKGFlLCJlcnJvciIpJiZhZS5lbWl0KCJlcnJvciIsZ3QpfWZ1bmN0aW9uIFJ0KCl7YWUucmVtb3ZlTGlzdGVuZXIoImZp''@;'; put 'put ''bmlzaCIsTHQpLEd0KCl9ZnVuY3Rpb24gTHQoKXtWKCJvbmZpbmlzaCIpLGFlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsUnQpLEd0KCl9ZnVuY3Rpb24gR3QoKXtWKCJ1bnBpcGUiKSxqZS51bnBpcGUoYWUpfXJldHVybiBqZS5vbigiZGF0YSIsS2UpLGZ1bmN0aW9uIFcoYWUseGUsamUpe2lm''@;'; put 'put ''KCJmdW5jdGlvbiI9PXR5cGVvZiBhZS5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIGFlLnByZXBlbmRMaXN0ZW5lcih4ZSxqZSk7YWUuX2V2ZW50cyYmYWUuX2V2ZW50c1t4ZV0/cyhhZS5fZXZlbnRzW3hlXSk/YWUuX2V2ZW50c1t4ZV0udW5zaGlmdChqZSk6YWUuX2V2ZW50c1t4ZV09W2plLGFl''@;'; put 'put ''Ll9ldmVudHNbeGVdXTphZS5vbih4ZSxqZSl9KGFlLCJlcnJvciIsJHQpLGFlLm9uY2UoImNsb3NlIixSdCksYWUub25jZSgiZmluaXNoIixMdCksYWUuZW1pdCgicGlwZSIsamUpLEFlLmZsb3dpbmd8fChWKCJwaXBlIHJlc3VtZSIpLGplLnJlc3VtZSgpKSxhZX0scmUucHJvdG90eXBlLnVu''@;'; put 'put ''cGlwZT1mdW5jdGlvbihhZSl7dmFyIHhlPXRoaXMuX3JlYWRhYmxlU3RhdGUsamU9e2hhc1VucGlwZWQ6ITF9O2lmKDA9PT14ZS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT14ZS5waXBlc0NvdW50KXJldHVybiBhZSYmYWUhPT14ZS5waXBlc3x8KGFlfHwoYWU9eGUucGlwZXMpLHhl''@;'; put 'put ''LnBpcGVzPW51bGwseGUucGlwZXNDb3VudD0wLHhlLmZsb3dpbmc9ITEsYWUmJmFlLmVtaXQoInVucGlwZSIsdGhpcyxqZSkpLHRoaXM7aWYoIWFlKXt2YXIgQWU9eGUucGlwZXMsRGU9eGUucGlwZXNDb3VudDt4ZS5waXBlcz1udWxsLHhlLnBpcGVzQ291bnQ9MCx4ZS5mbG93aW5nPSExO2Zv''@;'; put 'put ''cih2YXIgRmU9MDtGZTxEZTtGZSsrKUFlW0ZlXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgZ2U9UmUoeGUucGlwZXMsYWUpO3JldHVybi0xPT09Z2V8fCh4ZS5waXBlcy5zcGxpY2UoZ2UsMSkseGUucGlwZXNDb3VudC09MSwxPT09eGUucGlw''@;'; put 'put ''ZXNDb3VudCYmKHhlLnBpcGVzPXhlLnBpcGVzWzBdKSxhZS5lbWl0KCJ1bnBpcGUiLHRoaXMsamUpKSx0aGlzfSxyZS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9cmUucHJvdG90eXBlLm9uPWZ1bmN0aW9uKGFlLHhlKXt2YXIgamU9dy5wcm90b3R5cGUub24uY2FsbCh0aGlzLGFlLHhlKTtpZigi''@;'; put 'put ''ZGF0YSI9PT1hZSkhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmdGhpcy5yZXN1bWUoKTtlbHNlIGlmKCJyZWFkYWJsZSI9PT1hZSl7dmFyIEFlPXRoaXMuX3JlYWRhYmxlU3RhdGU7IUFlLmVuZEVtaXR0ZWQmJiFBZS5yZWFkYWJsZUxpc3RlbmluZyYmKEFlLnJlYWRhYmxlTGlz''@;'; put 'put ''dGVuaW5nPUFlLm5lZWRSZWFkYWJsZT0hMCxBZS5lbWl0dGVkUmVhZGFibGU9ITEsQWUucmVhZGluZz9BZS5sZW5ndGgmJmsodGhpcyk6Yy5uZXh0VGljayhELHRoaXMpKX1yZXR1cm4gamV9LHJlLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgYWU9dGhpcy5fcmVhZGFibGVTdGF0''@;'; put 'put ''ZTtyZXR1cm4gYWUuZmxvd2luZ3x8KFYoInJlc3VtZSIpLGFlLmZsb3dpbmc9ITAsZnVuY3Rpb24gcChhZSx4ZSl7eGUucmVzdW1lU2NoZWR1bGVkfHwoeGUucmVzdW1lU2NoZWR1bGVkPSEwLGMubmV4dFRpY2soSSxhZSx4ZSkpfSh0aGlzLGFlKSksdGhpc30scmUucHJvdG90eXBlLnBhdXNl''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIFYoImNhbGwgcGF1c2UgZmxvd2luZz0laiIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKFYoInBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdCgicGF1''@;'; put 'put ''c2UiKSksdGhpc30scmUucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oYWUpe3ZhciB4ZT10aGlzLGplPXRoaXMuX3JlYWRhYmxlU3RhdGUsQWU9ITE7Zm9yKHZhciBEZSBpbiBhZS5vbigiZW5kIixmdW5jdGlvbigpe2lmKFYoIndyYXBwZWQgZW5kIiksamUuZGVjb2RlciYmIWplLmVuZGVkKXt2''@;'; put 'put ''YXIgZ2U9amUuZGVjb2Rlci5lbmQoKTtnZSYmZ2UubGVuZ3RoJiZ4ZS5wdXNoKGdlKX14ZS5wdXNoKG51bGwpfSksYWUub24oImRhdGEiLGZ1bmN0aW9uKGdlKXtWKCJ3cmFwcGVkIGRhdGEiKSxqZS5kZWNvZGVyJiYoZ2U9amUuZGVjb2Rlci53cml0ZShnZSkpLGplLm9iamVjdE1vZGUmJm51''@;'; put 'put ''bGw9PWdlfHwhKGplLm9iamVjdE1vZGV8fGdlJiZnZS5sZW5ndGgpfHx4ZS5wdXNoKGdlKXx8KEFlPSEwLGFlLnBhdXNlKCkpfSksYWUpdm9pZCAwPT09dGhpc1tEZV0mJiJmdW5jdGlvbiI9PXR5cGVvZiBhZVtEZV0mJih0aGlzW0RlXT1mdW5jdGlvbihnZSl7cmV0dXJuIGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIGFlW2dlXS5hcHBseShhZSxhcmd1bWVudHMpfX0oRGUpKTtmb3IodmFyIEZlPTA7RmU8Ri5sZW5ndGg7RmUrKylhZS5vbihGW0ZlXSx0aGlzLmVtaXQuYmluZCh0aGlzLEZbRmVdKSk7cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24oZ2Upe1YoIndyYXBwZWQgX3JlYWQiLGdlKSxB''@;'; put 'put ''ZSYmKEFlPSExLGFlLnJlc3VtZSgpKX0sdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlLnByb3RvdHlwZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLHJl''@;'; put 'put ''Ll9mcm9tTGlzdD1uZX0sMTU5NzIoZmUsaixoKXsidXNlIHN0cmljdCI7ZmUuZXhwb3J0cz1BO3ZhciB5PWgoNTAzMDgpLGM9T2JqZWN0LmNyZWF0ZShoKDE1NjIyKSk7ZnVuY3Rpb24gcyh3LFMpe3ZhciBMPXRoaXMuX3RyYW5zZm9ybVN0YXRlO0wudHJhbnNmb3JtaW5nPSExO3ZhciBSPUwu''@;'; put 'put ''d3JpdGVjYjtpZighUilyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJ3cml0ZSBjYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSk7TC53cml0ZWNodW5rPW51bGwsTC53cml0ZWNiPW51bGwsbnVsbCE9UyYmdGhpcy5wdXNoKFMpLFIodyk7dmFyIHg9dGhpcy5fcmVh''@;'; put 'put ''ZGFibGVTdGF0ZTt4LnJlYWRpbmc9ITEsKHgubmVlZFJlYWRhYmxlfHx4Lmxlbmd0aDx4LmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKHguaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gQSh3KXtpZighKHRoaXMgaW5zdGFuY2VvZiBBKSlyZXR1cm4gbmV3IEEodyk7eS5jYWxsKHRoaXMsdyks''@;'; put 'put ''dGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOnMuYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9''@;'; put 'put ''ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLHcmJigiZnVuY3Rpb24iPT10eXBlb2Ygdy50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09dy50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiB3LmZsdXNoJiYodGhpcy5fZmx1c2g9dy5mbHVzaCkpLHRoaXMub24oInByZWZpbmlz''@;'; put 'put ''aCIsdil9ZnVuY3Rpb24gdigpe3ZhciB3PXRoaXM7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX2ZsdXNoP3RoaXMuX2ZsdXNoKGZ1bmN0aW9uKFMsTCl7Qyh3LFMsTCl9KTpDKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBDKHcsUyxMKXtpZihTKXJldHVybiB3LmVtaXQoImVycm9yIixTKTtp''@;'; put 'put ''ZihudWxsIT1MJiZ3LnB1c2goTCksdy5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAiKTtpZih3Ll90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5n''@;'; put 'put ''IHRyYW5zZm9ybSBkb25lIHdoZW4gc3RpbGwgdHJhbnNmb3JtaW5nIik7cmV0dXJuIHcucHVzaChudWxsKX1jLmluaGVyaXRzPWgoNTY2OTgpLGMuaW5oZXJpdHMoQSx5KSxBLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHcsUyl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFu''@;'; put 'put ''c2Zvcm09ITEseS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsdyxTKX0sQS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih3LFMsTCl7dGhyb3cgbmV3IEVycm9yKCJfdHJhbnNmb3JtKCkgaXMgbm90IGltcGxlbWVudGVkIil9LEEucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbih3LFMs''@;'; put 'put ''TCl7dmFyIFI9dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoUi53cml0ZWNiPUwsUi53cml0ZWNodW5rPXcsUi53cml0ZWVuY29kaW5nPVMsIVIudHJhbnNmb3JtaW5nKXt2YXIgeD10aGlzLl9yZWFkYWJsZVN0YXRlOyhSLm5lZWRUcmFuc2Zvcm18fHgubmVlZFJlYWRhYmxlfHx4Lmxlbmd0aDx4''@;'; put 'put ''LmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKHguaGlnaFdhdGVyTWFyayl9fSxBLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbih3KXt2YXIgUz10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsIT09Uy53cml0ZWNodW5rJiZTLndyaXRlY2ImJiFTLnRyYW5zZm9ybWluZz8oUy50cmFuc2Zvcm1p''@;'; put 'put ''bmc9ITAsdGhpcy5fdHJhbnNmb3JtKFMud3JpdGVjaHVuayxTLndyaXRlZW5jb2RpbmcsUy5hZnRlclRyYW5zZm9ybSkpOlMubmVlZFRyYW5zZm9ybT0hMH0sQS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24odyxTKXt2YXIgTD10aGlzO3kucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhp''@;'; put 'put ''cyx3LGZ1bmN0aW9uKFIpe1MoUiksTC5lbWl0KCJjbG9zZSIpfSl9fSwyMzk4KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNjU2MDYpLGM9aCgzMzIyNSk7ZnVuY3Rpb24gQShwKXt2YXIgST10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5j''@;'; put 'put ''dGlvbigpeyFmdW5jdGlvbiBEKHAsSSx1ZSl7dmFyIG5lPXAuZW50cnk7Zm9yKHAuZW50cnk9bnVsbDtuZTspe3ZhciBfZT1uZS5jYWxsYmFjaztJLnBlbmRpbmdjYi0tLF9lKHVlKSxuZT1uZS5uZXh0fUkuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9cH0oSSxwKX19ZmUuZXhwb3J0cz1GO3Zh''@;'; put 'put ''ciBDLHY9IXkuYnJvd3NlciYmWyJ2MC4xMCIsInYwLjkuIl0uaW5kZXhPZih5LnZlcnNpb24uc2xpY2UoMCw1KSk+LTE/c2V0SW1tZWRpYXRlOmMubmV4dFRpY2s7Ri5Xcml0YWJsZVN0YXRlPXo7dmFyIHc9T2JqZWN0LmNyZWF0ZShoKDE1NjIyKSk7dy5pbmhlcml0cz1oKDU2Njk4KTt2YXIg''@;'; put 'put ''WSxTPXtkZXByZWNhdGU6aCg5NDY0Myl9LEw9aCg2MTY2NyksUj1oKDIzMzkyKS5CdWZmZXIseD0odHlwZW9mIGguZzwidSI/aC5nOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LFY9aCgxMDMzMCk7ZnVu''@;'; put 'put ''Y3Rpb24gTigpe31mdW5jdGlvbiB6KHAsSSl7Qz1DfHxoKDUwMzA4KTt2YXIgdWU9SSBpbnN0YW5jZW9mIEM7dGhpcy5vYmplY3RNb2RlPSEhKHA9cHx8e30pLm9iamVjdE1vZGUsdWUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIXAud3JpdGFibGVPYmplY3RNb2RlKTt2''@;'; put 'put ''YXIgbmU9cC5oaWdoV2F0ZXJNYXJrLF9lPXAud3JpdGFibGVIaWdoV2F0ZXJNYXJrO3RoaXMuaGlnaFdhdGVyTWFyaz1uZXx8MD09PW5lP25lOnVlJiYoX2V8fDA9PT1fZSk/X2U6dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0LHRoaXMuaGlnaFdhdGVyTWFyaz1NYXRoLmZsb29yKHRoaXMuaGln''@;'; put 'put ''aFdhdGVyTWFyayksdGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWNvZGVTdHJpbmdzPSEoITE9PT1wLmRlY29kZVN0cmluZ3MpLHRoaXMuZGVm''@;'; put 'put ''YXVsdEVuY29kaW5nPXAuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5sZW5ndGg9MCx0aGlzLndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5bmM9ITAsdGhpcy5idWZmZXJQcm9jZXNzaW5nPSExLHRoaXMub253cml0ZT1mdW5jdGlvbihsdCl7IWZ1bmN0aW9uIHFlKHAsSSl7''@;'; put 'put ''dmFyIHVlPXAuX3dyaXRhYmxlU3RhdGUsbmU9dWUuc3luYyxfZT11ZS53cml0ZWNiO2lmKGZ1bmN0aW9uIGtlKHApe3Aud3JpdGluZz0hMSxwLndyaXRlY2I9bnVsbCxwLmxlbmd0aC09cC53cml0ZWxlbixwLndyaXRlbGVuPTB9KHVlKSxJKSFmdW5jdGlvbiBJZShwLEksdWUsbmUsX2Upey0t''@;'; put 'put ''SS5wZW5kaW5nY2IsdWU/KGMubmV4dFRpY2soX2UsbmUpLGMubmV4dFRpY2soSyxwLEkpLHAuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHAuZW1pdCgiZXJyb3IiLG5lKSk6KF9lKG5lKSxwLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxwLmVtaXQoImVycm9yIixuZSks''@;'; put 'put ''SyhwLEkpKX0ocCx1ZSxuZSxJLF9lKTtlbHNle3ZhciBQZT1rKHVlKTshUGUmJiF1ZS5jb3JrZWQmJiF1ZS5idWZmZXJQcm9jZXNzaW5nJiZ1ZS5idWZmZXJlZFJlcXVlc3QmJmIocCx1ZSksbmU/dihYLHAsdWUsUGUsX2UpOlgocCx1ZSxQZSxfZSl9fShJLGx0KX0sdGhpcy53cml0ZWNiPW51''@;'; put 'put ''bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5wZW5kaW5nY2I9MCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlz''@;'; put 'put ''LmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgQSh0aGlzKX1mdW5jdGlvbiBGKHApe2lmKEM9Q3x8aCg1MDMwOCksIShZLmNhbGwoRix0aGlzKXx8dGhpcyBpbnN0YW5jZW9mIEMpKXJldHVybiBuZXcgRihwKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyB6KHAsdGhpcyksdGhpcy53cml0YWJsZT0h''@;'; put 'put ''MCxwJiYoImZ1bmN0aW9uIj09dHlwZW9mIHAud3JpdGUmJih0aGlzLl93cml0ZT1wLndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgcC53cml0ZXYmJih0aGlzLl93cml0ZXY9cC53cml0ZXYpLCJmdW5jdGlvbiI9PXR5cGVvZiBwLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PXAuZGVzdHJveSks''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIHAuZmluYWwmJih0aGlzLl9maW5hbD1wLmZpbmFsKSksTC5jYWxsKHRoaXMpfWZ1bmN0aW9uIENlKHAsSSx1ZSxuZSxfZSxQZSxvdCl7SS53cml0ZWxlbj1uZSxJLndyaXRlY2I9b3QsSS53cml0aW5nPSEwLEkuc3luYz0hMCx1ZT9wLl93cml0ZXYoX2UsSS5v''@;'; put 'put ''bndyaXRlKTpwLl93cml0ZShfZSxQZSxJLm9ud3JpdGUpLEkuc3luYz0hMX1mdW5jdGlvbiBYKHAsSSx1ZSxuZSl7dWV8fGZ1bmN0aW9uIGYocCxJKXswPT09SS5sZW5ndGgmJkkubmVlZERyYWluJiYoSS5uZWVkRHJhaW49ITEscC5lbWl0KCJkcmFpbiIpKX0ocCxJKSxJLnBlbmRpbmdjYi0t''@;'; put 'put ''LG5lKCksSyhwLEkpfWZ1bmN0aW9uIGIocCxJKXtJLmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIHVlPUkuYnVmZmVyZWRSZXF1ZXN0O2lmKHAuX3dyaXRldiYmdWUmJnVlLm5leHQpe3ZhciBfZT1uZXcgQXJyYXkoSS5idWZmZXJlZFJlcXVlc3RDb3VudCksUGU9SS5jb3JrZWRSZXF1ZXN0c0Zy''@;'; put 'put ''ZWU7UGUuZW50cnk9dWU7Zm9yKHZhciBvdD0wLGx0PSEwO3VlOylfZVtvdF09dWUsdWUuaXNCdWZ8fChsdD0hMSksdWU9dWUubmV4dCxvdCs9MTtfZS5hbGxCdWZmZXJzPWx0LENlKHAsSSwhMCxJLmxlbmd0aCxfZSwiIixQZS5maW5pc2gpLEkucGVuZGluZ2NiKyssSS5sYXN0QnVmZmVyZWRS''@;'; put 'put ''ZXF1ZXN0PW51bGwsUGUubmV4dD8oSS5jb3JrZWRSZXF1ZXN0c0ZyZWU9UGUubmV4dCxQZS5uZXh0PW51bGwpOkkuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBBKEkpLEkuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MH1lbHNle2Zvcig7dWU7KXt2YXIgZHQ9dWUuY2h1bms7aWYoQ2UocCxJLCExLEku''@;'; put 'put ''b2JqZWN0TW9kZT8xOmR0Lmxlbmd0aCxkdCx1ZS5lbmNvZGluZyx1ZS5jYWxsYmFjayksdWU9dWUubmV4dCxJLmJ1ZmZlcmVkUmVxdWVzdENvdW50LS0sSS53cml0aW5nKWJyZWFrfW51bGw9PT11ZSYmKEkubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX1JLmJ1ZmZlcmVkUmVxdWVzdD11ZSxJ''@;'; put 'put ''LmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gayhwKXtyZXR1cm4gcC5lbmRpbmcmJjA9PT1wLmxlbmd0aCYmbnVsbD09PXAuYnVmZmVyZWRSZXF1ZXN0JiYhcC5maW5pc2hlZCYmIXAud3JpdGluZ31mdW5jdGlvbiBNKHAsSSl7cC5fZmluYWwoZnVuY3Rpb24odWUpe0kucGVuZGluZ2Ni''@;'; put 'put ''LS0sdWUmJnAuZW1pdCgiZXJyb3IiLHVlKSxJLnByZWZpbmlzaGVkPSEwLHAuZW1pdCgicHJlZmluaXNoIiksSyhwLEkpfSl9ZnVuY3Rpb24gSyhwLEkpe3ZhciB1ZT1rKEkpO3JldHVybiB1ZSYmKGZ1bmN0aW9uIEIocCxJKXshSS5wcmVmaW5pc2hlZCYmIUkuZmluYWxDYWxsZWQmJigiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgcC5fZmluYWw/KEkucGVuZGluZ2NiKyssSS5maW5hbENhbGxlZD0hMCxjLm5leHRUaWNrKE0scCxJKSk6KEkucHJlZmluaXNoZWQ9ITAscC5lbWl0KCJwcmVmaW5pc2giKSkpfShwLEkpLDA9PT1JLnBlbmRpbmdjYiYmKEkuZmluaXNoZWQ9ITAscC5lbWl0KCJmaW5p''@;'; put 'put ''c2giKSkpLHVlfXcuaW5oZXJpdHMoRixMKSx6LnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIEk9dGhpcy5idWZmZXJlZFJlcXVlc3QsdWU9W107STspdWUucHVzaChJKSxJPUkubmV4dDtyZXR1cm4gdWV9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eSh6LnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0OlMuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0p''@;'; put 'put ''fWNhdGNoe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KFk9RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0sT2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KEYsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbihwKXtyZXR1cm4hIVkuY2FsbCh0aGlzLHApfHx0aGlzPT09RiYmcCYmcC5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIHp9fSkpOlk9ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB0aGlz''@;'; put 'put ''fSxGLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7dGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlIikpfSxGLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihwLEksdWUpe3ZhciBuZT10aGlzLl93cml0YWJsZVN0YXRlLF9lPSExLFBlPSFuZS5v''@;'; put 'put ''YmplY3RNb2RlJiZmdW5jdGlvbiBIKHApe3JldHVybiBSLmlzQnVmZmVyKHApfHxwIGluc3RhbmNlb2YgeH0ocCk7cmV0dXJuIFBlJiYhUi5pc0J1ZmZlcihwKSYmKHA9ZnVuY3Rpb24gVShwKXtyZXR1cm4gUi5mcm9tKHApfShwKSksImZ1bmN0aW9uIj09dHlwZW9mIEkmJih1ZT1JLEk9bnVs''@;'; put 'put ''bCksUGU/ST0iYnVmZmVyIjpJfHwoST1uZS5kZWZhdWx0RW5jb2RpbmcpLCJmdW5jdGlvbiIhPXR5cGVvZiB1ZSYmKHVlPU4pLG5lLmVuZGVkP2Z1bmN0aW9uIFcocCxJKXt2YXIgdWU9bmV3IEVycm9yKCJ3cml0ZSBhZnRlciBlbmQiKTtwLmVtaXQoImVycm9yIix1ZSksYy5uZXh0VGljayhJ''@;'; put 'put ''LHVlKX0odGhpcyx1ZSk6KFBlfHxmdW5jdGlvbiBxKHAsSSx1ZSxuZSl7dmFyIF9lPSEwLFBlPSExO3JldHVybiBudWxsPT09dWU/UGU9bmV3IFR5cGVFcnJvcigiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iKToic3RyaW5nIiE9dHlwZW9mIHVlJiZ2b2lkIDAhPT11ZSYm''@;'; put 'put ''IUkub2JqZWN0TW9kZSYmKFBlPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksUGUmJihwLmVtaXQoImVycm9yIixQZSksYy5uZXh0VGljayhuZSxQZSksX2U9ITEpLF9lfSh0aGlzLG5lLHAsdWUpKSYmKG5lLnBlbmRpbmdjYisrLF9lPWZ1bmN0aW9u''@;'; put 'put ''IG1lKHAsSSx1ZSxuZSxfZSxQZSl7aWYoIXVlKXt2YXIgb3Q9ZnVuY3Rpb24gcmUocCxJLHVlKXtyZXR1cm4hcC5vYmplY3RNb2RlJiYhMSE9PXAuZGVjb2RlU3RyaW5ncyYmInN0cmluZyI9PXR5cGVvZiBJJiYoST1SLmZyb20oSSx1ZSkpLEl9KEksbmUsX2UpO25lIT09b3QmJih1ZT0hMCxf''@;'; put 'put ''ZT0iYnVmZmVyIixuZT1vdCl9dmFyIGx0PUkub2JqZWN0TW9kZT8xOm5lLmxlbmd0aDtJLmxlbmd0aCs9bHQ7dmFyIGR0PUkubGVuZ3RoPEkuaGlnaFdhdGVyTWFyaztpZihkdHx8KEkubmVlZERyYWluPSEwKSxJLndyaXRpbmd8fEkuY29ya2VkKXt2YXIgUmU9SS5sYXN0QnVmZmVyZWRSZXF1''@;'; put 'put ''ZXN0O0kubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6bmUsZW5jb2Rpbmc6X2UsaXNCdWY6dWUsY2FsbGJhY2s6UGUsbmV4dDpudWxsfSxSZT9SZS5uZXh0PUkubGFzdEJ1ZmZlcmVkUmVxdWVzdDpJLmJ1ZmZlcmVkUmVxdWVzdD1JLmxhc3RCdWZmZXJlZFJlcXVlc3QsSS5idWZmZXJlZFJl''@;'; put 'put ''cXVlc3RDb3VudCs9MX1lbHNlIENlKHAsSSwhMSxsdCxuZSxfZSxQZSk7cmV0dXJuIGR0fSh0aGlzLG5lLFBlLHAsSSx1ZSkpLF9lfSxGLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sRi5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIHA9dGhpcy5fd3JpdGFibGVTdGF0ZTtwLmNvcmtlZCYmKHAuY29ya2VkLS0sIXAud3JpdGluZyYmIXAuY29ya2VkJiYhcC5idWZmZXJQcm9jZXNzaW5nJiZwLmJ1ZmZlcmVkUmVxdWVzdCYmYih0aGlzLHApKX0sRi5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKEkp''@;'; put 'put ''e2lmKCJzdHJpbmciPT10eXBlb2YgSSYmKEk9SS50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKChJKyIiKS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''KT4tMSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitJKTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9SSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1l''@;'; put 'put ''cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxGLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24ocCxJLHVlKXt1ZShuZXcgRXJyb3IoIl93cml0ZSgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpKX0sRi5wcm90b3R5cGUuX3dy''@;'; put 'put ''aXRldj1udWxsLEYucHJvdG90eXBlLmVuZD1mdW5jdGlvbihwLEksdWUpe3ZhciBuZT10aGlzLl93cml0YWJsZVN0YXRlOyJmdW5jdGlvbiI9PXR5cGVvZiBwPyh1ZT1wLHA9bnVsbCxJPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiBJJiYodWU9SSxJPW51bGwpLG51bGwhPXAmJnRoaXMud3Jp''@;'; put 'put ''dGUocCxJKSxuZS5jb3JrZWQmJihuZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxuZS5lbmRpbmd8fGZ1bmN0aW9uIEcocCxJLHVlKXtJLmVuZGluZz0hMCxLKHAsSSksdWUmJihJLmZpbmlzaGVkP2MubmV4dFRpY2sodWUpOnAub25jZSgiZmluaXNoIix1ZSkpLEkuZW5kZWQ9ITAscC53cml0''@;'; put 'put ''YWJsZT0hMX0odGhpcyxuZSx1ZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24o''@;'; put 'put ''cCl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPXApfX0pLEYucHJvdG90eXBlLmRlc3Ryb3k9Vi5kZXN0cm95LEYucHJvdG90eXBlLl91bmRlc3Ryb3k9Vi51bmRlc3Ryb3ksRi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24ocCxJKXt0aGlz''@;'; put 'put ''LmVuZCgpLEkocCl9fSwyNjk3MihmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz1oKDIzMzkyKS5CdWZmZXIscz1oKDM1Mzk0KTtmdW5jdGlvbiBBKHYsQyx3KXt2LmNvcHkoQyx3KX1mZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdigpeyhmdW5jdGlvbiB5KHYsQyl7aWYoISh2IGlu''@;'; put 'put ''c3RhbmNlb2YgQykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLHYpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cmV0dXJuIHYucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odyl7dmFyIFM9''@;'; put 'put ''e2RhdGE6dyxuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9Uzp0aGlzLmhlYWQ9Uyx0aGlzLnRhaWw9UywrK3RoaXMubGVuZ3RofSx2LnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKHcpe3ZhciBTPXtkYXRhOncsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0''@;'; put 'put ''aCYmKHRoaXMudGFpbD1TKSx0aGlzLmhlYWQ9UywrK3RoaXMubGVuZ3RofSx2LnByb3RvdHlwZS5zaGlmdD1mdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIHc9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMuaGVhZD0xPT09dGhpcy5sZW5ndGg/dGhpcy50YWlsPW51bGw6dGhp''@;'; put 'put ''cy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCx3fX0sdi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH0sdi5wcm90b3R5cGUuam9pbj1mdW5jdGlvbih3KXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBT''@;'; put 'put ''PXRoaXMuaGVhZCxMPSIiK1MuZGF0YTtTPVMubmV4dDspTCs9dytTLmRhdGE7cmV0dXJuIEx9LHYucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbih3KXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIGMuYWxsb2MoMCk7Zm9yKHZhciBTPWMuYWxsb2NVbnNhZmUodz4+PjApLEw9dGhpcy5oZWFk''@;'; put 'put ''LFI9MDtMOylBKEwuZGF0YSxTLFIpLFIrPUwuZGF0YS5sZW5ndGgsTD1MLm5leHQ7cmV0dXJuIFN9LHZ9KCkscyYmcy5pbnNwZWN0JiZzLmluc3BlY3QuY3VzdG9tJiYoZmUuZXhwb3J0cy5wcm90b3R5cGVbcy5pbnNwZWN0LmN1c3RvbV09ZnVuY3Rpb24oKXt2YXIgdj1zLmluc3BlY3Qoe2xl''@;'; put 'put ''bmd0aDp0aGlzLmxlbmd0aH0pO3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUrIiAiK3Z9KX0sMTAzMzAoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCgzMzIyNSk7ZnVuY3Rpb24gQSh2LEMpe3YuZW1pdCgiZXJyb3IiLEMpfWZlLmV4cG9ydHM9e2Rlc3Ryb3k6ZnVuY3Rpb24gYyh2''@;'; put 'put ''LEMpe3ZhciB3PXRoaXM7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfHx0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD8oQz9DKHYpOnYmJih0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dy''@;'; put 'put ''aXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAseS5uZXh0VGljayhBLHRoaXMsdikpOnkubmV4dFRpY2soQSx0aGlzLHYpKSx0aGlzKToodGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVk''@;'; put 'put ''PSEwKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX2Rlc3Ryb3kodnx8bnVsbCxmdW5jdGlvbihSKXshQyYmUj93Ll93cml0YWJsZVN0YXRlP3cuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwody5fd3JpdGFibGVTdGF0''@;'; put 'put ''ZS5lcnJvckVtaXR0ZWQ9ITAseS5uZXh0VGljayhBLHcsUikpOnkubmV4dFRpY2soQSx3LFIpOkMmJkMoUil9KSx0aGlzKX0sdW5kZXN0cm95OmZ1bmN0aW9uIHMoKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fcmVhZGFibGVT''@;'; put 'put ''dGF0ZS5yZWFkaW5nPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSExKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMSx0''@;'; put 'put ''aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZz0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUucHJlZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0h''@;'; put 'put ''MSl9fX0sNjE2NjcoZmUsaixoKXtmZS5leHBvcnRzPWgoMzcwMDcpLkV2ZW50RW1pdHRlcn0sMjMzOTIoZmUsaixoKXt2YXIgeT1oKDQ4Mjg3KSxjPXkuQnVmZmVyO2Z1bmN0aW9uIHModixDKXtmb3IodmFyIHcgaW4gdilDW3ddPXZbd119ZnVuY3Rpb24gQSh2LEMsdyl7cmV0dXJuIGModixD''@;'; put 'put ''LHcpfWMuZnJvbSYmYy5hbGxvYyYmYy5hbGxvY1Vuc2FmZSYmYy5hbGxvY1Vuc2FmZVNsb3c/ZmUuZXhwb3J0cz15OihzKHksaiksai5CdWZmZXI9QSkscyhjLEEpLEEuZnJvbT1mdW5jdGlvbih2LEMsdyl7aWYoIm51bWJlciI9PXR5cGVvZiB2KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3Vt''@;'; put 'put ''ZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIGModixDLHcpfSxBLmFsbG9jPWZ1bmN0aW9uKHYsQyx3KXtpZigibnVtYmVyIiE9dHlwZW9mIHYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBTPWModik7cmV0dXJuIHZvaWQgMCE9''@;'; put 'put ''PUM/InN0cmluZyI9PXR5cGVvZiB3P1MuZmlsbChDLHcpOlMuZmlsbChDKTpTLmZpbGwoMCksU30sQS5hbGxvY1Vuc2FmZT1mdW5jdGlvbih2KXtpZigibnVtYmVyIiE9dHlwZW9mIHYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBjKHYp''@;'; put 'put ''fSxBLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih2KXtpZigibnVtYmVyIiE9dHlwZW9mIHYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiB5LlNsb3dCdWZmZXIodil9fSwxMTA3NyhmZSxqLGgpeyhqPWZlLmV4cG9ydHM9aCgzMTcwNikp''@;'; put 'put ''LlN0cmVhbT1qLGouUmVhZGFibGU9aixqLldyaXRhYmxlPWgoMjM5OCksai5EdXBsZXg9aCg1MDMwOCksai5UcmFuc2Zvcm09aCgxNTk3Miksai5QYXNzVGhyb3VnaD1oKDE4MTU4KX0sNDc0NzkoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCgzNjIyOSkuQnVmZmVyLGM9eS5pc0VuY29k''@;'; put 'put ''aW5nfHxmdW5jdGlvbihGKXtzd2l0Y2goKEY9IiIrRikmJkYudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1''@;'; put 'put ''dGYtMTZsZSI6Y2FzZSJyYXciOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtmdW5jdGlvbiB2KEYpe3ZhciBXO3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uIEEoRil7dmFyIFc9ZnVuY3Rpb24gcyhGKXtpZighRilyZXR1cm4idXRmOCI7Zm9yKHZhciBXOzspc3dpdGNoKEYpe2Nh''@;'; put 'put ''c2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuInV0ZjgiO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4idXRmMTZsZSI7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4ibGF0aW4xIjtjYXNlImJhc2U2NCI6Y2FzZSJhc2Np''@;'; put 'put ''aSI6Y2FzZSJoZXgiOnJldHVybiBGO2RlZmF1bHQ6aWYoVylyZXR1cm47Rj0oIiIrRikudG9Mb3dlckNhc2UoKSxXPSEwfX0oRik7aWYoInN0cmluZyIhPXR5cGVvZiBXJiYoeS5pc0VuY29kaW5nPT09Y3x8IWMoRikpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitGKTty''@;'; put 'put ''ZXR1cm4gV3x8Rn0oRiksdGhpcy5lbmNvZGluZyl7Y2FzZSJ1dGYxNmxlIjp0aGlzLnRleHQ9VSx0aGlzLmVuZD1ILFc9NDticmVhaztjYXNlInV0ZjgiOnRoaXMuZmlsbExhc3Q9TCxXPTQ7YnJlYWs7Y2FzZSJiYXNlNjQiOnRoaXMudGV4dD1WLHRoaXMuZW5kPU4sVz0zO2JyZWFrO2RlZmF1''@;'; put 'put ''bHQ6cmV0dXJuIHRoaXMud3JpdGU9eix2b2lkKHRoaXMuZW5kPVkpfXRoaXMubGFzdE5lZWQ9MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9eS5hbGxvY1Vuc2FmZShXKX1mdW5jdGlvbiBDKEYpe3JldHVybiBGPD0xMjc/MDpGPj41PT02PzI6Rj4+ND09MTQ/MzpGPj4zPT0zMD80''@;'; put 'put ''OkY+PjY9PTI/LTE6LTJ9ZnVuY3Rpb24gTChGKXt2YXIgVz10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLHE9ZnVuY3Rpb24gUyhGLFcpe2lmKDEyOCE9KDE5MiZXWzBdKSlyZXR1cm4gRi5sYXN0TmVlZD0wLCJcdWZmZmQiO2lmKEYubGFzdE5lZWQ+MSYmVy5sZW5ndGg+MSl7aWYoMTI4''@;'; put 'put ''IT0oMTkyJldbMV0pKXJldHVybiBGLmxhc3ROZWVkPTEsIlx1ZmZmZCI7aWYoRi5sYXN0TmVlZD4yJiZXLmxlbmd0aD4yJiYxMjghPSgxOTImV1syXSkpcmV0dXJuIEYubGFzdE5lZWQ9MiwiXHVmZmZkIn19KHRoaXMsRik7cmV0dXJuIHZvaWQgMCE9PXE/cTp0aGlzLmxhc3ROZWVkPD1GLmxl''@;'; put 'put ''bmd0aD8oRi5jb3B5KHRoaXMubGFzdENoYXIsVywwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKSk6KEYuY29weSh0aGlzLmxhc3RDaGFyLFcsMCxGLmxlbmd0aCksdm9pZCh0aGlzLmxhc3ROZWVkLT1GLmxlbmd0''@;'; put 'put ''aCkpfWZ1bmN0aW9uIFUoRixXKXtpZigoRi5sZW5ndGgtVyklMj09MCl7dmFyIHE9Ri50b1N0cmluZygidXRmMTZsZSIsVyk7aWYocSl7dmFyIHJlPXEuY2hhckNvZGVBdChxLmxlbmd0aC0xKTtpZihyZT49NTUyOTYmJnJlPD01NjMxOSlyZXR1cm4gdGhpcy5sYXN0TmVlZD0yLHRoaXMubGFz''@;'; put 'put ''dFRvdGFsPTQsdGhpcy5sYXN0Q2hhclswXT1GW0YubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09RltGLmxlbmd0aC0xXSxxLnNsaWNlKDAsLTEpfXJldHVybiBxfXJldHVybiB0aGlzLmxhc3ROZWVkPTEsdGhpcy5sYXN0VG90YWw9Mix0aGlzLmxhc3RDaGFyWzBdPUZbRi5sZW5ndGgtMV0s''@;'; put 'put ''Ri50b1N0cmluZygidXRmMTZsZSIsVyxGLmxlbmd0aC0xKX1mdW5jdGlvbiBIKEYpe3ZhciBXPUYmJkYubGVuZ3RoP3RoaXMud3JpdGUoRik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/Vyt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJ1dGYxNmxlIiwwLHRoaXMubGFzdFRvdGFsLXRoaXMubGFz''@;'; put 'put ''dE5lZWQpOld9ZnVuY3Rpb24gVihGLFcpe3ZhciBxPShGLmxlbmd0aC1XKSUzO3JldHVybiAwPT09cT9GLnRvU3RyaW5nKCJiYXNlNjQiLFcpOih0aGlzLmxhc3ROZWVkPTMtcSx0aGlzLmxhc3RUb3RhbD0zLDE9PT1xP3RoaXMubGFzdENoYXJbMF09RltGLmxlbmd0aC0xXToodGhpcy5sYXN0''@;'; put 'put ''Q2hhclswXT1GW0YubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09RltGLmxlbmd0aC0xXSksRi50b1N0cmluZygiYmFzZTY0IixXLEYubGVuZ3RoLXEpKX1mdW5jdGlvbiBOKEYpe3ZhciBXPUYmJkYubGVuZ3RoP3RoaXMud3JpdGUoRik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/Vyt0aGlz''@;'; put 'put ''Lmxhc3RDaGFyLnRvU3RyaW5nKCJiYXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTpXfWZ1bmN0aW9uIHooRil7cmV0dXJuIEYudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gWShGKXtyZXR1cm4gRiYmRi5sZW5ndGg/dGhpcy53cml0ZShGKToiIn1qLkk9dix2LnByb3RvdHlwZS53''@;'; put 'put ''cml0ZT1mdW5jdGlvbihGKXtpZigwPT09Ri5sZW5ndGgpcmV0dXJuIiI7dmFyIFcscTtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0oVz10aGlzLmZpbGxMYXN0KEYpKSlyZXR1cm4iIjtxPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2UgcT0wO3JldHVybiBxPEYubGVu''@;'; put 'put ''Z3RoP1c/Vyt0aGlzLnRleHQoRixxKTp0aGlzLnRleHQoRixxKTpXfHwiIn0sdi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uIHgoRil7dmFyIFc9RiYmRi5sZW5ndGg/dGhpcy53cml0ZShGKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9XKyJcdWZmZmQiOld9LHYucHJvdG90eXBlLnRleHQ9ZnVu''@;'; put 'put ''Y3Rpb24gUihGLFcpe3ZhciBxPWZ1bmN0aW9uIHcoRixXLHEpe3ZhciByZT1XLmxlbmd0aC0xO2lmKHJlPHEpcmV0dXJuIDA7dmFyIG1lPUMoV1tyZV0pO3JldHVybiBtZT49MD8obWU+MCYmKEYubGFzdE5lZWQ9bWUtMSksbWUpOi0tcmU8cXx8LTI9PT1tZT8wOihtZT1DKFdbcmVdKSk+PTA/''@;'; put 'put ''KG1lPjAmJihGLmxhc3ROZWVkPW1lLTIpLG1lKTotLXJlPHF8fC0yPT09bWU/MDoobWU9QyhXW3JlXSkpPj0wPyhtZT4wJiYoMj09PW1lP21lPTA6Ri5sYXN0TmVlZD1tZS0zKSxtZSk6MH0odGhpcyxGLFcpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVybiBGLnRvU3RyaW5nKCJ1dGY4IixXKTt0''@;'; put 'put ''aGlzLmxhc3RUb3RhbD1xO3ZhciByZT1GLmxlbmd0aC0ocS10aGlzLmxhc3ROZWVkKTtyZXR1cm4gRi5jb3B5KHRoaXMubGFzdENoYXIsMCxyZSksRi50b1N0cmluZygidXRmOCIsVyxyZSl9LHYucHJvdG90eXBlLmZpbGxMYXN0PWZ1bmN0aW9uKEYpe2lmKHRoaXMubGFzdE5lZWQ8PUYubGVu''@;'; put 'put ''Z3RoKXJldHVybiBGLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpO0YuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRv''@;'; put 'put ''dGFsLXRoaXMubGFzdE5lZWQsMCxGLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09Ri5sZW5ndGh9fSwzNjIyOShmZSxqLGgpe3ZhciB5PWgoNDgyODcpLGM9eS5CdWZmZXI7ZnVuY3Rpb24gcyh2LEMpe2Zvcih2YXIgdyBpbiB2KUNbd109dlt3XX1mdW5jdGlvbiBBKHYsQyx3KXtyZXR1cm4gYyh2''@;'; put 'put ''LEMsdyl9Yy5mcm9tJiZjLmFsbG9jJiZjLmFsbG9jVW5zYWZlJiZjLmFsbG9jVW5zYWZlU2xvdz9mZS5leHBvcnRzPXk6KHMoeSxqKSxqLkJ1ZmZlcj1BKSxzKGMsQSksQS5mcm9tPWZ1bmN0aW9uKHYsQyx3KXtpZigibnVtYmVyIj09dHlwZW9mIHYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJn''@;'; put 'put ''dW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gYyh2LEMsdyl9LEEuYWxsb2M9ZnVuY3Rpb24odixDLHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIFM9Yyh2KTtyZXR1cm4gdm9pZCAw''@;'; put 'put ''IT09Qz8ic3RyaW5nIj09dHlwZW9mIHc/Uy5maWxsKEMsdyk6Uy5maWxsKEMpOlMuZmlsbCgwKSxTfSxBLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHYpe2lmKCJudW1iZXIiIT10eXBlb2Ygdil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIGMo''@;'; put 'put ''dil9LEEuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHYpe2lmKCJudW1iZXIiIT10eXBlb2Ygdil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIHkuU2xvd0J1ZmZlcih2KX19LDkyODYxKGZlLGosaCl7dmFyIHk9aCg0ODI4NyksYz15LkJ1''@;'; put 'put ''ZmZlcjtmdW5jdGlvbiBzKHYsQyl7Zm9yKHZhciB3IGluIHYpQ1t3XT12W3ddfWZ1bmN0aW9uIEEodixDLHcpe3JldHVybiBjKHYsQyx3KX1jLmZyb20mJmMuYWxsb2MmJmMuYWxsb2NVbnNhZmUmJmMuYWxsb2NVbnNhZmVTbG93P2ZlLmV4cG9ydHM9eToocyh5LGopLGouQnVmZmVyPUEpLEEu''@;'; put 'put ''cHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYy5wcm90b3R5cGUpLHMoYyxBKSxBLmZyb209ZnVuY3Rpb24odixDLHcpe2lmKCJudW1iZXIiPT10eXBlb2Ygdil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBjKHYsQyx3KX0sQS5hbGxv''@;'; put 'put ''Yz1mdW5jdGlvbih2LEMsdyl7aWYoIm51bWJlciIhPXR5cGVvZiB2KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgUz1jKHYpO3JldHVybiB2b2lkIDAhPT1DPyJzdHJpbmciPT10eXBlb2Ygdz9TLmZpbGwoQyx3KTpTLmZpbGwoQyk6Uy5maWxs''@;'; put 'put ''KDApLFN9LEEuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odil7aWYoIm51bWJlciIhPXR5cGVvZiB2KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gYyh2KX0sQS5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odil7aWYoIm51bWJlciIhPXR5cGVv''@;'; put 'put ''ZiB2KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4geS5TbG93QnVmZmVyKHYpfX0sOTk3MjEoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCgzNjU1NiksYz1oKDE0MDM1KSxzPXkoIlJlZ0V4cC5wcm90b3R5cGUuZXhlYyIpLEE9aCg2''@;'; put 'put ''OTY3NSk7ZmUuZXhwb3J0cz1mdW5jdGlvbihDKXtpZighYyhDKSl0aHJvdyBuZXcgQSgiYHJlZ2V4YCBtdXN0IGJlIGEgUmVnRXhwIik7cmV0dXJuIGZ1bmN0aW9uKFMpe3JldHVybiBudWxsIT09cyhDLFMpfX19LDk2ODk3KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNzA0NTMpLGM9''@;'; put 'put ''aCgzMDA0MSkscz1oKDMwNTkyKSgpLEE9aCg3NTc5NSksdj1oKDY5Njc1KSxDPXkoIiVNYXRoLmZsb29yJSIpO2ZlLmV4cG9ydHM9ZnVuY3Rpb24oUyxMKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgUyl0aHJvdyBuZXcgdigiYGZuYCBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCJudW1iZXIiIT10''@;'; put 'put ''eXBlb2YgTHx8TDwwfHxMPjQyOTQ5NjcyOTV8fEMoTCkhPT1MKXRocm93IG5ldyB2KCJgbGVuZ3RoYCBtdXN0IGJlIGEgcG9zaXRpdmUgMzItYml0IGludGVnZXIiKTt2YXIgUj1hcmd1bWVudHMubGVuZ3RoPjImJiEhYXJndW1lbnRzWzJdLHg9ITAsVT0hMDtpZigibGVuZ3RoImluIFMmJkEp''@;'; put 'put ''e3ZhciBIPUEoUywibGVuZ3RoIik7SCYmIUguY29uZmlndXJhYmxlJiYoeD0hMSksSCYmIUgud3JpdGFibGUmJihVPSExKX1yZXR1cm4oeHx8VXx8IVIpJiYocz9jKFMsImxlbmd0aCIsTCwhMCwhMCk6YyhTLCJsZW5ndGgiLEwpKSxTfX0sOTAzOTIoZmUsaixoKXsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IHk9aCg5Mjg2MSkuQnVmZmVyLGM9aCgxNTM3Nyk7ZnVuY3Rpb24gcyhBLHYpe3RoaXMuX2Jsb2NrPXkuYWxsb2MoQSksdGhpcy5fZmluYWxTaXplPXYsdGhpcy5fYmxvY2tTaXplPUEsdGhpcy5fbGVuPTB9cy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEEsdil7QT1jKEEsdnx8InV0Zjgi''@;'; put 'put ''KTtmb3IodmFyIEM9dGhpcy5fYmxvY2ssdz10aGlzLl9ibG9ja1NpemUsUz1BLmxlbmd0aCxMPXRoaXMuX2xlbixSPTA7UjxTOyl7Zm9yKHZhciB4PUwldyxVPU1hdGgubWluKFMtUix3LXgpLEg9MDtIPFU7SCsrKUNbeCtIXT1BW1IrSF07Uis9VSwoTCs9VSkldz09PTAmJnRoaXMuX3VwZGF0''@;'; put 'put ''ZShDKX1yZXR1cm4gdGhpcy5fbGVuKz1TLHRoaXN9LHMucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihBKXt2YXIgdj10aGlzLl9sZW4ldGhpcy5fYmxvY2tTaXplO3RoaXMuX2Jsb2NrW3ZdPTEyOCx0aGlzLl9ibG9jay5maWxsKDAsdisxKSx2Pj10aGlzLl9maW5hbFNpemUmJih0aGlzLl91''@;'; put 'put ''cGRhdGUodGhpcy5fYmxvY2spLHRoaXMuX2Jsb2NrLmZpbGwoMCkpO3ZhciBDPTgqdGhpcy5fbGVuO2lmKEM8PTQyOTQ5NjcyOTUpdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRShDLHRoaXMuX2Jsb2NrU2l6ZS00KTtlbHNle3ZhciB3PSg0Mjk0OTY3Mjk1JkMpPj4+MDt0aGlzLl9ibG9jay53''@;'; put 'put ''cml0ZVVJbnQzMkJFKChDLXcpLzQyOTQ5NjcyOTYsdGhpcy5fYmxvY2tTaXplLTgpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUodyx0aGlzLl9ibG9ja1NpemUtNCl9dGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKTt2YXIgTD10aGlzLl9oYXNoKCk7cmV0dXJuIEE/TC50b1N0cmluZyhBKTpM''@;'; put 'put ''fSxzLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBkYXRlIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3MiKX0sZmUuZXhwb3J0cz1zfSw2MjgwMihmZSxqLGgpeyJ1c2Ugc3RyaWN0IjtmZS5leHBvcnRzPWZ1bmN0aW9uKGMpe3ZhciBzPWMu''@;'; put 'put ''dG9Mb3dlckNhc2UoKSxBPWZlLmV4cG9ydHNbc107aWYoIUEpdGhyb3cgbmV3IEVycm9yKHMrIiBpcyBub3Qgc3VwcG9ydGVkICh3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cykiKTtyZXR1cm4gbmV3IEF9LGZlLmV4cG9ydHMuc2hhPWgoMjc4MTYpLGZlLmV4cG9ydHMuc2hhMT1oKDYzNzM3KSxm''@;'; put 'put ''ZS5leHBvcnRzLnNoYTIyND1oKDI2NzEwKSxmZS5leHBvcnRzLnNoYTI1Nj1oKDI0MTA3KSxmZS5leHBvcnRzLnNoYTM4ND1oKDMyODI3KSxmZS5leHBvcnRzLnNoYTUxMj1oKDgyODkwKX0sMjc4MTYoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg1NjY5OCksYz1oKDkwMzkyKSxzPWgo''@;'; put 'put ''OTI4NjEpLkJ1ZmZlcixBPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sdj1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIEMoKXt0aGlzLmluaXQoKSx0aGlzLl93PXYsYy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIHcoUil7cmV0dXJuIFI8PDV8Uj4+PjI3''@;'; put 'put ''fWZ1bmN0aW9uIFMoUil7cmV0dXJuIFI8PDMwfFI+Pj4yfWZ1bmN0aW9uIEwoUix4LFUsSCl7cmV0dXJuIDA9PT1SP3gmVXx+eCZIOjI9PT1SP3gmVXx4Jkh8VSZIOnheVV5IfXkoQyxjKSxDLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlz''@;'; put 'put ''Ll9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxDLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFIpe2Zvcih2YXIgeD10aGlzLl93LFU9MHx0aGlzLl9hLEg9MHx0aGlzLl9iLFY9MHx0aGlzLl9jLE49''@;'; put 'put ''MHx0aGlzLl9kLHo9MHx0aGlzLl9lLFk9MDtZPDE2OysrWSl4W1ldPVIucmVhZEludDMyQkUoNCpZKTtmb3IoO1k8ODA7KytZKXhbWV09eFtZLTNdXnhbWS04XV54W1ktMTRdXnhbWS0xNl07Zm9yKHZhciBGPTA7Rjw4MDsrK0Ype3ZhciBXPX5+KEYvMjApLHE9dyhVKStMKFcsSCxWLE4pK3or''@;'; put 'put ''eFtGXStBW1ddfDA7ej1OLE49VixWPVMoSCksSD1VLFU9cX10aGlzLl9hPVUrdGhpcy5fYXwwLHRoaXMuX2I9SCt0aGlzLl9ifDAsdGhpcy5fYz1WK3RoaXMuX2N8MCx0aGlzLl9kPU4rdGhpcy5fZHwwLHRoaXMuX2U9eit0aGlzLl9lfDB9LEMucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIFI9cy5hbGxvY1Vuc2FmZSgyMCk7cmV0dXJuIFIud3JpdGVJbnQzMkJFKDB8dGhpcy5fYSwwKSxSLndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCksUi53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLFIud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksUi53cml0ZUludDMyQkUoMHx0aGlz''@;'; put 'put ''Ll9lLDE2KSxSfSxmZS5leHBvcnRzPUN9LDYzNzM3KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNTY2OTgpLGM9aCg5MDM5Mikscz1oKDkyODYxKS5CdWZmZXIsQT1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLHY9bmV3IEFycmF5KDgwKTtmdW5j''@;'; put 'put ''dGlvbiBDKCl7dGhpcy5pbml0KCksdGhpcy5fdz12LGMuY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiB3KHgpe3JldHVybiB4PDwxfHg+Pj4zMX1mdW5jdGlvbiBTKHgpe3JldHVybiB4PDw1fHg+Pj4yN31mdW5jdGlvbiBMKHgpe3JldHVybiB4PDwzMHx4Pj4+Mn1mdW5jdGlvbiBSKHgsVSxI''@;'; put 'put ''LFYpe3JldHVybiAwPT09eD9VJkh8flUmVjoyPT09eD9VJkh8VSZWfEgmVjpVXkheVn15KEMsYyksQy5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3''@;'; put 'put ''OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sQy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih4KXtmb3IodmFyIFU9dGhpcy5fdyxIPTB8dGhpcy5fYSxWPTB8dGhpcy5fYixOPTB8dGhpcy5fYyx6PTB8dGhpcy5fZCxZPTB8dGhpcy5fZSxGPTA7RjwxNjsrK0YpVVtGXT14LnJlYWRJbnQz''@;'; put 'put ''MkJFKDQqRik7Zm9yKDtGPDgwOysrRilVW0ZdPXcoVVtGLTNdXlVbRi04XV5VW0YtMTRdXlVbRi0xNl0pO2Zvcih2YXIgVz0wO1c8ODA7KytXKXt2YXIgcT1+fihXLzIwKSxyZT1TKEgpK1IocSxWLE4seikrWStVW1ddK0FbcV18MDtZPXosej1OLE49TChWKSxWPUgsSD1yZX10aGlzLl9hPUgr''@;'; put 'put ''dGhpcy5fYXwwLHRoaXMuX2I9Vit0aGlzLl9ifDAsdGhpcy5fYz1OK3RoaXMuX2N8MCx0aGlzLl9kPXordGhpcy5fZHwwLHRoaXMuX2U9WSt0aGlzLl9lfDB9LEMucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIHg9cy5hbGxvY1Vuc2FmZSgyMCk7cmV0dXJuIHgud3JpdGVJbnQzMkJF''@;'; put 'put ''KDB8dGhpcy5fYSwwKSx4LndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCkseC53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLHgud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMikseC53cml0ZUludDMyQkUoMHx0aGlzLl9lLDE2KSx4fSxmZS5leHBvcnRzPUN9LDI2NzEwKGZlLGosaCl7InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciB5PWgoNTY2OTgpLGM9aCgyNDEwNykscz1oKDkwMzkyKSxBPWgoOTI4NjEpLkJ1ZmZlcix2PW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gQygpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dixzLmNhbGwodGhpcyw2NCw1Nil9eShDLGMpLEMucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fYT0zMjM4MzcxMDMyLHRoaXMuX2I9OTE0MTUwNjYzLHRoaXMuX2M9ODEyNzAyOTk5LHRoaXMuX2Q9NDE0NDkxMjY5Nyx0aGlzLl9lPTQyOTA3NzU4NTcsdGhpcy5fZj0xNzUwNjAzMDI1LHRoaXMuX2c9MTY5NDA3NjgzOSx0aGlzLl9oPTMyMDQwNzU0MjgsdGhpc30s''@;'; put 'put ''Qy5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgdz1BLmFsbG9jVW5zYWZlKDI4KTtyZXR1cm4gdy53cml0ZUludDMyQkUodGhpcy5fYSwwKSx3LndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLHcud3JpdGVJbnQzMkJFKHRoaXMuX2MsOCksdy53cml0ZUludDMyQkUodGhpcy5fZCwxMiks''@;'; put 'put ''dy53cml0ZUludDMyQkUodGhpcy5fZSwxNiksdy53cml0ZUludDMyQkUodGhpcy5fZiwyMCksdy53cml0ZUludDMyQkUodGhpcy5fZywyNCksd30sZmUuZXhwb3J0cz1DfSwyNDEwNyhmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDU2Njk4KSxjPWgoOTAzOTIpLHM9aCg5Mjg2MSkuQnVm''@;'; put 'put ''ZmVyLEE9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4''@;'; put 'put ''MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzEx''@;'; put 'put ''LDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYw''@;'; put 'put ''MDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3''@;'; put 'put ''NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0sdj1uZXcgQXJyYXkoNjQpO2Z1bmN0aW9uIEMoKXt0aGlzLmluaXQoKSx0aGlzLl93PXYsYy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIHcoSCxWLE4pe3JldHVybiBOXkgmKFZeTil9ZnVuY3Rpb24gUyhILFYsTil7cmV0dXJu''@;'; put 'put ''IEgmVnxOJihIfFYpfWZ1bmN0aW9uIEwoSCl7cmV0dXJuKEg+Pj4yfEg8PDMwKV4oSD4+PjEzfEg8PDE5KV4oSD4+PjIyfEg8PDEwKX1mdW5jdGlvbiBSKEgpe3JldHVybihIPj4+NnxIPDwyNileKEg+Pj4xMXxIPDwyMSleKEg+Pj4yNXxIPDw3KX1mdW5jdGlvbiB4KEgpe3JldHVybihIPj4+''@;'; put 'put ''N3xIPDwyNSleKEg+Pj4xOHxIPDwxNCleSD4+PjN9ZnVuY3Rpb24gVShIKXtyZXR1cm4oSD4+PjE3fEg8PDE1KV4oSD4+PjE5fEg8PDEzKV5IPj4+MTB9eShDLGMpLEMucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzc5MDMzNzAzLHRoaXMuX2I9MzE0NDEzNDI3''@;'; put 'put ''Nyx0aGlzLl9jPTEwMTM5MDQyNDIsdGhpcy5fZD0yNzczNDgwNzYyLHRoaXMuX2U9MTM1OTg5MzExOSx0aGlzLl9mPTI2MDA4MjI5MjQsdGhpcy5fZz01Mjg3MzQ2MzUsdGhpcy5faD0xNTQxNDU5MjI1LHRoaXN9LEMucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oSCl7Zm9yKHZhciBWPXRo''@;'; put 'put ''aXMuX3csTj0wfHRoaXMuX2Esej0wfHRoaXMuX2IsWT0wfHRoaXMuX2MsRj0wfHRoaXMuX2QsVz0wfHRoaXMuX2UscT0wfHRoaXMuX2YscmU9MHx0aGlzLl9nLG1lPTB8dGhpcy5faCxDZT0wO0NlPDE2OysrQ2UpVltDZV09SC5yZWFkSW50MzJCRSg0KkNlKTtmb3IoO0NlPDY0OysrQ2UpVltD''@;'; put 'put ''ZV09VShWW0NlLTJdKStWW0NlLTddK3goVltDZS0xNV0pK1ZbQ2UtMTZdfDA7Zm9yKHZhciBJZT0wO0llPDY0OysrSWUpe3ZhciBrZT1tZStSKFcpK3coVyxxLHJlKStBW0llXStWW0llXXwwLHFlPUwoTikrUyhOLHosWSl8MDttZT1yZSxyZT1xLHE9VyxXPUYra2V8MCxGPVksWT16LHo9TixO''@;'; put 'put ''PWtlK3FlfDB9dGhpcy5fYT1OK3RoaXMuX2F8MCx0aGlzLl9iPXordGhpcy5fYnwwLHRoaXMuX2M9WSt0aGlzLl9jfDAsdGhpcy5fZD1GK3RoaXMuX2R8MCx0aGlzLl9lPVcrdGhpcy5fZXwwLHRoaXMuX2Y9cSt0aGlzLl9mfDAsdGhpcy5fZz1yZSt0aGlzLl9nfDAsdGhpcy5faD1tZSt0aGlz''@;'; put 'put ''Ll9ofDB9LEMucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIEg9cy5hbGxvY1Vuc2FmZSgzMik7cmV0dXJuIEgud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksSC53cml0ZUludDMyQkUodGhpcy5fYiw0KSxILndyaXRlSW50MzJCRSh0aGlzLl9jLDgpLEgud3JpdGVJbnQzMkJFKHRoaXMu''@;'; put 'put ''X2QsMTIpLEgud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLEgud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLEgud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLEgud3JpdGVJbnQzMkJFKHRoaXMuX2gsMjgpLEh9LGZlLmV4cG9ydHM9Q30sMzI4MjcoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9''@;'; put 'put ''aCg1NjY5OCksYz1oKDgyODkwKSxzPWgoOTAzOTIpLEE9aCg5Mjg2MSkuQnVmZmVyLHY9bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gQygpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dixzLmNhbGwodGhpcywxMjgsMTEyKX15KEMsYyksQy5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLl9haD0zNDE4MDcwMzY1LHRoaXMuX2JoPTE2NTQyNzAyNTAsdGhpcy5fY2g9MjQzODUyOTM3MCx0aGlzLl9kaD0zNTU0NjIzNjAsdGhpcy5fZWg9MTczMTQwNTQxNSx0aGlzLl9maD0yMzk0MTgwMjMxLHRoaXMuX2doPTM2NzUwMDg1MjUsdGhpcy5faGg9MTIwMzA2MjgxMyx0aGlzLl9h''@;'; put 'put ''bD0zMjM4MzcxMDMyLHRoaXMuX2JsPTkxNDE1MDY2Myx0aGlzLl9jbD04MTI3MDI5OTksdGhpcy5fZGw9NDE0NDkxMjY5Nyx0aGlzLl9lbD00MjkwNzc1ODU3LHRoaXMuX2ZsPTE3NTA2MDMwMjUsdGhpcy5fZ2w9MTY5NDA3NjgzOSx0aGlzLl9obD0zMjA0MDc1NDI4LHRoaXN9LEMucHJvdG90''@;'; put 'put ''eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIHc9QS5hbGxvY1Vuc2FmZSg0OCk7ZnVuY3Rpb24gUyhMLFIseCl7dy53cml0ZUludDMyQkUoTCx4KSx3LndyaXRlSW50MzJCRShSLHgrNCl9cmV0dXJuIFModGhpcy5fYWgsdGhpcy5fYWwsMCksUyh0aGlzLl9iaCx0aGlzLl9ibCw4KSxTKHRoaXMu''@;'; put 'put ''X2NoLHRoaXMuX2NsLDE2KSxTKHRoaXMuX2RoLHRoaXMuX2RsLDI0KSxTKHRoaXMuX2VoLHRoaXMuX2VsLDMyKSxTKHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSx3fSxmZS5leHBvcnRzPUN9LDgyODkwKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNTY2OTgpLGM9aCg5MDM5Mikscz1oKDky''@;'; put 'put ''ODYxKS5CdWZmZXIsQT1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3''@;'; put 'put ''OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2''@;'; put 'put ''MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4''@;'; put 'put ''MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4''@;'; put 'put ''OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwx''@;'; put 'put ''MDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYw''@;'; put 'put ''MDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3''@;'; put 'put ''LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQs''@;'; put 'put ''NTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDEx''@;'; put 'put ''NjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYs''@;'; put 'put ''MTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdLHY9bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gQygpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dixjLmNhbGwodGhpcywxMjgsMTEyKX1mdW5j''@;'; put 'put ''dGlvbiB3KHosWSxGKXtyZXR1cm4gRl56JihZXkYpfWZ1bmN0aW9uIFMoeixZLEYpe3JldHVybiB6Jll8RiYoenxZKX1mdW5jdGlvbiBMKHosWSl7cmV0dXJuKHo+Pj4yOHxZPDw0KV4oWT4+PjJ8ejw8MzApXihZPj4+N3x6PDwyNSl9ZnVuY3Rpb24gUih6LFkpe3JldHVybih6Pj4+MTR8WTw8''@;'; put 'put ''MTgpXih6Pj4+MTh8WTw8MTQpXihZPj4+OXx6PDwyMyl9ZnVuY3Rpb24geCh6LFkpe3JldHVybih6Pj4+MXxZPDwzMSleKHo+Pj44fFk8PDI0KV56Pj4+N31mdW5jdGlvbiBVKHosWSl7cmV0dXJuKHo+Pj4xfFk8PDMxKV4oej4+Pjh8WTw8MjQpXih6Pj4+N3xZPDwyNSl9ZnVuY3Rpb24gSCh6''@;'; put 'put ''LFkpe3JldHVybih6Pj4+MTl8WTw8MTMpXihZPj4+Mjl8ejw8Myleej4+PjZ9ZnVuY3Rpb24gVih6LFkpe3JldHVybih6Pj4+MTl8WTw8MTMpXihZPj4+Mjl8ejw8MyleKHo+Pj42fFk8PDI2KX1mdW5jdGlvbiBOKHosWSl7cmV0dXJuIHo+Pj4wPFk+Pj4wPzE6MH15KEMsYyksQy5wcm90b3R5''@;'; put 'put ''cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0xNzc5MDMzNzAzLHRoaXMuX2JoPTMxNDQxMzQyNzcsdGhpcy5fY2g9MTAxMzkwNDI0Mix0aGlzLl9kaD0yNzczNDgwNzYyLHRoaXMuX2VoPTEzNTk4OTMxMTksdGhpcy5fZmg9MjYwMDgyMjkyNCx0aGlzLl9naD01Mjg3MzQ2MzUs''@;'; put 'put ''dGhpcy5faGg9MTU0MTQ1OTIyNSx0aGlzLl9hbD00MDg5MjM1NzIwLHRoaXMuX2JsPTIyMjc4NzM1OTUsdGhpcy5fY2w9NDI3MTE3NTcyMyx0aGlzLl9kbD0xNTk1NzUwMTI5LHRoaXMuX2VsPTI5MTc1NjUxMzcsdGhpcy5fZmw9NzI1NTExMTk5LHRoaXMuX2dsPTQyMTUzODk1NDcsdGhpcy5f''@;'; put 'put ''aGw9MzI3MDMzMjA5LHRoaXN9LEMucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oeil7Zm9yKHZhciBZPXRoaXMuX3csRj0wfHRoaXMuX2FoLFc9MHx0aGlzLl9iaCxxPTB8dGhpcy5fY2gscmU9MHx0aGlzLl9kaCxtZT0wfHRoaXMuX2VoLENlPTB8dGhpcy5fZmgsSWU9MHx0aGlzLl9naCxr''@;'; put 'put ''ZT0wfHRoaXMuX2hoLHFlPTB8dGhpcy5fYWwsWD0wfHRoaXMuX2JsLGY9MHx0aGlzLl9jbCxiPTB8dGhpcy5fZGwsaz0wfHRoaXMuX2VsLE09MHx0aGlzLl9mbCxCPTB8dGhpcy5fZ2wsSz0wfHRoaXMuX2hsLEc9MDtHPDMyO0crPTIpWVtHXT16LnJlYWRJbnQzMkJFKDQqRyksWVtHKzFdPXou''@;'; put 'put ''cmVhZEludDMyQkUoNCpHKzQpO2Zvcig7RzwxNjA7Rys9Mil7dmFyIEQ9WVtHLTMwXSxwPVlbRy0zMCsxXSxJPXgoRCxwKSx1ZT1VKHAsRCksbmU9SChEPVlbRy00XSxwPVlbRy00KzFdKSxfZT1WKHAsRCksbHQ9WVtHLTMyXSxkdD1ZW0ctMzIrMV0sUmU9dWUrWVtHLTE0KzFdfDAsYWU9SStZ''@;'; put 'put ''W0ctMTRdK04oUmUsdWUpfDA7YWU9KGFlPWFlK25lK04oUmU9UmUrX2V8MCxfZSl8MCkrbHQrTihSZT1SZStkdHwwLGR0KXwwLFlbR109YWUsWVtHKzFdPVJlfWZvcih2YXIgeGU9MDt4ZTwxNjA7eGUrPTIpe2FlPVlbeGVdLFJlPVlbeGUrMV07dmFyIGplPVMoRixXLHEpLEFlPVMocWUsWCxm''@;'; put 'put ''KSxEZT1MKEYscWUpLEZlPUwocWUsRiksZ2U9UihtZSxrKSxjZT1SKGssbWUpLGhlPUFbeGVdLHdlPUFbeGUrMV0sSmU9dyhtZSxDZSxJZSksdHQ9dyhrLE0sQiksS2U9SytjZXwwLCR0PWtlK2dlK04oS2UsSyl8MDskdD0oJHQ9KCR0PSR0K0plK04oS2U9S2UrdHR8MCx0dCl8MCkraGUrTihL''@;'; put 'put ''ZT1LZSt3ZXwwLHdlKXwwKSthZStOKEtlPUtlK1JlfDAsUmUpfDA7dmFyIFJ0PUZlK0FlfDAsTHQ9RGUramUrTihSdCxGZSl8MDtrZT1JZSxLPUIsSWU9Q2UsQj1NLENlPW1lLE09ayxtZT1yZSskdCtOKGs9YitLZXwwLGIpfDAscmU9cSxiPWYscT1XLGY9WCxXPUYsWD1xZSxGPSR0K0x0K04o''@;'; put 'put ''cWU9S2UrUnR8MCxLZSl8MH10aGlzLl9hbD10aGlzLl9hbCtxZXwwLHRoaXMuX2JsPXRoaXMuX2JsK1h8MCx0aGlzLl9jbD10aGlzLl9jbCtmfDAsdGhpcy5fZGw9dGhpcy5fZGwrYnwwLHRoaXMuX2VsPXRoaXMuX2VsK2t8MCx0aGlzLl9mbD10aGlzLl9mbCtNfDAsdGhpcy5fZ2w9dGhpcy5f''@;'; put 'put ''Z2wrQnwwLHRoaXMuX2hsPXRoaXMuX2hsK0t8MCx0aGlzLl9haD10aGlzLl9haCtGK04odGhpcy5fYWwscWUpfDAsdGhpcy5fYmg9dGhpcy5fYmgrVytOKHRoaXMuX2JsLFgpfDAsdGhpcy5fY2g9dGhpcy5fY2grcStOKHRoaXMuX2NsLGYpfDAsdGhpcy5fZGg9dGhpcy5fZGgrcmUrTih0aGlz''@;'; put 'put ''Ll9kbCxiKXwwLHRoaXMuX2VoPXRoaXMuX2VoK21lK04odGhpcy5fZWwsayl8MCx0aGlzLl9maD10aGlzLl9maCtDZStOKHRoaXMuX2ZsLE0pfDAsdGhpcy5fZ2g9dGhpcy5fZ2grSWUrTih0aGlzLl9nbCxCKXwwLHRoaXMuX2hoPXRoaXMuX2hoK2tlK04odGhpcy5faGwsSyl8MH0sQy5wcm90''@;'; put 'put ''b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgej1zLmFsbG9jVW5zYWZlKDY0KTtmdW5jdGlvbiBZKEYsVyxxKXt6LndyaXRlSW50MzJCRShGLHEpLHoud3JpdGVJbnQzMkJFKFcscSs0KX1yZXR1cm4gWSh0aGlzLl9haCx0aGlzLl9hbCwwKSxZKHRoaXMuX2JoLHRoaXMuX2JsLDgpLFkodGhp''@;'; put 'put ''cy5fY2gsdGhpcy5fY2wsMTYpLFkodGhpcy5fZGgsdGhpcy5fZGwsMjQpLFkodGhpcy5fZWgsdGhpcy5fZWwsMzIpLFkodGhpcy5fZmgsdGhpcy5fZmwsNDApLFkodGhpcy5fZ2gsdGhpcy5fZ2wsNDgpLFkodGhpcy5faGgsdGhpcy5faGwsNTYpLHp9LGZlLmV4cG9ydHM9Q30sODgzMTAoZmUs''@;'; put 'put ''aixoKXtmZS5leHBvcnRzPXM7dmFyIHk9aCgzNzAwNykuRXZlbnRFbWl0dGVyO2Z1bmN0aW9uIHMoKXt5LmNhbGwodGhpcyl9aCg1NjY5OCkocyx5KSxzLlJlYWRhYmxlPWgoNDU0MTIpLHMuV3JpdGFibGU9aCgxNjcwOCkscy5EdXBsZXg9aCgyNTM4Mikscy5UcmFuc2Zvcm09aCg3NDYxMCks''@;'; put 'put ''cy5QYXNzVGhyb3VnaD1oKDYzNjAwKSxzLmZpbmlzaGVkPWgoODYyMzgpLHMucGlwZWxpbmU9aCg1Nzc1OCkscy5TdHJlYW09cyxzLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKEEsdil7dmFyIEM9dGhpcztmdW5jdGlvbiB3KFYpe0Eud3JpdGFibGUmJiExPT09QS53cml0ZShWKSYmQy5wYXVz''@;'; put 'put ''ZSYmQy5wYXVzZSgpfWZ1bmN0aW9uIFMoKXtDLnJlYWRhYmxlJiZDLnJlc3VtZSYmQy5yZXN1bWUoKX1DLm9uKCJkYXRhIix3KSxBLm9uKCJkcmFpbiIsUyksIUEuX2lzU3RkaW8mJighdnx8ITEhPT12LmVuZCkmJihDLm9uKCJlbmQiLFIpLEMub24oImNsb3NlIix4KSk7dmFyIEw9ITE7ZnVu''@;'; put 'put ''Y3Rpb24gUigpe0x8fChMPSEwLEEuZW5kKCkpfWZ1bmN0aW9uIHgoKXtMfHwoTD0hMCwiZnVuY3Rpb24iPT10eXBlb2YgQS5kZXN0cm95JiZBLmRlc3Ryb3koKSl9ZnVuY3Rpb24gVShWKXtpZihIKCksMD09PXkubGlzdGVuZXJDb3VudCh0aGlzLCJlcnJvciIpKXRocm93IFZ9ZnVuY3Rpb24g''@;'; put 'put ''SCgpe0MucmVtb3ZlTGlzdGVuZXIoImRhdGEiLHcpLEEucmVtb3ZlTGlzdGVuZXIoImRyYWluIixTKSxDLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFIpLEMucmVtb3ZlTGlzdGVuZXIoImNsb3NlIix4KSxDLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsVSksQS5yZW1vdmVMaXN0ZW5lcigiZXJyb3Ii''@;'; put 'put ''LFUpLEMucmVtb3ZlTGlzdGVuZXIoImVuZCIsSCksQy5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLEgpLEEucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixIKX1yZXR1cm4gQy5vbigiZXJyb3IiLFUpLEEub24oImVycm9yIixVKSxDLm9uKCJlbmQiLEgpLEMub24oImNsb3NlIixIKSxBLm9uKCJjbG9z''@;'; put 'put ''ZSIsSCksQS5lbWl0KCJwaXBlIixDKSxBfX0sODMxNDEoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg5Mjg2MSkuQnVmZmVyLGM9eS5pc0VuY29kaW5nfHxmdW5jdGlvbihGKXtzd2l0Y2goKEY9IiIrRikmJkYudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1''@;'; put 'put ''dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6Y2FzZSJyYXciOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtmdW5jdGlvbiB2KEYpe3ZhciBXO3N3aXRjaCh0aGlz''@;'; put 'put ''LmVuY29kaW5nPWZ1bmN0aW9uIEEoRil7dmFyIFc9ZnVuY3Rpb24gcyhGKXtpZighRilyZXR1cm4idXRmOCI7Zm9yKHZhciBXOzspc3dpdGNoKEYpe2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuInV0ZjgiO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0''@;'; put 'put ''Zi0xNmxlIjpyZXR1cm4idXRmMTZsZSI7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4ibGF0aW4xIjtjYXNlImJhc2U2NCI6Y2FzZSJhc2NpaSI6Y2FzZSJoZXgiOnJldHVybiBGO2RlZmF1bHQ6aWYoVylyZXR1cm47Rj0oIiIrRikudG9Mb3dlckNhc2UoKSxXPSEwfX0oRik7aWYo''@;'; put 'put ''InN0cmluZyIhPXR5cGVvZiBXJiYoeS5pc0VuY29kaW5nPT09Y3x8IWMoRikpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitGKTtyZXR1cm4gV3x8Rn0oRiksdGhpcy5lbmNvZGluZyl7Y2FzZSJ1dGYxNmxlIjp0aGlzLnRleHQ9VSx0aGlzLmVuZD1ILFc9NDticmVhaztj''@;'; put 'put ''YXNlInV0ZjgiOnRoaXMuZmlsbExhc3Q9TCxXPTQ7YnJlYWs7Y2FzZSJiYXNlNjQiOnRoaXMudGV4dD1WLHRoaXMuZW5kPU4sVz0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9eix2b2lkKHRoaXMuZW5kPVkpfXRoaXMubGFzdE5lZWQ9MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMu''@;'; put 'put ''bGFzdENoYXI9eS5hbGxvY1Vuc2FmZShXKX1mdW5jdGlvbiBDKEYpe3JldHVybiBGPD0xMjc/MDpGPj41PT02PzI6Rj4+ND09MTQ/MzpGPj4zPT0zMD80OkY+PjY9PTI/LTE6LTJ9ZnVuY3Rpb24gTChGKXt2YXIgVz10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLHE9ZnVuY3Rpb24gUyhG''@;'; put 'put ''LFcpe2lmKDEyOCE9KDE5MiZXWzBdKSlyZXR1cm4gRi5sYXN0TmVlZD0wLCJcdWZmZmQiO2lmKEYubGFzdE5lZWQ+MSYmVy5sZW5ndGg+MSl7aWYoMTI4IT0oMTkyJldbMV0pKXJldHVybiBGLmxhc3ROZWVkPTEsIlx1ZmZmZCI7aWYoRi5sYXN0TmVlZD4yJiZXLmxlbmd0aD4yJiYxMjghPSgx''@;'; put 'put ''OTImV1syXSkpcmV0dXJuIEYubGFzdE5lZWQ9MiwiXHVmZmZkIn19KHRoaXMsRik7cmV0dXJuIHZvaWQgMCE9PXE/cTp0aGlzLmxhc3ROZWVkPD1GLmxlbmd0aD8oRi5jb3B5KHRoaXMubGFzdENoYXIsVywwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNv''@;'; put 'put ''ZGluZywwLHRoaXMubGFzdFRvdGFsKSk6KEYuY29weSh0aGlzLmxhc3RDaGFyLFcsMCxGLmxlbmd0aCksdm9pZCh0aGlzLmxhc3ROZWVkLT1GLmxlbmd0aCkpfWZ1bmN0aW9uIFUoRixXKXtpZigoRi5sZW5ndGgtVyklMj09MCl7dmFyIHE9Ri50b1N0cmluZygidXRmMTZsZSIsVyk7aWYocSl7''@;'; put 'put ''dmFyIHJlPXEuY2hhckNvZGVBdChxLmxlbmd0aC0xKTtpZihyZT49NTUyOTYmJnJlPD01NjMxOSlyZXR1cm4gdGhpcy5sYXN0TmVlZD0yLHRoaXMubGFzdFRvdGFsPTQsdGhpcy5sYXN0Q2hhclswXT1GW0YubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09RltGLmxlbmd0aC0xXSxxLnNsaWNl''@;'; put 'put ''KDAsLTEpfXJldHVybiBxfXJldHVybiB0aGlzLmxhc3ROZWVkPTEsdGhpcy5sYXN0VG90YWw9Mix0aGlzLmxhc3RDaGFyWzBdPUZbRi5sZW5ndGgtMV0sRi50b1N0cmluZygidXRmMTZsZSIsVyxGLmxlbmd0aC0xKX1mdW5jdGlvbiBIKEYpe3ZhciBXPUYmJkYubGVuZ3RoP3RoaXMud3JpdGUo''@;'; put 'put ''Rik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/Vyt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJ1dGYxNmxlIiwwLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQpOld9ZnVuY3Rpb24gVihGLFcpe3ZhciBxPShGLmxlbmd0aC1XKSUzO3JldHVybiAwPT09cT9GLnRvU3RyaW5nKCJiYXNlNjQi''@;'; put 'put ''LFcpOih0aGlzLmxhc3ROZWVkPTMtcSx0aGlzLmxhc3RUb3RhbD0zLDE9PT1xP3RoaXMubGFzdENoYXJbMF09RltGLmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT1GW0YubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09RltGLmxlbmd0aC0xXSksRi50b1N0cmluZygiYmFzZTY0IixXLEYu''@;'; put 'put ''bGVuZ3RoLXEpKX1mdW5jdGlvbiBOKEYpe3ZhciBXPUYmJkYubGVuZ3RoP3RoaXMud3JpdGUoRik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/Vyt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJiYXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTpXfWZ1bmN0aW9uIHooRil7cmV0dXJuIEYudG9TdHJp''@;'; put 'put ''bmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gWShGKXtyZXR1cm4gRiYmRi5sZW5ndGg/dGhpcy53cml0ZShGKToiIn1qLkk9dix2LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihGKXtpZigwPT09Ri5sZW5ndGgpcmV0dXJuIiI7dmFyIFcscTtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9''@;'; put 'put ''PT0oVz10aGlzLmZpbGxMYXN0KEYpKSlyZXR1cm4iIjtxPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2UgcT0wO3JldHVybiBxPEYubGVuZ3RoP1c/Vyt0aGlzLnRleHQoRixxKTp0aGlzLnRleHQoRixxKTpXfHwiIn0sdi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uIHgoRil7dmFy''@;'; put 'put ''IFc9RiYmRi5sZW5ndGg/dGhpcy53cml0ZShGKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9XKyJcdWZmZmQiOld9LHYucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24gUihGLFcpe3ZhciBxPWZ1bmN0aW9uIHcoRixXLHEpe3ZhciByZT1XLmxlbmd0aC0xO2lmKHJlPHEpcmV0dXJuIDA7dmFyIG1l''@;'; put 'put ''PUMoV1tyZV0pO3JldHVybiBtZT49MD8obWU+MCYmKEYubGFzdE5lZWQ9bWUtMSksbWUpOi0tcmU8cXx8LTI9PT1tZT8wOihtZT1DKFdbcmVdKSk+PTA/KG1lPjAmJihGLmxhc3ROZWVkPW1lLTIpLG1lKTotLXJlPHF8fC0yPT09bWU/MDoobWU9QyhXW3JlXSkpPj0wPyhtZT4wJiYoMj09PW1l''@;'; put 'put ''P21lPTA6Ri5sYXN0TmVlZD1tZS0zKSxtZSk6MH0odGhpcyxGLFcpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVybiBGLnRvU3RyaW5nKCJ1dGY4IixXKTt0aGlzLmxhc3RUb3RhbD1xO3ZhciByZT1GLmxlbmd0aC0ocS10aGlzLmxhc3ROZWVkKTtyZXR1cm4gRi5jb3B5KHRoaXMubGFzdENoYXIs''@;'; put 'put ''MCxyZSksRi50b1N0cmluZygidXRmOCIsVyxyZSl9LHYucHJvdG90eXBlLmZpbGxMYXN0PWZ1bmN0aW9uKEYpe2lmKHRoaXMubGFzdE5lZWQ8PUYubGVuZ3RoKXJldHVybiBGLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsdGhpcy5sYXN0TmVlZCks''@;'; put 'put ''dGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpO0YuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCxGLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09Ri5sZW5ndGh9fSwxNTM3NyhmZSxqLGgpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgeT1oKDkyODYxKS5CdWZmZXIsYz1oKDY0NjM0KSxzPWgoNzQzNzIpLEE9QXJyYXlCdWZmZXIuaXNWaWV3fHxmdW5jdGlvbihMKXt0cnl7cmV0dXJuIHMoTCksITB9Y2F0Y2h7cmV0dXJuITF9fSx2PXR5cGVvZiBVaW50OEFycmF5PCJ1IixDPXR5cGVvZiBBcnJheUJ1ZmZlcjwi''@;'; put 'put ''dSImJnR5cGVvZiBVaW50OEFycmF5PCJ1Iix3PUMmJih5LnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHkuVFlQRURfQVJSQVlfU1VQUE9SVCk7ZmUuZXhwb3J0cz1mdW5jdGlvbihMLFIpe2lmKHkuaXNCdWZmZXIoTCkpcmV0dXJuIEwuY29uc3RydWN0b3ImJiEoImlzQnVmZmVy''@;'; put 'put ''ImluIEwpP3kuZnJvbShMKTpMO2lmKCJzdHJpbmciPT10eXBlb2YgTClyZXR1cm4geS5mcm9tKEwsUik7aWYoQyYmQShMKSl7aWYoMD09PUwuYnl0ZUxlbmd0aClyZXR1cm4geS5hbGxvYygwKTtpZih3KXt2YXIgeD15LmZyb20oTC5idWZmZXIsTC5ieXRlT2Zmc2V0LEwuYnl0ZUxlbmd0aCk7''@;'; put 'put ''aWYoeC5ieXRlTGVuZ3RoPT09TC5ieXRlTGVuZ3RoKXJldHVybiB4fXZhciBVPUwgaW5zdGFuY2VvZiBVaW50OEFycmF5P0w6bmV3IFVpbnQ4QXJyYXkoTC5idWZmZXIsTC5ieXRlT2Zmc2V0LEwuYnl0ZUxlbmd0aCksSD15LmZyb20oVSk7aWYoSC5sZW5ndGg9PT1MLmJ5dGVMZW5ndGgpcmV0''@;'; put 'put ''dXJuIEh9aWYodiYmTCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIHkuZnJvbShMKTt2YXIgVj1jKEwpO2lmKFYpZm9yKHZhciBOPTA7TjxMLmxlbmd0aDtOKz0xKXt2YXIgej1MW05dO2lmKCJudW1iZXIiIT10eXBlb2Ygenx8ejwwfHx6PjI1NXx8fn56IT09eil0aHJvdyBuZXcgUmFu''@;'; put 'put ''Z2VFcnJvcigiQXJyYXkgaXRlbXMgbXVzdCBiZSBudW1iZXJzIGluIHRoZSByYW5nZSAwLTI1NS4iKX1pZihWfHx5LmlzQnVmZmVyKEwpJiZMLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgTC5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmTC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihMKSly''@;'; put 'put ''ZXR1cm4geS5mcm9tKEwpO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgYW4gQXJyYXksIGEgQnVmZmVyLCBhIFVpbnQ4QXJyYXksIG9yIGEgRGF0YVZpZXcuJyl9fSw3MjkyMyhmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijtjb25zdCB5PWgo''@;'; put 'put ''MTg4NzUpLGM9aCg2MTE2MCkscz1oKDYxMTc3KSxBPWgoOTQ4MzYpLmksdj1oKDgyNjkxKS5uLEM9aCg3NTMyMSkueix3PWgoODI5ODIpLFM9aCg2MzA5Mykse2Zyb21DYWxsYmFjazpMfT1oKDE4OTY0KSx7Z2V0Q3VzdG9tSW5zcGVjdFN5bWJvbDpSfT1oKDI5OTIxKSx4PS9eW1x4MjFceDIz''@;'; put 'put ''LVx4MkJceDJELVx4M0FceDNDLVx4NUJceDVELVx4N0VdKyQvLFU9L1tceDAwLVx4MUZdLyxIPVsiXG4iLCJcciIsIlwwIl0sVj0vW1x4MjAtXHgzQVx4M0MtXHg3RV0rLyxOPS9bXHgwOVx4MjAtXHgyRlx4M0ItXHg0MFx4NUItXHg2MFx4N0ItXHg3RV0vLHo9e2phbjowLGZlYjoxLG1hcjoy''@;'; put 'put ''LGFwcjozLG1heTo0LGp1bjo1LGp1bDo2LGF1Zzo3LHNlcDo4LG9jdDo5LG5vdjoxMCxkZWM6MTF9LFk9MjE0NzQ4MzY0N2UzLFc9J0ludmFsaWQgc2FtZVNpdGVDb250ZXh0IG9wdGlvbiBmb3IgZ2V0Q29va2llcygpOyBleHBlY3RlZCBvbmUgb2YgInN0cmljdCIsICJsYXgiLCBvciAibm9u''@;'; put 'put ''ZSInO2Z1bmN0aW9uIHEoamUpe3cudmFsaWRhdGUody5pc05vbkVtcHR5U3RyaW5nKGplKSxqZSk7Y29uc3QgQWU9U3RyaW5nKGplKS50b0xvd2VyQ2FzZSgpO3JldHVybiJub25lIj09PUFlfHwibGF4Ij09PUFlfHwic3RyaWN0Ij09PUFlP0FlOm51bGx9Y29uc3QgcmU9T2JqZWN0LmZyZWV6''@;'; put 'put ''ZSh7U0lMRU5UOiJzaWxlbnQiLFNUUklDVDoic3RyaWN0IixESVNBQkxFRDoidW5zYWZlLWRpc2FibGVkIn0pLG1lPS8oPzpeKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M30kKXwoPzpeKD86''@;'; put 'put ''KD86W2EtZlxkXXsxLDR9Oil7N30oPzpbYS1mXGRdezEsNH18Oil8KD86W2EtZlxkXXsxLDR9Oil7Nn0oPzooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXw6W2EtZlxkXXsxLDR9fDopfCg/''@;'; put 'put ''OlthLWZcZF17MSw0fTopezV9KD86Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsMn18Oil8KD86W2EtZlxkXXsxLDR9Oil7NH0oPzooPzo6W2EtZlxk''@;'; put 'put ''XXsxLDR9KXswLDF9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsM318Oil8KD86W2EtZlxkXXsxLDR9Oil7M30oPzooPzo6W2EtZlxkXXsxLDR9KXsw''@;'; put 'put ''LDJ9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsNH18Oil8KD86W2EtZlxkXXsxLDR9Oil7Mn0oPzooPzo6W2EtZlxkXXsxLDR9KXswLDN9Oig/OjI1''@;'; put 'put ''WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsNX18Oil8KD86W2EtZlxkXXsxLDR9Oil7MX0oPzooPzo6W2EtZlxkXXsxLDR9KXswLDR9Oig/OjI1WzAtNV18Mlsw''@;'; put 'put ''LTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsNn18Oil8KD86Oig/Oig/OjpbYS1mXGRdezEsNH0pezAsNX06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/''@;'; put 'put ''OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw3fXw6KSkpJCkvLENlPSJcblxcWz8oPzpcbig/OlthLWZBLUZcXGRdezEsNH06KXs3fSg/OlthLWZBLUZcXGRdezEsNH18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7Nn0o''@;'; put 'put ''PzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fDpbYS1mQS1GXFxkXXsxLDR9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezV9KD86Oig/OjI1WzAtNV18MlswLTRd''@;'; put 'put ''XFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsMn18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7NH0oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCwxfToo''@;'; put 'put ''PzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDN9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezN9KD86KD86OlthLWZBLUZc''@;'; put 'put ''XGRdezEsNH0pezAsMn06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw0fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXsy''@;'; put 'put ''fSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDN9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsNX18Oil8XG4oPzpbYS1m''@;'; put 'put ''QS1GXFxkXXsxLDR9Oil7MX0oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCw0fTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsx''@;'; put 'put ''LDZ9fDopfFxuKD86Oig/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDV9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsN318''@;'; put 'put ''OikpXG4pKD86JVswLTlhLXpBLVpdezEsfSk/XFxdP1xuIi5yZXBsYWNlKC9ccypcL1wvLiokL2dtLCIiKS5yZXBsYWNlKC9cbi9nLCIiKS50cmltKCksSWU9bmV3IFJlZ0V4cChgXiR7Q2V9JGApO2Z1bmN0aW9uIGtlKGplLEFlLERlLEZlKXtsZXQgZ2U9MDtmb3IoO2dlPGplLmxlbmd0aDsp''@;'; put 'put ''e2NvbnN0IGNlPWplLmNoYXJDb2RlQXQoZ2UpO2lmKGNlPD00N3x8Y2U+PTU4KWJyZWFrO2dlKyt9cmV0dXJuIGdlPEFlfHxnZT5EZXx8IUZlJiZnZSE9amUubGVuZ3RoP251bGw6cGFyc2VJbnQoamUuc3Vic3RyKDAsZ2UpLDEwKX1mdW5jdGlvbiBxZShqZSl7Y29uc3QgQWU9amUuc3BsaXQo''@;'; put 'put ''IjoiKSxEZT1bMCwwLDBdO2lmKDMhPT1BZS5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKGxldCBGZT0wO0ZlPDM7RmUrKyl7Y29uc3QgY2U9a2UoQWVbRmVdLDEsMiwyPT1GZSk7aWYobnVsbD09PWNlKXJldHVybiBudWxsO0RlW0ZlXT1jZX1yZXR1cm4gRGV9ZnVuY3Rpb24gWChqZSl7amU9U3Ry''@;'; put 'put ''aW5nKGplKS5zdWJzdHIoMCwzKS50b0xvd2VyQ2FzZSgpO2NvbnN0IEFlPXpbamVdO3JldHVybiBBZT49MD9BZTpudWxsfWZ1bmN0aW9uIGYoamUpe2lmKCFqZSlyZXR1cm47Y29uc3QgQWU9amUuc3BsaXQoTik7aWYoIUFlKXJldHVybjtsZXQgRGU9bnVsbCxGZT1udWxsLGdlPW51bGwsY2U9''@;'; put 'put ''bnVsbCxoZT1udWxsLHdlPW51bGw7Zm9yKGxldCBKZT0wO0plPEFlLmxlbmd0aDtKZSsrKXtjb25zdCB0dD1BZVtKZV0udHJpbSgpO2lmKCF0dC5sZW5ndGgpY29udGludWU7bGV0IEtlO251bGw9PT1nZSYmKEtlPXFlKHR0KSxLZSk/KERlPUtlWzBdLEZlPUtlWzFdLGdlPUtlWzJdKTpudWxs''@;'; put 'put ''IT09Y2V8fChLZT1rZSh0dCwxLDIsITApLG51bGw9PT1LZSk/bnVsbCE9PWhlfHwoS2U9WCh0dCksbnVsbD09PUtlKT9udWxsPT09d2UmJihLZT1rZSh0dCwyLDQsITApLG51bGwhPT1LZSYmKHdlPUtlLHdlPj03MCYmd2U8PTk5P3dlKz0xOTAwOndlPj0wJiZ3ZTw9NjkmJih3ZSs9MmUzKSkp''@;'; put 'put ''OmhlPUtlOmNlPUtlfXJldHVybiBudWxsPT09Y2V8fG51bGw9PT1oZXx8bnVsbD09PXdlfHxudWxsPT09Z2V8fGNlPDF8fGNlPjMxfHx3ZTwxNjAxfHxEZT4yM3x8RmU+NTl8fGdlPjU5P3ZvaWQgMDpuZXcgRGF0ZShEYXRlLlVUQyh3ZSxoZSxjZSxEZSxGZSxnZSkpfWZ1bmN0aW9uIGIoamUp''@;'; put 'put ''e3JldHVybiB3LnZhbGlkYXRlKHcuaXNEYXRlKGplKSxqZSksamUudG9VVENTdHJpbmcoKX1mdW5jdGlvbiBrKGplKXtyZXR1cm4gbnVsbD09amU/bnVsbDooamU9amUudHJpbSgpLnJlcGxhY2UoL15cLi8sIiIpLEllLnRlc3QoamUpJiYoamU9amUucmVwbGFjZSgiWyIsIiIpLnJlcGxhY2Uo''@;'; put 'put ''Il0iLCIiKSkseSYmL1teXHUwMDAxLVx1MDA3Zl0vLnRlc3QoamUpJiYoamU9eS50b0FTQ0lJKGplKSksamUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gTShqZSxBZSxEZSl7aWYobnVsbD09amV8fG51bGw9PUFlKXJldHVybiBudWxsO2lmKCExIT09RGUmJihqZT1rKGplKSxBZT1rKEFlKSks''@;'; put 'put ''amU9PUFlKXJldHVybiEwO2NvbnN0IEZlPWplLmxhc3RJbmRleE9mKEFlKTtyZXR1cm4hKEZlPD0wfHxqZS5sZW5ndGghPT1BZS5sZW5ndGgrRmV8fCIuIiE9PWplLnN1YnN0cihGZS0xLDEpfHxtZS50ZXN0KGplKSl9ZnVuY3Rpb24gQihqZSl7aWYoIWplfHwiLyIhPT1qZS5zdWJzdHIoMCwx''@;'; put 'put ''KSlyZXR1cm4iLyI7aWYoIi8iPT09amUpcmV0dXJuIGplO2NvbnN0IEFlPWplLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIDA9PT1BZT8iLyI6amUuc2xpY2UoMCxBZSl9ZnVuY3Rpb24gRChqZSxBZSl7aWYoKCFBZXx8Im9iamVjdCIhPXR5cGVvZiBBZSkmJihBZT17fSksdy5pc0VtcHR5U3Ry''@;'; put 'put ''aW5nKGplKXx8IXcuaXNTdHJpbmcoamUpKXJldHVybiBudWxsO2NvbnN0IERlPShqZT1qZS50cmltKCkpLmluZGV4T2YoIjsiKSxnZT1mdW5jdGlvbiBHKGplLEFlKXtqZT1mdW5jdGlvbiBLKGplKXtpZih3LmlzRW1wdHlTdHJpbmcoamUpKXJldHVybiBqZTtmb3IobGV0IEFlPTA7QWU8SC5s''@;'; put 'put ''ZW5ndGg7QWUrKyl7Y29uc3QgRGU9amUuaW5kZXhPZihIW0FlXSk7LTEhPT1EZSYmKGplPWplLnN1YnN0cigwLERlKSl9cmV0dXJuIGplfShqZSksdy52YWxpZGF0ZSh3LmlzU3RyaW5nKGplKSxqZSk7bGV0IEZlLGdlLERlPWplLmluZGV4T2YoIj0iKTtpZihBZSkwPT09RGUmJihEZT0oamU9''@;'; put 'put ''amUuc3Vic3RyKDEpKS5pbmRleE9mKCI9IikpO2Vsc2UgaWYoRGU8PTApcmV0dXJuO2lmKERlPD0wPyhGZT0iIixnZT1qZS50cmltKCkpOihGZT1qZS5zdWJzdHIoMCxEZSkudHJpbSgpLGdlPWplLnN1YnN0cihEZSsxKS50cmltKCkpLFUudGVzdChGZSl8fFUudGVzdChnZSkpcmV0dXJuO2Nv''@;'; put 'put ''bnN0IGNlPW5ldyBkdDtyZXR1cm4gY2Uua2V5PUZlLGNlLnZhbHVlPWdlLGNlfSgtMT09PURlP2plOmplLnN1YnN0cigwLERlKSwhIUFlLmxvb3NlKTtpZighZ2UpcmV0dXJuO2lmKC0xPT09RGUpcmV0dXJuIGdlO2NvbnN0IGNlPWplLnNsaWNlKERlKzEpLnRyaW0oKTtpZigwPT09Y2UubGVu''@;'; put 'put ''Z3RoKXJldHVybiBnZTtjb25zdCBoZT1jZS5zcGxpdCgiOyIpO2Zvcig7aGUubGVuZ3RoOyl7Y29uc3Qgd2U9aGUuc2hpZnQoKS50cmltKCk7aWYoMD09PXdlLmxlbmd0aCljb250aW51ZTtjb25zdCBKZT13ZS5pbmRleE9mKCI9Iik7bGV0IHR0LEtlO3N3aXRjaCgtMT09PUplPyh0dD13ZSxL''@;'; put 'put ''ZT1udWxsKToodHQ9d2Uuc3Vic3RyKDAsSmUpLEtlPXdlLnN1YnN0cihKZSsxKSksdHQ9dHQudHJpbSgpLnRvTG93ZXJDYXNlKCksS2UmJihLZT1LZS50cmltKCkpLHR0KXtjYXNlImV4cGlyZXMiOmlmKEtlKXtjb25zdCBSdD1mKEtlKTtSdCYmKGdlLmV4cGlyZXM9UnQpfWJyZWFrO2Nhc2Ui''@;'; put 'put ''bWF4LWFnZSI6aWYoS2UmJi9eLT9bMC05XSskLy50ZXN0KEtlKSl7Y29uc3QgUnQ9cGFyc2VJbnQoS2UsMTApO2dlLnNldE1heEFnZShSdCl9YnJlYWs7Y2FzZSJkb21haW4iOmlmKEtlKXtjb25zdCBSdD1LZS50cmltKCkucmVwbGFjZSgvXlwuLywiIik7UnQmJihnZS5kb21haW49UnQudG9M''@;'; put 'put ''b3dlckNhc2UoKSl9YnJlYWs7Y2FzZSJwYXRoIjpnZS5wYXRoPUtlJiYiLyI9PT1LZVswXT9LZTpudWxsO2JyZWFrO2Nhc2Uic2VjdXJlIjpnZS5zZWN1cmU9ITA7YnJlYWs7Y2FzZSJodHRwb25seSI6Z2UuaHR0cE9ubHk9ITA7YnJlYWs7Y2FzZSJzYW1lc2l0ZSI6c3dpdGNoKEtlP0tlLnRv''@;'; put 'put ''TG93ZXJDYXNlKCk6IiIpe2Nhc2Uic3RyaWN0IjpnZS5zYW1lU2l0ZT0ic3RyaWN0IjticmVhaztjYXNlImxheCI6Z2Uuc2FtZVNpdGU9ImxheCI7YnJlYWs7Y2FzZSJub25lIjpnZS5zYW1lU2l0ZT0ibm9uZSI7YnJlYWs7ZGVmYXVsdDpnZS5zYW1lU2l0ZT12b2lkIDB9YnJlYWs7ZGVmYXVs''@;'; put 'put ''dDpnZS5leHRlbnNpb25zPWdlLmV4dGVuc2lvbnN8fFtdLGdlLmV4dGVuc2lvbnMucHVzaCh3ZSl9fXJldHVybiBnZX1mdW5jdGlvbiB1ZShqZSl7bGV0IEFlO3RyeXtBZT1KU09OLnBhcnNlKGplKX1jYXRjaChEZSl7cmV0dXJuIERlfXJldHVybiBBZX1mdW5jdGlvbiBuZShqZSl7aWYoIWpl''@;'; put 'put ''fHx3LmlzRW1wdHlTdHJpbmcoamUpKXJldHVybiBudWxsO2xldCBBZTtpZigic3RyaW5nIj09dHlwZW9mIGplKXtpZihBZT11ZShqZSksQWUgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gbnVsbH1lbHNlIEFlPWplO2NvbnN0IERlPW5ldyBkdDtmb3IobGV0IEZlPTA7RmU8ZHQuc2VyaWFsaXph''@;'; put 'put ''YmxlUHJvcGVydGllcy5sZW5ndGg7RmUrKyl7Y29uc3QgZ2U9ZHQuc2VyaWFsaXphYmxlUHJvcGVydGllc1tGZV07dm9pZCAwPT09QWVbZ2VdfHxBZVtnZV09PT1sdFtnZV18fChEZVtnZV09ImV4cGlyZXMiPT09Z2V8fCJjcmVhdGlvbiI9PT1nZXx8Imxhc3RBY2Nlc3NlZCI9PT1nZT9udWxs''@;'; put 'put ''PT09QWVbZ2VdP251bGw6IkluZmluaXR5Ij09QWVbZ2VdPyJJbmZpbml0eSI6bmV3IERhdGUoQWVbZ2VdKTpBZVtnZV0pfXJldHVybiBEZX1mdW5jdGlvbiBfZShqZSxBZSl7dy52YWxpZGF0ZSh3LmlzT2JqZWN0KGplKSxqZSksdy52YWxpZGF0ZSh3LmlzT2JqZWN0KEFlKSxBZSk7bGV0IERl''@;'; put 'put ''PTA7cmV0dXJuIERlPShBZS5wYXRoP0FlLnBhdGgubGVuZ3RoOjApLShqZS5wYXRoP2plLnBhdGgubGVuZ3RoOjApLDAhPT1EZXx8KERlPShqZS5jcmVhdGlvbj9qZS5jcmVhdGlvbi5nZXRUaW1lKCk6WSktKEFlLmNyZWF0aW9uP0FlLmNyZWF0aW9uLmdldFRpbWUoKTpZKSwwIT09RGV8fChE''@;'; put 'put ''ZT1qZS5jcmVhdGlvbkluZGV4LUFlLmNyZWF0aW9uSW5kZXgpKSxEZX1mdW5jdGlvbiBvdChqZSl7aWYoamUgaW5zdGFuY2VvZiBPYmplY3QpcmV0dXJuIGplO3RyeXtqZT1kZWNvZGVVUkkoamUpfWNhdGNoe31yZXR1cm4gYyhqZSl9Y29uc3QgbHQ9e2tleToiIix2YWx1ZToiIixleHBpcmVz''@;'; put 'put ''OiJJbmZpbml0eSIsbWF4QWdlOm51bGwsZG9tYWluOm51bGwscGF0aDpudWxsLHNlY3VyZTohMSxodHRwT25seTohMSxleHRlbnNpb25zOm51bGwsaG9zdE9ubHk6bnVsbCxwYXRoSXNEZWZhdWx0Om51bGwsY3JlYXRpb246bnVsbCxsYXN0QWNjZXNzZWQ6bnVsbCxzYW1lU2l0ZTp2b2lkIDB9''@;'; put 'put ''O2NsYXNzIGR0e2NvbnN0cnVjdG9yKEFlPXt9KXtjb25zdCBEZT1SKCk7RGUmJih0aGlzW0RlXT10aGlzLmluc3BlY3QpLE9iamVjdC5hc3NpZ24odGhpcyxsdCxBZSksdGhpcy5jcmVhdGlvbj10aGlzLmNyZWF0aW9ufHxuZXcgRGF0ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY3Jl''@;'; put 'put ''YXRpb25JbmRleCIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOisrZHQuY29va2llc0NyZWF0ZWR9KX1pbnNwZWN0KCl7Y29uc3QgQWU9RGF0ZS5ub3coKSxEZT1udWxsIT10aGlzLmhvc3RPbmx5P3RoaXMuaG9zdE9ubHk6Ij8iLEZlPXRoaXMuY3Jl''@;'; put 'put ''YXRpb24/QWUtdGhpcy5jcmVhdGlvbi5nZXRUaW1lKCkrIm1zIjoiPyIsZ2U9dGhpcy5sYXN0QWNjZXNzZWQ/QWUtdGhpcy5sYXN0QWNjZXNzZWQuZ2V0VGltZSgpKyJtcyI6Ij8iO3JldHVybmBDb29raWU9IiR7dGhpcy50b1N0cmluZygpfTsgaG9zdE9ubHk9JHtEZX07IGFBZ2U9JHtnZX07''@;'; put 'put ''IGNBZ2U9JHtGZX0iYH10b0pTT04oKXtjb25zdCBBZT17fTtmb3IoY29uc3QgRGUgb2YgZHQuc2VyaWFsaXphYmxlUHJvcGVydGllcyl0aGlzW0RlXSE9PWx0W0RlXSYmKCJleHBpcmVzIj09PURlfHwiY3JlYXRpb24iPT09RGV8fCJsYXN0QWNjZXNzZWQiPT09RGU/QWVbRGVdPW51bGw9PT10''@;'; put 'put ''aGlzW0RlXT9udWxsOiJJbmZpbml0eSI9PXRoaXNbRGVdPyJJbmZpbml0eSI6dGhpc1tEZV0udG9JU09TdHJpbmcoKToibWF4QWdlIj09PURlP251bGwhPT10aGlzW0RlXSYmKEFlW0RlXT10aGlzW0RlXT09MS8wfHx0aGlzW0RlXT09LTEvMD90aGlzW0RlXS50b1N0cmluZygpOnRoaXNbRGVd''@;'; put 'put ''KTp0aGlzW0RlXSE9PWx0W0RlXSYmKEFlW0RlXT10aGlzW0RlXSkpO3JldHVybiBBZX1jbG9uZSgpe3JldHVybiBuZSh0aGlzLnRvSlNPTigpKX12YWxpZGF0ZSgpe2lmKCF4LnRlc3QodGhpcy52YWx1ZSl8fHRoaXMuZXhwaXJlcyE9MS8wJiYhKHRoaXMuZXhwaXJlcyBpbnN0YW5jZW9mIERh''@;'; put 'put ''dGUpJiYhZih0aGlzLmV4cGlyZXMpfHxudWxsIT10aGlzLm1heEFnZSYmdGhpcy5tYXhBZ2U8PTB8fG51bGwhPXRoaXMucGF0aCYmIVYudGVzdCh0aGlzLnBhdGgpKXJldHVybiExO2NvbnN0IEFlPXRoaXMuY2RvbWFpbigpO3JldHVybiEoQWUmJihBZS5tYXRjaCgvXC4kLyl8fG51bGw9PXMu''@;'; put 'put ''Z2V0UHVibGljU3VmZml4KEFlKSkpfXNldEV4cGlyZXMoQWUpe3RoaXMuZXhwaXJlcz1BZSBpbnN0YW5jZW9mIERhdGU/QWU6ZihBZSl8fCJJbmZpbml0eSJ9c2V0TWF4QWdlKEFlKXt0aGlzLm1heEFnZT1BZT09PTEvMHx8QWU9PT0tMS8wP0FlLnRvU3RyaW5nKCk6QWV9Y29va2llU3RyaW5n''@;'; put 'put ''KCl7bGV0IEFlPXRoaXMudmFsdWU7cmV0dXJuIG51bGw9PUFlJiYoQWU9IiIpLCIiPT09dGhpcy5rZXk/QWU6YCR7dGhpcy5rZXl9PSR7QWV9YH10b1N0cmluZygpe2xldCBBZT10aGlzLmNvb2tpZVN0cmluZygpO2lmKHRoaXMuZXhwaXJlcyE9MS8wJiYodGhpcy5leHBpcmVzIGluc3RhbmNl''@;'; put 'put ''b2YgRGF0ZT9BZSs9YDsgRXhwaXJlcz0ke2IodGhpcy5leHBpcmVzKX1gOkFlKz1gOyBFeHBpcmVzPSR7dGhpcy5leHBpcmVzfWApLG51bGwhPXRoaXMubWF4QWdlJiZ0aGlzLm1heEFnZSE9MS8wJiYoQWUrPWA7IE1heC1BZ2U9JHt0aGlzLm1heEFnZX1gKSx0aGlzLmRvbWFpbiYmIXRoaXMu''@;'; put 'put ''aG9zdE9ubHkmJihBZSs9YDsgRG9tYWluPSR7dGhpcy5kb21haW59YCksdGhpcy5wYXRoJiYoQWUrPWA7IFBhdGg9JHt0aGlzLnBhdGh9YCksdGhpcy5zZWN1cmUmJihBZSs9IjsgU2VjdXJlIiksdGhpcy5odHRwT25seSYmKEFlKz0iOyBIdHRwT25seSIpLHRoaXMuc2FtZVNpdGUmJiJub25l''@;'; put 'put ''IiE9PXRoaXMuc2FtZVNpdGUpe2NvbnN0IERlPWR0LnNhbWVTaXRlQ2Fub25pY2FsW3RoaXMuc2FtZVNpdGUudG9Mb3dlckNhc2UoKV07QWUrPWA7IFNhbWVTaXRlPSR7RGV8fHRoaXMuc2FtZVNpdGV9YH1yZXR1cm4gdGhpcy5leHRlbnNpb25zJiZ0aGlzLmV4dGVuc2lvbnMuZm9yRWFjaChE''@;'; put 'put ''ZT0+e0FlKz1gOyAke0RlfWB9KSxBZX1UVEwoQWUpe2lmKG51bGwhPXRoaXMubWF4QWdlKXJldHVybiB0aGlzLm1heEFnZTw9MD8wOjFlMyp0aGlzLm1heEFnZTtsZXQgRGU9dGhpcy5leHBpcmVzO3JldHVybiBEZSE9MS8wPyhEZSBpbnN0YW5jZW9mIERhdGV8fChEZT1mKERlKXx8MS8wKSxE''@;'; put 'put ''ZT09MS8wPzEvMDpEZS5nZXRUaW1lKCktKEFlfHxEYXRlLm5vdygpKSk6MS8wfWV4cGlyeVRpbWUoQWUpe2lmKG51bGwhPXRoaXMubWF4QWdlKXtjb25zdCBGZT10aGlzLm1heEFnZTw9MD8tMS8wOjFlMyp0aGlzLm1heEFnZTtyZXR1cm4oQWV8fHRoaXMuY3JlYXRpb258fG5ldyBEYXRlKS5n''@;'; put 'put ''ZXRUaW1lKCkrRmV9cmV0dXJuIHRoaXMuZXhwaXJlcz09MS8wPzEvMDp0aGlzLmV4cGlyZXMuZ2V0VGltZSgpfWV4cGlyeURhdGUoQWUpe2NvbnN0IERlPXRoaXMuZXhwaXJ5VGltZShBZSk7cmV0dXJuIERlPT0xLzA/bmV3IERhdGUoWSk6RGU9PS0xLzA/bmV3IERhdGUoMCk6bmV3IERhdGUo''@;'; put 'put ''RGUpfWlzUGVyc2lzdGVudCgpe3JldHVybiBudWxsIT10aGlzLm1heEFnZXx8dGhpcy5leHBpcmVzIT0xLzB9Y2Fub25pY2FsaXplZERvbWFpbigpe3JldHVybiBudWxsPT10aGlzLmRvbWFpbj9udWxsOmsodGhpcy5kb21haW4pfWNkb21haW4oKXtyZXR1cm4gdGhpcy5jYW5vbmljYWxpemVk''@;'; put 'put ''RG9tYWluKCl9fWZ1bmN0aW9uIFJlKGplKXtpZihudWxsIT1qZSl7Y29uc3QgQWU9amUudG9Mb3dlckNhc2UoKTtzd2l0Y2goQWUpe2Nhc2UgcmUuU1RSSUNUOmNhc2UgcmUuU0lMRU5UOmNhc2UgcmUuRElTQUJMRUQ6cmV0dXJuIEFlfX1yZXR1cm4gcmUuU0lMRU5UfWR0LmNvb2tpZXNDcmVh''@;'; put 'put ''dGVkPTAsZHQucGFyc2U9RCxkdC5mcm9tSlNPTj1uZSxkdC5zZXJpYWxpemFibGVQcm9wZXJ0aWVzPU9iamVjdC5rZXlzKGx0KSxkdC5zYW1lU2l0ZUxldmVsPXtzdHJpY3Q6MyxsYXg6Mixub25lOjF9LGR0LnNhbWVTaXRlQ2Fub25pY2FsPXtzdHJpY3Q6IlN0cmljdCIsbGF4OiJMYXgifTtj''@;'; put 'put ''bGFzcyBhZXtjb25zdHJ1Y3RvcihBZSxEZT17cmVqZWN0UHVibGljU3VmZml4ZXM6ITB9KXsiYm9vbGVhbiI9PXR5cGVvZiBEZSYmKERlPXtyZWplY3RQdWJsaWNTdWZmaXhlczpEZX0pLHcudmFsaWRhdGUody5pc09iamVjdChEZSksRGUpLHRoaXMucmVqZWN0UHVibGljU3VmZml4ZXM9RGUu''@;'; put 'put ''cmVqZWN0UHVibGljU3VmZml4ZXMsdGhpcy5lbmFibGVMb29zZU1vZGU9ISFEZS5sb29zZU1vZGUsdGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW49ImJvb2xlYW4iIT10eXBlb2YgRGUuYWxsb3dTcGVjaWFsVXNlRG9tYWlufHxEZS5hbGxvd1NwZWNpYWxVc2VEb21haW4sdGhpcy5zdG9yZT1B''@;'; put 'put ''ZXx8bmV3IHYsdGhpcy5wcmVmaXhTZWN1cml0eT1SZShEZS5wcmVmaXhTZWN1cml0eSksdGhpcy5fY2xvbmVTeW5jPXhlKCJjbG9uZSIpLHRoaXMuX2ltcG9ydENvb2tpZXNTeW5jPXhlKCJfaW1wb3J0Q29va2llcyIpLHRoaXMuZ2V0Q29va2llc1N5bmM9eGUoImdldENvb2tpZXMiKSx0aGlz''@;'; put 'put ''LmdldENvb2tpZVN0cmluZ1N5bmM9eGUoImdldENvb2tpZVN0cmluZyIpLHRoaXMuZ2V0U2V0Q29va2llU3RyaW5nc1N5bmM9eGUoImdldFNldENvb2tpZVN0cmluZ3MiKSx0aGlzLnJlbW92ZUFsbENvb2tpZXNTeW5jPXhlKCJyZW1vdmVBbGxDb29raWVzIiksdGhpcy5zZXRDb29raWVTeW5j''@;'; put 'put ''PXhlKCJzZXRDb29raWUiKSx0aGlzLnNlcmlhbGl6ZVN5bmM9eGUoInNlcmlhbGl6ZSIpfXNldENvb2tpZShBZSxEZSxGZSxnZSl7bGV0IGNlO2lmKHcudmFsaWRhdGUody5pc05vbkVtcHR5U3RyaW5nKERlKSxnZSxGZSksdy5pc0Z1bmN0aW9uKERlKSlyZXR1cm4oZ2U9RGUpKG5ldyBFcnJv''@;'; put 'put ''cigiTm8gVVJMIHdhcyBzcGVjaWZpZWQiKSk7Y29uc3QgaGU9b3QoRGUpO2lmKHcuaXNGdW5jdGlvbihGZSkmJihnZT1GZSxGZT17fSksdy52YWxpZGF0ZSh3LmlzRnVuY3Rpb24oZ2UpLGdlKSwhdy5pc05vbkVtcHR5U3RyaW5nKEFlKSYmIXcuaXNPYmplY3QoQWUpJiZBZSBpbnN0YW5jZW9m''@;'; put 'put ''IFN0cmluZyYmMD09QWUubGVuZ3RoKXJldHVybiBnZShudWxsKTtjb25zdCB3ZT1rKGhlLmhvc3RuYW1lKSxKZT1GZS5sb29zZXx8dGhpcy5lbmFibGVMb29zZU1vZGU7bGV0IHR0PW51bGw7aWYoRmUuc2FtZVNpdGVDb250ZXh0JiYodHQ9cShGZS5zYW1lU2l0ZUNvbnRleHQpLCF0dCkpcmV0''@;'; put 'put ''dXJuIGdlKG5ldyBFcnJvcihXKSk7aWYoInN0cmluZyI9PXR5cGVvZiBBZXx8QWUgaW5zdGFuY2VvZiBTdHJpbmcpe2lmKCEoQWU9ZHQucGFyc2UoQWUse2xvb3NlOkplfSkpKXJldHVybiBjZT1uZXcgRXJyb3IoIkNvb2tpZSBmYWlsZWQgdG8gcGFyc2UiKSxnZShGZS5pZ25vcmVFcnJvcj9u''@;'; put 'put ''dWxsOmNlKX1lbHNlIGlmKCEoQWUgaW5zdGFuY2VvZiBkdCkpcmV0dXJuIGNlPW5ldyBFcnJvcigiRmlyc3QgYXJndW1lbnQgdG8gc2V0Q29va2llIG11c3QgYmUgYSBDb29raWUgb2JqZWN0IG9yIHN0cmluZyIpLGdlKEZlLmlnbm9yZUVycm9yP251bGw6Y2UpO2NvbnN0IEtlPUZlLm5vd3x8''@;'; put 'put ''bmV3IERhdGU7aWYodGhpcy5yZWplY3RQdWJsaWNTdWZmaXhlcyYmQWUuZG9tYWluJiZudWxsPT1zLmdldFB1YmxpY1N1ZmZpeChBZS5jZG9tYWluKCkse2FsbG93U3BlY2lhbFVzZURvbWFpbjp0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbixpZ25vcmVFcnJvcjpGZS5pZ25vcmVFcnJvcn0p''@;'; put 'put ''JiYhSWUudGVzdChBZS5kb21haW4pKXJldHVybiBjZT1uZXcgRXJyb3IoIkNvb2tpZSBoYXMgZG9tYWluIHNldCB0byBhIHB1YmxpYyBzdWZmaXgiKSxnZShGZS5pZ25vcmVFcnJvcj9udWxsOmNlKTtpZihBZS5kb21haW4pe2lmKCFNKHdlLEFlLmNkb21haW4oKSwhMSkpcmV0dXJuIGNlPW5l''@;'; put 'put ''dyBFcnJvcihgQ29va2llIG5vdCBpbiB0aGlzIGhvc3QncyBkb21haW4uIENvb2tpZToke0FlLmNkb21haW4oKX0gUmVxdWVzdDoke3dlfWApLGdlKEZlLmlnbm9yZUVycm9yP251bGw6Y2UpO251bGw9PUFlLmhvc3RPbmx5JiYoQWUuaG9zdE9ubHk9ITEpfWVsc2UgQWUuaG9zdE9ubHk9ITAs''@;'; put 'put ''QWUuZG9tYWluPXdlO2lmKCghQWUucGF0aHx8Ii8iIT09QWUucGF0aFswXSkmJihBZS5wYXRoPUIoaGUucGF0aG5hbWUpLEFlLnBhdGhJc0RlZmF1bHQ9ITApLCExPT09RmUuaHR0cCYmQWUuaHR0cE9ubHkpcmV0dXJuIGNlPW5ldyBFcnJvcigiQ29va2llIGlzIEh0dHBPbmx5IGFuZCB0aGlz''@;'; put 'put ''IGlzbid0IGFuIEhUVFAgQVBJIiksZ2UoRmUuaWdub3JlRXJyb3I/bnVsbDpjZSk7aWYoIm5vbmUiIT09QWUuc2FtZVNpdGUmJnZvaWQgMCE9PUFlLnNhbWVTaXRlJiZ0dCYmIm5vbmUiPT09dHQpcmV0dXJuIGNlPW5ldyBFcnJvcigiQ29va2llIGlzIFNhbWVTaXRlIGJ1dCB0aGlzIGlzIGEg''@;'; put 'put ''Y3Jvc3Mtb3JpZ2luIHJlcXVlc3QiKSxnZShGZS5pZ25vcmVFcnJvcj9udWxsOmNlKTtjb25zdCAkdD10aGlzLnByZWZpeFNlY3VyaXR5PT09cmUuU0lMRU5UO2lmKHRoaXMucHJlZml4U2VjdXJpdHkhPT1yZS5ESVNBQkxFRCl7bGV0IFh0LGd0PSExO2lmKGZ1bmN0aW9uIHAoamUpe3JldHVy''@;'; put 'put ''biB3LnZhbGlkYXRlKHcuaXNPYmplY3QoamUpLGplKSwhamUua2V5LnN0YXJ0c1dpdGgoIl9fU2VjdXJlLSIpfHxqZS5zZWN1cmV9KEFlKT9mdW5jdGlvbiBJKGplKXtyZXR1cm4gdy52YWxpZGF0ZSh3LmlzT2JqZWN0KGplKSksIWplLmtleS5zdGFydHNXaXRoKCJfX0hvc3QtIil8fGplLnNl''@;'; put 'put ''Y3VyZSYmamUuaG9zdE9ubHkmJm51bGwhPWplLnBhdGgmJiIvIj09PWplLnBhdGh9KEFlKXx8KGd0PSEwLFh0PSJDb29raWUgaGFzIF9fSG9zdCBwcmVmaXggYnV0IGVpdGhlciBTZWN1cmUgb3IgSG9zdE9ubHkgYXR0cmlidXRlIGlzIG5vdCBzZXQgb3IgUGF0aCBpcyBub3QgJy8nIik6KGd0''@;'; put 'put ''PSEwLFh0PSJDb29raWUgaGFzIF9fU2VjdXJlIHByZWZpeCBidXQgU2VjdXJlIGF0dHJpYnV0ZSBpcyBub3Qgc2V0IiksZ3QpcmV0dXJuIGdlKEZlLmlnbm9yZUVycm9yfHwkdD9udWxsOm5ldyBFcnJvcihYdCkpfWNvbnN0IEx0PXRoaXMuc3RvcmU7THQudXBkYXRlQ29va2llfHwoTHQudXBk''@;'; put 'put ''YXRlQ29va2llPWZ1bmN0aW9uKGd0LFh0LExyKXt0aGlzLnB1dENvb2tpZShYdCxMcil9KSxMdC5maW5kQ29va2llKEFlLmRvbWFpbixBZS5wYXRoLEFlLmtleSxmdW5jdGlvbiBHdChndCxYdCl7aWYoZ3QpcmV0dXJuIGdlKGd0KTtjb25zdCBMcj1mdW5jdGlvbihsbil7aWYobG4pcmV0dXJu''@;'; put 'put ''IGdlKGxuKTtnZShudWxsLEFlKX07aWYoWHQpe2lmKCExPT09RmUuaHR0cCYmWHQuaHR0cE9ubHkpcmV0dXJuIGd0PW5ldyBFcnJvcigib2xkIENvb2tpZSBpcyBIdHRwT25seSBhbmQgdGhpcyBpc24ndCBhbiBIVFRQIEFQSSIpLGdlKEZlLmlnbm9yZUVycm9yP251bGw6Z3QpO0FlLmNyZWF0''@;'; put 'put ''aW9uPVh0LmNyZWF0aW9uLEFlLmNyZWF0aW9uSW5kZXg9WHQuY3JlYXRpb25JbmRleCxBZS5sYXN0QWNjZXNzZWQ9S2UsTHQudXBkYXRlQ29va2llKFh0LEFlLExyKX1lbHNlIEFlLmNyZWF0aW9uPUFlLmxhc3RBY2Nlc3NlZD1LZSxMdC5wdXRDb29raWUoQWUsTHIpfSl9Z2V0Q29va2llcyhB''@;'; put 'put ''ZSxEZSxGZSl7dy52YWxpZGF0ZSh3LmlzTm9uRW1wdHlTdHJpbmcoQWUpLEZlLEFlKTtjb25zdCBnZT1vdChBZSk7dy5pc0Z1bmN0aW9uKERlKSYmKEZlPURlLERlPXt9KSx3LnZhbGlkYXRlKHcuaXNPYmplY3QoRGUpLEZlLERlKSx3LnZhbGlkYXRlKHcuaXNGdW5jdGlvbihGZSksRmUpO2Nv''@;'; put 'put ''bnN0IGNlPWsoZ2UuaG9zdG5hbWUpLGhlPWdlLnBhdGhuYW1lfHwiLyI7bGV0IHdlPURlLnNlY3VyZTtudWxsPT13ZSYmZ2UucHJvdG9jb2wmJigiaHR0cHM6Ij09Z2UucHJvdG9jb2x8fCJ3c3M6Ij09Z2UucHJvdG9jb2wpJiYod2U9ITApO2xldCBKZT0wO2lmKERlLnNhbWVTaXRlQ29udGV4''@;'; put 'put ''dCl7Y29uc3QgZ3Q9cShEZS5zYW1lU2l0ZUNvbnRleHQpO2lmKEplPWR0LnNhbWVTaXRlTGV2ZWxbZ3RdLCFKZSlyZXR1cm4gRmUobmV3IEVycm9yKFcpKX1sZXQgdHQ9RGUuaHR0cDtudWxsPT10dCYmKHR0PSEwKTtjb25zdCBLZT1EZS5ub3d8fERhdGUubm93KCksJHQ9ITEhPT1EZS5leHBp''@;'; put 'put ''cmUsUnQ9ISFEZS5hbGxQYXRocyxMdD10aGlzLnN0b3JlO2Z1bmN0aW9uIEd0KGd0KXtpZihndC5ob3N0T25seSl7aWYoZ3QuZG9tYWluIT1jZSlyZXR1cm4hMX1lbHNlIGlmKCFNKGNlLGd0LmRvbWFpbiwhMSkpcmV0dXJuITE7cmV0dXJuISghUnQmJiFDKGhlLGd0LnBhdGgpfHxndC5zZWN1''@;'; put 'put ''cmUmJiF3ZXx8Z3QuaHR0cE9ubHkmJiF0dHx8SmUmJmR0LnNhbWVTaXRlTGV2ZWxbZ3Quc2FtZVNpdGV8fCJub25lIl0+SmV8fCR0JiZndC5leHBpcnlUaW1lKCk8PUtlJiYoTHQucmVtb3ZlQ29va2llKGd0LmRvbWFpbixndC5wYXRoLGd0LmtleSwoKT0+e30pLDEpKX1MdC5maW5kQ29va2ll''@;'; put 'put ''cyhjZSxSdD9udWxsOmhlLHRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluLChndCxYdCk9PntpZihndClyZXR1cm4gRmUoZ3QpO1h0PVh0LmZpbHRlcihHdCksITEhPT1EZS5zb3J0JiYoWHQ9WHQuc29ydChfZSkpO2NvbnN0IExyPW5ldyBEYXRlO2Zvcihjb25zdCBsbiBvZiBYdClsbi5sYXN0''@;'; put 'put ''QWNjZXNzZWQ9THI7RmUobnVsbCxYdCl9KX1nZXRDb29raWVTdHJpbmcoLi4uQWUpe2NvbnN0IERlPUFlLnBvcCgpO3cudmFsaWRhdGUody5pc0Z1bmN0aW9uKERlKSxEZSksQWUucHVzaChmdW5jdGlvbihnZSxjZSl7Z2U/RGUoZ2UpOkRlKG51bGwsY2Uuc29ydChfZSkubWFwKGhlPT5oZS5j''@;'; put 'put ''b29raWVTdHJpbmcoKSkuam9pbigiOyAiKSl9KSx0aGlzLmdldENvb2tpZXMuYXBwbHkodGhpcyxBZSl9Z2V0U2V0Q29va2llU3RyaW5ncyguLi5BZSl7Y29uc3QgRGU9QWUucG9wKCk7dy52YWxpZGF0ZSh3LmlzRnVuY3Rpb24oRGUpLERlKSxBZS5wdXNoKGZ1bmN0aW9uKGdlLGNlKXtnZT9E''@;'; put 'put ''ZShnZSk6RGUobnVsbCxjZS5tYXAoaGU9PmhlLnRvU3RyaW5nKCkpKX0pLHRoaXMuZ2V0Q29va2llcy5hcHBseSh0aGlzLEFlKX1zZXJpYWxpemUoQWUpe3cudmFsaWRhdGUody5pc0Z1bmN0aW9uKEFlKSxBZSk7bGV0IERlPXRoaXMuc3RvcmUuY29uc3RydWN0b3IubmFtZTt3LmlzT2JqZWN0''@;'; put 'put ''KERlKSYmKERlPW51bGwpO2NvbnN0IEZlPXt2ZXJzaW9uOmB0b3VnaC1jb29raWVAJHtTfWAsc3RvcmVUeXBlOkRlLHJlamVjdFB1YmxpY1N1ZmZpeGVzOiEhdGhpcy5yZWplY3RQdWJsaWNTdWZmaXhlcyxlbmFibGVMb29zZU1vZGU6ISF0aGlzLmVuYWJsZUxvb3NlTW9kZSxhbGxvd1NwZWNp''@;'; put 'put ''YWxVc2VEb21haW46ISF0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbixwcmVmaXhTZWN1cml0eTpSZSh0aGlzLnByZWZpeFNlY3VyaXR5KSxjb29raWVzOltdfTtpZighdGhpcy5zdG9yZS5nZXRBbGxDb29raWVzfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5zdG9yZS5nZXRBbGxDb29raWVz''@;'; put 'put ''KXJldHVybiBBZShuZXcgRXJyb3IoInN0b3JlIGRvZXMgbm90IHN1cHBvcnQgZ2V0QWxsQ29va2llcyBhbmQgY2Fubm90IGJlIHNlcmlhbGl6ZWQiKSk7dGhpcy5zdG9yZS5nZXRBbGxDb29raWVzKChnZSxjZSk9PmdlP0FlKGdlKTooRmUuY29va2llcz1jZS5tYXAoaGU9PihkZWxldGUoaGU9''@;'; put 'put ''aGUgaW5zdGFuY2VvZiBkdD9oZS50b0pTT04oKTpoZSkuY3JlYXRpb25JbmRleCxoZSkpLEFlKG51bGwsRmUpKSl9dG9KU09OKCl7cmV0dXJuIHRoaXMuc2VyaWFsaXplU3luYygpfV9pbXBvcnRDb29raWVzKEFlLERlKXtsZXQgRmU9QWUuY29va2llcztpZighRmV8fCFBcnJheS5pc0FycmF5''@;'; put 'put ''KEZlKSlyZXR1cm4gRGUobmV3IEVycm9yKCJzZXJpYWxpemVkIGphciBoYXMgbm8gY29va2llcyBhcnJheSIpKTtGZT1GZS5zbGljZSgpO2NvbnN0IGdlPWNlPT57aWYoY2UpcmV0dXJuIERlKGNlKTtpZighRmUubGVuZ3RoKXJldHVybiBEZShjZSx0aGlzKTtsZXQgaGU7dHJ5e2hlPW5lKEZl''@;'; put 'put ''LnNoaWZ0KCkpfWNhdGNoKHdlKXtyZXR1cm4gRGUod2UpfWlmKG51bGw9PT1oZSlyZXR1cm4gZ2UobnVsbCk7dGhpcy5zdG9yZS5wdXRDb29raWUoaGUsZ2UpfTtnZSgpfWNsb25lKEFlLERlKXsxPT09YXJndW1lbnRzLmxlbmd0aCYmKERlPUFlLEFlPW51bGwpLHRoaXMuc2VyaWFsaXplKChG''@;'; put 'put ''ZSxnZSk9PntpZihGZSlyZXR1cm4gRGUoRmUpO2FlLmRlc2VyaWFsaXplKGdlLEFlLERlKX0pfWNsb25lU3luYyhBZSl7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX2Nsb25lU3luYygpO2lmKCFBZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBj''@;'; put 'put ''bG9uZSBkZXN0aW5hdGlvbiBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpcy5fY2xvbmVTeW5jKEFlKX1yZW1vdmVBbGxDb29raWVzKEFlKXt3LnZhbGlkYXRlKHcuaXNGdW5jdGlvbihBZSksQWUpO2NvbnN0IERlPXRoaXMuc3Rv''@;'; put 'put ''cmU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIERlLnJlbW92ZUFsbENvb2tpZXMmJkRlLnJlbW92ZUFsbENvb2tpZXMhPT1BLnByb3RvdHlwZS5yZW1vdmVBbGxDb29raWVzKXJldHVybiBEZS5yZW1vdmVBbGxDb29raWVzKEFlKTtEZS5nZXRBbGxDb29raWVzKChGZSxnZSk9PntpZihGZSlyZXR1''@;'; put 'put ''cm4gQWUoRmUpO2lmKDA9PT1nZS5sZW5ndGgpcmV0dXJuIEFlKG51bGwpO2xldCBjZT0wO2NvbnN0IGhlPVtdO2Z1bmN0aW9uIHdlKEplKXtpZihKZSYmaGUucHVzaChKZSksY2UrKyxjZT09PWdlLmxlbmd0aClyZXR1cm4gQWUoaGUubGVuZ3RoP2hlWzBdOm51bGwpfWdlLmZvckVhY2goSmU9''@;'; put 'put ''PntEZS5yZW1vdmVDb29raWUoSmUuZG9tYWluLEplLnBhdGgsSmUua2V5LHdlKX0pfSl9c3RhdGljIGRlc2VyaWFsaXplKEFlLERlLEZlKXtsZXQgZ2U7aWYoMyE9PWFyZ3VtZW50cy5sZW5ndGgmJihGZT1EZSxEZT1udWxsKSx3LnZhbGlkYXRlKHcuaXNGdW5jdGlvbihGZSksRmUpLCJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgQWUpe2lmKGdlPXVlKEFlKSxnZSBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBGZShnZSl9ZWxzZSBnZT1BZTtjb25zdCBjZT1uZXcgYWUoRGUse3JlamVjdFB1YmxpY1N1ZmZpeGVzOmdlLnJlamVjdFB1YmxpY1N1ZmZpeGVzLGxvb3NlTW9kZTpnZS5lbmFibGVMb29zZU1v''@;'; put 'put ''ZGUsYWxsb3dTcGVjaWFsVXNlRG9tYWluOmdlLmFsbG93U3BlY2lhbFVzZURvbWFpbixwcmVmaXhTZWN1cml0eTpnZS5wcmVmaXhTZWN1cml0eX0pO2NlLl9pbXBvcnRDb29raWVzKGdlLGhlPT57aWYoaGUpcmV0dXJuIEZlKGhlKTtGZShudWxsLGNlKX0pfXN0YXRpYyBkZXNlcmlhbGl6ZVN5''@;'; put 'put ''bmMoQWUsRGUpe2NvbnN0IEZlPSJzdHJpbmciPT10eXBlb2YgQWU/SlNPTi5wYXJzZShBZSk6QWUsZ2U9bmV3IGFlKERlLHtyZWplY3RQdWJsaWNTdWZmaXhlczpGZS5yZWplY3RQdWJsaWNTdWZmaXhlcyxsb29zZU1vZGU6RmUuZW5hYmxlTG9vc2VNb2RlfSk7aWYoIWdlLnN0b3JlLnN5bmNo''@;'; put 'put ''cm9ub3VzKXRocm93IG5ldyBFcnJvcigiQ29va2llSmFyIHN0b3JlIGlzIG5vdCBzeW5jaHJvbm91czsgdXNlIGFzeW5jIEFQSSBpbnN0ZWFkLiIpO3JldHVybiBnZS5faW1wb3J0Q29va2llc1N5bmMoRmUpLGdlfX1mdW5jdGlvbiB4ZShqZSl7cmV0dXJuIGZ1bmN0aW9uKC4uLkFlKXtpZigh''@;'; put 'put ''dGhpcy5zdG9yZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtsZXQgRGUsRmU7aWYodGhpc1tqZV0oLi4uQWUsKGdlLGNlKT0+e0RlPWdlLEZlPWNlfSksRGUpdGhyb3cgRGU7''@;'; put 'put ''cmV0dXJuIEZlfX1hZS5mcm9tSlNPTj1hZS5kZXNlcmlhbGl6ZVN5bmMsWyJfaW1wb3J0Q29va2llcyIsImNsb25lIiwiZ2V0Q29va2llcyIsImdldENvb2tpZVN0cmluZyIsImdldFNldENvb2tpZVN0cmluZ3MiLCJyZW1vdmVBbGxDb29raWVzIiwic2VyaWFsaXplIiwic2V0Q29va2llIl0u''@;'; put 'put ''Zm9yRWFjaChqZT0+e2FlLnByb3RvdHlwZVtqZV09TChhZS5wcm90b3R5cGVbamVdKX0pLGFlLmRlc2VyaWFsaXplPUwoYWUuZGVzZXJpYWxpemUpLGoudmVyc2lvbj1TLGouQ29va2llSmFyPWFlLGouQ29va2llPWR0LGouU3RvcmU9QSxqLk1lbW9yeUNvb2tpZVN0b3JlPXYsai5wYXJzZURh''@;'; put 'put ''dGU9ZixqLmZvcm1hdERhdGU9YixqLnBhcnNlPUQsai5mcm9tSlNPTj1uZSxqLmRvbWFpbk1hdGNoPU0sai5kZWZhdWx0UGF0aD1CLGoucGF0aE1hdGNoPUMsai5nZXRQdWJsaWNTdWZmaXg9cy5nZXRQdWJsaWNTdWZmaXgsai5jb29raWVDb21wYXJlPV9lLGoucGVybXV0ZURvbWFpbj1oKDM3''@;'; put 'put ''NzkxKS5wZXJtdXRlRG9tYWluLGoucGVybXV0ZVBhdGg9ZnVuY3Rpb24gUGUoamUpe2lmKHcudmFsaWRhdGUody5pc1N0cmluZyhqZSkpLCIvIj09PWplKXJldHVyblsiLyJdO2NvbnN0IEFlPVtqZV07Zm9yKDtqZS5sZW5ndGg+MTspe2NvbnN0IERlPWplLmxhc3RJbmRleE9mKCIvIik7aWYo''@;'; put 'put ''MD09PURlKWJyZWFrO2plPWplLnN1YnN0cigwLERlKSxBZS5wdXNoKGplKX1yZXR1cm4gQWUucHVzaCgiLyIpLEFlfSxqLmNhbm9uaWNhbERvbWFpbj1rLGouUHJlZml4U2VjdXJpdHlFbnVtPXJlLGouUGFyYW1ldGVyRXJyb3I9dy5QYXJhbWV0ZXJFcnJvcn0sODI2OTEoZmUsaixoKXsidXNl''@;'; put 'put ''IHN0cmljdCI7Y29uc3R7ZnJvbUNhbGxiYWNrOmN9PWgoMTg5NjQpLHM9aCg5NDgzNikuaSxBPWgoMzc3OTEpLnBlcm11dGVEb21haW4sdj1oKDc1MzIxKS56LHtnZXRDdXN0b21JbnNwZWN0U3ltYm9sOkMsZ2V0VXRpbEluc3BlY3Q6d309aCgyOTkyMSk7Y2xhc3MgUyBleHRlbmRzIHN7Y29u''@;'; put 'put ''c3RydWN0b3IoKXtzdXBlcigpLHRoaXMuc3luY2hyb25vdXM9ITAsdGhpcy5pZHg9T2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBIPUMoKTtIJiYodGhpc1tIXT10aGlzLmluc3BlY3QpfWluc3BlY3QoKXtyZXR1cm5geyBpZHg6ICR7dyhMKSh0aGlzLmlkeCwhMSwyKX0gfWB9ZmluZENvb2tp''@;'; put 'put ''ZShILFYsTix6KXtyZXR1cm4geihudWxsLHRoaXMuaWR4W0hdJiZ0aGlzLmlkeFtIXVtWXT90aGlzLmlkeFtIXVtWXVtOXXx8bnVsbDp2b2lkIDApfWZpbmRDb29raWVzKEgsVixOLHope2NvbnN0IFk9W107aWYoImZ1bmN0aW9uIj09dHlwZW9mIE4mJih6PU4sTj0hMCksIUgpcmV0dXJuIHoo''@;'; put 'put ''bnVsbCxbXSk7bGV0IEY7Rj1WP2Z1bmN0aW9uKG1lKXtPYmplY3Qua2V5cyhtZSkuZm9yRWFjaChDZT0+e2lmKHYoVixDZSkpe2NvbnN0IEllPW1lW0NlXTtmb3IoY29uc3Qga2UgaW4gSWUpWS5wdXNoKEllW2tlXSl9fSl9OmZ1bmN0aW9uKG1lKXtmb3IoY29uc3QgQ2UgaW4gbWUpe2NvbnN0''@;'; put 'put ''IEllPW1lW0NlXTtmb3IoY29uc3Qga2UgaW4gSWUpWS5wdXNoKEllW2tlXSl9fTtjb25zdCBXPUEoSCxOKXx8W0hdLHE9dGhpcy5pZHg7Vy5mb3JFYWNoKHJlPT57Y29uc3QgbWU9cVtyZV07bWUmJkYobWUpfSkseihudWxsLFkpfXB1dENvb2tpZShILFYpe3RoaXMuaWR4W0guZG9tYWluXXx8''@;'; put 'put ''KHRoaXMuaWR4W0guZG9tYWluXT1PYmplY3QuY3JlYXRlKG51bGwpKSx0aGlzLmlkeFtILmRvbWFpbl1bSC5wYXRoXXx8KHRoaXMuaWR4W0guZG9tYWluXVtILnBhdGhdPU9iamVjdC5jcmVhdGUobnVsbCkpLHRoaXMuaWR4W0guZG9tYWluXVtILnBhdGhdW0gua2V5XT1ILFYobnVsbCl9dXBk''@;'; put 'put ''YXRlQ29va2llKEgsVixOKXt0aGlzLnB1dENvb2tpZShWLE4pfXJlbW92ZUNvb2tpZShILFYsTix6KXt0aGlzLmlkeFtIXSYmdGhpcy5pZHhbSF1bVl0mJnRoaXMuaWR4W0hdW1ZdW05dJiZkZWxldGUgdGhpcy5pZHhbSF1bVl1bTl0seihudWxsKX1yZW1vdmVDb29raWVzKEgsVixOKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5pZHhbSF0mJihWP2RlbGV0ZSB0aGlzLmlkeFtIXVtWXTpkZWxldGUgdGhpcy5pZHhbSF0pLE4obnVsbCl9cmVtb3ZlQWxsQ29va2llcyhIKXtyZXR1cm4gdGhpcy5pZHg9T2JqZWN0LmNyZWF0ZShudWxsKSxIKG51bGwpfWdldEFsbENvb2tpZXMoSCl7Y29uc3QgVj1bXSxOPXRo''@;'; put 'put ''aXMuaWR4O09iamVjdC5rZXlzKE4pLmZvckVhY2goWT0+e09iamVjdC5rZXlzKE5bWV0pLmZvckVhY2goVz0+e09iamVjdC5rZXlzKE5bWV1bV10pLmZvckVhY2gocmU9PntudWxsIT09cmUmJlYucHVzaChOW1ldW1ddW3JlXSl9KX0pfSksVi5zb3J0KChZLEYpPT4oWS5jcmVhdGlvbkluZGV4''@;'; put 'put ''fHwwKS0oRi5jcmVhdGlvbkluZGV4fHwwKSksSChudWxsLFYpfX1mdW5jdGlvbiBMKFUpe2NvbnN0IEg9T2JqZWN0LmtleXMoVSk7aWYoMD09PUgubGVuZ3RoKXJldHVybiJbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge30iO2xldCBWPSJbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge1xuIjty''@;'; put 'put ''ZXR1cm4gT2JqZWN0LmtleXMoVSkuZm9yRWFjaCgoTix6KT0+e1YrPWZ1bmN0aW9uIFIoVSxIKXtsZXQgTj1gICAnJHtVfSc6IFtPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7XG5gO3JldHVybiBPYmplY3Qua2V5cyhIKS5mb3JFYWNoKCh6LFksRik9PntOKz1mdW5jdGlvbiB4KFUsSCl7Y29u''@;'; put 'put ''c3QgVj0iICAgICI7bGV0IE49YCR7Vn0nJHtVfSc6IFtPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7XG5gO3JldHVybiBPYmplY3Qua2V5cyhIKS5mb3JFYWNoKCh6LFksRik9PntOKz1gICAgICAgJHt6fTogJHtIW3pdLmluc3BlY3QoKX1gLFk8Ri5sZW5ndGgtMSYmKE4rPSIsIiksTis9Ilxu''@;'; put 'put ''In0pLE4rPWAke1Z9fWAsTn0oeixIW3pdKSxZPEYubGVuZ3RoLTEmJihOKz0iLCIpLE4rPSJcbiJ9KSxOKz0iICB9IixOfShOLFVbTl0pLHo8SC5sZW5ndGgtMSYmKFYrPSIsIiksVis9IlxuIn0pLFYrPSJ9IixWfVsiZmluZENvb2tpZSIsImZpbmRDb29raWVzIiwicHV0Q29va2llIiwidXBk''@;'; put 'put ''YXRlQ29va2llIiwicmVtb3ZlQ29va2llIiwicmVtb3ZlQ29va2llcyIsInJlbW92ZUFsbENvb2tpZXMiLCJnZXRBbGxDb29raWVzIl0uZm9yRWFjaChVPT57Uy5wcm90b3R5cGVbVV09YyhTLnByb3RvdHlwZVtVXSl9KSxqLm49U30sNzUzMjEoZmUsail7InVzZSBzdHJpY3QiO2ouej1mdW5j''@;'; put 'put ''dGlvbiBoKHksYyl7cmV0dXJuIGM9PT15fHwwPT09eS5pbmRleE9mKGMpJiYoIi8iPT09Yy5zdWJzdHIoLTEpfHwiLyI9PT15LnN1YnN0cihjLmxlbmd0aCwxKSl9fSwzNzc5MShmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijtjb25zdCB5PWgoNjExNzcpO2oucGVybXV0ZURvbWFpbj1mdW5jdGlvbiBj''@;'; put 'put ''KHMsQSl7Y29uc3Qgdj15LmdldFB1YmxpY1N1ZmZpeChzLHthbGxvd1NwZWNpYWxVc2VEb21haW46QX0pO2lmKCF2KXJldHVybiBudWxsO2lmKHY9PXMpcmV0dXJuW3NdOyIuIj09cy5zbGljZSgtMSkmJihzPXMuc2xpY2UoMCwtMSkpO2NvbnN0IHc9cy5zbGljZSgwLC0odi5sZW5ndGgrMSkp''@;'; put 'put ''LnNwbGl0KCIuIikucmV2ZXJzZSgpO2xldCBTPXY7Y29uc3QgTD1bU107Zm9yKDt3Lmxlbmd0aDspUz1gJHt3LnNoaWZ0KCl9LiR7U31gLEwucHVzaChTKTtyZXR1cm4gTH19LDYxMTc3KGZlLGosaCl7InVzZSBzdHJpY3QiO2NvbnN0IHk9aCg1NzAzNCksYz1bImxvY2FsIiwiZXhhbXBsZSIs''@;'; put 'put ''ImludmFsaWQiLCJsb2NhbGhvc3QiLCJ0ZXN0Il0scz1bImxvY2FsaG9zdCIsImludmFsaWQiXTtqLmdldFB1YmxpY1N1ZmZpeD1mdW5jdGlvbiBBKHYsQz17fSl7Y29uc3Qgdz12LnNwbGl0KCIuIiksUz13W3cubGVuZ3RoLTFdLFI9ISFDLmlnbm9yZUVycm9yO2lmKEMuYWxsb3dTcGVjaWFs''@;'; put 'put ''VXNlRG9tYWluJiZjLmluY2x1ZGVzKFMpKXtpZih3Lmxlbmd0aD4xKXJldHVybmAke3dbdy5sZW5ndGgtMl19LiR7U31gO2lmKHMuaW5jbHVkZXMoUykpcmV0dXJuYCR7U31gfWlmKCFSJiZjLmluY2x1ZGVzKFMpKXRocm93IG5ldyBFcnJvcihgQ29va2llIGhhcyBkb21haW4gc2V0IHRvIHRo''@;'; put 'put ''ZSBwdWJsaWMgc3VmZml4ICIke1N9IiB3aGljaCBpcyBhIHNwZWNpYWwgdXNlIGRvbWFpbi4gVG8gYWxsb3cgdGhpcywgY29uZmlndXJlIHlvdXIgQ29va2llSmFyIHdpdGgge2FsbG93U3BlY2lhbFVzZURvbWFpbjp0cnVlLCByZWplY3RQdWJsaWNTdWZmaXhlczogZmFsc2V9LmApO3JldHVy''@;'; put 'put ''biB5LmdldCh2KX19LDk0ODM2KGZlLGopeyJ1c2Ugc3RyaWN0IjtqLmk9Y2xhc3MgaHtjb25zdHJ1Y3Rvcigpe3RoaXMuc3luY2hyb25vdXM9ITF9ZmluZENvb2tpZShjLHMsQSx2KXt0aHJvdyBuZXcgRXJyb3IoImZpbmRDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9ZmluZENvb2tpZXMo''@;'; put 'put ''YyxzLEEsdil7dGhyb3cgbmV3IEVycm9yKCJmaW5kQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQiKX1wdXRDb29raWUoYyxzKXt0aHJvdyBuZXcgRXJyb3IoInB1dENvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX11cGRhdGVDb29raWUoYyxzLEEpe3Rocm93IG5ldyBFcnJvcigidXBkYXRl''@;'; put 'put ''Q29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXJlbW92ZUNvb2tpZShjLHMsQSx2KXt0aHJvdyBuZXcgRXJyb3IoInJlbW92ZUNvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX1yZW1vdmVDb29raWVzKGMscyxBKXt0aHJvdyBuZXcgRXJyb3IoInJlbW92ZUNvb2tpZXMgaXMgbm90IGltcGxl''@;'; put 'put ''bWVudGVkIil9cmVtb3ZlQWxsQ29va2llcyhjKXt0aHJvdyBuZXcgRXJyb3IoInJlbW92ZUFsbENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkIil9Z2V0QWxsQ29va2llcyhjKXt0aHJvdyBuZXcgRXJyb3IoImdldEFsbENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkICh0aGVyZWZvcmUgamFy''@;'; put 'put ''IGNhbm5vdCBiZSBzZXJpYWxpemVkKSIpfX19LDI5OTIxKGZlLGosaCl7ZnVuY3Rpb24geSgpe3RyeXtyZXR1cm4gaCg0MDUzNyl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGMoKXtyZXR1cm4gU3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKX1qLmdldFV0aWxJ''@;'; put 'put ''bnNwZWN0PWZ1bmN0aW9uKHYsQz17fSl7Y29uc3QgUz0oQy5yZXF1aXJlVXRpbHx8eSkoKTtyZXR1cm4gZnVuY3Rpb24oUix4LFUpe3JldHVybiBTP1MuaW5zcGVjdChSLHgsVSk6dihSKX19LGouZ2V0Q3VzdG9tSW5zcGVjdFN5bWJvbD1mdW5jdGlvbih2PXt9KXtyZXR1cm4odi5sb29rdXBD''@;'; put 'put ''dXN0b21JbnNwZWN0U3ltYm9sfHxjKSgpfHxmdW5jdGlvbiBzKEEpe2NvbnN0IEM9KEEucmVxdWlyZVV0aWx8fHkpKCk7cmV0dXJuIEM/Qy5pbnNwZWN0LmN1c3RvbTpudWxsfSh2KX19LDgyOTgyKGZlLGopeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBoKFIpe3JldHVybiJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBSfWZ1bmN0aW9uIEEoUil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBSfHxSIGluc3RhbmNlb2YgU3RyaW5nfWZ1bmN0aW9uIHYoUil7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT10b1N0cmluZy5jYWxsKFIpfWNsYXNzIEwgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvciguLi54KXtz''@;'; put 'put ''dXBlciguLi54KX19ai5QYXJhbWV0ZXJFcnJvcj1MLGouaXNGdW5jdGlvbj1oLGouaXNOb25FbXB0eVN0cmluZz1mdW5jdGlvbiB5KFIpe3JldHVybiBBKFIpJiYiIiE9PVJ9LGouaXNEYXRlPWZ1bmN0aW9uIGMoUil7cmV0dXJuIGZ1bmN0aW9uIEMoUix4KXt0cnl7cmV0dXJuIFIgaW5zdGFu''@;'; put 'put ''Y2VvZiB4fWNhdGNoe3JldHVybiExfX0oUixEYXRlKSYmZnVuY3Rpb24gdyhSKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIFImJlIlMT09MH0oUi5nZXRUaW1lKCkpfSxqLmlzRW1wdHlTdHJpbmc9ZnVuY3Rpb24gcyhSKXtyZXR1cm4iIj09PVJ8fFIgaW5zdGFuY2VvZiBTdHJpbmcmJiIiPT09''@;'; put 'put ''Ui50b1N0cmluZygpfSxqLmlzU3RyaW5nPUEsai5pc09iamVjdD12LGoudmFsaWRhdGU9ZnVuY3Rpb24gUyhSLHgsVSl7aWYoaCh4KXx8KFU9eCx4PW51bGwpLHYoVSl8fChVPXtFcnJvcjoiRmFpbGVkIENoZWNrIn0pLCFSKXtpZigheCl0aHJvdyBuZXcgTChVKTt4KG5ldyBMKFUpKX19fSw2''@;'; put 'put ''MzA5MyhmZSl7ZmUuZXhwb3J0cz0iNC4xLjMifSwxODg3NShmZSxqLGgpeyJ1c2Ugc3RyaWN0IjtoLnIoaiksaC5kKGose3VjczJkZWNvZGU6KCk9PnF9KTtjb25zdCB5PTIxNDc0ODM2NDcsYz0zNixSPS9eeG4tLS8seD0vW15cMC1ceDdGXS8sVT0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFd''@;'; put 'put ''L2csSD17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0sTj1NYXRo''@;'; put 'put ''LmZsb29yLHo9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBZKE0pe3Rocm93IG5ldyBSYW5nZUVycm9yKEhbTV0pfWZ1bmN0aW9uIFcoTSxCKXtjb25zdCBLPU0uc3BsaXQoIkAiKTtsZXQgRz0iIjtLLmxlbmd0aD4xJiYoRz1LWzBdKyJAIixNPUtbMV0pO2NvbnN0IHA9ZnVuY3Rpb24g''@;'; put 'put ''RihNLEIpe2NvbnN0IEs9W107bGV0IEc9TS5sZW5ndGg7Zm9yKDtHLS07KUtbR109QihNW0ddKTtyZXR1cm4gS30oKE09TS5yZXBsYWNlKFUsIi4iKSkuc3BsaXQoIi4iKSxCKS5qb2luKCIuIik7cmV0dXJuIEcrcH1mdW5jdGlvbiBxKE0pe2NvbnN0IEI9W107bGV0IEs9MDtjb25zdCBHPU0u''@;'; put 'put ''bGVuZ3RoO2Zvcig7SzxHOyl7Y29uc3QgRD1NLmNoYXJDb2RlQXQoSysrKTtpZihEPj01NTI5NiYmRDw9NTYzMTkmJks8Ryl7Y29uc3QgcD1NLmNoYXJDb2RlQXQoSysrKTs1NjMyMD09KDY0NTEyJnApP0IucHVzaCgoKDEwMjMmRCk8PDEwKSsoMTAyMyZwKSs2NTUzNik6KEIucHVzaChEKSxL''@;'; put 'put ''LS0pfWVsc2UgQi5wdXNoKEQpfXJldHVybiBCfWNvbnN0IHJlPU09PlN0cmluZy5mcm9tQ29kZVBvaW50KC4uLk0pLG1lPWZ1bmN0aW9uKE0pe3JldHVybiBNPj00OCYmTTw1OD9NLTQ4KzI2Ok0+PTY1JiZNPDkxP00tNjU6TT49OTcmJk08MTIzP00tOTc6Y30sQ2U9ZnVuY3Rpb24oTSxCKXty''@;'; put 'put ''ZXR1cm4gTSsyMis3NSooTTwyNiktKCgwIT1CKTw8NSl9LEllPWZ1bmN0aW9uKE0sQixLKXtsZXQgRz0wO2ZvcihNPUs/TihNLzcwMCk6TT4+MSxNKz1OKE0vQik7TT40NTU7Rys9YylNPU4oTS8zNSk7cmV0dXJuIE4oRyszNipNLyhNKzM4KSl9LGtlPWZ1bmN0aW9uKE0pe2NvbnN0IEI9W10s''@;'; put 'put ''Sz1NLmxlbmd0aDtsZXQgRz0wLEQ9MTI4LHA9NzIsST1NLmxhc3RJbmRleE9mKCItIik7STwwJiYoST0wKTtmb3IobGV0IHVlPTA7dWU8STsrK3VlKU0uY2hhckNvZGVBdCh1ZSk+PTEyOCYmWSgibm90LWJhc2ljIiksQi5wdXNoKE0uY2hhckNvZGVBdCh1ZSkpO2ZvcihsZXQgdWU9ST4wP0kr''@;'; put 'put ''MTowO3VlPEs7KXtjb25zdCBuZT1HO2ZvcihsZXQgUGU9MSxvdD1jOztvdCs9Yyl7dWU+PUsmJlkoImludmFsaWQtaW5wdXQiKTtjb25zdCBsdD1tZShNLmNoYXJDb2RlQXQodWUrKykpO2x0Pj1jJiZZKCJpbnZhbGlkLWlucHV0IiksbHQ+TigoeS1HKS9QZSkmJlkoIm92ZXJmbG93IiksRys9''@;'; put 'put ''bHQqUGU7Y29uc3QgZHQ9b3Q8PXA/MTpvdD49cCsyNj8yNjpvdC1wO2lmKGx0PGR0KWJyZWFrO2NvbnN0IFJlPWMtZHQ7UGU+Tih5L1JlKSYmWSgib3ZlcmZsb3ciKSxQZSo9UmV9Y29uc3QgX2U9Qi5sZW5ndGgrMTtwPUllKEctbmUsX2UsMD09bmUpLE4oRy9fZSk+eS1EJiZZKCJvdmVyZmxv''@;'; put 'put ''dyIpLEQrPU4oRy9fZSksRyU9X2UsQi5zcGxpY2UoRysrLDAsRCl9cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLkIpfSxxZT1mdW5jdGlvbihNKXtjb25zdCBCPVtdLEs9KE09cShNKSkubGVuZ3RoO2xldCBHPTEyOCxEPTAscD03Mjtmb3IoY29uc3QgbmUgb2YgTSluZTwxMjgmJkIu''@;'; put 'put ''cHVzaCh6KG5lKSk7Y29uc3QgST1CLmxlbmd0aDtsZXQgdWU9STtmb3IoSSYmQi5wdXNoKCItIik7dWU8Szspe2xldCBuZT15O2Zvcihjb25zdCBQZSBvZiBNKVBlPj1HJiZQZTxuZSYmKG5lPVBlKTtjb25zdCBfZT11ZSsxO25lLUc+TigoeS1EKS9fZSkmJlkoIm92ZXJmbG93IiksRCs9KG5l''@;'; put 'put ''LUcpKl9lLEc9bmU7Zm9yKGNvbnN0IFBlIG9mIE0paWYoUGU8RyYmKytEPnkmJlkoIm92ZXJmbG93IiksUGU9PT1HKXtsZXQgb3Q9RDtmb3IobGV0IGx0PWM7O2x0Kz1jKXtjb25zdCBkdD1sdDw9cD8xOmx0Pj1wKzI2PzI2Omx0LXA7aWYob3Q8ZHQpYnJlYWs7Y29uc3QgUmU9b3QtZHQsYWU9''@;'; put 'put ''Yy1kdDtCLnB1c2goeihDZShkdCtSZSVhZSwwKSkpLG90PU4oUmUvYWUpfUIucHVzaCh6KENlKG90LDApKSkscD1JZShELF9lLHVlPT09SSksRD0wLCsrdWV9KytELCsrR31yZXR1cm4gQi5qb2luKCIiKX0sWD1mdW5jdGlvbihNKXtyZXR1cm4gVyhNLGZ1bmN0aW9uKEIpe3JldHVybiBSLnRl''@;'; put 'put ''c3QoQik/a2UoQi5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKTpCfSl9LGY9ZnVuY3Rpb24oTSl7cmV0dXJuIFcoTSxmdW5jdGlvbihCKXtyZXR1cm4geC50ZXN0KEIpPyJ4bi0tIitxZShCKTpCfSl9O2guZChqLFsiZGVjb2RlIiwwLGtlLCJkZWZhdWx0IiwwLHt2ZXJzaW9uOiIyLjMuMSIsdWNz''@;'; put 'put ''Mjp7ZGVjb2RlOnEsZW5jb2RlOnJlfSxkZWNvZGU6a2UsZW5jb2RlOnFlLHRvQVNDSUk6Zix0b1VuaWNvZGU6WH0sImVuY29kZSIsMCxxZSwidG9BU0NJSSIsMCxmLCJ0b1VuaWNvZGUiLDAsWCwidWNzMmVuY29kZSIsMCxyZV0pfSwxODk2NChmZSxqKXsidXNlIHN0cmljdCI7ai5mcm9tQ2Fs''@;'; put 'put ''bGJhY2s9ZnVuY3Rpb24oeSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbigpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSlyZXR1cm4gbmV3IFByb21pc2UoKGMscyk9Pnthcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aF09''@;'; put 'put ''KEEsdik9PntpZihBKXJldHVybiBzKEEpO2Modil9LGFyZ3VtZW50cy5sZW5ndGgrKyx5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pO3kuYXBwbHkodGhpcyxhcmd1bWVudHMpfSwibmFtZSIse3ZhbHVlOnkubmFtZX0pfX0sNDUzNzIoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9dGhpcyYm''@;'; put 'put ''dGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHYsQyx3LFMpe3JldHVybiBuZXcod3x8KHc9UHJvbWlzZSkpKGZ1bmN0aW9uKFIseCl7ZnVuY3Rpb24gVShOKXt0cnl7VihTLm5leHQoTikpfWNhdGNoKHope3goeil9fWZ1bmN0aW9uIEgoTil7dHJ5e1YoUy50aHJvdyhOKSl9Y2F0Y2goeil7eCh6''@;'; put 'put ''KX19ZnVuY3Rpb24gVihOKXtOLmRvbmU/UihOLnZhbHVlKTpmdW5jdGlvbiBMKFIpe3JldHVybiBSIGluc3RhbmNlb2Ygdz9SOm5ldyB3KGZ1bmN0aW9uKHgpe3goUil9KX0oTi52YWx1ZSkudGhlbihVLEgpfVYoKFM9Uy5hcHBseSh2LEN8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5Db250ZXh0TWFuYWdlcj12b2lkIDA7Y29uc3QgYz1oKDI5MjY2KSxzPWgoNjM0MCk7ai5Db250ZXh0TWFuYWdlcj1jbGFzcyBBe2dldCBnZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzKCl7cmV0dXJuIHRoaXMuZGVmYXVsdENv''@;'; put 'put ''bXB1dGVDb250ZXh0c31nZXQgZ2V0RGVmYXVsdExhdW5jaGVyQ29udGV4dHMoKXtyZXR1cm4gdGhpcy5kZWZhdWx0TGF1bmNoZXJDb250ZXh0c31jb25zdHJ1Y3RvcihDLHcpe3RoaXMuc2VydmVyVXJsPUMsdGhpcy5yZXF1ZXN0Q2xpZW50PXcsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRz''@;'; put 'put ''PVsiQ0FTIEZvcm1hdHMgc2VydmljZSBjb21wdXRlIGNvbnRleHQiLCJEYXRhIE1pbmluZyBjb21wdXRlIGNvbnRleHQiLCJJbXBvcnQgOSBzZXJ2aWNlIGNvbXB1dGUgY29udGV4dCIsIlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIsIlNBUyBNb2RlbCBNYW5hZ2VyIGNvbXB1''@;'; put 'put ''dGUgY29udGV4dCIsIlNBUyBTdHVkaW8gY29tcHV0ZSBjb250ZXh0IiwiU0FTIFZpc3VhbCBGb3JlY2FzdGluZyBjb21wdXRlIGNvbnRleHQiXSx0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzPVsiQ0FTIEZvcm1hdHMgc2VydmljZSBsYXVuY2hlciBjb250ZXh0IiwiRGF0YSBNaW5pbmcg''@;'; put 'put ''bGF1bmNoZXIgY29udGV4dCIsIkltcG9ydCA5IHNlcnZpY2UgbGF1bmNoZXIgY29udGV4dCIsIkpvYiBGbG93IEV4ZWN1dGlvbiBsYXVuY2hlciBjb250ZXh0IiwiU0FTIEpvYiBFeGVjdXRpb24gbGF1bmNoZXIgY29udGV4dCIsIlNBUyBNb2RlbCBNYW5hZ2VyIGxhdW5jaGVyIGNvbnRleHQi''@;'; put 'put ''LCJTQVMgU3R1ZGlvIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgVmlzdWFsIEZvcmVjYXN0aW5nIGxhdW5jaGVyIGNvbnRleHQiXSxDJiYoMCxjLmlzVXJsKShDKX1nZXRDb21wdXRlQ29udGV4dHMoQyl7cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3Vs''@;'; put 'put ''dDp3fT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwYCxDKS5jYXRjaChMPT57dGhyb3coMCxzLnByZWZpeE1lc3NhZ2UpKEwsIkVycm9yIHdoaWxlIGdldHRpbmcgY29tcHV0ZSBjb250ZXh0cy4gIil9''@;'; put 'put ''KTtyZXR1cm4odyYmdy5pdGVtcz93Lml0ZW1zOltdKS5tYXAoTD0+KHtjcmVhdGVkQnk6TC5jcmVhdGVkQnksaWQ6TC5pZCxuYW1lOkwubmFtZSx2ZXJzaW9uOkwudmVyc2lvbixhdHRyaWJ1dGVzOnt9fSkpfSl9Z2V0TGF1bmNoZXJDb250ZXh0cyhDKXtyZXR1cm4geSh0aGlzLHZvaWQgMCx2''@;'; put 'put ''b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0Ond9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2xhdW5jaGVyL2NvbnRleHRzP2xpbWl0PTEwMDAwYCxDKS5jYXRjaChMPT57dGhyb3coMCxzLnByZWZpeE1lc3NhZ2UpKEwsIkVycm9yIHdoaWxl''@;'; put 'put ''IGdldHRpbmcgbGF1bmNoZXIgY29udGV4dHMuICIpfSk7cmV0dXJuKHcmJncuaXRlbXM/dy5pdGVtczpbXSkubWFwKEw9Pih7Y3JlYXRlZEJ5OkwuY3JlYXRlZEJ5LGlkOkwuaWQsbmFtZTpMLm5hbWUsdmVyc2lvbjpMLnZlcnNpb24sYXR0cmlidXRlczp7fX0pKX0pfWNyZWF0ZUNvbXB1dGVD''@;'; put 'put ''b250ZXh0KEMsdyxTLEwsUix4KXtyZXR1cm4geSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYodGhpcy52YWxpZGF0ZUNvbnRleHROYW1lKEMpLHRoaXMuaXNEZWZhdWx0Q29udGV4dChDLHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cyxgQ29tcHV0ZSBjb250ZXh0ICcke0N9''@;'; put 'put ''JyBhbHJlYWR5IGV4aXN0cy5gKSwoeWllbGQgdGhpcy5nZXRDb21wdXRlQ29udGV4dHMoUikpLmZpbmQoWT0+WS5uYW1lPT09QykpdGhyb3cgbmV3IEVycm9yKGBDb21wdXRlIGNvbnRleHQgJyR7Q30nIGFscmVhZHkgZXhpc3RzLmApO2lmKHcmJiF0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRl''@;'; put 'put ''eHRzLmluY2x1ZGVzKHcpJiYhKHlpZWxkIHRoaXMuZ2V0TGF1bmNoZXJDb250ZXh0cyhSKSkuZmluZChGPT5GLm5hbWU9PT13KSl7Y29uc3QgRj1gVGhlIGxhdW5jaGVyIGNvbnRleHQgZm9yICR7d31gLHE9eWllbGQgdGhpcy5jcmVhdGVMYXVuY2hlckNvbnRleHQodyxGLCJkaXJlY3QiLFIp''@;'; put 'put ''LmNhdGNoKHJlPT57dGhyb3cgbmV3IEVycm9yKGBFcnJvciB3aGlsZSBjcmVhdGluZyBsYXVuY2hlciBjb250ZXh0LiAke3JlfWApfSk7aWYoIXF8fCFxLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJFcnJvciB3aGlsZSBjcmVhdGluZyBsYXVuY2hlciBjb250ZXh0LiIpO3c9cS5uYW1lfWxldCBW''@;'; put 'put ''PXtyZXVzZVNlcnZlclByb2Nlc3NlczohMH07UyYmKFY9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LFYpLHtydW5TZXJ2ZXJBczpTfSkpO2NvbnN0IE49e25hbWU6QyxsYXVuY2hDb250ZXh0Ontjb250ZXh0TmFtZTp3fHwiIn0sYXR0cmlidXRlczpWfTt4JiZ4Lmxlbmd0aD9OLmF1''@;'; put 'put ''dGhvcml6ZWRVc2Vycz14Ok4uYXV0aG9yaXplQWxsQXV0aGVudGljYXRlZFVzZXJzPSEwLEwmJihOLmVudmlyb25tZW50PXthdXRvRXhlY0xpbmVzOkx9KTtjb25zdHtyZXN1bHQ6en09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29u''@;'; put 'put ''dGV4dHNgLE4sUikuY2F0Y2goWT0+e3Rocm93KDAscy5wcmVmaXhNZXNzYWdlKShZLCJFcnJvciB3aGlsZSBjcmVhdGluZyBjb21wdXRlIGNvbnRleHQuICIpfSk7cmV0dXJuIHp9KX1jcmVhdGVMYXVuY2hlckNvbnRleHQoQyx3LFM9ImRpcmVjdCIsTCl7cmV0dXJuIHkodGhpcyx2b2lkIDAs''@;'; put 'put ''dm9pZCAwLGZ1bmN0aW9uKigpe2lmKCFDKXRocm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHJlcXVpcmVkLiIpO2lmKHRoaXMuaXNEZWZhdWx0Q29udGV4dChDLHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHMsYExhdW5jaGVyIGNvbnRleHQgJyR7Q30nIGFscmVhZHkgZXhpc3Rz''@;'; put 'put ''LmApLCh5aWVsZCB0aGlzLmdldExhdW5jaGVyQ29udGV4dHMoTCkpLmZpbmQoVj0+Vi5uYW1lPT09QykpdGhyb3cgbmV3IEVycm9yKGBMYXVuY2hlciBjb250ZXh0ICcke0N9JyBhbHJlYWR5IGV4aXN0cy5gKTtjb25zdCBVPXtuYW1lOkMsZGVzY3JpcHRpb246dyxsYXVuY2hUeXBlOlN9LHty''@;'; put 'put ''ZXN1bHQ6SH09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYCR7dGhpcy5zZXJ2ZXJVcmx9L2xhdW5jaGVyL2NvbnRleHRzYCxVLEwpLmNhdGNoKFY9Pnt0aHJvdygwLHMucHJlZml4TWVzc2FnZSkoViwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgbGF1bmNoZXIgY29udGV4dC4gIil9KTty''@;'; put 'put ''ZXR1cm4gSH0pfWVkaXRDb21wdXRlQ29udGV4dChDLHcsUyl7cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBMO3RoaXMudmFsaWRhdGVDb250ZXh0TmFtZShDKSx0aGlzLmlzRGVmYXVsdENvbnRleHQoQyx0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsIkVk''@;'; put 'put ''aXRpbmcgZGVmYXVsdCBTQVMgY29tcHV0ZSBjb250ZXh0cyBpcyBub3QgYWxsb3dlZC4iLCEwKSxMPXlpZWxkIHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoQyxTKSxMfHwoTD15aWVsZCB0aGlzLmdldENvbXB1dGVDb250ZXh0QnlJZCh3LmlkLFMpKTtjb25zdHtyZXN1bHQ6UixldGFn''@;'; put 'put ''Onh9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHMvJHtMLmlkfWAsUykuY2F0Y2goVT0+e3Rocm93IFUmJjQwND09PVUuc3RhdHVzP25ldyBFcnJvcihgVGhlIGNvbnRleHQgJyR7Q30nIHdhcyBub3QgZm91bmQgb24gdGhp''@;'; put 'put ''cyBzZXJ2ZXIuYCk6VX0pO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucHV0KGAvY29tcHV0ZS9jb250ZXh0cy8ke1IuaWR9YCxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxSKSx3KSx7YXR0cmlidXRlczpPYmplY3QuYXNzaWduKE9iamVjdC5h''@;'; put 'put ''c3NpZ24oe30sUi5hdHRyaWJ1dGVzKSx3LmF0dHJpYnV0ZXMpfSksUyx7IklmLU1hdGNoIjp4fSl9KX1nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShDLHcpe3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6U309eWllbGQgdGhpcy5yZXF1ZXN0Q2xp''@;'; put 'put ''ZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cz9maWx0ZXI9ZXEobmFtZSwgIiR7Q30iKWAsdykuY2F0Y2goTD0+e3Rocm93KDAscy5wcmVmaXhNZXNzYWdlKShMLCJFcnJvciB3aGlsZSBnZXR0aW5nIGNvbXB1dGUgY29udGV4dCBieSBuYW1lLiAiKX0pO2lmKCFT''@;'; put 'put ''fHwhUy5pdGVtc3x8IVMuaXRlbXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVGhlIGNvbnRleHQgJyR7Q30nIHdhcyBub3QgZm91bmQgYXQgJyR7dGhpcy5zZXJ2ZXJVcmx9Jy5gKTtyZXR1cm4gUy5pdGVtc1swXX0pfWdldENvbXB1dGVDb250ZXh0QnlJZChDLHcpe3JldHVybiB5KHRoaXMs''@;'; put 'put ''dm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6U309eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cy8ke0N9YCx3KS5jYXRjaChMPT57dGhyb3coMCxzLnByZWZpeE1lc3NhZ2UpKEwsIkVycm9yIHdoaWxl''@;'; put 'put ''IGdldHRpbmcgY29tcHV0ZSBjb250ZXh0IGJ5IGlkLiAiKX0pO3JldHVybiBTfSl9Z2V0RXhlY3V0YWJsZUNvbnRleHRzKEMsdyl7cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDpTfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3Ro''@;'; put 'put ''aXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwYCx3Py5hY2Nlc3NfdG9rZW4pLmNhdGNoKEg9Pnt0aHJvdygwLHMucHJlZml4TWVzc2FnZSkoSCwiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgY29tcHV0ZSBjb250ZXh0cy4iKX0pLEw9Uy5pdGVtc3x8W10sUj1bXSx4PUwu''@;'; put 'put ''bWFwKEg9Pntjb25zdCBWPVsiJXB1dCAmPXN5c3VzZXJpZDsiXTtyZXR1cm4oKT0+QyhgdGVzdC0ke0gubmFtZX1gLFYsSC5uYW1lLHcsbnVsbCwhMSwhMCwhMCkuY2F0Y2goTj0+Til9KTtsZXQgVT1bXTtmb3IoY29uc3QgSCBvZiB4KVUucHVzaCh5aWVsZCBIKCkpO3JldHVybiBVLmZvckVh''@;'; put 'put ''Y2goKEgsVik9PntpZihIJiZILmxvZyl0cnl7bGV0IHo9IiI7Y29uc3QgWT1ILmxvZy5zcGxpdCgiXG4iKS5maW5kKEY9PkYuc3RhcnRzV2l0aCgiU1lTVVNFUklEPSIpKTtZJiYoej1ZLnJlcGxhY2UoIlNZU1VTRVJJRD0iLCIiKSxSLnB1c2goe2NyZWF0ZWRCeTpMW1ZdLmNyZWF0ZWRCeSxp''@;'; put 'put ''ZDpMW1ZdLmlkLG5hbWU6TFtWXS5uYW1lLHZlcnNpb246TFtWXS52ZXJzaW9uLGF0dHJpYnV0ZXM6e3N5c1VzZXJJZDp6fX0pKX1jYXRjaChOKXt0aHJvdyBOfX0pLFJ9KX1kZWxldGVDb21wdXRlQ29udGV4dChDLHcpe3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0''@;'; put 'put ''aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoQyksdGhpcy5pc0RlZmF1bHRDb250ZXh0KEMsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLCJEZWxldGluZyBkZWZhdWx0IFNBUyBjb21wdXRlIGNvbnRleHRzIGlzIG5vdCBhbGxvd2VkLiIsITApO2NvbnN0IEw9eWllbGQgdGhpcy5nZXRDb21w''@;'; put 'put ''dXRlQ29udGV4dEJ5TmFtZShDLHcpO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzLyR7TC5pZH1gLHcpfSl9dmFsaWRhdGVDb250ZXh0TmFtZShDKXtpZighQyl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQg''@;'; put 'put ''bmFtZSBpcyByZXF1aXJlZC4iKX1pc0RlZmF1bHRDb250ZXh0KEMsdz10aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsUz0iIixMPSExKXtpZih3LmluY2x1ZGVzKEMpKXRocm93IG5ldyBFcnJvcihgJHtTfSR7TD8iXG5EZWZhdWx0IGNvbnRleHRzOiIrdy5tYXAoKFIseCk9PmBcbiR7eCsx''@;'; put 'put ''fS4gJHtSfWApOiIifWApfX19LDcyODMxKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihMLFIseCxVKXtyZXR1cm4gbmV3KHh8fCh4PVByb21pc2UpKShmdW5jdGlvbihWLE4pe2Z1bmN0aW9uIHooVyl7dHJ5e0YoVS5uZXh0KFcpKX1j''@;'; put 'put ''YXRjaChxKXtOKHEpfX1mdW5jdGlvbiBZKFcpe3RyeXtGKFUudGhyb3coVykpfWNhdGNoKHEpe04ocSl9fWZ1bmN0aW9uIEYoVyl7Vy5kb25lP1YoVy52YWx1ZSk6ZnVuY3Rpb24gSChWKXtyZXR1cm4gViBpbnN0YW5jZW9mIHg/VjpuZXcgeChmdW5jdGlvbihOKXtOKFYpfSl9KFcudmFsdWUp''@;'; put 'put ''LnRoZW4oeixZKX1GKChVPVUuYXBwbHkoTCxSfHxbXSkpLm5leHQoKSl9KX0sYz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oTCl7cmV0dXJuIEwmJkwuX19lc01vZHVsZT9MOntkZWZhdWx0Okx9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3Zh''@;'; put 'put ''bHVlOiEwfSksai5TQVM5QXBpQ2xpZW50PXZvaWQgMDtjb25zdCBzPWgoODcyNDcpLEE9YyhoKDUxODk0KSksdj1oKDYwNTc2KSxDPWgoMjkyNjYpO2ouU0FTOUFwaUNsaWVudD1jbGFzcyB3e2NvbnN0cnVjdG9yKFIseCxVKXt0aGlzLnNlcnZlclVybD1SLHRoaXMuam9ic1BhdGg9eCxSJiYo''@;'; put 'put ''MCxDLmlzVXJsKShSKSx0aGlzLnJlcXVlc3RDbGllbnQ9bmV3IHYuU2FzOVJlcXVlc3RDbGllbnQoUixVKX1nZXRDb25maWcoKXtyZXR1cm57c2VydmVyVXJsOnRoaXMuc2VydmVyVXJsfX1zZXRDb25maWcoUil7UiYmKHRoaXMuc2VydmVyVXJsPVIpfWV4ZWN1dGVTY3JpcHQoUix4LFUpe3Jl''@;'; put 'put ''dHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQubG9naW4oeCxVLHRoaXMuam9ic1BhdGgpO2NvbnN0IFY9UyhbLi4uUiwiZGF0YSBfbnVsbF87IiwiZmlsZSBfd2Vib3V0OyIsInB1dCAnRXhlY3V0ZWQgc2FzanMgcnVuJzsiLCJy''@;'; put 'put ''dW47Il0uam9pbigiXG4iKSksTj1gL1VzZXIgRm9sZGVycy8ke3h9L015IEZvbGRlci9zYXNqcy9ydW5uZXJgLHo9Im11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIrVi5nZXRCb3VuZGFyeSgpLEY9eyJjYWNoZS1jb250cm9sIjoibm8tY2FjaGUiLEFjY2VwdDoiKi8qIiwiQ29udGVu''@;'; put 'put ''dC1UeXBlIjp6LCJDb250ZW50LUxlbmd0aCI6Vi5nZXRMZW5ndGhTeW5jKCksQ29ubmVjdGlvbjoia2VlcC1hbGl2ZSJ9LFc9YCR7dGhpcy5qb2JzUGF0aH0vPyR7Il9wcm9ncmFtPSIrTisiJl9kZWJ1Zz1sb2cifWA7cmV0dXJuKHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KFcsVix2''@;'; put 'put ''b2lkIDAseixGKSkucmVzdWx0fSl9fTtjb25zdCBTPUw9Pntjb25zdCBSPW5ldyBBLmRlZmF1bHQseD1gc2FzanMtZXhlY3V0ZS1zYXM5LSR7KDAscy5nZW5lcmF0ZVRpbWVzdGFtcCkoIiIpfS5zYXNgO3JldHVybiBSLmFwcGVuZCh4LEwse2ZpbGVuYW1lOngsY29udGVudFR5cGU6InRleHQv''@;'; put 'put ''cGxhaW4ifSksUn19LDgyMDE1KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNjU2MDYpLGM9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFcscSxyZSxtZSl7cmV0dXJuIG5ldyhyZXx8KHJlPVByb21pc2UpKShmdW5jdGlvbihJZSxrZSl7ZnVuY3Rpb24gcWUoYil7dHJ5e2Yo''@;'; put 'put ''bWUubmV4dChiKSl9Y2F0Y2goayl7a2Uoayl9fWZ1bmN0aW9uIFgoYil7dHJ5e2YobWUudGhyb3coYikpfWNhdGNoKGspe2tlKGspfX1mdW5jdGlvbiBmKGIpe2IuZG9uZT9JZShiLnZhbHVlKTpmdW5jdGlvbiBDZShJZSl7cmV0dXJuIEllIGluc3RhbmNlb2YgcmU/SWU6bmV3IHJlKGZ1bmN0''@;'; put 'put ''aW9uKGtlKXtrZShJZSl9KX0oYi52YWx1ZSkudGhlbihxZSxYKX1mKChtZT1tZS5hcHBseShXLHF8fFtdKSkubmV4dCgpKX0pfSxzPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihXKXtyZXR1cm4gVyYmVy5fX2VzTW9kdWxlP1c6e2RlZmF1bHQ6V319O09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLlNBU1ZpeWFBcGlDbGllbnQ9dm9pZCAwO2NvbnN0IEE9aCgyOTI2Niksdj1zKGgoNTE4OTQpKSxDPWgoMTczODgpLHc9aCg0ODY5NyksUz1oKDQ1MzcyKSxMPWgoMzYzMSksUj1oKDg3NjA3KSx4PWgoNjM0MCksVT1oKDkx''@;'; put 'put ''NTE0KSxIPWgoMjk2MDkpLFY9aCg1ODU2MyksTj1oKDgzNzIyKSx6PWgoODE2NzQpLFk9aCg4ODEyOCk7ai5TQVNWaXlhQXBpQ2xpZW50PWNsYXNzIEZ7Y29uc3RydWN0b3IocSxyZSxtZSxDZSl7dGhpcy5zZXJ2ZXJVcmw9cSx0aGlzLnJvb3RGb2xkZXJOYW1lPXJlLHRoaXMuY29udGV4dE5h''@;'; put 'put ''bWU9bWUsdGhpcy5yZXF1ZXN0Q2xpZW50PUNlLHRoaXMuX2RlYnVnPSExLHRoaXMuc2Vzc2lvbk1hbmFnZXI9bmV3IHcuU2Vzc2lvbk1hbmFnZXIodGhpcy5zZXJ2ZXJVcmwsdGhpcy5jb250ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuY29udGV4dE1hbmFnZXI9bmV3IFMuQ29u''@;'; put 'put ''dGV4dE1hbmFnZXIodGhpcy5zZXJ2ZXJVcmwsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLmZvbGRlck1hcD1uZXcgTWFwLHRoaXMuZmlsZUV4dGVuc2lvbk1hcD1uZXcgTWFwLHRoaXMuYm9vbEV4dGVuc2lvbk1hcD0hMSxxJiYoMCxBLmlzVXJsKShxKX1hcHBlbmRSZXF1ZXN0KHEscmUsbWUp''@;'; put 'put ''e3RoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KHEscmUsbWUpfWdldCBkZWJ1Zygpe3JldHVybiB0aGlzLl9kZWJ1Z31zZXQgZGVidWcocSl7dGhpcy5fZGVidWc9cSx0aGlzLnNlc3Npb25NYW5hZ2VyJiYodGhpcy5zZXNzaW9uTWFuYWdlci5kZWJ1Zz1xKX1nZXRKb2JzSW5Gb2xk''@;'; put 'put ''ZXIocSl7cmV0dXJuIGModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IHJlPSgwLEEuaXNSZWxhdGl2ZVBhdGgpKHEpP2Ake3RoaXMucm9vdEZvbGRlck5hbWV9LyR7cX1gOnE7cmV0dXJuIHRoaXMuZm9sZGVyTWFwLmdldChyZSl8fCh5aWVsZCB0aGlzLnBvcHVsYXRlRm9s''@;'; put 'put ''ZGVyTWFwKHJlKSksdGhpcy5mb2xkZXJNYXAuZ2V0KHJlKX0pfWdldENvbmZpZygpe3JldHVybntzZXJ2ZXJVcmw6dGhpcy5zZXJ2ZXJVcmwscm9vdEZvbGRlck5hbWU6dGhpcy5yb290Rm9sZGVyTmFtZX19c2V0Q29uZmlnKHEscmUpe3EmJih0aGlzLnNlcnZlclVybD1xKSxyZSYmKHRoaXMu''@;'; put 'put ''cm9vdEZvbGRlck5hbWU9cmUpfWdldENvbXB1dGVDb250ZXh0cyhxKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0Q29tcHV0ZUNvbnRleHRzKHEpfSl9Z2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygp''@;'; put 'put ''e3JldHVybiB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldERlZmF1bHRDb21wdXRlQ29udGV4dHN9Z2V0TGF1bmNoZXJDb250ZXh0cyhxKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0TGF1bmNoZXJDb250''@;'; put 'put ''ZXh0cyhxKX0pfWdldEV4ZWN1dGFibGVDb250ZXh0cyhxKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgcmU9dGhpcy5leGVjdXRlU2NyaXB0LmJpbmQodGhpcyk7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0RXhlY3V0YWJsZUNvbnRl''@;'; put 'put ''eHRzKHJlLHEpfSl9Y3JlYXRlU2Vzc2lvbihxLHJlKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0OkNlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMCIscmUpLEllPUNlLml0ZW1z''@;'; put 'put ''JiZDZS5pdGVtcy5sZW5ndGg/Q2UuaXRlbXMuZmluZChxZT0+cWUubmFtZT09PXEpOm51bGw7aWYoIUllKXRocm93IG5ldyBFcnJvcihgRXhlY3V0aW9uIGNvbnRleHQgJHtxfSBub3QgZm91bmQuYCk7Y29uc3R7cmVzdWx0OmtlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChgL2Nv''@;'; put 'put ''bXB1dGUvY29udGV4dHMvJHtJZS5pZH0vc2Vzc2lvbnNgLHt9LHJlKTtyZXR1cm4ga2V9KX1jcmVhdGVDb21wdXRlQ29udGV4dChxLHJlLG1lLENlLEllLGtlKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIu''@;'; put 'put ''Y3JlYXRlQ29tcHV0ZUNvbnRleHQocSxyZSxtZSxDZSxJZSxrZSl9KX1jcmVhdGVMYXVuY2hlckNvbnRleHQocSxyZSxtZT0iZGlyZWN0IixDZSl7cmV0dXJuIGModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmNyZWF0ZUxh''@;'; put 'put ''dW5jaGVyQ29udGV4dChxLHJlLG1lLENlKX0pfWVkaXRDb21wdXRlQ29udGV4dChxLHJlLG1lKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZWRpdENvbXB1dGVDb250ZXh0KHEscmUsbWUpfSl9ZGVsZXRl''@;'; put 'put ''Q29tcHV0ZUNvbnRleHQocSxyZSl7cmV0dXJuIGModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmRlbGV0ZUNvbXB1dGVDb250ZXh0KHEscmUpfSl9ZXhlY3V0ZVNjcmlwdChxLHJlLG1lLENlLEllPW51bGwsa2U9ITEscWU9''@;'; put 'put ''ITEsWD0hMCxmLGI9ITEsayxNKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsTi5leGVjdXRlT25Db21wdXRlQXBpKSh0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zZXNzaW9uTWFuYWdlcix0aGlzLnJvb3RGb2xkZXJOYW1lLHEscmUsbWUsQ2UsSWUs''@;'; put 'put ''a2UscWUsWCxmLGIsayxNKX0pfWdldEZpbGVDb250ZW50KHEscmUsbWUpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBDZT15aWVsZCB0aGlzLmdldEZpbGVVcmkocSxyZSxtZSkuY2F0Y2goSWU9Pnt0aHJvdygwLHgucHJlZml4TWVzc2FnZSkoSWUsYEVy''@;'; put 'put ''cm9yIHdoaWxlIGdldHRpbmcgZmlsZSBVUkkgZm9yOiAke3JlfSBpbiBmb2xkZXI6ICR7cX0uIGApfSk7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtDZX0vY29udGVudGAsbWUpLnRoZW4oSWU9PkllLnJlc3VsdCl9KX11cGRhdGVGaWxl''@;'; put 'put ''Q29udGVudChxLHJlLG1lLENlKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSWU9eWllbGQgdGhpcy5nZXRGaWxlVXJpKHEscmUsQ2UpLmNhdGNoKFg9Pnt0aHJvdygwLHgucHJlZml4TWVzc2FnZSkoWCxgRXJyb3Igd2hpbGUgZ2V0dGluZyBmaWxlIFVS''@;'; put 'put ''SSBmb3I6ICR7cmV9IGluIGZvbGRlcjogJHtxfS4gYCl9KSx7cmVzdWx0OmtlLGV0YWc6cWV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtJZX1gLENlKTtpZigha2V8fCFxZSl0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJHtyZX0gZG9lcyBub3QgaGF2''@;'; put 'put ''ZSBhbiBFVGFnLCBvciByZXF1ZXN0IGZhaWxlZC5gKTtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnB1dChgJHt0aGlzLnNlcnZlclVybH0ke0llfS9jb250ZW50YCxtZSxDZSx7IklmLU1hdGNoIjpxZSwiQ29udGVudC1UeXBlIjprZS5jb250ZW50VHlwZX0pLnRoZW4oWD0+WC5y''@;'; put 'put ''ZXN1bHQpfSl9Z2V0Rm9sZGVyKHEscmUpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSR7cX1gLHJlKS50aGVuKG1lPT5tZS5yZXN1bHQpfSl9Y3Jl''@;'; put 'put ''YXRlRmlsZShxLHJlLG1lLENlLEllKXt2YXIga2U7cmV0dXJuIGModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCFtZSYmIUNlKXRocm93IG5ldyBFcnJvcigiUGF0aCBvciBVUkkgb2YgdGhlIHBhcmVudCBmb2xkZXIgaXMgcmVxdWlyZWQuIik7IUNlJiZtZSYmKENlPXlpZWxk''@;'; put 'put ''IHRoaXMuZ2V0Rm9sZGVyVXJpKG1lLEllKSk7Y29uc3QgcWU9e0FjY2VwdDoiYXBwbGljYXRpb24vdm5kLnNhcy5maWxlK2pzb24iLCJDb250ZW50LURpc3Bvc2l0aW9uIjpgZmlsZW5hbWU9IiR7cX0iO2B9LFg9bmV3IHYuZGVmYXVsdDtsZXQgZixiO1guYXBwZW5kKCJmaWxlIixyZSxxKTtj''@;'; put 'put ''b25zdCBrPW51bGw9PT0oa2U9cS5zcGxpdCgiLiIpLnBvcCgpKXx8dm9pZCAwPT09a2U/dm9pZCAwOmtlLnRvTG93ZXJDYXNlKCk7aWYoayl7dGhpcy5ib29sRXh0ZW5zaW9uTWFwfHwoKHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoIi90eXBlcy90eXBlcz9saW1pdD05OTk5OTkiLEll''@;'; put 'put ''KSkucmVzdWx0Lml0ZW1zLmZpbHRlcihEPT5ELmV4dGVuc2lvbnMpLmZvckVhY2goRD0+e3ZhciBwO251bGw9PT0ocD1ELmV4dGVuc2lvbnMpfHx2b2lkIDA9PT1wfHxwLmZvckVhY2goST0+e3RoaXMuZmlsZUV4dGVuc2lvbk1hcC5zZXQoSSx7dHlwZURlZk5hbWU6RC5uYW1lJiZELm5hbWUu''@;'; put 'put ''dHJpbSgpLmxlbmd0aD9ELm5hbWUudHJpbSgpOnZvaWQgMCxwcm9wZXJ0aWVzOkQucHJvcGVydGllc30pfSl9KSx0aGlzLmJvb2xFeHRlbnNpb25NYXA9ITApO2NvbnN0IEI9dGhpcy5maWxlRXh0ZW5zaW9uTWFwLmdldChrKTtCJiYoZj1CLnR5cGVEZWZOYW1lLEIucHJvcGVydGllcyYmKGI9''@;'; put 'put ''e25hbWU6cSxwcm9wZXJ0aWVzOkIucHJvcGVydGllc30pKX1jb25zdCBNPXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAvZmlsZXMvZmlsZXM/cGFyZW50Rm9sZGVyVXJpPSR7Q2V9JnR5cGVEZWZOYW1lPSR7Zj8/ImZpbGUifSNyYXdVcGxvYWRgLFgsSWUsIm11bHRpcGFydC9mb3Jt''@;'; put 'put ''LWRhdGE7IGJvdW5kYXJ5PSIrWC5fYm91bmRhcnkscWUpO2lmKGIpdHJ5e2NvbnN0IEI9e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiIsIklmLU1hdGNoIjoiKiJ9LEs9TS5yZXN1bHQubGlua3MuZmlsdGVyKEc9PiJQQVRDSCI9PUcubWV0aG9kJiYicGF0Y2giPT1HLnJlbClbMF0udXJpO3Jl''@;'; put 'put ''dHVybih5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucGF0Y2goYCR7S31gLGIsSWUsQikpLnJlc3VsdH1jYXRjaChCKXt0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHBhdGNoaW5nIGZpbGUgJHtxfS5cbiR7Qi5tZXNzYWdlfWApfXJldHVybiBNLnJlc3VsdH0pfWNyZWF0ZUZvbGRlcihxLHJlLG1l''@;'; put 'put ''LENlLEllKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3Qga2U9eS5sb2dnZXJ8fGNvbnNvbGU7aWYoIXJlJiYhbWUpdGhyb3cgbmV3IEVycm9yKCJQYXRoIG9yIFVSSSBvZiB0aGUgcGFyZW50IGZvbGRlciBpcyByZXF1aXJlZC4iKTtpZighbWUmJnJlKWlm''@;'; put 'put ''KG1lPXlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKHJlLENlKSl7aWYoSWUpe2NvbnN0IFg9cmUrIi8iK3E7KHlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKFgsQ2UpKSYmKHlpZWxkIHRoaXMuZGVsZXRlRm9sZGVyKHJlKyIvIitxLENlKSl9fWVsc2V7a2UuaW5mbyhgUGFyZW50IGZvbGRlciBhdCBw''@;'; put 'put ''YXRoICcke3JlfScgaXMgbm90IHByZXNlbnQuYCk7Y29uc3QgWD1yZS5zdWJzdHJpbmcoMCxyZS5sYXN0SW5kZXhPZigiLyIpKSxmPWAke3JlLnNwbGl0KCIvIikucG9wKCl9YDtpZigiIj09PVgpdGhyb3cgbmV3IEMuUm9vdEZvbGRlck5vdEZvdW5kRXJyb3IocmUsdGhpcy5zZXJ2ZXJVcmws''@;'; put 'put ''Q2UpO2tlLmluZm8oYENyZWF0aW5nIHBhcmVudCBmb2xkZXI6XG4nJHtmfScgaW4gJyR7WH0nYCk7Y29uc3QgYj15aWVsZCB0aGlzLmNyZWF0ZUZvbGRlcihmLFgsdm9pZCAwLENlKTtrZS5pbmZvKGBQYXJlbnQgZm9sZGVyICcke2Z9JyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY3JlYXRlZC5g''@;'; put 'put ''KSxtZT1gL2ZvbGRlcnMvZm9sZGVycy8ke2IuaWR9YH1jb25zdHtyZXN1bHQ6cWV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAvZm9sZGVycy9mb2xkZXJzP3BhcmVudEZvbGRlclVyaT0ke21lfWAse25hbWU6cSx0eXBlOiJmb2xkZXIifSxDZSkuY2F0Y2goWD0+e2NvbnN0e21l''@;'; put 'put ''c3NhZ2U6ZixyZXNwb25zZTpifT1YO2lmKGYmJmImJmIuZGF0YSYmYi5kYXRhLm1lc3NhZ2Upe2NvbnN0e3N0YXR1czprfT1iLHttZXNzYWdlOk19PWIuZGF0YSxCPVtmLE1dLm1hcChHPT4vXC4kLy50ZXN0KEcpP0c6YCR7R30uYCk7dGhyb3chSWUmJjQwOT09PWsmJkIucHVzaCgnVG8gb3Zl''@;'; put 'put ''cnJpZGUsIHBsZWFzZSBzZXQgImlzRm9yY2VkIiB0byAidHJ1ZSIuJyksQi5qb2luKCIgIil9dGhyb3cgWH0pO3JldHVybiB5aWVsZCB0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKGAke3JlfS8ke3F9YCxDZSkscWV9KX1jcmVhdGVKb2JEZWZpbml0aW9uKHEscmUsbWUsQ2UsSWUpe3JldHVybiBj''@;'; put 'put ''KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighbWUmJiFDZSl0aHJvdyBuZXcgRXJyb3IoIlBhdGggdG8gb3IgVVJJIG9mIHRoZSBwYXJlbnQgZm9sZGVyIGlzIHJlcXVpcmVkLiIpO3JldHVybiFDZSYmbWUmJihDZT15aWVsZCB0aGlzLmdldEZvbGRlclVyaShtZSxJZSkpLHlp''@;'; put 'put ''ZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAke3RoaXMuc2VydmVyVXJsfS9qb2JEZWZpbml0aW9ucy9kZWZpbml0aW9ucz9wYXJlbnRGb2xkZXJVcmk9JHtDZX1gLHtuYW1lOnEscGFyYW1ldGVyczpbe25hbWU6Il9hZGRqZXNiZWdpbmVuZG1hY3JvcyIsdHlwZToiQ0hBUkFDVEVSIixk''@;'; put 'put ''ZWZhdWx0VmFsdWU6ImZhbHNlIn1dLHR5cGU6IkNvbXB1dGUiLGNvZGU6cmV9LEllKX0pfWdldEF1dGhDb2RlKHEpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCByZT1gJHt0aGlzLnNlcnZlclVybH0vU0FTTG9nb24vb2F1dGgvYXV0aG9yaXplP2NsaWVu''@;'; put 'put ''dF9pZD0ke3F9JnJlc3BvbnNlX3R5cGU9Y29kZWA7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQocmUsdm9pZCAwLCJ0ZXh0L3BsYWluIikudGhlbihDZT0+Q2UucmVzdWx0KS50aGVuKENlPT5jKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgSWU9IiI7aWYo''@;'; put 'put ''KDAsUi5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkoQ2UpKXtjb25zdCBxZT0oeWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmF1dGhvcml6ZShDZSkpLnNwbGl0KCI8Ym9keT4iKVsxXS5zcGxpdCgiPC9ib2R5PiIpWzBdLFg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIFgu''@;'; put 'put ''aW5uZXJIVE1MPXFlLEllPVgucXVlcnlTZWxlY3RvcigiLmluZm9ib3ggaDQiKS5pbm5lclRleHQsSWV9e2NvbnN0IGtlPUNlLnNwbGl0KCI8Ym9keT4iKVsxXS5zcGxpdCgiPC9ib2R5PiIpWzBdLHFlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBxZS5pbm5lckhUTUw9''@;'; put 'put ''a2UscWUmJihJZT1xZS5xdWVyeVNlbGVjdG9yKCIuaW5mb2JveCBoNCIpLmlubmVyVGV4dCksSWV9fSkpLmNhdGNoKCgpPT5udWxsKX0pfWdldEFjY2Vzc1Rva2VuKHEscmUsbWUpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCx6LmdldEFjY2Vzc1Rv''@;'; put 'put ''a2VuRm9yVml5YSkodGhpcy5yZXF1ZXN0Q2xpZW50LHEscmUsbWUpfSl9cmVmcmVzaFRva2VucyhxLHJlLG1lKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsWS5yZWZyZXNoVG9rZW5zRm9yVml5YSkodGhpcy5yZXF1ZXN0Q2xpZW50LHEscmUsbWUp''@;'; put 'put ''fSl9ZGVsZXRlQ2xpZW50KHEscmUpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBtZT10aGlzLnNlcnZlclVybCtgL29hdXRoL2NsaWVudHMvJHtxfWA7cmV0dXJuKHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5kZWxldGUobWUscmUpKS5yZXN1bHR9KX1l''@;'; put 'put ''eGVjdXRlQ29tcHV0ZUpvYihxLHJlLG1lLENlLEllLGtlPSEwLHFlPSExLFgsZj0hMSxiLGspe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgTT0oSWV8fHt9KS5hY2Nlc3NfdG9rZW47aWYoSWUmJih7YWNjZXNzX3Rva2VuOk19PXlpZWxkKDAsSC5nZXRUb2tl''@;'; put 'put ''bnMpKHRoaXMucmVxdWVzdENsaWVudCxJZSxMLlNlcnZlclR5cGUuU2FzVml5YSxrKSksKDAsQS5pc1JlbGF0aXZlUGF0aCkocSkmJiF0aGlzLnJvb3RGb2xkZXJOYW1lKXRocm93IG5ldyBFcnJvcigiUmVsYXRpdmUgcGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBzcGVjaWZ5aW5nIGEg''@;'; put 'put ''cm9vdCBmb2xkZXIgbmFtZSIpO2NvbnN0IEI9cS5zcGxpdCgiLyIpLEs9Qi5wb3AoKSxHPUIuam9pbigiLyIpLEQ9KDAsQS5pc1JlbGF0aXZlUGF0aCkocSk/YCR7dGhpcy5yb290Rm9sZGVyTmFtZX0vJHtHfWA6Rzt5aWVsZCB0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKEQsTSkuY2F0Y2goX2U9''@;'; put 'put ''Pnt0aHJvdygwLHgucHJlZml4TWVzc2FnZSkoX2UsIkVycm9yIHdoaWxlIHBvcHVsYXRpbmcgZm9sZGVyIG1hcC4gIil9KTtjb25zdCBwPXRoaXMuZm9sZGVyTWFwLmdldChEKTtpZighcCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBmb2xkZXIgJyR7RH0nIHdhcyBub3QgZm91bmQgb24gJyR7dGhp''@;'; put 'put ''cy5zZXJ2ZXJVcmx9J2ApO2NvbnN0IEk9cD8uZmluZChfZT0+X2UubmFtZT09PUspO2lmKCFJKXRocm93IG5ldyBFcnJvcigiSm9iIHdhcyBub3QgZm91bmQuIik7bGV0IHVlPUk/LmNvZGU7aWYoIXVlKXtjb25zdCBfZT1JPy5saW5rcy5maW5kKG90PT4iZ2V0UmVzb3VyY2UiPT09b3QucmVs''@;'; put 'put ''KTtpZighX2UpdGhyb3cgbmV3IEVycm9yKCJVUkkgb2Ygam9iIGRlZmluaXRpb24gd2FzIG5vdCBmb3VuZC4iKTtjb25zdHtyZXN1bHQ6UGV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtfZS5ocmVmfWAsTSkuY2F0Y2gob3Q9Pnt0aHJvdygwLHgu''@;'; put 'put ''cHJlZml4TWVzc2FnZSkob3QsIkVycm9yIHdoaWxlIGdldHRpbmcgam9iIGRlZmluaXRpb24uICIpfSk7dWU9UGUuY29kZSxJLmNvZGU9dWV9dWV8fCh1ZT0iIik7Y29uc3QgbmU9dWUucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnNwbGl0KCJcbiIpO3JldHVybiB5aWVsZCB0aGlzLmV4ZWN1dGVT''@;'; put 'put ''Y3JpcHQocSxuZSxyZSxJZSxDZSxtZSxxZSxrZSxYLGYsYixrKX0pfWV4ZWN1dGVKb2IocSxyZSxtZSxDZSxJZSxrZSl7dmFyIHFlLFgsZjtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IGI9KEllfHx7fSkuYWNjZXNzX3Rva2VuO2lmKEllJiYoe2FjY2Vzc190''@;'; put 'put ''b2tlbjpifT15aWVsZCgwLEguZ2V0VG9rZW5zKSh0aGlzLnJlcXVlc3RDbGllbnQsSWUsTC5TZXJ2ZXJUeXBlLlNhc1ZpeWEsa2UpKSwoMCxBLmlzUmVsYXRpdmVQYXRoKShxKSYmIXRoaXMucm9vdEZvbGRlck5hbWUpdGhyb3cgbmV3IEVycm9yKCJSZWxhdGl2ZSBwYXRocyBjYW5ub3QgYmUg''@;'; put 'put ''dXNlZCB3aXRob3V0IHNwZWNpZnlpbmcgYSByb290IGZvbGRlciBuYW1lLiIpO2NvbnN0IGs9cS5zcGxpdCgiLyIpLE09ay5wb3AoKSxCPWsuam9pbigiLyIpLEs9KDAsQS5pc1JlbGF0aXZlUGF0aCkocSk/YCR7dGhpcy5yb290Rm9sZGVyTmFtZX0vJHtCfWA6Qjt5aWVsZCB0aGlzLnBvcHVs''@;'; put 'put ''YXRlRm9sZGVyTWFwKEssYik7Y29uc3QgRz10aGlzLmZvbGRlck1hcC5nZXQoSyk7aWYoIUcpdGhyb3cgbmV3IEVycm9yKGBUaGUgZm9sZGVyICcke0t9JyB3YXMgbm90IGZvdW5kIG9uICcke3RoaXMuc2VydmVyVXJsfScuYCk7Y29uc3QgRD1HPy5maW5kKEZlPT5GZS5uYW1lPT09TSk7bGV0''@;'; put 'put ''IHA9W107aWYoQ2UmJk9iamVjdC5rZXlzKENlKS5sZW5ndGgmJihwPXlpZWxkIHRoaXMudXBsb2FkVGFibGVzKENlLGIpKSwhRCl0aHJvdyBuZXcgRXJyb3IoIkpvYiB3YXMgbm90IGZvdW5kLiIpO2NvbnN0IEk9bnVsbD09PShxZT1EPy5saW5rcy5maW5kKEZlPT4iZ2V0UmVzb3VyY2UiPT09''@;'; put 'put ''RmUucmVsKSl8fHZvaWQgMD09PXFlP3ZvaWQgMDpxZS5ocmVmLHtyZXN1bHQ6dWV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtJfWAsYiksbmU9e19jb250ZXh0TmFtZTpyZSxfcHJvZ3JhbTpgJHtLfS8ke019YCxfd2ViaW5fZmlsZV9jb3VudDpw''@;'; put 'put ''Lmxlbmd0aCxfT01JVEpTT05MSVNUSU5HOiEwLF9PTUlUSlNPTkxPRzohMCxfb21pdFNlc3Npb25SZXN1bHRzOiExLF9PTUlUVEVYVExJU1RJTkc6ITAsX09NSVRURVhUTE9HOiEwfTttZSYmKG5lLl9PTUlUVEVYVExPRz0iZmFsc2UiLG5lLl9vbWl0U2Vzc2lvblJlc3VsdHM9ImZhbHNlIixu''@;'; put 'put ''ZS5fREVCVUc9MTMxKSxwLmZvckVhY2goKEZlLGdlKT0+e25lW2Bfd2ViaW5fZmlsZXVyaSR7Z2UrMX1gXT1gL2ZpbGVzL2ZpbGVzLyR7RmUuZmlsZS5pZH1gLG5lW2Bfd2ViaW5fbmFtZSR7Z2UrMX1gXT1GZS50YWJsZU5hbWV9KTtjb25zdCBfZT17fTtmb3IoY29uc3QgRmUgb2YgT2JqZWN0''@;'; put 'put ''LmtleXMobmUpKV9lW0ZlXT1TdHJpbmcobmVbRmVdKTtjb25zdCBQZT17bmFtZTpgZXhlYy0ke019YCxkZXNjcmlwdGlvbjoiUG93ZXJlZCBieSBTQVNqcyIsam9iRGVmaW5pdGlvbjp1ZSxhcmd1bWVudHM6X2V9LHtyZXN1bHQ6b3R9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAk''@;'; put 'put ''e3RoaXMuc2VydmVyVXJsfS9qb2JFeGVjdXRpb24vam9icz9fYWN0aW9uPXdhaXRgLFBlLGIpLGx0PXlpZWxkIHRoaXMucG9sbEpvYlN0YXRlKG90LEllLHZvaWQgMCxrZSkuY2F0Y2goRmU9Pnt0aHJvdygwLHgucHJlZml4TWVzc2FnZSkoRmUsIkVycm9yIHdoaWxlIHBvbGxpbmcgam9iIHN0''@;'; put 'put ''YXR1cy4gIil9KSx7cmVzdWx0OmR0fT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9qb2JFeGVjdXRpb24vam9icy8ke290LmlkfWAsYik7bGV0IFJlLGFlO2NvbnN0IHhlPWR0LnJlc3VsdHNbIl93ZWJvdXQuanNvbiJdLGplPWR0LmxpbmtzLmZpbmQo''@;'; put 'put ''RmU9PiJsb2ciPT09RmUucmVsKTtpZih4ZSYmKFJlPXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHt4ZX0vY29udGVudGAsYiwidGV4dC9wbGFpbiIpKSxtZSYmamUmJihhZT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVy''@;'; put 'put ''VXJsfSR7amUuaHJlZn0vY29udGVudGAsYikudGhlbihGZT0+RmUucmVzdWx0Lml0ZW1zLm1hcChnZT0+Z2UubGluZSkuam9pbigiXG4iKSkpLCJmYWlsZWQiPT09bHQpdGhyb3cgbmV3IEMuSm9iRXhlY3V0aW9uRXJyb3IobnVsbD09PShYPWR0LmVycm9yKXx8dm9pZCAwPT09WD92b2lkIDA6''@;'; put 'put ''WC5lcnJvckNvZGUsbnVsbD09PShmPWR0LmVycm9yKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5tZXNzYWdlLGFlKTtjb25zdCBBZT17cmVzdWx0OlJlPy5yZXN1bHQsbG9nOmFlfSx7ZXJyb3I6RGV9PWR0O3JldHVybiBEZSYmKEFlLmVycm9yPURlKSxBZX0pfXBvcHVsYXRlRm9sZGVyTWFwKHEs''@;'; put 'put ''cmUpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBtZT0oMCxBLmlzUmVsYXRpdmVQYXRoKShxKT9gJHt0aGlzLnJvb3RGb2xkZXJOYW1lfS8ke3F9YDpxO2lmKHRoaXMuZm9sZGVyTWFwLmdldChtZSkpcmV0dXJuO2NvbnN0IENlPSIvZm9sZGVycy9mb2xk''@;'; put 'put ''ZXJzL0BpdGVtP3BhdGg9IittZSx7cmVzdWx0OkllfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke0NlfWAscmUpLmNhdGNoKFg9Pnt0aHJvdygwLHgucHJlZml4TWVzc2FnZSkoWCwiRXJyb3Igd2hpbGUgZ2V0dGluZyBmb2xkZXIuICIpfSk7aWYoIUllKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cihgVGhlIHBhdGggJHttZX0gZG9lcyBub3QgZXhpc3Qgb24gJHt0aGlzLnNlcnZlclVybH1gKTtjb25zdHtyZXN1bHQ6a2V9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYC9mb2xkZXJzL2ZvbGRlcnMvJHtJZS5pZH0vbWVtYmVycz9saW1pdD0ke0llLm1lbWJlckNvdW50PDUwMD81''@;'; put 'put ''MDA6SWUubWVtYmVyQ291bnR9YCxyZSkuY2F0Y2goWD0+e3Rocm93KDAseC5wcmVmaXhNZXNzYWdlKShYLCJFcnJvciB3aGlsZSBnZXR0aW5nIG1lbWJlcnMuICIpfSk7dGhpcy5mb2xkZXJNYXAuc2V0KG1lLGtlLml0ZW1zKX0pfXBvbGxKb2JTdGF0ZShxLHJlLG1lLENlKXtyZXR1cm4gYyh0''@;'; put 'put ''aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsVS5wb2xsSm9iU3RhdGUpKHRoaXMucmVxdWVzdENsaWVudCxxLHRoaXMuZGVidWcscmUsbWUsdm9pZCAwLENlKX0pfXVwbG9hZFRhYmxlcyhxLHJlKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7''@;'; put 'put ''cmV0dXJuKDAsVi51cGxvYWRUYWJsZXMpKHRoaXMucmVxdWVzdENsaWVudCxxLHJlKX0pfWdldEZvbGRlckRldGFpbHMocSxyZSl7cmV0dXJuIGModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IG1lPSgwLEEuaXNVcmkpKHEpP3E6YC9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/''@;'; put 'put ''cGF0aD0ke3F9YCx7cmVzdWx0OkNlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7bWV9YCxyZSkuY2F0Y2goSWU9PntpZihJZSBpbnN0YW5jZW9mIEMuQ2VydGlmaWNhdGVFcnJvcil0aHJvdyBJZTtyZXR1cm57cmVzdWx0Om51bGx9fSk7aWYoQ2Up''@;'; put 'put ''cmV0dXJuIENlfSl9Z2V0Rm9sZGVyVXJpKHEscmUpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBtZT15aWVsZCB0aGlzLmdldEZvbGRlckRldGFpbHMocSxyZSk7aWYobWUpcmV0dXJuYC9mb2xkZXJzL2ZvbGRlcnMvJHttZS5pZH1gfSl9Z2V0RmlsZVVy''@;'; put 'put ''aShxLHJlLG1lKXt2YXIgQ2U7cmV0dXJuIGModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEllPXlpZWxkIHRoaXMubGlzdEZvbGRlcihxLG1lLDFlMyx7cmV0dXJuRGV0YWlsczohMH0pLmNhdGNoKHFlPT57dGhyb3coMCx4LnByZWZpeE1lc3NhZ2UpKHFlLGBFcnJvciB3''@;'; put 'put ''aGlsZSBsaXN0aW5nIGZvbGRlcjogJHtxfS4gYCl9KTtpZighSWV8fCFJZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBObyBtZW1iZXJzIGZvdW5kIGluIGZvbGRlcjogJHtxfWApO2NvbnN0IGtlPW51bGw9PT0oQ2U9SWUuZmluZChxZT0+cWUubmFtZT09PXJlKSl8fHZvaWQgMD09PUNlP3Zv''@;'; put 'put ''aWQgMDpDZS51cmk7aWYoIWtlKXRocm93IG5ldyBFcnJvcihgRmlsZSAke3JlfSBub3QgZm91bmQgaW4gZm9sZGVyOiAke3F9YCk7cmV0dXJuIGtlfSl9Z2V0UmVjeWNsZUJpblVyaShxKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0Om1lfT15''@;'; put 'put ''aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9mb2xkZXJzL2ZvbGRlcnMvQG15UmVjeWNsZUJpbmAscSkuY2F0Y2goQ2U9PntpZihDZSBpbnN0YW5jZW9mIEMuQ2VydGlmaWNhdGVFcnJvcil0aHJvdyBDZTtyZXR1cm57cmVzdWx0Om51bGx9fSk7aWYobWUp''@;'; put 'put ''cmV0dXJuYC9mb2xkZXJzL2ZvbGRlcnMvJHttZS5pZH1gfSl9Z2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUocSxyZSl7cmV0dXJuIGModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldENvbXB1dGVDb250ZXh0QnlOYW1lKHEs''@;'; put 'put ''cmUpfSl9Z2V0Q29tcHV0ZUNvbnRleHRCeUlkKHEscmUpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dEJ5SWQocSxyZSl9KX1saXN0Rm9sZGVyKHEscmUsbWU9MjAsQ2Upe3Jl''@;'; put 'put ''dHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBJZT0oMCxBLmlzVXJpKShxKT9xOnlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKHEscmUpLHtyZXN1bHQ6a2V9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtJZX0vbWVtYmVy''@;'; put 'put ''cz9saW1pdD0ke21lfWAscmUpO2xldCBxZT1bXTtyZXR1cm4ga2UmJmtlLml0ZW1zJiYocWU9Q2U/LnJldHVybkRldGFpbHM/a2UuaXRlbXM6a2UuaXRlbXMubWFwKFg9PlgubmFtZSkpLHFlfSl9bW92ZUZvbGRlcihxLHJlLG1lLENlKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVu''@;'; put 'put ''Y3Rpb24qKCl7Y29uc3QgSWU9cS5zcGxpdCgiLyIpLnBvcCgpO2lmKHlpZWxkIHRoaXMuZ2V0Rm9sZGVyRGV0YWlscyhyZSxDZSkpbWU9SWU7ZWxzZXtsZXQgaz1yZS5zcGxpdCgiLyIpO2suc3BsaWNlKGsubGVuZ3RoLTEsMSkscmU9ay5qb2luKCIvIil9Y29uc3QgcWU9eWllbGQgdGhpcy5n''@;'; put 'put ''ZXRGb2xkZXJVcmkocSxDZSksWD15aWVsZCB0aGlzLmdldEZvbGRlclVyaShyZSxDZSk7aWYoIXFlKXJldHVybjtjb25zdCBmPXFlPy5zcGxpdCgiLyIpLnBvcCgpLHtyZXN1bHQ6Yn09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBhdGNoKGAke3RoaXMuc2VydmVyVXJsfSR7cWV9YCx7aWQ6''@;'; put 'put ''ZixuYW1lOm1lLHBhcmVudEZvbGRlclVyaTpYfSxDZSkuY2F0Y2goaz0+e3Rocm93IGsuY29kZSYmIkVOT1RGT1VORCI9PT1rLmNvZGU/e2JvZHk6e21lc3NhZ2U6YEZvbGRlciAnJHtxLnNwbGl0KCIvIikucG9wKCl9JyB3YXMgbm90IGZvdW5kLmB9fTprfSk7cmV0dXJuIGJ8fHZvaWQgMH0p''@;'; put 'put ''fWRlbGV0ZUZvbGRlcihxLHJlKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbWU9eWllbGQgdGhpcy5nZXRSZWN5Y2xlQmluVXJpKHJlKSxDZT1xLnNwbGl0KCIvIikucG9wKCl8fCIiLEllPW5ldyBEYXRlLHFlPUNlKyIgIitJZS50b0xvY2FsZURhdGVT''@;'; put 'put ''dHJpbmcoKSsiICIrSWUudG9Mb2NhbGVUaW1lU3RyaW5nKCk7cmV0dXJuIHlpZWxkIHRoaXMubW92ZUZvbGRlcihxLG1lLHFlLHJlKX0pfX19LDY5ODEwKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihWLE4seixZKXtyZXR1cm4gbmV3''@;'; put 'put ''KHp8fCh6PVByb21pc2UpKShmdW5jdGlvbihXLHEpe2Z1bmN0aW9uIHJlKEllKXt0cnl7Q2UoWS5uZXh0KEllKSl9Y2F0Y2goa2Upe3Eoa2UpfX1mdW5jdGlvbiBtZShJZSl7dHJ5e0NlKFkudGhyb3coSWUpKX1jYXRjaChrZSl7cShrZSl9fWZ1bmN0aW9uIENlKEllKXtJZS5kb25lP1coSWUu''@;'; put 'put ''dmFsdWUpOmZ1bmN0aW9uIEYoVyl7cmV0dXJuIFcgaW5zdGFuY2VvZiB6P1c6bmV3IHooZnVuY3Rpb24ocSl7cShXKX0pfShJZS52YWx1ZSkudGhlbihyZSxtZSl9Q2UoKFk9WS5hcHBseShWLE58fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIs''@;'; put 'put ''e3ZhbHVlOiEwfSk7Y29uc3QgYz1oKDI5MjY2KSxzPWgoNTM1NzQpLEE9aCg4MjAxNSksdj1oKDcyODMxKSxDPWgoNDU4MDMpLHc9aCg0ODc5KSxTPWgoMzYzMSksTD1oKDI4ODE2KSxSPWgoNzc1NjApLHg9aCg2MTM5MSksVT17c2VydmVyVXJsOiIiLHBhdGhTQVNKUzoiL1NBU2pzQXBpL3N0''@;'; put 'put ''cC9leGVjdXRlIixwYXRoU0FTOToiL1NBU1N0b3JlZFByb2Nlc3MvZG8iLHBhdGhTQVNWaXlhOiIvU0FTSm9iRXhlY3V0aW9uIixhcHBMb2M6Ii9QdWJsaWMvc2VlZGFwcCIsc2VydmVyVHlwZTpTLlNlcnZlclR5cGUuU2FzVml5YSxkZWJ1ZzohMSxjb250ZXh0TmFtZToiU0FTIEpvYiBFeGVj''@;'; put 'put ''dXRpb24gY29tcHV0ZSBjb250ZXh0Iix1c2VDb21wdXRlQXBpOm51bGwsbG9naW5NZWNoYW5pc206cy5Mb2dpbk1lY2hhbmlzbS5EZWZhdWx0fTtqLmRlZmF1bHQ9Y2xhc3MgSHtjb25zdHJ1Y3RvcihOKXt0aGlzLnNhc2pzQ29uZmlnPW5ldyBzLlNBU2pzQ29uZmlnLHRoaXMuam9ic1BhdGg9''@;'; put 'put ''IiIsdGhpcy5zYXNWaXlhQXBpQ2xpZW50PW51bGwsdGhpcy5zYXM5QXBpQ2xpZW50PW51bGwsdGhpcy5zYXNKU0FwaUNsaWVudD1udWxsLHRoaXMuZmlsZVVwbG9hZGVyPW51bGwsdGhpcy5hdXRoTWFuYWdlcj1udWxsLHRoaXMucmVxdWVzdENsaWVudD1udWxsLHRoaXMud2ViSm9iRXhlY3V0''@;'; put 'put ''b3I9bnVsbCx0aGlzLnNhc2pzSm9iRXhlY3V0b3I9bnVsbCx0aGlzLmNvbXB1dGVKb2JFeGVjdXRvcj1udWxsLHRoaXMuamVzSm9iRXhlY3V0b3I9bnVsbCx0aGlzLnNhczlKb2JFeGVjdXRvcj1udWxsLHRoaXMucmVzZW5kV2FpdGluZ1JlcXVlc3RzPSgpPT55KHRoaXMsdm9pZCAwLHZvaWQg''@;'; put 'put ''MCxmdW5jdGlvbiooKXt2YXIgeixZLEYsVyxxO3lpZWxkIG51bGw9PT0oej10aGlzLndlYkpvYkV4ZWN1dG9yKXx8dm9pZCAwPT09ej92b2lkIDA6ei5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKSx5aWVsZCBudWxsPT09KFk9dGhpcy5jb21wdXRlSm9iRXhlY3V0b3IpfHx2b2lkIDA9PT1ZP3Zv''@;'; put 'put ''aWQgMDpZLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpLHlpZWxkIG51bGw9PT0oRj10aGlzLmplc0pvYkV4ZWN1dG9yKXx8dm9pZCAwPT09Rj92b2lkIDA6Ri5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKSx5aWVsZCBudWxsPT09KFc9dGhpcy5maWxlVXBsb2FkZXIpfHx2b2lkIDA9PT1XP3ZvaWQg''@;'; put 'put ''MDpXLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpLHlpZWxkIG51bGw9PT0ocT10aGlzLnNhc2pzSm9iRXhlY3V0b3IpfHx2b2lkIDA9PT1xP3ZvaWQgMDpxLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpfSksdGhpcy5zZXRWZXJib3NlTW9kZT16PT57dmFyIFk7bnVsbD09PShZPXRoaXMucmVxdWVz''@;'; put 'put ''dENsaWVudCl8fHZvaWQgMD09PVl8fFkuc2V0VmVyYm9zZU1vZGUoeil9LHRoaXMuc2FzanNDb25maWc9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LFUpLE4pLHRoaXMuc2V0dXBDb25maWd1cmF0aW9uKCl9Z2V0Q3NyZlRva2VuKE49ImdlbmVyYWwiKXt2YXIgejtyZXR1cm4gbnVs''@;'; put 'put ''bD09PSh6PXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PXo/dm9pZCAwOnouZ2V0Q3NyZlRva2VuKE4pfWV4ZWN1dGVTY3JpcHQoe2xpbmVzT2ZDb2RlOk4sZmlsZU5hbWU6eixjb250ZXh0TmFtZTpZLHJ1blRpbWU6RixhdXRoQ29uZmlnOlcsYXV0aENvbmZpZ1Nhczk6cSxkZWJ1Zzpy''@;'; put 'put ''ZSxvblRva2Vuc1JlZnJlc2hlZDptZX0pe3ZhciBDZSxJZTtyZXR1cm4geSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYodGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZXhlY3V0ZVNjcmlwdCIsW1MuU2VydmVyVHlwZS5TYXM5LFMuU2VydmVyVHlwZS5TYXNqcyxTLlNlcnZlclR5''@;'; put 'put ''cGUuU2FzVml5YV0pLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVMuU2VydmVyVHlwZS5TYXM5KXtpZighcSl0aHJvdyBuZXcgRXJyb3IoIkF1dGggY29uZmlnIGZvciBzYXM5IGlzIG5vdCBwcm92aWRlZCIpO3JldHVybiB5aWVsZCBudWxsPT09KENlPXRoaXMuc2FzOUFwaUNsaWVu''@;'; put 'put ''dCl8fHZvaWQgMD09PUNlP3ZvaWQgMDpDZS5leGVjdXRlU2NyaXB0KE4scS51c2VyTmFtZSxxLnBhc3N3b3JkKX1pZih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1TLlNlcnZlclR5cGUuU2FzanMpcmV0dXJuIHlpZWxkIG51bGw9PT0oSWU9dGhpcy5zYXNKU0FwaUNsaWVudCl8fHZv''@;'; put 'put ''aWQgMD09PUllP3ZvaWQgMDpJZS5leGVjdXRlU2NyaXB0KE4uam9pbigiXG4iKSxGLFcpO2lmKHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVMuU2VydmVyVHlwZS5TYXNWaXlhKXtpZighKFk9WXx8dGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSkpdGhyb3cgbmV3IEVycm9yKCJD''@;'; put 'put ''b250ZXh0IG5hbWUgaXMgdW5kZWZpbmVkLiBQbGVhc2Ugc2V0IGEgYGNvbnRleHROYW1lYCBpbiB5b3VyIFNBU2pzIG9yIG92ZXJyaWRlIGNvbmZpZy4iKTtpZigheil0aHJvdyBuZXcgRXJyb3IoIkZpbGUgbmFtZSBpcyByZXF1aXJlZCBpbiBjYXNlIG9mIFNBUyBWSVlBLiBQbGVhc2UgcHJv''@;'; put 'put ''dmlkZSBhIGBmaWxlTmFtZWAuIik7cmV0dXJuIHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5leGVjdXRlU2NyaXB0KHosTixZLFcsbnVsbCxyZXx8dGhpcy5zYXNqc0NvbmZpZy5kZWJ1ZywhMSwhMCx2b2lkIDAsITEsdm9pZCAwLG1lKX19KX1leGVjdXRlSm9iKE4seixZKXt2YXIgRjty''@;'; put 'put ''ZXR1cm4geSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImV4ZWN1dGVTY3JpcHQiLFtTLlNlcnZlclR5cGUuU2FzanNdKSx5aWVsZCBudWxsPT09KEY9dGhpcy5zYXNKU0FwaUNsaWVudCl8fHZvaWQgMD09PUY/dm9pZCAwOkYu''@;'; put 'put ''ZXhlY3V0ZUpvYihOLHosWSl9KX1nZXRDb21wdXRlQ29udGV4dHMoTil7cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRDb21wdXRlQ29udGV4dHMiLFtTLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRo''@;'; put 'put ''aXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb21wdXRlQ29udGV4dHMoTil9KX1nZXRMYXVuY2hlckNvbnRleHRzKE4pe3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0TGF1bmNoZXJDb250ZXh0cyIsW1MuU2Vy''@;'; put 'put ''dmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldExhdW5jaGVyQ29udGV4dHMoTil9KX1nZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldERlZmF1bHRDb21wdXRlQ29udGV4dHMiLFtTLlNlcnZl''@;'; put 'put ''clR5cGUuU2FzVml5YV0pLHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzKCl9Z2V0RXhlY3V0YWJsZUNvbnRleHRzKE4pe3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0''@;'; put 'put ''RXhlY3V0YWJsZUNvbnRleHRzIixbUy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0RXhlY3V0YWJsZUNvbnRleHRzKE4pfSl9Y3JlYXRlQ29tcHV0ZUNvbnRleHQoTix6LFksRixXLHEpe3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5j''@;'; put 'put ''dGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlQ29tcHV0ZUNvbnRleHQiLFtTLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVDb21wdXRlQ29udGV4dChOLHosWSxGLFcscSl9KX1jcmVhdGVMYXVuY2hlckNv''@;'; put 'put ''bnRleHQoTix6LFksRil7cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJjcmVhdGVMYXVuY2hlckNvbnRleHQiLFtTLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVh''@;'; put 'put ''dGVMYXVuY2hlckNvbnRleHQoTix6LFksRil9KX1lZGl0Q29tcHV0ZUNvbnRleHQoTix6LFkpe3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZWRpdENvbXB1dGVDb250ZXh0IixbUy5TZXJ2ZXJUeXBlLlNhc1Zp''@;'; put 'put ''eWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZWRpdENvbXB1dGVDb250ZXh0KE4seixZKX0pfWRlbGV0ZUNvbXB1dGVDb250ZXh0KE4seil7cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZWxldGVD''@;'; put 'put ''b21wdXRlQ29udGV4dCIsW1MuU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlbGV0ZUNvbXB1dGVDb250ZXh0KE4seil9KX1nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShOLHope3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUiLFtTLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShOLHopfSl9Z2V0Q29tcHV0ZUNvbnRleHRCeUlkKE4seil7''@;'; put 'put ''cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRDb21wdXRlQ29udGV4dEJ5SWQiLFtTLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb21wdXRlQ29udGV4dEJ5''@;'; put 'put ''SWQoTix6KX0pfWNyZWF0ZVNlc3Npb24oTix6KXtyZXR1cm4geSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZVNlc3Npb24iLFtTLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVu''@;'; put 'put ''dC5jcmVhdGVTZXNzaW9uKE4seil9KX1jcmVhdGVGb2xkZXIoTix6LFksRixXLHEpe3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gVz95aWVsZCBXLmNyZWF0ZUZvbGRlcihOLHosWSxGLHEpOnlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVG''@;'; put 'put ''b2xkZXIoTix6LFksRixxKX0pfWNyZWF0ZUZpbGUoTix6LFksRixXLHEpe3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gcT95aWVsZCBxLmNyZWF0ZUZpbGUoTix6LFksRixXKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlRmlsZShOLHos''@;'; put 'put ''WSxGLFcpfSl9Z2V0RmlsZUNvbnRlbnQoTix6LFkpe3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0RmlsZUNvbnRlbnQiLFtTLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNs''@;'; put 'put ''aWVudC5nZXRGaWxlQ29udGVudChOLHosWSl9KX11cGRhdGVGaWxlQ29udGVudChOLHosWSxGKXtyZXR1cm4geSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoInVwZGF0ZUZpbGVDb250ZW50IixbUy5TZXJ2ZXJUeXBlLlNhc1Zp''@;'; put 'put ''eWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQudXBkYXRlRmlsZUNvbnRlbnQoTix6LFksRil9KX1nZXRGb2xkZXIoTix6KXtyZXR1cm4geSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEZvbGRlciIsW1MuU2Vy''@;'; put 'put ''dmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEZvbGRlcihOLHopfSl9ZGVsZXRlRm9sZGVyKE4seil7dmFyIFk7cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZWxldGVG''@;'; put 'put ''b2xkZXIiLFtTLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIG51bGw9PT0oWT10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1ZP3ZvaWQgMDpZLmRlbGV0ZUZvbGRlcihOLHopfSl9bGlzdEZvbGRlcihOLHosWSxGPSExKXt2YXIgVztyZXR1cm4geSh0aGlzLHZvaWQgMCx2b2lk''@;'; put 'put ''IDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImxpc3RGb2xkZXIiLFtTLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIG51bGw9PT0oVz10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1XP3ZvaWQgMDpXLmxpc3RGb2xkZXIoTix6LFkse3JldHVy''@;'; put 'put ''bkRldGFpbHM6Rn0pfSl9bW92ZUZvbGRlcihOLHosWSxGKXt2YXIgVztyZXR1cm4geSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoIm1vdmVGb2xkZXIiLFtTLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIG51bGw9PT0oVz10''@;'; put 'put ''aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1XP3ZvaWQgMDpXLm1vdmVGb2xkZXIoTix6LFksRil9KX1jcmVhdGVKb2JEZWZpbml0aW9uKE4seixZLEYsVyxxKXtyZXR1cm4geSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0''@;'; put 'put ''ZWQoImNyZWF0ZUpvYkRlZmluaXRpb24iLFtTLlNlcnZlclR5cGUuU2FzVml5YV0pLHE/eWllbGQgcS5jcmVhdGVKb2JEZWZpbml0aW9uKE4seixZLEYsVyk6eWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUpvYkRlZmluaXRpb24oTix6LFksRixXKX0pfWdldEF1dGhDb2RlKE4p''@;'; put 'put ''e3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0QXV0aENvZGUiLFtTLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRBdXRoQ29kZShOKX0pfWdldEFjY2Vzc1Rv''@;'; put 'put ''a2VuKE4seixZKXtyZXR1cm4geSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEFjY2Vzc1Rva2VuIixbUy5TZXJ2ZXJUeXBlLlNhc1ZpeWEsUy5TZXJ2ZXJUeXBlLlNhc2pzXSksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJU''@;'; put 'put ''eXBlPT09Uy5TZXJ2ZXJUeXBlLlNhc2pzP3lpZWxkIHRoaXMuc2FzSlNBcGlDbGllbnQuZ2V0QWNjZXNzVG9rZW4oTixZKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0QWNjZXNzVG9rZW4oTix6LFkpfSl9cmVmcmVzaFRva2VucyhOLHosWSl7cmV0dXJuIHkodGhpcyx2b2lkIDAs''@;'; put 'put ''dm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJyZWZyZXNoVG9rZW5zIixbUy5TZXJ2ZXJUeXBlLlNhc1ZpeWEsUy5TZXJ2ZXJUeXBlLlNhc2pzXSksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Uy5TZXJ2ZXJUeXBlLlNhc2pzP3lpZWxkIHRo''@;'; put 'put ''aXMuc2FzSlNBcGlDbGllbnQucmVmcmVzaFRva2VucyhZKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQucmVmcmVzaFRva2VucyhOLHosWSl9KX1kZWxldGVDbGllbnQoTix6KXtyZXR1cm4geSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RT''@;'; put 'put ''dXBwb3J0ZWQoImRlbGV0ZUNsaWVudCIsW1MuU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlbGV0ZUNsaWVudChOLHopfSl9Z2V0U2FzanNDb25maWcoKXtyZXR1cm4gdGhpcy5zYXNqc0NvbmZpZ31nZXRVc2VyTmFtZSgpe3JldHVybiB0aGlzLmF1''@;'; put 'put ''dGhNYW5hZ2VyLnVzZXJOYW1lfXNldFNBU2pzQ29uZmlnKE4pe3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLnNhc2pzQ29uZmlnPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLnNhc2pzQ29uZmlnKSxOKSx0aGlzLnNldHVwQ29uZmlndXJh''@;'; put 'put ''dGlvbigpfSl9c2V0RGVidWdTdGF0ZShOKXt0aGlzLnNhc2pzQ29uZmlnLmRlYnVnPU4sdGhpcy5zYXNWaXlhQXBpQ2xpZW50JiYodGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlYnVnPU4pfWNoZWNrU2Vzc2lvbigpe3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5hdXRoTWFuYWdlci5jaGVja1Nlc3Npb24oKX0pfWxvZ0luKE4seixZLEY9e30pe3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLnNhc2pzQ29uZmlnLmxvZ2luTWVjaGFuaXNtPT09cy5Mb2dpbk1lY2hhbmlzbS5EZWZhdWx0KXtpZighTnx8''@;'; put 'put ''IXopdGhyb3cgbmV3IEVycm9yKCJBIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcmUgcmVxdWlyZWQgd2hlbiB1c2luZyB0aGUgZGVmYXVsdCBsb2dpbiBtZWNoYW5pc20uIik7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIubG9nSW4oTix6KX1pZih0eXBlb2Ygd2luZG93PiJ1Iil0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIlRoZSByZWRpcmVjdGVkIGxvZ2luIG1lY2hhbmlzbSBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIHRoZSBicm93c2VyLiIpO3JldHVybiB0aGlzLmF1dGhNYW5hZ2VyLnJlZGlyZWN0ZWRMb2dJbihGKX0pfWxvZ091dCgpe3JldHVybiB0aGlzLmF1dGhNYW5hZ2VyLmxvZ091''@;'; put 'put ''dCgpfXVwbG9hZEZpbGUoTix6LFksRj17fSxXKXtyZXR1cm4geSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Rj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5zYXNqc0NvbmZpZyksRik7Y29uc3QgcT17ZmlsZXM6eixwYXJhbXM6WX07cmV0dXJuIHlpZWxkIHRo''@;'; put 'put ''aXMuZmlsZVVwbG9hZGVyLmV4ZWN1dGUoTixxLEYsVyl9KX1yZXF1ZXN0KE4seixZPXt9LEYsVyxxPVtdKXtyZXR1cm4geSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7WT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5zYXNqc0NvbmZpZyksWSk7Y29uc3QgcmU9''@;'; put 'put ''KDAsYy52YWxpZGF0ZUlucHV0KSh6KTtyZXR1cm4gcmUuc3RhdHVzP1kuc2VydmVyVHlwZT09PVMuU2VydmVyVHlwZS5TYXNqcz95aWVsZCB0aGlzLnNhc2pzSm9iRXhlY3V0b3IuZXhlY3V0ZShOLHosWSxGLFcscSk6WS5zZXJ2ZXJUeXBlPT09Uy5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJm51bGwh''@;'; put 'put ''PVkudXNlQ29tcHV0ZUFwaT9ZLnVzZUNvbXB1dGVBcGk/eWllbGQgdGhpcy5jb21wdXRlSm9iRXhlY3V0b3IuZXhlY3V0ZShOLHosWSxGLFcpOihZLmNvbnRleHROYW1lfHwoWT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sWSkse2NvbnRleHROYW1lOiJTQVMgSm9iIEV4ZWN1dGlv''@;'; put 'put ''biBjb21wdXRlIGNvbnRleHQifSkpLHlpZWxkIHRoaXMuamVzSm9iRXhlY3V0b3IuZXhlY3V0ZShOLHosWSxGLFcscSkpOlkuc2VydmVyVHlwZT09PVMuU2VydmVyVHlwZS5TYXM5JiZZLnVzZXJuYW1lJiZZLnBhc3N3b3JkP3lpZWxkIHRoaXMuc2FzOUpvYkV4ZWN1dG9yLmV4ZWN1dGUoTix6''@;'; put 'put ''LFkpOnlpZWxkIHRoaXMud2ViSm9iRXhlY3V0b3IuZXhlY3V0ZShOLHosWSxGLFcscSk6UHJvbWlzZS5yZWplY3QobmV3IHMuRXJyb3JSZXNwb25zZShyZS5tc2cpKX0pfWRlcGxveVNlcnZpY2VQYWNrKE4seixZLEYsVz0hMSl7cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u''@;'; put 'put ''Kigpe3RoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlcGxveVNlcnZpY2VQYWNrIixbUy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKTtsZXQgcT1udWxsO2lmKFl8fHopWXx8KFk9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwpLHp8fCh6PXRoaXMuc2FzanNDb25maWcuYXBwTG9jKSx0aGlzLnNhc2pz''@;'; put 'put ''Q29uZmlnLnNlcnZlclR5cGU9PT1TLlNlcnZlclR5cGUuU2FzVml5YT8ocT1uZXcgQS5TQVNWaXlhQXBpQ2xpZW50KFkseix0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENsaWVudCkscS5kZWJ1Zz10aGlzLnNhc2pzQ29uZmlnLmRlYnVnKTp0aGlzLnNhc2pzQ29u''@;'; put 'put ''ZmlnLnNlcnZlclR5cGU9PT1TLlNlcnZlclR5cGUuU2FzOSYmKHE9bmV3IHYuU0FTOUFwaUNsaWVudChZLHRoaXMuam9ic1BhdGgsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucykpO2Vsc2V7bGV0IG1lPW51bGw7dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Uy5TZXJ2''@;'; put 'put ''ZXJUeXBlLlNhc1ZpeWE/bWU9dGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbmZpZygpOnRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVMuU2VydmVyVHlwZS5TYXM5JiYobWU9dGhpcy5zYXM5QXBpQ2xpZW50LmdldENvbmZpZygpKSxZPW1lLnNlcnZlclVybCx6PW1lLnJvb3RGb2xk''@;'; put 'put ''ZXJOYW1lfU4ubWVtYmVyc1swXS5tZW1iZXJzJiZOLm1lbWJlcnNbMF0ubWVtYmVycy5zb3J0KG1lPT4iZm9sZGVyIj09PW1lLnR5cGU/LTE6MSk7Y29uc3QgcmU9Ti5tZW1iZXJzO3lpZWxkIHRoaXMuY3JlYXRlRm9sZGVyc0FuZFNlcnZpY2VzKHoscmUsRixxLFcpfSl9c3RhcnRDb21wdXRl''@;'; put 'put ''Sm9iKE4seixZPXt9LEYsVyxxLHJlPSExLG1lLENlLEllKXt2YXIga2UscWUsWCxmO3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZihZPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLnNhc2pzQ29uZmlnKSxZKSx0aGlzLmlzTWV0aG9kU3VwcG9y''@;'; put 'put ''dGVkKCJzdGFydENvbXB1dGVKb2IiLFtTLlNlcnZlclR5cGUuU2FzVml5YV0pLCFZLmNvbnRleHROYW1lKXRocm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHVuZGVmaW5lZC4gUGxlYXNlIHNldCBhIGBjb250ZXh0TmFtZWAgaW4geW91ciBTQVNqcyBvciBvdmVycmlkZSBjb25maWcu''@;'; put 'put ''Iik7cmV0dXJuIENlPyhudWxsPT09KGtlPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PWtlfHxrZS5zZXRWZXJib3NlTW9kZShDZSksbnVsbD09PShxZT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1xZXx8cWUuZW5hYmxlVmVyYm9zZU1vZGUoKSk6ITE9PT1DZSYmKG51bGw9''@;'; put 'put ''PT0oWD10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1YfHxYLmRpc2FibGVWZXJib3NlTW9kZSgpKSxudWxsPT09KGY9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5leGVjdXRlQ29tcHV0ZUpvYihOLFkuY29udGV4dE5hbWUsWS5kZWJ1Zyx6LEYsISFX''@;'; put 'put ''LCExLHEscmUsbWUsSWUpfSl9ZmV0Y2hMb2dGaWxlQ29udGVudChOLHope3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChOLHopLnRoZW4oWT0+e2lmKCFZKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcg''@;'; put 'put ''cy5FcnJvclJlc3BvbnNlKCJFcnJvciB3aGlsZSBmZXRjaGluZyBsb2cuIFJlc3BvbnNlIHdhcyBub3QgcHJvdmlkZWQuIikpO3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoWS5yZXN1bHQpfWNhdGNoKEYpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgcy5FcnJvclJlc3BvbnNlKCJFcnJv''@;'; put 'put ''ciB3aGlsZSBmZXRjaGluZyBsb2cuIFRoZSByZXN1bHQgaXMgbm90IHZhbGlkLiIsRikpfX0pfSl9Z2V0U2FzUmVxdWVzdHMoKXtyZXR1cm5bLi4udGhpcy5yZXF1ZXN0Q2xpZW50LmdldFJlcXVlc3RzKCldLnNvcnQoYy5jb21wYXJlVGltZXN0YW1wcyl9Y2xlYXJTYXNSZXF1ZXN0cygpe3Ro''@;'; put 'put ''aXMucmVxdWVzdENsaWVudC5jbGVhclJlcXVlc3RzKCl9c2V0dXBDb25maWd1cmF0aW9uKCl7aWYodm9pZCAwPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmx8fCIiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwpaWYodHlwZW9mIGxvY2F0aW9uPCJ1Iil7bGV0IE49YCR7bG9jYXRp''@;'; put 'put ''b24ucHJvdG9jb2x9Ly8ke2xvY2F0aW9uLmhvc3RuYW1lfWA7bG9jYXRpb24ucG9ydCYmKE49YCR7Tn06JHtsb2NhdGlvbi5wb3J0fWApLHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsPU59ZWxzZSB0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybD0iIjsiLyI9PT10aGlzLnNhc2pzQ29uZmln''@;'; put 'put ''LnNlcnZlclVybC5zbGljZSgtMSkmJih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybD10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybC5zbGljZSgwLC0xKSksdGhpcy5yZXF1ZXN0Q2xpZW50P3RoaXMucmVxdWVzdENsaWVudC5zZXRDb25maWcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmws''@;'; put 'put ''dGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucyk6dGhpcy5yZXF1ZXN0Q2xpZW50PW5ldyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1TLlNlcnZlclR5cGUuU2FzanM/Ui5TYXNqc1JlcXVlc3RDbGllbnQ6TC5SZXF1ZXN0Q2xpZW50KSh0aGlzLnNhc2pzQ29uZmlnLnNl''@;'; put 'put ''cnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zLHRoaXMuc2FzanNDb25maWcucmVxdWVzdEhpc3RvcnlMaW1pdCx0aGlzLnNhc2pzQ29uZmlnLnZlcmJvc2UpLHRoaXMuam9ic1BhdGg9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Uy5TZXJ2ZXJUeXBlLlNh''@;'; put 'put ''c1ZpeWE/dGhpcy5zYXNqc0NvbmZpZy5wYXRoU0FTVml5YTp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1TLlNlcnZlclR5cGUuU2FzOT90aGlzLnNhc2pzQ29uZmlnLnBhdGhTQVM5OnRoaXMuc2FzanNDb25maWcucGF0aFNBU0pTLHRoaXMuYXV0aE1hbmFnZXI9bmV3IHcuQXV0aE1h''@;'; put 'put ''bmFnZXIodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cyksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Uy5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJih0aGlz''@;'; put 'put ''LnNhc1ZpeWFBcGlDbGllbnQ/dGhpcy5zYXNWaXlhQXBpQ2xpZW50LnNldENvbmZpZyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmFwcExvYyk6dGhpcy5zYXNWaXlhQXBpQ2xpZW50PW5ldyBBLlNBU1ZpeWFBcGlDbGllbnQodGhpcy5zYXNqc0NvbmZpZy5z''@;'; put 'put ''ZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MsdGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWJ1Zz10aGlzLnNhc2pzQ29uZmlnLmRlYnVnKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1T''@;'; put 'put ''LlNlcnZlclR5cGUuU2FzOSYmKHRoaXMuc2FzOUFwaUNsaWVudD90aGlzLnNhczlBcGlDbGllbnQuc2V0Q29uZmlnKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKTp0aGlzLnNhczlBcGlDbGllbnQ9bmV3IHYuU0FTOUFwaUNsaWVudCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlz''@;'; put 'put ''LmpvYnNQYXRoLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1TLlNlcnZlclR5cGUuU2FzanMmJih0aGlzLnNhc0pTQXBpQ2xpZW50fHwodGhpcy5zYXNKU0FwaUNsaWVudD1uZXcgQy5TQVNqc0FwaUNsaWVudCh0aGlz''@;'; put 'put ''LnJlcXVlc3RDbGllbnQpKSksdGhpcy5maWxlVXBsb2FkZXI9bmV3IHguRmlsZVVwbG9hZGVyKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy53ZWJKb2JFeGVjdXRvcj1u''@;'; put 'put ''ZXcgeC5XZWJKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUsdGhpcy5qb2JzUGF0aCx0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KSx0aGlzLnNhc2pzSm9iRXhlY3V0b3I9bmV3IHguU2FzanNK''@;'; put 'put ''b2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5zYXM5Sm9iRXhlY3V0b3I9bmV3IHguU2FzOUpvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVy''@;'; put 'put ''VHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zKSx0aGlzLmNvbXB1dGVKb2JFeGVjdXRvcj1uZXcgeC5Db21wdXRlSm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNWaXlhQXBp''@;'; put 'put ''Q2xpZW50KSx0aGlzLmplc0pvYkV4ZWN1dG9yPW5ldyB4Lkplc0pvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzVml5YUFwaUNsaWVudCl9Y3JlYXRlRm9sZGVyc0FuZFNlcnZpY2VzKE4seixZLEYsVyl7cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe3lpZWxkKDAsYy5hc3luY0ZvckVhY2gpKHoscT0+eSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7c3dpdGNoKHEudHlwZSl7Y2FzZSJmb2xkZXIiOnlpZWxkIHRoaXMuY3JlYXRlRm9sZGVyKHEubmFtZSxOLHZvaWQgMCxZLEYsVyk7YnJlYWs7Y2FzZSJmaWxlIjp5''@;'; put 'put ''aWVsZCB0aGlzLmNyZWF0ZUZpbGUocS5uYW1lLHEuY29kZSxOLHZvaWQgMCxZLEYpO2JyZWFrO2Nhc2Uic2VydmljZSI6eWllbGQgdGhpcy5jcmVhdGVKb2JEZWZpbml0aW9uKHEubmFtZSxxLmNvZGUsTix2b2lkIDAsWSxGKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5pZGVu''@;'; put 'put ''dGlmaWVkIG1lbWJlciAnJHtxLm5hbWV9JyBwcm92aWRlZC5gKX0iZm9sZGVyIj09PXEudHlwZSYmcS5tZW1iZXJzJiZxLm1lbWJlcnMubGVuZ3RoJiYoeWllbGQgdGhpcy5jcmVhdGVGb2xkZXJzQW5kU2VydmljZXMoYCR7Tn0vJHtxLm5hbWV9YCxxLm1lbWJlcnMsWSxGLFcpKX0pKX0pfWlz''@;'; put 'put ''TWV0aG9kU3VwcG9ydGVkKE4seil7aWYoIXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZXx8IXouaW5jbHVkZXModGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlKSl0aHJvdyBuZXcgRXJyb3IoYE1ldGhvZCAnJHtOfScgaXMgb25seSBzdXBwb3J0ZWQgb24gJHt6LmpvaW4oIiwgIil9IHNl''@;'; put 'put ''cnZlcnMuYCl9ZW5hYmxlVmVyYm9zZU1vZGUoTix6KXt2YXIgWTtudWxsPT09KFk9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09WXx8WS5lbmFibGVWZXJib3NlTW9kZShOLHopfWRpc2FibGVWZXJib3NlTW9kZSgpe3ZhciBOO251bGw9PT0oTj10aGlzLnJlcXVlc3RDbGllbnQpfHx2''@;'; put 'put ''b2lkIDA9PT1OfHxOLmRpc2FibGVWZXJib3NlTW9kZSgpfVRhYmxlcyhOLHope3JldHVybiBuZXcgcy5UYWJsZXMoTix6KX19fSw0NTgwMyhmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUix4LFUsSCl7cmV0dXJuIG5ldyhVfHwoVT1Q''@;'; put 'put ''cm9taXNlKSkoZnVuY3Rpb24oTix6KXtmdW5jdGlvbiBZKHEpe3RyeXtXKEgubmV4dChxKSl9Y2F0Y2gocmUpe3oocmUpfX1mdW5jdGlvbiBGKHEpe3RyeXtXKEgudGhyb3cocSkpfWNhdGNoKHJlKXt6KHJlKX19ZnVuY3Rpb24gVyhxKXtxLmRvbmU/TihxLnZhbHVlKTpmdW5jdGlvbiBWKE4p''@;'; put 'put ''e3JldHVybiBOIGluc3RhbmNlb2YgVT9OOm5ldyBVKGZ1bmN0aW9uKHope3ooTil9KX0ocS52YWx1ZSkudGhlbihZLEYpfVcoKEg9SC5hcHBseShSLHh8fFtdKSkubmV4dCgpKX0pfSxjPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihSKXtyZXR1cm4gUiYmUi5fX2VzTW9k''@;'; put 'put ''dWxlP1I6e2RlZmF1bHQ6Un19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLlNBU2pzQXBpQ2xpZW50PXZvaWQgMDtjb25zdCBzPWMoaCg1MTg5NCkpLEE9aCgzNjMxKSx2PWgoNjM0MCksQz1oKDk5MjM5KSx3PWgoOTY3MjUpLFM9aCgyOTYwOSk7''@;'; put 'put ''ai5TQVNqc0FwaUNsaWVudD1jbGFzcyBMe2NvbnN0cnVjdG9yKHgpe3RoaXMucmVxdWVzdENsaWVudD14fWdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdCh4KXtyZXR1cm4geSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoeCl7Y29uc3R7YWNjZXNzX3Rva2VuOlV9PXlpZWxkKDAs''@;'; put 'put ''Uy5nZXRUb2tlbnMpKHRoaXMucmVxdWVzdENsaWVudCx4LEEuU2VydmVyVHlwZS5TYXNqcyk7cmV0dXJuIFV9fSl9ZGVwbG95KHgsVSxIKXtyZXR1cm4geSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVj15aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdChI''@;'; put 'put ''KTt4LmFwcExvYz14LmFwcExvY3x8VTtjb25zdHtyZXN1bHQ6Tn09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL2RyaXZlL2RlcGxveSIseCxWLHZvaWQgMCx7fSx7bWF4Q29udGVudExlbmd0aDoxLzAsbWF4Qm9keUxlbmd0aDoxLzB9KTtyZXR1cm4gUHJvbWlzZS5y''@;'; put 'put ''ZXNvbHZlKE4pfSl9ZGVwbG95WmlwRmlsZSh4LFUpe3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtjcmVhdGVSZWFkU3RyZWFtOkh9PWgoMjU5MDgpLFY9eWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3QoVSksTj15aWVsZCBIKHgpLHo9bmV3''@;'; put 'put ''IHMuZGVmYXVsdDt6LmFwcGVuZCgiZmlsZSIsTik7Y29uc3QgWT1gbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHt6LmdldEJvdW5kYXJ5KCl9YCx7cmVzdWx0OkZ9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9kcml2ZS9kZXBsb3kvdXBsb2FkIix6LFYs''@;'; put 'put ''WSx7fSx7bWF4Q29udGVudExlbmd0aDoxLzAsbWF4Qm9keUxlbmd0aDoxLzB9KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEYpfSl9ZXhlY3V0ZUpvYih4LFUsSCl7cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFY9SD9ILmFjY2Vzc190b2tlbjp2b2lkIDA7''@;'; put 'put ''bGV0IE47Tj14Ll9wcm9ncmFtLnN0YXJ0c1dpdGgoIi8iKT94Ll9wcm9ncmFtOmAke1V9LyR7eC5fcHJvZ3JhbX1gO2NvbnN0IHo9eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL3N0cC9leGVjdXRlIixPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe19kZWJ1Zzox''@;'; put 'put ''MzF9LHgpLHtfcHJvZ3JhbTpOfSksVik7cmV0dXJue3Jlc3VsdDp6LnJlc3VsdCxsb2c6ei5sb2d9fSl9ZXhlY3V0ZVNjcmlwdCh4LFU9InNhcyIsSCl7cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFY9eWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tlbkZvclJl''@;'; put 'put ''cXVlc3QoSCksTj17bG9nOiIifTtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL2NvZGUvZXhlY3V0ZSIse2NvZGU6eCxydW5UaW1lOlV9LFYpLnRoZW4oej0+e2NvbnN0e2xvZzpZLHByaW50T3V0cHV0OkYscmVzdWx0Old9PXo7Ti5sb2c9WSxGJiYoTi5w''@;'; put 'put ''cmludE91dHB1dD1GKSxXJiYoTi53ZWJvdXQ9Vyl9KS5jYXRjaCh6PT57dGhyb3coMCx2LnByZWZpeE1lc3NhZ2UpKHosIkVycm9yIHdoaWxlIHNlbmRpbmcgUE9TVCByZXF1ZXN0IHRvIGV4ZWN1dGUgY29kZS4gIil9KSxOfSl9Z2V0QWNjZXNzVG9rZW4oeCxVKXtyZXR1cm4geSh0aGlzLHZv''@;'; put 'put ''aWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsQy5nZXRBY2Nlc3NUb2tlbkZvclNhc2pzKSh0aGlzLnJlcXVlc3RDbGllbnQseCxVKX0pfXJlZnJlc2hUb2tlbnMoeCl7cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybigwLHcucmVmcmVzaFRva2Vu''@;'; put 'put ''c0ZvclNhc2pzKSh0aGlzLnJlcXVlc3RDbGllbnQseCl9KX19fSw0ODY5NyhmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDY1NjA2KSxjPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihMLFIseCxVKXtyZXR1cm4gbmV3KHh8fCh4PVByb21pc2UpKShmdW5jdGlvbihWLE4pe2Z1''@;'; put 'put ''bmN0aW9uIHooVyl7dHJ5e0YoVS5uZXh0KFcpKX1jYXRjaChxKXtOKHEpfX1mdW5jdGlvbiBZKFcpe3RyeXtGKFUudGhyb3coVykpfWNhdGNoKHEpe04ocSl9fWZ1bmN0aW9uIEYoVyl7Vy5kb25lP1YoVy52YWx1ZSk6ZnVuY3Rpb24gSChWKXtyZXR1cm4gViBpbnN0YW5jZW9mIHg/VjpuZXcg''@;'; put 'put ''eChmdW5jdGlvbihOKXtOKFYpfSl9KFcudmFsdWUpLnRoZW4oeixZKX1GKChVPVUuYXBwbHkoTCxSfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouU2Vzc2lvbk1hbmFnZXI9dm9pZCAwO2NvbnN0IHM9aCg1MzU3NCks''@;'; put 'put ''QT1oKDE3Mzg4KSx2PWgoMjkyNjYpLEM9aCg2MzQwKTtqLlNlc3Npb25NYW5hZ2VyPWNsYXNzIFN7Y29uc3RydWN0b3IoUix4LFUpe3RoaXMuc2VydmVyVXJsPVIsdGhpcy5jb250ZXh0TmFtZT14LHRoaXMucmVxdWVzdENsaWVudD1VLHRoaXMubG9nZ2VkRXJyb3JzPVtdLHRoaXMuc2Vzc2lv''@;'; put 'put ''blN0YXRlTGlua0Vycm9yPSJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24gc3RhdGUgbGluay4gIix0aGlzLnNlc3Npb25zPVtdLHRoaXMuY3VycmVudENvbnRleHQ9bnVsbCx0aGlzLnNldHRpbmdDb250ZXh0PSExLHRoaXMuX2RlYnVnPSExLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZT17''@;'; put 'put ''cHJpbnRlZDohMSxzdGF0ZTpzLlNlc3Npb25TdGF0ZS5Ob1N0YXRlfSxSJiYoMCx2LmlzVXJsKShSKX1nZXQgZGVidWcoKXtyZXR1cm4gdGhpcy5fZGVidWd9c2V0IGRlYnVnKFIpe3RoaXMuX2RlYnVnPVJ9aXNTZXNzaW9uVmFsaWQoUil7aWYoIVIpcmV0dXJuITE7Y29uc3QgeD0oKG5ldyBE''@;'; put 'put ''YXRlKS5nZXRUaW1lKCktbmV3IERhdGUoUi5jcmVhdGlvblRpbWVTdGFtcCkuZ2V0VGltZSgpKS8xZTM7cmV0dXJuISghUi5hdHRyaWJ1dGVzfHx4Pj1SLmF0dHJpYnV0ZXMuc2Vzc2lvbkluYWN0aXZlVGltZW91dCl9cmVtb3ZlU2Vzc2lvbkZyb21Qb29sKFIpe3RoaXMuc2Vzc2lvbnM9dGhp''@;'; put 'put ''cy5zZXNzaW9ucy5maWx0ZXIoeD0+eC5pZCE9PVIuaWQpfXJlbW92ZUV4cGlyZWRTZXNzaW9ucygpe3RoaXMuc2Vzc2lvbnM9dGhpcy5zZXNzaW9ucy5maWx0ZXIoUj0+dGhpcy5pc1Nlc3Npb25WYWxpZChSKSl9dGhyb3dFcnJvcnMoUix4KXt0aHJvdyB4PygwLEMucHJlZml4TWVzc2FnZSko''@;'; put 'put ''bmV3IEVycm9yKFIuam9pbigiLiAiKSkseCk6bmV3IEVycm9yKFIubWFwKFU9PlUubWVzc2FnZT9VLm1lc3NhZ2U6VSkuam9pbigiLiAiKSl9Z2V0U2Vzc2lvbihSKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgeD1bXTtsZXQgVT0hMTtjb25zdCBIPSgp''@;'; put 'put ''PT57eC5sZW5ndGgmJiFVJiYoVT0hMCx0aGlzLnRocm93RXJyb3JzKHgpKX07aWYodGhpcy5yZW1vdmVFeHBpcmVkU2Vzc2lvbnMoKSx0aGlzLnNlc3Npb25zLmxlbmd0aCl7Y29uc3QgVj10aGlzLnNlc3Npb25zWzBdO3JldHVybiB0aGlzLnJlbW92ZVNlc3Npb25Gcm9tUG9vbChWKSx0aGlz''@;'; put 'put ''LmNyZWF0ZVNlc3Npb25zKFIpLmNhdGNoKE49Pnt4LnB1c2goTil9KSx0aGlzLmNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKFIpLmNhdGNoKE49Pnt4LnB1c2goTil9KSxIKCksVn17dGhpcy5jcmVhdGVTZXNzaW9ucyhSKS5jYXRjaChOPT57eC5wdXNoKE4pfSkseWllbGQgdGhpcy5jcmVhdGVB''@;'; put 'put ''bmRXYWl0Rm9yU2Vzc2lvbihSKS5jYXRjaChOPT57eC5wdXNoKE4pfSksdGhpcy5yZW1vdmVFeHBpcmVkU2Vzc2lvbnMoKTtjb25zdCBWPXRoaXMuc2Vzc2lvbnMucG9wKCk7cmV0dXJuIHRoaXMucmVtb3ZlU2Vzc2lvbkZyb21Qb29sKFYpLEgoKSxWfX0pfWdldEVycm9yTWVzc2FnZShSLHgs''@;'; put 'put ''VSl7cmV0dXJuYCR7VX0gcmVxdWVzdCB0byAke3h9IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICR7Ui5yZXNwb25zZS5zdGF0dXN8fCJ1bmtub3duIn0uIGArUi5yZXNwb25zZS5kYXRhLm1lc3NhZ2V8fCIifWNsZWFyU2Vzc2lvbihSLHgpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxm''@;'; put 'put ''dW5jdGlvbiooKXtjb25zdCBVPWAvY29tcHV0ZS9zZXNzaW9ucy8ke1J9YDtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmRlbGV0ZShVLHgpLnRoZW4oKCk9Pnt0aGlzLnNlc3Npb25zPXRoaXMuc2Vzc2lvbnMuZmlsdGVyKEg9PkguaWQhPT1SKX0pLmNhdGNoKEg9Pnt0aHJvdygw''@;'; put 'put ''LEMucHJlZml4TWVzc2FnZSkodGhpcy5nZXRFcnJvck1lc3NhZ2UoSCxVLCJERUxFVEUiKSwiRXJyb3Igd2hpbGUgZGVsZXRpbmcgc2Vzc2lvbi4gIil9KX0pfWNyZWF0ZVNlc3Npb25zKFIpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCB4PVtdO3RoaXMu''@;'; put 'put ''c2Vzc2lvbnMubGVuZ3RofHwoeWllbGQoMCx2LmFzeW5jRm9yRWFjaCkobmV3IEFycmF5KDEpLCgpPT5jKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCB0aGlzLmNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKFIpLmNhdGNoKFU9Pnt4LnB1c2goVSl9KX0pKSkseC5sZW5ndGgm''@;'; put 'put ''JnRoaXMudGhyb3dFcnJvcnMoeCwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgc2Vzc2lvbi4gIil9KX13YWl0Rm9yQ3VycmVudENvbnRleHQoKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKFI9Pntjb25zdCB4PXNldEludGVydmFsKCgp''@;'; put 'put ''PT57dGhpcy5jdXJyZW50Q29udGV4dCYmKHRoaXMuc2V0dGluZ0NvbnRleHQ9ITEsY2xlYXJJbnRlcnZhbCh4KSxSKCkpfSwxMDApfSl9KX1jcmVhdGVBbmRXYWl0Rm9yU2Vzc2lvbihSKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5jdXJyZW50Q29udGV4''@;'; put 'put ''dHx8KHRoaXMuc2V0dGluZ0NvbnRleHQ/eWllbGQgdGhpcy53YWl0Rm9yQ3VycmVudENvbnRleHQoKTp5aWVsZCB0aGlzLnNldEN1cnJlbnRDb250ZXh0KFIpKTtjb25zdCB4PWAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzLyR7dGhpcy5jdXJyZW50Q29udGV4dC5pZH0vc2Vz''@;'; put 'put ''c2lvbnNgLHtyZXN1bHQ6VSxldGFnOkh9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHgse30sUikuY2F0Y2goTj0+e3Rocm93KDAsQy5wcmVmaXhNZXNzYWdlKSh0aGlzLmdldEVycm9yTWVzc2FnZShOLHgsIlBPU1QiKSwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgc2Vzc2lvbi4gIil9''@;'; put 'put ''KTtVLmV0YWc9SDtjb25zdCBWPVUubGlua3MuZmluZChOPT4ic3RhdGUiPT09Ti5yZWwpO2lmKCFWKXRocm93IHRoaXMuc2Vzc2lvblN0YXRlTGlua0Vycm9yO3JldHVybiBVLnN0YXRlVXJsPVYuaHJlZix5aWVsZCB0aGlzLndhaXRGb3JTZXNzaW9uKFUsSCxSKSx0aGlzLnNlc3Npb25zLnB1''@;'; put 'put ''c2goVSksVX0pfXNldEN1cnJlbnRDb250ZXh0KFIpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighdGhpcy5jdXJyZW50Q29udGV4dCl7Y29uc3QgeD1gJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMGA7dGhpcy5zZXR0aW5n''@;'; put 'put ''Q29udGV4dD0hMDtjb25zdHtyZXN1bHQ6VX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCh4LFIpLmNhdGNoKE49Pnt0aHJvdygwLEMucHJlZml4TWVzc2FnZSkodGhpcy5nZXRFcnJvck1lc3NhZ2UoTix4LCJHRVQiKSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBsaXN0IG9mIGNvbnRleHRz''@;'; put 'put ''LiAiKX0pLFY9KFUmJlUuaXRlbXMmJlUuaXRlbXMubGVuZ3RoP1UuaXRlbXM6W10pLmZpbmQoTj0+Ti5uYW1lPT09dGhpcy5jb250ZXh0TmFtZSk7aWYoIVYpdGhyb3cgbmV3IEVycm9yKGBUaGUgY29udGV4dCAnJHt0aGlzLmNvbnRleHROYW1lfScgd2FzIG5vdCBmb3VuZCBvbiB0aGUgc2Vy''@;'; put 'put ''dmVyICR7dGhpcy5zZXJ2ZXJVcmx9LmApO3RoaXMuY3VycmVudENvbnRleHQ9VixQcm9taXNlLnJlc29sdmUoKX19KX13YWl0Rm9yU2Vzc2lvbihSLHgsVSl7dmFyIEg7cmV0dXJuIGModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldHtzdGF0ZTpWfT1SO2NvbnN0e3N0YXRlVXJs''@;'; put 'put ''Ok59PVIsej15LmxvZ2dlcnx8Y29uc29sZTtpZihWPT09cy5TZXNzaW9uU3RhdGUuUGVuZGluZ3x8Vj09PXMuU2Vzc2lvblN0YXRlLlJ1bm5pbmd8fFY9PT1zLlNlc3Npb25TdGF0ZS5Ob1N0YXRlKXtpZihOKXt0aGlzLmRlYnVnJiYhdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnByaW50ZWQm''@;'; put 'put ''Jih6LmluZm8oYFBvbGxpbmc6ICR7dGhpcy5zZXJ2ZXJVcmwrTn1gKSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUucHJpbnRlZD0hMCk7Y29uc3QgWT1gJHt0aGlzLnNlcnZlclVybH0ke059P3dhaXQ9MzBgLHtyZXN1bHQ6RixyZXNwb25zZVN0YXR1czpXfT15aWVsZCB0aGlzLmdldFNlc3Np''@;'; put 'put ''b25TdGF0ZShZLHgsVSkuY2F0Y2gocT0+e3Rocm93KDAsQy5wcmVmaXhNZXNzYWdlKShxLCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciBzZXNzaW9uLiAiKX0pO2lmKFY9Ri50cmltKCksdGhpcy5kZWJ1ZyYmdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnN0YXRlIT09ViYmKHouaW5mbyhgQ3Vy''@;'; put 'put ''cmVudCBzZXNzaW9uIHN0YXRlIGlzICcke1Z9J2ApLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5zdGF0ZT1WLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5wcmludGVkPSExKSwhVil7Y29uc3QgcT1uZXcgQS5Ob1Nlc3Npb25TdGF0ZUVycm9yKFcsdGhpcy5zZXJ2ZXJVcmwrTixudWxsPT09''@;'; put 'put ''KEg9Ui5saW5rcy5maW5kKHJlPT4ibG9nIj09PXJlLnJlbCkpfHx2b2lkIDA9PT1IP3ZvaWQgMDpILmhyZWYpO3JldHVybiB0aGlzLmxvZ2dlZEVycm9ycy5maW5kKHJlPT5yZS5zZXJ2ZXJSZXNwb25zZVN0YXR1cz09PXEuc2VydmVyUmVzcG9uc2VTdGF0dXMpfHwodGhpcy5sb2dnZWRFcnJv''@;'; put 'put ''cnMucHVzaChxKSx6LmluZm8ocS5tZXNzYWdlKSkseWllbGQgdGhpcy53YWl0Rm9yU2Vzc2lvbihSLHgsVSl9cmV0dXJuIHRoaXMubG9nZ2VkRXJyb3JzPVtdLFZ9dGhyb3cgdGhpcy5zZXNzaW9uU3RhdGVMaW5rRXJyb3J9cmV0dXJuIHRoaXMubG9nZ2VkRXJyb3JzPVtdLFZ9KX1nZXRTZXNz''@;'; put 'put ''aW9uU3RhdGUoUix4LFUpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChSLFUsInRleHQvcGxhaW4iLHsiSWYtTm9uZS1NYXRjaCI6eH0pLnRoZW4oSD0+KHtyZXN1bHQ6SC5yZXN1bHQscmVzcG9uc2VT''@;'; put 'put ''dGF0dXM6SC5zdGF0dXN9KSkuY2F0Y2goSD0+e3Rocm93KDAsQy5wcmVmaXhNZXNzYWdlKSh0aGlzLmdldEVycm9yTWVzc2FnZShILFIsIkdFVCIpLCJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24gc3RhdGUuICIpfSl9KX1nZXRWYXJpYWJsZShSLHgsVSl7cmV0dXJuIGModGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEg9YCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvc2Vzc2lvbnMvJHtSfS92YXJpYWJsZXMvJHt4fWA7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoSCxVKS5jYXRjaChWPT57dGhyb3coMCxDLnByZWZpeE1lc3NhZ2UpKHRo''@;'; put 'put ''aXMuZ2V0RXJyb3JNZXNzYWdlKFYsSCwiR0VUIiksYEVycm9yIHdoaWxlIGZldGNoaW5nIHNlc3Npb24gdmFyaWFibGUgJyR7eH0nLiBgKX0pfSl9fX0sODM3MjIoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg2NTYwNiksYz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oSCxW''@;'; put 'put ''LE4seil7cmV0dXJuIG5ldyhOfHwoTj1Qcm9taXNlKSkoZnVuY3Rpb24oRixXKXtmdW5jdGlvbiBxKENlKXt0cnl7bWUoei5uZXh0KENlKSl9Y2F0Y2goSWUpe1coSWUpfX1mdW5jdGlvbiByZShDZSl7dHJ5e21lKHoudGhyb3coQ2UpKX1jYXRjaChJZSl7VyhJZSl9fWZ1bmN0aW9uIG1lKENl''@;'; put 'put ''KXtDZS5kb25lP0YoQ2UudmFsdWUpOmZ1bmN0aW9uIFkoRil7cmV0dXJuIEYgaW5zdGFuY2VvZiBOP0Y6bmV3IE4oZnVuY3Rpb24oVyl7VyhGKX0pfShDZS52YWx1ZSkudGhlbihxLHJlKX1tZSgoej16LmFwcGx5KEgsVnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShq''@;'; put 'put ''LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmV4ZWN1dGVPbkNvbXB1dGVBcGk9dm9pZCAwO2NvbnN0IHM9aCg4NzI0NyksQT1oKDM2MzEpLHY9aCg2MzQwKSxDPWgoMjgxNTYpLHc9aCgyOTYwOSksUz1oKDI5MjY2KSxMPWgoODM0MDcpLFI9aCg5MTUxNCkseD1oKDU4NTYzKTtqLmV4ZWN1''@;'; put 'put ''dGVPbkNvbXB1dGVBcGk9ZnVuY3Rpb24gVShILFYsTix6LFksRixXLHE9bnVsbCxyZT0hMSxtZT0hMSxDZT0hMCxJZSxrZT0hMSxxZSxYKXt2YXIgZixiO3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgaz0oV3x8e30pLmFjY2Vzc190b2tlbjtXJiYoe2FjY2Vz''@;'; put 'put ''c190b2tlbjprfT15aWVsZCgwLHcuZ2V0VG9rZW5zKShILFcsQS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsWCkpO2NvbnN0IE09eS5sb2dnZXJ8fGNvbnNvbGU7dHJ5e2xldCBCO2NvbnN0IEs9eWllbGQgVi5nZXRTZXNzaW9uKGspLmNhdGNoKGFlPT57dGhyb3coMCx2LnByZWZpeE1lc3NhZ2UpKGFl''@;'; put 'put ''LCJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24uICIpfSk7aWYoQj1LLmlkLGtlKXtjb25zdHtyZXN1bHQ6YWV9PXlpZWxkIFYuZ2V0VmFyaWFibGUoQiwiU1lTSk9CSUQiLGspLmNhdGNoKHhlPT57dGhyb3coMCx2LnByZWZpeE1lc3NhZ2UpKHhlLCJFcnJvciB3aGlsZSBnZXR0aW5nIHNl''@;'; put 'put ''c3Npb24gdmFyaWFibGUuICIpfSk7aWYoYWUmJmFlLnZhbHVlKXtjb25zdCB4ZT1OP3ouc3BsaXQoTikuam9pbigiIikucmVwbGFjZSgvXlwvLywiIik6ejsoeS5sb2dnZXJ8fGNvbnNvbGUpLmluZm8oYFRyaWdnZXJpbmcgJyR7eGV9JyB3aXRoIFBJRCAke2FlLnZhbHVlfSBhdCAkeygwLHMu''@;'; put 'put ''dGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUykoKX1gKX19bGV0IEc7Rz0oMCxTLmlzUmVsYXRpdmVQYXRoKSh6KT9gZXhlYy0ke3ouaW5jbHVkZXMoIi8iKT96LnNwbGl0KCIvIilbMV06en1gOnouc3BsaXQoIi8iKS5wb3AoKTtsZXQgRD17U1lTX0pFU19KT0JfVVJJOiIiLF9wcm9ncmFtOigw''@;'; put 'put ''LFMuaXNSZWxhdGl2ZVBhdGgpKHopP04rIi8iK3o6en07cWUmJihEPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxEKSxxZSkpLHJlJiYoRD1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sRCkse19ERUJVRzoxMzF9KSk7bGV0IHA9W107cSYmKEpTT04uc3RyaW5naWZ5KHEp''@;'; put 'put ''LmluY2x1ZGVzKCI7Iik/KHA9eWllbGQoMCx4LnVwbG9hZFRhYmxlcykoSCxxLGspLmNhdGNoKGFlPT57dGhyb3coMCx2LnByZWZpeE1lc3NhZ2UpKGFlLCJFcnJvciB3aGlsZSB1cGxvYWRpbmcgdGFibGVzLiAiKX0pLEQuX3dlYmluX2ZpbGVfY291bnQ9cC5sZW5ndGgscC5mb3JFYWNoKChh''@;'; put 'put ''ZSx4ZSk9PntEW2Bfd2ViaW5fZmlsZXVyaSR7eGUrMX1gXT1gL2ZpbGVzL2ZpbGVzLyR7YWUuZmlsZS5pZH1gLERbYF93ZWJpbl9uYW1lJHt4ZSsxfWBdPWFlLnRhYmxlTmFtZX0pKTpEPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxEKSwoMCxMLmZvcm1hdERhdGFGb3JSZXF1ZXN0''@;'; put 'put ''KShxKSkpO2NvbnN0IEk9e25hbWU6R3x8IkRlZmF1bHQgSm9iIE5hbWUiLGRlc2NyaXB0aW9uOiJQb3dlcmVkIGJ5IFNBU2pzIixjb2RlOlksdmFyaWFibGVzOkQsdmVyc2lvbjoyfSx7cmVzdWx0OnVlfT15aWVsZCBILnBvc3QoYC9jb21wdXRlL3Nlc3Npb25zLyR7Qn0vam9ic2AsSSxrKS5j''@;'; put 'put ''YXRjaChhZT0+e3Rocm93KDAsdi5wcmVmaXhNZXNzYWdlKShhZSwiRXJyb3Igd2hpbGUgcG9zdGluZyBqb2IuICIpfSk7aWYoIUNlKXJldHVybiBLO3JlJiYoTS5pbmZvKGBKb2IgaGFzIGJlZW4gc3VibWl0dGVkIGZvciAnJHtHfScuYCksTS5pbmZvKGBZb3UgY2FuIG1vbml0b3IgdGhlIGpv''@;'; put 'put ''YiBwcm9ncmVzcyBhdCAnJHtILmdldEJhc2VVcmwoKX0ke3VlLmxpbmtzLmZpbmQoYWU9PiJzdGF0ZSI9PT1hZS5yZWwpLmhyZWZ9Jy5gKSk7Y29uc3QgX2U9eWllbGQoMCxSLnBvbGxKb2JTdGF0ZSkoSCx1ZSxyZSxXLEllLHtzZXNzaW9uOkssc2Vzc2lvbk1hbmFnZXI6Vn0sWCkuY2F0Y2go''@;'; put 'put ''YWU9PmModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3ZhciB4ZSxqZTtjb25zdCBBZT1udWxsPT09KHhlPWFlPy5yZXNwb25zZSl8fHZvaWQgMD09PXhlP3ZvaWQgMDp4ZS5kYXRhLERlPS9lcnI9WzAtOV0qLC8uZXhlYyhBZSk7aWYoIjUxMTMiPT09KG51bGw9PT0oamU9RGU/Llsw''@;'; put 'put ''XSl8fHZvaWQgMD09PWplP3ZvaWQgMDpqZS5zbGljZSg0LC0xKSkpe2NvbnN0IGNlPXVlLmxpbmtzLmZpbmQoaGU9PiJ1cCI9PT1oZS5yZWwpLmhyZWYrIi9sb2ciO2FlLmxvZz15aWVsZCgwLFMuZmV0Y2hMb2dCeUNodW5rcykoSCxrLGNlLDFlNil9dGhyb3coMCx2LnByZWZpeE1lc3NhZ2Up''@;'; put 'put ''KGFlLCJFcnJvciB3aGlsZSBwb2xsaW5nIGpvYiBzdGF0dXMuICIpfSkpO1cmJih7YWNjZXNzX3Rva2VuOmt9PXlpZWxkKDAsdy5nZXRUb2tlbnMpKEgsVyxBLlNlcnZlclR5cGUuU2FzVml5YSxYKSk7Y29uc3R7cmVzdWx0OlBlfT15aWVsZCBILmdldChgL2NvbXB1dGUvc2Vzc2lvbnMvJHtC''@;'; put 'put ''fS9qb2JzLyR7dWUuaWR9YCxrKS5jYXRjaChhZT0+e3Rocm93KDAsdi5wcmVmaXhNZXNzYWdlKShhZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBqb2IuICIpfSk7bGV0IG90LGx0PSIiO2NvbnN0IGR0PVBlLmxpbmtzLmZpbmQoYWU9PiJsb2ciPT09YWUucmVsKTtpZihyZSYmZHQpe2NvbnN0IGFl''@;'; put 'put ''PWAke2R0LmhyZWZ9L2NvbnRlbnRgLHhlPW51bGwhPT0oYj1udWxsPT09KGY9UGUubG9nU3RhdGlzdGljcyl8fHZvaWQgMD09PWY/dm9pZCAwOmYubGluZUNvdW50KSYmdm9pZCAwIT09Yj9iOjFlNjtsdD15aWVsZCgwLFMuZmV0Y2hMb2dCeUNodW5rcykoSCxrLGFlLHhlKX1pZihfZT09PVIu''@;'; put 'put ''Sm9iU3RhdGUuRmFpbGVkfHxfZT09PVIuSm9iU3RhdGUuRXJyb3IpdGhyb3cgbmV3IEMuQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yKFBlLGx0KTtpZighbWUpcmV0dXJue2pvYjpQZSxsb2c6bHR9O2NvbnN0IFJlPWAvY29tcHV0ZS9zZXNzaW9ucy8ke0J9L2ZpbGVyZWZzL193ZWJvdXQvY29u''@;'; put 'put ''dGVudGA7cmV0dXJuIG90PXlpZWxkIEguZ2V0KFJlLGssInRleHQvcGxhaW4iKS5jYXRjaChhZT0+Yyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIHhlLGplO2lmKGFlIGluc3RhbmNlb2YgQy5Ob3RGb3VuZEVycm9yJiZkdCl7Y29uc3QgQWU9YCR7ZHQuaHJlZn0vY29udGVu''@;'; put 'put ''dGAsRGU9bnVsbCE9PShqZT1udWxsPT09KHhlPVBlLmxvZ1N0YXRpc3RpY3MpfHx2b2lkIDA9PT14ZT92b2lkIDA6eGUubGluZUNvdW50KSYmdm9pZCAwIT09amU/amU6MWU2O3JldHVybiBsdD15aWVsZCgwLFMuZmV0Y2hMb2dCeUNodW5rcykoSCxrLEFlLERlKSxQcm9taXNlLnJlamVjdCh7''@;'; put 'put ''c3RhdHVzOjUwMCxsb2c6bHR9KX1yZXR1cm57cmVzdWx0OkpTT04uc3RyaW5naWZ5KGFlKX19KSkseWllbGQgVi5jbGVhclNlc3Npb24oQixrKS5jYXRjaChhZT0+e3Rocm93KDAsdi5wcmVmaXhNZXNzYWdlKShhZSwiRXJyb3Igd2hpbGUgY2xlYXJpbmcgc2Vzc2lvbi4gIil9KSx7cmVzdWx0''@;'; put 'put ''Om90Py5yZXN1bHQsbG9nOmx0fX1jYXRjaChCKXtpZig0MDQ9PT1CLnN0YXR1cylyZXR1cm4gVShILFYsTix6LFksRixXLHEscmUsITEsITApO3Rocm93KDAsdi5wcmVmaXhNZXNzYWdlKShCLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgc2NyaXB0LiAiKX19KX19LDQyNTczKGZlLGosaCl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciB5PWgoNjU2MDYpLGM9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEMsdyxTLEwpe3JldHVybiBuZXcoU3x8KFM9UHJvbWlzZSkpKGZ1bmN0aW9uKHgsVSl7ZnVuY3Rpb24gSCh6KXt0cnl7TihMLm5leHQoeikpfWNhdGNoKFkpe1UoWSl9fWZ1bmN0aW9uIFYo''@;'; put 'put ''eil7dHJ5e04oTC50aHJvdyh6KSl9Y2F0Y2goWSl7VShZKX19ZnVuY3Rpb24gTih6KXt6LmRvbmU/eCh6LnZhbHVlKTpmdW5jdGlvbiBSKHgpe3JldHVybiB4IGluc3RhbmNlb2YgUz94Om5ldyBTKGZ1bmN0aW9uKFUpe1UoeCl9KX0oei52YWx1ZSkudGhlbihILFYpfU4oKEw9TC5hcHBseShD''@;'; put 'put ''LHd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5nZXRGaWxlU3RyZWFtPXZvaWQgMDtjb25zdCBzPWgoMjU5MDgpLEE9aCg4NzI0Nyk7ai5nZXRGaWxlU3RyZWFtPShDLHcpPT5jKHZvaWQgMCx2b2lkIDAsdm9pZCAw''@;'; put 'put ''LGZ1bmN0aW9uKigpe2NvbnN0e2NyZWF0ZVdyaXRlU3RyZWFtOlN9PWgoMjU5MDgpLEw9d3x8eS5jd2QoKTtpZih5aWVsZCgwLHMuaXNGb2xkZXIpKEwpKXtjb25zdCB4PWAke0MubmFtZXx8ImpvYiJ9LSR7KDAsQS5nZW5lcmF0ZVRpbWVzdGFtcCkoKX0ubG9nYCxIPWgoNDM2MjcpLmpvaW4o''@;'; put 'put ''d3x8eS5jd2QoKSx4KTtyZXR1cm4geWllbGQgUyhIKX1yZXR1cm4geWllbGQgUyhMKX0pfSw5MTUxNChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDY1NjA2KSxjPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihWLE4seixZKXtyZXR1cm4gbmV3KHp8fCh6PVByb21pc2UpKShm''@;'; put 'put ''dW5jdGlvbihXLHEpe2Z1bmN0aW9uIHJlKEllKXt0cnl7Q2UoWS5uZXh0KEllKSl9Y2F0Y2goa2Upe3Eoa2UpfX1mdW5jdGlvbiBtZShJZSl7dHJ5e0NlKFkudGhyb3coSWUpKX1jYXRjaChrZSl7cShrZSl9fWZ1bmN0aW9uIENlKEllKXtJZS5kb25lP1coSWUudmFsdWUpOmZ1bmN0aW9uIEYo''@;'; put 'put ''Vyl7cmV0dXJuIFcgaW5zdGFuY2VvZiB6P1c6bmV3IHooZnVuY3Rpb24ocSl7cShXKX0pfShJZS52YWx1ZSkudGhlbihyZSxtZSl9Q2UoKFk9WS5hcHBseShWLE58fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5kb1Bv''@;'; put 'put ''bGw9ai5wb2xsSm9iU3RhdGU9ai5Kb2JTdGF0ZT12b2lkIDA7Y29uc3Qgcz1oKDM2MzEpLEE9aCgyOTYwOSksdj1oKDE3Mzg4KSxDPWgoNTM1NzQpLHc9aCgyOTI2Nik7dmFyIFMsVjsoVj1TPWouSm9iU3RhdGV8fChqLkpvYlN0YXRlPXt9KSkuQ29tcGxldGVkPSJjb21wbGV0ZWQiLFYuUnVu''@;'; put 'put ''bmluZz0icnVubmluZyIsVi5QZW5kaW5nPSJwZW5kaW5nIixWLlVuYXZhaWxhYmxlPSJ1bmF2YWlsYWJsZSIsVi5Ob1N0YXRlPSIiLFYuRmFpbGVkPSJmYWlsZWQiLFYuRXJyb3I9ImVycm9yIixqLnBvbGxKb2JTdGF0ZT1mdW5jdGlvbiBMKFYsTix6LFksRixXLHEpe3JldHVybiBjKHRoaXMs''@;'; put 'put ''dm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCByZT15LmxvZ2dlcnx8Y29uc29sZSxtZT1GPy5zdHJlYW1Mb2d8fCExLENlPVt7bWF4UG9sbENvdW50OjIwMCxwb2xsSW50ZXJ2YWw6MzAwfSx7bWF4UG9sbENvdW50OjMwMCxwb2xsSW50ZXJ2YWw6M2UzfSx7bWF4UG9sbENvdW50OjUw''@;'; put 'put ''MCxwb2xsSW50ZXJ2YWw6M2U0fSx7bWF4UG9sbENvdW50OjM0MDAscG9sbEludGVydmFsOjZlNH1dO2xldCBJZTtpZih2b2lkIDAhPT1GKXtJZT1bRl07bGV0e3BvbGxTdHJhdGVneTpNfT1GO3ZvaWQgMCE9PU0/KEgoTSksTT1NLnNvcnQoKEIsSyk9PkIubWF4UG9sbENvdW50LUsubWF4UG9s''@;'; put 'put ''bENvdW50KSxJZT1bLi4uSWUsLi4uTV0pOkllPVsuLi5JZSwuLi5DZV19ZWxzZSBJZT1DZTtsZXQga2U9SWUuc3BsaWNlKDAsMSlbMF07Rj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sa2UpLEZ8fHt9KTtjb25zdCBxZT1OLmxpbmtzLmZpbmQoTT0+InN0YXRlIj09PU0ucmVsKTtp''@;'; put 'put ''ZighcWUpdGhyb3cgbmV3IEVycm9yKCJKb2Igc3RhdGUgbGluayB3YXMgbm90IGZvdW5kLiIpO2xldCBiLFg9eWllbGQgUihWLE4sUy5Ob1N0YXRlLHosWSkuY2F0Y2goTT0+KHJlLmVycm9yKGBFcnJvciBmZXRjaGluZyBqb2Igc3RhdGUgZnJvbSAke3FlLmhyZWZ9LiBTdGFydGluZyBwb2xs''@;'; put 'put ''LCBhc3N1bWluZyBqb2IgdG8gYmUgcnVubmluZy5gLE0pLFMuVW5hdmFpbGFibGUpKSxmPTA7aWYoWD09PVMuQ29tcGxldGVkKXJldHVybiBQcm9taXNlLnJlc29sdmUoWCk7aWYobWUmJigwLHcuaXNOb2RlKSgpKXtjb25zdHtnZXRGaWxlU3RyZWFtOk19PWgoNDI1NzMpO2I9eWllbGQgTShO''@;'; put 'put ''LEYubG9nRm9sZGVyUGF0aCl9bGV0IGs9eWllbGQoMCxqLmRvUG9sbCkoVixOLFgseixmLEYsWSxtZSxiLFcscSk7aWYoWD1rLnN0YXRlLGY9ay5wb2xsQ291bnQsIXgoWCl8fGY+PUYubWF4UG9sbENvdW50JiYhSWUubGVuZ3RoKXJldHVybiBYO2Zvcig7SWUubGVuZ3RoJiZ4KFgpOylrZT1J''@;'; put 'put ''ZS5zcGxpY2UoMCwxKVswXSxGJiYoa2UubG9nRm9sZGVyUGF0aD1GLmxvZ0ZvbGRlclBhdGgpLGs9eWllbGQoMCxqLmRvUG9sbCkoVixOLFgseixmLGtlLFksbWUsYixXLHEpLFg9ay5zdGF0ZSxmPWsucG9sbENvdW50O3JldHVybiBiJiZiLmVuZCgpLFh9KX07Y29uc3QgUj0oVixOLHosWSxG''@;'; put 'put ''LFcpPT5jKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IHE9Ti5saW5rcy5maW5kKHJlPT4ic3RhdGUiPT09cmUucmVsKTtpZih4KHopKXtsZXQgcmU7RiYmKHJlPXlpZWxkKDAsQS5nZXRUb2tlbnMpKFYsRixzLlNlcnZlclR5cGUuU2FzVml5YSxXKSk7Y29uc3R7cmVz''@;'; put 'put ''dWx0Om1lfT15aWVsZCBWLmdldChgJHtxLmhyZWZ9P19hY3Rpb249d2FpdCZ3YWl0PTMwMGAscmU/LmFjY2Vzc190b2tlbiwidGV4dC9wbGFpbiIse30sWSkuY2F0Y2goQ2U9Pnt0aHJvdyBuZXcgdi5Kb2JTdGF0ZVBvbGxFcnJvcihOLmlkLENlKX0pO3JldHVybiBtZS50cmltKCl9cmV0dXJu''@;'; put 'put ''IHp9KSx4PVY9PlY9PT1TLlJ1bm5pbmd8fFY9PT1TLk5vU3RhdGV8fFY9PT1TLlBlbmRpbmd8fFY9PT1TLlVuYXZhaWxhYmxlO2ouZG9Qb2xsPShWLE4seixZLEYsVyxxLHJlLG1lLENlLEllKT0+Yyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIga2UscWU7Y29uc3R7bWF4''@;'; put 'put ''UG9sbENvdW50OlgscG9sbEludGVydmFsOmZ9PVcsYj15LmxvZ2dlcnx8Y29uc29sZSxrPU4ubGlua3MuZmluZChwPT4ic3RhdGUiPT09cC5yZWwpO2xldCBCPTAsSz16LEc9Uy5Ob1N0YXRlLEQ9MDtmb3IoO3goSykmJkY8PVg7KXtpZihDZSYmRiYmRiUxMD09MCYmcSl7Y29uc3R7c2Vzc2lv''@;'; put 'put ''bjpJLHNlc3Npb25NYW5hZ2VyOnVlfT1DZSx7c3RhdGVVcmw6bmUsZXRhZzpfZSxpZDpQZX09SSx7YWNjZXNzX3Rva2VuOm90fT1xLHtpZDpsdH09Tix7cmVzdWx0OmR0LHJlc3BvbnNlU3RhdHVzOlJlfT15aWVsZCB1ZS5nZXRTZXNzaW9uU3RhdGUobmUsX2Usb3QpLmNhdGNoKHhlPT57dGhy''@;'; put 'put ''b3cgbmV3IHYuSm9iU3RhdGVQb2xsRXJyb3IobHQseGUpfSksYWU9eGU9PltDLlNlc3Npb25TdGF0ZS5SdW5uaW5nLEMuU2Vzc2lvblN0YXRlLklkbGVdLmluY2x1ZGVzKHhlKTtpZighYWUoZHQpfHwyMDAhPT1SZSl7dWUuY2xlYXJTZXNzaW9uKFBlLG90KTtjb25zdCB4ZT1hZShkdCk/YFNl''@;'; put 'put ''c3Npb24gcmVzcG9uc2Ugc3RhdHVzIGlzIG5vdCAyMDAuIFNlc3Npb24gcmVzcG9uc2Ugc3RhdHVzIGlzICR7UmV9LmA6YFNlc3Npb24gc3RhdGUgb2YgdGhlIGpvYiBpcyBub3QgJ3J1bm5pbmcnIG9yICdpZGxlJy4gU2Vzc2lvbiBzdGF0ZSBpcyAnJHtkdH0nYDt0aHJvdyBuZXcgdi5Kb2JT''@;'; put 'put ''dGF0ZVBvbGxFcnJvcihsdCxuZXcgRXJyb3IoeGUpKX19Sz15aWVsZCBSKFYsTixLLFkscSxJZSkuY2F0Y2goST0+e2lmKEIrKyxGPj1YfHxCPj01KXRocm93IEk7cmV0dXJuIGIuZXJyb3IoYEVycm9yIGZldGNoaW5nIGpvYiBzdGF0ZSBmcm9tICR7ay5ocmVmfS4gUmVzdW1pbmcgcG9sbCwg''@;'; put 'put ''YXNzdW1pbmcgam9iIHRvIGJlIHJ1bm5pbmcuYCxJKSxTLlVuYXZhaWxhYmxlfSksRisrO2NvbnN0IHA9Ti5saW5rcy5maW5kKEk9PiJzZWxmIj09PUkucmVsKS5ocmVmO2lmKHJlKXtjb25zdHtyZXN1bHQ6SX09eWllbGQgVi5nZXQocCxxPy5hY2Nlc3NfdG9rZW4pLHVlPW51bGwhPT0ocWU9''@;'; put 'put ''bnVsbD09PShrZT1JLmxvZ1N0YXRpc3RpY3MpfHx2b2lkIDA9PT1rZT92b2lkIDA6a2UubGluZUNvdW50KSYmdm9pZCAwIT09cWU/cWU6MWU2LHtzYXZlTG9nOm5lfT0oMCx3LmlzTm9kZSkoKT9oKDUwOTgpOntzYXZlTG9nOm51bGx9O25lJiYoeWllbGQgbmUoTixWLEQsdWUsbWUscT8uYWNj''@;'; put 'put ''ZXNzX3Rva2VuKSksRCs9dWV9WSYmRyE9PUsmJihiLmluZm8oYFBvbGxpbmc6ICR7Vi5nZXRCYXNlVXJsKCkrcH0vc3RhdGVgKSxiLmluZm8oYEN1cnJlbnQgam9iIHN0YXRlOiAke0t9YCksRz1LKSxLIT09Uy5VbmF2YWlsYWJsZSYmQj4wJiYoQj0wKSxLIT09Uy5Db21wbGV0ZWQmJih5aWVs''@;'; put 'put ''ZCgwLHcuZGVsYXkpKGYpKX1yZXR1cm57c3RhdGU6Syxwb2xsQ291bnQ6Rn19KTtjb25zdCBIPVY9Pntjb25zdCBOPSh6LFkpPT57dGhyb3cgbmV3IEVycm9yKGBQb2xsIHN0cmF0ZWdpZXMgYXJlIG5vdCB2YWxpZC4ke3o/YCAke3p9YDoiIn0ke1k/YCBJbnZhbGlkIHBvbGwgc3RyYXRlZ3k6''@;'; put 'put ''IFxuJHtKU09OLnN0cmluZ2lmeShZLG51bGwsMil9YDoiIn1gKX07Vi5mb3JFYWNoKCh6LFkpPT57Y29uc3R7bWF4UG9sbENvdW50OkYscG9sbEludGVydmFsOld9PXo7RjwxP04oIidtYXhQb2xsQ291bnQnIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gMC4iLHopOjAhPT1ZP0Y8PVZbWS0xXS5t''@;'; put 'put ''YXhQb2xsQ291bnQmJk4oIidtYXhQb2xsQ291bnQnIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gJ21heFBvbGxDb3VudCcgaW4gcHJldmlvdXMgcG9sbCBzdHJhdGVneS4iLHopOlc8MSYmTigiJ3BvbGxJbnRlcnZhbCcgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLiIseil9KX19LDUwOTgoZmUs''@;'; put 'put ''aixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg2NTYwNiksYz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oQyx3LFMsTCl7cmV0dXJuIG5ldyhTfHwoUz1Qcm9taXNlKSkoZnVuY3Rpb24oeCxVKXtmdW5jdGlvbiBIKHope3RyeXtOKEwubmV4dCh6KSl9Y2F0Y2goWSl7VShZKX19ZnVu''@;'; put 'put ''Y3Rpb24gVih6KXt0cnl7TihMLnRocm93KHopKX1jYXRjaChZKXtVKFkpfX1mdW5jdGlvbiBOKHope3ouZG9uZT94KHoudmFsdWUpOmZ1bmN0aW9uIFIoeCl7cmV0dXJuIHggaW5zdGFuY2VvZiBTP3g6bmV3IFMoZnVuY3Rpb24oVSl7VSh4KX0pfSh6LnZhbHVlKS50aGVuKEgsVil9TigoTD1M''@;'; put 'put ''LmFwcGx5KEMsd3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLnNhdmVMb2c9dm9pZCAwO2NvbnN0IHM9aCgyOTI2NiksQT1oKDMxMjQ4KTtqLnNhdmVMb2c9ZnVuY3Rpb24gdihDLHcsUyxMLFIseCl7cmV0dXJuIGMo''@;'; put 'put ''dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCF4KXRocm93IG5ldyBFcnJvcihgTG9ncyBmb3Igam9iICR7Qy5pZH0gY2Fubm90IGJlIGZldGNoZWQgd2l0aG91dCBhIHZhbGlkIGFjY2VzcyB0b2tlbi5gKTtpZighUil0aHJvdyBuZXcgRXJyb3IoYExvZ3MgZm9yIGpvYiAke0Mu''@;'; put 'put ''aWR9IGNhbm5vdCBiZSB3cml0dGVuIHdpdGhvdXQgYSB2YWxpZCB3cml0ZSBzdHJlYW0uYCk7Y29uc3QgVT15LmxvZ2dlcnx8Y29uc29sZSxIPUMubGlua3MuZmluZChOPT4ibG9nIj09PU4ucmVsKTtpZighSCl0aHJvdyBuZXcgRXJyb3IoYExvZyBVUkwgZm9yIGpvYiAke0MuaWR9IHdhcyBu''@;'; put 'put ''b3QgZm91bmQuYCk7Y29uc3QgVj15aWVsZCgwLHMuZmV0Y2hMb2cpKHcseCxgJHtILmhyZWZ9L2NvbnRlbnRgLFMsTCk7VS5pbmZvKGBXcml0aW5nIGxvZ3MgdG8gJHtSLnBhdGh9YCkseWllbGQoMCxBLndyaXRlU3RyZWFtKShSLFZ8fCIiKX0pfX0sNTg1NjMoZmUsaixoKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIHk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHYsQyx3LFMpe3JldHVybiBuZXcod3x8KHc9UHJvbWlzZSkpKGZ1bmN0aW9uKFIseCl7ZnVuY3Rpb24gVShOKXt0cnl7VihTLm5leHQoTikpfWNhdGNoKHope3goeil9fWZ1bmN0aW9uIEgoTil7dHJ5e1YoUy50aHJvdyhO''@;'; put 'put ''KSl9Y2F0Y2goeil7eCh6KX19ZnVuY3Rpb24gVihOKXtOLmRvbmU/UihOLnZhbHVlKTpmdW5jdGlvbiBMKFIpe3JldHVybiBSIGluc3RhbmNlb2Ygdz9SOm5ldyB3KGZ1bmN0aW9uKHgpe3goUil9KX0oTi52YWx1ZSkudGhlbihVLEgpfVYoKFM9Uy5hcHBseSh2LEN8fFtdKSkubmV4dCgpKX0p''@;'; put 'put ''fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai51cGxvYWRUYWJsZXM9dm9pZCAwO2NvbnN0IGM9aCg2MzQwKSxzPWgoNDc4Nik7ai51cGxvYWRUYWJsZXM9ZnVuY3Rpb24gQSh2LEMsdyl7cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0''@;'; put 'put ''aW9uKigpe2NvbnN0IFM9W107Zm9yKGNvbnN0IEwgaW4gQyl7aWYoKDAscy5pc0Zvcm1hdHNUYWJsZSkoTCkpY29udGludWU7Y29uc3QgUj0oMCxzLmNvbnZlcnRUb0NTVikoQyxMKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09Uil0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXgg''@;'; put 'put ''bGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7Y29uc3QgeD15aWVsZCB2LnVwbG9hZEZpbGUoIi9maWxlcy9maWxlcyNyYXdVcGxvYWQiLFIsdykuY2F0Y2goVT0+e3Rocm93KDAsYy5wcmVmaXhNZXNzYWdlKShVLCJFcnJvciB3aGlsZSB1''@;'; put 'put ''cGxvYWRpbmcgZmlsZS4gIil9KTtTLnB1c2goe3RhYmxlTmFtZTpMLGZpbGU6eC5yZXN1bHR9KX1yZXR1cm4gU30pfX0sMzEyNDgoZmUsail7InVzZSBzdHJpY3QiO3ZhciBoPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihjLHMsQSx2KXtyZXR1cm4gbmV3KEF8fChBPVByb21pc2Up''@;'; put 'put ''KShmdW5jdGlvbih3LFMpe2Z1bmN0aW9uIEwoVSl7dHJ5e3godi5uZXh0KFUpKX1jYXRjaChIKXtTKEgpfX1mdW5jdGlvbiBSKFUpe3RyeXt4KHYudGhyb3coVSkpfWNhdGNoKEgpe1MoSCl9fWZ1bmN0aW9uIHgoVSl7VS5kb25lP3coVS52YWx1ZSk6ZnVuY3Rpb24gQyh3KXtyZXR1cm4gdyBp''@;'; put 'put ''bnN0YW5jZW9mIEE/dzpuZXcgQShmdW5jdGlvbihTKXtTKHcpfSl9KFUudmFsdWUpLnRoZW4oTCxSKX14KCh2PXYuYXBwbHkoYyxzfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGoud3JpdGVTdHJlYW09dm9pZCAwLGou''@;'; put 'put ''d3JpdGVTdHJlYW09KGMscyk9Pmgodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChBLHYpPT57Yy53cml0ZShzKyJcbiIsQz0+e0M/dihDKTpBKCEwKX0pfSl9KX0sMTc3MTAoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg2NTYwNiksYz10''@;'; put 'put ''aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oSCxWLE4seil7cmV0dXJuIG5ldyhOfHwoTj1Qcm9taXNlKSkoZnVuY3Rpb24oRixXKXtmdW5jdGlvbiBxKENlKXt0cnl7bWUoei5uZXh0KENlKSl9Y2F0Y2goSWUpe1coSWUpfX1mdW5jdGlvbiByZShDZSl7dHJ5e21lKHoudGhyb3coQ2Up''@;'; put 'put ''KX1jYXRjaChJZSl7VyhJZSl9fWZ1bmN0aW9uIG1lKENlKXtDZS5kb25lP0YoQ2UudmFsdWUpOmZ1bmN0aW9uIFkoRil7cmV0dXJuIEYgaW5zdGFuY2VvZiBOP0Y6bmV3IE4oZnVuY3Rpb24oVyl7VyhGKX0pfShDZS52YWx1ZSkudGhlbihxLHJlKX1tZSgoej16LmFwcGx5KEgsVnx8W10pKS5u''@;'; put 'put ''ZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLkF1dGhNYW5hZ2VyPXZvaWQgMDtjb25zdCBzPWgoMzYzMSksQT1oKDE3Mzg4KSx2PWgoMjkyNjYpLEM9aCgzODU0OCksdz1oKDUyODk0KSxTPWgoNDQyNTcpLEw9aCg3NTAwOSksUj1o''@;'; put 'put ''KDQ4NzkpO2ouQXV0aE1hbmFnZXI9Y2xhc3MgeHtjb25zdHJ1Y3RvcihWLE4seixZKXt0aGlzLnNlcnZlclVybD1WLHRoaXMuc2VydmVyVHlwZT1OLHRoaXMucmVxdWVzdENsaWVudD16LHRoaXMubG9naW5DYWxsYmFjaz1ZLHRoaXMudXNlck5hbWU9IiIsdGhpcy51c2VyTG9uZ05hbWU9IiIs''@;'; put 'put ''dGhpcy5yZWRpcmVjdGVkTG9naW5Vcmw9Ii9TQVNMb2dvbiIsdGhpcy5leHRyYWN0VXNlck5hbWU9Rj0+e3N3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2Ugcy5TZXJ2ZXJUeXBlLlNhc1ZpeWE6cmV0dXJuIEY/LmlkO2Nhc2Ugcy5TZXJ2ZXJUeXBlLlNhczk6cmV0dXJuIiI7Y2FzZSBzLlNl''@;'; put 'put ''cnZlclR5cGUuU2FzanM6cmV0dXJuIEY/LnVzZXJuYW1lO2RlZmF1bHQ6cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlNlcnZlciBUeXBlIG5vdCBmb3VuZCBpbiBleHRyYWN0VXNlck5hbWUgZnVuY3Rpb24iKSwiIn19LHRoaXMuZXh0cmFjdFVzZXJMb25nTmFtZT1GPT57c3dpdGNoKHRoaXMuc2Vy''@;'; put 'put ''dmVyVHlwZSl7Y2FzZSBzLlNlcnZlclR5cGUuU2FzVml5YTpyZXR1cm4gRj8ubmFtZTtjYXNlIHMuU2VydmVyVHlwZS5TYXM5OnJldHVybigwLEMuZXh0cmFjdFVzZXJMb25nTmFtZVNhczkpKEYpO2Nhc2Ugcy5TZXJ2ZXJUeXBlLlNhc2pzOnJldHVybiBGPy5kaXNwbGF5TmFtZTtkZWZhdWx0''@;'; put 'put ''OnJldHVybiBjb25zb2xlLmVycm9yKCJTZXJ2ZXIgVHlwZSBub3QgZm91bmQgaW4gZXh0cmFjdFVzZXJOYW1lIGZ1bmN0aW9uIiksIiJ9fSx0aGlzLnNldExvZ2luVXJsPUY9PntsZXQgVz1GWzFdLnJlcGxhY2UoL1w/LiovLCIiKTtpZigiLyI9PT1XWzBdKXtXPVcuc3Vic3RyKDEpO2NvbnN0''@;'; put 'put ''IHE9dGhpcy5zZXJ2ZXJVcmw/YCR7dGhpcy5zZXJ2ZXJVcmx9LyR7V31gOmAke1d9YDt0aGlzLmxvZ2luVXJsPXRoaXMuc2VydmVyVHlwZT09PXMuU2VydmVyVHlwZS5TYXNWaXlhP3E6cS5yZXBsYWNlKCIvU0FTTG9nb24vbG9naW4uZG8iLCIvU0FTTG9nb24vbG9naW4iKX19LHRoaXMubG9n''@;'; put 'put ''aW5Vcmw9Ii9TQVNMb2dvbi9sb2dpbiIsdGhpcy5sb2dvdXRVcmw9dGhpcy5zZXJ2ZXJUeXBlPT09cy5TZXJ2ZXJUeXBlLlNhczk/Ii9TQVNMb2dvbi9sb2dvdXQ/Ijp0aGlzLnNlcnZlclR5cGU9PT1zLlNlcnZlclR5cGUuU2FzVml5YT8iL1NBU0xvZ29uL2xvZ291dC5kbz8iOiIvU0FTTG9n''@;'; put 'put ''b24vbG9nb3V0Iix0aGlzLnJlZGlyZWN0ZWRMb2dpblVybD10aGlzLnNlcnZlclVybCt0aGlzLnJlZGlyZWN0ZWRMb2dpblVybH1yZWRpcmVjdGVkTG9nSW4oe29uTG9nZ2VkT3V0OlZ9KXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7aXNMb2dnZWRJbjpO''@;'; put 'put ''LHVzZXJOYW1lOnosdXNlckxvbmdOYW1lOll9PXlpZWxkIHRoaXMuZmV0Y2hVc2VyTmFtZSgpO2lmKE4pcmV0dXJuKHkubG9nZ2VyfHxjb25zb2xlKS5sb2coImxvZ2luIHdhcyBub3QgYXR0ZW1wdGVkIGFzIGEgdmFsaWQgc2Vzc2lvbiBhbHJlYWR5IGV4aXN0cyIpLHlpZWxkIHRoaXMubG9n''@;'; put 'put ''aW5DYWxsYmFjaygpLHtpc0xvZ2dlZEluOiEwLHVzZXJOYW1lOnosdXNlckxvbmdOYW1lOll9O2NvbnN0IEY9eWllbGQoMCx3Lm9wZW5XZWJQYWdlKSh0aGlzLnJlZGlyZWN0ZWRMb2dpblVybCwiU0FTTG9nb24iLHt3aWR0aDo1MDAsaGVpZ2h0OjYwMH0sVik7aWYoIUYpcmV0dXJue2lzTG9n''@;'; put 'put ''Z2VkSW46ITEsdXNlck5hbWU6IiIsdXNlckxvbmdOYW1lOiIifTtjb25zdHtpc0xvZ2dlZEluOld9PXRoaXMuc2VydmVyVHlwZT09PXMuU2VydmVyVHlwZS5TYXNWaXlhP3lpZWxkKDAsTC52ZXJpZnlTYXNWaXlhTG9naW4pKEYpOnlpZWxkKDAsUy52ZXJpZnlTYXM5TG9naW4pKEYpO2lmKEYu''@;'; put 'put ''Y2xvc2UoKSxXKXt0aGlzLnNlcnZlclR5cGU9PT1zLlNlcnZlclR5cGUuU2FzOSYmKHlpZWxkIHRoaXMucGVyZm9ybUNBU1NlY3VyaXR5Q2hlY2soKSk7Y29uc3R7dXNlck5hbWU6cSx1c2VyTG9uZ05hbWU6cmV9PXlpZWxkIHRoaXMuZmV0Y2hVc2VyTmFtZSgpO3JldHVybiB5aWVsZCB0aGlz''@;'; put 'put ''LmxvZ2luQ2FsbGJhY2soKSx7aXNMb2dnZWRJbjohMCx1c2VyTmFtZTpxLHVzZXJMb25nTmFtZTpyZX19cmV0dXJue2lzTG9nZ2VkSW46ITEsdXNlck5hbWU6IiIsdXNlckxvbmdOYW1lOiIifX0pfWxvZ0luKFYsTil7cmV0dXJuIGModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2Nv''@;'; put 'put ''bnN0IHo9e19zZXJ2aWNlOiJkZWZhdWx0Iix1c2VybmFtZTpWLHBhc3N3b3JkOk59O3RoaXMudXNlck5hbWU9IiIsdGhpcy51c2VyTG9uZ05hbWU9IiI7bGV0e2lzTG9nZ2VkSW46WSxsb2dpbkZvcm06Rix1c2VyTG9uZ05hbWU6V309eWllbGQgdGhpcy5jaGVja1Nlc3Npb24oKTtpZihZKXJl''@;'; put 'put ''dHVybih5LmxvZ2dlcnx8Y29uc29sZSkubG9nKCJsb2dpbiB3YXMgbm90IGF0dGVtcHRlZCBhcyBhIHZhbGlkIHNlc3Npb24gYWxyZWFkeSBleGlzdHMiKSx5aWVsZCB0aGlzLmxvZ2luQ2FsbGJhY2soKSx0aGlzLnVzZXJOYW1lPXoudXNlcm5hbWUsdGhpcy51c2VyTG9uZ05hbWU9Vyx7aXNM''@;'; put 'put ''b2dnZWRJbjohMCx1c2VyTmFtZTp0aGlzLnVzZXJOYW1lLHVzZXJMb25nTmFtZTp0aGlzLnVzZXJMb25nTmFtZX07bGV0IHE9eWllbGQgdGhpcy5zZW5kTG9naW5SZXF1ZXN0KEYseikscmU9KDAsUi5pc0xvZ0luU3VjY2Vzc0hlYWRlclByZXNlbnQpKHRoaXMuc2VydmVyVHlwZSxxKTtpZigh''@;'; put 'put ''cmUpe2lmKFUocSkpe2NvbnN0IENlPXlpZWxkIHRoaXMuZ2V0TG9naW5Gb3JtKHEpO3E9eWllbGQgdGhpcy5zZW5kTG9naW5SZXF1ZXN0KENlLHopfWNvbnN0IG1lPXlpZWxkIHRoaXMuY2hlY2tTZXNzaW9uKCk7cmU9bWUuaXNMb2dnZWRJbix0aGlzLnVzZXJMb25nTmFtZT1tZS51c2VyTG9u''@;'; put 'put ''Z05hbWV9cmV0dXJuIHJlJiYodGhpcy5zZXJ2ZXJUeXBlPT09cy5TZXJ2ZXJUeXBlLlNhczkmJih5aWVsZCB0aGlzLnBlcmZvcm1DQVNTZWN1cml0eUNoZWNrKCkpLHRoaXMubG9naW5DYWxsYmFjaygpLHRoaXMudXNlck5hbWU9ei51c2VybmFtZSkse2lzTG9nZ2VkSW46cmUsdXNlck5hbWU6''@;'; put 'put ''dGhpcy51c2VyTmFtZSx1c2VyTG9uZ05hbWU6dGhpcy51c2VyTG9uZ05hbWV9fSl9cGVyZm9ybUNBU1NlY3VyaXR5Q2hlY2soKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVj1gJHt0aGlzLnNlcnZlclVybH0vU0FTU3RvcmVkUHJvY2Vzcy9qX3Nwcmlu''@;'; put 'put ''Z19jYXNfc2VjdXJpdHlfY2hlY2tgO3lpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYC9TQVNMb2dvbi9sb2dpbj9zZXJ2aWNlPSR7Vn1gLHZvaWQgMCkuY2F0Y2goTj0+e2lmKCEoTiBpbnN0YW5jZW9mIEEuTm90Rm91bmRFcnJvcikpdGhyb3cgTn0pfSl9c2VuZExvZ2luUmVxdWVzdChW''@;'; put 'put ''LE4pe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLnNlcnZlclR5cGU9PT1zLlNlcnZlclR5cGUuU2FzanMpe2NvbnN0e3VzZXJuYW1lOkYscGFzc3dvcmQ6V309Tix7cmVzdWx0OnF9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHRoaXMubG9n''@;'; put 'put ''aW5Vcmwse3VzZXJuYW1lOkYscGFzc3dvcmQ6V30sdm9pZCAwKTtyZXR1cm4gcX1mb3IoY29uc3QgRiBpbiBWKU5bRl09VltGXTtjb25zdCB6PSgwLHYuc2VyaWFsaXplKShOKSx7cmVzdWx0Oll9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHRoaXMubG9naW5Vcmwseix2b2lkIDAs''@;'; put 'put ''InRleHQvcGxhaW4iLHsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixBY2NlcHQ6IiovKiJ9KTtyZXR1cm4gWX0pfWNoZWNrU2Vzc2lvbigpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtpc0xvZ2dlZEluOlYs''@;'; put 'put ''dXNlck5hbWU6Tix1c2VyTG9uZ05hbWU6en09eWllbGQgdGhpcy5mZXRjaFVzZXJOYW1lKCk7bGV0IFk9bnVsbDtyZXR1cm4gVnx8KHlpZWxkIHRoaXMubG9nT3V0KCksWT15aWVsZCB0aGlzLmdldE5ld0xvZ2luRm9ybSgpKSxQcm9taXNlLnJlc29sdmUoe2lzTG9nZ2VkSW46Vix1c2VyTmFt''@;'; put 'put ''ZTpOLHVzZXJMb25nTmFtZTp6LGxvZ2luRm9ybTpZfSl9KX1nZXROZXdMb2dpbkZvcm0oKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYodGhpcy5zZXJ2ZXJUeXBlPT09cy5TZXJ2ZXJUeXBlLlNhc2pzKXJldHVybiB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIv''@;'; put 'put ''Iix2b2lkIDApLnRoZW4oKHtyZXN1bHQ6Tn0pPT57dmFyIHo7Y29uc3QgWT1udWxsPT09KHo9LzxzY3JpcHQ+ZG9jdW1lbnQuY29va2llID0gJyhYU1JGLVRPS0VOPS4qOyBNYXgtQWdlPTg2NDAwOyBTYW1lU2l0ZT1TdHJpY3Q7IFBhdGg9XC87KSc8XC9zY3JpcHQ+Ly5leGVjKE4pKXx8dm9p''@;'; put 'put ''ZCAwPT09ej92b2lkIDA6elsxXTtZJiYoZG9jdW1lbnQuY29va2llPVkpfSk7Y29uc3R7cmVzdWx0OlZ9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQodGhpcy5sb2dpblVybC5yZXBsYWNlKCIvU0FTTG9nb24vbG9naW4uZG8iLCIvU0FTTG9nb24vbG9naW4iKSx2b2lkIDAsInRleHQv''@;'; put 'put ''cGxhaW4iKTtyZXR1cm4geWllbGQgdGhpcy5nZXRMb2dpbkZvcm0oVil9KX1mZXRjaFVzZXJOYW1lKCl7cmV0dXJuIGModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFY9dGhpcy5zZXJ2ZXJUeXBlPT09cy5TZXJ2ZXJUeXBlLlNhc1ZpeWE/YCR7dGhpcy5zZXJ2ZXJVcmx9''@;'; put 'put ''L2lkZW50aXRpZXMvdXNlcnMvQGN1cnJlbnRVc2VyYDp0aGlzLnNlcnZlclR5cGU9PT1zLlNlcnZlclR5cGUuU2FzOT9gJHt0aGlzLnNlcnZlclVybH0vU0FTU3RvcmVkUHJvY2Vzc2A6YCR7dGhpcy5zZXJ2ZXJVcmx9L1NBU2pzQXBpL3Nlc3Npb25gLHtyZXN1bHQ6Tn09eWllbGQgdGhpcy5y''@;'; put 'put ''ZXF1ZXN0Q2xpZW50LmdldChWLHZvaWQgMCwidGV4dC9wbGFpbiIpLmNhdGNoKFk9Pih7cmVzdWx0OiJhdXRoRXJyIn0pKSx6PSJhdXRoRXJyIiE9PU47cmV0dXJuIHo/e2lzTG9nZ2VkSW46eix1c2VyTmFtZTp0aGlzLmV4dHJhY3RVc2VyTmFtZShOKSx1c2VyTG9uZ05hbWU6dGhpcy5leHRy''@;'; put 'put ''YWN0VXNlckxvbmdOYW1lKE4pfTooeWllbGQgdGhpcy5sb2dPdXQoKSx7aXNMb2dnZWRJbjp6LHVzZXJOYW1lOiIiLHVzZXJMb25nTmFtZToiIn0pfSl9Z2V0TG9naW5Gb3JtKFYpe2NvbnN0IHo9Lzxmb3JtLithY3Rpb249IiguKihMb2dvbnxsb2dpbilbXiJdKikuKj4vLmV4ZWMoViksWT17''@;'; put 'put ''fTtpZih6JiZ6Lmxlbmd0aCl7dGhpcy5zZXRMb2dpblVybCh6KTtjb25zdCBGPShWPVYucmVwbGFjZSgvPGlucHV0L2csIlxuPGlucHV0IikpLm1hdGNoKC88aW5wdXQuKiJoaWRkZW4iW14+XSo+L2cpO0YmJkYuZm9yRWFjaChXPT57Y29uc3QgcT1XLm1hdGNoKC9uYW1lPSIoW14iXSopIlxz''@;'; put 'put ''dmFsdWU9IihbXiJdKikvKTtxJiZxLmxlbmd0aCYmKFlbcVsxXV09cVsyXSl9KX1yZXR1cm4gT2JqZWN0LmtleXMoWSkubGVuZ3RoP1k6bnVsbH1sb2dPdXQoKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMucmVxdWVzdENsaWVudC5yZXNldElu''@;'; put 'put ''TWVtb3J5QXV0aFN0YXRlKCksdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCh0aGlzLmxvZ291dFVybCx2b2lkIDApLnRoZW4oKCk9PiEwKX0pfX07Y29uc3QgVT1IPT4vQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdGhlIHN5c3RlbSB3YXMgdmVyaWZ5aW5nIHlvdXIgY3JlZGVudGlhbHMuIFBsZWFz''@;'; put 'put ''ZSBlbnRlciB5b3VyIGNyZWRlbnRpYWxzIGFnYWluLi9nbS50ZXN0KEgpfSw5OTIzOShmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oQyx3LFMsTCl7cmV0dXJuIG5ldyhTfHwoUz1Qcm9taXNlKSkoZnVuY3Rpb24oeCxVKXtmdW5jdGlv''@;'; put 'put ''biBIKHope3RyeXtOKEwubmV4dCh6KSl9Y2F0Y2goWSl7VShZKX19ZnVuY3Rpb24gVih6KXt0cnl7TihMLnRocm93KHopKX1jYXRjaChZKXtVKFkpfX1mdW5jdGlvbiBOKHope3ouZG9uZT94KHoudmFsdWUpOmZ1bmN0aW9uIFIoeCl7cmV0dXJuIHggaW5zdGFuY2VvZiBTP3g6bmV3IFMoZnVu''@;'; put 'put ''Y3Rpb24oVSl7VSh4KX0pfSh6LnZhbHVlKS50aGVuKEgsVil9TigoTD1MLmFwcGx5KEMsd3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmdldEFjY2Vzc1Rva2VuRm9yU2FzanM9dm9pZCAwO2NvbnN0IGM9aCg2MzQw''@;'; put 'put ''KSxzPWgoMTEwODcpLEE9aCgzNjMxKTtqLmdldEFjY2Vzc1Rva2VuRm9yU2FzanM9ZnVuY3Rpb24gdihDLHcsUyl7cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEw9Ii9TQVNqc0FwaS9hdXRoL3Rva2VuIixSPXtjbGllbnRJZDp3LGNvZGU6U307cmV0dXJu''@;'; put 'put ''IHlpZWxkIEMucG9zdChMLFIsdm9pZCAwKS50aGVuKHg9Pntjb25zdCBVPXgucmVzdWx0O3JldHVybnthY2Nlc3NfdG9rZW46VS5hY2Nlc3NUb2tlbixyZWZyZXNoX3Rva2VuOlUucmVmcmVzaFRva2VufX0pLmNhdGNoKHg9Pnt0aHJvdygwLGMucHJlZml4TWVzc2FnZSkoeCwoMCxzLmdldFRv''@;'; put 'put ''a2VuUmVxdWVzdEVycm9yUHJlZml4KSgiZmV0Y2hpbmcgYWNjZXNzIHRva2VuIiwiZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcyIsQS5TZXJ2ZXJUeXBlLlNhc2pzLEwsUix3KSl9KX0pfX0sODE2NzQoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg0ODI4NykuQnVmZmVyLGM9dGhpcyYmdGhp''@;'; put 'put ''cy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFMsTCxSLHgpe3JldHVybiBuZXcoUnx8KFI9UHJvbWlzZSkpKGZ1bmN0aW9uKEgsVil7ZnVuY3Rpb24gTihGKXt0cnl7WSh4Lm5leHQoRikpfWNhdGNoKFcpe1YoVyl9fWZ1bmN0aW9uIHooRil7dHJ5e1koeC50aHJvdyhGKSl9Y2F0Y2goVyl7VihXKX19''@;'; put 'put ''ZnVuY3Rpb24gWShGKXtGLmRvbmU/SChGLnZhbHVlKTpmdW5jdGlvbiBVKEgpe3JldHVybiBIIGluc3RhbmNlb2YgUj9IOm5ldyBSKGZ1bmN0aW9uKFYpe1YoSCl9KX0oRi52YWx1ZSkudGhlbihOLHopfVkoKHg9eC5hcHBseShTLEx8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5nZXRBY2Nlc3NUb2tlbkZvclZpeWE9dm9pZCAwO2NvbnN0IHM9aCgzNjMxKSxBPWgoNjM0MCksdj1oKDE3Mzg4KSxDPWgoMTEwODcpO2ouZ2V0QWNjZXNzVG9rZW5Gb3JWaXlhPWZ1bmN0aW9uIHcoUyxMLFIseCl7cmV0dXJuIGMo''@;'; put 'put ''dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBVO1U9dHlwZW9mIHk+InUiP2J0b2EoTCsiOiIrUik6eS5mcm9tKEwrIjoiK1IpLnRvU3RyaW5nKCJiYXNlNjQiKTtjb25zdCBIPSIvU0FTTG9nb24vb2F1dGgvdG9rZW4iLFY9e0F1dGhvcml6YXRpb246IkJhc2ljICIrVSxBY2Nl''@;'; put 'put ''cHQ6ImFwcGxpY2F0aW9uL2pzb24ifSxOPW5ldyBVUkxTZWFyY2hQYXJhbXMoe2dyYW50X3R5cGU6ImF1dGhvcml6YXRpb25fY29kZSIsY29kZTp4fSksej1uZXcgVVJMU2VhcmNoUGFyYW1zKE4pO3JldHVybiB5aWVsZCBTLnBvc3QoSCx6LHZvaWQgMCwiYXBwbGljYXRpb24veC13d3ctZm9y''@;'; put 'put ''bS11cmxlbmNvZGVkIixWKS50aGVuKEY9PkYucmVzdWx0KS5jYXRjaChGPT57dGhyb3cgRiBpbnN0YW5jZW9mIHYuQ2VydGlmaWNhdGVFcnJvcj9GOigwLEEucHJlZml4TWVzc2FnZSkoRiwoMCxDLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgiZmV0Y2hpbmcgYWNjZXNzIHRva2VuIiwi''@;'; put 'put ''Z2V0QWNjZXNzVG9rZW5Gb3JWaXlhIixzLlNlcnZlclR5cGUuU2FzVml5YSxILE4sVixMLFIpKX0pfSl9fSwxMTA4NyhmZSxqLGgpeyJ1c2Ugc3RyaWN0IjtqLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4PXZvaWQgMDtjb25zdCBjPWgoMzYzMSk7ai5nZXRUb2tlblJlcXVlc3RFcnJvclBy''@;'; put 'put ''ZWZpeD0odyxTLEwsUix4LFUsSCxWKT0+e2NvbnN0IE49WT0+SlNPTi5zdHJpbmdpZnkoWSxudWxsLDIpLHo9W2BFcnJvciB3aGlsZSAke3d9IGZyb20gJHtSfWAsYFRocm93biBieSB0aGUgQHNhc2pzL2FkYXB0ZXIgJHtTfSBmdW5jdGlvbi5gXTtyZXR1cm4geCYmKHoucHVzaCgiUGF5bG9h''@;'; put 'put ''ZDoiKSx6LnB1c2goTih4KSkpLFUmJih6LnB1c2goIkhlYWRlcnM6Iiksei5wdXNoKE4oVSkpKSxIJiZ6LnB1c2goYENsaWVudElkOiAke0h9YCksViYmei5wdXNoKGBDbGllbnRTZWNyZXQ6ICR7Vn1gKSx6LnB1c2goIiIpLHoucHVzaChgJHsodz0+YFJlc3BvbnNlIGZyb20gJHsodz0+dz09''@;'; put 'put ''PWMuU2VydmVyVHlwZS5TYXNWaXlhPyJWaXlhIjoiU2FzanMiKSh3KX0gaXMgYmVsb3cuYCkoTCl9YCksei5wdXNoKCIiKSx6LmpvaW4oIlxuIil9fSwyOTYwOShmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDY1NjA2KSxjPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihTLEws''@;'; put 'put ''Uix4KXtyZXR1cm4gbmV3KFJ8fChSPVByb21pc2UpKShmdW5jdGlvbihILFYpe2Z1bmN0aW9uIE4oRil7dHJ5e1koeC5uZXh0KEYpKX1jYXRjaChXKXtWKFcpfX1mdW5jdGlvbiB6KEYpe3RyeXtZKHgudGhyb3coRikpfWNhdGNoKFcpe1YoVyl9fWZ1bmN0aW9uIFkoRil7Ri5kb25lP0goRi52''@;'; put 'put ''YWx1ZSk6ZnVuY3Rpb24gVShIKXtyZXR1cm4gSCBpbnN0YW5jZW9mIFI/SDpuZXcgUihmdW5jdGlvbihWKXtWKEgpfSl9KEYudmFsdWUpLnRoZW4oTix6KX1ZKCh4PXguYXBwbHkoUyxMfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1''@;'; put 'put ''ZTohMH0pLGouZ2V0VG9rZW5zPXZvaWQgMDtjb25zdCBzPWgoMTYwNzIpLEE9aCgzNjMxKSx2PWgoODgxMjgpLEM9aCg5NjcyNSk7ai5nZXRUb2tlbnM9ZnVuY3Rpb24gdyhTLEwsUj1BLlNlcnZlclR5cGUuU2FzVml5YSx4KXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q''@;'; put 'put ''KCl7Y29uc3QgVT15LmxvZ2dlcnx8Y29uc29sZTtsZXR7YWNjZXNzX3Rva2VuOkgscmVmcmVzaF90b2tlbjpWfT1MO2NvbnN0e2NsaWVudDpOLHNlY3JldDp6fT1MO2xldCBZPSExO3RyeXtZPSgwLHMuaXNBY2Nlc3NUb2tlbkV4cGlyaW5nKShILDMwMCl9Y2F0Y2gocSl7aWYoIkludmFsaWRU''@;'; put 'put ''b2tlbkVycm9yIiE9PXEubmFtZSl0aHJvdyBxfWxldCBGPSExO3RyeXtGPSgwLHMuaGFzVG9rZW5FeHBpcmVkKShWKX1jYXRjaChxKXtpZigiSW52YWxpZFRva2VuRXJyb3IiIT09cS5uYW1lKXRocm93IHF9bGV0IFc9ITE7dHJ5e1c9KDAscy5pc1JlZnJlc2hUb2tlbkV4cGlyaW5nKShWKX1j''@;'; put 'put ''YXRjaChxKXtpZigiSW52YWxpZFRva2VuRXJyb3IiIT09cS5uYW1lKXRocm93IHF9aWYoWXx8Vyl7aWYoRil7Y29uc3QgcmU9IlVuYWJsZSB0byBvYnRhaW4gbmV3IGFjY2VzcyB0b2tlbi4gWW91ciByZWZyZXNoIHRva2VuIGhhcyBleHBpcmVkLiI7dGhyb3cgVS5lcnJvcihyZSksbmV3IEVy''@;'; put 'put ''cm9yKHJlKX1VLmluZm8oIlJlZnJlc2hpbmcgYWNjZXNzIGFuZCByZWZyZXNoIHRva2Vucy4iKSwoe2FjY2Vzc190b2tlbjpILHJlZnJlc2hfdG9rZW46Vn09Uj09PUEuU2VydmVyVHlwZS5TYXNWaXlhP3lpZWxkKDAsdi5yZWZyZXNoVG9rZW5zRm9yVml5YSkoUyxOfHwic2FzLmNsaSIsenx8''@;'; put 'put ''IiIsVik6eWllbGQoMCxDLnJlZnJlc2hUb2tlbnNGb3JTYXNqcykoUyxWKSksTC5hY2Nlc3NfdG9rZW49SCxMLnJlZnJlc2hfdG9rZW49Vjt0cnl7eWllbGQgeD8uKHthY2Nlc3NfdG9rZW46SCxyZWZyZXNoX3Rva2VuOlZ9KX1jYXRjaChyZSl7VS5lcnJvcigib25Ub2tlbnNSZWZyZXNoZWQg''@;'; put 'put ''aGFuZGxlciBmYWlsZWQ6IixyZSl9fXJldHVybnthY2Nlc3NfdG9rZW46SCxyZWZyZXNoX3Rva2VuOlYsY2xpZW50Ok4sc2VjcmV0Onp9fSl9fSw0ODc5KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlv''@;'; put 'put ''bihzLEEsdixDKXt2b2lkIDA9PT1DJiYoQz12KTt2YXIgdz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEEsdik7KCF3fHwoImdldCJpbiB3PyFBLl9fZXNNb2R1bGU6dy53cml0YWJsZXx8dy5jb25maWd1cmFibGUpKSYmKHc9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIEFbdl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsQyx3KX06ZnVuY3Rpb24ocyxBLHYsQyl7dm9pZCAwPT09QyYmKEM9diksc1tDXT1BW3ZdfSksYz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24ocyxBKXtmb3IodmFyIHYgaW4gcykiZGVmYXVsdCIhPT12JiYh''@;'; put 'put ''T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEEsdikmJnkoQSxzLHYpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYyhoKDE3NzEwKSxqKSxjKGgoODc2MDcpLGopLGMoaCg1MjM1OSksaiksYyhoKDU3ODQ3KSxqKX0sODc2MDco''@;'; put 'put ''ZmUsail7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkPXZvaWQgMCxqLmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkPXk9Pi88Zm9ybS4rYWN0aW9uPSIoLipMb2dvblwvb2F1dGhcL2F1''@;'; put 'put ''dGhvcml6ZVteIl0qKS4qPi9nbS50ZXN0KHkpfSw1MjM1OShmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouaXNMb2dJblJlcXVpcmVkPXZvaWQgMCxqLmlzTG9nSW5SZXF1aXJlZD15PT4vPGZvcm0uK2FjdGlvbj0i''@;'; put 'put ''KC4qKExvZ29uKXwobG9naW4pW14iXSopLio+L2dtLnRlc3QoeSl9LDU3ODQ3KGZlLGosaCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmlzTG9nSW5TdWNjZXNzSGVhZGVyUHJlc2VudD1qLmdldEV4cGVjdGVkTG9nSW5T''@;'; put 'put ''dWNjZXNzSGVhZGVyPWoubG9naW5TdWNjZXNzSGVhZGVycz1qLmRlZmF1bHRTdWNjZXNzSGVhZGVyS2V5PXZvaWQgMDtjb25zdCB5PWgoMzYzMSksYz1oKDI5MjY2KSxzPSJZb3UgaGF2ZSBzaWduZWQgaW4uIjtqLmRlZmF1bHRTdWNjZXNzSGVhZGVyS2V5PSJkZWZhdWx0IixqLmxvZ2luU3Vj''@;'; put 'put ''Y2Vzc0hlYWRlcnM9e2VzOiJZYSBzZSBoYSBpbmljaWFkbyBsYSBzZXNpXHhmM24uIix0aDoiXHUwZTA0XHUwZTM4XHUwZTEzXHUwZTI1XHUwZTA3XHUwZTBhXHUwZTM3XHUwZTQ4XHUwZTJkXHUwZTQwXHUwZTAyXHUwZTQ5XHUwZTMyXHUwZTQzXHUwZTBhXHUwZTQ5XHUwZTQxXHUwZTI1XHUw''@;'; put 'put ''ZTQ5XHUwZTI3IixqYToiXHUzMGI1XHUzMGE0XHUzMGYzXHUzMGE0XHUzMGYzXHUzMDU3XHUzMDdlXHUzMDU3XHUzMDVmXHUzMDAyIixuYjoiRHUgaGFyIGxvZ2dldCBkZWcgcFx4ZTUuIixzbDoiUHJpamF2aWxpIHN0ZSBzZS4iLGFyOiJcdTA2NDRcdTA2NDJcdTA2MmYgXHUwNjQyXHUwNjQ1''@;'; put 'put ''XHUwNjJhICIsc2s6IlByaWhsXHhlMXNpbGkgc3RlIHNhLiIsemhfSEs6Ilx1NjBhOFx1NWRmMlx1NzY3Ylx1NTE2NVx1MzAwMiIsemhfQ046Ilx1NjBhOFx1NWRmMlx1NzY3Ylx1NWY1NVx1MzAwMiIsaXQ6IkwndXRlbnRlIHNpIFx4ZTggY29ubmVzc28uIixzdjoiRHUgaGFyIGxvZ2dhdCBp''@;'; put 'put ''bi4iLGhlOiJcdTA1ZTBcdTA1ZGJcdTA1ZTBcdTA1ZTFcdTA1ZWEgIixubDoiVSBoZWJ0IHppY2ggYWFuZ2VtZWxkLiIscGw6Ilpvc3RhXHUwMTQyZVx1MDE1YiB6YWxvZ293YW55LiIsa286Ilx1Yjg1Y1x1YWRmOFx1Yzc3OFx1ZDU4OFx1YzJiNVx1YjJjOFx1YjJlNC4iLHpoX1RXOiJcdTYw''@;'; put 'put ''YThcdTVkZjJcdTc2N2JcdTUxNjVcdTMwMDIiLHRyOiJPdHVydW0gYVx4ZTd0XHUwMTMxblx1MDEzMXouIixpdzoiXHUwNWUwXHUwNWRiXHUwNWUwXHUwNWUxXHUwNWVhICIsZnI6IlZvdXMgXHhlYXRlcyBjb25uZWN0XHhlOS4iLHVrOiJcdTA0MTJcdTA0MzggXHUwNDMyXHUwNDMyXHUwNDU2''@;'; put 'put ''XHUwNDM5XHUwNDQ4XHUwNDNiXHUwNDM4IFx1MDQzMiBcdTA0M2VcdTA0MzFcdTA0M2JcdTA0NTZcdTA0M2FcdTA0M2VcdTA0MzJcdTA0MzhcdTA0MzkgXHUwNDM3XHUwNDMwXHUwNDNmXHUwNDM4XHUwNDQxLiIscHRfQlI6IlZvY1x4ZWEgc2UgY29uZWN0b3UuIixubzoiRHUgaGFyIGxvZ2dl''@;'; put 'put ''dCBkZWcgcFx4ZTUuIixjczoiSnN0ZSBwXHUwMTU5aWhsXHhlMVx1MDE2MWVuaS4iLGZpOiJPbGV0IGtpcmphdXR1bnV0IHNpc1x4ZTRceGU0bi4iLHJ1OiJcdTA0MTJcdTA0NGIgXHUwNDMyXHUwNDRiXHUwNDNmXHUwNDNlXHUwNDNiXHUwNDNkXHUwNDM4XHUwNDNiXHUwNDM4IFx1MDQzMlx1''@;'; put 'put ''MDQ0NVx1MDQzZVx1MDQzNCBcdTA0MzIgXHUwNDQxXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDM1XHUwNDNjXHUwNDQzLiIsZWw6Ilx1MDM4OFx1MDNjN1x1MDNiNVx1MDNjNFx1MDNiNSBcdTAzYzNcdTAzYzVcdTAzYmRcdTAzYjRcdTAzYjVcdTAzYjhcdTAzYjVcdTAzYWYuIixocjoiUHJpamF2''@;'; put 'put ''aWxpIHN0ZSBzZS4iLGRhOiJEdSBlciBsb2dnZXQgcFx4ZTUuIixkZToiU2llIHNpbmQgamV0enQgYW5nZW1lbGRldC4iLHNoOiJQcmlqYXZsamVuaSBzdGUuIixwdDoiSW5pY2lvdSBzZXNzXHhlM28uIixodToiQmVqZWxlbnRrZXpldHQuIixzcjoiUHJpamF2bGplbmkgc3RlLiIsZW46cyxb''@;'; put 'put ''ai5kZWZhdWx0U3VjY2Vzc0hlYWRlcktleV06c30sai5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRlcj0oKT0+e2xldCBDPWoubG9naW5TdWNjZXNzSGVhZGVyc1tqLmRlZmF1bHRTdWNjZXNzSGVhZGVyS2V5XTtjb25zdCB3PSgwLGMuZ2V0VXNlckxhbmd1YWdlKSgpO2lmKHcpe2xldCBT''@;'; put 'put ''PWoubG9naW5TdWNjZXNzSGVhZGVyc1t3XTtpZihTKUM9UztlbHNle2NvbnN0IFI9T2JqZWN0LmtleXMoai5sb2dpblN1Y2Nlc3NIZWFkZXJzKS5maW5kKHg9Pm5ldyBSZWdFeHAoeCwiaSIpLnRlc3QodykpO1ImJihDPWoubG9naW5TdWNjZXNzSGVhZGVyc1tSXSl9fXJldHVybiBDfSxqLmlz''@;'; put 'put ''TG9nSW5TdWNjZXNzSGVhZGVyUHJlc2VudD0oQyx3KT0+Qz09PXkuU2VydmVyVHlwZS5TYXNqcz93Py5sb2dnZWRJbjpuZXcgUmVnRXhwKCgwLGouZ2V0RXhwZWN0ZWRMb2dJblN1Y2Nlc3NIZWFkZXIpKCksImdtIikudGVzdCh3KX0sNTI4OTQoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9''@;'; put 'put ''dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHYsQyx3LFMpe3JldHVybiBuZXcod3x8KHc9UHJvbWlzZSkpKGZ1bmN0aW9uKFIseCl7ZnVuY3Rpb24gVShOKXt0cnl7VihTLm5leHQoTikpfWNhdGNoKHope3goeil9fWZ1bmN0aW9uIEgoTil7dHJ5e1YoUy50aHJvdyhOKSl9Y2F0Y2go''@;'; put 'put ''eil7eCh6KX19ZnVuY3Rpb24gVihOKXtOLmRvbmU/UihOLnZhbHVlKTpmdW5jdGlvbiBMKFIpe3JldHVybiBSIGluc3RhbmNlb2Ygdz9SOm5ldyB3KGZ1bmN0aW9uKHgpe3goUil9KX0oTi52YWx1ZSkudGhlbihVLEgpfVYoKFM9Uy5hcHBseSh2LEN8fFtdKSkubmV4dCgpKX0pfTtPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5vcGVuV2ViUGFnZT12b2lkIDA7Y29uc3QgYz1oKDkyOTg2KSxzPXt3aWR0aDo1MDAsaGVpZ2h0OjYwMH07ai5vcGVuV2ViUGFnZT1mdW5jdGlvbiBBKHYsQz0iIix3PXMsUyl7cmV0dXJuIHkodGhpcyx2b2lkIDAs''@;'; put 'put ''dm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3dpZHRoOkwsaGVpZ2h0OlJ9PXcseD1zY3JlZW4ud2lkdGgvMi1MLzIsVT1zY3JlZW4uaGVpZ2h0LzItUi8yO3JldHVybiB3aW5kb3cub3Blbih2LEMsYHRvb2xiYXI9MCxsb2NhdGlvbj0wLG1lbnViYXI9MCx3aWR0aD0ke0x9LGhlaWdodD0ke1J9''@;'; put 'put ''LGxlZnQ9JHt4fSx0b3A9JHtVfWApfHwoKHlpZWxkKFM/P2Mub3BlbkxvZ2luUHJvbXB0KSgpKT93aW5kb3cub3Blbih2LEMsYHRvb2xiYXI9MCxsb2NhdGlvbj0wLG1lbnViYXI9MCx3aWR0aD0ke0x9LGhlaWdodD0ke1J9LGxlZnQ9JHt4fSx0b3A9JHtVfWApOm51bGwpfSl9fSw5NjcyNShm''@;'; put 'put ''ZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oQyx3LFMsTCl7cmV0dXJuIG5ldyhTfHwoUz1Qcm9taXNlKSkoZnVuY3Rpb24oeCxVKXtmdW5jdGlvbiBIKHope3RyeXtOKEwubmV4dCh6KSl9Y2F0Y2goWSl7VShZKX19ZnVuY3Rpb24gVih6''@;'; put 'put ''KXt0cnl7TihMLnRocm93KHopKX1jYXRjaChZKXtVKFkpfX1mdW5jdGlvbiBOKHope3ouZG9uZT94KHoudmFsdWUpOmZ1bmN0aW9uIFIoeCl7cmV0dXJuIHggaW5zdGFuY2VvZiBTP3g6bmV3IFMoZnVuY3Rpb24oVSl7VSh4KX0pfSh6LnZhbHVlKS50aGVuKEgsVil9TigoTD1MLmFwcGx5KEMs''@;'; put 'put ''d3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLnJlZnJlc2hUb2tlbnNGb3JTYXNqcz12b2lkIDA7Y29uc3QgYz1oKDYzNDApLHM9aCgxMTA4NyksQT1oKDM2MzEpO2oucmVmcmVzaFRva2Vuc0ZvclNhc2pzPWZ1bmN0''@;'; put 'put ''aW9uIHYoQyx3KXtyZXR1cm4geSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgUz0iL1NBU2pzQXBpL2F1dGgvcmVmcmVzaCIsTD17QXV0aG9yaXphdGlvbjoiQmVhcmVyICIrd307cmV0dXJuIHlpZWxkIEMucG9zdChTLHZvaWQgMCx2b2lkIDAsdm9pZCAwLEwpLnRoZW4o''@;'; put 'put ''eD0+e2NvbnN0IFU9eC5yZXN1bHQ7cmV0dXJue2FjY2Vzc190b2tlbjpVLmFjY2Vzc1Rva2VuLHJlZnJlc2hfdG9rZW46VS5yZWZyZXNoVG9rZW59fSkuY2F0Y2goeD0+e3Rocm93KDAsYy5wcmVmaXhNZXNzYWdlKSh4LCgwLHMuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJyZWZyZXNo''@;'; put 'put ''aW5nIHRva2VucyIsInJlZnJlc2hUb2tlbnNGb3JTYXNqcyIsQS5TZXJ2ZXJUeXBlLlNhc2pzLFMpKX0pfSl9fSw4ODEyOChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDQ4Mjg3KS5CdWZmZXIsYz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUix4LFUsSCl7cmV0dXJuIG5l''@;'; put 'put ''dyhVfHwoVT1Qcm9taXNlKSkoZnVuY3Rpb24oTix6KXtmdW5jdGlvbiBZKHEpe3RyeXtXKEgubmV4dChxKSl9Y2F0Y2gocmUpe3oocmUpfX1mdW5jdGlvbiBGKHEpe3RyeXtXKEgudGhyb3cocSkpfWNhdGNoKHJlKXt6KHJlKX19ZnVuY3Rpb24gVyhxKXtxLmRvbmU/TihxLnZhbHVlKTpmdW5j''@;'; put 'put ''dGlvbiBWKE4pe3JldHVybiBOIGluc3RhbmNlb2YgVT9OOm5ldyBVKGZ1bmN0aW9uKHope3ooTil9KX0ocS52YWx1ZSkudGhlbihZLEYpfVcoKEg9SC5hcHBseShSLHh8fFtdKSkubmV4dCgpKX0pfSxzPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihSKXtyZXR1cm4gUiYm''@;'; put 'put ''Ui5fX2VzTW9kdWxlP1I6e2RlZmF1bHQ6Un19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLnJlZnJlc2hUb2tlbnNGb3JWaXlhPXZvaWQgMDtjb25zdCBBPWgoMzYzMSksdj1oKDYzNDApLEM9cyhoKDUxODk0KSksdz1oKDI5MjY2KSxTPWgoMTEw''@;'; put 'put ''ODcpO2oucmVmcmVzaFRva2Vuc0ZvclZpeWE9ZnVuY3Rpb24gTChSLHgsVSxIKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoISgwLHcuaXNOb2RlKSgpKXRocm93IG5ldyBFcnJvcigiTWV0aG9kICdyZWZyZXNoVG9rZW5zRm9yVml5YScgY2FuIG9ubHkgYmUg''@;'; put 'put ''dXNlZCBieSBOb2RlLiIpO2NvbnN0IFY9Ii9TQVNMb2dvbi9vYXV0aC90b2tlbiIsej17QXV0aG9yaXphdGlvbjoiQmFzaWMgIisodHlwZW9mIHk+InUiP2J0b2EoeCsiOiIrVSk6eS5mcm9tKHgrIjoiK1UpLnRvU3RyaW5nKCJiYXNlNjQiKSl9LFk9bmV3IEMuZGVmYXVsdDtyZXR1cm4gWS5h''@;'; put 'put ''cHBlbmQoImdyYW50X3R5cGUiLCJyZWZyZXNoX3Rva2VuIiksWS5hcHBlbmQoInJlZnJlc2hfdG9rZW4iLEgpLHlpZWxkIFIucG9zdChWLFksdm9pZCAwLCJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK1kuX2JvdW5kYXJ5LHopLnRoZW4oVz0+Vy5yZXN1bHQpLmNhdGNoKFc9Pnt0''@;'; put 'put ''aHJvdygwLHYucHJlZml4TWVzc2FnZSkoVywoMCxTLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgicmVmcmVzaGluZyB0b2tlbnMiLCJyZWZyZXNoVG9rZW5zRm9yVml5YSIsQS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsVixZLHoseCxVKSl9KX0pfX0sNDQyNTcoZmUsaixoKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIHk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHYsQyx3LFMpe3JldHVybiBuZXcod3x8KHc9UHJvbWlzZSkpKGZ1bmN0aW9uKFIseCl7ZnVuY3Rpb24gVShOKXt0cnl7VihTLm5leHQoTikpfWNhdGNoKHope3goeil9fWZ1bmN0aW9uIEgoTil7dHJ5e1YoUy50aHJvdyhO''@;'; put 'put ''KSl9Y2F0Y2goeil7eCh6KX19ZnVuY3Rpb24gVihOKXtOLmRvbmU/UihOLnZhbHVlKTpmdW5jdGlvbiBMKFIpe3JldHVybiBSIGluc3RhbmNlb2Ygdz9SOm5ldyB3KGZ1bmN0aW9uKHgpe3goUil9KX0oTi52YWx1ZSkudGhlbihVLEgpfVYoKFM9Uy5hcHBseSh2LEN8fFtdKSkubmV4dCgpKX0p''@;'; put 'put ''fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai52ZXJpZnlTYXM5TG9naW49dm9pZCAwO2NvbnN0IGM9aCgyOTI2Nikscz1oKDQ4NzkpO2oudmVyaWZ5U2FzOUxvZ2luPWZ1bmN0aW9uIEEodil7cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe2xldCBDPSExLHc9bmV3IERhdGUsUz0wO2Rve2lmKHlpZWxkKDAsYy5kZWxheSkoMWUzKSx2LmNsb3NlZClicmVhaztDPXYud2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoIlNBU0xvZ29uIikmJnYud2luZG93LmRvY3VtZW50LmJvZHkuaW5uZXJUZXh0LmluY2x1ZGVz''@;'; put 'put ''KCgwLHMuZ2V0RXhwZWN0ZWRMb2dJblN1Y2Nlc3NIZWFkZXIpKCkpLFM9KChuZXcgRGF0ZSkudmFsdWVPZigpLXcudmFsdWVPZigpKS8xZTN9d2hpbGUoIUMmJlM8MzAwKTtyZXR1cm57aXNMb2dnZWRJbjpDfX0pfX0sNzUwMDkoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9dGhpcyYmdGhp''@;'; put 'put ''cy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEMsdyxTLEwpe3JldHVybiBuZXcoU3x8KFM9UHJvbWlzZSkpKGZ1bmN0aW9uKHgsVSl7ZnVuY3Rpb24gSCh6KXt0cnl7TihMLm5leHQoeikpfWNhdGNoKFkpe1UoWSl9fWZ1bmN0aW9uIFYoeil7dHJ5e04oTC50aHJvdyh6KSl9Y2F0Y2goWSl7VShZKX19''@;'; put 'put ''ZnVuY3Rpb24gTih6KXt6LmRvbmU/eCh6LnZhbHVlKTpmdW5jdGlvbiBSKHgpe3JldHVybiB4IGluc3RhbmNlb2YgUz94Om5ldyBTKGZ1bmN0aW9uKFUpe1UoeCl9KX0oei52YWx1ZSkudGhlbihILFYpfU4oKEw9TC5hcHBseShDLHd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5pc0xvZ2dlZEluU0FTVklZQT1qLnZlcmlmeVNhc1ZpeWFMb2dpbj12b2lkIDA7Y29uc3QgYz1oKDI5MjY2KSxzPWgoNDg3OSk7ai52ZXJpZnlTYXNWaXlhTG9naW49ZnVuY3Rpb24gQShDKXt2YXIgdyxTO3JldHVybiB5KHRoaXMs''@;'; put 'put ''dm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgTD0hMSxSPW5ldyBEYXRlLHg9MDtkb3tpZih5aWVsZCgwLGMuZGVsYXkpKDFlMyksQy5jbG9zZWQpYnJlYWs7TD0oMCxqLmlzTG9nZ2VkSW5TQVNWSVlBKSgpLHg9KChuZXcgRGF0ZSkudmFsdWVPZigpLVIudmFsdWVPZigpKS8xZTN9d2hp''@;'; put 'put ''bGUoIUwmJng8MzAwKTtsZXQgVT0hMTtSPW5ldyBEYXRlO2Rve2lmKHlpZWxkKDAsYy5kZWxheSkoMWUzKSxDLmNsb3NlZClicmVhaztVPUMud2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoIlNBU0xvZ29uIil8fChudWxsPT09KFM9bnVsbD09PSh3PUMud2luZG93LmRvY3VtZW50LmJv''@;'; put 'put ''ZHkpfHx2b2lkIDA9PT13P3ZvaWQgMDp3LmlubmVyVGV4dCl8fHZvaWQgMD09PVM/dm9pZCAwOlMuaW5jbHVkZXMoKDAscy5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRlcikoKSkpLHg9KChuZXcgRGF0ZSkudmFsdWVPZigpLVIudmFsdWVPZigpKS8xZTN9d2hpbGUoIVUmJng8MzAwKTty''@;'; put 'put ''ZXR1cm57aXNMb2dnZWRJbjpMJiZVfX0pfSxqLmlzTG9nZ2VkSW5TQVNWSVlBPSgpPT5kb2N1bWVudC5jb29raWUuaW5jbHVkZXMoIkN1cnJlbnQtVXNlciIpJiZkb2N1bWVudC5jb29raWUuaW5jbHVkZXMoInVzZXJJZCIpfSw0NzY3MyhmZSxqLGgpeyJ1c2Ugc3RyaWN0IjtqLmdlbmVyYXRl''@;'; put 'put ''RmlsZVVwbG9hZEZvcm09dm9pZCAwO2NvbnN0IGM9aCg0Nzg2KSxzPWgoMjkyNjYpO2ouZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybT0odixDKT0+e2Zvcihjb25zdCB3IGluIEMpe2lmKCFBcnJheS5pc0FycmF5KENbd10pKWNvbnRpbnVlO2NvbnN0IFM9dyxMPSgwLGMuY29udmVydFRvQ1NWKShD''@;'; put 'put ''LHcpO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT1MKXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtpZigoMCxzLmlzTm9kZSkoKSl2LmFwcGVuZChTLEwse2ZpbGVuYW1lOmAk''@;'; put 'put ''e1N9LmNzdmAsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KTtlbHNle2NvbnN0IFI9bmV3IEJsb2IoW0xdLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSk7di5hcHBlbmQoUyxSLGAke1N9LmNzdmApfX1yZXR1cm4gdn19LDEwMDkzKGZlLGosaCl7InVzZSBzdHJpY3QiO2ouZ2VuZXJh''@;'; put 'put ''dGVUYWJsZVVwbG9hZEZvcm09dm9pZCAwO2NvbnN0IGM9aCg0Nzg2KSxzPWgoMTg3MjApO2ouZ2VuZXJhdGVUYWJsZVVwbG9hZEZvcm09KHYsQyk9Pntjb25zdCB3PVtdLFM9e307bGV0IEw9MDtmb3IoY29uc3QgUiBpbiBDKXtpZigoMCxjLmlzRm9ybWF0c1RhYmxlKShSKSYmT2JqZWN0Lmtl''@;'; put 'put ''eXMoQykuaW5jbHVkZXMoUi5yZXBsYWNlKC9eXCQvLCIiKSkpY29udGludWU7TCsrLCgwLGMuaXNGb3JtYXRzVGFibGUpKFIpfHx3LnB1c2goUik7Y29uc3QgeD0oMCxjLmNvbnZlcnRUb0NTVikoQyxSKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09eCl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7eC5sZW5ndGg+MTZlMz8oMCxzLnNwbGl0Q2h1bmtzKSh4KS5tYXAoSD0+e3YuYXBwZW5kKGBzYXNqcyR7TH1kYXRhYCxIKX0pOlNbYHNhc2pzJHtMfWRhdGFgXT14fXJl''@;'; put 'put ''dHVybiBTLnNhc2pzX3RhYmxlcz13LmpvaW4oIiAiKSx7Zm9ybURhdGE6dixyZXF1ZXN0UGFyYW1zOlN9fX0sMjgxNTYoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHYsQyx3LFMpe3ZvaWQgMD09''@;'; put 'put ''PVMmJihTPXcpO3ZhciBMPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoQyx3KTsoIUx8fCgiZ2V0ImluIEw/IUMuX19lc01vZHVsZTpMLndyaXRhYmxlfHxMLmNvbmZpZ3VyYWJsZSkpJiYoTD17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQ1t3XX19KSxPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkodixTLEwpfTpmdW5jdGlvbih2LEMsdyxTKXt2b2lkIDA9PT1TJiYoUz13KSx2W1NdPUNbd119KSxjPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbih2LEMpe2Zvcih2YXIgdyBpbiB2KSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhh''@;'; put 'put ''c093blByb3BlcnR5LmNhbGwoQyx3KSYmeShDLHYsdyl9LHM9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHYpe3JldHVybiB2JiZ2Ll9fZXNNb2R1bGU/djp7ZGVmYXVsdDp2fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2Nv''@;'; put 'put ''bnN0IEE9cyhoKDY5ODEwKSk7YyhoKDUzNTc0KSxqKSxjKGgoMTczODgpLGopLGMoaCg4MjAxNSksaiksYyhoKDcyODMxKSxqKSxjKGgoNDU4MDMpLGopLGMoaCg3NzU2MCksaiksai5kZWZhdWx0PUEuZGVmYXVsdH0sMTQxMjYoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9dGhpcyYmdGhp''@;'; put 'put ''cy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEMsdyxTLEwpe3JldHVybiBuZXcoU3x8KFM9UHJvbWlzZSkpKGZ1bmN0aW9uKHgsVSl7ZnVuY3Rpb24gSCh6KXt0cnl7TihMLm5leHQoeikpfWNhdGNoKFkpe1UoWSl9fWZ1bmN0aW9uIFYoeil7dHJ5e04oTC50aHJvdyh6KSl9Y2F0Y2goWSl7VShZKX19''@;'; put 'put ''ZnVuY3Rpb24gTih6KXt6LmRvbmU/eCh6LnZhbHVlKTpmdW5jdGlvbiBSKHgpe3JldHVybiB4IGluc3RhbmNlb2YgUz94Om5ldyBTKGZ1bmN0aW9uKFUpe1UoeCl9KX0oei52YWx1ZSkudGhlbihILFYpfU4oKEw9TC5hcHBseShDLHd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5Db21wdXRlSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IGM9aCgzNjMxKSxzPWgoMTczODgpLEE9aCg5MTEwMSk7ai5Db21wdXRlSm9iRXhlY3V0b3I9Y2xhc3MgdiBleHRlbmRzIEEuQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9y''@;'; put 'put ''KHcsUyl7c3VwZXIodyxjLlNlcnZlclR5cGUuU2FzVml5YSksdGhpcy5zYXNWaXlhQXBpQ2xpZW50PVN9ZXhlY3V0ZSh3LFMsTCxSLHgpe3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBVPVJ8fCgoKT0+UHJvbWlzZS5yZXNvbHZlKCkpO3JldHVybiBuZXcg''@;'; put 'put ''UHJvbWlzZSgoeixZKT0+e3ZhciBGO251bGw9PT0oRj10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1GfHxGLmV4ZWN1dGVDb21wdXRlSm9iKHcsTC5jb250ZXh0TmFtZSxMLmRlYnVnLFMseCwhMCwhMCkudGhlbihXPT57dGhpcy5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVl''@;'; put 'put ''c3QoVyx3LEwuZGVidWcpLHooVy5yZXN1bHQpfSkuY2F0Y2goVz0+eSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7VyBpbnN0YW5jZW9mIHMuQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVlc3QoVyx3LEwuZGVidWcpLFko''@;'; put 'put ''bmV3IHMuRXJyb3JSZXNwb25zZShXPy5tZXNzYWdlLFcpKSksVyBpbnN0YW5jZW9mIHMuTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KCgpPT50aGlzLmV4ZWN1dGUodyxTLEwsUikudGhlbihxPT57eihxKX0scT0+e1kocSl9KSkseWllbGQgVSgpKTpZKG5l''@;'; put 'put ''dyBzLkVycm9yUmVzcG9uc2UoVz8ubWVzc2FnZSxXKSl9KSl9KX0pfX19LDEzODcxKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih3LFMsTCxSKXtyZXR1cm4gbmV3KEx8fChMPVByb21pc2UpKShmdW5jdGlvbihVLEgpe2Z1bmN0aW9u''@;'; put 'put ''IFYoWSl7dHJ5e3ooUi5uZXh0KFkpKX1jYXRjaChGKXtIKEYpfX1mdW5jdGlvbiBOKFkpe3RyeXt6KFIudGhyb3coWSkpfWNhdGNoKEYpe0goRil9fWZ1bmN0aW9uIHooWSl7WS5kb25lP1UoWS52YWx1ZSk6ZnVuY3Rpb24geChVKXtyZXR1cm4gVSBpbnN0YW5jZW9mIEw/VTpuZXcgTChmdW5j''@;'; put 'put ''dGlvbihIKXtIKFUpfSl9KFkudmFsdWUpLnRoZW4oVixOKX16KChSPVIuYXBwbHkodyxTfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouRmlsZVVwbG9hZGVyPXZvaWQgMDtjb25zdCBjPWgoMjkyNjYpLHM9aCgxNzM4''@;'; put 'put ''OCksQT1oKDM2MzEpLHY9aCg5MTEwMSk7ai5GaWxlVXBsb2FkZXI9Y2xhc3MgQyBleHRlbmRzIHYuQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKFMsTCxSLHgpe3N1cGVyKFMsTCksdGhpcy5qb2JzUGF0aD1SLHRoaXMucmVxdWVzdENsaWVudD14fWV4ZWN1dGUoUyxMLFIseCl7cmV0dXJu''@;'; put 'put ''IHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e2ZpbGVzOlUscGFyYW1zOkh9PUwsVj14fHwoKCk9PlByb21pc2UucmVzb2x2ZSgpKTtpZighVT8ubGVuZ3RoKXRocm93IG5ldyBzLkVycm9yUmVzcG9uc2UoIkF0IGxlYXN0IG9uZSBmaWxlIG11c3QgYmUgcHJvdmlkZWQu''@;'; put 'put ''Iik7aWYoIVN8fCIiPT09Uyl0aHJvdyBuZXcgcy5FcnJvclJlc3BvbnNlKCJzYXNKb2IgbXVzdCBiZSBwcm92aWRlZC4iKTtsZXQgTj0iIjtmb3IobGV0IG1lIGluIEgpSC5oYXNPd25Qcm9wZXJ0eShtZSkmJihOKz1gJiR7bWV9PSR7SFttZV19YCk7Y29uc3Qgej1SLmFwcExvYz9SLmFwcExv''@;'; put 'put ''Yy5yZXBsYWNlKC9cLz8kLywiLyIpK1MucmVwbGFjZSgvXlwvLywiIik6UyxZPWAke3RoaXMuam9ic1BhdGh9Lz8keyJfcHJvZ3JhbT0iK3p9JHtOfWAsRj1uZXcgRm9ybURhdGE7Zm9yKGxldCBtZSBvZiBVKUYuYXBwZW5kKCJmaWxlIixtZS5maWxlLG1lLmZpbGVOYW1lKTtjb25zdCBXPXRo''@;'; put 'put ''aXMucmVxdWVzdENsaWVudC5nZXRDc3JmVG9rZW4oImZpbGUiKTtXJiZGLmFwcGVuZCgiX2NzcmYiLFcudmFsdWUpLFIuZGVidWcmJkYuYXBwZW5kKCJfZGVidWciLCIxMzEiKSxSLnNlcnZlclR5cGU9PT1BLlNlcnZlclR5cGUuU2FzVml5YSYmUi5jb250ZXh0TmFtZSYmRi5hcHBlbmQoIl9j''@;'; put 'put ''b250ZXh0bmFtZSIsUi5jb250ZXh0TmFtZSk7Y29uc3QgcT17ImNhY2hlLWNvbnRyb2wiOiJuby1jYWNoZSIsQWNjZXB0OiIqLyoiLCJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIn07cmV0dXJuIG5ldyBQcm9taXNlKChtZSxDZSk9Pnt0aGlzLnJlcXVlc3RDbGllbnQucG9zdChZLEYsdm9p''@;'; put 'put ''ZCAwLCJhcHBsaWNhdGlvbi9qc29uIixxKS50aGVuKEllPT55KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChJZSxTLFIuZGVidWcpO2xldCBrZT1JZS5yZXN1bHQ7aWYoUi5kZWJ1Zylzd2l0Y2godGhpcy5zZXJ2ZXJUeXBl''@;'; put 'put ''KXtjYXNlIEEuU2VydmVyVHlwZS5TYXNWaXlhOmtlPXlpZWxkKDAsYy5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlKShJZS5yZXN1bHQsdGhpcy5yZXF1ZXN0Q2xpZW50LFIuc2VydmVyVXJsKTticmVhaztjYXNlIEEuU2VydmVyVHlwZS5TYXM5OmtlPSJzdHJpbmciPT10eXBlb2YgSWUucmVz''@;'; put 'put ''dWx0PygwLGMucGFyc2VXZWJvdXRSZXNwb25zZSkoSWUucmVzdWx0LFkpOkllLnJlc3VsdDticmVhaztjYXNlIEEuU2VydmVyVHlwZS5TYXNqczprZT0ic3RyaW5nIj09dHlwZW9mIEllLnJlc3VsdD8oMCxjLmdldFZhbGlkSnNvbikoSWUucmVzdWx0KTpJZS5yZXN1bHR9ZWxzZSBrZT0ic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIEllLnJlc3VsdD8oMCxjLmdldFZhbGlkSnNvbikoSWUucmVzdWx0KTpJZS5yZXN1bHQ7bWUoa2UpfSkpLmNhdGNoKEllPT55KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtJZSBpbnN0YW5jZW9mIHMuSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnJlcXVlc3RD''@;'; put 'put ''bGllbnQuYXBwZW5kUmVxdWVzdChJZSxTLFIuZGVidWcpLENlKG5ldyBzLkVycm9yUmVzcG9uc2UoSWU/Lm1lc3NhZ2UsSWUpKSksSWUgaW5zdGFuY2VvZiBzLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKFMsTCxSLHgpLnRo''@;'; put 'put ''ZW4oa2U9PnttZShrZSl9LGtlPT57Q2Uoa2UpfSkpLHlpZWxkIFYoKSk6Q2UobmV3IHMuRXJyb3JSZXNwb25zZSgiRmlsZSB1cGxvYWQgcmVxdWVzdCBmYWlsZWQuIixJZSkpfSkpfSl9KX19fSw5MTEzMShmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8''@;'; put 'put ''ZnVuY3Rpb24odyxTLEwsUil7cmV0dXJuIG5ldyhMfHwoTD1Qcm9taXNlKSkoZnVuY3Rpb24oVSxIKXtmdW5jdGlvbiBWKFkpe3RyeXt6KFIubmV4dChZKSl9Y2F0Y2goRil7SChGKX19ZnVuY3Rpb24gTihZKXt0cnl7eihSLnRocm93KFkpKX1jYXRjaChGKXtIKEYpfX1mdW5jdGlvbiB6KFkp''@;'; put 'put ''e1kuZG9uZT9VKFkudmFsdWUpOmZ1bmN0aW9uIHgoVSl7cmV0dXJuIFUgaW5zdGFuY2VvZiBMP1U6bmV3IEwoZnVuY3Rpb24oSCl7SChVKX0pfShZLnZhbHVlKS50aGVuKFYsTil9eigoUj1SLmFwcGx5KHcsU3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2Vz''@;'; put 'put ''TW9kdWxlIix7dmFsdWU6ITB9KSxqLkplc0pvYkV4ZWN1dG9yPXZvaWQgMDtjb25zdCBjPWgoMzYzMSkscz1oKDE3Mzg4KSxBPWgoOTExMDEpLHY9aCgyOTI2Nik7ai5KZXNKb2JFeGVjdXRvcj1jbGFzcyBDIGV4dGVuZHMgQS5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoUyxMKXtzdXBl''@;'; put 'put ''cihTLGMuU2VydmVyVHlwZS5TYXNWaXlhKSx0aGlzLnNhc1ZpeWFBcGlDbGllbnQ9TH1leGVjdXRlKFMsTCxSLHgsVSxIPVtdKXtyZXR1cm4geSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVj14fHwoKCk9PlByb21pc2UucmVzb2x2ZSgpKTtyZXR1cm4gbmV3IFByb21p''@;'; put 'put ''c2UoKHosWSk9Pnt2YXIgRjtudWxsPT09KEY9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09Rnx8Ri5leGVjdXRlSm9iKFMsUi5jb250ZXh0TmFtZSxSLmRlYnVnLEwsVSkudGhlbihXPT57dGhpcy5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVlc3QoVyxTLFIuZGVidWcpO2Nv''@;'; put 'put ''bnN0IHE9KDAsdi5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcykoVyxIKTt6KHEpfSkuY2F0Y2goVz0+eSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7VyBpbnN0YW5jZW9mIHMuSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVz''@;'; put 'put ''dChXLFMsUi5kZWJ1ZyksWShuZXcgcy5FcnJvclJlc3BvbnNlKFc/Lm1lc3NhZ2UsVykpKSxXIGluc3RhbmNlb2Ygcy5Mb2dpblJlcXVpcmVkRXJyb3I/KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoKCk9PnRoaXMuZXhlY3V0ZShTLEwsUix4LFUsSCkudGhlbihxPT57eihxKX0scT0+e1ko''@;'; put 'put ''cSl9KSkseWllbGQgVigpKTpZKG5ldyBzLkVycm9yUmVzcG9uc2UoVz8ubWVzc2FnZSxXKSl9KSl9KX0pfX19LDkxMTAxKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihBLHYsQyx3KXtyZXR1cm4gbmV3KEN8fChDPVByb21pc2UpKShm''@;'; put 'put ''dW5jdGlvbihMLFIpe2Z1bmN0aW9uIHgoVil7dHJ5e0gody5uZXh0KFYpKX1jYXRjaChOKXtSKE4pfX1mdW5jdGlvbiBVKFYpe3RyeXtIKHcudGhyb3coVikpfWNhdGNoKE4pe1IoTil9fWZ1bmN0aW9uIEgoVil7Vi5kb25lP0woVi52YWx1ZSk6ZnVuY3Rpb24gUyhMKXtyZXR1cm4gTCBpbnN0''@;'; put 'put ''YW5jZW9mIEM/TDpuZXcgQyhmdW5jdGlvbihSKXtSKEwpfSl9KFYudmFsdWUpLnRoZW4oeCxVKX1IKCh3PXcuYXBwbHkoQSx2fHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouQmFzZUpvYkV4ZWN1dG9yPXZvaWQgMDtj''@;'; put 'put ''b25zdCBjPWgoMjkyNjYpO2ouQmFzZUpvYkV4ZWN1dG9yPWNsYXNzIHN7Y29uc3RydWN0b3IodixDKXt0aGlzLnNlcnZlclVybD12LHRoaXMuc2VydmVyVHlwZT1DLHRoaXMud2FpdGluZ1JlcXVlc3RzPVtdLHRoaXMucmVzZW5kV2FpdGluZ1JlcXVlc3RzPSgpPT55KHRoaXMsdm9pZCAwLHZv''@;'; put 'put ''aWQgMCxmdW5jdGlvbiooKXt5aWVsZCgwLGMuYXN5bmNGb3JFYWNoKSh0aGlzLndhaXRpbmdSZXF1ZXN0cyx3PT55KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCB3KCl9KSksdGhpcy53YWl0aW5nUmVxdWVzdHM9W119KX1hcHBlbmRXYWl0aW5nUmVxdWVzdCh2KXt0aGlz''@;'; put 'put ''LndhaXRpbmdSZXF1ZXN0cy5wdXNoKHYpfWdldFJlcXVlc3RQYXJhbXModil7Y29uc3QgQz17fTtyZXR1cm4gdi5kZWJ1ZyYmKEMuX29taXR0ZXh0bG9nPSJmYWxzZSIsQy5fb21pdFNlc3Npb25SZXN1bHRzPSJmYWxzZSIsQy5fZGVidWc9MTMxKSxDfX19LDU0OTQxKGZlLGosaCl7InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciB5PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihSLHgsVSxIKXtyZXR1cm4gbmV3KFV8fChVPVByb21pc2UpKShmdW5jdGlvbihOLHope2Z1bmN0aW9uIFkocSl7dHJ5e1coSC5uZXh0KHEpKX1jYXRjaChyZSl7eihyZSl9fWZ1bmN0aW9uIEYocSl7dHJ5e1coSC50''@;'; put 'put ''aHJvdyhxKSl9Y2F0Y2gocmUpe3oocmUpfX1mdW5jdGlvbiBXKHEpe3EuZG9uZT9OKHEudmFsdWUpOmZ1bmN0aW9uIFYoTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBVP046bmV3IFUoZnVuY3Rpb24oeil7eihOKX0pfShxLnZhbHVlKS50aGVuKFksRil9VygoSD1ILmFwcGx5KFIseHx8W10pKS5u''@;'; put 'put ''ZXh0KCkpfSl9LGM9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKFIpe3JldHVybiBSJiZSLl9fZXNNb2R1bGU/Ujp7ZGVmYXVsdDpSfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouU2FzOUpvYkV4ZWN1dG9yPXZvaWQgMDtj''@;'; put 'put ''b25zdCBzPWMoaCg1MTg5NCkpLEE9aCgxNzM4OCksdj1oKDI5MjY2KSxDPWgoOTExMDEpLHc9aCg2MDU3Nik7ai5TYXM5Sm9iRXhlY3V0b3I9Y2xhc3MgUyBleHRlbmRzIEMuQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKHgsVSxILFYsTil7c3VwZXIoeCxVKSx0aGlzLmpvYnNQYXRoPUgs''@;'; put 'put ''dGhpcy5yZXF1ZXN0Q2xpZW50PVYsdGhpcy5zYXM5UmVxdWVzdENsaWVudD1uZXcgdy5TYXM5UmVxdWVzdENsaWVudCh4LE4pfWV4ZWN1dGUoeCxVLEgpe3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBWPSgwLHYuaXNSZWxhdGl2ZVBhdGgpKHgpJiZILmFw''@;'; put 'put ''cExvYz9ILmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK3gucmVwbGFjZSgvXlwvLywiIik6eDtsZXQgTj1gJHtILnNlcnZlclVybH0ke3RoaXMuam9ic1BhdGh9PyR7Il9wcm9ncmFtPSIrVn1gO049YCR7Tn0ke0gudXNlcm5hbWUmJkgucGFzc3dvcmQ/IiZfdXNlcm5hbWU9IitILnVzZXJu''@;'; put 'put ''YW1lKyImX3Bhc3N3b3JkPSIrSC5wYXNzd29yZDoiIn1gLE49YCR7Tn0ke0guZGVidWc/IiZfZGVidWc9MTMxIjoiIn1gO2xldCB6PU9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRSZXF1ZXN0UGFyYW1zKEgpKSxZPW5ldyBzLmRlZmF1bHQ7aWYoVSl0cnl7WT1MKFksVSl9Y2F0Y2gocSl7cmV0''@;'; put 'put ''dXJuIFByb21pc2UucmVqZWN0KG5ldyBBLkVycm9yUmVzcG9uc2UocT8ubWVzc2FnZSxxKSl9ZWxzZSBVPSIiO2Zvcihjb25zdCBxIGluIHopei5oYXNPd25Qcm9wZXJ0eShxKSYmWS5hcHBlbmQocSx6W3FdKTt5aWVsZCB0aGlzLnNhczlSZXF1ZXN0Q2xpZW50LmxvZ2luKEgudXNlcm5hbWUs''@;'; put 'put ''SC5wYXNzd29yZCx0aGlzLmpvYnNQYXRoKTtjb25zdCBGPVUmJk9iamVjdC5rZXlzKFUpLmxlbmd0aD8ibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitZLl9ib3VuZGFyeToidGV4dC9wbGFpbiI7cmV0dXJuIG5ldyBQcm9taXNlKChxLHJlKT0+dGhpcy5zYXM5UmVxdWVzdENsaWVu''@;'; put 'put ''dC5wb3N0KE4sWSx2b2lkIDAsRix7QWNjZXB0OiIqLyoiLENvbm5lY3Rpb246IktlZXAtQWxpdmUifSkudGhlbihtZT0+e3RoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KG1lLHgsSC5kZWJ1ZykscShtZSl9KS5jYXRjaChtZT0+e2xldCBDZT1tZTttZS5yZXN1bHQmJiIiIT09bWUu''@;'; put 'put ''cmVzdWx0P0NlPW1lLnJlc3VsdDptZS5tZXNzYWdlJiYoQ2U9bWUubWVzc2FnZSksdGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoQ2UseCxILmRlYnVnKSxyZShuZXcgQS5FcnJvclJlc3BvbnNlKG1lPy5tZXNzYWdlLG1lKSl9KSl9KX1nZXRSZXF1ZXN0UGFyYW1zKHgpe2NvbnN0''@;'; put 'put ''IFU9e307cmV0dXJuIHguZGVidWcmJihVLl9kZWJ1Zz0xMzEpLFV9fTtjb25zdCBMPShSLHgpPT57Zm9yKGNvbnN0IFUgaW4geCl7Y29uc3QgSD1VLFY9KDAsdi5jb252ZXJ0VG9DU1YpKHgsVSk7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PVYpdGhyb3cgbmV3IEVycm9yKCJU''@;'; put 'put ''aGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO1IuYXBwZW5kKEgsVix7ZmlsZW5hbWU6YCR7SH0uY3N2YCxjb250ZW50VHlwZToiYXBwbGljYXRpb24vY3N2In0pfXJldHVybiBSfX0sMjg5OTUoZmUsaixoKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIHk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHgsVSxILFYpe3JldHVybiBuZXcoSHx8KEg9UHJvbWlzZSkpKGZ1bmN0aW9uKHosWSl7ZnVuY3Rpb24gRihyZSl7dHJ5e3EoVi5uZXh0KHJlKSl9Y2F0Y2gobWUpe1kobWUpfX1mdW5jdGlvbiBXKHJlKXt0cnl7cShWLnRo''@;'; put 'put ''cm93KHJlKSl9Y2F0Y2gobWUpe1kobWUpfX1mdW5jdGlvbiBxKHJlKXtyZS5kb25lP3oocmUudmFsdWUpOmZ1bmN0aW9uIE4oeil7cmV0dXJuIHogaW5zdGFuY2VvZiBIP3o6bmV3IEgoZnVuY3Rpb24oWSl7WSh6KX0pfShyZS52YWx1ZSkudGhlbihGLFcpfXEoKFY9Vi5hcHBseSh4LFV8fFtd''@;'; put 'put ''KSkubmV4dCgpKX0pfSxjPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih4KXtyZXR1cm4geCYmeC5fX2VzTW9kdWxlP3g6e2RlZmF1bHQ6eH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLlNhc2pzSm9iRXhlY3V0b3I9dm9p''@;'; put 'put ''ZCAwO2NvbnN0IHM9YyhoKDUxODk0KSksQT1oKDM2MzEpLHY9aCgxNzM4OCksQz1oKDQ3NjczKSx3PWgoMjkyNjYpLFM9aCgyOTI2NiksTD1oKDkxMTAxKTtqLlNhc2pzSm9iRXhlY3V0b3I9Y2xhc3MgUiBleHRlbmRzIEwuQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKFUsSCxWKXtzdXBl''@;'; put 'put ''cihVLEEuU2VydmVyVHlwZS5TYXNqcyksdGhpcy5qb2JzUGF0aD1ILHRoaXMucmVxdWVzdENsaWVudD1WfWV4ZWN1dGUoVSxILFYsTix6LFk9W10pe3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBGPU4sVz0oMCxTLmlzUmVsYXRpdmVQYXRoKShVKSYmVi5h''@;'; put 'put ''cHBMb2M/Vi5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStVLnJlcGxhY2UoL15cLy8sIiIpOlU7bGV0IHE9YCR7Vi5zZXJ2ZXJVcmx9JHt0aGlzLmpvYnNQYXRofS8/JHsiX3Byb2dyYW09IitXfWAscmU9T2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMoVikpLG1lPSgw''@;'; put 'put ''LHcuZ2V0Rm9ybURhdGEpKCk7aWYoSCl0cnl7bWU9KDAsQy5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtKShtZSxIKX1jYXRjaChrZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyB2LkVycm9yUmVzcG9uc2Uoa2U/Lm1lc3NhZ2Usa2UpKX1mb3IoY29uc3Qga2UgaW4gcmUpcmUuaGFzT3duUHJv''@;'; put 'put ''cGVydHkoa2UpJiZtZS5hcHBlbmQoa2UscmVba2VdKTtjb25zdCBDZT1tZSBpbnN0YW5jZW9mIHMuZGVmYXVsdCYmdHlwZW9mIEZvcm1EYXRhPiJ1Ij9gbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHttZS5nZXRIZWFkZXJzKClbImNvbnRlbnQtdHlwZSJdfWA6Im11bHRpcGFydC9m''@;'; put 'put ''b3JtLWRhdGEiO3JldHVybiBuZXcgUHJvbWlzZSgoa2UscWUpPT57dGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QocSxtZSx6Py5hY2Nlc3NfdG9rZW4sQ2UpLnRoZW4oWD0+eSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoT2JqZWN0LmVudHJpZXMoWC5yZXN1bHQpLmxlbmd0aDwx''@;'; put 'put ''KXRocm93IG5ldyB2LkpvYkV4ZWN1dGlvbkVycm9yKDAsYE5vIHdlYm91dCB3YXMgcmV0dXJuZWQgYnkgam9iICR7V30uICBQbGVhc2UgY2hlY2sgdGhlIFNBUyBsb2cgZm9yIG1vcmUgaW5mby5gLFgubG9nKTtjb25zdHtyZXN1bHQ6Zn09WDtmJiYic3RyaW5nIj09dHlwZW9mIGYmJmYudHJp''@;'; put 'put ''bSgpJiYoWC5yZXN1bHQ9KDAsUy5nZXRWYWxpZEpzb24pKGYpKSx0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChYLFUsVi5kZWJ1Zyk7Y29uc3QgYj0oMCxTLmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzKShYLFkpO2tlKGIpfSkpLmNhdGNoKFg9PnkodGhpcyx2b2lkIDAs''@;'; put 'put ''dm9pZCAwLGZ1bmN0aW9uKigpe1ggaW5zdGFuY2VvZiB2LkpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoWCxVLFYuZGVidWcpLHFlKG5ldyB2LkVycm9yUmVzcG9uc2UoWD8ubWVzc2FnZSxYKSkpLFggaW5zdGFuY2VvZiB2LkxvZ2luUmVxdWly''@;'; put 'put ''ZWRFcnJvcj8oTnx8cWUobmV3IHYuRXJyb3JSZXNwb25zZSgiUmVxdWVzdCBpcyBub3QgYXV0aGVudGljYXRlZC4gTWFrZSBzdXJlIC5lbnYgZmlsZSBleGlzdHMgd2l0aCB2YWxpZCBjcmVkZW50aWFscy4iLFgpKSx0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KCgpPT50aGlzLmV4ZWN1dGUo''@;'; put 'put ''VSxILFYsTix6LFkpLnRoZW4oZj0+e2tlKGYpfSxmPT57cWUoZil9KSksRiYmKHlpZWxkIEYoKSkpOnFlKG5ldyB2LkVycm9yUmVzcG9uc2UoWD8ubWVzc2FnZSxYKSl9KSl9KX0pfX19LDk4MDY3KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5j''@;'; put 'put ''dGlvbihVLEgsVixOKXtyZXR1cm4gbmV3KFZ8fChWPVByb21pc2UpKShmdW5jdGlvbihZLEYpe2Z1bmN0aW9uIFcobWUpe3RyeXtyZShOLm5leHQobWUpKX1jYXRjaChDZSl7RihDZSl9fWZ1bmN0aW9uIHEobWUpe3RyeXtyZShOLnRocm93KG1lKSl9Y2F0Y2goQ2Upe0YoQ2UpfX1mdW5jdGlv''@;'; put 'put ''biByZShtZSl7bWUuZG9uZT9ZKG1lLnZhbHVlKTpmdW5jdGlvbiB6KFkpe3JldHVybiBZIGluc3RhbmNlb2YgVj9ZOm5ldyBWKGZ1bmN0aW9uKEYpe0YoWSl9KX0obWUudmFsdWUpLnRoZW4oVyxxKX1yZSgoTj1OLmFwcGx5KFUsSHx8W10pKS5uZXh0KCkpfSl9LGM9dGhpcyYmdGhpcy5fX2lt''@;'; put 'put ''cG9ydERlZmF1bHR8fGZ1bmN0aW9uKFUpe3JldHVybiBVJiZVLl9fZXNNb2R1bGU/VTp7ZGVmYXVsdDpVfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouV2ViSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IHM9YyhoKDUxODk0KSksQT1oKDM2MzEp''@;'; put 'put ''LHY9aCgxNzM4OCksQz1oKDQ3NjczKSx3PWgoMTAwOTMpLFM9aCgyOTI2NiksTD1oKDkxMTAxKTtmdW5jdGlvbiB4KFUpeygwLFMuaXNOb2RlKSgpP1UuYXBwZW5kKCJfc2FzanNfbm9vcCIsIiIse2ZpbGVuYW1lOiJfc2FzanNfbm9vcC50eHQiLGNvbnRlbnRUeXBlOiJ0ZXh0L3BsYWluIn0p''@;'; put 'put ''OlUuYXBwZW5kKCJfc2FzanNfbm9vcCIsbmV3IEJsb2IoWyIiXSx7dHlwZToidGV4dC9wbGFpbiJ9KSwiX3Nhc2pzX25vb3AudHh0Iil9ai5XZWJKb2JFeGVjdXRvcj1jbGFzcyBSIGV4dGVuZHMgTC5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoSCxWLE4seixZKXtzdXBlcihILFYpLHRo''@;'; put 'put ''aXMuam9ic1BhdGg9Tix0aGlzLnJlcXVlc3RDbGllbnQ9eix0aGlzLnNhc1ZpeWFBcGlDbGllbnQ9WX1leGVjdXRlKEgsVixOLHosWSxGPVtdKXt2YXIgVztyZXR1cm4geSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgcT16LHJlPSgwLFMuaXNSZWxhdGl2ZVBhdGgpKEgp''@;'; put 'put ''JiZOLmFwcExvYz9OLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK0gucmVwbGFjZSgvXlwvLywiIik6SDtsZXQgbWU9YCR7Ti5zZXJ2ZXJVcmx9JHt0aGlzLmpvYnNQYXRofS8/JHsiX3Byb2dyYW09IityZX1gO2lmKE4uc2VydmVyVHlwZT09PUEuU2VydmVyVHlwZS5TYXNWaXlhKXtsZXQg''@;'; put 'put ''Zjt0cnl7Zj15aWVsZCB0aGlzLmdldEpvYlVyaShIKX1jYXRjaChiKXtyZXR1cm4gbmV3IFByb21pc2UoKGssTSk9PnkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2IgaW5zdGFuY2VvZiB2LkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+''@;'; put 'put ''dGhpcy5leGVjdXRlKEgsVixOLHosWSxGKS50aGVuKEI9PntrKEIpfSxCPT57TShCKX0pKSxxJiYoeWllbGQgcSgpKSk6TShuZXcgdi5FcnJvclJlc3BvbnNlKGI/Lm1lc3NhZ2UsYikpfSkpfW1lKz1mLmxlbmd0aD4wPyImX2pvYj0iK2Y6IiIsZi5sZW5ndGg+MCYmKG1lKz0iJl9qb2I9Iitm''@;'; put 'put ''LG1lPW1lLnJlcGxhY2UoIl9wcm9ncmFtPSIsIl9fcHJvZ3JhbT0iKSksbWUrPW51bGwhPT0oVz1OLmNvbnRleHROYW1lKSYmdm9pZCAwIT09VyYmVy50cmltKCk/YCZfY29udGV4dG5hbWU9JHtlbmNvZGVVUklDb21wb25lbnQoTi5jb250ZXh0TmFtZSl9YDoiIiwhMD09PU4ucnVuQXNUYXNr''@;'; put 'put ''JiYobWUrPSImX2V4ZWN1dGlvblRhc2tzPXRydWUiKX1sZXQgQ2U9T2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMoTikpLEllPSgwLFMuZ2V0Rm9ybURhdGEpKCk7Y29uc3Qga2U9ITA9PT1OLnJ1bkFzVGFzaztpZihrZSYmTi5kZWJ1ZyYmTi5zZXJ2ZXJUeXBlPT09QS5T''@;'; put 'put ''ZXJ2ZXJUeXBlLlNhc1ZpeWEmJlsiX2RlYnVnIiwiX29taXRTZXNzaW9uUmVzdWx0cyJdLmZvckVhY2goYj0+e3ZvaWQgMCE9PUNlW2JdJiYobWUrPWAmJHtifT0ke2VuY29kZVVSSUNvbXBvbmVudChDZVtiXSl9YCxkZWxldGUgQ2VbYl0pfSksVil7Y29uc3QgZj1KU09OLnN0cmluZ2lmeShW''@;'; put 'put ''KTtpZihOLnNlcnZlclR5cGU9PT1BLlNlcnZlclR5cGUuU2FzOXx8Zi5sZW5ndGg+NWU1fHxmLmluY2x1ZGVzKCI7IikpdHJ5e0llPSgwLEMuZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybSkoSWUsVil9Y2F0Y2goYil7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyB2LkVycm9yUmVzcG9uc2UoYj8u''@;'; put 'put ''bWVzc2FnZSxiKSl9ZWxzZSB0cnl7Y29uc3R7Zm9ybURhdGE6YixyZXF1ZXN0UGFyYW1zOmt9PSgwLHcuZ2VuZXJhdGVUYWJsZVVwbG9hZEZvcm0pKEllLFYpO0llPWIsQ2U9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LENlKSxrKSxOLnNlcnZlclR5cGU9PT1BLlNlcnZlclR5cGUu''@;'; put 'put ''U2FzVml5YSYma2UmJngoSWUpfWNhdGNoKGIpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgdi5FcnJvclJlc3BvbnNlKGI/Lm1lc3NhZ2UsYikpfX1lbHNlIE4uc2VydmVyVHlwZT09PUEuU2VydmVyVHlwZS5TYXNWaXlhJiZrZSYmeChJZSk7Zm9yKGNvbnN0IGYgaW4gQ2UpQ2UuaGFzT3du''@;'; put 'put ''UHJvcGVydHkoZikmJkllLmFwcGVuZChmLENlW2ZdKTtjb25zdCBxZT1JZSBpbnN0YW5jZW9mIHMuZGVmYXVsdCYmdHlwZW9mIEZvcm1EYXRhPiJ1Ij9gbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHtJZS5nZXRIZWFkZXJzKClbImNvbnRlbnQtdHlwZSJdfWA6Im11bHRpcGFydC9m''@;'; put 'put ''b3JtLWRhdGEiO3JldHVybiBuZXcgUHJvbWlzZSgoZixiKT0+e3RoaXMucmVxdWVzdENsaWVudC5wb3N0KG1lLEllLFk/LmFjY2Vzc190b2tlbixxZSkudGhlbihrPT55KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChrLEgs''@;'; put 'put ''Ti5kZWJ1Zyk7bGV0IE09ay5yZXN1bHQ7aWYoTi5kZWJ1Zylzd2l0Y2godGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIEEuU2VydmVyVHlwZS5TYXNWaXlhOk09bnVsbD09PU4udXNlQ29tcHV0ZUFwaSYmITA9PT1OLnJ1bkFzVGFzaz95aWVsZCgwLFMucGFyc2VTYXNWaXlhTG9nRGVidWdSZXNwb25z''@;'; put 'put ''ZSkoay5yZXN1bHQpOnlpZWxkKDAsUy5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlKShrLnJlc3VsdCx0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zZXJ2ZXJVcmwpO2JyZWFrO2Nhc2UgQS5TZXJ2ZXJUeXBlLlNhczk6TT0ic3RyaW5nIj09dHlwZW9mIGsucmVzdWx0PygwLFMucGFyc2VXZWJv''@;'; put 'put ''dXRSZXNwb25zZSkoay5yZXN1bHQsbWUpOmsucmVzdWx0fWNvbnN0IEI9KDAsUy5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcykoe3Jlc3VsdDpNLGxvZzprLmxvZ30sRik7ZihCKX0pKS5jYXRjaChrPT55KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtrIGluc3RhbmNlb2Yg''@;'; put 'put ''di5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KGssSCxOLmRlYnVnKSxiKG5ldyB2LkVycm9yUmVzcG9uc2Uoaz8ubWVzc2FnZSxrKSkpLGsgaW5zdGFuY2VvZiB2LkxvZ2luUmVxdWlyZWRFcnJvcj8oenx8YihuZXcgdi5FcnJvclJlc3BvbnNl''@;'; put 'put ''KCJSZXF1ZXN0IGlzIG5vdCBhdXRoZW50aWNhdGVkLiBNYWtlIHN1cmUgLmVudiBmaWxlIGV4aXN0cyB3aXRoIHZhbGlkIGNyZWRlbnRpYWxzLiIsaykpLHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoKCk9PnRoaXMuZXhlY3V0ZShILFYsTix6LFksRikudGhlbihNPT57ZihNKX0sTT0+e2Io''@;'; put 'put ''TSl9KSkscSYmKHlpZWxkIHEoKSkpOmIobmV3IHYuRXJyb3JSZXNwb25zZShrPy5tZXNzYWdlLGspKX0pKX0pfSl9Z2V0UmVxdWVzdFBhcmFtcyhIKXtjb25zdCBWPXN1cGVyLmdldFJlcXVlc3RQYXJhbXMoSCk7cmV0dXJuIEguZGVidWcmJkguc2VydmVyVHlwZT09PUEuU2VydmVyVHlwZS5T''@;'; put 'put ''YXNWaXlhJiYhMD09PUgucnVuQXNUYXNrJiYoVi5fZGVidWc9MTI4LGRlbGV0ZSBWLl9vbWl0dGV4dGxvZyksVn1nZXRKb2JVcmkoSCl7cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCF0aGlzLnNhc1ZpeWFBcGlDbGllbnQpcmV0dXJuIiI7bGV0IE4seixWPSIi''@;'; put 'put ''O2lmKCgwLFMuaXNSZWxhdGl2ZVBhdGgpKEgpKXtjb25zdCBGPUguc3BsaXQoIi8iKTtOPUYubGVuZ3RoPjE/RlswXToiIix6PUYubGVuZ3RoPjE/RlsxXToiIn1lbHNle2NvbnN0IEY9SC5zcGxpdCgiLyIpO3o9Ri5wb3AoKXx8IiIsTj1GLmpvaW4oIi8iKX1pZigheil0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIkpvYiBuYW1lIGlzIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtjb25zdCBZPXlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRKb2JzSW5Gb2xkZXIoTik7aWYoWSl7Y29uc3QgRj1ZLmZpbmQoVz0+Vy5uYW1lPT09eiYmImpvYkRlZmluaXRpb24iPT09Vy5jb250ZW50VHlw''@;'; put 'put ''ZSk7RiYmKFY9Ri51cmkpfXJldHVybiBWfSl9fX0sNjEzOTEoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHMsQSx2LEMpe3ZvaWQgMD09PUMmJihDPXYpO3ZhciB3PU9iamVjdC5nZXRPd25Qcm9w''@;'; put 'put ''ZXJ0eURlc2NyaXB0b3IoQSx2KTsoIXd8fCgiZ2V0ImluIHc/IUEuX19lc01vZHVsZTp3LndyaXRhYmxlfHx3LmNvbmZpZ3VyYWJsZSkpJiYodz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQVt2XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocyxDLHcpfTpmdW5jdGlv''@;'; put 'put ''bihzLEEsdixDKXt2b2lkIDA9PT1DJiYoQz12KSxzW0NdPUFbdl19KSxjPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihzLEEpe2Zvcih2YXIgdiBpbiBzKSJkZWZhdWx0IiE9PXYmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQSx2KSYmeShBLHMsdil9''@;'; put 'put ''O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxjKGgoMTQxMjYpLGopLGMoaCgxMzg3MSksaiksYyhoKDkxMTMxKSxqKSxjKGgoOTExMDEpLGopLGMoaCg1NDk0MSksaiksYyhoKDk4MDY3KSxqKSxjKGgoMjg5OTUpLGopfSwyODgxNihmZSxqLGgpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgeT1oKDY1NjA2KSxjPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihXLHEscmUsbWUpe3ZvaWQgMD09PW1lJiYobWU9cmUpO3ZhciBDZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHEscmUpOyghQ2V8fCgi''@;'; put 'put ''Z2V0ImluIENlPyFxLl9fZXNNb2R1bGU6Q2Uud3JpdGFibGV8fENlLmNvbmZpZ3VyYWJsZSkpJiYoQ2U9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHFbcmVdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXLG1lLENlKX06ZnVuY3Rpb24oVyxxLHJlLG1lKXt2b2lkIDA9''@;'; put 'put ''PT1tZSYmKG1lPXJlKSxXW21lXT1xW3JlXX0pLHM9dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKFcscSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFcsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnF9KX06ZnVuY3Rpb24oVyxxKXtX''@;'; put 'put ''LmRlZmF1bHQ9cX0pLEE9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKFcpe2lmKFcmJlcuX19lc01vZHVsZSlyZXR1cm4gVzt2YXIgcT17fTtpZihudWxsIT1XKWZvcih2YXIgcmUgaW4gVykiZGVmYXVsdCIhPT1yZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5j''@;'; put 'put ''YWxsKFcscmUpJiZjKHEsVyxyZSk7cmV0dXJuIHMocSxXKSxxfSx2PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihXLHEscmUsbWUpe3JldHVybiBuZXcocmV8fChyZT1Qcm9taXNlKSkoZnVuY3Rpb24oSWUsa2Upe2Z1bmN0aW9uIHFlKGIpe3RyeXtmKG1lLm5leHQoYikpfWNhdGNo''@;'; put 'put ''KGspe2tlKGspfX1mdW5jdGlvbiBYKGIpe3RyeXtmKG1lLnRocm93KGIpKX1jYXRjaChrKXtrZShrKX19ZnVuY3Rpb24gZihiKXtiLmRvbmU/SWUoYi52YWx1ZSk6ZnVuY3Rpb24gQ2UoSWUpe3JldHVybiBJZSBpbnN0YW5jZW9mIHJlP0llOm5ldyByZShmdW5jdGlvbihrZSl7a2UoSWUpfSl9''@;'; put 'put ''KGIudmFsdWUpLnRoZW4ocWUsWCl9ZigobWU9bWUuYXBwbHkoVyxxfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGoudGhyb3dJZkVycm9yPWouUmVxdWVzdENsaWVudD12b2lkIDA7Y29uc3QgQz1BKGgoODkyNTEpKSx3''@;'; put 'put ''PWgoNDg3OSksUz1oKDE3Mzg4KSxMPWgoNjc2NDApLFI9aCg2MzQwKSx4PWgoOTQ0NjApLFU9aCgyOTI2NiksSD1oKDI0MDAxKSxWPWgoNDA1MzcpO2ouUmVxdWVzdENsaWVudD1jbGFzcyB6e2NvbnN0cnVjdG9yKHEscmUsbWUsQ2Upe3RoaXMuYmFzZVVybD1xLHRoaXMucmVxdWVzdHM9W10s''@;'; put 'put ''dGhpcy5yZXF1ZXN0c0xpbWl0PTEwLHRoaXMudmVyYm9zZU1vZGU9ITEsdGhpcy5jc3JmVG9rZW49e2hlYWRlck5hbWU6IiIsdmFsdWU6IiJ9LHRoaXMuaXNSZWNvdmVyaW5nRnJvbU5ldHdvcmtFcnJvcj0hMSx0aGlzLmdldFJlcXVlc3RzPSgpPT50aGlzLnJlcXVlc3RzLHRoaXMuY2xlYXJS''@;'; put 'put ''ZXF1ZXN0cz0oKT0+e3RoaXMucmVxdWVzdHM9W119LHRoaXMuYXV0aG9yaXplPUllPT52KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQga2U9bnVsbDtjb25zdCBxZT17fSxYPUllLnNwbGl0KCI8Ym9keT4iKVsxXS5zcGxpdCgiPC9ib2R5PiIpWzBdLGY9ZG9jdW1lbnQuY3Jl''@;'; put 'put ''YXRlRWxlbWVudCgiZGl2Iik7Zi5pbm5lckhUTUw9WDtjb25zdCBiPWYucXVlcnlTZWxlY3RvcigiI2FwcGxpY2F0aW9uX2F1dGhvcml6YXRpb24iKTtrZT1iP3RoaXMuYmFzZVVybCtiLmdldEF0dHJpYnV0ZSgiYWN0aW9uIik6bnVsbDtjb25zdCBrPWI/LnF1ZXJ5U2VsZWN0b3JBbGwoImlu''@;'; put 'put ''cHV0Iik7Zm9yKGNvbnN0IEsgb2YgaykidXNlcl9vYXV0aF9hcHByb3ZhbCI9PT1LLm5hbWUmJihLLnZhbHVlPSJ0cnVlIikscWVbSy5uYW1lXT1LLnZhbHVlO2NvbnN0IE09T2JqZWN0LmtleXMocWUpLmZpbmQoSz0+Sz8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygiY3NyZiIpKTtNJiYodGhp''@;'; put 'put ''cy5jc3JmVG9rZW4udmFsdWU9cWVbTV0sdGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZT10aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lfHwieC1jc3JmLXRva2VuIik7Y29uc3QgQj1uZXcgRm9ybURhdGE7Zm9yKGNvbnN0IEsgaW4gcWUpcWUuaGFzT3duUHJvcGVydHkoSykmJkIuYXBwZW5kKEss''@;'; put 'put ''cWVbS10pO2lmKCFrZSl0aHJvdyBuZXcgRXJyb3IoIkF1dGggRm9ybSBVUkwgaXMgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIHlpZWxkIHRoaXMuaHR0cENsaWVudC5wb3N0KGtlLEIse3Jlc3BvbnNlVHlwZToidGV4dCIsaGVhZGVyczp7QWNjZXB0OiIqLyoiLCJDb250ZW50LVR5cGUi''@;'; put 'put ''OiJ0ZXh0L3BsYWluIn19KS50aGVuKEs9PksuZGF0YSkuY2F0Y2goSz0+eyh0eXBlb2YgeTwidSImJnkubG9nZ2VyfHxjb25zb2xlKS5lcnJvcihLKX0pfSksdGhpcy5wcmV0dGlmeVN0cmluZz1JZT0+KDAsVi5pbnNwZWN0KShJZSx7Y29sb3JzOiJibGVhY2hlZCIhPT10aGlzLnZlcmJvc2VN''@;'; put 'put ''b2RlfSksdGhpcy5wYXJzZUludGVyY2VwdGVkQm9keT1JZT0+e2lmKCFJZSlyZXR1cm4iIjtsZXQga2U7aWYoInN0cmluZyI9PXR5cGVvZiBJZSl0cnl7a2U9SlNPTi5wYXJzZShJZSl9Y2F0Y2h7a2U9SWV9ZWxzZSBrZT1JZTtjb25zdCBxZT10aGlzLnByZXR0aWZ5U3RyaW5nKGtlKS5zcGxp''@;'; put 'put ''dCgiXG4iKTtyZXR1cm4gcWUubGVuZ3RoPjUxJiYocWUuc3BsaWNlKDUwKSxxZS5wdXNoKCIuLi4iKSkscWUuam9pbigiXG4iKX0sdGhpcy5oYW5kbGVBeGlvc1Jlc3BvbnNlPUllPT57dmFyIGtlLHFlLFgsZjtjb25zdHtzdGF0dXM6Yixjb25maWc6ayxyZXF1ZXN0Ok0sZGF0YTpCfT1JZSxL''@;'; put 'put ''PW51bGwhPT0oa2U9TT8uX2hlYWRlcikmJnZvaWQgMCE9PWtlP2tlOiJOb3QgcHJvdmlkZWRcbiIsRz1udWxsIT09KFg9bnVsbD09PShxZT1NPy5yZXMpfHx2b2lkIDA9PT1xZT92b2lkIDA6cWUucmF3SGVhZGVycykmJnZvaWQgMCE9PVg/WDpbIk5vdCBwcm92aWRlZCJdLEQ9dGhpcy5mb3Jt''@;'; put 'put ''YXRIZWFkZXJzKEcpLHA9dGhpcy5wYXJzZUludGVyY2VwdGVkQm9keShCKTtyZXR1cm4gbnVsbD09PShmPXkubG9nZ2VyKXx8dm9pZCAwPT09Znx8Zi5pbmZvKGBIVFRQIFJlcXVlc3QgKGZpcnN0IDUwIGxpbmVzKTpcbiR7S30ke3RoaXMucGFyc2VJbnRlcmNlcHRlZEJvZHkoay5kYXRhKX1c''@;'; put 'put ''blxuSFRUUCBSZXNwb25zZSBDb2RlOiAke3RoaXMucHJldHRpZnlTdHJpbmcoYil9XG5cbkhUVFAgUmVzcG9uc2UgKGZpcnN0IDUwIGxpbmVzKTpcbiR7RH0ke3A/YFxuXG4ke3B9YDoiIn1cbmApLEllfSx0aGlzLmhhbmRsZUF4aW9zRXJyb3I9SWU9Pnt2YXIga2UscWUsWCxmLGIsaztjb25z''@;'; put 'put ''dCBNPSJOb3QgcHJvdmlkZWQiLHtyZXNwb25zZTpCLHJlcXVlc3Q6Syxjb25maWc6R309SWU7bGV0IEQ9e19oZWFkZXI6YCR7TX1cbmAscmVzOntyYXdIZWFkZXJzOltNXX19O0smJihEPXtfaGVhZGVyOm51bGwhPT0oWD1udWxsIT09KGtlPUsuX2hlYWRlcikmJnZvaWQgMCE9PWtlP2tlOm51''@;'; put 'put ''bGw9PT0ocWU9Sy5fY3VycmVudFJlcXVlc3QpfHx2b2lkIDA9PT1xZT92b2lkIDA6cWUuX2hlYWRlcikmJnZvaWQgMCE9PVg/WDpNLHJlczp7cmF3SGVhZGVyczpudWxsIT09KGI9bnVsbD09PShmPUsucmVzKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5yYXdIZWFkZXJzKSYmdm9pZCAwIT09Yj9i''@;'; put 'put ''OltNXX19KTtsZXQgcD1CfHx7c3RhdHVzOk0scmVxdWVzdDpELGNvbmZpZzpHfHx7ZGF0YTpNLGhlYWRlcnM6e319LGRhdGE6TX07Y29uc3R7c3RhdHVzOkkscmVxdWVzdDp1ZSxkYXRhOm5lfT1wLHtfaGVhZGVyOl9lLHJlczpQZX09dWUsb3Q9dGhpcy5mb3JtYXRIZWFkZXJzKFBlLnJhd0hl''@;'; put 'put ''YWRlcnMpLGx0PXRoaXMucGFyc2VJbnRlcmNlcHRlZEJvZHkobmUpO3JldHVybiBudWxsPT09KGs9eS5sb2dnZXIpfHx2b2lkIDA9PT1rfHxrLmluZm8oYEhUVFAgUmVxdWVzdCAoZmlyc3QgNTAgbGluZXMpOlxuJHtfZX0ke3RoaXMucGFyc2VJbnRlcmNlcHRlZEJvZHkoRz8uZGF0YSl9XG5c''@;'; put 'put ''bkhUVFAgUmVzcG9uc2UgQ29kZTogJHt0aGlzLnByZXR0aWZ5U3RyaW5nKEkpfVxuXG5IVFRQIFJlc3BvbnNlIChmaXJzdCA1MCBsaW5lcyk6XG4ke290fSR7bHQ/YFxuXG4ke2x0fWA6IiJ9XG5gKSxJZX0sdGhpcy5mb3JtYXRIZWFkZXJzPUllPT5JZS5yZWR1Y2UoKGtlLHFlLFgpPT5rZSso''@;'; put 'put ''WCUyPT0wP2AkezA9PT1YPyIiOiJcbiJ9JHtxZX1gOmA6ICR7cWV9YCksIiIpLHRoaXMuc2V0VmVyYm9zZU1vZGU9SWU9Pnt0aGlzLnZlcmJvc2VNb2RlPUllLHRoaXMudmVyYm9zZU1vZGU/dGhpcy5lbmFibGVWZXJib3NlTW9kZSgpOnRoaXMuZGlzYWJsZVZlcmJvc2VNb2RlKCl9LHRoaXMu''@;'; put 'put ''ZW5hYmxlVmVyYm9zZU1vZGU9KEllPXRoaXMuaGFuZGxlQXhpb3NSZXNwb25zZSxrZT10aGlzLmhhbmRsZUF4aW9zRXJyb3IpPT57dGhpcy5odHRwSW50ZXJjZXB0b3I9dGhpcy5odHRwQ2xpZW50LmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoSWUsa2UpfSx0aGlzLmRpc2FibGVWZXJib3Nl''@;'; put 'put ''TW9kZT0oKT0+e3RoaXMuaHR0cEludGVyY2VwdG9yJiZ0aGlzLmh0dHBDbGllbnQuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmVqZWN0KHRoaXMuaHR0cEludGVyY2VwdG9yKX0sdGhpcy5nZXRIZWFkZXJzPShJZSxrZSk9Pntjb25zdCBxZT17fTtyZXR1cm4iYXBwbGljYXRpb24veC13d3ctZm9y''@;'; put 'put ''bS11cmxlbmNvZGVkIiE9PWtlJiYocWVbIkNvbnRlbnQtVHlwZSJdPWtlKSxxZS5BY2NlcHQ9ImFwcGxpY2F0aW9uL2pzb24iPT09a2U/ImFwcGxpY2F0aW9uL2pzb24iOiIqLyoiLEllJiYocWUuQXV0aG9yaXphdGlvbj1gQmVhcmVyICR7SWV9YCksdGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFt''@;'; put 'put ''ZSYmdGhpcy5jc3JmVG9rZW4udmFsdWUmJihxZVt0aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lXT10aGlzLmNzcmZUb2tlbi52YWx1ZSkscWV9LHRoaXMucGFyc2VBbmRTZXRGaWxlVXBsb2FkQ3NyZlRva2VuPUllPT57Y29uc3Qga2U9dGhpcy5wYXJzZUNzcmZUb2tlbihJZSk7a2UmJih0aGlz''@;'; put 'put ''LmZpbGVVcGxvYWRDc3JmVG9rZW49a2UpfSx0aGlzLnBhcnNlQW5kU2V0Q3NyZlRva2VuPUllPT57Y29uc3Qga2U9dGhpcy5wYXJzZUNzcmZUb2tlbihJZSk7a2UmJih0aGlzLmNzcmZUb2tlbj1rZSl9LHRoaXMucGFyc2VDc3JmVG9rZW49SWU9Pnt2YXIga2U7Y29uc3QgcWU9bnVsbD09PShr''@;'; put 'put ''ZT1JZS5oZWFkZXJzWyJ4LWNzcmYtaGVhZGVyIl0pfHx2b2lkIDA9PT1rZT92b2lkIDA6a2UudG9Mb3dlckNhc2UoKTtpZihxZSlyZXR1cm57aGVhZGVyTmFtZTpxZSx2YWx1ZTpJZS5oZWFkZXJzW3FlXXx8IiJ9fSx0aGlzLmhhbmRsZUVycm9yPShJZSxrZSxxZT0hMSk9PnYodGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKigpe3ZhciBYO2NvbnN0IGY9SWUucmVzcG9uc2U7aWYoSWUgaW5zdGFuY2VvZiBTLkF1dGhvcml6ZUVycm9yKXtjb25zdCBiPXlpZWxkIHRoaXMuaHR0cENsaWVudC5nZXQoSWUuY29uZmlybVVybCx7cmVzcG9uc2VUeXBlOiJ0ZXh0IixoZWFkZXJzOnsiQ29u''@;'; put 'put ''dGVudC1UeXBlIjoidGV4dC9wbGFpbiIsQWNjZXB0OiIqLyoifX0pLmNhdGNoKGs9Pnt0aHJvdygwLFIucHJlZml4TWVzc2FnZSkoaywiRXJyb3Igd2hpbGUgZ2V0dGluZyBlcnJvciBjb25maXJtVXJsLiAiKX0pO3JldHVybigwLHcuaXNBdXRob3JpemVGb3JtUmVxdWlyZWQpKGI/LmRhdGEp''@;'; put 'put ''JiYoeWllbGQgdGhpcy5hdXRob3JpemUoYi5kYXRhKS5jYXRjaChrPT57dGhyb3coMCxSLnByZWZpeE1lc3NhZ2UpKGssIkVycm9yIHdoaWxlIGF1dGhvcml6aW5nIHJlcXVlc3QuICIpfSkpLHlpZWxkIGtlKCkuY2F0Y2goaz0+e3Rocm93KDAsUi5wcmVmaXhNZXNzYWdlKShrLCJFcnJvciB3''@;'; put 'put ''aGlsZSBleGVjdXRpbmcgY2FsbGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSl9aWYoSWUgaW5zdGFuY2VvZiBTLkxvZ2luUmVxdWlyZWRFcnJvcil0aHJvdyB0aGlzLmNsZWFyQ3NyZlRva2VucygpLEllO2lmKEllIGluc3RhbmNlb2YgSC5JbnZhbGlkU0FTanNDc3JmRXJyb3IpcmV0dXJuIHlp''@;'; put 'put ''ZWxkIHRoaXMuaHR0cENsaWVudC5nZXQoIi8iLHt3aXRoWFNSRlRva2VuOiEwfSkudGhlbihiPT57dmFyIGs7Y29uc3QgTT1udWxsPT09KGs9LzxzY3JpcHQ+ZG9jdW1lbnQuY29va2llID0gJyhYU1JGLVRPS0VOPS4qOyBNYXgtQWdlPTg2NDAwOyBTYW1lU2l0ZT1TdHJpY3Q7IFBhdGg9XC87''@;'; put 'put ''KSc8XC9zY3JpcHQ+Ly5leGVjKGIuZGF0YSkpfHx2b2lkIDA9PT1rP3ZvaWQgMDprWzFdO00mJihkb2N1bWVudC5jb29raWU9TSl9KS5jYXRjaChiPT57dGhyb3coMCxSLnByZWZpeE1lc3NhZ2UpKGIsIkVycm9yIHdoaWxlIHJlLWZldGNoaW5nIENTUkYgdG9rZW4uIil9KSx5aWVsZCBrZSgp''@;'; put 'put ''LmNhdGNoKGI9Pnt0aHJvdygwLFIucHJlZml4TWVzc2FnZSkoYiwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRsZUVycm9yLiAiKX0pO2lmKDQwMz09PWY/LnN0YXR1c3x8NDQ5PT09Zj8uc3RhdHVzKXtpZih0aGlzLnBhcnNlQW5kU2V0Q3NyZlRva2VuKGYpLHRoaXMu''@;'; put 'put ''Y3NyZlRva2VuLmhlYWRlck5hbWUmJnRoaXMuY3NyZlRva2VuLnZhbHVlKXJldHVybiB5aWVsZCBrZSgpLmNhdGNoKGI9Pnt0aHJvdygwLFIucHJlZml4TWVzc2FnZSkoYiwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRsZUVycm9yLiAiKX0pO3Rocm93IEllfWlmKDQw''@;'; put 'put ''ND09PWY/LnN0YXR1cyl0aHJvdyBuZXcgUy5Ob3RGb3VuZEVycm9yKGYuY29uZmlnLnVybCk7aWYoNTAyIT09Zj8uc3RhdHVzKXtpZihJZS5pc0F4aW9zRXJyb3ImJiJVTkFCTEVfVE9fVkVSSUZZX0xFQUZfU0lHTkFUVVJFIj09PUllLmNvZGUpdGhyb3cgbmV3IFMuQ2VydGlmaWNhdGVFcnJv''@;'; put 'put ''cihJZS5tZXNzYWdlKTtpZihJZS5pc0F4aW9zRXJyb3ImJiFmJiYiRVJSX05FVFdPUksiPT09SWUuY29kZSYmIXRoaXMuaXNSZWNvdmVyaW5nRnJvbU5ldHdvcmtFcnJvcil7dGhpcy5yZXNldEluTWVtb3J5QXV0aFN0YXRlKCksdGhpcy5pc1JlY292ZXJpbmdGcm9tTmV0d29ya0Vycm9yPSEw''@;'; put 'put ''O3RyeXtjb25zdCBiPXlpZWxkIHRoaXMuaHR0cENsaWVudC5nZXQoIi8iLHt3aXRoWFNSRlRva2VuOiEwfSkuY2F0Y2goaz0+ay5yZXNwb25zZSk7aWYoYj8uZGF0YSl7Y29uc3Qgaz1udWxsPT09KFg9LzxzY3JpcHQ+ZG9jdW1lbnQuY29va2llID0gJyhYU1JGLVRPS0VOPS4qOyBNYXgtQWdl''@;'; put 'put ''PTg2NDAwOyBTYW1lU2l0ZT1TdHJpY3Q7IFBhdGg9XC87KSc8XC9zY3JpcHQ+Ly5leGVjKGIuZGF0YSkpfHx2b2lkIDA9PT1YP3ZvaWQgMDpYWzFdO2smJnR5cGVvZiBkb2N1bWVudDwidSImJihkb2N1bWVudC5jb29raWU9ayksdGhpcy5wYXJzZUFuZFNldENzcmZUb2tlbihiKX1yZXR1cm4g''@;'; put 'put ''eWllbGQga2UoKX1jYXRjaHt0aHJvdyBuZXcgUy5Mb2dpblJlcXVpcmVkRXJyb3J9ZmluYWxseXt0aGlzLmlzUmVjb3ZlcmluZ0Zyb21OZXR3b3JrRXJyb3I9ITF9fXRocm93IEllLm1lc3NhZ2U/SWU6KDAsUi5wcmVmaXhNZXNzYWdlKShJZSwiRXJyb3Igd2hpbGUgaGFuZGxpbmcgZXJyb3Iu''@;'; put 'put ''ICIpfWlmKHFlKXRocm93IG5ldyBTLkludGVybmFsU2VydmVyRXJyb3J9KSx0aGlzLmNyZWF0ZUh0dHBDbGllbnQocSxyZSksbWUmJih0aGlzLnJlcXVlc3RzTGltaXQ9bWUpLENlJiYodGhpcy5zZXRWZXJib3NlTW9kZShDZSksdGhpcy5lbmFibGVWZXJib3NlTW9kZSgpKX1zZXRDb25maWco''@;'; put 'put ''cSxyZSl7dGhpcy5jcmVhdGVIdHRwQ2xpZW50KHEscmUpfXNhdmVMb2NhbFN0b3JhZ2VUb2tlbihxLHJlKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiYWNjZXNzVG9rZW4iLHEpLGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJyZWZyZXNoVG9rZW4iLHJlKX1nZXRDc3JmVG9rZW4ocT0iZ2VuZXJhbCIp''@;'; put 'put ''e3JldHVybiJmaWxlIj09PXE/dGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuOnRoaXMuY3NyZlRva2VufWNsZWFyQ3NyZlRva2Vucygpe3RoaXMuY3NyZlRva2VuPXtoZWFkZXJOYW1lOiIiLHZhbHVlOiIifSx0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW49e2hlYWRlck5hbWU6IiIsdmFsdWU6IiJ9''@;'; put 'put ''fWNsZWFyTG9jYWxTdG9yYWdlVG9rZW5zKCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImFjY2Vzc1Rva2VuIiwiIiksbG9jYWxTdG9yYWdlLnNldEl0ZW0oInJlZnJlc2hUb2tlbiIsIiIpfXJlc2V0SW5NZW1vcnlBdXRoU3RhdGUoKXt0aGlzLmNsZWFyQ3NyZlRva2VucygpLHR5cGVvZiBsb2Nh''@;'; put 'put ''bFN0b3JhZ2U8InUiJiZ0aGlzLmNsZWFyTG9jYWxTdG9yYWdlVG9rZW5zKCksdHlwZW9mIGRvY3VtZW50PCJ1IiYmdGhpcy5jbGVhckFsbENvb2tpZXMoKX1jbGVhckFsbENvb2tpZXMoKXtjb25zdCBxPWRvY3VtZW50LmNvb2tpZS5zcGxpdCgiOyIpO2Zvcihjb25zdCByZSBvZiBxKXtjb25z''@;'; put 'put ''dCBtZT1yZS5zcGxpdCgiPSIpWzBdLnRyaW0oKTttZSYmKGRvY3VtZW50LmNvb2tpZT1gJHttZX09OyBNYXgtQWdlPTA7IFBhdGg9LztgKX19Z2V0QmFzZVVybCgpe3JldHVybiB0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuYmFzZVVSTHx8IiJ9YXBwZW5kUmVxdWVzdChxLHJlLG1lKXtsZXQg''@;'; put 'put ''Q2U9IiIsSWU9IiIsa2U9bnVsbDttZSYmKHE/LmxvZz8oQ2U9KDAsVS5wYXJzZVNvdXJjZUNvZGUpKHEubG9nKSxJZT0oMCxVLnBhcnNlR2VuZXJhdGVkQ29kZSkocS5sb2cpLGtlPXE/LnJlc3VsdD9xLnJlc3VsdC5XT1JLOnEubG9nKTpxPy5yZXN1bHQmJigic3RyaW5nIj09dHlwZW9mIHEu''@;'; put 'put ''cmVzdWx0JiYoQ2U9KDAsVS5wYXJzZVNvdXJjZUNvZGUpKHEucmVzdWx0KSxJZT0oMCxVLnBhcnNlR2VuZXJhdGVkQ29kZSkocS5yZXN1bHQpKSxrZT1xLnJlc3VsdC5XT1JLKSk7Y29uc3QgcWU9InN0cmluZyI9PXR5cGVvZiBxPy5yZXN1bHQ/cT8ucmVzdWx0OkpTT04uc3RyaW5naWZ5KHE/''@;'; put 'put ''LnJlc3VsdCxudWxsLDIpO3RoaXMucmVxdWVzdHMucHVzaCh7bG9nRmlsZTpxPy5sb2d8fHFlfHxxLHNlcnZpY2VMaW5rOnJlLHRpbWVzdGFtcDpuZXcgRGF0ZSxzb3VyY2VDb2RlOkNlLGdlbmVyYXRlZENvZGU6SWUsU0FTV09SSzprZX0pLHRoaXMucmVxdWVzdHMubGVuZ3RoPnRoaXMucmVx''@;'; put 'put ''dWVzdHNMaW1pdCYmdGhpcy5yZXF1ZXN0cy5zcGxpY2UoMCwxKX1nZXQocSxyZSxtZT0iYXBwbGljYXRpb24vanNvbiIsQ2U9e30sSWU9ITEpe3JldHVybiB2KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBxZT17aGVhZGVyczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3Np''@;'; put 'put ''Z24oe30sdGhpcy5nZXRIZWFkZXJzKHJlLG1lKSksQ2UpLHJlc3BvbnNlVHlwZToidGV4dC9wbGFpbiI9PT1tZT8idGV4dCI6Impzb24iLHdpdGhYU1JGVG9rZW46ITB9O3JldHVybiJ0ZXh0L3BsYWluIj09PW1lJiYocWUudHJhbnNmb3JtUmVzcG9uc2U9dm9pZCAwKSx0aGlzLmh0dHBDbGll''@;'; put 'put ''bnQuZ2V0KHEscWUpLnRoZW4oWD0+KCgwLGoudGhyb3dJZkVycm9yKShYKSx0aGlzLnBhcnNlUmVzcG9uc2UoWCkpKS5jYXRjaChYPT52KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihYLCgpPT50aGlzLmdldChxLHJlLG1lLENl''@;'; put 'put ''KS5jYXRjaChmPT57dGhyb3coMCxSLnByZWZpeE1lc3NhZ2UpKGYsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBoYW5kbGUgZXJyb3IgY2FsbGJhY2suICIpfSksSWUpfSkpfSl9cG9zdChxLHJlLG1lLENlPSJhcHBsaWNhdGlvbi9qc29uIixJZT17fSxrZT17fSl7cmV0dXJuIHYodGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IHFlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMobWUsQ2UpKSxJZSk7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0KHEscmUsT2JqZWN0LmFzc2lnbih7aGVhZGVyczpxZSx3aXRoWFNSRlRva2VuOiEw''@;'; put 'put ''fSxrZSkpLnRoZW4oWD0+KCgwLGoudGhyb3dJZkVycm9yKShYKSx0aGlzLnBhcnNlUmVzcG9uc2UoWCkpKS5jYXRjaChYPT52KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihYLCgpPT50aGlzLnBvc3QocSxyZSxtZSxDZSxJZSkp''@;'; put 'put ''fSkpfSl9cHV0KHEscmUsbWUsQ2U9e30pe3JldHVybiB2KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBJZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRIZWFkZXJzKG1lLCJhcHBsaWNhdGlvbi9qc29uIikpLENlKTtyZXR1cm4gdGhpcy5odHRw''@;'; put 'put ''Q2xpZW50LnB1dChxLHJlLHtoZWFkZXJzOkllLHdpdGhYU1JGVG9rZW46ITB9KS50aGVuKGtlPT4oKDAsai50aHJvd0lmRXJyb3IpKGtlKSx0aGlzLnBhcnNlUmVzcG9uc2Uoa2UpKSkuY2F0Y2goa2U9PnYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlz''@;'; put 'put ''LmhhbmRsZUVycm9yKGtlLCgpPT50aGlzLnB1dChxLHJlLG1lLENlKSl9KSl9KX1kZWxldGUocSxyZSl7cmV0dXJuIHYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IG1lPXRoaXMuZ2V0SGVhZGVycyhyZSwiYXBwbGljYXRpb24vanNvbiIpO3JldHVybiB0aGlzLmh0dHBD''@;'; put 'put ''bGllbnQuZGVsZXRlKHEse2hlYWRlcnM6bWUsd2l0aFhTUkZUb2tlbjohMH0pLnRoZW4oQ2U9PigoMCxqLnRocm93SWZFcnJvcikoQ2UpLHRoaXMucGFyc2VSZXNwb25zZShDZSkpKS5jYXRjaChDZT0+dih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMu''@;'; put 'put ''aGFuZGxlRXJyb3IoQ2UsKCk9PnRoaXMuZGVsZXRlKHEscmUpKX0pKX0pfXBhdGNoKHEscmU9e30sbWUsQ2U9e30pe3JldHVybiB2KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBJZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRIZWFkZXJzKG1l''@;'; put 'put ''LCJhcHBsaWNhdGlvbi9qc29uIikpLENlKTtyZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBhdGNoKHEscmUse2hlYWRlcnM6SWUsd2l0aFhTUkZUb2tlbjohMH0pLnRoZW4oa2U9PigoMCxqLnRocm93SWZFcnJvcikoa2UpLHRoaXMucGFyc2VSZXNwb25zZShrZSkpKS5jYXRjaChrZT0+dih0aGlz''@;'; put 'put ''LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3Ioa2UsKCk9PnRoaXMucGF0Y2gocSxyZSxtZSkpfSkpfSl9dXBsb2FkRmlsZShxLHJlLG1lKXt2YXIgQ2U7cmV0dXJuIHYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEll''@;'; put 'put ''PXRoaXMuZ2V0SGVhZGVycyhtZSwiYXBwbGljYXRpb24vanNvbiIpO251bGwhPT0oQ2U9dGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuKSYmdm9pZCAwIT09Q2UmJkNlLnZhbHVlJiYoSWVbdGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuLmhlYWRlck5hbWVdPXRoaXMuZmlsZVVwbG9hZENzcmZUb2tl''@;'; put 'put ''bi52YWx1ZSk7dHJ5e2NvbnN0IGtlPXlpZWxkIHRoaXMuaHR0cENsaWVudC5wb3N0KHEscmUse2hlYWRlcnM6SWUsdHJhbnNmb3JtUmVxdWVzdDpxZT0+cWV9KTtyZXR1cm57cmVzdWx0OmtlLmRhdGEsZXRhZzprZS5oZWFkZXJzLmV0YWd9fWNhdGNoKGtlKXtjb25zdCBxZT1rZS5yZXNwb25z''@;'; put 'put ''ZTtpZig0MDM9PT1xZT8uc3RhdHVzfHw0NDk9PT1xZT8uc3RhdHVzKXtpZih0aGlzLnBhcnNlQW5kU2V0RmlsZVVwbG9hZENzcmZUb2tlbihxZSksdGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuKXJldHVybiB0aGlzLnVwbG9hZEZpbGUocSxyZSxtZSk7dGhyb3cga2V9dGhyb3cga2V9fSl9cGFy''@;'; put 'put ''c2VSZXNwb25zZShxKXtjb25zdCByZT1xPy5oZWFkZXJzP3EuaGVhZGVycy5ldGFnOiIiO2xldCBtZSxDZT0hMTt0cnl7bWU9InN0cmluZyI9PXR5cGVvZiBxLmRhdGE/SlNPTi5wYXJzZShxLmRhdGEpOnEuZGF0YX1jYXRjaHt0cnl7bWU9SlNPTi5wYXJzZSgoMCxMLnBhcnNlV2Vib3V0UmVz''@;'; put 'put ''cG9uc2UpKHEuZGF0YSkpfWNhdGNoe21lPXEuZGF0YX1DZT0hMH1sZXQgSWU9e3Jlc3VsdDptZSxldGFnOnJlLHN0YXR1czpxLnN0YXR1c307cmV0dXJuIENlJiYoSWUubG9nPXEuZGF0YSksSWV9Y3JlYXRlSHR0cENsaWVudChxLHJlKXtjb25zdCBtZT1yZT9uZXcgQy5BZ2VudChyZSk6dm9p''@;'; put 'put ''ZCAwO3RoaXMuaHR0cENsaWVudD0oMCxVLmNyZWF0ZUF4aW9zSW5zdGFuY2UpKHEsbWUpLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy52YWxpZGF0ZVN0YXR1cz1DZT0+Q2U+PTIwMCYmQ2U8PTQwMX19LGoudGhyb3dJZkVycm9yPVc9Pnt2YXIgcSxyZSxtZSxDZSxJZSxrZSxxZTtzd2l0Y2go''@;'; put 'put ''Vy5zdGF0dXMpe2Nhc2UgNDAwOmlmKCJvYmplY3QiPT10eXBlb2YgVy5kYXRhJiYiaW52YWxpZF9ncmFudCI9PT1XLmRhdGEuZXJyb3IpdGhyb3cgbmV3IFMuTG9naW5SZXF1aXJlZEVycm9yKFcuZGF0YSk7aWYoInN0cmluZyI9PXR5cGVvZiBXLmRhdGEmJiJpbnZhbGlkIGNzcmYgdG9rZW4h''@;'; put 'put ''Ij09PVcuZGF0YS50b0xvd2VyQ2FzZSgpKXRocm93IG5ldyBILkludmFsaWRTQVNqc0NzcmZFcnJvcjticmVhaztjYXNlIDQwMTp0aHJvdyJvYmplY3QiPT10eXBlb2YgVy5kYXRhP25ldyBTLkxvZ2luUmVxdWlyZWRFcnJvcihXLmRhdGEpOm5ldyBTLkxvZ2luUmVxdWlyZWRFcnJvcn1pZihu''@;'; put 'put ''dWxsIT09KHJlPW51bGw9PT0ocT1XLmRhdGEpfHx2b2lkIDA9PT1xP3ZvaWQgMDpxLmVudGl0eUlEKSYmdm9pZCAwIT09cmUmJnJlLmluY2x1ZGVzKCJsb2dpbiIpKXRocm93IG5ldyBTLkxvZ2luUmVxdWlyZWRFcnJvcjtpZigic3RyaW5nIj09dHlwZW9mIFcuZGF0YSYmKDAsdy5pc0F1dGhv''@;'; put 'put ''cml6ZUZvcm1SZXF1aXJlZCkoVy5kYXRhKSl0aHJvdyBuZXcgUy5BdXRob3JpemVFcnJvcigiQXV0aG9yaXphdGlvbiByZXF1aXJlZCIsVy5yZXF1ZXN0LnJlc3BvbnNlVVJMKTtpZigic3RyaW5nIj09dHlwZW9mIFcuZGF0YSYmKDAsdy5pc0xvZ0luUmVxdWlyZWQpKFcuZGF0YSkmJihudWxs''@;'; put 'put ''PT09KENlPW51bGw9PT0obWU9Vy5jb25maWcpfHx2b2lkIDA9PT1tZT92b2lkIDA6bWUudXJsKXx8dm9pZCAwPT09Q2V8fCFDZS5pbmNsdWRlcygiL1NBU0xvZ29uL2xvZ2luIikpKXRocm93IG5ldyBTLkxvZ2luUmVxdWlyZWRFcnJvcjtpZihudWxsIT09KEllPVcuZGF0YSkmJnZvaWQgMCE9''@;'; put 'put ''PUllJiZJZS5hdXRoX3JlcXVlc3QpdGhyb3cgbmV3IFMuQXV0aG9yaXplRXJyb3IoVy5kYXRhLm1lc3NhZ2UsVy5yZXF1ZXN0LnJlc3BvbnNlVVJMKTtpZihudWxsIT09KHFlPW51bGw9PT0oa2U9Vy5jb25maWcpfHx2b2lkIDA9PT1rZT92b2lkIDA6a2UudXJsKSYmdm9pZCAwIT09cWUmJnFl''@;'; put 'put ''LmluY2x1ZGVzKCJzYXNBdXRoRXJyb3IiKSl0aHJvdyBuZXcgeC5TQVM5QXV0aEVycm9yO2NvbnN0IFg9RihXLmRhdGEpO2lmKFgpdGhyb3cgWH07Y29uc3QgRj1XPT57aWYoIVcpcmV0dXJuIG51bGw7dHJ5e2NvbnN0IHE9SlNPTi5wYXJzZShXPy5yZXBsYWNlKC9bXG5ccl0vZywiICIpKTtp''@;'; put 'put ''ZihxLmVycm9yQ29kZSYmcS5tZXNzYWdlKXJldHVybiBuZXcgUy5Kb2JFeGVjdXRpb25FcnJvcihxLmVycm9yQ29kZSxxLm1lc3NhZ2UsVz8ucmVwbGFjZSgvW1xuXHJdL2csIiAiKSl9Y2F0Y2h7fXRyeXtpZihXPy5pbmNsdWRlcygneyJlcnJvckNvZGUnKSl7Y29uc3QgcmU9Vy5zcGxpdCgn''@;'; put 'put ''eyJlcnJvckNvZGUnKTtpZihyZS5sZW5ndGg+MSl7Y29uc3QgbWU9J3siZXJyb3JDb2RlJytyZVsxXS5zcGxpdCgnIn0nKVswXSsnIn0nLENlPUpTT04ucGFyc2UobWUucmVwbGFjZSgvW1xuXHJdL2csIiAiKSk7cmV0dXJuIG5ldyBTLkpvYkV4ZWN1dGlvbkVycm9yKENlLmVycm9yQ29kZSxD''@;'; put 'put ''ZS5tZXNzYWdlLFc/LnJlcGxhY2UoL1tcblxyXS9nLCJcbiIpKX19fWNhdGNoe310cnl7aWYoVz8ubWF0Y2goL3N0b3JlZCBwcm9jZXNzIG5vdCBmb3VuZDogL2kpKXtjb25zdCByZT1XLnNwbGl0KC9zdG9yZWQgcHJvY2VzcyBub3QgZm91bmQ6IC9pKTtpZihyZS5sZW5ndGg+MSl7Y29uc3Qg''@;'; put 'put ''bWU9cmVbMV0uc3BsaXQoIjxpPiIpWzFdLnNwbGl0KCI8L2k+IilbMF0sQ2U9bWUuZW5kc1dpdGgoInJ1bm5lciIpPyJTQVNKUyBydW5uZXIgbm90IGZvdW5kLiBIZXJlJ3MgdGhlIGxpbmsgKGh0dHBzOi8vY2xpLnNhc2pzLmlvL2F1dGgvI3Nhc2pzLXJ1bm5lcikgdG8gdGhlIFNBUyBjb2Rl''@;'; put 'put ''IGZvciByZWdpc3RlcmluZyB0aGUgU0FTanMgcnVubmVyIjpgU3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAke21lfWA7cmV0dXJuIG5ldyBTLkpvYkV4ZWN1dGlvbkVycm9yKDUwMCxDZSwiIil9fX1jYXRjaHt9dHJ5e2lmKCFXPy5tYXRjaCgvPj53ZWJvdXRCRUdJTjw8LykmJlc/Lm1hdGNo''@;'; put 'put ''KC9TdG9yZWQgUHJvY2VzcyBFcnJvci9pKSYmVz8ubWF0Y2goL1RoaXMgcmVxdWVzdCBjb21wbGV0ZWQgd2l0aCBlcnJvcnMuL2kpKXtjb25zdCByZT1XLnNwbGl0KCI8aDI+U0FTIExvZzwvaDI+Iik7aWYocmUubGVuZ3RoPjEpe2NvbnN0IG1lPXJlWzFdLnNwbGl0KCI8cHJlPiIpWzFdLnNw''@;'; put 'put ''bGl0KCI8L3ByZT4iKVswXTtyZXR1cm4gbmV3IFMuSm9iRXhlY3V0aW9uRXJyb3IoNTAwLCJUaGlzIHJlcXVlc3QgY29tcGxldGVkIHdpdGggZXJyb3JzLiIsbWUpfX19Y2F0Y2h7fXJldHVybiBudWxsfX0sNjA1NzYoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9dGhpcyYmdGhpcy5fX2Ny''@;'; put 'put ''ZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHgsVSxILFYpe3ZvaWQgMD09PVYmJihWPUgpO3ZhciBOPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVSxIKTsoIU58fCgiZ2V0ImluIE4/IVUuX19lc01vZHVsZTpOLndyaXRhYmxlfHxOLmNvbmZpZ3VyYWJsZSkp''@;'; put 'put ''JiYoTj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVVtIXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeCxWLE4pfTpmdW5jdGlvbih4LFUsSCxWKXt2b2lkIDA9PT1WJiYoVj1IKSx4W1ZdPVVbSF19KSxjPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2Jq''@;'; put 'put ''ZWN0LmNyZWF0ZT9mdW5jdGlvbih4LFUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpVfSl9OmZ1bmN0aW9uKHgsVSl7eC5kZWZhdWx0PVV9KSxzPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbih4KXtpZih4JiZ4Ll9fZXNN''@;'; put 'put ''b2R1bGUpcmV0dXJuIHg7dmFyIFU9e307aWYobnVsbCE9eClmb3IodmFyIEggaW4geCkiZGVmYXVsdCIhPT1IJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCxIKSYmeShVLHgsSCk7cmV0dXJuIGMoVSx4KSxVfSxBPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlv''@;'; put 'put ''bih4LFUsSCxWKXtyZXR1cm4gbmV3KEh8fChIPVByb21pc2UpKShmdW5jdGlvbih6LFkpe2Z1bmN0aW9uIEYocmUpe3RyeXtxKFYubmV4dChyZSkpfWNhdGNoKG1lKXtZKG1lKX19ZnVuY3Rpb24gVyhyZSl7dHJ5e3EoVi50aHJvdyhyZSkpfWNhdGNoKG1lKXtZKG1lKX19ZnVuY3Rpb24gcShy''@;'; put 'put ''ZSl7cmUuZG9uZT96KHJlLnZhbHVlKTpmdW5jdGlvbiBOKHope3JldHVybiB6IGluc3RhbmNlb2YgSD96Om5ldyBIKGZ1bmN0aW9uKFkpe1koeil9KX0ocmUudmFsdWUpLnRoZW4oRixXKX1xKChWPVYuYXBwbHkoeCxVfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGos''@;'; put 'put ''Il9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouU2FzOVJlcXVlc3RDbGllbnQ9dm9pZCAwO2NvbnN0IHY9aCg2Mjg0MSksQz1zKGgoNzI5MjMpKSx3PWgoNjM0MCksUz1oKDI4ODE2KSxMPWgoMTczODgpO2ouU2FzOVJlcXVlc3RDbGllbnQ9Y2xhc3MgUiBleHRlbmRzIFMuUmVxdWVzdENsaWVu''@;'; put 'put ''dHtjb25zdHJ1Y3RvcihVLEgpe3N1cGVyKFUsSCksdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLm1heFJlZGlyZWN0cz0wLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy52YWxpZGF0ZVN0YXR1cz1WPT5WPj0yMDAmJlY8MzAzLHYud3JhcHBlciYmKCgwLHYud3JhcHBlcikodGhpcy5odHRwQ2xp''@;'; put 'put ''ZW50KSx0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuamFyPW5ldyBDLkNvb2tpZUphcil9cmVzZXRJbk1lbW9yeUF1dGhTdGF0ZSgpe3N1cGVyLnJlc2V0SW5NZW1vcnlBdXRoU3RhdGUoKSx0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuamFyJiZ0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuamFy''@;'; put 'put ''LnJlbW92ZUFsbENvb2tpZXNTeW5jKCl9bG9naW4oVSxILFYpe3JldHVybiBBKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBOPWAvVXNlciBGb2xkZXJzLyR7VX0vTXkgRm9sZGVyL3Nhc2pzL3J1bm5lcmA7dGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLmphciYmKHRoaXMu''@;'; put 'put ''aHR0cENsaWVudC5kZWZhdWx0cy5qYXIucmVtb3ZlQWxsQ29va2llcygpLHlpZWxkIHRoaXMuZ2V0KGAke1Z9P19wcm9ncmFtPSR7Tn0mX3VzZXJuYW1lPSR7VX0mX3Bhc3N3b3JkPSR7SH1gLHZvaWQgMCwidGV4dC9wbGFpbiIpKX0pfWdldChVLEgsVj0iYXBwbGljYXRpb24vanNvbiIsTj17''@;'; put 'put ''fSx6PSExKXtyZXR1cm4gQSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgRj17aGVhZGVyczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRIZWFkZXJzKEgsVikpLE4pLHJlc3BvbnNlVHlwZToidGV4dC9wbGFpbiI9PT1WPyJ0ZXh0IjoianNvbiIs''@;'; put 'put ''d2l0aFhTUkZUb2tlbjohMH07cmV0dXJuInRleHQvcGxhaW4iPT09ViYmKEYudHJhbnNmb3JtUmVzcG9uc2U9dm9pZCAwKSx0aGlzLmh0dHBDbGllbnQuZ2V0KFUsRikudGhlbihXPT4zMDI9PT1XLnN0YXR1cz90aGlzLmdldChXLmhlYWRlcnMubG9jYXRpb24sSCxWKTooKDAsUy50aHJvd0lm''@;'; put 'put ''RXJyb3IpKFcpLHRoaXMucGFyc2VSZXNwb25zZShXKSkpLmNhdGNoKFc9PkEodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKFcgaW5zdGFuY2VvZiBMLkpvYkV4ZWN1dGlvbkVycm9yKXRocm93IFc7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IoVywoKT0+dGhpcy5nZXQo''@;'; put 'put ''VSxILFYsTikuY2F0Y2gocT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKShxLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgaGFuZGxlIGVycm9yIGNhbGxiYWNrLiAiKX0pLHopLmNhdGNoKHE9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkocSwiRXJyb3Igd2hpbGUgaGFuZGxpbmcgZXJyb3Iu''@;'; put 'put ''ICIpfSl9KSl9KX1wb3N0KFUsSCxWLE49ImFwcGxpY2F0aW9uL2pzb24iLHo9e30pe3JldHVybiBBKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBZPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMoVixOKSkseik7cmV0dXJuIHRoaXMu''@;'; put 'put ''aHR0cENsaWVudC5wb3N0KFUsSCx7aGVhZGVyczpZLHdpdGhYU1JGVG9rZW46ITB9KS50aGVuKEY9PkEodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiAzMDI9PT1GLnN0YXR1cz95aWVsZCB0aGlzLmdldChGLmhlYWRlcnMubG9jYXRpb24sdm9pZCAwLE4seik6KCgwLFMu''@;'; put 'put ''dGhyb3dJZkVycm9yKShGKSx0aGlzLnBhcnNlUmVzcG9uc2UoRikpfSkpLmNhdGNoKEY9PkEodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKEYsKCk9PnRoaXMucG9zdChVLEgsVixOLHopKX0pKX0pfX19LDc3NTYwKGZlLGosaCl7''@;'; put 'put ''InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLlNBU0pTX0xPR1NfU0VQQVJBVE9SPWouU2FzanNSZXF1ZXN0Q2xpZW50PXZvaWQgMDtjb25zdCB5PWgoMjg4MTYpO2ouU2FzanNSZXF1ZXN0Q2xpZW50PWNsYXNzIGMgZXh0ZW5k''@;'; put 'put ''cyB5LlJlcXVlc3RDbGllbnR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0SGVhZGVycz0oQSx2KT0+e3ZhciBDO2NvbnN0IHc9e307cmV0dXJuImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIhPT12JiYod1siQ29udGVudC1UeXBlIl09diksdy5B''@;'; put 'put ''Y2NlcHQ9ImFwcGxpY2F0aW9uL2pzb24iPT09dj92OiIqLyoiLCFBJiZ0eXBlb2Ygd2luZG93PCJ1IiYmKEE9bnVsbCE9PShDPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhY2Nlc3NUb2tlbiIpKSYmdm9pZCAwIT09Qz9DOnZvaWQgMCksQSYmKHcuQXV0aG9yaXphdGlvbj1gQmVhcmVyICR7QX1g''@;'; put 'put ''KSx3fX1wYXJzZVJlc3BvbnNlKEEpe2NvbnN0IHY9QT8uaGVhZGVycz9BLmhlYWRlcnMuZXRhZzoiIjtsZXQgdyxTLEwsQz17fTt0cnl7Qz0ic3RyaW5nIj09dHlwZW9mIEEuZGF0YT9KU09OLnBhcnNlKEEuZGF0YSk6QS5kYXRhfWNhdGNoe2lmKEEuZGF0YS5pbmNsdWRlcyhqLlNBU0pTX0xP''@;'; put 'put ''R1NfU0VQQVJBVE9SKSl7Y29uc3R7ZGF0YTpVfT1BLEg9VS5zcGxpdChqLlNBU0pTX0xPR1NfU0VQQVJBVE9SKTt3PUguc3BsaWNlKDAsMSlbMF0sdm9pZCAwIT09dyYmKEM9dyk7Y29uc3QgVj1ILnNwbGljZSgwLEgubGVuZ3RoLTEpLE49bmV3IFJlZ0V4cChgJHtqLlNBU0pTX0xPR1NfU0VQ''@;'; put 'put ''QVJBVE9SfSRgKSx6PUhbMF07eiYmKE4udGVzdChVKT9WLmxlbmd0aD4xJiZWLnB1c2goeik6TD16KSxTPVYuam9pbihqLlNBU0pTX0xPR1NfU0VQQVJBVE9SKX1lbHNlIEM9QS5kYXRhfWNvbnN0IFI9e3Jlc3VsdDpDLGxvZzpTfHwiIixldGFnOnYsc3RhdHVzOkEuc3RhdHVzfTtyZXR1cm4g''@;'; put 'put ''TCYmKFIucHJpbnRPdXRwdXQ9TCksUn19LGouU0FTSlNfTE9HU19TRVBBUkFUT1I9IlNBU0pTX0xPR1NfU0VQQVJBVE9SXzE2M2VlMTdiNmZmMjRmMDI4OTI4OTcyZDgwYTI2Nzg0In0sODU3NzcoZmUsail7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxl''@;'; put 'put ''Iix7dmFsdWU6ITB9KX0sMjEzNTMoZmUsail7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMzQzOChmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwz''@;'; put 'put ''NDAwNihmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw5ODkxMihmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw3NTg3MyhmZSxqKXsidXNl''@;'; put 'put ''IHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw3Mjg3MihmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw2MzYzMihmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw5Njc3MihmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw4MTc1MShmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwyNDQ4MyhmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw5NTU2KGZlLGopeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIs''@;'; put 'put ''e3ZhbHVlOiEwfSl9LDE0MDY2KGZlLGopeyJ1c2Ugc3RyaWN0Ijt2YXIgeSxjO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLkxvZ2luTWVjaGFuaXNtPWouU0FTanNDb25maWc9dm9pZCAwLGouU0FTanNDb25maWc9Y2xhc3MgaHtjb25zdHJ1Y3Rv''@;'; put 'put ''cigpe3RoaXMuc2VydmVyVXJsPSIiLHRoaXMucGF0aFNBU0pTPSIiLHRoaXMucGF0aFNBUzk9IiIsdGhpcy5wYXRoU0FTVml5YT0iIix0aGlzLmFwcExvYz0iIix0aGlzLnNlcnZlclR5cGU9bnVsbCx0aGlzLmRlYnVnPSEwLHRoaXMudmVyYm9zZT0hMCx0aGlzLmNvbnRleHROYW1lPSIiLHRo''@;'; put 'put ''aXMudXNlQ29tcHV0ZUFwaT1udWxsLHRoaXMubG9naW5NZWNoYW5pc209eS5EZWZhdWx0LHRoaXMucmVxdWVzdEhpc3RvcnlMaW1pdD0xMCx0aGlzLnJ1bkFzVGFzaz0hMX19LChjPXk9ai5Mb2dpbk1lY2hhbmlzbXx8KGouTG9naW5NZWNoYW5pc209e30pKS5EZWZhdWx0PSJEZWZhdWx0Iixj''@;'; put 'put ''LlJlZGlyZWN0ZWQ9IlJlZGlyZWN0ZWQifSw5NTYxOChmZSxqKXsidXNlIHN0cmljdCI7dmFyIHk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouU2Vzc2lvblN0YXRlPXZvaWQgMCwoeT1qLlNlc3Npb25TdGF0ZXx8KGouU2Vzc2lvblN0YXRlPXt9''@;'; put 'put ''KSkuQ29tcGxldGVkPSJjb21wbGV0ZWQiLHkuUnVubmluZz0icnVubmluZyIseS5QZW5kaW5nPSJwZW5kaW5nIix5LklkbGU9ImlkbGUiLHkuVW5hdmFpbGFibGU9InVuYXZhaWxhYmxlIix5Lk5vU3RhdGU9IiIseS5GYWlsZWQ9ImZhaWxlZCIseS5FcnJvcj0iZXJyb3IifSwzMTQ3MyhmZSxq''@;'; put 'put ''LGgpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5UYWJsZXM9dm9pZCAwO2NvbnN0IHk9aCgxNzM4OCk7ai5UYWJsZXM9Y2xhc3MgY3tjb25zdHJ1Y3RvcihBLHYpe3RoaXMuX3RhYmxlcz17fSx0aGlzLmFkZChBLHYpfWFk''@;'; put 'put ''ZChBLHYpe2lmKCFBfHwhdil0aHJvdyBuZXcgeS5Bcmd1bWVudEVycm9yKCJNaXNzaW5nIGFyZ3VtZW50cyIpO2lmKCEoQSBpbnN0YW5jZW9mIEFycmF5KSl0aHJvdyBuZXcgeS5Bcmd1bWVudEVycm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFycmF5Iik7aWYoInN0cmluZyIhPXR5cGVv''@;'; put 'put ''ZiB2KXRocm93IG5ldyB5LkFyZ3VtZW50RXJyb3IoIlNlY29uZCBhcmd1bWVudCBtdXN0IGJlIHN0cmluZyIpO2lmKCFpc05hTihOdW1iZXIodlt2Lmxlbmd0aC0xXSkpKXRocm93IG5ldyB5LkFyZ3VtZW50RXJyb3IoIk1hY3JvIG5hbWUgY2Fubm90IGhhdmUgbnVtYmVyIGF0IHRoZSBlbmQi''@;'; put 'put ''KTt0aGlzLl90YWJsZXNbdl09QX19fSw1ODE0MyhmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwyODMwNShmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1''@;'; put 'put ''ZTohMH0pfSw3ODcwNyhmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouQXJndW1lbnRFcnJvcj12b2lkIDA7Y2xhc3MgaCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGMpe3N1cGVyKGMpLHRoaXMubWVzc2FnZT1j''@;'; put 'put ''LHRoaXMubmFtZT0iQXJndW1lbnRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsaC5wcm90b3R5cGUpfX1qLkFyZ3VtZW50RXJyb3I9aH0sODY2MShmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouQXV0''@;'; put 'put ''aG9yaXplRXJyb3I9dm9pZCAwO2NsYXNzIGggZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihjLHMpe3N1cGVyKGMpLHRoaXMubWVzc2FnZT1jLHRoaXMuY29uZmlybVVybD1zLHRoaXMubmFtZT0iQXV0aG9yaXplRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGgucHJvdG90eXBl''@;'; put 'put ''KX19ai5BdXRob3JpemVFcnJvcj1ofSw4OTI0MShmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouQ2VydGlmaWNhdGVFcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHMpe3N1cGVy''@;'; put 'put ''KGAke3N9XG5QbGVhc2UgdmlzaXQgdGhlIGxpbmsgYmVsb3cgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhpcyBpc3N1ZTpcbi0gaHR0cHM6Ly9naXRodWIuY29tL3Nhc2pzL2NsaS9pc3N1ZXMvMTE4MSNpc3N1ZWNvbW1lbnQtMTA5MDYzODU4NFxuYCksdGhpcy5uYW1lPSJDZXJ0aWZp''@;'; put 'put ''Y2F0ZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fWouQ2VydGlmaWNhdGVFcnJvcj15fSw1MDYzNChmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouQ29tcHV0ZUpvYkV4ZWN1''@;'; put 'put ''dGlvbkVycm9yPXZvaWQgMDtjbGFzcyBoIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoYyxzKXtzdXBlcigiRXJyb3I6IEpvYiBleGVjdXRpb24gZmFpbGVkIiksdGhpcy5qb2I9Yyx0aGlzLmxvZz1zLHRoaXMubmFtZT0iQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yIixPYmplY3Quc2V0UHJv''@;'; put 'put ''dG90eXBlT2YodGhpcyxoLnByb3RvdHlwZSl9fWouQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yPWh9LDM0ODQ1KGZlLGopeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5FcnJvclJlc3BvbnNlPXZvaWQgMCxqLkVycm9yUmVz''@;'; put 'put ''cG9uc2U9Y2xhc3MgaHtjb25zdHJ1Y3RvcihjLHMsQSl7bGV0IHY9cztpZigib2JqZWN0IiE9dHlwZW9mIHMpdHJ5e3Y9SlNPTi5wYXJzZShzKX1jYXRjaHtBPXMsdj0iIn10aGlzLmVycm9yPXttZXNzYWdlOmMsZGV0YWlsczp2LHJhdzpBfX19fSwxOTA2OChmZSxqKXsidXNlIHN0cmljdCI7''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouSW50ZXJuYWxTZXJ2ZXJFcnJvcj12b2lkIDA7Y2xhc3MgaCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkVycm9yOiBJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IuIiksdGhpcy5uYW1lPSJJ''@;'; put 'put ''bnRlcm5hbFNlcnZlckVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxoLnByb3RvdHlwZSl9fWouSW50ZXJuYWxTZXJ2ZXJFcnJvcj1ofSwxMjM4MyhmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouSW52''@;'; put 'put ''YWxpZEpzb25FcnJvcj12b2lkIDA7Y2xhc3MgaCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkVycm9yOiBpbnZhbGlkIEpzb24gc3RyaW5nIiksdGhpcy5uYW1lPSJJbnZhbGlkSnNvbkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxoLnByb3RvdHlwZSl9fWou''@;'; put 'put ''SW52YWxpZEpzb25FcnJvcj1ofSwyNDAwMShmZSxqKXsidXNlIHN0cmljdCI7ai5JbnZhbGlkU0FTanNDc3JmRXJyb3I9dm9pZCAwO2NsYXNzIHkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJBdXRoIGVycm9yOiBJbnZhbGlkIENTUkYgdG9rZW4hIiksdGhpcy5uYW1lPSJJ''@;'; put 'put ''bnZhbGlkU0FTanNDc3JmRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHkucHJvdG90eXBlKX19ai5JbnZhbGlkU0FTanNDc3JmRXJyb3I9eX0sMTc0MTEoZmUsail7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxq''@;'; put 'put ''LkpvYkV4ZWN1dGlvbkVycm9yPXZvaWQgMDtjbGFzcyBoIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoYyxzLEEpe3N1cGVyKGBFcnJvciBDb2RlICR7Y306ICR7c31gKSx0aGlzLmVycm9yQ29kZT1jLHRoaXMuZXJyb3JNZXNzYWdlPXMsdGhpcy5yZXN1bHQ9QSx0aGlzLm5hbWU9IkpvYkV4''@;'; put 'put ''ZWN1dGlvbkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxoLnByb3RvdHlwZSl9fWouSm9iRXhlY3V0aW9uRXJyb3I9aH0sMTI5MDkoZmUsail7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLkpvYlN0YXRlUG9s''@;'; put 'put ''bEVycm9yPXZvaWQgMDtjbGFzcyBoIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoYyxzKXtzdXBlcihgRXJyb3Igd2hpbGUgcG9sbGluZyBqb2Igc3RhdGUgZm9yIGpvYiAke2N9OiAke3MubWVzc2FnZXx8c31gKSx0aGlzLm9yaWdpbmFsRXJyb3I9cyx0aGlzLm5hbWU9IkpvYlN0YXRlUG9s''@;'; put 'put ''bEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxoLnByb3RvdHlwZSl9fWouSm9iU3RhdGVQb2xsRXJyb3I9aH0sNzIzNihmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouSnNvblBhcnNlQXJyYXlFcnJv''@;'; put 'put ''cj12b2lkIDA7Y2xhc3MgaCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkNhbiBub3QgcGFyc2UgYXJyYXkgb2JqZWN0IHRvIGpzb24uIiksdGhpcy5uYW1lPSJKc29uUGFyc2VBcnJheUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxoLnByb3RvdHlwZSl9fWou''@;'; put 'put ''SnNvblBhcnNlQXJyYXlFcnJvcj1ofSw5MzEwNChmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouTG9naW5SZXF1aXJlZEVycm9yPXZvaWQgMDtjbGFzcyBoIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoYyl7c3Vw''@;'; put 'put ''ZXIoYEF1dGggZXJyb3I6ICR7Yz9KU09OLnN0cmluZ2lmeShjLG51bGwsMik6IllvdSBtdXN0IGJlIGxvZ2dlZCBpbiB0byBhY2Nlc3MgdGhpcyByZXNvdXJjZSJ9YCksdGhpcy5uYW1lPSJMb2dpblJlcXVpcmVkRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGgucHJvdG90eXBl''@;'; put 'put ''KX19ai5Mb2dpblJlcXVpcmVkRXJyb3I9aH0sNjE5NzYoZmUsail7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLk5vU2Vzc2lvblN0YXRlRXJyb3I9dm9pZCAwO2NsYXNzIGggZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcihj''@;'; put 'put ''LHMsQSl7c3VwZXIoYENvdWxkIG5vdCBnZXQgc2Vzc2lvbiBzdGF0ZS4gU2VydmVyIHJlc3BvbmRlZCB3aXRoICR7Y30gd2hpbHN0IGNoZWNraW5nIHN0YXRlOiAke3N9YCksdGhpcy5zZXJ2ZXJSZXNwb25zZVN0YXR1cz1jLHRoaXMuc2Vzc2lvblN0YXRlVXJsPXMsdGhpcy5sb2dVcmw9QSx0''@;'; put 'put ''aGlzLm5hbWU9Ik5vU2Vzc2lvblN0YXR1cyIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsaC5wcm90b3R5cGUpfX1qLk5vU2Vzc2lvblN0YXRlRXJyb3I9aH0sOTc0MDMoZmUsail7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9''@;'; put 'put ''KSxqLk5vdEZvdW5kRXJyb3I9dm9pZCAwO2NsYXNzIGggZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihjKXtzdXBlcihgRXJyb3I6IFJlc291cmNlIGF0ICR7Y30gd2FzIG5vdCBmb3VuZGApLHRoaXMudXJsPWMsdGhpcy5uYW1lPSJOb3RGb3VuZEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBl''@;'; put 'put ''T2YodGhpcyxoLnByb3RvdHlwZSl9fWouTm90Rm91bmRFcnJvcj1ofSwyNTM5NShmZSxqLGgpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcj12b2lkIDA7Y29uc3QgeT1oKDE2MDcy''@;'; put 'put ''KTtjbGFzcyBjIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoQSx2LEMpe2xldCB3PWBSb290IGZvbGRlciAke0F9IHdhcyBub3QgZm91bmQuXG5QbGVhc2UgY2hlY2sgJHt2fS9TQVNEcml2ZS5cbklmIHRoZSBmb2xkZXIgRE9FUyBleGlzdCB0aGVuIGl0IGlzIGxpa2VseSBhIHBlcm1pc3Np''@;'; put 'put ''b24gcHJvYmxlbS5cbmA7aWYoQyl7bGV0IEw9KDAseS5kZWNvZGVUb2tlbikoQykuc2NvcGU7TD1MLm1hcChSPT4iKiAiK1IpLHcrPSJZb3VyIGFjY2VzcyB0b2tlbiBjb250YWlucyB0aGUgZm9sbG93aW5nIHNjb3BlczpcbiIrTC5qb2luKCJcbiIpfXN1cGVyKHcpLHRoaXMubmFtZT0iUm9v''@;'; put 'put ''dEZvbGRlck5vdEZvdW5kRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGMucHJvdG90eXBlKX19ai5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcj1jfSw5NDQ2MChmZSxqKXsidXNlIHN0cmljdCI7ai5TQVM5QXV0aEVycm9yPXZvaWQgMDtjbGFzcyB5IGV4dGVuZHMgRXJyb3J7Y29u''@;'; put 'put ''c3RydWN0b3IoKXtzdXBlcigiVGhlIGNyZWRlbnRpYWxzIHlvdSBwcm92aWRlZCBjYW5ub3QgYmUgYXV0aGVudGljYXRlZC4gUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBzZXQgb2YgY3JlZGVudGlhbHMuIiksdGhpcy5uYW1lPSJBdXRob3JpemVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9m''@;'; put 'put ''KHRoaXMseS5wcm90b3R5cGUpfX1qLlNBUzlBdXRoRXJyb3I9eX0sNzk5OTcoZmUsail7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLldlYm91dFJlc3BvbnNlRXJyb3I9dm9pZCAwO2NsYXNzIGggZXh0ZW5kcyBFcnJvcntj''@;'; put 'put ''b25zdHJ1Y3RvcihjKXtzdXBlcihgRXJyb3I6IGVycm9yIHdoaWxlIHBhcnNpbmcgcmVzcG9uc2UgZnJvbSAke2N9YCksdGhpcy51cmw9Yyx0aGlzLm5hbWU9IldlYm91dFJlc3BvbnNlRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGgucHJvdG90eXBlKX19ai5XZWJvdXRSZXNw''@;'; put 'put ''b25zZUVycm9yPWh9LDE3Mzg4KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihzLEEsdixDKXt2b2lkIDA9PT1DJiYoQz12KTt2YXIgdz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEEs''@;'; put 'put ''dik7KCF3fHwoImdldCJpbiB3PyFBLl9fZXNNb2R1bGU6dy53cml0YWJsZXx8dy5jb25maWd1cmFibGUpKSYmKHc9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEFbdl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsQyx3KX06ZnVuY3Rpb24ocyxBLHYsQyl7dm9pZCAw''@;'; put 'put ''PT09QyYmKEM9diksc1tDXT1BW3ZdfSksYz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24ocyxBKXtmb3IodmFyIHYgaW4gcykiZGVmYXVsdCIhPT12JiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEEsdikmJnkoQSxzLHYpfTtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYyhoKDc4NzA3KSxqKSxjKGgoODY2MSksaiksYyhoKDg5MjQxKSxqKSxjKGgoNTA2MzQpLGopLGMoaCgzNDg0NSksaiksYyhoKDE5MDY4KSxqKSxjKGgoMTIzODMpLGopLGMoaCgxNzQxMSksaiksYyhoKDEyOTA5KSxqKSxjKGgoNzIz''@;'; put 'put ''NiksaiksYyhoKDkzMTA0KSxqKSxjKGgoNjE5NzYpLGopLGMoaCg5NzQwMyksaiksYyhoKDI1Mzk1KSxqKSxjKGgoNzk5OTcpLGopfSw1MzU3NChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24ocyxB''@;'; put 'put ''LHYsQyl7dm9pZCAwPT09QyYmKEM9dik7dmFyIHc9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihBLHYpOyghd3x8KCJnZXQiaW4gdz8hQS5fX2VzTW9kdWxlOncud3JpdGFibGV8fHcuY29uZmlndXJhYmxlKSkmJih3PXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBBW3ZdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLEMsdyl9OmZ1bmN0aW9uKHMsQSx2LEMpe3ZvaWQgMD09PUMmJihDPXYpLHNbQ109QVt2XX0pLGM9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKHMsQSl7Zm9yKHZhciB2IGluIHMpImRlZmF1bHQiIT09diYmIU9iamVj''@;'; put 'put ''dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChBLHYpJiZ5KEEscyx2KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGMoaCg4NTc3NyksaiksYyhoKDIxMzUzKSxqKSxjKGgoOTg5MTIpLGopLGMoaCgzNDAwNiksaiksYyhoKDc1ODczKSxq''@;'; put 'put ''KSxjKGgoNzI4NzIpLGopLGMoaCg2MzYzMiksaiksYyhoKDk2NzcyKSxqKSxjKGgoODE3NTEpLGopLGMoaCgxNDA2NiksaiksYyhoKDk1NTYpLGopLGMoaCg5NTYxOCksaiksYyhoKDU4MTQzKSxqKSxjKGgoMjQ0ODMpLGopLGMoaCgyODMwNSksaiksYyhoKDM0MzgpLGopLGMoaCgxNzM4OCks''@;'; put 'put ''aiksYyhoKDMxNDczKSxqKX0sNzMyNTgoZmUsail7InVzZSBzdHJpY3QiO3ZhciBoPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihjLHMsQSx2KXtyZXR1cm4gbmV3KEF8fChBPVByb21pc2UpKShmdW5jdGlvbih3LFMpe2Z1bmN0aW9uIEwoVSl7dHJ5e3godi5uZXh0KFUpKX1jYXRj''@;'; put 'put ''aChIKXtTKEgpfX1mdW5jdGlvbiBSKFUpe3RyeXt4KHYudGhyb3coVSkpfWNhdGNoKEgpe1MoSCl9fWZ1bmN0aW9uIHgoVSl7VS5kb25lP3coVS52YWx1ZSk6ZnVuY3Rpb24gQyh3KXtyZXR1cm4gdyBpbnN0YW5jZW9mIEE/dzpuZXcgQShmdW5jdGlvbihTKXtTKHcpfSl9KFUudmFsdWUpLnRo''@;'; put 'put ''ZW4oTCxSKX14KCh2PXYuYXBwbHkoYyxzfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXM9dm9pZCAwLGouYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXM9ZnVu''@;'; put 'put ''Y3Rpb24geShjLHMpe3JldHVybiBoKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgQT17fTtpZihzPy5sZW5ndGgpe2NvbnN0IHY9cy5yZWR1Y2UoKEMsdyk9PihDW3ddPWNbd10sQykse30pO0E9T2JqZWN0LmFzc2lnbih7cmVzdWx0OmMucmVzdWx0fSx2KX1lbHNlIEE9Yy5y''@;'; put 'put ''ZXN1bHQ7cmV0dXJuIEF9KX19LDIyNTU4KGZlLGopeyJ1c2Ugc3RyaWN0Ijt2YXIgaD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oYyxzLEEsdil7cmV0dXJuIG5ldyhBfHwoQT1Qcm9taXNlKSkoZnVuY3Rpb24odyxTKXtmdW5jdGlvbiBMKFUpe3RyeXt4KHYubmV4dChVKSl9Y2F0''@;'; put 'put ''Y2goSCl7UyhIKX19ZnVuY3Rpb24gUihVKXt0cnl7eCh2LnRocm93KFUpKX1jYXRjaChIKXtTKEgpfX1mdW5jdGlvbiB4KFUpe1UuZG9uZT93KFUudmFsdWUpOmZ1bmN0aW9uIEModyl7cmV0dXJuIHcgaW5zdGFuY2VvZiBBP3c6bmV3IEEoZnVuY3Rpb24oUyl7Uyh3KX0pfShVLnZhbHVlKS50''@;'; put 'put ''aGVuKEwsUil9eCgodj12LmFwcGx5KGMsc3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmFzeW5jRm9yRWFjaD12b2lkIDAsai5hc3luY0ZvckVhY2g9ZnVuY3Rpb24geShjLHMpe3JldHVybiBoKHRoaXMsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbiooKXtmb3IobGV0IEE9MDtBPGMubGVuZ3RoO0ErKyl5aWVsZCBzKGNbQV0sQSxjKX0pfX0sODk2NDQoZmUsail7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmNvbXBhcmVUaW1lc3RhbXBzPXZv''@;'; put 'put ''aWQgMCxqLmNvbXBhcmVUaW1lc3RhbXBzPSh5LGMpPT5jLnRpbWVzdGFtcC5nZXRUaW1lKCkteS50aW1lc3RhbXAuZ2V0VGltZSgpfSw0Nzg2KGZlLGosaCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmlzRm9ybWF0c1Rh''@;'; put 'put ''YmxlPWouY29udmVydFRvQ1NWPXZvaWQgMDtjb25zdCB5PWgoNDMzNzEpLGM9aCg2MzQwKTtqLmNvbnZlcnRUb0NTVj0oQyx3KT0+e3ZhciBTO2lmKCFDW3ddKXtjb25zdCB6PSgwLGMucHJlZml4TWVzc2FnZSkoIk5vIHRhYmxlIHByb3ZpZGVkIHRvIGJlIGNvbnZlcnRlZCB0byBDU1YuIiwi''@;'; put 'put ''RXJyb3Igd2hpbGUgY29udmVydGluZyB0byBDU1YuICIpO3Rocm93InN0cmluZyI9PXR5cGVvZiB6P25ldyBFcnJvcih6KTp6fWNvbnN0IEw9Q1t3XTtpZighQXJyYXkuaXNBcnJheShMKSlyZXR1cm4iIjtsZXQgVSxSPW51bGw9PT0oUz1DW2AkJHt3fWBdKXx8dm9pZCAwPT09Uz92b2lkIDA6''@;'; put 'put ''Uy5mb3JtYXRzLHg9W10sSD0hMTtSJiYoeD1PYmplY3Qua2V5cyhSKS5tYXAoej0+YCR7en06JHtSW3pdfWApKTtjb25zdCBWPU9iamVjdC5rZXlzKExbMF0pO3JldHVybiBWLmZvckVhY2goej0+e2lmKCFSfHwhT2JqZWN0LmtleXMoUikuaW5jbHVkZXMoeikpe2xldCBZPSExLEY9ITE7aWYo''@;'; put 'put ''TC5mb3JFYWNoKFc9PntudWxsPT09V1t6XXx8Im51bWJlciI9PXR5cGVvZiBXW3pdP1k9ITA6InN0cmluZyI9PXR5cGVvZiBXW3pdJiYoMCx5LmlzU3BlY2lhbE1pc3NpbmcpKFdbel0pJiYoRj0hMCl9KSxZJiZGKXgucHVzaChgJHt6fTpiZXN0LmApLFJ8fChSPXt9KSxSW3pdPSJiZXN0LiI7''@;'; put 'put ''ZWxzZXtsZXQgVz1udWxsLHE9ITEscmU9LTE7Y29uc3QgbWU9TC5tYXAoKENlLEllKT0+e2lmKENlW3pdfHwiIj09PUNlW3pdKXtsZXQga2U7cmV0dXJuIFc/cXx8KHE9KCIiPT09Q2Vbel18fCJzdHJpbmciPT10eXBlb2YgQ2Vbel0/ImNoYXJzIjoibnVtYmVyIikhPT1XLHJlPXE/SWUrMTot''@;'; put 'put ''MSk6Vz0iIj09PUNlW3pdfHwic3RyaW5nIj09dHlwZW9mIENlW3pdPyJjaGFycyI6Im51bWJlciIsInN0cmluZyI9PXR5cGVvZiBDZVt6XSYmKGtlPXYoQ2Vbel0pKSxrZX19KS5zb3J0KChDZSxJZSk9PkllLUNlKVswXTttZSYmbWU+MzI3NjUmJihIPSEwKSxxJiZjb25zb2xlLmVycm9yKGBS''@;'; put 'put ''b3cgKCR7cmV9KSwgQ29sdW1uICgke3p9KSBoYXMgbWl4ZWQgdHlwZXM6IEVSUk9SYCkseC5wdXNoKGAke3p9OiR7ImNoYXJzIj09PVc/IiRjaGFyIjoiIn0ke21lfHwoImNoYXJzIj09PVc/IjEiOiJiZXN0Iil9LmApfX19KSxSJiYoeD14LnNvcnQoKHosWSk9PlYuaW5kZXhPZih6LnJlcGxh''@;'; put 'put ''Y2UoLzouKi8sIiIpKS1WLmluZGV4T2YoWS5yZXBsYWNlKC86LiovLCIiKSkpKSxIPyJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI6KFU9TC5tYXAoej0+T2JqZWN0LmtleXMoeikubWFwKChGLFcpPT57bGV0IHE7Y29uc3QgcmU9eltGXTtpZigibnVtYmVyIj09dHlwZW9mIHJlKXJldHVy''@;'; put 'put ''biByZTtpZihxPW51bGw9PT1yZT8iIjpyZSxSJiYiYmVzdC4iPT09UltGXSl7aWYocSYmISgwLHkuaXNTcGVjaWFsTWlzc2luZykocSkpdGhyb3cgbmV3IEVycm9yKCJBIFNwZWNpYWwgbWlzc2luZyB2YWx1ZSBjYW4gb25seSBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSAnQScgdG8gJ1on''@;'; put 'put ''LCAnXycsICcuW2Etel0nLCAnLl8nIik7cmV0dXJuYCR7cS5pbmNsdWRlcygiLiIpPyIiOiIuIn0ke3EudG9Mb3dlckNhc2UoKX1gfXJldHVybiBxPXEucmVwbGFjZSgvIi9nLCciIicpLHE9YCIke3F9ImAscS5zdWJzdHJpbmcoMSxxLmxlbmd0aC0xKS5zZWFyY2goLyhcdHxcbnxccnwsfFwn''@;'; put 'put ''fFwiKS9nbSk8MCYmKHE9cS5zdWJzdHJpbmcoMSxxLmxlbmd0aC0xKSkscT1xLnJlcGxhY2UoL1xyXG4vZ20sIlxuIiksIiI9PT1xJiZ4W1ddLmluY2x1ZGVzKCJiZXN0IikmJihxPSIuIikscX0pLmpvaW4oIiwiKSkseC5qb2luKCIsIikucmVwbGFjZSgvLC9nLCIgIikrIlxyXG4iK1Uuam9p''@;'; put 'put ''bigiXHJcbiIpKX0sai5pc0Zvcm1hdHNUYWJsZT1DPT4vXlwkLiovLnRlc3QoQyk7Y29uc3Qgdj1DPT57bGV0IHc9Qy5sZW5ndGg7Zm9yKGxldCBTPUMubGVuZ3RoLTE7Uz49MDtTLS0pe2NvbnN0IEw9Qy5jaGFyQ29kZUF0KFMpO0w+MTI3JiZMPD0yMDQ3P3crKzpMPjIwNDcmJkw8PTY1NTM1''@;'; put 'put ''JiYodys9MiksTD49NTYzMjAmJkw8PTU3MzQzJiZTLS19cmV0dXJuIHd9fSwzNjUzNShmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oQSl7cmV0dXJuIEEmJkEuX19lc01vZHVsZT9BOntkZWZhdWx0OkF9fTtPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5jcmVhdGVBeGlvc0luc3RhbmNlPXZvaWQgMDtjb25zdCBjPXkoaCg4NjQyNSkpO2ouY3JlYXRlQXhpb3NJbnN0YW5jZT0oQSx2KT0+Yy5kZWZhdWx0LmNyZWF0ZSh7YmFzZVVSTDpBLGh0dHBzQWdlbnQ6dn0pfSw3Njg4''@;'; put 'put ''OShmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouZGVsYXk9dm9pZCAwLGouZGVsYXk9eT0+bmV3IFByb21pc2UoYz0+c2V0VGltZW91dChjLHkpKX0sMzMxOTMoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg2''@;'; put 'put ''NTYwNiksYz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oQyx3LFMsTCl7cmV0dXJuIG5ldyhTfHwoUz1Qcm9taXNlKSkoZnVuY3Rpb24oeCxVKXtmdW5jdGlvbiBIKHope3RyeXtOKEwubmV4dCh6KSl9Y2F0Y2goWSl7VShZKX19ZnVuY3Rpb24gVih6KXt0cnl7TihMLnRocm93KHop''@;'; put 'put ''KX1jYXRjaChZKXtVKFkpfX1mdW5jdGlvbiBOKHope3ouZG9uZT94KHoudmFsdWUpOmZ1bmN0aW9uIFIoeCl7cmV0dXJuIHggaW5zdGFuY2VvZiBTP3g6bmV3IFMoZnVuY3Rpb24oVSl7VSh4KX0pfSh6LnZhbHVlKS50aGVuKEgsVil9TigoTD1MLmFwcGx5KEMsd3x8W10pKS5uZXh0KCkpfSl9''@;'; put 'put ''O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmZldGNoTG9nPWouZmV0Y2hMb2dCeUNodW5rcz12b2lkIDA7Y29uc3Qgcz1oKDYzNDApO2ouZmV0Y2hMb2dCeUNodW5rcz0oQyx3LFMsTCk9PmModm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q''@;'; put 'put ''KCl7cmV0dXJuIHlpZWxkKDAsai5mZXRjaExvZykoQyx3LFMsMCxMKX0pLGouZmV0Y2hMb2c9KEMsdyxTLEwsUik9PmModm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgeD15LmxvZ2dlcnx8Y29uc29sZTtsZXQgVT0iIjtjb25zdCBIPVI8MWU0P1I6MWU0O2Rve3guaW5m''@;'; put 'put ''byhgRmV0Y2hpbmcgbG9ncyBmcm9tIGxpbmUgbm86ICR7TCsxfSB0byAke0wrSH0gb2YgJHtSfS5gKTtjb25zdCBWPXlpZWxkIEMuZ2V0KGAke1N9P3N0YXJ0PSR7TH0mbGltaXQ9JHtIfWAsdykudGhlbih6PT56LnJlc3VsdCkuY2F0Y2goej0+e3Rocm93KDAscy5wcmVmaXhNZXNzYWdlKSh6''@;'; put 'put ''LCJFcnJvciB3aGlsZSBnZXR0aW5nIGxvZy4gIil9KTtpZigwPT09Vi5pdGVtcy5sZW5ndGgpYnJlYWs7VSs9Vi5pdGVtcy5tYXAoej0+ei5saW5lKS5qb2luKCJcbiIpLEwrPUh9d2hpbGUoTDxSKTtyZXR1cm4gVX0pfSw4MzQwNyhmZSxqLGgpeyJ1c2Ugc3RyaWN0IjtqLmZvcm1hdERhdGFG''@;'; put 'put ''b3JSZXF1ZXN0PXZvaWQgMDtjb25zdCBjPWgoNDc4Nikscz1oKDE4NzIwKTtqLmZvcm1hdERhdGFGb3JSZXF1ZXN0PXY9Pntjb25zdCBDPVtdO2xldCB3PTA7Y29uc3QgUz17fTtmb3IoY29uc3QgTCBpbiB2KXtpZigoMCxjLmlzRm9ybWF0c1RhYmxlKShMKSYmT2JqZWN0LmtleXModikuaW5j''@;'; put 'put ''bHVkZXMoTC5yZXBsYWNlKC9eXCQvLCIiKSkpY29udGludWU7dysrLCgwLGMuaXNGb3JtYXRzVGFibGUpKEwpfHxDLnB1c2goTCk7Y29uc3QgUj0oMCxjLmNvbnZlcnRUb0NTVikodixMKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09Uil0aHJvdyBuZXcgRXJyb3IoIlRoZSBt''@;'; put 'put ''YXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7aWYoUi5sZW5ndGg+MTZlMyl7Y29uc3QgeD0oMCxzLnNwbGl0Q2h1bmtzKShSKTtTW2BzYXNqcyR7d31kYXRhMGBdPXgubGVuZ3RoLHguZm9yRWFjaCgoVSxIKT0+e1NbYHNhc2pzJHt3''@;'; put 'put ''fWRhdGEke0grMX1gXT1VfSl9ZWxzZSBTW2BzYXNqcyR7d31kYXRhYF09Un1yZXR1cm4gUy5zYXNqc190YWJsZXM9Qy5qb2luKCIgIiksU319LDU4MjkyKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih2KXtyZXR1cm4gdiYm''@;'; put 'put ''di5fX2VzTW9kdWxlP3Y6e2RlZmF1bHQ6dn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmdldEZvcm1EYXRhPXZvaWQgMDtjb25zdCBjPWgoMjkyNjYpLHM9eShoKDUxODk0KSk7ai5nZXRGb3JtRGF0YT0oKT0+KDAsYy5pc05vZGUpKCk/bmV3''@;'; put 'put ''IHMuZGVmYXVsdDpuZXcgRm9ybURhdGF9LDEwMzQzKGZlLGopeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5nZXRVc2VyTGFuZ3VhZ2U9dm9pZCAwLGouZ2V0VXNlckxhbmd1YWdlPSgpPT53aW5kb3cubmF2aWdhdG9yLmxh''@;'; put 'put ''bmd1YWdlfHx3aW5kb3cubmF2aWdhdG9yLnVzZXJMYW5ndWFnZX0sNDU4ODAoZmUsaixoKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouZ2V0VmFsaWRKc29uPXZvaWQgMDtjb25zdCB5PWgoMTczODgpO2ouZ2V0VmFsaWRK''@;'; put 'put ''c29uPXM9Pnt0cnl7aWYobnVsbD09cyl0aHJvdyBuZXcgeS5JbnZhbGlkSnNvbkVycm9yO2lmKEFycmF5LmlzQXJyYXkocykpdGhyb3cgbmV3IHkuSnNvblBhcnNlQXJyYXlFcnJvcjtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHM/czoiIj09PXM/e306SlNPTi5wYXJzZShzKX1jYXRjaChBKXt0''@;'; put 'put ''aHJvdyBBIGluc3RhbmNlb2YgeS5Kc29uUGFyc2VBcnJheUVycm9yP0E6bmV3IHkuSW52YWxpZEpzb25FcnJvcn19fSwyOTI2NihmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24ocyxBLHYsQyl7dm9p''@;'; put 'put ''ZCAwPT09QyYmKEM9dik7dmFyIHc9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihBLHYpOyghd3x8KCJnZXQiaW4gdz8hQS5fX2VzTW9kdWxlOncud3JpdGFibGV8fHcuY29uZmlndXJhYmxlKSkmJih3PXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBBW3ZdfX0p''@;'; put 'put ''LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLEMsdyl9OmZ1bmN0aW9uKHMsQSx2LEMpe3ZvaWQgMD09PUMmJihDPXYpLHNbQ109QVt2XX0pLGM9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKHMsQSl7Zm9yKHZhciB2IGluIHMpImRlZmF1bHQiIT09diYmIU9iamVjdC5wcm90b3R5''@;'; put 'put ''cGUuaGFzT3duUHJvcGVydHkuY2FsbChBLHYpJiZ5KEEscyx2KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGMoaCg3MzI1OCksaiksYyhoKDIyNTU4KSxqKSxjKGgoODk2NDQpLGopLGMoaCg0Nzg2KSxqKSxjKGgoMzY1MzUpLGopLGMoaCg3Njg4''@;'; put 'put ''OSksaiksYyhoKDMzMTkzKSxqKSxjKGgoNDU4ODApLGopLGMoaCgzNjMwOCksaiksYyhoKDQ4Njc5KSxqKSxjKGgoNTY1ODApLGopLGMoaCg4NTczNSksaiksYyhoKDk5Njg5KSxqKSxjKGgoNzMzODkpLGopLGMoaCg4MzI1KSxqKSxjKGgoMjM2MTcpLGopLGMoaCg3NzI4OCksaiksYyhoKDM2''@;'; put 'put ''MDI0KSxqKSxjKGgoNjc2NDApLGopLGMoaCgxODQyNCksaiksYyhoKDE4NzIwKSxqKSxjKGgoODEyOCksaiksYyhoKDU4MjkyKSxqKSxjKGgoMTAzNDMpLGopfSwzNjMwOChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDY1NjA2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01v''@;'; put 'put ''ZHVsZSIse3ZhbHVlOiEwfSksai5pc05vZGU9dm9pZCAwLGouaXNOb2RlPSgpPT50eXBlb2YgeTwidSImJm51bGwhPXkudmVyc2lvbnMmJm51bGwhPXkudmVyc2lvbnMubm9kZX0sNDg2NzkoZmUsail7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7''@;'; put 'put ''dmFsdWU6ITB9KSxqLmlzUmVsYXRpdmVQYXRoPXZvaWQgMCxqLmlzUmVsYXRpdmVQYXRoPXk9PiEheSYmIXkuc3RhcnRzV2l0aCgiLyIpfSw1NjU4MChmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouaXNVcmk9dm9p''@;'; put 'put ''ZCAwLGouaXNVcmk9eT0+L15cL2ZvbGRlcnNcL2ZvbGRlcnNcLy8udGVzdCh5KX0sODU3MzUoZmUsail7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmlzVXJsPXZvaWQgMCxqLmlzVXJsPXk9Pntjb25zdCBjPVsiaHR0cDoi''@;'; put 'put ''LCJodHRwczoiXTt0cnl7Y29uc3Qgcz1uZXcgVVJMKHkpO2lmKCFjLmluY2x1ZGVzKHMucHJvdG9jb2wpKXJldHVybiExfWNhdGNoe3JldHVybiExfXJldHVybiEwfX0sOTI5ODYoZmUsail7InVzZSBzdHJpY3QiO3ZhciBoPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih3LFMsTCxS''@;'; put 'put ''KXtyZXR1cm4gbmV3KEx8fChMPVByb21pc2UpKShmdW5jdGlvbihVLEgpe2Z1bmN0aW9uIFYoWSl7dHJ5e3ooUi5uZXh0KFkpKX1jYXRjaChGKXtIKEYpfX1mdW5jdGlvbiBOKFkpe3RyeXt6KFIudGhyb3coWSkpfWNhdGNoKEYpe0goRil9fWZ1bmN0aW9uIHooWSl7WS5kb25lP1UoWS52YWx1''@;'; put 'put ''ZSk6ZnVuY3Rpb24geChVKXtyZXR1cm4gVSBpbnN0YW5jZW9mIEw/VTpuZXcgTChmdW5jdGlvbihIKXtIKFUpfSl9KFkudmFsdWUpLnRoZW4oVixOKX16KChSPVIuYXBwbHkodyxTfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZToh''@;'; put 'put ''MH0pLGoub3BlbkxvZ2luUHJvbXB0PXZvaWQgMDt2YXIgeT1mdW5jdGlvbih3KXtyZXR1cm4gdy5zdHlsZXM9InNhc2pzQWRhcHRlclN0eWxlcyIsdy5vdmVybGF5PSJzYXNqc0FkYXB0ZXJMb2dpblByb21wdEJHIix3LmRpYWxvZz0ic2FzanNBZGFwdGVyTG9naW5Qcm9tcHQiLHd9KHl8fHt9''@;'; put 'put ''KTtjb25zdCBjPSJzYXNqcy1hZGFwdGVyIixzPXtwb3BVcDpgJHtjfXBvcFVwYCxwb3BVcEJHOmAke2N9cG9wVXBCR2B9O2oub3BlbkxvZ2luUHJvbXB0PSgpPT5uZXcgUHJvbWlzZSh3PT5oKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFM9ZG9jdW1lbnQuY3JlYXRl''@;'; put 'put ''RWxlbWVudCgic3R5bGUiKTtTLmlkPXkuc3R5bGVzLFMuaW5uZXJUZXh0PUM7Y29uc3QgTD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtMLmlkPXkub3ZlcmxheSxMLmNsYXNzTGlzdC5hZGQocy5wb3BVcEJHKTtjb25zdCBSPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO1Iu''@;'; put 'put ''aWQ9eS5kaWFsb2csUi5jbGFzc0xpc3QuYWRkKHMucG9wVXApO2NvbnN0IHg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaDEiKTt4LmlubmVyVGV4dD0iU2Vzc2lvbiBFeHBpcmVkISIsUi5hcHBlbmRDaGlsZCh4KTtjb25zdCBVPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLEg9ZG9j''@;'; put 'put ''dW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO0guaW5uZXJUZXh0PSJZb3UgbmVlZCB0byByZWxvZ2luLCBjbGljayBPSyB0byBsb2dpbi4iLFUuYXBwZW5kQ2hpbGQoSCksUi5hcHBlbmRDaGlsZChVKTtjb25zdCBWPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO1YuY2xhc3NM''@;'; put 'put ''aXN0LmFkZCgiY2FuY2VsIiksVi5pbm5lclRleHQ9IkNhbmNlbCIsVi5vbmNsaWNrPSgpPT57digpLHcoITEpfSxSLmFwcGVuZENoaWxkKFYpO2NvbnN0IE49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7Ti5jbGFzc0xpc3QuYWRkKCJjb25maXJtIiksTi5pbm5lclRleHQ9Ik9r''@;'; put 'put ''IixOLm9uY2xpY2s9KCk9Pnt2KCksdyghMCl9LFIuYXBwZW5kQ2hpbGQoTiksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFMpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoTCksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGls''@;'; put 'put ''ZChSKX0pKTtjb25zdCB2PSgpPT57T2JqZWN0LnZhbHVlcyh5KS5mb3JFYWNoKHc9Pnt2YXIgUztjb25zdCBMPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHcpO251bGw9PT0oUz1MPy5wYXJlbnROb2RlKXx8dm9pZCAwPT09U3x8Uy5yZW1vdmVDaGlsZChMKX0pLGRvY3VtZW50LmJvZHkuc3R5''@;'; put 'put ''bGUub3ZlcmZsb3c9ImF1dG8ifSxDPWBcbi4ke3MucG9wVXBCR30gLFxuLiR7cy5wb3BVcH0ge1xuICB6LWluZGV4OiAxMDAwMDtcbn1cbi4ke3MucG9wVXB9IHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJv''@;'; put 'put ''eC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogNDAlO1xuICBsZWZ0OiA1MCU7XG4gIHBhZGRpbmc6IDA7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC1mYW1pbHk6ICdQVCBTYW5zJywgc2Fucy1zZXJpZjtcbiAg''@;'; put 'put ''Y29sb3I6ICNmZmY7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgei1pbmRleDogOTk5O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMzAwcHg7XG4gIGhl''@;'; put 'put ''aWdodDogYXV0bztcbiAgbWF4LWhlaWdodDogMzAwcHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuLiR7cy5wb3BVcH0gPiBoMSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1i''@;'; put 'put ''b3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiA1cHg7XG4gIG1pbi1oZWlnaHQ6IDQwcHg7XG4gIGZvbnQtc2l6ZTogMS4yZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0''@;'; put 'put ''cmFuc3BhcmVudDtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xuICBib3JkZXItd2lkdGg6IDVweDtcbiAgYm9yZGVyLWNvbG9yOiBibGFjaztcbn1cbi4ke3MucG9wVXB9ID4gZGl2IHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogY2FsYygxMDAlIC0xMDhweCk7XG4gIG1hcmdpbjogMDtc''@;'; put 'put ''biAgZGlzcGxheTogYmxvY2s7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiA1JTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItd2lk''@;'; put 'put ''dGg6IDFweDtcbiAgYm9yZGVyLWNvbG9yOiAjY2NjO1xuICBib3JkZXItc3R5bGU6IG5vbmUgbm9uZSBzb2xpZCBub25lO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi4ke3MucG9wVXB9ID4gZGl2ID4gc3BhbiB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIGJveC1zaXppbmc6IGJvcmRl''@;'; put 'put ''ci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIHdpZHRoOiAzMDBweDtcbiAgaGVpZ2h0OiAxMDhweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtc''@;'; put 'put ''biAgYm9yZGVyLXN0eWxlOiBub25lO1xufVxuLiR7cy5wb3BVcH0gLmNhbmNlbCB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLiR7cy5wb3BVcH0gLmNvbmZpcm0ge1xuICBmbG9hdDogcmlnaHQ7XG59XG4uJHtzLnBvcFVwfSA+IGJ1dHRvbiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4g''@;'; put 'put ''IC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIHdpZHRoOiA1MCU7XG4gIGJvcmRlcjogMXB4IG5vbmUgI2NjYztcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtZmFt''@;'; put 'put ''aWx5OiBpbmhlcml0O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGhlaWdodDogNTBweDtcbiAgYmFja2dyb3VuZDogcmdiYSgxLCAxLCAxLCAwLjIpO1xufVxuLiR7cy5wb3BVcH0gPiBidXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG59XG4uJHtzLnBv''@;'; put 'put ''cFVwQkd9IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG9wYWNpdHk6IDAuOTU7XG4gIHotaW5kZXg6IDUw''@;'; put 'put ''O1xuICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQoIzAzNzhjZCwgIzAxMjAzNik7XG59XG5gfSw5OTY4OShmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGoubmVlZHNSZXRyeT12b2lkIDAsai5uZWVk''@;'; put 'put ''c1JldHJ5PXk9PiEheSYmKHkuaW5jbHVkZXMoJyJlcnJvckNvZGUiOjQwMycpJiZ5LmluY2x1ZGVzKCJfY3NyZiIpJiZ5LmluY2x1ZGVzKCJYLUNTUkYtVE9LRU4iKXx8eS5pbmNsdWRlcygnInN0YXR1cyI6NDAzJykmJnkuaW5jbHVkZXMoJyJlcnJvciI6IkZvcmJpZGRlbiInKXx8eS5pbmNs''@;'; put 'put ''dWRlcygnInN0YXR1cyI6NDQ5JykmJnkuaW5jbHVkZXMoIkF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3MsIHJldHJ5IG9yaWdpbmFsIHJlcXVlc3QiKSl9LDczMzg5KGZlLGopeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5wYXJz''@;'; put 'put ''ZUdlbmVyYXRlZENvZGU9dm9pZCAwLGoucGFyc2VHZW5lcmF0ZWRDb2RlPXk9Pnkuc3BsaXQoIlxuIikuZmlsdGVyKHY9PnYudHJpbSgpLnN0YXJ0c1dpdGgoIk1QUklOVCIpKS5qb2luKCJcclxuIil9LDgzMjUoZmUsail7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJf''@;'; put 'put ''X2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLnBhcnNlU2FzVml5YUxvZz12b2lkIDAsai5wYXJzZVNhc1ZpeWFMb2c9eT0+e2xldCBjO3RyeXtjPXkuaXRlbXM/eS5pdGVtcy5tYXAocz0+cy5saW5lKS5qb2luKCJcbiIpOkpTT04uc3RyaW5naWZ5KHkpfWNhdGNoKHMpe2NvbnNvbGUuZXJyb3Io''@;'; put 'put ''IkFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSBwYXJzaW5nIHRoZSBsb2cgcmVzcG9uc2UiLHMpLGM9eX1yZXR1cm4gY319LDIzNjE3KGZlLGopeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5wYXJzZVNvdXJjZUNvZGU9''@;'; put 'put ''dm9pZCAwLGoucGFyc2VTb3VyY2VDb2RlPXk9Pnkuc3BsaXQoIlxuIikuZmlsdGVyKEE9PkEudHJpbSgpLnN1YnN0cmluZygwLDEwKS50cmltU3RhcnQoKS5tYXRjaCgvXlxkLykpLmpvaW4oIlxyXG4iKX0sNzcyODgoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9dGhpcyYmdGhpcy5fX2F3''@;'; put 'put ''YWl0ZXJ8fGZ1bmN0aW9uKEEsdixDLHcpe3JldHVybiBuZXcoQ3x8KEM9UHJvbWlzZSkpKGZ1bmN0aW9uKEwsUil7ZnVuY3Rpb24geChWKXt0cnl7SCh3Lm5leHQoVikpfWNhdGNoKE4pe1IoTil9fWZ1bmN0aW9uIFUoVil7dHJ5e0gody50aHJvdyhWKSl9Y2F0Y2goTil7UihOKX19ZnVuY3Rp''@;'; put 'put ''b24gSChWKXtWLmRvbmU/TChWLnZhbHVlKTpmdW5jdGlvbiBTKEwpe3JldHVybiBMIGluc3RhbmNlb2YgQz9MOm5ldyBDKGZ1bmN0aW9uKFIpe1IoTCl9KX0oVi52YWx1ZSkudGhlbih4LFUpfUgoKHc9dy5hcHBseShBLHZ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''aiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlPXZvaWQgMDtjb25zdCBjPWgoMjkyNjYpO2oucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZT0oQSx2LEMpPT55KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IHc9QS5zcGxp''@;'; put 'put ''dCgvPGlmcmFtZSBzdHlsZT0id2lkdGg6IDk5JTsgaGVpZ2h0OiA1MDBweCIgc3JjPSJ8PGlmcmFtZSBzdHlsZT0id2lkdGg6IDk5JTsgaGVpZ2h0OiA1MDBweDsgYmFja2dyb3VuZC1jb2xvcjpDYW52YXM7IiBzcmM9LylbMV0sUz13P3cuc3BsaXQoLyI+PFwvaWZyYW1lPnw+PFwvaWZyYW1l''@;'; put 'put ''Pi8pWzBdOm51bGw7aWYoIVMpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB3ZWJvdXQgZmlsZSBVUkwuIik7cmV0dXJuIHYuZ2V0KEMrUyx2b2lkIDAsInRleHQvcGxhaW4iKS50aGVuKEw9PigwLGMuZ2V0VmFsaWRKc29uKShMLnJlc3VsdCkpfSl9LDM2MDI0KGZlLGosaCl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciB5PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih2LEMsdyxTKXtyZXR1cm4gbmV3KHd8fCh3PVByb21pc2UpKShmdW5jdGlvbihSLHgpe2Z1bmN0aW9uIFUoTil7dHJ5e1YoUy5uZXh0KE4pKX1jYXRjaCh6KXt4KHopfX1mdW5jdGlvbiBIKE4pe3RyeXtWKFMu''@;'; put 'put ''dGhyb3coTikpfWNhdGNoKHope3goeil9fWZ1bmN0aW9uIFYoTil7Ti5kb25lP1IoTi52YWx1ZSk6ZnVuY3Rpb24gTChSKXtyZXR1cm4gUiBpbnN0YW5jZW9mIHc/UjpuZXcgdyhmdW5jdGlvbih4KXt4KFIpfSl9KE4udmFsdWUpLnRoZW4oVSxIKX1WKChTPVMuYXBwbHkodixDfHxbXSkpLm5l''@;'; put 'put ''eHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGoucGFyc2VTYXNWaXlhTG9nRGVidWdSZXNwb25zZT12b2lkIDA7Y29uc3QgYz1oKDQ1ODgwKSxzPWgoNjc2NDApO2oucGFyc2VTYXNWaXlhTG9nRGVidWdSZXNwb25zZT12PT55KHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCJzdHJpbmciIT10eXBlb2YgdilyZXR1cm4gdjtjb25zdCBDPXYubWF0Y2goL25ldyBCbG9iXChcW2AoW1xzXFNdKj8pYFxdLFxzKlx7dHlwZTpccyonKD86YXBwbGljYXRpb25cL2pzb258dGV4dFwvcGxhaW4pJ1x9XCkvKTtpZighQyl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHdlYm91dCBibG9iIGluIGRlYnVnIGxvZyByZXNwb25zZS4iKTtjb25zdCB3PUNbMV0sUz13LmluY2x1ZGVzKCI+PndlYm91dEJFR0lOPDwiKT8oMCxzLnBhcnNlV2Vib3V0UmVzcG9uc2UpKHcpOnc7cmV0dXJuKDAsYy5nZXRWYWxpZEpz''@;'; put 'put ''b24pKFMpfSl9LDY3NjQwKGZlLGosaCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLnBhcnNlV2Vib3V0UmVzcG9uc2U9dm9pZCAwO2NvbnN0IHk9aCgxNzM4OCk7ai5wYXJzZVdlYm91dFJlc3BvbnNlPShzLEEpPT57bGV0''@;'; put 'put ''IHY9IiI7aWYocy5pbmNsdWRlcygiPj53ZWJvdXRCRUdJTjw8IikpdHJ5e3Y9cy5zcGxpdCgiPj53ZWJvdXRCRUdJTjw8IilbMV0uc3BsaXQoIj4+d2Vib3V0RU5EPDwiKVswXX1jYXRjaChDKXtpZihBKXRocm93IG5ldyB5LldlYm91dFJlc3BvbnNlRXJyb3IoQSk7dj0iIixjb25zb2xlLmVy''@;'; put 'put ''cm9yKEMpfXJldHVybiB2fX0sMzg1NDgoZmUsail7InVzZSBzdHJpY3QiO2ouZXh0cmFjdFVzZXJMb25nTmFtZVNhczk9dm9pZCAwO2NvbnN0IHk9WyJMb2cgT2ZmIl07ai5leHRyYWN0VXNlckxvbmdOYW1lU2FzOT1zPT57Y29uc3Qgdj1zPy5tYXRjaCgvInRpdGxlIjpccz8iLio/Ii8pO2xl''@;'; put 'put ''dCBDPXY/LlswXS5zcGxpdCgiOiIpWzFdLnRyaW0oKSx3PUM/LmluZGV4T2YoIiAiKTtyZXR1cm4gQz8oeS5tYXAoUz0+e2NvbnN0IEw9Qz8uaW5kZXhPZihTKXx8LTE7TD4tMSYmKHc9TCtTLmxlbmd0aCl9KSxDLnNsaWNlKHcsLTEpLnRyaW0oKSk6InVua25vd24ifX0sMTg0MjQoZmUsail7''@;'; put 'put ''InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLnNlcmlhbGl6ZT12b2lkIDAsai5zZXJpYWxpemU9eT0+e2NvbnN0IGM9W107Zm9yKGNvbnN0IHMgaW4geSlpZih5Lmhhc093blByb3BlcnR5KHMpKWlmKHlbc11pbnN0YW5jZW9m''@;'; put 'put ''IEFycmF5KWZvcihsZXQgQT0wLHY9eVtzXS5sZW5ndGg7QTx2O0ErKyljLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KHMpKyI9IitlbmNvZGVVUklDb21wb25lbnQoeVtzXVtBXSkpO2Vsc2UgYy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChzKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHlbc10p''@;'; put 'put ''KTtyZXR1cm4gYy5qb2luKCImIil9fSwxODcyMChmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouc3BsaXRDaHVua3M9dm9pZCAwLGouc3BsaXRDaHVua3M9eT0+e2NvbnN0IHM9TWF0aC5jZWlsKHkubGVuZ3RoLzE2''@;'; put 'put ''ZTMpLEE9bmV3IEFycmF5KHMpO2ZvcihsZXQgdj0wLEM9MDt2PHM7Kyt2LEMrPTE2ZTMpQVt2XT15LnN1YnN0cihDLDE2ZTMpO3JldHVybiBBfX0sODEyOChmZSxqKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGoudmFsaWRh''@;'; put 'put ''dGVJbnB1dD1qLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFPWouTU9SRV9JTkZPPXZvaWQgMCxqLk1PUkVfSU5GTz0iRm9yIG1vcmUgaW5mbyBzZWUgaHR0cHM6Ly9zYXNqcy5pby9zYXNqcy1hZGFwdGVyLyNyZXF1ZXN0LXJlc3BvbnNlIixqLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFPWBQYXJh''@;'; put 'put ''bWV0ZXIgZGF0YSBjb250YWlucyBpbnZhbGlkIHRhYmxlIHN0cnVjdHVyZS4gJHtqLk1PUkVfSU5GT31gLGoudmFsaWRhdGVJbnB1dD1jPT57aWYobnVsbD09PWMpcmV0dXJue3N0YXR1czohMCxtc2c6IiJ9O2lmKCJvYmplY3QiIT09eShjKSlyZXR1cm57c3RhdHVzOiExLG1zZzpqLklOVkFM''@;'; put 'put ''SURfVEFCTEVfU1RSVUNUVVJFfTtjb25zdCBzPUE9PkEubWF0Y2goL15cJC4qLykmJk9iamVjdC5rZXlzKGMpLmluY2x1ZGVzKEEucmVwbGFjZSgvXlwkLywiIikpO2Zvcihjb25zdCBBIGluIGMpe2lmKCFBLm1hdGNoKC9eW2EtekEtWl9dLykmJiFzKEEpKXJldHVybntzdGF0dXM6ITEsbXNn''@;'; put 'put ''OiJGaXJzdCBsZXR0ZXIgb2YgdGFibGUgc2hvdWxkIGJlIGFscGhhYmV0IG9yIHVuZGVyc2NvcmUuIn07aWYoIUEubWF0Y2goL15bYS16QS1aX11bYS16QS1aMC05X10qJC8pJiYhcyhBKSlyZXR1cm57c3RhdHVzOiExLG1zZzoiVGFibGUgbmFtZSBzaG91bGQgYmUgYWxwaGFudW1lcmljLiJ9''@;'; put 'put ''O2lmKEEubGVuZ3RoPjMyKXJldHVybntzdGF0dXM6ITEsbXNnOiJNYXhpbXVtIGxlbmd0aCBmb3IgdGFibGUgbmFtZSBjb3VsZCBiZSAzMiBjaGFyYWN0ZXJzLiJ9O2lmKCJBcnJheSIhPT15KGNbQV0pJiYhcyhBKSlyZXR1cm57c3RhdHVzOiExLG1zZzpqLklOVkFMSURfVEFCTEVfU1RSVUNU''@;'; put 'put ''VVJFfTtpZihBcnJheS5pc0FycmF5KGNbQV0pKWZvcihjb25zdCB2IG9mIGNbQV0pe2lmKCJvYmplY3QiIT09eSh2KSlyZXR1cm57c3RhdHVzOiExLG1zZzpgVGFibGUgJHtBfSBjb250YWlucyBpbnZhbGlkIHN0cnVjdHVyZS4gJHtqLk1PUkVfSU5GT31gfTt7Y29uc3QgQz1PYmplY3Qua2V5''@;'; put 'put ''cyh2KTtmb3IoY29uc3QgdyBvZiBDKWlmKHZvaWQgMD09PXZbd10pcmV0dXJue3N0YXR1czohMSxtc2c6YEEgcm93IGluIHRhYmxlICR7QX0gY29udGFpbnMgaW52YWxpZCB2YWx1ZS4gQ2FuJ3QgYXNzaWduIHVuZGVmaW5lZCB0byAke3d9LmB9fX19cmV0dXJue3N0YXR1czohMCxtc2c6IiJ9''@;'; put 'put ''fTtjb25zdCB5PWM9PkFycmF5LmlzQXJyYXkoYyk/IkFycmF5Ijp0eXBlb2YgY30sNzQzNzIoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg2OTY3NSkscz1oKDM2NTU2KSgiVHlwZWRBcnJheS5wcm90b3R5cGUuYnVmZmVyIiwhMCksQT1oKDM1NjgwKTtmZS5leHBvcnRzPXN8fGZ1bmN0''@;'; put 'put ''aW9uKEMpe2lmKCFBKEMpKXRocm93IG5ldyB5KCJOb3QgYSBUeXBlZCBBcnJheSIpO3JldHVybiBDLmJ1ZmZlcn19LDQxMjM2KGZlLGopeyJ1c2Ugc3RyaWN0IjtqLmZyb21DYWxsYmFjaz1mdW5jdGlvbihoKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKC4uLnkpe2lm''@;'; put 'put ''KCJmdW5jdGlvbiIhPXR5cGVvZiB5W3kubGVuZ3RoLTFdKXJldHVybiBuZXcgUHJvbWlzZSgoYyxzKT0+e3kucHVzaCgoQSx2KT0+bnVsbCE9QT9zKEEpOmModikpLGguYXBwbHkodGhpcyx5KX0pO2guYXBwbHkodGhpcyx5KX0sIm5hbWUiLHt2YWx1ZTpoLm5hbWV9KX0sai5mcm9tUHJvbWlz''@;'; put 'put ''ZT1mdW5jdGlvbihoKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKC4uLnkpe2NvbnN0IGM9eVt5Lmxlbmd0aC0xXTtpZigiZnVuY3Rpb24iIT10eXBlb2YgYylyZXR1cm4gaC5hcHBseSh0aGlzLHkpO3kucG9wKCksaC5hcHBseSh0aGlzLHkpLnRoZW4ocz0+YyhudWxs''@;'; put 'put ''LHMpLGMpfSwibmFtZSIse3ZhbHVlOmgubmFtZX0pfX0sNjExNjAoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg5MjA2MyksYz1oKDczOTkyKSxzPS9eW1x4MDAtXHgyMFx1MDBhMFx1MTY4MFx1MjAwMC1cdTIwMGFcdTIwMjhcdTIwMjlcdTIwMmZcdTIwNWZcdTMwMDBcdWZlZmZdKy8s''@;'; put 'put ''QT0vW1xuXHJcdF0vZyx2PS9eW0EtWmEtel1bQS1aYS16MC05Ky0uXSo6XC9cLy8sQz0vOlxkKyQvLHc9L14oW2Etel1bYS16MC05ListXSo6KT8oXC9cLyk/KFtcXC9dKyk/KFtcU1xzXSopL2ksUz0vXlthLXpBLVpdOi87ZnVuY3Rpb24gTChXKXtyZXR1cm4oV3x8IiIpLnRvU3RyaW5nKCku''@;'; put 'put ''cmVwbGFjZShzLCIiKX12YXIgUj1bWyIjIiwiaGFzaCJdLFsiPyIsInF1ZXJ5Il0sZnVuY3Rpb24ocSxyZSl7cmV0dXJuIEgocmUucHJvdG9jb2wpP3EucmVwbGFjZSgvXFwvZywiLyIpOnF9LFsiLyIsInBhdGhuYW1lIl0sWyJAIiwiYXV0aCIsMV0sW05hTiwiaG9zdCIsdm9pZCAwLDEsMV0s''@;'; put 'put ''Wy86KFxkKikkLywicG9ydCIsdm9pZCAwLDFdLFtOYU4sImhvc3RuYW1lIix2b2lkIDAsMSwxXV0seD17aGFzaDoxLHF1ZXJ5OjF9O2Z1bmN0aW9uIFUoVyl7dmFyIHE7cT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGguZzwidSI/aC5nOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9''@;'; put 'put ''O3ZhciBJZSxtZT17fSxDZT10eXBlb2YoVz1XfHxxLmxvY2F0aW9ufHx7fSk7aWYoImJsb2I6Ij09PVcucHJvdG9jb2wpbWU9bmV3IHoodW5lc2NhcGUoVy5wYXRobmFtZSkse30pO2Vsc2UgaWYoInN0cmluZyI9PT1DZSlmb3IoSWUgaW4gbWU9bmV3IHooVyx7fSkseClkZWxldGUgbWVbSWVd''@;'; put 'put ''O2Vsc2UgaWYoIm9iamVjdCI9PT1DZSl7Zm9yKEllIGluIFcpSWUgaW4geHx8KG1lW0llXT1XW0llXSk7dm9pZCAwPT09bWUuc2xhc2hlcyYmKG1lLnNsYXNoZXM9di50ZXN0KFcuaHJlZikpfXJldHVybiBtZX1mdW5jdGlvbiBIKFcpe3JldHVybiJmaWxlOiI9PT1XfHwiZnRwOiI9PT1XfHwi''@;'; put 'put ''aHR0cDoiPT09V3x8Imh0dHBzOiI9PT1XfHwid3M6Ij09PVd8fCJ3c3M6Ij09PVd9ZnVuY3Rpb24gVihXLHEpe1c9KFc9TChXKSkucmVwbGFjZShBLCIiKSxxPXF8fHt9O3ZhciBxZSxyZT13LmV4ZWMoVyksbWU9cmVbMV0/cmVbMV0udG9Mb3dlckNhc2UoKToiIixDZT0hIXJlWzJdLEllPSEh''@;'; put 'put ''cmVbM10sa2U9MDtyZXR1cm4gQ2U/SWU/KHFlPXJlWzJdK3JlWzNdK3JlWzRdLGtlPXJlWzJdLmxlbmd0aCtyZVszXS5sZW5ndGgpOihxZT1yZVsyXStyZVs0XSxrZT1yZVsyXS5sZW5ndGgpOkllPyhxZT1yZVszXStyZVs0XSxrZT1yZVszXS5sZW5ndGgpOnFlPXJlWzRdLCJmaWxlOiI9PT1t''@;'; put 'put ''ZT9rZT49MiYmKHFlPXFlLnNsaWNlKDIpKTpIKG1lKT9xZT1yZVs0XTptZT9DZSYmKHFlPXFlLnNsaWNlKDIpKTprZT49MiYmSChxLnByb3RvY29sKSYmKHFlPXJlWzRdKSx7cHJvdG9jb2w6bWUsc2xhc2hlczpDZXx8SChtZSksc2xhc2hlc0NvdW50OmtlLHJlc3Q6cWV9fWZ1bmN0aW9uIHoo''@;'; put 'put ''VyxxLHJlKXtpZihXPShXPUwoVykpLnJlcGxhY2UoQSwiIiksISh0aGlzIGluc3RhbmNlb2YgeikpcmV0dXJuIG5ldyB6KFcscSxyZSk7dmFyIG1lLENlLEllLGtlLHFlLFgsZj1SLnNsaWNlKCksYj10eXBlb2YgcSxrPXRoaXMsTT0wO2Zvcigib2JqZWN0IiE9PWImJiJzdHJpbmciIT09YiYm''@;'; put 'put ''KHJlPXEscT1udWxsKSxyZSYmImZ1bmN0aW9uIiE9dHlwZW9mIHJlJiYocmU9Yy5wYXJzZSksbWU9IShDZT1WKFd8fCIiLHE9VShxKSkpLnByb3RvY29sJiYhQ2Uuc2xhc2hlcyxrLnNsYXNoZXM9Q2Uuc2xhc2hlc3x8bWUmJnEuc2xhc2hlcyxrLnByb3RvY29sPUNlLnByb3RvY29sfHxxLnBy''@;'; put 'put ''b3RvY29sfHwiIixXPUNlLnJlc3QsKCJmaWxlOiI9PT1DZS5wcm90b2NvbCYmKDIhPT1DZS5zbGFzaGVzQ291bnR8fFMudGVzdChXKSl8fCFDZS5zbGFzaGVzJiYoQ2UucHJvdG9jb2x8fENlLnNsYXNoZXNDb3VudDwyfHwhSChrLnByb3RvY29sKSkpJiYoZlszXT1bLyguKikvLCJwYXRobmFt''@;'; put 'put ''ZSJdKTtNPGYubGVuZ3RoO00rKykiZnVuY3Rpb24iIT10eXBlb2Yoa2U9ZltNXSk/KFg9a2VbMV0sKEllPWtlWzBdKSE9SWU/a1tYXT1XOiJzdHJpbmciPT10eXBlb2YgSWU/fihxZT0iQCI9PT1JZT9XLmxhc3RJbmRleE9mKEllKTpXLmluZGV4T2YoSWUpKSYmKCJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''a2VbMl0/KGtbWF09Vy5zbGljZSgwLHFlKSxXPVcuc2xpY2UocWUra2VbMl0pKTooa1tYXT1XLnNsaWNlKHFlKSxXPVcuc2xpY2UoMCxxZSkpKToocWU9SWUuZXhlYyhXKSkmJihrW1hdPXFlWzFdLFc9Vy5zbGljZSgwLHFlLmluZGV4KSksa1tYXT1rW1hdfHxtZSYma2VbM10mJnFbWF18fCIi''@;'; put 'put ''LGtlWzRdJiYoa1tYXT1rW1hdLnRvTG93ZXJDYXNlKCkpKTpXPWtlKFcsayk7cmUmJihrLnF1ZXJ5PXJlKGsucXVlcnkpKSxtZSYmcS5zbGFzaGVzJiYiLyIhPT1rLnBhdGhuYW1lLmNoYXJBdCgwKSYmKCIiIT09ay5wYXRobmFtZXx8IiIhPT1xLnBhdGhuYW1lKSYmKGsucGF0aG5hbWU9ZnVu''@;'; put 'put ''Y3Rpb24gTihXLHEpe2lmKCIiPT09VylyZXR1cm4gcTtmb3IodmFyIHJlPShxfHwiLyIpLnNwbGl0KCIvIikuc2xpY2UoMCwtMSkuY29uY2F0KFcuc3BsaXQoIi8iKSksbWU9cmUubGVuZ3RoLENlPXJlW21lLTFdLEllPSExLGtlPTA7bWUtLTspIi4iPT09cmVbbWVdP3JlLnNwbGljZShtZSwx''@;'; put 'put ''KToiLi4iPT09cmVbbWVdPyhyZS5zcGxpY2UobWUsMSksa2UrKyk6a2UmJigwPT09bWUmJihJZT0hMCkscmUuc3BsaWNlKG1lLDEpLGtlLS0pO3JldHVybiBJZSYmcmUudW5zaGlmdCgiIiksKCIuIj09PUNlfHwiLi4iPT09Q2UpJiZyZS5wdXNoKCIiKSxyZS5qb2luKCIvIil9KGsucGF0aG5h''@;'; put 'put ''bWUscS5wYXRobmFtZSkpLCIvIiE9PWsucGF0aG5hbWUuY2hhckF0KDApJiZIKGsucHJvdG9jb2wpJiYoay5wYXRobmFtZT0iLyIray5wYXRobmFtZSkseShrLnBvcnQsay5wcm90b2NvbCl8fChrLmhvc3Q9ay5ob3N0bmFtZSxrLnBvcnQ9IiIpLGsudXNlcm5hbWU9ay5wYXNzd29yZD0iIixr''@;'; put 'put ''LmF1dGgmJih+KHFlPWsuYXV0aC5pbmRleE9mKCI6IikpPyhrLnVzZXJuYW1lPWsuYXV0aC5zbGljZSgwLHFlKSxrLnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoay51c2VybmFtZSkpLGsucGFzc3dvcmQ9ay5hdXRoLnNsaWNlKHFlKzEpLGsucGFzc3dv''@;'; put 'put ''cmQ9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudChrLnBhc3N3b3JkKSkpOmsudXNlcm5hbWU9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudChrLmF1dGgpKSxrLmF1dGg9ay5wYXNzd29yZD9rLnVzZXJuYW1lKyI6IitrLnBhc3N3b3JkOmsudXNlcm5h''@;'; put 'put ''bWUpLGsub3JpZ2luPSJmaWxlOiIhPT1rLnByb3RvY29sJiZIKGsucHJvdG9jb2wpJiZrLmhvc3Q/ay5wcm90b2NvbCsiLy8iK2suaG9zdDoibnVsbCIsay5ocmVmPWsudG9TdHJpbmcoKX16LnByb3RvdHlwZT17c2V0OmZ1bmN0aW9uIFkoVyxxLHJlKXt2YXIgbWU9dGhpcztzd2l0Y2goVyl7''@;'; put 'put ''Y2FzZSJxdWVyeSI6InN0cmluZyI9PXR5cGVvZiBxJiZxLmxlbmd0aCYmKHE9KHJlfHxjLnBhcnNlKShxKSksbWVbV109cTticmVhaztjYXNlInBvcnQiOm1lW1ddPXEseShxLG1lLnByb3RvY29sKT9xJiYobWUuaG9zdD1tZS5ob3N0bmFtZSsiOiIrcSk6KG1lLmhvc3Q9bWUuaG9zdG5hbWUs''@;'; put 'put ''bWVbV109IiIpO2JyZWFrO2Nhc2UiaG9zdG5hbWUiOm1lW1ddPXEsbWUucG9ydCYmKHErPSI6IittZS5wb3J0KSxtZS5ob3N0PXE7YnJlYWs7Y2FzZSJob3N0IjptZVtXXT1xLEMudGVzdChxKT8ocT1xLnNwbGl0KCI6IiksbWUucG9ydD1xLnBvcCgpLG1lLmhvc3RuYW1lPXEuam9pbigiOiIp''@;'; put 'put ''KToobWUuaG9zdG5hbWU9cSxtZS5wb3J0PSIiKTticmVhaztjYXNlInByb3RvY29sIjptZS5wcm90b2NvbD1xLnRvTG93ZXJDYXNlKCksbWUuc2xhc2hlcz0hcmU7YnJlYWs7Y2FzZSJwYXRobmFtZSI6Y2FzZSJoYXNoIjppZihxKXt2YXIgQ2U9InBhdGhuYW1lIj09PVc/Ii8iOiIjIjttZVtX''@;'; put 'put ''XT1xLmNoYXJBdCgwKSE9PUNlP0NlK3E6cX1lbHNlIG1lW1ddPXE7YnJlYWs7Y2FzZSJ1c2VybmFtZSI6Y2FzZSJwYXNzd29yZCI6bWVbV109ZW5jb2RlVVJJQ29tcG9uZW50KHEpO2JyZWFrO2Nhc2UiYXV0aCI6dmFyIEllPXEuaW5kZXhPZigiOiIpO35JZT8obWUudXNlcm5hbWU9cS5zbGlj''@;'; put 'put ''ZSgwLEllKSxtZS51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KG1lLnVzZXJuYW1lKSksbWUucGFzc3dvcmQ9cS5zbGljZShJZSsxKSxtZS5wYXNzd29yZD1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KG1lLnBhc3N3b3JkKSkpOm1l''@;'; put 'put ''LnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQocSkpfWZvcih2YXIga2U9MDtrZTxSLmxlbmd0aDtrZSsrKXt2YXIgcWU9UltrZV07cWVbNF0mJihtZVtxZVsxXV09bWVbcWVbMV1dLnRvTG93ZXJDYXNlKCkpfXJldHVybiBtZS5hdXRoPW1lLnBhc3N3b3Jk''@;'; put 'put ''P21lLnVzZXJuYW1lKyI6IittZS5wYXNzd29yZDptZS51c2VybmFtZSxtZS5vcmlnaW49ImZpbGU6IiE9PW1lLnByb3RvY29sJiZIKG1lLnByb3RvY29sKSYmbWUuaG9zdD9tZS5wcm90b2NvbCsiLy8iK21lLmhvc3Q6Im51bGwiLG1lLmhyZWY9bWUudG9TdHJpbmcoKSxtZX0sdG9TdHJpbmc6''@;'; put 'put ''ZnVuY3Rpb24gRihXKXsoIVd8fCJmdW5jdGlvbiIhPXR5cGVvZiBXKSYmKFc9Yy5zdHJpbmdpZnkpO3ZhciBxLHJlPXRoaXMsbWU9cmUuaG9zdCxDZT1yZS5wcm90b2NvbDtDZSYmIjoiIT09Q2UuY2hhckF0KENlLmxlbmd0aC0xKSYmKENlKz0iOiIpO3ZhciBJZT1DZSsocmUucHJvdG9jb2wm''@;'; put 'put ''JnJlLnNsYXNoZXN8fEgocmUucHJvdG9jb2wpPyIvLyI6IiIpO3JldHVybiByZS51c2VybmFtZT8oSWUrPXJlLnVzZXJuYW1lLHJlLnBhc3N3b3JkJiYoSWUrPSI6IityZS5wYXNzd29yZCksSWUrPSJAIik6cmUucGFzc3dvcmQ/KEllKz0iOiIrcmUucGFzc3dvcmQsSWUrPSJAIik6ImZpbGU6''@;'; put 'put ''IiE9PXJlLnByb3RvY29sJiZIKHJlLnByb3RvY29sKSYmIW1lJiYiLyIhPT1yZS5wYXRobmFtZSYmKEllKz0iQCIpLCgiOiI9PT1tZVttZS5sZW5ndGgtMV18fEMudGVzdChyZS5ob3N0bmFtZSkmJiFyZS5wb3J0KSYmKG1lKz0iOiIpLEllKz1tZStyZS5wYXRobmFtZSwocT0ib2JqZWN0Ij09''@;'; put 'put ''dHlwZW9mIHJlLnF1ZXJ5P1cocmUucXVlcnkpOnJlLnF1ZXJ5KSYmKEllKz0iPyIhPT1xLmNoYXJBdCgwKT8iPyIrcTpxKSxyZS5oYXNoJiYoSWUrPXJlLmhhc2gpLEllfX0sei5leHRyYWN0UHJvdG9jb2w9Vix6LmxvY2F0aW9uPVUsei50cmltTGVmdD1MLHoucXM9YyxmZS5leHBvcnRzPXp9''@;'; put 'put ''LDk0NjQzKGZlLGosaCl7ZnVuY3Rpb24gYyhzKXt0cnl7aWYoIWguZy5sb2NhbFN0b3JhZ2UpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9dmFyIEE9aC5nLmxvY2FsU3RvcmFnZVtzXTtyZXR1cm4gbnVsbCE9QSYmInRydWUiPT09U3RyaW5nKEEpLnRvTG93ZXJDYXNlKCl9ZmUuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbiB5KHMsQSl7aWYoYygibm9EZXByZWNhdGlvbiIpKXJldHVybiBzO3ZhciB2PSExO3JldHVybiBmdW5jdGlvbiBDKCl7aWYoIXYpe2lmKGMoInRocm93RGVwcmVjYXRpb24iKSl0aHJvdyBuZXcgRXJyb3IoQSk7YygidHJhY2VEZXByZWNhdGlvbiIpP2NvbnNvbGUudHJhY2UoQSk6''@;'; put 'put ''Y29uc29sZS53YXJuKEEpLHY9ITB9cmV0dXJuIHMuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19LDgxMTM1KGZlKXtmZS5leHBvcnRzPWZ1bmN0aW9uKGgpe3JldHVybiBoJiYib2JqZWN0Ij09dHlwZW9mIGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBoLmNvcHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBo''@;'; put 'put ''LmZpbGwmJiJmdW5jdGlvbiI9PXR5cGVvZiBoLnJlYWRVSW50OH19LDQ5MDMyKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNDcyNDQpLGM9aCg0ODE4NCkscz1oKDI1NzY3KSxBPWgoMzU2ODApO2Z1bmN0aW9uIHYod2Upe3JldHVybiB3ZS5jYWxsLmJpbmQod2UpfXZhciBDPXR5cGVv''@;'; put 'put ''ZiBCaWdJbnQ8InUiLHc9dHlwZW9mIFN5bWJvbDwidSIsUz12KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcpLEw9dihOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YpLFI9dihTdHJpbmcucHJvdG90eXBlLnZhbHVlT2YpLHg9dihCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mKTtpZihDKXZhciBV''@;'; put 'put ''PXYoQmlnSW50LnByb3RvdHlwZS52YWx1ZU9mKTtpZih3KXZhciBIPXYoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtmdW5jdGlvbiBWKHdlLEplKXtpZigib2JqZWN0IiE9dHlwZW9mIHdlKXJldHVybiExO3RyeXtyZXR1cm4gSmUod2UpLCEwfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBm''@;'; put 'put ''KHdlKXtyZXR1cm4iW29iamVjdCBNYXBdIj09PVMod2UpfWZ1bmN0aW9uIGsod2Upe3JldHVybiJbb2JqZWN0IFNldF0iPT09Uyh3ZSl9ZnVuY3Rpb24gQih3ZSl7cmV0dXJuIltvYmplY3QgV2Vha01hcF0iPT09Uyh3ZSl9ZnVuY3Rpb24gRyh3ZSl7cmV0dXJuIltvYmplY3QgV2Vha1NldF0i''@;'; put 'put ''PT09Uyh3ZSl9ZnVuY3Rpb24gcCh3ZSl7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PVMod2UpfWZ1bmN0aW9uIEkod2Upe3JldHVybiEodHlwZW9mIEFycmF5QnVmZmVyPiJ1IikmJihwLndvcmtpbmc/cCh3ZSk6d2UgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil9ZnVuY3Rpb24gdWUo''@;'; put 'put ''d2Upe3JldHVybiJbb2JqZWN0IERhdGFWaWV3XSI9PT1TKHdlKX1mdW5jdGlvbiBuZSh3ZSl7cmV0dXJuISh0eXBlb2YgRGF0YVZpZXc+InUiKSYmKHVlLndvcmtpbmc/dWUod2UpOndlIGluc3RhbmNlb2YgRGF0YVZpZXcpfWouaXNBcmd1bWVudHNPYmplY3Q9eSxqLmlzR2VuZXJhdG9yRnVu''@;'; put 'put ''Y3Rpb249YyxqLmlzVHlwZWRBcnJheT1BLGouaXNQcm9taXNlPWZ1bmN0aW9uIE4od2Upe3JldHVybiB0eXBlb2YgUHJvbWlzZTwidSImJndlIGluc3RhbmNlb2YgUHJvbWlzZXx8bnVsbCE9PXdlJiYib2JqZWN0Ij09dHlwZW9mIHdlJiYiZnVuY3Rpb24iPT10eXBlb2Ygd2UudGhlbiYmImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIHdlLmNhdGNofSxqLmlzQXJyYXlCdWZmZXJWaWV3PWZ1bmN0aW9uIHood2Upe3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KHdlKTpBKHdlKXx8bmUod2UpfSxqLmlzVWludDhBcnJheT1m''@;'; put 'put ''dW5jdGlvbiBZKHdlKXtyZXR1cm4iVWludDhBcnJheSI9PT1zKHdlKX0sai5pc1VpbnQ4Q2xhbXBlZEFycmF5PWZ1bmN0aW9uIEYod2Upe3JldHVybiJVaW50OENsYW1wZWRBcnJheSI9PT1zKHdlKX0sai5pc1VpbnQxNkFycmF5PWZ1bmN0aW9uIFcod2Upe3JldHVybiJVaW50MTZBcnJheSI9''@;'; put 'put ''PT1zKHdlKX0sai5pc1VpbnQzMkFycmF5PWZ1bmN0aW9uIHEod2Upe3JldHVybiJVaW50MzJBcnJheSI9PT1zKHdlKX0sai5pc0ludDhBcnJheT1mdW5jdGlvbiByZSh3ZSl7cmV0dXJuIkludDhBcnJheSI9PT1zKHdlKX0sai5pc0ludDE2QXJyYXk9ZnVuY3Rpb24gbWUod2Upe3JldHVybiJJ''@;'; put 'put ''bnQxNkFycmF5Ij09PXMod2UpfSxqLmlzSW50MzJBcnJheT1mdW5jdGlvbiBDZSh3ZSl7cmV0dXJuIkludDMyQXJyYXkiPT09cyh3ZSl9LGouaXNGbG9hdDMyQXJyYXk9ZnVuY3Rpb24gSWUod2Upe3JldHVybiJGbG9hdDMyQXJyYXkiPT09cyh3ZSl9LGouaXNGbG9hdDY0QXJyYXk9ZnVuY3Rp''@;'; put 'put ''b24ga2Uod2Upe3JldHVybiJGbG9hdDY0QXJyYXkiPT09cyh3ZSl9LGouaXNCaWdJbnQ2NEFycmF5PWZ1bmN0aW9uIHFlKHdlKXtyZXR1cm4iQmlnSW50NjRBcnJheSI9PT1zKHdlKX0sai5pc0JpZ1VpbnQ2NEFycmF5PWZ1bmN0aW9uIFgod2Upe3JldHVybiJCaWdVaW50NjRBcnJheSI9PT1z''@;'; put 'put ''KHdlKX0sZi53b3JraW5nPXR5cGVvZiBNYXA8InUiJiZmKG5ldyBNYXApLGouaXNNYXA9ZnVuY3Rpb24gYih3ZSl7cmV0dXJuISh0eXBlb2YgTWFwPiJ1IikmJihmLndvcmtpbmc/Zih3ZSk6d2UgaW5zdGFuY2VvZiBNYXApfSxrLndvcmtpbmc9dHlwZW9mIFNldDwidSImJmsobmV3IFNldCks''@;'; put 'put ''ai5pc1NldD1mdW5jdGlvbiBNKHdlKXtyZXR1cm4hKHR5cGVvZiBTZXQ+InUiKSYmKGsud29ya2luZz9rKHdlKTp3ZSBpbnN0YW5jZW9mIFNldCl9LEIud29ya2luZz10eXBlb2YgV2Vha01hcDwidSImJkIobmV3IFdlYWtNYXApLGouaXNXZWFrTWFwPWZ1bmN0aW9uIEsod2Upe3JldHVybiEo''@;'; put 'put ''dHlwZW9mIFdlYWtNYXA+InUiKSYmKEIud29ya2luZz9CKHdlKTp3ZSBpbnN0YW5jZW9mIFdlYWtNYXApfSxHLndvcmtpbmc9dHlwZW9mIFdlYWtTZXQ8InUiJiZHKG5ldyBXZWFrU2V0KSxqLmlzV2Vha1NldD1mdW5jdGlvbiBEKHdlKXtyZXR1cm4gRyh3ZSl9LHAud29ya2luZz10eXBlb2Yg''@;'; put 'put ''QXJyYXlCdWZmZXI8InUiJiZwKG5ldyBBcnJheUJ1ZmZlciksai5pc0FycmF5QnVmZmVyPUksdWUud29ya2luZz10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgRGF0YVZpZXc8InUiJiZ1ZShuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpLDAsMSkpLGouaXNEYXRhVmlldz1u''@;'; put 'put ''ZTt2YXIgX2U9dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1Ij9TaGFyZWRBcnJheUJ1ZmZlcjp2b2lkIDA7ZnVuY3Rpb24gUGUod2Upe3JldHVybiJbb2JqZWN0IFNoYXJlZEFycmF5QnVmZmVyXSI9PT1TKHdlKX1mdW5jdGlvbiBvdCh3ZSl7cmV0dXJuISh0eXBlb2YgX2U+InUiKSYmKHR5''@;'; put 'put ''cGVvZiBQZS53b3JraW5nPiJ1IiYmKFBlLndvcmtpbmc9UGUobmV3IF9lKSksUGUud29ya2luZz9QZSh3ZSk6d2UgaW5zdGFuY2VvZiBfZSl9ZnVuY3Rpb24gamUod2Upe3JldHVybiBWKHdlLEwpfWZ1bmN0aW9uIEFlKHdlKXtyZXR1cm4gVih3ZSxSKX1mdW5jdGlvbiBEZSh3ZSl7cmV0dXJu''@;'; put 'put ''IFYod2UseCl9ZnVuY3Rpb24gRmUod2Upe3JldHVybiBDJiZWKHdlLFUpfWZ1bmN0aW9uIGdlKHdlKXtyZXR1cm4gdyYmVih3ZSxIKX1qLmlzU2hhcmVkQXJyYXlCdWZmZXI9b3Qsai5pc0FzeW5jRnVuY3Rpb249ZnVuY3Rpb24gbHQod2Upe3JldHVybiJbb2JqZWN0IEFzeW5jRnVuY3Rpb25d''@;'; put 'put ''Ij09PVMod2UpfSxqLmlzTWFwSXRlcmF0b3I9ZnVuY3Rpb24gZHQod2Upe3JldHVybiJbb2JqZWN0IE1hcCBJdGVyYXRvcl0iPT09Uyh3ZSl9LGouaXNTZXRJdGVyYXRvcj1mdW5jdGlvbiBSZSh3ZSl7cmV0dXJuIltvYmplY3QgU2V0IEl0ZXJhdG9yXSI9PT1TKHdlKX0sai5pc0dlbmVyYXRv''@;'; put 'put ''ck9iamVjdD1mdW5jdGlvbiBhZSh3ZSl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSI9PT1TKHdlKX0sai5pc1dlYkFzc2VtYmx5Q29tcGlsZWRNb2R1bGU9ZnVuY3Rpb24geGUod2Upe3JldHVybiJbb2JqZWN0IFdlYkFzc2VtYmx5Lk1vZHVsZV0iPT09Uyh3ZSl9LGouaXNOdW1iZXJPYmpl''@;'; put 'put ''Y3Q9amUsai5pc1N0cmluZ09iamVjdD1BZSxqLmlzQm9vbGVhbk9iamVjdD1EZSxqLmlzQmlnSW50T2JqZWN0PUZlLGouaXNTeW1ib2xPYmplY3Q9Z2Usai5pc0JveGVkUHJpbWl0aXZlPWZ1bmN0aW9uIGNlKHdlKXtyZXR1cm4gamUod2UpfHxBZSh3ZSl8fERlKHdlKXx8RmUod2UpfHxnZSh3''@;'; put 'put ''ZSl9LGouaXNBbnlBcnJheUJ1ZmZlcj1mdW5jdGlvbiBoZSh3ZSl7cmV0dXJuIHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmKEkod2UpfHxvdCh3ZSkpfSxbImlzUHJveHkiLCJpc0V4dGVybmFsIiwiaXNNb2R1bGVOYW1lc3BhY2VPYmplY3QiXS5mb3JFYWNoKGZ1bmN0aW9uKHdlKXtPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoaix3ZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcih3ZSsiIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdXNlcmxhbmQiKX19KX0pfSw0MDUzNyhmZSxqLGgpe3ZhciB5PWgoNjU2MDYpLGM9T2JqZWN0LmdldE93blByb3BlcnR5RGVz''@;'; put 'put ''Y3JpcHRvcnN8fGZ1bmN0aW9uKF9lKXtmb3IodmFyIFBlPU9iamVjdC5rZXlzKF9lKSxvdD17fSxsdD0wO2x0PFBlLmxlbmd0aDtsdCsrKW90W1BlW2x0XV09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihfZSxQZVtsdF0pO3JldHVybiBvdH0scz0vJVtzZGolXS9nO2ouZm9ybWF0''@;'; put 'put ''PWZ1bmN0aW9uKG5lKXtpZighbWUobmUpKXtmb3IodmFyIF9lPVtdLFBlPTA7UGU8YXJndW1lbnRzLmxlbmd0aDtQZSsrKV9lLnB1c2godyhhcmd1bWVudHNbUGVdKSk7cmV0dXJuIF9lLmpvaW4oIiAiKX1QZT0xO2Zvcih2YXIgb3Q9YXJndW1lbnRzLGx0PW90Lmxlbmd0aCxkdD1TdHJpbmco''@;'; put 'put ''bmUpLnJlcGxhY2UocyxmdW5jdGlvbihhZSl7aWYoIiUlIj09PWFlKXJldHVybiIlIjtpZihQZT49bHQpcmV0dXJuIGFlO3N3aXRjaChhZSl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhvdFtQZSsrXSk7Y2FzZSIlZCI6cmV0dXJuIE51bWJlcihvdFtQZSsrXSk7Y2FzZSIlaiI6dHJ5e3JldHVy''@;'; put 'put ''biBKU09OLnN0cmluZ2lmeShvdFtQZSsrXSl9Y2F0Y2h7cmV0dXJuIltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIGFlfX0pLFJlPW90W1BlXTtQZTxsdDtSZT1vdFsrK1BlXSlXKFJlKXx8IXFlKFJlKT9kdCs9IiAiK1JlOmR0Kz0iICIrdyhSZSk7cmV0dXJuIGR0fSxqLmRlcHJlY2F0ZT1m''@;'; put 'put ''dW5jdGlvbihuZSxfZSl7aWYodHlwZW9mIHk8InUiJiYhMD09PXkubm9EZXByZWNhdGlvbilyZXR1cm4gbmU7aWYodHlwZW9mIHk+InUiKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBqLmRlcHJlY2F0ZShuZSxfZSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgUGU9ITE7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uIG90KCl7aWYoIVBlKXtpZih5LnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKF9lKTt5LnRyYWNlRGVwcmVjYXRpb24/Y29uc29sZS50cmFjZShfZSk6Y29uc29sZS5lcnJvcihfZSksUGU9ITB9cmV0dXJuIG5lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciBBPXt9''@;'; put 'put ''LHY9L14kLztpZih5LmVudi5OT0RFX0RFQlVHKXt2YXIgQz15LmVudi5OT0RFX0RFQlVHO0M9Qy5yZXBsYWNlKC9bfFxce30oKVtcXV4kKz8uXS9nLCJcXCQmIikucmVwbGFjZSgvXCovZywiLioiKS5yZXBsYWNlKC8sL2csIiR8XiIpLnRvVXBwZXJDYXNlKCksdj1uZXcgUmVnRXhwKCJeIitD''@;'; put 'put ''KyIkIiwiaSIpfWZ1bmN0aW9uIHcobmUsX2Upe3ZhciBQZT17c2VlbjpbXSxzdHlsaXplOkx9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYoUGUuZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMubGVuZ3RoPj00JiYoUGUuY29sb3JzPWFyZ3VtZW50c1szXSksRihfZSk/UGUuc2hv''@;'; put 'put ''d0hpZGRlbj1fZTpfZSYmai5fZXh0ZW5kKFBlLF9lKSxJZShQZS5zaG93SGlkZGVuKSYmKFBlLnNob3dIaWRkZW49ITEpLEllKFBlLmRlcHRoKSYmKFBlLmRlcHRoPTIpLEllKFBlLmNvbG9ycykmJihQZS5jb2xvcnM9ITEpLEllKFBlLmN1c3RvbUluc3BlY3QpJiYoUGUuY3VzdG9tSW5zcGVj''@;'; put 'put ''dD0hMCksUGUuY29sb3JzJiYoUGUuc3R5bGl6ZT1TKSx4KFBlLG5lLFBlLmRlcHRoKX1mdW5jdGlvbiBTKG5lLF9lKXt2YXIgUGU9dy5zdHlsZXNbX2VdO3JldHVybiBQZT8iXHgxYlsiK3cuY29sb3JzW1BlXVswXSsibSIrbmUrIlx4MWJbIit3LmNvbG9yc1tQZV1bMV0rIm0iOm5lfWZ1bmN0''@;'; put 'put ''aW9uIEwobmUsX2Upe3JldHVybiBuZX1mdW5jdGlvbiB4KG5lLF9lLFBlKXtpZihuZS5jdXN0b21JbnNwZWN0JiZfZSYmYihfZS5pbnNwZWN0KSYmX2UuaW5zcGVjdCE9PWouaW5zcGVjdCYmKCFfZS5jb25zdHJ1Y3Rvcnx8X2UuY29uc3RydWN0b3IucHJvdG90eXBlIT09X2UpKXt2YXIgb3Q9''@;'; put 'put ''X2UuaW5zcGVjdChQZSxuZSk7cmV0dXJuIG1lKG90KXx8KG90PXgobmUsb3QsUGUpKSxvdH12YXIgbHQ9ZnVuY3Rpb24gVShuZSxfZSl7aWYoSWUoX2UpKXJldHVybiBuZS5zdHlsaXplKCJ1bmRlZmluZWQiLCJ1bmRlZmluZWQiKTtpZihtZShfZSkpe3ZhciBQZT0iJyIrSlNPTi5zdHJpbmdp''@;'; put 'put ''ZnkoX2UpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIG5lLnN0eWxpemUoUGUsInN0cmluZyIpfXJldHVybiByZShfZSk/bmUuc3R5bGl6ZSgiIitfZSwibnVtYmVyIik6RihfZSk/bmUuc3R5bGl6ZSgiIitf''@;'; put 'put ''ZSwiYm9vbGVhbiIpOlcoX2UpP25lLnN0eWxpemUoIm51bGwiLCJudWxsIik6dm9pZCAwfShuZSxfZSk7aWYobHQpcmV0dXJuIGx0O3ZhciBkdD1PYmplY3Qua2V5cyhfZSksUmU9ZnVuY3Rpb24gUihuZSl7dmFyIF9lPXt9O3JldHVybiBuZS5mb3JFYWNoKGZ1bmN0aW9uKFBlLG90KXtfZVtQ''@;'; put 'put ''ZV09ITB9KSxfZX0oZHQpO2lmKG5lLnNob3dIaWRkZW4mJihkdD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhfZSkpLGYoX2UpJiYoZHQuaW5kZXhPZigibWVzc2FnZSIpPj0wfHxkdC5pbmRleE9mKCJkZXNjcmlwdGlvbiIpPj0wKSlyZXR1cm4gSChfZSk7aWYoMD09PWR0Lmxlbmd0aCl7''@;'; put 'put ''aWYoYihfZSkpcmV0dXJuIG5lLnN0eWxpemUoIltGdW5jdGlvbiIrKF9lLm5hbWU/IjogIitfZS5uYW1lOiIiKSsiXSIsInNwZWNpYWwiKTtpZihrZShfZSkpcmV0dXJuIG5lLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKF9lKSwicmVnZXhwIik7aWYoWChfZSkpcmV0''@;'; put 'put ''dXJuIG5lLnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChfZSksImRhdGUiKTtpZihmKF9lKSlyZXR1cm4gSChfZSl9dmFyIEZlLHhlPSIiLGplPSExLEFlPVsieyIsIn0iXTtyZXR1cm4gWShfZSkmJihqZT0hMCxBZT1bIlsiLCJdIl0pLGIoX2UpJiYoeGU9IiBbRnVuY3Rp''@;'; put 'put ''b24iKyhfZS5uYW1lPyI6ICIrX2UubmFtZToiIikrIl0iKSxrZShfZSkmJih4ZT0iICIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKF9lKSksWChfZSkmJih4ZT0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbChfZSkpLGYoX2UpJiYoeGU9IiAiK0goX2UpKSwwIT09''@;'; put 'put ''ZHQubGVuZ3RofHxqZSYmMCE9X2UubGVuZ3RoP1BlPDA/a2UoX2UpP25lLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKF9lKSwicmVnZXhwIik6bmUuc3R5bGl6ZSgiW09iamVjdF0iLCJzcGVjaWFsIik6KG5lLnNlZW4ucHVzaChfZSksRmU9amU/ZnVuY3Rpb24gVihu''@;'; put 'put ''ZSxfZSxQZSxvdCxsdCl7Zm9yKHZhciBkdD1bXSxSZT0wLGFlPV9lLmxlbmd0aDtSZTxhZTsrK1JlKUQoX2UsU3RyaW5nKFJlKSk/ZHQucHVzaChOKG5lLF9lLFBlLG90LFN0cmluZyhSZSksITApKTpkdC5wdXNoKCIiKTtyZXR1cm4gbHQuZm9yRWFjaChmdW5jdGlvbih4ZSl7eGUubWF0Y2go''@;'; put 'put ''L15cZCskLyl8fGR0LnB1c2goTihuZSxfZSxQZSxvdCx4ZSwhMCkpfSksZHR9KG5lLF9lLFBlLFJlLGR0KTpkdC5tYXAoZnVuY3Rpb24oZ2Upe3JldHVybiBOKG5lLF9lLFBlLFJlLGdlLGplKX0pLG5lLnNlZW4ucG9wKCksZnVuY3Rpb24geihuZSxfZSxQZSl7dmFyIGx0PW5lLnJlZHVjZShm''@;'; put 'put ''dW5jdGlvbihkdCxSZSl7cmV0dXJuIFJlLmluZGV4T2YoIlxuIiksZHQrUmUucmVwbGFjZSgvXHUwMDFiXFtcZFxkP20vZywiIikubGVuZ3RoKzF9LDApO3JldHVybiBsdD42MD9QZVswXSsoIiI9PT1fZT8iIjpfZSsiXG4gIikrIiAiK25lLmpvaW4oIixcbiAgIikrIiAiK1BlWzFdOlBlWzBd''@;'; put 'put ''K19lKyIgIituZS5qb2luKCIsICIpKyIgIitQZVsxXX0oRmUseGUsQWUpKTpBZVswXSt4ZStBZVsxXX1mdW5jdGlvbiBIKG5lKXtyZXR1cm4iWyIrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmUpKyJdIn1mdW5jdGlvbiBOKG5lLF9lLFBlLG90LGx0LGR0KXt2YXIgUmUsYWUseGU7''@;'; put 'put ''aWYoKHhlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoX2UsbHQpfHx7dmFsdWU6X2VbbHRdfSkuZ2V0P2FlPW5lLnN0eWxpemUoeGUuc2V0PyJbR2V0dGVyL1NldHRlcl0iOiJbR2V0dGVyXSIsInNwZWNpYWwiKTp4ZS5zZXQmJihhZT1uZS5zdHlsaXplKCJbU2V0dGVyXSIsInNw''@;'; put 'put ''ZWNpYWwiKSksRChvdCxsdCl8fChSZT0iWyIrbHQrIl0iKSxhZXx8KG5lLnNlZW4uaW5kZXhPZih4ZS52YWx1ZSk8MD8oYWU9VyhQZSk/eChuZSx4ZS52YWx1ZSxudWxsKTp4KG5lLHhlLnZhbHVlLFBlLTEpKS5pbmRleE9mKCJcbiIpPi0xJiYoYWU9ZHQ/YWUuc3BsaXQoIlxuIikubWFwKGZ1''@;'; put 'put ''bmN0aW9uKGplKXtyZXR1cm4iICAiK2plfSkuam9pbigiXG4iKS5zbGljZSgyKToiXG4iK2FlLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihqZSl7cmV0dXJuIiAgICIramV9KS5qb2luKCJcbiIpKTphZT1uZS5zdHlsaXplKCJbQ2lyY3VsYXJdIiwic3BlY2lhbCIpKSxJZShSZSkpe2lmKGR0''@;'; put 'put ''JiZsdC5tYXRjaCgvXlxkKyQvKSlyZXR1cm4gYWU7KFJlPUpTT04uc3RyaW5naWZ5KCIiK2x0KSkubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05XSopIiQvKT8oUmU9UmUuc2xpY2UoMSwtMSksUmU9bmUuc3R5bGl6ZShSZSwibmFtZSIpKTooUmU9UmUucmVwbGFjZSgvJy9nLCJcXCci''@;'; put 'put ''KS5yZXBsYWNlKC9cXCIvZywnIicpLnJlcGxhY2UoLyheInwiJCkvZywiJyIpLFJlPW5lLnN0eWxpemUoUmUsInN0cmluZyIpKX1yZXR1cm4gUmUrIjogIithZX1mdW5jdGlvbiBZKG5lKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuZSl9ZnVuY3Rpb24gRihuZSl7cmV0dXJuImJvb2xlYW4iPT10''@;'; put 'put ''eXBlb2YgbmV9ZnVuY3Rpb24gVyhuZSl7cmV0dXJuIG51bGw9PT1uZX1mdW5jdGlvbiByZShuZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBuZX1mdW5jdGlvbiBtZShuZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuZX1mdW5jdGlvbiBJZShuZSl7cmV0dXJuIHZvaWQgMD09PW5lfWZ1bmN0''@;'; put 'put ''aW9uIGtlKG5lKXtyZXR1cm4gcWUobmUpJiYiW29iamVjdCBSZWdFeHBdIj09PU0obmUpfWZ1bmN0aW9uIHFlKG5lKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG5lJiZudWxsIT09bmV9ZnVuY3Rpb24gWChuZSl7cmV0dXJuIHFlKG5lKSYmIltvYmplY3QgRGF0ZV0iPT09TShuZSl9ZnVuY3Rp''@;'; put 'put ''b24gZihuZSl7cmV0dXJuIHFlKG5lKSYmKCJbb2JqZWN0IEVycm9yXSI9PT1NKG5lKXx8bmUgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24gYihuZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG5lfWZ1bmN0aW9uIE0obmUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNh''@;'; put 'put ''bGwobmUpfWZ1bmN0aW9uIEIobmUpe3JldHVybiBuZTwxMD8iMCIrbmUudG9TdHJpbmcoMTApOm5lLnRvU3RyaW5nKDEwKX1qLmRlYnVnbG9nPWZ1bmN0aW9uKG5lKXtpZihuZT1uZS50b1VwcGVyQ2FzZSgpLCFBW25lXSlpZih2LnRlc3QobmUpKXt2YXIgX2U9eS5waWQ7QVtuZV09ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgUGU9ai5mb3JtYXQuYXBwbHkoaixhcmd1bWVudHMpO2NvbnNvbGUuZXJyb3IoIiVzICVkOiAlcyIsbmUsX2UsUGUpfX1lbHNlIEFbbmVdPWZ1bmN0aW9uKCl7fTtyZXR1cm4gQVtuZV19LGouaW5zcGVjdD13LHcuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVu''@;'; put 'put ''ZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSx3LnN0eWxlcz17''@;'; put 'put ''c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LGoudHlwZXM9aCg0OTAzMiksai5pc0FycmF5PVksai5pc0Jvb2xlYW49Rixq''@;'; put 'put ''LmlzTnVsbD1XLGouaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24gcShuZSl7cmV0dXJuIG51bGw9PW5lfSxqLmlzTnVtYmVyPXJlLGouaXNTdHJpbmc9bWUsai5pc1N5bWJvbD1mdW5jdGlvbiBDZShuZSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBuZX0sai5pc1VuZGVmaW5lZD1JZSxqLmlz''@;'; put 'put ''UmVnRXhwPWtlLGoudHlwZXMuaXNSZWdFeHA9a2Usai5pc09iamVjdD1xZSxqLmlzRGF0ZT1YLGoudHlwZXMuaXNEYXRlPVgsai5pc0Vycm9yPWYsai50eXBlcy5pc05hdGl2ZUVycm9yPWYsai5pc0Z1bmN0aW9uPWIsai5pc1ByaW1pdGl2ZT1mdW5jdGlvbiBrKG5lKXtyZXR1cm4gbnVsbD09''@;'; put 'put ''PW5lfHwiYm9vbGVhbiI9PXR5cGVvZiBuZXx8Im51bWJlciI9PXR5cGVvZiBuZXx8InN0cmluZyI9PXR5cGVvZiBuZXx8InN5bWJvbCI9PXR5cGVvZiBuZXx8dHlwZW9mIG5lPiJ1In0sai5pc0J1ZmZlcj1oKDgxMTM1KTt2YXIgSz1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1''@;'; put 'put ''biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO2Z1bmN0aW9uIEQobmUsX2Upe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmUsX2UpfWoubG9nPWZ1bmN0aW9uKCl7Y29uc29sZS5sb2coIiVzIC0gJXMiLGZ1bmN0aW9uIEcoKXt2YXIg''@;'; put 'put ''bmU9bmV3IERhdGUsX2U9W0IobmUuZ2V0SG91cnMoKSksQihuZS5nZXRNaW51dGVzKCkpLEIobmUuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpO3JldHVybltuZS5nZXREYXRlKCksS1tuZS5nZXRNb250aCgpXSxfZV0uam9pbigiICIpfSgpLGouZm9ybWF0LmFwcGx5KGosYXJndW1lbnRzKSl9''@;'; put 'put ''LGouaW5oZXJpdHM9aCg1NjY5OCksai5fZXh0ZW5kPWZ1bmN0aW9uKG5lLF9lKXtpZighX2V8fCFxZShfZSkpcmV0dXJuIG5lO2Zvcih2YXIgUGU9T2JqZWN0LmtleXMoX2UpLG90PVBlLmxlbmd0aDtvdC0tOyluZVtQZVtvdF1dPV9lW1BlW290XV07cmV0dXJuIG5lfTt2YXIgcD10eXBlb2Yg''@;'; put 'put ''U3ltYm9sPCJ1Ij9TeW1ib2woInV0aWwucHJvbWlzaWZ5LmN1c3RvbSIpOnZvaWQgMDtmdW5jdGlvbiBJKG5lLF9lKXtpZighbmUpe3ZhciBQZT1uZXcgRXJyb3IoIlByb21pc2Ugd2FzIHJlamVjdGVkIHdpdGggYSBmYWxzeSB2YWx1ZSIpO1BlLnJlYXNvbj1uZSxuZT1QZX1yZXR1cm4gX2Uo''@;'; put 'put ''bmUpfWoucHJvbWlzaWZ5PWZ1bmN0aW9uKF9lKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgX2UpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJvcmlnaW5hbCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7aWYocCYmX2VbcF0pe3ZhciBQZTtpZigiZnVuY3Rpb24iIT10eXBl''@;'; put 'put ''b2YoUGU9X2VbcF0pKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidXRpbC5wcm9taXNpZnkuY3VzdG9tIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KFBlLHAse3ZhbHVlOlBlLGVudW1lcmFibGU6ITEsd3JpdGFibGU6''@;'; put 'put ''ITEsY29uZmlndXJhYmxlOiEwfSksUGV9ZnVuY3Rpb24gUGUoKXtmb3IodmFyIG90LGx0LGR0PW5ldyBQcm9taXNlKGZ1bmN0aW9uKHhlLGplKXtvdD14ZSxsdD1qZX0pLFJlPVtdLGFlPTA7YWU8YXJndW1lbnRzLmxlbmd0aDthZSsrKVJlLnB1c2goYXJndW1lbnRzW2FlXSk7UmUucHVzaChm''@;'; put 'put ''dW5jdGlvbih4ZSxqZSl7eGU/bHQoeGUpOm90KGplKX0pO3RyeXtfZS5hcHBseSh0aGlzLFJlKX1jYXRjaCh4ZSl7bHQoeGUpfXJldHVybiBkdH1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKFBlLE9iamVjdC5nZXRQcm90b3R5cGVPZihfZSkpLHAmJk9iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShQZSxwLHt2YWx1ZTpQZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBlLGMoX2UpKX0sai5wcm9taXNpZnkuY3VzdG9tPXAsai5jYWxsYmFja2lmeT1mdW5jdGlvbiB1ZShuZSl7aWYoImZ1bmN0aW9uIiE9dHlw''@;'; put 'put ''ZW9mIG5lKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAib3JpZ2luYWwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO2Z1bmN0aW9uIF9lKCl7Zm9yKHZhciBQZT1bXSxvdD0wO290PGFyZ3VtZW50cy5sZW5ndGg7b3QrKylQZS5wdXNoKGFyZ3VtZW50c1tvdF0pO3ZhciBs''@;'; put 'put ''dD1QZS5wb3AoKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgbHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGxhc3QgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uIik7dmFyIGR0PXRoaXMsUmU9ZnVuY3Rpb24oKXtyZXR1cm4gbHQuYXBwbHkoZHQsYXJndW1lbnRzKX07bmUuYXBw''@;'; put 'put ''bHkodGhpcyxQZSkudGhlbihmdW5jdGlvbihhZSl7eS5uZXh0VGljayhSZS5iaW5kKG51bGwsbnVsbCxhZSkpfSxmdW5jdGlvbihhZSl7eS5uZXh0VGljayhJLmJpbmQobnVsbCxhZSxSZSkpfSl9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihfZSxPYmplY3QuZ2V0UHJvdG90eXBlT2Yo''@;'; put 'put ''bmUpKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhfZSxjKG5lKSksX2V9fSwxNzg1MyhmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5leHBvcnRzLmlzX3VyaT1zLHkuZXhwb3J0cy5pc19odHRwX3VyaT1BLHkuZXhwb3J0cy5pc19odHRwc191cmk9dix5LmV4cG9ydHMuaXNf''@;'; put 'put ''d2ViX3VyaT1DLHkuZXhwb3J0cy5pc1VyaT1zLHkuZXhwb3J0cy5pc0h0dHBVcmk9QSx5LmV4cG9ydHMuaXNIdHRwc1VyaT12LHkuZXhwb3J0cy5pc1dlYlVyaT1DO3ZhciBjPWZ1bmN0aW9uKHcpe3JldHVybiB3Lm1hdGNoKC8oPzooW146XC8/I10rKTopPyg/OlwvXC8oW15cLz8jXSopKT8o''@;'; put 'put ''W14/I10qKSg/Olw/KFteI10qKSk/KD86IyguKikpPy8pfTtmdW5jdGlvbiBzKHcpe2lmKHcmJiEvW15hLXowLTlcOlwvXD9cI1xbXF1cQFwhXCRcJlwnXChcKVwqXCtcLFw7XD1cLlwtXF9cflwlXS9pLnRlc3QodykmJiEvJVteMC05YS1mXS9pLnRlc3QodykmJiEvJVswLTlhLWZdKDo/W14w''@;'; put 'put ''LTlhLWZdfCQpL2kudGVzdCh3KSl7dmFyIFMsUix4LFUsSCxMPSIiLFY9IiI7aWYoUj0oUz1jKHcpKVsyXSx4PVNbM10sVT1TWzRdLEg9U1s1XSwoTD1TWzFdKSYmTC5sZW5ndGgmJngubGVuZ3RoPj0wKXtpZihSJiZSLmxlbmd0aCl7aWYoMCE9PXgubGVuZ3RoJiYhL15cLy8udGVzdCh4KSly''@;'; put 'put ''ZXR1cm59ZWxzZSBpZigvXlwvXC8vLnRlc3QoeCkpcmV0dXJuO2lmKC9eW2Etel1bYS16MC05XCtcLVwuXSokLy50ZXN0KEwudG9Mb3dlckNhc2UoKSkpcmV0dXJuIFYrPUwrIjoiLFImJlIubGVuZ3RoJiYoVis9Ii8vIitSKSxWKz14LFUmJlUubGVuZ3RoJiYoVis9Ij8iK1UpLEgmJkgubGVu''@;'; put 'put ''Z3RoJiYoVis9IiMiK0gpLFZ9fX1mdW5jdGlvbiBBKHcsUyl7aWYocyh3KSl7dmFyIEwsVSxWLE4sUj0iIix4PSIiLEg9IiIsej0iIjtpZih4PShMPWModykpWzJdLFU9TFszXSxWPUxbNF0sTj1MWzVdLFI9TFsxXSl7aWYoUyl7aWYoImh0dHBzIiE9Ui50b0xvd2VyQ2FzZSgpKXJldHVybn1l''@;'; put 'put ''bHNlIGlmKCJodHRwIiE9Ui50b0xvd2VyQ2FzZSgpKXJldHVybjtpZih4KXJldHVybi86KFxkKykkLy50ZXN0KHgpJiYoSD14Lm1hdGNoKC86KFxkKykkLylbMF0seD14LnJlcGxhY2UoLzpcZCskLywiIikpLHorPVIrIjoiLHorPSIvLyIreCxIJiYoeis9SCkseis9VSxWJiZWLmxlbmd0aCYm''@;'; put 'put ''KHorPSI/IitWKSxOJiZOLmxlbmd0aCYmKHorPSIjIitOKSx6fX19ZnVuY3Rpb24gdih3KXtyZXR1cm4gQSh3LCEwKX1mdW5jdGlvbiBDKHcpe3JldHVybiBBKHcpfHx2KHcpfX0oZmU9aC5ubWQoZmUpKX0sNjg5NjEoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyl7dmFyIGluZGV4''@;'; put 'put ''T2Y9ZnVuY3Rpb24oZmUsail7aWYoZmUuaW5kZXhPZilyZXR1cm4gZmUuaW5kZXhPZihqKTtmb3IodmFyIGg9MDtoPGZlLmxlbmd0aDtoKyspaWYoZmVbaF09PT1qKXJldHVybiBoO3JldHVybi0xfSxPYmplY3Rfa2V5cz1mdW5jdGlvbihmZSl7aWYoT2JqZWN0LmtleXMpcmV0dXJuIE9iamVj''@;'; put 'put ''dC5rZXlzKGZlKTt2YXIgaj1bXTtmb3IodmFyIGggaW4gZmUpai5wdXNoKGgpO3JldHVybiBqfSxmb3JFYWNoPWZ1bmN0aW9uKGZlLGope2lmKGZlLmZvckVhY2gpcmV0dXJuIGZlLmZvckVhY2goaik7Zm9yKHZhciBoPTA7aDxmZS5sZW5ndGg7aCsrKWooZmVbaF0saCxmZSl9LGRlZmluZVBy''@;'; put 'put ''b3A9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiXyIse30pLGZ1bmN0aW9uKGZlLGosaCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGZlLGose3dyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHZhbHVlOmh9KX19Y2F0Y2h7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKGosaCx5KXtqW2hdPXl9fX0oKSxnbG9iYWxzPVsiQXJyYXkiLCJCb29sZWFuIiwiRGF0ZSIsIkVycm9yIiwiRXZhbEVycm9yIiwiRnVuY3Rpb24iLCJJbmZpbml0eSIsIkpTT04iLCJNYXRoIiwiTmFOIiwiTnVtYmVyIiwiT2JqZWN0IiwiUmFuZ2VFcnJvciIsIlJlZmVy''@;'; put 'put ''ZW5jZUVycm9yIiwiUmVnRXhwIiwiU3RyaW5nIiwiU3ludGF4RXJyb3IiLCJUeXBlRXJyb3IiLCJVUklFcnJvciIsImRlY29kZVVSSSIsImRlY29kZVVSSUNvbXBvbmVudCIsImVuY29kZVVSSSIsImVuY29kZVVSSUNvbXBvbmVudCIsImVzY2FwZSIsImV2YWwiLCJpc0Zpbml0ZSIsImlzTmFO''@;'; put 'put ''IiwicGFyc2VGbG9hdCIsInBhcnNlSW50IiwidW5kZWZpbmVkIiwidW5lc2NhcGUiXTtmdW5jdGlvbiBDb250ZXh0KCl7fUNvbnRleHQucHJvdG90eXBlPXt9O3ZhciBTY3JpcHQ9ZXhwb3J0cy5TY3JpcHQ9ZnVuY3Rpb24oail7aWYoISh0aGlzIGluc3RhbmNlb2YgU2NyaXB0KSlyZXR1cm4g''@;'; put 'put ''bmV3IFNjcmlwdChqKTt0aGlzLmNvZGU9an07U2NyaXB0LnByb3RvdHlwZS5ydW5JbkNvbnRleHQ9ZnVuY3Rpb24oZmUpe2lmKCEoZmUgaW5zdGFuY2VvZiBDb250ZXh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJuZWVkcyBhICdjb250ZXh0JyBhcmd1bWVudC4iKTt2YXIgaj1kb2N1bWVudC5j''@;'; put 'put ''cmVhdGVFbGVtZW50KCJpZnJhbWUiKTtqLnN0eWxlfHwoai5zdHlsZT17fSksai5zdHlsZS5kaXNwbGF5PSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGopO3ZhciBoPWouY29udGVudFdpbmRvdyx5PWguZXZhbCxjPWguZXhlY1NjcmlwdDsheSYmYyYmKGMuY2FsbChoLCJudWxs''@;'; put 'put ''IikseT1oLmV2YWwpLGZvckVhY2goT2JqZWN0X2tleXMoZmUpLGZ1bmN0aW9uKHYpe2hbdl09ZmVbdl19KSxmb3JFYWNoKGdsb2JhbHMsZnVuY3Rpb24odil7ZmVbdl0mJihoW3ZdPWZlW3ZdKX0pO3ZhciBzPU9iamVjdF9rZXlzKGgpLEE9eS5jYWxsKGgsdGhpcy5jb2RlKTtyZXR1cm4gZm9y''@;'; put 'put ''RWFjaChPYmplY3Rfa2V5cyhoKSxmdW5jdGlvbih2KXsodiBpbiBmZXx8LTE9PT1pbmRleE9mKHMsdikpJiYoZmVbdl09aFt2XSl9KSxmb3JFYWNoKGdsb2JhbHMsZnVuY3Rpb24odil7diBpbiBmZXx8ZGVmaW5lUHJvcChmZSx2LGhbdl0pfSksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChq''@;'; put 'put ''KSxBfSxTY3JpcHQucHJvdG90eXBlLnJ1bkluVGhpc0NvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gZXZhbCh0aGlzLmNvZGUpfSxTY3JpcHQucHJvdG90eXBlLnJ1bkluTmV3Q29udGV4dD1mdW5jdGlvbihmZSl7dmFyIGo9U2NyaXB0LmNyZWF0ZUNvbnRleHQoZmUpLGg9dGhpcy5ydW5JbkNv''@;'; put 'put ''bnRleHQoaik7cmV0dXJuIGZlJiZmb3JFYWNoKE9iamVjdF9rZXlzKGopLGZ1bmN0aW9uKHkpe2ZlW3ldPWpbeV19KSxofSxmb3JFYWNoKE9iamVjdF9rZXlzKFNjcmlwdC5wcm90b3R5cGUpLGZ1bmN0aW9uKGZlKXtleHBvcnRzW2ZlXT1TY3JpcHRbZmVdPWZ1bmN0aW9uKGope3ZhciBoPVNj''@;'; put 'put ''cmlwdChqKTtyZXR1cm4gaFtmZV0uYXBwbHkoaCxbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSl9fSksZXhwb3J0cy5pc0NvbnRleHQ9ZnVuY3Rpb24oZmUpe3JldHVybiBmZSBpbnN0YW5jZW9mIENvbnRleHR9LGV4cG9ydHMuY3JlYXRlU2NyaXB0PWZ1bmN0aW9uKGZlKXtyZXR1cm4gZXhw''@;'; put 'put ''b3J0cy5TY3JpcHQoZmUpfSxleHBvcnRzLmNyZWF0ZUNvbnRleHQ9U2NyaXB0LmNyZWF0ZUNvbnRleHQ9ZnVuY3Rpb24oZmUpe3ZhciBqPW5ldyBDb250ZXh0O3JldHVybiJvYmplY3QiPT10eXBlb2YgZmUmJmZvckVhY2goT2JqZWN0X2tleXMoZmUpLGZ1bmN0aW9uKGgpe2pbaF09ZmVbaF19''@;'; put 'put ''KSxqfX0sMjU3NjcoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg4MjY4MiksYz1oKDM5MjA5KSxzPWgoMTA0ODcpLEE9aCgzNjU1Niksdj1oKDc1Nzk1KSxDPWgoOTM2MjgpLHc9QSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLFM9aCg0OTA5MikoKSxMPXR5cGVvZiBnbG9iYWxU''@;'; put 'put ''aGlzPiJ1Ij9oLmc6Z2xvYmFsVGhpcyxSPWMoKSx4PUEoIlN0cmluZy5wcm90b3R5cGUuc2xpY2UiKSxVPUEoIkFycmF5LnByb3RvdHlwZS5pbmRleE9mIiwhMCl8fGZ1bmN0aW9uKEYsVyl7Zm9yKHZhciBxPTA7cTxGLmxlbmd0aDtxKz0xKWlmKEZbcV09PT1XKXJldHVybiBxO3JldHVybi0x''@;'; put 'put ''fSxIPXtfX3Byb3RvX186bnVsbH07eShSLFMmJnYmJkM/ZnVuY3Rpb24oWSl7dmFyIEY9bmV3IExbWV07aWYoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEYmJkMpe3ZhciBXPUMoRikscT12KFcsU3ltYm9sLnRvU3RyaW5nVGFnKTtpZighcSYmVyl7dmFyIHJlPUMoVyk7cT12KHJlLFN5bWJvbC50''@;'; put 'put ''b1N0cmluZ1RhZyl9aWYocSYmcS5nZXQpe3ZhciBtZT1zKHEuZ2V0KTtIWyIkIitZXT1tZX19fTpmdW5jdGlvbihZKXt2YXIgRj1uZXcgTFtZXSxXPUYuc2xpY2V8fEYuc2V0O2lmKFcpe3ZhciBxPXMoVyk7SFsiJCIrWV09cX19KSxmZS5leHBvcnRzPWZ1bmN0aW9uKEYpe2lmKCFGfHwib2Jq''@;'; put 'put ''ZWN0IiE9dHlwZW9mIEYpcmV0dXJuITE7aWYoIVMpe3ZhciBXPXgodyhGKSw4LC0xKTtyZXR1cm4gZnVuY3Rpb24geihZKXtyZXR1cm4gVShSLFkpPi0xfShXKT9XOiJPYmplY3QiPT09VyYmZnVuY3Rpb24gTihZKXt2YXIgRj0hMTtyZXR1cm4geShILGZ1bmN0aW9uKFcscSl7aWYoIUYpdHJ5''@;'; put 'put ''e1coWSksRj14KHEsMSl9Y2F0Y2h7fX0pLEZ9KEYpfXJldHVybiB2P2Z1bmN0aW9uIFYoWSl7dmFyIEY9ITE7cmV0dXJuIHkoSCxmdW5jdGlvbihXLHEpe2lmKCFGKXRyeXsiJCIrVyhZKT09PXEmJihGPXgocSwxKSl9Y2F0Y2h7fX0pLEZ9KEYpOm51bGx9fSwyMzI3KCl7fSw3ODk4Migpe30s''@;'; put 'put ''NDc3OTAoKXt9LDczNzc2KCl7fSwyMTYzOCgpe30sOTI2NjgoKXt9LDc3OTY1KCl7fSw2NjA4OSgpe30sNzkzNjgoKXt9LDQ5OTkzKCl7fSw4MTAwNigpe30sNjQ2ODgoKXt9LDUxMDY5KCl7fSwxNTM0MCgpe30sNzk4MzgoKXt9LDM1Mzk0KCl7fSw4NTI0OCgpe30sODkyNTEoKXt9LDM5MjA5''@;'; put 'put ''KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNzY1NzgpLGM9dHlwZW9mIGdsb2JhbFRoaXM+InUiP2guZzpnbG9iYWxUaGlzO2ZlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIEE9W10sdj0wO3Y8eS5sZW5ndGg7disrKSJmdW5jdGlvbiI9PXR5cGVvZiBjW3lbdl1dJiYoQVtBLmxl''@;'; put 'put ''bmd0aF09eVt2XSk7cmV0dXJuIEF9fSw4NjQyNShmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDY1NjA2KSxjPWgoNDgyODcpLkJ1ZmZlcjtmdW5jdGlvbiBzKGh0LHl0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaHQuYXBwbHkoeXQsYXJndW1lbnRzKX19Y29uc3R7dG9TdHJpbmc6''@;'; put 'put ''QX09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6dn09T2JqZWN0LHtpdGVyYXRvcjpDLHRvU3RyaW5nVGFnOnd9PVN5bWJvbCxTPSgoe2hhc093blByb3BlcnR5Omh0fSk9Pih5dCxqdCk9Pmh0LmNhbGwoeXQsanQpKShPYmplY3QucHJvdG90eXBlKSxMPShodCx5dCk9PntsZXQg''@;'; put 'put ''anQ9aHQ7Y29uc3QgenQ9W107Zm9yKDtudWxsIT1qdCYmanQhPT1PYmplY3QucHJvdG90eXBlOyl7aWYoLTEhPT16dC5pbmRleE9mKGp0KSlyZXR1cm4hMTtpZih6dC5wdXNoKGp0KSxTKGp0LHl0KSlyZXR1cm4hMDtqdD12KGp0KX1yZXR1cm4hMX0seD0oaHQ9Pnl0PT57Y29uc3QganQ9QS5j''@;'; put 'put ''YWxsKHl0KTtyZXR1cm4gaHRbanRdfHwoaHRbanRdPWp0LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksVT1odD0+KGh0PWh0LnRvTG93ZXJDYXNlKCkseXQ9PngoeXQpPT09aHQpLEg9aHQ9Pnl0PT50eXBlb2YgeXQ9PT1odCx7aXNBcnJheTpWfT1B''@;'; put 'put ''cnJheSxOPUgoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIHooaHQpe3JldHVybiBudWxsIT09aHQmJiFOKGh0KSYmbnVsbCE9PWh0LmNvbnN0cnVjdG9yJiYhTihodC5jb25zdHJ1Y3RvcikmJnEoaHQuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZodC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihodCl9Y29u''@;'; put 'put ''c3QgWT1VKCJBcnJheUJ1ZmZlciIpLFc9SCgic3RyaW5nIikscT1IKCJmdW5jdGlvbiIpLHJlPUgoIm51bWJlciIpLG1lPWh0PT5udWxsIT09aHQmJiJvYmplY3QiPT10eXBlb2YgaHQsSWU9aHQ9PntpZighbWUoaHQpKXJldHVybiExO2NvbnN0IHl0PXYoaHQpO3JldHVybiEobnVsbCE9PXl0''@;'; put 'put ''JiZ5dCE9PU9iamVjdC5wcm90b3R5cGUmJm51bGwhPT12KHl0KXx8TChodCx3KXx8TChodCxDKSl9LHFlPVUoIkRhdGUiKSxYPVUoIkZpbGUiKSxrPVUoIkJsb2IiKSxNPVUoIkZpbGVMaXN0IiksRz1mdW5jdGlvbiBLKCl7cmV0dXJuIHR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlz''@;'; put 'put ''OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2YgaC5nPCJ1Ij9oLmc6e319KCksRD10eXBlb2YgRy5Gb3JtRGF0YTwidSI/Ry5Gb3JtRGF0YTp2b2lkIDAsST1VKCJVUkxTZWFyY2hQYXJhbXMiKSxbdWUsbmUsX2UsUGVdPVsiUmVhZGFibGVTdHJl''@;'; put 'put ''YW0iLCJSZXF1ZXN0IiwiUmVzcG9uc2UiLCJIZWFkZXJzIl0ubWFwKFUpO2Z1bmN0aW9uIGx0KGh0LHl0LHthbGxPd25LZXlzOmp0PSExfT17fSl7aWYobnVsbD09PWh0fHx0eXBlb2YgaHQ+InUiKXJldHVybjtsZXQgenQsbW47aWYoIm9iamVjdCIhPXR5cGVvZiBodCYmKGh0PVtodF0pLFYo''@;'; put 'put ''aHQpKWZvcih6dD0wLG1uPWh0Lmxlbmd0aDt6dDxtbjt6dCsrKXl0LmNhbGwobnVsbCxodFt6dF0senQsaHQpO2Vsc2V7aWYoeihodCkpcmV0dXJuO2NvbnN0IEZuPWp0P09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGh0KTpPYmplY3Qua2V5cyhodCksUW49Rm4ubGVuZ3RoO2xldCBscjtm''@;'; put 'put ''b3IoenQ9MDt6dDxRbjt6dCsrKWxyPUZuW3p0XSx5dC5jYWxsKG51bGwsaHRbbHJdLGxyLGh0KX19ZnVuY3Rpb24gZHQoaHQseXQpe2lmKHooaHQpKXJldHVybiBudWxsO3l0PXl0LnRvTG93ZXJDYXNlKCk7Y29uc3QganQ9T2JqZWN0LmtleXMoaHQpO2xldCBtbix6dD1qdC5sZW5ndGg7Zm9y''@;'; put 'put ''KDt6dC0tID4wOylpZihtbj1qdFt6dF0seXQ9PT1tbi50b0xvd2VyQ2FzZSgpKXJldHVybiBtbjtyZXR1cm4gbnVsbH1jb25zdCBSZT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6aC5nLGFlPWh0''@;'; put 'put ''PT4hTihodCkmJmh0IT09UmUsaGU9KGh0PT55dD0+aHQmJnl0IGluc3RhbmNlb2YgaHQpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmdihVaW50OEFycmF5KSksdHQ9VSgiSFRNTEZvcm1FbGVtZW50Iikse3Byb3BlcnR5SXNFbnVtZXJhYmxlOiR0fT1PYmplY3QucHJvdG90eXBlLFJ0PVUoIlJl''@;'; put 'put ''Z0V4cCIpLEx0PShodCx5dCk9Pntjb25zdCBqdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhodCksenQ9e307bHQoanQsKG1uLEZuKT0+e2xldCBRbjshMSE9PShRbj15dChtbixGbixodCkpJiYoenRbRm5dPVFufHxtbil9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhodCx6''@;'; put 'put ''dCl9LFFyPVUoIkFzeW5jRnVuY3Rpb24iKSxIbj0oaHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHNldEltbWVkaWF0ZSx5dD1xKFJlLnBvc3RNZXNzYWdlKSxodD9zZXRJbW1lZGlhdGU6eXQ/KGp0PWBheGlvc0Ake01hdGgucmFuZG9tKCl9YCx6dD1bXSxSZS5hZGRFdmVudExpc3RlbmVyKCJtZXNz''@;'; put 'put ''YWdlIiwoe3NvdXJjZTptbixkYXRhOkZufSk9Pnttbj09PVJlJiZGbj09PWp0JiZ6dC5sZW5ndGgmJnp0LnNoaWZ0KCkoKX0sITEpLG1uPT57enQucHVzaChtbiksUmUucG9zdE1lc3NhZ2UoanQsIioiKX0pOmp0PT5zZXRUaW1lb3V0KGp0KSksT289dHlwZW9mIHF1ZXVlTWljcm90YXNrPCJ1''@;'; put 'put ''Ij9xdWV1ZU1pY3JvdGFzay5iaW5kKFJlKTp0eXBlb2YgeTwidSImJnkubmV4dFRpY2t8fEhuLHVyPWh0PT5udWxsIT1odCYmcShodFtDXSk7dmFyIGh0LHl0LGp0LHp0LFNuPXtpc0FycmF5OlYsaXNBcnJheUJ1ZmZlcjpZLGlzQnVmZmVyOnosaXNGb3JtRGF0YTpodD0+e2lmKCFodClyZXR1''@;'; put 'put ''cm4hMTtpZihEJiZodCBpbnN0YW5jZW9mIEQpcmV0dXJuITA7Y29uc3QgeXQ9dihodCk7aWYoIXl0fHx5dD09PU9iamVjdC5wcm90b3R5cGV8fCFxKGh0LmFwcGVuZCkpcmV0dXJuITE7Y29uc3QganQ9eChodCk7cmV0dXJuImZvcm1kYXRhIj09PWp0fHwib2JqZWN0Ij09PWp0JiZxKGh0LnRv''@;'; put 'put ''U3RyaW5nKSYmIltvYmplY3QgRm9ybURhdGFdIj09PWh0LnRvU3RyaW5nKCl9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uIEYoaHQpe2xldCB5dDtyZXR1cm4geXQ9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhodCk6aHQm''@;'; put 'put ''Jmh0LmJ1ZmZlciYmWShodC5idWZmZXIpLHl0fSxpc1N0cmluZzpXLGlzTnVtYmVyOnJlLGlzQm9vbGVhbjpodD0+ITA9PT1odHx8ITE9PT1odCxpc09iamVjdDptZSxpc1BsYWluT2JqZWN0OkllLGlzRW1wdHlPYmplY3Q6aHQ9PntpZighbWUoaHQpfHx6KGh0KSlyZXR1cm4hMTt0cnl7cmV0''@;'; put 'put ''dXJuIDA9PT1PYmplY3Qua2V5cyhodCkubGVuZ3RoJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoaHQpPT09T2JqZWN0LnByb3RvdHlwZX1jYXRjaHtyZXR1cm4hMX19LGlzUmVhZGFibGVTdHJlYW06dWUsaXNSZXF1ZXN0Om5lLGlzUmVzcG9uc2U6X2UsaXNIZWFkZXJzOlBlLGlzVW5kZWZpbmVk''@;'; put 'put ''Ok4saXNEYXRlOnFlLGlzRmlsZTpYLGlzUmVhY3ROYXRpdmVCbG9iOmh0PT4hIShodCYmdHlwZW9mIGh0LnVyaTwidSIpLGlzUmVhY3ROYXRpdmU6aHQ9Pmh0JiZ0eXBlb2YgaHQuZ2V0UGFydHM8InUiLGlzQmxvYjprLGlzUmVnRXhwOlJ0LGlzRnVuY3Rpb246cSxpc1N0cmVhbTpodD0+bWUo''@;'; put 'put ''aHQpJiZxKGh0LnBpcGUpLGlzVVJMU2VhcmNoUGFyYW1zOkksaXNUeXBlZEFycmF5OmhlLGlzRmlsZUxpc3Q6TSxmb3JFYWNoOmx0LG1lcmdlOmZ1bmN0aW9uIHhlKC4uLmh0KXtjb25zdHtjYXNlbGVzczp5dCxza2lwVW5kZWZpbmVkOmp0fT1hZSh0aGlzKSYmdGhpc3x8e30senQ9e30sbW49''@;'; put 'put ''KEZuLFFuKT0+e2lmKCJfX3Byb3RvX18iPT09UW58fCJjb25zdHJ1Y3RvciI9PT1Rbnx8InByb3RvdHlwZSI9PT1RbilyZXR1cm47Y29uc3QgbHI9eXQmJiJzdHJpbmciPT10eXBlb2YgUW4mJmR0KHp0LFFuKXx8UW4saWk9Uyh6dCxscik/enRbbHJdOnZvaWQgMDtJZShpaSkmJkllKEZuKT96''@;'; put 'put ''dFtscl09eGUoaWksRm4pOkllKEZuKT96dFtscl09eGUoe30sRm4pOlYoRm4pP3p0W2xyXT1Gbi5zbGljZSgpOighanR8fCFOKEZuKSkmJih6dFtscl09Rm4pfTtmb3IobGV0IEZuPTAsUW49aHQubGVuZ3RoO0ZuPFFuO0ZuKyspe2NvbnN0IGxyPWh0W0ZuXTtpZighbHJ8fHoobHIpfHwobHQo''@;'; put 'put ''bHIsbW4pLCJvYmplY3QiIT10eXBlb2YgbHJ8fFYobHIpKSljb250aW51ZTtjb25zdCBpaT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGxyKTtmb3IobGV0IGtpPTA7a2k8aWkubGVuZ3RoO2tpKyspe2NvbnN0IFdpPWlpW2tpXTskdC5jYWxsKGxyLFdpKSYmbW4obHJbV2ldLFdpKX19''@;'; put 'put ''cmV0dXJuIHp0fSxleHRlbmQ6KGh0LHl0LGp0LHthbGxPd25LZXlzOnp0fT17fSk9PihsdCh5dCwobW4sRm4pPT57anQmJnEobW4pP09iamVjdC5kZWZpbmVQcm9wZXJ0eShodCxGbix7X19wcm90b19fOm51bGwsdmFsdWU6cyhtbixqdCksd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25m''@;'; put 'put ''aWd1cmFibGU6ITB9KTpPYmplY3QuZGVmaW5lUHJvcGVydHkoaHQsRm4se19fcHJvdG9fXzpudWxsLHZhbHVlOm1uLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9LHthbGxPd25LZXlzOnp0fSksaHQpLHRyaW06aHQ9Pmh0LnRyaW0/aHQudHJpbSgpOmh0LnJl''@;'; put 'put ''cGxhY2UoL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKSxzdHJpcEJPTTpodD0+KDY1Mjc5PT09aHQuY2hhckNvZGVBdCgwKSYmKGh0PWh0LnNsaWNlKDEpKSxodCksaW5oZXJpdHM6KGh0LHl0LGp0LHp0KT0+e2h0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHl0LnBy''@;'; put 'put ''b3RvdHlwZSx6dCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGh0LnByb3RvdHlwZSwiY29uc3RydWN0b3IiLHtfX3Byb3RvX186bnVsbCx2YWx1ZTpodCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShodCwic3VwZXIiLHtf''@;'; put 'put ''X3Byb3RvX186bnVsbCx2YWx1ZTp5dC5wcm90b3R5cGV9KSxqdCYmT2JqZWN0LmFzc2lnbihodC5wcm90b3R5cGUsanQpfSx0b0ZsYXRPYmplY3Q6KGh0LHl0LGp0LHp0KT0+e2xldCBtbixGbixRbjtjb25zdCBscj17fTtpZih5dD15dHx8e30sbnVsbD09aHQpcmV0dXJuIHl0O2Rve2Zvciht''@;'; put 'put ''bj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhodCksRm49bW4ubGVuZ3RoO0ZuLS0gPjA7KVFuPW1uW0ZuXSwoIXp0fHx6dChRbixodCx5dCkpJiYhbHJbUW5dJiYoeXRbUW5dPWh0W1FuXSxscltRbl09ITApO2h0PSExIT09anQmJnYoaHQpfXdoaWxlKGh0JiYoIWp0fHxqdChodCx5dCkp''@;'; put 'put ''JiZodCE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiB5dH0sa2luZE9mOngsa2luZE9mVGVzdDpVLGVuZHNXaXRoOihodCx5dCxqdCk9PntodD1TdHJpbmcoaHQpLCh2b2lkIDA9PT1qdHx8anQ+aHQubGVuZ3RoKSYmKGp0PWh0Lmxlbmd0aCk7Y29uc3QgenQ9aHQuaW5kZXhPZih5dCxqdC09''@;'; put 'put ''eXQubGVuZ3RoKTtyZXR1cm4tMSE9PXp0JiZ6dD09PWp0fSx0b0FycmF5Omh0PT57aWYoIWh0KXJldHVybiBudWxsO2lmKFYoaHQpKXJldHVybiBodDtsZXQgeXQ9aHQubGVuZ3RoO2lmKCFyZSh5dCkpcmV0dXJuIG51bGw7Y29uc3QganQ9bmV3IEFycmF5KHl0KTtmb3IoO3l0LS0gPjA7KWp0''@;'; put 'put ''W3l0XT1odFt5dF07cmV0dXJuIGp0fSxmb3JFYWNoRW50cnk6KGh0LHl0KT0+e2NvbnN0IHp0PShodCYmaHRbQ10pLmNhbGwoaHQpO2xldCBtbjtmb3IoOyhtbj16dC5uZXh0KCkpJiYhbW4uZG9uZTspe2NvbnN0IEZuPW1uLnZhbHVlO3l0LmNhbGwoaHQsRm5bMF0sRm5bMV0pfX0sbWF0Y2hB''@;'; put 'put ''bGw6KGh0LHl0KT0+e2xldCBqdDtjb25zdCB6dD1bXTtmb3IoO251bGwhPT0oanQ9aHQuZXhlYyh5dCkpOyl6dC5wdXNoKGp0KTtyZXR1cm4genR9LGlzSFRNTEZvcm06dHQsaGFzT3duUHJvcGVydHk6UyxoYXNPd25Qcm9wOlMsaGFzT3duSW5Qcm90b3R5cGVDaGFpbjpMLGdldFNhZmVQcm9w''@;'; put 'put ''OihodCx5dCk9Pm51bGwhPWh0JiZMKGh0LHl0KT9odFt5dF06dm9pZCAwLHJlZHVjZURlc2NyaXB0b3JzOkx0LGZyZWV6ZU1ldGhvZHM6aHQ9PntMdChodCwoeXQsanQpPT57aWYocShodCkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5jbHVkZXMoanQpKXJldHVybiExO2lm''@;'; put 'put ''KHEoaHRbanRdKSl7aWYoeXQuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4geXQpcmV0dXJuIHZvaWQoeXQud3JpdGFibGU9ITEpO3l0LnNldHx8KHl0LnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnIitqdCsiJyIpfSl9fSl9LHRvT2Jq''@;'; put 'put ''ZWN0U2V0OihodCx5dCk9Pntjb25zdCBqdD17fSx6dD1tbj0+e21uLmZvckVhY2goRm49PntqdFtGbl09ITB9KX07cmV0dXJuIFYoaHQpP3p0KGh0KTp6dChTdHJpbmcoaHQpLnNwbGl0KHl0KSksanR9LHRvQ2FtZWxDYXNlOmh0PT5odC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShb''@;'; put 'put ''YS16XGRdKShcdyopL2csZnVuY3Rpb24oanQsenQsbW4pe3JldHVybiB6dC50b1VwcGVyQ2FzZSgpK21ufSksbm9vcDooKT0+e30sdG9GaW5pdGVOdW1iZXI6KGh0LHl0KT0+bnVsbCE9aHQmJk51bWJlci5pc0Zpbml0ZShodD0raHQpP2h0Onl0LGZpbmRLZXk6ZHQsZ2xvYmFsOlJlLGlzQ29u''@;'; put 'put ''dGV4dERlZmluZWQ6YWUsaXNTcGVjQ29tcGxpYW50Rm9ybTpmdW5jdGlvbiBsbihodCl7cmV0dXJuISEoaHQmJnEoaHQuYXBwZW5kKSYmIkZvcm1EYXRhIj09PWh0W3ddJiZodFtDXSl9LHRvSlNPTk9iamVjdDpodD0+e2NvbnN0IHl0PW5ldyBXZWFrU2V0LGp0PXp0PT57aWYobWUoenQpKXtp''@;'; put 'put ''Zih5dC5oYXMoenQpKXJldHVybjtpZih6KHp0KSlyZXR1cm4genQ7aWYoISgidG9KU09OImluIHp0KSl7eXQuYWRkKHp0KTtjb25zdCBtbj1WKHp0KT9bXTp7fTtyZXR1cm4gbHQoenQsKEZuLFFuKT0+e2NvbnN0IGxyPWp0KEZuKTshTihscikmJihtbltRbl09bHIpfSkseXQuZGVsZXRlKHp0''@;'; put 'put ''KSxtbn19cmV0dXJuIHp0fTtyZXR1cm4ganQoaHQpfSxpc0FzeW5jRm46UXIsaXNUaGVuYWJsZTpodD0+aHQmJihtZShodCl8fHEoaHQpKSYmcShodC50aGVuKSYmcShodC5jYXRjaCksc2V0SW1tZWRpYXRlOkhuLGFzYXA6T28saXNJdGVyYWJsZTp1cixpc1NhZmVJdGVyYWJsZTpodD0+bnVs''@;'; put 'put ''bCE9aHQmJkwoaHQsQykmJnVyKGh0KX07Y29uc3QgeHI9U24udG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlm''@;'; put 'put ''aWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksX249bmV3IFJlZ0V4cCgiW1xcdTAwMDAtXFx1MDAwOFxcdTAwMGEtXFx1MDAxZlxcdTAw''@;'; put 'put ''N2ZdKyIsImciKSxadD1uZXcgUmVnRXhwKCJbXlxcdTAwMDlcXHUwMDIwLVxcdTAwN2VcXHUwMDgwLVxcdTAwZmZdKyIsImciKTtmdW5jdGlvbiBObihodCx5dCl7cmV0dXJuIFNuLmlzQXJyYXkoaHQpP2h0Lm1hcChqdD0+Tm4oanQseXQpKTpmdW5jdGlvbiBBcihodCl7bGV0IHl0PTAsanQ9''@;'; put 'put ''aHQubGVuZ3RoO2Zvcig7eXQ8anQ7KXtjb25zdCB6dD1odC5jaGFyQ29kZUF0KHl0KTtpZig5IT09enQmJjMyIT09enQpYnJlYWs7eXQrPTF9Zm9yKDtqdD55dDspe2NvbnN0IHp0PWh0LmNoYXJDb2RlQXQoanQtMSk7aWYoOSE9PXp0JiYzMiE9PXp0KWJyZWFrO2p0LT0xfXJldHVybiAwPT09''@;'; put 'put ''eXQmJmp0PT09aHQubGVuZ3RoP2h0Omh0LnNsaWNlKHl0LGp0KX0oU3RyaW5nKGh0KS5yZXBsYWNlKHl0LCIiKSl9ZnVuY3Rpb24gTWkoaHQpe2NvbnN0IHl0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIFNuLmZvckVhY2goaHQudG9KU09OKCksKGp0LHp0KT0+e3l0W3p0XT0oaHQ9Pk5u''@;'; put 'put ''KGh0LFp0KSkoanQpfSkseXR9Y29uc3QgR2U9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBVdChodCl7cmV0dXJuIGh0JiZTdHJpbmcoaHQpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIHZyKGh0KXtyZXR1cm4hMT09PWh0fHxudWxsPT1odD9odDpTbi5pc0FycmF5KGh0KT9o''@;'; put 'put ''dC5tYXAodnIpOihodD0+Tm4oaHQsX24pKShTdHJpbmcoaHQpKX1mdW5jdGlvbiB6bihodCx5dCxqdCx6dCxtbil7aWYoU24uaXNGdW5jdGlvbih6dCkpcmV0dXJuIHp0LmNhbGwodGhpcyx5dCxqdCk7aWYobW4mJih5dD1qdCksU24uaXNTdHJpbmcoeXQpKXtpZihTbi5pc1N0cmluZyh6dCkp''@;'; put 'put ''cmV0dXJuLTEhPT15dC5pbmRleE9mKHp0KTtpZihTbi5pc1JlZ0V4cCh6dCkpcmV0dXJuIHp0LnRlc3QoeXQpfX1jbGFzcyB2aXtjb25zdHJ1Y3Rvcih5dCl7eXQmJnRoaXMuc2V0KHl0KX1zZXQoeXQsanQsenQpe2NvbnN0IG1uPXRoaXM7ZnVuY3Rpb24gRm4obHIsaWksa2kpe2NvbnN0IFdp''@;'; put 'put ''PVV0KGlpKTtpZighV2kpcmV0dXJuO2NvbnN0IEtpPVNuLmZpbmRLZXkobW4sV2kpOyghS2l8fHZvaWQgMD09PW1uW0tpXXx8ITA9PT1raXx8dm9pZCAwPT09a2kmJiExIT09bW5bS2ldKSYmKG1uW0tpfHxpaV09dnIobHIpKX1jb25zdCBRbj0obHIsaWkpPT5Tbi5mb3JFYWNoKGxyLChraSxX''@;'; put 'put ''aSk9PkZuKGtpLFdpLGlpKSk7aWYoU24uaXNQbGFpbk9iamVjdCh5dCl8fHl0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvcilRbih5dCxqdCk7ZWxzZSBpZihTbi5pc1N0cmluZyh5dCkmJih5dD15dC50cmltKCkpJiYhKGh0PT4vXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50''@;'; put 'put ''ZXN0KGh0LnRyaW0oKSkpKHl0KSlRbigoaHQ9Pntjb25zdCB5dD17fTtsZXQganQsenQsbW47cmV0dXJuIGh0JiZodC5zcGxpdCgiXG4iKS5mb3JFYWNoKGZ1bmN0aW9uKFFuKXttbj1Rbi5pbmRleE9mKCI6IiksanQ9UW4uc3Vic3RyaW5nKDAsbW4pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHp0''@;'; put 'put ''PVFuLnN1YnN0cmluZyhtbisxKS50cmltKCksISghanR8fHl0W2p0XSYmeHJbanRdKSYmKCJzZXQtY29va2llIj09PWp0P3l0W2p0XT95dFtqdF0ucHVzaCh6dCk6eXRbanRdPVt6dF06eXRbanRdPXl0W2p0XT95dFtqdF0rIiwgIit6dDp6dCl9KSx5dH0pKHl0KSxqdCk7ZWxzZSBpZihTbi5p''@;'; put 'put ''c09iamVjdCh5dCkmJlNuLmlzU2FmZUl0ZXJhYmxlKHl0KSl7bGV0IGlpLGtpLGxyPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGNvbnN0IFdpIG9mIHl0KXtpZighU24uaXNBcnJheShXaSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGl0ZXJhdG9yIG11c3QgcmV0dXJuIGEga2V5LXZh''@;'; put 'put ''bHVlIHBhaXIiKTtraT1XaVswXSxTbi5oYXNPd25Qcm9wKGxyLGtpKT8oaWk9bHJba2ldLGxyW2tpXT1Tbi5pc0FycmF5KGlpKT9bLi4uaWksV2lbMV1dOltpaSxXaVsxXV0pOmxyW2tpXT1XaVsxXX1RbihscixqdCl9ZWxzZSBudWxsIT15dCYmRm4oanQseXQsenQpO3JldHVybiB0aGlzfWdl''@;'; put 'put ''dCh5dCxqdCl7aWYoeXQ9VXQoeXQpKXtjb25zdCB6dD1Tbi5maW5kS2V5KHRoaXMseXQpO2lmKHp0KXtjb25zdCBtbj10aGlzW3p0XTtpZighanQpcmV0dXJuIG1uO2lmKCEwPT09anQpcmV0dXJuIGZ1bmN0aW9uIHh0KGh0KXtjb25zdCB5dD1PYmplY3QuY3JlYXRlKG51bGwpLGp0PS8oW15c''@;'; put 'put ''cyw7PV0rKVxzKig/Oj1ccyooW14sO10rKSk/L2c7bGV0IHp0O2Zvcig7enQ9anQuZXhlYyhodCk7KXl0W3p0WzFdXT16dFsyXTtyZXR1cm4geXR9KG1uKTtpZihTbi5pc0Z1bmN0aW9uKGp0KSlyZXR1cm4ganQuY2FsbCh0aGlzLG1uLHp0KTtpZihTbi5pc1JlZ0V4cChqdCkpcmV0dXJuIGp0''@;'; put 'put ''LmV4ZWMobW4pO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXMoeXQsanQpe2lmKHl0PVV0KHl0KSl7Y29uc3QgenQ9U24uZmluZEtleSh0aGlzLHl0KTtyZXR1cm4hKCF6dHx8dm9pZCAwPT09dGhpc1t6dF18fGp0JiYh''@;'; put 'put ''em4oMCx0aGlzW3p0XSx6dCxqdCkpfXJldHVybiExfWRlbGV0ZSh5dCxqdCl7Y29uc3QgenQ9dGhpcztsZXQgbW49ITE7ZnVuY3Rpb24gRm4oUW4pe2lmKFFuPVV0KFFuKSl7Y29uc3QgbHI9U24uZmluZEtleSh6dCxRbik7bHImJighanR8fHpuKDAsenRbbHJdLGxyLGp0KSkmJihkZWxldGUg''@;'; put 'put ''enRbbHJdLG1uPSEwKX19cmV0dXJuIFNuLmlzQXJyYXkoeXQpP3l0LmZvckVhY2goRm4pOkZuKHl0KSxtbn1jbGVhcih5dCl7Y29uc3QganQ9T2JqZWN0LmtleXModGhpcyk7bGV0IHp0PWp0Lmxlbmd0aCxtbj0hMTtmb3IoO3p0LS07KXtjb25zdCBGbj1qdFt6dF07KCF5dHx8em4oMCx0aGlz''@;'; put 'put ''W0ZuXSxGbix5dCwhMCkpJiYoZGVsZXRlIHRoaXNbRm5dLG1uPSEwKX1yZXR1cm4gbW59bm9ybWFsaXplKHl0KXtjb25zdCBqdD10aGlzLHp0PXt9O3JldHVybiBTbi5mb3JFYWNoKHRoaXMsKG1uLEZuKT0+e2NvbnN0IFFuPVNuLmZpbmRLZXkoenQsRm4pO2lmKFFuKXJldHVybiBqdFtRbl09''@;'; put 'put ''dnIobW4pLHZvaWQgZGVsZXRlIGp0W0ZuXTtjb25zdCBscj15dD9mdW5jdGlvbiBHbihodCl7cmV0dXJuIGh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKHl0LGp0LHp0KT0+anQudG9VcHBlckNhc2UoKSt6dCl9KEZuKTpTdHJpbmcoRm4pLnRyaW0o''@;'; put 'put ''KTtsciE9PUZuJiZkZWxldGUganRbRm5dLGp0W2xyXT12cihtbiksenRbbHJdPSEwfSksdGhpc31jb25jYXQoLi4ueXQpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLnl0KX10b0pTT04oeXQpe2NvbnN0IGp0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIFNuLmZv''@;'; put 'put ''ckVhY2godGhpcywoenQsbW4pPT57bnVsbCE9enQmJiExIT09enQmJihqdFttbl09eXQmJlNuLmlzQXJyYXkoenQpP3p0LmpvaW4oIiwgIik6enQpfSksanR9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgp''@;'; put 'put ''fXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW3l0LGp0XSk9Pnl0KyI6ICIranQpLmpvaW4oIlxuIil9Z2V0U2V0Q29va2llKCl7cmV0dXJuIHRoaXMuZ2V0KCJzZXQtY29va2llIil8fFtdfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0''@;'; put 'put ''dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20oeXQpe3JldHVybiB5dCBpbnN0YW5jZW9mIHRoaXM/eXQ6bmV3IHRoaXMoeXQpfXN0YXRpYyBjb25jYXQoeXQsLi4uanQpe2NvbnN0IHp0PW5ldyB0aGlzKHl0KTtyZXR1cm4ganQuZm9yRWFjaChtbj0+enQuc2V0KG1uKSksenR9c3RhdGlj''@;'; put 'put ''IGFjY2Vzc29yKHl0KXtjb25zdCB6dD0odGhpc1tHZV09dGhpc1tHZV09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxtbj10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBGbihRbil7Y29uc3QgbHI9VXQoUW4pO3p0W2xyXXx8KGZ1bmN0aW9uIHluKGh0LHl0KXtjb25zdCBqdD1Tbi50b0NhbWVs''@;'; put 'put ''Q2FzZSgiICIreXQpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaCh6dD0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShodCx6dCtqdCx7X19wcm90b19fOm51bGwsdmFsdWU6ZnVuY3Rpb24obW4sRm4sUW4pe3JldHVybiB0aGlzW3p0XS5jYWxsKHRoaXMseXQsbW4sRm4sUW4pfSxjb25maWd1''@;'; put 'put ''cmFibGU6ITB9KX0pfShtbixRbiksenRbbHJdPSEwKX1yZXR1cm4gU24uaXNBcnJheSh5dCk/eXQuZm9yRWFjaChGbik6Rm4oeXQpLHRoaXN9fXZpLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50''@;'; put 'put ''IiwiQXV0aG9yaXphdGlvbiJdKSxTbi5yZWR1Y2VEZXNjcmlwdG9ycyh2aS5wcm90b3R5cGUsKHt2YWx1ZTpodH0seXQpPT57bGV0IGp0PXl0WzBdLnRvVXBwZXJDYXNlKCkreXQuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+aHQsc2V0KHp0KXt0aGlzW2p0XT16dH19fSksU24uZnJlZXplTWV0''@;'; put 'put ''aG9kcyh2aSk7bGV0IHZuPSgoKT0+e2NsYXNzIGh0IGV4dGVuZHMgRXJyb3J7c3RhdGljIGZyb20oanQsenQsbW4sRm4sUW4sbHIpe2NvbnN0IGlpPW5ldyBodChqdC5tZXNzYWdlLHp0fHxqdC5jb2RlLG1uLEZuLFFuKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGlpLCJjYXVzZSIs''@;'; put 'put ''e19fcHJvdG9fXzpudWxsLHZhbHVlOmp0LHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksaWkubmFtZT1qdC5uYW1lLG51bGwhPWp0LnN0YXR1cyYmbnVsbD09aWkuc3RhdHVzJiYoaWkuc3RhdHVzPWp0LnN0YXR1cyksbHImJk9iamVjdC5hc3NpZ24oaWksbHIp''@;'; put 'put ''LGlpfWNvbnN0cnVjdG9yKGp0LHp0LG1uLEZuLFFuKXtzdXBlcihqdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm1lc3NhZ2UiLHtfX3Byb3RvX186bnVsbCx2YWx1ZTpqdCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHRoaXMubmFtZT0iQXhpb3NF''@;'; put 'put ''cnJvciIsdGhpcy5pc0F4aW9zRXJyb3I9ITAsenQmJih0aGlzLmNvZGU9enQpLG1uJiYodGhpcy5jb25maWc9bW4pLEZuJiYodGhpcy5yZXF1ZXN0PUZuKSxRbiYmKHRoaXMucmVzcG9uc2U9UW4sdGhpcy5zdGF0dXM9UW4uc3RhdHVzKX10b0pTT04oKXtjb25zdCBqdD10aGlzLmNvbmZpZyx6''@;'; put 'put ''dD1qdCYmU24uaGFzT3duUHJvcChqdCwicmVkYWN0Iik/anQucmVkYWN0OnZvaWQgMCxtbj1Tbi5pc0FycmF5KHp0KSYmenQubGVuZ3RoPjA/ZnVuY3Rpb24gcG8oaHQseXQpe2NvbnN0IGp0PW5ldyBTZXQoeXQubWFwKEZuPT5TdHJpbmcoRm4pLnRvTG93ZXJDYXNlKCkpKSx6dD1bXSxtbj1G''@;'; put 'put ''bj0+e2lmKG51bGw9PT1Gbnx8Im9iamVjdCIhPXR5cGVvZiBGbnx8U24uaXNCdWZmZXIoRm4pKXJldHVybiBGbjtpZigtMSE9PXp0LmluZGV4T2YoRm4pKXJldHVybjtsZXQgUW47aWYoRm4gaW5zdGFuY2VvZiB2aSYmKEZuPUZuLnRvSlNPTigpKSx6dC5wdXNoKEZuKSxTbi5pc0FycmF5KEZu''@;'; put 'put ''KSlRbj1bXSxGbi5mb3JFYWNoKChscixpaSk9Pntjb25zdCBraT1tbihscik7U24uaXNVbmRlZmluZWQoa2kpfHwoUW5baWldPWtpKX0pO2Vsc2V7aWYoIVNuLmlzUGxhaW5PYmplY3QoRm4pJiZmdW5jdGlvbiBocihodCl7aWYoU24uaGFzT3duUHJvcChodCwidG9KU09OIikpcmV0dXJuITA7''@;'; put 'put ''bGV0IHl0PU9iamVjdC5nZXRQcm90b3R5cGVPZihodCk7Zm9yKDt5dCYmeXQhPT1PYmplY3QucHJvdG90eXBlOyl7aWYoU24uaGFzT3duUHJvcCh5dCwidG9KU09OIikpcmV0dXJuITA7eXQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKHl0KX1yZXR1cm4hMX0oRm4pKXJldHVybiB6dC5wb3AoKSxG''@;'; put 'put ''bjtRbj1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdFtscixpaV1vZiBPYmplY3QuZW50cmllcyhGbikpe2NvbnN0IGtpPWp0Lmhhcyhsci50b0xvd2VyQ2FzZSgpKT8iW1JFREFDVEVEICoqKipdIjptbihpaSk7U24uaXNVbmRlZmluZWQoa2kpfHwoUW5bbHJdPWtpKX19cmV0dXJuIHp0''@;'; put 'put ''LnBvcCgpLFFufTtyZXR1cm4gbW4oaHQpfShqdCx6dCk6U24udG9KU09OT2JqZWN0KGp0KTtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFt''@;'; put 'put ''ZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6bW4sY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMuc3RhdHVzfX19cmV0dXJuIGh0LkVSUl9CQURfT1BUSU9OX1ZBTFVFPSJFUlJfQkFEX09Q''@;'; put 'put ''VElPTl9WQUxVRSIsaHQuRVJSX0JBRF9PUFRJT049IkVSUl9CQURfT1BUSU9OIixodC5FQ09OTkFCT1JURUQ9IkVDT05OQUJPUlRFRCIsaHQuRVRJTUVET1VUPSJFVElNRURPVVQiLGh0LkVDT05OUkVGVVNFRD0iRUNPTk5SRUZVU0VEIixodC5FUlJfTkVUV09SSz0iRVJSX05FVFdPUksiLGh0''@;'; put 'put ''LkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFM9IkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLGh0LkVSUl9ERVBSRUNBVEVEPSJFUlJfREVQUkVDQVRFRCIsaHQuRVJSX0JBRF9SRVNQT05TRT0iRVJSX0JBRF9SRVNQT05TRSIsaHQuRVJSX0JBRF9SRVFVRVNUPSJFUlJfQkFEX1JFUVVFU1Qi''@;'; put 'put ''LGh0LkVSUl9DQU5DRUxFRD0iRVJSX0NBTkNFTEVEIixodC5FUlJfTk9UX1NVUFBPUlQ9IkVSUl9OT1RfU1VQUE9SVCIsaHQuRVJSX0lOVkFMSURfVVJMPSJFUlJfSU5WQUxJRF9VUkwiLGh0LkVSUl9GT1JNX0RBVEFfREVQVEhfRVhDRUVERUQ9IkVSUl9GT1JNX0RBVEFfREVQVEhfRVhDRUVE''@;'; put 'put ''RUQiLGh0fSkoKTtmdW5jdGlvbiBqbyhodCl7cmV0dXJuIFNuLmlzUGxhaW5PYmplY3QoaHQpfHxTbi5pc0FycmF5KGh0KX1mdW5jdGlvbiBYcihodCl7cmV0dXJuIFNuLmVuZHNXaXRoKGh0LCJbXSIpP2h0LnNsaWNlKDAsLTIpOmh0fWZ1bmN0aW9uIGVhKGh0LHl0LGp0KXtyZXR1cm4gaHQ/''@;'; put 'put ''aHQuY29uY2F0KHl0KS5tYXAoZnVuY3Rpb24obW4sRm4pe3JldHVybiBtbj1YcihtbiksIWp0JiZGbj8iWyIrbW4rIl0iOm1ufSkuam9pbihqdD8iLiI6IiIpOnl0fWNvbnN0IGNhPVNuLnRvRmxhdE9iamVjdChTbix7fSxudWxsLGZ1bmN0aW9uKHl0KXtyZXR1cm4vXmlzW0EtWl0vLnRlc3Qo''@;'; put 'put ''eXQpfSk7ZnVuY3Rpb24gQ2koaHQseXQsanQpe2lmKCFTbi5pc09iamVjdChodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7eXQ9eXR8fG5ldyBGb3JtRGF0YTtjb25zdCB6dD0oanQ9U24udG9GbGF0T2JqZWN0KGp0LHttZXRhVG9rZW5zOiEwLGRv''@;'; put 'put ''dHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oaW8sRGEpe3JldHVybiFTbi5pc1VuZGVmaW5lZChEYVtpb10pfSkpLm1ldGFUb2tlbnMsbW49anQudmlzaXRvcnx8ZGwsRm49anQuZG90cyxRbj1qdC5pbmRleGVzLGxyPWp0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYixpaT12b2lk''@;'; put 'put ''IDA9PT1qdC5tYXhEZXB0aD8xMDA6anQubWF4RGVwdGgsa2k9bHImJlNuLmlzU3BlY0NvbXBsaWFudEZvcm0oeXQpLFdpPVtdO2lmKCFTbi5pc0Z1bmN0aW9uKG1uKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIEtpKHNuKXtpZihu''@;'; put 'put ''dWxsPT09c24pcmV0dXJuIiI7aWYoU24uaXNEYXRlKHNuKSlyZXR1cm4gc24udG9JU09TdHJpbmcoKTtpZihTbi5pc0Jvb2xlYW4oc24pKXJldHVybiBzbi50b1N0cmluZygpO2lmKCFraSYmU24uaXNCbG9iKHNuKSl0aHJvdyBuZXcgdm4oIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEg''@;'; put 'put ''QnVmZmVyIGluc3RlYWQuIik7aWYoU24uaXNBcnJheUJ1ZmZlcihzbil8fFNuLmlzVHlwZWRBcnJheShzbikpe2lmKGtpJiYiZnVuY3Rpb24iPT10eXBlb2YgbHIpcmV0dXJuIG5ldyBscihbc25dKTtpZih0eXBlb2YgYzwidSIpcmV0dXJuIGMuZnJvbShzbik7dGhyb3cgbmV3IHZuKCJCbG9i''@;'; put 'put ''IGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIsdm4uRVJSX05PVF9TVVBQT1JUKX1yZXR1cm4gc259ZnVuY3Rpb24gTmEoc24pe2lmKHNuPmlpKXRocm93IG5ldyB2bigiT2JqZWN0IGlzIHRvbyBkZWVwbHkgbmVzdGVkICgiK3NuKyIgbGV2ZWxzKS4gTWF4IGRlcHRo''@;'; put 'put ''OiAiK2lpLHZuLkVSUl9GT1JNX0RBVEFfREVQVEhfRVhDRUVERUQpfWZ1bmN0aW9uIGRsKHNuLGlvLERhKXtsZXQgbnM9c247aWYoU24uaXNSZWFjdE5hdGl2ZSh5dCkmJlNuLmlzUmVhY3ROYXRpdmVCbG9iKHNuKSlyZXR1cm4geXQuYXBwZW5kKGVhKERhLGlvLEZuKSxLaShzbikpLCExO2lm''@;'; put 'put ''KHNuJiYhRGEmJiJvYmplY3QiPT10eXBlb2Ygc24paWYoU24uZW5kc1dpdGgoaW8sInt9IikpaW89enQ/aW86aW8uc2xpY2UoMCwtMiksc249ZnVuY3Rpb24gUm8oc24saW8pe2lmKGlpPT09MS8wKXJldHVybiBKU09OLnN0cmluZ2lmeShzbik7Y29uc3QgRGE9W107cmV0dXJuIEpTT04uc3Ry''@;'; put 'put ''aW5naWZ5KHNuLGZ1bmN0aW9uKEVsLFdjKXtpZighU24uaXNPYmplY3QoV2MpKXJldHVybiBXYztmb3IoO0RhLmxlbmd0aCYmRGFbRGEubGVuZ3RoLTFdIT09dGhpczspRGEucG9wKCk7cmV0dXJuIERhLnB1c2goV2MpLE5hKGlvK0RhLmxlbmd0aC0xKSxXY30pfShzbiwxKTtlbHNlIGlmKFNu''@;'; put 'put ''LmlzQXJyYXkoc24pJiZmdW5jdGlvbiByYShodCl7cmV0dXJuIFNuLmlzQXJyYXkoaHQpJiYhaHQuc29tZShqbyl9KHNuKXx8KFNuLmlzRmlsZUxpc3Qoc24pfHxTbi5lbmRzV2l0aChpbywiW10iKSkmJihucz1Tbi50b0FycmF5KHNuKSkpcmV0dXJuIGlvPVhyKGlvKSxucy5mb3JFYWNoKGZ1''@;'; put 'put ''bmN0aW9uKFdjLG5jKXshU24uaXNVbmRlZmluZWQoV2MpJiZudWxsIT09V2MmJnl0LmFwcGVuZCghMD09PVFuP2VhKFtpb10sbmMsRm4pOm51bGw9PT1Rbj9pbzppbysiW10iLEtpKFdjKSl9KSwhMTtyZXR1cm4hIWpvKHNuKXx8KHl0LmFwcGVuZChlYShEYSxpbyxGbiksS2koc24pKSwhMSl9''@;'; put 'put ''Y29uc3Qgb3I9T2JqZWN0LmFzc2lnbihjYSx7ZGVmYXVsdFZpc2l0b3I6ZGwsY29udmVydFZhbHVlOktpLGlzVmlzaXRhYmxlOmpvfSk7aWYoIVNuLmlzT2JqZWN0KGh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIGZ1bmN0aW9uIGNvKHNu''@;'; put 'put ''LGlvLERhPTApe2lmKCFTbi5pc1VuZGVmaW5lZChzbikpe2lmKE5hKERhKSwtMSE9PVdpLmluZGV4T2Yoc24pKXRocm93IG5ldyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIraW8uam9pbigiLiIpKTtXaS5wdXNoKHNuKSxTbi5mb3JFYWNoKHNuLGZ1bmN0aW9uKEVs''@;'; put 'put ''LFdjKXshMD09PSghKFNuLmlzVW5kZWZpbmVkKEVsKXx8bnVsbD09PUVsKSYmbW4uY2FsbCh5dCxFbCxTbi5pc1N0cmluZyhXYyk/V2MudHJpbSgpOldjLGlvLG9yKSkmJmNvKEVsLGlvP2lvLmNvbmNhdChXYyk6W1djXSxEYSsxKX0pLFdpLnBvcCgpfX0oaHQpLHl0fWZ1bmN0aW9uIGhvKGh0''@;'; put 'put ''KXtjb25zdCB5dD17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoaHQpLnJlcGxhY2UoL1shJygpfl18JTIwL2csZnVuY3Rpb24oenQpe3JldHVybiB5dFt6dF19KX1mdW5jdGlvbiBN''@;'; put 'put ''YShodCx5dCl7dGhpcy5fcGFpcnM9W10saHQmJkNpKGh0LHRoaXMseXQpfWNvbnN0IGtzPU1hLnByb3RvdHlwZTtmdW5jdGlvbiBCaShodCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChodCkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMv''@;'; put 'put ''Z2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpfWZ1bmN0aW9uIHRhKGh0LHl0LGp0KXtpZigheXQpcmV0dXJuIGh0O2h0PWh0fHwiIjtjb25zdCB6dD1Tbi5pc0Z1bmN0aW9uKGp0KT97c2VyaWFsaXplOmp0fTpqdCxtbj1Tbi5nZXRTYWZlUHJvcCh6dCwiZW5jb2RlIil8fEJpLEZuPVNuLmdl''@;'; put 'put ''dFNhZmVQcm9wKHp0LCJzZXJpYWxpemUiKTtsZXQgUW47aWYoUW49Rm4/Rm4oeXQsenQpOlNuLmlzVVJMU2VhcmNoUGFyYW1zKHl0KT95dC50b1N0cmluZygpOm5ldyBNYSh5dCx6dCkudG9TdHJpbmcobW4pLFFuKXtjb25zdCBscj1odC5pbmRleE9mKCIjIik7LTEhPT1sciYmKGh0PWh0LnNs''@;'; put 'put ''aWNlKDAsbHIpKSxodCs9KC0xPT09aHQuaW5kZXhPZigiPyIpPyI/IjoiJiIpK1FufXJldHVybiBodH1rcy5hcHBlbmQ9ZnVuY3Rpb24oeXQsanQpe3RoaXMuX3BhaXJzLnB1c2goW3l0LGp0XSl9LGtzLnRvU3RyaW5nPWZ1bmN0aW9uKHl0KXtjb25zdCBqdD15dD96dD0+eXQuY2FsbCh0aGlz''@;'; put 'put ''LHp0LGhvKTpobztyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKG1uKXtyZXR1cm4ganQobW5bMF0pKyI9IitqdChtblsxXSl9LCIiKS5qb2luKCImIil9O2NsYXNzIE1ye2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoeXQsanQsenQpe3JldHVybiB0aGlzLmhhbmRs''@;'; put 'put ''ZXJzLnB1c2goe2Z1bGZpbGxlZDp5dCxyZWplY3RlZDpqdCxzeW5jaHJvbm91czohIXp0JiZ6dC5zeW5jaHJvbm91cyxydW5XaGVuOnp0P3p0LnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoeXQpe3RoaXMuaGFuZGxlcnNbeXRdJiYodGhpcy5oYW5kbGVyc1t5''@;'; put 'put ''dF09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaCh5dCl7U24uZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHp0KXtudWxsIT09enQmJnl0KHp0KX0pfX12YXIgRnM9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJz''@;'; put 'put ''aW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITEsbGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZzohMCxhZHZlcnRpc2Vac3RkQWNjZXB0RW5jb2Rpbmc6ITEsdmFsaWRhdGVTdGF0dXNVbmRlZmluZWRSZXNvbHZlczohMH0sQ2w9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFy''@;'; put 'put ''Y2hQYXJhbXM6dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOk1hLEZvcm1EYXRhOnR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbCxCbG9iOnR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGx9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJi''@;'; put 'put ''bG9iIiwidXJsIiwiZGF0YSJdfTtjb25zdCBUaT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixXbj0ib2JqZWN0Ij09dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yfHx2b2lkIDAsUWg9VGkmJighV258fFsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJd''@;'; put 'put ''LmluZGV4T2YoV24ucHJvZHVjdCk8MCksZGM9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiYiZnVuY3Rpb24iPT10eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzLElsPVRpJiZ3aW5kb3cubG9jYXRpb24uaHJlZnx8Imh0dHA6''@;'; put 'put ''Ly9sb2NhbGhvc3QiO3ZhciBMYz17Li4uT2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsaGFzQnJvd3NlckVudjpUaSxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6UWgsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OmRjLG5hdmlnYXRvcjpXbixvcmlnaW46SWx9KSwuLi5DbH07ZnVu''@;'; put 'put ''Y3Rpb24gUnMoaHQpe2lmKGh0PjEwMCl0aHJvdyBuZXcgdm4oIkZvcm1EYXRhIGZpZWxkIGlzIHRvbyBkZWVwbHkgbmVzdGVkICgiK2h0KyIgbGV2ZWxzKS4gTWF4IGRlcHRoOiAxMDAiLHZuLkVSUl9GT1JNX0RBVEFfREVQVEhfRVhDRUVERUQpfWZ1bmN0aW9uIHlkKGh0KXtmdW5jdGlvbiB5''@;'; put 'put ''dChqdCx6dCxtbixGbil7UnMoRm4pO2xldCBRbj1qdFtGbisrXTtpZigiX19wcm90b19fIj09PVFuKXJldHVybiEwO2NvbnN0IGxyPU51bWJlci5pc0Zpbml0ZSgrUW4pLGlpPUZuPj1qdC5sZW5ndGg7cmV0dXJuIFFuPSFRbiYmU24uaXNBcnJheShtbik/bW4ubGVuZ3RoOlFuLGlpPyhtbltR''@;'; put 'put ''bl09U24uaGFzT3duUHJvcChtbixRbik/U24uaXNBcnJheShtbltRbl0pP21uW1FuXS5jb25jYXQoenQpOlttbltRbl0senRdOnp0LCFscik6KCghU24uaGFzT3duUHJvcChtbixRbil8fCFTbi5pc09iamVjdChtbltRbl0pKSYmKG1uW1FuXT1bXSkseXQoanQsenQsbW5bUW5dLEZuKSYmU24u''@;'; put 'put ''aXNBcnJheShtbltRbl0pJiYobW5bUW5dPWZ1bmN0aW9uIEp1KGh0KXtjb25zdCB5dD17fSxqdD1PYmplY3Qua2V5cyhodCk7bGV0IHp0O2NvbnN0IG1uPWp0Lmxlbmd0aDtsZXQgRm47Zm9yKHp0PTA7enQ8bW47enQrKylGbj1qdFt6dF0seXRbRm5dPWh0W0ZuXTtyZXR1cm4geXR9KG1uW1Fu''@;'; put 'put ''XSkpLCFscil9aWYoU24uaXNGb3JtRGF0YShodCkmJlNuLmlzRnVuY3Rpb24oaHQuZW50cmllcykpe2NvbnN0IGp0PXt9O3JldHVybiBTbi5mb3JFYWNoRW50cnkoaHQsKHp0LG1uKT0+e3l0KGZ1bmN0aW9uIEwwKGh0KXtjb25zdCB5dD1bXSxqdD0vXHcrfFxbKFx3KildL2c7bGV0IHp0O2Zv''@;'; put 'put ''cig7bnVsbCE9PSh6dD1qdC5leGVjKGh0KSk7KVJzKHl0Lmxlbmd0aCkseXQucHVzaCgiW10iPT09enRbMF0/IiI6enRbMV18fHp0WzBdKTtyZXR1cm4geXR9KHp0KSxtbixqdCwwKX0pLGp0fXJldHVybiBudWxsfWNvbnN0IFVvPShodCx5dCk9Pm51bGwhPWh0JiZTbi5oYXNPd25Qcm9wKGh0''@;'; put 'put ''LHl0KT9odFt5dF06dm9pZCAwLFZyPXt0cmFuc2l0aW9uYWw6RnMsYWRhcHRlcjpbInhociIsImh0dHAiLCJmZXRjaCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKHl0LGp0KXtjb25zdCB6dD1qdC5nZXRDb250ZW50VHlwZSgpfHwiIixtbj16dC5pbmRleE9mKCJhcHBsaWNhdGlvbi9q''@;'; put 'put ''c29uIik+LTEsRm49U24uaXNPYmplY3QoeXQpO2lmKEZuJiZTbi5pc0hUTUxGb3JtKHl0KSYmKHl0PW5ldyBGb3JtRGF0YSh5dCkpLFNuLmlzRm9ybURhdGEoeXQpKXJldHVybiBtbj9KU09OLnN0cmluZ2lmeSh5ZCh5dCkpOnl0O2lmKFNuLmlzQXJyYXlCdWZmZXIoeXQpfHxTbi5pc0J1ZmZl''@;'; put 'put ''cih5dCl8fFNuLmlzU3RyZWFtKHl0KXx8U24uaXNGaWxlKHl0KXx8U24uaXNCbG9iKHl0KXx8U24uaXNSZWFkYWJsZVN0cmVhbSh5dCkpcmV0dXJuIHl0O2lmKFNuLmlzQXJyYXlCdWZmZXJWaWV3KHl0KSlyZXR1cm4geXQuYnVmZmVyO2lmKFNuLmlzVVJMU2VhcmNoUGFyYW1zKHl0KSlyZXR1''@;'; put 'put ''cm4ganQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSkseXQudG9TdHJpbmcoKTtsZXQgbHI7aWYoRm4pe2NvbnN0IGlpPVVvKHRoaXMsImZvcm1TZXJpYWxpemVyIik7aWYoenQuaW5kZXhPZigiYXBwbGljYXRpb24v''@;'; put 'put ''eC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIGZ1bmN0aW9uIFVzKGh0LHl0KXtyZXR1cm4gQ2koaHQsbmV3IExjLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLHt2aXNpdG9yOmZ1bmN0aW9uKGp0LHp0LG1uLEZuKXtyZXR1cm4gTGMuaXNOb2RlJiZTbi5pc0J1ZmZlcihqdCk/KHRo''@;'; put 'put ''aXMuYXBwZW5kKHp0LGp0LnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOkZuLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sLi4ueXR9KX0oeXQsaWkpLnRvU3RyaW5nKCk7aWYoKGxyPVNuLmlzRmlsZUxpc3QoeXQpKXx8enQuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0''@;'; put 'put ''YSIpPi0xKXtjb25zdCBraT1Vbyh0aGlzLCJlbnYiKSxXaT1raSYma2kuRm9ybURhdGE7cmV0dXJuIENpKGxyP3siZmlsZXNbXSI6eXR9Onl0LFdpJiZuZXcgV2ksaWkpfX1yZXR1cm4gRm58fG1uPyhqdC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLGZ1bmN0aW9uIGZh''@;'; put 'put ''KGh0LHl0LGp0KXtpZihTbi5pc1N0cmluZyhodCkpdHJ5e3JldHVybih5dHx8SlNPTi5wYXJzZSkoaHQpLFNuLnRyaW0oaHQpfWNhdGNoKHp0KXtpZigiU3ludGF4RXJyb3IiIT09enQubmFtZSl0aHJvdyB6dH1yZXR1cm4oanR8fEpTT04uc3RyaW5naWZ5KShodCl9KHl0KSk6eXR9XSx0cmFu''@;'; put 'put ''c2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oeXQpe2NvbnN0IGp0PVVvKHRoaXMsInRyYW5zaXRpb25hbCIpfHxWci50cmFuc2l0aW9uYWwsenQ9anQmJmp0LmZvcmNlZEpTT05QYXJzaW5nLG1uPVVvKHRoaXMsInJlc3BvbnNlVHlwZSIpLEZuPSJqc29uIj09PW1uO2lmKFNuLmlzUmVzcG9uc2Uo''@;'; put 'put ''eXQpfHxTbi5pc1JlYWRhYmxlU3RyZWFtKHl0KSlyZXR1cm4geXQ7aWYoeXQmJlNuLmlzU3RyaW5nKHl0KSYmKHp0JiYhbW58fEZuKSl7Y29uc3QgbHI9IShqdCYmanQuc2lsZW50SlNPTlBhcnNpbmcpJiZGbjt0cnl7cmV0dXJuIEpTT04ucGFyc2UoeXQsVW8odGhpcywicGFyc2VSZXZpdmVy''@;'; put 'put ''IikpfWNhdGNoKGlpKXtpZihscil0aHJvdyJTeW50YXhFcnJvciI9PT1paS5uYW1lP3ZuLmZyb20oaWksdm4uRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsVW8odGhpcywicmVzcG9uc2UiKSk6aWl9fXJldHVybiB5dH1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIs''@;'; put 'put ''eHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6TGMuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOkxjLmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oeXQpe3JldHVybiB5dD49MjAw''@;'; put 'put ''JiZ5dDwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtmdW5jdGlvbiBRYyhodCx5dCl7Y29uc3QganQ9dGhpc3x8VnIsenQ9eXR8fGp0LG1uPXZpLmZyb20oenQuaGVhZGVycyk7''@;'; put 'put ''bGV0IEZuPXp0LmRhdGE7cmV0dXJuIFNuLmZvckVhY2goaHQsZnVuY3Rpb24obHIpe0ZuPWxyLmNhbGwoanQsRm4sbW4ubm9ybWFsaXplKCkseXQ/eXQuc3RhdHVzOnZvaWQgMCl9KSxtbi5ub3JtYWxpemUoKSxGbn1mdW5jdGlvbiBtMihodCl7cmV0dXJuISghaHR8fCFodC5fX0NBTkNFTF9f''@;'; put 'put ''KX1Tbi5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsInF1ZXJ5Il0saHQ9PntWci5oZWFkZXJzW2h0XT17fX0pO2NsYXNzIGEwIGV4dGVuZHMgdm57Y29uc3RydWN0b3IoeXQsanQsenQpe3N1cGVyKHl0Pz8iY2FuY2VsZWQiLHZuLkVSUl9DQU5D''@;'; put 'put ''RUxFRCxqdCx6dCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIix0aGlzLl9fQ0FOQ0VMX189ITB9fWZ1bmN0aW9uIGJnKGh0LHl0LGp0KXtjb25zdCB6dD1qdC5jb25maWcudmFsaWRhdGVTdGF0dXM7anQuc3RhdHVzJiZ6dCYmIXp0KGp0LnN0YXR1cyk/eXQobmV3IHZuKCJSZXF1ZXN0IGZh''@;'; put 'put ''aWxlZCB3aXRoIHN0YXR1cyBjb2RlICIranQuc3RhdHVzLGp0LnN0YXR1cz49NDAwJiZqdC5zdGF0dXM8NTAwP3ZuLkVSUl9CQURfUkVRVUVTVDp2bi5FUlJfQkFEX1JFU1BPTlNFLGp0LmNvbmZpZyxqdC5yZXF1ZXN0LGp0KSk6aHQoanQpfWNvbnN0IHUzPShodCx5dCxqdD0zKT0+e2xldCB6''@;'; put 'put ''dD0wO2NvbnN0IG1uPWZ1bmN0aW9uIFZ1KGh0LHl0KXtodD1odHx8MTA7Y29uc3QganQ9bmV3IEFycmF5KGh0KSx6dD1uZXcgQXJyYXkoaHQpO2xldCBRbixtbj0wLEZuPTA7cmV0dXJuIHl0PXZvaWQgMCE9PXl0P3l0OjFlMyxmdW5jdGlvbihpaSl7Y29uc3Qga2k9RGF0ZS5ub3coKSxXaT16''@;'; put 'put ''dFtGbl07UW58fChRbj1raSksanRbbW5dPWlpLHp0W21uXT1raTtsZXQgS2k9Rm4sTmE9MDtmb3IoO0tpIT09bW47KU5hKz1qdFtLaSsrXSxLaSU9aHQ7aWYobW49KG1uKzEpJWh0LG1uPT09Rm4mJihGbj0oRm4rMSklaHQpLGtpLVFuPHl0KXJldHVybjtjb25zdCBSbz1XaSYma2ktV2k7cmV0''@;'; put 'put ''dXJuIFJvP01hdGgucm91bmQoMWUzKk5hL1JvKTp2b2lkIDB9fSg1MCwyNTApO3JldHVybiBmdW5jdGlvbiBMbShodCx5dCl7bGV0IG1uLEZuLGp0PTAsenQ9MWUzL3l0O2NvbnN0IFFuPShraSxXaT1EYXRlLm5vdygpKT0+e2p0PVdpLG1uPW51bGwsRm4mJihjbGVhclRpbWVvdXQoRm4pLEZu''@;'; put 'put ''PW51bGwpLGh0KC4uLmtpKX07cmV0dXJuWyguLi5raSk9Pntjb25zdCBXaT1EYXRlLm5vdygpLEtpPVdpLWp0O0tpPj16dD9RbihraSxXaSk6KG1uPWtpLEZufHwoRm49c2V0VGltZW91dCgoKT0+e0ZuPW51bGwsUW4obW4pfSx6dC1LaSkpKX0sKCk9Pm1uJiZRbihtbildfShGbj0+e2lmKCFG''@;'; put 'put ''bnx8Im51bWJlciIhPXR5cGVvZiBGbi5sb2FkZWQpcmV0dXJuO2NvbnN0IFFuPUZuLmxvYWRlZCxscj1Gbi5sZW5ndGhDb21wdXRhYmxlP0ZuLnRvdGFsOnZvaWQgMCxpaT1udWxsIT1scj9NYXRoLm1pbihRbixscik6UW4sa2k9TWF0aC5tYXgoMCxpaS16dCksV2k9bW4oa2kpO3p0PU1hdGgu''@;'; put 'put ''bWF4KHp0LGlpKSxodCh7bG9hZGVkOmlpLHRvdGFsOmxyLHByb2dyZXNzOmxyP2lpL2xyOnZvaWQgMCxieXRlczpraSxyYXRlOldpfHx2b2lkIDAsZXN0aW1hdGVkOldpJiZscj8obHItaWkpL1dpOnZvaWQgMCxldmVudDpGbixsZW5ndGhDb21wdXRhYmxlOm51bGwhPWxyLFt5dD8iZG93bmxv''@;'; put 'put ''YWQiOiJ1cGxvYWQiXTohMH0pfSxqdCl9LG5oPShodCx5dCk9Pntjb25zdCBqdD1udWxsIT1odDtyZXR1cm5benQ9Pnl0WzBdKHtsZW5ndGhDb21wdXRhYmxlOmp0LHRvdGFsOmh0LGxvYWRlZDp6dH0pLHl0WzFdXX0sd2c9aHQ9PiguLi55dCk9PlNuLmFzYXAoKCk9Pmh0KC4uLnl0KSk7dmFy''@;'; put 'put ''IEpjPUxjLmhhc1N0YW5kYXJkQnJvd3NlckVudj8oKGh0LHl0KT0+anQ9PihqdD1uZXcgVVJMKGp0LExjLm9yaWdpbiksaHQucHJvdG9jb2w9PT1qdC5wcm90b2NvbCYmaHQuaG9zdD09PWp0Lmhvc3QmJih5dHx8aHQucG9ydD09PWp0LnBvcnQpKSkobmV3IFVSTChMYy5vcmlnaW4pLExjLm5h''@;'; put 'put ''dmlnYXRvciYmLyhtc2llfHRyaWRlbnQpL2kudGVzdChMYy5uYXZpZ2F0b3IudXNlckFnZW50KSk6KCk9PiEwLGdmPUxjLmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoaHQseXQsanQsenQsbW4sRm4sUW4pe2lmKHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuO2NvbnN0IGxyPVtgJHto''@;'; put 'put ''dH09JHtlbmNvZGVVUklDb21wb25lbnQoeXQpfWBdO1NuLmlzTnVtYmVyKGp0KSYmbHIucHVzaChgZXhwaXJlcz0ke25ldyBEYXRlKGp0KS50b1VUQ1N0cmluZygpfWApLFNuLmlzU3RyaW5nKHp0KSYmbHIucHVzaChgcGF0aD0ke3p0fWApLFNuLmlzU3RyaW5nKG1uKSYmbHIucHVzaChgZG9t''@;'; put 'put ''YWluPSR7bW59YCksITA9PT1GbiYmbHIucHVzaCgic2VjdXJlIiksU24uaXNTdHJpbmcoUW4pJiZsci5wdXNoKGBTYW1lU2l0ZT0ke1FufWApLGRvY3VtZW50LmNvb2tpZT1sci5qb2luKCI7ICIpfSxyZWFkKGh0KXtpZih0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybiBudWxsO2NvbnN0IHl0''@;'; put 'put ''PWRvY3VtZW50LmNvb2tpZS5zcGxpdCgiOyIpO2ZvcihsZXQganQ9MDtqdDx5dC5sZW5ndGg7anQrKyl7Y29uc3QgenQ9eXRbanRdLnJlcGxhY2UoL15ccysvLCIiKSxtbj16dC5pbmRleE9mKCI9Iik7aWYoLTEhPT1tbiYmenQuc2xpY2UoMCxtbik9PT1odCl0cnl7cmV0dXJuIGRlY29kZVVS''@;'; put 'put ''SUNvbXBvbmVudCh6dC5zbGljZShtbisxKSl9Y2F0Y2h7cmV0dXJuIHp0LnNsaWNlKG1uKzEpfX1yZXR1cm4gbnVsbH0scmVtb3ZlKGh0KXt0aGlzLndyaXRlKGh0LCIiLERhdGUubm93KCktODY0ZTUsIi8iKX19Ont3cml0ZSgpe30scmVhZDooKT0+bnVsbCxyZW1vdmUoKXt9fTtjb25zdCBF''@;'; put 'put ''bz0vXmh0dHBzPzooPyFcL1wvKS9pLEJ1PS9bXHRcblxyXS9nO2Z1bmN0aW9uIGhjKGh0LHl0KXtpZigic3RyaW5nIj09dHlwZW9mIGh0JiZFby50ZXN0KGZ1bmN0aW9uIFJ1KGh0KXtyZXR1cm4gZnVuY3Rpb24gTjEoaHQpe2xldCB5dD0wO2Zvcig7eXQ8aHQubGVuZ3RoJiZodC5jaGFyQ29k''@;'; put 'put ''ZUF0KHl0KTw9MzI7KXl0Kys7cmV0dXJuIGh0LnNsaWNlKHl0KX0oaHQpLnJlcGxhY2UoQnUsIiIpfShodCkpKXRocm93IG5ldyB2bignSW52YWxpZCBVUkw6IG1pc3NpbmcgIi8vIiBhZnRlciBwcm90b2NvbCcsdm4uRVJSX0lOVkFMSURfVVJMLHl0KX1mdW5jdGlvbiBlZChodCx5dCxqdCx6''@;'; put 'put ''dCl7aGMoeXQsenQpO2xldCBtbj0hZnVuY3Rpb24gbHAoaHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgaHQmJi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoaHQpfSh5dCk7cmV0dXJuIGh0JiYobW58fCExPT09anQpPyhoYyhodCx6dCksZnVuY3Rpb24gRGwoaHQseXQpe3Jl''@;'; put 'put ''dHVybiB5dD9odC5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIreXQucmVwbGFjZSgvXlwvKy8sIiIpOmh0fShodCx5dCkpOnl0fWNvbnN0IEpuPWh0PT5odCBpbnN0YW5jZW9mIHZpP3suLi5odH06aHQ7ZnVuY3Rpb24gY2woaHQseXQpe2h0PWh0fHx7fSx5dD15dHx8e307Y29uc3QganQ9T2Jq''@;'; put 'put ''ZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiB6dChXaSxLaSxOYSxSbyl7cmV0dXJuIFNuLmlzUGxhaW5PYmplY3QoV2kpJiZTbi5pc1BsYWluT2JqZWN0KEtpKT9Tbi5tZXJnZS5jYWxsKHtjYXNlbGVzczpSb30sV2ksS2kpOlNuLmlzUGxhaW5PYmplY3QoS2kpP1NuLm1lcmdlKHt9LEtpKTpT''@;'; put 'put ''bi5pc0FycmF5KEtpKT9LaS5zbGljZSgpOktpfWZ1bmN0aW9uIG1uKFdpLEtpLE5hLFJvKXtyZXR1cm4gU24uaXNVbmRlZmluZWQoS2kpP1NuLmlzVW5kZWZpbmVkKFdpKT92b2lkIDA6enQodm9pZCAwLFdpLDAsUm8pOnp0KFdpLEtpLDAsUm8pfWZ1bmN0aW9uIEZuKFdpLEtpKXtpZighU24u''@;'; put 'put ''aXNVbmRlZmluZWQoS2kpKXJldHVybiB6dCh2b2lkIDAsS2kpfWZ1bmN0aW9uIFFuKFdpLEtpKXtyZXR1cm4gU24uaXNVbmRlZmluZWQoS2kpP1NuLmlzVW5kZWZpbmVkKFdpKT92b2lkIDA6enQodm9pZCAwLFdpKTp6dCh2b2lkIDAsS2kpfWZ1bmN0aW9uIGlpKFdpLEtpLE5hKXtyZXR1cm4g''@;'; put 'put ''U24uaGFzT3duUHJvcCh5dCxOYSk/enQoV2ksS2kpOlNuLmhhc093blByb3AoaHQsTmEpP3p0KHZvaWQgMCxXaSk6dm9pZCAwfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShqdCwiaGFzT3duUHJvcGVydHkiLHtfX3Byb3RvX186bnVsbCx2YWx1ZTpPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl''@;'; put 'put ''cnR5LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7Y29uc3Qga2k9e3VybDpGbixtZXRob2Q6Rm4sZGF0YTpGbixiYXNlVVJMOlFuLHRyYW5zZm9ybVJlcXVlc3Q6UW4sdHJhbnNmb3JtUmVzcG9uc2U6UW4scGFyYW1zU2VyaWFsaXplcjpRbix0aW1lb3V0OlFu''@;'; put 'put ''LHRpbWVvdXRNZXNzYWdlOlFuLHdpdGhDcmVkZW50aWFsczpRbix3aXRoWFNSRlRva2VuOlFuLGFkYXB0ZXI6UW4scmVzcG9uc2VUeXBlOlFuLHhzcmZDb29raWVOYW1lOlFuLHhzcmZIZWFkZXJOYW1lOlFuLG9uVXBsb2FkUHJvZ3Jlc3M6UW4sb25Eb3dubG9hZFByb2dyZXNzOlFuLGRlY29t''@;'; put 'put ''cHJlc3M6UW4sbWF4Q29udGVudExlbmd0aDpRbixtYXhCb2R5TGVuZ3RoOlFuLGJlZm9yZVJlZGlyZWN0OlFuLHRyYW5zcG9ydDpRbixodHRwQWdlbnQ6UW4saHR0cHNBZ2VudDpRbixjYW5jZWxUb2tlbjpRbixzb2NrZXRQYXRoOlFuLGFsbG93ZWRTb2NrZXRQYXRoczpRbixyZXNwb25zZUVu''@;'; put 'put ''Y29kaW5nOlFuLHZhbGlkYXRlU3RhdHVzOmlpLGhlYWRlcnM6KFdpLEtpLE5hKT0+bW4oSm4oV2kpLEpuKEtpKSwwLCEwKX07cmV0dXJuIFNuLmZvckVhY2goT2JqZWN0LmtleXMoey4uLmh0LC4uLnl0fSksZnVuY3Rpb24oS2kpe2lmKCJfX3Byb3RvX18iPT09S2l8fCJjb25zdHJ1Y3RvciI9''@;'; put 'put ''PT1LaXx8InByb3RvdHlwZSI9PT1LaSlyZXR1cm47Y29uc3QgTmE9U24uaGFzT3duUHJvcChraSxLaSk/a2lbS2ldOm1uLG9yPU5hKFNuLmhhc093blByb3AoaHQsS2kpP2h0W0tpXTp2b2lkIDAsU24uaGFzT3duUHJvcCh5dCxLaSk/eXRbS2ldOnZvaWQgMCxLaSk7U24uaXNVbmRlZmluZWQo''@;'; put 'put ''b3IpJiZOYSE9PWlpfHwoanRbS2ldPW9yKX0pLFNuLmhhc093blByb3AoeXQsInZhbGlkYXRlU3RhdHVzIikmJlNuLmlzVW5kZWZpbmVkKHl0LnZhbGlkYXRlU3RhdHVzKSYmITE9PT1mdW5jdGlvbiBscihXaSl7Y29uc3QgS2k9U24uaGFzT3duUHJvcCh5dCwidHJhbnNpdGlvbmFsIik/eXQu''@;'; put 'put ''dHJhbnNpdGlvbmFsOnZvaWQgMDtpZighU24uaXNVbmRlZmluZWQoS2kpKXtpZighU24uaXNQbGFpbk9iamVjdChLaSkpcmV0dXJuO2lmKFNuLmhhc093blByb3AoS2ksV2kpKXJldHVybiBLaVtXaV19Y29uc3QgTmE9U24uaGFzT3duUHJvcChodCwidHJhbnNpdGlvbmFsIik/aHQudHJhbnNp''@;'; put 'put ''dGlvbmFsOnZvaWQgMDtpZihTbi5pc1BsYWluT2JqZWN0KE5hKSYmU24uaGFzT3duUHJvcChOYSxXaSkpcmV0dXJuIE5hW1dpXX0oInZhbGlkYXRlU3RhdHVzVW5kZWZpbmVkUmVzb2x2ZXMiKSYmKFNuLmhhc093blByb3AoaHQsInZhbGlkYXRlU3RhdHVzIik/anQudmFsaWRhdGVTdGF0dXM9''@;'; put 'put ''enQodm9pZCAwLGh0LnZhbGlkYXRlU3RhdHVzKTpkZWxldGUganQudmFsaWRhdGVTdGF0dXMpLGp0fWNvbnN0IG1pPVsiY29udGVudC10eXBlIiwiY29udGVudC1sZW5ndGgiXTtmdW5jdGlvbiBjbihodCl7Y29uc3QgeXQ9Y2woe30saHQpLGp0PU5hPT5Tbi5oYXNPd25Qcm9wKHl0LE5hKT95''@;'; put 'put ''dFtOYV06dm9pZCAwLHp0PWp0KCJkYXRhIik7bGV0IG1uPWp0KCJ3aXRoWFNSRlRva2VuIik7Y29uc3QgRm49anQoInhzcmZIZWFkZXJOYW1lIiksUW49anQoInhzcmZDb29raWVOYW1lIik7bGV0IGxyPWp0KCJoZWFkZXJzIik7Y29uc3QgaWk9anQoImF1dGgiKSxraT1qdCgiYmFzZVVSTCIp''@;'; put 'put ''LFdpPWp0KCJhbGxvd0Fic29sdXRlVXJscyIpLEtpPWp0KCJ1cmwiKTtpZih5dC5oZWFkZXJzPWxyPXZpLmZyb20obHIpLHl0LnVybD10YShlZChraSxLaSxXaSx5dCksanQoInBhcmFtcyIpLGp0KCJwYXJhbXNTZXJpYWxpemVyIikpLGlpKXtjb25zdCBOYT1Tbi5nZXRTYWZlUHJvcChpaSwi''@;'; put 'put ''dXNlcm5hbWUiKXx8IiIsUm89U24uZ2V0U2FmZVByb3AoaWksInBhc3N3b3JkIil8fCIiO3RyeXtsci5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoTmErIjoiKyhSbz8oaHQ9PmVuY29kZVVSSUNvbXBvbmVudChodCkucmVwbGFjZSgvJShbMC05QS1GXXsyfSkvZ2ksKHl0LGp0''@;'; put 'put ''KT0+U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChqdCwxNikpKSkoUm8pOiIiKSkpfWNhdGNoKGRsKXt0aHJvdyB2bi5mcm9tKGRsLHZuLkVSUl9CQURfT1BUSU9OX1ZBTFVFLGh0KX19aWYoU24uaXNGb3JtRGF0YSh6dCkmJihMYy5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fExjLmhhc1N0''@;'; put 'put ''YW5kYXJkQnJvd3NlcldlYldvcmtlckVudnx8U24uaXNSZWFjdE5hdGl2ZSh6dCk/bHIuc2V0Q29udGVudFR5cGUodm9pZCAwKTpTbi5pc0Z1bmN0aW9uKHp0LmdldEhlYWRlcnMpJiZmdW5jdGlvbiBldShodCx5dCxqdCl7ImNvbnRlbnQtb25seSI9PT1qdD9PYmplY3QuZW50cmllcyh5dHx8''@;'; put 'put ''e30pLmZvckVhY2goKFt6dCxtbl0pPT57bWkuaW5jbHVkZXMoenQudG9Mb3dlckNhc2UoKSkmJmh0LnNldCh6dCxtbil9KTpodC5zZXQoeXQpfShscix6dC5nZXRIZWFkZXJzKCksanQoImZvcm1EYXRhSGVhZGVyUG9saWN5IikpKSxMYy5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihTbi5pc0Z1''@;'; put 'put ''bmN0aW9uKG1uKSYmKG1uPW1uKHl0KSksITA9PT1tbnx8bnVsbD09bW4mJkpjKHl0LnVybCkpKXtjb25zdCBSbz1GbiYmUW4mJmdmLnJlYWQoUW4pO1JvJiZsci5zZXQoRm4sUm8pfXJldHVybiB5dH12YXIgZ2k9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1IiYmZnVuY3Rpb24oaHQpe3JldHVy''@;'; put 'put ''biBuZXcgUHJvbWlzZShmdW5jdGlvbihqdCx6dCl7Y29uc3QgbW49Y24oaHQpO2xldCBGbj1tbi5kYXRhO2NvbnN0IFFuPXZpLmZyb20obW4uaGVhZGVycykubm9ybWFsaXplKCk7bGV0IFdpLEtpLE5hLFJvLGRsLHtyZXNwb25zZVR5cGU6bHIsb25VcGxvYWRQcm9ncmVzczppaSxvbkRvd25s''@;'; put 'put ''b2FkUHJvZ3Jlc3M6a2l9PW1uO2Z1bmN0aW9uIG9yKCl7Um8mJlJvKCksZGwmJmRsKCksbW4uY2FuY2VsVG9rZW4mJm1uLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKFdpKSxtbi5zaWduYWwmJm1uLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsV2kpfWxldCBjbz1uZXcgWE1M''@;'; put 'put ''SHR0cFJlcXVlc3Q7ZnVuY3Rpb24gc24oKXtpZighY28pcmV0dXJuO2NvbnN0IERhPXZpLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBjbyYmY28uZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpO2JnKGZ1bmN0aW9uKG5jKXtqdChuYyksb3IoKX0sZnVuY3Rpb24obmMpe3p0KG5jKSxv''@;'; put 'put ''cigpfSx7ZGF0YTpsciYmInRleHQiIT09bHImJiJqc29uIiE9PWxyP2NvLnJlc3BvbnNlOmNvLnJlc3BvbnNlVGV4dCxzdGF0dXM6Y28uc3RhdHVzLHN0YXR1c1RleHQ6Y28uc3RhdHVzVGV4dCxoZWFkZXJzOkRhLGNvbmZpZzpodCxyZXF1ZXN0OmNvfSksY289bnVsbH1jby5vcGVuKG1uLm1l''@;'; put 'put ''dGhvZC50b1VwcGVyQ2FzZSgpLG1uLnVybCwhMCksY28udGltZW91dD1tbi50aW1lb3V0LCJvbmxvYWRlbmQiaW4gY28/Y28ub25sb2FkZW5kPXNuOmNvLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFjb3x8NCE9PWNvLnJlYWR5U3RhdGV8fDA9PT1jby5zdGF0dXMmJighY28ucmVz''@;'; put 'put ''cG9uc2VVUkx8fCFjby5yZXNwb25zZVVSTC5zdGFydHNXaXRoKCJmaWxlOiIpKXx8c2V0VGltZW91dChzbil9LGNvLm9uYWJvcnQ9ZnVuY3Rpb24oKXtjbyYmKHp0KG5ldyB2bigiUmVxdWVzdCBhYm9ydGVkIix2bi5FQ09OTkFCT1JURUQsaHQsY28pKSxvcigpLGNvPW51bGwpfSxjby5vbmVy''@;'; put 'put ''cm9yPWZ1bmN0aW9uKG5zKXtjb25zdCBXYz1uZXcgdm4obnMmJm5zLm1lc3NhZ2U/bnMubWVzc2FnZToiTmV0d29yayBFcnJvciIsdm4uRVJSX05FVFdPUkssaHQsY28pO1djLmV2ZW50PW5zfHxudWxsLHp0KFdjKSxvcigpLGNvPW51bGx9LGNvLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBu''@;'; put 'put ''cz1tbi50aW1lb3V0PyJ0aW1lb3V0IG9mICIrbW4udGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIjttbi50aW1lb3V0RXJyb3JNZXNzYWdlJiYobnM9bW4udGltZW91dEVycm9yTWVzc2FnZSksenQobmV3IHZuKG5zLChtbi50cmFuc2l0aW9uYWx8fEZzKS5jbGFyaWZ5''@;'; put 'put ''VGltZW91dEVycm9yP3ZuLkVUSU1FRE9VVDp2bi5FQ09OTkFCT1JURUQsaHQsY28pKSxvcigpLGNvPW51bGx9LHZvaWQgMD09PUZuJiZRbi5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBjbyYmU24uZm9yRWFjaChNaShRbiksZnVuY3Rpb24obnMsRWwpe2NvLnNl''@;'; put 'put ''dFJlcXVlc3RIZWFkZXIoRWwsbnMpfSksU24uaXNVbmRlZmluZWQobW4ud2l0aENyZWRlbnRpYWxzKXx8KGNvLndpdGhDcmVkZW50aWFscz0hIW1uLndpdGhDcmVkZW50aWFscyksbHImJiJqc29uIiE9PWxyJiYoY28ucmVzcG9uc2VUeXBlPW1uLnJlc3BvbnNlVHlwZSksa2kmJihbTmEsZGxd''@;'; put 'put ''PXUzKGtpLCEwKSxjby5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsTmEpKSxpaSYmY28udXBsb2FkJiYoW0tpLFJvXT11MyhpaSksY28udXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixLaSksY28udXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlbmQiLFJvKSksKG1u''@;'; put 'put ''LmNhbmNlbFRva2VufHxtbi5zaWduYWwpJiYoV2k9RGE9PntjbyYmKHp0KCFEYXx8RGEudHlwZT9uZXcgYTAobnVsbCxodCxjbyk6RGEpLGNvLmFib3J0KCksb3IoKSxjbz1udWxsKX0sbW4uY2FuY2VsVG9rZW4mJm1uLmNhbmNlbFRva2VuLnN1YnNjcmliZShXaSksbW4uc2lnbmFsJiYobW4u''@;'; put 'put ''c2lnbmFsLmFib3J0ZWQ/V2koKTptbi5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLFdpKSkpO2NvbnN0IGlvPWZ1bmN0aW9uIFVhKGh0KXtjb25zdCB5dD0vXihbLStcd117MSwyNX0pOig/OlwvXC8pPy8uZXhlYyhodCk7cmV0dXJuIHl0JiZ5dFsxXXx8IiJ9KG1uLnVybCk7aWYo''@;'; put 'put ''aW8mJiFMYy5wcm90b2NvbHMuaW5jbHVkZXMoaW8pKXJldHVybiB6dChuZXcgdm4oIlVuc3VwcG9ydGVkIHByb3RvY29sICIraW8rIjoiLHZuLkVSUl9CQURfUkVRVUVTVCxodCkpLHZvaWQgb3IoKTtjby5zZW5kKEZufHxudWxsKX0pfTtjb25zdCB3bz0oaHQseXQpPT57aWYoaHQ9aHQ/aHQu''@;'; put 'put ''ZmlsdGVyKEJvb2xlYW4pOltdLCF5dCYmIWh0Lmxlbmd0aClyZXR1cm47Y29uc3QganQ9bmV3IEFib3J0Q29udHJvbGxlcjtsZXQgenQ9ITE7Y29uc3QgbW49ZnVuY3Rpb24oaWkpe2lmKCF6dCl7enQ9ITAsUW4oKTtjb25zdCBraT1paSBpbnN0YW5jZW9mIEVycm9yP2lpOnRoaXMucmVhc29u''@;'; put 'put ''O2p0LmFib3J0KGtpIGluc3RhbmNlb2Ygdm4/a2k6bmV3IGEwKGtpIGluc3RhbmNlb2YgRXJyb3I/a2kubWVzc2FnZTpraSkpfX07bGV0IEZuPXl0JiZzZXRUaW1lb3V0KCgpPT57Rm49bnVsbCxtbihuZXcgdm4oYHRpbWVvdXQgb2YgJHt5dH1tcyBleGNlZWRlZGAsdm4uRVRJTUVET1VUKSl9''@;'; put 'put ''LHl0KTtjb25zdCBRbj0oKT0+e2h0JiYoRm4mJmNsZWFyVGltZW91dChGbiksRm49bnVsbCxodC5mb3JFYWNoKGlpPT57aWkudW5zdWJzY3JpYmU/aWkudW5zdWJzY3JpYmUobW4pOmlpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0Iixtbil9KSxodD1udWxsKX07aHQuZm9yRWFjaChpaT0+''@;'; put 'put ''aWkuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG1uLHtvbmNlOiEwfSkpO2NvbnN0e3NpZ25hbDpscn09anQ7cmV0dXJuIGxyLnVuc3Vic2NyaWJlPSgpPT5Tbi5hc2FwKFFuKSxscn0sbHM9ZnVuY3Rpb24qKGh0LHl0KXtsZXQganQ9aHQuYnl0ZUxlbmd0aDtpZihqdDx5dClyZXR1cm4gdm9p''@;'; put 'put ''ZCh5aWVsZCBodCk7bGV0IG1uLHp0PTA7Zm9yKDt6dDxqdDspbW49enQreXQseWllbGQgaHQuc2xpY2UoenQsbW4pLHp0PW1ufSxFcj1mdW5jdGlvbigpe3ZhciBodD1fd3JhcEFzeW5jR2VuZXJhdG9yKGZ1bmN0aW9uKih5dCxqdCl7dmFyIEZuLHp0PSExLG1uPSExO3RyeXtmb3IodmFyIGxy''@;'; put 'put ''LFFuPV9hc3luY0l0ZXJhdG9yKHRjKHl0KSk7enQ9IShscj15aWVsZCBfYXdhaXRBc3luY0dlbmVyYXRvcihRbi5uZXh0KCkpKS5kb25lO3p0PSExKXtjb25zdCBpaT1sci52YWx1ZTt5aWVsZCpfYXN5bmNHZW5lcmF0b3JEZWxlZ2F0ZShfYXN5bmNJdGVyYXRvcihscyhpaSxqdCkpLF9hd2Fp''@;'; put 'put ''dEFzeW5jR2VuZXJhdG9yKX19Y2F0Y2goaWkpe21uPSEwLEZuPWlpfWZpbmFsbHl7dHJ5e3p0JiZudWxsIT1Rbi5yZXR1cm4mJih5aWVsZCBfYXdhaXRBc3luY0dlbmVyYXRvcihRbi5yZXR1cm4oKSkpfWZpbmFsbHl7aWYobW4pdGhyb3cgRm59fX0pO3JldHVybiBmdW5jdGlvbihqdCx6dCl7''@;'; put 'put ''cmV0dXJuIGh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksdGM9ZnVuY3Rpb24oKXt2YXIgaHQ9X3dyYXBBc3luY0dlbmVyYXRvcihmdW5jdGlvbiooeXQpe2lmKHl0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSlyZXR1cm4gdm9pZCh5aWVsZCpfYXN5bmNHZW5lcmF0b3JEZWxlZ2F0ZShfYXN5''@;'; put 'put ''bmNJdGVyYXRvcih5dCksX2F3YWl0QXN5bmNHZW5lcmF0b3IpKTtjb25zdCBqdD15dC5nZXRSZWFkZXIoKTt0cnl7Zm9yKDs7KXtjb25zdHtkb25lOnp0LHZhbHVlOm1ufT15aWVsZCBfYXdhaXRBc3luY0dlbmVyYXRvcihqdC5yZWFkKCkpO2lmKHp0KWJyZWFrO3lpZWxkIG1ufX1maW5hbGx5''@;'; put 'put ''e3lpZWxkIF9hd2FpdEFzeW5jR2VuZXJhdG9yKGp0LmNhbmNlbCgpKX19KTtyZXR1cm4gZnVuY3Rpb24oanQpe3JldHVybiBodC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLFFhPShodCx5dCxqdCx6dCk9Pntjb25zdCBtbj1FcihodCx5dCk7bGV0IFFuLEZuPTAsbHI9aWk9PntRbnx8KFFu''@;'; put 'put ''PSEwLHp0JiZ6dChpaSkpfTtyZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtwdWxsOmlpPT5fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooKXt0cnl7Y29uc3R7ZG9uZTpraSx2YWx1ZTpXaX09eWllbGQgbW4ubmV4dCgpO2lmKGtpKXJldHVybiBscigpLHZvaWQgaWkuY2xvc2UoKTtpZihq''@;'; put 'put ''dCl7bGV0IE5hPUZuKz1XaS5ieXRlTGVuZ3RoO2p0KE5hKX1paS5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KFdpKSl9Y2F0Y2goa2kpe3Rocm93IGxyKGtpKSxraX19KSgpLGNhbmNlbDppaT0+KGxyKGlpKSxtbi5yZXR1cm4oKSl9LHtoaWdoV2F0ZXJNYXJrOjJ9KX0sdWw9aHQ9Pmh0Pj00OCYm''@;'; put 'put ''aHQ8PTU3fHxodD49NjUmJmh0PD03MHx8aHQ+PTk3JiZodDw9MTAyLHBzPShodCx5dCxqdCk9Pnl0KzI8anQmJnVsKGh0LmNoYXJDb2RlQXQoeXQrMSkpJiZ1bChodC5jaGFyQ29kZUF0KHl0KzIpKSx7aXNGdW5jdGlvbjpMbH09U24sSmg9aHQ9PntpZighU24uaXNTdHJpbmcoaHQpKXJldHVy''@;'; put 'put ''biBodDt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChodCl9Y2F0Y2h7cmV0dXJuIGh0fX0sT2w9KGh0LC4uLnl0KT0+e3RyeXtyZXR1cm4hIWh0KC4uLnl0KX1jYXRjaHtyZXR1cm4hMX19LEZyPWh0PT57Y29uc3QgeXQ9bnVsbCE9U24uZ2xvYmFsP1NuLmdsb2JhbDpnbG9iYWxUaGlz''@;'; put 'put ''LHtSZWFkYWJsZVN0cmVhbTpqdCxUZXh0RW5jb2Rlcjp6dH09eXQ7aHQ9U24ubWVyZ2UuY2FsbCh7c2tpcFVuZGVmaW5lZDohMH0se1JlcXVlc3Q6eXQuUmVxdWVzdCxSZXNwb25zZTp5dC5SZXNwb25zZX0saHQpO2NvbnN0e2ZldGNoOm1uLFJlcXVlc3Q6Rm4sUmVzcG9uc2U6UW59PWh0LGxy''@;'; put 'put ''PW1uP0xsKG1uKToiZnVuY3Rpb24iPT10eXBlb2YgZmV0Y2gsaWk9TGwoRm4pLGtpPUxsKFFuKTtpZighbHIpcmV0dXJuITE7Y29uc3QgV2k9bHImJkxsKGp0KSxLaT1sciYmKCJmdW5jdGlvbiI9PXR5cGVvZiB6dD8oc249PmlvPT5zbi5lbmNvZGUoaW8pKShuZXcgenQpOmZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIHNuPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihpbyl7cmV0dXJuIG5ldyBVaW50OEFycmF5KHlpZWxkIG5ldyBGbihpbykuYXJyYXlCdWZmZXIoKSl9KTtyZXR1cm4gZnVuY3Rpb24oaW8pe3JldHVybiBzbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSxOYT1paSYmV2kmJk9s''@;'; put 'put ''KCgpPT57bGV0IHNuPSExO2NvbnN0IGlvPW5ldyBGbihMYy5vcmlnaW4se2JvZHk6bmV3IGp0LG1ldGhvZDoiUE9TVCIsZ2V0IGR1cGxleCgpe3JldHVybiBzbj0hMCwiaGFsZiJ9fSksRGE9aW8uaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpO3JldHVybiBudWxsIT1pby5ib2R5JiZpby5i''@;'; put 'put ''b2R5LmNhbmNlbCgpLHNuJiYhRGF9KSxSbz1raSYmV2kmJk9sKCgpPT5Tbi5pc1JlYWRhYmxlU3RyZWFtKG5ldyBRbigiIikuYm9keSkpLGRsPXtzdHJlYW06Um8mJihzbj0+c24uYm9keSl9O2xyJiZbInRleHQiLCJhcnJheUJ1ZmZlciIsImJsb2IiLCJmb3JtRGF0YSIsInN0cmVhbSJdLmZv''@;'; put 'put ''ckVhY2goc249PnshZGxbc25dJiYoZGxbc25dPShpbyxEYSk9PntsZXQgbnM9aW8mJmlvW3NuXTtpZihucylyZXR1cm4gbnMuY2FsbChpbyk7dGhyb3cgbmV3IHZuKGBSZXNwb25zZSB0eXBlICcke3NufScgaXMgbm90IHN1cHBvcnRlZGAsdm4uRVJSX05PVF9TVVBQT1JULERhKX0pfSk7Y29u''@;'; put 'put ''c3Qgb3I9ZnVuY3Rpb24oKXt2YXIgc249X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKGlvKXtyZXR1cm4gbnVsbD09aW8/MDpTbi5pc0Jsb2IoaW8pP2lvLnNpemU6U24uaXNTcGVjQ29tcGxpYW50Rm9ybShpbyk/KHlpZWxkIG5ldyBGbihMYy5vcmlnaW4se21ldGhvZDoiUE9TVCIsYm9k''@;'; put 'put ''eTppb30pLmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg6U24uaXNBcnJheUJ1ZmZlclZpZXcoaW8pfHxTbi5pc0FycmF5QnVmZmVyKGlvKT9pby5ieXRlTGVuZ3RoOihTbi5pc1VSTFNlYXJjaFBhcmFtcyhpbykmJihpbys9IiIpLFNuLmlzU3RyaW5nKGlvKT8oeWllbGQgS2koaW8pKS5ieXRl''@;'; put 'put ''TGVuZ3RoOnZvaWQgMCl9KTtyZXR1cm4gZnVuY3Rpb24oRGEpe3JldHVybiBzbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGNvPWZ1bmN0aW9uKCl7dmFyIHNuPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihpbyxEYSl7cmV0dXJuIFNuLnRvRmluaXRlTnVtYmVyKGlvLmdldENvbnRl''@;'; put 'put ''bnRMZW5ndGgoKSk/P29yKERhKX0pO3JldHVybiBmdW5jdGlvbihEYSxucyl7cmV0dXJuIHNuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHNuPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihpbyl7bGV0e3VybDpEYSxtZXRob2Q6bnMsZGF0YTpF''@;'; put 'put ''bCxzaWduYWw6V2MsY2FuY2VsVG9rZW46bmMsdGltZW91dDp5MixvbkRvd25sb2FkUHJvZ3Jlc3M6RHUsb25VcGxvYWRQcm9ncmVzczplMSxyZXNwb25zZVR5cGU6dDEsaGVhZGVyczpiZCx3aXRoQ3JlZGVudGlhbHM6czA9InNhbWUtb3JpZ2luIixmZXRjaE9wdGlvbnM6YjIsbWF4Q29udGVu''@;'; put 'put ''dExlbmd0aDpraCxtYXhCb2R5TGVuZ3RoOmp1fT1jbihpbyk7Y29uc3QgQmQ9U24uaXNOdW1iZXIoa2gpJiZraD4tMSx3Mj1Tbi5pc051bWJlcihqdSkmJmp1Pi0xO2xldCBxcz1tbnx8ZmV0Y2g7dDE9dDE/KHQxKyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0IjtsZXQgSmE9d28oW1djLG5jJiZu''@;'; put 'put ''Yy50b0Fib3J0U2lnbmFsKCldLHkyKSxObD1udWxsO2NvbnN0IG4xPUphJiZKYS51bnN1YnNjcmliZSYmKCgpPT57SmEudW5zdWJzY3JpYmUoKX0pO2xldCBqZCxOMD1udWxsO2NvbnN0IHIxPSgpPT5uZXcgdm4oIlJlcXVlc3QgYm9keSBsYXJnZXIgdGhhbiBtYXhCb2R5TGVuZ3RoIGxpbWl0''@;'; put 'put ''Iix2bi5FUlJfQkFEX1JFUVVFU1QsaW8sTmwpO3RyeXtsZXQgaGw7Y29uc3QgY3M9U24uaGFzT3duUHJvcChpbywiYXV0aCIpP2lvLmF1dGg6dm9pZCAwO2lmKGNzKXtobD17dXNlcm5hbWU6U24uZ2V0U2FmZVByb3AoY3MsInVzZXJuYW1lIil8fCIiLHBhc3N3b3JkOlNuLmdldFNhZmVQcm9w''@;'; put 'put ''KGNzLCJwYXNzd29yZCIpfHwiIn19aWYoKGh0PT57Y29uc3QgeXQ9aHQuaW5kZXhPZigiOi8vIik7bGV0IGp0PWh0O3JldHVybi0xIT09eXQmJihqdD1qdC5zbGljZSh5dCszKSksanQuaW5jbHVkZXMoIkAiKXx8anQuaW5jbHVkZXMoIjoiKX0pKERhKSl7Y29uc3QgdXM9bmV3IFVSTChEYSxM''@;'; put 'put ''Yy5vcmlnaW4pO2lmKCFobCYmKHVzLnVzZXJuYW1lfHx1cy5wYXNzd29yZCkpe2hsPXt1c2VybmFtZTpKaCh1cy51c2VybmFtZSkscGFzc3dvcmQ6SmgodXMucGFzc3dvcmQpfX0odXMudXNlcm5hbWV8fHVzLnBhc3N3b3JkKSYmKHVzLnVzZXJuYW1lPSIiLHVzLnBhc3N3b3JkPSIiLERhPXVz''@;'; put 'put ''LmhyZWYpfWlmKGhsJiYoYmQuZGVsZXRlKCJhdXRob3JpemF0aW9uIiksYmQuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKChodD0+ZW5jb2RlVVJJQ29tcG9uZW50KGh0KS5yZXBsYWNlKC8lKFswLTlBLUZdezJ9KS9naSwoeXQsanQpPT5TdHJpbmcuZnJvbUNoYXJDb2RlKHBh''@;'; put 'put ''cnNlSW50KGp0LDE2KSkpKSgoaGwudXNlcm5hbWV8fCIiKSsiOiIrKGhsLnBhc3N3b3JkfHwiIikpKSkpLEJkJiYic3RyaW5nIj09dHlwZW9mIERhJiZEYS5zdGFydHNXaXRoKCJkYXRhOiIpJiZmdW5jdGlvbiB0dShodCl7aWYoIWh0fHwic3RyaW5nIiE9dHlwZW9mIGh0fHwhaHQuc3RhcnRz''@;'; put 'put ''V2l0aCgiZGF0YToiKSlyZXR1cm4gMDtjb25zdCB5dD1odC5pbmRleE9mKCIsIik7aWYoeXQ8MClyZXR1cm4gMDtjb25zdCBqdD1odC5zbGljZSg1LHl0KSx6dD1odC5zbGljZSh5dCsxKTtpZigvO2Jhc2U2NC9pLnRlc3QoanQpKXtsZXQgUW49enQubGVuZ3RoO2NvbnN0IGxyPXp0Lmxlbmd0''@;'; put 'put ''aDtmb3IobGV0IFJvPTA7Um88bHI7Um8rKylpZigzNz09PXp0LmNoYXJDb2RlQXQoUm8pJiZSbysyPGxyKXtjb25zdCBkbD16dC5jaGFyQ29kZUF0KFJvKzEpLG9yPXp0LmNoYXJDb2RlQXQoUm8rMik7dWwoZGwpJiZ1bChvcikmJihRbi09MixSbys9Mil9bGV0IGlpPTAsa2k9bHItMTtjb25z''@;'; put 'put ''dCBXaT1Sbz0+Um8+PTImJjM3PT09enQuY2hhckNvZGVBdChSby0yKSYmNTE9PT16dC5jaGFyQ29kZUF0KFJvLTEpJiYoNjg9PT16dC5jaGFyQ29kZUF0KFJvKXx8MTAwPT09enQuY2hhckNvZGVBdChSbykpO2tpPj0wJiYoNjE9PT16dC5jaGFyQ29kZUF0KGtpKT8oaWkrKyxraS0tKTpXaShr''@;'; put 'put ''aSkmJihpaSsrLGtpLT0zKSksMT09PWlpJiZraT49MCYmKDYxPT09enQuY2hhckNvZGVBdChraSl8fFdpKGtpKSkmJmlpKys7Y29uc3QgTmE9MypNYXRoLmZsb29yKFFuLzQpLShpaXx8MCk7cmV0dXJuIE5hPjA/TmE6MH1sZXQgRm49MDtmb3IobGV0IFFuPTAsbHI9enQubGVuZ3RoO1FuPGxy''@;'; put 'put ''O1FuKyspe2NvbnN0IGlpPXp0LmNoYXJDb2RlQXQoUW4pO2lmKDM3PT09aWkmJnBzKHp0LFFuLGxyKSlGbis9MSxRbis9MjtlbHNlIGlmKGlpPDEyOClGbis9MTtlbHNlIGlmKGlpPDIwNDgpRm4rPTI7ZWxzZSBpZihpaT49NTUyOTYmJmlpPD01NjMxOSYmUW4rMTxscil7Y29uc3Qga2k9enQu''@;'; put 'put ''Y2hhckNvZGVBdChRbisxKTtraT49NTYzMjAmJmtpPD01NzM0Mz8oRm4rPTQsUW4rKyk6Rm4rPTN9ZWxzZSBGbis9M31yZXR1cm4gRm59KERhKT5raCl0aHJvdyBuZXcgdm4oIm1heENvbnRlbnRMZW5ndGggc2l6ZSBvZiAiK2toKyIgZXhjZWVkZWQiLHZuLkVSUl9CQURfUkVTUE9OU0UsaW8s''@;'; put 'put ''TmwpO2lmKHcyJiYiZ2V0IiE9PW5zJiYiaGVhZCIhPT1ucyl7Y29uc3QgdXM9eWllbGQgb3IoRWwpO2lmKCJudW1iZXIiPT10eXBlb2YgdXMmJmlzRmluaXRlKHVzKSYmKGpkPXVzLHVzPmp1KSl0aHJvdyByMSgpfWNvbnN0IGNwPXcyJiYoU24uaXNSZWFkYWJsZVN0cmVhbShFbCl8fFNuLmlz''@;'; put 'put ''U3RyZWFtKEVsKSksQ3M9KHVzLFV1LHhjKT0+UWEodXMsNjU1MzYsbDA9PntpZih3MiYmbDA+anUpdGhyb3cgTjA9cjEoKTtVdSYmVXUobDApfSx4Yyk7aWYoTmEmJiJnZXQiIT09bnMmJiJoZWFkIiE9PW5zJiYoZTF8fGNwKSl7aWYoamQ9amQ/Pyh5aWVsZCBjbyhiZCxFbCkpLDAhPT1qZHx8''@;'; put 'put ''Y3Ape2xldCBVdSx1cz1uZXcgRm4oRGEse21ldGhvZDoiUE9TVCIsYm9keTpFbCxkdXBsZXg6ImhhbGYifSk7aWYoU24uaXNGb3JtRGF0YShFbCkmJihVdT11cy5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpJiZiZC5zZXRDb250ZW50VHlwZShVdSksdXMuYm9keSl7Y29uc3RbeGMsbDBd''@;'; put 'put ''PWUxJiZuaChqZCx1Myh3ZyhlMSkpKXx8W107RWw9Q3ModXMuYm9keSx4YyxsMCl9fX1lbHNlIGlmKGNwJiYhaWkmJldpJiYiZ2V0IiE9PW5zJiYiaGVhZCIhPT1ucylFbD1DcyhFbCk7ZWxzZSBpZihjcCYmaWkmJiFOYSYmImdldCIhPT1ucyYmImhlYWQiIT09bnMpdGhyb3cgbmV3IHZuKCJT''@;'; put 'put ''dHJlYW0gcmVxdWVzdCBib2RpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgZmV0Y2ggaW1wbGVtZW50YXRpb24iLHZuLkVSUl9OT1RfU1VQUE9SVCxpbyxObCk7U24uaXNTdHJpbmcoczApfHwoczA9czA/ImluY2x1ZGUiOiJvbWl0Iik7Y29uc3QgbnU9aWkmJiJjcmVkZW50''@;'; put 'put ''aWFscyJpbiBGbi5wcm90b3R5cGU7aWYoU24uaXNGb3JtRGF0YShFbCkpe2NvbnN0IHVzPWJkLmdldENvbnRlbnRUeXBlKCk7dXMmJi9ebXVsdGlwYXJ0XC9mb3JtLWRhdGEvaS50ZXN0KHVzKSYmIS9ib3VuZGFyeT0vaS50ZXN0KHVzKSYmYmQuZGVsZXRlKCJjb250ZW50LXR5cGUiKX1iZC5z''@;'; put 'put ''ZXQoIlVzZXItQWdlbnQiLCJheGlvcy8xLjE4LjEiLCExKTtjb25zdCBSaD17Li4uYjIsc2lnbmFsOkphLG1ldGhvZDpucy50b1VwcGVyQ2FzZSgpLGhlYWRlcnM6TWkoYmQubm9ybWFsaXplKCkpLGJvZHk6RWwsZHVwbGV4OiJoYWxmIixjcmVkZW50aWFsczpudT9zMDp2b2lkIDB9O05sPWlp''@;'; put 'put ''JiZuZXcgRm4oRGEsUmgpO2xldCBuZD15aWVsZCBpaT9xcyhObCxiMik6cXMoRGEsUmgpO2NvbnN0IEZtPXZpLmZyb20obmQuaGVhZGVycyk7aWYoQmQpe2NvbnN0IHVzPVNuLnRvRmluaXRlTnVtYmVyKEZtLmdldENvbnRlbnRMZW5ndGgoKSk7aWYobnVsbCE9dXMmJnVzPmtoKXRocm93IG5l''@;'; put 'put ''dyB2bigibWF4Q29udGVudExlbmd0aCBzaXplIG9mICIra2grIiBleGNlZWRlZCIsdm4uRVJSX0JBRF9SRVNQT05TRSxpbyxObCl9Y29uc3QgbWY9Um8mJigic3RyZWFtIj09PXQxfHwicmVzcG9uc2UiPT09dDEpO2lmKFJvJiZuZC5ib2R5JiYoRHV8fEJkfHxtZiYmbjEpKXtjb25zdCB1cz17''@;'; put 'put ''fTtbInN0YXR1cyIsInN0YXR1c1RleHQiLCJoZWFkZXJzIl0uZm9yRWFjaChjMD0+e3VzW2MwXT1uZFtjMF19KTtjb25zdCBVdT1Tbi50b0Zpbml0ZU51bWJlcihGbS5nZXRDb250ZW50TGVuZ3RoKCkpLFt4YyxsMF09RHUmJm5oKFV1LHUzKHdnKER1KSwhMCkpfHxbXTtsZXQgcjU9MDtuZD1u''@;'; put 'put ''ZXcgUW4oUWEobmQuYm9keSw2NTUzNixjMD0+e2lmKEJkJiYocjU9YzAscjU+a2gpKXRocm93IG5ldyB2bigibWF4Q29udGVudExlbmd0aCBzaXplIG9mICIra2grIiBleGNlZWRlZCIsdm4uRVJSX0JBRF9SRVNQT05TRSxpbyxObCk7eGMmJnhjKGMwKX0sKCk9PntsMCYmbDAoKSxuMSYmbjEo''@;'; put 'put ''KX0pLHVzKX10MT10MXx8InRleHQiO2xldCBQMT15aWVsZCBkbFtTbi5maW5kS2V5KGRsLHQxKXx8InRleHQiXShuZCxpbyk7aWYoQmQmJiFSbyYmIW1mKXtsZXQgdXM7aWYobnVsbCE9UDEmJigibnVtYmVyIj09dHlwZW9mIFAxLmJ5dGVMZW5ndGg/dXM9UDEuYnl0ZUxlbmd0aDoibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIFAxLnNpemU/dXM9UDEuc2l6ZToic3RyaW5nIj09dHlwZW9mIFAxJiYodXM9ImZ1bmN0aW9uIj09dHlwZW9mIHp0PyhuZXcgenQpLmVuY29kZShQMSkuYnl0ZUxlbmd0aDpQMS5sZW5ndGgpKSwibnVtYmVyIj09dHlwZW9mIHVzJiZ1cz5raCl0aHJvdyBuZXcgdm4oIm1heENv''@;'; put 'put ''bnRlbnRMZW5ndGggc2l6ZSBvZiAiK2toKyIgZXhjZWVkZWQiLHZuLkVSUl9CQURfUkVTUE9OU0UsaW8sTmwpfXJldHVybiFtZiYmbjEmJm4xKCkseWllbGQgbmV3IFByb21pc2UoKHVzLFV1KT0+e2JnKHVzLFV1LHtkYXRhOlAxLGhlYWRlcnM6dmkuZnJvbShuZC5oZWFkZXJzKSxzdGF0dXM6''@;'; put 'put ''bmQuc3RhdHVzLHN0YXR1c1RleHQ6bmQuc3RhdHVzVGV4dCxjb25maWc6aW8scmVxdWVzdDpObH0pfSl9Y2F0Y2goaGwpe2lmKG4xJiZuMSgpLEphJiZKYS5hYm9ydGVkJiZKYS5yZWFzb24gaW5zdGFuY2VvZiB2bil7Y29uc3QgY3M9SmEucmVhc29uO3Rocm93IGNzLmNvbmZpZz1pbyxObCYm''@;'; put 'put ''KGNzLnJlcXVlc3Q9TmwpLGhsIT09Y3MmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcywiY2F1c2UiLHtfX3Byb3RvX186bnVsbCx2YWx1ZTpobCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGNzfWlmKE4wKXRocm93IE5sJiYhTjAucmVxdWVzdCYmKE4wLnJl''@;'; put 'put ''cXVlc3Q9TmwpLE4wO2lmKGhsIGluc3RhbmNlb2Ygdm4pdGhyb3cgTmwmJiFobC5yZXF1ZXN0JiYoaGwucmVxdWVzdD1ObCksaGw7aWYoaGwmJiJUeXBlRXJyb3IiPT09aGwubmFtZSYmL0xvYWQgZmFpbGVkfGZldGNoL2kudGVzdChobC5tZXNzYWdlKSl7Y29uc3QgY3M9bmV3IHZuKCJOZXR3''@;'; put 'put ''b3JrIEVycm9yIix2bi5FUlJfTkVUV09SSyxpbyxObCxobCYmaGwucmVzcG9uc2UpO3Rocm93IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcywiY2F1c2UiLHtfX3Byb3RvX186bnVsbCx2YWx1ZTpobC5jYXVzZXx8aGwsd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9''@;'; put 'put ''KSxjc310aHJvdyB2bi5mcm9tKGhsLGhsJiZobC5jb2RlLGlvLE5sLGhsJiZobC5yZXNwb25zZSl9fSk7cmV0dXJuIGZ1bmN0aW9uKGlvKXtyZXR1cm4gc24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX0sSXU9bmV3IE1hcCxNYz1odD0+e2xldCB5dD1odCYmaHQuZW52fHx7fTtjb25zdHtm''@;'; put 'put ''ZXRjaDpqdCxSZXF1ZXN0Onp0LFJlc3BvbnNlOm1ufT15dCxGbj1benQsbW4sanRdO2xldCBpaSxraSxscj1Gbi5sZW5ndGgsV2k9SXU7Zm9yKDtsci0tOylpaT1Gbltscl0sa2k9V2kuZ2V0KGlpKSx2b2lkIDA9PT1raSYmV2kuc2V0KGlpLGtpPWxyP25ldyBNYXA6RnIoeXQpKSxXaT1raTty''@;'; put 'put ''ZXR1cm4ga2l9O01jKCk7Y29uc3QgSWk9e2h0dHA6bnVsbCx4aHI6Z2ksZmV0Y2g6e2dldDpNY319O1NuLmZvckVhY2goSWksKGh0LHl0KT0+e2lmKGh0KXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGh0LCJuYW1lIix7X19wcm90b19fOm51bGwsdmFsdWU6eXR9KX1jYXRjaHt9T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KGh0LCJhZGFwdGVyTmFtZSIse19fcHJvdG9fXzpudWxsLHZhbHVlOnl0fSl9fSk7Y29uc3Qgcmg9aHQ9PmAtICR7aHR9YCxuNT1odD0+U24uaXNGdW5jdGlvbihodCl8fG51bGw9PT1odHx8ITE9PT1odDt2YXIgdGRfZ2V0QWRhcHRlcj1mdW5jdGlvbiB2MihodCx5''@;'; put 'put ''dCl7aHQ9U24uaXNBcnJheShodCk/aHQ6W2h0XTtjb25zdHtsZW5ndGg6anR9PWh0O2xldCB6dCxtbjtjb25zdCBGbj17fTtmb3IobGV0IFFuPTA7UW48anQ7UW4rKyl7bGV0IGxyO2lmKHp0PWh0W1FuXSxtbj16dCwhbjUoenQpJiYobW49SWlbKGxyPVN0cmluZyh6dCkpLnRvTG93ZXJDYXNl''@;'; put 'put ''KCldLHZvaWQgMD09PW1uKSl0aHJvdyBuZXcgdm4oYFVua25vd24gYWRhcHRlciAnJHtscn0nYCk7aWYobW4mJihTbi5pc0Z1bmN0aW9uKG1uKXx8KG1uPW1uLmdldCh5dCkpKSlicmVhaztGbltscnx8IiMiK1FuXT1tbn1pZighbW4pe2NvbnN0IFFuPU9iamVjdC5lbnRyaWVzKEZuKS5tYXAo''@;'; put 'put ''KFtpaSxraV0pPT5gYWRhcHRlciAke2lpfSBgKyghMT09PWtpPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpO2xldCBscj1qdD9Rbi5sZW5ndGg+MT8ic2luY2UgOlxuIitRbi5tYXAocmgpLmpvaW4oIlxuIik6''@;'; put 'put ''IiAiK3JoKFFuWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyB2bigiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2xyLHZuLkVSUl9OT1RfU1VQUE9SVCl9cmV0dXJuIG1ufTtmdW5jdGlvbiBPMChodCl7aWYoaHQu''@;'; put 'put ''Y2FuY2VsVG9rZW4mJmh0LmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxodC5zaWduYWwmJmh0LnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBhMChudWxsLGh0KX1mdW5jdGlvbiBPbShodCl7cmV0dXJuIE8wKGh0KSxodC5oZWFkZXJzPXZpLmZyb20oaHQuaGVhZGVycyksaHQuZGF0''@;'; put 'put ''YT1RYy5jYWxsKGh0LGh0LnRyYW5zZm9ybVJlcXVlc3QpLC0xIT09WyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKGh0Lm1ldGhvZCkmJmh0LmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLHRkX2dldEFkYXB0ZXIoaHQu''@;'; put 'put ''YWRhcHRlcnx8VnIuYWRhcHRlcixodCkoaHQpLnRoZW4oZnVuY3Rpb24oenQpe08wKGh0KSxodC5yZXNwb25zZT16dDt0cnl7enQuZGF0YT1RYy5jYWxsKGh0LGh0LnRyYW5zZm9ybVJlc3BvbnNlLHp0KX1maW5hbGx5e2RlbGV0ZSBodC5yZXNwb25zZX1yZXR1cm4genQuaGVhZGVycz12aS5m''@;'; put 'put ''cm9tKHp0LmhlYWRlcnMpLHp0fSxmdW5jdGlvbih6dCl7aWYoIW0yKHp0KSYmKE8wKGh0KSx6dCYmenQucmVzcG9uc2UpKXtodC5yZXNwb25zZT16dC5yZXNwb25zZTt0cnl7enQucmVzcG9uc2UuZGF0YT1RYy5jYWxsKGh0LGh0LnRyYW5zZm9ybVJlc3BvbnNlLHp0LnJlc3BvbnNlKX1maW5h''@;'; put 'put ''bGx5e2RlbGV0ZSBodC5yZXNwb25zZX16dC5yZXNwb25zZS5oZWFkZXJzPXZpLmZyb20oenQucmVzcG9uc2UuaGVhZGVycyl9cmV0dXJuIFByb21pc2UucmVqZWN0KHp0KX0pfWNvbnN0IGlhPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3lt''@;'; put 'put ''Ym9sIl0uZm9yRWFjaCgoaHQseXQpPT57aWFbaHRdPWZ1bmN0aW9uKHp0KXtyZXR1cm4gdHlwZW9mIHp0PT09aHR8fCJhIisoeXQ8MT8ibiAiOiIgIikraHR9fSk7Y29uc3Qgem89e307aWEudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKHl0LGp0LHp0KXtmdW5jdGlvbiBtbihGbixRbil7cmV0dXJu''@;'; put 'put ''IltBeGlvcyB2MS4xOC4xXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK0ZuKyInIitRbisoenQ/Ii4gIit6dDoiIil9cmV0dXJuKEZuLFFuLGxyKT0+e2lmKCExPT09eXQpdGhyb3cgbmV3IHZuKG1uKFFuLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKGp0PyIgaW4gIitqdDoiIikpLHZuLkVSUl9ERVBS''@;'; put 'put ''RUNBVEVEKTtyZXR1cm4ganQmJiF6b1tRbl0mJih6b1tRbl09ITAsY29uc29sZS53YXJuKG1uKFFuLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IitqdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwheXR8fHl0KEZuLFFuLGxyKX19LGlhLnNwZWxs''@;'; put 'put ''aW5nPWZ1bmN0aW9uKHl0KXtyZXR1cm4oanQsenQpPT4oY29uc29sZS53YXJuKGAke3p0fSBpcyBsaWtlbHkgYSBtaXNzcGVsbGluZyBvZiAke3l0fWApLCEwKX07dmFyIF8yPXthc3NlcnRPcHRpb25zOmZ1bmN0aW9uIENnKGh0LHl0LGp0KXtpZigib2JqZWN0IiE9dHlwZW9mIGh0fHxudWxs''@;'; put 'put ''PT09aHQpdGhyb3cgbmV3IHZuKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iix2bi5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29uc3QgenQ9T2JqZWN0LmtleXMoaHQpO2xldCBtbj16dC5sZW5ndGg7Zm9yKDttbi0tID4wOyl7Y29uc3QgRm49enRbbW5dLFFuPU9iamVjdC5wcm90b3R5cGUu''@;'; put 'put ''aGFzT3duUHJvcGVydHkuY2FsbCh5dCxGbik/eXRbRm5dOnZvaWQgMDtpZihRbil7Y29uc3QgbHI9aHRbRm5dLGlpPXZvaWQgMD09PWxyfHxRbihscixGbixodCk7aWYoITAhPT1paSl0aHJvdyBuZXcgdm4oIm9wdGlvbiAiK0ZuKyIgbXVzdCBiZSAiK2lpLHZuLkVSUl9CQURfT1BUSU9OX1ZB''@;'; put 'put ''TFVFKTtjb250aW51ZX1pZighMCE9PWp0KXRocm93IG5ldyB2bigiVW5rbm93biBvcHRpb24gIitGbix2bi5FUlJfQkFEX09QVElPTil9fSx2YWxpZGF0b3JzOmlhfTtjb25zdCBUYz1fMi52YWxpZGF0b3JzO2NsYXNzIG1ze2NvbnN0cnVjdG9yKHl0KXt0aGlzLmRlZmF1bHRzPXl0fHx7fSx0''@;'; put 'put ''aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgTXIscmVzcG9uc2U6bmV3IE1yfX1yZXF1ZXN0KHl0LGp0KXt2YXIgenQ9dGhpcztyZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKCl7dHJ5e3JldHVybiB5aWVsZCB6dC5fcmVxdWVzdCh5dCxqdCl9Y2F0Y2gobW4pe2lmKG1u''@;'; put 'put ''IGluc3RhbmNlb2YgRXJyb3Ipe2xldCBGbj17fTtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShGbik6Rm49bmV3IEVycm9yO2NvbnN0IFFuPSgoKT0+e2lmKCFGbi5zdGFjaylyZXR1cm4iIjtjb25zdCBscj1Gbi5zdGFjay5pbmRleE9mKCJcbiIpO3Jl''@;'; put 'put ''dHVybi0xPT09bHI/IiI6Rm4uc3RhY2suc2xpY2UobHIrMSl9KSgpO3RyeXtpZihtbi5zdGFjayl7aWYoUW4pe2NvbnN0IGxyPVFuLmluZGV4T2YoIlxuIiksaWk9LTE9PT1scj8tMTpRbi5pbmRleE9mKCJcbiIsbHIrMSksa2k9LTE9PT1paT8iIjpRbi5zbGljZShpaSsxKTtTdHJpbmcobW4u''@;'; put 'put ''c3RhY2spLmVuZHNXaXRoKGtpKXx8KG1uLnN0YWNrKz0iXG4iK1FuKX19ZWxzZSBtbi5zdGFjaz1Rbn1jYXRjaHt9fXRocm93IG1ufX0pKCl9X3JlcXVlc3QoeXQsanQpeyJzdHJpbmciPT10eXBlb2YgeXQ/KGp0PWp0fHx7fSkudXJsPXl0Omp0PXl0fHx7fSxqdD1jbCh0aGlzLmRlZmF1bHRz''@;'; put 'put ''LGp0KTtjb25zdHt0cmFuc2l0aW9uYWw6enQscGFyYW1zU2VyaWFsaXplcjptbixoZWFkZXJzOkZufT1qdDt2b2lkIDAhPT16dCYmXzIuYXNzZXJ0T3B0aW9ucyh6dCx7c2lsZW50SlNPTlBhcnNpbmc6VGMudHJhbnNpdGlvbmFsKFRjLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOlRjLnRy''@;'; put 'put ''YW5zaXRpb25hbChUYy5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOlRjLnRyYW5zaXRpb25hbChUYy5ib29sZWFuKSxsZWdhY3lJbnRlcmNlcHRvclJlcVJlc09yZGVyaW5nOlRjLnRyYW5zaXRpb25hbChUYy5ib29sZWFuKSxhZHZlcnRpc2Vac3RkQWNjZXB0RW5jb2Rpbmc6VGMudHJh''@;'; put 'put ''bnNpdGlvbmFsKFRjLmJvb2xlYW4pLHZhbGlkYXRlU3RhdHVzVW5kZWZpbmVkUmVzb2x2ZXM6VGMudHJhbnNpdGlvbmFsKFRjLmJvb2xlYW4pfSwhMSksbnVsbCE9bW4mJihTbi5pc0Z1bmN0aW9uKG1uKT9qdC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6bW59Ol8yLmFzc2VydE9wdGlv''@;'; put 'put ''bnMobW4se2VuY29kZTpUYy5mdW5jdGlvbixzZXJpYWxpemU6VGMuZnVuY3Rpb259LCEwKSksdm9pZCAwIT09anQuYWxsb3dBYnNvbHV0ZVVybHN8fChqdC5hbGxvd0Fic29sdXRlVXJscz12b2lkIDA9PT10aGlzLmRlZmF1bHRzLmFsbG93QWJzb2x1dGVVcmxzfHx0aGlzLmRlZmF1bHRzLmFs''@;'; put 'put ''bG93QWJzb2x1dGVVcmxzKSxfMi5hc3NlcnRPcHRpb25zKGp0LHtiYXNlVXJsOlRjLnNwZWxsaW5nKCJiYXNlVVJMIiksd2l0aFhzcmZUb2tlbjpUYy5zcGVsbGluZygid2l0aFhTUkZUb2tlbiIpfSwhMCksanQubWV0aG9kPShqdC5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0''@;'; put 'put ''IikudG9Mb3dlckNhc2UoKTtsZXQgUW49Rm4mJlNuLm1lcmdlKEZuLmNvbW1vbixGbltqdC5tZXRob2RdKTtGbiYmU24uZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJxdWVyeSIsImNvbW1vbiJdLGRsPT57ZGVsZXRlIEZuW2RsXX0pLGp0Lmhl''@;'; put 'put ''YWRlcnM9dmkuY29uY2F0KFFuLEZuKTtjb25zdCBscj1bXTtsZXQgaWk9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKG9yKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygb3IucnVuV2hlbiYmITE9PT1vci5ydW5XaGVuKGp0KSlyZXR1cm47aWk9aWkmJm9yLnN5''@;'; put 'put ''bmNocm9ub3VzO2NvbnN0IGNvPWp0LnRyYW5zaXRpb25hbHx8RnM7Y28mJmNvLmxlZ2FjeUludGVyY2VwdG9yUmVxUmVzT3JkZXJpbmc/bHIudW5zaGlmdChvci5mdWxmaWxsZWQsb3IucmVqZWN0ZWQpOmxyLnB1c2gob3IuZnVsZmlsbGVkLG9yLnJlamVjdGVkKX0pO2NvbnN0IGtpPVtdO3Ro''@;'; put 'put ''aXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24ob3Ipe2tpLnB1c2gob3IuZnVsZmlsbGVkLG9yLnJlamVjdGVkKX0pO2xldCBXaSxOYSxLaT0wO2lmKCFpaSl7Y29uc3QgZGw9W09tLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoZGwudW5zaGlmdCguLi5sciksZGwucHVz''@;'; put 'put ''aCguLi5raSksTmE9ZGwubGVuZ3RoLFdpPVByb21pc2UucmVzb2x2ZShqdCk7S2k8TmE7KVdpPVdpLnRoZW4oZGxbS2krK10sZGxbS2krK10pO3JldHVybiBXaX1OYT1sci5sZW5ndGg7bGV0IFJvPWp0O2Zvcig7S2k8TmE7KXtjb25zdCBkbD1scltLaSsrXSxvcj1scltLaSsrXTt0cnl7Um89''@;'; put 'put ''ZGwoUm8pfWNhdGNoKGNvKXtvci5jYWxsKHRoaXMsY28pO2JyZWFrfX10cnl7V2k9T20uY2FsbCh0aGlzLFJvKX1jYXRjaChkbCl7cmV0dXJuIFByb21pc2UucmVqZWN0KGRsKX1mb3IoS2k9MCxOYT1raS5sZW5ndGg7S2k8TmE7KVdpPVdpLnRoZW4oa2lbS2krK10sa2lbS2krK10pO3JldHVy''@;'; put 'put ''biBXaX1nZXRVcmkoeXQpe3JldHVybiB0YShlZCgoeXQ9Y2wodGhpcy5kZWZhdWx0cyx5dCkpLmJhc2VVUkwseXQudXJsLHl0LmFsbG93QWJzb2x1dGVVcmxzLHl0KSx5dC5wYXJhbXMseXQucGFyYW1zU2VyaWFsaXplcil9fVNuLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0''@;'; put 'put ''aW9ucyJdLGZ1bmN0aW9uKHl0KXttcy5wcm90b3R5cGVbeXRdPWZ1bmN0aW9uKGp0LHp0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGNsKHp0fHx7fSx7bWV0aG9kOnl0LHVybDpqdCxkYXRhOnp0JiZTbi5oYXNPd25Qcm9wKHp0LCJkYXRhIik/enQuZGF0YTp2b2lkIDB9KSl9fSksU24uZm9yRWFj''@;'; put 'put ''aChbInBvc3QiLCJwdXQiLCJwYXRjaCIsInF1ZXJ5Il0sZnVuY3Rpb24oeXQpe2Z1bmN0aW9uIGp0KHp0KXtyZXR1cm4gZnVuY3Rpb24oRm4sUW4sbHIpe3JldHVybiB0aGlzLnJlcXVlc3QoY2wobHJ8fHt9LHttZXRob2Q6eXQsaGVhZGVyczp6dD97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFy''@;'; put 'put ''dC9mb3JtLWRhdGEifTp7fSx1cmw6Rm4sZGF0YTpRbn0pKX19bXMucHJvdG90eXBlW3l0XT1qdCgpLCJxdWVyeSIhPT15dCYmKG1zLnByb3RvdHlwZVt5dCsiRm9ybSJdPWp0KCEwKSl9KTtjbGFzcyBGMXtjb25zdHJ1Y3Rvcih5dCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHl0KXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQganQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKEZuKXtqdD1Gbn0pO2NvbnN0IHp0PXRoaXM7dGhpcy5wcm9taXNlLnRoZW4obW49PntpZighenQuX2xpc3RlbmVycylyZXR1cm47bGV0IEZu''@;'; put 'put ''PXp0Ll9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7Rm4tLSA+MDspenQuX2xpc3RlbmVyc1tGbl0obW4pO3p0Ll9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPW1uPT57bGV0IEZuO2NvbnN0IFFuPW5ldyBQcm9taXNlKGxyPT57enQuc3Vic2NyaWJlKGxyKSxGbj1scn0pLnRoZW4o''@;'; put 'put ''bW4pO3JldHVybiBRbi5jYW5jZWw9ZnVuY3Rpb24oKXt6dC51bnN1YnNjcmliZShGbil9LFFufSx5dChmdW5jdGlvbihGbixRbixscil7enQucmVhc29ufHwoenQucmVhc29uPW5ldyBhMChGbixRbixsciksanQoenQucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFz''@;'; put 'put ''b24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKHl0KXt0aGlzLnJlYXNvbj95dCh0aGlzLnJlYXNvbik6dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKHl0KTp0aGlzLl9saXN0ZW5lcnM9W3l0XX11bnN1YnNjcmliZSh5dCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1''@;'; put 'put ''cm47Y29uc3QganQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoeXQpOy0xIT09anQmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UoanQsMSl9dG9BYm9ydFNpZ25hbCgpe2NvbnN0IHl0PW5ldyBBYm9ydENvbnRyb2xsZXIsanQ9enQ9Pnt5dC5hYm9ydCh6dCl9O3JldHVybiB0aGlzLnN1YnNjcmli''@;'; put 'put ''ZShqdCkseXQuc2lnbmFsLnVuc3Vic2NyaWJlPSgpPT50aGlzLnVuc3Vic2NyaWJlKGp0KSx5dC5zaWduYWx9c3RhdGljIHNvdXJjZSgpe2xldCB5dDtyZXR1cm57dG9rZW46bmV3IEYxKGZ1bmN0aW9uKG1uKXt5dD1tbn0pLGNhbmNlbDp5dH19fWNvbnN0IElzPXtDb250aW51ZToxMDAsU3dp''@;'; put 'put ''dGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixN''@;'; put 'put ''dWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJl''@;'; put 'put ''Y3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlv''@;'; put 'put ''blJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90''@;'; put 'put ''U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQ''@;'; put 'put ''cmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIs''@;'; put 'put ''U2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhl''@;'; put 'put ''bnRpY2F0aW9uUmVxdWlyZWQ6NTExLFdlYlNlcnZlcklzRG93bjo1MjEsQ29ubmVjdGlvblRpbWVkT3V0OjUyMixPcmlnaW5Jc1VucmVhY2hhYmxlOjUyMyxUaW1lb3V0T2NjdXJyZWQ6NTI0LFNzbEhhbmRzaGFrZUZhaWxlZDo1MjUsSW52YWxpZFNzbENlcnRpZmljYXRlOjUyNn07T2JqZWN0''@;'; put 'put ''LmVudHJpZXMoSXMpLmZvckVhY2goKFtodCx5dF0pPT57SXNbeXRdPWh0fSk7Y29uc3QgemE9ZnVuY3Rpb24gcWkoaHQpe2NvbnN0IHl0PW5ldyBtcyhodCksanQ9cyhtcy5wcm90b3R5cGUucmVxdWVzdCx5dCk7cmV0dXJuIFNuLmV4dGVuZChqdCxtcy5wcm90b3R5cGUseXQse2FsbE93bktl''@;'; put 'put ''eXM6ITB9KSxTbi5leHRlbmQoanQseXQsbnVsbCx7YWxsT3duS2V5czohMH0pLGp0LmNyZWF0ZT1mdW5jdGlvbihtbil7cmV0dXJuIHFpKGNsKGh0LG1uKSl9LGp0fShWcik7emEuQXhpb3M9bXMsemEuQ2FuY2VsZWRFcnJvcj1hMCx6YS5DYW5jZWxUb2tlbj1GMSx6YS5pc0NhbmNlbD1tMix6''@;'; put 'put ''YS5WRVJTSU9OPSIxLjE4LjEiLHphLnRvRm9ybURhdGE9Q2ksemEuQXhpb3NFcnJvcj12bix6YS5DYW5jZWw9emEuQ2FuY2VsZWRFcnJvcix6YS5hbGw9ZnVuY3Rpb24oeXQpe3JldHVybiBQcm9taXNlLmFsbCh5dCl9LHphLnNwcmVhZD1mdW5jdGlvbiBObShodCl7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KGp0KXtyZXR1cm4gaHQuYXBwbHkobnVsbCxqdCl9fSx6YS5pc0F4aW9zRXJyb3I9ZnVuY3Rpb24gbjgoaHQpe3JldHVybiBTbi5pc09iamVjdChodCkmJiEwPT09aHQuaXNBeGlvc0Vycm9yfSx6YS5tZXJnZUNvbmZpZz1jbCx6YS5BeGlvc0hlYWRlcnM9dmksemEuZm9ybVRvSlNPTj1odD0+''@;'; put 'put ''eWQoU24uaXNIVE1MRm9ybShodCk/bmV3IEZvcm1EYXRhKGh0KTpodCksemEuZ2V0QWRhcHRlcj10ZF9nZXRBZGFwdGVyLHphLkh0dHBTdGF0dXNDb2RlPUlzLHphLmRlZmF1bHQ9emEsZmUuZXhwb3J0cz16YX0sNTcwMzQoZmUsail7InVzZSBzdHJpY3QiO3ZhciB5LGM7T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnRpZXMoaix7X19lc01vZHVsZTp7dmFsdWU6ITB9LFtTeW1ib2wudG9TdHJpbmdUYWddOnt2YWx1ZToiTW9kdWxlIn19KTtjb25zdCB2PWZ1bmN0aW9uIGgoTil7cmV0dXJuIE4mJk4uX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE4sImRl''@;'; put 'put ''ZmF1bHQiKT9OLmRlZmF1bHQ6Tn0oZnVuY3Rpb24gcygpe2lmKGMpcmV0dXJuIHk7Yz0xO2NvbnN0IE49MjE0NzQ4MzY0Nyx6PTM2LEllPS9eeG4tLS8sa2U9L1teXDAtXHg3Rl0vLHFlPS9bXHgyRVx1MzAwMlx1RkYwRVx1RkY2MV0vZyxYPXtvdmVyZmxvdzoiT3ZlcmZsb3c6IGlucHV0IG5l''@;'; put 'put ''ZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MiLCJub3QtYmFzaWMiOiJJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpIiwiaW52YWxpZC1pbnB1dCI6IkludmFsaWQgaW5wdXQifSxiPU1hdGguZmxvb3Isaz1TdHJpbmcuZnJvbUNoYXJDb2RlO2Z1bmN0''@;'; put 'put ''aW9uIE0oUGUpe3Rocm93IG5ldyBSYW5nZUVycm9yKFhbUGVdKX1mdW5jdGlvbiBLKFBlLG90KXtjb25zdCBsdD1QZS5zcGxpdCgiQCIpO2xldCBkdD0iIjtsdC5sZW5ndGg+MSYmKGR0PWx0WzBdKyJAIixQZT1sdFsxXSk7Y29uc3QgYWU9ZnVuY3Rpb24gQihQZSxvdCl7Y29uc3QgbHQ9W107''@;'; put 'put ''bGV0IGR0PVBlLmxlbmd0aDtmb3IoO2R0LS07KWx0W2R0XT1vdChQZVtkdF0pO3JldHVybiBsdH0oKFBlPVBlLnJlcGxhY2UocWUsIi4iKSkuc3BsaXQoIi4iKSxvdCkuam9pbigiLiIpO3JldHVybiBkdCthZX1mdW5jdGlvbiBHKFBlKXtjb25zdCBvdD1bXTtsZXQgbHQ9MDtjb25zdCBkdD1Q''@;'; put 'put ''ZS5sZW5ndGg7Zm9yKDtsdDxkdDspe2NvbnN0IFJlPVBlLmNoYXJDb2RlQXQobHQrKyk7aWYoUmU+PTU1Mjk2JiZSZTw9NTYzMTkmJmx0PGR0KXtjb25zdCBhZT1QZS5jaGFyQ29kZUF0KGx0KyspOzU2MzIwPT0oNjQ1MTImYWUpP290LnB1c2goKCgxMDIzJlJlKTw8MTApKygxMDIzJmFlKSs2''@;'; put 'put ''NTUzNik6KG90LnB1c2goUmUpLGx0LS0pfWVsc2Ugb3QucHVzaChSZSl9cmV0dXJuIG90fWNvbnN0IHA9ZnVuY3Rpb24oUGUpe3JldHVybiBQZT49NDgmJlBlPDU4P1BlLTQ4KzI2OlBlPj02NSYmUGU8OTE/UGUtNjU6UGU+PTk3JiZQZTwxMjM/UGUtOTc6en0sST1mdW5jdGlvbihQZSxvdCl7''@;'; put 'put ''cmV0dXJuIFBlKzIyKzc1KihQZTwyNiktKCgwIT1vdCk8PDUpfSx1ZT1mdW5jdGlvbihQZSxvdCxsdCl7bGV0IGR0PTA7Zm9yKFBlPWx0P2IoUGUvNzAwKTpQZT4+MSxQZSs9YihQZS9vdCk7UGU+NDU1O2R0Kz16KVBlPWIoUGUvMzUpO3JldHVybiBiKGR0KzM2KlBlLyhQZSszOCkpfSxuZT1m''@;'; put 'put ''dW5jdGlvbihQZSl7Y29uc3Qgb3Q9W10sbHQ9UGUubGVuZ3RoO2xldCBkdD0wLFJlPTEyOCxhZT03Mix4ZT1QZS5sYXN0SW5kZXhPZigiLSIpO3hlPDAmJih4ZT0wKTtmb3IobGV0IGplPTA7amU8eGU7KytqZSlQZS5jaGFyQ29kZUF0KGplKT49MTI4JiZNKCJub3QtYmFzaWMiKSxvdC5wdXNo''@;'; put 'put ''KFBlLmNoYXJDb2RlQXQoamUpKTtmb3IobGV0IGplPXhlPjA/eGUrMTowO2plPGx0Oyl7Y29uc3QgQWU9ZHQ7Zm9yKGxldCBGZT0xLGdlPXo7O2dlKz16KXtqZT49bHQmJk0oImludmFsaWQtaW5wdXQiKTtjb25zdCBjZT1wKFBlLmNoYXJDb2RlQXQoamUrKykpO2NlPj16JiZNKCJpbnZhbGlk''@;'; put 'put ''LWlucHV0IiksY2U+YigoTi1kdCkvRmUpJiZNKCJvdmVyZmxvdyIpLGR0Kz1jZSpGZTtjb25zdCBoZT1nZTw9YWU/MTpnZT49YWUrMjY/MjY6Z2UtYWU7aWYoY2U8aGUpYnJlYWs7Y29uc3Qgd2U9ei1oZTtGZT5iKE4vd2UpJiZNKCJvdmVyZmxvdyIpLEZlKj13ZX1jb25zdCBEZT1vdC5sZW5n''@;'; put 'put ''dGgrMTthZT11ZShkdC1BZSxEZSwwPT1BZSksYihkdC9EZSk+Ti1SZSYmTSgib3ZlcmZsb3ciKSxSZSs9YihkdC9EZSksZHQlPURlLG90LnNwbGljZShkdCsrLDAsUmUpfXJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5vdCl9LF9lPWZ1bmN0aW9uKFBlKXtjb25zdCBvdD1bXSxsdD0o''@;'; put 'put ''UGU9RyhQZSkpLmxlbmd0aDtsZXQgZHQ9MTI4LFJlPTAsYWU9NzI7Zm9yKGNvbnN0IEFlIG9mIFBlKUFlPDEyOCYmb3QucHVzaChrKEFlKSk7Y29uc3QgeGU9b3QubGVuZ3RoO2xldCBqZT14ZTtmb3IoeGUmJm90LnB1c2goIi0iKTtqZTxsdDspe2xldCBBZT1OO2Zvcihjb25zdCBGZSBvZiBQ''@;'; put 'put ''ZSlGZT49ZHQmJkZlPEFlJiYoQWU9RmUpO2NvbnN0IERlPWplKzE7QWUtZHQ+YigoTi1SZSkvRGUpJiZNKCJvdmVyZmxvdyIpLFJlKz0oQWUtZHQpKkRlLGR0PUFlO2Zvcihjb25zdCBGZSBvZiBQZSlpZihGZTxkdCYmKytSZT5OJiZNKCJvdmVyZmxvdyIpLEZlPT09ZHQpe2xldCBnZT1SZTtm''@;'; put 'put ''b3IobGV0IGNlPXo7O2NlKz16KXtjb25zdCBoZT1jZTw9YWU/MTpjZT49YWUrMjY/MjY6Y2UtYWU7aWYoZ2U8aGUpYnJlYWs7Y29uc3Qgd2U9Z2UtaGUsSmU9ei1oZTtvdC5wdXNoKGsoSShoZSt3ZSVKZSwwKSkpLGdlPWIod2UvSmUpfW90LnB1c2goayhJKGdlLDApKSksYWU9dWUoUmUsRGUs''@;'; put 'put ''amU9PT14ZSksUmU9MCwrK2plfSsrUmUsKytkdH1yZXR1cm4gb3Quam9pbigiIil9O3JldHVybiB5PXt2ZXJzaW9uOiIyLjMuMSIsdWNzMjp7ZGVjb2RlOkcsZW5jb2RlOlBlPT5TdHJpbmcuZnJvbUNvZGVQb2ludCguLi5QZSl9LGRlY29kZTpuZSxlbmNvZGU6X2UsdG9BU0NJSTpmdW5jdGlv''@;'; put 'put ''bihQZSl7cmV0dXJuIEsoUGUsZnVuY3Rpb24ob3Qpe3JldHVybiBrZS50ZXN0KG90KT8ieG4tLSIrX2Uob3QpOm90fSl9LHRvVW5pY29kZTpmdW5jdGlvbihQZSl7cmV0dXJuIEsoUGUsZnVuY3Rpb24ob3Qpe3JldHVybiBJZS50ZXN0KG90KT9uZShvdC5zbGljZSg0KS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''KTpvdH0pfX19KCkpLHc9WyJhYyIsImNvbS5hYyIsImVkdS5hYyIsImdvdi5hYyIsIm1pbC5hYyIsIm5ldC5hYyIsIm9yZy5hYyIsImFkIiwiYWUiLCJhYy5hZSIsImNvLmFlIiwiZ292LmFlIiwibWlsLmFlIiwibmV0LmFlIiwib3JnLmFlIiwic2NoLmFlIiwiYWVybyIsImFpcmxpbmUuYWVy''@;'; put 'put ''byIsImFpcnBvcnQuYWVybyIsImFjY2lkZW50LWludmVzdGlnYXRpb24uYWVybyIsImFjY2lkZW50LXByZXZlbnRpb24uYWVybyIsImFlcm9iYXRpYy5hZXJvIiwiYWVyb2NsdWIuYWVybyIsImFlcm9kcm9tZS5hZXJvIiwiYWdlbnRzLmFlcm8iLCJhaXItc3VydmVpbGxhbmNlLmFlcm8iLCJh''@;'; put 'put ''aXItdHJhZmZpYy1jb250cm9sLmFlcm8iLCJhaXJjcmFmdC5hZXJvIiwiYWlydHJhZmZpYy5hZXJvIiwiYW1idWxhbmNlLmFlcm8iLCJhc3NvY2lhdGlvbi5hZXJvIiwiYXV0aG9yLmFlcm8iLCJiYWxsb29uaW5nLmFlcm8iLCJicm9rZXIuYWVybyIsImNhYS5hZXJvIiwiY2FyZ28uYWVybyIs''@;'; put 'put ''ImNhdGVyaW5nLmFlcm8iLCJjZXJ0aWZpY2F0aW9uLmFlcm8iLCJjaGFtcGlvbnNoaXAuYWVybyIsImNoYXJ0ZXIuYWVybyIsImNpdmlsYXZpYXRpb24uYWVybyIsImNsdWIuYWVybyIsImNvbmZlcmVuY2UuYWVybyIsImNvbnN1bHRhbnQuYWVybyIsImNvbnN1bHRpbmcuYWVybyIsImNvbnRy''@;'; put 'put ''b2wuYWVybyIsImNvdW5jaWwuYWVybyIsImNyZXcuYWVybyIsImRlc2lnbi5hZXJvIiwiZGdjYS5hZXJvIiwiZWR1Y2F0b3IuYWVybyIsImVtZXJnZW5jeS5hZXJvIiwiZW5naW5lLmFlcm8iLCJlbmdpbmVlci5hZXJvIiwiZW50ZXJ0YWlubWVudC5hZXJvIiwiZXF1aXBtZW50LmFlcm8iLCJl''@;'; put 'put ''eGNoYW5nZS5hZXJvIiwiZXhwcmVzcy5hZXJvIiwiZmVkZXJhdGlvbi5hZXJvIiwiZmxpZ2h0LmFlcm8iLCJmcmVpZ2h0LmFlcm8iLCJmdWVsLmFlcm8iLCJnbGlkaW5nLmFlcm8iLCJnb3Zlcm5tZW50LmFlcm8iLCJncm91bmRoYW5kbGluZy5hZXJvIiwiZ3JvdXAuYWVybyIsImhhbmdnbGlk''@;'; put 'put ''aW5nLmFlcm8iLCJob21lYnVpbHQuYWVybyIsImluc3VyYW5jZS5hZXJvIiwiam91cm5hbC5hZXJvIiwiam91cm5hbGlzdC5hZXJvIiwibGVhc2luZy5hZXJvIiwibG9naXN0aWNzLmFlcm8iLCJtYWdhemluZS5hZXJvIiwibWFpbnRlbmFuY2UuYWVybyIsIm1hcmtldHBsYWNlLmFlcm8iLCJt''@;'; put 'put ''ZWRpYS5hZXJvIiwibWljcm9saWdodC5hZXJvIiwibW9kZWxsaW5nLmFlcm8iLCJuYXZpZ2F0aW9uLmFlcm8iLCJwYXJhY2h1dGluZy5hZXJvIiwicGFyYWdsaWRpbmcuYWVybyIsInBhc3Nlbmdlci1hc3NvY2lhdGlvbi5hZXJvIiwicGlsb3QuYWVybyIsInByZXNzLmFlcm8iLCJwcm9kdWN0''@;'; put 'put ''aW9uLmFlcm8iLCJyZWNyZWF0aW9uLmFlcm8iLCJyZXBib2R5LmFlcm8iLCJyZXMuYWVybyIsInJlc2VhcmNoLmFlcm8iLCJyb3RvcmNyYWZ0LmFlcm8iLCJzYWZldHkuYWVybyIsInNjaWVudGlzdC5hZXJvIiwic2VydmljZXMuYWVybyIsInNob3cuYWVybyIsInNreWRpdmluZy5hZXJvIiwi''@;'; put 'put ''c29mdHdhcmUuYWVybyIsInN0dWRlbnQuYWVybyIsInRheGkuYWVybyIsInRyYWRlci5hZXJvIiwidHJhZGluZy5hZXJvIiwidHJhaW5lci5hZXJvIiwidW5pb24uYWVybyIsIndvcmtpbmdncm91cC5hZXJvIiwid29ya3MuYWVybyIsImFmIiwiY29tLmFmIiwiZWR1LmFmIiwiZ292LmFmIiwi''@;'; put 'put ''bmV0LmFmIiwib3JnLmFmIiwiYWciLCJjby5hZyIsImNvbS5hZyIsIm5ldC5hZyIsIm5vbS5hZyIsIm9yZy5hZyIsImFpIiwiY29tLmFpIiwibmV0LmFpIiwib2ZmLmFpIiwib3JnLmFpIiwiYWwiLCJjb20uYWwiLCJlZHUuYWwiLCJnb3YuYWwiLCJtaWwuYWwiLCJuZXQuYWwiLCJvcmcuYWwi''@;'; put 'put ''LCJhbSIsImNvLmFtIiwiY29tLmFtIiwiY29tbXVuZS5hbSIsIm5ldC5hbSIsIm9yZy5hbSIsImFvIiwiY28uYW8iLCJlZC5hbyIsImVkdS5hbyIsImdvdi5hbyIsImd2LmFvIiwiaXQuYW8iLCJvZy5hbyIsIm9yZy5hbyIsInBiLmFvIiwiYXEiLCJhciIsImJldC5hciIsImNvbS5hciIsImNv''@;'; put 'put ''b3AuYXIiLCJlZHUuYXIiLCJnb2IuYXIiLCJnb3YuYXIiLCJpbnQuYXIiLCJtaWwuYXIiLCJtdXNpY2EuYXIiLCJtdXR1YWwuYXIiLCJuZXQuYXIiLCJvcmcuYXIiLCJzZW5hc2EuYXIiLCJ0dXIuYXIiLCJhcnBhIiwiZTE2NC5hcnBhIiwiaG9tZS5hcnBhIiwiaW4tYWRkci5hcnBhIiwiaXA2''@;'; put 'put ''LmFycGEiLCJpcmlzLmFycGEiLCJ1cmkuYXJwYSIsInVybi5hcnBhIiwiYXMiLCJnb3YuYXMiLCJhc2lhIiwiYXQiLCJhYy5hdCIsInN0aC5hYy5hdCIsImNvLmF0IiwiZ3YuYXQiLCJvci5hdCIsImF1IiwiYXNuLmF1IiwiY29tLmF1IiwiZWR1LmF1IiwiZ292LmF1IiwiaWQuYXUiLCJuZXQu''@;'; put 'put ''YXUiLCJvcmcuYXUiLCJjb25mLmF1Iiwib3ouYXUiLCJhY3QuYXUiLCJuc3cuYXUiLCJudC5hdSIsInFsZC5hdSIsInNhLmF1IiwidGFzLmF1IiwidmljLmF1Iiwid2EuYXUiLCJhY3QuZWR1LmF1IiwiY2F0aG9saWMuZWR1LmF1IiwibnN3LmVkdS5hdSIsIm50LmVkdS5hdSIsInFsZC5lZHUu''@;'; put 'put ''YXUiLCJzYS5lZHUuYXUiLCJ0YXMuZWR1LmF1IiwidmljLmVkdS5hdSIsIndhLmVkdS5hdSIsInFsZC5nb3YuYXUiLCJzYS5nb3YuYXUiLCJ0YXMuZ292LmF1IiwidmljLmdvdi5hdSIsIndhLmdvdi5hdSIsInNjaG9vbHMubnN3LmVkdS5hdSIsImF3IiwiY29tLmF3IiwiYXgiLCJheiIsImJp''@;'; put 'put ''ei5heiIsImNvbS5heiIsImVkdS5heiIsImdvdi5heiIsImluZm8uYXoiLCJpbnQuYXoiLCJtaWwuYXoiLCJuYW1lLmF6IiwibmV0LmF6Iiwib3JnLmF6IiwicHAuYXoiLCJwcm8uYXoiLCJiYSIsImNvbS5iYSIsImVkdS5iYSIsImdvdi5iYSIsIm1pbC5iYSIsIm5ldC5iYSIsIm9yZy5iYSIs''@;'; put 'put ''ImJiIiwiYml6LmJiIiwiY28uYmIiLCJjb20uYmIiLCJlZHUuYmIiLCJnb3YuYmIiLCJpbmZvLmJiIiwibmV0LmJiIiwib3JnLmJiIiwic3RvcmUuYmIiLCJ0di5iYiIsIiouYmQiLCJiZSIsImFjLmJlIiwiYmYiLCJnb3YuYmYiLCJiZyIsIjAuYmciLCIxLmJnIiwiMi5iZyIsIjMuYmciLCI0''@;'; put 'put ''LmJnIiwiNS5iZyIsIjYuYmciLCI3LmJnIiwiOC5iZyIsIjkuYmciLCJhLmJnIiwiYi5iZyIsImMuYmciLCJkLmJnIiwiZS5iZyIsImYuYmciLCJnLmJnIiwiaC5iZyIsImkuYmciLCJqLmJnIiwiay5iZyIsImwuYmciLCJtLmJnIiwibi5iZyIsIm8uYmciLCJwLmJnIiwicS5iZyIsInIuYmci''@;'; put 'put ''LCJzLmJnIiwidC5iZyIsInUuYmciLCJ2LmJnIiwidy5iZyIsInguYmciLCJ5LmJnIiwiei5iZyIsImJoIiwiY29tLmJoIiwiZWR1LmJoIiwiZ292LmJoIiwibmV0LmJoIiwib3JnLmJoIiwiYmkiLCJjby5iaSIsImNvbS5iaSIsImVkdS5iaSIsIm9yLmJpIiwib3JnLmJpIiwiYml6IiwiYmoi''@;'; put 'put ''LCJhZnJpY2EuYmoiLCJhZ3JvLmJqIiwiYXJjaGl0ZWN0ZXMuYmoiLCJhc3N1ci5iaiIsImF2b2NhdHMuYmoiLCJjby5iaiIsImNvbS5iaiIsImVjby5iaiIsImVjb25vLmJqIiwiZWR1LmJqIiwiaW5mby5iaiIsImxvaXNpcnMuYmoiLCJtb25leS5iaiIsIm5ldC5iaiIsIm9yZy5iaiIsIm90''@;'; put 'put ''ZS5iaiIsInJlc3RhdXJhbnQuYmoiLCJyZXN0by5iaiIsInRvdXJpc20uYmoiLCJ1bml2LmJqIiwiYm0iLCJjb20uYm0iLCJlZHUuYm0iLCJnb3YuYm0iLCJuZXQuYm0iLCJvcmcuYm0iLCJibiIsImNvbS5ibiIsImVkdS5ibiIsImdvdi5ibiIsIm5ldC5ibiIsIm9yZy5ibiIsImJvIiwiY29t''@;'; put 'put ''LmJvIiwiZWR1LmJvIiwiZ29iLmJvIiwiaW50LmJvIiwibWlsLmJvIiwibmV0LmJvIiwib3JnLmJvIiwidHYuYm8iLCJ3ZWIuYm8iLCJhY2FkZW1pYS5ibyIsImFncm8uYm8iLCJhcnRlLmJvIiwiYmxvZy5ibyIsImJvbGl2aWEuYm8iLCJjaWVuY2lhLmJvIiwiY29vcGVyYXRpdmEuYm8iLCJk''@;'; put 'put ''ZW1vY3JhY2lhLmJvIiwiZGVwb3J0ZS5ibyIsImVjb2xvZ2lhLmJvIiwiZWNvbm9taWEuYm8iLCJlbXByZXNhLmJvIiwiaW5kaWdlbmEuYm8iLCJpbmR1c3RyaWEuYm8iLCJpbmZvLmJvIiwibWVkaWNpbmEuYm8iLCJtb3ZpbWllbnRvLmJvIiwibXVzaWNhLmJvIiwibmF0dXJhbC5ibyIsIm5v''@;'; put 'put ''bWJyZS5ibyIsIm5vdGljaWFzLmJvIiwicGF0cmlhLmJvIiwicGx1cmluYWNpb25hbC5ibyIsInBvbGl0aWNhLmJvIiwicHJvZmVzaW9uYWwuYm8iLCJwdWVibG8uYm8iLCJyZXZpc3RhLmJvIiwic2FsdWQuYm8iLCJ0ZWNub2xvZ2lhLmJvIiwidGtzYXQuYm8iLCJ0cmFuc3BvcnRlLmJvIiwi''@;'; put 'put ''d2lraS5ibyIsImJyIiwiOWd1YWN1LmJyIiwiYWJjLmJyIiwiYWRtLmJyIiwiYWR2LmJyIiwiYWdyLmJyIiwiYWp1LmJyIiwiYW0uYnIiLCJhbmFuaS5iciIsImFwYXJlY2lkYS5iciIsImFwcC5iciIsImFycS5iciIsImFydC5iciIsImF0by5iciIsImIuYnIiLCJiYXJ1ZXJpLmJyIiwiYmVs''@;'; put 'put ''ZW0uYnIiLCJiZXQuYnIiLCJiaHouYnIiLCJiaWIuYnIiLCJiaW8uYnIiLCJibG9nLmJyIiwiYm1kLmJyIiwiYm9hdmlzdGEuYnIiLCJic2IuYnIiLCJjYW1waW5hZ3JhbmRlLmJyIiwiY2FtcGluYXMuYnIiLCJjYXhpYXMuYnIiLCJjaW0uYnIiLCJjbmcuYnIiLCJjbnQuYnIiLCJjb20uYnIi''@;'; put 'put ''LCJjb250YWdlbS5iciIsImNvb3AuYnIiLCJjb3ouYnIiLCJjcmkuYnIiLCJjdWlhYmEuYnIiLCJjdXJpdGliYS5iciIsImRlZi5iciIsImRlcy5iciIsImRldC5iciIsImRldi5iciIsImVjbi5iciIsImVjby5iciIsImVkdS5iciIsImVtcC5iciIsImVuZi5iciIsImVuZy5iciIsImVzcC5i''@;'; put 'put ''ciIsImV0Yy5iciIsImV0aS5iciIsImZhci5iciIsImZlaXJhLmJyIiwiZmxvZy5iciIsImZsb3JpcGEuYnIiLCJmbS5iciIsImZuZC5iciIsImZvcnRhbC5iciIsImZvdC5iciIsImZvei5iciIsImZzdC5iciIsImcxMi5iciIsImdlby5iciIsImdnZi5iciIsImdvaWFuaWEuYnIiLCJnb3Yu''@;'; put 'put ''YnIiLCJhYy5nb3YuYnIiLCJhbC5nb3YuYnIiLCJhbS5nb3YuYnIiLCJhcC5nb3YuYnIiLCJiYS5nb3YuYnIiLCJjZS5nb3YuYnIiLCJkZi5nb3YuYnIiLCJlcy5nb3YuYnIiLCJnby5nb3YuYnIiLCJtYS5nb3YuYnIiLCJtZy5nb3YuYnIiLCJtcy5nb3YuYnIiLCJtdC5nb3YuYnIiLCJwYS5n''@;'; put 'put ''b3YuYnIiLCJwYi5nb3YuYnIiLCJwZS5nb3YuYnIiLCJwaS5nb3YuYnIiLCJwci5nb3YuYnIiLCJyai5nb3YuYnIiLCJybi5nb3YuYnIiLCJyby5nb3YuYnIiLCJyci5nb3YuYnIiLCJycy5nb3YuYnIiLCJzYy5nb3YuYnIiLCJzZS5nb3YuYnIiLCJzcC5nb3YuYnIiLCJ0by5nb3YuYnIiLCJn''@;'; put 'put ''cnUuYnIiLCJpbWIuYnIiLCJpbmQuYnIiLCJpbmYuYnIiLCJqYWIuYnIiLCJqYW1wYS5iciIsImpkZi5iciIsImpvaW52aWxsZS5iciIsImpvci5iciIsImp1cy5iciIsImxlZy5iciIsImxlaWxhby5iciIsImxlbC5iciIsImxvZy5iciIsImxvbmRyaW5hLmJyIiwibWFjYXBhLmJyIiwibWFj''@;'; put 'put ''ZWlvLmJyIiwibWFuYXVzLmJyIiwibWFyaW5nYS5iciIsIm1hdC5iciIsIm1lZC5iciIsIm1pbC5iciIsIm1vcmVuYS5iciIsIm1wLmJyIiwibXVzLmJyIiwibmF0YWwuYnIiLCJuZXQuYnIiLCJuaXRlcm9pLmJyIiwiKi5ub20uYnIiLCJub3QuYnIiLCJudHIuYnIiLCJvZG8uYnIiLCJvbmcu''@;'; put 'put ''YnIiLCJvcmcuYnIiLCJvc2FzY28uYnIiLCJwYWxtYXMuYnIiLCJwb2EuYnIiLCJwcGcuYnIiLCJwcm8uYnIiLCJwc2MuYnIiLCJwc2kuYnIiLCJwdmguYnIiLCJxc2wuYnIiLCJyYWRpby5iciIsInJlYy5iciIsInJlY2lmZS5iciIsInJlcC5iciIsInJpYmVpcmFvLmJyIiwicmlvLmJyIiwi''@;'; put 'put ''cmlvYnJhbmNvLmJyIiwicmlvcHJldG8uYnIiLCJzYWx2YWRvci5iciIsInNhbXBhLmJyIiwic2FudGFtYXJpYS5iciIsInNhbnRvYW5kcmUuYnIiLCJzYW9iZXJuYXJkby5iciIsInNhb2dvbmNhLmJyIiwic2VnLmJyIiwic2pjLmJyIiwic2xnLmJyIiwic2x6LmJyIiwic29yb2NhYmEuYnIi''@;'; put 'put ''LCJzcnYuYnIiLCJ0YXhpLmJyIiwidGMuYnIiLCJ0ZWMuYnIiLCJ0ZW8uYnIiLCJ0aGUuYnIiLCJ0bXAuYnIiLCJ0cmQuYnIiLCJ0dXIuYnIiLCJ0di5iciIsInVkaS5iciIsInZldC5iciIsInZpeC5iciIsInZsb2cuYnIiLCJ3aWtpLmJyIiwiemxnLmJyIiwiYnMiLCJjb20uYnMiLCJlZHUu''@;'; put 'put ''YnMiLCJnb3YuYnMiLCJuZXQuYnMiLCJvcmcuYnMiLCJidCIsImNvbS5idCIsImVkdS5idCIsImdvdi5idCIsIm5ldC5idCIsIm9yZy5idCIsImJ2IiwiYnciLCJjby5idyIsIm9yZy5idyIsImJ5IiwiZ292LmJ5IiwibWlsLmJ5IiwiY29tLmJ5Iiwib2YuYnkiLCJieiIsImNvLmJ6IiwiY29t''@;'; put 'put ''LmJ6IiwiZWR1LmJ6IiwiZ292LmJ6IiwibmV0LmJ6Iiwib3JnLmJ6IiwiY2EiLCJhYi5jYSIsImJjLmNhIiwibWIuY2EiLCJuYi5jYSIsIm5mLmNhIiwibmwuY2EiLCJucy5jYSIsIm50LmNhIiwibnUuY2EiLCJvbi5jYSIsInBlLmNhIiwicWMuY2EiLCJzay5jYSIsInlrLmNhIiwiZ2MuY2Ei''@;'; put 'put ''LCJjYXQiLCJjYyIsImNkIiwiZ292LmNkIiwiY2YiLCJjZyIsImNoIiwiY2kiLCJhYy5jaSIsImFceGU5cm9wb3J0LmNpIiwiYXNzby5jaSIsImNvLmNpIiwiY29tLmNpIiwiZWQuY2kiLCJlZHUuY2kiLCJnby5jaSIsImdvdXYuY2kiLCJpbnQuY2kiLCJuZXQuY2kiLCJvci5jaSIsIm9yZy5j''@;'; put 'put ''aSIsIiouY2siLCIhd3d3LmNrIiwiY2wiLCJjby5jbCIsImdvYi5jbCIsImdvdi5jbCIsIm1pbC5jbCIsImNtIiwiY28uY20iLCJjb20uY20iLCJnb3YuY20iLCJuZXQuY20iLCJjbiIsImFjLmNuIiwiY29tLmNuIiwiZWR1LmNuIiwiZ292LmNuIiwibWlsLmNuIiwibmV0LmNuIiwib3JnLmNu''@;'; put 'put ''IiwiXHU1MTZjXHU1M2Y4LmNuIiwiXHU3ZGIyXHU3ZDYxLmNuIiwiXHU3ZjUxXHU3ZWRjLmNuIiwiYWguY24iLCJiai5jbiIsImNxLmNuIiwiZmouY24iLCJnZC5jbiIsImdzLmNuIiwiZ3guY24iLCJnei5jbiIsImhhLmNuIiwiaGIuY24iLCJoZS5jbiIsImhpLmNuIiwiaGsuY24iLCJobC5j''@;'; put 'put ''biIsImhuLmNuIiwiamwuY24iLCJqcy5jbiIsImp4LmNuIiwibG4uY24iLCJtby5jbiIsIm5tLmNuIiwibnguY24iLCJxaC5jbiIsInNjLmNuIiwic2QuY24iLCJzaC5jbiIsInNuLmNuIiwic3guY24iLCJ0ai5jbiIsInR3LmNuIiwieGouY24iLCJ4ei5jbiIsInluLmNuIiwiemouY24iLCJj''@;'; put 'put ''byIsImNvbS5jbyIsImVkdS5jbyIsImdvdi5jbyIsIm1pbC5jbyIsIm5ldC5jbyIsIm5vbS5jbyIsIm9yZy5jbyIsImNvbSIsImNvb3AiLCJjciIsImFjLmNyIiwiY28uY3IiLCJlZC5jciIsImZpLmNyIiwiZ28uY3IiLCJvci5jciIsInNhLmNyIiwiY3UiLCJjb20uY3UiLCJlZHUuY3UiLCJn''@;'; put 'put ''b2IuY3UiLCJpbmYuY3UiLCJuYXQuY3UiLCJuZXQuY3UiLCJvcmcuY3UiLCJjdiIsImNvbS5jdiIsImVkdS5jdiIsImlkLmN2IiwiaW50LmN2IiwibmV0LmN2Iiwibm9tZS5jdiIsIm9yZy5jdiIsInB1YmwuY3YiLCJjdyIsImNvbS5jdyIsImVkdS5jdyIsIm5ldC5jdyIsIm9yZy5jdyIsImN4''@;'; put 'put ''IiwiZ292LmN4IiwiY3kiLCJhYy5jeSIsImJpei5jeSIsImNvbS5jeSIsImVrbG9nZXMuY3kiLCJnb3YuY3kiLCJsdGQuY3kiLCJtaWwuY3kiLCJuZXQuY3kiLCJvcmcuY3kiLCJwcmVzcy5jeSIsInByby5jeSIsInRtLmN5IiwiY3oiLCJkZSIsImRqIiwiZGsiLCJkbSIsImNvLmRtIiwiY29t''@;'; put 'put ''LmRtIiwiZWR1LmRtIiwiZ292LmRtIiwibmV0LmRtIiwib3JnLmRtIiwiZG8iLCJhcnQuZG8iLCJjb20uZG8iLCJlZHUuZG8iLCJnb2IuZG8iLCJnb3YuZG8iLCJtaWwuZG8iLCJuZXQuZG8iLCJvcmcuZG8iLCJzbGQuZG8iLCJ3ZWIuZG8iLCJkeiIsImFydC5keiIsImFzc28uZHoiLCJjb20u''@;'; put 'put ''ZHoiLCJlZHUuZHoiLCJnb3YuZHoiLCJuZXQuZHoiLCJvcmcuZHoiLCJwb2wuZHoiLCJzb2MuZHoiLCJ0bS5keiIsImVjIiwiY29tLmVjIiwiZWR1LmVjIiwiZmluLmVjIiwiZ29iLmVjIiwiZ292LmVjIiwiaW5mby5lYyIsImsxMi5lYyIsIm1lZC5lYyIsIm1pbC5lYyIsIm5ldC5lYyIsIm9y''@;'; put 'put ''Zy5lYyIsInByby5lYyIsImVkdSIsImVlIiwiYWlwLmVlIiwiY29tLmVlIiwiZWR1LmVlIiwiZmllLmVlIiwiZ292LmVlIiwibGliLmVlIiwibWVkLmVlIiwib3JnLmVlIiwicHJpLmVlIiwicmlpay5lZSIsImVnIiwiYWMuZWciLCJjb20uZWciLCJlZHUuZWciLCJldW4uZWciLCJnb3YuZWci''@;'; put 'put ''LCJpbmZvLmVnIiwibWUuZWciLCJtaWwuZWciLCJuYW1lLmVnIiwibmV0LmVnIiwib3JnLmVnIiwic2NpLmVnIiwic3BvcnQuZWciLCJ0di5lZyIsIiouZXIiLCJlcyIsImNvbS5lcyIsImVkdS5lcyIsImdvYi5lcyIsIm5vbS5lcyIsIm9yZy5lcyIsImV0IiwiYml6LmV0IiwiY29tLmV0Iiwi''@;'; put 'put ''ZWR1LmV0IiwiZ292LmV0IiwiaW5mby5ldCIsIm5hbWUuZXQiLCJuZXQuZXQiLCJvcmcuZXQiLCJldSIsImZpIiwiYWxhbmQuZmkiLCJmaiIsImFjLmZqIiwiYml6LmZqIiwiY29tLmZqIiwiZ292LmZqIiwiaW5mby5maiIsIm1pbC5maiIsIm5hbWUuZmoiLCJuZXQuZmoiLCJvcmcuZmoiLCJw''@;'; put 'put ''cm8uZmoiLCIqLmZrIiwiZm0iLCJjb20uZm0iLCJlZHUuZm0iLCJuZXQuZm0iLCJvcmcuZm0iLCJmbyIsImZyIiwiYXNzby5mciIsImNvbS5mciIsImdvdXYuZnIiLCJub20uZnIiLCJwcmQuZnIiLCJ0bS5mciIsImF2b3Vlcy5mciIsImNjaS5mciIsImdyZXRhLmZyIiwiaHVpc3NpZXItanVz''@;'; put 'put ''dGljZS5mciIsImdhIiwiZ2IiLCJnZCIsImVkdS5nZCIsImdvdi5nZCIsImdlIiwiY29tLmdlIiwiZWR1LmdlIiwiZ292LmdlIiwibmV0LmdlIiwib3JnLmdlIiwicHZ0LmdlIiwic2Nob29sLmdlIiwiZ2YiLCJnZyIsImNvLmdnIiwibmV0LmdnIiwib3JnLmdnIiwiZ2giLCJjb20uZ2giLCJl''@;'; put 'put ''ZHUuZ2giLCJnb3YuZ2giLCJtaWwuZ2giLCJvcmcuZ2giLCJnaSIsImNvbS5naSIsImVkdS5naSIsImdvdi5naSIsImx0ZC5naSIsIm1vZC5naSIsIm9yZy5naSIsImdsIiwiY28uZ2wiLCJjb20uZ2wiLCJlZHUuZ2wiLCJuZXQuZ2wiLCJvcmcuZ2wiLCJnbSIsImduIiwiYWMuZ24iLCJjb20u''@;'; put 'put ''Z24iLCJlZHUuZ24iLCJnb3YuZ24iLCJuZXQuZ24iLCJvcmcuZ24iLCJnb3YiLCJncCIsImFzc28uZ3AiLCJjb20uZ3AiLCJlZHUuZ3AiLCJtb2JpLmdwIiwibmV0LmdwIiwib3JnLmdwIiwiZ3EiLCJnciIsImNvbS5nciIsImVkdS5nciIsImdvdi5nciIsIm5ldC5nciIsIm9yZy5nciIsImdz''@;'; put 'put ''IiwiZ3QiLCJjb20uZ3QiLCJlZHUuZ3QiLCJnb2IuZ3QiLCJpbmQuZ3QiLCJtaWwuZ3QiLCJuZXQuZ3QiLCJvcmcuZ3QiLCJndSIsImNvbS5ndSIsImVkdS5ndSIsImdvdi5ndSIsImd1YW0uZ3UiLCJpbmZvLmd1IiwibmV0Lmd1Iiwib3JnLmd1Iiwid2ViLmd1IiwiZ3ciLCJneSIsImNvLmd5''@;'; put 'put ''IiwiY29tLmd5IiwiZWR1Lmd5IiwiZ292Lmd5IiwibmV0Lmd5Iiwib3JnLmd5IiwiaGsiLCJjb20uaGsiLCJlZHUuaGsiLCJnb3YuaGsiLCJpZHYuaGsiLCJuZXQuaGsiLCJvcmcuaGsiLCJcdTRlMmFcdTRlYmEuaGsiLCJcdTUwMGJcdTRlYmEuaGsiLCJcdTUxNmNcdTUzZjguaGsiLCJcdTY1''@;'; put 'put ''M2ZcdTVlOWMuaGsiLCJcdTY1NGVcdTgwYjIuaGsiLCJcdTY1NTlcdTgwYjIuaGsiLCJcdTdiODdcdTRlYmEuaGsiLCJcdTdkNDRcdTdlNTQuaGsiLCJcdTdkNDRcdTdlYzcuaGsiLCJcdTdkYjJcdTdkNjEuaGsiLCJcdTdkYjJcdTdlZGMuaGsiLCJcdTdlYzRcdTdlNTQuaGsiLCJcdTdlYzRc''@;'; put 'put ''dTdlYzcuaGsiLCJcdTdmNTFcdTdkNjEuaGsiLCJcdTdmNTFcdTdlZGMuaGsiLCJobSIsImhuIiwiY29tLmhuIiwiZWR1LmhuIiwiZ29iLmhuIiwibWlsLmhuIiwibmV0LmhuIiwib3JnLmhuIiwiaHIiLCJjb20uaHIiLCJmcm9tLmhyIiwiaXouaHIiLCJuYW1lLmhyIiwiaHQiLCJhZHVsdC5o''@;'; put 'put ''dCIsImFydC5odCIsImFzc28uaHQiLCJjb20uaHQiLCJjb29wLmh0IiwiZWR1Lmh0IiwiZmlybS5odCIsImdvdXYuaHQiLCJpbmZvLmh0IiwibWVkLmh0IiwibmV0Lmh0Iiwib3JnLmh0IiwicGVyc28uaHQiLCJwb2wuaHQiLCJwcm8uaHQiLCJyZWwuaHQiLCJzaG9wLmh0IiwiaHUiLCIyMDAw''@;'; put 'put ''Lmh1IiwiYWdyYXIuaHUiLCJib2x0Lmh1IiwiY2FzaW5vLmh1IiwiY2l0eS5odSIsImNvLmh1IiwiZXJvdGljYS5odSIsImVyb3Rpa2EuaHUiLCJmaWxtLmh1IiwiZm9ydW0uaHUiLCJnYW1lcy5odSIsImhvdGVsLmh1IiwiaW5mby5odSIsImluZ2F0bGFuLmh1Iiwiam9nYXN6Lmh1Iiwia29u''@;'; put 'put ''eXZlbG8uaHUiLCJsYWthcy5odSIsIm1lZGlhLmh1IiwibmV3cy5odSIsIm9yZy5odSIsInByaXYuaHUiLCJyZWtsYW0uaHUiLCJzZXguaHUiLCJzaG9wLmh1Iiwic3BvcnQuaHUiLCJzdWxpLmh1Iiwic3pleC5odSIsInRtLmh1IiwidG96c2RlLmh1IiwidXRhemFzLmh1IiwidmlkZW8uaHUi''@;'; put 'put ''LCJpZCIsImFjLmlkIiwiYml6LmlkIiwiY28uaWQiLCJkZXNhLmlkIiwiZ28uaWQiLCJtaWwuaWQiLCJteS5pZCIsIm5ldC5pZCIsIm9yLmlkIiwicG9ucGVzLmlkIiwic2NoLmlkIiwid2ViLmlkIiwiaWUiLCJnb3YuaWUiLCJpbCIsImFjLmlsIiwiY28uaWwiLCJnb3YuaWwiLCJpZGYuaWwi''@;'; put 'put ''LCJrMTIuaWwiLCJtdW5pLmlsIiwibmV0LmlsIiwib3JnLmlsIiwiXHUwNWQ5XHUwNWU5XHUwNWU4XHUwNWQwXHUwNWRjIiwiXHUwNWQwXHUwNWU3XHUwNWQzXHUwNWRlXHUwNWQ5XHUwNWQ0Llx1MDVkOVx1MDVlOVx1MDVlOFx1MDVkMFx1MDVkYyIsIlx1MDVkOVx1MDVlOVx1MDVkNVx1MDVk''@;'; put 'put ''MS5cdTA1ZDlcdTA1ZTlcdTA1ZThcdTA1ZDBcdTA1ZGMiLCJcdTA1ZTZcdTA1ZDRcdTA1ZGMuXHUwNWQ5XHUwNWU5XHUwNWU4XHUwNWQwXHUwNWRjIiwiXHUwNWRlXHUwNWRlXHUwNWU5XHUwNWRjLlx1MDVkOVx1MDVlOVx1MDVlOFx1MDVkMFx1MDVkYyIsImltIiwiYWMuaW0iLCJjby5pbSIs''@;'; put 'put ''Imx0ZC5jby5pbSIsInBsYy5jby5pbSIsImNvbS5pbSIsIm5ldC5pbSIsIm9yZy5pbSIsInR0LmltIiwidHYuaW0iLCJpbiIsIjVnLmluIiwiNmcuaW4iLCJhYy5pbiIsImFpLmluIiwiYW0uaW4iLCJiaWhhci5pbiIsImJpei5pbiIsImJ1c2luZXNzLmluIiwiY2EuaW4iLCJjbi5pbiIsImNv''@;'; put 'put ''LmluIiwiY29tLmluIiwiY29vcC5pbiIsImNzLmluIiwiZGVsaGkuaW4iLCJkci5pbiIsImVkdS5pbiIsImVyLmluIiwiZmlybS5pbiIsImdlbi5pbiIsImdvdi5pbiIsImd1amFyYXQuaW4iLCJpbmQuaW4iLCJpbmZvLmluIiwiaW50LmluIiwiaW50ZXJuZXQuaW4iLCJpby5pbiIsIm1lLmlu''@;'; put 'put ''IiwibWlsLmluIiwibmV0LmluIiwibmljLmluIiwib3JnLmluIiwicGcuaW4iLCJwb3N0LmluIiwicHJvLmluIiwicmVzLmluIiwidHJhdmVsLmluIiwidHYuaW4iLCJ1ay5pbiIsInVwLmluIiwidXMuaW4iLCJpbmZvIiwiaW50IiwiZXUuaW50IiwiaW8iLCJjby5pbyIsImNvbS5pbyIsImVk''@;'; put 'put ''dS5pbyIsImdvdi5pbyIsIm1pbC5pbyIsIm5ldC5pbyIsIm5vbS5pbyIsIm9yZy5pbyIsImlxIiwiY29tLmlxIiwiZWR1LmlxIiwiZ292LmlxIiwibWlsLmlxIiwibmV0LmlxIiwib3JnLmlxIiwiaXIiLCJhYy5pciIsImNvLmlyIiwiZ292LmlyIiwiaWQuaXIiLCJuZXQuaXIiLCJvcmcuaXIi''@;'; put 'put ''LCJzY2guaXIiLCJcdTA2MjdcdTA2Y2NcdTA2MzFcdTA2MjdcdTA2NDYuaXIiLCJcdTA2MjdcdTA2NGFcdTA2MzFcdTA2MjdcdTA2NDYuaXIiLCJpcyIsIml0IiwiZWR1Lml0IiwiZ292Lml0IiwiYWJyLml0IiwiYWJydXp6by5pdCIsImFvc3RhLXZhbGxleS5pdCIsImFvc3RhdmFsbGV5Lml0''@;'; put 'put ''IiwiYmFzLml0IiwiYmFzaWxpY2F0YS5pdCIsImNhbC5pdCIsImNhbGFicmlhLml0IiwiY2FtLml0IiwiY2FtcGFuaWEuaXQiLCJlbWlsaWEtcm9tYWduYS5pdCIsImVtaWxpYXJvbWFnbmEuaXQiLCJlbXIuaXQiLCJmcml1bGktdi1naXVsaWEuaXQiLCJmcml1bGktdmUtZ2l1bGlhLml0Iiwi''@;'; put 'put ''ZnJpdWxpLXZlZ2l1bGlhLml0IiwiZnJpdWxpLXZlbmV6aWEtZ2l1bGlhLml0IiwiZnJpdWxpLXZlbmV6aWFnaXVsaWEuaXQiLCJmcml1bGktdmdpdWxpYS5pdCIsImZyaXVsaXYtZ2l1bGlhLml0IiwiZnJpdWxpdmUtZ2l1bGlhLml0IiwiZnJpdWxpdmVnaXVsaWEuaXQiLCJmcml1bGl2ZW5l''@;'; put 'put ''emlhLWdpdWxpYS5pdCIsImZyaXVsaXZlbmV6aWFnaXVsaWEuaXQiLCJmcml1bGl2Z2l1bGlhLml0IiwiZnZnLml0IiwibGF6Lml0IiwibGF6aW8uaXQiLCJsaWcuaXQiLCJsaWd1cmlhLml0IiwibG9tLml0IiwibG9tYmFyZGlhLml0IiwibG9tYmFyZHkuaXQiLCJsdWNhbmlhLml0IiwibWFy''@;'; put 'put ''Lml0IiwibWFyY2hlLml0IiwibW9sLml0IiwibW9saXNlLml0IiwicGllZG1vbnQuaXQiLCJwaWVtb250ZS5pdCIsInBtbi5pdCIsInB1Zy5pdCIsInB1Z2xpYS5pdCIsInNhci5pdCIsInNhcmRlZ25hLml0Iiwic2FyZGluaWEuaXQiLCJzaWMuaXQiLCJzaWNpbGlhLml0Iiwic2ljaWx5Lml0''@;'; put 'put ''IiwidGFhLml0IiwidG9zLml0IiwidG9zY2FuYS5pdCIsInRyZW50aW4tc3VkLXRpcm9sLml0IiwidHJlbnRpbi1zXHhmY2QtdGlyb2wuaXQiLCJ0cmVudGluLXN1ZHRpcm9sLml0IiwidHJlbnRpbi1zXHhmY2R0aXJvbC5pdCIsInRyZW50aW4tc3VlZC10aXJvbC5pdCIsInRyZW50aW4tc3Vl''@;'; put 'put ''ZHRpcm9sLml0IiwidHJlbnRpbm8uaXQiLCJ0cmVudGluby1hLWFkaWdlLml0IiwidHJlbnRpbm8tYWFkaWdlLml0IiwidHJlbnRpbm8tYWx0by1hZGlnZS5pdCIsInRyZW50aW5vLWFsdG9hZGlnZS5pdCIsInRyZW50aW5vLXMtdGlyb2wuaXQiLCJ0cmVudGluby1zdGlyb2wuaXQiLCJ0cmVu''@;'; put 'put ''dGluby1zdWQtdGlyb2wuaXQiLCJ0cmVudGluby1zXHhmY2QtdGlyb2wuaXQiLCJ0cmVudGluby1zdWR0aXJvbC5pdCIsInRyZW50aW5vLXNceGZjZHRpcm9sLml0IiwidHJlbnRpbm8tc3VlZC10aXJvbC5pdCIsInRyZW50aW5vLXN1ZWR0aXJvbC5pdCIsInRyZW50aW5vYS1hZGlnZS5pdCIs''@;'; put 'put ''InRyZW50aW5vYWFkaWdlLml0IiwidHJlbnRpbm9hbHRvLWFkaWdlLml0IiwidHJlbnRpbm9hbHRvYWRpZ2UuaXQiLCJ0cmVudGlub3MtdGlyb2wuaXQiLCJ0cmVudGlub3N0aXJvbC5pdCIsInRyZW50aW5vc3VkLXRpcm9sLml0IiwidHJlbnRpbm9zXHhmY2QtdGlyb2wuaXQiLCJ0cmVudGlu''@;'; put 'put ''b3N1ZHRpcm9sLml0IiwidHJlbnRpbm9zXHhmY2R0aXJvbC5pdCIsInRyZW50aW5vc3VlZC10aXJvbC5pdCIsInRyZW50aW5vc3VlZHRpcm9sLml0IiwidHJlbnRpbnN1ZC10aXJvbC5pdCIsInRyZW50aW5zXHhmY2QtdGlyb2wuaXQiLCJ0cmVudGluc3VkdGlyb2wuaXQiLCJ0cmVudGluc1x4''@;'; put 'put ''ZmNkdGlyb2wuaXQiLCJ0cmVudGluc3VlZC10aXJvbC5pdCIsInRyZW50aW5zdWVkdGlyb2wuaXQiLCJ0dXNjYW55Lml0IiwidW1iLml0IiwidW1icmlhLml0IiwidmFsLWQtYW9zdGEuaXQiLCJ2YWwtZGFvc3RhLml0IiwidmFsZC1hb3N0YS5pdCIsInZhbGRhb3N0YS5pdCIsInZhbGxlLWFv''@;'; put 'put ''c3RhLml0IiwidmFsbGUtZC1hb3N0YS5pdCIsInZhbGxlLWRhb3N0YS5pdCIsInZhbGxlYW9zdGEuaXQiLCJ2YWxsZWQtYW9zdGEuaXQiLCJ2YWxsZWRhb3N0YS5pdCIsInZhbGxlZS1hb3N0ZS5pdCIsInZhbGxceGU5ZS1hb3N0ZS5pdCIsInZhbGxlZS1kLWFvc3RlLml0IiwidmFsbFx4ZTll''@;'; put 'put ''LWQtYW9zdGUuaXQiLCJ2YWxsZWVhb3N0ZS5pdCIsInZhbGxceGU5ZWFvc3RlLml0IiwidmFsbGVlZGFvc3RlLml0IiwidmFsbFx4ZTllZGFvc3RlLml0IiwidmFvLml0IiwidmRhLml0IiwidmVuLml0IiwidmVuZXRvLml0IiwiYWcuaXQiLCJhZ3JpZ2VudG8uaXQiLCJhbC5pdCIsImFsZXNz''@;'; put 'put ''YW5kcmlhLml0IiwiYWx0by1hZGlnZS5pdCIsImFsdG9hZGlnZS5pdCIsImFuLml0IiwiYW5jb25hLml0IiwiYW5kcmlhLWJhcmxldHRhLXRyYW5pLml0IiwiYW5kcmlhLXRyYW5pLWJhcmxldHRhLml0IiwiYW5kcmlhYmFybGV0dGF0cmFuaS5pdCIsImFuZHJpYXRyYW5pYmFybGV0dGEuaXQi''@;'; put 'put ''LCJhby5pdCIsImFvc3RhLml0IiwiYW9zdGUuaXQiLCJhcC5pdCIsImFxLml0IiwiYXF1aWxhLml0IiwiYXIuaXQiLCJhcmV6em8uaXQiLCJhc2NvbGktcGljZW5vLml0IiwiYXNjb2xpcGljZW5vLml0IiwiYXN0aS5pdCIsImF0Lml0IiwiYXYuaXQiLCJhdmVsbGluby5pdCIsImJhLml0Iiwi''@;'; put 'put ''YmFsc2FuLml0IiwiYmFsc2FuLXN1ZHRpcm9sLml0IiwiYmFsc2FuLXNceGZjZHRpcm9sLml0IiwiYmFsc2FuLXN1ZWR0aXJvbC5pdCIsImJhcmkuaXQiLCJiYXJsZXR0YS10cmFuaS1hbmRyaWEuaXQiLCJiYXJsZXR0YXRyYW5pYW5kcmlhLml0IiwiYmVsbHVuby5pdCIsImJlbmV2ZW50by5p''@;'; put 'put ''dCIsImJlcmdhbW8uaXQiLCJiZy5pdCIsImJpLml0IiwiYmllbGxhLml0IiwiYmwuaXQiLCJibi5pdCIsImJvLml0IiwiYm9sb2duYS5pdCIsImJvbHphbm8uaXQiLCJib2x6YW5vLWFsdG9hZGlnZS5pdCIsImJvemVuLml0IiwiYm96ZW4tc3VkdGlyb2wuaXQiLCJib3plbi1zXHhmY2R0aXJv''@;'; put 'put ''bC5pdCIsImJvemVuLXN1ZWR0aXJvbC5pdCIsImJyLml0IiwiYnJlc2NpYS5pdCIsImJyaW5kaXNpLml0IiwiYnMuaXQiLCJidC5pdCIsImJ1bHNhbi5pdCIsImJ1bHNhbi1zdWR0aXJvbC5pdCIsImJ1bHNhbi1zXHhmY2R0aXJvbC5pdCIsImJ1bHNhbi1zdWVkdGlyb2wuaXQiLCJiei5pdCIs''@;'; put 'put ''ImNhLml0IiwiY2FnbGlhcmkuaXQiLCJjYWx0YW5pc3NldHRhLml0IiwiY2FtcGlkYW5vLW1lZGlvLml0IiwiY2FtcGlkYW5vbWVkaW8uaXQiLCJjYW1wb2Jhc3NvLml0IiwiY2FyYm9uaWEtaWdsZXNpYXMuaXQiLCJjYXJib25pYWlnbGVzaWFzLml0IiwiY2FycmFyYS1tYXNzYS5pdCIsImNh''@;'; put 'put ''cnJhcmFtYXNzYS5pdCIsImNhc2VydGEuaXQiLCJjYXRhbmlhLml0IiwiY2F0YW56YXJvLml0IiwiY2IuaXQiLCJjZS5pdCIsImNlc2VuYS1mb3JsaS5pdCIsImNlc2VuYS1mb3JsXHhlYy5pdCIsImNlc2VuYWZvcmxpLml0IiwiY2VzZW5hZm9ybFx4ZWMuaXQiLCJjaC5pdCIsImNoaWV0aS5p''@;'; put 'put ''dCIsImNpLml0IiwiY2wuaXQiLCJjbi5pdCIsImNvLml0IiwiY29tby5pdCIsImNvc2VuemEuaXQiLCJjci5pdCIsImNyZW1vbmEuaXQiLCJjcm90b25lLml0IiwiY3MuaXQiLCJjdC5pdCIsImN1bmVvLml0IiwiY3ouaXQiLCJkZWxsLW9nbGlhc3RyYS5pdCIsImRlbGxvZ2xpYXN0cmEuaXQi''@;'; put 'put ''LCJlbi5pdCIsImVubmEuaXQiLCJmYy5pdCIsImZlLml0IiwiZmVybW8uaXQiLCJmZXJyYXJhLml0IiwiZmcuaXQiLCJmaS5pdCIsImZpcmVuemUuaXQiLCJmbG9yZW5jZS5pdCIsImZtLml0IiwiZm9nZ2lhLml0IiwiZm9ybGktY2VzZW5hLml0IiwiZm9ybFx4ZWMtY2VzZW5hLml0IiwiZm9y''@;'; put 'put ''bGljZXNlbmEuaXQiLCJmb3JsXHhlY2Nlc2VuYS5pdCIsImZyLml0IiwiZnJvc2lub25lLml0IiwiZ2UuaXQiLCJnZW5vYS5pdCIsImdlbm92YS5pdCIsImdvLml0IiwiZ29yaXppYS5pdCIsImdyLml0IiwiZ3Jvc3NldG8uaXQiLCJpZ2xlc2lhcy1jYXJib25pYS5pdCIsImlnbGVzaWFzY2Fy''@;'; put 'put ''Ym9uaWEuaXQiLCJpbS5pdCIsImltcGVyaWEuaXQiLCJpcy5pdCIsImlzZXJuaWEuaXQiLCJrci5pdCIsImxhLXNwZXppYS5pdCIsImxhcXVpbGEuaXQiLCJsYXNwZXppYS5pdCIsImxhdGluYS5pdCIsImxjLml0IiwibGUuaXQiLCJsZWNjZS5pdCIsImxlY2NvLml0IiwibGkuaXQiLCJsaXZv''@;'; put 'put ''cm5vLml0IiwibG8uaXQiLCJsb2RpLml0IiwibHQuaXQiLCJsdS5pdCIsImx1Y2NhLml0IiwibWFjZXJhdGEuaXQiLCJtYW50b3ZhLml0IiwibWFzc2EtY2FycmFyYS5pdCIsIm1hc3NhY2FycmFyYS5pdCIsIm1hdGVyYS5pdCIsIm1iLml0IiwibWMuaXQiLCJtZS5pdCIsIm1lZGlvLWNhbXBp''@;'; put 'put ''ZGFuby5pdCIsIm1lZGlvY2FtcGlkYW5vLml0IiwibWVzc2luYS5pdCIsIm1pLml0IiwibWlsYW4uaXQiLCJtaWxhbm8uaXQiLCJtbi5pdCIsIm1vLml0IiwibW9kZW5hLml0IiwibW9uemEuaXQiLCJtb256YS1icmlhbnphLml0IiwibW9uemEtZS1kZWxsYS1icmlhbnphLml0IiwibW9uemFi''@;'; put 'put ''cmlhbnphLml0IiwibW9uemFlYnJpYW56YS5pdCIsIm1vbnphZWRlbGxhYnJpYW56YS5pdCIsIm1zLml0IiwibXQuaXQiLCJuYS5pdCIsIm5hcGxlcy5pdCIsIm5hcG9saS5pdCIsIm5vLml0Iiwibm92YXJhLml0IiwibnUuaXQiLCJudW9yby5pdCIsIm9nLml0Iiwib2dsaWFzdHJhLml0Iiwi''@;'; put 'put ''b2xiaWEtdGVtcGlvLml0Iiwib2xiaWF0ZW1waW8uaXQiLCJvci5pdCIsIm9yaXN0YW5vLml0Iiwib3QuaXQiLCJwYS5pdCIsInBhZG92YS5pdCIsInBhZHVhLml0IiwicGFsZXJtby5pdCIsInBhcm1hLml0IiwicGF2aWEuaXQiLCJwYy5pdCIsInBkLml0IiwicGUuaXQiLCJwZXJ1Z2lhLml0''@;'; put 'put ''IiwicGVzYXJvLXVyYmluby5pdCIsInBlc2Fyb3VyYmluby5pdCIsInBlc2NhcmEuaXQiLCJwZy5pdCIsInBpLml0IiwicGlhY2VuemEuaXQiLCJwaXNhLml0IiwicGlzdG9pYS5pdCIsInBuLml0IiwicG8uaXQiLCJwb3JkZW5vbmUuaXQiLCJwb3RlbnphLml0IiwicHIuaXQiLCJwcmF0by5p''@;'; put 'put ''dCIsInB0Lml0IiwicHUuaXQiLCJwdi5pdCIsInB6Lml0IiwicmEuaXQiLCJyYWd1c2EuaXQiLCJyYXZlbm5hLml0IiwicmMuaXQiLCJyZS5pdCIsInJlZ2dpby1jYWxhYnJpYS5pdCIsInJlZ2dpby1lbWlsaWEuaXQiLCJyZWdnaW9jYWxhYnJpYS5pdCIsInJlZ2dpb2VtaWxpYS5pdCIsInJn''@;'; put 'put ''Lml0IiwicmkuaXQiLCJyaWV0aS5pdCIsInJpbWluaS5pdCIsInJtLml0Iiwicm4uaXQiLCJyby5pdCIsInJvbWEuaXQiLCJyb21lLml0Iiwicm92aWdvLml0Iiwic2EuaXQiLCJzYWxlcm5vLml0Iiwic2Fzc2FyaS5pdCIsInNhdm9uYS5pdCIsInNpLml0Iiwic2llbmEuaXQiLCJzaXJhY3Vz''@;'; put 'put ''YS5pdCIsInNvLml0Iiwic29uZHJpby5pdCIsInNwLml0Iiwic3IuaXQiLCJzcy5pdCIsInNceGZjZHRpcm9sLml0Iiwic3VlZHRpcm9sLml0Iiwic3YuaXQiLCJ0YS5pdCIsInRhcmFudG8uaXQiLCJ0ZS5pdCIsInRlbXBpby1vbGJpYS5pdCIsInRlbXBpb29sYmlhLml0IiwidGVyYW1vLml0''@;'; put 'put ''IiwidGVybmkuaXQiLCJ0bi5pdCIsInRvLml0IiwidG9yaW5vLml0IiwidHAuaXQiLCJ0ci5pdCIsInRyYW5pLWFuZHJpYS1iYXJsZXR0YS5pdCIsInRyYW5pLWJhcmxldHRhLWFuZHJpYS5pdCIsInRyYW5pYW5kcmlhYmFybGV0dGEuaXQiLCJ0cmFuaWJhcmxldHRhYW5kcmlhLml0IiwidHJh''@;'; put 'put ''cGFuaS5pdCIsInRyZW50by5pdCIsInRyZXZpc28uaXQiLCJ0cmllc3RlLml0IiwidHMuaXQiLCJ0dXJpbi5pdCIsInR2Lml0IiwidWQuaXQiLCJ1ZGluZS5pdCIsInVyYmluby1wZXNhcm8uaXQiLCJ1cmJpbm9wZXNhcm8uaXQiLCJ2YS5pdCIsInZhcmVzZS5pdCIsInZiLml0IiwidmMuaXQi''@;'; put 'put ''LCJ2ZS5pdCIsInZlbmV6aWEuaXQiLCJ2ZW5pY2UuaXQiLCJ2ZXJiYW5pYS5pdCIsInZlcmNlbGxpLml0IiwidmVyb25hLml0IiwidmkuaXQiLCJ2aWJvLXZhbGVudGlhLml0Iiwidmlib3ZhbGVudGlhLml0IiwidmljZW56YS5pdCIsInZpdGVyYm8uaXQiLCJ2ci5pdCIsInZzLml0IiwidnQu''@;'; put 'put ''aXQiLCJ2di5pdCIsImplIiwiY28uamUiLCJuZXQuamUiLCJvcmcuamUiLCIqLmptIiwiam8iLCJhZ3JpLmpvIiwiYWkuam8iLCJjb20uam8iLCJlZHUuam8iLCJlbmcuam8iLCJmbS5qbyIsImdvdi5qbyIsIm1pbC5qbyIsIm5ldC5qbyIsIm9yZy5qbyIsInBlci5qbyIsInBoZC5qbyIsInNj''@;'; put 'put ''aC5qbyIsInR2LmpvIiwiam9icyIsImpwIiwiYWMuanAiLCJhZC5qcCIsImNvLmpwIiwiZWQuanAiLCJnby5qcCIsImdyLmpwIiwibGcuanAiLCJuZS5qcCIsIm9yLmpwIiwiYWljaGkuanAiLCJha2l0YS5qcCIsImFvbW9yaS5qcCIsImNoaWJhLmpwIiwiZWhpbWUuanAiLCJmdWt1aS5qcCIs''@;'; put 'put ''ImZ1a3Vva2EuanAiLCJmdWt1c2hpbWEuanAiLCJnaWZ1LmpwIiwiZ3VubWEuanAiLCJoaXJvc2hpbWEuanAiLCJob2trYWlkby5qcCIsImh5b2dvLmpwIiwiaWJhcmFraS5qcCIsImlzaGlrYXdhLmpwIiwiaXdhdGUuanAiLCJrYWdhd2EuanAiLCJrYWdvc2hpbWEuanAiLCJrYW5hZ2F3YS5q''@;'; put 'put ''cCIsImtvY2hpLmpwIiwia3VtYW1vdG8uanAiLCJreW90by5qcCIsIm1pZS5qcCIsIm1peWFnaS5qcCIsIm1peWF6YWtpLmpwIiwibmFnYW5vLmpwIiwibmFnYXNha2kuanAiLCJuYXJhLmpwIiwibmlpZ2F0YS5qcCIsIm9pdGEuanAiLCJva2F5YW1hLmpwIiwib2tpbmF3YS5qcCIsIm9zYWth''@;'; put 'put ''LmpwIiwic2FnYS5qcCIsInNhaXRhbWEuanAiLCJzaGlnYS5qcCIsInNoaW1hbmUuanAiLCJzaGl6dW9rYS5qcCIsInRvY2hpZ2kuanAiLCJ0b2t1c2hpbWEuanAiLCJ0b2t5by5qcCIsInRvdHRvcmkuanAiLCJ0b3lhbWEuanAiLCJ3YWtheWFtYS5qcCIsInlhbWFnYXRhLmpwIiwieWFtYWd1''@;'; put 'put ''Y2hpLmpwIiwieWFtYW5hc2hpLmpwIiwiXHU0ZTA5XHU5MWNkLmpwIiwiXHU0ZWFjXHU5MGZkLmpwIiwiXHU0ZjUwXHU4Y2MwLmpwIiwiXHU1MTc1XHU1ZWFiLmpwIiwiXHU1MzE3XHU2ZDc3XHU5MDUzLmpwIiwiXHU1MzQzXHU4NDQ5LmpwIiwiXHU1NDhjXHU2YjRjXHU1YzcxLmpwIiwiXHU1''@;'; put 'put ''N2ZjXHU3Mzg5LmpwIiwiXHU1OTI3XHU1MjA2LmpwIiwiXHU1OTI3XHU5NjJhLmpwIiwiXHU1OTQ4XHU4MjZmLmpwIiwiXHU1YmFlXHU1N2NlLmpwIiwiXHU1YmFlXHU1ZDBlLmpwIiwiXHU1YmNjXHU1YzcxLmpwIiwiXHU1YzcxXHU1M2UzLmpwIiwiXHU1YzcxXHU1ZjYyLmpwIiwiXHU1Yzcx''@;'; put 'put ''XHU2OGE4LmpwIiwiXHU1YzkwXHU5NjFjLmpwIiwiXHU1Y2ExXHU1YzcxLmpwIiwiXHU1Y2E5XHU2MjRiLmpwIiwiXHU1Y2Y2XHU2ODM5LmpwIiwiXHU1ZTgzXHU1Y2Y2LmpwIiwiXHU1ZmIzXHU1Y2Y2LmpwIiwiXHU2MTFiXHU1YTliLmpwIiwiXHU2MTFiXHU3N2U1LmpwIiwiXHU2NWIwXHU2''@;'; put 'put ''ZjVmLmpwIiwiXHU2NzcxXHU0ZWFjLmpwIiwiXHU2ODAzXHU2NzI4LmpwIiwiXHU2Yzk2XHU3ZTA0LmpwIiwiXHU2ZWNiXHU4Y2MwLmpwIiwiXHU3MThhXHU2NzJjLmpwIiwiXHU3N2YzXHU1ZGRkLmpwIiwiXHU3OTVlXHU1OTQ4XHU1ZGRkLmpwIiwiXHU3OThmXHU0ZTk1LmpwIiwiXHU3OThm''@;'; put 'put ''XHU1Y2ExLmpwIiwiXHU3OThmXHU1Y2Y2LmpwIiwiXHU3OWNiXHU3NTMwLmpwIiwiXHU3ZmE0XHU5OWFjLmpwIiwiXHU4MzI4XHU1N2NlLmpwIiwiXHU5NTc3XHU1ZDBlLmpwIiwiXHU5NTc3XHU5MWNlLmpwIiwiXHU5NzUyXHU2OGVlLmpwIiwiXHU5NzU5XHU1Y2ExLmpwIiwiXHU5OTk5XHU1''@;'; put 'put ''ZGRkLmpwIiwiXHU5YWQ4XHU3N2U1LmpwIiwiXHU5Y2U1XHU1M2Q2LmpwIiwiXHU5ZTdmXHU1MTUwXHU1Y2Y2LmpwIiwiKi5rYXdhc2FraS5qcCIsIiFjaXR5Lmthd2FzYWtpLmpwIiwiKi5raXRha3l1c2h1LmpwIiwiIWNpdHkua2l0YWt5dXNodS5qcCIsIioua29iZS5qcCIsIiFjaXR5Lmtv''@;'; put 'put ''YmUuanAiLCIqLm5hZ295YS5qcCIsIiFjaXR5Lm5hZ295YS5qcCIsIiouc2FwcG9yby5qcCIsIiFjaXR5LnNhcHBvcm8uanAiLCIqLnNlbmRhaS5qcCIsIiFjaXR5LnNlbmRhaS5qcCIsIioueW9rb2hhbWEuanAiLCIhY2l0eS55b2tvaGFtYS5qcCIsImFpc2FpLmFpY2hpLmpwIiwiYW1hLmFp''@;'; put 'put ''Y2hpLmpwIiwiYW5qby5haWNoaS5qcCIsImFzdWtlLmFpY2hpLmpwIiwiY2hpcnl1LmFpY2hpLmpwIiwiY2hpdGEuYWljaGkuanAiLCJmdXNvLmFpY2hpLmpwIiwiZ2FtYWdvcmkuYWljaGkuanAiLCJoYW5kYS5haWNoaS5qcCIsImhhenUuYWljaGkuanAiLCJoZWtpbmFuLmFpY2hpLmpwIiwi''@;'; put 'put ''aGlnYXNoaXVyYS5haWNoaS5qcCIsImljaGlub21peWEuYWljaGkuanAiLCJpbmF6YXdhLmFpY2hpLmpwIiwiaW51eWFtYS5haWNoaS5qcCIsImlzc2hpa2kuYWljaGkuanAiLCJpd2FrdXJhLmFpY2hpLmpwIiwia2FuaWUuYWljaGkuanAiLCJrYXJpeWEuYWljaGkuanAiLCJrYXN1Z2FpLmFp''@;'; put 'put ''Y2hpLmpwIiwia2lyYS5haWNoaS5qcCIsImtpeW9zdS5haWNoaS5qcCIsImtvbWFraS5haWNoaS5qcCIsImtvbmFuLmFpY2hpLmpwIiwia290YS5haWNoaS5qcCIsIm1paGFtYS5haWNoaS5qcCIsIm1peW9zaGkuYWljaGkuanAiLCJuaXNoaW8uYWljaGkuanAiLCJuaXNzaGluLmFpY2hpLmpw''@;'; put 'put ''Iiwib2J1LmFpY2hpLmpwIiwib2d1Y2hpLmFpY2hpLmpwIiwib2hhcnUuYWljaGkuanAiLCJva2F6YWtpLmFpY2hpLmpwIiwib3dhcmlhc2FoaS5haWNoaS5qcCIsInNldG8uYWljaGkuanAiLCJzaGlrYXRzdS5haWNoaS5qcCIsInNoaW5zaGlyby5haWNoaS5qcCIsInNoaXRhcmEuYWljaGku''@;'; put 'put ''anAiLCJ0YWhhcmEuYWljaGkuanAiLCJ0YWthaGFtYS5haWNoaS5qcCIsInRvYmlzaGltYS5haWNoaS5qcCIsInRvZWkuYWljaGkuanAiLCJ0b2dvLmFpY2hpLmpwIiwidG9rYWkuYWljaGkuanAiLCJ0b2tvbmFtZS5haWNoaS5qcCIsInRveW9ha2UuYWljaGkuanAiLCJ0b3lvaGFzaGkuYWlj''@;'; put 'put ''aGkuanAiLCJ0b3lva2F3YS5haWNoaS5qcCIsInRveW9uZS5haWNoaS5qcCIsInRveW90YS5haWNoaS5qcCIsInRzdXNoaW1hLmFpY2hpLmpwIiwieWF0b21pLmFpY2hpLmpwIiwiYWtpdGEuYWtpdGEuanAiLCJkYWlzZW4uYWtpdGEuanAiLCJmdWppc2F0by5ha2l0YS5qcCIsImdvam9tZS5h''@;'; put 'put ''a2l0YS5qcCIsImhhY2hpcm9nYXRhLmFraXRhLmpwIiwiaGFwcG91LmFraXRhLmpwIiwiaGlnYXNoaW5hcnVzZS5ha2l0YS5qcCIsImhvbmpvLmFraXRhLmpwIiwiaG9uanlvLmFraXRhLmpwIiwiaWthd2EuYWtpdGEuanAiLCJrYW1pa29hbmkuYWtpdGEuanAiLCJrYW1pb2thLmFraXRhLmpw''@;'; put 'put ''Iiwia2F0YWdhbWkuYWtpdGEuanAiLCJrYXp1bm8uYWtpdGEuanAiLCJraXRhYWtpdGEuYWtpdGEuanAiLCJrb3Nha2EuYWtpdGEuanAiLCJreW93YS5ha2l0YS5qcCIsIm1pc2F0by5ha2l0YS5qcCIsIm1pdGFuZS5ha2l0YS5qcCIsIm1vcml5b3NoaS5ha2l0YS5qcCIsIm5pa2Foby5ha2l0''@;'; put 'put ''YS5qcCIsIm5vc2hpcm8uYWtpdGEuanAiLCJvZGF0ZS5ha2l0YS5qcCIsIm9nYS5ha2l0YS5qcCIsIm9nYXRhLmFraXRhLmpwIiwic2VtYm9rdS5ha2l0YS5qcCIsInlva290ZS5ha2l0YS5qcCIsInl1cmlob25qby5ha2l0YS5qcCIsImFvbW9yaS5hb21vcmkuanAiLCJnb25vaGUuYW9tb3Jp''@;'; put 'put ''LmpwIiwiaGFjaGlub2hlLmFvbW9yaS5qcCIsImhhc2hpa2FtaS5hb21vcmkuanAiLCJoaXJhbmFpLmFvbW9yaS5qcCIsImhpcm9zYWtpLmFvbW9yaS5qcCIsIml0YXlhbmFnaS5hb21vcmkuanAiLCJrdXJvaXNoaS5hb21vcmkuanAiLCJtaXNhd2EuYW9tb3JpLmpwIiwibXV0c3UuYW9tb3Jp''@;'; put 'put ''LmpwIiwibmFrYWRvbWFyaS5hb21vcmkuanAiLCJub2hlamkuYW9tb3JpLmpwIiwib2lyYXNlLmFvbW9yaS5qcCIsIm93YW5pLmFvbW9yaS5qcCIsInJva3Vub2hlLmFvbW9yaS5qcCIsInNhbm5vaGUuYW9tb3JpLmpwIiwic2hpY2hpbm9oZS5hb21vcmkuanAiLCJzaGluZ28uYW9tb3JpLmpw''@;'; put 'put ''IiwidGFra28uYW9tb3JpLmpwIiwidG93YWRhLmFvbW9yaS5qcCIsInRzdWdhcnUuYW9tb3JpLmpwIiwidHN1cnV0YS5hb21vcmkuanAiLCJhYmlrby5jaGliYS5qcCIsImFzYWhpLmNoaWJhLmpwIiwiY2hvbmFuLmNoaWJhLmpwIiwiY2hvc2VpLmNoaWJhLmpwIiwiY2hvc2hpLmNoaWJhLmpw''@;'; put 'put ''IiwiY2h1by5jaGliYS5qcCIsImZ1bmFiYXNoaS5jaGliYS5qcCIsImZ1dHRzdS5jaGliYS5qcCIsImhhbmFtaWdhd2EuY2hpYmEuanAiLCJpY2hpaGFyYS5jaGliYS5qcCIsImljaGlrYXdhLmNoaWJhLmpwIiwiaWNoaW5vbWl5YS5jaGliYS5qcCIsImluemFpLmNoaWJhLmpwIiwiaXN1bWku''@;'; put 'put ''Y2hpYmEuanAiLCJrYW1hZ2F5YS5jaGliYS5qcCIsImthbW9nYXdhLmNoaWJhLmpwIiwia2FzaGl3YS5jaGliYS5qcCIsImthdG9yaS5jaGliYS5qcCIsImthdHN1dXJhLmNoaWJhLmpwIiwia2ltaXRzdS5jaGliYS5qcCIsImtpc2FyYXp1LmNoaWJhLmpwIiwia296YWtpLmNoaWJhLmpwIiwi''@;'; put 'put ''a3VqdWt1cmkuY2hpYmEuanAiLCJreW9uYW4uY2hpYmEuanAiLCJtYXRzdWRvLmNoaWJhLmpwIiwibWlkb3JpLmNoaWJhLmpwIiwibWloYW1hLmNoaWJhLmpwIiwibWluYW1pYm9zby5jaGliYS5qcCIsIm1vYmFyYS5jaGliYS5qcCIsIm11dHN1emF3YS5jaGliYS5qcCIsIm5hZ2FyYS5jaGli''@;'; put 'put ''YS5qcCIsIm5hZ2FyZXlhbWEuY2hpYmEuanAiLCJuYXJhc2hpbm8uY2hpYmEuanAiLCJuYXJpdGEuY2hpYmEuanAiLCJub2RhLmNoaWJhLmpwIiwib2FtaXNoaXJhc2F0by5jaGliYS5qcCIsIm9taWdhd2EuY2hpYmEuanAiLCJvbmp1a3UuY2hpYmEuanAiLCJvdGFraS5jaGliYS5qcCIsInNh''@;'; put 'put ''a2FlLmNoaWJhLmpwIiwic2FrdXJhLmNoaWJhLmpwIiwic2hpbW9mdXNhLmNoaWJhLmpwIiwic2hpcmFrby5jaGliYS5qcCIsInNoaXJvaS5jaGliYS5qcCIsInNoaXN1aS5jaGliYS5qcCIsInNvZGVnYXVyYS5jaGliYS5qcCIsInNvc2EuY2hpYmEuanAiLCJ0YWtvLmNoaWJhLmpwIiwidGF0''@;'; put 'put ''ZXlhbWEuY2hpYmEuanAiLCJ0b2dhbmUuY2hpYmEuanAiLCJ0b2hub3Noby5jaGliYS5qcCIsInRvbWlzYXRvLmNoaWJhLmpwIiwidXJheWFzdS5jaGliYS5qcCIsInlhY2hpbWF0YS5jaGliYS5qcCIsInlhY2hpeW8uY2hpYmEuanAiLCJ5b2thaWNoaWJhLmNoaWJhLmpwIiwieW9rb3NoaWJh''@;'; put 'put ''aGlrYXJpLmNoaWJhLmpwIiwieW90c3VrYWlkby5jaGliYS5qcCIsImFpbmFuLmVoaW1lLmpwIiwiaG9uYWkuZWhpbWUuanAiLCJpa2F0YS5laGltZS5qcCIsImltYWJhcmkuZWhpbWUuanAiLCJpeW8uZWhpbWUuanAiLCJrYW1pamltYS5laGltZS5qcCIsImtpaG9rdS5laGltZS5qcCIsImt1''@;'; put 'put ''bWFrb2dlbi5laGltZS5qcCIsIm1hc2FraS5laGltZS5qcCIsIm1hdHN1bm8uZWhpbWUuanAiLCJtYXRzdXlhbWEuZWhpbWUuanAiLCJuYW1pa2F0YS5laGltZS5qcCIsIm5paWhhbWEuZWhpbWUuanAiLCJvenUuZWhpbWUuanAiLCJzYWlqby5laGltZS5qcCIsInNlaXlvLmVoaW1lLmpwIiwi''@;'; put 'put ''c2hpa29rdWNodW8uZWhpbWUuanAiLCJ0b2JlLmVoaW1lLmpwIiwidG9vbi5laGltZS5qcCIsInVjaGlrby5laGltZS5qcCIsInV3YWppbWEuZWhpbWUuanAiLCJ5YXdhdGFoYW1hLmVoaW1lLmpwIiwiZWNoaXplbi5mdWt1aS5qcCIsImVpaGVpamkuZnVrdWkuanAiLCJmdWt1aS5mdWt1aS5q''@;'; put 'put ''cCIsImlrZWRhLmZ1a3VpLmpwIiwia2F0c3V5YW1hLmZ1a3VpLmpwIiwibWloYW1hLmZ1a3VpLmpwIiwibWluYW1pZWNoaXplbi5mdWt1aS5qcCIsIm9iYW1hLmZ1a3VpLmpwIiwib2hpLmZ1a3VpLmpwIiwib25vLmZ1a3VpLmpwIiwic2FiYWUuZnVrdWkuanAiLCJzYWthaS5mdWt1aS5qcCIs''@;'; put 'put ''InRha2FoYW1hLmZ1a3VpLmpwIiwidHN1cnVnYS5mdWt1aS5qcCIsIndha2FzYS5mdWt1aS5qcCIsImFzaGl5YS5mdWt1b2thLmpwIiwiYnV6ZW4uZnVrdW9rYS5qcCIsImNoaWt1Z28uZnVrdW9rYS5qcCIsImNoaWt1aG8uZnVrdW9rYS5qcCIsImNoaWt1am8uZnVrdW9rYS5qcCIsImNoaWt1''@;'; put 'put ''c2hpbm8uZnVrdW9rYS5qcCIsImNoaWt1emVuLmZ1a3Vva2EuanAiLCJjaHVvLmZ1a3Vva2EuanAiLCJkYXphaWZ1LmZ1a3Vva2EuanAiLCJmdWt1Y2hpLmZ1a3Vva2EuanAiLCJoYWthdGEuZnVrdW9rYS5qcCIsImhpZ2FzaGkuZnVrdW9rYS5qcCIsImhpcm9rYXdhLmZ1a3Vva2EuanAiLCJo''@;'; put 'put ''aXNheWFtYS5mdWt1b2thLmpwIiwiaWl6dWthLmZ1a3Vva2EuanAiLCJpbmF0c3VraS5mdWt1b2thLmpwIiwia2Foby5mdWt1b2thLmpwIiwia2FzdWdhLmZ1a3Vva2EuanAiLCJrYXN1eWEuZnVrdW9rYS5qcCIsImthd2FyYS5mdWt1b2thLmpwIiwia2Vpc2VuLmZ1a3Vva2EuanAiLCJrb2dh''@;'; put 'put ''LmZ1a3Vva2EuanAiLCJrdXJhdGUuZnVrdW9rYS5qcCIsImt1cm9naS5mdWt1b2thLmpwIiwia3VydW1lLmZ1a3Vva2EuanAiLCJtaW5hbWkuZnVrdW9rYS5qcCIsIm1peWFrby5mdWt1b2thLmpwIiwibWl5YW1hLmZ1a3Vva2EuanAiLCJtaXlhd2FrYS5mdWt1b2thLmpwIiwibWl6dW1ha2ku''@;'; put 'put ''ZnVrdW9rYS5qcCIsIm11bmFrYXRhLmZ1a3Vva2EuanAiLCJuYWthZ2F3YS5mdWt1b2thLmpwIiwibmFrYW1hLmZ1a3Vva2EuanAiLCJuaXNoaS5mdWt1b2thLmpwIiwibm9nYXRhLmZ1a3Vva2EuanAiLCJvZ29yaS5mdWt1b2thLmpwIiwib2thZ2FraS5mdWt1b2thLmpwIiwib2thd2EuZnVr''@;'; put 'put ''dW9rYS5qcCIsIm9raS5mdWt1b2thLmpwIiwib211dGEuZnVrdW9rYS5qcCIsIm9uZ2EuZnVrdW9rYS5qcCIsIm9ub2pvLmZ1a3Vva2EuanAiLCJvdG8uZnVrdW9rYS5qcCIsInNhaWdhd2EuZnVrdW9rYS5qcCIsInNhc2FndXJpLmZ1a3Vva2EuanAiLCJzaGluZ3UuZnVrdW9rYS5qcCIsInNo''@;'; put 'put ''aW55b3NoaXRvbWkuZnVrdW9rYS5qcCIsInNob25haS5mdWt1b2thLmpwIiwic29lZGEuZnVrdW9rYS5qcCIsInN1ZS5mdWt1b2thLmpwIiwidGFjaGlhcmFpLmZ1a3Vva2EuanAiLCJ0YWdhd2EuZnVrdW9rYS5qcCIsInRha2F0YS5mdWt1b2thLmpwIiwidG9oby5mdWt1b2thLmpwIiwidG95''@;'; put 'put ''b3RzdS5mdWt1b2thLmpwIiwidHN1aWtpLmZ1a3Vva2EuanAiLCJ1a2loYS5mdWt1b2thLmpwIiwidW1pLmZ1a3Vva2EuanAiLCJ1c3VpLmZ1a3Vva2EuanAiLCJ5YW1hZGEuZnVrdW9rYS5qcCIsInlhbWUuZnVrdW9rYS5qcCIsInlhbmFnYXdhLmZ1a3Vva2EuanAiLCJ5dWt1aGFzaGkuZnVr''@;'; put 'put ''dW9rYS5qcCIsImFpenViYW5nZS5mdWt1c2hpbWEuanAiLCJhaXp1bWlzYXRvLmZ1a3VzaGltYS5qcCIsImFpenV3YWthbWF0c3UuZnVrdXNoaW1hLmpwIiwiYXNha2F3YS5mdWt1c2hpbWEuanAiLCJiYW5kYWkuZnVrdXNoaW1hLmpwIiwiZGF0ZS5mdWt1c2hpbWEuanAiLCJmdWt1c2hpbWEu''@;'; put 'put ''ZnVrdXNoaW1hLmpwIiwiZnVydWRvbm8uZnVrdXNoaW1hLmpwIiwiZnV0YWJhLmZ1a3VzaGltYS5qcCIsImhhbmF3YS5mdWt1c2hpbWEuanAiLCJoaWdhc2hpLmZ1a3VzaGltYS5qcCIsImhpcmF0YS5mdWt1c2hpbWEuanAiLCJoaXJvbm8uZnVrdXNoaW1hLmpwIiwiaWl0YXRlLmZ1a3VzaGlt''@;'; put 'put ''YS5qcCIsImluYXdhc2hpcm8uZnVrdXNoaW1hLmpwIiwiaXNoaWthd2EuZnVrdXNoaW1hLmpwIiwiaXdha2kuZnVrdXNoaW1hLmpwIiwiaXp1bWl6YWtpLmZ1a3VzaGltYS5qcCIsImthZ2FtaWlzaGkuZnVrdXNoaW1hLmpwIiwia2FuZXlhbWEuZnVrdXNoaW1hLmpwIiwia2F3YW1hdGEuZnVr''@;'; put 'put ''dXNoaW1hLmpwIiwia2l0YWthdGEuZnVrdXNoaW1hLmpwIiwia2l0YXNoaW9iYXJhLmZ1a3VzaGltYS5qcCIsImtvb3JpLmZ1a3VzaGltYS5qcCIsImtvcml5YW1hLmZ1a3VzaGltYS5qcCIsImt1bmltaS5mdWt1c2hpbWEuanAiLCJtaWhhcnUuZnVrdXNoaW1hLmpwIiwibWlzaGltYS5mdWt1''@;'; put 'put ''c2hpbWEuanAiLCJuYW1pZS5mdWt1c2hpbWEuanAiLCJuYW5nby5mdWt1c2hpbWEuanAiLCJuaXNoaWFpenUuZnVrdXNoaW1hLmpwIiwibmlzaGlnby5mdWt1c2hpbWEuanAiLCJva3VtYS5mdWt1c2hpbWEuanAiLCJvbW90ZWdvLmZ1a3VzaGltYS5qcCIsIm9uby5mdWt1c2hpbWEuanAiLCJv''@;'; put 'put ''dGFtYS5mdWt1c2hpbWEuanAiLCJzYW1lZ2F3YS5mdWt1c2hpbWEuanAiLCJzaGltb2dvLmZ1a3VzaGltYS5qcCIsInNoaXJha2F3YS5mdWt1c2hpbWEuanAiLCJzaG93YS5mdWt1c2hpbWEuanAiLCJzb21hLmZ1a3VzaGltYS5qcCIsInN1a2FnYXdhLmZ1a3VzaGltYS5qcCIsInRhaXNoaW4u''@;'; put 'put ''ZnVrdXNoaW1hLmpwIiwidGFtYWthd2EuZnVrdXNoaW1hLmpwIiwidGFuYWd1cmEuZnVrdXNoaW1hLmpwIiwidGVuZWkuZnVrdXNoaW1hLmpwIiwieWFidWtpLmZ1a3VzaGltYS5qcCIsInlhbWF0by5mdWt1c2hpbWEuanAiLCJ5YW1hdHN1cmkuZnVrdXNoaW1hLmpwIiwieWFuYWl6dS5mdWt1''@;'; put 'put ''c2hpbWEuanAiLCJ5dWdhd2EuZnVrdXNoaW1hLmpwIiwiYW5wYWNoaS5naWZ1LmpwIiwiZW5hLmdpZnUuanAiLCJnaWZ1LmdpZnUuanAiLCJnaW5hbi5naWZ1LmpwIiwiZ29kby5naWZ1LmpwIiwiZ3Vqby5naWZ1LmpwIiwiaGFzaGltYS5naWZ1LmpwIiwiaGljaGlzby5naWZ1LmpwIiwiaGlk''@;'; put 'put ''YS5naWZ1LmpwIiwiaGlnYXNoaXNoaXJha2F3YS5naWZ1LmpwIiwiaWJpZ2F3YS5naWZ1LmpwIiwiaWtlZGEuZ2lmdS5qcCIsImtha2FtaWdhaGFyYS5naWZ1LmpwIiwia2FuaS5naWZ1LmpwIiwia2FzYWhhcmEuZ2lmdS5qcCIsImthc2FtYXRzdS5naWZ1LmpwIiwia2F3YXVlLmdpZnUuanAi''@;'; put 'put ''LCJraXRhZ2F0YS5naWZ1LmpwIiwibWluby5naWZ1LmpwIiwibWlub2thbW8uZ2lmdS5qcCIsIm1pdGFrZS5naWZ1LmpwIiwibWl6dW5hbWkuZ2lmdS5qcCIsIm1vdG9zdS5naWZ1LmpwIiwibmFrYXRzdWdhd2EuZ2lmdS5qcCIsIm9nYWtpLmdpZnUuanAiLCJzYWthaG9naS5naWZ1LmpwIiwi''@;'; put 'put ''c2VraS5naWZ1LmpwIiwic2VraWdhaGFyYS5naWZ1LmpwIiwic2hpcmFrYXdhLmdpZnUuanAiLCJ0YWppbWkuZ2lmdS5qcCIsInRha2F5YW1hLmdpZnUuanAiLCJ0YXJ1aS5naWZ1LmpwIiwidG9raS5naWZ1LmpwIiwidG9taWthLmdpZnUuanAiLCJ3YW5vdWNoaS5naWZ1LmpwIiwieWFtYWdh''@;'; put 'put ''dGEuZ2lmdS5qcCIsInlhb3RzdS5naWZ1LmpwIiwieW9yby5naWZ1LmpwIiwiYW5uYWthLmd1bm1hLmpwIiwiY2hpeW9kYS5ndW5tYS5qcCIsImZ1amlva2EuZ3VubWEuanAiLCJoaWdhc2hpYWdhdHN1bWEuZ3VubWEuanAiLCJpc2VzYWtpLmd1bm1hLmpwIiwiaXRha3VyYS5ndW5tYS5qcCIs''@;'; put 'put ''Imthbm5hLmd1bm1hLmpwIiwia2FucmEuZ3VubWEuanAiLCJrYXRhc2hpbmEuZ3VubWEuanAiLCJrYXdhYmEuZ3VubWEuanAiLCJraXJ5dS5ndW5tYS5qcCIsImt1c2F0c3UuZ3VubWEuanAiLCJtYWViYXNoaS5ndW5tYS5qcCIsIm1laXdhLmd1bm1hLmpwIiwibWlkb3JpLmd1bm1hLmpwIiwi''@;'; put 'put ''bWluYWthbWkuZ3VubWEuanAiLCJuYWdhbm9oYXJhLmd1bm1hLmpwIiwibmFrYW5vam8uZ3VubWEuanAiLCJuYW5tb2t1Lmd1bm1hLmpwIiwibnVtYXRhLmd1bm1hLmpwIiwib2l6dW1pLmd1bm1hLmpwIiwib3JhLmd1bm1hLmpwIiwib3RhLmd1bm1hLmpwIiwic2hpYnVrYXdhLmd1bm1hLmpw''@;'; put 'put ''Iiwic2hpbW9uaXRhLmd1bm1hLmpwIiwic2hpbnRvLmd1bm1hLmpwIiwic2hvd2EuZ3VubWEuanAiLCJ0YWthc2FraS5ndW5tYS5qcCIsInRha2F5YW1hLmd1bm1hLmpwIiwidGFtYW11cmEuZ3VubWEuanAiLCJ0YXRlYmF5YXNoaS5ndW5tYS5qcCIsInRvbWlva2EuZ3VubWEuanAiLCJ0c3Vr''@;'; put 'put ''aXlvbm8uZ3VubWEuanAiLCJ0c3VtYWdvaS5ndW5tYS5qcCIsInVlbm8uZ3VubWEuanAiLCJ5b3NoaW9rYS5ndW5tYS5qcCIsImFzYW1pbmFtaS5oaXJvc2hpbWEuanAiLCJkYWl3YS5oaXJvc2hpbWEuanAiLCJldGFqaW1hLmhpcm9zaGltYS5qcCIsImZ1Y2h1Lmhpcm9zaGltYS5qcCIsImZ1''@;'; put 'put ''a3V5YW1hLmhpcm9zaGltYS5qcCIsImhhdHN1a2FpY2hpLmhpcm9zaGltYS5qcCIsImhpZ2FzaGloaXJvc2hpbWEuaGlyb3NoaW1hLmpwIiwiaG9uZ28uaGlyb3NoaW1hLmpwIiwiamluc2VraWtvZ2VuLmhpcm9zaGltYS5qcCIsImthaXRhLmhpcm9zaGltYS5qcCIsImt1aS5oaXJvc2hpbWEu''@;'; put 'put ''anAiLCJrdW1hbm8uaGlyb3NoaW1hLmpwIiwia3VyZS5oaXJvc2hpbWEuanAiLCJtaWhhcmEuaGlyb3NoaW1hLmpwIiwibWl5b3NoaS5oaXJvc2hpbWEuanAiLCJuYWthLmhpcm9zaGltYS5qcCIsIm9ub21pY2hpLmhpcm9zaGltYS5qcCIsIm9zYWtpa2FtaWppbWEuaGlyb3NoaW1hLmpwIiwi''@;'; put 'put ''b3Rha2UuaGlyb3NoaW1hLmpwIiwic2FrYS5oaXJvc2hpbWEuanAiLCJzZXJhLmhpcm9zaGltYS5qcCIsInNlcmFuaXNoaS5oaXJvc2hpbWEuanAiLCJzaGluaWNoaS5oaXJvc2hpbWEuanAiLCJzaG9iYXJhLmhpcm9zaGltYS5qcCIsInRha2VoYXJhLmhpcm9zaGltYS5qcCIsImFiYXNoaXJp''@;'; put 'put ''Lmhva2thaWRvLmpwIiwiYWJpcmEuaG9ra2FpZG8uanAiLCJhaWJldHN1Lmhva2thaWRvLmpwIiwiYWthYmlyYS5ob2trYWlkby5qcCIsImFra2VzaGkuaG9ra2FpZG8uanAiLCJhc2FoaWthd2EuaG9ra2FpZG8uanAiLCJhc2hpYmV0c3UuaG9ra2FpZG8uanAiLCJhc2hvcm8uaG9ra2FpZG8u''@;'; put 'put ''anAiLCJhc3NhYnUuaG9ra2FpZG8uanAiLCJhdHN1bWEuaG9ra2FpZG8uanAiLCJiaWJhaS5ob2trYWlkby5qcCIsImJpZWkuaG9ra2FpZG8uanAiLCJiaWZ1a2EuaG9ra2FpZG8uanAiLCJiaWhvcm8uaG9ra2FpZG8uanAiLCJiaXJhdG9yaS5ob2trYWlkby5qcCIsImNoaXBwdWJldHN1Lmhv''@;'; put 'put ''a2thaWRvLmpwIiwiY2hpdG9zZS5ob2trYWlkby5qcCIsImRhdGUuaG9ra2FpZG8uanAiLCJlYmV0c3UuaG9ra2FpZG8uanAiLCJlbWJldHN1Lmhva2thaWRvLmpwIiwiZW5pd2EuaG9ra2FpZG8uanAiLCJlcmltby5ob2trYWlkby5qcCIsImVzYW4uaG9ra2FpZG8uanAiLCJlc2FzaGkuaG9r''@;'; put 'put ''a2FpZG8uanAiLCJmdWthZ2F3YS5ob2trYWlkby5qcCIsImZ1a3VzaGltYS5ob2trYWlkby5qcCIsImZ1cmFuby5ob2trYWlkby5qcCIsImZ1cnViaXJhLmhva2thaWRvLmpwIiwiaGFib3JvLmhva2thaWRvLmpwIiwiaGFrb2RhdGUuaG9ra2FpZG8uanAiLCJoYW1hdG9uYmV0c3UuaG9ra2Fp''@;'; put 'put ''ZG8uanAiLCJoaWRha2EuaG9ra2FpZG8uanAiLCJoaWdhc2hpa2FndXJhLmhva2thaWRvLmpwIiwiaGlnYXNoaWthd2EuaG9ra2FpZG8uanAiLCJoaXJvby5ob2trYWlkby5qcCIsImhva3VyeXUuaG9ra2FpZG8uanAiLCJob2t1dG8uaG9ra2FpZG8uanAiLCJob25iZXRzdS5ob2trYWlkby5q''@;'; put 'put ''cCIsImhvcm9rYW5haS5ob2trYWlkby5qcCIsImhvcm9ub2JlLmhva2thaWRvLmpwIiwiaWtlZGEuaG9ra2FpZG8uanAiLCJpbWFrYW5lLmhva2thaWRvLmpwIiwiaXNoaWthcmkuaG9ra2FpZG8uanAiLCJpd2FtaXphd2EuaG9ra2FpZG8uanAiLCJpd2FuYWkuaG9ra2FpZG8uanAiLCJrYW1p''@;'; put 'put ''ZnVyYW5vLmhva2thaWRvLmpwIiwia2FtaWthd2EuaG9ra2FpZG8uanAiLCJrYW1pc2hpaG9yby5ob2trYWlkby5qcCIsImthbWlzdW5hZ2F3YS5ob2trYWlkby5qcCIsImthbW9lbmFpLmhva2thaWRvLmpwIiwia2F5YWJlLmhva2thaWRvLmpwIiwia2VtYnVjaGkuaG9ra2FpZG8uanAiLCJr''@;'; put 'put ''aWtvbmFpLmhva2thaWRvLmpwIiwia2ltb2JldHN1Lmhva2thaWRvLmpwIiwia2l0YWhpcm9zaGltYS5ob2trYWlkby5qcCIsImtpdGFtaS5ob2trYWlkby5qcCIsImtpeW9zYXRvLmhva2thaWRvLmpwIiwia29zaGltaXp1Lmhva2thaWRvLmpwIiwia3VubmVwcHUuaG9ra2FpZG8uanAiLCJr''@;'; put 'put ''dXJpeWFtYS5ob2trYWlkby5qcCIsImt1cm9tYXRzdW5haS5ob2trYWlkby5qcCIsImt1c2hpcm8uaG9ra2FpZG8uanAiLCJrdXRjaGFuLmhva2thaWRvLmpwIiwia3lvd2EuaG9ra2FpZG8uanAiLCJtYXNoaWtlLmhva2thaWRvLmpwIiwibWF0c3VtYWUuaG9ra2FpZG8uanAiLCJtaWthc2Eu''@;'; put 'put ''aG9ra2FpZG8uanAiLCJtaW5hbWlmdXJhbm8uaG9ra2FpZG8uanAiLCJtb21iZXRzdS5ob2trYWlkby5qcCIsIm1vc2V1c2hpLmhva2thaWRvLmpwIiwibXVrYXdhLmhva2thaWRvLmpwIiwibXVyb3Jhbi5ob2trYWlkby5qcCIsIm5haWUuaG9ra2FpZG8uanAiLCJuYWthZ2F3YS5ob2trYWlk''@;'; put 'put ''by5qcCIsIm5ha2FzYXRzdW5haS5ob2trYWlkby5qcCIsIm5ha2F0b21iZXRzdS5ob2trYWlkby5qcCIsIm5hbmFlLmhva2thaWRvLmpwIiwibmFucG9yby5ob2trYWlkby5qcCIsIm5heW9yby5ob2trYWlkby5qcCIsIm5lbXVyby5ob2trYWlkby5qcCIsIm5paWthcHB1Lmhva2thaWRvLmpw''@;'; put 'put ''IiwibmlraS5ob2trYWlkby5qcCIsIm5pc2hpb2tvcHBlLmhva2thaWRvLmpwIiwibm9ib3JpYmV0c3UuaG9ra2FpZG8uanAiLCJudW1hdGEuaG9ra2FpZG8uanAiLCJvYmloaXJvLmhva2thaWRvLmpwIiwib2JpcmEuaG9ra2FpZG8uanAiLCJva2V0by5ob2trYWlkby5qcCIsIm9rb3BwZS5o''@;'; put 'put ''b2trYWlkby5qcCIsIm90YXJ1Lmhva2thaWRvLmpwIiwib3RvYmUuaG9ra2FpZG8uanAiLCJvdG9mdWtlLmhva2thaWRvLmpwIiwib3RvaW5lcHB1Lmhva2thaWRvLmpwIiwib3VtdS5ob2trYWlkby5qcCIsIm96b3JhLmhva2thaWRvLmpwIiwicGlwcHUuaG9ra2FpZG8uanAiLCJyYW5rb3No''@;'; put 'put ''aS5ob2trYWlkby5qcCIsInJlYnVuLmhva2thaWRvLmpwIiwicmlrdWJldHN1Lmhva2thaWRvLmpwIiwicmlzaGlyaS5ob2trYWlkby5qcCIsInJpc2hpcmlmdWppLmhva2thaWRvLmpwIiwic2Fyb21hLmhva2thaWRvLmpwIiwic2FydWZ1dHN1Lmhva2thaWRvLmpwIiwic2hha290YW4uaG9r''@;'; put 'put ''a2FpZG8uanAiLCJzaGFyaS5ob2trYWlkby5qcCIsInNoaWJlY2hhLmhva2thaWRvLmpwIiwic2hpYmV0c3UuaG9ra2FpZG8uanAiLCJzaGlrYWJlLmhva2thaWRvLmpwIiwic2hpa2FvaS5ob2trYWlkby5qcCIsInNoaW1hbWFraS5ob2trYWlkby5qcCIsInNoaW1penUuaG9ra2FpZG8uanAi''@;'; put 'put ''LCJzaGltb2thd2EuaG9ra2FpZG8uanAiLCJzaGluc2hpbm90c3UuaG9ra2FpZG8uanAiLCJzaGludG9rdS5ob2trYWlkby5qcCIsInNoaXJhbnVrYS5ob2trYWlkby5qcCIsInNoaXJhb2kuaG9ra2FpZG8uanAiLCJzaGlyaXVjaGkuaG9ra2FpZG8uanAiLCJzb2JldHN1Lmhva2thaWRvLmpw''@;'; put 'put ''Iiwic3VuYWdhd2EuaG9ra2FpZG8uanAiLCJ0YWlraS5ob2trYWlkby5qcCIsInRha2FzdS5ob2trYWlkby5qcCIsInRha2lrYXdhLmhva2thaWRvLmpwIiwidGFraW5vdWUuaG9ra2FpZG8uanAiLCJ0ZXNoaWthZ2EuaG9ra2FpZG8uanAiLCJ0b2JldHN1Lmhva2thaWRvLmpwIiwidG9obWEu''@;'; put 'put ''aG9ra2FpZG8uanAiLCJ0b21ha29tYWkuaG9ra2FpZG8uanAiLCJ0b21hcmkuaG9ra2FpZG8uanAiLCJ0b3lhLmhva2thaWRvLmpwIiwidG95YWtvLmhva2thaWRvLmpwIiwidG95b3RvbWkuaG9ra2FpZG8uanAiLCJ0b3lvdXJhLmhva2thaWRvLmpwIiwidHN1YmV0c3UuaG9ra2FpZG8uanAi''@;'; put 'put ''LCJ0c3VraWdhdGEuaG9ra2FpZG8uanAiLCJ1cmFrYXdhLmhva2thaWRvLmpwIiwidXJhdXN1Lmhva2thaWRvLmpwIiwidXJ5dS5ob2trYWlkby5qcCIsInV0YXNoaW5haS5ob2trYWlkby5qcCIsIndha2thbmFpLmhva2thaWRvLmpwIiwid2Fzc2FtdS5ob2trYWlkby5qcCIsInlha3Vtby5o''@;'; put 'put ''b2trYWlkby5qcCIsInlvaWNoaS5ob2trYWlkby5qcCIsImFpb2kuaHlvZ28uanAiLCJha2FzaGkuaHlvZ28uanAiLCJha28uaHlvZ28uanAiLCJhbWFnYXNha2kuaHlvZ28uanAiLCJhb2dha2kuaHlvZ28uanAiLCJhc2Fnby5oeW9nby5qcCIsImFzaGl5YS5oeW9nby5qcCIsImF3YWppLmh5''@;'; put 'put ''b2dvLmpwIiwiZnVrdXNha2kuaHlvZ28uanAiLCJnb3NoaWtpLmh5b2dvLmpwIiwiaGFyaW1hLmh5b2dvLmpwIiwiaGltZWppLmh5b2dvLmpwIiwiaWNoaWthd2EuaHlvZ28uanAiLCJpbmFnYXdhLmh5b2dvLmpwIiwiaXRhbWkuaHlvZ28uanAiLCJrYWtvZ2F3YS5oeW9nby5qcCIsImthbWln''@;'; put 'put ''b3JpLmh5b2dvLmpwIiwia2FtaWthd2EuaHlvZ28uanAiLCJrYXNhaS5oeW9nby5qcCIsImthc3VnYS5oeW9nby5qcCIsImthd2FuaXNoaS5oeW9nby5qcCIsIm1pa2kuaHlvZ28uanAiLCJtaW5hbWlhd2FqaS5oeW9nby5qcCIsIm5pc2hpbm9taXlhLmh5b2dvLmpwIiwibmlzaGl3YWtpLmh5''@;'; put 'put ''b2dvLmpwIiwib25vLmh5b2dvLmpwIiwic2FuZGEuaHlvZ28uanAiLCJzYW5uYW4uaHlvZ28uanAiLCJzYXNheWFtYS5oeW9nby5qcCIsInNheW8uaHlvZ28uanAiLCJzaGluZ3UuaHlvZ28uanAiLCJzaGlub25zZW4uaHlvZ28uanAiLCJzaGlzby5oeW9nby5qcCIsInN1bW90by5oeW9nby5q''@;'; put 'put ''cCIsInRhaXNoaS5oeW9nby5qcCIsInRha2EuaHlvZ28uanAiLCJ0YWthcmF6dWthLmh5b2dvLmpwIiwidGFrYXNhZ28uaHlvZ28uanAiLCJ0YWtpbm8uaHlvZ28uanAiLCJ0YW1iYS5oeW9nby5qcCIsInRhdHN1bm8uaHlvZ28uanAiLCJ0b3lvb2thLmh5b2dvLmpwIiwieWFidS5oeW9nby5q''@;'; put 'put ''cCIsInlhc2hpcm8uaHlvZ28uanAiLCJ5b2thLmh5b2dvLmpwIiwieW9rYXdhLmh5b2dvLmpwIiwiYW1pLmliYXJha2kuanAiLCJhc2FoaS5pYmFyYWtpLmpwIiwiYmFuZG8uaWJhcmFraS5qcCIsImNoaWt1c2VpLmliYXJha2kuanAiLCJkYWlnby5pYmFyYWtpLmpwIiwiZnVqaXNoaXJvLmli''@;'; put 'put ''YXJha2kuanAiLCJoaXRhY2hpLmliYXJha2kuanAiLCJoaXRhY2hpbmFrYS5pYmFyYWtpLmpwIiwiaGl0YWNoaW9taXlhLmliYXJha2kuanAiLCJoaXRhY2hpb3RhLmliYXJha2kuanAiLCJpYmFyYWtpLmliYXJha2kuanAiLCJpbmEuaWJhcmFraS5qcCIsImluYXNoaWtpLmliYXJha2kuanAi''@;'; put 'put ''LCJpdGFrby5pYmFyYWtpLmpwIiwiaXdhbWEuaWJhcmFraS5qcCIsImpvc28uaWJhcmFraS5qcCIsImthbWlzdS5pYmFyYWtpLmpwIiwia2FzYW1hLmliYXJha2kuanAiLCJrYXNoaW1hLmliYXJha2kuanAiLCJrYXN1bWlnYXVyYS5pYmFyYWtpLmpwIiwia29nYS5pYmFyYWtpLmpwIiwibWlo''@;'; put 'put ''by5pYmFyYWtpLmpwIiwibWl0by5pYmFyYWtpLmpwIiwibW9yaXlhLmliYXJha2kuanAiLCJuYWthLmliYXJha2kuanAiLCJuYW1lZ2F0YS5pYmFyYWtpLmpwIiwib2FyYWkuaWJhcmFraS5qcCIsIm9nYXdhLmliYXJha2kuanAiLCJvbWl0YW1hLmliYXJha2kuanAiLCJyeXVnYXNha2kuaWJh''@;'; put 'put ''cmFraS5qcCIsInNha2FpLmliYXJha2kuanAiLCJzYWt1cmFnYXdhLmliYXJha2kuanAiLCJzaGltb2RhdGUuaWJhcmFraS5qcCIsInNoaW1vdHN1bWEuaWJhcmFraS5qcCIsInNoaXJvc2F0by5pYmFyYWtpLmpwIiwic293YS5pYmFyYWtpLmpwIiwic3VpZnUuaWJhcmFraS5qcCIsInRha2Fo''@;'; put 'put ''YWdpLmliYXJha2kuanAiLCJ0YW1hdHN1a3VyaS5pYmFyYWtpLmpwIiwidG9rYWkuaWJhcmFraS5qcCIsInRvbW9iZS5pYmFyYWtpLmpwIiwidG9uZS5pYmFyYWtpLmpwIiwidG9yaWRlLmliYXJha2kuanAiLCJ0c3VjaGl1cmEuaWJhcmFraS5qcCIsInRzdWt1YmEuaWJhcmFraS5qcCIsInVj''@;'; put 'put ''aGloYXJhLmliYXJha2kuanAiLCJ1c2hpa3UuaWJhcmFraS5qcCIsInlhY2hpeW8uaWJhcmFraS5qcCIsInlhbWFnYXRhLmliYXJha2kuanAiLCJ5YXdhcmEuaWJhcmFraS5qcCIsInl1a2kuaWJhcmFraS5qcCIsImFuYW1penUuaXNoaWthd2EuanAiLCJoYWt1aS5pc2hpa2F3YS5qcCIsImhh''@;'; put 'put ''a3VzYW4uaXNoaWthd2EuanAiLCJrYWdhLmlzaGlrYXdhLmpwIiwia2Fob2t1LmlzaGlrYXdhLmpwIiwia2FuYXphd2EuaXNoaWthd2EuanAiLCJrYXdha2l0YS5pc2hpa2F3YS5qcCIsImtvbWF0c3UuaXNoaWthd2EuanAiLCJuYWthbm90by5pc2hpa2F3YS5qcCIsIm5hbmFvLmlzaGlrYXdh''@;'; put 'put ''LmpwIiwibm9taS5pc2hpa2F3YS5qcCIsIm5vbm9pY2hpLmlzaGlrYXdhLmpwIiwibm90by5pc2hpa2F3YS5qcCIsInNoaWthLmlzaGlrYXdhLmpwIiwic3V6dS5pc2hpa2F3YS5qcCIsInRzdWJhdGEuaXNoaWthd2EuanAiLCJ0c3VydWdpLmlzaGlrYXdhLmpwIiwidWNoaW5hZGEuaXNoaWth''@;'; put 'put ''d2EuanAiLCJ3YWppbWEuaXNoaWthd2EuanAiLCJmdWRhaS5pd2F0ZS5qcCIsImZ1amlzYXdhLml3YXRlLmpwIiwiaGFuYW1ha2kuaXdhdGUuanAiLCJoaXJhaXp1bWkuaXdhdGUuanAiLCJoaXJvbm8uaXdhdGUuanAiLCJpY2hpbm9oZS5pd2F0ZS5qcCIsImljaGlub3Nla2kuaXdhdGUuanAi''@;'; put 'put ''LCJpd2FpenVtaS5pd2F0ZS5qcCIsIml3YXRlLml3YXRlLmpwIiwiam9ib2ppLml3YXRlLmpwIiwia2FtYWlzaGkuaXdhdGUuanAiLCJrYW5lZ2FzYWtpLml3YXRlLmpwIiwia2FydW1haS5pd2F0ZS5qcCIsImthd2FpLml3YXRlLmpwIiwia2l0YWthbWkuaXdhdGUuanAiLCJrdWppLml3YXRl''@;'; put 'put ''LmpwIiwia3Vub2hlLml3YXRlLmpwIiwia3V6dW1ha2kuaXdhdGUuanAiLCJtaXlha28uaXdhdGUuanAiLCJtaXp1c2F3YS5pd2F0ZS5qcCIsIm1vcmlva2EuaXdhdGUuanAiLCJuaW5vaGUuaXdhdGUuanAiLCJub2RhLml3YXRlLmpwIiwib2Z1bmF0by5pd2F0ZS5qcCIsIm9zaHUuaXdhdGUu''@;'; put 'put ''anAiLCJvdHN1Y2hpLml3YXRlLmpwIiwicmlrdXplbnRha2F0YS5pd2F0ZS5qcCIsInNoaXdhLml3YXRlLmpwIiwic2hpenVrdWlzaGkuaXdhdGUuanAiLCJzdW1pdGEuaXdhdGUuanAiLCJ0YW5vaGF0YS5pd2F0ZS5qcCIsInRvbm8uaXdhdGUuanAiLCJ5YWhhYmEuaXdhdGUuanAiLCJ5YW1h''@;'; put 'put ''ZGEuaXdhdGUuanAiLCJheWFnYXdhLmthZ2F3YS5qcCIsImhpZ2FzaGlrYWdhd2Eua2FnYXdhLmpwIiwia2Fub25qaS5rYWdhd2EuanAiLCJrb3RvaGlyYS5rYWdhd2EuanAiLCJtYW5uby5rYWdhd2EuanAiLCJtYXJ1Z2FtZS5rYWdhd2EuanAiLCJtaXRveW8ua2FnYXdhLmpwIiwibmFvc2hp''@;'; put 'put ''bWEua2FnYXdhLmpwIiwic2FudWtpLmthZ2F3YS5qcCIsInRhZG90c3Uua2FnYXdhLmpwIiwidGFrYW1hdHN1LmthZ2F3YS5qcCIsInRvbm9zaG8ua2FnYXdhLmpwIiwidWNoaW5vbWkua2FnYXdhLmpwIiwidXRhenUua2FnYXdhLmpwIiwiemVudHN1amkua2FnYXdhLmpwIiwiYWt1bmUua2Fn''@;'; put 'put ''b3NoaW1hLmpwIiwiYW1hbWkua2Fnb3NoaW1hLmpwIiwiaGlva2kua2Fnb3NoaW1hLmpwIiwiaXNhLmthZ29zaGltYS5qcCIsImlzZW4ua2Fnb3NoaW1hLmpwIiwiaXp1bWkua2Fnb3NoaW1hLmpwIiwia2Fnb3NoaW1hLmthZ29zaGltYS5qcCIsImthbm95YS5rYWdvc2hpbWEuanAiLCJrYXdh''@;'; put 'put ''bmFiZS5rYWdvc2hpbWEuanAiLCJraW5rby5rYWdvc2hpbWEuanAiLCJrb3V5YW1hLmthZ29zaGltYS5qcCIsIm1ha3VyYXpha2kua2Fnb3NoaW1hLmpwIiwibWF0c3Vtb3RvLmthZ29zaGltYS5qcCIsIm1pbmFtaXRhbmUua2Fnb3NoaW1hLmpwIiwibmFrYXRhbmUua2Fnb3NoaW1hLmpwIiwi''@;'; put 'put ''bmlzaGlub29tb3RlLmthZ29zaGltYS5qcCIsInNhdHN1bWFzZW5kYWkua2Fnb3NoaW1hLmpwIiwic29vLmthZ29zaGltYS5qcCIsInRhcnVtaXp1LmthZ29zaGltYS5qcCIsInl1c3VpLmthZ29zaGltYS5qcCIsImFpa2F3YS5rYW5hZ2F3YS5qcCIsImF0c3VnaS5rYW5hZ2F3YS5qcCIsImF5''@;'; put 'put ''YXNlLmthbmFnYXdhLmpwIiwiY2hpZ2FzYWtpLmthbmFnYXdhLmpwIiwiZWJpbmEua2FuYWdhd2EuanAiLCJmdWppc2F3YS5rYW5hZ2F3YS5qcCIsImhhZGFuby5rYW5hZ2F3YS5qcCIsImhha29uZS5rYW5hZ2F3YS5qcCIsImhpcmF0c3VrYS5rYW5hZ2F3YS5qcCIsImlzZWhhcmEua2FuYWdh''@;'; put 'put ''d2EuanAiLCJrYWlzZWkua2FuYWdhd2EuanAiLCJrYW1ha3VyYS5rYW5hZ2F3YS5qcCIsImtpeW9rYXdhLmthbmFnYXdhLmpwIiwibWF0c3VkYS5rYW5hZ2F3YS5qcCIsIm1pbmFtaWFzaGlnYXJhLmthbmFnYXdhLmpwIiwibWl1cmEua2FuYWdhd2EuanAiLCJuYWthaS5rYW5hZ2F3YS5qcCIs''@;'; put 'put ''Im5pbm9taXlhLmthbmFnYXdhLmpwIiwib2Rhd2FyYS5rYW5hZ2F3YS5qcCIsIm9pLmthbmFnYXdhLmpwIiwib2lzby5rYW5hZ2F3YS5qcCIsInNhZ2FtaWhhcmEua2FuYWdhd2EuanAiLCJzYW11a2F3YS5rYW5hZ2F3YS5qcCIsInRzdWt1aS5rYW5hZ2F3YS5qcCIsInlhbWFraXRhLmthbmFn''@;'; put 'put ''YXdhLmpwIiwieWFtYXRvLmthbmFnYXdhLmpwIiwieW9rb3N1a2Eua2FuYWdhd2EuanAiLCJ5dWdhd2FyYS5rYW5hZ2F3YS5qcCIsInphbWEua2FuYWdhd2EuanAiLCJ6dXNoaS5rYW5hZ2F3YS5qcCIsImFraS5rb2NoaS5qcCIsImdlaXNlaS5rb2NoaS5qcCIsImhpZGFrYS5rb2NoaS5qcCIs''@;'; put 'put ''ImhpZ2FzaGl0c3Vuby5rb2NoaS5qcCIsImluby5rb2NoaS5qcCIsImthZ2FtaS5rb2NoaS5qcCIsImthbWkua29jaGkuanAiLCJraXRhZ2F3YS5rb2NoaS5qcCIsImtvY2hpLmtvY2hpLmpwIiwibWloYXJhLmtvY2hpLmpwIiwibW90b3lhbWEua29jaGkuanAiLCJtdXJvdG8ua29jaGkuanAi''@;'; put 'put ''LCJuYWhhcmkua29jaGkuanAiLCJuYWthbXVyYS5rb2NoaS5qcCIsIm5hbmtva3Uua29jaGkuanAiLCJuaXNoaXRvc2Eua29jaGkuanAiLCJuaXlvZG9nYXdhLmtvY2hpLmpwIiwib2NoaS5rb2NoaS5qcCIsIm9rYXdhLmtvY2hpLmpwIiwib3RveW8ua29jaGkuanAiLCJvdHN1a2kua29jaGku''@;'; put 'put ''anAiLCJzYWthd2Eua29jaGkuanAiLCJzdWt1bW8ua29jaGkuanAiLCJzdXNha2kua29jaGkuanAiLCJ0b3NhLmtvY2hpLmpwIiwidG9zYXNoaW1penUua29jaGkuanAiLCJ0b3lvLmtvY2hpLmpwIiwidHN1bm8ua29jaGkuanAiLCJ1bWFqaS5rb2NoaS5qcCIsInlhc3VkYS5rb2NoaS5qcCIs''@;'; put 'put ''Inl1c3VoYXJhLmtvY2hpLmpwIiwiYW1ha3VzYS5rdW1hbW90by5qcCIsImFyYW8ua3VtYW1vdG8uanAiLCJhc28ua3VtYW1vdG8uanAiLCJjaG95by5rdW1hbW90by5qcCIsImd5b2t1dG8ua3VtYW1vdG8uanAiLCJrYW1pYW1ha3VzYS5rdW1hbW90by5qcCIsImtpa3VjaGkua3VtYW1vdG8u''@;'; put 'put ''anAiLCJrdW1hbW90by5rdW1hbW90by5qcCIsIm1hc2hpa2kua3VtYW1vdG8uanAiLCJtaWZ1bmUua3VtYW1vdG8uanAiLCJtaW5hbWF0YS5rdW1hbW90by5qcCIsIm1pbmFtaW9ndW5pLmt1bWFtb3RvLmpwIiwibmFnYXN1Lmt1bWFtb3RvLmpwIiwibmlzaGloYXJhLmt1bWFtb3RvLmpwIiwi''@;'; put 'put ''b2d1bmkua3VtYW1vdG8uanAiLCJvenUua3VtYW1vdG8uanAiLCJzdW1vdG8ua3VtYW1vdG8uanAiLCJ0YWthbW9yaS5rdW1hbW90by5qcCIsInVraS5rdW1hbW90by5qcCIsInV0by5rdW1hbW90by5qcCIsInlhbWFnYS5rdW1hbW90by5qcCIsInlhbWF0by5rdW1hbW90by5qcCIsInlhdHN1''@;'; put 'put ''c2hpcm8ua3VtYW1vdG8uanAiLCJheWFiZS5reW90by5qcCIsImZ1a3VjaGl5YW1hLmt5b3RvLmpwIiwiaGlnYXNoaXlhbWEua3lvdG8uanAiLCJpZGUua3lvdG8uanAiLCJpbmUua3lvdG8uanAiLCJqb3lvLmt5b3RvLmpwIiwia2FtZW9rYS5reW90by5qcCIsImthbW8ua3lvdG8uanAiLCJr''@;'; put 'put ''aXRhLmt5b3RvLmpwIiwia2l6dS5reW90by5qcCIsImt1bWl5YW1hLmt5b3RvLmpwIiwia3lvdGFtYmEua3lvdG8uanAiLCJreW90YW5hYmUua3lvdG8uanAiLCJreW90YW5nby5reW90by5qcCIsIm1haXp1cnUua3lvdG8uanAiLCJtaW5hbWkua3lvdG8uanAiLCJtaW5hbWl5YW1hc2hpcm8u''@;'; put 'put ''a3lvdG8uanAiLCJtaXlhenUua3lvdG8uanAiLCJtdWtvLmt5b3RvLmpwIiwibmFnYW9rYWt5by5reW90by5qcCIsIm5ha2FneW8ua3lvdG8uanAiLCJuYW50YW4ua3lvdG8uanAiLCJveWFtYXpha2kua3lvdG8uanAiLCJzYWt5by5reW90by5qcCIsInNlaWthLmt5b3RvLmpwIiwidGFuYWJl''@;'; put 'put ''Lmt5b3RvLmpwIiwidWppLmt5b3RvLmpwIiwidWppdGF3YXJhLmt5b3RvLmpwIiwid2F6dWthLmt5b3RvLmpwIiwieWFtYXNoaW5hLmt5b3RvLmpwIiwieWF3YXRhLmt5b3RvLmpwIiwiYXNhaGkubWllLmpwIiwiaW5hYmUubWllLmpwIiwiaXNlLm1pZS5qcCIsImthbWV5YW1hLm1pZS5qcCIs''@;'; put 'put ''Imthd2Fnb2UubWllLmpwIiwia2loby5taWUuanAiLCJraXNvc2FraS5taWUuanAiLCJraXdhLm1pZS5qcCIsImtvbW9uby5taWUuanAiLCJrdW1hbm8ubWllLmpwIiwia3V3YW5hLm1pZS5qcCIsIm1hdHN1c2FrYS5taWUuanAiLCJtZWl3YS5taWUuanAiLCJtaWhhbWEubWllLmpwIiwibWlu''@;'; put 'put ''YW1paXNlLm1pZS5qcCIsIm1pc3VnaS5taWUuanAiLCJtaXlhbWEubWllLmpwIiwibmFiYXJpLm1pZS5qcCIsInNoaW1hLm1pZS5qcCIsInN1enVrYS5taWUuanAiLCJ0YWRvLm1pZS5qcCIsInRhaWtpLm1pZS5qcCIsInRha2kubWllLmpwIiwidGFtYWtpLm1pZS5qcCIsInRvYmEubWllLmpw''@;'; put 'put ''IiwidHN1Lm1pZS5qcCIsInVkb25vLm1pZS5qcCIsInVyZXNoaW5vLm1pZS5qcCIsIndhdGFyYWkubWllLmpwIiwieW9ra2FpY2hpLm1pZS5qcCIsImZ1cnVrYXdhLm1peWFnaS5qcCIsImhpZ2FzaGltYXRzdXNoaW1hLm1peWFnaS5qcCIsImlzaGlub21ha2kubWl5YWdpLmpwIiwiaXdhbnVt''@;'; put 'put ''YS5taXlhZ2kuanAiLCJrYWt1ZGEubWl5YWdpLmpwIiwia2FtaS5taXlhZ2kuanAiLCJrYXdhc2FraS5taXlhZ2kuanAiLCJtYXJ1bW9yaS5taXlhZ2kuanAiLCJtYXRzdXNoaW1hLm1peWFnaS5qcCIsIm1pbmFtaXNhbnJpa3UubWl5YWdpLmpwIiwibWlzYXRvLm1peWFnaS5qcCIsIm11cmF0''@;'; put 'put ''YS5taXlhZ2kuanAiLCJuYXRvcmkubWl5YWdpLmpwIiwib2dhd2FyYS5taXlhZ2kuanAiLCJvaGlyYS5taXlhZ2kuanAiLCJvbmFnYXdhLm1peWFnaS5qcCIsIm9zYWtpLm1peWFnaS5qcCIsInJpZnUubWl5YWdpLmpwIiwic2VtaW5lLm1peWFnaS5qcCIsInNoaWJhdGEubWl5YWdpLmpwIiwi''@;'; put 'put ''c2hpY2hpa2FzaHVrdS5taXlhZ2kuanAiLCJzaGlrYW1hLm1peWFnaS5qcCIsInNoaW9nYW1hLm1peWFnaS5qcCIsInNoaXJvaXNoaS5taXlhZ2kuanAiLCJ0YWdham8ubWl5YWdpLmpwIiwidGFpd2EubWl5YWdpLmpwIiwidG9tZS5taXlhZ2kuanAiLCJ0b21peWEubWl5YWdpLmpwIiwid2Fr''@;'; put 'put ''dXlhLm1peWFnaS5qcCIsIndhdGFyaS5taXlhZ2kuanAiLCJ5YW1hbW90by5taXlhZ2kuanAiLCJ6YW8ubWl5YWdpLmpwIiwiYXlhLm1peWF6YWtpLmpwIiwiZWJpbm8ubWl5YXpha2kuanAiLCJnb2thc2UubWl5YXpha2kuanAiLCJoeXVnYS5taXlhemFraS5qcCIsImthZG9nYXdhLm1peWF6''@;'; put 'put ''YWtpLmpwIiwia2F3YW1pbmFtaS5taXlhemFraS5qcCIsImtpam8ubWl5YXpha2kuanAiLCJraXRhZ2F3YS5taXlhemFraS5qcCIsImtpdGFrYXRhLm1peWF6YWtpLmpwIiwia2l0YXVyYS5taXlhemFraS5qcCIsImtvYmF5YXNoaS5taXlhemFraS5qcCIsImt1bml0b21pLm1peWF6YWtpLmpw''@;'; put 'put ''Iiwia3VzaGltYS5taXlhemFraS5qcCIsIm1pbWF0YS5taXlhemFraS5qcCIsIm1peWFrb25vam8ubWl5YXpha2kuanAiLCJtaXlhemFraS5taXlhemFraS5qcCIsIm1vcm90c3VrYS5taXlhemFraS5qcCIsIm5pY2hpbmFuLm1peWF6YWtpLmpwIiwibmlzaGltZXJhLm1peWF6YWtpLmpwIiwi''@;'; put 'put ''bm9iZW9rYS5taXlhemFraS5qcCIsInNhaXRvLm1peWF6YWtpLmpwIiwic2hpaWJhLm1peWF6YWtpLmpwIiwic2hpbnRvbWkubWl5YXpha2kuanAiLCJ0YWthaGFydS5taXlhemFraS5qcCIsInRha2FuYWJlLm1peWF6YWtpLmpwIiwidGFrYXpha2kubWl5YXpha2kuanAiLCJ0c3Vuby5taXlh''@;'; put 'put ''emFraS5qcCIsImFjaGkubmFnYW5vLmpwIiwiYWdlbWF0c3UubmFnYW5vLmpwIiwiYW5hbi5uYWdhbm8uanAiLCJhb2tpLm5hZ2Fuby5qcCIsImFzYWhpLm5hZ2Fuby5qcCIsImF6dW1pbm8ubmFnYW5vLmpwIiwiY2hpa3Vob2t1Lm5hZ2Fuby5qcCIsImNoaWt1bWEubmFnYW5vLmpwIiwiY2hp''@;'; put 'put ''bm8ubmFnYW5vLmpwIiwiZnVqaW1pLm5hZ2Fuby5qcCIsImhha3ViYS5uYWdhbm8uanAiLCJoYXJhLm5hZ2Fuby5qcCIsImhpcmF5YS5uYWdhbm8uanAiLCJpaWRhLm5hZ2Fuby5qcCIsImlpamltYS5uYWdhbm8uanAiLCJpaXlhbWEubmFnYW5vLmpwIiwiaWl6dW5hLm5hZ2Fuby5qcCIsImlr''@;'; put 'put ''ZWRhLm5hZ2Fuby5qcCIsImlrdXNha2EubmFnYW5vLmpwIiwiaW5hLm5hZ2Fuby5qcCIsImthcnVpemF3YS5uYWdhbm8uanAiLCJrYXdha2FtaS5uYWdhbm8uanAiLCJraXNvLm5hZ2Fuby5qcCIsImtpc29mdWt1c2hpbWEubmFnYW5vLmpwIiwia2l0YWFpa2kubmFnYW5vLmpwIiwia29tYWdh''@;'; put 'put ''bmUubmFnYW5vLmpwIiwia29tb3JvLm5hZ2Fuby5qcCIsIm1hdHN1a2F3YS5uYWdhbm8uanAiLCJtYXRzdW1vdG8ubmFnYW5vLmpwIiwibWlhc2EubmFnYW5vLmpwIiwibWluYW1pYWlraS5uYWdhbm8uanAiLCJtaW5hbWltYWtpLm5hZ2Fuby5qcCIsIm1pbmFtaW1pbm93YS5uYWdhbm8uanAi''@;'; put 'put ''LCJtaW5vd2EubmFnYW5vLmpwIiwibWl5YWRhLm5hZ2Fuby5qcCIsIm1peW90YS5uYWdhbm8uanAiLCJtb2NoaXp1a2kubmFnYW5vLmpwIiwibmFnYW5vLm5hZ2Fuby5qcCIsIm5hZ2F3YS5uYWdhbm8uanAiLCJuYWdpc28ubmFnYW5vLmpwIiwibmFrYWdhd2EubmFnYW5vLmpwIiwibmFrYW5v''@;'; put 'put ''Lm5hZ2Fuby5qcCIsIm5vemF3YW9uc2VuLm5hZ2Fuby5qcCIsIm9idXNlLm5hZ2Fuby5qcCIsIm9nYXdhLm5hZ2Fuby5qcCIsIm9rYXlhLm5hZ2Fuby5qcCIsIm9tYWNoaS5uYWdhbm8uanAiLCJvbWkubmFnYW5vLmpwIiwib29rdXdhLm5hZ2Fuby5qcCIsIm9vc2hpa2EubmFnYW5vLmpwIiwi''@;'; put 'put ''b3Rha2kubmFnYW5vLmpwIiwib3RhcmkubmFnYW5vLmpwIiwic2FrYWUubmFnYW5vLmpwIiwic2FrYWtpLm5hZ2Fuby5qcCIsInNha3UubmFnYW5vLmpwIiwic2FrdWhvLm5hZ2Fuby5qcCIsInNoaW1vc3V3YS5uYWdhbm8uanAiLCJzaGluYW5vbWFjaGkubmFnYW5vLmpwIiwic2hpb2ppcmku''@;'; put 'put ''bmFnYW5vLmpwIiwic3V3YS5uYWdhbm8uanAiLCJzdXpha2EubmFnYW5vLmpwIiwidGFrYWdpLm5hZ2Fuby5qcCIsInRha2Ftb3JpLm5hZ2Fuby5qcCIsInRha2F5YW1hLm5hZ2Fuby5qcCIsInRhdGVzaGluYS5uYWdhbm8uanAiLCJ0YXRzdW5vLm5hZ2Fuby5qcCIsInRvZ2FrdXNoaS5uYWdh''@;'; put 'put ''bm8uanAiLCJ0b2d1cmEubmFnYW5vLmpwIiwidG9taS5uYWdhbm8uanAiLCJ1ZWRhLm5hZ2Fuby5qcCIsIndhZGEubmFnYW5vLmpwIiwieWFtYWdhdGEubmFnYW5vLmpwIiwieWFtYW5vdWNoaS5uYWdhbm8uanAiLCJ5YXNha2EubmFnYW5vLmpwIiwieWFzdW9rYS5uYWdhbm8uanAiLCJjaGlq''@;'; put 'put ''aXdhLm5hZ2FzYWtpLmpwIiwiZnV0c3UubmFnYXNha2kuanAiLCJnb3RvLm5hZ2FzYWtpLmpwIiwiaGFzYW1pLm5hZ2FzYWtpLmpwIiwiaGlyYWRvLm5hZ2FzYWtpLmpwIiwiaWtpLm5hZ2FzYWtpLmpwIiwiaXNhaGF5YS5uYWdhc2FraS5qcCIsImthd2F0YW5hLm5hZ2FzYWtpLmpwIiwia3Vj''@;'; put 'put ''aGlub3RzdS5uYWdhc2FraS5qcCIsIm1hdHN1dXJhLm5hZ2FzYWtpLmpwIiwibmFnYXNha2kubmFnYXNha2kuanAiLCJvYmFtYS5uYWdhc2FraS5qcCIsIm9tdXJhLm5hZ2FzYWtpLmpwIiwib3NldG8ubmFnYXNha2kuanAiLCJzYWlrYWkubmFnYXNha2kuanAiLCJzYXNlYm8ubmFnYXNha2ku''@;'; put 'put ''anAiLCJzZWloaS5uYWdhc2FraS5qcCIsInNoaW1hYmFyYS5uYWdhc2FraS5qcCIsInNoaW5rYW1pZ290by5uYWdhc2FraS5qcCIsInRvZ2l0c3UubmFnYXNha2kuanAiLCJ0c3VzaGltYS5uYWdhc2FraS5qcCIsInVuemVuLm5hZ2FzYWtpLmpwIiwiYW5kby5uYXJhLmpwIiwiZ29zZS5uYXJh''@;'; put 'put ''LmpwIiwiaGVndXJpLm5hcmEuanAiLCJoaWdhc2hpeW9zaGluby5uYXJhLmpwIiwiaWthcnVnYS5uYXJhLmpwIiwiaWtvbWEubmFyYS5qcCIsImthbWlraXRheWFtYS5uYXJhLmpwIiwia2FubWFraS5uYXJhLmpwIiwia2FzaGliYS5uYXJhLmpwIiwia2FzaGloYXJhLm5hcmEuanAiLCJrYXRz''@;'; put 'put ''dXJhZ2kubmFyYS5qcCIsImthd2FpLm5hcmEuanAiLCJrYXdha2FtaS5uYXJhLmpwIiwia2F3YW5pc2hpLm5hcmEuanAiLCJrb3J5by5uYXJhLmpwIiwia3Vyb3Rha2kubmFyYS5qcCIsIm1pdHN1ZS5uYXJhLmpwIiwibWl5YWtlLm5hcmEuanAiLCJuYXJhLm5hcmEuanAiLCJub3NlZ2F3YS5u''@;'; put 'put ''YXJhLmpwIiwib2ppLm5hcmEuanAiLCJvdWRhLm5hcmEuanAiLCJveW9kby5uYXJhLmpwIiwic2FrdXJhaS5uYXJhLmpwIiwic2FuZ28ubmFyYS5qcCIsInNoaW1vaWNoaS5uYXJhLmpwIiwic2hpbW9raXRheWFtYS5uYXJhLmpwIiwic2hpbmpvLm5hcmEuanAiLCJzb25pLm5hcmEuanAiLCJ0''@;'; put 'put ''YWthdG9yaS5uYXJhLmpwIiwidGF3YXJhbW90by5uYXJhLmpwIiwidGVua2F3YS5uYXJhLmpwIiwidGVucmkubmFyYS5qcCIsInVkYS5uYXJhLmpwIiwieWFtYXRva29yaXlhbWEubmFyYS5qcCIsInlhbWF0b3Rha2FkYS5uYXJhLmpwIiwieWFtYXpvZS5uYXJhLmpwIiwieW9zaGluby5uYXJh''@;'; put 'put ''LmpwIiwiYWdhLm5paWdhdGEuanAiLCJhZ2Fuby5uaWlnYXRhLmpwIiwiZ29zZW4ubmlpZ2F0YS5qcCIsIml0b2lnYXdhLm5paWdhdGEuanAiLCJpenVtb3pha2kubmlpZ2F0YS5qcCIsImpvZXRzdS5uaWlnYXRhLmpwIiwia2Ftby5uaWlnYXRhLmpwIiwia2FyaXdhLm5paWdhdGEuanAiLCJr''@;'; put 'put ''YXNoaXdhemFraS5uaWlnYXRhLmpwIiwibWluYW1pdW9udW1hLm5paWdhdGEuanAiLCJtaXRzdWtlLm5paWdhdGEuanAiLCJtdWlrYS5uaWlnYXRhLmpwIiwibXVyYWthbWkubmlpZ2F0YS5qcCIsIm15b2tvLm5paWdhdGEuanAiLCJuYWdhb2thLm5paWdhdGEuanAiLCJuaWlnYXRhLm5paWdh''@;'; put 'put ''dGEuanAiLCJvaml5YS5uaWlnYXRhLmpwIiwib21pLm5paWdhdGEuanAiLCJzYWRvLm5paWdhdGEuanAiLCJzYW5qby5uaWlnYXRhLmpwIiwic2Vpcm8ubmlpZ2F0YS5qcCIsInNlaXJvdS5uaWlnYXRhLmpwIiwic2VraWthd2EubmlpZ2F0YS5qcCIsInNoaWJhdGEubmlpZ2F0YS5qcCIsInRh''@;'; put 'put ''Z2FtaS5uaWlnYXRhLmpwIiwidGFpbmFpLm5paWdhdGEuanAiLCJ0b2NoaW8ubmlpZ2F0YS5qcCIsInRva2FtYWNoaS5uaWlnYXRhLmpwIiwidHN1YmFtZS5uaWlnYXRhLmpwIiwidHN1bmFuLm5paWdhdGEuanAiLCJ1b251bWEubmlpZ2F0YS5qcCIsInlhaGlrby5uaWlnYXRhLmpwIiwieW9p''@;'; put 'put ''dGEubmlpZ2F0YS5qcCIsInl1emF3YS5uaWlnYXRhLmpwIiwiYmVwcHUub2l0YS5qcCIsImJ1bmdvb25vLm9pdGEuanAiLCJidW5nb3Rha2FkYS5vaXRhLmpwIiwiaGFzYW1hLm9pdGEuanAiLCJoaWppLm9pdGEuanAiLCJoaW1lc2hpbWEub2l0YS5qcCIsImhpdGEub2l0YS5qcCIsImthbWl0''@;'; put 'put ''c3VlLm9pdGEuanAiLCJrb2tvbm9lLm9pdGEuanAiLCJrdWp1Lm9pdGEuanAiLCJrdW5pc2FraS5vaXRhLmpwIiwia3VzdS5vaXRhLmpwIiwib2l0YS5vaXRhLmpwIiwic2Fpa2kub2l0YS5qcCIsInRha2V0YS5vaXRhLmpwIiwidHN1a3VtaS5vaXRhLmpwIiwidXNhLm9pdGEuanAiLCJ1c3Vr''@;'; put 'put ''aS5vaXRhLmpwIiwieXVmdS5vaXRhLmpwIiwiYWthaXdhLm9rYXlhbWEuanAiLCJhc2FrdWNoaS5va2F5YW1hLmpwIiwiYml6ZW4ub2theWFtYS5qcCIsImhheWFzaGltYS5va2F5YW1hLmpwIiwiaWJhcmEub2theWFtYS5qcCIsImthZ2FtaW5vLm9rYXlhbWEuanAiLCJrYXNhb2thLm9rYXlh''@;'; put 'put ''bWEuanAiLCJraWJpY2h1by5va2F5YW1hLmpwIiwia3VtZW5hbi5va2F5YW1hLmpwIiwia3VyYXNoaWtpLm9rYXlhbWEuanAiLCJtYW5pd2Eub2theWFtYS5qcCIsIm1pc2FraS5va2F5YW1hLmpwIiwibmFnaS5va2F5YW1hLmpwIiwibmlpbWkub2theWFtYS5qcCIsIm5pc2hpYXdha3VyYS5v''@;'; put 'put ''a2F5YW1hLmpwIiwib2theWFtYS5va2F5YW1hLmpwIiwic2F0b3Noby5va2F5YW1hLmpwIiwic2V0b3VjaGkub2theWFtYS5qcCIsInNoaW5qby5va2F5YW1hLmpwIiwic2hvby5va2F5YW1hLmpwIiwic29qYS5va2F5YW1hLmpwIiwidGFrYWhhc2hpLm9rYXlhbWEuanAiLCJ0YW1hbm8ub2th''@;'; put 'put ''eWFtYS5qcCIsInRzdXlhbWEub2theWFtYS5qcCIsIndha2Uub2theWFtYS5qcCIsInlha2FnZS5va2F5YW1hLmpwIiwiYWd1bmkub2tpbmF3YS5qcCIsImdpbm93YW4ub2tpbmF3YS5qcCIsImdpbm96YS5va2luYXdhLmpwIiwiZ3VzaGlrYW1pLm9raW5hd2EuanAiLCJoYWViYXJ1Lm9raW5h''@;'; put 'put ''d2EuanAiLCJoaWdhc2hpLm9raW5hd2EuanAiLCJoaXJhcmEub2tpbmF3YS5qcCIsImloZXlhLm9raW5hd2EuanAiLCJpc2hpZ2FraS5va2luYXdhLmpwIiwiaXNoaWthd2Eub2tpbmF3YS5qcCIsIml0b21hbi5va2luYXdhLmpwIiwiaXplbmEub2tpbmF3YS5qcCIsImthZGVuYS5va2luYXdh''@;'; put 'put ''LmpwIiwia2luLm9raW5hd2EuanAiLCJraXRhZGFpdG8ub2tpbmF3YS5qcCIsImtpdGFuYWthZ3VzdWt1Lm9raW5hd2EuanAiLCJrdW1lamltYS5va2luYXdhLmpwIiwia3VuaWdhbWkub2tpbmF3YS5qcCIsIm1pbmFtaWRhaXRvLm9raW5hd2EuanAiLCJtb3RvYnUub2tpbmF3YS5qcCIsIm5h''@;'; put 'put ''Z28ub2tpbmF3YS5qcCIsIm5haGEub2tpbmF3YS5qcCIsIm5ha2FndXN1a3Uub2tpbmF3YS5qcCIsIm5ha2lqaW4ub2tpbmF3YS5qcCIsIm5hbmpvLm9raW5hd2EuanAiLCJuaXNoaWhhcmEub2tpbmF3YS5qcCIsIm9naW1pLm9raW5hd2EuanAiLCJva2luYXdhLm9raW5hd2EuanAiLCJvbm5h''@;'; put 'put ''Lm9raW5hd2EuanAiLCJzaGltb2ppLm9raW5hd2EuanAiLCJ0YWtldG9taS5va2luYXdhLmpwIiwidGFyYW1hLm9raW5hd2EuanAiLCJ0b2thc2hpa2kub2tpbmF3YS5qcCIsInRvbWlndXN1a3Uub2tpbmF3YS5qcCIsInRvbmFraS5va2luYXdhLmpwIiwidXJhc29lLm9raW5hd2EuanAiLCJ1''@;'; put 'put ''cnVtYS5va2luYXdhLmpwIiwieWFlc2Uub2tpbmF3YS5qcCIsInlvbWl0YW4ub2tpbmF3YS5qcCIsInlvbmFiYXJ1Lm9raW5hd2EuanAiLCJ5b25hZ3VuaS5va2luYXdhLmpwIiwiemFtYW1pLm9raW5hd2EuanAiLCJhYmVuby5vc2FrYS5qcCIsImNoaWhheWFha2FzYWthLm9zYWthLmpwIiwi''@;'; put 'put ''Y2h1by5vc2FrYS5qcCIsImRhaXRvLm9zYWthLmpwIiwiZnVqaWlkZXJhLm9zYWthLmpwIiwiaGFiaWtpbm8ub3Nha2EuanAiLCJoYW5uYW4ub3Nha2EuanAiLCJoaWdhc2hpb3Nha2Eub3Nha2EuanAiLCJoaWdhc2hpc3VtaXlvc2hpLm9zYWthLmpwIiwiaGlnYXNoaXlvZG9nYXdhLm9zYWth''@;'; put 'put ''LmpwIiwiaGlyYWthdGEub3Nha2EuanAiLCJpYmFyYWtpLm9zYWthLmpwIiwiaWtlZGEub3Nha2EuanAiLCJpenVtaS5vc2FrYS5qcCIsIml6dW1pb3RzdS5vc2FrYS5qcCIsIml6dW1pc2Fuby5vc2FrYS5qcCIsImthZG9tYS5vc2FrYS5qcCIsImthaXp1a2Eub3Nha2EuanAiLCJrYW5hbi5v''@;'; put 'put ''c2FrYS5qcCIsImthc2hpd2FyYS5vc2FrYS5qcCIsImthdGFuby5vc2FrYS5qcCIsImthd2FjaGluYWdhbm8ub3Nha2EuanAiLCJraXNoaXdhZGEub3Nha2EuanAiLCJraXRhLm9zYWthLmpwIiwia3VtYXRvcmkub3Nha2EuanAiLCJtYXRzdWJhcmEub3Nha2EuanAiLCJtaW5hdG8ub3Nha2Eu''@;'; put 'put ''anAiLCJtaW5vaC5vc2FrYS5qcCIsIm1pc2FraS5vc2FrYS5qcCIsIm1vcmlndWNoaS5vc2FrYS5qcCIsIm5leWFnYXdhLm9zYWthLmpwIiwibmlzaGkub3Nha2EuanAiLCJub3NlLm9zYWthLmpwIiwib3Nha2FzYXlhbWEub3Nha2EuanAiLCJzYWthaS5vc2FrYS5qcCIsInNheWFtYS5vc2Fr''@;'; put 'put ''YS5qcCIsInNlbm5hbi5vc2FrYS5qcCIsInNldHRzdS5vc2FrYS5qcCIsInNoaWpvbmF3YXRlLm9zYWthLmpwIiwic2hpbWFtb3RvLm9zYWthLmpwIiwic3VpdGEub3Nha2EuanAiLCJ0YWRhb2thLm9zYWthLmpwIiwidGFpc2hpLm9zYWthLmpwIiwidGFqaXJpLm9zYWthLmpwIiwidGFrYWlz''@;'; put 'put ''aGkub3Nha2EuanAiLCJ0YWthdHN1a2kub3Nha2EuanAiLCJ0b25kYWJheWFzaGkub3Nha2EuanAiLCJ0b3lvbmFrYS5vc2FrYS5qcCIsInRveW9uby5vc2FrYS5qcCIsInlhby5vc2FrYS5qcCIsImFyaWFrZS5zYWdhLmpwIiwiYXJpdGEuc2FnYS5qcCIsImZ1a3Vkb21pLnNhZ2EuanAiLCJn''@;'; put 'put ''ZW5rYWkuc2FnYS5qcCIsImhhbWF0YW1hLnNhZ2EuanAiLCJoaXplbi5zYWdhLmpwIiwiaW1hcmkuc2FnYS5qcCIsImthbWltaW5lLnNhZ2EuanAiLCJrYW56YWtpLnNhZ2EuanAiLCJrYXJhdHN1LnNhZ2EuanAiLCJrYXNoaW1hLnNhZ2EuanAiLCJraXRhZ2F0YS5zYWdhLmpwIiwia2l0YWhh''@;'; put 'put ''dGEuc2FnYS5qcCIsImtpeWFtYS5zYWdhLmpwIiwia291aG9rdS5zYWdhLmpwIiwia3l1cmFnaS5zYWdhLmpwIiwibmlzaGlhcml0YS5zYWdhLmpwIiwib2dpLnNhZ2EuanAiLCJvbWFjaGkuc2FnYS5qcCIsIm91Y2hpLnNhZ2EuanAiLCJzYWdhLnNhZ2EuanAiLCJzaGlyb2lzaGkuc2FnYS5q''@;'; put 'put ''cCIsInRha3Uuc2FnYS5qcCIsInRhcmEuc2FnYS5qcCIsInRvc3Uuc2FnYS5qcCIsInlvc2hpbm9nYXJpLnNhZ2EuanAiLCJhcmFrYXdhLnNhaXRhbWEuanAiLCJhc2FrYS5zYWl0YW1hLmpwIiwiY2hpY2hpYnUuc2FpdGFtYS5qcCIsImZ1amltaS5zYWl0YW1hLmpwIiwiZnVqaW1pbm8uc2Fp''@;'; put 'put ''dGFtYS5qcCIsImZ1a2F5YS5zYWl0YW1hLmpwIiwiaGFubm8uc2FpdGFtYS5qcCIsImhhbnl1LnNhaXRhbWEuanAiLCJoYXN1ZGEuc2FpdGFtYS5qcCIsImhhdG9nYXlhLnNhaXRhbWEuanAiLCJoYXRveWFtYS5zYWl0YW1hLmpwIiwiaGlkYWthLnNhaXRhbWEuanAiLCJoaWdhc2hpY2hpY2hp''@;'; put 'put ''YnUuc2FpdGFtYS5qcCIsImhpZ2FzaGltYXRzdXlhbWEuc2FpdGFtYS5qcCIsImhvbmpvLnNhaXRhbWEuanAiLCJpbmEuc2FpdGFtYS5qcCIsImlydW1hLnNhaXRhbWEuanAiLCJpd2F0c3VraS5zYWl0YW1hLmpwIiwia2FtaWl6dW1pLnNhaXRhbWEuanAiLCJrYW1pa2F3YS5zYWl0YW1hLmpw''@;'; put 'put ''Iiwia2FtaXNhdG8uc2FpdGFtYS5qcCIsImthc3VrYWJlLnNhaXRhbWEuanAiLCJrYXdhZ29lLnNhaXRhbWEuanAiLCJrYXdhZ3VjaGkuc2FpdGFtYS5qcCIsImthd2FqaW1hLnNhaXRhbWEuanAiLCJrYXpvLnNhaXRhbWEuanAiLCJraXRhbW90by5zYWl0YW1hLmpwIiwia29zaGlnYXlhLnNh''@;'; put 'put ''aXRhbWEuanAiLCJrb3Vub3N1LnNhaXRhbWEuanAiLCJrdWtpLnNhaXRhbWEuanAiLCJrdW1hZ2F5YS5zYWl0YW1hLmpwIiwibWF0c3VidXNoaS5zYWl0YW1hLmpwIiwibWluYW5vLnNhaXRhbWEuanAiLCJtaXNhdG8uc2FpdGFtYS5qcCIsIm1peWFzaGlyby5zYWl0YW1hLmpwIiwibWl5b3No''@;'; put 'put ''aS5zYWl0YW1hLmpwIiwibW9yb3lhbWEuc2FpdGFtYS5qcCIsIm5hZ2F0b3JvLnNhaXRhbWEuanAiLCJuYW1lZ2F3YS5zYWl0YW1hLmpwIiwibmlpemEuc2FpdGFtYS5qcCIsIm9nYW5vLnNhaXRhbWEuanAiLCJvZ2F3YS5zYWl0YW1hLmpwIiwib2dvc2Uuc2FpdGFtYS5qcCIsIm9rZWdhd2Eu''@;'; put 'put ''c2FpdGFtYS5qcCIsIm9taXlhLnNhaXRhbWEuanAiLCJvdGFraS5zYWl0YW1hLmpwIiwicmFuemFuLnNhaXRhbWEuanAiLCJyeW9rYW1pLnNhaXRhbWEuanAiLCJzYWl0YW1hLnNhaXRhbWEuanAiLCJzYWthZG8uc2FpdGFtYS5qcCIsInNhdHRlLnNhaXRhbWEuanAiLCJzYXlhbWEuc2FpdGFt''@;'; put 'put ''YS5qcCIsInNoaWtpLnNhaXRhbWEuanAiLCJzaGlyYW9rYS5zYWl0YW1hLmpwIiwic29rYS5zYWl0YW1hLmpwIiwic3VnaXRvLnNhaXRhbWEuanAiLCJ0b2RhLnNhaXRhbWEuanAiLCJ0b2tpZ2F3YS5zYWl0YW1hLmpwIiwidG9rb3JvemF3YS5zYWl0YW1hLmpwIiwidHN1cnVnYXNoaW1hLnNh''@;'; put 'put ''aXRhbWEuanAiLCJ1cmF3YS5zYWl0YW1hLmpwIiwid2FyYWJpLnNhaXRhbWEuanAiLCJ5YXNoaW8uc2FpdGFtYS5qcCIsInlva296ZS5zYWl0YW1hLmpwIiwieW9uby5zYWl0YW1hLmpwIiwieW9yaWkuc2FpdGFtYS5qcCIsInlvc2hpZGEuc2FpdGFtYS5qcCIsInlvc2hpa2F3YS5zYWl0YW1h''@;'; put 'put ''LmpwIiwieW9zaGltaS5zYWl0YW1hLmpwIiwiYWlzaG8uc2hpZ2EuanAiLCJnYW1vLnNoaWdhLmpwIiwiaGlnYXNoaW9taS5zaGlnYS5qcCIsImhpa29uZS5zaGlnYS5qcCIsImtva2Euc2hpZ2EuanAiLCJrb25hbi5zaGlnYS5qcCIsImtvc2VpLnNoaWdhLmpwIiwia290by5zaGlnYS5qcCIs''@;'; put 'put ''Imt1c2F0c3Uuc2hpZ2EuanAiLCJtYWliYXJhLnNoaWdhLmpwIiwibW9yaXlhbWEuc2hpZ2EuanAiLCJuYWdhaGFtYS5zaGlnYS5qcCIsIm5pc2hpYXphaS5zaGlnYS5qcCIsIm5vdG9nYXdhLnNoaWdhLmpwIiwib21paGFjaGltYW4uc2hpZ2EuanAiLCJvdHN1LnNoaWdhLmpwIiwicml0dG8u''@;'; put 'put ''c2hpZ2EuanAiLCJyeXVvaC5zaGlnYS5qcCIsInRha2FzaGltYS5zaGlnYS5qcCIsInRha2F0c3VraS5zaGlnYS5qcCIsInRvcmFoaW1lLnNoaWdhLmpwIiwidG95b3NhdG8uc2hpZ2EuanAiLCJ5YXN1LnNoaWdhLmpwIiwiYWthZ2kuc2hpbWFuZS5qcCIsImFtYS5zaGltYW5lLmpwIiwiZ290''@;'; put 'put ''c3Uuc2hpbWFuZS5qcCIsImhhbWFkYS5zaGltYW5lLmpwIiwiaGlnYXNoaWl6dW1vLnNoaW1hbmUuanAiLCJoaWthd2Euc2hpbWFuZS5qcCIsImhpa2ltaS5zaGltYW5lLmpwIiwiaXp1bW8uc2hpbWFuZS5qcCIsImtha2lub2tpLnNoaW1hbmUuanAiLCJtYXN1ZGEuc2hpbWFuZS5qcCIsIm1h''@;'; put 'put ''dHN1ZS5zaGltYW5lLmpwIiwibWlzYXRvLnNoaW1hbmUuanAiLCJuaXNoaW5vc2hpbWEuc2hpbWFuZS5qcCIsIm9oZGEuc2hpbWFuZS5qcCIsIm9raW5vc2hpbWEuc2hpbWFuZS5qcCIsIm9rdWl6dW1vLnNoaW1hbmUuanAiLCJzaGltYW5lLnNoaW1hbmUuanAiLCJ0YW1heXUuc2hpbWFuZS5q''@;'; put 'put ''cCIsInRzdXdhbm8uc2hpbWFuZS5qcCIsInVubmFuLnNoaW1hbmUuanAiLCJ5YWt1bW8uc2hpbWFuZS5qcCIsInlhc3VnaS5zaGltYW5lLmpwIiwieWF0c3VrYS5zaGltYW5lLmpwIiwiYXJhaS5zaGl6dW9rYS5qcCIsImF0YW1pLnNoaXp1b2thLmpwIiwiZnVqaS5zaGl6dW9rYS5qcCIsImZ1''@;'; put 'put ''amllZGEuc2hpenVva2EuanAiLCJmdWppa2F3YS5zaGl6dW9rYS5qcCIsImZ1amlub21peWEuc2hpenVva2EuanAiLCJmdWt1cm9pLnNoaXp1b2thLmpwIiwiZ290ZW1iYS5zaGl6dW9rYS5qcCIsImhhaWJhcmEuc2hpenVva2EuanAiLCJoYW1hbWF0c3Uuc2hpenVva2EuanAiLCJoaWdhc2hp''@;'; put 'put ''aXp1LnNoaXp1b2thLmpwIiwiaXRvLnNoaXp1b2thLmpwIiwiaXdhdGEuc2hpenVva2EuanAiLCJpenUuc2hpenVva2EuanAiLCJpenVub2t1bmkuc2hpenVva2EuanAiLCJrYWtlZ2F3YS5zaGl6dW9rYS5qcCIsImthbm5hbWkuc2hpenVva2EuanAiLCJrYXdhbmVob24uc2hpenVva2EuanAi''@;'; put 'put ''LCJrYXdhenUuc2hpenVva2EuanAiLCJraWt1Z2F3YS5zaGl6dW9rYS5qcCIsImtvc2FpLnNoaXp1b2thLmpwIiwibWFraW5vaGFyYS5zaGl6dW9rYS5qcCIsIm1hdHN1emFraS5zaGl6dW9rYS5qcCIsIm1pbmFtaWl6dS5zaGl6dW9rYS5qcCIsIm1pc2hpbWEuc2hpenVva2EuanAiLCJtb3Jp''@;'; put 'put ''bWFjaGkuc2hpenVva2EuanAiLCJuaXNoaWl6dS5zaGl6dW9rYS5qcCIsIm51bWF6dS5zaGl6dW9rYS5qcCIsIm9tYWV6YWtpLnNoaXp1b2thLmpwIiwic2hpbWFkYS5zaGl6dW9rYS5qcCIsInNoaW1penUuc2hpenVva2EuanAiLCJzaGltb2RhLnNoaXp1b2thLmpwIiwic2hpenVva2Euc2hp''@;'; put 'put ''enVva2EuanAiLCJzdXNvbm8uc2hpenVva2EuanAiLCJ5YWl6dS5zaGl6dW9rYS5qcCIsInlvc2hpZGEuc2hpenVva2EuanAiLCJhc2hpa2FnYS50b2NoaWdpLmpwIiwiYmF0by50b2NoaWdpLmpwIiwiaGFnYS50b2NoaWdpLmpwIiwiaWNoaWthaS50b2NoaWdpLmpwIiwiaXdhZnVuZS50b2No''@;'; put 'put ''aWdpLmpwIiwia2FtaW5va2F3YS50b2NoaWdpLmpwIiwia2FudW1hLnRvY2hpZ2kuanAiLCJrYXJhc3V5YW1hLnRvY2hpZ2kuanAiLCJrdXJvaXNvLnRvY2hpZ2kuanAiLCJtYXNoaWtvLnRvY2hpZ2kuanAiLCJtaWJ1LnRvY2hpZ2kuanAiLCJtb2thLnRvY2hpZ2kuanAiLCJtb3RlZ2kudG9j''@;'; put 'put ''aGlnaS5qcCIsIm5hc3UudG9jaGlnaS5qcCIsIm5hc3VzaGlvYmFyYS50b2NoaWdpLmpwIiwibmlra28udG9jaGlnaS5qcCIsIm5pc2hpa2F0YS50b2NoaWdpLmpwIiwibm9naS50b2NoaWdpLmpwIiwib2hpcmEudG9jaGlnaS5qcCIsIm9odGF3YXJhLnRvY2hpZ2kuanAiLCJveWFtYS50b2No''@;'; put 'put ''aWdpLmpwIiwic2FrdXJhLnRvY2hpZ2kuanAiLCJzYW5vLnRvY2hpZ2kuanAiLCJzaGltb3RzdWtlLnRvY2hpZ2kuanAiLCJzaGlveWEudG9jaGlnaS5qcCIsInRha2FuZXphd2EudG9jaGlnaS5qcCIsInRvY2hpZ2kudG9jaGlnaS5qcCIsInRzdWdhLnRvY2hpZ2kuanAiLCJ1amlpZS50b2No''@;'; put 'put ''aWdpLmpwIiwidXRzdW5vbWl5YS50b2NoaWdpLmpwIiwieWFpdGEudG9jaGlnaS5qcCIsImFpenVtaS50b2t1c2hpbWEuanAiLCJhbmFuLnRva3VzaGltYS5qcCIsImljaGliYS50b2t1c2hpbWEuanAiLCJpdGFuby50b2t1c2hpbWEuanAiLCJrYWluYW4udG9rdXNoaW1hLmpwIiwia29tYXRz''@;'; put 'put ''dXNoaW1hLnRva3VzaGltYS5qcCIsIm1hdHN1c2hpZ2UudG9rdXNoaW1hLmpwIiwibWltYS50b2t1c2hpbWEuanAiLCJtaW5hbWkudG9rdXNoaW1hLmpwIiwibWl5b3NoaS50b2t1c2hpbWEuanAiLCJtdWdpLnRva3VzaGltYS5qcCIsIm5ha2FnYXdhLnRva3VzaGltYS5qcCIsIm5hcnV0by50''@;'; put 'put ''b2t1c2hpbWEuanAiLCJzYW5hZ29jaGkudG9rdXNoaW1hLmpwIiwic2hpc2hpa3VpLnRva3VzaGltYS5qcCIsInRva3VzaGltYS50b2t1c2hpbWEuanAiLCJ3YWppa2kudG9rdXNoaW1hLmpwIiwiYWRhY2hpLnRva3lvLmpwIiwiYWtpcnVuby50b2t5by5qcCIsImFraXNoaW1hLnRva3lvLmpw''@;'; put 'put ''IiwiYW9nYXNoaW1hLnRva3lvLmpwIiwiYXJha2F3YS50b2t5by5qcCIsImJ1bmt5by50b2t5by5qcCIsImNoaXlvZGEudG9reW8uanAiLCJjaG9mdS50b2t5by5qcCIsImNodW8udG9reW8uanAiLCJlZG9nYXdhLnRva3lvLmpwIiwiZnVjaHUudG9reW8uanAiLCJmdXNzYS50b2t5by5qcCIs''@;'; put 'put ''ImhhY2hpam8udG9reW8uanAiLCJoYWNoaW9qaS50b2t5by5qcCIsImhhbXVyYS50b2t5by5qcCIsImhpZ2FzaGlrdXJ1bWUudG9reW8uanAiLCJoaWdhc2hpbXVyYXlhbWEudG9reW8uanAiLCJoaWdhc2hpeWFtYXRvLnRva3lvLmpwIiwiaGluby50b2t5by5qcCIsImhpbm9kZS50b2t5by5q''@;'; put 'put ''cCIsImhpbm9oYXJhLnRva3lvLmpwIiwiaW5hZ2kudG9reW8uanAiLCJpdGFiYXNoaS50b2t5by5qcCIsImthdHN1c2hpa2EudG9reW8uanAiLCJraXRhLnRva3lvLmpwIiwia2l5b3NlLnRva3lvLmpwIiwia29kYWlyYS50b2t5by5qcCIsImtvZ2FuZWkudG9reW8uanAiLCJrb2t1YnVuamku''@;'; put 'put ''dG9reW8uanAiLCJrb21hZS50b2t5by5qcCIsImtvdG8udG9reW8uanAiLCJrb3V6dXNoaW1hLnRva3lvLmpwIiwia3VuaXRhY2hpLnRva3lvLmpwIiwibWFjaGlkYS50b2t5by5qcCIsIm1lZ3Vyby50b2t5by5qcCIsIm1pbmF0by50b2t5by5qcCIsIm1pdGFrYS50b2t5by5qcCIsIm1penVo''@;'; put 'put ''by50b2t5by5qcCIsIm11c2FzaGltdXJheWFtYS50b2t5by5qcCIsIm11c2FzaGluby50b2t5by5qcCIsIm5ha2Fuby50b2t5by5qcCIsIm5lcmltYS50b2t5by5qcCIsIm9nYXNhd2FyYS50b2t5by5qcCIsIm9rdXRhbWEudG9reW8uanAiLCJvbWUudG9reW8uanAiLCJvc2hpbWEudG9reW8u''@;'; put 'put ''anAiLCJvdGEudG9reW8uanAiLCJzZXRhZ2F5YS50b2t5by5qcCIsInNoaWJ1eWEudG9reW8uanAiLCJzaGluYWdhd2EudG9reW8uanAiLCJzaGluanVrdS50b2t5by5qcCIsInN1Z2luYW1pLnRva3lvLmpwIiwic3VtaWRhLnRva3lvLmpwIiwidGFjaGlrYXdhLnRva3lvLmpwIiwidGFpdG8u''@;'; put 'put ''dG9reW8uanAiLCJ0YW1hLnRva3lvLmpwIiwidG9zaGltYS50b2t5by5qcCIsImNoaXp1LnRvdHRvcmkuanAiLCJoaW5vLnRvdHRvcmkuanAiLCJrYXdhaGFyYS50b3R0b3JpLmpwIiwia29nZS50b3R0b3JpLmpwIiwia290b3VyYS50b3R0b3JpLmpwIiwibWlzYXNhLnRvdHRvcmkuanAiLCJu''@;'; put 'put ''YW5idS50b3R0b3JpLmpwIiwibmljaGluYW4udG90dG9yaS5qcCIsInNha2FpbWluYXRvLnRvdHRvcmkuanAiLCJ0b3R0b3JpLnRvdHRvcmkuanAiLCJ3YWthc2EudG90dG9yaS5qcCIsInlhenUudG90dG9yaS5qcCIsInlvbmFnby50b3R0b3JpLmpwIiwiYXNhaGkudG95YW1hLmpwIiwiZnVj''@;'; put 'put ''aHUudG95YW1hLmpwIiwiZnVrdW1pdHN1LnRveWFtYS5qcCIsImZ1bmFoYXNoaS50b3lhbWEuanAiLCJoaW1pLnRveWFtYS5qcCIsImltaXp1LnRveWFtYS5qcCIsImluYW1pLnRveWFtYS5qcCIsImpvaGFuYS50b3lhbWEuanAiLCJrYW1paWNoaS50b3lhbWEuanAiLCJrdXJvYmUudG95YW1h''@;'; put 'put ''LmpwIiwibmFrYW5paWthd2EudG95YW1hLmpwIiwibmFtZXJpa2F3YS50b3lhbWEuanAiLCJuYW50by50b3lhbWEuanAiLCJueXV6ZW4udG95YW1hLmpwIiwib3lhYmUudG95YW1hLmpwIiwidGFpcmEudG95YW1hLmpwIiwidGFrYW9rYS50b3lhbWEuanAiLCJ0YXRleWFtYS50b3lhbWEuanAi''@;'; put 'put ''LCJ0b2dhLnRveWFtYS5qcCIsInRvbmFtaS50b3lhbWEuanAiLCJ0b3lhbWEudG95YW1hLmpwIiwidW5henVraS50b3lhbWEuanAiLCJ1b3p1LnRveWFtYS5qcCIsInlhbWFkYS50b3lhbWEuanAiLCJhcmlkYS53YWtheWFtYS5qcCIsImFyaWRhZ2F3YS53YWtheWFtYS5qcCIsImdvYm8ud2Fr''@;'; put 'put ''YXlhbWEuanAiLCJoYXNoaW1vdG8ud2FrYXlhbWEuanAiLCJoaWRha2Eud2FrYXlhbWEuanAiLCJoaXJvZ2F3YS53YWtheWFtYS5qcCIsImluYW1pLndha2F5YW1hLmpwIiwiaXdhZGUud2FrYXlhbWEuanAiLCJrYWluYW4ud2FrYXlhbWEuanAiLCJrYW1pdG9uZGEud2FrYXlhbWEuanAiLCJr''@;'; put 'put ''YXRzdXJhZ2kud2FrYXlhbWEuanAiLCJraW1pbm8ud2FrYXlhbWEuanAiLCJraW5va2F3YS53YWtheWFtYS5qcCIsImtpdGF5YW1hLndha2F5YW1hLmpwIiwia295YS53YWtheWFtYS5qcCIsImtvemEud2FrYXlhbWEuanAiLCJrb3phZ2F3YS53YWtheWFtYS5qcCIsImt1ZG95YW1hLndha2F5''@;'; put 'put ''YW1hLmpwIiwia3VzaGltb3RvLndha2F5YW1hLmpwIiwibWloYW1hLndha2F5YW1hLmpwIiwibWlzYXRvLndha2F5YW1hLmpwIiwibmFjaGlrYXRzdXVyYS53YWtheWFtYS5qcCIsInNoaW5ndS53YWtheWFtYS5qcCIsInNoaXJhaGFtYS53YWtheWFtYS5qcCIsInRhaWppLndha2F5YW1hLmpw''@;'; put 'put ''IiwidGFuYWJlLndha2F5YW1hLmpwIiwid2FrYXlhbWEud2FrYXlhbWEuanAiLCJ5dWFzYS53YWtheWFtYS5qcCIsInl1cmEud2FrYXlhbWEuanAiLCJhc2FoaS55YW1hZ2F0YS5qcCIsImZ1bmFnYXRhLnlhbWFnYXRhLmpwIiwiaGlnYXNoaW5lLnlhbWFnYXRhLmpwIiwiaWlkZS55YW1hZ2F0''@;'; put 'put ''YS5qcCIsImthaG9rdS55YW1hZ2F0YS5qcCIsImthbWlub3lhbWEueWFtYWdhdGEuanAiLCJrYW5leWFtYS55YW1hZ2F0YS5qcCIsImthd2FuaXNoaS55YW1hZ2F0YS5qcCIsIm1hbXVyb2dhd2EueWFtYWdhdGEuanAiLCJtaWthd2EueWFtYWdhdGEuanAiLCJtdXJheWFtYS55YW1hZ2F0YS5q''@;'; put 'put ''cCIsIm5hZ2FpLnlhbWFnYXRhLmpwIiwibmFrYXlhbWEueWFtYWdhdGEuanAiLCJuYW55by55YW1hZ2F0YS5qcCIsIm5pc2hpa2F3YS55YW1hZ2F0YS5qcCIsIm9iYW5hemF3YS55YW1hZ2F0YS5qcCIsIm9lLnlhbWFnYXRhLmpwIiwib2d1bmkueWFtYWdhdGEuanAiLCJvaGt1cmEueWFtYWdh''@;'; put 'put ''dGEuanAiLCJvaXNoaWRhLnlhbWFnYXRhLmpwIiwic2FnYWUueWFtYWdhdGEuanAiLCJzYWthdGEueWFtYWdhdGEuanAiLCJzYWtlZ2F3YS55YW1hZ2F0YS5qcCIsInNoaW5qby55YW1hZ2F0YS5qcCIsInNoaXJhdGFrYS55YW1hZ2F0YS5qcCIsInNob25haS55YW1hZ2F0YS5qcCIsInRha2Fo''@;'; put 'put ''YXRhLnlhbWFnYXRhLmpwIiwidGVuZG8ueWFtYWdhdGEuanAiLCJ0b3phd2EueWFtYWdhdGEuanAiLCJ0c3VydW9rYS55YW1hZ2F0YS5qcCIsInlhbWFnYXRhLnlhbWFnYXRhLmpwIiwieWFtYW5vYmUueWFtYWdhdGEuanAiLCJ5b25lemF3YS55YW1hZ2F0YS5qcCIsInl1emEueWFtYWdhdGEu''@;'; put 'put ''anAiLCJhYnUueWFtYWd1Y2hpLmpwIiwiaGFnaS55YW1hZ3VjaGkuanAiLCJoaWthcmkueWFtYWd1Y2hpLmpwIiwiaG9mdS55YW1hZ3VjaGkuanAiLCJpd2FrdW5pLnlhbWFndWNoaS5qcCIsImt1ZGFtYXRzdS55YW1hZ3VjaGkuanAiLCJtaXRvdS55YW1hZ3VjaGkuanAiLCJuYWdhdG8ueWFt''@;'; put 'put ''YWd1Y2hpLmpwIiwib3NoaW1hLnlhbWFndWNoaS5qcCIsInNoaW1vbm9zZWtpLnlhbWFndWNoaS5qcCIsInNodW5hbi55YW1hZ3VjaGkuanAiLCJ0YWJ1c2UueWFtYWd1Y2hpLmpwIiwidG9rdXlhbWEueWFtYWd1Y2hpLmpwIiwidG95b3RhLnlhbWFndWNoaS5qcCIsInViZS55YW1hZ3VjaGku''@;'; put 'put ''anAiLCJ5dXUueWFtYWd1Y2hpLmpwIiwiY2h1by55YW1hbmFzaGkuanAiLCJkb3NoaS55YW1hbmFzaGkuanAiLCJmdWVmdWtpLnlhbWFuYXNoaS5qcCIsImZ1amlrYXdhLnlhbWFuYXNoaS5qcCIsImZ1amlrYXdhZ3VjaGlrby55YW1hbmFzaGkuanAiLCJmdWppeW9zaGlkYS55YW1hbmFzaGku''@;'; put 'put ''anAiLCJoYXlha2F3YS55YW1hbmFzaGkuanAiLCJob2t1dG8ueWFtYW5hc2hpLmpwIiwiaWNoaWthd2FtaXNhdG8ueWFtYW5hc2hpLmpwIiwia2FpLnlhbWFuYXNoaS5qcCIsImtvZnUueWFtYW5hc2hpLmpwIiwia29zaHUueWFtYW5hc2hpLmpwIiwia29zdWdlLnlhbWFuYXNoaS5qcCIsIm1p''@;'; put 'put ''bmFtaS1hbHBzLnlhbWFuYXNoaS5qcCIsIm1pbm9idS55YW1hbmFzaGkuanAiLCJuYWthbWljaGkueWFtYW5hc2hpLmpwIiwibmFuYnUueWFtYW5hc2hpLmpwIiwibmFydXNhd2EueWFtYW5hc2hpLmpwIiwibmlyYXNha2kueWFtYW5hc2hpLmpwIiwibmlzaGlrYXRzdXJhLnlhbWFuYXNoaS5q''@;'; put 'put ''cCIsIm9zaGluby55YW1hbmFzaGkuanAiLCJvdHN1a2kueWFtYW5hc2hpLmpwIiwic2hvd2EueWFtYW5hc2hpLmpwIiwidGFiYXlhbWEueWFtYW5hc2hpLmpwIiwidHN1cnUueWFtYW5hc2hpLmpwIiwidWVub2hhcmEueWFtYW5hc2hpLmpwIiwieWFtYW5ha2Frby55YW1hbmFzaGkuanAiLCJ5''@;'; put 'put ''YW1hbmFzaGkueWFtYW5hc2hpLmpwIiwia2UiLCJhYy5rZSIsImNvLmtlIiwiZ28ua2UiLCJpbmZvLmtlIiwibWUua2UiLCJtb2JpLmtlIiwibmUua2UiLCJvci5rZSIsInNjLmtlIiwia2ciLCJjb20ua2ciLCJlZHUua2ciLCJnb3Yua2ciLCJtaWwua2ciLCJuZXQua2ciLCJvcmcua2ciLCIq''@;'; put 'put ''LmtoIiwia2kiLCJiaXoua2kiLCJjb20ua2kiLCJlZHUua2kiLCJnb3Yua2kiLCJpbmZvLmtpIiwibmV0LmtpIiwib3JnLmtpIiwia20iLCJhc3Mua20iLCJjb20ua20iLCJlZHUua20iLCJnb3Yua20iLCJtaWwua20iLCJub20ua20iLCJvcmcua20iLCJwcmQua20iLCJ0bS5rbSIsImFzc28u''@;'; put 'put ''a20iLCJjb29wLmttIiwiZ291di5rbSIsIm1lZGVjaW4ua20iLCJub3RhaXJlcy5rbSIsInBoYXJtYWNpZW5zLmttIiwicHJlc3NlLmttIiwidmV0ZXJpbmFpcmUua20iLCJrbiIsImVkdS5rbiIsImdvdi5rbiIsIm5ldC5rbiIsIm9yZy5rbiIsImtwIiwiY29tLmtwIiwiZWR1LmtwIiwiZ292''@;'; put 'put ''LmtwIiwib3JnLmtwIiwicmVwLmtwIiwidHJhLmtwIiwia3IiLCJhYy5rciIsImNvLmtyIiwiZXMua3IiLCJnby5rciIsImhzLmtyIiwia2cua3IiLCJtaWwua3IiLCJtcy5rciIsIm5lLmtyIiwib3Iua3IiLCJwZS5rciIsInJlLmtyIiwic2Mua3IiLCJidXNhbi5rciIsImNodW5nYnVrLmty''@;'; put 'put ''IiwiY2h1bmduYW0ua3IiLCJkYWVndS5rciIsImRhZWplb24ua3IiLCJnYW5nd29uLmtyIiwiZ3dhbmdqdS5rciIsImd5ZW9uZ2J1ay5rciIsImd5ZW9uZ2dpLmtyIiwiZ3llb25nbmFtLmtyIiwiaW5jaGVvbi5rciIsImplanUua3IiLCJqZW9uYnVrLmtyIiwiamVvbm5hbS5rciIsInNlb3Vs''@;'; put 'put ''LmtyIiwidWxzYW4ua3IiLCJrdyIsImNvbS5rdyIsImVkdS5rdyIsImVtYi5rdyIsImdvdi5rdyIsImluZC5rdyIsIm5ldC5rdyIsIm9yZy5rdyIsImt5IiwiY29tLmt5IiwiZWR1Lmt5IiwibmV0Lmt5Iiwib3JnLmt5Iiwia3oiLCJjb20ua3oiLCJlZHUua3oiLCJnb3Yua3oiLCJtaWwua3oi''@;'; put 'put ''LCJuZXQua3oiLCJvcmcua3oiLCJsYSIsImNvbS5sYSIsImVkdS5sYSIsImdvdi5sYSIsImluZm8ubGEiLCJpbnQubGEiLCJuZXQubGEiLCJvcmcubGEiLCJwZXIubGEiLCJsYiIsImNvbS5sYiIsImVkdS5sYiIsImdvdi5sYiIsIm5ldC5sYiIsIm9yZy5sYiIsImxjIiwiY28ubGMiLCJjb20u''@;'; put 'put ''bGMiLCJlZHUubGMiLCJnb3YubGMiLCJuZXQubGMiLCJvcmcubGMiLCJsaSIsImxrIiwiYWMubGsiLCJhc3NuLmxrIiwiY29tLmxrIiwiZWR1LmxrIiwiZ292LmxrIiwiZ3JwLmxrIiwiaG90ZWwubGsiLCJpbnQubGsiLCJsdGQubGsiLCJuZXQubGsiLCJuZ28ubGsiLCJvcmcubGsiLCJzY2gu''@;'; put 'put ''bGsiLCJzb2MubGsiLCJ3ZWIubGsiLCJsciIsImNvbS5sciIsImVkdS5sciIsImdvdi5sciIsIm5ldC5sciIsIm9yZy5sciIsImxzIiwiYWMubHMiLCJiaXoubHMiLCJjby5scyIsImVkdS5scyIsImdvdi5scyIsImluZm8ubHMiLCJuZXQubHMiLCJvcmcubHMiLCJzYy5scyIsImx0IiwiZ292''@;'; put 'put ''Lmx0IiwibHUiLCJsdiIsImFzbi5sdiIsImNvbS5sdiIsImNvbmYubHYiLCJlZHUubHYiLCJnb3YubHYiLCJpZC5sdiIsIm1pbC5sdiIsIm5ldC5sdiIsIm9yZy5sdiIsImx5IiwiY29tLmx5IiwiZWR1Lmx5IiwiZ292Lmx5IiwiaWQubHkiLCJtZWQubHkiLCJuZXQubHkiLCJvcmcubHkiLCJw''@;'; put 'put ''bGMubHkiLCJzY2gubHkiLCJtYSIsImFjLm1hIiwiY28ubWEiLCJnb3YubWEiLCJuZXQubWEiLCJvcmcubWEiLCJwcmVzcy5tYSIsIm1jIiwiYXNzby5tYyIsInRtLm1jIiwibWQiLCJtZSIsImFjLm1lIiwiY28ubWUiLCJlZHUubWUiLCJnb3YubWUiLCJpdHMubWUiLCJuZXQubWUiLCJvcmcu''@;'; put 'put ''bWUiLCJwcml2Lm1lIiwibWciLCJjby5tZyIsImNvbS5tZyIsImVkdS5tZyIsImdvdi5tZyIsIm1pbC5tZyIsIm5vbS5tZyIsIm9yZy5tZyIsInByZC5tZyIsIm1oIiwibWlsIiwibWsiLCJjb20ubWsiLCJlZHUubWsiLCJnb3YubWsiLCJpbmYubWsiLCJuYW1lLm1rIiwibmV0Lm1rIiwib3Jn''@;'; put 'put ''Lm1rIiwibWwiLCJjb20ubWwiLCJlZHUubWwiLCJnb3V2Lm1sIiwiZ292Lm1sIiwibmV0Lm1sIiwib3JnLm1sIiwicHJlc3NlLm1sIiwiKi5tbSIsIm1uIiwiZWR1Lm1uIiwiZ292Lm1uIiwib3JnLm1uIiwibW8iLCJjb20ubW8iLCJlZHUubW8iLCJnb3YubW8iLCJuZXQubW8iLCJvcmcubW8i''@;'; put 'put ''LCJtb2JpIiwibXAiLCJtcSIsIm1yIiwiZ292Lm1yIiwibXMiLCJjb20ubXMiLCJlZHUubXMiLCJnb3YubXMiLCJuZXQubXMiLCJvcmcubXMiLCJtdCIsImNvbS5tdCIsImVkdS5tdCIsIm5ldC5tdCIsIm9yZy5tdCIsIm11IiwiYWMubXUiLCJjby5tdSIsImNvbS5tdSIsImdvdi5tdSIsIm5l''@;'; put 'put ''dC5tdSIsIm9yLm11Iiwib3JnLm11IiwibXVzZXVtIiwibXYiLCJhZXJvLm12IiwiYml6Lm12IiwiY29tLm12IiwiY29vcC5tdiIsImVkdS5tdiIsImdvdi5tdiIsImluZm8ubXYiLCJpbnQubXYiLCJtaWwubXYiLCJtdXNldW0ubXYiLCJuYW1lLm12IiwibmV0Lm12Iiwib3JnLm12IiwicHJv''@;'; put 'put ''Lm12IiwibXciLCJhYy5tdyIsImJpei5tdyIsImNvLm13IiwiY29tLm13IiwiY29vcC5tdyIsImVkdS5tdyIsImdvdi5tdyIsImludC5tdyIsIm5ldC5tdyIsIm9yZy5tdyIsIm14IiwiY29tLm14IiwiZWR1Lm14IiwiZ29iLm14IiwibmV0Lm14Iiwib3JnLm14IiwibXkiLCJiaXoubXkiLCJj''@;'; put 'put ''b20ubXkiLCJlZHUubXkiLCJnb3YubXkiLCJtaWwubXkiLCJuYW1lLm15IiwibmV0Lm15Iiwib3JnLm15IiwibXoiLCJhYy5teiIsImFkdi5teiIsImNvLm16IiwiZWR1Lm16IiwiZ292Lm16IiwibWlsLm16IiwibmV0Lm16Iiwib3JnLm16IiwibmEiLCJhbHQubmEiLCJjby5uYSIsImNvbS5u''@;'; put 'put ''YSIsImdvdi5uYSIsIm5ldC5uYSIsIm9yZy5uYSIsIm5hbWUiLCJuYyIsImFzc28ubmMiLCJub20ubmMiLCJuZSIsIm5ldCIsIm5mIiwiYXJ0cy5uZiIsImNvbS5uZiIsImZpcm0ubmYiLCJpbmZvLm5mIiwibmV0Lm5mIiwib3RoZXIubmYiLCJwZXIubmYiLCJyZWMubmYiLCJzdG9yZS5uZiIs''@;'; put 'put ''IndlYi5uZiIsIm5nIiwiY29tLm5nIiwiZWR1Lm5nIiwiZ292Lm5nIiwiaS5uZyIsIm1pbC5uZyIsIm1vYmkubmciLCJuYW1lLm5nIiwibmV0Lm5nIiwib3JnLm5nIiwic2NoLm5nIiwibmkiLCJhYy5uaSIsImJpei5uaSIsImNvLm5pIiwiY29tLm5pIiwiZWR1Lm5pIiwiZ29iLm5pIiwiaW4u''@;'; put 'put ''bmkiLCJpbmZvLm5pIiwiaW50Lm5pIiwibWlsLm5pIiwibmV0Lm5pIiwibm9tLm5pIiwib3JnLm5pIiwid2ViLm5pIiwibmwiLCJubyIsImZocy5ubyIsImZvbGtlYmlibC5ubyIsImZ5bGtlc2JpYmwubm8iLCJpZHJldHQubm8iLCJtdXNldW0ubm8iLCJwcml2Lm5vIiwidmdzLm5vIiwiZGVw''@;'; put 'put ''Lm5vIiwiaGVyYWQubm8iLCJrb21tdW5lLm5vIiwibWlsLm5vIiwic3RhdC5ubyIsImFhLm5vIiwiYWgubm8iLCJidS5ubyIsImZtLm5vIiwiaGwubm8iLCJobS5ubyIsImphbi1tYXllbi5ubyIsIm1yLm5vIiwibmwubm8iLCJudC5ubyIsIm9mLm5vIiwib2wubm8iLCJvc2xvLm5vIiwicmwu''@;'; put 'put ''bm8iLCJzZi5ubyIsInN0Lm5vIiwic3ZhbGJhcmQubm8iLCJ0bS5ubyIsInRyLm5vIiwidmEubm8iLCJ2Zi5ubyIsImdzLmFhLm5vIiwiZ3MuYWgubm8iLCJncy5idS5ubyIsImdzLmZtLm5vIiwiZ3MuaGwubm8iLCJncy5obS5ubyIsImdzLmphbi1tYXllbi5ubyIsImdzLm1yLm5vIiwiZ3Mu''@;'; put 'put ''bmwubm8iLCJncy5udC5ubyIsImdzLm9mLm5vIiwiZ3Mub2wubm8iLCJncy5vc2xvLm5vIiwiZ3Mucmwubm8iLCJncy5zZi5ubyIsImdzLnN0Lm5vIiwiZ3Muc3ZhbGJhcmQubm8iLCJncy50bS5ubyIsImdzLnRyLm5vIiwiZ3MudmEubm8iLCJncy52Zi5ubyIsImFrcmVoYW1uLm5vIiwiXHhl''@;'; put 'put ''NWtyZWhhbW4ubm8iLCJhbGdhcmQubm8iLCJceGU1bGdceGU1cmQubm8iLCJhcm5hLm5vIiwiYnJvbm5veXN1bmQubm8iLCJiclx4Zjhublx4Zjh5c3VuZC5ubyIsImJydW11bmRkYWwubm8iLCJicnluZS5ubyIsImRyb2Jhay5ubyIsImRyXHhmOGJhay5ubyIsImVnZXJzdW5kLm5vIiwiZmV0''@;'; put 'put ''c3VuZC5ubyIsImZsb3JvLm5vIiwiZmxvclx4Zjgubm8iLCJmcmVkcmlrc3RhZC5ubyIsImhva2tzdW5kLm5vIiwiaG9uZWZvc3Mubm8iLCJoXHhmOG5lZm9zcy5ubyIsImplc3NoZWltLm5vIiwiam9ycGVsYW5kLm5vIiwialx4ZjhycGVsYW5kLm5vIiwia2lya2VuZXMubm8iLCJrb3BlcnZp''@;'; put 'put ''ay5ubyIsImtyb2tzdGFkZWx2YS5ubyIsImxhbmdldmFnLm5vIiwibGFuZ2V2XHhlNWcubm8iLCJsZWlydmlrLm5vIiwibWpvbmRhbGVuLm5vIiwibWpceGY4bmRhbGVuLm5vIiwibW8taS1yYW5hLm5vIiwibW9zam9lbi5ubyIsIm1vc2pceGY4ZW4ubm8iLCJuZXNvZGR0YW5nZW4ubm8iLCJv''@;'; put 'put ''cmthbmdlci5ubyIsIm9zb3lyby5ubyIsIm9zXHhmOHlyby5ubyIsInJhaG9sdC5ubyIsInJceGU1aG9sdC5ubyIsInNhbmRuZXNzam9lbi5ubyIsInNhbmRuZXNzalx4Zjhlbi5ubyIsInNrZWRzbW9rb3JzZXQubm8iLCJzbGF0dHVtLm5vIiwic3BqZWxrYXZpay5ubyIsInN0YXRoZWxsZS5u''@;'; put 'put ''byIsInN0YXZlcm4ubm8iLCJzdGpvcmRhbHNoYWxzZW4ubm8iLCJzdGpceGY4cmRhbHNoYWxzZW4ubm8iLCJ0YW5hbmdlci5ubyIsInRyYW5ieS5ubyIsInZvc3NldmFuZ2VuLm5vIiwiYWFyYm9ydGUubm8iLCJhZWpyaWUubm8iLCJhZmpvcmQubm8iLCJceGU1ZmpvcmQubm8iLCJhZ2RlbmVz''@;'; put 'put ''Lm5vIiwibmVzLmFrZXJzaHVzLm5vIiwiYWtub2x1b2t0YS5ubyIsIlx4ZTFrXHUwMTRib2x1b2t0YS5ubyIsImFsLm5vIiwiXHhlNWwubm8iLCJhbGFoZWFkanUubm8iLCJceGUxbGFoZWFkanUubm8iLCJhbGVzdW5kLm5vIiwiXHhlNWxlc3VuZC5ubyIsImFsc3RhaGF1Zy5ubyIsImFsdGEu''@;'; put 'put ''bm8iLCJceGUxbHRceGUxLm5vIiwiYWx2ZGFsLm5vIiwiYW1saS5ubyIsIlx4ZTVtbGkubm8iLCJhbW90Lm5vIiwiXHhlNW1vdC5ubyIsImFuZGFzdW9sby5ubyIsImFuZGVidS5ubyIsImFuZG95Lm5vIiwiYW5kXHhmOHkubm8iLCJhcmRhbC5ubyIsIlx4ZTVyZGFsLm5vIiwiYXJlbWFyay5u''@;'; put 'put ''byIsImFyZW5kYWwubm8iLCJceGU1cy5ubyIsImFzZXJhbC5ubyIsIlx4ZTVzZXJhbC5ubyIsImFza2VyLm5vIiwiYXNraW0ubm8iLCJhc2tveS5ubyIsImFza1x4Zjh5Lm5vIiwiYXNrdm9sbC5ubyIsImFzbmVzLm5vIiwiXHhlNXNuZXMubm8iLCJhdWRuZWRhbG4ubm8iLCJhdWtyYS5ubyIs''@;'; put 'put ''ImF1cmUubm8iLCJhdXJsYW5kLm5vIiwiYXVyc2tvZy1ob2xhbmQubm8iLCJhdXJza29nLWhceGY4bGFuZC5ubyIsImF1c3Rldm9sbC5ubyIsImF1c3RyaGVpbS5ubyIsImF2ZXJveS5ubyIsImF2ZXJceGY4eS5ubyIsImJhZGFkZGphLm5vIiwiYlx4ZTVkXHhlNWRkalx4ZTUubm8iLCJiXHhl''@;'; put 'put ''NnJ1bS5ubyIsImJhaGNhdnVvdG5hLm5vIiwiYlx4ZTFoY2F2dW90bmEubm8iLCJiYWhjY2F2dW90bmEubm8iLCJiXHhlMWhjY2F2dW90bmEubm8iLCJiYWlkYXIubm8iLCJiXHhlMWlkXHhlMXIubm8iLCJiYWpkZGFyLm5vIiwiYlx4ZTFqZGRhci5ubyIsImJhbGF0Lm5vIiwiYlx4ZTFsXHhl''@;'; put 'put ''MXQubm8iLCJiYWxlc3RyYW5kLm5vIiwiYmFsbGFuZ2VuLm5vIiwiYmFsc2Zqb3JkLm5vIiwiYmFtYmxlLm5vIiwiYmFyZHUubm8iLCJiYXJ1bS5ubyIsImJhdHNmam9yZC5ubyIsImJceGU1dHNmam9yZC5ubyIsImJlYXJhbHZhaGtpLm5vIiwiYmVhcmFsdlx4ZTFoa2kubm8iLCJiZWFyZHUu''@;'; put 'put ''bm8iLCJiZWlhcm4ubm8iLCJiZXJnLm5vIiwiYmVyZ2VuLm5vIiwiYmVybGV2YWcubm8iLCJiZXJsZXZceGU1Zy5ubyIsImJpZXZhdC5ubyIsImJpZXZceGUxdC5ubyIsImJpbmRhbC5ubyIsImJpcmtlbmVzLm5vIiwiYmphcmtveS5ubyIsImJqYXJrXHhmOHkubm8iLCJiamVya3JlaW0ubm8i''@;'; put 'put ''LCJianVnbi5ubyIsImJvZG8ubm8iLCJib2RceGY4Lm5vIiwiYm9rbi5ubyIsImJvbWxvLm5vIiwiYlx4ZjhtbG8ubm8iLCJicmVtYW5nZXIubm8iLCJicm9ubm95Lm5vIiwiYnJceGY4bm5ceGY4eS5ubyIsImJ1ZGVqanUubm8iLCJuZXMuYnVza2VydWQubm8iLCJieWdsYW5kLm5vIiwiYnlr''@;'; put 'put ''bGUubm8iLCJjYWhjZXN1b2xvLm5vIiwiXHUwMTBkXHhlMWhjZXN1b2xvLm5vIiwiZGF2dmVuamFyZ2Eubm8iLCJkYXZ2ZW5qXHhlMXJnYS5ubyIsImRhdnZlc2lpZGEubm8iLCJkZWF0bnUubm8iLCJkaWVsZGRhbnVvcnJpLm5vIiwiZGl2dGFzdnVvZG5hLm5vIiwiZGl2dHRhc3Z1b3RuYS5u''@;'; put 'put ''byIsImRvbm5hLm5vIiwiZFx4ZjhubmEubm8iLCJkb3ZyZS5ubyIsImRyYW1tZW4ubm8iLCJkcmFuZ2VkYWwubm8iLCJkeXJveS5ubyIsImR5clx4Zjh5Lm5vIiwiZWlkLm5vIiwiZWlkZmpvcmQubm8iLCJlaWRzYmVyZy5ubyIsImVpZHNrb2cubm8iLCJlaWRzdm9sbC5ubyIsImVpZ2Vyc3Vu''@;'; put 'put ''ZC5ubyIsImVsdmVydW0ubm8iLCJlbmViYWtrLm5vIiwiZW5nZXJkYWwubm8iLCJldG5lLm5vIiwiZXRuZWRhbC5ubyIsImV2ZW5hc3NpLm5vIiwiZXZlblx4ZTFcdTAxNjFcdTAxNjFpLm5vIiwiZXZlbmVzLm5vIiwiZXZqZS1vZy1ob3JubmVzLm5vIiwiZmFyc3VuZC5ubyIsImZhdXNrZS5u''@;'; put 'put ''byIsImZlZGplLm5vIiwiZmV0Lm5vIiwiZmlubm95Lm5vIiwiZmlublx4Zjh5Lm5vIiwiZml0amFyLm5vIiwiZmphbGVyLm5vIiwiZmplbGwubm8iLCJmbGEubm8iLCJmbFx4ZTUubm8iLCJmbGFrc3RhZC5ubyIsImZsYXRhbmdlci5ubyIsImZsZWtrZWZqb3JkLm5vIiwiZmxlc2Jlcmcubm8i''@;'; put 'put ''LCJmbG9yYS5ubyIsImZvbGxkYWwubm8iLCJmb3JkZS5ubyIsImZceGY4cmRlLm5vIiwiZm9yc2FuZC5ubyIsImZvc25lcy5ubyIsImZyXHhlNm5hLm5vIiwiZnJhbmEubm8iLCJmcmVpLm5vIiwiZnJvZ24ubm8iLCJmcm9sYW5kLm5vIiwiZnJvc3RhLm5vIiwiZnJveWEubm8iLCJmclx4Zjh5''@;'; put 'put ''YS5ubyIsImZ1b2lza3Uubm8iLCJmdW9zc2tvLm5vIiwiZnVzYS5ubyIsImZ5cmVzZGFsLm5vIiwiZ2FpdnVvdG5hLm5vIiwiZ1x4ZTFpdnVvdG5hLm5vIiwiZ2Fsc2Eubm8iLCJnXHhlMWxzXHhlMS5ubyIsImdhbXZpay5ubyIsImdhbmdhdmlpa2Eubm8iLCJnXHhlMVx1MDE0Ymdhdmlpa2Eu''@;'; put 'put ''bm8iLCJnYXVsYXIubm8iLCJnYXVzZGFsLm5vIiwiZ2llaHRhdnVvYXRuYS5ubyIsImdpbGRlc2thbC5ubyIsImdpbGRlc2tceGU1bC5ubyIsImdpc2tlLm5vIiwiZ2plbW5lcy5ubyIsImdqZXJkcnVtLm5vIiwiZ2plcnN0YWQubm8iLCJnamVzZGFsLm5vIiwiZ2pvdmlrLm5vIiwiZ2pceGY4''@;'; put 'put ''dmlrLm5vIiwiZ2xvcHBlbi5ubyIsImdvbC5ubyIsImdyYW4ubm8iLCJncmFuZS5ubyIsImdyYW52aW4ubm8iLCJncmF0YW5nZW4ubm8iLCJncmltc3RhZC5ubyIsImdyb25nLm5vIiwiZ3J1ZS5ubyIsImd1bGVuLm5vIiwiZ3VvdmRhZ2VhaWRudS5ubyIsImhhLm5vIiwiaFx4ZTUubm8iLCJo''@;'; put 'put ''YWJtZXIubm8iLCJoXHhlMWJtZXIubm8iLCJoYWRzZWwubm8iLCJoXHhlNmdlYm9zdGFkLm5vIiwiaGFnZWJvc3RhZC5ubyIsImhhbGRlbi5ubyIsImhhbHNhLm5vIiwiaGFtYXIubm8iLCJoYW1hcm95Lm5vIiwiaGFtbWFyZmVhc3RhLm5vIiwiaFx4ZTFtbVx4ZTFyZmVhc3RhLm5vIiwiaGFt''@;'; put 'put ''bWVyZmVzdC5ubyIsImhhcG1pci5ubyIsImhceGUxcG1pci5ubyIsImhhcmFtLm5vIiwiaGFyZWlkLm5vIiwiaGFyc3RhZC5ubyIsImhhc3Zpay5ubyIsImhhdHRmamVsbGRhbC5ubyIsImhhdWdlc3VuZC5ubyIsIm9zLmhlZG1hcmsubm8iLCJ2YWxlci5oZWRtYXJrLm5vIiwidlx4ZTVsZXIu''@;'; put 'put ''aGVkbWFyay5ubyIsImhlbW5lLm5vIiwiaGVtbmVzLm5vIiwiaGVtc2VkYWwubm8iLCJoaXRyYS5ubyIsImhqYXJ0ZGFsLm5vIiwiaGplbG1lbGFuZC5ubyIsImhvYm9sLm5vIiwiaG9iXHhmOGwubm8iLCJob2Yubm8iLCJob2wubm8iLCJob2xlLm5vIiwiaG9sbWVzdHJhbmQubm8iLCJob2x0''@;'; put 'put ''YWxlbi5ubyIsImhvbHRceGU1bGVuLm5vIiwib3MuaG9yZGFsYW5kLm5vIiwiaG9ybmluZGFsLm5vIiwiaG9ydGVuLm5vIiwiaG95YW5nZXIubm8iLCJoXHhmOHlhbmdlci5ubyIsImhveWxhbmRldC5ubyIsImhceGY4eWxhbmRldC5ubyIsImh1cmRhbC5ubyIsImh1cnVtLm5vIiwiaHZhbGVy''@;'; put 'put ''Lm5vIiwiaHlsbGVzdGFkLm5vIiwiaWJlc3RhZC5ubyIsImluZGVyb3kubm8iLCJpbmRlclx4Zjh5Lm5vIiwiaXZlbGFuZC5ubyIsIml2Z3Uubm8iLCJqZXZuYWtlci5ubyIsImpvbHN0ZXIubm8iLCJqXHhmOGxzdGVyLm5vIiwiam9uZGFsLm5vIiwia2Fmam9yZC5ubyIsImtceGU1ZmpvcmQu''@;'; put 'put ''bm8iLCJrYXJhc2pvaGthLm5vIiwia1x4ZTFyXHhlMVx1MDE2MWpvaGthLm5vIiwia2FyYXNqb2subm8iLCJrYXJsc295Lm5vIiwia2FybW95Lm5vIiwia2FybVx4Zjh5Lm5vIiwia2F1dG9rZWluby5ubyIsImtsYWJ1Lm5vIiwia2xceGU2YnUubm8iLCJrbGVwcC5ubyIsImtvbmdzYmVyZy5u''@;'; put 'put ''byIsImtvbmdzdmluZ2VyLm5vIiwia3JhYW5naGtlLm5vIiwia3JceGU1YW5naGtlLm5vIiwia3JhZ2Vyby5ubyIsImtyYWdlclx4Zjgubm8iLCJrcmlzdGlhbnNhbmQubm8iLCJrcmlzdGlhbnN1bmQubm8iLCJrcm9kc2hlcmFkLm5vIiwia3JceGY4ZHNoZXJhZC5ubyIsImt2XHhlNmZqb3Jk''@;'; put 'put ''Lm5vIiwia3ZceGU2bmFuZ2VuLm5vIiwia3ZhZmpvcmQubm8iLCJrdmFsc3VuZC5ubyIsImt2YW0ubm8iLCJrdmFuYW5nZW4ubm8iLCJrdmluZXNkYWwubm8iLCJrdmlubmhlcmFkLm5vIiwia3ZpdGVzZWlkLm5vIiwia3ZpdHNveS5ubyIsImt2aXRzXHhmOHkubm8iLCJsYWFrZXN2dWVtaWUu''@;'; put 'put ''bm8iLCJsXHhlNnJkYWwubm8iLCJsYWhwcGkubm8iLCJsXHhlMWhwcGkubm8iLCJsYXJkYWwubm8iLCJsYXJ2aWsubm8iLCJsYXZhZ2lzLm5vIiwibGF2YW5nZW4ubm8iLCJsZWFuZ2F2aWlrYS5ubyIsImxlYVx1MDE0Ymdhdmlpa2Eubm8iLCJsZWJlc2J5Lm5vIiwibGVpa2FuZ2VyLm5vIiwi''@;'; put 'put ''bGVpcmZqb3JkLm5vIiwibGVrYS5ubyIsImxla3N2aWsubm8iLCJsZW52aWsubm8iLCJsZXJkYWwubm8iLCJsZXNqYS5ubyIsImxldmFuZ2VyLm5vIiwibGllci5ubyIsImxpZXJuZS5ubyIsImxpbGxlaGFtbWVyLm5vIiwibGlsbGVzYW5kLm5vIiwibGluZGFzLm5vIiwibGluZFx4ZTVzLm5v''@;'; put 'put ''IiwibGluZGVzbmVzLm5vIiwibG9hYmF0Lm5vIiwibG9hYlx4ZTF0Lm5vIiwibG9kaW5nZW4ubm8iLCJsXHhmOGRpbmdlbi5ubyIsImxvbS5ubyIsImxvcHBhLm5vIiwibG9yZW5za29nLm5vIiwibFx4ZjhyZW5za29nLm5vIiwibG90ZW4ubm8iLCJsXHhmOHRlbi5ubyIsImx1bmQubm8iLCJs''@;'; put 'put ''dW5uZXIubm8iLCJsdXJveS5ubyIsImx1clx4Zjh5Lm5vIiwibHVzdGVyLm5vIiwibHluZ2RhbC5ubyIsImx5bmdlbi5ubyIsIm1hbGF0dnVvcG1pLm5vIiwibVx4ZTFsYXR2dW9wbWkubm8iLCJtYWxzZWx2Lm5vIiwibVx4ZTVsc2Vsdi5ubyIsIm1hbHZpay5ubyIsIm1hbmRhbC5ubyIsIm1h''@;'; put 'put ''cmtlci5ubyIsIm1hcm5hcmRhbC5ubyIsIm1hc2Zqb3JkZW4ubm8iLCJtYXNveS5ubyIsIm1ceGU1c1x4Zjh5Lm5vIiwibWF0dGEtdmFyamphdC5ubyIsIm1ceGUxdHRhLXZceGUxcmpqYXQubm8iLCJtZWxhbmQubm8iLCJtZWxkYWwubm8iLCJtZWxodXMubm8iLCJtZWxveS5ubyIsIm1lbFx4''@;'; put 'put ''Zjh5Lm5vIiwibWVyYWtlci5ubyIsIm1lclx4ZTVrZXIubm8iLCJtaWRzdW5kLm5vIiwibWlkdHJlLWdhdWxkYWwubm8iLCJtb2FyZWtlLm5vIiwibW9ceGU1cmVrZS5ubyIsIm1vZGFsZW4ubm8iLCJtb2R1bS5ubyIsIm1vbGRlLm5vIiwiaGVyb3kubW9yZS1vZy1yb21zZGFsLm5vIiwic2Fu''@;'; put 'put ''ZGUubW9yZS1vZy1yb21zZGFsLm5vIiwiaGVyXHhmOHkubVx4ZjhyZS1vZy1yb21zZGFsLm5vIiwic2FuZGUubVx4ZjhyZS1vZy1yb21zZGFsLm5vIiwibW9za2VuZXMubm8iLCJtb3NzLm5vIiwibW9zdmlrLm5vIiwibXVvc2F0Lm5vIiwibXVvc1x4ZTF0Lm5vIiwibmFhbWVzamV2dWVtaWUu''@;'; put 'put ''bm8iLCJuXHhlNVx4ZTVtZXNqZXZ1ZW1pZS5ubyIsIm5ceGU2clx4Zjh5Lm5vIiwibmFtZGFsc2VpZC5ubyIsIm5hbXNvcy5ubyIsIm5hbXNza29nYW4ubm8iLCJuYW5uZXN0YWQubm8iLCJuYXJveS5ubyIsIm5hcnZpaWthLm5vIiwibmFydmlrLm5vIiwibmF1c3RkYWwubm8iLCJuYXZ1b3Ru''@;'; put 'put ''YS5ubyIsIm5ceGUxdnVvdG5hLm5vIiwibmVkcmUtZWlrZXIubm8iLCJuZXNuYS5ubyIsIm5lc29kZGVuLm5vIiwibmVzc2VieS5ubyIsIm5lc3NldC5ubyIsIm5pc3NlZGFsLm5vIiwibml0dGVkYWwubm8iLCJub3JkLWF1cmRhbC5ubyIsIm5vcmQtZnJvbi5ubyIsIm5vcmQtb2RhbC5ubyIs''@;'; put 'put ''Im5vcmRkYWwubm8iLCJub3Jka2FwcC5ubyIsImJvLm5vcmRsYW5kLm5vIiwiYlx4Zjgubm9yZGxhbmQubm8iLCJoZXJveS5ub3JkbGFuZC5ubyIsImhlclx4Zjh5Lm5vcmRsYW5kLm5vIiwibm9yZHJlLWxhbmQubm8iLCJub3JkcmVpc2Eubm8iLCJub3JlLW9nLXV2ZGFsLm5vIiwibm90b2Rk''@;'; put 'put ''ZW4ubm8iLCJub3R0ZXJveS5ubyIsIm5ceGY4dHRlclx4Zjh5Lm5vIiwib2RkYS5ubyIsIm9rc25lcy5ubyIsIlx4Zjhrc25lcy5ubyIsIm9tYXN2dW90bmEubm8iLCJvcHBkYWwubm8iLCJvcHBlZ2FyZC5ubyIsIm9wcGVnXHhlNXJkLm5vIiwib3JrZGFsLm5vIiwib3JsYW5kLm5vIiwiXHhm''@;'; put 'put ''OHJsYW5kLm5vIiwib3Jza29nLm5vIiwiXHhmOHJza29nLm5vIiwib3JzdGEubm8iLCJceGY4cnN0YS5ubyIsIm9zZW4ubm8iLCJvc3Rlcm95Lm5vIiwib3N0ZXJceGY4eS5ubyIsInZhbGVyLm9zdGZvbGQubm8iLCJ2XHhlNWxlci5ceGY4c3Rmb2xkLm5vIiwib3N0cmUtdG90ZW4ubm8iLCJc''@;'; put 'put ''eGY4c3RyZS10b3Rlbi5ubyIsIm92ZXJoYWxsYS5ubyIsIm92cmUtZWlrZXIubm8iLCJceGY4dnJlLWVpa2VyLm5vIiwib3llci5ubyIsIlx4Zjh5ZXIubm8iLCJveWdhcmRlbi5ubyIsIlx4Zjh5Z2FyZGVuLm5vIiwib3lzdHJlLXNsaWRyZS5ubyIsIlx4Zjh5c3RyZS1zbGlkcmUubm8iLCJw''@;'; put 'put ''b3JzYW5nZXIubm8iLCJwb3JzYW5ndS5ubyIsInBvcnNceGUxXHUwMTRiZ3Uubm8iLCJwb3JzZ3J1bm4ubm8iLCJyYWRlLm5vIiwiclx4ZTVkZS5ubyIsInJhZG95Lm5vIiwicmFkXHhmOHkubm8iLCJyXHhlNmxpbmdlbi5ubyIsInJhaGtrZXJhdmp1Lm5vIiwiclx4ZTFoa2tlclx4ZTF2anUu''@;'; put 'put ''bm8iLCJyYWlzYS5ubyIsInJceGUxaXNhLm5vIiwicmFra2VzdGFkLm5vIiwicmFsaW5nZW4ubm8iLCJyYW5hLm5vIiwicmFuZGFiZXJnLm5vIiwicmF1bWEubm8iLCJyZW5kYWxlbi5ubyIsInJlbm5lYnUubm8iLCJyZW5uZXNveS5ubyIsInJlbm5lc1x4Zjh5Lm5vIiwicmluZGFsLm5vIiwi''@;'; put 'put ''cmluZ2VidS5ubyIsInJpbmdlcmlrZS5ubyIsInJpbmdzYWtlci5ubyIsInJpc29yLm5vIiwicmlzXHhmOHIubm8iLCJyaXNzYS5ubyIsInJvYW4ubm8iLCJyb2RveS5ubyIsInJceGY4ZFx4Zjh5Lm5vIiwicm9sbGFnLm5vIiwicm9tc2Eubm8iLCJyb21za29nLm5vIiwiclx4Zjhtc2tvZy5u''@;'; put 'put ''byIsInJvcm9zLm5vIiwiclx4Zjhyb3Mubm8iLCJyb3N0Lm5vIiwiclx4ZjhzdC5ubyIsInJveWtlbi5ubyIsInJceGY4eWtlbi5ubyIsInJveXJ2aWsubm8iLCJyXHhmOHlydmlrLm5vIiwicnVvdmF0Lm5vIiwicnlnZ2Uubm8iLCJzYWxhbmdlbi5ubyIsInNhbGF0Lm5vIiwic1x4ZTFsYXQu''@;'; put 'put ''bm8iLCJzXHhlMWxceGUxdC5ubyIsInNhbHRkYWwubm8iLCJzYW1uYW5nZXIubm8iLCJzYW5kZWZqb3JkLm5vIiwic2FuZG5lcy5ubyIsInNhbmRveS5ubyIsInNhbmRceGY4eS5ubyIsInNhcnBzYm9yZy5ubyIsInNhdWRhLm5vIiwic2F1aGVyYWQubm8iLCJzZWwubm8iLCJzZWxidS5ubyIs''@;'; put 'put ''InNlbGplLm5vIiwic2Vsam9yZC5ubyIsInNpZWxsYWsubm8iLCJzaWdkYWwubm8iLCJzaWxqYW4ubm8iLCJzaXJkYWwubm8iLCJza2FuaXQubm8iLCJza1x4ZTFuaXQubm8iLCJza2FubGFuZC5ubyIsInNrXHhlNW5sYW5kLm5vIiwic2thdW4ubm8iLCJza2Vkc21vLm5vIiwic2tpLm5vIiwi''@;'; put 'put ''c2tpZW4ubm8iLCJza2llcnZhLm5vIiwic2tpZXJ2XHhlMS5ubyIsInNraXB0dmV0Lm5vIiwic2tqYWsubm8iLCJza2pceGU1ay5ubyIsInNramVydm95Lm5vIiwic2tqZXJ2XHhmOHkubm8iLCJza29kamUubm8iLCJzbW9sYS5ubyIsInNtXHhmOGxhLm5vIiwic25hYXNlLm5vIiwic25ceGU1''@;'; put 'put ''YXNlLm5vIiwic25hc2Eubm8iLCJzblx4ZTVzYS5ubyIsInNuaWxsZmpvcmQubm8iLCJzbm9hc2Eubm8iLCJzb2duZGFsLm5vIiwic29nbmUubm8iLCJzXHhmOGduZS5ubyIsInNva25kYWwubm8iLCJzb2xhLm5vIiwic29sdW5kLm5vIiwic29tbmEubm8iLCJzXHhmOG1uYS5ubyIsInNvbmRy''@;'; put 'put ''ZS1sYW5kLm5vIiwic1x4ZjhuZHJlLWxhbmQubm8iLCJzb25nZGFsZW4ubm8iLCJzb3ItYXVyZGFsLm5vIiwic1x4ZjhyLWF1cmRhbC5ubyIsInNvci1mcm9uLm5vIiwic1x4ZjhyLWZyb24ubm8iLCJzb3Itb2RhbC5ubyIsInNceGY4ci1vZGFsLm5vIiwic29yLXZhcmFuZ2VyLm5vIiwic1x4''@;'; put 'put ''ZjhyLXZhcmFuZ2VyLm5vIiwic29yZm9sZC5ubyIsInNceGY4cmZvbGQubm8iLCJzb3JyZWlzYS5ubyIsInNceGY4cnJlaXNhLm5vIiwic29ydGxhbmQubm8iLCJzb3J1bS5ubyIsInNceGY4cnVtLm5vIiwic3B5ZGViZXJnLm5vIiwic3RhbmdlLm5vIiwic3RhdmFuZ2VyLm5vIiwic3RlaWdl''@;'; put 'put ''bi5ubyIsInN0ZWlua2plci5ubyIsInN0am9yZGFsLm5vIiwic3RqXHhmOHJkYWwubm8iLCJzdG9ra2Uubm8iLCJzdG9yLWVsdmRhbC5ubyIsInN0b3JkLm5vIiwic3RvcmRhbC5ubyIsInN0b3Jmam9yZC5ubyIsInN0cmFuZC5ubyIsInN0cmFuZGEubm8iLCJzdHJ5bi5ubyIsInN1bGEubm8i''@;'; put 'put ''LCJzdWxkYWwubm8iLCJzdW5kLm5vIiwic3VubmRhbC5ubyIsInN1cm5hZGFsLm5vIiwic3ZlaW8ubm8iLCJzdmVsdmlrLm5vIiwic3lra3lsdmVuLm5vIiwidGFuYS5ubyIsImJvLnRlbGVtYXJrLm5vIiwiYlx4ZjgudGVsZW1hcmsubm8iLCJ0aW1lLm5vIiwidGluZ3ZvbGwubm8iLCJ0aW5u''@;'; put 'put ''Lm5vIiwidGplbGRzdW5kLm5vIiwidGpvbWUubm8iLCJ0alx4ZjhtZS5ubyIsInRva2tlLm5vIiwidG9sZ2Eubm8iLCJ0b25zYmVyZy5ubyIsInRceGY4bnNiZXJnLm5vIiwidG9yc2tlbi5ubyIsInRyXHhlNm5hLm5vIiwidHJhbmEubm8iLCJ0cmFub3kubm8iLCJ0cmFuXHhmOHkubm8iLCJ0''@;'; put 'put ''cm9hbmRpbi5ubyIsInRyb2dzdGFkLm5vIiwidHJceGY4Z3N0YWQubm8iLCJ0cm9tc2Eubm8iLCJ0cm9tc28ubm8iLCJ0cm9tc1x4Zjgubm8iLCJ0cm9uZGhlaW0ubm8iLCJ0cnlzaWwubm8iLCJ0dmVkZXN0cmFuZC5ubyIsInR5ZGFsLm5vIiwidHluc2V0Lm5vIiwidHlzZmpvcmQubm8iLCJ0''@;'; put 'put ''eXNuZXMubm8iLCJ0eXN2XHhlNnIubm8iLCJ0eXN2YXIubm8iLCJ1bGxlbnNha2VyLm5vIiwidWxsZW5zdmFuZy5ubyIsInVsdmlrLm5vIiwidW5qYXJnYS5ubyIsInVualx4ZTFyZ2Eubm8iLCJ1dHNpcmEubm8iLCJ2YWFwc3RlLm5vIiwidmFkc28ubm8iLCJ2YWRzXHhmOC5ubyIsInZceGU2''@;'; put 'put ''clx4Zjh5Lm5vIiwidmFnYS5ubyIsInZceGU1Z1x4ZTUubm8iLCJ2YWdhbi5ubyIsInZceGU1Z2FuLm5vIiwidmFnc295Lm5vIiwidlx4ZTVnc1x4Zjh5Lm5vIiwidmFrc2RhbC5ubyIsInZhbGxlLm5vIiwidmFuZy5ubyIsInZhbnlsdmVuLm5vIiwidmFyZG8ubm8iLCJ2YXJkXHhmOC5ubyIs''@;'; put 'put ''InZhcmdnYXQubm8iLCJ2XHhlMXJnZ1x4ZTF0Lm5vIiwidmFyb3kubm8iLCJ2ZWZzbi5ubyIsInZlZ2Eubm8iLCJ2ZWdhcnNoZWkubm8iLCJ2ZWdceGU1cnNoZWkubm8iLCJ2ZW5uZXNsYS5ubyIsInZlcmRhbC5ubyIsInZlcnJhbi5ubyIsInZlc3RieS5ubyIsInNhbmRlLnZlc3Rmb2xkLm5v''@;'; put 'put ''IiwidmVzdG5lcy5ubyIsInZlc3RyZS1zbGlkcmUubm8iLCJ2ZXN0cmUtdG90ZW4ubm8iLCJ2ZXN0dmFnb3kubm8iLCJ2ZXN0dlx4ZTVnXHhmOHkubm8iLCJ2ZXZlbHN0YWQubm8iLCJ2aWsubm8iLCJ2aWtuYS5ubyIsInZpbmRhZmpvcmQubm8iLCJ2b2FnYXQubm8iLCJ2b2xkYS5ubyIsInZv''@;'; put 'put ''c3Mubm8iLCIqLm5wIiwibnIiLCJiaXoubnIiLCJjb20ubnIiLCJlZHUubnIiLCJnb3YubnIiLCJpbmZvLm5yIiwibmV0Lm5yIiwib3JnLm5yIiwibnUiLCJueiIsImFjLm56IiwiY28ubnoiLCJjcmkubnoiLCJnZWVrLm56IiwiZ2VuLm56IiwiZ292dC5ueiIsImhlYWx0aC5ueiIsIml3aS5u''@;'; put 'put ''eiIsImtpd2kubnoiLCJtYW9yaS5ueiIsIm1cdTAxMDFvcmkubnoiLCJtaWwubnoiLCJuZXQubnoiLCJvcmcubnoiLCJwYXJsaWFtZW50Lm56Iiwic2Nob29sLm56Iiwib20iLCJjby5vbSIsImNvbS5vbSIsImVkdS5vbSIsImdvdi5vbSIsIm1lZC5vbSIsIm11c2V1bS5vbSIsIm5ldC5vbSIs''@;'; put 'put ''Im9yZy5vbSIsInByby5vbSIsIm9uaW9uIiwib3JnIiwicGEiLCJhYm8ucGEiLCJhYy5wYSIsImNvbS5wYSIsImVkdS5wYSIsImdvYi5wYSIsImluZy5wYSIsIm1lZC5wYSIsIm5ldC5wYSIsIm5vbS5wYSIsIm9yZy5wYSIsInNsZC5wYSIsInBlIiwiY29tLnBlIiwiZWR1LnBlIiwiZ29iLnBl''@;'; put 'put ''IiwibWlsLnBlIiwibmV0LnBlIiwibm9tLnBlIiwib3JnLnBlIiwicGYiLCJjb20ucGYiLCJlZHUucGYiLCJvcmcucGYiLCIqLnBnIiwicGgiLCJjb20ucGgiLCJlZHUucGgiLCJnb3YucGgiLCJpLnBoIiwibWlsLnBoIiwibmV0LnBoIiwibmdvLnBoIiwib3JnLnBoIiwicGsiLCJhYy5wayIs''@;'; put 'put ''ImJpei5wayIsImNvbS5wayIsImVkdS5wayIsImZhbS5wayIsImdrcC5wayIsImdvYi5wayIsImdvZy5wayIsImdvay5wayIsImdvbi5wayIsImdvcC5wayIsImdvcy5wayIsImdvdi5wayIsIm5ldC5wayIsIm9yZy5wayIsIndlYi5wayIsInBsIiwiY29tLnBsIiwibmV0LnBsIiwib3JnLnBs''@;'; put 'put ''IiwiYWdyby5wbCIsImFpZC5wbCIsImF0bS5wbCIsImF1dG8ucGwiLCJiaXoucGwiLCJlZHUucGwiLCJnbWluYS5wbCIsImdzbS5wbCIsImluZm8ucGwiLCJtYWlsLnBsIiwibWVkaWEucGwiLCJtaWFzdGEucGwiLCJtaWwucGwiLCJuaWVydWNob21vc2NpLnBsIiwibm9tLnBsIiwicGMucGwi''@;'; put 'put ''LCJwb3dpYXQucGwiLCJwcml2LnBsIiwicmVhbGVzdGF0ZS5wbCIsInJlbC5wbCIsInNleC5wbCIsInNob3AucGwiLCJza2xlcC5wbCIsInNvcy5wbCIsInN6a29sYS5wbCIsInRhcmdpLnBsIiwidG0ucGwiLCJ0b3VyaXNtLnBsIiwidHJhdmVsLnBsIiwidHVyeXN0eWthLnBsIiwiZ292LnBs''@;'; put 'put ''IiwiYXAuZ292LnBsIiwiZ3Jpdy5nb3YucGwiLCJpYy5nb3YucGwiLCJpcy5nb3YucGwiLCJrbXBzcC5nb3YucGwiLCJrb25zdWxhdC5nb3YucGwiLCJrcHBzcC5nb3YucGwiLCJrd3AuZ292LnBsIiwia3dwc3AuZ292LnBsIiwibXVwLmdvdi5wbCIsIm13Lmdvdi5wbCIsIm9pYS5nb3YucGwi''@;'; put 'put ''LCJvaXJtLmdvdi5wbCIsIm9rZS5nb3YucGwiLCJvb3cuZ292LnBsIiwib3NjaHIuZ292LnBsIiwib3VtLmdvdi5wbCIsInBhLmdvdi5wbCIsInBpbmIuZ292LnBsIiwicGl3Lmdvdi5wbCIsInBvLmdvdi5wbCIsInByLmdvdi5wbCIsInBzcC5nb3YucGwiLCJwc3NlLmdvdi5wbCIsInB1cC5n''@;'; put 'put ''b3YucGwiLCJyemd3Lmdvdi5wbCIsInNhLmdvdi5wbCIsInNkbi5nb3YucGwiLCJza28uZ292LnBsIiwic28uZ292LnBsIiwic3IuZ292LnBsIiwic3Rhcm9zdHdvLmdvdi5wbCIsInVnLmdvdi5wbCIsInVnaW0uZ292LnBsIiwidW0uZ292LnBsIiwidW1pZy5nb3YucGwiLCJ1cG93Lmdvdi5w''@;'; put 'put ''bCIsInVwcG8uZ292LnBsIiwidXMuZ292LnBsIiwidXcuZ292LnBsIiwidXpzLmdvdi5wbCIsIndpZi5nb3YucGwiLCJ3aWloLmdvdi5wbCIsIndpbmIuZ292LnBsIiwid2lvcy5nb3YucGwiLCJ3aXRkLmdvdi5wbCIsIndpdy5nb3YucGwiLCJ3a3ouZ292LnBsIiwid3NhLmdvdi5wbCIsIndz''@;'; put 'put ''a3IuZ292LnBsIiwid3NzZS5nb3YucGwiLCJ3dW96Lmdvdi5wbCIsInd6bWl1dy5nb3YucGwiLCJ6cC5nb3YucGwiLCJ6cGlzZG4uZ292LnBsIiwiYXVndXN0b3cucGwiLCJiYWJpYS1nb3JhLnBsIiwiYmVkemluLnBsIiwiYmVza2lkeS5wbCIsImJpYWxvd2llemEucGwiLCJiaWFseXN0b2su''@;'; put 'put ''cGwiLCJiaWVsYXdhLnBsIiwiYmllc3pjemFkeS5wbCIsImJvbGVzbGF3aWVjLnBsIiwiYnlkZ29zemN6LnBsIiwiYnl0b20ucGwiLCJjaWVzenluLnBsIiwiY3plbGFkei5wbCIsImN6ZXN0LnBsIiwiZGx1Z29sZWthLnBsIiwiZWxibGFnLnBsIiwiZWxrLnBsIiwiZ2xvZ293LnBsIiwiZ25p''@;'; put 'put ''ZXpuby5wbCIsImdvcmxpY2UucGwiLCJncmFqZXdvLnBsIiwiaWxhd2EucGwiLCJqYXdvcnpuby5wbCIsImplbGVuaWEtZ29yYS5wbCIsImpnb3JhLnBsIiwia2FsaXN6LnBsIiwia2FycGFjei5wbCIsImthcnR1enkucGwiLCJrYXN6dWJ5LnBsIiwia2F0b3dpY2UucGwiLCJrYXppbWllcnot''@;'; put 'put ''ZG9sbnkucGwiLCJrZXBuby5wbCIsImtldHJ6eW4ucGwiLCJrbG9kemtvLnBsIiwia29iaWVyenljZS5wbCIsImtvbG9icnplZy5wbCIsImtvbmluLnBsIiwia29uc2tvd29sYS5wbCIsImt1dG5vLnBsIiwibGFweS5wbCIsImxlYm9yay5wbCIsImxlZ25pY2EucGwiLCJsZXphanNrLnBsIiwi''@;'; put 'put ''bGltYW5vd2EucGwiLCJsb216YS5wbCIsImxvd2ljei5wbCIsImx1YmluLnBsIiwibHVrb3cucGwiLCJtYWxib3JrLnBsIiwibWFsb3BvbHNrYS5wbCIsIm1hem93c3plLnBsIiwibWF6dXJ5LnBsIiwibWllbGVjLnBsIiwibWllbG5vLnBsIiwibXJhZ293by5wbCIsIm5ha2xvLnBsIiwibm93''@;'; put 'put ''YXJ1ZGEucGwiLCJueXNhLnBsIiwib2xhd2EucGwiLCJvbGVja28ucGwiLCJvbGt1c3oucGwiLCJvbHN6dHluLnBsIiwib3BvY3puby5wbCIsIm9wb2xlLnBsIiwib3N0cm9kYS5wbCIsIm9zdHJvbGVrYS5wbCIsIm9zdHJvd2llYy5wbCIsIm9zdHJvd3dsa3AucGwiLCJwaWxhLnBsIiwicGlz''@;'; put 'put ''ei5wbCIsInBvZGhhbGUucGwiLCJwb2RsYXNpZS5wbCIsInBvbGtvd2ljZS5wbCIsInBvbW9yc2tpZS5wbCIsInBvbW9yemUucGwiLCJwcm9jaG93aWNlLnBsIiwicHJ1c3prb3cucGwiLCJwcnpld29yc2sucGwiLCJwdWxhd3kucGwiLCJyYWRvbS5wbCIsInJhd2EtbWF6LnBsIiwicnlibmlr''@;'; put 'put ''LnBsIiwicnplc3pvdy5wbCIsInNhbm9rLnBsIiwic2VqbnkucGwiLCJza29jem93LnBsIiwic2xhc2sucGwiLCJzbHVwc2sucGwiLCJzb3Nub3dpZWMucGwiLCJzdGFsb3dhLXdvbGEucGwiLCJzdGFyYWNob3dpY2UucGwiLCJzdGFyZ2FyZC5wbCIsInN1d2Fsa2kucGwiLCJzd2lkbmljYS5w''@;'; put 'put ''bCIsInN3aWVib2R6aW4ucGwiLCJzd2lub3Vqc2NpZS5wbCIsInN6Y3plY2luLnBsIiwic3pjenl0bm8ucGwiLCJ0YXJub2JyemVnLnBsIiwidGdvcnkucGwiLCJ0dXJlay5wbCIsInR5Y2h5LnBsIiwidXN0a2EucGwiLCJ3YWxicnp5Y2gucGwiLCJ3YXJtaWEucGwiLCJ3YXJzemF3YS5wbCIs''@;'; put 'put ''Indhdy5wbCIsIndlZ3Jvdy5wbCIsIndpZWx1bi5wbCIsIndsb2NsLnBsIiwid2xvY2xhd2VrLnBsIiwid29kemlzbGF3LnBsIiwid29sb21pbi5wbCIsIndyb2NsYXcucGwiLCJ6YWNocG9tb3IucGwiLCJ6YWdhbi5wbCIsInphcm93LnBsIiwiemdvcmEucGwiLCJ6Z29yemVsZWMucGwiLCJw''@;'; put 'put ''bSIsInBuIiwiY28ucG4iLCJlZHUucG4iLCJnb3YucG4iLCJuZXQucG4iLCJvcmcucG4iLCJwb3N0IiwicHIiLCJiaXoucHIiLCJjb20ucHIiLCJlZHUucHIiLCJnb3YucHIiLCJpbmZvLnByIiwiaXNsYS5wciIsIm5hbWUucHIiLCJuZXQucHIiLCJvcmcucHIiLCJwcm8ucHIiLCJhYy5wciIs''@;'; put 'put ''ImVzdC5wciIsInByb2YucHIiLCJwcm8iLCJhYWEucHJvIiwiYWNhLnBybyIsImFjY3QucHJvIiwiYXZvY2F0LnBybyIsImJhci5wcm8iLCJjcGEucHJvIiwiZW5nLnBybyIsImp1ci5wcm8iLCJsYXcucHJvIiwibWVkLnBybyIsInJlY2h0LnBybyIsInBzIiwiY29tLnBzIiwiZWR1LnBzIiwi''@;'; put 'put ''Z292LnBzIiwibmV0LnBzIiwib3JnLnBzIiwicGxvLnBzIiwic2VjLnBzIiwicHQiLCJjb20ucHQiLCJlZHUucHQiLCJnb3YucHQiLCJpbnQucHQiLCJuZXQucHQiLCJub21lLnB0Iiwib3JnLnB0IiwicHVibC5wdCIsInB3IiwiYmVsYXUucHciLCJjby5wdyIsImVkLnB3IiwiZ28ucHciLCJv''@;'; put 'put ''ci5wdyIsInB5IiwiY29tLnB5IiwiY29vcC5weSIsImVkdS5weSIsImdvdi5weSIsIm1pbC5weSIsIm5ldC5weSIsIm9yZy5weSIsInFhIiwiY29tLnFhIiwiZWR1LnFhIiwiZ292LnFhIiwibWlsLnFhIiwibmFtZS5xYSIsIm5ldC5xYSIsIm9yZy5xYSIsInNjaC5xYSIsInJlIiwiYXNzby5y''@;'; put 'put ''ZSIsImNvbS5yZSIsInJvIiwiYXJ0cy5ybyIsImNvbS5ybyIsImZpcm0ucm8iLCJpbmZvLnJvIiwibm9tLnJvIiwibnQucm8iLCJvcmcucm8iLCJyZWMucm8iLCJzdG9yZS5ybyIsInRtLnJvIiwid3d3LnJvIiwicnMiLCJhYy5ycyIsImNvLnJzIiwiZWR1LnJzIiwiZ292LnJzIiwiaW4ucnMi''@;'; put 'put ''LCJvcmcucnMiLCJydSIsInJ3IiwiYWMucnciLCJjby5ydyIsImNvb3AucnciLCJnb3YucnciLCJtaWwucnciLCJuZXQucnciLCJvcmcucnciLCJzYSIsImNvbS5zYSIsImVkdS5zYSIsImdvdi5zYSIsIm1lZC5zYSIsIm5ldC5zYSIsIm9yZy5zYSIsInB1Yi5zYSIsInNjaC5zYSIsInNiIiwi''@;'; put 'put ''Y29tLnNiIiwiZWR1LnNiIiwiZ292LnNiIiwibmV0LnNiIiwib3JnLnNiIiwic2MiLCJjb20uc2MiLCJlZHUuc2MiLCJnb3Yuc2MiLCJuZXQuc2MiLCJvcmcuc2MiLCJzZCIsImNvbS5zZCIsImVkdS5zZCIsImdvdi5zZCIsImluZm8uc2QiLCJtZWQuc2QiLCJuZXQuc2QiLCJvcmcuc2QiLCJ0''@;'; put 'put ''di5zZCIsInNlIiwiYS5zZSIsImFjLnNlIiwiYi5zZSIsImJkLnNlIiwiYnJhbmQuc2UiLCJjLnNlIiwiZC5zZSIsImUuc2UiLCJmLnNlIiwiZmguc2UiLCJmaHNrLnNlIiwiZmh2LnNlIiwiZy5zZSIsImguc2UiLCJpLnNlIiwiay5zZSIsImtvbWZvcmIuc2UiLCJrb21tdW5hbGZvcmJ1bmQu''@;'; put 'put ''c2UiLCJrb212dXguc2UiLCJsLnNlIiwibGFuYmliLnNlIiwibS5zZSIsIm4uc2UiLCJuYXR1cmJydWtzZ3ltbi5zZSIsIm8uc2UiLCJvcmcuc2UiLCJwLnNlIiwicGFydGkuc2UiLCJwcC5zZSIsInByZXNzLnNlIiwici5zZSIsInMuc2UiLCJ0LnNlIiwidG0uc2UiLCJ1LnNlIiwidy5zZSIs''@;'; put 'put ''Inguc2UiLCJ5LnNlIiwiei5zZSIsInNnIiwiY29tLnNnIiwiZWR1LnNnIiwiZ292LnNnIiwibmV0LnNnIiwib3JnLnNnIiwic2giLCJjb20uc2giLCJnb3Yuc2giLCJtaWwuc2giLCJuZXQuc2giLCJvcmcuc2giLCJzaSIsInNqIiwic2siLCJzbCIsImNvbS5zbCIsImVkdS5zbCIsImdvdi5z''@;'; put 'put ''bCIsIm5ldC5zbCIsIm9yZy5zbCIsInNtIiwic24iLCJhcnQuc24iLCJjb20uc24iLCJlZHUuc24iLCJnb3V2LnNuIiwib3JnLnNuIiwicGVyc28uc24iLCJ1bml2LnNuIiwic28iLCJjb20uc28iLCJlZHUuc28iLCJnb3Yuc28iLCJtZS5zbyIsIm5ldC5zbyIsIm9yZy5zbyIsInNyIiwic3Mi''@;'; put 'put ''LCJiaXouc3MiLCJjby5zcyIsImNvbS5zcyIsImVkdS5zcyIsImdvdi5zcyIsIm1lLnNzIiwibmV0LnNzIiwib3JnLnNzIiwic2NoLnNzIiwic3QiLCJjby5zdCIsImNvbS5zdCIsImNvbnN1bGFkby5zdCIsImVkdS5zdCIsImVtYmFpeGFkYS5zdCIsIm1pbC5zdCIsIm5ldC5zdCIsIm9yZy5z''@;'; put 'put ''dCIsInByaW5jaXBlLnN0Iiwic2FvdG9tZS5zdCIsInN0b3JlLnN0Iiwic3UiLCJzdiIsImNvbS5zdiIsImVkdS5zdiIsImdvYi5zdiIsIm9yZy5zdiIsInJlZC5zdiIsInN4IiwiZ292LnN4Iiwic3kiLCJjb20uc3kiLCJlZHUuc3kiLCJnb3Yuc3kiLCJtaWwuc3kiLCJuZXQuc3kiLCJvcmcu''@;'; put 'put ''c3kiLCJzeiIsImFjLnN6IiwiY28uc3oiLCJvcmcuc3oiLCJ0YyIsInRkIiwidGVsIiwidGYiLCJ0ZyIsInRoIiwiYWMudGgiLCJjby50aCIsImdvLnRoIiwiaW4udGgiLCJtaS50aCIsIm5ldC50aCIsIm9yLnRoIiwidGoiLCJhYy50aiIsImJpei50aiIsImNvLnRqIiwiY29tLnRqIiwiZWR1''@;'; put 'put ''LnRqIiwiZ28udGoiLCJnb3YudGoiLCJpbnQudGoiLCJtaWwudGoiLCJuYW1lLnRqIiwibmV0LnRqIiwibmljLnRqIiwib3JnLnRqIiwidGVzdC50aiIsIndlYi50aiIsInRrIiwidGwiLCJnb3YudGwiLCJ0bSIsImNvLnRtIiwiY29tLnRtIiwiZWR1LnRtIiwiZ292LnRtIiwibWlsLnRtIiwi''@;'; put 'put ''bmV0LnRtIiwibm9tLnRtIiwib3JnLnRtIiwidG4iLCJjb20udG4iLCJlbnMudG4iLCJmaW4udG4iLCJnb3YudG4iLCJpbmQudG4iLCJpbmZvLnRuIiwiaW50bC50biIsIm1pbmNvbS50biIsIm5hdC50biIsIm5ldC50biIsIm9yZy50biIsInBlcnNvLnRuIiwidG91cmlzbS50biIsInRvIiwi''@;'; put 'put ''Y29tLnRvIiwiZWR1LnRvIiwiZ292LnRvIiwibWlsLnRvIiwibmV0LnRvIiwib3JnLnRvIiwidHIiLCJhdi50ciIsImJicy50ciIsImJlbC50ciIsImJpei50ciIsImNvbS50ciIsImRyLnRyIiwiZWR1LnRyIiwiZ2VuLnRyIiwiZ292LnRyIiwiaW5mby50ciIsImsxMi50ciIsImtlcC50ciIs''@;'; put 'put ''Im1pbC50ciIsIm5hbWUudHIiLCJuZXQudHIiLCJvcmcudHIiLCJwb2wudHIiLCJ0ZWwudHIiLCJ0c2sudHIiLCJ0di50ciIsIndlYi50ciIsIm5jLnRyIiwiZ292Lm5jLnRyIiwidHQiLCJiaXoudHQiLCJjby50dCIsImNvbS50dCIsImVkdS50dCIsImdvdi50dCIsImluZm8udHQiLCJtaWwu''@;'; put 'put ''dHQiLCJuYW1lLnR0IiwibmV0LnR0Iiwib3JnLnR0IiwicHJvLnR0IiwidHYiLCJ0dyIsImNsdWIudHciLCJjb20udHciLCJlYml6LnR3IiwiZWR1LnR3IiwiZ2FtZS50dyIsImdvdi50dyIsImlkdi50dyIsIm1pbC50dyIsIm5ldC50dyIsIm9yZy50dyIsInR6IiwiYWMudHoiLCJjby50eiIs''@;'; put 'put ''ImdvLnR6IiwiaG90ZWwudHoiLCJpbmZvLnR6IiwibWUudHoiLCJtaWwudHoiLCJtb2JpLnR6IiwibmUudHoiLCJvci50eiIsInNjLnR6IiwidHYudHoiLCJ1YSIsImNvbS51YSIsImVkdS51YSIsImdvdi51YSIsImluLnVhIiwibmV0LnVhIiwib3JnLnVhIiwiY2hlcmthc3N5LnVhIiwiY2hl''@;'; put 'put ''cmthc3kudWEiLCJjaGVybmlnb3YudWEiLCJjaGVybmloaXYudWEiLCJjaGVybml2dHNpLnVhIiwiY2hlcm5vdnRzeS51YSIsImNrLnVhIiwiY24udWEiLCJjci51YSIsImNyaW1lYS51YSIsImN2LnVhIiwiZG4udWEiLCJkbmVwcm9wZXRyb3Zzay51YSIsImRuaXByb3BldHJvdnNrLnVhIiwi''@;'; put 'put ''ZG9uZXRzay51YSIsImRwLnVhIiwiaWYudWEiLCJpdmFuby1mcmFua2l2c2sudWEiLCJraC51YSIsImtoYXJraXYudWEiLCJraGFya292LnVhIiwia2hlcnNvbi51YSIsImtobWVsbml0c2tpeS51YSIsImtobWVsbnl0c2t5aS51YSIsImtpZXYudWEiLCJraXJvdm9ncmFkLnVhIiwia20udWEi''@;'; put 'put ''LCJrci51YSIsImtyb3B5dm55dHNreWkudWEiLCJrcnltLnVhIiwia3MudWEiLCJrdi51YSIsImt5aXYudWEiLCJsZy51YSIsImx0LnVhIiwibHVnYW5zay51YSIsImx1aGFuc2sudWEiLCJsdXRzay51YSIsImx2LnVhIiwibHZpdi51YSIsIm1rLnVhIiwibXlrb2xhaXYudWEiLCJuaWtvbGFl''@;'; put 'put ''di51YSIsIm9kLnVhIiwib2Rlc2EudWEiLCJvZGVzc2EudWEiLCJwbC51YSIsInBvbHRhdmEudWEiLCJyaXZuZS51YSIsInJvdm5vLnVhIiwicnYudWEiLCJzYi51YSIsInNlYmFzdG9wb2wudWEiLCJzZXZhc3RvcG9sLnVhIiwic20udWEiLCJzdW15LnVhIiwidGUudWEiLCJ0ZXJub3BpbC51''@;'; put 'put ''YSIsInV6LnVhIiwidXpoZ29yb2QudWEiLCJ1emhob3JvZC51YSIsInZpbm5pY2EudWEiLCJ2aW5ueXRzaWEudWEiLCJ2bi51YSIsInZvbHluLnVhIiwieWFsdGEudWEiLCJ6YWthcnBhdHRpYS51YSIsInphcG9yaXpoemhlLnVhIiwiemFwb3Jpemh6aGlhLnVhIiwiemhpdG9taXIudWEiLCJ6''@;'; put 'put ''aHl0b215ci51YSIsInpwLnVhIiwienQudWEiLCJ1ZyIsImFjLnVnIiwiY28udWciLCJjb20udWciLCJnby51ZyIsIm5lLnVnIiwib3IudWciLCJvcmcudWciLCJzYy51ZyIsInVrIiwiYWMudWsiLCJjby51ayIsImdvdi51ayIsImx0ZC51ayIsIm1lLnVrIiwibmV0LnVrIiwibmhzLnVrIiwi''@;'; put 'put ''b3JnLnVrIiwicGxjLnVrIiwicG9saWNlLnVrIiwiKi5zY2gudWsiLCJ1cyIsImRuaS51cyIsImZlZC51cyIsImlzYS51cyIsImtpZHMudXMiLCJuc24udXMiLCJhay51cyIsImFsLnVzIiwiYXIudXMiLCJhcy51cyIsImF6LnVzIiwiY2EudXMiLCJjby51cyIsImN0LnVzIiwiZGMudXMiLCJk''@;'; put 'put ''ZS51cyIsImZsLnVzIiwiZ2EudXMiLCJndS51cyIsImhpLnVzIiwiaWEudXMiLCJpZC51cyIsImlsLnVzIiwiaW4udXMiLCJrcy51cyIsImt5LnVzIiwibGEudXMiLCJtYS51cyIsIm1kLnVzIiwibWUudXMiLCJtaS51cyIsIm1uLnVzIiwibW8udXMiLCJtcy51cyIsIm10LnVzIiwibmMudXMi''@;'; put 'put ''LCJuZC51cyIsIm5lLnVzIiwibmgudXMiLCJuai51cyIsIm5tLnVzIiwibnYudXMiLCJueS51cyIsIm9oLnVzIiwib2sudXMiLCJvci51cyIsInBhLnVzIiwicHIudXMiLCJyaS51cyIsInNjLnVzIiwic2QudXMiLCJ0bi51cyIsInR4LnVzIiwidXQudXMiLCJ2YS51cyIsInZpLnVzIiwidnQu''@;'; put 'put ''dXMiLCJ3YS51cyIsIndpLnVzIiwid3YudXMiLCJ3eS51cyIsImsxMi5hay51cyIsImsxMi5hbC51cyIsImsxMi5hci51cyIsImsxMi5hcy51cyIsImsxMi5hei51cyIsImsxMi5jYS51cyIsImsxMi5jby51cyIsImsxMi5jdC51cyIsImsxMi5kYy51cyIsImsxMi5mbC51cyIsImsxMi5nYS51''@;'; put 'put ''cyIsImsxMi5ndS51cyIsImsxMi5pYS51cyIsImsxMi5pZC51cyIsImsxMi5pbC51cyIsImsxMi5pbi51cyIsImsxMi5rcy51cyIsImsxMi5reS51cyIsImsxMi5sYS51cyIsImsxMi5tYS51cyIsImsxMi5tZC51cyIsImsxMi5tZS51cyIsImsxMi5taS51cyIsImsxMi5tbi51cyIsImsxMi5t''@;'; put 'put ''by51cyIsImsxMi5tcy51cyIsImsxMi5tdC51cyIsImsxMi5uYy51cyIsImsxMi5uZS51cyIsImsxMi5uaC51cyIsImsxMi5uai51cyIsImsxMi5ubS51cyIsImsxMi5udi51cyIsImsxMi5ueS51cyIsImsxMi5vaC51cyIsImsxMi5vay51cyIsImsxMi5vci51cyIsImsxMi5wYS51cyIsImsx''@;'; put 'put ''Mi5wci51cyIsImsxMi5zYy51cyIsImsxMi50bi51cyIsImsxMi50eC51cyIsImsxMi51dC51cyIsImsxMi52YS51cyIsImsxMi52aS51cyIsImsxMi52dC51cyIsImsxMi53YS51cyIsImsxMi53aS51cyIsImNjLmFrLnVzIiwibGliLmFrLnVzIiwiY2MuYWwudXMiLCJsaWIuYWwudXMiLCJj''@;'; put 'put ''Yy5hci51cyIsImxpYi5hci51cyIsImNjLmFzLnVzIiwibGliLmFzLnVzIiwiY2MuYXoudXMiLCJsaWIuYXoudXMiLCJjYy5jYS51cyIsImxpYi5jYS51cyIsImNjLmNvLnVzIiwibGliLmNvLnVzIiwiY2MuY3QudXMiLCJsaWIuY3QudXMiLCJjYy5kYy51cyIsImxpYi5kYy51cyIsImNjLmRl''@;'; put 'put ''LnVzIiwiY2MuZmwudXMiLCJjYy5nYS51cyIsImNjLmd1LnVzIiwiY2MuaGkudXMiLCJjYy5pYS51cyIsImNjLmlkLnVzIiwiY2MuaWwudXMiLCJjYy5pbi51cyIsImNjLmtzLnVzIiwiY2Mua3kudXMiLCJjYy5sYS51cyIsImNjLm1hLnVzIiwiY2MubWQudXMiLCJjYy5tZS51cyIsImNjLm1p''@;'; put 'put ''LnVzIiwiY2MubW4udXMiLCJjYy5tby51cyIsImNjLm1zLnVzIiwiY2MubXQudXMiLCJjYy5uYy51cyIsImNjLm5kLnVzIiwiY2MubmUudXMiLCJjYy5uaC51cyIsImNjLm5qLnVzIiwiY2Mubm0udXMiLCJjYy5udi51cyIsImNjLm55LnVzIiwiY2Mub2gudXMiLCJjYy5vay51cyIsImNjLm9y''@;'; put 'put ''LnVzIiwiY2MucGEudXMiLCJjYy5wci51cyIsImNjLnJpLnVzIiwiY2Muc2MudXMiLCJjYy5zZC51cyIsImNjLnRuLnVzIiwiY2MudHgudXMiLCJjYy51dC51cyIsImNjLnZhLnVzIiwiY2MudmkudXMiLCJjYy52dC51cyIsImNjLndhLnVzIiwiY2Mud2kudXMiLCJjYy53di51cyIsImNjLnd5''@;'; put 'put ''LnVzIiwiazEyLnd5LnVzIiwibGliLmZsLnVzIiwibGliLmdhLnVzIiwibGliLmd1LnVzIiwibGliLmhpLnVzIiwibGliLmlhLnVzIiwibGliLmlkLnVzIiwibGliLmlsLnVzIiwibGliLmluLnVzIiwibGliLmtzLnVzIiwibGliLmt5LnVzIiwibGliLmxhLnVzIiwibGliLm1hLnVzIiwibGli''@;'; put 'put ''Lm1kLnVzIiwibGliLm1lLnVzIiwibGliLm1pLnVzIiwibGliLm1uLnVzIiwibGliLm1vLnVzIiwibGliLm1zLnVzIiwibGliLm10LnVzIiwibGliLm5jLnVzIiwibGliLm5kLnVzIiwibGliLm5lLnVzIiwibGliLm5oLnVzIiwibGliLm5qLnVzIiwibGliLm5tLnVzIiwibGliLm52LnVzIiwi''@;'; put 'put ''bGliLm55LnVzIiwibGliLm9oLnVzIiwibGliLm9rLnVzIiwibGliLm9yLnVzIiwibGliLnBhLnVzIiwibGliLnByLnVzIiwibGliLnJpLnVzIiwibGliLnNjLnVzIiwibGliLnNkLnVzIiwibGliLnRuLnVzIiwibGliLnR4LnVzIiwibGliLnV0LnVzIiwibGliLnZhLnVzIiwibGliLnZpLnVz''@;'; put 'put ''IiwibGliLnZ0LnVzIiwibGliLndhLnVzIiwibGliLndpLnVzIiwibGliLnd5LnVzIiwiY2h0ci5rMTIubWEudXMiLCJwYXJvY2guazEyLm1hLnVzIiwicHZ0LmsxMi5tYS51cyIsImFubi1hcmJvci5taS51cyIsImNvZy5taS51cyIsImRzdC5taS51cyIsImVhdG9uLm1pLnVzIiwiZ2VuLm1p''@;'; put 'put ''LnVzIiwibXVzLm1pLnVzIiwidGVjLm1pLnVzIiwid2FzaHRlbmF3Lm1pLnVzIiwidXkiLCJjb20udXkiLCJlZHUudXkiLCJndWIudXkiLCJtaWwudXkiLCJuZXQudXkiLCJvcmcudXkiLCJ1eiIsImNvLnV6IiwiY29tLnV6IiwibmV0LnV6Iiwib3JnLnV6IiwidmEiLCJ2YyIsImNvbS52YyIs''@;'; put 'put ''ImVkdS52YyIsImdvdi52YyIsIm1pbC52YyIsIm5ldC52YyIsIm9yZy52YyIsInZlIiwiYXJ0cy52ZSIsImJpYi52ZSIsImNvLnZlIiwiY29tLnZlIiwiZTEyLnZlIiwiZWR1LnZlIiwiZmlybS52ZSIsImdvYi52ZSIsImdvdi52ZSIsImluZm8udmUiLCJpbnQudmUiLCJtaWwudmUiLCJuZXQu''@;'; put 'put ''dmUiLCJub20udmUiLCJvcmcudmUiLCJyYXIudmUiLCJyZWMudmUiLCJzdG9yZS52ZSIsInRlYy52ZSIsIndlYi52ZSIsInZnIiwidmkiLCJjby52aSIsImNvbS52aSIsImsxMi52aSIsIm5ldC52aSIsIm9yZy52aSIsInZuIiwiYWMudm4iLCJhaS52biIsImJpei52biIsImNvbS52biIsImVk''@;'; put 'put ''dS52biIsImdvdi52biIsImhlYWx0aC52biIsImlkLnZuIiwiaW5mby52biIsImludC52biIsImlvLnZuIiwibmFtZS52biIsIm5ldC52biIsIm9yZy52biIsInByby52biIsImFuZ2lhbmcudm4iLCJiYWNnaWFuZy52biIsImJhY2thbi52biIsImJhY2xpZXUudm4iLCJiYWNuaW5oLnZuIiwi''@;'; put 'put ''YmFyaWEtdnVuZ3RhdS52biIsImJlbnRyZS52biIsImJpbmhkaW5oLnZuIiwiYmluaGR1b25nLnZuIiwiYmluaHBodW9jLnZuIiwiYmluaHRodWFuLnZuIiwiY2FtYXUudm4iLCJjYW50aG8udm4iLCJjYW9iYW5nLnZuIiwiZGFrbGFrLnZuIiwiZGFrbm9uZy52biIsImRhbmFuZy52biIsImRp''@;'; put 'put ''ZW5iaWVuLnZuIiwiZG9uZ25haS52biIsImRvbmd0aGFwLnZuIiwiZ2lhbGFpLnZuIiwiaGFnaWFuZy52biIsImhhaWR1b25nLnZuIiwiaGFpcGhvbmcudm4iLCJoYW5hbS52biIsImhhbm9pLnZuIiwiaGF0aW5oLnZuIiwiaGF1Z2lhbmcudm4iLCJob2FiaW5oLnZuIiwiaHVuZ3llbi52biIs''@;'; put 'put ''ImtoYW5oaG9hLnZuIiwia2llbmdpYW5nLnZuIiwia29udHVtLnZuIiwibGFpY2hhdS52biIsImxhbWRvbmcudm4iLCJsYW5nc29uLnZuIiwibGFvY2FpLnZuIiwibG9uZ2FuLnZuIiwibmFtZGluaC52biIsIm5naGVhbi52biIsIm5pbmhiaW5oLnZuIiwibmluaHRodWFuLnZuIiwicGh1dGhv''@;'; put 'put ''LnZuIiwicGh1eWVuLnZuIiwicXVhbmdiaW5oLnZuIiwicXVhbmduYW0udm4iLCJxdWFuZ25nYWkudm4iLCJxdWFuZ25pbmgudm4iLCJxdWFuZ3RyaS52biIsInNvY3RyYW5nLnZuIiwic29ubGEudm4iLCJ0YXluaW5oLnZuIiwidGhhaWJpbmgudm4iLCJ0aGFpbmd1eWVuLnZuIiwidGhhbmho''@;'; put 'put ''b2Eudm4iLCJ0aGFuaHBob2hvY2hpbWluaC52biIsInRodWF0aGllbmh1ZS52biIsInRpZW5naWFuZy52biIsInRyYXZpbmgudm4iLCJ0dXllbnF1YW5nLnZuIiwidmluaGxvbmcudm4iLCJ2aW5ocGh1Yy52biIsInllbmJhaS52biIsInZ1IiwiY29tLnZ1IiwiZWR1LnZ1IiwibmV0LnZ1Iiwi''@;'; put 'put ''b3JnLnZ1Iiwid2YiLCJ3cyIsImNvbS53cyIsImVkdS53cyIsImdvdi53cyIsIm5ldC53cyIsIm9yZy53cyIsInl0IiwiXHUwNjI3XHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjI3XHUwNjJhIiwiXHUwNTcwXHUwNTYxXHUwNTc1IiwiXHUwOWFjXHUwOWJlXHUwOTgyXHUwOWIyXHUwOWJlIiwiXHUw''@;'; put 'put ''NDMxXHUwNDMzIiwiXHUwNjI3XHUwNjQ0XHUwNjI4XHUwNjJkXHUwNjMxXHUwNjRhXHUwNjQ2IiwiXHUwNDMxXHUwNDM1XHUwNDNiIiwiXHU0ZTJkXHU1NmZkIiwiXHU0ZTJkXHU1NzBiIiwiXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjMyXHUwNjI3XHUwNjI2XHUwNjMxIiwiXHUwNjQ1XHUwNjM1''@;'; put 'put ''XHUwNjMxIiwiXHUwNDM1XHUwNDRlIiwiXHUwM2I1XHUwM2M1IiwiXHUwNjQ1XHUwNjQ4XHUwNjMxXHUwNjRhXHUwNjJhXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI3IiwiXHUxMGQyXHUxMGQ0IiwiXHUwM2I1XHUwM2JiIiwiXHU5OTk5XHU2ZTJmIiwiXHU1MDBiXHU0ZWJhLlx1OTk5OVx1NmUy''@;'; put 'put ''ZiIsIlx1NTE2Y1x1NTNmOC5cdTk5OTlcdTZlMmYiLCJcdTY1M2ZcdTVlOWMuXHU5OTk5XHU2ZTJmIiwiXHU2NTU5XHU4MGIyLlx1OTk5OVx1NmUyZiIsIlx1N2Q0NFx1N2U1NC5cdTk5OTlcdTZlMmYiLCJcdTdkYjJcdTdkNjEuXHU5OTk5XHU2ZTJmIiwiXHUwY2FkXHUwY2JlXHUwY2IwXHUw''@;'; put 'put ''Y2E0IiwiXHUwYjJkXHUwYjNlXHUwYjMwXHUwYjI0IiwiXHUwOWFkXHUwOWJlXHUwOWYwXHUwOWE0IiwiXHUwOTJkXHUwOTNlXHUwOTMwXHUwOTI0XHUwOTJlXHUwOTRkIiwiXHUwOTJkXHUwOTNlXHUwOTMwXHUwOTRiXHUwOTI0IiwiXHUwNjgwXHUwNjI3XHUwNjMxXHUwNjJhIiwiXHUwZDJk''@;'; put 'put ''XHUwZDNlXHUwZDMwXHUwZDI0XHUwZDAyIiwiXHUwOTJkXHUwOTNlXHUwOTMwXHUwOTI0IiwiXHUwNjI4XHUwNjI3XHUwNjMxXHUwNjJhIiwiXHUwNjI4XHUwNmJlXHUwNjI3XHUwNjMxXHUwNjJhIiwiXHUwYzJkXHUwYzNlXHUwYzMwXHUwYzI0XHUwYzRkIiwiXHUwYWFkXHUwYWJlXHUwYWIw''@;'; put 'put ''XHUwYWE0IiwiXHUwYTJkXHUwYTNlXHUwYTMwXHUwYTI0IiwiXHUwOWFkXHUwOWJlXHUwOWIwXHUwOWE0IiwiXHUwYjg3XHUwYmE4XHUwYmNkXHUwYmE0XHUwYmJmXHUwYmFmXHUwYmJlIiwiXHUwNjI3XHUwNmNjXHUwNjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjI3XHUwNjRhXHUwNjMxXHUwNjI3''@;'; put 'put ''XHUwNjQ2IiwiXHUwNjM5XHUwNjMxXHUwNjI3XHUwNjQyIiwiXHUwNjI3XHUwNjQ0XHUwNjI3XHUwNjMxXHUwNjJmXHUwNjQ2IiwiXHVkNTVjXHVhZDZkIiwiXHUwNDliXHUwNDMwXHUwNDM3IiwiXHUwZWE1XHUwZWIyXHUwZWE3IiwiXHUwZGJkXHUwZDgyXHUwZDlhXHUwZGNmIiwiXHUwYjg3''@;'; put 'put ''XHUwYmIyXHUwYjk5XHUwYmNkXHUwYjk1XHUwYmM4IiwiXHUwNjI3XHUwNjQ0XHUwNjQ1XHUwNjNhXHUwNjMxXHUwNjI4IiwiXHUwNDNjXHUwNDNhXHUwNDM0IiwiXHUwNDNjXHUwNDNlXHUwNDNkIiwiXHU2ZmIzXHU5NTgwIiwiXHU2ZmIzXHU5NWU4IiwiXHUwNjQ1XHUwNjQ0XHUwNjRhXHUw''@;'; put 'put ''NjMzXHUwNjRhXHUwNjI3IiwiXHUwNjM5XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjdlXHUwNjI3XHUwNmE5XHUwNjMzXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjdlXHUwNjI3XHUwNjQzXHUwNjMzXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjQxXHUwNjQ0XHUwNjMzXHUwNjM3XHUwNjRh''@;'; put 'put ''XHUwNjQ2IiwiXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDMwXHUwNDNhLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZVx1MDQzMVx1MDQ0MC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2VcdTA0MzQuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNlXHUwNDQwXHUwNDMzLlx1MDQ0MVx1''@;'; put 'put ''MDQ0MFx1MDQzMSIsIlx1MDQzZlx1MDQ0MC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0NDNcdTA0M2ZcdTA0NDAuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDQwXHUwNDQ0IiwiXHUwNjQyXHUwNjM3XHUwNjMxIiwiXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjM5XHUwNjQ4XHUwNjJmXHUwNjRh''@;'; put 'put ''XHUwNjI5IiwiXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjM5XHUwNjQ4XHUwNjJmXHUwNmNjXHUwNjI5IiwiXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjM5XHUwNjQ4XHUwNjJmXHUwNmNjXHUwNmMzIiwiXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjM5XHUwNjQ4XHUwNjJmXHUwNjRhXHUwNjQ3IiwiXHUw''@;'; put 'put ''NjMzXHUwNjQ4XHUwNjJmXHUwNjI3XHUwNjQ2IiwiXHU2NWIwXHU1MmEwXHU1NzYxIiwiXHUwYjlhXHUwYmJmXHUwYjk5XHUwYmNkXHUwYjk1XHUwYmFhXHUwYmNkXHUwYmFhXHUwYmMyXHUwYmIwXHUwYmNkIiwiXHUwNjMzXHUwNjQ4XHUwNjMxXHUwNjRhXHUwNjI5IiwiXHUwNjMzXHUwNjQ4''@;'; put 'put ''XHUwNjMxXHUwNjRhXHUwNjI3IiwiXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTE3XHUwZTJiXHUwZTMyXHUwZTIzLlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUxOFx1MGUzOFx1MGUyM1x1MGUwMVx1MGUzNFx1MGUwOC5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlNDBcdTBlMTlcdTBlNDdc''@;'; put 'put ''dTBlMTUuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTIzXHUwZTMxXHUwZTEwXHUwZTFhXHUwZTMyXHUwZTI1Llx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUyOFx1MGUzNlx1MGUwMVx1MGUyOVx1MGUzMi5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMmRcdTBlMDdcdTBlMDRcdTBlNGNcdTBl''@;'; put 'put ''MDFcdTBlMjMuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwNjJhXHUwNjQ4XHUwNjQ2XHUwNjMzIiwiXHU1M2YwXHU3MDYzIiwiXHU1M2YwXHU2ZTdlIiwiXHU4MWZhXHU3MDYzIiwiXHUwNDQzXHUwNDNhXHUwNDQwIiwiXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ1XHUwNjQ2IiwieHh4IiwieWUi''@;'; put 'put ''LCJjb20ueWUiLCJlZHUueWUiLCJnb3YueWUiLCJtaWwueWUiLCJuZXQueWUiLCJvcmcueWUiLCJhYy56YSIsImFncmljLnphIiwiYWx0LnphIiwiY28uemEiLCJlZHUuemEiLCJnb3YuemEiLCJncm9uZGFyLnphIiwibGF3LnphIiwibWlsLnphIiwibmV0LnphIiwibmdvLnphIiwibmljLnph''@;'; put 'put ''IiwibmlzLnphIiwibm9tLnphIiwib3JnLnphIiwic2Nob29sLnphIiwidG0uemEiLCJ3ZWIuemEiLCJ6bSIsImFjLnptIiwiYml6LnptIiwiY28uem0iLCJjb20uem0iLCJlZHUuem0iLCJnb3Yuem0iLCJpbmZvLnptIiwibWlsLnptIiwibmV0LnptIiwib3JnLnptIiwic2NoLnptIiwienci''@;'; put 'put ''LCJhYy56dyIsImNvLnp3IiwiZ292Lnp3IiwibWlsLnp3Iiwib3JnLnp3IiwiYWFhIiwiYWFycCIsImFiYiIsImFiYm90dCIsImFiYnZpZSIsImFiYyIsImFibGUiLCJhYm9nYWRvIiwiYWJ1ZGhhYmkiLCJhY2FkZW15IiwiYWNjZW50dXJlIiwiYWNjb3VudGFudCIsImFjY291bnRhbnRzIiwi''@;'; put 'put ''YWNvIiwiYWN0b3IiLCJhZHMiLCJhZHVsdCIsImFlZyIsImFldG5hIiwiYWZsIiwiYWZyaWNhIiwiYWdha2hhbiIsImFnZW5jeSIsImFpZyIsImFpcmJ1cyIsImFpcmZvcmNlIiwiYWlydGVsIiwiYWtkbiIsImFsaWJhYmEiLCJhbGlwYXkiLCJhbGxmaW5hbnoiLCJhbGxzdGF0ZSIsImFsbHki''@;'; put 'put ''LCJhbHNhY2UiLCJhbHN0b20iLCJhbWF6b24iLCJhbWVyaWNhbmV4cHJlc3MiLCJhbWVyaWNhbmZhbWlseSIsImFtZXgiLCJhbWZhbSIsImFtaWNhIiwiYW1zdGVyZGFtIiwiYW5hbHl0aWNzIiwiYW5kcm9pZCIsImFucXVhbiIsImFueiIsImFvbCIsImFwYXJ0bWVudHMiLCJhcHAiLCJhcHBs''@;'; put 'put ''ZSIsImFxdWFyZWxsZSIsImFyYWIiLCJhcmFtY28iLCJhcmNoaSIsImFybXkiLCJhcnQiLCJhcnRlIiwiYXNkYSIsImFzc29jaWF0ZXMiLCJhdGhsZXRhIiwiYXR0b3JuZXkiLCJhdWN0aW9uIiwiYXVkaSIsImF1ZGlibGUiLCJhdWRpbyIsImF1c3Bvc3QiLCJhdXRob3IiLCJhdXRvIiwiYXV0''@;'; put 'put ''b3MiLCJhd3MiLCJheGEiLCJhenVyZSIsImJhYnkiLCJiYWlkdSIsImJhbmFtZXgiLCJiYW5kIiwiYmFuayIsImJhciIsImJhcmNlbG9uYSIsImJhcmNsYXljYXJkIiwiYmFyY2xheXMiLCJiYXJlZm9vdCIsImJhcmdhaW5zIiwiYmFzZWJhbGwiLCJiYXNrZXRiYWxsIiwiYmF1aGF1cyIsImJh''@;'; put 'put ''eWVybiIsImJiYyIsImJidCIsImJidmEiLCJiY2ciLCJiY24iLCJiZWF0cyIsImJlYXV0eSIsImJlZXIiLCJiZW50bGV5IiwiYmVybGluIiwiYmVzdCIsImJlc3RidXkiLCJiZXQiLCJiaGFydGkiLCJiaWJsZSIsImJpZCIsImJpa2UiLCJiaW5nIiwiYmluZ28iLCJiaW8iLCJibGFjayIsImJs''@;'; put 'put ''YWNrZnJpZGF5IiwiYmxvY2tidXN0ZXIiLCJibG9nIiwiYmxvb21iZXJnIiwiYmx1ZSIsImJtcyIsImJtdyIsImJucHBhcmliYXMiLCJib2F0cyIsImJvZWhyaW5nZXIiLCJib2ZhIiwiYm9tIiwiYm9uZCIsImJvbyIsImJvb2siLCJib29raW5nIiwiYm9zY2giLCJib3N0aWsiLCJib3N0b24i''@;'; put 'put ''LCJib3QiLCJib3V0aXF1ZSIsImJveCIsImJyYWRlc2NvIiwiYnJpZGdlc3RvbmUiLCJicm9hZHdheSIsImJyb2tlciIsImJyb3RoZXIiLCJicnVzc2VscyIsImJ1aWxkIiwiYnVpbGRlcnMiLCJidXNpbmVzcyIsImJ1eSIsImJ1enoiLCJiemgiLCJjYWIiLCJjYWZlIiwiY2FsIiwiY2FsbCIs''@;'; put 'put ''ImNhbHZpbmtsZWluIiwiY2FtIiwiY2FtZXJhIiwiY2FtcCIsImNhbm9uIiwiY2FwZXRvd24iLCJjYXBpdGFsIiwiY2FwaXRhbG9uZSIsImNhciIsImNhcmF2YW4iLCJjYXJkcyIsImNhcmUiLCJjYXJlZXIiLCJjYXJlZXJzIiwiY2FycyIsImNhc2EiLCJjYXNlIiwiY2FzaCIsImNhc2lubyIs''@;'; put 'put ''ImNhdGVyaW5nIiwiY2F0aG9saWMiLCJjYmEiLCJjYm4iLCJjYnJlIiwiY2VudGVyIiwiY2VvIiwiY2VybiIsImNmYSIsImNmZCIsImNoYW5lbCIsImNoYW5uZWwiLCJjaGFyaXR5IiwiY2hhc2UiLCJjaGF0IiwiY2hlYXAiLCJjaGludGFpIiwiY2hyaXN0bWFzIiwiY2hyb21lIiwiY2h1cmNo''@;'; put 'put ''IiwiY2lwcmlhbmkiLCJjaXJjbGUiLCJjaXNjbyIsImNpdGFkZWwiLCJjaXRpIiwiY2l0aWMiLCJjaXR5IiwiY2xhaW1zIiwiY2xlYW5pbmciLCJjbGljayIsImNsaW5pYyIsImNsaW5pcXVlIiwiY2xvdGhpbmciLCJjbG91ZCIsImNsdWIiLCJjbHVibWVkIiwiY29hY2giLCJjb2RlcyIsImNv''@;'; put 'put ''ZmZlZSIsImNvbGxlZ2UiLCJjb2xvZ25lIiwiY29tbWJhbmsiLCJjb21tdW5pdHkiLCJjb21wYW55IiwiY29tcGFyZSIsImNvbXB1dGVyIiwiY29tc2VjIiwiY29uZG9zIiwiY29uc3RydWN0aW9uIiwiY29uc3VsdGluZyIsImNvbnRhY3QiLCJjb250cmFjdG9ycyIsImNvb2tpbmciLCJjb29s''@;'; put 'put ''IiwiY29yc2ljYSIsImNvdW50cnkiLCJjb3Vwb24iLCJjb3Vwb25zIiwiY291cnNlcyIsImNwYSIsImNyZWRpdCIsImNyZWRpdGNhcmQiLCJjcmVkaXR1bmlvbiIsImNyaWNrZXQiLCJjcm93biIsImNycyIsImNydWlzZSIsImNydWlzZXMiLCJjdWlzaW5lbGxhIiwiY3ltcnUiLCJjeW91Iiwi''@;'; put 'put ''ZGFkIiwiZGFuY2UiLCJkYXRhIiwiZGF0ZSIsImRhdGluZyIsImRhdHN1biIsImRheSIsImRjbGsiLCJkZHMiLCJkZWFsIiwiZGVhbGVyIiwiZGVhbHMiLCJkZWdyZWUiLCJkZWxpdmVyeSIsImRlbGwiLCJkZWxvaXR0ZSIsImRlbHRhIiwiZGVtb2NyYXQiLCJkZW50YWwiLCJkZW50aXN0Iiwi''@;'; put 'put ''ZGVzaSIsImRlc2lnbiIsImRldiIsImRobCIsImRpYW1vbmRzIiwiZGlldCIsImRpZ2l0YWwiLCJkaXJlY3QiLCJkaXJlY3RvcnkiLCJkaXNjb3VudCIsImRpc2NvdmVyIiwiZGlzaCIsImRpeSIsImRucCIsImRvY3MiLCJkb2N0b3IiLCJkb2ciLCJkb21haW5zIiwiZG90IiwiZG93bmxvYWQi''@;'; put 'put ''LCJkcml2ZSIsImR0diIsImR1YmFpIiwiZHVubG9wIiwiZHVwb250IiwiZHVyYmFuIiwiZHZhZyIsImR2ciIsImVhcnRoIiwiZWF0IiwiZWNvIiwiZWRla2EiLCJlZHVjYXRpb24iLCJlbWFpbCIsImVtZXJjayIsImVuZXJneSIsImVuZ2luZWVyIiwiZW5naW5lZXJpbmciLCJlbnRlcnByaXNl''@;'; put 'put ''cyIsImVwc29uIiwiZXF1aXBtZW50IiwiZXJpY3Nzb24iLCJlcm5pIiwiZXNxIiwiZXN0YXRlIiwiZXVyb3Zpc2lvbiIsImV1cyIsImV2ZW50cyIsImV4Y2hhbmdlIiwiZXhwZXJ0IiwiZXhwb3NlZCIsImV4cHJlc3MiLCJleHRyYXNwYWNlIiwiZmFnZSIsImZhaWwiLCJmYWlyd2luZHMiLCJm''@;'; put 'put ''YWl0aCIsImZhbWlseSIsImZhbiIsImZhbnMiLCJmYXJtIiwiZmFybWVycyIsImZhc2hpb24iLCJmYXN0IiwiZmVkZXgiLCJmZWVkYmFjayIsImZlcnJhcmkiLCJmZXJyZXJvIiwiZmlkZWxpdHkiLCJmaWRvIiwiZmlsbSIsImZpbmFsIiwiZmluYW5jZSIsImZpbmFuY2lhbCIsImZpcmUiLCJm''@;'; put 'put ''aXJlc3RvbmUiLCJmaXJtZGFsZSIsImZpc2giLCJmaXNoaW5nIiwiZml0IiwiZml0bmVzcyIsImZsaWNrciIsImZsaWdodHMiLCJmbGlyIiwiZmxvcmlzdCIsImZsb3dlcnMiLCJmbHkiLCJmb28iLCJmb29kIiwiZm9vdGJhbGwiLCJmb3JkIiwiZm9yZXgiLCJmb3JzYWxlIiwiZm9ydW0iLCJm''@;'; put 'put ''b3VuZGF0aW9uIiwiZm94IiwiZnJlZSIsImZyZXNlbml1cyIsImZybCIsImZyb2dhbnMiLCJmcm9udGllciIsImZ0ciIsImZ1aml0c3UiLCJmdW4iLCJmdW5kIiwiZnVybml0dXJlIiwiZnV0Ym9sIiwiZnlpIiwiZ2FsIiwiZ2FsbGVyeSIsImdhbGxvIiwiZ2FsbHVwIiwiZ2FtZSIsImdhbWVz''@;'; put 'put ''IiwiZ2FwIiwiZ2FyZGVuIiwiZ2F5IiwiZ2JpeiIsImdkbiIsImdlYSIsImdlbnQiLCJnZW50aW5nIiwiZ2VvcmdlIiwiZ2dlZSIsImdpZnQiLCJnaWZ0cyIsImdpdmVzIiwiZ2l2aW5nIiwiZ2xhc3MiLCJnbGUiLCJnbG9iYWwiLCJnbG9ibyIsImdtYWlsIiwiZ21iaCIsImdtbyIsImdteCIs''@;'; put 'put ''ImdvZGFkZHkiLCJnb2xkIiwiZ29sZHBvaW50IiwiZ29sZiIsImdvbyIsImdvb2R5ZWFyIiwiZ29vZyIsImdvb2dsZSIsImdvcCIsImdvdCIsImdyYWluZ2VyIiwiZ3JhcGhpY3MiLCJncmF0aXMiLCJncmVlbiIsImdyaXBlIiwiZ3JvY2VyeSIsImdyb3VwIiwiZ3VjY2kiLCJndWdlIiwiZ3Vp''@;'; put 'put ''ZGUiLCJndWl0YXJzIiwiZ3VydSIsImhhaXIiLCJoYW1idXJnIiwiaGFuZ291dCIsImhhdXMiLCJoYm8iLCJoZGZjIiwiaGRmY2JhbmsiLCJoZWFsdGgiLCJoZWFsdGhjYXJlIiwiaGVscCIsImhlbHNpbmtpIiwiaGVyZSIsImhlcm1lcyIsImhpcGhvcCIsImhpc2FtaXRzdSIsImhpdGFjaGki''@;'; put 'put ''LCJoaXYiLCJoa3QiLCJob2NrZXkiLCJob2xkaW5ncyIsImhvbGlkYXkiLCJob21lZGVwb3QiLCJob21lZ29vZHMiLCJob21lcyIsImhvbWVzZW5zZSIsImhvbmRhIiwiaG9yc2UiLCJob3NwaXRhbCIsImhvc3QiLCJob3N0aW5nIiwiaG90IiwiaG90ZWxzIiwiaG90bWFpbCIsImhvdXNlIiwi''@;'; put 'put ''aG93IiwiaHNiYyIsImh1Z2hlcyIsImh5YXR0IiwiaHl1bmRhaSIsImlibSIsImljYmMiLCJpY2UiLCJpY3UiLCJpZWVlIiwiaWZtIiwiaWthbm8iLCJpbWFtYXQiLCJpbWRiIiwiaW1tbyIsImltbW9iaWxpZW4iLCJpbmMiLCJpbmR1c3RyaWVzIiwiaW5maW5pdGkiLCJpbmciLCJpbmsiLCJp''@;'; put 'put ''bnN0aXR1dGUiLCJpbnN1cmFuY2UiLCJpbnN1cmUiLCJpbnRlcm5hdGlvbmFsIiwiaW50dWl0IiwiaW52ZXN0bWVudHMiLCJpcGlyYW5nYSIsImlyaXNoIiwiaXNtYWlsaSIsImlzdCIsImlzdGFuYnVsIiwiaXRhdSIsIml0diIsImphZ3VhciIsImphdmEiLCJqY2IiLCJqZWVwIiwiamV0enQi''@;'; put 'put ''LCJqZXdlbHJ5IiwiamlvIiwiamxsIiwiam1wIiwiam5qIiwiam9idXJnIiwiam90Iiwiam95IiwianBtb3JnYW4iLCJqcHJzIiwianVlZ29zIiwianVuaXBlciIsImthdWZlbiIsImtkZGkiLCJrZXJyeWhvdGVscyIsImtlcnJ5bG9naXN0aWNzIiwia2Vycnlwcm9wZXJ0aWVzIiwia2ZoIiwi''@;'; put 'put ''a2lhIiwia2lkcyIsImtpbSIsImtpbmRsZSIsImtpdGNoZW4iLCJraXdpIiwia29lbG4iLCJrb21hdHN1Iiwia29zaGVyIiwia3BtZyIsImtwbiIsImtyZCIsImtyZWQiLCJrdW9rZ3JvdXAiLCJreW90byIsImxhY2FpeGEiLCJsYW1ib3JnaGluaSIsImxhbWVyIiwibGFuY2FzdGVyIiwibGFu''@;'; put 'put ''ZCIsImxhbmRyb3ZlciIsImxhbnhlc3MiLCJsYXNhbGxlIiwibGF0IiwibGF0aW5vIiwibGF0cm9iZSIsImxhdyIsImxhd3llciIsImxkcyIsImxlYXNlIiwibGVjbGVyYyIsImxlZnJhayIsImxlZ2FsIiwibGVnbyIsImxleHVzIiwibGdidCIsImxpZGwiLCJsaWZlIiwibGlmZWluc3VyYW5j''@;'; put 'put ''ZSIsImxpZmVzdHlsZSIsImxpZ2h0aW5nIiwibGlrZSIsImxpbGx5IiwibGltaXRlZCIsImxpbW8iLCJsaW5jb2xuIiwibGluayIsImxpcHN5IiwibGl2ZSIsImxpdmluZyIsImxsYyIsImxscCIsImxvYW4iLCJsb2FucyIsImxvY2tlciIsImxvY3VzIiwibG9sIiwibG9uZG9uIiwibG90dGUi''@;'; put 'put ''LCJsb3R0byIsImxvdmUiLCJscGwiLCJscGxmaW5hbmNpYWwiLCJsdGQiLCJsdGRhIiwibHVuZGJlY2siLCJsdXhlIiwibHV4dXJ5IiwibWFkcmlkIiwibWFpZiIsIm1haXNvbiIsIm1ha2V1cCIsIm1hbiIsIm1hbmFnZW1lbnQiLCJtYW5nbyIsIm1hcCIsIm1hcmtldCIsIm1hcmtldGluZyIs''@;'; put 'put ''Im1hcmtldHMiLCJtYXJyaW90dCIsIm1hcnNoYWxscyIsIm1hdHRlbCIsIm1iYSIsIm1ja2luc2V5IiwibWVkIiwibWVkaWEiLCJtZWV0IiwibWVsYm91cm5lIiwibWVtZSIsIm1lbW9yaWFsIiwibWVuIiwibWVudSIsIm1lcmNrIiwibWVyY2ttc2QiLCJtaWFtaSIsIm1pY3Jvc29mdCIsIm1p''@;'; put 'put ''bmkiLCJtaW50IiwibWl0IiwibWl0c3ViaXNoaSIsIm1sYiIsIm1scyIsIm1tYSIsIm1vYmlsZSIsIm1vZGEiLCJtb2UiLCJtb2kiLCJtb20iLCJtb25hc2giLCJtb25leSIsIm1vbnN0ZXIiLCJtb3Jtb24iLCJtb3J0Z2FnZSIsIm1vc2NvdyIsIm1vdG8iLCJtb3RvcmN5Y2xlcyIsIm1vdiIs''@;'; put 'put ''Im1vdmllIiwibXNkIiwibXRuIiwibXRyIiwibXVzaWMiLCJuYWIiLCJuYWdveWEiLCJuYXZ5IiwibmJhIiwibmVjIiwibmV0YmFuayIsIm5ldGZsaXgiLCJuZXR3b3JrIiwibmV1c3RhciIsIm5ldyIsIm5ld3MiLCJuZXh0IiwibmV4dGRpcmVjdCIsIm5leHVzIiwibmZsIiwibmdvIiwibmhr''@;'; put 'put ''IiwibmljbyIsIm5pa2UiLCJuaWtvbiIsIm5pbmphIiwibmlzc2FuIiwibmlzc2F5Iiwibm9raWEiLCJub3J0b24iLCJub3ciLCJub3dydXoiLCJub3d0diIsIm5yYSIsIm5ydyIsIm50dCIsIm55YyIsIm9iaSIsIm9ic2VydmVyIiwib2ZmaWNlIiwib2tpbmF3YSIsIm9sYXlhbiIsIm9sYXlh''@;'; put 'put ''bmdyb3VwIiwib2xsbyIsIm9tZWdhIiwib25lIiwib25nIiwib25sIiwib25saW5lIiwib29vIiwib3BlbiIsIm9yYWNsZSIsIm9yYW5nZSIsIm9yZ2FuaWMiLCJvcmlnaW5zIiwib3Nha2EiLCJvdHN1a2EiLCJvdHQiLCJvdmgiLCJwYWdlIiwicGFuYXNvbmljIiwicGFyaXMiLCJwYXJzIiwi''@;'; put 'put ''cGFydG5lcnMiLCJwYXJ0cyIsInBhcnR5IiwicGF5IiwicGNjdyIsInBldCIsInBmaXplciIsInBoYXJtYWN5IiwicGhkIiwicGhpbGlwcyIsInBob25lIiwicGhvdG8iLCJwaG90b2dyYXBoeSIsInBob3RvcyIsInBoeXNpbyIsInBpY3MiLCJwaWN0ZXQiLCJwaWN0dXJlcyIsInBpZCIsInBp''@;'; put 'put ''biIsInBpbmciLCJwaW5rIiwicGlvbmVlciIsInBpenphIiwicGxhY2UiLCJwbGF5IiwicGxheXN0YXRpb24iLCJwbHVtYmluZyIsInBsdXMiLCJwbmMiLCJwb2hsIiwicG9rZXIiLCJwb2xpdGllIiwicG9ybiIsInByYW1lcmljYSIsInByYXhpIiwicHJlc3MiLCJwcmltZSIsInByb2QiLCJw''@;'; put 'put ''cm9kdWN0aW9ucyIsInByb2YiLCJwcm9ncmVzc2l2ZSIsInByb21vIiwicHJvcGVydGllcyIsInByb3BlcnR5IiwicHJvdGVjdGlvbiIsInBydSIsInBydWRlbnRpYWwiLCJwdWIiLCJwd2MiLCJxcG9uIiwicXVlYmVjIiwicXVlc3QiLCJyYWNpbmciLCJyYWRpbyIsInJlYWQiLCJyZWFsZXN0''@;'; put 'put ''YXRlIiwicmVhbHRvciIsInJlYWx0eSIsInJlY2lwZXMiLCJyZWQiLCJyZWRzdG9uZSIsInJlZHVtYnJlbGxhIiwicmVoYWIiLCJyZWlzZSIsInJlaXNlbiIsInJlaXQiLCJyZWxpYW5jZSIsInJlbiIsInJlbnQiLCJyZW50YWxzIiwicmVwYWlyIiwicmVwb3J0IiwicmVwdWJsaWNhbiIsInJl''@;'; put 'put ''c3QiLCJyZXN0YXVyYW50IiwicmV2aWV3IiwicmV2aWV3cyIsInJleHJvdGgiLCJyaWNoIiwicmljaGFyZGxpIiwicmljb2giLCJyaWwiLCJyaW8iLCJyaXAiLCJyb2NrcyIsInJvZGVvIiwicm9nZXJzIiwicm9vbSIsInJzdnAiLCJydWdieSIsInJ1aHIiLCJydW4iLCJyd2UiLCJyeXVreXUi''@;'; put 'put ''LCJzYWFybGFuZCIsInNhZmUiLCJzYWZldHkiLCJzYWt1cmEiLCJzYWxlIiwic2Fsb24iLCJzYW1zY2x1YiIsInNhbXN1bmciLCJzYW5kdmlrIiwic2FuZHZpa2Nvcm9tYW50Iiwic2Fub2ZpIiwic2FwIiwic2FybCIsInNhcyIsInNhdmUiLCJzYXhvIiwic2JpIiwic2JzIiwic2NiIiwic2No''@;'; put 'put ''YWVmZmxlciIsInNjaG1pZHQiLCJzY2hvbGFyc2hpcHMiLCJzY2hvb2wiLCJzY2h1bGUiLCJzY2h3YXJ6Iiwic2NpZW5jZSIsInNjb3QiLCJzZWFyY2giLCJzZWF0Iiwic2VjdXJlIiwic2VjdXJpdHkiLCJzZWVrIiwic2VsZWN0Iiwic2VuZXIiLCJzZXJ2aWNlcyIsInNldmVuIiwic2V3Iiwi''@;'; put 'put ''c2V4Iiwic2V4eSIsInNmciIsInNoYW5ncmlsYSIsInNoYXJwIiwic2hlbGwiLCJzaGlhIiwic2hpa3NoYSIsInNob2VzIiwic2hvcCIsInNob3BwaW5nIiwic2hvdWppIiwic2hvdyIsInNpbGsiLCJzaW5hIiwic2luZ2xlcyIsInNpdGUiLCJza2kiLCJza2luIiwic2t5Iiwic2t5cGUiLCJz''@;'; put 'put ''bGluZyIsInNtYXJ0Iiwic21pbGUiLCJzbmNmIiwic29jY2VyIiwic29jaWFsIiwic29mdGJhbmsiLCJzb2Z0d2FyZSIsInNvaHUiLCJzb2xhciIsInNvbHV0aW9ucyIsInNvbmciLCJzb255Iiwic295Iiwic3BhIiwic3BhY2UiLCJzcG9ydCIsInNwb3QiLCJzcmwiLCJzdGFkYSIsInN0YXBs''@;'; put 'put ''ZXMiLCJzdGFyIiwic3RhdGViYW5rIiwic3RhdGVmYXJtIiwic3RjIiwic3RjZ3JvdXAiLCJzdG9ja2hvbG0iLCJzdG9yYWdlIiwic3RvcmUiLCJzdHJlYW0iLCJzdHVkaW8iLCJzdHVkeSIsInN0eWxlIiwic3Vja3MiLCJzdXBwbGllcyIsInN1cHBseSIsInN1cHBvcnQiLCJzdXJmIiwic3Vy''@;'; put 'put ''Z2VyeSIsInN1enVraSIsInN3YXRjaCIsInN3aXNzIiwic3lkbmV5Iiwic3lzdGVtcyIsInRhYiIsInRhaXBlaSIsInRhbGsiLCJ0YW9iYW8iLCJ0YXJnZXQiLCJ0YXRhbW90b3JzIiwidGF0YXIiLCJ0YXR0b28iLCJ0YXgiLCJ0YXhpIiwidGNpIiwidGRrIiwidGVhbSIsInRlY2giLCJ0ZWNo''@;'; put 'put ''bm9sb2d5IiwidGVtYXNlayIsInRlbm5pcyIsInRldmEiLCJ0aGQiLCJ0aGVhdGVyIiwidGhlYXRyZSIsInRpYWEiLCJ0aWNrZXRzIiwidGllbmRhIiwidGlwcyIsInRpcmVzIiwidGlyb2wiLCJ0am1heHgiLCJ0angiLCJ0a21heHgiLCJ0bWFsbCIsInRvZGF5IiwidG9reW8iLCJ0b29scyIs''@;'; put 'put ''InRvcCIsInRvcmF5IiwidG9zaGliYSIsInRvdGFsIiwidG91cnMiLCJ0b3duIiwidG95b3RhIiwidG95cyIsInRyYWRlIiwidHJhZGluZyIsInRyYWluaW5nIiwidHJhdmVsIiwidHJhdmVsZXJzIiwidHJhdmVsZXJzaW5zdXJhbmNlIiwidHJ1c3QiLCJ0cnYiLCJ0dWJlIiwidHVpIiwidHVu''@;'; put 'put ''ZXMiLCJ0dXNodSIsInR2cyIsInViYW5rIiwidWJzIiwidW5pY29tIiwidW5pdmVyc2l0eSIsInVubyIsInVvbCIsInVwcyIsInZhY2F0aW9ucyIsInZhbmEiLCJ2YW5ndWFyZCIsInZlZ2FzIiwidmVudHVyZXMiLCJ2ZXJpc2lnbiIsInZlcnNpY2hlcnVuZyIsInZldCIsInZpYWplcyIsInZp''@;'; put 'put ''ZGVvIiwidmlnIiwidmlraW5nIiwidmlsbGFzIiwidmluIiwidmlwIiwidmlyZ2luIiwidmlzYSIsInZpc2lvbiIsInZpdmEiLCJ2aXZvIiwidmxhYW5kZXJlbiIsInZvZGthIiwidm9sdm8iLCJ2b3RlIiwidm90aW5nIiwidm90byIsInZveWFnZSIsIndhbGVzIiwid2FsbWFydCIsIndhbHRl''@;'; put 'put ''ciIsIndhbmciLCJ3YW5nZ291Iiwid2F0Y2giLCJ3YXRjaGVzIiwid2VhdGhlciIsIndlYXRoZXJjaGFubmVsIiwid2ViY2FtIiwid2ViZXIiLCJ3ZWJzaXRlIiwid2VkIiwid2VkZGluZyIsIndlaWJvIiwid2VpciIsIndob3N3aG8iLCJ3aWVuIiwid2lraSIsIndpbGxpYW1oaWxsIiwid2lu''@;'; put 'put ''Iiwid2luZG93cyIsIndpbmUiLCJ3aW5uZXJzIiwid21lIiwid29sdGVyc2tsdXdlciIsIndvb2RzaWRlIiwid29yayIsIndvcmtzIiwid29ybGQiLCJ3b3ciLCJ3dGMiLCJ3dGYiLCJ4Ym94IiwieGVyb3giLCJ4aWh1YW4iLCJ4aW4iLCJcdTA5MTVcdTA5NDlcdTA5MmUiLCJcdTMwYmJcdTMw''@;'; put 'put ''ZmNcdTMwZWIiLCJcdTRmNWJcdTVjNzEiLCJcdTYxNDhcdTU1ODQiLCJcdTk2YzZcdTU2ZTIiLCJcdTU3MjhcdTdlYmYiLCJcdTcwYjlcdTc3MGIiLCJcdTBlMDRcdTBlMmRcdTBlMjEiLCJcdTUxNmJcdTUzNjYiLCJcdTA2NDVcdTA2NDhcdTA2NDJcdTA2MzkiLCJcdTUxNmNcdTc2Y2EiLCJc''@;'; put 'put ''dTUxNmNcdTUzZjgiLCJcdTk5OTlcdTY4M2NcdTkxY2NcdTYyYzkiLCJcdTdmNTFcdTdhZDkiLCJcdTc5ZmJcdTUyYTgiLCJcdTYyMTFcdTcyMzFcdTRmNjAiLCJcdTA0M2NcdTA0M2VcdTA0NDFcdTA0M2FcdTA0MzJcdTA0MzAiLCJcdTA0M2FcdTA0MzBcdTA0NDJcdTA0M2VcdTA0M2JcdTA0''@;'; put 'put ''MzhcdTA0M2EiLCJcdTA0M2VcdTA0M2RcdTA0M2JcdTA0MzBcdTA0MzlcdTA0M2QiLCJcdTA0NDFcdTA0MzBcdTA0MzlcdTA0NDIiLCJcdTgwNTRcdTkwMWEiLCJcdTA1ZTdcdTA1ZDVcdTA1ZGQiLCJcdTY1ZjZcdTVjMWEiLCJcdTVmYWVcdTUzNWEiLCJcdTZkZTFcdTlhNmNcdTk1MjEiLCJc''@;'; put 'put ''dTMwZDVcdTMwYTFcdTMwYzNcdTMwYjdcdTMwZTdcdTMwZjMiLCJcdTA0M2VcdTA0NDBcdTA0MzMiLCJcdTA5MjhcdTA5NDdcdTA5MWYiLCJcdTMwYjlcdTMwYzhcdTMwYTIiLCJcdTMwYTJcdTMwZGVcdTMwYmVcdTMwZjMiLCJcdWMwYmNcdWMxMzEiLCJcdTU1NDZcdTY4MDciLCJcdTU1NDZc''@;'; put 'put ''dTVlOTciLCJcdTU1NDZcdTU3Y2UiLCJcdTA0MzRcdTA0MzVcdTA0NDJcdTA0MzgiLCJcdTMwZGRcdTMwYTRcdTMwZjNcdTMwYzgiLCJcdTY1YjBcdTk1ZmIiLCJcdTViYjZcdTk2ZmIiLCJcdTA2NDNcdTA2NDhcdTA2NDUiLCJcdTRlMmRcdTY1ODdcdTdmNTEiLCJcdTRlMmRcdTRmZTEiLCJc''@;'; put 'put ''dTVhMzFcdTRlNTAiLCJcdThjMzdcdTZiNGMiLCJcdTk2ZmJcdThhMGFcdTc2YzhcdTc5ZDEiLCJcdThkMmRcdTcyNjkiLCJcdTMwYWZcdTMwZTlcdTMwYTZcdTMwYzkiLCJcdTkwMWFcdThjYTkiLCJcdTdmNTFcdTVlOTciLCJcdTA5MzhcdTA5MDJcdTA5MTdcdTA5MjBcdTA5MjgiLCJcdTk5''@;'; put 'put ''MTBcdTUzODUiLCJcdTdmNTFcdTdlZGMiLCJcdTA0M2FcdTA0M2VcdTA0M2MiLCJcdTRlOWFcdTlhNmNcdTkwMGEiLCJcdTk4ZGZcdTU0YzEiLCJcdTk4ZGVcdTUyMjlcdTZkNjYiLCJcdTYyNGJcdTY3M2EiLCJcdTA2MjdcdTA2MzFcdTA2MjdcdTA2NDVcdTA2NDNcdTA2NDgiLCJcdTA2Mjdc''@;'; put 'put ''dTA2NDRcdTA2MzlcdTA2NDRcdTA2NGFcdTA2MjdcdTA2NDYiLCJcdTA2MjhcdTA2MjdcdTA2MzJcdTA2MjdcdTA2MzEiLCJcdTA2MjdcdTA2MjhcdTA2NDhcdTA2MzhcdTA2MjhcdTA2NGEiLCJcdTA2NDNcdTA2MjdcdTA2MmJcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDMiLCJcdTA2NDdcdTA2''@;'; put 'put ''NDVcdTA2MzFcdTA2MjdcdTA2NDciLCJcdWIyZjdcdWNlZjQiLCJcdTY1M2ZcdTVlOWMiLCJcdTA2MzRcdTA2MjhcdTA2NDNcdTA2MjkiLCJcdTA2MjhcdTA2NGFcdTA2MmFcdTA2NDMiLCJcdTA2MzlcdTA2MzFcdTA2MjgiLCJcdTY3M2FcdTY3ODQiLCJcdTdlYzRcdTdlYzdcdTY3M2FcdTY3''@;'; put 'put ''ODQiLCJcdTUwNjVcdTVlYjciLCJcdTYyZGJcdTgwNTgiLCJcdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTU5MjdcdTYyZmYiLCJcdTMwN2ZcdTMwOTNcdTMwNmEiLCJcdTMwYjBcdTMwZmNcdTMwYjBcdTMwZWIiLCJcdTRlMTZcdTc1NGMiLCJcdTY2ZjhcdTdjNGQiLCJcdTdmNTFcdTU3NDAiLCJc''@;'; put 'put ''dWIyZjdcdWIxMzciLCJcdTMwYjNcdTMwZTAiLCJcdTU5MjlcdTRlM2JcdTY1NTkiLCJcdTZlMzhcdTYyMGYiLCJ2ZXJtXHhmNmdlbnNiZXJhdGVyIiwidmVybVx4ZjZnZW5zYmVyYXR1bmciLCJcdTRmMDFcdTRlMWEiLCJcdTRmZTFcdTYwNmYiLCJcdTU2MDlcdTkxY2NcdTU5MjdcdTkxNTJc''@;'; put 'put ''dTVlOTciLCJcdTU2MDlcdTkxY2MiLCJcdTVlN2ZcdTRlMWMiLCJcdTY1M2ZcdTUyYTEiLCJ4eXoiLCJ5YWNodHMiLCJ5YWhvbyIsInlhbWF4dW4iLCJ5YW5kZXgiLCJ5b2RvYmFzaGkiLCJ5b2dhIiwieW9rb2hhbWEiLCJ5b3UiLCJ5b3V0dWJlIiwieXVuIiwiemFwcG9zIiwiemFyYSIsInpl''@;'; put 'put ''cm8iLCJ6aXAiLCJ6b25lIiwienVlcmljaCIsImNvLmtyZCIsImVkdS5rcmQiLCJhcnQucGwiLCJnbGl3aWNlLnBsIiwia3Jha293LnBsIiwicG96bmFuLnBsIiwid3JvYy5wbCIsInpha29wYW5lLnBsIiwibGliLmRlLnVzIiwiMTJjaGFycy5kZXYiLCIxMmNoYXJzLml0IiwiMTJjaGFycy5w''@;'; put 'put ''cm8iLCJjYy51YSIsImluZi51YSIsImx0ZC51YSIsIjYxMS50byIsImEyaG9zdGVkLmNvbSIsImNwc2VydmVyLmNvbSIsImFhYS52b2RrYSIsIioub24tYWNvcm4uaW8iLCJhY3RpdmV0cmFpbC5iaXoiLCJhZGFwdGFibGUuYXBwIiwiYWRvYmVhZW1jbG91ZC5jb20iLCIqLmRldi5hZG9iZWFl''@;'; put 'put ''bWNsb3VkLmNvbSIsImFlbS5saXZlIiwiaGx4LmxpdmUiLCJhZG9iZWFlbWNsb3VkLm5ldCIsImFlbS5wYWdlIiwiaGx4LnBhZ2UiLCJobHgzLnBhZ2UiLCJhZG9iZWlvLXN0YXRpYy5uZXQiLCJhZG9iZWlvcnVudGltZS5uZXQiLCJhZnJpY2EuY29tIiwiYmVlcC5wbCIsImFpcmtpdGFwcHMu''@;'; put 'put ''Y29tIiwiYWlya2l0YXBwcy1hdS5jb20iLCJhaXJraXRhcHBzLmV1IiwiYWl2ZW5jbG91ZC5jb20iLCJha2FkbnMubmV0IiwiYWthbWFpLm5ldCIsImFrYW1haS1zdGFnaW5nLm5ldCIsImFrYW1haWVkZ2UubmV0IiwiYWthbWFpZWRnZS1zdGFnaW5nLm5ldCIsImFrYW1haWhkLm5ldCIsImFr''@;'; put 'put ''YW1haWhkLXN0YWdpbmcubmV0IiwiYWthbWFpb3JpZ2luLm5ldCIsImFrYW1haW9yaWdpbi1zdGFnaW5nLm5ldCIsImFrYW1haXplZC5uZXQiLCJha2FtYWl6ZWQtc3RhZ2luZy5uZXQiLCJlZGdla2V5Lm5ldCIsImVkZ2VrZXktc3RhZ2luZy5uZXQiLCJlZGdlc3VpdGUubmV0IiwiZWRnZXN1''@;'; put 'put ''aXRlLXN0YWdpbmcubmV0IiwiYmFyc3kuY2EiLCIqLmNvbXB1dGUuZXN0YXRlIiwiKi5hbGNlcy5uZXR3b3JrIiwia2Fzc2VydmVyLmNvbSIsImFsdGVydmlzdGEub3JnIiwiYWx3YXlzZGF0YS5uZXQiLCJteWFtYXplLm5ldCIsImV4ZWN1dGUtYXBpLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bS5jbiIsImV4ZWN1dGUtYXBpLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJleGVjdXRlLWFwaS5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJleGVjdXRlLWFwaS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRoLTIuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRoZWFzdC00LmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LWNlbnRyYWwtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS1zb3V0aC0yLmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJleGVjdXRlLWFwaS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1''@;'; put 'put ''dGUtYXBpLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVz''@;'; put 'put ''LWVhc3QtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy13ZXN0''@;'; put 'put ''LTIuYW1hem9uYXdzLmNvbSIsImNsb3VkZnJvbnQubmV0IiwiYXV0aC5hZi1zb3V0aC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1lYXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1ub3J0aGVhc3Qt''@;'; put 'put ''Mi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtbm9ydGhlYXN0LTMuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLXNvdXRoLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLXNvdXRoLTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmNvZ25p''@;'; put 'put ''dG8uY29tIiwiYXV0aC5hcC1zb3V0aGVhc3QtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGhlYXN0LTMuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLXNvdXRoZWFzdC00LmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5jYS1jZW50cmFsLTEuYW1hem9uY29nbml0by5jb20i''@;'; put 'put ''LCJhdXRoLmNhLXdlc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtY2VudHJhbC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS1jZW50cmFsLTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LW5vcnRoLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LXNvdXRoLTEu''@;'; put 'put ''YW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LXNvdXRoLTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LXdlc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtd2VzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS13ZXN0LTMuYW1hem9uY29nbml0by5jb20iLCJhdXRo''@;'; put 'put ''LmlsLWNlbnRyYWwtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgubWUtY2VudHJhbC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5tZS1zb3V0aC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5zYS1lYXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLnVzLWVhc3QtMS5hbWF6b25j''@;'; put 'put ''b2duaXRvLmNvbSIsImF1dGgtZmlwcy51cy1lYXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLnVzLWVhc3QtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgtZmlwcy51cy1lYXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtZ292LXdlc3QtMS5hbWF6b25jb2duaXRv''@;'; put 'put ''LmNvbSIsImF1dGgudXMtd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC1maXBzLnVzLXdlc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgudXMtd2VzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC1maXBzLnVzLXdlc3QtMi5hbWF6b25jb2duaXRvLmNvbSIsIiouY29tcHV0''@;'; put 'put ''ZS5hbWF6b25hd3MuY29tLmNuIiwiKi5jb21wdXRlLmFtYXpvbmF3cy5jb20iLCIqLmNvbXB1dGUtMS5hbWF6b25hd3MuY29tIiwidXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsImVtcm5vdGVib29rcy1wcm9kLmNu''@;'; put 'put ''LW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsImVtcnN0dWRpby1wcm9kLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsImVtcmFwcHVpLXByb2QuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsImVtcm5vdGVib29rcy1wcm9kLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5j''@;'; put 'put ''b20uY24iLCJlbXJzdHVkaW8tcHJvZC5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1yYXBwdWktcHJvZC5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hZi1zb3V0''@;'; put 'put ''aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtbm9y''@;'; put 'put ''dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''ZW1ybm90ZWJvb2tzLXByb2QuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1ub3J0''@;'; put 'put ''aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlv''@;'; put 'put ''LXByb2QuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJh''@;'; put 'put ''cHB1aS1wcm9kLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGhlYXN0LTIu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJv''@;'; put 'put ''b2tzLXByb2QuYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0aGVhc3QtNC5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9k''@;'; put 'put ''LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1w''@;'; put 'put ''cm9kLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJlbXJub3RlYm9va3MtcHJvZC5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS1ub3J0aC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LXNvdXRo''@;'; put 'put ''LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS13''@;'; put 'put ''ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2Qu''@;'; put 'put ''ZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9k''@;'; put 'put ''LmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJh''@;'; put 'put ''cHB1aS1wcm9kLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QubWUtc291dGgtMS5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiZW1ybm90ZWJvb2tzLXByb2QubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnNhLWVhc3QtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2Quc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC51cy1lYXN0LTEuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy1nb3YtZWFzdC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29r''@;'; put 'put ''cy1wcm9kLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''ImVtcnN0dWRpby1wcm9kLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCIqLmNuLW5vcnRoLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tLmNuIiwiKi5jbi1ub3J0aHdlc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20uY24iLCIqLmFmLXNvdXRoLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1lYXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1u''@;'; put 'put ''b3J0aGVhc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLW5vcnRoZWFzdC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtbm9ydGhlYXN0LTMuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtc291dGgt''@;'; put 'put ''Mi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtc291dGhlYXN0LTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aGVhc3QtMy5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoZWFzdC00''@;'; put 'put ''LmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouY2EtY2VudHJhbC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouY2Etd2VzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouZXUtY2VudHJhbC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouZXUtY2VudHJhbC0yLmFpcmZsb3cuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsIiouZXUtbm9ydGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LXNvdXRoLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1zb3V0aC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouZXUtd2VzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouZXUt''@;'; put 'put ''d2VzdC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouZXUtd2VzdC0zLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouaWwtY2VudHJhbC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioubWUtY2VudHJhbC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioubWUtc291dGgtMS5haXJmbG93''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCIqLnNhLWVhc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLnVzLWVhc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLnVzLWVhc3QtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLnVzLXdlc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLnVz''@;'; put 'put ''LXdlc3QtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmNuLW5vcnRoLTEuYW1h''@;'; put 'put ''em9uYXdzLmNvbS5jbiIsInMzLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLWFjY2Vzc3BvaW50LmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLWRlcHJlY2F0ZWQuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtb2JqZWN0LWxhbWJkYS5jbi1ub3J0aC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20uY24iLCJzMy13ZWJzaXRlLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLmR1YWxzdGFjay5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24i''@;'; put 'put ''LCJzMy5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtYWNjZXNzcG9pbnQuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLW9iamVjdC1sYW1iZGEuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLXdlYnNpdGUuY24tbm9ydGh3ZXN0LTEu''@;'; put 'put ''YW1hem9uYXdzLmNvbS5jbiIsInMzLmR1YWxzdGFjay5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuYWYt''@;'; put 'put ''c291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1l''@;'; put 'put ''YXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLWVh''@;'; put 'put ''c3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJz''@;'; put 'put ''aXRlLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJzMy13ZWJzaXRlLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFs''@;'; put 'put ''c3RhY2suYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''czMtd2Vic2l0ZS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFw''@;'; put 'put ''LW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNp''@;'; put 'put ''dGUuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtc291dGgtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LmR1YWxzdGFjay5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGgtMi5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFw''@;'; put 'put ''LXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aGVh''@;'; put 'put ''c3QtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nw''@;'; put 'put ''b2ludC5kdWFsc3RhY2suYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGhlYXN0LTMuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVh''@;'; put 'put ''bHN0YWNrLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5h''@;'; put 'put ''cC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiczMt''@;'; put 'put ''ZGVwcmVjYXRlZC5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmNhLWNlbnRyYWwtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuY2EtY2VudHJhbC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJzMy1maXBzLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suY2Etd2VzdC0xLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMt''@;'; put 'put ''d2Vic2l0ZS5kdWFsc3RhY2suY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZp''@;'; put 'put ''cHMuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50''@;'; put 'put ''LmR1YWxzdGFjay5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InMzLW9iamVjdC1sYW1iZGEuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LWNlbnRyYWwt''@;'; put 'put ''Mi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1j''@;'; put 'put ''ZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmV1LW5v''@;'; put 'put ''cnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtc291''@;'; put 'put ''dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50''@;'; put 'put ''LmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQu''@;'; put 'put ''ZHVhbHN0YWNrLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVj''@;'; put 'put ''dC1sYW1iZGEuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJz''@;'; put 'put ''My13ZWJzaXRlLmR1YWxzdGFjay5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1kZXByZWNhdGVkLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0''@;'; put 'put ''LWxhbWJkYS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5l''@;'; put 'put ''dS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtd2Vz''@;'; put 'put ''dC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUt''@;'; put 'put ''d2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxz''@;'; put 'put ''dGFjay5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLW9i''@;'; put 'put ''amVjdC1sYW1iZGEuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLm1lLWNlbnRyYWwtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2subWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50Lm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5tZS1jZW50cmFs''@;'; put 'put ''LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2subWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLm1lLXNvdXRoLTEu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50Lm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hbWF6b25hd3MuY29tIiwiczMtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiczMtYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1zb3V0aC0xLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJzMy1hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1ldS1ub3J0aC0xLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJzMy1ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1leHRlcm5hbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLXVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LWZpcHMtdXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwibXJhcC5hY2Nlc3Nwb2ludC5zMy1nbG9iYWwuYW1hem9uYXdzLmNvbSIsInMzLW1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtZWFzdC0yLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJzMy11cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy11cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy11cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS1hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtd2Vic2l0ZS1hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS1hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS1ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13''@;'; put 'put ''ZWJzaXRlLXVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS11cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS11cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5zYS1l''@;'; put 'put ''YXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5z''@;'; put 'put ''YS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0''@;'; put 'put ''YWNrLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLnVzLWVhc3QtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1kZXByZWNhdGVkLnVzLWVhc3QtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtZmlwcy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNz''@;'; put 'put ''cG9pbnQuZHVhbHN0YWNrLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLnVz''@;'; put 'put ''LWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1kZXByZWNhdGVkLnVzLWVhc3QtMi5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiczMtZmlwcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJzMy51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMudXMtZ292LWVhc3QtMS5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMt''@;'; put 'put ''Z292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2sudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2sudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtYWNjZXNzcG9pbnQudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEudXMtZ292LXdlc3Qt''@;'; put 'put ''MS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1m''@;'; put 'put ''aXBzLmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2sudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFj''@;'; put 'put ''Y2Vzc3BvaW50LnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vi''@;'; put 'put ''c2l0ZS51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2sudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMtd2VzdC0yLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZGVwcmVjYXRlZC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnVzLXdlc3QtMi5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiczMtd2Vic2l0ZS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImxhYmVsaW5nLmFwLW5vcnRoZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5hcC1ub3J0aGVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuYXAtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxp''@;'; put 'put ''bmcuYXAtc291dGhlYXN0LTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmFwLXNvdXRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5jYS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmV1LWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuZXUtd2Vz''@;'; put 'put ''dC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5ldS13ZXN0LTIuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLnVzLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcudXMtZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy51cy13ZXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVi''@;'; put 'put ''b29rLmFmLXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtbm9ydGhlYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLW5vcnRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1ub3J0aGVh''@;'; put 'put ''c3QtMy5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtc291dGgtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtc291dGhlYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoZWFzdC0yLnNhZ2VtYWtl''@;'; put 'put ''ci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aGVhc3QtMy5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtc291dGhlYXN0LTQuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmNhLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy5jYS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3''@;'; put 'put ''cyIsIm5vdGVib29rLmNhLXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy5jYS13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtY2VudHJhbC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5l''@;'; put 'put ''dS1ub3J0aC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS1zb3V0aC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXdlc3QtMi5zYWdlbWFrZXIuYXdz''@;'; put 'put ''Iiwibm90ZWJvb2suZXUtd2VzdC0zLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5pbC1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLm1lLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2subWUtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suc2EtZWFz''@;'; put 'put ''dC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay51cy1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay51cy1lYXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtZWFzdC0yLnNhZ2VtYWtlci5h''@;'; put 'put ''d3MiLCJub3RlYm9vay51cy1nb3YtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLnVzLWdvdi1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLWdvdi13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtZ292LXdlc3QtMS5zYWdlbWFrZXIu''@;'; put 'put ''YXdzIiwibm90ZWJvb2sudXMtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLnVzLXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLnVzLXdlc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2su''@;'; put 'put ''Y24tbm9ydGgtMS5zYWdlbWFrZXIuY29tLmNuIiwibm90ZWJvb2suY24tbm9ydGh3ZXN0LTEuc2FnZW1ha2VyLmNvbS5jbiIsInN0dWRpby5hZi1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtbm9ydGhlYXN0LTEuc2Fn''@;'; put 'put ''ZW1ha2VyLmF3cyIsInN0dWRpby5hcC1ub3J0aGVhc3QtMi5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLW5vcnRoZWFzdC0zLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLXNvdXRoZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVk''@;'; put 'put ''aW8uYXAtc291dGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1zb3V0aGVhc3QtMy5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmNhLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmV1LWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmV1LW5vcnRoLTEuc2Fn''@;'; put 'put ''ZW1ha2VyLmF3cyIsInN0dWRpby5ldS1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtc291dGgtMi5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmV1LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmV1LXdlc3QtMi5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmV1LXdlc3QtMy5z''@;'; put 'put ''YWdlbWFrZXIuYXdzIiwic3R1ZGlvLmlsLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLm1lLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLm1lLXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5zYS1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby51cy1l''@;'; put 'put ''YXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby51cy1lYXN0LTIuc2FnZW1ha2VyLmF3cyIsInN0dWRpby51cy1nb3YtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8tZmlwcy51cy1nb3YtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtZ292LXdlc3QtMS5zYWdlbWFrZXIu''@;'; put 'put ''YXdzIiwic3R1ZGlvLWZpcHMudXMtZ292LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLXdlc3QtMi5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmNuLW5vcnRoLTEuc2FnZW1ha2VyLmNvbS5jbiIsInN0dWRpby5jbi1ub3J0''@;'; put 'put ''aHdlc3QtMS5zYWdlbWFrZXIuY29tLmNuIiwiKi5leHBlcmltZW50cy5zYWdlbWFrZXIuYXdzIiwiYW5hbHl0aWNzLWdhdGV3YXkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3Mt''@;'; put 'put ''Z2F0ZXdheS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmV1LWNlbnRyYWwtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXku''@;'; put 'put ''dXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJhbXBsaWZ5YXBwLmNvbSIsIiouYXdzYXBwcnVubmVyLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFz''@;'; put 'put ''c2V0cy5jbG91ZDkuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtZWFzdC0xLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsIndl''@;'; put 'put ''YnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMu''@;'; put 'put ''YXdzLWNsb3VkOS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFw''@;'; put 'put ''LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInZmcy5jbG91ZDkuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3Vk''@;'; put 'put ''OS5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5jYS1jZW50cmFsLTEu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwid2Vi''@;'; put 'put ''dmlldy1hc3NldHMuY2xvdWQ5LmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5ldS1u''@;'; put 'put ''b3J0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndl''@;'; put 'put ''YnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5ldS13''@;'; put 'put ''ZXN0LTIuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwidmZzLmNs''@;'; put 'put ''b3VkOS5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmlsLWNlbnRyYWwtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5Lm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5h''@;'; put 'put ''d3MtY2xvdWQ5LnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkudXMtZWFzdC0xLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJ2ZnMuY2xvdWQ5LnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkudXMtZWFzdC0y''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNz''@;'; put 'put ''ZXRzLmNsb3VkOS51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnVzLXdlc3QtMi5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiYXdzYXBwcy5jb20iLCJjbi1ub3J0aC0xLmViLmFtYXpvbmF3cy5jb20uY24iLCJjbi1ub3J0aHdlc3QtMS5lYi5hbWF6b25hd3MuY29tLmNuIiwiZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhZi1zb3V0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtZWFzdC0xLmVsYXN0''@;'; put 'put ''aWNiZWFuc3RhbGsuY29tIiwiYXAtbm9ydGhlYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1ub3J0aGVhc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLW5vcnRoZWFzdC0zLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtc291dGgtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIs''@;'; put 'put ''ImFwLXNvdXRoZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtc291dGhlYXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aGVhc3QtMy5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImNhLWNlbnRyYWwtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LWNlbnRyYWwtMS5l''@;'; put 'put ''bGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LW5vcnRoLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS1zb3V0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtd2VzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtd2VzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtd2VzdC0z''@;'; put 'put ''LmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiaWwtY2VudHJhbC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwibWUtc291dGgtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInNhLWVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWVh''@;'; put 'put ''c3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWdvdi1lYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy1nb3Ytd2VzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtd2VzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtd2VzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29t''@;'; put 'put ''IiwiKi5lbGIuYW1hem9uYXdzLmNvbS5jbiIsIiouZWxiLmFtYXpvbmF3cy5jb20iLCJhd3NnbG9iYWxhY2NlbGVyYXRvci5jb20iLCIqLnByaXZhdGUucmVwb3N0LmF3cyIsImVlcm8ub25saW5lIiwiZWVyby1zdGFnZS5vbmxpbmUiLCJhcGlnZWUuaW8iLCJwYW5lbC5kZXYiLCJzaWlpdGVz''@;'; put 'put ''LmNvbSIsImFwcHNwYWNlaG9zdGVkLmNvbSIsImFwcHNwYWNldXNlcmNvbnRlbnQuY29tIiwiYXBwdWRvLm5ldCIsIm9uLWFwdGlibGUuY29tIiwiZjUuc2kiLCJhcnZhbmVkZ2UuaXIiLCJ1c2VyLmFzZWluZXQubmUuanAiLCJndi52YyIsImQuZ3YudmMiLCJ1c2VyLnBhcnR5LmV1cyIsInBp''@;'; put 'put ''bWllbnRhLm9yZyIsInBvaXZyb24ub3JnIiwicG90YWdlci5vcmciLCJzd2VldHBlcHBlci5vcmciLCJteWFzdXN0b3IuY29tIiwiY2RuLnByb2QuYXRsYXNzaWFuLWRldi5uZXQiLCJ0cmFuc2xhdGVkLnBhZ2UiLCJteWZyaXR6LmxpbmsiLCJteWZyaXR6Lm5ldCIsIm9uYXZzdGFjay5uZXQi''@;'; put 'put ''LCIqLmF3ZGV2LmNhIiwiKi5hZHZpc29yLndzIiwiZWNvbW1lcmNlLXNob3AucGwiLCJiLWRhdGEuaW8iLCJiYWxlbmEtZGV2aWNlcy5jb20iLCJiYXNlLmVjIiwib2ZmaWNpYWwuZWMiLCJidXlzaG9wLmpwIiwiZmFzaGlvbnN0b3JlLmpwIiwiaGFuZGNyYWZ0ZWQuanAiLCJrYXdhaWlzaG9w''@;'; put 'put ''LmpwIiwic3VwZXJzYWxlLmpwIiwidGhlc2hvcC5qcCIsInNob3BzZWxlY3QubmV0IiwiYmFzZS5zaG9wIiwiYmVhZ2xlYm9hcmQuaW8iLCIqLmJlZ2V0LmFwcCIsInBhZ2VzLmdheSIsImJuci5sYSIsImJpdGJ1Y2tldC5pbyIsImJsYWNrYmF1ZGNkbi5uZXQiLCJvZi5qZSIsImJsdWViaXRl''@;'; put 'put ''LmlvIiwiYm9vbWxhLm5ldCIsImJvdXRpci5jb20iLCJib3hmdXNlLmlvIiwic3F1YXJlNy5jaCIsImJwbGFjZWQuY29tIiwiYnBsYWNlZC5kZSIsInNxdWFyZTcuZGUiLCJicGxhY2VkLm5ldCIsInNxdWFyZTcubmV0IiwiKi5zLmJyYXZlLmlvIiwic2hvcC5icmVuZGx5LmhyIiwic2hvcC5i''@;'; put 'put ''cmVuZGx5LnJzIiwiYnJvd3NlcnNhZmV0eW1hcmsuaW8iLCJyYWRpby5hbSIsInJhZGlvLmZtIiwidWswLmJpZ3YuaW8iLCJkaC5ieXRlbWFyay5jby51ayIsInZtLmJ5dGVtYXJrLmNvLnVrIiwiY2FmanMuY29tIiwiY2FudmEtYXBwcy5jbiIsIioubXkuY2FudmFzaXRlLmNuIiwiY2FudmEt''@;'; put 'put ''YXBwcy5jb20iLCIqLm15LmNhbnZhLnNpdGUiLCJkcnIuYWMiLCJ1d3UuYWkiLCJjYXJyZC5jbyIsImNyZC5jbyIsImp1Lm1wIiwiYXBpLmdvdi51ayIsImNkbjc3LXN0b3JhZ2UuY29tIiwicnNjLmNvbnRlbnRwcm94eTkuY3oiLCJyLmNkbjc3Lm5ldCIsImNkbjc3LXNzbC5uZXQiLCJjLmNk''@;'; put 'put ''bjc3Lm9yZyIsInJzYy5jZG43Ny5vcmciLCJzc2wub3JpZ2luLmNkbjc3LXNlY3VyZS5vcmciLCJ6YS5ieiIsImJyLmNvbSIsImNuLmNvbSIsImRlLmNvbSIsImV1LmNvbSIsImpwbi5jb20iLCJtZXguY29tIiwicnUuY29tIiwic2EuY29tIiwidWsuY29tIiwidXMuY29tIiwiemEuY29tIiwi''@;'; put 'put ''Y29tLmRlIiwiZ2IubmV0IiwiaHUubmV0IiwianAubmV0Iiwic2UubmV0IiwidWsubmV0IiwiYWUub3JnIiwiY29tLnNlIiwiY3gudWEiLCJkaXNjb3Vyc2UuZ3JvdXAiLCJkaXNjb3Vyc2UudGVhbSIsImNsZXJrLmFwcCIsImNsZXJrc3RhZ2UuYXBwIiwiKi5sY2wuZGV2IiwiKi5sY2xzdGFn''@;'; put 'put ''ZS5kZXYiLCIqLnN0Zy5kZXYiLCIqLnN0Z3N0YWdlLmRldiIsImNsZXZlcmFwcHMuY2MiLCIqLnNlcnZpY2VzLmNsZXZlci1jbG91ZC5jb20iLCJjbGV2ZXJhcHBzLmlvIiwiY2xldmVyYXBwcy50ZWNoIiwiY2xpY2tyaXNpbmcubmV0IiwiY2xvdWRucy5hc2lhIiwiY2xvdWRucy5iZSIsImNs''@;'; put 'put ''b3VkLWlwLmJpeiIsImNsb3VkbnMuYml6IiwiY2xvdWRucy5jYyIsImNsb3VkbnMuY2giLCJjbG91ZG5zLmNsIiwiY2xvdWRucy5jbHViIiwiZG5zYWJyLmNvbSIsImlwLWRkbnMuY29tIiwiY2xvdWRucy5jeCIsImNsb3VkbnMuZXUiLCJjbG91ZG5zLmluIiwiY2xvdWRucy5pbmZvIiwiZGRu''@;'; put 'put ''cy1pcC5uZXQiLCJkbnMtY2xvdWQubmV0IiwiZG5zLWR5bmFtaWMubmV0IiwiY2xvdWRucy5ueiIsImNsb3VkbnMub3JnIiwiaXAtZHluYW1pYy5vcmciLCJjbG91ZG5zLnBoIiwiY2xvdWRucy5wcm8iLCJjbG91ZG5zLnB3IiwiY2xvdWRucy51cyIsImM2Ni5tZSIsImNsb3VkNjYud3MiLCJj''@;'; put 'put ''bG91ZDY2LnpvbmUiLCJqZGV2Y2xvdWQuY29tIiwid3BkZXZjbG91ZC5jb20iLCJjbG91ZGFjY2Vzcy5ob3N0IiwiZnJlZXNpdGUuaG9zdCIsImNsb3VkYWNjZXNzLm5ldCIsIiouY2xvdWRlcmEuc2l0ZSIsImNmLWlwZnMuY29tIiwiY2xvdWRmbGFyZS1pcGZzLmNvbSIsInRyeWNsb3VkZmxh''@;'; put 'put ''cmUuY29tIiwicGFnZXMuZGV2IiwicjIuZGV2Iiwid29ya2Vycy5kZXYiLCJjbG91ZGZsYXJlLm5ldCIsImNkbi5jbG91ZGZsYXJlLm5ldCIsImNkbi5jbG91ZGZsYXJlYW55Y2FzdC5uZXQiLCJjZG4uY2xvdWRmbGFyZWNuLm5ldCIsImNkbi5jbG91ZGZsYXJlZ2xvYmFsLm5ldCIsImN1c3Qu''@;'; put 'put ''Y2xvdWRzY2FsZS5jaCIsIm9iamVjdHMubHBnLmNsb3Vkc2NhbGUuY2giLCJvYmplY3RzLnJtYS5jbG91ZHNjYWxlLmNoIiwid25leHQuYXBwIiwiY25weS5nZG4iLCIqLm90YXAuY28iLCJjby5jYSIsImNvLmNvbSIsImNvZGViZXJnLnBhZ2UiLCJjc2IuYXBwIiwicHJldmlldy5jc2IuYXBw''@;'; put 'put ''IiwiY28ubmwiLCJjby5ubyIsIndlYmhvc3RpbmcuYmUiLCJob3N0aW5nLWNsdXN0ZXIubmwiLCJjdGZjbG91ZC5uZXQiLCJjb252ZXguc2l0ZSIsImFjLnJ1IiwiZWR1LnJ1IiwiZ292LnJ1IiwiaW50LnJ1IiwibWlsLnJ1IiwidGVzdC5ydSIsImR5bi5jb3NpZG5zLmRlIiwiZG5zdXBkYXRl''@;'; put 'put ''ci5kZSIsImR5bmFtaXNjaGVzLWRucy5kZSIsImludGVybmV0LWRucy5kZSIsImwtby1nLWktbi5kZSIsImR5bmFtaWMtZG5zLmluZm8iLCJmZXN0ZS1pcC5uZXQiLCJrbngtc2VydmVyLm5ldCIsInN0YXRpYy1hY2Nlc3MubmV0IiwiY3JhZnQubWUiLCJyZWFsbS5jeiIsIm9uLmNyaXNwLmVt''@;'; put 'put ''YWlsIiwiKi5jcnlwdG9ub21pYy5uZXQiLCJjdXJ2LmRldiIsImNmb2xrcy5wbCIsImN5b24ubGluayIsImN5b24uc2l0ZSIsInBsYXRmb3JtMC5hcHAiLCJmbndrLnNpdGUiLCJmb2xpb25ldHdvcmsuc2l0ZSIsImJpei5kayIsImNvLmRrIiwiZmlybS5kayIsInJlZy5kayIsInN0b3JlLmRr''@;'; put 'put ''IiwiZHluZG5zLmRhcHBub2RlLmlvIiwiYnVpbHR3aXRoZGFyay5jb20iLCJkYXJrbGFuZy5pbyIsImRlbW8uZGF0YWRldGVjdC5jb20iLCJpbnN0YW5jZS5kYXRhZGV0ZWN0LmNvbSIsImVkZ2VzdGFjay5tZSIsImRhdHRvbG9jYWwuY29tIiwiZGF0dG9yZWxheS5jb20iLCJkYXR0b3dlYi5j''@;'; put 'put ''b20iLCJteWRhdHRvLmNvbSIsImRhdHRvbG9jYWwubmV0IiwibXlkYXR0by5uZXQiLCJkZG5zcy5kZSIsImR5bi5kZG5zcy5kZSIsImR5bmRucy5kZG5zcy5kZSIsImR5bi1pcDI0LmRlIiwiZHluZG5zMS5kZSIsImhvbWUtd2Vic2VydmVyLmRlIiwiZHluLmhvbWUtd2Vic2VydmVyLmRlIiwi''@;'; put 'put ''bXlob21lLXNlcnZlci5kZSIsImRkbnNzLm9yZyIsImRlYmlhbi5uZXQiLCJkZWZpbmltYS5pbyIsImRlZmluaW1hLm5ldCIsImRlbm8uZGV2IiwiZGVuby1zdGFnaW5nLmRldiIsImRlZHluLmlvIiwiZGV0YS5hcHAiLCJkZXRhLmRldiIsImRmaXJtYS5wbCIsImRrb250by5wbCIsInlvdTIu''@;'; put 'put ''cGwiLCJvbmRpZ2l0YWxvY2Vhbi5hcHAiLCIqLmRpZ2l0YWxvY2VhbnNwYWNlcy5jb20iLCJ1cy5rZyIsInJzcy5teS5pZCIsImRpaGVyLnNvbHV0aW9ucyIsImRpc2NvcmRzYXlzLmNvbSIsImRpc2NvcmRzZXouY29tIiwiam96aS5iaXoiLCJkbnNob21lLmRlIiwib25saW5lLnRoIiwic2hv''@;'; put 'put ''cC50aCIsImRyYXlkZG5zLmNvbSIsInNob3BhcmVuYS5wbCIsImRyZWFtaG9zdGVycy5jb20iLCJkdXJ1bWlzLmNvbSIsIm15ZHJvYm8uY29tIiwiZHJ1ZC5pbyIsImRydWQudXMiLCJkdWNrZG5zLm9yZyIsImR5LmZpIiwidHVuay5vcmciLCJkeW5kbnMuYml6IiwiZm9yLWJldHRlci5iaXoi''@;'; put 'put ''LCJmb3ItbW9yZS5iaXoiLCJmb3Itc29tZS5iaXoiLCJmb3ItdGhlLmJpeiIsInNlbGZpcC5iaXoiLCJ3ZWJob3AuYml6IiwiZnRwYWNjZXNzLmNjIiwiZ2FtZS1zZXJ2ZXIuY2MiLCJteXBob3Rvcy5jYyIsInNjcmFwcGluZy5jYyIsImJsb2dkbnMuY29tIiwiY2VjaGlyZS5jb20iLCJkbnNh''@;'; put 'put ''bGlhcy5jb20iLCJkbnNkb2pvLmNvbSIsImRvZXNudGV4aXN0LmNvbSIsImRvbnRleGlzdC5jb20iLCJkb29tZG5zLmNvbSIsImR5bi1vLXNhdXIuY29tIiwiZHluYWxpYXMuY29tIiwiZHluZG5zLWF0LWhvbWUuY29tIiwiZHluZG5zLWF0LXdvcmsuY29tIiwiZHluZG5zLWJsb2cuY29tIiwi''@;'; put 'put ''ZHluZG5zLWZyZWUuY29tIiwiZHluZG5zLWhvbWUuY29tIiwiZHluZG5zLWlwLmNvbSIsImR5bmRucy1tYWlsLmNvbSIsImR5bmRucy1vZmZpY2UuY29tIiwiZHluZG5zLXBpY3MuY29tIiwiZHluZG5zLXJlbW90ZS5jb20iLCJkeW5kbnMtc2VydmVyLmNvbSIsImR5bmRucy13ZWIuY29tIiwi''@;'; put 'put ''ZHluZG5zLXdpa2kuY29tIiwiZHluZG5zLXdvcmsuY29tIiwiZXN0LWEtbGEtbWFpc29uLmNvbSIsImVzdC1hLWxhLW1hc2lvbi5jb20iLCJlc3QtbGUtcGF0cm9uLmNvbSIsImVzdC1tb24tYmxvZ3VldXIuY29tIiwiZnJvbS1hay5jb20iLCJmcm9tLWFsLmNvbSIsImZyb20tYXIuY29tIiwi''@;'; put 'put ''ZnJvbS1jYS5jb20iLCJmcm9tLWN0LmNvbSIsImZyb20tZGMuY29tIiwiZnJvbS1kZS5jb20iLCJmcm9tLWZsLmNvbSIsImZyb20tZ2EuY29tIiwiZnJvbS1oaS5jb20iLCJmcm9tLWlhLmNvbSIsImZyb20taWQuY29tIiwiZnJvbS1pbC5jb20iLCJmcm9tLWluLmNvbSIsImZyb20ta3MuY29t''@;'; put 'put ''IiwiZnJvbS1reS5jb20iLCJmcm9tLW1hLmNvbSIsImZyb20tbWQuY29tIiwiZnJvbS1taS5jb20iLCJmcm9tLW1uLmNvbSIsImZyb20tbW8uY29tIiwiZnJvbS1tcy5jb20iLCJmcm9tLW10LmNvbSIsImZyb20tbmMuY29tIiwiZnJvbS1uZC5jb20iLCJmcm9tLW5lLmNvbSIsImZyb20tbmgu''@;'; put 'put ''Y29tIiwiZnJvbS1uai5jb20iLCJmcm9tLW5tLmNvbSIsImZyb20tbnYuY29tIiwiZnJvbS1vaC5jb20iLCJmcm9tLW9rLmNvbSIsImZyb20tb3IuY29tIiwiZnJvbS1wYS5jb20iLCJmcm9tLXByLmNvbSIsImZyb20tcmkuY29tIiwiZnJvbS1zYy5jb20iLCJmcm9tLXNkLmNvbSIsImZyb20t''@;'; put 'put ''dG4uY29tIiwiZnJvbS10eC5jb20iLCJmcm9tLXV0LmNvbSIsImZyb20tdmEuY29tIiwiZnJvbS12dC5jb20iLCJmcm9tLXdhLmNvbSIsImZyb20td2kuY29tIiwiZnJvbS13di5jb20iLCJmcm9tLXd5LmNvbSIsImdldG15aXAuY29tIiwiZ290ZG5zLmNvbSIsImhvYmJ5LXNpdGUuY29tIiwi''@;'; put 'put ''aG9tZWxpbnV4LmNvbSIsImhvbWV1bml4LmNvbSIsImlhbWFsbGFtYS5jb20iLCJpcy1hLWFuYXJjaGlzdC5jb20iLCJpcy1hLWJsb2dnZXIuY29tIiwiaXMtYS1ib29ra2VlcGVyLmNvbSIsImlzLWEtYnVsbHMtZmFuLmNvbSIsImlzLWEtY2F0ZXJlci5jb20iLCJpcy1hLWNoZWYuY29tIiwi''@;'; put 'put ''aXMtYS1jb25zZXJ2YXRpdmUuY29tIiwiaXMtYS1jcGEuY29tIiwiaXMtYS1jdWJpY2xlLXNsYXZlLmNvbSIsImlzLWEtZGVtb2NyYXQuY29tIiwiaXMtYS1kZXNpZ25lci5jb20iLCJpcy1hLWRvY3Rvci5jb20iLCJpcy1hLWZpbmFuY2lhbGFkdmlzb3IuY29tIiwiaXMtYS1nZWVrLmNvbSIs''@;'; put 'put ''ImlzLWEtZ3JlZW4uY29tIiwiaXMtYS1ndXJ1LmNvbSIsImlzLWEtaGFyZC13b3JrZXIuY29tIiwiaXMtYS1odW50ZXIuY29tIiwiaXMtYS1sYW5kc2NhcGVyLmNvbSIsImlzLWEtbGF3eWVyLmNvbSIsImlzLWEtbGliZXJhbC5jb20iLCJpcy1hLWxpYmVydGFyaWFuLmNvbSIsImlzLWEtbGxh''@;'; put 'put ''bWEuY29tIiwiaXMtYS1tdXNpY2lhbi5jb20iLCJpcy1hLW5hc2NhcmZhbi5jb20iLCJpcy1hLW51cnNlLmNvbSIsImlzLWEtcGFpbnRlci5jb20iLCJpcy1hLXBlcnNvbmFsdHJhaW5lci5jb20iLCJpcy1hLXBob3RvZ3JhcGhlci5jb20iLCJpcy1hLXBsYXllci5jb20iLCJpcy1hLXJlcHVi''@;'; put 'put ''bGljYW4uY29tIiwiaXMtYS1yb2Nrc3Rhci5jb20iLCJpcy1hLXNvY2lhbGlzdC5jb20iLCJpcy1hLXN0dWRlbnQuY29tIiwiaXMtYS10ZWFjaGVyLmNvbSIsImlzLWEtdGVjaGllLmNvbSIsImlzLWEtdGhlcmFwaXN0LmNvbSIsImlzLWFuLWFjY291bnRhbnQuY29tIiwiaXMtYW4tYWN0b3Iu''@;'; put 'put ''Y29tIiwiaXMtYW4tYWN0cmVzcy5jb20iLCJpcy1hbi1hbmFyY2hpc3QuY29tIiwiaXMtYW4tYXJ0aXN0LmNvbSIsImlzLWFuLWVuZ2luZWVyLmNvbSIsImlzLWFuLWVudGVydGFpbmVyLmNvbSIsImlzLWNlcnRpZmllZC5jb20iLCJpcy1nb25lLmNvbSIsImlzLWludG8tYW5pbWUuY29tIiwi''@;'; put 'put ''aXMtaW50by1jYXJzLmNvbSIsImlzLWludG8tY2FydG9vbnMuY29tIiwiaXMtaW50by1nYW1lcy5jb20iLCJpcy1sZWV0LmNvbSIsImlzLW5vdC1jZXJ0aWZpZWQuY29tIiwiaXMtc2xpY2suY29tIiwiaXMtdWJlcmxlZXQuY29tIiwiaXMtd2l0aC10aGViYW5kLmNvbSIsImlzYS1nZWVrLmNv''@;'; put 'put ''bSIsImlzYS1ob2NrZXludXQuY29tIiwiaXNzbWFydGVydGhhbnlvdS5jb20iLCJsaWtlcy1waWUuY29tIiwibGlrZXNjYW5keS5jb20iLCJuZWF0LXVybC5jb20iLCJzYXZlcy10aGUtd2hhbGVzLmNvbSIsInNlbGZpcC5jb20iLCJzZWxscy1mb3ItbGVzcy5jb20iLCJzZWxscy1mb3ItdS5j''@;'; put 'put ''b20iLCJzZXJ2ZWJicy5jb20iLCJzaW1wbGUtdXJsLmNvbSIsInNwYWNlLXRvLXJlbnQuY29tIiwidGVhY2hlcy15b2dhLmNvbSIsIndyaXRlc3RoaXNibG9nLmNvbSIsImF0aC5jeCIsImZ1ZXR0ZXJ0ZGFzbmV0ei5kZSIsImlzdGVpbmdlZWsuZGUiLCJpc3RtZWluLmRlIiwibGVidGltbmV0''@;'; put 'put ''ei5kZSIsImxlaXR1bmdzZW4uZGUiLCJ0cmFldW10Z2VyYWRlLmRlIiwiYmFycmVsLW9mLWtub3dsZWRnZS5pbmZvIiwiYmFycmVsbC1vZi1rbm93bGVkZ2UuaW5mbyIsImR5bmRucy5pbmZvIiwiZm9yLW91ci5pbmZvIiwiZ3Jva3MtdGhlLmluZm8iLCJncm9rcy10aGlzLmluZm8iLCJoZXJl''@;'; put 'put ''LWZvci1tb3JlLmluZm8iLCJrbm93c2l0YWxsLmluZm8iLCJzZWxmaXAuaW5mbyIsIndlYmhvcC5pbmZvIiwiZm9yZ290Lmhlci5uYW1lIiwiZm9yZ290Lmhpcy5uYW1lIiwiYXQtYmFuZC1jYW1wLm5ldCIsImJsb2dkbnMubmV0IiwiYnJva2UtaXQubmV0IiwiYnV5c2hvdXNlcy5uZXQiLCJk''@;'; put 'put ''bnNhbGlhcy5uZXQiLCJkbnNkb2pvLm5ldCIsImRvZXMtaXQubmV0IiwiZG9udGV4aXN0Lm5ldCIsImR5bmFsaWFzLm5ldCIsImR5bmF0aG9tZS5uZXQiLCJlbmRvZmludGVybmV0Lm5ldCIsImZyb20tYXoubmV0IiwiZnJvbS1jby5uZXQiLCJmcm9tLWxhLm5ldCIsImZyb20tbnkubmV0Iiwi''@;'; put 'put ''Z2V0cy1pdC5uZXQiLCJoYW0tcmFkaW8tb3AubmV0IiwiaG9tZWZ0cC5uZXQiLCJob21laXAubmV0IiwiaG9tZWxpbnV4Lm5ldCIsImhvbWV1bml4Lm5ldCIsImluLXRoZS1iYW5kLm5ldCIsImlzLWEtY2hlZi5uZXQiLCJpcy1hLWdlZWsubmV0IiwiaXNhLWdlZWsubmV0Iiwia2lja3MtYXNz''@;'; put 'put ''Lm5ldCIsIm9mZmljZS1vbi10aGUubmV0IiwicG9kem9uZS5uZXQiLCJzY3JhcHBlci1zaXRlLm5ldCIsInNlbGZpcC5uZXQiLCJzZWxscy1pdC5uZXQiLCJzZXJ2ZWJicy5uZXQiLCJzZXJ2ZWZ0cC5uZXQiLCJ0aHJ1aGVyZS5uZXQiLCJ3ZWJob3AubmV0IiwibWVyc2VpbmUubnUiLCJtaW5l''@;'; put 'put ''Lm51Iiwic2hhY2tuZXQubnUiLCJibG9nZG5zLm9yZyIsImJsb2dzaXRlLm9yZyIsImJvbGRseWdvaW5nbm93aGVyZS5vcmciLCJkbnNhbGlhcy5vcmciLCJkbnNkb2pvLm9yZyIsImRvZXNudGV4aXN0Lm9yZyIsImRvbnRleGlzdC5vcmciLCJkb29tZG5zLm9yZyIsImR2cmRucy5vcmciLCJk''@;'; put 'put ''eW5hbGlhcy5vcmciLCJkeW5kbnMub3JnIiwiZ28uZHluZG5zLm9yZyIsImhvbWUuZHluZG5zLm9yZyIsImVuZG9maW50ZXJuZXQub3JnIiwiZW5kb2Z0aGVpbnRlcm5ldC5vcmciLCJmcm9tLW1lLm9yZyIsImdhbWUtaG9zdC5vcmciLCJnb3RkbnMub3JnIiwiaG9iYnktc2l0ZS5vcmciLCJo''@;'; put 'put ''b21lZG5zLm9yZyIsImhvbWVmdHAub3JnIiwiaG9tZWxpbnV4Lm9yZyIsImhvbWV1bml4Lm9yZyIsImlzLWEtYnJ1aW5zZmFuLm9yZyIsImlzLWEtY2FuZGlkYXRlLm9yZyIsImlzLWEtY2VsdGljc2Zhbi5vcmciLCJpcy1hLWNoZWYub3JnIiwiaXMtYS1nZWVrLm9yZyIsImlzLWEta25pZ2h0''@;'; put 'put ''Lm9yZyIsImlzLWEtbGludXgtdXNlci5vcmciLCJpcy1hLXBhdHNmYW4ub3JnIiwiaXMtYS1zb3hmYW4ub3JnIiwiaXMtZm91bmQub3JnIiwiaXMtbG9zdC5vcmciLCJpcy1zYXZlZC5vcmciLCJpcy12ZXJ5LWJhZC5vcmciLCJpcy12ZXJ5LWV2aWwub3JnIiwiaXMtdmVyeS1nb29kLm9yZyIs''@;'; put 'put ''ImlzLXZlcnktbmljZS5vcmciLCJpcy12ZXJ5LXN3ZWV0Lm9yZyIsImlzYS1nZWVrLm9yZyIsImtpY2tzLWFzcy5vcmciLCJtaXNjb25mdXNlZC5vcmciLCJwb2R6b25lLm9yZyIsInJlYWRteWJsb2cub3JnIiwic2VsZmlwLm9yZyIsInNlbGxzeW91cmhvbWUub3JnIiwic2VydmViYnMub3Jn''@;'; put 'put ''Iiwic2VydmVmdHAub3JnIiwic2VydmVnYW1lLm9yZyIsInN0dWZmLTQtc2FsZS5vcmciLCJ3ZWJob3Aub3JnIiwiYmV0dGVyLXRoYW4udHYiLCJkeW5kbnMudHYiLCJvbi10aGUtd2ViLnR2Iiwid29yc2UtdGhhbi50diIsImlzLWJ5LnVzIiwibGFuZC00LXNhbGUudXMiLCJzdHVmZi00LXNh''@;'; put 'put ''bGUudXMiLCJkeW5kbnMud3MiLCJteXBldHMud3MiLCJkZG5zZnJlZS5jb20iLCJkZG5zZ2Vlay5jb20iLCJnaWl6ZS5jb20iLCJnbGVlemUuY29tIiwia296b3cuY29tIiwibG9zZXlvdXJpcC5jb20iLCJvb2d1eS5jb20iLCJ0aGV3b3JrcGMuY29tIiwiY2FzYWNhbS5uZXQiLCJkeW51Lm5l''@;'; put 'put ''dCIsImFjY2Vzc2NhbS5vcmciLCJjYW1kdnIub3JnIiwiZnJlZWRkbnMub3JnIiwibXl3aXJlLm9yZyIsIndlYnJlZGlyZWN0Lm9yZyIsIm15ZGRucy5yb2NrcyIsImR5bnY2Lm5ldCIsImU0LmN6IiwiZWFzeXBhbmVsLmFwcCIsImVhc3lwYW5lbC5ob3N0IiwiKi5ld3AubGl2ZSIsInR3bWFp''@;'; put 'put ''bC5jYyIsInR3bWFpbC5uZXQiLCJ0d21haWwub3JnIiwibXltYWlsZXIuY29tLnR3IiwidXJsLnR3IiwiYXQuZW1mLmNhbXAiLCJydC5odCIsImVsZW1lbnRvci5jbG91ZCIsImVsZW1lbnRvci5jb29sIiwiZW4tcm9vdC5mciIsIm15dHVsZWFwLmNvbSIsInR1bGVhcC1wYXJ0bmVycy5jb20i''@;'; put 'put ''LCJlbmNyLmFwcCIsImVuY29yZWFwaS5jb20iLCJldS5lbmNvd2F5LmNsb3VkIiwiZXUub3JnIiwiYWwuZXUub3JnIiwiYXNzby5ldS5vcmciLCJhdC5ldS5vcmciLCJhdS5ldS5vcmciLCJiZS5ldS5vcmciLCJiZy5ldS5vcmciLCJjYS5ldS5vcmciLCJjZC5ldS5vcmciLCJjaC5ldS5vcmci''@;'; put 'put ''LCJjbi5ldS5vcmciLCJjeS5ldS5vcmciLCJjei5ldS5vcmciLCJkZS5ldS5vcmciLCJkay5ldS5vcmciLCJlZHUuZXUub3JnIiwiZWUuZXUub3JnIiwiZXMuZXUub3JnIiwiZmkuZXUub3JnIiwiZnIuZXUub3JnIiwiZ3IuZXUub3JnIiwiaHIuZXUub3JnIiwiaHUuZXUub3JnIiwiaWUuZXUu''@;'; put 'put ''b3JnIiwiaWwuZXUub3JnIiwiaW4uZXUub3JnIiwiaW50LmV1Lm9yZyIsImlzLmV1Lm9yZyIsIml0LmV1Lm9yZyIsImpwLmV1Lm9yZyIsImtyLmV1Lm9yZyIsImx0LmV1Lm9yZyIsImx1LmV1Lm9yZyIsImx2LmV1Lm9yZyIsIm1lLmV1Lm9yZyIsIm1rLmV1Lm9yZyIsIm10LmV1Lm9yZyIsIm15''@;'; put 'put ''LmV1Lm9yZyIsIm5ldC5ldS5vcmciLCJuZy5ldS5vcmciLCJubC5ldS5vcmciLCJuby5ldS5vcmciLCJuei5ldS5vcmciLCJwbC5ldS5vcmciLCJwdC5ldS5vcmciLCJyby5ldS5vcmciLCJydS5ldS5vcmciLCJzZS5ldS5vcmciLCJzaS5ldS5vcmciLCJzay5ldS5vcmciLCJ0ci5ldS5vcmci''@;'; put 'put ''LCJ1ay5ldS5vcmciLCJ1cy5ldS5vcmciLCJldXJvZGlyLnJ1IiwiZXUtMS5ldmVubm9kZS5jb20iLCJldS0yLmV2ZW5ub2RlLmNvbSIsImV1LTMuZXZlbm5vZGUuY29tIiwiZXUtNC5ldmVubm9kZS5jb20iLCJ1cy0xLmV2ZW5ub2RlLmNvbSIsInVzLTIuZXZlbm5vZGUuY29tIiwidXMtMy5l''@;'; put 'put ''dmVubm9kZS5jb20iLCJ1cy00LmV2ZW5ub2RlLmNvbSIsInJlbGF5LmV2ZXJ2YXVsdC5hcHAiLCJyZWxheS5ldmVydmF1bHQuZGV2IiwiZXhwby5hcHAiLCJzdGFnaW5nLmV4cG8uYXBwIiwib25mYWJyaWNhLmNvbSIsInJ1Lm5ldCIsImFkeWdleWEucnUiLCJiYXNoa2lyaWEucnUiLCJiaXIu''@;'; put 'put ''cnUiLCJjYmcucnUiLCJjb20ucnUiLCJkYWdlc3Rhbi5ydSIsImdyb3pueS5ydSIsImthbG15a2lhLnJ1Iiwia3VzdGFuYWkucnUiLCJtYXJpbmUucnUiLCJtb3Jkb3ZpYS5ydSIsIm1zay5ydSIsIm15dGlzLnJ1IiwibmFsY2hpay5ydSIsIm5vdi5ydSIsInB5YXRpZ29yc2sucnUiLCJzcGIu''@;'; put 'put ''cnUiLCJ2bGFkaWthdmthei5ydSIsInZsYWRpbWlyLnJ1IiwiYWJraGF6aWEuc3UiLCJhZHlnZXlhLnN1IiwiYWt0eXViaW5zay5zdSIsImFya2hhbmdlbHNrLnN1IiwiYXJtZW5pYS5zdSIsImFzaGdhYmFkLnN1IiwiYXplcmJhaWphbi5zdSIsImJhbGFzaG92LnN1IiwiYmFzaGtpcmlhLnN1''@;'; put 'put ''IiwiYnJ5YW5zay5zdSIsImJ1a2hhcmEuc3UiLCJjaGlta2VudC5zdSIsImRhZ2VzdGFuLnN1IiwiZWFzdC1rYXpha2hzdGFuLnN1IiwiZXhuZXQuc3UiLCJnZW9yZ2lhLnN1IiwiZ3Jvem55LnN1IiwiaXZhbm92by5zdSIsImphbWJ5bC5zdSIsImthbG15a2lhLnN1Iiwia2FsdWdhLnN1Iiwi''@;'; put 'put ''a2FyYWNvbC5zdSIsImthcmFnYW5kYS5zdSIsImthcmVsaWEuc3UiLCJraGFrYXNzaWEuc3UiLCJrcmFzbm9kYXIuc3UiLCJrdXJnYW4uc3UiLCJrdXN0YW5haS5zdSIsImxlbnVnLnN1IiwibWFuZ3lzaGxhay5zdSIsIm1vcmRvdmlhLnN1IiwibXNrLnN1IiwibXVybWFuc2suc3UiLCJuYWxj''@;'; put 'put ''aGlrLnN1IiwibmF2b2kuc3UiLCJub3J0aC1rYXpha2hzdGFuLnN1Iiwibm92LnN1Iiwib2JuaW5zay5zdSIsInBlbnphLnN1IiwicG9rcm92c2suc3UiLCJzb2NoaS5zdSIsInNwYi5zdSIsInRhc2hrZW50LnN1IiwidGVybWV6LnN1IiwidG9nbGlhdHRpLnN1IiwidHJvaXRzay5zdSIsInRz''@;'; put 'put ''ZWxpbm9ncmFkLnN1IiwidHVsYS5zdSIsInR1dmEuc3UiLCJ2bGFkaWthdmthei5zdSIsInZsYWRpbWlyLnN1Iiwidm9sb2dkYS5zdSIsImNoYW5uZWxzZHZyLm5ldCIsInUuY2hhbm5lbHNkdnIubmV0IiwiZWRnZWNvbXB1dGUuYXBwIiwiZmFzdGx5LWVkZ2UuY29tIiwiZmFzdGx5LXRlcnJh''@;'; put 'put ''cml1bS5jb20iLCJmcmVldGxzLmZhc3RseS5uZXQiLCJtYXAuZmFzdGx5Lm5ldCIsImEucHJvZC5mYXN0bHkubmV0IiwiZ2xvYmFsLnByb2QuZmFzdGx5Lm5ldCIsImEuc3NsLmZhc3RseS5uZXQiLCJiLnNzbC5mYXN0bHkubmV0IiwiZ2xvYmFsLnNzbC5mYXN0bHkubmV0IiwiZmFzdGx5bGIu''@;'; put 'put ''bmV0IiwibWFwLmZhc3RseWxiLm5ldCIsIioudXNlci5mbSIsImZhc3R2cHMtc2VydmVyLmNvbSIsImZhc3R2cHMuaG9zdCIsIm15ZmFzdC5ob3N0IiwiZmFzdHZwcy5zaXRlIiwibXlmYXN0LnNwYWNlIiwiY29ubi51ayIsImNvcHJvLnVrIiwiaG9zcC51ayIsImZlZG9yYWluZnJhY2xvdWQu''@;'; put 'put ''b3JnIiwiZmVkb3JhcGVvcGxlLm9yZyIsImNsb3VkLmZlZG9yYXByb2plY3Qub3JnIiwiYXBwLm9zLmZlZG9yYXByb2plY3Qub3JnIiwiYXBwLm9zLnN0Zy5mZWRvcmFwcm9qZWN0Lm9yZyIsIm15ZG9iaXNzLmNvbSIsImZoLW11ZW5zdGVyLmlvIiwiZmlsZWdlYXIubWUiLCJmaXJlYmFzZWFw''@;'; put 'put ''cC5jb20iLCJmbGRydi5jb20iLCJmbHV0dGVyZmxvdy5hcHAiLCJmbHkuZGV2Iiwic2h3LmlvIiwiZWRnZWFwcC5uZXQiLCJmb3JnZWJsb2Nrcy5jb20iLCJpZC5mb3JnZXJvY2suaW8iLCJmcmFtZXIuYWkiLCJmcmFtZXIuYXBwIiwiZnJhbWVyY2FudmFzLmNvbSIsImZyYW1lci5tZWRpYSIs''@;'; put 'put ''ImZyYW1lci5waG90b3MiLCJmcmFtZXIud2Vic2l0ZSIsImZyYW1lci53aWtpIiwiMGUudmMiLCJmcmVlYm94LW9zLmNvbSIsImZyZWVib3hvcy5jb20iLCJmYngtb3MuZnIiLCJmYnhvcy5mciIsImZyZWVib3gtb3MuZnIiLCJmcmVlYm94b3MuZnIiLCJmcmVlZGVza3RvcC5vcmciLCJmcmVl''@;'; put 'put ''bXlpcC5jb20iLCIqLmZydXNreS5kZSIsIndpZW4uZnVua2ZldWVyLmF0IiwiZGFlbW9uLmFzaWEiLCJkaXguYXNpYSIsIm15ZG5zLmJ6IiwiMGFtLmpwIiwiMGcwLmpwIiwiMGowLmpwIiwiMHQwLmpwIiwibXlkbnMuanAiLCJwZ3cuanAiLCJ3amcuanAiLCJrZXl3b3JkLW9uLm5ldCIsImxp''@;'; put 'put ''dmUtb24ubmV0Iiwic2VydmVyLW9uLm5ldCIsIm15ZG5zLnR3IiwibXlkbnMudmMiLCIqLmZ1dHVyZWNtcy5hdCIsIiouZXguZnV0dXJlY21zLmF0IiwiKi5pbi5mdXR1cmVjbXMuYXQiLCJmdXR1cmVob3N0aW5nLmF0IiwiZnV0dXJlbWFpbGluZy5hdCIsIiouZXgub3J0c2luZm8uYXQiLCIq''@;'; put 'put ''Lmt1bmRlbi5vcnRzaW5mby5hdCIsIiouc3RhdGljcy5jbG91ZCIsImFsaWFzZXMxMjEuY29tIiwiY2FtcGFpZ24uZ292LnVrIiwic2VydmljZS5nb3YudWsiLCJpbmRlcGVuZGVudC1jb21taXNzaW9uLnVrIiwiaW5kZXBlbmRlbnQtaW5xdWVzdC51ayIsImluZGVwZW5kZW50LWlucXVpcnku''@;'; put 'put ''dWsiLCJpbmRlcGVuZGVudC1wYW5lbC51ayIsImluZGVwZW5kZW50LXJldmlldy51ayIsInB1YmxpYy1pbnF1aXJ5LnVrIiwicm95YWwtY29tbWlzc2lvbi51ayIsImdlaGlybi5uZS5qcCIsInVzZXJjb250ZW50LmpwIiwiZ2VudGFwcHMuY29tIiwiZ2VudGxlbnRhcGlzLmNvbSIsImxhYi5t''@;'; put 'put ''cyIsImNkbi1lZGdlcy5uZXQiLCJsb2NhbGNlcnQubmV0IiwibG9jYWxob3N0Y2VydC5uZXQiLCJnc2ouYnoiLCJnaXRodWJ1c2VyY29udGVudC5jb20iLCJnaXRodWJwcmV2aWV3LmRldiIsImdpdGh1Yi5pbyIsImdpdGxhYi5pbyIsImdpdGFwcC5zaSIsImdpdHBhZ2Uuc2kiLCJnbGl0Y2gu''@;'; put 'put ''bWUiLCJub2cuY29tbXVuaXR5IiwiY28ucm8iLCJzaG9wLnJvIiwibG9saXBvcC5pbyIsImFuZ3J5LmpwIiwiYmFieWJsdWUuanAiLCJiYWJ5bWlsay5qcCIsImJhY2tkcm9wLmpwIiwiYmFtYmluYS5qcCIsImJpdHRlci5qcCIsImJsdXNoLmpwIiwiYm9vLmpwIiwiYm95LmpwIiwiYm95ZnJp''@;'; put 'put ''ZW5kLmpwIiwiYnV0LmpwIiwiY2FuZHlwb3AuanAiLCJjYXBvby5qcCIsImNhdGZvb2QuanAiLCJjaGVhcC5qcCIsImNoaWNhcHBhLmpwIiwiY2hpbGxvdXQuanAiLCJjaGlwcy5qcCIsImNob3dkZXIuanAiLCJjaHUuanAiLCJjaWFvLmpwIiwiY29jb3R0ZS5qcCIsImNvb2xibG9nLmpwIiwi''@;'; put 'put ''Y3Jhbmt5LmpwIiwiY3V0ZWdpcmwuanAiLCJkYWEuanAiLCJkZWNhLmpwIiwiZGVjaS5qcCIsImRpZ2ljay5qcCIsImVnb2lzbS5qcCIsImZha2VmdXIuanAiLCJmZW0uanAiLCJmbGllci5qcCIsImZsb3BweS5qcCIsImZvb2wuanAiLCJmcmVuY2hraXNzLmpwIiwiZ2lybGZyaWVuZC5qcCIs''@;'; put 'put ''Imdpcmx5LmpwIiwiZ2xvb215LmpwIiwiZ29ubmEuanAiLCJncmVhdGVyLmpwIiwiaGFjY2EuanAiLCJoZWF2eS5qcCIsImhlci5qcCIsImhpaG8uanAiLCJoaXBweS5qcCIsImhvbHkuanAiLCJodW5ncnkuanAiLCJpY3VydXMuanAiLCJpdGlnby5qcCIsImplbGx5YmVhbi5qcCIsImtpa2ly''@;'; put 'put ''YXJhLmpwIiwia2lsbC5qcCIsImtpbG8uanAiLCJrdXJvbi5qcCIsImxpdHRsZXN0YXIuanAiLCJsb2xpcG9wbWMuanAiLCJsb2xpdGFwdW5rLmpwIiwibG9tby5qcCIsImxvdmVwb3AuanAiLCJsb3Zlc2ljay5qcCIsIm1haW4uanAiLCJtb2RzLmpwIiwibW9uZC5qcCIsIm1vbmdvbGlhbi5q''@;'; put 'put ''cCIsIm1vby5qcCIsIm5hbWFzdGUuanAiLCJuaWtpdGEuanAiLCJub2J1c2hpLmpwIiwibm9vci5qcCIsIm9vcHMuanAiLCJwYXJhbGxlbC5qcCIsInBhcmFzaXRlLmpwIiwicGVjb3JpLmpwIiwicGVld2VlLmpwIiwicGVubmUuanAiLCJwZXBwZXIuanAiLCJwZXJtYS5qcCIsInBpZ2JvYXQu''@;'; put 'put ''anAiLCJwaW5va28uanAiLCJwdW55dS5qcCIsInB1cHUuanAiLCJwdXNzeWNhdC5qcCIsInB5YS5qcCIsInJhaW5kcm9wLmpwIiwicmVhZHltYWRlLmpwIiwic2FkaXN0LmpwIiwic2Nob29sYnVzLmpwIiwic2VjcmV0LmpwIiwic3RhYmEuanAiLCJzdHJpcHBlci5qcCIsInN1Yi5qcCIsInN1''@;'; put 'put ''bm55ZGF5LmpwIiwidGhpY2suanAiLCJ0b25rb3RzdS5qcCIsInVuZGVyLmpwIiwidXBwZXIuanAiLCJ2ZWx2ZXQuanAiLCJ2ZXJzZS5qcCIsInZlcnN1cy5qcCIsInZpdmlhbi5qcCIsIndhdHNvbi5qcCIsIndlYmxpa2UuanAiLCJ3aGl0ZXNub3cuanAiLCJ6b21iaWUuanAiLCJoZXRlbWwu''@;'; put 'put ''bmV0IiwiZ3JhcGhpYy5kZXNpZ24iLCJnb2lwLmRlIiwiYmxvZ3Nwb3QuYWUiLCJibG9nc3BvdC5hbCIsImJsb2dzcG90LmFtIiwiKi5ob3N0ZWQuYXBwIiwiKi5ydW4uYXBwIiwid2ViLmFwcCIsImJsb2dzcG90LmNvbS5hciIsImJsb2dzcG90LmNvLmF0IiwiYmxvZ3Nwb3QuY29tLmF1Iiwi''@;'; put 'put ''YmxvZ3Nwb3QuYmEiLCJibG9nc3BvdC5iZSIsImJsb2dzcG90LmJnIiwiYmxvZ3Nwb3QuYmoiLCJibG9nc3BvdC5jb20uYnIiLCJibG9nc3BvdC5jb20uYnkiLCJibG9nc3BvdC5jYSIsImJsb2dzcG90LmNmIiwiYmxvZ3Nwb3QuY2giLCJibG9nc3BvdC5jbCIsImJsb2dzcG90LmNvbS5jbyIs''@;'; put 'put ''IiouMGVtbS5jb20iLCJhcHBzcG90LmNvbSIsIiouci5hcHBzcG90LmNvbSIsImJsb2dzcG90LmNvbSIsImNvZGVzcG90LmNvbSIsImdvb2dsZWFwaXMuY29tIiwiZ29vZ2xlY29kZS5jb20iLCJwYWdlc3BlZWRtb2JpbGl6ZXIuY29tIiwid2l0aGdvb2dsZS5jb20iLCJ3aXRoeW91dHViZS5j''@;'; put 'put ''b20iLCJibG9nc3BvdC5jdiIsImJsb2dzcG90LmNvbS5jeSIsImJsb2dzcG90LmN6IiwiYmxvZ3Nwb3QuZGUiLCIqLmdhdGV3YXkuZGV2IiwiYmxvZ3Nwb3QuZGsiLCJibG9nc3BvdC5jb20uZWUiLCJibG9nc3BvdC5jb20uZWciLCJibG9nc3BvdC5jb20uZXMiLCJibG9nc3BvdC5maSIsImJs''@;'; put 'put ''b2dzcG90LmZyIiwiY2xvdWQuZ29vZyIsInRyYW5zbGF0ZS5nb29nIiwiKi51c2VyY29udGVudC5nb29nIiwiYmxvZ3Nwb3QuZ3IiLCJibG9nc3BvdC5oayIsImJsb2dzcG90LmhyIiwiYmxvZ3Nwb3QuaHUiLCJibG9nc3BvdC5jby5pZCIsImJsb2dzcG90LmllIiwiYmxvZ3Nwb3QuY28uaWwi''@;'; put 'put ''LCJibG9nc3BvdC5pbiIsImJsb2dzcG90LmlzIiwiYmxvZ3Nwb3QuaXQiLCJibG9nc3BvdC5qcCIsImJsb2dzcG90LmNvLmtlIiwiYmxvZ3Nwb3Qua3IiLCJibG9nc3BvdC5saSIsImJsb2dzcG90Lmx0IiwiYmxvZ3Nwb3QubHUiLCJibG9nc3BvdC5tZCIsImJsb2dzcG90Lm1rIiwiYmxvZ3Nw''@;'; put 'put ''b3QuY29tLm10IiwiYmxvZ3Nwb3QubXgiLCJibG9nc3BvdC5teSIsImNsb3VkZnVuY3Rpb25zLm5ldCIsImJsb2dzcG90LmNvbS5uZyIsImJsb2dzcG90Lm5sIiwiYmxvZ3Nwb3Qubm8iLCJibG9nc3BvdC5jby5ueiIsImJsb2dzcG90LnBlIiwiYmxvZ3Nwb3QucHQiLCJibG9nc3BvdC5xYSIs''@;'; put 'put ''ImJsb2dzcG90LnJlIiwiYmxvZ3Nwb3Qucm8iLCJibG9nc3BvdC5ycyIsImJsb2dzcG90LnJ1IiwiYmxvZ3Nwb3Quc2UiLCJibG9nc3BvdC5zZyIsImJsb2dzcG90LnNpIiwiYmxvZ3Nwb3Quc2siLCJibG9nc3BvdC5zbiIsImJsb2dzcG90LnRkIiwiYmxvZ3Nwb3QuY29tLnRyIiwiYmxvZ3Nw''@;'; put 'put ''b3QudHciLCJibG9nc3BvdC51ZyIsImJsb2dzcG90LmNvLnVrIiwiYmxvZ3Nwb3QuY29tLnV5IiwiYmxvZ3Nwb3Qudm4iLCJibG9nc3BvdC5jby56YSIsImdvdXBpbGUuZnIiLCJweW1udC51ayIsImNsb3VkYXBwcy5kaWdpdGFsIiwibG9uZG9uLmNsb3VkYXBwcy5kaWdpdGFsIiwiZ292Lm5s''@;'; put 'put ''IiwiZ3JhZmFuYS1kZXYubmV0IiwiZ3JheWpheWxlYWd1ZXMuY29tIiwiZ1x4ZmNuc3RpZ2Jlc3RlbGxlbi5kZSIsImdceGZjbnN0aWdsaWVmZXJuLmRlIiwiZmluLmNpIiwiZnJlZS5ociIsImNhYS5saSIsInVhLnJzIiwiY29uZi5zZSIsImhceGU0a2tpbmVuLmZpIiwiaHJzbi5kZXYiLCJo''@;'; put 'put ''YXNoYmFuZy5zaCIsImhhc3VyYS5hcHAiLCJoYXN1cmEtYXBwLmlvIiwiaGF0ZW5hYmxvZy5jb20iLCJoYXRlbmFkaWFyeS5jb20iLCJoYXRlYmxvLmpwIiwiaGF0ZW5hYmxvZy5qcCIsImhhdGVuYWRpYXJ5LmpwIiwiaGF0ZW5hZGlhcnkub3JnIiwicGFnZXMuaXQuaHMtaGVpbGJyb25uLmRl''@;'; put 'put ''IiwicGFnZXMtcmVzZWFyY2guaXQuaHMtaGVpbGJyb25uLmRlIiwiaGVpeXUuc3BhY2UiLCJoZWxpb2hvLnN0IiwiaGVsaW9ob3N0LnVzIiwiaGVwZm9yZ2Uub3JnIiwiaGVyb2t1YXBwLmNvbSIsImhlcm9rdXNzbC5jb20iLCJoZXlmbG93LnBhZ2UiLCJoZXlmbG93LnNpdGUiLCJyYXZlbmRi''@;'; put 'put ''LmNsb3VkIiwicmF2ZW5kYi5jb21tdW5pdHkiLCJkZXZlbG9wbWVudC5ydW4iLCJyYXZlbmRiLnJ1biIsImhvbWVza2xlcC5wbCIsIioua2luLm9uZSIsIiouaWQucHViIiwiKi5raW4ucHViIiwic2VjYWFzLmhrIiwiaG9wbGl4LnNob3AiLCJvcnguYml6IiwiYml6LmdsIiwiYml6Lm5nIiwi''@;'; put 'put ''Y28uYml6Lm5nIiwiZGwuYml6Lm5nIiwiZ28uYml6Lm5nIiwibGcuYml6Lm5nIiwib24uYml6Lm5nIiwiY29sLm5nIiwiZmlybS5uZyIsImdlbi5uZyIsImx0ZC5uZyIsIm5nby5uZyIsInBsYy5uZyIsImllLnVhIiwiaG9zdHlob3N0aW5nLmlvIiwiaGYuc3BhY2UiLCJzdGF0aWMuaGYuc3Bh''@;'; put 'put ''Y2UiLCJoeXBlcm5vZGUuaW8iLCJpb2JiLm5ldCIsImNvLmN6IiwiKi5tb29uc2NhbGUuaW8iLCJtb29uc2NhbGUubmV0IiwiZ3IuY29tIiwiaWtpLmZpIiwiaWJ4b3MuaXQiLCJpbGlhZGJveG9zLml0Iiwic211c2hjZG4uY29tIiwid3Bob3N0ZWRtYWlsLmNvbSIsIndwbXVjZG4uY29tIiwi''@;'; put 'put ''dGVtcHVybC5ob3N0Iiwid3BtdWRldi5ob3N0IiwiZHluLWJlcmxpbi5kZSIsImluLWJlcmxpbi5kZSIsImluLWJyYi5kZSIsImluLWJ1dHRlci5kZSIsImluLWRzbC5kZSIsImluLXZwbi5kZSIsImluLWRzbC5uZXQiLCJpbi12cG4ubmV0IiwiaW4tZHNsLm9yZyIsImluLXZwbi5vcmciLCJi''@;'; put 'put ''aXouYXQiLCJpbmZvLmF0IiwiaW5mby5jeCIsImFjLmxlZy5iciIsImFsLmxlZy5iciIsImFtLmxlZy5iciIsImFwLmxlZy5iciIsImJhLmxlZy5iciIsImNlLmxlZy5iciIsImRmLmxlZy5iciIsImVzLmxlZy5iciIsImdvLmxlZy5iciIsIm1hLmxlZy5iciIsIm1nLmxlZy5iciIsIm1zLmxl''@;'; put 'put ''Zy5iciIsIm10LmxlZy5iciIsInBhLmxlZy5iciIsInBiLmxlZy5iciIsInBlLmxlZy5iciIsInBpLmxlZy5iciIsInByLmxlZy5iciIsInJqLmxlZy5iciIsInJuLmxlZy5iciIsInJvLmxlZy5iciIsInJyLmxlZy5iciIsInJzLmxlZy5iciIsInNjLmxlZy5iciIsInNlLmxlZy5iciIsInNw''@;'; put 'put ''LmxlZy5iciIsInRvLmxlZy5iciIsInBpeG9saW5vLmNvbSIsIm5hNHUucnUiLCJhcHBzLTFhbmQxLmNvbSIsImxpdmUtd2Vic2l0ZS5jb20iLCJhcHBzLTFhbmQxLm5ldCIsIndlYnNpdGVidWlsZGVyLm9ubGluZSIsImFwcC1pb25vcy5zcGFjZSIsImlvcHN5cy5zZSIsIiouZHdlYi5saW5r''@;'; put 'put ''IiwiaXBpZm9ueS5uZXQiLCJpci5tZCIsImlzLWEtZ29vZC5kZXYiLCJpcy1hLmRldiIsImlzZXJ2c2NodWxlLmRlIiwibWVpbi1pc2Vydi5kZSIsInNjaHVscGxhdHRmb3JtLmRlIiwic2NodWxzZXJ2ZXIuZGUiLCJ0ZXN0LWlzZXJ2LmRlIiwiaXNlcnYuZGV2IiwibWVsLmNsb3VkbGV0cy5j''@;'; put 'put ''b20uYXUiLCJjbG91ZC5pbnRlcmhvc3Rzb2x1dGlvbnMuYmUiLCJhbHAxLmFlLmZsb3cuY2giLCJhcHBlbmdpbmUuZmxvdy5jaCIsImVzLTEuYXhhcm5ldC5jbG91ZCIsImRpYWRlbS5jbG91ZCIsInZpcC5qZWxhc3RpYy5jbG91ZCIsImplbGUuY2xvdWQiLCJpdDEuZXVyLmFydWJhLmplbnYt''@;'; put 'put ''YXJ1YmEuY2xvdWQiLCJpdDEuamVudi1hcnViYS5jbG91ZCIsImtlbGl3ZWIuY2xvdWQiLCJjcy5rZWxpd2ViLmNsb3VkIiwib3hhLmNsb3VkIiwidG4ub3hhLmNsb3VkIiwidWsub3hhLmNsb3VkIiwicHJpbWV0ZWwuY2xvdWQiLCJ1ay5wcmltZXRlbC5jbG91ZCIsImNhLnJlY2xhaW0uY2xv''@;'; put 'put ''dWQiLCJ1ay5yZWNsYWltLmNsb3VkIiwidXMucmVjbGFpbS5jbG91ZCIsImNoLnRyZW5kaG9zdGluZy5jbG91ZCIsImRlLnRyZW5kaG9zdGluZy5jbG91ZCIsImplbGUuY2x1YiIsImRvcGFhcy5jb20iLCJwYWFzLmhvc3RlZC1ieS1wcmV2aWRlci5jb20iLCJyYWctY2xvdWQuaG9zdGV1ci5j''@;'; put 'put ''b20iLCJyYWctY2xvdWQtY2guaG9zdGV1ci5jb20iLCJqY2xvdWQuaWstc2VydmVyLmNvbSIsImpjbG91ZC12ZXItanBjLmlrLXNlcnZlci5jb20iLCJkZW1vLmplbGFzdGljLmNvbSIsInBhYXMubWFzc2l2ZWdyaWQuY29tIiwiamVkLndhZmFpY2xvdWQuY29tIiwicnlkLndhZmFpY2xvdWQu''@;'; put 'put ''Y29tIiwiai5zY2FsZWZvcmNlLmNvbS5jeSIsImplbGFzdGljLmRvZ2Fkby5ldSIsImZpLmNsb3VkcGxhdGZvcm0uZmkiLCJkZW1vLmRhdGFjZW50ZXIuZmkiLCJwYWFzLmRhdGFjZW50ZXIuZmkiLCJqZWxlLmhvc3QiLCJtaXJjbG91ZC5ob3N0IiwicGFhcy5iZWVieXRlLmlvIiwic2VrZDEu''@;'; put 'put ''YmVlYnl0ZWFwcC5pbyIsImplbGUuaW8iLCJqYy5uZWVuLml0IiwiamNsb3VkLmt6IiwiY2xvdWRqaWZmeS5uZXQiLCJmcmExLWRlLmNsb3VkamlmZnkubmV0Iiwid2VzdDEtdXMuY2xvdWRqaWZmeS5uZXQiLCJqbHMtc3RvMS5lbGFzdHgubmV0IiwiamxzLXN0bzIuZWxhc3R4Lm5ldCIsImps''@;'; put 'put ''cy1zdG8zLmVsYXN0eC5uZXQiLCJmci0xLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwibG9uLTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJsb24tMi5wYWFzLm1hc3NpdmVncmlkLm5ldCIsIm55LTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJueS0yLnBhYXMubWFzc2l2ZWdyaWQubmV0Iiwic2ct''@;'; put 'put ''MS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsImplbGFzdGljLnNhdmVpbmNsb3VkLm5ldCIsIm5vcmRlc3RlLWlkYy5zYXZlaW5jbG91ZC5uZXQiLCJqLnNjYWxlZm9yY2UubmV0Iiwic2RzY2xvdWQucGwiLCJ1bmljbG91ZC5wbCIsIm1pcmNsb3VkLnJ1IiwiZW5zY2FsZWQuc2ciLCJqZWxlLnNp''@;'; put 'put ''dGUiLCJqZWxhc3RpYy50ZWFtIiwib3JhbmdlY2xvdWQudG4iLCJqLmxheWVyc2hpZnQuY28udWsiLCJwaHguZW5zY2FsZWQudXMiLCJtaXJjbG91ZC51cyIsIm15amluby5ydSIsIiouaG9zdGluZy5teWppbm8ucnUiLCIqLmxhbmRpbmcubXlqaW5vLnJ1IiwiKi5zcGVjdHJ1bS5teWppbm8u''@;'; put 'put ''cnUiLCIqLnZwcy5teWppbm8ucnUiLCJqb3RlbHVsdS5jbG91ZCIsIndlYmFkb3JzaXRlLmNvbSIsImpvdXd3ZWIuc2l0ZSIsIiouY25zLmpveWVudC5jb20iLCIqLnRyaXRvbi56b25lIiwianMub3JnIiwia2Fhcy5nZyIsImtocGxheS5ubCIsImthcHNpLmZpIiwiZXpwcm94eS5rdWxldXZl''@;'; put 'put ''bi5iZSIsImt1bGV1dmVuLmNsb3VkIiwia2V5bWFjaGluZS5kZSIsImtpbmdob3N0Lm5ldCIsInVuaTUubmV0Iiwia25pZ2h0cG9pbnQuc3lzdGVtcyIsImtvb2Jpbi5ldmVudHMiLCJ3ZWJ0aGluZ3MuaW8iLCJrcmVsbGlhbi5uZXQiLCJveWEudG8iLCJnaXQtcmVwb3MuZGUiLCJsY3ViZS1z''@;'; put 'put ''ZXJ2ZXIuZGUiLCJzdm4tcmVwb3MuZGUiLCJsZWFkcGFnZXMuY28iLCJscGFnZXMuY28iLCJscHVzZXJjb250ZW50LmNvbSIsImxlbHV4LnNpdGUiLCJsaWJwMnAuZGlyZWN0IiwicnVuY29udGFpbmVycy5kZXYiLCJjby5idXNpbmVzcyIsImNvLmVkdWNhdGlvbiIsImNvLmV2ZW50cyIsImNv''@;'; put 'put ''LmZpbmFuY2lhbCIsImNvLm5ldHdvcmsiLCJjby5wbGFjZSIsImNvLnRlY2hub2xvZ3kiLCJsaW5reWFyZC1jbG91ZC5jaCIsImxpbmt5YXJkLmNsb3VkIiwibWVtYmVycy5saW5vZGUuY29tIiwiKi5ub2RlYmFsYW5jZXIubGlub2RlLmNvbSIsIioubGlub2Rlb2JqZWN0cy5jb20iLCJpcC5s''@;'; put 'put ''aW5vZGV1c2VyY29udGVudC5jb20iLCJ3ZS5icyIsImZpbGVnZWFyLXNnLm1lIiwiZ2dmZi5uZXQiLCIqLnVzZXIubG9jYWxjZXJ0LmRldiIsImxvZHoucGwiLCJwYWJpYW5pY2UucGwiLCJwbG9jay5wbCIsInNpZXJhZHoucGwiLCJza2llcm5pZXdpY2UucGwiLCJ6Z2llcnoucGwiLCJsb2dp''@;'; put 'put ''bmxpbmUuYXBwIiwibG9naW5saW5lLmRldiIsImxvZ2lubGluZS5pbyIsImxvZ2lubGluZS5zZXJ2aWNlcyIsImxvZ2lubGluZS5zaXRlIiwibG9obXVzLm1lIiwic2VydmVycy5ydW4iLCJrcmFzbmlrLnBsIiwibGVjem5hLnBsIiwibHViYXJ0b3cucGwiLCJsdWJsaW4ucGwiLCJwb25pYXRv''@;'; put 'put ''d2EucGwiLCJzd2lkbmlrLnBsIiwiZ2x1Zy5vcmcudWsiLCJsdWcub3JnLnVrIiwibHVncy5vcmcudWsiLCJiYXJzeS5iZyIsImJhcnN5LmNsdWIiLCJiYXJzeWNlbnRlci5jb20iLCJiYXJzeW9ubGluZS5jb20iLCJiYXJzeS5kZSIsImJhcnN5LmRldiIsImJhcnN5LmV1IiwiYmFyc3kuZ3Ii''@;'; put 'put ''LCJiYXJzeS5pbiIsImJhcnN5LmluZm8iLCJiYXJzeS5pbyIsImJhcnN5Lm1lIiwiYmFyc3kubWVudSIsImJhcnN5b25saW5lLm1lbnUiLCJiYXJzeS5tb2JpIiwiYmFyc3kubmV0IiwiYmFyc3kub25saW5lIiwiYmFyc3kub3JnIiwiYmFyc3kucHJvIiwiYmFyc3kucHViIiwiYmFyc3kucm8i''@;'; put 'put ''LCJiYXJzeS5ycyIsImJhcnN5LnNob3AiLCJiYXJzeW9ubGluZS5zaG9wIiwiYmFyc3kuc2l0ZSIsImJhcnN5LnN0b3JlIiwiYmFyc3kuc3VwcG9ydCIsImJhcnN5LnVrIiwiYmFyc3kuY28udWsiLCJiYXJzeW9ubGluZS5jby51ayIsIioubWFnZW50b3NpdGUuY2xvdWQiLCJoYi5jbGRtYWls''@;'; put 'put ''LnJ1IiwibWF0bGFiLmNsb3VkIiwibW9kZWxzY2FwZS5jb20iLCJtd2Nsb3Vkbm9ucHJvZC5jb20iLCJwb2x5c3BhY2UuY29tIiwibWF5Zmlyc3QuaW5mbyIsIm1heWZpcnN0Lm9yZyIsIm1hemVwbGF5LmNvbSIsIm1jZGlyLm1lIiwibWNkaXIucnUiLCJ2cHMubWNkaXIucnUiLCJtY3ByZS5y''@;'; put 'put ''dSIsIm1lZGlhdGVjaC5ieSIsIm1lZGlhdGVjaC5kZXYiLCJocmEuaGVhbHRoIiwibWVkdXNhanMuYXBwIiwibWluaXNlcnZlci5jb20iLCJtZW1zZXQubmV0IiwibWVzc2VybGkuYXBwIiwiYXRtZXRhLmNvbSIsImFwcHMuZmJzYnguY29tIiwiKi5jbG91ZC5tZXRhY2VudHJ1bS5jeiIsImN1''@;'; put 'put ''c3RvbS5tZXRhY2VudHJ1bS5jeiIsImZsdC5jbG91ZC5tdW5pLmN6IiwidXNyLmNsb3VkLm11bmkuY3oiLCJtZXRlb3JhcHAuY29tIiwiZXUubWV0ZW9yYXBwLmNvbSIsImNvLnBsIiwiKi5henVyZWNvbnRhaW5lci5pbyIsImF6dXJlLWFwaS5uZXQiLCJhenVyZS1tb2JpbGUubmV0IiwiYXp1''@;'; put 'put ''cmVlZGdlLm5ldCIsImF6dXJlZmQubmV0IiwiYXp1cmVzdGF0aWNhcHBzLm5ldCIsIjEuYXp1cmVzdGF0aWNhcHBzLm5ldCIsIjIuYXp1cmVzdGF0aWNhcHBzLm5ldCIsIjMuYXp1cmVzdGF0aWNhcHBzLm5ldCIsIjQuYXp1cmVzdGF0aWNhcHBzLm5ldCIsIjUuYXp1cmVzdGF0aWNhcHBzLm5l''@;'; put 'put ''dCIsIjYuYXp1cmVzdGF0aWNhcHBzLm5ldCIsIjcuYXp1cmVzdGF0aWNhcHBzLm5ldCIsImNlbnRyYWx1cy5henVyZXN0YXRpY2FwcHMubmV0IiwiZWFzdGFzaWEuYXp1cmVzdGF0aWNhcHBzLm5ldCIsImVhc3R1czIuYXp1cmVzdGF0aWNhcHBzLm5ldCIsIndlc3RldXJvcGUuYXp1cmVzdGF0''@;'; put 'put ''aWNhcHBzLm5ldCIsIndlc3R1czIuYXp1cmVzdGF0aWNhcHBzLm5ldCIsImF6dXJld2Vic2l0ZXMubmV0IiwiY2xvdWRhcHAubmV0IiwidHJhZmZpY21hbmFnZXIubmV0IiwiYmxvYi5jb3JlLndpbmRvd3MubmV0Iiwic2VydmljZWJ1cy53aW5kb3dzLm5ldCIsInJvdXRpbmd0aGVjbG91ZC5j''@;'; put 'put ''b20iLCJzbi5teW5ldG5hbWUubmV0Iiwicm91dGluZ3RoZWNsb3VkLm5ldCIsInJvdXRpbmd0aGVjbG91ZC5vcmciLCJjc3guY2MiLCJteWRic2VydmVyLmNvbSIsIndlYnNwYWNlY29uZmlnLmRlIiwibWl0dHdhbGQuaW5mbyIsIm1pdHR3YWxkc2VydmVyLmluZm8iLCJ0eXBvM3NlcnZlci5p''@;'; put 'put ''bmZvIiwicHJvamVjdC5zcGFjZSIsIm1vZHguZGV2IiwiYm1vYXR0YWNobWVudHMub3JnIiwibmV0LnJ1Iiwib3JnLnJ1IiwicHAucnUiLCJob3N0ZWRwaS5jb20iLCJjYXJhY2FsLm15dGhpYy1iZWFzdHMuY29tIiwiY3VzdG9tZXIubXl0aGljLWJlYXN0cy5jb20iLCJmZW50aWdlci5teXRo''@;'; put 'put ''aWMtYmVhc3RzLmNvbSIsImx5bngubXl0aGljLWJlYXN0cy5jb20iLCJvY2Vsb3QubXl0aGljLWJlYXN0cy5jb20iLCJvbmNpbGxhLm15dGhpYy1iZWFzdHMuY29tIiwib256YS5teXRoaWMtYmVhc3RzLmNvbSIsInNwaGlueC5teXRoaWMtYmVhc3RzLmNvbSIsInZzLm15dGhpYy1iZWFzdHMu''@;'; put 'put ''Y29tIiwieC5teXRoaWMtYmVhc3RzLmNvbSIsInlhbGkubXl0aGljLWJlYXN0cy5jb20iLCJjdXN0LnJldHJvc251Yi5jby51ayIsInVpLm5hYnUuY2FzYSIsImNsb3VkLm5vc3BhbXByb3h5LmNvbSIsIm5ldGZ5LmFwcCIsIm5ldGxpZnkuYXBwIiwiNHUuY29tIiwibmZzaG9zdC5jb20iLCJp''@;'; put 'put ''cGZzLm5mdHN0b3JhZ2UubGluayIsIm5nby51cyIsIm5ncm9rLmFwcCIsIm5ncm9rLWZyZWUuYXBwIiwibmdyb2suZGV2Iiwibmdyb2stZnJlZS5kZXYiLCJuZ3Jvay5pbyIsImFwLm5ncm9rLmlvIiwiYXUubmdyb2suaW8iLCJldS5uZ3Jvay5pbyIsImluLm5ncm9rLmlvIiwianAubmdyb2su''@;'; put 'put ''aW8iLCJzYS5uZ3Jvay5pbyIsInVzLm5ncm9rLmlvIiwibmdyb2sucGl6emEiLCJuZ3Jvay5wcm8iLCJ0b3J1bi5wbCIsIm5oLXNlcnYuY28udWsiLCJuaW1zaXRlLnVrIiwibW1hZmFuLmJpeiIsIm15ZnRwLmJpeiIsIm5vLWlwLmJpeiIsIm5vLWlwLmNhIiwiZmFudGFzeWxlYWd1ZS5jYyIs''@;'; put 'put ''ImdvdGRucy5jaCIsIjN1dGlsaXRpZXMuY29tIiwiYmxvZ3N5dGUuY29tIiwiY2lzY29mcmVhay5jb20iLCJkYW1uc2VydmVyLmNvbSIsImRkbnNraW5nLmNvbSIsImRpdGNoeW91cmlwLmNvbSIsImRuc2lza2lua3kuY29tIiwiZHlubnMuY29tIiwiZ2Vla2dhbGF4eS5jb20iLCJoZWFsdGgt''@;'; put 'put ''Y2FyZXJlZm9ybS5jb20iLCJob21lc2VjdXJpdHltYWMuY29tIiwiaG9tZXNlY3VyaXR5cGMuY29tIiwibXlhY3RpdmVkaXJlY3RvcnkuY29tIiwibXlzZWN1cml0eWNhbWVyYS5jb20iLCJteXZuYy5jb20iLCJuZXQtZnJlYWtzLmNvbSIsIm9udGhld2lmaS5jb20iLCJwb2ludDJ0aGlzLmNv''@;'; put 'put ''bSIsInF1aWNrc3l0ZXMuY29tIiwic2VjdXJpdHl0YWN0aWNzLmNvbSIsInNlcnZlYmVlci5jb20iLCJzZXJ2ZWNvdW50ZXJzdHJpa2UuY29tIiwic2VydmVleGNoYW5nZS5jb20iLCJzZXJ2ZWZ0cC5jb20iLCJzZXJ2ZWdhbWUuY29tIiwic2VydmVoYWxmbGlmZS5jb20iLCJzZXJ2ZWh0dHAu''@;'; put 'put ''Y29tIiwic2VydmVodW1vdXIuY29tIiwic2VydmVpcmMuY29tIiwic2VydmVtcDMuY29tIiwic2VydmVwMnAuY29tIiwic2VydmVwaWNzLmNvbSIsInNlcnZlcXVha2UuY29tIiwic2VydmVzYXJjYXNtLmNvbSIsInN0dWZmdG9yZWFkLmNvbSIsInVudXN1YWxwZXJzb24uY29tIiwid29ya2lz''@;'; put 'put ''Ym9yaW5nLmNvbSIsImR2cmNhbS5pbmZvIiwiaWxvdmVjb2xsZWdlLmluZm8iLCJuby1pcC5pbmZvIiwiYnJhc2lsaWEubWUiLCJkZG5zLm1lIiwiZG5zZm9yLm1lIiwiaG9wdG8ubWUiLCJsb2dpbnRvLm1lIiwibm9pcC5tZSIsIndlYmhvcC5tZSIsImJvdW5jZW1lLm5ldCIsImRkbnMubmV0''@;'; put 'put ''IiwiZWF0aW5nLW9yZ2FuaWMubmV0IiwibXlkaXNzZW50Lm5ldCIsIm15ZWZmZWN0Lm5ldCIsIm15bWVkaWFwYy5uZXQiLCJteXBzeC5uZXQiLCJteXNlY3VyaXR5Y2FtZXJhLm5ldCIsIm5obGZhbi5uZXQiLCJuby1pcC5uZXQiLCJwZ2FmYW4ubmV0IiwicHJpdmF0aXplaGVhbHRoaW5zdXJh''@;'; put 'put ''bmNlLm5ldCIsInJlZGlyZWN0bWUubmV0Iiwic2VydmVibG9nLm5ldCIsInNlcnZlbWluZWNyYWZ0Lm5ldCIsInN5dGVzLm5ldCIsImNhYmxlLW1vZGVtLm9yZyIsImNvbGxlZ2VmYW4ub3JnIiwiY291Y2hwb3RhdG9mcmllcy5vcmciLCJob3B0by5vcmciLCJtbGJmYW4ub3JnIiwibXlmdHAu''@;'; put 'put ''b3JnIiwibXlzZWN1cml0eWNhbWVyYS5vcmciLCJuZmxmYW4ub3JnIiwibm8taXAub3JnIiwicmVhZC1ib29rcy5vcmciLCJ1ZmNmYW4ub3JnIiwiemFwdG8ub3JnIiwibm8taXAuY28udWsiLCJnb2xmZmFuLnVzIiwibm9pcC51cyIsInBvaW50dG8udXMiLCJzdGFnZS5ub2RlYXJ0LmlvIiwi''@;'; put 'put ''Ki5kZXZlbG9wZXIuYXBwIiwibm9vcC5hcHAiLCIqLm5vcnRoZmxhbmsuYXBwIiwiKi5idWlsZC5ydW4iLCIqLmNvZGUucnVuIiwiKi5kYXRhYmFzZS5ydW4iLCIqLm1pZ3JhdGlvbi5ydW4iLCJub3RpY2VhYmxlLm5ld3MiLCJub3Rpb24uc2l0ZSIsImRuc2tpbmcuY2giLCJteXBpLmNvIiwi''@;'; put 'put ''bjR0LmNvIiwiMDAxd3d3LmNvbSIsIm15aXBob3N0LmNvbSIsImZvcnVtei5pbmZvIiwic291bmRjYXN0Lm1lIiwidGNwNC5tZSIsImRuc3VwLm5ldCIsImhpY2FtLm5ldCIsIm5vdy1kbnMubmV0Iiwib3duaXAubmV0IiwidnBuZG5zLm5ldCIsImR5bnNlcnYub3JnIiwibm93LWRucy5vcmci''@;'; put 'put ''LCJ4NDQzLnB3Iiwibm93LWRucy50b3AiLCJudGRsbC50b3AiLCJmcmVlZGRucy51cyIsIm5zdXBkYXRlLmluZm8iLCJuZXJkcG9sLm92aCIsIm55Yy5tbiIsInBydmN5LnBhZ2UiLCJvYmwub25nIiwib2JzZXJ2YWJsZWhxLmNsb3VkIiwic3RhdGljLm9ic2VydmFibGV1c2VyY29udGVudC5j''@;'; put 'put ''b20iLCJvbWcubG9sIiwiY2xvdWR5Y2x1c3Rlci5uZXQiLCJvbW5pd2Uuc2l0ZSIsIjEyM3dlYnNlaXRlLmF0IiwiMTIzd2Vic2l0ZS5iZSIsInNpbXBsZXNpdGUuY29tLmJyIiwiMTIzd2Vic2l0ZS5jaCIsInNpbXBsZXNpdGUuY29tIiwiMTIzd2Vic2VpdGUuZGUiLCIxMjNoamVtbWVzaWRl''@;'; put 'put ''LmRrIiwiMTIzbWl3ZWIuZXMiLCIxMjNrb3Rpc2l2dS5maSIsIjEyM3NpdGV3ZWIuZnIiLCJzaW1wbGVzaXRlLmdyIiwiMTIzaG9tZXBhZ2UuaXQiLCIxMjN3ZWJzaXRlLmx1IiwiMTIzd2Vic2l0ZS5ubCIsIjEyM2hqZW1tZXNpZGUubm8iLCJzZXJ2aWNlLm9uZSIsInNpbXBsZXNpdGUucGwi''@;'; put 'put ''LCIxMjNwYWdpbmF3ZWIucHQiLCIxMjNtaW5zaWRhLnNlIiwiaXMtYS1mdWxsc3RhY2suZGV2IiwiaXMtY29vbC5kZXYiLCJpcy1ub3QtYS5kZXYiLCJsb2NhbHBsYXllci5kZXYiLCJpcy1sb2NhbC5vcmciLCJvcGVuc29jaWFsLnNpdGUiLCJvcGVuY3JhZnQuaG9zdGluZyIsIjE2LWIuaXQi''@;'; put 'put ''LCIzMi1iLml0IiwiNjQtYi5pdCIsIm9yc2l0ZXMuY29tIiwib3BlcmF1bml0ZS5jb20iLCIqLmN1c3RvbWVyLW9jaS5jb20iLCIqLm9jaS5jdXN0b21lci1vY2kuY29tIiwiKi5vY3AuY3VzdG9tZXItb2NpLmNvbSIsIioub2NzLmN1c3RvbWVyLW9jaS5jb20iLCIqLm9yYWNsZWNsb3VkYXBw''@;'; put 'put ''cy5jb20iLCIqLm9yYWNsZWdvdmNsb3VkYXBwcy5jb20iLCIqLm9yYWNsZWdvdmNsb3VkYXBwcy51ayIsInRlY2gub3JhbmdlIiwiY2FuLnJlIiwiYXV0aGdlYXItc3RhZ2luZy5jb20iLCJhdXRoZ2VhcmFwcHMuY29tIiwic2t5Z2VhcmFwcC5jb20iLCJvdXRzeXN0ZW1zY2xvdWQuY29tIiwi''@;'; put 'put ''Ki5ob3N0aW5nLm92aC5uZXQiLCIqLndlYnBhYXMub3ZoLm5ldCIsIm93bnByb3ZpZGVyLmNvbSIsIm93bi5wbSIsIioub3dvLmNvZGVzIiwib3gucnMiLCJveS5sYyIsInBnZm9nLmNvbSIsInBhZ2V4bC5jb20iLCJnb3RwYW50aGVvbi5jb20iLCJwYW50aGVvbnNpdGUuaW8iLCIqLnBheXdo''@;'; put 'put ''aXJsLmNvbSIsIioueG1pdC5jbyIsInhtaXQuZGV2IiwibWFkZXRoaXMuc2l0ZSIsInNydi51cyIsImdoLnNydi51cyIsImdsLnNydi51cyIsImxrMy5ydSIsIm15cGVwLmxpbmsiLCJwZXJzcGVjdGEuY2xvdWQiLCJvbi13ZWIuZnIiLCIqLnVwc3VuLmFwcCIsInVwc3VuYXBwLmNvbSIsImVu''@;'; put 'put ''dC5wbGF0Zm9ybS5zaCIsImV1LnBsYXRmb3JtLnNoIiwidXMucGxhdGZvcm0uc2giLCIqLnBsYXRmb3Jtc2guc2l0ZSIsIioudHN0LnNpdGUiLCJwbGF0dGVyLWFwcC5jb20iLCJwbGF0dGVyLWFwcC5kZXYiLCJwbGF0dGVycC51cyIsInBsZXkuZ2FtZXMiLCJvbnBvcnRlci5ydW4iLCJjby5i''@;'; put 'put ''biIsInBvc3RtYW4tZWNoby5jb20iLCJwc3Rtbi5pbyIsIm1vY2sucHN0bW4uaW8iLCJodHRwYmluLm9yZyIsInByZXF1YWxpZnltZS50b2RheSIsInhlbi5wcmdtci5jb20iLCJwcml2LmF0IiwicHJvdG9uZXQuaW8iLCJjaGlydXJnaWVucy1kZW50aXN0ZXMtZW4tZnJhbmNlLmZyIiwiYnll''@;'; put 'put ''bi5zaXRlIiwicHVidGxzLm9yZyIsInB5dGhvbmFueXdoZXJlLmNvbSIsImV1LnB5dGhvbmFueXdoZXJlLmNvbSIsInFhMi5jb20iLCJxY3guaW8iLCIqLnN5cy5xY3guaW8iLCJteXFuYXBjbG91ZC5jbiIsImFscGhhLW15cW5hcGNsb3VkLmNvbSIsImRldi1teXFuYXBjbG91ZC5jb20iLCJt''@;'; put 'put ''eWNsb3VkbmFzLmNvbSIsIm15bmFzY2xvdWQuY29tIiwibXlxbmFwY2xvdWQuY29tIiwicW90by5pbyIsInF1YWxpZmlvYXBwLmNvbSIsImxhZGVzay5jb20iLCJxYnVzZXIuY29tIiwiKi5xdWlwZWxlbWVudHMuY29tIiwidmFwb3IuY2xvdWQiLCJ2YXBvcmNsb3VkLmlvIiwicmFja21hemUu''@;'; put 'put ''Y29tIiwicmFja21hemUubmV0IiwiY2xvdWRzaXRlLmJ1aWxkZXJzIiwibXlyYWR3ZWIubmV0Iiwic2VydmVybmFtZS51cyIsIndlYi5pbiIsImluLm5ldCIsIm15cmRieC5pbyIsInNpdGUucmItaG9zdGluZy5pbyIsIioub24tcmFuY2hlci5jbG91ZCIsIioub24tazNzLmlvIiwiKi5vbi1y''@;'; put 'put ''aW8uaW8iLCJyYXZwYWdlLmNvLmlsIiwicmVhZHRoZWRvY3MtaG9zdGVkLmNvbSIsInJlYWR0aGVkb2NzLmlvIiwicmhjbG91ZC5jb20iLCJpbnN0YW5jZXMuc3Bhd24uY2MiLCJvbnJlbmRlci5jb20iLCJhcHAucmVuZGVyLmNvbSIsInJlcGxpdC5hcHAiLCJpZC5yZXBsaXQuYXBwIiwiZmly''@;'; put 'put ''ZXdhbGxlZHJlcGxpdC5jbyIsImlkLmZpcmV3YWxsZWRyZXBsaXQuY28iLCJyZXBsLmNvIiwiaWQucmVwbC5jbyIsInJlcGxpdC5kZXYiLCJhcmNoZXIucmVwbGl0LmRldiIsImJvbmVzLnJlcGxpdC5kZXYiLCJjYW5hcnkucmVwbGl0LmRldiIsImdsb2JhbC5yZXBsaXQuZGV2IiwiaGFja2Vy''@;'; put 'put ''LnJlcGxpdC5kZXYiLCJpZC5yZXBsaXQuZGV2IiwiamFuZXdheS5yZXBsaXQuZGV2Iiwia2ltLnJlcGxpdC5kZXYiLCJraXJhLnJlcGxpdC5kZXYiLCJraXJrLnJlcGxpdC5kZXYiLCJvZG8ucmVwbGl0LmRldiIsInBhcmlzLnJlcGxpdC5kZXYiLCJwaWNhcmQucmVwbGl0LmRldiIsInBpa2Uu''@;'; put 'put ''cmVwbGl0LmRldiIsInByZXJlbGVhc2UucmVwbGl0LmRldiIsInJlZWQucmVwbGl0LmRldiIsInJpa2VyLnJlcGxpdC5kZXYiLCJzaXNrby5yZXBsaXQuZGV2Iiwic3BvY2sucmVwbGl0LmRldiIsInN0YWdpbmcucmVwbGl0LmRldiIsInN1bHUucmVwbGl0LmRldiIsInRhcnBpdC5yZXBsaXQu''@;'; put 'put ''ZGV2IiwidGVhbXMucmVwbGl0LmRldiIsInR1Y2tlci5yZXBsaXQuZGV2Iiwid2VzbGV5LnJlcGxpdC5kZXYiLCJ3b3JmLnJlcGxpdC5kZXYiLCJyZXBsLnJ1biIsInJlc2luZGV2aWNlLmlvIiwiZGV2aWNlcy5yZXNpbnN0YWdpbmcuaW8iLCJoemMuaW8iLCJhZGltby5jby51ayIsIml0Y291''@;'; put 'put ''bGRiZXdvci5zZSIsImF1cy5iYXNrZXRiYWxsIiwibnouYmFza2V0YmFsbCIsImdpdC1wYWdlcy5yaXQuZWR1Iiwicm9ja3kucGFnZSIsInJ1Yi5kZSIsInJ1aHItdW5pLWJvY2h1bS5kZSIsImlvLm5vYy5ydWhyLXVuaS1ib2NodW0uZGUiLCJcdTA0MzFcdTA0MzhcdTA0MzcuXHUwNDQwXHUw''@;'; put 'put ''NDQzXHUwNDQxIiwiXHUwNDNhXHUwNDNlXHUwNDNjLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzYVx1MDQ0MFx1MDQ0Ylx1MDQzYy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2NcdTA0MzhcdTA0NDAuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNjXHUwNDQxXHUwNDNhLlx1MDQ0MFx1''@;'; put 'put ''MDQ0M1x1MDQ0MSIsIlx1MDQzZVx1MDQ0MFx1MDQzMy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NDFcdTA0MzBcdTA0M2NcdTA0MzBcdTA0NDBcdTA0MzAuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDQxXHUwNDNlXHUwNDQ3XHUwNDM4Llx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0MVx1''@;'; put 'put ''MDQzZlx1MDQzMS5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NGYuXHUwNDQwXHUwNDQzXHUwNDQxIiwicmFzLnJ1IiwibnlhdC5hcHAiLCIxODByLmNvbSIsImRvamluLmNvbSIsInNha3VyYXRhbi5jb20iLCJzYWt1cmF3ZWIuY29tIiwieDAuY29tIiwiMi1kLmpwIiwiYm9uYS5qcCIsImNy''@;'; put 'put ''YXAuanAiLCJkYXluaWdodC5qcCIsImVlay5qcCIsImZsb3AuanAiLCJoYWxmbW9vbi5qcCIsImplZXouanAiLCJtYXRyaXguanAiLCJtaW1vemEuanAiLCJpdm9yeS5uZS5qcCIsIm1haWwtYm94Lm5lLmpwIiwibWludHMubmUuanAiLCJtb2t1cmVuLm5lLmpwIiwib3BhbC5uZS5qcCIsInNh''@;'; put 'put ''a3VyYS5uZS5qcCIsInN1bW9tby5uZS5qcCIsInRvcGF6Lm5lLmpwIiwibmV0Z2FtZXJzLmpwIiwibnlhbnRhLmpwIiwibzBvMC5qcCIsInJkeS5qcCIsInJnci5qcCIsInJ1bGV6LmpwIiwiczMuaXNrMDEuc2FrdXJhc3RvcmFnZS5qcCIsInMzLmlzazAyLnNha3VyYXN0b3JhZ2UuanAiLCJz''@;'; put 'put ''YWxvb24uanAiLCJzYmxvLmpwIiwic2tyLmpwIiwidGFuay5qcCIsInVoLW9oLmpwIiwidW5kby5qcCIsInJzLndlYmFjY2VsLmpwIiwidXNlci53ZWJhY2NlbC5qcCIsIndlYnNvemFpLmpwIiwieGlpLmpwIiwic3F1YXJlcy5uZXQiLCJqcG4ub3JnIiwia2lyYXJhLnN0IiwieDAudG8iLCJm''@;'; put 'put ''cm9tLnR2Iiwic2FrdXJhLnR2IiwiKi5idWlsZGVyLmNvZGUuY29tIiwiKi5kZXYtYnVpbGRlci5jb2RlLmNvbSIsIiouc3RnLWJ1aWxkZXIuY29kZS5jb20iLCIqLjAwMS50ZXN0LmNvZGUtYnVpbGRlci1zdGcucGxhdGZvcm0uc2FsZXNmb3JjZS5jb20iLCIqLmQuY3JtLmRldiIsIioudy5j''@;'; put 'put ''cm0uZGV2IiwiKi53YS5jcm0uZGV2IiwiKi53Yi5jcm0uZGV2IiwiKi53Yy5jcm0uZGV2IiwiKi53ZC5jcm0uZGV2IiwiKi53ZS5jcm0uZGV2IiwiKi53Zi5jcm0uZGV2Iiwic2FuZGNhdHMuaW8iLCJsb2dvaXAuY29tIiwibG9nb2lwLmRlIiwiZnItcGFyLTEuYmFyZW1ldGFsLnNjdy5jbG91''@;'; put 'put ''ZCIsImZyLXBhci0yLmJhcmVtZXRhbC5zY3cuY2xvdWQiLCJubC1hbXMtMS5iYXJlbWV0YWwuc2N3LmNsb3VkIiwiY29ja3BpdC5mci1wYXIuc2N3LmNsb3VkIiwiZm5jLmZyLXBhci5zY3cuY2xvdWQiLCJmdW5jdGlvbnMuZm5jLmZyLXBhci5zY3cuY2xvdWQiLCJrOHMuZnItcGFyLnNjdy5j''@;'; put 'put ''bG91ZCIsIm5vZGVzLms4cy5mci1wYXIuc2N3LmNsb3VkIiwiczMuZnItcGFyLnNjdy5jbG91ZCIsInMzLXdlYnNpdGUuZnItcGFyLnNjdy5jbG91ZCIsIndobS5mci1wYXIuc2N3LmNsb3VkIiwicHJpdi5pbnN0YW5jZXMuc2N3LmNsb3VkIiwicHViLmluc3RhbmNlcy5zY3cuY2xvdWQiLCJr''@;'; put 'put ''OHMuc2N3LmNsb3VkIiwiY29ja3BpdC5ubC1hbXMuc2N3LmNsb3VkIiwiazhzLm5sLWFtcy5zY3cuY2xvdWQiLCJub2Rlcy5rOHMubmwtYW1zLnNjdy5jbG91ZCIsInMzLm5sLWFtcy5zY3cuY2xvdWQiLCJzMy13ZWJzaXRlLm5sLWFtcy5zY3cuY2xvdWQiLCJ3aG0ubmwtYW1zLnNjdy5jbG91''@;'; put 'put ''ZCIsImNvY2twaXQucGwtd2F3LnNjdy5jbG91ZCIsIms4cy5wbC13YXcuc2N3LmNsb3VkIiwibm9kZXMuazhzLnBsLXdhdy5zY3cuY2xvdWQiLCJzMy5wbC13YXcuc2N3LmNsb3VkIiwiczMtd2Vic2l0ZS5wbC13YXcuc2N3LmNsb3VkIiwic2NhbGVib29rLnNjdy5jbG91ZCIsInNtYXJ0bGFi''@;'; put 'put ''ZWxpbmcuc2N3LmNsb3VkIiwiZGVkaWJveC5mciIsInNjaG9rb2tla3MubmV0IiwiZ292LnNjb3QiLCJzZXJ2aWNlLmdvdi5zY290Iiwic2NyeXNlYy5jb20iLCJjbGllbnQuc2NyeXB0ZWQuaW8iLCJmaXJld2FsbC1nYXRld2F5LmNvbSIsImZpcmV3YWxsLWdhdGV3YXkuZGUiLCJteS1nYXRl''@;'; put 'put ''d2F5LmRlIiwibXktcm91dGVyLmRlIiwic3BkbnMuZGUiLCJzcGRucy5ldSIsImZpcmV3YWxsLWdhdGV3YXkubmV0IiwibXktZmlyZXdhbGwub3JnIiwibXlmaXJld2FsbC5vcmciLCJzcGRucy5vcmciLCJzZWlkYXQubmV0Iiwic2VsbGZ5LnN0b3JlIiwibWluaXNpdGUubXMiLCJzZW5zZWVy''@;'; put 'put ''aW5nLm5ldCIsInNlcnZlYm9sdC5jbG91ZCIsImJpei51YSIsImNvLnVhIiwicHAudWEiLCJhcy5zaC5jbiIsInNoZWV6eS5nYW1lcyIsInNoaWZ0ZWRpdC5pbyIsIm15c2hvcGJsb2Nrcy5jb20iLCJteXNob3BpZnkuY29tIiwic2hvcGl0c2l0ZS5jb20iLCJzaG9wd2FyZS5zaG9wIiwic2hv''@;'; put 'put ''cHdhcmUuc3RvcmUiLCJtby1zaWVtZW5zLmlvIiwiMWthcHAuY29tIiwiYXBwY2hpemkuY29tIiwiYXBwbGluemkuY29tIiwic2luYWFwcC5jb20iLCJ2aXBzaW5hYXBwLmNvbSIsInNpdGVsZWFmLm5ldCIsInNtYWxsLXdlYi5vcmciLCJhZXJvcG9ydC5mciIsImF2b2NhdC5mciIsImNoYW1i''@;'; put 'put ''YWdyaS5mciIsImNoaXJ1cmdpZW5zLWRlbnRpc3Rlcy5mciIsImV4cGVydHMtY29tcHRhYmxlcy5mciIsIm1lZGVjaW4uZnIiLCJub3RhaXJlcy5mciIsInBoYXJtYWNpZW4uZnIiLCJwb3J0LmZyIiwidmV0ZXJpbmFpcmUuZnIiLCJ2cDQubWUiLCIqLnNub3dmbGFrZS5hcHAiLCIqLnByaXZh''@;'; put 'put ''dGVsaW5rLnNub3dmbGFrZS5hcHAiLCJzdHJlYW1saXQuYXBwIiwic3RyZWFtbGl0YXBwLmNvbSIsInRyeS1zbm93cGxvdy5jb20iLCJtYWZlbG8ubmV0IiwicGxheXN0YXRpb24tY2xvdWQuY29tIiwic3JodC5zaXRlIiwiYXBwcy5sYWlyLmlvIiwiKi5zdG9sb3MuaW8iLCJzcGFjZWtpdC5p''@;'; put 'put ''byIsImluZC5tb20iLCJjdXN0b21lci5zcGVlZHBhcnRuZXIuZGUiLCJteXNwcmVhZHNob3AuYXQiLCJteXNwcmVhZHNob3AuY29tLmF1IiwibXlzcHJlYWRzaG9wLmJlIiwibXlzcHJlYWRzaG9wLmNhIiwibXlzcHJlYWRzaG9wLmNoIiwibXlzcHJlYWRzaG9wLmNvbSIsIm15c3ByZWFkc2hv''@;'; put 'put ''cC5kZSIsIm15c3ByZWFkc2hvcC5kayIsIm15c3ByZWFkc2hvcC5lcyIsIm15c3ByZWFkc2hvcC5maSIsIm15c3ByZWFkc2hvcC5mciIsIm15c3ByZWFkc2hvcC5pZSIsIm15c3ByZWFkc2hvcC5pdCIsIm15c3ByZWFkc2hvcC5uZXQiLCJteXNwcmVhZHNob3AubmwiLCJteXNwcmVhZHNob3Au''@;'; put 'put ''bm8iLCJteXNwcmVhZHNob3AucGwiLCJteXNwcmVhZHNob3Auc2UiLCJteXNwcmVhZHNob3AuY28udWsiLCJ3LWNvcnAtc3RhdGljYmxpdHouY29tIiwidy1jcmVkZW50aWFsbGVzcy1zdGF0aWNibGl0ei5jb20iLCJ3LXN0YXRpY2JsaXR6LmNvbSIsInN0YWNraGVyby1uZXR3b3JrLmNvbSIs''@;'; put 'put ''InJ1bnMub25zdGFja2l0LmNsb3VkIiwic3RhY2tpdC5nZyIsInN0YWNraXQucm9ja3MiLCJzdGFja2l0LnJ1biIsInN0YWNraXQuem9uZSIsIm11c2ljaWFuLmlvIiwibm92ZWNvcmUuc2l0ZSIsImFwaS5zdGRsaWIuY29tIiwiZmVlZGJhY2suYWMiLCJmb3Jtcy5hYyIsImFzc2Vzc21lbnRz''@;'; put 'put ''LmN4IiwiY2FsY3VsYXRvcnMuY3giLCJmdW5uZWxzLmN4IiwicGF5bm93LmN4IiwicXVpenplcy5jeCIsInJlc2VhcmNoZWQuY3giLCJ0ZXN0cy5jeCIsInN1cnZleXMuc28iLCJzdG9yZWJhc2Uuc3RvcmUiLCJzdG9yaXByZXNzLmFwcCIsInN0b3JqLmZhcm0iLCJzdHJhcGlhcHAuY29tIiwi''@;'; put 'put ''bWVkaWEuc3RyYXBpYXBwLmNvbSIsInZwcy1ob3N0Lm5ldCIsImF0bC5qZWxhc3RpYy52cHMtaG9zdC5uZXQiLCJuanMuamVsYXN0aWMudnBzLWhvc3QubmV0IiwicmljLmplbGFzdGljLnZwcy1ob3N0Lm5ldCIsInN0cmVhay1saW5rLmNvbSIsInN0cmVha2xpbmtzLmNvbSIsInN0cmVha3Vz''@;'; put 'put ''ZXJjb250ZW50LmNvbSIsInNvYy5zcmNmLm5ldCIsInVzZXIuc3JjZi5uZXQiLCJ1dHdlbnRlLmlvIiwidGVtcC1kbnMuY29tIiwic3VwYWJhc2UuY28iLCJzdXBhYmFzZS5pbiIsInN1cGFiYXNlLm5ldCIsInN5bmNsb3VkLml0IiwiZHNjbG91ZC5iaXoiLCJkaXJlY3QucXVpY2tjb25uZWN0''@;'; put 'put ''LmNuIiwiZHNteW5hcy5jb20iLCJmYW1pbHlkcy5jb20iLCJkaXNrc3RhdGlvbi5tZSIsImRzY2xvdWQubWUiLCJpMjM0Lm1lIiwibXlkcy5tZSIsInN5bm9sb2d5Lm1lIiwiZHNjbG91ZC5tb2JpIiwiZHNteW5hcy5uZXQiLCJmYW1pbHlkcy5uZXQiLCJkc215bmFzLm9yZyIsImZhbWlseWRz''@;'; put 'put ''Lm9yZyIsImRpcmVjdC5xdWlja2Nvbm5lY3QudG8iLCJ2cG5wbHVzLnRvIiwibXl0YWJpdC5jb20iLCJteXRhYml0LmNvLmlsIiwidGFiaXRvcmRlci5jby5pbCIsInRhaWZ1bi1kbnMuZGUiLCJ0cy5uZXQiLCIqLmMudHMubmV0IiwiZ2RhLnBsIiwiZ2RhbnNrLnBsIiwiZ2R5bmlhLnBsIiwi''@;'; put 'put ''bWVkLnBsIiwic29wb3QucGwiLCJ0YXZldXNlcmNvbnRlbnQuY29tIiwicC50YXdrLmVtYWlsIiwicC50YXdrdG8uZW1haWwiLCJzaXRlLnRiLWhvc3RpbmcuY29tIiwiZWR1Z2l0LmlvIiwiczMudGVja2lkcy5vcmciLCJ0ZWxlYml0LmFwcCIsInRlbGViaXQuaW8iLCIqLnRlbGViaXQueHl6''@;'; put 'put ''IiwiKi5maXJlbmV0LmNoIiwiKi5zdmMuZmlyZW5ldC5jaCIsInJlc2VydmQuY29tIiwidGhpbmdkdXN0ZGF0YS5jb20iLCJjdXN0LmRldi50aGluZ2R1c3QuaW8iLCJyZXNlcnZkLmRldi50aGluZ2R1c3QuaW8iLCJjdXN0LmRpc3JlYy50aGluZ2R1c3QuaW8iLCJyZXNlcnZkLmRpc3JlYy50''@;'; put 'put ''aGluZ2R1c3QuaW8iLCJjdXN0LnByb2QudGhpbmdkdXN0LmlvIiwiY3VzdC50ZXN0aW5nLnRoaW5nZHVzdC5pbyIsInJlc2VydmQudGVzdGluZy50aGluZ2R1c3QuaW8iLCJ0aWNrZXRzLmlvIiwiYXJ2by5uZXR3b3JrIiwiYXppbXV0aC5uZXR3b3JrIiwidGxvbi5uZXR3b3JrIiwidG9ycHJv''@;'; put 'put ''amVjdC5uZXQiLCJwYWdlcy50b3Jwcm9qZWN0Lm5ldCIsInRvd25uZXdzLXN0YWdpbmcuY29tIiwiMTJocC5hdCIsIjJpeC5hdCIsIjRsaW1hLmF0IiwibGltYS1jaXR5LmF0IiwiMTJocC5jaCIsIjJpeC5jaCIsIjRsaW1hLmNoIiwibGltYS1jaXR5LmNoIiwidHJhZmZpY3BsZXguY2xvdWQi''@;'; put 'put ''LCJkZS5jb29sIiwiMTJocC5kZSIsIjJpeC5kZSIsIjRsaW1hLmRlIiwibGltYS1jaXR5LmRlIiwiMTMzNy5waWN0dXJlcyIsImNsYW4ucmlwIiwibGltYS1jaXR5LnJvY2tzIiwid2Vic3BhY2Uucm9ja3MiLCJsaW1hLnpvbmUiLCIqLnRyYW5zdXJsLmJlIiwiKi50cmFuc3VybC5ldSIsInNp''@;'; put 'put ''dGUudHJhbnNpcC5tZSIsIioudHJhbnN1cmwubmwiLCJ0dXhmYW1pbHkub3JnIiwiZGQtZG5zLmRlIiwiZHJheS1kbnMuZGUiLCJkcmF5ZG5zLmRlIiwiZHluLXZwbi5kZSIsImR5bnZwbi5kZSIsIm1laW4tdmlnb3IuZGUiLCJteS12aWdvci5kZSIsIm15LXdhbi5kZSIsInN5bm8tZHMuZGUi''@;'; put 'put ''LCJzeW5vbG9neS1kaXNrc3RhdGlvbi5kZSIsInN5bm9sb2d5LWRzLmRlIiwiZGlza3N0YXRpb24uZXUiLCJkaXNrc3RhdGlvbi5vcmciLCJ0eXBlZHJlYW0uYXBwIiwicHJvLnR5cGVmb3JtLmNvbSIsIioudWJlcnNwYWNlLmRlIiwidWJlci5zcGFjZSIsImhrLmNvbSIsImluYy5oayIsImx0''@;'; put 'put ''ZC5oayIsImhrLm9yZyIsIml0LmNvbSIsInVuaXNvbi1zZXJ2aWNlcy5jbG91ZCIsInZpcnR1YWwtdXNlci5kZSIsInZpcnR1YWx1c2VyLmRlIiwibmFtZS5wbSIsInNjaC50ZiIsImJpei53ZiIsInNjaC53ZiIsIm9yZy55dCIsInJzLmJhIiwiYmllbHNrby5wbCIsInVwbGkuaW8iLCJ1cm93''@;'; put 'put ''bi5jbG91ZCIsImRuc3VwZGF0ZS5pbmZvIiwidXMub3JnIiwidi51YSIsImV4cHJlc3MudmFsLnJ1biIsIndlYi52YWwucnVuIiwidmVyY2VsLmFwcCIsInYwLmJ1aWxkIiwidmVyY2VsLmRldiIsInZ1c2VyY29udGVudC5uZXQiLCJub3cuc2giLCIyMDM4LmlvIiwicm91dGVyLm1hbmFnZW1l''@;'; put 'put ''bnQiLCJ2LWluZm8uaW5mbyIsInZvb3Jsb3Blci5jbG91ZCIsIioudnVsdHJvYmplY3RzLmNvbSIsIndhZmZsZWNlbGwuY29tIiwid2ViZmxvdy5pbyIsIndlYmZsb3d0ZXN0LmlvIiwiKi53ZWJoYXJlLmRldiIsImJvb2tvbmxpbmUuYXBwIiwiaG90ZWx3aXRoZmxpZ2h0LmNvbSIsInJlc2Vy''@;'; put 'put ''dmUtb25saW5lLmNvbSIsInJlc2VydmUtb25saW5lLm5ldCIsImNwcmFwaWQuY29tIiwicGxlc2tucy5jb20iLCJ3cDIuaG9zdCIsInBkbnMucGFnZSIsInBsZXNrLnBhZ2UiLCJ3cHNxdWFyZWQuc2l0ZSIsIioud2FkbC50b3AiLCJyZW1vdGV3ZC5jb20iLCJib3guY2EiLCJwYWdlcy53aWFy''@;'; put 'put ''ZHdlYi5jb20iLCJ0b29sZm9yZ2Uub3JnIiwid21jbG91ZC5vcmciLCJ3bWZsYWJzLm9yZyIsIndkaC5hcHAiLCJwYW5lbC5nZyIsImRhZW1vbi5wYW5lbC5nZyIsIndpeHNpdGUuY29tIiwid2l4c3R1ZGlvLmNvbSIsImVkaXRvcnguaW8iLCJ3aXhzdHVkaW8uaW8iLCJ3aXgucnVuIiwibWVz''@;'; put 'put ''c3dpdGhkbnMuY29tIiwid29sdGxhYi1kZW1vLmNvbSIsIm15Zm9ydW0uY29tbXVuaXR5IiwiY29tbXVuaXR5LXByby5kZSIsImRpc2t1c3Npb25zYmVyZWljaC5kZSIsImNvbW11bml0eS1wcm8ubmV0IiwibWVpbmZvcnVtLm5ldCIsImFmZmluaXR5bG90dGVyeS5vcmcudWsiLCJyYWZmbGVl''@;'; put 'put ''bnRyeS5vcmcudWsiLCJ3ZWVrbHlsb3R0ZXJ5Lm9yZy51ayIsIndwZW5naW5lcG93ZXJlZC5jb20iLCJqcy53cGVuZ2luZXBvd2VyZWQuY29tIiwiaGFsZi5ob3N0IiwieG5iYXkuY29tIiwidTIueG5iYXkuY29tIiwidTItbG9jYWwueG5iYXkuY29tIiwiY2lzdHJvbi5ubCIsImRlbW9uLm5s''@;'; put 'put ''IiwieHM0YWxsLnNwYWNlIiwieWFuZGV4Y2xvdWQubmV0Iiwic3RvcmFnZS55YW5kZXhjbG91ZC5uZXQiLCJ3ZWJzaXRlLnlhbmRleGNsb3VkLm5ldCIsIm9mZmljaWFsLmFjYWRlbXkiLCJ5b2xhc2l0ZS5jb20iLCJ5b21iby5tZSIsInluaC5mciIsIm5vaG9zdC5tZSIsIm5vaG8uc3QiLCJ6''@;'; put 'put ''YS5uZXQiLCJ6YS5vcmciLCJ6YXAuY2xvdWQiLCJ6ZWFidXIuYXBwIiwiYnNzLmRlc2lnbiIsImJhc2ljc2VydmVyLmlvIiwidmlydHVhbHNlcnZlci5pbyIsImVudGVycHJpc2VjbG91ZC5udSJdLnJlZHVjZSgoTix6KT0+e2NvbnN0IFk9ei5yZXBsYWNlKC9eKFwqXC58XCEpLywiIiksRj12''@;'; put 'put ''LnRvQVNDSUkoWSksVz16LmNoYXJBdCgwKTtpZihOLmhhcyhGKSl0aHJvdyBuZXcgRXJyb3IoYE11bHRpcGxlIHJ1bGVzIGZvdW5kIGZvciAke3p9ICgke0Z9KWApO3JldHVybiBOLnNldChGLHtydWxlOnosc3VmZml4OlkscHVueVN1ZmZpeDpGLHdpbGRjYXJkOiIqIj09PVcsZXhjZXB0aW9u''@;'; put 'put ''OiIhIj09PVd9KSxOfSxuZXcgTWFwKSxMPXtET01BSU5fVE9PX1NIT1JUOiJEb21haW4gbmFtZSB0b28gc2hvcnQuIixET01BSU5fVE9PX0xPTkc6IkRvbWFpbiBuYW1lIHRvbyBsb25nLiBJdCBzaG91bGQgYmUgbm8gbW9yZSB0aGFuIDI1NSBjaGFycy4iLExBQkVMX1NUQVJUU19XSVRIX0RB''@;'; put 'put ''U0g6IkRvbWFpbiBuYW1lIGxhYmVsIGNhbiBub3Qgc3RhcnQgd2l0aCBhIGRhc2guIixMQUJFTF9FTkRTX1dJVEhfREFTSDoiRG9tYWluIG5hbWUgbGFiZWwgY2FuIG5vdCBlbmQgd2l0aCBhIGRhc2guIixMQUJFTF9UT09fTE9ORzoiRG9tYWluIG5hbWUgbGFiZWwgc2hvdWxkIGJlIGF0IG1v''@;'; put 'put ''c3QgNjMgY2hhcnMgbG9uZy4iLExBQkVMX1RPT19TSE9SVDoiRG9tYWluIG5hbWUgbGFiZWwgc2hvdWxkIGJlIGF0IGxlYXN0IDEgY2hhcmFjdGVyIGxvbmcuIixMQUJFTF9JTlZBTElEX0NIQVJTOiJEb21haW4gbmFtZSBsYWJlbCBjYW4gb25seSBjb250YWluIGFscGhhbnVtZXJpYyBjaGFy''@;'; put 'put ''YWN0ZXJzIG9yIGRhc2hlcy4ifSx4PU49PntpZigic3RyaW5nIiE9dHlwZW9mIE4pdGhyb3cgbmV3IFR5cGVFcnJvcigiRG9tYWluIG5hbWUgbXVzdCBiZSBhIHN0cmluZy4iKTtsZXQgej1OLnNsaWNlKDApLnRvTG93ZXJDYXNlKCk7Ii4iPT09ei5jaGFyQXQoei5sZW5ndGgtMSkmJih6PXou''@;'; put 'put ''c2xpY2UoMCx6Lmxlbmd0aC0xKSk7Y29uc3QgWT0oTj0+e2NvbnN0IHo9di50b0FTQ0lJKE4pO2lmKHoubGVuZ3RoPDEpcmV0dXJuIkRPTUFJTl9UT09fU0hPUlQiO2lmKHoubGVuZ3RoPjI1NSlyZXR1cm4iRE9NQUlOX1RPT19MT05HIjtjb25zdCBZPXouc3BsaXQoIi4iKTtsZXQgRjtmb3Io''@;'; put 'put ''bGV0IFc9MDtXPFkubGVuZ3RoOysrVyl7aWYoRj1ZW1ddLCFGLmxlbmd0aClyZXR1cm4iTEFCRUxfVE9PX1NIT1JUIjtpZihGLmxlbmd0aD42MylyZXR1cm4iTEFCRUxfVE9PX0xPTkciO2lmKCItIj09PUYuY2hhckF0KDApKXJldHVybiJMQUJFTF9TVEFSVFNfV0lUSF9EQVNIIjtpZigiLSI9''@;'; put 'put ''PT1GLmNoYXJBdChGLmxlbmd0aC0xKSlyZXR1cm4iTEFCRUxfRU5EU19XSVRIX0RBU0giO2lmKCEvXlthLXowLTlcLV9dKyQvLnRlc3QoRikpcmV0dXJuIkxBQkVMX0lOVkFMSURfQ0hBUlMifX0pKHopO2lmKFkpcmV0dXJue2lucHV0Ok4sZXJyb3I6e21lc3NhZ2U6TFtZXSxjb2RlOll9fTtj''@;'; put 'put ''b25zdCBGPXtpbnB1dDpOLHRsZDpudWxsLHNsZDpudWxsLGRvbWFpbjpudWxsLHN1YmRvbWFpbjpudWxsLGxpc3RlZDohMX0sVz16LnNwbGl0KCIuIik7aWYoImxvY2FsIj09PVdbVy5sZW5ndGgtMV0pcmV0dXJuIEY7Y29uc3QgcT0oKT0+KC94bi0tLy50ZXN0KHopJiYoRi5kb21haW4mJihG''@;'; put 'put ''LmRvbWFpbj12LnRvQVNDSUkoRi5kb21haW4pKSxGLnN1YmRvbWFpbiYmKEYuc3ViZG9tYWluPXYudG9BU0NJSShGLnN1YmRvbWFpbikpKSxGKSxyZT0oTj0+e2NvbnN0IHo9di50b0FTQ0lJKE4pLnNwbGl0KCIuIik7Zm9yKGxldCBZPTA7WTx6Lmxlbmd0aDtZKyspe2NvbnN0IEY9ei5zbGlj''@;'; put 'put ''ZShZKS5qb2luKCIuIiksVz13LmdldChGKTtpZihXKXJldHVybiBXfXJldHVybiBudWxsfSkoeik7aWYoIXJlKXJldHVybiBXLmxlbmd0aDwyP0Y6KEYudGxkPVcucG9wKCksRi5zbGQ9Vy5wb3AoKSxGLmRvbWFpbj1bRi5zbGQsRi50bGRdLmpvaW4oIi4iKSxXLmxlbmd0aCYmKEYuc3ViZG9t''@;'; put 'put ''YWluPVcucG9wKCkpLHEoKSk7Ri5saXN0ZWQ9ITA7Y29uc3QgbWU9cmUuc3VmZml4LnNwbGl0KCIuIiksQ2U9Vy5zbGljZSgwLFcubGVuZ3RoLW1lLmxlbmd0aCk7cmV0dXJuIHJlLmV4Y2VwdGlvbiYmQ2UucHVzaChtZS5zaGlmdCgpKSxGLnRsZD1tZS5qb2luKCIuIiksIUNlLmxlbmd0aHx8''@;'; put 'put ''KHJlLndpbGRjYXJkJiYobWUudW5zaGlmdChDZS5wb3AoKSksRi50bGQ9bWUuam9pbigiLiIpKSwhQ2UubGVuZ3RoKXx8KEYuc2xkPUNlLnBvcCgpLEYuZG9tYWluPVtGLnNsZCxGLnRsZF0uam9pbigiLiIpLENlLmxlbmd0aCYmKEYuc3ViZG9tYWluPUNlLmpvaW4oIi4iKSkpLHEoKX0sVT1O''@;'; put 'put ''PT5OJiZ4KE4pLmRvbWFpbnx8bnVsbCxIPU49Pntjb25zdCB6PXgoTik7cmV0dXJuISghei5kb21haW58fCF6Lmxpc3RlZCl9O2ouZGVmYXVsdD17cGFyc2U6eCxnZXQ6VSxpc1ZhbGlkOkh9LGouZXJyb3JDb2Rlcz1MLGouZ2V0PVUsai5pc1ZhbGlkPUgsai5wYXJzZT14fSw2OTI5NChmZSxq''@;'; put 'put ''LGgpeyJ1c2Ugc3RyaWN0IjtoLmQoaix7YzooKT0+Y30pO3ZhciBjPWgoNDIzMyl9LDMyMTkoZmUpeyJ1c2Ugc3RyaWN0IjtmZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siYWVzLTEyOC1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJs''@;'; put 'put ''b2NrIn0sImFlcy0xOTItZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMjU2LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTEy''@;'; put 'put ''OC1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTkyLWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0yNTYtY2JjIjp7ImNp''@;'; put 'put ''cGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzMTI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzMTkyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTky''@;'; put 'put ''LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzMjU2Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTEyOC1jZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6''@;'; put 'put ''IkNGQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5''@;'; put 'put ''cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoi''@;'; put 'put ''c3RyZWFtIn0sImFlcy0yNTYtY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVh''@;'; put 'put ''bSJ9LCJhZXMtMTkyLWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwi''@;'; put 'put ''YWVzLTEyOC1vZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6Ik9GQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1vZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6Ik9GQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1v''@;'; put 'put ''ZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6Ik9GQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jdHIiOnsiY2lw''@;'; put 'put ''aGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1nY20iOnsiY2lwaGVyIjoiQUVT''@;'; put 'put ''Iiwia2V5IjoxMjgsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn0sImFlcy0xOTItZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9LCJhZXMtMjU2LWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1Niwi''@;'; put 'put ''aXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifX0nKX0sNjI5NTEoZmUpeyJ1c2Ugc3RyaWN0IjtmZS5leHBvcnRzPUpTT04ucGFyc2UoJ3sic2hhMjI0V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IjMwMmQzMDBkMDYwOTYwODY0''@;'; put 'put ''ODAxNjUwMzA0MDIwNDA1MDAwNDFjIn0sIlJTQS1TSEEyMjQiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjIn0sInNoYTI1NldpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNo''@;'; put 'put ''Ijoic2hhMjU2IiwiaWQiOiIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMCJ9LCJSU0EtU0hBMjU2Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMCJ9LCJzaGEzODRXaXRo''@;'; put 'put ''UlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzAifSwiUlNBLVNIQTM4NCI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiMzA0MTMwMGQwNjA5NjA4NjQ4''@;'; put 'put ''MDE2NTAzMDQwMjAyMDUwMDA0MzAifSwic2hhNTEyV2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwIn0sIlJTQS1TSEE1MTIiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2gi''@;'; put 'put ''OiJzaGE1MTIiLCJpZCI6IjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwIn0sIlJTQS1TSEExIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiMzAyMTMwMDkwNjA1MmIwZTAzMDIxYTA1MDAwNDE0In0sImVjZHNhLXdpdGgtU0hBMSI6eyJzaWduIjoiZWNk''@;'; put 'put ''c2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sInNoYTI1NiI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjAifSwic2hhMjI0Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMjI0Iiwi''@;'; put 'put ''aWQiOiIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxYyJ9LCJzaGEzODQiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwIn0sInNoYTUxMiI6eyJzaWduIjoiZWNkc2EvcnNh''@;'; put 'put ''IiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiRFNBLVNIQSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EtU0hBMSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0Ei''@;'; put 'put ''Onsic2lnbiI6ImRzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVNIQTIyNCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTI1NiI6''@;'; put 'put ''eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sIkRTQS1TSEEyNTYiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEzODQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJEU0EtU0hBMzg0Ijp7InNp''@;'; put 'put ''Z24iOiJkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBNTEyIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVNIQTUxMiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1SSVBFTUQxNjAiOnsic2ln''@;'; put 'put ''biI6ImRzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IiJ9LCJyaXBlbWQxNjBXaXRoUlNBIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSwiUlNBLVJJUEVNRDE2MCI6eyJzaWduIjoicnNhIiwiaGFzaCI6InJtZDE2''@;'; put 'put ''MCIsImlkIjoiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0In0sIm1kNVdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifSwiUlNBLU1ENSI6eyJzaWduIjoicnNhIiwiaGFz''@;'; put 'put ''aCI6Im1kNSIsImlkIjoiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwIn19Jyl9LDY0NTg5KGZlKXsidXNlIHN0cmljdCI7ZmUuZXhwb3J0cz1KU09OLnBhcnNlKCd7IjEuMy4xMzIuMC4xMCI6InNlY3AyNTZrMSIsIjEuMy4xMzIuMC4zMyI6InAyMjQiLCIxLjIuODQwLjEw''@;'; put 'put ''MDQ1LjMuMS4xIjoicDE5MiIsIjEuMi44NDAuMTAwNDUuMy4xLjciOiJwMjU2IiwiMS4zLjEzMi4wLjM0IjoicDM4NCIsIjEuMy4xMzIuMC4zNSI6InA1MjEifScpfSwxNzQ0OShmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJPX1JET05MWSI6MCwiT19XUk9OTFki''@;'; put 'put ''OjEsIk9fUkRXUiI6MiwiU19JRk1UIjo2MTQ0MCwiU19JRlJFRyI6MzI3NjgsIlNfSUZESVIiOjE2Mzg0LCJTX0lGQ0hSIjo4MTkyLCJTX0lGQkxLIjoyNDU3NiwiU19JRklGTyI6NDA5NiwiU19JRkxOSyI6NDA5NjAsIlNfSUZTT0NLIjo0OTE1MiwiT19DUkVBVCI6NTEyLCJPX0VYQ0wiOjIw''@;'; put 'put ''NDgsIk9fTk9DVFRZIjoxMzEwNzIsIk9fVFJVTkMiOjEwMjQsIk9fQVBQRU5EIjo4LCJPX0RJUkVDVE9SWSI6MTA0ODU3NiwiT19OT0ZPTExPVyI6MjU2LCJPX1NZTkMiOjEyOCwiT19TWU1MSU5LIjoyMDk3MTUyLCJPX05PTkJMT0NLIjo0LCJTX0lSV1hVIjo0NDgsIlNfSVJVU1IiOjI1Niwi''@;'; put 'put ''U19JV1VTUiI6MTI4LCJTX0lYVVNSIjo2NCwiU19JUldYRyI6NTYsIlNfSVJHUlAiOjMyLCJTX0lXR1JQIjoxNiwiU19JWEdSUCI6OCwiU19JUldYTyI6NywiU19JUk9USCI6NCwiU19JV09USCI6MiwiU19JWE9USCI6MSwiRTJCSUciOjcsIkVBQ0NFUyI6MTMsIkVBRERSSU5VU0UiOjQ4LCJF''@;'; put 'put ''QUREUk5PVEFWQUlMIjo0OSwiRUFGTk9TVVBQT1JUIjo0NywiRUFHQUlOIjozNSwiRUFMUkVBRFkiOjM3LCJFQkFERiI6OSwiRUJBRE1TRyI6OTQsIkVCVVNZIjoxNiwiRUNBTkNFTEVEIjo4OSwiRUNISUxEIjoxMCwiRUNPTk5BQk9SVEVEIjo1MywiRUNPTk5SRUZVU0VEIjo2MSwiRUNPTk5S''@;'; put 'put ''RVNFVCI6NTQsIkVERUFETEsiOjExLCJFREVTVEFERFJSRVEiOjM5LCJFRE9NIjozMywiRURRVU9UIjo2OSwiRUVYSVNUIjoxNywiRUZBVUxUIjoxNCwiRUZCSUciOjI3LCJFSE9TVFVOUkVBQ0giOjY1LCJFSURSTSI6OTAsIkVJTFNFUSI6OTIsIkVJTlBST0dSRVNTIjozNiwiRUlOVFIiOjQs''@;'; put 'put ''IkVJTlZBTCI6MjIsIkVJTyI6NSwiRUlTQ09OTiI6NTYsIkVJU0RJUiI6MjEsIkVMT09QIjo2MiwiRU1GSUxFIjoyNCwiRU1MSU5LIjozMSwiRU1TR1NJWkUiOjQwLCJFTVVMVElIT1AiOjk1LCJFTkFNRVRPT0xPTkciOjYzLCJFTkVURE9XTiI6NTAsIkVORVRSRVNFVCI6NTIsIkVORVRVTlJF''@;'; put 'put ''QUNIIjo1MSwiRU5GSUxFIjoyMywiRU5PQlVGUyI6NTUsIkVOT0RBVEEiOjk2LCJFTk9ERVYiOjE5LCJFTk9FTlQiOjIsIkVOT0VYRUMiOjgsIkVOT0xDSyI6NzcsIkVOT0xJTksiOjk3LCJFTk9NRU0iOjEyLCJFTk9NU0ciOjkxLCJFTk9QUk9UT09QVCI6NDIsIkVOT1NQQyI6MjgsIkVOT1NS''@;'; put 'put ''Ijo5OCwiRU5PU1RSIjo5OSwiRU5PU1lTIjo3OCwiRU5PVENPTk4iOjU3LCJFTk9URElSIjoyMCwiRU5PVEVNUFRZIjo2NiwiRU5PVFNPQ0siOjM4LCJFTk9UU1VQIjo0NSwiRU5PVFRZIjoyNSwiRU5YSU8iOjYsIkVPUE5PVFNVUFAiOjEwMiwiRU9WRVJGTE9XIjo4NCwiRVBFUk0iOjEsIkVQ''@;'; put 'put ''SVBFIjozMiwiRVBST1RPIjoxMDAsIkVQUk9UT05PU1VQUE9SVCI6NDMsIkVQUk9UT1RZUEUiOjQxLCJFUkFOR0UiOjM0LCJFUk9GUyI6MzAsIkVTUElQRSI6MjksIkVTUkNIIjozLCJFU1RBTEUiOjcwLCJFVElNRSI6MTAxLCJFVElNRURPVVQiOjYwLCJFVFhUQlNZIjoyNiwiRVdPVUxEQkxP''@;'; put 'put ''Q0siOjM1LCJFWERFViI6MTgsIlNJR0hVUCI6MSwiU0lHSU5UIjoyLCJTSUdRVUlUIjozLCJTSUdJTEwiOjQsIlNJR1RSQVAiOjUsIlNJR0FCUlQiOjYsIlNJR0lPVCI6NiwiU0lHQlVTIjoxMCwiU0lHRlBFIjo4LCJTSUdLSUxMIjo5LCJTSUdVU1IxIjozMCwiU0lHU0VHViI6MTEsIlNJR1VT''@;'; put 'put ''UjIiOjMxLCJTSUdQSVBFIjoxMywiU0lHQUxSTSI6MTQsIlNJR1RFUk0iOjE1LCJTSUdDSExEIjoyMCwiU0lHQ09OVCI6MTksIlNJR1NUT1AiOjE3LCJTSUdUU1RQIjoxOCwiU0lHVFRJTiI6MjEsIlNJR1RUT1UiOjIyLCJTSUdVUkciOjE2LCJTSUdYQ1BVIjoyNCwiU0lHWEZTWiI6MjUsIlNJ''@;'; put 'put ''R1ZUQUxSTSI6MjYsIlNJR1BST0YiOjI3LCJTSUdXSU5DSCI6MjgsIlNJR0lPIjoyMywiU0lHU1lTIjoxMiwiU1NMX09QX0FMTCI6MjE0NzQ4NjcxOSwiU1NMX09QX0FMTE9XX1VOU0FGRV9MRUdBQ1lfUkVORUdPVElBVElPTiI6MjYyMTQ0LCJTU0xfT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJF''@;'; put 'put ''TkNFIjo0MTk0MzA0LCJTU0xfT1BfQ0lTQ09fQU5ZQ09OTkVDVCI6MzI3NjgsIlNTTF9PUF9DT09LSUVfRVhDSEFOR0UiOjgxOTIsIlNTTF9PUF9DUllQVE9QUk9fVExTRVhUX0JVRyI6MjE0NzQ4MzY0OCwiU1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZX0ZSQUdNRU5UUyI6MjA0OCwiU1NMX09Q''@;'; put 'put ''X0VQSEVNRVJBTF9SU0EiOjAsIlNTTF9PUF9MRUdBQ1lfU0VSVkVSX0NPTk5FQ1QiOjQsIlNTTF9PUF9NSUNST1NPRlRfQklHX1NTTFYzX0JVRkZFUiI6MzIsIlNTTF9PUF9NSUNST1NPRlRfU0VTU19JRF9CVUciOjEsIlNTTF9PUF9NU0lFX1NTTFYyX1JTQV9QQURESU5HIjowLCJTU0xfT1Bf''@;'; put 'put ''TkVUU0NBUEVfQ0FfRE5fQlVHIjo1MzY4NzA5MTIsIlNTTF9PUF9ORVRTQ0FQRV9DSEFMTEVOR0VfQlVHIjoyLCJTU0xfT1BfTkVUU0NBUEVfREVNT19DSVBIRVJfQ0hBTkdFX0JVRyI6MTA3Mzc0MTgyNCwiU1NMX09QX05FVFNDQVBFX1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVHIjo4LCJTU0xf''@;'; put 'put ''T1BfTk9fQ09NUFJFU1NJT04iOjEzMTA3MiwiU1NMX09QX05PX1FVRVJZX01UVSI6NDA5NiwiU1NMX09QX05PX1NFU1NJT05fUkVTVU1QVElPTl9PTl9SRU5FR09USUFUSU9OIjo2NTUzNiwiU1NMX09QX05PX1NTTHYyIjoxNjc3NzIxNiwiU1NMX09QX05PX1NTTHYzIjozMzU1NDQzMiwiU1NM''@;'; put 'put ''X09QX05PX1RJQ0tFVCI6MTYzODQsIlNTTF9PUF9OT19UTFN2MSI6NjcxMDg4NjQsIlNTTF9PUF9OT19UTFN2MV8xIjoyNjg0MzU0NTYsIlNTTF9PUF9OT19UTFN2MV8yIjoxMzQyMTc3MjgsIlNTTF9PUF9QS0NTMV9DSEVDS18xIjowLCJTU0xfT1BfUEtDUzFfQ0hFQ0tfMiI6MCwiU1NMX09Q''@;'; put 'put ''X1NJTkdMRV9ESF9VU0UiOjEwNDg1NzYsIlNTTF9PUF9TSU5HTEVfRUNESF9VU0UiOjUyNDI4OCwiU1NMX09QX1NTTEVBWV8wODBfQ0xJRU5UX0RIX0JVRyI6MTI4LCJTU0xfT1BfU1NMUkVGMl9SRVVTRV9DRVJUX1RZUEVfQlVHIjowLCJTU0xfT1BfVExTX0JMT0NLX1BBRERJTkdfQlVHIjo1''@;'; put 'put ''MTIsIlNTTF9PUF9UTFNfRDVfQlVHIjoyNTYsIlNTTF9PUF9UTFNfUk9MTEJBQ0tfQlVHIjo4Mzg4NjA4LCJFTkdJTkVfTUVUSE9EX0RTQSI6MiwiRU5HSU5FX01FVEhPRF9ESCI6NCwiRU5HSU5FX01FVEhPRF9SQU5EIjo4LCJFTkdJTkVfTUVUSE9EX0VDREgiOjE2LCJFTkdJTkVfTUVUSE9E''@;'; put 'put ''X0VDRFNBIjozMiwiRU5HSU5FX01FVEhPRF9DSVBIRVJTIjo2NCwiRU5HSU5FX01FVEhPRF9ESUdFU1RTIjoxMjgsIkVOR0lORV9NRVRIT0RfU1RPUkUiOjI1NiwiRU5HSU5FX01FVEhPRF9QS0VZX01FVEhTIjo1MTIsIkVOR0lORV9NRVRIT0RfUEtFWV9BU04xX01FVEhTIjoxMDI0LCJFTkdJ''@;'; put 'put ''TkVfTUVUSE9EX0FMTCI6NjU1MzUsIkVOR0lORV9NRVRIT0RfTk9ORSI6MCwiREhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRSI6MiwiREhfQ0hFQ0tfUF9OT1RfUFJJTUUiOjEsIkRIX1VOQUJMRV9UT19DSEVDS19HRU5FUkFUT1IiOjQsIkRIX05PVF9TVUlUQUJMRV9HRU5FUkFUT1IiOjgsIk5Q''@;'; put 'put ''Tl9FTkFCTEVEIjoxLCJSU0FfUEtDUzFfUEFERElORyI6MSwiUlNBX1NTTFYyM19QQURESU5HIjoyLCJSU0FfTk9fUEFERElORyI6MywiUlNBX1BLQ1MxX09BRVBfUEFERElORyI6NCwiUlNBX1g5MzFfUEFERElORyI6NSwiUlNBX1BLQ1MxX1BTU19QQURESU5HIjo2LCJQT0lOVF9DT05WRVJT''@;'; put 'put ''SU9OX0NPTVBSRVNTRUQiOjIsIlBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEIjo0LCJQT0lOVF9DT05WRVJTSU9OX0hZQlJJRCI6NiwiRl9PSyI6MCwiUl9PSyI6NCwiV19PSyI6MiwiWF9PSyI6MSwiVVZfVURQX1JFVVNFQUREUiI6NH0nKX0sMjMyNDEoZmUpeyJ1c2Ugc3RyaWN0Ijtm''@;'; put 'put ''ZS5leHBvcnRzPUpTT04ucGFyc2UoJ3sibW9kcDEiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIz''@;'; put 'put ''MDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2M2EzNjIwZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMiI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRl''@;'; put 'put ''MDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0''@;'; put 'put ''YjFmZTY0OTI4NjY1MWVjZTY1MzgxZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwNSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRk''@;'; put 'put ''ZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0''@;'; put 'put ''ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2EyMzczMjdmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNCI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2Vk''@;'; put 'put ''NmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcw''@;'; put 'put ''YzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFjYWE2OGZmZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmYifSwibW9kcDE1Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVm''@;'; put 'put ''MTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4''@;'; put 'put ''MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5''@;'; put 'put ''N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFk''@;'; put 'put ''MmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTNhZDJjYWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE2Ijp7Imdl''@;'; put 'put ''biI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1''@;'; put 'put ''YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYy''@;'; put 'put ''MDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1''@;'; put 'put ''MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3''@;'; put 'put ''NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0''@;'; put 'put ''YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZk''@;'; put 'put ''ZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwNjMxOTlmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNyI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1''@;'; put 'put ''MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdj''@;'; put 'put ''YjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMw''@;'; put 'put ''N2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3''@;'; put 'put ''YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJk''@;'; put 'put ''MTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUx''@;'; put 'put ''NWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMw''@;'; put 'put ''ZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgy''@;'; put 'put ''ZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJi''@;'; put 'put ''N2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRjYzQwMjRmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxOCI6eyJnZW4iOiIwMiIsInByaW1l''@;'; put 'put ''IjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0''@;'; put 'put ''NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1Mjkw''@;'; put 'put ''NzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFh''@;'; put 'put ''YzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1''@;'; put 'put ''MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5''@;'; put 'put ''Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBh''@;'; put 'put ''NmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFi''@;'; put 'put ''ZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0''@;'; put 'put ''NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNm''@;'; put 'put ''NDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRiZTExNTk3NGEzOTI2ZjEyZmVlNWU0Mzg3NzdjYjZhOTMyZGY4Y2Q4YmVjNGQwNzNiOTMxYmEzYmM4MzJiNjhkOWRkMzAwNzQxZmE3YmY4YWZjNDdlZDI1NzZmNjkzNmJhNDI0NjYzYWFiNjM5YzVhZTRmNTY4MzQyM2I0NzQyYmYxYzk3''@;'; put 'put ''ODIzOGYxNmNiZTM5ZDY1MmRlM2ZkYjhiZWZjODQ4YWQ5MjIyMjJlMDRhNDAzN2MwNzEzZWI1N2E4MWEyM2YwYzczNDczZmM2NDZjZWEzMDZiNGJjYmM4ODYyZjgzODVkZGZhOWQ0YjdmYTJjMDg3ZTg3OTY4MzMwM2VkNWJkZDNhMDYyYjNjZjViM2EyNzhhNjZkMmExM2Y4M2Y0NGY4MmRkZjMx''@;'; put 'put ''MGVlMDc0YWI2YTM2NDU5N2U4OTlhMDI1NWRjMTY0ZjMxY2M1MDg0Njg1MWRmOWFiNDgxOTVkZWQ3ZWExYjFkNTEwYmQ3ZWU3NGQ3M2ZhZjM2YmMzMWVjZmEyNjgzNTkwNDZmNGViODc5ZjkyNDAwOTQzOGI0ODFjNmNkNzg4OWEwMDJlZDVlZTM4MmJjOTE5MGRhNmZjMDI2ZTQ3OTU1OGU0NDc1''@;'; put 'put ''Njc3ZTlhYTllMzA1MGUyNzY1Njk0ZGZjODFmNTZlODgwYjk2ZTcxNjBjOTgwZGQ5OGVkZDNkZmZmZmZmZmZmZmZmZmZmZmYifX0nKX0sMTYzNihmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9e3JFOiI2LjYuMSJ9fSwxNTU3OShmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9SlNPTi5w''@;'; put 'put ''YXJzZSgneyIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4xIjoiYWVzLTEyOC1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yIjoiYWVzLTEyOC1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4zIjoiYWVzLTEyOC1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40IjoiYWVzLTEyOC1jZmIiLCIy''@;'; put 'put ''LjE2Ljg0MC4xLjEwMS4zLjQuMS4yMSI6ImFlcy0xOTItZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjIiOiJhZXMtMTkyLWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIzIjoiYWVzLTE5Mi1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNCI6ImFlcy0xOTItY2ZiIiwiMi4xNi44''@;'; put 'put ''NDAuMS4xMDEuMy40LjEuNDEiOiJhZXMtMjU2LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQyIjoiYWVzLTI1Ni1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MyI6ImFlcy0yNTYtb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDQiOiJhZXMtMjU2LWNmYiJ9Jyl9fTtjb25zdCBf''@;'; put 'put ''X3dlYnBhY2tfbW9kdWxlX2NhY2hlX189e307ZnVuY3Rpb24gX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzMwNjQ5OTBfXyhmZSl7Y29uc3Qgaj1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bZmVdO2lmKHZvaWQgMCE9PWopcmV0dXJuIGouZXhwb3J0cztjb25zdCBoPV9fd2VicGFja19tb2R1''@;'; put 'put ''bGVfY2FjaGVfX1tmZV09e2lkOmZlLGxvYWRlZDohMSxleHBvcnRzOnt9fTtyZXR1cm4gX193ZWJwYWNrX21vZHVsZXNfX1tmZV0uY2FsbChoLmV4cG9ydHMsaCxoLmV4cG9ydHMsX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzMwNjQ5OTBfXyksaC5sb2FkZWQ9ITAsaC5leHBvcnRzfV9fbmVz''@;'; put 'put ''dGVkX3dlYnBhY2tfcmVxdWlyZV8zMDY0OTkwX18uZD0oZmUsaik9PntpZihBcnJheS5pc0FycmF5KGopKWZvcih2YXIgaD0wO2g8ai5sZW5ndGg7KXt2YXIgeT1qW2grK10sYz1qW2grK107X19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzMwNjQ5OTBfXy5vKGZlLHkpPzA9PT1jJiZoKys6T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KGZlLHksMD09PWM/e2VudW1lcmFibGU6ITAsdmFsdWU6altoKytdfTp7ZW51bWVyYWJsZTohMCxnZXQ6Y30pfWVsc2UgZm9yKHZhciB5IGluIGopX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzMwNjQ5OTBfXy5vKGoseSkmJiFfX25lc3RlZF93ZWJwYWNrX3Jl''@;'; put 'put ''cXVpcmVfMzA2NDk5MF9fLm8oZmUseSkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShmZSx5LHtlbnVtZXJhYmxlOiEwLGdldDpqW3ldfSl9LF9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8zMDY0OTkwX18uZz1mdW5jdGlvbigpe2lmKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4g''@;'; put 'put ''Z2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfWNhdGNoe2lmKCJvYmplY3QiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLF9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8zMDY0OTkwX18ubz0oZmUsaik9Pk9iamVjdC5wcm90''@;'; put 'put ''b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmZSxqKSxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMzA2NDk5MF9fLnI9ZmU9PntTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShmZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KGZlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzMwNjQ5OTBfXy5ubWQ9ZmU9PihmZS5wYXRocz1bXSxmZS5jaGlsZHJlbnx8KGZlLmNoaWxkcmVuPVtdKSxmZSk7bGV0IF9fbmVzdGVkX3dlYnBhY2tfZXhwb3J0c19fPV9f''@;'; put 'put ''bmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8zMDY0OTkwX18oMjgxNTYpO3JldHVybiBfX25lc3RlZF93ZWJwYWNrX2V4cG9ydHNfX30pKCksbW9kdWxlLmV4cG9ydHM9aCgpfSw1OTQ4KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlv''@;'; put 'put ''bih3KXtyZXR1cm4gdyYmdy5fX2VzTW9kdWxlP3c6e2RlZmF1bHQ6d319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmlzU3BlY2lhbE1pc3Npbmc9ai5jaG9pY2VWYWxpZGF0b3I9ai5jb25maXJtYXRpb25WYWxpZGF0b3I9ai51cmxWYWxpZGF0''@;'; put 'put ''b3I9dm9pZCAwO2NvbnN0IGM9eShoKDEyOTU0KSk7ai51cmxWYWxpZGF0b3I9KHcsUyk9PiEhYy5kZWZhdWx0LmlzSHR0cFVyaSh3KXx8ISFjLmRlZmF1bHQuaXNIdHRwc1VyaSh3KXx8IiI9PT13fHxTLGouY29uZmlybWF0aW9uVmFsaWRhdG9yPXc9PiEwPT09d3x8ITE9PT13LGouY2hvaWNl''@;'; put 'put ''VmFsaWRhdG9yPSh3LFMsTCk9Pnc+MCYmdzw9U3x8TCxqLmlzU3BlY2lhbE1pc3Npbmc9dz0+KCJzdHJpbmciIT10eXBlb2Ygd3x8IXcuaW5jbHVkZXMoIi4uIikpJiZuZXcgUmVnRXhwKCJeKFxcLik/W2Etel8uXXsxfSQiLCJpIikudGVzdCh3KX0sMTMyNDcoZmUsail7InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBjO2ouWT12b2lkIDAsKGM9ai5ZfHwoai5ZPXt9KSkuU2FzVml5YT0iU0FTVklZQSIsYy5TYXM5PSJTQVM5IixjLlNhc2pzPSJTQVNKUyJ9LDI1MDAxKGZlLGopeyJ1c2Ugc3RyaWN0IjtqLkM9dm9pZCAwLGouQz0oYyxzPTEsQT0xMDk5NTExNjI3Nzc2KT0+e2lmKDA9PT1jKXJldHVy''@;'; put 'put ''biIwIEIiO2M9Yz5BP0E6Yztjb25zdCB3PXM8MD8wOnMsUz1NYXRoLmZsb29yKE1hdGgubG9nKGMpL01hdGgubG9nKDEwMjQpKTtyZXR1cm4oYy9NYXRoLnBvdygxMDI0LFMpKS50b0ZpeGVkKHcpKyIgIitbIkIiLCJLQiIsIk1CIiwiR0IiLCJUQiJdW1NdfX0sNDI5MjQoZmUpe3ZhciBqPXt2''@;'; put 'put ''ZXJzaW9uOiIxLjE1LjAifTtqWzQzN109ZnVuY3Rpb24oKXtmb3IodmFyIGg9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIj''@;'; put 'put ''JCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4Yzlc''@;'; put 'put ''eGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhhMlx4YTNceGE1XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYx''@;'; put 'put ''XHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUy''@;'; put 'put ''NTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAz''@;'; put 'put ''YzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLHk9W10sYz17fSxzPTA7MjU2IT1zOysrcyk2NTUzMyE9PWguY2hhckNvZGVBdChzKSYmKGNbaC5jaGFyQXQocyld''@;'; put 'put ''PXMpLHlbc109aC5jaGFyQXQocyk7cmV0dXJue2VuYzpjLGRlYzp5fX0oKSxqWzYyMF09ZnVuY3Rpb24oKXtmb3IodmFyIGg9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4''@;'; put 'put ''MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHUwMTA1XHhlN1x4ZWFceGVi''@;'; put 'put ''XHhlOFx4ZWZceGVlXHUwMTA3XHhjNFx1MDEwNFx1MDExOFx1MDExOVx1MDE0Mlx4ZjRceGY2XHUwMTA2XHhmYlx4ZjlcdTAxNWFceGQ2XHhkY1x4YTJcdTAxNDFceGE1XHUwMTViXHUwMTkyXHUwMTc5XHUwMTdiXHhmM1x4ZDNcdTAxNDRcdTAxNDNcdTAxN2FcdTAxN2NceGJmXHUyMzEwXHhh''@;'; put 'put ''Y1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVm''@;'; put 'put ''XHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNj''@;'; put 'put ''MFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLHk9W10sYz17''@;'; put 'put ''fSxzPTA7MjU2IT1zOysrcyk2NTUzMyE9PWguY2hhckNvZGVBdChzKSYmKGNbaC5jaGFyQXQocyldPXMpLHlbc109aC5jaGFyQXQocyk7cmV0dXJue2VuYzpjLGRlYzp5fX0oKSxqWzczN109ZnVuY3Rpb24oKXtmb3IodmFyIGg9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRc''@;'; put 'put ''blx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJz''@;'; put 'put ''dHV2d3h5ent8fX5ceDdmXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2Ix''@;'; put 'put ''XHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2MyXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUy''@;'; put 'put ''NTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3''@;'; put 'put ''XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2M5XHUwM2FjXHUwM2FkXHUwM2FlXHUwM2NhXHUwM2FmXHUwM2NjXHUwM2NkXHUwM2NiXHUwM2NlXHUwMzg2XHUw''@;'; put 'put ''Mzg4XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwMzhmXHhiMVx1MjI2NVx1MjI2NFx1MDNhYVx1MDNhYlx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIix5PVtdLGM9e30scz0wOzI1NiE9czsrK3MpNjU1MzMhPT1oLmNoYXJDb2RlQXQocykmJihj''@;'; put 'put ''W2guY2hhckF0KHMpXT1zKSx5W3NdPWguY2hhckF0KHMpO3JldHVybntlbmM6YyxkZWM6eX19KCksals4NTBdPWZ1bmN0aW9uKCl7Zm9yKHZhciBoPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZc''@;'; put 'put ''eDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVc''@;'; put 'put ''eGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx4ZDdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJi''@;'; put 'put ''XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBc''@;'; put 'put ''dTI1NmNceGE0XHhmMFx4ZDBceGNhXHhjYlx4YzhcdTAxMzFceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVceGZlXHhkZVx4ZGFceGRiXHhkOVx4ZmRceGRkXHhhZlx4YjRceGFkXHhiMVx1MjAxN1x4''@;'; put 'put ''YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCIseT1bXSxjPXt9LHM9MDsyNTYhPXM7KytzKTY1NTMzIT09aC5jaGFyQ29kZUF0KHMpJiYoY1toLmNoYXJBdChzKV09cykseVtzXT1oLmNoYXJBdChzKTtyZXR1cm57ZW5jOmMsZGVjOnl9fSgpLGpb''@;'; put 'put ''ODUyXT1mdW5jdGlvbigpe2Zvcih2YXIgaD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2''@;'; put 'put ''Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx1MDE2Zlx1MDEwN1x4ZTdcdTAxNDJceGViXHUwMTUwXHUwMTUxXHhlZVx1MDE3OVx4YzRcdTAxMDZceGM5XHUwMTM5''@;'; put 'put ''XHUwMTNhXHhmNFx4ZjZcdTAxM2RcdTAxM2VcdTAxNWFcdTAxNWJceGQ2XHhkY1x1MDE2NFx1MDE2NVx1MDE0MVx4ZDdcdTAxMGRceGUxXHhlZFx4ZjNceGZhXHUwMTA0XHUwMTA1XHUwMTdkXHUwMTdlXHUwMTE4XHUwMTE5XHhhY1x1MDE3YVx1MDEwY1x1MDE1Zlx4YWJceGJiXHUyNTkxXHUy''@;'; put 'put ''NTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJcdTAxMWFcdTAxNWVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAxN2JcdTAxN2NcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAxMDJcdTAxMDNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1''@;'; put 'put ''NTBcdTI1NmNceGE0XHUwMTExXHUwMTEwXHUwMTBlXHhjYlx1MDEwZlx1MDE0N1x4Y2RceGNlXHUwMTFiXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwMTYyXHUwMTZlXHUyNTgwXHhkM1x4ZGZceGQ0XHUwMTQzXHUwMTQ0XHUwMTQ4XHUwMTYwXHUwMTYxXHUwMTU0XHhkYVx1MDE1NVx1MDE3''@;'; put 'put ''MFx4ZmRceGRkXHUwMTYzXHhiNFx4YWRcdTAyZGRcdTAyZGJcdTAyYzdcdTAyZDhceGE3XHhmN1x4YjhceGIwXHhhOFx1MDJkOVx1MDE3MVx1MDE1OFx1MDE1OVx1MjVhMFx4YTAiLHk9W10sYz17fSxzPTA7MjU2IT1zOysrcyk2NTUzMyE9PWguY2hhckNvZGVBdChzKSYmKGNbaC5jaGFyQXQo''@;'; put 'put ''cyldPXMpLHlbc109aC5jaGFyQXQocyk7cmV0dXJue2VuYzpjLGRlYzp5fX0oKSxqWzg1N109ZnVuY3Rpb24oKXtmb3IodmFyIGg9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgx''@;'; put 'put ''OVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhl''@;'; put 'put ''Ylx4ZThceGVmXHhlZVx1MDEzMVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlcdTAxMzBceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MDE1ZVx1MDE1Zlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx1MDExZVx1MDExZlx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJi''@;'; put 'put ''XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBc''@;'; put 'put ''dTI1NmNceGE0XHhiYVx4YWFceGNhXHhjYlx4YzhcdWZmZmRceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVcdWZmZmRceGQ3XHhkYVx4ZGJceGQ5XHhlY1x4ZmZceGFmXHhiNFx4YWRceGIxXHVmZmZk''@;'; put 'put ''XHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIix5PVtdLGM9e30scz0wOzI1NiE9czsrK3MpNjU1MzMhPT1oLmNoYXJDb2RlQXQocykmJihjW2guY2hhckF0KHMpXT1zKSx5W3NdPWguY2hhckF0KHMpO3JldHVybntlbmM6YyxkZWM6eX19KCks''@;'; put 'put ''als4NjFdPWZ1bmN0aW9uKCl7Zm9yKHZhciBoPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0''@;'; put 'put ''NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhkMFx4ZjBceGRlXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4''@;'; put 'put ''ZmVceGZiXHhkZFx4ZmRceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGMxXHhjZFx4ZDNceGRhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1''@;'; put 'put ''NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1''@;'; put 'put ''MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUy''@;'; put 'put ''MjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIix5PVtdLGM9e30scz0wOzI1NiE9czsrK3MpNjU1MzMhPT1oLmNoYXJDb2RlQXQocykmJihjW2guY2hhckF0KHMpXT1zKSx5W3NdPWguY2hhckF0''@;'; put 'put ''KHMpO3JldHVybntlbmM6YyxkZWM6eX19KCksals4NjVdPWZ1bmN0aW9uKCl7Zm9yKHZhciBoPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgx''@;'; put 'put ''ZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhj''@;'; put 'put ''NFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhhNFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1''@;'; put 'put ''MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2''@;'; put 'put ''N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0''@;'; put 'put ''XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIix5PVtdLGM9e30scz0wOzI1NiE9czsrK3MpNjU1MzMhPT1oLmNoYXJDb2RlQXQocykmJihjW2gu''@;'; put 'put ''Y2hhckF0KHMpXT1zKSx5W3NdPWguY2hhckF0KHMpO3JldHVybntlbmM6YyxkZWM6eX19KCksals4NjZdPWZ1bmN0aW9uKCl7Zm9yKHZhciBoPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3''@;'; put 'put ''XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1''@;'; put 'put ''MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQz''@;'; put 'put ''MFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1''@;'; put 'put ''MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2''@;'; put 'put ''Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1MDQwNFx1''@;'; put 'put ''MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwZVx1MDQ1ZVx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAiLHk9W10sYz17fSxzPTA7MjU2IT1zOysrcyk2NTUzMyE9PWguY2hhckNvZGVBdChzKSYmKGNbaC5jaGFyQXQocyldPXMpLHlbc109aC5jaGFyQXQocyk7cmV0dXJue2Vu''@;'; put 'put ''YzpjLGRlYzp5fX0oKSxqWzg3NF09ZnVuY3Rpb24oKXtmb3IodmFyIGg9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUm''@;'; put 'put ''JygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUw''@;'; put 'put ''N1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1''@;'; put 'put ''MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1''@;'; put 'put ''MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIseT1bXSxjPXt9LHM9MDsyNTYhPXM7KytzKTY1NTMzIT09aC5jaGFyQ29kZUF0KHMpJiYoY1toLmNoYXJBdChzKV09cykseVtzXT1oLmNoYXJBdChzKTtyZXR1cm57ZW5jOmMsZGVjOnl9fSgpLGpbODk1XT1mdW5jdGlvbigpe2Zv''@;'; put 'put ''cih2YXIgaD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdI''@;'; put 'put ''SUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTAxMGNceGZjXHhlOVx1MDEwZlx4ZTRcdTAxMGVcdTAxNjRcdTAxMGRcdTAxMWJcdTAxMWFcdTAxMzlceGNkXHUwMTNlXHUwMWVhXHhjNFx4YzFceGM5XHUwMTdlXHUwMTdkXHhmNFx4''@;'; put 'put ''ZjZceGQzXHUwMTZmXHhkYVx4ZmRceGQ2XHhkY1x1MDE2MFx1MDEzZFx4ZGRcdTAxNThcdTAxNjVceGUxXHhlZFx4ZjNceGZhXHUwMTQ4XHUwMTQ3XHUwMTZlXHhkNFx1MDE2MVx1MDE1OVx1MDE1NVx1MDE1NFx4YmNceGE3XHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRc''@;'; put 'put ''dTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1''@;'; put 'put ''NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIx''@;'; put 'put ''ZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIseT1bXSxjPXt9LHM9MDsyNTYhPXM7KytzKTY1NTMzIT09aC5jaGFyQ29kZUF0KHMpJiYoY1toLmNoYXJB''@;'; put 'put ''dChzKV09cykseVtzXT1oLmNoYXJBdChzKTtyZXR1cm57ZW5jOmMsZGVjOnl9fSgpLGpbOTMyXT1mdW5jdGlvbigpe3ZhciBzLGg9W10seT17fSxjPVtdO2ZvcihjWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNc''@;'; put 'put ''eDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmY2MVx1ZmY2Mlx1ZmY2M1x1ZmY2NFx1ZmY2NVx1ZmY2Nlx1ZmY2N1x1ZmY2OFx1ZmY2OVx1ZmY2YVx1ZmY2Ylx1ZmY2Y1x1ZmY2ZFx1ZmY2ZVx1ZmY2Zlx1ZmY3MFx1ZmY3MVx1ZmY3Mlx1ZmY3M1x1ZmY3NFx1ZmY3NVx1ZmY3Nlx1ZmY3N1x1ZmY3OFx1ZmY3''@;'; put 'put ''OVx1ZmY3YVx1ZmY3Ylx1ZmY3Y1x1ZmY3ZFx1ZmY3ZVx1ZmY3Zlx1ZmY4MFx1ZmY4MVx1ZmY4Mlx1ZmY4M1x1ZmY4NFx1ZmY4NVx1ZmY4Nlx1ZmY4N1x1ZmY4OFx1ZmY4OVx1ZmY4YVx1ZmY4Ylx1ZmY4Y1x1ZmY4ZFx1ZmY4ZVx1ZmY4Zlx1ZmY5MFx1ZmY5MVx1ZmY5Mlx1ZmY5M1x1ZmY5NFx1''@;'; put 'put ''ZmY5NVx1ZmY5Nlx1ZmY5N1x1ZmY5OFx1ZmY5OVx1ZmY5YVx1ZmY5Ylx1ZmY5Y1x1ZmY5ZFx1ZmY5ZVx1ZmY5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzBdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzBdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMF1b''@;'; put 'put ''c11dPTArcyxoWzArc109Y1swXVtzXSk7Zm9yKGNbMTI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHUzMDAxXHUzMDAyXHVmZjBjXHVmZjBlXHUzMGZiXHVmZjFhXHVmZjFiXHVmZjFmXHVmZjAxXHUzMDliXHUzMDljXHhi''@;'; put 'put ''NFx1ZmY0MFx4YThcdWZmM2VcdWZmZTNcdWZmM2ZcdTMwZmRcdTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRlZGRcdTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdTIwMTVcdTIwMTBcdWZmMGZcdWZmM2NcdWZmNWVcdTIyMjVcdWZmNWNcdTIwMjZcdTIwMjVcdTIwMThcdTIwMTlcdTIwMWNcdTIw''@;'; put 'put ''MWRcdWZmMDhcdWZmMDlcdTMwMTRcdTMwMTVcdWZmM2JcdWZmM2RcdWZmNWJcdWZmNWRcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTBcdTMwMTFcdWZmMGJcdWZmMGRceGIxXHhkN1x1ZmZmZFx4ZjdcdWZmMWRcdTIyNjBcdWZmMWNcdWZmMWVc''@;'; put 'put ''dTIyNjZcdTIyNjdcdTIyMWVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZmU1XHVmZjA0XHVmZmUwXHVmZmUxXHVmZjA1XHVmZjAzXHVmZjA2XHVmZjBhXHVmZjIwXHhhN1x1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1''@;'; put 'put ''MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjAzYlx1MzAxMlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4''@;'; put 'put ''Mlx1MjI4M1x1MjIyYVx1MjIyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIyN1x1MjIyOFx1ZmZlMlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjEyYlx1MjAzMFx1MjY2Zlx1MjY2''@;'; put 'put ''ZFx1MjY2YVx1MjAyMFx1MjAyMVx4YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1ZWZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxMjldLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzEyOV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxMjldW3NdXT0zMzAyNCtzLGhb''@;'; put 'put ''MzMwMjQrc109Y1sxMjldW3NdKTtmb3IoY1sxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZm''@;'; put 'put ''MjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmNDFcdWZmNDJcdWZmNDNc''@;'; put 'put ''dWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMw''@;'; put 'put ''NDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNc''@;'; put 'put ''dTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMw''@;'; put 'put ''NzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxMzBdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzEzMF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxMzBdW3Nd''@;'; put 'put ''XT0zMzI4MCtzLGhbMzMyODArc109Y1sxMzBdW3NdKTtmb3IoY1sxMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMwYWJc''@;'; put 'put ''dTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZcdTMw''@;'; put 'put ''YzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdWZmZmRcdTMwZTBcdTMwZTFc''@;'; put 'put ''dTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAz''@;'; put 'put ''YzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxMzFdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzEzMV1bc10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KHlbY1sxMzFdW3NdXT0zMzUzNitzLGhbMzM1MzYrc109Y1sxMzFdW3NdKTtmb3IoY1sxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFcdTA0MTZcdTA0MTdc''@;'; put 'put ''dTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdWZmZmRc''@;'; put 'put ''dTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZc''@;'; put 'put ''dTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxMzJdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzEzMl1bc10uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKHlbY1sxMzJdW3NdXT0zMzc5MitzLGhbMzM3OTIrc109Y1sxMzJdW3NdKTtmb3IoY1sxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZc''@;'; put 'put ''dTI0NjdcdTI0NjhcdTI0NjlcdTI0NmFcdTI0NmJcdTI0NmNcdTI0NmRcdTI0NmVcdTI0NmZcdTI0NzBcdTI0NzFcdTI0NzJcdTI0NzNcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZmRcdTMzNDlcdTMzMTRcdTMzMjJcdTMz''@;'; put 'put ''NGRcdTMzMThcdTMzMjdcdTMzMDNcdTMzMzZcdTMzNTFcdTMzNTdcdTMzMGRcdTMzMjZcdTMzMjNcdTMzMmJcdTMzNGFcdTMzM2JcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOGVcdTMzOGZcdTMzYzRcdTMzYTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTMzN2JcdWZmZmRcdTMwMWRcdTMwMWZcdTIxMTZcdTMzY2RcdTIxMjFcdTMyYTRcdTMyYTVcdTMyYTZcdTMyYTdcdTMyYThcdTMyMzFcdTMyMzJcdTMyMzlcdTMzN2VcdTMzN2RcdTMzN2NcdTIyNTJcdTIyNjFcdTIyMmJcdTIyMmVcdTIyMTFcdTIyMWFcdTIyYTVcdTIyMjBcdTIyMWZcdTIy''@;'; put 'put ''YmZcdTIyMzVcdTIyMjlcdTIyMmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxMzVdLmxlbmd0aDsrK3MpNjU1MzMhPT1j''@;'; put 'put ''WzEzNV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxMzVdW3NdXT0zNDU2MCtzLGhbMzQ1NjArc109Y1sxMzVdW3NdKTtmb3IoY1sxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlOWNcdTU1MTZcdTVhMDNcdTk2M2ZcdTU0YzBcdTYxMWJcdTYzMjhcdTU5ZjZcdTkwMjJcdTg0NzVcdTgzMWNcdTdhNTBcdTYwYWFcdTYzZTFcdTZlMjVcdTY1ZWRcdTg0NjZcdTgyYTZcdTliZjVcdTY4OTNc''@;'; put 'put ''dTU3MjdcdTY1YTFcdTYyNzFcdTViOWJcdTU5ZDBcdTg2N2JcdTk4ZjRcdTdkNjJcdTdkYmVcdTliOGVcdTYyMTZcdTdjOWZcdTg4YjdcdTViODlcdTVlYjVcdTYzMDlcdTY2OTdcdTY4NDhcdTk1YzdcdTk3OGRcdTY3NGZcdTRlZTVcdTRmMGFcdTRmNGRcdTRmOWRcdTUwNDlcdTU2ZjJcdTU5''@;'; put 'put ''MzdcdTU5ZDRcdTVhMDFcdTVjMDlcdTYwZGZcdTYxMGZcdTYxNzBcdTY2MTNcdTY5MDVcdTcwYmFcdTc1NGZcdTc1NzBcdTc5ZmJcdTdkYWRcdTdkZWZcdTgwYzNcdTg0MGVcdTg4NjNcdThiMDJcdTkwNTVcdTkwN2FcdTUzM2JcdTRlOTVcdTRlYTVcdTU3ZGZcdTgwYjJcdTkwYzFcdTc4ZWZc''@;'; put 'put ''dTRlMDBcdTU4ZjFcdTZlYTJcdTkwMzhcdTdhMzJcdTgzMjhcdTgyOGJcdTljMmZcdTUxNDFcdTUzNzBcdTU0YmRcdTU0ZTFcdTU2ZTBcdTU5ZmJcdTVmMTVcdTk4ZjJcdTZkZWJcdTgwZTRcdTg1MmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxMzZdLmxlbmd0aDsr''@;'; put 'put ''K3MpNjU1MzMhPT1jWzEzNl1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxMzZdW3NdXT0zNDgxNitzLGhbMzQ4MTYrc109Y1sxMzZdW3NdKTtmb3IoY1sxMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2NjJcdTk2NzBcdTk2YTBc''@;'; put 'put ''dTk3ZmJcdTU0MGJcdTUzZjNcdTViODdcdTcwY2ZcdTdmYmRcdThmYzJcdTk2ZThcdTUzNmZcdTlkNWNcdTdhYmFcdTRlMTFcdTc4OTNcdTgxZmNcdTZlMjZcdTU2MThcdTU1MDRcdTZiMWRcdTg1MWFcdTljM2JcdTU5ZTVcdTUzYTlcdTZkNjZcdTc0ZGNcdTk1OGZcdTU2NDJcdTRlOTFcdTkw''@;'; put 'put ''NGJcdTk2ZjJcdTgzNGZcdTk5MGNcdTUzZTFcdTU1YjZcdTViMzBcdTVmNzFcdTY2MjBcdTY2ZjNcdTY4MDRcdTZjMzhcdTZjZjNcdTZkMjlcdTc0NWJcdTc2YzhcdTdhNGVcdTk4MzRcdTgyZjFcdTg4NWJcdThhNjBcdTkyZWRcdTZkYjJcdTc1YWJcdTc2Y2FcdTk5YzVcdTYwYTZcdThiMDFc''@;'; put 'put ''dThkOGFcdTk1YjJcdTY5OGVcdTUzYWRcdTUxODZcdWZmZmRcdTU3MTJcdTU4MzBcdTU5NDRcdTViYjRcdTVlZjZcdTYwMjhcdTYzYTlcdTYzZjRcdTZjYmZcdTZmMTRcdTcwOGVcdTcxMTRcdTcxNTlcdTcxZDVcdTczM2ZcdTdlMDFcdTgyNzZcdTgyZDFcdTg1OTdcdTkwNjBcdTkyNWJcdTlk''@;'; put 'put ''MWJcdTU4NjlcdTY1YmNcdTZjNWFcdTc1MjVcdTUxZjlcdTU5MmVcdTU5NjVcdTVmODBcdTVmZGNcdTYyYmNcdTY1ZmFcdTZhMmFcdTZiMjdcdTZiYjRcdTczOGJcdTdmYzFcdTg5NTZcdTlkMmNcdTlkMGVcdTllYzRcdTVjYTFcdTZjOTZcdTgzN2JcdTUxMDRcdTVjNGJcdTYxYjZcdTgxYzZc''@;'; put 'put ''dTY4NzZcdTcyNjFcdTRlNTlcdTRmZmFcdTUzNzhcdTYwNjlcdTZlMjlcdTdhNGZcdTk3ZjNcdTRlMGJcdTUzMTZcdTRlZWVcdTRmNTVcdTRmM2RcdTRmYTFcdTRmNzNcdTUyYTBcdTUzZWZcdTU2MDlcdTU5MGZcdTVhYzFcdTViYjZcdTViZTFcdTc5ZDFcdTY2ODdcdTY3OWNcdTY3YjZcdTZi''@;'; put 'put ''NGNcdTZjYjNcdTcwNmJcdTczYzJcdTc5OGRcdTc5YmVcdTdhM2NcdTdiODdcdTgyYjFcdTgyZGJcdTgzMDRcdTgzNzdcdTgzZWZcdTgzZDNcdTg3NjZcdThhYjJcdTU2MjlcdThjYThcdThmZTZcdTkwNGVcdTk3MWVcdTg2OGFcdTRmYzRcdTVjZThcdTYyMTFcdTcyNTlcdTc1M2JcdTgxZTVc''@;'; put 'put ''dTgyYmRcdTg2ZmVcdThjYzBcdTk2YzVcdTk5MTNcdTk5ZDVcdTRlY2JcdTRmMWFcdTg5ZTNcdTU2ZGVcdTU4NGFcdTU4Y2FcdTVlZmJcdTVmZWJcdTYwMmFcdTYwOTRcdTYwNjJcdTYxZDBcdTYyMTJcdTYyZDBcdTY1MzlcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sx''@;'; put 'put ''MzddLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzEzN11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxMzddW3NdXT0zNTA3MitzLGhbMzUwNzIrc109Y1sxMzddW3NdKTtmb3IoY1sxMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliNDFc''@;'; put 'put ''dTY2NjZcdTY4YjBcdTZkNzdcdTcwNzBcdTc1NGNcdTc2ODZcdTdkNzVcdTgyYTVcdTg3ZjlcdTk1OGJcdTk2OGVcdThjOWRcdTUxZjFcdTUyYmVcdTU5MTZcdTU0YjNcdTViYjNcdTVkMTZcdTYxNjhcdTY5ODJcdTZkYWZcdTc4OGRcdTg0Y2JcdTg4NTdcdThhNzJcdTkzYTdcdTlhYjhcdTZk''@;'; put 'put ''NmNcdTk5YThcdTg2ZDlcdTU3YTNcdTY3ZmZcdTg2Y2VcdTkyMGVcdTUyODNcdTU2ODdcdTU0MDRcdTVlZDNcdTYyZTFcdTY0YjlcdTY4M2NcdTY4MzhcdTZiYmJcdTczNzJcdTc4YmFcdTdhNmJcdTg5OWFcdTg5ZDJcdThkNmJcdThmMDNcdTkwZWRcdTk1YTNcdTk2OTRcdTk3NjlcdTViNjZc''@;'; put 'put ''dTVjYjNcdTY5N2RcdTk4NGRcdTk4NGVcdTYzOWJcdTdiMjBcdTZhMmJcdWZmZmRcdTZhN2ZcdTY4YjZcdTljMGRcdTZmNWZcdTUyNzJcdTU1OWRcdTYwNzBcdTYyZWNcdTZkM2JcdTZlMDdcdTZlZDFcdTg0NWJcdTg5MTBcdThmNDRcdTRlMTRcdTljMzlcdTUzZjZcdTY5MWJcdTZhM2FcdTk3''@;'; put 'put ''ODRcdTY4MmFcdTUxNWNcdTdhYzNcdTg0YjJcdTkxZGNcdTkzOGNcdTU2NWJcdTlkMjhcdTY4MjJcdTgzMDVcdTg0MzFcdTdjYTVcdTUyMDhcdTgyYzVcdTc0ZTZcdTRlN2VcdTRmODNcdTUxYTBcdTViZDJcdTUyMGFcdTUyZDhcdTUyZTdcdTVkZmJcdTU1OWFcdTU4MmFcdTU5ZTZcdTViOGNc''@;'; put 'put ''dTViOThcdTViZGJcdTVlNzJcdTVlNzlcdTYwYTNcdTYxMWZcdTYxNjNcdTYxYmVcdTYzZGJcdTY1NjJcdTY3ZDFcdTY4NTNcdTY4ZmFcdTZiM2VcdTZiNTNcdTZjNTdcdTZmMjJcdTZmOTdcdTZmNDVcdTc0YjBcdTc1MThcdTc2ZTNcdTc3MGJcdTdhZmZcdTdiYTFcdTdjMjFcdTdkZTlcdTdm''@;'; put 'put ''MzZcdTdmZjBcdTgwOWRcdTgyNjZcdTgzOWVcdTg5YjNcdThhY2NcdThjYWJcdTkwODRcdTk0NTFcdTk1OTNcdTk1OTFcdTk1YTJcdTk2NjVcdTk3ZDNcdTk5MjhcdTgyMThcdTRlMzhcdTU0MmJcdTVjYjhcdTVkY2NcdTczYTlcdTc2NGNcdTc3M2NcdTVjYTlcdTdmZWJcdThkMGJcdTk2YzFc''@;'; put 'put ''dTk4MTFcdTk4NTRcdTk4NThcdTRmMDFcdTRmMGVcdTUzNzFcdTU1OWNcdTU2NjhcdTU3ZmFcdTU5NDdcdTViMDlcdTViYzRcdTVjOTBcdTVlMGNcdTVlN2VcdTVmY2NcdTYzZWVcdTY3M2FcdTY1ZDdcdTY1ZTJcdTY3MWZcdTY4Y2JcdTY4YzRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxzPTA7cyE9Y1sxMzhdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzEzOF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxMzhdW3NdXT0zNTMyOCtzLGhbMzUzMjgrc109Y1sxMzhdW3NdKTtmb3IoY1sxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTZhNWZcdTVlMzBcdTZiYzVcdTZjMTdcdTZjN2RcdTc1N2ZcdTc5NDhcdTViNjNcdTdhMDBcdTdkMDBcdTVmYmRcdTg5OGZcdThhMThcdThjYjRcdThkNzdcdThlY2NcdThmMWRcdTk4ZTJcdTlhMGVcdTliM2NcdTRlODBcdTUwN2RcdTUxMDBcdTU5OTNcdTViOWNcdTYyMmZcdTYy''@;'; put 'put ''ODBcdTY0ZWNcdTZiM2FcdTcyYTBcdTc1OTFcdTc5NDdcdTdmYTlcdTg3ZmJcdThhYmNcdThiNzBcdTYzYWNcdTgzY2FcdTk3YTBcdTU0MDlcdTU0MDNcdTU1YWJcdTY4NTRcdTZhNThcdThhNzBcdTc4MjdcdTY3NzVcdTllY2RcdTUzNzRcdTViYTJcdTgxMWFcdTg2NTBcdTkwMDZcdTRlMThc''@;'; put 'put ''dTRlNDVcdTRlYzdcdTRmMTFcdTUzY2FcdTU0MzhcdTViYWVcdTVmMTNcdTYwMjVcdTY1NTFcdWZmZmRcdTY3M2RcdTZjNDJcdTZjNzJcdTZjZTNcdTcwNzhcdTc0MDNcdTdhNzZcdTdhYWVcdTdiMDhcdTdkMWFcdTdjZmVcdTdkNjZcdTY1ZTdcdTcyNWJcdTUzYmJcdTVjNDVcdTVkZThcdTYy''@;'; put 'put ''ZDJcdTYyZTBcdTYzMTlcdTZlMjBcdTg2NWFcdThhMzFcdThkZGRcdTkyZjhcdTZmMDFcdTc5YTZcdTliNWFcdTRlYThcdTRlYWJcdTRlYWNcdTRmOWJcdTRmYTBcdTUwZDFcdTUxNDdcdTdhZjZcdTUxNzFcdTUxZjZcdTUzNTRcdTUzMjFcdTUzN2ZcdTUzZWJcdTU1YWNcdTU4ODNcdTVjZTFc''@;'; put 'put ''dTVmMzdcdTVmNGFcdTYwMmZcdTYwNTBcdTYwNmRcdTYzMWZcdTY1NTlcdTZhNGJcdTZjYzFcdTcyYzJcdTcyZWRcdTc3ZWZcdTgwZjhcdTgxMDVcdTgyMDhcdTg1NGVcdTkwZjdcdTkzZTFcdTk3ZmZcdTk5NTdcdTlhNWFcdTRlZjBcdTUxZGRcdTVjMmRcdTY2ODFcdTY5NmRcdTVjNDBcdTY2''@;'; put 'put ''ZjJcdTY5NzVcdTczODlcdTY4NTBcdTdjODFcdTUwYzVcdTUyZTRcdTU3NDdcdTVkZmVcdTkzMjZcdTY1YTRcdTZiMjNcdTZiM2RcdTc0MzRcdTc5ODFcdTc5YmRcdTdiNGJcdTdkY2FcdTgyYjlcdTgzY2NcdTg4N2ZcdTg5NWZcdThiMzlcdThmZDFcdTkxZDFcdTU0MWZcdTkyODBcdTRlNWRc''@;'; put 'put ''dTUwMzZcdTUzZTVcdTUzM2FcdTcyZDdcdTczOTZcdTc3ZTlcdTgyZTZcdThlYWZcdTk5YzZcdTk5YzhcdTk5ZDJcdTUxNzdcdTYxMWFcdTg2NWVcdTU1YjBcdTdhN2FcdTUwNzZcdTViZDNcdTkwNDdcdTk2ODVcdTRlMzJcdTZhZGJcdTkxZTdcdTVjNTFcdTVjNDhcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxMzldLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzEzOV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxMzldW3NdXT0zNTU4NCtzLGhbMzU1ODQrc109Y1sxMzldW3NdKTtmb3IoY1sxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTYzOThcdTdhOWZcdTZjOTNcdTk3NzRcdThmNjFcdTdhYWFcdTcxOGFcdTk2ODhcdTdjODJcdTY4MTdcdTdlNzBcdTY4NTFcdTkzNmNcdTUyZjJcdTU0MWJcdTg1YWJcdThhMTNcdTdmYTRcdThlY2RcdTkwZTFcdTUzNjZcdTg4ODhcdTc5NDFcdTRmYzJcdTUw''@;'; put 'put ''YmVcdTUyMTFcdTUxNDRcdTU1NTNcdTU3MmRcdTczZWFcdTU3OGJcdTU5NTFcdTVmNjJcdTVmODRcdTYwNzVcdTYxNzZcdTYxNjdcdTYxYTlcdTYzYjJcdTY0M2FcdTY1NmNcdTY2NmZcdTY4NDJcdTZlMTNcdTc1NjZcdTdhM2RcdTdjZmJcdTdkNGNcdTdkOTlcdTdlNGJcdTdmNmJcdTgzMGVc''@;'; put 'put ''dTgzNGFcdTg2Y2RcdThhMDhcdThhNjNcdThiNjZcdThlZmRcdTk4MWFcdTlkOGZcdTgyYjhcdThmY2VcdTliZThcdWZmZmRcdTUyODdcdTYyMWZcdTY0ODNcdTZmYzBcdTk2OTlcdTY4NDFcdTUwOTFcdTZiMjBcdTZjN2FcdTZmNTRcdTdhNzRcdTdkNTBcdTg4NDBcdThhMjNcdTY3MDhcdTRl''@;'; put 'put ''ZjZcdTUwMzlcdTUwMjZcdTUwNjVcdTUxN2NcdTUyMzhcdTUyNjNcdTU1YTdcdTU3MGZcdTU4MDVcdTVhY2NcdTVlZmFcdTYxYjJcdTYxZjhcdTYyZjNcdTYzNzJcdTY5MWNcdTZhMjlcdTcyN2RcdTcyYWNcdTczMmVcdTc4MTRcdTc4NmZcdTdkNzlcdTc3MGNcdTgwYTlcdTg5OGJcdThiMTlc''@;'; put 'put ''dThjZTJcdThlZDJcdTkwNjNcdTkzNzVcdTk2N2FcdTk4NTVcdTlhMTNcdTllNzhcdTUxNDNcdTUzOWZcdTUzYjNcdTVlN2JcdTVmMjZcdTZlMWJcdTZlOTBcdTczODRcdTczZmVcdTdkNDNcdTgyMzdcdThhMDBcdThhZmFcdTk2NTBcdTRlNGVcdTUwMGJcdTUzZTRcdTU0N2NcdTU2ZmFcdTU5''@;'; put 'put ''ZDFcdTViNjRcdTVkZjFcdTVlYWJcdTVmMjdcdTYyMzhcdTY1NDVcdTY3YWZcdTZlNTZcdTcyZDBcdTdjY2FcdTg4YjRcdTgwYTFcdTgwZTFcdTgzZjBcdTg2NGVcdThhODdcdThkZThcdTkyMzdcdTk2YzdcdTk4NjdcdTlmMTNcdTRlOTRcdTRlOTJcdTRmMGRcdTUzNDhcdTU0NDlcdTU0M2Vc''@;'; put 'put ''dTVhMmZcdTVmOGNcdTVmYTFcdTYwOWZcdTY4YTdcdTZhOGVcdTc0NWFcdTc4ODFcdThhOWVcdThhYTRcdThiNzdcdTkxOTBcdTRlNWVcdTliYzlcdTRlYTRcdTRmN2NcdTRmYWZcdTUwMTlcdTUwMTZcdTUxNDlcdTUxNmNcdTUyOWZcdTUyYjlcdTUyZmVcdTUzOWFcdTUzZTNcdTU0MTFcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNDBdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE0MF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNDBdW3NdXT0zNTg0MCtzLGhbMzU4NDArc109Y1sxNDBdW3NdKTtmb3IoY1sxNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0MGVcdTU1ODlcdTU3NTFcdTU3YTJcdTU5N2RcdTViNTRcdTViNWRcdTViOGZcdTVkZTVcdTVkZTdcdTVkZjdcdTVlNzhcdTVlODNcdTVlOWFcdTVlYjdcdTVmMThcdTYwNTJcdTYxNGNcdTYyOTdcdTYyZDhcdTYzYTdcdTY1M2JcdTY2''@;'; put 'put ''MDJcdTY2NDNcdTY2ZjRcdTY3NmRcdTY4MjFcdTY4OTdcdTY5Y2JcdTZjNWZcdTZkMmFcdTZkNjlcdTZlMmZcdTZlOWRcdTc1MzJcdTc2ODdcdTc4NmNcdTdhM2ZcdTdjZTBcdTdkMDVcdTdkMThcdTdkNWVcdTdkYjFcdTgwMTVcdTgwMDNcdTgwYWZcdTgwYjFcdTgxNTRcdTgxOGZcdTgyMmFc''@;'; put 'put ''dTgzNTJcdTg4NGNcdTg4NjFcdThiMWJcdThjYTJcdThjZmNcdTkwY2FcdTkxNzVcdTkyNzFcdTc4M2ZcdTkyZmNcdTk1YTRcdTk2NGRcdWZmZmRcdTk4MDVcdTk5OTlcdTlhZDhcdTlkM2JcdTUyNWJcdTUyYWJcdTUzZjdcdTU0MDhcdTU4ZDVcdTYyZjdcdTZmZTBcdThjNmFcdThmNWZcdTll''@;'; put 'put ''YjlcdTUxNGJcdTUyM2JcdTU0NGFcdTU2ZmRcdTdhNDBcdTkxNzdcdTlkNjBcdTllZDJcdTczNDRcdTZmMDlcdTgxNzBcdTc1MTFcdTVmZmRcdTYwZGFcdTlhYThcdTcyZGJcdThmYmNcdTZiNjRcdTk4MDNcdTRlY2FcdTU2ZjBcdTU3NjRcdTU4YmVcdTVhNWFcdTYwNjhcdTYxYzdcdTY2MGZc''@;'; put 'put ''dTY2MDZcdTY4MzlcdTY4YjFcdTZkZjdcdTc1ZDVcdTdkM2FcdTgyNmVcdTliNDJcdTRlOWJcdTRmNTBcdTUzYzlcdTU1MDZcdTVkNmZcdTVkZTZcdTVkZWVcdTY3ZmJcdTZjOTlcdTc0NzNcdTc4MDJcdThhNTBcdTkzOTZcdTg4ZGZcdTU3NTBcdTVlYTdcdTYzMmJcdTUwYjVcdTUwYWNcdTUx''@;'; put 'put ''OGRcdTY3MDBcdTU0YzlcdTU4NWVcdTU5YmJcdTViYjBcdTVmNjlcdTYyNGRcdTYzYTFcdTY4M2RcdTZiNzNcdTZlMDhcdTcwN2RcdTkxYzdcdTcyODBcdTc4MTVcdTc4MjZcdTc5NmRcdTY1OGVcdTdkMzBcdTgzZGNcdTg4YzFcdThmMDlcdTk2OWJcdTUyNjRcdTU3MjhcdTY3NTBcdTdmNmFc''@;'; put 'put ''dThjYTFcdTUxYjRcdTU3NDJcdTk2MmFcdTU4M2FcdTY5OGFcdTgwYjRcdTU0YjJcdTVkMGVcdTU3ZmNcdTc4OTVcdTlkZmFcdTRmNWNcdTUyNGFcdTU0OGJcdTY0M2VcdTY2MjhcdTY3MTRcdTY3ZjVcdTdhODRcdTdiNTZcdTdkMjJcdTkzMmZcdTY4NWNcdTliYWRcdTdiMzlcdTUzMTlcdTUx''@;'; put 'put ''OGFcdTUyMzdcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNDFdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE0MV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNDFdW3NdXT0zNjA5NitzLGhbMzYwOTYrc109Y1sxNDFdW3NdKTtmb3IoY1sxNDJdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViZGZcdTYyZjZcdTY0YWVcdTY0ZTZcdTY3MmRcdTZiYmFcdTg1YTlcdTk2ZDFcdTc2OTBcdTliZDZcdTYzNGNcdTkzMDZcdTliYWJcdTc2YmZcdTY2NTJcdTRlMDlcdTUwOThcdTUzYzJcdTVjNzFcdTYwZThcdTY0''@;'; put 'put ''OTJcdTY1NjNcdTY4NWZcdTcxZTZcdTczY2FcdTc1MjNcdTdiOTdcdTdlODJcdTg2OTVcdThiODNcdThjZGJcdTkxNzhcdTk5MTBcdTY1YWNcdTY2YWJcdTZiOGJcdTRlZDVcdTRlZDRcdTRmM2FcdTRmN2ZcdTUyM2FcdTUzZjhcdTUzZjJcdTU1ZTNcdTU2ZGJcdTU4ZWJcdTU5Y2JcdTU5Yzlc''@;'; put 'put ''dTU5ZmZcdTViNTBcdTVjNGRcdTVlMDJcdTVlMmJcdTVmZDdcdTYwMWRcdTYzMDdcdTY1MmZcdTViNWNcdTY1YWZcdTY1YmRcdTY1ZThcdTY3OWRcdTZiNjJcdWZmZmRcdTZiN2JcdTZjMGZcdTczNDVcdTc5NDlcdTc5YzFcdTdjZjhcdTdkMTlcdTdkMmJcdTgwYTJcdTgxMDJcdTgxZjNcdTg5''@;'; put 'put ''OTZcdThhNWVcdThhNjlcdThhNjZcdThhOGNcdThhZWVcdThjYzdcdThjZGNcdTk2Y2NcdTk4ZmNcdTZiNmZcdTRlOGJcdTRmM2NcdTRmOGRcdTUxNTBcdTViNTdcdTViZmFcdTYxNDhcdTYzMDFcdTY2NDJcdTZiMjFcdTZlY2JcdTZjYmJcdTcyM2VcdTc0YmRcdTc1ZDRcdTc4YzFcdTc5M2Fc''@;'; put 'put ''dTgwMGNcdTgwMzNcdTgxZWFcdTg0OTRcdThmOWVcdTZjNTBcdTllN2ZcdTVmMGZcdThiNThcdTlkMmJcdTdhZmFcdThlZjhcdTViOGRcdTk2ZWJcdTRlMDNcdTUzZjFcdTU3ZjdcdTU5MzFcdTVhYzlcdTViYTRcdTYwODlcdTZlN2ZcdTZmMDZcdTc1YmVcdThjZWFcdTViOWZcdTg1MDBcdTdi''@;'; put 'put ''ZTBcdTUwNzJcdTY3ZjRcdTgyOWRcdTVjNjFcdTg1NGFcdTdlMWVcdTgyMGVcdTUxOTlcdTVjMDRcdTYzNjhcdThkNjZcdTY1OWNcdTcxNmVcdTc5M2VcdTdkMTdcdTgwMDVcdThiMWRcdThlY2FcdTkwNmVcdTg2YzdcdTkwYWFcdTUwMWZcdTUyZmFcdTVjM2FcdTY3NTNcdTcwN2NcdTcyMzVc''@;'; put 'put ''dTkxNGNcdTkxYzhcdTkzMmJcdTgyZTVcdTViYzJcdTVmMzFcdTYwZjlcdTRlM2JcdTUzZDZcdTViODhcdTYyNGJcdTY3MzFcdTZiOGFcdTcyZTlcdTczZTBcdTdhMmVcdTgxNmJcdThkYTNcdTkxNTJcdTk5OTZcdTUxMTJcdTUzZDdcdTU0NmFcdTViZmZcdTYzODhcdTZhMzlcdTdkYWNcdTk3''@;'; put 'put ''MDBcdTU2ZGFcdTUzY2VcdTU0NjhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNDJdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE0Ml1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNDJdW3NdXT0zNjM1MitzLGhbMzYzNTIrc109Y1sxNDJdW3NdKTtmb3IoY1sxNDNdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViOTdcdTVjMzFcdTVkZGVcdTRmZWVcdTYxMDFcdTYyZmVcdTZkMzJcdTc5YzBcdTc5Y2JcdTdkNDJcdTdlNGRcdTdmZDJcdTgxZWRcdTgyMWZcdTg0OTBcdTg4NDZcdTg5NzJcdThiOTBcdThl''@;'; put 'put ''NzRcdThmMmZcdTkwMzFcdTkxNGJcdTkxNmNcdTk2YzZcdTkxOWNcdTRlYzBcdTRmNGZcdTUxNDVcdTUzNDFcdTVmOTNcdTYyMGVcdTY3ZDRcdTZjNDFcdTZlMGJcdTczNjNcdTdlMjZcdTkxY2RcdTkyODNcdTUzZDRcdTU5MTlcdTViYmZcdTZkZDFcdTc5NWRcdTdlMmVcdTdjOWJcdTU4N2Vc''@;'; put 'put ''dTcxOWZcdTUxZmFcdTg4NTNcdThmZjBcdTRmY2FcdTVjZmJcdTY2MjVcdTc3YWNcdTdhZTNcdTgyMWNcdTk5ZmZcdTUxYzZcdTVmYWFcdTY1ZWNcdTY5NmZcdTZiODlcdTZkZjNcdWZmZmRcdTZlOTZcdTZmNjRcdTc2ZmVcdTdkMTRcdTVkZTFcdTkwNzVcdTkxODdcdTk4MDZcdTUxZTZcdTUy''@;'; put 'put ''MWRcdTYyNDBcdTY2OTFcdTY2ZDlcdTZlMWFcdTVlYjZcdTdkZDJcdTdmNzJcdTY2ZjhcdTg1YWZcdTg1ZjdcdThhZjhcdTUyYTlcdTUzZDlcdTU5NzNcdTVlOGZcdTVmOTBcdTYwNTVcdTkyZTRcdTk2NjRcdTUwYjdcdTUxMWZcdTUyZGRcdTUzMjBcdTUzNDdcdTUzZWNcdTU0ZThcdTU1NDZc''@;'; put 'put ''dTU1MzFcdTU2MTdcdTU5NjhcdTU5YmVcdTVhM2NcdTViYjVcdTVjMDZcdTVjMGZcdTVjMTFcdTVjMWFcdTVlODRcdTVlOGFcdTVlZTBcdTVmNzBcdTYyN2ZcdTYyODRcdTYyZGJcdTYzOGNcdTYzNzdcdTY2MDdcdTY2MGNcdTY2MmRcdTY2NzZcdTY3N2VcdTY4YTJcdTZhMWZcdTZhMzVcdTZj''@;'; put 'put ''YmNcdTZkODhcdTZlMDlcdTZlNThcdTcxM2NcdTcxMjZcdTcxNjdcdTc1YzdcdTc3MDFcdTc4NWRcdTc5MDFcdTc5NjVcdTc5ZjBcdTdhZTBcdTdiMTFcdTdjYTdcdTdkMzlcdTgwOTZcdTgzZDZcdTg0OGJcdTg1NDlcdTg4NWRcdTg4ZjNcdThhMWZcdThhM2NcdThhNTRcdThhNzNcdThjNjFc''@;'; put 'put ''dThjZGVcdTkxYTRcdTkyNjZcdTkzN2VcdTk0MThcdTk2OWNcdTk3OThcdTRlMGFcdTRlMDhcdTRlMWVcdTRlNTdcdTUxOTdcdTUyNzBcdTU3Y2VcdTU4MzRcdTU4Y2NcdTViMjJcdTVlMzhcdTYwYzVcdTY0ZmVcdTY3NjFcdTY3NTZcdTZkNDRcdTcyYjZcdTc1NzNcdTdhNjNcdTg0YjhcdThi''@;'; put 'put ''NzJcdTkxYjhcdTkzMjBcdTU2MzFcdTU3ZjRcdTk4ZmVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNDNdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE0M11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNDNdW3NdXT0zNjYwOCtzLGhbMzY2MDgrc109Y1sxNDNdW3NdKTtm''@;'; put 'put ''b3IoY1sxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyZWRcdTY5MGRcdTZiOTZcdTcxZWRcdTdlNTRcdTgwNzdcdTgyNzJcdTg5ZTZcdTk4ZGZcdTg3NTVcdThmYjFcdTVjM2JcdTRmMzhcdTRmZTFcdTRmYjVcdTU1MDdcdTVh''@;'; put 'put ''MjBcdTViZGRcdTViZTlcdTVmYzNcdTYxNGVcdTYzMmZcdTY1YjBcdTY2NGJcdTY4ZWVcdTY5OWJcdTZkNzhcdTZkZjFcdTc1MzNcdTc1YjlcdTc3MWZcdTc5NWVcdTc5ZTZcdTdkMzNcdTgxZTNcdTgyYWZcdTg1YWFcdTg5YWFcdThhM2FcdThlYWJcdThmOWJcdTkwMzJcdTkxZGRcdTk3MDdc''@;'; put 'put ''dTRlYmFcdTRlYzFcdTUyMDNcdTU4NzVcdTU4ZWNcdTVjMGJcdTc1MWFcdTVjM2RcdTgxNGVcdThhMGFcdThmYzVcdTk2NjNcdTk3NmRcdTdiMjVcdThhY2ZcdTk4MDhcdTkxNjJcdTU2ZjNcdTUzYThcdWZmZmRcdTkwMTdcdTU0MzlcdTU3ODJcdTVlMjVcdTYzYThcdTZjMzRcdTcwOGFcdTc3''@;'; put 'put ''NjFcdTdjOGJcdTdmZTBcdTg4NzBcdTkwNDJcdTkxNTRcdTkzMTBcdTkzMThcdTk2OGZcdTc0NWVcdTlhYzRcdTVkMDdcdTVkNjlcdTY1NzBcdTY3YTJcdThkYThcdTk2ZGJcdTYzNmVcdTY3NDlcdTY5MTlcdTgzYzVcdTk4MTdcdTk2YzBcdTg4ZmVcdTZmODRcdTY0N2FcdTViZjhcdTRlMTZc''@;'; put 'put ''dTcwMmNcdTc1NWRcdTY2MmZcdTUxYzRcdTUyMzZcdTUyZTJcdTU5ZDNcdTVmODFcdTYwMjdcdTYyMTBcdTY1M2ZcdTY1NzRcdTY2MWZcdTY2NzRcdTY4ZjJcdTY4MTZcdTZiNjNcdTZlMDVcdTcyNzJcdTc1MWZcdTc2ZGJcdTdjYmVcdTgwNTZcdTU4ZjBcdTg4ZmRcdTg5N2ZcdThhYTBcdThh''@;'; put 'put ''OTNcdThhY2JcdTkwMWRcdTkxOTJcdTk3NTJcdTk3NTlcdTY1ODlcdTdhMGVcdTgxMDZcdTk2YmJcdTVlMmRcdTYwZGNcdTYyMWFcdTY1YTVcdTY2MTRcdTY3OTBcdTc3ZjNcdTdhNGRcdTdjNGRcdTdlM2VcdTgxMGFcdThjYWNcdThkNjRcdThkZTFcdThlNWZcdTc4YTlcdTUyMDdcdTYyZDlc''@;'; put 'put ''dTYzYTVcdTY0NDJcdTYyOThcdThhMmRcdTdhODNcdTdiYzBcdThhYWNcdTk2ZWFcdTdkNzZcdTgyMGNcdTg3NDlcdTRlZDlcdTUxNDhcdTUzNDNcdTUzNjBcdTViYTNcdTVjMDJcdTVjMTZcdTVkZGRcdTYyMjZcdTYyNDdcdTY0YjBcdTY4MTNcdTY4MzRcdTZjYzlcdTZkNDVcdTZkMTdcdTY3''@;'; put 'put ''ZDNcdTZmNWNcdTcxNGVcdTcxN2RcdTY1Y2JcdTdhN2ZcdTdiYWRcdTdkZGFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNDRdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE0NF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNDRdW3NdXT0zNjg2NCtzLGhbMzY4NjQrc109''@;'; put 'put ''Y1sxNDRdW3NdKTtmb3IoY1sxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlNGFcdTdmYThcdTgxN2FcdTgyMWJcdTgyMzlcdTg1YTZcdThhNmVcdThjY2VcdThkZjVcdTkwNzhcdTkwNzdcdTkyYWRcdTkyOTFcdTk1ODNcdTli''@;'; put 'put ''YWVcdTUyNGRcdTU1ODRcdTZmMzhcdTcxMzZcdTUxNjhcdTc5ODVcdTdlNTVcdTgxYjNcdTdjY2VcdTU2NGNcdTU4NTFcdTVjYThcdTYzYWFcdTY2ZmVcdTY2ZmRcdTY5NWFcdTcyZDlcdTc1OGZcdTc1OGVcdTc5MGVcdTc5NTZcdTc5ZGZcdTdjOTdcdTdkMjBcdTdkNDRcdTg2MDdcdThhMzRc''@;'; put 'put ''dTk2M2JcdTkwNjFcdTlmMjBcdTUwZTdcdTUyNzVcdTUzY2NcdTUzZTJcdTUwMDlcdTU1YWFcdTU4ZWVcdTU5NGZcdTcyM2RcdTViOGJcdTVjNjRcdTUzMWRcdTYwZTNcdTYwZjNcdTYzNWNcdTYzODNcdTYzM2ZcdTYzYmJcdWZmZmRcdTY0Y2RcdTY1ZTlcdTY2ZjlcdTVkZTNcdTY5Y2RcdTY5''@;'; put 'put ''ZmRcdTZmMTVcdTcxZTVcdTRlODlcdTc1ZTlcdTc2ZjhcdTdhOTNcdTdjZGZcdTdkY2ZcdTdkOWNcdTgwNjFcdTgzNDlcdTgzNThcdTg0NmNcdTg0YmNcdTg1ZmJcdTg4YzVcdThkNzBcdTkwMDFcdTkwNmRcdTkzOTdcdTk3MWNcdTlhMTJcdTUwY2ZcdTU4OTdcdTYxOGVcdTgxZDNcdTg1MzVc''@;'; put 'put ''dThkMDhcdTkwMjBcdTRmYzNcdTUwNzRcdTUyNDdcdTUzNzNcdTYwNmZcdTYzNDlcdTY3NWZcdTZlMmNcdThkYjNcdTkwMWZcdTRmZDdcdTVjNWVcdThjY2FcdTY1Y2ZcdTdkOWFcdTUzNTJcdTg4OTZcdTUxNzZcdTYzYzNcdTViNThcdTViNmJcdTVjMGFcdTY0MGRcdTY3NTFcdTkwNWNcdTRl''@;'; put 'put ''ZDZcdTU5MWFcdTU5MmFcdTZjNzBcdThhNTFcdTU1M2VcdTU4MTVcdTU5YTVcdTYwZjBcdTYyNTNcdTY3YzFcdTgyMzVcdTY5NTVcdTk2NDBcdTk5YzRcdTlhMjhcdTRmNTNcdTU4MDZcdTViZmVcdTgwMTBcdTVjYjFcdTVlMmZcdTVmODVcdTYwMjBcdTYxNGJcdTYyMzRcdTY2ZmZcdTZjZjBc''@;'; put 'put ''dTZlZGVcdTgwY2VcdTgxN2ZcdTgyZDRcdTg4OGJcdThjYjhcdTkwMDBcdTkwMmVcdTk2OGFcdTllZGJcdTliZGJcdTRlZTNcdTUzZjBcdTU5MjdcdTdiMmNcdTkxOGRcdTk4NGNcdTlkZjlcdTZlZGRcdTcwMjdcdTUzNTNcdTU1NDRcdTViODVcdTYyNThcdTYyOWVcdTYyZDNcdTZjYTJcdTZm''@;'; put 'put ''ZWZcdTc0MjJcdThhMTdcdTk0MzhcdTZmYzFcdThhZmVcdTgzMzhcdTUxZTdcdTg2ZjhcdTUzZWFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNDVdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE0NV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNDVdW3NdXT0zNzEyMCtz''@;'; put 'put ''LGhbMzcxMjArc109Y1sxNDVdW3NdKTtmb3IoY1sxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzZTlcdTRmNDZcdTkwNTRcdThmYjBcdTU5NmFcdTgxMzFcdTVkZmRcdTdhZWFcdThmYmZcdTY4ZGFcdThjMzdcdTcyZjhcdTlj''@;'; put 'put ''NDhcdTZhM2RcdThhYjBcdTRlMzlcdTUzNThcdTU2MDZcdTU3NjZcdTYyYzVcdTYzYTJcdTY1ZTZcdTZiNGVcdTZkZTFcdTZlNWJcdTcwYWRcdTc3ZWRcdTdhZWZcdTdiYWFcdTdkYmJcdTgwM2RcdTgwYzZcdTg2Y2JcdThhOTVcdTkzNWJcdTU2ZTNcdTU4YzdcdTVmM2VcdTY1YWRcdTY2OTZc''@;'; put 'put ''dTZhODBcdTZiYjVcdTc1MzdcdThhYzdcdTUwMjRcdTc3ZTVcdTU3MzBcdTVmMWJcdTYwNjVcdTY2N2FcdTZjNjBcdTc1ZjRcdTdhMWFcdTdmNmVcdTgxZjRcdTg3MThcdTkwNDVcdTk5YjNcdTdiYzlcdTc1NWNcdTdhZjlcdTdiNTFcdTg0YzRcdWZmZmRcdTkwMTBcdTc5ZTlcdTdhOTJcdTgz''@;'; put 'put ''MzZcdTVhZTFcdTc3NDBcdTRlMmRcdTRlZjJcdTViOTlcdTVmZTBcdTYyYmRcdTY2M2NcdTY3ZjFcdTZjZThcdTg2NmJcdTg4NzdcdThhM2JcdTkxNGVcdTkyZjNcdTk5ZDBcdTZhMTdcdTcwMjZcdTczMmFcdTgyZTdcdTg0NTdcdThjYWZcdTRlMDFcdTUxNDZcdTUxY2JcdTU1OGJcdTViZjVc''@;'; put 'put ''dTVlMTZcdTVlMzNcdTVlODFcdTVmMTRcdTVmMzVcdTVmNmJcdTVmYjRcdTYxZjJcdTYzMTFcdTY2YTJcdTY3MWRcdTZmNmVcdTcyNTJcdTc1M2FcdTc3M2FcdTgwNzRcdTgxMzlcdTgxNzhcdTg3NzZcdThhYmZcdThhZGNcdThkODVcdThkZjNcdTkyOWFcdTk1NzdcdTk4MDJcdTljZTVcdTUy''@;'; put 'put ''YzVcdTYzNTdcdTc2ZjRcdTY3MTVcdTZjODhcdTczY2RcdThjYzNcdTkzYWVcdTk2NzNcdTZkMjVcdTU4OWNcdTY5MGVcdTY5Y2NcdThmZmRcdTkzOWFcdTc1ZGJcdTkwMWFcdTU4NWFcdTY4MDJcdTYzYjRcdTY5ZmJcdTRmNDNcdTZmMmNcdTY3ZDhcdThmYmJcdTg1MjZcdTdkYjRcdTkzNTRc''@;'; put 'put ''dTY5M2ZcdTZmNzBcdTU3NmFcdTU4ZjdcdTViMmNcdTdkMmNcdTcyMmFcdTU0MGFcdTkxZTNcdTlkYjRcdTRlYWRcdTRmNGVcdTUwNWNcdTUwNzVcdTUyNDNcdThjOWVcdTU0NDhcdTU4MjRcdTViOWFcdTVlMWRcdTVlOTVcdTVlYWRcdTVlZjdcdTVmMWZcdTYwOGNcdTYyYjVcdTYzM2FcdTYz''@;'; put 'put ''ZDBcdTY4YWZcdTZjNDBcdTc4ODdcdTc5OGVcdTdhMGJcdTdkZTBcdTgyNDdcdThhMDJcdThhZTZcdThlNDRcdTkwMTNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNDZdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE0Nl1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNDZd''@;'; put 'put ''W3NdXT0zNzM3NitzLGhbMzczNzYrc109Y1sxNDZdW3NdKTtmb3IoY1sxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYjhcdTkxMmRcdTkxZDhcdTlmMGVcdTZjZTVcdTY0NThcdTY0ZTJcdTY1NzVcdTZlZjRcdTc2ODRcdTdi''@;'; put 'put ''MWJcdTkwNjlcdTkzZDFcdTZlYmFcdTU0ZjJcdTVmYjlcdTY0YTRcdThmNGRcdThmZWRcdTkyNDRcdTUxNzhcdTU4NmJcdTU5MjlcdTVjNTVcdTVlOTdcdTZkZmJcdTdlOGZcdTc1MWNcdThjYmNcdThlZTJcdTk4NWJcdTcwYjlcdTRmMWRcdTZiYmZcdTZmYjFcdTc1MzBcdTk2ZmJcdTUxNGVc''@;'; put 'put ''dTU0MTBcdTU4MzVcdTU4NTdcdTU5YWNcdTVjNjBcdTVmOTJcdTY1OTdcdTY3NWNcdTZlMjFcdTc2N2JcdTgzZGZcdThjZWRcdTkwMTRcdTkwZmRcdTkzNGRcdTc4MjVcdTc4M2FcdTUyYWFcdTVlYTZcdTU3MWZcdTU5NzRcdTYwMTJcdTUwMTJcdTUxNWFcdTUxYWNcdWZmZmRcdTUxY2RcdTUy''@;'; put 'put ''MDBcdTU1MTBcdTU4NTRcdTU4NThcdTU5NTdcdTViOTVcdTVjZjZcdTVkOGJcdTYwYmNcdTYyOTVcdTY0MmRcdTY3NzFcdTY4NDNcdTY4YmNcdTY4ZGZcdTc2ZDdcdTZkZDhcdTZlNmZcdTZkOWJcdTcwNmZcdTcxYzhcdTVmNTNcdTc1ZDhcdTc5NzdcdTdiNDlcdTdiNTRcdTdiNTJcdTdjZDZc''@;'; put 'put ''dTdkNzFcdTUyMzBcdTg0NjNcdTg1NjlcdTg1ZTRcdThhMGVcdThiMDRcdThjNDZcdThlMGZcdTkwMDNcdTkwMGZcdTk0MTlcdTk2NzZcdTk4MmRcdTlhMzBcdTk1ZDhcdTUwY2RcdTUyZDVcdTU0MGNcdTU4MDJcdTVjMGVcdTYxYTdcdTY0OWVcdTZkMWVcdTc3YjNcdTdhZTVcdTgwZjRcdTg0''@;'; put 'put ''MDRcdTkwNTNcdTkyODVcdTVjZTBcdTlkMDdcdTUzM2ZcdTVmOTdcdTVmYjNcdTZkOWNcdTcyNzlcdTc3NjNcdTc5YmZcdTdiZTRcdTZiZDJcdTcyZWNcdThhYWRcdTY4MDNcdTZhNjFcdTUxZjhcdTdhODFcdTY5MzRcdTVjNGFcdTljZjZcdTgyZWJcdTViYzVcdTkxNDlcdTcwMWVcdTU2Nzhc''@;'; put 'put ''dTVjNmZcdTYwYzdcdTY1NjZcdTZjOGNcdThjNWFcdTkwNDFcdTk4MTNcdTU0NTFcdTY2YzdcdTkyMGRcdTU5NDhcdTkwYTNcdTUxODVcdTRlNGRcdTUxZWFcdTg1OTlcdThiMGVcdTcwNThcdTYzN2FcdTkzNGJcdTY5NjJcdTk5YjRcdTdlMDRcdTc1NzdcdTUzNTdcdTY5NjBcdThlZGZcdTk2''@;'; put 'put ''ZTNcdTZjNWRcdTRlOGNcdTVjM2NcdTVmMTBcdThmZTlcdTUzMDJcdThjZDFcdTgwODlcdTg2NzlcdTVlZmZcdTY1ZTVcdTRlNzNcdTUxNjVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNDddLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE0N11bc10uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKHlbY1sxNDddW3NdXT0zNzYzMitzLGhbMzc2MzIrc109Y1sxNDddW3NdKTtmb3IoY1sxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5ODJcdTVjM2ZcdTk3ZWVcdTRlZmJcdTU5OGFcdTVmY2RcdThhOGRcdTZmZTFcdTc5''@;'; put 'put ''YjBcdTc5NjJcdTViZTdcdTg0NzFcdTczMmJcdTcxYjFcdTVlNzRcdTVmZjVcdTYzN2JcdTY0OWFcdTcxYzNcdTdjOThcdTRlNDNcdTVlZmNcdTRlNGJcdTU3ZGNcdTU2YTJcdTYwYTlcdTZmYzNcdTdkMGRcdTgwZmRcdTgxMzNcdTgxYmZcdThmYjJcdTg5OTdcdTg2YTRcdTVkZjRcdTYyOGFc''@;'; put 'put ''dTY0YWRcdTg5ODdcdTY3NzdcdTZjZTJcdTZkM2VcdTc0MzZcdTc4MzRcdTVhNDZcdTdmNzVcdTgyYWRcdTk5YWNcdTRmZjNcdTVlYzNcdTYyZGRcdTYzOTJcdTY1NTdcdTY3NmZcdTc2YzNcdTcyNGNcdTgwY2NcdTgwYmFcdThmMjlcdTkxNGRcdTUwMGRcdTU3ZjlcdTVhOTJcdTY4ODVcdWZm''@;'; put 'put ''ZmRcdTY5NzNcdTcxNjRcdTcyZmRcdThjYjdcdTU4ZjJcdThjZTBcdTk2NmFcdTkwMTlcdTg3N2ZcdTc5ZTRcdTc3ZTdcdTg0MjlcdTRmMmZcdTUyNjVcdTUzNWFcdTYyY2RcdTY3Y2ZcdTZjY2FcdTc2N2RcdTdiOTRcdTdjOTVcdTgyMzZcdTg1ODRcdThmZWJcdTY2ZGRcdTZmMjBcdTcyMDZc''@;'; put 'put ''dTdlMWJcdTgzYWJcdTk5YzFcdTllYTZcdTUxZmRcdTdiYjFcdTc4NzJcdTdiYjhcdTgwODdcdTdiNDhcdTZhZThcdTVlNjFcdTgwOGNcdTc1NTFcdTc1NjBcdTUxNmJcdTkyNjJcdTZlOGNcdTc2N2FcdTkxOTdcdTlhZWFcdTRmMTBcdTdmNzBcdTYyOWNcdTdiNGZcdTk1YTVcdTljZTlcdTU2''@;'; put 'put ''N2FcdTU4NTlcdTg2ZTRcdTk2YmNcdTRmMzRcdTUyMjRcdTUzNGFcdTUzY2RcdTUzZGJcdTVlMDZcdTY0MmNcdTY1OTFcdTY3N2ZcdTZjM2VcdTZjNGVcdTcyNDhcdTcyYWZcdTczZWRcdTc1NTRcdTdlNDFcdTgyMmNcdTg1ZTlcdThjYTlcdTdiYzRcdTkxYzZcdTcxNjlcdTk4MTJcdTk4ZWZc''@;'; put 'put ''dTYzM2RcdTY2NjlcdTc1NmFcdTc2ZTRcdTc4ZDBcdTg1NDNcdTg2ZWVcdTUzMmFcdTUzNTFcdTU0MjZcdTU5ODNcdTVlODdcdTVmN2NcdTYwYjJcdTYyNDlcdTYyNzlcdTYyYWJcdTY1OTBcdTZiZDRcdTZjY2NcdTc1YjJcdTc2YWVcdTc4OTFcdTc5ZDhcdTdkY2JcdTdmNzdcdTgwYTVcdTg4''@;'; put 'put ''YWJcdThhYjlcdThjYmJcdTkwN2ZcdTk3NWVcdTk4ZGJcdTZhMGJcdTdjMzhcdTUwOTlcdTVjM2VcdTVmYWVcdTY3ODdcdTZiZDhcdTc0MzVcdTc3MDlcdTdmOGVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNDhdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE0OF1bc10u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKHlbY1sxNDhdW3NdXT0zNzg4OCtzLGhbMzc4ODgrc109Y1sxNDhdW3NdKTtmb3IoY1sxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmM2JcdTY3Y2FcdTdhMTdcdTUzMzlcdTc1OGJcdTlhZWRcdTVm''@;'; put 'put ''NjZcdTgxOWRcdTgzZjFcdTgwOThcdTVmM2NcdTVmYzVcdTc1NjJcdTdiNDZcdTkwM2NcdTY4NjdcdTU5ZWJcdTVhOWJcdTdkMTBcdTc2N2VcdThiMmNcdTRmZjVcdTVmNmFcdTZhMTlcdTZjMzdcdTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThhNTVcdThjNzlcdTVlZGZcdTYzY2ZcdTc1YzVc''@;'; put 'put ''dTc5ZDJcdTgyZDdcdTkzMjhcdTkyZjJcdTg0OWNcdTg2ZWRcdTljMmRcdTU0YzFcdTVmNmNcdTY1OGNcdTZkNWNcdTcwMTVcdThjYTdcdThjZDNcdTk4M2JcdTY1NGZcdTc0ZjZcdTRlMGRcdTRlZDhcdTU3ZTBcdTU5MmJcdTVhNjZcdTViY2NcdTUxYThcdTVlMDNcdTVlOWNcdTYwMTZcdTYy''@;'; put 'put ''NzZcdTY1NzdcdWZmZmRcdTY1YTdcdTY2NmVcdTZkNmVcdTcyMzZcdTdiMjZcdTgxNTBcdTgxOWFcdTgyOTlcdThiNWNcdThjYTBcdThjZTZcdThkNzRcdTk2MWNcdTk2NDRcdTRmYWVcdTY0YWJcdTZiNjZcdTgyMWVcdTg0NjFcdTg1NmFcdTkwZThcdTVjMDFcdTY5NTNcdTk4YThcdTg0N2Fc''@;'; put 'put ''dTg1NTdcdTRmMGZcdTUyNmZcdTVmYTlcdTVlNDVcdTY3MGRcdTc5OGZcdTgxNzlcdTg5MDdcdTg5ODZcdTZkZjVcdTVmMTdcdTYyNTVcdTZjYjhcdTRlY2ZcdTcyNjlcdTliOTJcdTUyMDZcdTU0M2JcdTU2NzRcdTU4YjNcdTYxYTRcdTYyNmVcdTcxMWFcdTU5NmVcdTdjODlcdTdjZGVcdTdk''@;'; put 'put ''MWJcdTk2ZjBcdTY1ODdcdTgwNWVcdTRlMTlcdTRmNzVcdTUxNzVcdTU4NDBcdTVlNjNcdTVlNzNcdTVmMGFcdTY3YzRcdTRlMjZcdTg1M2RcdTk1ODlcdTk2NWJcdTdjNzNcdTk4MDFcdTUwZmJcdTU4YzFcdTc2NTZcdTc4YTdcdTUyMjVcdTc3YTVcdTg1MTFcdTdiODZcdTUwNGZcdTU5MDlc''@;'; put 'put ''dTcyNDdcdTdiYzdcdTdkZThcdThmYmFcdThmZDRcdTkwNGRcdTRmYmZcdTUyYzlcdTVhMjlcdTVmMDFcdTk3YWRcdTRmZGRcdTgyMTdcdTkyZWFcdTU3MDNcdTYzNTVcdTZiNjlcdTc1MmJcdTg4ZGNcdThmMTRcdTdhNDJcdTUyZGZcdTU4OTNcdTYxNTVcdTYyMGFcdTY2YWVcdTZiY2RcdTdj''@;'; put 'put ''M2ZcdTgzZTlcdTUwMjNcdTRmZjhcdTUzMDVcdTU0NDZcdTU4MzFcdTU5NDlcdTViOWRcdTVjZjBcdTVjZWZcdTVkMjlcdTVlOTZcdTYyYjFcdTYzNjdcdTY1M2VcdTY1YjlcdTY3MGJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNDldLmxlbmd0aDsrK3MpNjU1MzMh''@;'; put 'put ''PT1jWzE0OV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNDldW3NdXT0zODE0NCtzLGhbMzgxNDQrc109Y1sxNDldW3NdKTtmb3IoY1sxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjZDVcdTZjZTFcdTcwZjlcdTc4MzJcdTdl''@;'; put 'put ''MmJcdTgwZGVcdTgyYjNcdTg0MGNcdTg0ZWNcdTg3MDJcdTg5MTJcdThhMmFcdThjNGFcdTkwYTZcdTkyZDJcdTk4ZmRcdTljZjNcdTlkNmNcdTRlNGZcdTRlYTFcdTUwOGRcdTUyNTZcdTU3NGFcdTU5YThcdTVlM2RcdTVmZDhcdTVmZDlcdTYyM2ZcdTY2YjRcdTY3MWJcdTY3ZDBcdTY4ZDJc''@;'; put 'put ''dTUxOTJcdTdkMjFcdTgwYWFcdTgxYThcdThiMDBcdThjOGNcdThjYmZcdTkyN2VcdTk2MzJcdTU0MjBcdTk4MmNcdTUzMTdcdTUwZDVcdTUzNWNcdTU4YThcdTY0YjJcdTY3MzRcdTcyNjdcdTc3NjZcdTdhNDZcdTkxZTZcdTUyYzNcdTZjYTFcdTZiODZcdTU4MDBcdTVlNGNcdTU5NTRcdTY3''@;'; put 'put ''MmNcdTdmZmJcdTUxZTFcdTc2YzZcdWZmZmRcdTY0NjlcdTc4ZThcdTliNTRcdTllYmJcdTU3Y2JcdTU5YjlcdTY2MjdcdTY3OWFcdTZiY2VcdTU0ZTlcdTY5ZDlcdTVlNTVcdTgxOWNcdTY3OTVcdTliYWFcdTY3ZmVcdTljNTJcdTY4NWRcdTRlYTZcdTRmZTNcdTUzYzhcdTYyYjlcdTY3MmJc''@;'; put 'put ''dTZjYWJcdThmYzRcdTRmYWRcdTdlNmRcdTllYmZcdTRlMDdcdTYxNjJcdTZlODBcdTZmMmJcdTg1MTNcdTU0NzNcdTY3MmFcdTliNDVcdTVkZjNcdTdiOTVcdTVjYWNcdTViYzZcdTg3MWNcdTZlNGFcdTg0ZDFcdTdhMTRcdTgxMDhcdTU5OTlcdTdjOGRcdTZjMTFcdTc3MjBcdTUyZDlcdTU5''@;'; put 'put ''MjJcdTcxMjFcdTcyNWZcdTc3ZGJcdTk3MjdcdTlkNjFcdTY5MGJcdTVhN2ZcdTVhMThcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTc2ZGZcdThmZjdcdTkyOThcdTljZjRcdTU5ZWFcdTcyNWRcdTZlYzVcdTUxNGRcdTY4YzlcdTdkYmZcdTdkZWNcdTk3NjJcdTllYmFcdTY0NzhcdTZhMjFc''@;'; put 'put ''dTgzMDJcdTU5ODRcdTViNWZcdTZiZGJcdTczMWJcdTc2ZjJcdTdkYjJcdTgwMTdcdTg0OTlcdTUxMzJcdTY3MjhcdTllZDlcdTc2ZWVcdTY3NjJcdTUyZmZcdTk5MDVcdTVjMjRcdTYyM2JcdTdjN2VcdThjYjBcdTU1NGZcdTYwYjZcdTdkMGJcdTk1ODBcdTUzMDFcdTRlNWZcdTUxYjZcdTU5''@;'; put 'put ''MWNcdTcyM2FcdTgwMzZcdTkxY2VcdTVmMjVcdTc3ZTJcdTUzODRcdTVmNzlcdTdkMDRcdTg1YWNcdThhMzNcdThlOGRcdTk3NTZcdTY3ZjNcdTg1YWVcdTk0NTNcdTYxMDlcdTYxMDhcdTZjYjlcdTc2NTJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNTBdLmxlbmd0''@;'; put 'put ''aDsrK3MpNjU1MzMhPT1jWzE1MF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNTBdW3NdXT0zODQwMCtzLGhbMzg0MDArc109Y1sxNTBdW3NdKTtmb3IoY1sxNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhZWRcdThmMzhcdTU1''@;'; put 'put ''MmZcdTRmNTFcdTUxMmFcdTUyYzdcdTUzY2JcdTViYTVcdTVlN2RcdTYwYTBcdTYxODJcdTYzZDZcdTY3MDlcdTY3ZGFcdTZlNjdcdTZkOGNcdTczMzZcdTczMzdcdTc1MzFcdTc5NTBcdTg4ZDVcdThhOThcdTkwNGFcdTkwOTFcdTkwZjVcdTk2YzRcdTg3OGRcdTU5MTVcdTRlODhcdTRmNTlc''@;'; put 'put ''dTRlMGVcdThhODlcdThmM2ZcdTk4MTBcdTUwYWRcdTVlN2NcdTU5OTZcdTViYjlcdTVlYjhcdTYzZGFcdTYzZmFcdTY0YzFcdTY2ZGNcdTY5NGFcdTY5ZDhcdTZkMGJcdTZlYjZcdTcxOTRcdTc1MjhcdTdhYWZcdTdmOGFcdTgwMDBcdTg0NDlcdTg0YzlcdTg5ODFcdThiMjFcdThlMGFcdTkw''@;'; put 'put ''NjVcdTk2N2RcdTk5MGFcdTYxN2VcdTYyOTFcdTZiMzJcdWZmZmRcdTZjODNcdTZkNzRcdTdmY2NcdTdmZmNcdTZkYzBcdTdmODVcdTg3YmFcdTg4ZjhcdTY3NjVcdTgzYjFcdTk4M2NcdTk2ZjdcdTZkMWJcdTdkNjFcdTg0M2RcdTkxNmFcdTRlNzFcdTUzNzVcdTVkNTBcdTZiMDRcdTZmZWJc''@;'; put 'put ''dTg1Y2RcdTg2MmRcdTg5YTdcdTUyMjlcdTU0MGZcdTVjNjVcdTY3NGVcdTY4YThcdTc0MDZcdTc0ODNcdTc1ZTJcdTg4Y2ZcdTg4ZTFcdTkxY2NcdTk2ZTJcdTk2NzhcdTVmOGJcdTczODdcdTdhY2JcdTg0NGVcdTYzYTBcdTc1NjVcdTUyODlcdTZkNDFcdTZlOWNcdTc0MDlcdTc1NTlcdTc4''@;'; put 'put ''NmJcdTdjOTJcdTk2ODZcdTdhZGNcdTlmOGRcdTRmYjZcdTYxNmVcdTY1YzVcdTg2NWNcdTRlODZcdTRlYWVcdTUwZGFcdTRlMjFcdTUxY2NcdTViZWVcdTY1OTlcdTY4ODFcdTZkYmNcdTczMWZcdTc2NDJcdTc3YWRcdTdhMWNcdTdjZTdcdTgyNmZcdThhZDJcdTkwN2NcdTkxY2ZcdTk2NzVc''@;'; put 'put ''dTk4MThcdTUyOWJcdTdkZDFcdTUwMmJcdTUzOThcdTY3OTdcdTZkY2JcdTcxZDBcdTc0MzNcdTgxZThcdThmMmFcdTk2YTNcdTljNTdcdTllOWZcdTc0NjBcdTU4NDFcdTZkOTlcdTdkMmZcdTk4NWVcdTRlZTRcdTRmMzZcdTRmOGJcdTUxYjdcdTUyYjFcdTVkYmFcdTYwMWNcdTczYjJcdTc5''@;'; put 'put ''M2NcdTgyZDNcdTkyMzRcdTk2YjdcdTk2ZjZcdTk3MGFcdTllOTdcdTlmNjJcdTY2YTZcdTZiNzRcdTUyMTdcdTUyYTNcdTcwYzhcdTg4YzJcdTVlYzlcdTYwNGJcdTYxOTBcdTZmMjNcdTcxNDlcdTdjM2VcdTdkZjRcdTgwNmZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9''@;'; put 'put ''Y1sxNTFdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE1MV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNTFdW3NdXT0zODY1NitzLGhbMzg2NTYrc109Y1sxNTFdW3NdKTtmb3IoY1sxNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg0''@;'; put 'put ''ZWVcdTkwMjNcdTkzMmNcdTU0NDJcdTliNmZcdTZhZDNcdTcwODlcdThjYzJcdThkZWZcdTk3MzJcdTUyYjRcdTVhNDFcdTVlY2FcdTVmMDRcdTY3MTdcdTY5N2NcdTY5OTRcdTZkNmFcdTZmMGZcdTcyNjJcdTcyZmNcdTdiZWRcdTgwMDFcdTgwN2VcdTg3NGJcdTkwY2VcdTUxNmRcdTllOTNc''@;'; put 'put ''dTc5ODRcdTgwOGJcdTkzMzJcdThhZDZcdTUwMmRcdTU0OGNcdThhNzFcdTZiNmFcdThjYzRcdTgxMDdcdTYwZDFcdTY3YTBcdTlkZjJcdTRlOTlcdTRlOThcdTljMTBcdThhNmJcdTg1YzFcdTg1NjhcdTY5MDBcdTZlN2VcdTc4OTdcdTgxNTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMGNcdTRlMTBcdTRlMTVcdTRlMmFcdTRlMzFcdTRlMzZcdTRlM2NcdTRlM2ZcdTRlNDJcdTRlNTZcdTRlNThcdTRlODJcdTRlODVcdThjNmJcdTRlOGFcdTgy''@;'; put 'put ''MTJcdTVmMGRcdTRlOGVcdTRlOWVcdTRlOWZcdTRlYTBcdTRlYTJcdTRlYjBcdTRlYjNcdTRlYjZcdTRlY2VcdTRlY2RcdTRlYzRcdTRlYzZcdTRlYzJcdTRlZDdcdTRlZGVcdTRlZWRcdTRlZGZcdTRlZjdcdTRmMDlcdTRmNWFcdTRmMzBcdTRmNWJcdTRmNWRcdTRmNTdcdTRmNDdcdTRmNzZc''@;'; put 'put ''dTRmODhcdTRmOGZcdTRmOThcdTRmN2JcdTRmNjlcdTRmNzBcdTRmOTFcdTRmNmZcdTRmODZcdTRmOTZcdTUxMThcdTRmZDRcdTRmZGZcdTRmY2VcdTRmZDhcdTRmZGJcdTRmZDFcdTRmZGFcdTRmZDBcdTRmZTRcdTRmZTVcdTUwMWFcdTUwMjhcdTUwMTRcdTUwMmFcdTUwMjVcdTUwMDVcdTRm''@;'; put 'put ''MWNcdTRmZjZcdTUwMjFcdTUwMjlcdTUwMmNcdTRmZmVcdTRmZWZcdTUwMTFcdTUwMDZcdTUwNDNcdTUwNDdcdTY3MDNcdTUwNTVcdTUwNTBcdTUwNDhcdTUwNWFcdTUwNTZcdTUwNmNcdTUwNzhcdTUwODBcdTUwOWFcdTUwODVcdTUwYjRcdTUwYjJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxzPTA7cyE9Y1sxNTJdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE1Ml1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNTJdW3NdXT0zODkxMitzLGhbMzg5MTIrc109Y1sxNTJdW3NdKTtmb3IoY1sxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTUwYzlcdTUwY2FcdTUwYjNcdTUwYzJcdTUwZDZcdTUwZGVcdTUwZTVcdTUwZWRcdTUwZTNcdTUwZWVcdTUwZjlcdTUwZjVcdTUxMDlcdTUxMDFcdTUxMDJcdTUxMTZcdTUxMTVcdTUxMTRcdTUxMWFcdTUxMjFcdTUxM2FcdTUxMzdcdTUxM2NcdTUxM2JcdTUxM2ZcdTUxNDBc''@;'; put 'put ''dTUxNTJcdTUxNGNcdTUxNTRcdTUxNjJcdTdhZjhcdTUxNjlcdTUxNmFcdTUxNmVcdTUxODBcdTUxODJcdTU2ZDhcdTUxOGNcdTUxODlcdTUxOGZcdTUxOTFcdTUxOTNcdTUxOTVcdTUxOTZcdTUxYTRcdTUxYTZcdTUxYTJcdTUxYTlcdTUxYWFcdTUxYWJcdTUxYjNcdTUxYjFcdTUxYjJcdTUx''@;'; put 'put ''YjBcdTUxYjVcdTUxYmRcdTUxYzVcdTUxYzlcdTUxZGJcdTUxZTBcdTg2NTVcdTUxZTlcdTUxZWRcdWZmZmRcdTUxZjBcdTUxZjVcdTUxZmVcdTUyMDRcdTUyMGJcdTUyMTRcdTUyMGVcdTUyMjdcdTUyMmFcdTUyMmVcdTUyMzNcdTUyMzlcdTUyNGZcdTUyNDRcdTUyNGJcdTUyNGNcdTUyNWVc''@;'; put 'put ''dTUyNTRcdTUyNmFcdTUyNzRcdTUyNjlcdTUyNzNcdTUyN2ZcdTUyN2RcdTUyOGRcdTUyOTRcdTUyOTJcdTUyNzFcdTUyODhcdTUyOTFcdThmYThcdThmYTdcdTUyYWNcdTUyYWRcdTUyYmNcdTUyYjVcdTUyYzFcdTUyY2RcdTUyZDdcdTUyZGVcdTUyZTNcdTUyZTZcdTk4ZWRcdTUyZTBcdTUy''@;'; put 'put ''ZjNcdTUyZjVcdTUyZjhcdTUyZjlcdTUzMDZcdTUzMDhcdTc1MzhcdTUzMGRcdTUzMTBcdTUzMGZcdTUzMTVcdTUzMWFcdTUzMjNcdTUzMmZcdTUzMzFcdTUzMzNcdTUzMzhcdTUzNDBcdTUzNDZcdTUzNDVcdTRlMTdcdTUzNDlcdTUzNGRcdTUxZDZcdTUzNWVcdTUzNjlcdTUzNmVcdTU5MThc''@;'; put 'put ''dTUzN2JcdTUzNzdcdTUzODJcdTUzOTZcdTUzYTBcdTUzYTZcdTUzYTVcdTUzYWVcdTUzYjBcdTUzYjZcdTUzYzNcdTdjMTJcdTk2ZDlcdTUzZGZcdTY2ZmNcdTcxZWVcdTUzZWVcdTUzZThcdTUzZWRcdTUzZmFcdTU0MDFcdTU0M2RcdTU0NDBcdTU0MmNcdTU0MmRcdTU0M2NcdTU0MmVcdTU0''@;'; put 'put ''MzZcdTU0MjlcdTU0MWRcdTU0NGVcdTU0OGZcdTU0NzVcdTU0OGVcdTU0NWZcdTU0NzFcdTU0NzdcdTU0NzBcdTU0OTJcdTU0N2JcdTU0ODBcdTU0NzZcdTU0ODRcdTU0OTBcdTU0ODZcdTU0YzdcdTU0YTJcdTU0YjhcdTU0YTVcdTU0YWNcdTU0YzRcdTU0YzhcdTU0YThcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNTNdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE1M11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNTNdW3NdXT0zOTE2OCtzLGhbMzkxNjgrc109Y1sxNTNdW3NdKTtmb3IoY1sxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YWJcdTU0YzJcdTU0YTRcdTU0YmVcdTU0YmNcdTU0ZDhcdTU0ZTVcdTU0ZTZcdTU1MGZcdTU1MTRcdTU0ZmRcdTU0ZWVcdTU0ZWRcdTU0ZmFcdTU0ZTJcdTU1MzlcdTU1NDBcdTU1NjNcdTU1NGNcdTU1MmVcdTU1NWNcdTU1NDVcdTU1NTZcdTU1NTdc''@;'; put 'put ''dTU1MzhcdTU1MzNcdTU1NWRcdTU1OTlcdTU1ODBcdTU0YWZcdTU1OGFcdTU1OWZcdTU1N2JcdTU1N2VcdTU1OThcdTU1OWVcdTU1YWVcdTU1N2NcdTU1ODNcdTU1YTlcdTU1ODdcdTU1YThcdTU1ZGFcdTU1YzVcdTU1ZGZcdTU1YzRcdTU1ZGNcdTU1ZTRcdTU1ZDRcdTU2MTRcdTU1ZjdcdTU2''@;'; put 'put ''MTZcdTU1ZmVcdTU1ZmRcdTU2MWJcdTU1ZjlcdTU2NGVcdTU2NTBcdTcxZGZcdTU2MzRcdTU2MzZcdTU2MzJcdTU2MzhcdWZmZmRcdTU2NmJcdTU2NjRcdTU2MmZcdTU2NmNcdTU2NmFcdTU2ODZcdTU2ODBcdTU2OGFcdTU2YTBcdTU2OTRcdTU2OGZcdTU2YTVcdTU2YWVcdTU2YjZcdTU2YjRc''@;'; put 'put ''dTU2YzJcdTU2YmNcdTU2YzFcdTU2YzNcdTU2YzBcdTU2YzhcdTU2Y2VcdTU2ZDFcdTU2ZDNcdTU2ZDdcdTU2ZWVcdTU2ZjlcdTU3MDBcdTU2ZmZcdTU3MDRcdTU3MDlcdTU3MDhcdTU3MGJcdTU3MGRcdTU3MTNcdTU3MThcdTU3MTZcdTU1YzdcdTU3MWNcdTU3MjZcdTU3MzdcdTU3MzhcdTU3''@;'; put 'put ''NGVcdTU3M2JcdTU3NDBcdTU3NGZcdTU3NjlcdTU3YzBcdTU3ODhcdTU3NjFcdTU3N2ZcdTU3ODlcdTU3OTNcdTU3YTBcdTU3YjNcdTU3YTRcdTU3YWFcdTU3YjBcdTU3YzNcdTU3YzZcdTU3ZDRcdTU3ZDJcdTU3ZDNcdTU4MGFcdTU3ZDZcdTU3ZTNcdTU4MGJcdTU4MTlcdTU4MWRcdTU4NzJc''@;'; put 'put ''dTU4MjFcdTU4NjJcdTU4NGJcdTU4NzBcdTZiYzBcdTU4NTJcdTU4M2RcdTU4NzlcdTU4ODVcdTU4YjlcdTU4OWZcdTU4YWJcdTU4YmFcdTU4ZGVcdTU4YmJcdTU4YjhcdTU4YWVcdTU4YzVcdTU4ZDNcdTU4ZDFcdTU4ZDdcdTU4ZDlcdTU4ZDhcdTU4ZTVcdTU4ZGNcdTU4ZTRcdTU4ZGZcdTU4''@;'; put 'put ''ZWZcdTU4ZmFcdTU4ZjlcdTU4ZmJcdTU4ZmNcdTU4ZmRcdTU5MDJcdTU5MGFcdTU5MTBcdTU5MWJcdTY4YTZcdTU5MjVcdTU5MmNcdTU5MmRcdTU5MzJcdTU5MzhcdTU5M2VcdTdhZDJcdTU5NTVcdTU5NTBcdTU5NGVcdTU5NWFcdTU5NThcdTU5NjJcdTU5NjBcdTU5NjdcdTU5NmNcdTU5Njlc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNTRdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE1NF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNTRdW3NdXT0zOTQyNCtzLGhbMzk0MjQrc109Y1sxNTRdW3NdKTtmb3IoY1sxNTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5NzhcdTU5ODFcdTU5OWRcdTRmNWVcdTRmYWJcdTU5YTNcdTU5YjJcdTU5YzZcdTU5ZThcdTU5ZGNcdTU5OGRcdTU5ZDlcdTU5ZGFcdTVhMjVcdTVhMWZcdTVhMTFcdTVhMWNcdTVhMDlcdTVhMWFcdTVhNDBcdTVhNmNcdTVhNDlc''@;'; put 'put ''dTVhMzVcdTVhMzZcdTVhNjJcdTVhNmFcdTVhOWFcdTVhYmNcdTVhYmVcdTVhY2JcdTVhYzJcdTVhYmRcdTVhZTNcdTVhZDdcdTVhZTZcdTVhZTlcdTVhZDZcdTVhZmFcdTVhZmJcdTViMGNcdTViMGJcdTViMTZcdTViMzJcdTVhZDBcdTViMmFcdTViMzZcdTViM2VcdTViNDNcdTViNDVcdTVi''@;'; put 'put ''NDBcdTViNTFcdTViNTVcdTViNWFcdTViNWJcdTViNjVcdTViNjlcdTViNzBcdTViNzNcdTViNzVcdTViNzhcdTY1ODhcdTViN2FcdTViODBcdWZmZmRcdTViODNcdTViYTZcdTViYjhcdTViYzNcdTViYzdcdTViYzlcdTViZDRcdTViZDBcdTViZTRcdTViZTZcdTViZTJcdTViZGVcdTViZTVc''@;'; put 'put ''dTViZWJcdTViZjBcdTViZjZcdTViZjNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGRcdTVjMTNcdTVjMjBcdTVjMjJcdTVjMjhcdTVjMzhcdTVjMzlcdTVjNDFcdTVjNDZcdTVjNGVcdTVjNTNcdTVjNTBcdTVjNGZcdTViNzFcdTVjNmNcdTVjNmVcdTRlNjJcdTVjNzZcdTVjNzlcdTVjOGNcdTVj''@;'; put 'put ''OTFcdTVjOTRcdTU5OWJcdTVjYWJcdTVjYmJcdTVjYjZcdTVjYmNcdTVjYjdcdTVjYzVcdTVjYmVcdTVjYzdcdTVjZDlcdTVjZTlcdTVjZmRcdTVjZmFcdTVjZWRcdTVkOGNcdTVjZWFcdTVkMGJcdTVkMTVcdTVkMTdcdTVkNWNcdTVkMWZcdTVkMWJcdTVkMTFcdTVkMTRcdTVkMjJcdTVkMWFc''@;'; put 'put ''dTVkMTlcdTVkMThcdTVkNGNcdTVkNTJcdTVkNGVcdTVkNGJcdTVkNmNcdTVkNzNcdTVkNzZcdTVkODdcdTVkODRcdTVkODJcdTVkYTJcdTVkOWRcdTVkYWNcdTVkYWVcdTVkYmRcdTVkOTBcdTVkYjdcdTVkYmNcdTVkYzlcdTVkY2RcdTVkZDNcdTVkZDJcdTVkZDZcdTVkZGJcdTVkZWJcdTVk''@;'; put 'put ''ZjJcdTVkZjVcdTVlMGJcdTVlMWFcdTVlMTlcdTVlMTFcdTVlMWJcdTVlMzZcdTVlMzdcdTVlNDRcdTVlNDNcdTVlNDBcdTVlNGVcdTVlNTdcdTVlNTRcdTVlNWZcdTVlNjJcdTVlNjRcdTVlNDdcdTVlNzVcdTVlNzZcdTVlN2FcdTllYmNcdTVlN2ZcdTVlYTBcdTVlYzFcdTVlYzJcdTVlYzhc''@;'; put 'put ''dTVlZDBcdTVlY2ZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNTVdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE1NV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNTVdW3NdXT0zOTY4MCtzLGhbMzk2ODArc109Y1sxNTVdW3NdKTtmb3IoY1sxNTZdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlZDZcdTVlZTNcdTVlZGRcdTVlZGFcdTVlZGJcdTVlZTJcdTVlZTFcdTVlZThcdTVlZTlcdTVlZWNcdTVlZjFcdTVlZjNcdTVlZjBcdTVlZjRcdTVlZjhcdTVlZmVcdTVmMDNcdTVmMDlcdTVmNWRcdTVmNWNc''@;'; put 'put ''dTVmMGJcdTVmMTFcdTVmMTZcdTVmMjlcdTVmMmRcdTVmMzhcdTVmNDFcdTVmNDhcdTVmNGNcdTVmNGVcdTVmMmZcdTVmNTFcdTVmNTZcdTVmNTdcdTVmNTlcdTVmNjFcdTVmNmRcdTVmNzNcdTVmNzdcdTVmODNcdTVmODJcdTVmN2ZcdTVmOGFcdTVmODhcdTVmOTFcdTVmODdcdTVmOWVcdTVm''@;'; put 'put ''OTlcdTVmOThcdTVmYTBcdTVmYThcdTVmYWRcdTVmYmNcdTVmZDZcdTVmZmJcdTVmZTRcdTVmZjhcdTVmZjFcdTVmZGRcdTYwYjNcdTVmZmZcdTYwMjFcdTYwNjBcdWZmZmRcdTYwMTlcdTYwMTBcdTYwMjlcdTYwMGVcdTYwMzFcdTYwMWJcdTYwMTVcdTYwMmJcdTYwMjZcdTYwMGZcdTYwM2Fc''@;'; put 'put ''dTYwNWFcdTYwNDFcdTYwNmFcdTYwNzdcdTYwNWZcdTYwNGFcdTYwNDZcdTYwNGRcdTYwNjNcdTYwNDNcdTYwNjRcdTYwNDJcdTYwNmNcdTYwNmJcdTYwNTlcdTYwODFcdTYwOGRcdTYwZTdcdTYwODNcdTYwOWFcdTYwODRcdTYwOWJcdTYwOTZcdTYwOTdcdTYwOTJcdTYwYTdcdTYwOGJcdTYw''@;'; put 'put ''ZTFcdTYwYjhcdTYwZTBcdTYwZDNcdTYwYjRcdTVmZjBcdTYwYmRcdTYwYzZcdTYwYjVcdTYwZDhcdTYxNGRcdTYxMTVcdTYxMDZcdTYwZjZcdTYwZjdcdTYxMDBcdTYwZjRcdTYwZmFcdTYxMDNcdTYxMjFcdTYwZmJcdTYwZjFcdTYxMGRcdTYxMGVcdTYxNDdcdTYxM2VcdTYxMjhcdTYxMjdc''@;'; put 'put ''dTYxNGFcdTYxM2ZcdTYxM2NcdTYxMmNcdTYxMzRcdTYxM2RcdTYxNDJcdTYxNDRcdTYxNzNcdTYxNzdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNmJcdTYxNzRcdTYxNmZcdTYxNjVcdTYxNzFcdTYxNWZcdTYxNWRcdTYxNTNcdTYxNzVcdTYxOTlcdTYxOTZcdTYxODdcdTYxYWNcdTYxOTRcdTYx''@;'; put 'put ''OWFcdTYxOGFcdTYxOTFcdTYxYWJcdTYxYWVcdTYxY2NcdTYxY2FcdTYxYzlcdTYxZjdcdTYxYzhcdTYxYzNcdTYxYzZcdTYxYmFcdTYxY2JcdTdmNzlcdTYxY2RcdTYxZTZcdTYxZTNcdTYxZjZcdTYxZmFcdTYxZjRcdTYxZmZcdTYxZmRcdTYxZmNcdTYxZmVcdTYyMDBcdTYyMDhcdTYyMDlc''@;'; put 'put ''dTYyMGRcdTYyMGNcdTYyMTRcdTYyMWJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNTZdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE1Nl1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNTZdW3NdXT0zOTkzNitzLGhbMzk5MzYrc109Y1sxNTZdW3NdKTtmb3IoY1sxNTdd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyMWVcdTYyMjFcdTYyMmFcdTYyMmVcdTYyMzBcdTYyMzJcdTYyMzNcdTYyNDFcdTYyNGVcdTYyNWVcdTYyNjNcdTYyNWJcdTYyNjBcdTYyNjhcdTYyN2NcdTYyODJcdTYyODlcdTYyN2Vc''@;'; put 'put ''dTYyOTJcdTYyOTNcdTYyOTZcdTYyZDRcdTYyODNcdTYyOTRcdTYyZDdcdTYyZDFcdTYyYmJcdTYyY2ZcdTYyZmZcdTYyYzZcdTY0ZDRcdTYyYzhcdTYyZGNcdTYyY2NcdTYyY2FcdTYyYzJcdTYyYzdcdTYyOWJcdTYyYzlcdTYzMGNcdTYyZWVcdTYyZjFcdTYzMjdcdTYzMDJcdTYzMDhcdTYy''@;'; put 'put ''ZWZcdTYyZjVcdTYzNTBcdTYzM2VcdTYzNGRcdTY0MWNcdTYzNGZcdTYzOTZcdTYzOGVcdTYzODBcdTYzYWJcdTYzNzZcdTYzYTNcdTYzOGZcdTYzODlcdTYzOWZcdTYzYjVcdTYzNmJcdWZmZmRcdTYzNjlcdTYzYmVcdTYzZTlcdTYzYzBcdTYzYzZcdTYzZTNcdTYzYzlcdTYzZDJcdTYzZjZc''@;'; put 'put ''dTYzYzRcdTY0MTZcdTY0MzRcdTY0MDZcdTY0MTNcdTY0MjZcdTY0MzZcdTY1MWRcdTY0MTdcdTY0MjhcdTY0MGZcdTY0NjdcdTY0NmZcdTY0NzZcdTY0NGVcdTY1MmFcdTY0OTVcdTY0OTNcdTY0YTVcdTY0YTlcdTY0ODhcdTY0YmNcdTY0ZGFcdTY0ZDJcdTY0YzVcdTY0YzdcdTY0YmJcdTY0''@;'; put 'put ''ZDhcdTY0YzJcdTY0ZjFcdTY0ZTdcdTgyMDlcdTY0ZTBcdTY0ZTFcdTYyYWNcdTY0ZTNcdTY0ZWZcdTY1MmNcdTY0ZjZcdTY0ZjRcdTY0ZjJcdTY0ZmFcdTY1MDBcdTY0ZmRcdTY1MThcdTY1MWNcdTY1MDVcdTY1MjRcdTY1MjNcdTY1MmJcdTY1MzRcdTY1MzVcdTY1MzdcdTY1MzZcdTY1Mzhc''@;'; put 'put ''dTc1NGJcdTY1NDhcdTY1NTZcdTY1NTVcdTY1NGRcdTY1NThcdTY1NWVcdTY1NWRcdTY1NzJcdTY1NzhcdTY1ODJcdTY1ODNcdThiOGFcdTY1OWJcdTY1OWZcdTY1YWJcdTY1YjdcdTY1YzNcdTY1YzZcdTY1YzFcdTY1YzRcdTY1Y2NcdTY1ZDJcdTY1ZGJcdTY1ZDlcdTY1ZTBcdTY1ZTFcdTY1''@;'; put 'put ''ZjFcdTY3NzJcdTY2MGFcdTY2MDNcdTY1ZmJcdTY3NzNcdTY2MzVcdTY2MzZcdTY2MzRcdTY2MWNcdTY2NGZcdTY2NDRcdTY2NDlcdTY2NDFcdTY2NWVcdTY2NWRcdTY2NjRcdTY2NjdcdTY2NjhcdTY2NWZcdTY2NjJcdTY2NzBcdTY2ODNcdTY2ODhcdTY2OGVcdTY2ODlcdTY2ODRcdTY2OThc''@;'; put 'put ''dTY2OWRcdTY2YzFcdTY2YjlcdTY2YzlcdTY2YmVcdTY2YmNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNTddLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE1N11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNTddW3NdXT00MDE5MitzLGhbNDAxOTIrc109Y1sxNTddW3Nd''@;'; put 'put ''KTtmb3IoY1sxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY2YzRcdTY2YjhcdTY2ZDZcdTY2ZGFcdTY2ZTBcdTY2M2ZcdTY2ZTZcdTY2ZTlcdTY2ZjBcdTY2ZjVcdTY2ZjdcdTY3MGZcdTY3MTZcdTY3MWVcdTY3MjZcdTY3Mjdc''@;'; put 'put ''dTk3MzhcdTY3MmVcdTY3M2ZcdTY3MzZcdTY3NDFcdTY3MzhcdTY3MzdcdTY3NDZcdTY3NWVcdTY3NjBcdTY3NTlcdTY3NjNcdTY3NjRcdTY3ODlcdTY3NzBcdTY3YTlcdTY3N2NcdTY3NmFcdTY3OGNcdTY3OGJcdTY3YTZcdTY3YTFcdTY3ODVcdTY3YjdcdTY3ZWZcdTY3YjRcdTY3ZWNcdTY3''@;'; put 'put ''YjNcdTY3ZTlcdTY3YjhcdTY3ZTRcdTY3ZGVcdTY3ZGRcdTY3ZTJcdTY3ZWVcdTY3YjlcdTY3Y2VcdTY3YzZcdTY3ZTdcdTZhOWNcdTY4MWVcdTY4NDZcdTY4MjlcdTY4NDBcdTY4NGRcdTY4MzJcdTY4NGVcdWZmZmRcdTY4YjNcdTY4MmJcdTY4NTlcdTY4NjNcdTY4NzdcdTY4N2ZcdTY4OWZc''@;'; put 'put ''dTY4OGZcdTY4YWRcdTY4OTRcdTY4OWRcdTY4OWJcdTY4ODNcdTZhYWVcdTY4YjlcdTY4NzRcdTY4YjVcdTY4YTBcdTY4YmFcdTY5MGZcdTY4OGRcdTY4N2VcdTY5MDFcdTY4Y2FcdTY5MDhcdTY4ZDhcdTY5MjJcdTY5MjZcdTY4ZTFcdTY5MGNcdTY4Y2RcdTY4ZDRcdTY4ZTdcdTY4ZDVcdTY5''@;'; put 'put ''MzZcdTY5MTJcdTY5MDRcdTY4ZDdcdTY4ZTNcdTY5MjVcdTY4ZjlcdTY4ZTBcdTY4ZWZcdTY5MjhcdTY5MmFcdTY5MWFcdTY5MjNcdTY5MjFcdTY4YzZcdTY5NzlcdTY5NzdcdTY5NWNcdTY5NzhcdTY5NmJcdTY5NTRcdTY5N2VcdTY5NmVcdTY5MzlcdTY5NzRcdTY5M2RcdTY5NTlcdTY5MzBc''@;'; put 'put ''dTY5NjFcdTY5NWVcdTY5NWRcdTY5ODFcdTY5NmFcdTY5YjJcdTY5YWVcdTY5ZDBcdTY5YmZcdTY5YzFcdTY5ZDNcdTY5YmVcdTY5Y2VcdTViZThcdTY5Y2FcdTY5ZGRcdTY5YmJcdTY5YzNcdTY5YTdcdTZhMmVcdTY5OTFcdTY5YTBcdTY5OWNcdTY5OTVcdTY5YjRcdTY5ZGVcdTY5ZThcdTZh''@;'; put 'put ''MDJcdTZhMWJcdTY5ZmZcdTZiMGFcdTY5ZjlcdTY5ZjJcdTY5ZTdcdTZhMDVcdTY5YjFcdTZhMWVcdTY5ZWRcdTZhMTRcdTY5ZWJcdTZhMGFcdTZhMTJcdTZhYzFcdTZhMjNcdTZhMTNcdTZhNDRcdTZhMGNcdTZhNzJcdTZhMzZcdTZhNzhcdTZhNDdcdTZhNjJcdTZhNTlcdTZhNjZcdTZhNDhc''@;'; put 'put ''dTZhMzhcdTZhMjJcdTZhOTBcdTZhOGRcdTZhYTBcdTZhODRcdTZhYTJcdTZhYTNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNThdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE1OF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNThdW3NdXT00MDQ0OCtzLGhbNDA0NDgr''@;'; put 'put ''c109Y1sxNThdW3NdKTtmb3IoY1sxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhOTdcdTg2MTdcdTZhYmJcdTZhYzNcdTZhYzJcdTZhYjhcdTZhYjNcdTZhYWNcdTZhZGVcdTZhZDFcdTZhZGZcdTZhYWFcdTZhZGFcdTZhZWFc''@;'; put 'put ''dTZhZmJcdTZiMDVcdTg2MTZcdTZhZmFcdTZiMTJcdTZiMTZcdTliMzFcdTZiMWZcdTZiMzhcdTZiMzdcdTc2ZGNcdTZiMzlcdTk4ZWVcdTZiNDdcdTZiNDNcdTZiNDlcdTZiNTBcdTZiNTlcdTZiNTRcdTZiNWJcdTZiNWZcdTZiNjFcdTZiNzhcdTZiNzlcdTZiN2ZcdTZiODBcdTZiODRcdTZi''@;'; put 'put ''ODNcdTZiOGRcdTZiOThcdTZiOTVcdTZiOWVcdTZiYTRcdTZiYWFcdTZiYWJcdTZiYWZcdTZiYjJcdTZiYjFcdTZiYjNcdTZiYjdcdTZiYmNcdTZiYzZcdTZiY2JcdTZiZDNcdTZiZGZcdTZiZWNcdTZiZWJcdTZiZjNcdTZiZWZcdWZmZmRcdTllYmVcdTZjMDhcdTZjMTNcdTZjMTRcdTZjMWJc''@;'; put 'put ''dTZjMjRcdTZjMjNcdTZjNWVcdTZjNTVcdTZjNjJcdTZjNmFcdTZjODJcdTZjOGRcdTZjOWFcdTZjODFcdTZjOWJcdTZjN2VcdTZjNjhcdTZjNzNcdTZjOTJcdTZjOTBcdTZjYzRcdTZjZjFcdTZjZDNcdTZjYmRcdTZjZDdcdTZjYzVcdTZjZGRcdTZjYWVcdTZjYjFcdTZjYmVcdTZjYmFcdTZj''@;'; put 'put ''ZGJcdTZjZWZcdTZjZDlcdTZjZWFcdTZkMWZcdTg4NGRcdTZkMzZcdTZkMmJcdTZkM2RcdTZkMzhcdTZkMTlcdTZkMzVcdTZkMzNcdTZkMTJcdTZkMGNcdTZkNjNcdTZkOTNcdTZkNjRcdTZkNWFcdTZkNzlcdTZkNTlcdTZkOGVcdTZkOTVcdTZmZTRcdTZkODVcdTZkZjlcdTZlMTVcdTZlMGFc''@;'; put 'put ''dTZkYjVcdTZkYzdcdTZkZTZcdTZkYjhcdTZkYzZcdTZkZWNcdTZkZGVcdTZkY2NcdTZkZThcdTZkZDJcdTZkYzVcdTZkZmFcdTZkZDlcdTZkZTRcdTZkZDVcdTZkZWFcdTZkZWVcdTZlMmRcdTZlNmVcdTZlMmVcdTZlMTlcdTZlNzJcdTZlNWZcdTZlM2VcdTZlMjNcdTZlNmJcdTZlMmJcdTZl''@;'; put 'put ''NzZcdTZlNGRcdTZlMWZcdTZlNDNcdTZlM2FcdTZlNGVcdTZlMjRcdTZlZmZcdTZlMWRcdTZlMzhcdTZlODJcdTZlYWFcdTZlOThcdTZlYzlcdTZlYjdcdTZlZDNcdTZlYmRcdTZlYWZcdTZlYzRcdTZlYjJcdTZlZDRcdTZlZDVcdTZlOGZcdTZlYTVcdTZlYzJcdTZlOWZcdTZmNDFcdTZmMTFc''@;'; put 'put ''dTcwNGNcdTZlZWNcdTZlZjhcdTZlZmVcdTZmM2ZcdTZlZjJcdTZmMzFcdTZlZWZcdTZmMzJcdTZlY2NcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNTldLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE1OV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNTldW3NdXT00MDcw''@;'; put 'put ''NCtzLGhbNDA3MDQrc109Y1sxNTldW3NdKTtmb3IoY1syMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmM2VcdTZmMTNcdTZlZjdcdTZmODZcdTZmN2FcdTZmNzhcdTZmODFcdTZmODBcdTZmNmZcdTZmNWJcdTZmZjNcdTZmNmRc''@;'; put 'put ''dTZmODJcdTZmN2NcdTZmNThcdTZmOGVcdTZmOTFcdTZmYzJcdTZmNjZcdTZmYjNcdTZmYTNcdTZmYTFcdTZmYTRcdTZmYjlcdTZmYzZcdTZmYWFcdTZmZGZcdTZmZDVcdTZmZWNcdTZmZDRcdTZmZDhcdTZmZjFcdTZmZWVcdTZmZGJcdTcwMDlcdTcwMGJcdTZmZmFcdTcwMTFcdTcwMDFcdTcw''@;'; put 'put ''MGZcdTZmZmVcdTcwMWJcdTcwMWFcdTZmNzRcdTcwMWRcdTcwMThcdTcwMWZcdTcwMzBcdTcwM2VcdTcwMzJcdTcwNTFcdTcwNjNcdTcwOTlcdTcwOTJcdTcwYWZcdTcwZjFcdTcwYWNcdTcwYjhcdTcwYjNcdTcwYWVcdTcwZGZcdTcwY2JcdTcwZGRcdWZmZmRcdTcwZDlcdTcxMDlcdTcwZmRc''@;'; put 'put ''dTcxMWNcdTcxMTlcdTcxNjVcdTcxNTVcdTcxODhcdTcxNjZcdTcxNjJcdTcxNGNcdTcxNTZcdTcxNmNcdTcxOGZcdTcxZmJcdTcxODRcdTcxOTVcdTcxYThcdTcxYWNcdTcxZDdcdTcxYjlcdTcxYmVcdTcxZDJcdTcxYzlcdTcxZDRcdTcxY2VcdTcxZTBcdTcxZWNcdTcxZTdcdTcxZjVcdTcx''@;'; put 'put ''ZmNcdTcxZjlcdTcxZmZcdTcyMGRcdTcyMTBcdTcyMWJcdTcyMjhcdTcyMmRcdTcyMmNcdTcyMzBcdTcyMzJcdTcyM2JcdTcyM2NcdTcyM2ZcdTcyNDBcdTcyNDZcdTcyNGJcdTcyNThcdTcyNzRcdTcyN2VcdTcyODJcdTcyODFcdTcyODdcdTcyOTJcdTcyOTZcdTcyYTJcdTcyYTdcdTcyYjlc''@;'; put 'put ''dTcyYjJcdTcyYzNcdTcyYzZcdTcyYzRcdTcyY2VcdTcyZDJcdTcyZTJcdTcyZTBcdTcyZTFcdTcyZjlcdTcyZjdcdTUwMGZcdTczMTdcdTczMGFcdTczMWNcdTczMTZcdTczMWRcdTczMzRcdTczMmZcdTczMjlcdTczMjVcdTczM2VcdTczNGVcdTczNGZcdTllZDhcdTczNTdcdTczNmFcdTcz''@;'; put 'put ''NjhcdTczNzBcdTczNzhcdTczNzVcdTczN2JcdTczN2FcdTczYzhcdTczYjNcdTczY2VcdTczYmJcdTczYzBcdTczZTVcdTczZWVcdTczZGVcdTc0YTJcdTc0MDVcdTc0NmZcdTc0MjVcdTczZjhcdTc0MzJcdTc0M2FcdTc0NTVcdTc0M2ZcdTc0NWZcdTc0NTlcdTc0NDFcdTc0NWNcdTc0Njlc''@;'; put 'put ''dTc0NzBcdTc0NjNcdTc0NmFcdTc0NzZcdTc0N2VcdTc0OGJcdTc0OWVcdTc0YTdcdTc0Y2FcdTc0Y2ZcdTc0ZDRcdTczZjFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMjRdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIyNF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sy''@;'; put 'put ''MjRdW3NdXT01NzM0NCtzLGhbNTczNDQrc109Y1syMjRdW3NdKTtmb3IoY1syMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0ZTBcdTc0ZTNcdTc0ZTdcdTc0ZTlcdTc0ZWVcdTc0ZjJcdTc0ZjBcdTc0ZjFcdTc0ZjhcdTc0Zjdc''@;'; put 'put ''dTc1MDRcdTc1MDNcdTc1MDVcdTc1MGNcdTc1MGVcdTc1MGRcdTc1MTVcdTc1MTNcdTc1MWVcdTc1MjZcdTc1MmNcdTc1M2NcdTc1NDRcdTc1NGRcdTc1NGFcdTc1NDlcdTc1NWJcdTc1NDZcdTc1NWFcdTc1NjlcdTc1NjRcdTc1NjdcdTc1NmJcdTc1NmRcdTc1NzhcdTc1NzZcdTc1ODZcdTc1''@;'; put 'put ''ODdcdTc1NzRcdTc1OGFcdTc1ODlcdTc1ODJcdTc1OTRcdTc1OWFcdTc1OWRcdTc1YTVcdTc1YTNcdTc1YzJcdTc1YjNcdTc1YzNcdTc1YjVcdTc1YmRcdTc1YjhcdTc1YmNcdTc1YjFcdTc1Y2RcdTc1Y2FcdTc1ZDJcdTc1ZDlcdTc1ZTNcdTc1ZGVcdTc1ZmVcdTc1ZmZcdWZmZmRcdTc1ZmNc''@;'; put 'put ''dTc2MDFcdTc1ZjBcdTc1ZmFcdTc1ZjJcdTc1ZjNcdTc2MGJcdTc2MGRcdTc2MDlcdTc2MWZcdTc2MjdcdTc2MjBcdTc2MjFcdTc2MjJcdTc2MjRcdTc2MzRcdTc2MzBcdTc2M2JcdTc2NDdcdTc2NDhcdTc2NDZcdTc2NWNcdTc2NThcdTc2NjFcdTc2NjJcdTc2NjhcdTc2NjlcdTc2NmFcdTc2''@;'; put 'put ''NjdcdTc2NmNcdTc2NzBcdTc2NzJcdTc2NzZcdTc2NzhcdTc2N2NcdTc2ODBcdTc2ODNcdTc2ODhcdTc2OGJcdTc2OGVcdTc2OTZcdTc2OTNcdTc2OTlcdTc2OWFcdTc2YjBcdTc2YjRcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YzJcdTc2Y2RcdTc2ZDZcdTc2ZDJcdTc2ZGVcdTc2ZTFcdTc2ZTVc''@;'; put 'put ''dTc2ZTdcdTc2ZWFcdTg2MmZcdTc2ZmJcdTc3MDhcdTc3MDdcdTc3MDRcdTc3MjlcdTc3MjRcdTc3MWVcdTc3MjVcdTc3MjZcdTc3MWJcdTc3MzdcdTc3MzhcdTc3NDdcdTc3NWFcdTc3NjhcdTc3NmJcdTc3NWJcdTc3NjVcdTc3N2ZcdTc3N2VcdTc3NzlcdTc3OGVcdTc3OGJcdTc3OTFcdTc3''@;'; put 'put ''YTBcdTc3OWVcdTc3YjBcdTc3YjZcdTc3YjlcdTc3YmZcdTc3YmNcdTc3YmRcdTc3YmJcdTc3YzdcdTc3Y2RcdTc3ZDdcdTc3ZGFcdTc3ZGNcdTc3ZTNcdTc3ZWVcdTc3ZmNcdTc4MGNcdTc4MTJcdTc5MjZcdTc4MjBcdTc5MmFcdTc4NDVcdTc4OGVcdTc4NzRcdTc4ODZcdTc4N2NcdTc4OWFc''@;'; put 'put ''dTc4OGNcdTc4YTNcdTc4YjVcdTc4YWFcdTc4YWZcdTc4ZDFcdTc4YzZcdTc4Y2JcdTc4ZDRcdTc4YmVcdTc4YmNcdTc4YzVcdTc4Y2FcdTc4ZWNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMjVdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIyNV1bc10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKHlbY1syMjVdW3NdXT01NzYwMCtzLGhbNTc2MDArc109Y1syMjVdW3NdKTtmb3IoY1syMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4ZTdcdTc4ZGFcdTc4ZmRcdTc4ZjRcdTc5MDdcdTc5MTJcdTc5MTFcdTc5MTlc''@;'; put 'put ''dTc5MmNcdTc5MmJcdTc5NDBcdTc5NjBcdTc5NTdcdTc5NWZcdTc5NWFcdTc5NTVcdTc5NTNcdTc5N2FcdTc5N2ZcdTc5OGFcdTc5OWRcdTc5YTdcdTlmNGJcdTc5YWFcdTc5YWVcdTc5YjNcdTc5YjlcdTc5YmFcdTc5YzlcdTc5ZDVcdTc5ZTdcdTc5ZWNcdTc5ZTFcdTc5ZTNcdTdhMDhcdTdh''@;'; put 'put ''MGRcdTdhMThcdTdhMTlcdTdhMjBcdTdhMWZcdTc5ODBcdTdhMzFcdTdhM2JcdTdhM2VcdTdhMzdcdTdhNDNcdTdhNTdcdTdhNDlcdTdhNjFcdTdhNjJcdTdhNjlcdTlmOWRcdTdhNzBcdTdhNzlcdTdhN2RcdTdhODhcdTdhOTdcdTdhOTVcdTdhOThcdTdhOTZcdTdhYTlcdTdhYzhcdTdhYjBc''@;'; put 'put ''dWZmZmRcdTdhYjZcdTdhYzVcdTdhYzRcdTdhYmZcdTkwODNcdTdhYzdcdTdhY2FcdTdhY2RcdTdhY2ZcdTdhZDVcdTdhZDNcdTdhZDlcdTdhZGFcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTZcdTdhZWRcdTdhZjBcdTdiMDJcdTdiMGZcdTdiMGFcdTdiMDZcdTdiMzNcdTdiMThcdTdiMTlcdTdi''@;'; put 'put ''MWVcdTdiMzVcdTdiMjhcdTdiMzZcdTdiNTBcdTdiN2FcdTdiMDRcdTdiNGRcdTdiMGJcdTdiNGNcdTdiNDVcdTdiNzVcdTdiNjVcdTdiNzRcdTdiNjdcdTdiNzBcdTdiNzFcdTdiNmNcdTdiNmVcdTdiOWRcdTdiOThcdTdiOWZcdTdiOGRcdTdiOWNcdTdiOWFcdTdiOGJcdTdiOTJcdTdiOGZc''@;'; put 'put ''dTdiNWRcdTdiOTlcdTdiY2JcdTdiYzFcdTdiY2NcdTdiY2ZcdTdiYjRcdTdiYzZcdTdiZGRcdTdiZTlcdTdjMTFcdTdjMTRcdTdiZTZcdTdiZTVcdTdjNjBcdTdjMDBcdTdjMDdcdTdjMTNcdTdiZjNcdTdiZjdcdTdjMTdcdTdjMGRcdTdiZjZcdTdjMjNcdTdjMjdcdTdjMmFcdTdjMWZcdTdj''@;'; put 'put ''MzdcdTdjMmJcdTdjM2RcdTdjNGNcdTdjNDNcdTdjNTRcdTdjNGZcdTdjNDBcdTdjNTBcdTdjNThcdTdjNWZcdTdjNjRcdTdjNTZcdTdjNjVcdTdjNmNcdTdjNzVcdTdjODNcdTdjOTBcdTdjYTRcdTdjYWRcdTdjYTJcdTdjYWJcdTdjYTFcdTdjYThcdTdjYjNcdTdjYjJcdTdjYjFcdTdjYWVc''@;'; put 'put ''dTdjYjlcdTdjYmRcdTdjYzBcdTdjYzVcdTdjYzJcdTdjZDhcdTdjZDJcdTdjZGNcdTdjZTJcdTliM2JcdTdjZWZcdTdjZjJcdTdjZjRcdTdjZjZcdTdjZmFcdTdkMDZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMjZdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIyNl1b''@;'; put 'put ''c10uY2hhckNvZGVBdCgwKSYmKHlbY1syMjZdW3NdXT01Nzg1NitzLGhbNTc4NTYrc109Y1syMjZdW3NdKTtmb3IoY1syMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkMDJcdTdkMWNcdTdkMTVcdTdkMGFcdTdkNDVcdTdkNGJc''@;'; put 'put ''dTdkMmVcdTdkMzJcdTdkM2ZcdTdkMzVcdTdkNDZcdTdkNzNcdTdkNTZcdTdkNGVcdTdkNzJcdTdkNjhcdTdkNmVcdTdkNGZcdTdkNjNcdTdkOTNcdTdkODlcdTdkNWJcdTdkOGZcdTdkN2RcdTdkOWJcdTdkYmFcdTdkYWVcdTdkYTNcdTdkYjVcdTdkYzdcdTdkYmRcdTdkYWJcdTdlM2RcdTdk''@;'; put 'put ''YTJcdTdkYWZcdTdkZGNcdTdkYjhcdTdkOWZcdTdkYjBcdTdkZDhcdTdkZGRcdTdkZTRcdTdkZGVcdTdkZmJcdTdkZjJcdTdkZTFcdTdlMDVcdTdlMGFcdTdlMjNcdTdlMjFcdTdlMTJcdTdlMzFcdTdlMWZcdTdlMDlcdTdlMGJcdTdlMjJcdTdlNDZcdTdlNjZcdTdlM2JcdTdlMzVcdTdlMzlc''@;'; put 'put ''dTdlNDNcdTdlMzdcdWZmZmRcdTdlMzJcdTdlM2FcdTdlNjdcdTdlNWRcdTdlNTZcdTdlNWVcdTdlNTlcdTdlNWFcdTdlNzlcdTdlNmFcdTdlNjlcdTdlN2NcdTdlN2JcdTdlODNcdTdkZDVcdTdlN2RcdThmYWVcdTdlN2ZcdTdlODhcdTdlODlcdTdlOGNcdTdlOTJcdTdlOTBcdTdlOTNcdTdl''@;'; put 'put ''OTRcdTdlOTZcdTdlOGVcdTdlOWJcdTdlOWNcdTdmMzhcdTdmM2FcdTdmNDVcdTdmNGNcdTdmNGRcdTdmNGVcdTdmNTBcdTdmNTFcdTdmNTVcdTdmNTRcdTdmNThcdTdmNWZcdTdmNjBcdTdmNjhcdTdmNjlcdTdmNjdcdTdmNzhcdTdmODJcdTdmODZcdTdmODNcdTdmODhcdTdmODdcdTdmOGNc''@;'; put 'put ''dTdmOTRcdTdmOWVcdTdmOWRcdTdmOWFcdTdmYTNcdTdmYWZcdTdmYjJcdTdmYjlcdTdmYWVcdTdmYjZcdTdmYjhcdThiNzFcdTdmYzVcdTdmYzZcdTdmY2FcdTdmZDVcdTdmZDRcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZjNcdTdmZjlcdTk4ZGNcdTgwMDZcdTgwMDRcdTgwMGJcdTgwMTJcdTgw''@;'; put 'put ''MThcdTgwMTlcdTgwMWNcdTgwMjFcdTgwMjhcdTgwM2ZcdTgwM2JcdTgwNGFcdTgwNDZcdTgwNTJcdTgwNThcdTgwNWFcdTgwNWZcdTgwNjJcdTgwNjhcdTgwNzNcdTgwNzJcdTgwNzBcdTgwNzZcdTgwNzlcdTgwN2RcdTgwN2ZcdTgwODRcdTgwODZcdTgwODVcdTgwOWJcdTgwOTNcdTgwOWFc''@;'; put 'put ''dTgwYWRcdTUxOTBcdTgwYWNcdTgwZGJcdTgwZTVcdTgwZDlcdTgwZGRcdTgwYzRcdTgwZGFcdTgwZDZcdTgxMDlcdTgwZWZcdTgwZjFcdTgxMWJcdTgxMjlcdTgxMjNcdTgxMmZcdTgxNGJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMjddLmxlbmd0aDsrK3MpNjU1''@;'; put 'put ''MzMhPT1jWzIyN11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMjddW3NdXT01ODExMitzLGhbNTgxMTIrc109Y1syMjddW3NdKTtmb3IoY1syMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OGJcdTgxNDZcdTgxM2VcdTgxNTNc''@;'; put 'put ''dTgxNTFcdTgwZmNcdTgxNzFcdTgxNmVcdTgxNjVcdTgxNjZcdTgxNzRcdTgxODNcdTgxODhcdTgxOGFcdTgxODBcdTgxODJcdTgxYTBcdTgxOTVcdTgxYTRcdTgxYTNcdTgxNWZcdTgxOTNcdTgxYTlcdTgxYjBcdTgxYjVcdTgxYmVcdTgxYjhcdTgxYmRcdTgxYzBcdTgxYzJcdTgxYmFcdTgx''@;'; put 'put ''YzlcdTgxY2RcdTgxZDFcdTgxZDlcdTgxZDhcdTgxYzhcdTgxZGFcdTgxZGZcdTgxZTBcdTgxZTdcdTgxZmFcdTgxZmJcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDVcdTgyMDdcdTgyMGFcdTgyMGRcdTgyMTBcdTgyMTZcdTgyMjlcdTgyMmJcdTgyMzhcdTgyMzNcdTgyNDBcdTgyNTlcdTgyNThc''@;'; put 'put ''dTgyNWRcdTgyNWFcdTgyNWZcdTgyNjRcdWZmZmRcdTgyNjJcdTgyNjhcdTgyNmFcdTgyNmJcdTgyMmVcdTgyNzFcdTgyNzdcdTgyNzhcdTgyN2VcdTgyOGRcdTgyOTJcdTgyYWJcdTgyOWZcdTgyYmJcdTgyYWNcdTgyZTFcdTgyZTNcdTgyZGZcdTgyZDJcdTgyZjRcdTgyZjNcdTgyZmFcdTgz''@;'; put 'put ''OTNcdTgzMDNcdTgyZmJcdTgyZjlcdTgyZGVcdTgzMDZcdTgyZGNcdTgzMDlcdTgyZDlcdTgzMzVcdTgzMzRcdTgzMTZcdTgzMzJcdTgzMzFcdTgzNDBcdTgzMzlcdTgzNTBcdTgzNDVcdTgzMmZcdTgzMmJcdTgzMTdcdTgzMThcdTgzODVcdTgzOWFcdTgzYWFcdTgzOWZcdTgzYTJcdTgzOTZc''@;'; put 'put ''dTgzMjNcdTgzOGVcdTgzODdcdTgzOGFcdTgzN2NcdTgzYjVcdTgzNzNcdTgzNzVcdTgzYTBcdTgzODlcdTgzYThcdTgzZjRcdTg0MTNcdTgzZWJcdTgzY2VcdTgzZmRcdTg0MDNcdTgzZDhcdTg0MGJcdTgzYzFcdTgzZjdcdTg0MDdcdTgzZTBcdTgzZjJcdTg0MGRcdTg0MjJcdTg0MjBcdTgz''@;'; put 'put ''YmRcdTg0MzhcdTg1MDZcdTgzZmJcdTg0NmRcdTg0MmFcdTg0M2NcdTg1NWFcdTg0ODRcdTg0NzdcdTg0NmJcdTg0YWRcdTg0NmVcdTg0ODJcdTg0NjlcdTg0NDZcdTg0MmNcdTg0NmZcdTg0NzlcdTg0MzVcdTg0Y2FcdTg0NjJcdTg0YjlcdTg0YmZcdTg0OWZcdTg0ZDlcdTg0Y2RcdTg0YmJc''@;'; put 'put ''dTg0ZGFcdTg0ZDBcdTg0YzFcdTg0YzZcdTg0ZDZcdTg0YTFcdTg1MjFcdTg0ZmZcdTg0ZjRcdTg1MTdcdTg1MThcdTg1MmNcdTg1MWZcdTg1MTVcdTg1MTRcdTg0ZmNcdTg1NDBcdTg1NjNcdTg1NThcdTg1NDhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMjhdLmxl''@;'; put 'put ''bmd0aDsrK3MpNjU1MzMhPT1jWzIyOF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMjhdW3NdXT01ODM2OCtzLGhbNTgzNjgrc109Y1syMjhdW3NdKTtmb3IoY1syMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NDFcdTg2MDJc''@;'; put 'put ''dTg1NGJcdTg1NTVcdTg1ODBcdTg1YTRcdTg1ODhcdTg1OTFcdTg1OGFcdTg1YThcdTg1NmRcdTg1OTRcdTg1OWJcdTg1ZWFcdTg1ODdcdTg1OWNcdTg1NzdcdTg1N2VcdTg1OTBcdTg1YzlcdTg1YmFcdTg1Y2ZcdTg1YjlcdTg1ZDBcdTg1ZDVcdTg1ZGRcdTg1ZTVcdTg1ZGNcdTg1ZjlcdTg2''@;'; put 'put ''MGFcdTg2MTNcdTg2MGJcdTg1ZmVcdTg1ZmFcdTg2MDZcdTg2MjJcdTg2MWFcdTg2MzBcdTg2M2ZcdTg2NGRcdTRlNTVcdTg2NTRcdTg2NWZcdTg2NjdcdTg2NzFcdTg2OTNcdTg2YTNcdTg2YTlcdTg2YWFcdTg2OGJcdTg2OGNcdTg2YjZcdTg2YWZcdTg2YzRcdTg2YzZcdTg2YjBcdTg2Yzlc''@;'; put 'put ''dTg4MjNcdTg2YWJcdTg2ZDRcdTg2ZGVcdTg2ZTlcdTg2ZWNcdWZmZmRcdTg2ZGZcdTg2ZGJcdTg2ZWZcdTg3MTJcdTg3MDZcdTg3MDhcdTg3MDBcdTg3MDNcdTg2ZmJcdTg3MTFcdTg3MDlcdTg3MGRcdTg2ZjlcdTg3MGFcdTg3MzRcdTg3M2ZcdTg3MzdcdTg3M2JcdTg3MjVcdTg3MjlcdTg3''@;'; put 'put ''MWFcdTg3NjBcdTg3NWZcdTg3NzhcdTg3NGNcdTg3NGVcdTg3NzRcdTg3NTdcdTg3NjhcdTg3NmVcdTg3NTlcdTg3NTNcdTg3NjNcdTg3NmFcdTg4MDVcdTg3YTJcdTg3OWZcdTg3ODJcdTg3YWZcdTg3Y2JcdTg3YmRcdTg3YzBcdTg3ZDBcdTk2ZDZcdTg3YWJcdTg3YzRcdTg3YjNcdTg3Yzdc''@;'; put 'put ''dTg3YzZcdTg3YmJcdTg3ZWZcdTg3ZjJcdTg3ZTBcdTg4MGZcdTg4MGRcdTg3ZmVcdTg3ZjZcdTg3ZjdcdTg4MGVcdTg3ZDJcdTg4MTFcdTg4MTZcdTg4MTVcdTg4MjJcdTg4MjFcdTg4MzFcdTg4MzZcdTg4MzlcdTg4MjdcdTg4M2JcdTg4NDRcdTg4NDJcdTg4NTJcdTg4NTlcdTg4NWVcdTg4''@;'; put 'put ''NjJcdTg4NmJcdTg4ODFcdTg4N2VcdTg4OWVcdTg4NzVcdTg4N2RcdTg4YjVcdTg4NzJcdTg4ODJcdTg4OTdcdTg4OTJcdTg4YWVcdTg4OTlcdTg4YTJcdTg4OGRcdTg4YTRcdTg4YjBcdTg4YmZcdTg4YjFcdTg4YzNcdTg4YzRcdTg4ZDRcdTg4ZDhcdTg4ZDlcdTg4ZGRcdTg4ZjlcdTg5MDJc''@;'; put 'put ''dTg4ZmNcdTg4ZjRcdTg4ZThcdTg4ZjJcdTg5MDRcdTg5MGNcdTg5MGFcdTg5MTNcdTg5NDNcdTg5MWVcdTg5MjVcdTg5MmFcdTg5MmJcdTg5NDFcdTg5NDRcdTg5M2JcdTg5MzZcdTg5MzhcdTg5NGNcdTg5MWRcdTg5NjBcdTg5NWVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7''@;'; put 'put ''cyE9Y1syMjldLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIyOV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMjldW3NdXT01ODYyNCtzLGhbNTg2MjQrc109Y1syMjldW3NdKTtmb3IoY1syMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTg5NjZcdTg5NjRcdTg5NmRcdTg5NmFcdTg5NmZcdTg5NzRcdTg5NzdcdTg5N2VcdTg5ODNcdTg5ODhcdTg5OGFcdTg5OTNcdTg5OThcdTg5YTFcdTg5YTlcdTg5YTZcdTg5YWNcdTg5YWZcdTg5YjJcdTg5YmFcdTg5YmRcdTg5YmZcdTg5YzBcdTg5ZGFcdTg5ZGNcdTg5ZGRcdTg5ZTdcdTg5''@;'; put 'put ''ZjRcdTg5ZjhcdThhMDNcdThhMTZcdThhMTBcdThhMGNcdThhMWJcdThhMWRcdThhMjVcdThhMzZcdThhNDFcdThhNWJcdThhNTJcdThhNDZcdThhNDhcdThhN2NcdThhNmRcdThhNmNcdThhNjJcdThhODVcdThhODJcdThhODRcdThhYThcdThhYTFcdThhOTFcdThhYTVcdThhYTZcdThhOWFc''@;'; put 'put ''dThhYTNcdThhYzRcdThhY2RcdThhYzJcdThhZGFcdThhZWJcdThhZjNcdThhZTdcdWZmZmRcdThhZTRcdThhZjFcdThiMTRcdThhZTBcdThhZTJcdThhZjdcdThhZGVcdThhZGJcdThiMGNcdThiMDdcdThiMWFcdThhZTFcdThiMTZcdThiMTBcdThiMTdcdThiMjBcdThiMzNcdTk3YWJcdThi''@;'; put 'put ''MjZcdThiMmJcdThiM2VcdThiMjhcdThiNDFcdThiNGNcdThiNGZcdThiNGVcdThiNDlcdThiNTZcdThiNWJcdThiNWFcdThiNmJcdThiNWZcdThiNmNcdThiNmZcdThiNzRcdThiN2RcdThiODBcdThiOGNcdThiOGVcdThiOTJcdThiOTNcdThiOTZcdThiOTlcdThiOWFcdThjM2FcdThjNDFc''@;'; put 'put ''dThjM2ZcdThjNDhcdThjNGNcdThjNGVcdThjNTBcdThjNTVcdThjNjJcdThjNmNcdThjNzhcdThjN2FcdThjODJcdThjODlcdThjODVcdThjOGFcdThjOGRcdThjOGVcdThjOTRcdThjN2NcdThjOThcdTYyMWRcdThjYWRcdThjYWFcdThjYmRcdThjYjJcdThjYjNcdThjYWVcdThjYjZcdThj''@;'; put 'put ''YzhcdThjYzFcdThjZTRcdThjZTNcdThjZGFcdThjZmRcdThjZmFcdThjZmJcdThkMDRcdThkMDVcdThkMGFcdThkMDdcdThkMGZcdThkMGRcdThkMTBcdTlmNGVcdThkMTNcdThjY2RcdThkMTRcdThkMTZcdThkNjdcdThkNmRcdThkNzFcdThkNzNcdThkODFcdThkOTlcdThkYzJcdThkYmVc''@;'; put 'put ''dThkYmFcdThkY2ZcdThkZGFcdThkZDZcdThkY2NcdThkZGJcdThkY2JcdThkZWFcdThkZWJcdThkZGZcdThkZTNcdThkZmNcdThlMDhcdThlMDlcdThkZmZcdThlMWRcdThlMWVcdThlMTBcdThlMWZcdThlNDJcdThlMzVcdThlMzBcdThlMzRcdThlNGFcdWZmZmRcdWZmZmRcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxzPTA7cyE9Y1syMzBdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIzMF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMzBdW3NdXT01ODg4MCtzLGhbNTg4ODArc109Y1syMzBdW3NdKTtmb3IoY1syMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdThlNDdcdThlNDlcdThlNGNcdThlNTBcdThlNDhcdThlNTlcdThlNjRcdThlNjBcdThlMmFcdThlNjNcdThlNTVcdThlNzZcdThlNzJcdThlN2NcdThlODFcdThlODdcdThlODVcdThlODRcdThlOGJcdThlOGFcdThlOTNcdThlOTFcdThlOTRcdThlOTlcdThlYWFcdThl''@;'; put 'put ''YTFcdThlYWNcdThlYjBcdThlYzZcdThlYjFcdThlYmVcdThlYzVcdThlYzhcdThlY2JcdThlZGJcdThlZTNcdThlZmNcdThlZmJcdThlZWJcdThlZmVcdThmMGFcdThmMDVcdThmMTVcdThmMTJcdThmMTlcdThmMTNcdThmMWNcdThmMWZcdThmMWJcdThmMGNcdThmMjZcdThmMzNcdThmM2Jc''@;'; put 'put ''dThmMzlcdThmNDVcdThmNDJcdThmM2VcdThmNGNcdThmNDlcdThmNDZcdThmNGVcdThmNTdcdThmNWNcdWZmZmRcdThmNjJcdThmNjNcdThmNjRcdThmOWNcdThmOWZcdThmYTNcdThmYWRcdThmYWZcdThmYjdcdThmZGFcdThmZTVcdThmZTJcdThmZWFcdThmZWZcdTkwODdcdThmZjRcdTkw''@;'; put 'put ''MDVcdThmZjlcdThmZmFcdTkwMTFcdTkwMTVcdTkwMjFcdTkwMGRcdTkwMWVcdTkwMTZcdTkwMGJcdTkwMjdcdTkwMzZcdTkwMzVcdTkwMzlcdThmZjhcdTkwNGZcdTkwNTBcdTkwNTFcdTkwNTJcdTkwMGVcdTkwNDlcdTkwM2VcdTkwNTZcdTkwNThcdTkwNWVcdTkwNjhcdTkwNmZcdTkwNzZc''@;'; put 'put ''dTk2YThcdTkwNzJcdTkwODJcdTkwN2RcdTkwODFcdTkwODBcdTkwOGFcdTkwODlcdTkwOGZcdTkwYThcdTkwYWZcdTkwYjFcdTkwYjVcdTkwZTJcdTkwZTRcdTYyNDhcdTkwZGJcdTkxMDJcdTkxMTJcdTkxMTlcdTkxMzJcdTkxMzBcdTkxNGFcdTkxNTZcdTkxNThcdTkxNjNcdTkxNjVcdTkx''@;'; put 'put ''NjlcdTkxNzNcdTkxNzJcdTkxOGJcdTkxODlcdTkxODJcdTkxYTJcdTkxYWJcdTkxYWZcdTkxYWFcdTkxYjVcdTkxYjRcdTkxYmFcdTkxYzBcdTkxYzFcdTkxYzlcdTkxY2JcdTkxZDBcdTkxZDZcdTkxZGZcdTkxZTFcdTkxZGJcdTkxZmNcdTkxZjVcdTkxZjZcdTkyMWVcdTkxZmZcdTkyMTRc''@;'; put 'put ''dTkyMmNcdTkyMTVcdTkyMTFcdTkyNWVcdTkyNTdcdTkyNDVcdTkyNDlcdTkyNjRcdTkyNDhcdTkyOTVcdTkyM2ZcdTkyNGJcdTkyNTBcdTkyOWNcdTkyOTZcdTkyOTNcdTkyOWJcdTkyNWFcdTkyY2ZcdTkyYjlcdTkyYjdcdTkyZTlcdTkzMGZcdTkyZmFcdTkzNDRcdTkzMmVcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMzFdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIzMV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMzFdW3NdXT01OTEzNitzLGhbNTkxMzYrc109Y1syMzFdW3NdKTtmb3IoY1syMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMTlcdTkzMjJcdTkzMWFcdTkzMjNcdTkzM2FcdTkzMzVcdTkzM2JcdTkzNWNcdTkzNjBcdTkzN2NcdTkzNmVcdTkzNTZcdTkzYjBcdTkzYWNcdTkzYWRcdTkzOTRcdTkzYjlcdTkzZDZcdTkzZDdcdTkzZThcdTkzZTVcdTkzZDhcdTkzYzNcdTkz''@;'; put 'put ''ZGRcdTkzZDBcdTkzYzhcdTkzZTRcdTk0MWFcdTk0MTRcdTk0MTNcdTk0MDNcdTk0MDdcdTk0MTBcdTk0MzZcdTk0MmJcdTk0MzVcdTk0MjFcdTk0M2FcdTk0NDFcdTk0NTJcdTk0NDRcdTk0NWJcdTk0NjBcdTk0NjJcdTk0NWVcdTk0NmFcdTkyMjlcdTk0NzBcdTk0NzVcdTk0NzdcdTk0N2Rc''@;'; put 'put ''dTk0NWFcdTk0N2NcdTk0N2VcdTk0ODFcdTk0N2ZcdTk1ODJcdTk1ODdcdTk1OGFcdTk1OTRcdTk1OTZcdTk1OThcdTk1OTlcdWZmZmRcdTk1YTBcdTk1YThcdTk1YTdcdTk1YWRcdTk1YmNcdTk1YmJcdTk1YjlcdTk1YmVcdTk1Y2FcdTZmZjZcdTk1YzNcdTk1Y2RcdTk1Y2NcdTk1ZDVcdTk1''@;'; put 'put ''ZDRcdTk1ZDZcdTk1ZGNcdTk1ZTFcdTk1ZTVcdTk1ZTJcdTk2MjFcdTk2MjhcdTk2MmVcdTk2MmZcdTk2NDJcdTk2NGNcdTk2NGZcdTk2NGJcdTk2NzdcdTk2NWNcdTk2NWVcdTk2NWRcdTk2NWZcdTk2NjZcdTk2NzJcdTk2NmNcdTk2OGRcdTk2OThcdTk2OTVcdTk2OTdcdTk2YWFcdTk2YTdc''@;'; put 'put ''dTk2YjFcdTk2YjJcdTk2YjBcdTk2YjRcdTk2YjZcdTk2YjhcdTk2YjlcdTk2Y2VcdTk2Y2JcdTk2YzlcdTk2Y2RcdTg5NGRcdTk2ZGNcdTk3MGRcdTk2ZDVcdTk2ZjlcdTk3MDRcdTk3MDZcdTk3MDhcdTk3MTNcdTk3MGVcdTk3MTFcdTk3MGZcdTk3MTZcdTk3MTlcdTk3MjRcdTk3MmFcdTk3''@;'; put 'put ''MzBcdTk3MzlcdTk3M2RcdTk3M2VcdTk3NDRcdTk3NDZcdTk3NDhcdTk3NDJcdTk3NDlcdTk3NWNcdTk3NjBcdTk3NjRcdTk3NjZcdTk3NjhcdTUyZDJcdTk3NmJcdTk3NzFcdTk3NzlcdTk3ODVcdTk3N2NcdTk3ODFcdTk3N2FcdTk3ODZcdTk3OGJcdTk3OGZcdTk3OTBcdTk3OWNcdTk3YThc''@;'; put 'put ''dTk3YTZcdTk3YTNcdTk3YjNcdTk3YjRcdTk3YzNcdTk3YzZcdTk3YzhcdTk3Y2JcdTk3ZGNcdTk3ZWRcdTlmNGZcdTk3ZjJcdTdhZGZcdTk3ZjZcdTk3ZjVcdTk4MGZcdTk4MGNcdTk4MzhcdTk4MjRcdTk4MjFcdTk4MzdcdTk4M2RcdTk4NDZcdTk4NGZcdTk4NGJcdTk4NmJcdTk4NmZcdTk4''@;'; put 'put ''NzBcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMzJdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIzMl1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMzJdW3NdXT01OTM5MitzLGhbNTkzOTIrc109Y1syMzJdW3NdKTtmb3IoY1syMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4NzFcdTk4NzRcdTk4NzNcdTk4YWFcdTk4YWZcdTk4YjFcdTk4YjZcdTk4YzRcdTk4YzNcdTk4YzZcdTk4ZTlcdTk4ZWJcdTk5MDNcdTk5MDlcdTk5MTJcdTk5MTRcdTk5MThcdTk5MjFcdTk5MWRcdTk5MWVcdTk5MjRcdTk5''@;'; put 'put ''MjBcdTk5MmNcdTk5MmVcdTk5M2RcdTk5M2VcdTk5NDJcdTk5NDlcdTk5NDVcdTk5NTBcdTk5NGJcdTk5NTFcdTk5NTJcdTk5NGNcdTk5NTVcdTk5OTdcdTk5OThcdTk5YTVcdTk5YWRcdTk5YWVcdTk5YmNcdTk5ZGZcdTk5ZGJcdTk5ZGRcdTk5ZDhcdTk5ZDFcdTk5ZWRcdTk5ZWVcdTk5ZjFc''@;'; put 'put ''dTk5ZjJcdTk5ZmJcdTk5ZjhcdTlhMDFcdTlhMGZcdTlhMDVcdTk5ZTJcdTlhMTlcdTlhMmJcdTlhMzdcdTlhNDVcdTlhNDJcdTlhNDBcdTlhNDNcdWZmZmRcdTlhM2VcdTlhNTVcdTlhNGRcdTlhNWJcdTlhNTdcdTlhNWZcdTlhNjJcdTlhNjVcdTlhNjRcdTlhNjlcdTlhNmJcdTlhNmFcdTlh''@;'; put 'put ''YWRcdTlhYjBcdTlhYmNcdTlhYzBcdTlhY2ZcdTlhZDFcdTlhZDNcdTlhZDRcdTlhZGVcdTlhZGZcdTlhZTJcdTlhZTNcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZWVcdTlhZjRcdTlhZjFcdTlhZjdcdTlhZmJcdTliMDZcdTliMThcdTliMWFcdTliMWZcdTliMjJcdTliMjNcdTliMjVcdTliMjdc''@;'; put 'put ''dTliMjhcdTliMjlcdTliMmFcdTliMmVcdTliMmZcdTliMzJcdTliNDRcdTliNDNcdTliNGZcdTliNGRcdTliNGVcdTliNTFcdTliNThcdTliNzRcdTliOTNcdTliODNcdTliOTFcdTliOTZcdTliOTdcdTliOWZcdTliYTBcdTliYThcdTliYjRcdTliYzBcdTliY2FcdTliYjlcdTliYzZcdTli''@;'; put 'put ''Y2ZcdTliZDFcdTliZDJcdTliZTNcdTliZTJcdTliZTRcdTliZDRcdTliZTFcdTljM2FcdTliZjJcdTliZjFcdTliZjBcdTljMTVcdTljMTRcdTljMDlcdTljMTNcdTljMGNcdTljMDZcdTljMDhcdTljMTJcdTljMGFcdTljMDRcdTljMmVcdTljMWJcdTljMjVcdTljMjRcdTljMjFcdTljMzBc''@;'; put 'put ''dTljNDdcdTljMzJcdTljNDZcdTljM2VcdTljNWFcdTljNjBcdTljNjdcdTljNzZcdTljNzhcdTljZTdcdTljZWNcdTljZjBcdTlkMDlcdTlkMDhcdTljZWJcdTlkMDNcdTlkMDZcdTlkMmFcdTlkMjZcdTlkYWZcdTlkMjNcdTlkMWZcdTlkNDRcdTlkMTVcdTlkMTJcdTlkNDFcdTlkM2ZcdTlk''@;'; put 'put ''M2VcdTlkNDZcdTlkNDhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMzNdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIzM11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMzNdW3NdXT01OTY0OCtzLGhbNTk2NDgrc109Y1syMzNdW3NdKTtmb3IoY1syMzRdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkNWRcdTlkNWVcdTlkNjRcdTlkNTFcdTlkNTBcdTlkNTlcdTlkNzJcdTlkODlcdTlkODdcdTlkYWJcdTlkNmZcdTlkN2FcdTlkOWFcdTlkYTRcdTlkYTlcdTlkYjJcdTlkYzRcdTlkYzFcdTlkYmJcdTlk''@;'; put 'put ''YjhcdTlkYmFcdTlkYzZcdTlkY2ZcdTlkYzJcdTlkZDlcdTlkZDNcdTlkZjhcdTlkZTZcdTlkZWRcdTlkZWZcdTlkZmRcdTllMWFcdTllMWJcdTllMWVcdTllNzVcdTllNzlcdTllN2RcdTllODFcdTllODhcdTllOGJcdTllOGNcdTllOTJcdTllOTVcdTllOTFcdTllOWRcdTllYTVcdTllYTlc''@;'; put 'put ''dTllYjhcdTllYWFcdTllYWRcdTk3NjFcdTllY2NcdTllY2VcdTllY2ZcdTllZDBcdTllZDRcdTllZGNcdTllZGVcdTllZGRcdTllZTBcdTllZTVcdTllZThcdTllZWZcdWZmZmRcdTllZjRcdTllZjZcdTllZjdcdTllZjlcdTllZmJcdTllZmNcdTllZmRcdTlmMDdcdTlmMDhcdTc2YjdcdTlm''@;'; put 'put ''MTVcdTlmMjFcdTlmMmNcdTlmM2VcdTlmNGFcdTlmNTJcdTlmNTRcdTlmNjNcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjZcdTlmNjdcdTlmNmNcdTlmNmFcdTlmNzdcdTlmNzJcdTlmNzZcdTlmOTVcdTlmOWNcdTlmYTBcdTU4MmZcdTY5YzdcdTkwNTlcdTc0NjRcdTUxZGNcdTcxOTlcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMzRdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIzNF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMzRdW3NdXT01OTkwNCtzLGhbNTk5MDQrc109Y1syMzRdW3NdKTtmb3IoY1sy''@;'; put 'put ''MzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRm''@;'; put 'put ''MzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBc''@;'; put 'put ''dTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZmZmRcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5''@;'; put 'put ''YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVc''@;'; put 'put ''dTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2''@;'; put 'put ''YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNc''@;'; put 'put ''dTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcx''@;'; put 'put ''NWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMzddLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIzN11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMzddW3NdXT02MDY3MitzLGhbNjA2NzIrc109Y1syMzdd''@;'; put 'put ''W3NdKTtmb3IoY1syMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyYmVcdTczMjRcdWZhMTZcdTczNzdcdTczYmRcdTczYzlcdTczZDZcdTczZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0MjlcdTc0MmVcdTc0''@;'; put 'put ''NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTlcdWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdhZTdcdWZhMWNcdTdhZWJc''@;'; put 'put ''dTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdcdTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTlcdWZmZmRcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZhMjFcdTg4MDdcdTg4''@;'; put 'put ''ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThkNzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGFcdTkxZDdcdTkxZGVcdTkxZWRc''@;'; put 'put ''dTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFcdTkyM2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdcdTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNcdTkzMjVcdTkzMjFcdTky''@;'; put 'put ''ZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3NTFcdTk3NTVcdTk4NTdc''@;'; put 'put ''dTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVcdTlhNGVcdTlhZDlcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDFcdWZmZmRcdWZmZmRcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIx''@;'; put 'put ''NzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMzhdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIzOF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMzhdW3NdXT02MDkyOCtzLGhbNjA5''@;'; put 'put ''Mjgrc109Y1syMzhdW3NdKTtmb3IoY1syNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdTIxNjBcdTIxNjFcdTIxNjJcdTIx''@;'; put 'put ''NjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdTMyMzFcdTIxMTZcdTIxMjFcdTIyMzVcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhc''@;'; put 'put ''dTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdWZmZmRcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUy''@;'; put 'put ''MTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJc''@;'; put 'put ''dTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVm''@;'; put 'put ''ZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdc''@;'; put 'put ''dTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZh''@;'; put 'put ''ZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syNTBdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzI1MF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syNTBdW3NdXT02''@;'; put 'put ''NGUzK3MsaFs2NGUzK3NdPWNbMjUwXVtzXSk7Zm9yKGNbMjUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4''@;'; put 'put ''XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3''@;'; put 'put ''NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmZmZkXHVmYTFhXHU3OTk0XHVmYTFi''@;'; put 'put ''XHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5XHU4NTZiXHVmYTFmXHU4''@;'; put 'put ''NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3''@;'; put 'put ''XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5''@;'; put 'put ''MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRk''@;'; put 'put ''XHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjUxXS5sZW5ndGg7KytzKTY1NTMzIT09Y1syNTFdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2Nb''@;'; put 'put ''MjUxXVtzXV09NjQyNTYrcyxoWzY0MjU2K3NdPWNbMjUxXVtzXSk7Zm9yKGNbMjUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcwXHU5ZDZiXHVmYTJk''@;'; put 'put ''XHU5ZTE5XHU5ZWQxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjUyXS5sZW5ndGg7KytzKTY1NTMzIT09Y1syNTJdW3NdLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJih5W2NbMjUyXVtzXV09NjQ1MTIrcyxoWzY0NTEyK3NdPWNbMjUyXVtzXSk7cmV0dXJue2VuYzp5LGRlYzpofX0oKSxqWzkzNl09ZnVuY3Rpb24oKXt2YXIgcyxoPVtdLHk9e30sYz1bXTtmb3IoY1swXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxy''@;'; put 'put ''XHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6''@;'; put 'put ''e3x9flx4N2ZcdTIwYWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1swXS5sZW5ndGg7KytzKTY1NTMzIT09Y1swXVtz''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoeVtjWzBdW3NdXT0wK3MsaFswK3NdPWNbMF1bc10pO2ZvcihjWzEyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMlx1NGUwNFx1NGUwNVx1NGUwNlx1NGUwZlx1NGUxMlx1NGUxN1x1NGUxZlx1''@;'; put 'put ''NGUyMFx1NGUyMVx1NGUyM1x1NGUyNlx1NGUyOVx1NGUyZVx1NGUyZlx1NGUzMVx1NGUzM1x1NGUzNVx1NGUzN1x1NGUzY1x1NGU0MFx1NGU0MVx1NGU0Mlx1NGU0NFx1NGU0Nlx1NGU0YVx1NGU1MVx1NGU1NVx1NGU1N1x1NGU1YVx1NGU1Ylx1NGU2Mlx1NGU2M1x1NGU2NFx1NGU2NVx1NGU2''@;'; put 'put ''N1x1NGU2OFx1NGU2YVx1NGU2Ylx1NGU2Y1x1NGU2ZFx1NGU2ZVx1NGU2Zlx1NGU3Mlx1NGU3NFx1NGU3NVx1NGU3Nlx1NGU3N1x1NGU3OFx1NGU3OVx1NGU3YVx1NGU3Ylx1NGU3Y1x1NGU3ZFx1NGU3Zlx1NGU4MFx1NGU4MVx1NGU4Mlx1NGU4M1x1NGU4NFx1NGU4NVx1NGU4N1x1NGU4YVx1''@;'; put 'put ''ZmZmZFx1NGU5MFx1NGU5Nlx1NGU5N1x1NGU5OVx1NGU5Y1x1NGU5ZFx1NGU5ZVx1NGVhM1x1NGVhYVx1NGVhZlx1NGViMFx1NGViMVx1NGViNFx1NGViNlx1NGViN1x1NGViOFx1NGViOVx1NGViY1x1NGViZFx1NGViZVx1NGVjOFx1NGVjY1x1NGVjZlx1NGVkMFx1NGVkMlx1NGVkYVx1NGVk''@;'; put 'put ''Ylx1NGVkY1x1NGVlMFx1NGVlMlx1NGVlNlx1NGVlN1x1NGVlOVx1NGVlZFx1NGVlZVx1NGVlZlx1NGVmMVx1NGVmNFx1NGVmOFx1NGVmOVx1NGVmYVx1NGVmY1x1NGVmZVx1NGYwMFx1NGYwMlx1NGYwM1x1NGYwNFx1NGYwNVx1NGYwNlx1NGYwN1x1NGYwOFx1NGYwYlx1NGYwY1x1NGYxMlx1''@;'; put 'put ''NGYxM1x1NGYxNFx1NGYxNVx1NGYxNlx1NGYxY1x1NGYxZFx1NGYyMVx1NGYyM1x1NGYyOFx1NGYyOVx1NGYyY1x1NGYyZFx1NGYyZVx1NGYzMVx1NGYzM1x1NGYzNVx1NGYzN1x1NGYzOVx1NGYzYlx1NGYzZVx1NGYzZlx1NGY0MFx1NGY0MVx1NGY0Mlx1NGY0NFx1NGY0NVx1NGY0N1x1NGY0''@;'; put 'put ''OFx1NGY0OVx1NGY0YVx1NGY0Ylx1NGY0Y1x1NGY1Mlx1NGY1NFx1NGY1Nlx1NGY2MVx1NGY2Mlx1NGY2Nlx1NGY2OFx1NGY2YVx1NGY2Ylx1NGY2ZFx1NGY2ZVx1NGY3MVx1NGY3Mlx1NGY3NVx1NGY3N1x1NGY3OFx1NGY3OVx1NGY3YVx1NGY3ZFx1NGY4MFx1NGY4MVx1NGY4Mlx1NGY4NVx1''@;'; put 'put ''NGY4Nlx1NGY4N1x1NGY4YVx1NGY4Y1x1NGY4ZVx1NGY5MFx1NGY5Mlx1NGY5M1x1NGY5NVx1NGY5Nlx1NGY5OFx1NGY5OVx1NGY5YVx1NGY5Y1x1NGY5ZVx1NGY5Zlx1NGZhMVx1NGZhMlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzEyOV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTI5XVtz''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoeVtjWzEyOV1bc11dPTMzMDI0K3MsaFszMzAyNCtzXT1jWzEyOV1bc10pO2ZvcihjWzEzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGZhNFx1NGZhYlx1NGZhZFx1NGZiMFx1NGZiMVx1NGZiMlx1''@;'; put 'put ''NGZiM1x1NGZiNFx1NGZiNlx1NGZiN1x1NGZiOFx1NGZiOVx1NGZiYVx1NGZiYlx1NGZiY1x1NGZiZFx1NGZiZVx1NGZjMFx1NGZjMVx1NGZjMlx1NGZjNlx1NGZjN1x1NGZjOFx1NGZjOVx1NGZjYlx1NGZjY1x1NGZjZFx1NGZkMlx1NGZkM1x1NGZkNFx1NGZkNVx1NGZkNlx1NGZkOVx1NGZk''@;'; put 'put ''Ylx1NGZlMFx1NGZlMlx1NGZlNFx1NGZlNVx1NGZlN1x1NGZlYlx1NGZlY1x1NGZmMFx1NGZmMlx1NGZmNFx1NGZmNVx1NGZmNlx1NGZmN1x1NGZmOVx1NGZmYlx1NGZmY1x1NGZmZFx1NGZmZlx1NTAwMFx1NTAwMVx1NTAwMlx1NTAwM1x1NTAwNFx1NTAwNVx1NTAwNlx1NTAwN1x1NTAwOFx1''@;'; put 'put ''NTAwOVx1NTAwYVx1ZmZmZFx1NTAwYlx1NTAwZVx1NTAxMFx1NTAxMVx1NTAxM1x1NTAxNVx1NTAxNlx1NTAxN1x1NTAxYlx1NTAxZFx1NTAxZVx1NTAyMFx1NTAyMlx1NTAyM1x1NTAyNFx1NTAyN1x1NTAyYlx1NTAyZlx1NTAzMFx1NTAzMVx1NTAzMlx1NTAzM1x1NTAzNFx1NTAzNVx1NTAz''@;'; put 'put ''Nlx1NTAzN1x1NTAzOFx1NTAzOVx1NTAzYlx1NTAzZFx1NTAzZlx1NTA0MFx1NTA0MVx1NTA0Mlx1NTA0NFx1NTA0NVx1NTA0Nlx1NTA0OVx1NTA0YVx1NTA0Ylx1NTA0ZFx1NTA1MFx1NTA1MVx1NTA1Mlx1NTA1M1x1NTA1NFx1NTA1Nlx1NTA1N1x1NTA1OFx1NTA1OVx1NTA1Ylx1NTA1ZFx1''@;'; put 'put ''NTA1ZVx1NTA1Zlx1NTA2MFx1NTA2MVx1NTA2Mlx1NTA2M1x1NTA2NFx1NTA2Nlx1NTA2N1x1NTA2OFx1NTA2OVx1NTA2YVx1NTA2Ylx1NTA2ZFx1NTA2ZVx1NTA2Zlx1NTA3MFx1NTA3MVx1NTA3Mlx1NTA3M1x1NTA3NFx1NTA3NVx1NTA3OFx1NTA3OVx1NTA3YVx1NTA3Y1x1NTA3ZFx1NTA4''@;'; put 'put ''MVx1NTA4Mlx1NTA4M1x1NTA4NFx1NTA4Nlx1NTA4N1x1NTA4OVx1NTA4YVx1NTA4Ylx1NTA4Y1x1NTA4ZVx1NTA4Zlx1NTA5MFx1NTA5MVx1NTA5Mlx1NTA5M1x1NTA5NFx1NTA5NVx1NTA5Nlx1NTA5N1x1NTA5OFx1NTA5OVx1NTA5YVx1NTA5Ylx1NTA5Y1x1NTA5ZFx1NTA5ZVx1NTA5Zlx1''@;'; put 'put ''NTBhMFx1NTBhMVx1NTBhMlx1NTBhNFx1NTBhNlx1NTBhYVx1NTBhYlx1NTBhZFx1NTBhZVx1NTBhZlx1NTBiMFx1NTBiMVx1NTBiM1x1NTBiNFx1NTBiNVx1NTBiNlx1NTBiN1x1NTBiOFx1NTBiOVx1NTBiY1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzEzMF0ubGVuZ3RoOysrcyk2NTUz''@;'; put 'put ''MyE9PWNbMTMwXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzEzMF1bc11dPTMzMjgwK3MsaFszMzI4MCtzXT1jWzEzMF1bc10pO2ZvcihjWzEzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTBiZFx1NTBiZVx1NTBiZlx1NTBjMFx1''@;'; put 'put ''NTBjMVx1NTBjMlx1NTBjM1x1NTBjNFx1NTBjNVx1NTBjNlx1NTBjN1x1NTBjOFx1NTBjOVx1NTBjYVx1NTBjYlx1NTBjY1x1NTBjZFx1NTBjZVx1NTBkMFx1NTBkMVx1NTBkMlx1NTBkM1x1NTBkNFx1NTBkNVx1NTBkN1x1NTBkOFx1NTBkOVx1NTBkYlx1NTBkY1x1NTBkZFx1NTBkZVx1NTBk''@;'; put 'put ''Zlx1NTBlMFx1NTBlMVx1NTBlMlx1NTBlM1x1NTBlNFx1NTBlNVx1NTBlOFx1NTBlOVx1NTBlYVx1NTBlYlx1NTBlZlx1NTBmMFx1NTBmMVx1NTBmMlx1NTBmNFx1NTBmNlx1NTBmN1x1NTBmOFx1NTBmOVx1NTBmYVx1NTBmY1x1NTBmZFx1NTBmZVx1NTBmZlx1NTEwMFx1NTEwMVx1NTEwMlx1''@;'; put 'put ''NTEwM1x1NTEwNFx1NTEwNVx1NTEwOFx1ZmZmZFx1NTEwOVx1NTEwYVx1NTEwY1x1NTEwZFx1NTEwZVx1NTEwZlx1NTExMFx1NTExMVx1NTExM1x1NTExNFx1NTExNVx1NTExNlx1NTExN1x1NTExOFx1NTExOVx1NTExYVx1NTExYlx1NTExY1x1NTExZFx1NTExZVx1NTExZlx1NTEyMFx1NTEy''@;'; put 'put ''Mlx1NTEyM1x1NTEyNFx1NTEyNVx1NTEyNlx1NTEyN1x1NTEyOFx1NTEyOVx1NTEyYVx1NTEyYlx1NTEyY1x1NTEyZFx1NTEyZVx1NTEyZlx1NTEzMFx1NTEzMVx1NTEzMlx1NTEzM1x1NTEzNFx1NTEzNVx1NTEzNlx1NTEzN1x1NTEzOFx1NTEzOVx1NTEzYVx1NTEzYlx1NTEzY1x1NTEzZFx1''@;'; put 'put ''NTEzZVx1NTE0Mlx1NTE0N1x1NTE0YVx1NTE0Y1x1NTE0ZVx1NTE0Zlx1NTE1MFx1NTE1Mlx1NTE1M1x1NTE1N1x1NTE1OFx1NTE1OVx1NTE1Ylx1NTE1ZFx1NTE1ZVx1NTE1Zlx1NTE2MFx1NTE2MVx1NTE2M1x1NTE2NFx1NTE2Nlx1NTE2N1x1NTE2OVx1NTE2YVx1NTE2Zlx1NTE3Mlx1NTE3''@;'; put 'put ''YVx1NTE3ZVx1NTE3Zlx1NTE4M1x1NTE4NFx1NTE4Nlx1NTE4N1x1NTE4YVx1NTE4Ylx1NTE4ZVx1NTE4Zlx1NTE5MFx1NTE5MVx1NTE5M1x1NTE5NFx1NTE5OFx1NTE5YVx1NTE5ZFx1NTE5ZVx1NTE5Zlx1NTFhMVx1NTFhM1x1NTFhNlx1NTFhN1x1NTFhOFx1NTFhOVx1NTFhYVx1NTFhZFx1''@;'; put 'put ''NTFhZVx1NTFiNFx1NTFiOFx1NTFiOVx1NTFiYVx1NTFiZVx1NTFiZlx1NTFjMVx1NTFjMlx1NTFjM1x1NTFjNVx1NTFjOFx1NTFjYVx1NTFjZFx1NTFjZVx1NTFkMFx1NTFkMlx1NTFkM1x1NTFkNFx1NTFkNVx1NTFkNlx1NTFkN1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzEzMV0ubGVu''@;'; put 'put ''Z3RoOysrcyk2NTUzMyE9PWNbMTMxXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzEzMV1bc11dPTMzNTM2K3MsaFszMzUzNitzXT1jWzEzMV1bc10pO2ZvcihjWzEzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFkOFx1NTFkOVx1''@;'; put 'put ''NTFkYVx1NTFkY1x1NTFkZVx1NTFkZlx1NTFlMlx1NTFlM1x1NTFlNVx1NTFlNlx1NTFlN1x1NTFlOFx1NTFlOVx1NTFlYVx1NTFlY1x1NTFlZVx1NTFmMVx1NTFmMlx1NTFmNFx1NTFmN1x1NTFmZVx1NTIwNFx1NTIwNVx1NTIwOVx1NTIwYlx1NTIwY1x1NTIwZlx1NTIxMFx1NTIxM1x1NTIx''@;'; put 'put ''NFx1NTIxNVx1NTIxY1x1NTIxZVx1NTIxZlx1NTIyMVx1NTIyMlx1NTIyM1x1NTIyNVx1NTIyNlx1NTIyN1x1NTIyYVx1NTIyY1x1NTIyZlx1NTIzMVx1NTIzMlx1NTIzNFx1NTIzNVx1NTIzY1x1NTIzZVx1NTI0NFx1NTI0NVx1NTI0Nlx1NTI0N1x1NTI0OFx1NTI0OVx1NTI0Ylx1NTI0ZVx1''@;'; put 'put ''NTI0Zlx1NTI1Mlx1NTI1M1x1NTI1NVx1NTI1N1x1NTI1OFx1ZmZmZFx1NTI1OVx1NTI1YVx1NTI1Ylx1NTI1ZFx1NTI1Zlx1NTI2MFx1NTI2Mlx1NTI2M1x1NTI2NFx1NTI2Nlx1NTI2OFx1NTI2Ylx1NTI2Y1x1NTI2ZFx1NTI2ZVx1NTI3MFx1NTI3MVx1NTI3M1x1NTI3NFx1NTI3NVx1NTI3''@;'; put 'put ''Nlx1NTI3N1x1NTI3OFx1NTI3OVx1NTI3YVx1NTI3Ylx1NTI3Y1x1NTI3ZVx1NTI4MFx1NTI4M1x1NTI4NFx1NTI4NVx1NTI4Nlx1NTI4N1x1NTI4OVx1NTI4YVx1NTI4Ylx1NTI4Y1x1NTI4ZFx1NTI4ZVx1NTI4Zlx1NTI5MVx1NTI5Mlx1NTI5NFx1NTI5NVx1NTI5Nlx1NTI5N1x1NTI5OFx1''@;'; put 'put ''NTI5OVx1NTI5YVx1NTI5Y1x1NTJhNFx1NTJhNVx1NTJhNlx1NTJhN1x1NTJhZVx1NTJhZlx1NTJiMFx1NTJiNFx1NTJiNVx1NTJiNlx1NTJiN1x1NTJiOFx1NTJiOVx1NTJiYVx1NTJiYlx1NTJiY1x1NTJiZFx1NTJjMFx1NTJjMVx1NTJjMlx1NTJjNFx1NTJjNVx1NTJjNlx1NTJjOFx1NTJj''@;'; put 'put ''YVx1NTJjY1x1NTJjZFx1NTJjZVx1NTJjZlx1NTJkMVx1NTJkM1x1NTJkNFx1NTJkNVx1NTJkN1x1NTJkOVx1NTJkYVx1NTJkYlx1NTJkY1x1NTJkZFx1NTJkZVx1NTJlMFx1NTJlMVx1NTJlMlx1NTJlM1x1NTJlNVx1NTJlNlx1NTJlN1x1NTJlOFx1NTJlOVx1NTJlYVx1NTJlYlx1NTJlY1x1''@;'; put 'put ''NTJlZFx1NTJlZVx1NTJlZlx1NTJmMVx1NTJmMlx1NTJmM1x1NTJmNFx1NTJmNVx1NTJmNlx1NTJmN1x1NTJmOFx1NTJmYlx1NTJmY1x1NTJmZFx1NTMwMVx1NTMwMlx1NTMwM1x1NTMwNFx1NTMwN1x1NTMwOVx1NTMwYVx1NTMwYlx1NTMwY1x1NTMwZVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtz''@;'; put 'put ''IT1jWzEzMl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTMyXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzEzMl1bc11dPTMzNzkyK3MsaFszMzc5MitzXT1jWzEzMl1bc10pO2ZvcihjWzEzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''NTMxMVx1NTMxMlx1NTMxM1x1NTMxNFx1NTMxOFx1NTMxYlx1NTMxY1x1NTMxZVx1NTMxZlx1NTMyMlx1NTMyNFx1NTMyNVx1NTMyN1x1NTMyOFx1NTMyOVx1NTMyYlx1NTMyY1x1NTMyZFx1NTMyZlx1NTMzMFx1NTMzMVx1NTMzMlx1NTMzM1x1NTMzNFx1NTMzNVx1NTMzNlx1NTMzN1x1NTMz''@;'; put 'put ''OFx1NTMzY1x1NTMzZFx1NTM0MFx1NTM0Mlx1NTM0NFx1NTM0Nlx1NTM0Ylx1NTM0Y1x1NTM0ZFx1NTM1MFx1NTM1NFx1NTM1OFx1NTM1OVx1NTM1Ylx1NTM1ZFx1NTM2NVx1NTM2OFx1NTM2YVx1NTM2Y1x1NTM2ZFx1NTM3Mlx1NTM3Nlx1NTM3OVx1NTM3Ylx1NTM3Y1x1NTM3ZFx1NTM3ZVx1''@;'; put 'put ''NTM4MFx1NTM4MVx1NTM4M1x1NTM4N1x1NTM4OFx1NTM4YVx1NTM4ZVx1NTM4Zlx1ZmZmZFx1NTM5MFx1NTM5MVx1NTM5Mlx1NTM5M1x1NTM5NFx1NTM5Nlx1NTM5N1x1NTM5OVx1NTM5Ylx1NTM5Y1x1NTM5ZVx1NTNhMFx1NTNhMVx1NTNhNFx1NTNhN1x1NTNhYVx1NTNhYlx1NTNhY1x1NTNh''@;'; put 'put ''ZFx1NTNhZlx1NTNiMFx1NTNiMVx1NTNiMlx1NTNiM1x1NTNiNFx1NTNiNVx1NTNiN1x1NTNiOFx1NTNiOVx1NTNiYVx1NTNiY1x1NTNiZFx1NTNiZVx1NTNjMFx1NTNjM1x1NTNjNFx1NTNjNVx1NTNjNlx1NTNjN1x1NTNjZVx1NTNjZlx1NTNkMFx1NTNkMlx1NTNkM1x1NTNkNVx1NTNkYVx1''@;'; put 'put ''NTNkY1x1NTNkZFx1NTNkZVx1NTNlMVx1NTNlMlx1NTNlN1x1NTNmNFx1NTNmYVx1NTNmZVx1NTNmZlx1NTQwMFx1NTQwMlx1NTQwNVx1NTQwN1x1NTQwYlx1NTQxNFx1NTQxOFx1NTQxOVx1NTQxYVx1NTQxY1x1NTQyMlx1NTQyNFx1NTQyNVx1NTQyYVx1NTQzMFx1NTQzM1x1NTQzNlx1NTQz''@;'; put 'put ''N1x1NTQzYVx1NTQzZFx1NTQzZlx1NTQ0MVx1NTQ0Mlx1NTQ0NFx1NTQ0NVx1NTQ0N1x1NTQ0OVx1NTQ0Y1x1NTQ0ZFx1NTQ0ZVx1NTQ0Zlx1NTQ1MVx1NTQ1YVx1NTQ1ZFx1NTQ1ZVx1NTQ1Zlx1NTQ2MFx1NTQ2MVx1NTQ2M1x1NTQ2NVx1NTQ2N1x1NTQ2OVx1NTQ2YVx1NTQ2Ylx1NTQ2Y1x1''@;'; put 'put ''NTQ2ZFx1NTQ2ZVx1NTQ2Zlx1NTQ3MFx1NTQ3NFx1NTQ3OVx1NTQ3YVx1NTQ3ZVx1NTQ3Zlx1NTQ4MVx1NTQ4M1x1NTQ4NVx1NTQ4N1x1NTQ4OFx1NTQ4OVx1NTQ4YVx1NTQ4ZFx1NTQ5MVx1NTQ5M1x1NTQ5N1x1NTQ5OFx1NTQ5Y1x1NTQ5ZVx1NTQ5Zlx1NTRhMFx1NTRhMVx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLHM9MDtzIT1jWzEzM10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTMzXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzEzM11bc11dPTM0MDQ4K3MsaFszNDA0OCtzXT1jWzEzM11bc10pO2ZvcihjWzEzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1NTRhMlx1NTRhNVx1NTRhZVx1NTRiMFx1NTRiMlx1NTRiNVx1NTRiNlx1NTRiN1x1NTRiOVx1NTRiYVx1NTRiY1x1NTRiZVx1NTRjM1x1NTRjNVx1NTRjYVx1NTRjYlx1NTRkNlx1NTRkOFx1NTRkYlx1NTRlMFx1NTRlMVx1NTRlMlx1NTRlM1x1NTRlNFx1NTRlYlx1NTRl''@;'; put 'put ''Y1x1NTRlZlx1NTRmMFx1NTRmMVx1NTRmNFx1NTRmNVx1NTRmNlx1NTRmN1x1NTRmOFx1NTRmOVx1NTRmYlx1NTRmZVx1NTUwMFx1NTUwMlx1NTUwM1x1NTUwNFx1NTUwNVx1NTUwOFx1NTUwYVx1NTUwYlx1NTUwY1x1NTUwZFx1NTUwZVx1NTUxMlx1NTUxM1x1NTUxNVx1NTUxNlx1NTUxN1x1''@;'; put 'put ''NTUxOFx1NTUxOVx1NTUxYVx1NTUxY1x1NTUxZFx1NTUxZVx1NTUxZlx1NTUyMVx1NTUyNVx1NTUyNlx1ZmZmZFx1NTUyOFx1NTUyOVx1NTUyYlx1NTUyZFx1NTUzMlx1NTUzNFx1NTUzNVx1NTUzNlx1NTUzOFx1NTUzOVx1NTUzYVx1NTUzYlx1NTUzZFx1NTU0MFx1NTU0Mlx1NTU0NVx1NTU0''@;'; put 'put ''N1x1NTU0OFx1NTU0Ylx1NTU0Y1x1NTU0ZFx1NTU0ZVx1NTU0Zlx1NTU1MVx1NTU1Mlx1NTU1M1x1NTU1NFx1NTU1N1x1NTU1OFx1NTU1OVx1NTU1YVx1NTU1Ylx1NTU1ZFx1NTU1ZVx1NTU1Zlx1NTU2MFx1NTU2Mlx1NTU2M1x1NTU2OFx1NTU2OVx1NTU2Ylx1NTU2Zlx1NTU3MFx1NTU3MVx1''@;'; put 'put ''NTU3Mlx1NTU3M1x1NTU3NFx1NTU3OVx1NTU3YVx1NTU3ZFx1NTU3Zlx1NTU4NVx1NTU4Nlx1NTU4Y1x1NTU4ZFx1NTU4ZVx1NTU5MFx1NTU5Mlx1NTU5M1x1NTU5NVx1NTU5Nlx1NTU5N1x1NTU5YVx1NTU5Ylx1NTU5ZVx1NTVhMFx1NTVhMVx1NTVhMlx1NTVhM1x1NTVhNFx1NTVhNVx1NTVh''@;'; put 'put ''Nlx1NTVhOFx1NTVhOVx1NTVhYVx1NTVhYlx1NTVhY1x1NTVhZFx1NTVhZVx1NTVhZlx1NTViMFx1NTViMlx1NTViNFx1NTViNlx1NTViOFx1NTViYVx1NTViY1x1NTViZlx1NTVjMFx1NTVjMVx1NTVjMlx1NTVjM1x1NTVjNlx1NTVjN1x1NTVjOFx1NTVjYVx1NTVjYlx1NTVjZVx1NTVjZlx1''@;'; put 'put ''NTVkMFx1NTVkNVx1NTVkN1x1NTVkOFx1NTVkOVx1NTVkYVx1NTVkYlx1NTVkZVx1NTVlMFx1NTVlMlx1NTVlN1x1NTVlOVx1NTVlZFx1NTVlZVx1NTVmMFx1NTVmMVx1NTVmNFx1NTVmNlx1NTVmOFx1NTVmOVx1NTVmYVx1NTVmYlx1NTVmY1x1NTVmZlx1NTYwMlx1NTYwM1x1NTYwNFx1NTYw''@;'; put 'put ''NVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzEzNF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTM0XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzEzNF1bc11dPTM0MzA0K3MsaFszNDMwNCtzXT1jWzEzNF1bc10pO2ZvcihjWzEzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTYwNlx1NTYwN1x1NTYwYVx1NTYwYlx1NTYwZFx1NTYxMFx1NTYxMVx1NTYxMlx1NTYxM1x1NTYxNFx1NTYxNVx1NTYxNlx1NTYxN1x1NTYxOVx1NTYxYVx1NTYxY1x1NTYxZFx1NTYyMFx1NTYyMVx1NTYyMlx1NTYyNVx1NTYyNlx1NTYyOFx1NTYy''@;'; put 'put ''OVx1NTYyYVx1NTYyYlx1NTYyZVx1NTYyZlx1NTYzMFx1NTYzM1x1NTYzNVx1NTYzN1x1NTYzOFx1NTYzYVx1NTYzY1x1NTYzZFx1NTYzZVx1NTY0MFx1NTY0MVx1NTY0Mlx1NTY0M1x1NTY0NFx1NTY0NVx1NTY0Nlx1NTY0N1x1NTY0OFx1NTY0OVx1NTY0YVx1NTY0Ylx1NTY0Zlx1NTY1MFx1''@;'; put 'put ''NTY1MVx1NTY1Mlx1NTY1M1x1NTY1NVx1NTY1Nlx1NTY1YVx1NTY1Ylx1NTY1ZFx1NTY1ZVx1NTY1Zlx1NTY2MFx1NTY2MVx1ZmZmZFx1NTY2M1x1NTY2NVx1NTY2Nlx1NTY2N1x1NTY2ZFx1NTY2ZVx1NTY2Zlx1NTY3MFx1NTY3Mlx1NTY3M1x1NTY3NFx1NTY3NVx1NTY3N1x1NTY3OFx1NTY3''@;'; put 'put ''OVx1NTY3YVx1NTY3ZFx1NTY3ZVx1NTY3Zlx1NTY4MFx1NTY4MVx1NTY4Mlx1NTY4M1x1NTY4NFx1NTY4N1x1NTY4OFx1NTY4OVx1NTY4YVx1NTY4Ylx1NTY4Y1x1NTY4ZFx1NTY5MFx1NTY5MVx1NTY5Mlx1NTY5NFx1NTY5NVx1NTY5Nlx1NTY5N1x1NTY5OFx1NTY5OVx1NTY5YVx1NTY5Ylx1''@;'; put 'put ''NTY5Y1x1NTY5ZFx1NTY5ZVx1NTY5Zlx1NTZhMFx1NTZhMVx1NTZhMlx1NTZhNFx1NTZhNVx1NTZhNlx1NTZhN1x1NTZhOFx1NTZhOVx1NTZhYVx1NTZhYlx1NTZhY1x1NTZhZFx1NTZhZVx1NTZiMFx1NTZiMVx1NTZiMlx1NTZiM1x1NTZiNFx1NTZiNVx1NTZiNlx1NTZiOFx1NTZiOVx1NTZi''@;'; put 'put ''YVx1NTZiYlx1NTZiZFx1NTZiZVx1NTZiZlx1NTZjMFx1NTZjMVx1NTZjMlx1NTZjM1x1NTZjNFx1NTZjNVx1NTZjNlx1NTZjN1x1NTZjOFx1NTZjOVx1NTZjYlx1NTZjY1x1NTZjZFx1NTZjZVx1NTZjZlx1NTZkMFx1NTZkMVx1NTZkMlx1NTZkM1x1NTZkNVx1NTZkNlx1NTZkOFx1NTZkOVx1''@;'; put 'put ''NTZkY1x1NTZlM1x1NTZlNVx1NTZlNlx1NTZlN1x1NTZlOFx1NTZlOVx1NTZlYVx1NTZlY1x1NTZlZVx1NTZlZlx1NTZmMlx1NTZmM1x1NTZmNlx1NTZmN1x1NTZmOFx1NTZmYlx1NTZmY1x1NTcwMFx1NTcwMVx1NTcwMlx1NTcwNVx1NTcwN1x1NTcwYlx1NTcwY1x1NTcwZFx1NTcwZVx1NTcw''@;'; put 'put ''Zlx1NTcxMFx1NTcxMVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzEzNV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTM1XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzEzNV1bc11dPTM0NTYwK3MsaFszNDU2MCtzXT1jWzEzNV1bc10pO2ZvcihjWzEzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTcxMlx1NTcxM1x1NTcxNFx1NTcxNVx1NTcxNlx1NTcxN1x1NTcxOFx1NTcxOVx1NTcxYVx1NTcxYlx1NTcxZFx1NTcxZVx1NTcyMFx1NTcyMVx1NTcyMlx1NTcyNFx1NTcyNVx1NTcyNlx1NTcyN1x1NTcyYlx1NTczMVx1NTcz''@;'; put 'put ''Mlx1NTczNFx1NTczNVx1NTczNlx1NTczN1x1NTczOFx1NTczY1x1NTczZFx1NTczZlx1NTc0MVx1NTc0M1x1NTc0NFx1NTc0NVx1NTc0Nlx1NTc0OFx1NTc0OVx1NTc0Ylx1NTc1Mlx1NTc1M1x1NTc1NFx1NTc1NVx1NTc1Nlx1NTc1OFx1NTc1OVx1NTc2Mlx1NTc2M1x1NTc2NVx1NTc2N1x1''@;'; put 'put ''NTc2Y1x1NTc2ZVx1NTc3MFx1NTc3MVx1NTc3Mlx1NTc3NFx1NTc3NVx1NTc3OFx1NTc3OVx1NTc3YVx1NTc3ZFx1NTc3ZVx1NTc3Zlx1NTc4MFx1ZmZmZFx1NTc4MVx1NTc4N1x1NTc4OFx1NTc4OVx1NTc4YVx1NTc4ZFx1NTc4ZVx1NTc4Zlx1NTc5MFx1NTc5MVx1NTc5NFx1NTc5NVx1NTc5''@;'; put 'put ''Nlx1NTc5N1x1NTc5OFx1NTc5OVx1NTc5YVx1NTc5Y1x1NTc5ZFx1NTc5ZVx1NTc5Zlx1NTdhNVx1NTdhOFx1NTdhYVx1NTdhY1x1NTdhZlx1NTdiMFx1NTdiMVx1NTdiM1x1NTdiNVx1NTdiNlx1NTdiN1x1NTdiOVx1NTdiYVx1NTdiYlx1NTdiY1x1NTdiZFx1NTdiZVx1NTdiZlx1NTdjMFx1''@;'; put 'put ''NTdjMVx1NTdjNFx1NTdjNVx1NTdjNlx1NTdjN1x1NTdjOFx1NTdjOVx1NTdjYVx1NTdjY1x1NTdjZFx1NTdkMFx1NTdkMVx1NTdkM1x1NTdkNlx1NTdkN1x1NTdkYlx1NTdkY1x1NTdkZVx1NTdlMVx1NTdlMlx1NTdlM1x1NTdlNVx1NTdlNlx1NTdlN1x1NTdlOFx1NTdlOVx1NTdlYVx1NTdl''@;'; put 'put ''Ylx1NTdlY1x1NTdlZVx1NTdmMFx1NTdmMVx1NTdmMlx1NTdmM1x1NTdmNVx1NTdmNlx1NTdmN1x1NTdmYlx1NTdmY1x1NTdmZVx1NTdmZlx1NTgwMVx1NTgwM1x1NTgwNFx1NTgwNVx1NTgwOFx1NTgwOVx1NTgwYVx1NTgwY1x1NTgwZVx1NTgwZlx1NTgxMFx1NTgxMlx1NTgxM1x1NTgxNFx1''@;'; put 'put ''NTgxNlx1NTgxN1x1NTgxOFx1NTgxYVx1NTgxYlx1NTgxY1x1NTgxZFx1NTgxZlx1NTgyMlx1NTgyM1x1NTgyNVx1NTgyNlx1NTgyN1x1NTgyOFx1NTgyOVx1NTgyYlx1NTgyY1x1NTgyZFx1NTgyZVx1NTgyZlx1NTgzMVx1NTgzMlx1NTgzM1x1NTgzNFx1NTgzNlx1NTgzN1x1NTgzOFx1NTgz''@;'; put 'put ''OVx1NTgzYVx1NTgzYlx1NTgzY1x1NTgzZFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzEzNl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTM2XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzEzNl1bc11dPTM0ODE2K3MsaFszNDgxNitzXT1jWzEzNl1bc10pO2ZvcihjWzEzN109Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTgzZVx1NTgzZlx1NTg0MFx1NTg0MVx1NTg0Mlx1NTg0M1x1NTg0NVx1NTg0Nlx1NTg0N1x1NTg0OFx1NTg0OVx1NTg0YVx1NTg0Ylx1NTg0ZVx1NTg0Zlx1NTg1MFx1NTg1Mlx1NTg1M1x1NTg1NVx1NTg1''@;'; put 'put ''Nlx1NTg1N1x1NTg1OVx1NTg1YVx1NTg1Ylx1NTg1Y1x1NTg1ZFx1NTg1Zlx1NTg2MFx1NTg2MVx1NTg2Mlx1NTg2M1x1NTg2NFx1NTg2Nlx1NTg2N1x1NTg2OFx1NTg2OVx1NTg2YVx1NTg2ZFx1NTg2ZVx1NTg2Zlx1NTg3MFx1NTg3MVx1NTg3Mlx1NTg3M1x1NTg3NFx1NTg3NVx1NTg3Nlx1''@;'; put 'put ''NTg3N1x1NTg3OFx1NTg3OVx1NTg3YVx1NTg3Ylx1NTg3Y1x1NTg3ZFx1NTg3Zlx1NTg4Mlx1NTg4NFx1NTg4Nlx1NTg4N1x1NTg4OFx1NTg4YVx1NTg4Ylx1NTg4Y1x1ZmZmZFx1NTg4ZFx1NTg4ZVx1NTg4Zlx1NTg5MFx1NTg5MVx1NTg5NFx1NTg5NVx1NTg5Nlx1NTg5N1x1NTg5OFx1NTg5''@;'; put 'put ''Ylx1NTg5Y1x1NTg5ZFx1NThhMFx1NThhMVx1NThhMlx1NThhM1x1NThhNFx1NThhNVx1NThhNlx1NThhN1x1NThhYVx1NThhYlx1NThhY1x1NThhZFx1NThhZVx1NThhZlx1NThiMFx1NThiMVx1NThiMlx1NThiM1x1NThiNFx1NThiNVx1NThiNlx1NThiN1x1NThiOFx1NThiOVx1NThiYVx1''@;'; put 'put ''NThiYlx1NThiZFx1NThiZVx1NThiZlx1NThjMFx1NThjMlx1NThjM1x1NThjNFx1NThjNlx1NThjN1x1NThjOFx1NThjOVx1NThjYVx1NThjYlx1NThjY1x1NThjZFx1NThjZVx1NThjZlx1NThkMFx1NThkMlx1NThkM1x1NThkNFx1NThkNlx1NThkN1x1NThkOFx1NThkOVx1NThkYVx1NThk''@;'; put 'put ''Ylx1NThkY1x1NThkZFx1NThkZVx1NThkZlx1NThlMFx1NThlMVx1NThlMlx1NThlM1x1NThlNVx1NThlNlx1NThlN1x1NThlOFx1NThlOVx1NThlYVx1NThlZFx1NThlZlx1NThmMVx1NThmMlx1NThmNFx1NThmNVx1NThmN1x1NThmOFx1NThmYVx1NThmYlx1NThmY1x1NThmZFx1NThmZVx1''@;'; put 'put ''NThmZlx1NTkwMFx1NTkwMVx1NTkwM1x1NTkwNVx1NTkwNlx1NTkwOFx1NTkwOVx1NTkwYVx1NTkwYlx1NTkwY1x1NTkwZVx1NTkxMFx1NTkxMVx1NTkxMlx1NTkxM1x1NTkxN1x1NTkxOFx1NTkxYlx1NTkxZFx1NTkxZVx1NTkyMFx1NTkyMVx1NTkyMlx1NTkyM1x1NTkyNlx1NTkyOFx1NTky''@;'; put 'put ''Y1x1NTkzMFx1NTkzMlx1NTkzM1x1NTkzNVx1NTkzNlx1NTkzYlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzEzN10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTM3XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzEzN11bc11dPTM1MDcyK3MsaFszNTA3MitzXT1jWzEzN11bc10pO2ZvcihjWzEz''@;'; put 'put ''OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTkzZFx1NTkzZVx1NTkzZlx1NTk0MFx1NTk0M1x1NTk0NVx1NTk0Nlx1NTk0YVx1NTk0Y1x1NTk0ZFx1NTk1MFx1NTk1Mlx1NTk1M1x1NTk1OVx1NTk1Ylx1NTk1Y1x1NTk1ZFx1NTk1''@;'; put 'put ''ZVx1NTk1Zlx1NTk2MVx1NTk2M1x1NTk2NFx1NTk2Nlx1NTk2N1x1NTk2OFx1NTk2OVx1NTk2YVx1NTk2Ylx1NTk2Y1x1NTk2ZFx1NTk2ZVx1NTk2Zlx1NTk3MFx1NTk3MVx1NTk3Mlx1NTk3NVx1NTk3N1x1NTk3YVx1NTk3Ylx1NTk3Y1x1NTk3ZVx1NTk3Zlx1NTk4MFx1NTk4NVx1NTk4OVx1''@;'; put 'put ''NTk4Ylx1NTk4Y1x1NTk4ZVx1NTk4Zlx1NTk5MFx1NTk5MVx1NTk5NFx1NTk5NVx1NTk5OFx1NTk5YVx1NTk5Ylx1NTk5Y1x1NTk5ZFx1NTk5Zlx1NTlhMFx1NTlhMVx1NTlhMlx1NTlhNlx1ZmZmZFx1NTlhN1x1NTlhY1x1NTlhZFx1NTliMFx1NTliMVx1NTliM1x1NTliNFx1NTliNVx1NTli''@;'; put 'put ''Nlx1NTliN1x1NTliOFx1NTliYVx1NTliY1x1NTliZFx1NTliZlx1NTljMFx1NTljMVx1NTljMlx1NTljM1x1NTljNFx1NTljNVx1NTljN1x1NTljOFx1NTljOVx1NTljY1x1NTljZFx1NTljZVx1NTljZlx1NTlkNVx1NTlkNlx1NTlkOVx1NTlkYlx1NTlkZVx1NTlkZlx1NTllMFx1NTllMVx1''@;'; put 'put ''NTllMlx1NTllNFx1NTllNlx1NTllN1x1NTllOVx1NTllYVx1NTllYlx1NTllZFx1NTllZVx1NTllZlx1NTlmMFx1NTlmMVx1NTlmMlx1NTlmM1x1NTlmNFx1NTlmNVx1NTlmNlx1NTlmN1x1NTlmOFx1NTlmYVx1NTlmY1x1NTlmZFx1NTlmZVx1NWEwMFx1NWEwMlx1NWEwYVx1NWEwYlx1NWEw''@;'; put 'put ''ZFx1NWEwZVx1NWEwZlx1NWExMFx1NWExMlx1NWExNFx1NWExNVx1NWExNlx1NWExN1x1NWExOVx1NWExYVx1NWExYlx1NWExZFx1NWExZVx1NWEyMVx1NWEyMlx1NWEyNFx1NWEyNlx1NWEyN1x1NWEyOFx1NWEyYVx1NWEyYlx1NWEyY1x1NWEyZFx1NWEyZVx1NWEyZlx1NWEzMFx1NWEzM1x1''@;'; put 'put ''NWEzNVx1NWEzN1x1NWEzOFx1NWEzOVx1NWEzYVx1NWEzYlx1NWEzZFx1NWEzZVx1NWEzZlx1NWE0MVx1NWE0Mlx1NWE0M1x1NWE0NFx1NWE0NVx1NWE0N1x1NWE0OFx1NWE0Ylx1NWE0Y1x1NWE0ZFx1NWE0ZVx1NWE0Zlx1NWE1MFx1NWE1MVx1NWE1Mlx1NWE1M1x1NWE1NFx1NWE1Nlx1NWE1''@;'; put 'put ''N1x1NWE1OFx1NWE1OVx1NWE1Ylx1NWE1Y1x1NWE1ZFx1NWE1ZVx1NWE1Zlx1NWE2MFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzEzOF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTM4XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzEzOF1bc11dPTM1MzI4K3MsaFszNTMyOCtzXT1jWzEzOF1b''@;'; put 'put ''c10pO2ZvcihjWzEzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWE2MVx1NWE2M1x1NWE2NFx1NWE2NVx1NWE2Nlx1NWE2OFx1NWE2OVx1NWE2Ylx1NWE2Y1x1NWE2ZFx1NWE2ZVx1NWE2Zlx1NWE3MFx1NWE3MVx1NWE3Mlx1NWE3''@;'; put 'put ''M1x1NWE3OFx1NWE3OVx1NWE3Ylx1NWE3Y1x1NWE3ZFx1NWE3ZVx1NWE4MFx1NWE4MVx1NWE4Mlx1NWE4M1x1NWE4NFx1NWE4NVx1NWE4Nlx1NWE4N1x1NWE4OFx1NWE4OVx1NWE4YVx1NWE4Ylx1NWE4Y1x1NWE4ZFx1NWE4ZVx1NWE4Zlx1NWE5MFx1NWE5MVx1NWE5M1x1NWE5NFx1NWE5NVx1''@;'; put 'put ''NWE5Nlx1NWE5N1x1NWE5OFx1NWE5OVx1NWE5Y1x1NWE5ZFx1NWE5ZVx1NWE5Zlx1NWFhMFx1NWFhMVx1NWFhMlx1NWFhM1x1NWFhNFx1NWFhNVx1NWFhNlx1NWFhN1x1NWFhOFx1NWFhOVx1NWFhYlx1NWFhY1x1ZmZmZFx1NWFhZFx1NWFhZVx1NWFhZlx1NWFiMFx1NWFiMVx1NWFiNFx1NWFi''@;'; put 'put ''Nlx1NWFiN1x1NWFiOVx1NWFiYVx1NWFiYlx1NWFiY1x1NWFiZFx1NWFiZlx1NWFjMFx1NWFjM1x1NWFjNFx1NWFjNVx1NWFjNlx1NWFjN1x1NWFjOFx1NWFjYVx1NWFjYlx1NWFjZFx1NWFjZVx1NWFjZlx1NWFkMFx1NWFkMVx1NWFkM1x1NWFkNVx1NWFkN1x1NWFkOVx1NWFkYVx1NWFkYlx1''@;'; put 'put ''NWFkZFx1NWFkZVx1NWFkZlx1NWFlMlx1NWFlNFx1NWFlNVx1NWFlN1x1NWFlOFx1NWFlYVx1NWFlY1x1NWFlZFx1NWFlZVx1NWFlZlx1NWFmMFx1NWFmMlx1NWFmM1x1NWFmNFx1NWFmNVx1NWFmNlx1NWFmN1x1NWFmOFx1NWFmOVx1NWFmYVx1NWFmYlx1NWFmY1x1NWFmZFx1NWFmZVx1NWFm''@;'; put 'put ''Zlx1NWIwMFx1NWIwMVx1NWIwMlx1NWIwM1x1NWIwNFx1NWIwNVx1NWIwNlx1NWIwN1x1NWIwOFx1NWIwYVx1NWIwYlx1NWIwY1x1NWIwZFx1NWIwZVx1NWIwZlx1NWIxMFx1NWIxMVx1NWIxMlx1NWIxM1x1NWIxNFx1NWIxNVx1NWIxOFx1NWIxOVx1NWIxYVx1NWIxYlx1NWIxY1x1NWIxZFx1''@;'; put 'put ''NWIxZVx1NWIxZlx1NWIyMFx1NWIyMVx1NWIyMlx1NWIyM1x1NWIyNFx1NWIyNVx1NWIyNlx1NWIyN1x1NWIyOFx1NWIyOVx1NWIyYVx1NWIyYlx1NWIyY1x1NWIyZFx1NWIyZVx1NWIyZlx1NWIzMFx1NWIzMVx1NWIzM1x1NWIzNVx1NWIzNlx1NWIzOFx1NWIzOVx1NWIzYVx1NWIzYlx1NWIz''@;'; put 'put ''Y1x1NWIzZFx1NWIzZVx1NWIzZlx1NWI0MVx1NWI0Mlx1NWI0M1x1NWI0NFx1NWI0NVx1NWI0Nlx1NWI0N1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzEzOV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTM5XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzEzOV1bc11dPTM1NTg0K3MsaFszNTU4''@;'; put 'put ''NCtzXT1jWzEzOV1bc10pO2ZvcihjWzE0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI0OFx1NWI0OVx1NWI0YVx1NWI0Ylx1NWI0Y1x1NWI0ZFx1NWI0ZVx1NWI0Zlx1NWI1Mlx1NWI1Nlx1NWI1ZVx1NWI2MFx1NWI2MVx1NWI2''@;'; put 'put ''N1x1NWI2OFx1NWI2Ylx1NWI2ZFx1NWI2ZVx1NWI2Zlx1NWI3Mlx1NWI3NFx1NWI3Nlx1NWI3N1x1NWI3OFx1NWI3OVx1NWI3Ylx1NWI3Y1x1NWI3ZVx1NWI3Zlx1NWI4Mlx1NWI4Nlx1NWI4YVx1NWI4ZFx1NWI4ZVx1NWI5MFx1NWI5MVx1NWI5Mlx1NWI5NFx1NWI5Nlx1NWI5Zlx1NWJhN1x1''@;'; put 'put ''NWJhOFx1NWJhOVx1NWJhY1x1NWJhZFx1NWJhZVx1NWJhZlx1NWJiMVx1NWJiMlx1NWJiN1x1NWJiYVx1NWJiYlx1NWJiY1x1NWJjMFx1NWJjMVx1NWJjM1x1NWJjOFx1NWJjOVx1NWJjYVx1NWJjYlx1NWJjZFx1NWJjZVx1NWJjZlx1ZmZmZFx1NWJkMVx1NWJkNFx1NWJkNVx1NWJkNlx1NWJk''@;'; put 'put ''N1x1NWJkOFx1NWJkOVx1NWJkYVx1NWJkYlx1NWJkY1x1NWJlMFx1NWJlMlx1NWJlM1x1NWJlNlx1NWJlN1x1NWJlOVx1NWJlYVx1NWJlYlx1NWJlY1x1NWJlZFx1NWJlZlx1NWJmMVx1NWJmMlx1NWJmM1x1NWJmNFx1NWJmNVx1NWJmNlx1NWJmN1x1NWJmZFx1NWJmZVx1NWMwMFx1NWMwMlx1''@;'; put 'put ''NWMwM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwYlx1NWMwY1x1NWMwZFx1NWMwZVx1NWMxMFx1NWMxMlx1NWMxM1x1NWMxN1x1NWMxOVx1NWMxYlx1NWMxZVx1NWMxZlx1NWMyMFx1NWMyMVx1NWMyM1x1NWMyNlx1NWMyOFx1NWMyOVx1NWMyYVx1NWMyYlx1NWMyZFx1NWMyZVx1NWMyZlx1NWMz''@;'; put 'put ''MFx1NWMzMlx1NWMzM1x1NWMzNVx1NWMzNlx1NWMzN1x1NWM0M1x1NWM0NFx1NWM0Nlx1NWM0N1x1NWM0Y1x1NWM0ZFx1NWM1Mlx1NWM1M1x1NWM1NFx1NWM1Nlx1NWM1N1x1NWM1OFx1NWM1YVx1NWM1Ylx1NWM1Y1x1NWM1ZFx1NWM1Zlx1NWM2Mlx1NWM2NFx1NWM2N1x1NWM2OFx1NWM2OVx1''@;'; put 'put ''NWM2YVx1NWM2Ylx1NWM2Y1x1NWM2ZFx1NWM3MFx1NWM3Mlx1NWM3M1x1NWM3NFx1NWM3NVx1NWM3Nlx1NWM3N1x1NWM3OFx1NWM3Ylx1NWM3Y1x1NWM3ZFx1NWM3ZVx1NWM4MFx1NWM4M1x1NWM4NFx1NWM4NVx1NWM4Nlx1NWM4N1x1NWM4OVx1NWM4YVx1NWM4Ylx1NWM4ZVx1NWM4Zlx1NWM5''@;'; put 'put ''Mlx1NWM5M1x1NWM5NVx1NWM5ZFx1NWM5ZVx1NWM5Zlx1NWNhMFx1NWNhMVx1NWNhNFx1NWNhNVx1NWNhNlx1NWNhN1x1NWNhOFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE0MF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTQwXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE0MF1bc11dPTM1''@;'; put 'put ''ODQwK3MsaFszNTg0MCtzXT1jWzE0MF1bc10pO2ZvcihjWzE0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWNhYVx1NWNhZVx1NWNhZlx1NWNiMFx1NWNiMlx1NWNiNFx1NWNiNlx1NWNiOVx1NWNiYVx1NWNiYlx1NWNiY1x1NWNi''@;'; put 'put ''ZVx1NWNjMFx1NWNjMlx1NWNjM1x1NWNjNVx1NWNjNlx1NWNjN1x1NWNjOFx1NWNjOVx1NWNjYVx1NWNjY1x1NWNjZFx1NWNjZVx1NWNjZlx1NWNkMFx1NWNkMVx1NWNkM1x1NWNkNFx1NWNkNVx1NWNkNlx1NWNkN1x1NWNkOFx1NWNkYVx1NWNkYlx1NWNkY1x1NWNkZFx1NWNkZVx1NWNkZlx1''@;'; put 'put ''NWNlMFx1NWNlMlx1NWNlM1x1NWNlN1x1NWNlOVx1NWNlYlx1NWNlY1x1NWNlZVx1NWNlZlx1NWNmMVx1NWNmMlx1NWNmM1x1NWNmNFx1NWNmNVx1NWNmNlx1NWNmN1x1NWNmOFx1NWNmOVx1NWNmYVx1NWNmY1x1NWNmZFx1NWNmZVx1NWNmZlx1NWQwMFx1ZmZmZFx1NWQwMVx1NWQwNFx1NWQw''@;'; put 'put ''NVx1NWQwOFx1NWQwOVx1NWQwYVx1NWQwYlx1NWQwY1x1NWQwZFx1NWQwZlx1NWQxMFx1NWQxMVx1NWQxMlx1NWQxM1x1NWQxNVx1NWQxN1x1NWQxOFx1NWQxOVx1NWQxYVx1NWQxY1x1NWQxZFx1NWQxZlx1NWQyMFx1NWQyMVx1NWQyMlx1NWQyM1x1NWQyNVx1NWQyOFx1NWQyYVx1NWQyYlx1''@;'; put 'put ''NWQyY1x1NWQyZlx1NWQzMFx1NWQzMVx1NWQzMlx1NWQzM1x1NWQzNVx1NWQzNlx1NWQzN1x1NWQzOFx1NWQzOVx1NWQzYVx1NWQzYlx1NWQzY1x1NWQzZlx1NWQ0MFx1NWQ0MVx1NWQ0Mlx1NWQ0M1x1NWQ0NFx1NWQ0NVx1NWQ0Nlx1NWQ0OFx1NWQ0OVx1NWQ0ZFx1NWQ0ZVx1NWQ0Zlx1NWQ1''@;'; put 'put ''MFx1NWQ1MVx1NWQ1Mlx1NWQ1M1x1NWQ1NFx1NWQ1NVx1NWQ1Nlx1NWQ1N1x1NWQ1OVx1NWQ1YVx1NWQ1Y1x1NWQ1ZVx1NWQ1Zlx1NWQ2MFx1NWQ2MVx1NWQ2Mlx1NWQ2M1x1NWQ2NFx1NWQ2NVx1NWQ2Nlx1NWQ2N1x1NWQ2OFx1NWQ2YVx1NWQ2ZFx1NWQ2ZVx1NWQ3MFx1NWQ3MVx1NWQ3Mlx1''@;'; put 'put ''NWQ3M1x1NWQ3NVx1NWQ3Nlx1NWQ3N1x1NWQ3OFx1NWQ3OVx1NWQ3YVx1NWQ3Ylx1NWQ3Y1x1NWQ3ZFx1NWQ3ZVx1NWQ3Zlx1NWQ4MFx1NWQ4MVx1NWQ4M1x1NWQ4NFx1NWQ4NVx1NWQ4Nlx1NWQ4N1x1NWQ4OFx1NWQ4OVx1NWQ4YVx1NWQ4Ylx1NWQ4Y1x1NWQ4ZFx1NWQ4ZVx1NWQ4Zlx1NWQ5''@;'; put 'put ''MFx1NWQ5MVx1NWQ5Mlx1NWQ5M1x1NWQ5NFx1NWQ5NVx1NWQ5Nlx1NWQ5N1x1NWQ5OFx1NWQ5YVx1NWQ5Ylx1NWQ5Y1x1NWQ5ZVx1NWQ5Zlx1NWRhMFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE0MV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTQxXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtj''@;'; put 'put ''WzE0MV1bc11dPTM2MDk2K3MsaFszNjA5NitzXT1jWzE0MV1bc10pO2ZvcihjWzE0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWRhMVx1NWRhMlx1NWRhM1x1NWRhNFx1NWRhNVx1NWRhNlx1NWRhN1x1NWRhOFx1NWRhOVx1NWRh''@;'; put 'put ''YVx1NWRhYlx1NWRhY1x1NWRhZFx1NWRhZVx1NWRhZlx1NWRiMFx1NWRiMVx1NWRiMlx1NWRiM1x1NWRiNFx1NWRiNVx1NWRiNlx1NWRiOFx1NWRiOVx1NWRiYVx1NWRiYlx1NWRiY1x1NWRiZFx1NWRiZVx1NWRiZlx1NWRjMFx1NWRjMVx1NWRjMlx1NWRjM1x1NWRjNFx1NWRjNlx1NWRjN1x1''@;'; put 'put ''NWRjOFx1NWRjOVx1NWRjYVx1NWRjYlx1NWRjY1x1NWRjZVx1NWRjZlx1NWRkMFx1NWRkMVx1NWRkMlx1NWRkM1x1NWRkNFx1NWRkNVx1NWRkNlx1NWRkN1x1NWRkOFx1NWRkOVx1NWRkYVx1NWRkY1x1NWRkZlx1NWRlMFx1NWRlM1x1NWRlNFx1NWRlYVx1NWRlY1x1NWRlZFx1ZmZmZFx1NWRm''@;'; put 'put ''MFx1NWRmNVx1NWRmNlx1NWRmOFx1NWRmOVx1NWRmYVx1NWRmYlx1NWRmY1x1NWRmZlx1NWUwMFx1NWUwNFx1NWUwN1x1NWUwOVx1NWUwYVx1NWUwYlx1NWUwZFx1NWUwZVx1NWUxMlx1NWUxM1x1NWUxN1x1NWUxZVx1NWUxZlx1NWUyMFx1NWUyMVx1NWUyMlx1NWUyM1x1NWUyNFx1NWUyNVx1''@;'; put 'put ''NWUyOFx1NWUyOVx1NWUyYVx1NWUyYlx1NWUyY1x1NWUyZlx1NWUzMFx1NWUzMlx1NWUzM1x1NWUzNFx1NWUzNVx1NWUzNlx1NWUzOVx1NWUzYVx1NWUzZVx1NWUzZlx1NWU0MFx1NWU0MVx1NWU0M1x1NWU0Nlx1NWU0N1x1NWU0OFx1NWU0OVx1NWU0YVx1NWU0Ylx1NWU0ZFx1NWU0ZVx1NWU0''@;'; put 'put ''Zlx1NWU1MFx1NWU1MVx1NWU1Mlx1NWU1M1x1NWU1Nlx1NWU1N1x1NWU1OFx1NWU1OVx1NWU1YVx1NWU1Y1x1NWU1ZFx1NWU1Zlx1NWU2MFx1NWU2M1x1NWU2NFx1NWU2NVx1NWU2Nlx1NWU2N1x1NWU2OFx1NWU2OVx1NWU2YVx1NWU2Ylx1NWU2Y1x1NWU2ZFx1NWU2ZVx1NWU2Zlx1NWU3MFx1''@;'; put 'put ''NWU3MVx1NWU3NVx1NWU3N1x1NWU3OVx1NWU3ZVx1NWU4MVx1NWU4Mlx1NWU4M1x1NWU4NVx1NWU4OFx1NWU4OVx1NWU4Y1x1NWU4ZFx1NWU4ZVx1NWU5Mlx1NWU5OFx1NWU5Ylx1NWU5ZFx1NWVhMVx1NWVhMlx1NWVhM1x1NWVhNFx1NWVhOFx1NWVhOVx1NWVhYVx1NWVhYlx1NWVhY1x1NWVh''@;'; put 'put ''ZVx1NWVhZlx1NWViMFx1NWViMVx1NWViMlx1NWViNFx1NWViYVx1NWViYlx1NWViY1x1NWViZFx1NWViZlx1NWVjMFx1NWVjMVx1NWVjMlx1NWVjM1x1NWVjNFx1NWVjNVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE0Ml0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTQyXVtzXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoeVtjWzE0Ml1bc11dPTM2MzUyK3MsaFszNjM1MitzXT1jWzE0Ml1bc10pO2ZvcihjWzE0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWVjNlx1NWVjN1x1NWVjOFx1NWVjYlx1NWVjY1x1NWVjZFx1NWVjZVx1NWVj''@;'; put 'put ''Zlx1NWVkMFx1NWVkNFx1NWVkNVx1NWVkN1x1NWVkOFx1NWVkOVx1NWVkYVx1NWVkY1x1NWVkZFx1NWVkZVx1NWVkZlx1NWVlMFx1NWVlMVx1NWVlMlx1NWVlM1x1NWVlNFx1NWVlNVx1NWVlNlx1NWVlN1x1NWVlOVx1NWVlYlx1NWVlY1x1NWVlZFx1NWVlZVx1NWVlZlx1NWVmMFx1NWVmMVx1''@;'; put 'put ''NWVmMlx1NWVmM1x1NWVmNVx1NWVmOFx1NWVmOVx1NWVmYlx1NWVmY1x1NWVmZFx1NWYwNVx1NWYwNlx1NWYwN1x1NWYwOVx1NWYwY1x1NWYwZFx1NWYwZVx1NWYxMFx1NWYxMlx1NWYxNFx1NWYxNlx1NWYxOVx1NWYxYVx1NWYxY1x1NWYxZFx1NWYxZVx1NWYyMVx1NWYyMlx1NWYyM1x1NWYy''@;'; put 'put ''NFx1ZmZmZFx1NWYyOFx1NWYyYlx1NWYyY1x1NWYyZVx1NWYzMFx1NWYzMlx1NWYzM1x1NWYzNFx1NWYzNVx1NWYzNlx1NWYzN1x1NWYzOFx1NWYzYlx1NWYzZFx1NWYzZVx1NWYzZlx1NWY0MVx1NWY0Mlx1NWY0M1x1NWY0NFx1NWY0NVx1NWY0Nlx1NWY0N1x1NWY0OFx1NWY0OVx1NWY0YVx1''@;'; put 'put ''NWY0Ylx1NWY0Y1x1NWY0ZFx1NWY0ZVx1NWY0Zlx1NWY1MVx1NWY1NFx1NWY1OVx1NWY1YVx1NWY1Ylx1NWY1Y1x1NWY1ZVx1NWY1Zlx1NWY2MFx1NWY2M1x1NWY2NVx1NWY2N1x1NWY2OFx1NWY2Ylx1NWY2ZVx1NWY2Zlx1NWY3Mlx1NWY3NFx1NWY3NVx1NWY3Nlx1NWY3OFx1NWY3YVx1NWY3''@;'; put 'put ''ZFx1NWY3ZVx1NWY3Zlx1NWY4M1x1NWY4Nlx1NWY4ZFx1NWY4ZVx1NWY4Zlx1NWY5MVx1NWY5M1x1NWY5NFx1NWY5Nlx1NWY5YVx1NWY5Ylx1NWY5ZFx1NWY5ZVx1NWY5Zlx1NWZhMFx1NWZhMlx1NWZhM1x1NWZhNFx1NWZhNVx1NWZhNlx1NWZhN1x1NWZhOVx1NWZhYlx1NWZhY1x1NWZhZlx1''@;'; put 'put ''NWZiMFx1NWZiMVx1NWZiMlx1NWZiM1x1NWZiNFx1NWZiNlx1NWZiOFx1NWZiOVx1NWZiYVx1NWZiYlx1NWZiZVx1NWZiZlx1NWZjMFx1NWZjMVx1NWZjMlx1NWZjN1x1NWZjOFx1NWZjYVx1NWZjYlx1NWZjZVx1NWZkM1x1NWZkNFx1NWZkNVx1NWZkYVx1NWZkYlx1NWZkY1x1NWZkZVx1NWZk''@;'; put 'put ''Zlx1NWZlMlx1NWZlM1x1NWZlNVx1NWZlNlx1NWZlOFx1NWZlOVx1NWZlY1x1NWZlZlx1NWZmMFx1NWZmMlx1NWZmM1x1NWZmNFx1NWZmNlx1NWZmN1x1NWZmOVx1NWZmYVx1NWZmY1x1NjAwN1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE0M10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTQz''@;'; put 'put ''XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE0M11bc11dPTM2NjA4K3MsaFszNjYwOCtzXT1jWzE0M11bc10pO2ZvcihjWzE0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAwOFx1NjAwOVx1NjAwYlx1NjAwY1x1NjAxMFx1NjAx''@;'; put 'put ''MVx1NjAxM1x1NjAxN1x1NjAxOFx1NjAxYVx1NjAxZVx1NjAxZlx1NjAyMlx1NjAyM1x1NjAyNFx1NjAyY1x1NjAyZFx1NjAyZVx1NjAzMFx1NjAzMVx1NjAzMlx1NjAzM1x1NjAzNFx1NjAzNlx1NjAzN1x1NjAzOFx1NjAzOVx1NjAzYVx1NjAzZFx1NjAzZVx1NjA0MFx1NjA0NFx1NjA0NVx1''@;'; put 'put ''NjA0Nlx1NjA0N1x1NjA0OFx1NjA0OVx1NjA0YVx1NjA0Y1x1NjA0ZVx1NjA0Zlx1NjA1MVx1NjA1M1x1NjA1NFx1NjA1Nlx1NjA1N1x1NjA1OFx1NjA1Ylx1NjA1Y1x1NjA1ZVx1NjA1Zlx1NjA2MFx1NjA2MVx1NjA2NVx1NjA2Nlx1NjA2ZVx1NjA3MVx1NjA3Mlx1NjA3NFx1NjA3NVx1NjA3''@;'; put 'put ''N1x1NjA3ZVx1NjA4MFx1ZmZmZFx1NjA4MVx1NjA4Mlx1NjA4NVx1NjA4Nlx1NjA4N1x1NjA4OFx1NjA4YVx1NjA4Ylx1NjA4ZVx1NjA4Zlx1NjA5MFx1NjA5MVx1NjA5M1x1NjA5NVx1NjA5N1x1NjA5OFx1NjA5OVx1NjA5Y1x1NjA5ZVx1NjBhMVx1NjBhMlx1NjBhNFx1NjBhNVx1NjBhN1x1''@;'; put 'put ''NjBhOVx1NjBhYVx1NjBhZVx1NjBiMFx1NjBiM1x1NjBiNVx1NjBiNlx1NjBiN1x1NjBiOVx1NjBiYVx1NjBiZFx1NjBiZVx1NjBiZlx1NjBjMFx1NjBjMVx1NjBjMlx1NjBjM1x1NjBjNFx1NjBjN1x1NjBjOFx1NjBjOVx1NjBjY1x1NjBjZFx1NjBjZVx1NjBjZlx1NjBkMFx1NjBkMlx1NjBk''@;'; put 'put ''M1x1NjBkNFx1NjBkNlx1NjBkN1x1NjBkOVx1NjBkYlx1NjBkZVx1NjBlMVx1NjBlMlx1NjBlM1x1NjBlNFx1NjBlNVx1NjBlYVx1NjBmMVx1NjBmMlx1NjBmNVx1NjBmN1x1NjBmOFx1NjBmYlx1NjBmY1x1NjBmZFx1NjBmZVx1NjBmZlx1NjEwMlx1NjEwM1x1NjEwNFx1NjEwNVx1NjEwN1x1''@;'; put 'put ''NjEwYVx1NjEwYlx1NjEwY1x1NjExMFx1NjExMVx1NjExMlx1NjExM1x1NjExNFx1NjExNlx1NjExN1x1NjExOFx1NjExOVx1NjExYlx1NjExY1x1NjExZFx1NjExZVx1NjEyMVx1NjEyMlx1NjEyNVx1NjEyOFx1NjEyOVx1NjEyYVx1NjEyY1x1NjEyZFx1NjEyZVx1NjEyZlx1NjEzMFx1NjEz''@;'; put 'put ''MVx1NjEzMlx1NjEzM1x1NjEzNFx1NjEzNVx1NjEzNlx1NjEzN1x1NjEzOFx1NjEzOVx1NjEzYVx1NjEzYlx1NjEzY1x1NjEzZFx1NjEzZVx1NjE0MFx1NjE0MVx1NjE0Mlx1NjE0M1x1NjE0NFx1NjE0NVx1NjE0Nlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE0NF0ubGVuZ3RoOysrcyk2''@;'; put 'put ''NTUzMyE9PWNbMTQ0XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE0NF1bc11dPTM2ODY0K3MsaFszNjg2NCtzXT1jWzE0NF1bc10pO2ZvcihjWzE0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE0N1x1NjE0OVx1NjE0Ylx1NjE0''@;'; put 'put ''ZFx1NjE0Zlx1NjE1MFx1NjE1Mlx1NjE1M1x1NjE1NFx1NjE1Nlx1NjE1N1x1NjE1OFx1NjE1OVx1NjE1YVx1NjE1Ylx1NjE1Y1x1NjE1ZVx1NjE1Zlx1NjE2MFx1NjE2MVx1NjE2M1x1NjE2NFx1NjE2NVx1NjE2Nlx1NjE2OVx1NjE2YVx1NjE2Ylx1NjE2Y1x1NjE2ZFx1NjE2ZVx1NjE2Zlx1''@;'; put 'put ''NjE3MVx1NjE3Mlx1NjE3M1x1NjE3NFx1NjE3Nlx1NjE3OFx1NjE3OVx1NjE3YVx1NjE3Ylx1NjE3Y1x1NjE3ZFx1NjE3ZVx1NjE3Zlx1NjE4MFx1NjE4MVx1NjE4Mlx1NjE4M1x1NjE4NFx1NjE4NVx1NjE4Nlx1NjE4N1x1NjE4OFx1NjE4OVx1NjE4YVx1NjE4Y1x1NjE4ZFx1NjE4Zlx1NjE5''@;'; put 'put ''MFx1NjE5MVx1NjE5Mlx1NjE5M1x1NjE5NVx1ZmZmZFx1NjE5Nlx1NjE5N1x1NjE5OFx1NjE5OVx1NjE5YVx1NjE5Ylx1NjE5Y1x1NjE5ZVx1NjE5Zlx1NjFhMFx1NjFhMVx1NjFhMlx1NjFhM1x1NjFhNFx1NjFhNVx1NjFhNlx1NjFhYVx1NjFhYlx1NjFhZFx1NjFhZVx1NjFhZlx1NjFiMFx1''@;'; put 'put ''NjFiMVx1NjFiMlx1NjFiM1x1NjFiNFx1NjFiNVx1NjFiNlx1NjFiOFx1NjFiOVx1NjFiYVx1NjFiYlx1NjFiY1x1NjFiZFx1NjFiZlx1NjFjMFx1NjFjMVx1NjFjM1x1NjFjNFx1NjFjNVx1NjFjNlx1NjFjN1x1NjFjOVx1NjFjY1x1NjFjZFx1NjFjZVx1NjFjZlx1NjFkMFx1NjFkM1x1NjFk''@;'; put 'put ''NVx1NjFkNlx1NjFkN1x1NjFkOFx1NjFkOVx1NjFkYVx1NjFkYlx1NjFkY1x1NjFkZFx1NjFkZVx1NjFkZlx1NjFlMFx1NjFlMVx1NjFlMlx1NjFlM1x1NjFlNFx1NjFlNVx1NjFlN1x1NjFlOFx1NjFlOVx1NjFlYVx1NjFlYlx1NjFlY1x1NjFlZFx1NjFlZVx1NjFlZlx1NjFmMFx1NjFmMVx1''@;'; put 'put ''NjFmMlx1NjFmM1x1NjFmNFx1NjFmNlx1NjFmN1x1NjFmOFx1NjFmOVx1NjFmYVx1NjFmYlx1NjFmY1x1NjFmZFx1NjFmZVx1NjIwMFx1NjIwMVx1NjIwMlx1NjIwM1x1NjIwNFx1NjIwNVx1NjIwN1x1NjIwOVx1NjIxM1x1NjIxNFx1NjIxOVx1NjIxY1x1NjIxZFx1NjIxZVx1NjIyMFx1NjIy''@;'; put 'put ''M1x1NjIyNlx1NjIyN1x1NjIyOFx1NjIyOVx1NjIyYlx1NjIyZFx1NjIyZlx1NjIzMFx1NjIzMVx1NjIzMlx1NjIzNVx1NjIzNlx1NjIzOFx1NjIzOVx1NjIzYVx1NjIzYlx1NjIzY1x1NjI0Mlx1NjI0NFx1NjI0NVx1NjI0Nlx1NjI0YVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE0NV0u''@;'; put 'put ''bGVuZ3RoOysrcyk2NTUzMyE9PWNbMTQ1XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE0NV1bc11dPTM3MTIwK3MsaFszNzEyMCtzXT1jWzE0NV1bc10pO2ZvcihjWzE0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjI0Zlx1NjI1''@;'; put 'put ''MFx1NjI1NVx1NjI1Nlx1NjI1N1x1NjI1OVx1NjI1YVx1NjI1Y1x1NjI1ZFx1NjI1ZVx1NjI1Zlx1NjI2MFx1NjI2MVx1NjI2Mlx1NjI2NFx1NjI2NVx1NjI2OFx1NjI3MVx1NjI3Mlx1NjI3NFx1NjI3NVx1NjI3N1x1NjI3OFx1NjI3YVx1NjI3Ylx1NjI3ZFx1NjI4MVx1NjI4Mlx1NjI4M1x1''@;'; put 'put ''NjI4NVx1NjI4Nlx1NjI4N1x1NjI4OFx1NjI4Ylx1NjI4Y1x1NjI4ZFx1NjI4ZVx1NjI4Zlx1NjI5MFx1NjI5NFx1NjI5OVx1NjI5Y1x1NjI5ZFx1NjI5ZVx1NjJhM1x1NjJhNlx1NjJhN1x1NjJhOVx1NjJhYVx1NjJhZFx1NjJhZVx1NjJhZlx1NjJiMFx1NjJiMlx1NjJiM1x1NjJiNFx1NjJi''@;'; put 'put ''Nlx1NjJiN1x1NjJiOFx1NjJiYVx1NjJiZVx1NjJjMFx1NjJjMVx1ZmZmZFx1NjJjM1x1NjJjYlx1NjJjZlx1NjJkMVx1NjJkNVx1NjJkZFx1NjJkZVx1NjJlMFx1NjJlMVx1NjJlNFx1NjJlYVx1NjJlYlx1NjJmMFx1NjJmMlx1NjJmNVx1NjJmOFx1NjJmOVx1NjJmYVx1NjJmYlx1NjMwMFx1''@;'; put 'put ''NjMwM1x1NjMwNFx1NjMwNVx1NjMwNlx1NjMwYVx1NjMwYlx1NjMwY1x1NjMwZFx1NjMwZlx1NjMxMFx1NjMxMlx1NjMxM1x1NjMxNFx1NjMxNVx1NjMxN1x1NjMxOFx1NjMxOVx1NjMxY1x1NjMyNlx1NjMyN1x1NjMyOVx1NjMyY1x1NjMyZFx1NjMyZVx1NjMzMFx1NjMzMVx1NjMzM1x1NjMz''@;'; put 'put ''NFx1NjMzNVx1NjMzNlx1NjMzN1x1NjMzOFx1NjMzYlx1NjMzY1x1NjMzZVx1NjMzZlx1NjM0MFx1NjM0MVx1NjM0NFx1NjM0N1x1NjM0OFx1NjM0YVx1NjM1MVx1NjM1Mlx1NjM1M1x1NjM1NFx1NjM1Nlx1NjM1N1x1NjM1OFx1NjM1OVx1NjM1YVx1NjM1Ylx1NjM1Y1x1NjM1ZFx1NjM2MFx1''@;'; put 'put ''NjM2NFx1NjM2NVx1NjM2Nlx1NjM2OFx1NjM2YVx1NjM2Ylx1NjM2Y1x1NjM2Zlx1NjM3MFx1NjM3Mlx1NjM3M1x1NjM3NFx1NjM3NVx1NjM3OFx1NjM3OVx1NjM3Y1x1NjM3ZFx1NjM3ZVx1NjM3Zlx1NjM4MVx1NjM4M1x1NjM4NFx1NjM4NVx1NjM4Nlx1NjM4Ylx1NjM4ZFx1NjM5MVx1NjM5''@;'; put 'put ''M1x1NjM5NFx1NjM5NVx1NjM5N1x1NjM5OVx1NjM5YVx1NjM5Ylx1NjM5Y1x1NjM5ZFx1NjM5ZVx1NjM5Zlx1NjNhMVx1NjNhNFx1NjNhNlx1NjNhYlx1NjNhZlx1NjNiMVx1NjNiMlx1NjNiNVx1NjNiNlx1NjNiOVx1NjNiYlx1NjNiZFx1NjNiZlx1NjNjMFx1ZmZmZCIuc3BsaXQoIiIpLHM9''@;'; put 'put ''MDtzIT1jWzE0Nl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTQ2XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE0Nl1bc11dPTM3Mzc2K3MsaFszNzM3NitzXT1jWzE0Nl1bc10pO2ZvcihjWzE0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1NjNjMVx1NjNjMlx1NjNjM1x1NjNjNVx1NjNjN1x1NjNjOFx1NjNjYVx1NjNjYlx1NjNjY1x1NjNkMVx1NjNkM1x1NjNkNFx1NjNkNVx1NjNkN1x1NjNkOFx1NjNkOVx1NjNkYVx1NjNkYlx1NjNkY1x1NjNkZFx1NjNkZlx1NjNlMlx1NjNlNFx1NjNlNVx1NjNlNlx1NjNlN1x1NjNlOFx1''@;'; put 'put ''NjNlYlx1NjNlY1x1NjNlZVx1NjNlZlx1NjNmMFx1NjNmMVx1NjNmM1x1NjNmNVx1NjNmN1x1NjNmOVx1NjNmYVx1NjNmYlx1NjNmY1x1NjNmZVx1NjQwM1x1NjQwNFx1NjQwNlx1NjQwN1x1NjQwOFx1NjQwOVx1NjQwYVx1NjQwZFx1NjQwZVx1NjQxMVx1NjQxMlx1NjQxNVx1NjQxNlx1NjQx''@;'; put 'put ''N1x1NjQxOFx1NjQxOVx1NjQxYVx1NjQxZFx1NjQxZlx1NjQyMlx1NjQyM1x1NjQyNFx1ZmZmZFx1NjQyNVx1NjQyN1x1NjQyOFx1NjQyOVx1NjQyYlx1NjQyZVx1NjQyZlx1NjQzMFx1NjQzMVx1NjQzMlx1NjQzM1x1NjQzNVx1NjQzNlx1NjQzN1x1NjQzOFx1NjQzOVx1NjQzYlx1NjQzY1x1''@;'; put 'put ''NjQzZVx1NjQ0MFx1NjQ0Mlx1NjQ0M1x1NjQ0OVx1NjQ0Ylx1NjQ0Y1x1NjQ0ZFx1NjQ0ZVx1NjQ0Zlx1NjQ1MFx1NjQ1MVx1NjQ1M1x1NjQ1NVx1NjQ1Nlx1NjQ1N1x1NjQ1OVx1NjQ1YVx1NjQ1Ylx1NjQ1Y1x1NjQ1ZFx1NjQ1Zlx1NjQ2MFx1NjQ2MVx1NjQ2Mlx1NjQ2M1x1NjQ2NFx1NjQ2''@;'; put 'put ''NVx1NjQ2Nlx1NjQ2OFx1NjQ2YVx1NjQ2Ylx1NjQ2Y1x1NjQ2ZVx1NjQ2Zlx1NjQ3MFx1NjQ3MVx1NjQ3Mlx1NjQ3M1x1NjQ3NFx1NjQ3NVx1NjQ3Nlx1NjQ3N1x1NjQ3Ylx1NjQ3Y1x1NjQ3ZFx1NjQ3ZVx1NjQ3Zlx1NjQ4MFx1NjQ4MVx1NjQ4M1x1NjQ4Nlx1NjQ4OFx1NjQ4OVx1NjQ4YVx1''@;'; put 'put ''NjQ4Ylx1NjQ4Y1x1NjQ4ZFx1NjQ4ZVx1NjQ4Zlx1NjQ5MFx1NjQ5M1x1NjQ5NFx1NjQ5N1x1NjQ5OFx1NjQ5YVx1NjQ5Ylx1NjQ5Y1x1NjQ5ZFx1NjQ5Zlx1NjRhMFx1NjRhMVx1NjRhMlx1NjRhM1x1NjRhNVx1NjRhNlx1NjRhN1x1NjRhOFx1NjRhYVx1NjRhYlx1NjRhZlx1NjRiMVx1NjRi''@;'; put 'put ''Mlx1NjRiM1x1NjRiNFx1NjRiNlx1NjRiOVx1NjRiYlx1NjRiZFx1NjRiZVx1NjRiZlx1NjRjMVx1NjRjM1x1NjRjNFx1NjRjNlx1NjRjN1x1NjRjOFx1NjRjOVx1NjRjYVx1NjRjYlx1NjRjY1x1NjRjZlx1NjRkMVx1NjRkM1x1NjRkNFx1NjRkNVx1NjRkNlx1NjRkOVx1NjRkYVx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLHM9MDtzIT1jWzE0N10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTQ3XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE0N11bc11dPTM3NjMyK3MsaFszNzYzMitzXT1jWzE0N11bc10pO2ZvcihjWzE0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1NjRkYlx1NjRkY1x1NjRkZFx1NjRkZlx1NjRlMFx1NjRlMVx1NjRlM1x1NjRlNVx1NjRlN1x1NjRlOFx1NjRlOVx1NjRlYVx1NjRlYlx1NjRlY1x1NjRlZFx1NjRlZVx1NjRlZlx1NjRmMFx1NjRmMVx1NjRmMlx1NjRmM1x1NjRmNFx1NjRmNVx1NjRmNlx1NjRmN1x1''@;'; put 'put ''NjRmOFx1NjRmOVx1NjRmYVx1NjRmYlx1NjRmY1x1NjRmZFx1NjRmZVx1NjRmZlx1NjUwMVx1NjUwMlx1NjUwM1x1NjUwNFx1NjUwNVx1NjUwNlx1NjUwN1x1NjUwOFx1NjUwYVx1NjUwYlx1NjUwY1x1NjUwZFx1NjUwZVx1NjUwZlx1NjUxMFx1NjUxMVx1NjUxM1x1NjUxNFx1NjUxNVx1NjUx''@;'; put 'put ''Nlx1NjUxN1x1NjUxOVx1NjUxYVx1NjUxYlx1NjUxY1x1NjUxZFx1NjUxZVx1NjUxZlx1NjUyMFx1NjUyMVx1ZmZmZFx1NjUyMlx1NjUyM1x1NjUyNFx1NjUyNlx1NjUyN1x1NjUyOFx1NjUyOVx1NjUyYVx1NjUyY1x1NjUyZFx1NjUzMFx1NjUzMVx1NjUzMlx1NjUzM1x1NjUzN1x1NjUzYVx1''@;'; put 'put ''NjUzY1x1NjUzZFx1NjU0MFx1NjU0MVx1NjU0Mlx1NjU0M1x1NjU0NFx1NjU0Nlx1NjU0N1x1NjU0YVx1NjU0Ylx1NjU0ZFx1NjU0ZVx1NjU1MFx1NjU1Mlx1NjU1M1x1NjU1NFx1NjU1N1x1NjU1OFx1NjU1YVx1NjU1Y1x1NjU1Zlx1NjU2MFx1NjU2MVx1NjU2NFx1NjU2NVx1NjU2N1x1NjU2''@;'; put 'put ''OFx1NjU2OVx1NjU2YVx1NjU2ZFx1NjU2ZVx1NjU2Zlx1NjU3MVx1NjU3M1x1NjU3NVx1NjU3Nlx1NjU3OFx1NjU3OVx1NjU3YVx1NjU3Ylx1NjU3Y1x1NjU3ZFx1NjU3ZVx1NjU3Zlx1NjU4MFx1NjU4MVx1NjU4Mlx1NjU4M1x1NjU4NFx1NjU4NVx1NjU4Nlx1NjU4OFx1NjU4OVx1NjU4YVx1''@;'; put 'put ''NjU4ZFx1NjU4ZVx1NjU4Zlx1NjU5Mlx1NjU5NFx1NjU5NVx1NjU5Nlx1NjU5OFx1NjU5YVx1NjU5ZFx1NjU5ZVx1NjVhMFx1NjVhMlx1NjVhM1x1NjVhNlx1NjVhOFx1NjVhYVx1NjVhY1x1NjVhZVx1NjViMVx1NjViMlx1NjViM1x1NjViNFx1NjViNVx1NjViNlx1NjViN1x1NjViOFx1NjVi''@;'; put 'put ''YVx1NjViYlx1NjViZVx1NjViZlx1NjVjMFx1NjVjMlx1NjVjN1x1NjVjOFx1NjVjOVx1NjVjYVx1NjVjZFx1NjVkMFx1NjVkMVx1NjVkM1x1NjVkNFx1NjVkNVx1NjVkOFx1NjVkOVx1NjVkYVx1NjVkYlx1NjVkY1x1NjVkZFx1NjVkZVx1NjVkZlx1NjVlMVx1NjVlM1x1NjVlNFx1NjVlYVx1''@;'; put 'put ''NjVlYlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE0OF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTQ4XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE0OF1bc11dPTM3ODg4K3MsaFszNzg4OCtzXT1jWzE0OF1bc10pO2ZvcihjWzE0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjVmMlx1NjVmM1x1NjVmNFx1NjVmNVx1NjVmOFx1NjVmOVx1NjVmYlx1NjVmY1x1NjVmZFx1NjVmZVx1NjVmZlx1NjYwMVx1NjYwNFx1NjYwNVx1NjYwN1x1NjYwOFx1NjYwOVx1NjYwYlx1NjYwZFx1NjYxMFx1NjYxMVx1NjYxMlx1NjYxNlx1''@;'; put 'put ''NjYxN1x1NjYxOFx1NjYxYVx1NjYxYlx1NjYxY1x1NjYxZVx1NjYyMVx1NjYyMlx1NjYyM1x1NjYyNFx1NjYyNlx1NjYyOVx1NjYyYVx1NjYyYlx1NjYyY1x1NjYyZVx1NjYzMFx1NjYzMlx1NjYzM1x1NjYzN1x1NjYzOFx1NjYzOVx1NjYzYVx1NjYzYlx1NjYzZFx1NjYzZlx1NjY0MFx1NjY0''@;'; put 'put ''Mlx1NjY0NFx1NjY0NVx1NjY0Nlx1NjY0N1x1NjY0OFx1NjY0OVx1NjY0YVx1NjY0ZFx1NjY0ZVx1NjY1MFx1NjY1MVx1NjY1OFx1ZmZmZFx1NjY1OVx1NjY1Ylx1NjY1Y1x1NjY1ZFx1NjY1ZVx1NjY2MFx1NjY2Mlx1NjY2M1x1NjY2NVx1NjY2N1x1NjY2OVx1NjY2YVx1NjY2Ylx1NjY2Y1x1''@;'; put 'put ''NjY2ZFx1NjY3MVx1NjY3Mlx1NjY3M1x1NjY3NVx1NjY3OFx1NjY3OVx1NjY3Ylx1NjY3Y1x1NjY3ZFx1NjY3Zlx1NjY4MFx1NjY4MVx1NjY4M1x1NjY4NVx1NjY4Nlx1NjY4OFx1NjY4OVx1NjY4YVx1NjY4Ylx1NjY4ZFx1NjY4ZVx1NjY4Zlx1NjY5MFx1NjY5Mlx1NjY5M1x1NjY5NFx1NjY5''@;'; put 'put ''NVx1NjY5OFx1NjY5OVx1NjY5YVx1NjY5Ylx1NjY5Y1x1NjY5ZVx1NjY5Zlx1NjZhMFx1NjZhMVx1NjZhMlx1NjZhM1x1NjZhNFx1NjZhNVx1NjZhNlx1NjZhOVx1NjZhYVx1NjZhYlx1NjZhY1x1NjZhZFx1NjZhZlx1NjZiMFx1NjZiMVx1NjZiMlx1NjZiM1x1NjZiNVx1NjZiNlx1NjZiN1x1''@;'; put 'put ''NjZiOFx1NjZiYVx1NjZiYlx1NjZiY1x1NjZiZFx1NjZiZlx1NjZjMFx1NjZjMVx1NjZjMlx1NjZjM1x1NjZjNFx1NjZjNVx1NjZjNlx1NjZjN1x1NjZjOFx1NjZjOVx1NjZjYVx1NjZjYlx1NjZjY1x1NjZjZFx1NjZjZVx1NjZjZlx1NjZkMFx1NjZkMVx1NjZkMlx1NjZkM1x1NjZkNFx1NjZk''@;'; put 'put ''NVx1NjZkNlx1NjZkN1x1NjZkOFx1NjZkYVx1NjZkZVx1NjZkZlx1NjZlMFx1NjZlMVx1NjZlMlx1NjZlM1x1NjZlNFx1NjZlNVx1NjZlN1x1NjZlOFx1NjZlYVx1NjZlYlx1NjZlY1x1NjZlZFx1NjZlZVx1NjZlZlx1NjZmMVx1NjZmNVx1NjZmNlx1NjZmOFx1NjZmYVx1NjZmYlx1NjZmZFx1''@;'; put 'put ''NjcwMVx1NjcwMlx1NjcwM1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE0OV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTQ5XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE0OV1bc11dPTM4MTQ0K3MsaFszODE0NCtzXT1jWzE0OV1bc10pO2ZvcihjWzE1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjcwNFx1NjcwNVx1NjcwNlx1NjcwN1x1NjcwY1x1NjcwZVx1NjcwZlx1NjcxMVx1NjcxMlx1NjcxM1x1NjcxNlx1NjcxOFx1NjcxOVx1NjcxYVx1NjcxY1x1NjcxZVx1NjcyMFx1NjcyMVx1NjcyMlx1NjcyM1x1NjcyNFx1''@;'; put 'put ''NjcyNVx1NjcyN1x1NjcyOVx1NjcyZVx1NjczMFx1NjczMlx1NjczM1x1NjczNlx1NjczN1x1NjczOFx1NjczOVx1NjczYlx1NjczY1x1NjczZVx1NjczZlx1Njc0MVx1Njc0NFx1Njc0NVx1Njc0N1x1Njc0YVx1Njc0Ylx1Njc0ZFx1Njc1Mlx1Njc1NFx1Njc1NVx1Njc1N1x1Njc1OFx1Njc1''@;'; put 'put ''OVx1Njc1YVx1Njc1Ylx1Njc1ZFx1Njc2Mlx1Njc2M1x1Njc2NFx1Njc2Nlx1Njc2N1x1Njc2Ylx1Njc2Y1x1Njc2ZVx1Njc3MVx1Njc3NFx1Njc3Nlx1ZmZmZFx1Njc3OFx1Njc3OVx1Njc3YVx1Njc3Ylx1Njc3ZFx1Njc4MFx1Njc4Mlx1Njc4M1x1Njc4NVx1Njc4Nlx1Njc4OFx1Njc4YVx1''@;'; put 'put ''Njc4Y1x1Njc4ZFx1Njc4ZVx1Njc4Zlx1Njc5MVx1Njc5Mlx1Njc5M1x1Njc5NFx1Njc5Nlx1Njc5OVx1Njc5Ylx1Njc5Zlx1NjdhMFx1NjdhMVx1NjdhNFx1NjdhNlx1NjdhOVx1NjdhY1x1NjdhZVx1NjdiMVx1NjdiMlx1NjdiNFx1NjdiOVx1NjdiYVx1NjdiYlx1NjdiY1x1NjdiZFx1Njdi''@;'; put 'put ''ZVx1NjdiZlx1NjdjMFx1NjdjMlx1NjdjNVx1NjdjNlx1NjdjN1x1NjdjOFx1NjdjOVx1NjdjYVx1NjdjYlx1NjdjY1x1NjdjZFx1NjdjZVx1NjdkNVx1NjdkNlx1NjdkN1x1NjdkYlx1NjdkZlx1NjdlMVx1NjdlM1x1NjdlNFx1NjdlNlx1NjdlN1x1NjdlOFx1NjdlYVx1NjdlYlx1NjdlZFx1''@;'; put 'put ''NjdlZVx1NjdmMlx1NjdmNVx1NjdmNlx1NjdmN1x1NjdmOFx1NjdmOVx1NjdmYVx1NjdmYlx1NjdmY1x1NjdmZVx1NjgwMVx1NjgwMlx1NjgwM1x1NjgwNFx1NjgwNlx1NjgwZFx1NjgxMFx1NjgxMlx1NjgxNFx1NjgxNVx1NjgxOFx1NjgxOVx1NjgxYVx1NjgxYlx1NjgxY1x1NjgxZVx1Njgx''@;'; put 'put ''Zlx1NjgyMFx1NjgyMlx1NjgyM1x1NjgyNFx1NjgyNVx1NjgyNlx1NjgyN1x1NjgyOFx1NjgyYlx1NjgyY1x1NjgyZFx1NjgyZVx1NjgyZlx1NjgzMFx1NjgzMVx1NjgzNFx1NjgzNVx1NjgzNlx1NjgzYVx1NjgzYlx1NjgzZlx1Njg0N1x1Njg0Ylx1Njg0ZFx1Njg0Zlx1Njg1Mlx1Njg1Nlx1''@;'; put 'put ''Njg1N1x1Njg1OFx1Njg1OVx1Njg1YVx1Njg1Ylx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE1MF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTUwXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE1MF1bc11dPTM4NDAwK3MsaFszODQwMCtzXT1jWzE1MF1bc10pO2ZvcihjWzE1MV09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njg1Y1x1Njg1ZFx1Njg1ZVx1Njg1Zlx1Njg2YVx1Njg2Y1x1Njg2ZFx1Njg2ZVx1Njg2Zlx1Njg3MFx1Njg3MVx1Njg3Mlx1Njg3M1x1Njg3NVx1Njg3OFx1Njg3OVx1Njg3YVx1Njg3Ylx1Njg3Y1x1''@;'; put 'put ''Njg3ZFx1Njg3ZVx1Njg3Zlx1Njg4MFx1Njg4Mlx1Njg4NFx1Njg4N1x1Njg4OFx1Njg4OVx1Njg4YVx1Njg4Ylx1Njg4Y1x1Njg4ZFx1Njg4ZVx1Njg5MFx1Njg5MVx1Njg5Mlx1Njg5NFx1Njg5NVx1Njg5Nlx1Njg5OFx1Njg5OVx1Njg5YVx1Njg5Ylx1Njg5Y1x1Njg5ZFx1Njg5ZVx1Njg5''@;'; put 'put ''Zlx1NjhhMFx1NjhhMVx1NjhhM1x1NjhhNFx1NjhhNVx1NjhhOVx1NjhhYVx1NjhhYlx1NjhhY1x1NjhhZVx1NjhiMVx1NjhiMlx1NjhiNFx1NjhiNlx1NjhiN1x1NjhiOFx1ZmZmZFx1NjhiOVx1NjhiYVx1NjhiYlx1NjhiY1x1NjhiZFx1NjhiZVx1NjhiZlx1NjhjMVx1NjhjM1x1NjhjNFx1''@;'; put 'put ''NjhjNVx1NjhjNlx1NjhjN1x1NjhjOFx1NjhjYVx1NjhjY1x1NjhjZVx1NjhjZlx1NjhkMFx1NjhkMVx1NjhkM1x1NjhkNFx1NjhkNlx1NjhkN1x1NjhkOVx1NjhkYlx1NjhkY1x1NjhkZFx1NjhkZVx1NjhkZlx1NjhlMVx1NjhlMlx1NjhlNFx1NjhlNVx1NjhlNlx1NjhlN1x1NjhlOFx1Njhl''@;'; put 'put ''OVx1NjhlYVx1NjhlYlx1NjhlY1x1NjhlZFx1NjhlZlx1NjhmMlx1NjhmM1x1NjhmNFx1NjhmNlx1NjhmN1x1NjhmOFx1NjhmYlx1NjhmZFx1NjhmZVx1NjhmZlx1NjkwMFx1NjkwMlx1NjkwM1x1NjkwNFx1NjkwNlx1NjkwN1x1NjkwOFx1NjkwOVx1NjkwYVx1NjkwY1x1NjkwZlx1NjkxMVx1''@;'; put 'put ''NjkxM1x1NjkxNFx1NjkxNVx1NjkxNlx1NjkxN1x1NjkxOFx1NjkxOVx1NjkxYVx1NjkxYlx1NjkxY1x1NjkxZFx1NjkxZVx1NjkyMVx1NjkyMlx1NjkyM1x1NjkyNVx1NjkyNlx1NjkyN1x1NjkyOFx1NjkyOVx1NjkyYVx1NjkyYlx1NjkyY1x1NjkyZVx1NjkyZlx1NjkzMVx1NjkzMlx1Njkz''@;'; put 'put ''M1x1NjkzNVx1NjkzNlx1NjkzN1x1NjkzOFx1NjkzYVx1NjkzYlx1NjkzY1x1NjkzZVx1Njk0MFx1Njk0MVx1Njk0M1x1Njk0NFx1Njk0NVx1Njk0Nlx1Njk0N1x1Njk0OFx1Njk0OVx1Njk0YVx1Njk0Ylx1Njk0Y1x1Njk0ZFx1Njk0ZVx1Njk0Zlx1Njk1MFx1Njk1MVx1Njk1Mlx1Njk1M1x1''@;'; put 'put ''Njk1NVx1Njk1Nlx1Njk1OFx1Njk1OVx1Njk1Ylx1Njk1Y1x1Njk1Zlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE1MV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTUxXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE1MV1bc11dPTM4NjU2K3MsaFszODY1NitzXT1jWzE1MV1bc10pO2Zvcihj''@;'; put 'put ''WzE1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njk2MVx1Njk2Mlx1Njk2NFx1Njk2NVx1Njk2N1x1Njk2OFx1Njk2OVx1Njk2YVx1Njk2Y1x1Njk2ZFx1Njk2Zlx1Njk3MFx1Njk3Mlx1Njk3M1x1Njk3NFx1Njk3NVx1Njk3Nlx1''@;'; put 'put ''Njk3YVx1Njk3Ylx1Njk3ZFx1Njk3ZVx1Njk3Zlx1Njk4MVx1Njk4M1x1Njk4NVx1Njk4YVx1Njk4Ylx1Njk4Y1x1Njk4ZVx1Njk4Zlx1Njk5MFx1Njk5MVx1Njk5Mlx1Njk5M1x1Njk5Nlx1Njk5N1x1Njk5OVx1Njk5YVx1Njk5ZFx1Njk5ZVx1Njk5Zlx1NjlhMFx1NjlhMVx1NjlhMlx1Njlh''@;'; put 'put ''M1x1NjlhNFx1NjlhNVx1NjlhNlx1NjlhOVx1NjlhYVx1NjlhY1x1NjlhZVx1NjlhZlx1NjliMFx1NjliMlx1NjliM1x1NjliNVx1NjliNlx1NjliOFx1NjliOVx1NjliYVx1NjliY1x1NjliZFx1ZmZmZFx1NjliZVx1NjliZlx1NjljMFx1NjljMlx1NjljM1x1NjljNFx1NjljNVx1NjljNlx1''@;'; put 'put ''NjljN1x1NjljOFx1NjljOVx1NjljYlx1NjljZFx1NjljZlx1NjlkMVx1NjlkMlx1NjlkM1x1NjlkNVx1NjlkNlx1NjlkN1x1NjlkOFx1NjlkOVx1NjlkYVx1NjlkY1x1NjlkZFx1NjlkZVx1NjllMVx1NjllMlx1NjllM1x1NjllNFx1NjllNVx1NjllNlx1NjllN1x1NjllOFx1NjllOVx1Njll''@;'; put 'put ''YVx1NjllYlx1NjllY1x1NjllZVx1NjllZlx1NjlmMFx1NjlmMVx1NjlmM1x1NjlmNFx1NjlmNVx1NjlmNlx1NjlmN1x1NjlmOFx1NjlmOVx1NjlmYVx1NjlmYlx1NjlmY1x1NjlmZVx1NmEwMFx1NmEwMVx1NmEwMlx1NmEwM1x1NmEwNFx1NmEwNVx1NmEwNlx1NmEwN1x1NmEwOFx1NmEwOVx1''@;'; put 'put ''NmEwYlx1NmEwY1x1NmEwZFx1NmEwZVx1NmEwZlx1NmExMFx1NmExMVx1NmExMlx1NmExM1x1NmExNFx1NmExNVx1NmExNlx1NmExOVx1NmExYVx1NmExYlx1NmExY1x1NmExZFx1NmExZVx1NmEyMFx1NmEyMlx1NmEyM1x1NmEyNFx1NmEyNVx1NmEyNlx1NmEyN1x1NmEyOVx1NmEyYlx1NmEy''@;'; put 'put ''Y1x1NmEyZFx1NmEyZVx1NmEzMFx1NmEzMlx1NmEzM1x1NmEzNFx1NmEzNlx1NmEzN1x1NmEzOFx1NmEzOVx1NmEzYVx1NmEzYlx1NmEzY1x1NmEzZlx1NmE0MFx1NmE0MVx1NmE0Mlx1NmE0M1x1NmE0NVx1NmE0Nlx1NmE0OFx1NmE0OVx1NmE0YVx1NmE0Ylx1NmE0Y1x1NmE0ZFx1NmE0ZVx1''@;'; put 'put ''NmE0Zlx1NmE1MVx1NmE1Mlx1NmE1M1x1NmE1NFx1NmE1NVx1NmE1Nlx1NmE1N1x1NmE1YVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE1Ml0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTUyXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE1Ml1bc11dPTM4OTEyK3MsaFszODkxMitzXT1jWzE1''@;'; put 'put ''Ml1bc10pO2ZvcihjWzE1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE1Y1x1NmE1ZFx1NmE1ZVx1NmE1Zlx1NmE2MFx1NmE2Mlx1NmE2M1x1NmE2NFx1NmE2Nlx1NmE2N1x1NmE2OFx1NmE2OVx1NmE2YVx1NmE2Ylx1NmE2Y1x1''@;'; put 'put ''NmE2ZFx1NmE2ZVx1NmE2Zlx1NmE3MFx1NmE3Mlx1NmE3M1x1NmE3NFx1NmE3NVx1NmE3Nlx1NmE3N1x1NmE3OFx1NmE3YVx1NmE3Ylx1NmE3ZFx1NmE3ZVx1NmE3Zlx1NmE4MVx1NmE4Mlx1NmE4M1x1NmE4NVx1NmE4Nlx1NmE4N1x1NmE4OFx1NmE4OVx1NmE4YVx1NmE4Ylx1NmE4Y1x1NmE4''@;'; put 'put ''ZFx1NmE4Zlx1NmE5Mlx1NmE5M1x1NmE5NFx1NmE5NVx1NmE5Nlx1NmE5OFx1NmE5OVx1NmE5YVx1NmE5Ylx1NmE5Y1x1NmE5ZFx1NmE5ZVx1NmE5Zlx1NmFhMVx1NmFhMlx1NmFhM1x1NmFhNFx1NmFhNVx1NmFhNlx1ZmZmZFx1NmFhN1x1NmFhOFx1NmFhYVx1NmFhZFx1NmFhZVx1NmFhZlx1''@;'; put 'put ''NmFiMFx1NmFiMVx1NmFiMlx1NmFiM1x1NmFiNFx1NmFiNVx1NmFiNlx1NmFiN1x1NmFiOFx1NmFiOVx1NmFiYVx1NmFiYlx1NmFiY1x1NmFiZFx1NmFiZVx1NmFiZlx1NmFjMFx1NmFjMVx1NmFjMlx1NmFjM1x1NmFjNFx1NmFjNVx1NmFjNlx1NmFjN1x1NmFjOFx1NmFjOVx1NmFjYVx1NmFj''@;'; put 'put ''Ylx1NmFjY1x1NmFjZFx1NmFjZVx1NmFjZlx1NmFkMFx1NmFkMVx1NmFkMlx1NmFkM1x1NmFkNFx1NmFkNVx1NmFkNlx1NmFkN1x1NmFkOFx1NmFkOVx1NmFkYVx1NmFkYlx1NmFkY1x1NmFkZFx1NmFkZVx1NmFkZlx1NmFlMFx1NmFlMVx1NmFlMlx1NmFlM1x1NmFlNFx1NmFlNVx1NmFlNlx1''@;'; put 'put ''NmFlN1x1NmFlOFx1NmFlOVx1NmFlYVx1NmFlYlx1NmFlY1x1NmFlZFx1NmFlZVx1NmFlZlx1NmFmMFx1NmFmMVx1NmFmMlx1NmFmM1x1NmFmNFx1NmFmNVx1NmFmNlx1NmFmN1x1NmFmOFx1NmFmOVx1NmFmYVx1NmFmYlx1NmFmY1x1NmFmZFx1NmFmZVx1NmFmZlx1NmIwMFx1NmIwMVx1NmIw''@;'; put 'put ''Mlx1NmIwM1x1NmIwNFx1NmIwNVx1NmIwNlx1NmIwN1x1NmIwOFx1NmIwOVx1NmIwYVx1NmIwYlx1NmIwY1x1NmIwZFx1NmIwZVx1NmIwZlx1NmIxMFx1NmIxMVx1NmIxMlx1NmIxM1x1NmIxNFx1NmIxNVx1NmIxNlx1NmIxN1x1NmIxOFx1NmIxOVx1NmIxYVx1NmIxYlx1NmIxY1x1NmIxZFx1''@;'; put 'put ''NmIxZVx1NmIxZlx1NmIyNVx1NmIyNlx1NmIyOFx1NmIyOVx1NmIyYVx1NmIyYlx1NmIyY1x1NmIyZFx1NmIyZVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE1M10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTUzXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE1M11bc11dPTM5MTY4K3MsaFsz''@;'; put 'put ''OTE2OCtzXT1jWzE1M11bc10pO2ZvcihjWzE1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmIyZlx1NmIzMFx1NmIzMVx1NmIzM1x1NmIzNFx1NmIzNVx1NmIzNlx1NmIzOFx1NmIzYlx1NmIzY1x1NmIzZFx1NmIzZlx1NmI0MFx1''@;'; put 'put ''NmI0MVx1NmI0Mlx1NmI0NFx1NmI0NVx1NmI0OFx1NmI0YVx1NmI0Ylx1NmI0ZFx1NmI0ZVx1NmI0Zlx1NmI1MFx1NmI1MVx1NmI1Mlx1NmI1M1x1NmI1NFx1NmI1NVx1NmI1Nlx1NmI1N1x1NmI1OFx1NmI1YVx1NmI1Ylx1NmI1Y1x1NmI1ZFx1NmI1ZVx1NmI1Zlx1NmI2MFx1NmI2MVx1NmI2''@;'; put 'put ''OFx1NmI2OVx1NmI2Ylx1NmI2Y1x1NmI2ZFx1NmI2ZVx1NmI2Zlx1NmI3MFx1NmI3MVx1NmI3Mlx1NmI3M1x1NmI3NFx1NmI3NVx1NmI3Nlx1NmI3N1x1NmI3OFx1NmI3YVx1NmI3ZFx1NmI3ZVx1NmI3Zlx1NmI4MFx1NmI4NVx1NmI4OFx1ZmZmZFx1NmI4Y1x1NmI4ZVx1NmI4Zlx1NmI5MFx1''@;'; put 'put ''NmI5MVx1NmI5NFx1NmI5NVx1NmI5N1x1NmI5OFx1NmI5OVx1NmI5Y1x1NmI5ZFx1NmI5ZVx1NmI5Zlx1NmJhMFx1NmJhMlx1NmJhM1x1NmJhNFx1NmJhNVx1NmJhNlx1NmJhN1x1NmJhOFx1NmJhOVx1NmJhYlx1NmJhY1x1NmJhZFx1NmJhZVx1NmJhZlx1NmJiMFx1NmJiMVx1NmJiMlx1NmJi''@;'; put 'put ''Nlx1NmJiOFx1NmJiOVx1NmJiYVx1NmJiYlx1NmJiY1x1NmJiZFx1NmJiZVx1NmJjMFx1NmJjM1x1NmJjNFx1NmJjNlx1NmJjN1x1NmJjOFx1NmJjOVx1NmJjYVx1NmJjY1x1NmJjZVx1NmJkMFx1NmJkMVx1NmJkOFx1NmJkYVx1NmJkY1x1NmJkZFx1NmJkZVx1NmJkZlx1NmJlMFx1NmJlMlx1''@;'; put 'put ''NmJlM1x1NmJlNFx1NmJlNVx1NmJlNlx1NmJlN1x1NmJlOFx1NmJlOVx1NmJlY1x1NmJlZFx1NmJlZVx1NmJmMFx1NmJmMVx1NmJmMlx1NmJmNFx1NmJmNlx1NmJmN1x1NmJmOFx1NmJmYVx1NmJmYlx1NmJmY1x1NmJmZVx1NmJmZlx1NmMwMFx1NmMwMVx1NmMwMlx1NmMwM1x1NmMwNFx1NmMw''@;'; put 'put ''OFx1NmMwOVx1NmMwYVx1NmMwYlx1NmMwY1x1NmMwZVx1NmMxMlx1NmMxN1x1NmMxY1x1NmMxZFx1NmMxZVx1NmMyMFx1NmMyM1x1NmMyNVx1NmMyYlx1NmMyY1x1NmMyZFx1NmMzMVx1NmMzM1x1NmMzNlx1NmMzN1x1NmMzOVx1NmMzYVx1NmMzYlx1NmMzY1x1NmMzZVx1NmMzZlx1NmM0M1x1''@;'; put 'put ''NmM0NFx1NmM0NVx1NmM0OFx1NmM0Ylx1NmM0Y1x1NmM0ZFx1NmM0ZVx1NmM0Zlx1NmM1MVx1NmM1Mlx1NmM1M1x1NmM1Nlx1NmM1OFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE1NF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTU0XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE1NF1bc11d''@;'; put 'put ''PTM5NDI0K3MsaFszOTQyNCtzXT1jWzE1NF1bc10pO2ZvcihjWzE1NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM1OVx1NmM1YVx1NmM2Mlx1NmM2M1x1NmM2NVx1NmM2Nlx1NmM2N1x1NmM2Ylx1NmM2Y1x1NmM2ZFx1NmM2ZVx1''@;'; put 'put ''NmM2Zlx1NmM3MVx1NmM3M1x1NmM3NVx1NmM3N1x1NmM3OFx1NmM3YVx1NmM3Ylx1NmM3Y1x1NmM3Zlx1NmM4MFx1NmM4NFx1NmM4N1x1NmM4YVx1NmM4Ylx1NmM4ZFx1NmM4ZVx1NmM5MVx1NmM5Mlx1NmM5NVx1NmM5Nlx1NmM5N1x1NmM5OFx1NmM5YVx1NmM5Y1x1NmM5ZFx1NmM5ZVx1NmNh''@;'; put 'put ''MFx1NmNhMlx1NmNhOFx1NmNhY1x1NmNhZlx1NmNiMFx1NmNiNFx1NmNiNVx1NmNiNlx1NmNiN1x1NmNiYVx1NmNjMFx1NmNjMVx1NmNjMlx1NmNjM1x1NmNjNlx1NmNjN1x1NmNjOFx1NmNjYlx1NmNjZFx1NmNjZVx1NmNjZlx1NmNkMVx1NmNkMlx1NmNkOFx1ZmZmZFx1NmNkOVx1NmNkYVx1''@;'; put 'put ''NmNkY1x1NmNkZFx1NmNkZlx1NmNlNFx1NmNlNlx1NmNlN1x1NmNlOVx1NmNlY1x1NmNlZFx1NmNmMlx1NmNmNFx1NmNmOVx1NmNmZlx1NmQwMFx1NmQwMlx1NmQwM1x1NmQwNVx1NmQwNlx1NmQwOFx1NmQwOVx1NmQwYVx1NmQwZFx1NmQwZlx1NmQxMFx1NmQxMVx1NmQxM1x1NmQxNFx1NmQx''@;'; put 'put ''NVx1NmQxNlx1NmQxOFx1NmQxY1x1NmQxZFx1NmQxZlx1NmQyMFx1NmQyMVx1NmQyMlx1NmQyM1x1NmQyNFx1NmQyNlx1NmQyOFx1NmQyOVx1NmQyY1x1NmQyZFx1NmQyZlx1NmQzMFx1NmQzNFx1NmQzNlx1NmQzN1x1NmQzOFx1NmQzYVx1NmQzZlx1NmQ0MFx1NmQ0Mlx1NmQ0NFx1NmQ0OVx1''@;'; put 'put ''NmQ0Y1x1NmQ1MFx1NmQ1NVx1NmQ1Nlx1NmQ1N1x1NmQ1OFx1NmQ1Ylx1NmQ1ZFx1NmQ1Zlx1NmQ2MVx1NmQ2Mlx1NmQ2NFx1NmQ2NVx1NmQ2N1x1NmQ2OFx1NmQ2Ylx1NmQ2Y1x1NmQ2ZFx1NmQ3MFx1NmQ3MVx1NmQ3Mlx1NmQ3M1x1NmQ3NVx1NmQ3Nlx1NmQ3OVx1NmQ3YVx1NmQ3Ylx1NmQ3''@;'; put 'put ''ZFx1NmQ3ZVx1NmQ3Zlx1NmQ4MFx1NmQ4MVx1NmQ4M1x1NmQ4NFx1NmQ4Nlx1NmQ4N1x1NmQ4YVx1NmQ4Ylx1NmQ4ZFx1NmQ4Zlx1NmQ5MFx1NmQ5Mlx1NmQ5Nlx1NmQ5N1x1NmQ5OFx1NmQ5OVx1NmQ5YVx1NmQ5Y1x1NmRhMlx1NmRhNVx1NmRhY1x1NmRhZFx1NmRiMFx1NmRiMVx1NmRiM1x1''@;'; put 'put ''NmRiNFx1NmRiNlx1NmRiN1x1NmRiOVx1NmRiYVx1NmRiYlx1NmRiY1x1NmRiZFx1NmRiZVx1NmRjMVx1NmRjMlx1NmRjM1x1NmRjOFx1NmRjOVx1NmRjYVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE1NV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTU1XVtzXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''eVtjWzE1NV1bc11dPTM5NjgwK3MsaFszOTY4MCtzXT1jWzE1NV1bc10pO2ZvcihjWzE1Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmRjZFx1NmRjZVx1NmRjZlx1NmRkMFx1NmRkMlx1NmRkM1x1NmRkNFx1NmRkNVx1NmRkN1x1''@;'; put 'put ''NmRkYVx1NmRkYlx1NmRkY1x1NmRkZlx1NmRlMlx1NmRlM1x1NmRlNVx1NmRlN1x1NmRlOFx1NmRlOVx1NmRlYVx1NmRlZFx1NmRlZlx1NmRmMFx1NmRmMlx1NmRmNFx1NmRmNVx1NmRmNlx1NmRmOFx1NmRmYVx1NmRmZFx1NmRmZVx1NmRmZlx1NmUwMFx1NmUwMVx1NmUwMlx1NmUwM1x1NmUw''@;'; put 'put ''NFx1NmUwNlx1NmUwN1x1NmUwOFx1NmUwOVx1NmUwYlx1NmUwZlx1NmUxMlx1NmUxM1x1NmUxNVx1NmUxOFx1NmUxOVx1NmUxYlx1NmUxY1x1NmUxZVx1NmUxZlx1NmUyMlx1NmUyNlx1NmUyN1x1NmUyOFx1NmUyYVx1NmUyY1x1NmUyZVx1NmUzMFx1NmUzMVx1NmUzM1x1NmUzNVx1ZmZmZFx1''@;'; put 'put ''NmUzNlx1NmUzN1x1NmUzOVx1NmUzYlx1NmUzY1x1NmUzZFx1NmUzZVx1NmUzZlx1NmU0MFx1NmU0MVx1NmU0Mlx1NmU0NVx1NmU0Nlx1NmU0N1x1NmU0OFx1NmU0OVx1NmU0YVx1NmU0Ylx1NmU0Y1x1NmU0Zlx1NmU1MFx1NmU1MVx1NmU1Mlx1NmU1NVx1NmU1N1x1NmU1OVx1NmU1YVx1NmU1''@;'; put 'put ''Y1x1NmU1ZFx1NmU1ZVx1NmU2MFx1NmU2MVx1NmU2Mlx1NmU2M1x1NmU2NFx1NmU2NVx1NmU2Nlx1NmU2N1x1NmU2OFx1NmU2OVx1NmU2YVx1NmU2Y1x1NmU2ZFx1NmU2Zlx1NmU3MFx1NmU3MVx1NmU3Mlx1NmU3M1x1NmU3NFx1NmU3NVx1NmU3Nlx1NmU3N1x1NmU3OFx1NmU3OVx1NmU3YVx1''@;'; put 'put ''NmU3Ylx1NmU3Y1x1NmU3ZFx1NmU4MFx1NmU4MVx1NmU4Mlx1NmU4NFx1NmU4N1x1NmU4OFx1NmU4YVx1NmU4Ylx1NmU4Y1x1NmU4ZFx1NmU4ZVx1NmU5MVx1NmU5Mlx1NmU5M1x1NmU5NFx1NmU5NVx1NmU5Nlx1NmU5N1x1NmU5OVx1NmU5YVx1NmU5Ylx1NmU5ZFx1NmU5ZVx1NmVhMFx1NmVh''@;'; put 'put ''MVx1NmVhM1x1NmVhNFx1NmVhNlx1NmVhOFx1NmVhOVx1NmVhYlx1NmVhY1x1NmVhZFx1NmVhZVx1NmViMFx1NmViM1x1NmViNVx1NmViOFx1NmViOVx1NmViY1x1NmViZVx1NmViZlx1NmVjMFx1NmVjM1x1NmVjNFx1NmVjNVx1NmVjNlx1NmVjOFx1NmVjOVx1NmVjYVx1NmVjY1x1NmVjZFx1''@;'; put 'put ''NmVjZVx1NmVkMFx1NmVkMlx1NmVkNlx1NmVkOFx1NmVkOVx1NmVkYlx1NmVkY1x1NmVkZFx1NmVlM1x1NmVlN1x1NmVlYVx1NmVlYlx1NmVlY1x1NmVlZFx1NmVlZVx1NmVlZlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE1Nl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTU2XVtzXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoeVtjWzE1Nl1bc11dPTM5OTM2K3MsaFszOTkzNitzXT1jWzE1Nl1bc10pO2ZvcihjWzE1N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmVmMFx1NmVmMVx1NmVmMlx1NmVmM1x1NmVmNVx1NmVmNlx1NmVmN1x1''@;'; put 'put ''NmVmOFx1NmVmYVx1NmVmYlx1NmVmY1x1NmVmZFx1NmVmZVx1NmVmZlx1NmYwMFx1NmYwMVx1NmYwM1x1NmYwNFx1NmYwNVx1NmYwN1x1NmYwOFx1NmYwYVx1NmYwYlx1NmYwY1x1NmYwZFx1NmYwZVx1NmYxMFx1NmYxMVx1NmYxMlx1NmYxNlx1NmYxN1x1NmYxOFx1NmYxOVx1NmYxYVx1NmYx''@;'; put 'put ''Ylx1NmYxY1x1NmYxZFx1NmYxZVx1NmYxZlx1NmYyMVx1NmYyMlx1NmYyM1x1NmYyNVx1NmYyNlx1NmYyN1x1NmYyOFx1NmYyY1x1NmYyZVx1NmYzMFx1NmYzMlx1NmYzNFx1NmYzNVx1NmYzN1x1NmYzOFx1NmYzOVx1NmYzYVx1NmYzYlx1NmYzY1x1NmYzZFx1NmYzZlx1NmY0MFx1NmY0MVx1''@;'; put 'put ''NmY0Mlx1ZmZmZFx1NmY0M1x1NmY0NFx1NmY0NVx1NmY0OFx1NmY0OVx1NmY0YVx1NmY0Y1x1NmY0ZVx1NmY0Zlx1NmY1MFx1NmY1MVx1NmY1Mlx1NmY1M1x1NmY1NFx1NmY1NVx1NmY1Nlx1NmY1N1x1NmY1OVx1NmY1YVx1NmY1Ylx1NmY1ZFx1NmY1Zlx1NmY2MFx1NmY2MVx1NmY2M1x1NmY2''@;'; put 'put ''NFx1NmY2NVx1NmY2N1x1NmY2OFx1NmY2OVx1NmY2YVx1NmY2Ylx1NmY2Y1x1NmY2Zlx1NmY3MFx1NmY3MVx1NmY3M1x1NmY3NVx1NmY3Nlx1NmY3N1x1NmY3OVx1NmY3Ylx1NmY3ZFx1NmY3ZVx1NmY3Zlx1NmY4MFx1NmY4MVx1NmY4Mlx1NmY4M1x1NmY4NVx1NmY4Nlx1NmY4N1x1NmY4YVx1''@;'; put 'put ''NmY4Ylx1NmY4Zlx1NmY5MFx1NmY5MVx1NmY5Mlx1NmY5M1x1NmY5NFx1NmY5NVx1NmY5Nlx1NmY5N1x1NmY5OFx1NmY5OVx1NmY5YVx1NmY5Ylx1NmY5ZFx1NmY5ZVx1NmY5Zlx1NmZhMFx1NmZhMlx1NmZhM1x1NmZhNFx1NmZhNVx1NmZhNlx1NmZhOFx1NmZhOVx1NmZhYVx1NmZhYlx1NmZh''@;'; put 'put ''Y1x1NmZhZFx1NmZhZVx1NmZhZlx1NmZiMFx1NmZiMVx1NmZiMlx1NmZiNFx1NmZiNVx1NmZiN1x1NmZiOFx1NmZiYVx1NmZiYlx1NmZiY1x1NmZiZFx1NmZiZVx1NmZiZlx1NmZjMVx1NmZjM1x1NmZjNFx1NmZjNVx1NmZjNlx1NmZjN1x1NmZjOFx1NmZjYVx1NmZjYlx1NmZjY1x1NmZjZFx1''@;'; put 'put ''NmZjZVx1NmZjZlx1NmZkMFx1NmZkM1x1NmZkNFx1NmZkNVx1NmZkNlx1NmZkN1x1NmZkOFx1NmZkOVx1NmZkYVx1NmZkYlx1NmZkY1x1NmZkZFx1NmZkZlx1NmZlMlx1NmZlM1x1NmZlNFx1NmZlNVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE1N10ubGVuZ3RoOysrcyk2NTUzMyE9PWNb''@;'; put 'put ''MTU3XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE1N11bc11dPTQwMTkyK3MsaFs0MDE5MitzXT1jWzE1N11bc10pO2ZvcihjWzE1OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZlNlx1NmZlN1x1NmZlOFx1NmZlOVx1NmZlYVx1''@;'; put 'put ''NmZlYlx1NmZlY1x1NmZlZFx1NmZmMFx1NmZmMVx1NmZmMlx1NmZmM1x1NmZmNFx1NmZmNVx1NmZmNlx1NmZmN1x1NmZmOFx1NmZmOVx1NmZmYVx1NmZmYlx1NmZmY1x1NmZmZFx1NmZmZVx1NmZmZlx1NzAwMFx1NzAwMVx1NzAwMlx1NzAwM1x1NzAwNFx1NzAwNVx1NzAwNlx1NzAwN1x1NzAw''@;'; put 'put ''OFx1NzAwOVx1NzAwYVx1NzAwYlx1NzAwY1x1NzAwZFx1NzAwZVx1NzAwZlx1NzAxMFx1NzAxMlx1NzAxM1x1NzAxNFx1NzAxNVx1NzAxNlx1NzAxN1x1NzAxOFx1NzAxOVx1NzAxY1x1NzAxZFx1NzAxZVx1NzAxZlx1NzAyMFx1NzAyMVx1NzAyMlx1NzAyNFx1NzAyNVx1NzAyNlx1NzAyN1x1''@;'; put 'put ''NzAyOFx1NzAyOVx1NzAyYVx1ZmZmZFx1NzAyYlx1NzAyY1x1NzAyZFx1NzAyZVx1NzAyZlx1NzAzMFx1NzAzMVx1NzAzMlx1NzAzM1x1NzAzNFx1NzAzNlx1NzAzN1x1NzAzOFx1NzAzYVx1NzAzYlx1NzAzY1x1NzAzZFx1NzAzZVx1NzAzZlx1NzA0MFx1NzA0MVx1NzA0Mlx1NzA0M1x1NzA0''@;'; put 'put ''NFx1NzA0NVx1NzA0Nlx1NzA0N1x1NzA0OFx1NzA0OVx1NzA0YVx1NzA0Ylx1NzA0ZFx1NzA0ZVx1NzA1MFx1NzA1MVx1NzA1Mlx1NzA1M1x1NzA1NFx1NzA1NVx1NzA1Nlx1NzA1N1x1NzA1OFx1NzA1OVx1NzA1YVx1NzA1Ylx1NzA1Y1x1NzA1ZFx1NzA1Zlx1NzA2MFx1NzA2MVx1NzA2Mlx1''@;'; put 'put ''NzA2M1x1NzA2NFx1NzA2NVx1NzA2Nlx1NzA2N1x1NzA2OFx1NzA2OVx1NzA2YVx1NzA2ZVx1NzA3MVx1NzA3Mlx1NzA3M1x1NzA3NFx1NzA3N1x1NzA3OVx1NzA3YVx1NzA3Ylx1NzA3ZFx1NzA4MVx1NzA4Mlx1NzA4M1x1NzA4NFx1NzA4Nlx1NzA4N1x1NzA4OFx1NzA4Ylx1NzA4Y1x1NzA4''@;'; put 'put ''ZFx1NzA4Zlx1NzA5MFx1NzA5MVx1NzA5M1x1NzA5N1x1NzA5OFx1NzA5YVx1NzA5Ylx1NzA5ZVx1NzA5Zlx1NzBhMFx1NzBhMVx1NzBhMlx1NzBhM1x1NzBhNFx1NzBhNVx1NzBhNlx1NzBhN1x1NzBhOFx1NzBhOVx1NzBhYVx1NzBiMFx1NzBiMlx1NzBiNFx1NzBiNVx1NzBiNlx1NzBiYVx1''@;'; put 'put ''NzBiZVx1NzBiZlx1NzBjNFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBjOVx1NzBjYlx1NzBjY1x1NzBjZFx1NzBjZVx1NzBjZlx1NzBkMFx1NzBkMVx1NzBkMlx1NzBkM1x1NzBkNFx1NzBkNVx1NzBkNlx1NzBkN1x1NzBkYVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE1OF0ubGVuZ3RoOysr''@;'; put 'put ''cyk2NTUzMyE9PWNbMTU4XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE1OF1bc11dPTQwNDQ4K3MsaFs0MDQ0OCtzXT1jWzE1OF1bc10pO2ZvcihjWzE1OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzBkY1x1NzBkZFx1NzBkZVx1''@;'; put 'put ''NzBlMFx1NzBlMVx1NzBlMlx1NzBlM1x1NzBlNVx1NzBlYVx1NzBlZVx1NzBmMFx1NzBmMVx1NzBmMlx1NzBmM1x1NzBmNFx1NzBmNVx1NzBmNlx1NzBmOFx1NzBmYVx1NzBmYlx1NzBmY1x1NzBmZVx1NzBmZlx1NzEwMFx1NzEwMVx1NzEwMlx1NzEwM1x1NzEwNFx1NzEwNVx1NzEwNlx1NzEw''@;'; put 'put ''N1x1NzEwOFx1NzEwYlx1NzEwY1x1NzEwZFx1NzEwZVx1NzEwZlx1NzExMVx1NzExMlx1NzExNFx1NzExN1x1NzExYlx1NzExY1x1NzExZFx1NzExZVx1NzExZlx1NzEyMFx1NzEyMVx1NzEyMlx1NzEyM1x1NzEyNFx1NzEyNVx1NzEyN1x1NzEyOFx1NzEyOVx1NzEyYVx1NzEyYlx1NzEyY1x1''@;'; put 'put ''NzEyZFx1NzEyZVx1NzEzMlx1NzEzM1x1NzEzNFx1ZmZmZFx1NzEzNVx1NzEzN1x1NzEzOFx1NzEzOVx1NzEzYVx1NzEzYlx1NzEzY1x1NzEzZFx1NzEzZVx1NzEzZlx1NzE0MFx1NzE0MVx1NzE0Mlx1NzE0M1x1NzE0NFx1NzE0Nlx1NzE0N1x1NzE0OFx1NzE0OVx1NzE0Ylx1NzE0ZFx1NzE0''@;'; put 'put ''Zlx1NzE1MFx1NzE1MVx1NzE1Mlx1NzE1M1x1NzE1NFx1NzE1NVx1NzE1Nlx1NzE1N1x1NzE1OFx1NzE1OVx1NzE1YVx1NzE1Ylx1NzE1ZFx1NzE1Zlx1NzE2MFx1NzE2MVx1NzE2Mlx1NzE2M1x1NzE2NVx1NzE2OVx1NzE2YVx1NzE2Ylx1NzE2Y1x1NzE2ZFx1NzE2Zlx1NzE3MFx1NzE3MVx1''@;'; put 'put ''NzE3NFx1NzE3NVx1NzE3Nlx1NzE3N1x1NzE3OVx1NzE3Ylx1NzE3Y1x1NzE3ZVx1NzE3Zlx1NzE4MFx1NzE4MVx1NzE4Mlx1NzE4M1x1NzE4NVx1NzE4Nlx1NzE4N1x1NzE4OFx1NzE4OVx1NzE4Ylx1NzE4Y1x1NzE4ZFx1NzE4ZVx1NzE5MFx1NzE5MVx1NzE5Mlx1NzE5M1x1NzE5NVx1NzE5''@;'; put 'put ''Nlx1NzE5N1x1NzE5YVx1NzE5Ylx1NzE5Y1x1NzE5ZFx1NzE5ZVx1NzFhMVx1NzFhMlx1NzFhM1x1NzFhNFx1NzFhNVx1NzFhNlx1NzFhN1x1NzFhOVx1NzFhYVx1NzFhYlx1NzFhZFx1NzFhZVx1NzFhZlx1NzFiMFx1NzFiMVx1NzFiMlx1NzFiNFx1NzFiNlx1NzFiN1x1NzFiOFx1NzFiYVx1''@;'; put 'put ''NzFiYlx1NzFiY1x1NzFiZFx1NzFiZVx1NzFiZlx1NzFjMFx1NzFjMVx1NzFjMlx1NzFjNFx1NzFjNVx1NzFjNlx1NzFjN1x1NzFjOFx1NzFjOVx1NzFjYVx1NzFjYlx1NzFjY1x1NzFjZFx1NzFjZlx1NzFkMFx1NzFkMVx1NzFkMlx1NzFkM1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE1''@;'; put 'put ''OV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTU5XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE1OV1bc11dPTQwNzA0K3MsaFs0MDcwNCtzXT1jWzE1OV1bc10pO2ZvcihjWzE2MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzFkNlx1''@;'; put 'put ''NzFkN1x1NzFkOFx1NzFkOVx1NzFkYVx1NzFkYlx1NzFkY1x1NzFkZFx1NzFkZVx1NzFkZlx1NzFlMVx1NzFlMlx1NzFlM1x1NzFlNFx1NzFlNlx1NzFlOFx1NzFlOVx1NzFlYVx1NzFlYlx1NzFlY1x1NzFlZFx1NzFlZlx1NzFmMFx1NzFmMVx1NzFmMlx1NzFmM1x1NzFmNFx1NzFmNVx1NzFm''@;'; put 'put ''Nlx1NzFmN1x1NzFmOFx1NzFmYVx1NzFmYlx1NzFmY1x1NzFmZFx1NzFmZVx1NzFmZlx1NzIwMFx1NzIwMVx1NzIwMlx1NzIwM1x1NzIwNFx1NzIwNVx1NzIwN1x1NzIwOFx1NzIwOVx1NzIwYVx1NzIwYlx1NzIwY1x1NzIwZFx1NzIwZVx1NzIwZlx1NzIxMFx1NzIxMVx1NzIxMlx1NzIxM1x1''@;'; put 'put ''NzIxNFx1NzIxNVx1NzIxNlx1NzIxN1x1NzIxOFx1NzIxOVx1NzIxYVx1ZmZmZFx1NzIxYlx1NzIxY1x1NzIxZVx1NzIxZlx1NzIyMFx1NzIyMVx1NzIyMlx1NzIyM1x1NzIyNFx1NzIyNVx1NzIyNlx1NzIyN1x1NzIyOVx1NzIyYlx1NzIyZFx1NzIyZVx1NzIyZlx1NzIzMlx1NzIzM1x1NzIz''@;'; put 'put ''NFx1NzIzYVx1NzIzY1x1NzIzZVx1NzI0MFx1NzI0MVx1NzI0Mlx1NzI0M1x1NzI0NFx1NzI0NVx1NzI0Nlx1NzI0OVx1NzI0YVx1NzI0Ylx1NzI0ZVx1NzI0Zlx1NzI1MFx1NzI1MVx1NzI1M1x1NzI1NFx1NzI1NVx1NzI1N1x1NzI1OFx1NzI1YVx1NzI1Y1x1NzI1ZVx1NzI2MFx1NzI2M1x1''@;'; put 'put ''NzI2NFx1NzI2NVx1NzI2OFx1NzI2YVx1NzI2Ylx1NzI2Y1x1NzI2ZFx1NzI3MFx1NzI3MVx1NzI3M1x1NzI3NFx1NzI3Nlx1NzI3N1x1NzI3OFx1NzI3Ylx1NzI3Y1x1NzI3ZFx1NzI4Mlx1NzI4M1x1NzI4NVx1NzI4Nlx1NzI4N1x1NzI4OFx1NzI4OVx1NzI4Y1x1NzI4ZVx1NzI5MFx1NzI5''@;'; put 'put ''MVx1NzI5M1x1NzI5NFx1NzI5NVx1NzI5Nlx1NzI5N1x1NzI5OFx1NzI5OVx1NzI5YVx1NzI5Ylx1NzI5Y1x1NzI5ZFx1NzI5ZVx1NzJhMFx1NzJhMVx1NzJhMlx1NzJhM1x1NzJhNFx1NzJhNVx1NzJhNlx1NzJhN1x1NzJhOFx1NzJhOVx1NzJhYVx1NzJhYlx1NzJhZVx1NzJiMVx1NzJiMlx1''@;'; put 'put ''NzJiM1x1NzJiNVx1NzJiYVx1NzJiYlx1NzJiY1x1NzJiZFx1NzJiZVx1NzJiZlx1NzJjMFx1NzJjNVx1NzJjNlx1NzJjN1x1NzJjOVx1NzJjYVx1NzJjYlx1NzJjY1x1NzJjZlx1NzJkMVx1NzJkM1x1NzJkNFx1NzJkNVx1NzJkNlx1NzJkOFx1NzJkYVx1NzJkYlx1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LHM9MDtzIT1jWzE2MF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTYwXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE2MF1bc11dPTQwOTYwK3MsaFs0MDk2MCtzXT1jWzE2MF1bc10pO2ZvcihjWzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1MzAwMVx1MzAwMlx4YjdcdTAyYzlcdTAyYzdceGE4XHUzMDAzXHUzMDA1XHUyMDE0XHVmZjVlXHUyMDE2XHUyMDI2''@;'; put 'put ''XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDE2XHUzMDE3XHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBmXHUyMjJhXHUyMjI5XHUy''@;'; put 'put ''MjA4XHUyMjM3XHUyMjFhXHUyMmE1XHUyMjI1XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJiXHUyMjJlXHUyMjYxXHUyMjRjXHUyMjQ4XHUyMjNkXHUyMjFkXHUyMjYwXHUyMjZlXHUyMjZmXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM1XHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1''@;'; put 'put ''MjEwM1x1ZmYwNFx4YTRcdWZmZTBcdWZmZTFcdTIwMzBceGE3XHUyMTE2XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyMDNiXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXHVmZmZkIi5zcGxpdCgiIikscz0w''@;'; put 'put ''O3MhPWNbMTYxXS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxNjFdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTYxXVtzXV09NDEyMTYrcyxoWzQxMjE2K3NdPWNbMTYxXVtzXSk7Zm9yKGNbMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHUyNDg4XHUyNDg5XHUyNDhhXHUyNDhiXHUyNDhjXHUyNDhkXHUyNDhlXHUyNDhmXHUyNDkwXHUyNDkxXHUyNDkyXHUyNDkzXHUyNDk0XHUyNDk1XHUyNDk2XHUyNDk3XHUyNDk4XHUyNDk5XHUyNDlhXHUyNDliXHUyNDc0XHUyNDc1XHUyNDc2XHUyNDc3XHUy''@;'; put 'put ''NDc4XHUyNDc5XHUyNDdhXHUyNDdiXHUyNDdjXHUyNDdkXHUyNDdlXHUyNDdmXHUyNDgwXHUyNDgxXHUyNDgyXHUyNDgzXHUyNDg0XHUyNDg1XHUyNDg2XHUyNDg3XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHVmZmZkXHVmZmZk''@;'; put 'put ''XHUzMjIwXHUzMjIxXHUzMjIyXHUzMjIzXHUzMjI0XHUzMjI1XHUzMjI2XHUzMjI3XHUzMjI4XHUzMjI5XHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHUyMTZhXHUyMTZiXHVmZmZkXHVmZmZkXHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIikscz0wO3MhPWNbMTYyXS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxNjJdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTYyXVtzXV09NDE0NzIrcyxoWzQxNDcyK3NdPWNbMTYyXVtzXSk7Zm9yKGNbMTYzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjAxXHVmZjAyXHVmZjAzXHVmZmU1XHVmZjA1XHVmZjA2XHVmZjA3XHVmZjA4XHVmZjA5XHVmZjBhXHVmZjBi''@;'; put 'put ''XHVmZjBjXHVmZjBkXHVmZjBlXHVmZjBmXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZjFhXHVmZjFiXHVmZjFjXHVmZjFkXHVmZjFlXHVmZjFmXHVmZjIwXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVm''@;'; put 'put ''ZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjNiXHVmZjNjXHVmZjNkXHVmZjNlXHVmZjNmXHVmZjQwXHVmZjQxXHVmZjQy''@;'; put 'put ''XHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZjViXHVmZjVjXHVmZjVkXHVm''@;'; put 'put ''ZmUzXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTYzXS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxNjNdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTYzXVtzXV09NDE3MjgrcyxoWzQxNzI4K3NdPWNbMTYzXVtzXSk7Zm9yKGNbMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5''@;'; put 'put ''XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUzMDYzXHUzMDY0XHUz''@;'; put 'put ''MDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdlXHUzMDdmXHUzMDgw''@;'; put 'put ''XHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTY0XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxNjRdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTY0XVtzXV09NDE5ODQrcyxoWzQxOTg0K3NdPWNbMTY0XVtzXSk7Zm9yKGNbMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3''@;'; put 'put ''XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUz''@;'; put 'put ''MGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRl''@;'; put 'put ''XHUzMGRmXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTY1XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxNjVdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTY1XVtzXV09NDIyNDArcyxoWzQyMjQwK3NdPWNbMTY1XVtzXSk7Zm9yKGNbMTY2XT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1''@;'; put 'put ''XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUw''@;'; put 'put ''M2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZTM1XHVmZTM2XHVmZTM5XHVmZTNhXHVmZTNmXHVmZTQwXHVmZTNkXHVmZTNlXHVmZTQxXHVmZTQyXHVmZTQzXHVmZTQ0XHVmZmZkXHVmZmZkXHVmZTNiXHVmZTNjXHVmZTM3XHVmZTM4XHVmZTMxXHVmZmZkXHVmZTMzXHVmZTM0XHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTY2XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxNjZdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTY2XVtzXV09NDI0OTYrcyxoWzQyNDk2K3NdPWNbMTY2XVtzXSk7Zm9yKGNb''@;'; put 'put ''MTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDEwXHUwNDExXHUwNDEy''@;'; put 'put ''XHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUw''@;'; put 'put ''NDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUwNDM3XHUwNDM4''@;'; put 'put ''XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTY3XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxNjddW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTY3XVtzXV09NDI3NTIrcyxoWzQyNzUyK3NdPWNbMTY3''@;'; put 'put ''XVtzXSk7Zm9yKGNbMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMmNhXHUwMmNiXHUwMmQ5XHUyMDEzXHUyMDE1XHUyMDI1XHUyMDM1XHUyMTA1XHUyMTA5XHUyMTk2XHUyMTk3XHUyMTk4XHUyMTk5XHUyMjE1XHUyMjFmXHUy''@;'; put 'put ''MjIzXHUyMjUyXHUyMjY2XHUyMjY3XHUyMmJmXHUyNTUwXHUyNTUxXHUyNTUyXHUyNTUzXHUyNTU0XHUyNTU1XHUyNTU2XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUyNTVjXHUyNTVkXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUyNTYyXHUyNTYzXHUyNTY0XHUyNTY1XHUyNTY2''@;'; put 'put ''XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUyNTZiXHUyNTZjXHUyNTZkXHUyNTZlXHUyNTZmXHUyNTcwXHUyNTcxXHUyNTcyXHUyNTczXHUyNTgxXHUyNTgyXHUyNTgzXHUyNTg0XHUyNTg1XHUyNTg2XHUyNTg3XHVmZmZkXHUyNTg4XHUyNTg5XHUyNThhXHUyNThiXHUyNThjXHUyNThkXHUy''@;'; put 'put ''NThlXHUyNThmXHUyNTkzXHUyNTk0XHUyNTk1XHUyNWJjXHUyNWJkXHUyNWUyXHUyNWUzXHUyNWU0XHUyNWU1XHUyNjA5XHUyMjk1XHUzMDEyXHUzMDFkXHUzMDFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMTAx''@;'; put 'put ''XHhlMVx1MDFjZVx4ZTBcdTAxMTNceGU5XHUwMTFiXHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVjXHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAxNmJceGZhXHUwMWQ0XHhmOVx1MDFkNlx1MDFkOFx1MDFkYVx1MDFkY1x4ZmNceGVhXHUwMjUxXHVmZmZkXHUwMTQ0XHUwMTQ4XHVmZmZkXHUwMjYxXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMTA1XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUzMTBhXHUzMTBiXHUzMTBjXHUzMTBkXHUzMTBlXHUzMTBmXHUzMTEwXHUzMTExXHUzMTEyXHUzMTEzXHUzMTE0XHUzMTE1XHUzMTE2XHUzMTE3XHUzMTE4XHUzMTE5XHUzMTFhXHUzMTFiXHUzMTFj''@;'; put 'put ''XHUzMTFkXHUzMTFlXHUzMTFmXHUzMTIwXHUzMTIxXHUzMTIyXHUzMTIzXHUzMTI0XHUzMTI1XHUzMTI2XHUzMTI3XHUzMTI4XHUzMTI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTY4XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxNjhdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTY4XVtzXV09NDMwMDgrcyxoWzQzMDA4K3NdPWNbMTY4XVtzXSk7Zm9yKGNb''@;'; put 'put ''MTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDIxXHUzMDIyXHUzMDIzXHUzMDI0XHUzMDI1XHUzMDI2XHUzMDI3XHUzMDI4XHUzMDI5XHUzMmEzXHUzMzhlXHUzMzhmXHUzMzljXHUzMzlkXHUzMzllXHUzM2ExXHUzM2M0XHUz''@;'; put 'put ''M2NlXHUzM2QxXHUzM2QyXHUzM2Q1XHVmZTMwXHVmZmUyXHVmZmU0XHVmZmZkXHUyMTIxXHUzMjMxXHVmZmZkXHUyMDEwXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGZjXHUzMDliXHUzMDljXHUzMGZkXHUzMGZlXHUzMDA2XHUzMDlkXHUzMDllXHVmZTQ5XHVmZTRhXHVmZTRiXHVmZTRjXHVmZTRk''@;'; put 'put ''XHVmZTRlXHVmZTRmXHVmZTUwXHVmZTUxXHVmZTUyXHVmZTU0XHVmZTU1XHVmZTU2XHVmZTU3XHVmZTU5XHVmZTVhXHVmZTViXHVmZTVjXHVmZTVkXHVmZTVlXHVmZTVmXHVmZTYwXHVmZTYxXHVmZmZkXHVmZTYyXHVmZTYzXHVmZTY0XHVmZTY1XHVmZTY2XHVmZTY4XHVmZTY5XHVmZTZhXHVm''@;'; put 'put ''ZTZiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDA3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHUyNTAwXHUyNTAxXHUyNTAyXHUyNTAzXHUyNTA0XHUyNTA1XHUyNTA2XHUyNTA3XHUyNTA4XHUyNTA5XHUyNTBhXHUyNTBiXHUyNTBjXHUyNTBkXHUyNTBlXHUyNTBmXHUyNTEwXHUyNTExXHUyNTEyXHUyNTEzXHUyNTE0XHUyNTE1XHUyNTE2XHUyNTE3XHUyNTE4XHUyNTE5XHUyNTFhXHUy''@;'; put 'put ''NTFiXHUyNTFjXHUyNTFkXHUyNTFlXHUyNTFmXHUyNTIwXHUyNTIxXHUyNTIyXHUyNTIzXHUyNTI0XHUyNTI1XHUyNTI2XHUyNTI3XHUyNTI4XHUyNTI5XHUyNTJhXHUyNTJiXHUyNTJjXHUyNTJkXHUyNTJlXHUyNTJmXHUyNTMwXHUyNTMxXHUyNTMyXHUyNTMzXHUyNTM0XHUyNTM1XHUyNTM2''@;'; put 'put ''XHUyNTM3XHUyNTM4XHUyNTM5XHUyNTNhXHUyNTNiXHUyNTNjXHUyNTNkXHUyNTNlXHUyNTNmXHUyNTQwXHUyNTQxXHUyNTQyXHUyNTQzXHUyNTQ0XHUyNTQ1XHUyNTQ2XHUyNTQ3XHUyNTQ4XHUyNTQ5XHUyNTRhXHUyNTRiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTY5XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxNjldW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTY5XVtzXV09NDMyNjQrcyxoWzQzMjY0K3NdPWNbMTY5''@;'; put 'put ''XVtzXSk7Zm9yKGNbMTcwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MmRjXHU3MmRkXHU3MmRmXHU3MmUyXHU3MmUzXHU3MmU0XHU3MmU1XHU3MmU2XHU3MmU3XHU3MmVhXHU3MmViXHU3MmY1XHU3MmY2XHU3MmY5XHU3MmZkXHU3''@;'; put 'put ''MmZlXHU3MmZmXHU3MzAwXHU3MzAyXHU3MzA0XHU3MzA1XHU3MzA2XHU3MzA3XHU3MzA4XHU3MzA5XHU3MzBiXHU3MzBjXHU3MzBkXHU3MzBmXHU3MzEwXHU3MzExXHU3MzEyXHU3MzE0XHU3MzE4XHU3MzE5XHU3MzFhXHU3MzFmXHU3MzIwXHU3MzIzXHU3MzI0XHU3MzI2XHU3MzI3XHU3MzI4''@;'; put 'put ''XHU3MzJkXHU3MzJmXHU3MzMwXHU3MzMyXHU3MzMzXHU3MzM1XHU3MzM2XHU3MzNhXHU3MzNiXHU3MzNjXHU3MzNkXHU3MzQwXHU3MzQxXHU3MzQyXHU3MzQzXHU3MzQ0XHU3MzQ1XHU3MzQ2XHU3MzQ3XHU3MzQ4XHVmZmZkXHU3MzQ5XHU3MzRhXHU3MzRiXHU3MzRjXHU3MzRlXHU3MzRmXHU3''@;'; put 'put ''MzUxXHU3MzUzXHU3MzU0XHU3MzU1XHU3MzU2XHU3MzU4XHU3MzU5XHU3MzVhXHU3MzViXHU3MzVjXHU3MzVkXHU3MzVlXHU3MzVmXHU3MzYxXHU3MzYyXHU3MzYzXHU3MzY0XHU3MzY1XHU3MzY2XHU3MzY3XHU3MzY4XHU3MzY5XHU3MzZhXHU3MzZiXHU3MzZlXHU3MzcwXHU3MzcxXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTcwXS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxNzBdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTcwXVtzXV09NDM1MjArcyxoWzQz''@;'; put 'put ''NTIwK3NdPWNbMTcwXVtzXSk7Zm9yKGNbMTcxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzcyXHU3MzczXHU3Mzc0XHU3Mzc1XHU3Mzc2XHU3Mzc3XHU3Mzc4XHU3Mzc5XHU3MzdhXHU3MzdiXHU3MzdjXHU3MzdkXHU3MzdmXHU3''@;'; put 'put ''MzgwXHU3MzgxXHU3MzgyXHU3MzgzXHU3Mzg1XHU3Mzg2XHU3Mzg4XHU3MzhhXHU3MzhjXHU3MzhkXHU3MzhmXHU3MzkwXHU3MzkyXHU3MzkzXHU3Mzk0XHU3Mzk1XHU3Mzk3XHU3Mzk4XHU3Mzk5XHU3MzlhXHU3MzljXHU3MzlkXHU3MzllXHU3M2EwXHU3M2ExXHU3M2EzXHU3M2E0XHU3M2E1''@;'; put 'put ''XHU3M2E2XHU3M2E3XHU3M2E4XHU3M2FhXHU3M2FjXHU3M2FkXHU3M2IxXHU3M2I0XHU3M2I1XHU3M2I2XHU3M2I4XHU3M2I5XHU3M2JjXHU3M2JkXHU3M2JlXHU3M2JmXHU3M2MxXHU3M2MzXHU3M2M0XHU3M2M1XHU3M2M2XHU3M2M3XHVmZmZkXHU3M2NiXHU3M2NjXHU3M2NlXHU3M2QyXHU3''@;'; put 'put ''M2QzXHU3M2Q0XHU3M2Q1XHU3M2Q2XHU3M2Q3XHU3M2Q4XHU3M2RhXHU3M2RiXHU3M2RjXHU3M2RkXHU3M2RmXHU3M2UxXHU3M2UyXHU3M2UzXHU3M2U0XHU3M2U2XHU3M2U4XHU3M2VhXHU3M2ViXHU3M2VjXHU3M2VlXHU3M2VmXHU3M2YwXHU3M2YxXHU3M2YzXHU3M2Y0XHU3M2Y1XHU3M2Y2''@;'; put 'put ''XHU3M2Y3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTcxXS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxNzFdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTcxXVtzXV09''@;'; put 'put ''NDM3NzYrcyxoWzQzNzc2K3NdPWNbMTcxXVtzXSk7Zm9yKGNbMTcyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3M2Y4XHU3M2Y5XHU3M2ZhXHU3M2ZiXHU3M2ZjXHU3M2ZkXHU3M2ZlXHU3M2ZmXHU3NDAwXHU3NDAxXHU3NDAyXHU3''@;'; put 'put ''NDA0XHU3NDA3XHU3NDA4XHU3NDBiXHU3NDBjXHU3NDBkXHU3NDBlXHU3NDExXHU3NDEyXHU3NDEzXHU3NDE0XHU3NDE1XHU3NDE2XHU3NDE3XHU3NDE4XHU3NDE5XHU3NDFjXHU3NDFkXHU3NDFlXHU3NDFmXHU3NDIwXHU3NDIxXHU3NDIzXHU3NDI0XHU3NDI3XHU3NDI5XHU3NDJiXHU3NDJk''@;'; put 'put ''XHU3NDJmXHU3NDMxXHU3NDMyXHU3NDM3XHU3NDM4XHU3NDM5XHU3NDNhXHU3NDNiXHU3NDNkXHU3NDNlXHU3NDNmXHU3NDQwXHU3NDQyXHU3NDQzXHU3NDQ0XHU3NDQ1XHU3NDQ2XHU3NDQ3XHU3NDQ4XHU3NDQ5XHU3NDRhXHU3NDRiXHU3NDRjXHU3NDRkXHVmZmZkXHU3NDRlXHU3NDRmXHU3''@;'; put 'put ''NDUwXHU3NDUxXHU3NDUyXHU3NDUzXHU3NDU0XHU3NDU2XHU3NDU4XHU3NDVkXHU3NDYwXHU3NDYxXHU3NDYyXHU3NDYzXHU3NDY0XHU3NDY1XHU3NDY2XHU3NDY3XHU3NDY4XHU3NDY5XHU3NDZhXHU3NDZiXHU3NDZjXHU3NDZlXHU3NDZmXHU3NDcxXHU3NDcyXHU3NDczXHU3NDc0XHU3NDc1''@;'; put 'put ''XHU3NDc4XHU3NDc5XHU3NDdhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTcyXS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxNzJdW3NdLmNoYXJDb2RlQXQoMCkmJih5''@;'; put 'put ''W2NbMTcyXVtzXV09NDQwMzIrcyxoWzQ0MDMyK3NdPWNbMTcyXVtzXSk7Zm9yKGNbMTczXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDdiXHU3NDdjXHU3NDdkXHU3NDdmXHU3NDgyXHU3NDg0XHU3NDg1XHU3NDg2XHU3NDg4XHU3''@;'; put 'put ''NDg5XHU3NDhhXHU3NDhjXHU3NDhkXHU3NDhmXHU3NDkxXHU3NDkyXHU3NDkzXHU3NDk0XHU3NDk1XHU3NDk2XHU3NDk3XHU3NDk4XHU3NDk5XHU3NDlhXHU3NDliXHU3NDlkXHU3NDlmXHU3NGEwXHU3NGExXHU3NGEyXHU3NGEzXHU3NGE0XHU3NGE1XHU3NGE2XHU3NGFhXHU3NGFiXHU3NGFj''@;'; put 'put ''XHU3NGFkXHU3NGFlXHU3NGFmXHU3NGIwXHU3NGIxXHU3NGIyXHU3NGIzXHU3NGI0XHU3NGI1XHU3NGI2XHU3NGI3XHU3NGI4XHU3NGI5XHU3NGJiXHU3NGJjXHU3NGJkXHU3NGJlXHU3NGJmXHU3NGMwXHU3NGMxXHU3NGMyXHU3NGMzXHU3NGM0XHU3NGM1XHU3NGM2XHU3NGM3XHVmZmZkXHU3''@;'; put 'put ''NGM4XHU3NGM5XHU3NGNhXHU3NGNiXHU3NGNjXHU3NGNkXHU3NGNlXHU3NGNmXHU3NGQwXHU3NGQxXHU3NGQzXHU3NGQ0XHU3NGQ1XHU3NGQ2XHU3NGQ3XHU3NGQ4XHU3NGQ5XHU3NGRhXHU3NGRiXHU3NGRkXHU3NGRmXHU3NGUxXHU3NGU1XHU3NGU3XHU3NGU4XHU3NGU5XHU3NGVhXHU3NGVi''@;'; put 'put ''XHU3NGVjXHU3NGVkXHU3NGYwXHU3NGYxXHU3NGYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTczXS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxNzNdW3NdLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJih5W2NbMTczXVtzXV09NDQyODgrcyxoWzQ0Mjg4K3NdPWNbMTczXVtzXSk7Zm9yKGNbMTc0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGYzXHU3NGY1XHU3NGY4XHU3NGY5XHU3NGZhXHU3NGZiXHU3NGZjXHU3''@;'; put 'put ''NGZkXHU3NGZlXHU3NTAwXHU3NTAxXHU3NTAyXHU3NTAzXHU3NTA1XHU3NTA2XHU3NTA3XHU3NTA4XHU3NTA5XHU3NTBhXHU3NTBiXHU3NTBjXHU3NTBlXHU3NTEwXHU3NTEyXHU3NTE0XHU3NTE1XHU3NTE2XHU3NTE3XHU3NTFiXHU3NTFkXHU3NTFlXHU3NTIwXHU3NTIxXHU3NTIyXHU3NTIz''@;'; put 'put ''XHU3NTI0XHU3NTI2XHU3NTI3XHU3NTJhXHU3NTJlXHU3NTM0XHU3NTM2XHU3NTM5XHU3NTNjXHU3NTNkXHU3NTNmXHU3NTQxXHU3NTQyXHU3NTQzXHU3NTQ0XHU3NTQ2XHU3NTQ3XHU3NTQ5XHU3NTRhXHU3NTRkXHU3NTUwXHU3NTUxXHU3NTUyXHU3NTUzXHU3NTU1XHU3NTU2XHU3NTU3XHU3''@;'; put 'put ''NTU4XHVmZmZkXHU3NTVkXHU3NTVlXHU3NTVmXHU3NTYwXHU3NTYxXHU3NTYyXHU3NTYzXHU3NTY0XHU3NTY3XHU3NTY4XHU3NTY5XHU3NTZiXHU3NTZjXHU3NTZkXHU3NTZlXHU3NTZmXHU3NTcwXHU3NTcxXHU3NTczXHU3NTc1XHU3NTc2XHU3NTc3XHU3NTdhXHU3NTdiXHU3NTdjXHU3NTdk''@;'; put 'put ''XHU3NTdlXHU3NTgwXHU3NTgxXHU3NTgyXHU3NTg0XHU3NTg1XHU3NTg3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTc0XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sx''@;'; put 'put ''NzRdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTc0XVtzXV09NDQ1NDQrcyxoWzQ0NTQ0K3NdPWNbMTc0XVtzXSk7Zm9yKGNbMTc1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NTg4XHU3NTg5XHU3NThhXHU3NThjXHU3NThkXHU3''@;'; put 'put ''NThlXHU3NTkwXHU3NTkzXHU3NTk1XHU3NTk4XHU3NTliXHU3NTljXHU3NTllXHU3NWEyXHU3NWE2XHU3NWE3XHU3NWE4XHU3NWE5XHU3NWFhXHU3NWFkXHU3NWI2XHU3NWI3XHU3NWJhXHU3NWJiXHU3NWJmXHU3NWMwXHU3NWMxXHU3NWM2XHU3NWNiXHU3NWNjXHU3NWNlXHU3NWNmXHU3NWQw''@;'; put 'put ''XHU3NWQxXHU3NWQzXHU3NWQ3XHU3NWQ5XHU3NWRhXHU3NWRjXHU3NWRkXHU3NWRmXHU3NWUwXHU3NWUxXHU3NWU1XHU3NWU5XHU3NWVjXHU3NWVkXHU3NWVlXHU3NWVmXHU3NWYyXHU3NWYzXHU3NWY1XHU3NWY2XHU3NWY3XHU3NWY4XHU3NWZhXHU3NWZiXHU3NWZkXHU3NWZlXHU3NjAyXHU3''@;'; put 'put ''NjA0XHU3NjA2XHU3NjA3XHVmZmZkXHU3NjA4XHU3NjA5XHU3NjBiXHU3NjBkXHU3NjBlXHU3NjBmXHU3NjExXHU3NjEyXHU3NjEzXHU3NjE0XHU3NjE2XHU3NjFhXHU3NjFjXHU3NjFkXHU3NjFlXHU3NjIxXHU3NjIzXHU3NjI3XHU3NjI4XHU3NjJjXHU3NjJlXHU3NjJmXHU3NjMxXHU3NjMy''@;'; put 'put ''XHU3NjM2XHU3NjM3XHU3NjM5XHU3NjNhXHU3NjNiXHU3NjNkXHU3NjQxXHU3NjQyXHU3NjQ0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTc1XS5sZW5ndGg7Kytz''@;'; put 'put ''KTY1NTMzIT09Y1sxNzVdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTc1XVtzXV09NDQ4MDArcyxoWzQ0ODAwK3NdPWNbMTc1XVtzXSk7Zm9yKGNbMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NjQ1XHU3NjQ2XHU3NjQ3XHU3''@;'; put 'put ''NjQ4XHU3NjQ5XHU3NjRhXHU3NjRiXHU3NjRlXHU3NjRmXHU3NjUwXHU3NjUxXHU3NjUyXHU3NjUzXHU3NjU1XHU3NjU3XHU3NjU4XHU3NjU5XHU3NjVhXHU3NjViXHU3NjVkXHU3NjVmXHU3NjYwXHU3NjYxXHU3NjYyXHU3NjY0XHU3NjY1XHU3NjY2XHU3NjY3XHU3NjY4XHU3NjY5XHU3NjZh''@;'; put 'put ''XHU3NjZjXHU3NjZkXHU3NjZlXHU3NjcwXHU3NjcxXHU3NjcyXHU3NjczXHU3Njc0XHU3Njc1XHU3Njc2XHU3Njc3XHU3Njc5XHU3NjdhXHU3NjdjXHU3NjdmXHU3NjgwXHU3NjgxXHU3NjgzXHU3Njg1XHU3Njg5XHU3NjhhXHU3NjhjXHU3NjhkXHU3NjhmXHU3NjkwXHU3NjkyXHU3Njk0XHU3''@;'; put 'put ''Njk1XHU3Njk3XHU3Njk4XHU3NjlhXHU3NjliXHVmZmZkXHU3NjljXHU3NjlkXHU3NjllXHU3NjlmXHU3NmEwXHU3NmExXHU3NmEyXHU3NmEzXHU3NmE1XHU3NmE2XHU3NmE3XHU3NmE4XHU3NmE5XHU3NmFhXHU3NmFiXHU3NmFjXHU3NmFkXHU3NmFmXHU3NmIwXHU3NmIzXHU3NmI1XHU3NmI2''@;'; put 'put ''XHU3NmI3XHU3NmI4XHU3NmI5XHU3NmJhXHU3NmJiXHU3NmJjXHU3NmJkXHU3NmJlXHU3NmMwXHU3NmMxXHU3NmMzXHU1NTRhXHU5NjNmXHU1N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNjXHU3N2VlXHU4MjdlXHU3ODhkXHU3MjMxXHU5Njk4XHU5NzhkXHU2''@;'; put 'put ''YzI4XHU1Yjg5XHU0ZmZhXHU2MzA5XHU2Njk3XHU1Y2I4XHU4MGZhXHU2ODQ4XHU4MGFlXHU2NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3MWFjXHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2MzRjXHU2MjUyXHU1M2VkXHU1NDI3XHU3YjA2XHU1MTZiXHU3NWE0''@;'; put 'put ''XHU1ZGY0XHU2MmQ0XHU4ZGNiXHU5Nzc2XHU2MjhhXHU4MDE5XHU1NzVkXHU5NzM4XHU3ZjYyXHU3MjM4XHU3NjdkXHU2N2NmXHU3NjdlXHU2NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJjXHU2MjczXHU4MjJjXHU5ODgxXHU2NzdmXHU3MjQ4XHU2MjZlXHU2''@;'; put 'put ''MmNjXHU0ZjM0XHU3NGUzXHU1MzRhXHU1MjllXHU3ZWNhXHU5MGE2XHU1ZTJlXHU2ODg2XHU2OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3OGM1XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4OTEyXHU1MjY1XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTc2''@;'; put 'put ''XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxNzZdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTc2XVtzXV09NDUwNTYrcyxoWzQ1MDU2K3NdPWNbMTc2XVtzXSk7Zm9yKGNbMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NmM0XHU3''@;'; put 'put ''NmM3XHU3NmM5XHU3NmNiXHU3NmNjXHU3NmQzXHU3NmQ1XHU3NmQ5XHU3NmRhXHU3NmRjXHU3NmRkXHU3NmRlXHU3NmUwXHU3NmUxXHU3NmUyXHU3NmUzXHU3NmU0XHU3NmU2XHU3NmU3XHU3NmU4XHU3NmU5XHU3NmVhXHU3NmViXHU3NmVjXHU3NmVkXHU3NmYwXHU3NmYzXHU3NmY1XHU3NmY2''@;'; put 'put ''XHU3NmY3XHU3NmZhXHU3NmZiXHU3NmZkXHU3NmZmXHU3NzAwXHU3NzAyXHU3NzAzXHU3NzA1XHU3NzA2XHU3NzBhXHU3NzBjXHU3NzBlXHU3NzBmXHU3NzEwXHU3NzExXHU3NzEyXHU3NzEzXHU3NzE0XHU3NzE1XHU3NzE2XHU3NzE3XHU3NzE4XHU3NzFiXHU3NzFjXHU3NzFkXHU3NzFlXHU3''@;'; put 'put ''NzIxXHU3NzIzXHU3NzI0XHU3NzI1XHU3NzI3XHU3NzJhXHU3NzJiXHVmZmZkXHU3NzJjXHU3NzJlXHU3NzMwXHU3NzMxXHU3NzMyXHU3NzMzXHU3NzM0XHU3NzM5XHU3NzNiXHU3NzNkXHU3NzNlXHU3NzNmXHU3NzQyXHU3NzQ0XHU3NzQ1XHU3NzQ2XHU3NzQ4XHU3NzQ5XHU3NzRhXHU3NzRi''@;'; put 'put ''XHU3NzRjXHU3NzRkXHU3NzRlXHU3NzRmXHU3NzUyXHU3NzUzXHU3NzU0XHU3NzU1XHU3NzU2XHU3NzU3XHU3NzU4XHU3NzU5XHU3NzVjXHU4NTg0XHU5NmY5XHU0ZmRkXHU1ODIxXHU5OTcxXHU1YjlkXHU2MmIxXHU2MmE1XHU2NmI0XHU4Yzc5XHU5YzhkXHU3MjA2XHU2NzZmXHU3ODkxXHU2''@;'; put 'put ''MGIyXHU1MzUxXHU1MzE3XHU4Zjg4XHU4MGNjXHU4ZDFkXHU5NGExXHU1MDBkXHU3MmM4XHU1OTA3XHU2MGViXHU3MTE5XHU4OGFiXHU1OTU0XHU4MmVmXHU2NzJjXHU3YjI4XHU1ZDI5XHU3ZWY3XHU3NTJkXHU2Y2Y1XHU4ZTY2XHU4ZmY4XHU5MDNjXHU5ZjNiXHU2YmQ0XHU5MTE5XHU3YjE0''@;'; put 'put ''XHU1ZjdjXHU3OGE3XHU4NGQ2XHU4NTNkXHU2YmQ1XHU2YmQ5XHU2YmQ2XHU1ZTAxXHU1ZTg3XHU3NWY5XHU5NWVkXHU2NTVkXHU1ZjBhXHU1ZmM1XHU4ZjlmXHU1OGMxXHU4MWMyXHU5MDdmXHU5NjViXHU5N2FkXHU4ZmI5XHU3ZjE2XHU4ZDJjXHU2MjQxXHU0ZmJmXHU1M2Q4XHU1MzVlXHU4''@;'; put 'put ''ZmE4XHU4ZmE5XHU4ZmFiXHU5MDRkXHU2ODA3XHU1ZjZhXHU4MTk4XHU4ODY4XHU5Y2Q2XHU2MThiXHU1MjJiXHU3NjJhXHU1ZjZjXHU2NThjXHU2ZmQyXHU2ZWU4XHU1YmJlXHU2NDQ4XHU1MTc1XHU1MWIwXHU2N2M0XHU0ZTE5XHU3OWM5XHU5OTdjXHU3MGIzXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''cz0wO3MhPWNbMTc3XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxNzddW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTc3XVtzXV09NDUzMTIrcyxoWzQ1MzEyK3NdPWNbMTc3XVtzXSk7Zm9yKGNbMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU3NzVkXHU3NzVlXHU3NzVmXHU3NzYwXHU3NzY0XHU3NzY3XHU3NzY5XHU3NzZhXHU3NzZkXHU3NzZlXHU3NzZmXHU3NzcwXHU3NzcxXHU3NzcyXHU3NzczXHU3Nzc0XHU3Nzc1XHU3Nzc2XHU3Nzc3XHU3Nzc4XHU3NzdhXHU3NzdiXHU3NzdjXHU3NzgxXHU3NzgyXHU3NzgzXHU3Nzg2''@;'; put 'put ''XHU3Nzg3XHU3Nzg4XHU3Nzg5XHU3NzhhXHU3NzhiXHU3NzhmXHU3NzkwXHU3NzkzXHU3Nzk0XHU3Nzk1XHU3Nzk2XHU3Nzk3XHU3Nzk4XHU3Nzk5XHU3NzlhXHU3NzliXHU3NzljXHU3NzlkXHU3NzllXHU3N2ExXHU3N2EzXHU3N2E0XHU3N2E2XHU3N2E4XHU3N2FiXHU3N2FkXHU3N2FlXHU3''@;'; put 'put ''N2FmXHU3N2IxXHU3N2IyXHU3N2I0XHU3N2I2XHU3N2I3XHU3N2I4XHU3N2I5XHU3N2JhXHVmZmZkXHU3N2JjXHU3N2JlXHU3N2MwXHU3N2MxXHU3N2MyXHU3N2MzXHU3N2M0XHU3N2M1XHU3N2M2XHU3N2M3XHU3N2M4XHU3N2M5XHU3N2NhXHU3N2NiXHU3N2NjXHU3N2NlXHU3N2NmXHU3N2Qw''@;'; put 'put ''XHU3N2QxXHU3N2QyXHU3N2QzXHU3N2Q0XHU3N2Q1XHU3N2Q2XHU3N2Q4XHU3N2Q5XHU3N2RhXHU3N2RkXHU3N2RlXHU3N2RmXHU3N2UwXHU3N2UxXHU3N2U0XHU3NWM1XHU1ZTc2XHU3M2JiXHU4M2UwXHU2NGFkXHU2MmU4XHU5NGI1XHU2Y2UyXHU1MzVhXHU1MmMzXHU2NDBmXHU5NGMyXHU3''@;'; put 'put ''Yjk0XHU0ZjJmXHU1ZTFiXHU4MjM2XHU4MTE2XHU4MThhXHU2ZTI0XHU2Y2NhXHU5YTczXHU2MzU1XHU1MzVjXHU1NGZhXHU4ODY1XHU1N2UwXHU0ZTBkXHU1ZTAzXHU2YjY1XHU3YzNmXHU5MGU4XHU2MDE2XHU2NGU2XHU3MzFjXHU4OGMxXHU2NzUwXHU2MjRkXHU4ZDIyXHU3NzZjXHU4ZTI5''@;'; put 'put ''XHU5MWM3XHU1ZjY5XHU4M2RjXHU4NTIxXHU5OTEwXHU1M2MyXHU4Njk1XHU2YjhiXHU2MGVkXHU2MGU4XHU3MDdmXHU4MmNkXHU4MjMxXHU0ZWQzXHU2Y2E3XHU4NWNmXHU2NGNkXHU3Y2Q5XHU2OWZkXHU2NmY5XHU4MzQ5XHU1Mzk1XHU3YjU2XHU0ZmE3XHU1MThjXHU2ZDRiXHU1YzQyXHU4''@;'; put 'put ''ZTZkXHU2M2QyXHU1M2M5XHU4MzJjXHU4MzM2XHU2N2U1XHU3OGI0XHU2NDNkXHU1YmRmXHU1Yzk0XHU1ZGVlXHU4YmU3XHU2MmM2XHU2N2Y0XHU4YzdhXHU2NDAwXHU2M2JhXHU4NzQ5XHU5OThiXHU4YzE3XHU3ZjIwXHU5NGYyXHU0ZWE3XHU5NjEwXHU5OGE0XHU2NjBjXHU3MzE2XHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIikscz0wO3MhPWNbMTc4XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxNzhdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTc4XVtzXV09NDU1NjgrcyxoWzQ1NTY4K3NdPWNbMTc4XVtzXSk7Zm9yKGNbMTc5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU3N2U2XHU3N2U4XHU3N2VhXHU3N2VmXHU3N2YwXHU3N2YxXHU3N2YyXHU3N2Y0XHU3N2Y1XHU3N2Y3XHU3N2Y5XHU3N2ZhXHU3N2ZiXHU3N2ZjXHU3ODAzXHU3ODA0XHU3ODA1XHU3ODA2XHU3ODA3XHU3ODA4XHU3ODBhXHU3ODBiXHU3ODBlXHU3ODBmXHU3ODEw''@;'; put 'put ''XHU3ODEzXHU3ODE1XHU3ODE5XHU3ODFiXHU3ODFlXHU3ODIwXHU3ODIxXHU3ODIyXHU3ODI0XHU3ODI4XHU3ODJhXHU3ODJiXHU3ODJlXHU3ODJmXHU3ODMxXHU3ODMyXHU3ODMzXHU3ODM1XHU3ODM2XHU3ODNkXHU3ODNmXHU3ODQxXHU3ODQyXHU3ODQzXHU3ODQ0XHU3ODQ2XHU3ODQ4XHU3''@;'; put 'put ''ODQ5XHU3ODRhXHU3ODRiXHU3ODRkXHU3ODRmXHU3ODUxXHU3ODUzXHU3ODU0XHU3ODU4XHU3ODU5XHU3ODVhXHVmZmZkXHU3ODViXHU3ODVjXHU3ODVlXHU3ODVmXHU3ODYwXHU3ODYxXHU3ODYyXHU3ODYzXHU3ODY0XHU3ODY1XHU3ODY2XHU3ODY3XHU3ODY4XHU3ODY5XHU3ODZmXHU3ODcw''@;'; put 'put ''XHU3ODcxXHU3ODcyXHU3ODczXHU3ODc0XHU3ODc1XHU3ODc2XHU3ODc4XHU3ODc5XHU3ODdhXHU3ODdiXHU3ODdkXHU3ODdlXHU3ODdmXHU3ODgwXHU3ODgxXHU3ODgyXHU3ODgzXHU1NzNhXHU1YzFkXHU1ZTM4XHU5NTdmXHU1MDdmXHU4MGEwXHU1MzgyXHU2NTVlXHU3NTQ1XHU1NTMxXHU1''@;'; put 'put ''MDIxXHU4ZDg1XHU2Mjg0XHU5NDllXHU2NzFkXHU1NjMyXHU2ZjZlXHU1ZGUyXHU1NDM1XHU3MDkyXHU4ZjY2XHU2MjZmXHU2NGE0XHU2M2EzXHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4XHU1ZmYxXHU2Yzg5XHU5NjQ4XHU4ZDgxXHU4ODZjXHU2NDkxXHU3OWYw''@;'; put 'put ''XHU1N2NlXHU2YTU5XHU2MjEwXHU1NDQ4XHU0ZTU4XHU3YTBiXHU2MGU5XHU2Zjg0XHU4YmRhXHU2MjdmXHU5MDFlXHU5YThiXHU3OWU0XHU1NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5YTcwXHU4MDNiXHU5ZjdmXHU0Zjg4XHU1YzNhXHU4ZDY0XHU3ZmM1XHU2''@;'; put 'put ''NWE1XHU3MGJkXHU1MTQ1XHU1MWIyXHU4NjZiXHU1ZDA3XHU1YmEwXHU2MmJkXHU5MTZjXHU3NTc0XHU4ZTBjXHU3YTIwXHU2MTAxXHU3Yjc5XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZhXHU2YTcxXHU1M2E4XHU4ZTg3XHU5NTA0XHU5NmNmXHU2ZWMxXHU5NjY0''@;'; put 'put ''XHU2OTVhXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTc5XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxNzldW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTc5XVtzXV09NDU4MjQrcyxoWzQ1ODI0K3NdPWNbMTc5XVtzXSk7Zm9yKGNbMTgwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ODg0XHU3ODg1XHU3ODg2XHU3ODg4XHU3ODhhXHU3ODhiXHU3ODhmXHU3ODkwXHU3ODkyXHU3ODk0XHU3ODk1XHU3ODk2XHU3ODk5XHU3ODlkXHU3ODllXHU3OGEwXHU3OGEyXHU3OGE0XHU3OGE2XHU3OGE4XHU3OGE5XHU3OGFhXHU3OGFi''@;'; put 'put ''XHU3OGFjXHU3OGFkXHU3OGFlXHU3OGFmXHU3OGI1XHU3OGI2XHU3OGI3XHU3OGI4XHU3OGJhXHU3OGJiXHU3OGJjXHU3OGJkXHU3OGJmXHU3OGMwXHU3OGMyXHU3OGMzXHU3OGM0XHU3OGM2XHU3OGM3XHU3OGM4XHU3OGNjXHU3OGNkXHU3OGNlXHU3OGNmXHU3OGQxXHU3OGQyXHU3OGQzXHU3''@;'; put 'put ''OGQ2XHU3OGQ3XHU3OGQ4XHU3OGRhXHU3OGRiXHU3OGRjXHU3OGRkXHU3OGRlXHU3OGRmXHU3OGUwXHU3OGUxXHU3OGUyXHU3OGUzXHVmZmZkXHU3OGU0XHU3OGU1XHU3OGU2XHU3OGU3XHU3OGU5XHU3OGVhXHU3OGViXHU3OGVkXHU3OGVlXHU3OGVmXHU3OGYwXHU3OGYxXHU3OGYzXHU3OGY1''@;'; put 'put ''XHU3OGY2XHU3OGY4XHU3OGY5XHU3OGZiXHU3OGZjXHU3OGZkXHU3OGZlXHU3OGZmXHU3OTAwXHU3OTAyXHU3OTAzXHU3OTA0XHU3OTA2XHU3OTA3XHU3OTA4XHU3OTA5XHU3OTBhXHU3OTBiXHU3OTBjXHU3ODQwXHU1MGE4XHU3N2Q3XHU2NDEwXHU4OWU2XHU1OTA0XHU2M2UzXHU1ZGRkXHU3''@;'; put 'put ''YTdmXHU2OTNkXHU0ZjIwXHU4MjM5XHU1NTk4XHU0ZTMyXHU3NWFlXHU3YTk3XHU1ZTYyXHU1ZThhXHU5NWVmXHU1MjFiXHU1NDM5XHU3MDhhXHU2Mzc2XHU5NTI0XHU1NzgyXHU2NjI1XHU2OTNmXHU5MTg3XHU1NTA3XHU2ZGYzXHU3ZWFmXHU4ODIyXHU2MjMzXHU3ZWYwXHU3NWI1XHU4MzI4''@;'; put 'put ''XHU3OGMxXHU5NmNjXHU4ZjllXHU2MTQ4XHU3NGY3XHU4YmNkXHU2YjY0XHU1MjNhXHU4ZDUwXHU2YjIxXHU4MDZhXHU4NDcxXHU1NmYxXHU1MzA2XHU0ZWNlXHU0ZTFiXHU1MWQxXHU3Yzk3XHU5MThiXHU3YzA3XHU0ZmMzXHU4ZTdmXHU3YmUxXHU3YTljXHU2NDY3XHU1ZDE0XHU1MGFjXHU4''@;'; put 'put ''MTA2XHU3NjAxXHU3Y2I5XHU2ZGVjXHU3ZmUwXHU2NzUxXHU1YjU4XHU1YmY4XHU3OGNiXHU2NGFlXHU2NDEzXHU2M2FhXHU2MzJiXHU5NTE5XHU2NDJkXHU4ZmJlXHU3YjU0XHU3NjI5XHU2MjUzXHU1OTI3XHU1NDQ2XHU2Yjc5XHU1MGEzXHU2MjM0XHU1ZTI2XHU2Yjg2XHU0ZWUzXHU4ZDM3''@;'; put 'put ''XHU4ODhiXHU1Zjg1XHU5MDJlXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTgwXS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxODBdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTgwXVtzXV09NDYwODArcyxoWzQ2MDgwK3NdPWNbMTgwXVtzXSk7Zm9yKGNbMTgxXT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTBkXHU3OTBlXHU3OTBmXHU3OTEwXHU3OTExXHU3OTEyXHU3OTE0XHU3OTE1XHU3OTE2XHU3OTE3XHU3OTE4XHU3OTE5XHU3OTFhXHU3OTFiXHU3OTFjXHU3OTFkXHU3OTFmXHU3OTIwXHU3OTIxXHU3OTIyXHU3OTIz''@;'; put 'put ''XHU3OTI1XHU3OTI2XHU3OTI3XHU3OTI4XHU3OTI5XHU3OTJhXHU3OTJiXHU3OTJjXHU3OTJkXHU3OTJlXHU3OTJmXHU3OTMwXHU3OTMxXHU3OTMyXHU3OTMzXHU3OTM1XHU3OTM2XHU3OTM3XHU3OTM4XHU3OTM5XHU3OTNkXHU3OTNmXHU3OTQyXHU3OTQzXHU3OTQ0XHU3OTQ1XHU3OTQ3XHU3''@;'; put 'put ''OTRhXHU3OTRiXHU3OTRjXHU3OTRkXHU3OTRlXHU3OTRmXHU3OTUwXHU3OTUxXHU3OTUyXHU3OTU0XHU3OTU1XHU3OTU4XHU3OTU5XHU3OTYxXHU3OTYzXHVmZmZkXHU3OTY0XHU3OTY2XHU3OTY5XHU3OTZhXHU3OTZiXHU3OTZjXHU3OTZlXHU3OTcwXHU3OTcxXHU3OTcyXHU3OTczXHU3OTc0''@;'; put 'put ''XHU3OTc1XHU3OTc2XHU3OTc5XHU3OTdiXHU3OTdjXHU3OTdkXHU3OTdlXHU3OTdmXHU3OTgyXHU3OTgzXHU3OTg2XHU3OTg3XHU3OTg4XHU3OTg5XHU3OThiXHU3OThjXHU3OThkXHU3OThlXHU3OTkwXHU3OTkxXHU3OTkyXHU2MDIwXHU4MDNkXHU2MmM1XHU0ZTM5XHU1MzU1XHU5MGY4XHU2''@;'; put 'put ''M2I4XHU4MGM2XHU2NWU2XHU2YzJlXHU0ZjQ2XHU2MGVlXHU2ZGUxXHU4YmRlXHU1ZjM5XHU4NmNiXHU1ZjUzXHU2MzIxXHU1MTVhXHU4MzYxXHU2ODYzXHU1MjAwXHU2MzYzXHU4ZTQ4XHU1MDEyXHU1YzliXHU3OTc3XHU1YmZjXHU1MjMwXHU3YTNiXHU2MGJjXHU5MDUzXHU3NmQ3XHU1ZmI3''@;'; put 'put ''XHU1Zjk3XHU3Njg0XHU4ZTZjXHU3MDZmXHU3NjdiXHU3YjQ5XHU3N2FhXHU1MWYzXHU5MDkzXHU1ODI0XHU0ZjRlXHU2ZWY0XHU4ZmVhXHU2NTRjXHU3YjFiXHU3MmM0XHU2ZGE0XHU3ZmRmXHU1YWUxXHU2MmI1XHU1ZTk1XHU1NzMwXHU4NDgyXHU3YjJjXHU1ZTFkXHU1ZjFmXHU5MDEyXHU3''@;'; put 'put ''ZjE0XHU5OGEwXHU2MzgyXHU2ZWM3XHU3ODk4XHU3MGI5XHU1MTc4XHU5NzViXHU1N2FiXHU3NTM1XHU0ZjQzXHU3NTM4XHU1ZTk3XHU2MGU2XHU1OTYwXHU2ZGMwXHU2YmJmXHU3ODg5XHU1M2ZjXHU5NmQ1XHU1MWNiXHU1MjAxXHU2Mzg5XHU1NDBhXHU5NDkzXHU4YzAzXHU4ZGNjXHU3MjM5''@;'; put 'put ''XHU3ODlmXHU4Nzc2XHU4ZmVkXHU4YzBkXHU1M2UwXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTgxXS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxODFdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTgxXVtzXV09NDYzMzYrcyxoWzQ2MzM2K3NdPWNbMTgxXVtzXSk7Zm9yKGNbMTgyXT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTkzXHU3OTk0XHU3OTk1XHU3OTk2XHU3OTk3XHU3OTk4XHU3OTk5XHU3OTliXHU3OTljXHU3OTlkXHU3OTllXHU3OTlmXHU3OWEwXHU3OWExXHU3OWEyXHU3OWEzXHU3OWE0XHU3OWE1XHU3OWE2''@;'; put 'put ''XHU3OWE4XHU3OWE5XHU3OWFhXHU3OWFiXHU3OWFjXHU3OWFkXHU3OWFlXHU3OWFmXHU3OWIwXHU3OWIxXHU3OWIyXHU3OWI0XHU3OWI1XHU3OWI2XHU3OWI3XHU3OWI4XHU3OWJjXHU3OWJmXHU3OWMyXHU3OWM0XHU3OWM1XHU3OWM3XHU3OWM4XHU3OWNhXHU3OWNjXHU3OWNlXHU3OWNmXHU3''@;'; put 'put ''OWQwXHU3OWQzXHU3OWQ0XHU3OWQ2XHU3OWQ3XHU3OWQ5XHU3OWRhXHU3OWRiXHU3OWRjXHU3OWRkXHU3OWRlXHU3OWUwXHU3OWUxXHU3OWUyXHU3OWU1XHU3OWU4XHU3OWVhXHVmZmZkXHU3OWVjXHU3OWVlXHU3OWYxXHU3OWYyXHU3OWYzXHU3OWY0XHU3OWY1XHU3OWY2XHU3OWY3XHU3OWY5''@;'; put 'put ''XHU3OWZhXHU3OWZjXHU3OWZlXHU3OWZmXHU3YTAxXHU3YTA0XHU3YTA1XHU3YTA3XHU3YTA4XHU3YTA5XHU3YTBhXHU3YTBjXHU3YTBmXHU3YTEwXHU3YTExXHU3YTEyXHU3YTEzXHU3YTE1XHU3YTE2XHU3YTE4XHU3YTE5XHU3YTFiXHU3YTFjXHU0ZTAxXHU3NmVmXHU1M2VlXHU5NDg5XHU5''@;'; put 'put ''ODc2XHU5ZjBlXHU5NTJkXHU1YjlhXHU4YmEyXHU0ZTIyXHU0ZTFjXHU1MWFjXHU4NDYzXHU2MWMyXHU1MmE4XHU2ODBiXHU0Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4YzQ2XHU5MDE3XHU3NWQ4XHU5MGZkXHU3NzYzXHU2YmQyXHU3MjhhXHU3MmVj''@;'; put 'put ''XHU4YmZiXHU1ODM1XHU3Nzc5XHU4ZDRjXHU2NzVjXHU5NTQwXHU4MDlhXHU1ZWE2XHU2ZTIxXHU1OTkyXHU3YWVmXHU3N2VkXHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5XHU1OGE5XHU1NDI4XHU4ZTcyXHU2NTY2XHU5ODdmXHU1NmU0XHU5NDlkXHU3''@;'; put 'put ''NmZlXHU5MDQxXHU2Mzg3XHU1NGM2XHU1OTFhXHU1OTNhXHU1NzliXHU4ZWIyXHU2NzM1XHU4ZGZhXHU4MjM1XHU1MjQxXHU2MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1YTI1XHU2MDc2XHU1Mzg0XHU2MjdjXHU5MDRmXHU5MTAyXHU5OTdmXHU2MDY5''@;'; put 'put ''XHU4MDBjXHU1MTNmXHU4MDMzXHU1YzE0XHU5OTc1XHU2ZDMxXHU0ZThjXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTgyXS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxODJdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTgyXVtzXV09NDY1OTIrcyxoWzQ2NTkyK3NdPWNbMTgyXVtzXSk7Zm9y''@;'; put 'put ''KGNbMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTFkXHU3YTFmXHU3YTIxXHU3YTIyXHU3YTI0XHU3YTI1XHU3YTI2XHU3YTI3XHU3YTI4XHU3YTI5XHU3YTJhXHU3YTJiXHU3YTJjXHU3YTJkXHU3YTJlXHU3YTJmXHU3YTMw''@;'; put 'put ''XHU3YTMxXHU3YTMyXHU3YTM0XHU3YTM1XHU3YTM2XHU3YTM4XHU3YTNhXHU3YTNlXHU3YTQwXHU3YTQxXHU3YTQyXHU3YTQzXHU3YTQ0XHU3YTQ1XHU3YTQ3XHU3YTQ4XHU3YTQ5XHU3YTRhXHU3YTRiXHU3YTRjXHU3YTRkXHU3YTRlXHU3YTRmXHU3YTUwXHU3YTUyXHU3YTUzXHU3YTU0XHU3''@;'; put 'put ''YTU1XHU3YTU2XHU3YTU4XHU3YTU5XHU3YTVhXHU3YTViXHU3YTVjXHU3YTVkXHU3YTVlXHU3YTVmXHU3YTYwXHU3YTYxXHU3YTYyXHU3YTYzXHU3YTY0XHU3YTY1XHU3YTY2XHU3YTY3XHU3YTY4XHVmZmZkXHU3YTY5XHU3YTZhXHU3YTZiXHU3YTZjXHU3YTZkXHU3YTZlXHU3YTZmXHU3YTcx''@;'; put 'put ''XHU3YTcyXHU3YTczXHU3YTc1XHU3YTdiXHU3YTdjXHU3YTdkXHU3YTdlXHU3YTgyXHU3YTg1XHU3YTg3XHU3YTg5XHU3YThhXHU3YThiXHU3YThjXHU3YThlXHU3YThmXHU3YTkwXHU3YTkzXHU3YTk0XHU3YTk5XHU3YTlhXHU3YTliXHU3YTllXHU3YWExXHU3YWEyXHU4ZDMwXHU1M2QxXHU3''@;'; put 'put ''ZjVhXHU3YjRmXHU0ZjEwXHU0ZTRmXHU5NjAwXHU2Y2Q1XHU3M2QwXHU4NWU5XHU1ZTA2XHU3NTZhXHU3ZmZiXHU2YTBhXHU3N2ZlXHU5NDkyXHU3ZTQxXHU1MWUxXHU3MGU2XHU1M2NkXHU4ZmQ0XHU4MzAzXHU4ZDI5XHU3MmFmXHU5OTZkXHU2Y2RiXHU1NzRhXHU4MmIzXHU2NWI5XHU4MGFh''@;'; put 'put ''XHU2MjNmXHU5NjMyXHU1OWE4XHU0ZWZmXHU4YmJmXHU3ZWJhXHU2NTNlXHU4M2YyXHU5NzVlXHU1NTYxXHU5OGRlXHU4MGE1XHU1MzJhXHU4YmZkXHU1NDIwXHU4MGJhXHU1ZTlmXHU2Y2I4XHU4ZDM5XHU4MmFjXHU5MTVhXHU1NDI5XHU2YzFiXHU1MjA2XHU3ZWI3XHU1NzVmXHU3MTFhXHU2''@;'; put 'put ''YzdlXHU3Yzg5XHU1OTRiXHU0ZWZkXHU1ZmZmXHU2MTI0XHU3Y2FhXHU0ZTMwXHU1YzAxXHU2N2FiXHU4NzAyXHU1Y2YwXHU5NTBiXHU5OGNlXHU3NWFmXHU3MGZkXHU5MDIyXHU1MWFmXHU3ZjFkXHU4YmJkXHU1OTQ5XHU1MWU0XHU0ZjViXHU1NDI2XHU1OTJiXHU2NTc3XHU4MGE0XHU1Yjc1''@;'; put 'put ''XHU2Mjc2XHU2MmMyXHU4ZjkwXHU1ZTQ1XHU2YzFmXHU3YjI2XHU0ZjBmXHU0ZmQ4XHU2NzBkXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTgzXS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxODNdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTgzXVtzXV09NDY4NDgrcyxoWzQ2ODQ4K3NdPWNb''@;'; put 'put ''MTgzXVtzXSk7Zm9yKGNbMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YWEzXHU3YWE0XHU3YWE3XHU3YWE5XHU3YWFhXHU3YWFiXHU3YWFlXHU3YWFmXHU3YWIwXHU3YWIxXHU3YWIyXHU3YWI0XHU3YWI1XHU3YWI2XHU3YWI3''@;'; put 'put ''XHU3YWI4XHU3YWI5XHU3YWJhXHU3YWJiXHU3YWJjXHU3YWJkXHU3YWJlXHU3YWMwXHU3YWMxXHU3YWMyXHU3YWMzXHU3YWM0XHU3YWM1XHU3YWM2XHU3YWM3XHU3YWM4XHU3YWM5XHU3YWNhXHU3YWNjXHU3YWNkXHU3YWNlXHU3YWNmXHU3YWQwXHU3YWQxXHU3YWQyXHU3YWQzXHU3YWQ0XHU3''@;'; put 'put ''YWQ1XHU3YWQ3XHU3YWQ4XHU3YWRhXHU3YWRiXHU3YWRjXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU0XHU3YWU3XHU3YWU4XHU3YWU5XHU3YWVhXHU3YWViXHU3YWVjXHU3YWVlXHU3YWYwXHU3YWYxXHU3YWYyXHU3YWYzXHVmZmZkXHU3YWY0XHU3YWY1XHU3YWY2XHU3YWY3XHU3YWY4XHU3YWZi''@;'; put 'put ''XHU3YWZjXHU3YWZlXHU3YjAwXHU3YjAxXHU3YjAyXHU3YjA1XHU3YjA3XHU3YjA5XHU3YjBjXHU3YjBkXHU3YjBlXHU3YjEwXHU3YjEyXHU3YjEzXHU3YjE2XHU3YjE3XHU3YjE4XHU3YjFhXHU3YjFjXHU3YjFkXHU3YjFmXHU3YjIxXHU3YjIyXHU3YjIzXHU3YjI3XHU3YjI5XHU3YjJkXHU2''@;'; put 'put ''ZDZlXHU2ZGFhXHU3OThmXHU4OGIxXHU1ZjE3XHU3NTJiXHU2MjlhXHU4Zjg1XHU0ZmVmXHU5MWRjXHU2NWE3XHU4MTJmXHU4MTUxXHU1ZTljXHU4MTUwXHU4ZDc0XHU1MjZmXHU4OTg2XHU4ZDRiXHU1OTBkXHU1MDg1XHU0ZWQ4XHU5NjFjXHU3MjM2XHU4MTc5XHU4ZDFmXHU1YmNjXHU4YmEz''@;'; put 'put ''XHU5NjQ0XHU1OTg3XHU3ZjFhXHU1NDkwXHU1Njc2XHU1NjBlXHU4YmU1XHU2NTM5XHU2OTgyXHU5NDk5XHU3NmQ2XHU2ZTg5XHU1ZTcyXHU3NTE4XHU2NzQ2XHU2N2QxXHU3YWZmXHU4MDlkXHU4ZDc2XHU2MTFmXHU3OWM2XHU2NTYyXHU4ZDYzXHU1MTg4XHU1MjFhXHU5NGEyXHU3ZjM4XHU4''@;'; put 'put ''MDliXHU3ZWIyXHU1Yzk3XHU2ZTJmXHU2NzYwXHU3YmQ5XHU3NjhiXHU5YWQ4XHU4MThmXHU3Zjk0XHU3Y2Q1XHU2NDFlXHU5NTUwXHU3YTNmXHU1NDRhXHU1NGU1XHU2YjRjXHU2NDAxXHU2MjA4XHU5ZTNkXHU4MGYzXHU3NTk5XHU1MjcyXHU5NzY5XHU4NDViXHU2ODNjXHU4NmU0XHU5NjAx''@;'; put 'put ''XHU5Njk0XHU5NGVjXHU0ZTJhXHU1NDA0XHU3ZWQ5XHU2ODM5XHU4ZGRmXHU4MDE1XHU2NmY0XHU1ZTlhXHU3ZmI5XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTg0XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxODRdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTg0XVtzXV09NDcxMDQrcyxo''@;'; put 'put ''WzQ3MTA0K3NdPWNbMTg0XVtzXSk7Zm9yKGNbMTg1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YjJmXHU3YjMwXHU3YjMyXHU3YjM0XHU3YjM1XHU3YjM2XHU3YjM3XHU3YjM5XHU3YjNiXHU3YjNkXHU3YjNmXHU3YjQwXHU3YjQx''@;'; put 'put ''XHU3YjQyXHU3YjQzXHU3YjQ0XHU3YjQ2XHU3YjQ4XHU3YjRhXHU3YjRkXHU3YjRlXHU3YjUzXHU3YjU1XHU3YjU3XHU3YjU5XHU3YjVjXHU3YjVlXHU3YjVmXHU3YjYxXHU3YjYzXHU3YjY0XHU3YjY1XHU3YjY2XHU3YjY3XHU3YjY4XHU3YjY5XHU3YjZhXHU3YjZiXHU3YjZjXHU3YjZkXHU3''@;'; put 'put ''YjZmXHU3YjcwXHU3YjczXHU3Yjc0XHU3Yjc2XHU3Yjc4XHU3YjdhXHU3YjdjXHU3YjdkXHU3YjdmXHU3YjgxXHU3YjgyXHU3YjgzXHU3Yjg0XHU3Yjg2XHU3Yjg3XHU3Yjg4XHU3Yjg5XHU3YjhhXHU3YjhiXHU3YjhjXHU3YjhlXHU3YjhmXHVmZmZkXHU3YjkxXHU3YjkyXHU3YjkzXHU3Yjk2''@;'; put 'put ''XHU3Yjk4XHU3Yjk5XHU3YjlhXHU3YjliXHU3YjllXHU3YjlmXHU3YmEwXHU3YmEzXHU3YmE0XHU3YmE1XHU3YmFlXHU3YmFmXHU3YmIwXHU3YmIyXHU3YmIzXHU3YmI1XHU3YmI2XHU3YmI3XHU3YmI5XHU3YmJhXHU3YmJiXHU3YmJjXHU3YmJkXHU3YmJlXHU3YmJmXHU3YmMwXHU3YmMyXHU3''@;'; put 'put ''YmMzXHU3YmM0XHU1N2MyXHU4MDNmXHU2ODk3XHU1ZGU1XHU2NTNiXHU1MjlmXHU2MDZkXHU5ZjlhXHU0ZjliXHU4ZWFjXHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcxXHU5NGE5XHU1MmZlXHU2YzlmXHU4MmRmXHU3MmQ3XHU1N2EyXHU2Nzg0XHU4ZDJk''@;'; put 'put ''XHU1OTFmXHU4ZjljXHU4M2M3XHU1NDk1XHU3YjhkXHU0ZjMwXHU2Y2JkXHU1YjY0XHU1OWQxXHU5ZjEzXHU1M2U0XHU4NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1MjJlXHU3NGRjXHU1MjUwXHU1YmUxXHU2MzAyXHU4OTAyXHU0ZTU2XHU2MmQwXHU2''@;'; put 'put ''MDJhXHU2OGZhXHU1MTczXHU1Yjk4XHU1MWEwXHU4OWMyXHU3YmExXHU5OTg2XHU3ZjUwXHU2MGVmXHU3MDRjXHU4ZDJmXHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUyXHU5ZjlmXHU5NWZhXHU4ZjY4XHU5YjNjXHU4YmUxXHU3Njc4XHU2ODQyXHU2N2Rj''@;'; put 'put ''XHU4ZGVhXHU4ZDM1XHU1MjNkXHU4ZjhhXHU2ZWRhXHU2OGNkXHU5NTA1XHU5MGVkXHU1NmZkXHU2NzljXHU4OGY5XHU4ZmM3XHU1NGM4XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTg1XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxODVdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTg1XVtz''@;'; put 'put ''XV09NDczNjArcyxoWzQ3MzYwK3NdPWNbMTg1XVtzXSk7Zm9yKGNbMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YmM1XHU3YmM4XHU3YmM5XHU3YmNhXHU3YmNiXHU3YmNkXHU3YmNlXHU3YmNmXHU3YmQwXHU3YmQyXHU3YmQ0''@;'; put 'put ''XHU3YmQ1XHU3YmQ2XHU3YmQ3XHU3YmQ4XHU3YmRiXHU3YmRjXHU3YmRlXHU3YmRmXHU3YmUwXHU3YmUyXHU3YmUzXHU3YmU0XHU3YmU3XHU3YmU4XHU3YmU5XHU3YmViXHU3YmVjXHU3YmVkXHU3YmVmXHU3YmYwXHU3YmYyXHU3YmYzXHU3YmY0XHU3YmY1XHU3YmY2XHU3YmY4XHU3YmY5XHU3''@;'; put 'put ''YmZhXHU3YmZiXHU3YmZkXHU3YmZmXHU3YzAwXHU3YzAxXHU3YzAyXHU3YzAzXHU3YzA0XHU3YzA1XHU3YzA2XHU3YzA4XHU3YzA5XHU3YzBhXHU3YzBkXHU3YzBlXHU3YzEwXHU3YzExXHU3YzEyXHU3YzEzXHU3YzE0XHU3YzE1XHU3YzE3XHU3YzE4XHU3YzE5XHVmZmZkXHU3YzFhXHU3YzFi''@;'; put 'put ''XHU3YzFjXHU3YzFkXHU3YzFlXHU3YzIwXHU3YzIxXHU3YzIyXHU3YzIzXHU3YzI0XHU3YzI1XHU3YzI4XHU3YzI5XHU3YzJiXHU3YzJjXHU3YzJkXHU3YzJlXHU3YzJmXHU3YzMwXHU3YzMxXHU3YzMyXHU3YzMzXHU3YzM0XHU3YzM1XHU3YzM2XHU3YzM3XHU3YzM5XHU3YzNhXHU3YzNiXHU3''@;'; put 'put ''YzNjXHU3YzNkXHU3YzNlXHU3YzQyXHU5YWI4XHU1YjY5XHU2ZDc3XHU2YzI2XHU0ZWE1XHU1YmIzXHU5YTg3XHU5MTYzXHU2MWE4XHU5MGFmXHU5N2U5XHU1NDJiXHU2ZGI1XHU1YmQyXHU1MWZkXHU1NThhXHU3ZjU1XHU3ZmYwXHU2NGJjXHU2MzRkXHU2NWYxXHU2MWJlXHU2MDhkXHU3MTBh''@;'; put 'put ''XHU2YzU3XHU2YzQ5XHU1OTJmXHU2NzZkXHU4MjJhXHU1OGQ1XHU1NjhlXHU4YzZhXHU2YmViXHU5MGRkXHU1OTdkXHU4MDE3XHU1M2Y3XHU2ZDY5XHU1NDc1XHU1NTlkXHU4Mzc3XHU4M2NmXHU2ODM4XHU3OWJlXHU1NDhjXHU0ZjU1XHU1NDA4XHU3NmQyXHU4Yzg5XHU5NjAyXHU2Y2IzXHU2''@;'; put 'put ''ZGI4XHU4ZDZiXHU4OTEwXHU5ZTY0XHU4ZDNhXHU1NjNmXHU5ZWQxXHU3NWQ1XHU1Zjg4XHU3MmUwXHU2MDY4XHU1NGZjXHU0ZWE4XHU2YTJhXHU4ODYxXHU2MDUyXHU4ZjcwXHU1NGM0XHU3MGQ4XHU4Njc5XHU5ZTNmXHU2ZDJhXHU1YjhmXHU1ZjE4XHU3ZWEyXHU1NTg5XHU0ZmFmXHU3MzM0''@;'; put 'put ''XHU1NDNjXHU1MzlhXHU1MDE5XHU1NDBlXHU1NDdjXHU0ZTRlXHU1ZmZkXHU3NDVhXHU1OGY2XHU4NDZiXHU4MGUxXHU4Nzc0XHU3MmQwXHU3Y2NhXHU2ZTU2XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTg2XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxODZdW3NdLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''Jih5W2NbMTg2XVtzXV09NDc2MTYrcyxoWzQ3NjE2K3NdPWNbMTg2XVtzXSk7Zm9yKGNbMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YzQzXHU3YzQ0XHU3YzQ1XHU3YzQ2XHU3YzQ3XHU3YzQ4XHU3YzQ5XHU3YzRhXHU3YzRi''@;'; put 'put ''XHU3YzRjXHU3YzRlXHU3YzRmXHU3YzUwXHU3YzUxXHU3YzUyXHU3YzUzXHU3YzU0XHU3YzU1XHU3YzU2XHU3YzU3XHU3YzU4XHU3YzU5XHU3YzVhXHU3YzViXHU3YzVjXHU3YzVkXHU3YzVlXHU3YzVmXHU3YzYwXHU3YzYxXHU3YzYyXHU3YzYzXHU3YzY0XHU3YzY1XHU3YzY2XHU3YzY3XHU3''@;'; put 'put ''YzY4XHU3YzY5XHU3YzZhXHU3YzZiXHU3YzZjXHU3YzZkXHU3YzZlXHU3YzZmXHU3YzcwXHU3YzcxXHU3YzcyXHU3Yzc1XHU3Yzc2XHU3Yzc3XHU3Yzc4XHU3Yzc5XHU3YzdhXHU3YzdlXHU3YzdmXHU3YzgwXHU3YzgxXHU3YzgyXHU3YzgzXHU3Yzg0XHU3Yzg1XHU3Yzg2XHU3Yzg3XHVmZmZk''@;'; put 'put ''XHU3Yzg4XHU3YzhhXHU3YzhiXHU3YzhjXHU3YzhkXHU3YzhlXHU3YzhmXHU3YzkwXHU3YzkzXHU3Yzk0XHU3Yzk2XHU3Yzk5XHU3YzlhXHU3YzliXHU3Y2EwXHU3Y2ExXHU3Y2EzXHU3Y2E2XHU3Y2E3XHU3Y2E4XHU3Y2E5XHU3Y2FiXHU3Y2FjXHU3Y2FkXHU3Y2FmXHU3Y2IwXHU3Y2I0XHU3''@;'; put 'put ''Y2I1XHU3Y2I2XHU3Y2I3XHU3Y2I4XHU3Y2JhXHU3Y2JiXHU1ZjI3XHU4NjRlXHU1NTJjXHU2MmE0XHU0ZTkyXHU2Y2FhXHU2MjM3XHU4MmIxXHU1NGQ3XHU1MzRlXHU3MzNlXHU2ZWQxXHU3NTNiXHU1MjEyXHU1MzE2XHU4YmRkXHU2OWQwXHU1ZjhhXHU2MDAwXHU2ZGVlXHU1NzRmXHU2YjIy''@;'; put 'put ''XHU3M2FmXHU2ODUzXHU4ZmQ4XHU3ZjEzXHU2MzYyXHU2MGEzXHU1NTI0XHU3NWVhXHU4YzYyXHU3MTE1XHU2ZGEzXHU1YmE2XHU1ZTdiXHU4MzUyXHU2MTRjXHU5ZWM0XHU3OGZhXHU4NzU3XHU3YzI3XHU3Njg3XHU1MWYwXHU2MGY2XHU3MTRjXHU2NjQzXHU1ZTRjXHU2MDRkXHU4YzBlXHU3''@;'; put 'put ''MDcwXHU2MzI1XHU4Zjg5XHU1ZmJkXHU2MDYyXHU4NmQ0XHU1NmRlXHU2YmMxXHU2MDk0XHU2MTY3XHU1MzQ5XHU2MGUwXHU2NjY2XHU4ZDNmXHU3OWZkXHU0ZjFhXHU3MGU5XHU2YzQ3XHU4YmIzXHU4YmYyXHU3ZWQ4XHU4MzY0XHU2NjBmXHU1YTVhXHU5YjQyXHU2ZDUxXHU2ZGY3XHU4YzQx''@;'; put 'put ''XHU2ZDNiXHU0ZjE5XHU3MDZiXHU4M2I3XHU2MjE2XHU2MGQxXHU5NzBkXHU4ZDI3XHU3OTc4XHU1MWZiXHU1NzNlXHU1N2ZhXHU2NzNhXHU3NTc4XHU3YTNkXHU3OWVmXHU3Yjk1XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTg3XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxODddW3NdLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJih5W2NbMTg3XVtzXV09NDc4NzIrcyxoWzQ3ODcyK3NdPWNbMTg3XVtzXSk7Zm9yKGNbMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Y2JmXHU3Y2MwXHU3Y2MyXHU3Y2MzXHU3Y2M0XHU3Y2M2XHU3Y2M5''@;'; put 'put ''XHU3Y2NiXHU3Y2NlXHU3Y2NmXHU3Y2QwXHU3Y2QxXHU3Y2QyXHU3Y2QzXHU3Y2Q0XHU3Y2Q4XHU3Y2RhXHU3Y2RiXHU3Y2RkXHU3Y2RlXHU3Y2UxXHU3Y2UyXHU3Y2UzXHU3Y2U0XHU3Y2U1XHU3Y2U2XHU3Y2U3XHU3Y2U5XHU3Y2VhXHU3Y2ViXHU3Y2VjXHU3Y2VkXHU3Y2VlXHU3Y2YwXHU3''@;'; put 'put ''Y2YxXHU3Y2YyXHU3Y2YzXHU3Y2Y0XHU3Y2Y1XHU3Y2Y2XHU3Y2Y3XHU3Y2Y5XHU3Y2ZhXHU3Y2ZjXHU3Y2ZkXHU3Y2ZlXHU3Y2ZmXHU3ZDAwXHU3ZDAxXHU3ZDAyXHU3ZDAzXHU3ZDA0XHU3ZDA1XHU3ZDA2XHU3ZDA3XHU3ZDA4XHU3ZDA5XHU3ZDBiXHU3ZDBjXHU3ZDBkXHU3ZDBlXHU3ZDBm''@;'; put 'put ''XHU3ZDEwXHVmZmZkXHU3ZDExXHU3ZDEyXHU3ZDEzXHU3ZDE0XHU3ZDE1XHU3ZDE2XHU3ZDE3XHU3ZDE4XHU3ZDE5XHU3ZDFhXHU3ZDFiXHU3ZDFjXHU3ZDFkXHU3ZDFlXHU3ZDFmXHU3ZDIxXHU3ZDIzXHU3ZDI0XHU3ZDI1XHU3ZDI2XHU3ZDI4XHU3ZDI5XHU3ZDJhXHU3ZDJjXHU3ZDJkXHU3''@;'; put 'put ''ZDJlXHU3ZDMwXHU3ZDMxXHU3ZDMyXHU3ZDMzXHU3ZDM0XHU3ZDM1XHU3ZDM2XHU4MDhjXHU5OTY1XHU4ZmY5XHU2ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2OGQ4XHU4ZjkxXHU3YzRkXHU5NmM2XHU1M2NhXHU2MDI1XHU3NWJlXHU2YzcyXHU1Mzcz''@;'; put 'put ''XHU1YWM5XHU3ZWE3XHU2MzI0XHU1MWUwXHU4MTBhXHU1ZGYxXHU4NGRmXHU2MjgwXHU1MTgwXHU1YjYzXHU0ZjBlXHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRlXHU1YmM0XHU1YmMyXHU4YmExXHU4YmIwXHU2NWUyXHU1ZmNjXHU5NjQ1XHU1OTkzXHU3ZWU3XHU3ZWFhXHU1NjA5XHU2N2I3XHU1''@;'; put 'put ''OTM5XHU0ZjczXHU1YmI2XHU1MmEwXHU4MzVhXHU5ODhhXHU4ZDNlXHU3NTMyXHU5NGJlXHU1MDQ3XHU3YTNjXHU0ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3YjNhXHU5NWY0XHU3MTRlXHU1MTdjXHU4MGE5XHU4MjcwXHU1OTc4XHU3ZjA0XHU4MzI3''@;'; put 'put ''XHU2OGMwXHU2N2VjXHU3OGIxXHU3ODc3XHU2MmUzXHU2MzYxXHU3YjgwXHU0ZmVkXHU1MjZhXHU1MWNmXHU4MzUwXHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMxXHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTg4XS5sZW5ndGg7KytzKTY1NTMzIT09''@;'; put 'put ''Y1sxODhdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTg4XVtzXV09NDgxMjgrcyxoWzQ4MTI4K3NdPWNbMTg4XVtzXSk7Zm9yKGNbMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDM3XHU3ZDM4XHU3ZDM5XHU3ZDNhXHU3ZDNi''@;'; put 'put ''XHU3ZDNjXHU3ZDNkXHU3ZDNlXHU3ZDNmXHU3ZDQwXHU3ZDQxXHU3ZDQyXHU3ZDQzXHU3ZDQ0XHU3ZDQ1XHU3ZDQ2XHU3ZDQ3XHU3ZDQ4XHU3ZDQ5XHU3ZDRhXHU3ZDRiXHU3ZDRjXHU3ZDRkXHU3ZDRlXHU3ZDRmXHU3ZDUwXHU3ZDUxXHU3ZDUyXHU3ZDUzXHU3ZDU0XHU3ZDU1XHU3ZDU2XHU3''@;'; put 'put ''ZDU3XHU3ZDU4XHU3ZDU5XHU3ZDVhXHU3ZDViXHU3ZDVjXHU3ZDVkXHU3ZDVlXHU3ZDVmXHU3ZDYwXHU3ZDYxXHU3ZDYyXHU3ZDYzXHU3ZDY0XHU3ZDY1XHU3ZDY2XHU3ZDY3XHU3ZDY4XHU3ZDY5XHU3ZDZhXHU3ZDZiXHU3ZDZjXHU3ZDZkXHU3ZDZmXHU3ZDcwXHU3ZDcxXHU3ZDcyXHU3ZDcz''@;'; put 'put ''XHU3ZDc0XHU3ZDc1XHU3ZDc2XHVmZmZkXHU3ZDc4XHU3ZDc5XHU3ZDdhXHU3ZDdiXHU3ZDdjXHU3ZDdkXHU3ZDdlXHU3ZDdmXHU3ZDgwXHU3ZDgxXHU3ZDgyXHU3ZDgzXHU3ZDg0XHU3ZDg1XHU3ZDg2XHU3ZDg3XHU3ZDg4XHU3ZDg5XHU3ZDhhXHU3ZDhiXHU3ZDhjXHU3ZDhkXHU3ZDhlXHU3''@;'; put 'put ''ZDhmXHU3ZDkwXHU3ZDkxXHU3ZDkyXHU3ZDkzXHU3ZDk0XHU3ZDk1XHU3ZDk2XHU3ZDk3XHU3ZDk4XHU1MDY1XHU4MjMwXHU1MjUxXHU5OTZmXHU2ZTEwXHU2ZTg1XHU2ZGE3XHU1ZWZhXHU1MGY1XHU1OWRjXHU1YzA2XHU2ZDQ2XHU2YzVmXHU3NTg2XHU4NDhiXHU2ODY4XHU1OTU2XHU4YmIy''@;'; put 'put ''XHU1MzIwXHU5MTcxXHU5NjRkXHU4NTQ5XHU2OTEyXHU3OTAxXHU3MTI2XHU4MGY2XHU0ZWE0XHU5MGNhXHU2ZDQ3XHU5YTg0XHU1YTA3XHU1NmJjXHU2NDA1XHU5NGYwXHU3N2ViXHU0ZmE1XHU4MTFhXHU3MmUxXHU4OWQyXHU5OTdhXHU3ZjM0XHU3ZWRlXHU1MjdmXHU2NTU5XHU5MTc1XHU4''@;'; put 'put ''ZjdmXHU4ZjgzXHU1M2ViXHU3YTk2XHU2M2VkXHU2M2E1XHU3Njg2XHU3OWY4XHU4ODU3XHU5NjM2XHU2MjJhXHU1MmFiXHU4MjgyXHU2ODU0XHU2NzcwXHU2Mzc3XHU3NzZiXHU3YWVkXHU2ZDAxXHU3ZWQzXHU4OWUzXHU1OWQwXHU2MjEyXHU4NWM5XHU4MmE1XHU3NTRjXHU1MDFmXHU0ZWNi''@;'; put 'put ''XHU3NWE1XHU4YmViXHU1YzRhXHU1ZGZlXHU3YjRiXHU2NWE0XHU5MWQxXHU0ZWNhXHU2ZDI1XHU4OTVmXHU3ZDI3XHU5NTI2XHU0ZWM1XHU4YzI4XHU4ZmRiXHU5NzczXHU2NjRiXHU3OTgxXHU4ZmQxXHU3MGVjXHU2ZDc4XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTg5XS5sZW5ndGg7''@;'; put 'put ''KytzKTY1NTMzIT09Y1sxODldW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTg5XVtzXV09NDgzODQrcyxoWzQ4Mzg0K3NdPWNbMTg5XVtzXSk7Zm9yKGNbMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDk5XHU3ZDlhXHU3ZDli''@;'; put 'put ''XHU3ZDljXHU3ZDlkXHU3ZDllXHU3ZDlmXHU3ZGEwXHU3ZGExXHU3ZGEyXHU3ZGEzXHU3ZGE0XHU3ZGE1XHU3ZGE3XHU3ZGE4XHU3ZGE5XHU3ZGFhXHU3ZGFiXHU3ZGFjXHU3ZGFkXHU3ZGFmXHU3ZGIwXHU3ZGIxXHU3ZGIyXHU3ZGIzXHU3ZGI0XHU3ZGI1XHU3ZGI2XHU3ZGI3XHU3ZGI4XHU3''@;'; put 'put ''ZGI5XHU3ZGJhXHU3ZGJiXHU3ZGJjXHU3ZGJkXHU3ZGJlXHU3ZGJmXHU3ZGMwXHU3ZGMxXHU3ZGMyXHU3ZGMzXHU3ZGM0XHU3ZGM1XHU3ZGM2XHU3ZGM3XHU3ZGM4XHU3ZGM5XHU3ZGNhXHU3ZGNiXHU3ZGNjXHU3ZGNkXHU3ZGNlXHU3ZGNmXHU3ZGQwXHU3ZGQxXHU3ZGQyXHU3ZGQzXHU3ZGQ0''@;'; put 'put ''XHU3ZGQ1XHU3ZGQ2XHU3ZGQ3XHU3ZGQ4XHU3ZGQ5XHVmZmZkXHU3ZGRhXHU3ZGRiXHU3ZGRjXHU3ZGRkXHU3ZGRlXHU3ZGRmXHU3ZGUwXHU3ZGUxXHU3ZGUyXHU3ZGUzXHU3ZGU0XHU3ZGU1XHU3ZGU2XHU3ZGU3XHU3ZGU4XHU3ZGU5XHU3ZGVhXHU3ZGViXHU3ZGVjXHU3ZGVkXHU3ZGVlXHU3''@;'; put 'put ''ZGVmXHU3ZGYwXHU3ZGYxXHU3ZGYyXHU3ZGYzXHU3ZGY0XHU3ZGY1XHU3ZGY2XHU3ZGY3XHU3ZGY4XHU3ZGY5XHU3ZGZhXHU1YzNkXHU1MmIyXHU4MzQ2XHU1MTYyXHU4MzBlXHU3NzViXHU2Njc2XHU5Y2I4XHU0ZWFjXHU2MGNhXHU3Y2JlXHU3Y2IzXHU3ZWNmXHU0ZTk1XHU4YjY2XHU2NjZm''@;'; put 'put ''XHU5ODg4XHU5NzU5XHU1ODgzXHU2NTZjXHU5NTVjXHU1Zjg0XHU3NWM5XHU5NzU2XHU3YWRmXHU3YWRlXHU1MWMwXHU3MGFmXHU3YTk4XHU2M2VhXHU3YTc2XHU3ZWEwXHU3Mzk2XHU5N2VkXHU0ZTQ1XHU3MDc4XHU0ZTVkXHU5MTUyXHU1M2E5XHU2NTUxXHU2NWU3XHU4MWZjXHU4MjA1XHU1''@;'; put 'put ''NDhlXHU1YzMxXHU3NTlhXHU5N2EwXHU2MmQ4XHU3MmQ5XHU3NWJkXHU1YzQ1XHU5YTc5XHU4M2NhXHU1YzQwXHU1NDgwXHU3N2U5XHU0ZTNlXHU2Y2FlXHU4MDVhXHU2MmQyXHU2MzZlXHU1ZGU4XHU1MTc3XHU4ZGRkXHU4ZTFlXHU5NTJmXHU0ZmYxXHU1M2U1XHU2MGU3XHU3MGFjXHU1MjY3''@;'; put 'put ''XHU2MzUwXHU5ZTQzXHU1YTFmXHU1MDI2XHU3NzM3XHU1Mzc3XHU3ZWUyXHU2NDg1XHU2NTJiXHU2Mjg5XHU2Mzk4XHU1MDE0XHU3MjM1XHU4OWM5XHU1MWIzXHU4YmMwXHU3ZWRkXHU1NzQ3XHU4M2NjXHU5NGE3XHU1MTliXHU1NDFiXHU1Y2ZiXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNb''@;'; put 'put ''MTkwXS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxOTBdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTkwXVtzXV09NDg2NDArcyxoWzQ4NjQwK3NdPWNbMTkwXVtzXSk7Zm9yKGNbMTkxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZGZi''@;'; put 'put ''XHU3ZGZjXHU3ZGZkXHU3ZGZlXHU3ZGZmXHU3ZTAwXHU3ZTAxXHU3ZTAyXHU3ZTAzXHU3ZTA0XHU3ZTA1XHU3ZTA2XHU3ZTA3XHU3ZTA4XHU3ZTA5XHU3ZTBhXHU3ZTBiXHU3ZTBjXHU3ZTBkXHU3ZTBlXHU3ZTBmXHU3ZTEwXHU3ZTExXHU3ZTEyXHU3ZTEzXHU3ZTE0XHU3ZTE1XHU3ZTE2XHU3''@;'; put 'put ''ZTE3XHU3ZTE4XHU3ZTE5XHU3ZTFhXHU3ZTFiXHU3ZTFjXHU3ZTFkXHU3ZTFlXHU3ZTFmXHU3ZTIwXHU3ZTIxXHU3ZTIyXHU3ZTIzXHU3ZTI0XHU3ZTI1XHU3ZTI2XHU3ZTI3XHU3ZTI4XHU3ZTI5XHU3ZTJhXHU3ZTJiXHU3ZTJjXHU3ZTJkXHU3ZTJlXHU3ZTJmXHU3ZTMwXHU3ZTMxXHU3ZTMy''@;'; put 'put ''XHU3ZTMzXHU3ZTM0XHU3ZTM1XHU3ZTM2XHU3ZTM3XHU3ZTM4XHU3ZTM5XHVmZmZkXHU3ZTNhXHU3ZTNjXHU3ZTNkXHU3ZTNlXHU3ZTNmXHU3ZTQwXHU3ZTQyXHU3ZTQzXHU3ZTQ0XHU3ZTQ1XHU3ZTQ2XHU3ZTQ4XHU3ZTQ5XHU3ZTRhXHU3ZTRiXHU3ZTRjXHU3ZTRkXHU3ZTRlXHU3ZTRmXHU3''@;'; put 'put ''ZTUwXHU3ZTUxXHU3ZTUyXHU3ZTUzXHU3ZTU0XHU3ZTU1XHU3ZTU2XHU3ZTU3XHU3ZTU4XHU3ZTU5XHU3ZTVhXHU3ZTViXHU3ZTVjXHU3ZTVkXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThmXHU1NTgwXHU1NDk2XHU1MzYxXHU1NGFmXHU1ZjAwXHU2M2U5XHU2OTc3XHU1MWVmXHU2MTY4''@;'; put 'put ''XHU1MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3ODBkXHU3NzBiXHU1ZWI3XHU2MTc3XHU3Y2UwXHU2MjViXHU2Mjk3XHU0ZWEyXHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4MmRiXHU2N2VmXHU2OGY1XHU3OGQ1XHU5ODk3XHU3OWQxXHU1OGYzXHU1NGIzXHU1M2VmXHU2''@;'; put 'put ''ZTM0XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZlXHU4MGFmXHU1NTQzXHU1N2E2XHU2MDczXHU1NzUxXHU1NDJkXHU3YTdhXHU2MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3XHU2N2FmXHU1NGVkXHU3YTlmXHU4MmU2XHU5MTc3XHU1ZTkzXHU4OGU0XHU1OTM4XHU1N2Fl''@;'; put 'put ''XHU2MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3Yjc3XHU0ZmE5XHU1ZmViXHU1YmJkXHU2YjNlXHU1MzIxXHU3YjUwXHU3MmMyXHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3NmQ0XHU1Y2JmXHU3YWE1XHU4NDc1XHU1OTRlXHU5YjQxXHU1MDgwXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''Iikscz0wO3MhPWNbMTkxXS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxOTFdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTkxXVtzXV09NDg4OTYrcyxoWzQ4ODk2K3NdPWNbMTkxXVtzXSk7Zm9yKGNbMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU3ZTVlXHU3ZTVmXHU3ZTYwXHU3ZTYxXHU3ZTYyXHU3ZTYzXHU3ZTY0XHU3ZTY1XHU3ZTY2XHU3ZTY3XHU3ZTY4XHU3ZTY5XHU3ZTZhXHU3ZTZiXHU3ZTZjXHU3ZTZkXHU3ZTZlXHU3ZTZmXHU3ZTcwXHU3ZTcxXHU3ZTcyXHU3ZTczXHU3ZTc0XHU3ZTc1XHU3ZTc2XHU3ZTc3XHU3''@;'; put 'put ''ZTc4XHU3ZTc5XHU3ZTdhXHU3ZTdiXHU3ZTdjXHU3ZTdkXHU3ZTdlXHU3ZTdmXHU3ZTgwXHU3ZTgxXHU3ZTgzXHU3ZTg0XHU3ZTg1XHU3ZTg2XHU3ZTg3XHU3ZTg4XHU3ZTg5XHU3ZThhXHU3ZThiXHU3ZThjXHU3ZThkXHU3ZThlXHU3ZThmXHU3ZTkwXHU3ZTkxXHU3ZTkyXHU3ZTkzXHU3ZTk0''@;'; put 'put ''XHU3ZTk1XHU3ZTk2XHU3ZTk3XHU3ZTk4XHU3ZTk5XHU3ZTlhXHU3ZTljXHU3ZTlkXHU3ZTllXHVmZmZkXHU3ZWFlXHU3ZWI0XHU3ZWJiXHU3ZWJjXHU3ZWQ2XHU3ZWU0XHU3ZWVjXHU3ZWY5XHU3ZjBhXHU3ZjEwXHU3ZjFlXHU3ZjM3XHU3ZjM5XHU3ZjNiXHU3ZjNjXHU3ZjNkXHU3ZjNlXHU3''@;'; put 'put ''ZjNmXHU3ZjQwXHU3ZjQxXHU3ZjQzXHU3ZjQ2XHU3ZjQ3XHU3ZjQ4XHU3ZjQ5XHU3ZjRhXHU3ZjRiXHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjRmXHU3ZjUyXHU3ZjUzXHU5OTg4XHU2MTI3XHU2ZTgzXHU1NzY0XHU2NjA2XHU2MzQ2XHU1NmYwXHU2MmVjXHU2MjY5XHU1ZWQzXHU5NjE0XHU1Nzgz''@;'; put 'put ''XHU2MmM5XHU1NTg3XHU4NzIxXHU4MTRhXHU4ZmEzXHU1NTY2XHU4M2IxXHU2NzY1XHU4ZDU2XHU4NGRkXHU1YTZhXHU2ODBmXHU2MmU2XHU3YmVlXHU5NjExXHU1MTcwXHU2ZjljXHU4YzMwXHU2M2ZkXHU4OWM4XHU2MWQyXHU3ZjA2XHU3MGMyXHU2ZWU1XHU3NDA1XHU2OTk0XHU3MmZjXHU1''@;'; put 'put ''ZWNhXHU5MGNlXHU2NzE3XHU2ZDZhXHU2MzVlXHU1MmIzXHU3MjYyXHU4MDAxXHU0ZjZjXHU1OWU1XHU5MTZhXHU3MGQ5XHU2ZDlkXHU1MmQyXHU0ZTUwXHU5NmY3XHU5NTZkXHU4NTdlXHU3OGNhXHU3ZDJmXHU1MTIxXHU1NzkyXHU2NGMyXHU4MDhiXHU3YzdiXHU2Y2VhXHU2OGYxXHU2OTVl''@;'; put 'put ''XHU1MWI3XHU1Mzk4XHU2OGE4XHU3MjgxXHU5ZWNlXHU3YmYxXHU3MmY4XHU3OWJiXHU2ZjEzXHU3NDA2XHU2NzRlXHU5MWNjXHU5Y2E0XHU3OTNjXHU4Mzg5XHU4MzU0XHU1NDBmXHU2ODE3XHU0ZTNkXHU1Mzg5XHU1MmIxXHU3ODNlXHU1Mzg2XHU1MjI5XHU1MDg4XHU0ZjhiXHU0ZmQwXHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTkyXS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxOTJdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTkyXVtzXV09NDkxNTIrcyxoWzQ5MTUyK3NdPWNbMTkyXVtzXSk7Zm9yKGNbMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU3ZjU2XHU3ZjU5XHU3ZjViXHU3ZjVjXHU3ZjVkXHU3ZjVlXHU3ZjYwXHU3ZjYzXHU3ZjY0XHU3ZjY1XHU3ZjY2XHU3ZjY3XHU3ZjZiXHU3ZjZjXHU3ZjZkXHU3ZjZmXHU3ZjcwXHU3ZjczXHU3Zjc1XHU3Zjc2XHU3Zjc3XHU3Zjc4XHU3ZjdhXHU3ZjdiXHU3''@;'; put 'put ''ZjdjXHU3ZjdkXHU3ZjdmXHU3ZjgwXHU3ZjgyXHU3ZjgzXHU3Zjg0XHU3Zjg1XHU3Zjg2XHU3Zjg3XHU3Zjg4XHU3Zjg5XHU3ZjhiXHU3ZjhkXHU3ZjhmXHU3ZjkwXHU3ZjkxXHU3ZjkyXHU3ZjkzXHU3Zjk1XHU3Zjk2XHU3Zjk3XHU3Zjk4XHU3Zjk5XHU3ZjliXHU3ZjljXHU3ZmEwXHU3ZmEy''@;'; put 'put ''XHU3ZmEzXHU3ZmE1XHU3ZmE2XHU3ZmE4XHU3ZmE5XHU3ZmFhXHU3ZmFiXHU3ZmFjXHU3ZmFkXHU3ZmFlXHU3ZmIxXHVmZmZkXHU3ZmIzXHU3ZmI0XHU3ZmI1XHU3ZmI2XHU3ZmI3XHU3ZmJhXHU3ZmJiXHU3ZmJlXHU3ZmMwXHU3ZmMyXHU3ZmMzXHU3ZmM0XHU3ZmM2XHU3ZmM3XHU3ZmM4XHU3''@;'; put 'put ''ZmM5XHU3ZmNiXHU3ZmNkXHU3ZmNmXHU3ZmQwXHU3ZmQxXHU3ZmQyXHU3ZmQzXHU3ZmQ2XHU3ZmQ3XHU3ZmQ5XHU3ZmRhXHU3ZmRiXHU3ZmRjXHU3ZmRkXHU3ZmRlXHU3ZmUyXHU3ZmUzXHU3NWUyXHU3YWNiXHU3YzkyXHU2Y2E1XHU5NmI2XHU1MjliXHU3NDgzXHU1NGU5XHU0ZmU5XHU4MDU0''@;'; put 'put ''XHU4M2IyXHU4ZmRlXHU5NTcwXHU1ZWM5XHU2MDFjXHU2ZDlmXHU1ZTE4XHU2NTViXHU4MTM4XHU5NGZlXHU2MDRiXHU3MGJjXHU3ZWMzXHU3Y2FlXHU1MWM5XHU2ODgxXHU3Y2IxXHU4MjZmXHU0ZTI0XHU4Zjg2XHU5MWNmXHU2NjdlXHU0ZWFlXHU4YzA1XHU2NGE5XHU4MDRhXHU1MGRhXHU3''@;'; put 'put ''NTk3XHU3MWNlXHU1YmU1XHU4ZmJkXHU2ZjY2XHU0ZTg2XHU2NDgyXHU5NTYzXHU1ZWQ2XHU2NTk5XHU1MjE3XHU4OGMyXHU3MGM4XHU1MmEzXHU3MzBlXHU3NDMzXHU2Nzk3XHU3OGY3XHU5NzE2XHU0ZTM0XHU5MGJiXHU5Y2RlXHU2ZGNiXHU1MWRiXHU4ZDQxXHU1NDFkXHU2MmNlXHU3M2Iy''@;'; put 'put ''XHU4M2YxXHU5NmY2XHU5Zjg0XHU5NGMzXHU0ZjM2XHU3ZjlhXHU1MWNjXHU3MDc1XHU5Njc1XHU1Y2FkXHU5ODg2XHU1M2U2XHU0ZWU0XHU2ZTljXHU3NDA5XHU2OWI0XHU3ODZiXHU5OThmXHU3NTU5XHU1MjE4XHU3NjI0XHU2ZDQxXHU2N2YzXHU1MTZkXHU5Zjk5XHU4MDRiXHU1NDk5XHU3''@;'; put 'put ''YjNjXHU3YWJmXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTkzXS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxOTNdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTkzXVtzXV09NDk0MDgrcyxoWzQ5NDA4K3NdPWNbMTkzXVtzXSk7Zm9yKGNbMTk0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZmU0XHU3ZmU3XHU3ZmU4XHU3ZmVhXHU3ZmViXHU3ZmVjXHU3ZmVkXHU3ZmVmXHU3ZmYyXHU3ZmY0XHU3ZmY1XHU3ZmY2XHU3ZmY3XHU3ZmY4XHU3ZmY5XHU3ZmZhXHU3ZmZkXHU3ZmZlXHU3ZmZmXHU4MDAyXHU4MDA3XHU4MDA4XHU4''@;'; put 'put ''MDA5XHU4MDBhXHU4MDBlXHU4MDBmXHU4MDExXHU4MDEzXHU4MDFhXHU4MDFiXHU4MDFkXHU4MDFlXHU4MDFmXHU4MDIxXHU4MDIzXHU4MDI0XHU4MDJiXHU4MDJjXHU4MDJkXHU4MDJlXHU4MDJmXHU4MDMwXHU4MDMyXHU4MDM0XHU4MDM5XHU4MDNhXHU4MDNjXHU4MDNlXHU4MDQwXHU4MDQx''@;'; put 'put ''XHU4MDQ0XHU4MDQ1XHU4MDQ3XHU4MDQ4XHU4MDQ5XHU4MDRlXHU4MDRmXHU4MDUwXHU4MDUxXHU4MDUzXHU4MDU1XHU4MDU2XHU4MDU3XHVmZmZkXHU4MDU5XHU4MDViXHU4MDVjXHU4MDVkXHU4MDVlXHU4MDVmXHU4MDYwXHU4MDYxXHU4MDYyXHU4MDYzXHU4MDY0XHU4MDY1XHU4MDY2XHU4''@;'; put 'put ''MDY3XHU4MDY4XHU4MDZiXHU4MDZjXHU4MDZkXHU4MDZlXHU4MDZmXHU4MDcwXHU4MDcyXHU4MDczXHU4MDc0XHU4MDc1XHU4MDc2XHU4MDc3XHU4MDc4XHU4MDc5XHU4MDdhXHU4MDdiXHU4MDdjXHU4MDdkXHU5Njg2XHU1Nzg0XHU2MmUyXHU5NjQ3XHU2OTdjXHU1YTA0XHU2NDAyXHU3YmQz''@;'; put 'put ''XHU2ZjBmXHU5NjRiXHU4MmE2XHU1MzYyXHU5ODg1XHU1ZTkwXHU3MDg5XHU2M2IzXHU1MzY0XHU4NjRmXHU5YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVlXHU3OTg0XHU1ZjU1XHU5NjQ2XHU2MjJlXHU5YTc0XHU1NDE1XHU5NGRkXHU0ZmEzXHU2NWM1XHU1''@;'; put 'put ''YzY1XHU1YzYxXHU3ZjE1XHU4NjUxXHU2YzJmXHU1ZjhiXHU3Mzg3XHU2ZWU0XHU3ZWZmXHU1Y2U2XHU2MzFiXHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4ZjZlXHU0ZjI2XHU0ZWQxXHU2Y2E2XHU3ZWI2XHU4YmJhXHU4NDFkXHU4N2JhXHU3ZjU3XHU5MDNi''@;'; put 'put ''XHU5NTIzXHU3YmE5XHU5YWExXHU4OGY4XHU4NDNkXHU2ZDFiXHU5YTg2XHU3ZWRjXHU1OTg4XHU5ZWJiXHU3MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2NiXHU0ZTcwXHU5ZWE2XHU1MzU2XHU4ZmM4XHU4MTA5XHU3NzkyXHU5OTkyXHU4NmVlXHU2ZWUxXHU4''@;'; put 'put ''NTEzXHU2NmZjXHU2MTYyXHU2ZjJiXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTk0XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxOTRdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTk0XVtzXV09NDk2NjQrcyxoWzQ5NjY0K3NdPWNbMTk0XVtzXSk7Zm9yKGNbMTk1XT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDdlXHU4MDgxXHU4MDgyXHU4MDg1XHU4MDg4XHU4MDhhXHU4MDhkXHU4MDhlXHU4MDhmXHU4MDkwXHU4MDkxXHU4MDkyXHU4MDk0XHU4MDk1XHU4MDk3XHU4MDk5XHU4MDllXHU4MGEzXHU4MGE2XHU4MGE3XHU4''@;'; put 'put ''MGE4XHU4MGFjXHU4MGIwXHU4MGIzXHU4MGI1XHU4MGI2XHU4MGI4XHU4MGI5XHU4MGJiXHU4MGM1XHU4MGM3XHU4MGM4XHU4MGM5XHU4MGNhXHU4MGNiXHU4MGNmXHU4MGQwXHU4MGQxXHU4MGQyXHU4MGQzXHU4MGQ0XHU4MGQ1XHU4MGQ4XHU4MGRmXHU4MGUwXHU4MGUyXHU4MGUzXHU4MGU2''@;'; put 'put ''XHU4MGVlXHU4MGY1XHU4MGY3XHU4MGY5XHU4MGZiXHU4MGZlXHU4MGZmXHU4MTAwXHU4MTAxXHU4MTAzXHU4MTA0XHU4MTA1XHU4MTA3XHU4MTA4XHU4MTBiXHVmZmZkXHU4MTBjXHU4MTE1XHU4MTE3XHU4MTE5XHU4MTFiXHU4MTFjXHU4MTFkXHU4MTFmXHU4MTIwXHU4MTIxXHU4MTIyXHU4''@;'; put 'put ''MTIzXHU4MTI0XHU4MTI1XHU4MTI2XHU4MTI3XHU4MTI4XHU4MTI5XHU4MTJhXHU4MTJiXHU4MTJkXHU4MTJlXHU4MTMwXHU4MTMzXHU4MTM0XHU4MTM1XHU4MTM3XHU4MTM5XHU4MTNhXHU4MTNiXHU4MTNjXHU4MTNkXHU4MTNmXHU4YzI5XHU4MjkyXHU4MzJiXHU3NmYyXHU2YzEzXHU1ZmQ5''@;'; put 'put ''XHU4M2JkXHU3MzJiXHU4MzA1XHU5NTFhXHU2YmRiXHU3N2RiXHU5NGM2XHU1MzZmXHU4MzAyXHU1MTkyXHU1ZTNkXHU4YzhjXHU4ZDM4XHU0ZTQ4XHU3M2FiXHU2NzlhXHU2ODg1XHU5MTc2XHU5NzA5XHU3MTY0XHU2Y2ExXHU3NzA5XHU1YTkyXHU5NTQxXHU2YmNmXHU3ZjhlXHU2NjI3XHU1''@;'; put 'put ''YmQwXHU1OWI5XHU1YTlhXHU5NWU4XHU5NWY3XHU0ZWVjXHU4NDBjXHU4NDk5XHU2YWFjXHU3NmRmXHU5NTMwXHU3MzFiXHU2OGE2XHU1YjVmXHU3NzJmXHU5MTlhXHU5NzYxXHU3Y2RjXHU4ZmY3XHU4YzFjXHU1ZjI1XHU3YzczXHU3OWQ4XHU4OWM1XHU2Y2NjXHU4NzFjXHU1YmM2XHU1ZTQy''@;'; put 'put ''XHU2OGM5XHU3NzIwXHU3ZWY1XHU1MTk1XHU1MTRkXHU1MmM5XHU1YTI5XHU3ZjA1XHU5NzYyXHU4MmQ3XHU2M2NmXHU3Nzg0XHU4NWQwXHU3OWQyXHU2ZTNhXHU1ZTk5XHU1OTk5XHU4NTExXHU3MDZkXHU2YzExXHU2MmJmXHU3NmJmXHU2NTRmXHU2MGFmXHU5NWZkXHU2NjBlXHU4NzlmXHU5''@;'; put 'put ''ZTIzXHU5NGVkXHU1NDBkXHU1NDdkXHU4YzJjXHU2NDc4XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTk1XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxOTVdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTk1XVtzXV09NDk5MjArcyxoWzQ5OTIwK3NdPWNbMTk1XVtzXSk7Zm9yKGNbMTk2XT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MTQwXHU4MTQxXHU4MTQyXHU4MTQzXHU4MTQ0XHU4MTQ1XHU4MTQ3XHU4MTQ5XHU4MTRkXHU4MTRlXHU4MTRmXHU4MTUyXHU4MTU2XHU4MTU3XHU4MTU4XHU4MTViXHU4MTVjXHU4MTVkXHU4''@;'; put 'put ''MTVlXHU4MTVmXHU4MTYxXHU4MTYyXHU4MTYzXHU4MTY0XHU4MTY2XHU4MTY4XHU4MTZhXHU4MTZiXHU4MTZjXHU4MTZmXHU4MTcyXHU4MTczXHU4MTc1XHU4MTc2XHU4MTc3XHU4MTc4XHU4MTgxXHU4MTgzXHU4MTg0XHU4MTg1XHU4MTg2XHU4MTg3XHU4MTg5XHU4MThiXHU4MThjXHU4MThk''@;'; put 'put ''XHU4MThlXHU4MTkwXHU4MTkyXHU4MTkzXHU4MTk0XHU4MTk1XHU4MTk2XHU4MTk3XHU4MTk5XHU4MTlhXHU4MTllXHU4MTlmXHU4MWEwXHU4MWExXHU4MWEyXHU4MWE0XHU4MWE1XHVmZmZkXHU4MWE3XHU4MWE5XHU4MWFiXHU4MWFjXHU4MWFkXHU4MWFlXHU4MWFmXHU4MWIwXHU4MWIxXHU4''@;'; put 'put ''MWIyXHU4MWI0XHU4MWI1XHU4MWI2XHU4MWI3XHU4MWI4XHU4MWI5XHU4MWJjXHU4MWJkXHU4MWJlXHU4MWJmXHU4MWM0XHU4MWM1XHU4MWM3XHU4MWM4XHU4MWM5XHU4MWNiXHU4MWNkXHU4MWNlXHU4MWNmXHU4MWQwXHU4MWQxXHU4MWQyXHU4MWQzXHU2NDc5XHU4NjExXHU2YTIxXHU4MTlj''@;'; put 'put ''XHU3OGU4XHU2NDY5XHU5YjU0XHU2MmI5XHU2NzJiXHU4M2FiXHU1OGE4XHU5ZWQ4XHU2Y2FiXHU2ZjIwXHU1YmRlXHU5NjRjXHU4YzBiXHU3MjVmXHU2N2QwXHU2MmM3XHU3MjYxXHU0ZWE5XHU1OWM2XHU2YmNkXHU1ODkzXHU2NmFlXHU1ZTU1XHU1MmRmXHU2MTU1XHU2NzI4XHU3NmVlXHU3''@;'; put 'put ''NzY2XHU3MjY3XHU3YTQ2XHU2MmZmXHU1NGVhXHU1NDUwXHU5NGEwXHU5MGEzXHU1YTFjXHU3ZWIzXHU2YzE2XHU0ZTQzXHU1OTc2XHU4MDEwXHU1OTQ4XHU1MzU3XHU3NTM3XHU5NmJlXHU1NmNhXHU2MzIwXHU4MTExXHU2MDdjXHU5NWY5XHU2ZGQ2XHU1NDYyXHU5OTgxXHU1MTg1XHU1YWU5''@;'; put 'put ''XHU4MGZkXHU1OWFlXHU5NzEzXHU1MDJhXHU2Y2U1XHU1YzNjXHU2MmRmXHU0ZjYwXHU1MzNmXHU4MTdiXHU5MDA2XHU2ZWJhXHU4NTJiXHU2MmM4XHU1ZTc0XHU3OGJlXHU2NGI1XHU2MzdiXHU1ZmY1XHU1YTE4XHU5MTdmXHU5ZTFmXHU1YzNmXHU2MzRmXHU4MDQyXHU1YjdkXHU1NTZlXHU5''@;'; put 'put ''NTRhXHU5NTRkXHU2ZDg1XHU2MGE4XHU2N2UwXHU3MmRlXHU1MWRkXHU1YjgxXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTk2XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxOTZdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTk2XVtzXV09NTAxNzYrcyxoWzUwMTc2K3NdPWNbMTk2XVtzXSk7''@;'; put 'put ''Zm9yKGNbMTk3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MWQ0XHU4MWQ1XHU4MWQ2XHU4MWQ3XHU4MWQ4XHU4MWQ5XHU4MWRhXHU4MWRiXHU4MWRjXHU4MWRkXHU4MWRlXHU4MWRmXHU4MWUwXHU4MWUxXHU4MWUyXHU4MWU0XHU4''@;'; put 'put ''MWU1XHU4MWU2XHU4MWU4XHU4MWU5XHU4MWViXHU4MWVlXHU4MWVmXHU4MWYwXHU4MWYxXHU4MWYyXHU4MWY1XHU4MWY2XHU4MWY3XHU4MWY4XHU4MWY5XHU4MWZhXHU4MWZkXHU4MWZmXHU4MjAzXHU4MjA3XHU4MjA4XHU4MjA5XHU4MjBhXHU4MjBiXHU4MjBlXHU4MjBmXHU4MjExXHU4MjEz''@;'; put 'put ''XHU4MjE1XHU4MjE2XHU4MjE3XHU4MjE4XHU4MjE5XHU4MjFhXHU4MjFkXHU4MjIwXHU4MjI0XHU4MjI1XHU4MjI2XHU4MjI3XHU4MjI5XHU4MjJlXHU4MjMyXHU4MjNhXHU4MjNjXHU4MjNkXHU4MjNmXHVmZmZkXHU4MjQwXHU4MjQxXHU4MjQyXHU4MjQzXHU4MjQ1XHU4MjQ2XHU4MjQ4XHU4''@;'; put 'put ''MjRhXHU4MjRjXHU4MjRkXHU4MjRlXHU4MjUwXHU4MjUxXHU4MjUyXHU4MjUzXHU4MjU0XHU4MjU1XHU4MjU2XHU4MjU3XHU4MjU5XHU4MjViXHU4MjVjXHU4MjVkXHU4MjVlXHU4MjYwXHU4MjYxXHU4MjYyXHU4MjYzXHU4MjY0XHU4MjY1XHU4MjY2XHU4MjY3XHU4MjY5XHU2MmU3XHU2Y2Rl''@;'; put 'put ''XHU3MjViXHU2MjZkXHU5NGFlXHU3ZWJkXHU4MTEzXHU2ZDUzXHU1MTljXHU1ZjA0XHU1OTc0XHU1MmFhXHU2MDEyXHU1OTczXHU2Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3Y2VmXHU4YmZhXHU1NGU2XHU2YjI3XHU5ZTI1XHU2YmI0XHU4NWQ1XHU1NDU1XHU1MDc2XHU2Y2E0XHU1''@;'; put 'put ''NTZhXHU4ZGI0XHU3MjJjXHU1ZTE1XHU2MDE1XHU3NDM2XHU2MmNkXHU2MzkyXHU3MjRjXHU1Zjk4XHU2ZTQzXHU2ZDNlXHU2NTAwXHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0XHU1MjI0XHU1M2RiXHU0ZTUzXHU1ZTllXHU2NWMxXHU4MDJhXHU4MGQ2XHU2MjliXHU1NDg2XHU1MjI4''@;'; put 'put ''XHU3MGFlXHU4ODhkXHU4ZGQxXHU2Y2UxXHU1NDc4XHU4MGRhXHU1N2Y5XHU4OGY0XHU4ZDU0XHU5NjZhXHU5MTRkXHU0ZjY5XHU2YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3MGY5XHU2ZjhlXHU1ZjZkXHU4NGVjXHU2OGRhXHU3ODdjXHU3YmY3XHU4MWE4XHU2NzBiXHU5ZTRmXHU2''@;'; put 'put ''MzY3XHU3OGIwXHU1NzZmXHU3ODEyXHU5NzM5XHU2Mjc5XHU2MmFiXHU1Mjg4XHU3NDM1XHU2YmQ3XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTk3XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxOTddW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTk3XVtzXV09NTA0MzIrcyxoWzUwNDMyK3Nd''@;'; put 'put ''PWNbMTk3XVtzXSk7Zm9yKGNbMTk4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MjZhXHU4MjZiXHU4MjZjXHU4MjZkXHU4MjcxXHU4Mjc1XHU4Mjc2XHU4Mjc3XHU4Mjc4XHU4MjdiXHU4MjdjXHU4MjgwXHU4MjgxXHU4MjgzXHU4''@;'; put 'put ''Mjg1XHU4Mjg2XHU4Mjg3XHU4Mjg5XHU4MjhjXHU4MjkwXHU4MjkzXHU4Mjk0XHU4Mjk1XHU4Mjk2XHU4MjlhXHU4MjliXHU4MjllXHU4MmEwXHU4MmEyXHU4MmEzXHU4MmE3XHU4MmIyXHU4MmI1XHU4MmI2XHU4MmJhXHU4MmJiXHU4MmJjXHU4MmJmXHU4MmMwXHU4MmMyXHU4MmMzXHU4MmM1''@;'; put 'put ''XHU4MmM2XHU4MmM5XHU4MmQwXHU4MmQ2XHU4MmQ5XHU4MmRhXHU4MmRkXHU4MmUyXHU4MmU3XHU4MmU4XHU4MmU5XHU4MmVhXHU4MmVjXHU4MmVkXHU4MmVlXHU4MmYwXHU4MmYyXHU4MmYzXHU4MmY1XHU4MmY2XHU4MmY4XHVmZmZkXHU4MmZhXHU4MmZjXHU4MmZkXHU4MmZlXHU4MmZmXHU4''@;'; put 'put ''MzAwXHU4MzBhXHU4MzBiXHU4MzBkXHU4MzEwXHU4MzEyXHU4MzEzXHU4MzE2XHU4MzE4XHU4MzE5XHU4MzFkXHU4MzFlXHU4MzFmXHU4MzIwXHU4MzIxXHU4MzIyXHU4MzIzXHU4MzI0XHU4MzI1XHU4MzI2XHU4MzI5XHU4MzJhXHU4MzJlXHU4MzMwXHU4MzMyXHU4MzM3XHU4MzNiXHU4MzNk''@;'; put 'put ''XHU1NTY0XHU4MTNlXHU3NWIyXHU3NmFlXHU1MzM5XHU3NWRlXHU1MGZiXHU1YzQxXHU4YjZjXHU3YmM3XHU1MDRmXHU3MjQ3XHU5YTk3XHU5OGQ4XHU2ZjAyXHU3NGUyXHU3OTY4XHU2NDg3XHU3N2E1XHU2MmZjXHU5ODkxXHU4ZDJiXHU1NGMxXHU4MDU4XHU0ZTUyXHU1NzZhXHU4MmY5XHU4''@;'; put 'put ''NDBkXHU1ZTczXHU1MWVkXHU3NGY2XHU4YmM0XHU1YzRmXHU1NzYxXHU2Y2ZjXHU5ODg3XHU1YTQ2XHU3ODM0XHU5YjQ0XHU4ZmViXHU3Yzk1XHU1MjU2XHU2MjUxXHU5NGZhXHU0ZWM2XHU4Mzg2XHU4NDYxXHU4M2U5XHU4NGIyXHU1N2Q0XHU2NzM0XHU1NzAzXHU2NjZlXHU2ZDY2XHU4YzMx''@;'; put 'put ''XHU2NmRkXHU3MDExXHU2NzFmXHU2YjNhXHU2ODE2XHU2MjFhXHU1OWJiXHU0ZTAzXHU1MWM0XHU2ZjA2XHU2N2QyXHU2YzhmXHU1MTc2XHU2OGNiXHU1OTQ3XHU2YjY3XHU3NTY2XHU1ZDBlXHU4MTEwXHU5ZjUwXHU2NWQ3XHU3OTQ4XHU3OTQxXHU5YTkxXHU4ZDc3XHU1YzgyXHU0ZTVlXHU0''@;'; put 'put ''ZjAxXHU1NDJmXHU1OTUxXHU3ODBjXHU1NjY4XHU2YzE0XHU4ZmM0XHU1ZjAzXHU2YzdkXHU2Y2UzXHU4YmFiXHU2MzkwXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTk4XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxOThdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTk4XVtzXV09NTA2ODgr''@;'; put 'put ''cyxoWzUwNjg4K3NdPWNbMTk4XVtzXSk7Zm9yKGNbMTk5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MzNlXHU4MzNmXHU4MzQxXHU4MzQyXHU4MzQ0XHU4MzQ1XHU4MzQ4XHU4MzRhXHU4MzRiXHU4MzRjXHU4MzRkXHU4MzRlXHU4''@;'; put 'put ''MzUzXHU4MzU1XHU4MzU2XHU4MzU3XHU4MzU4XHU4MzU5XHU4MzVkXHU4MzYyXHU4MzcwXHU4MzcxXHU4MzcyXHU4MzczXHU4Mzc0XHU4Mzc1XHU4Mzc2XHU4Mzc5XHU4MzdhXHU4MzdlXHU4MzdmXHU4MzgwXHU4MzgxXHU4MzgyXHU4MzgzXHU4Mzg0XHU4Mzg3XHU4Mzg4XHU4MzhhXHU4Mzhi''@;'; put 'put ''XHU4MzhjXHU4MzhkXHU4MzhmXHU4MzkwXHU4MzkxXHU4Mzk0XHU4Mzk1XHU4Mzk2XHU4Mzk3XHU4Mzk5XHU4MzlhXHU4MzlkXHU4MzlmXHU4M2ExXHU4M2EyXHU4M2EzXHU4M2E0XHU4M2E1XHU4M2E2XHU4M2E3XHU4M2FjXHU4M2FkXHU4M2FlXHVmZmZkXHU4M2FmXHU4M2I1XHU4M2JiXHU4''@;'; put 'put ''M2JlXHU4M2JmXHU4M2MyXHU4M2MzXHU4M2M0XHU4M2M2XHU4M2M4XHU4M2M5XHU4M2NiXHU4M2NkXHU4M2NlXHU4M2QwXHU4M2QxXHU4M2QyXHU4M2QzXHU4M2Q1XHU4M2Q3XHU4M2Q5XHU4M2RhXHU4M2RiXHU4M2RlXHU4M2UyXHU4M2UzXHU4M2U0XHU4M2U2XHU4M2U3XHU4M2U4XHU4M2Vi''@;'; put 'put ''XHU4M2VjXHU4M2VkXHU2MDcwXHU2ZDNkXHU3Mjc1XHU2MjY2XHU5NDhlXHU5NGM1XHU1MzQzXHU4ZmMxXHU3YjdlXHU0ZWRmXHU4YzI2XHU0ZTdlXHU5ZWQ0XHU5NGIxXHU5NGIzXHU1MjRkXHU2ZjVjXHU5MDYzXHU2ZDQ1XHU4YzM0XHU1ODExXHU1ZDRjXHU2YjIwXHU2YjQ5XHU2N2FhXHU1''@;'; put 'put ''NDViXHU4MTU0XHU3ZjhjXHU1ODk5XHU4NTM3XHU1ZjNhXHU2MmEyXHU2YTQ3XHU5NTM5XHU2NTcyXHU2MDg0XHU2ODY1XHU3N2E3XHU0ZTU0XHU0ZmE4XHU1ZGU3XHU5Nzk4XHU2NGFjXHU3ZmQ4XHU1Y2VkXHU0ZmNmXHU3YThkXHU1MjA3XHU4MzA0XHU0ZTE0XHU2MDJmXHU3YTgzXHU5NGE2''@;'; put 'put ''XHU0ZmI1XHU0ZWIyXHU3OWU2XHU3NDM0XHU1MmU0XHU4MmI5XHU2NGQyXHU3OWJkXHU1YmRkXHU2YzgxXHU5NzUyXHU4ZjdiXHU2YzIyXHU1MDNlXHU1MzdmXHU2ZTA1XHU2NGNlXHU2Njc0XHU2YzMwXHU2MGM1XHU5ODc3XHU4YmY3XHU1ZTg2XHU3NDNjXHU3YTc3XHU3OWNiXHU0ZTE4XHU5''@;'; put 'put ''MGIxXHU3NDAzXHU2YzQyXHU1NmRhXHU5MTRiXHU2Y2M1XHU4ZDhiXHU1MzNhXHU4NmM2XHU2NmYyXHU4ZWFmXHU1YzQ4XHU5YTcxXHU2ZTIwXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTk5XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxOTldW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTk5''@;'; put 'put ''XVtzXV09NTA5NDQrcyxoWzUwOTQ0K3NdPWNbMTk5XVtzXSk7Zm9yKGNbMjAwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4M2VlXHU4M2VmXHU4M2YzXHU4M2Y0XHU4M2Y1XHU4M2Y2XHU4M2Y3XHU4M2ZhXHU4M2ZiXHU4M2ZjXHU4''@;'; put 'put ''M2ZlXHU4M2ZmXHU4NDAwXHU4NDAyXHU4NDA1XHU4NDA3XHU4NDA4XHU4NDA5XHU4NDBhXHU4NDEwXHU4NDEyXHU4NDEzXHU4NDE0XHU4NDE1XHU4NDE2XHU4NDE3XHU4NDE5XHU4NDFhXHU4NDFiXHU4NDFlXHU4NDFmXHU4NDIwXHU4NDIxXHU4NDIyXHU4NDIzXHU4NDI5XHU4NDJhXHU4NDJi''@;'; put 'put ''XHU4NDJjXHU4NDJkXHU4NDJlXHU4NDJmXHU4NDMwXHU4NDMyXHU4NDMzXHU4NDM0XHU4NDM1XHU4NDM2XHU4NDM3XHU4NDM5XHU4NDNhXHU4NDNiXHU4NDNlXHU4NDNmXHU4NDQwXHU4NDQxXHU4NDQyXHU4NDQzXHU4NDQ0XHU4NDQ1XHU4NDQ3XHU4NDQ4XHU4NDQ5XHVmZmZkXHU4NDRhXHU4''@;'; put 'put ''NDRiXHU4NDRjXHU4NDRkXHU4NDRlXHU4NDRmXHU4NDUwXHU4NDUyXHU4NDUzXHU4NDU0XHU4NDU1XHU4NDU2XHU4NDU4XHU4NDVkXHU4NDVlXHU4NDVmXHU4NDYwXHU4NDYyXHU4NDY0XHU4NDY1XHU4NDY2XHU4NDY3XHU4NDY4XHU4NDZhXHU4NDZlXHU4NDZmXHU4NDcwXHU4NDcyXHU4NDc0''@;'; put 'put ''XHU4NDc3XHU4NDc5XHU4NDdiXHU4NDdjXHU1M2Q2XHU1YTM2XHU5ZjhiXHU4ZGEzXHU1M2JiXHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYzXHU3MmFjXHU1MjM4XHU1MjlkXHU3ZjNhXHU3MDk0XHU3NjM4XHU1Mzc0XHU5ZTRhXHU2OWI3XHU3ODZlXHU5''@;'; put 'put ''NmMwXHU4OGQ5XHU3ZmE0XHU3MTM2XHU3MWMzXHU1MTg5XHU2N2QzXHU3NGU0XHU1OGU0XHU2NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1OGVjXHU0ZWMxXHU0ZWJhXHU1ZmNkXHU5N2U3XHU0ZWZiXHU4YmE0XHU1MjAzXHU1OThhXHU3ZWFiXHU2MjU0''@;'; put 'put ''XHU0ZWNkXHU2NWU1XHU2MjBlXHU4MzM4XHU4NGM5XHU4MzYzXHU4NzhkXHU3MTk0XHU2ZWI2XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1XHU1MTEyXHU1YjdhXHU1OTgyXHU4ZmIxXHU0ZTczXHU2YzVkXHU1MTY1XHU4OTI1XHU4ZjZmXHU5NjJlXHU4''@;'; put 'put ''NTRhXHU3NDVlXHU5NTEwXHU5NWYwXHU2ZGE2XHU4MmU1XHU1ZjMxXHU2NDkyXHU2ZDEyXHU4NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjAwXS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMDBdW3NdLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJih5W2NbMjAwXVtzXV09NTEyMDArcyxoWzUxMjAwK3NdPWNbMjAwXVtzXSk7Zm9yKGNbMjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NDdkXHU4NDdlXHU4NDdmXHU4NDgwXHU4NDgxXHU4NDgzXHU4NDg0XHU4NDg1XHU4''@;'; put 'put ''NDg2XHU4NDhhXHU4NDhkXHU4NDhmXHU4NDkwXHU4NDkxXHU4NDkyXHU4NDkzXHU4NDk0XHU4NDk1XHU4NDk2XHU4NDk4XHU4NDlhXHU4NDliXHU4NDlkXHU4NDllXHU4NDlmXHU4NGEwXHU4NGEyXHU4NGEzXHU4NGE0XHU4NGE1XHU4NGE2XHU4NGE3XHU4NGE4XHU4NGE5XHU4NGFhXHU4NGFi''@;'; put 'put ''XHU4NGFjXHU4NGFkXHU4NGFlXHU4NGIwXHU4NGIxXHU4NGIzXHU4NGI1XHU4NGI2XHU4NGI3XHU4NGJiXHU4NGJjXHU4NGJlXHU4NGMwXHU4NGMyXHU4NGMzXHU4NGM1XHU4NGM2XHU4NGM3XHU4NGM4XHU4NGNiXHU4NGNjXHU4NGNlXHU4NGNmXHU4NGQyXHU4NGQ0XHU4NGQ1XHU4NGQ3XHVm''@;'; put 'put ''ZmZkXHU4NGQ4XHU4NGQ5XHU4NGRhXHU4NGRiXHU4NGRjXHU4NGRlXHU4NGUxXHU4NGUyXHU4NGU0XHU4NGU3XHU4NGU4XHU4NGU5XHU4NGVhXHU4NGViXHU4NGVkXHU4NGVlXHU4NGVmXHU4NGYxXHU4NGYyXHU4NGYzXHU4NGY0XHU4NGY1XHU4NGY2XHU4NGY3XHU4NGY4XHU4NGY5XHU4NGZh''@;'; put 'put ''XHU4NGZiXHU4NGZkXHU4NGZlXHU4NTAwXHU4NTAxXHU4NTAyXHU0ZjFlXHU2NTYzXHU2ODUxXHU1NWQzXHU0ZTI3XHU2NDE0XHU5YTlhXHU2MjZiXHU1YWMyXHU3NDVmXHU4MjcyXHU2ZGE5XHU2OGVlXHU1MGU3XHU4MzhlXHU3ODAyXHU2NzQwXHU1MjM5XHU2Yzk5XHU3ZWIxXHU1MGJiXHU1''@;'; put 'put ''NTY1XHU3MTVlXHU3YjViXHU2NjUyXHU3M2NhXHU4MmViXHU2NzQ5XHU1YzcxXHU1MjIwXHU3MTdkXHU4ODZiXHU5NWVhXHU5NjU1XHU2NGM1XHU4ZDYxXHU4MWIzXHU1NTg0XHU2YzU1XHU2MjQ3XHU3ZjJlXHU1ODkyXHU0ZjI0XHU1NTQ2XHU4ZDRmXHU2NjRjXHU0ZTBhXHU1YzFhXHU4OGYz''@;'; put 'put ''XHU2OGEyXHU2MzRlXHU3YTBkXHU3MGU3XHU4MjhkXHU1MmZhXHU5N2Y2XHU1YzExXHU1NGU4XHU5MGI1XHU3ZWNkXHU1OTYyXHU4ZDRhXHU4NmM3XHU4MjBjXHU4MjBkXHU4ZDY2XHU2NDQ0XHU1YzA0XHU2MTUxXHU2ZDg5XHU3OTNlXHU4YmJlXHU3ODM3XHU3NTMzXHU1NDdiXHU0ZjM4XHU4''@;'; put 'put ''ZWFiXHU2ZGYxXHU1YTIwXHU3ZWM1XHU3OTVlXHU2Yzg4XHU1YmExXHU1YTc2XHU3NTFhXHU4MGJlXHU2MTRlXHU2ZTE3XHU1OGYwXHU3NTFmXHU3NTI1XHU3MjcyXHU1MzQ3XHU3ZWYzXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjAxXS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMDFdW3Nd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJih5W2NbMjAxXVtzXV09NTE0NTYrcyxoWzUxNDU2K3NdPWNbMjAxXVtzXSk7Zm9yKGNbMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTAzXHU4NTA0XHU4NTA1XHU4NTA2XHU4NTA3XHU4NTA4XHU4''@;'; put 'put ''NTA5XHU4NTBhXHU4NTBiXHU4NTBkXHU4NTBlXHU4NTBmXHU4NTEwXHU4NTEyXHU4NTE0XHU4NTE1XHU4NTE2XHU4NTE4XHU4NTE5XHU4NTFiXHU4NTFjXHU4NTFkXHU4NTFlXHU4NTIwXHU4NTIyXHU4NTIzXHU4NTI0XHU4NTI1XHU4NTI2XHU4NTI3XHU4NTI4XHU4NTI5XHU4NTJhXHU4NTJk''@;'; put 'put ''XHU4NTJlXHU4NTJmXHU4NTMwXHU4NTMxXHU4NTMyXHU4NTMzXHU4NTM0XHU4NTM1XHU4NTM2XHU4NTNlXHU4NTNmXHU4NTQwXHU4NTQxXHU4NTQyXHU4NTQ0XHU4NTQ1XHU4NTQ2XHU4NTQ3XHU4NTRiXHU4NTRjXHU4NTRkXHU4NTRlXHU4NTRmXHU4NTUwXHU4NTUxXHU4NTUyXHU4NTUzXHU4''@;'; put 'put ''NTU0XHU4NTU1XHVmZmZkXHU4NTU3XHU4NTU4XHU4NTVhXHU4NTViXHU4NTVjXHU4NTVkXHU4NTVmXHU4NTYwXHU4NTYxXHU4NTYyXHU4NTYzXHU4NTY1XHU4NTY2XHU4NTY3XHU4NTY5XHU4NTZhXHU4NTZiXHU4NTZjXHU4NTZkXHU4NTZlXHU4NTZmXHU4NTcwXHU4NTcxXHU4NTczXHU4NTc1''@;'; put 'put ''XHU4NTc2XHU4NTc3XHU4NTc4XHU4NTdjXHU4NTdkXHU4NTdmXHU4NTgwXHU4NTgxXHU3NzAxXHU3NmRiXHU1MjY5XHU4MGRjXHU1NzIzXHU1ZTA4XHU1OTMxXHU3MmVlXHU2NWJkXHU2ZTdmXHU4YmQ3XHU1YzM4XHU4NjcxXHU1MzQxXHU3N2YzXHU2MmZlXHU2NWY2XHU0ZWMwXHU5OGRmXHU4''@;'; put 'put ''NjgwXHU1YjllXHU4YmM2XHU1M2YyXHU3N2UyXHU0ZjdmXHU1YzRlXHU5YTc2XHU1OWNiXHU1ZjBmXHU3OTNhXHU1OGViXHU0ZTE2XHU2N2ZmXHU0ZThiXHU2MmVkXHU4YTkzXHU5MDFkXHU1MmJmXHU2NjJmXHU1NWRjXHU1NjZjXHU5MDAyXHU0ZWQ1XHU0ZjhkXHU5MWNhXHU5OTcwXHU2YzBm''@;'; put 'put ''XHU1ZTAyXHU2MDQzXHU1YmE0XHU4OWM2XHU4YmQ1XHU2NTM2XHU2MjRiXHU5OTk2XHU1Yjg4XHU1YmZmXHU2Mzg4XHU1NTJlXHU1M2Q3XHU3NjI2XHU1MTdkXHU4NTJjXHU2N2EyXHU2OGIzXHU2YjhhXHU2MjkyXHU4ZjkzXHU1M2Q0XHU4MjEyXHU2ZGQxXHU3NThmXHU0ZTY2XHU4ZDRlXHU1''@;'; put 'put ''YjcwXHU3MTlmXHU4NWFmXHU2NjkxXHU2NmQ5XHU3ZjcyXHU4NzAwXHU5ZWNkXHU5ZjIwXHU1YzVlXHU2NzJmXHU4ZmYwXHU2ODExXHU2NzVmXHU2MjBkXHU3YWQ2XHU1ODg1XHU1ZWI2XHU2NTcwXHU2ZjMxXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjAyXS5sZW5ndGg7KytzKTY1NTMz''@;'; put 'put ''IT09Y1syMDJdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjAyXVtzXV09NTE3MTIrcyxoWzUxNzEyK3NdPWNbMjAyXVtzXSk7Zm9yKGNbMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTgyXHU4NTgzXHU4NTg2XHU4NTg4XHU4''@;'; put 'put ''NTg5XHU4NThhXHU4NThiXHU4NThjXHU4NThkXHU4NThlXHU4NTkwXHU4NTkxXHU4NTkyXHU4NTkzXHU4NTk0XHU4NTk1XHU4NTk2XHU4NTk3XHU4NTk4XHU4NTk5XHU4NTlhXHU4NTlkXHU4NTllXHU4NTlmXHU4NWEwXHU4NWExXHU4NWEyXHU4NWEzXHU4NWE1XHU4NWE2XHU4NWE3XHU4NWE5''@;'; put 'put ''XHU4NWFiXHU4NWFjXHU4NWFkXHU4NWIxXHU4NWIyXHU4NWIzXHU4NWI0XHU4NWI1XHU4NWI2XHU4NWI4XHU4NWJhXHU4NWJiXHU4NWJjXHU4NWJkXHU4NWJlXHU4NWJmXHU4NWMwXHU4NWMyXHU4NWMzXHU4NWM0XHU4NWM1XHU4NWM2XHU4NWM3XHU4NWM4XHU4NWNhXHU4NWNiXHU4NWNjXHU4''@;'; put 'put ''NWNkXHU4NWNlXHU4NWQxXHU4NWQyXHVmZmZkXHU4NWQ0XHU4NWQ2XHU4NWQ3XHU4NWQ4XHU4NWQ5XHU4NWRhXHU4NWRiXHU4NWRkXHU4NWRlXHU4NWRmXHU4NWUwXHU4NWUxXHU4NWUyXHU4NWUzXHU4NWU1XHU4NWU2XHU4NWU3XHU4NWU4XHU4NWVhXHU4NWViXHU4NWVjXHU4NWVkXHU4NWVl''@;'; put 'put ''XHU4NWVmXHU4NWYwXHU4NWYxXHU4NWYyXHU4NWYzXHU4NWY0XHU4NWY1XHU4NWY2XHU4NWY3XHU4NWY4XHU2MDU1XHU1MjM3XHU4MDBkXHU2NDU0XHU4ODcwXHU3NTI5XHU1ZTA1XHU2ODEzXHU2MmY0XHU5NzFjXHU1M2NjXHU3MjNkXHU4YzAxXHU2YzM0XHU3NzYxXHU3YTBlXHU1NDJlXHU3''@;'; put 'put ''N2FjXHU5ODdhXHU4MjFjXHU4YmY0XHU3ODU1XHU2NzE0XHU3MGMxXHU2NWFmXHU2NDk1XHU1NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0ZTFkXHU2YjdiXHU4MDg2XHU1YmZhXHU1NWUzXHU1NmRiXHU0ZjNhXHU0ZjNjXHU5OTcyXHU1ZGYzXHU2NzdlXHU4MDM4XHU2MDAyXHU5ODgyXHU5MDAx''@;'; put 'put ''XHU1YjhiXHU4YmJjXHU4YmY1XHU2NDFjXHU4MjU4XHU2NGRlXHU1NWZkXHU4MmNmXHU5MTY1XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3YzlmXHU1MGYzXHU1ODUxXHU2ZWFmXHU1YmJmXHU4YmM5XHU4MDgzXHU5MTc4XHU4NDljXHU3Yjk3XHU4NjdkXHU5NjhiXHU5NjhmXHU3ZWU1XHU5YWQzXHU3''@;'; put 'put ''ODhlXHU1YzgxXHU3YTU3XHU5MDQyXHU5NmE3XHU3OTVmXHU1YjU5XHU2MzVmXHU3YjBiXHU4NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3NDEwXHU3ZDIyXHU5NTAxXHU2MjQwXHU1ODRjXHU0ZWQ2XHU1YjgzXHU1OTc5XHU1ODU0XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjAzXS5sZW5n''@;'; put 'put ''dGg7KytzKTY1NTMzIT09Y1syMDNdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjAzXVtzXV09NTE5NjgrcyxoWzUxOTY4K3NdPWNbMjAzXVtzXSk7Zm9yKGNbMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NWY5XHU4NWZhXHU4''@;'; put 'put ''NWZjXHU4NWZkXHU4NWZlXHU4NjAwXHU4NjAxXHU4NjAyXHU4NjAzXHU4NjA0XHU4NjA2XHU4NjA3XHU4NjA4XHU4NjA5XHU4NjBhXHU4NjBiXHU4NjBjXHU4NjBkXHU4NjBlXHU4NjBmXHU4NjEwXHU4NjEyXHU4NjEzXHU4NjE0XHU4NjE1XHU4NjE3XHU4NjE4XHU4NjE5XHU4NjFhXHU4NjFi''@;'; put 'put ''XHU4NjFjXHU4NjFkXHU4NjFlXHU4NjFmXHU4NjIwXHU4NjIxXHU4NjIyXHU4NjIzXHU4NjI0XHU4NjI1XHU4NjI2XHU4NjI4XHU4NjJhXHU4NjJiXHU4NjJjXHU4NjJkXHU4NjJlXHU4NjJmXHU4NjMwXHU4NjMxXHU4NjMyXHU4NjMzXHU4NjM0XHU4NjM1XHU4NjM2XHU4NjM3XHU4NjM5XHU4''@;'; put 'put ''NjNhXHU4NjNiXHU4NjNkXHU4NjNlXHU4NjNmXHU4NjQwXHVmZmZkXHU4NjQxXHU4NjQyXHU4NjQzXHU4NjQ0XHU4NjQ1XHU4NjQ2XHU4NjQ3XHU4NjQ4XHU4NjQ5XHU4NjRhXHU4NjRiXHU4NjRjXHU4NjUyXHU4NjUzXHU4NjU1XHU4NjU2XHU4NjU3XHU4NjU4XHU4NjU5XHU4NjViXHU4NjVj''@;'; put 'put ''XHU4NjVkXHU4NjVmXHU4NjYwXHU4NjYxXHU4NjYzXHU4NjY0XHU4NjY1XHU4NjY2XHU4NjY3XHU4NjY4XHU4NjY5XHU4NjZhXHU3MzZkXHU2MzFlXHU4ZTRiXHU4ZTBmXHU4MGNlXHU4MmQ0XHU2MmFjXHU1M2YwXHU2Y2YwXHU5MTVlXHU1OTJhXHU2MDAxXHU2YzcwXHU1NzRkXHU2NDRhXHU4''@;'; put 'put ''ZDJhXHU3NjJiXHU2ZWU5XHU1NzViXHU2YTgwXHU3NWYwXHU2ZjZkXHU4YzJkXHU4YzA4XHU1NzY2XHU2YmVmXHU4ODkyXHU3OGIzXHU2M2EyXHU1M2Y5XHU3MGFkXHU2YzY0XHU1ODU4XHU2NDJhXHU1ODAyXHU2OGUwXHU4MTliXHU1NTEwXHU3Y2Q2XHU1MDE4XHU4ZWJhXHU2ZGNjXHU4ZDlm''@;'; put 'put ''XHU3MGViXHU2MzhmXHU2ZDliXHU2ZWQ0XHU3ZWU2XHU4NDA0XHU2ODQzXHU5MDAzXHU2ZGQ4XHU5Njc2XHU4YmE4XHU1OTU3XHU3Mjc5XHU4NWU0XHU4MTdlXHU3NWJjXHU4YThhXHU2OGFmXHU1MjU0XHU4ZTIyXHU5NTExXHU2M2QwXHU5ODk4XHU4ZTQ0XHU1NTdjXHU0ZjUzXHU2NmZmXHU1''@;'; put 'put ''NjhmXHU2MGQ1XHU2ZDk1XHU1MjQzXHU1YzQ5XHU1OTI5XHU2ZGZiXHU1ODZiXHU3NTMwXHU3NTFjXHU2MDZjXHU4MjE0XHU4MTQ2XHU2MzExXHU2NzYxXHU4ZmUyXHU3NzNhXHU4ZGYzXHU4ZDM0XHU5NGMxXHU1ZTE2XHU1Mzg1XHU1NDJjXHU3MGMzXHVmZmZkIi5zcGxpdCgiIikscz0wO3Mh''@;'; put 'put ''PWNbMjA0XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMDRdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjA0XVtzXV09NTIyMjQrcyxoWzUyMjI0K3NdPWNbMjA0XVtzXSk7Zm9yKGNbMjA1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4''@;'; put 'put ''NjZkXHU4NjZmXHU4NjcwXHU4NjcyXHU4NjczXHU4Njc0XHU4Njc1XHU4Njc2XHU4Njc3XHU4Njc4XHU4NjgzXHU4Njg0XHU4Njg1XHU4Njg2XHU4Njg3XHU4Njg4XHU4Njg5XHU4NjhlXHU4NjhmXHU4NjkwXHU4NjkxXHU4NjkyXHU4Njk0XHU4Njk2XHU4Njk3XHU4Njk4XHU4Njk5XHU4Njlh''@;'; put 'put ''XHU4NjliXHU4NjllXHU4NjlmXHU4NmEwXHU4NmExXHU4NmEyXHU4NmE1XHU4NmE2XHU4NmFiXHU4NmFkXHU4NmFlXHU4NmIyXHU4NmIzXHU4NmI3XHU4NmI4XHU4NmI5XHU4NmJiXHU4NmJjXHU4NmJkXHU4NmJlXHU4NmJmXHU4NmMxXHU4NmMyXHU4NmMzXHU4NmM1XHU4NmM4XHU4NmNjXHU4''@;'; put 'put ''NmNkXHU4NmQyXHU4NmQzXHU4NmQ1XHU4NmQ2XHU4NmQ3XHU4NmRhXHU4NmRjXHVmZmZkXHU4NmRkXHU4NmUwXHU4NmUxXHU4NmUyXHU4NmUzXHU4NmU1XHU4NmU2XHU4NmU3XHU4NmU4XHU4NmVhXHU4NmViXHU4NmVjXHU4NmVmXHU4NmY1XHU4NmY2XHU4NmY3XHU4NmZhXHU4NmZiXHU4NmZj''@;'; put 'put ''XHU4NmZkXHU4NmZmXHU4NzAxXHU4NzA0XHU4NzA1XHU4NzA2XHU4NzBiXHU4NzBjXHU4NzBlXHU4NzBmXHU4NzEwXHU4NzExXHU4NzE0XHU4NzE2XHU2YzQwXHU1ZWY3XHU1MDVjXHU0ZWFkXHU1ZWFkXHU2MzNhXHU4MjQ3XHU5MDFhXHU2ODUwXHU5MTZlXHU3N2IzXHU1NDBjXHU5NGRjXHU1''@;'; put 'put ''ZjY0XHU3YWU1XHU2ODc2XHU2MzQ1XHU3YjUyXHU3ZWRmXHU3NWRiXHU1MDc3XHU2Mjk1XHU1OTM0XHU5MDBmXHU1MWY4XHU3OWMzXHU3YTgxXHU1NmZlXHU1ZjkyXHU5MDE0XHU2ZDgyXHU1YzYwXHU1NzFmXHU1NDEwXHU1MTU0XHU2ZTRkXHU1NmUyXHU2M2E4XHU5ODkzXHU4MTdmXHU4NzE1''@;'; put 'put ''XHU4OTJhXHU5MDAwXHU1NDFlXHU1YzZmXHU4MWMwXHU2MmQ2XHU2MjU4XHU4MTMxXHU5ZTM1XHU5NjQwXHU5YTZlXHU5YTdjXHU2OTJkXHU1OWE1XHU2MmQzXHU1NTNlXHU2MzE2XHU1NGM3XHU4NmQ5XHU2ZDNjXHU1YTAzXHU3NGU2XHU4ODljXHU2YjZhXHU1OTE2XHU4YzRjXHU1ZjJmXHU2''@;'; put 'put ''ZTdlXHU3M2E5XHU5ODdkXHU0ZTM4XHU3MGY3XHU1YjhjXHU3ODk3XHU2MzNkXHU2NjVhXHU3Njk2XHU2MGNiXHU1YjliXHU1YTQ5XHU0ZTA3XHU4MTU1XHU2YzZhXHU3MzhiXHU0ZWExXHU2Nzg5XHU3ZjUxXHU1ZjgwXHU2NWZhXHU2NzFiXHU1ZmQ4XHU1OTg0XHU1YTAxXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIikscz0wO3MhPWNbMjA1XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMDVdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjA1XVtzXV09NTI0ODArcyxoWzUyNDgwK3NdPWNbMjA1XVtzXSk7Zm9yKGNbMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHU4NzE5XHU4NzFiXHU4NzFkXHU4NzFmXHU4NzIwXHU4NzI0XHU4NzI2XHU4NzI3XHU4NzI4XHU4NzJhXHU4NzJiXHU4NzJjXHU4NzJkXHU4NzJmXHU4NzMwXHU4NzMyXHU4NzMzXHU4NzM1XHU4NzM2XHU4NzM4XHU4NzM5XHU4NzNhXHU4NzNjXHU4NzNkXHU4NzQwXHU4NzQx''@;'; put 'put ''XHU4NzQyXHU4NzQzXHU4NzQ0XHU4NzQ1XHU4NzQ2XHU4NzRhXHU4NzRiXHU4NzRkXHU4NzRmXHU4NzUwXHU4NzUxXHU4NzUyXHU4NzU0XHU4NzU1XHU4NzU2XHU4NzU4XHU4NzVhXHU4NzViXHU4NzVjXHU4NzVkXHU4NzVlXHU4NzVmXHU4NzYxXHU4NzYyXHU4NzY2XHU4NzY3XHU4NzY4XHU4''@;'; put 'put ''NzY5XHU4NzZhXHU4NzZiXHU4NzZjXHU4NzZkXHU4NzZmXHU4NzcxXHU4NzcyXHU4NzczXHU4Nzc1XHVmZmZkXHU4Nzc3XHU4Nzc4XHU4Nzc5XHU4NzdhXHU4NzdmXHU4NzgwXHU4NzgxXHU4Nzg0XHU4Nzg2XHU4Nzg3XHU4Nzg5XHU4NzhhXHU4NzhjXHU4NzhlXHU4NzhmXHU4NzkwXHU4Nzkx''@;'; put 'put ''XHU4NzkyXHU4Nzk0XHU4Nzk1XHU4Nzk2XHU4Nzk4XHU4Nzk5XHU4NzlhXHU4NzliXHU4NzljXHU4NzlkXHU4NzllXHU4N2EwXHU4N2ExXHU4N2EyXHU4N2EzXHU4N2E0XHU1ZGNkXHU1ZmFlXHU1MzcxXHU5N2U2XHU4ZmRkXHU2ODQ1XHU1NmY0XHU1NTJmXHU2MGRmXHU0ZTNhXHU2ZjRkXHU3''@;'; put 'put ''ZWY0XHU4MmM3XHU4NDBlXHU1OWQ0XHU0ZjFmXHU0ZjJhXHU1YzNlXHU3ZWFjXHU2NzJhXHU4NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1NTgyXHU5YjRmXHU0ZjRkXHU2ZTJkXHU4YzEzXHU1YzA5XHU2MTcwXHU1MzZiXHU3NjFmXHU2ZTI5XHU4NjhhXHU2NTg3XHU5NWZiXHU3ZWI5XHU1NDNi''@;'; put 'put ''XHU3YTMzXHU3ZDBhXHU5NWVlXHU1NWUxXHU3ZmMxXHU3NGVlXHU2MzFkXHU4NzE3XHU2ZGExXHU3YTlkXHU2MjExXHU2NWExXHU1MzY3XHU2M2UxXHU2YzgzXHU1ZGViXHU1NDVjXHU5NGE4XHU0ZTRjXHU2YzYxXHU4YmVjXHU1YzRiXHU2NWUwXHU4MjljXHU2OGE3XHU1NDNlXHU1NDM0XHU2''@;'; put 'put ''YmNiXHU2YjY2XHU0ZTk0XHU2MzQyXHU1MzQ4XHU4MjFlXHU0ZjBkXHU0ZmFlXHU1NzVlXHU2MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1MmZmXHU1MmExXHU2MDlmXHU4YmVmXHU2NjE0XHU3MTk5XHU2NzkwXHU4OTdmXHU3ODUyXHU3N2ZkXHU2NjcwXHU1NjNiXHU1NDM4XHU5NTIxXHU3Mjdh''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjA2XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMDZdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjA2XVtzXV09NTI3MzYrcyxoWzUyNzM2K3NdPWNbMjA2XVtzXSk7Zm9yKGNbMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4N2E1XHU4N2E2XHU4N2E3XHU4N2E5XHU4N2FhXHU4N2FlXHU4N2IwXHU4N2IxXHU4N2IyXHU4N2I0XHU4N2I2XHU4N2I3XHU4N2I4XHU4N2I5XHU4N2JiXHU4N2JjXHU4N2JlXHU4N2JmXHU4N2MxXHU4N2MyXHU4N2MzXHU4N2M0XHU4N2M1XHU4N2M3''@;'; put 'put ''XHU4N2M4XHU4N2M5XHU4N2NjXHU4N2NkXHU4N2NlXHU4N2NmXHU4N2QwXHU4N2Q0XHU4N2Q1XHU4N2Q2XHU4N2Q3XHU4N2Q4XHU4N2Q5XHU4N2RhXHU4N2RjXHU4N2RkXHU4N2RlXHU4N2RmXHU4N2UxXHU4N2UyXHU4N2UzXHU4N2U0XHU4N2U2XHU4N2U3XHU4N2U4XHU4N2U5XHU4N2ViXHU4''@;'; put 'put ''N2VjXHU4N2VkXHU4N2VmXHU4N2YwXHU4N2YxXHU4N2YyXHU4N2YzXHU4N2Y0XHU4N2Y1XHU4N2Y2XHU4N2Y3XHU4N2Y4XHVmZmZkXHU4N2ZhXHU4N2ZiXHU4N2ZjXHU4N2ZkXHU4N2ZmXHU4ODAwXHU4ODAxXHU4ODAyXHU4ODA0XHU4ODA1XHU4ODA2XHU4ODA3XHU4ODA4XHU4ODA5XHU4ODBi''@;'; put 'put ''XHU4ODBjXHU4ODBkXHU4ODBlXHU4ODBmXHU4ODEwXHU4ODExXHU4ODEyXHU4ODE0XHU4ODE3XHU4ODE4XHU4ODE5XHU4ODFhXHU4ODFjXHU4ODFkXHU4ODFlXHU4ODFmXHU4ODIwXHU4ODIzXHU3YTAwXHU2MDZmXHU1ZTBjXHU2MDg5XHU4MTlkXHU1OTE1XHU2MGRjXHU3MTg0XHU3MGVmXHU2''@;'; put 'put ''ZWFhXHU2YzUwXHU3MjgwXHU2YTg0XHU4OGFkXHU1ZTJkXHU0ZTYwXHU1YWIzXHU1NTljXHU5NGUzXHU2ZDE3XHU3Y2ZiXHU5Njk5XHU2MjBmXHU3ZWM2XHU3NzhlXHU4NjdlXHU1MzIzXHU5NzFlXHU4Zjk2XHU2Njg3XHU1Y2UxXHU0ZmEwXHU3MmVkXHU0ZTBiXHU1M2E2XHU1OTBmXHU1NDEz''@;'; put 'put ''XHU2MzgwXHU5NTI4XHU1MTQ4XHU0ZWQ5XHU5YzljXHU3ZWE0XHU1NGI4XHU4ZDI0XHU4ODU0XHU4MjM3XHU5NWYyXHU2ZDhlXHU1ZjI2XHU1YWNjXHU2NjNlXHU5NjY5XHU3M2IwXHU3MzJlXHU1M2JmXHU4MTdhXHU5OTg1XHU3ZmExXHU1YmFhXHU5Njc3XHU5NjUwXHU3ZWJmXHU3NmY4XHU1''@;'; put 'put ''M2EyXHU5NTc2XHU5OTk5XHU3YmIxXHU4OTQ0XHU2ZTU4XHU0ZTYxXHU3ZmQ0XHU3OTY1XHU4YmU2XHU2MGYzXHU1NGNkXHU0ZWFiXHU5ODc5XHU1ZGY3XHU2YTYxXHU1MGNmXHU1NDExXHU4YzYxXHU4NDI3XHU3ODVkXHU5NzA0XHU1MjRhXHU1NGVlXHU1NmEzXHU5NTAwXHU2ZDg4XHU1YmI1''@;'; put 'put ''XHU2ZGM2XHU2NjUzXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjA3XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMDddW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjA3XVtzXV09NTI5OTIrcyxoWzUyOTkyK3NdPWNbMjA3XVtzXSk7Zm9yKGNbMjA4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ODI0XHU4ODI1XHU4ODI2XHU4ODI3XHU4ODI4XHU4ODI5XHU4ODJhXHU4ODJiXHU4ODJjXHU4ODJkXHU4ODJlXHU4ODJmXHU4ODMwXHU4ODMxXHU4ODMzXHU4ODM0XHU4ODM1XHU4ODM2XHU4ODM3XHU4ODM4XHU4ODNhXHU4ODNi''@;'; put 'put ''XHU4ODNkXHU4ODNlXHU4ODNmXHU4ODQxXHU4ODQyXHU4ODQzXHU4ODQ2XHU4ODQ3XHU4ODQ4XHU4ODQ5XHU4ODRhXHU4ODRiXHU4ODRlXHU4ODRmXHU4ODUwXHU4ODUxXHU4ODUyXHU4ODUzXHU4ODU1XHU4ODU2XHU4ODU4XHU4ODVhXHU4ODViXHU4ODVjXHU4ODVkXHU4ODVlXHU4ODVmXHU4''@;'; put 'put ''ODYwXHU4ODY2XHU4ODY3XHU4ODZhXHU4ODZkXHU4ODZmXHU4ODcxXHU4ODczXHU4ODc0XHU4ODc1XHU4ODc2XHU4ODc4XHU4ODc5XHU4ODdhXHVmZmZkXHU4ODdiXHU4ODdjXHU4ODgwXHU4ODgzXHU4ODg2XHU4ODg3XHU4ODg5XHU4ODhhXHU4ODhjXHU4ODhlXHU4ODhmXHU4ODkwXHU4ODkx''@;'; put 'put ''XHU4ODkzXHU4ODk0XHU4ODk1XHU4ODk3XHU4ODk4XHU4ODk5XHU4ODlhXHU4ODliXHU4ODlkXHU4ODllXHU4ODlmXHU4OGEwXHU4OGExXHU4OGEzXHU4OGE1XHU4OGE2XHU4OGE3XHU4OGE4XHU4OGE5XHU4OGFhXHU1YzBmXHU1YjVkXHU2ODIxXHU4MDk2XHU1NTc4XHU3YjExXHU2NTQ4XHU2''@;'; put 'put ''OTU0XHU0ZTliXHU2YjQ3XHU4NzRlXHU5NzhiXHU1MzRmXHU2MzFmXHU2NDNhXHU5MGFhXHU2NTljXHU4MGMxXHU4YzEwXHU1MTk5XHU2OGIwXHU1Mzc4XHU4N2Y5XHU2MWM4XHU2Y2M0XHU2Y2ZiXHU4YzIyXHU1YzUxXHU4NWFhXHU4MmFmXHU5NTBjXHU2YjIzXHU4ZjliXHU2NWIwXHU1ZmZi''@;'; put 'put ''XHU1ZmMzXHU0ZmUxXHU4ODQ1XHU2NjFmXHU4MTY1XHU3MzI5XHU2MGZhXHU1MTc0XHU1MjExXHU1NzhiXHU1ZjYyXHU5MGEyXHU4ODRjXHU5MTkyXHU1ZTc4XHU2NzRmXHU2MDI3XHU1OWQzXHU1MTQ0XHU1MWY2XHU4MGY4XHU1MzA4XHU2Yzc5XHU5NmM0XHU3MThhXHU0ZjExXHU0ZmVlXHU3''@;'; put 'put ''ZjllXHU2NzNkXHU1NWM1XHU5NTA4XHU3OWMwXHU4ODk2XHU3ZWUzXHU1ODlmXHU2MjBjXHU5NzAwXHU4NjVhXHU1NjE4XHU5ODdiXHU1ZjkwXHU4YmI4XHU4NGM0XHU5MTU3XHU1M2Q5XHU2NWVkXHU1ZThmXHU3NTVjXHU2MDY0XHU3ZDZlXHU1YTdmXHU3ZWVhXHU3ZWVkXHU4ZjY5XHU1NWE3''@;'; put 'put ''XHU1YmEzXHU2MGFjXHU2NWNiXHU3Mzg0XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjA4XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMDhdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjA4XVtzXV09NTMyNDgrcyxoWzUzMjQ4K3NdPWNbMjA4XVtzXSk7Zm9yKGNbMjA5XT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OGFjXHU4OGFlXHU4OGFmXHU4OGIwXHU4OGIyXHU4OGIzXHU4OGI0XHU4OGI1XHU4OGI2XHU4OGI4XHU4OGI5XHU4OGJhXHU4OGJiXHU4OGJkXHU4OGJlXHU4OGJmXHU4OGMwXHU4OGMzXHU4OGM0XHU4OGM3''@;'; put 'put ''XHU4OGM4XHU4OGNhXHU4OGNiXHU4OGNjXHU4OGNkXHU4OGNmXHU4OGQwXHU4OGQxXHU4OGQzXHU4OGQ2XHU4OGQ3XHU4OGRhXHU4OGRiXHU4OGRjXHU4OGRkXHU4OGRlXHU4OGUwXHU4OGUxXHU4OGU2XHU4OGU3XHU4OGU5XHU4OGVhXHU4OGViXHU4OGVjXHU4OGVkXHU4OGVlXHU4OGVmXHU4''@;'; put 'put ''OGYyXHU4OGY1XHU4OGY2XHU4OGY3XHU4OGZhXHU4OGZiXHU4OGZkXHU4OGZmXHU4OTAwXHU4OTAxXHU4OTAzXHU4OTA0XHU4OTA1XHU4OTA2XHU4OTA3XHU4OTA4XHVmZmZkXHU4OTA5XHU4OTBiXHU4OTBjXHU4OTBkXHU4OTBlXHU4OTBmXHU4OTExXHU4OTE0XHU4OTE1XHU4OTE2XHU4OTE3''@;'; put 'put ''XHU4OTE4XHU4OTFjXHU4OTFkXHU4OTFlXHU4OTFmXHU4OTIwXHU4OTIyXHU4OTIzXHU4OTI0XHU4OTI2XHU4OTI3XHU4OTI4XHU4OTI5XHU4OTJjXHU4OTJkXHU4OTJlXHU4OTJmXHU4OTMxXHU4OTMyXHU4OTMzXHU4OTM1XHU4OTM3XHU5MDA5XHU3NjYzXHU3NzI5XHU3ZWRhXHU5Nzc0XHU4''@;'; put 'put ''NTliXHU1YjY2XHU3YTc0XHU5NmVhXHU4ODQwXHU1MmNiXHU3MThmXHU1ZmFhXHU2NWVjXHU4YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4YmFkXHU4YmFmXHU5MDBhXHU4ZmM1XHU1MzhiXHU2MmJjXHU5ZTI2XHU5ZTJkXHU1NDQwXHU0ZTJiXHU4MmJkXHU3MjU5XHU4Njlj''@;'; put 'put ''XHU1ZDE2XHU4ODU5XHU2ZGFmXHU5NmM1XHU1NGQxXHU0ZTlhXHU4YmI2XHU3MTA5XHU1NGJkXHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0XHU4NzEyXHU1Y2E5XHU1ZWY2XHU4YTAwXHU5ODljXHU5NjBlXHU3MDhlXHU2Y2JmXHU1OTQ0XHU2M2E5XHU3NzNjXHU4ODRkXHU2''@;'; put 'put ''ZjE0XHU4MjczXHU1ODMwXHU3MWQ1XHU1MzhjXHU3ODFhXHU5NmMxXHU1NTAxXHU1ZjY2XHU3MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5ZTJmXHU3OWU3XHU2NzY4XHU2MjZjXHU0ZjZmXHU3NWExXHU3ZjhhXHU2ZDBiXHU5NjMzXHU2YzI3XHU0ZWYwXHU3NWQyXHU1MTdi''@;'; put 'put ''XHU2ODM3XHU2ZjNlXHU5MDgwXHU4MTcwXHU1OTk2XHU3NDc2XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjA5XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMDldW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjA5XVtzXV09NTM1MDQrcyxoWzUzNTA0K3NdPWNbMjA5XVtzXSk7Zm9yKGNbMjEw''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OTM4XHU4OTM5XHU4OTNhXHU4OTNiXHU4OTNjXHU4OTNkXHU4OTNlXHU4OTNmXHU4OTQwXHU4OTQyXHU4OTQzXHU4OTQ1XHU4OTQ2XHU4OTQ3XHU4OTQ4XHU4OTQ5XHU4OTRhXHU4OTRi''@;'; put 'put ''XHU4OTRjXHU4OTRkXHU4OTRlXHU4OTRmXHU4OTUwXHU4OTUxXHU4OTUyXHU4OTUzXHU4OTU0XHU4OTU1XHU4OTU2XHU4OTU3XHU4OTU4XHU4OTU5XHU4OTVhXHU4OTViXHU4OTVjXHU4OTVkXHU4OTYwXHU4OTYxXHU4OTYyXHU4OTYzXHU4OTY0XHU4OTY1XHU4OTY3XHU4OTY4XHU4OTY5XHU4''@;'; put 'put ''OTZhXHU4OTZiXHU4OTZjXHU4OTZkXHU4OTZlXHU4OTZmXHU4OTcwXHU4OTcxXHU4OTcyXHU4OTczXHU4OTc0XHU4OTc1XHU4OTc2XHU4OTc3XHU4OTc4XHU4OTc5XHU4OTdhXHU4OTdjXHVmZmZkXHU4OTdkXHU4OTdlXHU4OTgwXHU4OTgyXHU4OTg0XHU4OTg1XHU4OTg3XHU4OTg4XHU4OTg5''@;'; put 'put ''XHU4OThhXHU4OThiXHU4OThjXHU4OThkXHU4OThlXHU4OThmXHU4OTkwXHU4OTkxXHU4OTkyXHU4OTkzXHU4OTk0XHU4OTk1XHU4OTk2XHU4OTk3XHU4OTk4XHU4OTk5XHU4OTlhXHU4OTliXHU4OTljXHU4OTlkXHU4OTllXHU4OTlmXHU4OWEwXHU4OWExXHU2NDQ3XHU1YzI3XHU5MDY1XHU3''@;'; put 'put ''YTkxXHU4YzIzXHU1OWRhXHU1NGFjXHU4MjAwXHU4MzZmXHU4OTgxXHU4MDAwXHU2OTMwXHU1NjRlXHU4MDM2XHU3MjM3XHU5MWNlXHU1MWI2XHU0ZTVmXHU5ODc1XHU2Mzk2XHU0ZTFhXHU1M2Y2XHU2NmYzXHU4MTRiXHU1OTFjXHU2ZGIyXHU0ZTAwXHU1OGY5XHU1MzNiXHU2M2Q2XHU5NGYx''@;'; put 'put ''XHU0ZjlkXHU0ZjBhXHU4ODYzXHU5ODkwXHU1OTM3XHU5MDU3XHU3OWZiXHU0ZWVhXHU4MGYwXHU3NTkxXHU2YzgyXHU1YjljXHU1OWU4XHU1ZjVkXHU2OTA1XHU4NjgxXHU1MDFhXHU1ZGYyXHU0ZTU5XHU3N2UzXHU0ZWU1XHU4MjdhXHU2MjkxXHU2NjEzXHU5MDkxXHU1Yzc5XHU0ZWJmXHU1''@;'; put 'put ''Zjc5XHU4MWM2XHU5MDM4XHU4MDg0XHU3NWFiXHU0ZWE2XHU4OGQ0XHU2MTBmXHU2YmM1XHU1ZmM2XHU0ZTQ5XHU3NmNhXHU2ZWEyXHU4YmUzXHU4YmFlXHU4YzBhXHU4YmQxXHU1ZjAyXHU3ZmZjXHU3ZmNjXHU3ZWNlXHU4MzM1XHU4MzZiXHU1NmUwXHU2YmI3XHU5N2YzXHU5NjM0XHU1OWZi''@;'; put 'put ''XHU1NDFmXHU5NGY2XHU2ZGViXHU1YmM1XHU5OTZlXHU1YzM5XHU1ZjE1XHU5NjkwXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjEwXS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMTBdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjEwXVtzXV09NTM3NjArcyxoWzUzNzYwK3NdPWNbMjEwXVtz''@;'; put 'put ''XSk7Zm9yKGNbMjExXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OWEyXHU4OWEzXHU4OWE0XHU4OWE1XHU4OWE2XHU4OWE3XHU4OWE4XHU4OWE5XHU4OWFhXHU4OWFiXHU4OWFjXHU4OWFkXHU4OWFlXHU4OWFmXHU4OWIwXHU4OWIx''@;'; put 'put ''XHU4OWIyXHU4OWIzXHU4OWI0XHU4OWI1XHU4OWI2XHU4OWI3XHU4OWI4XHU4OWI5XHU4OWJhXHU4OWJiXHU4OWJjXHU4OWJkXHU4OWJlXHU4OWJmXHU4OWMwXHU4OWMzXHU4OWNkXHU4OWQzXHU4OWQ0XHU4OWQ1XHU4OWQ3XHU4OWQ4XHU4OWQ5XHU4OWRiXHU4OWRkXHU4OWRmXHU4OWUwXHU4''@;'; put 'put ''OWUxXHU4OWUyXHU4OWU0XHU4OWU3XHU4OWU4XHU4OWU5XHU4OWVhXHU4OWVjXHU4OWVkXHU4OWVlXHU4OWYwXHU4OWYxXHU4OWYyXHU4OWY0XHU4OWY1XHU4OWY2XHU4OWY3XHU4OWY4XHU4OWY5XHU4OWZhXHVmZmZkXHU4OWZiXHU4OWZjXHU4OWZkXHU4OWZlXHU4OWZmXHU4YTAxXHU4YTAy''@;'; put 'put ''XHU4YTAzXHU4YTA0XHU4YTA1XHU4YTA2XHU4YTA4XHU4YTA5XHU4YTBhXHU4YTBiXHU4YTBjXHU4YTBkXHU4YTBlXHU4YTBmXHU4YTEwXHU4YTExXHU4YTEyXHU4YTEzXHU4YTE0XHU4YTE1XHU4YTE2XHU4YTE3XHU4YTE4XHU4YTE5XHU4YTFhXHU4YTFiXHU4YTFjXHU4YTFkXHU1MzcwXHU4''@;'; put 'put ''MmYxXHU2YTMxXHU1YTc0XHU5ZTcwXHU1ZTk0XHU3ZjI4XHU4M2I5XHU4NDI0XHU4NDI1XHU4MzY3XHU4NzQ3XHU4ZmNlXHU4ZDYyXHU3NmM4XHU1ZjcxXHU5ODk2XHU3ODZjXHU2NjIwXHU1NGRmXHU2MmU1XHU0ZjYzXHU4MWMzXHU3NWM4XHU1ZWI4XHU5NmNkXHU4ZTBhXHU4NmY5XHU1NDhm''@;'; put 'put ''XHU2Y2YzXHU2ZDhjXHU2YzM4XHU2MDdmXHU1MmM3XHU3NTI4XHU1ZTdkXHU0ZjE4XHU2MGEwXHU1ZmU3XHU1YzI0XHU3NTMxXHU5MGFlXHU5NGMwXHU3MmI5XHU2Y2I5XHU2ZTM4XHU5MTQ5XHU2NzA5XHU1M2NiXHU1M2YzXHU0ZjUxXHU5MWM5XHU4YmYxXHU1M2M4XHU1ZTdjXHU4ZmMyXHU2''@;'; put 'put ''ZGU0XHU0ZThlXHU3NmMyXHU2OTg2XHU4NjVlXHU2MTFhXHU4MjA2XHU0ZjU5XHU0ZmRlXHU5MDNlXHU5YzdjXHU2MTA5XHU2ZTFkXHU2ZTE0XHU5Njg1XHU0ZTg4XHU1YTMxXHU5NmU4XHU0ZTBlXHU1YzdmXHU3OWI5XHU1Yjg3XHU4YmVkXHU3ZmJkXHU3Mzg5XHU1N2RmXHU4MjhiXHU5MGMx''@;'; put 'put ''XHU1NDAxXHU5MDQ3XHU1NWJiXHU1Y2VhXHU1ZmExXHU2MTA4XHU2YjMyXHU3MmYxXHU4MGIyXHU4YTg5XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjExXS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMTFdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjExXVtzXV09NTQwMTYrcyxoWzU0MDE2''@;'; put 'put ''K3NdPWNbMjExXVtzXSk7Zm9yKGNbMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTFlXHU4YTFmXHU4YTIwXHU4YTIxXHU4YTIyXHU4YTIzXHU4YTI0XHU4YTI1XHU4YTI2XHU4YTI3XHU4YTI4XHU4YTI5XHU4YTJhXHU4YTJi''@;'; put 'put ''XHU4YTJjXHU4YTJkXHU4YTJlXHU4YTJmXHU4YTMwXHU4YTMxXHU4YTMyXHU4YTMzXHU4YTM0XHU4YTM1XHU4YTM2XHU4YTM3XHU4YTM4XHU4YTM5XHU4YTNhXHU4YTNiXHU4YTNjXHU4YTNkXHU4YTNmXHU4YTQwXHU4YTQxXHU4YTQyXHU4YTQzXHU4YTQ0XHU4YTQ1XHU4YTQ2XHU4YTQ3XHU4''@;'; put 'put ''YTQ5XHU4YTRhXHU4YTRiXHU4YTRjXHU4YTRkXHU4YTRlXHU4YTRmXHU4YTUwXHU4YTUxXHU4YTUyXHU4YTUzXHU4YTU0XHU4YTU1XHU4YTU2XHU4YTU3XHU4YTU4XHU4YTU5XHU4YTVhXHU4YTViXHU4YTVjXHU4YTVkXHU4YTVlXHVmZmZkXHU4YTVmXHU4YTYwXHU4YTYxXHU4YTYyXHU4YTYz''@;'; put 'put ''XHU4YTY0XHU4YTY1XHU4YTY2XHU4YTY3XHU4YTY4XHU4YTY5XHU4YTZhXHU4YTZiXHU4YTZjXHU4YTZkXHU4YTZlXHU4YTZmXHU4YTcwXHU4YTcxXHU4YTcyXHU4YTczXHU4YTc0XHU4YTc1XHU4YTc2XHU4YTc3XHU4YTc4XHU4YTdhXHU4YTdiXHU4YTdjXHU4YTdkXHU4YTdlXHU4YTdmXHU4''@;'; put 'put ''YTgwXHU2ZDc0XHU1YmQzXHU4OGQ1XHU5ODg0XHU4YzZiXHU5YTZkXHU5ZTMzXHU2ZTBhXHU1MWE0XHU1MTQzXHU1N2EzXHU4ODgxXHU1MzlmXHU2M2Y0XHU4Zjk1XHU1NmVkXHU1NDU4XHU1NzA2XHU3MzNmXHU2ZTkwXHU3ZjE4XHU4ZmRjXHU4MmQxXHU2MTNmXHU2MDI4XHU5NjYyXHU2NmYw''@;'; put 'put ''XHU3ZWE2XHU4ZDhhXHU4ZGMzXHU5NGE1XHU1Y2IzXHU3Y2E0XHU2NzA4XHU2MGE2XHU5NjA1XHU4MDE4XHU0ZTkxXHU5MGU3XHU1MzAwXHU5NjY4XHU1MTQxXHU4ZmQwXHU4NTc0XHU5MTVkXHU2NjU1XHU5N2Y1XHU1YjU1XHU1MzFkXHU3ODM4XHU2NzQyXHU2ODNkXHU1NGM5XHU3MDdlXHU1''@;'; put 'put ''YmIwXHU4ZjdkXHU1MThkXHU1NzI4XHU1NGIxXHU2NTEyXHU2NjgyXHU4ZDVlXHU4ZDQzXHU4MTBmXHU4NDZjXHU5MDZkXHU3Y2RmXHU1MWZmXHU4NWZiXHU2N2EzXHU2NWU5XHU2ZmExXHU4NmE0XHU4ZTgxXHU1NjZhXHU5MDIwXHU3NjgyXHU3MDc2XHU3MWU1XHU4ZDIzXHU2MmU5XHU1MjE5''@;'; put 'put ''XHU2Y2ZkXHU4ZDNjXHU2MDBlXHU1ODllXHU2MThlXHU2NmZlXHU4ZDYwXHU2MjRlXHU1NWIzXHU2ZTIzXHU2NzJkXHU4ZjY3XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjEyXS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMTJdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjEyXVtzXV09NTQy''@;'; put 'put ''NzIrcyxoWzU0MjcyK3NdPWNbMjEyXVtzXSk7Zm9yKGNbMjEzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTgxXHU4YTgyXHU4YTgzXHU4YTg0XHU4YTg1XHU4YTg2XHU4YTg3XHU4YTg4XHU4YThiXHU4YThjXHU4YThkXHU4YThl''@;'; put 'put ''XHU4YThmXHU4YTkwXHU4YTkxXHU4YTkyXHU4YTk0XHU4YTk1XHU4YTk2XHU4YTk3XHU4YTk4XHU4YTk5XHU4YTlhXHU4YTliXHU4YTljXHU4YTlkXHU4YTllXHU4YTlmXHU4YWEwXHU4YWExXHU4YWEyXHU4YWEzXHU4YWE0XHU4YWE1XHU4YWE2XHU4YWE3XHU4YWE4XHU4YWE5XHU4YWFhXHU4''@;'; put 'put ''YWFiXHU4YWFjXHU4YWFkXHU4YWFlXHU4YWFmXHU4YWIwXHU4YWIxXHU4YWIyXHU4YWIzXHU4YWI0XHU4YWI1XHU4YWI2XHU4YWI3XHU4YWI4XHU4YWI5XHU4YWJhXHU4YWJiXHU4YWJjXHU4YWJkXHU4YWJlXHU4YWJmXHU4YWMwXHU4YWMxXHU4YWMyXHVmZmZkXHU4YWMzXHU4YWM0XHU4YWM1''@;'; put 'put ''XHU4YWM2XHU4YWM3XHU4YWM4XHU4YWM5XHU4YWNhXHU4YWNiXHU4YWNjXHU4YWNkXHU4YWNlXHU4YWNmXHU4YWQwXHU4YWQxXHU4YWQyXHU4YWQzXHU4YWQ0XHU4YWQ1XHU4YWQ2XHU4YWQ3XHU4YWQ4XHU4YWQ5XHU4YWRhXHU4YWRiXHU4YWRjXHU4YWRkXHU4YWRlXHU4YWRmXHU4YWUwXHU4''@;'; put 'put ''YWUxXHU4YWUyXHU4YWUzXHU5NGUxXHU5NWY4XHU3NzI4XHU2ODA1XHU2OWE4XHU1NDhiXHU0ZTRkXHU3MGI4XHU4YmM4XHU2NDU4XHU2NThiXHU1Yjg1XHU3YTg0XHU1MDNhXHU1YmU4XHU3N2JiXHU2YmUxXHU4YTc5XHU3Yzk4XHU2Y2JlXHU3NmNmXHU2NWE5XHU4Zjk3XHU1ZDJkXHU1YzU1''@;'; put 'put ''XHU4NjM4XHU2ODA4XHU1MzYwXHU2MjE4XHU3YWQ5XHU2ZTViXHU3ZWZkXHU2YTFmXHU3YWUwXHU1ZjcwXHU2ZjMzXHU1ZjIwXHU2MzhjXHU2ZGE4XHU2NzU2XHU0ZTA4XHU1ZTEwXHU4ZDI2XHU0ZWQ3XHU4MGMwXHU3NjM0XHU5NjljXHU2MmRiXHU2NjJkXHU2MjdlXHU2Y2JjXHU4ZDc1XHU3''@;'; put 'put ''MTY3XHU3ZjY5XHU1MTQ2XHU4MDg3XHU1M2VjXHU5MDZlXHU2Mjk4XHU1NGYyXHU4NmYwXHU4Zjk5XHU4MDA1XHU5NTE3XHU4NTE3XHU4ZmQ5XHU2ZDU5XHU3M2NkXHU2NTlmXHU3NzFmXHU3NTA0XHU3ODI3XHU4MWZiXHU4ZDFlXHU5NDg4XHU0ZmE2XHU2Nzk1XHU3NWI5XHU4YmNhXHU5NzA3''@;'; put 'put ''XHU2MzJmXHU5NTQ3XHU5NjM1XHU4NGI4XHU2MzIzXHU3NzQxXHU1ZjgxXHU3MmYwXHU0ZTg5XHU2MDE0XHU2NTc0XHU2MmVmXHU2YjYzXHU2NTNmXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjEzXS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMTNdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2Nb''@;'; put 'put ''MjEzXVtzXV09NTQ1MjgrcyxoWzU0NTI4K3NdPWNbMjEzXVtzXSk7Zm9yKGNbMjE0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWU0XHU4YWU1XHU4YWU2XHU4YWU3XHU4YWU4XHU4YWU5XHU4YWVhXHU4YWViXHU4YWVjXHU4YWVk''@;'; put 'put ''XHU4YWVlXHU4YWVmXHU4YWYwXHU4YWYxXHU4YWYyXHU4YWYzXHU4YWY0XHU4YWY1XHU4YWY2XHU4YWY3XHU4YWY4XHU4YWY5XHU4YWZhXHU4YWZiXHU4YWZjXHU4YWZkXHU4YWZlXHU4YWZmXHU4YjAwXHU4YjAxXHU4YjAyXHU4YjAzXHU4YjA0XHU4YjA1XHU4YjA2XHU4YjA4XHU4YjA5XHU4''@;'; put 'put ''YjBhXHU4YjBiXHU4YjBjXHU4YjBkXHU4YjBlXHU4YjBmXHU4YjEwXHU4YjExXHU4YjEyXHU4YjEzXHU4YjE0XHU4YjE1XHU4YjE2XHU4YjE3XHU4YjE4XHU4YjE5XHU4YjFhXHU4YjFiXHU4YjFjXHU4YjFkXHU4YjFlXHU4YjFmXHU4YjIwXHU4YjIxXHU4YjIyXHU4YjIzXHVmZmZkXHU4YjI0''@;'; put 'put ''XHU4YjI1XHU4YjI3XHU4YjI4XHU4YjI5XHU4YjJhXHU4YjJiXHU4YjJjXHU4YjJkXHU4YjJlXHU4YjJmXHU4YjMwXHU4YjMxXHU4YjMyXHU4YjMzXHU4YjM0XHU4YjM1XHU4YjM2XHU4YjM3XHU4YjM4XHU4YjM5XHU4YjNhXHU4YjNiXHU4YjNjXHU4YjNkXHU4YjNlXHU4YjNmXHU4YjQwXHU4''@;'; put 'put ''YjQxXHU4YjQyXHU4YjQzXHU4YjQ0XHU4YjQ1XHU1ZTI3XHU3NWM3XHU5MGQxXHU4YmMxXHU4MjlkXHU2NzlkXHU2NTJmXHU1NDMxXHU4NzE4XHU3N2U1XHU4MGEyXHU4MTAyXHU2YzQxXHU0ZTRiXHU3ZWM3XHU4MDRjXHU3NmY0XHU2OTBkXHU2Yjk2XHU2MjY3XHU1MDNjXHU0Zjg0XHU1NzQw''@;'; put 'put ''XHU2MzA3XHU2YjYyXHU4ZGJlXHU1M2VhXHU2NWU4XHU3ZWI4XHU1ZmQ3XHU2MzFhXHU2M2I3XHU4MWYzXHU4MWY0XHU3ZjZlXHU1ZTFjXHU1Y2Q5XHU1MjM2XHU2NjdhXHU3OWU5XHU3YTFhXHU4ZDI4XHU3MDk5XHU3NWQ0XHU2ZWRlXHU2Y2JiXHU3YTkyXHU0ZTJkXHU3NmM1XHU1ZmUwXHU5''@;'; put 'put ''NDlmXHU4ODc3XHU3ZWM4XHU3OWNkXHU4MGJmXHU5MWNkXHU0ZWYyXHU0ZjE3XHU4MjFmXHU1NDY4XHU1ZGRlXHU2ZDMyXHU4YmNjXHU3Y2E1XHU4Zjc0XHU4MDk4XHU1ZTFhXHU1NDkyXHU3NmIxXHU1Yjk5XHU2NjNjXHU5YWE0XHU3M2UwXHU2ODJhXHU4NmRiXHU2NzMxXHU3MzJhXHU4YmY4''@;'; put 'put ''XHU4YmRiXHU5MDEwXHU3YWY5XHU3MGRiXHU3MTZlXHU2MmM0XHU3N2E5XHU1NjMxXHU0ZTNiXHU4NDU3XHU2N2YxXHU1MmE5XHU4NmMwXHU4ZDJlXHU5NGY4XHU3YjUxXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjE0XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMTRdW3NdLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJih5W2NbMjE0XVtzXV09NTQ3ODQrcyxoWzU0Nzg0K3NdPWNbMjE0XVtzXSk7Zm9yKGNbMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjQ2XHU4YjQ3XHU4YjQ4XHU4YjQ5XHU4YjRhXHU4YjRiXHU4YjRjXHU4YjRk''@;'; put 'put ''XHU4YjRlXHU4YjRmXHU4YjUwXHU4YjUxXHU4YjUyXHU4YjUzXHU4YjU0XHU4YjU1XHU4YjU2XHU4YjU3XHU4YjU4XHU4YjU5XHU4YjVhXHU4YjViXHU4YjVjXHU4YjVkXHU4YjVlXHU4YjVmXHU4YjYwXHU4YjYxXHU4YjYyXHU4YjYzXHU4YjY0XHU4YjY1XHU4YjY3XHU4YjY4XHU4YjY5XHU4''@;'; put 'put ''YjZhXHU4YjZiXHU4YjZkXHU4YjZlXHU4YjZmXHU4YjcwXHU4YjcxXHU4YjcyXHU4YjczXHU4Yjc0XHU4Yjc1XHU4Yjc2XHU4Yjc3XHU4Yjc4XHU4Yjc5XHU4YjdhXHU4YjdiXHU4YjdjXHU4YjdkXHU4YjdlXHU4YjdmXHU4YjgwXHU4YjgxXHU4YjgyXHU4YjgzXHU4Yjg0XHU4Yjg1XHU4Yjg2''@;'; put 'put ''XHVmZmZkXHU4Yjg3XHU4Yjg4XHU4Yjg5XHU4YjhhXHU4YjhiXHU4YjhjXHU4YjhkXHU4YjhlXHU4YjhmXHU4YjkwXHU4YjkxXHU4YjkyXHU4YjkzXHU4Yjk0XHU4Yjk1XHU4Yjk2XHU4Yjk3XHU4Yjk4XHU4Yjk5XHU4YjlhXHU4YjliXHU4YjljXHU4YjlkXHU4YjllXHU4YjlmXHU4YmFjXHU4''@;'; put 'put ''YmIxXHU4YmJiXHU4YmM3XHU4YmQwXHU4YmVhXHU4YzA5XHU4YzFlXHU0ZjRmXHU2Y2U4XHU3OTVkXHU5YTdiXHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEzXHU3ODE2XHU4ZjZjXHU2NGIwXHU4ZDVhXHU3YmM2XHU2ODY5XHU1ZTg0XHU4OGM1XHU1OTg2XHU2NDllXHU1OGVlXHU3MmI2XHU2OTBl''@;'; put 'put ''XHU5NTI1XHU4ZmZkXHU4ZDU4XHU1NzYwXHU3ZjAwXHU4YzA2XHU1MWM2XHU2MzQ5XHU2MmQ5XHU1MzUzXHU2ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1NTQ0XHU3NzQwXHU3MDdjXHU2ZDRhXHU1MTc5XHU1NGE4XHU4ZDQ0XHU1OWZmXHU2ZWNiXHU2ZGM0XHU1YjVjXHU3ZDJiXHU0ZWQ0XHU3''@;'; put 'put ''YzdkXHU2ZWQzXHU1YjUwXHU4MWVhXHU2ZTBkXHU1YjU3XHU5YjAzXHU2OGQ1XHU4ZTJhXHU1Yjk3XHU3ZWZjXHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcwXHU1OTRmXHU2M2NkXHU3OWRmXHU4ZGIzXHU1MzUyXHU2NWNmXHU3OTU2XHU4YmM1XHU5NjNiXHU3ZWM0XHU5NGJiXHU3ZTgyXHU1NjM0''@;'; put 'put ''XHU5MTg5XHU2NzAwXHU3ZjZhXHU1YzBhXHU5MDc1XHU2NjI4XHU1ZGU2XHU0ZjUwXHU2N2RlXHU1MDVhXHU0ZjVjXHU1NzUwXHU1ZWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjE1XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMTVd''@;'; put 'put ''W3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjE1XVtzXV09NTUwNDArcyxoWzU1MDQwK3NdPWNbMjE1XVtzXSk7Zm9yKGNbMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YzM4XHU4YzM5XHU4YzNhXHU4YzNiXHU4YzNjXHU4YzNk''@;'; put 'put ''XHU4YzNlXHU4YzNmXHU4YzQwXHU4YzQyXHU4YzQzXHU4YzQ0XHU4YzQ1XHU4YzQ4XHU4YzRhXHU4YzRiXHU4YzRkXHU4YzRlXHU4YzRmXHU4YzUwXHU4YzUxXHU4YzUyXHU4YzUzXHU4YzU0XHU4YzU2XHU4YzU3XHU4YzU4XHU4YzU5XHU4YzViXHU4YzVjXHU4YzVkXHU4YzVlXHU4YzVmXHU4''@;'; put 'put ''YzYwXHU4YzYzXHU4YzY0XHU4YzY1XHU4YzY2XHU4YzY3XHU4YzY4XHU4YzY5XHU4YzZjXHU4YzZkXHU4YzZlXHU4YzZmXHU4YzcwXHU4YzcxXHU4YzcyXHU4Yzc0XHU4Yzc1XHU4Yzc2XHU4Yzc3XHU4YzdiXHU4YzdjXHU4YzdkXHU4YzdlXHU4YzdmXHU4YzgwXHU4YzgxXHU4YzgzXHU4Yzg0''@;'; put 'put ''XHU4Yzg2XHU4Yzg3XHVmZmZkXHU4Yzg4XHU4YzhiXHU4YzhkXHU4YzhlXHU4YzhmXHU4YzkwXHU4YzkxXHU4YzkyXHU4YzkzXHU4Yzk1XHU4Yzk2XHU4Yzk3XHU4Yzk5XHU4YzlhXHU4YzliXHU4YzljXHU4YzlkXHU4YzllXHU4YzlmXHU4Y2EwXHU4Y2ExXHU4Y2EyXHU4Y2EzXHU4Y2E0XHU4''@;'; put 'put ''Y2E1XHU4Y2E2XHU4Y2E3XHU4Y2E4XHU4Y2E5XHU4Y2FhXHU4Y2FiXHU4Y2FjXHU4Y2FkXHU0ZThkXHU0ZTBjXHU1MTQwXHU0ZTEwXHU1ZWZmXHU1MzQ1XHU0ZTE1XHU0ZTk4XHU0ZTFlXHU5YjMyXHU1YjZjXHU1NjY5XHU0ZTI4XHU3OWJhXHU0ZTNmXHU1MzE1XHU0ZTQ3XHU1OTJkXHU3MjNi''@;'; put 'put ''XHU1MzZlXHU2YzEwXHU1NmRmXHU4MGU0XHU5OTk3XHU2YmQzXHU3NzdlXHU5ZjE3XHU0ZTM2XHU0ZTlmXHU5ZjEwXHU0ZTVjXHU0ZTY5XHU0ZTkzXHU4Mjg4XHU1YjViXHU1NTZjXHU1NjBmXHU0ZWM0XHU1MzhkXHU1MzlkXHU1M2EzXHU1M2E1XHU1M2FlXHU5NzY1XHU4ZDVkXHU1MzFhXHU1''@;'; put 'put ''M2Y1XHU1MzI2XHU1MzJlXHU1MzNlXHU4ZDVjXHU1MzY2XHU1MzYzXHU1MjAyXHU1MjA4XHU1MjBlXHU1MjJkXHU1MjMzXHU1MjNmXHU1MjQwXHU1MjRjXHU1MjVlXHU1MjYxXHU1MjVjXHU4NGFmXHU1MjdkXHU1MjgyXHU1MjgxXHU1MjkwXHU1MjkzXHU1MTgyXHU3ZjU0XHU0ZWJiXHU0ZWMz''@;'; put 'put ''XHU0ZWM5XHU0ZWMyXHU0ZWU4XHU0ZWUxXHU0ZWViXHU0ZWRlXHU0ZjFiXHU0ZWYzXHU0ZjIyXHU0ZjY0XHU0ZWY1XHU0ZjI1XHU0ZjI3XHU0ZjA5XHU0ZjJiXHU0ZjVlXHU0ZjY3XHU2NTM4XHU0ZjVhXHU0ZjVkXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjE2XS5sZW5ndGg7KytzKTY1''@;'; put 'put ''NTMzIT09Y1syMTZdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjE2XVtzXV09NTUyOTYrcyxoWzU1Mjk2K3NdPWNbMjE2XVtzXSk7Zm9yKGNbMjE3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4Y2FlXHU4Y2FmXHU4Y2IwXHU4Y2Ix''@;'; put 'put ''XHU4Y2IyXHU4Y2IzXHU4Y2I0XHU4Y2I1XHU4Y2I2XHU4Y2I3XHU4Y2I4XHU4Y2I5XHU4Y2JhXHU4Y2JiXHU4Y2JjXHU4Y2JkXHU4Y2JlXHU4Y2JmXHU4Y2MwXHU4Y2MxXHU4Y2MyXHU4Y2MzXHU4Y2M0XHU4Y2M1XHU4Y2M2XHU4Y2M3XHU4Y2M4XHU4Y2M5XHU4Y2NhXHU4Y2NiXHU4Y2NjXHU4''@;'; put 'put ''Y2NkXHU4Y2NlXHU4Y2NmXHU4Y2QwXHU4Y2QxXHU4Y2QyXHU4Y2QzXHU4Y2Q0XHU4Y2Q1XHU4Y2Q2XHU4Y2Q3XHU4Y2Q4XHU4Y2Q5XHU4Y2RhXHU4Y2RiXHU4Y2RjXHU4Y2RkXHU4Y2RlXHU4Y2RmXHU4Y2UwXHU4Y2UxXHU4Y2UyXHU4Y2UzXHU4Y2U0XHU4Y2U1XHU4Y2U2XHU4Y2U3XHU4Y2U4''@;'; put 'put ''XHU4Y2U5XHU4Y2VhXHU4Y2ViXHU4Y2VjXHVmZmZkXHU4Y2VkXHU4Y2VlXHU4Y2VmXHU4Y2YwXHU4Y2YxXHU4Y2YyXHU4Y2YzXHU4Y2Y0XHU4Y2Y1XHU4Y2Y2XHU4Y2Y3XHU4Y2Y4XHU4Y2Y5XHU4Y2ZhXHU4Y2ZiXHU4Y2ZjXHU4Y2ZkXHU4Y2ZlXHU4Y2ZmXHU4ZDAwXHU4ZDAxXHU4ZDAyXHU4''@;'; put 'put ''ZDAzXHU4ZDA0XHU4ZDA1XHU4ZDA2XHU4ZDA3XHU4ZDA4XHU4ZDA5XHU4ZDBhXHU4ZDBiXHU4ZDBjXHU4ZDBkXHU0ZjVmXHU0ZjU3XHU0ZjMyXHU0ZjNkXHU0Zjc2XHU0Zjc0XHU0ZjkxXHU0Zjg5XHU0ZjgzXHU0ZjhmXHU0ZjdlXHU0ZjdiXHU0ZmFhXHU0ZjdjXHU0ZmFjXHU0Zjk0XHU0ZmU2''@;'; put 'put ''XHU0ZmU4XHU0ZmVhXHU0ZmM1XHU0ZmRhXHU0ZmUzXHU0ZmRjXHU0ZmQxXHU0ZmRmXHU0ZmY4XHU1MDI5XHU1MDRjXHU0ZmYzXHU1MDJjXHU1MDBmXHU1MDJlXHU1MDJkXHU0ZmZlXHU1MDFjXHU1MDBjXHU1MDI1XHU1MDI4XHU1MDdlXHU1MDQzXHU1MDU1XHU1MDQ4XHU1MDRlXHU1MDZjXHU1''@;'; put 'put ''MDdiXHU1MGE1XHU1MGE3XHU1MGE5XHU1MGJhXHU1MGQ2XHU1MTA2XHU1MGVkXHU1MGVjXHU1MGU2XHU1MGVlXHU1MTA3XHU1MTBiXHU0ZWRkXHU2YzNkXHU0ZjU4XHU0ZjY1XHU0ZmNlXHU5ZmEwXHU2YzQ2XHU3Yzc0XHU1MTZlXHU1ZGZkXHU5ZWM5XHU5OTk4XHU1MTgxXHU1OTE0XHU1MmY5''@;'; put 'put ''XHU1MzBkXHU4YTA3XHU1MzEwXHU1MWViXHU1OTE5XHU1MTU1XHU0ZWEwXHU1MTU2XHU0ZWIzXHU4ODZlXHU4OGE0XHU0ZWI1XHU4MTE0XHU4OGQyXHU3OTgwXHU1YjM0XHU4ODAzXHU3ZmI4XHU1MWFiXHU1MWIxXHU1MWJkXHU1MWJjXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjE3XS5s''@;'; put 'put ''ZW5ndGg7KytzKTY1NTMzIT09Y1syMTddW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjE3XVtzXV09NTU1NTIrcyxoWzU1NTUyK3NdPWNbMjE3XVtzXSk7Zm9yKGNbMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZDBlXHU4ZDBm''@;'; put 'put ''XHU4ZDEwXHU4ZDExXHU4ZDEyXHU4ZDEzXHU4ZDE0XHU4ZDE1XHU4ZDE2XHU4ZDE3XHU4ZDE4XHU4ZDE5XHU4ZDFhXHU4ZDFiXHU4ZDFjXHU4ZDIwXHU4ZDUxXHU4ZDUyXHU4ZDU3XHU4ZDVmXHU4ZDY1XHU4ZDY4XHU4ZDY5XHU4ZDZhXHU4ZDZjXHU4ZDZlXHU4ZDZmXHU4ZDcxXHU4ZDcyXHU4''@;'; put 'put ''ZDc4XHU4ZDc5XHU4ZDdhXHU4ZDdiXHU4ZDdjXHU4ZDdkXHU4ZDdlXHU4ZDdmXHU4ZDgwXHU4ZDgyXHU4ZDgzXHU4ZDg2XHU4ZDg3XHU4ZDg4XHU4ZDg5XHU4ZDhjXHU4ZDhkXHU4ZDhlXHU4ZDhmXHU4ZDkwXHU4ZDkyXHU4ZDkzXHU4ZDk1XHU4ZDk2XHU4ZDk3XHU4ZDk4XHU4ZDk5XHU4ZDlh''@;'; put 'put ''XHU4ZDliXHU4ZDljXHU4ZDlkXHU4ZDllXHU4ZGEwXHU4ZGExXHVmZmZkXHU4ZGEyXHU4ZGE0XHU4ZGE1XHU4ZGE2XHU4ZGE3XHU4ZGE4XHU4ZGE5XHU4ZGFhXHU4ZGFiXHU4ZGFjXHU4ZGFkXHU4ZGFlXHU4ZGFmXHU4ZGIwXHU4ZGIyXHU4ZGI2XHU4ZGI3XHU4ZGI5XHU4ZGJiXHU4ZGJkXHU4''@;'; put 'put ''ZGMwXHU4ZGMxXHU4ZGMyXHU4ZGM1XHU4ZGM3XHU4ZGM4XHU4ZGM5XHU4ZGNhXHU4ZGNkXHU4ZGQwXHU4ZGQyXHU4ZGQzXHU4ZGQ0XHU1MWM3XHU1MTk2XHU1MWEyXHU1MWE1XHU4YmEwXHU4YmE2XHU4YmE3XHU4YmFhXHU4YmI0XHU4YmI1XHU4YmI3XHU4YmMyXHU4YmMzXHU4YmNiXHU4YmNm''@;'; put 'put ''XHU4YmNlXHU4YmQyXHU4YmQzXHU4YmQ0XHU4YmQ2XHU4YmQ4XHU4YmQ5XHU4YmRjXHU4YmRmXHU4YmUwXHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVlXHU4YmYwXHU4YmYzXHU4YmY2XHU4YmY5XHU4YmZjXHU4YmZmXHU4YzAwXHU4YzAyXHU4YzA0XHU4YzA3XHU4YzBjXHU4YzBmXHU4YzExXHU4''@;'; put 'put ''YzEyXHU4YzE0XHU4YzE1XHU4YzE2XHU4YzE5XHU4YzFiXHU4YzE4XHU4YzFkXHU4YzFmXHU4YzIwXHU4YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4YzJiXHU4YzJlXHU4YzJmXHU4YzMyXHU4YzMzXHU4YzM1XHU4YzM2XHU1MzY5XHU1MzdhXHU5NjFkXHU5NjIyXHU5NjIxXHU5NjMxXHU5NjJh''@;'; put 'put ''XHU5NjNkXHU5NjNjXHU5NjQyXHU5NjQ5XHU5NjU0XHU5NjVmXHU5NjY3XHU5NjZjXHU5NjcyXHU5Njc0XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIwXHU5MDk3XHU5MDliXHU5MDlkXHU5MDk5XHU5MGFjXHU5MGExXHU5MGI0XHU5MGIzXHU5MGI2XHU5MGJhXHVmZmZkIi5zcGxpdCgiIikscz0w''@;'; put 'put ''O3MhPWNbMjE4XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMThdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjE4XVtzXV09NTU4MDgrcyxoWzU1ODA4K3NdPWNbMjE4XVtzXSk7Zm9yKGNbMjE5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHU4ZGQ1XHU4ZGQ4XHU4ZGQ5XHU4ZGRjXHU4ZGUwXHU4ZGUxXHU4ZGUyXHU4ZGU1XHU4ZGU2XHU4ZGU3XHU4ZGU5XHU4ZGVkXHU4ZGVlXHU4ZGYwXHU4ZGYxXHU4ZGYyXHU4ZGY0XHU4ZGY2XHU4ZGZjXHU4ZGZlXHU4ZGZmXHU4ZTAwXHU4ZTAxXHU4ZTAyXHU4ZTAzXHU4ZTA0XHU4ZTA2XHU4''@;'; put 'put ''ZTA3XHU4ZTA4XHU4ZTBiXHU4ZTBkXHU4ZTBlXHU4ZTEwXHU4ZTExXHU4ZTEyXHU4ZTEzXHU4ZTE1XHU4ZTE2XHU4ZTE3XHU4ZTE4XHU4ZTE5XHU4ZTFhXHU4ZTFiXHU4ZTFjXHU4ZTIwXHU4ZTIxXHU4ZTI0XHU4ZTI1XHU4ZTI2XHU4ZTI3XHU4ZTI4XHU4ZTJiXHU4ZTJkXHU4ZTMwXHU4ZTMy''@;'; put 'put ''XHU4ZTMzXHU4ZTM0XHU4ZTM2XHU4ZTM3XHU4ZTM4XHU4ZTNiXHU4ZTNjXHU4ZTNlXHVmZmZkXHU4ZTNmXHU4ZTQzXHU4ZTQ1XHU4ZTQ2XHU4ZTRjXHU4ZTRkXHU4ZTRlXHU4ZTRmXHU4ZTUwXHU4ZTUzXHU4ZTU0XHU4ZTU1XHU4ZTU2XHU4ZTU3XHU4ZTU4XHU4ZTVhXHU4ZTViXHU4ZTVjXHU4''@;'; put 'put ''ZTVkXHU4ZTVlXHU4ZTVmXHU4ZTYwXHU4ZTYxXHU4ZTYyXHU4ZTYzXHU4ZTY0XHU4ZTY1XHU4ZTY3XHU4ZTY4XHU4ZTZhXHU4ZTZiXHU4ZTZlXHU4ZTcxXHU5MGI4XHU5MGIwXHU5MGNmXHU5MGM1XHU5MGJlXHU5MGQwXHU5MGM0XHU5MGM3XHU5MGQzXHU5MGU2XHU5MGUyXHU5MGRjXHU5MGQ3''@;'; put 'put ''XHU5MGRiXHU5MGViXHU5MGVmXHU5MGZlXHU5MTA0XHU5MTIyXHU5MTFlXHU5MTIzXHU5MTMxXHU5MTJmXHU5MTM5XHU5MTQzXHU5MTQ2XHU1MjBkXHU1OTQyXHU1MmEyXHU1MmFjXHU1MmFkXHU1MmJlXHU1NGZmXHU1MmQwXHU1MmQ2XHU1MmYwXHU1M2RmXHU3MWVlXHU3N2NkXHU1ZWY0XHU1''@;'; put 'put ''MWY1XHU1MWZjXHU5YjJmXHU1M2I2XHU1ZjAxXHU3NTVhXHU1ZGVmXHU1NzRjXHU1N2E5XHU1N2ExXHU1ODdlXHU1OGJjXHU1OGM1XHU1OGQxXHU1NzI5XHU1NzJjXHU1NzJhXHU1NzMzXHU1NzM5XHU1NzJlXHU1NzJmXHU1NzVjXHU1NzNiXHU1NzQyXHU1NzY5XHU1Nzg1XHU1NzZiXHU1Nzg2''@;'; put 'put ''XHU1NzdjXHU1NzdiXHU1NzY4XHU1NzZkXHU1Nzc2XHU1NzczXHU1N2FkXHU1N2E0XHU1NzhjXHU1N2IyXHU1N2NmXHU1N2E3XHU1N2I0XHU1NzkzXHU1N2EwXHU1N2Q1XHU1N2Q4XHU1N2RhXHU1N2Q5XHU1N2QyXHU1N2I4XHU1N2Y0XHU1N2VmXHU1N2Y4XHU1N2U0XHU1N2RkXHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIikscz0wO3MhPWNbMjE5XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMTldW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjE5XVtzXV09NTYwNjQrcyxoWzU2MDY0K3NdPWNbMjE5XVtzXSk7Zm9yKGNbMjIwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU4ZTczXHU4ZTc1XHU4ZTc3XHU4ZTc4XHU4ZTc5XHU4ZTdhXHU4ZTdiXHU4ZTdkXHU4ZTdlXHU4ZTgwXHU4ZTgyXHU4ZTgzXHU4ZTg0XHU4ZTg2XHU4ZTg4XHU4ZTg5XHU4ZThhXHU4ZThiXHU4ZThjXHU4ZThkXHU4ZThlXHU4ZTkxXHU4ZTkyXHU4ZTkzXHU4ZTk1XHU4''@;'; put 'put ''ZTk2XHU4ZTk3XHU4ZTk4XHU4ZTk5XHU4ZTlhXHU4ZTliXHU4ZTlkXHU4ZTlmXHU4ZWEwXHU4ZWExXHU4ZWEyXHU4ZWEzXHU4ZWE0XHU4ZWE1XHU4ZWE2XHU4ZWE3XHU4ZWE4XHU4ZWE5XHU4ZWFhXHU4ZWFkXHU4ZWFlXHU4ZWIwXHU4ZWIxXHU4ZWIzXHU4ZWI0XHU4ZWI1XHU4ZWI2XHU4ZWI3''@;'; put 'put ''XHU4ZWI4XHU4ZWI5XHU4ZWJiXHU4ZWJjXHU4ZWJkXHU4ZWJlXHU4ZWJmXHU4ZWMwXHU4ZWMxXHU4ZWMyXHVmZmZkXHU4ZWMzXHU4ZWM0XHU4ZWM1XHU4ZWM2XHU4ZWM3XHU4ZWM4XHU4ZWM5XHU4ZWNhXHU4ZWNiXHU4ZWNjXHU4ZWNkXHU4ZWNmXHU4ZWQwXHU4ZWQxXHU4ZWQyXHU4ZWQzXHU4''@;'; put 'put ''ZWQ0XHU4ZWQ1XHU4ZWQ2XHU4ZWQ3XHU4ZWQ4XHU4ZWQ5XHU4ZWRhXHU4ZWRiXHU4ZWRjXHU4ZWRkXHU4ZWRlXHU4ZWRmXHU4ZWUwXHU4ZWUxXHU4ZWUyXHU4ZWUzXHU4ZWU0XHU1ODBiXHU1ODBkXHU1N2ZkXHU1N2VkXHU1ODAwXHU1ODFlXHU1ODE5XHU1ODQ0XHU1ODIwXHU1ODY1XHU1ODZj''@;'; put 'put ''XHU1ODgxXHU1ODg5XHU1ODlhXHU1ODgwXHU5OWE4XHU5ZjE5XHU2MWZmXHU4Mjc5XHU4MjdkXHU4MjdmXHU4MjhmXHU4MjhhXHU4MmE4XHU4Mjg0XHU4MjhlXHU4MjkxXHU4Mjk3XHU4Mjk5XHU4MmFiXHU4MmI4XHU4MmJlXHU4MmIwXHU4MmM4XHU4MmNhXHU4MmUzXHU4Mjk4XHU4MmI3XHU4''@;'; put 'put ''MmFlXHU4MmNiXHU4MmNjXHU4MmMxXHU4MmE5XHU4MmI0XHU4MmExXHU4MmFhXHU4MjlmXHU4MmM0XHU4MmNlXHU4MmE0XHU4MmUxXHU4MzA5XHU4MmY3XHU4MmU0XHU4MzBmXHU4MzA3XHU4MmRjXHU4MmY0XHU4MmQyXHU4MmQ4XHU4MzBjXHU4MmZiXHU4MmQzXHU4MzExXHU4MzFhXHU4MzA2''@;'; put 'put ''XHU4MzE0XHU4MzE1XHU4MmUwXHU4MmQ1XHU4MzFjXHU4MzUxXHU4MzViXHU4MzVjXHU4MzA4XHU4MzkyXHU4MzNjXHU4MzM0XHU4MzMxXHU4MzliXHU4MzVlXHU4MzJmXHU4MzRmXHU4MzQ3XHU4MzQzXHU4MzVmXHU4MzQwXHU4MzE3XHU4MzYwXHU4MzJkXHU4MzNhXHU4MzMzXHU4MzY2XHU4''@;'; put 'put ''MzY1XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjIwXS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMjBdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjIwXVtzXV09NTYzMjArcyxoWzU2MzIwK3NdPWNbMjIwXVtzXSk7Zm9yKGNbMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZWU1XHU4ZWU2XHU4ZWU3XHU4ZWU4XHU4ZWU5XHU4ZWVhXHU4ZWViXHU4ZWVjXHU4ZWVkXHU4ZWVlXHU4ZWVmXHU4ZWYwXHU4ZWYxXHU4ZWYyXHU4ZWYzXHU4ZWY0XHU4ZWY1XHU4ZWY2XHU4ZWY3XHU4ZWY4XHU4ZWY5XHU4ZWZhXHU4ZWZiXHU4''@;'; put 'put ''ZWZjXHU4ZWZkXHU4ZWZlXHU4ZWZmXHU4ZjAwXHU4ZjAxXHU4ZjAyXHU4ZjAzXHU4ZjA0XHU4ZjA1XHU4ZjA2XHU4ZjA3XHU4ZjA4XHU4ZjA5XHU4ZjBhXHU4ZjBiXHU4ZjBjXHU4ZjBkXHU4ZjBlXHU4ZjBmXHU4ZjEwXHU4ZjExXHU4ZjEyXHU4ZjEzXHU4ZjE0XHU4ZjE1XHU4ZjE2XHU4ZjE3''@;'; put 'put ''XHU4ZjE4XHU4ZjE5XHU4ZjFhXHU4ZjFiXHU4ZjFjXHU4ZjFkXHU4ZjFlXHU4ZjFmXHU4ZjIwXHU4ZjIxXHU4ZjIyXHU4ZjIzXHVmZmZkXHU4ZjI0XHU4ZjI1XHU4ZjI2XHU4ZjI3XHU4ZjI4XHU4ZjI5XHU4ZjJhXHU4ZjJiXHU4ZjJjXHU4ZjJkXHU4ZjJlXHU4ZjJmXHU4ZjMwXHU4ZjMxXHU4''@;'; put 'put ''ZjMyXHU4ZjMzXHU4ZjM0XHU4ZjM1XHU4ZjM2XHU4ZjM3XHU4ZjM4XHU4ZjM5XHU4ZjNhXHU4ZjNiXHU4ZjNjXHU4ZjNkXHU4ZjNlXHU4ZjNmXHU4ZjQwXHU4ZjQxXHU4ZjQyXHU4ZjQzXHU4ZjQ0XHU4MzY4XHU4MzFiXHU4MzY5XHU4MzZjXHU4MzZhXHU4MzZkXHU4MzZlXHU4M2IwXHU4Mzc4''@;'; put 'put ''XHU4M2IzXHU4M2I0XHU4M2EwXHU4M2FhXHU4MzkzXHU4MzljXHU4Mzg1XHU4MzdjXHU4M2I2XHU4M2E5XHU4MzdkXHU4M2I4XHU4MzdiXHU4Mzk4XHU4MzllXHU4M2E4XHU4M2JhXHU4M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4M2Q4XHU1ODA3XHU4NDE4XHU4NDBiXHU4M2RkXHU4M2ZkXHU4''@;'; put 'put ''M2Q2XHU4NDFjXHU4NDM4XHU4NDExXHU4NDA2XHU4M2Q0XHU4M2RmXHU4NDBmXHU4NDAzXHU4M2Y4XHU4M2Y5XHU4M2VhXHU4M2M1XHU4M2MwXHU4NDI2XHU4M2YwXHU4M2UxXHU4NDVjXHU4NDUxXHU4NDVhXHU4NDU5XHU4NDczXHU4NDg3XHU4NDg4XHU4NDdhXHU4NDg5XHU4NDc4XHU4NDNj''@;'; put 'put ''XHU4NDQ2XHU4NDY5XHU4NDc2XHU4NDhjXHU4NDhlXHU4NDMxXHU4NDZkXHU4NGMxXHU4NGNkXHU4NGQwXHU4NGU2XHU4NGJkXHU4NGQzXHU4NGNhXHU4NGJmXHU4NGJhXHU4NGUwXHU4NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4NGU1XHU4NGUzXHU4NTBjXHU3NTBkXHU4NTM4XHU4NGYwXHU4''@;'; put 'put ''NTM5XHU4NTFmXHU4NTNhXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjIxXS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMjFdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjIxXVtzXV09NTY1NzYrcyxoWzU2NTc2K3NdPWNbMjIxXVtzXSk7Zm9yKGNbMjIyXT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjQ1XHU4ZjQ2XHU4ZjQ3XHU4ZjQ4XHU4ZjQ5XHU4ZjRhXHU4ZjRiXHU4ZjRjXHU4ZjRkXHU4ZjRlXHU4ZjRmXHU4ZjUwXHU4ZjUxXHU4ZjUyXHU4ZjUzXHU4ZjU0XHU4ZjU1XHU4ZjU2XHU4ZjU3XHU4ZjU4XHU4ZjU5XHU4''@;'; put 'put ''ZjVhXHU4ZjViXHU4ZjVjXHU4ZjVkXHU4ZjVlXHU4ZjVmXHU4ZjYwXHU4ZjYxXHU4ZjYyXHU4ZjYzXHU4ZjY0XHU4ZjY1XHU4ZjZhXHU4ZjgwXHU4ZjhjXHU4ZjkyXHU4ZjlkXHU4ZmEwXHU4ZmExXHU4ZmEyXHU4ZmE0XHU4ZmE1XHU4ZmE2XHU4ZmE3XHU4ZmFhXHU4ZmFjXHU4ZmFkXHU4ZmFl''@;'; put 'put ''XHU4ZmFmXHU4ZmIyXHU4ZmIzXHU4ZmI0XHU4ZmI1XHU4ZmI3XHU4ZmI4XHU4ZmJhXHU4ZmJiXHU4ZmJjXHU4ZmJmXHU4ZmMwXHU4ZmMzXHU4ZmM2XHVmZmZkXHU4ZmM5XHU4ZmNhXHU4ZmNiXHU4ZmNjXHU4ZmNkXHU4ZmNmXHU4ZmQyXHU4ZmQ2XHU4ZmQ3XHU4ZmRhXHU4ZmUwXHU4ZmUxXHU4''@;'; put 'put ''ZmUzXHU4ZmU3XHU4ZmVjXHU4ZmVmXHU4ZmYxXHU4ZmYyXHU4ZmY0XHU4ZmY1XHU4ZmY2XHU4ZmZhXHU4ZmZiXHU4ZmZjXHU4ZmZlXHU4ZmZmXHU5MDA3XHU5MDA4XHU5MDBjXHU5MDBlXHU5MDEzXHU5MDE1XHU5MDE4XHU4NTU2XHU4NTNiXHU4NGZmXHU4NGZjXHU4NTU5XHU4NTQ4XHU4NTY4''@;'; put 'put ''XHU4NTY0XHU4NTVlXHU4NTdhXHU3N2EyXHU4NTQzXHU4NTcyXHU4NTdiXHU4NWE0XHU4NWE4XHU4NTg3XHU4NThmXHU4NTc5XHU4NWFlXHU4NTljXHU4NTg1XHU4NWI5XHU4NWI3XHU4NWIwXHU4NWQzXHU4NWMxXHU4NWRjXHU4NWZmXHU4NjI3XHU4NjA1XHU4NjI5XHU4NjE2XHU4NjNjXHU1''@;'; put 'put ''ZWZlXHU1ZjA4XHU1OTNjXHU1OTQxXHU4MDM3XHU1OTU1XHU1OTVhXHU1OTU4XHU1MzBmXHU1YzIyXHU1YzI1XHU1YzJjXHU1YzM0XHU2MjRjXHU2MjZhXHU2MjlmXHU2MmJiXHU2MmNhXHU2MmRhXHU2MmQ3XHU2MmVlXHU2MzIyXHU2MmY2XHU2MzM5XHU2MzRiXHU2MzQzXHU2M2FkXHU2M2Y2''@;'; put 'put ''XHU2MzcxXHU2MzdhXHU2MzhlXHU2M2I0XHU2MzZkXHU2M2FjXHU2MzhhXHU2MzY5XHU2M2FlXHU2M2JjXHU2M2YyXHU2M2Y4XHU2M2UwXHU2M2ZmXHU2M2M0XHU2M2RlXHU2M2NlXHU2NDUyXHU2M2M2XHU2M2JlXHU2NDQ1XHU2NDQxXHU2NDBiXHU2NDFiXHU2NDIwXHU2NDBjXHU2NDI2XHU2''@;'; put 'put ''NDIxXHU2NDVlXHU2NDg0XHU2NDZkXHU2NDk2XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjIyXS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMjJdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjIyXVtzXV09NTY4MzIrcyxoWzU2ODMyK3NdPWNbMjIyXVtzXSk7Zm9yKGNbMjIzXT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDE5XHU5MDFjXHU5MDIzXHU5MDI0XHU5MDI1XHU5MDI3XHU5MDI4XHU5MDI5XHU5MDJhXHU5MDJiXHU5MDJjXHU5MDMwXHU5MDMxXHU5MDMyXHU5MDMzXHU5MDM0XHU5MDM3XHU5MDM5XHU5MDNhXHU5''@;'; put 'put ''MDNkXHU5MDNmXHU5MDQwXHU5MDQzXHU5MDQ1XHU5MDQ2XHU5MDQ4XHU5MDQ5XHU5MDRhXHU5MDRiXHU5MDRjXHU5MDRlXHU5MDU0XHU5MDU1XHU5MDU2XHU5MDU5XHU5MDVhXHU5MDVjXHU5MDVkXHU5MDVlXHU5MDVmXHU5MDYwXHU5MDYxXHU5MDY0XHU5MDY2XHU5MDY3XHU5MDY5XHU5MDZh''@;'; put 'put ''XHU5MDZiXHU5MDZjXHU5MDZmXHU5MDcwXHU5MDcxXHU5MDcyXHU5MDczXHU5MDc2XHU5MDc3XHU5MDc4XHU5MDc5XHU5MDdhXHU5MDdiXHU5MDdjXHU5MDdlXHU5MDgxXHVmZmZkXHU5MDg0XHU5MDg1XHU5MDg2XHU5MDg3XHU5MDg5XHU5MDhhXHU5MDhjXHU5MDhkXHU5MDhlXHU5MDhmXHU5''@;'; put 'put ''MDkwXHU5MDkyXHU5MDk0XHU5MDk2XHU5MDk4XHU5MDlhXHU5MDljXHU5MDllXHU5MDlmXHU5MGEwXHU5MGE0XHU5MGE1XHU5MGE3XHU5MGE4XHU5MGE5XHU5MGFiXHU5MGFkXHU5MGIyXHU5MGI3XHU5MGJjXHU5MGJkXHU5MGJmXHU5MGMwXHU2NDdhXHU2NGI3XHU2NGI4XHU2NDk5XHU2NGJh''@;'; put 'put ''XHU2NGMwXHU2NGQwXHU2NGQ3XHU2NGU0XHU2NGUyXHU2NTA5XHU2NTI1XHU2NTJlXHU1ZjBiXHU1ZmQyXHU3NTE5XHU1ZjExXHU1MzVmXHU1M2YxXHU1M2ZkXHU1M2U5XHU1M2U4XHU1M2ZiXHU1NDEyXHU1NDE2XHU1NDA2XHU1NDRiXHU1NDUyXHU1NDUzXHU1NDU0XHU1NDU2XHU1NDQzXHU1''@;'; put 'put ''NDIxXHU1NDU3XHU1NDU5XHU1NDIzXHU1NDMyXHU1NDgyXHU1NDk0XHU1NDc3XHU1NDcxXHU1NDY0XHU1NDlhXHU1NDliXHU1NDg0XHU1NDc2XHU1NDY2XHU1NDlkXHU1NGQwXHU1NGFkXHU1NGMyXHU1NGI0XHU1NGQyXHU1NGE3XHU1NGE2XHU1NGQzXHU1NGQ0XHU1NDcyXHU1NGEzXHU1NGQ1''@;'; put 'put ''XHU1NGJiXHU1NGJmXHU1NGNjXHU1NGQ5XHU1NGRhXHU1NGRjXHU1NGE5XHU1NGFhXHU1NGE0XHU1NGRkXHU1NGNmXHU1NGRlXHU1NTFiXHU1NGU3XHU1NTIwXHU1NGZkXHU1NTE0XHU1NGYzXHU1NTIyXHU1NTIzXHU1NTBmXHU1NTExXHU1NTI3XHU1NTJhXHU1NTY3XHU1NThmXHU1NWI1XHU1''@;'; put 'put ''NTQ5XHU1NTZkXHU1NTQxXHU1NTU1XHU1NTNmXHU1NTUwXHU1NTNjXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjIzXS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMjNdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjIzXVtzXV09NTcwODgrcyxoWzU3MDg4K3NdPWNbMjIzXVtzXSk7Zm9yKGNb''@;'; put 'put ''MjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MGMyXHU5MGMzXHU5MGM2XHU5MGM4XHU5MGM5XHU5MGNiXHU5MGNjXHU5MGNkXHU5MGQyXHU5MGQ0XHU5MGQ1XHU5MGQ2XHU5MGQ4XHU5MGQ5XHU5MGRhXHU5MGRlXHU5MGRmXHU5''@;'; put 'put ''MGUwXHU5MGUzXHU5MGU0XHU5MGU1XHU5MGU5XHU5MGVhXHU5MGVjXHU5MGVlXHU5MGYwXHU5MGYxXHU5MGYyXHU5MGYzXHU5MGY1XHU5MGY2XHU5MGY3XHU5MGY5XHU5MGZhXHU5MGZiXHU5MGZjXHU5MGZmXHU5MTAwXHU5MTAxXHU5MTAzXHU5MTA1XHU5MTA2XHU5MTA3XHU5MTA4XHU5MTA5''@;'; put 'put ''XHU5MTBhXHU5MTBiXHU5MTBjXHU5MTBkXHU5MTBlXHU5MTBmXHU5MTEwXHU5MTExXHU5MTEyXHU5MTEzXHU5MTE0XHU5MTE1XHU5MTE2XHU5MTE3XHU5MTE4XHU5MTFhXHU5MTFiXHU5MTFjXHVmZmZkXHU5MTFkXHU5MTFmXHU5MTIwXHU5MTIxXHU5MTI0XHU5MTI1XHU5MTI2XHU5MTI3XHU5''@;'; put 'put ''MTI4XHU5MTI5XHU5MTJhXHU5MTJiXHU5MTJjXHU5MTJkXHU5MTJlXHU5MTMwXHU5MTMyXHU5MTMzXHU5MTM0XHU5MTM1XHU5MTM2XHU5MTM3XHU5MTM4XHU5MTNhXHU5MTNiXHU5MTNjXHU5MTNkXHU5MTNlXHU5MTNmXHU5MTQwXHU5MTQxXHU5MTQyXHU5MTQ0XHU1NTM3XHU1NTU2XHU1NTc1''@;'; put 'put ''XHU1NTc2XHU1NTc3XHU1NTMzXHU1NTMwXHU1NTVjXHU1NThiXHU1NWQyXHU1NTgzXHU1NWIxXHU1NWI5XHU1NTg4XHU1NTgxXHU1NTlmXHU1NTdlXHU1NWQ2XHU1NTkxXHU1NTdiXHU1NWRmXHU1NWJkXHU1NWJlXHU1NTk0XHU1NTk5XHU1NWVhXHU1NWY3XHU1NWM5XHU1NjFmXHU1NWQxXHU1''@;'; put 'put ''NWViXHU1NWVjXHU1NWQ0XHU1NWU2XHU1NWRkXHU1NWM0XHU1NWVmXHU1NWU1XHU1NWYyXHU1NWYzXHU1NWNjXHU1NWNkXHU1NWU4XHU1NWY1XHU1NWU0XHU4Zjk0XHU1NjFlXHU1NjA4XHU1NjBjXHU1NjAxXHU1NjI0XHU1NjIzXHU1NWZlXHU1NjAwXHU1NjI3XHU1NjJkXHU1NjU4XHU1NjM5''@;'; put 'put ''XHU1NjU3XHU1NjJjXHU1NjRkXHU1NjYyXHU1NjU5XHU1NjVjXHU1NjRjXHU1NjU0XHU1Njg2XHU1NjY0XHU1NjcxXHU1NjZiXHU1NjdiXHU1NjdjXHU1Njg1XHU1NjkzXHU1NmFmXHU1NmQ0XHU1NmQ3XHU1NmRkXHU1NmUxXHU1NmY1XHU1NmViXHU1NmY5XHU1NmZmXHU1NzA0XHU1NzBhXHU1''@;'; put 'put ''NzA5XHU1NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0XHU1ZTExXHU1ZTMxXHU1ZTNiXHU1ZTNjXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjI0XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMjRdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjI0XVtzXV09NTczNDQrcyxoWzU3MzQ0K3NdPWNbMjI0''@;'; put 'put ''XVtzXSk7Zm9yKGNbMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MTQ1XHU5MTQ3XHU5MTQ4XHU5MTUxXHU5MTUzXHU5MTU0XHU5MTU1XHU5MTU2XHU5MTU4XHU5MTU5XHU5MTViXHU5MTVjXHU5MTVmXHU5MTYwXHU5MTY2XHU5''@;'; put 'put ''MTY3XHU5MTY4XHU5MTZiXHU5MTZkXHU5MTczXHU5MTdhXHU5MTdiXHU5MTdjXHU5MTgwXHU5MTgxXHU5MTgyXHU5MTgzXHU5MTg0XHU5MTg2XHU5MTg4XHU5MThhXHU5MThlXHU5MThmXHU5MTkzXHU5MTk0XHU5MTk1XHU5MTk2XHU5MTk3XHU5MTk4XHU5MTk5XHU5MTljXHU5MTlkXHU5MTll''@;'; put 'put ''XHU5MTlmXHU5MWEwXHU5MWExXHU5MWE0XHU5MWE1XHU5MWE2XHU5MWE3XHU5MWE4XHU5MWE5XHU5MWFiXHU5MWFjXHU5MWIwXHU5MWIxXHU5MWIyXHU5MWIzXHU5MWI2XHU5MWI3XHU5MWI4XHU5MWI5XHU5MWJiXHVmZmZkXHU5MWJjXHU5MWJkXHU5MWJlXHU5MWJmXHU5MWMwXHU5MWMxXHU5''@;'; put 'put ''MWMyXHU5MWMzXHU5MWM0XHU5MWM1XHU5MWM2XHU5MWM4XHU5MWNiXHU5MWQwXHU5MWQyXHU5MWQzXHU5MWQ0XHU5MWQ1XHU5MWQ2XHU5MWQ3XHU5MWQ4XHU5MWQ5XHU5MWRhXHU5MWRiXHU5MWRkXHU5MWRlXHU5MWRmXHU5MWUwXHU5MWUxXHU5MWUyXHU5MWUzXHU5MWU0XHU5MWU1XHU1ZTM3''@;'; put 'put ''XHU1ZTQ0XHU1ZTU0XHU1ZTViXHU1ZTVlXHU1ZTYxXHU1YzhjXHU1YzdhXHU1YzhkXHU1YzkwXHU1Yzk2XHU1Yzg4XHU1Yzk4XHU1Yzk5XHU1YzkxXHU1YzlhXHU1YzljXHU1Y2I1XHU1Y2EyXHU1Y2JkXHU1Y2FjXHU1Y2FiXHU1Y2IxXHU1Y2EzXHU1Y2MxXHU1Y2I3XHU1Y2M0XHU1Y2QyXHU1''@;'; put 'put ''Y2U0XHU1Y2NiXHU1Y2U1XHU1ZDAyXHU1ZDAzXHU1ZDI3XHU1ZDI2XHU1ZDJlXHU1ZDI0XHU1ZDFlXHU1ZDA2XHU1ZDFiXHU1ZDU4XHU1ZDNlXHU1ZDM0XHU1ZDNkXHU1ZDZjXHU1ZDViXHU1ZDZmXHU1ZDVkXHU1ZDZiXHU1ZDRiXHU1ZDRhXHU1ZDY5XHU1ZDc0XHU1ZDgyXHU1ZDk5XHU1ZDlk''@;'; put 'put ''XHU4YzczXHU1ZGI3XHU1ZGM1XHU1ZjczXHU1Zjc3XHU1ZjgyXHU1Zjg3XHU1Zjg5XHU1ZjhjXHU1Zjk1XHU1Zjk5XHU1ZjljXHU1ZmE4XHU1ZmFkXHU1ZmI1XHU1ZmJjXHU4ODYyXHU1ZjYxXHU3MmFkXHU3MmIwXHU3MmI0XHU3MmI3XHU3MmI4XHU3MmMzXHU3MmMxXHU3MmNlXHU3MmNkXHU3''@;'; put 'put ''MmQyXHU3MmU4XHU3MmVmXHU3MmU5XHU3MmYyXHU3MmY0XHU3MmY3XHU3MzAxXHU3MmYzXHU3MzAzXHU3MmZhXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjI1XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMjVdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjI1XVtzXV09NTc2MDArcyxoWzU3''@;'; put 'put ''NjAwK3NdPWNbMjI1XVtzXSk7Zm9yKGNbMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MWU2XHU5MWU3XHU5MWU4XHU5MWU5XHU5MWVhXHU5MWViXHU5MWVjXHU5MWVkXHU5MWVlXHU5MWVmXHU5MWYwXHU5MWYxXHU5MWYyXHU5''@;'; put 'put ''MWYzXHU5MWY0XHU5MWY1XHU5MWY2XHU5MWY3XHU5MWY4XHU5MWY5XHU5MWZhXHU5MWZiXHU5MWZjXHU5MWZkXHU5MWZlXHU5MWZmXHU5MjAwXHU5MjAxXHU5MjAyXHU5MjAzXHU5MjA0XHU5MjA1XHU5MjA2XHU5MjA3XHU5MjA4XHU5MjA5XHU5MjBhXHU5MjBiXHU5MjBjXHU5MjBkXHU5MjBl''@;'; put 'put ''XHU5MjBmXHU5MjEwXHU5MjExXHU5MjEyXHU5MjEzXHU5MjE0XHU5MjE1XHU5MjE2XHU5MjE3XHU5MjE4XHU5MjE5XHU5MjFhXHU5MjFiXHU5MjFjXHU5MjFkXHU5MjFlXHU5MjFmXHU5MjIwXHU5MjIxXHU5MjIyXHU5MjIzXHU5MjI0XHVmZmZkXHU5MjI1XHU5MjI2XHU5MjI3XHU5MjI4XHU5''@;'; put 'put ''MjI5XHU5MjJhXHU5MjJiXHU5MjJjXHU5MjJkXHU5MjJlXHU5MjJmXHU5MjMwXHU5MjMxXHU5MjMyXHU5MjMzXHU5MjM0XHU5MjM1XHU5MjM2XHU5MjM3XHU5MjM4XHU5MjM5XHU5MjNhXHU5MjNiXHU5MjNjXHU5MjNkXHU5MjNlXHU5MjNmXHU5MjQwXHU5MjQxXHU5MjQyXHU5MjQzXHU5MjQ0''@;'; put 'put ''XHU5MjQ1XHU3MmZiXHU3MzE3XHU3MzEzXHU3MzIxXHU3MzBhXHU3MzFlXHU3MzFkXHU3MzE1XHU3MzIyXHU3MzM5XHU3MzI1XHU3MzJjXHU3MzM4XHU3MzMxXHU3MzUwXHU3MzRkXHU3MzU3XHU3MzYwXHU3MzZjXHU3MzZmXHU3MzdlXHU4MjFiXHU1OTI1XHU5OGU3XHU1OTI0XHU1OTAyXHU5''@;'; put 'put ''OTYzXHU5OTY3XHU5OTY4XHU5OTY5XHU5OTZhXHU5OTZiXHU5OTZjXHU5OTc0XHU5OTc3XHU5OTdkXHU5OTgwXHU5OTg0XHU5OTg3XHU5OThhXHU5OThkXHU5OTkwXHU5OTkxXHU5OTkzXHU5OTk0XHU5OTk1XHU1ZTgwXHU1ZTkxXHU1ZThiXHU1ZTk2XHU1ZWE1XHU1ZWEwXHU1ZWI5XHU1ZWI1''@;'; put 'put ''XHU1ZWJlXHU1ZWIzXHU4ZDUzXHU1ZWQyXHU1ZWQxXHU1ZWRiXHU1ZWU4XHU1ZWVhXHU4MWJhXHU1ZmM0XHU1ZmM5XHU1ZmQ2XHU1ZmNmXHU2MDAzXHU1ZmVlXHU2MDA0XHU1ZmUxXHU1ZmU0XHU1ZmZlXHU2MDA1XHU2MDA2XHU1ZmVhXHU1ZmVkXHU1ZmY4XHU2MDE5XHU2MDM1XHU2MDI2XHU2''@;'; put 'put ''MDFiXHU2MDBmXHU2MDBkXHU2MDI5XHU2MDJiXHU2MDBhXHU2MDNmXHU2MDIxXHU2MDc4XHU2MDc5XHU2MDdiXHU2MDdhXHU2MDQyXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjI2XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMjZdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjI2XVtzXV09''@;'; put 'put ''NTc4NTYrcyxoWzU3ODU2K3NdPWNbMjI2XVtzXSk7Zm9yKGNbMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MjQ2XHU5MjQ3XHU5MjQ4XHU5MjQ5XHU5MjRhXHU5MjRiXHU5MjRjXHU5MjRkXHU5MjRlXHU5MjRmXHU5MjUwXHU5''@;'; put 'put ''MjUxXHU5MjUyXHU5MjUzXHU5MjU0XHU5MjU1XHU5MjU2XHU5MjU3XHU5MjU4XHU5MjU5XHU5MjVhXHU5MjViXHU5MjVjXHU5MjVkXHU5MjVlXHU5MjVmXHU5MjYwXHU5MjYxXHU5MjYyXHU5MjYzXHU5MjY0XHU5MjY1XHU5MjY2XHU5MjY3XHU5MjY4XHU5MjY5XHU5MjZhXHU5MjZiXHU5MjZj''@;'; put 'put ''XHU5MjZkXHU5MjZlXHU5MjZmXHU5MjcwXHU5MjcxXHU5MjcyXHU5MjczXHU5Mjc1XHU5Mjc2XHU5Mjc3XHU5Mjc4XHU5Mjc5XHU5MjdhXHU5MjdiXHU5MjdjXHU5MjdkXHU5MjdlXHU5MjdmXHU5MjgwXHU5MjgxXHU5MjgyXHU5MjgzXHU5Mjg0XHU5Mjg1XHVmZmZkXHU5Mjg2XHU5Mjg3XHU5''@;'; put 'put ''Mjg4XHU5Mjg5XHU5MjhhXHU5MjhiXHU5MjhjXHU5MjhkXHU5MjhmXHU5MjkwXHU5MjkxXHU5MjkyXHU5MjkzXHU5Mjk0XHU5Mjk1XHU5Mjk2XHU5Mjk3XHU5Mjk4XHU5Mjk5XHU5MjlhXHU5MjliXHU5MjljXHU5MjlkXHU5MjllXHU5MjlmXHU5MmEwXHU5MmExXHU5MmEyXHU5MmEzXHU5MmE0''@;'; put 'put ''XHU5MmE1XHU5MmE2XHU5MmE3XHU2MDZhXHU2MDdkXHU2MDk2XHU2MDlhXHU2MGFkXHU2MDlkXHU2MDgzXHU2MDkyXHU2MDhjXHU2MDliXHU2MGVjXHU2MGJiXHU2MGIxXHU2MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2MGI0XHU2MTIwXHU2MTI2XHU2MTE1XHU2MTIzXHU2MGY0XHU2MTAwXHU2''@;'; put 'put ''MTBlXHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFjXHU2MTk0XHU2MWE3XHU2MWI3XHU2MWQ0XHU2MWY1XHU1ZmRkXHU5NmIzXHU5NWU5XHU5NWViXHU5NWYxXHU5NWYzXHU5NWY1XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAzXHU5NjA0XHU5NjA2XHU5NjA4XHU5NjBhXHU5NjBiXHU5NjBjXHU5NjBk''@;'; put 'put ''XHU5NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5NjE3XHU5NjE5XHU5NjFhXHU0ZTJjXHU3MjNmXHU2MjE1XHU2YzM1XHU2YzU0XHU2YzVjXHU2YzRhXHU2Y2EzXHU2Yzg1XHU2YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2YzY5XHU2Yzc0XHU2Yzc2XHU2Yzg2XHU2Y2E5XHU2Y2QwXHU2Y2Q0XHU2''@;'; put 'put ''Y2FkXHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3XHU2Y2IyXHU2Y2UwXHU2Y2Q2XHU2Y2ZhXHU2Y2ViXHU2Y2VlXHU2Y2IxXHU2Y2QzXHU2Y2VmXHU2Y2ZlXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjI3XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMjddW3NdLmNoYXJDb2RlQXQoMCkmJih5''@;'; put 'put ''W2NbMjI3XVtzXV09NTgxMTIrcyxoWzU4MTEyK3NdPWNbMjI3XVtzXSk7Zm9yKGNbMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MmE4XHU5MmE5XHU5MmFhXHU5MmFiXHU5MmFjXHU5MmFkXHU5MmFmXHU5MmIwXHU5MmIxXHU5''@;'; put 'put ''MmIyXHU5MmIzXHU5MmI0XHU5MmI1XHU5MmI2XHU5MmI3XHU5MmI4XHU5MmI5XHU5MmJhXHU5MmJiXHU5MmJjXHU5MmJkXHU5MmJlXHU5MmJmXHU5MmMwXHU5MmMxXHU5MmMyXHU5MmMzXHU5MmM0XHU5MmM1XHU5MmM2XHU5MmM3XHU5MmM5XHU5MmNhXHU5MmNiXHU5MmNjXHU5MmNkXHU5MmNl''@;'; put 'put ''XHU5MmNmXHU5MmQwXHU5MmQxXHU5MmQyXHU5MmQzXHU5MmQ0XHU5MmQ1XHU5MmQ2XHU5MmQ3XHU5MmQ4XHU5MmQ5XHU5MmRhXHU5MmRiXHU5MmRjXHU5MmRkXHU5MmRlXHU5MmRmXHU5MmUwXHU5MmUxXHU5MmUyXHU5MmUzXHU5MmU0XHU5MmU1XHU5MmU2XHU5MmU3XHU5MmU4XHVmZmZkXHU5''@;'; put 'put ''MmU5XHU5MmVhXHU5MmViXHU5MmVjXHU5MmVkXHU5MmVlXHU5MmVmXHU5MmYwXHU5MmYxXHU5MmYyXHU5MmYzXHU5MmY0XHU5MmY1XHU5MmY2XHU5MmY3XHU5MmY4XHU5MmY5XHU5MmZhXHU5MmZiXHU5MmZjXHU5MmZkXHU5MmZlXHU5MmZmXHU5MzAwXHU5MzAxXHU5MzAyXHU5MzAzXHU5MzA0''@;'; put 'put ''XHU5MzA1XHU5MzA2XHU5MzA3XHU5MzA4XHU5MzA5XHU2ZDM5XHU2ZDI3XHU2ZDBjXHU2ZDQzXHU2ZDQ4XHU2ZDA3XHU2ZDA0XHU2ZDE5XHU2ZDBlXHU2ZDJiXHU2ZDRkXHU2ZDJlXHU2ZDM1XHU2ZDFhXHU2ZDRmXHU2ZDUyXHU2ZDU0XHU2ZDMzXHU2ZDkxXHU2ZDZmXHU2ZDllXHU2ZGEwXHU2''@;'; put 'put ''ZDVlXHU2ZDkzXHU2ZDk0XHU2ZDVjXHU2ZDYwXHU2ZDdjXHU2ZDYzXHU2ZTFhXHU2ZGM3XHU2ZGM1XHU2ZGRlXHU2ZTBlXHU2ZGJmXHU2ZGUwXHU2ZTExXHU2ZGU2XHU2ZGRkXHU2ZGQ5XHU2ZTE2XHU2ZGFiXHU2ZTBjXHU2ZGFlXHU2ZTJiXHU2ZTZlXHU2ZTRlXHU2ZTZiXHU2ZWIyXHU2ZTVm''@;'; put 'put ''XHU2ZTg2XHU2ZTUzXHU2ZTU0XHU2ZTMyXHU2ZTI1XHU2ZTQ0XHU2ZWRmXHU2ZWIxXHU2ZTk4XHU2ZWUwXHU2ZjJkXHU2ZWUyXHU2ZWE1XHU2ZWE3XHU2ZWJkXHU2ZWJiXHU2ZWI3XHU2ZWQ3XHU2ZWI0XHU2ZWNmXHU2ZThmXHU2ZWMyXHU2ZTlmXHU2ZjYyXHU2ZjQ2XHU2ZjQ3XHU2ZjI0XHU2''@;'; put 'put ''ZjE1XHU2ZWY5XHU2ZjJmXHU2ZjM2XHU2ZjRiXHU2Zjc0XHU2ZjJhXHU2ZjA5XHU2ZjI5XHU2Zjg5XHU2ZjhkXHU2ZjhjXHU2Zjc4XHU2ZjcyXHU2ZjdjXHU2ZjdhXHU2ZmQxXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjI4XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMjhdW3NdLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJih5W2NbMjI4XVtzXV09NTgzNjgrcyxoWzU4MzY4K3NdPWNbMjI4XVtzXSk7Zm9yKGNbMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzBhXHU5MzBiXHU5MzBjXHU5MzBkXHU5MzBlXHU5MzBmXHU5MzEwXHU5''@;'; put 'put ''MzExXHU5MzEyXHU5MzEzXHU5MzE0XHU5MzE1XHU5MzE2XHU5MzE3XHU5MzE4XHU5MzE5XHU5MzFhXHU5MzFiXHU5MzFjXHU5MzFkXHU5MzFlXHU5MzFmXHU5MzIwXHU5MzIxXHU5MzIyXHU5MzIzXHU5MzI0XHU5MzI1XHU5MzI2XHU5MzI3XHU5MzI4XHU5MzI5XHU5MzJhXHU5MzJiXHU5MzJj''@;'; put 'put ''XHU5MzJkXHU5MzJlXHU5MzJmXHU5MzMwXHU5MzMxXHU5MzMyXHU5MzMzXHU5MzM0XHU5MzM1XHU5MzM2XHU5MzM3XHU5MzM4XHU5MzM5XHU5MzNhXHU5MzNiXHU5MzNjXHU5MzNkXHU5MzNmXHU5MzQwXHU5MzQxXHU5MzQyXHU5MzQzXHU5MzQ0XHU5MzQ1XHU5MzQ2XHU5MzQ3XHU5MzQ4XHU5''@;'; put 'put ''MzQ5XHVmZmZkXHU5MzRhXHU5MzRiXHU5MzRjXHU5MzRkXHU5MzRlXHU5MzRmXHU5MzUwXHU5MzUxXHU5MzUyXHU5MzUzXHU5MzU0XHU5MzU1XHU5MzU2XHU5MzU3XHU5MzU4XHU5MzU5XHU5MzVhXHU5MzViXHU5MzVjXHU5MzVkXHU5MzVlXHU5MzVmXHU5MzYwXHU5MzYxXHU5MzYyXHU5MzYz''@;'; put 'put ''XHU5MzY0XHU5MzY1XHU5MzY2XHU5MzY3XHU5MzY4XHU5MzY5XHU5MzZiXHU2ZmM5XHU2ZmE3XHU2ZmI5XHU2ZmI2XHU2ZmMyXHU2ZmUxXHU2ZmVlXHU2ZmRlXHU2ZmUwXHU2ZmVmXHU3MDFhXHU3MDIzXHU3MDFiXHU3MDM5XHU3MDM1XHU3MDRmXHU3MDVlXHU1YjgwXHU1Yjg0XHU1Yjk1XHU1''@;'; put 'put ''YjkzXHU1YmE1XHU1YmI4XHU3NTJmXHU5YTllXHU2NDM0XHU1YmU0XHU1YmVlXHU4OTMwXHU1YmYwXHU4ZTQ3XHU4YjA3XHU4ZmI2XHU4ZmQzXHU4ZmQ1XHU4ZmU1XHU4ZmVlXHU4ZmU0XHU4ZmU5XHU4ZmU2XHU4ZmYzXHU4ZmU4XHU5MDA1XHU5MDA0XHU5MDBiXHU5MDI2XHU5MDExXHU5MDBk''@;'; put 'put ''XHU5MDE2XHU5MDIxXHU5MDM1XHU5MDM2XHU5MDJkXHU5MDJmXHU5MDQ0XHU5MDUxXHU5MDUyXHU5MDUwXHU5MDY4XHU5MDU4XHU5MDYyXHU5MDViXHU2NmI5XHU5MDc0XHU5MDdkXHU5MDgyXHU5MDg4XHU5MDgzXHU5MDhiXHU1ZjUwXHU1ZjU3XHU1ZjU2XHU1ZjU4XHU1YzNiXHU1NGFiXHU1''@;'; put 'put ''YzUwXHU1YzU5XHU1YjcxXHU1YzYzXHU1YzY2XHU3ZmJjXHU1ZjJhXHU1ZjI5XHU1ZjJkXHU4Mjc0XHU1ZjNjXHU5YjNiXHU1YzZlXHU1OTgxXHU1OTgzXHU1OThkXHU1OWE5XHU1OWFhXHU1OWEzXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjI5XS5sZW5ndGg7KytzKTY1NTMzIT09Y1sy''@;'; put 'put ''MjldW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjI5XVtzXV09NTg2MjQrcyxoWzU4NjI0K3NdPWNbMjI5XVtzXSk7Zm9yKGNbMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzZjXHU5MzZkXHU5MzZlXHU5MzZmXHU5MzcwXHU5''@;'; put 'put ''MzcxXHU5MzcyXHU5MzczXHU5Mzc0XHU5Mzc1XHU5Mzc2XHU5Mzc3XHU5Mzc4XHU5Mzc5XHU5MzdhXHU5MzdiXHU5MzdjXHU5MzdkXHU5MzdlXHU5MzdmXHU5MzgwXHU5MzgxXHU5MzgyXHU5MzgzXHU5Mzg0XHU5Mzg1XHU5Mzg2XHU5Mzg3XHU5Mzg4XHU5Mzg5XHU5MzhhXHU5MzhiXHU5Mzhj''@;'; put 'put ''XHU5MzhkXHU5MzhlXHU5MzkwXHU5MzkxXHU5MzkyXHU5MzkzXHU5Mzk0XHU5Mzk1XHU5Mzk2XHU5Mzk3XHU5Mzk4XHU5Mzk5XHU5MzlhXHU5MzliXHU5MzljXHU5MzlkXHU5MzllXHU5MzlmXHU5M2EwXHU5M2ExXHU5M2EyXHU5M2EzXHU5M2E0XHU5M2E1XHU5M2E2XHU5M2E3XHU5M2E4XHU5''@;'; put 'put ''M2E5XHU5M2FhXHU5M2FiXHVmZmZkXHU5M2FjXHU5M2FkXHU5M2FlXHU5M2FmXHU5M2IwXHU5M2IxXHU5M2IyXHU5M2IzXHU5M2I0XHU5M2I1XHU5M2I2XHU5M2I3XHU5M2I4XHU5M2I5XHU5M2JhXHU5M2JiXHU5M2JjXHU5M2JkXHU5M2JlXHU5M2JmXHU5M2MwXHU5M2MxXHU5M2MyXHU5M2Mz''@;'; put 'put ''XHU5M2M0XHU5M2M1XHU5M2M2XHU5M2M3XHU5M2M4XHU5M2M5XHU5M2NiXHU5M2NjXHU5M2NkXHU1OTk3XHU1OWNhXHU1OWFiXHU1OTllXHU1OWE0XHU1OWQyXHU1OWIyXHU1OWFmXHU1OWQ3XHU1OWJlXHU1YTA1XHU1YTA2XHU1OWRkXHU1YTA4XHU1OWUzXHU1OWQ4XHU1OWY5XHU1YTBjXHU1''@;'; put 'put ''YTA5XHU1YTMyXHU1YTM0XHU1YTExXHU1YTIzXHU1YTEzXHU1YTQwXHU1YTY3XHU1YTRhXHU1YTU1XHU1YTNjXHU1YTYyXHU1YTc1XHU4MGVjXHU1YWFhXHU1YTliXHU1YTc3XHU1YTdhXHU1YWJlXHU1YWViXHU1YWIyXHU1YWQyXHU1YWQ0XHU1YWI4XHU1YWUwXHU1YWUzXHU1YWYxXHU1YWQ2''@;'; put 'put ''XHU1YWU2XHU1YWQ4XHU1YWRjXHU1YjA5XHU1YjE3XHU1YjE2XHU1YjMyXHU1YjM3XHU1YjQwXHU1YzE1XHU1YzFjXHU1YjVhXHU1YjY1XHU1YjczXHU1YjUxXHU1YjUzXHU1YjYyXHU5YTc1XHU5YTc3XHU5YTc4XHU5YTdhXHU5YTdmXHU5YTdkXHU5YTgwXHU5YTgxXHU5YTg1XHU5YTg4XHU5''@;'; put 'put ''YThhXHU5YTkwXHU5YTkyXHU5YTkzXHU5YTk2XHU5YTk4XHU5YTliXHU5YTljXHU5YTlkXHU5YTlmXHU5YWEwXHU5YWEyXHU5YWEzXHU5YWE1XHU5YWE3XHU3ZTlmXHU3ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4XHU3ZWE5XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjMwXS5sZW5ndGg7Kytz''@;'; put 'put ''KTY1NTMzIT09Y1syMzBdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjMwXVtzXV09NTg4ODArcyxoWzU4ODgwK3NdPWNbMjMwXVtzXSk7Zm9yKGNbMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5M2NlXHU5M2NmXHU5M2QwXHU5''@;'; put 'put ''M2QxXHU5M2QyXHU5M2QzXHU5M2Q0XHU5M2Q1XHU5M2Q3XHU5M2Q4XHU5M2Q5XHU5M2RhXHU5M2RiXHU5M2RjXHU5M2RkXHU5M2RlXHU5M2RmXHU5M2UwXHU5M2UxXHU5M2UyXHU5M2UzXHU5M2U0XHU5M2U1XHU5M2U2XHU5M2U3XHU5M2U4XHU5M2U5XHU5M2VhXHU5M2ViXHU5M2VjXHU5M2Vk''@;'; put 'put ''XHU5M2VlXHU5M2VmXHU5M2YwXHU5M2YxXHU5M2YyXHU5M2YzXHU5M2Y0XHU5M2Y1XHU5M2Y2XHU5M2Y3XHU5M2Y4XHU5M2Y5XHU5M2ZhXHU5M2ZiXHU5M2ZjXHU5M2ZkXHU5M2ZlXHU5M2ZmXHU5NDAwXHU5NDAxXHU5NDAyXHU5NDAzXHU5NDA0XHU5NDA1XHU5NDA2XHU5NDA3XHU5NDA4XHU5''@;'; put 'put ''NDA5XHU5NDBhXHU5NDBiXHU5NDBjXHU5NDBkXHVmZmZkXHU5NDBlXHU5NDBmXHU5NDEwXHU5NDExXHU5NDEyXHU5NDEzXHU5NDE0XHU5NDE1XHU5NDE2XHU5NDE3XHU5NDE4XHU5NDE5XHU5NDFhXHU5NDFiXHU5NDFjXHU5NDFkXHU5NDFlXHU5NDFmXHU5NDIwXHU5NDIxXHU5NDIyXHU5NDIz''@;'; put 'put ''XHU5NDI0XHU5NDI1XHU5NDI2XHU5NDI3XHU5NDI4XHU5NDI5XHU5NDJhXHU5NDJiXHU5NDJjXHU5NDJkXHU5NDJlXHU3ZWFkXHU3ZWIwXHU3ZWJlXHU3ZWMwXHU3ZWMxXHU3ZWMyXHU3ZWM5XHU3ZWNiXHU3ZWNjXHU3ZWQwXHU3ZWQ0XHU3ZWQ3XHU3ZWRiXHU3ZWUwXHU3ZWUxXHU3ZWU4XHU3''@;'; put 'put ''ZWViXHU3ZWVlXHU3ZWVmXHU3ZWYxXHU3ZWYyXHU3ZjBkXHU3ZWY2XHU3ZWZhXHU3ZWZiXHU3ZWZlXHU3ZjAxXHU3ZjAyXHU3ZjAzXHU3ZjA3XHU3ZjA4XHU3ZjBiXHU3ZjBjXHU3ZjBmXHU3ZjExXHU3ZjEyXHU3ZjE3XHU3ZjE5XHU3ZjFjXHU3ZjFiXHU3ZjFmXHU3ZjIxXHU3ZjIyXHU3ZjIz''@;'; put 'put ''XHU3ZjI0XHU3ZjI1XHU3ZjI2XHU3ZjI3XHU3ZjJhXHU3ZjJiXHU3ZjJjXHU3ZjJkXHU3ZjJmXHU3ZjMwXHU3ZjMxXHU3ZjMyXHU3ZjMzXHU3ZjM1XHU1ZTdhXHU3NTdmXHU1ZGRiXHU3NTNlXHU5MDk1XHU3MzhlXHU3MzkxXHU3M2FlXHU3M2EyXHU3MzlmXHU3M2NmXHU3M2MyXHU3M2QxXHU3''@;'; put 'put ''M2I3XHU3M2IzXHU3M2MwXHU3M2M5XHU3M2M4XHU3M2U1XHU3M2Q5XHU5ODdjXHU3NDBhXHU3M2U5XHU3M2U3XHU3M2RlXHU3M2JhXHU3M2YyXHU3NDBmXHU3NDJhXHU3NDViXHU3NDI2XHU3NDI1XHU3NDI4XHU3NDMwXHU3NDJlXHU3NDJjXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjMx''@;'; put 'put ''XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMzFdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjMxXVtzXV09NTkxMzYrcyxoWzU5MTM2K3NdPWNbMjMxXVtzXSk7Zm9yKGNbMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NDJmXHU5''@;'; put 'put ''NDMwXHU5NDMxXHU5NDMyXHU5NDMzXHU5NDM0XHU5NDM1XHU5NDM2XHU5NDM3XHU5NDM4XHU5NDM5XHU5NDNhXHU5NDNiXHU5NDNjXHU5NDNkXHU5NDNmXHU5NDQwXHU5NDQxXHU5NDQyXHU5NDQzXHU5NDQ0XHU5NDQ1XHU5NDQ2XHU5NDQ3XHU5NDQ4XHU5NDQ5XHU5NDRhXHU5NDRiXHU5NDRj''@;'; put 'put ''XHU5NDRkXHU5NDRlXHU5NDRmXHU5NDUwXHU5NDUxXHU5NDUyXHU5NDUzXHU5NDU0XHU5NDU1XHU5NDU2XHU5NDU3XHU5NDU4XHU5NDU5XHU5NDVhXHU5NDViXHU5NDVjXHU5NDVkXHU5NDVlXHU5NDVmXHU5NDYwXHU5NDYxXHU5NDYyXHU5NDYzXHU5NDY0XHU5NDY1XHU5NDY2XHU5NDY3XHU5''@;'; put 'put ''NDY4XHU5NDY5XHU5NDZhXHU5NDZjXHU5NDZkXHU5NDZlXHU5NDZmXHVmZmZkXHU5NDcwXHU5NDcxXHU5NDcyXHU5NDczXHU5NDc0XHU5NDc1XHU5NDc2XHU5NDc3XHU5NDc4XHU5NDc5XHU5NDdhXHU5NDdiXHU5NDdjXHU5NDdkXHU5NDdlXHU5NDdmXHU5NDgwXHU5NDgxXHU5NDgyXHU5NDgz''@;'; put 'put ''XHU5NDg0XHU5NDkxXHU5NDk2XHU5NDk4XHU5NGM3XHU5NGNmXHU5NGQzXHU5NGQ0XHU5NGRhXHU5NGU2XHU5NGZiXHU5NTFjXHU5NTIwXHU3NDFiXHU3NDFhXHU3NDQxXHU3NDVjXHU3NDU3XHU3NDU1XHU3NDU5XHU3NDc3XHU3NDZkXHU3NDdlXHU3NDljXHU3NDhlXHU3NDgwXHU3NDgxXHU3''@;'; put 'put ''NDg3XHU3NDhiXHU3NDllXHU3NGE4XHU3NGE5XHU3NDkwXHU3NGE3XHU3NGQyXHU3NGJhXHU5N2VhXHU5N2ViXHU5N2VjXHU2NzRjXHU2NzUzXHU2NzVlXHU2NzQ4XHU2NzY5XHU2N2E1XHU2Nzg3XHU2NzZhXHU2NzczXHU2Nzk4XHU2N2E3XHU2Nzc1XHU2N2E4XHU2NzllXHU2N2FkXHU2Nzhi''@;'; put 'put ''XHU2Nzc3XHU2NzdjXHU2N2YwXHU2ODA5XHU2N2Q4XHU2ODBhXHU2N2U5XHU2N2IwXHU2ODBjXHU2N2Q5XHU2N2I1XHU2N2RhXHU2N2IzXHU2N2RkXHU2ODAwXHU2N2MzXHU2N2I4XHU2N2UyXHU2ODBlXHU2N2MxXHU2N2ZkXHU2ODMyXHU2ODMzXHU2ODYwXHU2ODYxXHU2ODRlXHU2ODYyXHU2''@;'; put 'put ''ODQ0XHU2ODY0XHU2ODgzXHU2ODFkXHU2ODU1XHU2ODY2XHU2ODQxXHU2ODY3XHU2ODQwXHU2ODNlXHU2ODRhXHU2ODQ5XHU2ODI5XHU2OGI1XHU2ODhmXHU2ODc0XHU2ODc3XHU2ODkzXHU2ODZiXHU2OGMyXHU2OTZlXHU2OGZjXHU2OTFmXHU2OTIwXHU2OGY5XHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''cz0wO3MhPWNbMjMyXS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMzJdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjMyXVtzXV09NTkzOTIrcyxoWzU5MzkyK3NdPWNbMjMyXVtzXSk7Zm9yKGNbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU5NTI3XHU5NTMzXHU5NTNkXHU5NTQzXHU5NTQ4XHU5NTRiXHU5NTU1XHU5NTVhXHU5NTYwXHU5NTZlXHU5NTc0XHU5NTc1XHU5NTc3XHU5NTc4XHU5NTc5XHU5NTdhXHU5NTdiXHU5NTdjXHU5NTdkXHU5NTdlXHU5NTgwXHU5NTgxXHU5NTgyXHU5NTgzXHU5NTg0XHU5NTg1XHU5NTg2''@;'; put 'put ''XHU5NTg3XHU5NTg4XHU5NTg5XHU5NThhXHU5NThiXHU5NThjXHU5NThkXHU5NThlXHU5NThmXHU5NTkwXHU5NTkxXHU5NTkyXHU5NTkzXHU5NTk0XHU5NTk1XHU5NTk2XHU5NTk3XHU5NTk4XHU5NTk5XHU5NTlhXHU5NTliXHU5NTljXHU5NTlkXHU5NTllXHU5NTlmXHU5NWEwXHU5NWExXHU5''@;'; put 'put ''NWEyXHU5NWEzXHU5NWE0XHU5NWE1XHU5NWE2XHU5NWE3XHU5NWE4XHU5NWE5XHU5NWFhXHVmZmZkXHU5NWFiXHU5NWFjXHU5NWFkXHU5NWFlXHU5NWFmXHU5NWIwXHU5NWIxXHU5NWIyXHU5NWIzXHU5NWI0XHU5NWI1XHU5NWI2XHU5NWI3XHU5NWI4XHU5NWI5XHU5NWJhXHU5NWJiXHU5NWJj''@;'; put 'put ''XHU5NWJkXHU5NWJlXHU5NWJmXHU5NWMwXHU5NWMxXHU5NWMyXHU5NWMzXHU5NWM0XHU5NWM1XHU5NWM2XHU5NWM3XHU5NWM4XHU5NWM5XHU5NWNhXHU5NWNiXHU2OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2OTU3XHU2OGUzXHU2OTEwXHU2OTcxXHU2OTM5XHU2OTYwXHU2OTQyXHU2OTVkXHU2''@;'; put 'put ''OTg0XHU2OTZiXHU2OTgwXHU2OTk4XHU2OTc4XHU2OTM0XHU2OWNjXHU2OTg3XHU2OTg4XHU2OWNlXHU2OTg5XHU2OTY2XHU2OTYzXHU2OTc5XHU2OTliXHU2OWE3XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0XHU2OWIxXHU2OWMxXHU2OWNhXHU2OWRmXHU2OTk1XHU2OWUwXHU2OThkXHU2OWZm''@;'; put 'put ''XHU2YTJmXHU2OWVkXHU2YTE3XHU2YTE4XHU2YTY1XHU2OWYyXHU2YTQ0XHU2YTNlXHU2YWEwXHU2YTUwXHU2YTViXHU2YTM1XHU2YThlXHU2YTc5XHU2YTNkXHU2YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2YTkwXHU2YWE5XHU2YTk3XHU2YWFiXHU3MzM3XHU3MzUyXHU2YjgxXHU2YjgyXHU2''@;'; put 'put ''Yjg3XHU2Yjg0XHU2YjkyXHU2YjkzXHU2YjhkXHU2YjlhXHU2YjliXHU2YmExXHU2YmFhXHU4ZjZiXHU4ZjZkXHU4ZjcxXHU4ZjcyXHU4ZjczXHU4Zjc1XHU4Zjc2XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4ZjdhXHU4ZjdjXHU4ZjdlXHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4Zjg3XHU4ZjhiXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIikscz0wO3MhPWNbMjMzXS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMzNdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjMzXVtzXV09NTk2NDgrcyxoWzU5NjQ4K3NdPWNbMjMzXVtzXSk7Zm9yKGNbMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU5NWNjXHU5NWNkXHU5NWNlXHU5NWNmXHU5NWQwXHU5NWQxXHU5NWQyXHU5NWQzXHU5NWQ0XHU5NWQ1XHU5NWQ2XHU5NWQ3XHU5NWQ4XHU5NWQ5XHU5NWRhXHU5NWRiXHU5NWRjXHU5NWRkXHU5NWRlXHU5NWRmXHU5NWUwXHU5NWUxXHU5NWUyXHU5NWUzXHU5NWU0''@;'; put 'put ''XHU5NWU1XHU5NWU2XHU5NWU3XHU5NWVjXHU5NWZmXHU5NjA3XHU5NjEzXHU5NjE4XHU5NjFiXHU5NjFlXHU5NjIwXHU5NjIzXHU5NjI0XHU5NjI1XHU5NjI2XHU5NjI3XHU5NjI4XHU5NjI5XHU5NjJiXHU5NjJjXHU5NjJkXHU5NjJmXHU5NjMwXHU5NjM3XHU5NjM4XHU5NjM5XHU5NjNhXHU5''@;'; put 'put ''NjNlXHU5NjQxXHU5NjQzXHU5NjRhXHU5NjRlXHU5NjRmXHU5NjUxXHU5NjUyXHU5NjUzXHU5NjU2XHU5NjU3XHVmZmZkXHU5NjU4XHU5NjU5XHU5NjVhXHU5NjVjXHU5NjVkXHU5NjVlXHU5NjYwXHU5NjYzXHU5NjY1XHU5NjY2XHU5NjZiXHU5NjZkXHU5NjZlXHU5NjZmXHU5NjcwXHU5Njcx''@;'; put 'put ''XHU5NjczXHU5Njc4XHU5Njc5XHU5NjdhXHU5NjdiXHU5NjdjXHU5NjdkXHU5NjdlXHU5NjdmXHU5NjgwXHU5NjgxXHU5NjgyXHU5NjgzXHU5Njg0XHU5Njg3XHU5Njg5XHU5NjhhXHU4ZjhkXHU4ZjhlXHU4ZjhmXHU4Zjk4XHU4ZjlhXHU4ZWNlXHU2MjBiXHU2MjE3XHU2MjFiXHU2MjFmXHU2''@;'; put 'put ''MjIyXHU2MjIxXHU2MjI1XHU2MjI0XHU2MjJjXHU4MWU3XHU3NGVmXHU3NGY0XHU3NGZmXHU3NTBmXHU3NTExXHU3NTEzXHU2NTM0XHU2NWVlXHU2NWVmXHU2NWYwXHU2NjBhXHU2NjE5XHU2NzcyXHU2NjAzXHU2NjE1XHU2NjAwXHU3MDg1XHU2NmY3XHU2NjFkXHU2NjM0XHU2NjMxXHU2NjM2''@;'; put 'put ''XHU2NjM1XHU4MDA2XHU2NjVmXHU2NjU0XHU2NjQxXHU2NjRmXHU2NjU2XHU2NjYxXHU2NjU3XHU2Njc3XHU2Njg0XHU2NjhjXHU2NmE3XHU2NjlkXHU2NmJlXHU2NmRiXHU2NmRjXHU2NmU2XHU2NmU5XHU4ZDMyXHU4ZDMzXHU4ZDM2XHU4ZDNiXHU4ZDNkXHU4ZDQwXHU4ZDQ1XHU4ZDQ2XHU4''@;'; put 'put ''ZDQ4XHU4ZDQ5XHU4ZDQ3XHU4ZDRkXHU4ZDU1XHU4ZDU5XHU4OWM3XHU4OWNhXHU4OWNiXHU4OWNjXHU4OWNlXHU4OWNmXHU4OWQwXHU4OWQxXHU3MjZlXHU3MjlmXHU3MjVkXHU3MjY2XHU3MjZmXHU3MjdlXHU3MjdmXHU3Mjg0XHU3MjhiXHU3MjhkXHU3MjhmXHU3MjkyXHU2MzA4XHU2MzMy''@;'; put 'put ''XHU2M2IwXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjM0XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMzRdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjM0XVtzXV09NTk5MDQrcyxoWzU5OTA0K3NdPWNbMjM0XVtzXSk7Zm9yKGNbMjM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjhjXHU5NjhlXHU5NjkxXHU5NjkyXHU5NjkzXHU5Njk1XHU5Njk2XHU5NjlhXHU5NjliXHU5NjlkXHU5NjllXHU5NjlmXHU5NmEwXHU5NmExXHU5NmEyXHU5NmEzXHU5NmE0XHU5NmE1XHU5NmE2XHU5NmE4XHU5NmE5XHU5NmFhXHU5NmFi''@;'; put 'put ''XHU5NmFjXHU5NmFkXHU5NmFlXHU5NmFmXHU5NmIxXHU5NmIyXHU5NmI0XHU5NmI1XHU5NmI3XHU5NmI4XHU5NmJhXHU5NmJiXHU5NmJmXHU5NmMyXHU5NmMzXHU5NmM4XHU5NmNhXHU5NmNiXHU5NmQwXHU5NmQxXHU5NmQzXHU5NmQ0XHU5NmQ2XHU5NmQ3XHU5NmQ4XHU5NmQ5XHU5NmRhXHU5''@;'; put 'put ''NmRiXHU5NmRjXHU5NmRkXHU5NmRlXHU5NmRmXHU5NmUxXHU5NmUyXHU5NmUzXHU5NmU0XHU5NmU1XHU5NmU2XHU5NmU3XHU5NmViXHVmZmZkXHU5NmVjXHU5NmVkXHU5NmVlXHU5NmYwXHU5NmYxXHU5NmYyXHU5NmY0XHU5NmY1XHU5NmY4XHU5NmZhXHU5NmZiXHU5NmZjXHU5NmZkXHU5NmZm''@;'; put 'put ''XHU5NzAyXHU5NzAzXHU5NzA1XHU5NzBhXHU5NzBiXHU5NzBjXHU5NzEwXHU5NzExXHU5NzEyXHU5NzE0XHU5NzE1XHU5NzE3XHU5NzE4XHU5NzE5XHU5NzFhXHU5NzFiXHU5NzFkXHU5NzFmXHU5NzIwXHU2NDNmXHU2NGQ4XHU4MDA0XHU2YmVhXHU2YmYzXHU2YmZkXHU2YmY1XHU2YmY5XHU2''@;'; put 'put ''YzA1XHU2YzA3XHU2YzA2XHU2YzBkXHU2YzE1XHU2YzE4XHU2YzE5XHU2YzFhXHU2YzIxXHU2YzI5XHU2YzI0XHU2YzJhXHU2YzMyXHU2NTM1XHU2NTU1XHU2NTZiXHU3MjRkXHU3MjUyXHU3MjU2XHU3MjMwXHU4NjYyXHU1MjE2XHU4MDlmXHU4MDljXHU4MDkzXHU4MGJjXHU2NzBhXHU4MGJk''@;'; put 'put ''XHU4MGIxXHU4MGFiXHU4MGFkXHU4MGI0XHU4MGI3XHU4MGU3XHU4MGU4XHU4MGU5XHU4MGVhXHU4MGRiXHU4MGMyXHU4MGM0XHU4MGQ5XHU4MGNkXHU4MGQ3XHU2NzEwXHU4MGRkXHU4MGViXHU4MGYxXHU4MGY0XHU4MGVkXHU4MTBkXHU4MTBlXHU4MGYyXHU4MGZjXHU2NzE1XHU4MTEyXHU4''@;'; put 'put ''YzVhXHU4MTM2XHU4MTFlXHU4MTJjXHU4MTE4XHU4MTMyXHU4MTQ4XHU4MTRjXHU4MTUzXHU4MTc0XHU4MTU5XHU4MTVhXHU4MTcxXHU4MTYwXHU4MTY5XHU4MTdjXHU4MTdkXHU4MTZkXHU4MTY3XHU1ODRkXHU1YWI1XHU4MTg4XHU4MTgyXHU4MTkxXHU2ZWQ1XHU4MWEzXHU4MWFhXHU4MWNj''@;'; put 'put ''XHU2NzI2XHU4MWNhXHU4MWJiXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjM1XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMzVdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjM1XVtzXV09NjAxNjArcyxoWzYwMTYwK3NdPWNbMjM1XVtzXSk7Zm9yKGNbMjM2XT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzIxXHU5NzIyXHU5NzIzXHU5NzI0XHU5NzI1XHU5NzI2XHU5NzI3XHU5NzI4XHU5NzI5XHU5NzJiXHU5NzJjXHU5NzJlXHU5NzJmXHU5NzMxXHU5NzMzXHU5NzM0XHU5NzM1XHU5NzM2XHU5NzM3XHU5NzNhXHU5NzNi''@;'; put 'put ''XHU5NzNjXHU5NzNkXHU5NzNmXHU5NzQwXHU5NzQxXHU5NzQyXHU5NzQzXHU5NzQ0XHU5NzQ1XHU5NzQ2XHU5NzQ3XHU5NzQ4XHU5NzQ5XHU5NzRhXHU5NzRiXHU5NzRjXHU5NzRkXHU5NzRlXHU5NzRmXHU5NzUwXHU5NzUxXHU5NzU0XHU5NzU1XHU5NzU3XHU5NzU4XHU5NzVhXHU5NzVjXHU5''@;'; put 'put ''NzVkXHU5NzVmXHU5NzYzXHU5NzY0XHU5NzY2XHU5NzY3XHU5NzY4XHU5NzZhXHU5NzZiXHU5NzZjXHU5NzZkXHU5NzZlXHU5NzZmXHU5NzcwXHU5NzcxXHVmZmZkXHU5NzcyXHU5Nzc1XHU5Nzc3XHU5Nzc4XHU5Nzc5XHU5NzdhXHU5NzdiXHU5NzdkXHU5NzdlXHU5NzdmXHU5NzgwXHU5Nzgx''@;'; put 'put ''XHU5NzgyXHU5NzgzXHU5Nzg0XHU5Nzg2XHU5Nzg3XHU5Nzg4XHU5Nzg5XHU5NzhhXHU5NzhjXHU5NzhlXHU5NzhmXHU5NzkwXHU5NzkzXHU5Nzk1XHU5Nzk2XHU5Nzk3XHU5Nzk5XHU5NzlhXHU5NzliXHU5NzljXHU5NzlkXHU4MWMxXHU4MWE2XHU2YjI0XHU2YjM3XHU2YjM5XHU2YjQzXHU2''@;'; put 'put ''YjQ2XHU2YjU5XHU5OGQxXHU5OGQyXHU5OGQzXHU5OGQ1XHU5OGQ5XHU5OGRhXHU2YmIzXHU1ZjQwXHU2YmMyXHU4OWYzXHU2NTkwXHU5ZjUxXHU2NTkzXHU2NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2NWNjXHU2NWNlXHU2NWQyXHU2NWQ2XHU3MDgwXHU3MDljXHU3MDk2XHU3MDlkXHU3MGJi''@;'; put 'put ''XHU3MGMwXHU3MGI3XHU3MGFiXHU3MGIxXHU3MGU4XHU3MGNhXHU3MTEwXHU3MTEzXHU3MTE2XHU3MTJmXHU3MTMxXHU3MTczXHU3MTVjXHU3MTY4XHU3MTQ1XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdhXHU3MTk4XHU3MWIzXHU3MWI1XHU3MWE4XHU3MWEwXHU3MWUwXHU3MWQ0XHU3MWU3XHU3''@;'; put 'put ''MWY5XHU3MjFkXHU3MjI4XHU3MDZjXHU3MTE4XHU3MTY2XHU3MWI5XHU2MjNlXHU2MjNkXHU2MjQzXHU2MjQ4XHU2MjQ5XHU3OTNiXHU3OTQwXHU3OTQ2XHU3OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3OTVhXHU3OTYyXHU3OTU3XHU3OTYwXHU3OTZmXHU3OTY3XHU3OTdhXHU3OTg1XHU3OThh''@;'; put 'put ''XHU3OTlhXHU3OWE3XHU3OWIzXHU1ZmQxXHU1ZmQwXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjM2XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMzZdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjM2XVtzXV09NjA0MTYrcyxoWzYwNDE2K3NdPWNbMjM2XVtzXSk7Zm9yKGNbMjM3XT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzllXHU5NzlmXHU5N2ExXHU5N2EyXHU5N2E0XHU5N2E1XHU5N2E2XHU5N2E3XHU5N2E4XHU5N2E5XHU5N2FhXHU5N2FjXHU5N2FlXHU5N2IwXHU5N2IxXHU5N2IzXHU5N2I1XHU5N2I2XHU5N2I3''@;'; put 'put ''XHU5N2I4XHU5N2I5XHU5N2JhXHU5N2JiXHU5N2JjXHU5N2JkXHU5N2JlXHU5N2JmXHU5N2MwXHU5N2MxXHU5N2MyXHU5N2MzXHU5N2M0XHU5N2M1XHU5N2M2XHU5N2M3XHU5N2M4XHU5N2M5XHU5N2NhXHU5N2NiXHU5N2NjXHU5N2NkXHU5N2NlXHU5N2NmXHU5N2QwXHU5N2QxXHU5N2QyXHU5''@;'; put 'put ''N2QzXHU5N2Q0XHU5N2Q1XHU5N2Q2XHU5N2Q3XHU5N2Q4XHU5N2Q5XHU5N2RhXHU5N2RiXHU5N2RjXHU5N2RkXHU5N2RlXHU5N2RmXHU5N2UwXHU5N2UxXHU5N2UyXHU5N2UzXHVmZmZkXHU5N2U0XHU5N2U1XHU5N2U4XHU5N2VlXHU5N2VmXHU5N2YwXHU5N2YxXHU5N2YyXHU5N2Y0XHU5N2Y3''@;'; put 'put ''XHU5N2Y4XHU5N2Y5XHU5N2ZhXHU5N2ZiXHU5N2ZjXHU5N2ZkXHU5N2ZlXHU5N2ZmXHU5ODAwXHU5ODAxXHU5ODAyXHU5ODAzXHU5ODA0XHU5ODA1XHU5ODA2XHU5ODA3XHU5ODA4XHU5ODA5XHU5ODBhXHU5ODBiXHU5ODBjXHU5ODBkXHU5ODBlXHU2MDNjXHU2MDVkXHU2MDVhXHU2MDY3XHU2''@;'; put 'put ''MDQxXHU2MDU5XHU2MDYzXHU2MGFiXHU2MTA2XHU2MTBkXHU2MTVkXHU2MWE5XHU2MTlkXHU2MWNiXHU2MWQxXHU2MjA2XHU4MDgwXHU4MDdmXHU2YzkzXHU2Y2Y2XHU2ZGZjXHU3N2Y2XHU3N2Y4XHU3ODAwXHU3ODA5XHU3ODE3XHU3ODE4XHU3ODExXHU2NWFiXHU3ODJkXHU3ODFjXHU3ODFk''@;'; put 'put ''XHU3ODM5XHU3ODNhXHU3ODNiXHU3ODFmXHU3ODNjXHU3ODI1XHU3ODJjXHU3ODIzXHU3ODI5XHU3ODRlXHU3ODZkXHU3ODU2XHU3ODU3XHU3ODI2XHU3ODUwXHU3ODQ3XHU3ODRjXHU3ODZhXHU3ODliXHU3ODkzXHU3ODlhXHU3ODg3XHU3ODljXHU3OGExXHU3OGEzXHU3OGIyXHU3OGI5XHU3''@;'; put 'put ''OGE1XHU3OGQ0XHU3OGQ5XHU3OGM5XHU3OGVjXHU3OGYyXHU3OTA1XHU3OGY0XHU3OTEzXHU3OTI0XHU3OTFlXHU3OTM0XHU5ZjliXHU5ZWY5XHU5ZWZiXHU5ZWZjXHU3NmYxXHU3NzA0XHU3NzBkXHU3NmY5XHU3NzA3XHU3NzA4XHU3NzFhXHU3NzIyXHU3NzE5XHU3NzJkXHU3NzI2XHU3NzM1''@;'; put 'put ''XHU3NzM4XHU3NzUwXHU3NzUxXHU3NzQ3XHU3NzQzXHU3NzVhXHU3NzY4XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjM3XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMzddW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjM3XVtzXV09NjA2NzIrcyxoWzYwNjcyK3NdPWNbMjM3XVtzXSk7Zm9y''@;'; put 'put ''KGNbMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODBmXHU5ODEwXHU5ODExXHU5ODEyXHU5ODEzXHU5ODE0XHU5ODE1XHU5ODE2XHU5ODE3XHU5ODE4XHU5ODE5XHU5ODFhXHU5ODFiXHU5ODFjXHU5ODFkXHU5ODFlXHU5ODFm''@;'; put 'put ''XHU5ODIwXHU5ODIxXHU5ODIyXHU5ODIzXHU5ODI0XHU5ODI1XHU5ODI2XHU5ODI3XHU5ODI4XHU5ODI5XHU5ODJhXHU5ODJiXHU5ODJjXHU5ODJkXHU5ODJlXHU5ODJmXHU5ODMwXHU5ODMxXHU5ODMyXHU5ODMzXHU5ODM0XHU5ODM1XHU5ODM2XHU5ODM3XHU5ODM4XHU5ODM5XHU5ODNhXHU5''@;'; put 'put ''ODNiXHU5ODNjXHU5ODNkXHU5ODNlXHU5ODNmXHU5ODQwXHU5ODQxXHU5ODQyXHU5ODQzXHU5ODQ0XHU5ODQ1XHU5ODQ2XHU5ODQ3XHU5ODQ4XHU5ODQ5XHU5ODRhXHU5ODRiXHU5ODRjXHU5ODRkXHVmZmZkXHU5ODRlXHU5ODRmXHU5ODUwXHU5ODUxXHU5ODUyXHU5ODUzXHU5ODU0XHU5ODU1''@;'; put 'put ''XHU5ODU2XHU5ODU3XHU5ODU4XHU5ODU5XHU5ODVhXHU5ODViXHU5ODVjXHU5ODVkXHU5ODVlXHU5ODVmXHU5ODYwXHU5ODYxXHU5ODYyXHU5ODYzXHU5ODY0XHU5ODY1XHU5ODY2XHU5ODY3XHU5ODY4XHU5ODY5XHU5ODZhXHU5ODZiXHU5ODZjXHU5ODZkXHU5ODZlXHU3NzYyXHU3NzY1XHU3''@;'; put 'put ''NzdmXHU3NzhkXHU3NzdkXHU3NzgwXHU3NzhjXHU3NzkxXHU3NzlmXHU3N2EwXHU3N2IwXHU3N2I1XHU3N2JkXHU3NTNhXHU3NTQwXHU3NTRlXHU3NTRiXHU3NTQ4XHU3NTViXHU3NTcyXHU3NTc5XHU3NTgzXHU3ZjU4XHU3ZjYxXHU3ZjVmXHU4YTQ4XHU3ZjY4XHU3Zjc0XHU3ZjcxXHU3Zjc5''@;'; put 'put ''XHU3ZjgxXHU3ZjdlXHU3NmNkXHU3NmU1XHU4ODMyXHU5NDg1XHU5NDg2XHU5NDg3XHU5NDhiXHU5NDhhXHU5NDhjXHU5NDhkXHU5NDhmXHU5NDkwXHU5NDk0XHU5NDk3XHU5NDk1XHU5NDlhXHU5NDliXHU5NDljXHU5NGEzXHU5NGE0XHU5NGFiXHU5NGFhXHU5NGFkXHU5NGFjXHU5NGFmXHU5''@;'; put 'put ''NGIwXHU5NGIyXHU5NGI0XHU5NGI2XHU5NGI3XHU5NGI4XHU5NGI5XHU5NGJhXHU5NGJjXHU5NGJkXHU5NGJmXHU5NGM0XHU5NGM4XHU5NGM5XHU5NGNhXHU5NGNiXHU5NGNjXHU5NGNkXHU5NGNlXHU5NGQwXHU5NGQxXHU5NGQyXHU5NGQ1XHU5NGQ2XHU5NGQ3XHU5NGQ5XHU5NGQ4XHU5NGRi''@;'; put 'put ''XHU5NGRlXHU5NGRmXHU5NGUwXHU5NGUyXHU5NGU0XHU5NGU1XHU5NGU3XHU5NGU4XHU5NGVhXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjM4XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMzhdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjM4XVtzXV09NjA5MjgrcyxoWzYwOTI4K3NdPWNb''@;'; put 'put ''MjM4XVtzXSk7Zm9yKGNbMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODZmXHU5ODcwXHU5ODcxXHU5ODcyXHU5ODczXHU5ODc0XHU5ODhiXHU5ODhlXHU5ODkyXHU5ODk1XHU5ODk5XHU5OGEzXHU5OGE4XHU5OGE5XHU5OGFh''@;'; put 'put ''XHU5OGFiXHU5OGFjXHU5OGFkXHU5OGFlXHU5OGFmXHU5OGIwXHU5OGIxXHU5OGIyXHU5OGIzXHU5OGI0XHU5OGI1XHU5OGI2XHU5OGI3XHU5OGI4XHU5OGI5XHU5OGJhXHU5OGJiXHU5OGJjXHU5OGJkXHU5OGJlXHU5OGJmXHU5OGMwXHU5OGMxXHU5OGMyXHU5OGMzXHU5OGM0XHU5OGM1XHU5''@;'; put 'put ''OGM2XHU5OGM3XHU5OGM4XHU5OGM5XHU5OGNhXHU5OGNiXHU5OGNjXHU5OGNkXHU5OGNmXHU5OGQwXHU5OGQ0XHU5OGQ2XHU5OGQ3XHU5OGRiXHU5OGRjXHU5OGRkXHU5OGUwXHU5OGUxXHU5OGUyXHU5OGUzXHU5OGU0XHVmZmZkXHU5OGU1XHU5OGU2XHU5OGU5XHU5OGVhXHU5OGViXHU5OGVj''@;'; put 'put ''XHU5OGVkXHU5OGVlXHU5OGVmXHU5OGYwXHU5OGYxXHU5OGYyXHU5OGYzXHU5OGY0XHU5OGY1XHU5OGY2XHU5OGY3XHU5OGY4XHU5OGY5XHU5OGZhXHU5OGZiXHU5OGZjXHU5OGZkXHU5OGZlXHU5OGZmXHU5OTAwXHU5OTAxXHU5OTAyXHU5OTAzXHU5OTA0XHU5OTA1XHU5OTA2XHU5OTA3XHU5''@;'; put 'put ''NGU5XHU5NGViXHU5NGVlXHU5NGVmXHU5NGYzXHU5NGY0XHU5NGY1XHU5NGY3XHU5NGY5XHU5NGZjXHU5NGZkXHU5NGZmXHU5NTAzXHU5NTAyXHU5NTA2XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBkXHU5NTBlXHU5NTBmXHU5NTEyXHU5NTEzXHU5NTE0XHU5NTE1XHU5NTE2XHU5NTE4XHU5NTFi''@;'; put 'put ''XHU5NTFkXHU5NTFlXHU5NTFmXHU5NTIyXHU5NTJhXHU5NTJiXHU5NTI5XHU5NTJjXHU5NTMxXHU5NTMyXHU5NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5NTNjXHU5NTNlXHU5NTNmXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRjXHU5NTRlXHU5NTRmXHU5NTUyXHU5''@;'; put 'put ''NTUzXHU5NTU0XHU5NTU2XHU5NTU3XHU5NTU4XHU5NTU5XHU5NTViXHU5NTVlXHU5NTVmXHU5NTVkXHU5NTYxXHU5NTYyXHU5NTY0XHU5NTY1XHU5NTY2XHU5NTY3XHU5NTY4XHU5NTY5XHU5NTZhXHU5NTZiXHU5NTZjXHU5NTZmXHU5NTcxXHU5NTcyXHU5NTczXHU5NTNhXHU3N2U3XHU3N2Vj''@;'; put 'put ''XHU5NmM5XHU3OWQ1XHU3OWVkXHU3OWUzXHU3OWViXHU3YTA2XHU1ZDQ3XHU3YTAzXHU3YTAyXHU3YTFlXHU3YTE0XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjM5XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syMzldW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjM5XVtzXV09NjExODQrcyxo''@;'; put 'put ''WzYxMTg0K3NdPWNbMjM5XVtzXSk7Zm9yKGNbMjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OTA4XHU5OTA5XHU5OTBhXHU5OTBiXHU5OTBjXHU5OTBlXHU5OTBmXHU5OTExXHU5OTEyXHU5OTEzXHU5OTE0XHU5OTE1XHU5OTE2''@;'; put 'put ''XHU5OTE3XHU5OTE4XHU5OTE5XHU5OTFhXHU5OTFiXHU5OTFjXHU5OTFkXHU5OTFlXHU5OTFmXHU5OTIwXHU5OTIxXHU5OTIyXHU5OTIzXHU5OTI0XHU5OTI1XHU5OTI2XHU5OTI3XHU5OTI4XHU5OTI5XHU5OTJhXHU5OTJiXHU5OTJjXHU5OTJkXHU5OTJmXHU5OTMwXHU5OTMxXHU5OTMyXHU5''@;'; put 'put ''OTMzXHU5OTM0XHU5OTM1XHU5OTM2XHU5OTM3XHU5OTM4XHU5OTM5XHU5OTNhXHU5OTNiXHU5OTNjXHU5OTNkXHU5OTNlXHU5OTNmXHU5OTQwXHU5OTQxXHU5OTQyXHU5OTQzXHU5OTQ0XHU5OTQ1XHU5OTQ2XHU5OTQ3XHU5OTQ4XHU5OTQ5XHVmZmZkXHU5OTRhXHU5OTRiXHU5OTRjXHU5OTRk''@;'; put 'put ''XHU5OTRlXHU5OTRmXHU5OTUwXHU5OTUxXHU5OTUyXHU5OTUzXHU5OTU2XHU5OTU3XHU5OTU4XHU5OTU5XHU5OTVhXHU5OTViXHU5OTVjXHU5OTVkXHU5OTVlXHU5OTVmXHU5OTYwXHU5OTYxXHU5OTYyXHU5OTY0XHU5OTY2XHU5OTczXHU5OTc4XHU5OTc5XHU5OTdiXHU5OTdlXHU5OTgyXHU5''@;'; put 'put ''OTgzXHU5OTg5XHU3YTM5XHU3YTM3XHU3YTUxXHU5ZWNmXHU5OWE1XHU3YTcwXHU3Njg4XHU3NjhlXHU3NjkzXHU3Njk5XHU3NmE0XHU3NGRlXHU3NGUwXHU3NTJjXHU5ZTIwXHU5ZTIyXHU5ZTI4XHU5ZTI5XHU5ZTJhXHU5ZTJiXHU5ZTJjXHU5ZTMyXHU5ZTMxXHU5ZTM2XHU5ZTM4XHU5ZTM3''@;'; put 'put ''XHU5ZTM5XHU5ZTNhXHU5ZTNlXHU5ZTQxXHU5ZTQyXHU5ZTQ0XHU5ZTQ2XHU5ZTQ3XHU5ZTQ4XHU5ZTQ5XHU5ZTRiXHU5ZTRjXHU5ZTRlXHU5ZTUxXHU5ZTU1XHU5ZTU3XHU5ZTVhXHU5ZTViXHU5ZTVjXHU5ZTVlXHU5ZTYzXHU5ZTY2XHU5ZTY3XHU5ZTY4XHU5ZTY5XHU5ZTZhXHU5ZTZiXHU5''@;'; put 'put ''ZTZjXHU5ZTcxXHU5ZTZkXHU5ZTczXHU3NTkyXHU3NTk0XHU3NTk2XHU3NWEwXHU3NTlkXHU3NWFjXHU3NWEzXHU3NWIzXHU3NWI0XHU3NWI4XHU3NWM0XHU3NWIxXHU3NWIwXHU3NWMzXHU3NWMyXHU3NWQ2XHU3NWNkXHU3NWUzXHU3NWU4XHU3NWU2XHU3NWU0XHU3NWViXHU3NWU3XHU3NjAz''@;'; put 'put ''XHU3NWYxXHU3NWZjXHU3NWZmXHU3NjEwXHU3NjAwXHU3NjA1XHU3NjBjXHU3NjE3XHU3NjBhXHU3NjI1XHU3NjE4XHU3NjE1XHU3NjE5XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjQwXS5sZW5ndGg7KytzKTY1NTMzIT09Y1syNDBdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjQwXVtz''@;'; put 'put ''XV09NjE0NDArcyxoWzYxNDQwK3NdPWNbMjQwXVtzXSk7Zm9yKGNbMjQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OThjXHU5OThlXHU5OTlhXHU5OTliXHU5OTljXHU5OTlkXHU5OTllXHU5OTlmXHU5OWEwXHU5OWExXHU5OWEy''@;'; put 'put ''XHU5OWEzXHU5OWE0XHU5OWE2XHU5OWE3XHU5OWE5XHU5OWFhXHU5OWFiXHU5OWFjXHU5OWFkXHU5OWFlXHU5OWFmXHU5OWIwXHU5OWIxXHU5OWIyXHU5OWIzXHU5OWI0XHU5OWI1XHU5OWI2XHU5OWI3XHU5OWI4XHU5OWI5XHU5OWJhXHU5OWJiXHU5OWJjXHU5OWJkXHU5OWJlXHU5OWJmXHU5''@;'; put 'put ''OWMwXHU5OWMxXHU5OWMyXHU5OWMzXHU5OWM0XHU5OWM1XHU5OWM2XHU5OWM3XHU5OWM4XHU5OWM5XHU5OWNhXHU5OWNiXHU5OWNjXHU5OWNkXHU5OWNlXHU5OWNmXHU5OWQwXHU5OWQxXHU5OWQyXHU5OWQzXHU5OWQ0XHU5OWQ1XHU5OWQ2XHU5OWQ3XHU5OWQ4XHVmZmZkXHU5OWQ5XHU5OWRh''@;'; put 'put ''XHU5OWRiXHU5OWRjXHU5OWRkXHU5OWRlXHU5OWRmXHU5OWUwXHU5OWUxXHU5OWUyXHU5OWUzXHU5OWU0XHU5OWU1XHU5OWU2XHU5OWU3XHU5OWU4XHU5OWU5XHU5OWVhXHU5OWViXHU5OWVjXHU5OWVkXHU5OWVlXHU5OWVmXHU5OWYwXHU5OWYxXHU5OWYyXHU5OWYzXHU5OWY0XHU5OWY1XHU5''@;'; put 'put ''OWY2XHU5OWY3XHU5OWY4XHU5OWY5XHU3NjFiXHU3NjNjXHU3NjIyXHU3NjIwXHU3NjQwXHU3NjJkXHU3NjMwXHU3NjNmXHU3NjM1XHU3NjQzXHU3NjNlXHU3NjMzXHU3NjRkXHU3NjVlXHU3NjU0XHU3NjVjXHU3NjU2XHU3NjZiXHU3NjZmXHU3ZmNhXHU3YWU2XHU3YTc4XHU3YTc5XHU3YTgw''@;'; put 'put ''XHU3YTg2XHU3YTg4XHU3YTk1XHU3YWE2XHU3YWEwXHU3YWFjXHU3YWE4XHU3YWFkXHU3YWIzXHU4ODY0XHU4ODY5XHU4ODcyXHU4ODdkXHU4ODdmXHU4ODgyXHU4OGEyXHU4OGM2XHU4OGI3XHU4OGJjXHU4OGM5XHU4OGUyXHU4OGNlXHU4OGUzXHU4OGU1XHU4OGYxXHU4OTFhXHU4OGZjXHU4''@;'; put 'put ''OGU4XHU4OGZlXHU4OGYwXHU4OTIxXHU4OTE5XHU4OTEzXHU4OTFiXHU4OTBhXHU4OTM0XHU4OTJiXHU4OTM2XHU4OTQxXHU4OTY2XHU4OTdiXHU3NThiXHU4MGU1XHU3NmIyXHU3NmI0XHU3N2RjXHU4MDEyXHU4MDE0XHU4MDE2XHU4MDFjXHU4MDIwXHU4MDIyXHU4MDI1XHU4MDI2XHU4MDI3''@;'; put 'put ''XHU4MDI5XHU4MDI4XHU4MDMxXHU4MDBiXHU4MDM1XHU4MDQzXHU4MDQ2XHU4MDRkXHU4MDUyXHU4MDY5XHU4MDcxXHU4OTgzXHU5ODc4XHU5ODgwXHU5ODgzXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjQxXS5sZW5ndGg7KytzKTY1NTMzIT09Y1syNDFdW3NdLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''Jih5W2NbMjQxXVtzXV09NjE2OTYrcyxoWzYxNjk2K3NdPWNbMjQxXVtzXSk7Zm9yKGNbMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OWZhXHU5OWZiXHU5OWZjXHU5OWZkXHU5OWZlXHU5OWZmXHU5YTAwXHU5YTAxXHU5YTAy''@;'; put 'put ''XHU5YTAzXHU5YTA0XHU5YTA1XHU5YTA2XHU5YTA3XHU5YTA4XHU5YTA5XHU5YTBhXHU5YTBiXHU5YTBjXHU5YTBkXHU5YTBlXHU5YTBmXHU5YTEwXHU5YTExXHU5YTEyXHU5YTEzXHU5YTE0XHU5YTE1XHU5YTE2XHU5YTE3XHU5YTE4XHU5YTE5XHU5YTFhXHU5YTFiXHU5YTFjXHU5YTFkXHU5''@;'; put 'put ''YTFlXHU5YTFmXHU5YTIwXHU5YTIxXHU5YTIyXHU5YTIzXHU5YTI0XHU5YTI1XHU5YTI2XHU5YTI3XHU5YTI4XHU5YTI5XHU5YTJhXHU5YTJiXHU5YTJjXHU5YTJkXHU5YTJlXHU5YTJmXHU5YTMwXHU5YTMxXHU5YTMyXHU5YTMzXHU5YTM0XHU5YTM1XHU5YTM2XHU5YTM3XHU5YTM4XHVmZmZk''@;'; put 'put ''XHU5YTM5XHU5YTNhXHU5YTNiXHU5YTNjXHU5YTNkXHU5YTNlXHU5YTNmXHU5YTQwXHU5YTQxXHU5YTQyXHU5YTQzXHU5YTQ0XHU5YTQ1XHU5YTQ2XHU5YTQ3XHU5YTQ4XHU5YTQ5XHU5YTRhXHU5YTRiXHU5YTRjXHU5YTRkXHU5YTRlXHU5YTRmXHU5YTUwXHU5YTUxXHU5YTUyXHU5YTUzXHU5''@;'; put 'put ''YTU0XHU5YTU1XHU5YTU2XHU5YTU3XHU5YTU4XHU5YTU5XHU5ODg5XHU5ODhjXHU5ODhkXHU5ODhmXHU5ODk0XHU5ODlhXHU5ODliXHU5ODllXHU5ODlmXHU5OGExXHU5OGEyXHU5OGE1XHU5OGE2XHU4NjRkXHU4NjU0XHU4NjZjXHU4NjZlXHU4NjdmXHU4NjdhXHU4NjdjXHU4NjdiXHU4NmE4''@;'; put 'put ''XHU4NjhkXHU4NjhiXHU4NmFjXHU4NjlkXHU4NmE3XHU4NmEzXHU4NmFhXHU4NjkzXHU4NmE5XHU4NmI2XHU4NmM0XHU4NmI1XHU4NmNlXHU4NmIwXHU4NmJhXHU4NmIxXHU4NmFmXHU4NmM5XHU4NmNmXHU4NmI0XHU4NmU5XHU4NmYxXHU4NmYyXHU4NmVkXHU4NmYzXHU4NmQwXHU4NzEzXHU4''@;'; put 'put ''NmRlXHU4NmY0XHU4NmRmXHU4NmQ4XHU4NmQxXHU4NzAzXHU4NzA3XHU4NmY4XHU4NzA4XHU4NzBhXHU4NzBkXHU4NzA5XHU4NzIzXHU4NzNiXHU4NzFlXHU4NzI1XHU4NzJlXHU4NzFhXHU4NzNlXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3XHU4NzNmXHU4NzgyXHU4NzIyXHU4Nzdk''@;'; put 'put ''XHU4NzdlXHU4NzdiXHU4NzYwXHU4NzcwXHU4NzRjXHU4NzZlXHU4NzhiXHU4NzUzXHU4NzYzXHU4NzdjXHU4NzY0XHU4NzU5XHU4NzY1XHU4NzkzXHU4N2FmXHU4N2E4XHU4N2QyXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjQyXS5sZW5ndGg7KytzKTY1NTMzIT09Y1syNDJdW3NdLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJih5W2NbMjQyXVtzXV09NjE5NTIrcyxoWzYxOTUyK3NdPWNbMjQyXVtzXSk7Zm9yKGNbMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YTVhXHU5YTViXHU5YTVjXHU5YTVkXHU5YTVlXHU5YTVmXHU5YTYw''@;'; put 'put ''XHU5YTYxXHU5YTYyXHU5YTYzXHU5YTY0XHU5YTY1XHU5YTY2XHU5YTY3XHU5YTY4XHU5YTY5XHU5YTZhXHU5YTZiXHU5YTcyXHU5YTgzXHU5YTg5XHU5YThkXHU5YThlXHU5YTk0XHU5YTk1XHU5YTk5XHU5YWE2XHU5YWE5XHU5YWFhXHU5YWFiXHU5YWFjXHU5YWFkXHU5YWFlXHU5YWFmXHU5''@;'; put 'put ''YWIyXHU5YWIzXHU5YWI0XHU5YWI1XHU5YWI5XHU5YWJiXHU5YWJkXHU5YWJlXHU5YWJmXHU5YWMzXHU5YWM0XHU5YWM2XHU5YWM3XHU5YWM4XHU5YWM5XHU5YWNhXHU5YWNkXHU5YWNlXHU5YWNmXHU5YWQwXHU5YWQyXHU5YWQ0XHU5YWQ1XHU5YWQ2XHU5YWQ3XHU5YWQ5XHU5YWRhXHU5YWRi''@;'; put 'put ''XHU5YWRjXHVmZmZkXHU5YWRkXHU5YWRlXHU5YWUwXHU5YWUyXHU5YWUzXHU5YWU0XHU5YWU1XHU5YWU3XHU5YWU4XHU5YWU5XHU5YWVhXHU5YWVjXHU5YWVlXHU5YWYwXHU5YWYxXHU5YWYyXHU5YWYzXHU5YWY0XHU5YWY1XHU5YWY2XHU5YWY3XHU5YWY4XHU5YWZhXHU5YWZjXHU5YWZkXHU5''@;'; put 'put ''YWZlXHU5YWZmXHU5YjAwXHU5YjAxXHU5YjAyXHU5YjA0XHU5YjA1XHU5YjA2XHU4N2M2XHU4Nzg4XHU4Nzg1XHU4N2FkXHU4Nzk3XHU4NzgzXHU4N2FiXHU4N2U1XHU4N2FjXHU4N2I1XHU4N2IzXHU4N2NiXHU4N2QzXHU4N2JkXHU4N2QxXHU4N2MwXHU4N2NhXHU4N2RiXHU4N2VhXHU4N2Uw''@;'; put 'put ''XHU4N2VlXHU4ODE2XHU4ODEzXHU4N2ZlXHU4ODBhXHU4ODFiXHU4ODIxXHU4ODM5XHU4ODNjXHU3ZjM2XHU3ZjQyXHU3ZjQ0XHU3ZjQ1XHU4MjEwXHU3YWZhXHU3YWZkXHU3YjA4XHU3YjAzXHU3YjA0XHU3YjE1XHU3YjBhXHU3YjJiXHU3YjBmXHU3YjQ3XHU3YjM4XHU3YjJhXHU3YjE5XHU3''@;'; put 'put ''YjJlXHU3YjMxXHU3YjIwXHU3YjI1XHU3YjI0XHU3YjMzXHU3YjNlXHU3YjFlXHU3YjU4XHU3YjVhXHU3YjQ1XHU3Yjc1XHU3YjRjXHU3YjVkXHU3YjYwXHU3YjZlXHU3YjdiXHU3YjYyXHU3YjcyXHU3YjcxXHU3YjkwXHU3YmE2XHU3YmE3XHU3YmI4XHU3YmFjXHU3YjlkXHU3YmE4XHU3Yjg1''@;'; put 'put ''XHU3YmFhXHU3YjljXHU3YmEyXHU3YmFiXHU3YmI0XHU3YmQxXHU3YmMxXHU3YmNjXHU3YmRkXHU3YmRhXHU3YmU1XHU3YmU2XHU3YmVhXHU3YzBjXHU3YmZlXHU3YmZjXHU3YzBmXHU3YzE2XHU3YzBiXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjQzXS5sZW5ndGg7KytzKTY1NTMzIT09''@;'; put 'put ''Y1syNDNdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjQzXVtzXV09NjIyMDgrcyxoWzYyMjA4K3NdPWNbMjQzXVtzXSk7Zm9yKGNbMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjA3XHU5YjA5XHU5YjBhXHU5YjBiXHU5YjBj''@;'; put 'put ''XHU5YjBkXHU5YjBlXHU5YjEwXHU5YjExXHU5YjEyXHU5YjE0XHU5YjE1XHU5YjE2XHU5YjE3XHU5YjE4XHU5YjE5XHU5YjFhXHU5YjFiXHU5YjFjXHU5YjFkXHU5YjFlXHU5YjIwXHU5YjIxXHU5YjIyXHU5YjI0XHU5YjI1XHU5YjI2XHU5YjI3XHU5YjI4XHU5YjI5XHU5YjJhXHU5YjJiXHU5''@;'; put 'put ''YjJjXHU5YjJkXHU5YjJlXHU5YjMwXHU5YjMxXHU5YjMzXHU5YjM0XHU5YjM1XHU5YjM2XHU5YjM3XHU5YjM4XHU5YjM5XHU5YjNhXHU5YjNkXHU5YjNlXHU5YjNmXHU5YjQwXHU5YjQ2XHU5YjRhXHU5YjRiXHU5YjRjXHU5YjRlXHU5YjUwXHU5YjUyXHU5YjUzXHU5YjU1XHU5YjU2XHU5YjU3''@;'; put 'put ''XHU5YjU4XHU5YjU5XHU5YjVhXHVmZmZkXHU5YjViXHU5YjVjXHU5YjVkXHU5YjVlXHU5YjVmXHU5YjYwXHU5YjYxXHU5YjYyXHU5YjYzXHU5YjY0XHU5YjY1XHU5YjY2XHU5YjY3XHU5YjY4XHU5YjY5XHU5YjZhXHU5YjZiXHU5YjZjXHU5YjZkXHU5YjZlXHU5YjZmXHU5YjcwXHU5YjcxXHU5''@;'; put 'put ''YjcyXHU5YjczXHU5Yjc0XHU5Yjc1XHU5Yjc2XHU5Yjc3XHU5Yjc4XHU5Yjc5XHU5YjdhXHU5YjdiXHU3YzFmXHU3YzJhXHU3YzI2XHU3YzM4XHU3YzQxXHU3YzQwXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA0XHU4MWVjXHU4ODQ0XHU4MjIxXHU4MjIyXHU4MjIzXHU4MjJkXHU4MjJmXHU4MjI4''@;'; put 'put ''XHU4MjJiXHU4MjM4XHU4MjNiXHU4MjMzXHU4MjM0XHU4MjNlXHU4MjQ0XHU4MjQ5XHU4MjRiXHU4MjRmXHU4MjVhXHU4MjVmXHU4MjY4XHU4ODdlXHU4ODg1XHU4ODg4XHU4OGQ4XHU4OGRmXHU4OTVlXHU3ZjlkXHU3ZjlmXHU3ZmE3XHU3ZmFmXHU3ZmIwXHU3ZmIyXHU3YzdjXHU2NTQ5XHU3''@;'; put 'put ''YzkxXHU3YzlkXHU3YzljXHU3YzllXHU3Y2EyXHU3Y2IyXHU3Y2JjXHU3Y2JkXHU3Y2MxXHU3Y2M3XHU3Y2NjXHU3Y2NkXHU3Y2M4XHU3Y2M1XHU3Y2Q3XHU3Y2U4XHU4MjZlXHU2NmE4XHU3ZmJmXHU3ZmNlXHU3ZmQ1XHU3ZmU1XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmVlXHU3ZmYzXHU3Y2Y4''@;'; put 'put ''XHU3ZDc3XHU3ZGE2XHU3ZGFlXHU3ZTQ3XHU3ZTliXHU5ZWI4XHU5ZWI0XHU4ZDczXHU4ZDg0XHU4ZDk0XHU4ZDkxXHU4ZGIxXHU4ZDY3XHU4ZDZkXHU4YzQ3XHU4YzQ5XHU5MTRhXHU5MTUwXHU5MTRlXHU5MTRmXHU5MTY0XHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjQ0XS5sZW5ndGg7''@;'; put 'put ''KytzKTY1NTMzIT09Y1syNDRdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjQ0XVtzXV09NjI0NjQrcyxoWzYyNDY0K3NdPWNbMjQ0XVtzXSk7Zm9yKGNbMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjdjXHU5YjdkXHU5Yjdl''@;'; put 'put ''XHU5YjdmXHU5YjgwXHU5YjgxXHU5YjgyXHU5YjgzXHU5Yjg0XHU5Yjg1XHU5Yjg2XHU5Yjg3XHU5Yjg4XHU5Yjg5XHU5YjhhXHU5YjhiXHU5YjhjXHU5YjhkXHU5YjhlXHU5YjhmXHU5YjkwXHU5YjkxXHU5YjkyXHU5YjkzXHU5Yjk0XHU5Yjk1XHU5Yjk2XHU5Yjk3XHU5Yjk4XHU5Yjk5XHU5''@;'; put 'put ''YjlhXHU5YjliXHU5YjljXHU5YjlkXHU5YjllXHU5YjlmXHU5YmEwXHU5YmExXHU5YmEyXHU5YmEzXHU5YmE0XHU5YmE1XHU5YmE2XHU5YmE3XHU5YmE4XHU5YmE5XHU5YmFhXHU5YmFiXHU5YmFjXHU5YmFkXHU5YmFlXHU5YmFmXHU5YmIwXHU5YmIxXHU5YmIyXHU5YmIzXHU5YmI0XHU5YmI1''@;'; put 'put ''XHU5YmI2XHU5YmI3XHU5YmI4XHU5YmI5XHU5YmJhXHVmZmZkXHU5YmJiXHU5YmJjXHU5YmJkXHU5YmJlXHU5YmJmXHU5YmMwXHU5YmMxXHU5YmMyXHU5YmMzXHU5YmM0XHU5YmM1XHU5YmM2XHU5YmM3XHU5YmM4XHU5YmM5XHU5YmNhXHU5YmNiXHU5YmNjXHU5YmNkXHU5YmNlXHU5YmNmXHU5''@;'; put 'put ''YmQwXHU5YmQxXHU5YmQyXHU5YmQzXHU5YmQ0XHU5YmQ1XHU5YmQ2XHU5YmQ3XHU5YmQ4XHU5YmQ5XHU5YmRhXHU5YmRiXHU5MTYyXHU5MTYxXHU5MTcwXHU5MTY5XHU5MTZmXHU5MTdkXHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThjXHU5MTg1XHU5MTkwXHU5MThkXHU5MTkxXHU5MWEy''@;'; put 'put ''XHU5MWEzXHU5MWFhXHU5MWFkXHU5MWFlXHU5MWFmXHU5MWI1XHU5MWI0XHU5MWJhXHU4YzU1XHU5ZTdlXHU4ZGI4XHU4ZGViXHU4ZTA1XHU4ZTU5XHU4ZTY5XHU4ZGI1XHU4ZGJmXHU4ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4ZGQ3XHU4ZGRhXHU4ZGRlXHU4ZGNlXHU4ZGNmXHU4ZGRiXHU4''@;'; put 'put ''ZGM2XHU4ZGVjXHU4ZGY3XHU4ZGY4XHU4ZGUzXHU4ZGY5XHU4ZGZiXHU4ZGU0XHU4ZTA5XHU4ZGZkXHU4ZTE0XHU4ZTFkXHU4ZTFmXHU4ZTJjXHU4ZTJlXHU4ZTIzXHU4ZTJmXHU4ZTNhXHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNkXHU4ZTMxXHU4ZTQ5XHU4ZTQxXHU4ZTQyXHU4ZTUxXHU4ZTUy''@;'; put 'put ''XHU4ZTRhXHU4ZTcwXHU4ZTc2XHU4ZTdjXHU4ZTZmXHU4ZTc0XHU4ZTg1XHU4ZThmXHU4ZTk0XHU4ZTkwXHU4ZTljXHU4ZTllXHU4Yzc4XHU4YzgyXHU4YzhhXHU4Yzg1XHU4Yzk4XHU4Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4OWRhXHU4OWRjXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNb''@;'; put 'put ''MjQ1XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syNDVdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjQ1XVtzXV09NjI3MjArcyxoWzYyNzIwK3NdPWNbMjQ1XVtzXSk7Zm9yKGNbMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YmRj''@;'; put 'put ''XHU5YmRkXHU5YmRlXHU5YmRmXHU5YmUwXHU5YmUxXHU5YmUyXHU5YmUzXHU5YmU0XHU5YmU1XHU5YmU2XHU5YmU3XHU5YmU4XHU5YmU5XHU5YmVhXHU5YmViXHU5YmVjXHU5YmVkXHU5YmVlXHU5YmVmXHU5YmYwXHU5YmYxXHU5YmYyXHU5YmYzXHU5YmY0XHU5YmY1XHU5YmY2XHU5YmY3XHU5''@;'; put 'put ''YmY4XHU5YmY5XHU5YmZhXHU5YmZiXHU5YmZjXHU5YmZkXHU5YmZlXHU5YmZmXHU5YzAwXHU5YzAxXHU5YzAyXHU5YzAzXHU5YzA0XHU5YzA1XHU5YzA2XHU5YzA3XHU5YzA4XHU5YzA5XHU5YzBhXHU5YzBiXHU5YzBjXHU5YzBkXHU5YzBlXHU5YzBmXHU5YzEwXHU5YzExXHU5YzEyXHU5YzEz''@;'; put 'put ''XHU5YzE0XHU5YzE1XHU5YzE2XHU5YzE3XHU5YzE4XHU5YzE5XHU5YzFhXHVmZmZkXHU5YzFiXHU5YzFjXHU5YzFkXHU5YzFlXHU5YzFmXHU5YzIwXHU5YzIxXHU5YzIyXHU5YzIzXHU5YzI0XHU5YzI1XHU5YzI2XHU5YzI3XHU5YzI4XHU5YzI5XHU5YzJhXHU5YzJiXHU5YzJjXHU5YzJkXHU5''@;'; put 'put ''YzJlXHU5YzJmXHU5YzMwXHU5YzMxXHU5YzMyXHU5YzMzXHU5YzM0XHU5YzM1XHU5YzM2XHU5YzM3XHU5YzM4XHU5YzM5XHU5YzNhXHU5YzNiXHU4OWU1XHU4OWViXHU4OWVmXHU4YTNlXHU4YjI2XHU5NzUzXHU5NmU5XHU5NmYzXHU5NmVmXHU5NzA2XHU5NzAxXHU5NzA4XHU5NzBmXHU5NzBl''@;'; put 'put ''XHU5NzJhXHU5NzJkXHU5NzMwXHU5NzNlXHU5ZjgwXHU5ZjgzXHU5Zjg1XHU5Zjg2XHU5Zjg3XHU5Zjg4XHU5Zjg5XHU5ZjhhXHU5ZjhjXHU5ZWZlXHU5ZjBiXHU5ZjBkXHU5NmI5XHU5NmJjXHU5NmJkXHU5NmNlXHU5NmQyXHU3N2JmXHU5NmUwXHU5MjhlXHU5MmFlXHU5MmM4XHU5MzNlXHU5''@;'; put 'put ''MzZhXHU5M2NhXHU5MzhmXHU5NDNlXHU5NDZiXHU5YzdmXHU5YzgyXHU5Yzg1XHU5Yzg2XHU5Yzg3XHU5Yzg4XHU3YTIzXHU5YzhiXHU5YzhlXHU5YzkwXHU5YzkxXHU5YzkyXHU5Yzk0XHU5Yzk1XHU5YzlhXHU5YzliXHU5YzllXHU5YzlmXHU5Y2EwXHU5Y2ExXHU5Y2EyXHU5Y2EzXHU5Y2E1''@;'; put 'put ''XHU5Y2E2XHU5Y2E3XHU5Y2E4XHU5Y2E5XHU5Y2FiXHU5Y2FkXHU5Y2FlXHU5Y2IwXHU5Y2IxXHU5Y2IyXHU5Y2IzXHU5Y2I0XHU5Y2I1XHU5Y2I2XHU5Y2I3XHU5Y2JhXHU5Y2JiXHU5Y2JjXHU5Y2JkXHU5Y2M0XHU5Y2M1XHU5Y2M2XHU5Y2M3XHU5Y2NhXHU5Y2NiXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''Iikscz0wO3MhPWNbMjQ2XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syNDZdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjQ2XVtzXV09NjI5NzYrcyxoWzYyOTc2K3NdPWNbMjQ2XVtzXSk7Zm9yKGNbMjQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU5YzNjXHU5YzNkXHU5YzNlXHU5YzNmXHU5YzQwXHU5YzQxXHU5YzQyXHU5YzQzXHU5YzQ0XHU5YzQ1XHU5YzQ2XHU5YzQ3XHU5YzQ4XHU5YzQ5XHU5YzRhXHU5YzRiXHU5YzRjXHU5YzRkXHU5YzRlXHU5YzRmXHU5YzUwXHU5YzUxXHU5YzUyXHU5YzUzXHU5YzU0XHU5YzU1XHU5''@;'; put 'put ''YzU2XHU5YzU3XHU5YzU4XHU5YzU5XHU5YzVhXHU5YzViXHU5YzVjXHU5YzVkXHU5YzVlXHU5YzVmXHU5YzYwXHU5YzYxXHU5YzYyXHU5YzYzXHU5YzY0XHU5YzY1XHU5YzY2XHU5YzY3XHU5YzY4XHU5YzY5XHU5YzZhXHU5YzZiXHU5YzZjXHU5YzZkXHU5YzZlXHU5YzZmXHU5YzcwXHU5Yzcx''@;'; put 'put ''XHU5YzcyXHU5YzczXHU5Yzc0XHU5Yzc1XHU5Yzc2XHU5Yzc3XHU5Yzc4XHU5Yzc5XHU5YzdhXHVmZmZkXHU5YzdiXHU5YzdkXHU5YzdlXHU5YzgwXHU5YzgzXHU5Yzg0XHU5Yzg5XHU5YzhhXHU5YzhjXHU5YzhmXHU5YzkzXHU5Yzk2XHU5Yzk3XHU5Yzk4XHU5Yzk5XHU5YzlkXHU5Y2FhXHU5''@;'; put 'put ''Y2FjXHU5Y2FmXHU5Y2I5XHU5Y2JlXHU5Y2JmXHU5Y2MwXHU5Y2MxXHU5Y2MyXHU5Y2M4XHU5Y2M5XHU5Y2QxXHU5Y2QyXHU5Y2RhXHU5Y2RiXHU5Y2UwXHU5Y2UxXHU5Y2NjXHU5Y2NkXHU5Y2NlXHU5Y2NmXHU5Y2QwXHU5Y2QzXHU5Y2Q0XHU5Y2Q1XHU5Y2Q3XHU5Y2Q4XHU5Y2Q5XHU5Y2Rj''@;'; put 'put ''XHU5Y2RkXHU5Y2RmXHU5Y2UyXHU5NzdjXHU5Nzg1XHU5NzkxXHU5NzkyXHU5Nzk0XHU5N2FmXHU5N2FiXHU5N2EzXHU5N2IyXHU5N2I0XHU5YWIxXHU5YWIwXHU5YWI3XHU5ZTU4XHU5YWI2XHU5YWJhXHU5YWJjXHU5YWMxXHU5YWMwXHU5YWM1XHU5YWMyXHU5YWNiXHU5YWNjXHU5YWQxXHU5''@;'; put 'put ''YjQ1XHU5YjQzXHU5YjQ3XHU5YjQ5XHU5YjQ4XHU5YjRkXHU5YjUxXHU5OGU4XHU5OTBkXHU5OTJlXHU5OTU1XHU5OTU0XHU5YWRmXHU5YWUxXHU5YWU2XHU5YWVmXHU5YWViXHU5YWZiXHU5YWVkXHU5YWY5XHU5YjA4XHU5YjBmXHU5YjEzXHU5YjFmXHU5YjIzXHU5ZWJkXHU5ZWJlXHU3ZTNi''@;'; put 'put ''XHU5ZTgyXHU5ZTg3XHU5ZTg4XHU5ZThiXHU5ZTkyXHU5M2Q2XHU5ZTlkXHU5ZTlmXHU5ZWRiXHU5ZWRjXHU5ZWRkXHU5ZWUwXHU5ZWRmXHU5ZWUyXHU5ZWU5XHU5ZWU3XHU5ZWU1XHU5ZWVhXHU5ZWVmXHU5ZjIyXHU5ZjJjXHU5ZjJmXHU5ZjM5XHU5ZjM3XHU5ZjNkXHU5ZjNlXHU5ZjQ0XHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjQ3XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syNDddW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjQ3XVtzXV09NjMyMzIrcyxoWzYzMjMyK3NdPWNbMjQ3XVtzXSk7Zm9yKGNbMjQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU5Y2UzXHU5Y2U0XHU5Y2U1XHU5Y2U2XHU5Y2U3XHU5Y2U4XHU5Y2U5XHU5Y2VhXHU5Y2ViXHU5Y2VjXHU5Y2VkXHU5Y2VlXHU5Y2VmXHU5Y2YwXHU5Y2YxXHU5Y2YyXHU5Y2YzXHU5Y2Y0XHU5Y2Y1XHU5Y2Y2XHU5Y2Y3XHU5Y2Y4XHU5Y2Y5XHU5Y2ZhXHU5''@;'; put 'put ''Y2ZiXHU5Y2ZjXHU5Y2ZkXHU5Y2ZlXHU5Y2ZmXHU5ZDAwXHU5ZDAxXHU5ZDAyXHU5ZDAzXHU5ZDA0XHU5ZDA1XHU5ZDA2XHU5ZDA3XHU5ZDA4XHU5ZDA5XHU5ZDBhXHU5ZDBiXHU5ZDBjXHU5ZDBkXHU5ZDBlXHU5ZDBmXHU5ZDEwXHU5ZDExXHU5ZDEyXHU5ZDEzXHU5ZDE0XHU5ZDE1XHU5ZDE2''@;'; put 'put ''XHU5ZDE3XHU5ZDE4XHU5ZDE5XHU5ZDFhXHU5ZDFiXHU5ZDFjXHU5ZDFkXHU5ZDFlXHU5ZDFmXHU5ZDIwXHU5ZDIxXHVmZmZkXHU5ZDIyXHU5ZDIzXHU5ZDI0XHU5ZDI1XHU5ZDI2XHU5ZDI3XHU5ZDI4XHU5ZDI5XHU5ZDJhXHU5ZDJiXHU5ZDJjXHU5ZDJkXHU5ZDJlXHU5ZDJmXHU5ZDMwXHU5''@;'; put 'put ''ZDMxXHU5ZDMyXHU5ZDMzXHU5ZDM0XHU5ZDM1XHU5ZDM2XHU5ZDM3XHU5ZDM4XHU5ZDM5XHU5ZDNhXHU5ZDNiXHU5ZDNjXHU5ZDNkXHU5ZDNlXHU5ZDNmXHU5ZDQwXHU5ZDQxXHU5ZDQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjQ4XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syNDhdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjQ4XVtzXV09NjM0ODgrcyxoWzYzNDg4K3NdPWNbMjQ4XVtzXSk7Zm9yKGNbMjQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDQzXHU5ZDQ0XHU5ZDQ1XHU5ZDQ2XHU5ZDQ3XHU5ZDQ4XHU5ZDQ5XHU5ZDRhXHU5ZDRiXHU5ZDRjXHU5ZDRkXHU5ZDRlXHU5ZDRmXHU5ZDUwXHU5ZDUxXHU5ZDUyXHU5ZDUzXHU5ZDU0XHU5ZDU1XHU5ZDU2XHU5ZDU3XHU5ZDU4XHU5''@;'; put 'put ''ZDU5XHU5ZDVhXHU5ZDViXHU5ZDVjXHU5ZDVkXHU5ZDVlXHU5ZDVmXHU5ZDYwXHU5ZDYxXHU5ZDYyXHU5ZDYzXHU5ZDY0XHU5ZDY1XHU5ZDY2XHU5ZDY3XHU5ZDY4XHU5ZDY5XHU5ZDZhXHU5ZDZiXHU5ZDZjXHU5ZDZkXHU5ZDZlXHU5ZDZmXHU5ZDcwXHU5ZDcxXHU5ZDcyXHU5ZDczXHU5ZDc0''@;'; put 'put ''XHU5ZDc1XHU5ZDc2XHU5ZDc3XHU5ZDc4XHU5ZDc5XHU5ZDdhXHU5ZDdiXHU5ZDdjXHU5ZDdkXHU5ZDdlXHU5ZDdmXHU5ZDgwXHU5ZDgxXHVmZmZkXHU5ZDgyXHU5ZDgzXHU5ZDg0XHU5ZDg1XHU5ZDg2XHU5ZDg3XHU5ZDg4XHU5ZDg5XHU5ZDhhXHU5ZDhiXHU5ZDhjXHU5ZDhkXHU5ZDhlXHU5''@;'; put 'put ''ZDhmXHU5ZDkwXHU5ZDkxXHU5ZDkyXHU5ZDkzXHU5ZDk0XHU5ZDk1XHU5ZDk2XHU5ZDk3XHU5ZDk4XHU5ZDk5XHU5ZDlhXHU5ZDliXHU5ZDljXHU5ZDlkXHU5ZDllXHU5ZDlmXHU5ZGEwXHU5ZGExXHU5ZGEyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjQ5XS5sZW5ndGg7KytzKTY1NTMzIT09Y1syNDldW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjQ5XVtzXV09NjM3NDQrcyxoWzYzNzQ0K3NdPWNbMjQ5XVtzXSk7Zm9yKGNbMjUwXT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZGEzXHU5ZGE0XHU5ZGE1XHU5ZGE2XHU5ZGE3XHU5ZGE4XHU5ZGE5XHU5ZGFhXHU5ZGFiXHU5ZGFjXHU5ZGFkXHU5ZGFlXHU5ZGFmXHU5ZGIwXHU5ZGIxXHU5ZGIyXHU5ZGIzXHU5ZGI0XHU5ZGI1XHU5ZGI2XHU5''@;'; put 'put ''ZGI3XHU5ZGI4XHU5ZGI5XHU5ZGJhXHU5ZGJiXHU5ZGJjXHU5ZGJkXHU5ZGJlXHU5ZGJmXHU5ZGMwXHU5ZGMxXHU5ZGMyXHU5ZGMzXHU5ZGM0XHU5ZGM1XHU5ZGM2XHU5ZGM3XHU5ZGM4XHU5ZGM5XHU5ZGNhXHU5ZGNiXHU5ZGNjXHU5ZGNkXHU5ZGNlXHU5ZGNmXHU5ZGQwXHU5ZGQxXHU5ZGQy''@;'; put 'put ''XHU5ZGQzXHU5ZGQ0XHU5ZGQ1XHU5ZGQ2XHU5ZGQ3XHU5ZGQ4XHU5ZGQ5XHU5ZGRhXHU5ZGRiXHU5ZGRjXHU5ZGRkXHU5ZGRlXHU5ZGRmXHU5ZGUwXHU5ZGUxXHVmZmZkXHU5ZGUyXHU5ZGUzXHU5ZGU0XHU5ZGU1XHU5ZGU2XHU5ZGU3XHU5ZGU4XHU5ZGU5XHU5ZGVhXHU5ZGViXHU5ZGVjXHU5''@;'; put 'put ''ZGVkXHU5ZGVlXHU5ZGVmXHU5ZGYwXHU5ZGYxXHU5ZGYyXHU5ZGYzXHU5ZGY0XHU5ZGY1XHU5ZGY2XHU5ZGY3XHU5ZGY4XHU5ZGY5XHU5ZGZhXHU5ZGZiXHU5ZGZjXHU5ZGZkXHU5ZGZlXHU5ZGZmXHU5ZTAwXHU5ZTAxXHU5ZTAyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMjUwXS5sZW5ndGg7KytzKTY1NTMzIT09Y1syNTBdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMjUwXVtzXV09NjRlMytzLGhbNjRlMytzXT1jWzI1MF1bc10pO2ZvcihjWzI1MV09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWUwM1x1OWUwNFx1OWUwNVx1OWUwNlx1OWUwN1x1OWUwOFx1OWUwOVx1OWUwYVx1OWUwYlx1OWUwY1x1OWUwZFx1OWUwZVx1OWUwZlx1OWUxMFx1OWUxMVx1OWUxMlx1OWUxM1x1OWUxNFx1OWUx''@;'; put 'put ''NVx1OWUxNlx1OWUxN1x1OWUxOFx1OWUxOVx1OWUxYVx1OWUxYlx1OWUxY1x1OWUxZFx1OWUxZVx1OWUyNFx1OWUyN1x1OWUyZVx1OWUzMFx1OWUzNFx1OWUzYlx1OWUzY1x1OWU0MFx1OWU0ZFx1OWU1MFx1OWU1Mlx1OWU1M1x1OWU1NFx1OWU1Nlx1OWU1OVx1OWU1ZFx1OWU1Zlx1OWU2MFx1''@;'; put 'put ''OWU2MVx1OWU2Mlx1OWU2NVx1OWU2ZVx1OWU2Zlx1OWU3Mlx1OWU3NFx1OWU3NVx1OWU3Nlx1OWU3N1x1OWU3OFx1OWU3OVx1OWU3YVx1OWU3Ylx1OWU3Y1x1OWU3ZFx1OWU4MFx1ZmZmZFx1OWU4MVx1OWU4M1x1OWU4NFx1OWU4NVx1OWU4Nlx1OWU4OVx1OWU4YVx1OWU4Y1x1OWU4ZFx1OWU4''@;'; put 'put ''ZVx1OWU4Zlx1OWU5MFx1OWU5MVx1OWU5NFx1OWU5NVx1OWU5Nlx1OWU5N1x1OWU5OFx1OWU5OVx1OWU5YVx1OWU5Ylx1OWU5Y1x1OWU5ZVx1OWVhMFx1OWVhMVx1OWVhMlx1OWVhM1x1OWVhNFx1OWVhNVx1OWVhN1x1OWVhOFx1OWVhOVx1OWVhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI1MV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjUxXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI1MV1bc11dPTY0MjU2K3MsaFs2NDI1NitzXT1jWzI1MV1bc10pO2Zv''@;'; put 'put ''cihjWzI1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWVhYlx1OWVhY1x1OWVhZFx1OWVhZVx1OWVhZlx1OWViMFx1OWViMVx1OWViMlx1OWViM1x1OWViNVx1OWViNlx1OWViN1x1OWViOVx1OWViYVx1OWViY1x1OWViZlx1OWVj''@;'; put 'put ''MFx1OWVjMVx1OWVjMlx1OWVjM1x1OWVjNVx1OWVjNlx1OWVjN1x1OWVjOFx1OWVjYVx1OWVjYlx1OWVjY1x1OWVkMFx1OWVkMlx1OWVkM1x1OWVkNVx1OWVkNlx1OWVkN1x1OWVkOVx1OWVkYVx1OWVkZVx1OWVlMVx1OWVlM1x1OWVlNFx1OWVlNlx1OWVlOFx1OWVlYlx1OWVlY1x1OWVlZFx1''@;'; put 'put ''OWVlZVx1OWVmMFx1OWVmMVx1OWVmMlx1OWVmM1x1OWVmNFx1OWVmNVx1OWVmNlx1OWVmN1x1OWVmOFx1OWVmYVx1OWVmZFx1OWVmZlx1OWYwMFx1OWYwMVx1OWYwMlx1OWYwM1x1OWYwNFx1OWYwNVx1ZmZmZFx1OWYwNlx1OWYwN1x1OWYwOFx1OWYwOVx1OWYwYVx1OWYwY1x1OWYwZlx1OWYx''@;'; put 'put ''MVx1OWYxMlx1OWYxNFx1OWYxNVx1OWYxNlx1OWYxOFx1OWYxYVx1OWYxYlx1OWYxY1x1OWYxZFx1OWYxZVx1OWYxZlx1OWYyMVx1OWYyM1x1OWYyNFx1OWYyNVx1OWYyNlx1OWYyN1x1OWYyOFx1OWYyOVx1OWYyYVx1OWYyYlx1OWYyZFx1OWYyZVx1OWYzMFx1OWYzMVx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI1Ml0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjUyXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI1Ml1bc11dPTY0NTEyK3MsaFs2NDUxMitzXT1j''@;'; put 'put ''WzI1Ml1bc10pO2ZvcihjWzI1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWYzMlx1OWYzM1x1OWYzNFx1OWYzNVx1OWYzNlx1OWYzOFx1OWYzYVx1OWYzY1x1OWYzZlx1OWY0MFx1OWY0MVx1OWY0Mlx1OWY0M1x1OWY0NVx1OWY0''@;'; put 'put ''Nlx1OWY0N1x1OWY0OFx1OWY0OVx1OWY0YVx1OWY0Ylx1OWY0Y1x1OWY0ZFx1OWY0ZVx1OWY0Zlx1OWY1Mlx1OWY1M1x1OWY1NFx1OWY1NVx1OWY1Nlx1OWY1N1x1OWY1OFx1OWY1OVx1OWY1YVx1OWY1Ylx1OWY1Y1x1OWY1ZFx1OWY1ZVx1OWY1Zlx1OWY2MFx1OWY2MVx1OWY2Mlx1OWY2M1x1''@;'; put 'put ''OWY2NFx1OWY2NVx1OWY2Nlx1OWY2N1x1OWY2OFx1OWY2OVx1OWY2YVx1OWY2Ylx1OWY2Y1x1OWY2ZFx1OWY2ZVx1OWY2Zlx1OWY3MFx1OWY3MVx1OWY3Mlx1OWY3M1x1OWY3NFx1OWY3NVx1OWY3Nlx1OWY3N1x1OWY3OFx1ZmZmZFx1OWY3OVx1OWY3YVx1OWY3Ylx1OWY3Y1x1OWY3ZFx1OWY3''@;'; put 'put ''ZVx1OWY4MVx1OWY4Mlx1OWY4ZFx1OWY4ZVx1OWY4Zlx1OWY5MFx1OWY5MVx1OWY5Mlx1OWY5M1x1OWY5NFx1OWY5NVx1OWY5Nlx1OWY5N1x1OWY5OFx1OWY5Y1x1OWY5ZFx1OWY5ZVx1OWZhMVx1OWZhMlx1OWZhM1x1OWZhNFx1OWZhNVx1ZjkyY1x1Zjk3OVx1Zjk5NVx1ZjllN1x1ZjlmMVx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI1M10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjUzXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI1M11bc11dPTY0NzY4K3Ms''@;'; put 'put ''aFs2NDc2OCtzXT1jWzI1M11bc10pO2ZvcihjWzI1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmEwY1x1ZmEwZFx1ZmEwZVx1ZmEwZlx1ZmExMVx1ZmExM1x1ZmExNFx1ZmExOFx1ZmExZlx1ZmEyMFx1ZmEyMVx1ZmEyM1x1ZmEy''@;'; put 'put ''NFx1ZmEyN1x1ZmEyOFx1ZmEyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI1NF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjU0XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI1NF1b''@;'; put 'put ''c11dPTY1MDI0K3MsaFs2NTAyNCtzXT1jWzI1NF1bc10pO3JldHVybntlbmM6eSxkZWM6aH19KCksals5NDldPWZ1bmN0aW9uKCl7dmFyIHMsaD1bXSx5PXt9LGM9W107Zm9yKGNbMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFc''@;'; put 'put ''eDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMF1bc10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KHlbY1swXVtzXV09MCtzLGhbMCtzXT1jWzBdW3NdKTtmb3IoY1sxMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFjMDJcdWFjMDNcdWFjMDVcdWFjMDZcdWFjMGJcdWFjMGNcdWFjMGRcdWFjMGVcdWFjMGZcdWFjMThc''@;'; put 'put ''dWFjMWVcdWFjMWZcdWFjMjFcdWFjMjJcdWFjMjNcdWFjMjVcdWFjMjZcdWFjMjdcdWFjMjhcdWFjMjlcdWFjMmFcdWFjMmJcdWFjMmVcdWFjMzJcdWFjMzNcdWFjMzRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFjMzVcdWFjMzZcdWFjMzdcdWFjM2FcdWFjM2JcdWFj''@;'; put 'put ''M2RcdWFjM2VcdWFjM2ZcdWFjNDFcdWFjNDJcdWFjNDNcdWFjNDRcdWFjNDVcdWFjNDZcdWFjNDdcdWFjNDhcdWFjNDlcdWFjNGFcdWFjNGNcdWFjNGVcdWFjNGZcdWFjNTBcdWFjNTFcdWFjNTJcdWFjNTNcdWFjNTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFjNTZc''@;'; put 'put ''dWFjNTdcdWFjNTlcdWFjNWFcdWFjNWJcdWFjNWRcdWFjNWVcdWFjNWZcdWFjNjBcdWFjNjFcdWFjNjJcdWFjNjNcdWFjNjRcdWFjNjVcdWFjNjZcdWFjNjdcdWFjNjhcdWFjNjlcdWFjNmFcdWFjNmJcdWFjNmNcdWFjNmRcdWFjNmVcdWFjNmZcdWFjNzJcdWFjNzNcdWFjNzVcdWFjNzZcdWFj''@;'; put 'put ''NzlcdWFjN2JcdWFjN2NcdWFjN2RcdWFjN2VcdWFjN2ZcdWFjODJcdWFjODdcdWFjODhcdWFjOGRcdWFjOGVcdWFjOGZcdWFjOTFcdWFjOTJcdWFjOTNcdWFjOTVcdWFjOTZcdWFjOTdcdWFjOThcdWFjOTlcdWFjOWFcdWFjOWJcdWFjOWVcdWFjYTJcdWFjYTNcdWFjYTRcdWFjYTVcdWFjYTZc''@;'; put 'put ''dWFjYTdcdWFjYWJcdWFjYWRcdWFjYWVcdWFjYjFcdWFjYjJcdWFjYjNcdWFjYjRcdWFjYjVcdWFjYjZcdWFjYjdcdWFjYmFcdWFjYmVcdWFjYmZcdWFjYzBcdWFjYzJcdWFjYzNcdWFjYzVcdWFjYzZcdWFjYzdcdWFjYzlcdWFjY2FcdWFjY2JcdWFjY2RcdWFjY2VcdWFjY2ZcdWFjZDBcdWFj''@;'; put 'put ''ZDFcdWFjZDJcdWFjZDNcdWFjZDRcdWFjZDZcdWFjZDhcdWFjZDlcdWFjZGFcdWFjZGJcdWFjZGNcdWFjZGRcdWFjZGVcdWFjZGZcdWFjZTJcdWFjZTNcdWFjZTVcdWFjZTZcdWFjZTlcdWFjZWJcdWFjZWRcdWFjZWVcdWFjZjJcdWFjZjRcdWFjZjdcdWFjZjhcdWFjZjlcdWFjZmFcdWFjZmJc''@;'; put 'put ''dWFjZmVcdWFjZmZcdWFkMDFcdWFkMDJcdWFkMDNcdWFkMDVcdWFkMDdcdWFkMDhcdWFkMDlcdWFkMGFcdWFkMGJcdWFkMGVcdWFkMTBcdWFkMTJcdWFkMTNcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxMjldLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzEyOV1bc10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KHlbY1sxMjldW3NdXT0zMzAyNCtzLGhbMzMwMjQrc109Y1sxMjldW3NdKTtmb3IoY1sxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkMTRcdWFkMTVcdWFkMTZcdWFkMTdcdWFkMTlcdWFkMWFcdWFkMWJcdWFkMWRc''@;'; put 'put ''dWFkMWVcdWFkMWZcdWFkMjFcdWFkMjJcdWFkMjNcdWFkMjRcdWFkMjVcdWFkMjZcdWFkMjdcdWFkMjhcdWFkMmFcdWFkMmJcdWFkMmVcdWFkMmZcdWFkMzBcdWFkMzFcdWFkMzJcdWFkMzNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkMzZcdWFkMzdcdWFkMzlcdWFk''@;'; put 'put ''M2FcdWFkM2JcdWFkM2RcdWFkM2VcdWFkM2ZcdWFkNDBcdWFkNDFcdWFkNDJcdWFkNDNcdWFkNDZcdWFkNDhcdWFkNGFcdWFkNGJcdWFkNGNcdWFkNGRcdWFkNGVcdWFkNGZcdWFkNTFcdWFkNTJcdWFkNTNcdWFkNTVcdWFkNTZcdWFkNTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWFkNTlcdWFkNWFcdWFkNWJcdWFkNWNcdWFkNWRcdWFkNWVcdWFkNWZcdWFkNjBcdWFkNjJcdWFkNjRcdWFkNjVcdWFkNjZcdWFkNjdcdWFkNjhcdWFkNjlcdWFkNmFcdWFkNmJcdWFkNmVcdWFkNmZcdWFkNzFcdWFkNzJcdWFkNzdcdWFkNzhcdWFkNzlcdWFkN2FcdWFkN2VcdWFk''@;'; put 'put ''ODBcdWFkODNcdWFkODRcdWFkODVcdWFkODZcdWFkODdcdWFkOGFcdWFkOGJcdWFkOGRcdWFkOGVcdWFkOGZcdWFkOTFcdWFkOTJcdWFkOTNcdWFkOTRcdWFkOTVcdWFkOTZcdWFkOTdcdWFkOThcdWFkOTlcdWFkOWFcdWFkOWJcdWFkOWVcdWFkOWZcdWFkYTBcdWFkYTFcdWFkYTJcdWFkYTNc''@;'; put 'put ''dWFkYTVcdWFkYTZcdWFkYTdcdWFkYThcdWFkYTlcdWFkYWFcdWFkYWJcdWFkYWNcdWFkYWRcdWFkYWVcdWFkYWZcdWFkYjBcdWFkYjFcdWFkYjJcdWFkYjNcdWFkYjRcdWFkYjVcdWFkYjZcdWFkYjhcdWFkYjlcdWFkYmFcdWFkYmJcdWFkYmNcdWFkYmRcdWFkYmVcdWFkYmZcdWFkYzJcdWFk''@;'; put 'put ''YzNcdWFkYzVcdWFkYzZcdWFkYzdcdWFkYzlcdWFkY2FcdWFkY2JcdWFkY2NcdWFkY2RcdWFkY2VcdWFkY2ZcdWFkZDJcdWFkZDRcdWFkZDVcdWFkZDZcdWFkZDdcdWFkZDhcdWFkZDlcdWFkZGFcdWFkZGJcdWFkZGRcdWFkZGVcdWFkZGZcdWFkZTFcdWFkZTJcdWFkZTNcdWFkZTVcdWFkZTZc''@;'; put 'put ''dWFkZTdcdWFkZThcdWFkZTlcdWFkZWFcdWFkZWJcdWFkZWNcdWFkZWRcdWFkZWVcdWFkZWZcdWFkZjBcdWFkZjFcdWFkZjJcdWFkZjNcdWFkZjRcdWFkZjVcdWFkZjZcdWFkZjdcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxMzBdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzEzMF1bc10uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKHlbY1sxMzBdW3NdXT0zMzI4MCtzLGhbMzMyODArc109Y1sxMzBdW3NdKTtmb3IoY1sxMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkZmFcdWFkZmJcdWFkZmRcdWFkZmVcdWFlMDJcdWFlMDNc''@;'; put 'put ''dWFlMDRcdWFlMDVcdWFlMDZcdWFlMDdcdWFlMGFcdWFlMGNcdWFlMGVcdWFlMGZcdWFlMTBcdWFlMTFcdWFlMTJcdWFlMTNcdWFlMTVcdWFlMTZcdWFlMTdcdWFlMThcdWFlMTlcdWFlMWFcdWFlMWJcdWFlMWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlMWRcdWFl''@;'; put 'put ''MWVcdWFlMWZcdWFlMjBcdWFlMjFcdWFlMjJcdWFlMjNcdWFlMjRcdWFlMjVcdWFlMjZcdWFlMjdcdWFlMjhcdWFlMjlcdWFlMmFcdWFlMmJcdWFlMmNcdWFlMmRcdWFlMmVcdWFlMmZcdWFlMzJcdWFlMzNcdWFlMzVcdWFlMzZcdWFlMzlcdWFlM2JcdWFlM2NcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWFlM2RcdWFlM2VcdWFlM2ZcdWFlNDJcdWFlNDRcdWFlNDdcdWFlNDhcdWFlNDlcdWFlNGJcdWFlNGZcdWFlNTFcdWFlNTJcdWFlNTNcdWFlNTVcdWFlNTdcdWFlNThcdWFlNTlcdWFlNWFcdWFlNWJcdWFlNWVcdWFlNjJcdWFlNjNcdWFlNjRcdWFlNjZcdWFl''@;'; put 'put ''NjdcdWFlNmFcdWFlNmJcdWFlNmRcdWFlNmVcdWFlNmZcdWFlNzFcdWFlNzJcdWFlNzNcdWFlNzRcdWFlNzVcdWFlNzZcdWFlNzdcdWFlN2FcdWFlN2VcdWFlN2ZcdWFlODBcdWFlODFcdWFlODJcdWFlODNcdWFlODZcdWFlODdcdWFlODhcdWFlODlcdWFlOGFcdWFlOGJcdWFlOGRcdWFlOGVc''@;'; put 'put ''dWFlOGZcdWFlOTBcdWFlOTFcdWFlOTJcdWFlOTNcdWFlOTRcdWFlOTVcdWFlOTZcdWFlOTdcdWFlOThcdWFlOTlcdWFlOWFcdWFlOWJcdWFlOWNcdWFlOWRcdWFlOWVcdWFlOWZcdWFlYTBcdWFlYTFcdWFlYTJcdWFlYTNcdWFlYTRcdWFlYTVcdWFlYTZcdWFlYTdcdWFlYThcdWFlYTlcdWFl''@;'; put 'put ''YWFcdWFlYWJcdWFlYWNcdWFlYWRcdWFlYWVcdWFlYWZcdWFlYjBcdWFlYjFcdWFlYjJcdWFlYjNcdWFlYjRcdWFlYjVcdWFlYjZcdWFlYjdcdWFlYjhcdWFlYjlcdWFlYmFcdWFlYmJcdWFlYmZcdWFlYzFcdWFlYzJcdWFlYzNcdWFlYzVcdWFlYzZcdWFlYzdcdWFlYzhcdWFlYzlcdWFlY2Fc''@;'; put 'put ''dWFlY2JcdWFlY2VcdWFlZDJcdWFlZDNcdWFlZDRcdWFlZDVcdWFlZDZcdWFlZDdcdWFlZGFcdWFlZGJcdWFlZGRcdWFlZGVcdWFlZGZcdWFlZTBcdWFlZTFcdWFlZTJcdWFlZTNcdWFlZTRcdWFlZTVcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxMzFdLmxlbmd0aDsrK3MpNjU1MzMhPT1j''@;'; put 'put ''WzEzMV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxMzFdW3NdXT0zMzUzNitzLGhbMzM1MzYrc109Y1sxMzFdW3NdKTtmb3IoY1sxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlZTZcdWFlZTdcdWFlZTlcdWFlZWFc''@;'; put 'put ''dWFlZWNcdWFlZWVcdWFlZWZcdWFlZjBcdWFlZjFcdWFlZjJcdWFlZjNcdWFlZjVcdWFlZjZcdWFlZjdcdWFlZjlcdWFlZmFcdWFlZmJcdWFlZmRcdWFlZmVcdWFlZmZcdWFmMDBcdWFmMDFcdWFmMDJcdWFmMDNcdWFmMDRcdWFmMDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWFmMDZcdWFmMDlcdWFmMGFcdWFmMGJcdWFmMGNcdWFmMGVcdWFmMGZcdWFmMTFcdWFmMTJcdWFmMTNcdWFmMTRcdWFmMTVcdWFmMTZcdWFmMTdcdWFmMThcdWFmMTlcdWFmMWFcdWFmMWJcdWFmMWNcdWFmMWRcdWFmMWVcdWFmMWZcdWFmMjBcdWFmMjFcdWFmMjJcdWFmMjNcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmMjRcdWFmMjVcdWFmMjZcdWFmMjdcdWFmMjhcdWFmMjlcdWFmMmFcdWFmMmJcdWFmMmVcdWFmMmZcdWFmMzFcdWFmMzNcdWFmMzVcdWFmMzZcdWFmMzdcdWFmMzhcdWFmMzlcdWFmM2FcdWFmM2JcdWFmM2VcdWFmNDBcdWFmNDRcdWFm''@;'; put 'put ''NDVcdWFmNDZcdWFmNDdcdWFmNGFcdWFmNGJcdWFmNGNcdWFmNGRcdWFmNGVcdWFmNGZcdWFmNTFcdWFmNTJcdWFmNTNcdWFmNTRcdWFmNTVcdWFmNTZcdWFmNTdcdWFmNThcdWFmNTlcdWFmNWFcdWFmNWJcdWFmNWVcdWFmNWZcdWFmNjBcdWFmNjFcdWFmNjJcdWFmNjNcdWFmNjZcdWFmNjdc''@;'; put 'put ''dWFmNjhcdWFmNjlcdWFmNmFcdWFmNmJcdWFmNmNcdWFmNmRcdWFmNmVcdWFmNmZcdWFmNzBcdWFmNzFcdWFmNzJcdWFmNzNcdWFmNzRcdWFmNzVcdWFmNzZcdWFmNzdcdWFmNzhcdWFmN2FcdWFmN2JcdWFmN2NcdWFmN2RcdWFmN2VcdWFmN2ZcdWFmODFcdWFmODJcdWFmODNcdWFmODVcdWFm''@;'; put 'put ''ODZcdWFmODdcdWFmODlcdWFmOGFcdWFmOGJcdWFmOGNcdWFmOGRcdWFmOGVcdWFmOGZcdWFmOTJcdWFmOTNcdWFmOTRcdWFmOTZcdWFmOTdcdWFmOThcdWFmOTlcdWFmOWFcdWFmOWJcdWFmOWRcdWFmOWVcdWFmOWZcdWFmYTBcdWFmYTFcdWFmYTJcdWFmYTNcdWFmYTRcdWFmYTVcdWFmYTZc''@;'; put 'put ''dWFmYTdcdWFmYThcdWFmYTlcdWFmYWFcdWFmYWJcdWFmYWNcdWFmYWRcdWFmYWVcdWFmYWZcdWFmYjBcdWFmYjFcdWFmYjJcdWFmYjNcdWFmYjRcdWFmYjVcdWFmYjZcdWFmYjdcdWFmYmFcdWFmYmJcdWFmYmRcdWFmYmVcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxMzJdLmxlbmd0aDsr''@;'; put 'put ''K3MpNjU1MzMhPT1jWzEzMl1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxMzJdW3NdXT0zMzc5MitzLGhbMzM3OTIrc109Y1sxMzJdW3NdKTtmb3IoY1sxMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmYmZcdWFmYzFc''@;'; put 'put ''dWFmYzJcdWFmYzNcdWFmYzRcdWFmYzVcdWFmYzZcdWFmY2FcdWFmY2NcdWFmY2ZcdWFmZDBcdWFmZDFcdWFmZDJcdWFmZDNcdWFmZDVcdWFmZDZcdWFmZDdcdWFmZDhcdWFmZDlcdWFmZGFcdWFmZGJcdWFmZGRcdWFmZGVcdWFmZGZcdWFmZTBcdWFmZTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWFmZTJcdWFmZTNcdWFmZTRcdWFmZTVcdWFmZTZcdWFmZTdcdWFmZWFcdWFmZWJcdWFmZWNcdWFmZWRcdWFmZWVcdWFmZWZcdWFmZjJcdWFmZjNcdWFmZjVcdWFmZjZcdWFmZjdcdWFmZjlcdWFmZmFcdWFmZmJcdWFmZmNcdWFmZmRcdWFmZmVcdWFmZmZcdWIwMDJc''@;'; put 'put ''dWIwMDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwMDVcdWIwMDZcdWIwMDdcdWIwMDhcdWIwMDlcdWIwMGFcdWIwMGJcdWIwMGRcdWIwMGVcdWIwMGZcdWIwMTFcdWIwMTJcdWIwMTNcdWIwMTVcdWIwMTZcdWIwMTdcdWIwMThcdWIwMTlcdWIwMWFcdWIwMWJcdWIw''@;'; put 'put ''MWVcdWIwMWZcdWIwMjBcdWIwMjFcdWIwMjJcdWIwMjNcdWIwMjRcdWIwMjVcdWIwMjZcdWIwMjdcdWIwMjlcdWIwMmFcdWIwMmJcdWIwMmNcdWIwMmRcdWIwMmVcdWIwMmZcdWIwMzBcdWIwMzFcdWIwMzJcdWIwMzNcdWIwMzRcdWIwMzVcdWIwMzZcdWIwMzdcdWIwMzhcdWIwMzlcdWIwM2Fc''@;'; put 'put ''dWIwM2JcdWIwM2NcdWIwM2RcdWIwM2VcdWIwM2ZcdWIwNDBcdWIwNDFcdWIwNDJcdWIwNDNcdWIwNDZcdWIwNDdcdWIwNDlcdWIwNGJcdWIwNGRcdWIwNGZcdWIwNTBcdWIwNTFcdWIwNTJcdWIwNTZcdWIwNThcdWIwNWFcdWIwNWJcdWIwNWNcdWIwNWVcdWIwNWZcdWIwNjBcdWIwNjFcdWIw''@;'; put 'put ''NjJcdWIwNjNcdWIwNjRcdWIwNjVcdWIwNjZcdWIwNjdcdWIwNjhcdWIwNjlcdWIwNmFcdWIwNmJcdWIwNmNcdWIwNmRcdWIwNmVcdWIwNmZcdWIwNzBcdWIwNzFcdWIwNzJcdWIwNzNcdWIwNzRcdWIwNzVcdWIwNzZcdWIwNzdcdWIwNzhcdWIwNzlcdWIwN2FcdWIwN2JcdWIwN2VcdWIwN2Zc''@;'; put 'put ''dWIwODFcdWIwODJcdWIwODNcdWIwODVcdWIwODZcdWIwODdcdWIwODhcdWIwODlcdWIwOGFcdWIwOGJcdWIwOGVcdWIwOTBcdWIwOTJcdWIwOTNcdWIwOTRcdWIwOTVcdWIwOTZcdWIwOTdcdWIwOWJcdWIwOWRcdWIwOWVcdWIwYTNcdWIwYTRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sx''@;'; put 'put ''MzNdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzEzM11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxMzNdW3NdXT0zNDA0OCtzLGhbMzQwNDgrc109Y1sxMzNdW3NdKTtmb3IoY1sxMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWIwYTVcdWIwYTZcdWIwYTdcdWIwYWFcdWIwYjBcdWIwYjJcdWIwYjZcdWIwYjdcdWIwYjlcdWIwYmFcdWIwYmJcdWIwYmRcdWIwYmVcdWIwYmZcdWIwYzBcdWIwYzFcdWIwYzJcdWIwYzNcdWIwYzZcdWIwY2FcdWIwY2JcdWIwY2NcdWIwY2RcdWIwY2VcdWIwY2ZcdWIwZDJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwZDNcdWIwZDVcdWIwZDZcdWIwZDdcdWIwZDlcdWIwZGFcdWIwZGJcdWIwZGNcdWIwZGRcdWIwZGVcdWIwZGZcdWIwZTFcdWIwZTJcdWIwZTNcdWIwZTRcdWIwZTZcdWIwZTdcdWIwZThcdWIwZTlcdWIwZWFcdWIwZWJcdWIwZWNcdWIwZWRc''@;'; put 'put ''dWIwZWVcdWIwZWZcdWIwZjBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwZjFcdWIwZjJcdWIwZjNcdWIwZjRcdWIwZjVcdWIwZjZcdWIwZjdcdWIwZjhcdWIwZjlcdWIwZmFcdWIwZmJcdWIwZmNcdWIwZmRcdWIwZmVcdWIwZmZcdWIxMDBcdWIxMDFcdWIxMDJcdWIx''@;'; put 'put ''MDNcdWIxMDRcdWIxMDVcdWIxMDZcdWIxMDdcdWIxMGFcdWIxMGRcdWIxMGVcdWIxMGZcdWIxMTFcdWIxMTRcdWIxMTVcdWIxMTZcdWIxMTdcdWIxMWFcdWIxMWVcdWIxMWZcdWIxMjBcdWIxMjFcdWIxMjJcdWIxMjZcdWIxMjdcdWIxMjlcdWIxMmFcdWIxMmJcdWIxMmRcdWIxMmVcdWIxMmZc''@;'; put 'put ''dWIxMzBcdWIxMzFcdWIxMzJcdWIxMzNcdWIxMzZcdWIxM2FcdWIxM2JcdWIxM2NcdWIxM2RcdWIxM2VcdWIxM2ZcdWIxNDJcdWIxNDNcdWIxNDVcdWIxNDZcdWIxNDdcdWIxNDlcdWIxNGFcdWIxNGJcdWIxNGNcdWIxNGRcdWIxNGVcdWIxNGZcdWIxNTJcdWIxNTNcdWIxNTZcdWIxNTdcdWIx''@;'; put 'put ''NTlcdWIxNWFcdWIxNWJcdWIxNWRcdWIxNWVcdWIxNWZcdWIxNjFcdWIxNjJcdWIxNjNcdWIxNjRcdWIxNjVcdWIxNjZcdWIxNjdcdWIxNjhcdWIxNjlcdWIxNmFcdWIxNmJcdWIxNmNcdWIxNmRcdWIxNmVcdWIxNmZcdWIxNzBcdWIxNzFcdWIxNzJcdWIxNzNcdWIxNzRcdWIxNzVcdWIxNzZc''@;'; put 'put ''dWIxNzdcdWIxN2FcdWIxN2JcdWIxN2RcdWIxN2VcdWIxN2ZcdWIxODFcdWIxODNcdWIxODRcdWIxODVcdWIxODZcdWIxODdcdWIxOGFcdWIxOGNcdWIxOGVcdWIxOGZcdWIxOTBcdWIxOTFcdWIxOTVcdWIxOTZcdWIxOTdcdWIxOTlcdWIxOWFcdWIxOWJcdWIxOWRcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxzPTA7cyE9Y1sxMzRdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzEzNF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxMzRdW3NdXT0zNDMwNCtzLGhbMzQzMDQrc109Y1sxMzRdW3NdKTtmb3IoY1sxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWIxOWVcdWIxOWZcdWIxYTBcdWIxYTFcdWIxYTJcdWIxYTNcdWIxYTRcdWIxYTVcdWIxYTZcdWIxYTdcdWIxYTlcdWIxYWFcdWIxYWJcdWIxYWNcdWIxYWRcdWIxYWVcdWIxYWZcdWIxYjBcdWIxYjFcdWIxYjJcdWIxYjNcdWIxYjRcdWIxYjVcdWIxYjZcdWIxYjdcdWIx''@;'; put 'put ''YjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIxYjlcdWIxYmFcdWIxYmJcdWIxYmNcdWIxYmRcdWIxYmVcdWIxYmZcdWIxYzBcdWIxYzFcdWIxYzJcdWIxYzNcdWIxYzRcdWIxYzVcdWIxYzZcdWIxYzdcdWIxYzhcdWIxYzlcdWIxY2FcdWIxY2JcdWIxY2RcdWIxY2Vc''@;'; put 'put ''dWIxY2ZcdWIxZDFcdWIxZDJcdWIxZDNcdWIxZDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIxZDZcdWIxZDdcdWIxZDhcdWIxZDlcdWIxZGFcdWIxZGJcdWIxZGVcdWIxZTBcdWIxZTFcdWIxZTJcdWIxZTNcdWIxZTRcdWIxZTVcdWIxZTZcdWIxZTdcdWIxZWFcdWIx''@;'; put 'put ''ZWJcdWIxZWRcdWIxZWVcdWIxZWZcdWIxZjFcdWIxZjJcdWIxZjNcdWIxZjRcdWIxZjVcdWIxZjZcdWIxZjdcdWIxZjhcdWIxZmFcdWIxZmNcdWIxZmVcdWIxZmZcdWIyMDBcdWIyMDFcdWIyMDJcdWIyMDNcdWIyMDZcdWIyMDdcdWIyMDlcdWIyMGFcdWIyMGRcdWIyMGVcdWIyMGZcdWIyMTBc''@;'; put 'put ''dWIyMTFcdWIyMTJcdWIyMTNcdWIyMTZcdWIyMThcdWIyMWFcdWIyMWJcdWIyMWNcdWIyMWRcdWIyMWVcdWIyMWZcdWIyMjFcdWIyMjJcdWIyMjNcdWIyMjRcdWIyMjVcdWIyMjZcdWIyMjdcdWIyMjhcdWIyMjlcdWIyMmFcdWIyMmJcdWIyMmNcdWIyMmRcdWIyMmVcdWIyMmZcdWIyMzBcdWIy''@;'; put 'put ''MzFcdWIyMzJcdWIyMzNcdWIyMzVcdWIyMzZcdWIyMzdcdWIyMzhcdWIyMzlcdWIyM2FcdWIyM2JcdWIyM2RcdWIyM2VcdWIyM2ZcdWIyNDBcdWIyNDFcdWIyNDJcdWIyNDNcdWIyNDRcdWIyNDVcdWIyNDZcdWIyNDdcdWIyNDhcdWIyNDlcdWIyNGFcdWIyNGJcdWIyNGNcdWIyNGRcdWIyNGVc''@;'; put 'put ''dWIyNGZcdWIyNTBcdWIyNTFcdWIyNTJcdWIyNTNcdWIyNTRcdWIyNTVcdWIyNTZcdWIyNTdcdWIyNTlcdWIyNWFcdWIyNWJcdWIyNWRcdWIyNWVcdWIyNWZcdWIyNjFcdWIyNjJcdWIyNjNcdWIyNjRcdWIyNjVcdWIyNjZcdWIyNjdcdWIyNmFcdWIyNmJcdWIyNmNcdWIyNmRcdWIyNmVcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxMzVdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzEzNV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxMzVdW3NdXT0zNDU2MCtzLGhbMzQ1NjArc109Y1sxMzVdW3NdKTtmb3IoY1sxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyNmZcdWIyNzBcdWIyNzFcdWIyNzJcdWIyNzNcdWIyNzZcdWIyNzdcdWIyNzhcdWIyNzlcdWIyN2FcdWIyN2JcdWIyN2RcdWIyN2VcdWIyN2ZcdWIyODBcdWIyODFcdWIyODJcdWIyODNcdWIyODZcdWIyODdcdWIyODhcdWIyOGFcdWIyOGJcdWIy''@;'; put 'put ''OGNcdWIyOGRcdWIyOGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyOGZcdWIyOTJcdWIyOTNcdWIyOTVcdWIyOTZcdWIyOTdcdWIyOWJcdWIyOWNcdWIyOWRcdWIyOWVcdWIyOWZcdWIyYTJcdWIyYTRcdWIyYTdcdWIyYThcdWIyYTlcdWIyYWJcdWIyYWRcdWIyYWVc''@;'; put 'put ''dWIyYWZcdWIyYjFcdWIyYjJcdWIyYjNcdWIyYjVcdWIyYjZcdWIyYjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyYjhcdWIyYjlcdWIyYmFcdWIyYmJcdWIyYmNcdWIyYmRcdWIyYmVcdWIyYmZcdWIyYzBcdWIyYzFcdWIyYzJcdWIyYzNcdWIyYzRcdWIyYzVcdWIy''@;'; put 'put ''YzZcdWIyYzdcdWIyY2FcdWIyY2JcdWIyY2RcdWIyY2VcdWIyY2ZcdWIyZDFcdWIyZDNcdWIyZDRcdWIyZDVcdWIyZDZcdWIyZDdcdWIyZGFcdWIyZGNcdWIyZGVcdWIyZGZcdWIyZTBcdWIyZTFcdWIyZTNcdWIyZTdcdWIyZTlcdWIyZWFcdWIyZjBcdWIyZjFcdWIyZjJcdWIyZjZcdWIyZmNc''@;'; put 'put ''dWIyZmRcdWIyZmVcdWIzMDJcdWIzMDNcdWIzMDVcdWIzMDZcdWIzMDdcdWIzMDlcdWIzMGFcdWIzMGJcdWIzMGNcdWIzMGRcdWIzMGVcdWIzMGZcdWIzMTJcdWIzMTZcdWIzMTdcdWIzMThcdWIzMTlcdWIzMWFcdWIzMWJcdWIzMWRcdWIzMWVcdWIzMWZcdWIzMjBcdWIzMjFcdWIzMjJcdWIz''@;'; put 'put ''MjNcdWIzMjRcdWIzMjVcdWIzMjZcdWIzMjdcdWIzMjhcdWIzMjlcdWIzMmFcdWIzMmJcdWIzMmNcdWIzMmRcdWIzMmVcdWIzMmZcdWIzMzBcdWIzMzFcdWIzMzJcdWIzMzNcdWIzMzRcdWIzMzVcdWIzMzZcdWIzMzdcdWIzMzhcdWIzMzlcdWIzM2FcdWIzM2JcdWIzM2NcdWIzM2RcdWIzM2Vc''@;'; put 'put ''dWIzM2ZcdWIzNDBcdWIzNDFcdWIzNDJcdWIzNDNcdWIzNDRcdWIzNDVcdWIzNDZcdWIzNDdcdWIzNDhcdWIzNDlcdWIzNGFcdWIzNGJcdWIzNGNcdWIzNGRcdWIzNGVcdWIzNGZcdWIzNTBcdWIzNTFcdWIzNTJcdWIzNTNcdWIzNTdcdWIzNTlcdWIzNWFcdWIzNWRcdWIzNjBcdWIzNjFcdWIz''@;'; put 'put ''NjJcdWIzNjNcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxMzZdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzEzNl1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxMzZdW3NdXT0zNDgxNitzLGhbMzQ4MTYrc109Y1sxMzZdW3NdKTtmb3IoY1sxMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzNjZcdWIzNjhcdWIzNmFcdWIzNmNcdWIzNmRcdWIzNmZcdWIzNzJcdWIzNzNcdWIzNzVcdWIzNzZcdWIzNzdcdWIzNzlcdWIzN2FcdWIzN2JcdWIzN2NcdWIzN2RcdWIzN2VcdWIzN2ZcdWIzODJcdWIzODZcdWIzODdcdWIz''@;'; put 'put ''ODhcdWIzODlcdWIzOGFcdWIzOGJcdWIzOGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzOGVcdWIzOGZcdWIzOTFcdWIzOTJcdWIzOTNcdWIzOTVcdWIzOTZcdWIzOTdcdWIzOThcdWIzOTlcdWIzOWFcdWIzOWJcdWIzOWNcdWIzOWRcdWIzOWVcdWIzOWZcdWIzYTJc''@;'; put 'put ''dWIzYTNcdWIzYTRcdWIzYTVcdWIzYTZcdWIzYTdcdWIzYTlcdWIzYWFcdWIzYWJcdWIzYWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzYWVcdWIzYWZcdWIzYjBcdWIzYjFcdWIzYjJcdWIzYjNcdWIzYjRcdWIzYjVcdWIzYjZcdWIzYjdcdWIzYjhcdWIzYjlcdWIz''@;'; put 'put ''YmFcdWIzYmJcdWIzYmNcdWIzYmRcdWIzYmVcdWIzYmZcdWIzYzBcdWIzYzFcdWIzYzJcdWIzYzNcdWIzYzZcdWIzYzdcdWIzYzlcdWIzY2FcdWIzY2RcdWIzY2ZcdWIzZDFcdWIzZDJcdWIzZDNcdWIzZDZcdWIzZDhcdWIzZGFcdWIzZGNcdWIzZGVcdWIzZGZcdWIzZTFcdWIzZTJcdWIzZTNc''@;'; put 'put ''dWIzZTVcdWIzZTZcdWIzZTdcdWIzZTlcdWIzZWFcdWIzZWJcdWIzZWNcdWIzZWRcdWIzZWVcdWIzZWZcdWIzZjBcdWIzZjFcdWIzZjJcdWIzZjNcdWIzZjRcdWIzZjVcdWIzZjZcdWIzZjdcdWIzZjhcdWIzZjlcdWIzZmFcdWIzZmJcdWIzZmRcdWIzZmVcdWIzZmZcdWI0MDBcdWI0MDFcdWI0''@;'; put 'put ''MDJcdWI0MDNcdWI0MDRcdWI0MDVcdWI0MDZcdWI0MDdcdWI0MDhcdWI0MDlcdWI0MGFcdWI0MGJcdWI0MGNcdWI0MGRcdWI0MGVcdWI0MGZcdWI0MTFcdWI0MTJcdWI0MTNcdWI0MTRcdWI0MTVcdWI0MTZcdWI0MTdcdWI0MTlcdWI0MWFcdWI0MWJcdWI0MWRcdWI0MWVcdWI0MWZcdWI0MjFc''@;'; put 'put ''dWI0MjJcdWI0MjNcdWI0MjRcdWI0MjVcdWI0MjZcdWI0MjdcdWI0MmFcdWI0MmNcdWI0MmRcdWI0MmVcdWI0MmZcdWI0MzBcdWI0MzFcdWI0MzJcdWI0MzNcdWI0MzVcdWI0MzZcdWI0MzdcdWI0MzhcdWI0MzlcdWI0M2FcdWI0M2JcdWI0M2NcdWI0M2RcdWI0M2VcdWI0M2ZcdWI0NDBcdWI0''@;'; put 'put ''NDFcdWI0NDJcdWI0NDNcdWI0NDRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxMzddLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzEzN11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxMzddW3NdXT0zNTA3MitzLGhbMzUwNzIrc109Y1sxMzddW3NdKTtmb3IoY1sxMzhdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0NDVcdWI0NDZcdWI0NDdcdWI0NDhcdWI0NDlcdWI0NGFcdWI0NGJcdWI0NGNcdWI0NGRcdWI0NGVcdWI0NGZcdWI0NTJcdWI0NTNcdWI0NTVcdWI0NTZcdWI0NTdcdWI0NTlcdWI0NWFcdWI0NWJcdWI0''@;'; put 'put ''NWNcdWI0NWRcdWI0NWVcdWI0NWZcdWI0NjJcdWI0NjRcdWI0NjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0NjdcdWI0NjhcdWI0NjlcdWI0NmFcdWI0NmJcdWI0NmRcdWI0NmVcdWI0NmZcdWI0NzBcdWI0NzFcdWI0NzJcdWI0NzNcdWI0NzRcdWI0NzVcdWI0NzZc''@;'; put 'put ''dWI0NzdcdWI0NzhcdWI0NzlcdWI0N2FcdWI0N2JcdWI0N2NcdWI0N2RcdWI0N2VcdWI0N2ZcdWI0ODFcdWI0ODJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0ODNcdWI0ODRcdWI0ODVcdWI0ODZcdWI0ODdcdWI0ODlcdWI0OGFcdWI0OGJcdWI0OGNcdWI0OGRcdWI0''@;'; put 'put ''OGVcdWI0OGZcdWI0OTBcdWI0OTFcdWI0OTJcdWI0OTNcdWI0OTRcdWI0OTVcdWI0OTZcdWI0OTdcdWI0OThcdWI0OTlcdWI0OWFcdWI0OWJcdWI0OWNcdWI0OWVcdWI0OWZcdWI0YTBcdWI0YTFcdWI0YTJcdWI0YTNcdWI0YTVcdWI0YTZcdWI0YTdcdWI0YTlcdWI0YWFcdWI0YWJcdWI0YWRc''@;'; put 'put ''dWI0YWVcdWI0YWZcdWI0YjBcdWI0YjFcdWI0YjJcdWI0YjNcdWI0YjRcdWI0YjZcdWI0YjhcdWI0YmFcdWI0YmJcdWI0YmNcdWI0YmRcdWI0YmVcdWI0YmZcdWI0YzFcdWI0YzJcdWI0YzNcdWI0YzVcdWI0YzZcdWI0YzdcdWI0YzlcdWI0Y2FcdWI0Y2JcdWI0Y2NcdWI0Y2RcdWI0Y2VcdWI0''@;'; put 'put ''Y2ZcdWI0ZDFcdWI0ZDJcdWI0ZDNcdWI0ZDRcdWI0ZDZcdWI0ZDdcdWI0ZDhcdWI0ZDlcdWI0ZGFcdWI0ZGJcdWI0ZGVcdWI0ZGZcdWI0ZTFcdWI0ZTJcdWI0ZTVcdWI0ZTdcdWI0ZThcdWI0ZTlcdWI0ZWFcdWI0ZWJcdWI0ZWVcdWI0ZjBcdWI0ZjJcdWI0ZjNcdWI0ZjRcdWI0ZjVcdWI0ZjZc''@;'; put 'put ''dWI0ZjdcdWI0ZjlcdWI0ZmFcdWI0ZmJcdWI0ZmNcdWI0ZmRcdWI0ZmVcdWI0ZmZcdWI1MDBcdWI1MDFcdWI1MDJcdWI1MDNcdWI1MDRcdWI1MDVcdWI1MDZcdWI1MDdcdWI1MDhcdWI1MDlcdWI1MGFcdWI1MGJcdWI1MGNcdWI1MGRcdWI1MGVcdWI1MGZcdWI1MTBcdWI1MTFcdWI1MTJcdWI1''@;'; put 'put ''MTNcdWI1MTZcdWI1MTdcdWI1MTlcdWI1MWFcdWI1MWRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxMzhdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzEzOF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxMzhdW3NdXT0zNTMyOCtzLGhbMzUzMjgrc109Y1sxMzhdW3NdKTtmb3IoY1sxMzldPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1MWVcdWI1MWZcdWI1MjBcdWI1MjFcdWI1MjJcdWI1MjNcdWI1MjZcdWI1MmJcdWI1MmNcdWI1MmRcdWI1MmVcdWI1MmZcdWI1MzJcdWI1MzNcdWI1MzVcdWI1MzZcdWI1MzdcdWI1''@;'; put 'put ''MzlcdWI1M2FcdWI1M2JcdWI1M2NcdWI1M2RcdWI1M2VcdWI1M2ZcdWI1NDJcdWI1NDZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1NDdcdWI1NDhcdWI1NDlcdWI1NGFcdWI1NGVcdWI1NGZcdWI1NTFcdWI1NTJcdWI1NTNcdWI1NTVcdWI1NTZcdWI1NTdcdWI1NThc''@;'; put 'put ''dWI1NTlcdWI1NWFcdWI1NWJcdWI1NWVcdWI1NjJcdWI1NjNcdWI1NjRcdWI1NjVcdWI1NjZcdWI1NjdcdWI1NjhcdWI1NjlcdWI1NmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1NmJcdWI1NmNcdWI1NmRcdWI1NmVcdWI1NmZcdWI1NzBcdWI1NzFcdWI1NzJcdWI1''@;'; put 'put ''NzNcdWI1NzRcdWI1NzVcdWI1NzZcdWI1NzdcdWI1NzhcdWI1NzlcdWI1N2FcdWI1N2JcdWI1N2NcdWI1N2RcdWI1N2VcdWI1N2ZcdWI1ODBcdWI1ODFcdWI1ODJcdWI1ODNcdWI1ODRcdWI1ODVcdWI1ODZcdWI1ODdcdWI1ODhcdWI1ODlcdWI1OGFcdWI1OGJcdWI1OGNcdWI1OGRcdWI1OGVc''@;'; put 'put ''dWI1OGZcdWI1OTBcdWI1OTFcdWI1OTJcdWI1OTNcdWI1OTRcdWI1OTVcdWI1OTZcdWI1OTdcdWI1OThcdWI1OTlcdWI1OWFcdWI1OWJcdWI1OWNcdWI1OWRcdWI1OWVcdWI1OWZcdWI1YTJcdWI1YTNcdWI1YTVcdWI1YTZcdWI1YTdcdWI1YTlcdWI1YWNcdWI1YWRcdWI1YWVcdWI1YWZcdWI1''@;'; put 'put ''YjJcdWI1YjZcdWI1YjdcdWI1YjhcdWI1YjlcdWI1YmFcdWI1YmVcdWI1YmZcdWI1YzFcdWI1YzJcdWI1YzNcdWI1YzVcdWI1YzZcdWI1YzdcdWI1YzhcdWI1YzlcdWI1Y2FcdWI1Y2JcdWI1Y2VcdWI1ZDJcdWI1ZDNcdWI1ZDRcdWI1ZDVcdWI1ZDZcdWI1ZDdcdWI1ZDlcdWI1ZGFcdWI1ZGJc''@;'; put 'put ''dWI1ZGNcdWI1ZGRcdWI1ZGVcdWI1ZGZcdWI1ZTBcdWI1ZTFcdWI1ZTJcdWI1ZTNcdWI1ZTRcdWI1ZTVcdWI1ZTZcdWI1ZTdcdWI1ZThcdWI1ZTlcdWI1ZWFcdWI1ZWJcdWI1ZWRcdWI1ZWVcdWI1ZWZcdWI1ZjBcdWI1ZjFcdWI1ZjJcdWI1ZjNcdWI1ZjRcdWI1ZjVcdWI1ZjZcdWI1ZjdcdWI1''@;'; put 'put ''ZjhcdWI1ZjlcdWI1ZmFcdWI1ZmJcdWI1ZmNcdWI1ZmRcdWI1ZmVcdWI1ZmZcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxMzldLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzEzOV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxMzldW3NdXT0zNTU4NCtzLGhbMzU1ODQrc109Y1sxMzldW3NdKTtm''@;'; put 'put ''b3IoY1sxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2MDBcdWI2MDFcdWI2MDJcdWI2MDNcdWI2MDRcdWI2MDVcdWI2MDZcdWI2MDdcdWI2MDhcdWI2MDlcdWI2MGFcdWI2MGJcdWI2MGNcdWI2MGRcdWI2MGVcdWI2''@;'; put 'put ''MGZcdWI2MTJcdWI2MTNcdWI2MTVcdWI2MTZcdWI2MTdcdWI2MTlcdWI2MWFcdWI2MWJcdWI2MWNcdWI2MWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2MWVcdWI2MWZcdWI2MjBcdWI2MjFcdWI2MjJcdWI2MjNcdWI2MjRcdWI2MjZcdWI2MjdcdWI2MjhcdWI2Mjlc''@;'; put 'put ''dWI2MmFcdWI2MmJcdWI2MmRcdWI2MmVcdWI2MmZcdWI2MzBcdWI2MzFcdWI2MzJcdWI2MzNcdWI2MzVcdWI2MzZcdWI2MzdcdWI2MzhcdWI2MzlcdWI2M2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2M2JcdWI2M2NcdWI2M2RcdWI2M2VcdWI2M2ZcdWI2NDBcdWI2''@;'; put 'put ''NDFcdWI2NDJcdWI2NDNcdWI2NDRcdWI2NDVcdWI2NDZcdWI2NDdcdWI2NDlcdWI2NGFcdWI2NGJcdWI2NGNcdWI2NGRcdWI2NGVcdWI2NGZcdWI2NTBcdWI2NTFcdWI2NTJcdWI2NTNcdWI2NTRcdWI2NTVcdWI2NTZcdWI2NTdcdWI2NThcdWI2NTlcdWI2NWFcdWI2NWJcdWI2NWNcdWI2NWRc''@;'; put 'put ''dWI2NWVcdWI2NWZcdWI2NjBcdWI2NjFcdWI2NjJcdWI2NjNcdWI2NjVcdWI2NjZcdWI2NjdcdWI2NjlcdWI2NmFcdWI2NmJcdWI2NmNcdWI2NmRcdWI2NmVcdWI2NmZcdWI2NzBcdWI2NzFcdWI2NzJcdWI2NzNcdWI2NzRcdWI2NzVcdWI2NzZcdWI2NzdcdWI2NzhcdWI2NzlcdWI2N2FcdWI2''@;'; put 'put ''N2JcdWI2N2NcdWI2N2RcdWI2N2VcdWI2N2ZcdWI2ODBcdWI2ODFcdWI2ODJcdWI2ODNcdWI2ODRcdWI2ODVcdWI2ODZcdWI2ODdcdWI2ODhcdWI2ODlcdWI2OGFcdWI2OGJcdWI2OGNcdWI2OGRcdWI2OGVcdWI2OGZcdWI2OTBcdWI2OTFcdWI2OTJcdWI2OTNcdWI2OTRcdWI2OTVcdWI2OTZc''@;'; put 'put ''dWI2OTdcdWI2OThcdWI2OTlcdWI2OWFcdWI2OWJcdWI2OWVcdWI2OWZcdWI2YTFcdWI2YTJcdWI2YTNcdWI2YTVcdWI2YTZcdWI2YTdcdWI2YThcdWI2YTlcdWI2YWFcdWI2YWRcdWI2YWVcdWI2YWZcdWI2YjBcdWI2YjJcdWI2YjNcdWI2YjRcdWI2YjVcdWI2YjZcdWI2YjdcdWI2YjhcdWI2''@;'; put 'put ''YjlcdWI2YmFcdWI2YmJcdWI2YmNcdWI2YmRcdWI2YmVcdWI2YmZcdWI2YzBcdWI2YzFcdWI2YzJcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNDBdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE0MF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNDBdW3NdXT0zNTg0MCtzLGhbMzU4NDArc109''@;'; put 'put ''Y1sxNDBdW3NdKTtmb3IoY1sxNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2YzNcdWI2YzRcdWI2YzVcdWI2YzZcdWI2YzdcdWI2YzhcdWI2YzlcdWI2Y2FcdWI2Y2JcdWI2Y2NcdWI2Y2RcdWI2Y2VcdWI2Y2ZcdWI2''@;'; put 'put ''ZDBcdWI2ZDFcdWI2ZDJcdWI2ZDNcdWI2ZDVcdWI2ZDZcdWI2ZDdcdWI2ZDhcdWI2ZDlcdWI2ZGFcdWI2ZGJcdWI2ZGNcdWI2ZGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2ZGVcdWI2ZGZcdWI2ZTBcdWI2ZTFcdWI2ZTJcdWI2ZTNcdWI2ZTRcdWI2ZTVcdWI2ZTZc''@;'; put 'put ''dWI2ZTdcdWI2ZThcdWI2ZTlcdWI2ZWFcdWI2ZWJcdWI2ZWNcdWI2ZWRcdWI2ZWVcdWI2ZWZcdWI2ZjFcdWI2ZjJcdWI2ZjNcdWI2ZjVcdWI2ZjZcdWI2ZjdcdWI2ZjlcdWI2ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2ZmJcdWI2ZmNcdWI2ZmRcdWI2ZmVcdWI2''@;'; put 'put ''ZmZcdWI3MDJcdWI3MDNcdWI3MDRcdWI3MDZcdWI3MDdcdWI3MDhcdWI3MDlcdWI3MGFcdWI3MGJcdWI3MGNcdWI3MGRcdWI3MGVcdWI3MGZcdWI3MTBcdWI3MTFcdWI3MTJcdWI3MTNcdWI3MTRcdWI3MTVcdWI3MTZcdWI3MTdcdWI3MThcdWI3MTlcdWI3MWFcdWI3MWJcdWI3MWNcdWI3MWRc''@;'; put 'put ''dWI3MWVcdWI3MWZcdWI3MjBcdWI3MjFcdWI3MjJcdWI3MjNcdWI3MjRcdWI3MjVcdWI3MjZcdWI3MjdcdWI3MmFcdWI3MmJcdWI3MmRcdWI3MmVcdWI3MzFcdWI3MzJcdWI3MzNcdWI3MzRcdWI3MzVcdWI3MzZcdWI3MzdcdWI3M2FcdWI3M2NcdWI3M2RcdWI3M2VcdWI3M2ZcdWI3NDBcdWI3''@;'; put 'put ''NDFcdWI3NDJcdWI3NDNcdWI3NDVcdWI3NDZcdWI3NDdcdWI3NDlcdWI3NGFcdWI3NGJcdWI3NGRcdWI3NGVcdWI3NGZcdWI3NTBcdWI3NTFcdWI3NTJcdWI3NTNcdWI3NTZcdWI3NTdcdWI3NThcdWI3NTlcdWI3NWFcdWI3NWJcdWI3NWNcdWI3NWRcdWI3NWVcdWI3NWZcdWI3NjFcdWI3NjJc''@;'; put 'put ''dWI3NjNcdWI3NjVcdWI3NjZcdWI3NjdcdWI3NjlcdWI3NmFcdWI3NmJcdWI3NmNcdWI3NmRcdWI3NmVcdWI3NmZcdWI3NzJcdWI3NzRcdWI3NzZcdWI3NzdcdWI3NzhcdWI3NzlcdWI3N2FcdWI3N2JcdWI3N2VcdWI3N2ZcdWI3ODFcdWI3ODJcdWI3ODNcdWI3ODVcdWI3ODZcdWI3ODdcdWI3''@;'; put 'put ''ODhcdWI3ODlcdWI3OGFcdWI3OGJcdWI3OGVcdWI3OTNcdWI3OTRcdWI3OTVcdWI3OWFcdWI3OWJcdWI3OWRcdWI3OWVcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNDFdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE0MV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNDFdW3NdXT0zNjA5Nitz''@;'; put 'put ''LGhbMzYwOTYrc109Y1sxNDFdW3NdKTtmb3IoY1sxNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3OWZcdWI3YTFcdWI3YTJcdWI3YTNcdWI3YTRcdWI3YTVcdWI3YTZcdWI3YTdcdWI3YWFcdWI3YWVcdWI3YWZcdWI3''@;'; put 'put ''YjBcdWI3YjFcdWI3YjJcdWI3YjNcdWI3YjZcdWI3YjdcdWI3YjlcdWI3YmFcdWI3YmJcdWI3YmNcdWI3YmRcdWI3YmVcdWI3YmZcdWI3YzBcdWI3YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3YzJcdWI3YzNcdWI3YzRcdWI3YzVcdWI3YzZcdWI3YzhcdWI3Y2Fc''@;'; put 'put ''dWI3Y2JcdWI3Y2NcdWI3Y2RcdWI3Y2VcdWI3Y2ZcdWI3ZDBcdWI3ZDFcdWI3ZDJcdWI3ZDNcdWI3ZDRcdWI3ZDVcdWI3ZDZcdWI3ZDdcdWI3ZDhcdWI3ZDlcdWI3ZGFcdWI3ZGJcdWI3ZGNcdWI3ZGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3ZGVcdWI3ZGZcdWI3''@;'; put 'put ''ZTBcdWI3ZTFcdWI3ZTJcdWI3ZTNcdWI3ZTRcdWI3ZTVcdWI3ZTZcdWI3ZTdcdWI3ZThcdWI3ZTlcdWI3ZWFcdWI3ZWJcdWI3ZWVcdWI3ZWZcdWI3ZjFcdWI3ZjJcdWI3ZjNcdWI3ZjVcdWI3ZjZcdWI3ZjdcdWI3ZjhcdWI3ZjlcdWI3ZmFcdWI3ZmJcdWI3ZmVcdWI4MDJcdWI4MDNcdWI4MDRc''@;'; put 'put ''dWI4MDVcdWI4MDZcdWI4MGFcdWI4MGJcdWI4MGRcdWI4MGVcdWI4MGZcdWI4MTFcdWI4MTJcdWI4MTNcdWI4MTRcdWI4MTVcdWI4MTZcdWI4MTdcdWI4MWFcdWI4MWNcdWI4MWVcdWI4MWZcdWI4MjBcdWI4MjFcdWI4MjJcdWI4MjNcdWI4MjZcdWI4MjdcdWI4MjlcdWI4MmFcdWI4MmJcdWI4''@;'; put 'put ''MmRcdWI4MmVcdWI4MmZcdWI4MzBcdWI4MzFcdWI4MzJcdWI4MzNcdWI4MzZcdWI4M2FcdWI4M2JcdWI4M2NcdWI4M2RcdWI4M2VcdWI4M2ZcdWI4NDFcdWI4NDJcdWI4NDNcdWI4NDVcdWI4NDZcdWI4NDdcdWI4NDhcdWI4NDlcdWI4NGFcdWI4NGJcdWI4NGNcdWI4NGRcdWI4NGVcdWI4NGZc''@;'; put 'put ''dWI4NTBcdWI4NTJcdWI4NTRcdWI4NTVcdWI4NTZcdWI4NTdcdWI4NThcdWI4NTlcdWI4NWFcdWI4NWJcdWI4NWVcdWI4NWZcdWI4NjFcdWI4NjJcdWI4NjNcdWI4NjVcdWI4NjZcdWI4NjdcdWI4NjhcdWI4NjlcdWI4NmFcdWI4NmJcdWI4NmVcdWI4NzBcdWI4NzJcdWI4NzNcdWI4NzRcdWI4''@;'; put 'put ''NzVcdWI4NzZcdWI4NzdcdWI4NzlcdWI4N2FcdWI4N2JcdWI4N2RcdWI4N2VcdWI4N2ZcdWI4ODBcdWI4ODFcdWI4ODJcdWI4ODNcdWI4ODRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNDJdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE0Ml1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNDJd''@;'; put 'put ''W3NdXT0zNjM1MitzLGhbMzYzNTIrc109Y1sxNDJdW3NdKTtmb3IoY1sxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4ODVcdWI4ODZcdWI4ODdcdWI4ODhcdWI4ODlcdWI4OGFcdWI4OGJcdWI4OGNcdWI4OGVcdWI4''@;'; put 'put ''OGZcdWI4OTBcdWI4OTFcdWI4OTJcdWI4OTNcdWI4OTRcdWI4OTVcdWI4OTZcdWI4OTdcdWI4OThcdWI4OTlcdWI4OWFcdWI4OWJcdWI4OWNcdWI4OWRcdWI4OWVcdWI4OWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4YTBcdWI4YTFcdWI4YTJcdWI4YTNcdWI4YTRc''@;'; put 'put ''dWI4YTVcdWI4YTZcdWI4YTdcdWI4YTlcdWI4YWFcdWI4YWJcdWI4YWNcdWI4YWRcdWI4YWVcdWI4YWZcdWI4YjFcdWI4YjJcdWI4YjNcdWI4YjVcdWI4YjZcdWI4YjdcdWI4YjlcdWI4YmFcdWI4YmJcdWI4YmNcdWI4YmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4''@;'; put 'put ''YmVcdWI4YmZcdWI4YzJcdWI4YzRcdWI4YzZcdWI4YzdcdWI4YzhcdWI4YzlcdWI4Y2FcdWI4Y2JcdWI4Y2RcdWI4Y2VcdWI4Y2ZcdWI4ZDFcdWI4ZDJcdWI4ZDNcdWI4ZDVcdWI4ZDZcdWI4ZDdcdWI4ZDhcdWI4ZDlcdWI4ZGFcdWI4ZGJcdWI4ZGNcdWI4ZGVcdWI4ZTBcdWI4ZTJcdWI4ZTNc''@;'; put 'put ''dWI4ZTRcdWI4ZTVcdWI4ZTZcdWI4ZTdcdWI4ZWFcdWI4ZWJcdWI4ZWRcdWI4ZWVcdWI4ZWZcdWI4ZjFcdWI4ZjJcdWI4ZjNcdWI4ZjRcdWI4ZjVcdWI4ZjZcdWI4ZjdcdWI4ZmFcdWI4ZmNcdWI4ZmVcdWI4ZmZcdWI5MDBcdWI5MDFcdWI5MDJcdWI5MDNcdWI5MDVcdWI5MDZcdWI5MDdcdWI5''@;'; put 'put ''MDhcdWI5MDlcdWI5MGFcdWI5MGJcdWI5MGNcdWI5MGRcdWI5MGVcdWI5MGZcdWI5MTBcdWI5MTFcdWI5MTJcdWI5MTNcdWI5MTRcdWI5MTVcdWI5MTZcdWI5MTdcdWI5MTlcdWI5MWFcdWI5MWJcdWI5MWNcdWI5MWRcdWI5MWVcdWI5MWZcdWI5MjFcdWI5MjJcdWI5MjNcdWI5MjRcdWI5MjVc''@;'; put 'put ''dWI5MjZcdWI5MjdcdWI5MjhcdWI5MjlcdWI5MmFcdWI5MmJcdWI5MmNcdWI5MmRcdWI5MmVcdWI5MmZcdWI5MzBcdWI5MzFcdWI5MzJcdWI5MzNcdWI5MzRcdWI5MzVcdWI5MzZcdWI5MzdcdWI5MzhcdWI5MzlcdWI5M2FcdWI5M2JcdWI5M2VcdWI5M2ZcdWI5NDFcdWI5NDJcdWI5NDNcdWI5''@;'; put 'put ''NDVcdWI5NDZcdWI5NDdcdWI5NDhcdWI5NDlcdWI5NGFcdWI5NGJcdWI5NGRcdWI5NGVcdWI5NTBcdWI5NTJcdWI5NTNcdWI5NTRcdWI5NTVcdWI5NTZcdWI5NTdcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNDNdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE0M11bc10uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKHlbY1sxNDNdW3NdXT0zNjYwOCtzLGhbMzY2MDgrc109Y1sxNDNdW3NdKTtmb3IoY1sxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI5NWFcdWI5NWJcdWI5NWRcdWI5NWVcdWI5NWZcdWI5NjFcdWI5NjJcdWI5''@;'; put 'put ''NjNcdWI5NjRcdWI5NjVcdWI5NjZcdWI5NjdcdWI5NmFcdWI5NmNcdWI5NmVcdWI5NmZcdWI5NzBcdWI5NzFcdWI5NzJcdWI5NzNcdWI5NzZcdWI5NzdcdWI5NzlcdWI5N2FcdWI5N2JcdWI5N2RcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI5N2VcdWI5N2ZcdWI5ODBc''@;'; put 'put ''dWI5ODFcdWI5ODJcdWI5ODNcdWI5ODZcdWI5ODhcdWI5OGJcdWI5OGNcdWI5OGZcdWI5OTBcdWI5OTFcdWI5OTJcdWI5OTNcdWI5OTRcdWI5OTVcdWI5OTZcdWI5OTdcdWI5OThcdWI5OTlcdWI5OWFcdWI5OWJcdWI5OWNcdWI5OWRcdWI5OWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWI5OWZcdWI5YTBcdWI5YTFcdWI5YTJcdWI5YTNcdWI5YTRcdWI5YTVcdWI5YTZcdWI5YTdcdWI5YThcdWI5YTlcdWI5YWFcdWI5YWJcdWI5YWVcdWI5YWZcdWI5YjFcdWI5YjJcdWI5YjNcdWI5YjVcdWI5YjZcdWI5YjdcdWI5YjhcdWI5YjlcdWI5YmFcdWI5YmJcdWI5YmVc''@;'; put 'put ''dWI5YzBcdWI5YzJcdWI5YzNcdWI5YzRcdWI5YzVcdWI5YzZcdWI5YzdcdWI5Y2FcdWI5Y2JcdWI5Y2RcdWI5ZDNcdWI5ZDRcdWI5ZDVcdWI5ZDZcdWI5ZDdcdWI5ZGFcdWI5ZGNcdWI5ZGZcdWI5ZTBcdWI5ZTJcdWI5ZTZcdWI5ZTdcdWI5ZTlcdWI5ZWFcdWI5ZWJcdWI5ZWRcdWI5ZWVcdWI5''@;'; put 'put ''ZWZcdWI5ZjBcdWI5ZjFcdWI5ZjJcdWI5ZjNcdWI5ZjZcdWI5ZmJcdWI5ZmNcdWI5ZmRcdWI5ZmVcdWI5ZmZcdWJhMDJcdWJhMDNcdWJhMDRcdWJhMDVcdWJhMDZcdWJhMDdcdWJhMDlcdWJhMGFcdWJhMGJcdWJhMGNcdWJhMGRcdWJhMGVcdWJhMGZcdWJhMTBcdWJhMTFcdWJhMTJcdWJhMTNc''@;'; put 'put ''dWJhMTRcdWJhMTZcdWJhMTdcdWJhMThcdWJhMTlcdWJhMWFcdWJhMWJcdWJhMWNcdWJhMWRcdWJhMWVcdWJhMWZcdWJhMjBcdWJhMjFcdWJhMjJcdWJhMjNcdWJhMjRcdWJhMjVcdWJhMjZcdWJhMjdcdWJhMjhcdWJhMjlcdWJhMmFcdWJhMmJcdWJhMmNcdWJhMmRcdWJhMmVcdWJhMmZcdWJh''@;'; put 'put ''MzBcdWJhMzFcdWJhMzJcdWJhMzNcdWJhMzRcdWJhMzVcdWJhMzZcdWJhMzdcdWJhM2FcdWJhM2JcdWJhM2RcdWJhM2VcdWJhM2ZcdWJhNDFcdWJhNDNcdWJhNDRcdWJhNDVcdWJhNDZcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNDRdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE0NF1bc10u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKHlbY1sxNDRdW3NdXT0zNjg2NCtzLGhbMzY4NjQrc109Y1sxNDRdW3NdKTtmb3IoY1sxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhNDdcdWJhNGFcdWJhNGNcdWJhNGZcdWJhNTBcdWJh''@;'; put 'put ''NTFcdWJhNTJcdWJhNTZcdWJhNTdcdWJhNTlcdWJhNWFcdWJhNWJcdWJhNWRcdWJhNWVcdWJhNWZcdWJhNjBcdWJhNjFcdWJhNjJcdWJhNjNcdWJhNjZcdWJhNmFcdWJhNmJcdWJhNmNcdWJhNmRcdWJhNmVcdWJhNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhNzJc''@;'; put 'put ''dWJhNzNcdWJhNzVcdWJhNzZcdWJhNzdcdWJhNzlcdWJhN2FcdWJhN2JcdWJhN2NcdWJhN2RcdWJhN2VcdWJhN2ZcdWJhODBcdWJhODFcdWJhODJcdWJhODZcdWJhODhcdWJhODlcdWJhOGFcdWJhOGJcdWJhOGRcdWJhOGVcdWJhOGZcdWJhOTBcdWJhOTFcdWJhOTJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhOTNcdWJhOTRcdWJhOTVcdWJhOTZcdWJhOTdcdWJhOThcdWJhOTlcdWJhOWFcdWJhOWJcdWJhOWNcdWJhOWRcdWJhOWVcdWJhOWZcdWJhYTBcdWJhYTFcdWJhYTJcdWJhYTNcdWJhYTRcdWJhYTVcdWJhYTZcdWJhYTdcdWJhYWFcdWJhYWRcdWJhYWVc''@;'; put 'put ''dWJhYWZcdWJhYjFcdWJhYjNcdWJhYjRcdWJhYjVcdWJhYjZcdWJhYjdcdWJhYmFcdWJhYmNcdWJhYmVcdWJhYmZcdWJhYzBcdWJhYzFcdWJhYzJcdWJhYzNcdWJhYzVcdWJhYzZcdWJhYzdcdWJhYzlcdWJhY2FcdWJhY2JcdWJhY2NcdWJhY2RcdWJhY2VcdWJhY2ZcdWJhZDBcdWJhZDFcdWJh''@;'; put 'put ''ZDJcdWJhZDNcdWJhZDRcdWJhZDVcdWJhZDZcdWJhZDdcdWJhZGFcdWJhZGJcdWJhZGNcdWJhZGRcdWJhZGVcdWJhZGZcdWJhZTBcdWJhZTFcdWJhZTJcdWJhZTNcdWJhZTRcdWJhZTVcdWJhZTZcdWJhZTdcdWJhZThcdWJhZTlcdWJhZWFcdWJhZWJcdWJhZWNcdWJhZWRcdWJhZWVcdWJhZWZc''@;'; put 'put ''dWJhZjBcdWJhZjFcdWJhZjJcdWJhZjNcdWJhZjRcdWJhZjVcdWJhZjZcdWJhZjdcdWJhZjhcdWJhZjlcdWJhZmFcdWJhZmJcdWJhZmRcdWJhZmVcdWJhZmZcdWJiMDFcdWJiMDJcdWJiMDNcdWJiMDVcdWJiMDZcdWJiMDdcdWJiMDhcdWJiMDlcdWJiMGFcdWJiMGJcdWJiMGNcdWJiMGVcdWJi''@;'; put 'put ''MTBcdWJiMTJcdWJiMTNcdWJiMTRcdWJiMTVcdWJiMTZcdWJiMTdcdWJiMTlcdWJiMWFcdWJiMWJcdWJiMWRcdWJiMWVcdWJiMWZcdWJiMjFcdWJiMjJcdWJiMjNcdWJiMjRcdWJiMjVcdWJiMjZcdWJiMjdcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNDVdLmxlbmd0aDsrK3MpNjU1MzMh''@;'; put 'put ''PT1jWzE0NV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNDVdW3NdXT0zNzEyMCtzLGhbMzcxMjArc109Y1sxNDVdW3NdKTtmb3IoY1sxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiMjhcdWJiMmFcdWJiMmNcdWJi''@;'; put 'put ''MmRcdWJiMmVcdWJiMmZcdWJiMzBcdWJiMzFcdWJiMzJcdWJiMzNcdWJiMzdcdWJiMzlcdWJiM2FcdWJiM2ZcdWJiNDBcdWJiNDFcdWJiNDJcdWJiNDNcdWJiNDZcdWJiNDhcdWJiNGFcdWJiNGJcdWJiNGNcdWJiNGVcdWJiNTFcdWJiNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWJiNTNcdWJiNTVcdWJiNTZcdWJiNTdcdWJiNTlcdWJiNWFcdWJiNWJcdWJiNWNcdWJiNWRcdWJiNWVcdWJiNWZcdWJiNjBcdWJiNjJcdWJiNjRcdWJiNjVcdWJiNjZcdWJiNjdcdWJiNjhcdWJiNjlcdWJiNmFcdWJiNmJcdWJiNmRcdWJiNmVcdWJiNmZcdWJiNzBcdWJiNzFcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiNzJcdWJiNzNcdWJiNzRcdWJiNzVcdWJiNzZcdWJiNzdcdWJiNzhcdWJiNzlcdWJiN2FcdWJiN2JcdWJiN2NcdWJiN2RcdWJiN2VcdWJiN2ZcdWJiODBcdWJiODFcdWJiODJcdWJiODNcdWJiODRcdWJiODVcdWJiODZcdWJiODdc''@;'; put 'put ''dWJiODlcdWJiOGFcdWJiOGJcdWJiOGRcdWJiOGVcdWJiOGZcdWJiOTFcdWJiOTJcdWJiOTNcdWJiOTRcdWJiOTVcdWJiOTZcdWJiOTdcdWJiOThcdWJiOTlcdWJiOWFcdWJiOWJcdWJiOWNcdWJiOWRcdWJiOWVcdWJiOWZcdWJiYTBcdWJiYTFcdWJiYTJcdWJiYTNcdWJiYTVcdWJiYTZcdWJi''@;'; put 'put ''YTdcdWJiYTlcdWJiYWFcdWJiYWJcdWJiYWRcdWJiYWVcdWJiYWZcdWJiYjBcdWJiYjFcdWJiYjJcdWJiYjNcdWJiYjVcdWJiYjZcdWJiYjhcdWJiYjlcdWJiYmFcdWJiYmJcdWJiYmNcdWJiYmRcdWJiYmVcdWJiYmZcdWJiYzFcdWJiYzJcdWJiYzNcdWJiYzVcdWJiYzZcdWJiYzdcdWJiYzlc''@;'; put 'put ''dWJiY2FcdWJiY2JcdWJiY2NcdWJiY2RcdWJiY2VcdWJiY2ZcdWJiZDFcdWJiZDJcdWJiZDRcdWJiZDVcdWJiZDZcdWJiZDdcdWJiZDhcdWJiZDlcdWJiZGFcdWJiZGJcdWJiZGNcdWJiZGRcdWJiZGVcdWJiZGZcdWJiZTBcdWJiZTFcdWJiZTJcdWJiZTNcdWJiZTRcdWJiZTVcdWJiZTZcdWJi''@;'; put 'put ''ZTdcdWJiZThcdWJiZTlcdWJiZWFcdWJiZWJcdWJiZWNcdWJiZWRcdWJiZWVcdWJiZWZcdWJiZjBcdWJiZjFcdWJiZjJcdWJiZjNcdWJiZjRcdWJiZjVcdWJiZjZcdWJiZjdcdWJiZmFcdWJiZmJcdWJiZmRcdWJiZmVcdWJjMDFcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNDZdLmxlbmd0''@;'; put 'put ''aDsrK3MpNjU1MzMhPT1jWzE0Nl1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNDZdW3NdXT0zNzM3NitzLGhbMzczNzYrc109Y1sxNDZdW3NdKTtmb3IoY1sxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjMDNcdWJj''@;'; put 'put ''MDRcdWJjMDVcdWJjMDZcdWJjMDdcdWJjMGFcdWJjMGVcdWJjMTBcdWJjMTJcdWJjMTNcdWJjMTlcdWJjMWFcdWJjMjBcdWJjMjFcdWJjMjJcdWJjMjNcdWJjMjZcdWJjMjhcdWJjMmFcdWJjMmJcdWJjMmNcdWJjMmVcdWJjMmZcdWJjMzJcdWJjMzNcdWJjMzVcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWJjMzZcdWJjMzdcdWJjMzlcdWJjM2FcdWJjM2JcdWJjM2NcdWJjM2RcdWJjM2VcdWJjM2ZcdWJjNDJcdWJjNDZcdWJjNDdcdWJjNDhcdWJjNGFcdWJjNGJcdWJjNGVcdWJjNGZcdWJjNTFcdWJjNTJcdWJjNTNcdWJjNTRcdWJjNTVcdWJjNTZcdWJjNTdcdWJj''@;'; put 'put ''NThcdWJjNTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjNWFcdWJjNWJcdWJjNWNcdWJjNWVcdWJjNWZcdWJjNjBcdWJjNjFcdWJjNjJcdWJjNjNcdWJjNjRcdWJjNjVcdWJjNjZcdWJjNjdcdWJjNjhcdWJjNjlcdWJjNmFcdWJjNmJcdWJjNmNcdWJjNmRcdWJjNmVc''@;'; put 'put ''dWJjNmZcdWJjNzBcdWJjNzFcdWJjNzJcdWJjNzNcdWJjNzRcdWJjNzVcdWJjNzZcdWJjNzdcdWJjNzhcdWJjNzlcdWJjN2FcdWJjN2JcdWJjN2NcdWJjN2RcdWJjN2VcdWJjN2ZcdWJjODBcdWJjODFcdWJjODJcdWJjODNcdWJjODZcdWJjODdcdWJjODlcdWJjOGFcdWJjOGRcdWJjOGZcdWJj''@;'; put 'put ''OTBcdWJjOTFcdWJjOTJcdWJjOTNcdWJjOTZcdWJjOThcdWJjOWJcdWJjOWNcdWJjOWRcdWJjOWVcdWJjOWZcdWJjYTJcdWJjYTNcdWJjYTVcdWJjYTZcdWJjYTlcdWJjYWFcdWJjYWJcdWJjYWNcdWJjYWRcdWJjYWVcdWJjYWZcdWJjYjJcdWJjYjZcdWJjYjdcdWJjYjhcdWJjYjlcdWJjYmFc''@;'; put 'put ''dWJjYmJcdWJjYmVcdWJjYmZcdWJjYzFcdWJjYzJcdWJjYzNcdWJjYzVcdWJjYzZcdWJjYzdcdWJjYzhcdWJjYzlcdWJjY2FcdWJjY2JcdWJjY2NcdWJjY2VcdWJjZDJcdWJjZDNcdWJjZDRcdWJjZDZcdWJjZDdcdWJjZDlcdWJjZGFcdWJjZGJcdWJjZGRcdWJjZGVcdWJjZGZcdWJjZTBcdWJj''@;'; put 'put ''ZTFcdWJjZTJcdWJjZTNcdWJjZTRcdWJjZTVcdWJjZTZcdWJjZTdcdWJjZThcdWJjZTlcdWJjZWFcdWJjZWJcdWJjZWNcdWJjZWRcdWJjZWVcdWJjZWZcdWJjZjBcdWJjZjFcdWJjZjJcdWJjZjNcdWJjZjdcdWJjZjlcdWJjZmFcdWJjZmJcdWJjZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9''@;'; put 'put ''Y1sxNDddLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE0N11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNDddW3NdXT0zNzYzMitzLGhbMzc2MzIrc109Y1sxNDddW3NdKTtmb3IoY1sxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWJjZmVcdWJjZmZcdWJkMDBcdWJkMDFcdWJkMDJcdWJkMDNcdWJkMDZcdWJkMDhcdWJkMGFcdWJkMGJcdWJkMGNcdWJkMGRcdWJkMGVcdWJkMGZcdWJkMTFcdWJkMTJcdWJkMTNcdWJkMTVcdWJkMTZcdWJkMTdcdWJkMThcdWJkMTlcdWJkMWFcdWJkMWJcdWJkMWNcdWJkMWRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkMWVcdWJkMWZcdWJkMjBcdWJkMjFcdWJkMjJcdWJkMjNcdWJkMjVcdWJkMjZcdWJkMjdcdWJkMjhcdWJkMjlcdWJkMmFcdWJkMmJcdWJkMmRcdWJkMmVcdWJkMmZcdWJkMzBcdWJkMzFcdWJkMzJcdWJkMzNcdWJkMzRcdWJkMzVcdWJk''@;'; put 'put ''MzZcdWJkMzdcdWJkMzhcdWJkMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkM2FcdWJkM2JcdWJkM2NcdWJkM2RcdWJkM2VcdWJkM2ZcdWJkNDFcdWJkNDJcdWJkNDNcdWJkNDRcdWJkNDVcdWJkNDZcdWJkNDdcdWJkNGFcdWJkNGJcdWJkNGRcdWJkNGVcdWJkNGZc''@;'; put 'put ''dWJkNTFcdWJkNTJcdWJkNTNcdWJkNTRcdWJkNTVcdWJkNTZcdWJkNTdcdWJkNWFcdWJkNWJcdWJkNWNcdWJkNWRcdWJkNWVcdWJkNWZcdWJkNjBcdWJkNjFcdWJkNjJcdWJkNjNcdWJkNjVcdWJkNjZcdWJkNjdcdWJkNjlcdWJkNmFcdWJkNmJcdWJkNmNcdWJkNmRcdWJkNmVcdWJkNmZcdWJk''@;'; put 'put ''NzBcdWJkNzFcdWJkNzJcdWJkNzNcdWJkNzRcdWJkNzVcdWJkNzZcdWJkNzdcdWJkNzhcdWJkNzlcdWJkN2FcdWJkN2JcdWJkN2NcdWJkN2RcdWJkN2VcdWJkN2ZcdWJkODJcdWJkODNcdWJkODVcdWJkODZcdWJkOGJcdWJkOGNcdWJkOGRcdWJkOGVcdWJkOGZcdWJkOTJcdWJkOTRcdWJkOTZc''@;'; put 'put ''dWJkOTdcdWJkOThcdWJkOWJcdWJkOWRcdWJkOWVcdWJkOWZcdWJkYTBcdWJkYTFcdWJkYTJcdWJkYTNcdWJkYTVcdWJkYTZcdWJkYTdcdWJkYThcdWJkYTlcdWJkYWFcdWJkYWJcdWJkYWNcdWJkYWRcdWJkYWVcdWJkYWZcdWJkYjFcdWJkYjJcdWJkYjNcdWJkYjRcdWJkYjVcdWJkYjZcdWJk''@;'; put 'put ''YjdcdWJkYjlcdWJkYmFcdWJkYmJcdWJkYmNcdWJkYmRcdWJkYmVcdWJkYmZcdWJkYzBcdWJkYzFcdWJkYzJcdWJkYzNcdWJkYzRcdWJkYzVcdWJkYzZcdWJkYzdcdWJkYzhcdWJkYzlcdWJkY2FcdWJkY2JcdWJkY2NcdWJkY2RcdWJkY2VcdWJkY2ZcdWJkZDBcdWJkZDFcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxzPTA7cyE9Y1sxNDhdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE0OF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNDhdW3NdXT0zNzg4OCtzLGhbMzc4ODgrc109Y1sxNDhdW3NdKTtmb3IoY1sxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWJkZDJcdWJkZDNcdWJkZDZcdWJkZDdcdWJkZDlcdWJkZGFcdWJkZGJcdWJkZGRcdWJkZGVcdWJkZGZcdWJkZTBcdWJkZTFcdWJkZTJcdWJkZTNcdWJkZTRcdWJkZTVcdWJkZTZcdWJkZTdcdWJkZThcdWJkZWFcdWJkZWJcdWJkZWNcdWJkZWRcdWJkZWVcdWJkZWZc''@;'; put 'put ''dWJkZjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkZjJcdWJkZjNcdWJkZjVcdWJkZjZcdWJkZjdcdWJkZjlcdWJkZmFcdWJkZmJcdWJkZmNcdWJkZmRcdWJkZmVcdWJkZmZcdWJlMDFcdWJlMDJcdWJlMDRcdWJlMDZcdWJlMDdcdWJlMDhcdWJlMDlcdWJlMGFcdWJl''@;'; put 'put ''MGJcdWJlMGVcdWJlMGZcdWJlMTFcdWJlMTJcdWJlMTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlMTVcdWJlMTZcdWJlMTdcdWJlMThcdWJlMTlcdWJlMWFcdWJlMWJcdWJlMWVcdWJlMjBcdWJlMjFcdWJlMjJcdWJlMjNcdWJlMjRcdWJlMjVcdWJlMjZcdWJlMjdc''@;'; put 'put ''dWJlMjhcdWJlMjlcdWJlMmFcdWJlMmJcdWJlMmNcdWJlMmRcdWJlMmVcdWJlMmZcdWJlMzBcdWJlMzFcdWJlMzJcdWJlMzNcdWJlMzRcdWJlMzVcdWJlMzZcdWJlMzdcdWJlMzhcdWJlMzlcdWJlM2FcdWJlM2JcdWJlM2NcdWJlM2RcdWJlM2VcdWJlM2ZcdWJlNDBcdWJlNDFcdWJlNDJcdWJl''@;'; put 'put ''NDNcdWJlNDZcdWJlNDdcdWJlNDlcdWJlNGFcdWJlNGJcdWJlNGRcdWJlNGZcdWJlNTBcdWJlNTFcdWJlNTJcdWJlNTNcdWJlNTZcdWJlNThcdWJlNWNcdWJlNWRcdWJlNWVcdWJlNWZcdWJlNjJcdWJlNjNcdWJlNjVcdWJlNjZcdWJlNjdcdWJlNjlcdWJlNmJcdWJlNmNcdWJlNmRcdWJlNmVc''@;'; put 'put ''dWJlNmZcdWJlNzJcdWJlNzZcdWJlNzdcdWJlNzhcdWJlNzlcdWJlN2FcdWJlN2VcdWJlN2ZcdWJlODFcdWJlODJcdWJlODNcdWJlODVcdWJlODZcdWJlODdcdWJlODhcdWJlODlcdWJlOGFcdWJlOGJcdWJlOGVcdWJlOTJcdWJlOTNcdWJlOTRcdWJlOTVcdWJlOTZcdWJlOTdcdWJlOWFcdWJl''@;'; put 'put ''OWJcdWJlOWNcdWJlOWRcdWJlOWVcdWJlOWZcdWJlYTBcdWJlYTFcdWJlYTJcdWJlYTNcdWJlYTRcdWJlYTVcdWJlYTZcdWJlYTdcdWJlYTlcdWJlYWFcdWJlYWJcdWJlYWNcdWJlYWRcdWJlYWVcdWJlYWZcdWJlYjBcdWJlYjFcdWJlYjJcdWJlYjNcdWJlYjRcdWJlYjVcdWJlYjZcdWJlYjdc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNDldLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE0OV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNDldW3NdXT0zODE0NCtzLGhbMzgxNDQrc109Y1sxNDldW3NdKTtmb3IoY1sxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlYjhcdWJlYjlcdWJlYmFcdWJlYmJcdWJlYmNcdWJlYmRcdWJlYmVcdWJlYmZcdWJlYzBcdWJlYzFcdWJlYzJcdWJlYzNcdWJlYzRcdWJlYzVcdWJlYzZcdWJlYzdcdWJlYzhcdWJlYzlcdWJlY2FcdWJlY2JcdWJlY2NcdWJlY2RcdWJlY2Vc''@;'; put 'put ''dWJlY2ZcdWJlZDJcdWJlZDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlZDVcdWJlZDZcdWJlZDlcdWJlZGFcdWJlZGJcdWJlZGNcdWJlZGRcdWJlZGVcdWJlZGZcdWJlZTFcdWJlZTJcdWJlZTZcdWJlZTdcdWJlZThcdWJlZTlcdWJlZWFcdWJlZWJcdWJlZWRcdWJl''@;'; put 'put ''ZWVcdWJlZWZcdWJlZjBcdWJlZjFcdWJlZjJcdWJlZjNcdWJlZjRcdWJlZjVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlZjZcdWJlZjdcdWJlZjhcdWJlZjlcdWJlZmFcdWJlZmJcdWJlZmNcdWJlZmRcdWJlZmVcdWJlZmZcdWJmMDBcdWJmMDJcdWJmMDNcdWJmMDRc''@;'; put 'put ''dWJmMDVcdWJmMDZcdWJmMDdcdWJmMGFcdWJmMGJcdWJmMGNcdWJmMGRcdWJmMGVcdWJmMGZcdWJmMTBcdWJmMTFcdWJmMTJcdWJmMTNcdWJmMTRcdWJmMTVcdWJmMTZcdWJmMTdcdWJmMWFcdWJmMWVcdWJmMWZcdWJmMjBcdWJmMjFcdWJmMjJcdWJmMjNcdWJmMjRcdWJmMjVcdWJmMjZcdWJm''@;'; put 'put ''MjdcdWJmMjhcdWJmMjlcdWJmMmFcdWJmMmJcdWJmMmNcdWJmMmRcdWJmMmVcdWJmMmZcdWJmMzBcdWJmMzFcdWJmMzJcdWJmMzNcdWJmMzRcdWJmMzVcdWJmMzZcdWJmMzdcdWJmMzhcdWJmMzlcdWJmM2FcdWJmM2JcdWJmM2NcdWJmM2RcdWJmM2VcdWJmM2ZcdWJmNDJcdWJmNDNcdWJmNDVc''@;'; put 'put ''dWJmNDZcdWJmNDdcdWJmNDlcdWJmNGFcdWJmNGJcdWJmNGNcdWJmNGRcdWJmNGVcdWJmNGZcdWJmNTJcdWJmNTNcdWJmNTRcdWJmNTZcdWJmNTdcdWJmNThcdWJmNTlcdWJmNWFcdWJmNWJcdWJmNWNcdWJmNWRcdWJmNWVcdWJmNWZcdWJmNjBcdWJmNjFcdWJmNjJcdWJmNjNcdWJmNjRcdWJm''@;'; put 'put ''NjVcdWJmNjZcdWJmNjdcdWJmNjhcdWJmNjlcdWJmNmFcdWJmNmJcdWJmNmNcdWJmNmRcdWJmNmVcdWJmNmZcdWJmNzBcdWJmNzFcdWJmNzJcdWJmNzNcdWJmNzRcdWJmNzVcdWJmNzZcdWJmNzdcdWJmNzhcdWJmNzlcdWJmN2FcdWJmN2JcdWJmN2NcdWJmN2RcdWJmN2VcdWJmN2ZcdWJmODBc''@;'; put 'put ''dWJmODFcdWJmODJcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNTBdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE1MF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNTBdW3NdXT0zODQwMCtzLGhbMzg0MDArc109Y1sxNTBdW3NdKTtmb3IoY1sxNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmODNcdWJmODRcdWJmODVcdWJmODZcdWJmODdcdWJmODhcdWJmODlcdWJmOGFcdWJmOGJcdWJmOGNcdWJmOGRcdWJmOGVcdWJmOGZcdWJmOTBcdWJmOTFcdWJmOTJcdWJmOTNcdWJmOTVcdWJmOTZcdWJmOTdcdWJmOThc''@;'; put 'put ''dWJmOTlcdWJmOWFcdWJmOWJcdWJmOWNcdWJmOWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmOWVcdWJmOWZcdWJmYTBcdWJmYTFcdWJmYTJcdWJmYTNcdWJmYTRcdWJmYTVcdWJmYTZcdWJmYTdcdWJmYThcdWJmYTlcdWJmYWFcdWJmYWJcdWJmYWNcdWJmYWRcdWJm''@;'; put 'put ''YWVcdWJmYWZcdWJmYjFcdWJmYjJcdWJmYjNcdWJmYjRcdWJmYjVcdWJmYjZcdWJmYjdcdWJmYjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmYjlcdWJmYmFcdWJmYmJcdWJmYmNcdWJmYmRcdWJmYmVcdWJmYmZcdWJmYzBcdWJmYzFcdWJmYzJcdWJmYzNcdWJmYzRc''@;'; put 'put ''dWJmYzZcdWJmYzdcdWJmYzhcdWJmYzlcdWJmY2FcdWJmY2JcdWJmY2VcdWJmY2ZcdWJmZDFcdWJmZDJcdWJmZDNcdWJmZDVcdWJmZDZcdWJmZDdcdWJmZDhcdWJmZDlcdWJmZGFcdWJmZGJcdWJmZGRcdWJmZGVcdWJmZTBcdWJmZTJcdWJmZTNcdWJmZTRcdWJmZTVcdWJmZTZcdWJmZTdcdWJm''@;'; put 'put ''ZThcdWJmZTlcdWJmZWFcdWJmZWJcdWJmZWNcdWJmZWRcdWJmZWVcdWJmZWZcdWJmZjBcdWJmZjFcdWJmZjJcdWJmZjNcdWJmZjRcdWJmZjVcdWJmZjZcdWJmZjdcdWJmZjhcdWJmZjlcdWJmZmFcdWJmZmJcdWJmZmNcdWJmZmRcdWJmZmVcdWJmZmZcdWMwMDBcdWMwMDFcdWMwMDJcdWMwMDNc''@;'; put 'put ''dWMwMDRcdWMwMDVcdWMwMDZcdWMwMDdcdWMwMDhcdWMwMDlcdWMwMGFcdWMwMGJcdWMwMGNcdWMwMGRcdWMwMGVcdWMwMGZcdWMwMTBcdWMwMTFcdWMwMTJcdWMwMTNcdWMwMTRcdWMwMTVcdWMwMTZcdWMwMTdcdWMwMThcdWMwMTlcdWMwMWFcdWMwMWJcdWMwMWNcdWMwMWRcdWMwMWVcdWMw''@;'; put 'put ''MWZcdWMwMjBcdWMwMjFcdWMwMjJcdWMwMjNcdWMwMjRcdWMwMjVcdWMwMjZcdWMwMjdcdWMwMjhcdWMwMjlcdWMwMmFcdWMwMmJcdWMwMmNcdWMwMmRcdWMwMmVcdWMwMmZcdWMwMzBcdWMwMzFcdWMwMzJcdWMwMzNcdWMwMzRcdWMwMzVcdWMwMzZcdWMwMzdcdWMwMzhcdWMwMzlcdWMwM2Fc''@;'; put 'put ''dWMwM2JcdWMwM2RcdWMwM2VcdWMwM2ZcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNTFdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE1MV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNTFdW3NdXT0zODY1NitzLGhbMzg2NTYrc109Y1sxNTFdW3NdKTtmb3IoY1sxNTJdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwNDBcdWMwNDFcdWMwNDJcdWMwNDNcdWMwNDRcdWMwNDVcdWMwNDZcdWMwNDdcdWMwNDhcdWMwNDlcdWMwNGFcdWMwNGJcdWMwNGNcdWMwNGRcdWMwNGVcdWMwNGZcdWMwNTBcdWMwNTJcdWMwNTNc''@;'; put 'put ''dWMwNTRcdWMwNTVcdWMwNTZcdWMwNTdcdWMwNTlcdWMwNWFcdWMwNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwNWRcdWMwNWVcdWMwNWZcdWMwNjFcdWMwNjJcdWMwNjNcdWMwNjRcdWMwNjVcdWMwNjZcdWMwNjdcdWMwNmFcdWMwNmJcdWMwNmNcdWMwNmRcdWMw''@;'; put 'put ''NmVcdWMwNmZcdWMwNzBcdWMwNzFcdWMwNzJcdWMwNzNcdWMwNzRcdWMwNzVcdWMwNzZcdWMwNzdcdWMwNzhcdWMwNzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwN2FcdWMwN2JcdWMwN2NcdWMwN2RcdWMwN2VcdWMwN2ZcdWMwODBcdWMwODFcdWMwODJcdWMwODNc''@;'; put 'put ''dWMwODRcdWMwODVcdWMwODZcdWMwODdcdWMwODhcdWMwODlcdWMwOGFcdWMwOGJcdWMwOGNcdWMwOGRcdWMwOGVcdWMwOGZcdWMwOTJcdWMwOTNcdWMwOTVcdWMwOTZcdWMwOTdcdWMwOTlcdWMwOWFcdWMwOWJcdWMwOWNcdWMwOWRcdWMwOWVcdWMwOWZcdWMwYTJcdWMwYTRcdWMwYTZcdWMw''@;'; put 'put ''YTdcdWMwYThcdWMwYTlcdWMwYWFcdWMwYWJcdWMwYWVcdWMwYjFcdWMwYjJcdWMwYjdcdWMwYjhcdWMwYjlcdWMwYmFcdWMwYmJcdWMwYmVcdWMwYzJcdWMwYzNcdWMwYzRcdWMwYzZcdWMwYzdcdWMwY2FcdWMwY2JcdWMwY2RcdWMwY2VcdWMwY2ZcdWMwZDFcdWMwZDJcdWMwZDNcdWMwZDRc''@;'; put 'put ''dWMwZDVcdWMwZDZcdWMwZDdcdWMwZGFcdWMwZGVcdWMwZGZcdWMwZTBcdWMwZTFcdWMwZTJcdWMwZTNcdWMwZTZcdWMwZTdcdWMwZTlcdWMwZWFcdWMwZWJcdWMwZWRcdWMwZWVcdWMwZWZcdWMwZjBcdWMwZjFcdWMwZjJcdWMwZjNcdWMwZjZcdWMwZjhcdWMwZmFcdWMwZmJcdWMwZmNcdWMw''@;'; put 'put ''ZmRcdWMwZmVcdWMwZmZcdWMxMDFcdWMxMDJcdWMxMDNcdWMxMDVcdWMxMDZcdWMxMDdcdWMxMDlcdWMxMGFcdWMxMGJcdWMxMGNcdWMxMGRcdWMxMGVcdWMxMGZcdWMxMTFcdWMxMTJcdWMxMTNcdWMxMTRcdWMxMTZcdWMxMTdcdWMxMThcdWMxMTlcdWMxMWFcdWMxMWJcdWMxMjFcdWMxMjJc''@;'; put 'put ''dWMxMjVcdWMxMjhcdWMxMjlcdWMxMmFcdWMxMmJcdWMxMmVcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNTJdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE1Ml1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNTJdW3NdXT0zODkxMitzLGhbMzg5MTIrc109Y1sxNTJdW3NdKTtmb3IoY1sxNTNd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxMzJcdWMxMzNcdWMxMzRcdWMxMzVcdWMxMzdcdWMxM2FcdWMxM2JcdWMxM2RcdWMxM2VcdWMxM2ZcdWMxNDFcdWMxNDJcdWMxNDNcdWMxNDRcdWMxNDVcdWMxNDZcdWMxNDdc''@;'; put 'put ''dWMxNGFcdWMxNGVcdWMxNGZcdWMxNTBcdWMxNTFcdWMxNTJcdWMxNTNcdWMxNTZcdWMxNTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxNTlcdWMxNWFcdWMxNWJcdWMxNWRcdWMxNWVcdWMxNWZcdWMxNjBcdWMxNjFcdWMxNjJcdWMxNjNcdWMxNjZcdWMxNmFcdWMx''@;'; put 'put ''NmJcdWMxNmNcdWMxNmRcdWMxNmVcdWMxNmZcdWMxNzFcdWMxNzJcdWMxNzNcdWMxNzVcdWMxNzZcdWMxNzdcdWMxNzlcdWMxN2FcdWMxN2JcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxN2NcdWMxN2RcdWMxN2VcdWMxN2ZcdWMxODBcdWMxODFcdWMxODJcdWMxODNc''@;'; put 'put ''dWMxODRcdWMxODZcdWMxODdcdWMxODhcdWMxODlcdWMxOGFcdWMxOGJcdWMxOGZcdWMxOTFcdWMxOTJcdWMxOTNcdWMxOTVcdWMxOTdcdWMxOThcdWMxOTlcdWMxOWFcdWMxOWJcdWMxOWVcdWMxYTBcdWMxYTJcdWMxYTNcdWMxYTRcdWMxYTZcdWMxYTdcdWMxYWFcdWMxYWJcdWMxYWRcdWMx''@;'; put 'put ''YWVcdWMxYWZcdWMxYjFcdWMxYjJcdWMxYjNcdWMxYjRcdWMxYjVcdWMxYjZcdWMxYjdcdWMxYjhcdWMxYjlcdWMxYmFcdWMxYmJcdWMxYmNcdWMxYmVcdWMxYmZcdWMxYzBcdWMxYzFcdWMxYzJcdWMxYzNcdWMxYzVcdWMxYzZcdWMxYzdcdWMxYzlcdWMxY2FcdWMxY2JcdWMxY2RcdWMxY2Vc''@;'; put 'put ''dWMxY2ZcdWMxZDBcdWMxZDFcdWMxZDJcdWMxZDNcdWMxZDVcdWMxZDZcdWMxZDlcdWMxZGFcdWMxZGJcdWMxZGNcdWMxZGRcdWMxZGVcdWMxZGZcdWMxZTFcdWMxZTJcdWMxZTNcdWMxZTVcdWMxZTZcdWMxZTdcdWMxZTlcdWMxZWFcdWMxZWJcdWMxZWNcdWMxZWRcdWMxZWVcdWMxZWZcdWMx''@;'; put 'put ''ZjJcdWMxZjRcdWMxZjVcdWMxZjZcdWMxZjdcdWMxZjhcdWMxZjlcdWMxZmFcdWMxZmJcdWMxZmVcdWMxZmZcdWMyMDFcdWMyMDJcdWMyMDNcdWMyMDVcdWMyMDZcdWMyMDdcdWMyMDhcdWMyMDlcdWMyMGFcdWMyMGJcdWMyMGVcdWMyMTBcdWMyMTJcdWMyMTNcdWMyMTRcdWMyMTVcdWMyMTZc''@;'; put 'put ''dWMyMTdcdWMyMWFcdWMyMWJcdWMyMWRcdWMyMWVcdWMyMjFcdWMyMjJcdWMyMjNcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNTNdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE1M11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNTNdW3NdXT0zOTE2OCtzLGhbMzkxNjgrc109Y1sxNTNdW3Nd''@;'; put 'put ''KTtmb3IoY1sxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyMjRcdWMyMjVcdWMyMjZcdWMyMjdcdWMyMmFcdWMyMmNcdWMyMmVcdWMyMzBcdWMyMzNcdWMyMzVcdWMyMzZcdWMyMzdcdWMyMzhcdWMyMzlcdWMyM2Fc''@;'; put 'put ''dWMyM2JcdWMyM2NcdWMyM2RcdWMyM2VcdWMyM2ZcdWMyNDBcdWMyNDFcdWMyNDJcdWMyNDNcdWMyNDRcdWMyNDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyNDZcdWMyNDdcdWMyNDlcdWMyNGFcdWMyNGJcdWMyNGNcdWMyNGRcdWMyNGVcdWMyNGZcdWMyNTJcdWMy''@;'; put 'put ''NTNcdWMyNTVcdWMyNTZcdWMyNTdcdWMyNTlcdWMyNWFcdWMyNWJcdWMyNWNcdWMyNWRcdWMyNWVcdWMyNWZcdWMyNjFcdWMyNjJcdWMyNjNcdWMyNjRcdWMyNjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyNjdcdWMyNjhcdWMyNjlcdWMyNmFcdWMyNmJcdWMyNmVc''@;'; put 'put ''dWMyNmZcdWMyNzFcdWMyNzJcdWMyNzNcdWMyNzVcdWMyNzZcdWMyNzdcdWMyNzhcdWMyNzlcdWMyN2FcdWMyN2JcdWMyN2VcdWMyODBcdWMyODJcdWMyODNcdWMyODRcdWMyODVcdWMyODZcdWMyODdcdWMyOGFcdWMyOGJcdWMyOGNcdWMyOGRcdWMyOGVcdWMyOGZcdWMyOTFcdWMyOTJcdWMy''@;'; put 'put ''OTNcdWMyOTRcdWMyOTVcdWMyOTZcdWMyOTdcdWMyOTlcdWMyOWFcdWMyOWNcdWMyOWVcdWMyOWZcdWMyYTBcdWMyYTFcdWMyYTJcdWMyYTNcdWMyYTZcdWMyYTdcdWMyYTlcdWMyYWFcdWMyYWJcdWMyYWVcdWMyYWZcdWMyYjBcdWMyYjFcdWMyYjJcdWMyYjNcdWMyYjZcdWMyYjhcdWMyYmFc''@;'; put 'put ''dWMyYmJcdWMyYmNcdWMyYmRcdWMyYmVcdWMyYmZcdWMyYzBcdWMyYzFcdWMyYzJcdWMyYzNcdWMyYzRcdWMyYzVcdWMyYzZcdWMyYzdcdWMyYzhcdWMyYzlcdWMyY2FcdWMyY2JcdWMyY2NcdWMyY2RcdWMyY2VcdWMyY2ZcdWMyZDBcdWMyZDFcdWMyZDJcdWMyZDNcdWMyZDRcdWMyZDVcdWMy''@;'; put 'put ''ZDZcdWMyZDdcdWMyZDhcdWMyZDlcdWMyZGFcdWMyZGJcdWMyZGVcdWMyZGZcdWMyZTFcdWMyZTJcdWMyZTVcdWMyZTZcdWMyZTdcdWMyZThcdWMyZTlcdWMyZWFcdWMyZWVcdWMyZjBcdWMyZjJcdWMyZjNcdWMyZjRcdWMyZjVcdWMyZjdcdWMyZmFcdWMyZmRcdWMyZmVcdWMyZmZcdWMzMDFc''@;'; put 'put ''dWMzMDJcdWMzMDNcdWMzMDRcdWMzMDVcdWMzMDZcdWMzMDdcdWMzMGFcdWMzMGJcdWMzMGVcdWMzMGZcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNTRdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE1NF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNTRdW3NdXT0zOTQyNCtzLGhbMzk0MjQr''@;'; put 'put ''c109Y1sxNTRdW3NdKTtmb3IoY1sxNTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzMTBcdWMzMTFcdWMzMTJcdWMzMTZcdWMzMTdcdWMzMTlcdWMzMWFcdWMzMWJcdWMzMWRcdWMzMWVcdWMzMWZcdWMzMjBcdWMzMjFc''@;'; put 'put ''dWMzMjJcdWMzMjNcdWMzMjZcdWMzMjdcdWMzMmFcdWMzMmJcdWMzMmNcdWMzMmRcdWMzMmVcdWMzMmZcdWMzMzBcdWMzMzFcdWMzMzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzMzNcdWMzMzRcdWMzMzVcdWMzMzZcdWMzMzdcdWMzMzhcdWMzMzlcdWMzM2FcdWMz''@;'; put 'put ''M2JcdWMzM2NcdWMzM2RcdWMzM2VcdWMzM2ZcdWMzNDBcdWMzNDFcdWMzNDJcdWMzNDNcdWMzNDRcdWMzNDZcdWMzNDdcdWMzNDhcdWMzNDlcdWMzNGFcdWMzNGJcdWMzNGNcdWMzNGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzNGVcdWMzNGZcdWMzNTBcdWMzNTFc''@;'; put 'put ''dWMzNTJcdWMzNTNcdWMzNTRcdWMzNTVcdWMzNTZcdWMzNTdcdWMzNThcdWMzNTlcdWMzNWFcdWMzNWJcdWMzNWNcdWMzNWRcdWMzNWVcdWMzNWZcdWMzNjBcdWMzNjFcdWMzNjJcdWMzNjNcdWMzNjRcdWMzNjVcdWMzNjZcdWMzNjdcdWMzNmFcdWMzNmJcdWMzNmRcdWMzNmVcdWMzNmZcdWMz''@;'; put 'put ''NzFcdWMzNzNcdWMzNzRcdWMzNzVcdWMzNzZcdWMzNzdcdWMzN2FcdWMzN2JcdWMzN2VcdWMzN2ZcdWMzODBcdWMzODFcdWMzODJcdWMzODNcdWMzODVcdWMzODZcdWMzODdcdWMzODlcdWMzOGFcdWMzOGJcdWMzOGRcdWMzOGVcdWMzOGZcdWMzOTBcdWMzOTFcdWMzOTJcdWMzOTNcdWMzOTRc''@;'; put 'put ''dWMzOTVcdWMzOTZcdWMzOTdcdWMzOThcdWMzOTlcdWMzOWFcdWMzOWJcdWMzOWNcdWMzOWRcdWMzOWVcdWMzOWZcdWMzYTBcdWMzYTFcdWMzYTJcdWMzYTNcdWMzYTRcdWMzYTVcdWMzYTZcdWMzYTdcdWMzYThcdWMzYTlcdWMzYWFcdWMzYWJcdWMzYWNcdWMzYWRcdWMzYWVcdWMzYWZcdWMz''@;'; put 'put ''YjBcdWMzYjFcdWMzYjJcdWMzYjNcdWMzYjRcdWMzYjVcdWMzYjZcdWMzYjdcdWMzYjhcdWMzYjlcdWMzYmFcdWMzYmJcdWMzYmNcdWMzYmRcdWMzYmVcdWMzYmZcdWMzYzFcdWMzYzJcdWMzYzNcdWMzYzRcdWMzYzVcdWMzYzZcdWMzYzdcdWMzYzhcdWMzYzlcdWMzY2FcdWMzY2JcdWMzY2Nc''@;'; put 'put ''dWMzY2RcdWMzY2VcdWMzY2ZcdWMzZDBcdWMzZDFcdWMzZDJcdWMzZDNcdWMzZDRcdWMzZDVcdWMzZDZcdWMzZDdcdWMzZGFcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNTVdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE1NV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNTVdW3NdXT0zOTY4''@;'; put 'put ''MCtzLGhbMzk2ODArc109Y1sxNTVdW3NdKTtmb3IoY1sxNTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzZGJcdWMzZGRcdWMzZGVcdWMzZTFcdWMzZTNcdWMzZTRcdWMzZTVcdWMzZTZcdWMzZTdcdWMzZWFcdWMzZWJc''@;'; put 'put ''dWMzZWNcdWMzZWVcdWMzZWZcdWMzZjBcdWMzZjFcdWMzZjJcdWMzZjNcdWMzZjZcdWMzZjdcdWMzZjlcdWMzZmFcdWMzZmJcdWMzZmNcdWMzZmRcdWMzZmVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzZmZcdWM0MDBcdWM0MDFcdWM0MDJcdWM0MDNcdWM0MDRcdWM0''@;'; put 'put ''MDVcdWM0MDZcdWM0MDdcdWM0MDlcdWM0MGFcdWM0MGJcdWM0MGNcdWM0MGRcdWM0MGVcdWM0MGZcdWM0MTFcdWM0MTJcdWM0MTNcdWM0MTRcdWM0MTVcdWM0MTZcdWM0MTdcdWM0MThcdWM0MTlcdWM0MWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0MWJcdWM0MWNc''@;'; put 'put ''dWM0MWRcdWM0MWVcdWM0MWZcdWM0MjBcdWM0MjFcdWM0MjJcdWM0MjNcdWM0MjVcdWM0MjZcdWM0MjdcdWM0MjhcdWM0MjlcdWM0MmFcdWM0MmJcdWM0MmRcdWM0MmVcdWM0MmZcdWM0MzFcdWM0MzJcdWM0MzNcdWM0MzVcdWM0MzZcdWM0MzdcdWM0MzhcdWM0MzlcdWM0M2FcdWM0M2JcdWM0''@;'; put 'put ''M2VcdWM0M2ZcdWM0NDBcdWM0NDFcdWM0NDJcdWM0NDNcdWM0NDRcdWM0NDVcdWM0NDZcdWM0NDdcdWM0NDlcdWM0NGFcdWM0NGJcdWM0NGNcdWM0NGRcdWM0NGVcdWM0NGZcdWM0NTBcdWM0NTFcdWM0NTJcdWM0NTNcdWM0NTRcdWM0NTVcdWM0NTZcdWM0NTdcdWM0NThcdWM0NTlcdWM0NWFc''@;'; put 'put ''dWM0NWJcdWM0NWNcdWM0NWRcdWM0NWVcdWM0NWZcdWM0NjBcdWM0NjFcdWM0NjJcdWM0NjNcdWM0NjZcdWM0NjdcdWM0NjlcdWM0NmFcdWM0NmJcdWM0NmRcdWM0NmVcdWM0NmZcdWM0NzBcdWM0NzFcdWM0NzJcdWM0NzNcdWM0NzZcdWM0NzdcdWM0NzhcdWM0N2FcdWM0N2JcdWM0N2NcdWM0''@;'; put 'put ''N2RcdWM0N2VcdWM0N2ZcdWM0ODFcdWM0ODJcdWM0ODNcdWM0ODRcdWM0ODVcdWM0ODZcdWM0ODdcdWM0ODhcdWM0ODlcdWM0OGFcdWM0OGJcdWM0OGNcdWM0OGRcdWM0OGVcdWM0OGZcdWM0OTBcdWM0OTFcdWM0OTJcdWM0OTNcdWM0OTVcdWM0OTZcdWM0OTdcdWM0OThcdWM0OTlcdWM0OWFc''@;'; put 'put ''dWM0OWJcdWM0OWRcdWM0OWVcdWM0OWZcdWM0YTBcdWM0YTFcdWM0YTJcdWM0YTNcdWM0YTRcdWM0YTVcdWM0YTZcdWM0YTdcdWM0YThcdWM0YTlcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNTZdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE1Nl1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sx''@;'; put 'put ''NTZdW3NdXT0zOTkzNitzLGhbMzk5MzYrc109Y1sxNTZdW3NdKTtmb3IoY1sxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0YWFcdWM0YWJcdWM0YWNcdWM0YWRcdWM0YWVcdWM0YWZcdWM0YjBcdWM0YjFcdWM0YjJc''@;'; put 'put ''dWM0YjNcdWM0YjRcdWM0YjVcdWM0YjZcdWM0YjdcdWM0YjlcdWM0YmFcdWM0YmJcdWM0YmRcdWM0YmVcdWM0YmZcdWM0YzBcdWM0YzFcdWM0YzJcdWM0YzNcdWM0YzRcdWM0YzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0YzZcdWM0YzdcdWM0YzhcdWM0YzlcdWM0''@;'; put 'put ''Y2FcdWM0Y2JcdWM0Y2NcdWM0Y2RcdWM0Y2VcdWM0Y2ZcdWM0ZDBcdWM0ZDFcdWM0ZDJcdWM0ZDNcdWM0ZDRcdWM0ZDVcdWM0ZDZcdWM0ZDdcdWM0ZDhcdWM0ZDlcdWM0ZGFcdWM0ZGJcdWM0ZGNcdWM0ZGRcdWM0ZGVcdWM0ZGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWM0ZTBcdWM0ZTFcdWM0ZTJcdWM0ZTNcdWM0ZTRcdWM0ZTVcdWM0ZTZcdWM0ZTdcdWM0ZThcdWM0ZWFcdWM0ZWJcdWM0ZWNcdWM0ZWRcdWM0ZWVcdWM0ZWZcdWM0ZjJcdWM0ZjNcdWM0ZjVcdWM0ZjZcdWM0ZjdcdWM0ZjlcdWM0ZmJcdWM0ZmNcdWM0ZmRcdWM0ZmVcdWM1MDJcdWM1MDNcdWM1''@;'; put 'put ''MDRcdWM1MDVcdWM1MDZcdWM1MDdcdWM1MDhcdWM1MDlcdWM1MGFcdWM1MGJcdWM1MGRcdWM1MGVcdWM1MGZcdWM1MTFcdWM1MTJcdWM1MTNcdWM1MTVcdWM1MTZcdWM1MTdcdWM1MThcdWM1MTlcdWM1MWFcdWM1MWJcdWM1MWRcdWM1MWVcdWM1MWZcdWM1MjBcdWM1MjFcdWM1MjJcdWM1MjNc''@;'; put 'put ''dWM1MjRcdWM1MjVcdWM1MjZcdWM1MjdcdWM1MmFcdWM1MmJcdWM1MmRcdWM1MmVcdWM1MmZcdWM1MzFcdWM1MzJcdWM1MzNcdWM1MzRcdWM1MzVcdWM1MzZcdWM1MzdcdWM1M2FcdWM1M2NcdWM1M2VcdWM1M2ZcdWM1NDBcdWM1NDFcdWM1NDJcdWM1NDNcdWM1NDZcdWM1NDdcdWM1NGJcdWM1''@;'; put 'put ''NGZcdWM1NTBcdWM1NTFcdWM1NTJcdWM1NTZcdWM1NWFcdWM1NWJcdWM1NWNcdWM1NWZcdWM1NjJcdWM1NjNcdWM1NjVcdWM1NjZcdWM1NjdcdWM1NjlcdWM1NmFcdWM1NmJcdWM1NmNcdWM1NmRcdWM1NmVcdWM1NmZcdWM1NzJcdWM1NzZcdWM1NzdcdWM1NzhcdWM1NzlcdWM1N2FcdWM1N2Jc''@;'; put 'put ''dWM1N2VcdWM1N2ZcdWM1ODFcdWM1ODJcdWM1ODNcdWM1ODVcdWM1ODZcdWM1ODhcdWM1ODlcdWM1OGFcdWM1OGJcdWM1OGVcdWM1OTBcdWM1OTJcdWM1OTNcdWM1OTRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNTddLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE1N11bc10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKHlbY1sxNTddW3NdXT00MDE5MitzLGhbNDAxOTIrc109Y1sxNTddW3NdKTtmb3IoY1sxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1OTZcdWM1OTlcdWM1OWFcdWM1OWJcdWM1OWRcdWM1OWVcdWM1OWZc''@;'; put 'put ''dWM1YTFcdWM1YTJcdWM1YTNcdWM1YTRcdWM1YTVcdWM1YTZcdWM1YTdcdWM1YThcdWM1YWFcdWM1YWJcdWM1YWNcdWM1YWRcdWM1YWVcdWM1YWZcdWM1YjBcdWM1YjFcdWM1YjJcdWM1YjNcdWM1YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1YjdcdWM1YmFcdWM1''@;'; put 'put ''YmZcdWM1YzBcdWM1YzFcdWM1YzJcdWM1YzNcdWM1Y2JcdWM1Y2RcdWM1Y2ZcdWM1ZDJcdWM1ZDNcdWM1ZDVcdWM1ZDZcdWM1ZDdcdWM1ZDlcdWM1ZGFcdWM1ZGJcdWM1ZGNcdWM1ZGRcdWM1ZGVcdWM1ZGZcdWM1ZTJcdWM1ZTRcdWM1ZTZcdWM1ZTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWM1ZThcdWM1ZTlcdWM1ZWFcdWM1ZWJcdWM1ZWZcdWM1ZjFcdWM1ZjJcdWM1ZjNcdWM1ZjVcdWM1ZjhcdWM1ZjlcdWM1ZmFcdWM1ZmJcdWM2MDJcdWM2MDNcdWM2MDRcdWM2MDlcdWM2MGFcdWM2MGJcdWM2MGRcdWM2MGVcdWM2MGZcdWM2MTFcdWM2MTJcdWM2MTNcdWM2''@;'; put 'put ''MTRcdWM2MTVcdWM2MTZcdWM2MTdcdWM2MWFcdWM2MWRcdWM2MWVcdWM2MWZcdWM2MjBcdWM2MjFcdWM2MjJcdWM2MjNcdWM2MjZcdWM2MjdcdWM2MjlcdWM2MmFcdWM2MmJcdWM2MmZcdWM2MzFcdWM2MzJcdWM2MzZcdWM2MzhcdWM2M2FcdWM2M2NcdWM2M2RcdWM2M2VcdWM2M2ZcdWM2NDJc''@;'; put 'put ''dWM2NDNcdWM2NDVcdWM2NDZcdWM2NDdcdWM2NDlcdWM2NGFcdWM2NGJcdWM2NGNcdWM2NGRcdWM2NGVcdWM2NGZcdWM2NTJcdWM2NTZcdWM2NTdcdWM2NThcdWM2NTlcdWM2NWFcdWM2NWJcdWM2NWVcdWM2NWZcdWM2NjFcdWM2NjJcdWM2NjNcdWM2NjRcdWM2NjVcdWM2NjZcdWM2NjdcdWM2''@;'; put 'put ''NjhcdWM2NjlcdWM2NmFcdWM2NmJcdWM2NmRcdWM2NmVcdWM2NzBcdWM2NzJcdWM2NzNcdWM2NzRcdWM2NzVcdWM2NzZcdWM2NzdcdWM2N2FcdWM2N2JcdWM2N2RcdWM2N2VcdWM2N2ZcdWM2ODFcdWM2ODJcdWM2ODNcdWM2ODRcdWM2ODVcdWM2ODZcdWM2ODdcdWM2OGFcdWM2OGNcdWM2OGVc''@;'; put 'put ''dWM2OGZcdWM2OTBcdWM2OTFcdWM2OTJcdWM2OTNcdWM2OTZcdWM2OTdcdWM2OTlcdWM2OWFcdWM2OWJcdWM2OWRcdWM2OWVcdWM2OWZcdWM2YTBcdWM2YTFcdWM2YTJcdWM2YTNcdWM2YTZcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNThdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE1OF1b''@;'; put 'put ''c10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNThdW3NdXT00MDQ0OCtzLGhbNDA0NDgrc109Y1sxNThdW3NdKTtmb3IoY1sxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM2YThcdWM2YWFcdWM2YWJcdWM2YWNcdWM2YWRc''@;'; put 'put ''dWM2YWVcdWM2YWZcdWM2YjJcdWM2YjNcdWM2YjVcdWM2YjZcdWM2YjdcdWM2YmJcdWM2YmNcdWM2YmRcdWM2YmVcdWM2YmZcdWM2YzJcdWM2YzRcdWM2YzZcdWM2YzdcdWM2YzhcdWM2YzlcdWM2Y2FcdWM2Y2JcdWM2Y2VcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM2''@;'; put 'put ''Y2ZcdWM2ZDFcdWM2ZDJcdWM2ZDNcdWM2ZDVcdWM2ZDZcdWM2ZDdcdWM2ZDhcdWM2ZDlcdWM2ZGFcdWM2ZGJcdWM2ZGVcdWM2ZGZcdWM2ZTJcdWM2ZTNcdWM2ZTRcdWM2ZTVcdWM2ZTZcdWM2ZTdcdWM2ZWFcdWM2ZWJcdWM2ZWRcdWM2ZWVcdWM2ZWZcdWM2ZjFcdWM2ZjJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM2ZjNcdWM2ZjRcdWM2ZjVcdWM2ZjZcdWM2ZjdcdWM2ZmFcdWM2ZmJcdWM2ZmNcdWM2ZmVcdWM2ZmZcdWM3MDBcdWM3MDFcdWM3MDJcdWM3MDNcdWM3MDZcdWM3MDdcdWM3MDlcdWM3MGFcdWM3MGJcdWM3MGRcdWM3MGVcdWM3MGZcdWM3MTBcdWM3''@;'; put 'put ''MTFcdWM3MTJcdWM3MTNcdWM3MTZcdWM3MThcdWM3MWFcdWM3MWJcdWM3MWNcdWM3MWRcdWM3MWVcdWM3MWZcdWM3MjJcdWM3MjNcdWM3MjVcdWM3MjZcdWM3MjdcdWM3MjlcdWM3MmFcdWM3MmJcdWM3MmNcdWM3MmRcdWM3MmVcdWM3MmZcdWM3MzJcdWM3MzRcdWM3MzZcdWM3MzhcdWM3Mzlc''@;'; put 'put ''dWM3M2FcdWM3M2JcdWM3M2VcdWM3M2ZcdWM3NDFcdWM3NDJcdWM3NDNcdWM3NDVcdWM3NDZcdWM3NDdcdWM3NDhcdWM3NDlcdWM3NGJcdWM3NGVcdWM3NTBcdWM3NTlcdWM3NWFcdWM3NWJcdWM3NWRcdWM3NWVcdWM3NWZcdWM3NjFcdWM3NjJcdWM3NjNcdWM3NjRcdWM3NjVcdWM3NjZcdWM3''@;'; put 'put ''NjdcdWM3NjlcdWM3NmFcdWM3NmNcdWM3NmRcdWM3NmVcdWM3NmZcdWM3NzBcdWM3NzFcdWM3NzJcdWM3NzNcdWM3NzZcdWM3NzdcdWM3NzlcdWM3N2FcdWM3N2JcdWM3N2ZcdWM3ODBcdWM3ODFcdWM3ODJcdWM3ODZcdWM3OGJcdWM3OGNcdWM3OGRcdWM3OGZcdWM3OTJcdWM3OTNcdWM3OTVc''@;'; put 'put ''dWM3OTlcdWM3OWJcdWM3OWNcdWM3OWRcdWM3OWVcdWM3OWZcdWM3YTJcdWM3YTdcdWM3YThcdWM3YTlcdWM3YWFcdWM3YWJcdWM3YWVcdWM3YWZcdWM3YjFcdWM3YjJcdWM3YjNcdWM3YjVcdWM3YjZcdWM3YjdcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNTldLmxlbmd0aDsrK3MpNjU1''@;'; put 'put ''MzMhPT1jWzE1OV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNTldW3NdXT00MDcwNCtzLGhbNDA3MDQrc109Y1sxNTldW3NdKTtmb3IoY1sxNjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3YjhcdWM3YjlcdWM3YmFc''@;'; put 'put ''dWM3YmJcdWM3YmVcdWM3YzJcdWM3YzNcdWM3YzRcdWM3YzVcdWM3YzZcdWM3YzdcdWM3Y2FcdWM3Y2JcdWM3Y2RcdWM3Y2ZcdWM3ZDFcdWM3ZDJcdWM3ZDNcdWM3ZDRcdWM3ZDVcdWM3ZDZcdWM3ZDdcdWM3ZDlcdWM3ZGFcdWM3ZGJcdWM3ZGNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWM3ZGVcdWM3ZGZcdWM3ZTBcdWM3ZTFcdWM3ZTJcdWM3ZTNcdWM3ZTVcdWM3ZTZcdWM3ZTdcdWM3ZTlcdWM3ZWFcdWM3ZWJcdWM3ZWRcdWM3ZWVcdWM3ZWZcdWM3ZjBcdWM3ZjFcdWM3ZjJcdWM3ZjNcdWM3ZjRcdWM3ZjVcdWM3ZjZcdWM3ZjdcdWM3ZjhcdWM3ZjlcdWM3ZmFc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3ZmJcdWM3ZmNcdWM3ZmRcdWM3ZmVcdWM3ZmZcdWM4MDJcdWM4MDNcdWM4MDVcdWM4MDZcdWM4MDdcdWM4MDlcdWM4MGJcdWM4MGNcdWM4MGRcdWM4MGVcdWM4MGZcdWM4MTJcdWM4MTRcdWM4MTdcdWM4MThcdWM4MTlcdWM4''@;'; put 'put ''MWFcdWM4MWJcdWM4MWVcdWM4MWZcdWM4MjFcdWM4MjJcdWM4MjNcdWM4MjVcdWM4MjZcdWM4MjdcdWM4MjhcdWM4MjlcdWM4MmFcdWM4MmJcdWM4MmVcdWM4MzBcdWM4MzJcdWM4MzNcdWM4MzRcdWM4MzVcdWM4MzZcdWM4MzdcdWM4MzlcdWM4M2FcdWM4M2JcdWM4M2RcdWM4M2VcdWM4M2Zc''@;'; put 'put ''dWM4NDFcdWM4NDJcdWM4NDNcdWM4NDRcdWM4NDVcdWM4NDZcdWM4NDdcdWM4NGFcdWM4NGJcdWM4NGVcdWM4NGZcdWM4NTBcdWM4NTFcdWM4NTJcdWM4NTNcdWM4NTVcdWM4NTZcdWM4NTdcdWM4NThcdWM4NTlcdWM4NWFcdWM4NWJcdWM4NWNcdWM4NWRcdWM4NWVcdWM4NWZcdWM4NjBcdWM4''@;'; put 'put ''NjFcdWM4NjJcdWM4NjNcdWM4NjRcdWM4NjVcdWM4NjZcdWM4NjdcdWM4NjhcdWM4NjlcdWM4NmFcdWM4NmJcdWM4NmNcdWM4NmRcdWM4NmVcdWM4NmZcdWM4NzJcdWM4NzNcdWM4NzVcdWM4NzZcdWM4NzdcdWM4NzlcdWM4N2JcdWM4N2NcdWM4N2RcdWM4N2VcdWM4N2ZcdWM4ODJcdWM4ODRc''@;'; put 'put ''dWM4ODhcdWM4ODlcdWM4OGFcdWM4OGVcdWM4OGZcdWM4OTBcdWM4OTFcdWM4OTJcdWM4OTNcdWM4OTVcdWM4OTZcdWM4OTdcdWM4OThcdWM4OTlcdWM4OWFcdWM4OWJcdWM4OWNcdWM4OWVcdWM4YTBcdWM4YTJcdWM4YTNcdWM4YTRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNjBdLmxl''@;'; put 'put ''bmd0aDsrK3MpNjU1MzMhPT1jWzE2MF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNjBdW3NdXT00MDk2MCtzLGhbNDA5NjArc109Y1sxNjBdW3NdKTtmb3IoY1sxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4YTVc''@;'; put 'put ''dWM4YTZcdWM4YTdcdWM4YTlcdWM4YWFcdWM4YWJcdWM4YWNcdWM4YWRcdWM4YWVcdWM4YWZcdWM4YjBcdWM4YjFcdWM4YjJcdWM4YjNcdWM4YjRcdWM4YjVcdWM4YjZcdWM4YjdcdWM4YjhcdWM4YjlcdWM4YmFcdWM4YmJcdWM4YmVcdWM4YmZcdWM4YzBcdWM4YzFcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4YzJcdWM4YzNcdWM4YzVcdWM4YzZcdWM4YzdcdWM4YzlcdWM4Y2FcdWM4Y2JcdWM4Y2RcdWM4Y2VcdWM4Y2ZcdWM4ZDBcdWM4ZDFcdWM4ZDJcdWM4ZDNcdWM4ZDZcdWM4ZDhcdWM4ZGFcdWM4ZGJcdWM4ZGNcdWM4ZGRcdWM4ZGVcdWM4ZGZcdWM4ZTJc''@;'; put 'put ''dWM4ZTNcdWM4ZTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4ZTZcdWM4ZTdcdWM4ZThcdWM4ZTlcdWM4ZWFcdWM4ZWJcdWM4ZWNcdWM4ZWRcdWM4ZWVcdWM4ZWZcdWM4ZjBcdWM4ZjFcdWM4ZjJcdWM4ZjNcdWM4ZjRcdWM4ZjZcdWM4ZjdcdWM4ZjhcdWM4ZjlcdWM4''@;'; put 'put ''ZmFcdWM4ZmJcdWM4ZmVcdWM4ZmZcdWM5MDFcdWM5MDJcdWM5MDNcdWM5MDdcdWM5MDhcdWM5MDlcdWM5MGFcdWM5MGJcdWM5MGVcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUyMDI1XHUyMDI2XHhhOFx1MzAwM1x4YWRcdTIwMTVcdTIyMjVcdWZmM2NcdTIyM2NcdTIwMThcdTIwMTlcdTIwMWNc''@;'; put 'put ''dTIwMWRcdTMwMTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyNjBcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzRceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHUyMTJiXHVmZmUwXHVmZmUxXHVmZmU1''@;'; put 'put ''XHUyNjQyXHUyNjQwXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHhhN1x1MjAzYlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5''@;'; put 'put ''M1x1MjE5NFx1MzAxM1x1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1MjIyN1x1MjIyOFx1ZmZlMlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE2MV0ubGVuZ3Ro''@;'; put 'put ''Oysrcyk2NTUzMyE9PWNbMTYxXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE2MV1bc11dPTQxMjE2K3MsaFs0MTIxNitzXT1jWzE2MV1bc10pO2ZvcihjWzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzkxMFx1Yzkx''@;'; put 'put ''Mlx1YzkxM1x1YzkxNFx1YzkxNVx1YzkxNlx1YzkxN1x1YzkxOVx1YzkxYVx1YzkxYlx1YzkxY1x1YzkxZFx1YzkxZVx1YzkxZlx1YzkyMFx1YzkyMVx1YzkyMlx1YzkyM1x1YzkyNFx1YzkyNVx1YzkyNlx1YzkyN1x1YzkyOFx1YzkyOVx1YzkyYVx1YzkyYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1YzkyZFx1YzkyZVx1YzkyZlx1YzkzMFx1YzkzMVx1YzkzMlx1YzkzM1x1YzkzNVx1YzkzNlx1YzkzN1x1YzkzOFx1YzkzOVx1YzkzYVx1YzkzYlx1YzkzY1x1YzkzZFx1YzkzZVx1YzkzZlx1Yzk0MFx1Yzk0MVx1Yzk0Mlx1Yzk0M1x1Yzk0NFx1Yzk0NVx1Yzk0''@;'; put 'put ''Nlx1Yzk0N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yzk0OFx1Yzk0OVx1Yzk0YVx1Yzk0Ylx1Yzk0Y1x1Yzk0ZFx1Yzk0ZVx1Yzk0Zlx1Yzk1Mlx1Yzk1M1x1Yzk1NVx1Yzk1Nlx1Yzk1N1x1Yzk1OVx1Yzk1YVx1Yzk1Ylx1Yzk1Y1x1Yzk1ZFx1Yzk1ZVx1Yzk1Zlx1''@;'; put 'put ''Yzk2Mlx1Yzk2NFx1Yzk2NVx1Yzk2Nlx1Yzk2N1x1Yzk2OFx1Yzk2OVx1Yzk2YVx1Yzk2Ylx1Yzk2ZFx1Yzk2ZVx1Yzk2Zlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwM1x4YjRcdWZmNWVcdTAyYzdcdTAyZDhcdTAyZGRcdTAyZGFcdTAyZDlceGI4XHUwMmRiXHhhMVx4YmZcdTAyZDBcdTIyMmVc''@;'; put 'put ''dTIyMTFcdTIyMGZceGE0XHUyMTA5XHUyMDMwXHUyNWMxXHUyNWMwXHUyNWI3XHUyNWI2XHUyNjY0XHUyNjYwXHUyNjYxXHUyNjY1XHUyNjY3XHUyNjYzXHUyMjk5XHUyNWM4XHUyNWEzXHUyNWQwXHUyNWQxXHUyNTkyXHUyNWE0XHUyNWE1XHUyNWE4XHUyNWE3XHUyNWE2XHUyNWE5XHUyNjY4''@;'; put 'put ''XHUyNjBmXHUyNjBlXHUyNjFjXHUyNjFlXHhiNlx1MjAyMFx1MjAyMVx1MjE5NVx1MjE5N1x1MjE5OVx1MjE5Nlx1MjE5OFx1MjY2ZFx1MjY2OVx1MjY2YVx1MjY2Y1x1MzI3Zlx1MzIxY1x1MjExNlx1MzNjN1x1MjEyMlx1MzNjMlx1MzNkOFx1MjEyMVx1MjBhY1x4YWVcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNjJdLmxlbmd0aDsr''@;'; put 'put ''K3MpNjU1MzMhPT1jWzE2Ml1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNjJdW3NdXT00MTQ3MitzLGhbNDE0NzIrc109Y1sxNjJdW3NdKTtmb3IoY1sxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5NzFcdWM5NzJc''@;'; put 'put ''dWM5NzNcdWM5NzVcdWM5NzZcdWM5NzdcdWM5NzhcdWM5NzlcdWM5N2FcdWM5N2JcdWM5N2RcdWM5N2VcdWM5N2ZcdWM5ODBcdWM5ODFcdWM5ODJcdWM5ODNcdWM5ODRcdWM5ODVcdWM5ODZcdWM5ODdcdWM5OGFcdWM5OGJcdWM5OGRcdWM5OGVcdWM5OGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWM5OTFcdWM5OTJcdWM5OTNcdWM5OTRcdWM5OTVcdWM5OTZcdWM5OTdcdWM5OWFcdWM5OWNcdWM5OWVcdWM5OWZcdWM5YTBcdWM5YTFcdWM5YTJcdWM5YTNcdWM5YTRcdWM5YTVcdWM5YTZcdWM5YTdcdWM5YThcdWM5YTlcdWM5YWFcdWM5YWJcdWM5YWNcdWM5YWRc''@;'; put 'put ''dWM5YWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5YWZcdWM5YjBcdWM5YjFcdWM5YjJcdWM5YjNcdWM5YjRcdWM5YjVcdWM5YjZcdWM5YjdcdWM5YjhcdWM5YjlcdWM5YmFcdWM5YmJcdWM5YmNcdWM5YmRcdWM5YmVcdWM5YmZcdWM5YzJcdWM5YzNcdWM5YzVcdWM5''@;'; put 'put ''YzZcdWM5YzlcdWM5Y2JcdWM5Y2NcdWM5Y2RcdWM5Y2VcdWM5Y2ZcdWM5ZDJcdWM5ZDRcdWM5ZDdcdWM5ZDhcdWM5ZGJcdWZmMDFcdWZmMDJcdWZmMDNcdWZmMDRcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZmMGZcdWZmMTBc''@;'; put 'put ''dWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZm''@;'; put 'put ''MmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmZTZcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdc''@;'; put 'put ''dWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sx''@;'; put 'put ''NjNdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE2M11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNjNdW3NdXT00MTcyOCtzLGhbNDE3Mjgrc109Y1sxNjNdW3NdKTtmb3IoY1sxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWM5ZGVcdWM5ZGZcdWM5ZTFcdWM5ZTNcdWM5ZTVcdWM5ZTZcdWM5ZThcdWM5ZTlcdWM5ZWFcdWM5ZWJcdWM5ZWVcdWM5ZjJcdWM5ZjNcdWM5ZjRcdWM5ZjVcdWM5ZjZcdWM5ZjdcdWM5ZmFcdWM5ZmJcdWM5ZmRcdWM5ZmVcdWM5ZmZcdWNhMDFcdWNhMDJcdWNhMDNcdWNhMDRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhMDVcdWNhMDZcdWNhMDdcdWNhMGFcdWNhMGVcdWNhMGZcdWNhMTBcdWNhMTFcdWNhMTJcdWNhMTNcdWNhMTVcdWNhMTZcdWNhMTdcdWNhMTlcdWNhMWFcdWNhMWJcdWNhMWNcdWNhMWRcdWNhMWVcdWNhMWZcdWNhMjBcdWNhMjFcdWNhMjJc''@;'; put 'put ''dWNhMjNcdWNhMjRcdWNhMjVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhMjZcdWNhMjdcdWNhMjhcdWNhMmFcdWNhMmJcdWNhMmNcdWNhMmRcdWNhMmVcdWNhMmZcdWNhMzBcdWNhMzFcdWNhMzJcdWNhMzNcdWNhMzRcdWNhMzVcdWNhMzZcdWNhMzdcdWNhMzhcdWNh''@;'; put 'put ''MzlcdWNhM2FcdWNhM2JcdWNhM2NcdWNhM2RcdWNhM2VcdWNhM2ZcdWNhNDBcdWNhNDFcdWNhNDJcdWNhNDNcdWNhNDRcdWNhNDVcdWNhNDZcdTMxMzFcdTMxMzJcdTMxMzNcdTMxMzRcdTMxMzVcdTMxMzZcdTMxMzdcdTMxMzhcdTMxMzlcdTMxM2FcdTMxM2JcdTMxM2NcdTMxM2RcdTMxM2Vc''@;'; put 'put ''dTMxM2ZcdTMxNDBcdTMxNDFcdTMxNDJcdTMxNDNcdTMxNDRcdTMxNDVcdTMxNDZcdTMxNDdcdTMxNDhcdTMxNDlcdTMxNGFcdTMxNGJcdTMxNGNcdTMxNGRcdTMxNGVcdTMxNGZcdTMxNTBcdTMxNTFcdTMxNTJcdTMxNTNcdTMxNTRcdTMxNTVcdTMxNTZcdTMxNTdcdTMxNThcdTMxNTlcdTMx''@;'; put 'put ''NWFcdTMxNWJcdTMxNWNcdTMxNWRcdTMxNWVcdTMxNWZcdTMxNjBcdTMxNjFcdTMxNjJcdTMxNjNcdTMxNjRcdTMxNjVcdTMxNjZcdTMxNjdcdTMxNjhcdTMxNjlcdTMxNmFcdTMxNmJcdTMxNmNcdTMxNmRcdTMxNmVcdTMxNmZcdTMxNzBcdTMxNzFcdTMxNzJcdTMxNzNcdTMxNzRcdTMxNzVc''@;'; put 'put ''dTMxNzZcdTMxNzdcdTMxNzhcdTMxNzlcdTMxN2FcdTMxN2JcdTMxN2NcdTMxN2RcdTMxN2VcdTMxN2ZcdTMxODBcdTMxODFcdTMxODJcdTMxODNcdTMxODRcdTMxODVcdTMxODZcdTMxODdcdTMxODhcdTMxODlcdTMxOGFcdTMxOGJcdTMxOGNcdTMxOGRcdTMxOGVcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxzPTA7cyE9Y1sxNjRdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE2NF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNjRdW3NdXT00MTk4NCtzLGhbNDE5ODQrc109Y1sxNjRdW3NdKTtmb3IoY1sxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWNhNDdcdWNhNDhcdWNhNDlcdWNhNGFcdWNhNGJcdWNhNGVcdWNhNGZcdWNhNTFcdWNhNTJcdWNhNTNcdWNhNTVcdWNhNTZcdWNhNTdcdWNhNThcdWNhNTlcdWNhNWFcdWNhNWJcdWNhNWVcdWNhNjJcdWNhNjNcdWNhNjRcdWNhNjVcdWNhNjZcdWNhNjdcdWNhNjlcdWNh''@;'; put 'put ''NmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhNmJcdWNhNmNcdWNhNmRcdWNhNmVcdWNhNmZcdWNhNzBcdWNhNzFcdWNhNzJcdWNhNzNcdWNhNzRcdWNhNzVcdWNhNzZcdWNhNzdcdWNhNzhcdWNhNzlcdWNhN2FcdWNhN2JcdWNhN2NcdWNhN2VcdWNhN2ZcdWNhODBc''@;'; put 'put ''dWNhODFcdWNhODJcdWNhODNcdWNhODVcdWNhODZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhODdcdWNhODhcdWNhODlcdWNhOGFcdWNhOGJcdWNhOGNcdWNhOGRcdWNhOGVcdWNhOGZcdWNhOTBcdWNhOTFcdWNhOTJcdWNhOTNcdWNhOTRcdWNhOTVcdWNhOTZcdWNh''@;'; put 'put ''OTdcdWNhOTlcdWNhOWFcdWNhOWJcdWNhOWNcdWNhOWRcdWNhOWVcdWNhOWZcdWNhYTBcdWNhYTFcdWNhYTJcdWNhYTNcdWNhYTRcdWNhYTVcdWNhYTZcdWNhYTdcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAz''@;'; put 'put ''OThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNc''@;'; put 'put ''dTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNjVdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE2NV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNjVdW3NdXT00MjI0MCtzLGhbNDIyNDArc109Y1sxNjVdW3NdKTtmb3IoY1sxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhYThcdWNhYTlcdWNhYWFcdWNhYWJcdWNhYWNcdWNhYWRcdWNhYWVcdWNhYWZcdWNhYjBcdWNhYjFcdWNhYjJcdWNhYjNcdWNhYjRcdWNhYjVcdWNhYjZcdWNhYjdcdWNhYjhcdWNhYjlcdWNhYmFcdWNhYmJcdWNhYmVcdWNhYmZcdWNhYzFcdWNh''@;'; put 'put ''YzJcdWNhYzNcdWNhYzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhYzZcdWNhYzdcdWNhYzhcdWNhYzlcdWNhY2FcdWNhY2JcdWNhY2VcdWNhZDBcdWNhZDJcdWNhZDRcdWNhZDVcdWNhZDZcdWNhZDdcdWNhZGFcdWNhZGJcdWNhZGNcdWNhZGRcdWNhZGVcdWNhZGZc''@;'; put 'put ''dWNhZTFcdWNhZTJcdWNhZTNcdWNhZTRcdWNhZTVcdWNhZTZcdWNhZTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhZThcdWNhZTlcdWNhZWFcdWNhZWJcdWNhZWRcdWNhZWVcdWNhZWZcdWNhZjBcdWNhZjFcdWNhZjJcdWNhZjNcdWNhZjVcdWNhZjZcdWNhZjdcdWNh''@;'; put 'put ''ZjhcdWNhZjlcdWNhZmFcdWNhZmJcdWNhZmNcdWNhZmRcdWNhZmVcdWNhZmZcdWNiMDBcdWNiMDFcdWNiMDJcdWNiMDNcdWNiMDRcdWNiMDVcdWNiMDZcdWNiMDdcdWNiMDlcdWNiMGFcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRc''@;'; put 'put ''dTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdTI1MTJcdTI1MTFcdTI1MWFcdTI1MTlcdTI1MTZcdTI1''@;'; put 'put ''MTVcdTI1MGVcdTI1MGRcdTI1MWVcdTI1MWZcdTI1MjFcdTI1MjJcdTI1MjZcdTI1MjdcdTI1MjlcdTI1MmFcdTI1MmRcdTI1MmVcdTI1MzFcdTI1MzJcdTI1MzVcdTI1MzZcdTI1MzlcdTI1M2FcdTI1M2RcdTI1M2VcdTI1NDBcdTI1NDFcdTI1NDNcdTI1NDRcdTI1NDVcdTI1NDZcdTI1NDdc''@;'; put 'put ''dTI1NDhcdTI1NDlcdTI1NGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNjZdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE2Nl1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNjZdW3NdXT00MjQ5NitzLGhbNDI0OTYrc109Y1sxNjZdW3NdKTtmb3IoY1sxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiMGJcdWNiMGNcdWNiMGRcdWNiMGVcdWNiMGZcdWNiMTFcdWNiMTJcdWNiMTNcdWNiMTVcdWNiMTZcdWNiMTdcdWNiMTlcdWNiMWFcdWNiMWJcdWNiMWNcdWNiMWRcdWNiMWVcdWNiMWZcdWNiMjJcdWNiMjNcdWNiMjRcdWNi''@;'; put 'put ''MjVcdWNiMjZcdWNiMjdcdWNiMjhcdWNiMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiMmFcdWNiMmJcdWNiMmNcdWNiMmRcdWNiMmVcdWNiMmZcdWNiMzBcdWNiMzFcdWNiMzJcdWNiMzNcdWNiMzRcdWNiMzVcdWNiMzZcdWNiMzdcdWNiMzhcdWNiMzlcdWNiM2Fc''@;'; put 'put ''dWNiM2JcdWNiM2NcdWNiM2RcdWNiM2VcdWNiM2ZcdWNiNDBcdWNiNDJcdWNiNDNcdWNiNDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiNDVcdWNiNDZcdWNiNDdcdWNiNGFcdWNiNGJcdWNiNGRcdWNiNGVcdWNiNGZcdWNiNTFcdWNiNTJcdWNiNTNcdWNiNTRcdWNi''@;'; put 'put ''NTVcdWNiNTZcdWNiNTdcdWNiNWFcdWNiNWJcdWNiNWNcdWNiNWVcdWNiNWZcdWNiNjBcdWNiNjFcdWNiNjJcdWNiNjNcdWNiNjVcdWNiNjZcdWNiNjdcdWNiNjhcdWNiNjlcdWNiNmFcdWNiNmJcdWNiNmNcdTMzOTVcdTMzOTZcdTMzOTdcdTIxMTNcdTMzOThcdTMzYzRcdTMzYTNcdTMzYTRc''@;'; put 'put ''dTMzYTVcdTMzYTZcdTMzOTlcdTMzOWFcdTMzOWJcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOWZcdTMzYTBcdTMzYTFcdTMzYTJcdTMzY2FcdTMzOGRcdTMzOGVcdTMzOGZcdTMzY2ZcdTMzODhcdTMzODlcdTMzYzhcdTMzYTdcdTMzYThcdTMzYjBcdTMzYjFcdTMzYjJcdTMzYjNcdTMzYjRcdTMz''@;'; put 'put ''YjVcdTMzYjZcdTMzYjdcdTMzYjhcdTMzYjlcdTMzODBcdTMzODFcdTMzODJcdTMzODNcdTMzODRcdTMzYmFcdTMzYmJcdTMzYmNcdTMzYmRcdTMzYmVcdTMzYmZcdTMzOTBcdTMzOTFcdTMzOTJcdTMzOTNcdTMzOTRcdTIxMjZcdTMzYzBcdTMzYzFcdTMzOGFcdTMzOGJcdTMzOGNcdTMzZDZc''@;'; put 'put ''dTMzYzVcdTMzYWRcdTMzYWVcdTMzYWZcdTMzZGJcdTMzYTlcdTMzYWFcdTMzYWJcdTMzYWNcdTMzZGRcdTMzZDBcdTMzZDNcdTMzYzNcdTMzYzlcdTMzZGNcdTMzYzZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNjddLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE2N11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNjddW3NdXT00Mjc1MitzLGhbNDI3NTIrc109Y1sxNjddW3NdKTtmb3IoY1sxNjhdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiNmRcdWNiNmVcdWNiNmZcdWNiNzBcdWNiNzFcdWNiNzJcdWNiNzNcdWNiNzRcdWNiNzVcdWNiNzZcdWNiNzdcdWNiN2FcdWNiN2JcdWNiN2NcdWNiN2RcdWNiN2VcdWNiN2ZcdWNiODBcdWNiODFcdWNi''@;'; put 'put ''ODJcdWNiODNcdWNiODRcdWNiODVcdWNiODZcdWNiODdcdWNiODhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiODlcdWNiOGFcdWNiOGJcdWNiOGNcdWNiOGRcdWNiOGVcdWNiOGZcdWNiOTBcdWNiOTFcdWNiOTJcdWNiOTNcdWNiOTRcdWNiOTVcdWNiOTZcdWNiOTdc''@;'; put 'put ''dWNiOThcdWNiOTlcdWNiOWFcdWNiOWJcdWNiOWRcdWNiOWVcdWNiOWZcdWNiYTBcdWNiYTFcdWNiYTJcdWNiYTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiYTRcdWNiYTVcdWNiYTZcdWNiYTdcdWNiYThcdWNiYTlcdWNiYWFcdWNiYWJcdWNiYWNcdWNiYWRcdWNi''@;'; put 'put ''YWVcdWNiYWZcdWNiYjBcdWNiYjFcdWNiYjJcdWNiYjNcdWNiYjRcdWNiYjVcdWNiYjZcdWNiYjdcdWNiYjlcdWNiYmFcdWNiYmJcdWNiYmNcdWNiYmRcdWNiYmVcdWNiYmZcdWNiYzBcdWNiYzFcdWNiYzJcdWNiYzNcdWNiYzRceGM2XHhkMFx4YWFcdTAxMjZcdWZmZmRcdTAxMzJcdWZmZmRc''@;'; put 'put ''dTAxM2ZcdTAxNDFceGQ4XHUwMTUyXHhiYVx4ZGVcdTAxNjZcdTAxNGFcdWZmZmRcdTMyNjBcdTMyNjFcdTMyNjJcdTMyNjNcdTMyNjRcdTMyNjVcdTMyNjZcdTMyNjdcdTMyNjhcdTMyNjlcdTMyNmFcdTMyNmJcdTMyNmNcdTMyNmRcdTMyNmVcdTMyNmZcdTMyNzBcdTMyNzFcdTMyNzJcdTMy''@;'; put 'put ''NzNcdTMyNzRcdTMyNzVcdTMyNzZcdTMyNzdcdTMyNzhcdTMyNzlcdTMyN2FcdTMyN2JcdTI0ZDBcdTI0ZDFcdTI0ZDJcdTI0ZDNcdTI0ZDRcdTI0ZDVcdTI0ZDZcdTI0ZDdcdTI0ZDhcdTI0ZDlcdTI0ZGFcdTI0ZGJcdTI0ZGNcdTI0ZGRcdTI0ZGVcdTI0ZGZcdTI0ZTBcdTI0ZTFcdTI0ZTJc''@;'; put 'put ''dTI0ZTNcdTI0ZTRcdTI0ZTVcdTI0ZTZcdTI0ZTdcdTI0ZThcdTI0ZTlcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdTI0NmFcdTI0NmJcdTI0NmNcdTI0NmRcdTI0NmVceGJkXHUyMTUzXHUyMTU0XHhiY1x4YmVcdTIxNWJcdTIx''@;'; put 'put ''NWNcdTIxNWRcdTIxNWVcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNjhdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE2OF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNjhdW3NdXT00MzAwOCtzLGhbNDMwMDgrc109Y1sxNjhdW3NdKTtmb3IoY1sxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiYzVcdWNiYzZcdWNiYzdcdWNiYzhcdWNiYzlcdWNiY2FcdWNiY2JcdWNiY2NcdWNiY2RcdWNiY2VcdWNiY2ZcdWNiZDBcdWNiZDFcdWNiZDJcdWNiZDNcdWNiZDVcdWNiZDZcdWNiZDdcdWNiZDhcdWNiZDlcdWNi''@;'; put 'put ''ZGFcdWNiZGJcdWNiZGNcdWNiZGRcdWNiZGVcdWNiZGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiZTBcdWNiZTFcdWNiZTJcdWNiZTNcdWNiZTVcdWNiZTZcdWNiZThcdWNiZWFcdWNiZWJcdWNiZWNcdWNiZWRcdWNiZWVcdWNiZWZcdWNiZjBcdWNiZjFcdWNiZjJc''@;'; put 'put ''dWNiZjNcdWNiZjRcdWNiZjVcdWNiZjZcdWNiZjdcdWNiZjhcdWNiZjlcdWNiZmFcdWNiZmJcdWNiZmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiZmRcdWNiZmVcdWNiZmZcdWNjMDBcdWNjMDFcdWNjMDJcdWNjMDNcdWNjMDRcdWNjMDVcdWNjMDZcdWNjMDdcdWNj''@;'; put 'put ''MDhcdWNjMDlcdWNjMGFcdWNjMGJcdWNjMGVcdWNjMGZcdWNjMTFcdWNjMTJcdWNjMTNcdWNjMTVcdWNjMTZcdWNjMTdcdWNjMThcdWNjMTlcdWNjMWFcdWNjMWJcdWNjMWVcdWNjMWZcdWNjMjBcdWNjMjNcdWNjMjRceGU2XHUwMTExXHhmMFx1MDEyN1x1MDEzMVx1MDEzM1x1MDEzOFx1MDE0''@;'; put 'put ''MFx1MDE0Mlx4ZjhcdTAxNTNceGRmXHhmZVx1MDE2N1x1MDE0Ylx1MDE0OVx1MzIwMFx1MzIwMVx1MzIwMlx1MzIwM1x1MzIwNFx1MzIwNVx1MzIwNlx1MzIwN1x1MzIwOFx1MzIwOVx1MzIwYVx1MzIwYlx1MzIwY1x1MzIwZFx1MzIwZVx1MzIwZlx1MzIxMFx1MzIxMVx1MzIxMlx1MzIxM1x1''@;'; put 'put ''MzIxNFx1MzIxNVx1MzIxNlx1MzIxN1x1MzIxOFx1MzIxOVx1MzIxYVx1MzIxYlx1MjQ5Y1x1MjQ5ZFx1MjQ5ZVx1MjQ5Zlx1MjRhMFx1MjRhMVx1MjRhMlx1MjRhM1x1MjRhNFx1MjRhNVx1MjRhNlx1MjRhN1x1MjRhOFx1MjRhOVx1MjRhYVx1MjRhYlx1MjRhY1x1MjRhZFx1MjRhZVx1MjRh''@;'; put 'put ''Zlx1MjRiMFx1MjRiMVx1MjRiMlx1MjRiM1x1MjRiNFx1MjRiNVx1MjQ3NFx1MjQ3NVx1MjQ3Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3Ylx1MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1MjQ4Mlx4YjlceGIyXHhiM1x1MjA3NFx1MjA3Zlx1MjA4MVx1MjA4Mlx1''@;'; put 'put ''MjA4M1x1MjA4NFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE2OV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTY5XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE2OV1bc11dPTQzMjY0K3MsaFs0MzI2NCtzXT1jWzE2OV1bc10pO2ZvcihjWzE3MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2MyNVx1Y2MyNlx1Y2MyYVx1Y2MyYlx1Y2MyZFx1Y2MyZlx1Y2MzMVx1Y2MzMlx1Y2MzM1x1Y2MzNFx1Y2MzNVx1Y2MzNlx1Y2MzN1x1Y2MzYVx1Y2MzZlx1Y2M0MFx1Y2M0MVx1Y2M0Mlx1Y2M0M1x1Y2M0Nlx1Y2M0N1x1''@;'; put 'put ''Y2M0OVx1Y2M0YVx1Y2M0Ylx1Y2M0ZFx1Y2M0ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M0Zlx1Y2M1MFx1Y2M1MVx1Y2M1Mlx1Y2M1M1x1Y2M1Nlx1Y2M1YVx1Y2M1Ylx1Y2M1Y1x1Y2M1ZFx1Y2M1ZVx1Y2M1Zlx1Y2M2MVx1Y2M2Mlx1Y2M2M1x1Y2M2NVx1Y2M2''@;'; put 'put ''N1x1Y2M2OVx1Y2M2YVx1Y2M2Ylx1Y2M2Y1x1Y2M2ZFx1Y2M2ZVx1Y2M2Zlx1Y2M3MVx1Y2M3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M3M1x1Y2M3NFx1Y2M3Nlx1Y2M3N1x1Y2M3OFx1Y2M3OVx1Y2M3YVx1Y2M3Ylx1Y2M3Y1x1Y2M3ZFx1Y2M3ZVx1Y2M3Zlx1''@;'; put 'put ''Y2M4MFx1Y2M4MVx1Y2M4Mlx1Y2M4M1x1Y2M4NFx1Y2M4NVx1Y2M4Nlx1Y2M4N1x1Y2M4OFx1Y2M4OVx1Y2M4YVx1Y2M4Ylx1Y2M4Y1x1Y2M4ZFx1Y2M4ZVx1Y2M4Zlx1Y2M5MFx1Y2M5MVx1Y2M5Mlx1Y2M5M1x1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0Nlx1MzA0N1x1MzA0''@;'; put 'put ''OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1MzA0ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1OFx1MzA1OVx1MzA1YVx1MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1MzA2Mlx1MzA2M1x1''@;'; put 'put ''MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2OFx1MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1MzA3NFx1MzA3NVx1MzA3Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3ZFx1MzA3ZVx1MzA3''@;'; put 'put ''Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1MzA4NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5MVx1MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE3MF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTcwXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE3MF1bc11dPTQzNTIwK3MsaFs0MzUyMCtzXT1jWzE3MF1bc10pO2ZvcihjWzE3MV09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M5NFx1Y2M5NVx1Y2M5Nlx1Y2M5N1x1Y2M5YVx1Y2M5Ylx1Y2M5ZFx1Y2M5ZVx1Y2M5Zlx1Y2NhMVx1Y2NhMlx1Y2NhM1x1Y2NhNFx1Y2NhNVx1Y2NhNlx1Y2NhN1x1Y2NhYVx1Y2NhZVx1Y2NhZlx1''@;'; put 'put ''Y2NiMFx1Y2NiMVx1Y2NiMlx1Y2NiM1x1Y2NiNlx1Y2NiN1x1Y2NiOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NiYVx1Y2NiYlx1Y2NiZFx1Y2NiZVx1Y2NiZlx1Y2NjMFx1Y2NjMVx1Y2NjMlx1Y2NjM1x1Y2NjNlx1Y2NjOFx1Y2NjYVx1Y2NjYlx1Y2NjY1x1Y2Nj''@;'; put 'put ''ZFx1Y2NjZVx1Y2NjZlx1Y2NkMVx1Y2NkMlx1Y2NkM1x1Y2NkNVx1Y2NkNlx1Y2NkN1x1Y2NkOFx1Y2NkOVx1Y2NkYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NkYlx1Y2NkY1x1Y2NkZFx1Y2NkZVx1Y2NkZlx1Y2NlMFx1Y2NlMVx1Y2NlMlx1Y2NlM1x1Y2NlNVx1''@;'; put 'put ''Y2NlNlx1Y2NlN1x1Y2NlOFx1Y2NlOVx1Y2NlYVx1Y2NlYlx1Y2NlZFx1Y2NlZVx1Y2NlZlx1Y2NmMVx1Y2NmMlx1Y2NmM1x1Y2NmNFx1Y2NmNVx1Y2NmNlx1Y2NmN1x1Y2NmOFx1Y2NmOVx1Y2NmYVx1Y2NmYlx1Y2NmY1x1Y2NmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNFx1MzBhNVx1MzBh''@;'; put 'put ''Nlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1MzBjMFx1MzBjMVx1''@;'; put 'put ''MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBkYlx1MzBkY1x1MzBk''@;'; put 'put ''ZFx1MzBkZVx1MzBkZlx1MzBlMFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE3MV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTcxXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE3MV1bc11dPTQzNzc2K3MsaFs0Mzc3NitzXT1jWzE3MV1bc10pO2ZvcihjWzE3Ml09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NmZVx1Y2NmZlx1Y2QwMFx1Y2QwMlx1Y2QwM1x1Y2QwNFx1Y2QwNVx1Y2QwNlx1Y2QwN1x1Y2QwYVx1Y2QwYlx1Y2QwZFx1Y2QwZVx1Y2QwZlx1Y2QxMVx1Y2QxMlx1Y2QxM1x1''@;'; put 'put ''Y2QxNFx1Y2QxNVx1Y2QxNlx1Y2QxN1x1Y2QxYVx1Y2QxY1x1Y2QxZVx1Y2QxZlx1Y2QyMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2QyMVx1Y2QyMlx1Y2QyM1x1Y2QyNVx1Y2QyNlx1Y2QyN1x1Y2QyOVx1Y2QyYVx1Y2QyYlx1Y2QyZFx1Y2QyZVx1Y2QyZlx1Y2Qz''@;'; put 'put ''MFx1Y2QzMVx1Y2QzMlx1Y2QzM1x1Y2QzNFx1Y2QzNVx1Y2QzNlx1Y2QzN1x1Y2QzOFx1Y2QzYVx1Y2QzYlx1Y2QzY1x1Y2QzZFx1Y2QzZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2QzZlx1Y2Q0MFx1Y2Q0MVx1Y2Q0Mlx1Y2Q0M1x1Y2Q0NFx1Y2Q0NVx1Y2Q0Nlx1''@;'; put 'put ''Y2Q0N1x1Y2Q0OFx1Y2Q0OVx1Y2Q0YVx1Y2Q0Ylx1Y2Q0Y1x1Y2Q0ZFx1Y2Q0ZVx1Y2Q0Zlx1Y2Q1MFx1Y2Q1MVx1Y2Q1Mlx1Y2Q1M1x1Y2Q1NFx1Y2Q1NVx1Y2Q1Nlx1Y2Q1N1x1Y2Q1OFx1Y2Q1OVx1Y2Q1YVx1Y2Q1Ylx1Y2Q1ZFx1Y2Q1ZVx1Y2Q1Zlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQx''@;'; put 'put ''M1x1MDQxNFx1MDQxNVx1MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1''@;'; put 'put ''MDQyZVx1MDQyZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQz''@;'; put 'put ''OVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE3Ml0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTcyXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE3Ml1bc11dPTQ0MDMyK3MsaFs0NDAzMitzXT1jWzE3Ml1bc10p''@;'; put 'put ''O2ZvcihjWzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q2MVx1Y2Q2Mlx1Y2Q2M1x1Y2Q2NVx1Y2Q2Nlx1Y2Q2N1x1Y2Q2OFx1Y2Q2OVx1Y2Q2YVx1Y2Q2Ylx1Y2Q2ZVx1Y2Q3MFx1Y2Q3Mlx1Y2Q3M1x1Y2Q3NFx1''@;'; put 'put ''Y2Q3NVx1Y2Q3Nlx1Y2Q3N1x1Y2Q3OVx1Y2Q3YVx1Y2Q3Ylx1Y2Q3Y1x1Y2Q3ZFx1Y2Q3ZVx1Y2Q3Zlx1Y2Q4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q4MVx1Y2Q4Mlx1Y2Q4M1x1Y2Q4NFx1Y2Q4NVx1Y2Q4Nlx1Y2Q4N1x1Y2Q4OVx1Y2Q4YVx1Y2Q4Ylx1Y2Q4''@;'; put 'put ''Y1x1Y2Q4ZFx1Y2Q4ZVx1Y2Q4Zlx1Y2Q5MFx1Y2Q5MVx1Y2Q5Mlx1Y2Q5M1x1Y2Q5Nlx1Y2Q5N1x1Y2Q5OVx1Y2Q5YVx1Y2Q5Ylx1Y2Q5ZFx1Y2Q5ZVx1Y2Q5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RhMFx1Y2RhMVx1Y2RhMlx1Y2RhM1x1Y2RhNlx1Y2RhOFx1''@;'; put 'put ''Y2RhYVx1Y2RhYlx1Y2RhY1x1Y2RhZFx1Y2RhZVx1Y2RhZlx1Y2RiMVx1Y2RiMlx1Y2RiM1x1Y2RiNFx1Y2RiNVx1Y2RiNlx1Y2RiN1x1Y2RiOFx1Y2RiOVx1Y2RiYVx1Y2RiYlx1Y2RiY1x1Y2RiZFx1Y2RiZVx1Y2RiZlx1Y2RjMFx1Y2RjMVx1Y2RjMlx1Y2RjM1x1Y2RjNVx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE3M10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTczXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE3M11bc11dPTQ0Mjg4K3MsaFs0NDI4OCtz''@;'; put 'put ''XT1jWzE3M11bc10pO2ZvcihjWzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RjNlx1Y2RjN1x1Y2RjOFx1Y2RjOVx1Y2RjYVx1Y2RjYlx1Y2RjZFx1Y2RjZVx1Y2RjZlx1Y2RkMVx1Y2RkMlx1Y2RkM1x1Y2RkNFx1''@;'; put 'put ''Y2RkNVx1Y2RkNlx1Y2RkN1x1Y2RkOFx1Y2RkOVx1Y2RkYVx1Y2RkYlx1Y2RkY1x1Y2RkZFx1Y2RkZVx1Y2RkZlx1Y2RlMFx1Y2RlMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RlMlx1Y2RlM1x1Y2RlNFx1Y2RlNVx1Y2RlNlx1Y2RlN1x1Y2RlOVx1Y2RlYVx1Y2Rl''@;'; put 'put ''Ylx1Y2RlZFx1Y2RlZVx1Y2RlZlx1Y2RmMVx1Y2RmMlx1Y2RmM1x1Y2RmNFx1Y2RmNVx1Y2RmNlx1Y2RmN1x1Y2RmYVx1Y2RmY1x1Y2RmZVx1Y2RmZlx1Y2UwMFx1Y2UwMVx1Y2UwMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2UwM1x1Y2UwNVx1Y2UwNlx1Y2UwN1x1''@;'; put 'put ''Y2UwOVx1Y2UwYVx1Y2UwYlx1Y2UwZFx1Y2UwZVx1Y2UwZlx1Y2UxMFx1Y2UxMVx1Y2UxMlx1Y2UxM1x1Y2UxNVx1Y2UxNlx1Y2UxN1x1Y2UxOFx1Y2UxYVx1Y2UxYlx1Y2UxY1x1Y2UxZFx1Y2UxZVx1Y2UxZlx1Y2UyMlx1Y2UyM1x1Y2UyNVx1Y2UyNlx1Y2UyN1x1Y2UyOVx1Y2UyYVx1Y2Uy''@;'; put 'put ''Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE3NF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTc0XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE3NF1bc11dPTQ0NTQ0''@;'; put 'put ''K3MsaFs0NDU0NCtzXT1jWzE3NF1bc10pO2ZvcihjWzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2UyY1x1Y2UyZFx1Y2UyZVx1Y2UyZlx1Y2UzMlx1Y2UzNFx1Y2UzNlx1Y2UzN1x1Y2UzOFx1Y2UzOVx1Y2UzYVx1''@;'; put 'put ''Y2UzYlx1Y2UzY1x1Y2UzZFx1Y2UzZVx1Y2UzZlx1Y2U0MFx1Y2U0MVx1Y2U0Mlx1Y2U0M1x1Y2U0NFx1Y2U0NVx1Y2U0Nlx1Y2U0N1x1Y2U0OFx1Y2U0OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U0YVx1Y2U0Ylx1Y2U0Y1x1Y2U0ZFx1Y2U0ZVx1Y2U0Zlx1Y2U1''@;'; put 'put ''MFx1Y2U1MVx1Y2U1Mlx1Y2U1M1x1Y2U1NFx1Y2U1NVx1Y2U1Nlx1Y2U1N1x1Y2U1YVx1Y2U1Ylx1Y2U1ZFx1Y2U1ZVx1Y2U2Mlx1Y2U2M1x1Y2U2NFx1Y2U2NVx1Y2U2Nlx1Y2U2N1x1Y2U2YVx1Y2U2Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U2ZVx1Y2U2Zlx1''@;'; put 'put ''Y2U3MFx1Y2U3MVx1Y2U3Mlx1Y2U3M1x1Y2U3Nlx1Y2U3N1x1Y2U3OVx1Y2U3YVx1Y2U3Ylx1Y2U3ZFx1Y2U3ZVx1Y2U3Zlx1Y2U4MFx1Y2U4MVx1Y2U4Mlx1Y2U4M1x1Y2U4Nlx1Y2U4OFx1Y2U4YVx1Y2U4Ylx1Y2U4Y1x1Y2U4ZFx1Y2U4ZVx1Y2U4Zlx1Y2U5Mlx1Y2U5M1x1Y2U5NVx1Y2U5''@;'; put 'put ''Nlx1Y2U5N1x1Y2U5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE3NV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTc1XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE3''@;'; put 'put ''NV1bc11dPTQ0ODAwK3MsaFs0NDgwMCtzXT1jWzE3NV1bc10pO2ZvcihjWzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U5YVx1Y2U5Ylx1Y2U5Y1x1Y2U5ZFx1Y2U5ZVx1Y2U5Zlx1Y2VhMlx1Y2VhNlx1Y2VhN1x1''@;'; put 'put ''Y2VhOFx1Y2VhOVx1Y2VhYVx1Y2VhYlx1Y2VhZVx1Y2VhZlx1Y2ViMFx1Y2ViMVx1Y2ViMlx1Y2ViM1x1Y2ViNFx1Y2ViNVx1Y2ViNlx1Y2ViN1x1Y2ViOFx1Y2ViOVx1Y2ViYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ViYlx1Y2ViY1x1Y2ViZFx1Y2ViZVx1Y2Vi''@;'; put 'put ''Zlx1Y2VjMFx1Y2VjMlx1Y2VjM1x1Y2VjNFx1Y2VjNVx1Y2VjNlx1Y2VjN1x1Y2VjOFx1Y2VjOVx1Y2VjYVx1Y2VjYlx1Y2VjY1x1Y2VjZFx1Y2VjZVx1Y2VjZlx1Y2VkMFx1Y2VkMVx1Y2VkMlx1Y2VkM1x1Y2VkNFx1Y2VkNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''Y2VkNlx1Y2VkN1x1Y2VkOFx1Y2VkOVx1Y2VkYVx1Y2VkYlx1Y2VkY1x1Y2VkZFx1Y2VkZVx1Y2VkZlx1Y2VlMFx1Y2VlMVx1Y2VlMlx1Y2VlM1x1Y2VlNlx1Y2VlN1x1Y2VlOVx1Y2VlYVx1Y2VlZFx1Y2VlZVx1Y2VlZlx1Y2VmMFx1Y2VmMVx1Y2VmMlx1Y2VmM1x1Y2VmNlx1Y2VmYVx1Y2Vm''@;'; put 'put ''Ylx1Y2VmY1x1Y2VmZFx1Y2VmZVx1Y2VmZlx1YWMwMFx1YWMwMVx1YWMwNFx1YWMwN1x1YWMwOFx1YWMwOVx1YWMwYVx1YWMxMFx1YWMxMVx1YWMxMlx1YWMxM1x1YWMxNFx1YWMxNVx1YWMxNlx1YWMxN1x1YWMxOVx1YWMxYVx1YWMxYlx1YWMxY1x1YWMxZFx1YWMyMFx1YWMyNFx1YWMyY1x1''@;'; put 'put ''YWMyZFx1YWMyZlx1YWMzMFx1YWMzMVx1YWMzOFx1YWMzOVx1YWMzY1x1YWM0MFx1YWM0Ylx1YWM0ZFx1YWM1NFx1YWM1OFx1YWM1Y1x1YWM3MFx1YWM3MVx1YWM3NFx1YWM3N1x1YWM3OFx1YWM3YVx1YWM4MFx1YWM4MVx1YWM4M1x1YWM4NFx1YWM4NVx1YWM4Nlx1YWM4OVx1YWM4YVx1YWM4''@;'; put 'put ''Ylx1YWM4Y1x1YWM5MFx1YWM5NFx1YWM5Y1x1YWM5ZFx1YWM5Zlx1YWNhMFx1YWNhMVx1YWNhOFx1YWNhOVx1YWNhYVx1YWNhY1x1YWNhZlx1YWNiMFx1YWNiOFx1YWNiOVx1YWNiYlx1YWNiY1x1YWNiZFx1YWNjMVx1YWNjNFx1YWNjOFx1YWNjY1x1YWNkNVx1YWNkN1x1YWNlMFx1YWNlMVx1''@;'; put 'put ''YWNlNFx1YWNlN1x1YWNlOFx1YWNlYVx1YWNlY1x1YWNlZlx1YWNmMFx1YWNmMVx1YWNmM1x1YWNmNVx1YWNmNlx1YWNmY1x1YWNmZFx1YWQwMFx1YWQwNFx1YWQwNlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE3Nl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTc2XVtzXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoeVtjWzE3Nl1bc11dPTQ1MDU2K3MsaFs0NTA1NitzXT1jWzE3Nl1bc10pO2ZvcihjWzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2YwMlx1Y2YwM1x1Y2YwNVx1Y2YwNlx1Y2YwN1x1Y2YwOVx1Y2YwYVx1''@;'; put 'put ''Y2YwYlx1Y2YwY1x1Y2YwZFx1Y2YwZVx1Y2YwZlx1Y2YxMlx1Y2YxNFx1Y2YxNlx1Y2YxN1x1Y2YxOFx1Y2YxOVx1Y2YxYVx1Y2YxYlx1Y2YxZFx1Y2YxZVx1Y2YxZlx1Y2YyMVx1Y2YyMlx1Y2YyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2YyNVx1Y2YyNlx1Y2Yy''@;'; put 'put ''N1x1Y2YyOFx1Y2YyOVx1Y2YyYVx1Y2YyYlx1Y2YyZVx1Y2YzMlx1Y2YzM1x1Y2YzNFx1Y2YzNVx1Y2YzNlx1Y2YzN1x1Y2YzOVx1Y2YzYVx1Y2YzYlx1Y2YzY1x1Y2YzZFx1Y2YzZVx1Y2YzZlx1Y2Y0MFx1Y2Y0MVx1Y2Y0Mlx1Y2Y0M1x1Y2Y0NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1Y2Y0NVx1Y2Y0Nlx1Y2Y0N1x1Y2Y0OFx1Y2Y0OVx1Y2Y0YVx1Y2Y0Ylx1Y2Y0Y1x1Y2Y0ZFx1Y2Y0ZVx1Y2Y0Zlx1Y2Y1MFx1Y2Y1MVx1Y2Y1Mlx1Y2Y1M1x1Y2Y1Nlx1Y2Y1N1x1Y2Y1OVx1Y2Y1YVx1Y2Y1Ylx1Y2Y1ZFx1Y2Y1ZVx1Y2Y1Zlx1Y2Y2MFx1Y2Y2MVx1Y2Y2''@;'; put 'put ''Mlx1Y2Y2M1x1Y2Y2Nlx1Y2Y2OFx1Y2Y2YVx1Y2Y2Ylx1Y2Y2Y1x1YWQwY1x1YWQwZFx1YWQwZlx1YWQxMVx1YWQxOFx1YWQxY1x1YWQyMFx1YWQyOVx1YWQyY1x1YWQyZFx1YWQzNFx1YWQzNVx1YWQzOFx1YWQzY1x1YWQ0NFx1YWQ0NVx1YWQ0N1x1YWQ0OVx1YWQ1MFx1YWQ1NFx1YWQ1OFx1''@;'; put 'put ''YWQ2MVx1YWQ2M1x1YWQ2Y1x1YWQ2ZFx1YWQ3MFx1YWQ3M1x1YWQ3NFx1YWQ3NVx1YWQ3Nlx1YWQ3Ylx1YWQ3Y1x1YWQ3ZFx1YWQ3Zlx1YWQ4MVx1YWQ4Mlx1YWQ4OFx1YWQ4OVx1YWQ4Y1x1YWQ5MFx1YWQ5Y1x1YWQ5ZFx1YWRhNFx1YWRiN1x1YWRjMFx1YWRjMVx1YWRjNFx1YWRjOFx1YWRk''@;'; put 'put ''MFx1YWRkMVx1YWRkM1x1YWRkY1x1YWRlMFx1YWRlNFx1YWRmOFx1YWRmOVx1YWRmY1x1YWRmZlx1YWUwMFx1YWUwMVx1YWUwOFx1YWUwOVx1YWUwYlx1YWUwZFx1YWUxNFx1YWUzMFx1YWUzMVx1YWUzNFx1YWUzN1x1YWUzOFx1YWUzYVx1YWU0MFx1YWU0MVx1YWU0M1x1YWU0NVx1YWU0Nlx1''@;'; put 'put ''YWU0YVx1YWU0Y1x1YWU0ZFx1YWU0ZVx1YWU1MFx1YWU1NFx1YWU1Nlx1YWU1Y1x1YWU1ZFx1YWU1Zlx1YWU2MFx1YWU2MVx1YWU2NVx1YWU2OFx1YWU2OVx1YWU2Y1x1YWU3MFx1YWU3OFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE3N10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTc3XVtz''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoeVtjWzE3N11bc11dPTQ1MzEyK3MsaFs0NTMxMitzXT1jWzE3N11bc10pO2ZvcihjWzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y2ZFx1Y2Y2ZVx1Y2Y2Zlx1Y2Y3Mlx1Y2Y3M1x1''@;'; put 'put ''Y2Y3NVx1Y2Y3Nlx1Y2Y3N1x1Y2Y3OVx1Y2Y3YVx1Y2Y3Ylx1Y2Y3Y1x1Y2Y3ZFx1Y2Y3ZVx1Y2Y3Zlx1Y2Y4MVx1Y2Y4Mlx1Y2Y4M1x1Y2Y4NFx1Y2Y4Nlx1Y2Y4N1x1Y2Y4OFx1Y2Y4OVx1Y2Y4YVx1Y2Y4Ylx1Y2Y4ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y4''@;'; put 'put ''ZVx1Y2Y4Zlx1Y2Y5MFx1Y2Y5MVx1Y2Y5Mlx1Y2Y5M1x1Y2Y5NFx1Y2Y5NVx1Y2Y5Nlx1Y2Y5N1x1Y2Y5OFx1Y2Y5OVx1Y2Y5YVx1Y2Y5Ylx1Y2Y5Y1x1Y2Y5ZFx1Y2Y5ZVx1Y2Y5Zlx1Y2ZhMFx1Y2ZhMlx1Y2ZhM1x1Y2ZhNFx1Y2ZhNVx1Y2ZhNlx1Y2ZhN1x1Y2ZhOVx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZhYVx1Y2ZhYlx1Y2ZhY1x1Y2ZhZFx1Y2ZhZVx1Y2ZhZlx1Y2ZiMVx1Y2ZiMlx1Y2ZiM1x1Y2ZiNFx1Y2ZiNVx1Y2ZiNlx1Y2ZiN1x1Y2ZiOFx1Y2ZiOVx1Y2ZiYVx1Y2ZiYlx1Y2ZiY1x1Y2ZiZFx1Y2ZiZVx1Y2ZiZlx1Y2ZjMFx1Y2ZjMVx1Y2Zj''@;'; put 'put ''Mlx1Y2ZjM1x1Y2ZjNVx1Y2ZjNlx1Y2ZjN1x1Y2ZjOFx1Y2ZjOVx1Y2ZjYVx1Y2ZjYlx1YWU3OVx1YWU3Ylx1YWU3Y1x1YWU3ZFx1YWU4NFx1YWU4NVx1YWU4Y1x1YWViY1x1YWViZFx1YWViZVx1YWVjMFx1YWVjNFx1YWVjY1x1YWVjZFx1YWVjZlx1YWVkMFx1YWVkMVx1YWVkOFx1YWVkOVx1''@;'; put 'put ''YWVkY1x1YWVlOFx1YWVlYlx1YWVlZFx1YWVmNFx1YWVmOFx1YWVmY1x1YWYwN1x1YWYwOFx1YWYwZFx1YWYxMFx1YWYyY1x1YWYyZFx1YWYzMFx1YWYzMlx1YWYzNFx1YWYzY1x1YWYzZFx1YWYzZlx1YWY0MVx1YWY0Mlx1YWY0M1x1YWY0OFx1YWY0OVx1YWY1MFx1YWY1Y1x1YWY1ZFx1YWY2''@;'; put 'put ''NFx1YWY2NVx1YWY3OVx1YWY4MFx1YWY4NFx1YWY4OFx1YWY5MFx1YWY5MVx1YWY5NVx1YWY5Y1x1YWZiOFx1YWZiOVx1YWZiY1x1YWZjMFx1YWZjN1x1YWZjOFx1YWZjOVx1YWZjYlx1YWZjZFx1YWZjZVx1YWZkNFx1YWZkY1x1YWZlOFx1YWZlOVx1YWZmMFx1YWZmMVx1YWZmNFx1YWZmOFx1''@;'; put 'put ''YjAwMFx1YjAwMVx1YjAwNFx1YjAwY1x1YjAxMFx1YjAxNFx1YjAxY1x1YjAxZFx1YjAyOFx1YjA0NFx1YjA0NVx1YjA0OFx1YjA0YVx1YjA0Y1x1YjA0ZVx1YjA1M1x1YjA1NFx1YjA1NVx1YjA1N1x1YjA1OVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE3OF0ubGVuZ3RoOysrcyk2NTUz''@;'; put 'put ''MyE9PWNbMTc4XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE3OF1bc11dPTQ1NTY4K3MsaFs0NTU2OCtzXT1jWzE3OF1bc10pO2ZvcihjWzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZjY1x1Y2ZjZFx1Y2ZjZVx1''@;'; put 'put ''Y2ZjZlx1Y2ZkMFx1Y2ZkMVx1Y2ZkMlx1Y2ZkM1x1Y2ZkNFx1Y2ZkNVx1Y2ZkNlx1Y2ZkN1x1Y2ZkOFx1Y2ZkOVx1Y2ZkYVx1Y2ZkYlx1Y2ZkY1x1Y2ZkZFx1Y2ZkZVx1Y2ZkZlx1Y2ZlMlx1Y2ZlM1x1Y2ZlNVx1Y2ZlNlx1Y2ZlN1x1Y2ZlOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1Y2ZlYVx1Y2ZlYlx1Y2ZlY1x1Y2ZlZFx1Y2ZlZVx1Y2ZlZlx1Y2ZmMlx1Y2ZmNFx1Y2ZmNlx1Y2ZmN1x1Y2ZmOFx1Y2ZmOVx1Y2ZmYVx1Y2ZmYlx1Y2ZmZFx1Y2ZmZVx1Y2ZmZlx1ZDAwMVx1ZDAwMlx1ZDAwM1x1ZDAwNVx1ZDAwNlx1ZDAwN1x1ZDAwOFx1ZDAwOVx1ZDAwYVx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDAwYlx1ZDAwY1x1ZDAwZFx1ZDAwZVx1ZDAwZlx1ZDAxMFx1ZDAxMlx1ZDAxM1x1ZDAxNFx1ZDAxNVx1ZDAxNlx1ZDAxN1x1ZDAxOVx1ZDAxYVx1ZDAxYlx1ZDAxY1x1ZDAxZFx1ZDAxZVx1ZDAxZlx1ZDAyMFx1ZDAyMVx1ZDAy''@;'; put 'put ''Mlx1ZDAyM1x1ZDAyNFx1ZDAyNVx1ZDAyNlx1ZDAyN1x1ZDAyOFx1ZDAyOVx1ZDAyYVx1ZDAyYlx1ZDAyY1x1YjA1ZFx1YjA3Y1x1YjA3ZFx1YjA4MFx1YjA4NFx1YjA4Y1x1YjA4ZFx1YjA4Zlx1YjA5MVx1YjA5OFx1YjA5OVx1YjA5YVx1YjA5Y1x1YjA5Zlx1YjBhMFx1YjBhMVx1YjBhMlx1''@;'; put 'put ''YjBhOFx1YjBhOVx1YjBhYlx1YjBhY1x1YjBhZFx1YjBhZVx1YjBhZlx1YjBiMVx1YjBiM1x1YjBiNFx1YjBiNVx1YjBiOFx1YjBiY1x1YjBjNFx1YjBjNVx1YjBjN1x1YjBjOFx1YjBjOVx1YjBkMFx1YjBkMVx1YjBkNFx1YjBkOFx1YjBlMFx1YjBlNVx1YjEwOFx1YjEwOVx1YjEwYlx1YjEw''@;'; put 'put ''Y1x1YjExMFx1YjExMlx1YjExM1x1YjExOFx1YjExOVx1YjExYlx1YjExY1x1YjExZFx1YjEyM1x1YjEyNFx1YjEyNVx1YjEyOFx1YjEyY1x1YjEzNFx1YjEzNVx1YjEzN1x1YjEzOFx1YjEzOVx1YjE0MFx1YjE0MVx1YjE0NFx1YjE0OFx1YjE1MFx1YjE1MVx1YjE1NFx1YjE1NVx1YjE1OFx1''@;'; put 'put ''YjE1Y1x1YjE2MFx1YjE3OFx1YjE3OVx1YjE3Y1x1YjE4MFx1YjE4Mlx1YjE4OFx1YjE4OVx1YjE4Ylx1YjE4ZFx1YjE5Mlx1YjE5M1x1YjE5NFx1YjE5OFx1YjE5Y1x1YjFhOFx1YjFjY1x1YjFkMFx1YjFkNFx1YjFkY1x1YjFkZFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE3OV0ubGVu''@;'; put 'put ''Z3RoOysrcyk2NTUzMyE9PWNbMTc5XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE3OV1bc11dPTQ1ODI0K3MsaFs0NTgyNCtzXT1jWzE3OV1bc10pO2ZvcihjWzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDAyZVx1''@;'; put 'put ''ZDAyZlx1ZDAzMFx1ZDAzMVx1ZDAzMlx1ZDAzM1x1ZDAzNlx1ZDAzN1x1ZDAzOVx1ZDAzYVx1ZDAzYlx1ZDAzZFx1ZDAzZVx1ZDAzZlx1ZDA0MFx1ZDA0MVx1ZDA0Mlx1ZDA0M1x1ZDA0Nlx1ZDA0OFx1ZDA0YVx1ZDA0Ylx1ZDA0Y1x1ZDA0ZFx1ZDA0ZVx1ZDA0Zlx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA1MVx1ZDA1Mlx1ZDA1M1x1ZDA1NVx1ZDA1Nlx1ZDA1N1x1ZDA1OVx1ZDA1YVx1ZDA1Ylx1ZDA1Y1x1ZDA1ZFx1ZDA1ZVx1ZDA1Zlx1ZDA2MVx1ZDA2Mlx1ZDA2M1x1ZDA2NFx1ZDA2NVx1ZDA2Nlx1ZDA2N1x1ZDA2OFx1ZDA2OVx1ZDA2YVx1ZDA2Ylx1''@;'; put 'put ''ZDA2ZVx1ZDA2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA3MVx1ZDA3Mlx1ZDA3M1x1ZDA3NVx1ZDA3Nlx1ZDA3N1x1ZDA3OFx1ZDA3OVx1ZDA3YVx1ZDA3Ylx1ZDA3ZVx1ZDA3Zlx1ZDA4MFx1ZDA4Mlx1ZDA4M1x1ZDA4NFx1ZDA4NVx1ZDA4Nlx1ZDA4N1x1ZDA4''@;'; put 'put ''OFx1ZDA4OVx1ZDA4YVx1ZDA4Ylx1ZDA4Y1x1ZDA4ZFx1ZDA4ZVx1ZDA4Zlx1ZDA5MFx1ZDA5MVx1ZDA5Mlx1ZDA5M1x1ZDA5NFx1YjFkZlx1YjFlOFx1YjFlOVx1YjFlY1x1YjFmMFx1YjFmOVx1YjFmYlx1YjFmZFx1YjIwNFx1YjIwNVx1YjIwOFx1YjIwYlx1YjIwY1x1YjIxNFx1YjIxNVx1''@;'; put 'put ''YjIxN1x1YjIxOVx1YjIyMFx1YjIzNFx1YjIzY1x1YjI1OFx1YjI1Y1x1YjI2MFx1YjI2OFx1YjI2OVx1YjI3NFx1YjI3NVx1YjI3Y1x1YjI4NFx1YjI4NVx1YjI4OVx1YjI5MFx1YjI5MVx1YjI5NFx1YjI5OFx1YjI5OVx1YjI5YVx1YjJhMFx1YjJhMVx1YjJhM1x1YjJhNVx1YjJhNlx1YjJh''@;'; put 'put ''YVx1YjJhY1x1YjJiMFx1YjJiNFx1YjJjOFx1YjJjOVx1YjJjY1x1YjJkMFx1YjJkMlx1YjJkOFx1YjJkOVx1YjJkYlx1YjJkZFx1YjJlMlx1YjJlNFx1YjJlNVx1YjJlNlx1YjJlOFx1YjJlYlx1YjJlY1x1YjJlZFx1YjJlZVx1YjJlZlx1YjJmM1x1YjJmNFx1YjJmNVx1YjJmN1x1YjJmOFx1''@;'; put 'put ''YjJmOVx1YjJmYVx1YjJmYlx1YjJmZlx1YjMwMFx1YjMwMVx1YjMwNFx1YjMwOFx1YjMxMFx1YjMxMVx1YjMxM1x1YjMxNFx1YjMxNVx1YjMxY1x1YjM1NFx1YjM1NVx1YjM1Nlx1YjM1OFx1YjM1Ylx1YjM1Y1x1YjM1ZVx1YjM1Zlx1YjM2NFx1YjM2NVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtz''@;'; put 'put ''IT1jWzE4MF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTgwXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE4MF1bc11dPTQ2MDgwK3MsaFs0NjA4MCtzXT1jWzE4MF1bc10pO2ZvcihjWzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZDA5NVx1ZDA5Nlx1ZDA5N1x1ZDA5OFx1ZDA5OVx1ZDA5YVx1ZDA5Ylx1ZDA5Y1x1ZDA5ZFx1ZDA5ZVx1ZDA5Zlx1ZDBhMFx1ZDBhMVx1ZDBhMlx1ZDBhM1x1ZDBhNlx1ZDBhN1x1ZDBhOVx1ZDBhYVx1ZDBhYlx1ZDBhZFx1ZDBhZVx1ZDBhZlx1ZDBiMFx1ZDBiMVx1ZDBiMlx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDBiM1x1ZDBiNlx1ZDBiOFx1ZDBiYVx1ZDBiYlx1ZDBiY1x1ZDBiZFx1ZDBiZVx1ZDBiZlx1ZDBjMlx1ZDBjM1x1ZDBjNVx1ZDBjNlx1ZDBjN1x1ZDBjYVx1ZDBjYlx1ZDBjY1x1ZDBjZFx1ZDBjZVx1ZDBjZlx1ZDBkMlx1ZDBkNlx1''@;'; put 'put ''ZDBkN1x1ZDBkOFx1ZDBkOVx1ZDBkYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDBkYlx1ZDBkZVx1ZDBkZlx1ZDBlMVx1ZDBlMlx1ZDBlM1x1ZDBlNVx1ZDBlNlx1ZDBlN1x1ZDBlOFx1ZDBlOVx1ZDBlYVx1ZDBlYlx1ZDBlZVx1ZDBmMlx1ZDBmM1x1ZDBmNFx1ZDBm''@;'; put 'put ''NVx1ZDBmNlx1ZDBmN1x1ZDBmOVx1ZDBmYVx1ZDBmYlx1ZDBmY1x1ZDBmZFx1ZDBmZVx1ZDBmZlx1ZDEwMFx1ZDEwMVx1ZDEwMlx1ZDEwM1x1ZDEwNFx1YjM2N1x1YjM2OVx1YjM2Ylx1YjM2ZVx1YjM3MFx1YjM3MVx1YjM3NFx1YjM3OFx1YjM4MFx1YjM4MVx1YjM4M1x1YjM4NFx1YjM4NVx1''@;'; put 'put ''YjM4Y1x1YjM5MFx1YjM5NFx1YjNhMFx1YjNhMVx1YjNhOFx1YjNhY1x1YjNjNFx1YjNjNVx1YjNjOFx1YjNjYlx1YjNjY1x1YjNjZVx1YjNkMFx1YjNkNFx1YjNkNVx1YjNkN1x1YjNkOVx1YjNkYlx1YjNkZFx1YjNlMFx1YjNlNFx1YjNlOFx1YjNmY1x1YjQxMFx1YjQxOFx1YjQxY1x1YjQy''@;'; put 'put ''MFx1YjQyOFx1YjQyOVx1YjQyYlx1YjQzNFx1YjQ1MFx1YjQ1MVx1YjQ1NFx1YjQ1OFx1YjQ2MFx1YjQ2MVx1YjQ2M1x1YjQ2NVx1YjQ2Y1x1YjQ4MFx1YjQ4OFx1YjQ5ZFx1YjRhNFx1YjRhOFx1YjRhY1x1YjRiNVx1YjRiN1x1YjRiOVx1YjRjMFx1YjRjNFx1YjRjOFx1YjRkMFx1YjRkNVx1''@;'; put 'put ''YjRkY1x1YjRkZFx1YjRlMFx1YjRlM1x1YjRlNFx1YjRlNlx1YjRlY1x1YjRlZFx1YjRlZlx1YjRmMVx1YjRmOFx1YjUxNFx1YjUxNVx1YjUxOFx1YjUxYlx1YjUxY1x1YjUyNFx1YjUyNVx1YjUyN1x1YjUyOFx1YjUyOVx1YjUyYVx1YjUzMFx1YjUzMVx1YjUzNFx1YjUzOFx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLHM9MDtzIT1jWzE4MV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTgxXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE4MV1bc11dPTQ2MzM2K3MsaFs0NjMzNitzXT1jWzE4MV1bc10pO2ZvcihjWzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEwNVx1ZDEwNlx1ZDEwN1x1ZDEwOFx1ZDEwOVx1ZDEwYVx1ZDEwYlx1ZDEwY1x1ZDEwZVx1ZDEwZlx1ZDExMFx1ZDExMVx1ZDExMlx1ZDExM1x1ZDExNFx1ZDExNVx1ZDExNlx1ZDExN1x1ZDExOFx1ZDExOVx1ZDExYVx1ZDExYlx1ZDExY1x1ZDExZFx1ZDEx''@;'; put 'put ''ZVx1ZDExZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEyMFx1ZDEyMVx1ZDEyMlx1ZDEyM1x1ZDEyNFx1ZDEyNVx1ZDEyNlx1ZDEyN1x1ZDEyOFx1ZDEyOVx1ZDEyYVx1ZDEyYlx1ZDEyY1x1ZDEyZFx1ZDEyZVx1ZDEyZlx1ZDEzMlx1ZDEzM1x1ZDEzNVx1ZDEzNlx1''@;'; put 'put ''ZDEzN1x1ZDEzOVx1ZDEzYlx1ZDEzY1x1ZDEzZFx1ZDEzZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEzZlx1ZDE0Mlx1ZDE0Nlx1ZDE0N1x1ZDE0OFx1ZDE0OVx1ZDE0YVx1ZDE0Ylx1ZDE0ZVx1ZDE0Zlx1ZDE1MVx1ZDE1Mlx1ZDE1M1x1ZDE1NVx1ZDE1Nlx1ZDE1''@;'; put 'put ''N1x1ZDE1OFx1ZDE1OVx1ZDE1YVx1ZDE1Ylx1ZDE1ZVx1ZDE2MFx1ZDE2Mlx1ZDE2M1x1ZDE2NFx1ZDE2NVx1ZDE2Nlx1ZDE2N1x1ZDE2OVx1ZDE2YVx1ZDE2Ylx1ZDE2ZFx1YjU0MFx1YjU0MVx1YjU0M1x1YjU0NFx1YjU0NVx1YjU0Ylx1YjU0Y1x1YjU0ZFx1YjU1MFx1YjU1NFx1YjU1Y1x1''@;'; put 'put ''YjU1ZFx1YjU1Zlx1YjU2MFx1YjU2MVx1YjVhMFx1YjVhMVx1YjVhNFx1YjVhOFx1YjVhYVx1YjVhYlx1YjViMFx1YjViMVx1YjViM1x1YjViNFx1YjViNVx1YjViYlx1YjViY1x1YjViZFx1YjVjMFx1YjVjNFx1YjVjY1x1YjVjZFx1YjVjZlx1YjVkMFx1YjVkMVx1YjVkOFx1YjVlY1x1YjYx''@;'; put 'put ''MFx1YjYxMVx1YjYxNFx1YjYxOFx1YjYyNVx1YjYyY1x1YjYzNFx1YjY0OFx1YjY2NFx1YjY2OFx1YjY5Y1x1YjY5ZFx1YjZhMFx1YjZhNFx1YjZhYlx1YjZhY1x1YjZiMVx1YjZkNFx1YjZmMFx1YjZmNFx1YjZmOFx1YjcwMFx1YjcwMVx1YjcwNVx1YjcyOFx1YjcyOVx1YjcyY1x1YjcyZlx1''@;'; put 'put ''YjczMFx1YjczOFx1YjczOVx1YjczYlx1Yjc0NFx1Yjc0OFx1Yjc0Y1x1Yjc1NFx1Yjc1NVx1Yjc2MFx1Yjc2NFx1Yjc2OFx1Yjc3MFx1Yjc3MVx1Yjc3M1x1Yjc3NVx1Yjc3Y1x1Yjc3ZFx1Yjc4MFx1Yjc4NFx1Yjc4Y1x1Yjc4ZFx1Yjc4Zlx1Yjc5MFx1Yjc5MVx1Yjc5Mlx1Yjc5Nlx1Yjc5''@;'; put 'put ''N1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE4Ml0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTgyXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE4Ml1bc11dPTQ2NTkyK3MsaFs0NjU5MitzXT1jWzE4Ml1bc10pO2ZvcihjWzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDE2ZVx1ZDE2Zlx1ZDE3MFx1ZDE3MVx1ZDE3Mlx1ZDE3M1x1ZDE3NFx1ZDE3NVx1ZDE3Nlx1ZDE3N1x1ZDE3OFx1ZDE3OVx1ZDE3YVx1ZDE3Ylx1ZDE3ZFx1ZDE3ZVx1ZDE3Zlx1ZDE4MFx1ZDE4MVx1ZDE4Mlx1ZDE4M1x1ZDE4NVx1ZDE4''@;'; put 'put ''Nlx1ZDE4N1x1ZDE4OVx1ZDE4YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDE4Ylx1ZDE4Y1x1ZDE4ZFx1ZDE4ZVx1ZDE4Zlx1ZDE5MFx1ZDE5MVx1ZDE5Mlx1ZDE5M1x1ZDE5NFx1ZDE5NVx1ZDE5Nlx1ZDE5N1x1ZDE5OFx1ZDE5OVx1ZDE5YVx1ZDE5Ylx1ZDE5Y1x1''@;'; put 'put ''ZDE5ZFx1ZDE5ZVx1ZDE5Zlx1ZDFhMlx1ZDFhM1x1ZDFhNVx1ZDFhNlx1ZDFhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFhOVx1ZDFhYVx1ZDFhYlx1ZDFhY1x1ZDFhZFx1ZDFhZVx1ZDFhZlx1ZDFiMlx1ZDFiNFx1ZDFiNlx1ZDFiN1x1ZDFiOFx1ZDFiOVx1ZDFi''@;'; put 'put ''Ylx1ZDFiZFx1ZDFiZVx1ZDFiZlx1ZDFjMVx1ZDFjMlx1ZDFjM1x1ZDFjNFx1ZDFjNVx1ZDFjNlx1ZDFjN1x1ZDFjOFx1ZDFjOVx1ZDFjYVx1ZDFjYlx1ZDFjY1x1ZDFjZFx1ZDFjZVx1ZDFjZlx1Yjc5OFx1Yjc5OVx1Yjc5Y1x1YjdhMFx1YjdhOFx1YjdhOVx1YjdhYlx1YjdhY1x1YjdhZFx1''@;'; put 'put ''YjdiNFx1YjdiNVx1YjdiOFx1YjdjN1x1YjdjOVx1YjdlY1x1YjdlZFx1YjdmMFx1YjdmNFx1YjdmY1x1YjdmZFx1YjdmZlx1YjgwMFx1YjgwMVx1YjgwN1x1YjgwOFx1YjgwOVx1YjgwY1x1YjgxMFx1YjgxOFx1YjgxOVx1YjgxYlx1YjgxZFx1YjgyNFx1YjgyNVx1YjgyOFx1YjgyY1x1Yjgz''@;'; put 'put ''NFx1YjgzNVx1YjgzN1x1YjgzOFx1YjgzOVx1Yjg0MFx1Yjg0NFx1Yjg1MVx1Yjg1M1x1Yjg1Y1x1Yjg1ZFx1Yjg2MFx1Yjg2NFx1Yjg2Y1x1Yjg2ZFx1Yjg2Zlx1Yjg3MVx1Yjg3OFx1Yjg3Y1x1Yjg4ZFx1YjhhOFx1YjhiMFx1YjhiNFx1YjhiOFx1YjhjMFx1YjhjMVx1YjhjM1x1YjhjNVx1''@;'; put 'put ''YjhjY1x1YjhkMFx1YjhkNFx1YjhkZFx1YjhkZlx1YjhlMVx1YjhlOFx1YjhlOVx1YjhlY1x1YjhmMFx1YjhmOFx1YjhmOVx1YjhmYlx1YjhmZFx1YjkwNFx1YjkxOFx1YjkyMFx1YjkzY1x1YjkzZFx1Yjk0MFx1Yjk0NFx1Yjk0Y1x1Yjk0Zlx1Yjk1MVx1Yjk1OFx1Yjk1OVx1Yjk1Y1x1Yjk2''@;'; put 'put ''MFx1Yjk2OFx1Yjk2OVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE4M10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTgzXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE4M11bc11dPTQ2ODQ4K3MsaFs0Njg0OCtzXT1jWzE4M11bc10pO2ZvcihjWzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFkMFx1ZDFkMVx1ZDFkMlx1ZDFkM1x1ZDFkNFx1ZDFkNVx1ZDFkNlx1ZDFkN1x1ZDFkOVx1ZDFkYVx1ZDFkYlx1ZDFkY1x1ZDFkZFx1ZDFkZVx1ZDFkZlx1ZDFlMFx1ZDFlMVx1ZDFlMlx1ZDFlM1x1ZDFlNFx1ZDFl''@;'; put 'put ''NVx1ZDFlNlx1ZDFlN1x1ZDFlOFx1ZDFlOVx1ZDFlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFlYlx1ZDFlY1x1ZDFlZFx1ZDFlZVx1ZDFlZlx1ZDFmMFx1ZDFmMVx1ZDFmMlx1ZDFmM1x1ZDFmNVx1ZDFmNlx1ZDFmN1x1ZDFmOVx1ZDFmYVx1ZDFmYlx1ZDFmY1x1''@;'; put 'put ''ZDFmZFx1ZDFmZVx1ZDFmZlx1ZDIwMFx1ZDIwMVx1ZDIwMlx1ZDIwM1x1ZDIwNFx1ZDIwNVx1ZDIwNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDIwOFx1ZDIwYVx1ZDIwYlx1ZDIwY1x1ZDIwZFx1ZDIwZVx1ZDIwZlx1ZDIxMVx1ZDIxMlx1ZDIxM1x1ZDIxNFx1ZDIx''@;'; put 'put ''NVx1ZDIxNlx1ZDIxN1x1ZDIxOFx1ZDIxOVx1ZDIxYVx1ZDIxYlx1ZDIxY1x1ZDIxZFx1ZDIxZVx1ZDIxZlx1ZDIyMFx1ZDIyMVx1ZDIyMlx1ZDIyM1x1ZDIyNFx1ZDIyNVx1ZDIyNlx1ZDIyN1x1ZDIyOFx1ZDIyOVx1Yjk2Ylx1Yjk2ZFx1Yjk3NFx1Yjk3NVx1Yjk3OFx1Yjk3Y1x1Yjk4NFx1''@;'; put 'put ''Yjk4NVx1Yjk4N1x1Yjk4OVx1Yjk4YVx1Yjk4ZFx1Yjk4ZVx1YjlhY1x1YjlhZFx1YjliMFx1YjliNFx1YjliY1x1YjliZFx1YjliZlx1YjljMVx1YjljOFx1YjljOVx1YjljY1x1YjljZVx1YjljZlx1YjlkMFx1YjlkMVx1YjlkMlx1YjlkOFx1YjlkOVx1YjlkYlx1YjlkZFx1YjlkZVx1Yjll''@;'; put 'put ''MVx1YjllM1x1YjllNFx1YjllNVx1YjllOFx1YjllY1x1YjlmNFx1YjlmNVx1YjlmN1x1YjlmOFx1YjlmOVx1YjlmYVx1YmEwMFx1YmEwMVx1YmEwOFx1YmExNVx1YmEzOFx1YmEzOVx1YmEzY1x1YmE0MFx1YmE0Mlx1YmE0OFx1YmE0OVx1YmE0Ylx1YmE0ZFx1YmE0ZVx1YmE1M1x1YmE1NFx1''@;'; put 'put ''YmE1NVx1YmE1OFx1YmE1Y1x1YmE2NFx1YmE2NVx1YmE2N1x1YmE2OFx1YmE2OVx1YmE3MFx1YmE3MVx1YmE3NFx1YmE3OFx1YmE4M1x1YmE4NFx1YmE4NVx1YmE4N1x1YmE4Y1x1YmFhOFx1YmFhOVx1YmFhYlx1YmFhY1x1YmFiMFx1YmFiMlx1YmFiOFx1YmFiOVx1YmFiYlx1YmFiZFx1YmFj''@;'; put 'put ''NFx1YmFjOFx1YmFkOFx1YmFkOVx1YmFmY1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE4NF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTg0XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE4NF1bc11dPTQ3MTA0K3MsaFs0NzEwNCtzXT1jWzE4NF1bc10pO2ZvcihjWzE4NV09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDIyYVx1ZDIyYlx1ZDIyZVx1ZDIyZlx1ZDIzMVx1ZDIzMlx1ZDIzM1x1ZDIzNVx1ZDIzNlx1ZDIzN1x1ZDIzOFx1ZDIzOVx1ZDIzYVx1ZDIzYlx1ZDIzZVx1ZDI0MFx1ZDI0Mlx1ZDI0M1x1ZDI0''@;'; put 'put ''NFx1ZDI0NVx1ZDI0Nlx1ZDI0N1x1ZDI0OVx1ZDI0YVx1ZDI0Ylx1ZDI0Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI0ZFx1ZDI0ZVx1ZDI0Zlx1ZDI1MFx1ZDI1MVx1ZDI1Mlx1ZDI1M1x1ZDI1NFx1ZDI1NVx1ZDI1Nlx1ZDI1N1x1ZDI1OFx1ZDI1OVx1ZDI1YVx1''@;'; put 'put ''ZDI1Ylx1ZDI1ZFx1ZDI1ZVx1ZDI1Zlx1ZDI2MFx1ZDI2MVx1ZDI2Mlx1ZDI2M1x1ZDI2NVx1ZDI2Nlx1ZDI2N1x1ZDI2OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI2OVx1ZDI2YVx1ZDI2Ylx1ZDI2Y1x1ZDI2ZFx1ZDI2ZVx1ZDI2Zlx1ZDI3MFx1ZDI3MVx1ZDI3''@;'; put 'put ''Mlx1ZDI3M1x1ZDI3NFx1ZDI3NVx1ZDI3Nlx1ZDI3N1x1ZDI3OFx1ZDI3OVx1ZDI3YVx1ZDI3Ylx1ZDI3Y1x1ZDI3ZFx1ZDI3ZVx1ZDI3Zlx1ZDI4Mlx1ZDI4M1x1ZDI4NVx1ZDI4Nlx1ZDI4N1x1ZDI4OVx1ZDI4YVx1ZDI4Ylx1ZDI4Y1x1YmIwMFx1YmIwNFx1YmIwZFx1YmIwZlx1YmIxMVx1''@;'; put 'put ''YmIxOFx1YmIxY1x1YmIyMFx1YmIyOVx1YmIyYlx1YmIzNFx1YmIzNVx1YmIzNlx1YmIzOFx1YmIzYlx1YmIzY1x1YmIzZFx1YmIzZVx1YmI0NFx1YmI0NVx1YmI0N1x1YmI0OVx1YmI0ZFx1YmI0Zlx1YmI1MFx1YmI1NFx1YmI1OFx1YmI2MVx1YmI2M1x1YmI2Y1x1YmI4OFx1YmI4Y1x1YmI5''@;'; put 'put ''MFx1YmJhNFx1YmJhOFx1YmJhY1x1YmJiNFx1YmJiN1x1YmJjMFx1YmJjNFx1YmJjOFx1YmJkMFx1YmJkM1x1YmJmOFx1YmJmOVx1YmJmY1x1YmJmZlx1YmMwMFx1YmMwMlx1YmMwOFx1YmMwOVx1YmMwYlx1YmMwY1x1YmMwZFx1YmMwZlx1YmMxMVx1YmMxNFx1YmMxNVx1YmMxNlx1YmMxN1x1''@;'; put 'put ''YmMxOFx1YmMxYlx1YmMxY1x1YmMxZFx1YmMxZVx1YmMxZlx1YmMyNFx1YmMyNVx1YmMyN1x1YmMyOVx1YmMyZFx1YmMzMFx1YmMzMVx1YmMzNFx1YmMzOFx1YmM0MFx1YmM0MVx1YmM0M1x1YmM0NFx1YmM0NVx1YmM0OVx1YmM0Y1x1YmM0ZFx1YmM1MFx1YmM1ZFx1YmM4NFx1YmM4NVx1YmM4''@;'; put 'put ''OFx1YmM4Ylx1YmM4Y1x1YmM4ZVx1YmM5NFx1YmM5NVx1YmM5N1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE4NV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTg1XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE4NV1bc11dPTQ3MzYwK3MsaFs0NzM2MCtzXT1jWzE4NV1bc10pO2ZvcihjWzE4''@;'; put 'put ''Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI4ZFx1ZDI4ZVx1ZDI4Zlx1ZDI5Mlx1ZDI5M1x1ZDI5NFx1ZDI5Nlx1ZDI5N1x1ZDI5OFx1ZDI5OVx1ZDI5YVx1ZDI5Ylx1ZDI5ZFx1ZDI5ZVx1ZDI5Zlx1ZDJhMVx1ZDJh''@;'; put 'put ''Mlx1ZDJhM1x1ZDJhNVx1ZDJhNlx1ZDJhN1x1ZDJhOFx1ZDJhOVx1ZDJhYVx1ZDJhYlx1ZDJhZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJhZVx1ZDJhZlx1ZDJiMFx1ZDJiMlx1ZDJiM1x1ZDJiNFx1ZDJiNVx1ZDJiNlx1ZDJiN1x1ZDJiYVx1ZDJiYlx1ZDJiZFx1''@;'; put 'put ''ZDJiZVx1ZDJjMVx1ZDJjM1x1ZDJjNFx1ZDJjNVx1ZDJjNlx1ZDJjN1x1ZDJjYVx1ZDJjY1x1ZDJjZFx1ZDJjZVx1ZDJjZlx1ZDJkMFx1ZDJkMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJkMlx1ZDJkM1x1ZDJkNVx1ZDJkNlx1ZDJkN1x1ZDJkOVx1ZDJkYVx1ZDJk''@;'; put 'put ''Ylx1ZDJkZFx1ZDJkZVx1ZDJkZlx1ZDJlMFx1ZDJlMVx1ZDJlMlx1ZDJlM1x1ZDJlNlx1ZDJlN1x1ZDJlOFx1ZDJlOVx1ZDJlYVx1ZDJlYlx1ZDJlY1x1ZDJlZFx1ZDJlZVx1ZDJlZlx1ZDJmMlx1ZDJmM1x1ZDJmNVx1ZDJmNlx1ZDJmN1x1ZDJmOVx1ZDJmYVx1YmM5OVx1YmM5YVx1YmNhMFx1''@;'; put 'put ''YmNhMVx1YmNhNFx1YmNhN1x1YmNhOFx1YmNiMFx1YmNiMVx1YmNiM1x1YmNiNFx1YmNiNVx1YmNiY1x1YmNiZFx1YmNjMFx1YmNjNFx1YmNjZFx1YmNjZlx1YmNkMFx1YmNkMVx1YmNkNVx1YmNkOFx1YmNkY1x1YmNmNFx1YmNmNVx1YmNmNlx1YmNmOFx1YmNmY1x1YmQwNFx1YmQwNVx1YmQw''@;'; put 'put ''N1x1YmQwOVx1YmQxMFx1YmQxNFx1YmQyNFx1YmQyY1x1YmQ0MFx1YmQ0OFx1YmQ0OVx1YmQ0Y1x1YmQ1MFx1YmQ1OFx1YmQ1OVx1YmQ2NFx1YmQ2OFx1YmQ4MFx1YmQ4MVx1YmQ4NFx1YmQ4N1x1YmQ4OFx1YmQ4OVx1YmQ4YVx1YmQ5MFx1YmQ5MVx1YmQ5M1x1YmQ5NVx1YmQ5OVx1YmQ5YVx1''@;'; put 'put ''YmQ5Y1x1YmRhNFx1YmRiMFx1YmRiOFx1YmRkNFx1YmRkNVx1YmRkOFx1YmRkY1x1YmRlOVx1YmRmMFx1YmRmNFx1YmRmOFx1YmUwMFx1YmUwM1x1YmUwNVx1YmUwY1x1YmUwZFx1YmUxMFx1YmUxNFx1YmUxY1x1YmUxZFx1YmUxZlx1YmU0NFx1YmU0NVx1YmU0OFx1YmU0Y1x1YmU0ZVx1YmU1''@;'; put 'put ''NFx1YmU1NVx1YmU1N1x1YmU1OVx1YmU1YVx1YmU1Ylx1YmU2MFx1YmU2MVx1YmU2NFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE4Nl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTg2XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE4Nl1bc11dPTQ3NjE2K3MsaFs0NzYxNitzXT1jWzE4Nl1b''@;'; put 'put ''c10pO2ZvcihjWzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJmYlx1ZDJmY1x1ZDJmZFx1ZDJmZVx1ZDJmZlx1ZDMwMlx1ZDMwNFx1ZDMwNlx1ZDMwN1x1ZDMwOFx1ZDMwOVx1ZDMwYVx1ZDMwYlx1ZDMwZlx1ZDMx''@;'; put 'put ''MVx1ZDMxMlx1ZDMxM1x1ZDMxNVx1ZDMxN1x1ZDMxOFx1ZDMxOVx1ZDMxYVx1ZDMxYlx1ZDMxZVx1ZDMyMlx1ZDMyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDMyNFx1ZDMyNlx1ZDMyN1x1ZDMyYVx1ZDMyYlx1ZDMyZFx1ZDMyZVx1ZDMyZlx1ZDMzMVx1ZDMzMlx1''@;'; put 'put ''ZDMzM1x1ZDMzNFx1ZDMzNVx1ZDMzNlx1ZDMzN1x1ZDMzYVx1ZDMzZVx1ZDMzZlx1ZDM0MFx1ZDM0MVx1ZDM0Mlx1ZDM0M1x1ZDM0Nlx1ZDM0N1x1ZDM0OFx1ZDM0OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM0YVx1ZDM0Ylx1ZDM0Y1x1ZDM0ZFx1ZDM0ZVx1ZDM0''@;'; put 'put ''Zlx1ZDM1MFx1ZDM1MVx1ZDM1Mlx1ZDM1M1x1ZDM1NFx1ZDM1NVx1ZDM1Nlx1ZDM1N1x1ZDM1OFx1ZDM1OVx1ZDM1YVx1ZDM1Ylx1ZDM1Y1x1ZDM1ZFx1ZDM1ZVx1ZDM1Zlx1ZDM2MFx1ZDM2MVx1ZDM2Mlx1ZDM2M1x1ZDM2NFx1ZDM2NVx1ZDM2Nlx1ZDM2N1x1ZDM2OFx1ZDM2OVx1YmU2OFx1''@;'; put 'put ''YmU2YVx1YmU3MFx1YmU3MVx1YmU3M1x1YmU3NFx1YmU3NVx1YmU3Ylx1YmU3Y1x1YmU3ZFx1YmU4MFx1YmU4NFx1YmU4Y1x1YmU4ZFx1YmU4Zlx1YmU5MFx1YmU5MVx1YmU5OFx1YmU5OVx1YmVhOFx1YmVkMFx1YmVkMVx1YmVkNFx1YmVkN1x1YmVkOFx1YmVlMFx1YmVlM1x1YmVlNFx1YmVl''@;'; put 'put ''NVx1YmVlY1x1YmYwMVx1YmYwOFx1YmYwOVx1YmYxOFx1YmYxOVx1YmYxYlx1YmYxY1x1YmYxZFx1YmY0MFx1YmY0MVx1YmY0NFx1YmY0OFx1YmY1MFx1YmY1MVx1YmY1NVx1YmY5NFx1YmZiMFx1YmZjNVx1YmZjY1x1YmZjZFx1YmZkMFx1YmZkNFx1YmZkY1x1YmZkZlx1YmZlMVx1YzAzY1x1''@;'; put 'put ''YzA1MVx1YzA1OFx1YzA1Y1x1YzA2MFx1YzA2OFx1YzA2OVx1YzA5MFx1YzA5MVx1YzA5NFx1YzA5OFx1YzBhMFx1YzBhMVx1YzBhM1x1YzBhNVx1YzBhY1x1YzBhZFx1YzBhZlx1YzBiMFx1YzBiM1x1YzBiNFx1YzBiNVx1YzBiNlx1YzBiY1x1YzBiZFx1YzBiZlx1YzBjMFx1YzBjMVx1YzBj''@;'; put 'put ''NVx1YzBjOFx1YzBjOVx1YzBjY1x1YzBkMFx1YzBkOFx1YzBkOVx1YzBkYlx1YzBkY1x1YzBkZFx1YzBlNFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE4N10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTg3XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE4N11bc11dPTQ3ODcyK3MsaFs0Nzg3''@;'; put 'put ''MitzXT1jWzE4N11bc10pO2ZvcihjWzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM2YVx1ZDM2Ylx1ZDM2Y1x1ZDM2ZFx1ZDM2ZVx1ZDM2Zlx1ZDM3MFx1ZDM3MVx1ZDM3Mlx1ZDM3M1x1ZDM3NFx1ZDM3NVx1ZDM3''@;'; put 'put ''Nlx1ZDM3N1x1ZDM3OFx1ZDM3OVx1ZDM3YVx1ZDM3Ylx1ZDM3ZVx1ZDM3Zlx1ZDM4MVx1ZDM4Mlx1ZDM4M1x1ZDM4NVx1ZDM4Nlx1ZDM4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM4OFx1ZDM4OVx1ZDM4YVx1ZDM4Ylx1ZDM4ZVx1ZDM5Mlx1ZDM5M1x1ZDM5NFx1''@;'; put 'put ''ZDM5NVx1ZDM5Nlx1ZDM5N1x1ZDM5YVx1ZDM5Ylx1ZDM5ZFx1ZDM5ZVx1ZDM5Zlx1ZDNhMVx1ZDNhMlx1ZDNhM1x1ZDNhNFx1ZDNhNVx1ZDNhNlx1ZDNhN1x1ZDNhYVx1ZDNhY1x1ZDNhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNhZlx1ZDNiMFx1ZDNiMVx1ZDNi''@;'; put 'put ''Mlx1ZDNiM1x1ZDNiNVx1ZDNiNlx1ZDNiN1x1ZDNiOVx1ZDNiYVx1ZDNiYlx1ZDNiZFx1ZDNiZVx1ZDNiZlx1ZDNjMFx1ZDNjMVx1ZDNjMlx1ZDNjM1x1ZDNjNlx1ZDNjN1x1ZDNjYVx1ZDNjYlx1ZDNjY1x1ZDNjZFx1ZDNjZVx1ZDNjZlx1ZDNkMVx1ZDNkMlx1ZDNkM1x1ZDNkNFx1ZDNkNVx1''@;'; put 'put ''ZDNkNlx1YzBlNVx1YzBlOFx1YzBlY1x1YzBmNFx1YzBmNVx1YzBmN1x1YzBmOVx1YzEwMFx1YzEwNFx1YzEwOFx1YzExMFx1YzExNVx1YzExY1x1YzExZFx1YzExZVx1YzExZlx1YzEyMFx1YzEyM1x1YzEyNFx1YzEyNlx1YzEyN1x1YzEyY1x1YzEyZFx1YzEyZlx1YzEzMFx1YzEzMVx1YzEz''@;'; put 'put ''Nlx1YzEzOFx1YzEzOVx1YzEzY1x1YzE0MFx1YzE0OFx1YzE0OVx1YzE0Ylx1YzE0Y1x1YzE0ZFx1YzE1NFx1YzE1NVx1YzE1OFx1YzE1Y1x1YzE2NFx1YzE2NVx1YzE2N1x1YzE2OFx1YzE2OVx1YzE3MFx1YzE3NFx1YzE3OFx1YzE4NVx1YzE4Y1x1YzE4ZFx1YzE4ZVx1YzE5MFx1YzE5NFx1''@;'; put 'put ''YzE5Nlx1YzE5Y1x1YzE5ZFx1YzE5Zlx1YzFhMVx1YzFhNVx1YzFhOFx1YzFhOVx1YzFhY1x1YzFiMFx1YzFiZFx1YzFjNFx1YzFjOFx1YzFjY1x1YzFkNFx1YzFkN1x1YzFkOFx1YzFlMFx1YzFlNFx1YzFlOFx1YzFmMFx1YzFmMVx1YzFmM1x1YzFmY1x1YzFmZFx1YzIwMFx1YzIwNFx1YzIw''@;'; put 'put ''Y1x1YzIwZFx1YzIwZlx1YzIxMVx1YzIxOFx1YzIxOVx1YzIxY1x1YzIxZlx1YzIyMFx1YzIyOFx1YzIyOVx1YzIyYlx1YzIyZFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE4OF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTg4XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE4OF1bc11dPTQ4''@;'; put 'put ''MTI4K3MsaFs0ODEyOCtzXT1jWzE4OF1bc10pO2ZvcihjWzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNkN1x1ZDNkOVx1ZDNkYVx1ZDNkYlx1ZDNkY1x1ZDNkZFx1ZDNkZVx1ZDNkZlx1ZDNlMFx1ZDNlMlx1ZDNl''@;'; put 'put ''NFx1ZDNlNVx1ZDNlNlx1ZDNlN1x1ZDNlOFx1ZDNlOVx1ZDNlYVx1ZDNlYlx1ZDNlZVx1ZDNlZlx1ZDNmMVx1ZDNmMlx1ZDNmM1x1ZDNmNVx1ZDNmNlx1ZDNmN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNmOFx1ZDNmOVx1ZDNmYVx1ZDNmYlx1ZDNmZVx1ZDQwMFx1''@;'; put 'put ''ZDQwMlx1ZDQwM1x1ZDQwNFx1ZDQwNVx1ZDQwNlx1ZDQwN1x1ZDQwOVx1ZDQwYVx1ZDQwYlx1ZDQwY1x1ZDQwZFx1ZDQwZVx1ZDQwZlx1ZDQxMFx1ZDQxMVx1ZDQxMlx1ZDQxM1x1ZDQxNFx1ZDQxNVx1ZDQxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQxN1x1ZDQx''@;'; put 'put ''OFx1ZDQxOVx1ZDQxYVx1ZDQxYlx1ZDQxY1x1ZDQxZVx1ZDQxZlx1ZDQyMFx1ZDQyMVx1ZDQyMlx1ZDQyM1x1ZDQyNFx1ZDQyNVx1ZDQyNlx1ZDQyN1x1ZDQyOFx1ZDQyOVx1ZDQyYVx1ZDQyYlx1ZDQyY1x1ZDQyZFx1ZDQyZVx1ZDQyZlx1ZDQzMFx1ZDQzMVx1ZDQzMlx1ZDQzM1x1ZDQzNFx1''@;'; put 'put ''ZDQzNVx1ZDQzNlx1ZDQzN1x1YzIyZlx1YzIzMVx1YzIzMlx1YzIzNFx1YzI0OFx1YzI1MFx1YzI1MVx1YzI1NFx1YzI1OFx1YzI2MFx1YzI2NVx1YzI2Y1x1YzI2ZFx1YzI3MFx1YzI3NFx1YzI3Y1x1YzI3ZFx1YzI3Zlx1YzI4MVx1YzI4OFx1YzI4OVx1YzI5MFx1YzI5OFx1YzI5Ylx1YzI5''@;'; put 'put ''ZFx1YzJhNFx1YzJhNVx1YzJhOFx1YzJhY1x1YzJhZFx1YzJiNFx1YzJiNVx1YzJiN1x1YzJiOVx1YzJkY1x1YzJkZFx1YzJlMFx1YzJlM1x1YzJlNFx1YzJlYlx1YzJlY1x1YzJlZFx1YzJlZlx1YzJmMVx1YzJmNlx1YzJmOFx1YzJmOVx1YzJmYlx1YzJmY1x1YzMwMFx1YzMwOFx1YzMwOVx1''@;'; put 'put ''YzMwY1x1YzMwZFx1YzMxM1x1YzMxNFx1YzMxNVx1YzMxOFx1YzMxY1x1YzMyNFx1YzMyNVx1YzMyOFx1YzMyOVx1YzM0NVx1YzM2OFx1YzM2OVx1YzM2Y1x1YzM3MFx1YzM3Mlx1YzM3OFx1YzM3OVx1YzM3Y1x1YzM3ZFx1YzM4NFx1YzM4OFx1YzM4Y1x1YzNjMFx1YzNkOFx1YzNkOVx1YzNk''@;'; put 'put ''Y1x1YzNkZlx1YzNlMFx1YzNlMlx1YzNlOFx1YzNlOVx1YzNlZFx1YzNmNFx1YzNmNVx1YzNmOFx1YzQwOFx1YzQxMFx1YzQyNFx1YzQyY1x1YzQzMFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE4OV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTg5XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtj''@;'; put 'put ''WzE4OV1bc11dPTQ4Mzg0K3MsaFs0ODM4NCtzXT1jWzE4OV1bc10pO2ZvcihjWzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQzOFx1ZDQzOVx1ZDQzYVx1ZDQzYlx1ZDQzY1x1ZDQzZFx1ZDQzZVx1ZDQzZlx1ZDQ0''@;'; put 'put ''MVx1ZDQ0Mlx1ZDQ0M1x1ZDQ0NVx1ZDQ0Nlx1ZDQ0N1x1ZDQ0OFx1ZDQ0OVx1ZDQ0YVx1ZDQ0Ylx1ZDQ0Y1x1ZDQ0ZFx1ZDQ0ZVx1ZDQ0Zlx1ZDQ1MFx1ZDQ1MVx1ZDQ1Mlx1ZDQ1M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ1NFx1ZDQ1NVx1ZDQ1Nlx1ZDQ1N1x1''@;'; put 'put ''ZDQ1OFx1ZDQ1OVx1ZDQ1YVx1ZDQ1Ylx1ZDQ1ZFx1ZDQ1ZVx1ZDQ1Zlx1ZDQ2MVx1ZDQ2Mlx1ZDQ2M1x1ZDQ2NVx1ZDQ2Nlx1ZDQ2N1x1ZDQ2OFx1ZDQ2OVx1ZDQ2YVx1ZDQ2Ylx1ZDQ2Y1x1ZDQ2ZVx1ZDQ3MFx1ZDQ3MVx1ZDQ3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZDQ3M1x1ZDQ3NFx1ZDQ3NVx1ZDQ3Nlx1ZDQ3N1x1ZDQ3YVx1ZDQ3Ylx1ZDQ3ZFx1ZDQ3ZVx1ZDQ4MVx1ZDQ4M1x1ZDQ4NFx1ZDQ4NVx1ZDQ4Nlx1ZDQ4N1x1ZDQ4YVx1ZDQ4Y1x1ZDQ4ZVx1ZDQ4Zlx1ZDQ5MFx1ZDQ5MVx1ZDQ5Mlx1ZDQ5M1x1ZDQ5NVx1ZDQ5Nlx1ZDQ5N1x1ZDQ5OFx1''@;'; put 'put ''ZDQ5OVx1ZDQ5YVx1ZDQ5Ylx1ZDQ5Y1x1ZDQ5ZFx1YzQzNFx1YzQzY1x1YzQzZFx1YzQ0OFx1YzQ2NFx1YzQ2NVx1YzQ2OFx1YzQ2Y1x1YzQ3NFx1YzQ3NVx1YzQ3OVx1YzQ4MFx1YzQ5NFx1YzQ5Y1x1YzRiOFx1YzRiY1x1YzRlOVx1YzRmMFx1YzRmMVx1YzRmNFx1YzRmOFx1YzRmYVx1YzRm''@;'; put 'put ''Zlx1YzUwMFx1YzUwMVx1YzUwY1x1YzUxMFx1YzUxNFx1YzUxY1x1YzUyOFx1YzUyOVx1YzUyY1x1YzUzMFx1YzUzOFx1YzUzOVx1YzUzYlx1YzUzZFx1YzU0NFx1YzU0NVx1YzU0OFx1YzU0OVx1YzU0YVx1YzU0Y1x1YzU0ZFx1YzU0ZVx1YzU1M1x1YzU1NFx1YzU1NVx1YzU1N1x1YzU1OFx1''@;'; put 'put ''YzU1OVx1YzU1ZFx1YzU1ZVx1YzU2MFx1YzU2MVx1YzU2NFx1YzU2OFx1YzU3MFx1YzU3MVx1YzU3M1x1YzU3NFx1YzU3NVx1YzU3Y1x1YzU3ZFx1YzU4MFx1YzU4NFx1YzU4N1x1YzU4Y1x1YzU4ZFx1YzU4Zlx1YzU5MVx1YzU5NVx1YzU5N1x1YzU5OFx1YzU5Y1x1YzVhMFx1YzVhOVx1YzVi''@;'; put 'put ''NFx1YzViNVx1YzViOFx1YzViOVx1YzViYlx1YzViY1x1YzViZFx1YzViZVx1YzVjNFx1YzVjNVx1YzVjNlx1YzVjN1x1YzVjOFx1YzVjOVx1YzVjYVx1YzVjY1x1YzVjZVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE5MF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTkwXVtzXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoeVtjWzE5MF1bc11dPTQ4NjQwK3MsaFs0ODY0MCtzXT1jWzE5MF1bc10pO2ZvcihjWzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ5ZVx1ZDQ5Zlx1ZDRhMFx1ZDRhMVx1ZDRhMlx1ZDRhM1x1ZDRh''@;'; put 'put ''NFx1ZDRhNVx1ZDRhNlx1ZDRhN1x1ZDRhOFx1ZDRhYVx1ZDRhYlx1ZDRhY1x1ZDRhZFx1ZDRhZVx1ZDRhZlx1ZDRiMFx1ZDRiMVx1ZDRiMlx1ZDRiM1x1ZDRiNFx1ZDRiNVx1ZDRiNlx1ZDRiN1x1ZDRiOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRiOVx1ZDRiYVx1''@;'; put 'put ''ZDRiYlx1ZDRiY1x1ZDRiZFx1ZDRiZVx1ZDRiZlx1ZDRjMFx1ZDRjMVx1ZDRjMlx1ZDRjM1x1ZDRjNFx1ZDRjNVx1ZDRjNlx1ZDRjN1x1ZDRjOFx1ZDRjOVx1ZDRjYVx1ZDRjYlx1ZDRjZFx1ZDRjZVx1ZDRjZlx1ZDRkMVx1ZDRkMlx1ZDRkM1x1ZDRkNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZDRkNlx1ZDRkN1x1ZDRkOFx1ZDRkOVx1ZDRkYVx1ZDRkYlx1ZDRkZFx1ZDRkZVx1ZDRlMFx1ZDRlMVx1ZDRlMlx1ZDRlM1x1ZDRlNFx1ZDRlNVx1ZDRlNlx1ZDRlN1x1ZDRlOVx1ZDRlYVx1ZDRlYlx1ZDRlZFx1ZDRlZVx1ZDRlZlx1ZDRmMVx1ZDRmMlx1ZDRmM1x1''@;'; put 'put ''ZDRmNFx1ZDRmNVx1ZDRmNlx1ZDRmN1x1ZDRmOVx1ZDRmYVx1ZDRmY1x1YzVkMFx1YzVkMVx1YzVkNFx1YzVkOFx1YzVlMFx1YzVlMVx1YzVlM1x1YzVlNVx1YzVlY1x1YzVlZFx1YzVlZVx1YzVmMFx1YzVmNFx1YzVmNlx1YzVmN1x1YzVmY1x1YzVmZFx1YzVmZVx1YzVmZlx1YzYwMFx1YzYw''@;'; put 'put ''MVx1YzYwNVx1YzYwNlx1YzYwN1x1YzYwOFx1YzYwY1x1YzYxMFx1YzYxOFx1YzYxOVx1YzYxYlx1YzYxY1x1YzYyNFx1YzYyNVx1YzYyOFx1YzYyY1x1YzYyZFx1YzYyZVx1YzYzMFx1YzYzM1x1YzYzNFx1YzYzNVx1YzYzN1x1YzYzOVx1YzYzYlx1YzY0MFx1YzY0MVx1YzY0NFx1YzY0OFx1''@;'; put 'put ''YzY1MFx1YzY1MVx1YzY1M1x1YzY1NFx1YzY1NVx1YzY1Y1x1YzY1ZFx1YzY2MFx1YzY2Y1x1YzY2Zlx1YzY3MVx1YzY3OFx1YzY3OVx1YzY3Y1x1YzY4MFx1YzY4OFx1YzY4OVx1YzY4Ylx1YzY4ZFx1YzY5NFx1YzY5NVx1YzY5OFx1YzY5Y1x1YzZhNFx1YzZhNVx1YzZhN1x1YzZhOVx1YzZi''@;'; put 'put ''MFx1YzZiMVx1YzZiNFx1YzZiOFx1YzZiOVx1YzZiYVx1YzZjMFx1YzZjMVx1YzZjM1x1YzZjNVx1YzZjY1x1YzZjZFx1YzZkMFx1YzZkNFx1YzZkY1x1YzZkZFx1YzZlMFx1YzZlMVx1YzZlOFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE5MV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTkx''@;'; put 'put ''XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE5MV1bc11dPTQ4ODk2K3MsaFs0ODg5NitzXT1jWzE5MV1bc10pO2ZvcihjWzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRmZVx1ZDRmZlx1ZDUwMFx1ZDUwMVx1ZDUw''@;'; put 'put ''Mlx1ZDUwM1x1ZDUwNVx1ZDUwNlx1ZDUwN1x1ZDUwOVx1ZDUwYVx1ZDUwYlx1ZDUwZFx1ZDUwZVx1ZDUwZlx1ZDUxMFx1ZDUxMVx1ZDUxMlx1ZDUxM1x1ZDUxNlx1ZDUxOFx1ZDUxOVx1ZDUxYVx1ZDUxYlx1ZDUxY1x1ZDUxZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZDUxZVx1ZDUxZlx1ZDUyMFx1ZDUyMVx1ZDUyMlx1ZDUyM1x1ZDUyNFx1ZDUyNVx1ZDUyNlx1ZDUyN1x1ZDUyOFx1ZDUyOVx1ZDUyYVx1ZDUyYlx1ZDUyY1x1ZDUyZFx1ZDUyZVx1ZDUyZlx1ZDUzMFx1ZDUzMVx1ZDUzMlx1ZDUzM1x1ZDUzNFx1ZDUzNVx1ZDUzNlx1ZDUzN1x1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDUzOFx1ZDUzOVx1ZDUzYVx1ZDUzYlx1ZDUzZVx1ZDUzZlx1ZDU0MVx1ZDU0Mlx1ZDU0M1x1ZDU0NVx1ZDU0Nlx1ZDU0N1x1ZDU0OFx1ZDU0OVx1ZDU0YVx1ZDU0Ylx1ZDU0ZVx1ZDU1MFx1ZDU1Mlx1ZDU1M1x1ZDU1NFx1ZDU1NVx1ZDU1Nlx1''@;'; put 'put ''ZDU1N1x1ZDU1YVx1ZDU1Ylx1ZDU1ZFx1ZDU1ZVx1ZDU1Zlx1ZDU2MVx1ZDU2Mlx1ZDU2M1x1YzZlOVx1YzZlY1x1YzZmMFx1YzZmOFx1YzZmOVx1YzZmZFx1YzcwNFx1YzcwNVx1YzcwOFx1YzcwY1x1YzcxNFx1YzcxNVx1YzcxN1x1YzcxOVx1YzcyMFx1YzcyMVx1YzcyNFx1YzcyOFx1Yzcz''@;'; put 'put ''MFx1YzczMVx1YzczM1x1YzczNVx1YzczN1x1YzczY1x1YzczZFx1Yzc0MFx1Yzc0NFx1Yzc0YVx1Yzc0Y1x1Yzc0ZFx1Yzc0Zlx1Yzc1MVx1Yzc1Mlx1Yzc1M1x1Yzc1NFx1Yzc1NVx1Yzc1Nlx1Yzc1N1x1Yzc1OFx1Yzc1Y1x1Yzc2MFx1Yzc2OFx1Yzc2Ylx1Yzc3NFx1Yzc3NVx1Yzc3OFx1''@;'; put 'put ''Yzc3Y1x1Yzc3ZFx1Yzc3ZVx1Yzc4M1x1Yzc4NFx1Yzc4NVx1Yzc4N1x1Yzc4OFx1Yzc4OVx1Yzc4YVx1Yzc4ZVx1Yzc5MFx1Yzc5MVx1Yzc5NFx1Yzc5Nlx1Yzc5N1x1Yzc5OFx1Yzc5YVx1YzdhMFx1YzdhMVx1YzdhM1x1YzdhNFx1YzdhNVx1YzdhNlx1YzdhY1x1YzdhZFx1YzdiMFx1Yzdi''@;'; put 'put ''NFx1YzdiY1x1YzdiZFx1YzdiZlx1YzdjMFx1YzdjMVx1YzdjOFx1YzdjOVx1YzdjY1x1YzdjZVx1YzdkMFx1YzdkOFx1YzdkZFx1YzdlNFx1YzdlOFx1YzdlY1x1YzgwMFx1YzgwMVx1YzgwNFx1YzgwOFx1YzgwYVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE5Ml0ubGVuZ3RoOysrcyk2''@;'; put 'put ''NTUzMyE9PWNbMTkyXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE5Ml1bc11dPTQ5MTUyK3MsaFs0OTE1MitzXT1jWzE5Ml1bc10pO2ZvcihjWzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDU2NFx1ZDU2Nlx1ZDU2''@;'; put 'put ''N1x1ZDU2YVx1ZDU2Y1x1ZDU2ZVx1ZDU2Zlx1ZDU3MFx1ZDU3MVx1ZDU3Mlx1ZDU3M1x1ZDU3Nlx1ZDU3N1x1ZDU3OVx1ZDU3YVx1ZDU3Ylx1ZDU3ZFx1ZDU3ZVx1ZDU3Zlx1ZDU4MFx1ZDU4MVx1ZDU4Mlx1ZDU4M1x1ZDU4Nlx1ZDU4YVx1ZDU4Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZDU4Y1x1ZDU4ZFx1ZDU4ZVx1ZDU4Zlx1ZDU5MVx1ZDU5Mlx1ZDU5M1x1ZDU5NFx1ZDU5NVx1ZDU5Nlx1ZDU5N1x1ZDU5OFx1ZDU5OVx1ZDU5YVx1ZDU5Ylx1ZDU5Y1x1ZDU5ZFx1ZDU5ZVx1ZDU5Zlx1ZDVhMFx1ZDVhMVx1ZDVhMlx1ZDVhM1x1ZDVhNFx1ZDVhNlx1ZDVh''@;'; put 'put ''N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVhOFx1ZDVhOVx1ZDVhYVx1ZDVhYlx1ZDVhY1x1ZDVhZFx1ZDVhZVx1ZDVhZlx1ZDViMFx1ZDViMVx1ZDViMlx1ZDViM1x1ZDViNFx1ZDViNVx1ZDViNlx1ZDViN1x1ZDViOFx1ZDViOVx1ZDViYVx1ZDViYlx1ZDViY1x1''@;'; put 'put ''ZDViZFx1ZDViZVx1ZDViZlx1ZDVjMFx1ZDVjMVx1ZDVjMlx1ZDVjM1x1ZDVjNFx1ZDVjNVx1ZDVjNlx1ZDVjN1x1YzgxMFx1YzgxMVx1YzgxM1x1YzgxNVx1YzgxNlx1YzgxY1x1YzgxZFx1YzgyMFx1YzgyNFx1YzgyY1x1YzgyZFx1YzgyZlx1YzgzMVx1YzgzOFx1YzgzY1x1Yzg0MFx1Yzg0''@;'; put 'put ''OFx1Yzg0OVx1Yzg0Y1x1Yzg0ZFx1Yzg1NFx1Yzg3MFx1Yzg3MVx1Yzg3NFx1Yzg3OFx1Yzg3YVx1Yzg4MFx1Yzg4MVx1Yzg4M1x1Yzg4NVx1Yzg4Nlx1Yzg4N1x1Yzg4Ylx1Yzg4Y1x1Yzg4ZFx1Yzg5NFx1Yzg5ZFx1Yzg5Zlx1YzhhMVx1YzhhOFx1YzhiY1x1YzhiZFx1YzhjNFx1YzhjOFx1''@;'; put 'put ''YzhjY1x1YzhkNFx1YzhkNVx1YzhkN1x1YzhkOVx1YzhlMFx1YzhlMVx1YzhlNFx1YzhmNVx1YzhmY1x1YzhmZFx1YzkwMFx1YzkwNFx1YzkwNVx1YzkwNlx1YzkwY1x1YzkwZFx1YzkwZlx1YzkxMVx1YzkxOFx1YzkyY1x1YzkzNFx1Yzk1MFx1Yzk1MVx1Yzk1NFx1Yzk1OFx1Yzk2MFx1Yzk2''@;'; put 'put ''MVx1Yzk2M1x1Yzk2Y1x1Yzk3MFx1Yzk3NFx1Yzk3Y1x1Yzk4OFx1Yzk4OVx1Yzk4Y1x1Yzk5MFx1Yzk5OFx1Yzk5OVx1Yzk5Ylx1Yzk5ZFx1YzljMFx1YzljMVx1YzljNFx1YzljN1x1YzljOFx1YzljYVx1YzlkMFx1YzlkMVx1YzlkM1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE5M10u''@;'; put 'put ''bGVuZ3RoOysrcyk2NTUzMyE9PWNbMTkzXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE5M11bc11dPTQ5NDA4K3MsaFs0OTQwOCtzXT1jWzE5M11bc10pO2ZvcihjWzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVj''@;'; put 'put ''YVx1ZDVjYlx1ZDVjZFx1ZDVjZVx1ZDVjZlx1ZDVkMVx1ZDVkM1x1ZDVkNFx1ZDVkNVx1ZDVkNlx1ZDVkN1x1ZDVkYVx1ZDVkY1x1ZDVkZVx1ZDVkZlx1ZDVlMFx1ZDVlMVx1ZDVlMlx1ZDVlM1x1ZDVlNlx1ZDVlN1x1ZDVlOVx1ZDVlYVx1ZDVlYlx1ZDVlZFx1ZDVlZVx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVlZlx1ZDVmMFx1ZDVmMVx1ZDVmMlx1ZDVmM1x1ZDVmNlx1ZDVmOFx1ZDVmYVx1ZDVmYlx1ZDVmY1x1ZDVmZFx1ZDVmZVx1ZDVmZlx1ZDYwMlx1ZDYwM1x1ZDYwNVx1ZDYwNlx1ZDYwN1x1ZDYwOVx1ZDYwYVx1ZDYwYlx1ZDYwY1x1ZDYwZFx1ZDYw''@;'; put 'put ''ZVx1ZDYwZlx1ZDYxMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYxNlx1ZDYxN1x1ZDYxOFx1ZDYxOVx1ZDYxYVx1ZDYxYlx1ZDYxZFx1ZDYxZVx1ZDYxZlx1ZDYyMVx1ZDYyMlx1ZDYyM1x1ZDYyNVx1ZDYyNlx1ZDYyN1x1ZDYyOFx1ZDYyOVx1ZDYyYVx1ZDYyYlx1''@;'; put 'put ''ZDYyY1x1ZDYyZVx1ZDYyZlx1ZDYzMFx1ZDYzMVx1ZDYzMlx1ZDYzM1x1ZDYzNFx1ZDYzNVx1ZDYzNlx1ZDYzN1x1ZDYzYVx1ZDYzYlx1YzlkNVx1YzlkNlx1YzlkOVx1YzlkYVx1YzlkY1x1YzlkZFx1YzllMFx1YzllMlx1YzllNFx1YzllN1x1YzllY1x1YzllZFx1YzllZlx1YzlmMFx1Yzlm''@;'; put 'put ''MVx1YzlmOFx1YzlmOVx1YzlmY1x1Y2EwMFx1Y2EwOFx1Y2EwOVx1Y2EwYlx1Y2EwY1x1Y2EwZFx1Y2ExNFx1Y2ExOFx1Y2EyOVx1Y2E0Y1x1Y2E0ZFx1Y2E1MFx1Y2E1NFx1Y2E1Y1x1Y2E1ZFx1Y2E1Zlx1Y2E2MFx1Y2E2MVx1Y2E2OFx1Y2E3ZFx1Y2E4NFx1Y2E5OFx1Y2FiY1x1Y2FiZFx1''@;'; put 'put ''Y2FjMFx1Y2FjNFx1Y2FjY1x1Y2FjZFx1Y2FjZlx1Y2FkMVx1Y2FkM1x1Y2FkOFx1Y2FkOVx1Y2FlMFx1Y2FlY1x1Y2FmNFx1Y2IwOFx1Y2IxMFx1Y2IxNFx1Y2IxOFx1Y2IyMFx1Y2IyMVx1Y2I0MVx1Y2I0OFx1Y2I0OVx1Y2I0Y1x1Y2I1MFx1Y2I1OFx1Y2I1OVx1Y2I1ZFx1Y2I2NFx1Y2I3''@;'; put 'put ''OFx1Y2I3OVx1Y2I5Y1x1Y2JiOFx1Y2JkNFx1Y2JlNFx1Y2JlN1x1Y2JlOVx1Y2MwY1x1Y2MwZFx1Y2MxMFx1Y2MxNFx1Y2MxY1x1Y2MxZFx1Y2MyMVx1Y2MyMlx1Y2MyN1x1Y2MyOFx1Y2MyOVx1Y2MyY1x1Y2MyZVx1Y2MzMFx1Y2MzOFx1Y2MzOVx1Y2MzYlx1ZmZmZCIuc3BsaXQoIiIpLHM9''@;'; put 'put ''MDtzIT1jWzE5NF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTk0XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE5NF1bc11dPTQ5NjY0K3MsaFs0OTY2NCtzXT1jWzE5NF1bc10pO2ZvcihjWzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZDYzZFx1ZDYzZVx1ZDYzZlx1ZDY0MVx1ZDY0Mlx1ZDY0M1x1ZDY0NFx1ZDY0Nlx1ZDY0N1x1ZDY0YVx1ZDY0Y1x1ZDY0ZVx1ZDY0Zlx1ZDY1MFx1ZDY1Mlx1ZDY1M1x1ZDY1Nlx1ZDY1N1x1ZDY1OVx1ZDY1YVx1ZDY1Ylx1ZDY1ZFx1ZDY1ZVx1ZDY1Zlx1ZDY2MFx1ZDY2MVx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDY2Mlx1ZDY2M1x1ZDY2NFx1ZDY2NVx1ZDY2Nlx1ZDY2OFx1ZDY2YVx1ZDY2Ylx1ZDY2Y1x1ZDY2ZFx1ZDY2ZVx1ZDY2Zlx1ZDY3Mlx1ZDY3M1x1ZDY3NVx1ZDY3Nlx1ZDY3N1x1ZDY3OFx1ZDY3OVx1ZDY3YVx1ZDY3Ylx1ZDY3''@;'; put 'put ''Y1x1ZDY3ZFx1ZDY3ZVx1ZDY3Zlx1ZDY4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDY4MVx1ZDY4Mlx1ZDY4NFx1ZDY4Nlx1ZDY4N1x1ZDY4OFx1ZDY4OVx1ZDY4YVx1ZDY4Ylx1ZDY4ZVx1ZDY4Zlx1ZDY5MVx1ZDY5Mlx1ZDY5M1x1ZDY5NVx1ZDY5Nlx1ZDY5N1x1''@;'; put 'put ''ZDY5OFx1ZDY5OVx1ZDY5YVx1ZDY5Ylx1ZDY5Y1x1ZDY5ZVx1ZDZhMFx1ZDZhMlx1ZDZhM1x1ZDZhNFx1ZDZhNVx1ZDZhNlx1ZDZhN1x1ZDZhOVx1ZDZhYVx1Y2MzY1x1Y2MzZFx1Y2MzZVx1Y2M0NFx1Y2M0NVx1Y2M0OFx1Y2M0Y1x1Y2M1NFx1Y2M1NVx1Y2M1N1x1Y2M1OFx1Y2M1OVx1Y2M2''@;'; put 'put ''MFx1Y2M2NFx1Y2M2Nlx1Y2M2OFx1Y2M3MFx1Y2M3NVx1Y2M5OFx1Y2M5OVx1Y2M5Y1x1Y2NhMFx1Y2NhOFx1Y2NhOVx1Y2NhYlx1Y2NhY1x1Y2NhZFx1Y2NiNFx1Y2NiNVx1Y2NiOFx1Y2NiY1x1Y2NjNFx1Y2NjNVx1Y2NjN1x1Y2NjOVx1Y2NkMFx1Y2NkNFx1Y2NlNFx1Y2NlY1x1Y2NmMFx1''@;'; put 'put ''Y2QwMVx1Y2QwOFx1Y2QwOVx1Y2QwY1x1Y2QxMFx1Y2QxOFx1Y2QxOVx1Y2QxYlx1Y2QxZFx1Y2QyNFx1Y2QyOFx1Y2QyY1x1Y2QzOVx1Y2Q1Y1x1Y2Q2MFx1Y2Q2NFx1Y2Q2Y1x1Y2Q2ZFx1Y2Q2Zlx1Y2Q3MVx1Y2Q3OFx1Y2Q4OFx1Y2Q5NFx1Y2Q5NVx1Y2Q5OFx1Y2Q5Y1x1Y2RhNFx1Y2Rh''@;'; put 'put ''NVx1Y2RhN1x1Y2RhOVx1Y2RiMFx1Y2RjNFx1Y2RjY1x1Y2RkMFx1Y2RlOFx1Y2RlY1x1Y2RmMFx1Y2RmOFx1Y2RmOVx1Y2RmYlx1Y2RmZFx1Y2UwNFx1Y2UwOFx1Y2UwY1x1Y2UxNFx1Y2UxOVx1Y2UyMFx1Y2UyMVx1Y2UyNFx1Y2UyOFx1Y2UzMFx1Y2UzMVx1Y2UzM1x1Y2UzNVx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLHM9MDtzIT1jWzE5NV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTk1XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE5NV1bc11dPTQ5OTIwK3MsaFs0OTkyMCtzXT1jWzE5NV1bc10pO2ZvcihjWzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZhYlx1ZDZhZFx1ZDZhZVx1ZDZhZlx1ZDZiMVx1ZDZiMlx1ZDZiM1x1ZDZiNFx1ZDZiNVx1ZDZiNlx1ZDZiN1x1ZDZiOFx1ZDZiYVx1ZDZiY1x1ZDZiZFx1ZDZiZVx1ZDZiZlx1ZDZjMFx1ZDZjMVx1ZDZjMlx1ZDZjM1x1ZDZjNlx1ZDZjN1x1ZDZjOVx1''@;'; put 'put ''ZDZjYVx1ZDZjYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZjZFx1ZDZjZVx1ZDZjZlx1ZDZkMFx1ZDZkMlx1ZDZkM1x1ZDZkNVx1ZDZkNlx1ZDZkOFx1ZDZkYVx1ZDZkYlx1ZDZkY1x1ZDZkZFx1ZDZkZVx1ZDZkZlx1ZDZlMVx1ZDZlMlx1ZDZlM1x1ZDZlNVx1ZDZl''@;'; put 'put ''Nlx1ZDZlN1x1ZDZlOVx1ZDZlYVx1ZDZlYlx1ZDZlY1x1ZDZlZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZlZVx1ZDZlZlx1ZDZmMVx1ZDZmMlx1ZDZmM1x1ZDZmNFx1ZDZmNlx1ZDZmN1x1ZDZmOFx1ZDZmOVx1ZDZmYVx1ZDZmYlx1ZDZmZVx1ZDZmZlx1ZDcwMVx1''@;'; put 'put ''ZDcwMlx1ZDcwM1x1ZDcwNVx1ZDcwNlx1ZDcwN1x1ZDcwOFx1ZDcwOVx1ZDcwYVx1ZDcwYlx1ZDcwY1x1ZDcwZFx1ZDcwZVx1ZDcwZlx1ZDcxMFx1ZDcxMlx1ZDcxM1x1ZDcxNFx1Y2U1OFx1Y2U1OVx1Y2U1Y1x1Y2U1Zlx1Y2U2MFx1Y2U2MVx1Y2U2OFx1Y2U2OVx1Y2U2Ylx1Y2U2ZFx1Y2U3''@;'; put 'put ''NFx1Y2U3NVx1Y2U3OFx1Y2U3Y1x1Y2U4NFx1Y2U4NVx1Y2U4N1x1Y2U4OVx1Y2U5MFx1Y2U5MVx1Y2U5NFx1Y2U5OFx1Y2VhMFx1Y2VhMVx1Y2VhM1x1Y2VhNFx1Y2VhNVx1Y2VhY1x1Y2VhZFx1Y2VjMVx1Y2VlNFx1Y2VlNVx1Y2VlOFx1Y2VlYlx1Y2VlY1x1Y2VmNFx1Y2VmNVx1Y2VmN1x1''@;'; put 'put ''Y2VmOFx1Y2VmOVx1Y2YwMFx1Y2YwMVx1Y2YwNFx1Y2YwOFx1Y2YxMFx1Y2YxMVx1Y2YxM1x1Y2YxNVx1Y2YxY1x1Y2YyMFx1Y2YyNFx1Y2YyY1x1Y2YyZFx1Y2YyZlx1Y2YzMFx1Y2YzMVx1Y2YzOFx1Y2Y1NFx1Y2Y1NVx1Y2Y1OFx1Y2Y1Y1x1Y2Y2NFx1Y2Y2NVx1Y2Y2N1x1Y2Y2OVx1Y2Y3''@;'; put 'put ''MFx1Y2Y3MVx1Y2Y3NFx1Y2Y3OFx1Y2Y4MFx1Y2Y4NVx1Y2Y4Y1x1Y2ZhMVx1Y2ZhOFx1Y2ZiMFx1Y2ZjNFx1Y2ZlMFx1Y2ZlMVx1Y2ZlNFx1Y2ZlOFx1Y2ZmMFx1Y2ZmMVx1Y2ZmM1x1Y2ZmNVx1Y2ZmY1x1ZDAwMFx1ZDAwNFx1ZDAxMVx1ZDAxOFx1ZDAyZFx1ZDAzNFx1ZDAzNVx1ZDAzOFx1''@;'; put 'put ''ZDAzY1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE5Nl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTk2XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE5Nl1bc11dPTUwMTc2K3MsaFs1MDE3NitzXT1jWzE5Nl1bc10pO2ZvcihjWzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDcxNVx1ZDcxNlx1ZDcxN1x1ZDcxYVx1ZDcxYlx1ZDcxZFx1ZDcxZVx1ZDcxZlx1ZDcyMVx1ZDcyMlx1ZDcyM1x1ZDcyNFx1ZDcyNVx1ZDcyNlx1ZDcyN1x1ZDcyYVx1ZDcyY1x1ZDcyZVx1ZDcyZlx1ZDczMFx1ZDczMVx1ZDczMlx1''@;'; put 'put ''ZDczM1x1ZDczNlx1ZDczN1x1ZDczOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDczYVx1ZDczYlx1ZDczZFx1ZDczZVx1ZDczZlx1ZDc0MFx1ZDc0MVx1ZDc0Mlx1ZDc0M1x1ZDc0NVx1ZDc0Nlx1ZDc0OFx1ZDc0YVx1ZDc0Ylx1ZDc0Y1x1ZDc0ZFx1ZDc0ZVx1ZDc0''@;'; put 'put ''Zlx1ZDc1Mlx1ZDc1M1x1ZDc1NVx1ZDc1YVx1ZDc1Ylx1ZDc1Y1x1ZDc1ZFx1ZDc1ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDc1Zlx1ZDc2Mlx1ZDc2NFx1ZDc2Nlx1ZDc2N1x1ZDc2OFx1ZDc2YVx1ZDc2Ylx1ZDc2ZFx1ZDc2ZVx1ZDc2Zlx1ZDc3MVx1ZDc3Mlx1''@;'; put 'put ''ZDc3M1x1ZDc3NVx1ZDc3Nlx1ZDc3N1x1ZDc3OFx1ZDc3OVx1ZDc3YVx1ZDc3Ylx1ZDc3ZVx1ZDc3Zlx1ZDc4MFx1ZDc4Mlx1ZDc4M1x1ZDc4NFx1ZDc4NVx1ZDc4Nlx1ZDc4N1x1ZDc4YVx1ZDc4Ylx1ZDA0NFx1ZDA0NVx1ZDA0N1x1ZDA0OVx1ZDA1MFx1ZDA1NFx1ZDA1OFx1ZDA2MFx1ZDA2''@;'; put 'put ''Y1x1ZDA2ZFx1ZDA3MFx1ZDA3NFx1ZDA3Y1x1ZDA3ZFx1ZDA4MVx1ZDBhNFx1ZDBhNVx1ZDBhOFx1ZDBhY1x1ZDBiNFx1ZDBiNVx1ZDBiN1x1ZDBiOVx1ZDBjMFx1ZDBjMVx1ZDBjNFx1ZDBjOFx1ZDBjOVx1ZDBkMFx1ZDBkMVx1ZDBkM1x1ZDBkNFx1ZDBkNVx1ZDBkY1x1ZDBkZFx1ZDBlMFx1''@;'; put 'put ''ZDBlNFx1ZDBlY1x1ZDBlZFx1ZDBlZlx1ZDBmMFx1ZDBmMVx1ZDBmOFx1ZDEwZFx1ZDEzMFx1ZDEzMVx1ZDEzNFx1ZDEzOFx1ZDEzYVx1ZDE0MFx1ZDE0MVx1ZDE0M1x1ZDE0NFx1ZDE0NVx1ZDE0Y1x1ZDE0ZFx1ZDE1MFx1ZDE1NFx1ZDE1Y1x1ZDE1ZFx1ZDE1Zlx1ZDE2MVx1ZDE2OFx1ZDE2''@;'; put 'put ''Y1x1ZDE3Y1x1ZDE4NFx1ZDE4OFx1ZDFhMFx1ZDFhMVx1ZDFhNFx1ZDFhOFx1ZDFiMFx1ZDFiMVx1ZDFiM1x1ZDFiNVx1ZDFiYVx1ZDFiY1x1ZDFjMFx1ZDFkOFx1ZDFmNFx1ZDFmOFx1ZDIwN1x1ZDIwOVx1ZDIxMFx1ZDIyY1x1ZDIyZFx1ZDIzMFx1ZDIzNFx1ZDIzY1x1ZDIzZFx1ZDIzZlx1''@;'; put 'put ''ZDI0MVx1ZDI0OFx1ZDI1Y1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE5N10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTk3XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE5N11bc11dPTUwNDMyK3MsaFs1MDQzMitzXT1jWzE5N11bc10pO2ZvcihjWzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDc4ZFx1ZDc4ZVx1ZDc4Zlx1ZDc5MVx1ZDc5Mlx1ZDc5M1x1ZDc5NFx1ZDc5NVx1ZDc5Nlx1ZDc5N1x1ZDc5YVx1ZDc5Y1x1ZDc5ZVx1ZDc5Zlx1ZDdhMFx1ZDdhMVx1ZDdhMlx1ZDdhM1x1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI2NFx1ZDI4MFx1ZDI4MVx1ZDI4NFx1ZDI4OFx1ZDI5MFx1ZDI5''@;'; put 'put ''MVx1ZDI5NVx1ZDI5Y1x1ZDJhMFx1ZDJhNFx1ZDJhY1x1ZDJiMVx1ZDJiOFx1ZDJiOVx1ZDJiY1x1ZDJiZlx1ZDJjMFx1ZDJjMlx1ZDJjOFx1ZDJjOVx1ZDJjYlx1ZDJkNFx1ZDJkOFx1ZDJkY1x1ZDJlNFx1ZDJlNVx1ZDJmMFx1ZDJmMVx1ZDJmNFx1ZDJmOFx1ZDMwMFx1ZDMwMVx1ZDMwM1x1''@;'; put 'put ''ZDMwNVx1ZDMwY1x1ZDMwZFx1ZDMwZVx1ZDMxMFx1ZDMxNFx1ZDMxNlx1ZDMxY1x1ZDMxZFx1ZDMxZlx1ZDMyMFx1ZDMyMVx1ZDMyNVx1ZDMyOFx1ZDMyOVx1ZDMyY1x1ZDMzMFx1ZDMzOFx1ZDMzOVx1ZDMzYlx1ZDMzY1x1ZDMzZFx1ZDM0NFx1ZDM0NVx1ZDM3Y1x1ZDM3ZFx1ZDM4MFx1ZDM4''@;'; put 'put ''NFx1ZDM4Y1x1ZDM4ZFx1ZDM4Zlx1ZDM5MFx1ZDM5MVx1ZDM5OFx1ZDM5OVx1ZDM5Y1x1ZDNhMFx1ZDNhOFx1ZDNhOVx1ZDNhYlx1ZDNhZFx1ZDNiNFx1ZDNiOFx1ZDNiY1x1ZDNjNFx1ZDNjNVx1ZDNjOFx1ZDNjOVx1ZDNkMFx1ZDNkOFx1ZDNlMVx1ZDNlM1x1ZDNlY1x1ZDNlZFx1ZDNmMFx1''@;'; put 'put ''ZDNmNFx1ZDNmY1x1ZDNmZFx1ZDNmZlx1ZDQwMVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE5OF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTk4XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE5OF1bc11dPTUwNjg4K3MsaFs1MDY4OCtzXT1jWzE5OF1bc10pO2ZvcihjWzE5OV09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQwOFx1ZDQxZFx1ZDQ0MFx1ZDQ0NFx1ZDQ1''@;'; put 'put ''Y1x1ZDQ2MFx1ZDQ2NFx1ZDQ2ZFx1ZDQ2Zlx1ZDQ3OFx1ZDQ3OVx1ZDQ3Y1x1ZDQ3Zlx1ZDQ4MFx1ZDQ4Mlx1ZDQ4OFx1ZDQ4OVx1ZDQ4Ylx1ZDQ4ZFx1ZDQ5NFx1ZDRhOVx1ZDRjY1x1ZDRkMFx1ZDRkNFx1ZDRkY1x1ZDRkZlx1ZDRlOFx1ZDRlY1x1ZDRmMFx1ZDRmOFx1ZDRmYlx1ZDRmZFx1''@;'; put 'put ''ZDUwNFx1ZDUwOFx1ZDUwY1x1ZDUxNFx1ZDUxNVx1ZDUxN1x1ZDUzY1x1ZDUzZFx1ZDU0MFx1ZDU0NFx1ZDU0Y1x1ZDU0ZFx1ZDU0Zlx1ZDU1MVx1ZDU1OFx1ZDU1OVx1ZDU1Y1x1ZDU2MFx1ZDU2NVx1ZDU2OFx1ZDU2OVx1ZDU2Ylx1ZDU2ZFx1ZDU3NFx1ZDU3NVx1ZDU3OFx1ZDU3Y1x1ZDU4''@;'; put 'put ''NFx1ZDU4NVx1ZDU4N1x1ZDU4OFx1ZDU4OVx1ZDU5MFx1ZDVhNVx1ZDVjOFx1ZDVjOVx1ZDVjY1x1ZDVkMFx1ZDVkMlx1ZDVkOFx1ZDVkOVx1ZDVkYlx1ZDVkZFx1ZDVlNFx1ZDVlNVx1ZDVlOFx1ZDVlY1x1ZDVmNFx1ZDVmNVx1ZDVmN1x1ZDVmOVx1ZDYwMFx1ZDYwMVx1ZDYwNFx1ZDYwOFx1''@;'; put 'put ''ZDYxMFx1ZDYxMVx1ZDYxM1x1ZDYxNFx1ZDYxNVx1ZDYxY1x1ZDYyMFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE5OV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTk5XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE5OV1bc11dPTUwOTQ0K3MsaFs1MDk0NCtzXT1jWzE5OV1bc10pO2Zvcihj''@;'; put 'put ''WzIwMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYyNFx1ZDYyZFx1ZDYz''@;'; put 'put ''OFx1ZDYzOVx1ZDYzY1x1ZDY0MFx1ZDY0NVx1ZDY0OFx1ZDY0OVx1ZDY0Ylx1ZDY0ZFx1ZDY1MVx1ZDY1NFx1ZDY1NVx1ZDY1OFx1ZDY1Y1x1ZDY2N1x1ZDY2OVx1ZDY3MFx1ZDY3MVx1ZDY3NFx1ZDY4M1x1ZDY4NVx1ZDY4Y1x1ZDY4ZFx1ZDY5MFx1ZDY5NFx1ZDY5ZFx1ZDY5Zlx1ZDZhMVx1''@;'; put 'put ''ZDZhOFx1ZDZhY1x1ZDZiMFx1ZDZiOVx1ZDZiYlx1ZDZjNFx1ZDZjNVx1ZDZjOFx1ZDZjY1x1ZDZkMVx1ZDZkNFx1ZDZkN1x1ZDZkOVx1ZDZlMFx1ZDZlNFx1ZDZlOFx1ZDZmMFx1ZDZmNVx1ZDZmY1x1ZDZmZFx1ZDcwMFx1ZDcwNFx1ZDcxMVx1ZDcxOFx1ZDcxOVx1ZDcxY1x1ZDcyMFx1ZDcy''@;'; put 'put ''OFx1ZDcyOVx1ZDcyYlx1ZDcyZFx1ZDczNFx1ZDczNVx1ZDczOFx1ZDczY1x1ZDc0NFx1ZDc0N1x1ZDc0OVx1ZDc1MFx1ZDc1MVx1ZDc1NFx1ZDc1Nlx1ZDc1N1x1ZDc1OFx1ZDc1OVx1ZDc2MFx1ZDc2MVx1ZDc2M1x1ZDc2NVx1ZDc2OVx1ZDc2Y1x1ZDc3MFx1ZDc3NFx1ZDc3Y1x1ZDc3ZFx1''@;'; put 'put ''ZDc4MVx1ZDc4OFx1ZDc4OVx1ZDc4Y1x1ZDc5MFx1ZDc5OFx1ZDc5OVx1ZDc5Ylx1ZDc5ZFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIwMF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjAwXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIwMF1bc11dPTUxMjAwK3MsaFs1MTIwMCtzXT1jWzIw''@;'; put 'put ''MF1bc10pO2ZvcihjWzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGYz''@;'; put 'put ''ZFx1NGY3M1x1NTA0N1x1NTBmOVx1NTJhMFx1NTNlZlx1NTQ3NVx1NTRlNVx1NTYwOVx1NWFjMVx1NWJiNlx1NjY4N1x1NjdiNlx1NjdiN1x1NjdlZlx1NmI0Y1x1NzNjMlx1NzVjMlx1N2EzY1x1ODJkYlx1ODMwNFx1ODg1N1x1ODg4OFx1OGEzNlx1OGNjOFx1OGRjZlx1OGVmYlx1OGZlNlx1''@;'; put 'put ''OTlkNVx1NTIzYlx1NTM3NFx1NTQwNFx1NjA2YVx1NjE2NFx1NmJiY1x1NzNjZlx1ODExYVx1ODliYVx1ODlkMlx1OTVhM1x1NGY4M1x1NTIwYVx1NThiZVx1NTk3OFx1NTllNlx1NWU3Mlx1NWU3OVx1NjFjN1x1NjNjMFx1Njc0Nlx1NjdlY1x1Njg3Zlx1NmY5N1x1NzY0ZVx1NzcwYlx1Nzhm''@;'; put 'put ''NVx1N2EwOFx1N2FmZlx1N2MyMVx1ODA5ZFx1ODI2ZVx1ODI3MVx1OGFlYlx1OTU5M1x1NGU2Ylx1NTU5ZFx1NjZmN1x1NmUzNFx1NzhhM1x1N2FlZFx1ODQ1Ylx1ODkxMFx1ODc0ZVx1OTdhOFx1NTJkOFx1NTc0ZVx1NTgyYVx1NWQ0Y1x1NjExZlx1NjFiZVx1NjIyMVx1NjU2Mlx1NjdkMVx1''@;'; put 'put ''NmE0NFx1NmUxYlx1NzUxOFx1NzViM1x1NzZlM1x1NzdiMFx1N2QzYVx1OTBhZlx1OTQ1MVx1OTQ1Mlx1OWY5NVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIwMl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjAyXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIwMl1bc11dPTUxNzEyK3MsaFs1''@;'; put 'put ''MTcxMitzXT1jWzIwMl1bc10pO2ZvcihjWzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1NTMyM1x1NWNhY1x1NzUzMlx1ODBkYlx1OTI0MFx1OTU5OFx1NTI1Ylx1NTgwOFx1NTlkY1x1NWNhMVx1NWQxN1x1NWViN1x1NWYzYVx1NWY0YVx1NjE3N1x1NmM1Zlx1NzU3YVx1NzU4Nlx1N2NlMFx1N2Q3M1x1N2RiMVx1N2Y4Y1x1ODE1NFx1ODIyMVx1ODU5MVx1ODk0MVx1''@;'; put 'put ''OGIxYlx1OTJmY1x1OTY0ZFx1OWM0N1x1NGVjYlx1NGVmN1x1NTAwYlx1NTFmMVx1NTg0Zlx1NjEzN1x1NjEzZVx1NjE2OFx1NjUzOVx1NjllYVx1NmYxMVx1NzVhNVx1NzY4Nlx1NzZkNlx1N2I4N1x1ODJhNVx1ODRjYlx1ZjkwMFx1OTNhN1x1OTU4Ylx1NTU4MFx1NWJhMlx1NTc1MVx1Zjkw''@;'; put 'put ''MVx1N2NiM1x1N2ZiOVx1OTFiNVx1NTAyOFx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjM2ZVx1NjRkYVx1NjRlN1x1NmUyMFx1NzBhY1x1Nzk1Ylx1OGRkZFx1OGUxZVx1ZjkwMlx1OTA3ZFx1OTI0NVx1OTJmOFx1NGU3ZVx1NGVmNlx1NTA2NVx1NWRmZVx1NWVmYVx1NjEwNlx1Njk1N1x1''@;'; put 'put ''ODE3MVx1ODY1NFx1OGU0N1x1OTM3NVx1OWEyYlx1NGU1ZVx1NTA5MVx1Njc3MFx1Njg0MFx1NTEwOVx1NTI4ZFx1NTI5Mlx1NmFhMlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIwM10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjAzXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIwM11bc11d''@;'; put 'put ''PTUxOTY4K3MsaFs1MTk2OCtzXT1jWzIwM11bc10pO2ZvcihjWzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdiY1x1OTIxMFx1OWVkNFx1NTJhYlx1NjAyZlx1OGZmMlx1NTA0OFx1NjFhOVx1NjNlZFx1NjRjYVx1NjgzY1x1NmE4NFx1NmZjMFx1ODE4OFx1ODlhMVx1OTY5NFx1NTgwNVx1NzI3ZFx1NzJhY1x1NzUwNFx1N2Q3OVx1N2U2ZFx1ODBhOVx1ODk4Ylx1''@;'; put 'put ''OGI3NFx1OTA2M1x1OWQ1MVx1NjI4OVx1NmM3YVx1NmY1NFx1N2Q1MFx1N2YzYVx1OGEyM1x1NTE3Y1x1NjE0YVx1N2I5ZFx1OGIxOVx1OTI1N1x1OTM4Y1x1NGVhY1x1NGZkM1x1NTAxZVx1NTBiZVx1NTEwNlx1NTJjMVx1NTJjZFx1NTM3Zlx1NTc3MFx1NTg4M1x1NWU5YVx1NWY5MVx1NjE3''@;'; put 'put ''Nlx1NjFhY1x1NjRjZVx1NjU2Y1x1NjY2Zlx1NjZiYlx1NjZmNFx1Njg5N1x1NmQ4N1x1NzA4NVx1NzBmMVx1NzQ5Zlx1NzRhNVx1NzRjYVx1NzVkOVx1Nzg2Y1x1NzhlY1x1N2FkZlx1N2FmNlx1N2Q0NVx1N2Q5M1x1ODAxNVx1ODAzZlx1ODExYlx1ODM5Nlx1OGI2Nlx1OGYxNVx1OTAxNVx1''@;'; put 'put ''OTNlMVx1OTgwM1x1OTgzOFx1OWE1YVx1OWJlOFx1NGZjMlx1NTU1M1x1NTgzYVx1NTk1MVx1NWI2M1x1NWM0Nlx1NjBiOFx1NjIxMlx1Njg0Mlx1NjhiMFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIwNF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjA0XVtzXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''eVtjWzIwNF1bc11dPTUyMjI0K3MsaFs1MjIyNCtzXT1jWzIwNF1bc10pO2ZvcihjWzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjhlOFx1NmVhYVx1NzU0Y1x1NzY3OFx1NzhjZVx1N2EzZFx1N2NmYlx1N2U2Ylx1N2U3Y1x1OGEwOFx1OGFhMVx1OGMzZlx1OTY4ZVx1OWRjNFx1NTNlNFx1NTNlOVx1NTQ0YVx1NTQ3MVx1NTZmYVx1NTlkMVx1NWI2NFx1NWMzYlx1''@;'; put 'put ''NWVhYlx1NjJmN1x1NjUzN1x1NjU0NVx1NjU3Mlx1NjZhMFx1NjdhZlx1NjljMVx1NmNiZFx1NzVmY1x1NzY5MFx1Nzc3ZVx1N2EzZlx1N2Y5NFx1ODAwM1x1ODBhMVx1ODE4Zlx1ODJlNlx1ODJmZFx1ODNmMFx1ODVjMVx1ODgzMVx1ODhiNFx1OGFhNVx1ZjkwM1x1OGY5Y1x1OTMyZVx1OTZj''@;'; put 'put ''N1x1OTg2N1x1OWFkOFx1OWYxM1x1NTRlZFx1NjU5Ylx1NjZmMlx1Njg4Zlx1N2E0MFx1OGMzN1x1OWQ2MFx1NTZmMFx1NTc2NFx1NWQxMVx1NjYwNlx1NjhiMVx1NjhjZFx1NmVmZVx1NzQyOFx1ODg5ZVx1OWJlNFx1NmM2OFx1ZjkwNFx1OWFhOFx1NGY5Ylx1NTE2Y1x1NTE3MVx1NTI5Zlx1''@;'; put 'put ''NWI1NFx1NWRlNVx1NjA1MFx1NjA2ZFx1NjJmMVx1NjNhN1x1NjUzYlx1NzNkOVx1N2E3YVx1ODZhM1x1OGNhMlx1OTc4Zlx1NGUzMlx1NWJlMVx1NjIwOFx1Njc5Y1x1NzRkY1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIwNV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjA1XVtzXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoeVtjWzIwNV1bc11dPTUyNDgwK3MsaFs1MjQ4MCtzXT1jWzIwNV1bc10pO2ZvcihjWzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzlkMVx1ODNkM1x1OGE4N1x1OGFiMlx1OGRlOFx1OTA0ZVx1OTM0Ylx1OTg0Nlx1NWVkM1x1NjllOFx1ODVmZlx1OTBlZFx1ZjkwNVx1NTFhMFx1NWI5OFx1NWJlY1x1NjE2M1x1NjhmYVx1NmIzZVx1NzA0Y1x1''@;'; put 'put ''NzQyZlx1NzRkOFx1N2JhMVx1N2Y1MFx1ODNjNVx1ODljMFx1OGNhYlx1OTVkY1x1OTkyOFx1NTIyZVx1NjA1ZFx1NjJlY1x1OTAwMlx1NGY4YVx1NTE0OVx1NTMyMVx1NThkOVx1NWVlM1x1NjZlMFx1NmQzOFx1NzA5YVx1NzJjMlx1NzNkNlx1N2I1MFx1ODBmMVx1OTQ1Ylx1NTM2Nlx1NjM5''@;'; put 'put ''Ylx1N2Y2Ylx1NGU1Nlx1NTA4MFx1NTg0YVx1NThkZVx1NjAyYVx1NjEyN1x1NjJkMFx1NjlkMFx1OWI0MVx1NWI4Zlx1N2QxOFx1ODBiMVx1OGY1Zlx1NGVhNFx1NTBkMVx1NTRhY1x1NTVhY1x1NWIwY1x1NWRhMFx1NWRlN1x1NjUyYVx1NjU0ZVx1NjgyMVx1NmE0Ylx1NzJlMVx1NzY4ZVx1''@;'; put 'put ''NzdlZlx1N2Q1ZVx1N2ZmOVx1ODFhMFx1ODU0ZVx1ODZkZlx1OGYwM1x1OGY0ZVx1OTBjYVx1OTkwM1x1OWE1NVx1OWJhYlx1NGUxOFx1NGU0NVx1NGU1ZFx1NGVjN1x1NGZmMVx1NTE3N1x1NTJmZVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIwNl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNb''@;'; put 'put ''MjA2XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIwNl1bc11dPTUyNzM2K3MsaFs1MjczNitzXT1jWzIwNl1bc10pO2ZvcihjWzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTM0MFx1NTNlM1x1NTNlNVx1NTQ4ZVx1NTYxNFx1NTc3NVx1NTdhMlx1NWJjN1x1NWQ4N1x1NWVkMFx1NjFmY1x1NjJkOFx1NjU1MVx1NjdiOFx1NjdlOVx1NjljYlx1NmI1MFx1NmJjNlx1''@;'; put 'put ''NmJlY1x1NmM0Mlx1NmU5ZFx1NzA3OFx1NzJkN1x1NzM5Nlx1NzQwM1x1NzdiZlx1NzdlOVx1N2E3Nlx1N2Q3Zlx1ODAwOVx1ODFmY1x1ODIwNVx1ODIwYVx1ODJkZlx1ODg2Mlx1OGIzM1x1OGNmY1x1OGVjMFx1OTAxMVx1OTBiMVx1OTI2NFx1OTJiNlx1OTlkMlx1OWE0NVx1OWNlOVx1OWRk''@;'; put 'put ''N1x1OWY5Y1x1NTcwYlx1NWM0MFx1ODNjYVx1OTdhMFx1OTdhYlx1OWViNFx1NTQxYlx1N2E5OFx1N2ZhNFx1ODhkOVx1OGVjZFx1OTBlMVx1NTgwMFx1NWM0OFx1NjM5OFx1N2E5Zlx1NWJhZVx1NWYxM1x1N2E3OVx1N2FhZVx1ODI4ZVx1OGVhY1x1NTAyNlx1NTIzOFx1NTJmOFx1NTM3N1x1''@;'; put 'put ''NTcwOFx1NjJmM1x1NjM3Mlx1NmIwYVx1NmRjM1x1NzczN1x1NTNhNVx1NzM1N1x1ODU2OFx1OGU3Nlx1OTVkNVx1NjczYVx1NmFjM1x1NmY3MFx1OGE2ZFx1OGVjY1x1OTk0Ylx1ZjkwNlx1NjY3N1x1NmI3OFx1OGNiNFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIwN10ubGVuZ3RoOysr''@;'; put 'put ''cyk2NTUzMyE9PWNbMjA3XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIwN11bc11dPTUyOTkyK3MsaFs1Mjk5MitzXT1jWzIwN11bc10pO2ZvcihjWzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWIzY1x1ZjkwN1x1NTNlYlx1NTcyZFx1NTk0ZVx1NjNjNlx1NjlmYlx1NzNlYVx1Nzg0NVx1N2FiYVx1N2FjNVx1N2NmZVx1ODQ3NVx1ODk4Zlx1OGQ3M1x1OTAzNVx1''@;'; put 'put ''OTVhOFx1NTJmYlx1NTc0N1x1NzU0N1x1N2I2MFx1ODNjY1x1OTIxZVx1ZjkwOFx1NmE1OFx1NTE0Ylx1NTI0Ylx1NTI4N1x1NjIxZlx1NjhkOFx1Njk3NVx1OTY5OVx1NTBjNVx1NTJhNFx1NTJlNFx1NjFjM1x1NjVhNFx1NjgzOVx1NjlmZlx1NzQ3ZVx1N2I0Ylx1ODJiOVx1ODNlYlx1ODli''@;'; put 'put ''Mlx1OGIzOVx1OGZkMVx1OTk0OVx1ZjkwOVx1NGVjYVx1NTk5N1x1NjRkMlx1NjYxMVx1NmE4ZVx1NzQzNFx1Nzk4MVx1NzliZFx1ODJhOVx1ODg3ZVx1ODg3Zlx1ODk1Zlx1ZjkwYVx1OTMyNlx1NGYwYlx1NTNjYVx1NjAyNVx1NjI3MVx1NmM3Mlx1N2QxYVx1N2Q2Nlx1NGU5OFx1NTE2Mlx1''@;'; put 'put ''NzdkY1x1ODBhZlx1NGYwMVx1NGYwZVx1NTE3Nlx1NTE4MFx1NTVkY1x1NTY2OFx1NTczYlx1NTdmYVx1NTdmY1x1NTkxNFx1NTk0N1x1NTk5M1x1NWJjNFx1NWM5MFx1NWQwZVx1NWRmMVx1NWU3ZVx1NWZjY1x1NjI4MFx1NjVkN1x1NjVlM1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIw''@;'; put 'put ''OF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjA4XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIwOF1bc11dPTUzMjQ4K3MsaFs1MzI0OCtzXT1jWzIwOF1bc10pO2ZvcihjWzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjcxZVx1NjcxZlx1Njc1ZVx1NjhjYlx1NjhjNFx1NmE1Zlx1NmIzYVx1NmMyM1x1NmM3ZFx1NmM4Mlx1NmRjN1x1NzM5OFx1NzQyNlx1NzQyYVx1''@;'; put 'put ''NzQ4Mlx1NzRhM1x1NzU3OFx1NzU3Zlx1Nzg4MVx1NzhlZlx1Nzk0MVx1Nzk0N1x1Nzk0OFx1Nzk3YVx1N2I5NVx1N2QwMFx1N2RiYVx1N2Y4OFx1ODAwNlx1ODAyZFx1ODA4Y1x1OGExOFx1OGI0Zlx1OGM0OFx1OGQ3N1x1OTMyMVx1OTMyNFx1OThlMlx1OTk1MVx1OWEwZVx1OWEwZlx1OWE2''@;'; put 'put ''NVx1OWU5Mlx1N2RjYVx1NGY3Nlx1NTQwOVx1NjJlZVx1Njg1NFx1OTFkMVx1NTVhYlx1NTEzYVx1ZjkwYlx1ZjkwY1x1NWExY1x1NjFlNlx1ZjkwZFx1NjJjZlx1NjJmZlx1ZjkwZVx1ZjkwZlx1ZjkxMFx1ZjkxMVx1ZjkxMlx1ZjkxM1x1OTBhM1x1ZjkxNFx1ZjkxNVx1ZjkxNlx1ZjkxN1x1''@;'; put 'put ''ZjkxOFx1OGFmZVx1ZjkxOVx1ZjkxYVx1ZjkxYlx1ZjkxY1x1NjY5Nlx1ZjkxZFx1NzE1Nlx1ZjkxZVx1ZjkxZlx1OTZlM1x1ZjkyMFx1NjM0Zlx1NjM3YVx1NTM1N1x1ZjkyMVx1Njc4Zlx1Njk2MFx1NmU3M1x1ZjkyMlx1NzUzN1x1ZjkyM1x1ZjkyNFx1ZjkyNVx1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LHM9MDtzIT1jWzIwOV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjA5XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIwOV1bc11dPTUzNTA0K3MsaFs1MzUwNCtzXT1jWzIwOV1bc10pO2ZvcihjWzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QwZFx1ZjkyNlx1ZjkyN1x1ODg3Mlx1NTZjYVx1NWExOFx1ZjkyOFx1ZjkyOVx1ZjkyYVx1ZjkyYlx1ZjkyY1x1NGU0M1x1''@;'; put 'put ''ZjkyZFx1NTE2N1x1NTk0OFx1NjdmMFx1ODAxMFx1ZjkyZVx1NTk3M1x1NWU3NFx1NjQ5YVx1NzljYVx1NWZmNVx1NjA2Y1x1NjJjOFx1NjM3Ylx1NWJlN1x1NWJkN1x1NTJhYVx1ZjkyZlx1NTk3NFx1NWYyOVx1NjAxMlx1ZjkzMFx1ZjkzMVx1ZjkzMlx1NzQ1OVx1ZjkzM1x1ZjkzNFx1Zjkz''@;'; put 'put ''NVx1ZjkzNlx1ZjkzN1x1ZjkzOFx1OTlkMVx1ZjkzOVx1ZjkzYVx1ZjkzYlx1ZjkzY1x1ZjkzZFx1ZjkzZVx1ZjkzZlx1Zjk0MFx1Zjk0MVx1Zjk0Mlx1Zjk0M1x1NmZjM1x1Zjk0NFx1Zjk0NVx1ODFiZlx1OGZiMlx1NjBmMVx1Zjk0Nlx1Zjk0N1x1ODE2Nlx1Zjk0OFx1Zjk0OVx1NWMzZlx1''@;'; put 'put ''Zjk0YVx1Zjk0Ylx1Zjk0Y1x1Zjk0ZFx1Zjk0ZVx1Zjk0Zlx1Zjk1MFx1Zjk1MVx1NWFlOVx1OGEyNVx1Njc3Ylx1N2QxMFx1Zjk1Mlx1Zjk1M1x1Zjk1NFx1Zjk1NVx1Zjk1Nlx1Zjk1N1x1ODBmZFx1Zjk1OFx1Zjk1OVx1NWMzY1x1NmNlNVx1NTMzZlx1NmViYVx1NTkxYVx1ODMzNlx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIxMF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjEwXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIxMF1bc11dPTUzNzYwK3MsaFs1Mzc2MCtzXT1jWzIxMF1bc10pO2ZvcihjWzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUzOVx1NGViNlx1NGY0Nlx1NTVhZVx1NTcxOFx1NThjN1x1NWY1Nlx1NjViN1x1NjVlNlx1NmE4MFx1''@;'; put 'put ''NmJiNVx1NmU0ZFx1NzdlZFx1N2FlZlx1N2MxZVx1N2RkZVx1ODZjYlx1ODg5Mlx1OTEzMlx1OTM1Ylx1NjRiYlx1NmZiZVx1NzM3YVx1NzViOFx1OTA1NFx1NTU1Nlx1NTc0ZFx1NjFiYVx1NjRkNFx1NjZjN1x1NmRlMVx1NmU1Ylx1NmY2ZFx1NmZiOVx1NzVmMFx1ODA0M1x1ODFiZFx1ODU0''@;'; put 'put ''MVx1ODk4M1x1OGFjN1x1OGI1YVx1OTMxZlx1NmM5M1x1NzU1M1x1N2I1NFx1OGUwZlx1OTA1ZFx1NTUxMFx1NTgwMlx1NTg1OFx1NWU2Mlx1NjIwN1x1NjQ5ZVx1NjhlMFx1NzU3Nlx1N2NkNlx1ODdiM1x1OWVlOFx1NGVlM1x1NTc4OFx1NTc2ZVx1NTkyN1x1NWMwZFx1NWNiMVx1NWUzNlx1''@;'; put 'put ''NWY4NVx1NjIzNFx1NjRlMVx1NzNiM1x1ODFmYVx1ODg4Ylx1OGNiOFx1OTY4YVx1OWVkYlx1NWI4NVx1NWZiN1x1NjBiM1x1NTAxMlx1NTIwMFx1NTIzMFx1NTcxNlx1NTgzNVx1NTg1N1x1NWMwZVx1NWM2MFx1NWNmNlx1NWQ4Ylx1NWVhNlx1NWY5Mlx1NjBiY1x1NjMxMVx1NjM4OVx1NjQx''@;'; put 'put ''N1x1Njg0M1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIxMV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjExXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIxMV1bc11dPTU0MDE2K3MsaFs1NDAxNitzXT1jWzIxMV1bc10pO2ZvcihjWzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjhmOVx1NmFjMlx1NmRkOFx1NmUyMVx1NmVkNFx1NmZlNFx1NzFmZVx1NzZkY1x1''@;'; put 'put ''Nzc3OVx1NzliMVx1N2EzYlx1ODQwNFx1ODlhOVx1OGNlZFx1OGRmM1x1OGU0OFx1OTAwM1x1OTAxNFx1OTA1M1x1OTBmZFx1OTM0ZFx1OTY3Nlx1OTdkY1x1NmJkMlx1NzAwNlx1NzI1OFx1NzJhMlx1NzM2OFx1Nzc2M1x1NzliZlx1N2JlNFx1N2U5Ylx1OGI4MFx1NThhOVx1NjBjN1x1NjU2''@;'; put 'put ''Nlx1NjVmZFx1NjZiZVx1NmM4Y1x1NzExZVx1NzFjOVx1OGM1YVx1OTgxM1x1NGU2ZFx1N2E4MVx1NGVkZFx1NTFhY1x1NTFjZFx1NTJkNVx1NTQwY1x1NjFhN1x1Njc3MVx1Njg1MFx1NjhkZlx1NmQxZVx1NmY3Y1x1NzViY1x1NzdiM1x1N2FlNVx1ODBmNFx1ODQ2M1x1OTI4NVx1NTE1Y1x1''@;'; put 'put ''NjU5N1x1Njc1Y1x1Njc5M1x1NzVkOFx1N2FjN1x1ODM3M1x1Zjk1YVx1OGM0Nlx1OTAxN1x1OTgyZFx1NWM2Zlx1ODFjMFx1ODI5YVx1OTA0MVx1OTA2Zlx1OTIwZFx1NWY5N1x1NWQ5ZFx1NmE1OVx1NzFjOFx1NzY3Ylx1N2I0OVx1ODVlNFx1OGIwNFx1OTEyN1x1OWEzMFx1NTU4N1x1NjFm''@;'; put 'put ''Nlx1Zjk1Ylx1NzY2OVx1N2Y4NVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIxMl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjEyXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIxMl1bc11dPTU0MjcyK3MsaFs1NDI3MitzXT1jWzIxMl1bc10pO2ZvcihjWzIxM109Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODYzZlx1ODdiYVx1ODhmOFx1OTA4Zlx1Zjk1Y1x1NmQxYlx1''@;'; put 'put ''NzBkOVx1NzNkZVx1N2Q2MVx1ODQzZFx1Zjk1ZFx1OTE2YVx1OTlmMVx1Zjk1ZVx1NGU4Mlx1NTM3NVx1NmIwNFx1NmIxMlx1NzAzZVx1NzIxYlx1ODYyZFx1OWUxZVx1NTI0Y1x1OGZhM1x1NWQ1MFx1NjRlNVx1NjUyY1x1NmIxNlx1NmZlYlx1N2M0M1x1N2U5Y1x1ODVjZFx1ODk2NFx1ODli''@;'; put 'put ''ZFx1NjJjOVx1ODFkOFx1ODgxZlx1NWVjYVx1NjcxN1x1NmQ2YVx1NzJmY1x1NzQwNVx1NzQ2Zlx1ODc4Mlx1OTBkZVx1NGY4Nlx1NWQwZFx1NWZhMFx1ODQwYVx1NTFiN1x1NjNhMFx1NzU2NVx1NGVhZVx1NTAwNlx1NTE2OVx1NTFjOVx1Njg4MVx1NmExMVx1N2NhZVx1N2NiMVx1N2NlN1x1''@;'; put 'put ''ODI2Zlx1OGFkMlx1OGYxYlx1OTFjZlx1NGZiNlx1NTEzN1x1NTJmNVx1NTQ0Mlx1NWVlY1x1NjE2ZVx1NjIzZVx1NjVjNVx1NmFkYVx1NmZmZVx1NzkyYVx1ODVkY1x1ODgyM1x1OTVhZFx1OWE2Mlx1OWE2YVx1OWU5N1x1OWVjZVx1NTI5Ylx1NjZjNlx1NmI3N1x1NzAxZFx1NzkyYlx1OGY2''@;'; put 'put ''Mlx1OTc0Mlx1NjE5MFx1NjIwMFx1NjUyM1x1NmYyM1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIxM10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjEzXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIxM11bc11dPTU0NTI4K3MsaFs1NDUyOCtzXT1jWzIxM11bc10pO2ZvcihjWzIxNF09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0OVx1NzQ4OVx1N2RmNFx1ODA2Zlx1''@;'; put 'put ''ODRlZVx1OGYyNlx1OTAyM1x1OTM0YVx1NTFiZFx1NTIxN1x1NTJhM1x1NmQwY1x1NzBjOFx1ODhjMlx1NWVjOVx1NjU4Mlx1NmJhZVx1NmZjMlx1N2MzZVx1NzM3NVx1NGVlNFx1NGYzNlx1NTZmOVx1Zjk1Zlx1NWNiYVx1NWRiYVx1NjAxY1x1NzNiMlx1N2IyZFx1N2Y5YVx1N2ZjZVx1ODA0''@;'; put 'put ''Nlx1OTAxZVx1OTIzNFx1OTZmNlx1OTc0OFx1OTgxOFx1OWY2MVx1NGY4Ylx1NmZhN1x1NzlhZVx1OTFiNFx1OTZiN1x1NTJkZVx1Zjk2MFx1NjQ4OFx1NjRjNFx1NmFkM1x1NmY1ZVx1NzAxOFx1NzIxMFx1NzZlN1x1ODAwMVx1ODYwNlx1ODY1Y1x1OGRlZlx1OGYwNVx1OTczMlx1OWI2Zlx1''@;'; put 'put ''OWRmYVx1OWU3NVx1Nzg4Y1x1Nzk3Zlx1N2RhMFx1ODNjOVx1OTMwNFx1OWU3Zlx1OWU5M1x1OGFkNlx1NThkZlx1NWYwNFx1NjcyN1x1NzAyN1x1NzRjZlx1N2M2MFx1ODA3ZVx1NTEyMVx1NzAyOFx1NzI2Mlx1NzhjYVx1OGNjMlx1OGNkYVx1OGNmNFx1OTZmN1x1NGU4Nlx1NTBkYVx1NWJl''@;'; put 'put ''ZVx1NWVkNlx1NjU5OVx1NzFjZVx1NzY0Mlx1NzdhZFx1ODA0YVx1ODRmY1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIxNF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjE0XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIxNF1bc11dPTU0Nzg0K3MsaFs1NDc4NCtzXT1jWzIxNF1bc10pO2Zv''@;'; put 'put ''cihjWzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA3Y1x1OWIyN1x1''@;'; put 'put ''OWY4ZFx1NThkOFx1NWE0MVx1NWM2Mlx1NmExM1x1NmRkYVx1NmYwZlx1NzYzYlx1N2QyZlx1N2UzN1x1ODUxZVx1ODkzOFx1OTNlNFx1OTY0Ylx1NTI4OVx1NjVkMlx1NjdmM1x1NjliNFx1NmQ0MVx1NmU5Y1x1NzAwZlx1NzQwOVx1NzQ2MFx1NzU1OVx1NzYyNFx1Nzg2Ylx1OGIyY1x1OTg1''@;'; put 'put ''ZVx1NTE2ZFx1NjIyZVx1OTY3OFx1NGY5Nlx1NTAyYlx1NWQxOVx1NmRlYVx1N2RiOFx1OGYyYVx1NWY4Ylx1NjE0NFx1NjgxN1x1Zjk2MVx1OTY4Nlx1NTJkMlx1ODA4Ylx1NTFkY1x1NTFjY1x1Njk1ZVx1N2ExY1x1N2RiZVx1ODNmMVx1OTY3NVx1NGZkYVx1NTIyOVx1NTM5OFx1NTQwZlx1''@;'; put 'put ''NTUwZVx1NWM2NVx1NjBhN1x1Njc0ZVx1NjhhOFx1NmQ2Y1x1NzI4MVx1NzJmOFx1NzQwNlx1NzQ4M1x1Zjk2Mlx1NzVlMlx1N2M2Y1x1N2Y3OVx1N2ZiOFx1ODM4OVx1ODhjZlx1ODhlMVx1OTFjY1x1OTFkMFx1OTZlMlx1OWJjOVx1NTQxZFx1NmY3ZVx1NzFkMFx1NzQ5OFx1ODVmYVx1OGVh''@;'; put 'put ''YVx1OTZhM1x1OWM1N1x1OWU5Zlx1Njc5N1x1NmRjYlx1NzQzM1x1ODFlOFx1OTcxNlx1NzgyY1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIxNV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjE1XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIxNV1bc11dPTU1MDQwK3MsaFs1NTA0MCtzXT1j''@;'; put 'put ''WzIxNV1bc10pO2ZvcihjWzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''N2FjYlx1N2IyMFx1N2M5Mlx1NjQ2OVx1NzQ2YVx1NzVmMlx1NzhiY1x1NzhlOFx1OTlhY1x1OWI1NFx1OWViYlx1NWJkZVx1NWU1NVx1NmYyMFx1ODE5Y1x1ODNhYlx1OTA4OFx1NGUwN1x1NTM0ZFx1NWEyOVx1NWRkMlx1NWY0ZVx1NjE2Mlx1NjMzZFx1NjY2OVx1NjZmY1x1NmVmZlx1NmYy''@;'; put 'put ''Ylx1NzA2M1x1Nzc5ZVx1ODQyY1x1ODUxM1x1ODgzYlx1OGYxM1x1OTk0NVx1OWMzYlx1NTUxY1x1NjJiOVx1NjcyYlx1NmNhYlx1ODMwOVx1ODk2YVx1OTc3YVx1NGVhMVx1NTk4NFx1NWZkOFx1NWZkOVx1NjcxYlx1N2RiMlx1N2Y1NFx1ODI5Mlx1ODMyYlx1ODNiZFx1OGYxZVx1OTA5OVx1''@;'; put 'put ''NTdjYlx1NTliOVx1NWE5Mlx1NWJkMFx1NjYyN1x1Njc5YVx1Njg4NVx1NmJjZlx1NzE2NFx1N2Y3NVx1OGNiN1x1OGNlM1x1OTA4MVx1OWI0NVx1ODEwOFx1OGM4YVx1OTY0Y1x1OWE0MFx1OWVhNVx1NWI1Zlx1NmMxM1x1NzMxYlx1NzZmMlx1NzZkZlx1ODQwY1x1NTFhYVx1ODk5M1x1NTE0''@;'; put 'put ''ZFx1NTE5NVx1NTJjOVx1NjhjOVx1NmM5NFx1NzcwNFx1NzcyMFx1N2RiZlx1N2RlY1x1OTc2Mlx1OWViNVx1NmVjNVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIxNl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjE2XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIxNl1bc11dPTU1Mjk2K3Ms''@;'; put 'put ''aFs1NTI5NitzXT1jWzIxNl1bc10pO2ZvcihjWzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ODUxMVx1NTFhNVx1NTQwZFx1NTQ3ZFx1NjYwZVx1NjY5ZFx1NjkyN1x1NmU5Zlx1NzZiZlx1Nzc5MVx1ODMxN1x1ODRjMlx1ODc5Zlx1OTE2OVx1OTI5OFx1OWNmNFx1ODg4Mlx1NGZhZVx1NTE5Mlx1NTJkZlx1NTljNlx1NWUzZFx1NjE1NVx1NjQ3OFx1NjQ3OVx1NjZh''@;'; put 'put ''ZVx1NjdkMFx1NmEyMVx1NmJjZFx1NmJkYlx1NzI1Zlx1NzI2MVx1NzQ0MVx1NzczOFx1NzdkYlx1ODAxN1x1ODJiY1x1ODMwNVx1OGIwMFx1OGIyOFx1OGM4Y1x1NjcyOFx1NmM5MFx1NzI2N1x1NzZlZVx1Nzc2Nlx1N2E0Nlx1OWRhOVx1NmI3Zlx1NmM5Mlx1NTkyMlx1NjcyNlx1ODQ5OVx1''@;'; put 'put ''NTM2Zlx1NTg5M1x1NTk5OVx1NWVkZlx1NjNjZlx1NjYzNFx1Njc3M1x1NmUzYVx1NzMyYlx1N2FkN1x1ODJkN1x1OTMyOFx1NTJkOVx1NWRlYlx1NjFhZVx1NjFjYlx1NjIwYVx1NjJjN1x1NjRhYlx1NjVlMFx1Njk1OVx1NmI2Nlx1NmJjYlx1NzEyMVx1NzNmN1x1NzU1ZFx1N2U0Nlx1ODIx''@;'; put 'put ''ZVx1ODMwMlx1ODU2YVx1OGFhM1x1OGNiZlx1OTcyN1x1OWQ2MVx1NThhOFx1OWVkOFx1NTAxMVx1NTIwZVx1NTQzYlx1NTU0Zlx1NjU4N1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIxN10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjE3XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIxN11b''@;'; put 'put ''c11dPTU1NTUyK3MsaFs1NTU1MitzXT1jWzIxN11bc10pO2ZvcihjWzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM3Nlx1N2QwYVx1N2QwYlx1ODA1ZVx1ODY4YVx1OTU4MFx1OTZlZlx1NTJmZlx1NmM5NVx1NzI2OVx1NTQ3M1x1NWE5YVx1NWMzZVx1NWQ0Ylx1NWY0Y1x1NWZhZVx1NjcyYVx1NjhiNlx1Njk2M1x1NmUzY1x1NmU0NFx1NzcwOVx1N2M3M1x1N2Y4''@;'; put 'put ''ZVx1ODU4N1x1OGIwZVx1OGZmN1x1OTc2MVx1OWVmNFx1NWNiN1x1NjBiNlx1NjEwZFx1NjFhYlx1NjU0Zlx1NjVmYlx1NjVmY1x1NmMxMVx1NmNlZlx1NzM5Zlx1NzNjOVx1N2RlMVx1OTU5NFx1NWJjNlx1ODcxY1x1OGIxMFx1NTI1ZFx1NTM1YVx1NjJjZFx1NjQwZlx1NjRiMlx1NjczNFx1''@;'; put 'put ''NmEzOFx1NmNjYVx1NzNjMFx1NzQ5ZVx1N2I5NFx1N2M5NVx1N2UxYlx1ODE4YVx1ODIzNlx1ODU4NFx1OGZlYlx1OTZmOVx1OTljMVx1NGYzNFx1NTM0YVx1NTNjZFx1NTNkYlx1NjJjY1x1NjQyY1x1NjUwMFx1NjU5MVx1NjljM1x1NmNlZVx1NmY1OFx1NzNlZFx1NzU1NFx1NzYyMlx1NzZl''@;'; put 'put ''NFx1NzZmY1x1NzhkMFx1NzhmYlx1NzkyY1x1N2Q0Nlx1ODIyY1x1ODdlMFx1OGZkNFx1OTgxMlx1OThlZlx1NTJjM1x1NjJkNFx1NjRhNVx1NmUyNFx1NmY1MVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIxOF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjE4XVtzXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoeVtjWzIxOF1bc11dPTU1ODA4K3MsaFs1NTgwOCtzXT1jWzIxOF1bc10pO2ZvcihjWzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY3Y1x1OGRjYlx1OTFiMVx1OTI2Mlx1OWFlZVx1OWI0M1x1NTAyM1x1NTA4ZFx1NTc0YVx1NTlhOFx1NWMyOFx1NWU0N1x1NWY3N1x1NjIzZlx1NjUzZVx1NjViOVx1NjVjMVx1NjYwOVx1Njc4Ylx1Njk5Y1x1NmVjMlx1Nzhj''@;'; put 'put ''NVx1N2QyMVx1ODBhYVx1ODE4MFx1ODIyYlx1ODJiM1x1ODRhMVx1ODY4Y1x1OGEyYVx1OGIxN1x1OTBhNlx1OTYzMlx1OWY5MFx1NTAwZFx1NGZmM1x1Zjk2M1x1NTdmOVx1NWY5OFx1NjJkY1x1NjM5Mlx1Njc2Zlx1NmU0M1x1NzExOVx1NzZjM1x1ODBjY1x1ODBkYVx1ODhmNFx1ODhmNVx1''@;'; put 'put ''ODkxOVx1OGNlMFx1OGYyOVx1OTE0ZFx1OTY2YVx1NGYyZlx1NGY3MFx1NWUxYlx1NjdjZlx1NjgyMlx1NzY3ZFx1NzY3ZVx1OWI0NFx1NWU2MVx1NmEwYVx1NzE2OVx1NzFkNFx1NzU2YVx1Zjk2NFx1N2U0MVx1ODU0M1x1ODVlOVx1OThkY1x1NGYxMFx1N2I0Zlx1N2Y3MFx1OTVhNVx1NTFl''@;'; put 'put ''MVx1NWUwNlx1NjhiNVx1NmMzZVx1NmM0ZVx1NmNkYlx1NzJhZlx1N2JjNFx1ODMwM1x1NmNkNVx1NzQzYVx1NTBmYlx1NTI4OFx1NThjMVx1NjRkOFx1NmE5N1x1NzRhN1x1NzY1Nlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIxOV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjE5XVtzXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoeVtjWzIxOV1bc11dPTU2MDY0K3MsaFs1NjA2NCtzXT1jWzIxOV1bc10pO2ZvcihjWzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzhhN1x1ODYxN1x1OTVlMlx1OTczOVx1Zjk2NVx1NTM1ZVx1NWYwMVx1OGI4YVx1OGZhOFx1OGZhZlx1OTA4YVx1NTIyNVx1NzdhNVx1OWM0OVx1OWYwOFx1NGUxOVx1NTAwMlx1NTE3NVx1NWM1Ylx1NWU3''@;'; put 'put ''N1x1NjYxZVx1NjYzYVx1NjdjNFx1NjhjNVx1NzBiM1x1NzUwMVx1NzVjNVx1NzljOVx1N2FkZFx1OGYyN1x1OTkyMFx1OWEwOFx1NGZkZFx1NTgyMVx1NTgzMVx1NWJmNlx1NjY2ZVx1NmI2NVx1NmQxMVx1NmU3YVx1NmY3ZFx1NzNlNFx1NzUyYlx1ODNlOVx1ODhkY1x1ODkxM1x1OGI1Y1x1''@;'; put 'put ''OGYxNFx1NGYwZlx1NTBkNVx1NTMxMFx1NTM1Y1x1NWI5M1x1NWZhOVx1NjcwZFx1Nzk4Zlx1ODE3OVx1ODMyZlx1ODUxNFx1ODkwN1x1ODk4Nlx1OGYzOVx1OGYzYlx1OTlhNVx1OWMxMlx1NjcyY1x1NGU3Nlx1NGZmOFx1NTk0OVx1NWMwMVx1NWNlZlx1NWNmMFx1NjM2N1x1NjhkMlx1NzBm''@;'; put 'put ''ZFx1NzFhMlx1NzQyYlx1N2UyYlx1ODRlY1x1ODcwMlx1OTAyMlx1OTJkMlx1OWNmM1x1NGUwZFx1NGVkOFx1NGZlZlx1NTA4NVx1NTI1Nlx1NTI2Zlx1NTQyNlx1NTQ5MFx1NTdlMFx1NTkyYlx1NWE2Nlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIyMF0ubGVuZ3RoOysrcyk2NTUzMyE9''@;'; put 'put ''PWNbMjIwXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIyMF1bc11dPTU2MzIwK3MsaFs1NjMyMCtzXT1jWzIyMF1bc10pO2ZvcihjWzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI1YVx1NWI3NVx1NWJjY1x1NWU5Y1x1Zjk2Nlx1NjI3Nlx1NjU3N1x1NjVhN1x1NmQ2ZVx1NmVhNVx1NzIzNlx1N2IyNlx1N2MzZlx1N2YzNlx1ODE1MFx1ODE1MVx1ODE5YVx1ODI0''@;'; put 'put ''MFx1ODI5OVx1ODNhOVx1OGEwM1x1OGNhMFx1OGNlNlx1OGNmYlx1OGQ3NFx1OGRiYVx1OTBlOFx1OTFkY1x1OTYxY1x1OTY0NFx1OTlkOVx1OWNlN1x1NTMxN1x1NTIwNlx1NTQyOVx1NTY3NFx1NThiM1x1NTk1NFx1NTk2ZVx1NWZmZlx1NjFhNFx1NjI2ZVx1NjYxMFx1NmM3ZVx1NzExYVx1''@;'; put 'put ''NzZjNlx1N2M4OVx1N2NkZVx1N2QxYlx1ODJhY1x1OGNjMVx1OTZmMFx1Zjk2N1x1NGY1Ylx1NWYxN1x1NWY3Zlx1NjJjMlx1NWQyOVx1NjcwYlx1NjhkYVx1Nzg3Y1x1N2U0M1x1OWQ2Y1x1NGUxNVx1NTA5OVx1NTMxNVx1NTMyYVx1NTM1MVx1NTk4M1x1NWE2Mlx1NWU4N1x1NjBiMlx1NjE4''@;'; put 'put ''YVx1NjI0OVx1NjI3OVx1NjU5MFx1Njc4N1x1NjlhN1x1NmJkNFx1NmJkNlx1NmJkN1x1NmJkOFx1NmNiOFx1Zjk2OFx1NzQzNVx1NzVmYVx1NzgxMlx1Nzg5MVx1NzlkNVx1NzlkOFx1N2M4M1x1N2RjYlx1N2ZlMVx1ODBhNVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIyMV0ubGVuZ3Ro''@;'; put 'put ''Oysrcyk2NTUzMyE9PWNbMjIxXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIyMV1bc11dPTU2NTc2K3MsaFs1NjU3NitzXT1jWzIyMV1bc10pO2ZvcihjWzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODEzZVx1ODFjMlx1ODNmMlx1ODcxYVx1ODhlOFx1OGFiOVx1OGI2Y1x1OGNiYlx1OTExOVx1OTc1ZVx1OThkYlx1OWYzYlx1NTZhY1x1NWIyYVx1NWY2Y1x1NjU4''@;'; put 'put ''Y1x1NmFiM1x1NmJhZlx1NmQ1Y1x1NmZmMVx1NzAxNVx1NzI1ZFx1NzNhZFx1OGNhN1x1OGNkM1x1OTgzYlx1NjE5MVx1NmMzN1x1ODA1OFx1OWEwMVx1NGU0ZFx1NGU4Ylx1NGU5Ylx1NGVkNVx1NGYzYVx1NGYzY1x1NGY3Zlx1NGZkZlx1NTBmZlx1NTNmMlx1NTNmOFx1NTUwNlx1NTVlM1x1''@;'; put 'put ''NTZkYlx1NThlYlx1NTk2Mlx1NWExMVx1NWJlYlx1NWJmYVx1NWMwNFx1NWRmM1x1NWUyYlx1NWY5OVx1NjAxZFx1NjM2OFx1NjU5Y1x1NjVhZlx1NjdmNlx1NjdmYlx1NjhhZFx1NmI3Ylx1NmM5OVx1NmNkN1x1NmUyM1x1NzAwOVx1NzM0NVx1NzgwMlx1NzkzZVx1Nzk0MFx1Nzk2MFx1Nzlj''@;'; put 'put ''MVx1N2JlOVx1N2QxN1x1N2Q3Mlx1ODA4Nlx1ODIwZFx1ODM4ZVx1ODRkMVx1ODZjN1x1ODhkZlx1OGE1MFx1OGE1ZVx1OGIxZFx1OGNkY1x1OGQ2Nlx1OGZhZFx1OTBhYVx1OThmY1x1OTlkZlx1OWU5ZFx1NTI0YVx1Zjk2OVx1NjcxNFx1Zjk2YVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1j''@;'; put 'put ''WzIyMl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjIyXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIyMl1bc11dPTU2ODMyK3MsaFs1NjgzMitzXT1jWzIyMl1bc10pO2ZvcihjWzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTA5OFx1NTIyYVx1NWM3MVx1NjU2M1x1NmM1NVx1NzNjYVx1NzUyM1x1NzU5ZFx1N2I5N1x1ODQ5Y1x1OTE3OFx1OTczMFx1NGU3N1x1NjQ5''@;'; put 'put ''Mlx1NmJiYVx1NzE1ZVx1ODVhOVx1NGUwOVx1Zjk2Ylx1Njc0OVx1NjhlZVx1NmUxN1x1ODI5Zlx1ODUxOFx1ODg2Ylx1NjNmN1x1NmY4MVx1OTIxMlx1OThhZlx1NGUwYVx1NTBiN1x1NTBjZlx1NTExZlx1NTU0Nlx1NTVhYVx1NTYxN1x1NWI0MFx1NWMxOVx1NWNlMFx1NWUzOFx1NWU4YVx1''@;'; put 'put ''NWVhMFx1NWVjMlx1NjBmM1x1Njg1MVx1NmE2MVx1NmU1OFx1NzIzZFx1NzI0MFx1NzJjMFx1NzZmOFx1Nzk2NVx1N2JiMVx1N2ZkNFx1ODhmM1x1ODlmNFx1OGE3M1x1OGM2MVx1OGNkZVx1OTcxY1x1NTg1ZVx1NzRiZFx1OGNmZFx1NTVjN1x1Zjk2Y1x1N2E2MVx1N2QyMlx1ODI3Mlx1NzI3''@;'; put 'put ''Mlx1NzUxZlx1NzUyNVx1Zjk2ZFx1N2IxOVx1NTg4NVx1NThmYlx1NWRiY1x1NWU4Zlx1NWViNlx1NWY5MFx1NjA1NVx1NjI5Mlx1NjM3Zlx1NjU0ZFx1NjY5MVx1NjZkOVx1NjZmOFx1NjgxNlx1NjhmMlx1NzI4MFx1NzQ1ZVx1N2I2ZVx1N2Q2ZVx1N2RkNlx1N2Y3Mlx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLHM9MDtzIT1jWzIyM10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjIzXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIyM11bc11dPTU3MDg4K3MsaFs1NzA4OCtzXT1jWzIyM11bc10pO2ZvcihjWzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODBlNVx1ODIxMlx1ODVhZlx1ODk3Zlx1OGE5M1x1OTAxZFx1OTJlNFx1OWVjZFx1OWYyMFx1NTkxNVx1NTk2ZFx1NWUy''@;'; put 'put ''ZFx1NjBkY1x1NjYxNFx1NjY3M1x1Njc5MFx1NmM1MFx1NmRjNVx1NmY1Zlx1NzdmM1x1NzhhOVx1ODRjNlx1OTFjYlx1OTMyYlx1NGVkOVx1NTBjYVx1NTE0OFx1NTU4NFx1NWIwYlx1NWJhM1x1NjI0N1x1NjU3ZVx1NjVjYlx1NmUzMlx1NzE3ZFx1NzQwMVx1NzQ0NFx1NzQ4N1x1NzRiZlx1''@;'; put 'put ''NzY2Y1x1NzlhYVx1N2RkYVx1N2U1NVx1N2ZhOFx1ODE3YVx1ODFiM1x1ODIzOVx1ODYxYVx1ODdlY1x1OGE3NVx1OGRlM1x1OTA3OFx1OTI5MVx1OTQyNVx1OTk0ZFx1OWJhZVx1NTM2OFx1NWM1MVx1Njk1NFx1NmNjNFx1NmQyOVx1NmUyYlx1ODIwY1x1ODU5Ylx1ODkzYlx1OGEyZFx1OGFh''@;'; put 'put ''YVx1OTZlYVx1OWY2N1x1NTI2MVx1NjZiOVx1NmJiMlx1N2U5Nlx1ODdmZVx1OGQwZFx1OTU4M1x1OTY1ZFx1NjUxZFx1NmQ4OVx1NzFlZVx1Zjk2ZVx1NTdjZVx1NTlkM1x1NWJhY1x1NjAyN1x1NjBmYVx1NjIxMFx1NjYxZlx1NjY1Zlx1NzMyOVx1NzNmOVx1NzZkYlx1NzcwMVx1N2I2Y1x1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIyNF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjI0XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIyNF1bc11dPTU3MzQ0K3MsaFs1NzM0NCtzXT1jWzIyNF1bc10pO2ZvcihjWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA1Nlx1ODA3Mlx1ODE2NVx1OGFhMFx1OTE5Mlx1NGUxNlx1NTJlMlx1NmI3Mlx1NmQxN1x1N2Ew''@;'; put 'put ''NVx1N2IzOVx1N2QzMFx1Zjk2Zlx1OGNiMFx1NTNlY1x1NTYyZlx1NTg1MVx1NWJiNVx1NWMwZlx1NWMxMVx1NWRlMlx1NjI0MFx1NjM4M1x1NjQxNFx1NjYyZFx1NjhiM1x1NmNiY1x1NmQ4OFx1NmVhZlx1NzAxZlx1NzBhNFx1NzFkMlx1NzUyNlx1NzU4Zlx1NzU4ZVx1NzYxOVx1N2IxMVx1''@;'; put 'put ''N2JlMFx1N2MyYlx1N2QyMFx1N2QzOVx1ODUyY1x1ODU2ZFx1ODYwN1x1OGEzNFx1OTAwZFx1OTA2MVx1OTBiNVx1OTJiN1x1OTdmNlx1OWEzN1x1NGZkN1x1NWM2Y1x1Njc1Zlx1NmQ5MVx1N2M5Zlx1N2U4Y1x1OGIxNlx1OGQxNlx1OTAxZlx1NWI2Ylx1NWRmZFx1NjQwZFx1ODRjMFx1OTA1''@;'; put 'put ''Y1x1OThlMVx1NzM4N1x1NWI4Ylx1NjA5YVx1Njc3ZVx1NmRkZVx1OGExZlx1OGFhNlx1OTAwMVx1OTgwY1x1NTIzN1x1Zjk3MFx1NzA1MVx1Nzg4ZVx1OTM5Nlx1ODg3MFx1OTFkN1x1NGZlZVx1NTNkN1x1NTVmZFx1NTZkYVx1NTc4Mlx1NThmZFx1NWFjMlx1NWI4OFx1NWNhYlx1NWNjMFx1''@;'; put 'put ''NWUyNVx1NjEwMVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIyNV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjI1XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIyNV1bc11dPTU3NjAwK3MsaFs1NzYwMCtzXT1jWzIyNV1bc10pO2ZvcihjWzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjIwZFx1NjI0Ylx1NjM4OFx1NjQxY1x1NjUzNlx1NjU3OFx1NmEzOVx1NmI4''@;'; put 'put ''YVx1NmMzNFx1NmQxOVx1NmYzMVx1NzFlN1x1NzJlOVx1NzM3OFx1NzQwN1x1NzRiMlx1NzYyNlx1Nzc2MVx1NzljMFx1N2E1N1x1N2FlYVx1N2NiOVx1N2Q4Zlx1N2RhY1x1N2U2MVx1N2Y5ZVx1ODEyOVx1ODMzMVx1ODQ5MFx1ODRkYVx1ODVlYVx1ODg5Nlx1OGFiMFx1OGI5MFx1OGYzOFx1''@;'; put 'put ''OTA0Mlx1OTA4M1x1OTE2Y1x1OTI5Nlx1OTJiOVx1OTY4Ylx1OTZhN1x1OTZhOFx1OTZkNlx1OTcwMFx1OTgwOFx1OTk5Nlx1OWFkM1x1OWIxYVx1NTNkNFx1NTg3ZVx1NTkxOVx1NWI3MFx1NWJiZlx1NmRkMVx1NmY1YVx1NzE5Zlx1NzQyMVx1NzRiOVx1ODA4NVx1ODNmZFx1NWRlMVx1NWY4''@;'; put 'put ''N1x1NWZhYVx1NjA0Mlx1NjVlY1x1NjgxMlx1Njk2Zlx1NmE1M1x1NmI4OVx1NmQzNVx1NmRmM1x1NzNlM1x1NzZmZVx1NzdhY1x1N2I0ZFx1N2QxNFx1ODEyM1x1ODIxY1x1ODM0MFx1ODRmNFx1ODU2M1x1OGE2Mlx1OGFjNFx1OTE4N1x1OTMxZVx1OTgwNlx1OTliNFx1NjIwY1x1ODg1M1x1''@;'; put 'put ''OGZmMFx1OTI2NVx1NWQwN1x1NWQyN1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIyNl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjI2XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIyNl1bc11dPTU3ODU2K3MsaFs1Nzg1NitzXT1jWzIyNl1bc10pO2ZvcihjWzIyN109Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWQ2OVx1NzQ1Zlx1ODE5ZFx1ODc2OFx1NmZkNVx1NjJm''@;'; put 'put ''ZVx1N2ZkMlx1ODkzNlx1ODk3Mlx1NGUxZVx1NGU1OFx1NTBlN1x1NTJkZFx1NTM0N1x1NjI3Zlx1NjYwN1x1N2U2OVx1ODgwNVx1OTY1ZVx1NGY4ZFx1NTMxOVx1NTYzNlx1NTljYlx1NWFhNFx1NWMzOFx1NWM0ZVx1NWM0ZFx1NWUwMlx1NWYxMVx1NjA0M1x1NjViZFx1NjYyZlx1NjY0Mlx1''@;'; put 'put ''NjdiZVx1NjdmNFx1NzMxY1x1NzdlMlx1NzkzYVx1N2ZjNVx1ODQ5NFx1ODRjZFx1ODk5Nlx1OGE2Nlx1OGE2OVx1OGFlMVx1OGM1NVx1OGM3YVx1NTdmNFx1NWJkNFx1NWYwZlx1NjA2Zlx1NjJlZFx1NjkwZFx1NmI5Nlx1NmU1Y1x1NzE4NFx1N2JkMlx1ODc1NVx1OGI1OFx1OGVmZVx1OThk''@;'; put 'put ''Zlx1OThmZVx1NGYzOFx1NGY4MVx1NGZlMVx1NTQ3Ylx1NWEyMFx1NWJiOFx1NjEzY1x1NjViMFx1NjY2OFx1NzFmY1x1NzUzM1x1Nzk1ZVx1N2QzM1x1ODE0ZVx1ODFlM1x1ODM5OFx1ODVhYVx1ODVjZVx1ODcwM1x1OGEwYVx1OGVhYlx1OGY5Ylx1Zjk3MVx1OGZjNVx1NTkzMVx1NWJhNFx1''@;'; put 'put ''NWJlNlx1NjA4OVx1NWJlOVx1NWMwYlx1NWZjM1x1NmM4MVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIyN10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjI3XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIyN11bc11dPTU4MTEyK3MsaFs1ODExMitzXT1jWzIyN11bc10pO2ZvcihjWzIyOF09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Zjk3Mlx1NmRmMVx1NzAwYlx1NzUx''@;'; put 'put ''YVx1ODJhZlx1OGFmNlx1NGVjMFx1NTM0MVx1Zjk3M1x1OTZkOVx1NmMwZlx1NGU5ZVx1NGZjNFx1NTE1Mlx1NTU1ZVx1NWEyNVx1NWNlOFx1NjIxMVx1NzI1OVx1ODJiZFx1ODNhYVx1ODZmZVx1ODg1OVx1OGExZFx1OTYzZlx1OTZjNVx1OTkxM1x1OWQwOVx1OWQ1ZFx1NTgwYVx1NWNiM1x1''@;'; put 'put ''NWRiZFx1NWU0NFx1NjBlMVx1NjExNVx1NjNlMVx1NmEwMlx1NmUyNVx1OTEwMlx1OTM1NFx1OTg0ZVx1OWMxMFx1OWY3N1x1NWI4OVx1NWNiOFx1NjMwOVx1NjY0Zlx1Njg0OFx1NzczY1x1OTZjMVx1OTc4ZFx1OTg1NFx1OWI5Zlx1NjVhMVx1OGIwMVx1OGVjYlx1OTViY1x1NTUzNVx1NWNh''@;'; put 'put ''OVx1NWRkNlx1NWViNVx1NjY5N1x1NzY0Y1x1ODNmNFx1OTVjN1x1NThkM1x1NjJiY1x1NzJjZVx1OWQyOFx1NGVmMFx1NTkyZVx1NjAwZlx1NjYzYlx1NmI4M1x1NzllN1x1OWQyNlx1NTM5M1x1NTRjMFx1NTdjM1x1NWQxNlx1NjExYlx1NjZkNlx1NmRhZlx1Nzg4ZFx1ODI3ZVx1OTY5OFx1''@;'; put 'put ''OTc0NFx1NTM4NFx1NjI3Y1x1NjM5Nlx1NmRiMlx1N2UwYVx1ODE0Ylx1OTg0ZFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIyOF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjI4XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIyOF1bc11dPTU4MzY4K3MsaFs1ODM2OCtzXT1jWzIyOF1bc10p''@;'; put 'put ''O2ZvcihjWzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmFmYlx1N2Y0''@;'; put 'put ''Y1x1OWRhZlx1OWUxYVx1NGU1Zlx1NTAzYlx1NTFiNlx1NTkxY1x1NjBmOVx1NjNmNlx1NjkzMFx1NzIzYVx1ODAzNlx1Zjk3NFx1OTFjZVx1NWYzMVx1Zjk3NVx1Zjk3Nlx1N2QwNFx1ODJlNVx1ODQ2Zlx1ODRiYlx1ODVlNVx1OGU4ZFx1Zjk3N1x1NGY2Zlx1Zjk3OFx1Zjk3OVx1NThlNFx1''@;'; put 'put ''NWI0M1x1NjA1OVx1NjNkYVx1NjUxOFx1NjU2ZFx1NjY5OFx1Zjk3YVx1Njk0YVx1NmEyM1x1NmQwYlx1NzAwMVx1NzE2Y1x1NzVkMlx1NzYwZFx1NzliM1x1N2E3MFx1Zjk3Ylx1N2Y4YVx1Zjk3Y1x1ODk0NFx1Zjk3ZFx1OGI5M1x1OTFjMFx1OTY3ZFx1Zjk3ZVx1OTkwYVx1NTcwNFx1NWZh''@;'; put 'put ''MVx1NjViY1x1NmYwMVx1NzYwMFx1NzlhNlx1OGE5ZVx1OTlhZFx1OWI1YVx1OWY2Y1x1NTEwNFx1NjFiNlx1NjI5MVx1NmE4ZFx1ODFjNlx1NTA0M1x1NTgzMFx1NWY2Nlx1NzEwOVx1OGEwMFx1OGFmYVx1NWI3Y1x1ODYxNlx1NGZmYVx1NTEzY1x1NTZiNFx1NTk0NFx1NjNhOVx1NmRmOVx1''@;'; put 'put ''NWRhYVx1Njk2ZFx1NTE4Nlx1NGU4OFx1NGY1OVx1Zjk3Zlx1Zjk4MFx1Zjk4MVx1NTk4Mlx1Zjk4Mlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIyOV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjI5XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIyOV1bc11dPTU4NjI0K3MsaFs1ODYyNCtz''@;'; put 'put ''XT1jWzIyOV1bc10pO2ZvcihjWzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1Zjk4M1x1NmI1Zlx1NmM1ZFx1Zjk4NFx1NzRiNVx1NzkxNlx1Zjk4NVx1ODIwN1x1ODI0NVx1ODMzOVx1OGYzZlx1OGY1ZFx1Zjk4Nlx1OTkxOFx1Zjk4N1x1Zjk4OFx1Zjk4OVx1NGVhNlx1Zjk4YVx1NTdkZlx1NWY3OVx1NjYxM1x1Zjk4Ylx1Zjk4Y1x1NzVhYlx1N2U3OVx1OGI2Zlx1''@;'; put 'put ''Zjk4ZFx1OTAwNlx1OWE1Ylx1NTZhNVx1NTgyN1x1NTlmOFx1NWExZlx1NWJiNFx1Zjk4ZVx1NWVmNlx1Zjk4Zlx1Zjk5MFx1NjM1MFx1NjMzYlx1Zjk5MVx1NjkzZFx1NmM4N1x1NmNiZlx1NmQ4ZVx1NmQ5M1x1NmRmNVx1NmYxNFx1Zjk5Mlx1NzBkZlx1NzEzNlx1NzE1OVx1Zjk5M1x1NzFj''@;'; put 'put ''M1x1NzFkNVx1Zjk5NFx1Nzg0Zlx1Nzg2Zlx1Zjk5NVx1N2I3NVx1N2RlM1x1Zjk5Nlx1N2UyZlx1Zjk5N1x1ODg0ZFx1OGVkZlx1Zjk5OFx1Zjk5OVx1Zjk5YVx1OTI1Ylx1Zjk5Ylx1OWNmNlx1Zjk5Y1x1Zjk5ZFx1Zjk5ZVx1NjA4NVx1NmQ4NVx1Zjk5Zlx1NzFiMVx1ZjlhMFx1ZjlhMVx1''@;'; put 'put ''OTViMVx1NTNhZFx1ZjlhMlx1ZjlhM1x1ZjlhNFx1NjdkM1x1ZjlhNVx1NzA4ZVx1NzEzMFx1NzQzMFx1ODI3Nlx1ODJkMlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIzMF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjMwXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIzMF1bc11dPTU4ODgw''@;'; put 'put ''K3MsaFs1ODg4MCtzXT1jWzIzMF1bc10pO2ZvcihjWzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZjlhNlx1OTViYlx1OWFlNVx1OWU3ZFx1NjZjNFx1ZjlhN1x1NzFjMVx1ODQ0OVx1ZjlhOFx1ZjlhOVx1NTg0Ylx1ZjlhYVx1ZjlhYlx1NWRiOFx1NWY3MVx1ZjlhY1x1NjYyMFx1NjY4ZVx1Njk3OVx1NjlhZVx1NmMzOFx1NmNmM1x1NmUzNlx1NmY0MVx1NmZkYVx1''@;'; put 'put ''NzAxYlx1NzAyZlx1NzE1MFx1NzFkZlx1NzM3MFx1ZjlhZFx1NzQ1Ylx1ZjlhZVx1NzRkNFx1NzZjOFx1N2E0ZVx1N2U5M1x1ZjlhZlx1ZjliMFx1ODJmMVx1OGE2MFx1OGZjZVx1ZjliMVx1OTM0OFx1ZjliMlx1OTcxOVx1ZjliM1x1ZjliNFx1NGU0Mlx1NTAyYVx1ZjliNVx1NTIwOFx1NTNl''@;'; put 'put ''MVx1NjZmM1x1NmM2ZFx1NmZjYVx1NzMwYVx1Nzc3Zlx1N2E2Mlx1ODJhZVx1ODVkZFx1ODYwMlx1ZjliNlx1ODhkNFx1OGE2M1x1OGI3ZFx1OGM2Ylx1ZjliN1x1OTJiM1x1ZjliOFx1OTcxM1x1OTgxMFx1NGU5NFx1NGYwZFx1NGZjOVx1NTBiMlx1NTM0OFx1NTQzZVx1NTQzM1x1NTVkYVx1''@;'; put 'put ''NTg2Mlx1NThiYVx1NTk2N1x1NWExYlx1NWJlNFx1NjA5Zlx1ZjliOVx1NjFjYVx1NjU1Nlx1NjVmZlx1NjY2NFx1NjhhN1x1NmM1YVx1NmZiM1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIzMV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjMxXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIz''@;'; put 'put ''MV1bc11dPTU5MTM2K3MsaFs1OTEzNitzXT1jWzIzMV1bc10pO2ZvcihjWzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzBjZlx1NzFhY1x1NzM1Mlx1N2I3ZFx1ODcwOFx1OGFhNFx1OWMzMlx1OWYwN1x1NWM0Ylx1NmM4M1x1NzM0NFx1NzM4OVx1OTIzYVx1NmVhYlx1NzQ2NVx1NzYxZlx1N2E2OVx1N2UxNVx1ODYwYVx1NTE0MFx1NThjNVx1NjRjMVx1NzRlZVx1''@;'; put 'put ''NzUxNVx1NzY3MFx1N2ZjMVx1OTA5NVx1OTZjZFx1OTk1NFx1NmUyNlx1NzRlNlx1N2FhOVx1N2FhYVx1ODFlNVx1ODZkOVx1ODc3OFx1OGExYlx1NWE0OVx1NWI4Y1x1NWI5Ylx1NjhhMVx1NjkwMFx1NmQ2M1x1NzNhOVx1NzQxM1x1NzQyY1x1Nzg5N1x1N2RlOVx1N2ZlYlx1ODExOFx1ODE1''@;'; put 'put ''NVx1ODM5ZVx1OGM0Y1x1OTYyZVx1OTgxMVx1NjZmMFx1NWY4MFx1NjVmYVx1Njc4OVx1NmM2YVx1NzM4Ylx1NTAyZFx1NWEwM1x1NmI2YVx1NzdlZVx1NTkxNlx1NWQ2Y1x1NWRjZFx1NzMyNVx1NzU0Zlx1ZjliYVx1ZjliYlx1NTBlNVx1NTFmOVx1NTgyZlx1NTkyZFx1NTk5Nlx1NTlkYVx1''@;'; put 'put ''NWJlNVx1ZjliY1x1ZjliZFx1NWRhMlx1NjJkN1x1NjQxNlx1NjQ5M1x1NjRmZVx1ZjliZVx1NjZkY1x1ZjliZlx1NmE0OFx1ZjljMFx1NzFmZlx1NzQ2NFx1ZjljMVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIzMl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjMyXVtzXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoeVtjWzIzMl1bc11dPTU5MzkyK3MsaFs1OTM5MitzXT1jWzIzMl1bc10pO2ZvcihjWzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E4OFx1N2FhZlx1N2U0N1x1N2U1ZVx1ODAwMFx1ODE3MFx1ZjljMlx1ODdlZlx1ODk4MVx1OGIyMFx1OTA1OVx1ZjljM1x1OTA4MFx1OTk1Mlx1NjE3ZVx1NmIzMlx1NmQ3NFx1N2UxZlx1ODkyNVx1OGZiMVx1NGZkMVx1''@;'; put 'put ''NTBhZFx1NTE5N1x1NTJjN1x1NTdjN1x1NTg4OVx1NWJiOVx1NWViOFx1NjE0Mlx1Njk5NVx1NmQ4Y1x1NmU2N1x1NmViNlx1NzE5NFx1NzQ2Mlx1NzUyOFx1NzUyY1x1ODA3M1x1ODMzOFx1ODRjOVx1OGUwYVx1OTM5NFx1OTNkZVx1ZjljNFx1NGU4ZVx1NGY1MVx1NTA3Nlx1NTEyYVx1NTNj''@;'; put 'put ''OFx1NTNjYlx1NTNmM1x1NWI4N1x1NWJkM1x1NWMyNFx1NjExYVx1NjE4Mlx1NjVmNFx1NzI1Ylx1NzM5N1x1NzQ0MFx1NzZjMlx1Nzk1MFx1Nzk5MVx1NzliOVx1N2QwNlx1N2ZiZFx1ODI4Ylx1ODVkNVx1ODY1ZVx1OGZjMlx1OTA0N1x1OTBmNVx1OTFlYVx1OTY4NVx1OTZlOFx1OTZlOVx1''@;'; put 'put ''NTJkNlx1NWY2N1x1NjVlZFx1NjYzMVx1NjgyZlx1NzE1Y1x1N2EzNlx1OTBjMVx1OTgwYVx1NGU5MVx1ZjljNVx1NmE1Mlx1NmI5ZVx1NmY5MFx1NzE4OVx1ODAxOFx1ODJiOFx1ODU1M1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIzM10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjMzXVtz''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoeVtjWzIzM11bc11dPTU5NjQ4K3MsaFs1OTY0OCtzXT1jWzIzM11bc10pO2ZvcihjWzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA0Ylx1OTY5NVx1OTZmMlx1OTdmYlx1ODUxYVx1OWIzMVx1NGU5MFx1NzE4YVx1OTZjNFx1NTE0M1x1NTM5Zlx1NTRlMVx1NTcxM1x1NTcxMlx1NTdhM1x1NWE5Ylx1NWFjNFx1NWJjM1x1NjAyOFx1''@;'; put 'put ''NjEzZlx1NjNmNFx1NmM4NVx1NmQzOVx1NmU3Mlx1NmU5MFx1NzIzMFx1NzMzZlx1NzQ1N1x1ODJkMVx1ODg4MVx1OGY0NVx1OTA2MFx1ZjljNlx1OTY2Mlx1OTg1OFx1OWQxYlx1NjcwOFx1OGQ4YVx1OTI1ZVx1NGY0ZFx1NTA0OVx1NTBkZVx1NTM3MVx1NTcwZFx1NTlkNFx1NWEwMVx1NWMw''@;'; put 'put ''OVx1NjE3MFx1NjY5MFx1NmUyZFx1NzIzMlx1NzQ0Ylx1N2RlZlx1ODBjM1x1ODQwZVx1ODQ2Nlx1ODUzZlx1ODc1Zlx1ODg1Ylx1ODkxOFx1OGIwMlx1OTA1NVx1OTdjYlx1OWI0Zlx1NGU3M1x1NGY5MVx1NTExMlx1NTE2YVx1ZjljN1x1NTUyZlx1NTVhOVx1NWI3YVx1NWJhNVx1NWU3Y1x1''@;'; put 'put ''NWU3ZFx1NWViZVx1NjBhMFx1NjBkZlx1NjEwOFx1NjEwOVx1NjNjNFx1NjUzOFx1NjcwOVx1ZjljOFx1NjdkNFx1NjdkYVx1ZjljOVx1Njk2MVx1Njk2Mlx1NmNiOVx1NmQyN1x1ZjljYVx1NmUzOFx1ZjljYlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIzNF0ubGVuZ3RoOysrcyk2NTUz''@;'; put 'put ''MyE9PWNbMjM0XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIzNF1bc11dPTU5OTA0K3MsaFs1OTkwNCtzXT1jWzIzNF1bc10pO2ZvcihjWzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZlMVx1NzMzNlx1NzMzN1x1ZjljY1x1NzQ1Y1x1NzUzMVx1ZjljZFx1NzY1Mlx1ZjljZVx1ZjljZlx1N2RhZFx1ODFmZVx1ODQzOFx1ODhkNVx1OGE5OFx1OGFkYlx1OGFlZFx1''@;'; put 'put ''OGUzMFx1OGU0Mlx1OTA0YVx1OTAzZVx1OTA3YVx1OTE0OVx1OTFjOVx1OTM2ZVx1ZjlkMFx1ZjlkMVx1NTgwOVx1ZjlkMlx1NmJkM1x1ODA4OVx1ODBiMlx1ZjlkM1x1ZjlkNFx1NTE0MVx1NTk2Ylx1NWMzOVx1ZjlkNVx1ZjlkNlx1NmY2NFx1NzNhN1x1ODBlNFx1OGQwN1x1ZjlkN1x1OTIx''@;'; put 'put ''N1x1OTU4Zlx1ZjlkOFx1ZjlkOVx1ZjlkYVx1ZjlkYlx1ODA3Zlx1NjIwZVx1NzAxY1x1N2Q2OFx1ODc4ZFx1ZjlkY1x1NTdhMFx1NjA2OVx1NjE0N1x1NmJiN1x1OGFiZVx1OTI4MFx1OTZiMVx1NGU1OVx1NTQxZlx1NmRlYlx1ODUyZFx1OTY3MFx1OTdmM1x1OThlZVx1NjNkNlx1NmNlM1x1''@;'; put 'put ''OTA5MVx1NTFkZFx1NjFjOVx1ODFiYVx1OWRmOVx1NGY5ZFx1NTAxYVx1NTEwMFx1NWI5Y1x1NjEwZlx1NjFmZlx1NjRlY1x1NjkwNVx1NmJjNVx1NzU5MVx1NzdlM1x1N2ZhOVx1ODI2NFx1ODU4Zlx1ODdmYlx1ODg2M1x1OGFiY1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIzNV0ubGVu''@;'; put 'put ''Z3RoOysrcyk2NTUzMyE9PWNbMjM1XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIzNV1bc11dPTYwMTYwK3MsaFs2MDE2MCtzXT1jWzIzNV1bc10pO2ZvcihjWzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI3MFx1OTFhYlx1NGU4Y1x1NGVlNVx1NGYwYVx1ZjlkZFx1ZjlkZVx1NTkzN1x1NTllOFx1ZjlkZlx1NWRmMlx1NWYxYlx1NWY1Ylx1NjAyMVx1ZjllMFx1''@;'; put 'put ''ZjllMVx1ZjllMlx1ZjllM1x1NzIzZVx1NzNlNVx1ZjllNFx1NzU3MFx1NzVjZFx1ZjllNVx1NzlmYlx1ZjllNlx1ODAwY1x1ODAzM1x1ODA4NFx1ODJlMVx1ODM1MVx1ZjllN1x1ZjllOFx1OGNiZFx1OGNiM1x1OTA4N1x1ZjllOVx1ZjllYVx1OThmNFx1OTkwY1x1ZjllYlx1ZjllY1x1NzAz''@;'; put 'put ''N1x1NzZjYVx1N2ZjYVx1N2ZjY1x1N2ZmY1x1OGIxYVx1NGViYVx1NGVjMVx1NTIwM1x1NTM3MFx1ZjllZFx1NTRiZFx1NTZlMFx1NTlmYlx1NWJjNVx1NWYxNVx1NWZjZFx1NmU2ZVx1ZjllZVx1ZjllZlx1N2Q2YVx1ODMzNVx1ZjlmMFx1ODY5M1x1OGE4ZFx1ZjlmMVx1OTc2ZFx1OTc3N1x1''@;'; put 'put ''ZjlmMlx1ZjlmM1x1NGUwMFx1NGY1YVx1NGY3ZVx1NThmOVx1NjVlNVx1NmVhMlx1OTAzOFx1OTNiMFx1OTliOVx1NGVmYlx1NThlY1x1NTk4YVx1NTlkOVx1NjA0MVx1ZjlmNFx1ZjlmNVx1N2ExNFx1ZjlmNlx1ODM0Zlx1OGNjM1x1NTE2NVx1NTM0NFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtz''@;'; put 'put ''IT1jWzIzNl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjM2XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIzNl1bc11dPTYwNDE2K3MsaFs2MDQxNitzXT1jWzIzNl1bc10pO2ZvcihjWzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjlmN1x1ZjlmOFx1ZjlmOVx1NGVjZFx1NTI2OVx1NWI1NVx1ODJiZlx1NGVkNFx1NTIzYVx1NTRhOFx1NTljOVx1NTlmZlx1NWI1MFx1''@;'; put 'put ''NWI1N1x1NWI1Y1x1NjA2M1x1NjE0OFx1NmVjYlx1NzA5OVx1NzE2ZVx1NzM4Nlx1NzRmN1x1NzViNVx1NzhjMVx1N2QyYlx1ODAwNVx1ODFlYVx1ODMyOFx1ODUxN1x1ODVjOVx1OGFlZVx1OGNjN1x1OTZjY1x1NGY1Y1x1NTJmYVx1NTZiY1x1NjVhYlx1NjYyOFx1NzA3Y1x1NzBiOFx1NzIz''@;'; put 'put ''NVx1N2RiZFx1ODI4ZFx1OTE0Y1x1OTZjMFx1OWQ3Mlx1NWI3MVx1NjhlN1x1NmI5OFx1NmY3YVx1NzZkZVx1NWM5MVx1NjZhYlx1NmY1Ylx1N2JiNFx1N2MyYVx1ODgzNlx1OTZkY1x1NGUwOFx1NGVkN1x1NTMyMFx1NTgzNFx1NThiYlx1NThlZlx1NTk2Y1x1NWMwN1x1NWUzM1x1NWU4NFx1''@;'; put 'put ''NWYzNVx1NjM4Y1x1NjZiMlx1Njc1Nlx1NmExZlx1NmFhM1x1NmIwY1x1NmYzZlx1NzI0Nlx1ZjlmYVx1NzM1MFx1NzQ4Ylx1N2FlMFx1N2NhN1x1ODE3OFx1ODFkZlx1ODFlN1x1ODM4YVx1ODQ2Y1x1ODUyM1x1ODU5NFx1ODVjZlx1ODhkZFx1OGQxM1x1OTFhY1x1OTU3N1x1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLHM9MDtzIT1jWzIzN10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjM3XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIzN11bc11dPTYwNjcyK3MsaFs2MDY3MitzXT1jWzIzN11bc10pO2ZvcihjWzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY5Y1x1NTE4ZFx1NTRjOVx1NTcyOFx1NWJiMFx1NjI0ZFx1Njc1MFx1NjgzZFx1Njg5M1x1NmUzZFx1NmVkM1x1''@;'; put 'put ''NzA3ZFx1N2UyMVx1ODhjMVx1OGNhMVx1OGYwOVx1OWY0Ylx1OWY0ZVx1NzIyZFx1N2I4Zlx1OGFjZFx1OTMxYVx1NGY0N1x1NGY0ZVx1NTEzMlx1NTQ4MFx1NTlkMFx1NWU5NVx1NjJiNVx1Njc3NVx1Njk2ZVx1NmExN1x1NmNhZVx1NmUxYVx1NzJkOVx1NzMyYVx1NzViZFx1N2JiOFx1N2Qz''@;'; put 'put ''NVx1ODJlN1x1ODNmOVx1ODQ1N1x1ODVmN1x1OGE1Ylx1OGNhZlx1OGU4N1x1OTAxOVx1OTBiOFx1OTZjZVx1OWY1Zlx1NTJlM1x1NTQwYVx1NWFlMVx1NWJjMlx1NjQ1OFx1NjU3NVx1NmVmNFx1NzJjNFx1ZjlmYlx1NzY4NFx1N2E0ZFx1N2IxYlx1N2M0ZFx1N2UzZVx1N2ZkZlx1ODM3Ylx1''@;'; put 'put ''OGIyYlx1OGNjYVx1OGQ2NFx1OGRlMVx1OGU1Zlx1OGZlYVx1OGZmOVx1OTA2OVx1OTNkMVx1NGY0M1x1NGY3YVx1NTBiM1x1NTE2OFx1NTE3OFx1NTI0ZFx1NTI2YVx1NTg2MVx1NTg3Y1x1NTk2MFx1NWMwOFx1NWM1NVx1NWVkYlx1NjA5Ylx1NjIzMFx1NjgxM1x1NmJiZlx1NmMwOFx1NmZi''@;'; put 'put ''MVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIzOF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjM4XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIzOF1bc11dPTYwOTI4K3MsaFs2MDkyOCtzXT1jWzIzOF1bc10pO2ZvcihjWzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0ZVx1NzQyMFx1NzUzMFx1NzUzOFx1NzU1MVx1NzY3Mlx1N2I0Y1x1N2I4Ylx1N2JhZFx1''@;'; put 'put ''N2JjNlx1N2U4Zlx1OGE2ZVx1OGYzZVx1OGY0OVx1OTIzZlx1OTI5M1x1OTMyMlx1OTQyYlx1OTZmYlx1OTg1YVx1OTg2Ylx1OTkxZVx1NTIwN1x1NjIyYVx1NjI5OFx1NmQ1OVx1NzY2NFx1N2FjYVx1N2JjMFx1N2Q3Nlx1NTM2MFx1NWNiZVx1NWU5N1x1NmYzOFx1NzBiOVx1N2M5OFx1OTcx''@;'; put 'put ''MVx1OWI4ZVx1OWVkZVx1NjNhNVx1NjQ3YVx1ODc3Nlx1NGUwMVx1NGU5NVx1NGVhZFx1NTA1Y1x1NTA3NVx1NTQ0OFx1NTljM1x1NWI5YVx1NWU0MFx1NWVhZFx1NWVmN1x1NWY4MVx1NjBjNVx1NjMzYVx1NjUzZlx1NjU3NFx1NjVjY1x1NjY3Nlx1NjY3OFx1NjdmZVx1Njk2OFx1NmE4OVx1''@;'; put 'put ''NmI2M1x1NmM0MFx1NmRjMFx1NmRlOFx1NmUxZlx1NmU1ZVx1NzAxZVx1NzBhMVx1NzM4ZVx1NzNmZFx1NzUzYVx1Nzc1Ylx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2E3ZFx1N2NiZVx1N2Q4ZVx1ODI0N1x1OGEwMlx1OGFlYVx1OGM5ZVx1OTEyZFx1OTE0YVx1OTFkOFx1OTI2Nlx1OTJjY1x1OTMy''@;'; put 'put ''MFx1OTcwNlx1OTc1Nlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIzOV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjM5XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIzOV1bc11dPTYxMTg0K3MsaFs2MTE4NCtzXT1jWzIzOV1bc10pO2ZvcihjWzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc1Y1x1OTgwMlx1OWYwZVx1NTIzNlx1NTI5MVx1NTU3Y1x1NTgyNFx1''@;'; put 'put ''NWUxZFx1NWYxZlx1NjA4Y1x1NjNkMFx1NjhhZlx1NmZkZlx1Nzk2ZFx1N2IyY1x1ODFjZFx1ODViYVx1ODhmZFx1OGFmOFx1OGU0NFx1OTE4ZFx1OTY2NFx1OTY5Ylx1OTczZFx1OTg0Y1x1OWY0YVx1NGZjZVx1NTE0Nlx1NTFjYlx1NTJhOVx1NTYzMlx1NWYxNFx1NWY2Ylx1NjNhYVx1NjRj''@;'; put 'put ''ZFx1NjVlOVx1NjY0MVx1NjZmYVx1NjZmOVx1NjcxZFx1Njg5ZFx1NjhkN1x1NjlmZFx1NmYxNVx1NmY2ZVx1NzE2N1x1NzFlNVx1NzIyYVx1NzRhYVx1NzczYVx1Nzk1Nlx1Nzk1YVx1NzlkZlx1N2EyMFx1N2E5NVx1N2M5N1x1N2NkZlx1N2Q0NFx1N2U3MFx1ODA4N1x1ODVmYlx1ODZhNFx1''@;'; put 'put ''OGE1NFx1OGFiZlx1OGQ5OVx1OGU4MVx1OTAyMFx1OTA2ZFx1OTFlM1x1OTYzYlx1OTZkNVx1OWNlNVx1NjVjZlx1N2MwN1x1OGRiM1x1OTNjM1x1NWI1OFx1NWMwYVx1NTM1Mlx1NjJkOVx1NzMxZFx1NTAyN1x1NWI5N1x1NWY5ZVx1NjBiMFx1NjE2Ylx1NjhkNVx1NmRkOVx1NzQyZVx1N2Ey''@;'; put 'put ''ZVx1N2Q0Mlx1N2Q5Y1x1N2UzMVx1ODE2Ylx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI0MF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjQwXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI0MF1bc11dPTYxNDQwK3MsaFs2MTQ0MCtzXT1jWzI0MF1bc10pO2ZvcihjWzI0MV09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGUyYVx1OGUzNVx1OTM3ZVx1OTQxOFx1NGY1MFx1''@;'; put 'put ''NTc1MFx1NWRlNlx1NWVhN1x1NjMyYlx1N2Y2YVx1NGUzYlx1NGY0Zlx1NGY4Zlx1NTA1YVx1NTlkZFx1ODBjNFx1NTQ2YVx1NTQ2OFx1NTVmZVx1NTk0Zlx1NWI5OVx1NWRkZVx1NWVkYVx1NjY1ZFx1NjczMVx1NjdmMVx1NjgyYVx1NmNlOFx1NmQzMlx1NmU0YVx1NmY4ZFx1NzBiN1x1NzNl''@;'; put 'put ''MFx1NzU4N1x1N2M0Y1x1N2QwMlx1N2QyY1x1N2RhMlx1ODIxZlx1ODZkYlx1OGEzYlx1OGE4NVx1OGQ3MFx1OGU4YVx1OGYzM1x1OTAzMVx1OTE0ZVx1OTE1Mlx1OTQ0NFx1OTlkMFx1N2FmOVx1N2NhNVx1NGZjYVx1NTEwMVx1NTFjNlx1NTdjOFx1NWJlZlx1NWNmYlx1NjY1OVx1NmEzZFx1''@;'; put 'put ''NmQ1YVx1NmU5Nlx1NmZlY1x1NzEwY1x1NzU2Zlx1N2FlM1x1ODgyMlx1OTAyMVx1OTA3NVx1OTZjYlx1OTlmZlx1ODMwMVx1NGUyZFx1NGVmMlx1ODg0Nlx1OTFjZFx1NTM3ZFx1NmFkYlx1Njk2Ylx1NmM0MVx1ODQ3YVx1NTg5ZVx1NjE4ZVx1NjZmZVx1NjJlZlx1NzBkZFx1NzUxMVx1NzVj''@;'; put 'put ''N1x1N2U1Mlx1ODRiOFx1OGI0OVx1OGQwOFx1NGU0Ylx1NTNlYVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI0MV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjQxXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI0MV1bc11dPTYxNjk2K3MsaFs2MTY5NitzXT1jWzI0MV1bc10pO2ZvcihjWzI0''@;'; put 'put ''Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRhYlx1NTczMFx1NTc0MFx1''@;'; put 'put ''NWZkN1x1NjMwMVx1NjMwN1x1NjQ2Zlx1NjUyZlx1NjVlOFx1NjY3YVx1Njc5ZFx1NjdiM1x1NmI2Mlx1NmM2MFx1NmM5YVx1NmYyY1x1NzdlNVx1NzgyNVx1Nzk0OVx1Nzk1N1x1N2QxOVx1ODBhMlx1ODEwMlx1ODFmM1x1ODI5ZFx1ODJiN1x1ODcxOFx1OGE4Y1x1ZjlmY1x1OGQwNFx1OGRi''@;'; put 'put ''ZVx1OTA3Mlx1NzZmNFx1N2ExOVx1N2EzN1x1N2U1NFx1ODA3N1x1NTUwN1x1NTVkNFx1NTg3NVx1NjMyZlx1NjQyMlx1NjY0OVx1NjY0Ylx1Njg2ZFx1Njk5Ylx1NmI4NFx1NmQyNVx1NmViMVx1NzNjZFx1NzQ2OFx1NzRhMVx1NzU1Ylx1NzViOVx1NzZlMVx1NzcxZVx1Nzc4Ylx1NzllNlx1''@;'; put 'put ''N2UwOVx1N2UxZFx1ODFmYlx1ODUyZlx1ODg5N1x1OGEzYVx1OGNkMVx1OGVlYlx1OGZiMFx1OTAzMlx1OTNhZFx1OTY2M1x1OTY3M1x1OTcwN1x1NGY4NFx1NTNmMVx1NTllYVx1NWFjOVx1NWUxOVx1Njg0ZVx1NzRjNlx1NzViZVx1NzllOVx1N2E5Mlx1ODFhM1x1ODZlZFx1OGNlYVx1OGRj''@;'; put 'put ''Y1x1OGZlZFx1NjU5Zlx1NjcxNVx1ZjlmZFx1NTdmN1x1NmY1N1x1N2RkZFx1OGYyZlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI0Ml0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjQyXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI0Ml1bc11dPTYxOTUyK3MsaFs2MTk1MitzXT1jWzI0Ml1b''@;'; put 'put ''c10pO2ZvcihjWzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTNmNlx1''@;'; put 'put ''OTZjNlx1NWZiNVx1NjFmMlx1NmY4NFx1NGUxNFx1NGY5OFx1NTAxZlx1NTNjOVx1NTVkZlx1NWQ2Zlx1NWRlZVx1NmIyMVx1NmI2NFx1NzhjYlx1N2I5YVx1ZjlmZVx1OGU0OVx1OGVjYVx1OTA2ZVx1NjM0OVx1NjQzZVx1Nzc0MFx1N2E4NFx1OTMyZlx1OTQ3Zlx1OWY2YVx1NjRiMFx1NmZh''@;'; put 'put ''Zlx1NzFlNlx1NzRhOFx1NzRkYVx1N2FjNFx1N2MxMlx1N2U4Mlx1N2NiMlx1N2U5OFx1OGI5YVx1OGQwYVx1OTQ3ZFx1OTkxMFx1OTk0Y1x1NTIzOVx1NWJkZlx1NjRlNlx1NjcyZFx1N2QyZVx1NTBlZFx1NTNjM1x1NTg3OVx1NjE1OFx1NjE1OVx1NjFmYVx1NjVhY1x1N2FkOVx1OGI5Mlx1''@;'; put 'put ''OGI5Nlx1NTAwOVx1NTAyMVx1NTI3NVx1NTUzMVx1NWEzY1x1NWVlMFx1NWY3MFx1NjEzNFx1NjU1ZVx1NjYwY1x1NjYzNlx1NjZhMlx1NjljZFx1NmVjNFx1NmYzMlx1NzMxNlx1NzYyMVx1N2E5M1x1ODEzOVx1ODI1OVx1ODNkNlx1ODRiY1x1NTBiNVx1NTdmMFx1NWJjMFx1NWJlOFx1NWY2''@;'; put 'put ''OVx1NjNhMVx1NzgyNlx1N2RiNVx1ODNkY1x1ODUyMVx1OTFjN1x1OTFmNVx1NTE4YVx1NjdmNVx1N2I1Nlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI0M10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjQzXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI0M11bc11dPTYyMjA4K3MsaFs2MjIw''@;'; put 'put ''OCtzXT1jWzI0M11bc10pO2ZvcihjWzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1OGNhY1x1NTFjNFx1NTliYlx1NjBiZFx1ODY1NVx1NTAxY1x1ZjlmZlx1NTI1NFx1NWMzYVx1NjE3ZFx1NjIxYVx1NjJkM1x1NjRmMlx1NjVhNVx1NmVjY1x1NzYyMFx1ODEwYVx1OGU2MFx1OTY1Zlx1OTZiYlx1NGVkZlx1NTM0M1x1NTU5OFx1NTkyOVx1NWRkZFx1NjRjNVx1NmNj''@;'; put 'put ''OVx1NmRmYVx1NzM5NFx1N2E3Zlx1ODIxYlx1ODVhNlx1OGNlNFx1OGUxMFx1OTA3N1x1OTFlN1x1OTVlMVx1OTYyMVx1OTdjNlx1NTFmOFx1NTRmMlx1NTU4Nlx1NWZiOVx1NjRhNFx1NmY4OFx1N2RiNFx1OGYxZlx1OGY0ZFx1OTQzNVx1NTBjOVx1NWMxNlx1NmNiZVx1NmRmYlx1NzUxYlx1''@;'; put 'put ''NzdiYlx1N2MzZFx1N2M2NFx1OGE3OVx1OGFjMlx1NTgxZVx1NTliZVx1NWUxNlx1NjM3N1x1NzI1Mlx1NzU4YVx1Nzc2Ylx1OGFkY1x1OGNiY1x1OGYxMlx1NWVmM1x1NjY3NFx1NmRmOFx1ODA3ZFx1ODNjMVx1OGFjYlx1OTc1MVx1OWJkNlx1ZmEwMFx1NTI0M1x1NjZmZlx1NmQ5NVx1NmVl''@;'; put 'put ''Zlx1N2RlMFx1OGFlNlx1OTAyZVx1OTA1ZVx1OWFkNFx1NTIxZFx1NTI3Zlx1NTRlOFx1NjE5NFx1NjI4NFx1NjJkYlx1NjhhMlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI0NF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjQ0XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI0NF1bc11dPTYy''@;'; put 'put ''NDY0K3MsaFs2MjQ2NCtzXT1jWzI0NF1bc10pO2ZvcihjWzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1NjkxMlx1Njk1YVx1NmEzNVx1NzA5Mlx1NzEyNlx1Nzg1ZFx1NzkwMVx1NzkwZVx1NzlkMlx1N2EwZFx1ODA5Nlx1ODI3OFx1ODJkNVx1ODM0OVx1ODU0OVx1OGM4Mlx1OGQ4NVx1OTE2Mlx1OTE4Ylx1OTFhZVx1NGZjM1x1NTZkMVx1NzFlZFx1NzdkN1x1ODcw''@;'; put 'put ''MFx1ODlmOFx1NWJmOFx1NWZkNlx1Njc1MVx1OTBhOFx1NTNlMlx1NTg1YVx1NWJmNVx1NjBhNFx1NjE4MVx1NjQ2MFx1N2UzZFx1ODA3MFx1ODUyNVx1OTI4M1x1NjRhZVx1NTBhY1x1NWQxNFx1NjcwMFx1NTg5Y1x1NjJiZFx1NjNhOFx1NjkwZVx1Njk3OFx1NmExZVx1NmU2Ylx1NzZiYVx1''@;'; put 'put ''NzljYlx1ODJiYlx1ODQyOVx1OGFjZlx1OGRhOFx1OGZmZFx1OTExMlx1OTE0Ylx1OTE5Y1x1OTMxMFx1OTMxOFx1OTM5YVx1OTZkYlx1OWEzNlx1OWMwZFx1NGUxMVx1NzU1Y1x1Nzk1ZFx1N2FmYVx1N2I1MVx1N2JjOVx1N2UyZVx1ODRjNFx1OGU1OVx1OGU3NFx1OGVmOFx1OTAxMFx1NjYy''@;'; put 'put ''NVx1NjkzZlx1NzQ0M1x1NTFmYVx1NjcyZVx1OWVkY1x1NTE0NVx1NWZlMFx1NmM5Nlx1ODdmMlx1ODg1ZFx1ODg3N1x1NjBiNFx1ODFiNVx1ODQwM1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI0NV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjQ1XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtj''@;'; put 'put ''WzI0NV1bc11dPTYyNzIwK3MsaFs2MjcyMCtzXT1jWzI0NV1bc10pO2ZvcihjWzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGQwNVx1NTNkNlx1NTQzOVx1NTYzNFx1NWEzNlx1NWMzMVx1NzA4YVx1N2ZlMFx1ODA1YVx1ODEwNlx1ODFlZFx1OGRhM1x1OTE4OVx1OWE1Zlx1OWRmMlx1NTA3NFx1NGVjNFx1NTNhMFx1NjBmYlx1NmUyY1x1NWM2NFx1NGY4OFx1NTAy''@;'; put 'put ''NFx1NTVlNFx1NWNkOVx1NWU1Zlx1NjA2NVx1Njg5NFx1NmNiYlx1NmRjNFx1NzFiZVx1NzVkNFx1NzVmNFx1NzY2MVx1N2ExYVx1N2E0OVx1N2RjN1x1N2RmYlx1N2Y2ZVx1ODFmNFx1ODZhOVx1OGYxY1x1OTZjOVx1OTliM1x1OWY1Mlx1NTI0N1x1NTJjNVx1OThlZFx1ODlhYVx1NGUwM1x1''@;'; put 'put ''NjdkMlx1NmYwNlx1NGZiNVx1NWJlMlx1Njc5NVx1NmM4OFx1NmQ3OFx1NzQxYlx1NzgyN1x1OTFkZFx1OTM3Y1x1ODdjNFx1NzllNFx1N2EzMVx1NWZlYlx1NGVkNlx1NTRhNFx1NTUzZVx1NThhZVx1NTlhNVx1NjBmMFx1NjI1M1x1NjJkNlx1NjczNlx1Njk1NVx1ODIzNVx1OTY0MFx1OTli''@;'; put 'put ''MVx1OTlkZFx1NTAyY1x1NTM1M1x1NTU0NFx1NTc3Y1x1ZmEwMVx1NjI1OFx1ZmEwMlx1NjRlMlx1NjY2Ylx1NjdkZFx1NmZjMVx1NmZlZlx1NzQyMlx1NzQzOFx1OGExN1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI0Nl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjQ2XVtzXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoeVtjWzI0Nl1bc11dPTYyOTc2K3MsaFs2Mjk3NitzXT1jWzI0Nl1bc10pO2ZvcihjWzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTQzOFx1NTQ1MVx1NTYwNlx1NTc2Nlx1NWY0OFx1NjE5YVx1NmI0ZVx1NzA1OFx1NzBhZFx1N2RiYlx1OGE5NVx1NTk2YVx1ODEyYlx1NjNhMlx1NzcwOFx1ODAzZFx1OGNhYVx1NTg1NFx1NjQyZFx1NjliYlx1NWI5''@;'; put 'put ''NVx1NWUxMVx1NmU2Zlx1ZmEwM1x1ODU2OVx1NTE0Y1x1NTNmMFx1NTkyYVx1NjAyMFx1NjE0Ylx1NmI4Nlx1NmM3MFx1NmNmMFx1N2IxZVx1ODBjZVx1ODJkNFx1OGRjNlx1OTBiMFx1OThiMVx1ZmEwNFx1NjRjN1x1NmZhNFx1NjQ5MVx1NjUwNFx1NTE0ZVx1NTQxMFx1NTcxZlx1OGEwZVx1''@;'; put 'put ''NjE1Zlx1Njg3Nlx1ZmEwNVx1NzVkYlx1N2I1Mlx1N2Q3MVx1OTAxYVx1NTgwNlx1NjljY1x1ODE3Zlx1ODkyYVx1OTAwMFx1OTgzOVx1NTA3OFx1NTk1N1x1NTlhY1x1NjI5NVx1OTAwZlx1OWIyYVx1NjE1ZFx1NzI3OVx1OTVkNlx1NTc2MVx1NWE0Nlx1NWRmNFx1NjI4YVx1NjRhZFx1NjRm''@;'; put 'put ''YVx1Njc3N1x1NmNlMlx1NmQzZVx1NzIyY1x1NzQzNlx1NzgzNFx1N2Y3N1x1ODJhZFx1OGRkYlx1OTgxN1x1NTIyNFx1NTc0Mlx1Njc3Zlx1NzI0OFx1NzRlM1x1OGNhOVx1OGZhNlx1OTIxMVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI0N10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjQ3''@;'; put 'put ''XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI0N11bc11dPTYzMjMyK3MsaFs2MzIzMitzXT1jWzI0N11bc10pO2ZvcihjWzI0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTYyYVx1NTE2Ylx1NTNlZFx1NjM0Y1x1NGY2OVx1NTUwNFx1NjA5Nlx1NjU1N1x1NmM5Ylx1NmQ3Zlx1NzI0Y1x1NzJmZFx1N2ExN1x1ODk4N1x1OGM5ZFx1NWY2ZFx1NmY4ZVx1NzBmOVx1ODFh''@;'; put 'put ''OFx1NjEwZVx1NGZiZlx1NTA0Zlx1NjI0MVx1NzI0N1x1N2JjN1x1N2RlOFx1N2ZlOVx1OTA0ZFx1OTdhZFx1OWExOVx1OGNiNlx1NTc2YVx1NWU3M1x1NjdiMFx1ODQwZFx1OGE1NVx1NTQyMFx1NWIxNlx1NWU2M1x1NWVlMlx1NWYwYVx1NjU4M1x1ODBiYVx1ODUzZFx1OTU4OVx1OTY1Ylx1''@;'; put 'put ''NGY0OFx1NTMwNVx1NTMwZFx1NTMwZlx1NTQ4Nlx1NTRmYVx1NTcwM1x1NWUwM1x1NjAxNlx1NjI5Ylx1NjJiMVx1NjM1NVx1ZmEwNlx1NmNlMVx1NmQ2Nlx1NzViMVx1NzgzMlx1ODBkZVx1ODEyZlx1ODJkZVx1ODQ2MVx1ODRiMlx1ODg4ZFx1ODkxMlx1OTAwYlx1OTJlYVx1OThmZFx1OWI5''@;'; put 'put ''MVx1NWU0NVx1NjZiNFx1NjZkZFx1NzAxMVx1NzIwNlx1ZmEwN1x1NGZmNVx1NTI3ZFx1NWY2YVx1NjE1M1x1Njc1M1x1NmExOVx1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGM3OVx1OThjN1x1OThjNFx1OWE0M1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI0OF0ubGVuZ3RoOysrcyk2''@;'; put 'put ''NTUzMyE9PWNbMjQ4XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI0OF1bc11dPTYzNDg4K3MsaFs2MzQ4OCtzXT1jWzI0OF1bc10pO2ZvcihjWzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjMVx1N2ExZlx1Njk1M1x1OGFmN1x1OGM0YVx1OThhOFx1OTlhZVx1NWY3Y1x1NjJhYlx1NzViMlx1NzZhZVx1ODhhYlx1OTA3Zlx1OTY0Mlx1NTMzOVx1NWYzY1x1NWZj''@;'; put 'put ''NVx1NmNjY1x1NzNjY1x1NzU2Mlx1NzU4Ylx1N2I0Nlx1ODJmZVx1OTk5ZFx1NGU0Zlx1OTAzY1x1NGUwYlx1NGY1NVx1NTNhNlx1NTkwZlx1NWVjOFx1NjYzMFx1NmNiM1x1NzQ1NVx1ODM3N1x1ODc2Nlx1OGNjMFx1OTA1MFx1OTcxZVx1OWMxNVx1NThkMVx1NWI3OFx1ODY1MFx1OGIxNFx1''@;'; put 'put ''OWRiNFx1NWJkMlx1NjA2OFx1NjA4ZFx1NjVmMVx1NmM1N1x1NmYyMlx1NmZhM1x1NzAxYVx1N2Y1NVx1N2ZmMFx1OTU5MVx1OTU5Mlx1OTY1MFx1OTdkM1x1NTI3Mlx1OGY0NFx1NTFmZFx1NTQyYlx1NTRiOFx1NTU2M1x1NTU4YVx1NmFiYlx1NmRiNVx1N2RkOFx1ODI2Nlx1OTI5Y1x1OTY3''@;'; put 'put ''N1x1OWU3OVx1NTQwOFx1NTRjOFx1NzZkMlx1ODZlNFx1OTVhNFx1OTVkNFx1OTY1Y1x1NGVhMlx1NGYwOVx1NTllZVx1NWFlNlx1NWRmN1x1NjA1Mlx1NjI5N1x1Njc2ZFx1Njg0MVx1NmM4Nlx1NmUyZlx1N2YzOFx1ODA5Ylx1ODIyYVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI0OV0u''@;'; put 'put ''bGVuZ3RoOysrcyk2NTUzMyE9PWNbMjQ5XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI0OV1bc11dPTYzNzQ0K3MsaFs2Mzc0NCtzXT1jWzI0OV1bc10pO2ZvcihjWzI1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmEwOFx1ZmEwOVx1OTgwNVx1NGVhNVx1NTA1NVx1NTRiM1x1NTc5M1x1NTk1YVx1NWI2OVx1NWJiM1x1NjFjOFx1Njk3N1x1NmQ3N1x1NzAyM1x1ODdm''@;'; put 'put ''OVx1ODllM1x1OGE3Mlx1OGFlN1x1OTA4Mlx1OTllZFx1OWFiOFx1NTJiZVx1NjgzOFx1NTAxNlx1NWU3OFx1Njc0Zlx1ODM0N1x1ODg0Y1x1NGVhYlx1NTQxMVx1NTZhZVx1NzNlNlx1OTExNVx1OTdmZlx1OTkwOVx1OTk1N1x1OTk5OVx1NTY1M1x1NTg5Zlx1ODY1Ylx1OGEzMVx1NjFiMlx1''@;'; put 'put ''NmFmNlx1NzM3Ylx1OGVkMlx1NmI0N1x1OTZhYVx1OWE1N1x1NTk1NVx1NzIwMFx1OGQ2Ylx1OTc2OVx1NGZkNFx1NWNmNFx1NWYyNlx1NjFmOFx1NjY1Ylx1NmNlYlx1NzBhYlx1NzM4NFx1NzNiOVx1NzNmZVx1NzcyOVx1Nzc0ZFx1N2Q0M1x1N2Q2Mlx1N2UyM1x1ODIzN1x1ODg1Mlx1ZmEw''@;'; put 'put ''YVx1OGNlMlx1OTI0OVx1OTg2Zlx1NWI1MVx1N2E3NFx1ODg0MFx1OTgwMVx1NWFjY1x1NGZlMFx1NTM1NFx1NTkzZVx1NWNmZFx1NjMzZVx1NmQ3OVx1NzJmOVx1ODEwNVx1ODEwN1x1ODNhMlx1OTJjZlx1OTgzMFx1NGVhOFx1NTE0NFx1NTIxMVx1NTc4Ylx1ZmZmZCIuc3BsaXQoIiIpLHM9''@;'; put 'put ''MDtzIT1jWzI1MF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjUwXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI1MF1bc11dPTY0ZTMrcyxoWzY0ZTMrc109Y1syNTBdW3NdKTtmb3IoY1syNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmNjJcdTZjYzJcdTZlY2VcdTcwMDVcdTcwNTBcdTcwYWZcdTcxOTJcdTczZTlcdTc0NjlcdTgzNGFcdTg3YTJcdTg4NjFcdTkwMDhc''@;'; put 'put ''dTkwYTJcdTkzYTNcdTk5YThcdTUxNmVcdTVmNTdcdTYwZTBcdTYxNjdcdTY2YjNcdTg1NTlcdThlNGFcdTkxYWZcdTk3OGJcdTRlNGVcdTRlOTJcdTU0N2NcdTU4ZDVcdTU4ZmFcdTU5N2RcdTVjYjVcdTVmMjdcdTYyMzZcdTYyNDhcdTY2MGFcdTY2NjdcdTZiZWJcdTZkNjlcdTZkY2ZcdTZl''@;'; put 'put ''NTZcdTZlZjhcdTZmOTRcdTZmZTBcdTZmZTlcdTcwNWRcdTcyZDBcdTc0MjVcdTc0NWFcdTc0ZTBcdTc2OTNcdTc5NWNcdTdjY2FcdTdlMWVcdTgwZTFcdTgyYTZcdTg0NmJcdTg0YmZcdTg2NGVcdTg2NWZcdTg3NzRcdThiNzdcdThjNmFcdTkzYWNcdTk4MDBcdTk4NjVcdTYwZDFcdTYyMTZc''@;'; put 'put ''dTkxNzdcdTVhNWFcdTY2MGZcdTZkZjdcdTZlM2VcdTc0M2ZcdTliNDJcdTVmZmRcdTYwZGFcdTdiMGZcdTU0YzRcdTVmMThcdTZjNWVcdTZjZDNcdTZkMmFcdTcwZDhcdTdkMDVcdTg2NzlcdThhMGNcdTlkM2JcdTUzMTZcdTU0OGNcdTViMDVcdTZhM2FcdTcwNmJcdTc1NzVcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxzPTA7cyE9Y1syNTFdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzI1MV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syNTFdW3NdXT02NDI1NitzLGhbNjQyNTYrc109Y1syNTFdW3NdKTtmb3IoY1syNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OGRcdTc5YmVcdTgyYjFcdTgzZWZcdThhNzFcdThiNDFcdThjYThcdTk3NzRcdWZhMGJcdTY0ZjRcdTY1MmJc''@;'; put 'put ''dTc4YmFcdTc4YmJcdTdhNmJcdTRlMzhcdTU1OWFcdTU5NTBcdTViYTZcdTVlN2JcdTYwYTNcdTYzZGJcdTZiNjFcdTY2NjVcdTY4NTNcdTZlMTlcdTcxNjVcdTc0YjBcdTdkMDhcdTkwODRcdTlhNjlcdTljMjVcdTZkM2JcdTZlZDFcdTczM2VcdThjNDFcdTk1Y2FcdTUxZjBcdTVlNGNcdTVm''@;'; put 'put ''YThcdTYwNGRcdTYwZjZcdTYxMzBcdTYxNGNcdTY2NDNcdTY2NDRcdTY5YTVcdTZjYzFcdTZlNWZcdTZlYzlcdTZmNjJcdTcxNGNcdTc0OWNcdTc2ODdcdTdiYzFcdTdjMjdcdTgzNTJcdTg3NTdcdTkwNTFcdTk2OGRcdTllYzNcdTUzMmZcdTU2ZGVcdTVlZmJcdTVmOGFcdTYwNjJcdTYwOTRc''@;'; put 'put ''dTYxZjdcdTY2NjZcdTY3MDNcdTZhOWNcdTZkZWVcdTZmYWVcdTcwNzBcdTczNmFcdTdlNmFcdTgxYmVcdTgzMzRcdTg2ZDRcdThhYThcdThjYzRcdTUyODNcdTczNzJcdTViOTZcdTZhNmJcdTk0MDRcdTU0ZWVcdTU2ODZcdTViNWRcdTY1NDhcdTY1ODVcdTY2YzlcdTY4OWZcdTZkOGRcdTZk''@;'; put 'put ''YzZcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syNTJdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzI1Ml1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syNTJdW3NdXT02NDUxMitzLGhbNjQ1MTIrc109Y1syNTJdW3NdKTtmb3IoY1syNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyM2JcdTgwYjRcdTkxNzVcdTlhNGRcdTRmYWZcdTUwMTlcdTUzOWFcdTU0MGVcdTU0M2Nc''@;'; put 'put ''dTU1ODlcdTU1YzVcdTVlM2ZcdTVmOGNcdTY3M2RcdTcxNjZcdTczZGRcdTkwMDVcdTUyZGJcdTUyZjNcdTU4NjRcdTU4Y2VcdTcxMDRcdTcxOGZcdTcxZmJcdTg1YjBcdThhMTNcdTY2ODhcdTg1YThcdTU1YTdcdTY2ODRcdTcxNGFcdTg0MzFcdTUzNDlcdTU1OTlcdTZiYzFcdTVmNTlcdTVm''@;'; put 'put ''YmRcdTYzZWVcdTY2ODlcdTcxNDdcdThhZjFcdThmMWRcdTllYmVcdTRmMTFcdTY0M2FcdTcwY2JcdTc1NjZcdTg2NjdcdTYwNjRcdThiNGVcdTlkZjhcdTUxNDdcdTUxZjZcdTUzMDhcdTZkMzZcdTgwZjhcdTllZDFcdTY2MTVcdTZiMjNcdTcwOThcdTc1ZDVcdTU0MDNcdTVjNzlcdTdkMDdc''@;'; put 'put ''dThhMTZcdTZiMjBcdTZiM2RcdTZiNDZcdTU0MzhcdTYwNzBcdTZkM2RcdTdmZDVcdTgyMDhcdTUwZDZcdTUxZGVcdTU1OWNcdTU2NmJcdTU2Y2RcdTU5ZWNcdTViMDlcdTVlMGNcdTYxOTlcdTYxOThcdTYyMzFcdTY2NWVcdTY2ZTZcdTcxOTlcdTcxYjlcdTcxYmFcdTcyYTdcdTc5YTdcdTdh''@;'; put 'put ''MDBcdTdmYjJcdThhNzBcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syNTNdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzI1M11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syNTNdW3NdXT02NDc2OCtzLGhbNjQ3Njgrc109Y1syNTNdW3NdKTtyZXR1cm57ZW5jOnksZGVjOmh9fSgpLGpbOTUwXT1m''@;'; put 'put ''dW5jdGlvbigpe3ZhciBzLGg9W10seT17fSxjPVtdO2ZvcihjWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJico''@;'; put 'put ''KSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzBdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzBdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMF1bc11dPTArcyxoWzArc109Y1swXVtzXSk7Zm9yKGNbMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHVmZjBjXHUzMDAxXHUzMDAyXHVmZjBlXHUyMDI3XHVmZjFiXHVmZjFhXHVmZjFmXHVmZjAxXHVmZTMwXHUyMDI2XHUyMDI1XHVmZTUwXHVmZTUxXHVmZTUyXHhiN1x1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1N1x1ZmY1Y1x1''@;'; put 'put ''MjAxM1x1ZmUzMVx1MjAxNFx1ZmUzM1x1MjU3NFx1ZmUzNFx1ZmU0Zlx1ZmYwOFx1ZmYwOVx1ZmUzNVx1ZmUzNlx1ZmY1Ylx1ZmY1ZFx1ZmUzN1x1ZmUzOFx1MzAxNFx1MzAxNVx1ZmUzOVx1ZmUzYVx1MzAxMFx1MzAxMVx1ZmUzYlx1ZmUzY1x1MzAwYVx1MzAwYlx1ZmUzZFx1ZmUzZVx1MzAw''@;'; put 'put ''OFx1MzAwOVx1ZmUzZlx1ZmU0MFx1MzAwY1x1MzAwZFx1ZmU0MVx1ZmU0Mlx1MzAwZVx1MzAwZlx1ZmU0M1x1ZmU0NFx1ZmU1OVx1ZmU1YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAx''@;'; put 'put ''ZFx1MzAxZFx1MzAxZVx1MjAzNVx1MjAzMlx1ZmYwM1x1ZmYwNlx1ZmYwYVx1MjAzYlx4YTdcdTMwMDNcdTI1Y2JcdTI1Y2ZcdTI1YjNcdTI1YjJcdTI1Y2VcdTI2MDZcdTI2MDVcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YmRcdTI1YmNcdTMyYTNcdTIxMDVceGFmXHVmZmUzXHVmZjNm''@;'; put 'put ''XHUwMmNkXHVmZTQ5XHVmZTRhXHVmZTRkXHVmZTRlXHVmZTRiXHVmZTRjXHVmZTVmXHVmZTYwXHVmZTYxXHVmZjBiXHVmZjBkXHhkN1x4ZjdceGIxXHUyMjFhXHVmZjFjXHVmZjFlXHVmZjFkXHUyMjY2XHUyMjY3XHUyMjYwXHUyMjFlXHUyMjUyXHUyMjYxXHVmZTYyXHVmZTYzXHVmZTY0XHVm''@;'; put 'put ''ZTY1XHVmZTY2XHVmZjVlXHUyMjI5XHUyMjJhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUzM2QyXHUzM2QxXHUyMjJiXHUyMjJlXHUyMjM1XHUyMjM0XHUyNjQwXHUyNjQyXHUyMjk1XHUyMjk5XHUyMTkxXHUyMTkzXHUyMTkwXHUyMTkyXHUyMTk2XHUyMTk3XHUyMTk5XHUyMTk4XHUyMjI1''@;'; put 'put ''XHUyMjIzXHVmZjBmXHVmZmZkIi5zcGxpdCgiIikscz0wO3MhPWNbMTYxXS5sZW5ndGg7KytzKTY1NTMzIT09Y1sxNjFdW3NdLmNoYXJDb2RlQXQoMCkmJih5W2NbMTYxXVtzXV09NDEyMTYrcyxoWzQxMjE2K3NdPWNbMTYxXVtzXSk7Zm9yKGNbMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjNjXHUyMjE1XHVmZTY4XHVmZjA0XHVmZmU1XHUzMDEyXHVmZmUwXHVmZmUxXHVmZjA1XHVmZjIwXHUyMTAzXHUyMTA5XHVmZTY5XHVmZTZhXHVmZTZiXHUzM2Q1XHUzMzljXHUzMzlkXHUzMzllXHUzM2NlXHUzM2ExXHUzMzhl''@;'; put 'put ''XHUzMzhmXHUzM2M0XHhiMFx1NTE1OVx1NTE1Ylx1NTE1ZVx1NTE1ZFx1NTE2MVx1NTE2M1x1NTVlN1x1NzRlOVx1N2NjZVx1MjU4MVx1MjU4Mlx1MjU4M1x1MjU4NFx1MjU4NVx1MjU4Nlx1MjU4N1x1MjU4OFx1MjU4Zlx1MjU4ZVx1MjU4ZFx1MjU4Y1x1MjU4Ylx1MjU4YVx1MjU4OVx1MjUz''@;'; put 'put ''Y1x1MjUzNFx1MjUyY1x1MjUyNFx1MjUxY1x1MjU5NFx1MjUwMFx1MjUwMlx1MjU5NVx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjU2ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU1MFx1MjU1ZVx1MjU2YVx1MjU2MVx1MjVl''@;'; put 'put ''Mlx1MjVlM1x1MjVlNVx1MjVlNFx1MjU3MVx1MjU3Mlx1MjU3M1x1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1MzAyMVx1''@;'; put 'put ''MzAyMlx1MzAyM1x1MzAyNFx1MzAyNVx1MzAyNlx1MzAyN1x1MzAyOFx1MzAyOVx1NTM0MVx1NTM0NFx1NTM0NVx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1ZmYz''@;'; put 'put ''MVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1ZmY1MVx1ZmY1Mlx1''@;'; put 'put ''ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE2Ml0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTYyXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE2Ml1bc11dPTQxNDcyK3MsaFs0MTQ3MitzXT1jWzE2Ml1bc10pO2ZvcihjWzE2M109Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1''@;'; put 'put ''MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1MDNj''@;'; put 'put ''NVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEwOVx1MzEwYVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1MzEwZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzExMFx1MzExMVx1MzExMlx1MzExM1x1MzExNFx1MzEx''@;'; put 'put ''NVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzExZVx1MzExZlx1MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1MzEyNVx1MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1MDJkOVx1MDJjOVx1MDJjYVx1MDJjN1x1MDJjYlx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE2M10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTYzXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE2M11bc11dPTQxNzI4K3MsaFs0MTcyOCtzXT1jWzE2M11bc10pO2ZvcihjWzE2NF09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMFx1NGU1OVx1NGUwMVx1NGUwM1x1NGU0M1x1NGU1ZFx1NGU4Nlx1NGU4Y1x1NGViYVx1NTEzZlx1NTE2NVx1NTE2Ylx1NTFlMFx1NTIwMFx1NTIwMVx1NTI5Ylx1NTMxNVx1NTM0MVx1''@;'; put 'put ''NTM1Y1x1NTNjOFx1NGUwOVx1NGUwYlx1NGUwOFx1NGUwYVx1NGUyYlx1NGUzOFx1NTFlMVx1NGU0NVx1NGU0OFx1NGU1Zlx1NGU1ZVx1NGU4ZVx1NGVhMVx1NTE0MFx1NTIwM1x1NTJmYVx1NTM0M1x1NTNjOVx1NTNlM1x1NTcxZlx1NThlYlx1NTkxNVx1NTkyN1x1NTk3M1x1NWI1MFx1NWI1''@;'; put 'put ''MVx1NWI1M1x1NWJmOFx1NWMwZlx1NWMyMlx1NWMzOFx1NWM3MVx1NWRkZFx1NWRlNVx1NWRmMVx1NWRmMlx1NWRmM1x1NWRmZVx1NWU3Mlx1NWVmZVx1NWYwYlx1NWYxM1x1NjI0ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUxMVx1NGUxMFx1NGUwZFx1NGUy''@;'; put 'put ''ZFx1NGUzMFx1NGUzOVx1NGU0Ylx1NWMzOVx1NGU4OFx1NGU5MVx1NGU5NVx1NGU5Mlx1NGU5NFx1NGVhMlx1NGVjMVx1NGVjMFx1NGVjM1x1NGVjNlx1NGVjN1x1NGVjZFx1NGVjYVx1NGVjYlx1NGVjNFx1NTE0M1x1NTE0MVx1NTE2N1x1NTE2ZFx1NTE2ZVx1NTE2Y1x1NTE5N1x1NTFmNlx1''@;'; put 'put ''NTIwNlx1NTIwN1x1NTIwOFx1NTJmYlx1NTJmZVx1NTJmZlx1NTMxNlx1NTMzOVx1NTM0OFx1NTM0N1x1NTM0NVx1NTM1ZVx1NTM4NFx1NTNjYlx1NTNjYVx1NTNjZFx1NThlY1x1NTkyOVx1NTkyYlx1NTkyYVx1NTkyZFx1NWI1NFx1NWMxMVx1NWMyNFx1NWMzYVx1NWM2Zlx1NWRmNFx1NWU3''@;'; put 'put ''Ylx1NWVmZlx1NWYxNFx1NWYxNVx1NWZjM1x1NjIwOFx1NjIzNlx1NjI0Ylx1NjI0ZVx1NjUyZlx1NjU4N1x1NjU5N1x1NjVhNFx1NjViOVx1NjVlNVx1NjZmMFx1NjcwOFx1NjcyOFx1NmIyMFx1NmI2Mlx1NmI3OVx1NmJjYlx1NmJkNFx1NmJkYlx1NmMwZlx1NmMzNFx1NzA2Ylx1NzIyYVx1''@;'; put 'put ''NzIzNlx1NzIzYlx1NzI0N1x1NzI1OVx1NzI1Ylx1NzJhY1x1NzM4Ylx1NGUxOVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE2NF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTY0XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE2NF1bc11dPTQxOTg0K3MsaFs0MTk4NCtzXT1jWzE2NF1bc10p''@;'; put 'put ''O2ZvcihjWzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUxNlx1NGUxNVx1NGUxNFx1NGUxOFx1NGUzYlx1NGU0ZFx1NGU0Zlx1NGU0ZVx1NGVlNVx1NGVkOFx1NGVkNFx1NGVkNVx1NGVkNlx1NGVkN1x1NGVlM1x1NGVlNFx1''@;'; put 'put ''NGVkOVx1NGVkZVx1NTE0NVx1NTE0NFx1NTE4OVx1NTE4YVx1NTFhY1x1NTFmOVx1NTFmYVx1NTFmOFx1NTIwYVx1NTJhMFx1NTI5Zlx1NTMwNVx1NTMwNlx1NTMxN1x1NTMxZFx1NGVkZlx1NTM0YVx1NTM0OVx1NTM2MVx1NTM2MFx1NTM2Zlx1NTM2ZVx1NTNiYlx1NTNlZlx1NTNlNFx1NTNm''@;'; put 'put ''M1x1NTNlY1x1NTNlZVx1NTNlOVx1NTNlOFx1NTNmY1x1NTNmOFx1NTNmNVx1NTNlYlx1NTNlNlx1NTNlYVx1NTNmMlx1NTNmMVx1NTNmMFx1NTNlNVx1NTNlZFx1NTNmYlx1NTZkYlx1NTZkYVx1NTkxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTkyZVx1NTkz''@;'; put 'put ''MVx1NTk3NFx1NTk3Nlx1NWI1NVx1NWI4M1x1NWMzY1x1NWRlOFx1NWRlN1x1NWRlNlx1NWUwMlx1NWUwM1x1NWU3M1x1NWU3Y1x1NWYwMVx1NWYxOFx1NWYxN1x1NWZjNVx1NjIwYVx1NjI1M1x1NjI1NFx1NjI1Mlx1NjI1MVx1NjVhNVx1NjVlNlx1NjcyZVx1NjcyY1x1NjcyYVx1NjcyYlx1''@;'; put 'put ''NjcyZFx1NmI2M1x1NmJjZFx1NmMxMVx1NmMxMFx1NmMzOFx1NmM0MVx1NmM0MFx1NmMzZVx1NzJhZlx1NzM4NFx1NzM4OVx1NzRkY1x1NzRlNlx1NzUxOFx1NzUxZlx1NzUyOFx1NzUyOVx1NzUzMFx1NzUzMVx1NzUzMlx1NzUzM1x1NzU4Ylx1NzY3ZFx1NzZhZVx1NzZiZlx1NzZlZVx1Nzdk''@;'; put 'put ''Ylx1NzdlMlx1NzdmM1x1NzkzYVx1NzliZVx1N2E3NFx1N2FjYlx1NGUxZVx1NGUxZlx1NGU1Mlx1NGU1M1x1NGU2OVx1NGU5OVx1NGVhNFx1NGVhNlx1NGVhNVx1NGVmZlx1NGYwOVx1NGYxOVx1NGYwYVx1NGYxNVx1NGYwZFx1NGYxMFx1NGYxMVx1NGYwZlx1NGVmMlx1NGVmNlx1NGVmYlx1''@;'; put 'put ''NGVmMFx1NGVmM1x1NGVmZFx1NGYwMVx1NGYwYlx1NTE0OVx1NTE0N1x1NTE0Nlx1NTE0OFx1NTE2OFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE2NV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTY1XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE2NV1bc11dPTQyMjQwK3MsaFs0MjI0MCtz''@;'; put 'put ''XT1jWzE2NV1bc10pO2ZvcihjWzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTE3MVx1NTE4ZFx1NTFiMFx1NTIxN1x1NTIxMVx1NTIxMlx1NTIwZVx1NTIxNlx1NTJhM1x1NTMwOFx1NTMyMVx1NTMyMFx1NTM3MFx1NTM3MVx1''@;'; put 'put ''NTQwOVx1NTQwZlx1NTQwY1x1NTQwYVx1NTQxMFx1NTQwMVx1NTQwYlx1NTQwNFx1NTQxMVx1NTQwZFx1NTQwOFx1NTQwM1x1NTQwZVx1NTQwNlx1NTQxMlx1NTZlMFx1NTZkZVx1NTZkZFx1NTczM1x1NTczMFx1NTcyOFx1NTcyZFx1NTcyY1x1NTcyZlx1NTcyOVx1NTkxOVx1NTkxYVx1NTkz''@;'; put 'put ''N1x1NTkzOFx1NTk4NFx1NTk3OFx1NTk4M1x1NTk3ZFx1NTk3OVx1NTk4Mlx1NTk4MVx1NWI1N1x1NWI1OFx1NWI4N1x1NWI4OFx1NWI4NVx1NWI4OVx1NWJmYVx1NWMxNlx1NWM3OVx1NWRkZVx1NWUwNlx1NWU3Nlx1NWU3NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1NWYwZlx1NWYxYlx1NWZkOVx1NWZkNlx1NjIwZVx1NjIwY1x1NjIwZFx1NjIxMFx1NjI2M1x1NjI1Ylx1NjI1OFx1NjUzNlx1NjVlOVx1NjVlOFx1NjVlY1x1NjVlZFx1NjZmMlx1NjZmM1x1NjcwOVx1NjczZFx1NjczNFx1NjczMVx1NjczNVx1NmIyMVx1NmI2NFx1NmI3Ylx1NmMxNlx1''@;'; put 'put ''NmM1ZFx1NmM1N1x1NmM1OVx1NmM1Zlx1NmM2MFx1NmM1MFx1NmM1NVx1NmM2MVx1NmM1Ylx1NmM0ZFx1NmM0ZVx1NzA3MFx1NzI1Zlx1NzI1ZFx1NzY3ZVx1N2FmOVx1N2M3M1x1N2NmOFx1N2YzNlx1N2Y4YVx1N2ZiZFx1ODAwMVx1ODAwM1x1ODAwY1x1ODAxMlx1ODAzM1x1ODA3Zlx1ODA4''@;'; put 'put ''OVx1ODA4Ylx1ODA4Y1x1ODFlM1x1ODFlYVx1ODFmM1x1ODFmY1x1ODIwY1x1ODIxYlx1ODIxZlx1ODI2ZVx1ODI3Mlx1ODI3ZVx1ODY2Ylx1ODg0MFx1ODg0Y1x1ODg2M1x1ODk3Zlx1OTYyMVx1NGUzMlx1NGVhOFx1NGY0ZFx1NGY0Zlx1NGY0N1x1NGY1N1x1NGY1ZVx1NGYzNFx1NGY1Ylx1''@;'; put 'put ''NGY1NVx1NGYzMFx1NGY1MFx1NGY1MVx1NGYzZFx1NGYzYVx1NGYzOFx1NGY0M1x1NGY1NFx1NGYzY1x1NGY0Nlx1NGY2M1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE2Nl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTY2XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE2Nl1bc11dPTQyNDk2''@;'; put 'put ''K3MsaFs0MjQ5NitzXT1jWzE2Nl1bc10pO2ZvcihjWzE2N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGY1Y1x1NGY2MFx1NGYyZlx1NGY0ZVx1NGYzNlx1NGY1OVx1NGY1ZFx1NGY0OFx1NGY1YVx1NTE0Y1x1NTE0Ylx1NTE0ZFx1''@;'; put 'put ''NTE3NVx1NTFiNlx1NTFiN1x1NTIyNVx1NTIyNFx1NTIyOVx1NTIyYVx1NTIyOFx1NTJhYlx1NTJhOVx1NTJhYVx1NTJhY1x1NTMyM1x1NTM3M1x1NTM3NVx1NTQxZFx1NTQyZFx1NTQxZVx1NTQzZVx1NTQyNlx1NTQ0ZVx1NTQyN1x1NTQ0Nlx1NTQ0M1x1NTQzM1x1NTQ0OFx1NTQ0Mlx1NTQx''@;'; put 'put ''Ylx1NTQyOVx1NTQ0YVx1NTQzOVx1NTQzYlx1NTQzOFx1NTQyZVx1NTQzNVx1NTQzNlx1NTQyMFx1NTQzY1x1NTQ0MFx1NTQzMVx1NTQyYlx1NTQxZlx1NTQyY1x1NTZlYVx1NTZmMFx1NTZlNFx1NTZlYlx1NTc0YVx1NTc1MVx1NTc0MFx1NTc0ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1NTc0N1x1NTc0ZVx1NTczZVx1NTc1MFx1NTc0Zlx1NTczYlx1NThlZlx1NTkzZVx1NTk5ZFx1NTk5Mlx1NTlhOFx1NTk5ZVx1NTlhM1x1NTk5OVx1NTk5Nlx1NTk4ZFx1NTlhNFx1NTk5M1x1NTk4YVx1NTlhNVx1NWI1ZFx1NWI1Y1x1NWI1YVx1NWI1Ylx1NWI4Y1x1''@;'; put 'put ''NWI4Ylx1NWI4Zlx1NWMyY1x1NWM0MFx1NWM0MVx1NWMzZlx1NWMzZVx1NWM5MFx1NWM5MVx1NWM5NFx1NWM4Y1x1NWRlYlx1NWUwY1x1NWU4Zlx1NWU4N1x1NWU4YVx1NWVmN1x1NWYwNFx1NWYxZlx1NWY2NFx1NWY2Mlx1NWY3N1x1NWY3OVx1NWZkOFx1NWZjY1x1NWZkN1x1NWZjZFx1NWZm''@;'; put 'put ''MVx1NWZlYlx1NWZmOFx1NWZlYVx1NjIxMlx1NjIxMVx1NjI4NFx1NjI5N1x1NjI5Nlx1NjI4MFx1NjI3Nlx1NjI4OVx1NjI2ZFx1NjI4YVx1NjI3Y1x1NjI3ZVx1NjI3OVx1NjI3M1x1NjI5Mlx1NjI2Zlx1NjI5OFx1NjI2ZVx1NjI5NVx1NjI5M1x1NjI5MVx1NjI4Nlx1NjUzOVx1NjUzYlx1''@;'; put 'put ''NjUzOFx1NjVmMVx1NjZmNFx1Njc1Zlx1Njc0ZVx1Njc0Zlx1Njc1MFx1Njc1MVx1Njc1Y1x1Njc1Nlx1Njc1ZVx1Njc0OVx1Njc0Nlx1Njc2MFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE2N10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTY3XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE2''@;'; put 'put ''N11bc11dPTQyNzUyK3MsaFs0Mjc1MitzXT1jWzE2N11bc10pO2ZvcihjWzE2OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njc1M1x1Njc1N1x1NmI2NVx1NmJjZlx1NmM0Mlx1NmM1ZVx1NmM5OVx1NmM4MVx1NmM4OFx1NmM4OVx1''@;'; put 'put ''NmM4NVx1NmM5Ylx1NmM2YVx1NmM3YVx1NmM5MFx1NmM3MFx1NmM4Y1x1NmM2OFx1NmM5Nlx1NmM5Mlx1NmM3ZFx1NmM4M1x1NmM3Mlx1NmM3ZVx1NmM3NFx1NmM4Nlx1NmM3Nlx1NmM4ZFx1NmM5NFx1NmM5OFx1NmM4Mlx1NzA3Nlx1NzA3Y1x1NzA3ZFx1NzA3OFx1NzI2Mlx1NzI2MVx1NzI2''@;'; put 'put ''MFx1NzJjNFx1NzJjMlx1NzM5Nlx1NzUyY1x1NzUyYlx1NzUzN1x1NzUzOFx1NzY4Mlx1NzZlZlx1NzdlM1x1NzljMVx1NzljMFx1NzliZlx1N2E3Nlx1N2NmYlx1N2Y1NVx1ODA5Nlx1ODA5M1x1ODA5ZFx1ODA5OFx1ODA5Ylx1ODA5YVx1ODBiMlx1ODI2Zlx1ODI5Mlx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODI4Ylx1ODI4ZFx1ODk4Ylx1ODlkMlx1OGEwMFx1OGMzN1x1OGM0Nlx1OGM1NVx1OGM5ZFx1OGQ2NFx1OGQ3MFx1OGRiM1x1OGVhYlx1OGVjYVx1OGY5Ylx1OGZiMFx1OGZjMlx1OGZjNlx1OGZjNVx1OGZjNFx1NWRlMVx1OTA5MVx1OTBhMlx1''@;'; put 'put ''OTBhYVx1OTBhNlx1OTBhM1x1OTE0OVx1OTFjNlx1OTFjY1x1OTYzMlx1OTYyZVx1OTYzMVx1OTYyYVx1OTYyY1x1NGUyNlx1NGU1Nlx1NGU3M1x1NGU4Ylx1NGU5Ylx1NGU5ZVx1NGVhYlx1NGVhY1x1NGY2Zlx1NGY5ZFx1NGY4ZFx1NGY3M1x1NGY3Zlx1NGY2Y1x1NGY5Ylx1NGY4Ylx1NGY4''@;'; put 'put ''Nlx1NGY4M1x1NGY3MFx1NGY3NVx1NGY4OFx1NGY2OVx1NGY3Ylx1NGY5Nlx1NGY3ZVx1NGY4Zlx1NGY5MVx1NGY3YVx1NTE1NFx1NTE1Mlx1NTE1NVx1NTE2OVx1NTE3N1x1NTE3Nlx1NTE3OFx1NTFiZFx1NTFmZFx1NTIzYlx1NTIzOFx1NTIzN1x1NTIzYVx1NTIzMFx1NTIyZVx1NTIzNlx1''@;'; put 'put ''NTI0MVx1NTJiZVx1NTJiYlx1NTM1Mlx1NTM1NFx1NTM1M1x1NTM1MVx1NTM2Nlx1NTM3N1x1NTM3OFx1NTM3OVx1NTNkNlx1NTNkNFx1NTNkN1x1NTQ3M1x1NTQ3NVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE2OF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTY4XVtzXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoeVtjWzE2OF1bc11dPTQzMDA4K3MsaFs0MzAwOCtzXT1jWzE2OF1bc10pO2ZvcihjWzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQ5Nlx1NTQ3OFx1NTQ5NVx1NTQ4MFx1NTQ3Ylx1NTQ3N1x1NTQ4NFx1NTQ5Mlx1''@;'; put 'put ''NTQ4Nlx1NTQ3Y1x1NTQ5MFx1NTQ3MVx1NTQ3Nlx1NTQ4Y1x1NTQ5YVx1NTQ2Mlx1NTQ2OFx1NTQ4Ylx1NTQ3ZFx1NTQ4ZVx1NTZmYVx1NTc4M1x1NTc3N1x1NTc2YVx1NTc2OVx1NTc2MVx1NTc2Nlx1NTc2NFx1NTc3Y1x1NTkxY1x1NTk0OVx1NTk0N1x1NTk0OFx1NTk0NFx1NTk1NFx1NTli''@;'; put 'put ''ZVx1NTliYlx1NTlkNFx1NTliOVx1NTlhZVx1NTlkMVx1NTljNlx1NTlkMFx1NTljZFx1NTljYlx1NTlkM1x1NTljYVx1NTlhZlx1NTliM1x1NTlkMlx1NTljNVx1NWI1Zlx1NWI2NFx1NWI2M1x1NWI5N1x1NWI5YVx1NWI5OFx1NWI5Y1x1NWI5OVx1NWI5Ylx1NWMxYVx1NWM0OFx1NWM0NVx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWM0Nlx1NWNiN1x1NWNhMVx1NWNiOFx1NWNhOVx1NWNhYlx1NWNiMVx1NWNiM1x1NWUxOFx1NWUxYVx1NWUxNlx1NWUxNVx1NWUxYlx1NWUxMVx1NWU3OFx1NWU5YVx1NWU5N1x1NWU5Y1x1NWU5NVx1NWU5Nlx1NWVmNlx1''@;'; put 'put ''NWYyNlx1NWYyN1x1NWYyOVx1NWY4MFx1NWY4MVx1NWY3Zlx1NWY3Y1x1NWZkZFx1NWZlMFx1NWZmZFx1NWZmNVx1NWZmZlx1NjAwZlx1NjAxNFx1NjAyZlx1NjAzNVx1NjAxNlx1NjAyYVx1NjAxNVx1NjAyMVx1NjAyN1x1NjAyOVx1NjAyYlx1NjAxYlx1NjIxNlx1NjIxNVx1NjIzZlx1NjIz''@;'; put 'put ''ZVx1NjI0MFx1NjI3Zlx1NjJjOVx1NjJjY1x1NjJjNFx1NjJiZlx1NjJjMlx1NjJiOVx1NjJkMlx1NjJkYlx1NjJhYlx1NjJkM1x1NjJkNFx1NjJjYlx1NjJjOFx1NjJhOFx1NjJiZFx1NjJiY1x1NjJkMFx1NjJkOVx1NjJjN1x1NjJjZFx1NjJiNVx1NjJkYVx1NjJiMVx1NjJkOFx1NjJkNlx1''@;'; put 'put ''NjJkN1x1NjJjNlx1NjJhY1x1NjJjZVx1NjUzZVx1NjVhN1x1NjViY1x1NjVmYVx1NjYxNFx1NjYxM1x1NjYwY1x1NjYwNlx1NjYwMlx1NjYwZVx1NjYwMFx1NjYwZlx1NjYxNVx1NjYwYVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE2OV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTY5XVtz''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoeVtjWzE2OV1bc11dPTQzMjY0K3MsaFs0MzI2NCtzXT1jWzE2OV1bc10pO2ZvcihjWzE3MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjYwN1x1NjcwZFx1NjcwYlx1Njc2ZFx1Njc4Ylx1Njc5NVx1''@;'; put 'put ''Njc3MVx1Njc5Y1x1Njc3M1x1Njc3N1x1Njc4N1x1Njc5ZFx1Njc5N1x1Njc2Zlx1Njc3MFx1Njc3Zlx1Njc4OVx1Njc3ZVx1Njc5MFx1Njc3NVx1Njc5YVx1Njc5M1x1Njc3Y1x1Njc2YVx1Njc3Mlx1NmIyM1x1NmI2Nlx1NmI2N1x1NmI3Zlx1NmMxM1x1NmMxYlx1NmNlM1x1NmNlOFx1NmNm''@;'; put 'put ''M1x1NmNiMVx1NmNjY1x1NmNlNVx1NmNiM1x1NmNiZFx1NmNiZVx1NmNiY1x1NmNlMlx1NmNhYlx1NmNkNVx1NmNkM1x1NmNiOFx1NmNjNFx1NmNiOVx1NmNjMVx1NmNhZVx1NmNkN1x1NmNjNVx1NmNmMVx1NmNiZlx1NmNiYlx1NmNlMVx1NmNkYlx1NmNjYVx1NmNhY1x1NmNlZlx1NmNkY1x1''@;'; put 'put ''NmNkNlx1NmNlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzA5NVx1NzA4ZVx1NzA5Mlx1NzA4YVx1NzA5OVx1NzIyY1x1NzIyZFx1NzIzOFx1NzI0OFx1NzI2N1x1NzI2OVx1NzJjMFx1NzJjZVx1NzJkOVx1NzJkN1x1NzJkMFx1NzNhOVx1NzNhOFx1NzM5Zlx1''@;'; put 'put ''NzNhYlx1NzNhNVx1NzUzZFx1NzU5ZFx1NzU5OVx1NzU5YVx1NzY4NFx1NzZjMlx1NzZmMlx1NzZmNFx1NzdlNVx1NzdmZFx1NzkzZVx1Nzk0MFx1Nzk0MVx1NzljOVx1NzljOFx1N2E3YVx1N2E3OVx1N2FmYVx1N2NmZVx1N2Y1NFx1N2Y4Y1x1N2Y4Ylx1ODAwNVx1ODBiYVx1ODBhNVx1ODBh''@;'; put 'put ''Mlx1ODBiMVx1ODBhMVx1ODBhYlx1ODBhOVx1ODBiNFx1ODBhYVx1ODBhZlx1ODFlNVx1ODFmZVx1ODIwZFx1ODJiM1x1ODI5ZFx1ODI5OVx1ODJhZFx1ODJiZFx1ODI5Zlx1ODJiOVx1ODJiMVx1ODJhY1x1ODJhNVx1ODJhZlx1ODJiOFx1ODJhM1x1ODJiMFx1ODJiZVx1ODJiN1x1ODY0ZVx1''@;'; put 'put ''ODY3MVx1NTIxZFx1ODg2OFx1OGVjYlx1OGZjZVx1OGZkNFx1OGZkMVx1OTBiNVx1OTBiOFx1OTBiMVx1OTBiNlx1OTFjN1x1OTFkMVx1OTU3N1x1OTU4MFx1OTYxY1x1OTY0MFx1OTYzZlx1OTYzYlx1OTY0NFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE3MF0ubGVuZ3RoOysrcyk2NTUz''@;'; put 'put ''MyE9PWNbMTcwXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE3MF1bc11dPTQzNTIwK3MsaFs0MzUyMCtzXT1jWzE3MF1bc10pO2ZvcihjWzE3MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY0Mlx1OTZiOVx1OTZlOFx1OTc1Mlx1''@;'; put 'put ''OTc1ZVx1NGU5Zlx1NGVhZFx1NGVhZVx1NGZlMVx1NGZiNVx1NGZhZlx1NGZiZlx1NGZlMFx1NGZkMVx1NGZjZlx1NGZkZFx1NGZjM1x1NGZiNlx1NGZkOFx1NGZkZlx1NGZjYVx1NGZkN1x1NGZhZVx1NGZkMFx1NGZjNFx1NGZjMlx1NGZkYVx1NGZjZVx1NGZkZVx1NGZiN1x1NTE1N1x1NTE5''@;'; put 'put ''Mlx1NTE5MVx1NTFhMFx1NTI0ZVx1NTI0M1x1NTI0YVx1NTI0ZFx1NTI0Y1x1NTI0Ylx1NTI0N1x1NTJjN1x1NTJjOVx1NTJjM1x1NTJjMVx1NTMwZFx1NTM1N1x1NTM3Ylx1NTM5YVx1NTNkYlx1NTRhY1x1NTRjMFx1NTRhOFx1NTRjZVx1NTRjOVx1NTRiOFx1NTRhNlx1NTRiM1x1NTRjN1x1''@;'; put 'put ''NTRjMlx1NTRiZFx1NTRhYVx1NTRjMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjNFx1NTRjOFx1NTRhZlx1NTRhYlx1NTRiMVx1NTRiYlx1NTRhOVx1NTRhN1x1NTRiZlx1NTZmZlx1NTc4Mlx1NTc4Ylx1NTdhMFx1NTdhM1x1NTdhMlx1NTdjZVx1NTdhZVx1''@;'; put 'put ''NTc5M1x1NTk1NVx1NTk1MVx1NTk0Zlx1NTk0ZVx1NTk1MFx1NTlkY1x1NTlkOFx1NTlmZlx1NTllM1x1NTllOFx1NWEwM1x1NTllNVx1NTllYVx1NTlkYVx1NTllNlx1NWEwMVx1NTlmYlx1NWI2OVx1NWJhM1x1NWJhNlx1NWJhNFx1NWJhMlx1NWJhNVx1NWMwMVx1NWM0ZVx1NWM0Zlx1NWM0''@;'; put 'put ''ZFx1NWM0Ylx1NWNkOVx1NWNkMlx1NWRmN1x1NWUxZFx1NWUyNVx1NWUxZlx1NWU3ZFx1NWVhMFx1NWVhNlx1NWVmYVx1NWYwOFx1NWYyZFx1NWY2NVx1NWY4OFx1NWY4NVx1NWY4YVx1NWY4Ylx1NWY4N1x1NWY4Y1x1NWY4OVx1NjAxMlx1NjAxZFx1NjAyMFx1NjAyNVx1NjAwZVx1NjAyOFx1''@;'; put 'put ''NjA0ZFx1NjA3MFx1NjA2OFx1NjA2Mlx1NjA0Nlx1NjA0M1x1NjA2Y1x1NjA2Ylx1NjA2YVx1NjA2NFx1NjI0MVx1NjJkY1x1NjMxNlx1NjMwOVx1NjJmY1x1NjJlZFx1NjMwMVx1NjJlZVx1NjJmZFx1NjMwN1x1NjJmMVx1NjJmN1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE3MV0ubGVu''@;'; put 'put ''Z3RoOysrcyk2NTUzMyE9PWNbMTcxXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE3MV1bc11dPTQzNzc2K3MsaFs0Mzc3NitzXT1jWzE3MV1bc10pO2ZvcihjWzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjJlZlx1NjJlY1x1''@;'; put 'put ''NjJmZVx1NjJmNFx1NjMxMVx1NjMwMlx1NjUzZlx1NjU0NVx1NjVhYlx1NjViZFx1NjVlMlx1NjYyNVx1NjYyZFx1NjYyMFx1NjYyN1x1NjYyZlx1NjYxZlx1NjYyOFx1NjYzMVx1NjYyNFx1NjZmN1x1NjdmZlx1NjdkM1x1NjdmMVx1NjdkNFx1NjdkMFx1NjdlY1x1NjdiNlx1NjdhZlx1Njdm''@;'; put 'put ''NVx1NjdlOVx1NjdlZlx1NjdjNFx1NjdkMVx1NjdiNFx1NjdkYVx1NjdlNVx1NjdiOFx1NjdjZlx1NjdkZVx1NjdmM1x1NjdiMFx1NjdkOVx1NjdlMlx1NjdkZFx1NjdkMlx1NmI2YVx1NmI4M1x1NmI4Nlx1NmJiNVx1NmJkMlx1NmJkN1x1NmMxZlx1NmNjOVx1NmQwYlx1NmQzMlx1NmQyYVx1''@;'; put 'put ''NmQ0MVx1NmQyNVx1NmQwY1x1NmQzMVx1NmQxZVx1NmQxN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQzYlx1NmQzZFx1NmQzZVx1NmQzNlx1NmQxYlx1NmNmNVx1NmQzOVx1NmQyN1x1NmQzOFx1NmQyOVx1NmQyZVx1NmQzNVx1NmQwZVx1NmQyYlx1NzBhYlx1''@;'; put 'put ''NzBiYVx1NzBiM1x1NzBhY1x1NzBhZlx1NzBhZFx1NzBiOFx1NzBhZVx1NzBhNFx1NzIzMFx1NzI3Mlx1NzI2Zlx1NzI3NFx1NzJlOVx1NzJlMFx1NzJlMVx1NzNiN1x1NzNjYVx1NzNiYlx1NzNiMlx1NzNjZFx1NzNjMFx1NzNiM1x1NzUxYVx1NzUyZFx1NzU0Zlx1NzU0Y1x1NzU0ZVx1NzU0''@;'; put 'put ''Ylx1NzVhYlx1NzVhNFx1NzVhNVx1NzVhMlx1NzVhM1x1NzY3OFx1NzY4Nlx1NzY4N1x1NzY4OFx1NzZjOFx1NzZjNlx1NzZjM1x1NzZjNVx1NzcwMVx1NzZmOVx1NzZmOFx1NzcwOVx1NzcwYlx1NzZmZVx1NzZmY1x1NzcwN1x1NzdkY1x1NzgwMlx1NzgxNFx1NzgwY1x1NzgwZFx1Nzk0Nlx1''@;'; put 'put ''Nzk0OVx1Nzk0OFx1Nzk0N1x1NzliOVx1NzliYVx1NzlkMVx1NzlkMlx1NzljYlx1N2E3Zlx1N2E4MVx1N2FmZlx1N2FmZFx1N2M3ZFx1N2QwMlx1N2QwNVx1N2QwMFx1N2QwOVx1N2QwN1x1N2QwNFx1N2QwNlx1N2YzOFx1N2Y4ZVx1N2ZiZlx1ODAwNFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtz''@;'; put 'put ''IT1jWzE3Ml0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTcyXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE3Ml1bc11dPTQ0MDMyK3MsaFs0NDAzMitzXT1jWzE3Ml1bc10pO2ZvcihjWzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ODAxMFx1ODAwZFx1ODAxMVx1ODAzNlx1ODBkNlx1ODBlNVx1ODBkYVx1ODBjM1x1ODBjNFx1ODBjY1x1ODBlMVx1ODBkYlx1ODBjZVx1ODBkZVx1ODBlNFx1ODBkZFx1ODFmNFx1ODIyMlx1ODJlN1x1ODMwM1x1ODMwNVx1ODJlM1x1ODJkYlx1ODJlNlx1ODMwNFx1ODJlNVx1ODMwMlx1ODMw''@;'; put 'put ''OVx1ODJkMlx1ODJkN1x1ODJmMVx1ODMwMVx1ODJkY1x1ODJkNFx1ODJkMVx1ODJkZVx1ODJkM1x1ODJkZlx1ODJlZlx1ODMwNlx1ODY1MFx1ODY3OVx1ODY3Ylx1ODY3YVx1ODg0ZFx1ODg2Ylx1ODk4MVx1ODlkNFx1OGEwOFx1OGEwMlx1OGEwM1x1OGM5ZVx1OGNhMFx1OGQ3NFx1OGQ3M1x1''@;'; put 'put ''OGRiNFx1OGVjZFx1OGVjY1x1OGZmMFx1OGZlNlx1OGZlMlx1OGZlYVx1OGZlNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGZlZFx1OGZlYlx1OGZlNFx1OGZlOFx1OTBjYVx1OTBjZVx1OTBjMVx1OTBjM1x1OTE0Ylx1OTE0YVx1OTFjZFx1OTU4Mlx1OTY1MFx1''@;'; put 'put ''OTY0Ylx1OTY0Y1x1OTY0ZFx1OTc2Mlx1OTc2OVx1OTdjYlx1OTdlZFx1OTdmM1x1OTgwMVx1OThhOFx1OThkYlx1OThkZlx1OTk5Nlx1OTk5OVx1NGU1OFx1NGViM1x1NTAwY1x1NTAwZFx1NTAyM1x1NGZlZlx1NTAyNlx1NTAyNVx1NGZmOFx1NTAyOVx1NTAxNlx1NTAwNlx1NTAzY1x1NTAx''@;'; put 'put ''Zlx1NTAxYVx1NTAxMlx1NTAxMVx1NGZmYVx1NTAwMFx1NTAxNFx1NTAyOFx1NGZmMVx1NTAyMVx1NTAwYlx1NTAxOVx1NTAxOFx1NGZmM1x1NGZlZVx1NTAyZFx1NTAyYVx1NGZmZVx1NTAyYlx1NTAwOVx1NTE3Y1x1NTFhNFx1NTFhNVx1NTFhMlx1NTFjZFx1NTFjY1x1NTFjNlx1NTFjYlx1''@;'; put 'put ''NTI1Nlx1NTI1Y1x1NTI1NFx1NTI1Ylx1NTI1ZFx1NTMyYVx1NTM3Zlx1NTM5Zlx1NTM5ZFx1NTNkZlx1NTRlOFx1NTUxMFx1NTUwMVx1NTUzN1x1NTRmY1x1NTRlNVx1NTRmMlx1NTUwNlx1NTRmYVx1NTUxNFx1NTRlOVx1NTRlZFx1NTRlMVx1NTUwOVx1NTRlZVx1NTRlYVx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLHM9MDtzIT1jWzE3M10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTczXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE3M11bc11dPTQ0Mjg4K3MsaFs0NDI4OCtzXT1jWzE3M11bc10pO2ZvcihjWzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1NTRlNlx1NTUyN1x1NTUwN1x1NTRmZFx1NTUwZlx1NTcwM1x1NTcwNFx1NTdjMlx1NTdkNFx1NTdjYlx1NTdjM1x1NTgwOVx1NTkwZlx1NTk1N1x1NTk1OFx1NTk1YVx1NWExMVx1NWExOFx1NWExY1x1NWExZlx1NWExYlx1NWExM1x1NTllY1x1NWEyMFx1NWEyM1x1NWEy''@;'; put 'put ''OVx1NWEyNVx1NWEwY1x1NWEwOVx1NWI2Ylx1NWM1OFx1NWJiMFx1NWJiM1x1NWJiNlx1NWJiNFx1NWJhZVx1NWJiNVx1NWJiOVx1NWJiOFx1NWMwNFx1NWM1MVx1NWM1NVx1NWM1MFx1NWNlZFx1NWNmZFx1NWNmYlx1NWNlYVx1NWNlOFx1NWNmMFx1NWNmNlx1NWQwMVx1NWNmNFx1NWRlZVx1''@;'; put 'put ''NWUyZFx1NWUyYlx1NWVhYlx1NWVhZFx1NWVhN1x1NWYzMVx1NWY5Mlx1NWY5MVx1NWY5MFx1NjA1OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjA2M1x1NjA2NVx1NjA1MFx1NjA1NVx1NjA2ZFx1NjA2OVx1NjA2Zlx1NjA4NFx1NjA5Zlx1NjA5YVx1NjA4ZFx1''@;'; put 'put ''NjA5NFx1NjA4Y1x1NjA4NVx1NjA5Nlx1NjI0N1x1NjJmM1x1NjMwOFx1NjJmZlx1NjM0ZVx1NjMzZVx1NjMyZlx1NjM1NVx1NjM0Mlx1NjM0Nlx1NjM0Zlx1NjM0OVx1NjMzYVx1NjM1MFx1NjMzZFx1NjMyYVx1NjMyYlx1NjMyOFx1NjM0ZFx1NjM0Y1x1NjU0OFx1NjU0OVx1NjU5OVx1NjVj''@;'; put 'put ''MVx1NjVjNVx1NjY0Mlx1NjY0OVx1NjY0Zlx1NjY0M1x1NjY1Mlx1NjY0Y1x1NjY0NVx1NjY0MVx1NjZmOFx1NjcxNFx1NjcxNVx1NjcxN1x1NjgyMVx1NjgzOFx1Njg0OFx1Njg0Nlx1Njg1M1x1NjgzOVx1Njg0Mlx1Njg1NFx1NjgyOVx1NjhiM1x1NjgxN1x1Njg0Y1x1Njg1MVx1NjgzZFx1''@;'; put 'put ''NjdmNFx1Njg1MFx1Njg0MFx1NjgzY1x1Njg0M1x1NjgyYVx1Njg0NVx1NjgxM1x1NjgxOFx1Njg0MVx1NmI4YVx1NmI4OVx1NmJiN1x1NmMyM1x1NmMyN1x1NmMyOFx1NmMyNlx1NmMyNFx1NmNmMFx1NmQ2YVx1NmQ5NVx1NmQ4OFx1NmQ4N1x1NmQ2Nlx1NmQ3OFx1NmQ3N1x1NmQ1OVx1NmQ5''@;'; put 'put ''M1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE3NF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTc0XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE3NF1bc11dPTQ0NTQ0K3MsaFs0NDU0NCtzXT1jWzE3NF1bc10pO2ZvcihjWzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ2Y1x1NmQ4OVx1NmQ2ZVx1NmQ1YVx1NmQ3NFx1NmQ2OVx1NmQ4Y1x1NmQ4YVx1NmQ3OVx1NmQ4NVx1NmQ2NVx1NmQ5NFx1NzBjYVx1NzBkOFx1NzBlNFx1NzBkOVx1NzBjOFx1NzBjZlx1NzIzOVx1NzI3OVx1NzJmY1x1NzJmOVx1NzJmZFx1NzJm''@;'; put 'put ''OFx1NzJmN1x1NzM4Nlx1NzNlZFx1NzQwOVx1NzNlZVx1NzNlMFx1NzNlYVx1NzNkZVx1NzU1NFx1NzU1ZFx1NzU1Y1x1NzU1YVx1NzU1OVx1NzViZVx1NzVjNVx1NzVjN1x1NzViMlx1NzViM1x1NzViZFx1NzViY1x1NzViOVx1NzVjMlx1NzViOFx1NzY4Ylx1NzZiMFx1NzZjYVx1NzZjZFx1''@;'; put 'put ''NzZjZVx1NzcyOVx1NzcxZlx1NzcyMFx1NzcyOFx1NzdlOVx1NzgzMFx1NzgyN1x1NzgzOFx1NzgxZFx1NzgzNFx1NzgzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzgyNVx1NzgyZFx1NzgyMFx1NzgxZlx1NzgzMlx1Nzk1NVx1Nzk1MFx1Nzk2MFx1Nzk1Zlx1''@;'; put 'put ''Nzk1Nlx1Nzk1ZVx1Nzk1ZFx1Nzk1N1x1Nzk1YVx1NzllNFx1NzllM1x1NzllN1x1NzlkZlx1NzllNlx1NzllOVx1NzlkOFx1N2E4NFx1N2E4OFx1N2FkOVx1N2IwNlx1N2IxMVx1N2M4OVx1N2QyMVx1N2QxN1x1N2QwYlx1N2QwYVx1N2QyMFx1N2QyMlx1N2QxNFx1N2QxMFx1N2QxNVx1N2Qx''@;'; put 'put ''YVx1N2QxY1x1N2QwZFx1N2QxOVx1N2QxYlx1N2YzYVx1N2Y1Zlx1N2Y5NFx1N2ZjNVx1N2ZjMVx1ODAwNlx1ODAxOFx1ODAxNVx1ODAxOVx1ODAxN1x1ODAzZFx1ODAzZlx1ODBmMVx1ODEwMlx1ODBmMFx1ODEwNVx1ODBlZFx1ODBmNFx1ODEwNlx1ODBmOFx1ODBmM1x1ODEwOFx1ODBmZFx1''@;'; put 'put ''ODEwYVx1ODBmY1x1ODBlZlx1ODFlZFx1ODFlY1x1ODIwMFx1ODIxMFx1ODIyYVx1ODIyYlx1ODIyOFx1ODIyY1x1ODJiYlx1ODMyYlx1ODM1Mlx1ODM1NFx1ODM0YVx1ODMzOFx1ODM1MFx1ODM0OVx1ODMzNVx1ODMzNFx1ODM0Zlx1ODMzMlx1ODMzOVx1ODMzNlx1ODMxN1x1ODM0MFx1ODMz''@;'; put 'put ''MVx1ODMyOFx1ODM0M1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE3NV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTc1XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE3NV1bc11dPTQ0ODAwK3MsaFs0NDgwMCtzXT1jWzE3NV1bc10pO2ZvcihjWzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODY1NFx1ODY4YVx1ODZhYVx1ODY5M1x1ODZhNFx1ODZhOVx1ODY4Y1x1ODZhM1x1ODY5Y1x1ODg3MFx1ODg3N1x1ODg4MVx1ODg4Mlx1ODg3ZFx1ODg3OVx1OGExOFx1OGExMFx1OGEwZVx1OGEwY1x1OGExNVx1OGEwYVx1OGEx''@;'; put 'put ''N1x1OGExM1x1OGExNlx1OGEwZlx1OGExMVx1OGM0OFx1OGM3YVx1OGM3OVx1OGNhMVx1OGNhMlx1OGQ3N1x1OGVhY1x1OGVkMlx1OGVkNFx1OGVjZlx1OGZiMVx1OTAwMVx1OTAwNlx1OGZmN1x1OTAwMFx1OGZmYVx1OGZmNFx1OTAwM1x1OGZmZFx1OTAwNVx1OGZmOFx1OTA5NVx1OTBlMVx1''@;'; put 'put ''OTBkZFx1OTBlMlx1OTE1Mlx1OTE0ZFx1OTE0Y1x1OTFkOFx1OTFkZFx1OTFkN1x1OTFkY1x1OTFkOVx1OTU4M1x1OTY2Mlx1OTY2M1x1OTY2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY1Ylx1OTY1ZFx1OTY2NFx1OTY1OFx1OTY1ZVx1OTZiYlx1OThlMlx1''@;'; put 'put ''OTlhY1x1OWFhOFx1OWFkOFx1OWIyNVx1OWIzMlx1OWIzY1x1NGU3ZVx1NTA3YVx1NTA3ZFx1NTA1Y1x1NTA0N1x1NTA0M1x1NTA0Y1x1NTA1YVx1NTA0OVx1NTA2NVx1NTA3Nlx1NTA0ZVx1NTA1NVx1NTA3NVx1NTA3NFx1NTA3N1x1NTA0Zlx1NTAwZlx1NTA2Zlx1NTA2ZFx1NTE1Y1x1NTE5''@;'; put 'put ''NVx1NTFmMFx1NTI2YVx1NTI2Zlx1NTJkMlx1NTJkOVx1NTJkOFx1NTJkNVx1NTMxMFx1NTMwZlx1NTMxOVx1NTMzZlx1NTM0MFx1NTMzZVx1NTNjM1x1NjZmY1x1NTU0Nlx1NTU2YVx1NTU2Nlx1NTU0NFx1NTU1ZVx1NTU2MVx1NTU0M1x1NTU0YVx1NTUzMVx1NTU1Nlx1NTU0Zlx1NTU1NVx1''@;'; put 'put ''NTUyZlx1NTU2NFx1NTUzOFx1NTUyZVx1NTU1Y1x1NTUyY1x1NTU2M1x1NTUzM1x1NTU0MVx1NTU1N1x1NTcwOFx1NTcwYlx1NTcwOVx1NTdkZlx1NTgwNVx1NTgwYVx1NTgwNlx1NTdlMFx1NTdlNFx1NTdmYVx1NTgwMlx1NTgzNVx1NTdmN1x1NTdmOVx1NTkyMFx1NTk2Mlx1NWEzNlx1NWE0''@;'; put 'put ''MVx1NWE0OVx1NWE2Nlx1NWE2YVx1NWE0MFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE3Nl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTc2XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE3Nl1bc11dPTQ1MDU2K3MsaFs0NTA1NitzXT1jWzE3Nl1bc10pO2ZvcihjWzE3N109Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWEzY1x1NWE2Mlx1NWE1YVx1NWE0Nlx1NWE0YVx1NWI3MFx1NWJjN1x1NWJjNVx1NWJjNFx1NWJjMlx1NWJiZlx1NWJjNlx1NWMwOVx1NWMwOFx1NWMwN1x1NWM2MFx1NWM1Y1x1NWM1ZFx1NWQwN1x1NWQw''@;'; put 'put ''Nlx1NWQwZVx1NWQxYlx1NWQxNlx1NWQyMlx1NWQxMVx1NWQyOVx1NWQxNFx1NWQxOVx1NWQyNFx1NWQyN1x1NWQxN1x1NWRlMlx1NWUzOFx1NWUzNlx1NWUzM1x1NWUzN1x1NWViN1x1NWViOFx1NWViNlx1NWViNVx1NWViZVx1NWYzNVx1NWYzN1x1NWY1N1x1NWY2Y1x1NWY2OVx1NWY2Ylx1''@;'; put 'put ''NWY5N1x1NWY5OVx1NWY5ZVx1NWY5OFx1NWZhMVx1NWZhMFx1NWY5Y1x1NjA3Zlx1NjBhM1x1NjA4OVx1NjBhMFx1NjBhOFx1NjBjYlx1NjBiNFx1NjBlNlx1NjBiZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjBjNVx1NjBiYlx1NjBiNVx1NjBkY1x1NjBiY1x1''@;'; put 'put ''NjBkOFx1NjBkNVx1NjBjNlx1NjBkZlx1NjBiOFx1NjBkYVx1NjBjN1x1NjIxYVx1NjIxYlx1NjI0OFx1NjNhMFx1NjNhN1x1NjM3Mlx1NjM5Nlx1NjNhMlx1NjNhNVx1NjM3N1x1NjM2N1x1NjM5OFx1NjNhYVx1NjM3MVx1NjNhOVx1NjM4OVx1NjM4M1x1NjM5Ylx1NjM2Ylx1NjNhOFx1NjM4''@;'; put 'put ''NFx1NjM4OFx1NjM5OVx1NjNhMVx1NjNhY1x1NjM5Mlx1NjM4Zlx1NjM4MFx1NjM3Ylx1NjM2OVx1NjM2OFx1NjM3YVx1NjU1ZFx1NjU1Nlx1NjU1MVx1NjU1OVx1NjU1N1x1NTU1Zlx1NjU0Zlx1NjU1OFx1NjU1NVx1NjU1NFx1NjU5Y1x1NjU5Ylx1NjVhY1x1NjVjZlx1NjVjYlx1NjVjY1x1''@;'; put 'put ''NjVjZVx1NjY1ZFx1NjY1YVx1NjY2NFx1NjY2OFx1NjY2Nlx1NjY1ZVx1NjZmOVx1NTJkN1x1NjcxYlx1Njg4MVx1NjhhZlx1NjhhMlx1Njg5M1x1NjhiNVx1Njg3Zlx1Njg3Nlx1NjhiMVx1NjhhN1x1Njg5N1x1NjhiMFx1Njg4M1x1NjhjNFx1NjhhZFx1Njg4Nlx1Njg4NVx1Njg5NFx1Njg5''@;'; put 'put ''ZFx1NjhhOFx1Njg5Zlx1NjhhMVx1Njg4Mlx1NmIzMlx1NmJiYVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE3N10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTc3XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE3N11bc11dPTQ1MzEyK3MsaFs0NTMxMitzXT1jWzE3N11bc10pO2ZvcihjWzE3''@;'; put 'put ''OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJlYlx1NmJlY1x1NmMyYlx1NmQ4ZVx1NmRiY1x1NmRmM1x1NmRkOVx1NmRiMlx1NmRlMVx1NmRjY1x1NmRlNFx1NmRmYlx1NmRmYVx1NmUwNVx1NmRjN1x1NmRjYlx1NmRhZlx1NmRk''@;'; put 'put ''MVx1NmRhZVx1NmRkZVx1NmRmOVx1NmRiOFx1NmRmN1x1NmRmNVx1NmRjNVx1NmRkMlx1NmUxYVx1NmRiNVx1NmRkYVx1NmRlYlx1NmRkOFx1NmRlYVx1NmRmMVx1NmRlZVx1NmRlOFx1NmRjNlx1NmRjNFx1NmRhYVx1NmRlY1x1NmRiZlx1NmRlNlx1NzBmOVx1NzEwOVx1NzEwYVx1NzBmZFx1''@;'; put 'put ''NzBlZlx1NzIzZFx1NzI3ZFx1NzI4MVx1NzMxY1x1NzMxYlx1NzMxNlx1NzMxM1x1NzMxOVx1NzM4N1x1NzQwNVx1NzQwYVx1NzQwM1x1NzQwNlx1NzNmZVx1NzQwZFx1NzRlMFx1NzRmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRmN1x1NzUxY1x1NzUyMlx1''@;'; put 'put ''NzU2NVx1NzU2Nlx1NzU2Mlx1NzU3MFx1NzU4Zlx1NzVkNFx1NzVkNVx1NzViNVx1NzVjYVx1NzVjZFx1NzY4ZVx1NzZkNFx1NzZkMlx1NzZkYlx1NzczN1x1NzczZVx1NzczY1x1NzczNlx1NzczOFx1NzczYVx1Nzg2Ylx1Nzg0M1x1Nzg0ZVx1Nzk2NVx1Nzk2OFx1Nzk2ZFx1NzlmYlx1N2E5''@;'; put 'put ''Mlx1N2E5NVx1N2IyMFx1N2IyOFx1N2IxYlx1N2IyY1x1N2IyNlx1N2IxOVx1N2IxZVx1N2IyZVx1N2M5Mlx1N2M5N1x1N2M5NVx1N2Q0Nlx1N2Q0M1x1N2Q3MVx1N2QyZVx1N2QzOVx1N2QzY1x1N2Q0MFx1N2QzMFx1N2QzM1x1N2Q0NFx1N2QyZlx1N2Q0Mlx1N2QzMlx1N2QzMVx1N2YzZFx1''@;'; put 'put ''N2Y5ZVx1N2Y5YVx1N2ZjY1x1N2ZjZVx1N2ZkMlx1ODAxY1x1ODA0YVx1ODA0Nlx1ODEyZlx1ODExNlx1ODEyM1x1ODEyYlx1ODEyOVx1ODEzMFx1ODEyNFx1ODIwMlx1ODIzNVx1ODIzN1x1ODIzNlx1ODIzOVx1ODM4ZVx1ODM5ZVx1ODM5OFx1ODM3OFx1ODNhMlx1ODM5Nlx1ODNiZFx1ODNh''@;'; put 'put ''Ylx1ODM5Mlx1ODM4YVx1ODM5M1x1ODM4OVx1ODNhMFx1ODM3N1x1ODM3Ylx1ODM3Y1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE3OF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTc4XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE3OF1bc11dPTQ1NTY4K3MsaFs0NTU2OCtzXT1jWzE3OF1b''@;'; put 'put ''c10pO2ZvcihjWzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM4Nlx1ODNhN1x1ODY1NVx1NWY2YVx1ODZjN1x1ODZjMFx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjNlx1ODZjYlx1ODZiMVx1ODZhZlx1ODZjOVx1ODg1M1x1ODg5''@;'; put 'put ''ZVx1ODg4OFx1ODhhYlx1ODg5Mlx1ODg5Nlx1ODg4ZFx1ODg4Ylx1ODk5M1x1ODk4Zlx1OGEyYVx1OGExZFx1OGEyM1x1OGEyNVx1OGEzMVx1OGEyZFx1OGExZlx1OGExYlx1OGEyMlx1OGM0OVx1OGM1YVx1OGNhOVx1OGNhY1x1OGNhYlx1OGNhOFx1OGNhYVx1OGNhN1x1OGQ2N1x1OGQ2Nlx1''@;'; put 'put ''OGRiZVx1OGRiYVx1OGVkYlx1OGVkZlx1OTAxOVx1OTAwZFx1OTAxYVx1OTAxN1x1OTAyM1x1OTAxZlx1OTAxZFx1OTAxMFx1OTAxNVx1OTAxZVx1OTAyMFx1OTAwZlx1OTAyMlx1OTAxNlx1OTAxYlx1OTAxNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTBlOFx1''@;'; put 'put ''OTBlZFx1OTBmZFx1OTE1N1x1OTFjZVx1OTFmNVx1OTFlNlx1OTFlM1x1OTFlN1x1OTFlZFx1OTFlOVx1OTU4OVx1OTY2YVx1OTY3NVx1OTY3M1x1OTY3OFx1OTY3MFx1OTY3NFx1OTY3Nlx1OTY3N1x1OTY2Y1x1OTZjMFx1OTZlYVx1OTZlOVx1N2FlMFx1N2FkZlx1OTgwMlx1OTgwM1x1OWI1''@;'; put 'put ''YVx1OWNlNVx1OWU3NVx1OWU3Zlx1OWVhNVx1OWViYlx1NTBhMlx1NTA4ZFx1NTA4NVx1NTA5OVx1NTA5MVx1NTA4MFx1NTA5Nlx1NTA5OFx1NTA5YVx1NjcwMFx1NTFmMVx1NTI3Mlx1NTI3NFx1NTI3NVx1NTI2OVx1NTJkZVx1NTJkZFx1NTJkYlx1NTM1YVx1NTNhNVx1NTU3Ylx1NTU4MFx1''@;'; put 'put ''NTVhN1x1NTU3Y1x1NTU4YVx1NTU5ZFx1NTU5OFx1NTU4Mlx1NTU5Y1x1NTVhYVx1NTU5NFx1NTU4N1x1NTU4Ylx1NTU4M1x1NTViM1x1NTVhZVx1NTU5Zlx1NTUzZVx1NTViMlx1NTU5YVx1NTViYlx1NTVhY1x1NTViMVx1NTU3ZVx1NTU4OVx1NTVhYlx1NTU5OVx1NTcwZFx1NTgyZlx1NTgy''@;'; put 'put ''YVx1NTgzNFx1NTgyNFx1NTgzMFx1NTgzMVx1NTgyMVx1NTgxZFx1NTgyMFx1NThmOVx1NThmYVx1NTk2MFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE3OV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTc5XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE3OV1bc11dPTQ1ODI0K3MsaFs0NTgy''@;'; put 'put ''NCtzXT1jWzE3OV1bc10pO2ZvcihjWzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWE3N1x1NWE5YVx1NWE3Zlx1NWE5Mlx1NWE5Ylx1NWFhN1x1NWI3M1x1NWI3MVx1NWJkMlx1NWJjY1x1NWJkM1x1NWJkMFx1NWMwYVx1NWMw''@;'; put 'put ''Ylx1NWMzMVx1NWQ0Y1x1NWQ1MFx1NWQzNFx1NWQ0N1x1NWRmZFx1NWU0NVx1NWUzZFx1NWU0MFx1NWU0M1x1NWU3ZVx1NWVjYVx1NWVjMVx1NWVjMlx1NWVjNFx1NWYzY1x1NWY2ZFx1NWZhOVx1NWZhYVx1NWZhOFx1NjBkMVx1NjBlMVx1NjBiMlx1NjBiNlx1NjBlMFx1NjExY1x1NjEyM1x1''@;'; put 'put ''NjBmYVx1NjExNVx1NjBmMFx1NjBmYlx1NjBmNFx1NjE2OFx1NjBmMVx1NjEwZVx1NjBmNlx1NjEwOVx1NjEwMFx1NjExMlx1NjIxZlx1NjI0OVx1NjNhM1x1NjM4Y1x1NjNjZlx1NjNjMFx1NjNlOVx1NjNjOVx1NjNjNlx1NjNjZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1NjNkMlx1NjNlM1x1NjNkMFx1NjNlMVx1NjNkNlx1NjNlZFx1NjNlZVx1NjM3Nlx1NjNmNFx1NjNlYVx1NjNkYlx1NjQ1Mlx1NjNkYVx1NjNmOVx1NjU1ZVx1NjU2Nlx1NjU2Mlx1NjU2M1x1NjU5MVx1NjU5MFx1NjVhZlx1NjY2ZVx1NjY3MFx1NjY3NFx1NjY3Nlx1NjY2Zlx1NjY5''@;'; put 'put ''MVx1NjY3YVx1NjY3ZVx1NjY3N1x1NjZmZVx1NjZmZlx1NjcxZlx1NjcxZFx1NjhmYVx1NjhkNVx1NjhlMFx1NjhkOFx1NjhkN1x1NjkwNVx1NjhkZlx1NjhmNVx1NjhlZVx1NjhlN1x1NjhmOVx1NjhkMlx1NjhmMlx1NjhlM1x1NjhjYlx1NjhjZFx1NjkwZFx1NjkxMlx1NjkwZVx1NjhjOVx1''@;'; put 'put ''NjhkYVx1Njk2ZVx1NjhmYlx1NmIzZVx1NmIzYVx1NmIzZFx1NmI5OFx1NmI5Nlx1NmJiY1x1NmJlZlx1NmMyZVx1NmMyZlx1NmMyY1x1NmUyZlx1NmUzOFx1NmU1NFx1NmUyMVx1NmUzMlx1NmU2N1x1NmU0YVx1NmUyMFx1NmUyNVx1NmUyM1x1NmUxYlx1NmU1Ylx1NmU1OFx1NmUyNFx1NmU1''@;'; put 'put ''Nlx1NmU2ZVx1NmUyZFx1NmUyNlx1NmU2Zlx1NmUzNFx1NmU0ZFx1NmUzYVx1NmUyY1x1NmU0M1x1NmUxZFx1NmUzZVx1NmVjYlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE4MF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTgwXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE4MF1bc11dPTQ2''@;'; put 'put ''MDgwK3MsaFs0NjA4MCtzXT1jWzE4MF1bc10pO2ZvcihjWzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmU4OVx1NmUxOVx1NmU0ZVx1NmU2M1x1NmU0NFx1NmU3Mlx1NmU2OVx1NmU1Zlx1NzExOVx1NzExYVx1NzEyNlx1NzEz''@;'; put 'put ''MFx1NzEyMVx1NzEzNlx1NzE2ZVx1NzExY1x1NzI0Y1x1NzI4NFx1NzI4MFx1NzMzNlx1NzMyNVx1NzMzNFx1NzMyOVx1NzQzYVx1NzQyYVx1NzQzM1x1NzQyMlx1NzQyNVx1NzQzNVx1NzQzNlx1NzQzNFx1NzQyZlx1NzQxYlx1NzQyNlx1NzQyOFx1NzUyNVx1NzUyNlx1NzU2Ylx1NzU2YVx1''@;'; put 'put ''NzVlMlx1NzVkYlx1NzVlM1x1NzVkOVx1NzVkOFx1NzVkZVx1NzVlMFx1NzY3Ylx1NzY3Y1x1NzY5Nlx1NzY5M1x1NzZiNFx1NzZkY1x1Nzc0Zlx1NzdlZFx1Nzg1ZFx1Nzg2Y1x1Nzg2Zlx1N2EwZFx1N2EwOFx1N2EwYlx1N2EwNVx1N2EwMFx1N2E5OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E5N1x1N2E5Nlx1N2FlNVx1N2FlM1x1N2I0OVx1N2I1Nlx1N2I0Nlx1N2I1MFx1N2I1Mlx1N2I1NFx1N2I0ZFx1N2I0Ylx1N2I0Zlx1N2I1MVx1N2M5Zlx1N2NhNVx1N2Q1ZVx1N2Q1MFx1N2Q2OFx1N2Q1NVx1N2QyYlx1N2Q2ZVx1N2Q3Mlx1N2Q2MVx1N2Q2''@;'; put 'put ''Nlx1N2Q2Mlx1N2Q3MFx1N2Q3M1x1NTU4NFx1N2ZkNFx1N2ZkNVx1ODAwYlx1ODA1Mlx1ODA4NVx1ODE1NVx1ODE1NFx1ODE0Ylx1ODE1MVx1ODE0ZVx1ODEzOVx1ODE0Nlx1ODEzZVx1ODE0Y1x1ODE1M1x1ODE3NFx1ODIxMlx1ODIxY1x1ODNlOVx1ODQwM1x1ODNmOFx1ODQwZFx1ODNlMFx1''@;'; put 'put ''ODNjNVx1ODQwYlx1ODNjMVx1ODNlZlx1ODNmMVx1ODNmNFx1ODQ1N1x1ODQwYVx1ODNmMFx1ODQwY1x1ODNjY1x1ODNmZFx1ODNmMlx1ODNjYVx1ODQzOFx1ODQwZVx1ODQwNFx1ODNkY1x1ODQwN1x1ODNkNFx1ODNkZlx1ODY1Ylx1ODZkZlx1ODZkOVx1ODZlZFx1ODZkNFx1ODZkYlx1ODZl''@;'; put 'put ''NFx1ODZkMFx1ODZkZVx1ODg1N1x1ODhjMVx1ODhjMlx1ODhiMVx1ODk4M1x1ODk5Nlx1OGEzYlx1OGE2MFx1OGE1NVx1OGE1ZVx1OGEzY1x1OGE0MVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE4MV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTgxXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtj''@;'; put 'put ''WzE4MV1bc11dPTQ2MzM2K3MsaFs0NjMzNitzXT1jWzE4MV1bc10pO2ZvcihjWzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGE1NFx1OGE1Ylx1OGE1MFx1OGE0Nlx1OGEzNFx1OGEzYVx1OGEzNlx1OGE1Nlx1OGM2MVx1OGM4''@;'; put 'put ''Mlx1OGNhZlx1OGNiY1x1OGNiM1x1OGNiZFx1OGNjMVx1OGNiYlx1OGNjMFx1OGNiNFx1OGNiN1x1OGNiNlx1OGNiZlx1OGNiOFx1OGQ4YVx1OGQ4NVx1OGQ4MVx1OGRjZVx1OGRkZFx1OGRjYlx1OGRkYVx1OGRkMVx1OGRjY1x1OGRkYlx1OGRjNlx1OGVmYlx1OGVmOFx1OGVmY1x1OGY5Y1x1''@;'; put 'put ''OTAyZVx1OTAzNVx1OTAzMVx1OTAzOFx1OTAzMlx1OTAzNlx1OTEwMlx1OTBmNVx1OTEwOVx1OTBmZVx1OTE2M1x1OTE2NVx1OTFjZlx1OTIxNFx1OTIxNVx1OTIyM1x1OTIwOVx1OTIxZVx1OTIwZFx1OTIxMFx1OTIwN1x1OTIxMVx1OTU5NFx1OTU4Zlx1OTU4Ylx1OTU5MVx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTU5M1x1OTU5Mlx1OTU4ZVx1OTY4YVx1OTY4ZVx1OTY4Ylx1OTY3ZFx1OTY4NVx1OTY4Nlx1OTY4ZFx1OTY3Mlx1OTY4NFx1OTZjMVx1OTZjNVx1OTZjNFx1OTZjNlx1OTZjN1x1OTZlZlx1OTZmMlx1OTdjY1x1OTgwNVx1OTgwNlx1OTgw''@;'; put 'put ''OFx1OThlN1x1OThlYVx1OThlZlx1OThlOVx1OThmMlx1OThlZFx1OTlhZVx1OTlhZFx1OWVjM1x1OWVjZFx1OWVkMVx1NGU4Mlx1NTBhZFx1NTBiNVx1NTBiMlx1NTBiM1x1NTBjNVx1NTBiZVx1NTBhY1x1NTBiN1x1NTBiYlx1NTBhZlx1NTBjN1x1NTI3Zlx1NTI3N1x1NTI3ZFx1NTJkZlx1''@;'; put 'put ''NTJlNlx1NTJlNFx1NTJlMlx1NTJlM1x1NTMyZlx1NTVkZlx1NTVlOFx1NTVkM1x1NTVlNlx1NTVjZVx1NTVkY1x1NTVjN1x1NTVkMVx1NTVlM1x1NTVlNFx1NTVlZlx1NTVkYVx1NTVlMVx1NTVjNVx1NTVjNlx1NTVlNVx1NTVjOVx1NTcxMlx1NTcxM1x1NTg1ZVx1NTg1MVx1NTg1OFx1NTg1''@;'; put 'put ''N1x1NTg1YVx1NTg1NFx1NTg2Ylx1NTg0Y1x1NTg2ZFx1NTg0YVx1NTg2Mlx1NTg1Mlx1NTg0Ylx1NTk2N1x1NWFjMVx1NWFjOVx1NWFjY1x1NWFiZVx1NWFiZFx1NWFiY1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE4Ml0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTgyXVtzXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoeVtjWzE4Ml1bc11dPTQ2NTkyK3MsaFs0NjU5MitzXT1jWzE4Ml1bc10pO2ZvcihjWzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWFiM1x1NWFjMlx1NWFiMlx1NWQ2OVx1NWQ2Zlx1NWU0Y1x1NWU3OVx1NWVj''@;'; put 'put ''OVx1NWVjOFx1NWYxMlx1NWY1OVx1NWZhY1x1NWZhZVx1NjExYVx1NjEwZlx1NjE0OFx1NjExZlx1NjBmM1x1NjExYlx1NjBmOVx1NjEwMVx1NjEwOFx1NjE0ZVx1NjE0Y1x1NjE0NFx1NjE0ZFx1NjEzZVx1NjEzNFx1NjEyN1x1NjEwZFx1NjEwNlx1NjEzN1x1NjIyMVx1NjIyMlx1NjQxM1x1''@;'; put 'put ''NjQzZVx1NjQxZVx1NjQyYVx1NjQyZFx1NjQzZFx1NjQyY1x1NjQwZlx1NjQxY1x1NjQxNFx1NjQwZFx1NjQzNlx1NjQxNlx1NjQxN1x1NjQwNlx1NjU2Y1x1NjU5Zlx1NjViMFx1NjY5N1x1NjY4OVx1NjY4N1x1NjY4OFx1NjY5Nlx1NjY4NFx1NjY5OFx1NjY4ZFx1NjcwM1x1Njk5NFx1Njk2''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njk1YVx1Njk3N1x1Njk2MFx1Njk1NFx1Njk3NVx1NjkzMFx1Njk4Mlx1Njk0YVx1Njk2OFx1Njk2Ylx1Njk1ZVx1Njk1M1x1Njk3OVx1Njk4Nlx1Njk1ZFx1Njk2M1x1Njk1Ylx1NmI0N1x1NmI3Mlx1NmJjMFx1NmJi''@;'; put 'put ''Zlx1NmJkM1x1NmJmZFx1NmVhMlx1NmVhZlx1NmVkM1x1NmViNlx1NmVjMlx1NmU5MFx1NmU5ZFx1NmVjN1x1NmVjNVx1NmVhNVx1NmU5OFx1NmViY1x1NmViYVx1NmVhYlx1NmVkMVx1NmU5Nlx1NmU5Y1x1NmVjNFx1NmVkNFx1NmVhYVx1NmVhN1x1NmViNFx1NzE0ZVx1NzE1OVx1NzE2OVx1''@;'; put 'put ''NzE2NFx1NzE0OVx1NzE2N1x1NzE1Y1x1NzE2Y1x1NzE2Nlx1NzE0Y1x1NzE2NVx1NzE1ZVx1NzE0Nlx1NzE2OFx1NzE1Nlx1NzIzYVx1NzI1Mlx1NzMzN1x1NzM0NVx1NzMzZlx1NzMzZVx1NzQ2Zlx1NzQ1YVx1NzQ1NVx1NzQ1Zlx1NzQ1ZVx1NzQ0MVx1NzQzZlx1NzQ1OVx1NzQ1Ylx1NzQ1''@;'; put 'put ''Y1x1NzU3Nlx1NzU3OFx1NzYwMFx1NzVmMFx1NzYwMVx1NzVmMlx1NzVmMVx1NzVmYVx1NzVmZlx1NzVmNFx1NzVmM1x1NzZkZVx1NzZkZlx1Nzc1Ylx1Nzc2Ylx1Nzc2Nlx1Nzc1ZVx1Nzc2M1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE4M10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTgz''@;'; put 'put ''XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE4M11bc11dPTQ2ODQ4K3MsaFs0Njg0OCtzXT1jWzE4M11bc10pO2ZvcihjWzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc3OVx1Nzc2YVx1Nzc2Y1x1Nzc1Y1x1Nzc2NVx1Nzc2''@;'; put 'put ''OFx1Nzc2Mlx1NzdlZVx1Nzg4ZVx1NzhiMFx1Nzg5N1x1Nzg5OFx1Nzg4Y1x1Nzg4OVx1Nzg3Y1x1Nzg5MVx1Nzg5M1x1Nzg3Zlx1Nzk3YVx1Nzk3Zlx1Nzk4MVx1ODQyY1x1NzliZFx1N2ExY1x1N2ExYVx1N2EyMFx1N2ExNFx1N2ExZlx1N2ExZVx1N2E5Zlx1N2FhMFx1N2I3N1x1N2JjMFx1''@;'; put 'put ''N2I2MFx1N2I2ZVx1N2I2N1x1N2NiMVx1N2NiM1x1N2NiNVx1N2Q5M1x1N2Q3OVx1N2Q5MVx1N2Q4MVx1N2Q4Zlx1N2Q1Ylx1N2Y2ZVx1N2Y2OVx1N2Y2YVx1N2Y3Mlx1N2ZhOVx1N2ZhOFx1N2ZhNFx1ODA1Nlx1ODA1OFx1ODA4Nlx1ODA4NFx1ODE3MVx1ODE3MFx1ODE3OFx1ODE2NVx1ODE2''@;'; put 'put ''ZVx1ODE3M1x1ODE2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE3OVx1ODE3YVx1ODE2Nlx1ODIwNVx1ODI0N1x1ODQ4Mlx1ODQ3N1x1ODQzZFx1ODQzMVx1ODQ3NVx1ODQ2Nlx1ODQ2Ylx1ODQ0OVx1ODQ2Y1x1ODQ1Ylx1ODQzY1x1ODQzNVx1ODQ2MVx1ODQ2''@;'; put 'put ''M1x1ODQ2OVx1ODQ2ZFx1ODQ0Nlx1ODY1ZVx1ODY1Y1x1ODY1Zlx1ODZmOVx1ODcxM1x1ODcwOFx1ODcwN1x1ODcwMFx1ODZmZVx1ODZmYlx1ODcwMlx1ODcwM1x1ODcwNlx1ODcwYVx1ODg1OVx1ODhkZlx1ODhkNFx1ODhkOVx1ODhkY1x1ODhkOFx1ODhkZFx1ODhlMVx1ODhjYVx1ODhkNVx1''@;'; put 'put ''ODhkMlx1ODk5Y1x1ODllM1x1OGE2Ylx1OGE3Mlx1OGE3M1x1OGE2Nlx1OGE2OVx1OGE3MFx1OGE4N1x1OGE3Y1x1OGE2M1x1OGFhMFx1OGE3MVx1OGE4NVx1OGE2ZFx1OGE2Mlx1OGE2ZVx1OGE2Y1x1OGE3OVx1OGE3Ylx1OGEzZVx1OGE2OFx1OGM2Mlx1OGM4YVx1OGM4OVx1OGNjYVx1OGNj''@;'; put 'put ''N1x1OGNjOFx1OGNjNFx1OGNiMlx1OGNjM1x1OGNjMlx1OGNjNVx1OGRlMVx1OGRkZlx1OGRlOFx1OGRlZlx1OGRmM1x1OGRmYVx1OGRlYVx1OGRlNFx1OGRlNlx1OGViMlx1OGYwM1x1OGYwOVx1OGVmZVx1OGYwYVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE4NF0ubGVuZ3RoOysrcyk2''@;'; put 'put ''NTUzMyE9PWNbMTg0XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE4NF1bc11dPTQ3MTA0K3MsaFs0NzEwNCtzXT1jWzE4NF1bc10pO2ZvcihjWzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGY5Zlx1OGZiMlx1OTA0Ylx1OTA0''@;'; put 'put ''YVx1OTA1M1x1OTA0Mlx1OTA1NFx1OTAzY1x1OTA1NVx1OTA1MFx1OTA0N1x1OTA0Zlx1OTA0ZVx1OTA0ZFx1OTA1MVx1OTAzZVx1OTA0MVx1OTExMlx1OTExN1x1OTE2Y1x1OTE2YVx1OTE2OVx1OTFjOVx1OTIzN1x1OTI1N1x1OTIzOFx1OTIzZFx1OTI0MFx1OTIzZVx1OTI1Ylx1OTI0Ylx1''@;'; put 'put ''OTI2NFx1OTI1MVx1OTIzNFx1OTI0OVx1OTI0ZFx1OTI0NVx1OTIzOVx1OTIzZlx1OTI1YVx1OTU5OFx1OTY5OFx1OTY5NFx1OTY5NVx1OTZjZFx1OTZjYlx1OTZjOVx1OTZjYVx1OTZmN1x1OTZmYlx1OTZmOVx1OTZmNlx1OTc1Nlx1OTc3NFx1OTc3Nlx1OTgxMFx1OTgxMVx1OTgxM1x1OTgw''@;'; put 'put ''YVx1OTgxMlx1OTgwY1x1OThmY1x1OThmNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OThmZFx1OThmZVx1OTliM1x1OTliMVx1OTliNFx1OWFlMVx1OWNlOVx1OWU4Mlx1OWYwZVx1OWYxM1x1OWYyMFx1NTBlN1x1NTBlZVx1NTBlNVx1NTBkNlx1NTBlZFx1NTBk''@;'; put 'put ''YVx1NTBkNVx1NTBjZlx1NTBkMVx1NTBmMVx1NTBjZVx1NTBlOVx1NTE2Mlx1NTFmM1x1NTI4M1x1NTI4Mlx1NTMzMVx1NTNhZFx1NTVmZVx1NTYwMFx1NTYxYlx1NTYxN1x1NTVmZFx1NTYxNFx1NTYwNlx1NTYwOVx1NTYwZFx1NTYwZVx1NTVmN1x1NTYxNlx1NTYxZlx1NTYwOFx1NTYxMFx1''@;'; put 'put ''NTVmNlx1NTcxOFx1NTcxNlx1NTg3NVx1NTg3ZVx1NTg4M1x1NTg5M1x1NTg4YVx1NTg3OVx1NTg4NVx1NTg3ZFx1NThmZFx1NTkyNVx1NTkyMlx1NTkyNFx1NTk2YVx1NTk2OVx1NWFlMVx1NWFlNlx1NWFlOVx1NWFkN1x1NWFkNlx1NWFkOFx1NWFlM1x1NWI3NVx1NWJkZVx1NWJlN1x1NWJl''@;'; put 'put ''MVx1NWJlNVx1NWJlNlx1NWJlOFx1NWJlMlx1NWJlNFx1NWJkZlx1NWMwZFx1NWM2Mlx1NWQ4NFx1NWQ4N1x1NWU1Ylx1NWU2M1x1NWU1NVx1NWU1N1x1NWU1NFx1NWVkM1x1NWVkNlx1NWYwYVx1NWY0Nlx1NWY3MFx1NWZiOVx1NjE0N1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE4NV0u''@;'; put 'put ''bGVuZ3RoOysrcyk2NTUzMyE9PWNbMTg1XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE4NV1bc11dPTQ3MzYwK3MsaFs0NzM2MCtzXT1jWzE4NV1bc10pO2ZvcihjWzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjEzZlx1NjE0''@;'; put 'put ''Ylx1NjE3N1x1NjE2Mlx1NjE2M1x1NjE1Zlx1NjE1YVx1NjE1OFx1NjE3NVx1NjIyYVx1NjQ4N1x1NjQ1OFx1NjQ1NFx1NjRhNFx1NjQ3OFx1NjQ1Zlx1NjQ3YVx1NjQ1MVx1NjQ2N1x1NjQzNFx1NjQ2ZFx1NjQ3Ylx1NjU3Mlx1NjVhMVx1NjVkN1x1NjVkNlx1NjZhMlx1NjZhOFx1NjY5ZFx1''@;'; put 'put ''Njk5Y1x1NjlhOFx1Njk5NVx1NjljMVx1NjlhZVx1NjlkM1x1NjljYlx1Njk5Ylx1NjliN1x1NjliYlx1NjlhYlx1NjliNFx1NjlkMFx1NjljZFx1NjlhZFx1NjljY1x1NjlhNlx1NjljM1x1NjlhM1x1NmI0OVx1NmI0Y1x1NmMzM1x1NmYzM1x1NmYxNFx1NmVmZVx1NmYxM1x1NmVmNFx1NmYy''@;'; put 'put ''OVx1NmYzZVx1NmYyMFx1NmYyY1x1NmYwZlx1NmYwMlx1NmYyMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmVmZlx1NmVlZlx1NmYwNlx1NmYzMVx1NmYzOFx1NmYzMlx1NmYyM1x1NmYxNVx1NmYyYlx1NmYyZlx1NmY4OFx1NmYyYVx1NmVlY1x1NmYwMVx1NmVm''@;'; put 'put ''Mlx1NmVjY1x1NmVmN1x1NzE5NFx1NzE5OVx1NzE3ZFx1NzE4YVx1NzE4NFx1NzE5Mlx1NzIzZVx1NzI5Mlx1NzI5Nlx1NzM0NFx1NzM1MFx1NzQ2NFx1NzQ2M1x1NzQ2YVx1NzQ3MFx1NzQ2ZFx1NzUwNFx1NzU5MVx1NzYyN1x1NzYwZFx1NzYwYlx1NzYwOVx1NzYxM1x1NzZlMVx1NzZlM1x1''@;'; put 'put ''Nzc4NFx1Nzc3ZFx1Nzc3Zlx1Nzc2MVx1NzhjMVx1Nzg5Zlx1NzhhN1x1NzhiM1x1NzhhOVx1NzhhM1x1Nzk4ZVx1Nzk4Zlx1Nzk4ZFx1N2EyZVx1N2EzMVx1N2FhYVx1N2FhOVx1N2FlZFx1N2FlZlx1N2JhMVx1N2I5NVx1N2I4Ylx1N2I3NVx1N2I5N1x1N2I5ZFx1N2I5NFx1N2I4Zlx1N2Ji''@;'; put 'put ''OFx1N2I4N1x1N2I4NFx1N2NiOVx1N2NiZFx1N2NiZVx1N2RiYlx1N2RiMFx1N2Q5Y1x1N2RiZFx1N2RiZVx1N2RhMFx1N2RjYVx1N2RiNFx1N2RiMlx1N2RiMVx1N2RiYVx1N2RhMlx1N2RiZlx1N2RiNVx1N2RiOFx1N2RhZFx1N2RkMlx1N2RjN1x1N2RhY1x1ZmZmZCIuc3BsaXQoIiIpLHM9''@;'; put 'put ''MDtzIT1jWzE4Nl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTg2XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE4Nl1bc11dPTQ3NjE2K3MsaFs0NzYxNitzXT1jWzE4Nl1bc10pO2ZvcihjWzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1N2Y3MFx1N2ZlMFx1N2ZlMVx1N2ZkZlx1ODA1ZVx1ODA1YVx1ODA4N1x1ODE1MFx1ODE4MFx1ODE4Zlx1ODE4OFx1ODE4YVx1ODE3Zlx1ODE4Mlx1ODFlN1x1ODFmYVx1ODIwN1x1ODIxNFx1ODIxZVx1ODI0Ylx1ODRjOVx1ODRiZlx1ODRjNlx1ODRjNFx1ODQ5OVx1ODQ5ZVx1ODRiMlx1''@;'; put 'put ''ODQ5Y1x1ODRjYlx1ODRiOFx1ODRjMFx1ODRkM1x1ODQ5MFx1ODRiY1x1ODRkMVx1ODRjYVx1ODczZlx1ODcxY1x1ODczYlx1ODcyMlx1ODcyNVx1ODczNFx1ODcxOFx1ODc1NVx1ODczN1x1ODcyOVx1ODhmM1x1ODkwMlx1ODhmNFx1ODhmOVx1ODhmOFx1ODhmZFx1ODhlOFx1ODkxYVx1ODhl''@;'; put 'put ''Zlx1OGFhNlx1OGE4Y1x1OGE5ZVx1OGFhM1x1OGE4ZFx1OGFhMVx1OGE5M1x1OGFhNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFhYVx1OGFhNVx1OGFhOFx1OGE5OFx1OGE5MVx1OGE5YVx1OGFhN1x1OGM2YVx1OGM4ZFx1OGM4Y1x1OGNkM1x1OGNkMVx1OGNk''@;'; put 'put ''Mlx1OGQ2Ylx1OGQ5OVx1OGQ5NVx1OGRmY1x1OGYxNFx1OGYxMlx1OGYxNVx1OGYxM1x1OGZhM1x1OTA2MFx1OTA1OFx1OTA1Y1x1OTA2M1x1OTA1OVx1OTA1ZVx1OTA2Mlx1OTA1ZFx1OTA1Ylx1OTExOVx1OTExOFx1OTExZVx1OTE3NVx1OTE3OFx1OTE3N1x1OTE3NFx1OTI3OFx1OTI4MFx1''@;'; put 'put ''OTI4NVx1OTI5OFx1OTI5Nlx1OTI3Ylx1OTI5M1x1OTI5Y1x1OTJhOFx1OTI3Y1x1OTI5MVx1OTVhMVx1OTVhOFx1OTVhOVx1OTVhM1x1OTVhNVx1OTVhNFx1OTY5OVx1OTY5Y1x1OTY5Ylx1OTZjY1x1OTZkMlx1OTcwMFx1OTc3Y1x1OTc4NVx1OTdmNlx1OTgxN1x1OTgxOFx1OThhZlx1OThi''@;'; put 'put ''MVx1OTkwM1x1OTkwNVx1OTkwY1x1OTkwOVx1OTljMVx1OWFhZlx1OWFiMFx1OWFlNlx1OWI0MVx1OWI0Mlx1OWNmNFx1OWNmNlx1OWNmM1x1OWViY1x1OWYzYlx1OWY0YVx1NTEwNFx1NTEwMFx1NTBmYlx1NTBmNVx1NTBmOVx1NTEwMlx1NTEwOFx1NTEwOVx1NTEwNVx1NTFkY1x1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLHM9MDtzIT1jWzE4N10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTg3XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE4N11bc11dPTQ3ODcyK3MsaFs0Nzg3MitzXT1jWzE4N11bc10pO2ZvcihjWzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1NTI4N1x1NTI4OFx1NTI4OVx1NTI4ZFx1NTI4YVx1NTJmMFx1NTNiMlx1NTYyZVx1NTYzYlx1NTYzOVx1NTYzMlx1NTYzZlx1NTYzNFx1NTYyOVx1NTY1M1x1NTY0ZVx1NTY1N1x1NTY3NFx1NTYzNlx1NTYyZlx1NTYzMFx1NTg4MFx1NTg5Zlx1NTg5ZVx1NThiM1x1''@;'; put 'put ''NTg5Y1x1NThhZVx1NThhOVx1NThhNlx1NTk2ZFx1NWIwOVx1NWFmYlx1NWIwYlx1NWFmNVx1NWIwY1x1NWIwOFx1NWJlZVx1NWJlY1x1NWJlOVx1NWJlYlx1NWM2NFx1NWM2NVx1NWQ5ZFx1NWQ5NFx1NWU2Mlx1NWU1Zlx1NWU2MVx1NWVlMlx1NWVkYVx1NWVkZlx1NWVkZFx1NWVlM1x1NWVl''@;'; put 'put ''MFx1NWY0OFx1NWY3MVx1NWZiN1x1NWZiNVx1NjE3Nlx1NjE2N1x1NjE2ZVx1NjE1ZFx1NjE1NVx1NjE4Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE3Y1x1NjE3MFx1NjE2Ylx1NjE3ZVx1NjFhN1x1NjE5MFx1NjFhYlx1NjE4ZVx1NjFhY1x1NjE5YVx1NjFh''@;'; put 'put ''NFx1NjE5NFx1NjFhZVx1NjIyZVx1NjQ2OVx1NjQ2Zlx1NjQ3OVx1NjQ5ZVx1NjRiMlx1NjQ4OFx1NjQ5MFx1NjRiMFx1NjRhNVx1NjQ5M1x1NjQ5NVx1NjRhOVx1NjQ5Mlx1NjRhZVx1NjRhZFx1NjRhYlx1NjQ5YVx1NjRhY1x1NjQ5OVx1NjRhMlx1NjRiM1x1NjU3NVx1NjU3N1x1NjU3OFx1''@;'; put 'put ''NjZhZVx1NjZhYlx1NjZiNFx1NjZiMVx1NmEyM1x1NmExZlx1NjllOFx1NmEwMVx1NmExZVx1NmExOVx1NjlmZFx1NmEyMVx1NmExM1x1NmEwYVx1NjlmM1x1NmEwMlx1NmEwNVx1NjllZFx1NmExMVx1NmI1MFx1NmI0ZVx1NmJhNFx1NmJjNVx1NmJjNlx1NmYzZlx1NmY3Y1x1NmY4NFx1NmY1''@;'; put 'put ''MVx1NmY2Nlx1NmY1NFx1NmY4Nlx1NmY2ZFx1NmY1Ylx1NmY3OFx1NmY2ZVx1NmY4ZVx1NmY3YVx1NmY3MFx1NmY2NFx1NmY5N1x1NmY1OFx1NmVkNVx1NmY2Zlx1NmY2MFx1NmY1Zlx1NzE5Zlx1NzFhY1x1NzFiMVx1NzFhOFx1NzI1Nlx1NzI5Ylx1NzM0ZVx1NzM1N1x1NzQ2OVx1NzQ4Ylx1''@;'; put 'put ''NzQ4M1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE4OF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTg4XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE4OF1bc11dPTQ4MTI4K3MsaFs0ODEyOCtzXT1jWzE4OF1bc10pO2ZvcihjWzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQ3ZVx1NzQ4MFx1NzU3Zlx1NzYyMFx1NzYyOVx1NzYxZlx1NzYyNFx1NzYyNlx1NzYyMVx1NzYyMlx1NzY5YVx1NzZiYVx1NzZlNFx1Nzc4ZVx1Nzc4N1x1Nzc4Y1x1Nzc5MVx1Nzc4Ylx1NzhjYlx1NzhjNVx1NzhiYVx1NzhjYVx1NzhiZVx1''@;'; put 'put ''NzhkNVx1NzhiY1x1NzhkMFx1N2EzZlx1N2EzY1x1N2E0MFx1N2EzZFx1N2EzN1x1N2EzYlx1N2FhZlx1N2FhZVx1N2JhZFx1N2JiMVx1N2JjNFx1N2JiNFx1N2JjNlx1N2JjN1x1N2JjMVx1N2JhMFx1N2JjY1x1N2NjYVx1N2RlMFx1N2RmNFx1N2RlZlx1N2RmYlx1N2RkOFx1N2RlY1x1N2Rk''@;'; put 'put ''ZFx1N2RlOFx1N2RlM1x1N2RkYVx1N2RkZVx1N2RlOVx1N2Q5ZVx1N2RkOVx1N2RmMlx1N2RmOVx1N2Y3NVx1N2Y3N1x1N2ZhZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ZlOVx1ODAyNlx1ODE5Ylx1ODE5Y1x1ODE5ZFx1ODFhMFx1ODE5YVx1ODE5OFx1ODUx''@;'; put 'put ''N1x1ODUzZFx1ODUxYVx1ODRlZVx1ODUyY1x1ODUyZFx1ODUxM1x1ODUxMVx1ODUyM1x1ODUyMVx1ODUxNFx1ODRlY1x1ODUyNVx1ODRmZlx1ODUwNlx1ODc4Mlx1ODc3NFx1ODc3Nlx1ODc2MFx1ODc2Nlx1ODc3OFx1ODc2OFx1ODc1OVx1ODc1N1x1ODc0Y1x1ODc1M1x1ODg1Ylx1ODg1ZFx1''@;'; put 'put ''ODkxMFx1ODkwN1x1ODkxMlx1ODkxM1x1ODkxNVx1ODkwYVx1OGFiY1x1OGFkMlx1OGFjN1x1OGFjNFx1OGE5NVx1OGFjYlx1OGFmOFx1OGFiMlx1OGFjOVx1OGFjMlx1OGFiZlx1OGFiMFx1OGFkNlx1OGFjZFx1OGFiNlx1OGFiOVx1OGFkYlx1OGM0Y1x1OGM0ZVx1OGM2Y1x1OGNlMFx1OGNk''@;'; put 'put ''ZVx1OGNlNlx1OGNlNFx1OGNlY1x1OGNlZFx1OGNlMlx1OGNlM1x1OGNkY1x1OGNlYVx1OGNlMVx1OGQ2ZFx1OGQ5Zlx1OGRhM1x1OGUyYlx1OGUxMFx1OGUxZFx1OGUyMlx1OGUwZlx1OGUyOVx1OGUxZlx1OGUyMVx1OGUxZVx1OGViYVx1OGYxZFx1OGYxYlx1OGYxZlx1OGYyOVx1OGYyNlx1''@;'; put 'put ''OGYyYVx1OGYxY1x1OGYxZVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE4OV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTg5XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE4OV1bc11dPTQ4Mzg0K3MsaFs0ODM4NCtzXT1jWzE4OV1bc10pO2ZvcihjWzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGYyNVx1OTA2OVx1OTA2ZVx1OTA2OFx1OTA2ZFx1OTA3N1x1OTEzMFx1OTEyZFx1OTEyN1x1OTEzMVx1OTE4N1x1OTE4OVx1OTE4Ylx1OTE4M1x1OTJjNVx1OTJiYlx1OTJiN1x1OTJlYVx1OTJhY1x1OTJlNFx1OTJjMVx1''@;'; put 'put ''OTJiM1x1OTJiY1x1OTJkMlx1OTJjN1x1OTJmMFx1OTJiMlx1OTVhZFx1OTViMVx1OTcwNFx1OTcwNlx1OTcwN1x1OTcwOVx1OTc2MFx1OTc4ZFx1OTc4Ylx1OTc4Zlx1OTgyMVx1OTgyYlx1OTgxY1x1OThiM1x1OTkwYVx1OTkxM1x1OTkxMlx1OTkxOFx1OTlkZFx1OTlkMFx1OTlkZlx1OTlk''@;'; put 'put ''Ylx1OTlkMVx1OTlkNVx1OTlkMlx1OTlkOVx1OWFiN1x1OWFlZVx1OWFlZlx1OWIyN1x1OWI0NVx1OWI0NFx1OWI3N1x1OWI2Zlx1OWQwNlx1OWQwOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQwM1x1OWVhOVx1OWViZVx1OWVjZVx1NThhOFx1OWY1Mlx1NTEx''@;'; put 'put ''Mlx1NTExOFx1NTExNFx1NTExMFx1NTExNVx1NTE4MFx1NTFhYVx1NTFkZFx1NTI5MVx1NTI5M1x1NTJmM1x1NTY1OVx1NTY2Ylx1NTY3OVx1NTY2OVx1NTY2NFx1NTY3OFx1NTY2YVx1NTY2OFx1NTY2NVx1NTY3MVx1NTY2Zlx1NTY2Y1x1NTY2Mlx1NTY3Nlx1NThjMVx1NThiZVx1NThjN1x1''@;'; put 'put ''NThjNVx1NTk2ZVx1NWIxZFx1NWIzNFx1NWI3OFx1NWJmMFx1NWMwZVx1NWY0YVx1NjFiMlx1NjE5MVx1NjFhOVx1NjE4YVx1NjFjZFx1NjFiNlx1NjFiZVx1NjFjYVx1NjFjOFx1NjIzMFx1NjRjNVx1NjRjMVx1NjRjYlx1NjRiYlx1NjRiY1x1NjRkYVx1NjRjNFx1NjRjN1x1NjRjMlx1NjRj''@;'; put 'put ''ZFx1NjRiZlx1NjRkMlx1NjRkNFx1NjRiZVx1NjU3NFx1NjZjNlx1NjZjOVx1NjZiOVx1NjZjNFx1NjZjN1x1NjZiOFx1NmEzZFx1NmEzOFx1NmEzYVx1NmE1OVx1NmE2Ylx1NmE1OFx1NmEzOVx1NmE0NFx1NmE2Mlx1NmE2MVx1NmE0Ylx1NmE0N1x1NmEzNVx1NmE1Zlx1NmE0OFx1NmI1OVx1''@;'; put 'put ''NmI3N1x1NmMwNVx1NmZjMlx1NmZiMVx1NmZhMVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE5MF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTkwXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE5MF1bc11dPTQ4NjQwK3MsaFs0ODY0MCtzXT1jWzE5MF1bc10pO2ZvcihjWzE5MV09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZjM1x1NmZhNFx1NmZjMVx1NmZhN1x1NmZiM1x1NmZjMFx1NmZiOVx1NmZiNlx1NmZhNlx1NmZhMFx1NmZiNFx1NzFiZVx1NzFjOVx1NzFkMFx1NzFkMlx1NzFjOFx1NzFkNVx1NzFiOVx1NzFjZVx1''@;'; put 'put ''NzFkOVx1NzFkY1x1NzFjM1x1NzFjNFx1NzM2OFx1NzQ5Y1x1NzRhM1x1NzQ5OFx1NzQ5Zlx1NzQ5ZVx1NzRlMlx1NzUwY1x1NzUwZFx1NzYzNFx1NzYzOFx1NzYzYVx1NzZlN1x1NzZlNVx1NzdhMFx1Nzc5ZVx1Nzc5Zlx1NzdhNVx1NzhlOFx1NzhkYVx1NzhlY1x1NzhlN1x1NzlhNlx1N2E0''@;'; put 'put ''ZFx1N2E0ZVx1N2E0Nlx1N2E0Y1x1N2E0Ylx1N2FiYVx1N2JkOVx1N2MxMVx1N2JjOVx1N2JlNFx1N2JkYlx1N2JlMVx1N2JlOVx1N2JlNlx1N2NkNVx1N2NkNlx1N2UwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2UxMVx1N2UwOFx1N2UxYlx1N2UyM1x1N2Ux''@;'; put 'put ''ZVx1N2UxZFx1N2UwOVx1N2UxMFx1N2Y3OVx1N2ZiMlx1N2ZmMFx1N2ZmMVx1N2ZlZVx1ODAyOFx1ODFiM1x1ODFhOVx1ODFhOFx1ODFmYlx1ODIwOFx1ODI1OFx1ODI1OVx1ODU0YVx1ODU1OVx1ODU0OFx1ODU2OFx1ODU2OVx1ODU0M1x1ODU0OVx1ODU2ZFx1ODU2YVx1ODU1ZVx1ODc4M1x1''@;'; put 'put ''ODc5Zlx1ODc5ZVx1ODdhMlx1ODc4ZFx1ODg2MVx1ODkyYVx1ODkzMlx1ODkyNVx1ODkyYlx1ODkyMVx1ODlhYVx1ODlhNlx1OGFlNlx1OGFmYVx1OGFlYlx1OGFmMVx1OGIwMFx1OGFkY1x1OGFlN1x1OGFlZVx1OGFmZVx1OGIwMVx1OGIwMlx1OGFmN1x1OGFlZFx1OGFmM1x1OGFmNlx1OGFm''@;'; put 'put ''Y1x1OGM2Ylx1OGM2ZFx1OGM5M1x1OGNmNFx1OGU0NFx1OGUzMVx1OGUzNFx1OGU0Mlx1OGUzOVx1OGUzNVx1OGYzYlx1OGYyZlx1OGYzOFx1OGYzM1x1OGZhOFx1OGZhNlx1OTA3NVx1OTA3NFx1OTA3OFx1OTA3Mlx1OTA3Y1x1OTA3YVx1OTEzNFx1OTE5Mlx1OTMyMFx1OTMzNlx1OTJmOFx1''@;'; put 'put ''OTMzM1x1OTMyZlx1OTMyMlx1OTJmY1x1OTMyYlx1OTMwNFx1OTMxYVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE5MV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTkxXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE5MV1bc11dPTQ4ODk2K3MsaFs0ODg5NitzXT1jWzE5MV1bc10pO2Zvcihj''@;'; put 'put ''WzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMxMFx1OTMyNlx1OTMyMVx1OTMxNVx1OTMyZVx1OTMxOVx1OTViYlx1OTZhN1x1OTZhOFx1OTZhYVx1OTZkNVx1OTcwZVx1OTcxMVx1OTcxNlx1OTcwZFx1OTcxM1x1OTcwZlx1''@;'; put 'put ''OTc1Ylx1OTc1Y1x1OTc2Nlx1OTc5OFx1OTgzMFx1OTgzOFx1OTgzYlx1OTgzN1x1OTgyZFx1OTgzOVx1OTgyNFx1OTkxMFx1OTkyOFx1OTkxZVx1OTkxYlx1OTkyMVx1OTkxYVx1OTllZFx1OTllMlx1OTlmMVx1OWFiOFx1OWFiY1x1OWFmYlx1OWFlZFx1OWIyOFx1OWI5MVx1OWQxNVx1OWQy''@;'; put 'put ''M1x1OWQyNlx1OWQyOFx1OWQxMlx1OWQxYlx1OWVkOFx1OWVkNFx1OWY4ZFx1OWY5Y1x1NTEyYVx1NTExZlx1NTEyMVx1NTEzMlx1NTJmNVx1NTY4ZVx1NTY4MFx1NTY5MFx1NTY4NVx1NTY4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTY4Zlx1NThkNVx1NThk''@;'; put 'put ''M1x1NThkMVx1NThjZVx1NWIzMFx1NWIyYVx1NWIyNFx1NWI3YVx1NWMzN1x1NWM2OFx1NWRiY1x1NWRiYVx1NWRiZFx1NWRiOFx1NWU2Ylx1NWY0Y1x1NWZiZFx1NjFjOVx1NjFjMlx1NjFjN1x1NjFlNlx1NjFjYlx1NjIzMlx1NjIzNFx1NjRjZVx1NjRjYVx1NjRkOFx1NjRlMFx1NjRmMFx1''@;'; put 'put ''NjRlNlx1NjRlY1x1NjRmMVx1NjRlMlx1NjRlZFx1NjU4Mlx1NjU4M1x1NjZkOVx1NjZkNlx1NmE4MFx1NmE5NFx1NmE4NFx1NmFhMlx1NmE5Y1x1NmFkYlx1NmFhM1x1NmE3ZVx1NmE5N1x1NmE5MFx1NmFhMFx1NmI1Y1x1NmJhZVx1NmJkYVx1NmMwOFx1NmZkOFx1NmZmMVx1NmZkZlx1NmZl''@;'; put 'put ''MFx1NmZkYlx1NmZlNFx1NmZlYlx1NmZlZlx1NmY4MFx1NmZlY1x1NmZlMVx1NmZlOVx1NmZkNVx1NmZlZVx1NmZmMFx1NzFlN1x1NzFkZlx1NzFlZVx1NzFlNlx1NzFlNVx1NzFlZFx1NzFlY1x1NzFmNFx1NzFlMFx1NzIzNVx1NzI0Nlx1NzM3MFx1NzM3Mlx1NzRhOVx1NzRiMFx1NzRhNlx1''@;'; put 'put ''NzRhOFx1NzY0Nlx1NzY0Mlx1NzY0Y1x1NzZlYVx1NzdiM1x1NzdhYVx1NzdiMFx1NzdhY1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE5Ml0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTkyXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE5Ml1bc11dPTQ5MTUyK3MsaFs0OTE1MitzXT1jWzE5''@;'; put 'put ''Ml1bc10pO2ZvcihjWzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdhN1x1NzdhZFx1NzdlZlx1NzhmN1x1NzhmYVx1NzhmNFx1NzhlZlx1NzkwMVx1NzlhN1x1NzlhYVx1N2E1N1x1N2FiZlx1N2MwN1x1N2MwZFx1N2JmZVx1''@;'; put 'put ''N2JmN1x1N2MwY1x1N2JlMFx1N2NlMFx1N2NkY1x1N2NkZVx1N2NlMlx1N2NkZlx1N2NkOVx1N2NkZFx1N2UyZVx1N2UzZVx1N2U0Nlx1N2UzN1x1N2UzMlx1N2U0M1x1N2UyYlx1N2UzZFx1N2UzMVx1N2U0NVx1N2U0MVx1N2UzNFx1N2UzOVx1N2U0OFx1N2UzNVx1N2UzZlx1N2UyZlx1N2Y0''@;'; put 'put ''NFx1N2ZmM1x1N2ZmY1x1ODA3MVx1ODA3Mlx1ODA3MFx1ODA2Zlx1ODA3M1x1ODFjNlx1ODFjM1x1ODFiYVx1ODFjMlx1ODFjMFx1ODFiZlx1ODFiZFx1ODFjOVx1ODFiZVx1ODFlOFx1ODIwOVx1ODI3MVx1ODVhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU4''@;'; put 'put ''NFx1ODU3ZVx1ODU5Y1x1ODU5MVx1ODU5NFx1ODVhZlx1ODU5Ylx1ODU4N1x1ODVhOFx1ODU4YVx1ODY2N1x1ODdjMFx1ODdkMVx1ODdiM1x1ODdkMlx1ODdjNlx1ODdhYlx1ODdiYlx1ODdiYVx1ODdjOFx1ODdjYlx1ODkzYlx1ODkzNlx1ODk0NFx1ODkzOFx1ODkzZFx1ODlhY1x1OGIwZVx1''@;'; put 'put ''OGIxN1x1OGIxOVx1OGIxYlx1OGIwYVx1OGIyMFx1OGIxZFx1OGIwNFx1OGIxMFx1OGM0MVx1OGMzZlx1OGM3M1x1OGNmYVx1OGNmZFx1OGNmY1x1OGNmOFx1OGNmYlx1OGRhOFx1OGU0OVx1OGU0Ylx1OGU0OFx1OGU0YVx1OGY0NFx1OGYzZVx1OGY0Mlx1OGY0NVx1OGYzZlx1OTA3Zlx1OTA3''@;'; put 'put ''ZFx1OTA4NFx1OTA4MVx1OTA4Mlx1OTA4MFx1OTEzOVx1OTFhM1x1OTE5ZVx1OTE5Y1x1OTM0ZFx1OTM4Mlx1OTMyOFx1OTM3NVx1OTM0YVx1OTM2NVx1OTM0Ylx1OTMxOFx1OTM3ZVx1OTM2Y1x1OTM1Ylx1OTM3MFx1OTM1YVx1OTM1NFx1OTVjYVx1OTVjYlx1OTVjY1x1OTVjOFx1OTVjNlx1''@;'; put 'put ''OTZiMVx1OTZiOFx1OTZkNlx1OTcxY1x1OTcxZVx1OTdhMFx1OTdkM1x1OTg0Nlx1OThiNlx1OTkzNVx1OWEwMVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE5M10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTkzXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE5M11bc11dPTQ5NDA4K3MsaFs0''@;'; put 'put ''OTQwOCtzXT1jWzE5M11bc10pO2ZvcihjWzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTlmZlx1OWJhZVx1OWJhYlx1OWJhYVx1OWJhZFx1OWQzYlx1OWQzZlx1OWU4Ylx1OWVjZlx1OWVkZVx1OWVkY1x1OWVkZFx1OWVkYlx1''@;'; put 'put ''OWYzZVx1OWY0Ylx1NTNlMlx1NTY5NVx1NTZhZVx1NThkOVx1NThkOFx1NWIzOFx1NWY1ZFx1NjFlM1x1NjIzM1x1NjRmNFx1NjRmMlx1NjRmZVx1NjUwNlx1NjRmYVx1NjRmYlx1NjRmN1x1NjViN1x1NjZkY1x1NjcyNlx1NmFiM1x1NmFhY1x1NmFjM1x1NmFiYlx1NmFiOFx1NmFjMlx1NmFh''@;'; put 'put ''ZVx1NmFhZlx1NmI1Zlx1NmI3OFx1NmJhZlx1NzAwOVx1NzAwYlx1NmZmZVx1NzAwNlx1NmZmYVx1NzAxMVx1NzAwZlx1NzFmYlx1NzFmY1x1NzFmZVx1NzFmOFx1NzM3N1x1NzM3NVx1NzRhN1x1NzRiZlx1NzUxNVx1NzY1Nlx1NzY1OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1NzY1Mlx1NzdiZFx1NzdiZlx1NzdiYlx1NzdiY1x1NzkwZVx1NzlhZVx1N2E2MVx1N2E2Mlx1N2E2MFx1N2FjNFx1N2FjNVx1N2MyYlx1N2MyN1x1N2MyYVx1N2MxZVx1N2MyM1x1N2MyMVx1N2NlN1x1N2U1NFx1N2U1NVx1N2U1ZVx1N2U1YVx1N2U2MVx1N2U1Mlx1N2U1OVx1''@;'; put 'put ''N2Y0OFx1N2ZmOVx1N2ZmYlx1ODA3N1x1ODA3Nlx1ODFjZFx1ODFjZlx1ODIwYVx1ODVjZlx1ODVhOVx1ODVjZFx1ODVkMFx1ODVjOVx1ODViMFx1ODViYVx1ODViOVx1ODVhNlx1ODdlZlx1ODdlY1x1ODdmMlx1ODdlMFx1ODk4Nlx1ODliMlx1ODlmNFx1OGIyOFx1OGIzOVx1OGIyY1x1OGIy''@;'; put 'put ''Ylx1OGM1MFx1OGQwNVx1OGU1OVx1OGU2M1x1OGU2Nlx1OGU2NFx1OGU1Zlx1OGU1NVx1OGVjMFx1OGY0OVx1OGY0ZFx1OTA4N1x1OTA4M1x1OTA4OFx1OTFhYlx1OTFhY1x1OTFkMFx1OTM5NFx1OTM4YVx1OTM5Nlx1OTNhMlx1OTNiM1x1OTNhZVx1OTNhY1x1OTNiMFx1OTM5OFx1OTM5YVx1''@;'; put 'put ''OTM5N1x1OTVkNFx1OTVkNlx1OTVkMFx1OTVkNVx1OTZlMlx1OTZkY1x1OTZkOVx1OTZkYlx1OTZkZVx1OTcyNFx1OTdhM1x1OTdhNlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE5NF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTk0XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE5NF1bc11d''@;'; put 'put ''PTQ5NjY0K3MsaFs0OTY2NCtzXT1jWzE5NF1bc10pO2ZvcihjWzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdhZFx1OTdmOVx1OTg0ZFx1OTg0Zlx1OTg0Y1x1OTg0ZVx1OTg1M1x1OThiYVx1OTkzZVx1OTkzZlx1OTkzZFx1''@;'; put 'put ''OTkyZVx1OTlhNVx1OWEwZVx1OWFjMVx1OWIwM1x1OWIwNlx1OWI0Zlx1OWI0ZVx1OWI0ZFx1OWJjYVx1OWJjOVx1OWJmZFx1OWJjOFx1OWJjMFx1OWQ1MVx1OWQ1ZFx1OWQ2MFx1OWVlMFx1OWYxNVx1OWYyY1x1NTEzM1x1NTZhNVx1NThkZVx1NThkZlx1NThlMlx1NWJmNVx1OWY5MFx1NWVl''@;'; put 'put ''Y1x1NjFmMlx1NjFmN1x1NjFmNlx1NjFmNVx1NjUwMFx1NjUwZlx1NjZlMFx1NjZkZFx1NmFlNVx1NmFkZFx1NmFkYVx1NmFkM1x1NzAxYlx1NzAxZlx1NzAyOFx1NzAxYVx1NzAxZFx1NzAxNVx1NzAxOFx1NzIwNlx1NzIwZFx1NzI1OFx1NzJhMlx1NzM3OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM3YVx1NzRiZFx1NzRjYVx1NzRlM1x1NzU4N1x1NzU4Nlx1NzY1Zlx1NzY2MVx1NzdjN1x1NzkxOVx1NzliMVx1N2E2Ylx1N2E2OVx1N2MzZVx1N2MzZlx1N2MzOFx1N2MzZFx1N2MzN1x1N2M0MFx1N2U2Ylx1N2U2ZFx1N2U3OVx1N2U2OVx1N2U2YVx1''@;'; put 'put ''N2Y4NVx1N2U3M1x1N2ZiNlx1N2ZiOVx1N2ZiOFx1ODFkOFx1ODVlOVx1ODVkZFx1ODVlYVx1ODVkNVx1ODVlNFx1ODVlNVx1ODVmN1x1ODdmYlx1ODgwNVx1ODgwZFx1ODdmOVx1ODdmZVx1ODk2MFx1ODk1Zlx1ODk1Nlx1ODk1ZVx1OGI0MVx1OGI1Y1x1OGI1OFx1OGI0OVx1OGI1YVx1OGI0''@;'; put 'put ''ZVx1OGI0Zlx1OGI0Nlx1OGI1OVx1OGQwOFx1OGQwYVx1OGU3Y1x1OGU3Mlx1OGU4N1x1OGU3Nlx1OGU2Y1x1OGU3YVx1OGU3NFx1OGY1NFx1OGY0ZVx1OGZhZFx1OTA4YVx1OTA4Ylx1OTFiMVx1OTFhZVx1OTNlMVx1OTNkMVx1OTNkZlx1OTNjM1x1OTNjOFx1OTNkY1x1OTNkZFx1OTNkNlx1''@;'; put 'put ''OTNlMlx1OTNjZFx1OTNkOFx1OTNlNFx1OTNkN1x1OTNlOFx1OTVkY1x1OTZiNFx1OTZlM1x1OTcyYVx1OTcyN1x1OTc2MVx1OTdkY1x1OTdmYlx1OTg1ZVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE5NV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTk1XVtzXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''eVtjWzE5NV1bc11dPTQ5OTIwK3MsaFs0OTkyMCtzXT1jWzE5NV1bc10pO2ZvcihjWzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg1OFx1OTg1Ylx1OThiY1x1OTk0NVx1OTk0OVx1OWExNlx1OWExOVx1OWIwZFx1OWJlOFx1''@;'; put 'put ''OWJlN1x1OWJkNlx1OWJkYlx1OWQ4OVx1OWQ2MVx1OWQ3Mlx1OWQ2YVx1OWQ2Y1x1OWU5Mlx1OWU5N1x1OWU5M1x1OWViNFx1NTJmOFx1NTZhOFx1NTZiN1x1NTZiNlx1NTZiNFx1NTZiY1x1NThlNFx1NWI0MFx1NWI0M1x1NWI3ZFx1NWJmNlx1NWRjOVx1NjFmOFx1NjFmYVx1NjUxOFx1NjUx''@;'; put 'put ''NFx1NjUxOVx1NjZlNlx1NjcyN1x1NmFlY1x1NzAzZVx1NzAzMFx1NzAzMlx1NzIxMFx1NzM3Ylx1NzRjZlx1NzY2Mlx1NzY2NVx1NzkyNlx1NzkyYVx1NzkyY1x1NzkyYlx1N2FjN1x1N2FmNlx1N2M0Y1x1N2M0M1x1N2M0ZFx1N2NlZlx1N2NmMFx1OGZhZVx1N2U3ZFx1N2U3Y1x1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U4Mlx1N2Y0Y1x1ODAwMFx1ODFkYVx1ODI2Nlx1ODVmYlx1ODVmOVx1ODYxMVx1ODVmYVx1ODYwNlx1ODYwYlx1ODYwN1x1ODYwYVx1ODgxNFx1ODgxNVx1ODk2NFx1ODliYVx1ODlmOFx1OGI3MFx1OGI2Y1x1OGI2Nlx1OGI2Zlx1''@;'; put 'put ''OGI1Zlx1OGI2Ylx1OGQwZlx1OGQwZFx1OGU4OVx1OGU4MVx1OGU4NVx1OGU4Mlx1OTFiNFx1OTFjYlx1OTQxOFx1OTQwM1x1OTNmZFx1OTVlMVx1OTczMFx1OThjNFx1OTk1Mlx1OTk1MVx1OTlhOFx1OWEyYlx1OWEzMFx1OWEzN1x1OWEzNVx1OWMxM1x1OWMwZFx1OWU3OVx1OWViNVx1OWVl''@;'; put 'put ''OFx1OWYyZlx1OWY1Zlx1OWY2M1x1OWY2MVx1NTEzN1x1NTEzOFx1NTZjMVx1NTZjMFx1NTZjMlx1NTkxNFx1NWM2Y1x1NWRjZFx1NjFmY1x1NjFmZVx1NjUxZFx1NjUxY1x1NjU5NVx1NjZlOVx1NmFmYlx1NmIwNFx1NmFmYVx1NmJiMlx1NzA0Y1x1NzIxYlx1NzJhN1x1NzRkNlx1NzRkNFx1''@;'; put 'put ''NzY2OVx1NzdkM1x1N2M1MFx1N2U4Zlx1N2U4Y1x1N2ZiY1x1ODYxN1x1ODYyZFx1ODYxYVx1ODgyM1x1ODgyMlx1ODgyMVx1ODgxZlx1ODk2YVx1ODk2Y1x1ODliZFx1OGI3NFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE5Nl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMTk2XVtzXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoeVtjWzE5Nl1bc11dPTUwMTc2K3MsaFs1MDE3NitzXT1jWzE5Nl1bc10pO2ZvcihjWzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI3N1x1OGI3ZFx1OGQxM1x1OGU4YVx1OGU4ZFx1OGU4Ylx1OGY1Zlx1''@;'; put 'put ''OGZhZlx1OTFiYVx1OTQyZVx1OTQzM1x1OTQzNVx1OTQzYVx1OTQzOFx1OTQzMlx1OTQyYlx1OTVlMlx1OTczOFx1OTczOVx1OTczMlx1OTdmZlx1OTg2N1x1OTg2NVx1OTk1N1x1OWE0NVx1OWE0M1x1OWE0MFx1OWEzZVx1OWFjZlx1OWI1NFx1OWI1MVx1OWMyZFx1OWMyNVx1OWRhZlx1OWRi''@;'; put 'put ''NFx1OWRjMlx1OWRiOFx1OWU5ZFx1OWVlZlx1OWYxOVx1OWY1Y1x1OWY2Nlx1OWY2N1x1NTEzY1x1NTEzYlx1NTZjOFx1NTZjYVx1NTZjOVx1NWI3Zlx1NWRkNFx1NWRkMlx1NWY0ZVx1NjFmZlx1NjUyNFx1NmIwYVx1NmI2MVx1NzA1MVx1NzA1OFx1NzM4MFx1NzRlNFx1NzU4YVx1NzY2ZVx1''@;'; put 'put ''NzY2Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzliM1x1N2M2MFx1N2M1Zlx1ODA3ZVx1ODA3ZFx1ODFkZlx1ODk3Mlx1ODk2Zlx1ODlmY1x1OGI4MFx1OGQxNlx1OGQxN1x1OGU5MVx1OGU5M1x1OGY2MVx1OTE0OFx1OTQ0NFx1OTQ1MVx1OTQ1Mlx1OTczZFx1''@;'; put 'put ''OTczZVx1OTdjM1x1OTdjMVx1OTg2Ylx1OTk1NVx1OWE1NVx1OWE0ZFx1OWFkMlx1OWIxYVx1OWM0OVx1OWMzMVx1OWMzZVx1OWMzYlx1OWRkM1x1OWRkN1x1OWYzNFx1OWY2Y1x1OWY2YVx1OWY5NFx1NTZjY1x1NWRkNlx1NjIwMFx1NjUyM1x1NjUyYlx1NjUyYVx1NjZlY1x1NmIxMFx1NzRk''@;'; put 'put ''YVx1N2FjYVx1N2M2NFx1N2M2M1x1N2M2NVx1N2U5M1x1N2U5Nlx1N2U5NFx1ODFlMlx1ODYzOFx1ODYzZlx1ODgzMVx1OGI4YVx1OTA5MFx1OTA4Zlx1OTQ2M1x1OTQ2MFx1OTQ2NFx1OTc2OFx1OTg2Zlx1OTk1Y1x1OWE1YVx1OWE1Ylx1OWE1N1x1OWFkM1x1OWFkNFx1OWFkMVx1OWM1NFx1''@;'; put 'put ''OWM1N1x1OWM1Nlx1OWRlNVx1OWU5Zlx1OWVmNFx1NTZkMVx1NThlOVx1NjUyY1x1NzA1ZVx1NzY3MVx1NzY3Mlx1NzdkN1x1N2Y1MFx1N2Y4OFx1ODgzNlx1ODgzOVx1ODg2Mlx1OGI5M1x1OGI5Mlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE5N10ubGVuZ3RoOysrcyk2NTUzMyE9PWNb''@;'; put 'put ''MTk3XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE5N11bc11dPTUwNDMyK3MsaFs1MDQzMitzXT1jWzE5N11bc10pO2ZvcihjWzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI5Nlx1ODI3N1x1OGQxYlx1OTFjMFx1OTQ2YVx1''@;'; put 'put ''OTc0Mlx1OTc0OFx1OTc0NFx1OTdjNlx1OTg3MFx1OWE1Zlx1OWIyMlx1OWI1OFx1OWM1Zlx1OWRmOVx1OWRmYVx1OWU3Y1x1OWU3ZFx1OWYwN1x1OWY3N1x1OWY3Mlx1NWVmM1x1NmIxNlx1NzA2M1x1N2M2Y1x1N2M2ZVx1ODgzYlx1ODljMFx1OGVhMVx1OTFjMVx1OTQ3Mlx1OTQ3MFx1OTg3''@;'; put 'put ''MVx1OTk1ZVx1OWFkNlx1OWIyM1x1OWVjY1x1NzA2NFx1NzdkYVx1OGI5YVx1OTQ3N1x1OTdjOVx1OWE2Mlx1OWE2NVx1N2U5Y1x1OGI5Y1x1OGVhYVx1OTFjNVx1OTQ3ZFx1OTQ3ZVx1OTQ3Y1x1OWM3N1x1OWM3OFx1OWVmN1x1OGM1NFx1OTQ3Zlx1OWUxYVx1NzIyOFx1OWE2YVx1OWIzMVx1''@;'; put 'put ''OWUxYlx1OWUxZVx1N2M3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzE5OF0ubGVuZ3RoOysr''@;'; put 'put ''cyk2NTUzMyE9PWNbMTk4XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzE5OF1bc11dPTUwNjg4K3MsaFs1MDY4OCtzXT1jWzE5OF1bc10pO2ZvcihjWzIwMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGU0Mlx1NGU1Y1x1NTFmNVx1''@;'; put 'put ''NTMxYVx1NTM4Mlx1NGUwN1x1NGUwY1x1NGU0N1x1NGU4ZFx1NTZkN1x1ZmEwY1x1NWM2ZVx1NWY3M1x1NGUwZlx1NTE4N1x1NGUwZVx1NGUyZVx1NGU5M1x1NGVjMlx1NGVjOVx1NGVjOFx1NTE5OFx1NTJmY1x1NTM2Y1x1NTNiOVx1NTcyMFx1NTkwM1x1NTkyY1x1NWMxMFx1NWRmZlx1NjVl''@;'; put 'put ''MVx1NmJiM1x1NmJjY1x1NmMxNFx1NzIzZlx1NGUzMVx1NGUzY1x1NGVlOFx1NGVkY1x1NGVlOVx1NGVlMVx1NGVkZFx1NGVkYVx1NTIwY1x1NTMxY1x1NTM0Y1x1NTcyMlx1NTcyM1x1NTkxN1x1NTkyZlx1NWI4MVx1NWI4NFx1NWMxMlx1NWMzYlx1NWM3NFx1NWM3M1x1NWUwNFx1NWU4MFx1''@;'; put 'put ''NWU4Mlx1NWZjOVx1NjIwOVx1NjI1MFx1NmMxNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmMzNlx1NmM0M1x1NmMzZlx1NmMzYlx1NzJhZVx1NzJiMFx1NzM4YVx1NzliOFx1ODA4YVx1OTYxZVx1NGYwZVx1NGYxOFx1NGYyY1x1NGVmNVx1NGYxNFx1NGVmMVx1''@;'; put 'put ''NGYwMFx1NGVmN1x1NGYwOFx1NGYxZFx1NGYwMlx1NGYwNVx1NGYyMlx1NGYxM1x1NGYwNFx1NGVmNFx1NGYxMlx1NTFiMVx1NTIxM1x1NTIwOVx1NTIxMFx1NTJhNlx1NTMyMlx1NTMxZlx1NTM0ZFx1NTM4YVx1NTQwN1x1NTZlMVx1NTZkZlx1NTcyZVx1NTcyYVx1NTczNFx1NTkzY1x1NTk4''@;'; put 'put ''MFx1NTk3Y1x1NTk4NVx1NTk3Ylx1NTk3ZVx1NTk3N1x1NTk3Zlx1NWI1Nlx1NWMxNVx1NWMyNVx1NWM3Y1x1NWM3YVx1NWM3Ylx1NWM3ZVx1NWRkZlx1NWU3NVx1NWU4NFx1NWYwMlx1NWYxYVx1NWY3NFx1NWZkNVx1NWZkNFx1NWZjZlx1NjI1Y1x1NjI1ZVx1NjI2NFx1NjI2MVx1NjI2Nlx1''@;'; put 'put ''NjI2Mlx1NjI1OVx1NjI2MFx1NjI1YVx1NjI2NVx1NjVlZlx1NjVlZVx1NjczZVx1NjczOVx1NjczOFx1NjczYlx1NjczYVx1NjczZlx1NjczY1x1NjczM1x1NmMxOFx1NmM0Nlx1NmM1Mlx1NmM1Y1x1NmM0Zlx1NmM0YVx1NmM1NFx1NmM0Ylx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIw''@;'; put 'put ''MV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjAxXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIwMV1bc11dPTUxNDU2K3MsaFs1MTQ1NitzXT1jWzIwMV1bc10pO2ZvcihjWzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM0Y1x1''@;'; put 'put ''NzA3MVx1NzI1ZVx1NzJiNFx1NzJiNVx1NzM4ZVx1NzUyYVx1NzY3Zlx1N2E3NVx1N2Y1MVx1ODI3OFx1ODI3Y1x1ODI4MFx1ODI3ZFx1ODI3Zlx1ODY0ZFx1ODk3ZVx1OTA5OVx1OTA5N1x1OTA5OFx1OTA5Ylx1OTA5NFx1OTYyMlx1OTYyNFx1OTYyMFx1OTYyM1x1NGY1Nlx1NGYzYlx1NGY2''@;'; put 'put ''Mlx1NGY0OVx1NGY1M1x1NGY2NFx1NGYzZVx1NGY2N1x1NGY1Mlx1NGY1Zlx1NGY0MVx1NGY1OFx1NGYyZFx1NGYzM1x1NGYzZlx1NGY2MVx1NTE4Zlx1NTFiOVx1NTIxY1x1NTIxZVx1NTIyMVx1NTJhZFx1NTJhZVx1NTMwOVx1NTM2M1x1NTM3Mlx1NTM4ZVx1NTM4Zlx1NTQzMFx1NTQzN1x1''@;'; put 'put ''NTQyYVx1NTQ1NFx1NTQ0NVx1NTQxOVx1NTQxY1x1NTQyNVx1NTQxOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQzZFx1NTQ0Zlx1NTQ0MVx1NTQyOFx1NTQyNFx1NTQ0N1x1NTZlZVx1NTZlN1x1NTZlNVx1NTc0MVx1NTc0NVx1NTc0Y1x1NTc0OVx1NTc0Ylx1''@;'; put 'put ''NTc1Mlx1NTkwNlx1NTk0MFx1NTlhNlx1NTk5OFx1NTlhMFx1NTk5N1x1NTk4ZVx1NTlhMlx1NTk5MFx1NTk4Zlx1NTlhN1x1NTlhMVx1NWI4ZVx1NWI5Mlx1NWMyOFx1NWMyYVx1NWM4ZFx1NWM4Zlx1NWM4OFx1NWM4Ylx1NWM4OVx1NWM5Mlx1NWM4YVx1NWM4Nlx1NWM5M1x1NWM5NVx1NWRl''@;'; put 'put ''MFx1NWUwYVx1NWUwZVx1NWU4Ylx1NWU4OVx1NWU4Y1x1NWU4OFx1NWU4ZFx1NWYwNVx1NWYxZFx1NWY3OFx1NWY3Nlx1NWZkMlx1NWZkMVx1NWZkMFx1NWZlZFx1NWZlOFx1NWZlZVx1NWZmM1x1NWZlMVx1NWZlNFx1NWZlM1x1NWZmYVx1NWZlZlx1NWZmN1x1NWZmYlx1NjAwMFx1NWZmNFx1''@;'; put 'put ''NjIzYVx1NjI4M1x1NjI4Y1x1NjI4ZVx1NjI4Zlx1NjI5NFx1NjI4N1x1NjI3MVx1NjI3Ylx1NjI3YVx1NjI3MFx1NjI4MVx1NjI4OFx1NjI3N1x1NjI3ZFx1NjI3Mlx1NjI3NFx1NjUzN1x1NjVmMFx1NjVmNFx1NjVmM1x1NjVmMlx1NjVmNVx1Njc0NVx1Njc0N1x1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LHM9MDtzIT1jWzIwMl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjAyXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIwMl1bc11dPTUxNzEyK3MsaFs1MTcxMitzXT1jWzIwMl1bc10pO2ZvcihjWzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1Njc1OVx1Njc1NVx1Njc0Y1x1Njc0OFx1Njc1ZFx1Njc0ZFx1Njc1YVx1Njc0Ylx1NmJkMFx1NmMxOVx1NmMxYVx1NmM3OFx1NmM2N1x1NmM2Ylx1NmM4NFx1NmM4Ylx1NmM4Zlx1NmM3MVx1NmM2Zlx1NmM2OVx1NmM5YVx1NmM2ZFx1NmM4N1x1NmM5NVx1NmM5Y1x1NmM2Nlx1NmM3''@;'; put 'put ''M1x1NmM2NVx1NmM3Ylx1NmM4ZVx1NzA3NFx1NzA3YVx1NzI2M1x1NzJiZlx1NzJiZFx1NzJjM1x1NzJjNlx1NzJjMVx1NzJiYVx1NzJjNVx1NzM5NVx1NzM5N1x1NzM5M1x1NzM5NFx1NzM5Mlx1NzUzYVx1NzUzOVx1NzU5NFx1NzU5NVx1NzY4MVx1NzkzZFx1ODAzNFx1ODA5NVx1ODA5OVx1''@;'; put 'put ''ODA5MFx1ODA5Mlx1ODA5Y1x1ODI5MFx1ODI4Zlx1ODI4NVx1ODI4ZVx1ODI5MVx1ODI5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODI4YVx1ODI4M1x1ODI4NFx1OGM3OFx1OGZjOVx1OGZiZlx1OTA5Zlx1OTBhMVx1OTBhNVx1OTA5ZVx1OTBhN1x1OTBhMFx1''@;'; put 'put ''OTYzMFx1OTYyOFx1OTYyZlx1OTYyZFx1NGUzM1x1NGY5OFx1NGY3Y1x1NGY4NVx1NGY3ZFx1NGY4MFx1NGY4N1x1NGY3Nlx1NGY3NFx1NGY4OVx1NGY4NFx1NGY3N1x1NGY0Y1x1NGY5N1x1NGY2YVx1NGY5YVx1NGY3OVx1NGY4MVx1NGY3OFx1NGY5MFx1NGY5Y1x1NGY5NFx1NGY5ZVx1NGY5''@;'; put 'put ''Mlx1NGY4Mlx1NGY5NVx1NGY2Ylx1NGY2ZVx1NTE5ZVx1NTFiY1x1NTFiZVx1NTIzNVx1NTIzMlx1NTIzM1x1NTI0Nlx1NTIzMVx1NTJiY1x1NTMwYVx1NTMwYlx1NTMzY1x1NTM5Mlx1NTM5NFx1NTQ4N1x1NTQ3Zlx1NTQ4MVx1NTQ5MVx1NTQ4Mlx1NTQ4OFx1NTQ2Ylx1NTQ3YVx1NTQ3ZVx1''@;'; put 'put ''NTQ2NVx1NTQ2Y1x1NTQ3NFx1NTQ2Nlx1NTQ4ZFx1NTQ2Zlx1NTQ2MVx1NTQ2MFx1NTQ5OFx1NTQ2M1x1NTQ2N1x1NTQ2NFx1NTZmN1x1NTZmOVx1NTc2Zlx1NTc3Mlx1NTc2ZFx1NTc2Ylx1NTc3MVx1NTc3MFx1NTc3Nlx1NTc4MFx1NTc3NVx1NTc3Ylx1NTc3M1x1NTc3NFx1NTc2Mlx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIwM10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjAzXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIwM11bc11dPTUxOTY4K3MsaFs1MTk2OCtzXT1jWzIwM11bc10pO2ZvcihjWzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1NTc2OFx1NTc3ZFx1NTkwY1x1NTk0NVx1NTliNVx1NTliYVx1NTljZlx1NTljZVx1NTliMlx1NTljY1x1NTljMVx1NTliNlx1NTliY1x1NTljM1x1NTlkNlx1NTliMVx1NTliZFx1NTljMFx1NTljOFx1NTliNFx1NTljN1x1NWI2Mlx1NWI2NVx1NWI5M1x1NWI5''@;'; put 'put ''NVx1NWM0NFx1NWM0N1x1NWNhZVx1NWNhNFx1NWNhMFx1NWNiNVx1NWNhZlx1NWNhOFx1NWNhY1x1NWM5Zlx1NWNhM1x1NWNhZFx1NWNhMlx1NWNhYVx1NWNhN1x1NWM5ZFx1NWNhNVx1NWNiNlx1NWNiMFx1NWNhNlx1NWUxN1x1NWUxNFx1NWUxOVx1NWYyOFx1NWYyMlx1NWYyM1x1NWYyNFx1''@;'; put 'put ''NWY1NFx1NWY4Mlx1NWY3ZVx1NWY3ZFx1NWZkZVx1NWZlNVx1NjAyZFx1NjAyNlx1NjAxOVx1NjAzMlx1NjAwYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAzNFx1NjAwYVx1NjAxN1x1NjAzM1x1NjAxYVx1NjAxZVx1NjAyY1x1NjAyMlx1NjAwZFx1NjAxMFx1''@;'; put 'put ''NjAyZVx1NjAxM1x1NjAxMVx1NjAwY1x1NjAwOVx1NjAxY1x1NjIxNFx1NjIzZFx1NjJhZFx1NjJiNFx1NjJkMVx1NjJiZVx1NjJhYVx1NjJiNlx1NjJjYVx1NjJhZVx1NjJiM1x1NjJhZlx1NjJiYlx1NjJhOVx1NjJiMFx1NjJiOFx1NjUzZFx1NjVhOFx1NjViYlx1NjYwOVx1NjVmY1x1NjYw''@;'; put 'put ''NFx1NjYxMlx1NjYwOFx1NjVmYlx1NjYwM1x1NjYwYlx1NjYwZFx1NjYwNVx1NjVmZFx1NjYxMVx1NjYxMFx1NjZmNlx1NjcwYVx1Njc4NVx1Njc2Y1x1Njc4ZVx1Njc5Mlx1Njc3Nlx1Njc3Ylx1Njc5OFx1Njc4Nlx1Njc4NFx1Njc3NFx1Njc4ZFx1Njc4Y1x1Njc3YVx1Njc5Zlx1Njc5MVx1''@;'; put 'put ''Njc5OVx1Njc4M1x1Njc3ZFx1Njc4MVx1Njc3OFx1Njc3OVx1Njc5NFx1NmIyNVx1NmI4MFx1NmI3ZVx1NmJkZVx1NmMxZFx1NmM5M1x1NmNlY1x1NmNlYlx1NmNlZVx1NmNkOVx1NmNiNlx1NmNkNFx1NmNhZFx1NmNlN1x1NmNiN1x1NmNkMFx1NmNjMlx1NmNiYVx1NmNjM1x1NmNjNlx1NmNl''@;'; put 'put ''ZFx1NmNmMlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIwNF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjA0XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIwNF1bc11dPTUyMjI0K3MsaFs1MjIyNCtzXT1jWzIwNF1bc10pO2ZvcihjWzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmNkMlx1NmNkZFx1NmNiNFx1NmM4YVx1NmM5ZFx1NmM4MFx1NmNkZVx1NmNjMFx1NmQzMFx1NmNjZFx1NmNjN1x1NmNiMFx1NmNmOVx1NmNjZlx1NmNlOVx1NmNkMVx1NzA5NFx1NzA5OFx1NzA4NVx1NzA5M1x1NzA4Nlx1NzA4NFx1NzA5''@;'; put 'put ''MVx1NzA5Nlx1NzA4Mlx1NzA5YVx1NzA4M1x1NzI2YVx1NzJkNlx1NzJjYlx1NzJkOFx1NzJjOVx1NzJkY1x1NzJkMlx1NzJkNFx1NzJkYVx1NzJjY1x1NzJkMVx1NzNhNFx1NzNhMVx1NzNhZFx1NzNhNlx1NzNhMlx1NzNhMFx1NzNhY1x1NzM5ZFx1NzRkZFx1NzRlOFx1NzUzZlx1NzU0MFx1''@;'; put 'put ''NzUzZVx1NzU4Y1x1NzU5OFx1NzZhZlx1NzZmM1x1NzZmMVx1NzZmMFx1NzZmNVx1NzdmOFx1NzdmY1x1NzdmOVx1NzdmYlx1NzdmYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdmN1x1Nzk0Mlx1NzkzZlx1NzljNVx1N2E3OFx1N2E3Ylx1N2FmYlx1N2M3NVx1''@;'; put 'put ''N2NmZFx1ODAzNVx1ODA4Zlx1ODBhZVx1ODBhM1x1ODBiOFx1ODBiNVx1ODBhZFx1ODIyMFx1ODJhMFx1ODJjMFx1ODJhYlx1ODI5YVx1ODI5OFx1ODI5Ylx1ODJiNVx1ODJhN1x1ODJhZVx1ODJiY1x1ODI5ZVx1ODJiYVx1ODJiNFx1ODJhOFx1ODJhMVx1ODJhOVx1ODJjMlx1ODJhNFx1ODJj''@;'; put 'put ''M1x1ODJiNlx1ODJhMlx1ODY3MFx1ODY2Zlx1ODY2ZFx1ODY2ZVx1OGM1Nlx1OGZkMlx1OGZjYlx1OGZkM1x1OGZjZFx1OGZkNlx1OGZkNVx1OGZkN1x1OTBiMlx1OTBiNFx1OTBhZlx1OTBiM1x1OTBiMFx1OTYzOVx1OTYzZFx1OTYzY1x1OTYzYVx1OTY0M1x1NGZjZFx1NGZjNVx1NGZkM1x1''@;'; put 'put ''NGZiMlx1NGZjOVx1NGZjYlx1NGZjMVx1NGZkNFx1NGZkY1x1NGZkOVx1NGZiYlx1NGZiM1x1NGZkYlx1NGZjN1x1NGZkNlx1NGZiYVx1NGZjMFx1NGZiOVx1NGZlY1x1NTI0NFx1NTI0OVx1NTJjMFx1NTJjMlx1NTMzZFx1NTM3Y1x1NTM5N1x1NTM5Nlx1NTM5OVx1NTM5OFx1NTRiYVx1NTRh''@;'; put 'put ''MVx1NTRhZFx1NTRhNVx1NTRjZlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIwNV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjA1XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIwNV1bc11dPTUyNDgwK3MsaFs1MjQ4MCtzXT1jWzIwNV1bc10pO2ZvcihjWzIwNl09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjM1x1ODMwZFx1NTRiN1x1NTRhZVx1NTRkNlx1NTRiNlx1NTRjNVx1NTRjNlx1NTRhMFx1NTQ3MFx1NTRiY1x1NTRhMlx1NTRiZVx1NTQ3Mlx1NTRkZVx1NTRiMFx1NTdiNVx1NTc5ZVx1NTc5Zlx1NTdhNFx1NTc4''@;'; put 'put ''Y1x1NTc5N1x1NTc5ZFx1NTc5Ylx1NTc5NFx1NTc5OFx1NTc4Zlx1NTc5OVx1NTdhNVx1NTc5YVx1NTc5NVx1NThmNFx1NTkwZFx1NTk1M1x1NTllMVx1NTlkZVx1NTllZVx1NWEwMFx1NTlmMVx1NTlkZFx1NTlmYVx1NTlmZFx1NTlmY1x1NTlmNlx1NTllNFx1NTlmMlx1NTlmN1x1NTlkYlx1''@;'; put 'put ''NTllOVx1NTlmM1x1NTlmNVx1NTllMFx1NTlmZVx1NTlmNFx1NTllZFx1NWJhOFx1NWM0Y1x1NWNkMFx1NWNkOFx1NWNjY1x1NWNkN1x1NWNjYlx1NWNkYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWNkZVx1NWNkYVx1NWNjOVx1NWNjN1x1NWNjYVx1NWNkNlx1''@;'; put 'put ''NWNkM1x1NWNkNFx1NWNjZlx1NWNjOFx1NWNjNlx1NWNjZVx1NWNkZlx1NWNmOFx1NWRmOVx1NWUyMVx1NWUyMlx1NWUyM1x1NWUyMFx1NWUyNFx1NWViMFx1NWVhNFx1NWVhMlx1NWU5Ylx1NWVhM1x1NWVhNVx1NWYwN1x1NWYyZVx1NWY1Nlx1NWY4Nlx1NjAzN1x1NjAzOVx1NjA1NFx1NjA3''@;'; put 'put ''Mlx1NjA1ZVx1NjA0NVx1NjA1M1x1NjA0N1x1NjA0OVx1NjA1Ylx1NjA0Y1x1NjA0MFx1NjA0Mlx1NjA1Zlx1NjAyNFx1NjA0NFx1NjA1OFx1NjA2Nlx1NjA2ZVx1NjI0Mlx1NjI0M1x1NjJjZlx1NjMwZFx1NjMwYlx1NjJmNVx1NjMwZVx1NjMwM1x1NjJlYlx1NjJmOVx1NjMwZlx1NjMwY1x1''@;'; put 'put ''NjJmOFx1NjJmNlx1NjMwMFx1NjMxM1x1NjMxNFx1NjJmYVx1NjMxNVx1NjJmYlx1NjJmMFx1NjU0MVx1NjU0M1x1NjVhYVx1NjViZlx1NjYzNlx1NjYyMVx1NjYzMlx1NjYzNVx1NjYxY1x1NjYyNlx1NjYyMlx1NjYzM1x1NjYyYlx1NjYzYVx1NjYxZFx1NjYzNFx1NjYzOVx1NjYyZVx1Njcw''@;'; put 'put ''Zlx1NjcxMFx1NjdjMVx1NjdmMlx1NjdjOFx1NjdiYVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIwNl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjA2XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIwNl1bc11dPTUyNzM2K3MsaFs1MjczNitzXT1jWzIwNl1bc10pO2ZvcihjWzIwN109Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjdkY1x1NjdiYlx1NjdmOFx1NjdkOFx1NjdjMFx1NjdiN1x1NjdjNVx1NjdlYlx1NjdlNFx1NjdkZlx1NjdiNVx1NjdjZFx1NjdiM1x1NjdmN1x1NjdmNlx1NjdlZVx1NjdlM1x1NjdjMlx1Njdi''@;'; put 'put ''OVx1NjdjZVx1NjdlN1x1NjdmMFx1NjdiMlx1NjdmY1x1NjdjNlx1NjdlZFx1NjdjY1x1NjdhZVx1NjdlNlx1NjdkYlx1NjdmYVx1NjdjOVx1NjdjYVx1NjdjM1x1NjdlYVx1NjdjYlx1NmIyOFx1NmI4Mlx1NmI4NFx1NmJiNlx1NmJkNlx1NmJkOFx1NmJlMFx1NmMyMFx1NmMyMVx1NmQyOFx1''@;'; put 'put ''NmQzNFx1NmQyZFx1NmQxZlx1NmQzY1x1NmQzZlx1NmQxMlx1NmQwYVx1NmNkYVx1NmQzM1x1NmQwNFx1NmQxOVx1NmQzYVx1NmQxYVx1NmQxMVx1NmQwMFx1NmQxZFx1NmQ0Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQwMVx1NmQxOFx1NmQzN1x1NmQwM1x1''@;'; put 'put ''NmQwZlx1NmQ0MFx1NmQwN1x1NmQyMFx1NmQyY1x1NmQwOFx1NmQyMlx1NmQwOVx1NmQxMFx1NzBiN1x1NzA5Zlx1NzBiZVx1NzBiMVx1NzBiMFx1NzBhMVx1NzBiNFx1NzBiNVx1NzBhOVx1NzI0MVx1NzI0OVx1NzI0YVx1NzI2Y1x1NzI3MFx1NzI3M1x1NzI2ZVx1NzJjYVx1NzJlNFx1NzJl''@;'; put 'put ''OFx1NzJlYlx1NzJkZlx1NzJlYVx1NzJlNlx1NzJlM1x1NzM4NVx1NzNjY1x1NzNjMlx1NzNjOFx1NzNjNVx1NzNiOVx1NzNiNlx1NzNiNVx1NzNiNFx1NzNlYlx1NzNiZlx1NzNjN1x1NzNiZVx1NzNjM1x1NzNjNlx1NzNiOFx1NzNjYlx1NzRlY1x1NzRlZVx1NzUyZVx1NzU0N1x1NzU0OFx1''@;'; put 'put ''NzVhN1x1NzVhYVx1NzY3OVx1NzZjNFx1NzcwOFx1NzcwM1x1NzcwNFx1NzcwNVx1NzcwYVx1NzZmN1x1NzZmYlx1NzZmYVx1NzdlN1x1NzdlOFx1NzgwNlx1NzgxMVx1NzgxMlx1NzgwNVx1NzgxMFx1NzgwZlx1NzgwZVx1NzgwOVx1NzgwM1x1NzgxM1x1Nzk0YVx1Nzk0Y1x1Nzk0Ylx1Nzk0''@;'; put 'put ''NVx1Nzk0NFx1NzlkNVx1NzljZFx1NzljZlx1NzlkNlx1NzljZVx1N2E4MFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIwN10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjA3XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIwN11bc11dPTUyOTkyK3MsaFs1Mjk5MitzXT1jWzIwN11bc10pO2Zv''@;'; put 'put ''cihjWzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E3ZVx1N2FkMVx1N2IwMFx1N2IwMVx1N2M3YVx1N2M3OFx1N2M3OVx1N2M3Zlx1N2M4MFx1N2M4MVx1N2QwM1x1N2QwOFx1N2QwMVx1N2Y1OFx1N2Y5MVx1N2Y4ZFx1N2Zi''@;'; put 'put ''ZVx1ODAwN1x1ODAwZVx1ODAwZlx1ODAxNFx1ODAzN1x1ODBkOFx1ODBjN1x1ODBlMFx1ODBkMVx1ODBjOFx1ODBjMlx1ODBkMFx1ODBjNVx1ODBlM1x1ODBkOVx1ODBkY1x1ODBjYVx1ODBkNVx1ODBjOVx1ODBjZlx1ODBkN1x1ODBlNlx1ODBjZFx1ODFmZlx1ODIyMVx1ODI5NFx1ODJkOVx1''@;'; put 'put ''ODJmZVx1ODJmOVx1ODMwN1x1ODJlOFx1ODMwMFx1ODJkNVx1ODMzYVx1ODJlYlx1ODJkNlx1ODJmNFx1ODJlY1x1ODJlMVx1ODJmMlx1ODJmNVx1ODMwY1x1ODJmYlx1ODJmNlx1ODJmMFx1ODJlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODJlNFx1ODJlMFx1''@;'; put 'put ''ODJmYVx1ODJmM1x1ODJlZFx1ODY3N1x1ODY3NFx1ODY3Y1x1ODY3M1x1ODg0MVx1ODg0ZVx1ODg2N1x1ODg2YVx1ODg2OVx1ODlkM1x1OGEwNFx1OGEwN1x1OGQ3Mlx1OGZlM1x1OGZlMVx1OGZlZVx1OGZlMFx1OTBmMVx1OTBiZFx1OTBiZlx1OTBkNVx1OTBjNVx1OTBiZVx1OTBjN1x1OTBj''@;'; put 'put ''Ylx1OTBjOFx1OTFkNFx1OTFkM1x1OTY1NFx1OTY0Zlx1OTY1MVx1OTY1M1x1OTY0YVx1OTY0ZVx1NTAxZVx1NTAwNVx1NTAwN1x1NTAxM1x1NTAyMlx1NTAzMFx1NTAxYlx1NGZmNVx1NGZmNFx1NTAzM1x1NTAzN1x1NTAyY1x1NGZmNlx1NGZmN1x1NTAxN1x1NTAxY1x1NTAyMFx1NTAyN1x1''@;'; put 'put ''NTAzNVx1NTAyZlx1NTAzMVx1NTAwZVx1NTE1YVx1NTE5NFx1NTE5M1x1NTFjYVx1NTFjNFx1NTFjNVx1NTFjOFx1NTFjZVx1NTI2MVx1NTI1YVx1NTI1Mlx1NTI1ZVx1NTI1Zlx1NTI1NVx1NTI2Mlx1NTJjZFx1NTMwZVx1NTM5ZVx1NTUyNlx1NTRlMlx1NTUxN1x1NTUxMlx1NTRlN1x1NTRm''@;'; put 'put ''M1x1NTRlNFx1NTUxYVx1NTRmZlx1NTUwNFx1NTUwOFx1NTRlYlx1NTUxMVx1NTUwNVx1NTRmMVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIwOF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjA4XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIwOF1bc11dPTUzMjQ4K3MsaFs1MzI0OCtzXT1j''@;'; put 'put ''WzIwOF1bc10pO2ZvcihjWzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTUwYVx1NTRmYlx1NTRmN1x1NTRmOFx1NTRlMFx1NTUwZVx1NTUwM1x1NTUwYlx1NTcwMVx1NTcwMlx1NTdjY1x1NTgzMlx1NTdkNVx1NTdkMlx1NTdi''@;'; put 'put ''YVx1NTdjNlx1NTdiZFx1NTdiY1x1NTdiOFx1NTdiNlx1NTdiZlx1NTdjN1x1NTdkMFx1NTdiOVx1NTdjMVx1NTkwZVx1NTk0YVx1NWExOVx1NWExNlx1NWEyZFx1NWEyZVx1NWExNVx1NWEwZlx1NWExN1x1NWEwYVx1NWExZVx1NWEzM1x1NWI2Y1x1NWJhN1x1NWJhZFx1NWJhY1x1NWMwM1x1''@;'; put 'put ''NWM1Nlx1NWM1NFx1NWNlY1x1NWNmZlx1NWNlZVx1NWNmMVx1NWNmN1x1NWQwMFx1NWNmOVx1NWUyOVx1NWUyOFx1NWVhOFx1NWVhZVx1NWVhYVx1NWVhY1x1NWYzM1x1NWYzMFx1NWY2N1x1NjA1ZFx1NjA1YVx1NjA2N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''NjA0MVx1NjBhMlx1NjA4OFx1NjA4MFx1NjA5Mlx1NjA4MVx1NjA5ZFx1NjA4M1x1NjA5NVx1NjA5Ylx1NjA5N1x1NjA4N1x1NjA5Y1x1NjA4ZVx1NjIxOVx1NjI0Nlx1NjJmMlx1NjMxMFx1NjM1Nlx1NjMyY1x1NjM0NFx1NjM0NVx1NjMzNlx1NjM0M1x1NjNlNFx1NjMzOVx1NjM0Ylx1NjM0''@;'; put 'put ''YVx1NjMzY1x1NjMyOVx1NjM0MVx1NjMzNFx1NjM1OFx1NjM1NFx1NjM1OVx1NjMyZFx1NjM0N1x1NjMzM1x1NjM1YVx1NjM1MVx1NjMzOFx1NjM1N1x1NjM0MFx1NjM0OFx1NjU0YVx1NjU0Nlx1NjVjNlx1NjVjM1x1NjVjNFx1NjVjMlx1NjY0YVx1NjY1Zlx1NjY0N1x1NjY1MVx1NjcxMlx1''@;'; put 'put ''NjcxM1x1NjgxZlx1NjgxYVx1Njg0OVx1NjgzMlx1NjgzM1x1NjgzYlx1Njg0Ylx1Njg0Zlx1NjgxNlx1NjgzMVx1NjgxY1x1NjgzNVx1NjgyYlx1NjgyZFx1NjgyZlx1Njg0ZVx1Njg0NFx1NjgzNFx1NjgxZFx1NjgxMlx1NjgxNFx1NjgyNlx1NjgyOFx1NjgyZVx1Njg0ZFx1NjgzYVx1Njgy''@;'; put 'put ''NVx1NjgyMFx1NmIyY1x1NmIyZlx1NmIyZFx1NmIzMVx1NmIzNFx1NmI2ZFx1ODA4Mlx1NmI4OFx1NmJlNlx1NmJlNFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIwOV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjA5XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIwOV1bc11dPTUzNTA0K3Ms''@;'; put 'put ''aFs1MzUwNCtzXT1jWzIwOV1bc10pO2ZvcihjWzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJlOFx1NmJlM1x1NmJlMlx1NmJlN1x1NmMyNVx1NmQ3YVx1NmQ2M1x1NmQ2NFx1NmQ3Nlx1NmQwZFx1NmQ2MVx1NmQ5Mlx1NmQ1''@;'; put 'put ''OFx1NmQ2Mlx1NmQ2ZFx1NmQ2Zlx1NmQ5MVx1NmQ4ZFx1NmRlZlx1NmQ3Zlx1NmQ4Nlx1NmQ1ZVx1NmQ2N1x1NmQ2MFx1NmQ5N1x1NmQ3MFx1NmQ3Y1x1NmQ1Zlx1NmQ4Mlx1NmQ5OFx1NmQyZlx1NmQ2OFx1NmQ4Ylx1NmQ3ZVx1NmQ4MFx1NmQ4NFx1NmQxNlx1NmQ4M1x1NmQ3Ylx1NmQ3ZFx1''@;'; put 'put ''NmQ3NVx1NmQ5MFx1NzBkY1x1NzBkM1x1NzBkMVx1NzBkZFx1NzBjYlx1N2YzOVx1NzBlMlx1NzBkN1x1NzBkMlx1NzBkZVx1NzBlMFx1NzBkNFx1NzBjZFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBkYVx1NzBjZVx1NzBlMVx1NzI0Mlx1NzI3OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1NzI3N1x1NzI3Nlx1NzMwMFx1NzJmYVx1NzJmNFx1NzJmZVx1NzJmNlx1NzJmM1x1NzJmYlx1NzMwMVx1NzNkM1x1NzNkOVx1NzNlNVx1NzNkNlx1NzNiY1x1NzNlN1x1NzNlM1x1NzNlOVx1NzNkY1x1NzNkMlx1NzNkYlx1NzNkNFx1NzNkZFx1NzNkYVx1NzNkN1x1NzNk''@;'; put 'put ''OFx1NzNlOFx1NzRkZVx1NzRkZlx1NzRmNFx1NzRmNVx1NzUyMVx1NzU1Ylx1NzU1Zlx1NzViMFx1NzVjMVx1NzViYlx1NzVjNFx1NzVjMFx1NzViZlx1NzViNlx1NzViYVx1NzY4YVx1NzZjOVx1NzcxZFx1NzcxYlx1NzcxMFx1NzcxM1x1NzcxMlx1NzcyM1x1NzcxMVx1NzcxNVx1NzcxOVx1''@;'; put 'put ''NzcxYVx1NzcyMlx1NzcyN1x1NzgyM1x1NzgyY1x1NzgyMlx1NzgzNVx1NzgyZlx1NzgyOFx1NzgyZVx1NzgyYlx1NzgyMVx1NzgyOVx1NzgzM1x1NzgyYVx1NzgzMVx1Nzk1NFx1Nzk1Ylx1Nzk0Zlx1Nzk1Y1x1Nzk1M1x1Nzk1Mlx1Nzk1MVx1NzllYlx1NzllY1x1NzllMFx1NzllZVx1Nzll''@;'; put 'put ''ZFx1NzllYVx1NzlkY1x1NzlkZVx1NzlkZFx1N2E4Nlx1N2E4OVx1N2E4NVx1N2E4Ylx1N2E4Y1x1N2E4YVx1N2E4N1x1N2FkOFx1N2IxMFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIxMF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjEwXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIxMF1b''@;'; put 'put ''c11dPTUzNzYwK3MsaFs1Mzc2MCtzXT1jWzIxMF1bc10pO2ZvcihjWzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2IwNFx1N2IxM1x1N2IwNVx1N2IwZlx1N2IwOFx1N2IwYVx1N2IwZVx1N2IwOVx1N2IxMlx1N2M4NFx1N2M5''@;'; put 'put ''MVx1N2M4YVx1N2M4Y1x1N2M4OFx1N2M4ZFx1N2M4NVx1N2QxZVx1N2QxZFx1N2QxMVx1N2QwZVx1N2QxOFx1N2QxNlx1N2QxM1x1N2QxZlx1N2QxMlx1N2QwZlx1N2QwY1x1N2Y1Y1x1N2Y2MVx1N2Y1ZVx1N2Y2MFx1N2Y1ZFx1N2Y1Ylx1N2Y5Nlx1N2Y5Mlx1N2ZjM1x1N2ZjMlx1N2ZjMFx1''@;'; put 'put ''ODAxNlx1ODAzZVx1ODAzOVx1ODBmYVx1ODBmMlx1ODBmOVx1ODBmNVx1ODEwMVx1ODBmYlx1ODEwMFx1ODIwMVx1ODIyZlx1ODIyNVx1ODMzM1x1ODMyZFx1ODM0NFx1ODMxOVx1ODM1MVx1ODMyNVx1ODM1Nlx1ODMzZlx1ODM0MVx1ODMyNlx1ODMxY1x1ODMyMlx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM0Mlx1ODM0ZVx1ODMxYlx1ODMyYVx1ODMwOFx1ODMzY1x1ODM0ZFx1ODMxNlx1ODMyNFx1ODMyMFx1ODMzN1x1ODMyZlx1ODMyOVx1ODM0N1x1ODM0NVx1ODM0Y1x1ODM1M1x1ODMxZVx1ODMyY1x1ODM0Ylx1ODMyN1x1ODM0OFx1ODY1M1x1ODY1''@;'; put 'put ''Mlx1ODZhMlx1ODZhOFx1ODY5Nlx1ODY4ZFx1ODY5MVx1ODY5ZVx1ODY4N1x1ODY5N1x1ODY4Nlx1ODY4Ylx1ODY5YVx1ODY4NVx1ODZhNVx1ODY5OVx1ODZhMVx1ODZhN1x1ODY5NVx1ODY5OFx1ODY4ZVx1ODY5ZFx1ODY5MFx1ODY5NFx1ODg0M1x1ODg0NFx1ODg2ZFx1ODg3NVx1ODg3Nlx1''@;'; put 'put ''ODg3Mlx1ODg4MFx1ODg3MVx1ODg3Zlx1ODg2Zlx1ODg4M1x1ODg3ZVx1ODg3NFx1ODg3Y1x1OGExMlx1OGM0N1x1OGM1N1x1OGM3Ylx1OGNhNFx1OGNhM1x1OGQ3Nlx1OGQ3OFx1OGRiNVx1OGRiN1x1OGRiNlx1OGVkMVx1OGVkM1x1OGZmZVx1OGZmNVx1OTAwMlx1OGZmZlx1OGZmYlx1OTAw''@;'; put 'put ''NFx1OGZmY1x1OGZmNlx1OTBkNlx1OTBlMFx1OTBkOVx1OTBkYVx1OTBlM1x1OTBkZlx1OTBlNVx1OTBkOFx1OTBkYlx1OTBkN1x1OTBkY1x1OTBlNFx1OTE1MFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIxMV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjExXVtzXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoeVtjWzIxMV1bc11dPTU0MDE2K3MsaFs1NDAxNitzXT1jWzIxMV1bc10pO2ZvcihjWzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTE0ZVx1OTE0Zlx1OTFkNVx1OTFlMlx1OTFkYVx1OTY1Y1x1OTY1Zlx1OTZiY1x1OThl''@;'; put 'put ''M1x1OWFkZlx1OWIyZlx1NGU3Zlx1NTA3MFx1NTA2YVx1NTA2MVx1NTA1ZVx1NTA2MFx1NTA1M1x1NTA0Ylx1NTA1ZFx1NTA3Mlx1NTA0OFx1NTA0ZFx1NTA0MVx1NTA1Ylx1NTA0YVx1NTA2Mlx1NTAxNVx1NTA0NVx1NTA1Zlx1NTA2OVx1NTA2Ylx1NTA2M1x1NTA2NFx1NTA0Nlx1NTA0MFx1''@;'; put 'put ''NTA2ZVx1NTA3M1x1NTA1N1x1NTA1MVx1NTFkMFx1NTI2Ylx1NTI2ZFx1NTI2Y1x1NTI2ZVx1NTJkNlx1NTJkM1x1NTMyZFx1NTM5Y1x1NTU3NVx1NTU3Nlx1NTUzY1x1NTU0ZFx1NTU1MFx1NTUzNFx1NTUyYVx1NTU1MVx1NTU2Mlx1NTUzNlx1NTUzNVx1NTUzMFx1NTU1Mlx1NTU0NVx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTUwY1x1NTUzMlx1NTU2NVx1NTU0ZVx1NTUzOVx1NTU0OFx1NTUyZFx1NTUzYlx1NTU0MFx1NTU0Ylx1NTcwYVx1NTcwN1x1NTdmYlx1NTgxNFx1NTdlMlx1NTdmNlx1NTdkY1x1NTdmNFx1NTgwMFx1NTdlZFx1NTdmZFx1NTgw''@;'; put 'put ''OFx1NTdmOFx1NTgwYlx1NTdmM1x1NTdjZlx1NTgwN1x1NTdlZVx1NTdlM1x1NTdmMlx1NTdlNVx1NTdlY1x1NTdlMVx1NTgwZVx1NTdmY1x1NTgxMFx1NTdlN1x1NTgwMVx1NTgwY1x1NTdmMVx1NTdlOVx1NTdmMFx1NTgwZFx1NTgwNFx1NTk1Y1x1NWE2MFx1NWE1OFx1NWE1NVx1NWE2N1x1''@;'; put 'put ''NWE1ZVx1NWEzOFx1NWEzNVx1NWE2ZFx1NWE1MFx1NWE1Zlx1NWE2NVx1NWE2Y1x1NWE1M1x1NWE2NFx1NWE1N1x1NWE0M1x1NWE1ZFx1NWE1Mlx1NWE0NFx1NWE1Ylx1NWE0OFx1NWE4ZVx1NWEzZVx1NWE0ZFx1NWEzOVx1NWE0Y1x1NWE3MFx1NWE2OVx1NWE0N1x1NWE1MVx1NWE1Nlx1NWE0''@;'; put 'put ''Mlx1NWE1Y1x1NWI3Mlx1NWI2ZVx1NWJjMVx1NWJjMFx1NWM1OVx1NWQxZVx1NWQwYlx1NWQxZFx1NWQxYVx1NWQyMFx1NWQwY1x1NWQyOFx1NWQwZFx1NWQyNlx1NWQyNVx1NWQwZlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIxMl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjEyXVtzXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoeVtjWzIxMl1bc11dPTU0MjcyK3MsaFs1NDI3MitzXT1jWzIxMl1bc10pO2ZvcihjWzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWQzMFx1NWQxMlx1NWQyM1x1NWQxZlx1NWQyZVx1NWUzZVx1NWUz''@;'; put 'put ''NFx1NWViMVx1NWViNFx1NWViOVx1NWViMlx1NWViM1x1NWYzNlx1NWYzOFx1NWY5Ylx1NWY5Nlx1NWY5Zlx1NjA4YVx1NjA5MFx1NjA4Nlx1NjBiZVx1NjBiMFx1NjBiYVx1NjBkM1x1NjBkNFx1NjBjZlx1NjBlNFx1NjBkOVx1NjBkZFx1NjBjOFx1NjBiMVx1NjBkYlx1NjBiN1x1NjBjYVx1''@;'; put 'put ''NjBiZlx1NjBjM1x1NjBjZFx1NjBjMFx1NjMzMlx1NjM2NVx1NjM4YVx1NjM4Mlx1NjM3ZFx1NjNiZFx1NjM5ZVx1NjNhZFx1NjM5ZFx1NjM5N1x1NjNhYlx1NjM4ZVx1NjM2Zlx1NjM4N1x1NjM5MFx1NjM2ZVx1NjNhZlx1NjM3NVx1NjM5Y1x1NjM2ZFx1NjNhZVx1NjM3Y1x1NjNhNFx1NjMz''@;'; put 'put ''Ylx1NjM5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjM3OFx1NjM4NVx1NjM4MVx1NjM5MVx1NjM4ZFx1NjM3MFx1NjU1M1x1NjVjZFx1NjY2NVx1NjY2MVx1NjY1Ylx1NjY1OVx1NjY1Y1x1NjY2Mlx1NjcxOFx1Njg3OVx1Njg4N1x1Njg5MFx1Njg5Y1x1Njg2''@;'; put 'put ''ZFx1Njg2ZVx1NjhhZVx1NjhhYlx1Njk1Nlx1Njg2Zlx1NjhhM1x1NjhhY1x1NjhhOVx1Njg3NVx1Njg3NFx1NjhiMlx1Njg4Zlx1Njg3N1x1Njg5Mlx1Njg3Y1x1Njg2Ylx1Njg3Mlx1NjhhYVx1Njg4MFx1Njg3MVx1Njg3ZVx1Njg5Ylx1Njg5Nlx1Njg4Ylx1NjhhMFx1Njg4OVx1NjhhNFx1''@;'; put 'put ''Njg3OFx1Njg3Ylx1Njg5MVx1Njg4Y1x1Njg4YVx1Njg3ZFx1NmIzNlx1NmIzM1x1NmIzN1x1NmIzOFx1NmI5MVx1NmI4Zlx1NmI4ZFx1NmI4ZVx1NmI4Y1x1NmMyYVx1NmRjMFx1NmRhYlx1NmRiNFx1NmRiM1x1NmU3NFx1NmRhY1x1NmRlOVx1NmRlMlx1NmRiN1x1NmRmNlx1NmRkNFx1NmUw''@;'; put 'put ''MFx1NmRjOFx1NmRlMFx1NmRkZlx1NmRkNlx1NmRiZVx1NmRlNVx1NmRkY1x1NmRkZFx1NmRkYlx1NmRmNFx1NmRjYVx1NmRiZFx1NmRlZFx1NmRmMFx1NmRiYVx1NmRkNVx1NmRjMlx1NmRjZlx1NmRjOVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIxM10ubGVuZ3RoOysrcyk2NTUzMyE9''@;'; put 'put ''PWNbMjEzXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIxM11bc11dPTU0NTI4K3MsaFs1NDUyOCtzXT1jWzIxM11bc10pO2ZvcihjWzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmRkMFx1NmRmMlx1NmRkM1x1NmRmZFx1NmRk''@;'; put 'put ''N1x1NmRjZFx1NmRlM1x1NmRiYlx1NzBmYVx1NzEwZFx1NzBmN1x1NzExN1x1NzBmNFx1NzEwY1x1NzBmMFx1NzEwNFx1NzBmM1x1NzExMFx1NzBmY1x1NzBmZlx1NzEwNlx1NzExM1x1NzEwMFx1NzBmOFx1NzBmNlx1NzEwYlx1NzEwMlx1NzEwZVx1NzI3ZVx1NzI3Ylx1NzI3Y1x1NzI3Zlx1''@;'; put 'put ''NzMxZFx1NzMxN1x1NzMwN1x1NzMxMVx1NzMxOFx1NzMwYVx1NzMwOFx1NzJmZlx1NzMwZlx1NzMxZVx1NzM4OFx1NzNmNlx1NzNmOFx1NzNmNVx1NzQwNFx1NzQwMVx1NzNmZFx1NzQwN1x1NzQwMFx1NzNmYVx1NzNmY1x1NzNmZlx1NzQwY1x1NzQwYlx1NzNmNFx1NzQwOFx1NzU2NFx1NzU2''@;'; put 'put ''M1x1NzVjZVx1NzVkMlx1NzVjZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzVjYlx1NzVjY1x1NzVkMVx1NzVkMFx1NzY4Zlx1NzY4OVx1NzZkM1x1NzczOVx1NzcyZlx1NzcyZFx1NzczMVx1NzczMlx1NzczNFx1NzczM1x1NzczZFx1NzcyNVx1NzczYlx1Nzcz''@;'; put 'put ''NVx1Nzg0OFx1Nzg1Mlx1Nzg0OVx1Nzg0ZFx1Nzg0YVx1Nzg0Y1x1NzgyNlx1Nzg0NVx1Nzg1MFx1Nzk2NFx1Nzk2N1x1Nzk2OVx1Nzk2YVx1Nzk2M1x1Nzk2Ylx1Nzk2MVx1NzliYlx1NzlmYVx1NzlmOFx1NzlmNlx1NzlmN1x1N2E4Zlx1N2E5NFx1N2E5MFx1N2IzNVx1N2I0N1x1N2IzNFx1''@;'; put 'put ''N2IyNVx1N2IzMFx1N2IyMlx1N2IyNFx1N2IzM1x1N2IxOFx1N2IyYVx1N2IxZFx1N2IzMVx1N2IyYlx1N2IyZFx1N2IyZlx1N2IzMlx1N2IzOFx1N2IxYVx1N2IyM1x1N2M5NFx1N2M5OFx1N2M5Nlx1N2NhM1x1N2QzNVx1N2QzZFx1N2QzOFx1N2QzNlx1N2QzYVx1N2Q0NVx1N2QyY1x1N2Qy''@;'; put 'put ''OVx1N2Q0MVx1N2Q0N1x1N2QzZVx1N2QzZlx1N2Q0YVx1N2QzYlx1N2QyOFx1N2Y2M1x1N2Y5NVx1N2Y5Y1x1N2Y5ZFx1N2Y5Ylx1N2ZjYVx1N2ZjYlx1N2ZjZFx1N2ZkMFx1N2ZkMVx1N2ZjN1x1N2ZjZlx1N2ZjOVx1ODAxZlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIxNF0ubGVuZ3Ro''@;'; put 'put ''Oysrcyk2NTUzMyE9PWNbMjE0XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIxNF1bc11dPTU0Nzg0K3MsaFs1NDc4NCtzXT1jWzIxNF1bc10pO2ZvcihjWzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODAxZVx1ODAxYlx1ODA0''@;'; put 'put ''N1x1ODA0M1x1ODA0OFx1ODExOFx1ODEyNVx1ODExOVx1ODExYlx1ODEyZFx1ODExZlx1ODEyY1x1ODExZVx1ODEyMVx1ODExNVx1ODEyN1x1ODExZFx1ODEyMlx1ODIxMVx1ODIzOFx1ODIzM1x1ODIzYVx1ODIzNFx1ODIzMlx1ODI3NFx1ODM5MFx1ODNhM1x1ODNhOFx1ODM4ZFx1ODM3YVx1''@;'; put 'put ''ODM3M1x1ODNhNFx1ODM3NFx1ODM4Zlx1ODM4MVx1ODM5NVx1ODM5OVx1ODM3NVx1ODM5NFx1ODNhOVx1ODM3ZFx1ODM4M1x1ODM4Y1x1ODM5ZFx1ODM5Ylx1ODNhYVx1ODM4Ylx1ODM3ZVx1ODNhNVx1ODNhZlx1ODM4OFx1ODM5N1x1ODNiMFx1ODM3Zlx1ODNhNlx1ODM4N1x1ODNhZVx1ODM3''@;'; put 'put ''Nlx1ODM5YVx1ODY1OVx1ODY1Nlx1ODZiZlx1ODZiN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODZjMlx1ODZjMVx1ODZjNVx1ODZiYVx1ODZiMFx1ODZjOFx1ODZiOVx1ODZiM1x1ODZiOFx1ODZjY1x1ODZiNFx1ODZiYlx1ODZiY1x1ODZjM1x1ODZiZFx1ODZi''@;'; put 'put ''ZVx1ODg1Mlx1ODg4OVx1ODg5NVx1ODhhOFx1ODhhMlx1ODhhYVx1ODg5YVx1ODg5MVx1ODhhMVx1ODg5Zlx1ODg5OFx1ODhhN1x1ODg5OVx1ODg5Ylx1ODg5N1x1ODhhNFx1ODhhY1x1ODg4Y1x1ODg5M1x1ODg4ZVx1ODk4Mlx1ODlkNlx1ODlkOVx1ODlkNVx1OGEzMFx1OGEyN1x1OGEyY1x1''@;'; put 'put ''OGExZVx1OGMzOVx1OGMzYlx1OGM1Y1x1OGM1ZFx1OGM3ZFx1OGNhNVx1OGQ3ZFx1OGQ3Ylx1OGQ3OVx1OGRiY1x1OGRjMlx1OGRiOVx1OGRiZlx1OGRjMVx1OGVkOFx1OGVkZVx1OGVkZFx1OGVkY1x1OGVkN1x1OGVlMFx1OGVlMVx1OTAyNFx1OTAwYlx1OTAxMVx1OTAxY1x1OTAwY1x1OTAy''@;'; put 'put ''MVx1OTBlZlx1OTBlYVx1OTBmMFx1OTBmNFx1OTBmMlx1OTBmM1x1OTBkNFx1OTBlYlx1OTBlY1x1OTBlOVx1OTE1Nlx1OTE1OFx1OTE1YVx1OTE1M1x1OTE1NVx1OTFlY1x1OTFmNFx1OTFmMVx1OTFmM1x1OTFmOFx1OTFlNFx1OTFmOVx1OTFlYVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1j''@;'; put 'put ''WzIxNV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjE1XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIxNV1bc11dPTU1MDQwK3MsaFs1NTA0MCtzXT1jWzIxNV1bc10pO2ZvcihjWzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTFl''@;'; put 'put ''Ylx1OTFmN1x1OTFlOFx1OTFlZVx1OTU3YVx1OTU4Nlx1OTU4OFx1OTY3Y1x1OTY2ZFx1OTY2Ylx1OTY3MVx1OTY2Zlx1OTZiZlx1OTc2YVx1OTgwNFx1OThlNVx1OTk5N1x1NTA5Ylx1NTA5NVx1NTA5NFx1NTA5ZVx1NTA4Ylx1NTBhM1x1NTA4M1x1NTA4Y1x1NTA4ZVx1NTA5ZFx1NTA2OFx1''@;'; put 'put ''NTA5Y1x1NTA5Mlx1NTA4Mlx1NTA4N1x1NTE1Zlx1NTFkNFx1NTMxMlx1NTMxMVx1NTNhNFx1NTNhN1x1NTU5MVx1NTVhOFx1NTVhNVx1NTVhZFx1NTU3N1x1NTY0NVx1NTVhMlx1NTU5M1x1NTU4OFx1NTU4Zlx1NTViNVx1NTU4MVx1NTVhM1x1NTU5Mlx1NTVhNFx1NTU3ZFx1NTU4Y1x1NTVh''@;'; put 'put ''Nlx1NTU3Zlx1NTU5NVx1NTVhMVx1NTU4ZVx1NTcwY1x1NTgyOVx1NTgzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTgxOVx1NTgxZVx1NTgyN1x1NTgyM1x1NTgyOFx1NTdmNVx1NTg0OFx1NTgyNVx1NTgxY1x1NTgxYlx1NTgzM1x1NTgzZlx1NTgzNlx1NTgy''@;'; put 'put ''ZVx1NTgzOVx1NTgzOFx1NTgyZFx1NTgyY1x1NTgzYlx1NTk2MVx1NWFhZlx1NWE5NFx1NWE5Zlx1NWE3YVx1NWFhMlx1NWE5ZVx1NWE3OFx1NWFhNlx1NWE3Y1x1NWFhNVx1NWFhY1x1NWE5NVx1NWFhZVx1NWEzN1x1NWE4NFx1NWE4YVx1NWE5N1x1NWE4M1x1NWE4Ylx1NWFhOVx1NWE3Ylx1''@;'; put 'put ''NWE3ZFx1NWE4Y1x1NWE5Y1x1NWE4Zlx1NWE5M1x1NWE5ZFx1NWJlYVx1NWJjZFx1NWJjYlx1NWJkNFx1NWJkMVx1NWJjYVx1NWJjZVx1NWMwY1x1NWMzMFx1NWQzN1x1NWQ0M1x1NWQ2Ylx1NWQ0MVx1NWQ0Ylx1NWQzZlx1NWQzNVx1NWQ1MVx1NWQ0ZVx1NWQ1NVx1NWQzM1x1NWQzYVx1NWQ1''@;'; put 'put ''Mlx1NWQzZFx1NWQzMVx1NWQ1OVx1NWQ0Mlx1NWQzOVx1NWQ0OVx1NWQzOFx1NWQzY1x1NWQzMlx1NWQzNlx1NWQ0MFx1NWQ0NVx1NWU0NFx1NWU0MVx1NWY1OFx1NWZhNlx1NWZhNVx1NWZhYlx1NjBjOVx1NjBiOVx1NjBjY1x1NjBlMlx1NjBjZVx1NjBjNFx1NjExNFx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLHM9MDtzIT1jWzIxNl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjE2XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIxNl1bc11dPTU1Mjk2K3MsaFs1NTI5NitzXT1jWzIxNl1bc10pO2ZvcihjWzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1NjBmMlx1NjEwYVx1NjExNlx1NjEwNVx1NjBmNVx1NjExM1x1NjBmOFx1NjBmY1x1NjBmZVx1NjBjMVx1NjEwM1x1NjExOFx1NjExZFx1NjExMFx1NjBmZlx1NjEwNFx1NjEwYlx1NjI0YVx1NjM5NFx1NjNiMVx1NjNiMFx1NjNjZVx1NjNlNVx1NjNlOFx1NjNlZlx1NjNjM1x1''@;'; put 'put ''NjQ5ZFx1NjNmM1x1NjNjYVx1NjNlMFx1NjNmNlx1NjNkNVx1NjNmMlx1NjNmNVx1NjQ2MVx1NjNkZlx1NjNiZVx1NjNkZFx1NjNkY1x1NjNjNFx1NjNkOFx1NjNkM1x1NjNjMlx1NjNjN1x1NjNjY1x1NjNjYlx1NjNjOFx1NjNmMFx1NjNkN1x1NjNkOVx1NjUzMlx1NjU2N1x1NjU2YVx1NjU2''@;'; put 'put ''NFx1NjU1Y1x1NjU2OFx1NjU2NVx1NjU4Y1x1NjU5ZFx1NjU5ZVx1NjVhZVx1NjVkMFx1NjVkMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjY3Y1x1NjY2Y1x1NjY3Ylx1NjY4MFx1NjY3MVx1NjY3OVx1NjY2YVx1NjY3Mlx1NjcwMVx1NjkwY1x1NjhkM1x1Njkw''@;'; put 'put ''NFx1NjhkY1x1NjkyYVx1NjhlY1x1NjhlYVx1NjhmMVx1NjkwZlx1NjhkNlx1NjhmN1x1NjhlYlx1NjhlNFx1NjhmNlx1NjkxM1x1NjkxMFx1NjhmM1x1NjhlMVx1NjkwN1x1NjhjY1x1NjkwOFx1Njk3MFx1NjhiNFx1NjkxMVx1NjhlZlx1NjhjNlx1NjkxNFx1NjhmOFx1NjhkMFx1NjhmZFx1''@;'; put 'put ''NjhmY1x1NjhlOFx1NjkwYlx1NjkwYVx1NjkxN1x1NjhjZVx1NjhjOFx1NjhkZFx1NjhkZVx1NjhlNlx1NjhmNFx1NjhkMVx1NjkwNlx1NjhkNFx1NjhlOVx1NjkxNVx1NjkyNVx1NjhjN1x1NmIzOVx1NmIzYlx1NmIzZlx1NmIzY1x1NmI5NFx1NmI5N1x1NmI5OVx1NmI5NVx1NmJiZFx1NmJm''@;'; put 'put ''MFx1NmJmMlx1NmJmM1x1NmMzMFx1NmRmY1x1NmU0Nlx1NmU0N1x1NmUxZlx1NmU0OVx1NmU4OFx1NmUzY1x1NmUzZFx1NmU0NVx1NmU2Mlx1NmUyYlx1NmUzZlx1NmU0MVx1NmU1ZFx1NmU3M1x1NmUxY1x1NmUzM1x1NmU0Ylx1NmU0MFx1NmU1MVx1NmUzYlx1NmUwM1x1NmUyZVx1NmU1ZVx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIxN10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjE3XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIxN11bc11dPTU1NTUyK3MsaFs1NTU1MitzXT1jWzIxN11bc10pO2ZvcihjWzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmU2OFx1NmU1Y1x1NmU2MVx1NmUzMVx1NmUyOFx1NmU2MFx1NmU3MVx1NmU2Ylx1NmUzOVx1NmUyMlx1NmUzMFx1NmU1M1x1NmU2NVx1NmUyN1x1NmU3OFx1NmU2NFx1NmU3N1x1NmU1NVx1NmU3OVx1NmU1Mlx1NmU2Nlx1NmUzNVx1NmUzNlx1NmU1YVx1''@;'; put 'put ''NzEyMFx1NzExZVx1NzEyZlx1NzBmYlx1NzEyZVx1NzEzMVx1NzEyM1x1NzEyNVx1NzEyMlx1NzEzMlx1NzExZlx1NzEyOFx1NzEzYVx1NzExYlx1NzI0Ylx1NzI1YVx1NzI4OFx1NzI4OVx1NzI4Nlx1NzI4NVx1NzI4Ylx1NzMxMlx1NzMwYlx1NzMzMFx1NzMyMlx1NzMzMVx1NzMzM1x1NzMy''@;'; put 'put ''N1x1NzMzMlx1NzMyZFx1NzMyNlx1NzMyM1x1NzMzNVx1NzMwY1x1NzQyZVx1NzQyY1x1NzQzMFx1NzQyYlx1NzQxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQxYVx1NzQyMVx1NzQyZFx1NzQzMVx1NzQyNFx1NzQyM1x1NzQxZFx1NzQyOVx1NzQyMFx1NzQz''@;'; put 'put ''Mlx1NzRmYlx1NzUyZlx1NzU2Zlx1NzU2Y1x1NzVlN1x1NzVkYVx1NzVlMVx1NzVlNlx1NzVkZFx1NzVkZlx1NzVlNFx1NzVkN1x1NzY5NVx1NzY5Mlx1NzZkYVx1Nzc0Nlx1Nzc0N1x1Nzc0NFx1Nzc0ZFx1Nzc0NVx1Nzc0YVx1Nzc0ZVx1Nzc0Ylx1Nzc0Y1x1NzdkZVx1NzdlY1x1Nzg2MFx1''@;'; put 'put ''Nzg2NFx1Nzg2NVx1Nzg1Y1x1Nzg2ZFx1Nzg3MVx1Nzg2YVx1Nzg2ZVx1Nzg3MFx1Nzg2OVx1Nzg2OFx1Nzg1ZVx1Nzg2Mlx1Nzk3NFx1Nzk3M1x1Nzk3Mlx1Nzk3MFx1N2EwMlx1N2EwYVx1N2EwM1x1N2EwY1x1N2EwNFx1N2E5OVx1N2FlNlx1N2FlNFx1N2I0YVx1N2IzYlx1N2I0NFx1N2I0''@;'; put 'put ''OFx1N2I0Y1x1N2I0ZVx1N2I0MFx1N2I1OFx1N2I0NVx1N2NhMlx1N2M5ZVx1N2NhOFx1N2NhMVx1N2Q1OFx1N2Q2Zlx1N2Q2M1x1N2Q1M1x1N2Q1Nlx1N2Q2N1x1N2Q2YVx1N2Q0Zlx1N2Q2ZFx1N2Q1Y1x1N2Q2Ylx1N2Q1Mlx1N2Q1NFx1N2Q2OVx1N2Q1MVx1N2Q1Zlx1N2Q0ZVx1N2YzZVx1''@;'; put 'put ''N2YzZlx1N2Y2NVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIxOF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjE4XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIxOF1bc11dPTU1ODA4K3MsaFs1NTgwOCtzXT1jWzIxOF1bc10pO2ZvcihjWzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y2Nlx1N2ZhMlx1N2ZhMFx1N2ZhMVx1N2ZkN1x1ODA1MVx1ODA0Zlx1ODA1MFx1ODBmZVx1ODBkNFx1ODE0M1x1ODE0YVx1ODE1Mlx1ODE0Zlx1ODE0N1x1ODEzZFx1ODE0ZFx1ODEzYVx1ODFlNlx1ODFlZVx1ODFmN1x1ODFmOFx1''@;'; put 'put ''ODFmOVx1ODIwNFx1ODIzY1x1ODIzZFx1ODIzZlx1ODI3NVx1ODMzYlx1ODNjZlx1ODNmOVx1ODQyM1x1ODNjMFx1ODNlOFx1ODQxMlx1ODNlN1x1ODNlNFx1ODNmY1x1ODNmNlx1ODQxMFx1ODNjNlx1ODNjOFx1ODNlYlx1ODNlM1x1ODNiZlx1ODQwMVx1ODNkZFx1ODNlNVx1ODNkOFx1ODNm''@;'; put 'put ''Zlx1ODNlMVx1ODNjYlx1ODNjZVx1ODNkNlx1ODNmNVx1ODNjOVx1ODQwOVx1ODQwZlx1ODNkZVx1ODQxMVx1ODQwNlx1ODNjMlx1ODNmM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODNkNVx1ODNmYVx1ODNjN1x1ODNkMVx1ODNlYVx1ODQxM1x1ODNjM1x1ODNl''@;'; put 'put ''Y1x1ODNlZVx1ODNjNFx1ODNmYlx1ODNkN1x1ODNlMlx1ODQxYlx1ODNkYlx1ODNmZVx1ODZkOFx1ODZlMlx1ODZlNlx1ODZkM1x1ODZlM1x1ODZkYVx1ODZlYVx1ODZkZFx1ODZlYlx1ODZkY1x1ODZlY1x1ODZlOVx1ODZkN1x1ODZlOFx1ODZkMVx1ODg0OFx1ODg1Nlx1ODg1NVx1ODhiYVx1''@;'; put 'put ''ODhkN1x1ODhiOVx1ODhiOFx1ODhjMFx1ODhiZVx1ODhiNlx1ODhiY1x1ODhiN1x1ODhiZFx1ODhiMlx1ODkwMVx1ODhjOVx1ODk5NVx1ODk5OFx1ODk5N1x1ODlkZFx1ODlkYVx1ODlkYlx1OGE0ZVx1OGE0ZFx1OGEzOVx1OGE1OVx1OGE0MFx1OGE1N1x1OGE1OFx1OGE0NFx1OGE0NVx1OGE1''@;'; put 'put ''Mlx1OGE0OFx1OGE1MVx1OGE0YVx1OGE0Y1x1OGE0Zlx1OGM1Zlx1OGM4MVx1OGM4MFx1OGNiYVx1OGNiZVx1OGNiMFx1OGNiOVx1OGNiNVx1OGQ4NFx1OGQ4MFx1OGQ4OVx1OGRkOFx1OGRkM1x1OGRjZFx1OGRjN1x1OGRkNlx1OGRkY1x1OGRjZlx1OGRkNVx1OGRkOVx1OGRjOFx1OGRkN1x1''@;'; put 'put ''OGRjNVx1OGVlZlx1OGVmN1x1OGVmYVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIxOV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjE5XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIxOV1bc11dPTU2MDY0K3MsaFs1NjA2NCtzXT1jWzIxOV1bc10pO2ZvcihjWzIyMF09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGVmOVx1OGVlNlx1OGVlZVx1OGVlNVx1OGVmNVx1OGVlN1x1OGVlOFx1OGVmNlx1OGVlYlx1OGVmMVx1OGVlY1x1OGVmNFx1OGVlOVx1OTAyZFx1OTAzNFx1OTAyZlx1OTEwNlx1OTEyY1x1OTEwNFx1OTBmZlx1''@;'; put 'put ''OTBmY1x1OTEwOFx1OTBmOVx1OTBmYlx1OTEwMVx1OTEwMFx1OTEwN1x1OTEwNVx1OTEwM1x1OTE2MVx1OTE2NFx1OTE1Zlx1OTE2Mlx1OTE2MFx1OTIwMVx1OTIwYVx1OTIyNVx1OTIwM1x1OTIxYVx1OTIyNlx1OTIwZlx1OTIwY1x1OTIwMFx1OTIxMlx1OTFmZlx1OTFmZFx1OTIwNlx1OTIw''@;'; put 'put ''NFx1OTIyN1x1OTIwMlx1OTIxY1x1OTIyNFx1OTIxOVx1OTIxN1x1OTIwNVx1OTIxNlx1OTU3Ylx1OTU4ZFx1OTU4Y1x1OTU5MFx1OTY4N1x1OTY3ZVx1OTY4OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4OVx1OTY4M1x1OTY4MFx1OTZjMlx1OTZjOFx1OTZj''@;'; put 'put ''M1x1OTZmMVx1OTZmMFx1OTc2Y1x1OTc3MFx1OTc2ZVx1OTgwN1x1OThhOVx1OThlYlx1OWNlNlx1OWVmOVx1NGU4M1x1NGU4NFx1NGViNlx1NTBiZFx1NTBiZlx1NTBjNlx1NTBhZVx1NTBjNFx1NTBjYVx1NTBiNFx1NTBjOFx1NTBjMlx1NTBiMFx1NTBjMVx1NTBiYVx1NTBiMVx1NTBjYlx1''@;'; put 'put ''NTBjOVx1NTBiNlx1NTBiOFx1NTFkN1x1NTI3YVx1NTI3OFx1NTI3Ylx1NTI3Y1x1NTVjM1x1NTVkYlx1NTVjY1x1NTVkMFx1NTVjYlx1NTVjYVx1NTVkZFx1NTVjMFx1NTVkNFx1NTVjNFx1NTVlOVx1NTViZlx1NTVkMlx1NTU4ZFx1NTVjZlx1NTVkNVx1NTVlMlx1NTVkNlx1NTVjOFx1NTVm''@;'; put 'put ''Mlx1NTVjZFx1NTVkOVx1NTVjMlx1NTcxNFx1NTg1M1x1NTg2OFx1NTg2NFx1NTg0Zlx1NTg0ZFx1NTg0OVx1NTg2Zlx1NTg1NVx1NTg0ZVx1NTg1ZFx1NTg1OVx1NTg2NVx1NTg1Ylx1NTgzZFx1NTg2M1x1NTg3MVx1NThmY1x1NWFjN1x1NWFjNFx1NWFjYlx1NWFiYVx1NWFiOFx1NWFiMVx1''@;'; put 'put ''NWFiNVx1NWFiMFx1NWFiZlx1NWFjOFx1NWFiYlx1NWFjNlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIyMF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjIwXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIyMF1bc11dPTU2MzIwK3MsaFs1NjMyMCtzXT1jWzIyMF1bc10pO2ZvcihjWzIyMV09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWFiN1x1NWFjMFx1NWFjYVx1NWFiNFx1NWFiNlx1NWFjZFx1NWFiOVx1NWE5MFx1NWJkNlx1NWJkOFx1NWJkOVx1NWMxZlx1NWMzM1x1NWQ3MVx1NWQ2M1x1NWQ0YVx1NWQ2NVx1NWQ3Mlx1''@;'; put 'put ''NWQ2Y1x1NWQ1ZVx1NWQ2OFx1NWQ2N1x1NWQ2Mlx1NWRmMFx1NWU0Zlx1NWU0ZVx1NWU0YVx1NWU0ZFx1NWU0Ylx1NWVjNVx1NWVjY1x1NWVjNlx1NWVjYlx1NWVjN1x1NWY0MFx1NWZhZlx1NWZhZFx1NjBmN1x1NjE0OVx1NjE0YVx1NjEyYlx1NjE0NVx1NjEzNlx1NjEzMlx1NjEyZVx1NjE0''@;'; put 'put ''Nlx1NjEyZlx1NjE0Zlx1NjEyOVx1NjE0MFx1NjIyMFx1OTE2OFx1NjIyM1x1NjIyNVx1NjIyNFx1NjNjNVx1NjNmMVx1NjNlYlx1NjQxMFx1NjQxMlx1NjQwOVx1NjQyMFx1NjQyNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjQzM1x1NjQ0M1x1NjQxZlx1NjQx''@;'; put 'put ''NVx1NjQxOFx1NjQzOVx1NjQzN1x1NjQyMlx1NjQyM1x1NjQwY1x1NjQyNlx1NjQzMFx1NjQyOFx1NjQ0MVx1NjQzNVx1NjQyZlx1NjQwYVx1NjQxYVx1NjQ0MFx1NjQyNVx1NjQyN1x1NjQwYlx1NjNlN1x1NjQxYlx1NjQyZVx1NjQyMVx1NjQwZVx1NjU2Zlx1NjU5Mlx1NjVkM1x1NjY4Nlx1''@;'; put 'put ''NjY4Y1x1NjY5NVx1NjY5MFx1NjY4Ylx1NjY4YVx1NjY5OVx1NjY5NFx1NjY3OFx1NjcyMFx1Njk2Nlx1Njk1Zlx1NjkzOFx1Njk0ZVx1Njk2Mlx1Njk3MVx1NjkzZlx1Njk0NVx1Njk2YVx1NjkzOVx1Njk0Mlx1Njk1N1x1Njk1OVx1Njk3YVx1Njk0OFx1Njk0OVx1NjkzNVx1Njk2Y1x1Njkz''@;'; put 'put ''M1x1NjkzZFx1Njk2NVx1NjhmMFx1Njk3OFx1NjkzNFx1Njk2OVx1Njk0MFx1Njk2Zlx1Njk0NFx1Njk3Nlx1Njk1OFx1Njk0MVx1Njk3NFx1Njk0Y1x1NjkzYlx1Njk0Ylx1NjkzN1x1Njk1Y1x1Njk0Zlx1Njk1MVx1NjkzMlx1Njk1Mlx1NjkyZlx1Njk3Ylx1NjkzY1x1NmI0Nlx1NmI0NVx1''@;'; put 'put ''NmI0M1x1NmI0Mlx1NmI0OFx1NmI0MVx1NmI5Ylx1ZmEwZFx1NmJmYlx1NmJmY1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIyMV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjIxXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIyMV1bc11dPTU2NTc2K3MsaFs1NjU3NitzXT1jWzIyMV1bc10p''@;'; put 'put ''O2ZvcihjWzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJmOVx1NmJmN1x1NmJmOFx1NmU5Ylx1NmVkNlx1NmVjOFx1NmU4Zlx1NmVjMFx1NmU5Zlx1NmU5M1x1NmU5NFx1NmVhMFx1NmViMVx1NmViOVx1NmVjNlx1NmVkMlx1''@;'; put 'put ''NmViZFx1NmVjMVx1NmU5ZVx1NmVjOVx1NmViN1x1NmViMFx1NmVjZFx1NmVhNlx1NmVjZlx1NmViMlx1NmViZVx1NmVjM1x1NmVkY1x1NmVkOFx1NmU5OVx1NmU5Mlx1NmU4ZVx1NmU4ZFx1NmVhNFx1NmVhMVx1NmViZlx1NmViM1x1NmVkMFx1NmVjYVx1NmU5N1x1NmVhZVx1NmVhM1x1NzE0''@;'; put 'put ''N1x1NzE1NFx1NzE1Mlx1NzE2M1x1NzE2MFx1NzE0MVx1NzE1ZFx1NzE2Mlx1NzE3Mlx1NzE3OFx1NzE2YVx1NzE2MVx1NzE0Mlx1NzE1OFx1NzE0M1x1NzE0Ylx1NzE3MFx1NzE1Zlx1NzE1MFx1NzE1M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0NFx1NzE0''@;'; put 'put ''ZFx1NzE1YVx1NzI0Zlx1NzI4ZFx1NzI4Y1x1NzI5MVx1NzI5MFx1NzI4ZVx1NzMzY1x1NzM0Mlx1NzMzYlx1NzMzYVx1NzM0MFx1NzM0YVx1NzM0OVx1NzQ0NFx1NzQ0YVx1NzQ0Ylx1NzQ1Mlx1NzQ1MVx1NzQ1N1x1NzQ0MFx1NzQ0Zlx1NzQ1MFx1NzQ0ZVx1NzQ0Mlx1NzQ0Nlx1NzQ0ZFx1''@;'; put 'put ''NzQ1NFx1NzRlMVx1NzRmZlx1NzRmZVx1NzRmZFx1NzUxZFx1NzU3OVx1NzU3N1x1Njk4M1x1NzVlZlx1NzYwZlx1NzYwM1x1NzVmN1x1NzVmZVx1NzVmY1x1NzVmOVx1NzVmOFx1NzYxMFx1NzVmYlx1NzVmNlx1NzVlZFx1NzVmNVx1NzVmZFx1NzY5OVx1NzZiNVx1NzZkZFx1Nzc1NVx1Nzc1''@;'; put 'put ''Zlx1Nzc2MFx1Nzc1Mlx1Nzc1Nlx1Nzc1YVx1Nzc2OVx1Nzc2N1x1Nzc1NFx1Nzc1OVx1Nzc2ZFx1NzdlMFx1Nzg4N1x1Nzg5YVx1Nzg5NFx1Nzg4Zlx1Nzg4NFx1Nzg5NVx1Nzg4NVx1Nzg4Nlx1NzhhMVx1Nzg4M1x1Nzg3OVx1Nzg5OVx1Nzg4MFx1Nzg5Nlx1Nzg3Ylx1Nzk3Y1x1Nzk4Mlx1''@;'; put 'put ''Nzk3ZFx1Nzk3OVx1N2ExMVx1N2ExOFx1N2ExOVx1N2ExMlx1N2ExN1x1N2ExNVx1N2EyMlx1N2ExM1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIyMl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjIyXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIyMl1bc11dPTU2ODMyK3MsaFs1NjgzMitz''@;'; put 'put ''XT1jWzIyMl1bc10pO2ZvcihjWzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ExYlx1N2ExMFx1N2FhM1x1N2FhMlx1N2E5ZVx1N2FlYlx1N2I2Nlx1N2I2NFx1N2I2ZFx1N2I3NFx1N2I2OVx1N2I3Mlx1N2I2NVx1N2I3M1x1''@;'; put 'put ''N2I3MVx1N2I3MFx1N2I2MVx1N2I3OFx1N2I3Nlx1N2I2M1x1N2NiMlx1N2NiNFx1N2NhZlx1N2Q4OFx1N2Q4Nlx1N2Q4MFx1N2Q4ZFx1N2Q3Zlx1N2Q4NVx1N2Q3YVx1N2Q4ZVx1N2Q3Ylx1N2Q4M1x1N2Q3Y1x1N2Q4Y1x1N2Q5NFx1N2Q4NFx1N2Q3ZFx1N2Q5Mlx1N2Y2ZFx1N2Y2Ylx1N2Y2''@;'; put 'put ''N1x1N2Y2OFx1N2Y2Y1x1N2ZhNlx1N2ZhNVx1N2ZhN1x1N2ZkYlx1N2ZkY1x1ODAyMVx1ODE2NFx1ODE2MFx1ODE3N1x1ODE1Y1x1ODE2OVx1ODE1Ylx1ODE2Mlx1ODE3Mlx1NjcyMVx1ODE1ZVx1ODE3Nlx1ODE2N1x1ODE2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ODE0NFx1ODE2MVx1ODIxZFx1ODI0OVx1ODI0NFx1ODI0MFx1ODI0Mlx1ODI0NVx1ODRmMVx1ODQzZlx1ODQ1Nlx1ODQ3Nlx1ODQ3OVx1ODQ4Zlx1ODQ4ZFx1ODQ2NVx1ODQ1MVx1ODQ0MFx1ODQ4Nlx1ODQ2N1x1ODQzMFx1ODQ0ZFx1ODQ3ZFx1ODQ1YVx1ODQ1OVx1ODQ3NFx1ODQ3M1x1''@;'; put 'put ''ODQ1ZFx1ODUwN1x1ODQ1ZVx1ODQzN1x1ODQzYVx1ODQzNFx1ODQ3YVx1ODQ0M1x1ODQ3OFx1ODQzMlx1ODQ0NVx1ODQyOVx1ODNkOVx1ODQ0Ylx1ODQyZlx1ODQ0Mlx1ODQyZFx1ODQ1Zlx1ODQ3MFx1ODQzOVx1ODQ0ZVx1ODQ0Y1x1ODQ1Mlx1ODQ2Zlx1ODRjNVx1ODQ4ZVx1ODQzYlx1ODQ0''@;'; put 'put ''N1x1ODQzNlx1ODQzM1x1ODQ2OFx1ODQ3ZVx1ODQ0NFx1ODQyYlx1ODQ2MFx1ODQ1NFx1ODQ2ZVx1ODQ1MFx1ODcwYlx1ODcwNFx1ODZmN1x1ODcwY1x1ODZmYVx1ODZkNlx1ODZmNVx1ODc0ZFx1ODZmOFx1ODcwZVx1ODcwOVx1ODcwMVx1ODZmNlx1ODcwZFx1ODcwNVx1ODhkNlx1ODhjYlx1''@;'; put 'put ''ODhjZFx1ODhjZVx1ODhkZVx1ODhkYlx1ODhkYVx1ODhjY1x1ODhkMFx1ODk4NVx1ODk5Ylx1ODlkZlx1ODllNVx1ODllNFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIyM10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjIzXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIyM11bc11dPTU3MDg4''@;'; put 'put ''K3MsaFs1NzA4OCtzXT1jWzIyM11bc10pO2ZvcihjWzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODllMVx1ODllMFx1ODllMlx1ODlkY1x1ODllNlx1OGE3Nlx1OGE4Nlx1OGE3Zlx1OGE2MVx1OGEzZlx1OGE3N1x1OGE4Mlx1''@;'; put 'put ''OGE4NFx1OGE3NVx1OGE4M1x1OGE4MVx1OGE3NFx1OGE3YVx1OGMzY1x1OGM0Ylx1OGM0YVx1OGM2NVx1OGM2NFx1OGM2Nlx1OGM4Nlx1OGM4NFx1OGM4NVx1OGNjY1x1OGQ2OFx1OGQ2OVx1OGQ5MVx1OGQ4Y1x1OGQ4ZVx1OGQ4Zlx1OGQ4ZFx1OGQ5M1x1OGQ5NFx1OGQ5MFx1OGQ5Mlx1OGRm''@;'; put 'put ''MFx1OGRlMFx1OGRlY1x1OGRmMVx1OGRlZVx1OGRkMFx1OGRlOVx1OGRlM1x1OGRlMlx1OGRlN1x1OGRmMlx1OGRlYlx1OGRmNFx1OGYwNlx1OGVmZlx1OGYwMVx1OGYwMFx1OGYwNVx1OGYwN1x1OGYwOFx1OGYwMlx1OGYwYlx1OTA1Mlx1OTAzZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1OTA0NFx1OTA0OVx1OTAzZFx1OTExMFx1OTEwZFx1OTEwZlx1OTExMVx1OTExNlx1OTExNFx1OTEwYlx1OTEwZVx1OTE2ZVx1OTE2Zlx1OTI0OFx1OTI1Mlx1OTIzMFx1OTIzYVx1OTI2Nlx1OTIzM1x1OTI2NVx1OTI1ZVx1OTI4M1x1OTIyZVx1OTI0YVx1OTI0Nlx1''@;'; put 'put ''OTI2ZFx1OTI2Y1x1OTI0Zlx1OTI2MFx1OTI2N1x1OTI2Zlx1OTIzNlx1OTI2MVx1OTI3MFx1OTIzMVx1OTI1NFx1OTI2M1x1OTI1MFx1OTI3Mlx1OTI0ZVx1OTI1M1x1OTI0Y1x1OTI1Nlx1OTIzMlx1OTU5Zlx1OTU5Y1x1OTU5ZVx1OTU5Ylx1OTY5Mlx1OTY5M1x1OTY5MVx1OTY5N1x1OTZj''@;'; put 'put ''ZVx1OTZmYVx1OTZmZFx1OTZmOFx1OTZmNVx1OTc3M1x1OTc3N1x1OTc3OFx1OTc3Mlx1OTgwZlx1OTgwZFx1OTgwZVx1OThhY1x1OThmNlx1OThmOVx1OTlhZlx1OTliMlx1OTliMFx1OTliNVx1OWFhZFx1OWFhYlx1OWI1Ylx1OWNlYVx1OWNlZFx1OWNlN1x1OWU4MFx1OWVmZFx1NTBlNlx1''@;'; put 'put ''NTBkNFx1NTBkN1x1NTBlOFx1NTBmM1x1NTBkYlx1NTBlYVx1NTBkZFx1NTBlNFx1NTBkM1x1NTBlY1x1NTBmMFx1NTBlZlx1NTBlM1x1NTBlMFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIyNF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjI0XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIy''@;'; put 'put ''NF1bc11dPTU3MzQ0K3MsaFs1NzM0NCtzXT1jWzIyNF1bc10pO2ZvcihjWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFkOFx1NTI4MFx1NTI4MVx1NTJlOVx1NTJlYlx1NTMzMFx1NTNhY1x1NTYyN1x1NTYxNVx1NTYwY1x1''@;'; put 'put ''NTYxMlx1NTVmY1x1NTYwZlx1NTYxY1x1NTYwMVx1NTYxM1x1NTYwMlx1NTVmYVx1NTYxZFx1NTYwNFx1NTVmZlx1NTVmOVx1NTg4OVx1NTg3Y1x1NTg5MFx1NTg5OFx1NTg4Nlx1NTg4MVx1NTg3Zlx1NTg3NFx1NTg4Ylx1NTg3YVx1NTg4N1x1NTg5MVx1NTg4ZVx1NTg3Nlx1NTg4Mlx1NTg4''@;'; put 'put ''OFx1NTg3Ylx1NTg5NFx1NTg4Zlx1NThmZVx1NTk2Ylx1NWFkY1x1NWFlZVx1NWFlNVx1NWFkNVx1NWFlYVx1NWFkYVx1NWFlZFx1NWFlYlx1NWFmM1x1NWFlMlx1NWFlMFx1NWFkYlx1NWFlY1x1NWFkZVx1NWFkZFx1NWFkOVx1NWFlOFx1NWFkZlx1NWI3N1x1NWJlMFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWJlM1x1NWM2M1x1NWQ4Mlx1NWQ4MFx1NWQ3ZFx1NWQ4Nlx1NWQ3YVx1NWQ4MVx1NWQ3N1x1NWQ4YVx1NWQ4OVx1NWQ4OFx1NWQ3ZVx1NWQ3Y1x1NWQ4ZFx1NWQ3OVx1NWQ3Zlx1NWU1OFx1NWU1OVx1NWU1M1x1NWVkOFx1NWVkMVx1NWVkN1x1''@;'; put 'put ''NWVjZVx1NWVkY1x1NWVkNVx1NWVkOVx1NWVkMlx1NWVkNFx1NWY0NFx1NWY0M1x1NWY2Zlx1NWZiNlx1NjEyY1x1NjEyOFx1NjE0MVx1NjE1ZVx1NjE3MVx1NjE3M1x1NjE1Mlx1NjE1M1x1NjE3Mlx1NjE2Y1x1NjE4MFx1NjE3NFx1NjE1NFx1NjE3YVx1NjE1Ylx1NjE2NVx1NjEzYlx1NjE2''@;'; put 'put ''YVx1NjE2MVx1NjE1Nlx1NjIyOVx1NjIyN1x1NjIyYlx1NjQyYlx1NjQ0ZFx1NjQ1Ylx1NjQ1ZFx1NjQ3NFx1NjQ3Nlx1NjQ3Mlx1NjQ3M1x1NjQ3ZFx1NjQ3NVx1NjQ2Nlx1NjRhNlx1NjQ0ZVx1NjQ4Mlx1NjQ1ZVx1NjQ1Y1x1NjQ0Ylx1NjQ1M1x1NjQ2MFx1NjQ1MFx1NjQ3Zlx1NjQzZlx1''@;'; put 'put ''NjQ2Y1x1NjQ2Ylx1NjQ1OVx1NjQ2NVx1NjQ3N1x1NjU3M1x1NjVhMFx1NjZhMVx1NjZhMFx1NjY5Zlx1NjcwNVx1NjcwNFx1NjcyMlx1NjliMVx1NjliNlx1NjljOVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIyNV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjI1XVtzXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoeVtjWzIyNV1bc11dPTU3NjAwK3MsaFs1NzYwMCtzXT1jWzIyNV1bc10pO2ZvcihjWzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjlhMFx1NjljZVx1Njk5Nlx1NjliMFx1NjlhY1x1NjliY1x1Njk5MVx1Njk5OVx1''@;'; put 'put ''Njk4ZVx1NjlhN1x1Njk4ZFx1NjlhOVx1NjliZVx1NjlhZlx1NjliZlx1NjljNFx1NjliZFx1NjlhNFx1NjlkNFx1NjliOVx1NjljYVx1Njk5YVx1NjljZlx1NjliM1x1Njk5M1x1NjlhYVx1NjlhMVx1Njk5ZVx1NjlkOVx1Njk5N1x1Njk5MFx1NjljMlx1NjliNVx1NjlhNVx1NjljNlx1NmI0''@;'; put 'put ''YVx1NmI0ZFx1NmI0Ylx1NmI5ZVx1NmI5Zlx1NmJhMFx1NmJjM1x1NmJjNFx1NmJmZVx1NmVjZVx1NmVmNVx1NmVmMVx1NmYwM1x1NmYyNVx1NmVmOFx1NmYzN1x1NmVmYlx1NmYyZVx1NmYwOVx1NmY0ZVx1NmYxOVx1NmYxYVx1NmYyN1x1NmYxOFx1NmYzYlx1NmYxMlx1NmVlZFx1NmYwYVx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmYzNlx1NmY3M1x1NmVmOVx1NmVlZVx1NmYyZFx1NmY0MFx1NmYzMFx1NmYzY1x1NmYzNVx1NmVlYlx1NmYwN1x1NmYwZVx1NmY0M1x1NmYwNVx1NmVmZFx1NmVmNlx1NmYzOVx1NmYxY1x1NmVmY1x1NmYzYVx1NmYxZlx1''@;'; put 'put ''NmYwZFx1NmYxZVx1NmYwOFx1NmYyMVx1NzE4N1x1NzE5MFx1NzE4OVx1NzE4MFx1NzE4NVx1NzE4Mlx1NzE4Zlx1NzE3Ylx1NzE4Nlx1NzE4MVx1NzE5N1x1NzI0NFx1NzI1M1x1NzI5N1x1NzI5NVx1NzI5M1x1NzM0M1x1NzM0ZFx1NzM1MVx1NzM0Y1x1NzQ2Mlx1NzQ3M1x1NzQ3MVx1NzQ3''@;'; put 'put ''NVx1NzQ3Mlx1NzQ2N1x1NzQ2ZVx1NzUwMFx1NzUwMlx1NzUwM1x1NzU3ZFx1NzU5MFx1NzYxNlx1NzYwOFx1NzYwY1x1NzYxNVx1NzYxMVx1NzYwYVx1NzYxNFx1NzZiOFx1Nzc4MVx1Nzc3Y1x1Nzc4NVx1Nzc4Mlx1Nzc2ZVx1Nzc4MFx1Nzc2Zlx1Nzc3ZVx1Nzc4M1x1NzhiMlx1NzhhYVx1''@;'; put 'put ''NzhiNFx1NzhhZFx1NzhhOFx1Nzg3ZVx1NzhhYlx1Nzg5ZVx1NzhhNVx1NzhhMFx1NzhhY1x1NzhhMlx1NzhhNFx1Nzk5OFx1Nzk4YVx1Nzk4Ylx1Nzk5Nlx1Nzk5NVx1Nzk5NFx1Nzk5M1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIyNl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjI2XVtz''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoeVtjWzIyNl1bc11dPTU3ODU2K3MsaFs1Nzg1NitzXT1jWzIyNl1bc10pO2ZvcihjWzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzk5N1x1Nzk4OFx1Nzk5Mlx1Nzk5MFx1N2EyYlx1N2E0YVx1''@;'; put 'put ''N2EzMFx1N2EyZlx1N2EyOFx1N2EyNlx1N2FhOFx1N2FhYlx1N2FhY1x1N2FlZVx1N2I4OFx1N2I5Y1x1N2I4YVx1N2I5MVx1N2I5MFx1N2I5Nlx1N2I4ZFx1N2I4Y1x1N2I5Ylx1N2I4ZVx1N2I4NVx1N2I5OFx1NTI4NFx1N2I5OVx1N2JhNFx1N2I4Mlx1N2NiYlx1N2NiZlx1N2NiY1x1N2Ni''@;'; put 'put ''YVx1N2RhN1x1N2RiN1x1N2RjMlx1N2RhM1x1N2RhYVx1N2RjMVx1N2RjMFx1N2RjNVx1N2Q5ZFx1N2RjZVx1N2RjNFx1N2RjNlx1N2RjYlx1N2RjY1x1N2RhZlx1N2RiOVx1N2Q5Nlx1N2RiY1x1N2Q5Zlx1N2RhNlx1N2RhZVx1N2RhOVx1N2RhMVx1N2RjOVx1N2Y3M1x1N2ZlMlx1N2ZlM1x1''@;'; put 'put ''N2ZlNVx1N2ZkZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODAyNFx1ODA1ZFx1ODA1Y1x1ODE4OVx1ODE4Nlx1ODE4M1x1ODE4N1x1ODE4ZFx1ODE4Y1x1ODE4Ylx1ODIxNVx1ODQ5N1x1ODRhNFx1ODRhMVx1ODQ5Zlx1ODRiYVx1ODRjZVx1ODRjMlx1ODRhY1x1''@;'; put 'put ''ODRhZVx1ODRhYlx1ODRiOVx1ODRiNFx1ODRjMVx1ODRjZFx1ODRhYVx1ODQ5YVx1ODRiMVx1ODRkMFx1ODQ5ZFx1ODRhN1x1ODRiYlx1ODRhMlx1ODQ5NFx1ODRjN1x1ODRjY1x1ODQ5Ylx1ODRhOVx1ODRhZlx1ODRhOFx1ODRkNlx1ODQ5OFx1ODRiNlx1ODRjZlx1ODRhMFx1ODRkN1x1ODRk''@;'; put 'put ''NFx1ODRkMlx1ODRkYlx1ODRiMFx1ODQ5MVx1ODY2MVx1ODczM1x1ODcyM1x1ODcyOFx1ODc2Ylx1ODc0MFx1ODcyZVx1ODcxZVx1ODcyMVx1ODcxOVx1ODcxYlx1ODc0M1x1ODcyY1x1ODc0MVx1ODczZVx1ODc0Nlx1ODcyMFx1ODczMlx1ODcyYVx1ODcyZFx1ODczY1x1ODcxMlx1ODczYVx1''@;'; put 'put ''ODczMVx1ODczNVx1ODc0Mlx1ODcyNlx1ODcyN1x1ODczOFx1ODcyNFx1ODcxYVx1ODczMFx1ODcxMVx1ODhmN1x1ODhlN1x1ODhmMVx1ODhmMlx1ODhmYVx1ODhmZVx1ODhlZVx1ODhmY1x1ODhmNlx1ODhmYlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIyN10ubGVuZ3RoOysrcyk2NTUz''@;'; put 'put ''MyE9PWNbMjI3XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIyN11bc11dPTU4MTEyK3MsaFs1ODExMitzXT1jWzIyN11bc10pO2ZvcihjWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODhmMFx1ODhlY1x1ODhlYlx1ODk5ZFx1''@;'; put 'put ''ODlhMVx1ODk5Zlx1ODk5ZVx1ODllOVx1ODllYlx1ODllOFx1OGFhYlx1OGE5OVx1OGE4Ylx1OGE5Mlx1OGE4Zlx1OGE5Nlx1OGMzZFx1OGM2OFx1OGM2OVx1OGNkNVx1OGNjZlx1OGNkN1x1OGQ5Nlx1OGUwOVx1OGUwMlx1OGRmZlx1OGUwZFx1OGRmZFx1OGUwYVx1OGUwM1x1OGUwN1x1OGUw''@;'; put 'put ''Nlx1OGUwNVx1OGRmZVx1OGUwMFx1OGUwNFx1OGYxMFx1OGYxMVx1OGYwZVx1OGYwZFx1OTEyM1x1OTExY1x1OTEyMFx1OTEyMlx1OTExZlx1OTExZFx1OTExYVx1OTEyNFx1OTEyMVx1OTExYlx1OTE3YVx1OTE3Mlx1OTE3OVx1OTE3M1x1OTJhNVx1OTJhNFx1OTI3Nlx1OTI5Ylx1OTI3YVx1''@;'; put 'put ''OTJhMFx1OTI5NFx1OTJhYVx1OTI4ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJhNlx1OTI5YVx1OTJhYlx1OTI3OVx1OTI5N1x1OTI3Zlx1OTJhM1x1OTJlZVx1OTI4ZVx1OTI4Mlx1OTI5NVx1OTJhMlx1OTI3ZFx1OTI4OFx1OTJhMVx1OTI4YVx1OTI4Nlx1''@;'; put 'put ''OTI4Y1x1OTI5OVx1OTJhN1x1OTI3ZVx1OTI4N1x1OTJhOVx1OTI5ZFx1OTI4Ylx1OTIyZFx1OTY5ZVx1OTZhMVx1OTZmZlx1OTc1OFx1OTc3ZFx1OTc3YVx1OTc3ZVx1OTc4M1x1OTc4MFx1OTc4Mlx1OTc3Ylx1OTc4NFx1OTc4MVx1OTc3Zlx1OTdjZVx1OTdjZFx1OTgxNlx1OThhZFx1OThh''@;'; put 'put ''ZVx1OTkwMlx1OTkwMFx1OTkwN1x1OTk5ZFx1OTk5Y1x1OTljM1x1OTliOVx1OTliYlx1OTliYVx1OTljMlx1OTliZFx1OTljN1x1OWFiMVx1OWFlM1x1OWFlN1x1OWIzZVx1OWIzZlx1OWI2MFx1OWI2MVx1OWI1Zlx1OWNmMVx1OWNmMlx1OWNmNVx1OWVhN1x1NTBmZlx1NTEwM1x1NTEzMFx1''@;'; put 'put ''NTBmOFx1NTEwNlx1NTEwN1x1NTBmNlx1NTBmZVx1NTEwYlx1NTEwY1x1NTBmZFx1NTEwYVx1NTI4Ylx1NTI4Y1x1NTJmMVx1NTJlZlx1NTY0OFx1NTY0Mlx1NTY0Y1x1NTYzNVx1NTY0MVx1NTY0YVx1NTY0OVx1NTY0Nlx1NTY1OFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIyOF0ubGVu''@;'; put 'put ''Z3RoOysrcyk2NTUzMyE9PWNbMjI4XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIyOF1bc11dPTU4MzY4K3MsaFs1ODM2OCtzXT1jWzIyOF1bc10pO2ZvcihjWzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTY1YVx1NTY0MFx1''@;'; put 'put ''NTYzM1x1NTYzZFx1NTYyY1x1NTYzZVx1NTYzOFx1NTYyYVx1NTYzYVx1NTcxYVx1NThhYlx1NTg5ZFx1NThiMVx1NThhMFx1NThhM1x1NThhZlx1NThhY1x1NThhNVx1NThhMVx1NThmZlx1NWFmZlx1NWFmNFx1NWFmZFx1NWFmN1x1NWFmNlx1NWIwM1x1NWFmOFx1NWIwMlx1NWFmOVx1NWIw''@;'; put 'put ''MVx1NWIwN1x1NWIwNVx1NWIwZlx1NWM2N1x1NWQ5OVx1NWQ5N1x1NWQ5Zlx1NWQ5Mlx1NWRhMlx1NWQ5M1x1NWQ5NVx1NWRhMFx1NWQ5Y1x1NWRhMVx1NWQ5YVx1NWQ5ZVx1NWU2OVx1NWU1ZFx1NWU2MFx1NWU1Y1x1N2RmM1x1NWVkYlx1NWVkZVx1NWVlMVx1NWY0OVx1NWZiMlx1NjE4Ylx1''@;'; put 'put ''NjE4M1x1NjE3OVx1NjFiMVx1NjFiMFx1NjFhMlx1NjE4OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE5Ylx1NjE5M1x1NjFhZlx1NjFhZFx1NjE5Zlx1NjE5Mlx1NjFhYVx1NjFhMVx1NjE4ZFx1NjE2Nlx1NjFiM1x1NjIyZFx1NjQ2ZVx1NjQ3MFx1NjQ5Nlx1''@;'; put 'put ''NjRhMFx1NjQ4NVx1NjQ5N1x1NjQ5Y1x1NjQ4Zlx1NjQ4Ylx1NjQ4YVx1NjQ4Y1x1NjRhM1x1NjQ5Zlx1NjQ2OFx1NjRiMVx1NjQ5OFx1NjU3Nlx1NjU3YVx1NjU3OVx1NjU3Ylx1NjViMlx1NjViM1x1NjZiNVx1NjZiMFx1NjZhOVx1NjZiMlx1NjZiN1x1NjZhYVx1NjZhZlx1NmEwMFx1NmEw''@;'; put 'put ''Nlx1NmExN1x1NjllNVx1NjlmOFx1NmExNVx1NjlmMVx1NjllNFx1NmEyMFx1NjlmZlx1NjllY1x1NjllMlx1NmExYlx1NmExZFx1NjlmZVx1NmEyN1x1NjlmMlx1NjllZVx1NmExNFx1NjlmN1x1NjllN1x1NmE0MFx1NmEwOFx1NjllNlx1NjlmYlx1NmEwZFx1NjlmY1x1NjllYlx1NmEwOVx1''@;'; put 'put ''NmEwNFx1NmExOFx1NmEyNVx1NmEwZlx1NjlmNlx1NmEyNlx1NmEwN1x1NjlmNFx1NmExNlx1NmI1MVx1NmJhNVx1NmJhM1x1NmJhMlx1NmJhNlx1NmMwMVx1NmMwMFx1NmJmZlx1NmMwMlx1NmY0MVx1NmYyNlx1NmY3ZVx1NmY4N1x1NmZjNlx1NmY5Mlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtz''@;'; put 'put ''IT1jWzIyOV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjI5XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIyOV1bc11dPTU4NjI0K3MsaFs1ODYyNCtzXT1jWzIyOV1bc10pO2ZvcihjWzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''NmY4ZFx1NmY4OVx1NmY4Y1x1NmY2Mlx1NmY0Zlx1NmY4NVx1NmY1YVx1NmY5Nlx1NmY3Nlx1NmY2Y1x1NmY4Mlx1NmY1NVx1NmY3Mlx1NmY1Mlx1NmY1MFx1NmY1N1x1NmY5NFx1NmY5M1x1NmY1ZFx1NmYwMFx1NmY2MVx1NmY2Ylx1NmY3ZFx1NmY2N1x1NmY5MFx1NmY1M1x1NmY4Ylx1NmY2''@;'; put 'put ''OVx1NmY3Zlx1NmY5NVx1NmY2M1x1NmY3N1x1NmY2YVx1NmY3Ylx1NzFiMlx1NzFhZlx1NzE5Ylx1NzFiMFx1NzFhMFx1NzE5YVx1NzFhOVx1NzFiNVx1NzE5ZFx1NzFhNVx1NzE5ZVx1NzFhNFx1NzFhMVx1NzFhYVx1NzE5Y1x1NzFhN1x1NzFiM1x1NzI5OFx1NzI5YVx1NzM1OFx1NzM1Mlx1''@;'; put 'put ''NzM1ZVx1NzM1Zlx1NzM2MFx1NzM1ZFx1NzM1Ylx1NzM2MVx1NzM1YVx1NzM1OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM2Mlx1NzQ4N1x1NzQ4OVx1NzQ4YVx1NzQ4Nlx1NzQ4MVx1NzQ3ZFx1NzQ4NVx1NzQ4OFx1NzQ3Y1x1NzQ3OVx1NzUwOFx1NzUwN1x1''@;'; put 'put ''NzU3ZVx1NzYyNVx1NzYxZVx1NzYxOVx1NzYxZFx1NzYxY1x1NzYyM1x1NzYxYVx1NzYyOFx1NzYxYlx1NzY5Y1x1NzY5ZFx1NzY5ZVx1NzY5Ylx1Nzc4ZFx1Nzc4Zlx1Nzc4OVx1Nzc4OFx1NzhjZFx1NzhiYlx1NzhjZlx1NzhjY1x1NzhkMVx1NzhjZVx1NzhkNFx1NzhjOFx1NzhjM1x1Nzhj''@;'; put 'put ''NFx1NzhjOVx1Nzk5YVx1NzlhMVx1NzlhMFx1Nzk5Y1x1NzlhMlx1Nzk5Ylx1NmI3Nlx1N2EzOVx1N2FiMlx1N2FiNFx1N2FiM1x1N2JiN1x1N2JjYlx1N2JiZVx1N2JhY1x1N2JjZVx1N2JhZlx1N2JiOVx1N2JjYVx1N2JiNVx1N2NjNVx1N2NjOFx1N2NjY1x1N2NjYlx1N2RmN1x1N2RkYlx1''@;'; put 'put ''N2RlYVx1N2RlN1x1N2RkN1x1N2RlMVx1N2UwM1x1N2RmYVx1N2RlNlx1N2RmNlx1N2RmMVx1N2RmMFx1N2RlZVx1N2RkZlx1N2Y3Nlx1N2ZhY1x1N2ZiMFx1N2ZhZFx1N2ZlZFx1N2ZlYlx1N2ZlYVx1N2ZlY1x1N2ZlNlx1N2ZlOFx1ODA2NFx1ODA2N1x1ODFhM1x1ODE5Zlx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLHM9MDtzIT1jWzIzMF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjMwXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIzMF1bc11dPTU4ODgwK3MsaFs1ODg4MCtzXT1jWzIzMF1bc10pO2ZvcihjWzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ODE5ZVx1ODE5NVx1ODFhMlx1ODE5OVx1ODE5N1x1ODIxNlx1ODI0Zlx1ODI1M1x1ODI1Mlx1ODI1MFx1ODI0ZVx1ODI1MVx1ODUyNFx1ODUzYlx1ODUwZlx1ODUwMFx1ODUyOVx1ODUwZVx1ODUwOVx1ODUwZFx1ODUxZlx1ODUwYVx1ODUyN1x1ODUxY1x1ODRmYlx1ODUy''@;'; put 'put ''Ylx1ODRmYVx1ODUwOFx1ODUwY1x1ODRmNFx1ODUyYVx1ODRmMlx1ODUxNVx1ODRmN1x1ODRlYlx1ODRmM1x1ODRmY1x1ODUxMlx1ODRlYVx1ODRlOVx1ODUxNlx1ODRmZVx1ODUyOFx1ODUxZFx1ODUyZVx1ODUwMlx1ODRmZFx1ODUxZVx1ODRmNlx1ODUzMVx1ODUyNlx1ODRlN1x1ODRlOFx1''@;'; put 'put ''ODRmMFx1ODRlZlx1ODRmOVx1ODUxOFx1ODUyMFx1ODUzMFx1ODUwYlx1ODUxOVx1ODUyZlx1ODY2Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODc1Nlx1ODc2M1x1ODc2NFx1ODc3N1x1ODdlMVx1ODc3M1x1ODc1OFx1ODc1NFx1ODc1Ylx1ODc1Mlx1ODc2MVx1''@;'; put 'put ''ODc1YVx1ODc1MVx1ODc1ZVx1ODc2ZFx1ODc2YVx1ODc1MFx1ODc0ZVx1ODc1Zlx1ODc1ZFx1ODc2Zlx1ODc2Y1x1ODc3YVx1ODc2ZVx1ODc1Y1x1ODc2NVx1ODc0Zlx1ODc3Ylx1ODc3NVx1ODc2Mlx1ODc2N1x1ODc2OVx1ODg1YVx1ODkwNVx1ODkwY1x1ODkxNFx1ODkwYlx1ODkxN1x1ODkx''@;'; put 'put ''OFx1ODkxOVx1ODkwNlx1ODkxNlx1ODkxMVx1ODkwZVx1ODkwOVx1ODlhMlx1ODlhNFx1ODlhM1x1ODllZFx1ODlmMFx1ODllY1x1OGFjZlx1OGFjNlx1OGFiOFx1OGFkM1x1OGFkMVx1OGFkNFx1OGFkNVx1OGFiYlx1OGFkN1x1OGFiZVx1OGFjMFx1OGFjNVx1OGFkOFx1OGFjM1x1OGFiYVx1''@;'; put 'put ''OGFiZFx1OGFkOVx1OGMzZVx1OGM0ZFx1OGM4Zlx1OGNlNVx1OGNkZlx1OGNkOVx1OGNlOFx1OGNkYVx1OGNkZFx1OGNlN1x1OGRhMFx1OGQ5Y1x1OGRhMVx1OGQ5Ylx1OGUyMFx1OGUyM1x1OGUyNVx1OGUyNFx1OGUyZVx1OGUxNVx1OGUxYlx1OGUxNlx1OGUxMVx1OGUxOVx1OGUyNlx1OGUy''@;'; put 'put ''N1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIzMV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjMxXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIzMV1bc11dPTU5MTM2K3MsaFs1OTEzNitzXT1jWzIzMV1bc10pO2ZvcihjWzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGUxNFx1OGUxMlx1OGUxOFx1OGUxM1x1OGUxY1x1OGUxN1x1OGUxYVx1OGYyY1x1OGYyNFx1OGYxOFx1OGYxYVx1OGYyMFx1OGYyM1x1OGYxNlx1OGYxN1x1OTA3M1x1OTA3MFx1OTA2Zlx1OTA2N1x1OTA2Ylx1OTEyZlx1OTEyYlx1OTEyOVx1OTEy''@;'; put 'put ''YVx1OTEzMlx1OTEyNlx1OTEyZVx1OTE4NVx1OTE4Nlx1OTE4YVx1OTE4MVx1OTE4Mlx1OTE4NFx1OTE4MFx1OTJkMFx1OTJjM1x1OTJjNFx1OTJjMFx1OTJkOVx1OTJiNlx1OTJjZlx1OTJmMVx1OTJkZlx1OTJkOFx1OTJlOVx1OTJkN1x1OTJkZFx1OTJjY1x1OTJlZlx1OTJjMlx1OTJlOFx1''@;'; put 'put ''OTJjYVx1OTJjOFx1OTJjZVx1OTJlNlx1OTJjZFx1OTJkNVx1OTJjOVx1OTJlMFx1OTJkZVx1OTJlN1x1OTJkMVx1OTJkM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJiNVx1OTJlMVx1OTJjNlx1OTJiNFx1OTU3Y1x1OTVhY1x1OTVhYlx1OTVhZVx1OTViMFx1''@;'; put 'put ''OTZhNFx1OTZhMlx1OTZkM1x1OTcwNVx1OTcwOFx1OTcwMlx1OTc1YVx1OTc4YVx1OTc4ZVx1OTc4OFx1OTdkMFx1OTdjZlx1OTgxZVx1OTgxZFx1OTgyNlx1OTgyOVx1OTgyOFx1OTgyMFx1OTgxYlx1OTgyN1x1OThiMlx1OTkwOFx1OThmYVx1OTkxMVx1OTkxNFx1OTkxNlx1OTkxN1x1OTkx''@;'; put 'put ''NVx1OTlkY1x1OTljZFx1OTljZlx1OTlkM1x1OTlkNFx1OTljZVx1OTljOVx1OTlkNlx1OTlkOFx1OTljYlx1OTlkN1x1OTljY1x1OWFiM1x1OWFlY1x1OWFlYlx1OWFmM1x1OWFmMlx1OWFmMVx1OWI0Nlx1OWI0M1x1OWI2N1x1OWI3NFx1OWI3MVx1OWI2Nlx1OWI3Nlx1OWI3NVx1OWI3MFx1''@;'; put 'put ''OWI2OFx1OWI2NFx1OWI2Y1x1OWNmY1x1OWNmYVx1OWNmZFx1OWNmZlx1OWNmN1x1OWQwN1x1OWQwMFx1OWNmOVx1OWNmYlx1OWQwOFx1OWQwNVx1OWQwNFx1OWU4M1x1OWVkM1x1OWYwZlx1OWYxMFx1NTExY1x1NTExM1x1NTExN1x1NTExYVx1NTExMVx1NTFkZVx1NTMzNFx1NTNlMVx1NTY3''@;'; put 'put ''MFx1NTY2MFx1NTY2ZVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIzMl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjMyXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIzMl1bc11dPTU5MzkyK3MsaFs1OTM5MitzXT1jWzIzMl1bc10pO2ZvcihjWzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTY3M1x1NTY2Nlx1NTY2M1x1NTY2ZFx1NTY3Mlx1NTY1ZVx1NTY3N1x1NTcxY1x1NTcxYlx1NThjOFx1NThiZFx1NThjOVx1NThiZlx1NThiYVx1NThjMlx1NThiY1x1NThjNlx1NWIxN1x1NWIxOVx1NWIxYlx1NWIyMVx1NWIx''@;'; put 'put ''NFx1NWIxM1x1NWIxMFx1NWIxNlx1NWIyOFx1NWIxYVx1NWIyMFx1NWIxZVx1NWJlZlx1NWRhY1x1NWRiMVx1NWRhOVx1NWRhN1x1NWRiNVx1NWRiMFx1NWRhZVx1NWRhYVx1NWRhOFx1NWRiMlx1NWRhZFx1NWRhZlx1NWRiNFx1NWU2N1x1NWU2OFx1NWU2Nlx1NWU2Zlx1NWVlOVx1NWVlN1x1''@;'; put 'put ''NWVlNlx1NWVlOFx1NWVlNVx1NWY0Ylx1NWZiY1x1NjE5ZFx1NjFhOFx1NjE5Nlx1NjFjNVx1NjFiNFx1NjFjNlx1NjFjMVx1NjFjY1x1NjFiYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjFiZlx1NjFiOFx1NjE4Y1x1NjRkN1x1NjRkNlx1NjRkMFx1NjRjZlx1''@;'; put 'put ''NjRjOVx1NjRiZFx1NjQ4OVx1NjRjM1x1NjRkYlx1NjRmM1x1NjRkOVx1NjUzM1x1NjU3Zlx1NjU3Y1x1NjVhMlx1NjZjOFx1NjZiZVx1NjZjMFx1NjZjYVx1NjZjYlx1NjZjZlx1NjZiZFx1NjZiYlx1NjZiYVx1NjZjY1x1NjcyM1x1NmEzNFx1NmE2Nlx1NmE0OVx1NmE2N1x1NmEzMlx1NmE2''@;'; put 'put ''OFx1NmEzZVx1NmE1ZFx1NmE2ZFx1NmE3Nlx1NmE1Ylx1NmE1MVx1NmEyOFx1NmE1YVx1NmEzYlx1NmEzZlx1NmE0MVx1NmE2YVx1NmE2NFx1NmE1MFx1NmE0Zlx1NmE1NFx1NmE2Zlx1NmE2OVx1NmE2MFx1NmEzY1x1NmE1ZVx1NmE1Nlx1NmE1NVx1NmE0ZFx1NmE0ZVx1NmE0Nlx1NmI1NVx1''@;'; put 'put ''NmI1NFx1NmI1Nlx1NmJhN1x1NmJhYVx1NmJhYlx1NmJjOFx1NmJjN1x1NmMwNFx1NmMwM1x1NmMwNlx1NmZhZFx1NmZjYlx1NmZhM1x1NmZjN1x1NmZiY1x1NmZjZVx1NmZjOFx1NmY1ZVx1NmZjNFx1NmZiZFx1NmY5ZVx1NmZjYVx1NmZhOFx1NzAwNFx1NmZhNVx1NmZhZVx1NmZiYVx1NmZh''@;'; put 'put ''Y1x1NmZhYVx1NmZjZlx1NmZiZlx1NmZiOFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIzM10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjMzXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIzM11bc11dPTU5NjQ4K3MsaFs1OTY0OCtzXT1jWzIzM11bc10pO2ZvcihjWzIzNF09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZhMlx1NmZjOVx1NmZhYlx1NmZjZFx1NmZhZlx1NmZiMlx1NmZiMFx1NzFjNVx1NzFjMlx1NzFiZlx1NzFiOFx1NzFkNlx1NzFjMFx1NzFjMVx1NzFjYlx1NzFkNFx1NzFjYVx1NzFjN1x1NzFjZlx1NzFi''@;'; put 'put ''ZFx1NzFkOFx1NzFiY1x1NzFjNlx1NzFkYVx1NzFkYlx1NzI5ZFx1NzI5ZVx1NzM2OVx1NzM2Nlx1NzM2N1x1NzM2Y1x1NzM2NVx1NzM2Ylx1NzM2YVx1NzQ3Zlx1NzQ5YVx1NzRhMFx1NzQ5NFx1NzQ5Mlx1NzQ5NVx1NzRhMVx1NzUwYlx1NzU4MFx1NzYyZlx1NzYyZFx1NzYzMVx1NzYzZFx1''@;'; put 'put ''NzYzM1x1NzYzY1x1NzYzNVx1NzYzMlx1NzYzMFx1NzZiYlx1NzZlNlx1Nzc5YVx1Nzc5ZFx1NzdhMVx1Nzc5Y1x1Nzc5Ylx1NzdhMlx1NzdhM1x1Nzc5NVx1Nzc5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc5N1x1NzhkZFx1NzhlOVx1NzhlNVx1NzhlYVx1''@;'; put 'put ''NzhkZVx1NzhlM1x1NzhkYlx1NzhlMVx1NzhlMlx1NzhlZFx1NzhkZlx1NzhlMFx1NzlhNFx1N2E0NFx1N2E0OFx1N2E0N1x1N2FiNlx1N2FiOFx1N2FiNVx1N2FiMVx1N2FiN1x1N2JkZVx1N2JlM1x1N2JlN1x1N2JkZFx1N2JkNVx1N2JlNVx1N2JkYVx1N2JlOFx1N2JmOVx1N2JkNFx1N2Jl''@;'; put 'put ''YVx1N2JlMlx1N2JkY1x1N2JlYlx1N2JkOFx1N2JkZlx1N2NkMlx1N2NkNFx1N2NkN1x1N2NkMFx1N2NkMVx1N2UxMlx1N2UyMVx1N2UxN1x1N2UwY1x1N2UxZlx1N2UyMFx1N2UxM1x1N2UwZVx1N2UxY1x1N2UxNVx1N2UxYVx1N2UyMlx1N2UwYlx1N2UwZlx1N2UxNlx1N2UwZFx1N2UxNFx1''@;'; put 'put ''N2UyNVx1N2UyNFx1N2Y0M1x1N2Y3Ylx1N2Y3Y1x1N2Y3YVx1N2ZiMVx1N2ZlZlx1ODAyYVx1ODAyOVx1ODA2Y1x1ODFiMVx1ODFhNlx1ODFhZVx1ODFiOVx1ODFiNVx1ODFhYlx1ODFiMFx1ODFhY1x1ODFiNFx1ODFiMlx1ODFiN1x1ODFhN1x1ODFmMlx1ODI1NVx1ODI1Nlx1ODI1N1x1ODU1''@;'; put 'put ''Nlx1ODU0NVx1ODU2Ylx1ODU0ZFx1ODU1M1x1ODU2MVx1ODU1OFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIzNF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjM0XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIzNF1bc11dPTU5OTA0K3MsaFs1OTkwNCtzXT1jWzIzNF1bc10pO2ZvcihjWzIz''@;'; put 'put ''NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU0MFx1ODU0Nlx1ODU2NFx1ODU0MVx1ODU2Mlx1ODU0NFx1ODU1MVx1ODU0N1x1ODU2M1x1ODUzZVx1ODU1Ylx1ODU3MVx1ODU0ZVx1ODU2ZVx1ODU3NVx1ODU1NVx1ODU2N1x1ODU2''@;'; put 'put ''MFx1ODU4Y1x1ODU2Nlx1ODU1ZFx1ODU1NFx1ODU2NVx1ODU2Y1x1ODY2M1x1ODY2NVx1ODY2NFx1ODc5Ylx1ODc4Zlx1ODc5N1x1ODc5M1x1ODc5Mlx1ODc4OFx1ODc4MVx1ODc5Nlx1ODc5OFx1ODc3OVx1ODc4N1x1ODdhM1x1ODc4NVx1ODc5MFx1ODc5MVx1ODc5ZFx1ODc4NFx1ODc5NFx1''@;'; put 'put ''ODc5Y1x1ODc5YVx1ODc4OVx1ODkxZVx1ODkyNlx1ODkzMFx1ODkyZFx1ODkyZVx1ODkyN1x1ODkzMVx1ODkyMlx1ODkyOVx1ODkyM1x1ODkyZlx1ODkyY1x1ODkxZlx1ODlmMVx1OGFlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFlMlx1OGFmMlx1OGFmNFx1''@;'; put 'put ''OGFmNVx1OGFkZFx1OGIxNFx1OGFlNFx1OGFkZlx1OGFmMFx1OGFjOFx1OGFkZVx1OGFlMVx1OGFlOFx1OGFmZlx1OGFlZlx1OGFmYlx1OGM5MVx1OGM5Mlx1OGM5MFx1OGNmNVx1OGNlZVx1OGNmMVx1OGNmMFx1OGNmM1x1OGQ2Y1x1OGQ2ZVx1OGRhNVx1OGRhN1x1OGUzM1x1OGUzZVx1OGUz''@;'; put 'put ''OFx1OGU0MFx1OGU0NVx1OGUzNlx1OGUzY1x1OGUzZFx1OGU0MVx1OGUzMFx1OGUzZlx1OGViZFx1OGYzNlx1OGYyZVx1OGYzNVx1OGYzMlx1OGYzOVx1OGYzN1x1OGYzNFx1OTA3Nlx1OTA3OVx1OTA3Ylx1OTA4Nlx1OTBmYVx1OTEzM1x1OTEzNVx1OTEzNlx1OTE5M1x1OTE5MFx1OTE5MVx1''@;'; put 'put ''OTE4ZFx1OTE4Zlx1OTMyN1x1OTMxZVx1OTMwOFx1OTMxZlx1OTMwNlx1OTMwZlx1OTM3YVx1OTMzOFx1OTMzY1x1OTMxYlx1OTMyM1x1OTMxMlx1OTMwMVx1OTM0Nlx1OTMyZFx1OTMwZVx1OTMwZFx1OTJjYlx1OTMxZFx1OTJmYVx1OTMyNVx1OTMxM1x1OTJmOVx1OTJmN1x1OTMzNFx1OTMw''@;'; put 'put ''Mlx1OTMyNFx1OTJmZlx1OTMyOVx1OTMzOVx1OTMzNVx1OTMyYVx1OTMxNFx1OTMwY1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIzNV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjM1XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIzNV1bc11dPTYwMTYwK3MsaFs2MDE2MCtzXT1jWzIzNV1b''@;'; put 'put ''c10pO2ZvcihjWzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMwYlx1OTJmZVx1OTMwOVx1OTMwMFx1OTJmYlx1OTMxNlx1OTViY1x1OTVjZFx1OTViZVx1OTViOVx1OTViYVx1OTViNlx1OTViZlx1OTViNVx1OTViZFx1OTZh''@;'; put 'put ''OVx1OTZkNFx1OTcwYlx1OTcxMlx1OTcxMFx1OTc5OVx1OTc5N1x1OTc5NFx1OTdmMFx1OTdmOFx1OTgzNVx1OTgyZlx1OTgzMlx1OTkyNFx1OTkxZlx1OTkyN1x1OTkyOVx1OTk5ZVx1OTllZVx1OTllY1x1OTllNVx1OTllNFx1OTlmMFx1OTllM1x1OTllYVx1OTllOVx1OTllN1x1OWFiOVx1''@;'; put 'put ''OWFiZlx1OWFiNFx1OWFiYlx1OWFmNlx1OWFmYVx1OWFmOVx1OWFmN1x1OWIzM1x1OWI4MFx1OWI4NVx1OWI4N1x1OWI3Y1x1OWI3ZVx1OWI3Ylx1OWI4Mlx1OWI5M1x1OWI5Mlx1OWI5MFx1OWI3YVx1OWI5NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWI3ZFx1''@;'; put 'put ''OWI4OFx1OWQyNVx1OWQxN1x1OWQyMFx1OWQxZVx1OWQxNFx1OWQyOVx1OWQxZFx1OWQxOFx1OWQyMlx1OWQxMFx1OWQxOVx1OWQxZlx1OWU4OFx1OWU4Nlx1OWU4N1x1OWVhZVx1OWVhZFx1OWVkNVx1OWVkNlx1OWVmYVx1OWYxMlx1OWYzZFx1NTEyNlx1NTEyNVx1NTEyMlx1NTEyNFx1NTEy''@;'; put 'put ''MFx1NTEyOVx1NTJmNFx1NTY5M1x1NTY4Y1x1NTY4ZFx1NTY4Nlx1NTY4NFx1NTY4M1x1NTY3ZVx1NTY4Mlx1NTY3Zlx1NTY4MVx1NThkNlx1NThkNFx1NThjZlx1NThkMlx1NWIyZFx1NWIyNVx1NWIzMlx1NWIyM1x1NWIyY1x1NWIyN1x1NWIyNlx1NWIyZlx1NWIyZVx1NWI3Ylx1NWJmMVx1''@;'; put 'put ''NWJmMlx1NWRiN1x1NWU2Y1x1NWU2YVx1NWZiZVx1NWZiYlx1NjFjM1x1NjFiNVx1NjFiY1x1NjFlN1x1NjFlMFx1NjFlNVx1NjFlNFx1NjFlOFx1NjFkZVx1NjRlZlx1NjRlOVx1NjRlM1x1NjRlYlx1NjRlNFx1NjRlOFx1NjU4MVx1NjU4MFx1NjViNlx1NjVkYVx1NjZkMlx1NmE4ZFx1NmE5''@;'; put 'put ''Nlx1NmE4MVx1NmFhNVx1NmE4OVx1NmE5Zlx1NmE5Ylx1NmFhMVx1NmE5ZVx1NmE4N1x1NmE5M1x1NmE4ZVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIzNl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjM2XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIzNl1bc11dPTYwNDE2K3MsaFs2MDQx''@;'; put 'put ''NitzXT1jWzIzNl1bc10pO2ZvcihjWzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE5NVx1NmE4M1x1NmFhOFx1NmFhNFx1NmE5MVx1NmE3Zlx1NmFhNlx1NmE5YVx1NmE4NVx1NmE4Y1x1NmE5Mlx1NmI1Ylx1NmJhZFx1NmMw''@;'; put 'put ''OVx1NmZjY1x1NmZhOVx1NmZmNFx1NmZkNFx1NmZlM1x1NmZkY1x1NmZlZFx1NmZlN1x1NmZlNlx1NmZkZVx1NmZmMlx1NmZkZFx1NmZlMlx1NmZlOFx1NzFlMVx1NzFmMVx1NzFlOFx1NzFmMlx1NzFlNFx1NzFmMFx1NzFlMlx1NzM3M1x1NzM2ZVx1NzM2Zlx1NzQ5N1x1NzRiMlx1NzRhYlx1''@;'; put 'put ''NzQ5MFx1NzRhYVx1NzRhZFx1NzRiMVx1NzRhNVx1NzRhZlx1NzUxMFx1NzUxMVx1NzUxMlx1NzUwZlx1NzU4NFx1NzY0M1x1NzY0OFx1NzY0OVx1NzY0N1x1NzZhNFx1NzZlOVx1NzdiNVx1NzdhYlx1NzdiMlx1NzdiN1x1NzdiNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1NzdiNFx1NzdiMVx1NzdhOFx1NzdmMFx1NzhmM1x1NzhmZFx1NzkwMlx1NzhmYlx1NzhmY1x1NzhmMlx1NzkwNVx1NzhmOVx1NzhmZVx1NzkwNFx1NzlhYlx1NzlhOFx1N2E1Y1x1N2E1Ylx1N2E1Nlx1N2E1OFx1N2E1NFx1N2E1YVx1N2FiZVx1N2FjMFx1N2FjMVx1N2MwNVx1N2Mw''@;'; put 'put ''Zlx1N2JmMlx1N2MwMFx1N2JmZlx1N2JmYlx1N2MwZVx1N2JmNFx1N2MwYlx1N2JmM1x1N2MwMlx1N2MwOVx1N2MwM1x1N2MwMVx1N2JmOFx1N2JmZFx1N2MwNlx1N2JmMFx1N2JmMVx1N2MxMFx1N2MwYVx1N2NlOFx1N2UyZFx1N2UzY1x1N2U0Mlx1N2UzM1x1OTg0OFx1N2UzOFx1N2UyYVx1''@;'; put 'put ''N2U0OVx1N2U0MFx1N2U0N1x1N2UyOVx1N2U0Y1x1N2UzMFx1N2UzYlx1N2UzNlx1N2U0NFx1N2UzYVx1N2Y0NVx1N2Y3Zlx1N2Y3ZVx1N2Y3ZFx1N2ZmNFx1N2ZmMlx1ODAyY1x1ODFiYlx1ODFjNFx1ODFjY1x1ODFjYVx1ODFjNVx1ODFjN1x1ODFiY1x1ODFlOVx1ODI1Ylx1ODI1YVx1ODI1''@;'; put 'put ''Y1x1ODU4M1x1ODU4MFx1ODU4Zlx1ODVhN1x1ODU5NVx1ODVhMFx1ODU4Ylx1ODVhM1x1ODU3Ylx1ODVhNFx1ODU5YVx1ODU5ZVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIzN10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjM3XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzIzN11bc11dPTYw''@;'; put 'put ''NjcyK3MsaFs2MDY3MitzXT1jWzIzN11bc10pO2ZvcihjWzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU3N1x1ODU3Y1x1ODU4OVx1ODVhMVx1ODU3YVx1ODU3OFx1ODU1N1x1ODU4ZVx1ODU5Nlx1ODU4Nlx1ODU4ZFx1ODU5''@;'; put 'put ''OVx1ODU5ZFx1ODU4MVx1ODVhMlx1ODU4Mlx1ODU4OFx1ODU4NVx1ODU3OVx1ODU3Nlx1ODU5OFx1ODU5MFx1ODU5Zlx1ODY2OFx1ODdiZVx1ODdhYVx1ODdhZFx1ODdjNVx1ODdiMFx1ODdhY1x1ODdiOVx1ODdiNVx1ODdiY1x1ODdhZVx1ODdjOVx1ODdjM1x1ODdjMlx1ODdjY1x1ODdiN1x1''@;'; put 'put ''ODdhZlx1ODdjNFx1ODdjYVx1ODdiNFx1ODdiNlx1ODdiZlx1ODdiOFx1ODdiZFx1ODdkZVx1ODdiMlx1ODkzNVx1ODkzM1x1ODkzY1x1ODkzZVx1ODk0MVx1ODk1Mlx1ODkzN1x1ODk0Mlx1ODlhZFx1ODlhZlx1ODlhZVx1ODlmMlx1ODlmM1x1OGIxZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1OGIxOFx1OGIxNlx1OGIxMVx1OGIwNVx1OGIwYlx1OGIyMlx1OGIwZlx1OGIxMlx1OGIxNVx1OGIwN1x1OGIwZFx1OGIwOFx1OGIwNlx1OGIxY1x1OGIxM1x1OGIxYVx1OGM0Zlx1OGM3MFx1OGM3Mlx1OGM3MVx1OGM2Zlx1OGM5NVx1OGM5NFx1OGNmOVx1OGQ2''@;'; put 'put ''Zlx1OGU0ZVx1OGU0ZFx1OGU1M1x1OGU1MFx1OGU0Y1x1OGU0N1x1OGY0M1x1OGY0MFx1OTA4NVx1OTA3ZVx1OTEzOFx1OTE5YVx1OTFhMlx1OTE5Ylx1OTE5OVx1OTE5Zlx1OTFhMVx1OTE5ZFx1OTFhMFx1OTNhMVx1OTM4M1x1OTNhZlx1OTM2NFx1OTM1Nlx1OTM0N1x1OTM3Y1x1OTM1OFx1''@;'; put 'put ''OTM1Y1x1OTM3Nlx1OTM0OVx1OTM1MFx1OTM1MVx1OTM2MFx1OTM2ZFx1OTM4Zlx1OTM0Y1x1OTM2YVx1OTM3OVx1OTM1N1x1OTM1NVx1OTM1Mlx1OTM0Zlx1OTM3MVx1OTM3N1x1OTM3Ylx1OTM2MVx1OTM1ZVx1OTM2M1x1OTM2N1x1OTM4MFx1OTM0ZVx1OTM1OVx1OTVjN1x1OTVjMFx1OTVj''@;'; put 'put ''OVx1OTVjM1x1OTVjNVx1OTViN1x1OTZhZVx1OTZiMFx1OTZhY1x1OTcyMFx1OTcxZlx1OTcxOFx1OTcxZFx1OTcxOVx1OTc5YVx1OTdhMVx1OTc5Y1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIzOF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjM4XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtj''@;'; put 'put ''WzIzOF1bc11dPTYwOTI4K3MsaFs2MDkyOCtzXT1jWzIzOF1bc10pO2ZvcihjWzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc5ZVx1OTc5ZFx1OTdkNVx1OTdkNFx1OTdmMVx1OTg0MVx1OTg0NFx1OTg0YVx1OTg0OVx1OTg0''@;'; put 'put ''NVx1OTg0M1x1OTkyNVx1OTkyYlx1OTkyY1x1OTkyYVx1OTkzM1x1OTkzMlx1OTkyZlx1OTkyZFx1OTkzMVx1OTkzMFx1OTk5OFx1OTlhM1x1OTlhMVx1OWEwMlx1OTlmYVx1OTlmNFx1OTlmN1x1OTlmOVx1OTlmOFx1OTlmNlx1OTlmYlx1OTlmZFx1OTlmZVx1OTlmY1x1OWEwM1x1OWFiZVx1''@;'; put 'put ''OWFmZVx1OWFmZFx1OWIwMVx1OWFmY1x1OWI0OFx1OWI5YVx1OWJhOFx1OWI5ZVx1OWI5Ylx1OWJhNlx1OWJhMVx1OWJhNVx1OWJhNFx1OWI4Nlx1OWJhMlx1OWJhMFx1OWJhZlx1OWQzM1x1OWQ0MVx1OWQ2N1x1OWQzNlx1OWQyZVx1OWQyZlx1OWQzMVx1OWQzOFx1OWQzMFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQ0NVx1OWQ0Mlx1OWQ0M1x1OWQzZVx1OWQzN1x1OWQ0MFx1OWQzZFx1N2ZmNVx1OWQyZFx1OWU4YVx1OWU4OVx1OWU4ZFx1OWViMFx1OWVjOFx1OWVkYVx1OWVmYlx1OWVmZlx1OWYyNFx1OWYyM1x1OWYyMlx1OWY1NFx1OWZhMFx1NTEz''@;'; put 'put ''MVx1NTEyZFx1NTEyZVx1NTY5OFx1NTY5Y1x1NTY5N1x1NTY5YVx1NTY5ZFx1NTY5OVx1NTk3MFx1NWIzY1x1NWM2OVx1NWM2YVx1NWRjMFx1NWU2ZFx1NWU2ZVx1NjFkOFx1NjFkZlx1NjFlZFx1NjFlZVx1NjFmMVx1NjFlYVx1NjFmMFx1NjFlYlx1NjFkNlx1NjFlOVx1NjRmZlx1NjUwNFx1''@;'; put 'put ''NjRmZFx1NjRmOFx1NjUwMVx1NjUwM1x1NjRmY1x1NjU5NFx1NjVkYlx1NjZkYVx1NjZkYlx1NjZkOFx1NmFjNVx1NmFiOVx1NmFiZFx1NmFlMVx1NmFjNlx1NmFiYVx1NmFiNlx1NmFiN1x1NmFjN1x1NmFiNFx1NmFhZFx1NmI1ZVx1NmJjOVx1NmMwYlx1NzAwN1x1NzAwY1x1NzAwZFx1NzAw''@;'; put 'put ''MVx1NzAwNVx1NzAxNFx1NzAwZVx1NmZmZlx1NzAwMFx1NmZmYlx1NzAyNlx1NmZmY1x1NmZmN1x1NzAwYVx1NzIwMVx1NzFmZlx1NzFmOVx1NzIwM1x1NzFmZFx1NzM3Nlx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzIzOV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjM5XVtzXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoeVtjWzIzOV1bc11dPTYxMTg0K3MsaFs2MTE4NCtzXT1jWzIzOV1bc10pO2ZvcihjWzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRiOFx1NzRjMFx1NzRiNVx1NzRjMVx1NzRiZVx1NzRiNlx1NzRiYlx1NzRj''@;'; put 'put ''Mlx1NzUxNFx1NzUxM1x1NzY1Y1x1NzY2NFx1NzY1OVx1NzY1MFx1NzY1M1x1NzY1N1x1NzY1YVx1NzZhNlx1NzZiZFx1NzZlY1x1NzdjMlx1NzdiYVx1NzhmZlx1NzkwY1x1NzkxM1x1NzkxNFx1NzkwOVx1NzkxMFx1NzkxMlx1NzkxMVx1NzlhZFx1NzlhY1x1N2E1Zlx1N2MxY1x1N2MyOVx1''@;'; put 'put ''N2MxOVx1N2MyMFx1N2MxZlx1N2MyZFx1N2MxZFx1N2MyNlx1N2MyOFx1N2MyMlx1N2MyNVx1N2MzMFx1N2U1Y1x1N2U1MFx1N2U1Nlx1N2U2M1x1N2U1OFx1N2U2Mlx1N2U1Zlx1N2U1MVx1N2U2MFx1N2U1N1x1N2U1M1x1N2ZiNVx1N2ZiM1x1N2ZmN1x1N2ZmOFx1ODA3NVx1ODFkMVx1ODFk''@;'; put 'put ''Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODFkMFx1ODI1Zlx1ODI1ZVx1ODViNFx1ODVjNlx1ODVjMFx1ODVjM1x1ODVjMlx1ODViM1x1ODViNVx1ODViZFx1ODVjN1x1ODVjNFx1ODViZlx1ODVjYlx1ODVjZVx1ODVjOFx1ODVjNVx1ODViMVx1ODViNlx1ODVk''@;'; put 'put ''Mlx1ODYyNFx1ODViOFx1ODViN1x1ODViZVx1ODY2OVx1ODdlN1x1ODdlNlx1ODdlMlx1ODdkYlx1ODdlYlx1ODdlYVx1ODdlNVx1ODdkZlx1ODdmM1x1ODdlNFx1ODdkNFx1ODdkY1x1ODdkM1x1ODdlZFx1ODdkOFx1ODdlM1x1ODdhNFx1ODdkN1x1ODdkOVx1ODgwMVx1ODdmNFx1ODdlOFx1''@;'; put 'put ''ODdkZFx1ODk1M1x1ODk0Ylx1ODk0Zlx1ODk0Y1x1ODk0Nlx1ODk1MFx1ODk1MVx1ODk0OVx1OGIyYVx1OGIyN1x1OGIyM1x1OGIzM1x1OGIzMFx1OGIzNVx1OGI0N1x1OGIyZlx1OGIzY1x1OGIzZVx1OGIzMVx1OGIyNVx1OGIzN1x1OGIyNlx1OGIzNlx1OGIyZVx1OGIyNFx1OGIzYlx1OGIz''@;'; put 'put ''ZFx1OGIzYVx1OGM0Mlx1OGM3NVx1OGM5OVx1OGM5OFx1OGM5N1x1OGNmZVx1OGQwNFx1OGQwMlx1OGQwMFx1OGU1Y1x1OGU2Mlx1OGU2MFx1OGU1N1x1OGU1Nlx1OGU1ZVx1OGU2NVx1OGU2N1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI0MF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjQw''@;'; put 'put ''XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI0MF1bc11dPTYxNDQwK3MsaFs2MTQ0MCtzXT1jWzI0MF1bc10pO2ZvcihjWzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU1Ylx1OGU1YVx1OGU2MVx1OGU1ZFx1OGU2OVx1OGU1''@;'; put 'put ''NFx1OGY0Nlx1OGY0N1x1OGY0OFx1OGY0Ylx1OTEyOFx1OTEzYVx1OTEzYlx1OTEzZVx1OTFhOFx1OTFhNVx1OTFhN1x1OTFhZlx1OTFhYVx1OTNiNVx1OTM4Y1x1OTM5Mlx1OTNiN1x1OTM5Ylx1OTM5ZFx1OTM4OVx1OTNhN1x1OTM4ZVx1OTNhYVx1OTM5ZVx1OTNhNlx1OTM5NVx1OTM4OFx1''@;'; put 'put ''OTM5OVx1OTM5Zlx1OTM4ZFx1OTNiMVx1OTM5MVx1OTNiMlx1OTNhNFx1OTNhOFx1OTNiNFx1OTNhM1x1OTNhNVx1OTVkMlx1OTVkM1x1OTVkMVx1OTZiM1x1OTZkN1x1OTZkYVx1NWRjMlx1OTZkZlx1OTZkOFx1OTZkZFx1OTcyM1x1OTcyMlx1OTcyNVx1OTdhY1x1OTdhZVx1OTdhOFx1OTdh''@;'; put 'put ''Ylx1OTdhNFx1OTdhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdhMlx1OTdhNVx1OTdkN1x1OTdkOVx1OTdkNlx1OTdkOFx1OTdmYVx1OTg1MFx1OTg1MVx1OTg1Mlx1OThiOFx1OTk0MVx1OTkzY1x1OTkzYVx1OWEwZlx1OWEwYlx1OWEwOVx1OWEwZFx1OWEw''@;'; put 'put ''NFx1OWExMVx1OWEwYVx1OWEwNVx1OWEwN1x1OWEwNlx1OWFjMFx1OWFkY1x1OWIwOFx1OWIwNFx1OWIwNVx1OWIyOVx1OWIzNVx1OWI0YVx1OWI0Y1x1OWI0Ylx1OWJjN1x1OWJjNlx1OWJjM1x1OWJiZlx1OWJjMVx1OWJiNVx1OWJiOFx1OWJkM1x1OWJiNlx1OWJjNFx1OWJiOVx1OWJiZFx1''@;'; put 'put ''OWQ1Y1x1OWQ1M1x1OWQ0Zlx1OWQ0YVx1OWQ1Ylx1OWQ0Ylx1OWQ1OVx1OWQ1Nlx1OWQ0Y1x1OWQ1N1x1OWQ1Mlx1OWQ1NFx1OWQ1Zlx1OWQ1OFx1OWQ1YVx1OWU4ZVx1OWU4Y1x1OWVkZlx1OWYwMVx1OWYwMFx1OWYxNlx1OWYyNVx1OWYyYlx1OWYyYVx1OWYyOVx1OWYyOFx1OWY0Y1x1OWY1''@;'; put 'put ''NVx1NTEzNFx1NTEzNVx1NTI5Nlx1NTJmN1x1NTNiNFx1NTZhYlx1NTZhZFx1NTZhNlx1NTZhN1x1NTZhYVx1NTZhY1x1NThkYVx1NThkZFx1NThkYlx1NTkxMlx1NWIzZFx1NWIzZVx1NWIzZlx1NWRjM1x1NWU3MFx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI0MV0ubGVuZ3RoOysrcyk2''@;'; put 'put ''NTUzMyE9PWNbMjQxXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI0MV1bc11dPTYxNjk2K3MsaFs2MTY5NitzXT1jWzI0MV1bc10pO2ZvcihjWzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWZiZlx1NjFmYlx1NjUwN1x1NjUx''@;'; put 'put ''MFx1NjUwZFx1NjUwOVx1NjUwY1x1NjUwZVx1NjU4NFx1NjVkZVx1NjVkZFx1NjZkZVx1NmFlN1x1NmFlMFx1NmFjY1x1NmFkMVx1NmFkOVx1NmFjYlx1NmFkZlx1NmFkY1x1NmFkMFx1NmFlYlx1NmFjZlx1NmFjZFx1NmFkZVx1NmI2MFx1NmJiMFx1NmMwY1x1NzAxOVx1NzAyN1x1NzAyMFx1''@;'; put 'put ''NzAxNlx1NzAyYlx1NzAyMVx1NzAyMlx1NzAyM1x1NzAyOVx1NzAxN1x1NzAyNFx1NzAxY1x1NzAyYVx1NzIwY1x1NzIwYVx1NzIwN1x1NzIwMlx1NzIwNVx1NzJhNVx1NzJhNlx1NzJhNFx1NzJhM1x1NzJhMVx1NzRjYlx1NzRjNVx1NzRiN1x1NzRjM1x1NzUxNlx1NzY2MFx1NzdjOVx1Nzdj''@;'; put 'put ''YVx1NzdjNFx1NzdmMVx1NzkxZFx1NzkxYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzkyMVx1NzkxY1x1NzkxN1x1NzkxZVx1NzliMFx1N2E2N1x1N2E2OFx1N2MzM1x1N2MzY1x1N2MzOVx1N2MyY1x1N2MzYlx1N2NlY1x1N2NlYVx1N2U3Nlx1N2U3NVx1N2U3''@;'; put 'put ''OFx1N2U3MFx1N2U3N1x1N2U2Zlx1N2U3YVx1N2U3Mlx1N2U3NFx1N2U2OFx1N2Y0Ylx1N2Y0YVx1N2Y4M1x1N2Y4Nlx1N2ZiN1x1N2ZmZFx1N2ZmZVx1ODA3OFx1ODFkN1x1ODFkNVx1ODI2NFx1ODI2MVx1ODI2M1x1ODVlYlx1ODVmMVx1ODVlZFx1ODVkOVx1ODVlMVx1ODVlOFx1ODVkYVx1''@;'; put 'put ''ODVkN1x1ODVlY1x1ODVmMlx1ODVmOFx1ODVkOFx1ODVkZlx1ODVlM1x1ODVkY1x1ODVkMVx1ODVmMFx1ODVlNlx1ODVlZlx1ODVkZVx1ODVlMlx1ODgwMFx1ODdmYVx1ODgwM1x1ODdmNlx1ODdmN1x1ODgwOVx1ODgwY1x1ODgwYlx1ODgwNlx1ODdmY1x1ODgwOFx1ODdmZlx1ODgwYVx1ODgw''@;'; put 'put ''Mlx1ODk2Mlx1ODk1YVx1ODk1Ylx1ODk1N1x1ODk2MVx1ODk1Y1x1ODk1OFx1ODk1ZFx1ODk1OVx1ODk4OFx1ODliN1x1ODliNlx1ODlmNlx1OGI1MFx1OGI0OFx1OGI0YVx1OGI0MFx1OGI1M1x1OGI1Nlx1OGI1NFx1OGI0Ylx1OGI1NVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI0Ml0u''@;'; put 'put ''bGVuZ3RoOysrcyk2NTUzMyE9PWNbMjQyXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI0Ml1bc11dPTYxOTUyK3MsaFs2MTk1MitzXT1jWzI0Ml1bc10pO2ZvcihjWzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI1MVx1OGI0''@;'; put 'put ''Mlx1OGI1Mlx1OGI1N1x1OGM0M1x1OGM3N1x1OGM3Nlx1OGM5YVx1OGQwNlx1OGQwN1x1OGQwOVx1OGRhY1x1OGRhYVx1OGRhZFx1OGRhYlx1OGU2ZFx1OGU3OFx1OGU3M1x1OGU2YVx1OGU2Zlx1OGU3Ylx1OGVjMlx1OGY1Mlx1OGY1MVx1OGY0Zlx1OGY1MFx1OGY1M1x1OGZiNFx1OTE0MFx1''@;'; put 'put ''OTEzZlx1OTFiMFx1OTFhZFx1OTNkZVx1OTNjN1x1OTNjZlx1OTNjMlx1OTNkYVx1OTNkMFx1OTNmOVx1OTNlY1x1OTNjY1x1OTNkOVx1OTNhOVx1OTNlNlx1OTNjYVx1OTNkNFx1OTNlZVx1OTNlM1x1OTNkNVx1OTNjNFx1OTNjZVx1OTNjMFx1OTNkMlx1OTNlN1x1OTU3ZFx1OTVkYVx1OTVk''@;'; put 'put ''Ylx1OTZlMVx1OTcyOVx1OTcyYlx1OTcyY1x1OTcyOFx1OTcyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdiM1x1OTdiN1x1OTdiNlx1OTdkZFx1OTdkZVx1OTdkZlx1OTg1Y1x1OTg1OVx1OTg1ZFx1OTg1N1x1OThiZlx1OThiZFx1OThiYlx1OThiZVx1OTk0''@;'; put 'put ''OFx1OTk0N1x1OTk0M1x1OTlhNlx1OTlhN1x1OWExYVx1OWExNVx1OWEyNVx1OWExZFx1OWEyNFx1OWExYlx1OWEyMlx1OWEyMFx1OWEyN1x1OWEyM1x1OWExZVx1OWExY1x1OWExNFx1OWFjMlx1OWIwYlx1OWIwYVx1OWIwZVx1OWIwY1x1OWIzN1x1OWJlYVx1OWJlYlx1OWJlMFx1OWJkZVx1''@;'; put 'put ''OWJlNFx1OWJlNlx1OWJlMlx1OWJmMFx1OWJkNFx1OWJkN1x1OWJlY1x1OWJkY1x1OWJkOVx1OWJlNVx1OWJkNVx1OWJlMVx1OWJkYVx1OWQ3N1x1OWQ4MVx1OWQ4YVx1OWQ4NFx1OWQ4OFx1OWQ3MVx1OWQ4MFx1OWQ3OFx1OWQ4Nlx1OWQ4Ylx1OWQ4Y1x1OWQ3ZFx1OWQ2Ylx1OWQ3NFx1OWQ3''@;'; put 'put ''NVx1OWQ3MFx1OWQ2OVx1OWQ4NVx1OWQ3M1x1OWQ3Ylx1OWQ4Mlx1OWQ2Zlx1OWQ3OVx1OWQ3Zlx1OWQ4N1x1OWQ2OFx1OWU5NFx1OWU5MVx1OWVjMFx1OWVmY1x1OWYyZFx1OWY0MFx1OWY0MVx1OWY0ZFx1OWY1Nlx1OWY1N1x1OWY1OFx1NTMzN1x1NTZiMlx1ZmZmZCIuc3BsaXQoIiIpLHM9''@;'; put 'put ''MDtzIT1jWzI0M10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjQzXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI0M11bc11dPTYyMjA4K3MsaFs2MjIwOCtzXT1jWzI0M11bc10pO2ZvcihjWzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1NTZiNVx1NTZiM1x1NThlM1x1NWI0NVx1NWRjNlx1NWRjN1x1NWVlZVx1NWVlZlx1NWZjMFx1NWZjMVx1NjFmOVx1NjUxN1x1NjUxNlx1NjUxNVx1NjUxM1x1NjVkZlx1NjZlOFx1NjZlM1x1NjZlNFx1NmFmM1x1NmFmMFx1NmFlYVx1NmFlOFx1NmFmOVx1NmFmMVx1NmFlZVx1NmFlZlx1''@;'; put 'put ''NzAzY1x1NzAzNVx1NzAyZlx1NzAzN1x1NzAzNFx1NzAzMVx1NzA0Mlx1NzAzOFx1NzAzZlx1NzAzYVx1NzAzOVx1NzA0MFx1NzAzYlx1NzAzM1x1NzA0MVx1NzIxM1x1NzIxNFx1NzJhOFx1NzM3ZFx1NzM3Y1x1NzRiYVx1NzZhYlx1NzZhYVx1NzZiZVx1NzZlZFx1NzdjY1x1NzdjZVx1Nzdj''@;'; put 'put ''Zlx1NzdjZFx1NzdmMlx1NzkyNVx1NzkyM1x1NzkyN1x1NzkyOFx1NzkyNFx1NzkyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzliMlx1N2E2ZVx1N2E2Y1x1N2E2ZFx1N2FmN1x1N2M0OVx1N2M0OFx1N2M0YVx1N2M0N1x1N2M0NVx1N2NlZVx1N2U3Ylx1N2U3''@;'; put 'put ''ZVx1N2U4MVx1N2U4MFx1N2ZiYVx1N2ZmZlx1ODA3OVx1ODFkYlx1ODFkOVx1ODIwYlx1ODI2OFx1ODI2OVx1ODYyMlx1ODVmZlx1ODYwMVx1ODVmZVx1ODYxYlx1ODYwMFx1ODVmNlx1ODYwNFx1ODYwOVx1ODYwNVx1ODYwY1x1ODVmZFx1ODgxOVx1ODgxMFx1ODgxMVx1ODgxN1x1ODgxM1x1''@;'; put 'put ''ODgxNlx1ODk2M1x1ODk2Nlx1ODliOVx1ODlmN1x1OGI2MFx1OGI2YVx1OGI1ZFx1OGI2OFx1OGI2M1x1OGI2NVx1OGI2N1x1OGI2ZFx1OGRhZVx1OGU4Nlx1OGU4OFx1OGU4NFx1OGY1OVx1OGY1Nlx1OGY1N1x1OGY1NVx1OGY1OFx1OGY1YVx1OTA4ZFx1OTE0M1x1OTE0MVx1OTFiN1x1OTFi''@;'; put 'put ''NVx1OTFiMlx1OTFiM1x1OTQwYlx1OTQxM1x1OTNmYlx1OTQyMFx1OTQwZlx1OTQxNFx1OTNmZVx1OTQxNVx1OTQxMFx1OTQyOFx1OTQxOVx1OTQwZFx1OTNmNVx1OTQwMFx1OTNmN1x1OTQwN1x1OTQwZVx1OTQxNlx1OTQxMlx1OTNmYVx1OTQwOVx1OTNmOFx1OTQwYVx1OTNmZlx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLHM9MDtzIT1jWzI0NF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjQ0XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI0NF1bc11dPTYyNDY0K3MsaFs2MjQ2NCtzXT1jWzI0NF1bc10pO2ZvcihjWzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1OTNmY1x1OTQwY1x1OTNmNlx1OTQxMVx1OTQwNlx1OTVkZVx1OTVlMFx1OTVkZlx1OTcyZVx1OTcyZlx1OTdiOVx1OTdiYlx1OTdmZFx1OTdmZVx1OTg2MFx1OTg2Mlx1OTg2M1x1OTg1Zlx1OThjMVx1OThjMlx1OTk1MFx1OTk0ZVx1OTk1OVx1OTk0Y1x1OTk0Ylx1''@;'; put 'put ''OTk1M1x1OWEzMlx1OWEzNFx1OWEzMVx1OWEyY1x1OWEyYVx1OWEzNlx1OWEyOVx1OWEyZVx1OWEzOFx1OWEyZFx1OWFjN1x1OWFjYVx1OWFjNlx1OWIxMFx1OWIxMlx1OWIxMVx1OWMwYlx1OWMwOFx1OWJmN1x1OWMwNVx1OWMxMlx1OWJmOFx1OWM0MFx1OWMwN1x1OWMwZVx1OWMwNlx1OWMx''@;'; put 'put ''N1x1OWMxNFx1OWMwOVx1OWQ5Zlx1OWQ5OVx1OWRhNFx1OWQ5ZFx1OWQ5Mlx1OWQ5OFx1OWQ5MFx1OWQ5Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWRhMFx1OWQ5NFx1OWQ5Y1x1OWRhYVx1OWQ5N1x1OWRhMVx1OWQ5YVx1OWRhMlx1OWRhOFx1OWQ5ZVx1OWRh''@;'; put 'put ''M1x1OWRiZlx1OWRhOVx1OWQ5Nlx1OWRhNlx1OWRhN1x1OWU5OVx1OWU5Ylx1OWU5YVx1OWVlNVx1OWVlNFx1OWVlN1x1OWVlNlx1OWYzMFx1OWYyZVx1OWY1Ylx1OWY2MFx1OWY1ZVx1OWY1ZFx1OWY1OVx1OWY5MVx1NTEzYVx1NTEzOVx1NTI5OFx1NTI5N1x1NTZjM1x1NTZiZFx1NTZiZVx1''@;'; put 'put ''NWI0OFx1NWI0N1x1NWRjYlx1NWRjZlx1NWVmMVx1NjFmZFx1NjUxYlx1NmIwMlx1NmFmY1x1NmIwM1x1NmFmOFx1NmIwMFx1NzA0M1x1NzA0NFx1NzA0YVx1NzA0OFx1NzA0OVx1NzA0NVx1NzA0Nlx1NzIxZFx1NzIxYVx1NzIxOVx1NzM3ZVx1NzUxN1x1NzY2YVx1NzdkMFx1NzkyZFx1Nzkz''@;'; put 'put ''MVx1NzkyZlx1N2M1NFx1N2M1M1x1N2NmMlx1N2U4YVx1N2U4N1x1N2U4OFx1N2U4Ylx1N2U4Nlx1N2U4ZFx1N2Y0ZFx1N2ZiYlx1ODAzMFx1ODFkZFx1ODYxOFx1ODYyYVx1ODYyNlx1ODYxZlx1ODYyM1x1ODYxY1x1ODYxOVx1ODYyN1x1ODYyZVx1ODYyMVx1ODYyMFx1ODYyOVx1ODYxZVx1''@;'; put 'put ''ODYyNVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI0NV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjQ1XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI0NV1bc11dPTYyNzIwK3MsaFs2MjcyMCtzXT1jWzI0NV1bc10pO2ZvcihjWzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODgyOVx1ODgxZFx1ODgxYlx1ODgyMFx1ODgyNFx1ODgxY1x1ODgyYlx1ODg0YVx1ODk2ZFx1ODk2OVx1ODk2ZVx1ODk2Ylx1ODlmYVx1OGI3OVx1OGI3OFx1OGI0NVx1OGI3YVx1OGI3Ylx1OGQxMFx1OGQxNFx1OGRhZlx1OGU4ZVx1OGU4Y1x1''@;'; put 'put ''OGY1ZVx1OGY1Ylx1OGY1ZFx1OTE0Nlx1OTE0NFx1OTE0NVx1OTFiOVx1OTQzZlx1OTQzYlx1OTQzNlx1OTQyOVx1OTQzZFx1OTQzY1x1OTQzMFx1OTQzOVx1OTQyYVx1OTQzN1x1OTQyY1x1OTQ0MFx1OTQzMVx1OTVlNVx1OTVlNFx1OTVlM1x1OTczNVx1OTczYVx1OTdiZlx1OTdlMVx1OTg2''@;'; put 'put ''NFx1OThjOVx1OThjNlx1OThjMFx1OTk1OFx1OTk1Nlx1OWEzOVx1OWEzZFx1OWE0Nlx1OWE0NFx1OWE0Mlx1OWE0MVx1OWEzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWEzZlx1OWFjZFx1OWIxNVx1OWIxN1x1OWIxOFx1OWIxNlx1OWIzYVx1OWI1Mlx1OWMy''@;'; put 'put ''Ylx1OWMxZFx1OWMxY1x1OWMyY1x1OWMyM1x1OWMyOFx1OWMyOVx1OWMyNFx1OWMyMVx1OWRiN1x1OWRiNlx1OWRiY1x1OWRjMVx1OWRjN1x1OWRjYVx1OWRjZlx1OWRiZVx1OWRjNVx1OWRjM1x1OWRiYlx1OWRiNVx1OWRjZVx1OWRiOVx1OWRiYVx1OWRhY1x1OWRjOFx1OWRiMVx1OWRhZFx1''@;'; put 'put ''OWRjY1x1OWRiM1x1OWRjZFx1OWRiMlx1OWU3YVx1OWU5Y1x1OWVlYlx1OWVlZVx1OWVlZFx1OWYxYlx1OWYxOFx1OWYxYVx1OWYzMVx1OWY0ZVx1OWY2NVx1OWY2NFx1OWY5Mlx1NGViOVx1NTZjNlx1NTZjNVx1NTZjYlx1NTk3MVx1NWI0Ylx1NWI0Y1x1NWRkNVx1NWRkMVx1NWVmMlx1NjUy''@;'; put 'put ''MVx1NjUyMFx1NjUyNlx1NjUyMlx1NmIwYlx1NmIwOFx1NmIwOVx1NmMwZFx1NzA1NVx1NzA1Nlx1NzA1N1x1NzA1Mlx1NzIxZVx1NzIxZlx1NzJhOVx1NzM3Zlx1NzRkOFx1NzRkNVx1NzRkOVx1NzRkN1x1NzY2ZFx1NzZhZFx1NzkzNVx1NzliNFx1N2E3MFx1N2E3MVx1N2M1N1x1N2M1Y1x1''@;'; put 'put ''N2M1OVx1N2M1Ylx1N2M1YVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI0Nl0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjQ2XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI0Nl1bc11dPTYyOTc2K3MsaFs2Mjk3NitzXT1jWzI0Nl1bc10pO2ZvcihjWzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2NmNFx1N2NmMVx1N2U5MVx1N2Y0Zlx1N2Y4N1x1ODFkZVx1ODI2Ylx1ODYzNFx1ODYzNVx1ODYzM1x1ODYyY1x1ODYzMlx1ODYzNlx1ODgyY1x1ODgyOFx1ODgyNlx1ODgyYVx1ODgyNVx1ODk3MVx1ODliZlx1ODliZVx1''@;'; put 'put ''ODlmYlx1OGI3ZVx1OGI4NFx1OGI4Mlx1OGI4Nlx1OGI4NVx1OGI3Zlx1OGQxNVx1OGU5NVx1OGU5NFx1OGU5YVx1OGU5Mlx1OGU5MFx1OGU5Nlx1OGU5N1x1OGY2MFx1OGY2Mlx1OTE0N1x1OTQ0Y1x1OTQ1MFx1OTQ0YVx1OTQ0Ylx1OTQ0Zlx1OTQ0N1x1OTQ0NVx1OTQ0OFx1OTQ0OVx1OTQ0''@;'; put 'put ''Nlx1OTczZlx1OTdlM1x1OTg2YVx1OTg2OVx1OThjYlx1OTk1NFx1OTk1Ylx1OWE0ZVx1OWE1M1x1OWE1NFx1OWE0Y1x1OWE0Zlx1OWE0OFx1OWE0YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWE0OVx1OWE1Mlx1OWE1MFx1OWFkMFx1OWIxOVx1OWIyYlx1OWIz''@;'; put 'put ''Ylx1OWI1Nlx1OWI1NVx1OWM0Nlx1OWM0OFx1OWMzZlx1OWM0NFx1OWMzOVx1OWMzM1x1OWM0MVx1OWMzY1x1OWMzN1x1OWMzNFx1OWMzMlx1OWMzZFx1OWMzNlx1OWRkYlx1OWRkMlx1OWRkZVx1OWRkYVx1OWRjYlx1OWRkMFx1OWRkY1x1OWRkMVx1OWRkZlx1OWRlOVx1OWRkOVx1OWRkOFx1''@;'; put 'put ''OWRkNlx1OWRmNVx1OWRkNVx1OWRkZFx1OWViNlx1OWVmMFx1OWYzNVx1OWYzM1x1OWYzMlx1OWY0Mlx1OWY2Ylx1OWY5NVx1OWZhMlx1NTEzZFx1NTI5OVx1NThlOFx1NThlN1x1NTk3Mlx1NWI0ZFx1NWRkOFx1ODgyZlx1NWY0Zlx1NjIwMVx1NjIwM1x1NjIwNFx1NjUyOVx1NjUyNVx1NjU5''@;'; put 'put ''Nlx1NjZlYlx1NmIxMVx1NmIxMlx1NmIwZlx1NmJjYVx1NzA1Ylx1NzA1YVx1NzIyMlx1NzM4Mlx1NzM4MVx1NzM4M1x1NzY3MFx1NzdkNFx1N2M2N1x1N2M2Nlx1N2U5NVx1ODI2Y1x1ODYzYVx1ODY0MFx1ODYzOVx1ODYzY1x1ODYzMVx1ODYzYlx1ODYzZVx1ODgzMFx1ODgzMlx1ODgyZVx1''@;'; put 'put ''ODgzM1x1ODk3Nlx1ODk3NFx1ODk3M1x1ODlmZVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI0N10ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjQ3XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI0N11bc11dPTYzMjMyK3MsaFs2MzIzMitzXT1jWzI0N11bc10pO2ZvcihjWzI0OF09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI4Y1x1OGI4ZVx1OGI4Ylx1OGI4OFx1OGM0NVx1OGQxOVx1OGU5OFx1OGY2NFx1OGY2M1x1OTFiY1x1OTQ2Mlx1OTQ1NVx1OTQ1ZFx1OTQ1N1x1OTQ1ZVx1OTdjNFx1OTdjNVx1OTgwMFx1OWE1Nlx1''@;'; put 'put ''OWE1OVx1OWIxZVx1OWIxZlx1OWIyMFx1OWM1Mlx1OWM1OFx1OWM1MFx1OWM0YVx1OWM0ZFx1OWM0Ylx1OWM1NVx1OWM1OVx1OWM0Y1x1OWM0ZVx1OWRmYlx1OWRmN1x1OWRlZlx1OWRlM1x1OWRlYlx1OWRmOFx1OWRlNFx1OWRmNlx1OWRlMVx1OWRlZVx1OWRlNlx1OWRmMlx1OWRmMFx1OWRl''@;'; put 'put ''Mlx1OWRlY1x1OWRmNFx1OWRmM1x1OWRlOFx1OWRlZFx1OWVjMlx1OWVkMFx1OWVmMlx1OWVmM1x1OWYwNlx1OWYxY1x1OWYzOFx1OWYzN1x1OWYzNlx1OWY0M1x1OWY0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWY3MVx1OWY3MFx1OWY2ZVx1OWY2Zlx1NTZk''@;'; put 'put ''M1x1NTZjZFx1NWI0ZVx1NWM2ZFx1NjUyZFx1NjZlZFx1NjZlZVx1NmIxM1x1NzA1Zlx1NzA2MVx1NzA1ZFx1NzA2MFx1NzIyM1x1NzRkYlx1NzRlNVx1NzdkNVx1NzkzOFx1NzliN1x1NzliNlx1N2M2YVx1N2U5N1x1N2Y4OVx1ODI2ZFx1ODY0M1x1ODgzOFx1ODgzN1x1ODgzNVx1ODg0Ylx1''@;'; put 'put ''OGI5NFx1OGI5NVx1OGU5ZVx1OGU5Zlx1OGVhMFx1OGU5ZFx1OTFiZVx1OTFiZFx1OTFjMlx1OTQ2Ylx1OTQ2OFx1OTQ2OVx1OTZlNVx1OTc0Nlx1OTc0M1x1OTc0N1x1OTdjN1x1OTdlNVx1OWE1ZVx1OWFkNVx1OWI1OVx1OWM2M1x1OWM2N1x1OWM2Nlx1OWM2Mlx1OWM1ZVx1OWM2MFx1OWUw''@;'; put 'put ''Mlx1OWRmZVx1OWUwN1x1OWUwM1x1OWUwNlx1OWUwNVx1OWUwMFx1OWUwMVx1OWUwOVx1OWRmZlx1OWRmZFx1OWUwNFx1OWVhMFx1OWYxZVx1OWY0Nlx1OWY3NFx1OWY3NVx1OWY3Nlx1NTZkNFx1NjUyZVx1NjViOFx1NmIxOFx1NmIxOVx1NmIxN1x1NmIxYVx1NzA2Mlx1NzIyNlx1NzJhYVx1''@;'; put 'put ''NzdkOFx1NzdkOVx1NzkzOVx1N2M2OVx1N2M2Ylx1N2NmNlx1N2U5YVx1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI0OF0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjQ4XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI0OF1bc11dPTYzNDg4K3MsaFs2MzQ4OCtzXT1jWzI0OF1bc10pO2Zvcihj''@;'; put 'put ''WzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U5OFx1N2U5Ylx1N2U5OVx1ODFlMFx1ODFlMVx1ODY0Nlx1ODY0N1x1ODY0OFx1ODk3OVx1ODk3YVx1ODk3Y1x1ODk3Ylx1ODlmZlx1OGI5OFx1OGI5OVx1OGVhNVx1OGVhNFx1''@;'; put 'put ''OGVhM1x1OTQ2ZVx1OTQ2ZFx1OTQ2Zlx1OTQ3MVx1OTQ3M1x1OTc0OVx1OTg3Mlx1OTk1Zlx1OWM2OFx1OWM2ZVx1OWM2ZFx1OWUwYlx1OWUwZFx1OWUxMFx1OWUwZlx1OWUxMlx1OWUxMVx1OWVhMVx1OWVmNVx1OWYwOVx1OWY0N1x1OWY3OFx1OWY3Ylx1OWY3YVx1OWY3OVx1NTcxZVx1NzA2''@;'; put 'put ''Nlx1N2M2Zlx1ODgzY1x1OGRiMlx1OGVhNlx1OTFjM1x1OTQ3NFx1OTQ3OFx1OTQ3Nlx1OTQ3NVx1OWE2MFx1OWM3NFx1OWM3M1x1OWM3MVx1OWM3NVx1OWUxNFx1OWUxM1x1OWVmNlx1OWYwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWZhNFx1NzA2OFx1NzA2''@;'; put 'put ''NVx1N2NmN1x1ODY2YVx1ODgzZVx1ODgzZFx1ODgzZlx1OGI5ZVx1OGM5Y1x1OGVhOVx1OGVjOVx1OTc0Ylx1OTg3M1x1OTg3NFx1OThjY1x1OTk2MVx1OTlhYlx1OWE2NFx1OWE2Nlx1OWE2N1x1OWIyNFx1OWUxNVx1OWUxN1x1OWY0OFx1NjIwN1x1NmIxZVx1NzIyN1x1ODY0Y1x1OGVhOFx1''@;'; put 'put ''OTQ4Mlx1OTQ4MFx1OTQ4MVx1OWE2OVx1OWE2OFx1OWIyZVx1OWUxOVx1NzIyOVx1ODY0Ylx1OGI5Zlx1OTQ4M1x1OWM3OVx1OWViN1x1NzY3NVx1OWE2Ylx1OWM3YVx1OWUxZFx1NzA2OVx1NzA2YVx1OWVhNFx1OWY3ZVx1OWY0OVx1OWY5OFx1Nzg4MVx1OTJiOVx1ODhjZlx1NThiYlx1NjA1''@;'; put 'put ''Mlx1N2NhN1x1NWFmYVx1MjU1NFx1MjU2Nlx1MjU1N1x1MjU2MFx1MjU2Y1x1MjU2M1x1MjU1YVx1MjU2OVx1MjU1ZFx1MjU1Mlx1MjU2NFx1MjU1NVx1MjU1ZVx1MjU2YVx1MjU2MVx1MjU1OFx1MjU2N1x1MjU1Ylx1MjU1M1x1MjU2NVx1MjU1Nlx1MjU1Zlx1MjU2Ylx1MjU2Mlx1MjU1OVx1''@;'; put 'put ''MjU2OFx1MjU1Y1x1MjU1MVx1MjU1MFx1MjU2ZFx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU5M1x1ZmZmZCIuc3BsaXQoIiIpLHM9MDtzIT1jWzI0OV0ubGVuZ3RoOysrcyk2NTUzMyE9PWNbMjQ5XVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzI0OV1bc11dPTYzNzQ0K3MsaFs2Mzc0NCtzXT1jWzI0''@;'; put 'put ''OV1bc10pO3JldHVybntlbmM6eSxkZWM6aH19KCksalsxMjUwXT1mdW5jdGlvbigpe2Zvcih2YXIgaD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgx''@;'; put 'put ''ZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRc''@;'; put 'put ''dTIwMzBcdTAxNjBcdTIwMzlcdTAxNWFcdTAxNjRcdTAxN2RcdTAxNzlcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNWJcdTAxNjVcdTAxN2VcdTAxN2FceGEwXHUwMmM3XHUwMmQ4XHUwMTQxXHhhNFx1''@;'; put 'put ''MDEwNFx4YTZceGE3XHhhOFx4YTlcdTAxNWVceGFiXHhhY1x4YWRceGFlXHUwMTdiXHhiMFx4YjFcdTAyZGJcdTAxNDJceGI0XHhiNVx4YjZceGI3XHhiOFx1MDEwNVx1MDE1Zlx4YmJcdTAxM2RcdTAyZGRcdTAxM2VcdTAxN2NcdTAxNTRceGMxXHhjMlx1MDEwMlx4YzRcdTAxMzlcdTAxMDZc''@;'; put 'put ''eGM3XHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMWFceGNkXHhjZVx1MDEwZVx1MDExMFx1MDE0M1x1MDE0N1x4ZDNceGQ0XHUwMTUwXHhkNlx4ZDdcdTAxNThcdTAxNmVceGRhXHUwMTcwXHhkY1x4ZGRcdTAxNjJceGRmXHUwMTU1XHhlMVx4ZTJcdTAxMDNceGU0XHUwMTNhXHUwMTA3XHhlN1x1''@;'; put 'put ''MDEwZFx4ZTlcdTAxMTlceGViXHUwMTFiXHhlZFx4ZWVcdTAxMGZcdTAxMTFcdTAxNDRcdTAxNDhceGYzXHhmNFx1MDE1MVx4ZjZceGY3XHUwMTU5XHUwMTZmXHhmYVx1MDE3MVx4ZmNceGZkXHUwMTYzXHUwMmQ5Iix5PVtdLGM9e30scz0wOzI1NiE9czsrK3MpNjU1MzMhPT1oLmNoYXJDb2Rl''@;'; put 'put ''QXQocykmJihjW2guY2hhckF0KHMpXT1zKSx5W3NdPWguY2hhckF0KHMpO3JldHVybntlbmM6YyxkZWM6eX19KCksalsxMjUxXT1mdW5jdGlvbigpe2Zvcih2YXIgaD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgx''@;'; put 'put ''NFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0MDJcdTA0MDNcdTIwMWFc''@;'; put 'put ''dTA0NTNcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTIwYWNcdTIwMzBcdTA0MDlcdTIwMzlcdTA0MGFcdTA0MGNcdTA0MGJcdTA0MGZcdTA0NTJcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTA0NTlcdTIwM2FcdTA0NWFcdTA0NWNcdTA0''@;'; put 'put ''NWJcdTA0NWZceGEwXHUwNDBlXHUwNDVlXHUwNDA4XHhhNFx1MDQ5MFx4YTZceGE3XHUwNDAxXHhhOVx1MDQwNFx4YWJceGFjXHhhZFx4YWVcdTA0MDdceGIwXHhiMVx1MDQwNlx1MDQ1Nlx1MDQ5MVx4YjVceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDQ1NFx4YmJcdTA0NThcdTA0MDVcdTA0NTVc''@;'; put 'put ''dTA0NTdcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0''@;'; put 'put ''MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVc''@;'; put 'put ''dTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYiLHk9W10sYz17fSxzPTA7MjU2IT1zOysrcyk2NTUzMyE9PWguY2hhckNvZGVBdChzKSYmKGNbaC5jaGFyQXQocyldPXMpLHlbc109aC5jaGFyQXQocyk7cmV0dXJue2VuYzpjLGRlYzp5''@;'; put 'put ''fX0oKSxqWzEyNTJdPWZ1bmN0aW9uKCl7Zm9yKHZhciBoPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0u''@;'; put 'put ''LzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx1''@;'; put 'put ''ZmZmZFx1MDE3ZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x1ZmZmZFx1MDE3ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNc''@;'; put 'put ''eGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4''@;'; put 'put ''ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhm''@;'; put 'put ''ZiIseT1bXSxjPXt9LHM9MDsyNTYhPXM7KytzKTY1NTMzIT09aC5jaGFyQ29kZUF0KHMpJiYoY1toLmNoYXJBdChzKV09cykseVtzXT1oLmNoYXJBdChzKTtyZXR1cm57ZW5jOmMsZGVjOnl9fSgpLGpbMTI1M109ZnVuY3Rpb24oKXtmb3IodmFyIGg9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVc''@;'; put 'put ''eDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZn''@;'; put 'put ''aGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEz''@;'; put 'put ''XHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MDM4NVx1MDM4Nlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdWZmZmRceGFiXHhhY1x4YWRceGFlXHUyMDE1XHhiMFx4YjFceGIyXHhiM1x1MDM4NFx4YjVceGI2XHhiN1x1MDM4''@;'; put 'put ''OFx1MDM4OVx1MDM4YVx4YmJcdTAzOGNceGJkXHUwMzhlXHUwMzhmXHUwMzkwXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHVmZmZkXHUwM2EzXHUwM2E0''@;'; put 'put ''XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2FhXHUwM2FiXHUwM2FjXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2IwXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUw''@;'; put 'put ''M2MwXHUwM2MxXHUwM2MyXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUwM2NhXHUwM2NiXHUwM2NjXHUwM2NkXHUwM2NlXHVmZmZkIix5PVtdLGM9e30scz0wOzI1NiE9czsrK3MpNjU1MzMhPT1oLmNoYXJDb2RlQXQocykmJihjW2guY2hhckF0KHMpXT1zKSx5''@;'; put 'put ''W3NdPWguY2hhckF0KHMpO3JldHVybntlbmM6YyxkZWM6eX19KCksalsxMjU0XT1mdW5jdGlvbigpe2Zvcih2YXIgaD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4''@;'; put 'put ''MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIw''@;'; put 'put ''MjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhh''@;'; put 'put ''NFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNk''@;'; put 'put ''XHhjZVx4Y2ZcdTAxMWVceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxMzBcdTAxNWVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExZlx4ZjFceGYyXHhmM1x4ZjRc''@;'; put 'put ''eGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDEzMVx1MDE1Zlx4ZmYiLHk9W10sYz17fSxzPTA7MjU2IT1zOysrcyk2NTUzMyE9PWguY2hhckNvZGVBdChzKSYmKGNbaC5jaGFyQXQocyldPXMpLHlbc109aC5jaGFyQXQocyk7cmV0dXJue2VuYzpjLGRlYzp5fX0oKSxqWzEyNTVd''@;'; put 'put ''PWZ1bmN0aW9uKCl7Zm9yKHZhciBoPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6''@;'; put 'put ''Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBceGExXHhhMlx4YTNcdTIwYWFceGE1XHhhNlx4YTdceGE4XHhhOVx4ZDdceGFiXHhhY1x4YWRceGFlXHhh''@;'; put 'put ''Zlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGY3XHhiYlx4YmNceGJkXHhiZVx4YmZcdTA1YjBcdTA1YjFcdTA1YjJcdTA1YjNcdTA1YjRcdTA1YjVcdTA1YjZcdTA1YjdcdTA1YjhcdTA1YjlcdWZmZmRcdTA1YmJcdTA1YmNcdTA1YmRcdTA1YmVcdTA1YmZcdTA1''@;'; put 'put ''YzBcdTA1YzFcdTA1YzJcdTA1YzNcdTA1ZjBcdTA1ZjFcdTA1ZjJcdTA1ZjNcdTA1ZjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJc''@;'; put 'put ''dTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRcdWZmZmRcdTIwMGVcdTIwMGZcdWZmZmQiLHk9W10sYz17fSxzPTA7MjU2IT1zOysrcyk2NTUzMyE9PWguY2hhckNvZGVB''@;'; put 'put ''dChzKSYmKGNbaC5jaGFyQXQocyldPXMpLHlbc109aC5jaGFyQXQocyk7cmV0dXJue2VuYzpjLGRlYzp5fX0oKSxqWzEyNTZdPWZ1bmN0aW9uKCl7Zm9yKHZhciBoPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0''@;'; put 'put ''XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1MDY3ZVx1MjAxYVx1''@;'; put 'put ''MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDY3OVx1MjAzOVx1MDE1Mlx1MDY4Nlx1MDY5OFx1MDY4OFx1MDZhZlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDZhOVx1MjEyMlx1MDY5MVx1MjAzYVx1MDE1M1x1MjAwY1x1MjAw''@;'; put 'put ''ZFx1MDZiYVx4YTBcdTA2MGNceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1MDZiZVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx1MDYxYlx4YmJceGJjXHhiZFx4YmVcdTA2MWZcdTA2YzFcdTA2MjFcdTA2MjJcdTA2''@;'; put 'put ''MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZceGQ3XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHUwNjQwXHUwNjQxXHUwNjQyXHUw''@;'; put 'put ''NjQzXHhlMFx1MDY0NFx4ZTJcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDY0OVx1MDY0YVx4ZWVceGVmXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHhmNFx1MDY0Zlx1MDY1MFx4ZjdcdTA2NTFceGY5XHUwNjUyXHhmYlx4ZmNcdTIwMGVcdTIwMGZcdTA2''@;'; put 'put ''ZDIiLHk9W10sYz17fSxzPTA7MjU2IT1zOysrcyk2NTUzMyE9PWguY2hhckNvZGVBdChzKSYmKGNbaC5jaGFyQXQocyldPXMpLHlbc109aC5jaGFyQXQocyk7cmV0dXJue2VuYzpjLGRlYzp5fX0oKSxqWzEyNTddPWZ1bmN0aW9uKCl7Zm9yKHZhciBoPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1''@;'; put 'put ''XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVm''@;'; put 'put ''Z2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx4YThcdTAyYzdceGI4XHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUy''@;'; put 'put ''MDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHhhZlx1MDJkYlx1ZmZmZFx4YTBcdWZmZmRceGEyXHhhM1x4YTRcdWZmZmRceGE2XHhhN1x4ZDhceGE5XHUwMTU2XHhhYlx4YWNceGFkXHhhZVx4YzZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4ZjhceGI5XHUwMTU3''@;'; put 'put ''XHhiYlx4YmNceGJkXHhiZVx4ZTZcdTAxMDRcdTAxMmVcdTAxMDBcdTAxMDZceGM0XHhjNVx1MDExOFx1MDExMlx1MDEwY1x4YzlcdTAxNzlcdTAxMTZcdTAxMjJcdTAxMzZcdTAxMmFcdTAxM2JcdTAxNjBcdTAxNDNcdTAxNDVceGQzXHUwMTRjXHhkNVx4ZDZceGQ3XHUwMTcyXHUwMTQxXHUw''@;'; put 'put ''MTVhXHUwMTZhXHhkY1x1MDE3Ylx1MDE3ZFx4ZGZcdTAxMDVcdTAxMmZcdTAxMDFcdTAxMDdceGU0XHhlNVx1MDExOVx1MDExM1x1MDEwZFx4ZTlcdTAxN2FcdTAxMTdcdTAxMjNcdTAxMzdcdTAxMmJcdTAxM2NcdTAxNjFcdTAxNDRcdTAxNDZceGYzXHUwMTRkXHhmNVx4ZjZceGY3XHUwMTcz''@;'; put 'put ''XHUwMTQyXHUwMTViXHUwMTZiXHhmY1x1MDE3Y1x1MDE3ZVx1MDJkOSIseT1bXSxjPXt9LHM9MDsyNTYhPXM7KytzKTY1NTMzIT09aC5jaGFyQ29kZUF0KHMpJiYoY1toLmNoYXJBdChzKV09cykseVtzXT1oLmNoYXJBdChzKTtyZXR1cm57ZW5jOmMsZGVjOnl9fSgpLGpbMTI1OF09ZnVuY3Rp''@;'; put 'put ''b24oKXtmb3IodmFyIGg9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BB''@;'; put 'put ''QkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHUwMTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHVmZmZkXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIx''@;'; put 'put ''XHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAxMDJceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx1MDMwMFx4Y2RceGNlXHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1MDFhMFx4ZDZceGQ3XHhk''@;'; put 'put ''OFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTAzMDFceGVkXHhlZVx4ZWZcdTAxMTFceGYxXHUwMzIzXHhmM1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMWIw''@;'; put 'put ''XHUyMGFiXHhmZiIseT1bXSxjPXt9LHM9MDsyNTYhPXM7KytzKTY1NTMzIT09aC5jaGFyQ29kZUF0KHMpJiYoY1toLmNoYXJBdChzKV09cykseVtzXT1oLmNoYXJBdChzKTtyZXR1cm57ZW5jOmMsZGVjOnl9fSgpLGpbMWU0XT1mdW5jdGlvbigpe2Zvcih2YXIgaD0iXDBceDAxXHgwMlx4MDNc''@;'; put 'put ''eDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5f''@;'; put 'put ''YGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1''@;'; put 'put ''MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNc''@;'; put 'put ''dTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdWZiMDFcdWZiMDJcdTIwMjFceGI3''@;'; put 'put ''XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLHk9W10sYz17fSxzPTA7MjU2''@;'; put 'put ''IT1zOysrcyk2NTUzMyE9PWguY2hhckNvZGVBdChzKSYmKGNbaC5jaGFyQXQocyldPXMpLHlbc109aC5jaGFyQXQocyk7cmV0dXJue2VuYzpjLGRlYzp5fX0oKSxqWzEwMDA2XT1mdW5jdGlvbigpe2Zvcih2YXIgaD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxy''@;'; put 'put ''XHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6''@;'; put 'put ''e3x9flx4N2ZceGM0XHhiOVx4YjJceGM5XHhiM1x4ZDZceGRjXHUwMzg1XHhlMFx4ZTJceGU0XHUwMzg0XHhhOFx4ZTdceGU5XHhlOFx4ZWFceGViXHhhM1x1MjEyMlx4ZWVceGVmXHUyMDIyXHhiZFx1MjAzMFx4ZjRceGY2XHhhNlx4YWRceGY5XHhmYlx4ZmNcdTIwMjBcdTAzOTNcdTAzOTRc''@;'; put 'put ''dTAzOThcdTAzOWJcdTAzOWVcdTAzYTBceGRmXHhhZVx4YTlcdTAzYTNcdTAzYWFceGE3XHUyMjYwXHhiMFx1MDM4N1x1MDM5MVx4YjFcdTIyNjRcdTIyNjVceGE1XHUwMzkyXHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk5XHUwMzlhXHUwMzljXHUwM2E2XHUwM2FiXHUwM2E4XHUwM2E5XHUwM2Fj''@;'; put 'put ''XHUwMzlkXHhhY1x1MDM5Zlx1MDNhMVx1MjI0OFx1MDNhNFx4YWJceGJiXHUyMDI2XHhhMFx1MDNhNVx1MDNhN1x1MDM4Nlx1MDM4OFx1MDE1M1x1MjAxM1x1MjAxNVx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzYWRcdTAzYWVcdTAzYWZc''@;'; put 'put ''dTAzY2NcdTAzOGZcdTAzY2RcdTAzYjFcdTAzYjJcdTAzYzhcdTAzYjRcdTAzYjVcdTAzYzZcdTAzYjNcdTAzYjdcdTAzYjlcdTAzYmVcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmZcdTAzYzBcdTAzY2VcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYjhcdTAzYzlcdTAzYzJcdTAzYzdcdTAz''@;'; put 'put ''YzVcdTAzYjZcdTAzY2FcdTAzY2JcdTAzOTBcdTAzYjBcdWZmZmQiLHk9W10sYz17fSxzPTA7MjU2IT1zOysrcyk2NTUzMyE9PWguY2hhckNvZGVBdChzKSYmKGNbaC5jaGFyQXQocyldPXMpLHlbc109aC5jaGFyQXQocyk7cmV0dXJue2VuYzpjLGRlYzp5fX0oKSxqWzEwMDA3XT1mdW5jdGlv''@;'; put 'put ''bigpe2Zvcih2YXIgaD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFC''@;'; put 'put ''Q0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0''@;'; put 'put ''MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx1MDQwNlx4YWVceGE5XHUyMTIyXHUwNDAyXHUwNDUyXHUyMjYwXHUw''@;'; put 'put ''NDAzXHUwNDUzXHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MDQ1Nlx4YjVcdTIyMDJcdTA0MDhcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MDlcdTA0NTlcdTA0MGFcdTA0NWFcdTA0NThcdTA0MDVceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwNDBi''@;'; put 'put ''XHUwNDViXHUwNDBjXHUwNDVjXHUwNDU1XHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjAxZVx1MDQwZVx1MDQ1ZVx1MDQwZlx1MDQ1Zlx1MjExNlx1MDQwMVx1MDQ1MVx1MDQ0Zlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQz''@;'; put 'put ''N1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx4YTQiLHk9W10sYz17fSxzPTA7MjU2IT1z''@;'; put 'put ''Oysrcyk2NTUzMyE9PWguY2hhckNvZGVBdChzKSYmKGNbaC5jaGFyQXQocyldPXMpLHlbc109aC5jaGFyQXQocyk7cmV0dXJue2VuYzpjLGRlYzp5fX0oKSxqWzEwMDA4XT1mdW5jdGlvbigpe3ZhciBzLGg9W10seT17fSxjPVtdO2ZvcihjWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgw''@;'; put 'put ''Nlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hp''@;'; put 'put ''amtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4ODBcdWY4ZDhcdWY4ZDlcdWY4ZGFcdWY4ZGJcdWY4ZGNcdWY4ZGRcdWY4ZGVcdWY4ZGZcdWY4ZTBcdWY4ZTFcdWY4ZTJcdWY4ZTNcdWY4ZTRcdWY4ZTVcdWY4ZTZcdWY4ZTdcdWY4ZThcdWY4ZTlcdWY4ZWFcdWY4ZWJcdWY4ZWNcdWY4ZWRcdWY4''@;'; put 'put ''ZWVcdWY4ZWZcdWY4ZjBcdWY4ZjFcdWY4ZjJcdWY4ZjNcdWY4ZjRcdWY4ZjVcdWY4ZjZcdWY4ZjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY4ZjhcdWY4ZjlcdWY4ZmFcdWY4ZmJcdWY4ZmNcdWY4ZmRcdWY4ZmVcdWY4ZmYiLnNwbGl0KCIiKSxzPTA7cyE9Y1swXS5sZW5ndGg7Kytz''@;'; put 'put ''KTY1NTMzIT09Y1swXVtzXS5jaGFyQ29kZUF0KDApJiYoeVtjWzBdW3NdXT0wK3MsaFswK3NdPWNbMF1bc10pO2ZvcihjWzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1MzAwMVx1MzAwMlx1MzBmYlx1MDJjOVx1MDJjN1x4YThcdTMwMDNcdTMwMDVcdTIwMTVcdWZmNWVcdWZmZmRcdTIwMjZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVc''@;'; put 'put ''dTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTZcdTMwMTdcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyMzZcdTIyMjdcdTIyMjhcdTIyMTFcdTIyMGZcdTIyMmFcdTIyMjlcdTIyMDhcdTIyMzdcdTIyMWFcdTIyYTVcdTIyMjVcdTIyMjBcdTIz''@;'; put 'put ''MTJcdTIyOTlcdTIyMmJcdTIyMmVcdTIyNjFcdTIyNGNcdTIyNDhcdTIyM2RcdTIyMWRcdTIyNjBcdTIyNmVcdTIyNmZcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZjA0XHhhNFx1ZmZlMFx1ZmZlMVx1MjAzMFx4YTdc''@;'; put 'put ''dTIxMTZcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTIwM2JcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTNcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNjFdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE2MV1b''@;'; put 'put ''c10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNjFdW3NdXT00MTIxNitzLGhbNDEyMTYrc109Y1sxNjFdW3NdKTtmb3IoY1sxNjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0ODhcdTI0ODlcdTI0OGFc''@;'; put 'put ''dTI0OGJcdTI0OGNcdTI0OGRcdTI0OGVcdTI0OGZcdTI0OTBcdTI0OTFcdTI0OTJcdTI0OTNcdTI0OTRcdTI0OTVcdTI0OTZcdTI0OTdcdTI0OThcdTI0OTlcdTI0OWFcdTI0OWJcdTI0NzRcdTI0NzVcdTI0NzZcdTI0NzdcdTI0NzhcdTI0NzlcdTI0N2FcdTI0N2JcdTI0N2NcdTI0N2RcdTI0''@;'; put 'put ''N2VcdTI0N2ZcdTI0ODBcdTI0ODFcdTI0ODJcdTI0ODNcdTI0ODRcdTI0ODVcdTI0ODZcdTI0ODdcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdWZmZmRcdWZmZmRcdTMyMjBcdTMyMjFcdTMyMjJcdTMyMjNcdTMyMjRcdTMyMjVc''@;'; put 'put ''dTMyMjZcdTMyMjdcdTMyMjhcdTMyMjlcdWZmZmRcdWZmZmRcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdTIxNmFcdTIxNmJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNjJdLmxlbmd0aDsrK3MpNjU1''@;'; put 'put ''MzMhPT1jWzE2Ml1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNjJdW3NdXT00MTQ3MitzLGhbNDE0NzIrc109Y1sxNjJdW3NdKTtmb3IoY1sxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMDFcdWZmMDJcdWZmMDNcdWZmZTVcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZmMGZcdWZmMTBcdWZmMTFc''@;'; put 'put ''dWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZm''@;'; put 'put ''MmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmM2NcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhc''@;'; put 'put ''dWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNjNdLmxl''@;'; put 'put ''bmd0aDsrK3MpNjU1MzMhPT1jWzE2M11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNjNdW3NdXT00MTcyOCtzLGhbNDE3Mjgrc109Y1sxNjNdW3NdKTtmb3IoY1sxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZc''@;'; put 'put ''dTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMw''@;'; put 'put ''NmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZc''@;'; put 'put ''dTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7''@;'; put 'put ''cyE9Y1sxNjRdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE2NF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNjRdW3NdXT00MTk4NCtzLGhbNDE5ODQrc109Y1sxNjRdW3NdKTtmb3IoY1sxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMwYWJcdTMwYWNcdTMwYWRc''@;'; put 'put ''dTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZcdTMwYzdcdTMwYzhcdTMw''@;'; put 'put ''YzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdTMwZTBcdTMwZTFcdTMwZTJcdTMwZTNcdTMwZTRc''@;'; put 'put ''dTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxzPTA7cyE9Y1sxNjVdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE2NV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNjVdW3NdXT00MjI0MCtzLGhbNDIyNDArc109Y1sxNjVdW3NdKTtmb3IoY1sxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJc''@;'; put 'put ''dTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAz''@;'; put 'put ''YjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNjZdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE2Nl1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNjZdW3NdXT00MjQ5NitzLGhbNDI0OTYrc109Y1sxNjZdW3NdKTtmb3IoY1sxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFcdTA0MTZcdTA0MTdc''@;'; put 'put ''dTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2Vc''@;'; put 'put ''dTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNjddLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE2N11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNjddW3NdXT00Mjc1MitzLGhbNDI3NTIrc109Y1sxNjddW3NdKTtmb3IoY1sxNjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAxMDFceGUxXHUwMWNlXHhlMFx1MDExM1x4ZTlcdTAxMWJceGU4XHUw''@;'; put 'put ''MTJiXHhlZFx1MDFkMFx4ZWNcdTAxNGRceGYzXHUwMWQyXHhmMlx1MDE2Ylx4ZmFcdTAxZDRceGY5XHUwMWQ2XHUwMWQ4XHUwMWRhXHUwMWRjXHhmY1x4ZWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMxMDVcdTMxMDZcdTMx''@;'; put 'put ''MDdcdTMxMDhcdTMxMDlcdTMxMGFcdTMxMGJcdTMxMGNcdTMxMGRcdTMxMGVcdTMxMGZcdTMxMTBcdTMxMTFcdTMxMTJcdTMxMTNcdTMxMTRcdTMxMTVcdTMxMTZcdTMxMTdcdTMxMThcdTMxMTlcdTMxMWFcdTMxMWJcdTMxMWNcdTMxMWRcdTMxMWVcdTMxMWZcdTMxMjBcdTMxMjFcdTMxMjJc''@;'; put 'put ''dTMxMjNcdTMxMjRcdTMxMjVcdTMxMjZcdTMxMjdcdTMxMjhcdTMxMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNjhdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE2OF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNjhdW3NdXT00MzAwOCtzLGhbNDMwMDgrc109Y1sxNjhdW3NdKTtmb3IoY1sxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDFcdTI1MDJcdTI1MDNcdTI1MDRcdTI1MDVc''@;'; put 'put ''dTI1MDZcdTI1MDdcdTI1MDhcdTI1MDlcdTI1MGFcdTI1MGJcdTI1MGNcdTI1MGRcdTI1MGVcdTI1MGZcdTI1MTBcdTI1MTFcdTI1MTJcdTI1MTNcdTI1MTRcdTI1MTVcdTI1MTZcdTI1MTdcdTI1MThcdTI1MTlcdTI1MWFcdTI1MWJcdTI1MWNcdTI1MWRcdTI1MWVcdTI1MWZcdTI1MjBcdTI1''@;'; put 'put ''MjFcdTI1MjJcdTI1MjNcdTI1MjRcdTI1MjVcdTI1MjZcdTI1MjdcdTI1MjhcdTI1MjlcdTI1MmFcdTI1MmJcdTI1MmNcdTI1MmRcdTI1MmVcdTI1MmZcdTI1MzBcdTI1MzFcdTI1MzJcdTI1MzNcdTI1MzRcdTI1MzVcdTI1MzZcdTI1MzdcdTI1MzhcdTI1MzlcdTI1M2FcdTI1M2JcdTI1M2Nc''@;'; put 'put ''dTI1M2RcdTI1M2VcdTI1M2ZcdTI1NDBcdTI1NDFcdTI1NDJcdTI1NDNcdTI1NDRcdTI1NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdTI1NGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNjldLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE2OV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNjldW3NdXT00MzI2NCtzLGhbNDMyNjQrc109Y1sxNjldW3NdKTtmb3IoY1sxNzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1NGFcdTk2M2ZcdTU3YzNcdTYzMjhcdTU0Y2VcdTU1MDlcdTU0YzBc''@;'; put 'put ''dTc2OTFcdTc2NGNcdTg1M2NcdTc3ZWVcdTgyN2VcdTc4OGRcdTcyMzFcdTk2OThcdTk3OGRcdTZjMjhcdTViODlcdTRmZmFcdTYzMDlcdTY2OTdcdTVjYjhcdTgwZmFcdTY4NDhcdTgwYWVcdTY2MDJcdTc2Y2VcdTUxZjlcdTY1NTZcdTcxYWNcdTdmZjFcdTg4ODRcdTUwYjJcdTU5NjVcdTYx''@;'; put 'put ''Y2FcdTZmYjNcdTgyYWRcdTYzNGNcdTYyNTJcdTUzZWRcdTU0MjdcdTdiMDZcdTUxNmJcdTc1YTRcdTVkZjRcdTYyZDRcdThkY2JcdTk3NzZcdTYyOGFcdTgwMTlcdTU3NWRcdTk3MzhcdTdmNjJcdTcyMzhcdTc2N2RcdTY3Y2ZcdTc2N2VcdTY0NDZcdTRmNzBcdThkMjVcdTYyZGNcdTdhMTdc''@;'; put 'put ''dTY1OTFcdTczZWRcdTY0MmNcdTYyNzNcdTgyMmNcdTk4ODFcdTY3N2ZcdTcyNDhcdTYyNmVcdTYyY2NcdTRmMzRcdTc0ZTNcdTUzNGFcdTUyOWVcdTdlY2FcdTkwYTZcdTVlMmVcdTY4ODZcdTY5OWNcdTgxODBcdTdlZDFcdTY4ZDJcdTc4YzVcdTg2OGNcdTk1NTFcdTUwOGRcdThjMjRcdTgy''@;'; put 'put ''ZGVcdTgwZGVcdTUzMDVcdTg5MTJcdTUyNjVcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNzZdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE3Nl1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNzZdW3NdXT00NTA1NitzLGhbNDUwNTYrc109Y1sxNzZdW3NdKTtmb3IoY1sxNzddPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1ODRcdTk2ZjlcdTRmZGRcdTU4MjFcdTk5NzFc''@;'; put 'put ''dTViOWRcdTYyYjFcdTYyYTVcdTY2YjRcdThjNzlcdTljOGRcdTcyMDZcdTY3NmZcdTc4OTFcdTYwYjJcdTUzNTFcdTUzMTdcdThmODhcdTgwY2NcdThkMWRcdTk0YTFcdTUwMGRcdTcyYzhcdTU5MDdcdTYwZWJcdTcxMTlcdTg4YWJcdTU5NTRcdTgyZWZcdTY3MmNcdTdiMjhcdTVkMjlcdTdl''@;'; put 'put ''ZjdcdTc1MmRcdTZjZjVcdThlNjZcdThmZjhcdTkwM2NcdTlmM2JcdTZiZDRcdTkxMTlcdTdiMTRcdTVmN2NcdTc4YTdcdTg0ZDZcdTg1M2RcdTZiZDVcdTZiZDlcdTZiZDZcdTVlMDFcdTVlODdcdTc1ZjlcdTk1ZWRcdTY1NWRcdTVmMGFcdTVmYzVcdThmOWZcdTU4YzFcdTgxYzJcdTkwN2Zc''@;'; put 'put ''dTk2NWJcdTk3YWRcdThmYjlcdTdmMTZcdThkMmNcdTYyNDFcdTRmYmZcdTUzZDhcdTUzNWVcdThmYThcdThmYTlcdThmYWJcdTkwNGRcdTY4MDdcdTVmNmFcdTgxOThcdTg4NjhcdTljZDZcdTYxOGJcdTUyMmJcdTc2MmFcdTVmNmNcdTY1OGNcdTZmZDJcdTZlZThcdTViYmVcdTY0NDhcdTUx''@;'; put 'put ''NzVcdTUxYjBcdTY3YzRcdTRlMTlcdTc5YzlcdTk5N2NcdTcwYjNcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNzddLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE3N11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNzddW3NdXT00NTMxMitzLGhbNDUzMTIrc109Y1sxNzddW3NdKTtmb3IoY1sx''@;'; put 'put ''NzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1YzVcdTVlNzZcdTczYmJc''@;'; put 'put ''dTgzZTBcdTY0YWRcdTYyZThcdTk0YjVcdTZjZTJcdTUzNWFcdTUyYzNcdTY0MGZcdTk0YzJcdTdiOTRcdTRmMmZcdTVlMWJcdTgyMzZcdTgxMTZcdTgxOGFcdTZlMjRcdTZjY2FcdTlhNzNcdTYzNTVcdTUzNWNcdTU0ZmFcdTg4NjVcdTU3ZTBcdTRlMGRcdTVlMDNcdTZiNjVcdTdjM2ZcdTkw''@;'; put 'put ''ZThcdTYwMTZcdTY0ZTZcdTczMWNcdTg4YzFcdTY3NTBcdTYyNGRcdThkMjJcdTc3NmNcdThlMjlcdTkxYzdcdTVmNjlcdTgzZGNcdTg1MjFcdTk5MTBcdTUzYzJcdTg2OTVcdTZiOGJcdTYwZWRcdTYwZThcdTcwN2ZcdTgyY2RcdTgyMzFcdTRlZDNcdTZjYTdcdTg1Y2ZcdTY0Y2RcdTdjZDlc''@;'; put 'put ''dTY5ZmRcdTY2ZjlcdTgzNDlcdTUzOTVcdTdiNTZcdTRmYTdcdTUxOGNcdTZkNGJcdTVjNDJcdThlNmRcdTYzZDJcdTUzYzlcdTgzMmNcdTgzMzZcdTY3ZTVcdTc4YjRcdTY0M2RcdTViZGZcdTVjOTRcdTVkZWVcdThiZTdcdTYyYzZcdTY3ZjRcdThjN2FcdTY0MDBcdTYzYmFcdTg3NDlcdTk5''@;'; put 'put ''OGJcdThjMTdcdTdmMjBcdTk0ZjJcdTRlYTdcdTk2MTBcdTk4YTRcdTY2MGNcdTczMTZcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNzhdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE3OF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNzhdW3NdXT00NTU2OCtzLGhbNDU1Njgrc109Y1sxNzhd''@;'; put 'put ''W3NdKTtmb3IoY1sxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3M2Fc''@;'; put 'put ''dTVjMWRcdTVlMzhcdTk1N2ZcdTUwN2ZcdTgwYTBcdTUzODJcdTY1NWVcdTc1NDVcdTU1MzFcdTUwMjFcdThkODVcdTYyODRcdTk0OWVcdTY3MWRcdTU2MzJcdTZmNmVcdTVkZTJcdTU0MzVcdTcwOTJcdThmNjZcdTYyNmZcdTY0YTRcdTYzYTNcdTVmN2JcdTZmODhcdTkwZjRcdTgxZTNcdThm''@;'; put 'put ''YjBcdTVjMThcdTY2NjhcdTVmZjFcdTZjODlcdTk2NDhcdThkODFcdTg4NmNcdTY0OTFcdTc5ZjBcdTU3Y2VcdTZhNTlcdTYyMTBcdTU0NDhcdTRlNThcdTdhMGJcdTYwZTlcdTZmODRcdThiZGFcdTYyN2ZcdTkwMWVcdTlhOGJcdTc5ZTRcdTU0MDNcdTc1ZjRcdTYzMDFcdTUzMTlcdTZjNjBc''@;'; put 'put ''dThmZGZcdTVmMWJcdTlhNzBcdTgwM2JcdTlmN2ZcdTRmODhcdTVjM2FcdThkNjRcdTdmYzVcdTY1YTVcdTcwYmRcdTUxNDVcdTUxYjJcdTg2NmJcdTVkMDdcdTViYTBcdTYyYmRcdTkxNmNcdTc1NzRcdThlMGNcdTdhMjBcdTYxMDFcdTdiNzlcdTRlYzdcdTdlZjhcdTc3ODVcdTRlMTFcdTgx''@;'; put 'put ''ZWRcdTUyMWRcdTUxZmFcdTZhNzFcdTUzYThcdThlODdcdTk1MDRcdTk2Y2ZcdTZlYzFcdTk2NjRcdTY5NWFcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxNzldLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE3OV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxNzldW3NdXT00NTgyNCtzLGhbNDU4''@;'; put 'put ''MjQrc109Y1sxNzldW3NdKTtmb3IoY1sxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTc4NDBcdTUwYThcdTc3ZDdcdTY0MTBcdTg5ZTZcdTU5MDRcdTYzZTNcdTVkZGRcdTdhN2ZcdTY5M2RcdTRmMjBcdTgyMzlcdTU1OThcdTRlMzJcdTc1YWVcdTdhOTdcdTVlNjJcdTVlOGFcdTk1ZWZcdTUyMWJcdTU0MzlcdTcwOGFcdTYzNzZcdTk1MjRcdTU3ODJcdTY2MjVcdTY5''@;'; put 'put ''M2ZcdTkxODdcdTU1MDdcdTZkZjNcdTdlYWZcdTg4MjJcdTYyMzNcdTdlZjBcdTc1YjVcdTgzMjhcdTc4YzFcdTk2Y2NcdThmOWVcdTYxNDhcdTc0ZjdcdThiY2RcdTZiNjRcdTUyM2FcdThkNTBcdTZiMjFcdTgwNmFcdTg0NzFcdTU2ZjFcdTUzMDZcdTRlY2VcdTRlMWJcdTUxZDFcdTdjOTdc''@;'; put 'put ''dTkxOGJcdTdjMDdcdTRmYzNcdThlN2ZcdTdiZTFcdTdhOWNcdTY0NjdcdTVkMTRcdTUwYWNcdTgxMDZcdTc2MDFcdTdjYjlcdTZkZWNcdTdmZTBcdTY3NTFcdTViNThcdTViZjhcdTc4Y2JcdTY0YWVcdTY0MTNcdTYzYWFcdTYzMmJcdTk1MTlcdTY0MmRcdThmYmVcdTdiNTRcdTc2MjlcdTYy''@;'; put 'put ''NTNcdTU5MjdcdTU0NDZcdTZiNzlcdTUwYTNcdTYyMzRcdTVlMjZcdTZiODZcdTRlZTNcdThkMzdcdTg4OGJcdTVmODVcdTkwMmVcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxODBdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE4MF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxODBdW3NdXT00''@;'; put 'put ''NjA4MCtzLGhbNDYwODArc109Y1sxODBdW3NdKTtmb3IoY1sxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTYwMjBcdTgwM2RcdTYyYzVcdTRlMzlcdTUzNTVcdTkwZjhcdTYzYjhcdTgwYzZcdTY1ZTZcdTZjMmVcdTRmNDZcdTYwZWVcdTZkZTFcdThiZGVcdTVmMzlcdTg2Y2JcdTVmNTNcdTYzMjFcdTUxNWFcdTgzNjFcdTY4NjNcdTUyMDBcdTYzNjNcdThlNDhcdTUw''@;'; put 'put ''MTJcdTVjOWJcdTc5NzdcdTViZmNcdTUyMzBcdTdhM2JcdTYwYmNcdTkwNTNcdTc2ZDdcdTVmYjdcdTVmOTdcdTc2ODRcdThlNmNcdTcwNmZcdTc2N2JcdTdiNDlcdTc3YWFcdTUxZjNcdTkwOTNcdTU4MjRcdTRmNGVcdTZlZjRcdThmZWFcdTY1NGNcdTdiMWJcdTcyYzRcdTZkYTRcdTdmZGZc''@;'; put 'put ''dTVhZTFcdTYyYjVcdTVlOTVcdTU3MzBcdTg0ODJcdTdiMmNcdTVlMWRcdTVmMWZcdTkwMTJcdTdmMTRcdTk4YTBcdTYzODJcdTZlYzdcdTc4OThcdTcwYjlcdTUxNzhcdTk3NWJcdTU3YWJcdTc1MzVcdTRmNDNcdTc1MzhcdTVlOTdcdTYwZTZcdTU5NjBcdTZkYzBcdTZiYmZcdTc4ODlcdTUz''@;'; put 'put ''ZmNcdTk2ZDVcdTUxY2JcdTUyMDFcdTYzODlcdTU0MGFcdTk0OTNcdThjMDNcdThkY2NcdTcyMzlcdTc4OWZcdTg3NzZcdThmZWRcdThjMGRcdTUzZTBcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxODFdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE4MV1bc10uY2hhckNvZGVBdCgwKSYmKHlb''@;'; put 'put ''Y1sxODFdW3NdXT00NjMzNitzLGhbNDYzMzYrc109Y1sxODFdW3NdKTtmb3IoY1sxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMDFcdTc2ZWZcdTUzZWVcdTk0ODlcdTk4NzZcdTlmMGVcdTk1MmRcdTViOWFcdThiYTJcdTRlMjJcdTRlMWNcdTUxYWNcdTg0NjNcdTYxYzJcdTUyYThcdTY4MGJcdTRmOTdcdTYwNmJcdTUxYmJcdTZkMWVcdTUxNWNcdTYyOTZcdTY1''@;'; put 'put ''OTdcdTk2NjFcdThjNDZcdTkwMTdcdTc1ZDhcdTkwZmRcdTc3NjNcdTZiZDJcdTcyOGFcdTcyZWNcdThiZmJcdTU4MzVcdTc3NzlcdThkNGNcdTY3NWNcdTk1NDBcdTgwOWFcdTVlYTZcdTZlMjFcdTU5OTJcdTdhZWZcdTc3ZWRcdTk1M2JcdTZiYjVcdTY1YWRcdTdmMGVcdTU4MDZcdTUxNTFc''@;'; put 'put ''dTk2MWZcdTViZjlcdTU4YTlcdTU0MjhcdThlNzJcdTY1NjZcdTk4N2ZcdTU2ZTRcdTk0OWRcdTc2ZmVcdTkwNDFcdTYzODdcdTU0YzZcdTU5MWFcdTU5M2FcdTU3OWJcdThlYjJcdTY3MzVcdThkZmFcdTgyMzVcdTUyNDFcdTYwZjBcdTU4MTVcdTg2ZmVcdTVjZThcdTllNDVcdTRmYzRcdTk4''@;'; put 'put ''OWRcdThiYjlcdTVhMjVcdTYwNzZcdTUzODRcdTYyN2NcdTkwNGZcdTkxMDJcdTk5N2ZcdTYwNjlcdTgwMGNcdTUxM2ZcdTgwMzNcdTVjMTRcdTk5NzVcdTZkMzFcdTRlOGNcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxODJdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE4Ml1bc10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKHlbY1sxODJdW3NdXT00NjU5MitzLGhbNDY1OTIrc109Y1sxODJdW3NdKTtmb3IoY1sxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkMzBcdTUzZDFcdTdmNWFcdTdiNGZcdTRmMTBcdTRlNGZcdTk2MDBcdTZjZDVcdTczZDBcdTg1ZTlcdTVlMDZcdTc1NmFcdTdmZmJcdTZhMGFcdTc3ZmVcdTk0OTJcdTdlNDFcdTUxZTFcdTcwZTZcdTUzY2RcdThm''@;'; put 'put ''ZDRcdTgzMDNcdThkMjlcdTcyYWZcdTk5NmRcdTZjZGJcdTU3NGFcdTgyYjNcdTY1YjlcdTgwYWFcdTYyM2ZcdTk2MzJcdTU5YThcdTRlZmZcdThiYmZcdTdlYmFcdTY1M2VcdTgzZjJcdTk3NWVcdTU1NjFcdTk4ZGVcdTgwYTVcdTUzMmFcdThiZmRcdTU0MjBcdTgwYmFcdTVlOWZcdTZjYjhc''@;'; put 'put ''dThkMzlcdTgyYWNcdTkxNWFcdTU0MjlcdTZjMWJcdTUyMDZcdTdlYjdcdTU3NWZcdTcxMWFcdTZjN2VcdTdjODlcdTU5NGJcdTRlZmRcdTVmZmZcdTYxMjRcdTdjYWFcdTRlMzBcdTVjMDFcdTY3YWJcdTg3MDJcdTVjZjBcdTk1MGJcdTk4Y2VcdTc1YWZcdTcwZmRcdTkwMjJcdTUxYWZcdTdm''@;'; put 'put ''MWRcdThiYmRcdTU5NDlcdTUxZTRcdTRmNWJcdTU0MjZcdTU5MmJcdTY1NzdcdTgwYTRcdTViNzVcdTYyNzZcdTYyYzJcdThmOTBcdTVlNDVcdTZjMWZcdTdiMjZcdTRmMGZcdTRmZDhcdTY3MGRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxODNdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE4''@;'; put 'put ''M11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxODNdW3NdXT00Njg0OCtzLGhbNDY4NDgrc109Y1sxODNdW3NdKTtmb3IoY1sxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkNmVcdTZkYWFcdTc5OGZcdTg4YjFcdTVmMTdcdTc1MmJcdTYyOWFcdThmODVcdTRmZWZcdTkxZGNcdTY1YTdcdTgxMmZcdTgxNTFcdTVlOWNcdTgxNTBcdThkNzRcdTUyNmZcdTg5ODZcdThk''@;'; put 'put ''NGJcdTU5MGRcdTUwODVcdTRlZDhcdTk2MWNcdTcyMzZcdTgxNzlcdThkMWZcdTViY2NcdThiYTNcdTk2NDRcdTU5ODdcdTdmMWFcdTU0OTBcdTU2NzZcdTU2MGVcdThiZTVcdTY1MzlcdTY5ODJcdTk0OTlcdTc2ZDZcdTZlODlcdTVlNzJcdTc1MThcdTY3NDZcdTY3ZDFcdTdhZmZcdTgwOWRc''@;'; put 'put ''dThkNzZcdTYxMWZcdTc5YzZcdTY1NjJcdThkNjNcdTUxODhcdTUyMWFcdTk0YTJcdTdmMzhcdTgwOWJcdTdlYjJcdTVjOTdcdTZlMmZcdTY3NjBcdTdiZDlcdTc2OGJcdTlhZDhcdTgxOGZcdTdmOTRcdTdjZDVcdTY0MWVcdTk1NTBcdTdhM2ZcdTU0NGFcdTU0ZTVcdTZiNGNcdTY0MDFcdTYy''@;'; put 'put ''MDhcdTllM2RcdTgwZjNcdTc1OTlcdTUyNzJcdTk3NjlcdTg0NWJcdTY4M2NcdTg2ZTRcdTk2MDFcdTk2OTRcdTk0ZWNcdTRlMmFcdTU0MDRcdTdlZDlcdTY4MzlcdThkZGZcdTgwMTVcdTY2ZjRcdTVlOWFcdTdmYjlcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxODRdLmxlbmd0aDsrK3Mp''@;'; put 'put ''NjU1MzMhPT1jWzE4NF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxODRdW3NdXT00NzEwNCtzLGhbNDcxMDQrc109Y1sxODRdW3NdKTtmb3IoY1sxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3YzJcdTgwM2ZcdTY4OTdcdTVkZTVcdTY1M2JcdTUyOWZcdTYwNmRcdTlmOWFcdTRmOWJcdThlYWNcdTUxNmNcdTViYWJcdTVmMTNcdTVkZTlcdTZjNWVcdTYyZjFcdThk''@;'; put 'put ''MjFcdTUxNzFcdTk0YTlcdTUyZmVcdTZjOWZcdTgyZGZcdTcyZDdcdTU3YTJcdTY3ODRcdThkMmRcdTU5MWZcdThmOWNcdTgzYzdcdTU0OTVcdTdiOGRcdTRmMzBcdTZjYmRcdTViNjRcdTU5ZDFcdTlmMTNcdTUzZTRcdTg2Y2FcdTlhYThcdThjMzdcdTgwYTFcdTY1NDVcdTk4N2VcdTU2ZmFc''@;'; put 'put ''dTk2YzdcdTUyMmVcdTc0ZGNcdTUyNTBcdTViZTFcdTYzMDJcdTg5MDJcdTRlNTZcdTYyZDBcdTYwMmFcdTY4ZmFcdTUxNzNcdTViOThcdTUxYTBcdTg5YzJcdTdiYTFcdTk5ODZcdTdmNTBcdTYwZWZcdTcwNGNcdThkMmZcdTUxNDlcdTVlN2ZcdTkwMWJcdTc0NzBcdTg5YzRcdTU3MmRcdTc4''@;'; put 'put ''NDVcdTVmNTJcdTlmOWZcdTk1ZmFcdThmNjhcdTliM2NcdThiZTFcdTc2NzhcdTY4NDJcdTY3ZGNcdThkZWFcdThkMzVcdTUyM2RcdThmOGFcdTZlZGFcdTY4Y2RcdTk1MDVcdTkwZWRcdTU2ZmRcdTY3OWNcdTg4ZjlcdThmYzdcdTU0YzhcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxODVd''@;'; put 'put ''Lmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE4NV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxODVdW3NdXT00NzM2MCtzLGhbNDczNjArc109Y1sxODVdW3NdKTtmb3IoY1sxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhYjhcdTViNjlcdTZkNzdcdTZjMjZcdTRlYTVcdTViYjNcdTlhODdcdTkxNjNcdTYxYThcdTkwYWZcdTk3ZTlcdTU0MmJcdTZkYjVcdTViZDJcdTUx''@;'; put 'put ''ZmRcdTU1OGFcdTdmNTVcdTdmZjBcdTY0YmNcdTYzNGRcdTY1ZjFcdTYxYmVcdTYwOGRcdTcxMGFcdTZjNTdcdTZjNDlcdTU5MmZcdTY3NmRcdTgyMmFcdTU4ZDVcdTU2OGVcdThjNmFcdTZiZWJcdTkwZGRcdTU5N2RcdTgwMTdcdTUzZjdcdTZkNjlcdTU0NzVcdTU1OWRcdTgzNzdcdTgzY2Zc''@;'; put 'put ''dTY4MzhcdTc5YmVcdTU0OGNcdTRmNTVcdTU0MDhcdTc2ZDJcdThjODlcdTk2MDJcdTZjYjNcdTZkYjhcdThkNmJcdTg5MTBcdTllNjRcdThkM2FcdTU2M2ZcdTllZDFcdTc1ZDVcdTVmODhcdTcyZTBcdTYwNjhcdTU0ZmNcdTRlYThcdTZhMmFcdTg4NjFcdTYwNTJcdThmNzBcdTU0YzRcdTcw''@;'; put 'put ''ZDhcdTg2NzlcdTllM2ZcdTZkMmFcdTViOGZcdTVmMThcdTdlYTJcdTU1ODlcdTRmYWZcdTczMzRcdTU0M2NcdTUzOWFcdTUwMTlcdTU0MGVcdTU0N2NcdTRlNGVcdTVmZmRcdTc0NWFcdTU4ZjZcdTg0NmJcdTgwZTFcdTg3NzRcdTcyZDBcdTdjY2FcdTZlNTZcdWZmZmQiLnNwbGl0KCIiKSxz''@;'; put 'put ''PTA7cyE9Y1sxODZdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE4Nl1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxODZdW3NdXT00NzYxNitzLGhbNDc2MTYrc109Y1sxODZdW3NdKTtmb3IoY1sxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMjdcdTg2NGVcdTU1MmNcdTYyYTRcdTRlOTJcdTZjYWFcdTYyMzdcdTgyYjFcdTU0ZDdcdTUzNGVcdTczM2VcdTZlZDFcdTc1''@;'; put 'put ''M2JcdTUyMTJcdTUzMTZcdThiZGRcdTY5ZDBcdTVmOGFcdTYwMDBcdTZkZWVcdTU3NGZcdTZiMjJcdTczYWZcdTY4NTNcdThmZDhcdTdmMTNcdTYzNjJcdTYwYTNcdTU1MjRcdTc1ZWFcdThjNjJcdTcxMTVcdTZkYTNcdTViYTZcdTVlN2JcdTgzNTJcdTYxNGNcdTllYzRcdTc4ZmFcdTg3NTdc''@;'; put 'put ''dTdjMjdcdTc2ODdcdTUxZjBcdTYwZjZcdTcxNGNcdTY2NDNcdTVlNGNcdTYwNGRcdThjMGVcdTcwNzBcdTYzMjVcdThmODlcdTVmYmRcdTYwNjJcdTg2ZDRcdTU2ZGVcdTZiYzFcdTYwOTRcdTYxNjdcdTUzNDlcdTYwZTBcdTY2NjZcdThkM2ZcdTc5ZmRcdTRmMWFcdTcwZTlcdTZjNDdcdThi''@;'; put 'put ''YjNcdThiZjJcdTdlZDhcdTgzNjRcdTY2MGZcdTVhNWFcdTliNDJcdTZkNTFcdTZkZjdcdThjNDFcdTZkM2JcdTRmMTlcdTcwNmJcdTgzYjdcdTYyMTZcdTYwZDFcdTk3MGRcdThkMjdcdTc5NzhcdTUxZmJcdTU3M2VcdTU3ZmFcdTY3M2FcdTc1NzhcdTdhM2RcdTc5ZWZcdTdiOTVcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxzPTA7cyE9Y1sxODddLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE4N11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxODddW3NdXT00Nzg3MitzLGhbNDc4NzIrc109Y1sxODddW3NdKTtmb3IoY1sxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwOGNcdTk5NjVcdThmZjlcdTZmYzBcdThiYTVcdTllMjFcdTU5ZWNcdTdlZTlcdTdmMDlcdTU0MDlcdTY3''@;'; put 'put ''ODFcdTY4ZDhcdThmOTFcdTdjNGRcdTk2YzZcdTUzY2FcdTYwMjVcdTc1YmVcdTZjNzJcdTUzNzNcdTVhYzlcdTdlYTdcdTYzMjRcdTUxZTBcdTgxMGFcdTVkZjFcdTg0ZGZcdTYyODBcdTUxODBcdTViNjNcdTRmMGVcdTc5NmRcdTUyNDJcdTYwYjhcdTZkNGVcdTViYzRcdTViYzJcdThiYTFc''@;'; put 'put ''dThiYjBcdTY1ZTJcdTVmY2NcdTk2NDVcdTU5OTNcdTdlZTdcdTdlYWFcdTU2MDlcdTY3YjdcdTU5MzlcdTRmNzNcdTViYjZcdTUyYTBcdTgzNWFcdTk4OGFcdThkM2VcdTc1MzJcdTk0YmVcdTUwNDdcdTdhM2NcdTRlZjdcdTY3YjZcdTlhN2VcdTVhYzFcdTZiN2NcdTc2ZDFcdTU3NWFcdTVj''@;'; put 'put ''MTZcdTdiM2FcdTk1ZjRcdTcxNGVcdTUxN2NcdTgwYTlcdTgyNzBcdTU5NzhcdTdmMDRcdTgzMjdcdTY4YzBcdTY3ZWNcdTc4YjFcdTc4NzdcdTYyZTNcdTYzNjFcdTdiODBcdTRmZWRcdTUyNmFcdTUxY2ZcdTgzNTBcdTY5ZGJcdTkyNzRcdThkZjVcdThkMzFcdTg5YzFcdTk1MmVcdTdiYWRc''@;'; put 'put ''dTRlZjZcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxODhdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE4OF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxODhdW3NdXT00ODEyOCtzLGhbNDgxMjgrc109Y1sxODhdW3NdKTtmb3IoY1sxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwNjVcdTgyMzBcdTUyNTFcdTk5NmZcdTZlMTBcdTZlODVcdTZkYTdcdTVlZmFcdTUw''@;'; put 'put ''ZjVcdTU5ZGNcdTVjMDZcdTZkNDZcdTZjNWZcdTc1ODZcdTg0OGJcdTY4NjhcdTU5NTZcdThiYjJcdTUzMjBcdTkxNzFcdTk2NGRcdTg1NDlcdTY5MTJcdTc5MDFcdTcxMjZcdTgwZjZcdTRlYTRcdTkwY2FcdTZkNDdcdTlhODRcdTVhMDdcdTU2YmNcdTY0MDVcdTk0ZjBcdTc3ZWJcdTRmYTVc''@;'; put 'put ''dTgxMWFcdTcyZTFcdTg5ZDJcdTk5N2FcdTdmMzRcdTdlZGVcdTUyN2ZcdTY1NTlcdTkxNzVcdThmN2ZcdThmODNcdTUzZWJcdTdhOTZcdTYzZWRcdTYzYTVcdTc2ODZcdTc5ZjhcdTg4NTdcdTk2MzZcdTYyMmFcdTUyYWJcdTgyODJcdTY4NTRcdTY3NzBcdTYzNzdcdTc3NmJcdTdhZWRcdTZk''@;'; put 'put ''MDFcdTdlZDNcdTg5ZTNcdTU5ZDBcdTYyMTJcdTg1YzlcdTgyYTVcdTc1NGNcdTUwMWZcdTRlY2JcdTc1YTVcdThiZWJcdTVjNGFcdTVkZmVcdTdiNGJcdTY1YTRcdTkxZDFcdTRlY2FcdTZkMjVcdTg5NWZcdTdkMjdcdTk1MjZcdTRlYzVcdThjMjhcdThmZGJcdTk3NzNcdTY2NGJcdTc5ODFc''@;'; put 'put ''dThmZDFcdTcwZWNcdTZkNzhcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxODldLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE4OV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxODldW3NdXT00ODM4NCtzLGhbNDgzODQrc109Y1sxODldW3NdKTtmb3IoY1sxOTBdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjM2RcdTUyYjJcdTgzNDZcdTUxNjJcdTgzMGVcdTc3NWJcdTY2''@;'; put 'put ''NzZcdTljYjhcdTRlYWNcdTYwY2FcdTdjYmVcdTdjYjNcdTdlY2ZcdTRlOTVcdThiNjZcdTY2NmZcdTk4ODhcdTk3NTlcdTU4ODNcdTY1NmNcdTk1NWNcdTVmODRcdTc1YzlcdTk3NTZcdTdhZGZcdTdhZGVcdTUxYzBcdTcwYWZcdTdhOThcdTYzZWFcdTdhNzZcdTdlYTBcdTczOTZcdTk3ZWRc''@;'; put 'put ''dTRlNDVcdTcwNzhcdTRlNWRcdTkxNTJcdTUzYTlcdTY1NTFcdTY1ZTdcdTgxZmNcdTgyMDVcdTU0OGVcdTVjMzFcdTc1OWFcdTk3YTBcdTYyZDhcdTcyZDlcdTc1YmRcdTVjNDVcdTlhNzlcdTgzY2FcdTVjNDBcdTU0ODBcdTc3ZTlcdTRlM2VcdTZjYWVcdTgwNWFcdTYyZDJcdTYzNmVcdTVk''@;'; put 'put ''ZThcdTUxNzdcdThkZGRcdThlMWVcdTk1MmZcdTRmZjFcdTUzZTVcdTYwZTdcdTcwYWNcdTUyNjdcdTYzNTBcdTllNDNcdTVhMWZcdTUwMjZcdTc3MzdcdTUzNzdcdTdlZTJcdTY0ODVcdTY1MmJcdTYyODlcdTYzOThcdTUwMTRcdTcyMzVcdTg5YzlcdTUxYjNcdThiYzBcdTdlZGRcdTU3NDdc''@;'; put 'put ''dTgzY2NcdTk0YTdcdTUxOWJcdTU0MWJcdTVjZmJcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxOTBdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE5MF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxOTBdW3NdXT00ODY0MCtzLGhbNDg2NDArc109Y1sxOTBdW3NdKTtmb3IoY1sxOTFdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmY2FcdTdhZTNcdTZkNWFcdTkwZTFcdTlh''@;'; put 'put ''OGZcdTU1ODBcdTU0OTZcdTUzNjFcdTU0YWZcdTVmMDBcdTYzZTlcdTY5NzdcdTUxZWZcdTYxNjhcdTUyMGFcdTU4MmFcdTUyZDhcdTU3NGVcdTc4MGRcdTc3MGJcdTVlYjdcdTYxNzdcdTdjZTBcdTYyNWJcdTYyOTdcdTRlYTJcdTcwOTVcdTgwMDNcdTYyZjdcdTcwZTRcdTk3NjBcdTU3Nzdc''@;'; put 'put ''dTgyZGJcdTY3ZWZcdTY4ZjVcdTc4ZDVcdTk4OTdcdTc5ZDFcdTU4ZjNcdTU0YjNcdTUzZWZcdTZlMzRcdTUxNGJcdTUyM2JcdTViYTJcdThiZmVcdTgwYWZcdTU1NDNcdTU3YTZcdTYwNzNcdTU3NTFcdTU0MmRcdTdhN2FcdTYwNTBcdTViNTRcdTYzYTdcdTYyYTBcdTUzZTNcdTYyNjNcdTVi''@;'; put 'put ''YzdcdTY3YWZcdTU0ZWRcdTdhOWZcdTgyZTZcdTkxNzdcdTVlOTNcdTg4ZTRcdTU5MzhcdTU3YWVcdTYzMGVcdThkZThcdTgwZWZcdTU3NTdcdTdiNzdcdTRmYTlcdTVmZWJcdTViYmRcdTZiM2VcdTUzMjFcdTdiNTBcdTcyYzJcdTY4NDZcdTc3ZmZcdTc3MzZcdTY1ZjdcdTUxYjVcdTRlOGZc''@;'; put 'put ''dTc2ZDRcdTVjYmZcdTdhYTVcdTg0NzVcdTU5NGVcdTliNDFcdTUwODBcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxOTFdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE5MV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxOTFdW3NdXT00ODg5NitzLGhbNDg4OTYrc109Y1sxOTFdW3NdKTtmb3Io''@;'; put 'put ''Y1sxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5ODhcdTYxMjdcdTZl''@;'; put 'put ''ODNcdTU3NjRcdTY2MDZcdTYzNDZcdTU2ZjBcdTYyZWNcdTYyNjlcdTVlZDNcdTk2MTRcdTU3ODNcdTYyYzlcdTU1ODdcdTg3MjFcdTgxNGFcdThmYTNcdTU1NjZcdTgzYjFcdTY3NjVcdThkNTZcdTg0ZGRcdTVhNmFcdTY4MGZcdTYyZTZcdTdiZWVcdTk2MTFcdTUxNzBcdTZmOWNcdThjMzBc''@;'; put 'put ''dTYzZmRcdTg5YzhcdTYxZDJcdTdmMDZcdTcwYzJcdTZlZTVcdTc0MDVcdTY5OTRcdTcyZmNcdTVlY2FcdTkwY2VcdTY3MTdcdTZkNmFcdTYzNWVcdTUyYjNcdTcyNjJcdTgwMDFcdTRmNmNcdTU5ZTVcdTkxNmFcdTcwZDlcdTZkOWRcdTUyZDJcdTRlNTBcdTk2ZjdcdTk1NmRcdTg1N2VcdTc4''@;'; put 'put ''Y2FcdTdkMmZcdTUxMjFcdTU3OTJcdTY0YzJcdTgwOGJcdTdjN2JcdTZjZWFcdTY4ZjFcdTY5NWVcdTUxYjdcdTUzOThcdTY4YThcdTcyODFcdTllY2VcdTdiZjFcdTcyZjhcdTc5YmJcdTZmMTNcdTc0MDZcdTY3NGVcdTkxY2NcdTljYTRcdTc5M2NcdTgzODlcdTgzNTRcdTU0MGZcdTY4MTdc''@;'; put 'put ''dTRlM2RcdTUzODlcdTUyYjFcdTc4M2VcdTUzODZcdTUyMjlcdTUwODhcdTRmOGJcdTRmZDBcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxOTJdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE5Ml1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxOTJdW3NdXT00OTE1MitzLGhbNDkxNTIrc109Y1sx''@;'; put 'put ''OTJdW3NdKTtmb3IoY1sxOTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1''@;'; put 'put ''ZTJcdTdhY2JcdTdjOTJcdTZjYTVcdTk2YjZcdTUyOWJcdTc0ODNcdTU0ZTlcdTRmZTlcdTgwNTRcdTgzYjJcdThmZGVcdTk1NzBcdTVlYzlcdTYwMWNcdTZkOWZcdTVlMThcdTY1NWJcdTgxMzhcdTk0ZmVcdTYwNGJcdTcwYmNcdTdlYzNcdTdjYWVcdTUxYzlcdTY4ODFcdTdjYjFcdTgyNmZc''@;'; put 'put ''dTRlMjRcdThmODZcdTkxY2ZcdTY2N2VcdTRlYWVcdThjMDVcdTY0YTlcdTgwNGFcdTUwZGFcdTc1OTdcdTcxY2VcdTViZTVcdThmYmRcdTZmNjZcdTRlODZcdTY0ODJcdTk1NjNcdTVlZDZcdTY1OTlcdTUyMTdcdTg4YzJcdTcwYzhcdTUyYTNcdTczMGVcdTc0MzNcdTY3OTdcdTc4ZjdcdTk3''@;'; put 'put ''MTZcdTRlMzRcdTkwYmJcdTljZGVcdTZkY2JcdTUxZGJcdThkNDFcdTU0MWRcdTYyY2VcdTczYjJcdTgzZjFcdTk2ZjZcdTlmODRcdTk0YzNcdTRmMzZcdTdmOWFcdTUxY2NcdTcwNzVcdTk2NzVcdTVjYWRcdTk4ODZcdTUzZTZcdTRlZTRcdTZlOWNcdTc0MDlcdTY5YjRcdTc4NmJcdTk5OGZc''@;'; put 'put ''dTc1NTlcdTUyMThcdTc2MjRcdTZkNDFcdTY3ZjNcdTUxNmRcdTlmOTlcdTgwNGJcdTU0OTlcdTdiM2NcdTdhYmZcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxOTNdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE5M11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxOTNdW3NdXT00OTQwOCtzLGhb''@;'; put 'put ''NDk0MDgrc109Y1sxOTNdW3NdKTtmb3IoY1sxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTk2ODZcdTU3ODRcdTYyZTJcdTk2NDdcdTY5N2NcdTVhMDRcdTY0MDJcdTdiZDNcdTZmMGZcdTk2NGJcdTgyYTZcdTUzNjJcdTk4ODVcdTVlOTBcdTcwODlcdTYzYjNcdTUzNjRcdTg2NGZcdTljODFcdTllOTNcdTc4OGNcdTk3MzJcdThkZWZcdThkNDJcdTllN2ZcdTZmNWVc''@;'; put 'put ''dTc5ODRcdTVmNTVcdTk2NDZcdTYyMmVcdTlhNzRcdTU0MTVcdTk0ZGRcdTRmYTNcdTY1YzVcdTVjNjVcdTVjNjFcdTdmMTVcdTg2NTFcdTZjMmZcdTVmOGJcdTczODdcdTZlZTRcdTdlZmZcdTVjZTZcdTYzMWJcdTViNmFcdTZlZTZcdTUzNzVcdTRlNzFcdTYzYTBcdTc1NjVcdTYyYTFcdThm''@;'; put 'put ''NmVcdTRmMjZcdTRlZDFcdTZjYTZcdTdlYjZcdThiYmFcdTg0MWRcdTg3YmFcdTdmNTdcdTkwM2JcdTk1MjNcdTdiYTlcdTlhYTFcdTg4ZjhcdTg0M2RcdTZkMWJcdTlhODZcdTdlZGNcdTU5ODhcdTllYmJcdTczOWJcdTc4MDFcdTg2ODJcdTlhNmNcdTlhODJcdTU2MWJcdTU0MTdcdTU3Y2Jc''@;'; put 'put ''dTRlNzBcdTllYTZcdTUzNTZcdThmYzhcdTgxMDlcdTc3OTJcdTk5OTJcdTg2ZWVcdTZlZTFcdTg1MTNcdTY2ZmNcdTYxNjJcdTZmMmJcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxOTRdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE5NF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxOTRdW3Nd''@;'; put 'put ''XT00OTY2NCtzLGhbNDk2NjQrc109Y1sxOTRdW3NdKTtmb3IoY1sxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjMjlcdTgyOTJcdTgzMmJcdTc2ZjJcdTZjMTNcdTVmZDlcdTgzYmRcdTczMmJcdTgzMDVcdTk1MWFcdTZiZGJcdTc3ZGJcdTk0YzZcdTUzNmZcdTgzMDJcdTUxOTJcdTVlM2RcdThjOGNcdThkMzhcdTRlNDhcdTczYWJcdTY3OWFcdTY4ODVcdTkxNzZc''@;'; put 'put ''dTk3MDlcdTcxNjRcdTZjYTFcdTc3MDlcdTVhOTJcdTk1NDFcdTZiY2ZcdTdmOGVcdTY2MjdcdTViZDBcdTU5YjlcdTVhOWFcdTk1ZThcdTk1ZjdcdTRlZWNcdTg0MGNcdTg0OTlcdTZhYWNcdTc2ZGZcdTk1MzBcdTczMWJcdTY4YTZcdTViNWZcdTc3MmZcdTkxOWFcdTk3NjFcdTdjZGNcdThm''@;'; put 'put ''ZjdcdThjMWNcdTVmMjVcdTdjNzNcdTc5ZDhcdTg5YzVcdTZjY2NcdTg3MWNcdTViYzZcdTVlNDJcdTY4YzlcdTc3MjBcdTdlZjVcdTUxOTVcdTUxNGRcdTUyYzlcdTVhMjlcdTdmMDVcdTk3NjJcdTgyZDdcdTYzY2ZcdTc3ODRcdTg1ZDBcdTc5ZDJcdTZlM2FcdTVlOTlcdTU5OTlcdTg1MTFc''@;'; put 'put ''dTcwNmRcdTZjMTFcdTYyYmZcdTc2YmZcdTY1NGZcdTYwYWZcdTk1ZmRcdTY2MGVcdTg3OWZcdTllMjNcdTk0ZWRcdTU0MGRcdTU0N2RcdThjMmNcdTY0NzhcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxOTVdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE5NV1bc10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KHlbY1sxOTVdW3NdXT00OTkyMCtzLGhbNDk5MjArc109Y1sxOTVdW3NdKTtmb3IoY1sxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0NzlcdTg2MTFcdTZhMjFcdTgxOWNcdTc4ZThcdTY0NjlcdTliNTRcdTYyYjlcdTY3MmJcdTgzYWJcdTU4YThcdTllZDhcdTZjYWJcdTZmMjBcdTViZGVcdTk2NGNcdThjMGJcdTcyNWZcdTY3ZDBcdTYyYzdcdTcyNjFcdTRlYTlc''@;'; put 'put ''dTU5YzZcdTZiY2RcdTU4OTNcdTY2YWVcdTVlNTVcdTUyZGZcdTYxNTVcdTY3MjhcdTc2ZWVcdTc3NjZcdTcyNjdcdTdhNDZcdTYyZmZcdTU0ZWFcdTU0NTBcdTk0YTBcdTkwYTNcdTVhMWNcdTdlYjNcdTZjMTZcdTRlNDNcdTU5NzZcdTgwMTBcdTU5NDhcdTUzNTdcdTc1MzdcdTk2YmVcdTU2''@;'; put 'put ''Y2FcdTYzMjBcdTgxMTFcdTYwN2NcdTk1ZjlcdTZkZDZcdTU0NjJcdTk5ODFcdTUxODVcdTVhZTlcdTgwZmRcdTU5YWVcdTk3MTNcdTUwMmFcdTZjZTVcdTVjM2NcdTYyZGZcdTRmNjBcdTUzM2ZcdTgxN2JcdTkwMDZcdTZlYmFcdTg1MmJcdTYyYzhcdTVlNzRcdTc4YmVcdTY0YjVcdTYzN2Jc''@;'; put 'put ''dTVmZjVcdTVhMThcdTkxN2ZcdTllMWZcdTVjM2ZcdTYzNGZcdTgwNDJcdTViN2RcdTU1NmVcdTk1NGFcdTk1NGRcdTZkODVcdTYwYThcdTY3ZTBcdTcyZGVcdTUxZGRcdTViODFcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxOTZdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE5Nl1bc10uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKHlbY1sxOTZdW3NdXT01MDE3NitzLGhbNTAxNzYrc109Y1sxOTZdW3NdKTtmb3IoY1sxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyZTdcdTZjZGVcdTcyNWJcdTYyNmRcdTk0YWVcdTdlYmRcdTgxMTNcdTZkNTNcdTUxOWNcdTVmMDRcdTU5NzRcdTUyYWFcdTYwMTJcdTU5NzNcdTY2OTZcdTg2NTBcdTc1OWZcdTYzMmFcdTYxZTZcdTdjZWZc''@;'; put 'put ''dThiZmFcdTU0ZTZcdTZiMjdcdTllMjVcdTZiYjRcdTg1ZDVcdTU0NTVcdTUwNzZcdTZjYTRcdTU1NmFcdThkYjRcdTcyMmNcdTVlMTVcdTYwMTVcdTc0MzZcdTYyY2RcdTYzOTJcdTcyNGNcdTVmOThcdTZlNDNcdTZkM2VcdTY1MDBcdTZmNThcdTc2ZDhcdTc4ZDBcdTc2ZmNcdTc1NTRcdTUy''@;'; put 'put ''MjRcdTUzZGJcdTRlNTNcdTVlOWVcdTY1YzFcdTgwMmFcdTgwZDZcdTYyOWJcdTU0ODZcdTUyMjhcdTcwYWVcdTg4OGRcdThkZDFcdTZjZTFcdTU0NzhcdTgwZGFcdTU3ZjlcdTg4ZjRcdThkNTRcdTk2NmFcdTkxNGRcdTRmNjlcdTZjOWJcdTU1YjdcdTc2YzZcdTc4MzBcdTYyYThcdTcwZjlc''@;'; put 'put ''dTZmOGVcdTVmNmRcdTg0ZWNcdTY4ZGFcdTc4N2NcdTdiZjdcdTgxYThcdTY3MGJcdTllNGZcdTYzNjdcdTc4YjBcdTU3NmZcdTc4MTJcdTk3MzlcdTYyNzlcdTYyYWJcdTUyODhcdTc0MzVcdTZiZDdcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxOTddLmxlbmd0aDsrK3MpNjU1MzMhPT1j''@;'; put 'put ''WzE5N11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxOTddW3NdXT01MDQzMitzLGhbNTA0MzIrc109Y1sxOTddW3NdKTtmb3IoY1sxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1NjRcdTgxM2VcdTc1YjJcdTc2YWVcdTUzMzlcdTc1ZGVcdTUwZmJcdTVjNDFcdThiNmNcdTdiYzdcdTUwNGZcdTcyNDdcdTlhOTdcdTk4ZDhcdTZmMDJcdTc0ZTJcdTc5NjhcdTY0ODdc''@;'; put 'put ''dTc3YTVcdTYyZmNcdTk4OTFcdThkMmJcdTU0YzFcdTgwNThcdTRlNTJcdTU3NmFcdTgyZjlcdTg0MGRcdTVlNzNcdTUxZWRcdTc0ZjZcdThiYzRcdTVjNGZcdTU3NjFcdTZjZmNcdTk4ODdcdTVhNDZcdTc4MzRcdTliNDRcdThmZWJcdTdjOTVcdTUyNTZcdTYyNTFcdTk0ZmFcdTRlYzZcdTgz''@;'; put 'put ''ODZcdTg0NjFcdTgzZTlcdTg0YjJcdTU3ZDRcdTY3MzRcdTU3MDNcdTY2NmVcdTZkNjZcdThjMzFcdTY2ZGRcdTcwMTFcdTY3MWZcdTZiM2FcdTY4MTZcdTYyMWFcdTU5YmJcdTRlMDNcdTUxYzRcdTZmMDZcdTY3ZDJcdTZjOGZcdTUxNzZcdTY4Y2JcdTU5NDdcdTZiNjdcdTc1NjZcdTVkMGVc''@;'; put 'put ''dTgxMTBcdTlmNTBcdTY1ZDdcdTc5NDhcdTc5NDFcdTlhOTFcdThkNzdcdTVjODJcdTRlNWVcdTRmMDFcdTU0MmZcdTU5NTFcdTc4MGNcdTU2NjhcdTZjMTRcdThmYzRcdTVmMDNcdTZjN2RcdTZjZTNcdThiYWJcdTYzOTBcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sxOThdLmxlbmd0aDsr''@;'; put 'put ''K3MpNjU1MzMhPT1jWzE5OF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxOThdW3NdXT01MDY4OCtzLGhbNTA2ODgrc109Y1sxOThdW3NdKTtmb3IoY1sxOTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNzBcdTZkM2RcdTcyNzVcdTYyNjZcdTk0OGVcdTk0YzVcdTUzNDNcdThmYzFcdTdiN2VcdTRlZGZcdThjMjZcdTRlN2VcdTllZDRcdTk0YjFcdTk0YjNcdTUyNGRc''@;'; put 'put ''dTZmNWNcdTkwNjNcdTZkNDVcdThjMzRcdTU4MTFcdTVkNGNcdTZiMjBcdTZiNDlcdTY3YWFcdTU0NWJcdTgxNTRcdTdmOGNcdTU4OTlcdTg1MzdcdTVmM2FcdTYyYTJcdTZhNDdcdTk1MzlcdTY1NzJcdTYwODRcdTY4NjVcdTc3YTdcdTRlNTRcdTRmYThcdTVkZTdcdTk3OThcdTY0YWNcdTdm''@;'; put 'put ''ZDhcdTVjZWRcdTRmY2ZcdTdhOGRcdTUyMDdcdTgzMDRcdTRlMTRcdTYwMmZcdTdhODNcdTk0YTZcdTRmYjVcdTRlYjJcdTc5ZTZcdTc0MzRcdTUyZTRcdTgyYjlcdTY0ZDJcdTc5YmRcdTViZGRcdTZjODFcdTk3NTJcdThmN2JcdTZjMjJcdTUwM2VcdTUzN2ZcdTZlMDVcdTY0Y2VcdTY2NzRc''@;'; put 'put ''dTZjMzBcdTYwYzVcdTk4NzdcdThiZjdcdTVlODZcdTc0M2NcdTdhNzdcdTc5Y2JcdTRlMThcdTkwYjFcdTc0MDNcdTZjNDJcdTU2ZGFcdTkxNGJcdTZjYzVcdThkOGJcdTUzM2FcdTg2YzZcdTY2ZjJcdThlYWZcdTVjNDhcdTlhNzFcdTZlMjBcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1sx''@;'; put 'put ''OTldLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzE5OV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sxOTldW3NdXT01MDk0NCtzLGhbNTA5NDQrc109Y1sxOTldW3NdKTtmb3IoY1syMDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzZDZcdTVhMzZcdTlmOGJcdThkYTNcdTUzYmJcdTU3MDhcdTk4YTdcdTY3NDNcdTkxOWJcdTZjYzlcdTUxNjhcdTc1Y2FcdTYyZjNcdTcyYWNc''@;'; put 'put ''dTUyMzhcdTUyOWRcdTdmM2FcdTcwOTRcdTc2MzhcdTUzNzRcdTllNGFcdTY5YjdcdTc4NmVcdTk2YzBcdTg4ZDlcdTdmYTRcdTcxMzZcdTcxYzNcdTUxODlcdTY3ZDNcdTc0ZTRcdTU4ZTRcdTY1MThcdTU2YjdcdThiYTlcdTk5NzZcdTYyNzBcdTdlZDVcdTYwZjlcdTcwZWRcdTU4ZWNcdTRl''@;'; put 'put ''YzFcdTRlYmFcdTVmY2RcdTk3ZTdcdTRlZmJcdThiYTRcdTUyMDNcdTU5OGFcdTdlYWJcdTYyNTRcdTRlY2RcdTY1ZTVcdTYyMGVcdTgzMzhcdTg0YzlcdTgzNjNcdTg3OGRcdTcxOTRcdTZlYjZcdTViYjlcdTdlZDJcdTUxOTdcdTYzYzlcdTY3ZDRcdTgwODlcdTgzMzlcdTg4MTVcdTUxMTJc''@;'; put 'put ''dTViN2FcdTU5ODJcdThmYjFcdTRlNzNcdTZjNWRcdTUxNjVcdTg5MjVcdThmNmZcdTk2MmVcdTg1NGFcdTc0NWVcdTk1MTBcdTk1ZjBcdTZkYTZcdTgyZTVcdTVmMzFcdTY0OTJcdTZkMTJcdTg0MjhcdTgxNmVcdTljYzNcdTU4NWVcdThkNWJcdTRlMDlcdTUzYzFcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxzPTA7cyE9Y1syMDBdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIwMF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMDBdW3NdXT01MTIwMCtzLGhbNTEyMDArc109Y1syMDBdW3NdKTtmb3IoY1syMDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmMWVcdTY1NjNcdTY4NTFcdTU1ZDNcdTRlMjdcdTY0MTRcdTlhOWFcdTYyNmJcdTVhYzJcdTc0NWZcdTgyNzJcdTZkYTlc''@;'; put 'put ''dTY4ZWVcdTUwZTdcdTgzOGVcdTc4MDJcdTY3NDBcdTUyMzlcdTZjOTlcdTdlYjFcdTUwYmJcdTU1NjVcdTcxNWVcdTdiNWJcdTY2NTJcdTczY2FcdTgyZWJcdTY3NDlcdTVjNzFcdTUyMjBcdTcxN2RcdTg4NmJcdTk1ZWFcdTk2NTVcdTY0YzVcdThkNjFcdTgxYjNcdTU1ODRcdTZjNTVcdTYy''@;'; put 'put ''NDdcdTdmMmVcdTU4OTJcdTRmMjRcdTU1NDZcdThkNGZcdTY2NGNcdTRlMGFcdTVjMWFcdTg4ZjNcdTY4YTJcdTYzNGVcdTdhMGRcdTcwZTdcdTgyOGRcdTUyZmFcdTk3ZjZcdTVjMTFcdTU0ZThcdTkwYjVcdTdlY2RcdTU5NjJcdThkNGFcdTg2YzdcdTgyMGNcdTgyMGRcdThkNjZcdTY0NDRc''@;'; put 'put ''dTVjMDRcdTYxNTFcdTZkODlcdTc5M2VcdThiYmVcdTc4MzdcdTc1MzNcdTU0N2JcdTRmMzhcdThlYWJcdTZkZjFcdTVhMjBcdTdlYzVcdTc5NWVcdTZjODhcdTViYTFcdTVhNzZcdTc1MWFcdTgwYmVcdTYxNGVcdTZlMTdcdTU4ZjBcdTc1MWZcdTc1MjVcdTcyNzJcdTUzNDdcdTdlZjNcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMDFdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIwMV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMDFdW3NdXT01MTQ1NitzLGhbNTE0NTYrc109Y1syMDFdW3NdKTtmb3IoY1syMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3MDFcdTc2ZGJcdTUyNjlcdTgwZGNcdTU3MjNcdTVlMDhcdTU5MzFcdTcyZWVcdTY1YmRcdTZlN2Zc''@;'; put 'put ''dThiZDdcdTVjMzhcdTg2NzFcdTUzNDFcdTc3ZjNcdTYyZmVcdTY1ZjZcdTRlYzBcdTk4ZGZcdTg2ODBcdTViOWVcdThiYzZcdTUzZjJcdTc3ZTJcdTRmN2ZcdTVjNGVcdTlhNzZcdTU5Y2JcdTVmMGZcdTc5M2FcdTU4ZWJcdTRlMTZcdTY3ZmZcdTRlOGJcdTYyZWRcdThhOTNcdTkwMWRcdTUy''@;'; put 'put ''YmZcdTY2MmZcdTU1ZGNcdTU2NmNcdTkwMDJcdTRlZDVcdTRmOGRcdTkxY2FcdTk5NzBcdTZjMGZcdTVlMDJcdTYwNDNcdTViYTRcdTg5YzZcdThiZDVcdTY1MzZcdTYyNGJcdTk5OTZcdTViODhcdTViZmZcdTYzODhcdTU1MmVcdTUzZDdcdTc2MjZcdTUxN2RcdTg1MmNcdTY3YTJcdTY4YjNc''@;'; put 'put ''dTZiOGFcdTYyOTJcdThmOTNcdTUzZDRcdTgyMTJcdTZkZDFcdTc1OGZcdTRlNjZcdThkNGVcdTViNzBcdTcxOWZcdTg1YWZcdTY2OTFcdTY2ZDlcdTdmNzJcdTg3MDBcdTllY2RcdTlmMjBcdTVjNWVcdTY3MmZcdThmZjBcdTY4MTFcdTY3NWZcdTYyMGRcdTdhZDZcdTU4ODVcdTVlYjZcdTY1''@;'; put 'put ''NzBcdTZmMzFcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMDJdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIwMl1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMDJdW3NdXT01MTcxMitzLGhbNTE3MTIrc109Y1syMDJdW3NdKTtmb3IoY1syMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNTVcdTUyMzdcdTgwMGRcdTY0NTRcdTg4NzBcdTc1MjlcdTVlMDVcdTY4MTNc''@;'; put 'put ''dTYyZjRcdTk3MWNcdTUzY2NcdTcyM2RcdThjMDFcdTZjMzRcdTc3NjFcdTdhMGVcdTU0MmVcdTc3YWNcdTk4N2FcdTgyMWNcdThiZjRcdTc4NTVcdTY3MTRcdTcwYzFcdTY1YWZcdTY0OTVcdTU2MzZcdTYwMWRcdTc5YzFcdTUzZjhcdTRlMWRcdTZiN2JcdTgwODZcdTViZmFcdTU1ZTNcdTU2''@;'; put 'put ''ZGJcdTRmM2FcdTRmM2NcdTk5NzJcdTVkZjNcdTY3N2VcdTgwMzhcdTYwMDJcdTk4ODJcdTkwMDFcdTViOGJcdThiYmNcdThiZjVcdTY0MWNcdTgyNThcdTY0ZGVcdTU1ZmRcdTgyY2ZcdTkxNjVcdTRmZDdcdTdkMjBcdTkwMWZcdTdjOWZcdTUwZjNcdTU4NTFcdTZlYWZcdTViYmZcdThiYzlc''@;'; put 'put ''dTgwODNcdTkxNzhcdTg0OWNcdTdiOTdcdTg2N2RcdTk2OGJcdTk2OGZcdTdlZTVcdTlhZDNcdTc4OGVcdTVjODFcdTdhNTdcdTkwNDJcdTk2YTdcdTc5NWZcdTViNTlcdTYzNWZcdTdiMGJcdTg0ZDFcdTY4YWRcdTU1MDZcdTdmMjlcdTc0MTBcdTdkMjJcdTk1MDFcdTYyNDBcdTU4NGNcdTRl''@;'; put 'put ''ZDZcdTViODNcdTU5NzlcdTU4NTRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMDNdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIwM11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMDNdW3NdXT01MTk2OCtzLGhbNTE5Njgrc109Y1syMDNdW3NdKTtmb3IoY1syMDRdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczNmRcdTYzMWVcdThlNGJcdThlMGZcdTgwY2VcdTgyZDRc''@;'; put 'put ''dTYyYWNcdTUzZjBcdTZjZjBcdTkxNWVcdTU5MmFcdTYwMDFcdTZjNzBcdTU3NGRcdTY0NGFcdThkMmFcdTc2MmJcdTZlZTlcdTU3NWJcdTZhODBcdTc1ZjBcdTZmNmRcdThjMmRcdThjMDhcdTU3NjZcdTZiZWZcdTg4OTJcdTc4YjNcdTYzYTJcdTUzZjlcdTcwYWRcdTZjNjRcdTU4NThcdTY0''@;'; put 'put ''MmFcdTU4MDJcdTY4ZTBcdTgxOWJcdTU1MTBcdTdjZDZcdTUwMThcdThlYmFcdTZkY2NcdThkOWZcdTcwZWJcdTYzOGZcdTZkOWJcdTZlZDRcdTdlZTZcdTg0MDRcdTY4NDNcdTkwMDNcdTZkZDhcdTk2NzZcdThiYThcdTU5NTdcdTcyNzlcdTg1ZTRcdTgxN2VcdTc1YmNcdThhOGFcdTY4YWZc''@;'; put 'put ''dTUyNTRcdThlMjJcdTk1MTFcdTYzZDBcdTk4OThcdThlNDRcdTU1N2NcdTRmNTNcdTY2ZmZcdTU2OGZcdTYwZDVcdTZkOTVcdTUyNDNcdTVjNDlcdTU5MjlcdTZkZmJcdTU4NmJcdTc1MzBcdTc1MWNcdTYwNmNcdTgyMTRcdTgxNDZcdTYzMTFcdTY3NjFcdThmZTJcdTc3M2FcdThkZjNcdThk''@;'; put 'put ''MzRcdTk0YzFcdTVlMTZcdTUzODVcdTU0MmNcdTcwYzNcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMDRdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIwNF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMDRdW3NdXT01MjIyNCtzLGhbNTIyMjQrc109Y1syMDRdW3NdKTtmb3IoY1syMDVdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNDBcdTVlZjdcdTUwNWNcdTRlYWRc''@;'; put 'put ''dTVlYWRcdTYzM2FcdTgyNDdcdTkwMWFcdTY4NTBcdTkxNmVcdTc3YjNcdTU0MGNcdTk0ZGNcdTVmNjRcdTdhZTVcdTY4NzZcdTYzNDVcdTdiNTJcdTdlZGZcdTc1ZGJcdTUwNzdcdTYyOTVcdTU5MzRcdTkwMGZcdTUxZjhcdTc5YzNcdTdhODFcdTU2ZmVcdTVmOTJcdTkwMTRcdTZkODJcdTVj''@;'; put 'put ''NjBcdTU3MWZcdTU0MTBcdTUxNTRcdTZlNGRcdTU2ZTJcdTYzYThcdTk4OTNcdTgxN2ZcdTg3MTVcdTg5MmFcdTkwMDBcdTU0MWVcdTVjNmZcdTgxYzBcdTYyZDZcdTYyNThcdTgxMzFcdTllMzVcdTk2NDBcdTlhNmVcdTlhN2NcdTY5MmRcdTU5YTVcdTYyZDNcdTU1M2VcdTYzMTZcdTU0Yzdc''@;'; put 'put ''dTg2ZDlcdTZkM2NcdTVhMDNcdTc0ZTZcdTg4OWNcdTZiNmFcdTU5MTZcdThjNGNcdTVmMmZcdTZlN2VcdTczYTlcdTk4N2RcdTRlMzhcdTcwZjdcdTViOGNcdTc4OTdcdTYzM2RcdTY2NWFcdTc2OTZcdTYwY2JcdTViOWJcdTVhNDlcdTRlMDdcdTgxNTVcdTZjNmFcdTczOGJcdTRlYTFcdTY3''@;'; put 'put ''ODlcdTdmNTFcdTVmODBcdTY1ZmFcdTY3MWJcdTVmZDhcdTU5ODRcdTVhMDFcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMDVdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIwNV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMDVdW3NdXT01MjQ4MCtzLGhbNTI0ODArc109Y1syMDVdW3NdKTtm''@;'; put 'put ''b3IoY1syMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVkY2RcdTVmYWVc''@;'; put 'put ''dTUzNzFcdTk3ZTZcdThmZGRcdTY4NDVcdTU2ZjRcdTU1MmZcdTYwZGZcdTRlM2FcdTZmNGRcdTdlZjRcdTgyYzdcdTg0MGVcdTU5ZDRcdTRmMWZcdTRmMmFcdTVjM2VcdTdlYWNcdTY3MmFcdTg1MWFcdTU0NzNcdTc1NGZcdTgwYzNcdTU1ODJcdTliNGZcdTRmNGRcdTZlMmRcdThjMTNcdTVj''@;'; put 'put ''MDlcdTYxNzBcdTUzNmJcdTc2MWZcdTZlMjlcdTg2OGFcdTY1ODdcdTk1ZmJcdTdlYjlcdTU0M2JcdTdhMzNcdTdkMGFcdTk1ZWVcdTU1ZTFcdTdmYzFcdTc0ZWVcdTYzMWRcdTg3MTdcdTZkYTFcdTdhOWRcdTYyMTFcdTY1YTFcdTUzNjdcdTYzZTFcdTZjODNcdTVkZWJcdTU0NWNcdTk0YThc''@;'; put 'put ''dTRlNGNcdTZjNjFcdThiZWNcdTVjNGJcdTY1ZTBcdTgyOWNcdTY4YTdcdTU0M2VcdTU0MzRcdTZiY2JcdTZiNjZcdTRlOTRcdTYzNDJcdTUzNDhcdTgyMWVcdTRmMGRcdTRmYWVcdTU3NWVcdTYyMGFcdTk2ZmVcdTY2NjRcdTcyNjlcdTUyZmZcdTUyYTFcdTYwOWZcdThiZWZcdTY2MTRcdTcx''@;'; put 'put ''OTlcdTY3OTBcdTg5N2ZcdTc4NTJcdTc3ZmRcdTY2NzBcdTU2M2JcdTU0MzhcdTk1MjFcdTcyN2FcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMDZdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIwNl1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMDZdW3NdXT01MjczNitzLGhbNTI3MzYrc109''@;'; put 'put ''Y1syMDZdW3NdKTtmb3IoY1syMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTdhMDBcdTYwNmZcdTVlMGNcdTYwODlcdTgxOWRcdTU5MTVcdTYwZGNcdTcxODRcdTcwZWZcdTZlYWFcdTZjNTBcdTcyODBcdTZhODRcdTg4YWRcdTVlMmRcdTRlNjBcdTVhYjNcdTU1OWNcdTk0ZTNcdTZkMTdcdTdjZmJcdTk2OTlcdTYyMGZcdTdlYzZcdTc3OGVcdTg2N2VcdTUzMjNcdTk3''@;'; put 'put ''MWVcdThmOTZcdTY2ODdcdTVjZTFcdTRmYTBcdTcyZWRcdTRlMGJcdTUzYTZcdTU5MGZcdTU0MTNcdTYzODBcdTk1MjhcdTUxNDhcdTRlZDlcdTljOWNcdTdlYTRcdTU0YjhcdThkMjRcdTg4NTRcdTgyMzdcdTk1ZjJcdTZkOGVcdTVmMjZcdTVhY2NcdTY2M2VcdTk2NjlcdTczYjBcdTczMmVc''@;'; put 'put ''dTUzYmZcdTgxN2FcdTk5ODVcdTdmYTFcdTViYWFcdTk2NzdcdTk2NTBcdTdlYmZcdTc2ZjhcdTUzYTJcdTk1NzZcdTk5OTlcdTdiYjFcdTg5NDRcdTZlNThcdTRlNjFcdTdmZDRcdTc5NjVcdThiZTZcdTYwZjNcdTU0Y2RcdTRlYWJcdTk4NzlcdTVkZjdcdTZhNjFcdTUwY2ZcdTU0MTFcdThj''@;'; put 'put ''NjFcdTg0MjdcdTc4NWRcdTk3MDRcdTUyNGFcdTU0ZWVcdTU2YTNcdTk1MDBcdTZkODhcdTViYjVcdTZkYzZcdTY2NTNcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMDddLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIwN11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMDddW3NdXT01Mjk5Mitz''@;'; put 'put ''LGhbNTI5OTIrc109Y1syMDddW3NdKTtmb3IoY1syMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTVjMGZcdTViNWRcdTY4MjFcdTgwOTZcdTU1NzhcdTdiMTFcdTY1NDhcdTY5NTRcdTRlOWJcdTZiNDdcdTg3NGVcdTk3OGJcdTUzNGZcdTYzMWZcdTY0M2FcdTkwYWFcdTY1OWNcdTgwYzFcdThjMTBcdTUxOTlcdTY4YjBcdTUzNzhcdTg3ZjlcdTYxYzhcdTZjYzRcdTZj''@;'; put 'put ''ZmJcdThjMjJcdTVjNTFcdTg1YWFcdTgyYWZcdTk1MGNcdTZiMjNcdThmOWJcdTY1YjBcdTVmZmJcdTVmYzNcdTRmZTFcdTg4NDVcdTY2MWZcdTgxNjVcdTczMjlcdTYwZmFcdTUxNzRcdTUyMTFcdTU3OGJcdTVmNjJcdTkwYTJcdTg4NGNcdTkxOTJcdTVlNzhcdTY3NGZcdTYwMjdcdTU5ZDNc''@;'; put 'put ''dTUxNDRcdTUxZjZcdTgwZjhcdTUzMDhcdTZjNzlcdTk2YzRcdTcxOGFcdTRmMTFcdTRmZWVcdTdmOWVcdTY3M2RcdTU1YzVcdTk1MDhcdTc5YzBcdTg4OTZcdTdlZTNcdTU4OWZcdTYyMGNcdTk3MDBcdTg2NWFcdTU2MThcdTk4N2JcdTVmOTBcdThiYjhcdTg0YzRcdTkxNTdcdTUzZDlcdTY1''@;'; put 'put ''ZWRcdTVlOGZcdTc1NWNcdTYwNjRcdTdkNmVcdTVhN2ZcdTdlZWFcdTdlZWRcdThmNjlcdTU1YTdcdTViYTNcdTYwYWNcdTY1Y2JcdTczODRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMDhdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIwOF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMDhd''@;'; put 'put ''W3NdXT01MzI0OCtzLGhbNTMyNDgrc109Y1syMDhdW3NdKTtmb3IoY1syMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwMDlcdTc2NjNcdTc3MjlcdTdlZGFcdTk3NzRcdTg1OWJcdTViNjZcdTdhNzRcdTk2ZWFcdTg4NDBcdTUyY2JcdTcxOGZcdTVmYWFcdTY1ZWNcdThiZTJcdTViZmJcdTlhNmZcdTVkZTFcdTZiODlcdTZjNWJcdThiYWRcdThiYWZcdTkwMGFcdThm''@;'; put 'put ''YzVcdTUzOGJcdTYyYmNcdTllMjZcdTllMmRcdTU0NDBcdTRlMmJcdTgyYmRcdTcyNTlcdTg2OWNcdTVkMTZcdTg4NTlcdTZkYWZcdTk2YzVcdTU0ZDFcdTRlOWFcdThiYjZcdTcxMDlcdTU0YmRcdTk2MDlcdTcwZGZcdTZkZjlcdTc2ZDBcdTRlMjVcdTc4MTRcdTg3MTJcdTVjYTlcdTVlZjZc''@;'; put 'put ''dThhMDBcdTk4OWNcdTk2MGVcdTcwOGVcdTZjYmZcdTU5NDRcdTYzYTlcdTc3M2NcdTg4NGRcdTZmMTRcdTgyNzNcdTU4MzBcdTcxZDVcdTUzOGNcdTc4MWFcdTk2YzFcdTU1MDFcdTVmNjZcdTcxMzBcdTViYjRcdThjMWFcdTlhOGNcdTZiODNcdTU5MmVcdTllMmZcdTc5ZTdcdTY3NjhcdTYy''@;'; put 'put ''NmNcdTRmNmZcdTc1YTFcdTdmOGFcdTZkMGJcdTk2MzNcdTZjMjdcdTRlZjBcdTc1ZDJcdTUxN2JcdTY4MzdcdTZmM2VcdTkwODBcdTgxNzBcdTU5OTZcdTc0NzZcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMDldLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIwOV1bc10uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKHlbY1syMDldW3NdXT01MzUwNCtzLGhbNTM1MDQrc109Y1syMDldW3NdKTtmb3IoY1syMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0NDdcdTVjMjdcdTkwNjVcdTdhOTFcdThjMjNcdTU5ZGFcdTU0YWNcdTgyMDBcdTgzNmZcdTg5ODFcdTgwMDBcdTY5MzBcdTU2NGVcdTgwMzZcdTcyMzdcdTkxY2VcdTUxYjZcdTRlNWZcdTk4NzVcdTYzOTZcdTRlMWFcdTUz''@;'; put 'put ''ZjZcdTY2ZjNcdTgxNGJcdTU5MWNcdTZkYjJcdTRlMDBcdTU4ZjlcdTUzM2JcdTYzZDZcdTk0ZjFcdTRmOWRcdTRmMGFcdTg4NjNcdTk4OTBcdTU5MzdcdTkwNTdcdTc5ZmJcdTRlZWFcdTgwZjBcdTc1OTFcdTZjODJcdTViOWNcdTU5ZThcdTVmNWRcdTY5MDVcdTg2ODFcdTUwMWFcdTVkZjJc''@;'; put 'put ''dTRlNTlcdTc3ZTNcdTRlZTVcdTgyN2FcdTYyOTFcdTY2MTNcdTkwOTFcdTVjNzlcdTRlYmZcdTVmNzlcdTgxYzZcdTkwMzhcdTgwODRcdTc1YWJcdTRlYTZcdTg4ZDRcdTYxMGZcdTZiYzVcdTVmYzZcdTRlNDlcdTc2Y2FcdTZlYTJcdThiZTNcdThiYWVcdThjMGFcdThiZDFcdTVmMDJcdTdm''@;'; put 'put ''ZmNcdTdmY2NcdTdlY2VcdTgzMzVcdTgzNmJcdTU2ZTBcdTZiYjdcdTk3ZjNcdTk2MzRcdTU5ZmJcdTU0MWZcdTk0ZjZcdTZkZWJcdTViYzVcdTk5NmVcdTVjMzlcdTVmMTVcdTk2OTBcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMTBdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIxMF1bc10u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKHlbY1syMTBdW3NdXT01Mzc2MCtzLGhbNTM3NjArc109Y1syMTBdW3NdKTtmb3IoY1syMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzNzBcdTgyZjFcdTZhMzFcdTVhNzRcdTllNzBcdTVlOTRcdTdmMjhcdTgzYjlcdTg0MjRcdTg0MjVcdTgzNjdcdTg3NDdcdThmY2VcdThkNjJcdTc2YzhcdTVmNzFcdTk4OTZcdTc4NmNcdTY2MjBcdTU0''@;'; put 'put ''ZGZcdTYyZTVcdTRmNjNcdTgxYzNcdTc1YzhcdTVlYjhcdTk2Y2RcdThlMGFcdTg2ZjlcdTU0OGZcdTZjZjNcdTZkOGNcdTZjMzhcdTYwN2ZcdTUyYzdcdTc1MjhcdTVlN2RcdTRmMThcdTYwYTBcdTVmZTdcdTVjMjRcdTc1MzFcdTkwYWVcdTk0YzBcdTcyYjlcdTZjYjlcdTZlMzhcdTkxNDlc''@;'; put 'put ''dTY3MDlcdTUzY2JcdTUzZjNcdTRmNTFcdTkxYzlcdThiZjFcdTUzYzhcdTVlN2NcdThmYzJcdTZkZTRcdTRlOGVcdTc2YzJcdTY5ODZcdTg2NWVcdTYxMWFcdTgyMDZcdTRmNTlcdTRmZGVcdTkwM2VcdTljN2NcdTYxMDlcdTZlMWRcdTZlMTRcdTk2ODVcdTRlODhcdTVhMzFcdTk2ZThcdTRl''@;'; put 'put ''MGVcdTVjN2ZcdTc5YjlcdTViODdcdThiZWRcdTdmYmRcdTczODlcdTU3ZGZcdTgyOGJcdTkwYzFcdTU0MDFcdTkwNDdcdTU1YmJcdTVjZWFcdTVmYTFcdTYxMDhcdTZiMzJcdTcyZjFcdTgwYjJcdThhODlcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMTFdLmxlbmd0aDsrK3MpNjU1MzMh''@;'; put 'put ''PT1jWzIxMV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMTFdW3NdXT01NDAxNitzLGhbNTQwMTYrc109Y1syMTFdW3NdKTtmb3IoY1syMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkNzRcdTViZDNcdTg4ZDVcdTk4ODRcdThjNmJcdTlhNmRcdTllMzNcdTZlMGFcdTUxYTRcdTUxNDNcdTU3YTNcdTg4ODFcdTUzOWZcdTYzZjRcdThmOTVcdTU2ZWRcdTU0NThcdTU3''@;'; put 'put ''MDZcdTczM2ZcdTZlOTBcdTdmMThcdThmZGNcdTgyZDFcdTYxM2ZcdTYwMjhcdTk2NjJcdTY2ZjBcdTdlYTZcdThkOGFcdThkYzNcdTk0YTVcdTVjYjNcdTdjYTRcdTY3MDhcdTYwYTZcdTk2MDVcdTgwMThcdTRlOTFcdTkwZTdcdTUzMDBcdTk2NjhcdTUxNDFcdThmZDBcdTg1NzRcdTkxNWRc''@;'; put 'put ''dTY2NTVcdTk3ZjVcdTViNTVcdTUzMWRcdTc4MzhcdTY3NDJcdTY4M2RcdTU0YzlcdTcwN2VcdTViYjBcdThmN2RcdTUxOGRcdTU3MjhcdTU0YjFcdTY1MTJcdTY2ODJcdThkNWVcdThkNDNcdTgxMGZcdTg0NmNcdTkwNmRcdTdjZGZcdTUxZmZcdTg1ZmJcdTY3YTNcdTY1ZTlcdTZmYTFcdTg2''@;'; put 'put ''YTRcdThlODFcdTU2NmFcdTkwMjBcdTc2ODJcdTcwNzZcdTcxZTVcdThkMjNcdTYyZTlcdTUyMTlcdTZjZmRcdThkM2NcdTYwMGVcdTU4OWVcdTYxOGVcdTY2ZmVcdThkNjBcdTYyNGVcdTU1YjNcdTZlMjNcdTY3MmRcdThmNjdcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMTJdLmxlbmd0''@;'; put 'put ''aDsrK3MpNjU1MzMhPT1jWzIxMl1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMTJdW3NdXT01NDI3MitzLGhbNTQyNzIrc109Y1syMTJdW3NdKTtmb3IoY1syMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0ZTFcdTk1ZjhcdTc3MjhcdTY4MDVcdTY5YThcdTU0OGJcdTRlNGRcdTcwYjhcdThiYzhcdTY0NThcdTY1OGJcdTViODVcdTdhODRcdTUwM2FcdTViZThcdTc3''@;'; put 'put ''YmJcdTZiZTFcdThhNzlcdTdjOThcdTZjYmVcdTc2Y2ZcdTY1YTlcdThmOTdcdTVkMmRcdTVjNTVcdTg2MzhcdTY4MDhcdTUzNjBcdTYyMThcdTdhZDlcdTZlNWJcdTdlZmRcdTZhMWZcdTdhZTBcdTVmNzBcdTZmMzNcdTVmMjBcdTYzOGNcdTZkYThcdTY3NTZcdTRlMDhcdTVlMTBcdThkMjZc''@;'; put 'put ''dTRlZDdcdTgwYzBcdTc2MzRcdTk2OWNcdTYyZGJcdTY2MmRcdTYyN2VcdTZjYmNcdThkNzVcdTcxNjdcdTdmNjlcdTUxNDZcdTgwODdcdTUzZWNcdTkwNmVcdTYyOThcdTU0ZjJcdTg2ZjBcdThmOTlcdTgwMDVcdTk1MTdcdTg1MTdcdThmZDlcdTZkNTlcdTczY2RcdTY1OWZcdTc3MWZcdTc1''@;'; put 'put ''MDRcdTc4MjdcdTgxZmJcdThkMWVcdTk0ODhcdTRmYTZcdTY3OTVcdTc1YjlcdThiY2FcdTk3MDdcdTYzMmZcdTk1NDdcdTk2MzVcdTg0YjhcdTYzMjNcdTc3NDFcdTVmODFcdTcyZjBcdTRlODlcdTYwMTRcdTY1NzRcdTYyZWZcdTZiNjNcdTY1M2ZcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9''@;'; put 'put ''Y1syMTNdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIxM11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMTNdW3NdXT01NDUyOCtzLGhbNTQ1Mjgrc109Y1syMTNdW3NdKTtmb3IoY1syMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlMjdcdTc1YzdcdTkwZDFcdThiYzFcdTgyOWRcdTY3OWRcdTY1MmZcdTU0MzFcdTg3MThcdTc3ZTVcdTgwYTJcdTgxMDJcdTZjNDFcdTRl''@;'; put 'put ''NGJcdTdlYzdcdTgwNGNcdTc2ZjRcdTY5MGRcdTZiOTZcdTYyNjdcdTUwM2NcdTRmODRcdTU3NDBcdTYzMDdcdTZiNjJcdThkYmVcdTUzZWFcdTY1ZThcdTdlYjhcdTVmZDdcdTYzMWFcdTYzYjdcdTgxZjNcdTgxZjRcdTdmNmVcdTVlMWNcdTVjZDlcdTUyMzZcdTY2N2FcdTc5ZTlcdTdhMWFc''@;'; put 'put ''dThkMjhcdTcwOTlcdTc1ZDRcdTZlZGVcdTZjYmJcdTdhOTJcdTRlMmRcdTc2YzVcdTVmZTBcdTk0OWZcdTg4NzdcdTdlYzhcdTc5Y2RcdTgwYmZcdTkxY2RcdTRlZjJcdTRmMTdcdTgyMWZcdTU0NjhcdTVkZGVcdTZkMzJcdThiY2NcdTdjYTVcdThmNzRcdTgwOThcdTVlMWFcdTU0OTJcdTc2''@;'; put 'put ''YjFcdTViOTlcdTY2M2NcdTlhYTRcdTczZTBcdTY4MmFcdTg2ZGJcdTY3MzFcdTczMmFcdThiZjhcdThiZGJcdTkwMTBcdTdhZjlcdTcwZGJcdTcxNmVcdTYyYzRcdTc3YTlcdTU2MzFcdTRlM2JcdTg0NTdcdTY3ZjFcdTUyYTlcdTg2YzBcdThkMmVcdTk0ZjhcdTdiNTFcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxzPTA7cyE9Y1syMTRdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIxNF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMTRdW3NdXT01NDc4NCtzLGhbNTQ3ODQrc109Y1syMTRdW3NdKTtmb3IoY1syMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNGZcdTZjZThcdTc5NWRcdTlhN2JcdTYyOTNcdTcyMmFcdTYyZmRcdTRlMTNcdTc4MTZcdThmNmNcdTY0YjBcdThk''@;'; put 'put ''NWFcdTdiYzZcdTY4NjlcdTVlODRcdTg4YzVcdTU5ODZcdTY0OWVcdTU4ZWVcdTcyYjZcdTY5MGVcdTk1MjVcdThmZmRcdThkNThcdTU3NjBcdTdmMDBcdThjMDZcdTUxYzZcdTYzNDlcdTYyZDlcdTUzNTNcdTY4NGNcdTc0MjJcdTgzMDFcdTkxNGNcdTU1NDRcdTc3NDBcdTcwN2NcdTZkNGFc''@;'; put 'put ''dTUxNzlcdTU0YThcdThkNDRcdTU5ZmZcdTZlY2JcdTZkYzRcdTViNWNcdTdkMmJcdTRlZDRcdTdjN2RcdTZlZDNcdTViNTBcdTgxZWFcdTZlMGRcdTViNTdcdTliMDNcdTY4ZDVcdThlMmFcdTViOTdcdTdlZmNcdTYwM2JcdTdlYjVcdTkwYjlcdThkNzBcdTU5NGZcdTYzY2RcdTc5ZGZcdThk''@;'; put 'put ''YjNcdTUzNTJcdTY1Y2ZcdTc5NTZcdThiYzVcdTk2M2JcdTdlYzRcdTk0YmJcdTdlODJcdTU2MzRcdTkxODlcdTY3MDBcdTdmNmFcdTVjMGFcdTkwNzVcdTY2MjhcdTVkZTZcdTRmNTBcdTY3ZGVcdTUwNWFcdTRmNWNcdTU3NTBcdTVlYTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMTVdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIxNV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMTVdW3NdXT01NTA0MCtzLGhbNTUwNDArc109Y1syMTVdW3NdKTtmb3IoY1syMTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlOGRcdTRlMGNcdTUxNDBcdTRlMTBcdTVlZmZcdTUzNDVcdTRlMTVcdTRlOThcdTRlMWVcdTli''@;'; put 'put ''MzJcdTViNmNcdTU2NjlcdTRlMjhcdTc5YmFcdTRlM2ZcdTUzMTVcdTRlNDdcdTU5MmRcdTcyM2JcdTUzNmVcdTZjMTBcdTU2ZGZcdTgwZTRcdTk5OTdcdTZiZDNcdTc3N2VcdTlmMTdcdTRlMzZcdTRlOWZcdTlmMTBcdTRlNWNcdTRlNjlcdTRlOTNcdTgyODhcdTViNWJcdTU1NmNcdTU2MGZc''@;'; put 'put ''dTRlYzRcdTUzOGRcdTUzOWRcdTUzYTNcdTUzYTVcdTUzYWVcdTk3NjVcdThkNWRcdTUzMWFcdTUzZjVcdTUzMjZcdTUzMmVcdTUzM2VcdThkNWNcdTUzNjZcdTUzNjNcdTUyMDJcdTUyMDhcdTUyMGVcdTUyMmRcdTUyMzNcdTUyM2ZcdTUyNDBcdTUyNGNcdTUyNWVcdTUyNjFcdTUyNWNcdTg0''@;'; put 'put ''YWZcdTUyN2RcdTUyODJcdTUyODFcdTUyOTBcdTUyOTNcdTUxODJcdTdmNTRcdTRlYmJcdTRlYzNcdTRlYzlcdTRlYzJcdTRlZThcdTRlZTFcdTRlZWJcdTRlZGVcdTRmMWJcdTRlZjNcdTRmMjJcdTRmNjRcdTRlZjVcdTRmMjVcdTRmMjdcdTRmMDlcdTRmMmJcdTRmNWVcdTRmNjdcdTY1Mzhc''@;'; put 'put ''dTRmNWFcdTRmNWRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMTZdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIxNl1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMTZdW3NdXT01NTI5NitzLGhbNTUyOTYrc109Y1syMTZdW3NdKTtmb3IoY1syMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNWZcdTRmNTdcdTRmMzJcdTRmM2RcdTRmNzZcdTRmNzRcdTRmOTFcdTRm''@;'; put 'put ''ODlcdTRmODNcdTRmOGZcdTRmN2VcdTRmN2JcdTRmYWFcdTRmN2NcdTRmYWNcdTRmOTRcdTRmZTZcdTRmZThcdTRmZWFcdTRmYzVcdTRmZGFcdTRmZTNcdTRmZGNcdTRmZDFcdTRmZGZcdTRmZjhcdTUwMjlcdTUwNGNcdTRmZjNcdTUwMmNcdTUwMGZcdTUwMmVcdTUwMmRcdTRmZmVcdTUwMWNc''@;'; put 'put ''dTUwMGNcdTUwMjVcdTUwMjhcdTUwN2VcdTUwNDNcdTUwNTVcdTUwNDhcdTUwNGVcdTUwNmNcdTUwN2JcdTUwYTVcdTUwYTdcdTUwYTlcdTUwYmFcdTUwZDZcdTUxMDZcdTUwZWRcdTUwZWNcdTUwZTZcdTUwZWVcdTUxMDdcdTUxMGJcdTRlZGRcdTZjM2RcdTRmNThcdTRmNjVcdTRmY2VcdTlm''@;'; put 'put ''YTBcdTZjNDZcdTdjNzRcdTUxNmVcdTVkZmRcdTllYzlcdTk5OThcdTUxODFcdTU5MTRcdTUyZjlcdTUzMGRcdThhMDdcdTUzMTBcdTUxZWJcdTU5MTlcdTUxNTVcdTRlYTBcdTUxNTZcdTRlYjNcdTg4NmVcdTg4YTRcdTRlYjVcdTgxMTRcdTg4ZDJcdTc5ODBcdTViMzRcdTg4MDNcdTdmYjhc''@;'; put 'put ''dTUxYWJcdTUxYjFcdTUxYmRcdTUxYmNcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMTddLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIxN11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMTddW3NdXT01NTU1MitzLGhbNTU1NTIrc109Y1syMTddW3NdKTtmb3IoY1syMThdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxYzdcdTUxOTZcdTUxYTJcdTUxYTVcdThiYTBcdThi''@;'; put 'put ''YTZcdThiYTdcdThiYWFcdThiYjRcdThiYjVcdThiYjdcdThiYzJcdThiYzNcdThiY2JcdThiY2ZcdThiY2VcdThiZDJcdThiZDNcdThiZDRcdThiZDZcdThiZDhcdThiZDlcdThiZGNcdThiZGZcdThiZTBcdThiZTRcdThiZThcdThiZTlcdThiZWVcdThiZjBcdThiZjNcdThiZjZcdThiZjlc''@;'; put 'put ''dThiZmNcdThiZmZcdThjMDBcdThjMDJcdThjMDRcdThjMDdcdThjMGNcdThjMGZcdThjMTFcdThjMTJcdThjMTRcdThjMTVcdThjMTZcdThjMTlcdThjMWJcdThjMThcdThjMWRcdThjMWZcdThjMjBcdThjMjFcdThjMjVcdThjMjdcdThjMmFcdThjMmJcdThjMmVcdThjMmZcdThjMzJcdThj''@;'; put 'put ''MzNcdThjMzVcdThjMzZcdTUzNjlcdTUzN2FcdTk2MWRcdTk2MjJcdTk2MjFcdTk2MzFcdTk2MmFcdTk2M2RcdTk2M2NcdTk2NDJcdTk2NDlcdTk2NTRcdTk2NWZcdTk2NjdcdTk2NmNcdTk2NzJcdTk2NzRcdTk2ODhcdTk2OGRcdTk2OTdcdTk2YjBcdTkwOTdcdTkwOWJcdTkwOWRcdTkwOTlc''@;'; put 'put ''dTkwYWNcdTkwYTFcdTkwYjRcdTkwYjNcdTkwYjZcdTkwYmFcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMThdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIxOF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMThdW3NdXT01NTgwOCtzLGhbNTU4MDgrc109Y1syMThdW3NdKTtmb3IoY1syMTld''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYjhcdTkwYjBcdTkwY2ZcdTkw''@;'; put 'put ''YzVcdTkwYmVcdTkwZDBcdTkwYzRcdTkwYzdcdTkwZDNcdTkwZTZcdTkwZTJcdTkwZGNcdTkwZDdcdTkwZGJcdTkwZWJcdTkwZWZcdTkwZmVcdTkxMDRcdTkxMjJcdTkxMWVcdTkxMjNcdTkxMzFcdTkxMmZcdTkxMzlcdTkxNDNcdTkxNDZcdTUyMGRcdTU5NDJcdTUyYTJcdTUyYWNcdTUyYWRc''@;'; put 'put ''dTUyYmVcdTU0ZmZcdTUyZDBcdTUyZDZcdTUyZjBcdTUzZGZcdTcxZWVcdTc3Y2RcdTVlZjRcdTUxZjVcdTUxZmNcdTliMmZcdTUzYjZcdTVmMDFcdTc1NWFcdTVkZWZcdTU3NGNcdTU3YTlcdTU3YTFcdTU4N2VcdTU4YmNcdTU4YzVcdTU4ZDFcdTU3MjlcdTU3MmNcdTU3MmFcdTU3MzNcdTU3''@;'; put 'put ''MzlcdTU3MmVcdTU3MmZcdTU3NWNcdTU3M2JcdTU3NDJcdTU3NjlcdTU3ODVcdTU3NmJcdTU3ODZcdTU3N2NcdTU3N2JcdTU3NjhcdTU3NmRcdTU3NzZcdTU3NzNcdTU3YWRcdTU3YTRcdTU3OGNcdTU3YjJcdTU3Y2ZcdTU3YTdcdTU3YjRcdTU3OTNcdTU3YTBcdTU3ZDVcdTU3ZDhcdTU3ZGFc''@;'; put 'put ''dTU3ZDlcdTU3ZDJcdTU3YjhcdTU3ZjRcdTU3ZWZcdTU3ZjhcdTU3ZTRcdTU3ZGRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMTldLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIxOV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMTldW3NdXT01NjA2NCtzLGhbNTYwNjQrc109Y1syMTldW3Nd''@;'; put 'put ''KTtmb3IoY1syMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU4MGJcdTU4''@;'; put 'put ''MGRcdTU3ZmRcdTU3ZWRcdTU4MDBcdTU4MWVcdTU4MTlcdTU4NDRcdTU4MjBcdTU4NjVcdTU4NmNcdTU4ODFcdTU4ODlcdTU4OWFcdTU4ODBcdTk5YThcdTlmMTlcdTYxZmZcdTgyNzlcdTgyN2RcdTgyN2ZcdTgyOGZcdTgyOGFcdTgyYThcdTgyODRcdTgyOGVcdTgyOTFcdTgyOTdcdTgyOTlc''@;'; put 'put ''dTgyYWJcdTgyYjhcdTgyYmVcdTgyYjBcdTgyYzhcdTgyY2FcdTgyZTNcdTgyOThcdTgyYjdcdTgyYWVcdTgyY2JcdTgyY2NcdTgyYzFcdTgyYTlcdTgyYjRcdTgyYTFcdTgyYWFcdTgyOWZcdTgyYzRcdTgyY2VcdTgyYTRcdTgyZTFcdTgzMDlcdTgyZjdcdTgyZTRcdTgzMGZcdTgzMDdcdTgy''@;'; put 'put ''ZGNcdTgyZjRcdTgyZDJcdTgyZDhcdTgzMGNcdTgyZmJcdTgyZDNcdTgzMTFcdTgzMWFcdTgzMDZcdTgzMTRcdTgzMTVcdTgyZTBcdTgyZDVcdTgzMWNcdTgzNTFcdTgzNWJcdTgzNWNcdTgzMDhcdTgzOTJcdTgzM2NcdTgzMzRcdTgzMzFcdTgzOWJcdTgzNWVcdTgzMmZcdTgzNGZcdTgzNDdc''@;'; put 'put ''dTgzNDNcdTgzNWZcdTgzNDBcdTgzMTdcdTgzNjBcdTgzMmRcdTgzM2FcdTgzMzNcdTgzNjZcdTgzNjVcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMjBdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIyMF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMjBdW3NdXT01NjMyMCtzLGhbNTYzMjAr''@;'; put 'put ''c109Y1syMjBdW3NdKTtmb3IoY1syMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTgzNjhcdTgzMWJcdTgzNjlcdTgzNmNcdTgzNmFcdTgzNmRcdTgzNmVcdTgzYjBcdTgzNzhcdTgzYjNcdTgzYjRcdTgzYTBcdTgzYWFcdTgzOTNcdTgzOWNcdTgzODVcdTgzN2NcdTgzYjZcdTgzYTlcdTgzN2RcdTgzYjhcdTgzN2JcdTgzOThcdTgzOWVcdTgzYThcdTgzYmFcdTgzYmNc''@;'; put 'put ''dTgzYzFcdTg0MDFcdTgzZTVcdTgzZDhcdTU4MDdcdTg0MThcdTg0MGJcdTgzZGRcdTgzZmRcdTgzZDZcdTg0MWNcdTg0MzhcdTg0MTFcdTg0MDZcdTgzZDRcdTgzZGZcdTg0MGZcdTg0MDNcdTgzZjhcdTgzZjlcdTgzZWFcdTgzYzVcdTgzYzBcdTg0MjZcdTgzZjBcdTgzZTFcdTg0NWNcdTg0''@;'; put 'put ''NTFcdTg0NWFcdTg0NTlcdTg0NzNcdTg0ODdcdTg0ODhcdTg0N2FcdTg0ODlcdTg0NzhcdTg0M2NcdTg0NDZcdTg0NjlcdTg0NzZcdTg0OGNcdTg0OGVcdTg0MzFcdTg0NmRcdTg0YzFcdTg0Y2RcdTg0ZDBcdTg0ZTZcdTg0YmRcdTg0ZDNcdTg0Y2FcdTg0YmZcdTg0YmFcdTg0ZTBcdTg0YTFc''@;'; put 'put ''dTg0YjlcdTg0YjRcdTg0OTdcdTg0ZTVcdTg0ZTNcdTg1MGNcdTc1MGRcdTg1MzhcdTg0ZjBcdTg1MzlcdTg1MWZcdTg1M2FcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMjFdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIyMV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMjFdW3NdXT01NjU3''@;'; put 'put ''NitzLGhbNTY1NzYrc109Y1syMjFdW3NdKTtmb3IoY1syMjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTg1NTZcdTg1M2JcdTg0ZmZcdTg0ZmNcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjRcdTg1NWVcdTg1N2FcdTc3YTJcdTg1NDNcdTg1NzJcdTg1N2JcdTg1YTRcdTg1YThcdTg1ODdcdTg1OGZcdTg1NzlcdTg1YWVcdTg1OWNcdTg1ODVcdTg1YjlcdTg1YjdcdTg1YjBc''@;'; put 'put ''dTg1ZDNcdTg1YzFcdTg1ZGNcdTg1ZmZcdTg2MjdcdTg2MDVcdTg2MjlcdTg2MTZcdTg2M2NcdTVlZmVcdTVmMDhcdTU5M2NcdTU5NDFcdTgwMzdcdTU5NTVcdTU5NWFcdTU5NThcdTUzMGZcdTVjMjJcdTVjMjVcdTVjMmNcdTVjMzRcdTYyNGNcdTYyNmFcdTYyOWZcdTYyYmJcdTYyY2FcdTYy''@;'; put 'put ''ZGFcdTYyZDdcdTYyZWVcdTYzMjJcdTYyZjZcdTYzMzlcdTYzNGJcdTYzNDNcdTYzYWRcdTYzZjZcdTYzNzFcdTYzN2FcdTYzOGVcdTYzYjRcdTYzNmRcdTYzYWNcdTYzOGFcdTYzNjlcdTYzYWVcdTYzYmNcdTYzZjJcdTYzZjhcdTYzZTBcdTYzZmZcdTYzYzRcdTYzZGVcdTYzY2VcdTY0NTJc''@;'; put 'put ''dTYzYzZcdTYzYmVcdTY0NDVcdTY0NDFcdTY0MGJcdTY0MWJcdTY0MjBcdTY0MGNcdTY0MjZcdTY0MjFcdTY0NWVcdTY0ODRcdTY0NmRcdTY0OTZcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMjJdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIyMl1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1sy''@;'; put 'put ''MjJdW3NdXT01NjgzMitzLGhbNTY4MzIrc109Y1syMjJdW3NdKTtmb3IoY1syMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0N2FcdTY0YjdcdTY0YjhcdTY0OTlcdTY0YmFcdTY0YzBcdTY0ZDBcdTY0ZDdcdTY0ZTRcdTY0ZTJcdTY1MDlcdTY1MjVcdTY1MmVcdTVmMGJcdTVmZDJcdTc1MTlcdTVmMTFcdTUzNWZcdTUzZjFcdTUzZmRcdTUzZTlcdTUzZThcdTUzZmJc''@;'; put 'put ''dTU0MTJcdTU0MTZcdTU0MDZcdTU0NGJcdTU0NTJcdTU0NTNcdTU0NTRcdTU0NTZcdTU0NDNcdTU0MjFcdTU0NTdcdTU0NTlcdTU0MjNcdTU0MzJcdTU0ODJcdTU0OTRcdTU0NzdcdTU0NzFcdTU0NjRcdTU0OWFcdTU0OWJcdTU0ODRcdTU0NzZcdTU0NjZcdTU0OWRcdTU0ZDBcdTU0YWRcdTU0''@;'; put 'put ''YzJcdTU0YjRcdTU0ZDJcdTU0YTdcdTU0YTZcdTU0ZDNcdTU0ZDRcdTU0NzJcdTU0YTNcdTU0ZDVcdTU0YmJcdTU0YmZcdTU0Y2NcdTU0ZDlcdTU0ZGFcdTU0ZGNcdTU0YTlcdTU0YWFcdTU0YTRcdTU0ZGRcdTU0Y2ZcdTU0ZGVcdTU1MWJcdTU0ZTdcdTU1MjBcdTU0ZmRcdTU1MTRcdTU0ZjNc''@;'; put 'put ''dTU1MjJcdTU1MjNcdTU1MGZcdTU1MTFcdTU1MjdcdTU1MmFcdTU1NjdcdTU1OGZcdTU1YjVcdTU1NDlcdTU1NmRcdTU1NDFcdTU1NTVcdTU1M2ZcdTU1NTBcdTU1M2NcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMjNdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIyM11bc10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKHlbY1syMjNdW3NdXT01NzA4OCtzLGhbNTcwODgrc109Y1syMjNdW3NdKTtmb3IoY1syMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1MzdcdTU1NTZcdTU1NzVcdTU1NzZcdTU1NzdcdTU1MzNcdTU1MzBcdTU1NWNcdTU1OGJcdTU1ZDJcdTU1ODNcdTU1YjFcdTU1YjlcdTU1ODhcdTU1ODFcdTU1OWZcdTU1N2VcdTU1ZDZcdTU1OTFcdTU1N2JcdTU1ZGZc''@;'; put 'put ''dTU1YmRcdTU1YmVcdTU1OTRcdTU1OTlcdTU1ZWFcdTU1ZjdcdTU1YzlcdTU2MWZcdTU1ZDFcdTU1ZWJcdTU1ZWNcdTU1ZDRcdTU1ZTZcdTU1ZGRcdTU1YzRcdTU1ZWZcdTU1ZTVcdTU1ZjJcdTU1ZjNcdTU1Y2NcdTU1Y2RcdTU1ZThcdTU1ZjVcdTU1ZTRcdThmOTRcdTU2MWVcdTU2MDhcdTU2''@;'; put 'put ''MGNcdTU2MDFcdTU2MjRcdTU2MjNcdTU1ZmVcdTU2MDBcdTU2MjdcdTU2MmRcdTU2NThcdTU2MzlcdTU2NTdcdTU2MmNcdTU2NGRcdTU2NjJcdTU2NTlcdTU2NWNcdTU2NGNcdTU2NTRcdTU2ODZcdTU2NjRcdTU2NzFcdTU2NmJcdTU2N2JcdTU2N2NcdTU2ODVcdTU2OTNcdTU2YWZcdTU2ZDRc''@;'; put 'put ''dTU2ZDdcdTU2ZGRcdTU2ZTFcdTU2ZjVcdTU2ZWJcdTU2ZjlcdTU2ZmZcdTU3MDRcdTU3MGFcdTU3MDlcdTU3MWNcdTVlMGZcdTVlMTlcdTVlMTRcdTVlMTFcdTVlMzFcdTVlM2JcdTVlM2NcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMjRdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIyNF1b''@;'; put 'put ''c10uY2hhckNvZGVBdCgwKSYmKHlbY1syMjRdW3NdXT01NzM0NCtzLGhbNTczNDQrc109Y1syMjRdW3NdKTtmb3IoY1syMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlMzdcdTVlNDRcdTVlNTRcdTVlNWJcdTVlNWVcdTVlNjFcdTVjOGNcdTVjN2FcdTVjOGRcdTVjOTBcdTVjOTZcdTVjODhcdTVjOThcdTVjOTlcdTVjOTFcdTVjOWFcdTVjOWNcdTVjYjVcdTVjYTJc''@;'; put 'put ''dTVjYmRcdTVjYWNcdTVjYWJcdTVjYjFcdTVjYTNcdTVjYzFcdTVjYjdcdTVjYzRcdTVjZDJcdTVjZTRcdTVjY2JcdTVjZTVcdTVkMDJcdTVkMDNcdTVkMjdcdTVkMjZcdTVkMmVcdTVkMjRcdTVkMWVcdTVkMDZcdTVkMWJcdTVkNThcdTVkM2VcdTVkMzRcdTVkM2RcdTVkNmNcdTVkNWJcdTVk''@;'; put 'put ''NmZcdTVkNWRcdTVkNmJcdTVkNGJcdTVkNGFcdTVkNjlcdTVkNzRcdTVkODJcdTVkOTlcdTVkOWRcdThjNzNcdTVkYjdcdTVkYzVcdTVmNzNcdTVmNzdcdTVmODJcdTVmODdcdTVmODlcdTVmOGNcdTVmOTVcdTVmOTlcdTVmOWNcdTVmYThcdTVmYWRcdTVmYjVcdTVmYmNcdTg4NjJcdTVmNjFc''@;'; put 'put ''dTcyYWRcdTcyYjBcdTcyYjRcdTcyYjdcdTcyYjhcdTcyYzNcdTcyYzFcdTcyY2VcdTcyY2RcdTcyZDJcdTcyZThcdTcyZWZcdTcyZTlcdTcyZjJcdTcyZjRcdTcyZjdcdTczMDFcdTcyZjNcdTczMDNcdTcyZmFcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMjVdLmxlbmd0aDsrK3MpNjU1''@;'; put 'put ''MzMhPT1jWzIyNV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMjVdW3NdXT01NzYwMCtzLGhbNTc2MDArc109Y1syMjVdW3NdKTtmb3IoY1syMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyZmJcdTczMTdcdTczMTNcdTczMjFcdTczMGFcdTczMWVcdTczMWRcdTczMTVcdTczMjJcdTczMzlcdTczMjVcdTczMmNcdTczMzhcdTczMzFcdTczNTBcdTczNGRcdTczNTdc''@;'; put 'put ''dTczNjBcdTczNmNcdTczNmZcdTczN2VcdTgyMWJcdTU5MjVcdTk4ZTdcdTU5MjRcdTU5MDJcdTk5NjNcdTk5NjdcdTk5NjhcdTk5NjlcdTk5NmFcdTk5NmJcdTk5NmNcdTk5NzRcdTk5NzdcdTk5N2RcdTk5ODBcdTk5ODRcdTk5ODdcdTk5OGFcdTk5OGRcdTk5OTBcdTk5OTFcdTk5OTNcdTk5''@;'; put 'put ''OTRcdTk5OTVcdTVlODBcdTVlOTFcdTVlOGJcdTVlOTZcdTVlYTVcdTVlYTBcdTVlYjlcdTVlYjVcdTVlYmVcdTVlYjNcdThkNTNcdTVlZDJcdTVlZDFcdTVlZGJcdTVlZThcdTVlZWFcdTgxYmFcdTVmYzRcdTVmYzlcdTVmZDZcdTVmY2ZcdTYwMDNcdTVmZWVcdTYwMDRcdTVmZTFcdTVmZTRc''@;'; put 'put ''dTVmZmVcdTYwMDVcdTYwMDZcdTVmZWFcdTVmZWRcdTVmZjhcdTYwMTlcdTYwMzVcdTYwMjZcdTYwMWJcdTYwMGZcdTYwMGRcdTYwMjlcdTYwMmJcdTYwMGFcdTYwM2ZcdTYwMjFcdTYwNzhcdTYwNzlcdTYwN2JcdTYwN2FcdTYwNDJcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMjZdLmxl''@;'; put 'put ''bmd0aDsrK3MpNjU1MzMhPT1jWzIyNl1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMjZdW3NdXT01Nzg1NitzLGhbNTc4NTYrc109Y1syMjZdW3NdKTtmb3IoY1syMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNmFcdTYwN2RcdTYwOTZcdTYwOWFcdTYwYWRcdTYwOWRcdTYwODNcdTYwOTJcdTYwOGNcdTYwOWJcdTYwZWNcdTYwYmJcdTYwYjFcdTYwZGRcdTYwZDhc''@;'; put 'put ''dTYwYzZcdTYwZGFcdTYwYjRcdTYxMjBcdTYxMjZcdTYxMTVcdTYxMjNcdTYwZjRcdTYxMDBcdTYxMGVcdTYxMmJcdTYxNGFcdTYxNzVcdTYxYWNcdTYxOTRcdTYxYTdcdTYxYjdcdTYxZDRcdTYxZjVcdTVmZGRcdTk2YjNcdTk1ZTlcdTk1ZWJcdTk1ZjFcdTk1ZjNcdTk1ZjVcdTk1ZjZcdTk1''@;'; put 'put ''ZmNcdTk1ZmVcdTk2MDNcdTk2MDRcdTk2MDZcdTk2MDhcdTk2MGFcdTk2MGJcdTk2MGNcdTk2MGRcdTk2MGZcdTk2MTJcdTk2MTVcdTk2MTZcdTk2MTdcdTk2MTlcdTk2MWFcdTRlMmNcdTcyM2ZcdTYyMTVcdTZjMzVcdTZjNTRcdTZjNWNcdTZjNGFcdTZjYTNcdTZjODVcdTZjOTBcdTZjOTRc''@;'; put 'put ''dTZjOGNcdTZjNjhcdTZjNjlcdTZjNzRcdTZjNzZcdTZjODZcdTZjYTlcdTZjZDBcdTZjZDRcdTZjYWRcdTZjZjdcdTZjZjhcdTZjZjFcdTZjZDdcdTZjYjJcdTZjZTBcdTZjZDZcdTZjZmFcdTZjZWJcdTZjZWVcdTZjYjFcdTZjZDNcdTZjZWZcdTZjZmVcdWZmZmQiLnNwbGl0KCIiKSxzPTA7''@;'; put 'put ''cyE9Y1syMjddLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIyN11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMjddW3NdXT01ODExMitzLGhbNTgxMTIrc109Y1syMjddW3NdKTtmb3IoY1syMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkMzlcdTZkMjdcdTZkMGNcdTZkNDNcdTZkNDhcdTZkMDdcdTZkMDRcdTZkMTlcdTZkMGVcdTZkMmJcdTZkNGRcdTZkMmVcdTZkMzVc''@;'; put 'put ''dTZkMWFcdTZkNGZcdTZkNTJcdTZkNTRcdTZkMzNcdTZkOTFcdTZkNmZcdTZkOWVcdTZkYTBcdTZkNWVcdTZkOTNcdTZkOTRcdTZkNWNcdTZkNjBcdTZkN2NcdTZkNjNcdTZlMWFcdTZkYzdcdTZkYzVcdTZkZGVcdTZlMGVcdTZkYmZcdTZkZTBcdTZlMTFcdTZkZTZcdTZkZGRcdTZkZDlcdTZl''@;'; put 'put ''MTZcdTZkYWJcdTZlMGNcdTZkYWVcdTZlMmJcdTZlNmVcdTZlNGVcdTZlNmJcdTZlYjJcdTZlNWZcdTZlODZcdTZlNTNcdTZlNTRcdTZlMzJcdTZlMjVcdTZlNDRcdTZlZGZcdTZlYjFcdTZlOThcdTZlZTBcdTZmMmRcdTZlZTJcdTZlYTVcdTZlYTdcdTZlYmRcdTZlYmJcdTZlYjdcdTZlZDdc''@;'; put 'put ''dTZlYjRcdTZlY2ZcdTZlOGZcdTZlYzJcdTZlOWZcdTZmNjJcdTZmNDZcdTZmNDdcdTZmMjRcdTZmMTVcdTZlZjlcdTZmMmZcdTZmMzZcdTZmNGJcdTZmNzRcdTZmMmFcdTZmMDlcdTZmMjlcdTZmODlcdTZmOGRcdTZmOGNcdTZmNzhcdTZmNzJcdTZmN2NcdTZmN2FcdTZmZDFcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxzPTA7cyE9Y1syMjhdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIyOF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMjhdW3NdXT01ODM2OCtzLGhbNTgzNjgrc109Y1syMjhdW3NdKTtmb3IoY1syMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYzlcdTZmYTdcdTZmYjlcdTZmYjZcdTZmYzJcdTZmZTFcdTZmZWVcdTZmZGVcdTZmZTBcdTZmZWZcdTcwMWFc''@;'; put 'put ''dTcwMjNcdTcwMWJcdTcwMzlcdTcwMzVcdTcwNGZcdTcwNWVcdTViODBcdTViODRcdTViOTVcdTViOTNcdTViYTVcdTViYjhcdTc1MmZcdTlhOWVcdTY0MzRcdTViZTRcdTViZWVcdTg5MzBcdTViZjBcdThlNDdcdThiMDdcdThmYjZcdThmZDNcdThmZDVcdThmZTVcdThmZWVcdThmZTRcdThm''@;'; put 'put ''ZTlcdThmZTZcdThmZjNcdThmZThcdTkwMDVcdTkwMDRcdTkwMGJcdTkwMjZcdTkwMTFcdTkwMGRcdTkwMTZcdTkwMjFcdTkwMzVcdTkwMzZcdTkwMmRcdTkwMmZcdTkwNDRcdTkwNTFcdTkwNTJcdTkwNTBcdTkwNjhcdTkwNThcdTkwNjJcdTkwNWJcdTY2YjlcdTkwNzRcdTkwN2RcdTkwODJc''@;'; put 'put ''dTkwODhcdTkwODNcdTkwOGJcdTVmNTBcdTVmNTdcdTVmNTZcdTVmNThcdTVjM2JcdTU0YWJcdTVjNTBcdTVjNTlcdTViNzFcdTVjNjNcdTVjNjZcdTdmYmNcdTVmMmFcdTVmMjlcdTVmMmRcdTgyNzRcdTVmM2NcdTliM2JcdTVjNmVcdTU5ODFcdTU5ODNcdTU5OGRcdTU5YTlcdTU5YWFcdTU5''@;'; put 'put ''YTNcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMjldLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIyOV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMjldW3NdXT01ODYyNCtzLGhbNTg2MjQrc109Y1syMjldW3NdKTtmb3IoY1syMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5OTdcdTU5Y2FcdTU5YWJcdTU5OWVcdTU5YTRcdTU5ZDJcdTU5YjJcdTU5YWZcdTU5ZDdc''@;'; put 'put ''dTU5YmVcdTVhMDVcdTVhMDZcdTU5ZGRcdTVhMDhcdTU5ZTNcdTU5ZDhcdTU5ZjlcdTVhMGNcdTVhMDlcdTVhMzJcdTVhMzRcdTVhMTFcdTVhMjNcdTVhMTNcdTVhNDBcdTVhNjdcdTVhNGFcdTVhNTVcdTVhM2NcdTVhNjJcdTVhNzVcdTgwZWNcdTVhYWFcdTVhOWJcdTVhNzdcdTVhN2FcdTVh''@;'; put 'put ''YmVcdTVhZWJcdTVhYjJcdTVhZDJcdTVhZDRcdTVhYjhcdTVhZTBcdTVhZTNcdTVhZjFcdTVhZDZcdTVhZTZcdTVhZDhcdTVhZGNcdTViMDlcdTViMTdcdTViMTZcdTViMzJcdTViMzdcdTViNDBcdTVjMTVcdTVjMWNcdTViNWFcdTViNjVcdTViNzNcdTViNTFcdTViNTNcdTViNjJcdTlhNzVc''@;'; put 'put ''dTlhNzdcdTlhNzhcdTlhN2FcdTlhN2ZcdTlhN2RcdTlhODBcdTlhODFcdTlhODVcdTlhODhcdTlhOGFcdTlhOTBcdTlhOTJcdTlhOTNcdTlhOTZcdTlhOThcdTlhOWJcdTlhOWNcdTlhOWRcdTlhOWZcdTlhYTBcdTlhYTJcdTlhYTNcdTlhYTVcdTlhYTdcdTdlOWZcdTdlYTFcdTdlYTNcdTdl''@;'; put 'put ''YTVcdTdlYThcdTdlYTlcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMzBdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIzMF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMzBdW3NdXT01ODg4MCtzLGhbNTg4ODArc109Y1syMzBdW3NdKTtmb3IoY1syMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlYWRcdTdlYjBcdTdlYmVcdTdlYzBcdTdlYzFcdTdlYzJcdTdlYzlc''@;'; put 'put ''dTdlY2JcdTdlY2NcdTdlZDBcdTdlZDRcdTdlZDdcdTdlZGJcdTdlZTBcdTdlZTFcdTdlZThcdTdlZWJcdTdlZWVcdTdlZWZcdTdlZjFcdTdlZjJcdTdmMGRcdTdlZjZcdTdlZmFcdTdlZmJcdTdlZmVcdTdmMDFcdTdmMDJcdTdmMDNcdTdmMDdcdTdmMDhcdTdmMGJcdTdmMGNcdTdmMGZcdTdm''@;'; put 'put ''MTFcdTdmMTJcdTdmMTdcdTdmMTlcdTdmMWNcdTdmMWJcdTdmMWZcdTdmMjFcdTdmMjJcdTdmMjNcdTdmMjRcdTdmMjVcdTdmMjZcdTdmMjdcdTdmMmFcdTdmMmJcdTdmMmNcdTdmMmRcdTdmMmZcdTdmMzBcdTdmMzFcdTdmMzJcdTdmMzNcdTdmMzVcdTVlN2FcdTc1N2ZcdTVkZGJcdTc1M2Vc''@;'; put 'put ''dTkwOTVcdTczOGVcdTczOTFcdTczYWVcdTczYTJcdTczOWZcdTczY2ZcdTczYzJcdTczZDFcdTczYjdcdTczYjNcdTczYzBcdTczYzlcdTczYzhcdTczZTVcdTczZDlcdTk4N2NcdTc0MGFcdTczZTlcdTczZTdcdTczZGVcdTczYmFcdTczZjJcdTc0MGZcdTc0MmFcdTc0NWJcdTc0MjZcdTc0''@;'; put 'put ''MjVcdTc0MjhcdTc0MzBcdTc0MmVcdTc0MmNcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMzFdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIzMV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMzFdW3NdXT01OTEzNitzLGhbNTkxMzYrc109Y1syMzFdW3NdKTtmb3IoY1syMzJdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0MWJcdTc0MWFcdTc0NDFcdTc0NWNcdTc0NTdc''@;'; put 'put ''dTc0NTVcdTc0NTlcdTc0NzdcdTc0NmRcdTc0N2VcdTc0OWNcdTc0OGVcdTc0ODBcdTc0ODFcdTc0ODdcdTc0OGJcdTc0OWVcdTc0YThcdTc0YTlcdTc0OTBcdTc0YTdcdTc0ZDJcdTc0YmFcdTk3ZWFcdTk3ZWJcdTk3ZWNcdTY3NGNcdTY3NTNcdTY3NWVcdTY3NDhcdTY3NjlcdTY3YTVcdTY3''@;'; put 'put ''ODdcdTY3NmFcdTY3NzNcdTY3OThcdTY3YTdcdTY3NzVcdTY3YThcdTY3OWVcdTY3YWRcdTY3OGJcdTY3NzdcdTY3N2NcdTY3ZjBcdTY4MDlcdTY3ZDhcdTY4MGFcdTY3ZTlcdTY3YjBcdTY4MGNcdTY3ZDlcdTY3YjVcdTY3ZGFcdTY3YjNcdTY3ZGRcdTY4MDBcdTY3YzNcdTY3YjhcdTY3ZTJc''@;'; put 'put ''dTY4MGVcdTY3YzFcdTY3ZmRcdTY4MzJcdTY4MzNcdTY4NjBcdTY4NjFcdTY4NGVcdTY4NjJcdTY4NDRcdTY4NjRcdTY4ODNcdTY4MWRcdTY4NTVcdTY4NjZcdTY4NDFcdTY4NjdcdTY4NDBcdTY4M2VcdTY4NGFcdTY4NDlcdTY4MjlcdTY4YjVcdTY4OGZcdTY4NzRcdTY4NzdcdTY4OTNcdTY4''@;'; put 'put ''NmJcdTY4YzJcdTY5NmVcdTY4ZmNcdTY5MWZcdTY5MjBcdTY4ZjlcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMzJdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIzMl1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMzJdW3NdXT01OTM5MitzLGhbNTkzOTIrc109Y1syMzJdW3NdKTtmb3IoY1sy''@;'; put 'put ''MzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5MjRcdTY4ZjBcdTY5MGJc''@;'; put 'put ''dTY5MDFcdTY5NTdcdTY4ZTNcdTY5MTBcdTY5NzFcdTY5MzlcdTY5NjBcdTY5NDJcdTY5NWRcdTY5ODRcdTY5NmJcdTY5ODBcdTY5OThcdTY5NzhcdTY5MzRcdTY5Y2NcdTY5ODdcdTY5ODhcdTY5Y2VcdTY5ODlcdTY5NjZcdTY5NjNcdTY5NzlcdTY5OWJcdTY5YTdcdTY5YmJcdTY5YWJcdTY5''@;'; put 'put ''YWRcdTY5ZDRcdTY5YjFcdTY5YzFcdTY5Y2FcdTY5ZGZcdTY5OTVcdTY5ZTBcdTY5OGRcdTY5ZmZcdTZhMmZcdTY5ZWRcdTZhMTdcdTZhMThcdTZhNjVcdTY5ZjJcdTZhNDRcdTZhM2VcdTZhYTBcdTZhNTBcdTZhNWJcdTZhMzVcdTZhOGVcdTZhNzlcdTZhM2RcdTZhMjhcdTZhNThcdTZhN2Nc''@;'; put 'put ''dTZhOTFcdTZhOTBcdTZhYTlcdTZhOTdcdTZhYWJcdTczMzdcdTczNTJcdTZiODFcdTZiODJcdTZiODdcdTZiODRcdTZiOTJcdTZiOTNcdTZiOGRcdTZiOWFcdTZiOWJcdTZiYTFcdTZiYWFcdThmNmJcdThmNmRcdThmNzFcdThmNzJcdThmNzNcdThmNzVcdThmNzZcdThmNzhcdThmNzdcdThm''@;'; put 'put ''NzlcdThmN2FcdThmN2NcdThmN2VcdThmODFcdThmODJcdThmODRcdThmODdcdThmOGJcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMzNdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIzM11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMzNdW3NdXT01OTY0OCtzLGhbNTk2NDgrc109Y1syMzNd''@;'; put 'put ''W3NdKTtmb3IoY1syMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmOGRc''@;'; put 'put ''dThmOGVcdThmOGZcdThmOThcdThmOWFcdThlY2VcdTYyMGJcdTYyMTdcdTYyMWJcdTYyMWZcdTYyMjJcdTYyMjFcdTYyMjVcdTYyMjRcdTYyMmNcdTgxZTdcdTc0ZWZcdTc0ZjRcdTc0ZmZcdTc1MGZcdTc1MTFcdTc1MTNcdTY1MzRcdTY1ZWVcdTY1ZWZcdTY1ZjBcdTY2MGFcdTY2MTlcdTY3''@;'; put 'put ''NzJcdTY2MDNcdTY2MTVcdTY2MDBcdTcwODVcdTY2ZjdcdTY2MWRcdTY2MzRcdTY2MzFcdTY2MzZcdTY2MzVcdTgwMDZcdTY2NWZcdTY2NTRcdTY2NDFcdTY2NGZcdTY2NTZcdTY2NjFcdTY2NTdcdTY2NzdcdTY2ODRcdTY2OGNcdTY2YTdcdTY2OWRcdTY2YmVcdTY2ZGJcdTY2ZGNcdTY2ZTZc''@;'; put 'put ''dTY2ZTlcdThkMzJcdThkMzNcdThkMzZcdThkM2JcdThkM2RcdThkNDBcdThkNDVcdThkNDZcdThkNDhcdThkNDlcdThkNDdcdThkNGRcdThkNTVcdThkNTlcdTg5YzdcdTg5Y2FcdTg5Y2JcdTg5Y2NcdTg5Y2VcdTg5Y2ZcdTg5ZDBcdTg5ZDFcdTcyNmVcdTcyOWZcdTcyNWRcdTcyNjZcdTcy''@;'; put 'put ''NmZcdTcyN2VcdTcyN2ZcdTcyODRcdTcyOGJcdTcyOGRcdTcyOGZcdTcyOTJcdTYzMDhcdTYzMzJcdTYzYjBcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMzRdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIzNF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMzRdW3NdXT01OTkwNCtzLGhbNTk5''@;'; put 'put ''MDQrc109Y1syMzRdW3NdKTtmb3IoY1syMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTY0M2ZcdTY0ZDhcdTgwMDRcdTZiZWFcdTZiZjNcdTZiZmRcdTZiZjVcdTZiZjlcdTZjMDVcdTZjMDdcdTZjMDZcdTZjMGRcdTZjMTVcdTZjMThcdTZjMTlcdTZjMWFcdTZjMjFcdTZjMjlcdTZjMjRcdTZjMmFcdTZjMzJcdTY1MzVcdTY1NTVcdTY1NmJcdTcyNGRcdTcyNTJcdTcy''@;'; put 'put ''NTZcdTcyMzBcdTg2NjJcdTUyMTZcdTgwOWZcdTgwOWNcdTgwOTNcdTgwYmNcdTY3MGFcdTgwYmRcdTgwYjFcdTgwYWJcdTgwYWRcdTgwYjRcdTgwYjdcdTgwZTdcdTgwZThcdTgwZTlcdTgwZWFcdTgwZGJcdTgwYzJcdTgwYzRcdTgwZDlcdTgwY2RcdTgwZDdcdTY3MTBcdTgwZGRcdTgwZWJc''@;'; put 'put ''dTgwZjFcdTgwZjRcdTgwZWRcdTgxMGRcdTgxMGVcdTgwZjJcdTgwZmNcdTY3MTVcdTgxMTJcdThjNWFcdTgxMzZcdTgxMWVcdTgxMmNcdTgxMThcdTgxMzJcdTgxNDhcdTgxNGNcdTgxNTNcdTgxNzRcdTgxNTlcdTgxNWFcdTgxNzFcdTgxNjBcdTgxNjlcdTgxN2NcdTgxN2RcdTgxNmRcdTgx''@;'; put 'put ''NjdcdTU4NGRcdTVhYjVcdTgxODhcdTgxODJcdTgxOTFcdTZlZDVcdTgxYTNcdTgxYWFcdTgxY2NcdTY3MjZcdTgxY2FcdTgxYmJcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMzVdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIzNV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMzVdW3NdXT02''@;'; put 'put ''MDE2MCtzLGhbNjAxNjArc109Y1syMzVdW3NdKTtmb3IoY1syMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTgxYzFcdTgxYTZcdTZiMjRcdTZiMzdcdTZiMzlcdTZiNDNcdTZiNDZcdTZiNTlcdTk4ZDFcdTk4ZDJcdTk4ZDNcdTk4ZDVcdTk4ZDlcdTk4ZGFcdTZiYjNcdTVmNDBcdTZiYzJcdTg5ZjNcdTY1OTBcdTlmNTFcdTY1OTNcdTY1YmNcdTY1YzZcdTY1YzRcdTY1''@;'; put 'put ''YzNcdTY1Y2NcdTY1Y2VcdTY1ZDJcdTY1ZDZcdTcwODBcdTcwOWNcdTcwOTZcdTcwOWRcdTcwYmJcdTcwYzBcdTcwYjdcdTcwYWJcdTcwYjFcdTcwZThcdTcwY2FcdTcxMTBcdTcxMTNcdTcxMTZcdTcxMmZcdTcxMzFcdTcxNzNcdTcxNWNcdTcxNjhcdTcxNDVcdTcxNzJcdTcxNGFcdTcxNzhc''@;'; put 'put ''dTcxN2FcdTcxOThcdTcxYjNcdTcxYjVcdTcxYThcdTcxYTBcdTcxZTBcdTcxZDRcdTcxZTdcdTcxZjlcdTcyMWRcdTcyMjhcdTcwNmNcdTcxMThcdTcxNjZcdTcxYjlcdTYyM2VcdTYyM2RcdTYyNDNcdTYyNDhcdTYyNDlcdTc5M2JcdTc5NDBcdTc5NDZcdTc5NDlcdTc5NWJcdTc5NWNcdTc5''@;'; put 'put ''NTNcdTc5NWFcdTc5NjJcdTc5NTdcdTc5NjBcdTc5NmZcdTc5NjdcdTc5N2FcdTc5ODVcdTc5OGFcdTc5OWFcdTc5YTdcdTc5YjNcdTVmZDFcdTVmZDBcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMzZdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIzNl1bc10uY2hhckNvZGVBdCgwKSYmKHlb''@;'; put 'put ''Y1syMzZdW3NdXT02MDQxNitzLGhbNjA0MTYrc109Y1syMzZdW3NdKTtmb3IoY1syMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwM2NcdTYwNWRcdTYwNWFcdTYwNjdcdTYwNDFcdTYwNTlcdTYwNjNcdTYwYWJcdTYxMDZcdTYxMGRcdTYxNWRcdTYxYTlcdTYxOWRcdTYxY2JcdTYxZDFcdTYyMDZcdTgwODBcdTgwN2ZcdTZjOTNcdTZjZjZcdTZkZmNcdTc3ZjZcdTc3''@;'; put 'put ''ZjhcdTc4MDBcdTc4MDlcdTc4MTdcdTc4MThcdTc4MTFcdTY1YWJcdTc4MmRcdTc4MWNcdTc4MWRcdTc4MzlcdTc4M2FcdTc4M2JcdTc4MWZcdTc4M2NcdTc4MjVcdTc4MmNcdTc4MjNcdTc4MjlcdTc4NGVcdTc4NmRcdTc4NTZcdTc4NTdcdTc4MjZcdTc4NTBcdTc4NDdcdTc4NGNcdTc4NmFc''@;'; put 'put ''dTc4OWJcdTc4OTNcdTc4OWFcdTc4ODdcdTc4OWNcdTc4YTFcdTc4YTNcdTc4YjJcdTc4YjlcdTc4YTVcdTc4ZDRcdTc4ZDlcdTc4YzlcdTc4ZWNcdTc4ZjJcdTc5MDVcdTc4ZjRcdTc5MTNcdTc5MjRcdTc5MWVcdTc5MzRcdTlmOWJcdTllZjlcdTllZmJcdTllZmNcdTc2ZjFcdTc3MDRcdTc3''@;'; put 'put ''MGRcdTc2ZjlcdTc3MDdcdTc3MDhcdTc3MWFcdTc3MjJcdTc3MTlcdTc3MmRcdTc3MjZcdTc3MzVcdTc3MzhcdTc3NTBcdTc3NTFcdTc3NDdcdTc3NDNcdTc3NWFcdTc3NjhcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMzddLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIzN11bc10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKHlbY1syMzddW3NdXT02MDY3MitzLGhbNjA2NzIrc109Y1syMzddW3NdKTtmb3IoY1syMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3NjJcdTc3NjVcdTc3N2ZcdTc3OGRcdTc3N2RcdTc3ODBcdTc3OGNcdTc3OTFcdTc3OWZcdTc3YTBcdTc3YjBcdTc3YjVcdTc3YmRcdTc1M2FcdTc1NDBcdTc1NGVcdTc1NGJcdTc1NDhcdTc1NWJcdTc1NzJcdTc1''@;'; put 'put ''NzlcdTc1ODNcdTdmNThcdTdmNjFcdTdmNWZcdThhNDhcdTdmNjhcdTdmNzRcdTdmNzFcdTdmNzlcdTdmODFcdTdmN2VcdTc2Y2RcdTc2ZTVcdTg4MzJcdTk0ODVcdTk0ODZcdTk0ODdcdTk0OGJcdTk0OGFcdTk0OGNcdTk0OGRcdTk0OGZcdTk0OTBcdTk0OTRcdTk0OTdcdTk0OTVcdTk0OWFc''@;'; put 'put ''dTk0OWJcdTk0OWNcdTk0YTNcdTk0YTRcdTk0YWJcdTk0YWFcdTk0YWRcdTk0YWNcdTk0YWZcdTk0YjBcdTk0YjJcdTk0YjRcdTk0YjZcdTk0YjdcdTk0YjhcdTk0YjlcdTk0YmFcdTk0YmNcdTk0YmRcdTk0YmZcdTk0YzRcdTk0YzhcdTk0YzlcdTk0Y2FcdTk0Y2JcdTk0Y2NcdTk0Y2RcdTk0''@;'; put 'put ''Y2VcdTk0ZDBcdTk0ZDFcdTk0ZDJcdTk0ZDVcdTk0ZDZcdTk0ZDdcdTk0ZDlcdTk0ZDhcdTk0ZGJcdTk0ZGVcdTk0ZGZcdTk0ZTBcdTk0ZTJcdTk0ZTRcdTk0ZTVcdTk0ZTdcdTk0ZThcdTk0ZWFcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMzhdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzIz''@;'; put 'put ''OF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMzhdW3NdXT02MDkyOCtzLGhbNjA5Mjgrc109Y1syMzhdW3NdKTtmb3IoY1syMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0ZTlcdTk0ZWJcdTk0ZWVcdTk0ZWZcdTk0ZjNcdTk0ZjRcdTk0ZjVcdTk0ZjdcdTk0ZjlcdTk0ZmNcdTk0ZmRcdTk0ZmZcdTk1MDNcdTk1MDJcdTk1MDZcdTk1MDdcdTk1MDlcdTk1MGFcdTk1''@;'; put 'put ''MGRcdTk1MGVcdTk1MGZcdTk1MTJcdTk1MTNcdTk1MTRcdTk1MTVcdTk1MTZcdTk1MThcdTk1MWJcdTk1MWRcdTk1MWVcdTk1MWZcdTk1MjJcdTk1MmFcdTk1MmJcdTk1MjlcdTk1MmNcdTk1MzFcdTk1MzJcdTk1MzRcdTk1MzZcdTk1MzdcdTk1MzhcdTk1M2NcdTk1M2VcdTk1M2ZcdTk1NDJc''@;'; put 'put ''dTk1MzVcdTk1NDRcdTk1NDVcdTk1NDZcdTk1NDlcdTk1NGNcdTk1NGVcdTk1NGZcdTk1NTJcdTk1NTNcdTk1NTRcdTk1NTZcdTk1NTdcdTk1NThcdTk1NTlcdTk1NWJcdTk1NWVcdTk1NWZcdTk1NWRcdTk1NjFcdTk1NjJcdTk1NjRcdTk1NjVcdTk1NjZcdTk1NjdcdTk1NjhcdTk1NjlcdTk1''@;'; put 'put ''NmFcdTk1NmJcdTk1NmNcdTk1NmZcdTk1NzFcdTk1NzJcdTk1NzNcdTk1M2FcdTc3ZTdcdTc3ZWNcdTk2YzlcdTc5ZDVcdTc5ZWRcdTc5ZTNcdTc5ZWJcdTdhMDZcdTVkNDdcdTdhMDNcdTdhMDJcdTdhMWVcdTdhMTRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syMzldLmxlbmd0aDsrK3Mp''@;'; put 'put ''NjU1MzMhPT1jWzIzOV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syMzldW3NdXT02MTE4NCtzLGhbNjExODQrc109Y1syMzldW3NdKTtmb3IoY1syNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhMzlcdTdhMzdcdTdhNTFcdTllY2ZcdTk5YTVcdTdhNzBcdTc2ODhcdTc2OGVcdTc2OTNcdTc2OTlcdTc2YTRcdTc0ZGVcdTc0ZTBcdTc1MmNcdTllMjBcdTllMjJcdTll''@;'; put 'put ''MjhcdTllMjlcdTllMmFcdTllMmJcdTllMmNcdTllMzJcdTllMzFcdTllMzZcdTllMzhcdTllMzdcdTllMzlcdTllM2FcdTllM2VcdTllNDFcdTllNDJcdTllNDRcdTllNDZcdTllNDdcdTllNDhcdTllNDlcdTllNGJcdTllNGNcdTllNGVcdTllNTFcdTllNTVcdTllNTdcdTllNWFcdTllNWJc''@;'; put 'put ''dTllNWNcdTllNWVcdTllNjNcdTllNjZcdTllNjdcdTllNjhcdTllNjlcdTllNmFcdTllNmJcdTllNmNcdTllNzFcdTllNmRcdTllNzNcdTc1OTJcdTc1OTRcdTc1OTZcdTc1YTBcdTc1OWRcdTc1YWNcdTc1YTNcdTc1YjNcdTc1YjRcdTc1YjhcdTc1YzRcdTc1YjFcdTc1YjBcdTc1YzNcdTc1''@;'; put 'put ''YzJcdTc1ZDZcdTc1Y2RcdTc1ZTNcdTc1ZThcdTc1ZTZcdTc1ZTRcdTc1ZWJcdTc1ZTdcdTc2MDNcdTc1ZjFcdTc1ZmNcdTc1ZmZcdTc2MTBcdTc2MDBcdTc2MDVcdTc2MGNcdTc2MTdcdTc2MGFcdTc2MjVcdTc2MThcdTc2MTVcdTc2MTlcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syNDBd''@;'; put 'put ''Lmxlbmd0aDsrK3MpNjU1MzMhPT1jWzI0MF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syNDBdW3NdXT02MTQ0MCtzLGhbNjE0NDArc109Y1syNDBdW3NdKTtmb3IoY1syNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2MWJcdTc2M2NcdTc2MjJcdTc2MjBcdTc2NDBcdTc2MmRcdTc2MzBcdTc2M2ZcdTc2MzVcdTc2NDNcdTc2M2VcdTc2MzNcdTc2NGRcdTc2NWVcdTc2''@;'; put 'put ''NTRcdTc2NWNcdTc2NTZcdTc2NmJcdTc2NmZcdTdmY2FcdTdhZTZcdTdhNzhcdTdhNzlcdTdhODBcdTdhODZcdTdhODhcdTdhOTVcdTdhYTZcdTdhYTBcdTdhYWNcdTdhYThcdTdhYWRcdTdhYjNcdTg4NjRcdTg4NjlcdTg4NzJcdTg4N2RcdTg4N2ZcdTg4ODJcdTg4YTJcdTg4YzZcdTg4Yjdc''@;'; put 'put ''dTg4YmNcdTg4YzlcdTg4ZTJcdTg4Y2VcdTg4ZTNcdTg4ZTVcdTg4ZjFcdTg5MWFcdTg4ZmNcdTg4ZThcdTg4ZmVcdTg4ZjBcdTg5MjFcdTg5MTlcdTg5MTNcdTg5MWJcdTg5MGFcdTg5MzRcdTg5MmJcdTg5MzZcdTg5NDFcdTg5NjZcdTg5N2JcdTc1OGJcdTgwZTVcdTc2YjJcdTc2YjRcdTc3''@;'; put 'put ''ZGNcdTgwMTJcdTgwMTRcdTgwMTZcdTgwMWNcdTgwMjBcdTgwMjJcdTgwMjVcdTgwMjZcdTgwMjdcdTgwMjlcdTgwMjhcdTgwMzFcdTgwMGJcdTgwMzVcdTgwNDNcdTgwNDZcdTgwNGRcdTgwNTJcdTgwNjlcdTgwNzFcdTg5ODNcdTk4NzhcdTk4ODBcdTk4ODNcdWZmZmQiLnNwbGl0KCIiKSxz''@;'; put 'put ''PTA7cyE9Y1syNDFdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzI0MV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syNDFdW3NdXT02MTY5NitzLGhbNjE2OTYrc109Y1syNDFdW3NdKTtmb3IoY1syNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4ODlcdTk4OGNcdTk4OGRcdTk4OGZcdTk4OTRcdTk4OWFcdTk4OWJcdTk4OWVcdTk4OWZcdTk4YTFcdTk4YTJcdTk4YTVcdTk4''@;'; put 'put ''YTZcdTg2NGRcdTg2NTRcdTg2NmNcdTg2NmVcdTg2N2ZcdTg2N2FcdTg2N2NcdTg2N2JcdTg2YThcdTg2OGRcdTg2OGJcdTg2YWNcdTg2OWRcdTg2YTdcdTg2YTNcdTg2YWFcdTg2OTNcdTg2YTlcdTg2YjZcdTg2YzRcdTg2YjVcdTg2Y2VcdTg2YjBcdTg2YmFcdTg2YjFcdTg2YWZcdTg2Yzlc''@;'; put 'put ''dTg2Y2ZcdTg2YjRcdTg2ZTlcdTg2ZjFcdTg2ZjJcdTg2ZWRcdTg2ZjNcdTg2ZDBcdTg3MTNcdTg2ZGVcdTg2ZjRcdTg2ZGZcdTg2ZDhcdTg2ZDFcdTg3MDNcdTg3MDdcdTg2ZjhcdTg3MDhcdTg3MGFcdTg3MGRcdTg3MDlcdTg3MjNcdTg3M2JcdTg3MWVcdTg3MjVcdTg3MmVcdTg3MWFcdTg3''@;'; put 'put ''M2VcdTg3NDhcdTg3MzRcdTg3MzFcdTg3MjlcdTg3MzdcdTg3M2ZcdTg3ODJcdTg3MjJcdTg3N2RcdTg3N2VcdTg3N2JcdTg3NjBcdTg3NzBcdTg3NGNcdTg3NmVcdTg3OGJcdTg3NTNcdTg3NjNcdTg3N2NcdTg3NjRcdTg3NTlcdTg3NjVcdTg3OTNcdTg3YWZcdTg3YThcdTg3ZDJcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxzPTA7cyE9Y1syNDJdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzI0Ml1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syNDJdW3NdXT02MTk1MitzLGhbNjE5NTIrc109Y1syNDJdW3NdKTtmb3IoY1syNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3YzZcdTg3ODhcdTg3ODVcdTg3YWRcdTg3OTdcdTg3ODNcdTg3YWJcdTg3ZTVcdTg3YWNcdTg3YjVcdTg3''@;'; put 'put ''YjNcdTg3Y2JcdTg3ZDNcdTg3YmRcdTg3ZDFcdTg3YzBcdTg3Y2FcdTg3ZGJcdTg3ZWFcdTg3ZTBcdTg3ZWVcdTg4MTZcdTg4MTNcdTg3ZmVcdTg4MGFcdTg4MWJcdTg4MjFcdTg4MzlcdTg4M2NcdTdmMzZcdTdmNDJcdTdmNDRcdTdmNDVcdTgyMTBcdTdhZmFcdTdhZmRcdTdiMDhcdTdiMDNc''@;'; put 'put ''dTdiMDRcdTdiMTVcdTdiMGFcdTdiMmJcdTdiMGZcdTdiNDdcdTdiMzhcdTdiMmFcdTdiMTlcdTdiMmVcdTdiMzFcdTdiMjBcdTdiMjVcdTdiMjRcdTdiMzNcdTdiM2VcdTdiMWVcdTdiNThcdTdiNWFcdTdiNDVcdTdiNzVcdTdiNGNcdTdiNWRcdTdiNjBcdTdiNmVcdTdiN2JcdTdiNjJcdTdi''@;'; put 'put ''NzJcdTdiNzFcdTdiOTBcdTdiYTZcdTdiYTdcdTdiYjhcdTdiYWNcdTdiOWRcdTdiYThcdTdiODVcdTdiYWFcdTdiOWNcdTdiYTJcdTdiYWJcdTdiYjRcdTdiZDFcdTdiYzFcdTdiY2NcdTdiZGRcdTdiZGFcdTdiZTVcdTdiZTZcdTdiZWFcdTdjMGNcdTdiZmVcdTdiZmNcdTdjMGZcdTdjMTZc''@;'; put 'put ''dTdjMGJcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syNDNdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzI0M11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syNDNdW3NdXT02MjIwOCtzLGhbNjIyMDgrc109Y1syNDNdW3NdKTtmb3IoY1syNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjMWZcdTdjMmFcdTdjMjZcdTdjMzhcdTdjNDFcdTdjNDBcdTgxZmVcdTgyMDFcdTgy''@;'; put 'put ''MDJcdTgyMDRcdTgxZWNcdTg4NDRcdTgyMjFcdTgyMjJcdTgyMjNcdTgyMmRcdTgyMmZcdTgyMjhcdTgyMmJcdTgyMzhcdTgyM2JcdTgyMzNcdTgyMzRcdTgyM2VcdTgyNDRcdTgyNDlcdTgyNGJcdTgyNGZcdTgyNWFcdTgyNWZcdTgyNjhcdTg4N2VcdTg4ODVcdTg4ODhcdTg4ZDhcdTg4ZGZc''@;'; put 'put ''dTg5NWVcdTdmOWRcdTdmOWZcdTdmYTdcdTdmYWZcdTdmYjBcdTdmYjJcdTdjN2NcdTY1NDlcdTdjOTFcdTdjOWRcdTdjOWNcdTdjOWVcdTdjYTJcdTdjYjJcdTdjYmNcdTdjYmRcdTdjYzFcdTdjYzdcdTdjY2NcdTdjY2RcdTdjYzhcdTdjYzVcdTdjZDdcdTdjZThcdTgyNmVcdTY2YThcdTdm''@;'; put 'put ''YmZcdTdmY2VcdTdmZDVcdTdmZTVcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZWVcdTdmZjNcdTdjZjhcdTdkNzdcdTdkYTZcdTdkYWVcdTdlNDdcdTdlOWJcdTllYjhcdTllYjRcdThkNzNcdThkODRcdThkOTRcdThkOTFcdThkYjFcdThkNjdcdThkNmRcdThjNDdcdThjNDlcdTkxNGFcdTkxNTBc''@;'; put 'put ''dTkxNGVcdTkxNGZcdTkxNjRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syNDRdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzI0NF1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syNDRdW3NdXT02MjQ2NCtzLGhbNjI0NjQrc109Y1syNDRdW3NdKTtmb3IoY1syNDVdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxNjJcdTkxNjFcdTkxNzBcdTkxNjlcdTkxNmZcdTkxN2RcdTkx''@;'; put 'put ''N2VcdTkxNzJcdTkxNzRcdTkxNzlcdTkxOGNcdTkxODVcdTkxOTBcdTkxOGRcdTkxOTFcdTkxYTJcdTkxYTNcdTkxYWFcdTkxYWRcdTkxYWVcdTkxYWZcdTkxYjVcdTkxYjRcdTkxYmFcdThjNTVcdTllN2VcdThkYjhcdThkZWJcdThlMDVcdThlNTlcdThlNjlcdThkYjVcdThkYmZcdThkYmNc''@;'; put 'put ''dThkYmFcdThkYzRcdThkZDZcdThkZDdcdThkZGFcdThkZGVcdThkY2VcdThkY2ZcdThkZGJcdThkYzZcdThkZWNcdThkZjdcdThkZjhcdThkZTNcdThkZjlcdThkZmJcdThkZTRcdThlMDlcdThkZmRcdThlMTRcdThlMWRcdThlMWZcdThlMmNcdThlMmVcdThlMjNcdThlMmZcdThlM2FcdThl''@;'; put 'put ''NDBcdThlMzlcdThlMzVcdThlM2RcdThlMzFcdThlNDlcdThlNDFcdThlNDJcdThlNTFcdThlNTJcdThlNGFcdThlNzBcdThlNzZcdThlN2NcdThlNmZcdThlNzRcdThlODVcdThlOGZcdThlOTRcdThlOTBcdThlOWNcdThlOWVcdThjNzhcdThjODJcdThjOGFcdThjODVcdThjOThcdThjOTRc''@;'; put 'put ''dTY1OWJcdTg5ZDZcdTg5ZGVcdTg5ZGFcdTg5ZGNcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syNDVdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzI0NV1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syNDVdW3NdXT02MjcyMCtzLGhbNjI3MjArc109Y1syNDVdW3NdKTtmb3IoY1syNDZdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5ZTVcdTg5ZWJcdTg5ZWZcdThhM2VcdThi''@;'; put 'put ''MjZcdTk3NTNcdTk2ZTlcdTk2ZjNcdTk2ZWZcdTk3MDZcdTk3MDFcdTk3MDhcdTk3MGZcdTk3MGVcdTk3MmFcdTk3MmRcdTk3MzBcdTk3M2VcdTlmODBcdTlmODNcdTlmODVcdTlmODZcdTlmODdcdTlmODhcdTlmODlcdTlmOGFcdTlmOGNcdTllZmVcdTlmMGJcdTlmMGRcdTk2YjlcdTk2YmNc''@;'; put 'put ''dTk2YmRcdTk2Y2VcdTk2ZDJcdTc3YmZcdTk2ZTBcdTkyOGVcdTkyYWVcdTkyYzhcdTkzM2VcdTkzNmFcdTkzY2FcdTkzOGZcdTk0M2VcdTk0NmJcdTljN2ZcdTljODJcdTljODVcdTljODZcdTljODdcdTljODhcdTdhMjNcdTljOGJcdTljOGVcdTljOTBcdTljOTFcdTljOTJcdTljOTRcdTlj''@;'; put 'put ''OTVcdTljOWFcdTljOWJcdTljOWVcdTljOWZcdTljYTBcdTljYTFcdTljYTJcdTljYTNcdTljYTVcdTljYTZcdTljYTdcdTljYThcdTljYTlcdTljYWJcdTljYWRcdTljYWVcdTljYjBcdTljYjFcdTljYjJcdTljYjNcdTljYjRcdTljYjVcdTljYjZcdTljYjdcdTljYmFcdTljYmJcdTljYmNc''@;'; put 'put ''dTljYmRcdTljYzRcdTljYzVcdTljYzZcdTljYzdcdTljY2FcdTljY2JcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syNDZdLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzI0Nl1bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syNDZdW3NdXT02Mjk3NitzLGhbNjI5NzYrc109Y1syNDZdW3NdKTtmb3Io''@;'; put 'put ''Y1syNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTljY2NcdTljY2RcdTlj''@;'; put 'put ''Y2VcdTljY2ZcdTljZDBcdTljZDNcdTljZDRcdTljZDVcdTljZDdcdTljZDhcdTljZDlcdTljZGNcdTljZGRcdTljZGZcdTljZTJcdTk3N2NcdTk3ODVcdTk3OTFcdTk3OTJcdTk3OTRcdTk3YWZcdTk3YWJcdTk3YTNcdTk3YjJcdTk3YjRcdTlhYjFcdTlhYjBcdTlhYjdcdTllNThcdTlhYjZc''@;'; put 'put ''dTlhYmFcdTlhYmNcdTlhYzFcdTlhYzBcdTlhYzVcdTlhYzJcdTlhY2JcdTlhY2NcdTlhZDFcdTliNDVcdTliNDNcdTliNDdcdTliNDlcdTliNDhcdTliNGRcdTliNTFcdTk4ZThcdTk5MGRcdTk5MmVcdTk5NTVcdTk5NTRcdTlhZGZcdTlhZTFcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZmJcdTlh''@;'; put 'put ''ZWRcdTlhZjlcdTliMDhcdTliMGZcdTliMTNcdTliMWZcdTliMjNcdTllYmRcdTllYmVcdTdlM2JcdTllODJcdTllODdcdTllODhcdTllOGJcdTllOTJcdTkzZDZcdTllOWRcdTllOWZcdTllZGJcdTllZGNcdTllZGRcdTllZTBcdTllZGZcdTllZTJcdTllZTlcdTllZTdcdTllZTVcdTllZWFc''@;'; put 'put ''dTllZWZcdTlmMjJcdTlmMmNcdTlmMmZcdTlmMzlcdTlmMzdcdTlmM2RcdTlmM2VcdTlmNDRcdWZmZmQiLnNwbGl0KCIiKSxzPTA7cyE9Y1syNDddLmxlbmd0aDsrK3MpNjU1MzMhPT1jWzI0N11bc10uY2hhckNvZGVBdCgwKSYmKHlbY1syNDddW3NdXT02MzIzMitzLGhbNjMyMzIrc109Y1sy''@;'; put 'put ''NDddW3NdKTtyZXR1cm57ZW5jOnksZGVjOmh9fSgpLGpbMTAwMjldPWZ1bmN0aW9uKCl7Zm9yKHZhciBoPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNc''@;'; put 'put ''eDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRcdTAxMDBcdTAxMDFceGM5XHUwMTA0XHhkNlx4ZGNceGUxXHUwMTA1XHUwMTBjXHhl''@;'; put 'put ''NFx1MDEwZFx1MDEwNlx1MDEwN1x4ZTlcdTAxNzlcdTAxN2FcdTAxMGVceGVkXHUwMTBmXHUwMTEyXHUwMTEzXHUwMTE2XHhmM1x1MDExN1x4ZjRceGY2XHhmNVx4ZmFcdTAxMWFcdTAxMWJceGZjXHUyMDIwXHhiMFx1MDExOFx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx1''@;'; put 'put ''MDExOVx4YThcdTIyNjBcdTAxMjNcdTAxMmVcdTAxMmZcdTAxMmFcdTIyNjRcdTIyNjVcdTAxMmJcdTAxMzZcdTIyMDJcdTIyMTFcdTAxNDJcdTAxM2JcdTAxM2NcdTAxM2RcdTAxM2VcdTAxMzlcdTAxM2FcdTAxNDVcdTAxNDZcdTAxNDNceGFjXHUyMjFhXHUwMTQ0XHUwMTQ3XHUyMjA2XHhh''@;'; put 'put ''Ylx4YmJcdTIwMjZceGEwXHUwMTQ4XHUwMTUwXHhkNVx1MDE1MVx1MDE0Y1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FcdTAxNGRcdTAxNTRcdTAxNTVcdTAxNThcdTIwMzlcdTIwM2FcdTAxNTlcdTAxNTZcdTAxNTdcdTAxNjBcdTIwMWFcdTIwMWVcdTAx''@;'; put 'put ''NjFcdTAxNWFcdTAxNWJceGMxXHUwMTY0XHUwMTY1XHhjZFx1MDE3ZFx1MDE3ZVx1MDE2YVx4ZDNceGQ0XHUwMTZiXHUwMTZlXHhkYVx1MDE2Zlx1MDE3MFx1MDE3MVx1MDE3Mlx1MDE3M1x4ZGRceGZkXHUwMTM3XHUwMTdiXHUwMTQxXHUwMTdjXHUwMTIyXHUwMmM3Iix5PVtdLGM9e30scz0w''@;'; put 'put ''OzI1NiE9czsrK3MpNjU1MzMhPT1oLmNoYXJDb2RlQXQocykmJihjW2guY2hhckF0KHMpXT1zKSx5W3NdPWguY2hhckF0KHMpO3JldHVybntlbmM6YyxkZWM6eX19KCksalsxMDA3OV09ZnVuY3Rpb24oKXtmb3IodmFyIGg9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2''@;'; put 'put ''XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2''@;'; put 'put ''d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNceGRkXHhiMFx4YTJceGEzXHhhN1x1MjAy''@;'; put 'put ''Mlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4''@;'; put 'put ''YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx4ZDBceGYwXHhkZVx4ZmVceGZkXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2Jc''@;'; put 'put ''eGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3Iix5PVtdLGM9e30scz0wOzI1NiE9czsrK3MpNjU1MzMhPT1oLmNoYXJDb2RlQXQocykmJihj''@;'; put 'put ''W2guY2hhckF0KHMpXT1zKSx5W3NdPWguY2hhckF0KHMpO3JldHVybntlbmM6YyxkZWM6eX19KCksalsxMDA4MV09ZnVuY3Rpb24oKXtmb3IodmFyIGg9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgx''@;'; put 'put ''Nlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhk''@;'; put 'put ''Y1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYw''@;'; put 'put ''XHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUw''@;'; put 'put ''MTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTAxMWVcdTAxMWZcdTAxMzBcdTAxMzFcdTAxNWVcdTAxNWZcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4''@;'; put 'put ''ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHVmZmZkXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLHk9W10sYz17fSxzPTA7MjU2IT1zOysrcyk2NTUzMyE9PWguY2hhckNvZGVBdChzKSYmKGNbaC5jaGFyQXQocyldPXMpLHlbc109aC5j''@;'; put 'put ''aGFyQXQocyk7cmV0dXJue2VuYzpjLGRlYzp5fX0oKSxqWzI4NTkxXT1mdW5jdGlvbigpe2Zvcih2YXIgaD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFj''@;'; put 'put ''XHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhj''@;'; put 'put ''XHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVc''@;'; put 'put ''eGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4''@;'; put 'put ''ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIseT1bXSxjPXt9LHM9MDsyNTYhPXM7KytzKTY1NTMzIT09''@;'; put 'put ''aC5jaGFyQ29kZUF0KHMpJiYoY1toLmNoYXJBdChzKV09cykseVtzXT1oLmNoYXJBdChzKTtyZXR1cm57ZW5jOmMsZGVjOnl9fSgpLGZlLmV4cG9ydHMmJnR5cGVvZiBET19OT1RfRVhQT1JUX0NPREVQQUdFPiJ1IiYmKGZlLmV4cG9ydHM9aiksZnVuY3Rpb24oaCx5KXsidXNlIHN0cmljdCI7''@;'; put 'put ''aWYodHlwZW9mIGo+InUiKXt2YXIgYz1qO2ZlLmV4cG9ydHMmJnR5cGVvZiBET19OT1RfRVhQT1JUX0NPREVQQUdFPiJ1Ij9mZS5leHBvcnRzPXkoYyk6aC5jcHRhYmxlPXkoYyl9ZWxzZSBqPXkoail9KHRoaXMsZnVuY3Rpb24oaCl7InVzZSBzdHJpY3QiO3ZhciB5PXsxMjAwOiJ1dGYxNmxl''@;'; put 'put ''IiwxMjAxOiJ1dGYxNmJlIiwxMmUzOiJ1dGYzMmxlIiwxMjAwMToidXRmMzJiZSIsMTY5Njk6InV0ZjY0bGUiLDIwMTI3OiJhc2NpaSIsNjVlMzoidXRmNyIsNjUwMDE6InV0ZjgifSxjPVs4NzQsMTI1MCwxMjUxLDEyNTIsMTI1MywxMjU0LDEyNTUsMTI1NiwxZTRdLHM9WzkzMiw5MzYsOTQ5''@;'; put 'put ''LDk1MF0sQT1bNjUwMDFdLHY9e30sQz17fSx3PXt9LFM9e30sTD1mdW5jdGlvbihHKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShHKX0sUj1mdW5jdGlvbihHKXtyZXR1cm4gRy5jaGFyQ29kZUF0KDApfSx4PXR5cGVvZiBCdWZmZXI8InUiLFU9ZnVuY3Rpb24oKXt9O2lmKHgpe3ZhciBI''@;'; put 'put ''PSFCdWZmZXIuZnJvbTtpZighSCl0cnl7QnVmZmVyLmZyb20oImZvbyIsInV0ZjgiKX1jYXRjaHtIPSEwfVU9SD9mdW5jdGlvbihLLEcpe3JldHVybiBHP25ldyBCdWZmZXIoSyxHKTpuZXcgQnVmZmVyKEspfTpCdWZmZXIuZnJvbS5iaW5kKEJ1ZmZlciksQnVmZmVyLmFsbG9jVW5zYWZlfHwo''@;'; put 'put ''QnVmZmVyLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKEspe3JldHVybiBuZXcgQnVmZmVyKEspfSk7dmFyIFY9MTAyNCxOPUJ1ZmZlci5hbGxvY1Vuc2FmZShWKSxZPWZ1bmN0aW9uKEcpe3ZhciBEPWZ1bmN0aW9uKEcpe2Zvcih2YXIgRD1CdWZmZXIuYWxsb2NVbnNhZmUoNjU1MzYpLHA9MDtwPDY1''@;'; put 'put ''NTM2OysrcClEW3BdPTA7Zm9yKHZhciBJPU9iamVjdC5rZXlzKEcpLHVlPUkubGVuZ3RoLG5lPTAsX2U9SVtuZV07bmU8dWU7KytuZSkoX2U9SVtuZV0pJiYoRFtfZS5jaGFyQ29kZUF0KDApXT1HW19lXSk7cmV0dXJuIER9KGhbR10uZW5jKTtyZXR1cm4gZnVuY3Rpb24oSSx1ZSl7dmFyIF9l''@;'; put 'put ''LG5lPUkubGVuZ3RoLFBlPTAsb3Q9MCxsdD0wLGR0PTA7aWYoInN0cmluZyI9PXR5cGVvZiBJKWZvcihfZT1CdWZmZXIuYWxsb2NVbnNhZmUobmUpLFBlPTA7UGU8bmU7KytQZSlfZVtQZV09RFtJLmNoYXJDb2RlQXQoUGUpXTtlbHNlIGlmKEJ1ZmZlci5pc0J1ZmZlcihJKSl7Zm9yKF9lPUJ1''@;'; put 'put ''ZmZlci5hbGxvY1Vuc2FmZSgyKm5lKSxvdD0wLFBlPTA7UGU8bmU7KytQZSkobHQ9SVtQZV0pPDEyOD9fZVtvdCsrXT1EW2x0XTpsdDwyMjQ/KF9lW290KytdPURbKCgzMSZsdCk8PDYpKyg2MyZJW1BlKzFdKV0sKytQZSk6bHQ8MjQwPyhfZVtvdCsrXT1EWygoMTUmbHQpPDwxMikrKCg2MyZJ''@;'; put 'put ''W1BlKzFdKTw8NikrKDYzJklbUGUrMl0pXSxQZSs9Mik6KGR0PSgoNyZsdCk8PDE4KSsoKDYzJklbUGUrMV0pPDwxMikrKCg2MyZJW1BlKzJdKTw8NikrKDYzJklbUGUrM10pLFBlKz0zLGR0PDY1NTM2P19lW290KytdPURbZHRdOihfZVtvdCsrXT1EWzU1Mjk2KygoZHQtPTY1NTM2KT4+MTAm''@;'; put 'put ''MTAyMyldLF9lW290KytdPURbNTYzMjArKDEwMjMmZHQpXSkpO19lPV9lLnNsaWNlKDAsb3QpfWVsc2UgZm9yKF9lPUJ1ZmZlci5hbGxvY1Vuc2FmZShuZSksUGU9MDtQZTxuZTsrK1BlKV9lW1BlXT1EW0lbUGVdLmNoYXJDb2RlQXQoMCldO3JldHVybiB1ZSYmImJ1ZiIhPT11ZT8iYXJyIiE9''@;'; put 'put ''PXVlP19lLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKF9lKTpfZX19LEY9ZnVuY3Rpb24oRyl7dmFyIEQ9aFtHXS5kZWMscD1CdWZmZXIuYWxsb2NVbnNhZmUoMTMxMDcyKSxJPTAsdWU9IiI7Zm9yKEk9MDtJPEQubGVuZ3RoOysrSSlpZih1ZT1EW0ldKXt2YXIgbmU9dWUuY2hh''@;'; put 'put ''ckNvZGVBdCgwKTtwWzIqSV09MjU1Jm5lLHBbMipJKzFdPW5lPj44fXJldHVybiBmdW5jdGlvbihQZSl7dmFyIG90PVBlLmxlbmd0aCxsdD0wLGR0PTA7aWYoMipvdD5WJiYoVj0yKm90LE49QnVmZmVyLmFsbG9jVW5zYWZlKFYpKSxCdWZmZXIuaXNCdWZmZXIoUGUpKWZvcihsdD0wO2x0PG90''@;'; put 'put ''O2x0KyspTlsyKmx0XT1wW2R0PTIqUGVbbHRdXSxOWzIqbHQrMV09cFtkdCsxXTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgUGUpZm9yKGx0PTA7bHQ8b3Q7bHQrKylkdD0yKlBlLmNoYXJDb2RlQXQobHQpLE5bMipsdF09cFtkdF0sTlsyKmx0KzFdPXBbZHQrMV07ZWxzZSBmb3IobHQ9MDts''@;'; put 'put ''dDxvdDtsdCsrKU5bMipsdF09cFtkdD0yKlBlW2x0XV0sTlsyKmx0KzFdPXBbZHQrMV07cmV0dXJuIE4uc2xpY2UoMCwyKm90KS50b1N0cmluZygidWNzMiIpfX0sVz1mdW5jdGlvbihHKXtmb3IodmFyIEQ9aFtHXS5lbmMscD1CdWZmZXIuYWxsb2NVbnNhZmUoMTMxMDcyKSxJPTA7STwxMzEw''@;'; put 'put ''NzI7KytJKXBbSV09MDtmb3IodmFyIHVlPU9iamVjdC5rZXlzKEQpLG5lPTAsX2U9dWVbbmVdO25lPHVlLmxlbmd0aDsrK25lKWlmKF9lPXVlW25lXSl7dmFyIFBlPV9lLmNoYXJDb2RlQXQoMCk7cFsyKlBlXT0yNTUmRFtfZV0scFsyKlBlKzFdPURbX2VdPj44fXJldHVybiBmdW5jdGlvbihs''@;'; put 'put ''dCxkdCl7dmFyIFJlPWx0Lmxlbmd0aCxhZT1CdWZmZXIuYWxsb2NVbnNhZmUoMipSZSkseGU9MCxqZT0wLEFlPTAsRGU9MCxGZT0wO2lmKCJzdHJpbmciPT10eXBlb2YgbHQpe2Zvcih4ZT1EZT0wO3hlPFJlOysreGUpamU9MipsdC5jaGFyQ29kZUF0KHhlKSxhZVtEZSsrXT1wW2plKzFdfHxw''@;'; put 'put ''W2plXSxwW2plKzFdPjAmJihhZVtEZSsrXT1wW2plXSk7YWU9YWUuc2xpY2UoMCxEZSl9ZWxzZSBpZihCdWZmZXIuaXNCdWZmZXIobHQpKXtmb3IoeGU9RGU9MDt4ZTxSZTsrK3hlKShGZT1sdFt4ZV0pPDEyOD9qZT1GZTpGZTwyMjQ/KGplPSgoMzEmRmUpPDw2KSsoNjMmbHRbeGUrMV0pLCsr''@;'; put 'put ''eGUpOkZlPDI0MD8oamU9KCgxNSZGZSk8PDEyKSsoKDYzJmx0W3hlKzFdKTw8NikrKDYzJmx0W3hlKzJdKSx4ZSs9Mik6KGplPSgoNyZGZSk8PDE4KSsoKDYzJmx0W3hlKzFdKTw8MTIpKygoNjMmbHRbeGUrMl0pPDw2KSsoNjMmbHRbeGUrM10pLHhlKz0zKSxqZTw2NTUzNj8oYWVbRGUrK109''@;'; put 'put ''cFsxKyhqZSo9MildfHxwW2plXSxwW2plKzFdPjAmJihhZVtEZSsrXT1wW2plXSkpOihhZVtEZSsrXT1wWzErKGplPTIqKDU1Mjk2KygoQWU9amUtNjU1MzYpPj4xMCYxMDIzKSkpXXx8cFtqZV0scFtqZSsxXT4wJiYoYWVbRGUrK109cFtqZV0pLGFlW0RlKytdPXBbMSsoamU9MiooNTYzMjAr''@;'; put 'put ''KDEwMjMmQWUpKSldfHxwW2plXSxwW2plKzFdPjAmJihhZVtEZSsrXT1wW2plXSkpO2FlPWFlLnNsaWNlKDAsRGUpfWVsc2UgZm9yKHhlPURlPTA7eGU8UmU7eGUrKylqZT0yKmx0W3hlXS5jaGFyQ29kZUF0KDApLGFlW0RlKytdPXBbamUrMV18fHBbamVdLHBbamUrMV0+MCYmKGFlW0RlKytd''@;'; put 'put ''PXBbamVdKTtyZXR1cm4gZHQmJiJidWYiIT09ZHQ/ImFyciIhPT1kdD9hZS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChhZSk6YWV9fSxxPWZ1bmN0aW9uKEcpe3ZhciB1ZSxEPWhbR10uZGVjLHA9QnVmZmVyLmFsbG9jVW5zYWZlKDEzMTA3MiksST0wLG5lPTAsX2U9MCxQZT0w''@;'; put 'put ''O2ZvcihQZT0wO1BlPDY1NTM2OysrUGUpcFsyKlBlXT0yNTUscFsyKlBlKzFdPTI1Mztmb3IoST0wO0k8RC5sZW5ndGg7KytJKSh1ZT1EW0ldKSYmKG5lPXVlLmNoYXJDb2RlQXQoMCkscFtfZT0yKkldPTI1NSZuZSxwW19lKzFdPW5lPj44KTtyZXR1cm4gZnVuY3Rpb24obHQpe3ZhciBkdD1s''@;'; put 'put ''dC5sZW5ndGgsUmU9QnVmZmVyLmFsbG9jVW5zYWZlKDIqZHQpLGFlPTAseGU9MCxqZT0wO2lmKEJ1ZmZlci5pc0J1ZmZlcihsdCkpZm9yKGFlPTA7YWU8ZHQ7YWUrKykyNTU9PT1wW3hlPTIqbHRbYWVdXSYmMjUzPT09cFt4ZSsxXSYmKHhlPTIqKChsdFthZV08PDgpK2x0W2FlKzFdKSwrK2Fl''@;'; put 'put ''KSxSZVtqZSsrXT1wW3hlXSxSZVtqZSsrXT1wW3hlKzFdO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBsdClmb3IoYWU9MDthZTxkdDthZSsrKXhlPTIqbHQuY2hhckNvZGVBdChhZSksMjU1PT09cFt4ZV0mJjI1Mz09PXBbeGUrMV0mJih4ZT0yKigobHQuY2hhckNvZGVBdChhZSk8PDgpK2x0''@;'; put 'put ''LmNoYXJDb2RlQXQoYWUrMSkpLCsrYWUpLFJlW2plKytdPXBbeGVdLFJlW2plKytdPXBbeGUrMV07ZWxzZSBmb3IoYWU9MDthZTxkdDthZSsrKTI1NT09PXBbeGU9MipsdFthZV1dJiYyNTM9PT1wW3hlKzFdJiYoeGU9MiooKGx0W2FlXTw8OCkrbHRbYWUrMV0pLCsrYWUpLFJlW2plKytdPXBb''@;'; put 'put ''eGVdLFJlW2plKytdPXBbeGUrMV07cmV0dXJuIFJlLnNsaWNlKDAsamUpLnRvU3RyaW5nKCJ1Y3MyIil9fTt2WzY1MDAxXT1mdW5jdGlvbiBLKEcpe2lmKCJzdHJpbmciPT10eXBlb2YgRylyZXR1cm4gSyhHLnNwbGl0KCIiKS5tYXAoUikpO3ZhciBEPUcubGVuZ3RoLHA9MCxJPTA7NCpEPlYm''@;'; put 'put ''JihWPTQqRCxOPUJ1ZmZlci5hbGxvY1Vuc2FmZShWKSk7dmFyIHVlPTA7RD49MyYmMjM5PT1HWzBdJiYxODc9PUdbMV0mJjE5MT09R1syXSYmKHVlPTMpO2Zvcih2YXIgbmU9MSxfZT0wLFBlPTA7dWU8RDt1ZSs9bmUpbmU9MSwoUGU9R1t1ZV0pPDEyOD9wPVBlOlBlPDIyND8ocD02NCooMzEm''@;'; put 'put ''UGUpKyg2MyZHW3VlKzFdKSxuZT0yKTpQZTwyNDA/KHA9KCgxNSZQZSk8PDEyKSs2NCooNjMmR1t1ZSsxXSkrKDYzJkdbdWUrMl0pLG5lPTMpOihwPTI2MjE0NCooNyZQZSkrKCg2MyZHW3VlKzFdKTw8MTIpKzY0Kig2MyZHW3VlKzJdKSsoNjMmR1t1ZSszXSksbmU9NCkscDw2NTUzNj8oTltf''@;'; put 'put ''ZSsrXT0yNTUmcCxOW19lKytdPXA+PjgpOihJPTU1Mjk2KygocC09NjU1MzYpPj4xMCYxMDIzKSxwPTU2MzIwKygxMDIzJnApLE5bX2UrK109MjU1JkksTltfZSsrXT1JPj4+OCxOW19lKytdPTI1NSZwLE5bX2UrK109cD4+PjgmMjU1KTtyZXR1cm4gTi5zbGljZSgwLF9lKS50b1N0cmluZygi''@;'; put 'put ''dWNzMiIpfSxDWzY1MDAxXT1mdW5jdGlvbihHLEQpe2lmKHgmJkJ1ZmZlci5pc0J1ZmZlcihHKSlyZXR1cm4gRCYmImJ1ZiIhPT1EPyJhcnIiIT09RD9HLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKEcpOkc7dmFyIHA9Ry5sZW5ndGgsST0wLHVlPTAsbmU9MCxfZT0ic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIEc7NCpwPlYmJihWPTQqcCxOPUJ1ZmZlci5hbGxvY1Vuc2FmZShWKSk7Zm9yKHZhciBQZT0wO1BlPHA7KytQZSkoST1fZT9HLmNoYXJDb2RlQXQoUGUpOkdbUGVdLmNoYXJDb2RlQXQoMCkpPD0xMjc/TltuZSsrXT1JOkk8PTIwNDc/KE5bbmUrK109MTkyKyhJPj42KSxOW25l''@;'; put 'put ''KytdPTEyOCsoNjMmSSkpOkk+PTU1Mjk2JiZJPD01NzM0Mz8oSS09NTUyOTYsKytQZSx1ZT0oX2U/Ry5jaGFyQ29kZUF0KFBlKTpHW1BlXS5jaGFyQ29kZUF0KDApKS01NjMyMCsoSTw8MTApLE5bbmUrK109MjQwKyh1ZT4+PjE4JjcpLE5bbmUrK109MTQ0Kyh1ZT4+PjEyJjYzKSxOW25lKytd''@;'; put 'put ''PTEyOCsodWU+Pj42JjYzKSxOW25lKytdPTEyOCsoNjMmdWUpKTooTltuZSsrXT0yMjQrKEk+PjEyKSxOW25lKytdPTEyOCsoST4+NiY2MyksTltuZSsrXT0xMjgrKDYzJkkpKTtyZXR1cm4gRCYmImJ1ZiIhPT1EPyJhcnIiIT09RD9OLnNsaWNlKDAsbmUpLnRvU3RyaW5nKCJiaW5hcnkiKTpb''@;'; put 'put ''XS5zbGljZS5jYWxsKE4sMCxuZSk6Ti5zbGljZSgwLG5lKX19dmFyIHJlPWZ1bmN0aW9uKCl7aWYoeCl7aWYod1tjWzBdXSlyZXR1cm47dmFyIEc9MCxEPTA7Zm9yKEc9MDtHPGMubGVuZ3RoOysrRyloW0Q9Y1tHXV0mJih3W0RdPUYoRCksU1tEXT1ZKEQpKTtmb3IoRz0wO0c8cy5sZW5ndGg7''@;'; put 'put ''KytHKWhbRD1zW0ddXSYmKHdbRF09cShEKSxTW0RdPVcoRCkpO2ZvcihHPTA7RzxBLmxlbmd0aDsrK0cpdltEPUFbR11dJiYod1tEXT12W0RdKSxDW0RdJiYoU1tEXT1DW0RdKX19LG1lPWZ1bmN0aW9uKEssRyl7cmV0dXJuIiJ9LENlPWZ1bmN0aW9uKEcpe2RlbGV0ZSB3W0ddLGRlbGV0ZSBT''@;'; put 'put ''W0ddfSxrZT17ZW5jYWNoZTpyZSxkZWNhY2hlOmZ1bmN0aW9uKCl7aWYoeCl7aWYoIXdbY1swXV0pcmV0dXJuO2MuZm9yRWFjaChDZSkscy5mb3JFYWNoKENlKSxBLmZvckVhY2goQ2UpfWY9bWUsYj0wfSxzYmNzOmMsZGJjczpzfTtyZSgpO3ZhciBxZT0iQUJDREVGR0hJSktMTU5PUFFSU1RV''@;'; put 'put ''VldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsZj1tZSxiPTA7cmV0dXJuIGgudXRpbHM9e2RlY29kZTpmdW5jdGlvbiBLKEcsRCl7dmFyIHA7aWYocD13W0ddKXJldHVybiBwKEQpO2lmKCJzdHJpbmciPT10eXBlb2YgRClyZXR1cm4gSyhHLEQuc3BsaXQoIiIp''@;'; put 'put ''Lm1hcChSKSk7dmFyIGFlLEk9RC5sZW5ndGgsdWU9bmV3IEFycmF5KEkpLG5lPSIiLF9lPTAsUGU9MCxvdD0xLGx0PTAsZHQ9MCxSZT1oW0ddLHhlPSIiO2lmKFJlJiYoYWU9UmUuZGVjKSlmb3IoUGU9MDtQZTxJO1BlKz1vdCl7aWYob3Q9MiwobmU9YWVbKERbUGVdPDw4KStEW1BlKzFdXSl8''@;'; put 'put ''fChvdD0xLG5lPWFlW0RbUGVdXSksIW5lKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGNvZGU6ICIrRFtQZV0rIiAiK0RbUGUrb3QtMV0rIiAiK1BlKyIgIitvdCsiICIrYWVbRFtQZV1dKTt1ZVtsdCsrXT1uZX1lbHNle2lmKCEoeGU9eVtHXSkpdGhyb3cgbmV3IEVycm9yKCJVbnJl''@;'; put 'put ''Y29nbml6ZWQgQ1A6ICIrRyk7c3dpdGNoKHhlKXtjYXNlInV0ZjgiOmZvcihJPj0zJiYyMzk9PURbMF0mJjE4Nz09RFsxXSYmMTkxPT1EWzJdJiYoUGU9Myk7UGU8STtQZSs9b3Qpb3Q9MSxEW1BlXTwxMjg/X2U9RFtQZV06RFtQZV08MjI0PyhfZT02NCooMzEmRFtQZV0pKyg2MyZEW1BlKzFd''@;'; put 'put ''KSxvdD0yKTpEW1BlXTwyNDA/KF9lPSgoMTUmRFtQZV0pPDwxMikrNjQqKDYzJkRbUGUrMV0pKyg2MyZEW1BlKzJdKSxvdD0zKTooX2U9MjYyMTQ0Kig3JkRbUGVdKSsoKDYzJkRbUGUrMV0pPDwxMikrNjQqKDYzJkRbUGUrMl0pKyg2MyZEW1BlKzNdKSxvdD00KSxfZTw2NTUzNnx8KGR0PTU1''@;'; put 'put ''Mjk2KygoX2UtPTY1NTM2KT4+MTAmMTAyMyksX2U9NTYzMjArKDEwMjMmX2UpLHVlW2x0KytdPVN0cmluZy5mcm9tQ2hhckNvZGUoZHQpKSx1ZVtsdCsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKF9lKTticmVhaztjYXNlImFzY2lpIjppZih4JiZCdWZmZXIuaXNCdWZmZXIoRCkpcmV0dXJuIEQu''@;'; put 'put ''dG9TdHJpbmcoeGUpO2ZvcihQZT0wO1BlPEk7UGUrKyl1ZVtQZV09U3RyaW5nLmZyb21DaGFyQ29kZShEW1BlXSk7bHQ9STticmVhaztjYXNlInV0ZjE2bGUiOmlmKEk+PTImJjI1NT09RFswXSYmMjU0PT1EWzFdJiYoUGU9MikseCYmQnVmZmVyLmlzQnVmZmVyKEQpKXJldHVybiBELnRvU3Ry''@;'; put 'put ''aW5nKHhlKTtmb3Iob3Q9MjtQZSsxPEk7UGUrPW90KXVlW2x0KytdPVN0cmluZy5mcm9tQ2hhckNvZGUoKERbUGUrMV08PDgpK0RbUGVdKTticmVhaztjYXNlInV0ZjE2YmUiOmZvcihJPj0yJiYyNTQ9PURbMF0mJjI1NT09RFsxXSYmKFBlPTIpLG90PTI7UGUrMTxJO1BlKz1vdCl1ZVtsdCsr''@;'; put 'put ''XT1TdHJpbmcuZnJvbUNoYXJDb2RlKChEW1BlXTw8OCkrRFtQZSsxXSk7YnJlYWs7Y2FzZSJ1dGYzMmxlIjpmb3IoST49NCYmMjU1PT1EWzBdJiYyNTQ9PURbMV0mJjA9PT1EWzJdJiYwPT09RFszXSYmKFBlPTQpLG90PTQ7UGU8STtQZSs9b3QpKF9lPShEW1BlKzNdPDwyNCkrKERbUGUrMl08''@;'; put 'put ''PDE2KSsoRFtQZSsxXTw8OCkrRFtQZV0pPjY1NTM1PyhfZS09NjU1MzYsdWVbbHQrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisoX2U+PjEwJjEwMjMpKSx1ZVtsdCsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJl9lKSkpOnVlW2x0KytdPVN0cmluZy5mcm9tQ2hhckNv''@;'; put 'put ''ZGUoX2UpO2JyZWFrO2Nhc2UidXRmMzJiZSI6Zm9yKEk+PTQmJjI1NT09RFszXSYmMjU0PT1EWzJdJiYwPT09RFsxXSYmMD09PURbMF0mJihQZT00KSxvdD00O1BlPEk7UGUrPW90KShfZT0oRFtQZV08PDI0KSsoRFtQZSsxXTw8MTYpKyhEW1BlKzJdPDw4KStEW1BlKzNdKT42NTUzNT8oX2Ut''@;'; put 'put ''PTY1NTM2LHVlW2x0KytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKF9lPj4xMCYxMDIzKSksdWVbbHQrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZfZSkpKTp1ZVtsdCsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKF9lKTticmVhaztjYXNlInV0ZjciOmZvcihJPj00JiY0''@;'; put 'put ''Mz09RFswXSYmNDc9PURbMV0mJjExOD09RFsyXSYmKEk+PTUmJjU2PT1EWzNdJiY0NT09RFs0XT9QZT01Oig1Nj09RFszXXx8NTc9PURbM118fDQzPT1EWzNdfHw0Nz09RFszXSkmJihQZT00KSk7UGU8STtQZSs9b3QpaWYoNDM9PT1EW1BlXSlpZihvdD0xLDQ1IT09RFtQZSsxXSl7Zm9yKDtT''@;'; put 'put ''dHJpbmcuZnJvbUNoYXJDb2RlKERbUGUrb3RdKS5tYXRjaCgvW0EtWmEtejAtOStcL10vKTspb3QrKzt2YXIgamU9MDs0NT09PURbUGUrb3RdJiYoKytvdCxqZT0xKTtmb3IodmFyIEFlPVtdLERlPSIiLGhlPTAsd2U9MCxKZT0wLHR0PTAsS2U9MTtLZTxvdC1qZSYmKGhlPXFlLmluZGV4T2Yo''@;'; put 'put ''U3RyaW5nLmZyb21DaGFyQ29kZShEW1BlK0tlKytdKSksd2U9cWUuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKERbUGUrS2UrK10pKSxBZS5wdXNoKGhlPDwyfHdlPj40KSwtMSE9PShKZT1xZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoRFtQZStLZSsrXSkpKSYmKEFlLnB1c2go''@;'; put 'put ''KDE1JndlKTw8NHxKZT4+MiksLTEhPT0odHQ9cWUuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKERbUGUrS2UrK10pKSkpKTspdHQ8NjQmJkFlLnB1c2goKDMmSmUpPDw2fHR0KTtmb3IoRGU9SygxMjAxLEFlKSxLZT0wO0tlPERlLmxlbmd0aDsrK0tlKXVlW2x0KytdPURlLmNoYXJBdChL''@;'; put 'put ''ZSl9ZWxzZSBvdD0yLHVlW2x0KytdPSIrIjtlbHNlIG90PTEsdWVbbHQrK109U3RyaW5nLmZyb21DaGFyQ29kZShEW1BlXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIG1hZ2ljOiAiK0crIiAiK3lbR10pfX1yZXR1cm4gdWUuc2xpY2UoMCxsdCkuam9pbigi''@;'; put 'put ''Iil9LGVuY29kZTpmdW5jdGlvbiBLKEcsRCxwKXtpZihHPT09YiYmZilyZXR1cm4gZihELHApO2lmKFNbR10pcmV0dXJuKGY9U1tiPUddKShELHApO3gmJkJ1ZmZlci5pc0J1ZmZlcihEKSYmKEQ9RC50b1N0cmluZygidXRmOCIpKTt2YXIgZHQsST1ELmxlbmd0aCx1ZT14P0J1ZmZlci5hbGxv''@;'; put 'put ''Y1Vuc2FmZSg0KkkpOltdLG5lPTAsX2U9MCxQZT0wLG90PTAsbHQ9aFtHXSxSZT0iIixhZT0ic3RyaW5nIj09dHlwZW9mIEQ7aWYobHQmJihkdD1sdC5lbmMpKWZvcihfZT0wO19lPEk7KytfZSwrK1BlKShuZT1kdFthZT9ELmNoYXJBdChfZSk6RFtfZV1dKT4yNTU/KHVlW1BlXT1uZT4+OCx1''@;'; put 'put ''ZVsrK1BlXT0yNTUmbmUpOnVlW1BlXT0yNTUmbmU7ZWxzZXtpZighKFJlPXlbR10pKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIENQOiAiK0cpO3N3aXRjaChSZSl7Y2FzZSJ1dGY4IjppZih4JiZhZSl7UGU9KHVlPVUoRCxSZSkpLmxlbmd0aDticmVha31mb3IoX2U9MDtfZTxJOysr''@;'; put 'put ''X2UsKytQZSkobmU9YWU/RC5jaGFyQ29kZUF0KF9lKTpEW19lXS5jaGFyQ29kZUF0KDApKTw9MTI3P3VlW1BlXT1uZTpuZTw9MjA0Nz8odWVbUGVdPTE5MisobmU+PjYpLHVlWysrUGVdPTEyOCsoNjMmbmUpKTpuZT49NTUyOTYmJm5lPD01NzM0Mz8obmUtPTU1Mjk2LG90PShhZT9ELmNoYXJD''@;'; put 'put ''b2RlQXQoKytfZSk6RFsrK19lXS5jaGFyQ29kZUF0KDApKS01NjMyMCsobmU8PDEwKSx1ZVtQZV09MjQwKyhvdD4+PjE4JjcpLHVlWysrUGVdPTE0NCsob3Q+Pj4xMiY2MyksdWVbKytQZV09MTI4KyhvdD4+PjYmNjMpLHVlWysrUGVdPTEyOCsoNjMmb3QpKToodWVbUGVdPTIyNCsobmU+PjEy''@;'; put 'put ''KSx1ZVsrK1BlXT0xMjgrKG5lPj42JjYzKSx1ZVsrK1BlXT0xMjgrKDYzJm5lKSk7YnJlYWs7Y2FzZSJhc2NpaSI6aWYoeCYmInN0cmluZyI9PXR5cGVvZiBEKXtQZT0odWU9VShELFJlKSkubGVuZ3RoO2JyZWFrfWZvcihfZT0wO19lPEk7KytfZSwrK1BlKXtpZighKChuZT1hZT9ELmNoYXJD''@;'; put 'put ''b2RlQXQoX2UpOkRbX2VdLmNoYXJDb2RlQXQoMCkpPD0xMjcpKXRocm93IG5ldyBFcnJvcigiYmFkIGFzY2lpICIrbmUpO3VlW1BlXT1uZX1icmVhaztjYXNlInV0ZjE2bGUiOmlmKHgmJiJzdHJpbmciPT10eXBlb2YgRCl7UGU9KHVlPVUoRCxSZSkpLmxlbmd0aDticmVha31mb3IoX2U9MDtf''@;'; put 'put ''ZTxJOysrX2UpbmU9YWU/RC5jaGFyQ29kZUF0KF9lKTpEW19lXS5jaGFyQ29kZUF0KDApLHVlW1BlKytdPTI1NSZuZSx1ZVtQZSsrXT1uZT4+ODticmVhaztjYXNlInV0ZjE2YmUiOmZvcihfZT0wO19lPEk7KytfZSluZT1hZT9ELmNoYXJDb2RlQXQoX2UpOkRbX2VdLmNoYXJDb2RlQXQoMCks''@;'; put 'put ''dWVbUGUrK109bmU+PjgsdWVbUGUrK109MjU1Jm5lO2JyZWFrO2Nhc2UidXRmMzJsZSI6Zm9yKF9lPTA7X2U8STsrK19lKShuZT1hZT9ELmNoYXJDb2RlQXQoX2UpOkRbX2VdLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmbmU8PTU3MzQzJiYobmU9NjU1MzYrKG5lLTU1Mjk2PDwxMCkrKERbKytf''@;'; put 'put ''ZV0uY2hhckNvZGVBdCgwKS01NjMyMCkpLHVlW1BlKytdPTI1NSZuZSx1ZVtQZSsrXT0yNTUmKG5lPj49OCksdWVbUGUrK109MjU1JihuZT4+PTgpLHVlW1BlKytdPTI1NSYobmU+Pj04KTticmVhaztjYXNlInV0ZjMyYmUiOmZvcihfZT0wO19lPEk7KytfZSkobmU9YWU/RC5jaGFyQ29kZUF0''@;'; put 'put ''KF9lKTpEW19lXS5jaGFyQ29kZUF0KDApKT49NTUyOTYmJm5lPD01NzM0MyYmKG5lPTY1NTM2KyhuZS01NTI5Njw8MTApKyhEWysrX2VdLmNoYXJDb2RlQXQoMCktNTYzMjApKSx1ZVtQZSszXT0yNTUmbmUsdWVbUGUrMl09MjU1JihuZT4+PTgpLHVlW1BlKzFdPTI1NSYobmU+Pj04KSx1ZVtQ''@;'; put 'put ''ZV09MjU1JihuZT4+PTgpLFBlKz00O2JyZWFrO2Nhc2UidXRmNyI6Zm9yKF9lPTA7X2U8STtfZSsrKXt2YXIgeGU9YWU/RC5jaGFyQXQoX2UpOkRbX2VdLmNoYXJBdCgwKTtpZigiKyIhPT14ZSlpZigiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5''@;'; put 'put ''ejAxMjM0NTY3ODknKCksLS4vOj8iLmluZGV4T2YoeGUpPi0xKXVlW1BlKytdPXhlLmNoYXJDb2RlQXQoMCk7ZWxzZXt2YXIgamU9SygxMjAxLHhlKTt1ZVtQZSsrXT00Myx1ZVtQZSsrXT1xZS5jaGFyQ29kZUF0KGplWzBdPj4yKSx1ZVtQZSsrXT1xZS5jaGFyQ29kZUF0KCgoMyZqZVswXSk8''@;'; put 'put ''PDQpKygoamVbMV18fDApPj40KSksdWVbUGUrK109cWUuY2hhckNvZGVBdCgoKDE1JmplWzFdKTw8MikrKChqZVsyXXx8MCk+PjYpKSx1ZVtQZSsrXT00NX1lbHNlIHVlW1BlKytdPTQzLHVlW1BlKytdPTQ1fWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBtYWdp''@;'; put 'put ''YzogIitHKyIgIit5W0ddKX19cmV0dXJuIHVlPXVlLnNsaWNlKDAsUGUpLHg/cCYmImJ1ZiIhPT1wPyJhcnIiIT09cD91ZS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbCh1ZSk6dWU6InN0ciI9PXA/dWUubWFwKEwpLmpvaW4oIiIpOnVlfSxoYXNjcDpmdW5jdGlvbihHKXtyZXR1''@;'; put 'put ''cm4hKCFoW0ddJiYheVtHXSl9LG1hZ2ljOnksY2FjaGU6a2V9LGh9KX0sMzE3OShmZSxqKXt2YXIgaCx5LGM7IWZ1bmN0aW9uKHMpe2lmKHR5cGVvZiBET19OT1RfRVhQT1JUX0pTWklQPiJ1IilmZS5leHBvcnRzPXMoKTtlbHNlIGlmKHR5cGVvZiBET19OT1RfRVhQT1JUX0pTWklQPiJ1IilK''@;'; put 'put ''U1ppcFN5bmM9cygpLHk9W10sdm9pZCAwIT09KGM9ImZ1bmN0aW9uIj09dHlwZW9mKGg9cyk/aC5hcHBseShqLHkpOmgpJiYoZmUuZXhwb3J0cz1jKTtlbHNle3ZhciBBO3R5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9BPWdsb2JhbFRoaXM6dHlwZW9mIHdpbmRvdzwidSI/QT13aW5kb3c6dHlwZW9m''@;'; put 'put ''IGdsb2JhbDwidSI/QT1nbG9iYWw6dHlwZW9mICQ8InUiJiYkLmdsb2JhbD9BPSQuZ2xvYmFsOnR5cGVvZiBzZWxmPCJ1IiYmKEE9c2VsZiksQS5KU1ppcFN5bmM9cygpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gQyh3LFMsTCl7ZnVuY3Rpb24gUihILFYpe2lmKCFTW0hdKXtpZigh''@;'; put 'put ''d1tIXSl7aWYoeClyZXR1cm4geChILCEwKTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitIKyInIil9dmFyIHo9U1tIXT17ZXhwb3J0czp7fX07d1tIXVswXS5jYWxsKHouZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4gUih3W0hdWzFdW1ldfHxZKX0seix6LmV4cG9y''@;'; put 'put ''dHMsQyx3LFMsTCl9cmV0dXJuIFNbSF0uZXhwb3J0c31mb3IodmFyIHg9dm9pZCAwLFU9MDtVPEwubGVuZ3RoO1UrKylSKExbVV0pO3JldHVybiBSfSh7MTpbZnVuY3Rpb24oQyx3LFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgTD0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xt''@;'; put 'put ''bm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iO1MuZW5jb2RlPWZ1bmN0aW9uKFIseCl7Zm9yKHZhciBILFYsTix6LFksRixXLFU9IiIscT0wO3E8Ui5sZW5ndGg7KXo9KEg9Ui5jaGFyQ29kZUF0KHErKykpPj4yLFk9KDMmSCk8PDR8KFY9Ui5jaGFyQ29kZUF0KHErKykpPj40LEY9KDE1JlYp''@;'; put 'put ''PDwyfChOPVIuY2hhckNvZGVBdChxKyspKT4+NixXPTYzJk4saXNOYU4oVik/Rj1XPTY0OmlzTmFOKE4pJiYoVz02NCksVT1VK0wuY2hhckF0KHopK0wuY2hhckF0KFkpK0wuY2hhckF0KEYpK0wuY2hhckF0KFcpO3JldHVybiBVfSxTLmRlY29kZT1mdW5jdGlvbihSLHgpe3ZhciBWLE4seixZ''@;'; put 'put ''LEYsVyxVPSIiLHE9MDtmb3IoUj1SLnJlcGxhY2UoL1teQS1aYS16MC05XCtcL1w9XS9nLCIiKTtxPFIubGVuZ3RoOyl6PUwuaW5kZXhPZihSLmNoYXJBdChxKyspKSxWPSgxNSYoWT1MLmluZGV4T2YoUi5jaGFyQXQocSsrKSkpKTw8NHwoRj1MLmluZGV4T2YoUi5jaGFyQXQocSsrKSkpPj4y''@;'; put 'put ''LE49KDMmRik8PDZ8KFc9TC5pbmRleE9mKFIuY2hhckF0KHErKykpKSxVKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHo8PDJ8WT4+NCksNjQhPUYmJihVKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFYpKSw2NCE9VyYmKFUrPVN0cmluZy5mcm9tQ2hhckNvZGUoTikpO3JldHVybiBVfX0se31dLDI6W2Z1''@;'; put 'put ''bmN0aW9uKEMsdyxTKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gTCgpe3RoaXMuY29tcHJlc3NlZFNpemU9MCx0aGlzLnVuY29tcHJlc3NlZFNpemU9MCx0aGlzLmNyYzMyPTAsdGhpcy5jb21wcmVzc2lvbk1ldGhvZD1udWxsLHRoaXMuY29tcHJlc3NlZENvbnRlbnQ9bnVsbH1MLnByb3RvdHlw''@;'; put 'put ''ZT17Z2V0Q29udGVudDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxnZXRDb21wcmVzc2VkQ29udGVudDpmdW5jdGlvbigpe3JldHVybiBudWxsfX0sdy5leHBvcnRzPUx9LHt9XSwzOltmdW5jdGlvbihDLHcsUyl7InVzZSBzdHJpY3QiO1MuU1RPUkU9e21hZ2ljOiJcMFwwIixjb21wcmVzczpm''@;'; put 'put ''dW5jdGlvbihMKXtyZXR1cm4gTH0sdW5jb21wcmVzczpmdW5jdGlvbihMKXtyZXR1cm4gTH0sY29tcHJlc3NJbnB1dFR5cGU6bnVsbCx1bmNvbXByZXNzSW5wdXRUeXBlOm51bGx9LFMuREVGTEFURT1DKCIuL2ZsYXRlIil9LHsiLi9mbGF0ZSI6OH1dLDQ6W2Z1bmN0aW9uKEMsdyxTKXsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIEw9QygiLi91dGlscyIpLFI9WzAsMTk5Njk1OTg5NCwzOTkzOTE5Nzg4LDI1Njc1MjQ3OTQsMTI0NjM0MTM3LDE4ODYwNTc2MTUsMzkxNTYyMTY4NSwyNjU3MzkyMDM1LDI0OTI2ODI3NCwyMDQ0NTA4MzI0LDM3NzIxMTUyMzAsMjU0NzE3Nzg2NCwxNjI5NDE5OTUsMjEy''@;'; put 'put ''NTU2MTAyMSwzODg3NjA3MDQ3LDI0Mjg0NDQwNDksNDk4NTM2NTQ4LDE3ODk5Mjc2NjYsNDA4OTAxNjY0OCwyMjI3MDYxMjE0LDQ1MDU0ODg2MSwxODQzMjU4NjAzLDQxMDc1ODA3NTMsMjIxMTY3NzYzOSwzMjU4ODM5OTAsMTY4NDc3NzE1Miw0MjUxMTIyMDQyLDIzMjE5MjY2MzYsMzM1NjMz''@;'; put 'put ''NDg3LDE2NjEzNjU0NjUsNDE5NTMwMjc1NSwyMzY2MTE1MzE3LDk5NzA3MzA5NiwxMjgxOTUzODg2LDM1Nzk4NTUzMzIsMjcyNDY4ODI0MiwxMDA2ODg4MTQ1LDEyNTg2MDc2ODcsMzUyNDEwMTYyOSwyNzY4OTQyNDQzLDkwMTA5NzcyMiwxMTE5MDAwNjg0LDM2ODY1MTcyMDYsMjg5ODA2NTcy''@;'; put 'put ''OCw4NTMwNDQ0NTEsMTE3MjI2NjEwMSwzNzA1MDE1NzU5LDI4ODI2MTY2NjUsNjUxNzY3OTgwLDEzNzM1MDM1NDYsMzM2OTU1NDMwNCwzMjE4MTA0NTk4LDU2NTUwNzI1MywxNDU0NjIxNzMxLDM0ODUxMTE3MDUsMzA5OTQzNjMwMyw2NzEyNjY5NzQsMTU5NDE5ODAyNCwzMzIyNzMwOTMwLDI5''@;'; put 'put ''NzAzNDc4MTIsNzk1ODM1NTI3LDE0ODMyMzAyMjUsMzI0NDM2NzI3NSwzMDYwMTQ5NTY1LDE5OTQxNDYxOTIsMzExNTg1MzQsMjU2MzkwNzc3Miw0MDIzNzE3OTMwLDE5MDc0NTk0NjUsMTEyNjM3MjE1LDI2ODAxNTMyNTMsMzkwNDQyNzA1OSwyMDEzNzc2MjkwLDI1MTcyMjAzNiwyNTE3MjE1''@;'; put 'put ''Mzc0LDM3NzU4MzAwNDAsMjEzNzY1Njc2MywxNDEzNzY4MTMsMjQzOTI3NzcxOSwzODY1MjcxMjk3LDE4MDIxOTU0NDQsNDc2ODY0ODY2LDIyMzgwMDEzNjgsNDA2NjUwODg3OCwxODEyMzcwOTI1LDQ1MzA5MjczMSwyMTgxNjI1MDI1LDQxMTE0NTEyMjMsMTcwNjA4ODkwMiwzMTQwNDI3MDQs''@;'; put 'put ''MjM0NDUzMjIwMiw0MjQwMDE3NTMyLDE2NTg2NTgyNzEsMzY2NjE5OTc3LDIzNjI2NzAzMjMsNDIyNDk5NDQwNSwxMzAzNTM1OTYwLDk4NDk2MTQ4NiwyNzQ3MDA3MDkyLDM1NjkwMzc1MzgsMTI1NjE3MDgxNywxMDM3NjA0MzExLDI3NjUyMTA3MzMsMzU1NDA3OTk5NSwxMTMxMDE0NTA2LDg3''@;'; put 'put ''OTY3OTk5NiwyOTA5MjQzNDYyLDM2NjM3NzE4NTYsMTE0MTEyNDQ2Nyw4NTU4NDIyNzcsMjg1MjgwMTYzMSwzNzA4NjQ4NjQ5LDEzNDI1MzM5NDgsNjU0NDU5MzA2LDMxODgzOTYwNDgsMzM3MzAxNTE3NCwxNDY2NDc5OTA5LDU0NDE3OTYzNSwzMTEwNTIzOTEzLDM0NjI1MjIwMTUsMTU5MTY3''@;'; put 'put ''MTA1NCw3MDIxMzg3NzYsMjk2NjQ2MDQ1MCwzMzUyNzk5NDEyLDE1MDQ5MTg4MDcsNzgzNTUxODczLDMwODI2NDA0NDMsMzIzMzQ0Mjk4OSwzOTg4MjkyMzg0LDI1OTYyNTQ2NDYsNjIzMTcwNjgsMTk1NzgxMDg0MiwzOTM5ODQ1OTQ1LDI2NDc4MTYxMTEsODE0NzA5OTcsMTk0MzgwMzUyMywz''@;'; put 'put ''ODE0OTE4OTMwLDI0ODk1OTY4MDQsMjI1Mjc0NDMwLDIwNTM3OTAzNzYsMzgyNjE3NTc1NSwyNDY2OTA2MDEzLDE2NzgxNjc0MywyMDk3NjUxMzc3LDQwMjc1NTI1ODAsMjI2NTQ5MDM4Niw1MDM0NDQwNzIsMTc2MjA1MDgxNCw0MTUwNDE3MjQ1LDIxNTQxMjkzNTUsNDI2NTIyMjI1LDE4NTI1''@;'; put 'put ''MDc4NzksNDI3NTMxMzUyNiwyMzEyMzE3OTIwLDI4Mjc1MzYyNiwxNzQyNTU1ODUyLDQxODk3MDgxNDMsMjM5NDg3Nzk0NSwzOTc5MTc3NjMsMTYyMjE4MzYzNywzNjA0MzkwODg4LDI3MTQ4NjY1NTgsOTUzNzI5NzMyLDEzNDAwNzY2MjYsMzUxODcxOTk4NSwyNzk3MzYwOTk5LDEwNjg4Mjgz''@;'; put 'put ''ODEsMTIxOTYzODg1OSwzNjI0NzQxODUwLDI5MzY2NzUxNDgsOTA2MTg1NDYyLDEwOTA4MTI1MTIsMzc0NzY3MjAwMywyODI1Mzc5NjY5LDgyOTMyOTEzNSwxMTgxMzM1MTYxLDM0MTIxNzc4MDQsMzE2MDgzNDg0Miw2MjgwODU0MDgsMTM4MjYwNTM2NiwzNDIzMzY5MTA5LDMxMzgwNzg0Njcs''@;'; put 'put ''NTcwNTYyMjMzLDE0MjY0MDA4MTUsMzMxNzMxNjU0MiwyOTk4NzMzNjA4LDczMzIzOTk1NCwxNTU1MjYxOTU2LDMyNjg5MzU1OTEsMzA1MDM2MDYyNSw3NTI0NTk0MDMsMTU0MTMyMDIyMSwyNjA3MDcxOTIwLDM5NjU5NzMwMzAsMTk2OTkyMjk3Miw0MDczNTQ5OCwyNjE3ODM3MjI1LDM5NDM1''@;'; put 'put ''NzcxNTEsMTkxMzA4Nzg3Nyw4MzkwODM3MSwyNTEyMzQxNjM0LDM4MDM3NDA2OTIsMjA3NTIwODYyMiwyMTMyNjExMTIsMjQ2MzI3MjYwMywzODU1OTkwMjg1LDIwOTQ4NTQwNzEsMTk4OTU4ODgxLDIyNjIwMjkwMTIsNDA1NzI2MDYxMCwxNzU5MzU5OTkyLDUzNDQxNDE5MCwyMTc2NzE4NTQx''@;'; put 'put ''LDQxMzkzMjkxMTUsMTg3MzgzNjAwMSw0MTQ2NjQ1NjcsMjI4MjI0ODkzNCw0Mjc5MjAwMzY4LDE3MTE2ODQ1NTQsMjg1MjgxMTE2LDI0MDU4MDE3MjcsNDE2NzIxNjc0NSwxNjM0NDY3Nzk1LDM3NjIyOTcwMSwyNjg1MDY3ODk2LDM2MDgwMDc0MDYsMTMwODkxODYxMiw5NTY1NDM5MzgsMjgw''@;'; put 'put ''ODU1NTEwNSwzNDk1OTU4MjYzLDEyMzE2MzYzMDEsMTA0NzQyNzAzNSwyOTMyOTU5ODE4LDM2NTQ3MDM4MzYsMTA4ODM1OTI3MCw5MzY5MThlMywyODQ3NzE0ODk5LDM3MzY4Mzc4MjksMTIwMjkwMDg2Myw4MTcyMzM4OTcsMzE4MzM0MjEwOCwzNDAxMjM3MTMwLDE0MDQyNzc1NTIsNjE1ODE4''@;'; put 'put ''MTUwLDMxMzQyMDc0OTMsMzQ1MzQyMTIwMywxNDIzODU3NDQ5LDYwMTQ1MDQzMSwzMDA5ODM3NjE0LDMyOTQ3MTA0NTYsMTU2NzEwMzc0Niw3MTE5Mjg3MjQsMzAyMDY2ODQ3MSwzMjcyMzgwMDY1LDE1MTAzMzQyMzUsNzU1MTY3MTE3XTt3LmV4cG9ydHM9ZnVuY3Rpb24oVSxIKXtpZih0eXBl''@;'; put 'put ''b2YgVT4idSJ8fCFVLmxlbmd0aClyZXR1cm4gMDt2YXIgVj0ic3RyaW5nIiE9PUwuZ2V0VHlwZU9mKFUpO3R5cGVvZiBIPiJ1IiYmKEg9MCk7dmFyIFk9MDtIXj0tMTtmb3IodmFyIEY9MCxXPVUubGVuZ3RoO0Y8VztGKyspWT1WP1VbRl06VS5jaGFyQ29kZUF0KEYpLEg9SD4+PjheUlsyNTUm''@;'; put 'put ''KEheWSldO3JldHVybi0xXkh9fSx7Ii4vdXRpbHMiOjIxfV0sNTpbZnVuY3Rpb24oQyx3LFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgTD1DKCIuL3V0aWxzIik7ZnVuY3Rpb24gUih4KXt0aGlzLmRhdGE9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMuaW5kZXg9MH1SLnByb3RvdHlwZT17Y2hlY2tPZmZz''@;'; put 'put ''ZXQ6ZnVuY3Rpb24oeCl7dGhpcy5jaGVja0luZGV4KHRoaXMuaW5kZXgreCl9LGNoZWNrSW5kZXg6ZnVuY3Rpb24oeCl7aWYodGhpcy5sZW5ndGg8eHx8eDwwKXRocm93IG5ldyBFcnJvcigiRW5kIG9mIGRhdGEgcmVhY2hlZCAoZGF0YSBsZW5ndGggPSAiK3RoaXMubGVuZ3RoKyIsIGFza2Vk''@;'; put 'put ''IGluZGV4ID0gIit4KyIpLiBDb3JydXB0ZWQgemlwID8iKX0sc2V0SW5kZXg6ZnVuY3Rpb24oeCl7dGhpcy5jaGVja0luZGV4KHgpLHRoaXMuaW5kZXg9eH0sc2tpcDpmdW5jdGlvbih4KXt0aGlzLnNldEluZGV4KHRoaXMuaW5kZXgreCl9LGJ5dGVBdDpmdW5jdGlvbih4KXt9LHJlYWRJbnQ6''@;'; put 'put ''ZnVuY3Rpb24oeCl7dmFyIEgsVT0wO2Zvcih0aGlzLmNoZWNrT2Zmc2V0KHgpLEg9dGhpcy5pbmRleCt4LTE7SD49dGhpcy5pbmRleDtILS0pVT0oVTw8OCkrdGhpcy5ieXRlQXQoSCk7cmV0dXJuIHRoaXMuaW5kZXgrPXgsVX0scmVhZFN0cmluZzpmdW5jdGlvbih4KXtyZXR1cm4gTC50cmFu''@;'; put 'put ''c2Zvcm1Ubygic3RyaW5nIix0aGlzLnJlYWREYXRhKHgpKX0scmVhZERhdGE6ZnVuY3Rpb24oeCl7fSxsYXN0SW5kZXhPZlNpZ25hdHVyZTpmdW5jdGlvbih4KXt9LHJlYWREYXRlOmZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5yZWFkSW50KDQpO3JldHVybiBuZXcgRGF0ZSgxOTgwKyh4Pj4yNSYx''@;'; put 'put ''MjcpLCh4Pj4yMSYxNSktMSx4Pj4xNiYzMSx4Pj4xMSYzMSx4Pj41JjYzLCgzMSZ4KTw8MSl9fSx3LmV4cG9ydHM9Un0seyIuL3V0aWxzIjoyMX1dLDY6W2Z1bmN0aW9uKEMsdyxTKXsidXNlIHN0cmljdCI7Uy5iYXNlNjQ9ITEsUy5iaW5hcnk9ITEsUy5kaXI9ITEsUy5jcmVhdGVGb2xkZXJz''@;'; put 'put ''PSExLFMuZGF0ZT1udWxsLFMuY29tcHJlc3Npb249bnVsbCxTLmNvbW1lbnQ9bnVsbH0se31dLDc6W2Z1bmN0aW9uKEMsdyxTKXsidXNlIHN0cmljdCI7dmFyIEw9QygiLi91dGlscyIpO1Muc3RyaW5nMmJpbmFyeT1mdW5jdGlvbihSKXtyZXR1cm4gTC5zdHJpbmcyYmluYXJ5KFIpfSxTLnN0''@;'; put 'put ''cmluZzJVaW50OEFycmF5PWZ1bmN0aW9uKFIpe3JldHVybiBMLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixSKX0sUy51aW50OEFycmF5MlN0cmluZz1mdW5jdGlvbihSKXtyZXR1cm4gTC50cmFuc2Zvcm1Ubygic3RyaW5nIixSKX0sUy5zdHJpbmcyQmxvYj1mdW5jdGlvbihSKXt2YXIgeD1M''@;'; put 'put ''LnRyYW5zZm9ybVRvKCJhcnJheWJ1ZmZlciIsUik7cmV0dXJuIEwuYXJyYXlCdWZmZXIyQmxvYih4KX0sUy5hcnJheUJ1ZmZlcjJCbG9iPWZ1bmN0aW9uKFIpe3JldHVybiBMLmFycmF5QnVmZmVyMkJsb2IoUil9LFMudHJhbnNmb3JtVG89ZnVuY3Rpb24oUix4KXtyZXR1cm4gTC50cmFuc2Zv''@;'; put 'put ''cm1UbyhSLHgpfSxTLmdldFR5cGVPZj1mdW5jdGlvbihSKXtyZXR1cm4gTC5nZXRUeXBlT2YoUil9LFMuY2hlY2tTdXBwb3J0PWZ1bmN0aW9uKFIpe3JldHVybiBMLmNoZWNrU3VwcG9ydChSKX0sUy5NQVhfVkFMVUVfMTZCSVRTPUwuTUFYX1ZBTFVFXzE2QklUUyxTLk1BWF9WQUxVRV8zMkJJ''@;'; put 'put ''VFM9TC5NQVhfVkFMVUVfMzJCSVRTLFMucHJldHR5PWZ1bmN0aW9uKFIpe3JldHVybiBMLnByZXR0eShSKX0sUy5maW5kQ29tcHJlc3Npb249ZnVuY3Rpb24oUil7cmV0dXJuIEwuZmluZENvbXByZXNzaW9uKFIpfSxTLmlzUmVnRXhwPWZ1bmN0aW9uKFIpe3JldHVybiBMLmlzUmVnRXhwKFIp''@;'; put 'put ''fX0seyIuL3V0aWxzIjoyMX1dLDg6W2Z1bmN0aW9uKEMsdyxTKXsidXNlIHN0cmljdCI7dmFyIEw9dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ0eXBlb2YgVWludDE2QXJyYXk8InUiJiZ0eXBlb2YgVWludDMyQXJyYXk8InUiLFI9QygicGFrbyIpO1MudW5jb21wcmVzc0lucHV0VHlwZT1MPyJ1''@;'; put 'put ''aW50OGFycmF5IjoiYXJyYXkiLFMuY29tcHJlc3NJbnB1dFR5cGU9TD8idWludDhhcnJheSI6ImFycmF5IixTLm1hZ2ljPSJcYlwwIixTLmNvbXByZXNzPWZ1bmN0aW9uKHgpe3JldHVybiBSLmRlZmxhdGVSYXcoeCl9LFMudW5jb21wcmVzcz1mdW5jdGlvbih4KXtyZXR1cm4gUi5pbmZsYXRl''@;'; put 'put ''UmF3KHgpfX0se3Bha286MjR9XSw5OltmdW5jdGlvbihDLHcsUyl7InVzZSBzdHJpY3QiO3ZhciBMPUMoIi4vYmFzZTY0Iik7ZnVuY3Rpb24gUih4LFUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFIpKXJldHVybiBuZXcgUih4LFUpO3RoaXMuZmlsZXM9e30sdGhpcy5jb21tZW50PW51bGwsdGhp''@;'; put 'put ''cy5yb290PSIiLHgmJnRoaXMubG9hZCh4LFUpLHRoaXMuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgSD1uZXcgUjtmb3IodmFyIFYgaW4gdGhpcykiZnVuY3Rpb24iIT10eXBlb2YgdGhpc1tWXSYmKEhbVl09dGhpc1tWXSk7cmV0dXJuIEh9fShSLnByb3RvdHlwZT1DKCIuL29iamVjdCIpKS5sb2Fk''@;'; put 'put ''PUMoIi4vbG9hZCIpLFIuc3VwcG9ydD1DKCIuL3N1cHBvcnQiKSxSLmRlZmF1bHRzPUMoIi4vZGVmYXVsdHMiKSxSLnV0aWxzPUMoIi4vZGVwcmVjYXRlZFB1YmxpY1V0aWxzIiksUi5iYXNlNjQ9e2VuY29kZTpmdW5jdGlvbih4KXtyZXR1cm4gTC5lbmNvZGUoeCl9LGRlY29kZTpmdW5jdGlv''@;'; put 'put ''bih4KXtyZXR1cm4gTC5kZWNvZGUoeCl9fSxSLmNvbXByZXNzaW9ucz1DKCIuL2NvbXByZXNzaW9ucyIpLHcuZXhwb3J0cz1SfSx7Ii4vYmFzZTY0IjoxLCIuL2NvbXByZXNzaW9ucyI6MywiLi9kZWZhdWx0cyI6NiwiLi9kZXByZWNhdGVkUHVibGljVXRpbHMiOjcsIi4vbG9hZCI6MTAsIi4v''@;'; put 'put ''b2JqZWN0IjoxMywiLi9zdXBwb3J0IjoxN31dLDEwOltmdW5jdGlvbihDLHcsUyl7InVzZSBzdHJpY3QiO3ZhciBMPUMoIi4vYmFzZTY0IiksUj1DKCIuL3ppcEVudHJpZXMiKTt3LmV4cG9ydHM9ZnVuY3Rpb24oeCxVKXt2YXIgSCxWLE4sejtmb3IoKFU9VXx8e30pLmJhc2U2NCYmKHg9TC5k''@;'; put 'put ''ZWNvZGUoeCkpLEg9KFY9bmV3IFIoeCxVKSkuZmlsZXMsTj0wO048SC5sZW5ndGg7TisrKXRoaXMuZmlsZSgoej1IW05dKS5maWxlTmFtZSx6LmRlY29tcHJlc3NlZCx7YmluYXJ5OiEwLG9wdGltaXplZEJpbmFyeVN0cmluZzohMCxkYXRlOnouZGF0ZSxkaXI6ei5kaXIsY29tbWVudDp6LmZp''@;'; put 'put ''bGVDb21tZW50Lmxlbmd0aD96LmZpbGVDb21tZW50Om51bGwsY3JlYXRlRm9sZGVyczpVLmNyZWF0ZUZvbGRlcnN9KTtyZXR1cm4gVi56aXBDb21tZW50Lmxlbmd0aCYmKHRoaXMuY29tbWVudD1WLnppcENvbW1lbnQpLHRoaXN9fSx7Ii4vYmFzZTY0IjoxLCIuL3ppcEVudHJpZXMiOjIyfV0s''@;'; put 'put ''MTE6W2Z1bmN0aW9uKEMsdyxTKXsoZnVuY3Rpb24oTCl7InVzZSBzdHJpY3QiO3ZhciBSPWZ1bmN0aW9uKCl7fTtpZih0eXBlb2YgTDwidSIpe3ZhciB4PSFMLmZyb207aWYoIXgpdHJ5e0wuZnJvbSgiZm9vIiwidXRmOCIpfWNhdGNoe3g9ITB9Uj14P2Z1bmN0aW9uKFUsSCl7cmV0dXJuIEg/''@;'; put 'put ''bmV3IEwoVSxIKTpuZXcgTChVKX06TC5mcm9tLmJpbmQoTCksTC5hbGxvY3x8KEwuYWxsb2M9ZnVuY3Rpb24oVSl7cmV0dXJuIG5ldyBMKFUpfSl9dy5leHBvcnRzPWZ1bmN0aW9uKFUsSCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBVP0wuYWxsb2MoVSk6UihVLEgpfSx3LmV4cG9ydHMudGVz''@;'; put 'put ''dD1mdW5jdGlvbihVKXtyZXR1cm4gTC5pc0J1ZmZlcihVKX19KS5jYWxsKHRoaXMsdHlwZW9mIEJ1ZmZlcjwidSI/QnVmZmVyOnZvaWQgMCl9LHt9XSwxMjpbZnVuY3Rpb24oQyx3LFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgTD1DKCIuL3VpbnQ4QXJyYXlSZWFkZXIiKTtmdW5jdGlvbiBSKHgpe3Ro''@;'; put 'put ''aXMuZGF0YT14LHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRleD0wfShSLnByb3RvdHlwZT1uZXcgTCkucmVhZERhdGE9ZnVuY3Rpb24oeCl7dGhpcy5jaGVja09mZnNldCh4KTt2YXIgVT10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRleCx0aGlzLmluZGV4K3gpO3JldHVy''@;'; put 'put ''biB0aGlzLmluZGV4Kz14LFV9LHcuZXhwb3J0cz1SfSx7Ii4vdWludDhBcnJheVJlYWRlciI6MTh9XSwxMzpbZnVuY3Rpb24oQyx3LFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgTD1DKCIuL3N1cHBvcnQiKSxSPUMoIi4vdXRpbHMiKSx4PUMoIi4vY3JjMzIiKSxVPUMoIi4vc2lnbmF0dXJlIiksSD1D''@;'; put 'put ''KCIuL2RlZmF1bHRzIiksVj1DKCIuL2Jhc2U2NCIpLE49QygiLi9jb21wcmVzc2lvbnMiKSx6PUMoIi4vY29tcHJlc3NlZE9iamVjdCIpLFk9QygiLi9ub2RlQnVmZmVyIiksRj1DKCIuL3V0ZjgiKSxXPUMoIi4vc3RyaW5nV3JpdGVyIikscT1DKCIuL3VpbnQ4QXJyYXlXcml0ZXIiKSxyZT1m''@;'; put 'put ''dW5jdGlvbihHKXtpZihHLl9kYXRhIGluc3RhbmNlb2YgeiYmKEcuX2RhdGE9Ry5fZGF0YS5nZXRDb250ZW50KCksRy5vcHRpb25zLmJpbmFyeT0hMCxHLm9wdGlvbnMuYmFzZTY0PSExLCJ1aW50OGFycmF5Ij09PVIuZ2V0VHlwZU9mKEcuX2RhdGEpKSl7dmFyIEQ9Ry5fZGF0YTtHLl9kYXRh''@;'; put 'put ''PW5ldyBVaW50OEFycmF5KEQubGVuZ3RoKSwwIT09RC5sZW5ndGgmJkcuX2RhdGEuc2V0KEQsMCl9cmV0dXJuIEcuX2RhdGF9LG1lPWZ1bmN0aW9uKEcpe3ZhciBEPXJlKEcpO3JldHVybiJzdHJpbmciPT09Ui5nZXRUeXBlT2YoRCk/IUcub3B0aW9ucy5iaW5hcnkmJkwubm9kZWJ1ZmZlcj9Z''@;'; put 'put ''KEQsInV0Zi04Iik6Ry5hc0JpbmFyeSgpOkR9LENlPWZ1bmN0aW9uKEcpe3ZhciBEPXJlKHRoaXMpO3JldHVybiBudWxsPT09RHx8dHlwZW9mIEQ+InUiPyIiOih0aGlzLm9wdGlvbnMuYmFzZTY0JiYoRD1WLmRlY29kZShEKSksRD1HJiZ0aGlzLm9wdGlvbnMuYmluYXJ5P0sudXRmOGRlY29k''@;'; put 'put ''ZShEKTpSLnRyYW5zZm9ybVRvKCJzdHJpbmciLEQpLCFHJiYhdGhpcy5vcHRpb25zLmJpbmFyeSYmKEQ9Ui50cmFuc2Zvcm1Ubygic3RyaW5nIixLLnV0ZjhlbmNvZGUoRCkpKSxEKX0sSWU9ZnVuY3Rpb24oRyxELHApe3RoaXMubmFtZT1HLHRoaXMuZGlyPXAuZGlyLHRoaXMuZGF0ZT1wLmRh''@;'; put 'put ''dGUsdGhpcy5jb21tZW50PXAuY29tbWVudCx0aGlzLl9kYXRhPUQsdGhpcy5vcHRpb25zPXAsdGhpcy5faW5pdGlhbE1ldGFkYXRhPXtkaXI6cC5kaXIsZGF0ZTpwLmRhdGV9fTtJZS5wcm90b3R5cGU9e2FzVGV4dDpmdW5jdGlvbigpe3JldHVybiBDZS5jYWxsKHRoaXMsITApfSxhc0JpbmFy''@;'; put 'put ''eTpmdW5jdGlvbigpe3JldHVybiBDZS5jYWxsKHRoaXMsITEpfSxhc05vZGVCdWZmZXI6ZnVuY3Rpb24oKXt2YXIgRz1tZSh0aGlzKTtyZXR1cm4gUi50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIsRyl9LGFzVWludDhBcnJheTpmdW5jdGlvbigpe3ZhciBHPW1lKHRoaXMpO3JldHVybiBSLnRy''@;'; put 'put ''YW5zZm9ybVRvKCJ1aW50OGFycmF5IixHKX0sYXNBcnJheUJ1ZmZlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFzVWludDhBcnJheSgpLmJ1ZmZlcn19O3ZhciBrZT1mdW5jdGlvbihHLEQpe3ZhciBJLHA9IiI7Zm9yKEk9MDtJPEQ7SSsrKXArPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1Jkcp''@;'; put 'put ''LEc+Pj49ODtyZXR1cm4gcH0scWU9ZnVuY3Rpb24oKXt2YXIgRCxwLEc9e307Zm9yKEQ9MDtEPGFyZ3VtZW50cy5sZW5ndGg7RCsrKWZvcihwIGluIGFyZ3VtZW50c1tEXSlhcmd1bWVudHNbRF0uaGFzT3duUHJvcGVydHkocCkmJnR5cGVvZiBHW3BdPiJ1IiYmKEdbcF09YXJndW1lbnRzW0Rd''@;'; put 'put ''W3BdKTtyZXR1cm4gR30sZj1mdW5jdGlvbihHLEQscCl7dmFyIHVlLEk9Ui5nZXRUeXBlT2YoRCk7aWYocD1mdW5jdGlvbihHKXtyZXR1cm4hMD09PShHPUd8fHt9KS5iYXNlNjQmJm51bGw9PUcuYmluYXJ5JiYoRy5iaW5hcnk9ITApLChHPXFlKEcsSCkpLmRhdGU9Ry5kYXRlfHxuZXcgRGF0''@;'; put 'put ''ZSxudWxsIT09Ry5jb21wcmVzc2lvbiYmKEcuY29tcHJlc3Npb249Ry5jb21wcmVzc2lvbi50b1VwcGVyQ2FzZSgpKSxHfShwKSxwLmNyZWF0ZUZvbGRlcnMmJih1ZT1iKEcpKSYmay5jYWxsKHRoaXMsdWUsITApLHAuZGlyfHxudWxsPT09RHx8dHlwZW9mIEQ+InUiKXAuYmFzZTY0PSExLHAu''@;'; put 'put ''YmluYXJ5PSExLEQ9bnVsbDtlbHNlIGlmKCJzdHJpbmciPT09SSlwLmJpbmFyeSYmIXAuYmFzZTY0JiYhMCE9PXAub3B0aW1pemVkQmluYXJ5U3RyaW5nJiYoRD1SLnN0cmluZzJiaW5hcnkoRCkpO2Vsc2V7aWYocC5iYXNlNjQ9ITEscC5iaW5hcnk9ITAsIShJfHxEIGluc3RhbmNlb2Ygeikp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJUaGUgZGF0YSBvZiAnIitHKyInIGlzIGluIGFuIHVuc3VwcG9ydGVkIGZvcm1hdCAhIik7ImFycmF5YnVmZmVyIj09PUkmJihEPVIudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLEQpKX12YXIgbmU9bmV3IEllKEcsRCxwKTtyZXR1cm4gdGhpcy5maWxlc1tHXT1u''@;'; put 'put ''ZSxuZX0sYj1mdW5jdGlvbihHKXsiLyI9PUcuc2xpY2UoLTEpJiYoRz1HLnN1YnN0cmluZygwLEcubGVuZ3RoLTEpKTt2YXIgRD1HLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIEQ+MD9HLnN1YnN0cmluZygwLEQpOiIifSxrPWZ1bmN0aW9uKEcsRCl7cmV0dXJuIi8iIT1HLnNsaWNlKC0xKSYm''@;'; put 'put ''KEcrPSIvIiksRD10eXBlb2YgRDwidSImJkQsdGhpcy5maWxlc1tHXXx8Zi5jYWxsKHRoaXMsRyxudWxsLHtkaXI6ITAsY3JlYXRlRm9sZGVyczpEfSksdGhpcy5maWxlc1tHXX0sTT1mdW5jdGlvbihHLEQpe3ZhciBJLHA9bmV3IHo7cmV0dXJuIEcuX2RhdGEgaW5zdGFuY2VvZiB6PyhwLnVu''@;'; put 'put ''Y29tcHJlc3NlZFNpemU9Ry5fZGF0YS51bmNvbXByZXNzZWRTaXplLHAuY3JjMzI9Ry5fZGF0YS5jcmMzMiwwPT09cC51bmNvbXByZXNzZWRTaXplfHxHLmRpcj8oRD1OLlNUT1JFLHAuY29tcHJlc3NlZENvbnRlbnQ9IiIscC5jcmMzMj0wKTpHLl9kYXRhLmNvbXByZXNzaW9uTWV0aG9kPT09''@;'; put 'put ''RC5tYWdpYz9wLmNvbXByZXNzZWRDb250ZW50PUcuX2RhdGEuZ2V0Q29tcHJlc3NlZENvbnRlbnQoKTooST1HLl9kYXRhLmdldENvbnRlbnQoKSxwLmNvbXByZXNzZWRDb250ZW50PUQuY29tcHJlc3MoUi50cmFuc2Zvcm1UbyhELmNvbXByZXNzSW5wdXRUeXBlLEkpKSkpOigoIShJPW1lKEcp''@;'; put 'put ''KXx8MD09PUkubGVuZ3RofHxHLmRpcikmJihEPU4uU1RPUkUsST0iIikscC51bmNvbXByZXNzZWRTaXplPUkubGVuZ3RoLHAuY3JjMzI9eChJKSxwLmNvbXByZXNzZWRDb250ZW50PUQuY29tcHJlc3MoUi50cmFuc2Zvcm1UbyhELmNvbXByZXNzSW5wdXRUeXBlLEkpKSkscC5jb21wcmVzc2Vk''@;'; put 'put ''U2l6ZT1wLmNvbXByZXNzZWRDb250ZW50Lmxlbmd0aCxwLmNvbXByZXNzaW9uTWV0aG9kPUQubWFnaWMscH0sQj1mdW5jdGlvbihHLEQscCxJKXt2YXIgUmUsYWUsRGUsRmUsbmU9Ui50cmFuc2Zvcm1Ubygic3RyaW5nIixGLnV0ZjhlbmNvZGUoRC5uYW1lKSksX2U9RC5jb21tZW50fHwiIixQ''@;'; put 'put ''ZT1SLnRyYW5zZm9ybVRvKCJzdHJpbmciLEYudXRmOGVuY29kZShfZSkpLG90PW5lLmxlbmd0aCE9PUQubmFtZS5sZW5ndGgsbHQ9UGUubGVuZ3RoIT09X2UubGVuZ3RoLGR0PUQub3B0aW9ucyx4ZT0iIixqZT0iIixBZT0iIjtEZT1ELl9pbml0aWFsTWV0YWRhdGEuZGlyIT09RC5kaXI/RC5k''@;'; put 'put ''aXI6ZHQuZGlyLFJlPShGZT1ELl9pbml0aWFsTWV0YWRhdGEuZGF0ZSE9PUQuZGF0ZT9ELmRhdGU6ZHQuZGF0ZSkuZ2V0SG91cnMoKSxSZTw8PTYsUmV8PUZlLmdldE1pbnV0ZXMoKSxSZTw8PTUsUmV8PUZlLmdldFNlY29uZHMoKS8yLGFlPUZlLmdldEZ1bGxZZWFyKCktMTk4MCxhZTw8PTQs''@;'; put 'put ''YWV8PUZlLmdldE1vbnRoKCkrMSxhZTw8PTUsYWV8PUZlLmdldERhdGUoKSxvdCYmKGplPWtlKDEsMSkra2UoeChuZSksNCkrbmUseGUrPSJ1cCIra2UoamUubGVuZ3RoLDIpK2plKSxsdCYmKEFlPWtlKDEsMSkra2UodGhpcy5jcmMzMihQZSksNCkrUGUseGUrPSJ1YyIra2UoQWUubGVuZ3Ro''@;'; put 'put ''LDIpK0FlKTt2YXIgZ2U9IiI7cmV0dXJuIGdlKz0iXG5cMCIsZ2UrPW90fHxsdD8iXDBcYiI6IlwwXDAiLGdlKz1wLmNvbXByZXNzaW9uTWV0aG9kLGdlKz1rZShSZSwyKSxnZSs9a2UoYWUsMiksZ2UrPWtlKHAuY3JjMzIsNCksZ2UrPWtlKHAuY29tcHJlc3NlZFNpemUsNCksZ2UrPWtlKHAu''@;'; put 'put ''dW5jb21wcmVzc2VkU2l6ZSw0KSxnZSs9a2UobmUubGVuZ3RoLDIpLGdlKz1rZSh4ZS5sZW5ndGgsMikse2ZpbGVSZWNvcmQ6VS5MT0NBTF9GSUxFX0hFQURFUitnZStuZSt4ZSxkaXJSZWNvcmQ6VS5DRU5UUkFMX0ZJTEVfSEVBREVSKyJceDE0XDAiK2dlK2tlKFBlLmxlbmd0aCwyKSsiXDBc''@;'; put 'put ''MFwwXDAiKyghMD09PURlPyJceDEwXDBcMFwwIjoiXDBcMFwwXDAiKStrZShJLDQpK25lK3hlK1BlLGNvbXByZXNzZWRPYmplY3Q6cH19LEs9e2xvYWQ6ZnVuY3Rpb24oRyxEKXt0aHJvdyBuZXcgRXJyb3IoIkxvYWQgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLiBJcyB0aGUgZmlsZSBqc3ppcC1s''@;'; put 'put ''b2FkLmpzIGluY2x1ZGVkID8iKX0sZmlsdGVyOmZ1bmN0aW9uKEcpe3ZhciBwLEksdWUsbmUsRD1bXTtmb3IocCBpbiB0aGlzLmZpbGVzKXRoaXMuZmlsZXMuaGFzT3duUHJvcGVydHkocCkmJihuZT1uZXcgSWUoKHVlPXRoaXMuZmlsZXNbcF0pLm5hbWUsdWUuX2RhdGEscWUodWUub3B0aW9u''@;'; put 'put ''cykpLEk9cC5zbGljZSh0aGlzLnJvb3QubGVuZ3RoLHAubGVuZ3RoKSxwLnNsaWNlKDAsdGhpcy5yb290Lmxlbmd0aCk9PT10aGlzLnJvb3QmJkcoSSxuZSkmJkQucHVzaChuZSkpO3JldHVybiBEfSxmaWxlOmZ1bmN0aW9uKEcsRCxwKXtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7aWYoUi5p''@;'; put 'put ''c1JlZ0V4cChHKSl7dmFyIEk9RztyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24odWUsbmUpe3JldHVybiFuZS5kaXImJkkudGVzdCh1ZSl9KX1yZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24odWUsbmUpe3JldHVybiFuZS5kaXImJnVlPT09R30pWzBdfHxudWxsfXJldHVybiBmLmNhbGwo''@;'; put 'put ''dGhpcyxHPXRoaXMucm9vdCtHLEQscCksdGhpc30sZm9sZGVyOmZ1bmN0aW9uKEcpe2lmKCFHKXJldHVybiB0aGlzO2lmKFIuaXNSZWdFeHAoRykpcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKHVlLG5lKXtyZXR1cm4gbmUuZGlyJiZHLnRlc3QodWUpfSk7dmFyIHA9ay5jYWxsKHRoaXMs''@;'; put 'put ''dGhpcy5yb290K0cpLEk9dGhpcy5jbG9uZSgpO3JldHVybiBJLnJvb3Q9cC5uYW1lLEl9LHJlbW92ZTpmdW5jdGlvbihHKXt2YXIgRD10aGlzLmZpbGVzW0c9dGhpcy5yb290K0ddO2lmKER8fCgiLyIhPUcuc2xpY2UoLTEpJiYoRys9Ii8iKSxEPXRoaXMuZmlsZXNbR10pLEQmJiFELmRpcilk''@;'; put 'put ''ZWxldGUgdGhpcy5maWxlc1tHXTtlbHNlIGZvcih2YXIgcD10aGlzLmZpbHRlcihmdW5jdGlvbih1ZSxuZSl7cmV0dXJuIG5lLm5hbWUuc2xpY2UoMCxHLmxlbmd0aCk9PT1HfSksST0wO0k8cC5sZW5ndGg7SSsrKWRlbGV0ZSB0aGlzLmZpbGVzW3BbSV0ubmFtZV07cmV0dXJuIHRoaXN9LGdl''@;'; put 'put ''bmVyYXRlOmZ1bmN0aW9uKEcpe0c9cWUoR3x8e30se2Jhc2U2NDohMCxjb21wcmVzc2lvbjoiU1RPUkUiLHR5cGU6ImJhc2U2NCIsY29tbWVudDpudWxsfSksUi5jaGVja1N1cHBvcnQoRy50eXBlKTt2YXIgdWUsbmUseGUsRD1bXSxwPTAsST0wLF9lPVIudHJhbnNmb3JtVG8oInN0cmluZyIs''@;'; put 'put ''dGhpcy51dGY4ZW5jb2RlKEcuY29tbWVudHx8dGhpcy5jb21tZW50fHwiIikpO2Zvcih2YXIgUGUgaW4gdGhpcy5maWxlcylpZih0aGlzLmZpbGVzLmhhc093blByb3BlcnR5KFBlKSl7dmFyIG90PXRoaXMuZmlsZXNbUGVdLGx0PW90Lm9wdGlvbnMuY29tcHJlc3Npb258fEcuY29tcHJlc3Np''@;'; put 'put ''b24udG9VcHBlckNhc2UoKSxkdD1OW2x0XTtpZighZHQpdGhyb3cgbmV3IEVycm9yKGx0KyIgaXMgbm90IGEgdmFsaWQgY29tcHJlc3Npb24gbWV0aG9kICEiKTt2YXIgUmU9TS5jYWxsKHRoaXMsb3QsZHQpLGFlPUIuY2FsbCh0aGlzLFBlLG90LFJlLHApO3ArPWFlLmZpbGVSZWNvcmQubGVu''@;'; put 'put ''Z3RoK1JlLmNvbXByZXNzZWRTaXplLEkrPWFlLmRpclJlY29yZC5sZW5ndGgsRC5wdXNoKGFlKX14ZT1VLkNFTlRSQUxfRElSRUNUT1JZX0VORCsiXDBcMFwwXDAiK2tlKEQubGVuZ3RoLDIpK2tlKEQubGVuZ3RoLDIpK2tlKEksNCkra2UocCw0KStrZShfZS5sZW5ndGgsMikrX2U7dmFyIGpl''@;'; put 'put ''PUcudHlwZS50b0xvd2VyQ2FzZSgpO2Zvcih1ZT0idWludDhhcnJheSI9PT1qZXx8ImFycmF5YnVmZmVyIj09PWplfHwiYmxvYiI9PT1qZXx8Im5vZGVidWZmZXIiPT09amU/bmV3IHEocCtJK3hlLmxlbmd0aCk6bmV3IFcocCtJK3hlLmxlbmd0aCksbmU9MDtuZTxELmxlbmd0aDtuZSsrKXVl''@;'; put 'put ''LmFwcGVuZChEW25lXS5maWxlUmVjb3JkKSx1ZS5hcHBlbmQoRFtuZV0uY29tcHJlc3NlZE9iamVjdC5jb21wcmVzc2VkQ29udGVudCk7Zm9yKG5lPTA7bmU8RC5sZW5ndGg7bmUrKyl1ZS5hcHBlbmQoRFtuZV0uZGlyUmVjb3JkKTt1ZS5hcHBlbmQoeGUpO3ZhciBBZT11ZS5maW5hbGl6ZSgp''@;'; put 'put ''O3N3aXRjaChHLnR5cGUudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1aW50OGFycmF5IjpjYXNlImFycmF5YnVmZmVyIjpjYXNlIm5vZGVidWZmZXIiOnJldHVybiBSLnRyYW5zZm9ybVRvKEcudHlwZS50b0xvd2VyQ2FzZSgpLEFlKTtjYXNlImJsb2IiOnJldHVybiBSLmFycmF5QnVmZmVyMkJsb2Io''@;'; put 'put ''Ui50cmFuc2Zvcm1UbygiYXJyYXlidWZmZXIiLEFlKSk7Y2FzZSJiYXNlNjQiOnJldHVybiBHLmJhc2U2ND9WLmVuY29kZShBZSk6QWU7ZGVmYXVsdDpyZXR1cm4gQWV9fSxjcmMzMjpmdW5jdGlvbihHLEQpe3JldHVybiB4KEcsRCl9LHV0ZjhlbmNvZGU6ZnVuY3Rpb24oRyl7cmV0dXJuIFIu''@;'; put 'put ''dHJhbnNmb3JtVG8oInN0cmluZyIsRi51dGY4ZW5jb2RlKEcpKX0sdXRmOGRlY29kZTpmdW5jdGlvbihHKXtyZXR1cm4gRi51dGY4ZGVjb2RlKEcpfX07dy5leHBvcnRzPUt9LHsiLi9iYXNlNjQiOjEsIi4vY29tcHJlc3NlZE9iamVjdCI6MiwiLi9jb21wcmVzc2lvbnMiOjMsIi4vY3JjMzIi''@;'; put 'put ''OjQsIi4vZGVmYXVsdHMiOjYsIi4vbm9kZUJ1ZmZlciI6MTEsIi4vc2lnbmF0dXJlIjoxNCwiLi9zdHJpbmdXcml0ZXIiOjE2LCIuL3N1cHBvcnQiOjE3LCIuL3VpbnQ4QXJyYXlXcml0ZXIiOjE5LCIuL3V0ZjgiOjIwLCIuL3V0aWxzIjoyMX1dLDE0OltmdW5jdGlvbihDLHcsUyl7InVzZSBz''@;'; put 'put ''dHJpY3QiO1MuTE9DQUxfRklMRV9IRUFERVI9IlBLXHgwM1x4MDQiLFMuQ0VOVFJBTF9GSUxFX0hFQURFUj0iUEtceDAxXHgwMiIsUy5DRU5UUkFMX0RJUkVDVE9SWV9FTkQ9IlBLXHgwNVx4MDYiLFMuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUj0iUEtceDA2XHgwNyIsUy5aSVA2''@;'; put 'put ''NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQ9IlBLXHgwNlx4MDYiLFMuREFUQV9ERVNDUklQVE9SPSJQS1x4MDdcYiJ9LHt9XSwxNTpbZnVuY3Rpb24oQyx3LFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgTD1DKCIuL2RhdGFSZWFkZXIiKSxSPUMoIi4vdXRpbHMiKTtmdW5jdGlvbiB4KFUsSCl7dGhpcy5k''@;'; put 'put ''YXRhPVUsSHx8KHRoaXMuZGF0YT1SLnN0cmluZzJiaW5hcnkodGhpcy5kYXRhKSksdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTB9KHgucHJvdG90eXBlPW5ldyBMKS5ieXRlQXQ9ZnVuY3Rpb24oVSl7cmV0dXJuIHRoaXMuZGF0YS5jaGFyQ29kZUF0KFUpfSx4LnBy''@;'; put 'put ''b3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25hdHVyZT1mdW5jdGlvbihVKXtyZXR1cm4gdGhpcy5kYXRhLmxhc3RJbmRleE9mKFUpfSx4LnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihVKXt0aGlzLmNoZWNrT2Zmc2V0KFUpO3ZhciBIPXRoaXMuZGF0YS5zbGljZSh0aGlzLmluZGV4LHRoaXMu''@;'; put 'put ''aW5kZXgrVSk7cmV0dXJuIHRoaXMuaW5kZXgrPVUsSH0sdy5leHBvcnRzPXh9LHsiLi9kYXRhUmVhZGVyIjo1LCIuL3V0aWxzIjoyMX1dLDE2OltmdW5jdGlvbihDLHcsUyl7InVzZSBzdHJpY3QiO3ZhciBMPUMoIi4vdXRpbHMiKSxSPWZ1bmN0aW9uKCl7dGhpcy5kYXRhPVtdfTtSLnByb3Rv''@;'; put 'put ''dHlwZT17YXBwZW5kOmZ1bmN0aW9uKHgpe3g9TC50cmFuc2Zvcm1Ubygic3RyaW5nIix4KSx0aGlzLmRhdGEucHVzaCh4KX0sZmluYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmpvaW4oIiIpfX0sdy5leHBvcnRzPVJ9LHsiLi91dGlscyI6MjF9XSwxNzpbZnVuY3Rpb24oQyx3''@;'; put 'put ''LFMpeyhmdW5jdGlvbihMKXsidXNlIHN0cmljdCI7aWYoUy5iYXNlNjQ9ITAsUy5hcnJheT0hMCxTLnN0cmluZz0hMCxTLmFycmF5YnVmZmVyPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnR5cGVvZiBVaW50OEFycmF5PCJ1IixTLm5vZGVidWZmZXI9dHlwZW9mIEw8InUiLFMudWludDhhcnJh''@;'; put 'put ''eT10eXBlb2YgVWludDhBcnJheTwidSIsdHlwZW9mIEFycmF5QnVmZmVyPiJ1IilTLmJsb2I9ITE7ZWxzZXt2YXIgUj1uZXcgQXJyYXlCdWZmZXIoMCk7dHJ5e1MuYmxvYj0wPT09bmV3IEJsb2IoW1JdLHt0eXBlOiJhcHBsaWNhdGlvbi96aXAifSkuc2l6ZX1jYXRjaHt0cnl7dmFyIFU9bmV3''@;'; put 'put ''KHdpbmRvdy5CbG9iQnVpbGRlcnx8d2luZG93LldlYktpdEJsb2JCdWlsZGVyfHx3aW5kb3cuTW96QmxvYkJ1aWxkZXJ8fHdpbmRvdy5NU0Jsb2JCdWlsZGVyKTtVLmFwcGVuZChSKSxTLmJsb2I9MD09PVUuZ2V0QmxvYigiYXBwbGljYXRpb24vemlwIikuc2l6ZX1jYXRjaHtTLmJsb2I9ITF9''@;'; put 'put ''fX19KS5jYWxsKHRoaXMsdHlwZW9mIEJ1ZmZlcjwidSI/QnVmZmVyOnZvaWQgMCl9LHt9XSwxODpbZnVuY3Rpb24oQyx3LFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgTD1DKCIuL2RhdGFSZWFkZXIiKTtmdW5jdGlvbiBSKHgpe3gmJih0aGlzLmRhdGE9eCx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVu''@;'; put 'put ''Z3RoLHRoaXMuaW5kZXg9MCl9KFIucHJvdG90eXBlPW5ldyBMKS5ieXRlQXQ9ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuZGF0YVt4XX0sUi5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWduYXR1cmU9ZnVuY3Rpb24oeCl7Zm9yKHZhciBVPXguY2hhckNvZGVBdCgwKSxIPXguY2hhckNvZGVBdCgx''@;'; put 'put ''KSxWPXguY2hhckNvZGVBdCgyKSxOPXguY2hhckNvZGVBdCgzKSx6PXRoaXMubGVuZ3RoLTQ7ej49MDstLXopaWYodGhpcy5kYXRhW3pdPT09VSYmdGhpcy5kYXRhW3orMV09PT1IJiZ0aGlzLmRhdGFbeisyXT09PVYmJnRoaXMuZGF0YVt6KzNdPT09TilyZXR1cm4gejtyZXR1cm4tMX0sUi5w''@;'; put 'put ''cm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oeCl7aWYodGhpcy5jaGVja09mZnNldCh4KSwwPT09eClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIFU9dGhpcy5kYXRhLnN1YmFycmF5KHRoaXMuaW5kZXgsdGhpcy5pbmRleCt4KTtyZXR1cm4gdGhpcy5pbmRleCs9eCxVfSx3LmV4cG9y''@;'; put 'put ''dHM9Un0seyIuL2RhdGFSZWFkZXIiOjV9XSwxOTpbZnVuY3Rpb24oQyx3LFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgTD1DKCIuL3V0aWxzIiksUj1mdW5jdGlvbih4KXt0aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkoeCksdGhpcy5pbmRleD0wfTtSLnByb3RvdHlwZT17YXBwZW5kOmZ1bmN0aW9uKHgp''@;'; put 'put ''ezAhPT14Lmxlbmd0aCYmKHg9TC50cmFuc2Zvcm1UbygidWludDhhcnJheSIseCksdGhpcy5kYXRhLnNldCh4LHRoaXMuaW5kZXgpLHRoaXMuaW5kZXgrPXgubGVuZ3RoKX0sZmluYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfX0sdy5leHBvcnRzPVJ9LHsiLi91dGlscyI6MjF9''@;'; put 'put ''XSwyMDpbZnVuY3Rpb24oQyx3LFMpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIEw9QygiLi91dGlscyIpLFI9QygiLi9zdXBwb3J0IikseD1DKCIuL25vZGVCdWZmZXIiKSxVPW5ldyBBcnJheSgyNTYpLEg9MDtIPDI1NjtIKyspVVtIXT1IPj0yNTI/NjpIPj0yNDg/NTpIPj0yNDA/NDpIPj0yMjQ/''@;'; put 'put ''MzpIPj0xOTI/MjoxO1VbMjU0XT1VWzI1NF09MTt2YXIgTj1mdW5jdGlvbihZLEYpe3ZhciBXO2ZvcigoRj1GfHxZLmxlbmd0aCk+WS5sZW5ndGgmJihGPVkubGVuZ3RoKSxXPUYtMTtXPj0wJiYxMjg9PSgxOTImWVtXXSk7KVctLTtyZXR1cm4gVzwwfHwwPT09Vz9GOlcrVVtZW1ddXT5GP1c6''@;'; put 'put ''Rn0sej1mdW5jdGlvbihZKXt2YXIgVyxxLHJlLG1lLENlPVkubGVuZ3RoLEllPW5ldyBBcnJheSgyKkNlKTtmb3IocT0wLFc9MDtXPENlOylpZigocmU9WVtXKytdKTwxMjgpSWVbcSsrXT1yZTtlbHNlIGlmKChtZT1VW3JlXSk+NClJZVtxKytdPTY1NTMzLFcrPW1lLTE7ZWxzZXtmb3IocmUm''@;'; put 'put ''PTI9PT1tZT8zMTozPT09bWU/MTU6NzttZT4xJiZXPENlOylyZT1yZTw8Nnw2MyZZW1crK10sbWUtLTttZT4xP0llW3ErK109NjU1MzM6cmU8NjU1MzY/SWVbcSsrXT1yZTooSWVbcSsrXT01NTI5NnwocmUtPTY1NTM2KT4+MTAmMTAyMyxJZVtxKytdPTU2MzIwfDEwMjMmcmUpfXJldHVybiBJ''@;'; put 'put ''ZS5sZW5ndGghPT1xJiYoSWUuc3ViYXJyYXk/SWU9SWUuc3ViYXJyYXkoMCxxKTpJZS5sZW5ndGg9cSksTC5hcHBseUZyb21DaGFyQ29kZShJZSl9O1MudXRmOGVuY29kZT1mdW5jdGlvbihGKXtyZXR1cm4gUi5ub2RlYnVmZmVyP3goRiwidXRmLTgiKTpmdW5jdGlvbihZKXt2YXIgRixXLHEs''@;'; put 'put ''cmUsbWUsQ2U9WS5sZW5ndGgsSWU9MDtmb3IocmU9MDtyZTxDZTtyZSsrKTU1Mjk2PT0oNjQ1MTImKFc9WS5jaGFyQ29kZUF0KHJlKSkpJiZyZSsxPENlJiY1NjMyMD09KDY0NTEyJihxPVkuY2hhckNvZGVBdChyZSsxKSkpJiYoVz02NTUzNisoVy01NTI5Njw8MTApKyhxLTU2MzIwKSxyZSsr''@;'; put 'put ''KSxJZSs9VzwxMjg/MTpXPDIwNDg/MjpXPDY1NTM2PzM6NDtmb3IoRj1SLnVpbnQ4YXJyYXk/bmV3IFVpbnQ4QXJyYXkoSWUpOm5ldyBBcnJheShJZSksbWU9MCxyZT0wO21lPEllO3JlKyspNTUyOTY9PSg2NDUxMiYoVz1ZLmNoYXJDb2RlQXQocmUpKSkmJnJlKzE8Q2UmJjU2MzIwPT0oNjQ1''@;'; put 'put ''MTImKHE9WS5jaGFyQ29kZUF0KHJlKzEpKSkmJihXPTY1NTM2KyhXLTU1Mjk2PDwxMCkrKHEtNTYzMjApLHJlKyspLFc8MTI4P0ZbbWUrK109VzpXPDIwNDg/KEZbbWUrK109MTkyfFc+Pj42LEZbbWUrK109MTI4fDYzJlcpOlc8NjU1MzY/KEZbbWUrK109MjI0fFc+Pj4xMixGW21lKytdPTEy''@;'; put 'put ''OHxXPj4+NiY2MyxGW21lKytdPTEyOHw2MyZXKTooRlttZSsrXT0yNDB8Vz4+PjE4LEZbbWUrK109MTI4fFc+Pj4xMiY2MyxGW21lKytdPTEyOHxXPj4+NiY2MyxGW21lKytdPTEyOHw2MyZXKTtyZXR1cm4gRn0oRil9LFMudXRmOGRlY29kZT1mdW5jdGlvbihGKXtpZihSLm5vZGVidWZmZXIp''@;'; put 'put ''cmV0dXJuIEwudHJhbnNmb3JtVG8oIm5vZGVidWZmZXIiLEYpLnRvU3RyaW5nKCJ1dGYtOCIpO2Zvcih2YXIgVz1bXSxxPTAscmU9KEY9TC50cmFuc2Zvcm1UbyhSLnVpbnQ4YXJyYXk/InVpbnQ4YXJyYXkiOiJhcnJheSIsRikpLmxlbmd0aDtxPHJlOyl7dmFyIENlPU4oRixNYXRoLm1pbihx''@;'; put 'put ''KzY1NTM2LHJlKSk7Vy5wdXNoKHooUi51aW50OGFycmF5P0Yuc3ViYXJyYXkocSxDZSk6Ri5zbGljZShxLENlKSkpLHE9Q2V9cmV0dXJuIFcuam9pbigiIil9fSx7Ii4vbm9kZUJ1ZmZlciI6MTEsIi4vc3VwcG9ydCI6MTcsIi4vdXRpbHMiOjIxfV0sMjE6W2Z1bmN0aW9uKEMsdyxTKXsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIEw9QygiLi9zdXBwb3J0IiksUj1DKCIuL2NvbXByZXNzaW9ucyIpLHg9QygiLi9ub2RlQnVmZmVyIik7ZnVuY3Rpb24gVShZKXtyZXR1cm4gWX1mdW5jdGlvbiBIKFksRil7Zm9yKHZhciBXPTA7VzxZLmxlbmd0aDsrK1cpRltXXT0yNTUmWS5jaGFyQ29kZUF0KFcpO3Jl''@;'; put 'put ''dHVybiBGfWZ1bmN0aW9uIFYoWSl7dmFyIEY9NjU1MzYsVz1bXSxxPVkubGVuZ3RoLHJlPVMuZ2V0VHlwZU9mKFkpLG1lPTAsQ2U9ITA7dHJ5e3N3aXRjaChyZSl7Y2FzZSJ1aW50OGFycmF5IjpTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMCkpO2JyZWFr''@;'; put 'put ''O2Nhc2Uibm9kZWJ1ZmZlciI6U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHgoMCkpfX1jYXRjaHtDZT0hMX1pZighQ2Upe2Zvcih2YXIgSWU9IiIsa2U9MDtrZTxZLmxlbmd0aDtrZSsrKUllKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFlba2VdKTtyZXR1cm4gSWV9Zm9yKDttZTxxJiZG''@;'; put 'put ''PjE7KXRyeXtXLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCJhcnJheSI9PT1yZXx8Im5vZGVidWZmZXIiPT09cmU/WS5zbGljZShtZSxNYXRoLm1pbihtZStGLHEpKTpZLnN1YmFycmF5KG1lLE1hdGgubWluKG1lK0YscSkpKSksbWUrPUZ9Y2F0Y2h7Rj1NYXRoLmZsb29y''@;'; put 'put ''KEYvMil9cmV0dXJuIFcuam9pbigiIil9ZnVuY3Rpb24gTihZLEYpe2Zvcih2YXIgVz0wO1c8WS5sZW5ndGg7VysrKUZbV109WVtXXTtyZXR1cm4gRn1TLnN0cmluZzJiaW5hcnk9ZnVuY3Rpb24oWSl7Zm9yKHZhciBGPSIiLFc9MDtXPFkubGVuZ3RoO1crKylGKz1TdHJpbmcuZnJvbUNoYXJD''@;'; put 'put ''b2RlKDI1NSZZLmNoYXJDb2RlQXQoVykpO3JldHVybiBGfSxTLmFycmF5QnVmZmVyMkJsb2I9ZnVuY3Rpb24oWSl7Uy5jaGVja1N1cHBvcnQoImJsb2IiKTt0cnl7cmV0dXJuIG5ldyBCbG9iKFtZXSx7dHlwZToiYXBwbGljYXRpb24vemlwIn0pfWNhdGNoe3RyeXt2YXIgVz1uZXcod2luZG93''@;'; put 'put ''LkJsb2JCdWlsZGVyfHx3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXJ8fHdpbmRvdy5Nb3pCbG9iQnVpbGRlcnx8d2luZG93Lk1TQmxvYkJ1aWxkZXIpO3JldHVybiBXLmFwcGVuZChZKSxXLmdldEJsb2IoImFwcGxpY2F0aW9uL3ppcCIpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiQnVnIDogY2Fu''@;'; put 'put ''J3QgY29uc3RydWN0IHRoZSBCbG9iLiIpfX19LFMuYXBwbHlGcm9tQ2hhckNvZGU9Vjt2YXIgej17fTt6LnN0cmluZz17c3RyaW5nOlUsYXJyYXk6ZnVuY3Rpb24oWSl7cmV0dXJuIEgoWSxuZXcgQXJyYXkoWS5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oWSl7cmV0dXJuIHouc3Ry''@;'; put 'put ''aW5nLnVpbnQ4YXJyYXkoWSkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKFkpe3JldHVybiBIKFksbmV3IFVpbnQ4QXJyYXkoWS5sZW5ndGgpKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihZKXtyZXR1cm4gSChZLHgoWS5sZW5ndGgpKX19LHouYXJyYXk9e3N0cmluZzpWLGFycmF5OlUsYXJy''@;'; put 'put ''YXlidWZmZXI6ZnVuY3Rpb24oWSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFkpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihZKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oWSl7cmV0dXJuIHgoWSl9fSx6LmFycmF5YnVmZmVyPXtzdHJpbmc6ZnVu''@;'; put 'put ''Y3Rpb24oWSl7cmV0dXJuIFYobmV3IFVpbnQ4QXJyYXkoWSkpfSxhcnJheTpmdW5jdGlvbihZKXtyZXR1cm4gTihuZXcgVWludDhBcnJheShZKSxuZXcgQXJyYXkoWS5ieXRlTGVuZ3RoKSl9LGFycmF5YnVmZmVyOlUsdWludDhhcnJheTpmdW5jdGlvbihZKXtyZXR1cm4gbmV3IFVpbnQ4QXJy''@;'; put 'put ''YXkoWSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oWSl7cmV0dXJuIHgobmV3IFVpbnQ4QXJyYXkoWSkpfX0sei51aW50OGFycmF5PXtzdHJpbmc6VixhcnJheTpmdW5jdGlvbihZKXtyZXR1cm4gTihZLG5ldyBBcnJheShZLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihZKXtyZXR1cm4g''@;'; put 'put ''WS5idWZmZXJ9LHVpbnQ4YXJyYXk6VSxub2RlYnVmZmVyOmZ1bmN0aW9uKFkpe3JldHVybiB4KFkpfX0sei5ub2RlYnVmZmVyPXtzdHJpbmc6VixhcnJheTpmdW5jdGlvbihZKXtyZXR1cm4gTihZLG5ldyBBcnJheShZLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihZKXtyZXR1cm4g''@;'; put 'put ''ei5ub2RlYnVmZmVyLnVpbnQ4YXJyYXkoWSkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKFkpe3JldHVybiBOKFksbmV3IFVpbnQ4QXJyYXkoWS5sZW5ndGgpKX0sbm9kZWJ1ZmZlcjpVfSxTLnRyYW5zZm9ybVRvPWZ1bmN0aW9uKFksRil7aWYoRnx8KEY9IiIpLCFZKXJldHVybiBGO1Mu''@;'; put 'put ''Y2hlY2tTdXBwb3J0KFkpO3ZhciBXPVMuZ2V0VHlwZU9mKEYpO3JldHVybiB6W1ddW1ldKEYpfSxTLmdldFR5cGVPZj1mdW5jdGlvbihZKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFk/InN0cmluZyI6IltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChZ''@;'; put 'put ''KT8iYXJyYXkiOkwubm9kZWJ1ZmZlciYmeC50ZXN0KFkpPyJub2RlYnVmZmVyIjpMLnVpbnQ4YXJyYXkmJlkgaW5zdGFuY2VvZiBVaW50OEFycmF5PyJ1aW50OGFycmF5IjpMLmFycmF5YnVmZmVyJiZZIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ImFycmF5YnVmZmVyIjp2b2lkIDB9LFMuY2hl''@;'; put 'put ''Y2tTdXBwb3J0PWZ1bmN0aW9uKFkpe2lmKCFMW1kudG9Mb3dlckNhc2UoKV0pdGhyb3cgbmV3IEVycm9yKFkrIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlciIpfSxTLk1BWF9WQUxVRV8xNkJJVFM9NjU1MzUsUy5NQVhfVkFMVUVfMzJCSVRTPS0xLFMucHJldHR5PWZ1bmN0aW9u''@;'; put 'put ''KFkpe3ZhciBXLHEsRj0iIjtmb3IocT0wO3E8KFl8fCIiKS5sZW5ndGg7cSsrKUYrPSJcXHgiKygoVz1ZLmNoYXJDb2RlQXQocSkpPDE2PyIwIjoiIikrVy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4gRn0sUy5maW5kQ29tcHJlc3Npb249ZnVuY3Rpb24oWSl7Zm9yKHZhciBG''@;'; put 'put ''IGluIFIpaWYoUi5oYXNPd25Qcm9wZXJ0eShGKSYmUltGXS5tYWdpYz09PVkpcmV0dXJuIFJbRl07cmV0dXJuIG51bGx9LFMuaXNSZWdFeHA9ZnVuY3Rpb24oWSl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoWSl9fSx7Ii4vY29tcHJl''@;'; put 'put ''c3Npb25zIjozLCIuL25vZGVCdWZmZXIiOjExLCIuL3N1cHBvcnQiOjE3fV0sMjI6W2Z1bmN0aW9uKEMsdyxTKXsidXNlIHN0cmljdCI7dmFyIEw9QygiLi9zdHJpbmdSZWFkZXIiKSxSPUMoIi4vbm9kZUJ1ZmZlclJlYWRlciIpLHg9QygiLi91aW50OEFycmF5UmVhZGVyIiksVT1DKCIuL3V0''@;'; put 'put ''aWxzIiksSD1DKCIuL3NpZ25hdHVyZSIpLFY9QygiLi96aXBFbnRyeSIpLE49QygiLi9zdXBwb3J0Iiksej1DKCIuL29iamVjdCIpO2Z1bmN0aW9uIFkoRixXKXt0aGlzLmZpbGVzPVtdLHRoaXMubG9hZE9wdGlvbnM9VyxGJiZ0aGlzLmxvYWQoRil9WS5wcm90b3R5cGU9e2NoZWNrU2lnbmF0''@;'; put 'put ''dXJlOmZ1bmN0aW9uKEYpe3ZhciBXPXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk7aWYoVyE9PUYpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIG9yIGJ1ZyA6IHVuZXhwZWN0ZWQgc2lnbmF0dXJlICgiK1UucHJldHR5KFcpKyIsIGV4cGVjdGVkICIrVS5wcmV0dHkoRikrIikiKX0s''@;'; put 'put ''cmVhZEJsb2NrRW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dGhpcy5kaXNrTnVtYmVyPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVh''@;'; put 'put ''ZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyUmVjb3Jkcz10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLnppcENvbW1lbnRM''@;'; put 'put ''ZW5ndGg9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLnppcENvbW1lbnQ9dGhpcy5yZWFkZXIucmVhZFN0cmluZyh0aGlzLnppcENvbW1lbnRMZW5ndGgpLHRoaXMuemlwQ29tbWVudD16LnV0ZjhkZWNvZGUodGhpcy56aXBDb21tZW50KX0scmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWw6''@;'; put 'put ''ZnVuY3Rpb24oKXt0aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMudmVyc2lvbk1hZGVCeT10aGlzLnJlYWRlci5yZWFkU3RyaW5nKDIpLHRoaXMudmVyc2lvbk5lZWRlZD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuZGlza051bWJlcj10''@;'; put 'put ''aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpclJlY29yZHM9dGhpcy5yZWFkZXIu''@;'; put 'put ''cmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyT2Zmc2V0PXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy56aXA2NEV4dGVuc2libGVEYXRhPXt9O2Zvcih2YXIgcSxyZSxtZSxGPXRoaXMuemlwNjRFbmRPZkNlbnRy''@;'; put 'put ''YWxTaXplLTQ0OzA8RjspcT10aGlzLnJlYWRlci5yZWFkSW50KDIpLHJlPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksbWU9dGhpcy5yZWFkZXIucmVhZFN0cmluZyhyZSksdGhpcy56aXA2NEV4dGVuc2libGVEYXRhW3FdPXtpZDpxLGxlbmd0aDpyZSx2YWx1ZTptZX19LHJlYWRCbG9ja1ppcDY0''@;'; put 'put ''RW5kT2ZDZW50cmFsTG9jYXRvcjpmdW5jdGlvbigpe2lmKHRoaXMuZGlza1dpdGhaaXA2NENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpcj10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuZGlza3ND''@;'; put 'put ''b3VudD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuZGlza3NDb3VudD4xKXRocm93IG5ldyBFcnJvcigiTXVsdGktdm9sdW1lcyB6aXAgYXJlIG5vdCBzdXBwb3J0ZWQiKX0scmVhZExvY2FsRmlsZXM6ZnVuY3Rpb24oKXt2YXIgRixXO2ZvcihGPTA7Rjx0aGlzLmZpbGVzLmxlbmd0aDtG''@;'; put 'put ''KyspdGhpcy5yZWFkZXIuc2V0SW5kZXgoKFc9dGhpcy5maWxlc1tGXSkubG9jYWxIZWFkZXJPZmZzZXQpLHRoaXMuY2hlY2tTaWduYXR1cmUoSC5MT0NBTF9GSUxFX0hFQURFUiksVy5yZWFkTG9jYWxQYXJ0KHRoaXMucmVhZGVyKSxXLmhhbmRsZVVURjgoKX0scmVhZENlbnRyYWxEaXI6ZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgRjtmb3IodGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5jZW50cmFsRGlyT2Zmc2V0KTt0aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpPT09SC5DRU5UUkFMX0ZJTEVfSEVBREVSOykoRj1uZXcgVih7emlwNjQ6dGhpcy56aXA2NH0sdGhpcy5sb2FkT3B0aW9ucykpLnJlYWRD''@;'; put 'put ''ZW50cmFsUGFydCh0aGlzLnJlYWRlciksdGhpcy5maWxlcy5wdXNoKEYpfSxyZWFkRW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dmFyIEY9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoSC5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpO2lmKC0xPT09Ril0aHJvdyBuZXcgRXJyb3IoIkNv''@;'; put 'put ''cnJ1cHRlZCB6aXAgOiBjYW4ndCBmaW5kIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSIpO2lmKHRoaXMucmVhZGVyLnNldEluZGV4KEYpLHRoaXMuY2hlY2tTaWduYXR1cmUoSC5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrRW5kT2ZDZW50cmFsKCksdGhpcy5kaXNrTnVt''@;'; put 'put ''YmVyPT09VS5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PT09VS5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz09PVUuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkcz09PVUuTUFYX1ZB''@;'; put 'put ''TFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyU2l6ZT09PVUuTUFYX1ZBTFVFXzMyQklUU3x8dGhpcy5jZW50cmFsRGlyT2Zmc2V0PT09VS5NQVhfVkFMVUVfMzJCSVRTKXtpZih0aGlzLnppcDY0PSEwLC0xPT09KEY9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoSC5aSVA2NF9D''@;'; put 'put ''RU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKSkpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY2FuJ3QgZmluZCB0aGUgWklQNjQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IGxvY2F0b3IiKTt0aGlzLnJlYWRlci5zZXRJbmRleChGKSx0aGlzLmNoZWNrU2lnbmF0dXJlKEguWklQ''@;'; put 'put ''NjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUiksdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3IoKSx0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXIpLHRoaXMuY2hlY2tTaWduYXR1cmUoSC5aSVA2NF9DRU5U''@;'; put 'put ''UkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWwoKX19LHByZXBhcmVSZWFkZXI6ZnVuY3Rpb24oRil7dmFyIFc9VS5nZXRUeXBlT2YoRik7dGhpcy5yZWFkZXI9InN0cmluZyIhPT1XfHxOLnVpbnQ4YXJyYXk/Im5vZGVidWZmZXIiPT09Vz9uZXcgUihG''@;'; put 'put ''KTpuZXcgeChVLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixGKSk6bmV3IEwoRix0aGlzLmxvYWRPcHRpb25zLm9wdGltaXplZEJpbmFyeVN0cmluZyl9LGxvYWQ6ZnVuY3Rpb24oRil7dGhpcy5wcmVwYXJlUmVhZGVyKEYpLHRoaXMucmVhZEVuZE9mQ2VudHJhbCgpLHRoaXMucmVhZENlbnRy''@;'; put 'put ''YWxEaXIoKSx0aGlzLnJlYWRMb2NhbEZpbGVzKCl9fSx3LmV4cG9ydHM9WX0seyIuL25vZGVCdWZmZXJSZWFkZXIiOjEyLCIuL29iamVjdCI6MTMsIi4vc2lnbmF0dXJlIjoxNCwiLi9zdHJpbmdSZWFkZXIiOjE1LCIuL3N1cHBvcnQiOjE3LCIuL3VpbnQ4QXJyYXlSZWFkZXIiOjE4LCIuL3V0''@;'; put 'put ''aWxzIjoyMSwiLi96aXBFbnRyeSI6MjN9XSwyMzpbZnVuY3Rpb24oQyx3LFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgTD1DKCIuL3N0cmluZ1JlYWRlciIpLFI9QygiLi91dGlscyIpLHg9QygiLi9jb21wcmVzc2VkT2JqZWN0IiksVT1DKCIuL29iamVjdCIpO2Z1bmN0aW9uIEgoVixOKXt0aGlzLm9w''@;'; put 'put ''dGlvbnM9Vix0aGlzLmxvYWRPcHRpb25zPU59SC5wcm90b3R5cGU9e2lzRW5jcnlwdGVkOmZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLmJpdEZsYWcpfSx1c2VVVEY4OmZ1bmN0aW9uKCl7cmV0dXJuISgyMDQ4Jn50aGlzLmJpdEZsYWcpfSxwcmVwYXJlQ29tcHJlc3NlZENvbnRlbnQ6ZnVu''@;'; put 'put ''Y3Rpb24oVixOLHope3JldHVybiBmdW5jdGlvbigpe3ZhciBZPVYuaW5kZXg7Vi5zZXRJbmRleChOKTt2YXIgRj1WLnJlYWREYXRhKHopO3JldHVybiBWLnNldEluZGV4KFkpLEZ9fSxwcmVwYXJlQ29udGVudDpmdW5jdGlvbihWLE4seixZLEYpe3JldHVybiBmdW5jdGlvbigpe3ZhciBXPVIu''@;'; put 'put ''dHJhbnNmb3JtVG8oWS51bmNvbXByZXNzSW5wdXRUeXBlLHRoaXMuZ2V0Q29tcHJlc3NlZENvbnRlbnQoKSkscT1ZLnVuY29tcHJlc3MoVyk7aWYocS5sZW5ndGghPT1GKXRocm93IG5ldyBFcnJvcigiQnVnIDogdW5jb21wcmVzc2VkIGRhdGEgc2l6ZSBtaXNtYXRjaCIpO3JldHVybiBxfX0s''@;'; put 'put ''cmVhZExvY2FsUGFydDpmdW5jdGlvbihWKXt2YXIgTix6O2lmKFYuc2tpcCgyMiksdGhpcy5maWxlTmFtZUxlbmd0aD1WLnJlYWRJbnQoMiksej1WLnJlYWRJbnQoMiksdGhpcy5maWxlTmFtZT1WLnJlYWRTdHJpbmcodGhpcy5maWxlTmFtZUxlbmd0aCksVi5za2lwKHopLC0xPT10aGlzLmNv''@;'; put 'put ''bXByZXNzZWRTaXplfHwtMT09dGhpcy51bmNvbXByZXNzZWRTaXplKXRocm93IG5ldyBFcnJvcigiQnVnIG9yIGNvcnJ1cHRlZCB6aXAgOiBkaWRuJ3QgZ2V0IGVub3VnaCBpbmZvcm1hdGlvbnMgZnJvbSB0aGUgY2VudHJhbCBkaXJlY3RvcnkgKGNvbXByZXNzZWRTaXplID09IC0xIHx8IHVu''@;'; put 'put ''Y29tcHJlc3NlZFNpemUgPT0gLTEpIik7aWYobnVsbD09PShOPVIuZmluZENvbXByZXNzaW9uKHRoaXMuY29tcHJlc3Npb25NZXRob2QpKSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBjb21wcmVzc2lvbiAiK1IucHJldHR5KHRoaXMuY29tcHJlc3Npb25NZXRob2QpKyIgdW5r''@;'; put 'put ''bm93biAoaW5uZXIgZmlsZSA6ICIrdGhpcy5maWxlTmFtZSsiKSIpO2lmKHRoaXMuZGVjb21wcmVzc2VkPW5ldyB4LHRoaXMuZGVjb21wcmVzc2VkLmNvbXByZXNzZWRTaXplPXRoaXMuY29tcHJlc3NlZFNpemUsdGhpcy5kZWNvbXByZXNzZWQudW5jb21wcmVzc2VkU2l6ZT10aGlzLnVuY29t''@;'; put 'put ''cHJlc3NlZFNpemUsdGhpcy5kZWNvbXByZXNzZWQuY3JjMzI9dGhpcy5jcmMzMix0aGlzLmRlY29tcHJlc3NlZC5jb21wcmVzc2lvbk1ldGhvZD10aGlzLmNvbXByZXNzaW9uTWV0aG9kLHRoaXMuZGVjb21wcmVzc2VkLmdldENvbXByZXNzZWRDb250ZW50PXRoaXMucHJlcGFyZUNvbXByZXNz''@;'; put 'put ''ZWRDb250ZW50KFYsVi5pbmRleCx0aGlzLmNvbXByZXNzZWRTaXplLE4pLHRoaXMuZGVjb21wcmVzc2VkLmdldENvbnRlbnQ9dGhpcy5wcmVwYXJlQ29udGVudChWLFYuaW5kZXgsdGhpcy5jb21wcmVzc2VkU2l6ZSxOLHRoaXMudW5jb21wcmVzc2VkU2l6ZSksdGhpcy5sb2FkT3B0aW9ucy5j''@;'; put 'put ''aGVja0NSQzMyJiYodGhpcy5kZWNvbXByZXNzZWQ9Ui50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLmRlY29tcHJlc3NlZC5nZXRDb250ZW50KCkpLFUuY3JjMzIodGhpcy5kZWNvbXByZXNzZWQpIT09dGhpcy5jcmMzMikpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogQ1JDMzIg''@;'; put 'put ''bWlzbWF0Y2giKX0scmVhZENlbnRyYWxQYXJ0OmZ1bmN0aW9uKFYpe2lmKHRoaXMudmVyc2lvbk1hZGVCeT1WLnJlYWRTdHJpbmcoMiksdGhpcy52ZXJzaW9uTmVlZGVkPVYucmVhZEludCgyKSx0aGlzLmJpdEZsYWc9Vi5yZWFkSW50KDIpLHRoaXMuY29tcHJlc3Npb25NZXRob2Q9Vi5yZWFk''@;'; put 'put ''U3RyaW5nKDIpLHRoaXMuZGF0ZT1WLnJlYWREYXRlKCksdGhpcy5jcmMzMj1WLnJlYWRJbnQoNCksdGhpcy5jb21wcmVzc2VkU2l6ZT1WLnJlYWRJbnQoNCksdGhpcy51bmNvbXByZXNzZWRTaXplPVYucmVhZEludCg0KSx0aGlzLmZpbGVOYW1lTGVuZ3RoPVYucmVhZEludCgyKSx0aGlzLmV4''@;'; put 'put ''dHJhRmllbGRzTGVuZ3RoPVYucmVhZEludCgyKSx0aGlzLmZpbGVDb21tZW50TGVuZ3RoPVYucmVhZEludCgyKSx0aGlzLmRpc2tOdW1iZXJTdGFydD1WLnJlYWRJbnQoMiksdGhpcy5pbnRlcm5hbEZpbGVBdHRyaWJ1dGVzPVYucmVhZEludCgyKSx0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0''@;'; put 'put ''ZXM9Vi5yZWFkSW50KDQpLHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9Vi5yZWFkSW50KDQpLHRoaXMuaXNFbmNyeXB0ZWQoKSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRlZCB6aXAgYXJlIG5vdCBzdXBwb3J0ZWQiKTt0aGlzLmZpbGVOYW1lPVYucmVhZFN0cmluZyh0aGlzLmZpbGVOYW1lTGVu''@;'; put 'put ''Z3RoKSx0aGlzLnJlYWRFeHRyYUZpZWxkcyhWKSx0aGlzLnBhcnNlWklQNjRFeHRyYUZpZWxkKFYpLHRoaXMuZmlsZUNvbW1lbnQ9Vi5yZWFkU3RyaW5nKHRoaXMuZmlsZUNvbW1lbnRMZW5ndGgpLHRoaXMuZGlyPSEhKDE2JnRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyl9LHBhcnNlWklQ''@;'; put 'put ''NjRFeHRyYUZpZWxkOmZ1bmN0aW9uKFYpe2lmKHRoaXMuZXh0cmFGaWVsZHNbMV0pe3ZhciBOPW5ldyBMKHRoaXMuZXh0cmFGaWVsZHNbMV0udmFsdWUpO3RoaXMudW5jb21wcmVzc2VkU2l6ZT09PVIuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMudW5jb21wcmVzc2VkU2l6ZT1OLnJlYWRJbnQo''@;'; put 'put ''OCkpLHRoaXMuY29tcHJlc3NlZFNpemU9PT1SLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmNvbXByZXNzZWRTaXplPU4ucmVhZEludCg4KSksdGhpcy5sb2NhbEhlYWRlck9mZnNldD09PVIuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9Ti5yZWFkSW50KDgpKSx0''@;'; put 'put ''aGlzLmRpc2tOdW1iZXJTdGFydD09PVIuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMuZGlza051bWJlclN0YXJ0PU4ucmVhZEludCg0KSl9fSxyZWFkRXh0cmFGaWVsZHM6ZnVuY3Rpb24oVil7dmFyIHosWSxGLE49Vi5pbmRleDtmb3IodGhpcy5leHRyYUZpZWxkcz10aGlzLmV4dHJhRmllbGRz''@;'; put 'put ''fHx7fTtWLmluZGV4PE4rdGhpcy5leHRyYUZpZWxkc0xlbmd0aDspej1WLnJlYWRJbnQoMiksWT1WLnJlYWRJbnQoMiksRj1WLnJlYWRTdHJpbmcoWSksdGhpcy5leHRyYUZpZWxkc1t6XT17aWQ6eixsZW5ndGg6WSx2YWx1ZTpGfX0saGFuZGxlVVRGODpmdW5jdGlvbigpe2lmKHRoaXMudXNl''@;'; put 'put ''VVRGOCgpKXRoaXMuZmlsZU5hbWU9VS51dGY4ZGVjb2RlKHRoaXMuZmlsZU5hbWUpLHRoaXMuZmlsZUNvbW1lbnQ9VS51dGY4ZGVjb2RlKHRoaXMuZmlsZUNvbW1lbnQpO2Vsc2V7dmFyIFY9dGhpcy5maW5kRXh0cmFGaWVsZFVuaWNvZGVQYXRoKCk7bnVsbCE9PVYmJih0aGlzLmZpbGVOYW1l''@;'; put 'put ''PVYpO3ZhciBOPXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudCgpO251bGwhPT1OJiYodGhpcy5maWxlQ29tbWVudD1OKX19LGZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGg6ZnVuY3Rpb24oKXt2YXIgVj10aGlzLmV4dHJhRmllbGRzWzI4Nzg5XTtpZihWKXt2YXIgTj1uZXcgTChW''@;'; put 'put ''LnZhbHVlKTtyZXR1cm4gMSE9PU4ucmVhZEludCgxKXx8VS5jcmMzMih0aGlzLmZpbGVOYW1lKSE9PU4ucmVhZEludCg0KT9udWxsOlUudXRmOGRlY29kZShOLnJlYWRTdHJpbmcoVi5sZW5ndGgtNSkpfXJldHVybiBudWxsfSxmaW5kRXh0cmFGaWVsZFVuaWNvZGVDb21tZW50OmZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIFY9dGhpcy5leHRyYUZpZWxkc1syNTQ2MV07aWYoVil7dmFyIE49bmV3IEwoVi52YWx1ZSk7cmV0dXJuIDEhPT1OLnJlYWRJbnQoMSl8fFUuY3JjMzIodGhpcy5maWxlQ29tbWVudCkhPT1OLnJlYWRJbnQoNCk/bnVsbDpVLnV0ZjhkZWNvZGUoTi5yZWFkU3RyaW5nKFYubGVuZ3Ro''@;'; put 'put ''LTUpKX1yZXR1cm4gbnVsbH19LHcuZXhwb3J0cz1IfSx7Ii4vY29tcHJlc3NlZE9iamVjdCI6MiwiLi9vYmplY3QiOjEzLCIuL3N0cmluZ1JlYWRlciI6MTUsIi4vdXRpbHMiOjIxfV0sMjQ6W2Z1bmN0aW9uKEMsdyxTKXsidXNlIHN0cmljdCI7dmFyIEg9e307KDAsQygiLi9saWIvdXRpbHMv''@;'; put 'put ''Y29tbW9uIikuYXNzaWduKShILEMoIi4vbGliL2RlZmxhdGUiKSxDKCIuL2xpYi9pbmZsYXRlIiksQygiLi9saWIvemxpYi9jb25zdGFudHMiKSksdy5leHBvcnRzPUh9LHsiLi9saWIvZGVmbGF0ZSI6MjUsIi4vbGliL2luZmxhdGUiOjI2LCIuL2xpYi91dGlscy9jb21tb24iOjI3LCIuL2xp''@;'; put 'put ''Yi96bGliL2NvbnN0YW50cyI6MzB9XSwyNTpbZnVuY3Rpb24oQyx3LFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgTD1DKCIuL3psaWIvZGVmbGF0ZS5qcyIpLFI9QygiLi91dGlscy9jb21tb24iKSx4PUMoIi4vdXRpbHMvc3RyaW5ncyIpLFU9QygiLi96bGliL21lc3NhZ2VzIiksSD1DKCIuL3psaWIv''@;'; put 'put ''enN0cmVhbSIpLHJlPWZ1bmN0aW9uKGtlKXt0aGlzLm9wdGlvbnM9Ui5hc3NpZ24oe2xldmVsOi0xLG1ldGhvZDo4LGNodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjE1LG1lbUxldmVsOjgsc3RyYXRlZ3k6MCx0bzoiIn0sa2V8fHt9KTt2YXIgcWU9dGhpcy5vcHRpb25zO3FlLnJhdyYmcWUu''@;'; put 'put ''d2luZG93Qml0cz4wP3FlLndpbmRvd0JpdHM9LXFlLndpbmRvd0JpdHM6cWUuZ3ppcCYmcWUud2luZG93Qml0cz4wJiZxZS53aW5kb3dCaXRzPDE2JiYocWUud2luZG93Qml0cys9MTYpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0''@;'; put 'put ''cm09bmV3IEgsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciBYPUwuZGVmbGF0ZUluaXQyKHRoaXMuc3RybSxxZS5sZXZlbCxxZS5tZXRob2QscWUud2luZG93Qml0cyxxZS5tZW1MZXZlbCxxZS5zdHJhdGVneSk7aWYoMCE9PVgpdGhyb3cgbmV3IEVycm9yKFVbWF0pO3FlLmhlYWRlciYmTC5k''@;'; put 'put ''ZWZsYXRlU2V0SGVhZGVyKHRoaXMuc3RybSxxZS5oZWFkZXIpfTtmdW5jdGlvbiBtZShrZSxxZSl7dmFyIFg9bmV3IHJlKHFlKTtpZihYLnB1c2goa2UsITApLFguZXJyKXRocm93IFgubXNnO3JldHVybiBYLnJlc3VsdH1yZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihrZSxxZSl7dmFyIGIs''@;'; put 'put ''ayxYPXRoaXMuc3RybSxmPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtrPXFlPT09fn5xZT9xZTohMD09PXFlPzQ6MCxYLmlucHV0PSJzdHJpbmciPT10eXBlb2Yga2U/eC5zdHJpbmcyYnVmKGtlKTprZSxYLm5leHRfaW49MCxYLmF2YWlsX2luPVguaW5w''@;'; put 'put ''dXQubGVuZ3RoO2Rve2lmKDA9PT1YLmF2YWlsX291dCYmKFgub3V0cHV0PW5ldyBSLkJ1ZjgoZiksWC5uZXh0X291dD0wLFguYXZhaWxfb3V0PWYpLDEhPT0oYj1MLmRlZmxhdGUoWCxrKSkmJjAhPT1iKXJldHVybiB0aGlzLm9uRW5kKGIpLHRoaXMuZW5kZWQ9ITAsITE7KDA9PT1YLmF2YWls''@;'; put 'put ''X291dHx8MD09PVguYXZhaWxfaW4mJjQ9PT1rKSYmdGhpcy5vbkRhdGEoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/eC5idWYyYmluc3RyaW5nKFIuc2hyaW5rQnVmKFgub3V0cHV0LFgubmV4dF9vdXQpKTpSLnNocmlua0J1ZihYLm91dHB1dCxYLm5leHRfb3V0KSl9d2hpbGUoKFguYXZh''@;'; put 'put ''aWxfaW4+MHx8MD09PVguYXZhaWxfb3V0KSYmMSE9PWIpO3JldHVybiA0IT09a3x8KGI9TC5kZWZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChiKSx0aGlzLmVuZGVkPSEwLDA9PT1iKX0scmUucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihrZSl7dGhpcy5jaHVua3MucHVzaChrZSl9''@;'; put 'put ''LHJlLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihrZSl7MD09PWtlJiYodGhpcy5yZXN1bHQ9InN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/dGhpcy5jaHVua3Muam9pbigiIik6Ui5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKSksdGhpcy5jaHVua3M9W10sdGhpcy5lcnI9a2UsdGhpcy5t''@;'; put 'put ''c2c9dGhpcy5zdHJtLm1zZ30sUy5EZWZsYXRlPXJlLFMuZGVmbGF0ZT1tZSxTLmRlZmxhdGVSYXc9ZnVuY3Rpb24gQ2Uoa2UscWUpe3JldHVybihxZT1xZXx8e30pLnJhdz0hMCxtZShrZSxxZSl9LFMuZ3ppcD1mdW5jdGlvbiBJZShrZSxxZSl7cmV0dXJuKHFlPXFlfHx7fSkuZ3ppcD0hMCxt''@;'; put 'put ''ZShrZSxxZSl9fSx7Ii4vdXRpbHMvY29tbW9uIjoyNywiLi91dGlscy9zdHJpbmdzIjoyOCwiLi96bGliL2RlZmxhdGUuanMiOjMyLCIuL3psaWIvbWVzc2FnZXMiOjM3LCIuL3psaWIvenN0cmVhbSI6Mzl9XSwyNjpbZnVuY3Rpb24oQyx3LFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgTD1DKCIuL3ps''@;'; put 'put ''aWIvaW5mbGF0ZS5qcyIpLFI9QygiLi91dGlscy9jb21tb24iKSx4PUMoIi4vdXRpbHMvc3RyaW5ncyIpLFU9QygiLi96bGliL2NvbnN0YW50cyIpLEg9QygiLi96bGliL21lc3NhZ2VzIiksVj1DKCIuL3psaWIvenN0cmVhbSIpLE49QygiLi96bGliL2d6aGVhZGVyIiksej1mdW5jdGlvbihX''@;'; put 'put ''KXt0aGlzLm9wdGlvbnM9Ui5hc3NpZ24oe2NodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjAsdG86IiJ9LFd8fHt9KTt2YXIgcT10aGlzLm9wdGlvbnM7cS5yYXcmJnEud2luZG93Qml0cz49MCYmcS53aW5kb3dCaXRzPDE2JiYocS53aW5kb3dCaXRzPS1xLndpbmRvd0JpdHMsMD09PXEud2lu''@;'; put 'put ''ZG93Qml0cyYmKHEud2luZG93Qml0cz0tMTUpKSxxLndpbmRvd0JpdHM+PTAmJnEud2luZG93Qml0czwxNiYmIShXJiZXLndpbmRvd0JpdHMpJiYocS53aW5kb3dCaXRzKz0zMikscS53aW5kb3dCaXRzPjE1JiZxLndpbmRvd0JpdHM8NDgmJiEoMTUmcS53aW5kb3dCaXRzKSYmKHEud2luZG93''@;'; put 'put ''Qml0c3w9MTUpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IFYsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciByZT1MLmluZmxhdGVJbml0Mih0aGlzLnN0cm0scS53aW5kb3dCaXRzKTtpZihyZSE9PVUuWl9PSyl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoSFtyZV0pO3RoaXMuaGVhZGVyPW5ldyBOLEwuaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpfTtmdW5jdGlvbiBZKFcscSl7dmFyIHJlPW5ldyB6KHEpO2lmKHJlLnB1c2goVywhMCkscmUuZXJyKXRocm93IHJlLm1zZztyZXR1cm4gcmUucmVzdWx0''@;'; put 'put ''fXoucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oVyxxKXt2YXIgQ2UsSWUsa2UscWUsWCxyZT10aGlzLnN0cm0sbWU9dGhpcy5vcHRpb25zLmNodW5rU2l6ZTtpZih0aGlzLmVuZGVkKXJldHVybiExO0llPXE9PT1+fnE/cTohMD09PXE/VS5aX0ZJTklTSDpVLlpfTk9fRkxVU0gscmUuaW5wdXQ9''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBXP3guYmluc3RyaW5nMmJ1ZihXKTpXLHJlLm5leHRfaW49MCxyZS5hdmFpbF9pbj1yZS5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PXJlLmF2YWlsX291dCYmKHJlLm91dHB1dD1uZXcgUi5CdWY4KG1lKSxyZS5uZXh0X291dD0wLHJlLmF2YWlsX291dD1tZSksKENl''@;'; put 'put ''PUwuaW5mbGF0ZShyZSxVLlpfTk9fRkxVU0gpKSE9PVUuWl9TVFJFQU1fRU5EJiZDZSE9PVUuWl9PSylyZXR1cm4gdGhpcy5vbkVuZChDZSksdGhpcy5lbmRlZD0hMCwhMTtyZS5uZXh0X291dCYmKDA9PT1yZS5hdmFpbF9vdXR8fENlPT09VS5aX1NUUkVBTV9FTkR8fDA9PT1yZS5hdmFpbF9p''@;'; put 'put ''biYmSWU9PT1VLlpfRklOSVNIKSYmKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvPyhrZT14LnV0Zjhib3JkZXIocmUub3V0cHV0LHJlLm5leHRfb3V0KSxxZT1yZS5uZXh0X291dC1rZSxYPXguYnVmMnN0cmluZyhyZS5vdXRwdXQsa2UpLHJlLm5leHRfb3V0PXFlLHJlLmF2YWlsX291dD1t''@;'; put 'put ''ZS1xZSxxZSYmUi5hcnJheVNldChyZS5vdXRwdXQscmUub3V0cHV0LGtlLHFlLDApLHRoaXMub25EYXRhKFgpKTp0aGlzLm9uRGF0YShSLnNocmlua0J1ZihyZS5vdXRwdXQscmUubmV4dF9vdXQpKSl9d2hpbGUocmUuYXZhaWxfaW4+MCYmQ2UhPT1VLlpfU1RSRUFNX0VORCk7cmV0dXJuIENl''@;'; put 'put ''PT09VS5aX1NUUkVBTV9FTkQmJihJZT1VLlpfRklOSVNIKSxJZSE9PVUuWl9GSU5JU0h8fChDZT1MLmluZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKENlKSx0aGlzLmVuZGVkPSEwLENlPT09VS5aX09LKX0sei5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKFcpe3RoaXMuY2h1bmtz''@;'; put 'put ''LnB1c2goVyl9LHoucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKFcpe1c9PT1VLlpfT0smJih0aGlzLnJlc3VsdD0ic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz90aGlzLmNodW5rcy5qb2luKCIiKTpSLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVy''@;'; put 'put ''cj1XLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LFMuSW5mbGF0ZT16LFMuaW5mbGF0ZT1ZLFMuaW5mbGF0ZVJhdz1mdW5jdGlvbiBGKFcscSl7cmV0dXJuKHE9cXx8e30pLnJhdz0hMCxZKFcscSl9LFMudW5nemlwPVl9LHsiLi91dGlscy9jb21tb24iOjI3LCIuL3V0aWxzL3N0cmluZ3MiOjI4''@;'; put 'put ''LCIuL3psaWIvY29uc3RhbnRzIjozMCwiLi96bGliL2d6aGVhZGVyIjozMywiLi96bGliL2luZmxhdGUuanMiOjM1LCIuL3psaWIvbWVzc2FnZXMiOjM3LCIuL3psaWIvenN0cmVhbSI6Mzl9XSwyNzpbZnVuY3Rpb24oQyx3LFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgTD10eXBlb2YgVWludDhBcnJh''@;'; put 'put ''eTwidSImJnR5cGVvZiBVaW50MTZBcnJheTwidSImJnR5cGVvZiBJbnQzMkFycmF5PCJ1IjtTLmFzc2lnbj1mdW5jdGlvbihVKXtmb3IodmFyIEg9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO0gubGVuZ3RoOyl7dmFyIFY9SC5zaGlmdCgpO2lmKFYpe2lmKCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgVil0aHJvdyBuZXcgVHlwZUVycm9yKFYrIm11c3QgYmUgbm9uLW9iamVjdCIpO2Zvcih2YXIgTiBpbiBWKVYuaGFzT3duUHJvcGVydHkoTikmJihVW05dPVZbTl0pfX1yZXR1cm4gVX0sUy5zaHJpbmtCdWY9ZnVuY3Rpb24oVSxIKXtyZXR1cm4gVS5sZW5ndGg9PT1IP1U6''@;'; put 'put ''VS5zdWJhcnJheT9VLnN1YmFycmF5KDAsSCk6KFUubGVuZ3RoPUgsVSl9O3ZhciBSPXthcnJheVNldDpmdW5jdGlvbihVLEgsVixOLHope2lmKEguc3ViYXJyYXkmJlUuc3ViYXJyYXkpVS5zZXQoSC5zdWJhcnJheShWLFYrTikseik7ZWxzZSBmb3IodmFyIFk9MDtZPE47WSsrKVVbeitZXT1I''@;'; put 'put ''W1YrWV19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oVSl7dmFyIEgsVixOLHosWSxGO2ZvcihOPTAsSD0wLFY9VS5sZW5ndGg7SDxWO0grKylOKz1VW0hdLmxlbmd0aDtmb3IoRj1uZXcgVWludDhBcnJheShOKSx6PTAsSD0wLFY9VS5sZW5ndGg7SDxWO0grKylGLnNldChZPVVbSF0seikseis9''@;'; put 'put ''WS5sZW5ndGg7cmV0dXJuIEZ9fSx4PXthcnJheVNldDpmdW5jdGlvbihVLEgsVixOLHope2Zvcih2YXIgWT0wO1k8TjtZKyspVVt6K1ldPUhbVitZXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihVKXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sVSl9fTtTLnNldFR5cGVkPWZ1bmN0aW9uKFUp''@;'; put 'put ''e1U/KFMuQnVmOD1VaW50OEFycmF5LFMuQnVmMTY9VWludDE2QXJyYXksUy5CdWYzMj1JbnQzMkFycmF5LFMuYXNzaWduKFMsUikpOihTLkJ1Zjg9QXJyYXksUy5CdWYxNj1BcnJheSxTLkJ1ZjMyPUFycmF5LFMuYXNzaWduKFMseCkpfSxTLnNldFR5cGVkKEwpfSx7fV0sMjg6W2Z1bmN0aW9u''@;'; put 'put ''KEMsdyxTKXsidXNlIHN0cmljdCI7dmFyIEw9QygiLi9jb21tb24iKSxSPSEwLHg9ITA7dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxbMF0pfWNhdGNoe1I9ITF9dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgxKSl9Y2F0Y2h7eD0h''@;'; put 'put ''MX1mb3IodmFyIFU9bmV3IEwuQnVmOCgyNTYpLEg9MDtIPDI1NjtIKyspVVtIXT1IPj0yNTI/NjpIPj0yNDg/NTpIPj0yNDA/NDpIPj0yMjQ/MzpIPj0xOTI/MjoxO2Z1bmN0aW9uIFYoTix6KXtpZih6PDY1NTM3JiYoTi5zdWJhcnJheSYmeHx8IU4uc3ViYXJyYXkmJlIpKXJldHVybiBTdHJp''@;'; put 'put ''bmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsTC5zaHJpbmtCdWYoTix6KSk7Zm9yKHZhciBZPSIiLEY9MDtGPHo7RisrKVkrPVN0cmluZy5mcm9tQ2hhckNvZGUoTltGXSk7cmV0dXJuIFl9VVsyNTRdPVVbMjU0XT0xLFMuc3RyaW5nMmJ1Zj1mdW5jdGlvbihOKXt2YXIgeixZLEYsVyxxLHJl''@;'; put 'put ''PU4ubGVuZ3RoLG1lPTA7Zm9yKFc9MDtXPHJlO1crKyk1NTI5Nj09KDY0NTEyJihZPU4uY2hhckNvZGVBdChXKSkpJiZXKzE8cmUmJjU2MzIwPT0oNjQ1MTImKEY9Ti5jaGFyQ29kZUF0KFcrMSkpKSYmKFk9NjU1MzYrKFktNTUyOTY8PDEwKSsoRi01NjMyMCksVysrKSxtZSs9WTwxMjg/MTpZ''@;'; put 'put ''PDIwNDg/MjpZPDY1NTM2PzM6NDtmb3Ioej1uZXcgTC5CdWY4KG1lKSxxPTAsVz0wO3E8bWU7VysrKTU1Mjk2PT0oNjQ1MTImKFk9Ti5jaGFyQ29kZUF0KFcpKSkmJlcrMTxyZSYmNTYzMjA9PSg2NDUxMiYoRj1OLmNoYXJDb2RlQXQoVysxKSkpJiYoWT02NTUzNisoWS01NTI5Njw8MTApKyhG''@;'; put 'put ''LTU2MzIwKSxXKyspLFk8MTI4P3pbcSsrXT1ZOlk8MjA0OD8oeltxKytdPTE5MnxZPj4+Nix6W3ErK109MTI4fDYzJlkpOlk8NjU1MzY/KHpbcSsrXT0yMjR8WT4+PjEyLHpbcSsrXT0xMjh8WT4+PjYmNjMseltxKytdPTEyOHw2MyZZKTooeltxKytdPTI0MHxZPj4+MTgseltxKytdPTEyOHxZ''@;'; put 'put ''Pj4+MTImNjMseltxKytdPTEyOHxZPj4+NiY2Myx6W3ErK109MTI4fDYzJlkpO3JldHVybiB6fSxTLmJ1ZjJiaW5zdHJpbmc9ZnVuY3Rpb24oTil7cmV0dXJuIFYoTixOLmxlbmd0aCl9LFMuYmluc3RyaW5nMmJ1Zj1mdW5jdGlvbihOKXtmb3IodmFyIHo9bmV3IEwuQnVmOChOLmxlbmd0aCks''@;'; put 'put ''WT0wLEY9ei5sZW5ndGg7WTxGO1krKyl6W1ldPU4uY2hhckNvZGVBdChZKTtyZXR1cm4gen0sUy5idWYyc3RyaW5nPWZ1bmN0aW9uKE4seil7dmFyIFksRixXLHEscmU9enx8Ti5sZW5ndGgsbWU9bmV3IEFycmF5KDIqcmUpO2ZvcihGPTAsWT0wO1k8cmU7KWlmKChXPU5bWSsrXSk8MTI4KW1l''@;'; put 'put ''W0YrK109VztlbHNlIGlmKChxPVVbV10pPjQpbWVbRisrXT02NTUzMyxZKz1xLTE7ZWxzZXtmb3IoVyY9Mj09PXE/MzE6Mz09PXE/MTU6NztxPjEmJlk8cmU7KVc9Vzw8Nnw2MyZOW1krK10scS0tO3E+MT9tZVtGKytdPTY1NTMzOlc8NjU1MzY/bWVbRisrXT1XOihtZVtGKytdPTU1Mjk2fChX''@;'; put 'put ''LT02NTUzNik+PjEwJjEwMjMsbWVbRisrXT01NjMyMHwxMDIzJlcpfXJldHVybiBWKG1lLEYpfSxTLnV0Zjhib3JkZXI9ZnVuY3Rpb24oTix6KXt2YXIgWTtmb3IoKHo9enx8Ti5sZW5ndGgpPk4ubGVuZ3RoJiYoej1OLmxlbmd0aCksWT16LTE7WT49MCYmMTI4PT0oMTkyJk5bWV0pOylZLS07''@;'; put 'put ''cmV0dXJuIFk8MHx8MD09PVk/ejpZK1VbTltZXV0+ej9ZOnp9fSx7Ii4vY29tbW9uIjoyN31dLDI5OltmdW5jdGlvbihDLHcsUyl7InVzZSBzdHJpY3QiO3cuZXhwb3J0cz1mdW5jdGlvbiBMKFIseCxVLEgpe2Zvcih2YXIgVj02NTUzNSZSLE49Uj4+PjE2JjY1NTM1LHo9MDswIT09VTspe1Ut''@;'; put 'put ''PXo9VT4yZTM/MmUzOlU7ZG97Tj1OKyhWPVYreFtIKytdfDApfDB9d2hpbGUoLS16KTtWJT02NTUyMSxOJT02NTUyMX1yZXR1cm4gVnxOPDwxNn19LHt9XSwzMDpbZnVuY3Rpb24oQyx3LFMpe3cuZXhwb3J0cz17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoy''@;'; put 'put ''LFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNTSU9OOjAsWl9C''@;'; put 'put ''RVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dOOjIsWl9ERUZM''@;'; put 'put ''QVRFRDo4fX0se31dLDMxOltmdW5jdGlvbihDLHcsUyl7InVzZSBzdHJpY3QiO3ZhciBSPWZ1bmN0aW9uIEwoKXtmb3IodmFyIFUsSD1bXSxWPTA7VjwyNTY7VisrKXtVPVY7Zm9yKHZhciBOPTA7Tjw4O04rKylVPTEmVT8zOTg4MjkyMzg0XlU+Pj4xOlU+Pj4xO0hbVl09VX1yZXR1cm4gSH0o''@;'; put 'put ''KTt3LmV4cG9ydHM9ZnVuY3Rpb24geChVLEgsVixOKXt2YXIgej1SLFk9TitWO1VePS0xO2Zvcih2YXIgRj1OO0Y8WTtGKyspVT1VPj4+OF56WzI1NSYoVV5IW0ZdKV07cmV0dXJuLTFeVX19LHt9XSwzMjpbZnVuY3Rpb24oQyx3LFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgTD1DKCIuLi91dGlscy9j''@;'; put 'put ''b21tb24iKSxSPUMoIi4vdHJlZXMiKSx4PUMoIi4vYWRsZXIzMiIpLFU9QygiLi9jcmMzMiIpLEg9QygiLi9tZXNzYWdlcyIpLGR0PTI2MjtmdW5jdGlvbiBLZShHZSxVdCl7cmV0dXJuIEdlLm1zZz1IW1V0XSxVdH1mdW5jdGlvbiAkdChHZSl7cmV0dXJuKEdlPDwxKS0oR2U+ND85OjApfWZ1''@;'; put 'put ''bmN0aW9uIFJ0KEdlKXtmb3IodmFyIFV0PUdlLmxlbmd0aDstLVV0Pj0wOylHZVtVdF09MH1mdW5jdGlvbiBMdChHZSl7dmFyIFV0PUdlLnN0YXRlLHZyPVV0LnBlbmRpbmc7dnI+R2UuYXZhaWxfb3V0JiYodnI9R2UuYXZhaWxfb3V0KSwwIT09dnImJihMLmFycmF5U2V0KEdlLm91dHB1dCxV''@;'; put 'put ''dC5wZW5kaW5nX2J1ZixVdC5wZW5kaW5nX291dCx2cixHZS5uZXh0X291dCksR2UubmV4dF9vdXQrPXZyLFV0LnBlbmRpbmdfb3V0Kz12cixHZS50b3RhbF9vdXQrPXZyLEdlLmF2YWlsX291dC09dnIsVXQucGVuZGluZy09dnIsMD09PVV0LnBlbmRpbmcmJihVdC5wZW5kaW5nX291dD0wKSl9''@;'; put 'put ''ZnVuY3Rpb24gR3QoR2UsVXQpe1IuX3RyX2ZsdXNoX2Jsb2NrKEdlLEdlLmJsb2NrX3N0YXJ0Pj0wP0dlLmJsb2NrX3N0YXJ0Oi0xLEdlLnN0cnN0YXJ0LUdlLmJsb2NrX3N0YXJ0LFV0KSxHZS5ibG9ja19zdGFydD1HZS5zdHJzdGFydCxMdChHZS5zdHJtKX1mdW5jdGlvbiBndChHZSxVdCl7''@;'; put 'put ''R2UucGVuZGluZ19idWZbR2UucGVuZGluZysrXT1VdH1mdW5jdGlvbiBYdChHZSxVdCl7R2UucGVuZGluZ19idWZbR2UucGVuZGluZysrXT1VdD4+PjgmMjU1LEdlLnBlbmRpbmdfYnVmW0dlLnBlbmRpbmcrK109MjU1JlV0fWZ1bmN0aW9uIExyKEdlLFV0LHZyLHh0KXt2YXIgQnQ9R2UuYXZh''@;'; put 'put ''aWxfaW47cmV0dXJuIEJ0Pnh0JiYoQnQ9eHQpLDA9PT1CdD8wOihHZS5hdmFpbF9pbi09QnQsTC5hcnJheVNldChVdCxHZS5pbnB1dCxHZS5uZXh0X2luLEJ0LHZyKSwxPT09R2Uuc3RhdGUud3JhcD9HZS5hZGxlcj14KEdlLmFkbGVyLFV0LEJ0LHZyKToyPT09R2Uuc3RhdGUud3JhcCYmKEdl''@;'; put 'put ''LmFkbGVyPVUoR2UuYWRsZXIsVXQsQnQsdnIpKSxHZS5uZXh0X2luKz1CdCxHZS50b3RhbF9pbis9QnQsQnQpfWZ1bmN0aW9uIGxuKEdlLFV0KXt2YXIgQnQsem4sdnI9R2UubWF4X2NoYWluX2xlbmd0aCx4dD1HZS5zdHJzdGFydCxHbj1HZS5wcmV2X2xlbmd0aCx5bj1HZS5uaWNlX21hdGNo''@;'; put 'put ''LHZpPUdlLnN0cnN0YXJ0PkdlLndfc2l6ZS1kdD9HZS5zdHJzdGFydC0oR2Uud19zaXplLWR0KTowLHJyPUdlLndpbmRvdyxocj1HZS53X21hc2sscG89R2UucHJldix2bj1HZS5zdHJzdGFydCsyNTgsQm49cnJbeHQrR24tMV0samE9cnJbeHQrR25dO0dlLnByZXZfbGVuZ3RoPj1HZS5nb29k''@;'; put 'put ''X21hdGNoJiYodnI+Pj0yKSx5bj5HZS5sb29rYWhlYWQmJih5bj1HZS5sb29rYWhlYWQpO2Rve2lmKHJyWyhCdD1VdCkrR25dPT09amEmJnJyW0J0K0duLTFdPT09Qm4mJnJyW0J0XT09PXJyW3h0XSYmcnJbKytCdF09PT1yclt4dCsxXSl7eHQrPTIsQnQrKztkb3t9d2hpbGUocnJbKyt4dF09''@;'; put 'put ''PT1yclsrK0J0XSYmcnJbKyt4dF09PT1yclsrK0J0XSYmcnJbKyt4dF09PT1yclsrK0J0XSYmcnJbKyt4dF09PT1yclsrK0J0XSYmcnJbKyt4dF09PT1yclsrK0J0XSYmcnJbKyt4dF09PT1yclsrK0J0XSYmcnJbKyt4dF09PT1yclsrK0J0XSYmcnJbKyt4dF09PT1yclsrK0J0XSYmeHQ8dm4p''@;'; put 'put ''O2lmKHpuPTI1OC0odm4teHQpLHh0PXZuLTI1OCx6bj5Hbil7aWYoR2UubWF0Y2hfc3RhcnQ9VXQsR249em4sem4+PXluKWJyZWFrO0JuPXJyW3h0K0duLTFdLGphPXJyW3h0K0duXX19fXdoaWxlKChVdD1wb1tVdCZocl0pPnZpJiYwIT09LS12cik7cmV0dXJuIEduPD1HZS5sb29rYWhlYWQ/''@;'; put 'put ''R246R2UubG9va2FoZWFkfWZ1bmN0aW9uIE9uKEdlKXt2YXIgdnIseHQsQnQsem4sR24sVXQ9R2Uud19zaXplO2Rve2lmKHpuPUdlLndpbmRvd19zaXplLUdlLmxvb2thaGVhZC1HZS5zdHJzdGFydCxHZS5zdHJzdGFydD49VXQrKFV0LWR0KSl7TC5hcnJheVNldChHZS53aW5kb3csR2Uud2lu''@;'; put 'put ''ZG93LFV0LFV0LDApLEdlLm1hdGNoX3N0YXJ0LT1VdCxHZS5zdHJzdGFydC09VXQsR2UuYmxvY2tfc3RhcnQtPVV0LHZyPXh0PUdlLmhhc2hfc2l6ZTtkb3tCdD1HZS5oZWFkWy0tdnJdLEdlLmhlYWRbdnJdPUJ0Pj1VdD9CdC1VdDowfXdoaWxlKC0teHQpO3ZyPXh0PVV0O2Rve0J0PUdlLnBy''@;'; put 'put ''ZXZbLS12cl0sR2UucHJldlt2cl09QnQ+PVV0P0J0LVV0OjB9d2hpbGUoLS14dCk7em4rPVV0fWlmKDA9PT1HZS5zdHJtLmF2YWlsX2luKWJyZWFrO2lmKHh0PUxyKEdlLnN0cm0sR2Uud2luZG93LEdlLnN0cnN0YXJ0K0dlLmxvb2thaGVhZCx6biksR2UubG9va2FoZWFkKz14dCxHZS5sb29r''@;'; put 'put ''YWhlYWQrR2UuaW5zZXJ0Pj0zKWZvcihHZS5pbnNfaD1HZS53aW5kb3dbR249R2Uuc3Ryc3RhcnQtR2UuaW5zZXJ0XSxHZS5pbnNfaD0oR2UuaW5zX2g8PEdlLmhhc2hfc2hpZnReR2Uud2luZG93W0duKzFdKSZHZS5oYXNoX21hc2s7R2UuaW5zZXJ0JiYoR2UuaW5zX2g9KEdlLmluc19oPDxH''@;'; put 'put ''ZS5oYXNoX3NoaWZ0XkdlLndpbmRvd1tHbiszLTFdKSZHZS5oYXNoX21hc2ssR2UucHJldltHbiZHZS53X21hc2tdPUdlLmhlYWRbR2UuaW5zX2hdLEdlLmhlYWRbR2UuaW5zX2hdPUduLEduKyssR2UuaW5zZXJ0LS0sIShHZS5sb29rYWhlYWQrR2UuaW5zZXJ0PDMpKTspO313aGlsZShHZS5s''@;'; put 'put ''b29rYWhlYWQ8ZHQmJjAhPT1HZS5zdHJtLmF2YWlsX2luKX1mdW5jdGlvbiB0cihHZSxVdCl7Zm9yKHZhciB2cix4dDs7KXtpZihHZS5sb29rYWhlYWQ8ZHQpe2lmKE9uKEdlKSxHZS5sb29rYWhlYWQ8ZHQmJjA9PT1VdClyZXR1cm4gMTtpZigwPT09R2UubG9va2FoZWFkKWJyZWFrfWlmKHZy''@;'; put 'put ''PTAsR2UubG9va2FoZWFkPj0zJiYoR2UuaW5zX2g9KEdlLmluc19oPDxHZS5oYXNoX3NoaWZ0XkdlLndpbmRvd1tHZS5zdHJzdGFydCszLTFdKSZHZS5oYXNoX21hc2ssdnI9R2UucHJldltHZS5zdHJzdGFydCZHZS53X21hc2tdPUdlLmhlYWRbR2UuaW5zX2hdLEdlLmhlYWRbR2UuaW5zX2hd''@;'; put 'put ''PUdlLnN0cnN0YXJ0KSwwIT09dnImJkdlLnN0cnN0YXJ0LXZyPD1HZS53X3NpemUtZHQmJihHZS5tYXRjaF9sZW5ndGg9bG4oR2UsdnIpKSxHZS5tYXRjaF9sZW5ndGg+PTMpaWYoeHQ9Ui5fdHJfdGFsbHkoR2UsR2Uuc3Ryc3RhcnQtR2UubWF0Y2hfc3RhcnQsR2UubWF0Y2hfbGVuZ3RoLTMp''@;'; put 'put ''LEdlLmxvb2thaGVhZC09R2UubWF0Y2hfbGVuZ3RoLEdlLm1hdGNoX2xlbmd0aDw9R2UubWF4X2xhenlfbWF0Y2gmJkdlLmxvb2thaGVhZD49Myl7R2UubWF0Y2hfbGVuZ3RoLS07ZG97R2Uuc3Ryc3RhcnQrKyxHZS5pbnNfaD0oR2UuaW5zX2g8PEdlLmhhc2hfc2hpZnReR2Uud2luZG93W0dl''@;'; put 'put ''LnN0cnN0YXJ0KzMtMV0pJkdlLmhhc2hfbWFzayx2cj1HZS5wcmV2W0dlLnN0cnN0YXJ0JkdlLndfbWFza109R2UuaGVhZFtHZS5pbnNfaF0sR2UuaGVhZFtHZS5pbnNfaF09R2Uuc3Ryc3RhcnR9d2hpbGUoMCE9PS0tR2UubWF0Y2hfbGVuZ3RoKTtHZS5zdHJzdGFydCsrfWVsc2UgR2Uuc3Ry''@;'; put 'put ''c3RhcnQrPUdlLm1hdGNoX2xlbmd0aCxHZS5tYXRjaF9sZW5ndGg9MCxHZS5pbnNfaD1HZS53aW5kb3dbR2Uuc3Ryc3RhcnRdLEdlLmluc19oPShHZS5pbnNfaDw8R2UuaGFzaF9zaGlmdF5HZS53aW5kb3dbR2Uuc3Ryc3RhcnQrMV0pJkdlLmhhc2hfbWFzaztlbHNlIHh0PVIuX3RyX3RhbGx5''@;'; put 'put ''KEdlLDAsR2Uud2luZG93W0dlLnN0cnN0YXJ0XSksR2UubG9va2FoZWFkLS0sR2Uuc3Ryc3RhcnQrKztpZih4dCYmKEd0KEdlLCExKSwwPT09R2Uuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBHZS5pbnNlcnQ9R2Uuc3Ryc3RhcnQ8Mj9HZS5zdHJzdGFydDoyLDQ9PT1VdD8oR3Qo''@;'; put 'put ''R2UsITApLDA9PT1HZS5zdHJtLmF2YWlsX291dD8zOjQpOkdlLmxhc3RfbGl0JiYoR3QoR2UsITEpLDA9PT1HZS5zdHJtLmF2YWlsX291dCk/MToyfWZ1bmN0aW9uIEhuKEdlLFV0KXtmb3IodmFyIHZyLHh0LEJ0Ozspe2lmKEdlLmxvb2thaGVhZDxkdCl7aWYoT24oR2UpLEdlLmxvb2thaGVh''@;'; put 'put ''ZDxkdCYmMD09PVV0KXJldHVybiAxO2lmKDA9PT1HZS5sb29rYWhlYWQpYnJlYWt9aWYodnI9MCxHZS5sb29rYWhlYWQ+PTMmJihHZS5pbnNfaD0oR2UuaW5zX2g8PEdlLmhhc2hfc2hpZnReR2Uud2luZG93W0dlLnN0cnN0YXJ0KzMtMV0pJkdlLmhhc2hfbWFzayx2cj1HZS5wcmV2W0dlLnN0''@;'; put 'put ''cnN0YXJ0JkdlLndfbWFza109R2UuaGVhZFtHZS5pbnNfaF0sR2UuaGVhZFtHZS5pbnNfaF09R2Uuc3Ryc3RhcnQpLEdlLnByZXZfbGVuZ3RoPUdlLm1hdGNoX2xlbmd0aCxHZS5wcmV2X21hdGNoPUdlLm1hdGNoX3N0YXJ0LEdlLm1hdGNoX2xlbmd0aD0yLDAhPT12ciYmR2UucHJldl9sZW5n''@;'; put 'put ''dGg8R2UubWF4X2xhenlfbWF0Y2gmJkdlLnN0cnN0YXJ0LXZyPD1HZS53X3NpemUtZHQmJihHZS5tYXRjaF9sZW5ndGg9bG4oR2UsdnIpLEdlLm1hdGNoX2xlbmd0aDw9NSYmKDE9PT1HZS5zdHJhdGVneXx8Mz09PUdlLm1hdGNoX2xlbmd0aCYmR2Uuc3Ryc3RhcnQtR2UubWF0Y2hfc3RhcnQ+''@;'; put 'put ''NDA5NikmJihHZS5tYXRjaF9sZW5ndGg9MikpLEdlLnByZXZfbGVuZ3RoPj0zJiZHZS5tYXRjaF9sZW5ndGg8PUdlLnByZXZfbGVuZ3RoKXtCdD1HZS5zdHJzdGFydCtHZS5sb29rYWhlYWQtMyx4dD1SLl90cl90YWxseShHZSxHZS5zdHJzdGFydC0xLUdlLnByZXZfbWF0Y2gsR2UucHJldl9s''@;'; put 'put ''ZW5ndGgtMyksR2UubG9va2FoZWFkLT1HZS5wcmV2X2xlbmd0aC0xLEdlLnByZXZfbGVuZ3RoLT0yO2RveysrR2Uuc3Ryc3RhcnQ8PUJ0JiYoR2UuaW5zX2g9KEdlLmluc19oPDxHZS5oYXNoX3NoaWZ0XkdlLndpbmRvd1tHZS5zdHJzdGFydCszLTFdKSZHZS5oYXNoX21hc2ssdnI9R2UucHJl''@;'; put 'put ''dltHZS5zdHJzdGFydCZHZS53X21hc2tdPUdlLmhlYWRbR2UuaW5zX2hdLEdlLmhlYWRbR2UuaW5zX2hdPUdlLnN0cnN0YXJ0KX13aGlsZSgwIT09LS1HZS5wcmV2X2xlbmd0aCk7aWYoR2UubWF0Y2hfYXZhaWxhYmxlPTAsR2UubWF0Y2hfbGVuZ3RoPTIsR2Uuc3Ryc3RhcnQrKyx4dCYmKEd0''@;'; put 'put ''KEdlLCExKSwwPT09R2Uuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfWVsc2UgaWYoR2UubWF0Y2hfYXZhaWxhYmxlKXtpZigoeHQ9Ui5fdHJfdGFsbHkoR2UsMCxHZS53aW5kb3dbR2Uuc3Ryc3RhcnQtMV0pKSYmR3QoR2UsITEpLEdlLnN0cnN0YXJ0KyssR2UubG9va2FoZWFkLS0sMD09PUdl''@;'; put 'put ''LnN0cm0uYXZhaWxfb3V0KXJldHVybiAxfWVsc2UgR2UubWF0Y2hfYXZhaWxhYmxlPTEsR2Uuc3Ryc3RhcnQrKyxHZS5sb29rYWhlYWQtLX1yZXR1cm4gR2UubWF0Y2hfYXZhaWxhYmxlJiYoeHQ9Ui5fdHJfdGFsbHkoR2UsMCxHZS53aW5kb3dbR2Uuc3Ryc3RhcnQtMV0pLEdlLm1hdGNoX2F2''@;'; put 'put ''YWlsYWJsZT0wKSxHZS5pbnNlcnQ9R2Uuc3Ryc3RhcnQ8Mj9HZS5zdHJzdGFydDoyLDQ9PT1VdD8oR3QoR2UsITApLDA9PT1HZS5zdHJtLmF2YWlsX291dD8zOjQpOkdlLmxhc3RfbGl0JiYoR3QoR2UsITEpLDA9PT1HZS5zdHJtLmF2YWlsX291dCk/MToyfXZhciBTbixabj1mdW5jdGlvbihH''@;'; put 'put ''ZSxVdCx2cix4dCxCdCl7dGhpcy5nb29kX2xlbmd0aD1HZSx0aGlzLm1heF9sYXp5PVV0LHRoaXMubmljZV9sZW5ndGg9dnIsdGhpcy5tYXhfY2hhaW49eHQsdGhpcy5mdW5jPUJ0fTtmdW5jdGlvbiBUdCgpe3RoaXMuc3RybT1udWxsLHRoaXMuc3RhdHVzPTAsdGhpcy5wZW5kaW5nX2J1Zj1u''@;'; put 'put ''dWxsLHRoaXMucGVuZGluZ19idWZfc2l6ZT0wLHRoaXMucGVuZGluZ19vdXQ9MCx0aGlzLnBlbmRpbmc9MCx0aGlzLndyYXA9MCx0aGlzLmd6aGVhZD1udWxsLHRoaXMuZ3ppbmRleD0wLHRoaXMubWV0aG9kPTgsdGhpcy5sYXN0X2ZsdXNoPS0xLHRoaXMud19zaXplPTAsdGhpcy53X2JpdHM9''@;'; put 'put ''MCx0aGlzLndfbWFzaz0wLHRoaXMud2luZG93PW51bGwsdGhpcy53aW5kb3dfc2l6ZT0wLHRoaXMucHJldj1udWxsLHRoaXMuaGVhZD1udWxsLHRoaXMuaW5zX2g9MCx0aGlzLmhhc2hfc2l6ZT0wLHRoaXMuaGFzaF9iaXRzPTAsdGhpcy5oYXNoX21hc2s9MCx0aGlzLmhhc2hfc2hpZnQ9MCx0''@;'; put 'put ''aGlzLmJsb2NrX3N0YXJ0PTAsdGhpcy5tYXRjaF9sZW5ndGg9MCx0aGlzLnByZXZfbWF0Y2g9MCx0aGlzLm1hdGNoX2F2YWlsYWJsZT0wLHRoaXMuc3Ryc3RhcnQ9MCx0aGlzLm1hdGNoX3N0YXJ0PTAsdGhpcy5sb29rYWhlYWQ9MCx0aGlzLnByZXZfbGVuZ3RoPTAsdGhpcy5tYXhfY2hhaW5f''@;'; put 'put ''bGVuZ3RoPTAsdGhpcy5tYXhfbGF6eV9tYXRjaD0wLHRoaXMubGV2ZWw9MCx0aGlzLnN0cmF0ZWd5PTAsdGhpcy5nb29kX21hdGNoPTAsdGhpcy5uaWNlX21hdGNoPTAsdGhpcy5keW5fbHRyZWU9bmV3IEwuQnVmMTYoMTE0NiksdGhpcy5keW5fZHRyZWU9bmV3IEwuQnVmMTYoMTIyKSx0aGlz''@;'; put 'put ''LmJsX3RyZWU9bmV3IEwuQnVmMTYoNzgpLFJ0KHRoaXMuZHluX2x0cmVlKSxSdCh0aGlzLmR5bl9kdHJlZSksUnQodGhpcy5ibF90cmVlKSx0aGlzLmxfZGVzYz1udWxsLHRoaXMuZF9kZXNjPW51bGwsdGhpcy5ibF9kZXNjPW51bGwsdGhpcy5ibF9jb3VudD1uZXcgTC5CdWYxNigxNiksdGhp''@;'; put 'put ''cy5oZWFwPW5ldyBMLkJ1ZjE2KDU3MyksUnQodGhpcy5oZWFwKSx0aGlzLmhlYXBfbGVuPTAsdGhpcy5oZWFwX21heD0wLHRoaXMuZGVwdGg9bmV3IEwuQnVmMTYoNTczKSxSdCh0aGlzLmRlcHRoKSx0aGlzLmxfYnVmPTAsdGhpcy5saXRfYnVmc2l6ZT0wLHRoaXMubGFzdF9saXQ9MCx0aGlz''@;'; put 'put ''LmRfYnVmPTAsdGhpcy5vcHRfbGVuPTAsdGhpcy5zdGF0aWNfbGVuPTAsdGhpcy5tYXRjaGVzPTAsdGhpcy5pbnNlcnQ9MCx0aGlzLmJpX2J1Zj0wLHRoaXMuYmlfdmFsaWQ9MH1mdW5jdGlvbiBBcihHZSl7dmFyIFV0O3JldHVybiBHZSYmR2Uuc3RhdGU/KEdlLnRvdGFsX2luPUdlLnRvdGFs''@;'; put 'put ''X291dD0wLEdlLmRhdGFfdHlwZT0yLChVdD1HZS5zdGF0ZSkucGVuZGluZz0wLFV0LnBlbmRpbmdfb3V0PTAsVXQud3JhcDwwJiYoVXQud3JhcD0tVXQud3JhcCksVXQuc3RhdHVzPVV0LndyYXA/NDI6MTEzLEdlLmFkbGVyPTI9PT1VdC53cmFwPzA6MSxVdC5sYXN0X2ZsdXNoPTAsUi5fdHJf''@;'; put 'put ''aW5pdChVdCksMCk6S2UoR2UsLTIpfWZ1bmN0aW9uIF9uKEdlKXt2YXIgVXQ9QXIoR2UpO3JldHVybiAwPT09VXQmJmZ1bmN0aW9uIHhyKEdlKXtHZS53aW5kb3dfc2l6ZT0yKkdlLndfc2l6ZSxSdChHZS5oZWFkKSxHZS5tYXhfbGF6eV9tYXRjaD1TbltHZS5sZXZlbF0ubWF4X2xhenksR2Uu''@;'; put 'put ''Z29vZF9tYXRjaD1TbltHZS5sZXZlbF0uZ29vZF9sZW5ndGgsR2UubmljZV9tYXRjaD1TbltHZS5sZXZlbF0ubmljZV9sZW5ndGgsR2UubWF4X2NoYWluX2xlbmd0aD1TbltHZS5sZXZlbF0ubWF4X2NoYWluLEdlLnN0cnN0YXJ0PTAsR2UuYmxvY2tfc3RhcnQ9MCxHZS5sb29rYWhlYWQ9MCxH''@;'; put 'put ''ZS5pbnNlcnQ9MCxHZS5tYXRjaF9sZW5ndGg9R2UucHJldl9sZW5ndGg9MixHZS5tYXRjaF9hdmFpbGFibGU9MCxHZS5pbnNfaD0wfShHZS5zdGF0ZSksVXR9ZnVuY3Rpb24gTm4oR2UsVXQsdnIseHQsQnQsem4pe2lmKCFHZSlyZXR1cm4tMjt2YXIgR249MTtpZigtMT09PVV0JiYoVXQ9Niks''@;'; put 'put ''eHQ8MD8oR249MCx4dD0teHQpOnh0PjE1JiYoR249Mix4dC09MTYpLEJ0PDF8fEJ0Pjl8fDghPT12cnx8eHQ8OHx8eHQ+MTV8fFV0PDB8fFV0Pjl8fHpuPDB8fHpuPjQpcmV0dXJuIEtlKEdlLC0yKTs4PT09eHQmJih4dD05KTt2YXIgeW49bmV3IFR0O3JldHVybiBHZS5zdGF0ZT15bix5bi5z''@;'; put 'put ''dHJtPUdlLHluLndyYXA9R24seW4uZ3poZWFkPW51bGwseW4ud19iaXRzPXh0LHluLndfc2l6ZT0xPDx5bi53X2JpdHMseW4ud19tYXNrPXluLndfc2l6ZS0xLHluLmhhc2hfYml0cz1CdCs3LHluLmhhc2hfc2l6ZT0xPDx5bi5oYXNoX2JpdHMseW4uaGFzaF9tYXNrPXluLmhhc2hfc2l6ZS0x''@;'; put 'put ''LHluLmhhc2hfc2hpZnQ9fn4oKHluLmhhc2hfYml0cyszLTEpLzMpLHluLndpbmRvdz1uZXcgTC5CdWY4KDIqeW4ud19zaXplKSx5bi5oZWFkPW5ldyBMLkJ1ZjE2KHluLmhhc2hfc2l6ZSkseW4ucHJldj1uZXcgTC5CdWYxNih5bi53X3NpemUpLHluLmxpdF9idWZzaXplPTE8PEJ0KzYseW4u''@;'; put 'put ''cGVuZGluZ19idWZfc2l6ZT00KnluLmxpdF9idWZzaXplLHluLnBlbmRpbmdfYnVmPW5ldyBMLkJ1ZjgoeW4ucGVuZGluZ19idWZfc2l6ZSkseW4uZF9idWY9eW4ubGl0X2J1ZnNpemU+PjEseW4ubF9idWY9Myp5bi5saXRfYnVmc2l6ZSx5bi5sZXZlbD1VdCx5bi5zdHJhdGVneT16bix5bi5t''@;'; put 'put ''ZXRob2Q9dnIsX24oR2UpfVNuPVtuZXcgWm4oMCwwLDAsMCxmdW5jdGlvbiBRcihHZSxVdCl7dmFyIHZyPTY1NTM1O2Zvcih2cj5HZS5wZW5kaW5nX2J1Zl9zaXplLTUmJih2cj1HZS5wZW5kaW5nX2J1Zl9zaXplLTUpOzspe2lmKEdlLmxvb2thaGVhZDw9MSl7aWYoT24oR2UpLDA9PT1HZS5s''@;'; put 'put ''b29rYWhlYWQmJjA9PT1VdClyZXR1cm4gMTtpZigwPT09R2UubG9va2FoZWFkKWJyZWFrfUdlLnN0cnN0YXJ0Kz1HZS5sb29rYWhlYWQsR2UubG9va2FoZWFkPTA7dmFyIHh0PUdlLmJsb2NrX3N0YXJ0K3ZyO2lmKCgwPT09R2Uuc3Ryc3RhcnR8fEdlLnN0cnN0YXJ0Pj14dCkmJihHZS5sb29r''@;'; put 'put ''YWhlYWQ9R2Uuc3Ryc3RhcnQteHQsR2Uuc3Ryc3RhcnQ9eHQsR3QoR2UsITEpLDA9PT1HZS5zdHJtLmF2YWlsX291dCl8fEdlLnN0cnN0YXJ0LUdlLmJsb2NrX3N0YXJ0Pj1HZS53X3NpemUtZHQmJihHdChHZSwhMSksMD09PUdlLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gR2Uu''@;'; put 'put ''aW5zZXJ0PTAsND09PVV0PyhHdChHZSwhMCksMD09PUdlLnN0cm0uYXZhaWxfb3V0PzM6NCk6KEdlLnN0cnN0YXJ0PkdlLmJsb2NrX3N0YXJ0JiZHdChHZSwhMSksMSl9KSxuZXcgWm4oNCw0LDgsNCx0ciksbmV3IFpuKDQsNSwxNiw4LHRyKSxuZXcgWm4oNCw2LDMyLDMyLHRyKSxuZXcgWm4o''@;'; put 'put ''NCw0LDE2LDE2LEhuKSxuZXcgWm4oOCwxNiwzMiwzMixIbiksbmV3IFpuKDgsMTYsMTI4LDEyOCxIbiksbmV3IFpuKDgsMzIsMTI4LDI1NixIbiksbmV3IFpuKDMyLDEyOCwyNTgsMTAyNCxIbiksbmV3IFpuKDMyLDI1OCwyNTgsNDA5NixIbildLFMuZGVmbGF0ZUluaXQ9ZnVuY3Rpb24gcHQo''@;'; put 'put ''R2UsVXQpe3JldHVybiBObihHZSxVdCw4LDE1LDgsMCl9LFMuZGVmbGF0ZUluaXQyPU5uLFMuZGVmbGF0ZVJlc2V0PV9uLFMuZGVmbGF0ZVJlc2V0S2VlcD1BcixTLmRlZmxhdGVTZXRIZWFkZXI9ZnVuY3Rpb24gWnQoR2UsVXQpe3JldHVybiBHZSYmR2Uuc3RhdGUmJjI9PT1HZS5zdGF0ZS53''@;'; put 'put ''cmFwPyhHZS5zdGF0ZS5nemhlYWQ9VXQsMCk6LTJ9LFMuZGVmbGF0ZT1mdW5jdGlvbiBwbihHZSxVdCl7dmFyIHZyLHh0LEJ0LHpuO2lmKCFHZXx8IUdlLnN0YXRlfHxVdD41fHxVdDwwKXJldHVybiBHZT9LZShHZSwtMik6LTI7aWYoeHQ9R2Uuc3RhdGUsIUdlLm91dHB1dHx8IUdlLmlucHV0''@;'; put 'put ''JiYwIT09R2UuYXZhaWxfaW58fDY2Nj09PXh0LnN0YXR1cyYmNCE9PVV0KXJldHVybiBLZShHZSwwPT09R2UuYXZhaWxfb3V0Py01Oi0yKTtpZih4dC5zdHJtPUdlLHZyPXh0Lmxhc3RfZmx1c2gseHQubGFzdF9mbHVzaD1VdCw0Mj09PXh0LnN0YXR1cylpZigyPT09eHQud3JhcClHZS5hZGxl''@;'; put 'put ''cj0wLGd0KHh0LDMxKSxndCh4dCwxMzkpLGd0KHh0LDgpLHh0Lmd6aGVhZD8oZ3QoeHQsKHh0Lmd6aGVhZC50ZXh0PzE6MCkrKHh0Lmd6aGVhZC5oY3JjPzI6MCkrKHh0Lmd6aGVhZC5leHRyYT80OjApKyh4dC5nemhlYWQubmFtZT84OjApKyh4dC5nemhlYWQuY29tbWVudD8xNjowKSksZ3Qo''@;'; put 'put ''eHQsMjU1Jnh0Lmd6aGVhZC50aW1lKSxndCh4dCx4dC5nemhlYWQudGltZT4+OCYyNTUpLGd0KHh0LHh0Lmd6aGVhZC50aW1lPj4xNiYyNTUpLGd0KHh0LHh0Lmd6aGVhZC50aW1lPj4yNCYyNTUpLGd0KHh0LDk9PT14dC5sZXZlbD8yOnh0LnN0cmF0ZWd5Pj0yfHx4dC5sZXZlbDwyPzQ6MCks''@;'; put 'put ''Z3QoeHQsMjU1Jnh0Lmd6aGVhZC5vcykseHQuZ3poZWFkLmV4dHJhJiZ4dC5nemhlYWQuZXh0cmEubGVuZ3RoJiYoZ3QoeHQsMjU1Jnh0Lmd6aGVhZC5leHRyYS5sZW5ndGgpLGd0KHh0LHh0Lmd6aGVhZC5leHRyYS5sZW5ndGg+PjgmMjU1KSkseHQuZ3poZWFkLmhjcmMmJihHZS5hZGxlcj1V''@;'; put 'put ''KEdlLmFkbGVyLHh0LnBlbmRpbmdfYnVmLHh0LnBlbmRpbmcsMCkpLHh0Lmd6aW5kZXg9MCx4dC5zdGF0dXM9NjkpOihndCh4dCwwKSxndCh4dCwwKSxndCh4dCwwKSxndCh4dCwwKSxndCh4dCwwKSxndCh4dCw5PT09eHQubGV2ZWw/Mjp4dC5zdHJhdGVneT49Mnx8eHQubGV2ZWw8Mj80OjAp''@;'; put 'put ''LGd0KHh0LDMpLHh0LnN0YXR1cz0xMTMpO2Vsc2V7dmFyIEduPTgrKHh0LndfYml0cy04PDw0KTw8ODtHbnw9KHh0LnN0cmF0ZWd5Pj0yfHx4dC5sZXZlbDwyPzA6eHQubGV2ZWw8Nj8xOjY9PT14dC5sZXZlbD8yOjMpPDw2LDAhPT14dC5zdHJzdGFydCYmKEdufD0zMiksR24rPTMxLUduJTMx''@;'; put 'put ''LHh0LnN0YXR1cz0xMTMsWHQoeHQsR24pLDAhPT14dC5zdHJzdGFydCYmKFh0KHh0LEdlLmFkbGVyPj4+MTYpLFh0KHh0LDY1NTM1JkdlLmFkbGVyKSksR2UuYWRsZXI9MX1pZig2OT09PXh0LnN0YXR1cylpZih4dC5nemhlYWQuZXh0cmEpe2ZvcihCdD14dC5wZW5kaW5nO3h0Lmd6aW5kZXg8''@;'; put 'put ''KDY1NTM1Jnh0Lmd6aGVhZC5leHRyYS5sZW5ndGgpJiYoeHQucGVuZGluZyE9PXh0LnBlbmRpbmdfYnVmX3NpemV8fCh4dC5nemhlYWQuaGNyYyYmeHQucGVuZGluZz5CdCYmKEdlLmFkbGVyPVUoR2UuYWRsZXIseHQucGVuZGluZ19idWYseHQucGVuZGluZy1CdCxCdCkpLEx0KEdlKSxCdD14''@;'; put 'put ''dC5wZW5kaW5nLHh0LnBlbmRpbmchPT14dC5wZW5kaW5nX2J1Zl9zaXplKSk7KWd0KHh0LDI1NSZ4dC5nemhlYWQuZXh0cmFbeHQuZ3ppbmRleF0pLHh0Lmd6aW5kZXgrKzt4dC5nemhlYWQuaGNyYyYmeHQucGVuZGluZz5CdCYmKEdlLmFkbGVyPVUoR2UuYWRsZXIseHQucGVuZGluZ19idWYs''@;'; put 'put ''eHQucGVuZGluZy1CdCxCdCkpLHh0Lmd6aW5kZXg9PT14dC5nemhlYWQuZXh0cmEubGVuZ3RoJiYoeHQuZ3ppbmRleD0wLHh0LnN0YXR1cz03Myl9ZWxzZSB4dC5zdGF0dXM9NzM7aWYoNzM9PT14dC5zdGF0dXMpaWYoeHQuZ3poZWFkLm5hbWUpe0J0PXh0LnBlbmRpbmc7ZG97aWYoeHQucGVu''@;'; put 'put ''ZGluZz09PXh0LnBlbmRpbmdfYnVmX3NpemUmJih4dC5nemhlYWQuaGNyYyYmeHQucGVuZGluZz5CdCYmKEdlLmFkbGVyPVUoR2UuYWRsZXIseHQucGVuZGluZ19idWYseHQucGVuZGluZy1CdCxCdCkpLEx0KEdlKSxCdD14dC5wZW5kaW5nLHh0LnBlbmRpbmc9PT14dC5wZW5kaW5nX2J1Zl9z''@;'; put 'put ''aXplKSl7em49MTticmVha316bj14dC5nemluZGV4PHh0Lmd6aGVhZC5uYW1lLmxlbmd0aD8yNTUmeHQuZ3poZWFkLm5hbWUuY2hhckNvZGVBdCh4dC5nemluZGV4KyspOjAsZ3QoeHQsem4pfXdoaWxlKDAhPT16bik7eHQuZ3poZWFkLmhjcmMmJnh0LnBlbmRpbmc+QnQmJihHZS5hZGxlcj1V''@;'; put 'put ''KEdlLmFkbGVyLHh0LnBlbmRpbmdfYnVmLHh0LnBlbmRpbmctQnQsQnQpKSwwPT09em4mJih4dC5nemluZGV4PTAseHQuc3RhdHVzPTkxKX1lbHNlIHh0LnN0YXR1cz05MTtpZig5MT09PXh0LnN0YXR1cylpZih4dC5nemhlYWQuY29tbWVudCl7QnQ9eHQucGVuZGluZztkb3tpZih4dC5wZW5k''@;'; put 'put ''aW5nPT09eHQucGVuZGluZ19idWZfc2l6ZSYmKHh0Lmd6aGVhZC5oY3JjJiZ4dC5wZW5kaW5nPkJ0JiYoR2UuYWRsZXI9VShHZS5hZGxlcix4dC5wZW5kaW5nX2J1Zix4dC5wZW5kaW5nLUJ0LEJ0KSksTHQoR2UpLEJ0PXh0LnBlbmRpbmcseHQucGVuZGluZz09PXh0LnBlbmRpbmdfYnVmX3Np''@;'; put 'put ''emUpKXt6bj0xO2JyZWFrfXpuPXh0Lmd6aW5kZXg8eHQuZ3poZWFkLmNvbW1lbnQubGVuZ3RoPzI1NSZ4dC5nemhlYWQuY29tbWVudC5jaGFyQ29kZUF0KHh0Lmd6aW5kZXgrKyk6MCxndCh4dCx6bil9d2hpbGUoMCE9PXpuKTt4dC5nemhlYWQuaGNyYyYmeHQucGVuZGluZz5CdCYmKEdlLmFk''@;'; put 'put ''bGVyPVUoR2UuYWRsZXIseHQucGVuZGluZ19idWYseHQucGVuZGluZy1CdCxCdCkpLDA9PT16biYmKHh0LnN0YXR1cz0xMDMpfWVsc2UgeHQuc3RhdHVzPTEwMztpZigxMDM9PT14dC5zdGF0dXMmJih4dC5nemhlYWQuaGNyYz8oeHQucGVuZGluZysyPnh0LnBlbmRpbmdfYnVmX3NpemUmJkx0''@;'; put 'put ''KEdlKSx4dC5wZW5kaW5nKzI8PXh0LnBlbmRpbmdfYnVmX3NpemUmJihndCh4dCwyNTUmR2UuYWRsZXIpLGd0KHh0LEdlLmFkbGVyPj44JjI1NSksR2UuYWRsZXI9MCx4dC5zdGF0dXM9MTEzKSk6eHQuc3RhdHVzPTExMyksMCE9PXh0LnBlbmRpbmcpe2lmKEx0KEdlKSwwPT09R2UuYXZhaWxf''@;'; put 'put ''b3V0KXJldHVybiB4dC5sYXN0X2ZsdXNoPS0xLDB9ZWxzZSBpZigwPT09R2UuYXZhaWxfaW4mJiR0KFV0KTw9JHQodnIpJiY0IT09VXQpcmV0dXJuIEtlKEdlLC01KTtpZig2NjY9PT14dC5zdGF0dXMmJjAhPT1HZS5hdmFpbF9pbilyZXR1cm4gS2UoR2UsLTUpO2lmKDAhPT1HZS5hdmFpbF9p''@;'; put 'put ''bnx8MCE9PXh0Lmxvb2thaGVhZHx8MCE9PVV0JiY2NjYhPT14dC5zdGF0dXMpe3ZhciB2aT0yPT09eHQuc3RyYXRlZ3k/ZnVuY3Rpb24gdXIoR2UsVXQpe2Zvcih2YXIgdnI7Oyl7aWYoMD09PUdlLmxvb2thaGVhZCYmKE9uKEdlKSwwPT09R2UubG9va2FoZWFkKSl7aWYoMD09PVV0KXJldHVy''@;'; put 'put ''biAxO2JyZWFrfWlmKEdlLm1hdGNoX2xlbmd0aD0wLHZyPVIuX3RyX3RhbGx5KEdlLDAsR2Uud2luZG93W0dlLnN0cnN0YXJ0XSksR2UubG9va2FoZWFkLS0sR2Uuc3Ryc3RhcnQrKyx2ciYmKEd0KEdlLCExKSwwPT09R2Uuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBHZS5pbnNl''@;'; put 'put ''cnQ9MCw0PT09VXQ/KEd0KEdlLCEwKSwwPT09R2Uuc3RybS5hdmFpbF9vdXQ/Mzo0KTpHZS5sYXN0X2xpdCYmKEd0KEdlLCExKSwwPT09R2Uuc3RybS5hdmFpbF9vdXQpPzE6Mn0oeHQsVXQpOjM9PT14dC5zdHJhdGVneT9mdW5jdGlvbiBPbyhHZSxVdCl7Zm9yKHZhciB2cix4dCxCdCx6bixH''@;'; put 'put ''bj1HZS53aW5kb3c7Oyl7aWYoR2UubG9va2FoZWFkPD0yNTgpe2lmKE9uKEdlKSxHZS5sb29rYWhlYWQ8PTI1OCYmMD09PVV0KXJldHVybiAxO2lmKDA9PT1HZS5sb29rYWhlYWQpYnJlYWt9aWYoR2UubWF0Y2hfbGVuZ3RoPTAsR2UubG9va2FoZWFkPj0zJiZHZS5zdHJzdGFydD4wJiYoeHQ9''@;'; put 'put ''R25bQnQ9R2Uuc3Ryc3RhcnQtMV0pPT09R25bKytCdF0mJnh0PT09R25bKytCdF0mJnh0PT09R25bKytCdF0pe3puPUdlLnN0cnN0YXJ0KzI1ODtkb3t9d2hpbGUoeHQ9PT1HblsrK0J0XSYmeHQ9PT1HblsrK0J0XSYmeHQ9PT1HblsrK0J0XSYmeHQ9PT1HblsrK0J0XSYmeHQ9PT1HblsrK0J0''@;'; put 'put ''XSYmeHQ9PT1HblsrK0J0XSYmeHQ9PT1HblsrK0J0XSYmeHQ9PT1HblsrK0J0XSYmQnQ8em4pO0dlLm1hdGNoX2xlbmd0aD0yNTgtKHpuLUJ0KSxHZS5tYXRjaF9sZW5ndGg+R2UubG9va2FoZWFkJiYoR2UubWF0Y2hfbGVuZ3RoPUdlLmxvb2thaGVhZCl9aWYoR2UubWF0Y2hfbGVuZ3RoPj0z''@;'; put 'put ''Pyh2cj1SLl90cl90YWxseShHZSwxLEdlLm1hdGNoX2xlbmd0aC0zKSxHZS5sb29rYWhlYWQtPUdlLm1hdGNoX2xlbmd0aCxHZS5zdHJzdGFydCs9R2UubWF0Y2hfbGVuZ3RoLEdlLm1hdGNoX2xlbmd0aD0wKToodnI9Ui5fdHJfdGFsbHkoR2UsMCxHZS53aW5kb3dbR2Uuc3Ryc3RhcnRdKSxH''@;'; put 'put ''ZS5sb29rYWhlYWQtLSxHZS5zdHJzdGFydCsrKSx2ciYmKEd0KEdlLCExKSwwPT09R2Uuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBHZS5pbnNlcnQ9MCw0PT09VXQ/KEd0KEdlLCEwKSwwPT09R2Uuc3RybS5hdmFpbF9vdXQ/Mzo0KTpHZS5sYXN0X2xpdCYmKEd0KEdlLCExKSww''@;'; put 'put ''PT09R2Uuc3RybS5hdmFpbF9vdXQpPzE6Mn0oeHQsVXQpOlNuW3h0LmxldmVsXS5mdW5jKHh0LFV0KTtpZigoMz09PXZpfHw0PT09dmkpJiYoeHQuc3RhdHVzPTY2NiksMT09PXZpfHwzPT09dmkpcmV0dXJuIDA9PT1HZS5hdmFpbF9vdXQmJih4dC5sYXN0X2ZsdXNoPS0xKSwwO2lmKDI9PT12''@;'; put 'put ''aSYmKDE9PT1VdD9SLl90cl9hbGlnbih4dCk6NSE9PVV0JiYoUi5fdHJfc3RvcmVkX2Jsb2NrKHh0LDAsMCwhMSksMz09PVV0JiYoUnQoeHQuaGVhZCksMD09PXh0Lmxvb2thaGVhZCYmKHh0LnN0cnN0YXJ0PTAseHQuYmxvY2tfc3RhcnQ9MCx4dC5pbnNlcnQ9MCkpKSxMdChHZSksMD09PUdl''@;'; put 'put ''LmF2YWlsX291dCkpcmV0dXJuIHh0Lmxhc3RfZmx1c2g9LTEsMH1yZXR1cm4gNCE9PVV0PzA6eHQud3JhcDw9MD8xOigyPT09eHQud3JhcD8oZ3QoeHQsMjU1JkdlLmFkbGVyKSxndCh4dCxHZS5hZGxlcj4+OCYyNTUpLGd0KHh0LEdlLmFkbGVyPj4xNiYyNTUpLGd0KHh0LEdlLmFkbGVyPj4y''@;'; put 'put ''NCYyNTUpLGd0KHh0LDI1NSZHZS50b3RhbF9pbiksZ3QoeHQsR2UudG90YWxfaW4+PjgmMjU1KSxndCh4dCxHZS50b3RhbF9pbj4+MTYmMjU1KSxndCh4dCxHZS50b3RhbF9pbj4+MjQmMjU1KSk6KFh0KHh0LEdlLmFkbGVyPj4+MTYpLFh0KHh0LDY1NTM1JkdlLmFkbGVyKSksTHQoR2UpLHh0''@;'; put 'put ''LndyYXA+MCYmKHh0LndyYXA9LXh0LndyYXApLDAhPT14dC5wZW5kaW5nPzA6MSl9LFMuZGVmbGF0ZUVuZD1mdW5jdGlvbiBNaShHZSl7dmFyIFV0O3JldHVybiBHZSYmR2Uuc3RhdGU/NDIhPT0oVXQ9R2Uuc3RhdGUuc3RhdHVzKSYmNjkhPT1VdCYmNzMhPT1VdCYmOTEhPT1VdCYmMTAzIT09''@;'; put 'put ''VXQmJjExMyE9PVV0JiY2NjYhPT1VdD9LZShHZSwtMik6KEdlLnN0YXRlPW51bGwsMTEzPT09VXQ/S2UoR2UsLTMpOjApOi0yfSxTLmRlZmxhdGVJbmZvPSJwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjI3LCIuL2FkbGVyMzIiOjI5LCIu''@;'; put 'put ''L2NyYzMyIjozMSwiLi9tZXNzYWdlcyI6MzcsIi4vdHJlZXMiOjM4fV0sMzM6W2Z1bmN0aW9uKEMsdyxTKXsidXNlIHN0cmljdCI7dy5leHBvcnRzPWZ1bmN0aW9uIEwoKXt0aGlzLnRleHQ9MCx0aGlzLnRpbWU9MCx0aGlzLnhmbGFncz0wLHRoaXMub3M9MCx0aGlzLmV4dHJhPW51bGwsdGhp''@;'; put 'put ''cy5leHRyYV9sZW49MCx0aGlzLm5hbWU9IiIsdGhpcy5jb21tZW50PSIiLHRoaXMuaGNyYz0wLHRoaXMuZG9uZT0hMX19LHt9XSwzNDpbZnVuY3Rpb24oQyx3LFMpeyJ1c2Ugc3RyaWN0Ijt3LmV4cG9ydHM9ZnVuY3Rpb24oVSxIKXt2YXIgVixOLHosWSxGLFcscSxyZSxtZSxDZSxJZSxrZSxx''@;'; put 'put ''ZSxYLGYsYixrLE0sQixLLEcsRCxwLEksdWU7ST1VLmlucHV0LHo9KE49VS5uZXh0X2luKSsoVS5hdmFpbF9pbi01KSx1ZT1VLm91dHB1dCxGPShZPVUubmV4dF9vdXQpLShILVUuYXZhaWxfb3V0KSxXPVkrKFUuYXZhaWxfb3V0LTI1NykscT0oVj1VLnN0YXRlKS5kbWF4LHJlPVYud3NpemUs''@;'; put 'put ''bWU9Vi53aGF2ZSxDZT1WLnduZXh0LEllPVYud2luZG93LGtlPVYuaG9sZCxxZT1WLmJpdHMsWD1WLmxlbmNvZGUsZj1WLmRpc3Rjb2RlLGI9KDE8PFYubGVuYml0cyktMSxrPSgxPDxWLmRpc3RiaXRzKS0xO2U6ZG97cWU8MTUmJihrZSs9SVtOKytdPDxxZSxrZSs9SVtOKytdPDwocWUrPTgp''@;'; put 'put ''LHFlKz04KSxNPVhba2UmYl07dDpmb3IoOzspe2lmKGtlPj4+PUI9TT4+PjI0LHFlLT1CLDA9PShCPU0+Pj4xNiYyNTUpKXVlW1krK109NjU1MzUmTTtlbHNle2lmKCEoMTYmQikpe2lmKDY0JkIpe2lmKDMyJkIpe1YubW9kZT0xMjticmVhayBlfVUubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVu''@;'; put 'put ''Z3RoIGNvZGUiLFYubW9kZT0zMDticmVhayBlfU09WFsoNjU1MzUmTSkrKGtlJigxPDxCKS0xKV07Y29udGludWUgdH1mb3IoSz02NTUzNSZNLChCJj0xNSkmJihxZTxCJiYoa2UrPUlbTisrXTw8cWUscWUrPTgpLEsrPWtlJigxPDxCKS0xLGtlPj4+PUIscWUtPUIpLHFlPDE1JiYoa2UrPUlb''@;'; put 'put ''TisrXTw8cWUsa2UrPUlbTisrXTw8KHFlKz04KSxxZSs9OCksTT1mW2tlJmtdOzspe2lmKGtlPj4+PUI9TT4+PjI0LHFlLT1CLDE2JihCPU0+Pj4xNiYyNTUpKXtpZihHPTY1NTM1Jk0scWU8KEImPTE1KSYmKGtlKz1JW04rK108PHFlLChxZSs9OCk8QiYmKGtlKz1JW04rK108PHFlLHFlKz04''@;'; put 'put ''KSksKEcrPWtlJigxPDxCKS0xKT5xKXtVLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLFYubW9kZT0zMDticmVhayBlfWlmKGtlPj4+PUIscWUtPUIsRz4oQj1ZLUYpKXtpZigoQj1HLUIpPm1lJiZWLnNhbmUpe1UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFj''@;'; put 'put ''ayIsVi5tb2RlPTMwO2JyZWFrIGV9aWYoRD0wLHA9SWUsMD09PUNlKXtpZihEKz1yZS1CLEI8Syl7Sy09Qjtkb3t1ZVtZKytdPUllW0QrK119d2hpbGUoLS1CKTtEPVktRyxwPXVlfX1lbHNlIGlmKENlPEIpe2lmKEQrPXJlK0NlLUIsKEItPUNlKTxLKXtLLT1CO2Rve3VlW1krK109SWVbRCsr''@;'; put 'put ''XX13aGlsZSgtLUIpO2lmKEQ9MCxDZTxLKXtLLT1CPUNlO2Rve3VlW1krK109SWVbRCsrXX13aGlsZSgtLUIpO0Q9WS1HLHA9dWV9fX1lbHNlIGlmKEQrPUNlLUIsQjxLKXtLLT1CO2Rve3VlW1krK109SWVbRCsrXX13aGlsZSgtLUIpO0Q9WS1HLHA9dWV9Zm9yKDtLPjI7KXVlW1krK109cFtE''@;'; put 'put ''KytdLHVlW1krK109cFtEKytdLHVlW1krK109cFtEKytdLEstPTM7SyYmKHVlW1krK109cFtEKytdLEs+MSYmKHVlW1krK109cFtEKytdKSl9ZWxzZXtEPVktRztkb3t1ZVtZKytdPXVlW0QrK10sdWVbWSsrXT11ZVtEKytdLHVlW1krK109dWVbRCsrXSxLLT0zfXdoaWxlKEs+Mik7SyYmKHVl''@;'; put 'put ''W1krK109dWVbRCsrXSxLPjEmJih1ZVtZKytdPXVlW0QrK10pKX1icmVha31pZig2NCZCKXtVLm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixWLm1vZGU9MzA7YnJlYWsgZX1NPWZbKDY1NTM1Jk0pKyhrZSYoMTw8QiktMSldfX1icmVha319d2hpbGUoTjx6JiZZPFcpO2tlJj0oMTw8KHFl''@;'; put 'put ''LT0oSz1xZT4+Myk8PDMpKS0xLFUubmV4dF9pbj1OLT1LLFUubmV4dF9vdXQ9WSxVLmF2YWlsX2luPU48ej96LU4rNTo1LShOLXopLFUuYXZhaWxfb3V0PVk8Vz9XLVkrMjU3OjI1Ny0oWS1XKSxWLmhvbGQ9a2UsVi5iaXRzPXFlfX0se31dLDM1OltmdW5jdGlvbihDLHcsUyl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBMPUMoIi4uL3V0aWxzL2NvbW1vbiIpLFI9QygiLi9hZGxlcjMyIikseD1DKCIuL2NyYzMyIiksVT1DKCIuL2luZmZhc3QiKSxIPUMoIi4vaW5mdHJlZXMiKTtmdW5jdGlvbiBYdChadCl7cmV0dXJuKFp0Pj4+MjQmMjU1KSsoWnQ+Pj44JjY1MjgwKSsoKDY1MjgwJlp0KTw8OCkr''@;'; put 'put ''KCgyNTUmWnQpPDwyNCl9ZnVuY3Rpb24gTHIoKXt0aGlzLm1vZGU9MCx0aGlzLmxhc3Q9ITEsdGhpcy53cmFwPTAsdGhpcy5oYXZlZGljdD0hMSx0aGlzLmZsYWdzPTAsdGhpcy5kbWF4PTAsdGhpcy5jaGVjaz0wLHRoaXMudG90YWw9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLndiaXRzPTAsdGhp''@;'; put 'put ''cy53c2l6ZT0wLHRoaXMud2hhdmU9MCx0aGlzLnduZXh0PTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLmhvbGQ9MCx0aGlzLmJpdHM9MCx0aGlzLmxlbmd0aD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5leHRyYT0wLHRoaXMubGVuY29kZT1udWxsLHRoaXMuZGlzdGNvZGU9bnVsbCx0aGlzLmxlbmJp''@;'; put 'put ''dHM9MCx0aGlzLmRpc3RiaXRzPTAsdGhpcy5uY29kZT0wLHRoaXMubmxlbj0wLHRoaXMubmRpc3Q9MCx0aGlzLmhhdmU9MCx0aGlzLm5leHQ9bnVsbCx0aGlzLmxlbnM9bmV3IEwuQnVmMTYoMzIwKSx0aGlzLndvcms9bmV3IEwuQnVmMTYoMjg4KSx0aGlzLmxlbmR5bj1udWxsLHRoaXMuZGlz''@;'; put 'put ''dGR5bj1udWxsLHRoaXMuc2FuZT0wLHRoaXMuYmFjaz0wLHRoaXMud2FzPTB9ZnVuY3Rpb24gbG4oWnQpe3ZhciBObjtyZXR1cm4gWnQmJlp0LnN0YXRlPyhadC50b3RhbF9pbj1adC50b3RhbF9vdXQ9KE5uPVp0LnN0YXRlKS50b3RhbD0wLFp0Lm1zZz0iIixObi53cmFwJiYoWnQuYWRsZXI9''@;'; put 'put ''MSZObi53cmFwKSxObi5tb2RlPTEsTm4ubGFzdD0wLE5uLmhhdmVkaWN0PTAsTm4uZG1heD0zMjc2OCxObi5oZWFkPW51bGwsTm4uaG9sZD0wLE5uLmJpdHM9MCxObi5sZW5jb2RlPU5uLmxlbmR5bj1uZXcgTC5CdWYzMig4NTIpLE5uLmRpc3Rjb2RlPU5uLmRpc3RkeW49bmV3IEwuQnVmMzIo''@;'; put 'put ''NTkyKSxObi5zYW5lPTEsTm4uYmFjaz0tMSwwKTotMn1mdW5jdGlvbiBPbihadCl7dmFyIE5uO3JldHVybiBadCYmWnQuc3RhdGU/KChObj1adC5zdGF0ZSkud3NpemU9MCxObi53aGF2ZT0wLE5uLnduZXh0PTAsbG4oWnQpKTotMn1mdW5jdGlvbiBRcihadCxObil7dmFyIHB0LHBuO3JldHVy''@;'; put 'put ''biFadHx8IVp0LnN0YXRlfHwocG49WnQuc3RhdGUsTm48MD8ocHQ9MCxObj0tTm4pOihwdD0xKyhObj4+NCksTm48NDgmJihObiY9MTUpKSxObiYmKE5uPDh8fE5uPjE1KSk/LTI6KG51bGwhPT1wbi53aW5kb3cmJnBuLndiaXRzIT09Tm4mJihwbi53aW5kb3c9bnVsbCkscG4ud3JhcD1wdCxw''@;'; put 'put ''bi53Yml0cz1ObixPbihadCkpfWZ1bmN0aW9uIHRyKFp0LE5uKXt2YXIgcHQscG47cmV0dXJuIFp0Pyhwbj1uZXcgTHIsWnQuc3RhdGU9cG4scG4ud2luZG93PW51bGwsMCE9PShwdD1RcihadCxObikpJiYoWnQuc3RhdGU9bnVsbCkscHQpOi0yfXZhciB1cixabixPbz0hMDtmdW5jdGlvbiBT''@;'; put 'put ''bihadCl7aWYoT28pe3ZhciBObjtmb3IodXI9bmV3IEwuQnVmMzIoNTEyKSxabj1uZXcgTC5CdWYzMigzMiksTm49MDtObjwxNDQ7KVp0LmxlbnNbTm4rK109ODtmb3IoO05uPDI1NjspWnQubGVuc1tObisrXT05O2Zvcig7Tm48MjgwOyladC5sZW5zW05uKytdPTc7Zm9yKDtObjwyODg7KVp0''@;'; put 'put ''LmxlbnNbTm4rK109ODtmb3IoSCgxLFp0LmxlbnMsMCwyODgsdXIsMCxadC53b3JrLHtiaXRzOjl9KSxObj0wO05uPDMyOyladC5sZW5zW05uKytdPTU7SCgyLFp0LmxlbnMsMCwzMixabiwwLFp0Lndvcmsse2JpdHM6NX0pLE9vPSExfVp0LmxlbmNvZGU9dXIsWnQubGVuYml0cz05LFp0LmRp''@;'; put 'put ''c3Rjb2RlPVpuLFp0LmRpc3RiaXRzPTV9Uy5pbmZsYXRlUmVzZXQ9T24sUy5pbmZsYXRlUmVzZXQyPVFyLFMuaW5mbGF0ZVJlc2V0S2VlcD1sbixTLmluZmxhdGVJbml0PWZ1bmN0aW9uIEhuKFp0KXtyZXR1cm4gdHIoWnQsMTUpfSxTLmluZmxhdGVJbml0Mj10cixTLmluZmxhdGU9ZnVuY3Rp''@;'; put 'put ''b24gVHQoWnQsTm4pe3ZhciBwdCxwbixNaSxHZSxVdCx2cix4dCxCdCx6bixHbix5bix2aSxycixocix2bixCbixqYSxqbyxYcixlYSxyYSxjYSxobyxNYSxwbz0wLENpPW5ldyBMLkJ1ZjgoNCksa3M9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdO2lm''@;'; put 'put ''KCFadHx8IVp0LnN0YXRlfHwhWnQub3V0cHV0fHwhWnQuaW5wdXQmJjAhPT1adC5hdmFpbF9pbilyZXR1cm4tMjsxMj09PShwdD1adC5zdGF0ZSkubW9kZSYmKHB0Lm1vZGU9MTMpLFV0PVp0Lm5leHRfb3V0LE1pPVp0Lm91dHB1dCxHZT1adC5uZXh0X2luLHBuPVp0LmlucHV0LEJ0PXB0Lmhv''@;'; put 'put ''bGQsem49cHQuYml0cyxHbj12cj1adC5hdmFpbF9pbix5bj14dD1adC5hdmFpbF9vdXQsY2E9MDtlOmZvcig7Oylzd2l0Y2gocHQubW9kZSl7Y2FzZSAxOmlmKDA9PT1wdC53cmFwKXtwdC5tb2RlPTEzO2JyZWFrfWZvcig7em48MTY7KXtpZigwPT09dnIpYnJlYWsgZTt2ci0tLEJ0Kz1wbltH''@;'; put 'put ''ZSsrXTw8em4sem4rPTh9aWYoMiZwdC53cmFwJiYzNTYxNT09PUJ0KXtwdC5jaGVjaz0wLENpWzBdPTI1NSZCdCxDaVsxXT1CdD4+PjgmMjU1LHB0LmNoZWNrPXgocHQuY2hlY2ssQ2ksMiwwKSxCdD0wLHpuPTAscHQubW9kZT0yO2JyZWFrfWlmKHB0LmZsYWdzPTAscHQuaGVhZCYmKHB0Lmhl''@;'; put 'put ''YWQuZG9uZT0hMSksISgxJnB0LndyYXApfHwoKCgyNTUmQnQpPDw4KSsoQnQ+PjgpKSUzMSl7WnQubXNnPSJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIixwdC5tb2RlPTMwO2JyZWFrfWlmKDghPSgxNSZCdCkpe1p0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLHB0Lm1vZGU9MzA7''@;'; put 'put ''YnJlYWt9aWYoem4tPTQscmE9OCsoMTUmKEJ0Pj4+PTQpKSwwPT09cHQud2JpdHMpcHQud2JpdHM9cmE7ZWxzZSBpZihyYT5wdC53Yml0cyl7WnQubXNnPSJpbnZhbGlkIHdpbmRvdyBzaXplIixwdC5tb2RlPTMwO2JyZWFrfXB0LmRtYXg9MTw8cmEsWnQuYWRsZXI9cHQuY2hlY2s9MSxwdC5t''@;'; put 'put ''b2RlPTUxMiZCdD8xMDoxMixCdD0wLHpuPTA7YnJlYWs7Y2FzZSAyOmZvcig7em48MTY7KXtpZigwPT09dnIpYnJlYWsgZTt2ci0tLEJ0Kz1wbltHZSsrXTw8em4sem4rPTh9aWYocHQuZmxhZ3M9QnQsOCE9KDI1NSZwdC5mbGFncykpe1p0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRo''@;'; put 'put ''b2QiLHB0Lm1vZGU9MzA7YnJlYWt9aWYoNTczNDQmcHQuZmxhZ3Mpe1p0Lm1zZz0idW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0IixwdC5tb2RlPTMwO2JyZWFrfXB0LmhlYWQmJihwdC5oZWFkLnRleHQ9QnQ+PjgmMSksNTEyJnB0LmZsYWdzJiYoQ2lbMF09MjU1JkJ0LENpWzFdPUJ0Pj4+OCYy''@;'; put 'put ''NTUscHQuY2hlY2s9eChwdC5jaGVjayxDaSwyLDApKSxCdD0wLHpuPTAscHQubW9kZT0zO2Nhc2UgMzpmb3IoO3puPDMyOyl7aWYoMD09PXZyKWJyZWFrIGU7dnItLSxCdCs9cG5bR2UrK108PHpuLHpuKz04fXB0LmhlYWQmJihwdC5oZWFkLnRpbWU9QnQpLDUxMiZwdC5mbGFncyYmKENpWzBd''@;'; put 'put ''PTI1NSZCdCxDaVsxXT1CdD4+PjgmMjU1LENpWzJdPUJ0Pj4+MTYmMjU1LENpWzNdPUJ0Pj4+MjQmMjU1LHB0LmNoZWNrPXgocHQuY2hlY2ssQ2ksNCwwKSksQnQ9MCx6bj0wLHB0Lm1vZGU9NDtjYXNlIDQ6Zm9yKDt6bjwxNjspe2lmKDA9PT12cilicmVhayBlO3ZyLS0sQnQrPXBuW0dlKytd''@;'; put 'put ''PDx6bix6bis9OH1wdC5oZWFkJiYocHQuaGVhZC54ZmxhZ3M9MjU1JkJ0LHB0LmhlYWQub3M9QnQ+PjgpLDUxMiZwdC5mbGFncyYmKENpWzBdPTI1NSZCdCxDaVsxXT1CdD4+PjgmMjU1LHB0LmNoZWNrPXgocHQuY2hlY2ssQ2ksMiwwKSksQnQ9MCx6bj0wLHB0Lm1vZGU9NTtjYXNlIDU6aWYo''@;'; put 'put ''MTAyNCZwdC5mbGFncyl7Zm9yKDt6bjwxNjspe2lmKDA9PT12cilicmVhayBlO3ZyLS0sQnQrPXBuW0dlKytdPDx6bix6bis9OH1wdC5sZW5ndGg9QnQscHQuaGVhZCYmKHB0LmhlYWQuZXh0cmFfbGVuPUJ0KSw1MTImcHQuZmxhZ3MmJihDaVswXT0yNTUmQnQsQ2lbMV09QnQ+Pj44JjI1NSxw''@;'; put 'put ''dC5jaGVjaz14KHB0LmNoZWNrLENpLDIsMCkpLEJ0PTAsem49MH1lbHNlIHB0LmhlYWQmJihwdC5oZWFkLmV4dHJhPW51bGwpO3B0Lm1vZGU9NjtjYXNlIDY6aWYoMTAyNCZwdC5mbGFncyYmKCh2aT1wdC5sZW5ndGgpPnZyJiYodmk9dnIpLHZpJiYocHQuaGVhZCYmKHJhPXB0LmhlYWQuZXh0''@;'; put 'put ''cmFfbGVuLXB0Lmxlbmd0aCxwdC5oZWFkLmV4dHJhfHwocHQuaGVhZC5leHRyYT1uZXcgQXJyYXkocHQuaGVhZC5leHRyYV9sZW4pKSxMLmFycmF5U2V0KHB0LmhlYWQuZXh0cmEscG4sR2UsdmkscmEpKSw1MTImcHQuZmxhZ3MmJihwdC5jaGVjaz14KHB0LmNoZWNrLHBuLHZpLEdlKSksdnIt''@;'; put 'put ''PXZpLEdlKz12aSxwdC5sZW5ndGgtPXZpKSxwdC5sZW5ndGgpKWJyZWFrIGU7cHQubGVuZ3RoPTAscHQubW9kZT03O2Nhc2UgNzppZigyMDQ4JnB0LmZsYWdzKXtpZigwPT09dnIpYnJlYWsgZTt2aT0wO2Rve3JhPXBuW0dlK3ZpKytdLHB0LmhlYWQmJnJhJiZwdC5sZW5ndGg8NjU1MzYmJihw''@;'; put 'put ''dC5oZWFkLm5hbWUrPVN0cmluZy5mcm9tQ2hhckNvZGUocmEpKX13aGlsZShyYSYmdmk8dnIpO2lmKDUxMiZwdC5mbGFncyYmKHB0LmNoZWNrPXgocHQuY2hlY2sscG4sdmksR2UpKSx2ci09dmksR2UrPXZpLHJhKWJyZWFrIGV9ZWxzZSBwdC5oZWFkJiYocHQuaGVhZC5uYW1lPW51bGwpO3B0''@;'; put 'put ''Lmxlbmd0aD0wLHB0Lm1vZGU9ODtjYXNlIDg6aWYoNDA5NiZwdC5mbGFncyl7aWYoMD09PXZyKWJyZWFrIGU7dmk9MDtkb3tyYT1wbltHZSt2aSsrXSxwdC5oZWFkJiZyYSYmcHQubGVuZ3RoPDY1NTM2JiYocHQuaGVhZC5jb21tZW50Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHJhKSl9d2hpbGUo''@;'; put 'put ''cmEmJnZpPHZyKTtpZig1MTImcHQuZmxhZ3MmJihwdC5jaGVjaz14KHB0LmNoZWNrLHBuLHZpLEdlKSksdnItPXZpLEdlKz12aSxyYSlicmVhayBlfWVsc2UgcHQuaGVhZCYmKHB0LmhlYWQuY29tbWVudD1udWxsKTtwdC5tb2RlPTk7Y2FzZSA5OmlmKDUxMiZwdC5mbGFncyl7Zm9yKDt6bjwx''@;'; put 'put ''Njspe2lmKDA9PT12cilicmVhayBlO3ZyLS0sQnQrPXBuW0dlKytdPDx6bix6bis9OH1pZihCdCE9PSg2NTUzNSZwdC5jaGVjaykpe1p0Lm1zZz0iaGVhZGVyIGNyYyBtaXNtYXRjaCIscHQubW9kZT0zMDticmVha31CdD0wLHpuPTB9cHQuaGVhZCYmKHB0LmhlYWQuaGNyYz1wdC5mbGFncz4+''@;'; put 'put ''OSYxLHB0LmhlYWQuZG9uZT0hMCksWnQuYWRsZXI9cHQuY2hlY2s9MCxwdC5tb2RlPTEyO2JyZWFrO2Nhc2UgMTA6Zm9yKDt6bjwzMjspe2lmKDA9PT12cilicmVhayBlO3ZyLS0sQnQrPXBuW0dlKytdPDx6bix6bis9OH1adC5hZGxlcj1wdC5jaGVjaz1YdChCdCksQnQ9MCx6bj0wLHB0Lm1v''@;'; put 'put ''ZGU9MTE7Y2FzZSAxMTppZigwPT09cHQuaGF2ZWRpY3QpcmV0dXJuIFp0Lm5leHRfb3V0PVV0LFp0LmF2YWlsX291dD14dCxadC5uZXh0X2luPUdlLFp0LmF2YWlsX2luPXZyLHB0LmhvbGQ9QnQscHQuYml0cz16biwyO1p0LmFkbGVyPXB0LmNoZWNrPTEscHQubW9kZT0xMjtjYXNlIDEyOmlm''@;'; put 'put ''KDU9PT1Obnx8Nj09PU5uKWJyZWFrIGU7Y2FzZSAxMzppZihwdC5sYXN0KXtCdD4+Pj03JnpuLHpuLT03JnpuLHB0Lm1vZGU9Mjc7YnJlYWt9Zm9yKDt6bjwzOyl7aWYoMD09PXZyKWJyZWFrIGU7dnItLSxCdCs9cG5bR2UrK108PHpuLHpuKz04fXN3aXRjaChwdC5sYXN0PTEmQnQsem4tPTEs''@;'; put 'put ''MyYoQnQ+Pj49MSkpe2Nhc2UgMDpwdC5tb2RlPTE0O2JyZWFrO2Nhc2UgMTppZihTbihwdCkscHQubW9kZT0yMCw2PT09Tm4pe0J0Pj4+PTIsem4tPTI7YnJlYWsgZX1icmVhaztjYXNlIDI6cHQubW9kZT0xNzticmVhaztjYXNlIDM6WnQubXNnPSJpbnZhbGlkIGJsb2NrIHR5cGUiLHB0Lm1v''@;'; put 'put ''ZGU9MzB9QnQ+Pj49Mix6bi09MjticmVhaztjYXNlIDE0OmZvcihCdD4+Pj03JnpuLHpuLT03JnpuO3puPDMyOyl7aWYoMD09PXZyKWJyZWFrIGU7dnItLSxCdCs9cG5bR2UrK108PHpuLHpuKz04fWlmKCg2NTUzNSZCdCkhPShCdD4+PjE2XjY1NTM1KSl7WnQubXNnPSJpbnZhbGlkIHN0b3Jl''@;'; put 'put ''ZCBibG9jayBsZW5ndGhzIixwdC5tb2RlPTMwO2JyZWFrfWlmKHB0Lmxlbmd0aD02NTUzNSZCdCxCdD0wLHpuPTAscHQubW9kZT0xNSw2PT09Tm4pYnJlYWsgZTtjYXNlIDE1OnB0Lm1vZGU9MTY7Y2FzZSAxNjppZih2aT1wdC5sZW5ndGgpe2lmKHZpPnZyJiYodmk9dnIpLHZpPnh0JiYodmk9''@;'; put 'put ''eHQpLDA9PT12aSlicmVhayBlO0wuYXJyYXlTZXQoTWkscG4sR2UsdmksVXQpLHZyLT12aSxHZSs9dmkseHQtPXZpLFV0Kz12aSxwdC5sZW5ndGgtPXZpO2JyZWFrfXB0Lm1vZGU9MTI7YnJlYWs7Y2FzZSAxNzpmb3IoO3puPDE0Oyl7aWYoMD09PXZyKWJyZWFrIGU7dnItLSxCdCs9cG5bR2Ur''@;'; put 'put ''K108PHpuLHpuKz04fWlmKHB0Lm5sZW49MjU3KygzMSZCdCksem4tPTUscHQubmRpc3Q9MSsoMzEmKEJ0Pj4+PTUpKSx6bi09NSxwdC5uY29kZT00KygxNSYoQnQ+Pj49NSkpLEJ0Pj4+PTQsem4tPTQscHQubmxlbj4yODZ8fHB0Lm5kaXN0PjMwKXtadC5tc2c9InRvbyBtYW55IGxlbmd0aCBv''@;'; put 'put ''ciBkaXN0YW5jZSBzeW1ib2xzIixwdC5tb2RlPTMwO2JyZWFrfXB0LmhhdmU9MCxwdC5tb2RlPTE4O2Nhc2UgMTg6Zm9yKDtwdC5oYXZlPHB0Lm5jb2RlOyl7Zm9yKDt6bjwzOyl7aWYoMD09PXZyKWJyZWFrIGU7dnItLSxCdCs9cG5bR2UrK108PHpuLHpuKz04fXB0LmxlbnNba3NbcHQuaGF2''@;'; put 'put ''ZSsrXV09NyZCdCxCdD4+Pj0zLHpuLT0zfWZvcig7cHQuaGF2ZTwxOTspcHQubGVuc1trc1twdC5oYXZlKytdXT0wO2lmKHB0LmxlbmNvZGU9cHQubGVuZHluLHB0LmxlbmJpdHM9NyxjYT1IKDAscHQubGVucywwLDE5LHB0LmxlbmNvZGUsMCxwdC53b3JrLGhvPXtiaXRzOnB0LmxlbmJpdHN9''@;'; put 'put ''KSxwdC5sZW5iaXRzPWhvLmJpdHMsY2Epe1p0Lm1zZz0iaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IixwdC5tb2RlPTMwO2JyZWFrfXB0LmhhdmU9MCxwdC5tb2RlPTE5O2Nhc2UgMTk6Zm9yKDtwdC5oYXZlPHB0Lm5sZW4rcHQubmRpc3Q7KXtmb3IoO0JuPShwbz1wdC5sZW5jb2RlW0J0Jigx''@;'; put 'put ''PDxwdC5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsamE9NjU1MzUmcG8sISgodm49cG8+Pj4yNCk8PXpuKTspe2lmKDA9PT12cilicmVhayBlO3ZyLS0sQnQrPXBuW0dlKytdPDx6bix6bis9OH1pZihqYTwxNilCdD4+Pj12bix6bi09dm4scHQubGVuc1twdC5oYXZlKytdPWphO2Vsc2V7aWYoMTY9''@;'; put 'put ''PT1qYSl7Zm9yKE1hPXZuKzI7em48TWE7KXtpZigwPT09dnIpYnJlYWsgZTt2ci0tLEJ0Kz1wbltHZSsrXTw8em4sem4rPTh9aWYoQnQ+Pj49dm4sem4tPXZuLDA9PT1wdC5oYXZlKXtadC5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLHB0Lm1vZGU9MzA7YnJlYWt9cmE9cHQubGVu''@;'; put 'put ''c1twdC5oYXZlLTFdLHZpPTMrKDMmQnQpLEJ0Pj4+PTIsem4tPTJ9ZWxzZSBpZigxNz09PWphKXtmb3IoTWE9dm4rMzt6bjxNYTspe2lmKDA9PT12cilicmVhayBlO3ZyLS0sQnQrPXBuW0dlKytdPDx6bix6bis9OH16bi09dm4scmE9MCx2aT0zKyg3JihCdD4+Pj12bikpLEJ0Pj4+PTMsem4t''@;'; put 'put ''PTN9ZWxzZXtmb3IoTWE9dm4rNzt6bjxNYTspe2lmKDA9PT12cilicmVhayBlO3ZyLS0sQnQrPXBuW0dlKytdPDx6bix6bis9OH16bi09dm4scmE9MCx2aT0xMSsoMTI3JihCdD4+Pj12bikpLEJ0Pj4+PTcsem4tPTd9aWYocHQuaGF2ZSt2aT5wdC5ubGVuK3B0Lm5kaXN0KXtadC5tc2c9Imlu''@;'; put 'put ''dmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLHB0Lm1vZGU9MzA7YnJlYWt9Zm9yKDt2aS0tOylwdC5sZW5zW3B0LmhhdmUrK109cmF9fWlmKDMwPT09cHQubW9kZSlicmVhaztpZigwPT09cHQubGVuc1syNTZdKXtadC5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIs''@;'; put 'put ''cHQubW9kZT0zMDticmVha31pZihwdC5sZW5iaXRzPTksY2E9SCgxLHB0LmxlbnMsMCxwdC5ubGVuLHB0LmxlbmNvZGUsMCxwdC53b3JrLGhvPXtiaXRzOnB0LmxlbmJpdHN9KSxwdC5sZW5iaXRzPWhvLmJpdHMsY2Epe1p0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0IixwdC5t''@;'; put 'put ''b2RlPTMwO2JyZWFrfWlmKHB0LmRpc3RiaXRzPTYscHQuZGlzdGNvZGU9cHQuZGlzdGR5bixjYT1IKDIscHQubGVucyxwdC5ubGVuLHB0Lm5kaXN0LHB0LmRpc3Rjb2RlLDAscHQud29yayxobz17Yml0czpwdC5kaXN0Yml0c30pLHB0LmRpc3RiaXRzPWhvLmJpdHMsY2Epe1p0Lm1zZz0iaW52''@;'; put 'put ''YWxpZCBkaXN0YW5jZXMgc2V0IixwdC5tb2RlPTMwO2JyZWFrfWlmKHB0Lm1vZGU9MjAsNj09PU5uKWJyZWFrIGU7Y2FzZSAyMDpwdC5tb2RlPTIxO2Nhc2UgMjE6aWYodnI+PTYmJnh0Pj0yNTgpe1p0Lm5leHRfb3V0PVV0LFp0LmF2YWlsX291dD14dCxadC5uZXh0X2luPUdlLFp0LmF2YWls''@;'; put 'put ''X2luPXZyLHB0LmhvbGQ9QnQscHQuYml0cz16bixVKFp0LHluKSxVdD1adC5uZXh0X291dCxNaT1adC5vdXRwdXQseHQ9WnQuYXZhaWxfb3V0LEdlPVp0Lm5leHRfaW4scG49WnQuaW5wdXQsdnI9WnQuYXZhaWxfaW4sQnQ9cHQuaG9sZCx6bj1wdC5iaXRzLDEyPT09cHQubW9kZSYmKHB0LmJh''@;'; put 'put ''Y2s9LTEpO2JyZWFrfWZvcihwdC5iYWNrPTA7Qm49KHBvPXB0LmxlbmNvZGVbQnQmKDE8PHB0LmxlbmJpdHMpLTFdKT4+PjE2JjI1NSxqYT02NTUzNSZwbywhKCh2bj1wbz4+PjI0KTw9em4pOyl7aWYoMD09PXZyKWJyZWFrIGU7dnItLSxCdCs9cG5bR2UrK108PHpuLHpuKz04fWlmKEJuJiYh''@;'; put 'put ''KDI0MCZCbikpe2Zvcihqbz12bixYcj1CbixlYT1qYTtCbj0ocG89cHQubGVuY29kZVtlYSsoKEJ0JigxPDxqbytYciktMSk+PmpvKV0pPj4+MTYmMjU1LGphPTY1NTM1JnBvLCEoam8rKHZuPXBvPj4+MjQpPD16bik7KXtpZigwPT09dnIpYnJlYWsgZTt2ci0tLEJ0Kz1wbltHZSsrXTw8em4s''@;'; put 'put ''em4rPTh9QnQ+Pj49am8sem4tPWpvLHB0LmJhY2srPWpvfWlmKEJ0Pj4+PXZuLHpuLT12bixwdC5iYWNrKz12bixwdC5sZW5ndGg9amEsMD09PUJuKXtwdC5tb2RlPTI2O2JyZWFrfWlmKDMyJkJuKXtwdC5iYWNrPS0xLHB0Lm1vZGU9MTI7YnJlYWt9aWYoNjQmQm4pe1p0Lm1zZz0iaW52YWxp''@;'; put 'put ''ZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixwdC5tb2RlPTMwO2JyZWFrfXB0LmV4dHJhPTE1JkJuLHB0Lm1vZGU9MjI7Y2FzZSAyMjppZihwdC5leHRyYSl7Zm9yKE1hPXB0LmV4dHJhO3puPE1hOyl7aWYoMD09PXZyKWJyZWFrIGU7dnItLSxCdCs9cG5bR2UrK108PHpuLHpuKz04fXB0Lmxlbmd0''@;'; put 'put ''aCs9QnQmKDE8PHB0LmV4dHJhKS0xLEJ0Pj4+PXB0LmV4dHJhLHpuLT1wdC5leHRyYSxwdC5iYWNrKz1wdC5leHRyYX1wdC53YXM9cHQubGVuZ3RoLHB0Lm1vZGU9MjM7Y2FzZSAyMzpmb3IoO0JuPShwbz1wdC5kaXN0Y29kZVtCdCYoMTw8cHQuZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSxqYT02''@;'; put 'put ''NTUzNSZwbywhKCh2bj1wbz4+PjI0KTw9em4pOyl7aWYoMD09PXZyKWJyZWFrIGU7dnItLSxCdCs9cG5bR2UrK108PHpuLHpuKz04fWlmKCEoMjQwJkJuKSl7Zm9yKGpvPXZuLFhyPUJuLGVhPWphO0JuPShwbz1wdC5kaXN0Y29kZVtlYSsoKEJ0JigxPDxqbytYciktMSk+PmpvKV0pPj4+MTYm''@;'; put 'put ''MjU1LGphPTY1NTM1JnBvLCEoam8rKHZuPXBvPj4+MjQpPD16bik7KXtpZigwPT09dnIpYnJlYWsgZTt2ci0tLEJ0Kz1wbltHZSsrXTw8em4sem4rPTh9QnQ+Pj49am8sem4tPWpvLHB0LmJhY2srPWpvfWlmKEJ0Pj4+PXZuLHpuLT12bixwdC5iYWNrKz12biw2NCZCbil7WnQubXNnPSJpbnZh''@;'; put 'put ''bGlkIGRpc3RhbmNlIGNvZGUiLHB0Lm1vZGU9MzA7YnJlYWt9cHQub2Zmc2V0PWphLHB0LmV4dHJhPTE1JkJuLHB0Lm1vZGU9MjQ7Y2FzZSAyNDppZihwdC5leHRyYSl7Zm9yKE1hPXB0LmV4dHJhO3puPE1hOyl7aWYoMD09PXZyKWJyZWFrIGU7dnItLSxCdCs9cG5bR2UrK108PHpuLHpuKz04''@;'; put 'put ''fXB0Lm9mZnNldCs9QnQmKDE8PHB0LmV4dHJhKS0xLEJ0Pj4+PXB0LmV4dHJhLHpuLT1wdC5leHRyYSxwdC5iYWNrKz1wdC5leHRyYX1pZihwdC5vZmZzZXQ+cHQuZG1heCl7WnQubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIscHQubW9kZT0zMDticmVha31wdC5tb2RlPTI1''@;'; put 'put ''O2Nhc2UgMjU6aWYoMD09PXh0KWJyZWFrIGU7aWYocHQub2Zmc2V0Pih2aT15bi14dCkpe2lmKCh2aT1wdC5vZmZzZXQtdmkpPnB0LndoYXZlJiZwdC5zYW5lKXtadC5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixwdC5tb2RlPTMwO2JyZWFrfXJyPXZpPnB0LnduZXh0P3B0''@;'; put 'put ''LndzaXplLSh2aS09cHQud25leHQpOnB0LnduZXh0LXZpLHZpPnB0Lmxlbmd0aCYmKHZpPXB0Lmxlbmd0aCksaHI9cHQud2luZG93fWVsc2UgaHI9TWkscnI9VXQtcHQub2Zmc2V0LHZpPXB0Lmxlbmd0aDt2aT54dCYmKHZpPXh0KSx4dC09dmkscHQubGVuZ3RoLT12aTtkb3tNaVtVdCsrXT1o''@;'; put 'put ''cltycisrXX13aGlsZSgtLXZpKTswPT09cHQubGVuZ3RoJiYocHQubW9kZT0yMSk7YnJlYWs7Y2FzZSAyNjppZigwPT09eHQpYnJlYWsgZTtNaVtVdCsrXT1wdC5sZW5ndGgseHQtLSxwdC5tb2RlPTIxO2JyZWFrO2Nhc2UgMjc6aWYocHQud3JhcCl7Zm9yKDt6bjwzMjspe2lmKDA9PT12cili''@;'; put 'put ''cmVhayBlO3ZyLS0sQnR8PXBuW0dlKytdPDx6bix6bis9OH1pZihadC50b3RhbF9vdXQrPXluLT14dCxwdC50b3RhbCs9eW4seW4mJihadC5hZGxlcj1wdC5jaGVjaz1wdC5mbGFncz94KHB0LmNoZWNrLE1pLHluLFV0LXluKTpSKHB0LmNoZWNrLE1pLHluLFV0LXluKSkseW49eHQsKHB0LmZs''@;'; put 'put ''YWdzP0J0Olh0KEJ0KSkhPT1wdC5jaGVjayl7WnQubXNnPSJpbmNvcnJlY3QgZGF0YSBjaGVjayIscHQubW9kZT0zMDticmVha31CdD0wLHpuPTB9cHQubW9kZT0yODtjYXNlIDI4OmlmKHB0LndyYXAmJnB0LmZsYWdzKXtmb3IoO3puPDMyOyl7aWYoMD09PXZyKWJyZWFrIGU7dnItLSxCdCs9''@;'; put 'put ''cG5bR2UrK108PHpuLHpuKz04fWlmKEJ0IT09KDQyOTQ5NjcyOTUmcHQudG90YWwpKXtadC5tc2c9ImluY29ycmVjdCBsZW5ndGggY2hlY2siLHB0Lm1vZGU9MzA7YnJlYWt9QnQ9MCx6bj0wfXB0Lm1vZGU9Mjk7Y2FzZSAyOTpjYT0xO2JyZWFrIGU7Y2FzZSAzMDpjYT0tMzticmVhayBlO2Nh''@;'; put 'put ''c2UgMzE6cmV0dXJuLTQ7ZGVmYXVsdDpyZXR1cm4tMn1yZXR1cm4gWnQubmV4dF9vdXQ9VXQsWnQuYXZhaWxfb3V0PXh0LFp0Lm5leHRfaW49R2UsWnQuYXZhaWxfaW49dnIscHQuaG9sZD1CdCxwdC5iaXRzPXpuLChwdC53c2l6ZXx8eW4hPT1adC5hdmFpbF9vdXQmJnB0Lm1vZGU8MzAmJihw''@;'; put 'put ''dC5tb2RlPDI3fHw0IT09Tm4pKSYmZnVuY3Rpb24geHIoWnQsTm4scHQscG4pe3ZhciBNaSxHZT1adC5zdGF0ZTtyZXR1cm4gbnVsbD09PUdlLndpbmRvdyYmKEdlLndzaXplPTE8PEdlLndiaXRzLEdlLnduZXh0PTAsR2Uud2hhdmU9MCxHZS53aW5kb3c9bmV3IEwuQnVmOChHZS53c2l6ZSkp''@;'; put 'put ''LHBuPj1HZS53c2l6ZT8oTC5hcnJheVNldChHZS53aW5kb3csTm4scHQtR2Uud3NpemUsR2Uud3NpemUsMCksR2Uud25leHQ9MCxHZS53aGF2ZT1HZS53c2l6ZSk6KChNaT1HZS53c2l6ZS1HZS53bmV4dCk+cG4mJihNaT1wbiksTC5hcnJheVNldChHZS53aW5kb3csTm4scHQtcG4sTWksR2Uu''@;'; put 'put ''d25leHQpLChwbi09TWkpPyhMLmFycmF5U2V0KEdlLndpbmRvdyxObixwdC1wbixwbiwwKSxHZS53bmV4dD1wbixHZS53aGF2ZT1HZS53c2l6ZSk6KEdlLnduZXh0Kz1NaSxHZS53bmV4dD09PUdlLndzaXplJiYoR2Uud25leHQ9MCksR2Uud2hhdmU8R2Uud3NpemUmJihHZS53aGF2ZSs9TWkp''@;'; put 'put ''KSksMH0oWnQsWnQub3V0cHV0LFp0Lm5leHRfb3V0LHluLVp0LmF2YWlsX291dCk/KHB0Lm1vZGU9MzEsLTQpOih5bi09WnQuYXZhaWxfb3V0LFp0LnRvdGFsX2luKz1Hbi09WnQuYXZhaWxfaW4sWnQudG90YWxfb3V0Kz15bixwdC50b3RhbCs9eW4scHQud3JhcCYmeW4mJihadC5hZGxlcj1w''@;'; put 'put ''dC5jaGVjaz1wdC5mbGFncz94KHB0LmNoZWNrLE1pLHluLFp0Lm5leHRfb3V0LXluKTpSKHB0LmNoZWNrLE1pLHluLFp0Lm5leHRfb3V0LXluKSksWnQuZGF0YV90eXBlPXB0LmJpdHMrKHB0Lmxhc3Q/NjQ6MCkrKDEyPT09cHQubW9kZT8xMjg6MCkrKDIwPT09cHQubW9kZXx8MTU9PT1wdC5t''@;'; put 'put ''b2RlPzI1NjowKSwoMD09PUduJiYwPT09eW58fDQ9PT1ObikmJjA9PT1jYSYmKGNhPS01KSxjYSl9LFMuaW5mbGF0ZUVuZD1mdW5jdGlvbiBBcihadCl7aWYoIVp0fHwhWnQuc3RhdGUpcmV0dXJuLTI7dmFyIE5uPVp0LnN0YXRlO3JldHVybiBObi53aW5kb3cmJihObi53aW5kb3c9bnVsbCks''@;'; put 'put ''WnQuc3RhdGU9bnVsbCwwfSxTLmluZmxhdGVHZXRIZWFkZXI9ZnVuY3Rpb24gX24oWnQsTm4pe3ZhciBwdDtyZXR1cm4gWnQmJlp0LnN0YXRlJiYyJihwdD1adC5zdGF0ZSkud3JhcD8ocHQuaGVhZD1ObixObi5kb25lPSExLDApOi0yfSxTLmluZmxhdGVJbmZvPSJwYWtvIGluZmxhdGUgKGZy''@;'; put 'put ''b20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjI3LCIuL2FkbGVyMzIiOjI5LCIuL2NyYzMyIjozMSwiLi9pbmZmYXN0IjozNCwiLi9pbmZ0cmVlcyI6MzZ9XSwzNjpbZnVuY3Rpb24oQyx3LFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgTD1DKCIuLi91dGlscy9jb21tb24iKSx6''@;'; put 'put ''PVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4LDAsMF0sWT1bMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTcsMTcsMTcsMTcsMTgsMTgsMTgsMTgsMTksMTksMTksMTksMjAsMjAsMjAs''@;'; put 'put ''MjAsMjEsMjEsMjEsMjEsMTYsNzIsNzhdLEY9WzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3NywwLDBdLFc9WzE2LDE2LDE2LDE2LDE3LDE3''@;'; put 'put ''LDE4LDE4LDE5LDE5LDIwLDIwLDIxLDIxLDIyLDIyLDIzLDIzLDI0LDI0LDI1LDI1LDI2LDI2LDI3LDI3LDI4LDI4LDI5LDI5LDY0LDY0XTt3LmV4cG9ydHM9ZnVuY3Rpb24ocmUsbWUsQ2UsSWUsa2UscWUsWCxmKXt2YXIgX2UsUGUsb3QsbHQsZHQseGUsZ2UsY2UsaGUsYj1mLmJpdHMsaz0w''@;'; put 'put ''LE09MCxCPTAsSz0wLEc9MCxEPTAscD0wLEk9MCx1ZT0wLG5lPTAsUmU9bnVsbCxhZT0wLGplPW5ldyBMLkJ1ZjE2KDE2KSxBZT1uZXcgTC5CdWYxNigxNiksRGU9bnVsbCxGZT0wO2ZvcihrPTA7azw9MTU7aysrKWplW2tdPTA7Zm9yKE09MDtNPEllO00rKylqZVttZVtDZStNXV0rKztmb3Io''@;'; put 'put ''Rz1iLEs9MTU7Sz49MSYmMD09PWplW0tdO0stLSk7aWYoRz5LJiYoRz1LKSwwPT09SylyZXR1cm4ga2VbcWUrK109MjA5NzE1MjAsa2VbcWUrK109MjA5NzE1MjAsZi5iaXRzPTEsMDtmb3IoQj0xO0I8SyYmMD09PWplW0JdO0IrKyk7Zm9yKEc8QiYmKEc9QiksST0xLGs9MTtrPD0xNTtrKysp''@;'; put 'put ''aWYoSTw8PTEsKEktPWplW2tdKTwwKXJldHVybi0xO2lmKEk+MCYmKDA9PT1yZXx8MSE9PUspKXJldHVybi0xO2ZvcihBZVsxXT0wLGs9MTtrPDE1O2srKylBZVtrKzFdPUFlW2tdK2plW2tdO2ZvcihNPTA7TTxJZTtNKyspMCE9PW1lW0NlK01dJiYoWFtBZVttZVtDZStNXV0rK109TSk7aWYo''@;'; put 'put ''MD09PXJlPyhSZT1EZT1YLHhlPTE5KToxPT09cmU/KFJlPXosYWUtPTI1NyxEZT1ZLEZlLT0yNTcseGU9MjU2KTooUmU9RixEZT1XLHhlPS0xKSxuZT0wLE09MCxrPUIsZHQ9cWUsRD1HLHA9MCxvdD0tMSxsdD0odWU9MTw8RyktMSwxPT09cmUmJnVlPjg1Mnx8Mj09PXJlJiZ1ZT41OTIpcmV0''@;'; put 'put ''dXJuIDE7Zm9yKDs7KXtnZT1rLXAsWFtNXTx4ZT8oY2U9MCxoZT1YW01dKTpYW01dPnhlPyhjZT1EZVtGZStYW01dXSxoZT1SZVthZStYW01dXSk6KGNlPTk2LGhlPTApLF9lPTE8PGstcCxCPVBlPTE8PEQ7ZG97a2VbZHQrKG5lPj5wKSsoUGUtPV9lKV09Z2U8PDI0fGNlPDwxNnxoZX13aGls''@;'; put 'put ''ZSgwIT09UGUpO2ZvcihfZT0xPDxrLTE7bmUmX2U7KV9lPj49MTtpZigwIT09X2U/KG5lJj1fZS0xLG5lKz1fZSk6bmU9MCxNKyssMD09PS0tamVba10pe2lmKGs9PT1LKWJyZWFrO2s9bWVbQ2UrWFtNXV19aWYoaz5HJiYobmUmbHQpIT09b3Qpe2ZvcigwPT09cCYmKHA9RyksZHQrPUIsST0x''@;'; put 'put ''PDwoRD1rLXApO0QrcDxLJiYhKChJLT1qZVtEK3BdKTw9MCk7KUQrKyxJPDw9MTtpZih1ZSs9MTw8RCwxPT09cmUmJnVlPjg1Mnx8Mj09PXJlJiZ1ZT41OTIpcmV0dXJuIDE7a2Vbb3Q9bmUmbHRdPUc8PDI0fEQ8PDE2fGR0LXFlfX1yZXR1cm4gMCE9PW5lJiYoa2VbZHQrbmVdPWstcDw8MjR8''@;'; put 'put ''NjQ8PDE2KSxmLmJpdHM9RywwfX0seyIuLi91dGlscy9jb21tb24iOjI3fV0sMzc6W2Z1bmN0aW9uKEMsdyxTKXsidXNlIHN0cmljdCI7dy5leHBvcnRzPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9y''@;'; put 'put ''IiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn19LHt9XSwzODpbZnVuY3Rpb24oQyx3LFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgTD1DKCIuLi91dGlscy9jb21tb24iKTtmdW5j''@;'; put 'put ''dGlvbiBWKFR0KXtmb3IodmFyIEFyPVR0Lmxlbmd0aDstLUFyPj0wOylUdFtBcl09MH12YXIgSz1bMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSxHPVswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEw''@;'; put 'put ''LDEwLDExLDExLDEyLDEyLDEzLDEzXSxEPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XSxwPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSx1ZT1uZXcgQXJyYXkoNTc2KTtWKHVlKTt2YXIgbmU9bmV3IEFycmF5KDYwKTtWKG5l''@;'; put 'put ''KTt2YXIgX2U9bmV3IEFycmF5KDUxMik7VihfZSk7dmFyIFBlPW5ldyBBcnJheSgyNTYpO1YoUGUpO3ZhciBvdD1uZXcgQXJyYXkoMjkpO1Yob3QpO3ZhciBsdD1uZXcgQXJyYXkoMzApO1YobHQpO3ZhciBSZSxhZSx4ZSxkdD1mdW5jdGlvbihUdCxBcixfbixadCxObil7dGhpcy5zdGF0aWNf''@;'; put 'put ''dHJlZT1UdCx0aGlzLmV4dHJhX2JpdHM9QXIsdGhpcy5leHRyYV9iYXNlPV9uLHRoaXMuZWxlbXM9WnQsdGhpcy5tYXhfbGVuZ3RoPU5uLHRoaXMuaGFzX3N0cmVlPVR0JiZUdC5sZW5ndGh9LGplPWZ1bmN0aW9uKFR0LEFyKXt0aGlzLmR5bl90cmVlPVR0LHRoaXMubWF4X2NvZGU9MCx0aGlz''@;'; put 'put ''LnN0YXRfZGVzYz1Bcn07ZnVuY3Rpb24gQWUoVHQpe3JldHVybiBUdDwyNTY/X2VbVHRdOl9lWzI1NisoVHQ+Pj43KV19ZnVuY3Rpb24gRGUoVHQsQXIpe1R0LnBlbmRpbmdfYnVmW1R0LnBlbmRpbmcrK109MjU1JkFyLFR0LnBlbmRpbmdfYnVmW1R0LnBlbmRpbmcrK109QXI+Pj44JjI1NX1m''@;'; put 'put ''dW5jdGlvbiBGZShUdCxBcixfbil7VHQuYmlfdmFsaWQ+MTYtX24/KFR0LmJpX2J1Znw9QXI8PFR0LmJpX3ZhbGlkJjY1NTM1LERlKFR0LFR0LmJpX2J1ZiksVHQuYmlfYnVmPUFyPj4xNi1UdC5iaV92YWxpZCxUdC5iaV92YWxpZCs9X24tMTYpOihUdC5iaV9idWZ8PUFyPDxUdC5iaV92YWxp''@;'; put 'put ''ZCY2NTUzNSxUdC5iaV92YWxpZCs9X24pfWZ1bmN0aW9uIGdlKFR0LEFyLF9uKXtGZShUdCxfblsyKkFyXSxfblsyKkFyKzFdKX1mdW5jdGlvbiBjZShUdCxBcil7dmFyIF9uPTA7ZG97X258PTEmVHQsVHQ+Pj49MSxfbjw8PTF9d2hpbGUoLS1Bcj4wKTtyZXR1cm4gX24+Pj4xfWZ1bmN0aW9u''@;'; put 'put ''IEplKFR0LEFyLF9uKXt2YXIgcHQscG4sWnQ9bmV3IEFycmF5KDE2KSxObj0wO2ZvcihwdD0xO3B0PD0xNTtwdCsrKVp0W3B0XT1Obj1ObitfbltwdC0xXTw8MTtmb3IocG49MDtwbjw9QXI7cG4rKyl7dmFyIE1pPVR0WzIqcG4rMV07MCE9PU1pJiYoVHRbMipwbl09Y2UoWnRbTWldKyssTWkp''@;'; put 'put ''KX19ZnVuY3Rpb24gS2UoVHQpe3ZhciBBcjtmb3IoQXI9MDtBcjwyODY7QXIrKylUdC5keW5fbHRyZWVbMipBcl09MDtmb3IoQXI9MDtBcjwzMDtBcisrKVR0LmR5bl9kdHJlZVsyKkFyXT0wO2ZvcihBcj0wO0FyPDE5O0FyKyspVHQuYmxfdHJlZVsyKkFyXT0wO1R0LmR5bl9sdHJlZVs1MTJd''@;'; put 'put ''PTEsVHQub3B0X2xlbj1UdC5zdGF0aWNfbGVuPTAsVHQubGFzdF9saXQ9VHQubWF0Y2hlcz0wfWZ1bmN0aW9uICR0KFR0KXtUdC5iaV92YWxpZD44P0RlKFR0LFR0LmJpX2J1Zik6VHQuYmlfdmFsaWQ+MCYmKFR0LnBlbmRpbmdfYnVmW1R0LnBlbmRpbmcrK109VHQuYmlfYnVmKSxUdC5iaV9i''@;'; put 'put ''dWY9MCxUdC5iaV92YWxpZD0wfWZ1bmN0aW9uIEx0KFR0LEFyLF9uLFp0KXt2YXIgTm49MipBcixwdD0yKl9uO3JldHVybiBUdFtObl08VHRbcHRdfHxUdFtObl09PT1UdFtwdF0mJlp0W0FyXTw9WnRbX25dfWZ1bmN0aW9uIEd0KFR0LEFyLF9uKXtmb3IodmFyIFp0PVR0LmhlYXBbX25dLE5u''@;'; put 'put ''PV9uPDwxO05uPD1UdC5oZWFwX2xlbiYmKE5uPFR0LmhlYXBfbGVuJiZMdChBcixUdC5oZWFwW05uKzFdLFR0LmhlYXBbTm5dLFR0LmRlcHRoKSYmTm4rKywhTHQoQXIsWnQsVHQuaGVhcFtObl0sVHQuZGVwdGgpKTspVHQuaGVhcFtfbl09VHQuaGVhcFtObl0sX249Tm4sTm48PD0xO1R0Lmhl''@;'; put 'put ''YXBbX25dPVp0fWZ1bmN0aW9uIGd0KFR0LEFyLF9uKXt2YXIgWnQsTm4scG4sTWkscHQ9MDtpZigwIT09VHQubGFzdF9saXQpZG97WnQ9VHQucGVuZGluZ19idWZbVHQuZF9idWYrMipwdF08PDh8VHQucGVuZGluZ19idWZbVHQuZF9idWYrMipwdCsxXSxObj1UdC5wZW5kaW5nX2J1ZltUdC5s''@;'; put 'put ''X2J1ZitwdF0scHQrKywwPT09WnQ/Z2UoVHQsTm4sQXIpOihnZShUdCwocG49UGVbTm5dKSsyNTYrMSxBciksMCE9PShNaT1LW3BuXSkmJkZlKFR0LE5uLT1vdFtwbl0sTWkpLGdlKFR0LHBuPUFlKC0tWnQpLF9uKSwwIT09KE1pPUdbcG5dKSYmRmUoVHQsWnQtPWx0W3BuXSxNaSkpfXdoaWxl''@;'; put 'put ''KHB0PFR0Lmxhc3RfbGl0KTtnZShUdCwyNTYsQXIpfWZ1bmN0aW9uIFh0KFR0LEFyKXt2YXIgcG4sTWksVXQsX249QXIuZHluX3RyZWUsWnQ9QXIuc3RhdF9kZXNjLnN0YXRpY190cmVlLE5uPUFyLnN0YXRfZGVzYy5oYXNfc3RyZWUscHQ9QXIuc3RhdF9kZXNjLmVsZW1zLEdlPS0xO2ZvcihU''@;'; put 'put ''dC5oZWFwX2xlbj0wLFR0LmhlYXBfbWF4PTU3Myxwbj0wO3BuPHB0O3BuKyspMCE9PV9uWzIqcG5dPyhUdC5oZWFwWysrVHQuaGVhcF9sZW5dPUdlPXBuLFR0LmRlcHRoW3BuXT0wKTpfblsyKnBuKzFdPTA7Zm9yKDtUdC5oZWFwX2xlbjwyOylfblsyKihVdD1UdC5oZWFwWysrVHQuaGVhcF9s''@;'; put 'put ''ZW5dPUdlPDI/KytHZTowKV09MSxUdC5kZXB0aFtVdF09MCxUdC5vcHRfbGVuLS0sTm4mJihUdC5zdGF0aWNfbGVuLT1adFsyKlV0KzFdKTtmb3IoQXIubWF4X2NvZGU9R2UscG49VHQuaGVhcF9sZW4+PjE7cG4+PTE7cG4tLSlHdChUdCxfbixwbik7VXQ9cHQ7ZG97cG49VHQuaGVhcFsxXSxU''@;'; put 'put ''dC5oZWFwWzFdPVR0LmhlYXBbVHQuaGVhcF9sZW4tLV0sR3QoVHQsX24sMSksTWk9VHQuaGVhcFsxXSxUdC5oZWFwWy0tVHQuaGVhcF9tYXhdPXBuLFR0LmhlYXBbLS1UdC5oZWFwX21heF09TWksX25bMipVdF09X25bMipwbl0rX25bMipNaV0sVHQuZGVwdGhbVXRdPShUdC5kZXB0aFtwbl0+''@;'; put 'put ''PVR0LmRlcHRoW01pXT9UdC5kZXB0aFtwbl06VHQuZGVwdGhbTWldKSsxLF9uWzIqcG4rMV09X25bMipNaSsxXT1VdCxUdC5oZWFwWzFdPVV0KyssR3QoVHQsX24sMSl9d2hpbGUoVHQuaGVhcF9sZW4+PTIpO1R0LmhlYXBbLS1UdC5oZWFwX21heF09VHQuaGVhcFsxXSxmdW5jdGlvbiB3ZShU''@;'; put 'put ''dCxBcil7dmFyIFV0LHZyLHh0LEJ0LHpuLEduLF9uPUFyLmR5bl90cmVlLFp0PUFyLm1heF9jb2RlLE5uPUFyLnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxwdD1Bci5zdGF0X2Rlc2MuaGFzX3N0cmVlLHBuPUFyLnN0YXRfZGVzYy5leHRyYV9iaXRzLE1pPUFyLnN0YXRfZGVzYy5leHRyYV9iYXNl''@;'; put 'put ''LEdlPUFyLnN0YXRfZGVzYy5tYXhfbGVuZ3RoLHluPTA7Zm9yKEJ0PTA7QnQ8PTE1O0J0KyspVHQuYmxfY291bnRbQnRdPTA7Zm9yKF9uWzIqVHQuaGVhcFtUdC5oZWFwX21heF0rMV09MCxVdD1UdC5oZWFwX21heCsxO1V0PDU3MztVdCsrKShCdD1fblsyKl9uWzIqKHZyPVR0LmhlYXBbVXRd''@;'; put 'put ''KSsxXSsxXSsxKT5HZSYmKEJ0PUdlLHluKyspLF9uWzIqdnIrMV09QnQsISh2cj5adCkmJihUdC5ibF9jb3VudFtCdF0rKyx6bj0wLHZyPj1NaSYmKHpuPXBuW3ZyLU1pXSksVHQub3B0X2xlbis9KEduPV9uWzIqdnJdKSooQnQrem4pLHB0JiYoVHQuc3RhdGljX2xlbis9R24qKE5uWzIqdnIr''@;'; put 'put ''MV0rem4pKSk7aWYoMCE9PXluKXtkb3tmb3IoQnQ9R2UtMTswPT09VHQuYmxfY291bnRbQnRdOylCdC0tO1R0LmJsX2NvdW50W0J0XS0tLFR0LmJsX2NvdW50W0J0KzFdKz0yLFR0LmJsX2NvdW50W0dlXS0tLHluLT0yfXdoaWxlKHluPjApO2ZvcihCdD1HZTswIT09QnQ7QnQtLSlmb3IodnI9''@;'; put 'put ''VHQuYmxfY291bnRbQnRdOzAhPT12cjspISgoeHQ9VHQuaGVhcFstLVV0XSk+WnQpJiYoX25bMip4dCsxXSE9PUJ0JiYoVHQub3B0X2xlbis9KEJ0LV9uWzIqeHQrMV0pKl9uWzIqeHRdLF9uWzIqeHQrMV09QnQpLHZyLS0pfX0oVHQsQXIpLEplKF9uLEdlLFR0LmJsX2NvdW50KX1mdW5jdGlv''@;'; put 'put ''biBMcihUdCxBcixfbil7dmFyIFp0LHB0LE5uPS0xLHBuPUFyWzFdLE1pPTAsR2U9NyxVdD00O2ZvcigwPT09cG4mJihHZT0xMzgsVXQ9MyksQXJbMiooX24rMSkrMV09NjU1MzUsWnQ9MDtadDw9X247WnQrKylwdD1wbixwbj1BclsyKihadCsxKSsxXSwhKCsrTWk8R2UmJnB0PT09cG4pJiYo''@;'; put 'put ''TWk8VXQ/VHQuYmxfdHJlZVsyKnB0XSs9TWk6MCE9PXB0PyhwdCE9PU5uJiZUdC5ibF90cmVlWzIqcHRdKyssVHQuYmxfdHJlZVszMl0rKyk6TWk8PTEwP1R0LmJsX3RyZWVbMzRdKys6VHQuYmxfdHJlZVszNl0rKyxNaT0wLE5uPXB0LDA9PT1wbj8oR2U9MTM4LFV0PTMpOnB0PT09cG4/KEdl''@;'; put 'put ''PTYsVXQ9Myk6KEdlPTcsVXQ9NCkpfWZ1bmN0aW9uIGxuKFR0LEFyLF9uKXt2YXIgWnQscHQsTm49LTEscG49QXJbMV0sTWk9MCxHZT03LFV0PTQ7Zm9yKDA9PT1wbiYmKEdlPTEzOCxVdD0zKSxadD0wO1p0PD1fbjtadCsrKWlmKHB0PXBuLHBuPUFyWzIqKFp0KzEpKzFdLCEoKytNaTxHZSYm''@;'; put 'put ''cHQ9PT1wbikpe2lmKE1pPFV0KWRve2dlKFR0LHB0LFR0LmJsX3RyZWUpfXdoaWxlKDAhPT0tLU1pKTtlbHNlIDAhPT1wdD8ocHQhPT1ObiYmKGdlKFR0LHB0LFR0LmJsX3RyZWUpLE1pLS0pLGdlKFR0LDE2LFR0LmJsX3RyZWUpLEZlKFR0LE1pLTMsMikpOk1pPD0xMD8oZ2UoVHQsMTcsVHQu''@;'; put 'put ''YmxfdHJlZSksRmUoVHQsTWktMywzKSk6KGdlKFR0LDE4LFR0LmJsX3RyZWUpLEZlKFR0LE1pLTExLDcpKTtNaT0wLE5uPXB0LDA9PT1wbj8oR2U9MTM4LFV0PTMpOnB0PT09cG4/KEdlPTYsVXQ9Myk6KEdlPTcsVXQ9NCl9fXZhciBIbj0hMTtmdW5jdGlvbiB1cihUdCxBcixfbixadCl7RmUo''@;'; put 'put ''VHQsMCsoWnQ/MTowKSwzKSxmdW5jdGlvbiBSdChUdCxBcixfbixadCl7JHQoVHQpLFp0JiYoRGUoVHQsX24pLERlKFR0LH5fbikpLEwuYXJyYXlTZXQoVHQucGVuZGluZ19idWYsVHQud2luZG93LEFyLF9uLFR0LnBlbmRpbmcpLFR0LnBlbmRpbmcrPV9ufShUdCxBcixfbiwhMCl9Uy5fdHJf''@;'; put 'put ''aW5pdD1mdW5jdGlvbiBPbyhUdCl7SG58fChmdW5jdGlvbiB0dCgpe3ZhciBUdCxBcixfbixadCxObixwdD1uZXcgQXJyYXkoMTYpO2Zvcihfbj0wLFp0PTA7WnQ8Mjg7WnQrKylmb3Iob3RbWnRdPV9uLFR0PTA7VHQ8MTw8S1tadF07VHQrKylQZVtfbisrXT1adDtmb3IoUGVbX24tMV09WnQs''@;'; put 'put ''Tm49MCxadD0wO1p0PDE2O1p0KyspZm9yKGx0W1p0XT1ObixUdD0wO1R0PDE8PEdbWnRdO1R0KyspX2VbTm4rK109WnQ7Zm9yKE5uPj49NztadDwzMDtadCsrKWZvcihsdFtadF09Tm48PDcsVHQ9MDtUdDwxPDxHW1p0XS03O1R0KyspX2VbMjU2K05uKytdPVp0O2ZvcihBcj0wO0FyPD0xNTtB''@;'; put 'put ''cisrKXB0W0FyXT0wO2ZvcihUdD0wO1R0PD0xNDM7KXVlWzIqVHQrMV09OCxUdCsrLHB0WzhdKys7Zm9yKDtUdDw9MjU1Oyl1ZVsyKlR0KzFdPTksVHQrKyxwdFs5XSsrO2Zvcig7VHQ8PTI3OTspdWVbMipUdCsxXT03LFR0KysscHRbN10rKztmb3IoO1R0PD0yODc7KXVlWzIqVHQrMV09OCxU''@;'; put 'put ''dCsrLHB0WzhdKys7Zm9yKEplKHVlLDI4NyxwdCksVHQ9MDtUdDwzMDtUdCsrKW5lWzIqVHQrMV09NSxuZVsyKlR0XT1jZShUdCw1KTtSZT1uZXcgZHQodWUsSywyNTcsMjg2LDE1KSxhZT1uZXcgZHQobmUsRywwLDMwLDE1KSx4ZT1uZXcgZHQobmV3IEFycmF5KDApLEQsMCwxOSw3KX0oKSxI''@;'; put 'put ''bj0hMCksVHQubF9kZXNjPW5ldyBqZShUdC5keW5fbHRyZWUsUmUpLFR0LmRfZGVzYz1uZXcgamUoVHQuZHluX2R0cmVlLGFlKSxUdC5ibF9kZXNjPW5ldyBqZShUdC5ibF90cmVlLHhlKSxUdC5iaV9idWY9MCxUdC5iaV92YWxpZD0wLEtlKFR0KX0sUy5fdHJfc3RvcmVkX2Jsb2NrPXVyLFMu''@;'; put 'put ''X3RyX2ZsdXNoX2Jsb2NrPWZ1bmN0aW9uIFNuKFR0LEFyLF9uLFp0KXt2YXIgTm4scHQscG49MDtUdC5sZXZlbD4wPygyPT09VHQuc3RybS5kYXRhX3R5cGUmJihUdC5zdHJtLmRhdGFfdHlwZT1mdW5jdGlvbiB0cihUdCl7dmFyIF9uLEFyPTQwOTM2MjQ0NDc7Zm9yKF9uPTA7X248PTMxO19u''@;'; put 'put ''KyssQXI+Pj49MSlpZigxJkFyJiYwIT09VHQuZHluX2x0cmVlWzIqX25dKXJldHVybiAwO2lmKDAhPT1UdC5keW5fbHRyZWVbMThdfHwwIT09VHQuZHluX2x0cmVlWzIwXXx8MCE9PVR0LmR5bl9sdHJlZVsyNl0pcmV0dXJuIDE7Zm9yKF9uPTMyO19uPDI1NjtfbisrKWlmKDAhPT1UdC5keW5f''@;'; put 'put ''bHRyZWVbMipfbl0pcmV0dXJuIDE7cmV0dXJuIDB9KFR0KSksWHQoVHQsVHQubF9kZXNjKSxYdChUdCxUdC5kX2Rlc2MpLHBuPWZ1bmN0aW9uIE9uKFR0KXt2YXIgQXI7Zm9yKExyKFR0LFR0LmR5bl9sdHJlZSxUdC5sX2Rlc2MubWF4X2NvZGUpLExyKFR0LFR0LmR5bl9kdHJlZSxUdC5kX2Rl''@;'; put 'put ''c2MubWF4X2NvZGUpLFh0KFR0LFR0LmJsX2Rlc2MpLEFyPTE4O0FyPj0zJiYwPT09VHQuYmxfdHJlZVsyKnBbQXJdKzFdO0FyLS0pO3JldHVybiBUdC5vcHRfbGVuKz0zKihBcisxKSs1KzUrNCxBcn0oVHQpLChwdD1UdC5zdGF0aWNfbGVuKzMrNz4+PjMpPD0oTm49VHQub3B0X2xlbiszKzc+''@;'; put 'put ''Pj4zKSYmKE5uPXB0KSk6Tm49cHQ9X24rNSxfbis0PD1ObiYmLTEhPT1Bcj91cihUdCxBcixfbixadCk6ND09PVR0LnN0cmF0ZWd5fHxwdD09PU5uPyhGZShUdCwyKyhadD8xOjApLDMpLGd0KFR0LHVlLG5lKSk6KEZlKFR0LDQrKFp0PzE6MCksMyksZnVuY3Rpb24gUXIoVHQsQXIsX24sWnQp''@;'; put 'put ''e3ZhciBObjtmb3IoRmUoVHQsQXItMjU3LDUpLEZlKFR0LF9uLTEsNSksRmUoVHQsWnQtNCw0KSxObj0wO05uPFp0O05uKyspRmUoVHQsVHQuYmxfdHJlZVsyKnBbTm5dKzFdLDMpO2xuKFR0LFR0LmR5bl9sdHJlZSxBci0xKSxsbihUdCxUdC5keW5fZHRyZWUsX24tMSl9KFR0LFR0LmxfZGVz''@;'; put 'put ''Yy5tYXhfY29kZSsxLFR0LmRfZGVzYy5tYXhfY29kZSsxLHBuKzEpLGd0KFR0LFR0LmR5bl9sdHJlZSxUdC5keW5fZHRyZWUpKSxLZShUdCksWnQmJiR0KFR0KX0sUy5fdHJfdGFsbHk9ZnVuY3Rpb24geHIoVHQsQXIsX24pe3JldHVybiBUdC5wZW5kaW5nX2J1ZltUdC5kX2J1ZisyKlR0Lmxh''@;'; put 'put ''c3RfbGl0XT1Bcj4+PjgmMjU1LFR0LnBlbmRpbmdfYnVmW1R0LmRfYnVmKzIqVHQubGFzdF9saXQrMV09MjU1JkFyLFR0LnBlbmRpbmdfYnVmW1R0LmxfYnVmK1R0Lmxhc3RfbGl0XT0yNTUmX24sVHQubGFzdF9saXQrKywwPT09QXI/VHQuZHluX2x0cmVlWzIqX25dKys6KFR0Lm1hdGNoZXMr''@;'; put 'put ''KyxBci0tLFR0LmR5bl9sdHJlZVsyKihQZVtfbl0rMjU2KzEpXSsrLFR0LmR5bl9kdHJlZVsyKkFlKEFyKV0rKyksVHQubGFzdF9saXQ9PT1UdC5saXRfYnVmc2l6ZS0xfSxTLl90cl9hbGlnbj1mdW5jdGlvbiBabihUdCl7RmUoVHQsMiwzKSxnZShUdCwyNTYsdWUpLGZ1bmN0aW9uIGhlKFR0''@;'; put 'put ''KXsxNj09PVR0LmJpX3ZhbGlkPyhEZShUdCxUdC5iaV9idWYpLFR0LmJpX2J1Zj0wLFR0LmJpX3ZhbGlkPTApOlR0LmJpX3ZhbGlkPj04JiYoVHQucGVuZGluZ19idWZbVHQucGVuZGluZysrXT0yNTUmVHQuYmlfYnVmLFR0LmJpX2J1Zj4+PTgsVHQuYmlfdmFsaWQtPTgpfShUdCl9fSx7Ii4u''@;'; put 'put ''L3V0aWxzL2NvbW1vbiI6Mjd9XSwzOTpbZnVuY3Rpb24oQyx3LFMpeyJ1c2Ugc3RyaWN0Ijt3LmV4cG9ydHM9ZnVuY3Rpb24gTCgpe3RoaXMuaW5wdXQ9bnVsbCx0aGlzLm5leHRfaW49MCx0aGlzLmF2YWlsX2luPTAsdGhpcy50b3RhbF9pbj0wLHRoaXMub3V0cHV0PW51bGwsdGhpcy5uZXh0''@;'; put 'put ''X291dD0wLHRoaXMuYXZhaWxfb3V0PTAsdGhpcy50b3RhbF9vdXQ9MCx0aGlzLm1zZz0iIix0aGlzLnN0YXRlPW51bGwsdGhpcy5kYXRhX3R5cGU9Mix0aGlzLmFkbGVyPTB9fSx7fV19LHt9LFs5XSkoOSl9KX0sNjM1NzgoZmUsaixoKXshZnVuY3Rpb24gYyh2KXt2LnZlcnNpb249IjEuMjAy''@;'; put 'put ''MTExMjIuMSI7dmFyIEM9MTIwMCx3PTEyNTI7dHlwZW9mIGNwdGFibGU+InUiJiYodHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsLmNwdGFibGU9aCg0MjkyNCk6dHlwZW9mIHdpbmRvdzwidSImJih3aW5kb3cuY3B0YWJsZT1oKDQyOTI0KSkpO2Zvcih2YXIgUz1bODc0LDkzMiw5MzYsOTQ5LDk1''@;'; put 'put ''MCwxZTRdLEw9MDtMPD04OysrTClTLnB1c2goMTI1MCtMKTt2YXIgUj17MDoxMjUyLDE6NjUwMDEsMjo2NTAwMSw3NzoxZTQsMTI4OjkzMiwxMjk6OTQ5LDEzMDoxMzYxLDEzNDo5MzYsMTM2Ojk1MCwxNjE6MTI1MywxNjI6MTI1NCwxNjM6MTI1OCwxNzc6MTI1NSwxNzg6MTI1NiwxODY6MTI1''@;'; put 'put ''NywyMDQ6MTI1MSwyMjI6ODc0LDIzODoxMjUwLDI1NToxMjUyLDY5OjY5Njl9LHg9ZnVuY3Rpb24oZCl7LTEhPVMuaW5kZXhPZihkKSYmKHc9UlswXT1kKX0sSD1mdW5jdGlvbihkKXtDPWQseChkKX07ZnVuY3Rpb24gVigpe0goMTIwMCksZnVuY3Rpb24gVSgpe3goMTI1Mil9KCl9ZnVuY3Rp''@;'; put 'put ''b24gTihkKXtmb3IodmFyIF89W10sbT0wLFQ9ZC5sZW5ndGg7bTxUOysrbSlfW21dPWQuY2hhckNvZGVBdChtKTtyZXR1cm4gX312YXIgRj1mdW5jdGlvbihkKXt2YXIgXz1kLmNoYXJDb2RlQXQoMCksbT1kLmNoYXJDb2RlQXQoMSk7cmV0dXJuIDI1NT09XyYmMjU0PT1tP2Z1bmN0aW9uIHoo''@;'; put 'put ''ZCl7Zm9yKHZhciBfPVtdLG09MDttPGQubGVuZ3RoPj4xOysrbSlfW21dPVN0cmluZy5mcm9tQ2hhckNvZGUoZC5jaGFyQ29kZUF0KDIqbSkrKGQuY2hhckNvZGVBdCgyKm0rMSk8PDgpKTtyZXR1cm4gXy5qb2luKCIiKX0oZC5zbGljZSgyKSk6MjU0PT1fJiYyNTU9PW0/ZnVuY3Rpb24gWShk''@;'; put 'put ''KXtmb3IodmFyIF89W10sbT0wO208ZC5sZW5ndGg+PjE7KyttKV9bbV09U3RyaW5nLmZyb21DaGFyQ29kZShkLmNoYXJDb2RlQXQoMiptKzEpKyhkLmNoYXJDb2RlQXQoMiptKTw8OCkpO3JldHVybiBfLmpvaW4oIiIpfShkLnNsaWNlKDIpKTo2NTI3OT09Xz9kLnNsaWNlKDEpOmR9LFc9ZnVu''@;'; put 'put ''Y3Rpb24oXyl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoXyl9LHE9ZnVuY3Rpb24oXyl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoXyl9O3R5cGVvZiBjcHRhYmxlPCJ1IiYmKEg9ZnVuY3Rpb24oZCl7Qz1kLHgoZCl9LEY9ZnVuY3Rpb24oZCl7cmV0dXJuIDI1NT09PWQuY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmMjU0PT09ZC5jaGFyQ29kZUF0KDEpP2NwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsTihkLnNsaWNlKDIpKSk6ZH0sVz1mdW5jdGlvbihfKXtyZXR1cm4gMTIwMD09PUM/U3RyaW5nLmZyb21DaGFyQ29kZShfKTpjcHRhYmxlLnV0aWxzLmRlY29kZShDLFsyNTUmXyxfPj44XSlb''@;'; put 'put ''MF19LHE9ZnVuY3Rpb24oXyl7cmV0dXJuIGNwdGFibGUudXRpbHMuZGVjb2RlKHcsW19dKVswXX0pO3ZhciBDZT1mdW5jdGlvbigpe3ZhciBfPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7cmV0dXJue2VuY29kZTpm''@;'; put 'put ''dW5jdGlvbihtKXtmb3IodmFyIFQ9IiIsUD0wLFE9MCxzZT0wLG9lPTAsZGU9MCxMZT0wLE5lPTAsQmU9MDtCZTxtLmxlbmd0aDspb2U9KFA9bS5jaGFyQ29kZUF0KEJlKyspKT4+MixkZT0oMyZQKTw8NHwoUT1tLmNoYXJDb2RlQXQoQmUrKykpPj40LExlPSgxNSZRKTw8Mnwoc2U9bS5jaGFy''@;'; put 'put ''Q29kZUF0KEJlKyspKT4+NixOZT02MyZzZSxpc05hTihRKT9MZT1OZT02NDppc05hTihzZSkmJihOZT02NCksVCs9Xy5jaGFyQXQob2UpK18uY2hhckF0KGRlKStfLmNoYXJBdChMZSkrXy5jaGFyQXQoTmUpO3JldHVybiBUfSxkZWNvZGU6ZnVuY3Rpb24oVCl7dmFyIFA9IiIsZGU9MCxMZT0w''@;'; put 'put ''LE5lPTAsQmU9MDtUPVQucmVwbGFjZSgvW15cd1wrXC9cPV0vZywiIik7Zm9yKHZhciBaZT0wO1plPFQubGVuZ3RoOylkZT1fLmluZGV4T2YoVC5jaGFyQXQoWmUrKykpLExlPV8uaW5kZXhPZihULmNoYXJBdChaZSsrKSksUCs9U3RyaW5nLmZyb21DaGFyQ29kZShkZTw8MnxMZT4+NCksNjQh''@;'; put 'put ''PT0oTmU9Xy5pbmRleE9mKFQuY2hhckF0KFplKyspKSkmJihQKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSZMZSk8PDR8TmU+PjIpKSw2NCE9PShCZT1fLmluZGV4T2YoVC5jaGFyQXQoWmUrKykpKSYmKFArPVN0cmluZy5mcm9tQ2hhckNvZGUoKDMmTmUpPDw2fEJlKSk7cmV0dXJuIFB9fX0o''@;'; put 'put ''KSxJZT10eXBlb2YgQnVmZmVyPCJ1IiYmdHlwZW9mIHByb2Nlc3M8InUiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9uczwidSImJiEhcHJvY2Vzcy52ZXJzaW9ucy5ub2RlLGtlPWZ1bmN0aW9uKCl7fTtpZih0eXBlb2YgQnVmZmVyPCJ1Iil7dmFyIHFlPSFCdWZmZXIuZnJvbTtpZighcWUpdHJ5''@;'; put 'put ''e0J1ZmZlci5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7cWU9ITB9a2U9cWU/ZnVuY3Rpb24oZCxfKXtyZXR1cm4gXz9uZXcgQnVmZmVyKGQsXyk6bmV3IEJ1ZmZlcihkKX06QnVmZmVyLmZyb20uYmluZChCdWZmZXIpLEJ1ZmZlci5hbGxvY3x8KEJ1ZmZlci5hbGxvYz1mdW5jdGlvbihkKXty''@;'; put 'put ''ZXR1cm4gbmV3IEJ1ZmZlcihkKX0pLEJ1ZmZlci5hbGxvY1Vuc2FmZXx8KEJ1ZmZlci5hbGxvY1Vuc2FmZT1mdW5jdGlvbihkKXtyZXR1cm4gbmV3IEJ1ZmZlcihkKX0pfWZ1bmN0aW9uIFgoZCl7cmV0dXJuIEllP0J1ZmZlci5hbGxvYyhkKTpuZXcgQXJyYXkoZCl9ZnVuY3Rpb24gZihkKXty''@;'; put 'put ''ZXR1cm4gSWU/QnVmZmVyLmFsbG9jVW5zYWZlKGQpOm5ldyBBcnJheShkKX12YXIgYj1mdW5jdGlvbihfKXtyZXR1cm4gSWU/a2UoXywiYmluYXJ5Iik6Xy5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKG0pe3JldHVybiAyNTUmbS5jaGFyQ29kZUF0KDApfSl9O2Z1bmN0aW9uIGsoZCl7aWYodHlw''@;'; put 'put ''ZW9mIEFycmF5QnVmZmVyPiJ1IilyZXR1cm4gYihkKTtmb3IodmFyIF89bmV3IEFycmF5QnVmZmVyKGQubGVuZ3RoKSxtPW5ldyBVaW50OEFycmF5KF8pLFQ9MDtUIT1kLmxlbmd0aDsrK1QpbVtUXT0yNTUmZC5jaGFyQ29kZUF0KFQpO3JldHVybiBffWZ1bmN0aW9uIE0oZCl7aWYoQXJyYXku''@;'; put 'put ''aXNBcnJheShkKSlyZXR1cm4gZC5tYXAoZnVuY3Rpb24oVCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoVCl9KS5qb2luKCIiKTtmb3IodmFyIF89W10sbT0wO208ZC5sZW5ndGg7KyttKV9bbV09U3RyaW5nLmZyb21DaGFyQ29kZShkW21dKTtyZXR1cm4gXy5qb2luKCIiKX1mdW5jdGlv''@;'; put 'put ''biBLKGQpe2lmKHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCIpO2lmKGQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gSyhuZXcgVWludDhBcnJheShkKSk7Zm9yKHZhciBfPW5ldyBBcnJheShkLmxlbmd0aCksbT0wO208ZC5sZW5ndGg7''@;'; put 'put ''KyttKV9bbV09ZFttXTtyZXR1cm4gX312YXIgRz1mdW5jdGlvbihkKXt2YXIgXz1bXTtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKG0pe0FycmF5LmlzQXJyYXkobSk/Xz1fLmNvbmNhdChtKToodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZtIGluc3RhbmNlb2YgVWludDhBcnJheXx8dHlwZW9m''@;'; put 'put ''IEFycmF5QnVmZmVyPCJ1IiYmbSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSYmKF89Xy5jb25jYXQoSyhtKSkpfSksX30sRD0vXHUwMDAwL2cscD0vW1x1MDAwMS1cdTAwMDZdL2csST17fSx1ZT1mdW5jdGlvbihfKXtmdW5jdGlvbiBtKE50KXtmb3IodmFyIGhuPSIiLFBuPU50Lmxlbmd0aC0x''@;'; put 'put ''O1BuPj0wOylobis9TnQuY2hhckF0KFBuLS0pO3JldHVybiBobn1mdW5jdGlvbiBUKE50LGhuKXtmb3IodmFyIFBuPSIiO1BuLmxlbmd0aDxobjspUG4rPU50O3JldHVybiBQbn1mdW5jdGlvbiBQKE50LGhuKXt2YXIgUG49IiIrTnQ7cmV0dXJuIFBuLmxlbmd0aD49aG4/UG46VCgiMCIsaG4t''@;'; put 'put ''UG4ubGVuZ3RoKStQbn1mdW5jdGlvbiBRKE50LGhuKXt2YXIgUG49IiIrTnQ7cmV0dXJuIFBuLmxlbmd0aD49aG4/UG46VCgiICIsaG4tUG4ubGVuZ3RoKStQbn1mdW5jdGlvbiBzZShOdCxobil7dmFyIFBuPSIiK050O3JldHVybiBQbi5sZW5ndGg+PWhuP1BuOlBuK1QoIiAiLGhuLVBuLmxl''@;'; put 'put ''bmd0aCl9Xy52ZXJzaW9uPSIxLjIwMjEwNzI2LjEiO3ZhciBMZT1NYXRoLnBvdygyLDMyKTtmdW5jdGlvbiBOZShOdCxobil7cmV0dXJuIE50PkxlfHxOdDwtTGU/ZnVuY3Rpb24gb2UoTnQsaG4pe3ZhciBQbj0iIitNYXRoLnJvdW5kKE50KTtyZXR1cm4gUG4ubGVuZ3RoPj1obj9QbjpUKCIw''@;'; put 'put ''Iixobi1Qbi5sZW5ndGgpK1BufShOdCxobik6ZnVuY3Rpb24gZGUoTnQsaG4pe3ZhciBQbj0iIitOdDtyZXR1cm4gUG4ubGVuZ3RoPj1obj9QbjpUKCIwIixobi1Qbi5sZW5ndGgpK1BufShNYXRoLnJvdW5kKE50KSxobil9ZnVuY3Rpb24gQmUoTnQsaG4pe3JldHVybiBOdC5sZW5ndGg+PTcr''@;'; put 'put ''KGhuPWhufHwwKSYmMTAzPT0oMzJ8TnQuY2hhckNvZGVBdChobikpJiYxMDE9PSgzMnxOdC5jaGFyQ29kZUF0KGhuKzEpKSYmMTEwPT0oMzJ8TnQuY2hhckNvZGVBdChobisyKSkmJjEwMT09KDMyfE50LmNoYXJDb2RlQXQoaG4rMykpJiYxMTQ9PSgzMnxOdC5jaGFyQ29kZUF0KGhuKzQpKSYm''@;'; put 'put ''OTc9PSgzMnxOdC5jaGFyQ29kZUF0KGhuKzUpKSYmMTA4PT0oMzJ8TnQuY2hhckNvZGVBdChobis2KSl9ZnVuY3Rpb24gWmUoTnQpe2Zvcih2YXIgaG49W10sUG49T2JqZWN0LmtleXMoTnQpLFNpPTA7U2khPT1Qbi5sZW5ndGg7KytTaSlobltOdFtQbltTaV1dXT1QbltTaV07cmV0dXJuIGhu''@;'; put 'put ''fXZhciBudD1bWyJTdW4iLCJTdW5kYXkiXSxbIk1vbiIsIk1vbmRheSJdLFsiVHVlIiwiVHVlc2RheSJdLFsiV2VkIiwiV2VkbmVzZGF5Il0sWyJUaHUiLCJUaHVyc2RheSJdLFsiRnJpIiwiRnJpZGF5Il0sWyJTYXQiLCJTYXR1cmRheSJdXSxtdD1bWyJKIiwiSmFuIiwiSmFudWFyeSJdLFsi''@;'; put 'put ''RiIsIkZlYiIsIkZlYnJ1YXJ5Il0sWyJNIiwiTWFyIiwiTWFyY2giXSxbIkEiLCJBcHIiLCJBcHJpbCJdLFsiTSIsIk1heSIsIk1heSJdLFsiSiIsIkp1biIsIkp1bmUiXSxbIkoiLCJKdWwiLCJKdWx5Il0sWyJBIiwiQXVnIiwiQXVndXN0Il0sWyJTIiwiU2VwIiwiU2VwdGVtYmVyIl0sWyJP''@;'; put 'put ''IiwiT2N0IiwiT2N0b2JlciJdLFsiTiIsIk5vdiIsIk5vdmVtYmVyIl0sWyJEIiwiRGVjIiwiRGVjZW1iZXIiXV07ZnVuY3Rpb24gUWUoTnQpe050WzBdPSJHZW5lcmFsIixOdFsxXT0iMCIsTnRbMl09IjAuMDAiLE50WzNdPSIjLCMjMCIsTnRbNF09IiMsIyMwLjAwIixOdFs5XT0iMCUiLE50''@;'; put 'put ''WzEwXT0iMC4wMCUiLE50WzExXT0iMC4wMEUrMDAiLE50WzEyXT0iIyA/Lz8iLE50WzEzXT0iIyA/Py8/PyIsTnRbMTRdPSJtL2QveXkiLE50WzE1XT0iZC1tbW0teXkiLE50WzE2XT0iZC1tbW0iLE50WzE3XT0ibW1tLXl5IixOdFsxOF09Img6bW0gQU0vUE0iLE50WzE5XT0iaDptbTpzcyBB''@;'; put 'put ''TS9QTSIsTnRbMjBdPSJoOm1tIixOdFsyMV09Img6bW06c3MiLE50WzIyXT0ibS9kL3l5IGg6bW0iLE50WzM3XT0iIywjIzAgOygjLCMjMCkiLE50WzM4XT0iIywjIzAgO1tSZWRdKCMsIyMwKSIsTnRbMzldPSIjLCMjMC4wMDsoIywjIzAuMDApIixOdFs0MF09IiMsIyMwLjAwO1tSZWRdKCMs''@;'; put 'put ''IyMwLjAwKSIsTnRbNDVdPSJtbTpzcyIsTnRbNDZdPSJbaF06bW06c3MiLE50WzQ3XT0ibW1zcy4wIixOdFs0OF09IiMjMC4wRSswIixOdFs0OV09IkAiLE50WzU2XT0nIlx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggImhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyICInLE1uKE50KX12''@;'; put 'put ''YXIgZnQ9e307UWUoZnQpO3ZhciBrdD1bXSxidD0wO2ZvcihidD01O2J0PD04OysrYnQpa3RbYnRdPTMyK2J0O2ZvcihidD0yMztidDw9MjY7KytidClrdFtidF09MDtmb3IoYnQ9Mjc7YnQ8PTMxOysrYnQpa3RbYnRdPTE0O2ZvcihidD01MDtidDw9NTg7KytidClrdFtidF09MTQ7Zm9yKGJ0''@;'; put 'put ''PTU5O2J0PD02MjsrK2J0KWt0W2J0XT1idC01ODtmb3IoYnQ9Njc7YnQ8PTY4OysrYnQpa3RbYnRdPWJ0LTU4O2ZvcihidD03MjtidDw9NzU7KytidClrdFtidF09YnQtNTg7Zm9yKGJ0PTY3O2J0PD02ODsrK2J0KWt0W2J0XT1idC01Nztmb3IoYnQ9NzY7YnQ8PTc4OysrYnQpa3RbYnRdPWJ0''@;'; put 'put ''LTU2O2ZvcihidD03OTtidDw9ODE7KytidClrdFtidF09YnQtMzQ7dmFyIEV0PVtdO2Z1bmN0aW9uIFZ0KE50LGhuLFBuKXtmb3IodmFyIFNpPU50PDA/LTE6MSxlcj1OdCpTaSxEaT0wLGJyPTEsUmk9MCx2YT0xLE5pPTAsRG89MCx3aT1NYXRoLmZsb29yKGVyKTtOaTxobiYmKFJpPSh3aT1N''@;'; put 'put ''YXRoLmZsb29yKGVyKSkqYnIrRGksRG89d2kqTmkrdmEsIShlci13aTw1ZS04KSk7KWVyPTEvKGVyLXdpKSxEaT1icixicj1SaSx2YT1OaSxOaT1EbztpZihEbz5obiYmKE5pPmhuPyhEbz12YSxSaT1EaSk6KERvPU5pLFJpPWJyKSksIVBuKXJldHVyblswLFNpKlJpLERvXTt2YXIgS3M9TWF0''@;'; put 'put ''aC5mbG9vcihTaSpSaS9Ebyk7cmV0dXJuW0tzLFNpKlJpLUtzKkRvLERvXX1mdW5jdGlvbiB1bihOdCxobixQbil7aWYoTnQ+Mjk1ODQ2NXx8TnQ8MClyZXR1cm4gbnVsbDt2YXIgU2k9MHxOdCxlcj1NYXRoLmZsb29yKDg2NDAwKihOdC1TaSkpLERpPTAsYnI9W10sUmk9e0Q6U2ksVDplcix1''@;'; put 'put ''Ojg2NDAwKihOdC1TaSktZXIseTowLG06MCxkOjAsSDowLE06MCxTOjAscTowfTtpZihNYXRoLmFicyhSaS51KTwxZS02JiYoUmkudT0wKSxobiYmaG4uZGF0ZTE5MDQmJihTaSs9MTQ2MiksUmkudT4uOTk5OSYmKFJpLnU9MCw4NjQwMD09KytlciYmKFJpLlQ9ZXI9MCwrK1NpLCsrUmkuRCkp''@;'; put 'put ''LDYwPT09U2kpYnI9UG4/WzEzMTcsMTAsMjldOlsxOTAwLDIsMjldLERpPTM7ZWxzZSBpZigwPT09U2kpYnI9UG4/WzEzMTcsOCwyOV06WzE5MDAsMSwwXSxEaT02O2Vsc2V7U2k+NjAmJi0tU2k7dmFyIHZhPW5ldyBEYXRlKDE5MDAsMCwxKTt2YS5zZXREYXRlKHZhLmdldERhdGUoKStTaS0x''@;'; put 'put ''KSxicj1bdmEuZ2V0RnVsbFllYXIoKSx2YS5nZXRNb250aCgpKzEsdmEuZ2V0RGF0ZSgpXSxEaT12YS5nZXREYXkoKSxTaTw2MCYmKERpPShEaSs2KSU3KSxQbiYmKERpPWZ1bmN0aW9uIFlhKE50LGhuKXtoblswXS09NTgxO3ZhciBQbj1OdC5nZXREYXkoKTtyZXR1cm4gTnQ8NjAmJihQbj0o''@;'; put 'put ''UG4rNiklNyksUG59KHZhLGJyKSl9cmV0dXJuIFJpLnk9YnJbMF0sUmkubT1iclsxXSxSaS5kPWJyWzJdLFJpLlM9ZXIlNjAsZXI9TWF0aC5mbG9vcihlci82MCksUmkuTT1lciU2MCxlcj1NYXRoLmZsb29yKGVyLzYwKSxSaS5IPWVyLFJpLnE9RGksUml9RXRbNV09RXRbNjNdPSciJCIjLCMj''@;'; put 'put ''MF8pO1xcKCIkIiMsIyMwXFwpJyxFdFs2XT1FdFs2NF09JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsRXRbN109RXRbNjVdPSciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyxFdFs4XT1FdFs2Nl09JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScs''@;'; put 'put ''RXRbNDFdPSdfKCogIywjIzBfKTtfKCogXFwoIywjIzBcXCk7XygqICItIl8pO18oQF8pJyxFdFs0Ml09J18oIiQiKiAjLCMjMF8pO18oIiQiKiBcXCgjLCMjMFxcKTtfKCIkIiogIi0iXyk7XyhAXyknLEV0WzQzXT0nXygqICMsIyMwLjAwXyk7XygqIFxcKCMsIyMwLjAwXFwpO18oKiAiLSI/''@;'; put 'put ''P18pO18oQF8pJyxFdFs0NF09J18oIiQiKiAjLCMjMC4wMF8pO18oIiQiKiBcXCgjLCMjMC4wMFxcKTtfKCIkIiogIi0iPz9fKTtfKEBfKScsXy5wYXJzZV9kYXRlX2NvZGU9dW47dmFyIG5yPW5ldyBEYXRlKDE4OTksMTEsMzEsMCwwLDApLG5uPW5yLmdldFRpbWUoKSxhcj1uZXcgRGF0ZSgx''@;'; put 'put ''OTAwLDIsMSwwLDAsMCk7ZnVuY3Rpb24gam4oTnQsaG4pe3ZhciBQbj1OdC5nZXRUaW1lKCk7cmV0dXJuIGhuP1BuLT0xMjYyMzA0ZTU6TnQ+PWFyJiYoUG4rPTg2NGU1KSwoUG4tKG5uKzZlNCooTnQuZ2V0VGltZXpvbmVPZmZzZXQoKS1uci5nZXRUaW1lem9uZU9mZnNldCgpKSkpLzg2NGU1''@;'; put 'put ''fXZhciBrbj0iIixzcj17ImVuLXVzIjp7eToieSIsZDoiZCIsIiwiOiIsIiwiLiI6Ii4iLGRhdGU6Il8vIn0sImRlLWRlIjp7eToiaiIsZDoidCIsIiwiOiIuIiwiLiI6IiwiLGRhdGU6Il8uIn0sIml0LWl0Ijp7eToieSIsZDoiZCIsIiwiOiIuIiwiLiI6IiwiLGRhdGU6Il8vIn19LGdyPXNy''@;'; put 'put ''W2tuLnRvTG93ZXJDYXNlKCldfHxzclsiZW4tdXMiXSxxbj1aZShnciksX2k9IiQiLE9pPSIiLExpPSIsIixrcj0iLiIsRG49Ii8iO2Z1bmN0aW9uIE1uKE50KXtzd2l0Y2goKGtufHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ6aC10dyI6TnRbMjddPSJbJC00MDRdZS9tL2QiLE50WzI4XT0n''@;'; put 'put ''WyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsTnRbMjldPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxOdFszMF09J20iLyJkIi8ieXknLE50WzMxXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxOdFszMl09J2hoIlx1NjY0MiJtbSJcdTUy''@;'; put 'put ''MDYiJyxOdFszM109J2hoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsTnRbMzRdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYiJyxOdFszNV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIi''@;'; put 'put ''JyxOdFszNl09IlskLTQwNF1lL20vZCIsTnRbNTBdPSJbJC00MDRdZS9tL2QiLE50WzUxXT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsTnRbNTJdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYiJyxOdFs1M109J1x1NGUwYVx1NTM0''@;'; put 'put ''OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxOdFs1NF09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLE50WzU1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2IicsTnRbNTZdPSdcdTRlMGFcdTUz''@;'; put 'put ''NDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsTnRbNTddPSJbJC00MDRdZS9tL2QiLE50WzU4XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1Iic7YnJlYWs7Y2FzZSJ6aC1jbiI6TnRbMjddPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLE50''@;'; put 'put ''WzI4XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxOdFsyOV09J20iXHU2NzA4ImQiXHU2NWU1IicsTnRbMzBdPSdtIi0iZCItInl5JyxOdFszMV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsTnRbMzJdPSdoIlx1NjVmNiJtbSJcdTUyMDYiJyxOdFszM109J2giXHU2NWY2Im1tIlx1''@;'; put 'put ''NTIwNiJzcyJcdTc5ZDIiJyxOdFszNF09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2IicsTnRbMzVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxOdFszNl09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4''@;'; put 'put ''IicsTnRbNTBdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLE50WzUxXT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxOdFs1Ml09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsTnRbNTNdPSdtIlx1NjcwOCJkIlx1NjVlNSInLE50WzU0XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxOdFs1NV09J1x1NGUwYVx1''@;'; put 'put ''NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2IicsTnRbNTZdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxOdFs1N109J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsTnRbNThdPSdtIlx1NjcwOCJkIlx1NjVlNSInO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiamEtanAiOk50WzI3XT0nWyQtNDExXWdlIi4ibSIuImQnLE50WzI4XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsTnRbMjldPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxOdFszMF09J20iLyJkIi8ieXknLE50WzMxXT0n''@;'; put 'put ''eXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxOdFszMl09J2giXHU2NjQyIm1tIlx1NTIwNiInLE50WzMzXT0naCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLE50WzM0XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxOdFszNV09J20iXHU2NzA4ImQiXHU2NWU1IicsTnRbMzZd''@;'; put 'put ''PSdbJC00MTFdZ2UiLiJtIi4iZCcsTnRbNTBdPSdbJC00MTFdZ2UiLiJtIi4iZCcsTnRbNTFdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxOdFs1Ml09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsTnRbNTNdPSdtIlx1NjcwOCJkIlx1NjVlNSInLE50WzU0XT0nWyQt''@;'; put 'put ''NDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsTnRbNTVdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLE50WzU2XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxOdFs1N109J1skLTQxMV1nZSIuIm0iLiJkJyxOdFs1OF09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVl''@;'; put 'put ''NSInO2JyZWFrO2Nhc2Uia28ta3IiOk50WzI3XT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsTnRbMjhdPSJtbS1kZCIsTnRbMjldPSJtbS1kZCIsTnRbMzBdPSJtbS1kZC15eSIsTnRbMzFdPSd5eXl5Ilx1YjE0NCIgbW0iXHVjNmQ0IiBkZCJcdWM3N2MiJyxOdFszMl09''@;'; put 'put ''J2giXHVjMmRjIiBtbSJcdWJkODQiJyxOdFszM109J2giXHVjMmRjIiBtbSJcdWJkODQiIHNzIlx1Y2QwOCInLE50WzM0XT0ieXl5eS1tbS1kZCIsTnRbMzVdPSJ5eXl5LW1tLWRkIixOdFszNl09J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLE50WzUwXT0neXl5eSJcdTVl''@;'; put 'put ''NzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsTnRbNTFdPSJtbS1kZCIsTnRbNTJdPSJ5eXl5LW1tLWRkIixOdFs1M109Inl5eXktbW0tZGQiLE50WzU0XT0ibW0tZGQiLE50WzU1XT0ieXl5eS1tbS1kZCIsTnRbNTZdPSJ5eXl5LW1tLWRkIixOdFs1N109J3l5eXkiXHU1ZTc0IiBtbSJcdTY3''@;'; put 'put ''MDgiIGRkIlx1NjVlNSInLE50WzU4XT0ibW0tZGQiO2JyZWFrO2Nhc2UidGgtdGgiOk50WzU5XT0nInQiMCcsTnRbNjBdPScidCIwLjAwJyxOdFs2MV09JyJ0IiMsIyMwJyxOdFs2Ml09JyJ0IiMsIyMwLjAwJyxOdFs2N109InQwJSIsTnRbNjhdPSJ0MC4wMCUiLE50WzY5XT0idCMgPy8/IixO''@;'; put 'put ''dFs3MF09InQjID8/Lz8/IixOdFs3MV09J1x1MGUyNyIvIlx1MGUxNCIvIlx1MGUxYlx1MGUxYlx1MGUxYlx1MGUxYicsTnRbNzJdPSdcdTBlMjciLSJcdTBlMTRcdTBlMTRcdTBlMTQiLSJcdTBlMWJcdTBlMWInLE50WzczXT0nXHUwZTI3Ii0iXHUwZTE0XHUwZTE0XHUwZTE0JyxOdFs3NF09''@;'; put 'put ''J1x1MGUxNFx1MGUxNFx1MGUxNCItIlx1MGUxYlx1MGUxYicsTnRbNzVdPSdcdTBlMGEiOiJcdTBlMTlcdTBlMTknLE50Wzc2XT0nXHUwZTBhIjoiXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3JyxOdFs3N109J1x1MGUyNyIvIlx1MGUxNCIvIlx1MGUxYlx1MGUxYlx1MGUxYlx1MGUxYiBc''@;'; put 'put ''dTBlMGEiOiJcdTBlMTlcdTBlMTknLE50Wzc4XT0nXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3JyxOdFs3OV09J1tcdTBlMGFdXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3JyxOdFs4MF09J1x1MGUxOVx1MGUxOSI6Ilx1MGUxN1x1MGUxNy4wJyxOdFs4MV09ImQvbS9iYiJ9fV8uX2dl''@;'; put 'put ''bmVyYWxfaW50PWZ1bmN0aW9uIGppKE50KXtyZXR1cm4gTnQudG9TdHJpbmcoMTApfTt2YXIgYmk9ZnVuY3Rpb24oKXt2YXIgaG49Lyg/OlwuMCp8KFwuXGQqWzEtOV0pMCspJC87ZnVuY3Rpb24gUG4oTmkpe3JldHVybi0xPT1OaS5pbmRleE9mKCIuIik/Tmk6TmkucmVwbGFjZShobiwiJDEi''@;'; put 'put ''KX12YXIgU2k9Lyg/OlwuMCp8KFwuXGQqWzEtOV0pMCspW0VlXS8sZXI9LyhFWystXSkoXGQpJC87cmV0dXJuIGZ1bmN0aW9uKERvKXt2YXIgd2k9ZnVuY3Rpb24gdmEoTmkpe3ZhciB3aSxEbz1NYXRoLmZsb29yKE1hdGgubG9nKE1hdGguYWJzKE5pKSkqTWF0aC5MT0cxMEUpO3JldHVybiB3''@;'; put 'put ''aT1Ebz49LTQmJkRvPD0tMT9OaS50b1ByZWNpc2lvbigxMCtEbyk6TWF0aC5hYnMoRG8pPD05P2Z1bmN0aW9uIGJyKE5pKXt2YXIgRG89Tmk8MD8xMjoxMSx3aT1QbihOaS50b0ZpeGVkKDEyKSk7cmV0dXJuIHdpLmxlbmd0aDw9RG98fCh3aT1OaS50b1ByZWNpc2lvbigxMCkpLmxlbmd0aDw9''@;'; put 'put ''RG8/d2k6TmkudG9FeHBvbmVudGlhbCg1KX0oTmkpOjEwPT09RG8/TmkudG9GaXhlZCgxMCkuc3Vic3RyKDAsMTIpOmZ1bmN0aW9uIFJpKE5pKXt2YXIgRG89UG4oTmkudG9GaXhlZCgxMSkpO3JldHVybiBEby5sZW5ndGg+KE5pPDA/MTI6MTEpfHwiMCI9PT1Eb3x8Ii0wIj09PURvP05pLnRv''@;'; put 'put ''UHJlY2lzaW9uKDYpOkRvfShOaSksUG4oZnVuY3Rpb24gRGkoTmkpe3JldHVybi0xPT1OaS5pbmRleE9mKCJFIik/Tmk6TmkucmVwbGFjZShTaSwiJDFFIikucmVwbGFjZShlciwiJDEwJDIiKX0od2kudG9VcHBlckNhc2UoKSkpfShEbyk7cmV0dXJuIiwiPT09TGkmJiIuIj09PWtyP3dpOndp''@;'; put 'put ''LnJlcGxhY2UoL1ssLl0vZyxmdW5jdGlvbihLcyl7cmV0dXJuIiwiPT1Lcz9MaTprcn0pfX0oKTtmdW5jdGlvbiBObyhOdCxobil7c3dpdGNoKHR5cGVvZiBOdCl7Y2FzZSJzdHJpbmciOnJldHVybiBOdDtjYXNlImJvb2xlYW4iOnJldHVybiBOdD8iVFJVRSI6IkZBTFNFIjtjYXNlIm51bWJl''@;'; put 'put ''ciI6cmV0dXJuKDB8TnQpPT09TnQ/TnQudG9TdHJpbmcoMTApOmJpKE50KTtjYXNlInVuZGVmaW5lZCI6cmV0dXJuIiI7Y2FzZSJvYmplY3QiOmlmKG51bGw9PU50KXJldHVybiIiO2lmKE50IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gTGgoMTQsam4oTnQsaG4mJmhuLmRhdGUxOTA0KSxobil9''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB2YWx1ZSBpbiBHZW5lcmFsIGZvcm1hdDogIitOdCl9Xy5fZ2VuZXJhbF9udW09YmksXy5fZ2VuZXJhbD1Obzt2YXIgdW89Ilx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OSIuc3Bs''@;'; put 'put ''aXQoIiIpO2Z1bmN0aW9uIE1zKE50LGhuLFBuLFNpKXt2YXIgdmEsZXI9IiIsRGk9MCxicj0wLFJpPVBuLnksTmk9MDtzd2l0Y2goTnQpe2Nhc2UgOTg6Umk9UG4ueSs1NDM7Y2FzZSAxMjE6c3dpdGNoKGhuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjp2YT1SaSUxMDAsTmk9MjticmVhaztkZWZh''@;'; put 'put ''dWx0OnZhPVJpJTFlNCxOaT00fWJyZWFrO2Nhc2UgMTA5OnN3aXRjaChobi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6dmE9UG4ubSxOaT1obi5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBtdFtQbi5tLTFdWzFdO2Nhc2UgNTpyZXR1cm4gbXRbUG4ubS0xXVswXTtkZWZhdWx0OnJldHVybiBt''@;'; put 'put ''dFtQbi5tLTFdWzJdfWJyZWFrO2Nhc2UgMTAwOnN3aXRjaChobi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6dmE9UG4uZCxOaT1obi5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBudFtQbi5xXVswXTtkZWZhdWx0OnJldHVybiBudFtQbi5xXVsxXX1icmVhaztjYXNlIDEwNDpzd2l0Y2goaG4u''@;'; put 'put ''bGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOnZhPTErKFBuLkgrMTEpJTEyLE5pPWhuLmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBob3VyIGZvcm1hdDogIitobn1icmVhaztjYXNlIDcyOnN3aXRjaChobi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6dmE9UG4uSCxOaT1obi5sZW5ndGg7YnJl''@;'; put 'put ''YWs7ZGVmYXVsdDp0aHJvdyJiYWQgaG91ciBmb3JtYXQ6ICIraG59YnJlYWs7Y2FzZSA3Nzpzd2l0Y2goaG4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOnZhPVBuLk0sTmk9aG4ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIG1pbnV0ZSBmb3JtYXQ6ICIraG59YnJlYWs7Y2FzZSAxMTU6''@;'; put 'put ''aWYoInMiIT1obiYmInNzIiE9aG4mJiIuMCIhPWhuJiYiLjAwIiE9aG4mJiIuMDAwIiE9aG4pdGhyb3ciYmFkIHNlY29uZCBmb3JtYXQ6ICIraG47cmV0dXJuIDAhPT1Qbi51fHwicyIhPWhuJiYic3MiIT1obj8oYnI9U2k+PTI/Mz09PVNpPzFlMzoxMDA6MT09PVNpPzEwOjEsKERpPU1hdGgu''@;'; put 'put ''cm91bmQoYnIqKFBuLlMrUG4udSkpKT49NjAqYnImJihEaT0wKSwicyI9PT1obj8wPT09RGk/IjAiOiIiK0RpL2JyOihlcj1QKERpLDIrU2kpLCJzcyI9PT1obj9lci5zdWJzdHIoMCwyKToiLiIrZXIuc3Vic3RyKDIsaG4ubGVuZ3RoLTEpKSk6UChQbi5TLGhuLmxlbmd0aCk7Y2FzZSA5MDpz''@;'; put 'put ''d2l0Y2goaG4pe2Nhc2UiW2hdIjpjYXNlIltoaF0iOmNhc2UiW1x1MGUwYV0iOmNhc2UiW1x1MGUwYVx1MGUwYV0iOnZhPTI0KlBuLkQrUG4uSDticmVhaztjYXNlIlttXSI6Y2FzZSJbbW1dIjpjYXNlIltcdTBlMTldIjpjYXNlIltcdTBlMTlcdTBlMTldIjp2YT02MCooMjQqUG4uRCtQbi5I''@;'; put 'put ''KStQbi5NO2JyZWFrO2Nhc2UiW3NdIjpjYXNlIltzc10iOmNhc2UiW1x1MGUxN10iOmNhc2UiW1x1MGUxN1x1MGUxN10iOnZhPTYwKig2MCooMjQqUG4uRCtQbi5IKStQbi5NKStNYXRoLnJvdW5kKFBuLlMrUG4udSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgYWJzdGltZSBmb3JtYXQ6ICIr''@;'; put 'put ''aG59Tmk9Mz09PWhuLmxlbmd0aD8xOjI7YnJlYWs7Y2FzZSAxMDE6dmE9UmksTmk9MTticmVhaztjYXNlIDM2MjM6dmE9UG4uZCxOaT1obi5sZW5ndGg7YnJlYWs7Y2FzZSAzNjA0OnN3aXRjaChobi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6dmE9UG4ubSxOaT1obi5sZW5ndGg7YnJlYWs7Y2Fz''@;'; put 'put ''ZSAzOnJldHVybiBtdFtQbi5tLTFdWzFdO2Nhc2UgNTpyZXR1cm4gbXRbUG4ubS0xXVswXTtkZWZhdWx0OnJldHVybiBtdFtQbi5tLTFdWzJdfWJyZWFrO2Nhc2UgMzYxMTpzd2l0Y2goUmk9UG4ueSs1NDMsaG4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOnZhPVJpJTEwMCxOaT0yO2JyZWFrO2Rl''@;'; put 'put ''ZmF1bHQ6dmE9UmklMWU0LE5pPTR9YnJlYWs7Y2FzZSAzNTk0OnZhPVBuLkgsTmk9aG4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzYwOTp2YT1Qbi5NLE5pPWhuLmxlbmd0aDticmVhaztjYXNlIDM2MDc6dmE9UG4uUyxOaT1obi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyBOdC50b1N0cmluZygx''@;'; put 'put ''Nil9dmFyIERvPU5pPjA/UCh2YSxOaSk6IiI7cmV0dXJuKDkwPT1OdD9obi5jaGFyQ29kZUF0KDEpPDM1ODQ6TnQ8MzU4NCk/RG86RG8ucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbih3aSl7cmV0dXJuIHVvWyt3aV19KX1mdW5jdGlvbiBkYShOdCl7aWYoTnQubGVuZ3RoPD0zKXJldHVybiBO''@;'; put 'put ''dDtmb3IodmFyIFBuPU50Lmxlbmd0aCUzLFNpPU50LnN1YnN0cigwLFBuKTtQbiE9TnQubGVuZ3RoO1BuKz0zKVNpKz0oU2kubGVuZ3RoPjA/IiwiOiIiKStOdC5zdWJzdHIoUG4sMyk7cmV0dXJuIFNpfXZhciAkYT1mdW5jdGlvbigpe3ZhciBobj0vJS9nO2Z1bmN0aW9uIGVyKGVuLER0KXt2''@;'; put 'put ''YXIgV3Qsb249ZW4uaW5kZXhPZigiRSIpLWVuLmluZGV4T2YoIi4iKS0xO2lmKGVuLm1hdGNoKC9eIyswLjBFXCswJC8pKXtpZigwPT1EdClyZXR1cm4iMC4wRSswIjtpZihEdDwwKXJldHVybiItIitlcihlbiwtRHQpO3ZhciBMbj1lbi5pbmRleE9mKCIuIik7LTE9PT1MbiYmKExuPWVuLmlu''@;'; put 'put ''ZGV4T2YoIkUiKSk7dmFyIG1yPU1hdGguZmxvb3IoTWF0aC5sb2coRHQpKk1hdGguTE9HMTBFKSVMbjtpZihtcjwwJiYobXIrPUxuKSwtMT09PShXdD0oRHQvTWF0aC5wb3coMTAsbXIpKS50b1ByZWNpc2lvbihvbisxKyhMbittciklTG4pKS5pbmRleE9mKCJlIikpe3ZhciBCcj1NYXRoLmZs''@;'; put 'put ''b29yKE1hdGgubG9nKER0KSpNYXRoLkxPRzEwRSk7Zm9yKC0xPT09V3QuaW5kZXhPZigiLiIpP1d0PVd0LmNoYXJBdCgwKSsiLiIrV3Quc3Vic3RyKDEpKyJFKyIrKEJyLVd0Lmxlbmd0aCttcik6V3QrPSJFKyIrKEJyLW1yKTsiMC4iPT09V3Quc3Vic3RyKDAsMik7KVd0PShXdD1XdC5jaGFy''@;'; put 'put ''QXQoMCkrV3Quc3Vic3RyKDIsTG4pKyIuIitXdC5zdWJzdHIoMitMbikpLnJlcGxhY2UoL14wKyhbMS05XSkvLCIkMSIpLnJlcGxhY2UoL14wK1wuLywiMC4iKTtXdD1XdC5yZXBsYWNlKC9cKy0vLCItIil9V3Q9V3QucmVwbGFjZSgvXihbKy1dPykoXGQqKVwuKFxkKilbRWVdLyxmdW5jdGlv''@;'; put 'put ''bihFaSxvaSxlbyxIaSl7cmV0dXJuIG9pK2VvK0hpLnN1YnN0cigwLChMbittciklTG4pKyIuIitIaS5zdWJzdHIobXIpKyJFIn0pfWVsc2UgV3Q9RHQudG9FeHBvbmVudGlhbChvbik7cmV0dXJuIGVuLm1hdGNoKC9FXCswMCQvKSYmV3QubWF0Y2goL2VbKy1dXGQkLykmJihXdD1XdC5zdWJz''@;'; put 'put ''dHIoMCxXdC5sZW5ndGgtMSkrIjAiK1d0LmNoYXJBdChXdC5sZW5ndGgtMSkpLGVuLm1hdGNoKC9FXC0vKSYmV3QubWF0Y2goL2VcKy8pJiYoV3Q9V3QucmVwbGFjZSgvZVwrLywiZSIpKSxXdC5yZXBsYWNlKCJlIiwiRSIpfXZhciBEaT0vIyAoXD8rKSggPylcLyggPykoXGQrKS8sdmE9L14j''@;'; put 'put ''KjAqXC4oWzAjXSspLyxOaT0vXCkuKlswI10vLERvPS9cKCMjI1wpICMjI1xcPy0jIyMjLztmdW5jdGlvbiB3aShlbil7Zm9yKHZhciBXdCxEdD0iIixvbj0wO29uIT1lbi5sZW5ndGg7Kytvbilzd2l0Y2goV3Q9ZW4uY2hhckNvZGVBdChvbikpe2Nhc2UgMzU6YnJlYWs7Y2FzZSA2MzpEdCs9''@;'; put 'put ''IiAiO2JyZWFrO2Nhc2UgNDg6RHQrPSIwIjticmVhaztkZWZhdWx0OkR0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKFd0KX1yZXR1cm4gRHR9ZnVuY3Rpb24gS3MoZW4sRHQpe3ZhciBXdD1NYXRoLnBvdygxMCxEdCk7cmV0dXJuIiIrTWF0aC5yb3VuZChlbipXdCkvV3R9ZnVuY3Rpb24gUXMoZW4s''@;'; put 'put ''RHQpe2lmKER0PjExKXJldHVybiBRcyhlbiwxMSkqTWF0aC5wb3coMTAsRHQtMTEpO3ZhciBXdD1lbi1NYXRoLmZsb29yKGVuKSxvbj1NYXRoLnBvdygxMCxEdCk7cmV0dXJuIER0PCgiIitNYXRoLnJvdW5kKFd0Km9uKSkubGVuZ3RoPzA6TWF0aC5yb3VuZChXdCpvbil9ZnVuY3Rpb24gemUo''@;'; put 'put ''ZW4sRHQsV3Qpe2lmKDQwPT09ZW4uY2hhckNvZGVBdCgwKSYmIUR0Lm1hdGNoKE5pKSl7dmFyIG9uPUR0LnJlcGxhY2UoL1woICovLCIiKS5yZXBsYWNlKC8gXCkvLCIiKS5yZXBsYWNlKC9cKS8sIiIpO3JldHVybiBXdD49MD96ZSgibiIsb24sV3QpOiIoIit6ZSgibiIsb24sLVd0KSsiKSJ9''@;'; put 'put ''aWYoNDQ9PT1EdC5jaGFyQ29kZUF0KER0Lmxlbmd0aC0xKSlyZXR1cm4gZnVuY3Rpb24gU2koZW4sRHQsV3Qpe2Zvcih2YXIgb249RHQubGVuZ3RoLTE7NDQ9PT1EdC5jaGFyQ29kZUF0KG9uLTEpOyktLW9uO3JldHVybiAkYShlbixEdC5zdWJzdHIoMCxvbiksV3QvTWF0aC5wb3coMTAsMyoo''@;'; put 'put ''RHQubGVuZ3RoLW9uKSkpfShlbixEdCxXdCk7aWYoLTEhPT1EdC5pbmRleE9mKCIlIikpcmV0dXJuIGZ1bmN0aW9uIFBuKGVuLER0LFd0KXt2YXIgb249RHQucmVwbGFjZShobiwiIiksTG49RHQubGVuZ3RoLW9uLmxlbmd0aDtyZXR1cm4gJGEoZW4sb24sV3QqTWF0aC5wb3coMTAsMipMbikp''@;'; put 'put ''K1QoIiUiLExuKX0oZW4sRHQsV3QpO2lmKC0xIT09RHQuaW5kZXhPZigiRSIpKXJldHVybiBlcihEdCxXdCk7aWYoMzY9PT1EdC5jaGFyQ29kZUF0KDApKXJldHVybiIkIit6ZShlbixEdC5zdWJzdHIoIiAiPT1EdC5jaGFyQXQoMSk/MjoxKSxXdCk7dmFyIExuLG1yLEJyLEVpLG9pPU1hdGgu''@;'; put 'put ''YWJzKFd0KSxlbz1XdDwwPyItIjoiIjtpZihEdC5tYXRjaCgvXjAwKyQvKSlyZXR1cm4gZW8rTmUob2ksRHQubGVuZ3RoKTtpZihEdC5tYXRjaCgvXlsjP10rJC8pKXJldHVybiIwIj09PShMbj1OZShXdCwwKSkmJihMbj0iIiksTG4ubGVuZ3RoPkR0Lmxlbmd0aD9Mbjp3aShEdC5zdWJzdHIo''@;'; put 'put ''MCxEdC5sZW5ndGgtTG4ubGVuZ3RoKSkrTG47aWYobXI9RHQubWF0Y2goRGkpKXJldHVybiBmdW5jdGlvbiBicihlbixEdCxXdCl7dmFyIG9uPXBhcnNlSW50KGVuWzRdLDEwKSxMbj1NYXRoLnJvdW5kKER0Km9uKSxtcj1NYXRoLmZsb29yKExuL29uKSxCcj1Mbi1tcipvbixFaT1vbjtyZXR1''@;'; put 'put ''cm4gV3QrKDA9PT1tcj8iIjoiIittcikrIiAiKygwPT09QnI/VCgiICIsZW5bMV0ubGVuZ3RoKzErZW5bNF0ubGVuZ3RoKTpRKEJyLGVuWzFdLmxlbmd0aCkrZW5bMl0rIi8iK2VuWzNdK1AoRWksZW5bNF0ubGVuZ3RoKSl9KG1yLG9pLGVvKTtpZihEdC5tYXRjaCgvXiMrMCskLykpcmV0dXJu''@;'; put 'put ''IGVvK05lKG9pLER0Lmxlbmd0aC1EdC5pbmRleE9mKCIwIikpO2lmKG1yPUR0Lm1hdGNoKHZhKSlyZXR1cm4gTG49S3MoV3QsbXJbMV0ubGVuZ3RoKS5yZXBsYWNlKC9eKFteXC5dKykkLywiJDEuIit3aShtclsxXSkpLnJlcGxhY2UoL1wuJC8sIi4iK3dpKG1yWzFdKSkucmVwbGFjZSgvXC4o''@;'; put 'put ''XGQqKSQvLGZ1bmN0aW9uKHlzLHJjKXtyZXR1cm4iLiIrcmMrVCgiMCIsd2kobXJbMV0pLmxlbmd0aC1yYy5sZW5ndGgpfSksLTEhPT1EdC5pbmRleE9mKCIwLiIpP0xuOkxuLnJlcGxhY2UoL14wXC4vLCIuIik7aWYoRHQ9RHQucmVwbGFjZSgvXiMrKFswLl0pLywiJDEiKSxtcj1EdC5tYXRj''@;'; put 'put ''aCgvXigwKilcLigjKikkLykpcmV0dXJuIGVvK0tzKG9pLG1yWzJdLmxlbmd0aCkucmVwbGFjZSgvXC4oXGQqWzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikkLywiJDEuIikucmVwbGFjZSgvXjBcLi8sbXJbMV0ubGVuZ3RoPyIwLiI6Ii4iKTtpZihtcj1EdC5tYXRjaCgvXiN7''@;'; put 'put ''MSwzfSwjIzAoXC4/KSQvKSlyZXR1cm4gZW8rZGEoTmUob2ksMCkpO2lmKG1yPUR0Lm1hdGNoKC9eIywjIzBcLihbIzBdKjApJC8pKXJldHVybiBXdDwwPyItIit6ZShlbixEdCwtV3QpOmRhKCIiKyhNYXRoLmZsb29yKFd0KStmdW5jdGlvbiBfdShlbixEdCl7cmV0dXJuIER0PCgiIitNYXRo''@;'; put 'put ''LnJvdW5kKChlbi1NYXRoLmZsb29yKGVuKSkqTWF0aC5wb3coMTAsRHQpKSkubGVuZ3RoPzE6MH0oV3QsbXJbMV0ubGVuZ3RoKSkpKyIuIitQKFFzKFd0LG1yWzFdLmxlbmd0aCksbXJbMV0ubGVuZ3RoKTtpZihtcj1EdC5tYXRjaCgvXiMsIyosIzAvKSlyZXR1cm4gemUoZW4sRHQucmVwbGFj''@;'; put 'put ''ZSgvXiMsIyosLywiIiksV3QpO2lmKG1yPUR0Lm1hdGNoKC9eKFswI10rKShcXD8tKFswI10rKSkrJC8pKXJldHVybiBMbj1tKHplKGVuLER0LnJlcGxhY2UoL1tcXC1dL2csIiIpLFd0KSksQnI9MCxtKG0oRHQucmVwbGFjZSgvXFwvZywiIikpLnJlcGxhY2UoL1swI10vZyxmdW5jdGlvbih5''@;'; put 'put ''cyl7cmV0dXJuIEJyPExuLmxlbmd0aD9Mbi5jaGFyQXQoQnIrKyk6IjAiPT09eXM/IjAiOiIifSkpO2lmKER0Lm1hdGNoKERvKSlyZXR1cm4iKCIrKExuPXplKGVuLCIjIyMjIyMjIyMjIixXdCkpLnN1YnN0cigwLDMpKyIpICIrTG4uc3Vic3RyKDMsMykrIi0iK0xuLnN1YnN0cig2KTt2YXIg''@;'; put 'put ''SGk9IiI7aWYobXI9RHQubWF0Y2goL14oWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBCcj1NYXRoLm1pbihtcls0XS5sZW5ndGgsNyksRWk9VnQob2ksTWF0aC5wb3coMTAsQnIpLTEsITEpLExuPSIiK2VvLCIgIj09KEhpPSRhKCJuIixtclsxXSxFaVsxXSkpLmNoYXJBdChI''@;'; put 'put ''aS5sZW5ndGgtMSkmJihIaT1IaS5zdWJzdHIoMCxIaS5sZW5ndGgtMSkrIjAiKSxMbis9SGkrbXJbMl0rIi8iK21yWzNdLChIaT1zZShFaVsyXSxCcikpLmxlbmd0aDxtcls0XS5sZW5ndGgmJihIaT13aShtcls0XS5zdWJzdHIobXJbNF0ubGVuZ3RoLUhpLmxlbmd0aCkpK0hpKSxMbis9SGk7''@;'; put 'put ''aWYobXI9RHQubWF0Y2goL14jIChbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIEJyPU1hdGgubWluKE1hdGgubWF4KG1yWzFdLmxlbmd0aCxtcls0XS5sZW5ndGgpLDcpLGVvKygoRWk9VnQob2ksTWF0aC5wb3coMTAsQnIpLTEsITApKVswXXx8KEVpWzFdPyIiOiIwIikpKyIg''@;'; put 'put ''IisoRWlbMV0/UShFaVsxXSxCcikrbXJbMl0rIi8iK21yWzNdK3NlKEVpWzJdLEJyKTpUKCIgIiwyKkJyKzErbXJbMl0ubGVuZ3RoK21yWzNdLmxlbmd0aCkpO2lmKG1yPUR0Lm1hdGNoKC9eWyMwP10rJC8pKXJldHVybiBMbj1OZShXdCwwKSxEdC5sZW5ndGg8PUxuLmxlbmd0aD9Mbjp3aShE''@;'; put 'put ''dC5zdWJzdHIoMCxEdC5sZW5ndGgtTG4ubGVuZ3RoKSkrTG47aWYobXI9RHQubWF0Y2goL14oWyMwP10rKVwuKFsjMF0rKSQvKSl7TG49IiIrV3QudG9GaXhlZChNYXRoLm1pbihtclsyXS5sZW5ndGgsMTApKS5yZXBsYWNlKC8oW14wXSkwKyQvLCIkMSIpLEJyPUxuLmluZGV4T2YoIi4iKTt2''@;'; put 'put ''YXIgWmE9RHQuaW5kZXhPZigiLiIpLUJyLHNhPUR0Lmxlbmd0aC1Mbi5sZW5ndGgtWmE7cmV0dXJuIHdpKER0LnN1YnN0cigwLFphKStMbitEdC5zdWJzdHIoRHQubGVuZ3RoLXNhKSl9aWYobXI9RHQubWF0Y2goL14wMCwwMDBcLihbIzBdKjApJC8pKXJldHVybiBCcj1RcyhXdCxtclsxXS5s''@;'; put 'put ''ZW5ndGgpLFd0PDA/Ii0iK3plKGVuLER0LC1XdCk6ZGEoZnVuY3Rpb24gTWQoZW4pe3JldHVybiBlbjwyMTQ3NDgzNjQ3JiZlbj4tMjE0NzQ4MzY0OD8iIisoZW4+PTA/MHxlbjplbi0xfDApOiIiK01hdGguZmxvb3IoZW4pfShXdCkpLnJlcGxhY2UoL15cZCxcZHszfSQvLCIwJCYiKS5yZXBs''@;'; put 'put ''YWNlKC9eXGQqJC8sZnVuY3Rpb24oeXMpe3JldHVybiIwMCwiKyh5cy5sZW5ndGg8Mz9QKDAsMy15cy5sZW5ndGgpOiIiKSt5c30pKyIuIitQKEJyLG1yWzFdLmxlbmd0aCk7c3dpdGNoKER0KXtjYXNlIiMjIywjIzAuMDAiOnJldHVybiB6ZShlbiwiIywjIzAuMDAiLFd0KTtjYXNlIiMjIywj''@;'; put 'put ''IyMiOmNhc2UiIyMsIyMjIjpjYXNlIiMsIyMjIjp2YXIgQW89ZGEoTmUob2ksMCkpO3JldHVybiIwIiE9PUFvP2VvK0FvOiIiO2Nhc2UiIyMjLCMjIy4wMCI6cmV0dXJuIHplKGVuLCIjIyMsIyMwLjAwIixXdCkucmVwbGFjZSgvXjBcLi8sIi4iKTtjYXNlIiMsIyMjLjAwIjpyZXR1cm4gemUo''@;'; put 'put ''ZW4sIiMsIyMwLjAwIixXdCkucmVwbGFjZSgvXjBcLi8sIi4iKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIGZvcm1hdCB8IitEdCsifCIpfWZ1bmN0aW9uIEp0KGVuLER0KXt2YXIgV3Qsb249ZW4uaW5kZXhPZigiRSIpLWVuLmluZGV4T2YoIi4iKS0xO2lmKGVuLm1hdGNoKC9eIysw''@;'; put 'put ''LjBFXCswJC8pKXtpZigwPT1EdClyZXR1cm4iMC4wRSswIjtpZihEdDwwKXJldHVybiItIitKdChlbiwtRHQpO3ZhciBMbj1lbi5pbmRleE9mKCIuIik7LTE9PT1MbiYmKExuPWVuLmluZGV4T2YoIkUiKSk7dmFyIG1yPU1hdGguZmxvb3IoTWF0aC5sb2coRHQpKk1hdGguTE9HMTBFKSVMbjtp''@;'; put 'put ''ZihtcjwwJiYobXIrPUxuKSwhKFd0PShEdC9NYXRoLnBvdygxMCxtcikpLnRvUHJlY2lzaW9uKG9uKzErKExuK21yKSVMbikpLm1hdGNoKC9bRWVdLykpe3ZhciBCcj1NYXRoLmZsb29yKE1hdGgubG9nKER0KSpNYXRoLkxPRzEwRSk7LTE9PT1XdC5pbmRleE9mKCIuIik/V3Q9V3QuY2hhckF0''@;'; put 'put ''KDApKyIuIitXdC5zdWJzdHIoMSkrIkUrIisoQnItV3QubGVuZ3RoK21yKTpXdCs9IkUrIisoQnItbXIpLFd0PVd0LnJlcGxhY2UoL1wrLS8sIi0iKX1XdD1XdC5yZXBsYWNlKC9eKFsrLV0/KShcZCopXC4oXGQqKVtFZV0vLGZ1bmN0aW9uKEVpLG9pLGVvLEhpKXtyZXR1cm4gb2krZW8rSGku''@;'; put 'put ''c3Vic3RyKDAsKExuK21yKSVMbikrIi4iK0hpLnN1YnN0cihtcikrIkUifSl9ZWxzZSBXdD1EdC50b0V4cG9uZW50aWFsKG9uKTtyZXR1cm4gZW4ubWF0Y2goL0VcKzAwJC8pJiZXdC5tYXRjaCgvZVsrLV1cZCQvKSYmKFd0PVd0LnN1YnN0cigwLFd0Lmxlbmd0aC0xKSsiMCIrV3QuY2hhckF0''@;'; put 'put ''KFd0Lmxlbmd0aC0xKSksZW4ubWF0Y2goL0VcLS8pJiZXdC5tYXRjaCgvZVwrLykmJihXdD1XdC5yZXBsYWNlKC9lXCsvLCJlIikpLFd0LnJlcGxhY2UoImUiLCJFIil9ZnVuY3Rpb24gYm4oZW4sRHQsV3Qpe2lmKDQwPT09ZW4uY2hhckNvZGVBdCgwKSYmIUR0Lm1hdGNoKE5pKSl7dmFyIG9u''@;'; put 'put ''PUR0LnJlcGxhY2UoL1woICovLCIiKS5yZXBsYWNlKC8gXCkvLCIiKS5yZXBsYWNlKC9cKS8sIiIpO3JldHVybiBXdD49MD9ibigibiIsb24sV3QpOiIoIitibigibiIsb24sLVd0KSsiKSJ9aWYoNDQ9PT1EdC5jaGFyQ29kZUF0KER0Lmxlbmd0aC0xKSlyZXR1cm4gZnVuY3Rpb24gTDUoZW4s''@;'; put 'put ''RHQsV3Qpe2Zvcih2YXIgb249RHQubGVuZ3RoLTE7NDQ9PT1EdC5jaGFyQ29kZUF0KG9uLTEpOyktLW9uO3JldHVybiAkYShlbixEdC5zdWJzdHIoMCxvbiksV3QvTWF0aC5wb3coMTAsMyooRHQubGVuZ3RoLW9uKSkpfShlbixEdCxXdCk7aWYoLTEhPT1EdC5pbmRleE9mKCIlIikpcmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uIEc4KGVuLER0LFd0KXt2YXIgb249RHQucmVwbGFjZShobiwiIiksTG49RHQubGVuZ3RoLW9uLmxlbmd0aDtyZXR1cm4gJGEoZW4sb24sV3QqTWF0aC5wb3coMTAsMipMbikpK1QoIiUiLExuKX0oZW4sRHQsV3QpO2lmKC0xIT09RHQuaW5kZXhPZigiRSIpKXJldHVybiBKdChE''@;'; put 'put ''dCxXdCk7aWYoMzY9PT1EdC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitibihlbixEdC5zdWJzdHIoIiAiPT1EdC5jaGFyQXQoMSk/MjoxKSxXdCk7dmFyIExuLG1yLEJyLEVpLG9pPU1hdGguYWJzKFd0KSxlbz1XdDwwPyItIjoiIjtpZihEdC5tYXRjaCgvXjAwKyQvKSlyZXR1cm4gZW8rUChv''@;'; put 'put ''aSxEdC5sZW5ndGgpO2lmKER0Lm1hdGNoKC9eWyM/XSskLykpcmV0dXJuIExuPSIiK1d0LDA9PT1XdCYmKExuPSIiKSxMbi5sZW5ndGg+RHQubGVuZ3RoP0xuOndpKER0LnN1YnN0cigwLER0Lmxlbmd0aC1Mbi5sZW5ndGgpKStMbjtpZihtcj1EdC5tYXRjaChEaSkpcmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''IFJpKGVuLER0LFd0KXtyZXR1cm4gV3QrKDA9PT1EdD8iIjoiIitEdCkrVCgiICIsZW5bMV0ubGVuZ3RoKzIrZW5bNF0ubGVuZ3RoKX0obXIsb2ksZW8pO2lmKER0Lm1hdGNoKC9eIyswKyQvKSlyZXR1cm4gZW8rUChvaSxEdC5sZW5ndGgtRHQuaW5kZXhPZigiMCIpKTtpZihtcj1EdC5tYXRj''@;'; put 'put ''aCh2YSkpcmV0dXJuIExuPShMbj0oIiIrV3QpLnJlcGxhY2UoL14oW15cLl0rKSQvLCIkMS4iK3dpKG1yWzFdKSkucmVwbGFjZSgvXC4kLywiLiIrd2kobXJbMV0pKSkucmVwbGFjZSgvXC4oXGQqKSQvLGZ1bmN0aW9uKHlzLHJjKXtyZXR1cm4iLiIrcmMrVCgiMCIsd2kobXJbMV0pLmxlbmd0''@;'; put 'put ''aC1yYy5sZW5ndGgpfSksLTEhPT1EdC5pbmRleE9mKCIwLiIpP0xuOkxuLnJlcGxhY2UoL14wXC4vLCIuIik7aWYoRHQ9RHQucmVwbGFjZSgvXiMrKFswLl0pLywiJDEiKSxtcj1EdC5tYXRjaCgvXigwKilcLigjKikkLykpcmV0dXJuIGVvKygiIitvaSkucmVwbGFjZSgvXC4oXGQqWzEtOV0p''@;'; put 'put ''MCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikkLywiJDEuIikucmVwbGFjZSgvXjBcLi8sbXJbMV0ubGVuZ3RoPyIwLiI6Ii4iKTtpZihtcj1EdC5tYXRjaCgvXiN7MSwzfSwjIzAoXC4/KSQvKSlyZXR1cm4gZW8rZGEoIiIrb2kpO2lmKG1yPUR0Lm1hdGNoKC9eIywjIzBcLihbIzBdKjAp''@;'; put 'put ''JC8pKXJldHVybiBXdDwwPyItIitibihlbixEdCwtV3QpOmRhKCIiK1d0KSsiLiIrVCgiMCIsbXJbMV0ubGVuZ3RoKTtpZihtcj1EdC5tYXRjaCgvXiMsIyosIzAvKSlyZXR1cm4gYm4oZW4sRHQucmVwbGFjZSgvXiMsIyosLywiIiksV3QpO2lmKG1yPUR0Lm1hdGNoKC9eKFswI10rKShcXD8t''@;'; put 'put ''KFswI10rKSkrJC8pKXJldHVybiBMbj1tKGJuKGVuLER0LnJlcGxhY2UoL1tcXC1dL2csIiIpLFd0KSksQnI9MCxtKG0oRHQucmVwbGFjZSgvXFwvZywiIikpLnJlcGxhY2UoL1swI10vZyxmdW5jdGlvbih5cyl7cmV0dXJuIEJyPExuLmxlbmd0aD9Mbi5jaGFyQXQoQnIrKyk6IjAiPT09eXM/''@;'; put 'put ''IjAiOiIifSkpO2lmKER0Lm1hdGNoKERvKSlyZXR1cm4iKCIrKExuPWJuKGVuLCIjIyMjIyMjIyMjIixXdCkpLnN1YnN0cigwLDMpKyIpICIrTG4uc3Vic3RyKDMsMykrIi0iK0xuLnN1YnN0cig2KTt2YXIgSGk9IiI7aWYobXI9RHQubWF0Y2goL14oWyMwP10rKSggPylcLyggPykoWyMwP10r''@;'; put 'put ''KS8pKXJldHVybiBCcj1NYXRoLm1pbihtcls0XS5sZW5ndGgsNyksRWk9VnQob2ksTWF0aC5wb3coMTAsQnIpLTEsITEpLExuPSIiK2VvLCIgIj09KEhpPSRhKCJuIixtclsxXSxFaVsxXSkpLmNoYXJBdChIaS5sZW5ndGgtMSkmJihIaT1IaS5zdWJzdHIoMCxIaS5sZW5ndGgtMSkrIjAiKSxM''@;'; put 'put ''bis9SGkrbXJbMl0rIi8iK21yWzNdLChIaT1zZShFaVsyXSxCcikpLmxlbmd0aDxtcls0XS5sZW5ndGgmJihIaT13aShtcls0XS5zdWJzdHIobXJbNF0ubGVuZ3RoLUhpLmxlbmd0aCkpK0hpKSxMbis9SGk7aWYobXI9RHQubWF0Y2goL14jIChbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykp''@;'; put 'put ''cmV0dXJuIEJyPU1hdGgubWluKE1hdGgubWF4KG1yWzFdLmxlbmd0aCxtcls0XS5sZW5ndGgpLDcpLGVvKygoRWk9VnQob2ksTWF0aC5wb3coMTAsQnIpLTEsITApKVswXXx8KEVpWzFdPyIiOiIwIikpKyIgIisoRWlbMV0/UShFaVsxXSxCcikrbXJbMl0rIi8iK21yWzNdK3NlKEVpWzJdLEJy''@;'; put 'put ''KTpUKCIgIiwyKkJyKzErbXJbMl0ubGVuZ3RoK21yWzNdLmxlbmd0aCkpO2lmKG1yPUR0Lm1hdGNoKC9eWyMwP10rJC8pKXJldHVybiBEdC5sZW5ndGg8PShMbj0iIitXdCkubGVuZ3RoP0xuOndpKER0LnN1YnN0cigwLER0Lmxlbmd0aC1Mbi5sZW5ndGgpKStMbjtpZihtcj1EdC5tYXRjaCgv''@;'; put 'put ''XihbIzBdKylcLihbIzBdKykkLykpe0xuPSIiK1d0LnRvRml4ZWQoTWF0aC5taW4obXJbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgvKFteMF0pMCskLywiJDEiKSxCcj1Mbi5pbmRleE9mKCIuIik7dmFyIFphPUR0LmluZGV4T2YoIi4iKS1CcixzYT1EdC5sZW5ndGgtTG4ubGVuZ3RoLVphO3Jl''@;'; put 'put ''dHVybiB3aShEdC5zdWJzdHIoMCxaYSkrTG4rRHQuc3Vic3RyKER0Lmxlbmd0aC1zYSkpfWlmKG1yPUR0Lm1hdGNoKC9eMDAsMDAwXC4oWyMwXSowKSQvKSlyZXR1cm4gV3Q8MD8iLSIrYm4oZW4sRHQsLVd0KTpkYSgiIitXdCkucmVwbGFjZSgvXlxkLFxkezN9JC8sIjAkJiIpLnJlcGxhY2Uo''@;'; put 'put ''L15cZCokLyxmdW5jdGlvbih5cyl7cmV0dXJuIjAwLCIrKHlzLmxlbmd0aDwzP1AoMCwzLXlzLmxlbmd0aCk6IiIpK3lzfSkrIi4iK1AoMCxtclsxXS5sZW5ndGgpO3ZhciBBbz1kYSgiIitvaSk7c3dpdGNoKER0KXtjYXNlIiMjIywjIyMiOmNhc2UiIyMsIyMjIjpjYXNlIiMsIyMjIjpyZXR1''@;'; put 'put ''cm4iMCIhPT1Bbz9lbytBbzoiIjtjYXNlIiMsIzAwIjpyZXR1cm4iMDAiIT09KEFvPVAoQW8sMikpP2VvK0FvOiIiO2RlZmF1bHQ6aWYoRHQubWF0Y2goL1wuWzAjP10qJC8pKXJldHVybiBibihlbixEdC5zbGljZSgwLER0Lmxhc3RJbmRleE9mKCIuIikpLFd0KSt3aShEdC5zbGljZShEdC5s''@;'; put 'put ''YXN0SW5kZXhPZigiLiIpKSl9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBmb3JtYXQgfCIrRHQrInwiKX1yZXR1cm4gZnVuY3Rpb24oRHQsV3Qsb24pe3JldHVybiIwLDAiPT1XdCYmKFd0PSIjLCMwMCIpLCgwfG9uKT09PW9uP2JuKER0LFd0LG9uKTp6ZShEdCxXdCxvbil9fSgpO2Z1''@;'; put 'put ''bmN0aW9uIFNhKE50KXtmb3IodmFyIGhuPVtdLFBuPSExLFNpPTAsZXI9MDtTaTxOdC5sZW5ndGg7KytTaSlzd2l0Y2goTnQuY2hhckNvZGVBdChTaSkpe2Nhc2UgMzQ6UG49IVBuO2JyZWFrO2Nhc2UgOTU6Y2FzZSA0MjpjYXNlIDkyOisrU2k7YnJlYWs7Y2FzZSA1OTpobltobi5sZW5ndGhd''@;'; put 'put ''PU50LnN1YnN0cihlcixTaS1lciksZXI9U2krMX1pZihobltobi5sZW5ndGhdPU50LnN1YnN0cihlciksITA9PT1Qbil0aHJvdyBuZXcgRXJyb3IoIkZvcm1hdCB8IitOdCsifCB1bnRlcm1pbmF0ZWQgc3RyaW5nICIpO3JldHVybiBobn1fLl9zcGxpdD1TYTt2YXIgUGk9L1xbW0hoTW1Tc1x1''@;'; put 'put ''MEUwQVx1MEUxOVx1MEUxN10qXF0vO2Z1bmN0aW9uIFBjKE50KXtmb3IodmFyIGhuPTAsUG49IiIsU2k9IiI7aG48TnQubGVuZ3RoOylzd2l0Y2goUG49TnQuY2hhckF0KGhuKSl7Y2FzZSJHIjpCZShOdCxobikmJihobis9NiksaG4rKzticmVhaztjYXNlJyInOmZvcig7MzQhPT1OdC5jaGFy''@;'; put 'put ''Q29kZUF0KCsraG4pJiZobjxOdC5sZW5ndGg7KTsrK2huO2JyZWFrO2Nhc2UiXFwiOmNhc2UiXyI6aG4rPTI7YnJlYWs7Y2FzZSJAIjorK2huO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigiMSI9PT1OdC5jaGFyQXQoaG4rMSl8fCIyIj09PU50LmNoYXJBdChobisxKSlyZXR1cm4hMDtjYXNl''@;'; put 'put ''Ik0iOmNhc2UiRCI6Y2FzZSJZIjpjYXNlIkgiOmNhc2UiUyI6Y2FzZSJFIjpjYXNlIm0iOmNhc2UiZCI6Y2FzZSJ5IjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOnJldHVybiEwO2Nhc2UiQSI6Y2FzZSJhIjpjYXNlIlx1NGUwYSI6aWYoIkEvUCI9PT1OdC5zdWJzdHIoaG4sMyku''@;'; put 'put ''dG9VcHBlckNhc2UoKXx8IkFNL1BNIj09PU50LnN1YnN0cihobiw1KS50b1VwcGVyQ2FzZSgpfHwiXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCI9PT1OdC5zdWJzdHIoaG4sNSkudG9VcHBlckNhc2UoKSlyZXR1cm4hMDsrK2huO2JyZWFrO2Nhc2UiWyI6Zm9yKFNpPVBuOyJdIiE9PU50LmNo''@;'; put 'put ''YXJBdChobisrKSYmaG48TnQubGVuZ3RoOylTaSs9TnQuY2hhckF0KGhuKTtpZihTaS5tYXRjaChQaSkpcmV0dXJuITA7YnJlYWs7Y2FzZSIuIjpjYXNlIjAiOmNhc2UiIyI6Zm9yKDtobjxOdC5sZW5ndGgmJigiMCM/LixFKy0lIi5pbmRleE9mKFBuPU50LmNoYXJBdCgrK2huKSk+LTF8fCJc''@;'; put 'put ''XCI9PVBuJiYiLSI9PU50LmNoYXJBdChobisxKSYmIjAjIi5pbmRleE9mKE50LmNoYXJBdChobisyKSk+LTEpOyk7YnJlYWs7Y2FzZSI/Ijpmb3IoO050LmNoYXJBdCgrK2huKT09PVBuOyk7YnJlYWs7Y2FzZSIqIjorK2huLCgiICI9PU50LmNoYXJBdChobil8fCIqIj09TnQuY2hhckF0KGhu''@;'; put 'put ''KSkmJisraG47YnJlYWs7Y2FzZSIoIjpjYXNlIikiOisraG47YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNhc2UiOSI6Zm9yKDtobjxOdC5sZW5ndGgmJiIwMTIzNDU2Nzg5Ii5pbmRleE9mKE50LmNoYXJBdCgr''@;'; put 'put ''K2huKSk+LTE7KTticmVhaztkZWZhdWx0OisraG59cmV0dXJuITF9ZnVuY3Rpb24geG4oTnQsaG4sUG4sU2kpe2Zvcih2YXIgTmksRG8sd2ksZXI9W10sRGk9IiIsYnI9MCxSaT0iIix2YT0idCIsS3M9IkgiO2JyPE50Lmxlbmd0aDspc3dpdGNoKFJpPU50LmNoYXJBdChicikpe2Nhc2UiRyI6''@;'; put 'put ''aWYoIUJlKE50LGJyKSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBjaGFyYWN0ZXIgIitSaSsiIGluICIrTnQpO2VyW2VyLmxlbmd0aF09e3Q6IkciLHY6IkdlbmVyYWwifSxicis9NzticmVhaztjYXNlJyInOmZvcihEaT0iIjszNCE9PSh3aT1OdC5jaGFyQ29kZUF0KCsrYnIpKSYm''@;'; put 'put ''YnI8TnQubGVuZ3RoOylEaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh3aSk7ZXJbZXIubGVuZ3RoXT17dDoidCIsdjpEaX0sKyticjticmVhaztjYXNlIlxcIjp2YXIgUXM9TnQuY2hhckF0KCsrYnIpO2VyW2VyLmxlbmd0aF09e3Q6IigiPT09UXN8fCIpIj09PVFzP1FzOiJ0Iix2OlFzfSwrK2Jy''@;'; put 'put ''O2JyZWFrO2Nhc2UiXyI6ZXJbZXIubGVuZ3RoXT17dDoidCIsdjoiICJ9LGJyKz0yO2JyZWFrO2Nhc2UiQCI6ZXJbZXIubGVuZ3RoXT17dDoiVCIsdjpobn0sKyticjticmVhaztjYXNlIkIiOmNhc2UiYiI6aWYoIjEiPT09TnQuY2hhckF0KGJyKzEpfHwiMiI9PT1OdC5jaGFyQXQoYnIrMSkp''@;'; put 'put ''e2lmKG51bGw9PU5pJiZudWxsPT0oTmk9dW4oaG4sUG4sIjIiPT09TnQuY2hhckF0KGJyKzEpKSkpcmV0dXJuIiI7ZXJbZXIubGVuZ3RoXT17dDoiWCIsdjpOdC5zdWJzdHIoYnIsMil9LHZhPVJpLGJyKz0yO2JyZWFrfWNhc2UiTSI6Y2FzZSJEIjpjYXNlIlkiOmNhc2UiSCI6Y2FzZSJTIjpj''@;'; put 'put ''YXNlIkUiOlJpPVJpLnRvTG93ZXJDYXNlKCk7Y2FzZSJtIjpjYXNlImQiOmNhc2UieSI6Y2FzZSJoIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlIlx1MGUyNyI6Y2FzZSJcdTBlMTQiOmNhc2UiXHUwZTFiIjpjYXNlIlx1MGUwYSI6Y2FzZSJcdTBlMTkiOmNhc2UiXHUwZTE3IjppZiho''@;'; put 'put ''bjwwfHxudWxsPT1OaSYmbnVsbD09KE5pPXVuKGhuLFBuKSkpcmV0dXJuIiI7Zm9yKERpPVJpOysrYnI8TnQubGVuZ3RoJiZOdC5jaGFyQXQoYnIpLnRvTG93ZXJDYXNlKCk9PT1SaTspRGkrPVJpOyJtIj09PVJpJiYiaCI9PT12YS50b0xvd2VyQ2FzZSgpJiYoUmk9Ik0iKSwiaCI9PT1SaSYm''@;'; put 'put ''KFJpPUtzKSxlcltlci5sZW5ndGhdPXt0OlJpLHY6RGl9LHZhPVJpO2JyZWFrO2Nhc2UiQSI6Y2FzZSJhIjpjYXNlIlx1NGUwYSI6dmFyIE1kPXt0OlJpLHY6Uml9O2lmKG51bGw9PU5pJiYoTmk9dW4oaG4sUG4pKSwiQS9QIj09PU50LnN1YnN0cihiciwzKS50b1VwcGVyQ2FzZSgpPyhudWxs''@;'; put 'put ''IT1OaSYmKE1kLnY9TmkuSD49MTI/IlAiOiJBIiksTWQudD0iVCIsS3M9ImgiLGJyKz0zKToiQU0vUE0iPT09TnQuc3Vic3RyKGJyLDUpLnRvVXBwZXJDYXNlKCk/KG51bGwhPU5pJiYoTWQudj1OaS5IPj0xMj8iUE0iOiJBTSIpLE1kLnQ9IlQiLGJyKz01LEtzPSJoIik6Ilx1NGUwYVx1NTM0''@;'; put 'put ''OC9cdTRlMGJcdTUzNDgiPT09TnQuc3Vic3RyKGJyLDUpLnRvVXBwZXJDYXNlKCk/KG51bGwhPU5pJiYoTWQudj1OaS5IPj0xMj8iXHU0ZTBiXHU1MzQ4IjoiXHU0ZTBhXHU1MzQ4IiksTWQudD0iVCIsYnIrPTUsS3M9ImgiKTooTWQudD0idCIsKyticiksbnVsbD09TmkmJiJUIj09PU1kLnQp''@;'; put 'put ''cmV0dXJuIiI7ZXJbZXIubGVuZ3RoXT1NZCx2YT1SaTticmVhaztjYXNlIlsiOmZvcihEaT1SaTsiXSIhPT1OdC5jaGFyQXQoYnIrKykmJmJyPE50Lmxlbmd0aDspRGkrPU50LmNoYXJBdChicik7aWYoIl0iIT09RGkuc2xpY2UoLTEpKXRocm93J3VudGVybWluYXRlZCAiWyIgYmxvY2s6IHwn''@;'; put 'put ''K0RpKyJ8IjtpZihEaS5tYXRjaChQaSkpe2lmKG51bGw9PU5pJiZudWxsPT0oTmk9dW4oaG4sUG4pKSlyZXR1cm4iIjtlcltlci5sZW5ndGhdPXt0OiJaIix2OkRpLnRvTG93ZXJDYXNlKCl9LHZhPURpLmNoYXJBdCgxKX1lbHNlIERpLmluZGV4T2YoIiQiKT4tMSYmKERpPShEaS5tYXRjaCgv''@;'; put 'put ''XCQoW14tXFtcXV0qKS8pfHxbXSlbMV18fCIkIixQYyhOdCl8fChlcltlci5sZW5ndGhdPXt0OiJ0Iix2OkRpfSkpO2JyZWFrO2Nhc2UiLiI6aWYobnVsbCE9Tmkpe2ZvcihEaT1SaTsrK2JyPE50Lmxlbmd0aCYmIjAiPT09KFJpPU50LmNoYXJBdChicikpOylEaSs9Umk7ZXJbZXIubGVuZ3Ro''@;'; put 'put ''XT17dDoicyIsdjpEaX07YnJlYWt9Y2FzZSIwIjpjYXNlIiMiOmZvcihEaT1SaTsrK2JyPE50Lmxlbmd0aCYmIjAjPy4sRSstJSIuaW5kZXhPZihSaT1OdC5jaGFyQXQoYnIpKT4tMTspRGkrPVJpO2VyW2VyLmxlbmd0aF09e3Q6Im4iLHY6RGl9O2JyZWFrO2Nhc2UiPyI6Zm9yKERpPVJpO050''@;'; put 'put ''LmNoYXJBdCgrK2JyKT09PVJpOylEaSs9Umk7ZXJbZXIubGVuZ3RoXT17dDpSaSx2OkRpfSx2YT1SaTticmVhaztjYXNlIioiOisrYnIsKCIgIj09TnQuY2hhckF0KGJyKXx8IioiPT1OdC5jaGFyQXQoYnIpKSYmKyticjticmVhaztjYXNlIigiOmNhc2UiKSI6ZXJbZXIubGVuZ3RoXT17dDox''@;'; put 'put ''PT09U2k/InQiOlJpLHY6Uml9LCsrYnI7YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNhc2UiOSI6Zm9yKERpPVJpO2JyPE50Lmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YoTnQuY2hhckF0KCsrYnIpKT4t''@;'; put 'put ''MTspRGkrPU50LmNoYXJBdChicik7ZXJbZXIubGVuZ3RoXT17dDoiRCIsdjpEaX07YnJlYWs7Y2FzZSIgIjplcltlci5sZW5ndGhdPXt0OlJpLHY6Uml9LCsrYnI7YnJlYWs7Y2FzZSIkIjplcltlci5sZW5ndGhdPXt0OiJ0Iix2Ol9pfSwrK2JyO2JyZWFrO2Nhc2UiLyI6ZXJbZXIubGVuZ3Ro''@;'; put 'put ''XT1lci5sZW5ndGg+MCYmUGMoZXJbZXIubGVuZ3RoLTFdLnYpP3t0OiJ0Iix2OkRufTp7dDoidCIsdjoiLyJ9LCsrYnI7YnJlYWs7ZGVmYXVsdDppZigtMT09PSIsJC0rLygpOiFeJid+e308Pj1cdTIwYWNhY2Zpamtsb3BxcnR1dnd4elAiLmluZGV4T2YoUmkpKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''dW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK1JpKyIgaW4gIitOdCk7ZXJbZXIubGVuZ3RoXT17dDoidCIsdjpSaX0sKyticn12YXIgRzgsemU9MCxMNT0wO2Zvcihicj1lci5sZW5ndGgtMSx2YT0idCI7YnI+PTA7LS1icilzd2l0Y2goZXJbYnJdLnQpe2Nhc2UiaCI6Y2FzZSJIIjplclticl0u''@;'; put 'put ''dD1Lcyx2YT0iaCIsemU8MSYmKHplPTEpO2JyZWFrO2Nhc2UicyI6KEc4PWVyW2JyXS52Lm1hdGNoKC9cLjArJC8pKSYmKEw1PU1hdGgubWF4KEw1LEc4WzBdLmxlbmd0aC0xKSksemU8MyYmKHplPTMpO2Nhc2UiZCI6Y2FzZSJ5IjpjYXNlIk0iOmNhc2UiZSI6dmE9ZXJbYnJdLnQ7YnJlYWs7''@;'; put 'put ''Y2FzZSJtIjoicyI9PT12YSYmKGVyW2JyXS50PSJNIix6ZTwyJiYoemU9MikpO2JyZWFrO2Nhc2UiWCI6YnJlYWs7Y2FzZSJaIjp6ZTwxJiZlclticl0udi5tYXRjaCgvW0hoXS8pJiYoemU9MSksemU8MiYmZXJbYnJdLnYubWF0Y2goL1tNbV0vKSYmKHplPTIpLHplPDMmJmVyW2JyXS52Lm1h''@;'; put 'put ''dGNoKC9bU3NdLykmJih6ZT0zKX1zd2l0Y2goemUpe2Nhc2UgMDpicmVhaztjYXNlIDE6TmkudT49LjUmJihOaS51PTAsKytOaS5TKSxOaS5TPj02MCYmKE5pLlM9MCwrK05pLk0pLE5pLk0+PTYwJiYoTmkuTT0wLCsrTmkuSCk7YnJlYWs7Y2FzZSAyOk5pLnU+PS41JiYoTmkudT0wLCsrTmku''@;'; put 'put ''UyksTmkuUz49NjAmJihOaS5TPTAsKytOaS5NKX12YXIgYm4sSnQ9IiI7Zm9yKGJyPTA7YnI8ZXIubGVuZ3RoOysrYnIpc3dpdGNoKGVyW2JyXS50KXtjYXNlInQiOmNhc2UiVCI6Y2FzZSIgIjpjYXNlIkQiOmJyZWFrO2Nhc2UiWCI6ZXJbYnJdLnY9IiIsZXJbYnJdLnQ9IjsiO2JyZWFrO2Nh''@;'; put 'put ''c2UiZCI6Y2FzZSJtIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJIIjpjYXNlIk0iOmNhc2UicyI6Y2FzZSJlIjpjYXNlImIiOmNhc2UiWiI6Y2FzZSJcdTBlMjciOmNhc2UiXHUwZTE0IjpjYXNlIlx1MGUxYiI6Y2FzZSJcdTBlMGEiOmNhc2UiXHUwZTE5IjpjYXNlIlx1MGUxNyI6ZXJbYnJdLnY9''@;'; put 'put ''TXMoZXJbYnJdLnQuY2hhckNvZGVBdCgwKSxlclticl0udixOaSxMNSksZXJbYnJdLnQ9InQiO2JyZWFrO2Nhc2UibiI6Y2FzZSI/Ijpmb3IoYm49YnIrMTtudWxsIT1lcltibl0mJigiPyI9PT0oUmk9ZXJbYm5dLnQpfHwiRCI9PT1SaXx8KCIgIj09PVJpfHwidCI9PT1SaSkmJm51bGwhPWVy''@;'; put 'put ''W2JuKzFdJiYoIj8iPT09ZXJbYm4rMV0udHx8InQiPT09ZXJbYm4rMV0udCYmIi8iPT09ZXJbYm4rMV0udil8fCIoIj09PWVyW2JyXS50JiYoIiAiPT09Uml8fCJuIj09PVJpfHwiKSI9PT1SaSl8fCJ0Ij09PVJpJiYoIi8iPT09ZXJbYm5dLnZ8fCIgIj09PWVyW2JuXS52JiZudWxsIT1lclti''@;'; put 'put ''bisxXSYmIj8iPT1lcltibisxXS50KSk7KWVyW2JyXS52Kz1lcltibl0udixlcltibl09e3Y6IiIsdDoiOyJ9LCsrYm47SnQrPWVyW2JyXS52LGJyPWJuLTE7YnJlYWs7Y2FzZSJHIjplclticl0udD0idCIsZXJbYnJdLnY9Tm8oaG4sUG4pfXZhciBEdCxXdCxlbj0iIjtpZihKdC5sZW5ndGg+''@;'; put 'put ''MCl7NDA9PUp0LmNoYXJDb2RlQXQoMCk/KER0PWhuPDAmJjQ1PT09SnQuY2hhckNvZGVBdCgwKT8taG46aG4sV3Q9JGEoIm4iLEp0LER0KSk6KFd0PSRhKCJuIixKdCxEdD1objwwJiZTaT4xPy1objpobiksRHQ8MCYmZXJbMF0mJiJ0Ij09ZXJbMF0udCYmKFd0PVd0LnN1YnN0cigxKSxlclsw''@;'; put 'put ''XS52PSItIitlclswXS52KSksYm49KFd0PVd0LnJlcGxhY2UoL1ssXC5dL2csZnVuY3Rpb24oQnIpe3JldHVybiIuIj09QnI/a3I6TGl9KSkubGVuZ3RoLTE7dmFyIG9uPWVyLmxlbmd0aDtmb3IoYnI9MDticjxlci5sZW5ndGg7KyticilpZihudWxsIT1lclticl0mJiJ0IiE9ZXJbYnJdLnQm''@;'; put 'put ''JmVyW2JyXS52LmluZGV4T2YoIi4iKT4tMSl7b249YnI7YnJlYWt9dmFyIExuPWVyLmxlbmd0aDtpZihvbj09PWVyLmxlbmd0aCYmLTE9PT1XdC5pbmRleE9mKCJFIikpe2Zvcihicj1lci5sZW5ndGgtMTticj49MDstLWJyKW51bGw9PWVyW2JyXXx8LTE9PT0ibj8iLmluZGV4T2YoZXJbYnJd''@;'; put 'put ''LnQpfHwoYm4+PWVyW2JyXS52Lmxlbmd0aC0xP2VyW2JyXS52PVd0LnN1YnN0cigxKyhibi09ZXJbYnJdLnYubGVuZ3RoKSxlclticl0udi5sZW5ndGgpOmJuPDA/ZXJbYnJdLnY9IiI6KGVyW2JyXS52PVd0LnN1YnN0cigwLGJuKzEpLGJuPS0xKSxlclticl0udD0idCIsTG49YnIpO2JuPj0w''@;'; put 'put ''JiZMbjxlci5sZW5ndGgmJihlcltMbl0udj1XdC5zdWJzdHIoMCxibisxKStlcltMbl0udil9ZWxzZSBpZihvbiE9PWVyLmxlbmd0aCYmLTE9PT1XdC5pbmRleE9mKCJFIikpe2Zvcihibj1XdC5pbmRleE9mKGtyKS0xLGJyPW9uO2JyPj0wOy0tYnIpaWYobnVsbCE9ZXJbYnJdJiYtMSE9PSJu''@;'; put 'put ''PyIuaW5kZXhPZihlclticl0udCkpe2ZvcihEbz1lclticl0udi5pbmRleE9mKCIuIik+LTEmJmJyPT09b24/ZXJbYnJdLnYuaW5kZXhPZigiLiIpLTE6ZXJbYnJdLnYubGVuZ3RoLTEsZW49ZXJbYnJdLnYuc3Vic3RyKERvKzEpO0RvPj0wOy0tRG8pYm4+PTAmJigiMCI9PT1lclticl0udi5j''@;'; put 'put ''aGFyQXQoRG8pfHwiIyI9PT1lclticl0udi5jaGFyQXQoRG8pKSYmKGVuPVd0LmNoYXJBdChibi0tKStlbik7ZXJbYnJdLnY9ZW4sZXJbYnJdLnQ9InQiLExuPWJyfWZvcihibj49MCYmTG48ZXIubGVuZ3RoJiYoZXJbTG5dLnY9V3Quc3Vic3RyKDAsYm4rMSkrZXJbTG5dLnYpLGJuPVd0Lmlu''@;'; put 'put ''ZGV4T2Yoa3IpKzEsYnI9b247YnI8ZXIubGVuZ3RoOysrYnIpaWYobnVsbCE9ZXJbYnJdJiYoLTEhPT0ibj8oIi5pbmRleE9mKGVyW2JyXS50KXx8YnI9PT1vbikpe2ZvcihEbz1lclticl0udi5pbmRleE9mKGtyKT4tMSYmYnI9PT1vbj9lclticl0udi5pbmRleE9mKGtyKSsxOjAsZW49ZXJb''@;'; put 'put ''YnJdLnYuc3Vic3RyKDAsRG8pO0RvPGVyW2JyXS52Lmxlbmd0aDsrK0RvKWJuPFd0Lmxlbmd0aCYmKGVuKz1XdC5jaGFyQXQoYm4rKykpO2VyW2JyXS52PWVuLGVyW2JyXS50PSJ0IixMbj1icn19fWZvcihicj0wO2JyPGVyLmxlbmd0aDsrK2JyKW51bGwhPWVyW2JyXSYmIm4/Ii5pbmRleE9m''@;'; put 'put ''KGVyW2JyXS50KT4tMSYmKGVyW2JyXS52PSRhKGVyW2JyXS50LGVyW2JyXS52LER0PVNpPjEmJmhuPDAmJmJyPjAmJiItIj09PWVyW2JyLTFdLnY/LWhuOmhuKS5yZXBsYWNlKC9cLi9nLGtyKS5yZXBsYWNlKC8sLyxMaSksZXJbYnJdLnQ9InQiKTt2YXIgbXI9IiI7Zm9yKGJyPTA7YnIhPT1l''@;'; put 'put ''ci5sZW5ndGg7KyticiludWxsIT1lclticl0mJihtcis9ZXJbYnJdLnYpO3JldHVybiBtcn1fLmlzX2RhdGU9UGMsXy5fZXZhbD14bjt2YXIgcWw9L1xbWz08Pl0vLGNoPS9cWyg9fD5bPV0/fDxbPj1dPykoLT9cZCsoPzpcLlxkKik/KVxdLztmdW5jdGlvbiBFZChOdCxobil7aWYobnVsbD09''@;'; put 'put ''aG4pcmV0dXJuITE7dmFyIFBuPXBhcnNlRmxvYXQoaG5bMl0pO3N3aXRjaChoblsxXSl7Y2FzZSI9IjppZihOdD09UG4pcmV0dXJuITA7YnJlYWs7Y2FzZSI+IjppZihOdD5QbilyZXR1cm4hMDticmVhaztjYXNlIjwiOmlmKE50PFBuKXJldHVybiEwO2JyZWFrO2Nhc2UiPD4iOmlmKE50IT1Q''@;'; put 'put ''bilyZXR1cm4hMDticmVhaztjYXNlIj49IjppZihOdD49UG4pcmV0dXJuITA7YnJlYWs7Y2FzZSI8PSI6aWYoTnQ8PVBuKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIExoKE50LGhuLFBuKXtudWxsPT1QbiYmKFBuPXt9KTt2YXIgU2k9IiI7c3dpdGNoKHR5cGVvZiBOdCl7Y2FzZSJzdHJp''@;'; put 'put ''bmciOlNpPSJtL2QveXkiPT1OdCYmUG4uZGF0ZU5GP1BuLmRhdGVORjpOdDticmVhaztjYXNlIm51bWJlciI6bnVsbD09KFNpPTE0PT1OdCYmUG4uZGF0ZU5GP1BuLmRhdGVORjoobnVsbCE9UG4udGFibGU/UG4udGFibGU6ZnQpW050XSkmJihTaT1Qbi50YWJsZSYmUG4udGFibGVba3RbTnRd''@;'; put 'put ''XXx8ZnRba3RbTnRdXSksbnVsbD09U2kmJihTaT1FdFtOdF18fCJHZW5lcmFsIil9aWYoQmUoU2ksMCkpcmV0dXJuIE5vKGhuLFBuKTtobiBpbnN0YW5jZW9mIERhdGUmJihobj1qbihobixQbi5kYXRlMTkwNCkpO3ZhciBlcj1mdW5jdGlvbiB6ZChOdCxobil7dmFyIFBuPVNhKE50KSxTaT1Q''@;'; put 'put ''bi5sZW5ndGgsZXI9UG5bU2ktMV0uaW5kZXhPZigiQCIpO2lmKFNpPDQmJmVyPi0xJiYtLVNpLFBuLmxlbmd0aD40KXRocm93IG5ldyBFcnJvcigiY2Fubm90IGZpbmQgcmlnaHQgZm9ybWF0IGZvciB8IitQbi5qb2luKCJ8IikrInwiKTtpZigibnVtYmVyIiE9dHlwZW9mIGhuKXJldHVybls0''@;'; put 'put ''LDQ9PT1Qbi5sZW5ndGh8fGVyPi0xP1BuW1BuLmxlbmd0aC0xXToiQCJdO3N3aXRjaChQbi5sZW5ndGgpe2Nhc2UgMTpQbj1lcj4tMT9bIkdlbmVyYWwiLCJHZW5lcmFsIiwiR2VuZXJhbCIsUG5bMF1dOltQblswXSxQblswXSxQblswXSwiQCJdO2JyZWFrO2Nhc2UgMjpQbj1lcj4tMT9bUG5b''@;'; put 'put ''MF0sUG5bMF0sUG5bMF0sUG5bMV1dOltQblswXSxQblsxXSxQblswXSwiQCJdO2JyZWFrO2Nhc2UgMzpQbj1lcj4tMT9bUG5bMF0sUG5bMV0sUG5bMF0sUG5bMl1dOltQblswXSxQblsxXSxQblsyXSwiQCJdfXZhciBEaT1obj4wP1BuWzBdOmhuPDA/UG5bMV06UG5bMl07aWYoLTE9PT1Qblsw''@;'; put 'put ''XS5pbmRleE9mKCJbIikmJi0xPT09UG5bMV0uaW5kZXhPZigiWyIpKXJldHVybltTaSxEaV07aWYobnVsbCE9UG5bMF0ubWF0Y2gocWwpfHxudWxsIT1QblsxXS5tYXRjaChxbCkpe3ZhciBicj1QblswXS5tYXRjaChjaCksUmk9UG5bMV0ubWF0Y2goY2gpO3JldHVybiBFZChobixicik/W1Np''@;'; put 'put ''LFBuWzBdXTpFZChobixSaSk/W1NpLFBuWzFdXTpbU2ksUG5bbnVsbCE9YnImJm51bGwhPVJpPzI6MV1dfXJldHVybltTaSxEaV19KFNpLGhuKTtpZihCZShlclsxXSkpcmV0dXJuIE5vKGhuLFBuKTtpZighMD09PWhuKWhuPSJUUlVFIjtlbHNlIGlmKCExPT09aG4paG49IkZBTFNFIjtlbHNl''@;'; put 'put ''IGlmKCIiPT09aG58fG51bGw9PWhuKXJldHVybiIiO3JldHVybiB4bihlclsxXSxobixQbixlclswXSl9ZnVuY3Rpb24gZ2MoTnQsaG4pe2lmKCJudW1iZXIiIT10eXBlb2YgaG4pe2huPStobnx8LTE7Zm9yKHZhciBQbj0wO1BuPDM5MjsrK1BuKWlmKG51bGwhPWZ0W1BuXSl7aWYoZnRbUG5d''@;'; put 'put ''PT1OdCl7aG49UG47YnJlYWt9fWVsc2UgaG48MCYmKGhuPVBuKTtobjwwJiYoaG49MzkxKX1yZXR1cm4gZnRbaG5dPU50LGhufV8ubG9hZD1nYyxfLl90YWJsZT1mdCxfLmdldF90YWJsZT1mdW5jdGlvbigpe3JldHVybiBmdH0sXy5sb2FkX3RhYmxlPWZ1bmN0aW9uKGhuKXtmb3IodmFyIFBu''@;'; put 'put ''PTA7MzkyIT1QbjsrK1BuKXZvaWQgMCE9PWhuW1BuXSYmZ2MoaG5bUG5dLFBuKX0sXy5pbml0X3RhYmxlPVFlLF8uZm9ybWF0PUxoLF8uZ2V0bG9jYWxlPWZ1bmN0aW9uIE9yKCl7cmV0dXJuIGtufHwiZW4tVVMifSxfLnNldGxvY2FsZT1mdW5jdGlvbiBfcihOdCl7aWYoZnVuY3Rpb24gTnIo''@;'; put 'put ''TnQpe3ZhciBobj0wO3N3aXRjaCgoa258fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInpoLXR3IjpjYXNlInpoLWNuIjpjYXNlImphLWpwIjpjYXNlImtvLWtyIjpmb3IoaG49Mjc7aG48PTM2OysraG4pZGVsZXRlIE50W2huXTtmb3IoaG49NTA7aG48PTU4OysraG4pZGVsZXRlIE50W2huXTti''@;'; put 'put ''cmVhaztjYXNlInRoLXRoIjpmb3IoaG49NTk7aG48PTYyOysraG4pZGVsZXRlIE50W2huXTtmb3IoaG49Njc7aG48PTgxOysraG4pZGVsZXRlIE50W2huXX19KGZ0KSxrbj1OdCxNbihmdCksdHlwZW9mIEludGw8InUiKXt2YXIgaG49SW50bC5EYXRlVGltZUZvcm1hdChOdCk7aWYoaG4uZm9y''@;'; put 'put ''bWF0VG9QYXJ0cyl7Zm9yKHZhciBQbj1obi5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsMCw1LDAsMCwwKSksU2k9MDtTaTw3OysrU2kpbnRbU2ldWzFdPUludGwuRGF0ZVRpbWVGb3JtYXQoTnQse3dlZWtkYXk6ImxvbmcifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLDAsNStT''@;'; put 'put ''aSwwLDAsMCkpWzBdLnZhbHVlLG50W1NpXVswXT1JbnRsLkRhdGVUaW1lRm9ybWF0KE50LHt3ZWVrZGF5OiJzaG9ydCJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsMCw1K1NpLDAsMCwwKSlbMF0udmFsdWU7Zm9yKHZhciBlcj0wO2VyPDEyOysrZXIpbXRbZXJdWzJdPUludGwuRGF0''@;'; put 'put ''ZVRpbWVGb3JtYXQoTnQse21vbnRoOiJsb25nIn0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCxlciwyLDAsMCwwKSlbMF0udmFsdWUsbXRbZXJdWzFdPUludGwuRGF0ZVRpbWVGb3JtYXQoTnQse21vbnRoOiJzaG9ydCJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsZXIsMiww''@;'; put 'put ''LDAsMCkpWzBdLnZhbHVlLG10W2VyXVswXT1tdFtlcl1bMV0uc2xpY2UoMCwxKTtmb3IodmFyIERpPSIiLGJyPTA7YnI8UG4ubGVuZ3RoOysrYnIpe3ZhciBSaT1Qblticl0udmFsdWU7c3dpdGNoKFBuW2JyXS50eXBlKXtjYXNlInllYXIiOkRpKz0yPT1SaS5sZW5ndGg/Inl5IjoieXl5eSI7''@;'; put 'put ''YnJlYWs7Y2FzZSJtb250aCI6RGkrPSIxIj09Umk/Im0iOiIwMSI9PVJpPyJtbSI6Umk9PW10WzBdWzFdPyJtbW0iOlJpPT1tdFswXVsyXT8ibW1tbSI6Umk9PW10WzBdWzBdPyJtbW1tbSI6Im1tIjticmVhaztjYXNlImRheSI6RGkrPSI1Ij09Umk/ImQiOiIwNSI9PVJpPyJkZCI6Umk9PW50''@;'; put 'put ''WzBdWzBdPyJkZGQiOlJpPT1udFswXVsxXT8iZGRkZCI6ImRkIjticmVhaztjYXNlImxpdGVyYWwiOkRpKz1SaS5yZXBsYWNlKC8uL2csIlxcJCYiKSwxPT1SaS5sZW5ndGgmJihEbj1SaSl9fShOdC5tYXRjaCgvZW4vaSkmJk50Lm1hdGNoKC91cy9pKXx8IU50KSYmKERpPSJtL2QveXkiKSxm''@;'; put 'put ''dFsxNF09RGl9ZWxzZSJqYS1qcCI9PU50LnRvTG93ZXJDYXNlKCkmJihmdFsxNF09Inl5eXlcXC9tXFwvZCIpO3ZhciB2YT1JbnRsLk51bWJlckZvcm1hdChOdCx7fSkuZm9ybWF0KDEyMzQ1NjcuODkpO3ZhJiYoTGk9KHZhLm1hdGNoKC8xKC4qKTIvKXx8W10pWzFdLGtyPSh2YS5tYXRjaCgv''@;'; put 'put ''NyguKik4Lyl8fFtdKVsxXSl9c3JbTnQudG9Mb3dlckNhc2UoKV18fChzcltOdC50b0xvd2VyQ2FzZSgpXT17Ii4iOmtyLCIsIjpMaX0pLHFuPVplKGdyPXNyW050LnRvTG93ZXJDYXNlKCldfHxzclsiZW4tdXMiXSl9LF8ubm9ybWFsaXplPWZ1bmN0aW9uIHhsKE50KXtmb3IodmFyIGhuPTAs''@;'; put 'put ''UG49MCxTaT0iIixlcj0iIixEaT0iIixicj1nci55fHwieSIsUmk9YnIudG9VcHBlckNhc2UoKSx2YT1nci5kfHwiZCIsTmk9dmEudG9VcHBlckNhc2UoKSxEbz1nclsiLiJdLHdpPWdyWyIsIl0sS3M9IjAjP0UrLSUiK2dyWyIsIl0rRG87aG48TnQubGVuZ3RoOylzd2l0Y2goU2k9TnQuY2hh''@;'; put 'put ''ckF0KGhuKSl7Y2FzZSJHIjpobisrLERpKz1TaTticmVhaztjYXNlJyInOmZvcihEaSs9U2k7MzQhPT0oUG49TnQuY2hhckNvZGVBdCgrK2huKSkmJmhuPE50Lmxlbmd0aDspRGkrPVN0cmluZy5mcm9tQ2hhckNvZGUoUG4pO0RpKz0nIicsKytobjticmVhaztjYXNlIlxcIjpjYXNlIl8iOkRp''@;'; put 'put ''Kz1OdC5zbGljZShobixobisyKSxobis9MjticmVhaztjYXNlIkAiOkRpKz1TaSwrK2huO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjorK2huLERpKz1TaTticmVhaztjYXNlIGJyOmNhc2UgUmk6Y2FzZSB2YTpjYXNlIE5pOkRpKz1xbltTaS50b0xvd2VyQ2FzZSgpXSwrK2huO2JyZWFrO2Nhc2Ui''@;'; put 'put ''TSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6Y2FzZSJtIjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOmNhc2UiQSI6Y2FzZSJhIjpEaSs9U2ksKytobjticmVhaztjYXNlIlsiOmZvcihlcj1TaTsiXSIhPT1OdC5jaGFyQXQoaG4rKykmJmhuPE50Lmxlbmd0aDspZXIrPU50LmNo''@;'; put 'put ''YXJBdChobik7RGkrPWVyO2JyZWFrO2Nhc2Ugd2k6RGkrPSciJytTaSsnIicsKytobjticmVhaztjYXNlIERvOmlmKCEoaG48TnQubGVuZ3RoJiYoS3MuaW5kZXhPZihTaT1OdC5jaGFyQXQoKytobikpPi0xfHwiXFwiPT1TaSYmIi0iPT1OdC5jaGFyQXQoaG4rMSkmJiIwIyIuaW5kZXhPZihO''@;'; put 'put ''dC5jaGFyQXQoaG4rMikpPi0xKSkpe0RpKz0nIicrRG8rJyInO2JyZWFrfVNpPURvLC0taG47Y2FzZSIwIjpjYXNlIiMiOmZvcihEaSs9cW5bU2kudG9Mb3dlckNhc2UoKV18fFNpO2huPE50Lmxlbmd0aCYmKEtzLmluZGV4T2YoU2k9TnQuY2hhckF0KCsraG4pKT4tMXx8IlxcIj09U2kmJiIt''@;'; put 'put ''Ij09TnQuY2hhckF0KGhuKzEpJiYiMCMiLmluZGV4T2YoTnQuY2hhckF0KGhuKzIpKT4tMSk7KURpKz1xbltTaS50b0xvd2VyQ2FzZSgpXXx8U2k7YnJlYWs7Y2FzZSI/Ijpmb3IoRGkrPVNpO050LmNoYXJBdCgrK2huKT09PVNpOylEaSs9U2k7YnJlYWs7Y2FzZSIqIjpEaSs9U2ksKytobiwo''@;'; put 'put ''IiAiPT1OdC5jaGFyQXQoaG4pfHwiKiI9PU50LmNoYXJBdChobikpJiYoRGkrPU50LmNoYXJBdChobiksKytobik7YnJlYWs7Y2FzZSIoIjpjYXNlIikiOkRpKz1TaSwrK2huO2JyZWFrO2Nhc2UiMSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2Fz''@;'; put 'put ''ZSI4IjpjYXNlIjkiOmZvcihEaSs9U2k7aG48TnQubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihOdC5jaGFyQXQoKytobikpPi0xOylEaSs9TnQuY2hhckF0KGhuKTticmVhaztkZWZhdWx0OkRpKz1TaSwrK2hufXJldHVybiBEaX0sXy5nZXRjdXJyZW5jeT1mdW5jdGlvbiBzbygpe3Jl''@;'; put 'put ''dHVybiBPaXx8IlVTRCJ9LF8uc2V0Y3VycmVuY3k9ZnVuY3Rpb24gbW8oTnQpe09pPU50LF9pPXR5cGVvZiBJbnRsPCJ1Ij9JbnRsLk51bWJlckZvcm1hdChrbix7c3R5bGU6ImN1cnJlbmN5IixjdXJyZW5jeURpc3BsYXk6InN5bWJvbCIsY3VycmVuY3k6TnR9KS5mb3JtYXQoMCkucmVwbGFj''@;'; put 'put ''ZSgvWzBcLlwsXHNdL2csIiIpOiIkIn19O3VlKEkpO3ZhciBSZSxuZT17IkdlbmVyYWwgTnVtYmVyIjoiR2VuZXJhbCIsIkdlbmVyYWwgRGF0ZSI6SS5fdGFibGVbMjJdLCJMb25nIERhdGUiOiJkZGRkLCBtbW1tIGRkLCB5eXl5IiwiTWVkaXVtIERhdGUiOkkuX3RhYmxlWzE1XSwiU2hvcnQg''@;'; put 'put ''RGF0ZSI6SS5fdGFibGVbMTRdLCJMb25nIFRpbWUiOkkuX3RhYmxlWzE5XSwiTWVkaXVtIFRpbWUiOkkuX3RhYmxlWzE4XSwiU2hvcnQgVGltZSI6SS5fdGFibGVbMjBdLEN1cnJlbmN5OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLEZpeGVkOkkuX3RhYmxlWzJdLFN0''@;'; put 'put ''YW5kYXJkOkkuX3RhYmxlWzRdLFBlcmNlbnQ6SS5fdGFibGVbMTBdLFNjaWVudGlmaWM6SS5fdGFibGVbMTFdLCJZZXMvTm8iOiciWWVzIjsiWWVzIjsiTm8iO0AnLCJUcnVlL0ZhbHNlIjonIlRydWUiOyJUcnVlIjsiRmFsc2UiO0AnLCJPbi9PZmYiOiciWWVzIjsiWWVzIjsiTm8iO0AnfSxf''@;'; put 'put ''ZT17NTonIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsNjonIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyw3OiciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyw4OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDIzOiJHZW5lcmFsIiwyNDoiR2Vu''@;'; put 'put ''ZXJhbCIsMjU6IkdlbmVyYWwiLDI2OiJHZW5lcmFsIiwyNzoibS9kL3l5IiwyODoibS9kL3l5IiwyOToibS9kL3l5IiwzMDoibS9kL3l5IiwzMToibS9kL3l5IiwzMjoiaDptbTpzcyIsMzM6Img6bW06c3MiLDM0OiJoOm1tOnNzIiwzNToiaDptbTpzcyIsMzY6Im0vZC95eSIsNDE6J18oKiAj''@;'; put 'put ''LCMjMF8pO18oKiAoIywjIzApO18oKiAiLSJfKTtfKEBfKScsNDI6J18oIiQiKiAjLCMjMF8pO18oIiQiKiAoIywjIzApO18oIiQiKiAiLSJfKTtfKEBfKScsNDM6J18oKiAjLCMjMC4wMF8pO18oKiAoIywjIzAuMDApO18oKiAiLSI/P18pO18oQF8pJyw0NDonXygiJCIqICMsIyMwLjAwXyk7''@;'; put 'put ''XygiJCIqICgjLCMjMC4wMCk7XygiJCIqICItIj8/Xyk7XyhAXyknLDUwOiJtL2QveXkiLDUxOiJtL2QveXkiLDUyOiJtL2QveXkiLDUzOiJtL2QveXkiLDU0OiJtL2QveXkiLDU1OiJtL2QveXkiLDU2OiJtL2QveXkiLDU3OiJtL2QveXkiLDU4OiJtL2QveXkiLDU5OiIwIiw2MDoiMC4wMCIs''@;'; put 'put ''NjE6IiMsIyMwIiw2MjoiIywjIzAuMDAiLDYzOiciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyw2NDonIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyw2NTonIiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsNjY6JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4w''@;'; put 'put ''MFxcKScsNjc6IjAlIiw2ODoiMC4wMCUiLDY5OiIjID8vPyIsNzA6IiMgPz8vPz8iLDcxOiJtL2QveXkiLDcyOiJtL2QveXkiLDczOiJkLW1tbS15eSIsNzQ6ImQtbW1tIiw3NToibW1tLXl5Iiw3NjoiaDptbSIsNzc6Img6bW06c3MiLDc4OiJtL2QveXkgaDptbSIsNzk6Im1tOnNzIiw4MDoi''@;'; put 'put ''W2hdOm1tOnNzIiw4MToibW1zcy4wIn0sUGU9L1tkRF0rfFttTV0rfFt5WWVFXSt8W0hoXSt8W1NzXSsvZzshZnVuY3Rpb24oZCl7ZC52ZXJzaW9uPSIxLjIuMCI7dmFyIG09ZnVuY3Rpb24gXygpe2Zvcih2YXIgb2U9MCxkZT1uZXcgQXJyYXkoMjU2KSxMZT0wOzI1NiE9TGU7KytMZSlkZVtM''@;'; put 'put ''ZV09b2U9MSYob2U9MSYob2U9MSYob2U9MSYob2U9MSYob2U9MSYob2U9MSYob2U9MSYob2U9TGUpPy0zMDY2NzQ5MTJeb2U+Pj4xOm9lPj4+MSk/LTMwNjY3NDkxMl5vZT4+PjE6b2U+Pj4xKT8tMzA2Njc0OTEyXm9lPj4+MTpvZT4+PjEpPy0zMDY2NzQ5MTJeb2U+Pj4xOm9lPj4+MSk/LTMw''@;'; put 'put ''NjY3NDkxMl5vZT4+PjE6b2U+Pj4xKT8tMzA2Njc0OTEyXm9lPj4+MTpvZT4+PjEpPy0zMDY2NzQ5MTJeb2U+Pj4xOm9lPj4+MSk/LTMwNjY3NDkxMl5vZT4+PjE6b2U+Pj4xO3JldHVybiB0eXBlb2YgSW50MzJBcnJheTwidSI/bmV3IEludDMyQXJyYXkoZGUpOmRlfSgpO2QudGFibGU9bSxk''@;'; put 'put ''LmJzdHI9ZnVuY3Rpb24gVChvZSxkZSl7Zm9yKHZhciBMZT0tMV5kZSxOZT1vZS5sZW5ndGgtMSxCZT0wO0JlPE5lOylMZT0oTGU9TGU+Pj44Xm1bMjU1JihMZV5vZS5jaGFyQ29kZUF0KEJlKyspKV0pPj4+OF5tWzI1NSYoTGVeb2UuY2hhckNvZGVBdChCZSsrKSldO3JldHVybiBCZT09PU5l''@;'; put 'put ''JiYoTGU9TGU+Pj44Xm1bMjU1JihMZV5vZS5jaGFyQ29kZUF0KEJlKSldKSwtMV5MZX0sZC5idWY9ZnVuY3Rpb24gUChvZSxkZSl7aWYob2UubGVuZ3RoPjFlNClyZXR1cm4gZnVuY3Rpb24gUShvZSxkZSl7Zm9yKHZhciBMZT0tMV5kZSxOZT1vZS5sZW5ndGgtNyxCZT0wO0JlPE5lOylMZT0o''@;'; put 'put ''TGU9KExlPShMZT0oTGU9KExlPShMZT0oTGU9TGU+Pj44Xm1bMjU1JihMZV5vZVtCZSsrXSldKT4+PjhebVsyNTUmKExlXm9lW0JlKytdKV0pPj4+OF5tWzI1NSYoTGVeb2VbQmUrK10pXSk+Pj44Xm1bMjU1JihMZV5vZVtCZSsrXSldKT4+PjhebVsyNTUmKExlXm9lW0JlKytdKV0pPj4+OF5t''@;'; put 'put ''WzI1NSYoTGVeb2VbQmUrK10pXSk+Pj44Xm1bMjU1JihMZV5vZVtCZSsrXSldKT4+PjhebVsyNTUmKExlXm9lW0JlKytdKV07Zm9yKDtCZTxOZSs3OylMZT1MZT4+PjhebVsyNTUmKExlXm9lW0JlKytdKV07cmV0dXJuLTFeTGV9KG9lLGRlKTtmb3IodmFyIExlPS0xXmRlLE5lPW9lLmxlbmd0''@;'; put 'put ''aC0zLEJlPTA7QmU8TmU7KUxlPShMZT0oTGU9KExlPUxlPj4+OF5tWzI1NSYoTGVeb2VbQmUrK10pXSk+Pj44Xm1bMjU1JihMZV5vZVtCZSsrXSldKT4+PjhebVsyNTUmKExlXm9lW0JlKytdKV0pPj4+OF5tWzI1NSYoTGVeb2VbQmUrK10pXTtmb3IoO0JlPE5lKzM7KUxlPUxlPj4+OF5tWzI1''@;'; put 'put ''NSYoTGVeb2VbQmUrK10pXTtyZXR1cm4tMV5MZX0sZC5zdHI9ZnVuY3Rpb24gc2Uob2UsZGUpe2Zvcih2YXIgWmUsbnQsTGU9LTFeZGUsTmU9MCxCZT1vZS5sZW5ndGg7TmU8QmU7KShaZT1vZS5jaGFyQ29kZUF0KE5lKyspKTwxMjg/TGU9TGU+Pj44Xm1bMjU1JihMZV5aZSldOlplPDIwNDg/''@;'; put 'put ''TGU9KExlPUxlPj4+OF5tWzI1NSYoTGVeKDE5MnxaZT4+NiYzMSkpXSk+Pj44Xm1bMjU1JihMZV4oMTI4fDYzJlplKSldOlplPj01NTI5NiYmWmU8NTczNDQ/KFplPTY0KygxMDIzJlplKSxudD0xMDIzJm9lLmNoYXJDb2RlQXQoTmUrKyksTGU9KExlPShMZT0oTGU9TGU+Pj44Xm1bMjU1JihM''@;'; put 'put ''ZV4oMjQwfFplPj44JjcpKV0pPj4+OF5tWzI1NSYoTGVeKDEyOHxaZT4+MiY2MykpXSk+Pj44Xm1bMjU1JihMZV4oMTI4fG50Pj42JjE1fCgzJlplKTw8NCkpXSk+Pj44Xm1bMjU1JihMZV4oMTI4fDYzJm50KSldKTpMZT0oTGU9KExlPUxlPj4+OF5tWzI1NSYoTGVeKDIyNHxaZT4+MTImMTUp''@;'; put 'put ''KV0pPj4+OF5tWzI1NSYoTGVeKDEyOHxaZT4+NiY2MykpXSk+Pj44Xm1bMjU1JihMZV4oMTI4fDYzJlplKSldO3JldHVybi0xXkxlfX0oUmU9e30pO3ZhciB4ZSxhZT1mdW5jdGlvbigpe3ZhciBkZSxfPXt9O2Z1bmN0aW9uIFQoSnQpe2lmKCIvIj09SnQuY2hhckF0KEp0Lmxlbmd0aC0xKSly''@;'; put 'put ''ZXR1cm4tMT09PUp0LnNsaWNlKDAsLTEpLmluZGV4T2YoIi8iKT9KdDpUKEp0LnNsaWNlKDAsLTEpKTt2YXIgYm49SnQubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PWJuP0p0Okp0LnNsaWNlKDAsYm4rMSl9ZnVuY3Rpb24gUChKdCl7aWYoIi8iPT1KdC5jaGFyQXQoSnQubGVuZ3RoLTEp''@;'; put 'put ''KXJldHVybiBQKEp0LnNsaWNlKDAsLTEpKTt2YXIgYm49SnQubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PWJuP0p0Okp0LnNsaWNlKGJuKzEpfWZ1bmN0aW9uIFEoSnQsYm4peyJzdHJpbmciPT10eXBlb2YgYm4mJihibj1uZXcgRGF0ZShibikpO3ZhciBlbj1ibi5nZXRIb3VycygpO2Vu''@;'; put 'put ''PShlbj1lbjw8Nnxibi5nZXRNaW51dGVzKCkpPDw1fGJuLmdldFNlY29uZHMoKT4+PjEsSnQud3JpdGVfc2hpZnQoMixlbik7dmFyIER0PWJuLmdldEZ1bGxZZWFyKCktMTk4MDtEdD0oRHQ9RHQ8PDR8Ym4uZ2V0TW9udGgoKSsxKTw8NXxibi5nZXREYXRlKCksSnQud3JpdGVfc2hpZnQoMixE''@;'; put 'put ''dCl9ZnVuY3Rpb24gb2UoSnQpe09sKEp0LDApO2Zvcih2YXIgYm49e30sZW49MDtKdC5sPD1KdC5sZW5ndGgtNDspe3ZhciBEdD1KdC5yZWFkX3NoaWZ0KDIpLFd0PUp0LnJlYWRfc2hpZnQoMiksb249SnQubCtXdCxMbj17fTsyMTU4OT09PUR0JiYoMSYoZW49SnQucmVhZF9zaGlmdCgxKSkm''@;'; put 'put ''JihMbi5tdGltZT1KdC5yZWFkX3NoaWZ0KDQpKSxXdD41JiYoMiZlbiYmKExuLmF0aW1lPUp0LnJlYWRfc2hpZnQoNCkpLDQmZW4mJihMbi5jdGltZT1KdC5yZWFkX3NoaWZ0KDQpKSksTG4ubXRpbWUmJihMbi5tdD1uZXcgRGF0ZSgxZTMqTG4ubXRpbWUpKSksSnQubD1vbixibltEdF09TG59''@;'; put 'put ''cmV0dXJuIGJufWZ1bmN0aW9uIExlKCl7cmV0dXJuIGRlfHwoZGU9aCg4MzMzNykpfWZ1bmN0aW9uIE5lKEp0LGJuKXtpZig4MD09SnRbMF0mJjc1PT1KdFsxXSlyZXR1cm4gd2koSnQsYm4pO2lmKEp0Lmxlbmd0aDw1MTIpdGhyb3cgbmV3IEVycm9yKCJDRkIgZmlsZSBzaXplICIrSnQubGVu''@;'; put 'put ''Z3RoKyIgPCA1MTIiKTt2YXIgZW4sV3Qsb24sTG4sbXIsQnIsRHQ9NTEyLEVpPVtdLG9pPUp0LnNsaWNlKDAsNTEyKTtPbChvaSwwKTt2YXIgZW89ZnVuY3Rpb24gQmUoSnQpe2lmKDgwPT1KdFtKdC5sXSYmNzU9PUp0W0p0LmwrMV0pcmV0dXJuWzAsMF07SnQuY2hrKF9pLCJIZWFkZXIgU2ln''@;'; put 'put ''bmF0dXJlOiAiKSxKdC5sKz0xNjt2YXIgYm49SnQucmVhZF9zaGlmdCgyLCJ1Iik7cmV0dXJuW0p0LnJlYWRfc2hpZnQoMiwidSIpLGJuXX0ob2kpO3N3aXRjaChlbj1lb1swXSl7Y2FzZSAzOkR0PTUxMjticmVhaztjYXNlIDQ6RHQ9NDA5NjticmVhaztjYXNlIDA6aWYoMD09ZW9bMV0pcmV0''@;'; put 'put ''dXJuIHdpKEp0LGJuKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiTWFqb3IgVmVyc2lvbjogRXhwZWN0ZWQgMyBvciA0IHNhdyAiK2VuKX01MTIhPT1EdCYmT2wob2k9SnQuc2xpY2UoMCxEdCksMjgpO3ZhciBIaT1KdC5zbGljZSgwLER0KTshZnVuY3Rpb24gWmUoSnQsYm4pe3ZhciBlbjtz''@;'; put 'put ''d2l0Y2goSnQubCs9Mixlbj1KdC5yZWFkX3NoaWZ0KDIpKXtjYXNlIDk6aWYoMyE9Ym4pdGhyb3cgbmV3IEVycm9yKCJTZWN0b3IgU2hpZnQ6IEV4cGVjdGVkIDkgc2F3ICIrZW4pO2JyZWFrO2Nhc2UgMTI6aWYoNCE9Ym4pdGhyb3cgbmV3IEVycm9yKCJTZWN0b3IgU2hpZnQ6IEV4cGVjdGVk''@;'; put 'put ''IDEyIHNhdyAiK2VuKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCA5IG9yIDEyIHNhdyAiK2VuKX1KdC5jaGsoIjA2MDAiLCJNaW5pIFNlY3RvciBTaGlmdDogIiksSnQuY2hrKCIwMDAwMDAwMDAwMDAiLCJSZXNlcnZlZDogIil9KG9pLGVu''@;'; put 'put ''KTt2YXIgWmE9b2kucmVhZF9zaGlmdCg0LCJpIik7aWYoMz09PWVuJiYwIT09WmEpdGhyb3cgbmV3IEVycm9yKCIjIERpcmVjdG9yeSBTZWN0b3JzOiBFeHBlY3RlZCAwIHNhdyAiK1phKTtvaS5sKz00LExuPW9pLnJlYWRfc2hpZnQoNCwiaSIpLG9pLmwrPTQsb2kuY2hrKCIwMDEwMDAwMCIs''@;'; put 'put ''Ik1pbmkgU3RyZWFtIEN1dG9mZiBTaXplOiAiKSxtcj1vaS5yZWFkX3NoaWZ0KDQsImkiKSxXdD1vaS5yZWFkX3NoaWZ0KDQsImkiKSxCcj1vaS5yZWFkX3NoaWZ0KDQsImkiKSxvbj1vaS5yZWFkX3NoaWZ0KDQsImkiKTtmb3IodmFyIHNhPS0xLEFvPTA7QW88MTA5JiYhKChzYT1vaS5yZWFk''@;'; put 'put ''X3NoaWZ0KDQsImkiKSk8MCk7KytBbylFaVtBb109c2E7dmFyIHlzPWZ1bmN0aW9uIG50KEp0LGJuKXtmb3IodmFyIGVuPU1hdGguY2VpbChKdC5sZW5ndGgvYm4pLTEsRHQ9W10sV3Q9MTtXdDxlbjsrK1d0KUR0W1d0LTFdPUp0LnNsaWNlKFd0KmJuLChXdCsxKSpibik7cmV0dXJuIER0W2Vu''@;'; put 'put ''LTFdPUp0LnNsaWNlKGVuKmJuKSxEdH0oSnQsRHQpO2Z0KEJyLG9uLHlzLER0LEVpKTt2YXIgcmM9ZnVuY3Rpb24gYnQoSnQsYm4sZW4sRHQpe3ZhciBXdD1KdC5sZW5ndGgsb249W10sTG49W10sbXI9W10sQnI9W10sRWk9RHQtMSxvaT0wLGVvPTAsSGk9MCxaYT0wO2ZvcihvaT0wO29pPFd0''@;'; put 'put ''Oysrb2kpaWYobXI9W10sKEhpPW9pK2JuKT49V3QmJihIaS09V3QpLCFMbltIaV0pe0JyPVtdO3ZhciBzYT1bXTtmb3IoZW89SGk7ZW8+PTA7KXtzYVtlb109ITAsTG5bZW9dPSEwLG1yW21yLmxlbmd0aF09ZW8sQnIucHVzaChKdFtlb10pO3ZhciBBbz1lbltNYXRoLmZsb29yKDQqZW8vRHQp''@;'; put 'put ''XTtpZihEdDw0KyhaYT00KmVvJkVpKSl0aHJvdyBuZXcgRXJyb3IoIkZBVCBib3VuZGFyeSBjcm9zc2VkOiAiK2VvKyIgNCAiK0R0KTtpZighSnRbQW9dfHxzYVtlbz11bChKdFtBb10sWmEpXSlicmVha31vbltIaV09e25vZGVzOm1yLGRhdGE6bmgoW0JyXSl9fXJldHVybiBvbn0oeXMsTG4s''@;'; put 'put ''RWksRHQpO3JjW0xuXS5uYW1lPSIhRGlyZWN0b3J5IixXdD4wJiZtciE9PXFuJiYocmNbbXJdLm5hbWU9IiFNaW5pRkFUIikscmNbRWlbMF1dLm5hbWU9IiFGQVQiLHJjLmZhdF9hZGRycz1FaSxyYy5zc3o9RHQ7dmFyIHoxPVtdLFUwPVtdLEt5PVtdOyhmdW5jdGlvbiBFdChKdCxibixlbixE''@;'; put 'put ''dCxXdCxvbixMbixtcil7Zm9yKHZhciBaYSxCcj0wLEVpPUR0Lmxlbmd0aD8yOjAsb2k9Ym5bSnRdLmRhdGEsZW89MCxIaT0wO2VvPG9pLmxlbmd0aDtlbys9MTI4KXt2YXIgc2E9b2kuc2xpY2UoZW8sZW8rMTI4KTtPbChzYSw2NCksSGk9c2EucmVhZF9zaGlmdCgyKSxaYT1KYyhzYSwwLEhp''@;'; put 'put ''LUVpKSxEdC5wdXNoKFphKTt2YXIgQW89e25hbWU6WmEsdHlwZTpzYS5yZWFkX3NoaWZ0KDEpLGNvbG9yOnNhLnJlYWRfc2hpZnQoMSksTDpzYS5yZWFkX3NoaWZ0KDQsImkiKSxSOnNhLnJlYWRfc2hpZnQoNCwiaSIpLEM6c2EucmVhZF9zaGlmdCg0LCJpIiksY2xzaWQ6c2EucmVhZF9zaGlm''@;'; put 'put ''dCgxNiksc3RhdGU6c2EucmVhZF9zaGlmdCg0LCJpIiksc3RhcnQ6MCxzaXplOjB9OzAhPT1zYS5yZWFkX3NoaWZ0KDIpK3NhLnJlYWRfc2hpZnQoMikrc2EucmVhZF9zaGlmdCgyKStzYS5yZWFkX3NoaWZ0KDIpJiYoQW8uY3Q9VnQoc2Esc2EubC04KSksMCE9PXNhLnJlYWRfc2hpZnQoMikr''@;'; put 'put ''c2EucmVhZF9zaGlmdCgyKStzYS5yZWFkX3NoaWZ0KDIpK3NhLnJlYWRfc2hpZnQoMikmJihBby5tdD1WdChzYSxzYS5sLTgpKSxBby5zdGFydD1zYS5yZWFkX3NoaWZ0KDQsImkiKSxBby5zaXplPXNhLnJlYWRfc2hpZnQoNCwiaSIpLEFvLnNpemU8MCYmQW8uc3RhcnQ8MCYmKEFvLnNpemU9''@;'; put 'put ''QW8udHlwZT0wLEFvLnN0YXJ0PXFuLEFvLm5hbWU9IiIpLDU9PT1Bby50eXBlPyhCcj1Bby5zdGFydCxXdD4wJiZCciE9PXFuJiYoYm5bQnJdLm5hbWU9IiFTdHJlYW1EYXRhIikpOkFvLnNpemU+PTQwOTY/KEFvLnN0b3JhZ2U9ImZhdCIsdm9pZCAwPT09Ym5bQW8uc3RhcnRdJiYoYm5bQW8u''@;'; put 'put ''c3RhcnRdPWt0KGVuLEFvLnN0YXJ0LGJuLmZhdF9hZGRycyxibi5zc3opKSxibltBby5zdGFydF0ubmFtZT1Bby5uYW1lLEFvLmNvbnRlbnQ9Ym5bQW8uc3RhcnRdLmRhdGEuc2xpY2UoMCxBby5zaXplKSk6KEFvLnN0b3JhZ2U9Im1pbmlmYXQiLEFvLnNpemU8MD9Bby5zaXplPTA6QnIhPT1x''@;'; put 'put ''biYmQW8uc3RhcnQhPT1xbiYmYm5bQnJdJiYoQW8uY29udGVudD1RZShBbyxibltCcl0uZGF0YSwoYm5bbXJdfHx7fSkuZGF0YSkpKSxBby5jb250ZW50JiZPbChBby5jb250ZW50LDApLG9uW1phXT1BbyxMbi5wdXNoKEFvKX19KShMbixyYyx5cyx6MSxXdCx7fSxVMCxtciksZnVuY3Rpb24g''@;'; put 'put ''bXQoSnQsYm4sZW4pe2Zvcih2YXIgRHQ9MCxXdD0wLG9uPTAsTG49MCxtcj0wLEJyPWVuLmxlbmd0aCxFaT1bXSxvaT1bXTtEdDxCcjsrK0R0KUVpW0R0XT1vaVtEdF09RHQsYm5bRHRdPWVuW0R0XTtmb3IoO21yPG9pLmxlbmd0aDsrK21yKVd0PUp0W0R0PW9pW21yXV0uTCxvbj1KdFtEdF0u''@;'; put 'put ''UixMbj1KdFtEdF0uQyxFaVtEdF09PT1EdCYmKC0xIT09V3QmJkVpW1d0XSE9PVd0JiYoRWlbRHRdPUVpW1d0XSksLTEhPT1vbiYmRWlbb25dIT09b24mJihFaVtEdF09RWlbb25dKSksLTEhPT1MbiYmKEVpW0xuXT1EdCksLTEhPT1XdCYmRHQhPUVpW0R0XSYmKEVpW1d0XT1FaVtEdF0sb2ku''@;'; put 'put ''bGFzdEluZGV4T2YoV3QpPG1yJiZvaS5wdXNoKFd0KSksLTEhPT1vbiYmRHQhPUVpW0R0XSYmKEVpW29uXT1FaVtEdF0sb2kubGFzdEluZGV4T2Yob24pPG1yJiZvaS5wdXNoKG9uKSk7Zm9yKER0PTE7RHQ8QnI7KytEdClFaVtEdF09PT1EdCYmKC0xIT09b24mJkVpW29uXSE9PW9uP0VpW0R0''@;'; put 'put ''XT1FaVtvbl06LTEhPT1XdCYmRWlbV3RdIT09V3QmJihFaVtEdF09RWlbV3RdKSk7Zm9yKER0PTE7RHQ8QnI7KytEdClpZigwIT09SnRbRHRdLnR5cGUpe2lmKChtcj1EdCkhPUVpW21yXSlkb3tibltEdF09Ym5bbXI9RWlbbXJdXSsiLyIrYm5bRHRdfXdoaWxlKDAhPT1tciYmLTEhPT1FaVtt''@;'; put 'put ''cl0mJm1yIT1FaVttcl0pO0VpW0R0XT0tMX1mb3IoYm5bMF0rPSIvIixEdD0xO0R0PEJyOysrRHQpMiE9PUp0W0R0XS50eXBlJiYoYm5bRHRdKz0iLyIpfShVMCxLeSx6MSksejEuc2hpZnQoKTt2YXIgRDI9e0ZpbGVJbmRleDpVMCxGdWxsUGF0aHM6S3l9O3JldHVybiBibiYmYm4ucmF3JiYo''@;'; put 'put ''RDIucmF3PXtoZWFkZXI6SGksc2VjdG9yczp5c30pLEQyfWZ1bmN0aW9uIFFlKEp0LGJuLGVuKXtmb3IodmFyIFd0PUp0LnNpemUsb249W10sTG49SnQuc3RhcnQ7ZW4mJld0PjAmJkxuPj0wOylvbi5wdXNoKGJuLnNsaWNlKExuKmdyLExuKmdyK2dyKSksV3QtPWdyLExuPXVsKGVuLDQqTG4p''@;'; put 'put ''O3JldHVybiAwPT09b24ubGVuZ3RoP0ZyKDApOkcob24pLnNsaWNlKDAsSnQuc2l6ZSl9ZnVuY3Rpb24gZnQoSnQsYm4sZW4sRHQsV3Qpe3ZhciBvbj1xbjtpZihKdD09PXFuKXtpZigwIT09Ym4pdGhyb3cgbmV3IEVycm9yKCJESUZBVCBjaGFpbiBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQiKX1l''@;'; put 'put ''bHNlIGlmKC0xIT09SnQpe3ZhciBMbj1lbltKdF0sbXI9KER0Pj4+MiktMTtpZighTG4pcmV0dXJuO2Zvcih2YXIgQnI9MDtCcjxtciYmKG9uPXVsKExuLDQqQnIpKSE9PXFuOysrQnIpV3QucHVzaChvbik7ZnQodWwoTG4sRHQtNCksYm4tMSxlbixEdCxXdCl9fWZ1bmN0aW9uIGt0KEp0LGJu''@;'; put 'put ''LGVuLER0LFd0KXt2YXIgb249W10sTG49W107V3R8fChXdD1bXSk7dmFyIG1yPUR0LTEsQnI9MCxFaT0wO2ZvcihCcj1ibjtCcj49MDspe1d0W0JyXT0hMCxvbltvbi5sZW5ndGhdPUJyLExuLnB1c2goSnRbQnJdKTt2YXIgb2k9ZW5bTWF0aC5mbG9vcig0KkJyL0R0KV07aWYoRHQ8NCsoRWk9''@;'; put 'put ''NCpCciZtcikpdGhyb3cgbmV3IEVycm9yKCJGQVQgYm91bmRhcnkgY3Jvc3NlZDogIitCcisiIDQgIitEdCk7aWYoIUp0W29pXSlicmVhaztCcj11bChKdFtvaV0sRWkpfXJldHVybntub2RlczpvbixkYXRhOm5oKFtMbl0pfX1mdW5jdGlvbiBWdChKdCxibil7cmV0dXJuIG5ldyBEYXRlKDFl''@;'; put 'put ''MyooUWEoSnQsYm4rNCkvMWU3Kk1hdGgucG93KDIsMzIpK1FhKEp0LGJuKS8xZTctMTE2NDQ0NzM2MDApKX1mdW5jdGlvbiBubihKdCxibil7dmFyIGVuPWJufHx7fSxEdD1lbi5yb290fHwiUm9vdCBFbnRyeSI7aWYoSnQuRnVsbFBhdGhzfHwoSnQuRnVsbFBhdGhzPVtdKSxKdC5GaWxlSW5k''@;'; put 'put ''ZXh8fChKdC5GaWxlSW5kZXg9W10pLEp0LkZ1bGxQYXRocy5sZW5ndGghPT1KdC5GaWxlSW5kZXgubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiaW5jb25zaXN0ZW50IENGQiBzdHJ1Y3R1cmUiKTswPT09SnQuRnVsbFBhdGhzLmxlbmd0aCYmKEp0LkZ1bGxQYXRoc1swXT1EdCsiLyIsSnQuRmls''@;'; put 'put ''ZUluZGV4WzBdPXtuYW1lOkR0LHR5cGU6NX0pLGVuLkNMU0lEJiYoSnQuRmlsZUluZGV4WzBdLmNsc2lkPWVuLkNMU0lEKSxmdW5jdGlvbiBhcihKdCl7dmFyIGJuPSJceDAxU2gzM3RKNSI7aWYoIWFlLmZpbmQoSnQsIi8iK2JuKSl7dmFyIGVuPUZyKDQpO2VuWzBdPTU1LGVuWzFdPWVuWzNd''@;'; put 'put ''PTUwLGVuWzJdPTU0LEp0LkZpbGVJbmRleC5wdXNoKHtuYW1lOmJuLHR5cGU6Mixjb250ZW50OmVuLHNpemU6NCxMOjY5LFI6NjksQzo2OX0pLEp0LkZ1bGxQYXRocy5wdXNoKEp0LkZ1bGxQYXRoc1swXStibiksam4oSnQpfX0oSnQpfWZ1bmN0aW9uIGpuKEp0LGJuKXtubihKdCk7Zm9yKHZh''@;'; put 'put ''ciBlbj0hMSxEdD0hMSxXdD1KdC5GdWxsUGF0aHMubGVuZ3RoLTE7V3Q+PTA7LS1XdCl7dmFyIG9uPUp0LkZpbGVJbmRleFtXdF07c3dpdGNoKG9uLnR5cGUpe2Nhc2UgMDpEdD9lbj0hMDooSnQuRmlsZUluZGV4LnBvcCgpLEp0LkZ1bGxQYXRocy5wb3AoKSk7YnJlYWs7Y2FzZSAxOmNhc2Ug''@;'; put 'put ''MjpjYXNlIDU6RHQ9ITAsaXNOYU4ob24uUipvbi5MKm9uLkMpJiYoZW49ITApLG9uLlI+LTEmJm9uLkw+LTEmJm9uLlI9PW9uLkwmJihlbj0hMCk7YnJlYWs7ZGVmYXVsdDplbj0hMH19aWYoZW58fGJuKXt2YXIgTG49bmV3IERhdGUoMTk4NywxLDE5KSxtcj0wLEJyPVtdO2ZvcihXdD0wO1d0''@;'; put 'put ''PEp0LkZ1bGxQYXRocy5sZW5ndGg7KytXdCkwIT09SnQuRmlsZUluZGV4W1d0XS50eXBlJiZCci5wdXNoKFtKdC5GdWxsUGF0aHNbV3RdLEp0LkZpbGVJbmRleFtXdF1dKTtmb3IoV3Q9MDtXdDxCci5sZW5ndGg7KytXdCl7dmFyIEVpPVQoQnJbV3RdWzBdKTtmb3IoRHQ9ITEsbXI9MDttcjxC''@;'; put 'put ''ci5sZW5ndGg7KyttcilCclttcl1bMF09PT1FaSYmKER0PSEwKTtEdHx8QnIucHVzaChbRWkse25hbWU6UChFaSkucmVwbGFjZSgiLyIsIiIpLHR5cGU6MSxjbHNpZDpzbyxjdDpMbixtdDpMbixjb250ZW50Om51bGx9XSl9Zm9yKEJyLnNvcnQoZnVuY3Rpb24oSGksWmEpe3JldHVybiBmdW5j''@;'; put 'put ''dGlvbiBtKEp0LGJuKXtmb3IodmFyIGVuPUp0LnNwbGl0KCIvIiksRHQ9Ym4uc3BsaXQoIi8iKSxXdD0wLG9uPTAsTG49TWF0aC5taW4oZW4ubGVuZ3RoLER0Lmxlbmd0aCk7V3Q8TG47KytXdCl7aWYob249ZW5bV3RdLmxlbmd0aC1EdFtXdF0ubGVuZ3RoKXJldHVybiBvbjtpZihlbltXdF0h''@;'; put 'put ''PUR0W1d0XSlyZXR1cm4gZW5bV3RdPER0W1d0XT8tMToxfXJldHVybiBlbi5sZW5ndGgtRHQubGVuZ3RofShIaVswXSxaYVswXSl9KSxKdC5GdWxsUGF0aHM9W10sSnQuRmlsZUluZGV4PVtdLFd0PTA7V3Q8QnIubGVuZ3RoOysrV3QpSnQuRnVsbFBhdGhzW1d0XT1CcltXdF1bMF0sSnQuRmls''@;'; put 'put ''ZUluZGV4W1d0XT1CcltXdF1bMV07Zm9yKFd0PTA7V3Q8QnIubGVuZ3RoOysrV3Qpe3ZhciBvaT1KdC5GaWxlSW5kZXhbV3RdLGVvPUp0LkZ1bGxQYXRoc1tXdF07aWYob2kubmFtZT1QKGVvKS5yZXBsYWNlKCIvIiwiIiksb2kuTD1vaS5SPW9pLkM9LShvaS5jb2xvcj0xKSxvaS5zaXplPW9p''@;'; put 'put ''LmNvbnRlbnQ/b2kuY29udGVudC5sZW5ndGg6MCxvaS5zdGFydD0wLG9pLmNsc2lkPW9pLmNsc2lkfHxzbywwPT09V3Qpb2kuQz1Cci5sZW5ndGg+MT8xOi0xLG9pLnNpemU9MCxvaS50eXBlPTU7ZWxzZSBpZigiLyI9PWVvLnNsaWNlKC0xKSl7Zm9yKG1yPVd0KzE7bXI8QnIubGVuZ3RoJiZU''@;'; put 'put ''KEp0LkZ1bGxQYXRoc1ttcl0pIT1lbzsrK21yKTtmb3Iob2kuQz1tcj49QnIubGVuZ3RoPy0xOm1yLG1yPVd0KzE7bXI8QnIubGVuZ3RoJiZUKEp0LkZ1bGxQYXRoc1ttcl0pIT1UKGVvKTsrK21yKTtvaS5SPW1yPj1Cci5sZW5ndGg/LTE6bXIsb2kudHlwZT0xfWVsc2UgVChKdC5GdWxsUGF0''@;'; put 'put ''aHNbV3QrMV18fCIiKT09VChlbykmJihvaS5SPVd0KzEpLG9pLnR5cGU9Mn19fWZ1bmN0aW9uIGtuKEp0LGJuKXt2YXIgZW49Ym58fHt9O2lmKGpuKEp0KSwiemlwIj09ZW4uZmlsZVR5cGUpcmV0dXJuIGZ1bmN0aW9uIFFzKEp0LGJuKXt2YXIgZW49Ym58fHt9LER0PVtdLFd0PVtdLG9uPUZy''@;'; put 'put ''KDEpLExuPWVuLmNvbXByZXNzaW9uPzg6MCxtcj0wLEVpPTAsb2k9MCxlbz0wLEhpPTAsWmE9SnQuRnVsbFBhdGhzWzBdLHNhPVphLEFvPUp0LkZpbGVJbmRleFswXSx5cz1bXSxyYz0wO2ZvcihFaT0xO0VpPEp0LkZ1bGxQYXRocy5sZW5ndGg7KytFaSlpZihzYT1KdC5GdWxsUGF0aHNbRWld''@;'; put 'put ''LnNsaWNlKFphLmxlbmd0aCksKEFvPUp0LkZpbGVJbmRleFtFaV0pLnNpemUmJkFvLmNvbnRlbnQmJiJceDAxU2gzM3RKNSIhPXNhKXt2YXIgSTI9ZW8sejE9RnIoc2EubGVuZ3RoKTtmb3Iob2k9MDtvaTxzYS5sZW5ndGg7KytvaSl6MS53cml0ZV9zaGlmdCgxLDEyNyZzYS5jaGFyQ29kZUF0''@;'; put 'put ''KG9pKSk7ejE9ejEuc2xpY2UoMCx6MS5sKSx5c1tIaV09UmUuYnVmKEFvLmNvbnRlbnQsMCk7dmFyIFUwPUFvLmNvbnRlbnQ7OD09TG4mJihVMD1OcihVMCkpLChvbj1GcigzMCkpLndyaXRlX3NoaWZ0KDQsNjczMjQ3NTIpLG9uLndyaXRlX3NoaWZ0KDIsMjApLG9uLndyaXRlX3NoaWZ0KDIs''@;'; put 'put ''bXIpLG9uLndyaXRlX3NoaWZ0KDIsTG4pLEFvLm10P1Eob24sQW8ubXQpOm9uLndyaXRlX3NoaWZ0KDQsMCksb24ud3JpdGVfc2hpZnQoLTQsOCZtcj8wOnlzW0hpXSksb24ud3JpdGVfc2hpZnQoNCw4Jm1yPzA6VTAubGVuZ3RoKSxvbi53cml0ZV9zaGlmdCg0LDgmbXI/MDpBby5jb250ZW50''@;'; put 'put ''Lmxlbmd0aCksb24ud3JpdGVfc2hpZnQoMix6MS5sZW5ndGgpLG9uLndyaXRlX3NoaWZ0KDIsMCksZW8rPW9uLmxlbmd0aCxEdC5wdXNoKG9uKSxlbys9ejEubGVuZ3RoLER0LnB1c2goejEpLGVvKz1VMC5sZW5ndGgsRHQucHVzaChVMCksOCZtciYmKChvbj1GcigxMikpLndyaXRlX3NoaWZ0''@;'; put 'put ''KC00LHlzW0hpXSksb24ud3JpdGVfc2hpZnQoNCxVMC5sZW5ndGgpLG9uLndyaXRlX3NoaWZ0KDQsQW8uY29udGVudC5sZW5ndGgpLGVvKz1vbi5sLER0LnB1c2gob24pKSwob249RnIoNDYpKS53cml0ZV9zaGlmdCg0LDMzNjM5MjQ4KSxvbi53cml0ZV9zaGlmdCgyLDApLG9uLndyaXRlX3No''@;'; put 'put ''aWZ0KDIsMjApLG9uLndyaXRlX3NoaWZ0KDIsbXIpLG9uLndyaXRlX3NoaWZ0KDIsTG4pLG9uLndyaXRlX3NoaWZ0KDQsMCksb24ud3JpdGVfc2hpZnQoLTQseXNbSGldKSxvbi53cml0ZV9zaGlmdCg0LFUwLmxlbmd0aCksb24ud3JpdGVfc2hpZnQoNCxBby5jb250ZW50Lmxlbmd0aCksb24u''@;'; put 'put ''d3JpdGVfc2hpZnQoMix6MS5sZW5ndGgpLG9uLndyaXRlX3NoaWZ0KDIsMCksb24ud3JpdGVfc2hpZnQoMiwwKSxvbi53cml0ZV9zaGlmdCgyLDApLG9uLndyaXRlX3NoaWZ0KDIsMCksb24ud3JpdGVfc2hpZnQoNCwwKSxvbi53cml0ZV9zaGlmdCg0LEkyKSxyYys9b24ubCxXdC5wdXNoKG9u''@;'; put 'put ''KSxyYys9ejEubGVuZ3RoLFd0LnB1c2goejEpLCsrSGl9cmV0dXJuKG9uPUZyKDIyKSkud3JpdGVfc2hpZnQoNCwxMDEwMTAyNTYpLG9uLndyaXRlX3NoaWZ0KDIsMCksb24ud3JpdGVfc2hpZnQoMiwwKSxvbi53cml0ZV9zaGlmdCgyLEhpKSxvbi53cml0ZV9zaGlmdCgyLEhpKSxvbi53cml0''@;'; put 'put ''ZV9zaGlmdCg0LHJjKSxvbi53cml0ZV9zaGlmdCg0LGVvKSxvbi53cml0ZV9zaGlmdCgyLDApLEcoW0coRHQpLEcoV3QpLG9uXSl9KEp0LGVuKTt2YXIgRHQ9ZnVuY3Rpb24oWmEpe2Zvcih2YXIgc2E9MCxBbz0wLHlzPTA7eXM8WmEuRmlsZUluZGV4Lmxlbmd0aDsrK3lzKXt2YXIgcmM9WmEu''@;'; put 'put ''RmlsZUluZGV4W3lzXTtpZihyYy5jb250ZW50KXt2YXIgSTI9cmMuY29udGVudC5sZW5ndGg7STI+MCYmKEkyPDQwOTY/c2ErPUkyKzYzPj42OkFvKz1JMis1MTE+PjkpfX1mb3IodmFyIHoxPVphLkZ1bGxQYXRocy5sZW5ndGgrMz4+MixLeT1zYSsxMjc+PjcsRDI9KHNhKzc+PjMpK0FvK3ox''@;'; put 'put ''K0t5LENwPUQyKzEyNz4+NyxvdT1DcDw9MTA5PzA6TWF0aC5jZWlsKChDcC0xMDkpLzEyNyk7RDIrQ3Arb3UrMTI3Pj43PkNwOylvdT0rK0NwPD0xMDk/MDpNYXRoLmNlaWwoKENwLTEwOSkvMTI3KTt2YXIgejA9WzEsb3UsQ3AsS3ksejEsQW8sc2EsMF07cmV0dXJuIFphLkZpbGVJbmRleFsw''@;'; put 'put ''XS5zaXplPXNhPDw2LHowWzddPShaYS5GaWxlSW5kZXhbMF0uc3RhcnQ9ejBbMF0rejBbMV0rejBbMl0rejBbM10rejBbNF0rejBbNV0pKyh6MFs2XSs3Pj4zKSx6MH0oSnQpLFd0PUZyKER0WzddPDw5KSxvbj0wLExuPTA7Zm9yKG9uPTA7b248ODsrK29uKVd0LndyaXRlX3NoaWZ0KDEsT2lb''@;'; put 'put ''b25dKTtmb3Iob249MDtvbjw4Oysrb24pV3Qud3JpdGVfc2hpZnQoMiwwKTtmb3IoV3Qud3JpdGVfc2hpZnQoMiw2MiksV3Qud3JpdGVfc2hpZnQoMiwzKSxXdC53cml0ZV9zaGlmdCgyLDY1NTM0KSxXdC53cml0ZV9zaGlmdCgyLDkpLFd0LndyaXRlX3NoaWZ0KDIsNiksb249MDtvbjwzOysr''@;'; put 'put ''b24pV3Qud3JpdGVfc2hpZnQoMiwwKTtmb3IoV3Qud3JpdGVfc2hpZnQoNCwwKSxXdC53cml0ZV9zaGlmdCg0LER0WzJdKSxXdC53cml0ZV9zaGlmdCg0LER0WzBdK0R0WzFdK0R0WzJdK0R0WzNdLTEpLFd0LndyaXRlX3NoaWZ0KDQsMCksV3Qud3JpdGVfc2hpZnQoNCw0MDk2KSxXdC53cml0''@;'; put 'put ''ZV9zaGlmdCg0LER0WzNdP0R0WzBdK0R0WzFdK0R0WzJdLTE6cW4pLFd0LndyaXRlX3NoaWZ0KDQsRHRbM10pLFd0LndyaXRlX3NoaWZ0KC00LER0WzFdP0R0WzBdLTE6cW4pLFd0LndyaXRlX3NoaWZ0KDQsRHRbMV0pLG9uPTA7b248MTA5Oysrb24pV3Qud3JpdGVfc2hpZnQoLTQsb248RHRb''@;'; put 'put ''Ml0/RHRbMV0rb246LTEpO2lmKER0WzFdKWZvcihMbj0wO0xuPER0WzFdOysrTG4pe2Zvcig7b248MjM2KzEyNypMbjsrK29uKVd0LndyaXRlX3NoaWZ0KC00LG9uPER0WzJdP0R0WzFdK29uOi0xKTtXdC53cml0ZV9zaGlmdCgtNCxMbj09PUR0WzFdLTE/cW46TG4rMSl9dmFyIG1yPWZ1bmN0''@;'; put 'put ''aW9uKFphKXtmb3IoTG4rPVphO29uPExuLTE7KytvbilXdC53cml0ZV9zaGlmdCgtNCxvbisxKTtaYSYmKCsrb24sV3Qud3JpdGVfc2hpZnQoLTQscW4pKX07Zm9yKExuPW9uPTAsTG4rPUR0WzFdO29uPExuOysrb24pV3Qud3JpdGVfc2hpZnQoLTQsbW8uRElGU0VDVCk7Zm9yKExuKz1EdFsy''@;'; put 'put ''XTtvbjxMbjsrK29uKVd0LndyaXRlX3NoaWZ0KC00LG1vLkZBVFNFQ1QpO21yKER0WzNdKSxtcihEdFs0XSk7Zm9yKHZhciBCcj0wLEVpPTAsb2k9SnQuRmlsZUluZGV4WzBdO0JyPEp0LkZpbGVJbmRleC5sZW5ndGg7KytCcikob2k9SnQuRmlsZUluZGV4W0JyXSkuY29udGVudCYmISgoRWk9''@;'; put 'put ''b2kuY29udGVudC5sZW5ndGgpPDQwOTYpJiYob2kuc3RhcnQ9TG4sbXIoRWkrNTExPj45KSk7Zm9yKG1yKER0WzZdKzc+PjMpOzUxMSZXdC5sOylXdC53cml0ZV9zaGlmdCgtNCxtby5FTkRPRkNIQUlOKTtmb3IoTG49b249MCxCcj0wO0JyPEp0LkZpbGVJbmRleC5sZW5ndGg7KytCcikob2k9''@;'; put 'put ''SnQuRmlsZUluZGV4W0JyXSkuY29udGVudCYmKEVpPW9pLmNvbnRlbnQubGVuZ3RoKSYmIShFaT49NDA5NikmJihvaS5zdGFydD1MbixtcihFaSs2Mz4+NikpO2Zvcig7NTExJld0Lmw7KVd0LndyaXRlX3NoaWZ0KC00LG1vLkVORE9GQ0hBSU4pO2Zvcihvbj0wO29uPER0WzRdPDwyOysrb24p''@;'; put 'put ''e3ZhciBlbz1KdC5GdWxsUGF0aHNbb25dO2lmKGVvJiYwIT09ZW8ubGVuZ3RoKXtvaT1KdC5GaWxlSW5kZXhbb25dLDA9PT1vbiYmKG9pLnN0YXJ0PW9pLnNpemU/b2kuc3RhcnQtMTpxbik7dmFyIEhpPTA9PT1vbiYmZW4ucm9vdHx8b2kubmFtZTtpZihFaT0yKihIaS5sZW5ndGgrMSksV3Qu''@;'; put 'put ''d3JpdGVfc2hpZnQoNjQsSGksInV0ZjE2bGUiKSxXdC53cml0ZV9zaGlmdCgyLEVpKSxXdC53cml0ZV9zaGlmdCgxLG9pLnR5cGUpLFd0LndyaXRlX3NoaWZ0KDEsb2kuY29sb3IpLFd0LndyaXRlX3NoaWZ0KC00LG9pLkwpLFd0LndyaXRlX3NoaWZ0KC00LG9pLlIpLFd0LndyaXRlX3NoaWZ0''@;'; put 'put ''KC00LG9pLkMpLG9pLmNsc2lkKVd0LndyaXRlX3NoaWZ0KDE2LG9pLmNsc2lkLCJoZXgiKTtlbHNlIGZvcihCcj0wO0JyPDQ7KytCcilXdC53cml0ZV9zaGlmdCg0LDApO1d0LndyaXRlX3NoaWZ0KDQsb2kuc3RhdGV8fDApLFd0LndyaXRlX3NoaWZ0KDQsMCksV3Qud3JpdGVfc2hpZnQoNCww''@;'; put 'put ''KSxXdC53cml0ZV9zaGlmdCg0LDApLFd0LndyaXRlX3NoaWZ0KDQsMCksV3Qud3JpdGVfc2hpZnQoNCxvaS5zdGFydCksV3Qud3JpdGVfc2hpZnQoNCxvaS5zaXplKSxXdC53cml0ZV9zaGlmdCg0LDApfWVsc2V7Zm9yKEJyPTA7QnI8MTc7KytCcilXdC53cml0ZV9zaGlmdCg0LDApO2ZvcihC''@;'; put 'put ''cj0wO0JyPDM7KytCcilXdC53cml0ZV9zaGlmdCg0LC0xKTtmb3IoQnI9MDtCcjwxMjsrK0JyKVd0LndyaXRlX3NoaWZ0KDQsMCl9fWZvcihvbj0xO29uPEp0LkZpbGVJbmRleC5sZW5ndGg7KytvbilpZigob2k9SnQuRmlsZUluZGV4W29uXSkuc2l6ZT49NDA5Nil7Zm9yKFd0Lmw9b2kuc3Rh''@;'; put 'put ''cnQrMTw8OSxCcj0wO0JyPG9pLnNpemU7KytCcilXdC53cml0ZV9zaGlmdCgxLG9pLmNvbnRlbnRbQnJdKTtmb3IoOzUxMSZCcjsrK0JyKVd0LndyaXRlX3NoaWZ0KDEsMCl9Zm9yKG9uPTE7b248SnQuRmlsZUluZGV4Lmxlbmd0aDsrK29uKWlmKChvaT1KdC5GaWxlSW5kZXhbb25dKS5zaXpl''@;'; put 'put ''PjAmJm9pLnNpemU8NDA5Nil7Zm9yKEJyPTA7QnI8b2kuc2l6ZTsrK0JyKVd0LndyaXRlX3NoaWZ0KDEsb2kuY29udGVudFtCcl0pO2Zvcig7NjMmQnI7KytCcilXdC53cml0ZV9zaGlmdCgxLDApfWZvcig7V3QubDxXdC5sZW5ndGg7KVd0LndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIFd0fV8u''@;'; put 'put ''dmVyc2lvbj0iMS4xLjQiO3ZhciBPcixncj02NCxxbj0tMixfaT0iZDBjZjExZTBhMWIxMWFlMSIsT2k9WzIwOCwyMDcsMTcsMjI0LDE2MSwxNzcsMjYsMjI1XSxzbz0iMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLG1vPXtNQVhSRUdTRUNUOi02LERJRlNFQ1Q6LTQsRkFUU0VD''@;'; put 'put ''VDotMyxFTkRPRkNIQUlOOnFuLEZSRUVTRUNUOi0xLEhFQURFUl9TSUdOQVRVUkU6X2ksSEVBREVSX01JTk9SX1ZFUlNJT046IjNlMDAiLE1BWFJFR1NJRDotNixOT1NUUkVBTTotMSxIRUFERVJfQ0xTSUQ6c28sRW50cnlUeXBlczpbInVua25vd24iLCJzdG9yYWdlIiwic3RyZWFtIiwibG9j''@;'; put 'put ''a2J5dGVzIiwicHJvcGVydHkiLCJyb290Il19O2Z1bmN0aW9uIGtyKEp0KXtmb3IodmFyIGJuPW5ldyBBcnJheShKdC5sZW5ndGgpLGVuPTA7ZW48SnQubGVuZ3RoOysrZW4pYm5bZW5dPVN0cmluZy5mcm9tQ2hhckNvZGUoSnRbZW5dKTtyZXR1cm4gYm4uam9pbigiIil9ZnVuY3Rpb24gTnIo''@;'; put 'put ''SnQpe3JldHVybiBPcj9Pci5kZWZsYXRlUmF3U3luYyhKdCk6emQoSnQpfXZhciBqaT1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0sYmk9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTks''@;'; put 'put ''MTE1LDEzMSwxNjMsMTk1LDIyNywyNThdLE5vPVsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzddO2Z1bmN0aW9uIFlhKEp0KXt2YXIgYm49''@;'; put 'put ''MTM5NTM2JihKdDw8MXxKdDw8MTEpfDU1ODE0NCYoSnQ8PDV8SnQ8PDE1KTtyZXR1cm4gMjU1Jihibj4+MTZ8Ym4+Pjh8Ym4pfWZvcih2YXIgdW89dHlwZW9mIFVpbnQ4QXJyYXk8InUiLE1zPXVvP25ldyBVaW50OEFycmF5KDI1Nik6W10sZGE9MDtkYTwyNTY7KytkYSlNc1tkYV09WWEoZGEp''@;'; put 'put ''O2Z1bmN0aW9uICRhKEp0LGJuKXt2YXIgZW49TXNbMjU1Jkp0XTtyZXR1cm4gYm48PTg/ZW4+Pj44LWJuOihlbj1lbjw8OHxNc1tKdD4+OCYyNTVdLGJuPD0xNj9lbj4+PjE2LWJuOihlbj1lbjw8OHxNc1tKdD4+MTYmMjU1XSk+Pj4yNC1ibil9ZnVuY3Rpb24gU2EoSnQsYm4pe3ZhciBlbj03''@;'; put 'put ''JmJuLER0PWJuPj4+MztyZXR1cm4oSnRbRHRdfChlbjw9Nj8wOkp0W0R0KzFdPDw4KSk+Pj5lbiYzfWZ1bmN0aW9uIFBpKEp0LGJuKXt2YXIgZW49NyZibixEdD1ibj4+PjM7cmV0dXJuKEp0W0R0XXwoZW48PTU/MDpKdFtEdCsxXTw8OCkpPj4+ZW4mN31mdW5jdGlvbiB4bihKdCxibil7dmFy''@;'; put 'put ''IGVuPTcmYm4sRHQ9Ym4+Pj4zO3JldHVybihKdFtEdF18KGVuPD0zPzA6SnRbRHQrMV08PDgpKT4+PmVuJjMxfWZ1bmN0aW9uIHhsKEp0LGJuKXt2YXIgZW49NyZibixEdD1ibj4+PjM7cmV0dXJuKEp0W0R0XXwoZW48PTE/MDpKdFtEdCsxXTw8OCkpPj4+ZW4mMTI3fWZ1bmN0aW9uIHFsKEp0''@;'; put 'put ''LGJuLGVuKXt2YXIgRHQ9NyZibixXdD1ibj4+PjMsTG49SnRbV3RdPj4+RHQ7cmV0dXJuIGVuPDgtRHR8fChMbnw9SnRbV3QrMV08PDgtRHQsZW48MTYtRHQpfHwoTG58PUp0W1d0KzJdPDwxNi1EdCxlbjwyNC1EdCl8fChMbnw9SnRbV3QrM108PDI0LUR0KSxMbiYoMTw8ZW4pLTF9ZnVuY3Rp''@;'; put 'put ''b24gY2goSnQsYm4pe3ZhciBlbj1KdC5sZW5ndGgsRHQ9Miplbj5ibj8yKmVuOmJuKzUsV3Q9MDtpZihlbj49Ym4pcmV0dXJuIEp0O2lmKEllKXt2YXIgb249ZihEdCk7aWYoSnQuY29weSlKdC5jb3B5KG9uKTtlbHNlIGZvcig7V3Q8SnQubGVuZ3RoOysrV3Qpb25bV3RdPUp0W1d0XTtyZXR1''@;'; put 'put ''cm4gb259aWYodW8pe3ZhciBMbj1uZXcgVWludDhBcnJheShEdCk7aWYoTG4uc2V0KUxuLnNldChKdCk7ZWxzZSBmb3IoO1d0PEp0Lmxlbmd0aDsrK1d0KUxuW1d0XT1KdFtXdF07cmV0dXJuIExufXJldHVybiBKdC5sZW5ndGg9RHQsSnR9ZnVuY3Rpb24gRWQoSnQpe2Zvcih2YXIgYm49bmV3''@;'; put 'put ''IEFycmF5KEp0KSxlbj0wO2VuPEp0OysrZW4pYm5bZW5dPTA7cmV0dXJuIGJufXZhciB6ZD1mdW5jdGlvbigpe3ZhciBKdD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlbixEdCl7Zm9yKHZhciBXdD0wO1d0PGVuLmxlbmd0aDspe3ZhciBvbj1NYXRoLm1pbig2NTUzNSxlbi5sZW5ndGgt''@;'; put 'put ''V3QpO2ZvcihEdC53cml0ZV9zaGlmdCgxLCsoV3Qrb249PWVuLmxlbmd0aCkpLER0LndyaXRlX3NoaWZ0KDIsb24pLER0LndyaXRlX3NoaWZ0KDIsNjU1MzUmfm9uKTtvbi0tID4wOylEdFtEdC5sKytdPWVuW1d0KytdfXJldHVybiBEdC5sfX0oKTtyZXR1cm4gZnVuY3Rpb24oYm4pe3ZhciBl''@;'; put 'put ''bj1Gcig1MCtNYXRoLmZsb29yKDEuMSpibi5sZW5ndGgpKSxEdD1KdChibixlbik7cmV0dXJuIGVuLnNsaWNlKDAsRHQpfX0oKTtmdW5jdGlvbiBMaChKdCxibixlbil7dmFyIER0PTEsV3Q9MCxvbj0wLExuPTAsbXI9MCxCcj1KdC5sZW5ndGgsRWk9dW8/bmV3IFVpbnQxNkFycmF5KDMyKTpF''@;'; put 'put ''ZCgzMik7Zm9yKG9uPTA7b248MzI7KytvbilFaVtvbl09MDtmb3Iob249QnI7b248ZW47KytvbilKdFtvbl09MDtCcj1KdC5sZW5ndGg7dmFyIG9pPXVvP25ldyBVaW50MTZBcnJheShCcik6RWQoQnIpO2Zvcihvbj0wO29uPEJyOysrb24pRWlbV3Q9SnRbb25dXSsrLER0PFd0JiYoRHQ9V3Qp''@;'; put 'put ''LG9pW29uXT0wO2ZvcihFaVswXT0wLG9uPTE7b248PUR0Oysrb24pRWlbb24rMTZdPW1yPW1yK0VpW29uLTFdPDwxO2Zvcihvbj0wO29uPEJyOysrb24pMCE9KG1yPUp0W29uXSkmJihvaVtvbl09RWlbbXIrMTZdKyspO3ZhciBlbz0wO2Zvcihvbj0wO29uPEJyOysrb24paWYoMCE9KGVvPUp0''@;'; put 'put ''W29uXSkpZm9yKG1yPSRhKG9pW29uXSxEdCk+PkR0LWVvLExuPSgxPDxEdCs0LWVvKS0xO0xuPj0wOy0tTG4pYm5bbXJ8TG48PGVvXT0xNSZlb3xvbjw8NDtyZXR1cm4gRHR9dmFyIGdjPXVvP25ldyBVaW50MTZBcnJheSg1MTIpOkVkKDUxMiksTnQ9dW8/bmV3IFVpbnQxNkFycmF5KDMyKTpF''@;'; put 'put ''ZCgzMik7aWYoIXVvKXtmb3IodmFyIGhuPTA7aG48NTEyOysraG4pZ2NbaG5dPTA7Zm9yKGhuPTA7aG48MzI7KytobilOdFtobl09MH0hZnVuY3Rpb24oKXtmb3IodmFyIEp0PVtdLGJuPTA7Ym48MzI7Ym4rKylKdC5wdXNoKDUpO0xoKEp0LE50LDMyKTt2YXIgZW49W107Zm9yKGJuPTA7Ym48''@;'; put 'put ''PTE0MztibisrKWVuLnB1c2goOCk7Zm9yKDtibjw9MjU1O2JuKyspZW4ucHVzaCg5KTtmb3IoO2JuPD0yNzk7Ym4rKyllbi5wdXNoKDcpO2Zvcig7Ym48PTI4NztibisrKWVuLnB1c2goOCk7TGgoZW4sZ2MsMjg4KX0oKTt2YXIgUG49dW8/bmV3IFVpbnQxNkFycmF5KDMyNzY4KTpFZCgzMjc2''@;'; put 'put ''OCksU2k9dW8/bmV3IFVpbnQxNkFycmF5KDMyNzY4KTpFZCgzMjc2OCksZXI9dW8/bmV3IFVpbnQxNkFycmF5KDEyOCk6RWQoMTI4KSxEaT0xLGJyPTE7ZnVuY3Rpb24gUmkoSnQsYm4pe3ZhciBlbj14bihKdCxibikrMjU3LER0PXhuKEp0LGJuKz01KSsxLFd0PWZ1bmN0aW9uIFBjKEp0LGJu''@;'; put 'put ''KXt2YXIgZW49NyZibixEdD1ibj4+PjM7cmV0dXJuKEp0W0R0XXwoZW48PTQ/MDpKdFtEdCsxXTw8OCkpPj4+ZW4mMTV9KEp0LGJuKz01KSs0O2JuKz00O2Zvcih2YXIgb249MCxMbj11bz9uZXcgVWludDhBcnJheSgxOSk6RWQoMTkpLG1yPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs''@;'; put 'put ''MCwwLDAsMCwwXSxCcj0xLEVpPXVvP25ldyBVaW50OEFycmF5KDgpOkVkKDgpLG9pPXVvP25ldyBVaW50OEFycmF5KDgpOkVkKDgpLGVvPUxuLmxlbmd0aCxIaT0wO0hpPFd0OysrSGkpTG5bamlbSGldXT1vbj1QaShKdCxibiksQnI8b24mJihCcj1vbiksRWlbb25dKyssYm4rPTM7dmFyIFph''@;'; put 'put ''PTA7Zm9yKEVpWzBdPTAsSGk9MTtIaTw9QnI7KytIaSlvaVtIaV09WmE9WmErRWlbSGktMV08PDE7Zm9yKEhpPTA7SGk8ZW87KytIaSkwIT0oWmE9TG5bSGldKSYmKG1yW0hpXT1vaVtaYV0rKyk7dmFyIHNhPTA7Zm9yKEhpPTA7SGk8ZW87KytIaSlpZigwIT0oc2E9TG5bSGldKSl7WmE9TXNb''@;'; put 'put ''bXJbSGldXT4+OC1zYTtmb3IodmFyIEFvPSgxPDw3LXNhKS0xO0FvPj0wOy0tQW8pZXJbWmF8QW88PHNhXT03JnNhfEhpPDwzfXZhciB5cz1bXTtmb3IoQnI9MTt5cy5sZW5ndGg8ZW4rRHQ7KXN3aXRjaChaYT1lclt4bChKdCxibildLGJuKz03JlphLFphPj4+PTMpe2Nhc2UgMTY6Zm9yKG9u''@;'; put 'put ''PTMrU2EoSnQsYm4pLGJuKz0yLFphPXlzW3lzLmxlbmd0aC0xXTtvbi0tID4wOyl5cy5wdXNoKFphKTticmVhaztjYXNlIDE3OmZvcihvbj0zK1BpKEp0LGJuKSxibis9Mztvbi0tID4wOyl5cy5wdXNoKDApO2JyZWFrO2Nhc2UgMTg6Zm9yKG9uPTExK3hsKEp0LGJuKSxibis9Nztvbi0tID4w''@;'; put 'put ''Oyl5cy5wdXNoKDApO2JyZWFrO2RlZmF1bHQ6eXMucHVzaChaYSksQnI8WmEmJihCcj1aYSl9dmFyIHJjPXlzLnNsaWNlKDAsZW4pLEkyPXlzLnNsaWNlKGVuKTtmb3IoSGk9ZW47SGk8Mjg2OysrSGkpcmNbSGldPTA7Zm9yKEhpPUR0O0hpPDMwOysrSGkpSTJbSGldPTA7cmV0dXJuIERpPUxo''@;'; put 'put ''KHJjLFBuLDI4NiksYnI9TGgoSTIsU2ksMzApLGJufWZ1bmN0aW9uIE5pKEp0LGJuKXt2YXIgRHQ9ZnVuY3Rpb24gdmEoSnQsYm4pe2lmKDM9PUp0WzBdJiYhKDMmSnRbMV0pKXJldHVybltYKGJuKSwyXTtmb3IodmFyIGVuPTAsRHQ9MCxXdD1mKGJufHwxPDwxOCksb249MCxMbj1XdC5sZW5n''@;'; put 'put ''dGg+Pj4wLG1yPTAsQnI9MDshKDEmRHQpOylpZihEdD1QaShKdCxlbiksZW4rPTMsRHQ+Pj4xKWZvcihEdD4+PjE9PTE/KG1yPTksQnI9NSk6KGVuPVJpKEp0LGVuKSxtcj1EaSxCcj1iciksIWJuJiZMbjxvbiszMjc2NyYmKExuPShXdD1jaChXdCxvbiszMjc2NykpLmxlbmd0aCk7Oyl7dmFy''@;'; put 'put ''IG9pPXFsKEp0LGVuLG1yKSxlbz1EdD4+PjE9PTE/Z2Nbb2ldOlBuW29pXTtpZihlbis9MTUmZW8sKGVvPj4+PTQpPj4+OCYyNTUpe2lmKDI1Nj09ZW8pYnJlYWs7dmFyIEhpPShlby09MjU3KTw4PzA6ZW8tND4+MjtIaT41JiYoSGk9MCk7dmFyIFphPW9uK2JpW2VvXTtIaT4wJiYoWmErPXFs''@;'; put 'put ''KEp0LGVuLEhpKSxlbis9SGkpLG9pPXFsKEp0LGVuLEJyKSxlbis9MTUmKGVvPUR0Pj4+MT09MT9OdFtvaV06U2lbb2ldKTt2YXIgc2E9KGVvPj4+PTQpPDQ/MDplby0yPj4xLEFvPU5vW2VvXTtmb3Ioc2E+MCYmKEFvKz1xbChKdCxlbixzYSksZW4rPXNhKSwhYm4mJkxuPFphJiYoTG49KFd0''@;'; put 'put ''PWNoKFd0LFphKSkubGVuZ3RoKTtvbjxaYTspV3Rbb25dPVd0W29uLUFvXSwrK29ufWVsc2UgV3Rbb24rK109ZW99ZWxzZXs3JmVuJiYoZW4rPTgtKDcmZW4pKTt2YXIgRWk9SnRbZW4+Pj4zXXxKdFsoZW4+Pj4zKSsxXTw8ODtpZihlbis9MzIsIWJuJiZMbjxvbitFaSYmKExuPShXdD1jaChX''@;'; put 'put ''dCxvbitFaSkpLmxlbmd0aCksImZ1bmN0aW9uIj09dHlwZW9mIEp0LmNvcHkpSnQuY29weShXdCxvbixlbj4+PjMsKGVuPj4+MykrRWkpLG9uKz1FaSxlbis9OCpFaTtlbHNlIGZvcig7RWktLSA+MDspV3Rbb24rK109SnRbZW4+Pj4zXSxlbis9OH1yZXR1cm5bYm4/V3Q6V3Quc2xpY2UoMCxv''@;'; put 'put ''biksZW4rNz4+PjNdfShKdC5zbGljZShKdC5sfHwwKSxibik7cmV0dXJuIEp0LmwrPUR0WzFdLER0WzBdfWZ1bmN0aW9uIERvKEp0LGJuKXtpZighSnQpdGhyb3cgbmV3IEVycm9yKGJuKTt0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUuZXJyb3IoYm4pfWZ1bmN0aW9uIHdpKEp0LGJuKXt2''@;'; put 'put ''YXIgZW49SnQ7T2woZW4sMCk7dmFyIG9uPXtGaWxlSW5kZXg6W10sRnVsbFBhdGhzOltdfTtubihvbix7cm9vdDpibi5yb290fSk7Zm9yKHZhciBMbj1lbi5sZW5ndGgtNDsoODAhPWVuW0xuXXx8NzUhPWVuW0xuKzFdfHw1IT1lbltMbisyXXx8NiE9ZW5bTG4rM10pJiZMbj49MDspLS1Mbjtl''@;'; put 'put ''bi5sPUxuKzQsZW4ubCs9NDt2YXIgbXI9ZW4ucmVhZF9zaGlmdCgyKTtlbi5sKz02O3ZhciBCcj1lbi5yZWFkX3NoaWZ0KDQpO2Zvcihlbi5sPUJyLExuPTA7TG48bXI7KytMbil7ZW4ubCs9MjA7dmFyIEVpPWVuLnJlYWRfc2hpZnQoNCksb2k9ZW4ucmVhZF9zaGlmdCg0KSxlbz1lbi5yZWFk''@;'; put 'put ''X3NoaWZ0KDIpLEhpPWVuLnJlYWRfc2hpZnQoMiksWmE9ZW4ucmVhZF9zaGlmdCgyKTtlbi5sKz04O3ZhciBzYT1lbi5yZWFkX3NoaWZ0KDQpLEFvPW9lKGVuLnNsaWNlKGVuLmwrZW8sZW4ubCtlbytIaSkpO2VuLmwrPWVvK0hpK1phO3ZhciB5cz1lbi5sO2VuLmw9c2ErNCxLcyhlbixFaSxv''@;'; put 'put ''aSxvbixBbyksZW4ubD15c31yZXR1cm4gb259ZnVuY3Rpb24gS3MoSnQsYm4sZW4sRHQsV3Qpe0p0LmwrPTI7dmFyIG9uPUp0LnJlYWRfc2hpZnQoMiksTG49SnQucmVhZF9zaGlmdCgyKSxtcj1mdW5jdGlvbiBzZShKdCl7dmFyIGJuPTY1NTM1Jkp0LnJlYWRfc2hpZnQoMiksZW49NjU1MzUm''@;'; put 'put ''SnQucmVhZF9zaGlmdCgyKSxEdD1uZXcgRGF0ZSxXdD0zMSZlbixvbj0xNSYoZW4+Pj49NSk7ZW4+Pj49NCxEdC5zZXRNaWxsaXNlY29uZHMoMCksRHQuc2V0RnVsbFllYXIoZW4rMTk4MCksRHQuc2V0TW9udGgob24tMSksRHQuc2V0RGF0ZShXdCk7dmFyIExuPTMxJmJuLG1yPTYzJihibj4+''@;'; put 'put ''Pj01KTtyZXR1cm4gRHQuc2V0SG91cnMoYm4+Pj49NiksRHQuc2V0TWludXRlcyhtciksRHQuc2V0U2Vjb25kcyhMbjw8MSksRHR9KEp0KTtpZig4MjU3Jm9uKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgWklQIGVuY3J5cHRpb24iKTtmb3IodmFyIEJyPUp0LnJlYWRfc2hpZnQoNCks''@;'; put 'put ''RWk9SnQucmVhZF9zaGlmdCg0KSxvaT1KdC5yZWFkX3NoaWZ0KDQpLGVvPUp0LnJlYWRfc2hpZnQoMiksSGk9SnQucmVhZF9zaGlmdCgyKSxaYT0iIixzYT0wO3NhPGVvOysrc2EpWmErPVN0cmluZy5mcm9tQ2hhckNvZGUoSnRbSnQubCsrXSk7aWYoSGkpe3ZhciBBbz1vZShKdC5zbGljZShK''@;'; put 'put ''dC5sLEp0LmwrSGkpKTsoQW9bMjE1ODldfHx7fSkubXQmJihtcj1Bb1syMTU4OV0ubXQpLCgoV3R8fHt9KVsyMTU4OV18fHt9KS5tdCYmKG1yPVd0WzIxNTg5XS5tdCl9SnQubCs9SGk7dmFyIHlzPUp0LnNsaWNlKEp0LmwsSnQubCtFaSk7c3dpdGNoKExuKXtjYXNlIDg6eXM9ZnVuY3Rpb24g''@;'; put 'put ''TW4oSnQsYm4pe2lmKCFPcilyZXR1cm4gTmkoSnQsYm4pO3ZhciBEdD1uZXcoMCxPci5JbmZsYXRlUmF3KSxXdD1EdC5fcHJvY2Vzc0NodW5rKEp0LnNsaWNlKEp0LmwpLER0Ll9maW5pc2hGbHVzaEZsYWcpO3JldHVybiBKdC5sKz1EdC5ieXRlc1JlYWQsV3R9KEp0LG9pKTticmVhaztjYXNl''@;'; put 'put ''IDA6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFpJUCBDb21wcmVzc2lvbiBtZXRob2QgIitMbil9dmFyIHJjPSExOzgmb24mJigxMzQ2OTU3NjA9PShCcj1KdC5yZWFkX3NoaWZ0KDQpKSYmKEJyPUp0LnJlYWRfc2hpZnQoNCkscmM9ITApLEVpPUp0LnJlYWRf''@;'; put 'put ''c2hpZnQoNCksb2k9SnQucmVhZF9zaGlmdCg0KSksRWkhPWJuJiZEbyhyYywiQmFkIGNvbXByZXNzZWQgc2l6ZTogIitibisiICE9ICIrRWkpLG9pIT1lbiYmRG8ocmMsIkJhZCB1bmNvbXByZXNzZWQgc2l6ZTogIitlbisiICE9ICIrb2kpO3ZhciBJMj1SZS5idWYoeXMsMCk7KDB8QnIpIT0o''@;'; put 'put ''MHxJMikmJkRvKHJjLCJCYWQgQ1JDMzIgY2hlY2tzdW06ICIrQnIrIiAhPSAiK0kyKSxNZChEdCxaYSx5cyx7dW5zYWZlOiEwLG10Om1yfSl9ZnVuY3Rpb24gTWQoSnQsYm4sZW4sRHQpe3ZhciBXdD1EdCYmRHQudW5zYWZlO1d0fHxubihKdCk7dmFyIG9uPSFXdCYmYWUuZmluZChKdCxibik7''@;'; put 'put ''aWYoIW9uKXt2YXIgTG49SnQuRnVsbFBhdGhzWzBdO2JuLnNsaWNlKDAsTG4ubGVuZ3RoKT09TG4/TG49Ym46KCIvIiE9TG4uc2xpY2UoLTEpJiYoTG4rPSIvIiksTG49KExuK2JuKS5yZXBsYWNlKCIvLyIsIi8iKSksb249e25hbWU6UChibiksdHlwZToyfSxKdC5GaWxlSW5kZXgucHVzaChv''@;'; put 'put ''biksSnQuRnVsbFBhdGhzLnB1c2goTG4pLFd0fHxhZS51dGlscy5jZmJfZ2MoSnQpfXJldHVybiBvbi5jb250ZW50PWVuLG9uLnNpemU9ZW4/ZW4ubGVuZ3RoOjAsRHQmJihEdC5DTFNJRCYmKG9uLmNsc2lkPUR0LkNMU0lEKSxEdC5tdCYmKG9uLm10PUR0Lm10KSxEdC5jdCYmKG9uLmN0PUR0''@;'; put 'put ''LmN0KSksb259cmV0dXJuIF8uZmluZD1mdW5jdGlvbiBzcihKdCxibil7dmFyIGVuPUp0LkZ1bGxQYXRocy5tYXAoZnVuY3Rpb24oQnIpe3JldHVybiBCci50b1VwcGVyQ2FzZSgpfSksRHQ9ZW4ubWFwKGZ1bmN0aW9uKEJyKXt2YXIgRWk9QnIuc3BsaXQoIi8iKTtyZXR1cm4gRWlbRWkubGVu''@;'; put 'put ''Z3RoLSgiLyI9PUJyLnNsaWNlKC0xKT8yOjEpXX0pLFd0PSExOzQ3PT09Ym4uY2hhckNvZGVBdCgwKT8oV3Q9ITAsYm49ZW5bMF0uc2xpY2UoMCwtMSkrYm4pOld0PS0xIT09Ym4uaW5kZXhPZigiLyIpO3ZhciBvbj1ibi50b1VwcGVyQ2FzZSgpLExuPSEwPT09V3Q/ZW4uaW5kZXhPZihvbik6''@;'; put 'put ''RHQuaW5kZXhPZihvbik7aWYoLTEhPT1MbilyZXR1cm4gSnQuRmlsZUluZGV4W0xuXTt2YXIgbXI9IW9uLm1hdGNoKHApO2Zvcihvbj1vbi5yZXBsYWNlKEQsIiIpLG1yJiYob249b24ucmVwbGFjZShwLCIhIikpLExuPTA7TG48ZW4ubGVuZ3RoOysrTG4paWYoKG1yP2VuW0xuXS5yZXBsYWNl''@;'; put 'put ''KHAsIiEiKTplbltMbl0pLnJlcGxhY2UoRCwiIik9PW9ufHwobXI/RHRbTG5dLnJlcGxhY2UocCwiISIpOkR0W0xuXSkucmVwbGFjZShELCIiKT09b24pcmV0dXJuIEp0LkZpbGVJbmRleFtMbl07cmV0dXJuIG51bGx9LF8ucmVhZD1mdW5jdGlvbiBucihKdCxibil7c3dpdGNoKGJuJiZibi50''@;'; put 'put ''eXBlfHwiYmFzZTY0Iil7Y2FzZSJmaWxlIjpyZXR1cm4gZnVuY3Rpb24gdW4oSnQsYm4pe3JldHVybiBMZSgpLE5lKGRlLnJlYWRGaWxlU3luYyhKdCksYm4pfShKdCxibik7Y2FzZSJiYXNlNjQiOnJldHVybiBOZShiKENlLmRlY29kZShKdCkpLGJuKTtjYXNlImJpbmFyeSI6cmV0dXJuIE5l''@;'; put 'put ''KGIoSnQpLGJuKX1yZXR1cm4gTmUoSnQsYm4pfSxfLnBhcnNlPU5lLF8ud3JpdGU9ZnVuY3Rpb24gRG4oSnQsYm4pe3ZhciBlbj1rbihKdCxibik7c3dpdGNoKGJuJiZibi50eXBlKXtjYXNlImZpbGUiOnJldHVybiBMZSgpLGRlLndyaXRlRmlsZVN5bmMoYm4uZmlsZW5hbWUsZW4pLGVuO2Nh''@;'; put 'put ''c2UiYmluYXJ5IjpyZXR1cm4ga3IoZW4pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gQ2UuZW5jb2RlKGtyKGVuKSl9cmV0dXJuIGVufSxfLndyaXRlRmlsZT1mdW5jdGlvbiBMaShKdCxibixlbil7TGUoKTt2YXIgRHQ9a24oSnQsZW4pO2RlLndyaXRlRmlsZVN5bmMoYm4sRHQpfSxfLnV0aWxzPXtj''@;'; put 'put ''ZmJfbmV3OmZ1bmN0aW9uIF91KEp0KXt2YXIgYm49e307cmV0dXJuIG5uKGJuLEp0KSxibn0sY2ZiX2FkZDpNZCxjZmJfZGVsOmZ1bmN0aW9uIHplKEp0LGJuKXtubihKdCk7dmFyIGVuPWFlLmZpbmQoSnQsYm4pO2lmKGVuKWZvcih2YXIgRHQ9MDtEdDxKdC5GaWxlSW5kZXgubGVuZ3RoOysr''@;'; put 'put ''RHQpaWYoSnQuRmlsZUluZGV4W0R0XT09ZW4pcmV0dXJuIEp0LkZpbGVJbmRleC5zcGxpY2UoRHQsMSksSnQuRnVsbFBhdGhzLnNwbGljZShEdCwxKSwhMDtyZXR1cm4hMX0sY2ZiX21vdjpmdW5jdGlvbiBMNShKdCxibixlbil7bm4oSnQpO3ZhciBEdD1hZS5maW5kKEp0LGJuKTtpZihEdClm''@;'; put 'put ''b3IodmFyIFd0PTA7V3Q8SnQuRmlsZUluZGV4Lmxlbmd0aDsrK1d0KWlmKEp0LkZpbGVJbmRleFtXdF09PUR0KXJldHVybiBKdC5GaWxlSW5kZXhbV3RdLm5hbWU9UChlbiksSnQuRnVsbFBhdGhzW1d0XT1lbiwhMDtyZXR1cm4hMX0sY2ZiX2djOmZ1bmN0aW9uIEc4KEp0KXtqbihKdCwhMCl9''@;'; put 'put ''LFJlYWRTaGlmdDp0dSxDaGVja0ZpZWxkOkpoLHByZXBfYmxvYjpPbCxiY29uY2F0OkcsdXNlX3psaWI6ZnVuY3Rpb24gX3IoSnQpe3RyeXt2YXIgZW49bmV3KDAsSnQuSW5mbGF0ZVJhdyk7aWYoZW4uX3Byb2Nlc3NDaHVuayhuZXcgVWludDhBcnJheShbMywwXSksZW4uX2ZpbmlzaEZsdXNo''@;'; put 'put ''RmxhZyksIWVuLmJ5dGVzUmVhZCl0aHJvdyBuZXcgRXJyb3IoInpsaWIgZG9lcyBub3QgZXhwb3NlIGJ5dGVzUmVhZCIpO09yPUp0fWNhdGNoKER0KXtjb25zb2xlLmVycm9yKCJjYW5ub3QgdXNlIG5hdGl2ZSB6bGliOiAiKyhEdC5tZXNzYWdlfHxEdCkpfX0sX2RlZmxhdGVSYXc6emQsX2lu''@;'; put 'put ''ZmxhdGVSYXc6TmksY29uc3RzOm1vfSxffSgpO3RyeXt4ZT1oKDgzMzM3KX1jYXRjaHt9ZnVuY3Rpb24gamUoZCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBkP2soZCk6QXJyYXkuaXNBcnJheShkKT9mdW5jdGlvbiBCKGQpe2lmKHR5cGVvZiBVaW50OEFycmF5PiJ1Iil0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIlVuc3VwcG9ydGVkIik7cmV0dXJuIG5ldyBVaW50OEFycmF5KGQpfShkKTpkfWZ1bmN0aW9uIEFlKGQsXyxtKXtpZih0eXBlb2YgeGU8InUiJiZ4ZS53cml0ZUZpbGVTeW5jKXJldHVybiBtP3hlLndyaXRlRmlsZVN5bmMoZCxfLG0pOnhlLndyaXRlRmlsZVN5bmMoZCxfKTt2YXIgVD0i''@;'; put 'put ''dXRmOCI9PW0/UWgoXyk6XztpZih0eXBlb2YgSUVfU2F2ZUZpbGU8InUiKXJldHVybiBJRV9TYXZlRmlsZShULGQpO2lmKHR5cGVvZiBCbG9iPCJ1Iil7dmFyIFA9bmV3IEJsb2IoW2plKFQpXSx7dHlwZToiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIn0pO2lmKHR5cGVvZiBuYXZpZ2F0b3I8''@;'; put 'put ''InUiJiZuYXZpZ2F0b3IubXNTYXZlQmxvYilyZXR1cm4gbmF2aWdhdG9yLm1zU2F2ZUJsb2IoUCxkKTtpZih0eXBlb2Ygc2F2ZUFzPCJ1IilyZXR1cm4gc2F2ZUFzKFAsZCk7aWYodHlwZW9mIFVSTDwidSImJnR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQmJlVS''@;'; put 'put ''TC5jcmVhdGVPYmplY3RVUkwpe3ZhciBRPVVSTC5jcmVhdGVPYmplY3RVUkwoUCk7aWYoIm9iamVjdCI9PXR5cGVvZiBjaHJvbWUmJiJmdW5jdGlvbiI9PXR5cGVvZihjaHJvbWUuZG93bmxvYWRzfHx7fSkuZG93bmxvYWQpcmV0dXJuIFVSTC5yZXZva2VPYmplY3RVUkwmJnR5cGVvZiBzZXRU''@;'; put 'put ''aW1lb3V0PCJ1IiYmc2V0VGltZW91dChmdW5jdGlvbigpe1VSTC5yZXZva2VPYmplY3RVUkwoUSl9LDZlNCksY2hyb21lLmRvd25sb2Fkcy5kb3dubG9hZCh7dXJsOlEsZmlsZW5hbWU6ZCxzYXZlQXM6ITB9KTt2YXIgc2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2lmKG51bGwhPXNl''@;'; put 'put ''LmRvd25sb2FkKXJldHVybiBzZS5kb3dubG9hZD1kLHNlLmhyZWY9USxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNlKSxzZS5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoc2UpLFVSTC5yZXZva2VPYmplY3RVUkwmJnR5cGVvZiBzZXRUaW1lb3V0PCJ1IiYmc2V0VGltZW91''@;'; put 'put ''dChmdW5jdGlvbigpe1VSTC5yZXZva2VPYmplY3RVUkwoUSl9LDZlNCksUX19aWYodHlwZW9mICQ8InUiJiZ0eXBlb2YgRmlsZTwidSImJnR5cGVvZiBGb2xkZXI8InUiKXRyeXt2YXIgb2U9RmlsZShkKTtyZXR1cm4gb2Uub3BlbigidyIpLG9lLmVuY29kaW5nPSJiaW5hcnkiLEFycmF5Lmlz''@;'; put 'put ''QXJyYXkoXykmJihfPU0oXykpLG9lLndyaXRlKF8pLG9lLmNsb3NlKCksX31jYXRjaChkZSl7aWYoIWRlLm1lc3NhZ2V8fCFkZS5tZXNzYWdlLm1hdGNoKC9vbnN0cnVjdC8pKXRocm93IGRlfXRocm93IG5ldyBFcnJvcigiY2Fubm90IHNhdmUgZmlsZSAiK2QpfWZ1bmN0aW9uIEZlKGQpe2Zv''@;'; put 'put ''cih2YXIgXz1PYmplY3Qua2V5cyhkKSxtPVtdLFQ9MDtUPF8ubGVuZ3RoOysrVClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZCxfW1RdKSYmbS5wdXNoKF9bVF0pO3JldHVybiBtfWZ1bmN0aW9uIGdlKGQsXyl7Zm9yKHZhciBtPVtdLFQ9RmUoZCksUD0wO1AhPT1ULmxl''@;'; put 'put ''bmd0aDsrK1ApbnVsbD09bVtkW1RbUF1dW19dXSYmKG1bZFtUW1BdXVtfXV09VFtQXSk7cmV0dXJuIG19ZnVuY3Rpb24gY2UoZCl7Zm9yKHZhciBfPVtdLG09RmUoZCksVD0wO1QhPT1tLmxlbmd0aDsrK1QpX1tkW21bVF1dXT1tW1RdO3JldHVybiBffWZ1bmN0aW9uIGhlKGQpe2Zvcih2YXIg''@;'; put 'put ''Xz1bXSxtPUZlKGQpLFQ9MDtUIT09bS5sZW5ndGg7KytUKV9bZFttW1RdXV09cGFyc2VJbnQobVtUXSwxMCk7cmV0dXJuIF99dmFyIEtlLCR0LEplPW5ldyBEYXRlKDE4OTksMTEsMzAsMCwwLDApLHR0PTA7ZnVuY3Rpb24gUnQoKXt0dD1KZS5nZXRUaW1lKCkrNmU0KigobmV3IERhdGUpLmdl''@;'; put 'put ''dFRpbWV6b25lT2Zmc2V0KCktSmUuZ2V0VGltZXpvbmVPZmZzZXQoKSksS2U9ZnVuY3Rpb24oXyxtKXt2YXIgVD1fLmdldFRpbWUoKTtyZXR1cm4gbSYmKFQtPTEyNjMxNjhlNSksKFQtdHQpLzg2NGU1fSwkdD1mdW5jdGlvbihfKXt2YXIgbT1uZXcgRGF0ZTtyZXR1cm4gbS5zZXRUaW1lKDI0''@;'; put 'put ''Kl8qNjAqNjAqMWUzK3R0KSxtfX1mdW5jdGlvbiBndChkKXt2YXIgXz0wLG09MCxUPSExLFA9ZC5tYXRjaCgvUChbMC05XC5dK1kpPyhbMC05XC5dK00pPyhbMC05XC5dK0QpP1QoWzAtOVwuXStIKT8oWzAtOVwuXStNKT8oWzAtOVwuXStTKT8vKTtpZighUCl0aHJvdyBuZXcgRXJyb3IoInwi''@;'; put 'put ''K2QrInwgaXMgbm90IGFuIElTTzg2MDEgRHVyYXRpb24iKTtmb3IodmFyIFE9MTtRIT1QLmxlbmd0aDsrK1EpaWYoUFtRXSl7c3dpdGNoKG09MSxRPjMmJihUPSEwKSxQW1FdLnNsaWNlKFBbUV0ubGVuZ3RoLTEpKXtjYXNlIlkiOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgSVNPIER1''@;'; put 'put ''cmF0aW9uIEZpZWxkOiAiK1BbUV0uc2xpY2UoUFtRXS5sZW5ndGgtMSkpO2Nhc2UiRCI6bSo9MjQ7Y2FzZSJIIjptKj02MDtjYXNlIk0iOmlmKCFUKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgSVNPIER1cmF0aW9uIEZpZWxkOiBNIik7bSo9NjB9Xys9bSpwYXJzZUludChQW1FdLDEw''@;'; put 'put ''KX1yZXR1cm4gX31SdCgpO3ZhciBYdD1uZXcgRGF0ZSgiMjAxNy0wMi0xOVQxOTowNjowOS4wMDBaIik7aXNOYU4oWHQuZ2V0RnVsbFllYXIoKSkmJihYdD1uZXcgRGF0ZSgiMi8xOS8xNyIpKTt2YXIgTHI9MjAxNz09WHQuZ2V0RnVsbFllYXIoKTtmdW5jdGlvbiBsbihkLF8pe3ZhciBtPW5l''@;'; put 'put ''dyBEYXRlKGQpO2lmKExyKXJldHVybiBfPjA/bS5zZXRUaW1lKG0uZ2V0VGltZSgpKzYwKm0uZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMpOl88MCYmbS5zZXRUaW1lKG0uZ2V0VGltZSgpLTYwKm0uZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMpLG07aWYoZCBpbnN0YW5jZW9mIERhdGUpcmV0dXJu''@;'; put 'put ''IGQ7aWYoMTkxNz09WHQuZ2V0RnVsbFllYXIoKSYmIWlzTmFOKG0uZ2V0RnVsbFllYXIoKSkpe3ZhciBUPW0uZ2V0RnVsbFllYXIoKTtyZXR1cm4gZC5pbmRleE9mKCIiK1QpPi0xfHxtLnNldEZ1bGxZZWFyKG0uZ2V0RnVsbFllYXIoKSsxMDApLG19dmFyIFA9ZC5tYXRjaCgvXGQrL2cpfHxb''@;'; put 'put ''IjIwMTciLCIyIiwiMTkiLCIwIiwiMCIsIjAiXSxRPW5ldyBEYXRlKCtQWzBdLCtQWzFdLTEsK1BbMl0sK1BbM118fDAsK1BbNF18fDAsK1BbNV18fDApO3JldHVybiBkLmluZGV4T2YoIloiKT4tMSYmKFE9bmV3IERhdGUoUS5nZXRUaW1lKCktNjAqUS5nZXRUaW1lem9uZU9mZnNldCgpKjFl''@;'; put 'put ''MykpLFF9ZnVuY3Rpb24gT24oZCl7Zm9yKHZhciBfPSIiLG09MDttIT1kLmxlbmd0aDsrK20pXys9U3RyaW5nLmZyb21DaGFyQ29kZShkW21dKTtyZXR1cm4gX31mdW5jdGlvbiBRcihkKXtpZigib2JqZWN0IiE9dHlwZW9mIGR8fG51bGw9PWQpcmV0dXJuIGQ7aWYoZCBpbnN0YW5jZW9mIERh''@;'; put 'put ''dGUpcmV0dXJuIG5ldyBEYXRlKGQuZ2V0VGltZSgpKTtpZihBcnJheS5pc0FycmF5KGQpKXJldHVybiBmdW5jdGlvbiB0cihkKXtmb3IodmFyIF89W10sbT0wO208ZC5sZW5ndGg7KyttKXt2YXIgVD1kW21dOyJvYmplY3QiPT10eXBlb2YgVD9fW21dPVFyKFQpOm51bGwhPVQmJihfW21dPVQp''@;'; put 'put ''fXJldHVybiBffShkKTt2YXIgXz17fTtmb3IodmFyIG0gaW4gZClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZCxtKSYmKF9bbV09UXIoZFttXSkpO3JldHVybiBffWZ1bmN0aW9uIEhuKGQsXyl7aWYoIm9iamVjdCIhPXR5cGVvZiBffHxudWxsPT1fKXJldHVybiBkO2Zv''@;'; put 'put ''cih2YXIgbSBpbiBfKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfLG0pJiYoZFttXT1RcihfW21dKSk7cmV0dXJuIGR9ZnVuY3Rpb24gT28oZCxfKXtmb3IodmFyIG09IiI7bS5sZW5ndGg8XzspbSs9ZDtyZXR1cm4gbX1mdW5jdGlvbiB1cihkKXt2YXIgXz1OdW1iZXIo''@;'; put 'put ''ZCk7aWYoIWlzTmFOKF8pKXJldHVybiBpc0Zpbml0ZShfKT9fOk5hTjtpZighL1xkLy50ZXN0KGQpKXJldHVybiBfO3ZhciBtPTEsVD1kLnJlcGxhY2UoLyhbXGRdKSwoW1xkXSkvZywiJDEkMiIpLnJlcGxhY2UoL1skXS9nLCIiKS5yZXBsYWNlKC9bJV0vZyxmdW5jdGlvbigpe3JldHVybiBt''@;'; put 'put ''Kj0xMDAsIiJ9KTtyZXR1cm4gaXNOYU4oXz1OdW1iZXIoVCkpJiYoVD1ULnJlcGxhY2UoL1soXSguKilbKV0vLGZ1bmN0aW9uKFAsUSl7cmV0dXJuIG09LW0sUX0pLGlzTmFOKF89TnVtYmVyKFQpKSk/XzpfL219ZnVuY3Rpb24gWm4oZCl7dmFyIF89bmV3IERhdGUoZCksbT1uZXcgRGF0ZShO''@;'; put 'put ''YU4pLFQ9Xy5nZXRZZWFyKCksUD1fLmdldE1vbnRoKCksUT1fLmdldERhdGUoKTtyZXR1cm4gaXNOYU4oUSl8fFQ8MHx8VD44MDk5P206KFA+MHx8UT4xKSYmMTAxIT1UfHxkLnRvTG93ZXJDYXNlKCkubWF0Y2goL2phbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8''@;'; put 'put ''ZGVjLyk/XzpkLm1hdGNoKC9bXi0wLTk6LFwvXFxdLyk/bTpffWZ1bmN0aW9uIFNuKGQsXyl7aWYoXyYmXy5yYXcpcmV0dXJue3Q6InMiLHY6ZH07aWYoIWQpcmV0dXJue3Q6InoifTtpZigiVFJVRSI9PT1kKXJldHVybnt0OiJiIix2OiEwfTtpZigiRkFMU0UiPT09ZClyZXR1cm57dDoiYiIs''@;'; put 'put ''djohMX07dmFyIG09IiIsVD1OdW1iZXIoZCk7aWYoaXNGaW5pdGUoVCkpcmV0dXJue3Q6Im4iLHY6VH07aWYoaXNOYU4oVCkmJi9cZC8udGVzdChkKSl7dmFyIFA9MSxRPWQucmVwbGFjZSgvKFtcZF0pLChbXGRdKS9nLGZ1bmN0aW9uKFplLG50LG10KXtyZXR1cm4gbXx8KG09IiMsIyMwIiks''@;'; put 'put ''bnQrbXR9KS5yZXBsYWNlKC9bJF0vZywiIikucmVwbGFjZSgvXC5cZCovLGZ1bmN0aW9uKFplKXttfHwobT0iMCIpLG0rPSIuIjtmb3IodmFyIG50PTI7bnQ8PVplLmxlbmd0aDsrK250KW0rPSIwIjtyZXR1cm4gWmV9KS5yZXBsYWNlKC9bJV0vZyxmdW5jdGlvbigpe3JldHVybiBQKj0xMDAs''@;'; put 'put ''bXx8KG09IjAiKSxtKz0iJSIsIiJ9KTtpZighaXNOYU4oVD1OdW1iZXIoUSkpKXJldHVybnt0OiJuIix2OlQvUCx6Om19O2lmKFE9US5yZXBsYWNlKC9bKF0oLiopWyldLyxmdW5jdGlvbihaZSxudCl7cmV0dXJuIFA9LVAsbnR9KSwhaXNOYU4oVD1OdW1iZXIoUSkpKXJldHVybnt0OiJuIix2''@;'; put 'put ''OlQvUCx6OihtfHwiMCIpKyJfKTsoIisobXx8IjAiKSsiKTtAIn19ZTppZighX3x8IV8ucmF3RGF0ZXMpe3ZhciBzZT1fJiZfLmNlbGxEYXRlcyxvZT1uZXcgRGF0ZShkKSxMZT1vZS5nZXRZZWFyKCksTmU9b2UuZ2V0TW9udGgoKSxCZT1vZS5nZXREYXRlKCk7aWYoaXNOYU4oQmUpfHxMZTww''@;'; put 'put ''fHxMZT44MDk5KWJyZWFrIGU7aWYoKE5lPjB8fEJlPjEpJiYxMDEhPUxlKXJldHVybnt0OnNlPyJkIjoibiIsdjpzZT9vZTpLZShvZSksejpfLmRhdGVORnx8SS5fdGFibGVbMTRdfTtpZihkLnRvTG93ZXJDYXNlKCkubWF0Y2goL2phbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2Vw''@;'; put 'put ''fG9jdHxub3Z8ZGVjLykpcmV0dXJue3Q6c2U/ImQiOiJuIix2OnNlP29lOktlKG9lKSx6Ol8uZGF0ZU5GfHxJLl90YWJsZVsxNF19O2lmKGQubWF0Y2goL1teLTAtOTosXC9cXF0vKSlicmVhayBlO3JldHVybiBvZX1yZXR1cm57dDoicyIsdjpkfX12YXIgeW4seHI9NT09ImFiYWNhYmEiLnNw''@;'; put 'put ''bGl0KC8oOj9iKS9pKS5sZW5ndGg7ZnVuY3Rpb24gX24oZCl7cmV0dXJuIG51bGwhPWQmJiFkfWZ1bmN0aW9uIFp0KGQpe3JldHVybiBkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Quc2xpY2UoMSl9ZnVuY3Rpb24gTm4oZCl7cmV0dXJuIGQ/ZC5kYXRhP0YoZC5kYXRhKTpkLmFzTm9kZUJ1''@;'; put 'put ''ZmZlciYmSWU/RihkLmFzTm9kZUJ1ZmZlcigpLnRvU3RyaW5nKCJiaW5hcnkiKSk6ZC5hc0JpbmFyeT9GKGQuYXNCaW5hcnkoKSk6ZC5fZGF0YSYmZC5fZGF0YS5nZXRDb250ZW50P0YoT24oQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZC5fZGF0YS5nZXRDb250ZW50KCksMCkpKTpkLmNv''@;'; put 'put ''bnRlbnQmJmQudHlwZT9GKE9uKGQuY29udGVudCkpOm51bGw6bnVsbH1mdW5jdGlvbiBwdChkKXtpZighZClyZXR1cm4gbnVsbDtpZihkLmRhdGEpcmV0dXJuIE4oZC5kYXRhKTtpZihkLmFzTm9kZUJ1ZmZlciYmSWUpcmV0dXJuIGQuYXNOb2RlQnVmZmVyKCk7aWYoZC5fZGF0YSYmZC5fZGF0''@;'; put 'put ''YS5nZXRDb250ZW50KXt2YXIgXz1kLl9kYXRhLmdldENvbnRlbnQoKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIF8/TihfKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChfKX1yZXR1cm4gZC5jb250ZW50JiZkLnR5cGU/ZC5jb250ZW50Om51bGx9ZnVuY3Rpb24gTWkoZCxfKXtmb3IodmFy''@;'; put 'put ''IG09ZC5GdWxsUGF0aHN8fEZlKGQuZmlsZXMpLFQ9Xy50b0xvd2VyQ2FzZSgpLFA9VC5yZXBsYWNlKC9cLy9nLCJcXCIpLFE9MDtRPG0ubGVuZ3RoOysrUSl7dmFyIHNlPW1bUV0udG9Mb3dlckNhc2UoKTtpZihUPT1zZXx8UD09c2UpcmV0dXJuIGQuZmlsZXNbbVtRXV19cmV0dXJuIG51bGx9''@;'; put 'put ''ZnVuY3Rpb24gR2UoZCxfKXt2YXIgbT1NaShkLF8pO2lmKG51bGw9PW0pdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBmaWxlICIrXysiIGluIHppcCIpO3JldHVybiBtfWZ1bmN0aW9uIFV0KGQsXyxtKXtpZighbSlyZXR1cm4gZnVuY3Rpb24gcG4oZCl7cmV0dXJuIGQmJiIuYmluIj09''@;'; put 'put ''PWQubmFtZS5zbGljZSgtNCk/cHQoZCk6Tm4oZCl9KEdlKGQsXykpO2lmKCFfKXJldHVybiBudWxsO3RyeXtyZXR1cm4gVXQoZCxfKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gdnIoZCxfLG0pe2lmKCFtKXJldHVybiBObihHZShkLF8pKTtpZighXylyZXR1cm4gbnVsbDt0cnl7cmV0''@;'; put 'put ''dXJuIHZyKGQsXyl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHh0KGQsXyxtKXtpZighbSlyZXR1cm4gcHQoR2UoZCxfKSk7aWYoIV8pcmV0dXJuIG51bGw7dHJ5e3JldHVybiB4dChkLF8pfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiB6bihkLF8sbSl7ZC5GdWxsUGF0aHM/YWUu''@;'; put 'put ''dXRpbHMuY2ZiX2FkZChkLF8sbSk6ZC5maWxlKF8sbSl9ZnVuY3Rpb24gdmkoKXtyZXR1cm4geW4/bmV3IHluOmFlLnV0aWxzLmNmYl9uZXcoKX1mdW5jdGlvbiBycihkLF8pe3ZhciBtO2lmKHluKXN3aXRjaChfLnR5cGUpe2Nhc2UiYmFzZTY0IjptPW5ldyB5bihkLHtiYXNlNjQ6ITB9KTti''@;'; put 'put ''cmVhaztjYXNlImJpbmFyeSI6Y2FzZSJhcnJheSI6bT1uZXcgeW4oZCx7YmFzZTY0OiExfSk7YnJlYWs7Y2FzZSJidWZmZXIiOm09bmV3IHluKGQpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK18udHlwZSl9ZWxzZSBzd2l0Y2goXy50eXBlKXtj''@;'; put 'put ''YXNlImJhc2U2NCI6bT1hZS5yZWFkKGQse3R5cGU6ImJhc2U2NCJ9KTticmVhaztjYXNlImJpbmFyeSI6bT1hZS5yZWFkKGQse3R5cGU6ImJpbmFyeSJ9KTticmVhaztjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6bT1hZS5yZWFkKGQse3R5cGU6ImJ1ZmZlciJ9KTticmVhaztkZWZhdWx0OnRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitfLnR5cGUpfXJldHVybiBtfWZ1bmN0aW9uIGhyKGQsXyl7aWYoIi8iPT1kLmNoYXJBdCgwKSlyZXR1cm4gZC5zbGljZSgxKTt2YXIgbT1fLnNwbGl0KCIvIik7Ii8iIT1fLnNsaWNlKC0xKSYmbS5wb3AoKTtmb3IodmFyIFQ9ZC5z''@;'; put 'put ''cGxpdCgiLyIpOzAhPT1ULmxlbmd0aDspe3ZhciBQPVQuc2hpZnQoKTsiLi4iPT09UD9tLnBvcCgpOiIuIiE9PVAmJm0ucHVzaChQKX1yZXR1cm4gbS5qb2luKCIvIil9dHlwZW9mIEpTWmlwU3luYzwidSImJih5bj1KU1ppcFN5bmMpLGZlLmV4cG9ydHMmJnR5cGVvZiB5bj4idSImJih5bj1o''@;'; put 'put ''KDMxNzkpKTt2YXIgcG89Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz5cclxuJyx2bj0vKD86W14iXHM/PlwvXSspXHMqPVxzKigoPzoiKSg/OlteIl0qPykoPzoiKXwoPzonKSg/OlteJ10qPykoPzonKXwoPzpbXiciPlxzXSspKS9nLEJu''@;'; put 'put ''PS88W1wvXD9dP1thLXpBLVowLTk6Xy1dKyg/OlxzK1teIlxzPz5cL10rXHMqPVxzKig/OiJbXiJdKiJ8J1teJ10qJ3xbXiciPlxzPV0rKSkqXHM/W1wvXD9dPz4vZztwby5tYXRjaChCbil8fChCbj0vPFtePl0qPi9nKTt2YXIgamE9Lzxcdyo6Lyxqbz0vPChcLz8pXHcrOi87ZnVuY3Rpb24g''@;'; put 'put ''WHIoZCxfLG0pe2Zvcih2YXIgVD17fSxQPTAsUT0wO1AhPT1kLmxlbmd0aCYmMzIhPT0oUT1kLmNoYXJDb2RlQXQoUCkpJiYxMCE9PVEmJjEzIT09UTsrK1ApO2lmKF98fChUWzBdPWQuc2xpY2UoMCxQKSksUD09PWQubGVuZ3RoKXJldHVybiBUO3ZhciBzZT1kLm1hdGNoKHZuKSxvZT0wLGRl''@;'; put 'put ''PSIiLExlPTAsTmU9IiIsQmU9IiIsWmU9MTtpZihzZSlmb3IoTGU9MDtMZSE9c2UubGVuZ3RoOysrTGUpe2ZvcihCZT1zZVtMZV0sUT0wO1EhPUJlLmxlbmd0aCYmNjEhPT1CZS5jaGFyQ29kZUF0KFEpOysrUSk7Zm9yKE5lPUJlLnNsaWNlKDAsUSkudHJpbSgpOzMyPT1CZS5jaGFyQ29kZUF0''@;'; put 'put ''KFErMSk7KSsrUTtmb3IoWmU9MzQ9PShQPUJlLmNoYXJDb2RlQXQoUSsxKSl8fDM5PT1QPzE6MCxkZT1CZS5zbGljZShRKzErWmUsQmUubGVuZ3RoLVplKSxvZT0wO29lIT1OZS5sZW5ndGgmJjU4IT09TmUuY2hhckNvZGVBdChvZSk7KytvZSk7aWYob2U9PT1OZS5sZW5ndGgpTmUuaW5kZXhP''@;'; put 'put ''ZigiXyIpPjAmJihOZT1OZS5zbGljZSgwLE5lLmluZGV4T2YoIl8iKSkpLFRbTmVdPWRlLG18fChUW05lLnRvTG93ZXJDYXNlKCldPWRlKTtlbHNle3ZhciBudD0oNT09PW9lJiYieG1sbnMiPT09TmUuc2xpY2UoMCw1KT8ieG1sbnMiOiIiKStOZS5zbGljZShvZSsxKTtpZihUW250XSYmImV4''@;'; put 'put ''dCI9PU5lLnNsaWNlKG9lLTMsb2UpKWNvbnRpbnVlO1RbbnRdPWRlLG18fChUW250LnRvTG93ZXJDYXNlKCldPWRlKX19cmV0dXJuIFR9ZnVuY3Rpb24gZWEoZCl7cmV0dXJuIGQucmVwbGFjZShqbywiPCQxIil9dmFyIHJhPXsiJnF1b3Q7IjonIicsIiZhcG9zOyI6IiciLCImZ3Q7IjoiPiIs''@;'; put 'put ''IiZsdDsiOiI8IiwiJmFtcDsiOiImIn0sY2E9Y2UocmEpLENpPWZ1bmN0aW9uKCl7dmFyIGQ9LyYoPzpxdW90fGFwb3N8Z3R8bHR8YW1wfCN4PyhbXGRhLWZBLUZdKykpOy9naSxfPS9feChbXGRhLWZBLUZdezR9KV8vZ2k7cmV0dXJuIGZ1bmN0aW9uIG0oVCl7dmFyIFA9VCsiIixRPVAuaW5k''@;'; put 'put ''ZXhPZigiPCFbQ0RBVEFbIik7aWYoLTE9PVEpcmV0dXJuIFAucmVwbGFjZShkLGZ1bmN0aW9uKG9lLGRlKXtyZXR1cm4gcmFbb2VdfHxTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGRlLG9lLmluZGV4T2YoIngiKT4tMT8xNjoxMCkpfHxvZX0pLnJlcGxhY2UoXyxmdW5jdGlvbihvZSxk''@;'; put 'put ''ZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoZGUsMTYpKX0pO3ZhciBzZT1QLmluZGV4T2YoIl1dPiIpO3JldHVybiBtKFAuc2xpY2UoMCxRKSkrUC5zbGljZShRKzksc2UpK20oUC5zbGljZShzZSszKSl9fSgpLGhvPS9bJjw+JyJdL2csTWE9L1tcdTAwMDAtXHUwMDA4''@;'; put 'put ''XHUwMDBiLVx1MDAxZl0vZyxrcz0vX3hbMC05YS1mQS1GXXs0fV8vZztmdW5jdGlvbiBCaShkKXtyZXR1cm4oZCsiIikucmVwbGFjZShrcywiX3gwMDVGJCYiKS5yZXBsYWNlKGhvLGZ1bmN0aW9uKG0pe3JldHVybiBjYVttXX0pLnJlcGxhY2UoTWEsZnVuY3Rpb24obSl7cmV0dXJuIl94Iiso''@;'; put 'put ''IjAwMCIrbS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpKyJfIn0pfWZ1bmN0aW9uIHRhKGQpe3JldHVybiBCaShkKS5yZXBsYWNlKC9cbi9nLCJfeDAwMGFfIil9ZnVuY3Rpb24gTXIoZCl7cmV0dXJuIEJpKGQpLnJlcGxhY2UoLyAvZywiX3gwMDIwXyIpfXZhciBGcz0v''@;'; put 'put ''W1x1MDAwMC1cdTAwMWZdL2c7ZnVuY3Rpb24gJGkoZCl7cmV0dXJuKGQrIiIpLnJlcGxhY2UoaG8sZnVuY3Rpb24obSl7cmV0dXJuIGNhW21dfSkucmVwbGFjZSgvXG4vZywiPGJyLz4iKS5yZXBsYWNlKEZzLGZ1bmN0aW9uKG0pe3JldHVybiImI3giKygiMDAwIittLmNoYXJDb2RlQXQoMCku''@;'; put 'put ''dG9TdHJpbmcoMTYpKS5zbGljZSgtNCkrIjsifSl9ZnVuY3Rpb24gX3MoZCl7cmV0dXJuKGQrIiIpLnJlcGxhY2UoaG8sZnVuY3Rpb24obSl7cmV0dXJuIGNhW21dfSkucmVwbGFjZShGcyxmdW5jdGlvbihtKXtyZXR1cm4iJiN4IittLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBw''@;'; put 'put ''ZXJDYXNlKCkrIjsifSl9dmFyIGpzPWZ1bmN0aW9uKCl7dmFyIGQ9LyYjKFxkKyk7L2c7ZnVuY3Rpb24gXyhtLFQpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KFQsMTApKX1yZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIFQucmVwbGFjZShkLF8pfX0oKSxDbD1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBmdW5jdGlvbihfKXtyZXR1cm4gXy5yZXBsYWNlKC8oXHJcbnxbXHJcbl0pL2csIiYjMTA7Iil9fSgpO2Z1bmN0aW9uIFRpKGQpe3N3aXRjaChkKXtjYXNlIDE6Y2FzZSEwOmNhc2UiMSI6Y2FzZSJ0cnVlIjpjYXNlIlRSVUUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9''@;'; put 'put ''fXZhciBXbj1mdW5jdGlvbihfKXtmb3IodmFyIG09IiIsVD0wLFA9MCxRPTAsc2U9MCxvZT0wLGRlPTA7VDxfLmxlbmd0aDspKFA9Xy5jaGFyQ29kZUF0KFQrKykpPDEyOD9tKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFApOihRPV8uY2hhckNvZGVBdChUKyspLFA+MTkxJiZQPDIyND8ob2U9KDMx''@;'; put 'put ''JlApPDw2LG9lfD02MyZRLG0rPVN0cmluZy5mcm9tQ2hhckNvZGUob2UpKTooc2U9Xy5jaGFyQ29kZUF0KFQrKyksUDwyNDA/bSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmUCk8PDEyfCg2MyZRKTw8Nnw2MyZzZSk6KGRlPSgoNyZQKTw8MTh8KDYzJlEpPDwxMnwoNjMmc2UpPDw2fDYzJihv''@;'; put 'put ''ZT1fLmNoYXJDb2RlQXQoVCsrKSkpLTY1NTM2LG0rPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKGRlPj4+MTAmMTAyMykpLG0rPVN0cmluZy5mcm9tQ2hhckNvZGUoNTYzMjArKDEwMjMmZGUpKSkpKTtyZXR1cm4gbX0sUWg9ZnVuY3Rpb24oZCl7Zm9yKHZhciBfPVtdLG09MCxUPTAsUD0w''@;'; put 'put ''O208ZC5sZW5ndGg7KXN3aXRjaChUPWQuY2hhckNvZGVBdChtKyspLCEwKXtjYXNlIFQ8MTI4Ol8ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKFQpKTticmVhaztjYXNlIFQ8MjA0ODpfLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxOTIrKFQ+PjYpKSksXy5wdXNoKFN0cmluZy5mcm9tQ2hh''@;'; put 'put ''ckNvZGUoMTI4Kyg2MyZUKSkpO2JyZWFrO2Nhc2UgVD49NTUyOTYmJlQ8NTczNDQ6VC09NTUyOTYsUD1kLmNoYXJDb2RlQXQobSsrKS01NjMyMCsoVDw8MTApLF8ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDI0MCsoUD4+MTgmNykpKSxfLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxNDQr''@;'; put 'put ''KFA+PjEyJjYzKSkpLF8ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoUD4+NiY2MykpKSxfLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJlApKSk7YnJlYWs7ZGVmYXVsdDpfLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgyMjQrKFQ+PjEyKSkpLF8ucHVzaChTdHJpbmcu''@;'; put 'put ''ZnJvbUNoYXJDb2RlKDEyOCsoVD4+NiY2MykpKSxfLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJlQpKSl9cmV0dXJuIF8uam9pbigiIil9O2lmKEllKXt2YXIgZGM9ZnVuY3Rpb24oXyl7dmFyIFQsUCxkZSxtPUJ1ZmZlci5hbGxvYygyKl8ubGVuZ3RoKSxRPTEsc2U9MCxvZT0w''@;'; put 'put ''O2ZvcihQPTA7UDxfLmxlbmd0aDtQKz1RKVE9MSwoZGU9Xy5jaGFyQ29kZUF0KFApKTwxMjg/VD1kZTpkZTwyMjQ/KFQ9NjQqKDMxJmRlKSsoNjMmXy5jaGFyQ29kZUF0KFArMSkpLFE9Mik6ZGU8MjQwPyhUPTQwOTYqKDE1JmRlKSs2NCooNjMmXy5jaGFyQ29kZUF0KFArMSkpKyg2MyZfLmNo''@;'; put 'put ''YXJDb2RlQXQoUCsyKSksUT0zKTooUT00LFQ9MjYyMTQ0Kig3JmRlKSs0MDk2Kig2MyZfLmNoYXJDb2RlQXQoUCsxKSkrNjQqKDYzJl8uY2hhckNvZGVBdChQKzIpKSsoNjMmXy5jaGFyQ29kZUF0KFArMykpLG9lPTU1Mjk2KygoVC09NjU1MzYpPj4+MTAmMTAyMyksVD01NjMyMCsoMTAyMyZU''@;'; put 'put ''KSksMCE9PW9lJiYobVtzZSsrXT0yNTUmb2UsbVtzZSsrXT1vZT4+Pjgsb2U9MCksbVtzZSsrXT1UJTI1NixtW3NlKytdPVQ+Pj44O3JldHVybiBtLnNsaWNlKDAsc2UpLnRvU3RyaW5nKCJ1Y3MyIil9LElsPSJmb28gYmFyIGJhelx4ZTJceDk4XHg4M1x4ZjBceDlmXHg4ZFx4YTMiO1duKEls''@;'; put 'put ''KT09ZGMoSWwpJiYoV249ZGMpO3ZhciBnMj1mdW5jdGlvbihfKXtyZXR1cm4ga2UoXywiYmluYXJ5IikudG9TdHJpbmcoInV0ZjgiKX07V24oSWwpPT1nMihJbCkmJihXbj1nMiksUWg9ZnVuY3Rpb24oZCl7cmV0dXJuIGtlKGQsInV0ZjgiKS50b1N0cmluZygiYmluYXJ5Iil9fXZhciBkLExj''@;'; put 'put ''PWZ1bmN0aW9uKCl7dmFyIGQ9e307cmV0dXJuIGZ1bmN0aW9uKG0sVCl7dmFyIFA9bSsifCIrKFR8fCIiKTtyZXR1cm4gZFtQXT9kW1BdOmRbUF09bmV3IFJlZ0V4cCgiPCg/Olxcdys6KT8iK20rJyg/OiB4bWw6c3BhY2U9InByZXNlcnZlIik/KD86W14+XSopPihbXFxzXFxTXSo/KTwvKD86''@;'; put 'put ''XFx3KzopPycrbSsiPiIsVHx8IiIpfX0oKSxVcz0oZD1bWyJuYnNwIiwiICJdLFsibWlkZG90IiwiXHhiNyJdLFsicXVvdCIsJyInXSxbImFwb3MiLCInIl0sWyJndCIsIj4iXSxbImx0IiwiPCJdLFsiYW1wIiwiJiJdXS5tYXAoZnVuY3Rpb24oXyl7cmV0dXJuW25ldyBSZWdFeHAoIiYiK19b''@;'; put 'put ''MF0rIjsiLCJpZyIpLF9bMV1dfSksZnVuY3Rpb24obSl7Zm9yKHZhciBUPW0ucmVwbGFjZSgvXltcdFxuXHIgXSsvLCIiKS5yZXBsYWNlKC9bXHRcblxyIF0rJC8sIiIpLnJlcGxhY2UoL1tcdFxuXHIgXSsvZywiICIpLnJlcGxhY2UoLzxccypbYkJdW3JSXVxzKlwvPz4vZywiXG4iKS5yZXBs''@;'; put 'put ''YWNlKC88W14+XSo+L2csIiIpLFA9MDtQPGQubGVuZ3RoOysrUClUPVQucmVwbGFjZShkW1BdWzBdLGRbUF1bMV0pO3JldHVybiBUfSksc3A9ZnVuY3Rpb24oKXt2YXIgZD17fTtyZXR1cm4gZnVuY3Rpb24obSl7cmV0dXJuIHZvaWQgMCE9PWRbbV0/ZFttXTpkW21dPW5ldyBSZWdFeHAoIjwo''@;'; put 'put ''Pzp2dDopPyIrbSsiPihbXFxzXFxTXSo/KTwvKD86dnQ6KT8iK20rIj4iLCJnIil9fSgpLFJzPS88XC8/KD86dnQ6KT92YXJpYW50Pi9nLEwwPS88KD86dnQ6KShbXj5dKik+KFtcc1xTXSopPC87ZnVuY3Rpb24gSnUoZCxfKXt2YXIgbT1YcihkKSxUPWQubWF0Y2goc3AobS5iYXNlVHlwZSkp''@;'; put 'put ''fHxbXSxQPVtdO2lmKFQubGVuZ3RoIT1tLnNpemUpe2lmKF8uV1RGKXRocm93IG5ldyBFcnJvcigidW5leHBlY3RlZCB2ZWN0b3IgbGVuZ3RoICIrVC5sZW5ndGgrIiAhPSAiK20uc2l6ZSk7cmV0dXJuIFB9cmV0dXJuIFQuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgc2U9US5yZXBsYWNlKFJz''@;'; put 'put ''LCIiKS5tYXRjaChMMCk7c2UmJlAucHVzaCh7djpXbihzZVsyXSksdDpzZVsxXX0pfSksUH12YXIgeWQ9LyheXHN8XHMkfFxuKS87ZnVuY3Rpb24gVW8oZCxfKXtyZXR1cm4iPCIrZCsoXy5tYXRjaCh5ZCk/JyB4bWw6c3BhY2U9InByZXNlcnZlIic6IiIpKyI+IitfKyI8LyIrZCsiPiJ9ZnVu''@;'; put 'put ''Y3Rpb24gZmEoZCl7cmV0dXJuIEZlKGQpLm1hcChmdW5jdGlvbihfKXtyZXR1cm4iICIrXysnPSInK2RbX10rJyInfSkuam9pbigiIil9ZnVuY3Rpb24gVnIoZCxfLG0pe3JldHVybiI8IitkKyhudWxsIT1tP2ZhKG0pOiIiKSsobnVsbCE9Xz8oXy5tYXRjaCh5ZCk/JyB4bWw6c3BhY2U9InBy''@;'; put 'put ''ZXNlcnZlIic6IiIpKyI+IitfKyI8LyIrZDoiLyIpKyI+In1mdW5jdGlvbiBhMChkLF8pe3RyeXtyZXR1cm4gZC50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuXGQqLywiIil9Y2F0Y2gobSl7aWYoXyl0aHJvdyBtfXJldHVybiIifXZhciBtaSxldSxVYT17ZGM6Imh0dHA6Ly9wdXJsLm9yZy9k''@;'; put 'put ''Yy9lbGVtZW50cy8xLjEvIixkY3Rlcm1zOiJodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvIixkY21pdHlwZToiaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlLyIsbXg6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL21hYy9leGNlbC8yMDA4L21haW4iLHI6Imh0dHA6Ly9z''@;'; put 'put ''Y2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMiLHNqczoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9zaGVldGpzL2NvcmUtcHJvcGVydGllcyIsdnQ6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxm''@;'; put 'put ''b3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2RvY1Byb3BzVlR5cGVzIix4c2k6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIix4c2Q6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIixtYWluOlsiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZv''@;'; put 'put ''cm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIiwiaHR0cDovL3B1cmwub2NsYy5vcmcvb294bWwvc3ByZWFkc2hlZXRtbC9tYWluIiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvZXhjZWwvMjAwNi9tYWluIiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNv''@;'; put 'put ''bS9vZmZpY2UvZXhjZWwvMjAwNi8yIl19LFZ1X289InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIsVnVfeD0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6ZXhjZWwiLFZ1X3NzPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpzcHJlYWRz''@;'; put 'put ''aGVldCIsVnVfdj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiLG5oPWZ1bmN0aW9uKGQpe2Zvcih2YXIgXz1bXSxUPTA7VDxkWzBdLmxlbmd0aDsrK1QpaWYoZFswXVtUXSlmb3IodmFyIFA9MCxRPWRbMF1bVF0ubGVuZ3RoO1A8UTtQKz0xMDI0MClfLnB1c2guYXBwbHkoXyxkWzBd''@;'; put 'put ''W1RdLnNsaWNlKFAsUCsxMDI0MCkpO3JldHVybiBffSx3Zz1uaCxKYz1mdW5jdGlvbihkLF8sbSl7Zm9yKHZhciBUPVtdLFA9XztQPG07UCs9MilULnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShFcihkLFApKSk7cmV0dXJuIFQuam9pbigiIikucmVwbGFjZShELCIiKX0sZ2Y9SmMsbHA9ZnVu''@;'; put 'put ''Y3Rpb24oZCxfLG0pe2Zvcih2YXIgVD1bXSxQPV87UDxfK207KytQKVQucHVzaCgoIjAiK2RbUF0udG9TdHJpbmcoMTYpKS5zbGljZSgtMikpO3JldHVybiBULmpvaW4oIiIpfSxEbD1scCxFbz1mdW5jdGlvbihkLF8sbSl7Zm9yKHZhciBUPVtdLFA9XztQPG07UCsrKVQucHVzaChTdHJpbmcu''@;'; put 'put ''ZnJvbUNoYXJDb2RlKGxzKGQsUCkpKTtyZXR1cm4gVC5qb2luKCIiKX0sQnU9RW8sTjE9ZnVuY3Rpb24oZCxfKXt2YXIgbT1RYShkLF8pO3JldHVybiBtPjA/RW8oZCxfKzQsXys0K20tMSk6IiJ9LFJ1PU4xLGhjPWZ1bmN0aW9uKGQsXyl7dmFyIG09UWEoZCxfKTtyZXR1cm4gbT4wP0VvKGQs''@;'; put 'put ''Xys0LF8rNCttLTEpOiIifSxlZD1oYyxKbj1mdW5jdGlvbihkLF8pe3ZhciBtPTIqUWEoZCxfKTtyZXR1cm4gbT4wP0VvKGQsXys0LF8rNCttLTEpOiIifSxjbD1KbjttaT1ldT1mdW5jdGlvbihfLG0pe3ZhciBUPVFhKF8sbSk7cmV0dXJuIFQ+MD9KYyhfLG0rNCxtKzQrVCk6IiJ9O3ZhciBp''@;'; put 'put ''cixnaSxTbD1mdW5jdGlvbihkLF8pe3ZhciBtPVFhKGQsXyk7cmV0dXJuIG0+MD9FbyhkLF8rNCxfKzQrbSk6IiJ9LGNuPVNsO2lyPWdpPWZ1bmN0aW9uKGQsXyl7cmV0dXJuIGZ1bmN0aW9uIExtKGQsXyl7Zm9yKHZhciBtPTEtMiooZFtfKzddPj4+NyksVD0oKDEyNyZkW18rN10pPDw0KSso''@;'; put 'put ''ZFtfKzZdPj4+NCYxNSksUD0xNSZkW18rNl0sUT01O1E+PTA7LS1RKVA9MjU2KlArZFtfK1FdO3JldHVybiAyMDQ3PT1UPzA9PVA/bSooMS8wKTpOYU46KDA9PVQ/VD0tMTAyMjooVC09MTAyMyxQKz1NYXRoLnBvdygyLDUyKSksbSpNYXRoLnBvdygyLFQtNTIpKlApfShkLF8pfTt2YXIgd289''@;'; put 'put ''ZnVuY3Rpb24oXyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoXyl9O0llJiYoSmM9ZnVuY3Rpb24oZCxfLG0pe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoZCk/ZC50b1N0cmluZygidXRmMTZsZSIsXyxtKS5yZXBsYWNlKEQsIiIpOmdmKGQsXyxtKX0sbHA9ZnVuY3Rpb24oZCxfLG0pe3JldHVybiBC''@;'; put 'put ''dWZmZXIuaXNCdWZmZXIoZCk/ZC50b1N0cmluZygiaGV4IixfLF8rbSk6RGwoZCxfLG0pfSxOMT1mdW5jdGlvbihfLG0pe2lmKCFCdWZmZXIuaXNCdWZmZXIoXykpcmV0dXJuIFJ1KF8sbSk7dmFyIFQ9Xy5yZWFkVUludDMyTEUobSk7cmV0dXJuIFQ+MD9fLnRvU3RyaW5nKCJ1dGY4IixtKzQs''@;'; put 'put ''bSs0K1QtMSk6IiJ9LGhjPWZ1bmN0aW9uKF8sbSl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihfKSlyZXR1cm4gZWQoXyxtKTt2YXIgVD1fLnJlYWRVSW50MzJMRShtKTtyZXR1cm4gVD4wP18udG9TdHJpbmcoInV0ZjgiLG0rNCxtKzQrVC0xKToiIn0sSm49ZnVuY3Rpb24oXyxtKXtpZighQnVmZmVy''@;'; put 'put ''LmlzQnVmZmVyKF8pKXJldHVybiBjbChfLG0pO3ZhciBUPTIqXy5yZWFkVUludDMyTEUobSk7cmV0dXJuIF8udG9TdHJpbmcoInV0ZjE2bGUiLG0rNCxtKzQrVC0xKX0sbWk9ZnVuY3Rpb24oXyxtKXtpZighQnVmZmVyLmlzQnVmZmVyKF8pKXJldHVybiBldShfLG0pO3ZhciBUPV8ucmVhZFVJ''@;'; put 'put ''bnQzMkxFKG0pO3JldHVybiBfLnRvU3RyaW5nKCJ1dGYxNmxlIixtKzQsbSs0K1QpfSxTbD1mdW5jdGlvbihfLG0pe2lmKCFCdWZmZXIuaXNCdWZmZXIoXykpcmV0dXJuIGNuKF8sbSk7dmFyIFQ9Xy5yZWFkVUludDMyTEUobSk7cmV0dXJuIF8udG9TdHJpbmcoInV0ZjgiLG0rNCxtKzQrVCl9''@;'; put 'put ''LEVvPWZ1bmN0aW9uKF8sbSxUKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKF8pP18udG9TdHJpbmcoInV0ZjgiLG0sVCk6QnUoXyxtLFQpfSxuaD1mdW5jdGlvbihkKXtyZXR1cm4gZFswXS5sZW5ndGg+MCYmQnVmZmVyLmlzQnVmZmVyKGRbMF1bMF0pP0J1ZmZlci5jb25jYXQoZFswXSk6d2co''@;'; put 'put ''ZCl9LEc9ZnVuY3Rpb24oZCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihkWzBdKT9CdWZmZXIuY29uY2F0KGQpOltdLmNvbmNhdC5hcHBseShbXSxkKX0saXI9ZnVuY3Rpb24oXyxtKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKF8pP18ucmVhZERvdWJsZUxFKG0pOmdpKF8sbSl9LHdvPWZ1bmN0''@;'; put 'put ''aW9uKF8pe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoXyl8fEFycmF5LmlzQXJyYXkoXyl9KSx0eXBlb2YgY3B0YWJsZTwidSImJihKYz1mdW5jdGlvbihkLF8sbSl7cmV0dXJuIGNwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsZC5zbGljZShfLG0pKS5yZXBsYWNlKEQsIiIpfSxFbz1mdW5jdGlv''@;'; put 'put ''bihkLF8sbSl7cmV0dXJuIGNwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLGQuc2xpY2UoXyxtKSl9LE4xPWZ1bmN0aW9uKGQsXyl7dmFyIG09UWEoZCxfKTtyZXR1cm4gbT4wP2NwdGFibGUudXRpbHMuZGVjb2RlKHcsZC5zbGljZShfKzQsXys0K20tMSkpOiIifSxoYz1mdW5jdGlvbihkLF8p''@;'; put 'put ''e3ZhciBtPVFhKGQsXyk7cmV0dXJuIG0+MD9jcHRhYmxlLnV0aWxzLmRlY29kZShDLGQuc2xpY2UoXys0LF8rNCttLTEpKToiIn0sSm49ZnVuY3Rpb24oZCxfKXt2YXIgbT0yKlFhKGQsXyk7cmV0dXJuIG0+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLGQuc2xpY2UoXys0LF8rNCttLTEp''@;'; put 'put ''KToiIn0sbWk9ZnVuY3Rpb24oZCxfKXt2YXIgbT1RYShkLF8pO3JldHVybiBtPjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxkLnNsaWNlKF8rNCxfKzQrbSkpOiIifSxTbD1mdW5jdGlvbihkLF8pe3ZhciBtPVFhKGQsXyk7cmV0dXJuIG0+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSg2NTAw''@;'; put 'put ''MSxkLnNsaWNlKF8rNCxfKzQrbSkpOiIifSk7dmFyIGxzPWZ1bmN0aW9uKGQsXyl7cmV0dXJuIGRbX119LEVyPWZ1bmN0aW9uKGQsXyl7cmV0dXJuIDI1NipkW18rMV0rZFtfXX0sdGM9ZnVuY3Rpb24oZCxfKXt2YXIgbT0yNTYqZFtfKzFdK2RbX107cmV0dXJuIG08MzI3Njg/bTotMSooNjU1''@;'; put 'put ''MzUtbSsxKX0sUWE9ZnVuY3Rpb24oZCxfKXtyZXR1cm4gZFtfKzNdKigxPDwyNCkrKGRbXysyXTw8MTYpKyhkW18rMV08PDgpK2RbX119LHVsPWZ1bmN0aW9uKGQsXyl7cmV0dXJuIGRbXyszXTw8MjR8ZFtfKzJdPDwxNnxkW18rMV08PDh8ZFtfXX0scHM9ZnVuY3Rpb24oZCxfKXtyZXR1cm4g''@;'; put 'put ''ZFtfXTw8MjR8ZFtfKzFdPDwxNnxkW18rMl08PDh8ZFtfKzNdfTtmdW5jdGlvbiB0dShkLF8pe3ZhciBULFAsc2Usb2UsZGUsTGUsbT0iIixRPVtdO3N3aXRjaChfKXtjYXNlImRiY3MiOmlmKExlPXRoaXMubCxJZSYmQnVmZmVyLmlzQnVmZmVyKHRoaXMpKW09dGhpcy5zbGljZSh0aGlzLmws''@;'; put 'put ''dGhpcy5sKzIqZCkudG9TdHJpbmcoInV0ZjE2bGUiKTtlbHNlIGZvcihkZT0wO2RlPGQ7KytkZSltKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEVyKHRoaXMsTGUpKSxMZSs9MjtkKj0yO2JyZWFrO2Nhc2UidXRmOCI6bT1Fbyh0aGlzLHRoaXMubCx0aGlzLmwrZCk7YnJlYWs7Y2FzZSJ1dGYxNmxl''@;'; put 'put ''IjptPUpjKHRoaXMsdGhpcy5sLHRoaXMubCsoZCo9MikpO2JyZWFrO2Nhc2Uid3N0ciI6aWYoISh0eXBlb2YgY3B0YWJsZTwidSIpKXJldHVybiB0dS5jYWxsKHRoaXMsZCwiZGJjcyIpO209Y3B0YWJsZS51dGlscy5kZWNvZGUoQyx0aGlzLnNsaWNlKHRoaXMubCx0aGlzLmwrMipkKSksZCo9''@;'; put 'put ''MjticmVhaztjYXNlImxwc3RyLWFuc2kiOm09TjEodGhpcyx0aGlzLmwpLGQ9NCtRYSh0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHN0ci1jcCI6bT1oYyh0aGlzLHRoaXMubCksZD00K1FhKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwd3N0ciI6bT1Kbih0aGlzLHRoaXMubCksZD00KzIq''@;'; put 'put ''UWEodGhpcyx0aGlzLmwpO2JyZWFrO2Nhc2UibHBwNCI6ZD00K1FhKHRoaXMsdGhpcy5sKSxtPW1pKHRoaXMsdGhpcy5sKSwyJmQmJihkKz0yKTticmVhaztjYXNlIjhscHA0IjpkPTQrUWEodGhpcyx0aGlzLmwpLG09U2wodGhpcyx0aGlzLmwpLDMmZCYmKGQrPTQtKDMmZCkpO2JyZWFrO2Nh''@;'; put 'put ''c2UiY3N0ciI6Zm9yKGQ9MCxtPSIiOzAhPT0oc2U9bHModGhpcyx0aGlzLmwrZCsrKSk7KVEucHVzaChXKHNlKSk7bT1RLmpvaW4oIiIpO2JyZWFrO2Nhc2UiX3dzdHIiOmZvcihkPTAsbT0iIjswIT09KHNlPUVyKHRoaXMsdGhpcy5sK2QpKTspUS5wdXNoKFcoc2UpKSxkKz0yO2QrPTIsbT1R''@;'; put 'put ''LmpvaW4oIiIpO2JyZWFrO2Nhc2UiZGJjcy1jb250Ijpmb3IobT0iIixMZT10aGlzLmwsZGU9MDtkZTxkOysrZGUpe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihMZSkpcmV0dXJuIHNlPWxzKHRoaXMsTGUpLHRoaXMubD1MZSsxLG9lPXR1LmNhbGwodGhpcyxkLWRlLHNl''@;'; put 'put ''PyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKSxRLmpvaW4oIiIpK29lO1EucHVzaChXKEVyKHRoaXMsTGUpKSksTGUrPTJ9bT1RLmpvaW4oIiIpLGQqPTI7YnJlYWs7Y2FzZSJjcHN0ciI6aWYodHlwZW9mIGNwdGFibGU8InUiKXttPWNwdGFibGUudXRpbHMuZGVjb2RlKEMsdGhpcy5zbGljZSh0''@;'; put 'put ''aGlzLmwsdGhpcy5sK2QpKTticmVha31jYXNlInNiY3MtY29udCI6Zm9yKG09IiIsTGU9dGhpcy5sLGRlPTA7ZGUhPWQ7KytkZSl7aWYodGhpcy5sZW5zJiYtMSE9PXRoaXMubGVucy5pbmRleE9mKExlKSlyZXR1cm4gc2U9bHModGhpcyxMZSksdGhpcy5sPUxlKzEsb2U9dHUuY2FsbCh0aGlz''@;'; put 'put ''LGQtZGUsc2U/ImRiY3MtY29udCI6InNiY3MtY29udCIpLFEuam9pbigiIikrb2U7US5wdXNoKFcobHModGhpcyxMZSkpKSxMZSs9MX1tPVEuam9pbigiIik7YnJlYWs7ZGVmYXVsdDpzd2l0Y2goZCl7Y2FzZSAxOnJldHVybiBUPWxzKHRoaXMsdGhpcy5sKSx0aGlzLmwrKyxUO2Nhc2UgMjpy''@;'; put 'put ''ZXR1cm4gVD0oImkiPT09Xz90YzpFcikodGhpcyx0aGlzLmwpLHRoaXMubCs9MixUO2Nhc2UgNDpjYXNlLTQ6cmV0dXJuImkiIT09XyYmMTI4JnRoaXNbdGhpcy5sKzNdPyhQPVFhKHRoaXMsdGhpcy5sKSx0aGlzLmwrPTQsUCk6KFQ9KGQ+MD91bDpwcykodGhpcyx0aGlzLmwpLHRoaXMubCs9''@;'; put 'put ''NCxUKTtjYXNlIDg6Y2FzZS04OmlmKCJmIj09PV8pcmV0dXJuIFA9OD09ZD9pcih0aGlzLHRoaXMubCk6aXIoW3RoaXNbdGhpcy5sKzddLHRoaXNbdGhpcy5sKzZdLHRoaXNbdGhpcy5sKzVdLHRoaXNbdGhpcy5sKzRdLHRoaXNbdGhpcy5sKzNdLHRoaXNbdGhpcy5sKzJdLHRoaXNbdGhpcy5s''@;'; put 'put ''KzFdLHRoaXNbdGhpcy5sKzBdXSwwKSx0aGlzLmwrPTgsUDtkPTg7Y2FzZSAxNjptPWxwKHRoaXMsdGhpcy5sLGQpfX1yZXR1cm4gdGhpcy5sKz1kLG19dmFyIGdzPWZ1bmN0aW9uKGQsXyxtKXtkW21dPTI1NSZfLGRbbSsxXT1fPj4+OCYyNTUsZFttKzJdPV8+Pj4xNiYyNTUsZFttKzNdPV8+''@;'; put 'put ''Pj4yNCYyNTV9LE9jPWZ1bmN0aW9uKGQsXyxtKXtkW21dPTI1NSZfLGRbbSsxXT1fPj44JjI1NSxkW20rMl09Xz4+MTYmMjU1LGRbbSszXT1fPj4yNCYyNTV9LExsPWZ1bmN0aW9uKGQsXyxtKXtkW21dPTI1NSZfLGRbbSsxXT1fPj4+OCYyNTV9O2Z1bmN0aW9uIEFoKGQsXyxtKXt2YXIgVD0w''@;'; put 'put ''LFA9MDtpZigiZGJjcyI9PT1tKXtmb3IoUD0wO1AhPV8ubGVuZ3RoOysrUClMbCh0aGlzLF8uY2hhckNvZGVBdChQKSx0aGlzLmwrMipQKTtUPTIqXy5sZW5ndGh9ZWxzZSBpZigic2JjcyI9PT1tKXtpZih0eXBlb2YgY3B0YWJsZTwidSImJjg3ND09dylmb3IoUD0wO1AhPV8ubGVuZ3RoOysr''@;'; put 'put ''UCl7dmFyIFE9Y3B0YWJsZS51dGlscy5lbmNvZGUodyxfLmNoYXJBdChQKSk7dGhpc1t0aGlzLmwrUF09UVswXX1lbHNlIGZvcihfPV8ucmVwbGFjZSgvW15ceDAwLVx4N0ZdL2csIl8iKSxQPTA7UCE9Xy5sZW5ndGg7KytQKXRoaXNbdGhpcy5sK1BdPTI1NSZfLmNoYXJDb2RlQXQoUCk7VD1f''@;'; put 'put ''Lmxlbmd0aH1lbHNle2lmKCJoZXgiPT09bSl7Zm9yKDtQPGQ7KytQKXRoaXNbdGhpcy5sKytdPXBhcnNlSW50KF8uc2xpY2UoMipQLDIqUCsyKSwxNil8fDA7cmV0dXJuIHRoaXN9aWYoInV0ZjE2bGUiPT09bSl7dmFyIHNlPU1hdGgubWluKHRoaXMubCtkLHRoaXMubGVuZ3RoKTtmb3IoUD0w''@;'; put 'put ''O1A8TWF0aC5taW4oXy5sZW5ndGgsZCk7KytQKXt2YXIgb2U9Xy5jaGFyQ29kZUF0KFApO3RoaXNbdGhpcy5sKytdPTI1NSZvZSx0aGlzW3RoaXMubCsrXT1vZT4+OH1mb3IoO3RoaXMubDxzZTspdGhpc1t0aGlzLmwrK109MDtyZXR1cm4gdGhpc31zd2l0Y2goZCl7Y2FzZSAxOlQ9MSx0aGlz''@;'; put 'put ''W3RoaXMubF09MjU1Jl87YnJlYWs7Y2FzZSAyOlQ9Mix0aGlzW3RoaXMubF09MjU1Jl8sdGhpc1t0aGlzLmwrMV09MjU1JihfPj4+PTgpO2JyZWFrO2Nhc2UgMzpUPTMsdGhpc1t0aGlzLmxdPTI1NSZfLHRoaXNbdGhpcy5sKzFdPTI1NSYoXz4+Pj04KSx0aGlzW3RoaXMubCsyXT0yNTUmKF8+''@;'; put 'put ''Pj49OCk7YnJlYWs7Y2FzZSA0OlQ9NCxncyh0aGlzLF8sdGhpcy5sKTticmVhaztjYXNlIDg6aWYoVD04LCJmIj09PW0peyFmdW5jdGlvbiB1MyhkLF8sbSl7dmFyIFQ9KF88MHx8MS9fPT0tMS8wPzE6MCk8PDcsUD0wLFE9MCxzZT1UPy1fOl87aXNGaW5pdGUoc2UpPzA9PXNlP1A9UT0wOihQ''@;'; put 'put ''PU1hdGguZmxvb3IoTWF0aC5sb2coc2UpL01hdGguTE4yKSxRPXNlKk1hdGgucG93KDIsNTItUCksUDw9LTEwMjMmJighaXNGaW5pdGUoUSl8fFE8TWF0aC5wb3coMiw1MikpP1A9LTEwMjI6KFEtPU1hdGgucG93KDIsNTIpLFArPTEwMjMpKTooUD0yMDQ3LFE9aXNOYU4oXyk/MjY5ODU6MCk7''@;'; put 'put ''Zm9yKHZhciBvZT0wO29lPD01Oysrb2UsUS89MjU2KWRbbStvZV09MjU1JlE7ZFttKzZdPSgxNSZQKTw8NHwxNSZRLGRbbSs3XT1QPj40fFR9KHRoaXMsXyx0aGlzLmwpO2JyZWFrfWNhc2UgMTY6YnJlYWs7Y2FzZS00OlQ9NCxPYyh0aGlzLF8sdGhpcy5sKX19cmV0dXJuIHRoaXMubCs9VCx0''@;'; put 'put ''aGlzfWZ1bmN0aW9uIEpoKGQsXyl7dmFyIG09bHAodGhpcyx0aGlzLmwsZC5sZW5ndGg+PjEpO2lmKG0hPT1kKXRocm93IG5ldyBFcnJvcihfKyJFeHBlY3RlZCAiK2QrIiBzYXcgIittKTt0aGlzLmwrPWQubGVuZ3RoPj4xfWZ1bmN0aW9uIE9sKGQsXyl7ZC5sPV8sZC5yZWFkX3NoaWZ0PXR1''@;'; put 'put ''LGQuY2hrPUpoLGQud3JpdGVfc2hpZnQ9QWh9ZnVuY3Rpb24gRWMoZCxfKXtkLmwrPV99ZnVuY3Rpb24gRnIoZCl7dmFyIF89WChkKTtyZXR1cm4gT2woXywwKSxffWZ1bmN0aW9uIEl1KGQsXyxtKXtpZihkKXt2YXIgVCxQLFE7T2woZCxkLmx8fDApO2Zvcih2YXIgc2U9ZC5sZW5ndGgsb2U9''@;'; put 'put ''MCxkZT0wO2QubDxzZTspezEyOCYob2U9ZC5yZWFkX3NoaWZ0KDEpKSYmKG9lPSgxMjcmb2UpKygoMTI3JmQucmVhZF9zaGlmdCgxKSk8PDcpKTt2YXIgTGU9Wjlbb2VdfHxaOVs2NTUzNV07Zm9yKFE9MTI3JihUPWQucmVhZF9zaGlmdCgxKSksUD0xO1A8NCYmMTI4JlQ7KytQKVErPSgxMjcm''@;'; put 'put ''KFQ9ZC5yZWFkX3NoaWZ0KDEpKSk8PDcqUDtkZT1kLmwrUTt2YXIgTmU9KExlLmZ8fEVjKShkLFEsbSk7aWYoZC5sPWRlLF8oTmUsTGUubixvZSkpcmV0dXJufX19ZnVuY3Rpb24gTWMoKXt2YXIgZD1bXSxfPUllPzI1NjoyMDQ4LG09ZnVuY3Rpb24oTGUpe3ZhciBOZT1GcihMZSk7cmV0dXJu''@;'; put 'put ''IE9sKE5lLDApLE5lfSxUPW0oXyksUD1mdW5jdGlvbigpe1QmJihULmxlbmd0aD5ULmwmJigoVD1ULnNsaWNlKDAsVC5sKSkubD1ULmxlbmd0aCksVC5sZW5ndGg+MCYmZC5wdXNoKFQpLFQ9bnVsbCl9LFE9ZnVuY3Rpb24oTGUpe3JldHVybiBUJiZMZTxULmxlbmd0aC1ULmw/VDooUCgpLFQ9''@;'; put 'put ''bShNYXRoLm1heChMZSsxLF8pKSl9O3JldHVybntuZXh0OlEscHVzaDpmdW5jdGlvbihMZSl7UCgpLG51bGw9PShUPUxlKS5sJiYoVC5sPVQubGVuZ3RoKSxRKF8pfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gUCgpLG5oKFtkXSl9LF9idWZzOmR9fWZ1bmN0aW9uIElpKGQsXyxtLFQpe3ZhciBR''@;'; put 'put ''LFA9K0JCW19dO2lmKCFpc05hTihQKSl7VHx8KFQ9WjlbUF0ucHx8KG18fFtdKS5sZW5ndGh8fDApLFE9MSsoUD49MTI4PzE6MCkrMSxUPj0xMjgmJisrUSxUPj0xNjM4NCYmKytRLFQ+PTIwOTcxNTImJisrUTt2YXIgc2U9ZC5uZXh0KFEpO1A8PTEyNz9zZS53cml0ZV9zaGlmdCgxLFApOihz''@;'; put 'put ''ZS53cml0ZV9zaGlmdCgxLDEyOCsoMTI3JlApKSxzZS53cml0ZV9zaGlmdCgxLFA+PjcpKTtmb3IodmFyIG9lPTA7NCE9b2U7KytvZSl7aWYoIShUPj0xMjgpKXtzZS53cml0ZV9zaGlmdCgxLFQpO2JyZWFrfXNlLndyaXRlX3NoaWZ0KDEsMTI4KygxMjcmVCkpLFQ+Pj03fVQ+MCYmd28obSkm''@;'; put 'put ''JmQucHVzaChtKX19ZnVuY3Rpb24gcmgoZCxfLG0pe3ZhciBUPVFyKGQpO2lmKF8ucz8oVC5jUmVsJiYoVC5jKz1fLnMuYyksVC5yUmVsJiYoVC5yKz1fLnMucikpOihULmNSZWwmJihULmMrPV8uYyksVC5yUmVsJiYoVC5yKz1fLnIpKSwhbXx8bS5iaWZmPDEyKXtmb3IoO1QuYz49MjU2OylU''@;'; put 'put ''LmMtPTI1Njtmb3IoO1Qucj49NjU1MzY7KVQuci09NjU1MzZ9cmV0dXJuIFR9ZnVuY3Rpb24gbjUoZCxfLG0pe3ZhciBUPVFyKGQpO3JldHVybiBULnM9cmgoVC5zLF8ucyxtKSxULmU9cmgoVC5lLF8ucyxtKSxUfWZ1bmN0aW9uIHYyKGQsXyl7aWYoZC5jUmVsJiZkLmM8MClmb3IoZD1Rcihk''@;'; put 'put ''KTtkLmM8MDspZC5jKz1fPjg/MTYzODQ6MjU2O2lmKGQuclJlbCYmZC5yPDApZm9yKGQ9UXIoZCk7ZC5yPDA7KWQucis9Xz44PzEwNDg1NzY6Xz41PzY1NTM2OjE2Mzg0O2lmKGQuY1JlbCYmZC5jPj0oXz44PzE2Mzg0OjI1NikpZm9yKGQ9UXIoZCk7ZC5jPj0oXz44PzE2Mzg0OjI1Nik7KWQu''@;'; put 'put ''Yy09Xz44PzE2Mzg0OjI1NjtpZihkLnJSZWwmJmQucj49MTA0ODU3Nilmb3IoZD1RcihkKTtkLnI+PTEwNDg1NzY7KWQuci09MTA0ODU3Njt2YXIgbT1xaShkKTtyZXR1cm4hZC5jUmVsJiZudWxsIT1kLmNSZWwmJihtPWZ1bmN0aW9uIEYxKGQpe3JldHVybiBkLnJlcGxhY2UoL14oW0EtWl0p''@;'; put 'put ''LywiJCQkMSIpfShtKSksIWQuclJlbCYmbnVsbCE9ZC5yUmVsJiYobT1mdW5jdGlvbiBDZyhkKXtyZXR1cm4gZC5yZXBsYWNlKC8oW0EtWl18XikoXGQrKSQvLCIkMSQkJDIiKX0obSkpLG19ZnVuY3Rpb24gdGQoZCxfKXtyZXR1cm4gMCE9ZC5zLnJ8fGQucy5yUmVsfHxkLmUuciE9KF8uYmlm''@;'; put 'put ''Zj49MTI/MTA0ODU3NTpfLmJpZmY+PTg/NjU1MzY6MTYzODQpfHxkLmUuclJlbD8wIT1kLnMuY3x8ZC5zLmNSZWx8fGQuZS5jIT0oXy5iaWZmPj0xMj8xNjM4MzoyNTUpfHxkLmUuY1JlbD92MihkLnMsXy5iaWZmKSsiOiIrdjIoZC5lLF8uYmlmZik6KGQucy5yUmVsPyIiOiIkIikrem8oZC5z''@;'; put 'put ''LnIpKyI6IisoZC5lLnJSZWw/IiI6IiQiKSt6byhkLmUucik6KGQucy5jUmVsPyIiOiIkIikrbXMoZC5zLmMpKyI6IisoZC5lLmNSZWw/IiI6IiQiKSttcyhkLmUuYyl9dmFyIE8wPXt9O2Z1bmN0aW9uIGlhKGQpe3JldHVybiBwYXJzZUludChmdW5jdGlvbiBfMihkKXtyZXR1cm4gZC5yZXBs''@;'; put 'put ''YWNlKC9cJChcZCspJC8sIiQxIil9KGQpLDEwKS0xfWZ1bmN0aW9uIHpvKGQpe3JldHVybiIiKyhkKzEpfWZ1bmN0aW9uIFRjKGQpe2Zvcih2YXIgXz1mdW5jdGlvbiBObShkKXtyZXR1cm4gZC5yZXBsYWNlKC9eXCQoW0EtWl0pLywiJDEiKX0oZCksbT0wLFQ9MDtUIT09Xy5sZW5ndGg7KytU''@;'; put 'put ''KW09MjYqbStfLmNoYXJDb2RlQXQoVCktNjQ7cmV0dXJuIG0tMX1mdW5jdGlvbiBtcyhkKXtpZihkPDApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNvbHVtbiAiK2QpO3ZhciBfPSIiO2ZvcigrK2Q7ZDtkPU1hdGguZmxvb3IoKGQtMSkvMjYpKV89U3RyaW5nLmZyb21DaGFyQ29kZSgoZC0x''@;'; put 'put ''KSUyNis2NSkrXztyZXR1cm4gX31mdW5jdGlvbiBJcyhkKXtmb3IodmFyIF89MCxtPTAsVD0wO1Q8ZC5sZW5ndGg7KytUKXt2YXIgUD1kLmNoYXJDb2RlQXQoVCk7UD49NDgmJlA8PTU3P189MTAqXysoUC00OCk6UD49NjUmJlA8PTkwJiYobT0yNiptKyhQLTY0KSl9cmV0dXJue2M6bS0xLHI6''@;'; put 'put ''Xy0xfX1mdW5jdGlvbiBxaShkKXtmb3IodmFyIF89ZC5jKzEsbT0iIjtfO189KF8tMSkvMjZ8MCltPVN0cmluZy5mcm9tQ2hhckNvZGUoKF8tMSklMjYrNjUpK207cmV0dXJuIG0rKGQucisxKX1mdW5jdGlvbiB6YShkKXt2YXIgXz1kLmluZGV4T2YoIjoiKTtyZXR1cm4tMT09Xz97czpJcyhk''@;'; put 'put ''KSxlOklzKGQpfTp7czpJcyhkLnNsaWNlKDAsXykpLGU6SXMoZC5zbGljZShfKzEpKX19ZnVuY3Rpb24gaHQoZCxfKXtyZXR1cm4gdHlwZW9mIF8+InUifHwibnVtYmVyIj09dHlwZW9mIF8/aHQoZC5zLGQuZSk6KCJzdHJpbmciIT10eXBlb2YgZCYmKGQ9cWkoZCkpLCJzdHJpbmciIT10eXBl''@;'; put 'put ''b2YgXyYmKF89cWkoXykpLGQ9PV8/ZDpkKyI6IitfKX1mdW5jdGlvbiB5dChkKXt2YXIgXz1KU09OLnBhcnNlKCd7InMiOnsiYyI6MCwiciI6MH0sImUiOnsiYyI6MCwiciI6MH19JyksbT0wLFQ9MCxQPTAsUT1kLmxlbmd0aDtmb3IobT0wO1Q8USYmISgoUD1kLmNoYXJDb2RlQXQoVCktNjQp''@;'; put 'put ''PDF8fFA+MjYpOysrVCltPTI2Km0rUDtmb3IoXy5zLmM9LS1tLG09MDtUPFEmJiEoKFA9ZC5jaGFyQ29kZUF0KFQpLTQ4KTwwfHxQPjkpOysrVCltPTEwKm0rUDtpZihfLnMucj0tLW0sVD09PVF8fDU4PT09ZC5jaGFyQ29kZUF0KCsrVCkpcmV0dXJuIF8uZS5jPV8ucy5jLF8uZS5yPV8ucy5y''@;'; put 'put ''LF87Zm9yKG09MDtUIT1RJiYhKChQPWQuY2hhckNvZGVBdChUKS02NCk8MXx8UD4yNik7KytUKW09MjYqbStQO2ZvcihfLmUuYz0tLW0sbT0wO1QhPVEmJiEoKFA9ZC5jaGFyQ29kZUF0KFQpLTQ4KTwwfHxQPjkpOysrVCltPTEwKm0rUDtyZXR1cm4gXy5lLnI9LS1tLF99ZnVuY3Rpb24ganQo''@;'; put 'put ''ZCxfKXt2YXIgbT0iZCI9PWQudCYmXyBpbnN0YW5jZW9mIERhdGU7aWYobnVsbCE9ZC56KXRyeXtyZXR1cm4gZC53PUkuZm9ybWF0KGQueixtP0tlKF8pOl8pfWNhdGNoe310cnl7cmV0dXJuIGQudz1JLmZvcm1hdCgoZC5YRnx8e30pLm51bUZtdElkfHwobT8xNDowKSxtP0tlKF8pOl8pfWNh''@;'; put 'put ''dGNoe3JldHVybiIiK199fWZ1bmN0aW9uIHp0KGQsXyxtKXtyZXR1cm4gbnVsbD09ZHx8bnVsbD09ZC50fHwieiI9PWQudD8iIjp2b2lkIDAhPT1kLnc/ZC53OigiZCI9PWQudCYmIWQueiYmbSYmbS5kYXRlTkYmJihkLno9bS5kYXRlTkYpLCJlIj09ZC50P25sW2Qudl18fGQudjpqdChkLG51''@;'; put 'put ''bGw9PV8/ZC52Ol8pKX1mdW5jdGlvbiBtbihkLF8pe3ZhciBtPV8mJl8uc2hlZXQ/Xy5zaGVldDoiU2hlZXQxIixUPXt9O3JldHVybiBUW21dPWQse1NoZWV0TmFtZXM6W21dLFNoZWV0czpUfX1mdW5jdGlvbiBGbihkLF8sbSl7dmFyIFQ9bXx8e30sUD1kP0FycmF5LmlzQXJyYXkoZCk6VC5k''@;'; put 'put ''ZW5zZSxRPWR8fChQP1tdOnt9KSxzZT0wLG9lPTA7aWYoUSYmbnVsbCE9VC5vcmlnaW4pe2lmKCJudW1iZXIiPT10eXBlb2YgVC5vcmlnaW4pc2U9VC5vcmlnaW47ZWxzZXt2YXIgZGU9InN0cmluZyI9PXR5cGVvZiBULm9yaWdpbj9JcyhULm9yaWdpbik6VC5vcmlnaW47c2U9ZGUucixvZT1k''@;'; put 'put ''ZS5jfVFbIiFyZWYiXXx8KFFbIiFyZWYiXT0iQTE6QTEiKX12YXIgTGU9e3M6e2M6MWU3LHI6MWU3fSxlOntjOjAscjowfX07aWYoUVsiIXJlZiJdKXt2YXIgTmU9eXQoUVsiIXJlZiJdKTtMZS5zLmM9TmUucy5jLExlLnMucj1OZS5zLnIsTGUuZS5jPU1hdGgubWF4KExlLmUuYyxOZS5lLmMp''@;'; put 'put ''LExlLmUucj1NYXRoLm1heChMZS5lLnIsTmUuZS5yKSwtMT09c2UmJihMZS5lLnI9c2U9TmUuZS5yKzEpfWZvcih2YXIgQmU9MDtCZSE9Xy5sZW5ndGg7KytCZSlpZihfW0JlXSl7aWYoIUFycmF5LmlzQXJyYXkoX1tCZV0pKXRocm93IG5ldyBFcnJvcigiYW9hX3RvX3NoZWV0IGV4cGVjdHMg''@;'; put 'put ''YW4gYXJyYXkgb2YgYXJyYXlzIik7Zm9yKHZhciBaZT0wO1plIT1fW0JlXS5sZW5ndGg7KytaZSlpZighKHR5cGVvZiBfW0JlXVtaZV0+InUiKSl7dmFyIG50PXt2Ol9bQmVdW1plXX0sbXQ9c2UrQmUsUWU9b2UrWmU7aWYoTGUucy5yPm10JiYoTGUucy5yPW10KSxMZS5zLmM+UWUmJihMZS5z''@;'; put 'put ''LmM9UWUpLExlLmUucjxtdCYmKExlLmUucj1tdCksTGUuZS5jPFFlJiYoTGUuZS5jPVFlKSwhX1tCZV1bWmVdfHwib2JqZWN0IiE9dHlwZW9mIF9bQmVdW1plXXx8QXJyYXkuaXNBcnJheShfW0JlXVtaZV0pfHxfW0JlXVtaZV1pbnN0YW5jZW9mIERhdGUpaWYoQXJyYXkuaXNBcnJheShudC52''@;'; put 'put ''KSYmKG50LmY9X1tCZV1bWmVdWzFdLG50LnY9bnQudlswXSksbnVsbD09PW50LnYpaWYobnQuZiludC50PSJuIjtlbHNlIGlmKFQubnVsbEVycm9yKW50LnQ9ImUiLG50LnY9MDtlbHNle2lmKCFULnNoZWV0U3R1YnMpY29udGludWU7bnQudD0ieiJ9ZWxzZSJudW1iZXIiPT10eXBlb2YgbnQu''@;'; put 'put ''dj9udC50PSJuIjoiYm9vbGVhbiI9PXR5cGVvZiBudC52P250LnQ9ImIiOm50LnYgaW5zdGFuY2VvZiBEYXRlPyhudC56PVQuZGF0ZU5GfHxJLl90YWJsZVsxNF0sVC5jZWxsRGF0ZXM/KG50LnQ9ImQiLG50Lnc9SS5mb3JtYXQobnQueixLZShudC52KSkpOihudC50PSJuIixudC52PUtlKG50''@;'; put 'put ''LnYpLG50Lnc9SS5mb3JtYXQobnQueixudC52KSkpOm50LnQ9InMiO2Vsc2UgbnQ9X1tCZV1bWmVdO2lmKG50JiZudC5oKXRyeXtudC5SPWtmLmh0bWxfdG9fcnMobnQuaCksbnQudj0iIjtmb3IodmFyIGZ0PTA7ZnQ8bnQuUi5sZW5ndGg7KytmdCludC52Kz1udC5SW2Z0XS52fHwiIn1jYXRj''@;'; put 'put ''aHt9aWYoUClRW210XXx8KFFbbXRdPVtdKSxRW210XVtRZV0mJlFbbXRdW1FlXS5zJiYobnQucz1RW210XVtRZV0ucyksUVttdF1bUWVdJiZRW210XVtRZV0ueiYmKG50Lno9UVttdF1bUWVdLnopLFFbbXRdW1FlXT1udDtlbHNle3ZhciBrdD1xaSh7YzpRZSxyOm10fSk7UVtrdF0mJlFba3Rd''@;'; put 'put ''LnMmJihudC5zPVFba3RdLnMpLFFba3RdJiZRW2t0XS56JiYobnQuej1RW2t0XS56KSxRW2t0XT1udH19fXJldHVybiBMZS5zLmM8MWU3JiYoUVsiIXJlZiJdPWh0KExlKSksUX1mdW5jdGlvbiBRbihkLF8pe3JldHVybiBGbihudWxsLGQsXyl9ZnVuY3Rpb24gbHIoZCxfKXtyZXR1cm4gX3x8''@;'; put 'put ''KF89RnIoNCkpLF8ud3JpdGVfc2hpZnQoNCxkKSxffWZ1bmN0aW9uIGlpKGQpe3ZhciBfPWQucmVhZF9zaGlmdCg0KTtyZXR1cm4gMD09PV8/IiI6ZC5yZWFkX3NoaWZ0KF8sImRiY3MiKX1mdW5jdGlvbiBraShkLF8pe3ZhciBtPSExO3JldHVybiBudWxsPT1fJiYobT0hMCxfPUZyKDQrMipk''@;'; put 'put ''Lmxlbmd0aCkpLF8ud3JpdGVfc2hpZnQoNCxkLmxlbmd0aCksZC5sZW5ndGg+MCYmXy53cml0ZV9zaGlmdCgwLGQsImRiY3MiKSxtP18uc2xpY2UoMCxfLmwpOl99ZnVuY3Rpb24gS2koZCl7cmV0dXJue2ljaDpkLnJlYWRfc2hpZnQoMiksaWZudDpkLnJlYWRfc2hpZnQoMil9fWZ1bmN0aW9u''@;'; put 'put ''IFJvKGQsXyl7dmFyIG09ZC5sLFQ9ZC5yZWFkX3NoaWZ0KDEpLFA9aWkoZCksUT1bXSxzZT17dDpQLGg6UH07aWYoMSZUKXtmb3IodmFyIG9lPWQucmVhZF9zaGlmdCg0KSxkZT0wO2RlIT1vZTsrK2RlKVEucHVzaChLaShkKSk7c2Uucj1RfWVsc2Ugc2Uucj1be2ljaDowLGlmbnQ6MH1dO3Jl''@;'; put 'put ''dHVybiBkLmw9bStfLHNlfSFmdW5jdGlvbihkLF8pe3ZhciBtO2lmKHR5cGVvZiBjcnlwdG9Ccm93c2VyaWZ5PCJ1IiltPWNyeXB0b0Jyb3dzZXJpZnk7ZWxzZSBpZih0eXBlb2YgXzwidSIpbT1fO2Vsc2UgdHJ5e209aCgyODI2Nyl9Y2F0Y2h7bT1udWxsfWQucmM0PWZ1bmN0aW9uKFQsUCl7''@;'; put 'put ''dmFyIFE9bmV3IEFycmF5KDI1Niksc2U9MCxvZT0wLGRlPTAsTGU9MDtmb3Iob2U9MDsyNTYhPW9lOysrb2UpUVtvZV09b2U7Zm9yKG9lPTA7MjU2IT1vZTsrK29lKWRlPWRlK1Fbb2VdK1Rbb2UlVC5sZW5ndGhdLmNoYXJDb2RlQXQoMCkmMjU1LExlPVFbb2VdLFFbb2VdPVFbZGVdLFFbZGVd''@;'; put 'put ''PUxlO29lPWRlPTA7dmFyIE5lPVgoUC5sZW5ndGgpO2ZvcihzZT0wO3NlIT1QLmxlbmd0aDsrK3NlKUxlPVFbb2U9b2UrMSYyNTVdLFFbb2VdPVFbZGU9KGRlK1Fbb2VdKSUyNTZdLFFbZGVdPUxlLE5lW3NlXT1QW3NlXV5RW1Fbb2VdK1FbZGVdJjI1NV07cmV0dXJuIE5lfSxkLm1kNT1mdW5j''@;'; put 'put ''dGlvbihUKXtpZighbSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNyeXB0byIpO3JldHVybiBtLmNyZWF0ZUhhc2goIm1kNSIpLnVwZGF0ZShCdWZmZXIuZnJvbShUKSkuZGlnZXN0KCJoZXgiKX19KE8wLHR5cGVvZiBjcnlwdG88InUiP2NyeXB0bzp2b2lkIDApO3ZhciBvcj1Sbztm''@;'; put 'put ''dW5jdGlvbiBzbihkKXt2YXIgXz1kLnJlYWRfc2hpZnQoNCksbT1kLnJlYWRfc2hpZnQoMik7cmV0dXJuIG0rPWQucmVhZF9zaGlmdCgxKTw8MTYsZC5sKysse2M6XyxpU3R5bGVSZWY6bX19ZnVuY3Rpb24gaW8oZCxfKXtyZXR1cm4gbnVsbD09XyYmKF89RnIoOCkpLF8ud3JpdGVfc2hpZnQo''@;'; put 'put ''LTQsZC5jKSxfLndyaXRlX3NoaWZ0KDMsZC5pU3R5bGVSZWZ8fGQucyksXy53cml0ZV9zaGlmdCgxLDApLF99ZnVuY3Rpb24gRGEoZCl7dmFyIF89ZC5yZWFkX3NoaWZ0KDIpO3JldHVybiBfKz1kLnJlYWRfc2hpZnQoMSk8PDE2LGQubCsrLHtjOi0xLGlTdHlsZVJlZjpffX1mdW5jdGlvbiBu''@;'; put 'put ''cyhkLF8pe3JldHVybiBudWxsPT1fJiYoXz1Gcig0KSksXy53cml0ZV9zaGlmdCgzLGQuaVN0eWxlUmVmfHxkLnMpLF8ud3JpdGVfc2hpZnQoMSwwKSxffXZhciBFbD1paSxXYz1raTtmdW5jdGlvbiBuYyhkKXt2YXIgXz1kLnJlYWRfc2hpZnQoNCk7cmV0dXJuIDA9PT1ffHw0Mjk0OTY3Mjk1''@;'; put 'put ''PT09Xz8iIjpkLnJlYWRfc2hpZnQoXywiZGJjcyIpfWZ1bmN0aW9uIHkyKGQsXyl7dmFyIG09ITE7cmV0dXJuIG51bGw9PV8mJihtPSEwLF89RnIoMTI3KSksXy53cml0ZV9zaGlmdCg0LGQubGVuZ3RoPjA/ZC5sZW5ndGg6NDI5NDk2NzI5NSksZC5sZW5ndGg+MCYmXy53cml0ZV9zaGlmdCgw''@;'; put 'put ''LGQsImRiY3MiKSxtP18uc2xpY2UoMCxfLmwpOl99dmFyIER1PWlpLGUxPW5jLHQxPXkyO2Z1bmN0aW9uIGJkKGQpe3ZhciBfPWQuc2xpY2UoZC5sLGQubCs0KSxtPTEmX1swXSxUPTImX1swXTtkLmwrPTQsX1swXSY9MjUyO3ZhciBQPTA9PT1UP2lyKFswLDAsMCwwLF9bMF0sX1sxXSxfWzJd''@;'; put 'put ''LF9bM11dLDApOnVsKF8sMCk+PjI7cmV0dXJuIG0/UC8xMDA6UH1mdW5jdGlvbiBzMChkLF8pe251bGw9PV8mJihfPUZyKDQpKTt2YXIgbT0wLFQ9MCxQPTEwMCpkO2lmKGQ9PSgwfGQpJiZkPj0tKDE8PDI5KSYmZDwxPDwyOT9UPTE6UD09KDB8UCkmJlA+PS0oMTw8MjkpJiZQPDE8PDI5JiYo''@;'; put 'put ''VD0xLG09MSksIVQpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBSa051bWJlciAiK2QpO18ud3JpdGVfc2hpZnQoLTQsKChtP1A6ZCk8PDIpKyhtKzIpKX1mdW5jdGlvbiBiMihkKXt2YXIgXz17czp7fSxlOnt9fTtyZXR1cm4gXy5zLnI9ZC5yZWFkX3NoaWZ0KDQpLF8uZS5yPWQucmVh''@;'; put 'put ''ZF9zaGlmdCg0KSxfLnMuYz1kLnJlYWRfc2hpZnQoNCksXy5lLmM9ZC5yZWFkX3NoaWZ0KDQpLF99dmFyIGp1PWIyLEJkPWZ1bmN0aW9uIGtoKGQsXyl7cmV0dXJuIF98fChfPUZyKDE2KSksXy53cml0ZV9zaGlmdCg0LGQucy5yKSxfLndyaXRlX3NoaWZ0KDQsZC5lLnIpLF8ud3JpdGVfc2hp''@;'; put 'put ''ZnQoNCxkLnMuYyksXy53cml0ZV9zaGlmdCg0LGQuZS5jKSxffTtmdW5jdGlvbiB3MihkKXtmb3IodmFyIF89ZC5yZWFkX3NoaWZ0KDQpLG09W10sVD0wO1Q8XzsrK1Qpe3ZhciBQPWp1KGQpO20ucHVzaChodChQKSl9cmV0dXJuIG0uam9pbigiLCIpfWZ1bmN0aW9uIHFzKGQpe2lmKGQubGVu''@;'; put 'put ''Z3RoLWQubDw4KXRocm93IlhMUyBYbnVtIEJ1ZmZlciB1bmRlcmZsb3ciO3JldHVybiBkLnJlYWRfc2hpZnQoOCwiZiIpfWZ1bmN0aW9uIEphKGQsXyl7cmV0dXJuKF98fEZyKDgpKS53cml0ZV9zaGlmdCg4LGQsImYiKX1mdW5jdGlvbiBObChkKXt2YXIgXz17fSxUPWQucmVhZF9zaGlmdCgx''@;'; put 'put ''KT4+PjEsUD1kLnJlYWRfc2hpZnQoMSksUT1kLnJlYWRfc2hpZnQoMiwiaSIpLHNlPWQucmVhZF9zaGlmdCgxKSxvZT1kLnJlYWRfc2hpZnQoMSksZGU9ZC5yZWFkX3NoaWZ0KDEpO3N3aXRjaChkLmwrKyxUKXtjYXNlIDA6Xy5hdXRvPTE7YnJlYWs7Y2FzZSAxOl8uaW5kZXg9UDt2YXIgTGU9''@;'; put 'put ''d2RbUF07TGUmJihfLnJnYj1iMyhMZSkpO2JyZWFrO2Nhc2UgMjpfLnJnYj1iMyhbc2Usb2UsZGVdKTticmVhaztjYXNlIDM6Xy50aGVtZT1QfXJldHVybiAwIT1RJiYoXy50aW50PVE+MD9RLzMyNzY3OlEvMzI3NjgpLF99ZnVuY3Rpb24gbjEoZCxfKXtpZihffHwoXz1Gcig4KSksIWR8fGQu''@;'; put 'put ''YXV0bylyZXR1cm4gXy53cml0ZV9zaGlmdCg0LDApLF8ud3JpdGVfc2hpZnQoNCwwKSxfO251bGwhPWQuaW5kZXg/KF8ud3JpdGVfc2hpZnQoMSwyKSxfLndyaXRlX3NoaWZ0KDEsZC5pbmRleCkpOm51bGwhPWQudGhlbWU/KF8ud3JpdGVfc2hpZnQoMSw2KSxfLndyaXRlX3NoaWZ0KDEsZC50''@;'; put 'put ''aGVtZSkpOihfLndyaXRlX3NoaWZ0KDEsNSksXy53cml0ZV9zaGlmdCgxLDApKTt2YXIgbT1kLnRpbnR8fDA7aWYobT4wP20qPTMyNzY3Om08MCYmKG0qPTMyNzY4KSxfLndyaXRlX3NoaWZ0KDIsbSksZC5yZ2ImJm51bGw9PWQudGhlbWUpe3ZhciBUPWQucmdifHwiRkZGRkZGIjsibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIFQmJihUPSgiMDAwMDAwIitULnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpKSxfLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoVC5zbGljZSgwLDIpLDE2KSksXy53cml0ZV9zaGlmdCgxLHBhcnNlSW50KFQuc2xpY2UoMiw0KSwxNikpLF8ud3JpdGVfc2hpZnQoMSxwYXJzZUludChU''@;'; put 'put ''LnNsaWNlKDQsNiksMTYpKSxfLndyaXRlX3NoaWZ0KDEsMjU1KX1lbHNlIF8ud3JpdGVfc2hpZnQoMiwwKSxfLndyaXRlX3NoaWZ0KDEsMCksXy53cml0ZV9zaGlmdCgxLDApO3JldHVybiBffWZ1bmN0aW9uIGpkKGQpe3ZhciBfPWQucmVhZF9zaGlmdCgxKTtyZXR1cm4gZC5sKysse2ZCb2xk''@;'; put 'put ''OjEmXyxmSXRhbGljOjImXyxmVW5kZXJsaW5lOjQmXyxmU3RyaWtlb3V0OjgmXyxmT3V0bGluZToxNiZfLGZTaGFkb3c6MzImXyxmQ29uZGVuc2U6NjQmXyxmRXh0ZW5kOjEyOCZffX1mdW5jdGlvbiByMShkLF8pe3ZhciBUPWQucmVhZF9zaGlmdCg0KTtzd2l0Y2goVCl7Y2FzZSAwOnJldHVy''@;'; put 'put ''biIiO2Nhc2UgNDI5NDk2NzI5NTpjYXNlIDQyOTQ5NjcyOTQ6cmV0dXJuezI6IkJJVE1BUCIsMzoiTUVUQUZJTEVQSUNUIiw4OiJESUIiLDE0OiJFTkhNRVRBRklMRSJ9W2QucmVhZF9zaGlmdCg0KV18fCIifWlmKFQ+NDAwKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ2xpcGJvYXJk''@;'; put 'put ''OiAiK1QudG9TdHJpbmcoMTYpKTtyZXR1cm4gZC5sLT00LGQucmVhZF9zaGlmdCgwLDE9PV8/Imxwc3RyIjoibHB3c3RyIil9dmFyIHI1PVs4MCw4MV0sdXA9ezE6e246IkNvZGVQYWdlIix0OjJ9LDI6e246IkNhdGVnb3J5Iix0OjgwfSwzOntuOiJQcmVzZW50YXRpb25Gb3JtYXQiLHQ6ODB9''@;'; put 'put ''LDQ6e246IkJ5dGVDb3VudCIsdDozfSw1OntuOiJMaW5lQ291bnQiLHQ6M30sNjp7bjoiUGFyYWdyYXBoQ291bnQiLHQ6M30sNzp7bjoiU2xpZGVDb3VudCIsdDozfSw4OntuOiJOb3RlQ291bnQiLHQ6M30sOTp7bjoiSGlkZGVuQ291bnQiLHQ6M30sMTA6e246Ik11bHRpbWVkaWFDbGlwQ291''@;'; put 'put ''bnQiLHQ6M30sMTE6e246IlNjYWxlQ3JvcCIsdDoxMX0sMTI6e246IkhlYWRpbmdQYWlycyIsdDo0MTA4fSwxMzp7bjoiVGl0bGVzT2ZQYXJ0cyIsdDo0MTI2fSwxNDp7bjoiTWFuYWdlciIsdDo4MH0sMTU6e246IkNvbXBhbnkiLHQ6ODB9LDE2OntuOiJMaW5rc1VwVG9EYXRlIix0OjExfSwx''@;'; put 'put ''Nzp7bjoiQ2hhcmFjdGVyQ291bnQiLHQ6M30sMTk6e246IlNoYXJlZERvYyIsdDoxMX0sMjI6e246Ikh5cGVybGlua3NDaGFuZ2VkIix0OjExfSwyMzp7bjoiQXBwVmVyc2lvbiIsdDozLHA6InZlcnNpb24ifSwyNDp7bjoiRGlnU2lnIix0OjY1fSwyNjp7bjoiQ29udGVudFR5cGUiLHQ6ODB9''@;'; put 'put ''LDI3OntuOiJDb250ZW50U3RhdHVzIix0OjgwfSwyODp7bjoiTGFuZ3VhZ2UiLHQ6ODB9LDI5OntuOiJWZXJzaW9uIix0OjgwfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0sYzA9ezE6e246''@;'; put 'put ''IkNvZGVQYWdlIix0OjJ9LDI6e246IlRpdGxlIix0OjgwfSwzOntuOiJTdWJqZWN0Iix0OjgwfSw0OntuOiJBdXRob3IiLHQ6ODB9LDU6e246IktleXdvcmRzIix0OjgwfSw2OntuOiJDb21tZW50cyIsdDo4MH0sNzp7bjoiVGVtcGxhdGUiLHQ6ODB9LDg6e246Ikxhc3RBdXRob3IiLHQ6ODB9''@;'; put 'put ''LDk6e246IlJldk51bWJlciIsdDo4MH0sMTA6e246IkVkaXRUaW1lIix0OjY0fSwxMTp7bjoiTGFzdFByaW50ZWQiLHQ6NjR9LDEyOntuOiJDcmVhdGVkRGF0ZSIsdDo2NH0sMTM6e246Ik1vZGlmaWVkRGF0ZSIsdDo2NH0sMTQ6e246IlBhZ2VDb3VudCIsdDozfSwxNTp7bjoiV29yZENvdW50''@;'; put 'put ''Iix0OjN9LDE2OntuOiJDaGFyQ291bnQiLHQ6M30sMTc6e246IlRodW1ibmFpbCIsdDo3MX0sMTg6e246IkFwcGxpY2F0aW9uIix0OjgwfSwxOTp7bjoiRG9jU2VjdXJpdHkiLHQ6M30sMjU1Ont9LDIxNDc0ODM2NDg6e246IkxvY2FsZSIsdDoxOX0sMjE0NzQ4MzY1MTp7bjoiQmVoYXZpb3Ii''@;'; put 'put ''LHQ6MTl9LDE5MTkwNTQ0MzQ6e319LFBtPWdlKHVwLCJuIiksaTE9Z2UoYzAsIm4iKSxpOD17MToiVVMiLDI6IkNBIiwzOiIiLDc6IlJVIiwyMDoiRUciLDMwOiJHUiIsMzE6Ik5MIiwzMjoiQkUiLDMzOiJGUiIsMzQ6IkVTIiwzNjoiSFUiLDM5OiJJVCIsNDE6IkNIIiw0MzoiQVQiLDQ0OiJH''@;'; put 'put ''QiIsNDU6IkRLIiw0NjoiU0UiLDQ3OiJOTyIsNDg6IlBMIiw0OToiREUiLDUyOiJNWCIsNTU6IkJSIiw2MToiQVUiLDY0OiJOWiIsNjY6IlRIIiw4MToiSlAiLDgyOiJLUiIsODQ6IlZOIiw4NjoiQ04iLDkwOiJUUiIsMTA1OiJKUyIsMjEzOiJEWiIsMjE2OiJNQSIsMjE4OiJMWSIsMzUxOiJQ''@;'; put 'put ''VCIsMzU0OiJJUyIsMzU4OiJGSSIsNDIwOiJDWiIsODg2OiJUVyIsOTYxOiJMQiIsOTYyOiJKTyIsOTYzOiJTWSIsOTY0OiJJUSIsOTY1OiJLVyIsOTY2OiJTQSIsOTcxOiJBRSIsOTcyOiJJTCIsOTc0OiJRQSIsOTgxOiJJUiIsNjU1MzU6IlVTIn0sbzg9W251bGwsInNvbGlkIiwibWVkaXVt''@;'; put 'put ''R3JheSIsImRhcmtHcmF5IiwibGlnaHRHcmF5IiwiZGFya0hvcml6b250YWwiLCJkYXJrVmVydGljYWwiLCJkYXJrRG93biIsImRhcmtVcCIsImRhcmtHcmlkIiwiZGFya1RyZWxsaXMiLCJsaWdodEhvcml6b250YWwiLCJsaWdodFZlcnRpY2FsIiwibGlnaHREb3duIiwibGlnaHRVcCIsImxp''@;'; put 'put ''Z2h0R3JpZCIsImxpZ2h0VHJlbGxpcyIsImdyYXkxMjUiLCJncmF5MDYyNSJdO2Z1bmN0aW9uIFNnKGQpe3JldHVybiBkLm1hcChmdW5jdGlvbihfKXtyZXR1cm5bXz4+MTYmMjU1LF8+PjgmMjU1LDI1NSZfXX0pfXZhciBIbT1TZyhbMCwxNjc3NzIxNSwxNjcxMTY4MCw2NTI4MCwyNTUsMTY3''@;'; put 'put ''NzY5NjAsMTY3MTE5MzUsNjU1MzUsMCwxNjc3NzIxNSwxNjcxMTY4MCw2NTI4MCwyNTUsMTY3NzY5NjAsMTY3MTE5MzUsNjU1MzUsODM4ODYwOCwzMjc2OCwxMjgsODQyMTM3Niw4Mzg4NzM2LDMyODk2LDEyNjMyMjU2LDg0MjE1MDQsMTAwNjY0MzEsMTAwNDAxNjYsMTY3NzcxNjQsMTM0MzQ4''@;'; put 'put ''NzksNjY4NDc3NCwxNjc0NDU3NiwyNjMxNiwxMzQyMTgyMywxMjgsMTY3MTE5MzUsMTY3NzY5NjAsNjU1MzUsODM4ODczNiw4Mzg4NjA4LDMyODk2LDI1NSw1MjQ3OSwxMzQzNDg3OSwxMzQzNDgyOCwxNjc3NzExMywxMDA3OTQ4NywxNjc1MTA1MiwxMzQwODc2NywxNjc2NDA1NywzMzY4NzAz''@;'; put 'put ''LDMzOTQ3NjQsMTAwNzkyMzIsMTY3NjM5MDQsMTY3NTA4NDgsMTY3Mzc3OTIsNjcxMDkzNyw5ODY4OTUwLDEzMTU4LDMzODE2MDYsMTMwNTYsMzM1NTM5MiwxMDA0MDA2NCwxMDA0MDE2NiwzMzU1NTQ1LDMzNTU0NDMsMCwxNjc3NzIxNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww''@;'; put 'put ''XSksd2Q9UXIoSG0pLGk1PVNnKFsxMjYzMjI1Niw5ODY4OTUwLDg0MjE1MDQsNjcxMDg4NiwzMzU1NDQzLDE2NzExNjgwLDMyNzY4LDEzMzY5NDk3LDEyOCwzMzk0NTYwLDI2MzY3LDEwMDI3MjEyLDEwMDUzMTcxLDEyOCwzMjc2OCw4Mzg4NjA4LDMyODk2LDgzODg3MzYsODQyMTM3NiwxMzYz''@;'; put 'put ''MTQ4OCwxNDUzOTk5NCwxMzA2ODg1MCwxMzkyNDM1Miw5OTY3NDk2LDkxNzUyNjcsOTE5NTAwOCwzNjgzNTM3LDEwNjkyNTgsODg4MDg5OSw3NDk0NjQsMjg5MzQ3NiwxMTc0NTczMCwzNzUwMjAxLDE1NTU5NTAzLDE4Mzc5NDEsMTIwODQzNTksNzYzMjI1MCw3MzYzMzI4LDk1MTQ1ODgsODI4''@;'; put 'put ''ODYxNywzMDM2ODE0LDExMTg0ODEwXSksbmw9ezA6IiNOVUxMISIsNzoiI0RJVi8wISIsMTU6IiNWQUxVRSEiLDIzOiIjUkVGISIsMjk6IiNOQU1FPyIsMzY6IiNOVU0hIiw0MjoiI04vQSIsNDM6IiNHRVRUSU5HX0RBVEEiLDI1NToiI1dURj8ifSxIMT1oZShubCksZHA9eyJhcHBsaWNhdGlv''@;'; put 'put ''bi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbCI6Indvcmtib29rcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5iaW5JbmRleFdzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5pbnRsbWFjcm9zaGVldCI6''@;'; put 'put ''IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYmluSW5kZXhNcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5jb3JlLXByb3BlcnRpZXMreG1sIjoiY29yZXByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRv''@;'; put 'put ''Y3VtZW50LmN1c3RvbS1wcm9wZXJ0aWVzK3htbCI6ImN1c3Rwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5leHRlbmRlZC1wcm9wZXJ0aWVzK3htbCI6ImV4dHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRv''@;'; put 'put ''Y3VtZW50LmN1c3RvbVhtbFByb3BlcnRpZXMreG1sIjoiY3VzdG9teG1scHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jdXN0b21Qcm9wZXJ0eSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RU''@;'; put 'put ''YWJsZSI6InBpdm90cyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90VGFibGUreG1sIjoicGl2b3RzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5jaGFydCt4''@;'; put 'put ''bWwiOiJjaGFydG9ianMiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmNoYXJ0Y29sb3JzdHlsZSt4bWwiOiJjaGFydGNvbG9ycyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuY2hhcnRzdHlsZSt4bWwiOiJjaGFydHN0eWxlcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuY2hh''@;'; put 'put ''cnRleCt4bWwiOiJjaGFydGV4cyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jYWxjQ2hhaW4iOiJjYWxjY2hhaW5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY2FsY0NoYWluK3htbCI6ImNhbGNjaGFpbnMiLCJhcHBs''@;'; put 'put ''aWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5wcmludGVyU2V0dGluZ3MiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5hY3RpdmVYIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuYWN0aXZlWCt4bWwiOiJU''@;'; put 'put ''T0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmF0dGFjaGVkVG9vbGJhcnMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbm5lY3Rpb25zIjoiY29ubnMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5j''@;'; put 'put ''b25uZWN0aW9ucyt4bWwiOiJjb25ucyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5leHRlcm5hbExpbmsiOiJsaW5rcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmV4dGVybmFsTGluayt4bWwiOiJsaW5rcyIsImFwcGxp''@;'; put 'put ''Y2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldE1ldGFkYXRhIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0TWV0YWRhdGEreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hl''@;'; put 'put ''RGVmaW5pdGlvbiI6InBpdm90Y2FjaGVzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVSZWNvcmRzIjoicGl2b3RyZWNvcmRzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZURlZmluaXRp''@;'; put 'put ''b24reG1sIjoicGl2b3RjYWNoZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlUmVjb3Jkcyt4bWwiOiJwaXZvdHJlY29yZHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucXVlcnlUYWJsZSI6IlRPRE8i''@;'; put 'put ''LCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5xdWVyeVRhYmxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudXNlck5hbWVzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5yZXZpc2lvbkhl''@;'; put 'put ''YWRlcnMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnJldmlzaW9uTG9nIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnJldmlzaW9uSGVhZGVycyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5k''@;'; put 'put ''Lm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25Mb2creG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnVzZXJOYW1lcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24v''@;'; put 'put ''dm5kLm1zLWV4Y2VsLnRhYmxlU2luZ2xlQ2VsbHMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGFibGVTaW5nbGVDZWxscyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNlciI6IlRP''@;'; put 'put ''RE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyQ2FjaGUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNlcit4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNlckNhY2hlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMt''@;'; put 'put ''ZXhjZWwud3NTb3J0TWFwIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZSI6InRhYmxlcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlK3htbCI6InRhYmxlcyIsImFwcGxpY2F0aW9uL3ZuZC5v''@;'; put 'put ''cGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC50aGVtZSt4bWwiOiJ0aGVtZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWVPdmVycmlkZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlRpbWVsaW5lK3htbCI6IlRP''@;'; put 'put ''RE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuVGltZWxpbmVDYWNoZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS52YmFQcm9qZWN0IjoidmJhIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS52YmFQcm9qZWN0U2lnbmF0dXJlIjoiVE9ETyIsImFwcGxpY2F0''@;'; put 'put ''aW9uL3ZuZC5tcy1vZmZpY2Uudm9sYXRpbGVEZXBlbmRlbmNpZXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudm9sYXRpbGVEZXBlbmRlbmNpZXMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNl''@;'; put 'put ''bC5jb250cm9scHJvcGVydGllcyt4bWwiOiJjdHJscHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQubW9kZWwrZGF0YSI6ImRhdGFtb2RlbHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuU3VydmV5K3htbCI6IlRPRE8iLCJhcHBsaWNhdGlv''@;'; put 'put ''bi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZyt4bWwiOiJkcmF3aW5ncyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuY2hhcnRzaGFwZXMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1s''@;'; put 'put ''Zm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbUNvbG9ycyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtRGF0YSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxm''@;'; put 'put ''b3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtTGF5b3V0K3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1TdHlsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxm''@;'; put 'put ''b3JtYXRzLW9mZmljZWRvY3VtZW50LnZtbERyYXdpbmciOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UucmVsYXRpb25zaGlwcyt4bWwiOiJyZWxzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50Lm9sZU9iamVjdCI6''@;'; put 'put ''IlRPRE8iLCJpbWFnZS9wbmciOiJUT0RPIixzaGVldDoianMifSxhOD1mdW5jdGlvbigpe3ZhciBkPXt3b3JrYm9va3M6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Lm1haW4reG1sIix4bHNtOiJhcHBsaWNh''@;'; put 'put ''dGlvbi92bmQubXMtZXhjZWwuc2hlZXQubWFjcm9FbmFibGVkLm1haW4reG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvRW5hYmxlZC5tYWluIix4bGFtOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYWRkaW4ubWFjcm9FbmFibGVkLm1haW4r''@;'; put 'put ''eG1sIix4bHR4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50ZW1wbGF0ZS5tYWluK3htbCJ9LHN0cnM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNo''@;'; put 'put ''YXJlZFN0cmluZ3MreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hhcmVkU3RyaW5ncyJ9LGNvbW1lbnRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb21tZW50cyt4bWwiLHhsc2I6ImFwcGxp''@;'; put 'put ''Y2F0aW9uL3ZuZC5tcy1leGNlbC5jb21tZW50cyJ9LHNoZWV0czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwud29ya3NoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLndvcmtzaGVldCJ9LGNo''@;'; put 'put ''YXJ0czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY2hhcnRzaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jaGFydHNoZWV0In0sZGlhbG9nczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9w''@;'; put 'put ''ZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZGlhbG9nc2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuZGlhbG9nc2hlZXQifSxtYWNyb3M6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5tYWNyb3NoZWV0K3htbCIseGxzYjoi''@;'; put 'put ''YXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLm1hY3Jvc2hlZXQifSx0YWJsZXM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnRhYmxlIn0scGl2''@;'; put 'put ''b3RzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdFRhYmxlK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90VGFibGUifSxwaXZvdGNhY2hlczp7eGxzeDoiYXBwbGljYXRpb24vdm5k''@;'; put 'put ''Lm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZURlZmluaXRpb24reG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZURlZmluaXRpb24ifSxwaXZvdHJlY29yZHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVu''@;'; put 'put ''eG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVSZWNvcmRzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVSZWNvcmRzIn0sY29ubnM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vk''@;'; put 'put ''b2N1bWVudC5zcHJlYWRzaGVldG1sLmNvbm5lY3Rpb25zK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbm5lY3Rpb25zIn0sbGlua3M6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmV4dGVybmFs''@;'; put 'put ''TGluayt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5leHRlcm5hbExpbmsifSxzdHlsZXM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnN0eWxlcyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5t''@;'; put 'put ''cy1leGNlbC5zdHlsZXMifX07cmV0dXJuIEZlKGQpLmZvckVhY2goZnVuY3Rpb24oXyl7WyJ4bHNtIiwieGxhbSJdLmZvckVhY2goZnVuY3Rpb24obSl7ZFtfXVttXXx8KGRbX11bbV09ZFtfXS54bHN4KX0pfSksRmUoZCkuZm9yRWFjaChmdW5jdGlvbihfKXtGZShkW19dKS5mb3JFYWNoKGZ1''@;'; put 'put ''bmN0aW9uKG0pe2RwW2RbX11bbV1dPV99KX0pLGR9KCksczg9ZnVuY3Rpb24gd2UoZCl7Zm9yKHZhciBfPVtdLG09RmUoZCksVD0wO1QhPT1tLmxlbmd0aDsrK1QpbnVsbD09X1tkW21bVF1dXSYmKF9bZFttW1RdXV09W10pLF9bZFttW1RdXV0ucHVzaChtW1RdKTtyZXR1cm4gX30oZHApO1Vh''@;'; put 'put ''LkNUPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L2NvbnRlbnQtdHlwZXMiO3ZhciBoMz1WcigiVHlwZXMiLG51bGwse3htbG5zOlVhLkNULCJ4bWxuczp4c2QiOlVhLnhzZCwieG1sbnM6eHNpIjpVYS54c2l9KSxsOD1bWyJ4bWwiLCJhcHBsaWNhdGlv''@;'; put 'put ''bi94bWwiXSxbImJpbiIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5iaW5hcnkubWFjcm9FbmFibGVkLm1haW4iXSxbInZtbCIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC52bWxEcmF3aW5nIl0sWyJkYXRhIiwiYXBwbGljYXRpb24vdm5k''@;'; put 'put ''Lm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50Lm1vZGVsK2RhdGEiXSxbImJtcCIsImltYWdlL2JtcCJdLFsicG5nIiwiaW1hZ2UvcG5nIl0sWyJnaWYiLCJpbWFnZS9naWYiXSxbImVtZiIsImltYWdlL3gtZW1mIl0sWyJ3bWYiLCJpbWFnZS94LXdtZiJdLFsianBnIiwiaW1hZ2UvanBl''@;'; put 'put ''ZyJdLFsianBlZyIsImltYWdlL2pwZWciXSxbInRpZiIsImltYWdlL3RpZmYiXSxbInRpZmYiLCJpbWFnZS90aWZmIl0sWyJwZGYiLCJhcHBsaWNhdGlvbi9wZGYiXSxbInJlbHMiLHM4LnJlbHNbMF1dXS5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuIFZyKCJEZWZhdWx0IixudWxsLHtFeHRlbnNp''@;'; put 'put ''b246ZFswXSxDb250ZW50VHlwZTpkWzFdfSl9KSx1YT17V0I6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiLFNIRUVUOiJodHRwOi8vc2hlZXRqcy5vcGVueG1sZm9ybWF0cy5vcmcvb2Zm''@;'; put 'put ''aWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL29mZmljZURvY3VtZW50IixITElOSzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9oeXBlcmxpbmsiLFZNTDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1h''@;'; put 'put ''dHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy92bWxEcmF3aW5nIixYUEFUSDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9leHRlcm5hbExpbmtQYXRoIixYTUlTUzoiaHR0cDovL3NjaGVt''@;'; put 'put ''YXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3hsRXh0ZXJuYWxMaW5rUGF0aC94bFBhdGhNaXNzaW5nIixYTElOSzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9leHRlcm5hbExpbmsi''@;'; put 'put ''LENYTUw6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tWG1sIixDWE1MUDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jdXN0''@;'; put 'put ''b21YbWxQcm9wcyIsVkJBOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMvdmJhUHJvamVjdCJ9O2Z1bmN0aW9uIHZmKGQpe3ZhciBfPWQubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gZC5zbGljZSgwLF8rMSkrIl9yZWxzLyIrZC5zbGljZShf''@;'; put 'put ''KzEpKyIucmVscyJ9ZnVuY3Rpb24gTHUoZCxfKXt2YXIgbT17IiFpZCI6e319O2lmKCFkKXJldHVybiBtOyIvIiE9PV8uY2hhckF0KDApJiYoXz0iLyIrXyk7dmFyIFQ9e307cmV0dXJuKGQubWF0Y2goQm4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihQKXt2YXIgUT1YcihQKTtpZigiPFJlbGF0''@;'; put 'put ''aW9uc2hpcCI9PT1RWzBdKXt2YXIgc2U9e307c2UuVHlwZT1RLlR5cGUsc2UuVGFyZ2V0PVEuVGFyZ2V0LHNlLklkPVEuSWQsc2UuVGFyZ2V0TW9kZT1RLlRhcmdldE1vZGU7dmFyIG9lPSJFeHRlcm5hbCI9PT1RLlRhcmdldE1vZGU/US5UYXJnZXQ6aHIoUS5UYXJnZXQsXyk7bVtvZV09c2Us''@;'; put 'put ''VFtRLklkXT1zZX19KSxtWyIhaWQiXT1ULG19VWEuUkVMUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxhdGlvbnNoaXBzIjt2YXIgRWc9VnIoIlJlbGF0aW9uc2hpcHMiLG51bGwse3htbG5zOlVhLlJFTFN9KTtmdW5jdGlvbiBDMihkKXt2YXIg''@;'; put 'put ''Xz1bcG8sRWddO3JldHVybiBGZShkWyIhaWQiXSkuZm9yRWFjaChmdW5jdGlvbihtKXtfW18ubGVuZ3RoXT1WcigiUmVsYXRpb25zaGlwIixudWxsLGRbIiFpZCJdW21dKX0pLF8ubGVuZ3RoPjImJihfW18ubGVuZ3RoXT0iPC9SZWxhdGlvbnNoaXBzPiIsX1sxXT1fWzFdLnJlcGxhY2UoIi8+''@;'; put 'put ''IiwiPiIpKSxfLmpvaW4oIiIpfXZhciBydT1bdWEuSExJTkssdWEuWFBBVEgsdWEuWE1JU1NdO2Z1bmN0aW9uIGFpKGQsXyxtLFQsUCxRKXtpZihQfHwoUD17fSksZFsiIWlkIl18fChkWyIhaWQiXT17fSksXzwwKWZvcihfPTE7ZFsiIWlkIl1bInJJZCIrX107KytfKTtpZihQLklkPSJySWQi''@;'; put 'put ''K18sUC5UeXBlPVQsUC5UYXJnZXQ9bSxRP1AuVGFyZ2V0TW9kZT1ROnJ1LmluZGV4T2YoUC5UeXBlKT4tMSYmKFAuVGFyZ2V0TW9kZT0iRXh0ZXJuYWwiKSxkWyIhaWQiXVtQLklkXSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZXdyaXRlIHJJZCAiK18pO3JldHVybiBkWyIhaWQiXVtQLklk''@;'; put 'put ''XT1QLGRbKCIvIitQLlRhcmdldCkucmVwbGFjZSgiLy8iLCIvIildPVAsX31mdW5jdGlvbiBXdShkLF8sbSl7cmV0dXJuWycgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSInK2QrJyI+XG4nLCcgICAgPHJkZjp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5v''@;'; put 'put ''cmcvbnMvb2ZmaWNlLzEuMi9tZXRhLycrKG18fCJvZGYiKSsiIyIrXysnIi8+XG4nLCIgIDwvcmRmOkRlc2NyaXB0aW9uPlxuIl0uam9pbigiIil9ZnVuY3Rpb24gZnAoZCxfKXtyZXR1cm5bJyAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IicrZCsnIj5cbicsJyAgICA8bnMwOmhhc1Bh''@;'; put 'put ''cnQgeG1sbnM6bnMwPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vZmZpY2UvMS4yL21ldGEvcGtnIyIgcmRmOnJlc291cmNlPSInK18rJyIvPlxuJywiICA8L3JkZjpEZXNjcmlwdGlvbj5cbiJdLmpvaW4oIiIpfXZhciBmbD1mdW5jdGlvbigpe3ZhciBkPSc8b2ZmaWNlOmRvY3Vt''@;'; put 'put ''ZW50LW1ldGEgeG1sbnM6b2ZmaWNlPSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mZmljZToxLjAiIHhtbG5zOm1ldGE9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6bWV0YToxLjAiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxl''@;'; put 'put ''bWVudHMvMS4xLyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG9mZmljZTp2ZXJzaW9uPSIxLjIiPjxvZmZpY2U6bWV0YT48bWV0YTpnZW5lcmF0b3I+U2hlZXRKUyAnK3YudmVyc2lvbisiPC9tZXRhOmdlbmVyYXRvcj48L29mZmljZTptZXRhPjwvb2ZmaWNl''@;'; put 'put ''OmRvY3VtZW50LW1ldGE+IjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZH19KCksWGE9W1siY3A6Y2F0ZWdvcnkiLCJDYXRlZ29yeSJdLFsiY3A6Y29udGVudFN0YXR1cyIsIkNvbnRlbnRTdGF0dXMiXSxbImNwOmtleXdvcmRzIiwiS2V5d29yZHMiXSxbImNwOmxhc3RNb2RpZmllZEJ5Iiwi''@;'; put 'put ''TGFzdEF1dGhvciJdLFsiY3A6bGFzdFByaW50ZWQiLCJMYXN0UHJpbnRlZCJdLFsiY3A6cmV2aXNpb24iLCJSZXZOdW1iZXIiXSxbImNwOnZlcnNpb24iLCJWZXJzaW9uIl0sWyJkYzpjcmVhdG9yIiwiQXV0aG9yIl0sWyJkYzpkZXNjcmlwdGlvbiIsIkNvbW1lbnRzIl0sWyJkYzppZGVudGlm''@;'; put 'put ''aWVyIiwiSWRlbnRpZmllciJdLFsiZGM6bGFuZ3VhZ2UiLCJMYW5ndWFnZSJdLFsiZGM6c3ViamVjdCIsIlN1YmplY3QiXSxbImRjOnRpdGxlIiwiVGl0bGUiXSxbImRjdGVybXM6Y3JlYXRlZCIsIkNyZWF0ZWREYXRlIiwiZGF0ZSJdLFsiZGN0ZXJtczptb2RpZmllZCIsIk1vZGlmaWVkRGF0''@;'; put 'put ''ZSIsImRhdGUiXV07VWEuQ09SRV9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXMiLHVhLkNPUkVfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVs''@;'; put 'put ''YXRpb25zaGlwcy9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXMiO3ZhciB1MD1mdW5jdGlvbigpe2Zvcih2YXIgZD1uZXcgQXJyYXkoWGEubGVuZ3RoKSxfPTA7XzxYYS5sZW5ndGg7KytfKXt2YXIgbT1YYVtfXSxUPSIoPzoiK21bMF0uc2xpY2UoMCxtWzBdLmluZGV4T2YoIjoiKSkrIjopIitt''@;'; put 'put ''WzBdLnNsaWNlKG1bMF0uaW5kZXhPZigiOiIpKzEpO2RbX109bmV3IFJlZ0V4cCgiPCIrVCsiW14+XSo+KFtcXHNcXFNdKj8pPC8iK1QrIj4iKX1yZXR1cm4gZH0oKTtmdW5jdGlvbiBycyhkKXt2YXIgXz17fTtkPVduKGQpO2Zvcih2YXIgbT0wO208WGEubGVuZ3RoOysrbSl7dmFyIFQ9WGFb''@;'; put 'put ''bV0sUD1kLm1hdGNoKHUwW21dKTtudWxsIT1QJiZQLmxlbmd0aD4wJiYoX1tUWzFdXT1DaShQWzFdKSksImRhdGUiPT09VFsyXSYmX1tUWzFdXSYmKF9bVFsxXV09bG4oX1tUWzFdXSkpfXJldHVybiBffXZhciBwcD1WcigiY3A6Y29yZVByb3BlcnRpZXMiLG51bGwseyJ4bWxuczpjcCI6VWEu''@;'; put 'put ''Q09SRV9QUk9QUywieG1sbnM6ZGMiOlVhLmRjLCJ4bWxuczpkY3Rlcm1zIjpVYS5kY3Rlcm1zLCJ4bWxuczpkY21pdHlwZSI6VWEuZGNtaXR5cGUsInhtbG5zOnhzaSI6VWEueHNpfSk7ZnVuY3Rpb24gTWcoZCxfLG0sVCxQKXtudWxsIT1QW2RdfHxudWxsPT1ffHwiIj09PV98fChQW2RdPV8s''@;'; put 'put ''Xz1CaShfKSxUW1QubGVuZ3RoXT1tP1ZyKGQsXyxtKTpVbyhkLF8pKX12YXIgZmM9W1siQXBwbGljYXRpb24iLCJBcHBsaWNhdGlvbiIsInN0cmluZyJdLFsiQXBwVmVyc2lvbiIsIkFwcFZlcnNpb24iLCJzdHJpbmciXSxbIkNvbXBhbnkiLCJDb21wYW55Iiwic3RyaW5nIl0sWyJEb2NTZWN1''@;'; put 'put ''cml0eSIsIkRvY1NlY3VyaXR5Iiwic3RyaW5nIl0sWyJNYW5hZ2VyIiwiTWFuYWdlciIsInN0cmluZyJdLFsiSHlwZXJsaW5rc0NoYW5nZWQiLCJIeXBlcmxpbmtzQ2hhbmdlZCIsImJvb2wiXSxbIlNoYXJlZERvYyIsIlNoYXJlZERvYyIsImJvb2wiXSxbIkxpbmtzVXBUb0RhdGUiLCJMaW5r''@;'; put 'put ''c1VwVG9EYXRlIiwiYm9vbCJdLFsiU2NhbGVDcm9wIiwiU2NhbGVDcm9wIiwiYm9vbCJdLFsiSGVhZGluZ1BhaXJzIiwiSGVhZGluZ1BhaXJzIiwicmF3Il0sWyJUaXRsZXNPZlBhcnRzIiwiVGl0bGVzT2ZQYXJ0cyIsInJhdyJdXTtmdW5jdGlvbiBncChkLF8sbSxUKXt2YXIgUD1bXTtpZigi''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIGQpUD1KdShkLFQpO2Vsc2UgZm9yKHZhciBRPTA7UTxkLmxlbmd0aDsrK1EpUD1QLmNvbmNhdChkW1FdLm1hcChmdW5jdGlvbihOZSl7cmV0dXJue3Y6TmV9fSkpO3ZhciBzZT0ic3RyaW5nIj09dHlwZW9mIF8/SnUoXyxUKS5tYXAoZnVuY3Rpb24oTmUpe3JldHVy''@;'; put 'put ''biBOZS52fSk6XyxvZT0wLGRlPTA7aWYoc2UubGVuZ3RoPjApZm9yKHZhciBMZT0wO0xlIT09UC5sZW5ndGg7TGUrPTIpe3N3aXRjaChkZT0rUFtMZSsxXS52LFBbTGVdLnYpe2Nhc2UiV29ya3NoZWV0cyI6Y2FzZSJcdTVkZTVcdTRmNWNcdTg4NjgiOmNhc2UiXHUwNDFiXHUwNDM4XHUwNDQx''@;'; put 'put ''XHUwNDQyXHUwNDRiIjpjYXNlIlx1MDYyM1x1MDY0OFx1MDYzMVx1MDYyN1x1MDY0MiBcdTA2MjdcdTA2NDRcdTA2MzlcdTA2NDVcdTA2NDQiOmNhc2UiXHUzMGVmXHUzMGZjXHUzMGFmXHUzMGI3XHUzMGZjXHUzMGM4IjpjYXNlIlx1MDVkMlx1MDVkY1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVk''@;'; put 'put ''NVx1MDVlYSBcdTA1ZTJcdTA1ZDFcdTA1ZDVcdTA1ZDNcdTA1ZDQiOmNhc2UiQXJiZWl0c2JsXHhlNHR0ZXIiOmNhc2UiXHhjN2FsXHUwMTMxXHUwMTVmbWEgU2F5ZmFsYXJcdTAxMzEiOmNhc2UiRmV1aWxsZXMgZGUgY2FsY3VsIjpjYXNlIkZvZ2xpIGRpIGxhdm9ybyI6Y2FzZSJGb2xoYXMg''@;'; put 'put ''ZGUgY1x4ZTFsY3VsbyI6Y2FzZSJQbGFuaWxoYXMiOmNhc2UiUmVnbmVhcmsiOmNhc2UiSG9qYXMgZGUgY1x4ZTFsY3VsbyI6Y2FzZSJXZXJrYmxhZGVuIjptLldvcmtzaGVldHM9ZGUsbS5TaGVldE5hbWVzPXNlLnNsaWNlKG9lLG9lK2RlKTticmVhaztjYXNlIk5hbWVkIFJhbmdlcyI6Y2Fz''@;'; put 'put ''ZSJSYW5nb3MgY29uIG5vbWJyZSI6Y2FzZSJcdTU0MGRcdTUyNGRcdTRlZDhcdTMwNGRcdTRlMDBcdTg5YTciOmNhc2UiQmVuYW5udGUgQmVyZWljaGUiOmNhc2UiTmF2bmdpdm5lIG9tclx4ZTVkZXIiOm0uTmFtZWRSYW5nZXM9ZGUsbS5EZWZpbmVkTmFtZXM9c2Uuc2xpY2Uob2Usb2UrZGUp''@;'; put 'put ''O2JyZWFrO2Nhc2UiQ2hhcnRzIjpjYXNlIkRpYWdyYW1tZSI6bS5DaGFydHNoZWV0cz1kZSxtLkNoYXJ0TmFtZXM9c2Uuc2xpY2Uob2Usb2UrZGUpfW9lKz1kZX19VWEuRVhUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9leHRl''@;'; put 'put ''bmRlZC1wcm9wZXJ0aWVzIix1YS5FWFRfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZW5kZWQtcHJvcGVydGllcyI7dmFyIEJtPVZyKCJQcm9wZXJ0aWVzIixudWxsLHt4bWxuczpVYS5FWFRfUFJP''@;'; put 'put ''UFMsInhtbG5zOnZ0IjpVYS52dH0pO1VhLkNVU1RfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2N1c3RvbS1wcm9wZXJ0aWVzIix1YS5DVVNUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNl''@;'; put 'put ''RG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbS1wcm9wZXJ0aWVzIjt2YXIgeWY9LzxbXj5dKz5bXjxdKi9nLHAzPVZyKCJQcm9wZXJ0aWVzIixudWxsLHt4bWxuczpVYS5DVVNUX1BST1BTLCJ4bWxuczp2dCI6VWEudnR9KTt2YXIgZzM9e1RpdGxlOiJUaXRsZSIsU3ViamVjdDoi''@;'; put 'put ''U3ViamVjdCIsQXV0aG9yOiJBdXRob3IiLEtleXdvcmRzOiJLZXl3b3JkcyIsQ29tbWVudHM6IkRlc2NyaXB0aW9uIixMYXN0QXV0aG9yOiJMYXN0QXV0aG9yIixSZXZOdW1iZXI6IlJldmlzaW9uIixBcHBsaWNhdGlvbjoiQXBwTmFtZSIsTGFzdFByaW50ZWQ6Ikxhc3RQcmludGVkIixDcmVh''@;'; put 'put ''dGVkRGF0ZToiQ3JlYXRlZCIsTW9kaWZpZWREYXRlOiJMYXN0U2F2ZWQiLENhdGVnb3J5OiJDYXRlZ29yeSIsTWFuYWdlcjoiTWFuYWdlciIsQ29tcGFueToiQ29tcGFueSIsQXBwVmVyc2lvbjoiVmVyc2lvbiIsQ29udGVudFN0YXR1czoiQ29udGVudFN0YXR1cyIsSWRlbnRpZmllcjoiSWRl''@;'; put 'put ''bnRpZmllciIsTGFuZ3VhZ2U6Ikxhbmd1YWdlIn0sbTM9Y2UoZzMpO2Z1bmN0aW9uIG1hKGQsXyxtKXtkW189bTNbX118fF9dPW19ZnVuY3Rpb24gYTEoZCl7dmFyIF89ZC5yZWFkX3NoaWZ0KDQpLG09ZC5yZWFkX3NoaWZ0KDQpO3JldHVybiBuZXcgRGF0ZSgxZTMqKG0vMWU3Kk1hdGgucG93''@;'; put 'put ''KDIsMzIpK18vMWU3LTExNjQ0NDczNjAwKSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLjAwMC8sIiIpfWZ1bmN0aW9uIEYwKGQsXyxtKXt2YXIgVD1kLmwsUD1kLnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKTtpZihtKWZvcig7ZC5sLVQmMzspKytkLmw7cmV0dXJuIFB9ZnVuY3Rpb24gRmwo''@;'; put 'put ''ZCxfLG0pe3ZhciBUPWQucmVhZF9zaGlmdCgwLCJscHdzdHIiKTtyZXR1cm4gbSYmKGQubCs9NC0oVC5sZW5ndGgrMSYzKSYzKSxUfWZ1bmN0aW9uIHpzKGQsXyxtKXtyZXR1cm4gMzE9PT1fP0ZsKGQpOkYwKGQsMCxtKX1mdW5jdGlvbiBZdShkLF8sbSl7cmV0dXJuIHpzKGQsXywhMT09PW0/''@;'; put 'put ''MDo0KX1mdW5jdGlvbiBzMShkKXt2YXIgXz1kLmwsbT1VbShkLDgxKTtyZXR1cm4gMD09ZFtkLmxdJiYwPT1kW2QubCsxXSYmZC5sLV8mMiYmKGQubCs9MiksW20sVW0oZCwzKV19ZnVuY3Rpb24gZHkoZCxfKXtmb3IodmFyIG09ZC5yZWFkX3NoaWZ0KDQpLFQ9e30sUD0wO1AhPW07KytQKXt2''@;'; put 'put ''YXIgUT1kLnJlYWRfc2hpZnQoNCksc2U9ZC5yZWFkX3NoaWZ0KDQpO1RbUV09ZC5yZWFkX3NoaWZ0KHNlLDEyMDA9PT1fPyJ1dGYxNmxlIjoidXRmOCIpLnJlcGxhY2UoRCwiIikucmVwbGFjZShwLCIhIiksMTIwMD09PV8mJnNlJTImJihkLmwrPTIpfXJldHVybiAzJmQubCYmKGQubD1kLmw+''@;'; put 'put ''PjM8PDIpLFR9ZnVuY3Rpb24gT3UoZCl7dmFyIF89ZC5yZWFkX3NoaWZ0KDQpLG09ZC5zbGljZShkLmwsZC5sK18pO3JldHVybiBkLmwrPV8sKDMmXyk+MCYmKGQubCs9NC0oMyZfKSYzKSxtfWZ1bmN0aW9uIFVtKGQsXyxtKXt2YXIgUCxUPWQucmVhZF9zaGlmdCgyKSxRPW18fHt9O2lmKGQu''@;'; put 'put ''bCs9MiwxMiE9PV8mJlQhPT1fJiYtMT09PXI1LmluZGV4T2YoXykmJig0MTI2IT0oNjU1MzQmXyl8fDQxMjYhPSg2NTUzNCZUKSkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB0eXBlICIrXysiIHNhdyAiK1QpO3N3aXRjaCgxMj09PV8/VDpfKXtjYXNlIDI6cmV0dXJuIFA9ZC5yZWFkX3No''@;'; put 'put ''aWZ0KDIsImkiKSxRLnJhd3x8KGQubCs9MiksUDtjYXNlIDM6cmV0dXJuIGQucmVhZF9zaGlmdCg0LCJpIik7Y2FzZSAxMTpyZXR1cm4gMCE9PWQucmVhZF9zaGlmdCg0KTtjYXNlIDE5OnJldHVybiBkLnJlYWRfc2hpZnQoNCk7Y2FzZSAzMDpyZXR1cm4gRjAoZCwwLDQpLnJlcGxhY2UoRCwi''@;'; put 'put ''Iik7Y2FzZSAzMTpyZXR1cm4gRmwoZCk7Y2FzZSA2NDpyZXR1cm4gYTEoZCk7Y2FzZSA2NTpyZXR1cm4gT3UoZCk7Y2FzZSA3MTpyZXR1cm4gZnVuY3Rpb24gU2YoZCl7dmFyIF89e307cmV0dXJuIF8uU2l6ZT1kLnJlYWRfc2hpZnQoNCksZC5sKz1fLlNpemUrMy0oXy5TaXplLTEpJTQsX30o''@;'; put 'put ''ZCk7Y2FzZSA4MDpyZXR1cm4gWXUoZCxULCFRLnJhdykucmVwbGFjZShELCIiKTtjYXNlIDgxOnJldHVybiBmdW5jdGlvbiByZChkLF8pe2lmKCFfKXRocm93IG5ldyBFcnJvcigiVnRVbmFsaWduZWRTdHJpbmcgbXVzdCBoYXZlIHBvc2l0aXZlIGxlbmd0aCIpO3JldHVybiB6cyhkLF8sMCl9''@;'; put 'put ''KGQsVCkucmVwbGFjZShELCIiKTtjYXNlIDQxMDg6cmV0dXJuIGZ1bmN0aW9uIHYzKGQpe2Zvcih2YXIgXz1kLnJlYWRfc2hpZnQoNCksbT1bXSxUPTA7VDxfLzI7KytUKW0ucHVzaChzMShkKSk7cmV0dXJuIG19KGQpO2Nhc2UgNDEyNjpjYXNlIDQxMjc6cmV0dXJuIDQxMjc9PVQ/ZnVuY3Rp''@;'; put 'put ''b24gd2YoZCl7Zm9yKHZhciBfPWQucmVhZF9zaGlmdCg0KSxtPVtdLFQ9MDtUIT1fOysrVCl7dmFyIFA9ZC5sO21bVF09ZC5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpLnJlcGxhY2UoRCwiIiksZC5sLVAmMiYmKGQubCs9Mil9cmV0dXJuIG19KGQpOmZ1bmN0aW9uIENmKGQpe2Zvcih2YXIgXz1k''@;'; put 'put ''LnJlYWRfc2hpZnQoNCksbT1bXSxUPTA7VCE9XzsrK1QpbVtUXT1kLnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKS5yZXBsYWNlKEQsIiIpO3JldHVybiBtfShkKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZWRQcm9wZXJ0eVZhbHVlIHVucmVjb2duaXplZCB0eXBlICIrXysiICIrVCl9''@;'; put 'put ''fWZ1bmN0aW9uIEM5KGQsXyl7dmFyIG09RnIoNCksVD1Gcig0KTtzd2l0Y2gobS53cml0ZV9zaGlmdCg0LDgwPT1kPzMxOmQpLGQpe2Nhc2UgMzpULndyaXRlX3NoaWZ0KC00LF8pO2JyZWFrO2Nhc2UgNTooVD1Gcig4KSkud3JpdGVfc2hpZnQoOCxfLCJmIik7YnJlYWs7Y2FzZSAxMTpULndy''@;'; put 'put ''aXRlX3NoaWZ0KDQsXz8xOjApO2JyZWFrO2Nhc2UgNjQ6VD1mdW5jdGlvbiB4ZyhkKXt2YXIgbT0oInN0cmluZyI9PXR5cGVvZiBkP25ldyBEYXRlKERhdGUucGFyc2UoZCkpOmQpLmdldFRpbWUoKS8xZTMrMTE2NDQ0NzM2MDAsVD1tJU1hdGgucG93KDIsMzIpLFA9KG0tVCkvTWF0aC5wb3co''@;'; put 'put ''MiwzMik7UCo9MWU3O3ZhciBRPShUKj0xZTcpL01hdGgucG93KDIsMzIpfDA7UT4wJiYoVCU9TWF0aC5wb3coMiwzMiksUCs9USk7dmFyIHNlPUZyKDgpO3JldHVybiBzZS53cml0ZV9zaGlmdCg0LFQpLHNlLndyaXRlX3NoaWZ0KDQsUCksc2V9KF8pO2JyZWFrO2Nhc2UgMzE6Y2FzZSA4MDpm''@;'; put 'put ''b3IoKFQ9RnIoNCsyKihfLmxlbmd0aCsxKSsoXy5sZW5ndGglMj8wOjIpKSkud3JpdGVfc2hpZnQoNCxfLmxlbmd0aCsxKSxULndyaXRlX3NoaWZ0KDAsXywiZGJjcyIpO1QubCE9VC5sZW5ndGg7KVQud3JpdGVfc2hpZnQoMSwwKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlw''@;'; put 'put ''ZWRQcm9wZXJ0eVZhbHVlIHVucmVjb2duaXplZCB0eXBlICIrZCsiICIrXyl9cmV0dXJuIEcoW20sVF0pfWZ1bmN0aW9uIEVmKGQsXyl7dmFyIG09ZC5sLFQ9ZC5yZWFkX3NoaWZ0KDQpLFA9ZC5yZWFkX3NoaWZ0KDQpLFE9W10sc2U9MCxvZT0wLGRlPS0xLExlPXt9O2ZvcihzZT0wO3NlIT1Q''@;'; put 'put ''Oysrc2Upe3ZhciBOZT1kLnJlYWRfc2hpZnQoNCksQmU9ZC5yZWFkX3NoaWZ0KDQpO1Fbc2VdPVtOZSxCZSttXX1RLnNvcnQoZnVuY3Rpb24oYnQsRXQpe3JldHVybiBidFsxXS1FdFsxXX0pO3ZhciBaZT17fTtmb3Ioc2U9MDtzZSE9UDsrK3NlKXtpZihkLmwhPT1RW3NlXVsxXSl7dmFyIG50''@;'; put 'put ''PSEwO2lmKHNlPjAmJl8pc3dpdGNoKF9bUVtzZS0xXVswXV0udCl7Y2FzZSAyOmQubCsyPT09UVtzZV1bMV0mJihkLmwrPTIsbnQ9ITEpO2JyZWFrO2Nhc2UgODA6Y2FzZSA0MTA4OmQubDw9UVtzZV1bMV0mJihkLmw9UVtzZV1bMV0sbnQ9ITEpfWlmKCghX3x8MD09c2UpJiZkLmw8PVFbc2Vd''@;'; put 'put ''WzFdJiYobnQ9ITEsZC5sPVFbc2VdWzFdKSxudCl0aHJvdyBuZXcgRXJyb3IoIlJlYWQgRXJyb3I6IEV4cGVjdGVkIGFkZHJlc3MgIitRW3NlXVsxXSsiIGF0ICIrZC5sKyIgOiIrc2UpfWlmKF8pe3ZhciBtdD1fW1Fbc2VdWzBdXTtpZihaZVttdC5uXT1VbShkLG10LnQse3JhdzohMH0pLCJ2''@;'; put 'put ''ZXJzaW9uIj09PW10LnAmJihaZVttdC5uXT1TdHJpbmcoWmVbbXQubl0+PjE2KSsiLiIrKCIwMDAwIitTdHJpbmcoNjU1MzUmWmVbbXQubl0pKS5zbGljZSgtNCkpLCJDb2RlUGFnZSI9PW10Lm4pc3dpdGNoKFplW210Lm5dKXtjYXNlIDA6WmVbbXQubl09MTI1MjtjYXNlIDg3NDpjYXNlIDkz''@;'; put 'put ''MjpjYXNlIDkzNjpjYXNlIDk0OTpjYXNlIDk1MDpjYXNlIDEyNTA6Y2FzZSAxMjUxOmNhc2UgMTI1MzpjYXNlIDEyNTQ6Y2FzZSAxMjU1OmNhc2UgMTI1NjpjYXNlIDEyNTc6Y2FzZSAxMjU4OmNhc2UgMWU0OmNhc2UgMTIwMDpjYXNlIDEyMDE6Y2FzZSAxMjUyOmNhc2UgNjVlMzpjYXNlLTUz''@;'; put 'put ''NjpjYXNlIDY1MDAxOmNhc2UtNTM1Okgob2U9WmVbbXQubl0+Pj4wJjY1NTM1KTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ29kZVBhZ2U6ICIrWmVbbXQubl0pfX1lbHNlIGlmKDE9PT1RW3NlXVswXSl7aWYob2U9WmUuQ29kZVBhZ2U9VW0oZCwyKSxIKG9l''@;'; put 'put ''KSwtMSE9PWRlKXt2YXIgUWU9ZC5sO2QubD1RW2RlXVsxXSxMZT1keShkLG9lKSxkLmw9UWV9fWVsc2UgaWYoMD09PVFbc2VdWzBdKXtpZigwPT09b2Upe2RlPXNlLGQubD1RW3NlKzFdWzFdO2NvbnRpbnVlfUxlPWR5KGQsb2UpfWVsc2V7dmFyIGt0LGZ0PUxlW1Fbc2VdWzBdXTtzd2l0Y2go''@;'; put 'put ''ZFtkLmxdKXtjYXNlIDY1OmQubCs9NCxrdD1PdShkKTticmVhaztjYXNlIDMwOmNhc2UgMzE6ZC5sKz00LGt0PVl1KGQsZFtkLmwtNF0pLnJlcGxhY2UoL1x1MDAwMCskLywiIik7YnJlYWs7Y2FzZSAzOmQubCs9NCxrdD1kLnJlYWRfc2hpZnQoNCwiaSIpO2JyZWFrO2Nhc2UgMTk6ZC5sKz00''@;'; put 'put ''LGt0PWQucmVhZF9zaGlmdCg0KTticmVhaztjYXNlIDU6ZC5sKz00LGt0PWQucmVhZF9zaGlmdCg4LCJmIik7YnJlYWs7Y2FzZSAxMTpkLmwrPTQsa3Q9eGEoZCw0KTticmVhaztjYXNlIDY0OmQubCs9NCxrdD1sbihhMShkKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucGFy''@;'; put 'put ''c2VkIHZhbHVlOiAiK2RbZC5sXSl9WmVbZnRdPWt0fX1yZXR1cm4gZC5sPW0rVCxaZX12YXIgQWc9WyJDb2RlUGFnZSIsIlRodW1ibmFpbCIsIl9QSURfTElOS0JBU0UiLCJfUElEX0hMSU5LUyIsIlN5c3RlbUlkZW50aWZpZXIiLCJGTVRJRCJdLmNvbmNhdChbIldvcmtzaGVldHMiLCJTaGVl''@;'; put 'put ''dE5hbWVzIiwiTmFtZWRSYW5nZXMiLCJEZWZpbmVkTmFtZXMiLCJDaGFydHNoZWV0cyIsIkNoYXJ0TmFtZXMiXSk7ZnVuY3Rpb24gSkMoZCl7c3dpdGNoKHR5cGVvZiBkKXtjYXNlImJvb2xlYW4iOnJldHVybiAxMTtjYXNlIm51bWJlciI6cmV0dXJuKDB8ZCk9PWQ/Mzo1O2Nhc2Uic3RyaW5n''@;'; put 'put ''IjpyZXR1cm4gMzE7Y2FzZSJvYmplY3QiOmlmKGQgaW5zdGFuY2VvZiBEYXRlKXJldHVybiA2NH1yZXR1cm4tMX1mdW5jdGlvbiBoeShkLF8sbSl7dmFyIFQ9RnIoOCksUD1bXSxRPVtdLHNlPTgsb2U9MCxkZT1Gcig4KSxMZT1Gcig4KTtpZihkZS53cml0ZV9zaGlmdCg0LDIpLGRlLndyaXRl''@;'; put 'put ''X3NoaWZ0KDQsMTIwMCksTGUud3JpdGVfc2hpZnQoNCwxKSxRLnB1c2goZGUpLFAucHVzaChMZSksc2UrPTgrZGUubGVuZ3RoLCFfKXsoTGU9RnIoOCkpLndyaXRlX3NoaWZ0KDQsMCksUC51bnNoaWZ0KExlKTt2YXIgTmU9W0ZyKDQpXTtmb3IoTmVbMF0ud3JpdGVfc2hpZnQoNCxkLmxlbmd0''@;'; put 'put ''aCksb2U9MDtvZTxkLmxlbmd0aDsrK29lKXt2YXIgQmU9ZFtvZV1bMF07Zm9yKChkZT1Gcig4KzIqKEJlLmxlbmd0aCsxKSsoQmUubGVuZ3RoJTI/MDoyKSkpLndyaXRlX3NoaWZ0KDQsb2UrMiksZGUud3JpdGVfc2hpZnQoNCxCZS5sZW5ndGgrMSksZGUud3JpdGVfc2hpZnQoMCxCZSwiZGJj''@;'; put 'put ''cyIpO2RlLmwhPWRlLmxlbmd0aDspZGUud3JpdGVfc2hpZnQoMSwwKTtOZS5wdXNoKGRlKX1kZT1HKE5lKSxRLnVuc2hpZnQoZGUpLHNlKz04K2RlLmxlbmd0aH1mb3Iob2U9MDtvZTxkLmxlbmd0aDsrK29lKWlmKCghX3x8X1tkW29lXVswXV0pJiYhKEFnLmluZGV4T2YoZFtvZV1bMF0pPi0x''@;'; put 'put ''KSYmbnVsbCE9ZFtvZV1bMV0pe3ZhciBaZT1kW29lXVsxXSxudD0wO2lmKF8pe3ZhciBtdD1tW250PStfW2Rbb2VdWzBdXV07aWYoInZlcnNpb24iPT1tdC5wJiYic3RyaW5nIj09dHlwZW9mIFplKXt2YXIgUWU9WmUuc3BsaXQoIi4iKTtaZT0oK1FlWzBdPDwxNikrKCtRZVsxXXx8MCl9ZGU9''@;'; put 'put ''QzkobXQudCxaZSl9ZWxzZXt2YXIgZnQ9SkMoWmUpOy0xPT1mdCYmKGZ0PTMxLFplPVN0cmluZyhaZSkpLGRlPUM5KGZ0LFplKX1RLnB1c2goZGUpLChMZT1Gcig4KSkud3JpdGVfc2hpZnQoNCxfP250OjIrb2UpLFAucHVzaChMZSksc2UrPTgrZGUubGVuZ3RofXZhciBrdD04KihRLmxlbmd0''@;'; put 'put ''aCsxKTtmb3Iob2U9MDtvZTxRLmxlbmd0aDsrK29lKVBbb2VdLndyaXRlX3NoaWZ0KDQsa3QpLGt0Kz1RW29lXS5sZW5ndGg7cmV0dXJuIFQud3JpdGVfc2hpZnQoNCxzZSksVC53cml0ZV9zaGlmdCg0LFEubGVuZ3RoKSxHKFtUXS5jb25jYXQoUCkuY29uY2F0KFEpKX1mdW5jdGlvbiBmeShk''@;'; put 'put ''LF8sbSl7dmFyIFQ9ZC5jb250ZW50O2lmKCFUKXJldHVybnt9O09sKFQsMCk7dmFyIFAsUSxzZSxvZSxkZT0wO1QuY2hrKCJmZWZmIiwiQnl0ZSBPcmRlcjogIiksVC5yZWFkX3NoaWZ0KDIpO3ZhciBMZT1ULnJlYWRfc2hpZnQoNCksTmU9VC5yZWFkX3NoaWZ0KDE2KTtpZihOZSE9PWFlLnV0''@;'; put 'put ''aWxzLmNvbnN0cy5IRUFERVJfQ0xTSUQmJk5lIT09bSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBQcm9wZXJ0eVNldCBDTFNJRCAiK05lKTtpZigxIT09KFA9VC5yZWFkX3NoaWZ0KDQpKSYmMiE9PVApdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgI1NldHM6ICIrUCk7aWYoUT1ULnJlYWRf''@;'; put 'put ''c2hpZnQoMTYpLG9lPVQucmVhZF9zaGlmdCg0KSwxPT09UCYmb2UhPT1ULmwpdGhyb3cgbmV3IEVycm9yKCJMZW5ndGggbWlzbWF0Y2g6ICIrb2UrIiAhPT0gIitULmwpOzI9PT1QJiYoc2U9VC5yZWFkX3NoaWZ0KDE2KSxkZT1ULnJlYWRfc2hpZnQoNCkpO3ZhciBtdCxCZT1FZihULF8pLFpl''@;'; put 'put ''PXtTeXN0ZW1JZGVudGlmaWVyOkxlfTtmb3IodmFyIG50IGluIEJlKVplW250XT1CZVtudF07aWYoWmUuRk1USUQ9USwxPT09UClyZXR1cm4gWmU7aWYoZGUtVC5sPT0yJiYoVC5sKz0yKSxULmwhPT1kZSl0aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBtaXNtYXRjaCAyOiAiK1QubCsiICE9PSAi''@;'; put 'put ''K2RlKTt0cnl7bXQ9RWYoVCxudWxsKX1jYXRjaHt9Zm9yKG50IGluIG10KVplW250XT1tdFtudF07cmV0dXJuIFplLkZNVElEPVtRLHNlXSxaZX1mdW5jdGlvbiBVaShkLF8sbSxULFAsUSl7dmFyIHNlPUZyKFA/Njg6NDgpLG9lPVtzZV07c2Uud3JpdGVfc2hpZnQoMiw2NTUzNCksc2Uud3Jp''@;'; put 'put ''dGVfc2hpZnQoMiwwKSxzZS53cml0ZV9zaGlmdCg0LDg0MjQxMjU5OSksc2Uud3JpdGVfc2hpZnQoMTYsYWUudXRpbHMuY29uc3RzLkhFQURFUl9DTFNJRCwiaGV4Iiksc2Uud3JpdGVfc2hpZnQoNCxQPzI6MSksc2Uud3JpdGVfc2hpZnQoMTYsXywiaGV4Iiksc2Uud3JpdGVfc2hpZnQoNCxQ''@;'; put 'put ''PzY4OjQ4KTt2YXIgZGU9aHkoZCxtLFQpO2lmKG9lLnB1c2goZGUpLFApe3ZhciBMZT1oeShQLG51bGwsbnVsbCk7c2Uud3JpdGVfc2hpZnQoMTYsUSwiaGV4Iiksc2Uud3JpdGVfc2hpZnQoNCw2OCtkZS5sZW5ndGgpLG9lLnB1c2goTGUpfXJldHVybiBHKG9lKX1mdW5jdGlvbiBtcChkLF8p''@;'; put 'put ''e3JldHVybiBkLnJlYWRfc2hpZnQoXyksbnVsbH1mdW5jdGlvbiB4YShkLF8pe3JldHVybiAxPT09ZC5yZWFkX3NoaWZ0KF8pfWZ1bmN0aW9uIHBsKGQsXyl7cmV0dXJuIF98fChfPUZyKDIpKSxfLndyaXRlX3NoaWZ0KDIsKyEhZCksX31mdW5jdGlvbiBpZChkKXtyZXR1cm4gZC5yZWFkX3No''@;'; put 'put ''aWZ0KDIsInUiKX1mdW5jdGlvbiBkMChkLF8pe3JldHVybiBffHwoXz1GcigyKSksXy53cml0ZV9zaGlmdCgyLGQpLF99ZnVuY3Rpb24gaDgoZCxfKXtyZXR1cm4gZnVuY3Rpb24gZDgoZCxfLG0pe2Zvcih2YXIgVD1bXSxQPWQubCtfO2QubDxQOylULnB1c2gobShkLFAtZC5sKSk7aWYoUCE9''@;'; put 'put ''PWQubCl0aHJvdyBuZXcgRXJyb3IoIlNsdXJwIGVycm9yIik7cmV0dXJuIFR9KGQsXyxpZCl9ZnVuY3Rpb24gbGUoZCxfLG0pe3JldHVybiBtfHwobT1GcigyKSksbS53cml0ZV9zaGlmdCgxLCJlIj09Xz8rZDorISFkKSxtLndyaXRlX3NoaWZ0KDEsImUiPT1fPzE6MCksbX1mdW5jdGlvbiBi''@;'; put 'put ''ZShkLF8sbSl7dmFyIFQ9ZC5yZWFkX3NoaWZ0KG0mJm0uYmlmZj49MTI/MjoxKSxQPSJzYmNzLWNvbnQiLFE9QzttJiZtLmJpZmY+PTgmJihDPTEyMDApLG0mJjghPW0uYmlmZj8xMj09bS5iaWZmJiYoUD0id3N0ciIpOmQucmVhZF9zaGlmdCgxKSYmKFA9ImRiY3MtY29udCIpLG0uYmlmZj49''@;'; put 'put ''MiYmbS5iaWZmPD01JiYoUD0iY3BzdHIiKTt2YXIgb2U9VD9kLnJlYWRfc2hpZnQoVCxQKToiIjtyZXR1cm4gQz1RLG9lfWZ1bmN0aW9uIE9lKGQpe3ZhciBfPUM7Qz0xMjAwO3ZhciBkZSxtPWQucmVhZF9zaGlmdCgyKSxUPWQucmVhZF9zaGlmdCgxKSxQPTQmVCxRPTgmVCxzZT0xKygxJlQp''@;'; put 'put ''LG9lPTAsTGU9e307USYmKG9lPWQucmVhZF9zaGlmdCgyKSksUCYmKGRlPWQucmVhZF9zaGlmdCg0KSk7dmFyIEJlPTA9PT1tPyIiOmQucmVhZF9zaGlmdChtLDI9PXNlPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKTtpZihRKWZvcihMZS5fUj1bXTtvZS0tID4wOylMZS5fUi5wdXNoKHtpZHg6''@;'; put 'put ''ZC5yZWFkX3NoaWZ0KDIpLGlmbnQ6ZC5yZWFkX3NoaWZ0KDIpfSk7cmV0dXJuIFAmJihkLmwrPWRlKSxMZS50PUJlLFF8fChMZS5yPSI8dD4iK0xlLnQrIjwvdD4iKSxDPV8sTGV9ZnVuY3Rpb24gJGUoZCxfKXt2YXIgbT1kLlImJmQuUi5sZW5ndGh8fGQucjtkLnImJihkLlI9bXkoZC5yKSk7''@;'; put 'put ''dmFyIFQ9IiIsUD0wO20/ZC5SLmZvckVhY2goZnVuY3Rpb24obXQpe1ArKyxUKz1tdC52fHwiIn0pOihUPWQudHx8IiIsUD0xKTt2YXIgUT1GcigzKyhQPjE/MjowKSk7US53cml0ZV9zaGlmdCgyLFQubGVuZ3RoKSxRLndyaXRlX3NoaWZ0KDEsMXwoUD4xPzg6MCkpLFA+MSYmUS53cml0ZV9z''@;'; put 'put ''aGlmdCgyLFApO3ZhciBzZT1GcigyKlQubGVuZ3RoKTtzZS53cml0ZV9zaGlmdCgyKlQubGVuZ3RoLFQsInV0ZjE2bGUiKTt2YXIgb2U9W1Esc2VdO2lmKG0pe3ZhciBkZT1Gcig0KmQuUi5sZW5ndGgpLExlPTA7b2UucHVzaChkZSk7Zm9yKHZhciBOZT0wO05lPGQuUi5sZW5ndGg7KytOZSl7''@;'; put 'put ''dmFyIEJlPWQuUltOZV07ZGUud3JpdGVfc2hpZnQoMixMZSksTGUrPShCZS52fHwiIikubGVuZ3RoO3ZhciBaZT1CZS5zP0EyKF8uY2VsbFhmcyxfLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6QmUuc30sXyk6MCxudD1fLmNlbGxYZnNbWmVdLmZvbnRJZDtkZS53cml0ZV9zaGlmdCgyLG50''@;'; put 'put ''PDQ/bnQ6bnQrMSl9fXJldHVybiBHKG9lKX1mdW5jdGlvbiBTdChkLF8sbSl7aWYobSl7aWYobS5iaWZmPj0yJiZtLmJpZmY8PTUpcmV0dXJuIGQucmVhZF9zaGlmdChfLCJjcHN0ciIpO2lmKG0uYmlmZj49MTIpcmV0dXJuIGQucmVhZF9zaGlmdChfLCJkYmNzLWNvbnQiKX12YXIgUD1kLnJl''@;'; put 'put ''YWRfc2hpZnQoMSk7cmV0dXJuIGQucmVhZF9zaGlmdChfLDA9PT1QPyJzYmNzLWNvbnQiOiJkYmNzLWNvbnQiKX1mdW5jdGlvbiBRdChkLF8sbSl7dmFyIFQ9ZC5yZWFkX3NoaWZ0KG0mJjI9PW0uYmlmZj8xOjIpO3JldHVybiAwPT09VD8oZC5sKyssIiIpOlN0KGQsVCxtKX1mdW5jdGlvbiBF''@;'; put 'put ''bihkLF8sbSl7aWYobS5iaWZmPjUpcmV0dXJuIFF0KGQsMCxtKTt2YXIgVD1kLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDA9PT1UPyhkLmwrKywiIik6ZC5yZWFkX3NoaWZ0KFQsbS5iaWZmPD00fHwhZC5sZW5zPyJjcHN0ciI6InNiY3MtY29udCIpfWZ1bmN0aW9uIGNyKGQsXyxtKXtyZXR1cm4g''@;'; put 'put ''bXx8KG09RnIoMysyKmQubGVuZ3RoKSksbS53cml0ZV9zaGlmdCgyLGQubGVuZ3RoKSxtLndyaXRlX3NoaWZ0KDEsMSksbS53cml0ZV9zaGlmdCgzMSxkLCJ1dGYxNmxlIiksbX1mdW5jdGlvbiB4byhkKXt2YXIgXz1kLnJlYWRfc2hpZnQoNCk7cmV0dXJuIF8+MD9kLnJlYWRfc2hpZnQoXywi''@;'; put 'put ''dXRmMTZsZSIpLnJlcGxhY2UoRCwiIik6IiJ9ZnVuY3Rpb24gWWkoZCxfKXtffHwoXz1Gcig2KzIqZC5sZW5ndGgpKSxfLndyaXRlX3NoaWZ0KDQsMStkLmxlbmd0aCk7Zm9yKHZhciBtPTA7bTxkLmxlbmd0aDsrK20pXy53cml0ZV9zaGlmdCgyLGQuY2hhckNvZGVBdChtKSk7cmV0dXJuIF8u''@;'; put 'put ''d3JpdGVfc2hpZnQoMiwwKSxffWZ1bmN0aW9uIFBzKGQpe3ZhciBfPUZyKDUxMiksbT0wLFQ9ZC5UYXJnZXQ7ImZpbGU6Ly8iPT1ULnNsaWNlKDAsNykmJihUPVQuc2xpY2UoNykpO3ZhciBQPVQuaW5kZXhPZigiIyIpLFE9UD4tMT8zMToyMztzd2l0Y2goVC5jaGFyQXQoMCkpe2Nhc2UiIyI6''@;'; put 'put ''UT0yODticmVhaztjYXNlIi4iOlEmPS0zfV8ud3JpdGVfc2hpZnQoNCwyKSxfLndyaXRlX3NoaWZ0KDQsUSk7dmFyIHNlPVs4LDY4MTU4MjcsNjYxOTIzNyw0ODQ5NzgwLDgzXTtmb3IobT0wO208c2UubGVuZ3RoOysrbSlfLndyaXRlX3NoaWZ0KDQsc2VbbV0pO2lmKDI4PT1RKVlpKFQ9VC5z''@;'; put 'put ''bGljZSgxKSxfKTtlbHNlIGlmKDImUSl7Zm9yKHNlPSJlMCBjOSBlYSA3OSBmOSBiYSBjZSAxMSA4YyA4MiAwMCBhYSAwMCA0YiBhOSAwYiIuc3BsaXQoIiAiKSxtPTA7bTxzZS5sZW5ndGg7KyttKV8ud3JpdGVfc2hpZnQoMSxwYXJzZUludChzZVttXSwxNikpO3ZhciBvZT1QPi0xP1Quc2xp''@;'; put 'put ''Y2UoMCxQKTpUO2ZvcihfLndyaXRlX3NoaWZ0KDQsMioob2UubGVuZ3RoKzEpKSxtPTA7bTxvZS5sZW5ndGg7KyttKV8ud3JpdGVfc2hpZnQoMixvZS5jaGFyQ29kZUF0KG0pKTtfLndyaXRlX3NoaWZ0KDIsMCksOCZRJiZZaShQPi0xP1Quc2xpY2UoUCsxKToiIixfKX1lbHNle2ZvcihzZT0i''@;'; put 'put ''MDMgMDMgMDAgMDAgMDAgMDAgMDAgMDAgYzAgMDAgMDAgMDAgMDAgMDAgMDAgNDYiLnNwbGl0KCIgIiksbT0wO208c2UubGVuZ3RoOysrbSlfLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoc2VbbV0sMTYpKTtmb3IodmFyIGRlPTA7Ii4uLyI9PVQuc2xpY2UoMypkZSwzKmRlKzMpfHwiLi5cXCI9''@;'; put 'put ''PVQuc2xpY2UoMypkZSwzKmRlKzMpOykrK2RlO2ZvcihfLndyaXRlX3NoaWZ0KDIsZGUpLF8ud3JpdGVfc2hpZnQoNCxULmxlbmd0aC0zKmRlKzEpLG09MDttPFQubGVuZ3RoLTMqZGU7KyttKV8ud3JpdGVfc2hpZnQoMSwyNTUmVC5jaGFyQ29kZUF0KG0rMypkZSkpO2ZvcihfLndyaXRlX3No''@;'; put 'put ''aWZ0KDEsMCksXy53cml0ZV9zaGlmdCgyLDY1NTM1KSxfLndyaXRlX3NoaWZ0KDIsNTcwMDUpLG09MDttPDY7KyttKV8ud3JpdGVfc2hpZnQoNCwwKX1yZXR1cm4gXy5zbGljZSgwLF8ubCl9ZnVuY3Rpb24gYWEoZCl7cmV0dXJuW2QucmVhZF9zaGlmdCgxKSxkLnJlYWRfc2hpZnQoMSksZC5y''@;'; put 'put ''ZWFkX3NoaWZ0KDEpLGQucmVhZF9zaGlmdCgxKV19ZnVuY3Rpb24gSW8oZCxfKXt2YXIgbT1hYShkKTtyZXR1cm4gbVszXT0wLG19ZnVuY3Rpb24gWmkoZCl7cmV0dXJue3I6ZC5yZWFkX3NoaWZ0KDIpLGM6ZC5yZWFkX3NoaWZ0KDIpLGl4ZmU6ZC5yZWFkX3NoaWZ0KDIpfX1mdW5jdGlvbiBn''@;'; put 'put ''bChkLF8sbSxUKXtyZXR1cm4gVHx8KFQ9RnIoNikpLFQud3JpdGVfc2hpZnQoMixkKSxULndyaXRlX3NoaWZ0KDIsXyksVC53cml0ZV9zaGlmdCgyLG18fDApLFR9ZnVuY3Rpb24gcGMoZCxfLG0pe3ZhciBUPW0uYmlmZj44PzQ6MjtyZXR1cm5bZC5yZWFkX3NoaWZ0KFQpLGQucmVhZF9zaGlm''@;'; put 'put ''dChULCJpIiksZC5yZWFkX3NoaWZ0KFQsImkiKV19ZnVuY3Rpb24gVWQoZCl7cmV0dXJuW2QucmVhZF9zaGlmdCgyKSxiZChkKV19ZnVuY3Rpb24gb2QoZCl7dmFyIF89ZC5yZWFkX3NoaWZ0KDIpLG09ZC5yZWFkX3NoaWZ0KDIpO3JldHVybntzOntjOmQucmVhZF9zaGlmdCgyKSxyOl99LGU6''@;'; put 'put ''e2M6ZC5yZWFkX3NoaWZ0KDIpLHI6bX19fWZ1bmN0aW9uIFpjKGQsXyl7cmV0dXJuIF98fChfPUZyKDgpKSxfLndyaXRlX3NoaWZ0KDIsZC5zLnIpLF8ud3JpdGVfc2hpZnQoMixkLmUuciksXy53cml0ZV9zaGlmdCgyLGQucy5jKSxfLndyaXRlX3NoaWZ0KDIsZC5lLmMpLF99ZnVuY3Rpb24g''@;'; put 'put ''aDAoZCl7dmFyIF89ZC5yZWFkX3NoaWZ0KDIpLG09ZC5yZWFkX3NoaWZ0KDIpO3JldHVybntzOntjOmQucmVhZF9zaGlmdCgxKSxyOl99LGU6e2M6ZC5yZWFkX3NoaWZ0KDEpLHI6bX19fXZhciBfMz1oMDtmdW5jdGlvbiBNZihkKXtkLmwrPTQ7dmFyIF89ZC5yZWFkX3NoaWZ0KDIpLG09ZC5y''@;'; put 'put ''ZWFkX3NoaWZ0KDIpLFQ9ZC5yZWFkX3NoaWZ0KDIpO3JldHVybiBkLmwrPTEyLFttLF8sVF19ZnVuY3Rpb24gWnUoZCl7ZC5sKz0yLGQubCs9ZC5yZWFkX3NoaWZ0KDIpfXZhciBTOT17MDpadSw0Olp1LDU6WnUsNjpadSw3OmZ1bmN0aW9uIGtnKGQpe3JldHVybiBkLmwrPTQsZC5jZj1kLnJl''@;'; put 'put ''YWRfc2hpZnQoMikse319LDg6WnUsOTpadSwxMDpadSwxMTpadSwxMjpadSwxMzpmdW5jdGlvbiBpaChkKXt2YXIgXz17fTtyZXR1cm4gZC5sKz00LGQubCs9MTYsXy5mU2hhcmVkTm90ZT1kLnJlYWRfc2hpZnQoMiksZC5sKz00LF99LDE0Olp1LDE1Olp1LDE2Olp1LDE3Olp1LDE4Olp1LDE5''@;'; put 'put ''Olp1LDIwOlp1LDIxOk1mfTtmdW5jdGlvbiBJaChkLF8pe3ZhciBtPXtCSUZGVmVyOjAsZHQ6MH07c3dpdGNoKG0uQklGRlZlcj1kLnJlYWRfc2hpZnQoMiksKF8tPTIpPj0yJiYobS5kdD1kLnJlYWRfc2hpZnQoMiksZC5sLT0yKSxtLkJJRkZWZXIpe2Nhc2UgMTUzNjpjYXNlIDEyODA6Y2Fz''@;'; put 'put ''ZSAxMDI0OmNhc2UgNzY4OmNhc2UgNTEyOmNhc2UgMjpjYXNlIDc6YnJlYWs7ZGVmYXVsdDppZihfPjYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIEJJRkYgVmVyICIrbS5CSUZGVmVyKX1yZXR1cm4gZC5yZWFkX3NoaWZ0KF8pLG19ZnVuY3Rpb24gUmcoZCxfLG0pe3ZhciBUPTE1MzYs''@;'; put 'put ''UD0xNjtzd2l0Y2gobS5ib29rVHlwZSl7Y2FzZSJiaWZmOCI6Y2FzZSJ4bGEiOmJyZWFrO2Nhc2UiYmlmZjUiOlQ9MTI4MCxQPTg7YnJlYWs7Y2FzZSJiaWZmNCI6VD00LFA9NjticmVhaztjYXNlImJpZmYzIjpUPTMsUD02O2JyZWFrO2Nhc2UiYmlmZjIiOlQ9MixQPTQ7YnJlYWs7ZGVmYXVs''@;'; put 'put ''dDp0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIEJJRkYgdmVyc2lvbiIpfXZhciBRPUZyKFApO3JldHVybiBRLndyaXRlX3NoaWZ0KDIsVCksUS53cml0ZV9zaGlmdCgyLF8pLFA+NCYmUS53cml0ZV9zaGlmdCgyLDI5MjgyKSxQPjYmJlEud3JpdGVfc2hpZnQoMiwxOTk3KSxQPjgmJihR''@;'; put 'put ''LndyaXRlX3NoaWZ0KDIsNDkxNjEpLFEud3JpdGVfc2hpZnQoMiwxKSxRLndyaXRlX3NoaWZ0KDIsMTc5OCksUS53cml0ZV9zaGlmdCgyLDApKSxRfWZ1bmN0aW9uIHZwKGQsXyl7dmFyIG09IV98fF8uYmlmZj49OD8yOjEsVD1Gcig4K20qZC5uYW1lLmxlbmd0aCk7VC53cml0ZV9zaGlmdCg0''@;'; put 'put ''LGQucG9zKSxULndyaXRlX3NoaWZ0KDEsZC5oc3x8MCksVC53cml0ZV9zaGlmdCgxLGQuZHQpLFQud3JpdGVfc2hpZnQoMSxkLm5hbWUubGVuZ3RoKSxfLmJpZmY+PTgmJlQud3JpdGVfc2hpZnQoMSwxKSxULndyaXRlX3NoaWZ0KG0qZC5uYW1lLmxlbmd0aCxkLm5hbWUsXy5iaWZmPDg/InNi''@;'; put 'put ''Y3MiOiJ1dGYxNmxlIik7dmFyIFA9VC5zbGljZSgwLFQubCk7cmV0dXJuIFAubD1ULmwsUH1mdW5jdGlvbiBYZShkKXtyZXR1cm4gZC5yZWFkX3NoaWZ0KDQpLGp1KGQpfWZ1bmN0aW9uIFdhKGQpe3JldHVybiBkLnJlYWRfc2hpZnQoNCksdzIoZCl9ZnVuY3Rpb24gV3MoZCxfLG0pe3JldHVy''@;'; put 'put ''biBkLnJlYWRfc2hpZnQoNCksTTVlKGQsMCxtKX1mdW5jdGlvbiBEaChkLF8sbSl7dmFyIFQ9MDttJiYyPT1tLmJpZmZ8fChUPWQucmVhZF9zaGlmdCgyKSk7dmFyIFA9ZC5yZWFkX3NoaWZ0KDIpO3JldHVybiBtJiYyPT1tLmJpZmYmJihUPTEtKFA+PjE1KSxQJj0zMjc2NyksW3tVbnN5bmNl''@;'; put 'put ''ZDoxJlQsRHlaZXJvOigyJlQpPj4xLEV4QXNjOig0JlQpPj4yLEV4RHNjOig4JlQpPj4zfSxQXX1mdW5jdGlvbiBwWChkLF8sbSxUKXt2YXIgUD1tJiY1PT1tLmJpZmY7VHx8KFQ9RnIoUD8zK18ubGVuZ3RoOjUrMipfLmxlbmd0aCkpLFQud3JpdGVfc2hpZnQoMixkKSxULndyaXRlX3NoaWZ0''@;'; put 'put ''KFA/MToyLF8ubGVuZ3RoKSxQfHxULndyaXRlX3NoaWZ0KDEsMSksVC53cml0ZV9zaGlmdCgoUD8xOjIpKl8ubGVuZ3RoLF8sUD8ic2JjcyI6InV0ZjE2bGUiKTt2YXIgUT1ULmxlbmd0aD5ULmw/VC5zbGljZSgwLFQubCk6VDtyZXR1cm4gbnVsbD09US5sJiYoUS5sPVEubGVuZ3RoKSxRfXZh''@;'; put 'put ''ciBnWD1FbjtmdW5jdGlvbiBuUyhkLF8sbSl7dmFyIFQ9ZC5sK18sUD04IT1tLmJpZmYmJm0uYmlmZj8yOjQsUT1kLnJlYWRfc2hpZnQoUCksc2U9ZC5yZWFkX3NoaWZ0KFApLG9lPWQucmVhZF9zaGlmdCgyKSxkZT1kLnJlYWRfc2hpZnQoMik7cmV0dXJuIGQubD1ULHtzOntyOlEsYzpvZX0s''@;'; put 'put ''ZTp7cjpzZSxjOmRlfX19ZnVuY3Rpb24gUkEoZCxfLG0sVCl7dmFyIFE9IW18fCFtLmJpZmZ8fDg9PW0uYmlmZjtUfHwoVD1GcihtJiY1PT1tLmJpZmY/MTY6MjApKSxULndyaXRlX3NoaWZ0KDIsUSYmbS5jZWxsU3R5bGVzJiZkLmZvbnRJZCYmKGQuZm9udElkPDQ/ZC5mb250SWQ6ZC5mb250''@;'; put 'put ''SWQrMSl8fDApO3ZhciBzZT0xO2QucHJvdGVjdGlvbiYmKGQucHJvdGVjdGlvbi5lZGl0YWJsZSYmKHNlJj0tMiksZC5wcm90ZWN0aW9uLmhpZGRlbiYmKHNlfD0yKSksZC5zdHlsZT8oVC53cml0ZV9zaGlmdCgyLGQubnVtRm10SWR8fDApLFQud3JpdGVfc2hpZnQoMiw2NTUyNHxzZSkpOihU''@;'; put 'put ''LndyaXRlX3NoaWZ0KDIsZC5udW1GbXRJZHx8MCksVC53cml0ZV9zaGlmdCgyLF88PDR8c2UpKTt2YXIgb2U9ZC5hbGlnbm1lbnR8fHt9O2lmKFEpe3ZhciBkZT0wLExlPTA7S0EuaW5kZXhPZihvZS5ob3Jpem9udGFsKT4tMSYmKGRlfD1LQS5pbmRleE9mKG9lLmhvcml6b250YWwpKSxvZS53''@;'; put 'put ''cmFwVGV4dCYmKGRlfD04KSxiUy5pbmRleE9mKG9lLnZlcnRpY2FsKT4tMT9kZXw9YlMuaW5kZXhPZihvZS52ZXJ0aWNhbCk8PDQ6bnVsbD09b2UudmVydGljYWwmJihkZXw9MzIpLFQud3JpdGVfc2hpZnQoMSxkZSksVC53cml0ZV9zaGlmdCgxLDApLG9lLnNocmlua1RvRml0JiYoTGV8PTE2''@;'; put 'put ''KSxULndyaXRlX3NoaWZ0KDIsTGUpO3ZhciBOZT1udWxsO251bGwhPWQuYm9yZGVySWQmJihOZT1tLkJvcmRlcnMmJm0uQm9yZGVyc1tkLmJvcmRlcklkfHwwXXx8e30pO3ZhciBCZT0wLFplPTAsbnQ9MDtOZSYmKG51bGwhPU5lLmxlZnQmJk5lLmxlZnQuc3R5bGUmJihCZXw9KG50PUU4Lmlu''@;'; put 'put ''ZGV4T2YoTmUubGVmdC5zdHlsZSkpPi0xP250OjApLG51bGwhPU5lLnJpZ2h0JiZOZS5yaWdodC5zdHlsZSYmKEJlfD0oKG50PUU4LmluZGV4T2YoTmUucmlnaHQuc3R5bGUpKT4tMT9udDowKTw8NCksbnVsbCE9TmUudG9wJiZOZS50b3Auc3R5bGUmJihaZXw9KG50PUU4LmluZGV4T2YoTmUu''@;'; put 'put ''dG9wLnN0eWxlKSk+LTE/bnQ6MCksbnVsbCE9TmUuYm90dG9tJiZOZS5ib3R0b20uc3R5bGUmJihaZXw9KChudD1FOC5pbmRleE9mKE5lLmJvdHRvbS5zdHlsZSkpPi0xP250OjApPDw0KSksVC53cml0ZV9zaGlmdCgxLEJlKSxULndyaXRlX3NoaWZ0KDEsWmUpLFQud3JpdGVfc2hpZnQoMiww''@;'; put 'put ''KSxULndyaXRlX3NoaWZ0KDIsMCksVC53cml0ZV9zaGlmdCgxLDApO3ZhciBtdD0wLFFlPW0uRmlsbHMmJm0uRmlsbHNbZC5maWxsSWR8fDBdfHx7fTsoUWUuZmdDb2xvcnx8UWUuYmdDb2xvcikmJihtdHw9NCksVC53cml0ZV9zaGlmdCgxLG10KTt2YXIgZnQ9MDtmdHw9TVMoUWUuZmdDb2xv''@;'; put 'put ''ciw2NSksZnR8PU1TKFFlLmJnQ29sb3IsNjUpPDw3LFQud3JpdGVfc2hpZnQoMixmdCl9ZWxzZSBULndyaXRlX3NoaWZ0KDQsMCksVC53cml0ZV9zaGlmdCg0LDApLFQud3JpdGVfc2hpZnQoMiwwKTtyZXR1cm4gVH1mdW5jdGlvbiBpUyhkLF8sbSl7dmFyIFQ9WmkoZCk7KDI9PW0uYmlmZnx8''@;'; put 'put ''OT09XykmJisrZC5sO3ZhciBQPWZ1bmN0aW9uIHBlKGQpe3ZhciBfPWQucmVhZF9zaGlmdCgxKTtyZXR1cm4gMT09PWQucmVhZF9zaGlmdCgxKT9fOjE9PT1ffShkKTtyZXR1cm4gVC52YWw9UCxULnQ9ITA9PT1QfHwhMT09PVA/ImIiOiJlIixUfXZhciB5Mz1mdW5jdGlvbiBWMShkLF8sbSl7''@;'; put 'put ''cmV0dXJuIDA9PT1fPyIiOkVuKGQsMCxtKX07ZnVuY3Rpb24gcVAoZCxfLG0pe3ZhciBQLFQ9ZC5yZWFkX3NoaWZ0KDIpLFE9e2ZCdWlsdEluOjEmVCxmV2FudEFkdmlzZTpUPj4+MSYxLGZXYW50UGljdDpUPj4+MiYxLGZPbGU6VD4+PjMmMSxmT2xlTGluazpUPj4+NCYxLGNmOlQ+Pj41JjEw''@;'; put 'put ''MjMsZkljb246VD4+PjE1JjF9O3JldHVybiAxNDg0OT09PW0uc2JjY2gmJihQPWZ1bmN0aW9uIGwxKGQsXyxtKXtkLmwrPTQ7dmFyIFQ9ZC5sKyhfLT00KSxQPWJlKGQsMCxtKSxRPWQucmVhZF9zaGlmdCgyKTtpZihRIT09KFQtPWQubCkpdGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgQWRk''@;'; put 'put ''aW5VZGY6IHBhZGRpbmcgPSAiK1QrIiAhPSAiK1EpO3JldHVybiBkLmwrPVEsUH0oZCxfLTIsbSkpLFEuYm9keT1QfHxkLnJlYWRfc2hpZnQoXy0yKSwic3RyaW5nIj09dHlwZW9mIFAmJihRLk5hbWU9UCksUX12YXIgeVg9WyJfeGxubS5Db25zb2xpZGF0ZV9BcmVhIiwiX3hsbm0uQXV0b19P''@;'; put 'put ''cGVuIiwiX3hsbm0uQXV0b19DbG9zZSIsIl94bG5tLkV4dHJhY3QiLCJfeGxubS5EYXRhYmFzZSIsIl94bG5tLkNyaXRlcmlhIiwiX3hsbm0uUHJpbnRfQXJlYSIsIl94bG5tLlByaW50X1RpdGxlcyIsIl94bG5tLlJlY29yZGVyIiwiX3hsbm0uRGF0YV9Gb3JtIiwiX3hsbm0uQXV0b19BY3Rp''@;'; put 'put ''dmF0ZSIsIl94bG5tLkF1dG9fRGVhY3RpdmF0ZSIsIl94bG5tLlNoZWV0X1RpdGxlIiwiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIl07ZnVuY3Rpb24gS1AoZCxfLG0pe3ZhciBUPWQubCtfLFA9ZC5yZWFkX3NoaWZ0KDIpLFE9ZC5yZWFkX3NoaWZ0KDEpLHNlPWQucmVhZF9zaGlmdCgxKSxvZT1k''@;'; put 'put ''LnJlYWRfc2hpZnQobSYmMj09bS5iaWZmPzE6MiksZGU9MDsoIW18fG0uYmlmZj49NSkmJig1IT1tLmJpZmYmJihkLmwrPTIpLGRlPWQucmVhZF9zaGlmdCgyKSw1PT1tLmJpZmYmJihkLmwrPTIpLGQubCs9NCk7dmFyIExlPVN0KGQsc2UsbSk7MzImUCYmKExlPXlYW0xlLmNoYXJDb2RlQXQo''@;'; put 'put ''MCldKTt2YXIgTmU9VC1kLmw7bSYmMj09bS5iaWZmJiYtLU5lO3ZhciBCZT1UIT1kLmwmJjAhPT1vZSYmTmU+MD9mdW5jdGlvbiBTVihkLF8sbSxUKXt2YXIgc2UsUD1kLmwrXyxRPUFmKGQsVCxtKTtyZXR1cm4gUCE9PWQubCYmKHNlPXh5KGQsUC1kLmwsUSxtKSksW1Esc2VdfShkLE5lLG0s''@;'; put 'put ''b2UpOltdO3JldHVybntjaEtleTpRLE5hbWU6TGUsaXRhYjpkZSxyZ2NlOkJlfX1mdW5jdGlvbiBJQShkLF8sbSl7aWYobS5iaWZmPDgpcmV0dXJuIGZ1bmN0aW9uIFhQKGQsXyxtKXszPT1kW2QubCsxXSYmZFtkLmxdKys7dmFyIFQ9YmUoZCwwLG0pO3JldHVybiAzPT1ULmNoYXJDb2RlQXQo''@;'; put 'put ''MCk/VC5zbGljZSgxKTpUfShkLDAsbSk7Zm9yKHZhciBUPVtdLFA9ZC5sK18sUT1kLnJlYWRfc2hpZnQobS5iaWZmPjg/NDoyKTswIT09US0tOylULnB1c2gocGMoZCwwLG0pKTtpZihkLmwhPVApdGhyb3cgbmV3IEVycm9yKCJCYWQgRXh0ZXJuU2hlZXQ6ICIrZC5sKyIgIT0gIitQKTtyZXR1''@;'; put 'put ''cm4gVH1mdW5jdGlvbiBEQShkLF8sbSl7dmFyIFQ9XzMoZCw2KTtzd2l0Y2gobS5iaWZmKXtjYXNlIDI6ZC5sKyssXy09NzticmVhaztjYXNlIDM6Y2FzZSA0OmQubCs9MixfLT04O2JyZWFrO2RlZmF1bHQ6ZC5sKz02LF8tPTEyfXJldHVybltULHhrKGQsXyxtKV19dmFyIGc4PVtdO2Z1bmN0''@;'; put 'put ''aW9uIGU1ZShkKXt2YXIgXz1GcigyNCksbT1JcyhkWzBdKTtfLndyaXRlX3NoaWZ0KDIsbS5yKSxfLndyaXRlX3NoaWZ0KDIsbS5yKSxfLndyaXRlX3NoaWZ0KDIsbS5jKSxfLndyaXRlX3NoaWZ0KDIsbS5jKTtmb3IodmFyIFQ9ImQwIGM5IGVhIDc5IGY5IGJhIGNlIDExIDhjIDgyIDAwIGFh''@;'; put 'put ''IDAwIDRiIGE5IDBiIi5zcGxpdCgiICIpLFA9MDtQPDE2OysrUClfLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoVFtQXSwxNikpO3JldHVybiBHKFtfLFBzKGRbMV0pXSl9ZnVuY3Rpb24gdDVlKGQpe3ZhciBfPWRbMV0uVG9vbHRpcCxtPUZyKDEwKzIqKF8ubGVuZ3RoKzEpKTttLndyaXRlX3No''@;'; put 'put ''aWZ0KDIsMjA0OCk7dmFyIFQ9SXMoZFswXSk7bS53cml0ZV9zaGlmdCgyLFQuciksbS53cml0ZV9zaGlmdCgyLFQuciksbS53cml0ZV9zaGlmdCgyLFQuYyksbS53cml0ZV9zaGlmdCgyLFQuYyk7Zm9yKHZhciBQPTA7UDxfLmxlbmd0aDsrK1ApbS53cml0ZV9zaGlmdCgyLF8uY2hhckNvZGVB''@;'; put 'put ''dChQKSk7cmV0dXJuIG0ud3JpdGVfc2hpZnQoMiwwKSxtfWZ1bmN0aW9uIG04KGQsXyxtKXtpZighbS5jZWxsU3R5bGVzKXJldHVybiBFYyhkLF8pO3ZhciBUPW0mJm0uYmlmZj49MTI/NDoyLFA9ZC5yZWFkX3NoaWZ0KFQpLFE9ZC5yZWFkX3NoaWZ0KFQpLHNlPWQucmVhZF9zaGlmdChUKSxv''@;'; put 'put ''ZT1kLnJlYWRfc2hpZnQoVCksZGU9ZC5yZWFkX3NoaWZ0KDIpOzI9PVQmJihkLmwrPTIpO3ZhciBMZT17czpQLGU6USx3OnNlLGl4ZmU6b2UsZmxhZ3M6ZGV9O3JldHVybihtLmJpZmY+PTV8fCFtLmJpZmYpJiYoTGUubGV2ZWw9ZGU+PjgmNyksTGV9ZzhbOF09ZnVuY3Rpb24oZCxfKXt2YXIg''@;'; put 'put ''bT1kLmwrXztkLmwrPTEwO3ZhciBUPWQucmVhZF9zaGlmdCgyKTtkLmwrPTQsZC5sKz0yLGQubCs9MixkLmwrPTIsZC5sKz00O3ZhciBQPWQucmVhZF9zaGlmdCgxKTtyZXR1cm4gZC5sKz1QLGQubD1tLHtmbXQ6VH19O3ZhciBhUz1aaSxneT1oOCxvSD1RdDt2YXIgeXA9ZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgZD17MTo0MzcsMjo4NTAsMzoxMjUyLDQ6MWU0LDEwMDo4NTIsMTAxOjg2NiwxMDI6ODY1LDEwMzo4NjEsMTA0Ojg5NSwxMDU6NjIwLDEwNjo3MzcsMTA3Ojg1NywxMjA6OTUwLDEyMTo5NDksMTIyOjkzNiwxMjM6OTMyLDEyNDo4NzQsMTI1OjEyNTUsMTI2OjEyNTYsMTUwOjEwMDA3LDE1''@;'; put 'put ''MToxMDAyOSwxNTI6MTAwMDYsMjAwOjEyNTAsMjAxOjEyNTEsMjAyOjEyNTQsMjAzOjEyNTMsMDoyMDEyNyw4Ojg2NSw5OjQzNywxMDo4NTAsMTE6NDM3LDEzOjQzNywxNDo4NTAsMTU6NDM3LDE2Ojg1MCwxNzo0MzcsMTg6ODUwLDE5OjkzMiwyMDo4NTAsMjE6NDM3LDIyOjg1MCwyMzo4NjUs''@;'; put 'put ''MjQ6NDM3LDI1OjQzNywyNjo4NTAsMjc6NDM3LDI4Ojg2MywyOTo4NTAsMzE6ODUyLDM0Ojg1MiwzNTo4NTIsMzY6ODYwLDM3Ojg1MCwzODo4NjYsNTU6ODUwLDY0Ojg1Miw3Nzo5MzYsNzg6OTQ5LDc5Ojk1MCw4MDo4NzQsODc6MTI1Miw4ODoxMjUyLDg5OjEyNTIsMTA4Ojg2MywxMzQ6NzM3''@;'; put 'put ''LDEzNTo4NTIsMTM2Ojg1NywyMDQ6MTI1NywyNTU6MTY5Njl9LF89Y2UoezE6NDM3LDI6ODUwLDM6MTI1Miw0OjFlNCwxMDA6ODUyLDEwMTo4NjYsMTAyOjg2NSwxMDM6ODYxLDEwNDo4OTUsMTA1OjYyMCwxMDY6NzM3LDEwNzo4NTcsMTIwOjk1MCwxMjE6OTQ5LDEyMjo5MzYsMTIzOjkzMiwx''@;'; put 'put ''MjQ6ODc0LDEyNToxMjU1LDEyNjoxMjU2LDE1MDoxMDAwNywxNTE6MTAwMjksMTUyOjEwMDA2LDIwMDoxMjUwLDIwMToxMjUxLDIwMjoxMjU0LDIwMzoxMjUzLDA6MjAxMjd9KTtmdW5jdGlvbiBQKGRlLExlKXt2YXIgTmU9TGV8fHt9O3JldHVybiBOZS5kYXRlTkZ8fChOZS5kYXRlTkY9Inl5''@;'; put 'put ''eXltbWRkIiksUW4oZnVuY3Rpb24gVChkZSxMZSl7dmFyIE5lPVtdLEJlPVgoMSk7c3dpdGNoKExlLnR5cGUpe2Nhc2UiYmFzZTY0IjpCZT1iKENlLmRlY29kZShkZSkpO2JyZWFrO2Nhc2UiYmluYXJ5IjpCZT1iKGRlKTticmVhaztjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6QmU9ZGV9T2wo''@;'; put 'put ''QmUsMCk7dmFyIFplPUJlLnJlYWRfc2hpZnQoMSksbnQ9ISEoMTM2JlplKSxtdD0hMSxRZT0hMTtzd2l0Y2goWmUpe2Nhc2UgMjpjYXNlIDM6Y2FzZSAxMzE6Y2FzZSAxMzk6Y2FzZSAyNDU6YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5Om10PSEwLG50PSEwO2JyZWFrO2Nhc2UgMTQwOlFlPSEwO2Jy''@;'; put 'put ''ZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEQkYgVW5zdXBwb3J0ZWQgVmVyc2lvbjogIitaZS50b1N0cmluZygxNikpfXZhciBmdD0wLGt0PTUyMTsyPT1aZSYmKGZ0PUJlLnJlYWRfc2hpZnQoMikpLEJlLmwrPTMsMiE9WmUmJihmdD1CZS5yZWFkX3NoaWZ0KDQpKSxmdD4xMDQ4NTc2''@;'; put 'put ''JiYoZnQ9MWU2KSwyIT1aZSYmKGt0PUJlLnJlYWRfc2hpZnQoMikpO3ZhciBidD1CZS5yZWFkX3NoaWZ0KDIpLEV0PUxlLmNvZGVwYWdlfHwxMjUyOzIhPVplJiYoQmUubCs9MTYsQmUucmVhZF9zaGlmdCgxKSwwIT09QmVbQmUubF0mJihFdD1kW0JlW0JlLmxdXSksQmUubCs9MSxCZS5sKz0y''@;'; put 'put ''KSxRZSYmKEJlLmwrPTM2KTtmb3IodmFyIFZ0PVtdLHVuPXt9LG5yPU1hdGgubWluKEJlLmxlbmd0aCwyPT1aZT81MjE6a3QtMTAtKG10PzI2NDowKSksbm49UWU/MzI6MTE7QmUubDxuciYmMTMhPUJlW0JlLmxdOylzd2l0Y2godW49e30sdW4ubmFtZT1jcHRhYmxlLnV0aWxzLmRlY29kZShF''@;'; put 'put ''dCxCZS5zbGljZShCZS5sLEJlLmwrbm4pKS5yZXBsYWNlKC9bXHUwMDAwXHJcbl0uKiQvZywiIiksQmUubCs9bm4sdW4udHlwZT1TdHJpbmcuZnJvbUNoYXJDb2RlKEJlLnJlYWRfc2hpZnQoMSkpLDIhPVplJiYhUWUmJih1bi5vZmZzZXQ9QmUucmVhZF9zaGlmdCg0KSksdW4ubGVuPUJlLnJl''@;'; put 'put ''YWRfc2hpZnQoMSksMj09WmUmJih1bi5vZmZzZXQ9QmUucmVhZF9zaGlmdCgyKSksdW4uZGVjPUJlLnJlYWRfc2hpZnQoMSksdW4ubmFtZS5sZW5ndGgmJlZ0LnB1c2godW4pLDIhPVplJiYoQmUubCs9UWU/MTM6MTQpLHVuLnR5cGUpe2Nhc2UiQiI6KCFtdHx8OCE9dW4ubGVuKSYmTGUuV1RG''@;'; put 'put ''JiZjb25zb2xlLmxvZygiU2tpcHBpbmcgIit1bi5uYW1lKyI6Iit1bi50eXBlKTticmVhaztjYXNlIkciOmNhc2UiUCI6TGUuV1RGJiZjb25zb2xlLmxvZygiU2tpcHBpbmcgIit1bi5uYW1lKyI6Iit1bi50eXBlKTticmVhaztjYXNlIisiOmNhc2UiMCI6Y2FzZSJAIjpjYXNlIkMiOmNhc2Ui''@;'; put 'put ''RCI6Y2FzZSJGIjpjYXNlIkkiOmNhc2UiTCI6Y2FzZSJNIjpjYXNlIk4iOmNhc2UiTyI6Y2FzZSJUIjpjYXNlIlkiOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIEZpZWxkIFR5cGU6ICIrdW4udHlwZSl9aWYoMTMhPT1CZVtCZS5sXSYmKEJlLmw9a3QtMSksMTMhPT1C''@;'; put 'put ''ZS5yZWFkX3NoaWZ0KDEpKXRocm93IG5ldyBFcnJvcigiREJGIFRlcm1pbmF0b3Igbm90IGZvdW5kICIrQmUubCsiICIrQmVbQmUubF0pO0JlLmw9a3Q7dmFyIGFyPTAsam49MDtmb3IoTmVbMF09W10sam49MDtqbiE9VnQubGVuZ3RoOysram4pTmVbMF1bam5dPVZ0W2puXS5uYW1lO2Zvcig7''@;'; put 'put ''ZnQtLSA+MDspaWYoNDIhPT1CZVtCZS5sXSlmb3IoKytCZS5sLE5lWysrYXJdPVtdLGpuPTAsam49MDtqbiE9VnQubGVuZ3RoOysram4pe3ZhciBrbj1CZS5zbGljZShCZS5sLEJlLmwrVnRbam5dLmxlbik7QmUubCs9VnRbam5dLmxlbixPbChrbiwwKTt2YXIgc3I9Y3B0YWJsZS51dGlscy5k''@;'; put 'put ''ZWNvZGUoRXQsa24pO3N3aXRjaChWdFtqbl0udHlwZSl7Y2FzZSJDIjpzci50cmltKCkubGVuZ3RoJiYoTmVbYXJdW2puXT1zci5yZXBsYWNlKC9ccyskLywiIikpO2JyZWFrO2Nhc2UiRCI6TmVbYXJdW2puXT04PT09c3IubGVuZ3RoP25ldyBEYXRlKCtzci5zbGljZSgwLDQpLCtzci5zbGlj''@;'; put 'put ''ZSg0LDYpLTEsK3NyLnNsaWNlKDYsOCkpOnNyO2JyZWFrO2Nhc2UiRiI6TmVbYXJdW2puXT1wYXJzZUZsb2F0KHNyLnRyaW0oKSk7YnJlYWs7Y2FzZSIrIjpjYXNlIkkiOk5lW2FyXVtqbl09UWU/MjE0NzQ4MzY0OF5rbi5yZWFkX3NoaWZ0KC00LCJpIik6a24ucmVhZF9zaGlmdCg0LCJpIik7''@;'; put 'put ''YnJlYWs7Y2FzZSJMIjpzd2l0Y2goc3IudHJpbSgpLnRvVXBwZXJDYXNlKCkpe2Nhc2UiWSI6Y2FzZSJUIjpOZVthcl1bam5dPSEwO2JyZWFrO2Nhc2UiTiI6Y2FzZSJGIjpOZVthcl1bam5dPSExO2JyZWFrO2Nhc2UiIjpjYXNlIj8iOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJE''@;'; put 'put ''QkYgVW5yZWNvZ25pemVkIEw6fCIrc3IrInwiKX1icmVhaztjYXNlIk0iOmlmKCFudCl0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbmV4cGVjdGVkIE1FTU8gZm9yIHR5cGUgIitaZS50b1N0cmluZygxNikpO05lW2FyXVtqbl09IiMjTUVNTyMjIisoUWU/cGFyc2VJbnQoc3IudHJpbSgpLDEwKTpr''@;'; put 'put ''bi5yZWFkX3NoaWZ0KDQpKTticmVhaztjYXNlIk4iOihzcj1zci5yZXBsYWNlKC9cdTAwMDAvZywiIikudHJpbSgpKSYmIi4iIT1zciYmKE5lW2FyXVtqbl09K3NyfHwwKTticmVhaztjYXNlIkAiOk5lW2FyXVtqbl09bmV3IERhdGUoa24ucmVhZF9zaGlmdCgtOCwiZiIpLTYyMTM1NjgzMmU1''@;'; put 'put ''KTticmVhaztjYXNlIlQiOk5lW2FyXVtqbl09bmV3IERhdGUoODY0ZTUqKGtuLnJlYWRfc2hpZnQoNCktMjQ0MDU4OCkra24ucmVhZF9zaGlmdCg0KSk7YnJlYWs7Y2FzZSJZIjpOZVthcl1bam5dPWtuLnJlYWRfc2hpZnQoNCwiaSIpLzFlNDticmVhaztjYXNlIk8iOk5lW2FyXVtqbl09LWtu''@;'; put 'put ''LnJlYWRfc2hpZnQoLTgsImYiKTticmVhaztjYXNlIkIiOmlmKG10JiY4PT1WdFtqbl0ubGVuKXtOZVthcl1bam5dPWtuLnJlYWRfc2hpZnQoOCwiZiIpO2JyZWFrfWNhc2UiRyI6Y2FzZSJQIjprbi5sKz1WdFtqbl0ubGVuO2JyZWFrO2Nhc2UiMCI6aWYoIl9OdWxsRmxhZ3MiPT09VnRbam5d''@;'; put 'put ''Lm5hbWUpYnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnN1cHBvcnRlZCBkYXRhIHR5cGUgIitWdFtqbl0udHlwZSl9fWVsc2UgQmUubCs9YnQ7aWYoMiE9WmUmJkJlLmw8QmUubGVuZ3RoJiYyNiE9QmVbQmUubCsrXSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBFT0YgTWFya2Vy''@;'; put 'put ''IG1pc3NpbmcgIisoQmUubC0xKSsiIG9mICIrQmUubGVuZ3RoKyIgIitCZVtCZS5sLTFdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIExlJiZMZS5zaGVldFJvd3MmJihOZT1OZS5zbGljZSgwLExlLnNoZWV0Um93cykpLE5lfShkZSxOZSksTmUpfXZhciBzZT17Qjo4LEM6MjUwLEw6MSxEOjgsIj8i''@;'; put 'put ''OjAsIiI6MH07cmV0dXJue3ZlcnNpb25zOlsyLDMsNDgsNDksMTMxLDEzOSwxNDAsMjQ1XSx0b193b3JrYm9vazpmdW5jdGlvbiBRKGRlLExlKXt0cnl7cmV0dXJuIG1uKFAoZGUsTGUpLExlKX1jYXRjaChOZSl7aWYoTGUmJkxlLldURil0aHJvdyBOZX1yZXR1cm57U2hlZXROYW1lczpbXSxT''@;'; put 'put ''aGVldHM6e319fSx0b19zaGVldDpQLGZyb21fc2hlZXQ6ZnVuY3Rpb24gb2UoZGUsTGUpe3ZhciBOZT1MZXx8e307aWYoK05lLmNvZGVwYWdlPj0wJiZIKCtOZS5jb2RlcGFnZSksInN0cmluZyI9PU5lLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgREJGIHRvIEpTIHN0cmlu''@;'; put 'put ''ZyIpO3ZhciBCZT1NYygpLFplPSR5KGRlLHtoZWFkZXI6MSxyYXc6ITAsY2VsbERhdGVzOiEwfSksbnQ9WmVbMF0sbXQ9WmUuc2xpY2UoMSksUWU9MCxmdD0wLGt0PTAsYnQ9MTtmb3IoUWU9MDtRZTxudC5sZW5ndGg7KytRZSlpZihudWxsIT1RZSl7aWYoKytrdCwibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IG50W1FlXSYmKG50W1FlXT1udFtRZV0udG9TdHJpbmcoMTApKSwic3RyaW5nIiE9dHlwZW9mIG50W1FlXSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBJbnZhbGlkIGNvbHVtbiBuYW1lICIrbnRbUWVdKyIgfCIrdHlwZW9mIG50W1FlXSsifCIpO2lmKG50LmluZGV4T2YobnRbUWVdKSE9PVFlKWZv''@;'; put 'put ''cihmdD0wO2Z0PDEwMjQ7KytmdClpZigtMT09bnQuaW5kZXhPZihudFtRZV0rIl8iK2Z0KSl7bnRbUWVdKz0iXyIrZnQ7YnJlYWt9fXZhciBFdD15dChkZVsiIXJlZiJdKSxWdD1bXTtmb3IoUWU9MDtRZTw9RXQuZS5jLUV0LnMuYzsrK1FlKXt2YXIgdW49W107Zm9yKGZ0PTA7ZnQ8bXQubGVu''@;'; put 'put ''Z3RoOysrZnQpbnVsbCE9bXRbZnRdW1FlXSYmdW4ucHVzaChtdFtmdF1bUWVdKTtpZigwIT11bi5sZW5ndGgmJm51bGwhPW50W1FlXSl7dmFyIG5yPSIiLG5uPSIiO2ZvcihmdD0wO2Z0PHVuLmxlbmd0aDsrK2Z0KXtzd2l0Y2godHlwZW9mIHVuW2Z0XSl7Y2FzZSJudW1iZXIiOm5uPSJCIjti''@;'; put 'put ''cmVhaztjYXNlInN0cmluZyI6ZGVmYXVsdDpubj0iQyI7YnJlYWs7Y2FzZSJib29sZWFuIjpubj0iTCI7YnJlYWs7Y2FzZSJvYmplY3QiOm5uPXVuW2Z0XWluc3RhbmNlb2YgRGF0ZT8iRCI6IkMifWlmKCJDIj09KG5yPW5yJiZuciE9bm4/IkMiOm5uKSlicmVha31idCs9c2VbbnJdfHwwLFZ0''@;'; put 'put ''W1FlXT1ucn1lbHNlIFZ0W1FlXT0iPyJ9dmFyIGFyPUJlLm5leHQoMzIpO2Zvcihhci53cml0ZV9zaGlmdCg0LDMxODkwMjU3NiksYXIud3JpdGVfc2hpZnQoNCxtdC5sZW5ndGgpLGFyLndyaXRlX3NoaWZ0KDIsMjk2KzMyKmt0KSxhci53cml0ZV9zaGlmdCgyLGJ0KSxRZT0wO1FlPDQ7KytR''@;'; put 'put ''ZSlhci53cml0ZV9zaGlmdCg0LDApO2Zvcihhci53cml0ZV9zaGlmdCg0LCgrX1t3XXx8Myk8PDgpLFFlPTAsZnQ9MDtRZTxudC5sZW5ndGg7KytRZSlpZihudWxsIT1udFtRZV0pe3ZhciBqbj1CZS5uZXh0KDMyKSxrbj0obnRbUWVdLnNsaWNlKC0xMCkrIlwwXDBcMFwwXDBcMFwwXDBcMFww''@;'; put 'put ''XDAiKS5zbGljZSgwLDExKTtqbi53cml0ZV9zaGlmdCgxLGtuLCJzYmNzIiksam4ud3JpdGVfc2hpZnQoMSwiPyI9PVZ0W1FlXT8iQyI6VnRbUWVdLCJzYmNzIiksam4ud3JpdGVfc2hpZnQoNCxmdCksam4ud3JpdGVfc2hpZnQoMSxzZVtWdFtRZV1dfHwwKSxqbi53cml0ZV9zaGlmdCgxLDAp''@;'; put 'put ''LGpuLndyaXRlX3NoaWZ0KDEsMiksam4ud3JpdGVfc2hpZnQoNCwwKSxqbi53cml0ZV9zaGlmdCgxLDApLGpuLndyaXRlX3NoaWZ0KDQsMCksam4ud3JpdGVfc2hpZnQoNCwwKSxmdCs9c2VbVnRbUWVdXXx8MH12YXIgc3I9QmUubmV4dCgyNjQpO2Zvcihzci53cml0ZV9zaGlmdCg0LDEzKSxR''@;'; put 'put ''ZT0wO1FlPDY1OysrUWUpc3Iud3JpdGVfc2hpZnQoNCwwKTtmb3IoUWU9MDtRZTxtdC5sZW5ndGg7KytRZSl7dmFyIGdyPUJlLm5leHQoYnQpO2Zvcihnci53cml0ZV9zaGlmdCgxLDApLGZ0PTA7ZnQ8bnQubGVuZ3RoOysrZnQpaWYobnVsbCE9bnRbZnRdKXN3aXRjaChWdFtmdF0pe2Nhc2Ui''@;'; put 'put ''TCI6Z3Iud3JpdGVfc2hpZnQoMSxudWxsPT1tdFtRZV1bZnRdPzYzOm10W1FlXVtmdF0/ODQ6NzApO2JyZWFrO2Nhc2UiQiI6Z3Iud3JpdGVfc2hpZnQoOCxtdFtRZV1bZnRdfHwwLCJmIik7YnJlYWs7Y2FzZSJEIjptdFtRZV1bZnRdPyhnci53cml0ZV9zaGlmdCg0LCgiMDAwMCIrbXRbUWVd''@;'; put 'put ''W2Z0XS5nZXRGdWxsWWVhcigpKS5zbGljZSgtNCksInNiY3MiKSxnci53cml0ZV9zaGlmdCgyLCgiMDAiKyhtdFtRZV1bZnRdLmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSwic2JjcyIpLGdyLndyaXRlX3NoaWZ0KDIsKCIwMCIrbXRbUWVdW2Z0XS5nZXREYXRlKCkpLnNsaWNlKC0yKSwic2Jj''@;'; put 'put ''cyIpKTpnci53cml0ZV9zaGlmdCg4LCIwMDAwMDAwMCIsInNiY3MiKTticmVhaztjYXNlIkMiOnZhciBxbj1TdHJpbmcobXRbUWVdW2Z0XXx8IiIpO2Zvcihnci53cml0ZV9zaGlmdCgxLHFuLCJzYmNzIiksa3Q9MDtrdDwyNTAtcW4ubGVuZ3RoOysra3QpZ3Iud3JpdGVfc2hpZnQoMSwzMil9''@;'; put 'put ''fXJldHVybiBCZS5uZXh0KDEpLndyaXRlX3NoaWZ0KDEsMjYpLEJlLmVuZCgpfX19KCksc1M9ZnVuY3Rpb24oKXt2YXIgZD17QUE6Ilx4YzAiLEJBOiJceGMxIixDQToiXHhjMiIsREE6MTk1LEhBOiJceGM0IixKQToxOTcsQUU6Ilx4YzgiLEJFOiJceGM5IixDRToiXHhjYSIsSEU6Ilx4Y2Ii''@;'; put 'put ''LEFJOiJceGNjIixCSToiXHhjZCIsQ0k6Ilx4Y2UiLEhJOiJceGNmIixBTzoiXHhkMiIsQk86Ilx4ZDMiLENPOiJceGQ0IixETzoyMTMsSE86Ilx4ZDYiLEFVOiJceGQ5IixCVToiXHhkYSIsQ1U6Ilx4ZGIiLEhVOiJceGRjIixBYToiXHhlMCIsQmE6Ilx4ZTEiLENhOiJceGUyIixEYToyMjcs''@;'; put 'put ''SGE6Ilx4ZTQiLEphOjIyOSxBZToiXHhlOCIsQmU6Ilx4ZTkiLENlOiJceGVhIixIZToiXHhlYiIsQWk6Ilx4ZWMiLEJpOiJceGVkIixDaToiXHhlZSIsSGk6Ilx4ZWYiLEFvOiJceGYyIixCbzoiXHhmMyIsQ286Ilx4ZjQiLERvOjI0NSxIbzoiXHhmNiIsQXU6Ilx4ZjkiLEJ1OiJceGZhIixD''@;'; put 'put ''dToiXHhmYiIsSHU6Ilx4ZmMiLEtDOiJceGM3IixLYzoiXHhlNyIscToiXHhlNiIsejoiXHUwMTUzIixhOiJceGM2IixqOiJcdTAxNTIiLEROOjIwOSxEbjoyNDEsSHk6MjU1LFM6MTY5LGM6MTcwLFI6MTc0LCJCICI6MTgwLDA6MTc2LDE6MTc3LDI6MTc4LDM6MTc5LDU6MTgxLDY6MTgyLDc6''@;'; put 'put ''MTgzLFE6MTg1LGs6MTg2LGI6MjA4LGk6MjE2LGw6MjIyLHM6MjQwLHk6MjQ4LCIhIjoxNjEsJyInOjE2MiwiIyI6MTYzLCIoIjoxNjQsIiUiOjE2NSwiJyI6MTY3LCJIICI6MTY4LCIrIjoxNzEsIjsiOjE4NywiPCI6MTg4LCI9IjoxODksIj4iOjE5MCwiPyI6MTkxLCJ7IjoyMjN9LF89bmV3''@;'; put 'put ''IFJlZ0V4cCgiXHgxYk4oIitGZShkKS5qb2luKCJ8IikucmVwbGFjZSgvXHxcfFx8LywifFxcfHwiKS5yZXBsYWNlKC8oWz8oKStdKS9nLCJcXCQxIikrInxcXHwpIiwiZ20iKSxtPWZ1bmN0aW9uKFplLG50KXt2YXIgbXQ9ZFtudF07cmV0dXJuIm51bWJlciI9PXR5cGVvZiBtdD9xKG10KTpt''@;'; put 'put ''dH0sVD1mdW5jdGlvbihaZSxudCxtdCl7dmFyIFFlPW50LmNoYXJDb2RlQXQoMCktMzI8PDR8bXQuY2hhckNvZGVBdCgwKS00ODtyZXR1cm4gNTk9PVFlP1plOnEoUWUpfTtmdW5jdGlvbiBRKFplLG50KXt2YXIgc3IsbXQ9WmUuc3BsaXQoL1tcblxyXSsvKSxRZT0tMSxmdD0tMSxrdD0wLGJ0''@;'; put 'put ''PTAsRXQ9W10sVnQ9W10sdW49bnVsbCxucj17fSxubj1bXSxhcj1bXSxqbj1bXSxrbj0wO2ZvcigrbnQuY29kZXBhZ2U+PTAmJkgoK250LmNvZGVwYWdlKTtrdCE9PW10Lmxlbmd0aDsrK2t0KXtrbj0wO3ZhciBPaSxncj1tdFtrdF0udHJpbSgpLnJlcGxhY2UoL1x4MUIoW1x4MjAtXHgyRl0p''@;'; put 'put ''KFtceDMwLVx4M0ZdKS9nLFQpLnJlcGxhY2UoXyxtKSxxbj1nci5yZXBsYWNlKC87Oy9nLCJcMCIpLnNwbGl0KCI7IikubWFwKGZ1bmN0aW9uKGppKXtyZXR1cm4gamkucmVwbGFjZSgvXHUwMDAwL2csIjsiKX0pO2lmKGdyLmxlbmd0aD4wKXN3aXRjaChxblswXSl7Y2FzZSJJRCI6Y2FzZSJF''@;'; put 'put ''IjpjYXNlIkIiOmNhc2UiTyI6Y2FzZSJXIjpicmVhaztjYXNlIlAiOiJQIj09cW5bMV0uY2hhckF0KDApJiZWdC5wdXNoKGdyLnNsaWNlKDMpLnJlcGxhY2UoLzs7L2csIjsiKSk7YnJlYWs7Y2FzZSJDIjp2YXIgc289ITEsbW89ITEsTGk9ITEsa3I9ITEsRG49LTEsT3I9LTE7Zm9yKGJ0PTE7''@;'; put 'put ''YnQ8cW4ubGVuZ3RoOysrYnQpc3dpdGNoKHFuW2J0XS5jaGFyQXQoMCkpe2Nhc2UiQSI6Y2FzZSJHIjpicmVhaztjYXNlIlgiOmZ0PXBhcnNlSW50KHFuW2J0XS5zbGljZSgxKSktMSxtbz0hMDticmVhaztjYXNlIlkiOmZvcihRZT1wYXJzZUludChxbltidF0uc2xpY2UoMSkpLTEsbW98fChm''@;'; put 'put ''dD0wKSxzcj1FdC5sZW5ndGg7c3I8PVFlOysrc3IpRXRbc3JdPVtdO2JyZWFrO2Nhc2UiSyI6JyInPT09KE9pPXFuW2J0XS5zbGljZSgxKSkuY2hhckF0KDApP09pPU9pLnNsaWNlKDEsT2kubGVuZ3RoLTEpOiJUUlVFIj09PU9pP09pPSEwOiJGQUxTRSI9PT1PaT9PaT0hMTppc05hTih1cihP''@;'; put 'put ''aSkpP2lzTmFOKFpuKE9pKS5nZXREYXRlKCkpfHwoT2k9bG4oT2kpKTooT2k9dXIoT2kpLG51bGwhPT11biYmSS5pc19kYXRlKHVuKSYmKE9pPSR0KE9pKSkpLHR5cGVvZiBjcHRhYmxlPCJ1IiYmInN0cmluZyI9PXR5cGVvZiBPaSYmInN0cmluZyIhPShudHx8e30pLnR5cGUmJihudHx8e30p''@;'; put 'put ''LmNvZGVwYWdlJiYoT2k9Y3B0YWJsZS51dGlscy5kZWNvZGUobnQuY29kZXBhZ2UsT2kpKSxzbz0hMDticmVhaztjYXNlIkUiOmtyPSEwO3ZhciBfcj1SOChxbltidF0uc2xpY2UoMSkse3I6UWUsYzpmdH0pO0V0W1FlXVtmdF09W0V0W1FlXVtmdF0sX3JdO2JyZWFrO2Nhc2UiUyI6TGk9ITAs''@;'; put 'put ''RXRbUWVdW2Z0XT1bRXRbUWVdW2Z0XSwiUzVTIl07YnJlYWs7Y2FzZSJSIjpEbj1wYXJzZUludChxbltidF0uc2xpY2UoMSkpLTE7YnJlYWs7Y2FzZSJDIjpPcj1wYXJzZUludChxbltidF0uc2xpY2UoMSkpLTE7YnJlYWs7ZGVmYXVsdDppZihudCYmbnQuV1RGKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''U1lMSyBiYWQgcmVjb3JkICIrZ3IpfWlmKHNvJiYoRXRbUWVdW2Z0XSYmMj09RXRbUWVdW2Z0XS5sZW5ndGg/RXRbUWVdW2Z0XVswXT1PaTpFdFtRZV1bZnRdPU9pLHVuPW51bGwpLExpKXtpZihrcil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgc2hhcmVkIGZvcm11bGEgY2Fubm90IGhhdmUgb3du''@;'; put 'put ''IGZvcm11bGEiKTt2YXIgTW49RG4+LTEmJkV0W0RuXVtPcl07aWYoIU1ufHwhTW5bMV0pdGhyb3cgbmV3IEVycm9yKCJTWUxLIHNoYXJlZCBmb3JtdWxhIGNhbm5vdCBmaW5kIGJhc2UiKTtFdFtRZV1bZnRdWzFdPW5WKE1uWzFdLHtyOlFlLURuLGM6ZnQtT3J9KX1icmVhaztjYXNlIkYiOnZh''@;'; put 'put ''ciBOcj0wO2ZvcihidD0xO2J0PHFuLmxlbmd0aDsrK2J0KXN3aXRjaChxbltidF0uY2hhckF0KDApKXtjYXNlIlgiOmZ0PXBhcnNlSW50KHFuW2J0XS5zbGljZSgxKSktMSwrK05yO2JyZWFrO2Nhc2UiWSI6Zm9yKFFlPXBhcnNlSW50KHFuW2J0XS5zbGljZSgxKSktMSxzcj1FdC5sZW5ndGg7''@;'; put 'put ''c3I8PVFlOysrc3IpRXRbc3JdPVtdO2JyZWFrO2Nhc2UiTSI6a249cGFyc2VJbnQocW5bYnRdLnNsaWNlKDEpKS8yMDticmVhaztjYXNlIkYiOmNhc2UiRyI6Y2FzZSJTIjpjYXNlIkQiOmNhc2UiTiI6YnJlYWs7Y2FzZSJQIjp1bj1WdFtwYXJzZUludChxbltidF0uc2xpY2UoMSkpXTticmVh''@;'; put 'put ''aztjYXNlIlciOmZvcihqbj1xbltidF0uc2xpY2UoMSkuc3BsaXQoIiAiKSxzcj1wYXJzZUludChqblswXSwxMCk7c3I8PXBhcnNlSW50KGpuWzFdLDEwKTsrK3NyKWtuPXBhcnNlSW50KGpuWzJdLDEwKSxhcltzci0xXT0wPT09a24/e2hpZGRlbjohMH06e3djaDprbn0sQjAoYXJbc3ItMV0p''@;'; put 'put ''O2JyZWFrO2Nhc2UiQyI6YXJbZnQ9cGFyc2VJbnQocW5bYnRdLnNsaWNlKDEpKS0xXXx8KGFyW2Z0XT17fSk7YnJlYWs7Y2FzZSJSIjpubltRZT1wYXJzZUludChxbltidF0uc2xpY2UoMSkpLTFdfHwobm5bUWVdPXt9KSxrbj4wPyhubltRZV0uaHB0PWtuLG5uW1FlXS5ocHg9Tmcoa24pKTow''@;'; put 'put ''PT09a24mJihubltRZV0uaGlkZGVuPSEwKTticmVhaztkZWZhdWx0OmlmKG50JiZudC5XVEYpdGhyb3cgbmV3IEVycm9yKCJTWUxLIGJhZCByZWNvcmQgIitncil9TnI8MSYmKHVuPW51bGwpO2JyZWFrO2RlZmF1bHQ6aWYobnQmJm50LldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJl''@;'; put 'put ''Y29yZCAiK2dyKX19cmV0dXJuIG5uLmxlbmd0aD4wJiYobnJbIiFyb3dzIl09bm4pLGFyLmxlbmd0aD4wJiYobnJbIiFjb2xzIl09YXIpLG50JiZudC5zaGVldFJvd3MmJihFdD1FdC5zbGljZSgwLG50LnNoZWV0Um93cykpLFtFdCxucl19ZnVuY3Rpb24gc2UoWmUsbnQpe3ZhciBtdD1mdW5j''@;'; put 'put ''dGlvbiBQKFplLG50KXtzd2l0Y2gobnQudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBRKENlLmRlY29kZShaZSksbnQpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gUShaZSxudCk7Y2FzZSJidWZmZXIiOnJldHVybiBRKFplLnRvU3RyaW5nKCJiaW5hcnkiKSxudCk7Y2FzZSJhcnJheSI6cmV0dXJu''@;'; put 'put ''IFEoT24oWmUpLG50KX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrbnQudHlwZSl9KFplLG50KSxmdD1tdFsxXSxrdD1RbihtdFswXSxudCk7cmV0dXJuIEZlKGZ0KS5mb3JFYWNoKGZ1bmN0aW9uKGJ0KXtrdFtidF09ZnRbYnRdfSksa3R9ZnVuY3Rpb24gZGUoWmUsbnQs''@;'; put 'put ''bXQsUWUpe3ZhciBmdD0iQztZIisobXQrMSkrIjtYIisoUWUrMSkrIjtLIjtzd2l0Y2goWmUudCl7Y2FzZSJuIjpmdCs9WmUudnx8MCxaZS5mJiYhWmUuRiYmKGZ0Kz0iO0UiK2hrKFplLmYse3I6bXQsYzpRZX0pKTticmVhaztjYXNlImIiOmZ0Kz1aZS52PyJUUlVFIjoiRkFMU0UiO2JyZWFr''@;'; put 'put ''O2Nhc2UiZSI6ZnQrPVplLnd8fFplLnY7YnJlYWs7Y2FzZSJkIjpmdCs9JyInKyhaZS53fHxaZS52KSsnIic7YnJlYWs7Y2FzZSJzIjpmdCs9JyInK1plLnYucmVwbGFjZSgvIi9nLCIiKSsnIid9cmV0dXJuIGZ0fXJldHVybiBkWyJ8Il09MjU0LHt0b193b3JrYm9vazpmdW5jdGlvbiBvZSha''@;'; put 'put ''ZSxudCl7cmV0dXJuIG1uKHNlKFplLG50KSxudCl9LHRvX3NoZWV0OnNlLGZyb21fc2hlZXQ6ZnVuY3Rpb24gQmUoWmUsbnQpe3ZhciBrdCxtdD1bIklEO1BTaGVldEpTO047RSJdLFFlPVtdLGZ0PXl0KFplWyIhcmVmIl0pLGJ0PUFycmF5LmlzQXJyYXkoWmUpLEV0PSJcclxuIjttdC5wdXNo''@;'; put 'put ''KCJQO1BHZW5lcmFsIiksbXQucHVzaCgiRjtQMDtERzBHODtNMjU1IiksWmVbIiFjb2xzIl0mJmZ1bmN0aW9uIExlKFplLG50KXtudC5mb3JFYWNoKGZ1bmN0aW9uKG10LFFlKXt2YXIgZnQ9IkY7VyIrKFFlKzEpKyIgIisoUWUrMSkrIiAiO210LmhpZGRlbj9mdCs9IjAiOigibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIG10LndpZHRoJiYhbXQud3B4JiYobXQud3B4PWY1KG10LndpZHRoKSksIm51bWJlciI9PXR5cGVvZiBtdC53cHgmJiFtdC53Y2gmJihtdC53Y2g9eTgobXQud3B4KSksIm51bWJlciI9PXR5cGVvZiBtdC53Y2gmJihmdCs9TWF0aC5yb3VuZChtdC53Y2gpKSksIiAiIT1mdC5jaGFy''@;'; put 'put ''QXQoZnQubGVuZ3RoLTEpJiZaZS5wdXNoKGZ0KX0pfShtdCxaZVsiIWNvbHMiXSksWmVbIiFyb3dzIl0mJmZ1bmN0aW9uIE5lKFplLG50KXtudC5mb3JFYWNoKGZ1bmN0aW9uKG10LFFlKXt2YXIgZnQ9IkY7IjttdC5oaWRkZW4/ZnQrPSJNMDsiOm10LmhwdD9mdCs9Ik0iKzIwKm10LmhwdCsi''@;'; put 'put ''OyI6bXQuaHB4JiYoZnQrPSJNIisyMCpiOChtdC5ocHgpKyI7IiksZnQubGVuZ3RoPjImJlplLnB1c2goZnQrIlIiKyhRZSsxKSl9KX0obXQsWmVbIiFyb3dzIl0pLG10LnB1c2goIkI7WSIrKGZ0LmUuci1mdC5zLnIrMSkrIjtYIisoZnQuZS5jLWZ0LnMuYysxKSsiO0QiK1tmdC5zLmMsZnQu''@;'; put 'put ''cy5yLGZ0LmUuYyxmdC5lLnJdLmpvaW4oIiAiKSk7Zm9yKHZhciBWdD1mdC5zLnI7VnQ8PWZ0LmUucjsrK1Z0KWZvcih2YXIgdW49ZnQucy5jO3VuPD1mdC5lLmM7Kyt1bil7dmFyIG5yPXFpKHtyOlZ0LGM6dW59KTsoa3Q9YnQ/KFplW1Z0XXx8W10pW3VuXTpaZVtucl0pJiYobnVsbCE9a3Qu''@;'; put 'put ''dnx8a3QuZiYmIWt0LkYpJiZRZS5wdXNoKGRlKGt0LDAsVnQsdW4pKX1yZXR1cm4gbXQuam9pbihFdCkrRXQrUWUuam9pbihFdCkrRXQrIkUiK0V0fX19KCksbFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBfKFEsc2Upe2Zvcih2YXIgb2U9US5zcGxpdCgiXG4iKSxkZT0tMSxMZT0tMSxOZT0wLEJl''@;'; put 'put ''PVtdO05lIT09b2UubGVuZ3RoOysrTmUpaWYoIkJPVCIhPT1vZVtOZV0udHJpbSgpKXtpZighKGRlPDApKXtmb3IodmFyIFplPW9lW05lXS50cmltKCkuc3BsaXQoIiwiKSxudD1aZVswXSxtdD1aZVsxXSxRZT1vZVsrK05lXXx8IiI7MSYoUWUubWF0Y2goL1siXS9nKXx8W10pLmxlbmd0aCYm''@;'; put 'put ''TmU8b2UubGVuZ3RoLTE7KVFlKz0iXG4iK29lWysrTmVdO3N3aXRjaChRZT1RZS50cmltKCksK250KXtjYXNlLTE6aWYoIkJPVCI9PT1RZSl7QmVbKytkZV09W10sTGU9MDtjb250aW51ZX1pZigiRU9EIiE9PVFlKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIERJRiBzcGVjaWFsIGNv''@;'; put 'put ''bW1hbmQgIitRZSk7YnJlYWs7Y2FzZSAwOkJlW2RlXVtMZV09IlRSVUUiPT09UWV8fCJGQUxTRSIhPT1RZSYmKGlzTmFOKHVyKG10KSk/aXNOYU4oWm4obXQpLmdldERhdGUoKSk/bXQ6bG4obXQpOnVyKG10KSksKytMZTticmVhaztjYXNlIDE6KFFlPShRZT1RZS5zbGljZSgxLFFlLmxlbmd0''@;'; put 'put ''aC0xKSkucmVwbGFjZSgvIiIvZywnIicpKSYmUWUubWF0Y2goL149Ii4qIiQvKSYmKFFlPVFlLnNsaWNlKDIsLTEpKSxCZVtkZV1bTGUrK109IiIhPT1RZT9RZTpudWxsfWlmKCJFT0QiPT09UWUpYnJlYWt9fWVsc2UgQmVbKytkZV09W10sTGU9MDtyZXR1cm4gc2UmJnNlLnNoZWV0Um93cyYm''@;'; put 'put ''KEJlPUJlLnNsaWNlKDAsc2Uuc2hlZXRSb3dzKSksQmV9ZnVuY3Rpb24gbShRLHNlKXtyZXR1cm4gUW4oZnVuY3Rpb24gZChRLHNlKXtzd2l0Y2goc2UudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBfKENlLmRlY29kZShRKSxzZSk7Y2FzZSJiaW5hcnkiOnJldHVybiBfKFEsc2UpO2Nhc2Ui''@;'; put 'put ''YnVmZmVyIjpyZXR1cm4gXyhRLnRvU3RyaW5nKCJiaW5hcnkiKSxzZSk7Y2FzZSJhcnJheSI6cmV0dXJuIF8oT24oUSksc2UpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitzZS50eXBlKX0oUSxzZSksc2UpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBUKFEsc2Up''@;'; put 'put ''e3JldHVybiBtbihtKFEsc2UpLHNlKX0sdG9fc2hlZXQ6bSxmcm9tX3NoZWV0OmZ1bmN0aW9uKCl7dmFyIFE9ZnVuY3Rpb24oZGUsTGUsTmUsQmUsWmUpe2RlLnB1c2goTGUpLGRlLnB1c2goTmUrIiwiK0JlKSxkZS5wdXNoKCciJytaZS5yZXBsYWNlKC8iL2csJyIiJykrJyInKX0sc2U9ZnVu''@;'; put 'put ''Y3Rpb24oZGUsTGUsTmUsQmUpe2RlLnB1c2goTGUrIiwiK05lKSxkZS5wdXNoKDE9PUxlPyciJytCZS5yZXBsYWNlKC8iL2csJyIiJykrJyInOkJlKX07cmV0dXJuIGZ1bmN0aW9uKGRlKXt2YXIgQmUsTGU9W10sTmU9eXQoZGVbIiFyZWYiXSksWmU9QXJyYXkuaXNBcnJheShkZSk7UShMZSwi''@;'; put 'put ''VEFCTEUiLDAsMSwic2hlZXRqcyIpLFEoTGUsIlZFQ1RPUlMiLDAsTmUuZS5yLU5lLnMucisxLCIiKSxRKExlLCJUVVBMRVMiLDAsTmUuZS5jLU5lLnMuYysxLCIiKSxRKExlLCJEQVRBIiwwLDAsIiIpO2Zvcih2YXIgbnQ9TmUucy5yO250PD1OZS5lLnI7KytudCl7c2UoTGUsLTEsMCwiQk9U''@;'; put 'put ''Iik7Zm9yKHZhciBtdD1OZS5zLmM7bXQ8PU5lLmUuYzsrK210KXt2YXIgUWU9cWkoe3I6bnQsYzptdH0pO2lmKEJlPVplPyhkZVtudF18fFtdKVttdF06ZGVbUWVdKXN3aXRjaChCZS50KXtjYXNlIm4iOnZhciBmdD1CZS53OyFmdCYmbnVsbCE9QmUudiYmKGZ0PUJlLnYpLG51bGw9PWZ0P3Nl''@;'; put 'put ''KExlLDEsMCxCZS5mJiYhQmUuRj8iPSIrQmUuZjoiIik6c2UoTGUsMCxmdCwiViIpO2JyZWFrO2Nhc2UiYiI6c2UoTGUsMCxCZS52PzE6MCxCZS52PyJUUlVFIjoiRkFMU0UiKTticmVhaztjYXNlInMiOnNlKExlLDEsMCxpc05hTihCZS52KT9CZS52Oic9IicrQmUudisnIicpO2JyZWFrO2Nh''@;'; put 'put ''c2UiZCI6QmUud3x8KEJlLnc9SS5mb3JtYXQoQmUuenx8SS5fdGFibGVbMTRdLEtlKGxuKEJlLnYpKSkpLHNlKExlLDAsQmUudywiViIpO2JyZWFrO2RlZmF1bHQ6c2UoTGUsMSwwLCIiKX1lbHNlIHNlKExlLDEsMCwiIil9fXJldHVybiBzZShMZSwtMSwwLCJFT0QiKSxMZS5qb2luKCJcclxu''@;'; put 'put ''Iil9fSgpfX0oKSxWMD1mdW5jdGlvbigpe2Z1bmN0aW9uIGQoQmUpe3JldHVybiBCZS5yZXBsYWNlKC9cXGIvZywiXFwiKS5yZXBsYWNlKC9cXGMvZywiOiIpLnJlcGxhY2UoL1xcbi9nLCJcbiIpfWZ1bmN0aW9uIF8oQmUpe3JldHVybiBCZS5yZXBsYWNlKC9cXC9nLCJcXGIiKS5yZXBsYWNl''@;'; put 'put ''KC86L2csIlxcYyIpLnJlcGxhY2UoL1xuL2csIlxcbiIpfWZ1bmN0aW9uIFQoQmUsWmUpe3JldHVybiBRbihmdW5jdGlvbiBtKEJlLFplKXtmb3IodmFyIG50PUJlLnNwbGl0KCJcbiIpLG10PS0xLFFlPS0xLGZ0PTAsa3Q9W107ZnQhPT1udC5sZW5ndGg7KytmdCl7dmFyIGJ0PW50W2Z0XS50''@;'; put 'put ''cmltKCkuc3BsaXQoIjoiKTtpZigiY2VsbCI9PT1idFswXSl7dmFyIEV0PUlzKGJ0WzFdKTtpZihrdC5sZW5ndGg8PUV0LnIpZm9yKG10PWt0Lmxlbmd0aDttdDw9RXQucjsrK210KWt0W210XXx8KGt0W210XT1bXSk7c3dpdGNoKG10PUV0LnIsUWU9RXQuYyxidFsyXSl7Y2FzZSJ0IjprdFtt''@;'; put 'put ''dF1bUWVdPWQoYnRbM10pO2JyZWFrO2Nhc2UidiI6a3RbbXRdW1FlXT0rYnRbM107YnJlYWs7Y2FzZSJ2dGYiOnZhciBWdD1idFtidC5sZW5ndGgtMV07Y2FzZSJ2dGMiOmt0W210XVtRZV09Im5sIj09PWJ0WzNdPyEhK2J0WzRdOitidFs0XSwidnRmIj09YnRbMl0mJihrdFttdF1bUWVdPVtr''@;'; put 'put ''dFttdF1bUWVdLFZ0XSl9fX1yZXR1cm4gWmUmJlplLnNoZWV0Um93cyYmKGt0PWt0LnNsaWNlKDAsWmUuc2hlZXRSb3dzKSksa3R9KEJlLFplKSxaZSl9dmFyIFE9WyJzb2NpYWxjYWxjOnZlcnNpb246MS41IiwiTUlNRS1WZXJzaW9uOiAxLjAiLCJDb250ZW50LVR5cGU6IG11bHRpcGFydC9t''@;'; put 'put ''aXhlZDsgYm91bmRhcnk9U29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUiXS5qb2luKCJcbiIpLHNlPVsiLS1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZSIsIkNvbnRlbnQtdHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCJdLmpvaW4oIlxuIikrIlxuIixvZT1b''@;'; put 'put ''IiMgU29jaWFsQ2FsYyBTcHJlYWRzaGVldCBDb250cm9sIFNhdmUiLCJwYXJ0OnNoZWV0Il0uam9pbigiXG4iKSxkZT0iLS1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZS0tIjtmdW5jdGlvbiBMZShCZSl7aWYoIUJlfHwhQmVbIiFyZWYiXSlyZXR1cm4iIjtmb3IodmFyIG10LFpl''@;'; put 'put ''PVtdLG50PVtdLFFlPSIiLGZ0PXphKEJlWyIhcmVmIl0pLGt0PUFycmF5LmlzQXJyYXkoQmUpLGJ0PWZ0LnMucjtidDw9ZnQuZS5yOysrYnQpZm9yKHZhciBFdD1mdC5zLmM7RXQ8PWZ0LmUuYzsrK0V0KWlmKFFlPXFpKHtyOmJ0LGM6RXR9KSwobXQ9a3Q/KEJlW2J0XXx8W10pW0V0XTpCZVtR''@;'; put 'put ''ZV0pJiZudWxsIT1tdC52JiYieiIhPT1tdC50KXtzd2l0Y2gobnQ9WyJjZWxsIixRZSwidCJdLG10LnQpe2Nhc2UicyI6Y2FzZSJzdHIiOm50LnB1c2goXyhtdC52KSk7YnJlYWs7Y2FzZSJuIjptdC5mPyhudFsyXT0idnRmIixudFszXT0ibiIsbnRbNF09bXQudixudFs1XT1fKG10LmYpKToo''@;'; put 'put ''bnRbMl09InYiLG50WzNdPW10LnYpO2JyZWFrO2Nhc2UiYiI6bnRbMl09InZ0IisobXQuZj8iZiI6ImMiKSxudFszXT0ibmwiLG50WzRdPW10LnY/IjEiOiIwIixudFs1XT1fKG10LmZ8fChtdC52PyJUUlVFIjoiRkFMU0UiKSk7YnJlYWs7Y2FzZSJkIjp2YXIgVnQ9S2UobG4obXQudikpO250''@;'; put 'put ''WzJdPSJ2dGMiLG50WzNdPSJuZCIsbnRbNF09IiIrVnQsbnRbNV09bXQud3x8SS5mb3JtYXQobXQuenx8SS5fdGFibGVbMTRdLFZ0KTticmVhaztjYXNlImUiOmNvbnRpbnVlfVplLnB1c2gobnQuam9pbigiOiIpKX1yZXR1cm4gWmUucHVzaCgic2hlZXQ6YzoiKyhmdC5lLmMtZnQucy5jKzEp''@;'; put 'put ''KyI6cjoiKyhmdC5lLnItZnQucy5yKzEpKyI6dHZmOjEiKSxaZS5wdXNoKCJ2YWx1ZWZvcm1hdDoxOnRleHQtd2lraSIpLFplLmpvaW4oIlxuIil9cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIFAoQmUsWmUpe3JldHVybiBtbihUKEJlLFplKSxaZSl9LHRvX3NoZWV0OlQsZnJvbV9zaGVl''@;'; put 'put ''dDpmdW5jdGlvbiBOZShCZSl7cmV0dXJuW1Esc2Usb2Usc2UsTGUoQmUpLGRlXS5qb2luKCJcbiIpfX19KCksdjg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBkKE5lLEJlLFplLG50LG10KXttdC5yYXc/QmVbWmVdW250XT1OZToiIj09PU5lfHwoQmVbWmVdW250XT1TbihOZSxtdCk/U24oTmUsbXQp''@;'; put 'put ''LnY6TmUpfXZhciBtPXs0NDoiLCIsOToiXHQiLDU5OiI7In0sVD17NDQ6Myw5OjIsNTk6MX07ZnVuY3Rpb24gUChOZSl7Zm9yKHZhciBCZT17fSxaZT0hMSxudD0wLG10PTA7bnQ8TmUubGVuZ3RoOysrbnQpMzQ9PShtdD1OZS5jaGFyQ29kZUF0KG50KSk/WmU9IVplOiFaZSYmbXQgaW4gbSYm''@;'; put 'put ''KEJlW210XT0oQmVbbXRdfHwwKSsxKTtmb3IobnQgaW4gbXQ9W10sQmUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEJlLG50KSYmbXQucHVzaChbQmVbbnRdLG50XSk7aWYoIW10Lmxlbmd0aClmb3IobnQgaW4gQmU9VClPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl''@;'; put 'put ''cnR5LmNhbGwoQmUsbnQpJiZtdC5wdXNoKFtCZVtudF0sbnRdKTtyZXR1cm4gbXQuc29ydChmdW5jdGlvbihRZSxmdCl7cmV0dXJuIFFlWzBdLWZ0WzBdfHxUW1FlWzFdXS1UW2Z0WzFdXX0pLG1bbXQucG9wKClbMV1dfWZ1bmN0aW9uIHNlKE5lLEJlKXtyZXR1cm4hQmV8fCFCZS5QUk58fCJz''@;'; put 'put ''ZXA9Ij09TmUuc2xpY2UoMCw0KXx8TmUuaW5kZXhPZigiXHQiKT49MHx8TmUuaW5kZXhPZigiLCIpPj0wfHxOZS5pbmRleE9mKCI7Iik+PTA/ZnVuY3Rpb24gUShOZSxCZSl7dmFyIFplPUJlfHx7fSxudD0iIixtdD1aZS5kZW5zZT9bXTp7fSxRZT17czp7YzowLHI6MH0sZTp7YzowLHI6MH19''@;'; put 'put ''OyJzZXA9Ij09TmUuc2xpY2UoMCw0KT8xMz09TmUuY2hhckNvZGVBdCg1KSYmMTA9PU5lLmNoYXJDb2RlQXQoNik/KG50PU5lLmNoYXJBdCg0KSxOZT1OZS5zbGljZSg3KSk6MTM9PU5lLmNoYXJDb2RlQXQoNSl8fDEwPT1OZS5jaGFyQ29kZUF0KDUpPyhudD1OZS5jaGFyQXQoNCksTmU9TmUu''@;'; put 'put ''c2xpY2UoNikpOm50PVAoTmUuc2xpY2UoMCwxMDI0KSk6bnQ9UChOZS5zbGljZSgwLDEwMjQpKTt2YXIgZnQ9MCxrdD0wLGJ0PTAsRXQ9MCxWdD0wLHVuPW50LmNoYXJDb2RlQXQoMCksbnI9ITEsbm49MCxhcj1OZS5jaGFyQ29kZUF0KDApO05lPU5lLnJlcGxhY2UoL1xyXG4vZ20sIlxuIik7''@;'; put 'put ''dmFyIGpuPW51bGwhPVplLmRhdGVORj9mdW5jdGlvbiBvdChkKXt2YXIgXz0ibnVtYmVyIj09dHlwZW9mIGQ/SS5fdGFibGVbZF06ZDtyZXR1cm4gXz1fLnJlcGxhY2UoUGUsIihcXGQrKSIpLG5ldyBSZWdFeHAoIl4iK18rIiQiKX0oWmUuZGF0ZU5GKTpudWxsO2Z1bmN0aW9uIGtuKCl7dmFy''@;'; put 'put ''IHNyPU5lLnNsaWNlKEV0LFZ0KSxncj17fTtpZignIic9PXNyLmNoYXJBdCgwKSYmJyInPT1zci5jaGFyQXQoc3IubGVuZ3RoLTEpJiYoc3I9c3Iuc2xpY2UoMSwtMSkucmVwbGFjZSgvIiIvZywnIicpKSwwPT09c3IubGVuZ3RoKWdyLnQ9InoiO2Vsc2UgaWYoWmUucmF3KWdyLnQ9InMiLGdy''@;'; put 'put ''LnY9c3I7ZWxzZSBpZigwPT09c3IudHJpbSgpLmxlbmd0aClnci50PSJzIixnci52PXNyO2Vsc2UgaWYoNjE9PXNyLmNoYXJDb2RlQXQoMCkpMzQ9PXNyLmNoYXJDb2RlQXQoMSkmJjM0PT1zci5jaGFyQ29kZUF0KHNyLmxlbmd0aC0xKT8oZ3IudD0icyIsZ3Iudj1zci5zbGljZSgyLC0xKS5y''@;'; put 'put ''ZXBsYWNlKC8iIi9nLCciJykpOmZ1bmN0aW9uIExRKGQpe3JldHVybiAxIT1kLmxlbmd0aH0oc3IpPyhnci50PSJuIixnci5mPXNyLnNsaWNlKDEpKTooZ3IudD0icyIsZ3Iudj1zcik7ZWxzZSBpZigiVFJVRSI9PXNyKWdyLnQ9ImIiLGdyLnY9ITA7ZWxzZSBpZigiRkFMU0UiPT1zcilnci50''@;'; put 'put ''PSJiIixnci52PSExO2Vsc2UgaWYoaXNOYU4oYnQ9dXIoc3IpKSlpZighaXNOYU4oWm4oc3IpLmdldERhdGUoKSl8fGpuJiZzci5tYXRjaChqbikpe2dyLno9WmUuZGF0ZU5GfHxJLl90YWJsZVsxNF07dmFyIHFuPTA7am4mJnNyLm1hdGNoKGpuKSYmKHNyPWZ1bmN0aW9uIGx0KGQsXyxtKXt2''@;'; put 'put ''YXIgVD0tMSxQPS0xLFE9LTEsc2U9LTEsb2U9LTEsZGU9LTE7KF8ubWF0Y2goUGUpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihCZSxaZSl7dmFyIG50PXBhcnNlSW50KG1bWmUrMV0sMTApO3N3aXRjaChCZS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSl7Y2FzZSJ5IjpUPW50O2JyZWFrO2Nhc2Ui''@;'; put 'put ''ZCI6UT1udDticmVhaztjYXNlImgiOnNlPW50O2JyZWFrO2Nhc2UicyI6ZGU9bnQ7YnJlYWs7Y2FzZSJtIjpzZT49MD9vZT1udDpQPW50fX0pLGRlPj0wJiYtMT09b2UmJlA+PTAmJihvZT1QLFA9LTEpO3ZhciBMZT0oIiIrKFQ+PTA/VDoobmV3IERhdGUpLmdldEZ1bGxZZWFyKCkpKS5zbGlj''@;'; put 'put ''ZSgtNCkrIi0iKygiMDAiKyhQPj0xP1A6MSkpLnNsaWNlKC0yKSsiLSIrKCIwMCIrKFE+PTE/UToxKSkuc2xpY2UoLTIpOzc9PUxlLmxlbmd0aCYmKExlPSIwIitMZSksOD09TGUubGVuZ3RoJiYoTGU9IjIwIitMZSk7dmFyIE5lPSgiMDAiKyhzZT49MD9zZTowKSkuc2xpY2UoLTIpKyI6Iiso''@;'; put 'put ''IjAwIisob2U+PTA/b2U6MCkpLnNsaWNlKC0yKSsiOiIrKCIwMCIrKGRlPj0wP2RlOjApKS5zbGljZSgtMik7cmV0dXJuLTE9PXNlJiYtMT09b2UmJi0xPT1kZT9MZTotMT09VCYmLTE9PVAmJi0xPT1RP05lOkxlKyJUIitOZX0oMCxaZS5kYXRlTkYsc3IubWF0Y2goam4pfHxbXSkscW49MSks''@;'; put 'put ''WmUuY2VsbERhdGVzPyhnci50PSJkIixnci52PWxuKHNyLHFuKSk6KGdyLnQ9Im4iLGdyLnY9S2UobG4oc3IscW4pKSksITEhPT1aZS5jZWxsVGV4dCYmKGdyLnc9SS5mb3JtYXQoZ3Iueixnci52IGluc3RhbmNlb2YgRGF0ZT9LZShnci52KTpnci52KSksWmUuY2VsbE5GfHxkZWxldGUgZ3Iu''@;'; put 'put ''en1lbHNlIGdyLnQ9InMiLGdyLnY9c3I7ZWxzZSBnci50PSJuIiwhMSE9PVplLmNlbGxUZXh0JiYoZ3Iudz1zciksZ3Iudj1idDtpZigieiI9PWdyLnR8fChaZS5kZW5zZT8obXRbZnRdfHwobXRbZnRdPVtdKSxtdFtmdF1ba3RdPWdyKTptdFtxaSh7YzprdCxyOmZ0fSldPWdyKSxhcj1OZS5j''@;'; put 'put ''aGFyQ29kZUF0KEV0PVZ0KzEpLFFlLmUuYzxrdCYmKFFlLmUuYz1rdCksUWUuZS5yPGZ0JiYoUWUuZS5yPWZ0KSxubj09dW4pKytrdDtlbHNlIGlmKGt0PTAsKytmdCxaZS5zaGVldFJvd3MmJlplLnNoZWV0Um93czw9ZnQpcmV0dXJuITB9ZTpmb3IoO1Z0PE5lLmxlbmd0aDsrK1Z0KXN3aXRj''@;'; put 'put ''aChubj1OZS5jaGFyQ29kZUF0KFZ0KSl7Y2FzZSAzNDozND09PWFyJiYobnI9IW5yKTticmVhaztjYXNlIHVuOmNhc2UgMTA6Y2FzZSAxMzppZighbnImJmtuKCkpYnJlYWsgZX1yZXR1cm4gVnQtRXQ+MCYma24oKSxtdFsiIXJlZiJdPWh0KFFlKSxtdH0oTmUsQmUpOlFuKGZ1bmN0aW9uIF8o''@;'; put 'put ''TmUsQmUpe3ZhciBaZT1CZXx8e30sbnQ9W107aWYoIU5lfHwwPT09TmUubGVuZ3RoKXJldHVybiBudDtmb3IodmFyIG10PU5lLnNwbGl0KC9bXHJcbl0vKSxRZT1tdC5sZW5ndGgtMTtRZT49MCYmMD09PW10W1FlXS5sZW5ndGg7KS0tUWU7Zm9yKHZhciBmdD0xMCxrdD0wLGJ0PTA7YnQ8PVFl''@;'; put 'put ''OysrYnQpLTE9PShrdD1tdFtidF0uaW5kZXhPZigiICIpKT9rdD1tdFtidF0ubGVuZ3RoOmt0KyssZnQ9TWF0aC5tYXgoZnQsa3QpO2ZvcihidD0wO2J0PD1RZTsrK2J0KXtudFtidF09W107dmFyIEV0PTA7Zm9yKGQobXRbYnRdLnNsaWNlKDAsZnQpLnRyaW0oKSxudCxidCxFdCxaZSksRXQ9''@;'; put 'put ''MTtFdDw9KG10W2J0XS5sZW5ndGgtZnQpLzEwKzE7KytFdClkKG10W2J0XS5zbGljZShmdCsxMCooRXQtMSksZnQrMTAqRXQpLnRyaW0oKSxudCxidCxFdCxaZSl9cmV0dXJuIFplLnNoZWV0Um93cyYmKG50PW50LnNsaWNlKDAsWmUuc2hlZXRSb3dzKSksbnR9KE5lLEJlKSxCZSl9ZnVuY3Rp''@;'; put 'put ''b24gb2UoTmUsQmUpe3ZhciBaZT0iIixudD0ic3RyaW5nIj09QmUudHlwZT9bMCwwLDAsMF06VzgoTmUsQmUpO3N3aXRjaChCZS50eXBlKXtjYXNlImJhc2U2NCI6WmU9Q2UuZGVjb2RlKE5lKTticmVhaztjYXNlImJpbmFyeSI6Y2FzZSJzdHJpbmciOlplPU5lO2JyZWFrO2Nhc2UiYnVmZmVy''@;'; put 'put ''IjpaZT02NTAwMT09QmUuY29kZXBhZ2U/TmUudG9TdHJpbmcoInV0ZjgiKTpCZS5jb2RlcGFnZSYmdHlwZW9mIGNwdGFibGU8InUiP2NwdGFibGUudXRpbHMuZGVjb2RlKEJlLmNvZGVwYWdlLE5lKTpOZS50b1N0cmluZygiYmluYXJ5Iik7YnJlYWs7Y2FzZSJhcnJheSI6WmU9T24oTmUpO2Jy''@;'; put 'put ''ZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK0JlLnR5cGUpfXJldHVybiAyMzk9PW50WzBdJiYxODc9PW50WzFdJiYxOTE9PW50WzJdP1plPVduKFplLnNsaWNlKDMpKToiYmluYXJ5Ij09QmUudHlwZSYmdHlwZW9mIGNwdGFibGU8InUiJiZCZS5jb2Rl''@;'; put 'put ''cGFnZSYmKFplPWNwdGFibGUudXRpbHMuZGVjb2RlKEJlLmNvZGVwYWdlLGNwdGFibGUudXRpbHMuZW5jb2RlKDI4NTkxLFplKSkpLCJzb2NpYWxjYWxjOnZlcnNpb246Ij09WmUuc2xpY2UoMCwxOSk/VjAudG9fc2hlZXQoInN0cmluZyI9PUJlLnR5cGU/WmU6V24oWmUpLEJlKTpzZShaZSxC''@;'; put 'put ''ZSl9cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIGRlKE5lLEJlKXtyZXR1cm4gbW4ob2UoTmUsQmUpLEJlKX0sdG9fc2hlZXQ6b2UsZnJvbV9zaGVldDpmdW5jdGlvbiBMZShOZSl7Zm9yKHZhciBudCxCZT1bXSxaZT15dChOZVsiIXJlZiJdKSxtdD1BcnJheS5pc0FycmF5KE5lKSxRZT1a''@;'; put 'put ''ZS5zLnI7UWU8PVplLmUucjsrK1FlKXtmb3IodmFyIGZ0PVtdLGt0PVplLnMuYztrdDw9WmUuZS5jOysra3Qpe3ZhciBidD1xaSh7cjpRZSxjOmt0fSk7aWYoKG50PW10PyhOZVtRZV18fFtdKVtrdF06TmVbYnRdKSYmbnVsbCE9bnQudil7Zm9yKHZhciBFdD0obnQud3x8KHp0KG50KSxudC53''@;'; put 'put ''KXx8IiIpLnNsaWNlKDAsMTApO0V0Lmxlbmd0aDwxMDspRXQrPSIgIjtmdC5wdXNoKEV0KygwPT09a3Q/IiAiOiIiKSl9ZWxzZSBmdC5wdXNoKCIgICAgICAgICAgIil9QmUucHVzaChmdC5qb2luKCIiKSl9cmV0dXJuIEJlLmpvaW4oIlxuIil9fX0oKSxjUz1mdW5jdGlvbigpe2Z1bmN0aW9u''@;'; put 'put ''IGQoRG4sT3IsX3Ipe2lmKERuKXtPbChEbixEbi5sfHwwKTtmb3IodmFyIE1uPV9yLkVudW18fExpO0RuLmw8RG4ubGVuZ3RoOyl7dmFyIE5yPURuLnJlYWRfc2hpZnQoMiksamk9TW5bTnJdfHxNbls2NTUzNV0sYmk9RG4ucmVhZF9zaGlmdCgyKSxObz1Ebi5sK2JpLFlhPWppLmYmJmppLmYo''@;'; put 'put ''RG4sYmksX3IpO2lmKERuLmw9Tm8sT3IoWWEsamksTnIpKXJldHVybn19fWZ1bmN0aW9uIG0oRG4sT3Ipe2lmKCFEbilyZXR1cm4gRG47dmFyIF9yPU9yfHx7fSxNbj1fci5kZW5zZT9bXTp7fSxOcj0iU2hlZXQxIixqaT0wLGJpPXt9LE5vPVtOcl0sWWE9W10sdW89e3M6e3I6MCxjOjB9LGU6''@;'; put 'put ''e3I6MCxjOjB9fSxNcz1fci5zaGVldFJvd3N8fDA7aWYoMj09RG5bMl0pX3IuRW51bT1MaSxkKERuLGZ1bmN0aW9uKFBpLFBjLHhuKXtzd2l0Y2goeG4pe2Nhc2UgMDpfci52ZXJzPVBpLFBpPj00MDk2JiYoX3IucXBybz0hMCk7YnJlYWs7Y2FzZSA2OnVvPVBpO2JyZWFrO2Nhc2UgMTU6Y2Fz''@;'; put 'put ''ZSA1MTpfci5xcHJvfHwoUGlbMV0udj1QaVsxXS52LnNsaWNlKDEpKTtjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNjoxND09eG4mJiEoMTEyJn5QaVsyXSkmJigxNSZQaVsyXSk+MSYmKDE1JlBpWzJdKTwxNSYmKFBpWzFdLno9X3IuZGF0ZU5GfHxJLl90YWJsZVsxNF0sX3IuY2VsbERhdGVzJiYo''@;'; put 'put ''UGlbMV0udD0iZCIsUGlbMV0udj0kdChQaVsxXS52KSkpO3ZhciB4bD1fci5kZW5zZT8oTW5bUGlbMF0ucl18fFtdKVtQaVswXS5jXTpNbltxaShQaVswXSldO2lmKHhsKXt4bC50PVBpWzFdLnQseGwudj1QaVsxXS52LG51bGwhPVBpWzFdLnomJih4bC56PVBpWzFdLnopLG51bGwhPVBpWzFd''@;'; put 'put ''LmYmJih4bC5mPVBpWzFdLmYpO2JyZWFrfV9yLmRlbnNlPyhNbltQaVswXS5yXXx8KE1uW1BpWzBdLnJdPVtdKSxNbltQaVswXS5yXVtQaVswXS5jXT1QaVsxXSk6TW5bcWkoUGlbMF0pXT1QaVsxXX19LF9yKTtlbHNle2lmKDI2IT1EblsyXSYmMTQhPURuWzJdKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''VW5yZWNvZ25pemVkIExPVFVTIEJPRiAiK0RuWzJdKTtfci5FbnVtPWtyLDE0PT1EblsyXSYmKF9yLnFwcm89ITAsRG4ubD0wKSxkKERuLGZ1bmN0aW9uKFBpLFBjLHhuKXtzd2l0Y2goeG4pe2Nhc2UgMjI6UGlbMV0udj1QaVsxXS52LnNsaWNlKDEpO2Nhc2UgMjM6Y2FzZSAyNDpjYXNlIDI1''@;'; put 'put ''OmNhc2UgMzc6Y2FzZSAzOTpjYXNlIDQwOmlmKFBpWzNdPmppJiYoTW5bIiFyZWYiXT1odCh1byksYmlbTnJdPU1uLE1uPV9yLmRlbnNlP1tdOnt9LHVvPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0sTm8ucHVzaChOcj0iU2hlZXQiKygoamk9UGlbM10pKzEpKSksTXM+MCYmUGlbMF0ucj49''@;'; put 'put ''TXMpYnJlYWs7X3IuZGVuc2U/KE1uW1BpWzBdLnJdfHwoTW5bUGlbMF0ucl09W10pLE1uW1BpWzBdLnJdW1BpWzBdLmNdPVBpWzFdKTpNbltxaShQaVswXSldPVBpWzFdLHVvLmUuYzxQaVswXS5jJiYodW8uZS5jPVBpWzBdLmMpLHVvLmUucjxQaVswXS5yJiYodW8uZS5yPVBpWzBdLnIpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgMjc6UGlbMTRlM10mJihZYVtQaVsxNGUzXVswXV09UGlbMTRlM11bMV0pfX0sX3IpfWlmKE1uWyIhcmVmIl09aHQodW8pLGJpW05yXT1NbiwhWWEubGVuZ3RoKXJldHVybntTaGVldE5hbWVzOk5vLFNoZWV0czpiaX07Zm9yKHZhciBkYT17fSwkYT1bXSxTYT0wO1NhPFlhLmxl''@;'; put 'put ''bmd0aDsrK1NhKWJpW05vW1NhXV0mJigkYS5wdXNoKFlhW1NhXSksZGFbWWFbU2FdXT1iaVtOb1tTYV1dKTtyZXR1cm57U2hlZXROYW1lczokYSxTaGVldHM6ZGF9fWZ1bmN0aW9uIExlKERuLE9yLF9yKXt2YXIgTW49W3tjOjAscjowfSx7dDoibiIsdjowfSwwXTtyZXR1cm4gX3IucXBybyYm''@;'; put 'put ''MjA3NjghPV9yLnZlcnM/KE1uWzBdLmM9RG4ucmVhZF9zaGlmdCgxKSxEbi5sKyssTW5bMF0ucj1Ebi5yZWFkX3NoaWZ0KDIpLERuLmwrPTIpOihNblsyXT1Ebi5yZWFkX3NoaWZ0KDEpLE1uWzBdLmM9RG4ucmVhZF9zaGlmdCgyKSxNblswXS5yPURuLnJlYWRfc2hpZnQoMikpLE1ufWZ1bmN0''@;'; put 'put ''aW9uIE5lKERuLE9yLF9yKXt2YXIgTW49RG4ubCtPcixOcj1MZShEbiwwLF9yKTtpZihOclsxXS50PSJzIiwyMDc2OD09X3IudmVycyl7RG4ubCsrO3ZhciBqaT1Ebi5yZWFkX3NoaWZ0KDEpO3JldHVybiBOclsxXS52PURuLnJlYWRfc2hpZnQoamksInV0ZjgiKSxOcn1yZXR1cm4gX3IucXBy''@;'; put 'put ''byYmRG4ubCsrLE5yWzFdLnY9RG4ucmVhZF9zaGlmdChNbi1Ebi5sLCJjc3RyIiksTnJ9ZnVuY3Rpb24gQmUoRG4sT3IsX3Ipe3ZhciBNbj1Gcig3K19yLmxlbmd0aCk7TW4ud3JpdGVfc2hpZnQoMSwyNTUpLE1uLndyaXRlX3NoaWZ0KDIsT3IpLE1uLndyaXRlX3NoaWZ0KDIsRG4pLE1uLndy''@;'; put 'put ''aXRlX3NoaWZ0KDEsMzkpO2Zvcih2YXIgTnI9MDtOcjxNbi5sZW5ndGg7KytOcil7dmFyIGppPV9yLmNoYXJDb2RlQXQoTnIpO01uLndyaXRlX3NoaWZ0KDEsamk+PTEyOD85NTpqaSl9cmV0dXJuIE1uLndyaXRlX3NoaWZ0KDEsMCksTW59ZnVuY3Rpb24gbnQoRG4sT3IsX3Ipe3ZhciBNbj1G''@;'; put 'put ''cig3KTtyZXR1cm4gTW4ud3JpdGVfc2hpZnQoMSwyNTUpLE1uLndyaXRlX3NoaWZ0KDIsT3IpLE1uLndyaXRlX3NoaWZ0KDIsRG4pLE1uLndyaXRlX3NoaWZ0KDIsX3IsImkiKSxNbn1mdW5jdGlvbiBRZShEbixPcixfcil7dmFyIE1uPUZyKDEzKTtyZXR1cm4gTW4ud3JpdGVfc2hpZnQoMSwy''@;'; put 'put ''NTUpLE1uLndyaXRlX3NoaWZ0KDIsT3IpLE1uLndyaXRlX3NoaWZ0KDIsRG4pLE1uLndyaXRlX3NoaWZ0KDgsX3IsImYiKSxNbn1mdW5jdGlvbiBrdChEbixPcixfcil7dmFyIE1uPTMyNzY4Jk9yO3JldHVybiBPcj0oTW4/RG46MCkrKChPciY9LTMyNzY5KT49ODE5Mj9Pci0xNjM4NDpPciks''@;'; put 'put ''KE1uPyIiOiIkIikrKF9yP21zKE9yKTp6byhPcikpfXZhciBFdD17NTE6WyJGQUxTRSIsMF0sNTI6WyJUUlVFIiwwXSw3MDpbIkxFTiIsMV0sODA6WyJTVU0iLDY5XSw4MTpbIkFWRVJBR0VBIiw2OV0sODI6WyJDT1VOVEEiLDY5XSw4MzpbIk1JTkEiLDY5XSw4NDpbIk1BWEEiLDY5XSwxMTE6''@;'; put 'put ''WyJUIiwxXX0sVnQ9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIrIiwiLSIsIioiLCIvIiwiXiIsIj0iLCI8PiIsIjw9IiwiPj0iLCI8IiwiPiIsIiIsIiIsIiIsIiIsIiYiLCIiLCIiLCIiLCIiLCIiLCIiLCIiXTtmdW5jdGlvbiBucihEbil7dmFyIE9yPVt7YzowLHI6MH0se3Q6Im4i''@;'; put 'put ''LHY6MH0sMF07cmV0dXJuIE9yWzBdLnI9RG4ucmVhZF9zaGlmdCgyKSxPclszXT1EbltEbi5sKytdLE9yWzBdLmM9RG5bRG4ubCsrXSxPcn1mdW5jdGlvbiBhcihEbixPcixfcixNbil7dmFyIE5yPUZyKDYrTW4ubGVuZ3RoKTtOci53cml0ZV9zaGlmdCgyLERuKSxOci53cml0ZV9zaGlmdCgx''@;'; put 'put ''LF9yKSxOci53cml0ZV9zaGlmdCgxLE9yKSxOci53cml0ZV9zaGlmdCgxLDM5KTtmb3IodmFyIGppPTA7amk8TW4ubGVuZ3RoOysramkpe3ZhciBiaT1Nbi5jaGFyQ29kZUF0KGppKTtOci53cml0ZV9zaGlmdCgxLGJpPj0xMjg/OTU6YmkpfXJldHVybiBOci53cml0ZV9zaGlmdCgxLDApLE5y''@;'; put 'put ''fWZ1bmN0aW9uIGtuKERuLE9yKXt2YXIgX3I9bnIoRG4pLE1uPURuLnJlYWRfc2hpZnQoNCksTnI9RG4ucmVhZF9zaGlmdCg0KSxqaT1Ebi5yZWFkX3NoaWZ0KDIpO2lmKDY1NTM1PT1qaSlyZXR1cm4gMD09PU1uJiYzMjIxMjI1NDcyPT09TnI/KF9yWzFdLnQ9ImUiLF9yWzFdLnY9MTUpOjA9''@;'; put 'put ''PT1NbiYmMzQ4OTY2MDkyOD09PU5yPyhfclsxXS50PSJlIixfclsxXS52PTQyKTpfclsxXS52PTAsX3I7dmFyIGJpPTMyNzY4JmppO3JldHVybiBqaT0oMzI3NjcmamkpLTE2NDQ2LF9yWzFdLnY9KDEtMipiaSkqKE5yKk1hdGgucG93KDIsamkrMzIpK01uKk1hdGgucG93KDIsamkpKSxfcn1m''@;'; put 'put ''dW5jdGlvbiBzcihEbixPcixfcixNbil7dmFyIE5yPUZyKDE0KTtpZihOci53cml0ZV9zaGlmdCgyLERuKSxOci53cml0ZV9zaGlmdCgxLF9yKSxOci53cml0ZV9zaGlmdCgxLE9yKSwwPT1NbilyZXR1cm4gTnIud3JpdGVfc2hpZnQoNCwwKSxOci53cml0ZV9zaGlmdCg0LDApLE5yLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsNjU1MzUpLE5yO3ZhciBqaT0wLGJpPTAsWWE9MDtyZXR1cm4gTW48MCYmKGppPTEsTW49LU1uKSxiaT0wfE1hdGgubG9nMihNbiksISgyMTQ3NDgzNjQ4JihZYT0oTW4vPU1hdGgucG93KDIsYmktMzEpKT4+PjApKSYmKCsrYmksWWE9KE1uLz0yKT4+PjApLE1uLT1ZYSxZYXw9''@;'; put 'put ''MjE0NzQ4MzY0OCxZYT4+Pj0wLE1uKj1NYXRoLnBvdygyLDMyKSxOci53cml0ZV9zaGlmdCg0LE1uPj4+MCksTnIud3JpdGVfc2hpZnQoNCxZYSksTnIud3JpdGVfc2hpZnQoMixiaSs9MTYzODMrKGppPzMyNzY4OjApKSxOcn1mdW5jdGlvbiBfaShEbixPcil7dmFyIF9yPW5yKERuKSxNbj1E''@;'; put 'put ''bi5yZWFkX3NoaWZ0KDgsImYiKTtyZXR1cm4gX3JbMV0udj1Nbixfcn1mdW5jdGlvbiBtbyhEbixPcil7dmFyIF9yPUZyKDUrRG4ubGVuZ3RoKTtfci53cml0ZV9zaGlmdCgyLDE0ZTMpLF9yLndyaXRlX3NoaWZ0KDIsT3IpO2Zvcih2YXIgTW49MDtNbjxEbi5sZW5ndGg7KytNbil7dmFyIE5y''@;'; put 'put ''PURuLmNoYXJDb2RlQXQoTW4pO19yW19yLmwrK109TnI+MTI3Pzk1Ok5yfXJldHVybiBfcltfci5sKytdPTAsX3J9dmFyIExpPXswOntuOiJCT0YiLGY6aWR9LDE6e246IkVPRiJ9LDI6e246IkNBTENNT0RFIn0sMzp7bjoiQ0FMQ09SREVSIn0sNDp7bjoiU1BMSVQifSw1OntuOiJTWU5DIn0s''@;'; put 'put ''Njp7bjoiUkFOR0UiLGY6ZnVuY3Rpb24gb2UoRG4pe3ZhciBPcj17czp7YzowLHI6MH0sZTp7YzowLHI6MH19O3JldHVybiBPci5zLmM9RG4ucmVhZF9zaGlmdCgyKSxPci5zLnI9RG4ucmVhZF9zaGlmdCgyKSxPci5lLmM9RG4ucmVhZF9zaGlmdCgyKSxPci5lLnI9RG4ucmVhZF9zaGlmdCgy''@;'; put 'put ''KSw2NTUzNT09T3Iucy5jJiYoT3Iucy5jPU9yLmUuYz1Pci5zLnI9T3IuZS5yPTApLE9yfX0sNzp7bjoiV0lORE9XMSJ9LDg6e246IkNPTFcxIn0sOTp7bjoiV0lOVFdPIn0sMTA6e246IkNPTFcyIn0sMTE6e246Ik5BTUUifSwxMjp7bjoiQkxBTksifSwxMzp7bjoiSU5URUdFUiIsZjpmdW5j''@;'; put 'put ''dGlvbiBaZShEbixPcixfcil7dmFyIE1uPUxlKERuLDAsX3IpO3JldHVybiBNblsxXS52PURuLnJlYWRfc2hpZnQoMiwiaSIpLE1ufX0sMTQ6e246Ik5VTUJFUiIsZjpmdW5jdGlvbiBtdChEbixPcixfcil7dmFyIE1uPUxlKERuLDAsX3IpO3JldHVybiBNblsxXS52PURuLnJlYWRfc2hpZnQo''@;'; put 'put ''OCwiZiIpLE1ufX0sMTU6e246IkxBQkVMIixmOk5lfSwxNjp7bjoiRk9STVVMQSIsZjpmdW5jdGlvbiBmdChEbixPcixfcil7dmFyIE1uPURuLmwrT3IsTnI9TGUoRG4sMCxfcik7aWYoTnJbMV0udj1Ebi5yZWFkX3NoaWZ0KDgsImYiKSxfci5xcHJvKURuLmw9TW47ZWxzZXt2YXIgamk9RG4u''@;'; put 'put ''cmVhZF9zaGlmdCgyKTsoZnVuY3Rpb24gdW4oRG4sT3Ipe09sKERuLDApO2Zvcih2YXIgX3I9W10sTW49MCxOcj0iIixqaT0iIjtEbi5sPERuLmxlbmd0aDspe3ZhciBiaT1EbltEbi5sKytdO3N3aXRjaChiaSl7Y2FzZSAwOl9yLnB1c2goRG4ucmVhZF9zaGlmdCg4LCJmIikpO2JyZWFrO2Nh''@;'; put 'put ''c2UgMTpqaT1rdChPclswXS5jLERuLnJlYWRfc2hpZnQoMiksITApLE5yPWt0KE9yWzBdLnIsRG4ucmVhZF9zaGlmdCgyKSwhMSksX3IucHVzaChqaStOcik7YnJlYWs7Y2FzZSAyOnZhciBObz1rdChPclswXS5jLERuLnJlYWRfc2hpZnQoMiksITApLFlhPWt0KE9yWzBdLnIsRG4ucmVhZF9z''@;'; put 'put ''aGlmdCgyKSwhMSk7amk9a3QoT3JbMF0uYyxEbi5yZWFkX3NoaWZ0KDIpLCEwKSxOcj1rdChPclswXS5yLERuLnJlYWRfc2hpZnQoMiksITEpLF9yLnB1c2goTm8rWWErIjoiK2ppK05yKTticmVhaztjYXNlIDM6aWYoRG4ubDxEbi5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigi''@;'; put 'put ''V0sxIHByZW1hdHVyZSBmb3JtdWxhIGVuZCIpO2JyZWFrO2Nhc2UgNDpfci5wdXNoKCIoIitfci5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UgNTpfci5wdXNoKERuLnJlYWRfc2hpZnQoMikpO2JyZWFrO2Nhc2UgNjpmb3IodmFyIHVvPSIiO2JpPURuW0RuLmwrK107KXVvKz1TdHJpbmcuZnJvbUNo''@;'; put 'put ''YXJDb2RlKGJpKTtfci5wdXNoKCciJyt1by5yZXBsYWNlKC8iL2csJyIiJykrJyInKTticmVhaztjYXNlIDg6X3IucHVzaCgiLSIrX3IucG9wKCkpO2JyZWFrO2Nhc2UgMjM6X3IucHVzaCgiKyIrX3IucG9wKCkpO2JyZWFrO2Nhc2UgMjI6X3IucHVzaCgiTk9UKCIrX3IucG9wKCkrIikiKTti''@;'; put 'put ''cmVhaztjYXNlIDIwOmNhc2UgMjE6dmFyIE1zPV9yLnBvcCgpLGRhPV9yLnBvcCgpO19yLnB1c2goWyJBTkQiLCJPUiJdW2JpLTIwXSsiKCIrZGErIiwiK01zKyIpIik7YnJlYWs7ZGVmYXVsdDppZihiaTwzMiYmVnRbYmldKU1zPV9yLnBvcCgpLGRhPV9yLnBvcCgpLF9yLnB1c2goZGErVnRb''@;'; put 'put ''YmldK01zKTtlbHNle2lmKCFFdFtiaV0pcmV0dXJuIGJpPD03P2NvbnNvbGUuZXJyb3IoIldLMSBpbnZhbGlkIG9wY29kZSAiK2JpLnRvU3RyaW5nKDE2KSk6Ymk8PTI0P2NvbnNvbGUuZXJyb3IoIldLMSB1bnN1cHBvcnRlZCBvcCAiK2JpLnRvU3RyaW5nKDE2KSk6Ymk8PTMwP2NvbnNvbGUu''@;'; put 'put ''ZXJyb3IoIldLMSBpbnZhbGlkIG9wY29kZSAiK2JpLnRvU3RyaW5nKDE2KSk6Ymk8PTExNT9jb25zb2xlLmVycm9yKCJXSzEgdW5zdXBwb3J0ZWQgZnVuY3Rpb24gb3Bjb2RlICIrYmkudG9TdHJpbmcoMTYpKTpjb25zb2xlLmVycm9yKCJXSzEgdW5yZWNvZ25pemVkIG9wY29kZSAiK2JpLnRv''@;'; put 'put ''U3RyaW5nKDE2KSk7aWYoNjk9PShNbj1FdFtiaV1bMV0pJiYoTW49RG5bRG4ubCsrXSksTW4+X3IubGVuZ3RoKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIldLMSBiYWQgZm9ybXVsYSBwYXJzZSAweCIrYmkudG9TdHJpbmcoMTYpKyI6fCIrX3Iuam9pbigifCIpKyJ8Iik7dmFyICRhPV9y''@;'; put 'put ''LnNsaWNlKC1Nbik7X3IubGVuZ3RoLT1Nbixfci5wdXNoKEV0W2JpXVswXSsiKCIrJGEuam9pbigiLCIpKyIpIil9fX0xPT1fci5sZW5ndGg/T3JbMV0uZj0iIitfclswXTpjb25zb2xlLmVycm9yKCJXSzEgYmFkIGZvcm11bGEgcGFyc2UgfCIrX3Iuam9pbigifCIpKyJ8Iil9KShEbi5zbGlj''@;'; put 'put ''ZShEbi5sLERuLmwramkpLE5yKSxEbi5sKz1qaX1yZXR1cm4gTnJ9fSwyNDp7bjoiVEFCTEUifSwyNTp7bjoiT1JBTkdFIn0sMjY6e246IlBSQU5HRSJ9LDI3OntuOiJTUkFOR0UifSwyODp7bjoiRlJBTkdFIn0sMjk6e246IktSQU5HRTEifSwzMjp7bjoiSFJBTkdFIn0sMzU6e246IktSQU5H''@;'; put 'put ''RTIifSwzNjp7bjoiUFJPVEVDIn0sMzc6e246IkZPT1RFUiJ9LDM4OntuOiJIRUFERVIifSwzOTp7bjoiU0VUVVAifSw0MDp7bjoiTUFSR0lOUyJ9LDQxOntuOiJMQUJFTEZNVCJ9LDQyOntuOiJUSVRMRVMifSw0Mzp7bjoiU0hFRVRKUyJ9LDQ1OntuOiJHUkFQSCJ9LDQ2OntuOiJOR1JBUEgi''@;'; put 'put ''fSw0Nzp7bjoiQ0FMQ0NPVU5UIn0sNDg6e246IlVORk9STUFUVEVEIn0sNDk6e246IkNVUlNPUlcxMiJ9LDUwOntuOiJXSU5ET1cifSw1MTp7bjoiU1RSSU5HIixmOk5lfSw1NTp7bjoiUEFTU1dPUkQifSw1Njp7bjoiTE9DS0VEIn0sNjA6e246IlFVRVJZIn0sNjE6e246IlFVRVJZTkFNRSJ9''@;'; put 'put ''LDYyOntuOiJQUklOVCJ9LDYzOntuOiJQUklOVE5BTUUifSw2NDp7bjoiR1JBUEgyIn0sNjU6e246IkdSQVBITkFNRSJ9LDY2OntuOiJaT09NIn0sNjc6e246IlNZTVNQTElUIn0sNjg6e246Ik5TUk9XUyJ9LDY5OntuOiJOU0NPTFMifSw3MDp7bjoiUlVMRVIifSw3MTp7bjoiTk5BTUUifSw3''@;'; put 'put ''Mjp7bjoiQUNPTU0ifSw3Mzp7bjoiQU1BQ1JPIn0sNzQ6e246IlBBUlNFIn0sMTAyOntuOiJQUkFOR0VTPz8ifSwxMDM6e246IlJSQU5HRVM/PyJ9LDEwNDp7bjoiRk5BTUU/PyJ9LDEwNTp7bjoiTVJBTkdFUz8/In0sNjU1MzU6e246IiJ9fSxrcj17MDp7bjoiQk9GIn0sMTp7bjoiRU9GIn0s''@;'; put 'put ''Mjp7bjoiUEFTU1dPUkQifSwzOntuOiJDQUxDU0VUIn0sNDp7bjoiV0lORE9XU0VUIn0sNTp7bjoiU0hFRVRDRUxMUFRSIn0sNjp7bjoiU0hFRVRMQVlPVVQifSw3OntuOiJDT0xVTU5XSURUSCJ9LDg6e246IkhJRERFTkNPTFVNTiJ9LDk6e246IlVTRVJSQU5HRSJ9LDEwOntuOiJTWVNURU1S''@;'; put 'put ''QU5HRSJ9LDExOntuOiJaRVJPRk9SQ0UifSwxMjp7bjoiU09SVEtFWURJUiJ9LDEzOntuOiJGSUxFU0VBTCJ9LDE0OntuOiJEQVRBRklMTE5VTVMifSwxNTp7bjoiUFJJTlRNQUlOIn0sMTY6e246IlBSSU5UU1RSSU5HIn0sMTc6e246IkdSQVBITUFJTiJ9LDE4OntuOiJHUkFQSFNUUklORyJ9''@;'; put 'put ''LDE5OntuOiI/PyJ9LDIwOntuOiJFUlJDRUxMIn0sMjE6e246Ik5BQ0VMTCJ9LDIyOntuOiJMQUJFTDE2IixmOmZ1bmN0aW9uIG5uKERuLE9yKXt2YXIgX3I9bnIoRG4pO3JldHVybiBfclsxXS50PSJzIixfclsxXS52PURuLnJlYWRfc2hpZnQoT3ItNCwiY3N0ciIpLF9yfX0sMjM6e246Ik5V''@;'; put 'put ''TUJFUjE3IixmOmtufSwyNDp7bjoiTlVNQkVSMTgiLGY6ZnVuY3Rpb24gam4oRG4sT3Ipe3ZhciBfcj1ucihEbik7X3JbMV0udj1Ebi5yZWFkX3NoaWZ0KDIpO3ZhciBNbj1fclsxXS52Pj4xO2lmKDEmX3JbMV0udilzd2l0Y2goNyZNbil7Y2FzZSAwOk1uPTVlMyooTW4+PjMpO2JyZWFrO2Nh''@;'; put 'put ''c2UgMTpNbj01MDAqKE1uPj4zKTticmVhaztjYXNlIDI6TW49KE1uPj4zKS8yMDticmVhaztjYXNlIDM6TW49KE1uPj4zKS8yMDA7YnJlYWs7Y2FzZSA0Ok1uPShNbj4+MykvMmUzO2JyZWFrO2Nhc2UgNTpNbj0oTW4+PjMpLzJlNDticmVhaztjYXNlIDY6TW49KE1uPj4zKS8xNjticmVhaztj''@;'; put 'put ''YXNlIDc6TW49KE1uPj4zKS82NH1yZXR1cm4gX3JbMV0udj1Nbixfcn19LDI1OntuOiJGT1JNVUxBMTkiLGY6ZnVuY3Rpb24gZ3IoRG4sT3Ipe3ZhciBfcj1rbihEbik7cmV0dXJuIERuLmwrPU9yLTE0LF9yfX0sMjY6e246IkZPUk1VTEExQSJ9LDI3OntuOiJYRk9STUFUIixmOmZ1bmN0aW9u''@;'; put 'put ''IHNvKERuLE9yKXtmb3IodmFyIF9yPXt9LE1uPURuLmwrT3I7RG4ubDxNbjspe3ZhciBOcj1Ebi5yZWFkX3NoaWZ0KDIpO2lmKDE0ZTM9PU5yKXtmb3IoX3JbTnJdPVswLCIiXSxfcltOcl1bMF09RG4ucmVhZF9zaGlmdCgyKTtEbltEbi5sXTspX3JbTnJdWzFdKz1TdHJpbmcuZnJvbUNoYXJD''@;'; put 'put ''b2RlKERuW0RuLmxdKSxEbi5sKys7RG4ubCsrfX1yZXR1cm4gX3J9fSwyODp7bjoiRFRMQUJFTE1JU0MifSwyOTp7bjoiRFRMQUJFTENFTEwifSwzMDp7bjoiR1JBUEhXSU5ET1cifSwzMTp7bjoiQ1BBIn0sMzI6e246IkxQTEFVVE8ifSwzMzp7bjoiUVVFUlkifSwzNDp7bjoiSElEREVOU0hF''@;'; put 'put ''RVQifSwzNTp7bjoiPz8ifSwzNzp7bjoiTlVNQkVSMjUiLGY6ZnVuY3Rpb24gcW4oRG4sT3Ipe3ZhciBfcj1ucihEbiksTW49RG4ucmVhZF9zaGlmdCg0KTtyZXR1cm4gX3JbMV0udj1Nbj4+Nixfcn19LDM4OntuOiI/PyJ9LDM5OntuOiJOVU1CRVIyNyIsZjpfaX0sNDA6e246IkZPUk1VTEEy''@;'; put 'put ''OCIsZjpmdW5jdGlvbiBPaShEbixPcil7dmFyIF9yPV9pKERuKTtyZXR1cm4gRG4ubCs9T3ItMTAsX3J9fSwxNDI6e246Ij8/In0sMTQ3OntuOiI/PyJ9LDE1MDp7bjoiPz8ifSwxNTE6e246Ij8/In0sMTUyOntuOiI/PyJ9LDE1Mzp7bjoiPz8ifSwxNTQ6e246Ij8/In0sMTU1OntuOiI/PyJ9''@;'; put 'put ''LDE1Njp7bjoiPz8ifSwxNjM6e246Ij8/In0sMTc0OntuOiI/PyJ9LDE3NTp7bjoiPz8ifSwxNzY6e246Ij8/In0sMTc3OntuOiI/PyJ9LDE4NDp7bjoiPz8ifSwxODU6e246Ij8/In0sMTg2OntuOiI/PyJ9LDE4Nzp7bjoiPz8ifSwxODg6e246Ij8/In0sMTk1OntuOiI/PyJ9LDIwMTp7bjoi''@;'; put 'put ''Pz8ifSwyMDU6e246Ij8/In0sMjA2OntuOiI/PyJ9LDIwNzp7bjoiPz8ifSwyMDg6e246Ij8/In0sMjU2OntuOiI/PyJ9LDI1OTp7bjoiPz8ifSwyNjA6e246Ij8/In0sMjYxOntuOiI/PyJ9LDI2Mjp7bjoiPz8ifSwyNjM6e246Ij8/In0sMjY1OntuOiI/PyJ9LDI2Njp7bjoiPz8ifSwyNjc6''@;'; put 'put ''e246Ij8/In0sMjY4OntuOiI/PyJ9LDI3MDp7bjoiPz8ifSwyNzE6e246Ij8/In0sMzg0OntuOiI/PyJ9LDM4OTp7bjoiPz8ifSwzOTA6e246Ij8/In0sMzkzOntuOiI/PyJ9LDM5Njp7bjoiPz8ifSw1MTI6e246Ij8/In0sNTE0OntuOiI/PyJ9LDUxMzp7bjoiPz8ifSw1MTY6e246Ij8/In0s''@;'; put 'put ''NTE3OntuOiI/PyJ9LDY0MDp7bjoiPz8ifSw2NDE6e246Ij8/In0sNjQyOntuOiI/PyJ9LDY0Mzp7bjoiPz8ifSw2NDQ6e246Ij8/In0sNjQ1OntuOiI/PyJ9LDY0Njp7bjoiPz8ifSw2NDc6e246Ij8/In0sNjQ4OntuOiI/PyJ9LDY1ODp7bjoiPz8ifSw2NTk6e246Ij8/In0sNjYwOntuOiI/''@;'; put 'put ''PyJ9LDY2MTp7bjoiPz8ifSw2NjI6e246Ij8/In0sNjY1OntuOiI/PyJ9LDY2Njp7bjoiPz8ifSw3Njg6e246Ij8/In0sNzcyOntuOiI/PyJ9LDE2MDA6e246Ij8/In0sMTYwMjp7bjoiPz8ifSwxNzkzOntuOiI/PyJ9LDE3OTQ6e246Ij8/In0sMTc5NTp7bjoiPz8ifSwxNzk2OntuOiI/PyJ9''@;'; put 'put ''LDE5MjA6e246Ij8/In0sMjA0ODp7bjoiPz8ifSwyMDQ5OntuOiI/PyJ9LDIwNTI6e246Ij8/In0sMjY4ODp7bjoiPz8ifSwxMDk5ODp7bjoiPz8ifSwxMjg0OTp7bjoiPz8ifSwyODIzMzp7bjoiPz8ifSwyODQ4NDp7bjoiPz8ifSw2NTUzNTp7bjoiIn19O3JldHVybntzaGVldF90b193azE6''@;'; put 'put ''ZnVuY3Rpb24gVChEbixPcil7dmFyIF9yPU9yfHx7fTtpZigrX3IuY29kZXBhZ2U+PTAmJkgoK19yLmNvZGVwYWdlKSwic3RyaW5nIj09X3IudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBXSzEgdG8gSlMgc3RyaW5nIik7dmFyIE1uPU1jKCksTnI9eXQoRG5bIiFyZWYiXSks''@;'; put 'put ''amk9QXJyYXkuaXNBcnJheShEbiksYmk9W107emkoTW4sMCxmdW5jdGlvbiBRKERuKXt2YXIgT3I9RnIoMik7cmV0dXJuIE9yLndyaXRlX3NoaWZ0KDIsRG4pLE9yfSgxMDMwKSksemkoTW4sNixmdW5jdGlvbiBkZShEbil7dmFyIE9yPUZyKDgpO3JldHVybiBPci53cml0ZV9zaGlmdCgyLERu''@;'; put 'put ''LnMuYyksT3Iud3JpdGVfc2hpZnQoMixEbi5zLnIpLE9yLndyaXRlX3NoaWZ0KDIsRG4uZS5jKSxPci53cml0ZV9zaGlmdCgyLERuLmUuciksT3J9KE5yKSk7Zm9yKHZhciBObz1Oci5zLnI7Tm88PU5yLmUucjsrK05vKWZvcih2YXIgWWE9em8oTm8pLHVvPU5yLnMuYzt1bzw9TnIuZS5jOysr''@;'; put 'put ''dW8pe05vPT09TnIucy5yJiYoYmlbdW9dPW1zKHVvKSk7dmFyIGRhPWppPyhEbltOb118fFtdKVt1b106RG5bYmlbdW9dK1lhXTtkYSYmInoiIT1kYS50JiYoIm4iPT1kYS50PygwfGRhLnYpPT1kYS52JiZkYS52Pj0tMzI3NjgmJmRhLnY8PTMyNzY3P3ppKE1uLDEzLG50KE5vLHVvLGRhLnYp''@;'; put 'put ''KTp6aShNbiwxNCxRZShObyx1byxkYS52KSk6emkoTW4sMTUsQmUoTm8sdW8senQoZGEpLnNsaWNlKDAsMjM5KSkpKX1yZXR1cm4gemkoTW4sMSksTW4uZW5kKCl9LGJvb2tfdG9fd2szOmZ1bmN0aW9uIFAoRG4sT3Ipe3ZhciBfcj1Pcnx8e307aWYoK19yLmNvZGVwYWdlPj0wJiZIKCtfci5j''@;'; put 'put ''b2RlcGFnZSksInN0cmluZyI9PV9yLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgV0szIHRvIEpTIHN0cmluZyIpO3ZhciBNbj1NYygpO3ppKE1uLDAsZnVuY3Rpb24gc2UoRG4pe3ZhciBPcj1GcigyNik7T3Iud3JpdGVfc2hpZnQoMiw0MDk2KSxPci53cml0ZV9zaGlmdCgy''@;'; put 'put ''LDQpLE9yLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBfcj0wLE1uPTAsTnI9MCxqaT0wO2ppPERuLlNoZWV0TmFtZXMubGVuZ3RoOysramkpe3ZhciBObz1Ebi5TaGVldHNbRG4uU2hlZXROYW1lc1tqaV1dO2lmKE5vJiZOb1siIXJlZiJdKXsrK05yO3ZhciBZYT16YShOb1siIXJlZiJdKTtf''@;'; put 'put ''cjxZYS5lLnImJihfcj1ZYS5lLnIpLE1uPFlhLmUuYyYmKE1uPVlhLmUuYyl9fXJldHVybiBPci53cml0ZV9zaGlmdCgyLF9yKSxPci53cml0ZV9zaGlmdCgxLE5yKSxPci53cml0ZV9zaGlmdCgxLE1uKSxPci53cml0ZV9zaGlmdCgyLDApLE9yLndyaXRlX3NoaWZ0KDIsMCksT3Iud3JpdGVf''@;'; put 'put ''c2hpZnQoMSwxKSxPci53cml0ZV9zaGlmdCgxLDIpLE9yLndyaXRlX3NoaWZ0KDQsMCksT3Iud3JpdGVfc2hpZnQoNCwwKSxPcn0oRG4pKTtmb3IodmFyIE5yPTAsamk9MDtOcjxEbi5TaGVldE5hbWVzLmxlbmd0aDsrK05yKShEbi5TaGVldHNbRG4uU2hlZXROYW1lc1tOcl1dfHx7fSlbIiFy''@;'; put 'put ''ZWYiXSYmemkoTW4sMjcsbW8oRG4uU2hlZXROYW1lc1tOcl0samkrKykpO3ZhciBiaT0wO2ZvcihOcj0wO05yPERuLlNoZWV0TmFtZXMubGVuZ3RoOysrTnIpe3ZhciBObz1Ebi5TaGVldHNbRG4uU2hlZXROYW1lc1tOcl1dO2lmKE5vJiZOb1siIXJlZiJdKXtmb3IodmFyIFlhPXl0KE5vWyIh''@;'; put 'put ''cmVmIl0pLHVvPUFycmF5LmlzQXJyYXkoTm8pLE1zPVtdLGRhPVlhLnMucjtkYTw9WWEuZS5yOysrZGEpZm9yKHZhciAkYT16byhkYSksU2E9WWEucy5jO1NhPD1ZYS5lLmM7KytTYSl7ZGE9PT1ZYS5zLnImJihNc1tTYV09bXMoU2EpKTt2YXIgUGM9dW8/KE5vW2RhXXx8W10pW1NhXTpOb1tN''@;'; put 'put ''c1tTYV0rJGFdO1BjJiYieiIhPVBjLnQmJigibiI9PVBjLnQ/emkoTW4sMjMsc3IoZGEsU2EsYmksUGMudikpOnppKE1uLDIyLGFyKGRhLFNhLGJpLHp0KFBjKS5zbGljZSgwLDIzOSkpKSl9KytiaX19cmV0dXJuIHppKE1uLDEpLE1uLmVuZCgpfSx0b193b3JrYm9vazpmdW5jdGlvbiBfKERu''@;'; put 'put ''LE9yKXtzd2l0Y2goT3IudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBtKGIoQ2UuZGVjb2RlKERuKSksT3IpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gbShiKERuKSxPcik7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOnJldHVybiBtKERuLE9yKX10aHJvdyJVbnN1cHBvcnRlZCB0eXBlICIrT3Iu''@;'; put 'put ''dHlwZX19fSgpLG15PWZ1bmN0aW9uKCl7dmFyIGQ9TGMoInQiKSxfPUxjKCJyUHIiKTtmdW5jdGlvbiBtKFEpe3ZhciBzZT1RLm1hdGNoKGQpO2lmKCFzZSlyZXR1cm57dDoicyIsdjoiIn07dmFyIG9lPXt0OiJzIix2OkNpKHNlWzFdKX0sZGU9US5tYXRjaChfKTtyZXR1cm4gZGUmJihvZS5z''@;'; put 'put ''PWZ1bmN0aW9uIFJYKGQpe3ZhciBfPXt9LG09ZC5tYXRjaChCbiksVD0wLFA9ITE7aWYobSlmb3IoO1QhPW0ubGVuZ3RoOysrVCl7dmFyIFE9WHIobVtUXSk7c3dpdGNoKFFbMF0ucmVwbGFjZSgvXHcqOi9nLCIiKSl7Y2FzZSI8Y29uZGVuc2UiOmNhc2UiPGV4dGVuZCI6YnJlYWs7Y2FzZSI8''@;'; put 'put ''c2hhZG93IjppZighUS52YWwpYnJlYWs7Y2FzZSI8c2hhZG93PiI6Y2FzZSI8c2hhZG93Lz4iOl8uc2hhZG93PTE7YnJlYWs7Y2FzZSI8L3NoYWRvdz4iOmJyZWFrO2Nhc2UiPGNoYXJzZXQiOmlmKCIxIj09US52YWwpYnJlYWs7Xy5jcD1SW3BhcnNlSW50KFEudmFsLDEwKV07YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8b3V0bGluZSI6aWYoIVEudmFsKWJyZWFrO2Nhc2UiPG91dGxpbmU+IjpjYXNlIjxvdXRsaW5lLz4iOl8ub3V0bGluZT0xO2JyZWFrO2Nhc2UiPC9vdXRsaW5lPiI6YnJlYWs7Y2FzZSI8ckZvbnQiOl8ubmFtZT1RLnZhbDticmVhaztjYXNlIjxzeiI6Xy5zej1RLnZhbDticmVhaztjYXNl''@;'; put 'put ''IjxzdHJpa2UiOmlmKCFRLnZhbClicmVhaztjYXNlIjxzdHJpa2U+IjpjYXNlIjxzdHJpa2UvPiI6Xy5zdHJpa2U9MTticmVhaztjYXNlIjwvc3RyaWtlPiI6YnJlYWs7Y2FzZSI8dSI6aWYoIVEudmFsKWJyZWFrO3N3aXRjaChRLnZhbCl7Y2FzZSJkb3VibGUiOl8udW5kZXJsaW5lPTI7YnJl''@;'; put 'put ''YWs7Y2FzZSJzaW5nbGVBY2NvdW50aW5nIjpfLnVuZGVybGluZT0zMzticmVhaztjYXNlImRvdWJsZUFjY291bnRpbmciOl8udW5kZXJsaW5lPTM0fWNhc2UiPHU+IjpjYXNlIjx1Lz4iOl8udW5kZXJsaW5lfHwoXy51bmRlcmxpbmU9MSk7YnJlYWs7Y2FzZSI8L3U+IjpicmVhaztjYXNlIjxi''@;'; put 'put ''IjppZigiMCI9PVEudmFsKWJyZWFrO2Nhc2UiPGI+IjpjYXNlIjxiLz4iOl8uYm9sZD0xO2JyZWFrO2Nhc2UiPC9iPiI6YnJlYWs7Y2FzZSI8aSI6aWYoIjAiPT1RLnZhbClicmVhaztjYXNlIjxpPiI6Y2FzZSI8aS8+IjpfLml0YWxpYz0xO2JyZWFrO2Nhc2UiPC9pPiI6YnJlYWs7Y2FzZSI8''@;'; put 'put ''Y29sb3IiOlEucmdiJiYoXy5jb2xvcj17cmdiOjg9PVEucmdiLmxlbmd0aD9RLnJnYi5zbGljZSgyLDgpOigiMDAwMDAwIitRLnJnYikuc2xpY2UoLTYpfSk7YnJlYWs7Y2FzZSI8ZmFtaWx5IjpfLmZhbWlseT1RLnZhbDticmVhaztjYXNlIjx2ZXJ0QWxpZ24iOiJub25lIiE9KFEudmFsfHwi''@;'; put 'put ''bm9uZSIpJiYoXy52YWxpZ249US52YWwucmVwbGFjZSgic2NyaXB0IiwiIikpO2JyZWFrO2Nhc2UiPHNjaGVtZSI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjpQPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpQPSExO2JyZWFrO2Rl''@;'; put 'put ''ZmF1bHQ6aWYoNDchPT1RWzBdLmNoYXJDb2RlQXQoMSkmJiFQKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHJpY2ggZm9ybWF0ICIrUVswXSl9fXJldHVybiBffShkZVsxXSkpLG9lfXZhciBUPS88KD86XHcrOik/cj4vZyxQPS88XC8oPzpcdys6KT9yPi87cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KHNlKXtyZXR1cm4gc2UucmVwbGFjZShULCIiKS5zcGxpdChQKS5tYXAobSkuZmlsdGVyKGZ1bmN0aW9uKG9lKXtyZXR1cm4gb2Uudn0pfX0oKSxsSD17MToic2luZ2xlIiwyOiJkb3VibGUiLDMzOiJzaW5nbGUtYWNjb3VudGluZyIsMzQ6ImRvdWJsZS1hY2NvdW50aW5nIn0sdVM9ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgXz0vKFxyXG58XG4pL2c7ZnVuY3Rpb24gVChQKXt2YXIgUT1bW10sUC52LFtdXTtyZXR1cm4gUC52PyhQLnMmJmZ1bmN0aW9uIG0oUCxRLHNlKXt2YXIgb2U9W107UC51bmRlcmxpbmUmJm9lLnB1c2goInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyIpLFAudW5kZXJsaW5l''@;'; put 'put ''PjEmJm9lLnB1c2goInRleHQtdW5kZXJsaW5lLXN0eWxlOiIrbEhbUC51bmRlcmxpbmVdKyI7IiksUC5zeiYmb2UucHVzaCgiZm9udC1zaXplOiIrUC5zeisicHQ7IiksUC5vdXRsaW5lJiZvZS5wdXNoKCJ0ZXh0LWVmZmVjdDogb3V0bGluZTsiKSxQLnNoYWRvdyYmb2UucHVzaCgidGV4dC1z''@;'; put 'put ''aGFkb3c6IGF1dG87IiksUC5jb2xvciYmUC5jb2xvci5yZ2ImJm9lLnB1c2goImNvbG9yOiAjIitUMihQLmNvbG9yLnJnYikrIjsiKSxRLnB1c2goJzxzcGFuIHN0eWxlPSInK29lLmpvaW4oIiIpKyciPicpLFAuYm9sZCYmKFEucHVzaCgiPGI+Iiksc2UucHVzaCgiPC9iPiIpKSxQLml0YWxp''@;'; put 'put ''YyYmKFEucHVzaCgiPGk+Iiksc2UucHVzaCgiPC9pPiIpKSxQLnN0cmlrZSYmKFEucHVzaCgiPHM+Iiksc2UucHVzaCgiPC9zPiIpKTt2YXIgZGU9UC52YWxpZ258fCIiOyJzdXBlcnNjcmlwdCI9PWRlfHwic3VwZXIiPT1kZT9kZT0ic3VwIjoic3Vic2NyaXB0Ij09ZGUmJihkZT0ic3ViIiks''@;'; put 'put ''IiIhPWRlJiYoUS5wdXNoKCI8IitkZSsiPiIpLHNlLnB1c2goIjwvIitkZSsiPiIpKSxzZS5wdXNoKCI8L3NwYW4+Iil9KFAucyxRWzBdLFFbMl0pLFFbMF0uam9pbigiIikrUVsxXS5yZXBsYWNlKF8sIjxici8+IikrUVsyXS5qb2luKCIiKSk6IiJ9cmV0dXJuIGZ1bmN0aW9uKFEpe3JldHVy''@;'; put 'put ''biBRLm1hcChUKS5qb2luKCIiKX19KCk7ZnVuY3Rpb24gTTkoZCl7cmV0dXJuIGQubWFwKGZ1bmN0aW9uKG0pe3JldHVybiBmdW5jdGlvbiBDcihkKXt2YXIgXz0iIixtPVtdO3JldHVybiBkLnMmJihkLnMuYm9sZCYmbS5wdXNoKCI8Yi8+IiksZC5zLml0YWxpYyYmbS5wdXNoKCI8aS8+Iiks''@;'; put 'put ''ZC5zLnN0cmlrZSYmbS5wdXNoKCI8c3RyaWtlLz4iKSxkLnMudW5kZXJsaW5lJiZtLnB1c2goJzx1IHZhbD0iJysobTVbZC5zLnVuZGVybGluZV18fCJzaW5nbGUiKSsnIi8+JyksZC5zLmNvbG9yJiZtLnB1c2goUGcoZC5zLmNvbG9yKSksZC5zLnN6JiZtLnB1c2goJzxzeiB2YWw9IicrZC5z''@;'; put 'put ''LnN6KyciLz4nKSxkLnMubmFtZSYmbS5wdXNoKCc8ckZvbnQgdmFsPSInK2Qucy5uYW1lKyciLz4nKSwoInN1cGVyIj09ZC5zLnZhbGlnbnx8InN1YiI9PWQucy52YWxpZ24pJiZtLnB1c2goJzx2ZXJ0QWxpZ24gdmFsPSInK2Qucy52YWxpZ24rJ3NjcmlwdCIvPicpKSxtLmxlbmd0aCYmKF8r''@;'; put 'put ''PSI8clByPiIrbS5qb2luKCIiKSsiPC9yUHI+IiksIjxyPiIrKF8rPVZyKCJ0IixCaShkLnYpLG51bGwpKSsiPC9yPiJ9KG0pfSkuam9pbigiIil9dmFyIGFkPS88KD86XHcrOik/dFtePl0qPihbXjxdKik8XC8oPzpcdys6KT90Pi9nLHZ1PS88KD86XHcrOik/clxiW14+XSo+LyxJWD0vPCg/''@;'; put 'put ''Olx3KzopP3JQaC4qPz4oW1xzXFNdKj8pPFwvKD86XHcrOik/clBoPi9nO2Z1bmN0aW9uIEVzKGQsXyl7dmFyIG09IV98fF8uY2VsbEhUTUwsVD17fTtyZXR1cm4gZD8oZC5tYXRjaCgvXlxzKjwoPzpcdys6KT90W14+XSo+Lyk/KFQudD1DaShXbihkLnNsaWNlKGQuaW5kZXhPZigiPiIpKzEp''@;'; put 'put ''LnNwbGl0KC88XC8oPzpcdys6KT90Pi8pWzBdfHwiIikpLFQucj1XbihkKSxtJiYoVC5oPSRpKFQudCkpKTpkLm1hdGNoKHZ1KSYmKFQucj1XbihkKSxULnQ9Q2koV24oKGQucmVwbGFjZShJWCwiIikubWF0Y2goYWQpfHxbXSkuam9pbigiIikucmVwbGFjZShCbiwiIikpKSxULlI9bXkoVC5y''@;'; put 'put ''KSxtJiYoVC5oPXVTKFQuUikpKSxUKTp7dDoiIn19dmFyIERYPS88KD86XHcrOik/c3N0KFtePl0qKT4oW1xzXFNdKik8XC8oPzpcdys6KT9zc3Q+LyxMWD0vPCg/Olx3KzopPyg/OnNpfHNzdEl0ZW0pPi9nLGk1ZT0vPFwvKD86XHcrOik/KD86c2l8c3N0SXRlbSk+Lzt1YS5TU1Q9Imh0dHA6''@;'; put 'put ''Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvc2hhcmVkU3RyaW5ncyI7dmFyIERnPS9eXHN8XHMkfFtcdFxuXHJdLztmdW5jdGlvbiBjSChkLF8pe2lmKCFfLmJvb2tTU1QpcmV0dXJuIiI7dmFyIG09W3BvXTttW20ubGVuZ3Ro''@;'; put 'put ''XT1Wcigic3N0IixudWxsLHt4bWxuczpVYS5tYWluWzBdLGNvdW50OmQuQ291bnQsdW5pcXVlQ291bnQ6ZC5VbmlxdWV9KTtmb3IodmFyIFQ9MDtUIT1kLmxlbmd0aDsrK1QpaWYobnVsbCE9ZFtUXSl7dmFyIFA9ZFtUXSxRPSI8c2k+IjtQLnI/USs9UC5yOihRKz0iPHQiLFAudHx8KFAudD0i''@;'; put 'put ''IiksUC50Lm1hdGNoKERnKSYmKFErPScgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInKSxRKz0iPiIrQmkoUC50KSsiPC90PiIpLG1bbS5sZW5ndGhdPVErPSI8L3NpPiJ9cmV0dXJuIG0ubGVuZ3RoPjImJihtW20ubGVuZ3RoXT0iPC9zc3Q+IixtWzFdPW1bMV0ucmVwbGFjZSgiLz4iLCI+IikpLG0u''@;'; put 'put ''am9pbigiIil9dmFyIFQ5PWZ1bmN0aW9uIGRsKGQsXyxtKXt2YXIgVD0xMys0KmQudC5sZW5ndGgsUD1kLlImJmQuUi5sZW5ndGh8fGQucjtkLnImJihkLlI9bXkoZC5yKSksUCYmKFQrPTQrNCpkLlIubGVuZ3RoKTt2YXIgUT0hMTtpZihudWxsPT1tJiYoUT0hMCxtPUZyKFQpKSxtLndyaXRl''@;'; put 'put ''X3NoaWZ0KDEsUD8xOjApLGtpKGQudCxtKSxQKXttLndyaXRlX3NoaWZ0KDQsZC5SLmxlbmd0aCk7Zm9yKHZhciBzZT0wLG9lPTA7b2U8ZC5SLmxlbmd0aDsrK29lKXt2YXIgZGU9ZC5SW29lXTttLndyaXRlX3NoaWZ0KDIsc2UpLHNlKz0oZGUudnx8IiIpLmxlbmd0aDt2YXIgTGU9ZGUucz9B''@;'; put 'put ''MihfLmNlbGxYZnMsXy5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOmRlLnN9LF8pOjA7bS53cml0ZV9zaGlmdCgyLF8uY2VsbFhmc1tMZV0uZm9udElkKX19cmV0dXJuIFE/bS5zbGljZSgwLG0ubCk6bX07ZnVuY3Rpb24gZFMoZCxfKXt2YXIgbT1NYygpO0lpKG0sIkJydEJlZ2luU3N0Iixm''@;'; put 'put ''dW5jdGlvbiBQQShkLF8pe3JldHVybiBffHwoXz1Gcig4KSksXy53cml0ZV9zaGlmdCg0LGQuQ291bnQpLF8ud3JpdGVfc2hpZnQoNCxkLlVuaXF1ZSksX30oZCkpO2Zvcih2YXIgVD0wO1Q8ZC5sZW5ndGg7KytUKUlpKG0sIkJydFNTVEl0ZW0iLFQ5KGRbVF0sXykpO3JldHVybiBJaShtLCJC''@;'; put 'put ''cnRFbmRTc3QiKSxtLmVuZCgpfWZ1bmN0aW9uIHVIKGQpe2lmKHR5cGVvZiBjcHRhYmxlPCJ1IilyZXR1cm4gY3B0YWJsZS51dGlscy5lbmNvZGUodyxkKTtmb3IodmFyIF89W10sbT1kLnNwbGl0KCIiKSxUPTA7VDxtLmxlbmd0aDsrK1QpX1tUXT1tW1RdLmNoYXJDb2RlQXQoMCk7cmV0dXJu''@;'; put 'put ''IF99ZnVuY3Rpb24gTGcoZCxfKXt2YXIgbT17fTtyZXR1cm4gbS5NYWpvcj1kLnJlYWRfc2hpZnQoMiksbS5NaW5vcj1kLnJlYWRfc2hpZnQoMiksXz49NCYmKGQubCs9Xy00KSxtfWZ1bmN0aW9uIHU1KGQpe2Zvcih2YXIgXz1kLnJlYWRfc2hpZnQoNCksbT1kLmwrXy00LFQ9e30sUD1kLnJl''@;'; put 'put ''YWRfc2hpZnQoNCksUT1bXTtQLS0gPjA7KVEucHVzaCh7dDpkLnJlYWRfc2hpZnQoNCksdjpkLnJlYWRfc2hpZnQoMCwibHBwNCIpfSk7aWYoVC5uYW1lPWQucmVhZF9zaGlmdCgwLCJscHA0IiksVC5jb21wcz1RLGQubCE9bSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhU3BhY2VNYXBFbnRy''@;'; put 'put ''eTogIitkLmwrIiAhPSAiK20pO3JldHVybiBUfWZ1bmN0aW9uIGRIKGQsXyl7dmFyIG09ZC5sK18sVD17fTtULkZsYWdzPTYzJmQucmVhZF9zaGlmdCg0KSxkLmwrPTQsVC5BbGdJRD1kLnJlYWRfc2hpZnQoNCk7dmFyIFA9ITE7c3dpdGNoKFQuQWxnSUQpe2Nhc2UgMjYxMjY6Y2FzZSAyNjEy''@;'; put 'put ''NzpjYXNlIDI2MTI4OlA9MzY9PVQuRmxhZ3M7YnJlYWs7Y2FzZSAyNjYyNTpQPTQ9PSg1MiZULkZsYWdzKTticmVhaztjYXNlIDA6UD0xNj09VC5GbGFnc3x8ND09VC5GbGFnc3x8MzY9PVQuRmxhZ3M7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnJlY29nbml6ZWQgZW5jcnlwdGlvbiBhbGdvcml0''@;'; put 'put ''aG06ICIrVC5BbGdJRH1pZighUCl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb24gRmxhZ3MvQWxnSUQgbWlzbWF0Y2giKTtyZXR1cm4gVC5BbGdJREhhc2g9ZC5yZWFkX3NoaWZ0KDQpLFQuS2V5U2l6ZT1kLnJlYWRfc2hpZnQoNCksVC5Qcm92aWRlclR5cGU9ZC5yZWFkX3NoaWZ0KDQpLGQu''@;'; put 'put ''bCs9OCxULkNTUE5hbWU9ZC5yZWFkX3NoaWZ0KG0tZC5sPj4xLCJ1dGYxNmxlIiksZC5sPW0sVH1mdW5jdGlvbiBGWChkLF8pe3ZhciBtPXt9LFQ9ZC5sK187cmV0dXJuIGQubCs9NCxtLlNhbHQ9ZC5zbGljZShkLmwsZC5sKzE2KSxkLmwrPTE2LG0uVmVyaWZpZXI9ZC5zbGljZShkLmwsZC5s''@;'; put 'put ''KzE2KSxkLmwrPTE2LGQucmVhZF9zaGlmdCg0KSxtLlZlcmlmaWVySGFzaD1kLnNsaWNlKGQubCxUKSxkLmw9VCxtfWZ1bmN0aW9uIHg5KGQpe2lmKDM2IT0oNjMmZC5yZWFkX3NoaWZ0KDQpKSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb25JbmZvIG1pc21hdGNoIik7dmFyIG09ZC5yZWFk''@;'; put 'put ''X3NoaWZ0KDQpO3JldHVybnt0OiJTdGQiLGg6ZEgoZCxtKSx2OkZYKGQsZC5sZW5ndGgtZC5sKX19ZnVuY3Rpb24gbDVlKCl7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZDogRUNNQS0zNzYgRXh0ZW5zaWJsZSIpfWZ1bmN0aW9uIGZTKGQpe3ZhciBfPVsic2Fs''@;'; put 'put ''dFNpemUiLCJibG9ja1NpemUiLCJrZXlCaXRzIiwiaGFzaFNpemUiLCJjaXBoZXJBbGdvcml0aG0iLCJjaXBoZXJDaGFpbmluZyIsImhhc2hBbGdvcml0aG0iLCJzYWx0VmFsdWUiXTtkLmwrPTQ7dmFyIG09ZC5yZWFkX3NoaWZ0KGQubGVuZ3RoLWQubCwidXRmOCIpLFQ9e307cmV0dXJuIG0u''@;'; put 'put ''cmVwbGFjZShCbixmdW5jdGlvbihRKXt2YXIgc2U9WHIoUSk7c3dpdGNoKGVhKHNlWzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8ZW5jcnlwdGlvbiI6Y2FzZSI8L2VuY3J5cHRpb24+IjpjYXNlIjwva2V5RW5jcnlwdG9ycz4iOmNhc2UiPC9rZXlFbmNyeXB0b3I+IjpicmVhaztjYXNlIjxrZXlE''@;'; put 'put ''YXRhIjpfLmZvckVhY2goZnVuY3Rpb24ob2Upe1Rbb2VdPXNlW29lXX0pO2JyZWFrO2Nhc2UiPGRhdGFJbnRlZ3JpdHkiOlQuZW5jcnlwdGVkSG1hY0tleT1zZS5lbmNyeXB0ZWRIbWFjS2V5LFQuZW5jcnlwdGVkSG1hY1ZhbHVlPXNlLmVuY3J5cHRlZEhtYWNWYWx1ZTticmVhaztjYXNlIjxr''@;'; put 'put ''ZXlFbmNyeXB0b3JzPiI6Y2FzZSI8a2V5RW5jcnlwdG9ycyI6VC5lbmNzPVtdO2JyZWFrO2Nhc2UiPGtleUVuY3J5cHRvciI6VC51cmk9c2UudXJpO2JyZWFrO2Nhc2UiPGVuY3J5cHRlZEtleSI6VC5lbmNzLnB1c2goc2UpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgc2VbMF19fSksVH1mdW5jdGlv''@;'; put 'put ''biBWQShkKXt2YXIgbSxRLF89MCxUPXVIKGQpLFA9VC5sZW5ndGgrMTtmb3IoKG09WChQKSlbMF09VC5sZW5ndGgsUT0xO1EhPVA7KytRKW1bUV09VFtRLTFdO2ZvcihRPVAtMTtRPj0wOy0tUSlfPSgoMTYzODQmXz8xOjApfF88PDEmMzI3NjcpXm1bUV07cmV0dXJuIDUyODExXl99dmFyIGZI''@;'; put 'put ''PWZ1bmN0aW9uKCl7dmFyIGQ9WzE4NywyNTUsMjU1LDE4NiwyNTUsMjU1LDE4NSwxMjgsMCwxOTAsMTUsMCwxOTEsMTUsMF0sXz1bNTc4NDAsNzQzOSw1MjM4MCwzMzk4NCw0MzY0LDM2MDAsNjE5MDIsMTI2MDYsNjI1OCw1NzY1Nyw1NDI4NywzNDA0MSwxMDI1Miw0MzM3MCwyMDE2M10sbT1b''@;'; put 'put ''NDQ3OTYsMTk5MjksMzk4NTgsMTAwNTMsMjAxMDYsNDAyMTIsMTA3NjEsMzE1ODUsNjMxNzAsNjQ5MzMsNjAyNjcsNTA5MzUsNDAzOTksMTExOTksMTc3NjMsMzU1MjYsMTQ1MywyOTA2LDU4MTIsMTE2MjQsMjMyNDgsODg1LDE3NzAsMzU0MCw3MDgwLDE0MTYwLDI4MzIwLDU2NjQwLDU1MzY5''@;'; put 'put ''LDQxMTM5LDIwODA3LDQxNjE0LDIxODIxLDQzNjQyLDE3NjIxLDI4NDg1LDU2OTcwLDQ0MzQxLDE5MDE5LDM4MDM4LDE0NjA1LDI5MjEwLDYwMTk1LDUwNzkxLDQwMTc1LDEwNzUxLDIxNTAyLDQzMDA0LDI0NTM3LDE4Mzg3LDM2Nzc0LDM5NDksNzg5OCwxNTc5NiwzMTU5Miw2MzE4NCw0NzIw''@;'; put 'put ''MSwyNDgwMyw0OTYwNiwzNzgwNSwxNDIwMywyODQwNiw1NjgxMiwxNzgyNCwzNTY0OCwxNjk3LDMzOTQsNjc4OCwxMzU3NiwyNzE1Miw0MzYwMSwxNzUzOSwzNTA3OCw1NTcsMTExNCwyMjI4LDQ0NTYsMzAzODgsNjA3NzYsNTE5NTMsMzQyNDMsNzA3OSwxNDE1OCwyODMxNiwxNDEyOCwyODI1''@;'; put 'put ''Niw1NjUxMiw0MzQyNSwxNzI1MSwzNDUwMiw3NTk3LDEzMTA1LDI2MjEwLDUyNDIwLDM1MjQxLDg4MywxNzY2LDM1MzIsNDEyOSw4MjU4LDE2NTE2LDMzMDMyLDQ2NTcsOTMxNCwxODYyOF0sUD1mdW5jdGlvbihzZSxvZSl7cmV0dXJuIGZ1bmN0aW9uKHNlKXtyZXR1cm4gMjU1JihzZT4+MXxz''@;'; put 'put ''ZTw8Nyl9KHNlXm9lKX07cmV0dXJuIGZ1bmN0aW9uKG9lKXtmb3IodmFyIGRlPXVIKG9lKSxMZT1mdW5jdGlvbihzZSl7Zm9yKHZhciBvZT1fW3NlLmxlbmd0aC0xXSxkZT0xMDQsTGU9c2UubGVuZ3RoLTE7TGU+PTA7LS1MZSlmb3IodmFyIE5lPXNlW0xlXSxCZT0wOzchPUJlOysrQmUpNjQm''@;'; put 'put ''TmUmJihvZV49bVtkZV0pLE5lKj0yLC0tZGU7cmV0dXJuIG9lfShkZSksTmU9ZGUubGVuZ3RoLEJlPVgoMTYpLFplPTA7MTYhPVplOysrWmUpQmVbWmVdPTA7dmFyIFFlO2ZvcighKDEmfk5lKSYmKEJlW05lXT1QKGRbMF0sTGU+PjgpLEJlWy0tTmVdPVAoZGVbZGUubGVuZ3RoLTFdLDI1NSZM''@;'; put 'put ''ZSkpO05lPjA7KUJlWy0tTmVdPVAoZGVbTmVdLExlPj44KSxCZVstLU5lXT1QKGRlW05lXSwyNTUmTGUpO2ZvcihOZT0xNSxRZT0xNS1kZS5sZW5ndGg7UWU+MDspQmVbTmVdPVAoZFtRZV0sTGU+PjgpLC0tUWUsQmVbLS1OZV09UChkZVtOZV0sMjU1JkxlKSwtLU5lLC0tUWU7cmV0dXJuIEJl''@;'; put 'put ''fX0oKTt2YXIgZDU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBkKFAsUSl7c3dpdGNoKFEudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBfKENlLmRlY29kZShQKSxRKTtjYXNlImJpbmFyeSI6cmV0dXJuIF8oUCxRKTtjYXNlImJ1ZmZlciI6cmV0dXJuIF8oUC50b1N0cmluZygiYmluYXJ5IiksUSk7''@;'; put 'put ''Y2FzZSJhcnJheSI6cmV0dXJuIF8oT24oUCksUSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1EudHlwZSl9ZnVuY3Rpb24gXyhQLFEpe3ZhciBvZT0oUXx8e30pLmRlbnNlP1tdOnt9O2lmKCFQLm1hdGNoKC9cXHRyb3dkLykpdGhyb3cgbmV3IEVycm9yKCJSVEYgbWlz''@;'; put 'put ''c2luZyB0YWJsZSIpO3JldHVybiBvZVsiIXJlZiJdPWh0KHtzOntjOjAscjowfSxlOntjOjAscjowfX0pLG9lfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBtKFAsUSl7cmV0dXJuIG1uKGQoUCxRKSxRKX0sdG9fc2hlZXQ6ZCxmcm9tX3NoZWV0OmZ1bmN0aW9uIFQoUCl7Zm9yKHZhciBv''@;'; put 'put ''ZSxRPVsie1xccnRmMVxcYW5zaSJdLHNlPXl0KFBbIiFyZWYiXSksZGU9QXJyYXkuaXNBcnJheShQKSxMZT1zZS5zLnI7TGU8PXNlLmUucjsrK0xlKXtRLnB1c2goIlxcdHJvd2RcXHRyYXV0b2ZpdDEiKTtmb3IodmFyIE5lPXNlLnMuYztOZTw9c2UuZS5jOysrTmUpUS5wdXNoKCJcXGNlbGx4''@;'; put 'put ''IisoTmUrMSkpO2ZvcihRLnB1c2goIlxccGFyZFxcaW50YmwiKSxOZT1zZS5zLmM7TmU8PXNlLmUuYzsrK05lKXt2YXIgQmU9cWkoe3I6TGUsYzpOZX0pOyhvZT1kZT8oUFtMZV18fFtdKVtOZV06UFtCZV0pJiYobnVsbCE9b2Uudnx8b2UuZiYmIW9lLkYpJiYoUS5wdXNoKCIgIisob2Uud3x8''@;'; put 'put ''KHp0KG9lKSxvZS53KSkpLFEucHVzaCgiXFxjZWxsIikpfVEucHVzaCgiXFxwYXJkXFxpbnRibFxccm93Iil9cmV0dXJuIFEuam9pbigiIikrIn0ifX19KCk7ZnVuY3Rpb24gXzgoZCl7dmFyIF89ZC5zbGljZSgiIyI9PT1kWzBdPzE6MCkuc2xpY2UoMCw2KTtyZXR1cm5bcGFyc2VJbnQoXy5z''@;'; put 'put ''bGljZSgwLDIpLDE2KSxwYXJzZUludChfLnNsaWNlKDIsNCksMTYpLHBhcnNlSW50KF8uc2xpY2UoNCw2KSwxNildfWZ1bmN0aW9uIGIzKGQpe2Zvcih2YXIgXz0wLG09MTszIT1fOysrXyltPTI1NiptKyhkW19dPjI1NT8yNTU6ZFtfXTwwPzA6ZFtfXSk7cmV0dXJuIG0udG9TdHJpbmcoMTYp''@;'; put 'put ''LnRvVXBwZXJDYXNlKCkuc2xpY2UoMSl9ZnVuY3Rpb24gT2coZCxfKXtpZihudWxsPT1kKXJldHVybiBudWxsIT1fO2lmKG51bGw9PV8pcmV0dXJuITA7aWYoMT09ZC5hdXRvJiYxPT1fLmF1dG8pcmV0dXJuITE7aWYoISFkLmF1dG8hPSEhXy5hdXRvfHxudWxsPT1kLnRoZW1lIT0obnVsbD09''@;'; put 'put ''Xy50aGVtZSkpcmV0dXJuITA7aWYobnVsbCE9ZC50aGVtZSlyZXR1cm4gZC50aGVtZSE9Xy50aGVtZXx8ZC50aW50IT1fLnRpbnQ7aWYobnVsbD09ZC5yZ2ImJm51bGw9PV8ucmdiKXJldHVybiExO3ZhciBtPWQucmdiOyJudW1iZXIiPT10eXBlb2YgbSYmKG09bS50b1N0cmluZygxNikpLG09''@;'; put 'put ''bS5zbGljZSgtNik7dmFyIFQ9Xy5yZ2I7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBUJiYoVD1ULnRvU3RyaW5nKDE2KSksVD1ULnNsaWNlKC02KSxtLnRvTG93ZXJDYXNlKCkhPVQudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiB1NWUoZCxfKXtyZXR1cm4gbnVsbD09ZD9udWxsIT1fOm51bGw9PV8/''@;'; put 'put ''bnVsbCE9ZDpkLnN0eWxlIT1fLnN0eWxlfHxPZyhkLmNvbG9yLF8uY29sb3IpfWZ1bmN0aW9uIGg1KGQsXyl7aWYoMD09PV8pcmV0dXJuIGQ7dmFyIG09ZnVuY3Rpb24gVVgoZCl7dmFyIF89ZFswXS8yNTUsbT1kWzFdLzI1NSxUPWRbMl0vMjU1LFA9TWF0aC5tYXgoXyxtLFQpLFE9TWF0aC5t''@;'; put 'put ''aW4oXyxtLFQpLHNlPVAtUTtpZigwPT09c2UpcmV0dXJuWzAsMCxfXTt2YXIgZGUsb2U9MCxMZT1QK1E7c3dpdGNoKGRlPXNlLyhMZT4xPzItTGU6TGUpLFApe2Nhc2UgXzpvZT0oKG0tVCkvc2UrNiklNjticmVhaztjYXNlIG06b2U9KFQtXykvc2UrMjticmVhaztjYXNlIFQ6b2U9KF8tbSkv''@;'; put 'put ''c2UrNH1yZXR1cm5bb2UvNixkZSxMZS8yXX0oXzgoZCkpO3JldHVybiBtWzJdPV88MD9tWzJdKigxK18pOjEtKDEtbVsyXSkqKDEtXyksYjMoZnVuY3Rpb24gelgoZCl7dmFyIGRlLG09ZFsxXSxUPWRbMl0sUD0yKm0qKFQ8LjU/VDoxLVQpLFE9VC1QLzIsc2U9W1EsUSxRXSxvZT02KmRbMF07''@;'; put 'put ''aWYoMCE9PW0pc3dpdGNoKDB8b2Upe2Nhc2UgMDpjYXNlIDY6ZGU9UCpvZSxzZVswXSs9UCxzZVsxXSs9ZGU7YnJlYWs7Y2FzZSAxOnNlWzBdKz1kZT1QKigyLW9lKSxzZVsxXSs9UDticmVhaztjYXNlIDI6ZGU9UCoob2UtMiksc2VbMV0rPVAsc2VbMl0rPWRlO2JyZWFrO2Nhc2UgMzpzZVsx''@;'; put 'put ''XSs9ZGU9UCooNC1vZSksc2VbMl0rPVA7YnJlYWs7Y2FzZSA0OmRlPVAqKG9lLTQpLHNlWzJdKz1QLHNlWzBdKz1kZTticmVhaztjYXNlIDU6c2VbMl0rPWRlPVAqKDYtb2UpLHNlWzBdKz1QfWZvcih2YXIgTGU9MDszIT1MZTsrK0xlKXNlW0xlXT1NYXRoLnJvdW5kKDI1NSpzZVtMZV0pO3Jl''@;'; put 'put ''dHVybiBzZX0obSkpfXZhciBzZD02O2Z1bmN0aW9uIGY1KGQpe3JldHVybiBNYXRoLmZsb29yKChkK01hdGgucm91bmQoMTI4L3NkKS8yNTYpKnNkKX1mdW5jdGlvbiB5OChkKXtyZXR1cm4gTWF0aC5mbG9vcigoZC01KS9zZCoxMDArLjUpLzEwMH1mdW5jdGlvbiBwUyhkKXtyZXR1cm4gTWF0''@;'; put 'put ''aC5yb3VuZCgoZCpzZCs1KS9zZCoyNTYpLzI1Nn1mdW5jdGlvbiBCMChkKXtkLmJlc3RGaXQmJmRlbGV0ZSBkLmJlc3RGaXQsZC53aWR0aD8oZC53cHg9ZjUoZC53aWR0aCksZC53Y2g9eTgoZC53cHgpLGQuTURXPXNkKTpkLndweD8oZC53Y2g9eTgoZC53cHgpLGQud2lkdGg9cFMoZC53Y2gp''@;'; put 'put ''LGQuTURXPXNkKToibnVtYmVyIj09dHlwZW9mIGQud2NoJiYoZC53aWR0aD1wUyhkLndjaCksZC53cHg9ZjUoZC53aWR0aCksZC5NRFc9c2QpLGQuY3VzdG9tV2lkdGgmJmRlbGV0ZSBkLmN1c3RvbVdpZHRofXZhciBwNT05NjtmdW5jdGlvbiBiOChkKXtyZXR1cm4gNzIqZC9wNX1mdW5jdGlv''@;'; put 'put ''biBOZyhkKXtyZXR1cm4gZCpwNS83Mn1mdW5jdGlvbiBnUyhkKXtwNT1kPXtvc3g6NzIsd2luOjk2LHdpbjEwMDo5Nix3aW4xMjU6MTIwLHdpbjE1MDoxNDR9W2RdfHxkfHw5NixnNT1icFtkXX1mdW5jdGlvbiBXQShkKXtkLmhweD9kLmhwdD1iOChkLmhweCk6ZC5ocHQmJihkLmhweD1OZyhk''@;'; put 'put ''LmhwdCkpfXZhciBtSD17Tm9uZToibm9uZSIsU29saWQ6InNvbGlkIixHcmF5NTA6Im1lZGl1bUdyYXkiLEdyYXk3NToiZGFya0dyYXkiLEdyYXkyNToibGlnaHRHcmF5IixIb3J6U3RyaXBlOiJkYXJrSG9yaXpvbnRhbCIsVmVydFN0cmlwZToiZGFya1ZlcnRpY2FsIixSZXZlcnNlRGlhZ1N0''@;'; put 'put ''cmlwZToiZGFya0Rvd24iLERpYWdTdHJpcGU6ImRhcmtVcCIsRGlhZ0Nyb3NzOiJkYXJrR3JpZCIsVGhpY2tEaWFnQ3Jvc3M6ImRhcmtUcmVsbGlzIixUaGluSG9yelN0cmlwZToibGlnaHRIb3Jpem9udGFsIixUaGluVmVydFN0cmlwZToibGlnaHRWZXJ0aWNhbCIsVGhpblJldmVyc2VEaWFn''@;'; put 'put ''U3RyaXBlOiJsaWdodERvd24iLFRoaW5Ib3J6Q3Jvc3M6ImxpZ2h0R3JpZCJ9LFdYPWNlKG1IKSxtUz17b3JhbmdlOjE2NzUzOTIwLGJsYWNrOjAsbmF2eToxMjgsYmx1ZToyNTUsZ3JlZW46MzI3NjgsdGVhbDozMjg5NixsaW1lOjY1MjgwLGFxdWE6NjU1MzUsc2lsdmVyOjEyNjMyMjU2LG1h''@;'; put 'put ''cm9vbjo4Mzg4NjA4LHB1cnBsZTo4Mzg4NzM2LG9saXZlOjg0MjEzNzYsZ3JheTo4NDIxNTA0LHJlZDoxNjcxMTY4MCxmdWNoc2lhOjE2NzExOTM1LHllbGxvdzoxNjc3Njk2MCx3aGl0ZToxNjc3NzIxNX07ZnVuY3Rpb24gVGYoZCxfKXtpZihkLnJlcGxhY2UoIiMiLCIiKS5tYXRjaCgvXlsw''@;'; put 'put ''LTlhLWZBLUZdezZ9JC8pKXJldHVybiBwYXJzZUludChkLnJlcGxhY2UoIiMiLCIiKSwxNik7aWYobVNbZF0pcmV0dXJuIG1TW2RdO3ZhciBtPWQubWF0Y2goL3JnYlwoXHMqKFxkKilccyosXHMqKFxkKilccyosXHMqKFxkKilccypcKS8pO2lmKG0pcmV0dXJuKCttWzFdPDwxNikrKCttWzJd''@;'; put 'put ''PDw4KSsgK21bM107aWYobT1kLm1hdGNoKC9yZ2JhXChccyooXGQqKVxzKixccyooXGQqKVxzKixccyooXGQqKVxzKihcZCopLykpcmV0dXJuIDAhPShtWzRdJiZtWzRdLmxlbmd0aD4wJiYrbVs0XXx8MCl8fCttWzFdPjB8fCttWzJdPjB8fCttWzNdPjA/KCttWzFdPDwxNikrKCttWzJdPDw4''@;'; put 'put ''KSsgK21bM106Xz8tMToxNjc3NzIxNTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gSFRNTCBjb2xvciAiK2QpfXZhciBicD17fTtmdW5jdGlvbiBHbShkKXtkPWR8fDk2O3ZhciBfPXtDYWxpYnJpOltdLEFyaWFsOltdLCJTcGFya2Fzc2UgUmciOltdLFx1NWI4Ylx1NGY1MzpbXSxcdTZlMzhc''@;'; put 'put ''dTMwYjRcdTMwYjdcdTMwYzNcdTMwYWY6W10sIkNlbnR1cnkgR290aGljIjpbXX07cmV0dXJuIF8uQ2FsaWJyaVsxMV09NyxfLkNhbGlicmlbMTJdPXs3Mjo2LDk2OjgsMTIwOjEwLDE0NDoxMn1bZF18fDgsXy5DYWxpYnJpWzEzXT0xMCxfLkNhbGlicmlbMTRdPTExLF8uQ2FsaWJyaVsxNl09''@;'; put 'put ''MTIsXy5DYWxpYnJpWzE4XT0xNCxfLkNhbGlicmlbMjBdPTE2LF8uXHU1YjhiXHU0ZjUzWzExXT04LF8uXHU2ZTM4XHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmWzExXT04LF9bIlNwYXJrYXNzZSBSZyJdWzExXT03LF8uQXJpYWxbMTBdPTcsX1siQ2VudHVyeSBHb3RoaWMiXVsxMl09OSxffWJw''@;'; put 'put ''WzcyXT1HbSg3MiksYnBbOTZdPUdtKDk2KSxicFsxMjBdPUdtKDEyMCksYnBbMTQ0XT1HbSgxNDQpO3ZhciBnNT1icFs5Nl07ZnVuY3Rpb24gWUEoZCl7cmV0dXJuKGc1W2QubmFtZXx8ZC5Gb250TmFtZV18fFtdKVtkLnN6fHxkLlNpemVdfWZ1bmN0aW9uICRtKGQpe2lmKGQpe3ZhciBfPVlB''@;'; put 'put ''KGQpO2lmKF8pcmV0dXJuIHNkPV99cmV0dXJuIHNkPTZ9ZnVuY3Rpb24gdkgoZCxfLG0pe3JldHVybiBiMyhmdW5jdGlvbiBBOShkLF8sbSl7cmV0dXJuW01hdGgucm91bmQoX1swXSptK2RbMF0qKDEtbSkpLE1hdGgucm91bmQoX1sxXSptK2RbMV0qKDEtbSkpLE1hdGgucm91bmQoX1syXSpt''@;'; put 'put ''K2RbMl0qKDEtbSkpXX0oXzgoIm51bWJlciI9PXR5cGVvZiBkLnJnYj8oIjAwMDAwIitkLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpOmQucmdiKSxfOCgibnVtYmVyIj09dHlwZW9mIF8ucmdiPygiMDAwMDAiK18udG9TdHJpbmcoMTYpKS5zbGljZSgtNik6Xy5yZ2IpLG0pKX1mdW5jdGlvbiB2''@;'; put 'put ''eShkLF8sbSl7aWYobSlzd2l0Y2goK2Qpe2Nhc2UgNjQ6ZD02NTticmVhaztjYXNlIDY1OmQ9NjR9dmFyIFQ9XyYmX1srZF18fHdkWytkXXx8aTVbK2QtMjAwXTtpZig4MT09K2QmJihUPXdkWzFdKSxUfHwoVD13ZFsxXSksIVQpdGhyb3cgbmV3IEVycm9yKCJiYWQgSUNWIGluZGV4ICIrZCk7''@;'; put 'put ''cmV0dXJuIGIzKFQpfWZ1bmN0aW9uIHc4KGQsXyxtKXt2YXIgVD17fTtyZXR1cm4gbnVsbCE9ZC5pbmRleGVkJiYoVC5pbmRleD1wYXJzZUludChkLmluZGV4ZWQsMTApLFQucmdiPXZ5KFQuaW5kZXgsXy5JbmRleGVkKSksbnVsbCE9ZC50aGVtZSYmKFQudGhlbWU9cGFyc2VJbnQoZC50aGVt''@;'; put 'put ''ZSwxMCkpLG51bGwhPWQudGludCYmKFQudGludD1wYXJzZUZsb2F0KGQudGludCkpLG51bGwhPWQucmdiJiYoVC5yZ2I9ZC5yZ2Iuc2xpY2UoLTYpKSxudWxsIT1ULnRoZW1lJiYhVC5yZ2ImJm0udGhlbWVFbGVtZW50cyYmKFQucmdiPWg1KG0udGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbVC50''@;'; put 'put ''aGVtZV0ucmdiLFQudGludHx8MCksVC5yYXdfcmdiPW0udGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbVC50aGVtZV0ucmdiKSxUfWZ1bmN0aW9uIF9IKGQsXyxtLFQpe18uQm9yZGVycz1bXTt2YXIgUD17fSxRPXt9LHNlPSExOyhkWzBdLm1hdGNoKEJuKXx8W10pLmZvckVhY2goZnVuY3Rpb24o''@;'; put 'put ''b2Upe3ZhciBkZT1YcihvZSk7c3dpdGNoKGVhKGRlWzBdKSl7Y2FzZSI8Ym9yZGVycyI6Y2FzZSI8Ym9yZGVycz4iOmNhc2UiPC9ib3JkZXJzPiI6Y2FzZSI8L2JvcmRlcj4iOmNhc2UiPGxlZnQvPiI6Y2FzZSI8L2xlZnQ+IjpjYXNlIjxyaWdodC8+IjpjYXNlIjwvcmlnaHQ+IjpjYXNlIjx0''@;'; put 'put ''b3AvPiI6Y2FzZSI8L3RvcD4iOmNhc2UiPGJvdHRvbS8+IjpjYXNlIjwvYm90dG9tPiI6Y2FzZSI8ZGlhZ29uYWwiOmNhc2UiPGRpYWdvbmFsPiI6Y2FzZSI8ZGlhZ29uYWwvPiI6Y2FzZSI8aG9yaXpvbnRhbCI6Y2FzZSI8aG9yaXpvbnRhbD4iOmNhc2UiPGhvcml6b250YWwvPiI6Y2FzZSI8''@;'; put 'put ''dmVydGljYWwiOmNhc2UiPHZlcnRpY2FsPiI6Y2FzZSI8dmVydGljYWwvPiI6Y2FzZSI8c3RhcnQiOmNhc2UiPHN0YXJ0PiI6Y2FzZSI8c3RhcnQvPiI6Y2FzZSI8L3N0YXJ0PiI6Y2FzZSI8ZW5kIjpjYXNlIjxlbmQ+IjpjYXNlIjxlbmQvPiI6Y2FzZSI8L2VuZD4iOmNhc2UiPGNvbG9yLz4i''@;'; put 'put ''OmNhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGJvcmRlciI6Y2FzZSI8Ym9yZGVyPiI6Y2FzZSI8Ym9yZGVyLz4iOlA9e30sZGUuZGlhZ29uYWxVcCYmKFAuZGlhZ29uYWxVcD1UaShkZS5kaWFnb25hbFVwKSks''@;'; put 'put ''ZGUuZGlhZ29uYWxEb3duJiYoUC5kaWFnb25hbERvd249VGkoZGUuZGlhZ29uYWxEb3duKSksXy5Cb3JkZXJzLnB1c2goUCk7YnJlYWs7Y2FzZSI8bGVmdCI6Y2FzZSI8bGVmdD4iOlE9UC5sZWZ0PXt9LGRlLnN0eWxlJiYoUS5zdHlsZT1kZS5zdHlsZSk7YnJlYWs7Y2FzZSI8cmlnaHQiOmNh''@;'; put 'put ''c2UiPHJpZ2h0PiI6UT1QLnJpZ2h0PXt9LGRlLnN0eWxlJiYoUS5zdHlsZT1kZS5zdHlsZSk7YnJlYWs7Y2FzZSI8dG9wIjpjYXNlIjx0b3A+IjpRPVAudG9wPXt9LGRlLnN0eWxlJiYoUS5zdHlsZT1kZS5zdHlsZSk7YnJlYWs7Y2FzZSI8Ym90dG9tIjpjYXNlIjxib3R0b20+IjpRPVAuYm90''@;'; put 'put ''dG9tPXt9LGRlLnN0eWxlJiYoUS5zdHlsZT1kZS5zdHlsZSk7YnJlYWs7Y2FzZSI8L2RpYWdvbmFsPiI6UC5kaWFnb25hbD1RLFE9e307YnJlYWs7Y2FzZSI8L2hvcml6b250YWw+IjpQLmhvcml6b250YWw9USxRPXt9O2JyZWFrO2Nhc2UiPC92ZXJ0aWNhbD4iOlAudmVydGljYWw9USxRPXt9''@;'; put 'put ''O2JyZWFrO2Nhc2UiPGNvbG9yIjpjYXNlIjxjb2xvcj4iOlEuY29sb3J8fChRLmNvbG9yPXt9KSxkZS5hdXRvJiYoUS5jb2xvci5hdXRvPVRpKGRlLmF1dG8pKSxudWxsIT1kZS5yZ2I/US5jb2xvci5yZ2I9ZGUucmdiLnNsaWNlKC02KTpkZS5pbmRleGVkPyhRLmNvbG9yLmluZGV4PXBhcnNl''@;'; put 'put ''SW50KGRlLmluZGV4ZWQsMTApLFEuY29sb3IucmdiPXZ5KFEuY29sb3IuaW5kZXgsXy5JbmRleGVkLCExKSk6ZGUudGhlbWUmJihRLmNvbG9yLnRoZW1lPXBhcnNlSW50KGRlLnRoZW1lLDEwKSxkZS50aW50JiYoUS5jb2xvci50aW50PXBhcnNlRmxvYXQoZGUudGludCkpLGRlLnRoZW1lJiZt''@;'; put 'put ''LnRoZW1lRWxlbWVudHMmJm0udGhlbWVFbGVtZW50cy5jbHJTY2hlbWUmJihRLmNvbG9yLnJnYj1oNShtLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW1EuY29sb3IudGhlbWVdLnJnYixRLmNvbG9yLnRpbnR8fDApKSksIWRlLmF1dG8mJm51bGw9PWRlLnJnYiYmIWRlLmluZGV4ZWQmJmRlbGV0''@;'; put 'put ''ZSBRLmNvbG9yO2JyZWFrO2Nhc2UiPGV4dCI6c2U9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOnNlPSExO2JyZWFrO2RlZmF1bHQ6aWYoVCYmVC5XVEYmJiFzZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2RlWzBdKyIgaW4gYm9yZGVycyIpfX0pfWZ1bmN0aW9uIHFtKGQsXyl7dmFy''@;'; put 'put ''IG09WyI8IitfXTtyZXR1cm4gZCYmZC5zdHlsZT8obS5wdXNoKCcgc3R5bGU9IicrZC5zdHlsZSsnIicpLGQuY29sb3I/KG0ucHVzaCgiPiIpLG0ucHVzaChQZyhkLmNvbG9yLCEwKSksbS5qb2luKCIiKSsiPC8iK18rIj4iKTptLmpvaW4oIiIpKyIvPiIpOm1bMF0rIi8+In1mdW5jdGlvbiB4''@;'; put 'put ''ZihkLF8sbSxUKXtfLkZpbGxzPVtdO3ZhciBQPXt9LFE9e30sc2U9ITEsb2U9ITE7KGRbMF0ubWF0Y2goQm4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihkZSl7dmFyIExlPVhyKGRlKTtzd2l0Y2goZWEoTGVbMF0pKXtjYXNlIjxmaWxscyI6Y2FzZSI8ZmlsbHM+IjpjYXNlIjwvZmlsbHM+Ijpj''@;'; put 'put ''YXNlIjwvZmlsbD4iOmNhc2UiPC9ncmFkaWVudEZpbGw+IjpjYXNlIjxiZ0NvbG9yLz4iOmNhc2UiPC9iZ0NvbG9yPiI6Y2FzZSI8ZmdDb2xvci8+IjpjYXNlIjwvZmdDb2xvcj4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPHN0b3AvPiI6Y2FzZSI8ZXh0THN0IjpjYXNl''@;'; put 'put ''IjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZmlsbD4iOmNhc2UiPGZpbGwiOmNhc2UiPGZpbGwvPiI6Xy5GaWxscy5wdXNoKFA9e30pO2JyZWFrO2Nhc2UiPGdyYWRpZW50RmlsbD4iOlAuc3RvcHM9W107YnJlYWs7Y2FzZSI8Z3JhZGllbnRGaWxsIjpQLnN0b3BzPVtd''@;'; put 'put ''LExlLmRlZ3JlZSYmKFAuYW5nbGU9K0xlLmRlZ3JlZSk7YnJlYWs7Y2FzZSI8cGF0dGVybkZpbGwiOmNhc2UiPHBhdHRlcm5GaWxsPiI6TGUucGF0dGVyblR5cGUmJihQLnBhdHRlcm5UeXBlPUxlLnBhdHRlcm5UeXBlKTticmVhaztjYXNlIjxwYXR0ZXJuRmlsbC8+IjpjYXNlIjwvcGF0dGVy''@;'; put 'put ''bkZpbGw+IjppZihzZSl0aHJvdyBuZXcgRXJyb3IoImJhZCBzdG9wIik7YnJlYWs7Y2FzZSI8Y29sb3IiOmNhc2UiPGJnQ29sb3IiOmNhc2UiPGZnQ29sb3IiOnZhciBOZT1lYShMZVswXSkuc2xpY2UoMSk7ImNvbG9yIiE9TmUmJiFQW05lXSYmKFBbTmVdPXt9KTt2YXIgQmU9c2U/UTpQW05l''@;'; put 'put ''XTtudWxsIT1MZS5pbmRleGVkJiYoQmUuaW5kZXg9cGFyc2VJbnQoTGUuaW5kZXhlZCwxMCksQmUucmdiPXZ5KEJlLmluZGV4LF8uSW5kZXhlZCkpLG51bGwhPUxlLnRoZW1lJiYoQmUudGhlbWU9cGFyc2VJbnQoTGUudGhlbWUsMTApKSxudWxsIT1MZS50aW50JiYoQmUudGludD1wYXJzZUZs''@;'; put 'put ''b2F0KExlLnRpbnQpKSxudWxsIT1MZS5yZ2ImJihCZS5yZ2I9TGUucmdiLnNsaWNlKC02KSksbnVsbCE9TGUuYXV0byYmZGVsZXRlIFBbTmVdLG51bGwhPUJlLnRoZW1lJiYhQmUucmdiJiZtLnRoZW1lRWxlbWVudHMmJihCZS5yZ2I9aDUobS50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtCZS50''@;'; put 'put ''aGVtZV0ucmdiLEJlLnRpbnR8fDApLFQuV1RGJiYoQmUucmF3X3JnYj1tLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW0JlLnRoZW1lXS5yZ2IpKTticmVhaztjYXNlIjxzdG9wPiI6c2U9ITAsUT17fTticmVhaztjYXNlIjxzdG9wIjpzZT0hMCxRPXt9LG51bGwhPUxlLnBvc2l0aW9uJiYoUS52''@;'; put 'put ''PXBhcnNlRmxvYXQoTGUucG9zaXRpb24pKTticmVhaztjYXNlIjwvc3RvcD4iOnNlPSExLFAuc3RvcHMucHVzaChRKTticmVhaztjYXNlIjxleHQiOm9lPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpvZT0hMTticmVhaztkZWZhdWx0OmlmKFQmJlQuV1RGJiYhb2UpdGhyb3cgbmV3IEVycm9yKCJ1''@;'; put 'put ''bnJlY29nbml6ZWQgIitMZVswXSsiIGluIGZpbGxzIil9fSl9ZnVuY3Rpb24gWkEoZCxfLG0sVCl7Xy5Gb250cz1bXTt2YXIgUD17fSxRPSExOyhkWzBdLm1hdGNoKEJuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oc2Upe3ZhciBvZT1YcihzZSk7c3dpdGNoKGVhKG9lWzBdKSl7Y2FzZSI8Zm9u''@;'; put 'put ''dHMiOmNhc2UiPGZvbnRzPiI6Y2FzZSI8L2ZvbnRzPiI6YnJlYWs7Y2FzZSI8Zm9udCI6Y2FzZSI8Zm9udD4iOmlmKCIvPiIhPXNlLnNsaWNlKC0yKSlicmVhaztjYXNlIjwvZm9udD4iOmNhc2UiPGZvbnQvPiI6Xy5Gb250cy5wdXNoKFApLFA9e307YnJlYWs7Y2FzZSI8bmFtZSI6b2UudmFs''@;'; put 'put ''JiYoUC5uYW1lPVduKG9lLnZhbCkpO2JyZWFrO2Nhc2UiPG5hbWUvPiI6Y2FzZSI8L25hbWU+IjpicmVhaztjYXNlIjxiIjpQLmJvbGQ9b2UudmFsP1RpKG9lLnZhbCk6MTticmVhaztjYXNlIjxiLz4iOmNhc2UiPGI+IjpQLmJvbGQ9MTticmVhaztjYXNlIjwvYj4iOmJyZWFrO2Nhc2UiPGki''@;'; put 'put ''OlAuaXRhbGljPW9lLnZhbD9UaShvZS52YWwpOjE7YnJlYWs7Y2FzZSI8aS8+IjpjYXNlIjxpPiI6UC5pdGFsaWM9MTticmVhaztjYXNlIjwvaT4iOmJyZWFrO2Nhc2UiPHUiOnN3aXRjaChvZS52YWwpe2Nhc2Uibm9uZSI6UC51bmRlcmxpbmU9MDticmVhaztjYXNlInNpbmdsZSI6UC51bmRl''@;'; put 'put ''cmxpbmU9MTticmVhaztjYXNlImRvdWJsZSI6UC51bmRlcmxpbmU9MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmciOlAudW5kZXJsaW5lPTMzO2JyZWFrO2Nhc2UiZG91YmxlQWNjb3VudGluZyI6UC51bmRlcmxpbmU9MzR9YnJlYWs7Y2FzZSI8dS8+IjpjYXNlIjx1PiI6UC51bmRlcmxp''@;'; put 'put ''bmU9MTticmVhaztjYXNlIjwvdT4iOmJyZWFrO2Nhc2UiPHN0cmlrZSI6UC5zdHJpa2U9b2UudmFsP1RpKG9lLnZhbCk6MTticmVhaztjYXNlIjxzdHJpa2UvPiI6UC5zdHJpa2U9MTticmVhaztjYXNlIjxvdXRsaW5lIjpQLm91dGxpbmU9b2UudmFsP1RpKG9lLnZhbCk6MTticmVhaztjYXNl''@;'; put 'put ''IjxvdXRsaW5lLz4iOlAub3V0bGluZT0xO2JyZWFrO2Nhc2UiPHNoYWRvdyI6UC5zaGFkb3c9b2UudmFsP1RpKG9lLnZhbCk6MTticmVhaztjYXNlIjxzaGFkb3cvPiI6UC5zaGFkb3c9MTticmVhaztjYXNlIjxjb25kZW5zZSI6UC5jb25kZW5zZT1vZS52YWw/VGkob2UudmFsKToxO2JyZWFr''@;'; put 'put ''O2Nhc2UiPGNvbmRlbnNlLz4iOlAuY29uZGVuc2U9MTticmVhaztjYXNlIjxleHRlbmQiOlAuZXh0ZW5kPW9lLnZhbD9UaShvZS52YWwpOjE7YnJlYWs7Y2FzZSI8ZXh0ZW5kLz4iOlAuZXh0ZW5kPTE7YnJlYWs7Y2FzZSI8c3oiOm9lLnZhbCYmKFAuc3o9K29lLnZhbCk7YnJlYWs7Y2FzZSI8''@;'; put 'put ''c3ovPiI6Y2FzZSI8L3N6PiI6YnJlYWs7Y2FzZSI8dmVydEFsaWduIjoibm9uZSIhPShvZS52YWx8fCJub25lIikmJihQLnZhbGlnbj1vZS52YWwucmVwbGFjZSgic2NyaXB0IiwiIikpO2JyZWFrO2Nhc2UiPHZlcnRBbGlnbi8+IjpjYXNlIjwvdmVydEFsaWduPiI6YnJlYWs7Y2FzZSI8ZmFt''@;'; put 'put ''aWx5IjpvZS52YWwmJihQLmZhbWlseT1wYXJzZUludChvZS52YWwsMTApKTticmVhaztjYXNlIjxmYW1pbHkvPiI6Y2FzZSI8L2ZhbWlseT4iOmJyZWFrO2Nhc2UiPHNjaGVtZSI6b2UudmFsJiYoUC5zY2hlbWU9b2UudmFsKTticmVhaztjYXNlIjxzY2hlbWUvPiI6Y2FzZSI8L3NjaGVtZT4i''@;'; put 'put ''OmJyZWFrO2Nhc2UiPGNoYXJzZXQiOmlmKCIxIj09b2UudmFsKWJyZWFrO29lLmNvZGVwYWdlPVJbcGFyc2VJbnQob2UudmFsLDEwKV07YnJlYWs7Y2FzZSI8Y29sb3IiOlAuY29sb3J8fChQLmNvbG9yPXt9KSxvZS5hdXRvJiYoUC5jb2xvci5hdXRvPVRpKG9lLmF1dG8pKSxvZS5yZ2I/UC5j''@;'; put 'put ''b2xvci5yZ2I9b2UucmdiLnNsaWNlKC02KTpvZS5pbmRleGVkPyhQLmNvbG9yLmluZGV4PXBhcnNlSW50KG9lLmluZGV4ZWQsMTApLFAuY29sb3IucmdiPXZ5KFAuY29sb3IuaW5kZXgsXy5JbmRleGVkKSk6b2UudGhlbWUmJihQLmNvbG9yLnRoZW1lPXBhcnNlSW50KG9lLnRoZW1lLDEwKSxv''@;'; put 'put ''ZS50aW50JiYoUC5jb2xvci50aW50PXBhcnNlRmxvYXQob2UudGludCkpLG9lLnRoZW1lJiZtLnRoZW1lRWxlbWVudHMmJm0udGhlbWVFbGVtZW50cy5jbHJTY2hlbWUmJihQLmNvbG9yLnJnYj1oNShtLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW1AuY29sb3IudGhlbWVdLnJnYixQLmNvbG9y''@;'; put 'put ''LnRpbnR8fDApKSk7YnJlYWs7Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8L2NvbG9yPiI6YnJlYWs7Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6UT0hMDticmVhaztjYXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOlE9ITE7YnJlYWs7Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0''@;'; put 'put ''THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjpRPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpRPSExO2JyZWFrO2RlZmF1bHQ6aWYoVCYmVC5XVEYmJiFRKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrb2VbMF0rIiBpbiBmb250cyIpfX0pfXZhciBtNT17MDoibm9uZSIsMToic2luZ2xlIiwy''@;'; put 'put ''OiJkb3VibGUiLDMzOiJzaW5nbGVBY2NvdW50aW5nIiwzNDoiZG91YmxlQWNjb3VudGluZyJ9LHY1PVsibnVtRm10SWQiLCJmaWxsSWQiLCJmb250SWQiLCJib3JkZXJJZCIsInhmSWQiXSxfNT1bImFwcGx5QWxpZ25tZW50IiwiYXBwbHlCb3JkZXIiLCJhcHBseUZpbGwiLCJhcHBseUZvbnQi''@;'; put 'put ''LCJhcHBseU51bWJlckZvcm1hdCIsImFwcGx5UHJvdGVjdGlvbiIsInBpdm90QnV0dG9uIiwicXVvdGVQcmVmaXgiXSxDSD1mdW5jdGlvbigpe3ZhciBkPS88KD86XHcrOik/Zm9udChbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9mb250Pi8sXz0vPCg/Olx3KzopP251bUZtdChbXj5dKilc''@;'; put 'put ''Lz4vLG09LzwoPzpcdys6KT9maWxsKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZpbGw+LyxQPS88KD86XHcrOik/Ym9yZGVyKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2JvcmRlcj4vO3JldHVybiBmdW5jdGlvbihvZSxkZSxMZSxOZSl7dmFyIG50LG10LEJlPXt9LFplPXt9O3Jl''@;'; put 'put ''dHVybihudD1vZS5tYXRjaChkKSkmJihaQShudCxCZSxMZSxOZSksKEJlLkZvbnRzfHxbXSlbMF0mJkhuKFplLEJlLkZvbnRzWzBdKSksKG50PW9lLm1hdGNoKF8pKSYmKG10PVhyKFduKG50WzBdKSksWmUuej1tdC5mb3JtYXRDb2RlP0NpKG10LmZvcm1hdENvZGUpOihkZS5OdW1iZXJGbXR8''@;'; put 'put ''fFtdKVsrbXQubnVtRm10SWRdfHwiR2VuZXJhbCIpLChudD1vZS5tYXRjaChtKSkmJih4ZihudCxCZSxMZSxOZSksKEJlLkZpbGxzfHxbXSlbMF0mJkhuKFplLEJlLkZpbGxzWzBdKSksKG50PW9lLm1hdGNoKFApKSYmKF9IKG50LEJlLExlLE5lKSwoQmUuQm9yZGVyc3x8W10pWzBdJiZIbiha''@;'; put 'put ''ZSxCZS5Cb3JkZXJzWzBdKSksWmV9fSgpLFhYPS88KD86XHcrOik/ZHhmPltcU1xzXSo/PFwvKD86XHcrOik/ZHhmPi9nLEM4PS88KD86XHcrOik/dGFibGVTdHlsZVxiLio/PltcU1xzXSo/PFwvKD86XHcrOik/dGFibGVTdHlsZT4vZzt2YXIgblE9ZnVuY3Rpb24oKXt2YXIgXz0vPCg/Olx3''@;'; put 'put ''KzopP251bUZtdHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/bnVtRm10cz4vLG09LzwoPzpcdys6KT9jZWxsU3R5bGVYZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFN0eWxlWGZzPi8sVD0vPCg/Olx3KzopP2NlbGxTdHlsZXMoW14+XSopPltcU1xzXSo/PFwvKD86XHcr''@;'; put 'put ''Oik/Y2VsbFN0eWxlcz4vLFA9LzwoPzpcdys6KT9jZWxsWGZzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2NlbGxYZnM+LyxRPS88KD86XHcrOik/ZmlsbHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/ZmlsbHM+LyxzZT0vPCg/Olx3KzopP2ZvbnRzKFtePl0qKT5bXFNcc10qPzxc''@;'; put 'put ''Lyg/Olx3KzopP2ZvbnRzPi8sb2U9LzwoPzpcdys6KT9ib3JkZXJzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2JvcmRlcnM+LyxkZT0vPCg/Olx3KzopP2luZGV4ZWRDb2xvcnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/aW5kZXhlZENvbG9ycz4vLExlPS88KD86XHcrOik/dGFi''@;'; put 'put ''bGVTdHlsZXMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/dGFibGVTdHlsZXM+LyxOZT0vPCg/Olx3KzopP2R4ZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/ZHhmcz4vO3JldHVybiBmdW5jdGlvbihaZSxudCxtdCl7dmFyIGZ0LFFlPXt9O3JldHVybiBaZT8oKGZ0PShaZT1aZS5y''@;'; put 'put ''ZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpKS5tYXRjaChkZSkpJiZmdW5jdGlvbiB3SChkLF8sbSl7Xy5JbmRleGVkfHwoXy5JbmRleGVkPVtdKTt2YXIgVD0hMTsoZFswXS5tYXRjaChCbil8fFtdKS5m''@;'; put 'put ''b3JFYWNoKGZ1bmN0aW9uKFApe3ZhciBRPVhyKFApO3N3aXRjaChlYShRWzBdKSl7Y2FzZSI8aW5kZXhlZENvbG9ycz4iOmNhc2UiPGluZGV4ZWRDb2xvcnMiOmNhc2UiPGluZGV4ZWRDb2xvcnMvPiI6Y2FzZSI8L2luZGV4ZWRDb2xvcnM+IjpjYXNlIjwvcmdiQ29sb3I+IjpjYXNlIjxleHRM''@;'; put 'put ''c3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxyZ2JDb2xvciI6ZGVsZXRlIFFbMF07dmFyIHNlPXBhcnNlSW50KFEucmdiLnNsaWNlKC02KSwxNik7Xy5JbmRleGVkLnB1c2goW3NlPj4xNiYyNTUsc2U+PjgmMjU1LDI1NSZzZV0pO2JyZWFrO2Nhc2UiPGV4''@;'; put 'put ''dCI6VD0hMDticmVhaztjYXNlIjwvZXh0PiI6VD0hMTticmVhaztkZWZhdWx0OmlmKG0mJm0uV1RGJiYhVCl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK1FbMF0rIiBpbiBjZWxsU3R5bGVzIil9fSl9KGZ0LFFlLG10KSwoZnQ9WmUubWF0Y2goXykpJiZmdW5jdGlvbiBHWChkLF8s''@;'; put 'put ''bSl7Xy5OdW1iZXJGbXQ9W107Zm9yKHZhciBUPUZlKEkuX3RhYmxlKSxQPTA7UDxULmxlbmd0aDsrK1ApXy5OdW1iZXJGbXRbVFtQXV09SS5fdGFibGVbVFtQXV07dmFyIFE9ZFswXS5tYXRjaChCbik7aWYoUSlmb3IoUD0wO1A8US5sZW5ndGg7KytQKXt2YXIgc2U9WHIoUVtQXSk7c3dpdGNo''@;'; put 'put ''KGVhKHNlWzBdKSl7Y2FzZSI8bnVtRm10cyI6Y2FzZSI8L251bUZtdHM+IjpjYXNlIjxudW1GbXRzLz4iOmNhc2UiPG51bUZtdHM+IjpjYXNlIjwvbnVtRm10PiI6YnJlYWs7Y2FzZSI8bnVtRm10Ijp2YXIgb2U9Q2koV24oc2UuZm9ybWF0Q29kZSkpLGRlPXBhcnNlSW50KHNlLm51bUZtdElk''@;'; put 'put ''LDEwKTtpZihfLk51bWJlckZtdFtkZV09b2UsZGU+MCl7aWYoZGU+MzkyKXtmb3IoZGU9MzkyO2RlPjYwJiZudWxsIT1fLk51bWJlckZtdFtkZV07LS1kZSk7Xy5OdW1iZXJGbXRbZGVdPW9lfUkubG9hZChvZSxkZSl9YnJlYWs7ZGVmYXVsdDppZihtLldURil0aHJvdyBuZXcgRXJyb3IoInVu''@;'; put 'put ''cmVjb2duaXplZCAiK3NlWzBdKyIgaW4gbnVtRm10cyIpfX19KGZ0LFFlLG10KSwoZnQ9WmUubWF0Y2goc2UpKSYmWkEoZnQsUWUsbnQsbXQpLChmdD1aZS5tYXRjaChRKSkmJnhmKGZ0LFFlLG50LG10KSwoZnQ9WmUubWF0Y2gob2UpKSYmX0goZnQsUWUsbnQsbXQpLChmdD1aZS5tYXRjaCht''@;'; put 'put ''KSkmJmZ1bmN0aW9uIHZTKGQsXyxtKXtfLkNlbGxTdHlsZVhmPVtdO3ZhciBULFA9ITE7KGRbMF0ubWF0Y2goQm4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgc2U9WHIoUSksb2U9MDtzd2l0Y2goZWEoc2VbMF0pKXtjYXNlIjxjZWxsU3R5bGVYZnMiOmNhc2UiPGNlbGxTdHlsZVhm''@;'; put 'put ''cz4iOmNhc2UiPGNlbGxTdHlsZVhmcy8+IjpjYXNlIjwvY2VsbFN0eWxlWGZzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8L2FsaWdubWVudD4iOmNhc2UiPC9wcm90ZWN0aW9uPiI6Y2FzZSI8cHJvdGVjdGlvbi8+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+Ijpi''@;'; put 'put ''cmVhaztjYXNlIjx4ZiI6Y2FzZSI8eGYvPiI6Zm9yKGRlbGV0ZShUPXNlKVswXSxvZT0wO29lPHY1Lmxlbmd0aDsrK29lKVRbdjVbb2VdXSYmKFRbdjVbb2VdXT1wYXJzZUludChUW3Y1W29lXV0sMTApKTtmb3Iob2U9MDtvZTxfNS5sZW5ndGg7KytvZSlUW181W29lXV0mJihUW181W29lXV09''@;'; put 'put ''VGkoVFtfNVtvZV1dKSk7aWYoXy5OdW1iZXJGbXQmJlQubnVtRm10SWQ+MzkyKWZvcihvZT0zOTI7b2U+NjA7LS1vZSlpZihfLk51bWJlckZtdFtULm51bUZtdElkXT09Xy5OdW1iZXJGbXRbb2VdKXtULm51bUZtdElkPW9lO2JyZWFrfV8uQ2VsbFN0eWxlWGYucHVzaChUKTticmVhaztjYXNl''@;'; put 'put ''IjxhbGlnbm1lbnQiOmNhc2UiPGFsaWdubWVudC8+Ijp2YXIgZGU9e307c2UudmVydGljYWwmJihkZS52ZXJ0aWNhbD1zZS52ZXJ0aWNhbCksc2UuaG9yaXpvbnRhbCYmKGRlLmhvcml6b250YWw9c2UuaG9yaXpvbnRhbCksbnVsbCE9c2UudGV4dFJvdGF0aW9uJiYoZGUudGV4dFJvdGF0aW9u''@;'; put 'put ''PXNlLnRleHRSb3RhdGlvbiksc2UuaW5kZW50JiYoZGUuaW5kZW50PXNlLmluZGVudCksc2Uud3JhcFRleHQmJihkZS53cmFwVGV4dD1zZS53cmFwVGV4dCksc2Uuc2hyaW5rVG9GaXQmJihkZS5zaHJpbmtUb0ZpdD1UaShzZS5zaHJpbmtUb0ZpdCkpLFQuYWxpZ25tZW50PWRlO2JyZWFrO2Nh''@;'; put 'put ''c2UiPHByb3RlY3Rpb24iOlQucHJvdGVjdGlvbj17fSxUaShzZS5oaWRkZW4pJiYoVC5wcm90ZWN0aW9uLmhpZGRlbj0hMCksbnVsbCE9c2UubG9ja2VkJiYoVC5wcm90ZWN0aW9uLmVkaXRhYmxlPSFUaShzZS5sb2NrZWQpKTticmVhaztjYXNlIjxleHQiOlA9ITA7YnJlYWs7Y2FzZSI8L2V4''@;'; put 'put ''dD4iOlA9ITE7YnJlYWs7ZGVmYXVsdDppZihtJiZtLldURiYmIVApdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitzZVswXSsiIGluIGNlbGxTdHlsZVhmcyIpfX0pfShmdCxRZSxtdCksKGZ0PVplLm1hdGNoKFQpKSYmZnVuY3Rpb24gYkgoZCxfLG0pe18uQ2VsbFN0eWxlWGZ8fChf''@;'; put 'put ''LkNlbGxTdHlsZVhmPVtdKTt2YXIgVD0hMTsoZFswXS5tYXRjaChCbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFApe3ZhciBRPVhyKFApO3N3aXRjaChlYShRWzBdKSl7Y2FzZSI8Y2VsbFN0eWxlcyI6Y2FzZSI8Y2VsbFN0eWxlcz4iOmNhc2UiPGNlbGxTdHlsZXMvPiI6Y2FzZSI8L2NlbGxT''@;'; put 'put ''dHlsZXM+IjpjYXNlIjwveGY+IjpjYXNlIjwvY2VsbFN0eWxlPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8Y2VsbFN0eWxlIjpjYXNlIjxjZWxsU3R5bGUvPiI6ZGVsZXRlIFFbMF07dmFyIHNlPStRLnhmSWQ7aWYoXy5DZWxsU3R5''@;'; put 'put ''bGVYZltzZV0pXy5DZWxsU3R5bGVYZltzZV0uc3R5bGU9V24oUS5uYW1lKTtlbHNlIGlmKCFRLmJ1aWx0aW5JZCl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIENlbGxTdHlsZSAiK3NlKTticmVhaztjYXNlIjxleHQiOlQ9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOlQ9ITE7YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDppZihtJiZtLldURiYmIVQpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitRWzBdKyIgaW4gY2VsbFN0eWxlcyIpfX0pfShmdCxRZSxtdCksKGZ0PVplLm1hdGNoKFApKSYmZnVuY3Rpb24gcVgoZCxfLG0pe18uQ2VsbFhmPVtdO3ZhciBULFA9ITE7KGRbMF0ubWF0Y2go''@;'; put 'put ''Qm4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgc2U9WHIoUSksb2U9MDtzd2l0Y2goZWEoc2VbMF0pKXtjYXNlIjxjZWxsWGZzIjpjYXNlIjxjZWxsWGZzPiI6Y2FzZSI8Y2VsbFhmcy8+IjpjYXNlIjwvY2VsbFhmcz4iOmNhc2UiPC94Zj4iOmNhc2UiPC9hbGlnbm1lbnQ+IjpjYXNl''@;'; put 'put ''IjwvcHJvdGVjdGlvbj4iOmNhc2UiPHByb3RlY3Rpb24vPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8eGYiOmNhc2UiPHhmLz4iOmZvcihkZWxldGUoVD1zZSlbMF0sb2U9MDtvZTx2NS5sZW5ndGg7KytvZSlUW3Y1W29lXV0mJihU''@;'; put 'put ''W3Y1W29lXV09cGFyc2VJbnQoVFt2NVtvZV1dLDEwKSk7Zm9yKG9lPTA7b2U8XzUubGVuZ3RoOysrb2UpVFtfNVtvZV1dJiYoVFtfNVtvZV1dPVRpKFRbXzVbb2VdXSkpO2lmKF8uTnVtYmVyRm10JiZULm51bUZtdElkPjM5Milmb3Iob2U9MzkyO29lPjYwOy0tb2UpaWYoXy5OdW1iZXJGbXRb''@;'; put 'put ''VC5udW1GbXRJZF09PV8uTnVtYmVyRm10W29lXSl7VC5udW1GbXRJZD1vZTticmVha31fLkNlbGxTdHlsZVhmJiZULnhmSWQmJl8uQ2VsbFN0eWxlWGZbVC54ZklkXSYmXy5DZWxsU3R5bGVYZltULnhmSWRdLnN0eWxlJiYoVC5zdHlsZT1fLkNlbGxTdHlsZVhmW1QueGZJZF0uc3R5bGUpLF8u''@;'; put 'put ''Q2VsbFhmLnB1c2goVCk7YnJlYWs7Y2FzZSI8YWxpZ25tZW50IjpjYXNlIjxhbGlnbm1lbnQvPiI6dmFyIGRlPXt9O3NlLnZlcnRpY2FsJiYoZGUudmVydGljYWw9c2UudmVydGljYWwpLHNlLmhvcml6b250YWwmJihkZS5ob3Jpem9udGFsPXNlLmhvcml6b250YWwpLG51bGwhPXNlLnRleHRS''@;'; put 'put ''b3RhdGlvbiYmKGRlLnRleHRSb3RhdGlvbj1zZS50ZXh0Um90YXRpb24pLHNlLmluZGVudCYmKGRlLmluZGVudD1zZS5pbmRlbnQpLHNlLndyYXBUZXh0JiYoZGUud3JhcFRleHQ9VGkoc2Uud3JhcFRleHQpKSxzZS5zaHJpbmtUb0ZpdCYmKGRlLnNocmlua1RvRml0PVRpKHNlLnNocmlua1Rv''@;'; put 'put ''Rml0KSksVC5hbGlnbm1lbnQ9ZGU7YnJlYWs7Y2FzZSI8cHJvdGVjdGlvbiI6VC5wcm90ZWN0aW9uPXt9LFRpKHNlLmhpZGRlbikmJihULnByb3RlY3Rpb24uaGlkZGVuPSEwKSxudWxsIT1zZS5sb2NrZWQmJihULnByb3RlY3Rpb24uZWRpdGFibGU9IVRpKHNlLmxvY2tlZCkpO2JyZWFrO2Nh''@;'; put 'put ''c2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPGV4dCI6UD0hMDticmVhaztjYXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOmNhc2UiPC9leHQ+IjpQPSExO2JyZWFrO2RlZmF1bHQ6aWYobSYmbS5XVEYmJiFQKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrc2VbMF0rIiBpbiBjZWxs''@;'; put 'put ''WGZzIil9fSl9KGZ0LFFlLG10KSwoZnQ9WmUubWF0Y2goTmUpKSYmZnVuY3Rpb24gU0goZCxfLG0sVCl7Xy5EWEZ8fChfLkRYRj1bXSksKGRbMF0ubWF0Y2goWFgpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihQKXtfLkRYRi5wdXNoKENIKFAsXyxtLFQpKX0pfShmdCxRZSxudCxtdCksKGZ0PVpl''@;'; put 'put ''Lm1hdGNoKExlKSkmJmZ1bmN0aW9uIEpYKGQsXyxtLFQpe18uVGFibGV8fChfLlRhYmxlPVtdKSwoZFswXS5tYXRjaChDOCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFApe18uVGFibGUucHVzaChmdW5jdGlvbiBFSChkLF8sbSxUKXt2YXIgUD0hMSxRPXt9O3JldHVybihkLm1hdGNoKEJuKXx8''@;'; put 'put ''W10pLmZvckVhY2goZnVuY3Rpb24oc2Upe3ZhciBvZT1YcihzZSk7c3dpdGNoKGVhKG9lWzBdKSl7Y2FzZSI8dGFibGVTdHlsZT4iOmNhc2UiPHRhYmxlU3R5bGUiOlEubmFtZT1vZS5uYW1lLnJlcGxhY2UoL14oVGFibGV8UGl2b3QpU3R5bGUvLCIiKSxRLnJhd25hbWU9b2UubmFtZSxRLnBp''@;'; put 'put ''dm90PSFvZS5waXZvdHx8VGkob2UucGl2b3QpLFEudGFibGU9IW9lLnRhYmxlfHxUaShvZS50YWJsZSk7YnJlYWs7Y2FzZSI8dGFibGVTdHlsZS8+IjpjYXNlIjwvdGFibGVTdHlsZT4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHRh''@;'; put 'put ''YmxlU3R5bGVFbGVtZW50IjppZihvZS50eXBlJiZvZS5keGZJZCl7aWYoIV8uRFhGfHwhXy5EWEZbK29lLmR4ZklkXSl0aHJvdyBuZXcgRXJyb3Ioc2UrIiBjYW5ub3QgZmluZCBEWEYiKTtRW29lLnR5cGVdPV8uRFhGWytvZS5keGZJZF19YnJlYWs7Y2FzZSI8ZXh0IjpQPSEwO2JyZWFrO2Nh''@;'; put 'put ''c2UiPC9leHQ+IjpQPSExO2JyZWFrO2RlZmF1bHQ6aWYoVCYmVC5XVEYmJiFQKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrb2VbMF0rIiBpbiB0YWJsZVN0eWxlIil9fSksUX0oUCxfLDAsVCkpfSl9KGZ0LFFlLDAsbXQpLChRZS5Gb250c3x8W10pWzBdJiYkbShRZS5Gb250c1sw''@;'; put 'put ''XSksUWUpOlFlfX0oKSxNSD1Wcigic3R5bGVTaGVldCIsbnVsbCx7eG1sbnM6VWEubWFpblswXSwieG1sbnM6dnQiOlVhLnZ0fSk7ZnVuY3Rpb24gX1MoZCxfKXt2YXIgVCxtPVtwbyxNSF07ZC5TU0YmJm51bGwhPShUPWZ1bmN0aW9uICRYKGQpe3ZhciBfPVsiPG51bUZtdHM+Il07cmV0dXJu''@;'; put 'put ''W1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihtKXtmb3IodmFyIFQ9bVswXTtUPD1tWzFdOysrVCludWxsIT1kW1RdJiYoX1tfLmxlbmd0aF09VnIoIm51bUZtdCIsbnVsbCx7bnVtRm10SWQ6VCxmb3JtYXRDb2RlOkJpKGRbVF0pfSkpfSksMT09PV8u''@;'; put 'put ''bGVuZ3RoPyIiOihfW18ubGVuZ3RoXT0iPC9udW1GbXRzPiIsX1swXT1WcigibnVtRm10cyIsbnVsbCx7Y291bnQ6Xy5sZW5ndGgtMn0pLnJlcGxhY2UoIi8+IiwiPiIpLF8uam9pbigiIikpfShkLlNTRikpJiYobVttLmxlbmd0aF09VCksbVttLmxlbmd0aF09ZnVuY3Rpb24gWlgoZCl7dmFy''@;'; put 'put ''IF89W107cmV0dXJuIGQuZm9yRWFjaChmdW5jdGlvbihtKXt2YXIgVD1bIjxmb250PiJdO20uYm9sZCYmVC5wdXNoKCI8Yi8+IiksbS5pdGFsaWMmJlQucHVzaCgiPGkvPiIpLG0uc3RyaWtlJiZULnB1c2goIjxzdHJpa2UvPiIpLG0uc2hhZG93JiZULnB1c2goIjxzaGFkb3cvPiIpLG01Wytt''@;'; put 'put ''LnVuZGVybGluZV0mJlQucHVzaCgnPHUgdmFsPSInK201WyttLnVuZGVybGluZV0rJyIvPicpLG0uc3omJlQucHVzaCgnPHN6IHZhbD0iJyttLnN6KyciLz4nKSxtLmNvbG9yJiZULnB1c2goUGcobS5jb2xvciwhMCkpLG0ubmFtZSYmVC5wdXNoKCc8bmFtZSB2YWw9IicrbS5uYW1lKyciLz4n''@;'; put 'put ''KSxtLmZhbWlseSYmVC5wdXNoKCc8ZmFtaWx5IHZhbD0iJyttLmZhbWlseSsnIi8+JyksbS5zY2hlbWUmJlQucHVzaCgnPHNjaGVtZSB2YWw9IicrbS5zY2hlbWUrJyIvPicpLG0udmFsaWduJiZULnB1c2goJzx2ZXJ0QWxpZ24gdmFsPSInK20udmFsaWduKygic3ViIj09bS52YWxpZ258fCJz''@;'; put 'put ''dXBlciI9PW0udmFsaWduPyJzY3JpcHQiOiIiKSsnIi8+JyksXy5wdXNoKFQuam9pbigiIikrIjwvZm9udD4iKX0pLCc8Zm9udHMgY291bnQ9IicrXy5sZW5ndGgrJyI+JytfLmpvaW4oIiIpKyI8L2ZvbnRzPiJ9KChkLlN0eWxlc3x8e30pLkZvbnRzfHxbXSksbVttLmxlbmd0aF09ZnVuY3Rp''@;'; put 'put ''b24geUgoZCl7dmFyIF89W107cmV0dXJuIGQuZm9yRWFjaChmdW5jdGlvbihtKXt2YXIgVD1udWxsO2lmKG0uc3RvcHMmJm0uc3RvcHMubGVuZ3RoKXt2YXIgUD17fTttLmFuZ2xlJiYoUC5kZWdyZWU9TWF0aC5yb3VuZChtLmFuZ2xlKSksVD1tLnN0b3BzLm1hcChmdW5jdGlvbihRKXtyZXR1''@;'; put 'put ''cm4gVnIoInN0b3AiLFBnKFEsImNvbG9yIiwhMCksbnVsbCE9US52P3twb3NpdGlvbjpRLnZ9Ont9KX0pLF8ucHVzaCgiPGZpbGw+IitWcigiZ3JhZGllbnRGaWxsIixULmpvaW4oIiIpLFApKyI8L2ZpbGw+Iil9ZWxzZXtpZihtLmZnQ29sb3Ipe2lmKFQ9KFR8fCIiKSsiPGZnQ29sb3IgIixt''@;'; put 'put ''LmZnQ29sb3IudGhlbWUpVCs9J3RoZW1lPSInK20uZmdDb2xvci50aGVtZSsnIicrKG0uZmdDb2xvci50aW50PycgdGludD0iJyttLmZnQ29sb3IudGludCsnIic6IiIpKyIvPiI7ZWxzZSBpZihudWxsIT1tLmZnQ29sb3IuaW5kZXgmJm51bGw9PW0uZmdDb2xvci5yZ2IpVCs9J2luZGV4ZWQ9''@;'; put 'put ''IicrbS5mZ0NvbG9yLmluZGV4KyciLz4nO2Vsc2UgaWYobS5mZ0NvbG9yLmF1dG8pVCs9J2F1dG89IjEiLz4nO2Vsc2V7aWYobnVsbD09bS5mZ0NvbG9yLnJnYil0aHJvdyBuZXcgRXJyb3IoIkJhZCBjb2xvciAiK0ZlKG0uZmdDb2xvcikuam9pbigifCIpKTtUKz0ncmdiPSJGRicrVDIobS5m''@;'; put 'put ''Z0NvbG9yLnJnYikrJyIvPid9InNvbGlkIj09bS5wYXR0ZXJuVHlwZSYmIW0uYmdDb2xvciYmKG0uYmdDb2xvcj17aW5kZXg6NjR9KX1pZihtLmJnQ29sb3IpaWYoVD0oVHx8IiIpKyI8YmdDb2xvciAiLG0uYmdDb2xvci50aGVtZSlUKz0ndGhlbWU9IicrbS5iZ0NvbG9yLnRoZW1lKyciLz4n''@;'; put 'put ''O2Vsc2UgaWYobnVsbCE9bS5iZ0NvbG9yLmluZGV4JiZudWxsPT1tLmJnQ29sb3IucmdiKVQrPSdpbmRleGVkPSInK20uYmdDb2xvci5pbmRleCsnIi8+JztlbHNlIGlmKG0uYmdDb2xvci5hdXRvKVQrPSdhdXRvPSIxIi8+JztlbHNle2lmKG51bGw9PW0uYmdDb2xvci5yZ2IpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJCYWQgY29sb3IgIitGZShtLmJnQ29sb3IpLmpvaW4oInwiKSk7VCs9J3JnYj0iRkYnK1QyKG0uYmdDb2xvci5yZ2IpKyciLz4nfV8ucHVzaCgiPGZpbGw+IitWcigicGF0dGVybkZpbGwiLFQse3BhdHRlcm5UeXBlOm0ucGF0dGVyblR5cGV9KSsiPC9maWxsPiIpfX0pLCc8Zmls''@;'; put 'put ''bHMgY291bnQ9IicrXy5sZW5ndGgrJyI+JytfLmpvaW4oIiIpKyI8L2ZpbGxzPiJ9KChkLlN0eWxlc3x8e30pLkZpbGxzfHxbXSksbVttLmxlbmd0aF09ZnVuY3Rpb24gWVgoZCl7dmFyIF89W107cmV0dXJuIGQuZm9yRWFjaChmdW5jdGlvbihtKXt2YXIgVD1bXTtULnB1c2gocW0obS5sZWZ0''@;'; put 'put ''LCJsZWZ0IikpLFQucHVzaChxbShtLnJpZ2h0LCJyaWdodCIpKSxULnB1c2gocW0obS50b3AsInRvcCIpKSxULnB1c2gocW0obS5ib3R0b20sImJvdHRvbSIpKSxULnB1c2gocW0obS5kaWFnb25hbCwiZGlhZ29uYWwiKSksXy5wdXNoKCI8Ym9yZGVyPiIrVC5qb2luKCIiKSsiPC9ib3JkZXI+''@;'; put 'put ''Iil9KSwnPGJvcmRlcnMgY291bnQ9IicrXy5sZW5ndGgrJyI+JytfLmpvaW4oIiIpKyI8L2JvcmRlcnM+In0oKGQuU3R5bGVzfHx7fSkuQm9yZGVyc3x8W10pLG1bbS5sZW5ndGhdPWZ1bmN0aW9uIEtYKGQpe3ZhciBfPVsnPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIg''@;'; put 'put ''Ym9yZGVySWQ9IjAiLz4nXTtpZihkKWZvcih2YXIgbT0xO208ZC5sZW5ndGg7KyttKV8ucHVzaChWcigieGYiLG51bGwse251bUZtdElkOmRbbV0ubnVtRm10SWR8fDAsZm9udElkOmRbbV0uZm9udElkfHwwLGZpbGxJZDpkW21dLmZpbGxJZHx8MCxib3JkZXJJZDpkW21dLmJvcmRlcklkfHww''@;'; put 'put ''fSkpO3JldHVybic8Y2VsbFN0eWxlWGZzIGNvdW50PSInK18ubGVuZ3RoKyciPicrXy5qb2luKCIiKSsiPC9jZWxsU3R5bGVYZnM+In0oXy5jZWxsU3R5bGVYZnMpLChUPWZ1bmN0aW9uIEdBKGQpe3ZhciBfPVtdO3JldHVybiBfW18ubGVuZ3RoXT1WcigiY2VsbFhmcyIsbnVsbCksZC5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKG0pe3ZhciBUPW0uYWxpZ25tZW50O2RlbGV0ZSBtLmFsaWdubWVudDt2YXIgUD1tLnByb3RlY3Rpb247ZGVsZXRlIG0ucHJvdGVjdGlvbjt2YXIgUT1UP1ZyKCJhbGlnbm1lbnQiLG51bGwsVCk6IiI7USs9UD9WcigicHJvdGVjdGlvbiIsbnVsbCx7aGlkZGVuOlAuaGlk''@;'; put 'put ''ZGVuPzE6MCxsb2NrZWQ6UC5lZGl0YWJsZT8wOjF9KToiIixfW18ubGVuZ3RoXT1WcigieGYiLFF8fG51bGwsbSksVCYmKG0uYWxpZ25tZW50PVQpLFAmJihtLnByb3RlY3Rpb249UCl9KSxfW18ubGVuZ3RoXT0iPC9jZWxsWGZzPiIsMj09PV8ubGVuZ3RoPyIiOihfWzBdPVZyKCJjZWxsWGZz''@;'; put 'put ''IixudWxsLHtjb3VudDpfLmxlbmd0aC0yfSkucmVwbGFjZSgiLz4iLCI+IiksXy5qb2luKCIiKSl9KF8uY2VsbFhmcykpJiYobVttLmxlbmd0aF09VCksbVttLmxlbmd0aF09ZnVuY3Rpb24gaXUoZCl7dmFyIF89Wyc8Y2VsbFN0eWxlIG5hbWU9Ik5vcm1hbCIgeGZJZD0iMCIgYnVpbHRpbklk''@;'; put 'put ''PSIwIi8+J107aWYoZClmb3IodmFyIG09MTttPGQubGVuZ3RoOysrbSlfLnB1c2goVnIoImNlbGxTdHlsZSIsbnVsbCx7bmFtZTpkW21dLm5hbWUseGZJZDptfSkpO3JldHVybic8Y2VsbFN0eWxlcyBjb3VudD0iJytfLmxlbmd0aCsnIj4nK18uam9pbigiIikrIjwvY2VsbFN0eWxlcz4ifShf''@;'; put 'put ''LmNlbGxTdHlsZVhmcyksZC5TdHlsZXMuRFhGfHwoZC5TdHlsZXMuRFhGPVtdKTt2YXIgUD1mdW5jdGlvbiBlUShkLF8sbSl7dmFyIFQ9Wyc8dGFibGVTdHlsZXMgY291bnQ9IicrKGR8fFtdKS5sZW5ndGgrJyIgZGVmYXVsdFRhYmxlU3R5bGU9IlRhYmxlU3R5bGVNZWRpdW05IiBkZWZhdWx0''@;'; put 'put ''UGl2b3RTdHlsZT0iUGl2b3RTdHlsZU1lZGl1bTQiJ107cmV0dXJuIGQmJmQubGVuZ3RoPyhUWzBdKz0iPiIsZC5mb3JFYWNoKGZ1bmN0aW9uKFApe1QucHVzaChmdW5jdGlvbiBRWChkLF8pe3ZhciBUPVtdO1sid2hvbGVUYWJsZSIsImhlYWRlclJvdyIsInRvdGFsUm93IiwiZmlyc3RDb2x1''@;'; put 'put ''bW4iLCJsYXN0Q29sdW1uIiwiZmlyc3RSb3dTdHJpcGUiLCJzZWNvbmRSb3dTdHJpcGUiLCJmaXJzdENvbHVtblN0cmlwZSIsInNlY29uZENvbHVtblN0cmlwZSIsImZpcnN0SGVhZGVyQ2VsbCIsImxhc3RIZWFkZXJDZWxsIiwiZmlyc3RUb3RhbENlbGwiLCJsYXN0VG90YWxDZWxsIiwiZmly''@;'; put 'put ''c3RTdWJ0b3RhbENvbHVtbiIsInNlY29uZFN1YnRvdGFsQ29sdW1uIiwidGhpcmRTdWJ0b3RhbENvbHVtbiIsImZpcnN0U3VidG90YWxSb3ciLCJzZWNvbmRTdWJ0b3RhbFJvdyIsInRoaXJkU3VidG90YWxSb3ciLCJibGFua1JvdyIsImZpcnN0Q29sdW1uU3ViaGVhZGluZyIsInNlY29uZENv''@;'; put 'put ''bHVtblN1YmhlYWRpbmciLCJ0aGlyZENvbHVtblN1YmhlYWRpbmciLCJmaXJzdFJvd1N1YmhlYWRpbmciLCJzZWNvbmRSb3dTdWJoZWFkaW5nIiwidGhpcmRSb3dTdWJoZWFkaW5nIiwicGFnZUZpZWxkTGFiZWxzIiwicGFnZUZpZWxkVmFsdWVzIl0uZm9yRWFjaChmdW5jdGlvbihRKXtpZihk''@;'; put 'put ''W1FdKXt2YXIgc2U9TmsoXyxkW1FdKTtULnB1c2goJzx0YWJsZVN0eWxlRWxlbWVudCBkeGZJZD0iJytzZSsnIiB0eXBlPSInK1ErJyIvPicpfX0pO3ZhciBQPSc8dGFibGVTdHlsZSBjb3VudD0iJytULmxlbmd0aCsnIiBwaXZvdD0iJysgKyEhZC5waXZvdCsnIiBuYW1lPSInK2QubmFtZSsn''@;'; put 'put ''Iic7cmV0dXJuIFQubGVuZ3RoP1ArIj4iK1Quam9pbigiIikrIjwvdGFibGVTdHlsZT4iOlArIi8+In0oUCxfKSl9KSxULmpvaW4oIiIpKyI8L3RhYmxlU3R5bGVzPiIpOlRbMF0rIi8+In0oKGQuU3R5bGVzfHx7fSkuVGFibGV8fFtdLGQuU3R5bGVzLkRYRik7cmV0dXJuIG1bbS5sZW5ndGhd''@;'; put 'put ''PWZ1bmN0aW9uIEdjKGQsXyl7aWYoIWQubGVuZ3RoKXJldHVybic8ZHhmcyBjb3VudD0iMCIvPic7dmFyIG09Wyc8ZHhmcyBjb3VudD0iJytkLmxlbmd0aCsnIj4nXTtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKFQpe20ucHVzaChmdW5jdGlvbiB0UShkLF8pe3ZhciBtPXtib2xkOiJiIixp''@;'; put 'put ''dGFsaWM6ImkiLHZhbGlnbjoidmVydEFsaWduIn0sVD1bIjxkeGY+Il0sUD1bXSxRPVtdLHNlPVtdLGRlPVtdO3JldHVybiBGZShkKS5mb3JFYWNoKGZ1bmN0aW9uKE5lKXtzd2l0Y2goTmUpe2Nhc2UiYm9sZCI6Y2FzZSJpdGFsaWMiOmNhc2Uic3RyaWtlIjpjYXNlInVuZGVybGluZSI6Y2Fz''@;'; put 'put ''ZSJjb2xvciI6Y2FzZSJ2YWxpZ24iOmNhc2Uic3oiOmNhc2UibmFtZSI6Y2FzZSJvdXRsaW5lIjpjYXNlInNoYWRvdyI6Y2FzZSJjaGFyc2V0IjpjYXNlImZhbWlseSI6Y2FzZSJjb25kZW5zZSI6Y2FzZSJleHRlbmQiOmNhc2Uic2NoZW1lIjpQLnB1c2goTmUpO2JyZWFrO2Nhc2UiYmdDb2xv''@;'; put 'put ''ciI6Y2FzZSJmZ0NvbG9yIjpzZS5wdXNoKE5lKTticmVhaztjYXNlInoiOlEucHVzaChOZSk7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjpjYXNlImxlZnQiOmNhc2UicmlnaHQiOmNhc2UiZGlhZ29uYWwiOmNhc2UidmVydGljYWwiOmNhc2UiaG9yaXpvbnRhbCI6ZGUucHVzaChOZSk7''@;'; put 'put ''YnJlYWs7Y2FzZSJwYXR0ZXJuVHlwZSI6Y2FzZSJkaWFnb25hbERvd24iOmNhc2UiZGlhZ29uYWxVcCI6Y2FzZSJzdG9wcyI6Y2FzZSJkZWdyZWUiOmJyZWFrO2RlZmF1bHQ6dGhyb3ciVW5yZWNvZ25pemVkICIrTmUrIiBpbiBEWEYifX0pLFAubGVuZ3RoPjAmJihULnB1c2goIjxmb250PiIp''@;'; put 'put ''LFAuZm9yRWFjaChmdW5jdGlvbihOZSl7c3dpdGNoKE5lKXtjYXNlImJvbGQiOmNhc2UiaXRhbGljIjpjYXNlInN0cmlrZSI6Y2FzZSJvdXRsaW5lIjpjYXNlInNoYWRvdyI6Y2FzZSJjb25kZW5zZSI6Y2FzZSJleHRlbmQiOlQucHVzaCgiPCIrKG1bTmVdfHxOZSkrJyB2YWw9IicrKGRbTmVd''@;'; put 'put ''PyIxIjoiMCIpKyciLz4nKTticmVhaztjYXNlImNvbG9yIjpULnB1c2goUGcoZFtOZV0sTmUsITApKTticmVhaztjYXNlImZhbWlseSI6Y2FzZSJuYW1lIjpjYXNlInN6IjpjYXNlInNjaGVtZSI6VC5wdXNoKCI8IisobVtOZV18fE5lKSsnIHZhbD0iJytkW05lXSsnIi8+Jyk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJ1bmRlcmxpbmUiOlQucHVzaCgnPHUgdmFsPSInK201W2RbTmVdfHwwXSsnIi8+Jyk7YnJlYWs7Y2FzZSJ2YWxpZ24iOlQucHVzaCgnPHZlcnRBbGlnbiB2YWw9IicrZC52YWxpZ24rKCJzdWIiPT1kLnZhbGlnbnx8InN1cGVyIj09ZC52YWxpZ24/InNjcmlwdCI6IiIpKyciLz4nKTticmVh''@;'; put 'put ''aztkZWZhdWx0OnRocm93IlVuc3VwcG9ydGVkICIrTmUrIiA6IGZvbnQgRFhGIn19KSxULnB1c2goIjwvZm9udD4iKSksUS5sZW5ndGg+MCYmVC5wdXNoKCc8bnVtRm10IGZvcm1hdENvZGU9IicrQmkoZC56KSsnIiBudW1GbXRJZD0iJytmdW5jdGlvbiBrNWUoZCxfKXtpZigibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIGQpcmV0dXJuIGQ7dmFyIG09Xy5yZXZzc2ZbZD8/IkdlbmVyYWwiXSxUPTYwO2lmKG51bGw9PW0pZm9yKDtUPDM5MjsrK1QpaWYobnVsbD09Xy5zc2ZbVF0pcmV0dXJuIEkubG9hZChkLFQpLF8uc3NmW1RdPWQsXy5yZXZzc2ZbZF09VCxUO3JldHVybiBtfShkLnosXykrJyIvPicp''@;'; put 'put ''LHNlLmxlbmd0aD4wJiYoVC5wdXNoKCI8ZmlsbD4iKSxULnB1c2goIjxwYXR0ZXJuRmlsbCIrKGQucGF0dGVyblR5cGU/JyBwYXR0ZXJuVHlwZT0iJytkLnBhdHRlcm5UeXBlKyciPic6Ij4iKSksc2UuZm9yRWFjaChmdW5jdGlvbihOZSl7c3dpdGNoKE5lKXtjYXNlInBhdHRlcm5UeXBlIjpi''@;'; put 'put ''cmVhaztjYXNlImZnQ29sb3IiOmNhc2UiYmdDb2xvciI6VC5wdXNoKFBnKGRbTmVdLE5lLCEwKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnN1cHBvcnRlZCAiK05lKyIgOiBmaWxsIERYRiJ9fSksVC5wdXNoKCI8L3BhdHRlcm5GaWxsPiIpLFQucHVzaCgiPC9maWxsPiIpKSxkZS5sZW5ndGg+''@;'; put 'put ''MD8oVC5wdXNoKFsiPGJvcmRlciIsbnVsbCE9ZC5kaWFnb25hbERvd24/JyBkaWFnb25hbERvd249IicrICshIWQuZGlhZ29uYWxEb3duKyciJzoiIixudWxsIT1kLmRpYWdvbmFsVXA/JyBkaWFnb25hbFVwPSInKyArISFkLmRpYWdvbmFsVXArJyInOiIiLCI+Il0uam9pbigiIikpLGRlLmZv''@;'; put 'put ''ckVhY2goZnVuY3Rpb24oTmUpe1QucHVzaChxbShkW05lXSxOZSkpfSksVC5wdXNoKCI8L2JvcmRlcj4iKSk6KG51bGwhPWQuZGlhZ29uYWxEb3dufHxudWxsIT1kLmRpYWdvbmFsVXApJiZULnB1c2goWyI8Ym9yZGVyIixudWxsIT1kLmRpYWdvbmFsRG93bj8nIGRpYWdvbmFsRG93bj0iJysg''@;'; put 'put ''KyEhZC5kaWFnb25hbERvd24rJyInOiIiLG51bGwhPWQuZGlhZ29uYWxVcD8nIGRpYWdvbmFsVXA9IicrICshIWQuZGlhZ29uYWxVcCsnIic6IiIsIi8+Il0uam9pbigiIikpLDE9PVQubGVuZ3RoPyI8ZHhmLz4iOlQuam9pbigiIikrIjwvZHhmPiJ9KFQsXykpfSksbS5qb2luKCIiKSsiPC9k''@;'; put 'put ''eGZzPiJ9KGQuU3R5bGVzLkRYRixfKSxtW20ubGVuZ3RoXT1QLG0ubGVuZ3RoPjImJihtW20ubGVuZ3RoXT0iPC9zdHlsZVNoZWV0PiIsbVsxXT1tWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxtLmpvaW4oIiIpfWZ1bmN0aW9uICRBKGQsXyxtKXttfHwobT1Gcig2KzQqXy5sZW5ndGgpKSxtLndy''@;'; put 'put ''aXRlX3NoaWZ0KDIsZCksa2koXyxtKTt2YXIgVD1tLmxlbmd0aD5tLmw/bS5zbGljZSgwLG0ubCk6bTtyZXR1cm4gbnVsbD09bS5sJiYobS5sPW0ubGVuZ3RoKSxUfWZ1bmN0aW9uIHJRKGQpe3JldHVybntjb2xvcjpObChkKSxwb3M6cXMoZCl9fXVhLlNUWT0iaHR0cDovL3NjaGVtYXMub3Bl''@;'; put 'put ''bnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zdHlsZXMiO3ZhciBTOD1bIm5vbmUiLCJzb2xpZCIsIm1lZGl1bUdyYXkiLCJkYXJrR3JheSIsImxpZ2h0R3JheSIsImRhcmtIb3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJkYXJr''@;'; put 'put ''VXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0RG93biIsImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRyZWxsaXMiLCJncmF5MTI1IiwiZ3JheTA2MjUiXSxfeT1jZShTOCksS0E9WyJnZW5lcmFsIiwibGVmdCIs''@;'; put 'put ''ImNlbnRlciIsInJpZ2h0IiwiZmlsbCIsImp1c3RpZnkiLCJjZW50ZXJDb250aW51b3VzIiwiZGlzdHJpYnV0ZWQiXSxiUz1bInRvcCIsImNlbnRlciIsImJvdHRvbSIsImp1c3RpZnkiLCJkaXN0cmlidXRlZCJdO2Z1bmN0aW9uIGtIKGQsXyxtKXttfHwobT1GcigxNikpLG0ud3JpdGVfc2hp''@;'; put 'put ''ZnQoMixffHwwKSxtLndyaXRlX3NoaWZ0KDIsZC5udW1GbXRJZHx8MCksbS53cml0ZV9zaGlmdCgyLGQuZm9udElkfHwwKSxtLndyaXRlX3NoaWZ0KDIsZC5maWxsSWR8fDApLG0ud3JpdGVfc2hpZnQoMixkLmJvcmRlcklkfHwwKSxtLndyaXRlX3NoaWZ0KDEsZC5hbGlnbm1lbnQmJmQuYWxp''@;'; put 'put ''Z25tZW50LnRleHRSb3RhdGlvbnx8MCksbS53cml0ZV9zaGlmdCgxLGQuYWxpZ25tZW50JiZkLmFsaWdubWVudC5pbmRlbnR8fDApO3ZhciBUPTAsUD0wO2lmKGQuYWxpZ25tZW50KXtpZihkLmFsaWdubWVudC5ob3Jpem9udGFsKXt2YXIgUT1LQS5pbmRleE9mKGQuYWxpZ25tZW50Lmhvcml6''@;'; put 'put ''b250YWwpO1E8MCYmKFE9MCksVHw9UX1pZihkLmFsaWdubWVudC52ZXJ0aWNhbCl7dmFyIHNlPWJTLmluZGV4T2YoZC5hbGlnbm1lbnQudmVydGljYWwpO3NlPDAmJihzZT0yKSxUfD1zZTw8M31kLmFsaWdubWVudC53cmFwVGV4dCYmKFR8PTY0KSxkLmFsaWdubWVudC5zaHJpbmtUb0ZpdCYm''@;'; put 'put ''KFB8PTEpfXJldHVybiBtLndyaXRlX3NoaWZ0KDEsVCksbS53cml0ZV9zaGlmdCgxLFApLG0ud3JpdGVfc2hpZnQoMSwwKSxtLndyaXRlX3NoaWZ0KDEsMCksbX12YXIgRTg9WyJub25lIiwidGhpbiIsIm1lZGl1bSIsImRhc2hlZCIsImRvdHRlZCIsInRoaWNrIiwiZG91YmxlIiwiaGFpciIs''@;'; put 'put ''Im1lZGl1bURhc2hlZCIsImRhc2hEb3QiLCJtZWRpdW1EYXNoRG90IiwiZGFzaERvdERvdCIsIm1lZGl1bURhc2hEb3REb3QiLCJzbGFudERhc2hEb3QiXTtmdW5jdGlvbiB5eShkKXt2YXIgXz1kLnJlYWRfc2hpZnQoMSk7ZC5sKz0xO3ZhciBtPU5sKGQpO3JldHVybntzdHlsZTpFOFtfXSxj''@;'; put 'put ''b2xvcjptfX1mdW5jdGlvbiBrOShkLF8pe3JldHVybiBffHwoXz1GcigxMCkpLGQmJmQuc3R5bGUmJiIiIT1kLnN0eWxlJiYibm9uZSIhPWQuc3R5bGUmJi0xIT09RTguaW5kZXhPZihkLnN0eWxlKT8oXy53cml0ZV9zaGlmdCgxLEU4LmluZGV4T2YoZC5zdHlsZSkpLF8ud3JpdGVfc2hpZnQo''@;'; put 'put ''MSwwKSxkLmNvbG9yP24xKGQuY29sb3IsXyk6KF8ud3JpdGVfc2hpZnQoNCwwKSxfLndyaXRlX3NoaWZ0KDQsMCkpKTooXy53cml0ZV9zaGlmdCgxLDApLF8ud3JpdGVfc2hpZnQoMSwwKSxfLndyaXRlX3NoaWZ0KDQsMCksXy53cml0ZV9zaGlmdCg0LDApKSxffWZ1bmN0aW9uIFhBKGQsXyl7''@;'; put 'put ''cmV0dXJuIF98fChfPUZyKDUyKSksXy53cml0ZV9zaGlmdCg0LGQueGZJZCksXy53cml0ZV9zaGlmdCgyLDEpLF8ud3JpdGVfc2hpZnQoMSwrZC5idWlsdGluSWQpLF8ud3JpdGVfc2hpZnQoMSwwKSx5MihkLm5hbWV8fCIiLF8pLF8ubGVuZ3RoPl8ubD9fLnNsaWNlKDAsXy5sKTpffWZ1bmN0''@;'; put 'put ''aW9uIHk1KGQsXyl7IV98fCFfLnRoZW1lRWxlbWVudHN8fCFfLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lfHxudWxsIT1kLnRoZW1lJiYoZC5yZ2I9aDUoXy50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtkLnRoZW1lXS5yZ2IsZC50aW50fHwwKSl9ZnVuY3Rpb24gdGsoZCxfKXt2YXIgbT1NYygp''@;'; put 'put ''O3JldHVybiBJaShtLCJCcnRCZWdpblN0eWxlU2hlZXQiKSxmdW5jdGlvbiBieShkLF8pe2lmKF8pe3ZhciBtPTA7W1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihUKXtmb3IodmFyIFA9VFswXTtQPD1UWzFdOysrUCludWxsIT1fW1BdJiYrK219KSww''@;'; put 'put ''IT1tJiYoSWkoZCwiQnJ0QmVnaW5GbXRzIixscihtKSksW1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihUKXtmb3IodmFyIFA9VFswXTtQPD1UWzFdOysrUCludWxsIT1fW1BdJiZJaShkLCJCcnRGbXQiLCRBKFAsX1tQXSkpfSksSWkoZCwiQnJ0RW5k''@;'; put 'put ''Rm10cyIpKX19KG0sZC5TU0YpLGZ1bmN0aW9uIEpBKGQsXyl7dmFyIG09Xy5sZW5ndGg7MCE9bSYmKElpKGQsIkJydEJlZ2luRm9udHMiLGxyKG0pKSxfLmZvckVhY2goZnVuY3Rpb24oVCl7SWkoZCwiQnJ0Rm9udCIsZnVuY3Rpb24geEgoZCxfKXtffHwoXz1GcigxNTMpKSxfLndyaXRlX3No''@;'; put 'put ''aWZ0KDIsMjAqZC5zeiksZnVuY3Rpb24gTjAoZCxfKXtffHwoXz1GcigyKSksXy53cml0ZV9zaGlmdCgxLChkLml0YWxpYz8yOjApfChkLnN0cmlrZT84OjApfChkLm91dGxpbmU/MTY6MCl8KGQuc2hhZG93PzMyOjApfChkLmNvbmRlbnNlPzY0OjApfChkLmV4dGVuZD8xMjg6MCkpLF8ud3Jp''@;'; put 'put ''dGVfc2hpZnQoMSwwKX0oZCxfKSxfLndyaXRlX3NoaWZ0KDIsZC5ib2xkPzcwMDo0MDApO3ZhciBtPTA7InN1cGVyIj09ZC52YWxpZ24/bT0xOiJzdWIiPT1kLnZhbGlnbiYmKG09MiksXy53cml0ZV9zaGlmdCgyLG0pLF8ud3JpdGVfc2hpZnQoMSxkLnVuZGVybGluZXx8MCksXy53cml0ZV9z''@;'; put 'put ''aGlmdCgxLGQuZmFtaWx5fHwwKSxfLndyaXRlX3NoaWZ0KDEsZC5jaGFyc2V0fHwwKSxfLndyaXRlX3NoaWZ0KDEsMCksbjEoZC5jb2xvcixfKTt2YXIgVD0wO3JldHVybiJtYWpvciI9PWQuc2NoZW1lJiYoVD0xKSwibWlub3IiPT1kLnNjaGVtZSYmKFQ9MiksXy53cml0ZV9zaGlmdCgxLFQp''@;'; put 'put ''LGtpKGQubmFtZSxfKSxfLmxlbmd0aD5fLmw/Xy5zbGljZSgwLF8ubCk6X30oVCkpfSksSWkoZCwiQnJ0RW5kRm9udHMiKSl9KG0sKGQuU3R5bGVzfHx7fSkuRm9udHN8fFtdKSxmdW5jdGlvbiB3UyhkLF8pe3ZhciBtPV8ubGVuZ3RoOzAhPW0mJihJaShkLCJCcnRCZWdpbkZpbGxzIixsciht''@;'; put 'put ''KSksXy5mb3JFYWNoKGZ1bmN0aW9uKFQpe0lpKGQsIkJydEZpbGwiLGZ1bmN0aW9uIEFIKGQsXyl7X3x8KF89RnIoODQpKTt2YXIgbT1feVtkLnBhdHRlcm5UeXBlXTtudWxsPT1tJiYobT00MCksXy53cml0ZV9zaGlmdCg0LG09K20pO3ZhciBUPTA7aWYoNDAhPW0pZm9yKG4xKGQuZmdDb2xv''@;'; put 'put ''cnx8e2luZGV4OjY0fSxfKSxuMShkLmJnQ29sb3J8fHtpbmRleDo2NX0sXyk7VDwxMjsrK1QpXy53cml0ZV9zaGlmdCg0LDApO2Vsc2V7Zm9yKDtUPDQ7KytUKV8ud3JpdGVfc2hpZnQoNCwwKTtmb3IoO1Q8MTI7KytUKV8ud3JpdGVfc2hpZnQoNCwwKX1yZXR1cm4gXy5sZW5ndGg+Xy5sP18u''@;'; put 'put ''c2xpY2UoMCxfLmwpOl99KFQpKX0pLElpKGQsIkJydEVuZEZpbGxzIikpfShtLChkLlN0eWxlc3x8e30pLkZpbGxzfHxbXSksZnVuY3Rpb24gZDVlKGQsXyl7dmFyIG09Xy5sZW5ndGg7MCE9bSYmKElpKGQsIkJydEJlZ2luQm9yZGVycyIsbHIobSkpLF8uZm9yRWFjaChmdW5jdGlvbihUKXtJ''@;'; put 'put ''aShkLCJCcnRCb3JkZXIiLGZ1bmN0aW9uIFI5KGQsXyl7cmV0dXJuIF98fChfPUZyKDUxKSksXy53cml0ZV9zaGlmdCgxLDApLGs5KGQudG9wLF8pLGs5KGQuYm90dG9tLF8pLGs5KGQubGVmdCxfKSxrOShkLnJpZ2h0LF8pLGs5KG51bGwsXyksXy5sZW5ndGg+Xy5sP18uc2xpY2UoMCxfLmwp''@;'; put 'put ''Ol99KFQpKX0pLElpKGQsIkJydEVuZEJvcmRlcnMiKSl9KG0sKGQuU3R5bGVzfHx7fSkuQm9yZGVyc3x8W10pLGZ1bmN0aW9uIElIKGQsXyl7dmFyIG09MTtpZihfJiYobT1fLmxlbmd0aCksSWkoZCwiQnJ0QmVnaW5DZWxsU3R5bGVYRnMiLGxyKG0pKSxJaShkLCJCcnRYRiIsa0goe251bUZt''@;'; put 'put ''dElkOjAsZm9udElkOjAsZmlsbElkOjAsYm9yZGVySWQ6MH0sNjU1MzUpKSxfKWZvcih2YXIgVD0xO1Q8Xy5sZW5ndGg7KytUKUlpKGQsIkJydFhGIixrSCh7bnVtRm10SWQ6X1tUXS5udW1GbXRJZHx8MCxmb250SWQ6X1tUXS5mb250SWR8fDAsZmlsbElkOl9bVF0uZmlsbElkfHwwLGJvcmRl''@;'; put 'put ''cklkOl9bVF0uYm9yZGVySWR8fDB9LDY1NTM1KSk7SWkoZCwiQnJ0RW5kQ2VsbFN0eWxlWEZzIil9KG0sXy5jZWxsU3R5bGVYZnMpLGZ1bmN0aW9uIERIKGQsXyl7SWkoZCwiQnJ0QmVnaW5DZWxsWEZzIixscihfLmxlbmd0aCkpLF8uZm9yRWFjaChmdW5jdGlvbihtKXtJaShkLCJCcnRYRiIs''@;'; put 'put ''a0gobSwwKSl9KSxJaShkLCJCcnRFbmRDZWxsWEZzIil9KG0sXy5jZWxsWGZzKSxmdW5jdGlvbiBhUShkLF8pe3ZhciBtPTE7aWYoXyYmKG09Xy5sZW5ndGgpLElpKGQsIkJydEJlZ2luU3R5bGVzIixscihtKSksSWkoZCwiQnJ0U3R5bGUiLFhBKHt4ZklkOjAsYnVpbHRpbklkOjAsbmFtZToi''@;'; put 'put ''Tm9ybWFsIn0pKSxfKWZvcih2YXIgVD0xO1Q8Xy5sZW5ndGg7KytUKUlpKGQsIkJydFN0eWxlIixYQSh7eGZJZDpULGJ1aWx0aW5JZDowLG5hbWU6X1tUXS5uYW1lfSkpO0lpKGQsIkJydEVuZFN0eWxlcyIpfShtLF8uY2VsbFN0eWxlWGZzKSxmdW5jdGlvbiBGZyhkKXtJaShkLCJCcnRCZWdp''@;'; put 'put ''bkRYRnMiLGxyKDApKSxJaShkLCJCcnRFbmREWEZzIil9KG0pLGZ1bmN0aW9uIHNRKGQpe0lpKGQsIkJydEJlZ2luVGFibGVTdHlsZXMiLGZ1bmN0aW9uIFFBKGQsXyxtKXt2YXIgVD1GcigyMDUyKTtyZXR1cm4gVC53cml0ZV9zaGlmdCg0LGQpLHkyKF8sVCkseTIobSxUKSxULmxlbmd0aD5U''@;'; put 'put ''Lmw/VC5zbGljZSgwLFQubCk6VH0oMCwiVGFibGVTdHlsZU1lZGl1bTkiLCJQaXZvdFN0eWxlTWVkaXVtNCIpKSxJaShkLCJCcnRFbmRUYWJsZVN0eWxlcyIpfShtKSxJaShtLCJCcnRFbmRTdHlsZVNoZWV0IiksbS5lbmQoKX11YS5USEVNRT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1h''@;'; put 'put ''dHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy90aGVtZSI7dmFyIExIPVsiPC9hOmx0MT4iLCI8L2E6ZGsxPiIsIjwvYTpsdDI+IiwiPC9hOmRrMj4iLCI8L2E6YWNjZW50MT4iLCI8L2E6YWNjZW50Mj4iLCI8L2E6YWNjZW50Mz4iLCI8L2E6YWNjZW50ND4iLCI8L2E6''@;'; put 'put ''YWNjZW50NT4iLCI8L2E6YWNjZW50Nj4iLCI8L2E6aGxpbms+IiwiPC9hOmZvbEhsaW5rPiJdO2Z1bmN0aW9uIENTKGQsXyxtKXtfLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lPVtdO3ZhciBUPXt9OyhkWzBdLm1hdGNoKEJuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUCl7dmFyIFE9WHIoUCk7''@;'; put 'put ''c3dpdGNoKFFbMF0pe2Nhc2UiPGE6Y2xyU2NoZW1lIjpjYXNlIjwvYTpjbHJTY2hlbWU+IjpjYXNlIjwvYTpzcmdiQ2xyPiI6Y2FzZSI8L2E6c3lzQ2xyPiI6YnJlYWs7Y2FzZSI8YTpzcmdiQ2xyIjpULnJnYj1RLnZhbDticmVhaztjYXNlIjxhOnN5c0NsciI6VC5yZ2I9US5sYXN0Q2xyO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiPGE6ZGsxPiI6Y2FzZSI8L2E6ZGsxPiI6Y2FzZSI8YTpsdDE+IjpjYXNlIjwvYTpsdDE+IjpjYXNlIjxhOmRrMj4iOmNhc2UiPC9hOmRrMj4iOmNhc2UiPGE6bHQyPiI6Y2FzZSI8L2E6bHQyPiI6Y2FzZSI8YTphY2NlbnQxPiI6Y2FzZSI8L2E6YWNjZW50MT4iOmNhc2UiPGE6''@;'; put 'put ''YWNjZW50Mj4iOmNhc2UiPC9hOmFjY2VudDI+IjpjYXNlIjxhOmFjY2VudDM+IjpjYXNlIjwvYTphY2NlbnQzPiI6Y2FzZSI8YTphY2NlbnQ0PiI6Y2FzZSI8L2E6YWNjZW50ND4iOmNhc2UiPGE6YWNjZW50NT4iOmNhc2UiPC9hOmFjY2VudDU+IjpjYXNlIjxhOmFjY2VudDY+IjpjYXNlIjwv''@;'; put 'put ''YTphY2NlbnQ2PiI6Y2FzZSI8YTpobGluaz4iOmNhc2UiPC9hOmhsaW5rPiI6Y2FzZSI8YTpmb2xIbGluaz4iOmNhc2UiPC9hOmZvbEhsaW5rPiI6Ii8iPT09UVswXS5jaGFyQXQoMSk/KF8udGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbTEguaW5kZXhPZihRWzBdKV09VCxUPXt9KTpULm5hbWU9''@;'; put 'put ''UVswXS5zbGljZSgzLFFbMF0ubGVuZ3RoLTEpO2JyZWFrO2RlZmF1bHQ6aWYobSYmbS5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgIitRWzBdKyIgaW4gY2xyU2NoZW1lIil9fSl9ZnVuY3Rpb24gbmsoKXt9ZnVuY3Rpb24gbFEoKXt9dmFyIE9IPS88YTpjbHJTY2hlbWUoW14+''@;'; put 'put ''XSopPltcc1xTXSo8XC9hOmNsclNjaGVtZT4vLE5IPS88YTpmb250U2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpmb250U2NoZW1lPi8sRkg9LzxhOmZtdFNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Zm10U2NoZW1lPi8sY1E9LzxhOnRoZW1lRWxlbWVudHMoW14+XSopPltcc1xTXSo8XC9h''@;'; put 'put ''OnRoZW1lRWxlbWVudHM+LztmdW5jdGlvbiBJOShkLF8pe2lmKCFkfHwwPT09ZC5sZW5ndGgpcmV0dXJuIEk5KHVRKCkpO3ZhciBtLFQ9e307aWYoIShtPWQubWF0Y2goY1EpKSl0aHJvdyBuZXcgRXJyb3IoInRoZW1lRWxlbWVudHMgbm90IGZvdW5kIGluIHRoZW1lIik7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uIFBIKGQsXyxtKXt2YXIgVDtfLnRoZW1lRWxlbWVudHM9e30sW1siY2xyU2NoZW1lIixPSCxDU10sWyJmb250U2NoZW1lIixOSCxua10sWyJmbXRTY2hlbWUiLEZILGxRXV0uZm9yRWFjaChmdW5jdGlvbihQKXtpZighKFQ9ZC5tYXRjaChQWzFdKSkpdGhyb3cgbmV3IEVycm9yKFBbMF0r''@;'; put 'put ''IiBub3QgZm91bmQgaW4gdGhlbWVFbGVtZW50cyIpO1BbMl0oVCxfLG0pfSl9KG1bMF0sVCxfKSxULnJhdz1kLFR9ZnVuY3Rpb24gdVEoZCxfKXtpZihfJiZfLnRoZW1lWExTWClyZXR1cm4gXy50aGVtZVhMU1g7aWYoZCYmInN0cmluZyI9PXR5cGVvZiBkLnJhdylyZXR1cm4gZC5yYXc7dmFy''@;'; put 'put ''IG09W3BvXTtyZXR1cm4gbVttLmxlbmd0aF09JzxhOnRoZW1lIHhtbG5zOmE9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9tYWluIiBuYW1lPSJPZmZpY2UgVGhlbWUiPicsbVttLmxlbmd0aF09IjxhOnRoZW1lRWxlbWVudHM+IixtW20ubGVuZ3Ro''@;'; put 'put ''XT0nPGE6Y2xyU2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxtW20ubGVuZ3RoXT0nPGE6ZGsxPjxhOnN5c0NsciB2YWw9IndpbmRvd1RleHQiIGxhc3RDbHI9IjAwMDAwMCIvPjwvYTpkazE+JyxtW20ubGVuZ3RoXT0nPGE6bHQxPjxhOnN5c0NsciB2YWw9IndpbmRvdyIgbGFzdENscj0iRkZGRkZG''@;'; put 'put ''Ii8+PC9hOmx0MT4nLG1bbS5sZW5ndGhdPSc8YTpkazI+PGE6c3JnYkNsciB2YWw9IjFGNDk3RCIvPjwvYTpkazI+JyxtW20ubGVuZ3RoXT0nPGE6bHQyPjxhOnNyZ2JDbHIgdmFsPSJFRUVDRTEiLz48L2E6bHQyPicsbVttLmxlbmd0aF09JzxhOmFjY2VudDE+PGE6c3JnYkNsciB2YWw9IjRG''@;'; put 'put ''ODFCRCIvPjwvYTphY2NlbnQxPicsbVttLmxlbmd0aF09JzxhOmFjY2VudDI+PGE6c3JnYkNsciB2YWw9IkMwNTA0RCIvPjwvYTphY2NlbnQyPicsbVttLmxlbmd0aF09JzxhOmFjY2VudDM+PGE6c3JnYkNsciB2YWw9IjlCQkI1OSIvPjwvYTphY2NlbnQzPicsbVttLmxlbmd0aF09JzxhOmFj''@;'; put 'put ''Y2VudDQ+PGE6c3JnYkNsciB2YWw9IjgwNjRBMiIvPjwvYTphY2NlbnQ0PicsbVttLmxlbmd0aF09JzxhOmFjY2VudDU+PGE6c3JnYkNsciB2YWw9IjRCQUNDNiIvPjwvYTphY2NlbnQ1PicsbVttLmxlbmd0aF09JzxhOmFjY2VudDY+PGE6c3JnYkNsciB2YWw9IkY3OTY0NiIvPjwvYTphY2Nl''@;'; put 'put ''bnQ2PicsbVttLmxlbmd0aF09JzxhOmhsaW5rPjxhOnNyZ2JDbHIgdmFsPSIwMDAwRkYiLz48L2E6aGxpbms+JyxtW20ubGVuZ3RoXT0nPGE6Zm9sSGxpbms+PGE6c3JnYkNsciB2YWw9IjgwMDA4MCIvPjwvYTpmb2xIbGluaz4nLG1bbS5sZW5ndGhdPSI8L2E6Y2xyU2NoZW1lPiIsbVttLmxl''@;'; put 'put ''bmd0aF09JzxhOmZvbnRTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLG1bbS5sZW5ndGhdPSI8YTptYWpvckZvbnQ+IixtW20ubGVuZ3RoXT0nPGE6bGF0aW4gdHlwZWZhY2U9IkNhbWJyaWEiLz4nLG1bbS5sZW5ndGhdPSc8YTplYSB0eXBlZmFjZT0iIi8+JyxtW20ubGVuZ3RoXT0nPGE6Y3MgdHlw''@;'; put 'put ''ZWZhY2U9IiIvPicsbVttLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJKcGFuIiB0eXBlZmFjZT0iXHVmZjJkXHVmZjMzIFx1ZmYzMFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZiIvPicsbVttLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5nIiB0eXBlZmFjZT0iXHViOWQxXHVjNzQwIFx1''@;'; put 'put ''YWNlMFx1YjUxNSIvPicsbVttLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5zIiB0eXBlZmFjZT0iXHU1YjhiXHU0ZjUzIi8+JyxtW20ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSJcdTY1YjBcdTdkMzBcdTY2MGVcdTlhZDQiLz4nLG1bbS5sZW5ndGhdPSc8''@;'; put 'put ''YTpmb250IHNjcmlwdD0iQXJhYiIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPicsbVttLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIZWJyIiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+JyxtW20ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWkiIHR5cGVmYWNlPSJUYWhv''@;'; put 'put ''bWEiLz4nLG1bbS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRXRoaSIgdHlwZWZhY2U9Ik55YWxhIi8+JyxtW20ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkJlbmciIHR5cGVmYWNlPSJWcmluZGEiLz4nLG1bbS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VqciIgdHlwZWZhY2U9IlNo''@;'; put 'put ''cnV0aSIvPicsbVttLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLaG1yIiB0eXBlZmFjZT0iTW9vbEJvcmFuIi8+JyxtW20ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktuZGEiIHR5cGVmYWNlPSJUdW5nYSIvPicsbVttLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdXJ1IiB0eXBlZmFj''@;'; put 'put ''ZT0iUmFhdmkiLz4nLG1bbS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2FucyIgdHlwZWZhY2U9IkV1cGhlbWlhIi8+JyxtW20ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNoZXIiIHR5cGVmYWNlPSJQbGFudGFnZW5ldCBDaGVyb2tlZSIvPicsbVttLmxlbmd0aF09JzxhOmZvbnQgc2Ny''@;'; put 'put ''aXB0PSJZaWlpIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+JyxtW20ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRpYnQiIHR5cGVmYWNlPSJNaWNyb3NvZnQgSGltYWxheWEiLz4nLG1bbS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhYSIgdHlwZWZhY2U9Ik1WIEJvbGki''@;'; put 'put ''Lz4nLG1bbS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlwZWZhY2U9Ik1hbmdhbCIvPicsbVttLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUZWx1IiB0eXBlZmFjZT0iR2F1dGFtaSIvPicsbVttLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUYW1sIiB0eXBlZmFjZT0iTGF0''@;'; put 'put ''aGEiLz4nLG1bbS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU3lyYyIgdHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRlc3NhIi8+JyxtW20ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik9yeWEiIHR5cGVmYWNlPSJLYWxpbmdhIi8+JyxtW20ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1seW0i''@;'; put 'put ''IHR5cGVmYWNlPSJLYXJ0aWthIi8+JyxtW20ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNlPSJEb2tDaGFtcGEiLz4nLG1bbS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU2luaCIgdHlwZWZhY2U9Iklza29vbGEgUG90YSIvPicsbVttLmxlbmd0aF09JzxhOmZvbnQg''@;'; put 'put ''c2NyaXB0PSJNb25nIiB0eXBlZmFjZT0iTW9uZ29saWFuIEJhaXRpIi8+JyxtW20ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlZpZXQiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLG1bbS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVWlnaCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBV''@;'; put 'put ''aWdodXIiLz4nLG1bbS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR2VvciIgdHlwZWZhY2U9IlN5bGZhZW4iLz4nLG1bbS5sZW5ndGhdPSI8L2E6bWFqb3JGb250PiIsbVttLmxlbmd0aF09IjxhOm1pbm9yRm9udD4iLG1bbS5sZW5ndGhdPSc8YTpsYXRpbiB0eXBlZmFjZT0iQ2FsaWJyaSIv''@;'; put 'put ''PicsbVttLmxlbmd0aF09JzxhOmVhIHR5cGVmYWNlPSIiLz4nLG1bbS5sZW5ndGhdPSc8YTpjcyB0eXBlZmFjZT0iIi8+JyxtW20ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkpwYW4iIHR5cGVmYWNlPSJcdWZmMmRcdWZmMzMgXHVmZjMwXHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmIi8+Jyxt''@;'; put 'put ''W20ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbmciIHR5cGVmYWNlPSJcdWI5ZDFcdWM3NDAgXHVhY2UwXHViNTE1Ii8+JyxtW20ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnMiIHR5cGVmYWNlPSJcdTViOGJcdTRmNTMiLz4nLG1bbS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0i''@;'; put 'put ''SGFudCIgdHlwZWZhY2U9Ilx1NjViMFx1N2QzMFx1NjYwZVx1OWFkNCIvPicsbVttLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJBcmFiIiB0eXBlZmFjZT0iQXJpYWwiLz4nLG1bbS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9IkFyaWFsIi8+JyxtW20ubGVuZ3Ro''@;'; put 'put ''XT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWkiIHR5cGVmYWNlPSJUYWhvbWEiLz4nLG1bbS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRXRoaSIgdHlwZWZhY2U9Ik55YWxhIi8+JyxtW20ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkJlbmciIHR5cGVmYWNlPSJWcmluZGEiLz4nLG1bbS5sZW5n''@;'; put 'put ''dGhdPSc8YTpmb250IHNjcmlwdD0iR3VqciIgdHlwZWZhY2U9IlNocnV0aSIvPicsbVttLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLaG1yIiB0eXBlZmFjZT0iRGF1blBlbmgiLz4nLG1bbS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS25kYSIgdHlwZWZhY2U9IlR1bmdhIi8+JyxtW20u''@;'; put 'put ''bGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1cnUiIHR5cGVmYWNlPSJSYWF2aSIvPicsbVttLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDYW5zIiB0eXBlZmFjZT0iRXVwaGVtaWEiLz4nLG1bbS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2hlciIgdHlwZWZhY2U9IlBsYW50YWdlbmV0''@;'; put 'put ''IENoZXJva2VlIi8+JyxtW20ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IllpaWkiIHR5cGVmYWNlPSJNaWNyb3NvZnQgWWkgQmFpdGkiLz4nLG1bbS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGlidCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBIaW1hbGF5YSIvPicsbVttLmxlbmd0aF09Jzxh''@;'; put 'put ''OmZvbnQgc2NyaXB0PSJUaGFhIiB0eXBlZmFjZT0iTVYgQm9saSIvPicsbVttLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJEZXZhIiB0eXBlZmFjZT0iTWFuZ2FsIi8+JyxtW20ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRlbHUiIHR5cGVmYWNlPSJHYXV0YW1pIi8+JyxtW20ubGVuZ3Ro''@;'; put 'put ''XT0nPGE6Zm9udCBzY3JpcHQ9IlRhbWwiIHR5cGVmYWNlPSJMYXRoYSIvPicsbVttLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTeXJjIiB0eXBlZmFjZT0iRXN0cmFuZ2VsbyBFZGVzc2EiLz4nLG1bbS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iT3J5YSIgdHlwZWZhY2U9IkthbGluZ2Ei''@;'; put 'put ''Lz4nLG1bbS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTWx5bSIgdHlwZWZhY2U9IkthcnRpa2EiLz4nLG1bbS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTGFvbyIgdHlwZWZhY2U9IkRva0NoYW1wYSIvPicsbVttLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTaW5oIiB0eXBlZmFjZT0i''@;'; put 'put ''SXNrb29sYSBQb3RhIi8+JyxtW20ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1vbmciIHR5cGVmYWNlPSJNb25nb2xpYW4gQmFpdGkiLz4nLG1bbS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVmlldCIgdHlwZWZhY2U9IkFyaWFsIi8+JyxtW20ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9''@;'; put 'put ''IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8+JyxtW20ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8+JyxtW20ubGVuZ3RoXT0iPC9hOm1pbm9yRm9udD4iLG1bbS5sZW5ndGhdPSI8L2E6Zm9udFNjaGVtZT4iLG1bbS5sZW5ndGhd''@;'; put 'put ''PSc8YTpmbXRTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLG1bbS5sZW5ndGhdPSI8YTpmaWxsU3R5bGVMc3Q+IixtW20ubGVuZ3RoXT0nPGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD4nLG1bbS5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hh''@;'; put 'put ''cGU9IjEiPicsbVttLmxlbmd0aF09IjxhOmdzTHN0PiIsbVttLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI1MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsbVttLmxlbmd0aF09''@;'; put 'put ''JzxhOmdzIHBvcz0iMzUwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMzcwMDAiLz48YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLG1bbS5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhD''@;'; put 'put ''bHIiPjxhOnRpbnQgdmFsPSIxNTAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsbVttLmxlbmd0aF09IjwvYTpnc0xzdD4iLG1bbS5sZW5ndGhdPSc8YTpsaW4gYW5nPSIxNjIwMDAwMCIgc2NhbGVkPSIxIi8+JyxtW20ubGVuZ3RoXT0iPC9hOmdy''@;'; put 'put ''YWRGaWxsPiIsbVttLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxtW20ubGVuZ3RoXT0iPGE6Z3NMc3Q+IixtW20ubGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjEwMDAwMCIvPjxhOnNoYWRlIHZhbD0i''@;'; put 'put ''MTAwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMTMwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxtW20ubGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNTAwMDAiLz48YTpzaGFkZSB2YWw9IjEwMDAwMCIvPjxhOnNhdE1v''@;'; put 'put ''ZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsbVttLmxlbmd0aF09IjwvYTpnc0xzdD4iLG1bbS5sZW5ndGhdPSc8YTpsaW4gYW5nPSIxNjIwMDAwMCIgc2NhbGVkPSIwIi8+JyxtW20ubGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsbVttLmxlbmd0aF09IjwvYTpmaWxsU3R5''@;'; put 'put ''bGVMc3Q+IixtW20ubGVuZ3RoXT0iPGE6bG5TdHlsZUxzdD4iLG1bbS5sZW5ndGhdPSc8YTpsbiB3PSI5NTI1IiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iOTUwMDAiLz48YTpzYXRN''@;'; put 'put ''b2QgdmFsPSIxMDUwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLG1bbS5sZW5ndGhdPSc8YTpsbiB3PSIyNTQwMCIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNs''@;'; put 'put ''ciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+PC9hOmxuPicsbVttLmxlbmd0aF09JzxhOmxuIHc9IjM4MTAwIiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48''@;'; put 'put ''L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxtW20ubGVuZ3RoXT0iPC9hOmxuU3R5bGVMc3Q+IixtW20ubGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGVMc3Q+IixtW20ubGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixtW20ubGVuZ3RoXT0iPGE6ZWZmZWN0THN0''@;'; put 'put ''PiIsbVttLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjAwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM4MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hkdz4nLG1b''@;'; put 'put ''bS5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIsbVttLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLG1bbS5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLG1bbS5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixtW20ubGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBkaXN0PSIy''@;'; put 'put ''MzAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzUwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3PicsbVttLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixtW20ubGVuZ3RoXT0iPC9hOmVmZmVjdFN0''@;'; put 'put ''eWxlPiIsbVttLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIsbVttLmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLG1bbS5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIzMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9''@;'; put 'put ''IjAwMDAwMCI+PGE6YWxwaGEgdmFsPSIzNTAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+JyxtW20ubGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLG1bbS5sZW5ndGhdPSc8YTpzY2VuZTNkPjxhOmNhbWVyYSBwcnN0PSJvcnRob2dyYXBoaWNGcm9udCI+PGE6cm90IGxhdD0iMCIgbG9u''@;'; put 'put ''PSIwIiByZXY9IjAiLz48L2E6Y2FtZXJhPjxhOmxpZ2h0UmlnIHJpZz0idGhyZWVQdCIgZGlyPSJ0Ij48YTpyb3QgbGF0PSIwIiBsb249IjAiIHJldj0iMTIwMDAwMCIvPjwvYTpsaWdodFJpZz48L2E6c2NlbmUzZD4nLG1bbS5sZW5ndGhdPSc8YTpzcDNkPjxhOmJldmVsVCB3PSI2MzUwMCIg''@;'; put 'put ''aD0iMjU0MDAiLz48L2E6c3AzZD4nLG1bbS5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixtW20ubGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlTHN0PiIsbVttLmxlbmd0aF09IjxhOmJnRmlsbFN0eWxlTHN0PiIsbVttLmxlbmd0aF09JzxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJw''@;'; put 'put ''aENsciIvPjwvYTpzb2xpZEZpbGw+JyxtW20ubGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLG1bbS5sZW5ndGhdPSI8YTpnc0xzdD4iLG1bbS5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNDAwMDAiLz48''@;'; put 'put ''YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLG1bbS5sZW5ndGhdPSc8YTpncyBwb3M9IjQwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjQ1MDAwIi8+PGE6c2hhZGUgdmFsPSI5OTAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAw''@;'; put 'put ''MCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsbVttLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSIyMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjI1NTAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsbVttLmxlbmd0aF09''@;'; put 'put ''IjwvYTpnc0xzdD4iLG1bbS5sZW5ndGhdPSc8YTpwYXRoIHBhdGg9ImNpcmNsZSI+PGE6ZmlsbFRvUmVjdCBsPSI1MDAwMCIgdD0iLTgwMDAwIiByPSI1MDAwMCIgYj0iMTgwMDAwIi8+PC9hOnBhdGg+JyxtW20ubGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsbVttLmxlbmd0aF09JzxhOmdyYWRG''@;'; put 'put ''aWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxtW20ubGVuZ3RoXT0iPGE6Z3NMc3Q+IixtW20ubGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjgwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+''@;'; put 'put ''JyxtW20ubGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9IjMwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMjAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxtW20ubGVuZ3RoXT0iPC9hOmdzTHN0PiIsbVttLmxlbmd0aF09''@;'; put 'put ''JzxhOnBhdGggcGF0aD0iY2lyY2xlIj48YTpmaWxsVG9SZWN0IGw9IjUwMDAwIiB0PSI1MDAwMCIgcj0iNTAwMDAiIGI9IjUwMDAwIi8+PC9hOnBhdGg+JyxtW20ubGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsbVttLmxlbmd0aF09IjwvYTpiZ0ZpbGxTdHlsZUxzdD4iLG1bbS5sZW5ndGhdPSI8''@;'; put 'put ''L2E6Zm10U2NoZW1lPiIsbVttLmxlbmd0aF09IjwvYTp0aGVtZUVsZW1lbnRzPiIsbVttLmxlbmd0aF09IjxhOm9iamVjdERlZmF1bHRzPiIsbVttLmxlbmd0aF09IjxhOnNwRGVmPiIsbVttLmxlbmd0aF09JzxhOnNwUHIvPjxhOmJvZHlQci8+PGE6bHN0U3R5bGUvPjxhOnN0eWxlPjxhOmxu''@;'; put 'put ''UmVmIGlkeD0iMSI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpsblJlZj48YTpmaWxsUmVmIGlkeD0iMyI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpmaWxsUmVmPjxhOmVmZmVjdFJlZiBpZHg9IjIiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZWZm''@;'; put 'put ''ZWN0UmVmPjxhOmZvbnRSZWYgaWR4PSJtaW5vciI+PGE6c2NoZW1lQ2xyIHZhbD0ibHQxIi8+PC9hOmZvbnRSZWY+PC9hOnN0eWxlPicsbVttLmxlbmd0aF09IjwvYTpzcERlZj4iLG1bbS5sZW5ndGhdPSI8YTpsbkRlZj4iLG1bbS5sZW5ndGhdPSc8YTpzcFByLz48YTpib2R5UHIvPjxhOmxz''@;'; put 'put ''dFN0eWxlLz48YTpzdHlsZT48YTpsblJlZiBpZHg9IjIiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6bG5SZWY+PGE6ZmlsbFJlZiBpZHg9IjAiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZmlsbFJlZj48YTplZmZlY3RSZWYgaWR4PSIxIj48YTpzY2hlbWVDbHIg''@;'; put 'put ''dmFsPSJhY2NlbnQxIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD0ibWlub3IiPjxhOnNjaGVtZUNsciB2YWw9InR4MSIvPjwvYTpmb250UmVmPjwvYTpzdHlsZT4nLG1bbS5sZW5ndGhdPSI8L2E6bG5EZWY+IixtW20ubGVuZ3RoXT0iPC9hOm9iamVjdERlZmF1bHRzPiIsbVttLmxl''@;'; put 'put ''bmd0aF09IjxhOmV4dHJhQ2xyU2NoZW1lTHN0Lz4iLG1bbS5sZW5ndGhdPSI8L2E6dGhlbWU+IixtLmpvaW4oIiIpfWZ1bmN0aW9uIE04KGQpe3ZhciBfPWQucmVhZF9zaGlmdCgyKSxtPWQucmVhZF9zaGlmdCgyKS00LFQ9W19dO3N3aXRjaChfKXtjYXNlIDQ6Y2FzZSA1OmNhc2UgNzpjYXNl''@;'; put 'put ''IDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEzOlRbMV09ZnVuY3Rpb24gSEgoZCl7dmFyIF89e307c3dpdGNoKF8ueGNsclR5cGU9ZC5yZWFkX3NoaWZ0KDIpLF8ublRpbnRTaGFkZT1kLnJlYWRfc2hpZnQoMiksXy54Y2xyVHlwZSl7Y2FzZSAwOmNhc2UgNDpkLmwrPTQ7YnJlYWs7''@;'; put 'put ''Y2FzZSAxOl8ueGNsclZhbHVlPWZ1bmN0aW9uIFZIKGQsXyl7cmV0dXJuIEVjKGQsXyl9KGQsNCk7YnJlYWs7Y2FzZSAyOl8ueGNsclZhbHVlPWFhKGQpO2JyZWFrO2Nhc2UgMzpfLnhjbHJWYWx1ZT1mdW5jdGlvbiBkUShkKXtyZXR1cm4gZC5yZWFkX3NoaWZ0KDQpfShkKX1yZXR1cm4gZC5s''@;'; put 'put ''Kz04LF99KGQpO2JyZWFrO2Nhc2UgNjpUWzFdPWZ1bmN0aW9uIGI1KGQsXyl7cmV0dXJuIEVjKGQsXyl9KGQsbSk7YnJlYWs7Y2FzZSAxNDpjYXNlIDE1OlRbMV09ZC5yZWFkX3NoaWZ0KDE9PT1tPzE6Mik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBFeHRQ''@;'; put 'put ''cm9wIHR5cGU6ICIrXysiICIrbSl9cmV0dXJuIFR9ZnVuY3Rpb24gaFEoZCxfKXtfLmZvckVhY2goZnVuY3Rpb24obSl7c3dpdGNoKG1bMF0pe2Nhc2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6YnJlYWs7Y2Fz''@;'; put 'put ''ZSAxMzpkLmZvbnQmJmQuZm9udC5jb2xvciYmQXJyYXkuaXNBcnJheShtWzFdLnhjbHJWYWx1ZSkmJihkLmZvbnQuY29sb3IucmdiPWIzKG1bMV0ueGNsclZhbHVlKSl9fSl9ZnVuY3Rpb24gd2EoZCl7cmV0dXJuIGQvOTE0NDAwKnA1fWZ1bmN0aW9uIGZRKGQsXyl7dmFyIG09e307aWYoZC5w''@;'; put 'put ''b3MpbS54PXdhKGQucG9zLngpLG0ueT13YShkLnBvcy55KTtlbHNle2lmKCFkLmZyb20pdGhyb3ciYmFkIGFuY2hvciBzdGFydCI7bS5yPWQuZnJvbS5yfHwwLG0uYz1kLmZyb20uY3x8MCxkLmZyb20uY09mZiYmKG0ueD13YShkLmZyb20uY09mZikpLGQuZnJvbS5yT2ZmJiYobS55PXdhKGQu''@;'; put 'put ''ZnJvbS5yT2ZmKSl9aWYoZC5leHQpbS53PXdhKGQuZXh0LngpLG0uaD13YShkLmV4dC55KTtlbHNle2lmKCFkLnRvKXRocm93ImJhZCBhbmNob3IgZW5kIjttLkM9ZC50by5jLG0uUj1kLnRvLnIsZC50by5jT2ZmJiYobS5YPXdhKGQudG8uY09mZikpLGQudG8uck9mZiYmKG0uWT13YShkLnRv''@;'; put 'put ''LnJPZmYpKX1yZXR1cm4gbX1mdW5jdGlvbiBEOShkLF8pe3ZhciBtPXt4Oi0xLHk6LTEsdzotMSxoOi0xfTtpZihkLnBvcyltLng9d2EoZC5wb3MueCksbS55PXdhKGQucG9zLnkpO2Vsc2V7aWYoIWQuZnJvbSl0aHJvdyJiYWQgYW5jaG9yIHN0YXJ0IjttLng9RVMoXyxkLmZyb20uYywiQyIp''@;'; put 'put ''K3dhKGQuZnJvbS5jT2ZmKSxtLnk9RVMoXyxkLmZyb20uciwiUiIpK3dhKGQuZnJvbS5yT2ZmKX1pZihkLmV4dCltLnc9d2EoZC5leHQueCksbS5oPXdhKGQuZXh0LnkpO2Vsc2V7aWYoIWQudG8pdGhyb3ciYmFkIGFuY2hvciBlbmQiO20udz1FUyhfLGQudG8uYywiQyIpK3dhKGQudG8uY09m''@;'; put 'put ''ZiktbS54LG0uaD1FUyhfLGQudG8uciwiUiIpK3dhKGQudG8uck9mZiktbS55fXJldHVybiBtfWZ1bmN0aW9uIHc1KGQsXyl7dmFyIG09e3I6LTEsYzotMSx4Oi0xLHk6LTEsUjotMSxDOi0xLFg6LTEsWTotMX07c3dpdGNoKGQudHlwZSl7Y2FzZSJ0d29DZWxsQW5jaG9yIjptLnI9ZC5mcm9t''@;'; put 'put ''LnIsbS55PXdhKGQuZnJvbS5yT2ZmKSxtLlI9ZC50by5yLG0uWT13YShkLnRvLnJPZmYpLG0uYz1kLmZyb20uYyxtLng9d2EoZC5mcm9tLmNPZmYpLG0uQz1kLnRvLmMsbS5YPXdhKGQudG8uY09mZik7YnJlYWs7Y2FzZSJvbmVDZWxsQW5jaG9yIjptLnI9ZC5mcm9tLnIsbS55PXdhKGQuZnJv''@;'; put 'put ''bS5yT2ZmKTt2YXIgVD14OChfLG0ucixtLnkrd2EoZC5leHQueSkpO20uUj1UWzBdLG0uWT1UWzFdLG0uYz1kLmZyb20uYyxtLng9d2EoZC5mcm9tLmNPZmYpO3ZhciBQPWlrKF8sbS5jLG0ueCt3YShkLmV4dC54KSk7bS5DPVBbMF0sbS5YPVBbMV07YnJlYWs7Y2FzZSJhYnNvbHV0ZUFuY2hv''@;'; put 'put ''ciI6dmFyIFE9eDgoXywwLHdhKGQucG9zLnkpKTttLnI9UVswXSxtLnk9UVsxXTt2YXIgc2U9eDgoXyxtLnIsbS55K3dhKGQuZXh0LnkpKTttLlI9c2VbMF0sbS5ZPXNlWzFdO3ZhciBvZT14OChfLDAsd2EoZC5wb3MueCkpO20uYz1vZVswXSxtLng9b2VbMV07dmFyIGRlPXg4KF8sbS5jLG0u''@;'; put 'put ''eCt3YShkLmV4dC54KSk7bS5DPWRlWzBdLG0uWD1kZVsxXTticmVhaztkZWZhdWx0OnRocm93ImJhZCBhbmNob3IgdHlwZSAiK2QudHlwZX1yZXR1cm4gbX1mdW5jdGlvbiBqSChkLF8pe3ZhciBtPWQudHJpbSgpLnNwbGl0KC9ccyosXHMqLyk7X1siIXBvcyJdPXtjOittWzBdLHg6K21bMV0s''@;'; put 'put ''cjorbVsyXSx5OittWzNdLEM6K21bNF0sWDorbVs1XSxSOittWzZdLFk6K21bN119fWZ1bmN0aW9uIHJrKGQsXyxtKXt2YXIgVD0tMTtpZihudWxsIT1kLlJ8fG51bGwhPWQuQylUPTA7ZWxzZXtpZihudWxsPT1kLnh8fG51bGw9PWQueXx8bnVsbD09ZC53fHxudWxsPT1kLmgpdGhyb3ciY2Fu''@;'; put 'put ''bm90IHBhcnNlIGFuY2hvciAiK0pTT04uc3RyaW5naWZ5KGQpO1Q9MSsyKiEoZC5jfHxkLnIpfWlmKFQhPV8pe3N3aXRjaChfKXtjYXNlIDA6Y2FzZSAxOmlmKDMhPVQpYnJlYWs7dmFyIFA9aWsobSxkLmN8fDAsZC54fHwwKTtkLmM9UFswXSxkLng9UFsxXTt2YXIgUT14OChtLGQucnx8MCxk''@;'; put 'put ''Lnl8fDApO2Qucj1RWzBdLGQueT1RWzFdO2JyZWFrO2Nhc2UgMzppZigzPT1UKWJyZWFrO3ZhciBzZT1kLmN8fDAsb2U9ZC54fHwwO2RlbGV0ZSBkLmMsZGVsZXRlIGQueCxkLng9KHNlP0N5KG0sc2UpOjApK29lO3ZhciBkZT1kLnJ8fDAsTGU9ZC55fHwwO2RlbGV0ZSBkLnIsZGVsZXRlIGQu''@;'; put 'put ''eSxkLnk9KGRlP1Q4KG0sZGUpOjApK0xlO2JyZWFrO2RlZmF1bHQ6dGhyb3ciY29udmVydF9hbmNob3IgdW5yZWNvZ25pemVkIHR5cGUgIitffXN3aXRjaChfKXtjYXNlIDA6aWYoMD09VClicmVhazt2YXIgTmU9aWsobSxkLmN8fDAsKGQueHx8MCkrZC53KTtkZWxldGUgZC53LGQuQz1OZVsw''@;'; put 'put ''XSxkLlg9TmVbMV07dmFyIEJlPXg4KG0sZC5yfHwwLChkLnl8fDApK2QuaCk7ZGVsZXRlIGQuaCxkLlI9QmVbMF0sZC5ZPUJlWzFdO2JyZWFrO2Nhc2UgMTpjYXNlIDM6aWYoMCE9VClicmVhazt2YXIgWmU9ZC5DfHwwLG50PWQuWHx8MDtkZWxldGUgZC5DLGRlbGV0ZSBkLlgsZC53PUN5KG0s''@;'; put 'put ''WmUpK250LShkLmM/Q3kobSxkLmMpOjApLShkLnh8fDApO3ZhciBtdD1kLlJ8fDAsUWU9ZC5ZfHwwO2RlbGV0ZSBkLlIsZGVsZXRlIGQuWSxkLmg9VDgobSxtdCkrUWUtKGQucj9UOChtLGQucik6MCktKGQueXx8MCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJjb252ZXJ0X2FuY2hvciB1bnJlY29n''@;'; put 'put ''bml6ZWQgdHlwZSAiK199fX1mdW5jdGlvbiBTUyhkKXt2YXIgXz1bZC5jfHwwLE1hdGgucm91bmQoZC54fHwwKSxkLnJ8fDAsTWF0aC5yb3VuZChkLnl8fDApXTtyZXR1cm4oXz1fLmNvbmNhdChkLmgmJmQudz9bX1swXSxNYXRoLnJvdW5kKF9bMV0rZC53KSxfWzJdLE1hdGgucm91bmQoX1sz''@;'; put 'put ''XStkLmgpXTpbZC5DfHwwLE1hdGgucm91bmQoZC5YfHwwKSxkLlJ8fDAsTWF0aC5yb3VuZChkLll8fDApXSkpLmpvaW4oIiwgIil9ZnVuY3Rpb24gVDgoZCxfKXtpZighZClyZXR1cm4gMDtmb3IodmFyIG09MDstLV8+PTA7KXt2YXIgVD0oKGRbIiFyb3dzIl18fFtdKVtfXXx8e30pLmhweDtu''@;'; put 'put ''dWxsPT1UJiYoVD0oKGRbIiFzaGVldEZvcm1hdCJdfHx7fSkucm93fHx7fSkuaHB4KSxudWxsPT1UJiYoVD0yNCksbSs9VH1yZXR1cm4gbX1mdW5jdGlvbiBDeShkLF8pe2lmKCFkKXJldHVybiAwO2Zvcih2YXIgbT0wOy0tXz49MDspe3ZhciBUPSgoZFsiIWNvbHMiXXx8W10pW19dfHx7fSku''@;'; put 'put ''d3B4O2lmKG51bGw9PVQmJihUPSgoZFsiIXNoZWV0Rm9ybWF0Il18fHt9KS5jb2x8fHt9KS53cHgpLG51bGw9PVQpe3ZhciBQPXt3Y2g6OC40M307QjAoUCksZFsiIWNvbHMiXSYmKGRbIiFjb2xzIl1bX109UCksVD1QLndweH1tKz1UfXJldHVybiBtfWZ1bmN0aW9uIEVTKGQsXyxtKXtyZXR1''@;'; put 'put ''cm4iQyI9PW0/Q3koZCxfKTpUOChkLF8pfWZ1bmN0aW9uIHg4KGQsXyxtKXt2YXIgVD1bXyxtXTtpZighZClyZXR1cm4gVDtmb3IoOzspe3ZhciBQPShkWyIhcm93cyJdfHxbXSlbVFswXV18fHt9O2lmKFAuaGlkZGVuKSsrVFswXTtlbHNle3ZhciBRPVAuaHB4O2lmKG51bGw9PVEmJihRPSgo''@;'; put 'put ''ZFsiIXNoZWV0Rm9ybWF0Il18fHt9KS5yb3d8fHt9KS5ocHgpLG51bGw9PVEmJihRPU5nKDE1KSksVFsxXTxRKWJyZWFrO1RbMF0rKyxUWzFdLT1RfX1yZXR1cm4gVH1mdW5jdGlvbiBpayhkLF8sbSl7dmFyIFQ9W18sbV07aWYoIWQpcmV0dXJuIFQ7Zm9yKDs7KXt2YXIgUD0oZFsiIWNvbHMi''@;'; put 'put ''XXx8W10pW1RbMF1dfHx7fTtpZihQLmhpZGRlbnx8MD09PVAud3B4KSsrVFswXTtlbHNle3ZhciBRPVAud3B4O2lmKG51bGw9PVEmJihRPSgoZFsiIXNoZWV0Rm9ybWF0Il18fHt9KS5jb2x8fHt9KS53cHgpLG51bGw9PVEpe3ZhciBzZT17d2NoOjguNDN9O0IwKHNlKSxkWyIhY29scyJdJiYo''@;'; put 'put ''ZFsiIWNvbHMiXVtUWzBdXT1zZSksUT1zZS53cHh9aWYoVFsxXTxRKWJyZWFrO1RbMF0rKyxUWzFdLT1RfX1yZXR1cm4gVH1mdW5jdGlvbiBUMihkKXtyZXR1cm4oIjAwMDAwMCIrKCJudW1iZXIiPT10eXBlb2YgZD9kLnRvU3RyaW5nKDE2KTpkKSkuc2xpY2UoLTYpfWZ1bmN0aW9uIFBnKGQs''@;'; put 'put ''XyxtKXt2YXIgVD0ic3RyaW5nIj09dHlwZW9mIF8/ISFtOiEhXzsic3RyaW5nIiE9dHlwZW9mIF8mJihfPSJjb2xvciIpO3ZhciBQPSI8IitfKyIgIjtyZXR1cm4gZC5hdXRvP1ArJ2F1dG89IjEiLz4nOmQuaW5kZXgmJm51bGw9PWQucmdiP1ArJ2luZGV4ZWQ9IicrZC5pbmRleCsnIi8+Jzpu''@;'; put 'put ''dWxsIT1kLnRoZW1lP1ArJ3RoZW1lPSInK2QudGhlbWUrJyInKyhkLnRpbnQ/JyB0aW50PSInK2QudGludCsnIic6IiIpKyIvPiI6bnVsbCE9ZC5yZ2I/UCsncmdiPSInKyhUPyJGRiI6IiIpK1QyKGQucmdiKSsnIi8+JzpQKyIvPiJ9ZnVuY3Rpb24gTVMoZCxfKXtpZighZHx8bnVsbD09ZC5y''@;'; put 'put ''Z2IpcmV0dXJuIF87Zm9yKHZhciBtPSgiMDAwMDAwIitkLnJnYi50b1N0cmluZygxNikpLnNsaWNlKC02KSxUPVttLnNsaWNlKDAsMiksbS5zbGljZSgyLDQpLG0uc2xpY2UoNCw2KV0ubWFwKGZ1bmN0aW9uKHNlKXtyZXR1cm4gcGFyc2VJbnQoc2UsMTYpfSksUD0wO1A8d2QubGVuZ3RoOysr''@;'; put 'put ''UCl7dmFyIFE9d2RbUF07aWYoUVswXT09VFswXSYmUVsxXT09VFsxXSYmUVsyXT09VFsyXSlyZXR1cm4gUH1yZXR1cm4gd2QubGVuZ3RoPDY0Pyh3ZC5wdXNoKFtUWzBdLFRbMV0sVFsyXV0pLHdkLmxlbmd0aC0xKTpffWZ1bmN0aW9uIEttKGQpe3ZhciBfPVsiIiwiIiwiIl07aWYoIWQpcmV0''@;'; put 'put ''dXJuW107dmFyIG09IiIsVD1kJiZkLnM/ZnVuY3Rpb24gcFEoZCl7dmFyIF89WyIiLCIiXTtpZighZClyZXR1cm4gXztpZihkLnN6JiYoX1swXSs9IiYiK2Quc3osX1sxXT0iJjEyIitfWzFdKSxkLm5hbWUmJihfWzBdKz0nJiInK2QubmFtZSsnLFJlZ3VsYXIiJyxfWzFdPScmIi0sUmVndWxh''@;'; put 'put ''ciInK19bMV0pLGQuYm9sZCYmKF9bMF0rPSImQiIsX1sxXT0iJkIiK19bMV0pLGQudW5kZXJsaW5lKXt2YXIgbT0yPT1kLnVuZGVybGluZT8iJkUiOiImVSI7X1swXSs9bSxfWzFdPW0rX1sxXX1yZXR1cm4gZC5pdGFsaWMmJihfWzBdKz0iJkkiLF9bMV09IiZJIitfWzFdKSxkLmNvbG9yJiZu''@;'; put 'put ''dWxsIT1kLmNvbG9yLnJnYiYmKF9bMF0rPSImSyIrVDIoZC5jb2xvci5yZ2IpLF9bMV0rPSImSzAwMDAwMCIpLGQuc3RyaWtlJiYoX1swXSs9IiZTIixfWzFdPSImUyIrX1sxXSksInN1cGVyIj09ZC52YWxpZ24mJihfWzBdKz0iJlgiLF9bMV09IiZYIitfWzFdKSwic3ViIj09ZC52YWxpZ24m''@;'; put 'put ''JihfWzBdKz0iJlkiLF9bMV09IiZZIitfWzFdKSxffShkLnMpOlsiIiwiIl07cmV0dXJuInN0cmluZyI9PXR5cGVvZiBkP1tkLGQsZF06bnVsbCE9ZC5maXJzdHx8bnVsbCE9ZC5ldmVufHxudWxsIT1kLm9kZD8obnVsbCE9ZC5vZGQmJihfWzBdPUttKGQub2RkKVswXSksdm9pZCAwPT09ZC5m''@;'; put 'put ''aXJzdCYmX1swXSYmKF9bMV09X1swXSksbnVsbCE9ZC5maXJzdCYmKF9bMV09S20oZC5maXJzdClbMF0pLG51bGwhPWQuZXZlbiYmKF9bMl09S20oZC5ldmVuKVswXSksXyk6ZC5sZWZ0fHxkLmNlbnRlcnx8ZC5yaWdodD8oZC5sZWZ0JiYobSs9IiZMIitLbShkLmxlZnQpWzBdKSxkLmNlbnRl''@;'; put 'put ''ciYmKG0rPSImQyIrS20oZC5jZW50ZXIpWzBdKSxkLnJpZ2h0JiYobSs9IiZSIitLbShkLnJpZ2h0KVswXSksW20sbSxtXSk6bnVsbCE9ZC52P1ttPVRbMF0rZC52LnJlcGxhY2UoLyYvZywiJiYiKStUWzFdLG0sbV06bnVsbCE9ZC53P1ttPVRbMF0rZC53K1RbMV0sbSxtXTpBcnJheS5pc0Fy''@;'; put 'put ''cmF5KGQuUik/KGQuUi5mb3JFYWNoKGZ1bmN0aW9uKFApe20rPUttKFApWzBdfSksW20sbSxtXSk6W119dmFyIEE4PXsxOiJMZXR0ZXIiLDM6IlRhYmxvaWQiLDU6IkxlZ2FsIiw3OiJFeGVjdXRpdmUiLDg6IkEzIiw5OiJBNCIsMTE6IkE1IiwxMjoiQjQiLDEzOiJCNSIsMTQ6IkZvbGlvIiwy''@;'; put 'put ''MDoiRW52ZWxvcGUiLDM3OiJNb25hcmNoIiw3MDoiQTYifSxubz1jZShBOCk7dWEuQ09OTj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jb25uZWN0aW9ucyI7dmFyIF9RPVZyKCJleHRlcm5hbExpbmsiLG51bGws''@;'; put 'put ''e3htbG5zOlVhLm1haW5bMF19KTt1YS5JTUc9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvaW1hZ2UiLHVhLkRSQVc9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2''@;'; put 'put ''L3JlbGF0aW9uc2hpcHMvZHJhd2luZyI7dmFyIFdIPXt0OiJ0b3AiLGN0cjoiY2VudGVyIixiOiJib3R0b20iLGp1c3Q6InRvcCIsZGlzdDoidG9wIn0sRXk9e2N0cjoiY2VudGVyIixkaXN0OiJjZW50ZXIiLGp1c3Q6ImNlbnRlciIsanVzdExvdzoiY2VudGVyIixsOiJsZWZ0IixyOiJyaWdo''@;'; put 'put ''dCIsdGhhaURpc3Q6ImNlbnRlciJ9O2Z1bmN0aW9uIHdRKCl7dmFyIGQ9W3BvXTtyZXR1cm4gZC5wdXNoKCc8eGRyOndzRHIgeG1sbnM6eGRyPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvc3ByZWFkc2hlZXREcmF3aW5nIiB4bWxuczphPSJodHRw''@;'; put 'put ''Oi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpbiIvPicpLGQuam9pbigiIil9ZnVuY3Rpb24gQ1EoZCl7dmFyIG0sXz1kWyIhZGF0YSJdO3JldHVybiJiYXNlNjQiPT09ZFsiIWRhdGF0eXBlIl0/KChtPV8ubWF0Y2goL15kYXRhOi4qLC8pKSYmKF89Xy5z''@;'; put 'put ''bGljZShtWzBdLmxlbmd0aCkpLENlLmRlY29kZShfKSk6X311YS5UQUJMRT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy90YWJsZSI7dmFyIFNRPS88KD86XHcrOik/c2hhcGUoPzpbXlx3XVtePl0qKT8+KFtcc1xT''@;'; put 'put ''XSo/KTxcLyg/Olx3KzopP3NoYXBlPi9nO2Z1bmN0aW9uIHgyKGQsXyxtLFQpe3ZhciBQPVsyMTYwMCwyMTYwMF0sUT1bIm0wLDBsMCIsUFsxXSxQWzBdLFBbMV0sUFswXSwiMHhlIl0uam9pbigiLCIpLHNlPVtWcigieG1sIixudWxsLHsieG1sbnM6diI6VnVfdiwieG1sbnM6byI6VnVfbywi''@;'; put 'put ''eG1sbnM6eCI6VnVfeCwieG1sbnM6bXYiOiJodHRwOi8vbWFjVm1sU2NoZW1hVXJpIn0pLnJlcGxhY2UoL1wvPi8sIj4iKSxWcigibzpzaGFwZWxheW91dCIsVnIoIm86aWRtYXAiLG51bGwseyJ2OmV4dCI6ImVkaXQifSkseyJ2OmV4dCI6ImVkaXQifSldLG9lPTEwMjQqZCxkZT1tfHxbXTtk''@;'; put 'put ''ZS5sZW5ndGg+MCYmc2UucHVzaChWcigidjpzaGFwZXR5cGUiLFtWcigidjpzdHJva2UiLG51bGwse2pvaW5zdHlsZToibWl0ZXIifSksVnIoInY6cGF0aCIsbnVsbCx7c2hhZG93b2s6ImYiLGV4dHJ1c2lvbm9rOiJmIixzdHJva2VvazoiZiIsZmlsbG9rOiJmIiwibzpjb25uZWN0dHlwZSI6''@;'; put 'put ''InJlY3QifSksVnIoIm86bG9jayIsbnVsbCx7InY6ZXh0IjoiZWRpdCIsc2hhcGV0eXBlOiJ0In0pXS5qb2luKCIiKSx7aWQ6Il94MDAwMF90MjAxIixjb29yZHNpemU6UC5qb2luKCIsIiksIm86c3B0IjoyMDEscGF0aDpRfSkpLGRlLmZvckVhY2goZnVuY3Rpb24oTmUpeysrb2Usc2U9c2Uu''@;'; put 'put ''Y29uY2F0KGZ1bmN0aW9uIGowKGQsXyl7dmFyIG09e2lkOiJfeDAwMDBfcyIrXyx0eXBlOiIjX3gwMDAwX3QyMDEiLHN0eWxlOiJtc28td3JhcC1zdHlsZTp0aWdodCJ9OygiUmFkaW8iPT1kWyIhdHlwZSJdfHwiQ2hlY2tib3giPT1kWyIhdHlwZSJdfHwiTGlzdCI9PWRbIiF0eXBlIl18fCJE''@;'; put 'put ''cm9wIj09ZFsiIXR5cGUiXSkmJihtLnN0cm9rZWQ9ImYiKSwiTGFiZWwiPT1kWyIhdHlwZSJdJiYobS5maWxsZWQ9ImYiKTt2YXIgVD0iIjtkLnQmJmNrW2RbIiF0eXBlIl1dJiYoVD1ja1tkWyIhdHlwZSJdXS5yZXBsYWNlKC8jIyMjLyxCaShkLnQpKSk7dmFyIFA9W107cmV0dXJuIGQubWFj''@;'; put 'put ''cm8mJlAucHVzaChVbygieDpGbWxhTWFjcm8iLGQubWFjcm8pKSxkLmxpbmsmJlAucHVzaChVbygieDpGbWxhTGluayIsZC5saW5rKSksZC52YWwmJlAucHVzaChVbygiUmFkaW8iPT1kWyIhdHlwZSJdfHwiQ2hlY2tib3giPT1kWyIhdHlwZSJdPyJ4OkNoZWNrZWQiOiJ4OlZhbCIsU3RyaW5n''@;'; put 'put ''KGQudmFsKSkpLGQucmVmJiZQLnB1c2goVW8oIng6Rm1sYVJhbmdlIixkLnJlZikpLGQuc2VsJiYiTGlzdCI9PWRbIiF0eXBlIl0mJlAucHVzaChVbygieDpTZWxUeXBlIixkLnNlbCkpLGQubWluJiZQLnB1c2goVW8oIng6TWluIixTdHJpbmcoZC5taW4pKSksZC5tYXgmJlAucHVzaChVbygi''@;'; put 'put ''eDpNYXgiLFN0cmluZyhkLm1heCkpKSxkLnN0ZXAmJlAucHVzaChVbygieDpJbmMiLFN0cmluZyhkLnN0ZXApKSksZC5wYWdlJiZQLnB1c2goVW8oIng6UGFnZSIsU3RyaW5nKGQucGFnZSkpKSxbXS5jb25jYXQoWyI8djpzaGFwZSIrZmEobSkrIj4iXSkuY29uY2F0KHVrW2RbIiF0eXBlIl1d''@;'; put 'put ''fHxbXSkuY29uY2F0KFtUXSkuY29uY2F0KFsnPHg6Q2xpZW50RGF0YSBPYmplY3RUeXBlPSInK2RbIiF0eXBlIl0rJyI+JyxVbygieDpBbmNob3IiLFNTKGRbIiFwb3MiXSkpLFVvKCJ4OlByaW50T2JqZWN0IiwiRmFsc2UiKV0pLmNvbmNhdChQKS5jb25jYXQobGtbZFsiIXR5cGUiXV18fFtd''@;'; put 'put ''KS5jb25jYXQoWyI8L3g6Q2xpZW50RGF0YT4iLCI8L3Y6c2hhcGU+Il0pfShOZSxvZSkpfSk7dmFyIExlPV98fFtdO3JldHVybiBMZS5sZW5ndGg+MCYmc2UucHVzaChWcigidjpzaGFwZXR5cGUiLFtWcigidjpzdHJva2UiLG51bGwse2pvaW5zdHlsZToibWl0ZXIifSksVnIoInY6cGF0aCIs''@;'; put 'put ''bnVsbCx7Z3JhZGllbnRzaGFwZW9rOiJ0Iiwibzpjb25uZWN0dHlwZSI6InJlY3QifSldLmpvaW4oIiIpLHtpZDoiX3gwMDAwX3QyMDIiLGNvb3Jkc2l6ZTpQLmpvaW4oIiwiKSwibzpzcHQiOjIwMixwYXRoOlF9KSksTGUuZm9yRWFjaChmdW5jdGlvbihOZSl7KytvZSxzZT1zZS5jb25jYXQo''@;'; put 'put ''ZnVuY3Rpb24gVHkoZCxfLG0pe3ZhciBUPUlzKGRbMF0pLFA9ZFsxXS5maWxsfHx7fTtkWzFdLnMmJihQPXt0eXBlOmRbMV0ucy5wYXR0ZXJuVHlwZXx8InNvbGlkIn0sZFsxXS5zLmZnQ29sb3ImJihQLmNvbG9yMj1QLmNvbG9yMT0iIyIrVDIoZFsxXS5zLmZnQ29sb3IucmdiKSksZFsxXS5z''@;'; put 'put ''LmJnQ29sb3ImJihQLmNvbG9yMj0iIyIrVDIoZFsxXS5zLmJnQ29sb3IucmdiKSkpO3ZhciBRPXtjb2xvcjI6UC5jb2xvcjJ8fCIjQkVGRjgyIix0eXBlOlAudHlwZXx8ImdyYWRpZW50In07ImdyYWRpZW50Ij09US50eXBlJiYoUS5hbmdsZT0iLTE4MCIpO3ZhciBzZT0iZ3JhZGllbnQiPT1R''@;'; put 'put ''LnR5cGU/VnIoIm86ZmlsbCIsbnVsbCx7dHlwZToiZ3JhZGllbnRVbnNjYWxlZCIsInY6ZXh0IjoidmlldyJ9KTpudWxsLG9lPVZyKCJ2OmZpbGwiLHNlLFEpLGRlPXt9O2RbMV0uc2hhZG93JiYoZFsxXS5zaGFkb3cuY29sb3ImJihkZS5jb2xvcj1kWzFdLnNoYWRvdy5jb2xvciksZFsxXS5z''@;'; put 'put ''aGFkb3cub24mJihkZS5vbj1kWzFdLnNoYWRvdy5vbikpLGRlLm9ic2N1cmVkPSJ0Ijt2YXIgTGU9ITAsTmU9ITAsQmU9ZFsxXVsiIXBvcyJdP1FyKGRbMV1bIiFwb3MiXSk6bnVsbDtyZXR1cm4gQmUmJihOZT1udWxsPT1CZS5SJiZudWxsPT1CZS5DJiZudWxsPT1CZS5YJiZudWxsPT1CZS5Z''@;'; put 'put ''LExlPSFCZS5yJiYhQmUuYyxyayhCZSwwLG0pKSxbIjx2OnNoYXBlIitmYSh7aWQ6Il94MDAwMF9zIitfLHR5cGU6IiNfeDAwMDBfdDIwMiIsc3R5bGU6InBvc2l0aW9uOmFic29sdXRlOyBtYXJnaW4tbGVmdDo4MHB0O21hcmdpbi10b3A6NXB0O3dpZHRoOjEwNHB0O2hlaWdodDo2NHB0O3ot''@;'; put 'put ''aW5kZXg6MTAiKyhkWzFdLmhpZGRlbj8iO3Zpc2liaWxpdHk6aGlkZGVuIjoiIiksZmlsbGNvbG9yOlAuY29sb3IxfHwiI0VDRkFENCIsc3Ryb2tlY29sb3I6KGRbMV0uc3Ryb2tlfHx7fSkuY29sb3J8fCIjZWRlYWExIn0pKyI+IixvZSxWcigidjpzaGFkb3ciLG51bGwsZGUpLFZyKCJ2OnBh''@;'; put 'put ''dGgiLG51bGwseyJvOmNvbm5lY3R0eXBlIjoibm9uZSJ9KSwnPHY6dGV4dGJveD48ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjwvZGl2Pjwvdjp0ZXh0Ym94PicsJzx4OkNsaWVudERhdGEgT2JqZWN0VHlwZT0iTm90ZSI+JyxMZT8iPHg6TW92ZVdpdGhDZWxscy8+IjoiIixOZT8iPHg6''@;'; put 'put ''U2l6ZVdpdGhDZWxscy8+IjoiIixVbygieDpBbmNob3IiLEJlP1NTKEJlKTpkWzFdLnJhd2FuY2hvcnx8W1QuYysxLDAsVC5yKzEsMCxULmMrMywyMCxULnIrNSwyMF0uam9pbigiLCIpKSxVbygieDpBdXRvRmlsbCIsIkZhbHNlIiksVW8oIng6Um93IixTdHJpbmcoVC5yKSksVW8oIng6Q29s''@;'; put 'put ''dW1uIixTdHJpbmcoVC5jKSksZFsxXS5oaWRkZW4/IiI6Ijx4OlZpc2libGUvPiIsIjwveDpDbGllbnREYXRhPiIsIjwvdjpzaGFwZT4iXX0oTmUsb2UsVCkpfSksc2UucHVzaCgiPC94bWw+Iiksc2Uuam9pbigiIil9dmFyIGxrPXtCdXR0b246WyI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRv''@;'; put 'put ''RmlsbD4iLCI8eDpUZXh0SEFsaWduPkNlbnRlcjwveDpUZXh0SEFsaWduPiIsIjx4OlRleHRWQWxpZ24+Q2VudGVyPC94OlRleHRWQWxpZ24+Il0sR0JveDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4Ok5vVGhyZWVELz4iXSxMYWJl''@;'; put 'put ''bDpbIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiJdLFJhZGlvOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+Iiwi''@;'; put 'put ''PHg6VGV4dFZBbGlnbj5DZW50ZXI8L3g6VGV4dFZBbGlnbj4iLCI8eDpOb1RocmVlRC8+Il0sQ2hlY2tib3g6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpUZXh0VkFsaWdu''@;'; put 'put ''PkNlbnRlcjwveDpUZXh0VkFsaWduPiIsIjx4Ok5vVGhyZWVELz4iXSxEcm9wOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6Tm9UaHJlZUQyLz4iLCI8eDpTZWxUeXBlPlNpbmdsZTwveDpTZWxUeXBlPiIsIjx4OkRyb3BTdHlsZT5D''@;'; put 'put ''b21ibzwveDpEcm9wU3R5bGU+IiwiPHg6TENUPk5vcm1hbDwveDpMQ1Q+IiwiPHg6RHJvcExpbmVzPjQ8L3g6RHJvcExpbmVzPiJdLExpc3Q6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpOb1RocmVlRDIvPiIsIjx4OkxDVD5Ob3Jt''@;'; put 'put ''YWw8L3g6TENUPiIsIjx4OlZhbD4wPC94OlZhbD4iLCI8eDpNaW4+MDwveDpNaW4+IiwiPHg6TWF4PjU8L3g6TWF4PiIsIjx4OkluYz4xPC94OkluYz4iLCI8eDpQYWdlPjQ8L3g6UGFnZT4iLCI8eDpEeD4xNTwveDpEeD4iXSxTY3JvbGw6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpIb3Jp''@;'; put 'put ''ei8+IiwiPHg6RHg+MTU8L3g6RHg+Il0sU3BpbjpbIjx4OkR4PjE1PC94OkR4PiJdfSxjaz17QnV0dG9uOiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGZvbnQgZmFjZT0n''@;'; put 'put ''Q2FsaWJyaScgc2l6ZT0nMjQwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLEdCb3g6Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZv''@;'; put 'put ''bnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLFJhZGlvOiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0''@;'; put 'put ''LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9J2F1dG8nPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixMYWJlbDoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRp''@;'; put 'put ''diBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsQ2hlY2tib3g6Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86''@;'; put 'put ''c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLHNoZWV0anM6ImRhZnVxIn0sdWs9e0J1dHRvbjpbJzx2OmZp''@;'; put 'put ''bGwgY29sb3IyPSIjZjBmMGYwIFs2N10iIG86ZGV0ZWN0bW91c2VjbGljaz0idCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sR0JveDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sRHJvcDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJv''@;'; put 'put ''dGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sTGlzdDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sU3BpbjpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sU2Nyb2xsOlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90''@;'; put 'put ''YXRpb249InQiIHRleHQ9InQiLz4nXSxMYWJlbDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sUmFkaW86Wyc8djpwYXRoIHNoYWRvd29rPSJ0IiBzdHJva2Vvaz0idCIgZmlsbG9rPSJ0Ii8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxD''@;'; put 'put ''aGVja2JveDpbJzx2OnBhdGggc2hhZG93b2s9InQiIHN0cm9rZW9rPSJ0IiBmaWxsb2s9InQiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLHNoZWV0anM6W119O2Z1bmN0aW9uIFlIKGQsXyxtLFQpe3ZhciBQPXsiIWlkIjp7fX0sUT1bVnIoInhtbCIsbnVsbCx7''@;'; put 'put ''InhtbG5zOnYiOlZ1X3YsInhtbG5zOm8iOlZ1X28sInhtbG5zOngiOlZ1X3h9KS5yZXBsYWNlKC9cLz4vLCI+IiksVnIoIm86c2hhcGVsYXlvdXQiLFZyKCJvOmlkbWFwIixudWxsLHsidjpleHQiOiJlZGl0IixkYXRhOjF9KSx7InY6ZXh0IjoiZWRpdCJ9KSwnPHY6c2hhcGV0eXBlIGlkPSJf''@;'; put 'put ''eDAwMDBfdDc1IiBjb29yZHNpemU9IjIxNjAwLDIxNjAwIiBvOnNwdD0iNzUiIG86cHJlZmVycmVsYXRpdmU9InQiIHBhdGg9Im1ANEA1bEA0QDExQDlAMTFAOUA1eGUiIGZpbGxlZD0iZiIgc3Ryb2tlZD0iZiI+JywnPHY6c3Ryb2tlIGpvaW5zdHlsZT0ibWl0ZXIiLz4nLCI8djpmb3JtdWxh''@;'; put 'put ''cz4iLCc8djpmIGVxbj0iaWYgbGluZURyYXduIHBpeGVsTGluZVdpZHRoIDAiLz4nLCc8djpmIGVxbj0ic3VtIEAwIDEgMCIvPicsJzx2OmYgZXFuPSJzdW0gMCAwIEAxIi8+JywnPHY6ZiBlcW49InByb2QgQDIgMSAyIi8+JywnPHY6ZiBlcW49InByb2QgQDMgMjE2MDAgcGl4ZWxXaWR0aCIv''@;'; put 'put ''PicsJzx2OmYgZXFuPSJwcm9kIEAzIDIxNjAwIHBpeGVsSGVpZ2h0Ii8+JywnPHY6ZiBlcW49InN1bSBAMCAwIDEiLz4nLCc8djpmIGVxbj0icHJvZCBANiAxIDIiLz4nLCc8djpmIGVxbj0icHJvZCBANyAyMTYwMCBwaXhlbFdpZHRoIi8+JywnPHY6ZiBlcW49InN1bSBAOCAyMTYwMCAwIi8+''@;'; put 'put ''JywnPHY6ZiBlcW49InByb2QgQDcgMjE2MDAgcGl4ZWxIZWlnaHQiLz4nLCc8djpmIGVxbj0ic3VtIEAxMCAyMTYwMCAwIi8+JywiPC92OmZvcm11bGFzPiIsJzx2OnBhdGggbzpleHRydXNpb25vaz0iZiIgZ3JhZGllbnRzaGFwZW9rPSJ0IiBvOmNvbm5lY3R0eXBlPSJyZWN0Ii8+JywnPG86''@;'; put 'put ''bG9jayB2OmV4dD0iZWRpdCIgYXNwZWN0cmF0aW89InQiLz4nLCI8L3Y6c2hhcGV0eXBlPiJdLHNlPTE7WyJoZWFkZXIiLCJmb290ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXtUW29lXSYmWyJvZGQiLCJldmVuIiwiZmlyc3QiXS5mb3JFYWNoKGZ1bmN0aW9uKGRlKXtUW29lXVtkZV0mJlsi''@;'; put 'put ''bGVmdCIsInJpZ2h0IiwiY2VudGVyIl0uZm9yRWFjaChmdW5jdGlvbihMZSl7aWYoQXJyYXkuaXNBcnJheShUW29lXVtkZV1bTGVdKSlmb3IodmFyIE5lPTA7TmU8VFtvZV1bZGVdW0xlXS5sZW5ndGg7KytOZSlpZihUW29lXVtkZV1bTGVdW05lXSl7dmFyIEJlPVRbb2VdW2RlXVtMZV1bTmVd''@;'; put 'put ''O2lmKCJyZW1vdGUiPT1CZVsiIWRhdGF0eXBlIl0pdGhyb3ciQ2Fubm90IHVzZSBsaW5rZWQgaW1hZ2UgaW4gaGVhZGVyIG9yIGZvb3RlciI7Zm9yKDtNaShkLCJ4bC9tZWRpYS9pbWFnZSIrc2UrIi5qcGciKTspKytzZTtkLmZpbGUoInhsL21lZGlhL2ltYWdlIitzZSsiLmpwZyIsQ1EoQmUp''@;'; put 'put ''LHtiaW5hcnk6ITB9KSxhaShQLC0xLCIuLi9tZWRpYS9pbWFnZSIrc2UrIi5qcGciLHVhLklNRyk7dmFyIFplPSJfeDAwMDBfcyIrKDEwMjUrQmUuX2NudCksbnQ9InBvc2l0aW9uOmFic29sdXRlO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXRvcDowO3otaW5kZXg6IisoQmUuX2NudCsxKSsiOyI7''@;'; put 'put ''bnQrPSJ3aWR0aDoiK0JlWyIhcG9zIl0udysicHg7IixudCs9ImhlaWdodDoiK0JlWyIhcG9zIl0uaCsicHg7Ijt2YXIgbXQ9TGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrb2UuY2hhckF0KDApLnRvVXBwZXJDYXNlKCk7Im9kZCIhPT1kZSYmKG10Kz1kZS50b1VwcGVyQ2FzZSgpKSxUW29l''@;'; put 'put ''XVtkZV1bTGVdLmxlbmd0aD4xJiYobXQrPU5lKSxRLnB1c2goVnIoInY6c2hhcGUiLFsnPHY6aW1hZ2VkYXRhIG86cmVsaWQ9InJJZCcrKEJlLl9jbnQrMSkrJyIgbzp0aXRsZT0ic2hlZXRqcyIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10uam9pbigiIikse2lk''@;'; put 'put ''Om10LCJvOnNwaWQiOlplLHR5cGU6IiNfeDAwMDBfdDc1IixzdHlsZTpudH0pKX19KX0pfSksUS5wdXNoKCI8L3htbD4iKSxkLmZpbGUoInhsL2RyYXdpbmdzL3ZtbERyYXdpbmciK20rIkhGLnZtbCIsUS5qb2luKCIiKSksZC5maWxlKCJ4bC9kcmF3aW5ncy9fcmVscy92bWxEcmF3aW5nIitt''@;'; put 'put ''KyJIRi52bWwucmVscyIsQzIoUCkpfXVhLkNNTlQ9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY29tbWVudHMiO3ZhciBHSD1WcigiY29tbWVudHMiLG51bGwse3htbG5zOlVhLm1haW5bMF19KTtmdW5jdGlvbiBU''@;'; put 'put ''UShkKXt2YXIgXz1bcG8sR0hdLG09W107cmV0dXJuIF8ucHVzaCgiPGF1dGhvcnM+IiksZC5mb3JFYWNoKGZ1bmN0aW9uKFQpe1RbMV0uZm9yRWFjaChmdW5jdGlvbihQKXt2YXIgUT1CaShQLmEpO20uaW5kZXhPZihRKT4tMXx8KG0ucHVzaChRKSxfLnB1c2goIjxhdXRob3I+IitRKyI8L2F1''@;'; put 'put ''dGhvcj4iKSl9KX0pLF8ucHVzaCgiPC9hdXRob3JzPiIpLF8ucHVzaCgiPGNvbW1lbnRMaXN0PiIpLGQuZm9yRWFjaChmdW5jdGlvbihUKXtUWzFdLmZvckVhY2goZnVuY3Rpb24oUCl7Xy5wdXNoKCc8Y29tbWVudCByZWY9IicrVFswXSsnIiBhdXRob3JJZD0iJyttLmluZGV4T2YoQmkoUC5h''@;'; put 'put ''KSkrJyI+PHRleHQ+JyksXy5wdXNoKFAuUj9NOShQLlIpOlVvKCJ0IixudWxsPT1QLnQ/IiI6QmkoUC50KSkpLF8ucHVzaCgiPC90ZXh0PjwvY29tbWVudD4iKX0pfSksXy5wdXNoKCI8L2NvbW1lbnRMaXN0PiIpLF8ubGVuZ3RoPjImJihfW18ubGVuZ3RoXT0iPC9jb21tZW50cz4iLF9bMV09''@;'; put 'put ''X1sxXS5yZXBsYWNlKCIvPiIsIj4iKSksXy5qb2luKCIiKX12YXIgcUg9aWk7ZnVuY3Rpb24gUlEoZCl7dmFyIF89TWMoKSxtPVtdO3JldHVybiBJaShfLCJCcnRCZWdpbkNvbW1lbnRzIiksSWkoXywiQnJ0QmVnaW5Db21tZW50QXV0aG9ycyIpLGQuZm9yRWFjaChmdW5jdGlvbihUKXtUWzFd''@;'; put 'put ''LmZvckVhY2goZnVuY3Rpb24oUCl7bS5pbmRleE9mKFAuYSk+LTF8fChtLnB1c2goUC5hLnNsaWNlKDAsNTQpKSxJaShfLCJCcnRDb21tZW50QXV0aG9yIixmdW5jdGlvbiBBUShkKXtyZXR1cm4ga2koZC5zbGljZSgwLDU0KSl9KFAuYSkpKX0pfSksSWkoXywiQnJ0RW5kQ29tbWVudEF1dGhv''@;'; put 'put ''cnMiKSxJaShfLCJCcnRCZWdpbkNvbW1lbnRMaXN0IiksZC5mb3JFYWNoKGZ1bmN0aW9uKFQpe1RbMV0uZm9yRWFjaChmdW5jdGlvbihQKXtQLmlhdXRob3I9bS5pbmRleE9mKFAuYSk7dmFyIFE9e3M6SXMoVFswXSksZTpJcyhUWzBdKX07SWkoXywiQnJ0QmVnaW5Db21tZW50IixmdW5jdGlv''@;'; put 'put ''biB4UShkLF8pe3JldHVybiBudWxsPT1fJiYoXz1GcigzNikpLF8ud3JpdGVfc2hpZnQoNCxkWzFdLmlhdXRob3IpLEJkKGRbMF0sXyksXy53cml0ZV9zaGlmdCg0LDApLF8ud3JpdGVfc2hpZnQoNCwwKSxfLndyaXRlX3NoaWZ0KDQsMCksXy53cml0ZV9zaGlmdCg0LDApLF99KFtRLFBdKSks''@;'; put 'put ''UC50JiZQLnQubGVuZ3RoPjAmJklpKF8sIkJydENvbW1lbnRUZXh0IixmdW5jdGlvbiBjbyhkLF8pe3ZhciBtPSExO3JldHVybiBudWxsPT1fJiYobT0hMCxfPUZyKDIzKzQqZC50Lmxlbmd0aCkpLF8ud3JpdGVfc2hpZnQoMSwxKSxraShkLnQsXyksXy53cml0ZV9zaGlmdCg0LDEpLGZ1bmN0''@;'; put 'put ''aW9uIE5hKGQsXyl7X3x8KF89RnIoNCkpLF8ud3JpdGVfc2hpZnQoMixkLmljaHx8MCksXy53cml0ZV9zaGlmdCgyLGQuaWZudHx8MCl9KHtpY2g6MCxpZm50OjB9LF8pLG0/Xy5zbGljZSgwLF8ubCk6X30oUCkpLElpKF8sIkJydEVuZENvbW1lbnQiKSxkZWxldGUgUC5pYXV0aG9yfSl9KSxJ''@;'; put 'put ''aShfLCJCcnRFbmRDb21tZW50TGlzdCIpLElpKF8sIkJydEVuZENvbW1lbnRzIiksXy5lbmQoKX12YXIgUUg9WyJ4bHNiIiwieGxzbSIsInhsYW0iLCJiaWZmOCIsInhsYSJdO3VhLkRTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxh''@;'; put 'put ''dGlvbnNoaXBzL2RpYWxvZ3NoZWV0Iix1YS5NUz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3hsTWFjcm9zaGVldCI7dmFyIFI4PWZ1bmN0aW9uKCl7dmFyIGQ9LyhefFteQS1aYS16X10pUihcWz8tP1xkK1xdfFsxLTldXGQqfClDKFxb''@;'; put 'put ''Py0/XGQrXF18WzEtOV1cZCp8KSg/IVtBLVphLXowLTlfXSkvZyxfPXtyOjAsYzowfTtmdW5jdGlvbiBtKFQsUCxRLHNlKXt2YXIgb2U9ITEsZGU9ITE7MD09US5sZW5ndGg/ZGU9ITA6IlsiPT1RLmNoYXJBdCgwKSYmKGRlPSEwLFE9US5zbGljZSgxLC0xKSksMD09c2UubGVuZ3RoP29lPSEw''@;'; put 'put ''OiJbIj09c2UuY2hhckF0KDApJiYob2U9ITAsc2U9c2Uuc2xpY2UoMSwtMSkpO3ZhciBMZT1RLmxlbmd0aD4wPzB8cGFyc2VJbnQoUSwxMCk6MCxOZT1zZS5sZW5ndGg+MD8wfHBhcnNlSW50KHNlLDEwKTowO3JldHVybiBvZT9OZSs9Xy5jOi0tTmUsZGU/TGUrPV8ucjotLUxlLFArKG9lPyIi''@;'; put 'put ''OiIkIikrbXMoTmUpKyhkZT8iIjoiJCIpK3pvKExlKX1yZXR1cm4gZnVuY3Rpb24oUCxRKXtyZXR1cm4gXz1RLFAucmVwbGFjZShkLG0pfX0oKSxkaz0vKF58W14uX0EtWjAtOV0pKFskXT8pKFtBLVpdezEsMn18W0EtV11bQS1aXXsyfXxYW0EtRV1bQS1aXXxYRltBLURdKShbJF0/KSgxMFsw''@;'; put 'put ''LTNdXGR7NH18MTA0WzAtN11cZHszfXwxMDQ4WzAtNF1cZHsyfXwxMDQ4NVswLTZdXGR8MTA0ODU3WzAtNl18WzEtOV1cZHswLDV9KSg/IVtfLlwoQS1aYS16MC05XSkvZyxoaz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihfLG0pe3JldHVybiBfLnJlcGxhY2UoZGssZnVuY3Rpb24oVCxQ''@;'; put 'put ''LFEsc2Usb2UsZGUpe3ZhciBMZT1UYyhzZSktKFE/MDptLmMpLE5lPWlhKGRlKS0ob2U/MDptLnIpO3JldHVybiBQKyJSIisoMD09TmU/IiI6b2U/TmUrMToiWyIrTmUrIl0iKSsiQyIrKDA9PUxlPyIiOlE/TGUrMToiWyIrTGUrIl0iKX0pfX0oKTtmdW5jdGlvbiBuVihkLF8pe3JldHVybiBk''@;'; put 'put ''LnJlcGxhY2UoZGssZnVuY3Rpb24obSxULFAsUSxzZSxvZSl7cmV0dXJuIFQrKCIkIj09UD9QK1E6bXMoVGMoUSkrXy5jKSkrKCIkIj09c2U/c2Urb2U6em8oaWEob2UpK18ucikpfSkucmVwbGFjZSgvKFxkKyk6KFxkKykvZyxmdW5jdGlvbihtLFQsUCl7cmV0dXJuIHpvKGlhKFQpK18ucikr''@;'; put 'put ''IjoiK3pvKGlhKFApK18ucil9KX1mdW5jdGlvbiBEUShkLF8sbSl7dmFyIFA9emEoXykucyxRPUlzKG0pO3JldHVybiBuVihkLHtyOlEuci1QLnIsYzpRLmMtUC5jfSl9ZnVuY3Rpb24gclYoZCl7cmV0dXJuIGQucmVwbGFjZSgvX3hsZm5cLi9nLCIiKX1mdW5jdGlvbiBhaChkKXtkLmwrPTF9''@;'; put 'put ''ZnVuY3Rpb24gQzUoZCxfKXt2YXIgbT1kLnJlYWRfc2hpZnQoMT09Xz8xOjIpO3JldHVyblsxNjM4MyZtLG0+PjE0JjEsbT4+MTUmMV19ZnVuY3Rpb24gZmsoZCxfLG0pe3ZhciBUPTI7aWYobSl7aWYobS5iaWZmPj0yJiZtLmJpZmY8PTUpcmV0dXJuIGlWKGQpOzEyPT1tLmJpZmYmJihUPTQp''@;'; put 'put ''fXZhciBQPWQucmVhZF9zaGlmdChUKSxRPWQucmVhZF9zaGlmdChUKSxzZT1DNShkLDIpLG9lPUM1KGQsMik7cmV0dXJue3M6e3I6UCxjOnNlWzBdLGNSZWw6c2VbMV0sclJlbDpzZVsyXX0sZTp7cjpRLGM6b2VbMF0sY1JlbDpvZVsxXSxyUmVsOm9lWzJdfX19ZnVuY3Rpb24gaVYoZCl7dmFy''@;'; put 'put ''IF89QzUoZCwyKSxtPUM1KGQsMiksVD1kLnJlYWRfc2hpZnQoMSksUD1kLnJlYWRfc2hpZnQoMSk7cmV0dXJue3M6e3I6X1swXSxjOlQsY1JlbDpfWzFdLHJSZWw6X1syXX0sZTp7cjptWzBdLGM6UCxjUmVsOm1bMV0sclJlbDptWzJdfX19ZnVuY3Rpb24gb1YoZCxfLG0pe2lmKG0mJm0uYmlm''@;'; put 'put ''Zj49MiYmbS5iaWZmPD01KXJldHVybiBmdW5jdGlvbiBhVihkKXt2YXIgXz1DNShkLDIpLG09ZC5yZWFkX3NoaWZ0KDEpO3JldHVybntyOl9bMF0sYzptLGNSZWw6X1sxXSxyUmVsOl9bMl19fShkKTt2YXIgVD1kLnJlYWRfc2hpZnQobSYmMTI9PW0uYmlmZj80OjIpLFA9QzUoZCwyKTtyZXR1''@;'; put 'put ''cm57cjpULGM6UFswXSxjUmVsOlBbMV0sclJlbDpQWzJdfX1mdW5jdGlvbiBwayhkKXt2YXIgXz1kLnJlYWRfc2hpZnQoMiksbT1kLnJlYWRfc2hpZnQoMik7cmV0dXJue3I6XyxjOjI1NSZtLGZRdW90ZWQ6ISEoMTYzODQmbSksY1JlbDptPj4xNSxyUmVsOm0+PjE1fX1mdW5jdGlvbiBnayhk''@;'; put 'put ''KXtyZXR1cm5bZC5yZWFkX3NoaWZ0KDEpLGQucmVhZF9zaGlmdCgxKV19ZnVuY3Rpb24gelEoZCxfKXt2YXIgbT1bZC5yZWFkX3NoaWZ0KDEpXTtpZigxMj09Xylzd2l0Y2gobVswXSl7Y2FzZSAyOm1bMF09NDticmVhaztjYXNlIDQ6bVswXT0xNjticmVhaztjYXNlIDA6bVswXT0xO2JyZWFr''@;'; put 'put ''O2Nhc2UgMTptWzBdPTJ9c3dpdGNoKG1bMF0pe2Nhc2UgNDptWzFdPXhhKGQsMSk/IlRSVUUiOiJGQUxTRSIsMTIhPV8mJihkLmwrPTcpO2JyZWFrO2Nhc2UgMzc6Y2FzZSAxNjptWzFdPW5sW2RbZC5sXV0sZC5sKz0xMj09Xz80Ojg7YnJlYWs7Y2FzZSAwOmQubCs9ODticmVhaztjYXNlIDE6''@;'; put 'put ''bVsxXT1xcyhkKTticmVhaztjYXNlIDI6bVsxXT1FbihkLDAse2JpZmY6Xz4wJiZfPDg/MjpffSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkJhZCBTZXJBcjogIittWzBdKX1yZXR1cm4gbX1mdW5jdGlvbiB2VihkLF8sbSl7Zm9yKHZhciBUPWQucmVhZF9zaGlmdCgxMj09bS5i''@;'; put 'put ''aWZmPzQ6MiksUD1bXSxRPTA7USE9VDsrK1EpUC5wdXNoKCgxMj09bS5iaWZmP2p1Om9kKShkLDgpKTtyZXR1cm4gUH1mdW5jdGlvbiBnNWUoZCxfLG0pe3ZhciBUPTAsUD0wOzEyPT1tLmJpZmY/KFQ9ZC5yZWFkX3NoaWZ0KDQpLFA9ZC5yZWFkX3NoaWZ0KDQpKTooUD0xK2QucmVhZF9zaGlm''@;'; put 'put ''dCgxKSxUPTErZC5yZWFkX3NoaWZ0KDIpKSxtLmJpZmY+PTImJm0uYmlmZjw4JiYoLS1ULDA9PS0tUCYmKFA9MjU2KSk7Zm9yKHZhciBRPTAsc2U9W107USE9VCYmKHNlW1FdPVtdKTsrK1EpZm9yKHZhciBvZT0wO29lIT1QOysrb2Upc2VbUV1bb2VdPXpRKGQsbS5iaWZmKTtyZXR1cm4gc2V9''@;'; put 'put ''ZnVuY3Rpb24gSTgoZCxfLG0pe3JldHVybiBkLmwrPTIsW3BrKGQpXX1mdW5jdGlvbiBFNShkKXtyZXR1cm4gZC5sKz02LFtdfXZhciBBUz1JOCxrUz1FNSxGOT1FNSx3az1JODtmdW5jdGlvbiBSUyhkKXtyZXR1cm4gZC5sKz0yLFtpZChkKSwxJmQucmVhZF9zaGlmdCgyKV19dmFyIHlWPUk4''@;'; put 'put ''LGJWPVJTLHFRPUU1LEtRPUk4LENrPUk4LF81ZT1bIkRhdGEiLCJBbGwiLCJIZWFkZXJzIiwiPz8iLCI/RGF0YTIiLCI/PyIsIj9EYXRhSGVhZGVycyIsIj8/IiwiVG90YWxzIiwiPz8iLCI/PyIsIj8/IiwiP0RhdGFUb3RhbHMiLCI/PyIsIj8/IiwiPz8iLCI/Q3VycmVudCJdLHdWPXsxOntu''@;'; put 'put ''OiJQdGdFeHAiLGY6ZnVuY3Rpb24galEoZCxfLG0pe3JldHVybiBkLmwrKyxtJiYxMj09bS5iaWZmP1tkLnJlYWRfc2hpZnQoNCwiaSIpLDBdOltkLnJlYWRfc2hpZnQoMiksZC5yZWFkX3NoaWZ0KG0mJjI9PW0uYmlmZj8xOjIpXX19LDI6e246IlB0Z1RibCIsZjpFY30sMzp7bjoiUHRnQWRk''@;'; put 'put ''IixmOmFofSw0OntuOiJQdGdTdWIiLGY6YWh9LDU6e246IlB0Z011bCIsZjphaH0sNjp7bjoiUHRnRGl2IixmOmFofSw3OntuOiJQdGdQb3dlciIsZjphaH0sODp7bjoiUHRnQ29uY2F0IixmOmFofSw5OntuOiJQdGdMdCIsZjphaH0sMTA6e246IlB0Z0xlIixmOmFofSwxMTp7bjoiUHRnRXEi''@;'; put 'put ''LGY6YWh9LDEyOntuOiJQdGdHZSIsZjphaH0sMTM6e246IlB0Z0d0IixmOmFofSwxNDp7bjoiUHRnTmUiLGY6YWh9LDE1OntuOiJQdGdJc2VjdCIsZjphaH0sMTY6e246IlB0Z1VuaW9uIixmOmFofSwxNzp7bjoiUHRnUmFuZ2UiLGY6YWh9LDE4OntuOiJQdGdVcGx1cyIsZjphaH0sMTk6e246''@;'; put 'put ''IlB0Z1VtaW51cyIsZjphaH0sMjA6e246IlB0Z1BlcmNlbnQiLGY6YWh9LDIxOntuOiJQdGdQYXJlbiIsZjphaH0sMjI6e246IlB0Z01pc3NBcmciLGY6YWh9LDIzOntuOiJQdGdTdHIiLGY6ZnVuY3Rpb24gbVYoZCxfLG0pe3JldHVybiBkLmwrKyxiZShkLDAsbSl9fSwyNjp7bjoiUHRnU2hl''@;'; put 'put ''ZXQiLGY6ZnVuY3Rpb24gYjVlKGQsXyxtKXtyZXR1cm4gZC5sKz01LGQubCs9MixkLmwrPTI9PW0uYmlmZj8xOjQsWyJQVEdTSEVFVCJdfX0sMjc6e246IlB0Z0VuZFNoZWV0IixmOmZ1bmN0aW9uIFFRKGQsXyxtKXtyZXR1cm4gZC5sKz0yPT1tLmJpZmY/NDo1LFsiUFRHRU5EU0hFRVQiXX19''@;'; put 'put ''LDI4OntuOiJQdGdFcnIiLGY6ZnVuY3Rpb24gZlYoZCl7cmV0dXJuIGQubCsrLG5sW2QucmVhZF9zaGlmdCgxKV19fSwyOTp7bjoiUHRnQm9vbCIsZjpmdW5jdGlvbiBVUShkKXtyZXR1cm4gZC5sKyssMCE9PWQucmVhZF9zaGlmdCgxKX19LDMwOntuOiJQdGdJbnQiLGY6ZnVuY3Rpb24gcFYo''@;'; put 'put ''ZCl7cmV0dXJuIGQubCsrLGQucmVhZF9zaGlmdCgyKX19LDMxOntuOiJQdGdOdW0iLGY6ZnVuY3Rpb24gZ1YoZCl7cmV0dXJuIGQubCsrLHFzKGQpfX0sMzI6e246IlB0Z0FycmF5IixmOmZ1bmN0aW9uIGxWKGQsXyxtKXt2YXIgVD0oOTYmZFtkLmwrK10pPj41O3JldHVybiBkLmwrPTI9PW0u''@;'; put 'put ''YmlmZj82OjEyPT1tLmJpZmY/MTQ6NyxbVF19fSwzMzp7bjoiUHRnRnVuYyIsZjpmdW5jdGlvbiBCUShkLF8sbSl7dmFyIFQ9KDk2JmRbZC5sXSk+PjU7ZC5sKz0xO3ZhciBQPWQucmVhZF9zaGlmdChtJiZtLmJpZmY8PTM/MToyKTtyZXR1cm5bQTVlW1BdLG9KW1BdLFRdfX0sMzQ6e246IlB0''@;'; put 'put ''Z0Z1bmNWYXIiLGY6ZnVuY3Rpb24geWsoZCxfLG0pe3ZhciBUPWRbZC5sKytdLFA9ZC5yZWFkX3NoaWZ0KDEpLFE9bSYmbS5iaWZmPD0zP1s4OD09VD8tMTowLGQucmVhZF9zaGlmdCgxKV06ZnVuY3Rpb24gaFYoZCl7cmV0dXJuW2RbZC5sKzFdPj43LDMyNzY3JmQucmVhZF9zaGlmdCgyKV19''@;'; put 'put ''KGQpO3JldHVybltQLCgwPT09UVswXT9vSjpSaylbUVsxXV1dfX0sMzU6e246IlB0Z05hbWUiLGY6ZnVuY3Rpb24gX1YoZCxfLG0pe3ZhciBUPWQucmVhZF9zaGlmdCgxKT4+PjUmMyxRPWQucmVhZF9zaGlmdCghbXx8bS5iaWZmPj04PzQ6Mik7c3dpdGNoKG0uYmlmZil7Y2FzZSAyOmQubCs9''@;'; put 'put ''NTticmVhaztjYXNlIDM6Y2FzZSA0OmQubCs9ODticmVhaztjYXNlIDU6ZC5sKz0xMn1yZXR1cm5bVCwwLFFdfX0sMzY6e246IlB0Z1JlZiIsZjpmdW5jdGlvbiBfayhkLF8sbSl7dmFyIFQ9KDk2JmRbZC5sXSk+PjU7cmV0dXJuIGQubCs9MSxbVCxvVihkLDAsbSldfX0sMzc6e246IlB0Z0Fy''@;'; put 'put ''ZWEiLGY6ZnVuY3Rpb24gTDkoZCxfLG0pe3JldHVyblsoOTYmZFtkLmwrK10pPj41LGZrKGQsMCxtKV19fSwzODp7bjoiUHRnTWVtQXJlYSIsZjpmdW5jdGlvbiBtNWUoZCxfLG0pe3ZhciBUPWQucmVhZF9zaGlmdCgxKT4+PjUmMztyZXR1cm4gZC5sKz1tJiYyPT1tLmJpZmY/Mzo0LFtULGQu''@;'; put 'put ''cmVhZF9zaGlmdChtJiYyPT1tLmJpZmY/MToyKV19fSwzOTp7bjoiUHRnTWVtRXJyIixmOkVjfSw0MDp7bjoiUHRnTWVtTm9NZW0iLGY6RWN9LDQxOntuOiJQdGdNZW1GdW5jIixmOmZ1bmN0aW9uIHY1ZShkLF8sbSl7cmV0dXJuW2QucmVhZF9zaGlmdCgxKT4+PjUmMyxkLnJlYWRfc2hpZnQo''@;'; put 'put ''bSYmMj09bS5iaWZmPzE6MildfX0sNDI6e246IlB0Z1JlZkVyciIsZjpmdW5jdGlvbiBaUShkLF8sbSl7dmFyIFQ9ZC5yZWFkX3NoaWZ0KDEpPj4+NSYzO3JldHVybiBkLmwrPTQsbS5iaWZmPDgmJmQubC0tLDEyPT1tLmJpZmYmJihkLmwrPTIpLFtUXX19LDQzOntuOiJQdGdBcmVhRXJyIixm''@;'; put 'put ''OmZ1bmN0aW9uIHNWKGQsXyxtKXt2YXIgVD0oOTYmZFtkLmwrK10pPj41O3JldHVybiBkLmwrPW0mJm0uYmlmZj44PzEyOm0uYmlmZjw4PzY6OCxbVF19fSw0NDp7bjoiUHRnUmVmTiIsZjpmdW5jdGlvbiB1VihkLF8sbSl7dmFyIFQ9KDk2JmRbZC5sXSk+PjU7ZC5sKz0xO3ZhciBQPWZ1bmN0''@;'; put 'put ''aW9uIE5RKGQsXyxtKXt2YXIgVD1tJiZtLmJpZmY/bS5iaWZmOjg7aWYoVD49MiYmVDw9NSlyZXR1cm4gZnVuY3Rpb24gUzUoZCl7dmFyIF89ZC5yZWFkX3NoaWZ0KDIpLG09ZC5yZWFkX3NoaWZ0KDEpLFQ9KDMyNzY4Jl8pPj4xNSxQPSgxNjM4NCZfKT4+MTQ7cmV0dXJuIF8mPTE2MzgzLDE9''@;'; put 'put ''PVQmJl8+PTgxOTImJihfLT0xNjM4NCksMT09UCYmbT49MTI4JiYobS09MjU2KSx7cjpfLGM6bSxjUmVsOlAsclJlbDpUfX0oZCk7dmFyIFA9ZC5yZWFkX3NoaWZ0KFQ+PTEyPzQ6MiksUT1kLnJlYWRfc2hpZnQoMiksc2U9KDE2Mzg0JlEpPj4xNCxvZT0oMzI3NjgmUSk+PjE1O2lmKFEmPTE2''@;'; put 'put ''MzgzLDE9PW9lKWZvcig7UD41MjQyODc7KVAtPTEwNDg1NzY7aWYoMT09c2UpZm9yKDtRPjgxOTE7KVEtPTE2Mzg0O3JldHVybntyOlAsYzpRLGNSZWw6c2UsclJlbDpvZX19KGQsMCxtKTtyZXR1cm5bVCxQXX19LDQ1OntuOiJQdGdBcmVhTiIsZjpmdW5jdGlvbiBmNWUoZCxfLG0pe3ZhciBU''@;'; put 'put ''PSg5NiZkW2QubCsrXSk+PjUsUD1mdW5jdGlvbiBPUShkLF8sbSl7aWYobS5iaWZmPDgpcmV0dXJuIGlWKGQpO3ZhciBUPWQucmVhZF9zaGlmdCgxMj09bS5iaWZmPzQ6MiksUD1kLnJlYWRfc2hpZnQoMTI9PW0uYmlmZj80OjIpLFE9QzUoZCwyKSxzZT1DNShkLDIpO3JldHVybntzOntyOlQs''@;'; put 'put ''YzpRWzBdLGNSZWw6UVsxXSxyUmVsOlFbMl19LGU6e3I6UCxjOnNlWzBdLGNSZWw6c2VbMV0sclJlbDpzZVsyXX19fShkLDAsbSk7cmV0dXJuW1QsUF19fSw0Njp7bjoiUHRnTWVtQXJlYU4iLGY6ZnVuY3Rpb24gdzVlKGQpe3JldHVybltkLnJlYWRfc2hpZnQoMSk+Pj41JjMsZC5yZWFkX3No''@;'; put 'put ''aWZ0KDIpXX19LDQ3OntuOiJQdGdNZW1Ob01lbU4iLGY6ZnVuY3Rpb24gQzVlKGQpe3JldHVybltkLnJlYWRfc2hpZnQoMSk+Pj41JjMsZC5yZWFkX3NoaWZ0KDIpXX19LDU3OntuOiJQdGdOYW1lWCIsZjpmdW5jdGlvbiBXUShkLF8sbSl7cmV0dXJuIDU9PW0uYmlmZj9mdW5jdGlvbiBZUShk''@;'; put 'put ''KXt2YXIgXz1kLnJlYWRfc2hpZnQoMSk+Pj41JjMsbT1kLnJlYWRfc2hpZnQoMiwiaSIpO2QubCs9ODt2YXIgVD1kLnJlYWRfc2hpZnQoMik7cmV0dXJuIGQubCs9MTIsW18sbSxUXX0oZCk6W2QucmVhZF9zaGlmdCgxKT4+PjUmMyxkLnJlYWRfc2hpZnQoMiksZC5yZWFkX3NoaWZ0KDQpXX19''@;'; put 'put ''LDU4OntuOiJQdGdSZWYzZCIsZjpmdW5jdGlvbiBkVihkLF8sbSl7dmFyIFQ9KDk2JmRbZC5sXSk+PjU7ZC5sKz0xO3ZhciBQPWQucmVhZF9zaGlmdCgyKTtyZXR1cm4gbSYmNT09bS5iaWZmJiYoZC5sKz0xMiksW1QsUCxvVihkLDAsbSldfX0sNTk6e246IlB0Z0FyZWEzZCIsZjpmdW5jdGlv''@;'; put 'put ''biBGUShkLF8sbSl7dmFyIFQ9KDk2JmRbZC5sKytdKT4+NSxQPWQucmVhZF9zaGlmdCgyLCJpIik7aWYobSYmNT09PW0uYmlmZilkLmwrPTEyO3JldHVybltULFAsZmsoZCwwLG0pXX19LDYwOntuOiJQdGdSZWZFcnIzZCIsZjpmdW5jdGlvbiBHUShkLF8sbSl7dmFyIFQ9KDk2JmRbZC5sKytd''@;'; put 'put ''KT4+NSxQPWQucmVhZF9zaGlmdCgyKSxRPTQ7aWYobSlzd2l0Y2gobS5iaWZmKXtjYXNlIDU6UT0xNTticmVhaztjYXNlIDEyOlE9Nn1yZXR1cm4gZC5sKz1RLFtULFBdfX0sNjE6e246IlB0Z0FyZWFFcnIzZCIsZjpmdW5jdGlvbiBsZChkLF8sbSl7dmFyIFQ9KDk2JmRbZC5sKytdKT4+NSxQ''@;'; put 'put ''PWQucmVhZF9zaGlmdCgyKSxRPTg7aWYobSlzd2l0Y2gobS5iaWZmKXtjYXNlIDU6ZC5sKz0xMixRPTY7YnJlYWs7Y2FzZSAxMjpRPTEyfXJldHVybiBkLmwrPVEsW1QsUF19fSwyNTU6e319LEVrPXs2NDozMiw5NjozMiw2NTozMyw5NzozMyw2NjozNCw5ODozNCw2NzozNSw5OTozNSw2ODoz''@;'; put 'put ''NiwxMDA6MzYsNjk6MzcsMTAxOjM3LDcwOjM4LDEwMjozOCw3MTozOSwxMDM6MzksNzI6NDAsMTA0OjQwLDczOjQxLDEwNTo0MSw3NDo0MiwxMDY6NDIsNzU6NDMsMTA3OjQzLDc2OjQ0LDEwODo0NCw3Nzo0NSwxMDk6NDUsNzg6NDYsMTEwOjQ2LDc5OjQ3LDExMTo0Nyw4ODozNCwxMjA6MzQs''@;'; put 'put ''ODk6NTcsMTIxOjU3LDkwOjU4LDEyMjo1OCw5MTo1OSwxMjM6NTksOTI6NjAsMTI0OjYwLDkzOjYxLDEyNTo2MX07IWZ1bmN0aW9uKCl7Zm9yKHZhciBkIGluIEVrKXdWW2RdPXdWW0VrW2RdXX0oKTt2YXIgQ1Y9ezE6e246IlB0Z0VsZkxlbCIsZjpSU30sMjp7bjoiUHRnRWxmUnciLGY6S1F9''@;'; put 'put ''LDM6e246IlB0Z0VsZkNvbCIsZjpBU30sNjp7bjoiUHRnRWxmUndWIixmOkNrfSw3OntuOiJQdGdFbGZDb2xWIixmOndrfSwxMDp7bjoiUHRnRWxmUmFkaWNhbCIsZjp5Vn0sMTE6e246IlB0Z0VsZlJhZGljYWxTIixmOnFRfSwxMzp7bjoiUHRnRWxmQ29sUyIsZjprU30sMTU6e246IlB0Z0Vs''@;'; put 'put ''ZkNvbFNWIixmOkY5fSwxNjp7bjoiUHRnRWxmUmFkaWNhbExlbCIsZjpiVn0sMjU6e246IlB0Z0xpc3QiLGY6ZnVuY3Rpb24geTVlKGQpe2QubCs9Mjt2YXIgXz1kLnJlYWRfc2hpZnQoMiksbT1kLnJlYWRfc2hpZnQoMiksVD1kLnJlYWRfc2hpZnQoNCksUD1kLnJlYWRfc2hpZnQoMiksUT1k''@;'; put 'put ''LnJlYWRfc2hpZnQoMik7cmV0dXJue2l4dGk6Xyxjb2x0eXBlOjMmbSxydDpfNWVbbT4+MiYzMV0saWR4OlQsYzpQLEM6UX19fSwyOTp7bjoiUHRnU3hOYW1lIixmOmZ1bmN0aW9uIFhRKGQpe3JldHVybiBkLmwrPTIsW2QucmVhZF9zaGlmdCg0KV19fSwyNTU6e319LE1rPXswOntuOiJQdGdB''@;'; put 'put ''dHRyTm9vcCIsZjpmdW5jdGlvbiBTayhkKXtyZXR1cm4gZC5sKz00LFswLDBdfX0sMTp7bjoiUHRnQXR0clNlbWkiLGY6ZnVuY3Rpb24gTzkoZCxfLG0pe3ZhciBUPTI1NSZkW2QubCsxXT8xOjA7cmV0dXJuIGQubCs9bSYmMj09bS5iaWZmPzM6NCxbVF19fSwyOntuOiJQdGdBdHRySWYiLGY6''@;'; put 'put ''ZnVuY3Rpb24gcDVlKGQsXyxtKXt2YXIgVD0yNTUmZFtkLmwrMV0/MTowO3JldHVybiBkLmwrPTIsW1QsZC5yZWFkX3NoaWZ0KG0mJjI9PW0uYmlmZj8xOjIpXX19LDQ6e246IlB0Z0F0dHJDaG9vc2UiLGY6ZnVuY3Rpb24gUFEoZCxfLG0pe2QubCs9Mjtmb3IodmFyIFQ9ZC5yZWFkX3NoaWZ0''@;'; put 'put ''KG0mJjI9PW0uYmlmZj8xOjIpLFA9W10sUT0wO1E8PVQ7KytRKVAucHVzaChkLnJlYWRfc2hpZnQobSYmMj09bS5iaWZmPzE6MikpO3JldHVybiBQfX0sODp7bjoiUHRnQXR0ckdvdG8iLGY6ZnVuY3Rpb24gSFEoZCxfLG0pe3ZhciBUPTI1NSZkW2QubCsxXT8xOjA7cmV0dXJuIGQubCs9Mixb''@;'; put 'put ''VCxkLnJlYWRfc2hpZnQobSYmMj09bS5iaWZmPzE6MildfX0sMTY6e246IlB0Z0F0dHJTdW0iLGY6ZnVuY3Rpb24gTjkoZCxfLG0pe2QubCs9bSYmMj09bS5iaWZmPzM6NH19LDMyOntuOiJQdGdBdHRyQmF4Y2VsIixmOmZ1bmN0aW9uIGNWKGQpe3ZhciBfPTEmZFtkLmwrMV07cmV0dXJuIGQu''@;'; put 'put ''bCs9NCxbXywxXX19LDY0OntuOiJQdGdBdHRyU3BhY2UiLGY6ZnVuY3Rpb24gbWsoZCl7cmV0dXJuIGQucmVhZF9zaGlmdCgyKSxnayhkKX19LDY1OntuOiJQdGdBdHRyU3BhY2VTZW1pIixmOmZ1bmN0aW9uIHZrKGQpe3JldHVybiBkLnJlYWRfc2hpZnQoMiksZ2soZCl9fSwxMjg6e246IlB0''@;'; put 'put ''Z0F0dHJJZkVycm9yIixmOmZ1bmN0aW9uIFZRKGQpe3ZhciBfPTI1NSZkW2QubCsxXT8xOjA7cmV0dXJuIGQubCs9MixbXyxkLnJlYWRfc2hpZnQoMildfX0sMjU1Ont9fTtmdW5jdGlvbiB4eShkLF8sbSxULFApe2lmKFQuYmlmZjw4KXJldHVybiBFYyhkLF8pO2Zvcih2YXIgUT1kLmwrXyxz''@;'; put 'put ''ZT1bXSxvZT0wO29lIT09bS5sZW5ndGg7KytvZSlzd2l0Y2gobVtvZV1bMF0pe2Nhc2UiUHRnQXJyYXkiOm1bb2VdWzFdPWc1ZShkLDAsVCksc2UucHVzaChtW29lXVsxXSk7YnJlYWs7Y2FzZSJQdGdNZW1BcmVhIjptW29lXVsyXT12VihkLDAsVCksc2UucHVzaChtW29lXVsyXSk7YnJlYWs7''@;'; put 'put ''Y2FzZSJQdGdFeHAiOlQmJjEyPT1ULmJpZmYmJihtW29lXVsxXVsxXT1kLnJlYWRfc2hpZnQoNCksc2UucHVzaChtW29lXVsxXSkpO2JyZWFrO2Nhc2UiUHRnTGlzdCI6Y2FzZSJQdGdFbGZSYWRpY2FsUyI6Y2FzZSJQdGdFbGZDb2xTIjpjYXNlIlB0Z0VsZkNvbFNWIjp0aHJvdyJVbnN1cHBv''@;'; put 'put ''cnRlZCAiK21bb2VdWzBdfXJldHVybiBfPVEtZC5sLCFQJiYwIT09XyYmc2UucHVzaChFYyhkLF8pKSxzZX1mdW5jdGlvbiBBZihkLF8sbSl7Zm9yKHZhciBQLFEsVD1kLmwrXyxzZT1bXTtUIT1kLmw7KV89VC1kLmwsUD13VltRPWRbZC5sXV0sKDI0PT09UXx8MjU9PT1RKSYmKFA9KDI0PT09''@;'; put 'put ''UT9DVjpNaylbZFtkLmwrMV1dKSxQJiZQLmY/c2UucHVzaChbUC5uLFAuZihkLF8sbSldKTpFYyhkLF8pO3JldHVybiBzZX1mdW5jdGlvbiBTNWUoZCl7Zm9yKHZhciBfPVtdLG09MDttPGQubGVuZ3RoOysrbSl7Zm9yKHZhciBUPWRbbV0sUD1bXSxRPTA7UTxULmxlbmd0aDsrK1Epe3ZhciBz''@;'; put 'put ''ZT1UW1FdO1AucHVzaChzZT8yPT09c2VbMF0/JyInK3NlWzFdLnJlcGxhY2UoLyIvZywnIiInKSsnIic6c2VbMV06IiIpfV8ucHVzaChQLmpvaW4oIiwiKSl9cmV0dXJuIF8uam9pbigiOyIpfU1rWzMzXT1Na1szMl07dmFyIElTPXtQdGdBZGQ6IisiLFB0Z0NvbmNhdDoiJiIsUHRnRGl2OiIv''@;'; put 'put ''IixQdGdFcToiPSIsUHRnR2U6Ij49IixQdGdHdDoiPiIsUHRnTGU6Ijw9IixQdGdMdDoiPCIsUHRnTXVsOiIqIixQdGdOZToiPD4iLFB0Z1Bvd2VyOiJeIixQdGdTdWI6Ii0ifSxKUT1uZXcgUmVnRXhwKC9bXlx3XHU0RTAwLVx1OUZGRlx1MzA0MC1cdTMwRkZdLyk7ZnVuY3Rpb24gVGsoZCxf''@;'; put 'put ''LG0pe2lmKCFkKXJldHVybiJTSDMzVEpTRVJSMCI7aWYobS5iaWZmPjgmJighZC5YVEl8fCFkLlhUSVtfXSkpcmV0dXJuIGQuU2hlZXROYW1lc1tfXTtpZighZC5YVEkpcmV0dXJuIlNIMzNUSlNFUlI2Ijt2YXIgVD1kLlhUSVtfXTtpZihtLmJpZmY8OClyZXR1cm4gXz4xZTQmJihfLT02NTUz''@;'; put 'put ''NiksXzwwJiYoXz0tXyksMD09Xz8iIjpkLlhUSVtfLTFdO2lmKCFUKXJldHVybiJTSDMzVEpTRVJSMSI7dmFyIFA9IiI7aWYobS5iaWZmPjgpc3dpdGNoKGRbVFswXV1bMF0pe2Nhc2UgMzU3OnJldHVybiBQPS0xPT1UWzFdPyIjUkVGIjpkLlNoZWV0TmFtZXNbVFsxXV0sVFsxXT09VFsyXT9Q''@;'; put 'put ''OlArIjoiK2QuU2hlZXROYW1lc1tUWzJdXTtjYXNlIDM1ODpyZXR1cm4gbnVsbCE9bS5TSUQ/ZC5TaGVldE5hbWVzW20uU0lEXToiU0gzM1RKU1NBTUUiK2RbVFswXV1bMF07ZGVmYXVsdDpyZXR1cm4iU0gzM1RKU1NSQyIrZFtUWzBdXVswXX1zd2l0Y2goZFtUWzBdXVswXVswXSl7Y2FzZSAx''@;'; put 'put ''MDI1OnJldHVybiBQPS0xPT1UWzFdPyIjUkVGIjpkLlNoZWV0TmFtZXNbVFsxXV18fCJTSDMzVEpTRVJSMyIsVFsxXT09VFsyXT9QOlArIjoiK2QuU2hlZXROYW1lc1tUWzJdXTtjYXNlIDE0ODQ5OnJldHVybiBkW1RbMF1dLnNsaWNlKDEpLm1hcChmdW5jdGlvbihRKXtyZXR1cm4gUS5OYW1l''@;'; put 'put ''fSkuam9pbigiOzsiKTtkZWZhdWx0OnJldHVybiBkW1RbMF1dWzBdWzNdPyhQPS0xPT1UWzFdPyIjUkVGIjpkW1RbMF1dWzBdWzNdW1RbMV1dfHwiU0gzM1RKU0VSUjQiLFRbMV09PVRbMl0/UDpQKyI6IitkW1RbMF1dWzBdWzNdW1RbMl1dKToiU0gzM1RKU0VSUjIifX1mdW5jdGlvbiBBeShk''@;'; put 'put ''LF8sbSl7cmV0dXJuIGZ1bmN0aW9uIGVKKGQsXyl7aWYoIShkfHxfJiZfLmJpZmY8PTUmJl8uYmlmZj49MikpdGhyb3cgbmV3IEVycm9yKCJlbXB0eSBzaGVldCBuYW1lIik7cmV0dXJuLyNSRUYvLnRlc3QoZCk/ZDpKUS50ZXN0KGQpPyInIitkKyInIjpkfShUayhkLF8sbSksbSl9ZnVuY3Rp''@;'; put 'put ''b24gdTEoZCxfLG0sVCxQLFEpe3ZhciBMZSxOZSxCZSxtdCxzZT1QJiZQLmJpZmZ8fDgsb2U9USYmbnVsbCE9Xz9fOntzOntjOjAscjowfSxlOntjOjAscjowfX0sZGU9W10sWmU9MCxudD0wLFFlPSIiO2lmKCFkWzBdfHwhZFswXVswXSlyZXR1cm4iIjtmb3IodmFyIGZ0PS0xLGt0PSIiLGJ0''@;'; put 'put ''PTAsRXQ9ZFswXS5sZW5ndGg7YnQ8RXQ7KytidCl7dmFyIFZ0PWRbMF1bYnRdO3N3aXRjaChWdFswXSl7Y2FzZSJQdGdVbWludXMiOmRlLnB1c2goIi0iK2RlLnBvcCgpKTticmVhaztjYXNlIlB0Z1VwbHVzIjpkZS5wdXNoKCIrIitkZS5wb3AoKSk7YnJlYWs7Y2FzZSJQdGdQZXJjZW50Ijpk''@;'; put 'put ''ZS5wdXNoKGRlLnBvcCgpKyIlIik7YnJlYWs7Y2FzZSJQdGdBZGQiOmNhc2UiUHRnQ29uY2F0IjpjYXNlIlB0Z0RpdiI6Y2FzZSJQdGdFcSI6Y2FzZSJQdGdHZSI6Y2FzZSJQdGdHdCI6Y2FzZSJQdGdMZSI6Y2FzZSJQdGdMdCI6Y2FzZSJQdGdNdWwiOmNhc2UiUHRnTmUiOmNhc2UiUHRnUG93''@;'; put 'put ''ZXIiOmNhc2UiUHRnU3ViIjppZihMZT1kZS5wb3AoKSxOZT1kZS5wb3AoKSxmdD49MCl7c3dpdGNoKGRbMF1bZnRdWzFdWzBdKXtjYXNlIDA6a3Q9T28oIiAiLGRbMF1bZnRdWzFdWzFdKTticmVhaztjYXNlIDE6a3Q9T28oIlxyIixkWzBdW2Z0XVsxXVsxXSk7YnJlYWs7ZGVmYXVsdDppZihr''@;'; put 'put ''dD0iIixQLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK2RbMF1bZnRdWzFdWzBdKX1OZSs9a3QsZnQ9LTF9ZGUucHVzaChOZStJU1tWdFswXV0rTGUpO2JyZWFrO2Nhc2UiUHRnSXNlY3QiOkxlPWRlLnBvcCgpLE5lPWRlLnBvcCgpLGRlLnB1c2go''@;'; put 'put ''TmUrIiAiK0xlKTticmVhaztjYXNlIlB0Z1VuaW9uIjpMZT1kZS5wb3AoKSxOZT1kZS5wb3AoKSxkZS5wdXNoKE5lKyIsIitMZSk7YnJlYWs7Y2FzZSJQdGdSYW5nZSI6TGU9ZGUucG9wKCksTmU9ZGUucG9wKCksZGUucHVzaChOZSsiOiIrTGUpO2JyZWFrO2Nhc2UiUHRnQXR0ckNob29zZSI6''@;'; put 'put ''Y2FzZSJQdGdBdHRyR290byI6Y2FzZSJQdGdBdHRySWYiOmNhc2UiUHRnQXR0cklmRXJyb3IiOmNhc2UiUHRnQXR0ckJheGNlbCI6Y2FzZSJQdGdBdHRyU2VtaSI6Y2FzZSJQdGdNZW1BcmVhIjpjYXNlIlB0Z1RibCI6Y2FzZSJQdGdNZW1FcnIiOmNhc2UiUHRnTWVtQXJlYU4iOmNhc2UiUHRn''@;'; put 'put ''TWVtTm9NZW1OIjpjYXNlIlB0Z0F0dHJOb29wIjpjYXNlIlB0Z1NoZWV0IjpjYXNlIlB0Z0VuZFNoZWV0IjpjYXNlIlB0Z01lbUZ1bmMiOmNhc2UiUHRnTWVtTm9NZW0iOmJyZWFrO2Nhc2UiUHRnUmVmIjpCZT1yaChWdFsxXVsxXSxvZSxQKSxkZS5wdXNoKHYyKEJlLHNlKSk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJQdGdSZWZOIjpCZT1tP3JoKFZ0WzFdWzFdLG0sUCk6VnRbMV1bMV0sZGUucHVzaCh2MihCZSxzZSkpO2JyZWFrO2Nhc2UiUHRnUmVmM2QiOlplPVZ0WzFdWzFdLEJlPXJoKFZ0WzFdWzJdLG9lLFApLFFlPUF5KFQsWmUsUCksZGUucHVzaChRZSsiISIrdjIoQmUsc2UpKTticmVhaztjYXNl''@;'; put 'put ''IlB0Z0Z1bmMiOmNhc2UiUHRnRnVuY1ZhciI6dmFyIG5yPVZ0WzFdWzBdLG5uPVZ0WzFdWzFdO25yfHwobnI9MCk7dmFyIGFyPTA9PShuciY9MTI3KT9bXTpkZS5zbGljZSgtbnIpO2RlLmxlbmd0aC09bnIsIlVzZXIiPT09bm4mJihubj1hci5zaGlmdCgpKSxkZS5wdXNoKG5uKyIoIithci5q''@;'; put 'put ''b2luKCIsIikrIikiKTticmVhaztjYXNlIlB0Z0Jvb2wiOmRlLnB1c2goVnRbMV0/IlRSVUUiOiJGQUxTRSIpO2JyZWFrO2Nhc2UiUHRnSW50IjpjYXNlIlB0Z051bSI6ZGUucHVzaChTdHJpbmcoVnRbMV0pKTticmVhaztjYXNlIlB0Z1N0ciI6ZGUucHVzaCgnIicrVnRbMV0ucmVwbGFjZSgv''@;'; put 'put ''Ii9nLCciIicpKyciJyk7YnJlYWs7Y2FzZSJQdGdFcnIiOmRlLnB1c2goVnRbMV0pO2JyZWFrO2Nhc2UiUHRnQXJlYU4iOm10PW41KFZ0WzFdWzFdLG0/e3M6bX06b2UsUCksZGUucHVzaCh0ZChtdCxQKSk7YnJlYWs7Y2FzZSJQdGdBcmVhIjptdD1uNShWdFsxXVsxXSxvZSxQKSxkZS5wdXNo''@;'; put 'put ''KHRkKG10LFApKTticmVhaztjYXNlIlB0Z0FyZWEzZCI6WmU9VnRbMV1bMV0sbXQ9bjUoVnRbMV1bMl0sb2UsUCksUWU9QXkoVCxaZSxQKSxkZS5wdXNoKFFlKyIhIit0ZChtdCxQKSk7YnJlYWs7Y2FzZSJQdGdBdHRyU3VtIjpkZS5wdXNoKCJTVU0oIitkZS5wb3AoKSsiKSIpO2JyZWFrO2Nh''@;'; put 'put ''c2UiUHRnTmFtZSI6dmFyIGpuPShULm5hbWVzfHxbXSlbKG50PVZ0WzFdWzJdKS0xXXx8KFRbMF18fFtdKVtudF0sa249am4/am4uTmFtZToiU0gzM1RKU05BTUUiK1N0cmluZyhudCk7a24gaW4gYUomJihrbj1hSltrbl0pLGRlLnB1c2goa24pO2JyZWFrO2Nhc2UiUHRnTmFtZVgiOnZhciBn''@;'; put 'put ''cixzcj1WdFsxXVsxXTtpZihudD1WdFsxXVsyXSwhKFAuYmlmZjw9NSkpe3ZhciBxbj0iIjtpZigxNDg0OT09KChUW3NyXXx8W10pWzBdfHxbXSlbMF18fCgxMDI1PT0oKFRbc3JdfHxbXSlbMF18fFtdKVswXT9UW3NyXVtudF0mJlRbc3JdW250XS5pdGFiPjAmJihxbj1ULlNoZWV0TmFtZXNb''@;'; put 'put ''VFtzcl1bbnRdLml0YWItMV0rIiEiKTpxbj1ULlNoZWV0TmFtZXNbbnQtMV0rIiEiKSxUW3NyXSYmVFtzcl1bbnRdKXFuKz1UW3NyXVtudF0uTmFtZTtlbHNlIGlmKFRbMF0mJlRbMF1bbnRdKXFuKz1UWzBdW250XS5OYW1lO2Vsc2V7dmFyIE9pPShUayhULHNyLFApfHwiIikuc3BsaXQoIjs7''@;'; put 'put ''Iik7T2lbbnQtMV0/cW49T2lbbnQtMV06cW4rPSJTSDMzVEpTRVJSWCJ9ZGUucHVzaChxbik7YnJlYWt9c3I8MCYmKHNyPS1zciksVFtzcl0mJihncj1UW3NyXVtudF0pLGdyfHwoZ3I9e05hbWU6IlNIMzNUSlNFUlJZIn0pLGRlLnB1c2goZ3IuTmFtZSk7YnJlYWs7Y2FzZSJQdGdQYXJlbiI6''@;'; put 'put ''dmFyIHNvPSIoIixtbz0iKSI7aWYoZnQ+PTApe3N3aXRjaChrdD0iIixkWzBdW2Z0XVsxXVswXSl7Y2FzZSAyOnNvPU9vKCIgIixkWzBdW2Z0XVsxXVsxXSkrc287YnJlYWs7Y2FzZSAzOnNvPU9vKCJcciIsZFswXVtmdF1bMV1bMV0pK3NvO2JyZWFrO2Nhc2UgNDptbz1PbygiICIsZFswXVtm''@;'; put 'put ''dF1bMV1bMV0pK21vO2JyZWFrO2Nhc2UgNTptbz1PbygiXHIiLGRbMF1bZnRdWzFdWzFdKSttbzticmVhaztkZWZhdWx0OmlmKFAuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrZFswXVtmdF1bMV1bMF0pfWZ0PS0xfWRlLnB1c2goc28rZGUucG9w''@;'; put 'put ''KCkrbW8pO2JyZWFrO2Nhc2UiUHRnUmVmRXJyIjpjYXNlIlB0Z0FyZWFFcnIiOmNhc2UiUHRnQXJlYUVycjNkIjpjYXNlIlB0Z1JlZkVycjNkIjpkZS5wdXNoKCIjUkVGISIpO2JyZWFrO2Nhc2UiUHRnRXhwIjp2YXIga3I9e2M6bS5jLHI6bS5yfTtpZihULnNoYXJlZGZbcWkoQmU9e2M6VnRb''@;'; put 'put ''MV1bMV0scjpWdFsxXVswXX0pXSl7dmFyIERuPVQuc2hhcmVkZltxaShCZSldO2RlLnB1c2godTEoRG4sb2Usa3IsVCxQKSl9ZWxzZXt2YXIgT3I9ITE7Zm9yKExlPTA7TGUhPVQuYXJyYXlmLmxlbmd0aDsrK0xlKWlmKCEoQmUuYzwoTmU9VC5hcnJheWZbTGVdKVswXS5zLmN8fEJlLmM+TmVb''@;'; put 'put ''MF0uZS5jfHxCZS5yPE5lWzBdLnMucnx8QmUucj5OZVswXS5lLnIpKXtkZS5wdXNoKHUxKE5lWzFdLG9lLGtyLFQsUCkpLE9yPSEwO2JyZWFrfU9yfHxkZS5wdXNoKFZ0WzFdKX1icmVhaztjYXNlIlB0Z0FycmF5IjpkZS5wdXNoKCJ7IitTNWUoVnRbMV0pKyJ9Iik7YnJlYWs7Y2FzZSJQdGdB''@;'; put 'put ''dHRyU3BhY2UiOmNhc2UiUHRnQXR0clNwYWNlU2VtaSI6ZnQ9YnQ7YnJlYWs7Y2FzZSJQdGdNaXNzQXJnIjpkZS5wdXNoKCIiKTticmVhaztjYXNlIlB0Z0xpc3QiOmRlLnB1c2goIlRhYmxlIitWdFsxXS5pZHgrIlsjIitWdFsxXS5ydCsiXSIpO2JyZWFrO2Nhc2UiUHRnRWxmQ29sIjpjYXNl''@;'; put 'put ''IlB0Z0VsZkNvbFMiOmNhc2UiUHRnRWxmQ29sU1YiOmNhc2UiUHRnRWxmQ29sViI6Y2FzZSJQdGdFbGZMZWwiOmNhc2UiUHRnRWxmUmFkaWNhbCI6Y2FzZSJQdGdFbGZSYWRpY2FsTGVsIjpjYXNlIlB0Z0VsZlJhZGljYWxTIjpjYXNlIlB0Z0VsZlJ3IjpjYXNlIlB0Z0VsZlJ3ViI6dGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJVbnN1cHBvcnRlZCBFTEZzIik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBGb3JtdWxhIFRva2VuOiAiK1N0cmluZyhWdCkpfWlmKDMhPVAuYmlmZiYmZnQ+PTAmJi0xPT1bIlB0Z0F0dHJTcGFjZSIsIlB0Z0F0dHJTcGFjZVNlbWkiLCJQdGdBdHRy''@;'; put 'put ''R290byJdLmluZGV4T2YoZFswXVtidF1bMF0pKXt2YXIgTW49ITA7c3dpdGNoKChWdD1kWzBdW2Z0XSlbMV1bMF0pe2Nhc2UgNDpNbj0hMTtjYXNlIDA6a3Q9T28oIiAiLFZ0WzFdWzFdKTticmVhaztjYXNlIDU6TW49ITE7Y2FzZSAxOmt0PU9vKCJcciIsVnRbMV1bMV0pO2JyZWFrO2RlZmF1''@;'; put 'put ''bHQ6aWYoa3Q9IiIsUC5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgIitWdFsxXVswXSl9ZGUucHVzaCgoTW4/a3Q6IiIpK2RlLnBvcCgpKyhNbj8iIjprdCkpLGZ0PS0xfX1pZihkZS5sZW5ndGg+MSYmUC5XVEYpdGhyb3cgbmV3IEVycm9yKCJiYWQg''@;'; put 'put ''Zm9ybXVsYSBzdGFjayIpO3JldHVybiBkZVswXX1mdW5jdGlvbiB4ayhkLF8sbSl7dmFyIFEsVD1kLmwrXyxQPTI9PW0uYmlmZj8xOjIsc2U9ZC5yZWFkX3NoaWZ0KFApO2lmKDY1NTM1PT1zZSlyZXR1cm5bW10sRWMoZCxfLTIpXTt2YXIgb2U9QWYoZCxzZSxtKTtyZXR1cm4gXyE9PXNlK1Am''@;'; put 'put ''JihRPXh5KGQsXy1zZS1QLG9lLG0pKSxkLmw9VCxbb2UsUV19ZnVuY3Rpb24gbkooZCxfLG0pe3ZhciBQLFQ9ZC5sK18sUT1kLnJlYWRfc2hpZnQoMiksc2U9QWYoZCxRLG0pO3JldHVybiA2NTUzNT09UT9bW10sRWMoZCxfLTIpXTooXyE9PVErMiYmKFA9eHkoZCxULVEtMixzZSxtKSksW3Nl''@;'; put 'put ''LFBdKX1mdW5jdGlvbiBBayhkLF8sbSl7dmFyIFQ9ZC5sK18sUD1aaShkKTsyPT1tLmJpZmYmJisrZC5sO3ZhciBRPWZ1bmN0aW9uIEU1ZShkKXt2YXIgXztpZig2NTUzNSE9PUVyKGQsZC5sKzYpKXJldHVybltxcyhkKSwibiJdO3N3aXRjaChkW2QubF0pe2Nhc2UgMDpyZXR1cm4gZC5sKz04''@;'; put 'put ''LFsiU3RyaW5nIiwicyJdO2Nhc2UgMTpyZXR1cm4gXz0xPT09ZFtkLmwrMl0sZC5sKz04LFtfLCJiIl07Y2FzZSAyOnJldHVybiBfPWRbZC5sKzJdLGQubCs9OCxbXywiZSJdO2Nhc2UgMzpyZXR1cm4gZC5sKz04LFsiIiwicyJdfXJldHVybltdfShkKSxzZT1kLnJlYWRfc2hpZnQoMSk7MiE9''@;'; put 'put ''bS5iaWZmJiYoZC5yZWFkX3NoaWZ0KDEpLG0uYmlmZj49NSYmZC5yZWFkX3NoaWZ0KDQpKTt2YXIgb2U9ZnVuY3Rpb24gdEooZCxfLG0pe3ZhciBRLFQ9ZC5sK18sUD0yPT1tLmJpZmY/MToyLHNlPWQucmVhZF9zaGlmdChQKTtpZig2NTUzNT09c2UpcmV0dXJuW1tdLEVjKGQsXy0yKV07dmFy''@;'; put 'put ''IG9lPUFmKGQsc2UsbSk7cmV0dXJuIF8hPT1zZStQJiYoUT14eShkLF8tc2UtUCxvZSxtKSksZC5sPVQsW29lLFFdfShkLFQtZC5sLG0pO3JldHVybntjZWxsOlAsdmFsOlFbMF0sZm9ybXVsYTpvZSxzaGFyZWQ6c2U+PjMmMSx0dDpRWzFdfX1mdW5jdGlvbiBreShkLF8sbSl7dmFyIFQ9ZC5y''@;'; put 'put ''ZWFkX3NoaWZ0KDQpLFA9QWYoZCxULG0pLFE9ZC5yZWFkX3NoaWZ0KDQpO3JldHVybltQLFE+MD94eShkLFEsUCxtLCEwKTpudWxsXX12YXIgTVY9a3ksUDk9a3ksVFY9a3ksTTVlPWZ1bmN0aW9uIFJ5KGQsXyxtKXt2YXIgVD1kLnJlYWRfc2hpZnQoNCksUD1kLnJlYWRfc2hpZnQoNCksUT1B''@;'; put 'put ''ZihkLFQsbSk7cmV0dXJuW1EsUD4wP3h5KGQsUCxRLG0sITApOm51bGxdfSxUNWU9a3kseDVlPWt5O2Z1bmN0aW9uIEQ4KGQpe2lmKCgwfGQpPT1kJiZkPE1hdGgucG93KDIsMTYpJiZkPj0wKXt2YXIgXz1GcigxMSk7cmV0dXJuIF8ud3JpdGVfc2hpZnQoNCwzKSxfLndyaXRlX3NoaWZ0KDEs''@;'; put 'put ''MzApLF8ud3JpdGVfc2hpZnQoMixkKSxfLndyaXRlX3NoaWZ0KDQsMCksX312YXIgbT1GcigxNyk7cmV0dXJuIG0ud3JpdGVfc2hpZnQoNCwxMSksbS53cml0ZV9zaGlmdCgxLDMxKSxtLndyaXRlX3NoaWZ0KDgsZCksbS53cml0ZV9zaGlmdCg0LDApLG19ZnVuY3Rpb24gSXkoZCl7dmFyIF89''@;'; put 'put ''RnIoNyk7Xy53cml0ZV9zaGlmdCg0LDMrMipkLmxlbmd0aCksXy53cml0ZV9zaGlmdCgxLDIzKSxfLndyaXRlX3NoaWZ0KDIsZC5sZW5ndGgpO3ZhciBtPUZyKDIqZC5sZW5ndGgpO20ud3JpdGVfc2hpZnQoMipkLmxlbmd0aCxkLCJ1dGYxNmxlIik7dmFyIFQ9RnIoNCk7cmV0dXJuIFQud3Jp''@;'; put 'put ''dGVfc2hpZnQoNCwwKSxHKFtfLG0sVF0pfWZ1bmN0aW9uIER5KGQpe2lmKGQubWF0Y2goL14jKERJVlwvMCF8R0VUVElOR19EQVRBfE5cL0F8TkFNRVw/fE5VTEwhfE5VTSF8UkVGIXxWQUxVRSEpJC8pKXJldHVybiBmdW5jdGlvbiBpSihkKXt2YXIgXz1GcigxMCk7cmV0dXJuIF8ud3JpdGVf''@;'; put 'put ''c2hpZnQoNCwyKSxfLndyaXRlX3NoaWZ0KDEsMjgpLF8ud3JpdGVfc2hpZnQoMSxkKSxfLndyaXRlX3NoaWZ0KDQsMCksX30oK0gxW2RdKTtpZihkLm1hdGNoKC9eXCQ/KD86W0EtV11bQS1aXXsyfXxYW0EtRV1bQS1aXXxYRltBLURdfFtBLVpdezEsMn0pXCQ/KD86MTBbMC0zXVxkezR9fDEw''@;'; put 'put ''NFswLTddXGR7M318MTA0OFswLTRdXGR7Mn18MTA0ODVbMC02XVxkfDEwNDg1N1swLTZdfFsxLTldXGR7MCw1fSkkLykpcmV0dXJuIGZ1bmN0aW9uIGtrKGQpe3ZhciBfPUlzKGQpLG09RnIoMTUpO3JldHVybiBtLndyaXRlX3NoaWZ0KDQsNyksbS53cml0ZV9zaGlmdCgxLDM2KSxtLndyaXRl''@;'; put 'put ''X3NoaWZ0KDQsXy5yKSxtLndyaXRlX3NoaWZ0KDIsXy5jfCgiJCI9PWQuY2hhckF0KDApPzA6MSk8PDE0fChkLm1hdGNoKC9cJFxkLyk/MDoxKTw8MTUpLG0ud3JpdGVfc2hpZnQoNCwwKSxtfShkKTtpZihkLm1hdGNoKC9eIi4qIiQvKSlyZXR1cm4gSXkoZCk7dGhyb3ciRm9ybXVsYSB8Iitk''@;'; put 'put ''KyJ8IG5vdCBzdXBwb3J0ZWQgZm9yIFhMU0IifXZhciBSaz17MDoiQkVFUCIsMToiT1BFTiIsMjoiT1BFTi5MSU5LUyIsMzoiQ0xPU0UuQUxMIiw0OiJTQVZFIiw1OiJTQVZFLkFTIiw2OiJGSUxFLkRFTEVURSIsNzoiUEFHRS5TRVRVUCIsODoiUFJJTlQiLDk6IlBSSU5URVIuU0VUVVAiLDEw''@;'; put 'put ''OiJRVUlUIiwxMToiTkVXLldJTkRPVyIsMTI6IkFSUkFOR0UuQUxMIiwxMzoiV0lORE9XLlNJWkUiLDE0OiJXSU5ET1cuTU9WRSIsMTU6IkZVTEwiLDE2OiJDTE9TRSIsMTc6IlJVTiIsMjI6IlNFVC5QUklOVC5BUkVBIiwyMzoiU0VULlBSSU5ULlRJVExFUyIsMjQ6IlNFVC5QQUdFLkJSRUFL''@;'; put 'put ''IiwyNToiUkVNT1ZFLlBBR0UuQlJFQUsiLDI2OiJGT05UIiwyNzoiRElTUExBWSIsMjg6IlBST1RFQ1QuRE9DVU1FTlQiLDI5OiJQUkVDSVNJT04iLDMwOiJBMS5SMUMxIiwzMToiQ0FMQ1VMQVRFLk5PVyIsMzI6IkNBTENVTEFUSU9OIiwzNDoiREFUQS5GSU5EIiwzNToiRVhUUkFDVCIsMzY6''@;'; put 'put ''IkRBVEEuREVMRVRFIiwzNzoiU0VULkRBVEFCQVNFIiwzODoiU0VULkNSSVRFUklBIiwzOToiU09SVCIsNDA6IkRBVEEuU0VSSUVTIiw0MToiVEFCTEUiLDQyOiJGT1JNQVQuTlVNQkVSIiw0MzoiQUxJR05NRU5UIiw0NDoiU1RZTEUiLDQ1OiJCT1JERVIiLDQ2OiJDRUxMLlBST1RFQ1RJT04i''@;'; put 'put ''LDQ3OiJDT0xVTU4uV0lEVEgiLDQ4OiJVTkRPIiw0OToiQ1VUIiw1MDoiQ09QWSIsNTE6IlBBU1RFIiw1MjoiQ0xFQVIiLDUzOiJQQVNURS5TUEVDSUFMIiw1NDoiRURJVC5ERUxFVEUiLDU1OiJJTlNFUlQiLDU2OiJGSUxMLlJJR0hUIiw1NzoiRklMTC5ET1dOIiw2MToiREVGSU5FLk5BTUUi''@;'; put 'put ''LDYyOiJDUkVBVEUuTkFNRVMiLDYzOiJGT1JNVUxBLkdPVE8iLDY0OiJGT1JNVUxBLkZJTkQiLDY1OiJTRUxFQ1QuTEFTVC5DRUxMIiw2NjoiU0hPVy5BQ1RJVkUuQ0VMTCIsNjc6IkdBTExFUlkuQVJFQSIsNjg6IkdBTExFUlkuQkFSIiw2OToiR0FMTEVSWS5DT0xVTU4iLDcwOiJHQUxMRVJZ''@;'; put 'put ''LkxJTkUiLDcxOiJHQUxMRVJZLlBJRSIsNzI6IkdBTExFUlkuU0NBVFRFUiIsNzM6IkNPTUJJTkFUSU9OIiw3NDoiUFJFRkVSUkVEIiw3NToiQURELk9WRVJMQVkiLDc2OiJHUklETElORVMiLDc3OiJTRVQuUFJFRkVSUkVEIiw3ODoiQVhFUyIsNzk6IkxFR0VORCIsODA6IkFUVEFDSC5URVhU''@;'; put 'put ''Iiw4MToiQURELkFSUk9XIiw4MjoiU0VMRUNULkNIQVJUIiw4MzoiU0VMRUNULlBMT1QuQVJFQSIsODQ6IlBBVFRFUk5TIiw4NToiTUFJTi5DSEFSVCIsODY6Ik9WRVJMQVkiLDg3OiJTQ0FMRSIsODg6IkZPUk1BVC5MRUdFTkQiLDg5OiJGT1JNQVQuVEVYVCIsOTA6IkVESVQuUkVQRUFUIiw5''@;'; put 'put ''MToiUEFSU0UiLDkyOiJKVVNUSUZZIiw5MzoiSElERSIsOTQ6IlVOSElERSIsOTU6IldPUktTUEFDRSIsOTY6IkZPUk1VTEEiLDk3OiJGT1JNVUxBLkZJTEwiLDk4OiJGT1JNVUxBLkFSUkFZIiw5OToiREFUQS5GSU5ELk5FWFQiLDEwMDoiREFUQS5GSU5ELlBSRVYiLDEwMToiRk9STVVMQS5G''@;'; put 'put ''SU5ELk5FWFQiLDEwMjoiRk9STVVMQS5GSU5ELlBSRVYiLDEwMzoiQUNUSVZBVEUiLDEwNDoiQUNUSVZBVEUuTkVYVCIsMTA1OiJBQ1RJVkFURS5QUkVWIiwxMDY6IlVOTE9DS0VELk5FWFQiLDEwNzoiVU5MT0NLRUQuUFJFViIsMTA4OiJDT1BZLlBJQ1RVUkUiLDEwOToiU0VMRUNUIiwxMTA6''@;'; put 'put ''IkRFTEVURS5OQU1FIiwxMTE6IkRFTEVURS5GT1JNQVQiLDExMjoiVkxJTkUiLDExMzoiSExJTkUiLDExNDoiVlBBR0UiLDExNToiSFBBR0UiLDExNjoiVlNDUk9MTCIsMTE3OiJIU0NST0xMIiwxMTg6IkFMRVJUIiwxMTk6Ik5FVyIsMTIwOiJDQU5DRUwuQ09QWSIsMTIxOiJTSE9XLkNMSVBC''@;'; put 'put ''T0FSRCIsMTIyOiJNRVNTQUdFIiwxMjQ6IlBBU1RFLkxJTksiLDEyNToiQVBQLkFDVElWQVRFIiwxMjY6IkRFTEVURS5BUlJPVyIsMTI3OiJST1cuSEVJR0hUIiwxMjg6IkZPUk1BVC5NT1ZFIiwxMjk6IkZPUk1BVC5TSVpFIiwxMzA6IkZPUk1VTEEuUkVQTEFDRSIsMTMxOiJTRU5ELktFWVMi''@;'; put 'put ''LDEzMjoiU0VMRUNULlNQRUNJQUwiLDEzMzoiQVBQTFkuTkFNRVMiLDEzNDoiUkVQTEFDRS5GT05UIiwxMzU6IkZSRUVaRS5QQU5FUyIsMTM2OiJTSE9XLklORk8iLDEzNzoiU1BMSVQiLDEzODoiT04uV0lORE9XIiwxMzk6Ik9OLkRBVEEiLDE0MDoiRElTQUJMRS5JTlBVVCIsMTQyOiJPVVRM''@;'; put 'put ''SU5FIiwxNDM6IkxJU1QuTkFNRVMiLDE0NDoiRklMRS5DTE9TRSIsMTQ1OiJTQVZFLldPUktCT09LIiwxNDY6IkRBVEEuRk9STSIsMTQ3OiJDT1BZLkNIQVJUIiwxNDg6Ik9OLlRJTUUiLDE0OToiV0FJVCIsMTUwOiJGT1JNQVQuRk9OVCIsMTUxOiJGSUxMLlVQIiwxNTI6IkZJTEwuTEVGVCIs''@;'; put 'put ''MTUzOiJERUxFVEUuT1ZFUkxBWSIsMTU1OiJTSE9SVC5NRU5VUyIsMTU5OiJTRVQuVVBEQVRFLlNUQVRVUyIsMTYxOiJDT0xPUi5QQUxFVFRFIiwxNjI6IkRFTEVURS5TVFlMRSIsMTYzOiJXSU5ET1cuUkVTVE9SRSIsMTY0OiJXSU5ET1cuTUFYSU1JWkUiLDE2NjoiQ0hBTkdFLkxJTksiLDE2''@;'; put 'put ''NzoiQ0FMQ1VMQVRFLkRPQ1VNRU5UIiwxNjg6Ik9OLktFWSIsMTY5OiJBUFAuUkVTVE9SRSIsMTcwOiJBUFAuTU9WRSIsMTcxOiJBUFAuU0laRSIsMTcyOiJBUFAuTUlOSU1JWkUiLDE3MzoiQVBQLk1BWElNSVpFIiwxNzQ6IkJSSU5HLlRPLkZST05UIiwxNzU6IlNFTkQuVE8uQkFDSyIsMTg1''@;'; put 'put ''OiJNQUlOLkNIQVJULlRZUEUiLDE4NjoiT1ZFUkxBWS5DSEFSVC5UWVBFIiwxODc6IlNFTEVDVC5FTkQiLDE4ODoiT1BFTi5NQUlMIiwxODk6IlNFTkQuTUFJTCIsMTkwOiJTVEFOREFSRC5GT05UIiwxOTE6IkNPTlNPTElEQVRFIiwxOTI6IlNPUlQuU1BFQ0lBTCIsMTkzOiJHQUxMRVJZLjNE''@;'; put 'put ''LkFSRUEiLDE5NDoiR0FMTEVSWS4zRC5DT0xVTU4iLDE5NToiR0FMTEVSWS4zRC5MSU5FIiwxOTY6IkdBTExFUlkuM0QuUElFIiwxOTc6IlZJRVcuM0QiLDE5ODoiR09BTC5TRUVLIiwxOTk6IldPUktHUk9VUCIsMjAwOiJGSUxMLkdST1VQIiwyMDE6IlVQREFURS5MSU5LIiwyMDI6IlBST01P''@;'; put 'put ''VEUiLDIwMzoiREVNT1RFIiwyMDQ6IlNIT1cuREVUQUlMIiwyMDY6IlVOR1JPVVAiLDIwNzoiT0JKRUNULlBST1BFUlRJRVMiLDIwODoiU0FWRS5ORVcuT0JKRUNUIiwyMDk6IlNIQVJFIiwyMTA6IlNIQVJFLk5BTUUiLDIxMToiRFVQTElDQVRFIiwyMTI6IkFQUExZLlNUWUxFIiwyMTM6IkFT''@;'; put 'put ''U0lHTi5UTy5PQkpFQ1QiLDIxNDoiT0JKRUNULlBST1RFQ1RJT04iLDIxNToiSElERS5PQkpFQ1QiLDIxNjoiU0VULkVYVFJBQ1QiLDIxNzoiQ1JFQVRFLlBVQkxJU0hFUiIsMjE4OiJTVUJTQ1JJQkUuVE8iLDIxOToiQVRUUklCVVRFUyIsMjIwOiJTSE9XLlRPT0xCQVIiLDIyMjoiUFJJTlQu''@;'; put 'put ''UFJFVklFVyIsMjIzOiJFRElULkNPTE9SIiwyMjQ6IlNIT1cuTEVWRUxTIiwyMjU6IkZPUk1BVC5NQUlOIiwyMjY6IkZPUk1BVC5PVkVSTEFZIiwyMjc6Ik9OLlJFQ0FMQyIsMjI4OiJFRElULlNFUklFUyIsMjI5OiJERUZJTkUuU1RZTEUiLDI0MDoiTElORS5QUklOVCIsMjQzOiJFTlRFUi5E''@;'; put 'put ''QVRBIiwyNDk6IkdBTExFUlkuUkFEQVIiLDI1MDoiTUVSR0UuU1RZTEVTIiwyNTE6IkVESVRJT04uT1BUSU9OUyIsMjUyOiJQQVNURS5QSUNUVVJFIiwyNTM6IlBBU1RFLlBJQ1RVUkUuTElOSyIsMjU0OiJTUEVMTElORyIsMjU2OiJaT09NIiwyNTk6IklOU0VSVC5PQkpFQ1QiLDI2MDoiV0lO''@;'; put 'put ''RE9XLk1JTklNSVpFIiwyNjU6IlNPVU5ELk5PVEUiLDI2NjoiU09VTkQuUExBWSIsMjY3OiJGT1JNQVQuU0hBUEUiLDI2ODoiRVhURU5ELlBPTFlHT04iLDI2OToiRk9STUFULkFVVE8iLDI3MjoiR0FMTEVSWS4zRC5CQVIiLDI3MzoiR0FMTEVSWS4zRC5TVVJGQUNFIiwyNzQ6IkZJTEwuQVVU''@;'; put 'put ''TyIsMjc2OiJDVVNUT01JWkUuVE9PTEJBUiIsMjc3OiJBREQuVE9PTCIsMjc4OiJFRElULk9CSkVDVCIsMjc5OiJPTi5ET1VCTEVDTElDSyIsMjgwOiJPTi5FTlRSWSIsMjgxOiJXT1JLQk9PSy5BREQiLDI4MjoiV09SS0JPT0suTU9WRSIsMjgzOiJXT1JLQk9PSy5DT1BZIiwyODQ6IldPUktC''@;'; put 'put ''T09LLk9QVElPTlMiLDI4NToiU0FWRS5XT1JLU1BBQ0UiLDI4ODoiQ0hBUlQuV0laQVJEIiwyODk6IkRFTEVURS5UT09MIiwyOTA6Ik1PVkUuVE9PTCIsMjkxOiJXT1JLQk9PSy5TRUxFQ1QiLDI5MjoiV09SS0JPT0suQUNUSVZBVEUiLDI5MzoiQVNTSUdOLlRPLlRPT0wiLDI5NToiQ09QWS5U''@;'; put 'put ''T09MIiwyOTY6IlJFU0VULlRPT0wiLDI5NzoiQ09OU1RSQUlOLk5VTUVSSUMiLDI5ODoiUEFTVEUuVE9PTCIsMzAyOiJXT1JLQk9PSy5ORVciLDMwNToiU0NFTkFSSU8uQ0VMTFMiLDMwNjoiU0NFTkFSSU8uREVMRVRFIiwzMDc6IlNDRU5BUklPLkFERCIsMzA4OiJTQ0VOQVJJTy5FRElUIiwz''@;'; put 'put ''MDk6IlNDRU5BUklPLlNIT1ciLDMxMDoiU0NFTkFSSU8uU0hPVy5ORVhUIiwzMTE6IlNDRU5BUklPLlNVTU1BUlkiLDMxMjoiUElWT1QuVEFCTEUuV0laQVJEIiwzMTM6IlBJVk9ULkZJRUxELlBST1BFUlRJRVMiLDMxNDoiUElWT1QuRklFTEQiLDMxNToiUElWT1QuSVRFTSIsMzE2OiJQSVZP''@;'; put 'put ''VC5BREQuRklFTERTIiwzMTg6Ik9QVElPTlMuQ0FMQ1VMQVRJT04iLDMxOToiT1BUSU9OUy5FRElUIiwzMjA6Ik9QVElPTlMuVklFVyIsMzIxOiJBRERJTi5NQU5BR0VSIiwzMjI6Ik1FTlUuRURJVE9SIiwzMjM6IkFUVEFDSC5UT09MQkFSUyIsMzI0OiJWQkFBY3RpdmF0ZSIsMzI1OiJPUFRJ''@;'; put 'put ''T05TLkNIQVJUIiwzMjg6IlZCQS5JTlNFUlQuRklMRSIsMzMwOiJWQkEuUFJPQ0VEVVJFLkRFRklOSVRJT04iLDMzNjoiUk9VVElORy5TTElQIiwzMzg6IlJPVVRFLkRPQ1VNRU5UIiwzMzk6Ik1BSUwuTE9HT04iLDM0MjoiSU5TRVJULlBJQ1RVUkUiLDM0MzoiRURJVC5UT09MIiwzNDQ6IkdB''@;'; put 'put ''TExFUlkuRE9VR0hOVVQiLDM1MDoiQ0hBUlQuVFJFTkQiLDM1MjoiUElWT1QuSVRFTS5QUk9QRVJUSUVTIiwzNTQ6IldPUktCT09LLklOU0VSVCIsMzU1OiJPUFRJT05TLlRSQU5TSVRJT04iLDM1NjoiT1BUSU9OUy5HRU5FUkFMIiwzNzA6IkZJTFRFUi5BRFZBTkNFRCIsMzczOiJNQUlMLkFE''@;'; put 'put ''RC5NQUlMRVIiLDM3NDoiTUFJTC5ERUxFVEUuTUFJTEVSIiwzNzU6Ik1BSUwuUkVQTFkiLDM3NjoiTUFJTC5SRVBMWS5BTEwiLDM3NzoiTUFJTC5GT1JXQVJEIiwzNzg6Ik1BSUwuTkVYVC5MRVRURVIiLDM3OToiREFUQS5MQUJFTCIsMzgwOiJJTlNFUlQuVElUTEUiLDM4MToiRk9OVC5QUk9Q''@;'; put 'put ''RVJUSUVTIiwzODI6Ik1BQ1JPLk9QVElPTlMiLDM4MzoiV09SS0JPT0suSElERSIsMzg0OiJXT1JLQk9PSy5VTkhJREUiLDM4NToiV09SS0JPT0suREVMRVRFIiwzODY6IldPUktCT09LLk5BTUUiLDM4ODoiR0FMTEVSWS5DVVNUT00iLDM5MDoiQURELkNIQVJULkFVVE9GT1JNQVQiLDM5MToi''@;'; put 'put ''REVMRVRFLkNIQVJULkFVVE9GT1JNQVQiLDM5MjoiQ0hBUlQuQURELkRBVEEiLDM5MzoiQVVUTy5PVVRMSU5FIiwzOTQ6IlRBQi5PUkRFUiIsMzk1OiJTSE9XLkRJQUxPRyIsMzk2OiJTRUxFQ1QuQUxMIiwzOTc6IlVOR1JPVVAuU0hFRVRTIiwzOTg6IlNVQlRPVEFMLkNSRUFURSIsMzk5OiJT''@;'; put 'put ''VUJUT1RBTC5SRU1PVkUiLDQwMDoiUkVOQU1FLk9CSkVDVCIsNDEyOiJXT1JLQk9PSy5TQ1JPTEwiLDQxMzoiV09SS0JPT0suTkVYVCIsNDE0OiJXT1JLQk9PSy5QUkVWIiw0MTU6IldPUktCT09LLlRBQi5TUExJVCIsNDE2OiJGVUxMLlNDUkVFTiIsNDE3OiJXT1JLQk9PSy5QUk9URUNUIiw0''@;'; put 'put ''MjA6IlNDUk9MTEJBUi5QUk9QRVJUSUVTIiw0MjE6IlBJVk9ULlNIT1cuUEFHRVMiLDQyMjoiVEVYVC5UTy5DT0xVTU5TIiw0MjM6IkZPUk1BVC5DSEFSVFRZUEUiLDQyNDoiTElOSy5GT1JNQVQiLDQyNToiVFJBQ0VSLkRJU1BMQVkiLDQzMDoiVFJBQ0VSLk5BVklHQVRFIiw0MzE6IlRSQUNF''@;'; put 'put ''Ui5DTEVBUiIsNDMyOiJUUkFDRVIuRVJST1IiLDQzMzoiUElWT1QuRklFTEQuR1JPVVAiLDQzNDoiUElWT1QuRklFTEQuVU5HUk9VUCIsNDM1OiJDSEVDS0JPWC5QUk9QRVJUSUVTIiw0MzY6IkxBQkVMLlBST1BFUlRJRVMiLDQzNzoiTElTVEJPWC5QUk9QRVJUSUVTIiw0Mzg6IkVESVRCT1gu''@;'; put 'put ''UFJPUEVSVElFUyIsNDM5OiJQSVZPVC5SRUZSRVNIIiw0NDA6IkxJTksuQ09NQk8iLDQ0MToiT1BFTi5URVhUIiw0NDI6IkhJREUuRElBTE9HIiw0NDM6IlNFVC5ESUFMT0cuRk9DVVMiLDQ0NDoiRU5BQkxFLk9CSkVDVCIsNDQ1OiJQVVNIQlVUVE9OLlBST1BFUlRJRVMiLDQ0NjoiU0VULkRJ''@;'; put 'put ''QUxPRy5ERUZBVUxUIiw0NDc6IkZJTFRFUiIsNDQ4OiJGSUxURVIuU0hPVy5BTEwiLDQ0OToiQ0xFQVIuT1VUTElORSIsNDUwOiJGVU5DVElPTi5XSVpBUkQiLDQ1MToiQURELkxJU1QuSVRFTSIsNDUyOiJTRVQuTElTVC5JVEVNIiw0NTM6IlJFTU9WRS5MSVNULklURU0iLDQ1NDoiU0VMRUNU''@;'; put 'put ''LkxJU1QuSVRFTSIsNDU1OiJTRVQuQ09OVFJPTC5WQUxVRSIsNDU2OiJTQVZFLkNPUFkuQVMiLDQ1ODoiT1BUSU9OUy5MSVNUUy5BREQiLDQ1OToiT1BUSU9OUy5MSVNUUy5ERUxFVEUiLDQ2MDoiU0VSSUVTLkFYRVMiLDQ2MToiU0VSSUVTLlgiLDQ2MjoiU0VSSUVTLlkiLDQ2MzoiRVJST1JC''@;'; put 'put ''QVIuWCIsNDY0OiJFUlJPUkJBUi5ZIiw0NjU6IkZPUk1BVC5DSEFSVCIsNDY2OiJTRVJJRVMuT1JERVIiLDQ2NzoiTUFJTC5MT0dPRkYiLDQ2ODoiQ0xFQVIuUk9VVElORy5TTElQIiw0Njk6IkFQUC5BQ1RJVkFURS5NSUNST1NPRlQiLDQ3MDoiTUFJTC5FRElULk1BSUxFUiIsNDcxOiJPTi5T''@;'; put 'put ''SEVFVCIsNDcyOiJTVEFOREFSRC5XSURUSCIsNDczOiJTQ0VOQVJJTy5NRVJHRSIsNDc0OiJTVU1NQVJZLklORk8iLDQ3NToiRklORC5GSUxFIiw0NzY6IkFDVElWRS5DRUxMLkZPTlQiLDQ3NzoiRU5BQkxFLlRJUFdJWkFSRCIsNDc4OiJWQkEuTUFLRS5BRERJTiIsNDgwOiJJTlNFUlREQVRB''@;'; put 'put ''VEFCTEUiLDQ4MToiV09SS0dST1VQLk9QVElPTlMiLDQ4MjoiTUFJTC5TRU5ELk1BSUxFUiIsNDg1OiJBVVRPQ09SUkVDVCIsNDg5OiJQT1NULkRPQ1VNRU5UIiw0OTE6IlBJQ0tMSVNUIiw0OTM6IlZJRVcuU0hPVyIsNDk0OiJWSUVXLkRFRklORSIsNDk1OiJWSUVXLkRFTEVURSIsNTA5OiJT''@;'; put 'put ''SEVFVC5CQUNLR1JPVU5EIiw1MTA6IklOU0VSVC5NQVAuT0JKRUNUIiw1MTE6Ik9QVElPTlMuTUVOT05PIiw1MTc6Ik1TT0NIRUNLUyIsNTE4OiJOT1JNQUwiLDUxOToiTEFZT1VUIiw1MjA6IlJNLlBSSU5ULkFSRUEiLDUyMToiQ0xFQVIuUFJJTlQuQVJFQSIsNTIyOiJBREQuUFJJTlQuQVJF''@;'; put 'put ''QSIsNTIzOiJNT1ZFLkJSSyIsNTQ1OiJISURFQ1VSUi5OT1RFIiw1NDY6IkhJREVBTEwuTk9URVMiLDU0NzoiREVMRVRFLk5PVEUiLDU0ODoiVFJBVkVSU0UuTk9URVMiLDU0OToiQUNUSVZBVEUuTk9URVMiLDYyMDoiUFJPVEVDVC5SRVZJU0lPTlMiLDYyMToiVU5QUk9URUNULlJFVklTSU9O''@;'; put 'put ''UyIsNjQ3OiJPUFRJT05TLk1FIiw2NTM6IldFQi5QVUJMSVNIIiw2Njc6Ik5FV1dFQlFVRVJZIiw2NzM6IlBJVk9ULlRBQkxFLkNIQVJUIiw3NTM6Ik9QVElPTlMuU0FWRSIsNzU1OiJPUFRJT05TLlNQRUxMIiw4MDg6IkhJREVBTEwuSU5LQU5OT1RTIn0sb0o9ezA6IkNPVU5UIiwxOiJJRiIs''@;'; put 'put ''MjoiSVNOQSIsMzoiSVNFUlJPUiIsNDoiU1VNIiw1OiJBVkVSQUdFIiw2OiJNSU4iLDc6Ik1BWCIsODoiUk9XIiw5OiJDT0xVTU4iLDEwOiJOQSIsMTE6Ik5QViIsMTI6IlNUREVWIiwxMzoiRE9MTEFSIiwxNDoiRklYRUQiLDE1OiJTSU4iLDE2OiJDT1MiLDE3OiJUQU4iLDE4OiJBVEFOIiwx''@;'; put 'put ''OToiUEkiLDIwOiJTUVJUIiwyMToiRVhQIiwyMjoiTE4iLDIzOiJMT0cxMCIsMjQ6IkFCUyIsMjU6IklOVCIsMjY6IlNJR04iLDI3OiJST1VORCIsMjg6IkxPT0tVUCIsMjk6IklOREVYIiwzMDoiUkVQVCIsMzE6Ik1JRCIsMzI6IkxFTiIsMzM6IlZBTFVFIiwzNDoiVFJVRSIsMzU6IkZBTFNF''@;'; put 'put ''IiwzNjoiQU5EIiwzNzoiT1IiLDM4OiJOT1QiLDM5OiJNT0QiLDQwOiJEQ09VTlQiLDQxOiJEU1VNIiw0MjoiREFWRVJBR0UiLDQzOiJETUlOIiw0NDoiRE1BWCIsNDU6IkRTVERFViIsNDY6IlZBUiIsNDc6IkRWQVIiLDQ4OiJURVhUIiw0OToiTElORVNUIiw1MDoiVFJFTkQiLDUxOiJMT0dF''@;'; put 'put ''U1QiLDUyOiJHUk9XVEgiLDUzOiJHT1RPIiw1NDoiSEFMVCIsNTU6IlJFVFVSTiIsNTY6IlBWIiw1NzoiRlYiLDU4OiJOUEVSIiw1OToiUE1UIiw2MDoiUkFURSIsNjE6Ik1JUlIiLDYyOiJJUlIiLDYzOiJSQU5EIiw2NDoiTUFUQ0giLDY1OiJEQVRFIiw2NjoiVElNRSIsNjc6IkRBWSIsNjg6''@;'; put 'put ''Ik1PTlRIIiw2OToiWUVBUiIsNzA6IldFRUtEQVkiLDcxOiJIT1VSIiw3MjoiTUlOVVRFIiw3MzoiU0VDT05EIiw3NDoiTk9XIiw3NToiQVJFQVMiLDc2OiJST1dTIiw3NzoiQ09MVU1OUyIsNzg6Ik9GRlNFVCIsNzk6IkFCU1JFRiIsODA6IlJFTFJFRiIsODE6IkFSR1VNRU5UIiw4MjoiU0VB''@;'; put 'put ''UkNIIiw4MzoiVFJBTlNQT1NFIiw4NDoiRVJST1IiLDg1OiJTVEVQIiw4NjoiVFlQRSIsODc6IkVDSE8iLDg4OiJTRVQuTkFNRSIsODk6IkNBTExFUiIsOTA6IkRFUkVGIiw5MToiV0lORE9XUyIsOTI6IlNFUklFUyIsOTM6IkRPQ1VNRU5UUyIsOTQ6IkFDVElWRS5DRUxMIiw5NToiU0VMRUNU''@;'; put 'put ''SU9OIiw5NjoiUkVTVUxUIiw5NzoiQVRBTjIiLDk4OiJBU0lOIiw5OToiQUNPUyIsMTAwOiJDSE9PU0UiLDEwMToiSExPT0tVUCIsMTAyOiJWTE9PS1VQIiwxMDM6IkxJTktTIiwxMDQ6IklOUFVUIiwxMDU6IklTUkVGIiwxMDY6IkdFVC5GT1JNVUxBIiwxMDc6IkdFVC5OQU1FIiwxMDg6IlNF''@;'; put 'put ''VC5WQUxVRSIsMTA5OiJMT0ciLDExMDoiRVhFQyIsMTExOiJDSEFSIiwxMTI6IkxPV0VSIiwxMTM6IlVQUEVSIiwxMTQ6IlBST1BFUiIsMTE1OiJMRUZUIiwxMTY6IlJJR0hUIiwxMTc6IkVYQUNUIiwxMTg6IlRSSU0iLDExOToiUkVQTEFDRSIsMTIwOiJTVUJTVElUVVRFIiwxMjE6IkNPREUi''@;'; put 'put ''LDEyMjoiTkFNRVMiLDEyMzoiRElSRUNUT1JZIiwxMjQ6IkZJTkQiLDEyNToiQ0VMTCIsMTI2OiJJU0VSUiIsMTI3OiJJU1RFWFQiLDEyODoiSVNOVU1CRVIiLDEyOToiSVNCTEFOSyIsMTMwOiJUIiwxMzE6Ik4iLDEzMjoiRk9QRU4iLDEzMzoiRkNMT1NFIiwxMzQ6IkZTSVpFIiwxMzU6IkZS''@;'; put 'put ''RUFETE4iLDEzNjoiRlJFQUQiLDEzNzoiRldSSVRFTE4iLDEzODoiRldSSVRFIiwxMzk6IkZQT1MiLDE0MDoiREFURVZBTFVFIiwxNDE6IlRJTUVWQUxVRSIsMTQyOiJTTE4iLDE0MzoiU1lEIiwxNDQ6IkREQiIsMTQ1OiJHRVQuREVGIiwxNDY6IlJFRlRFWFQiLDE0NzoiVEVYVFJFRiIsMTQ4''@;'; put 'put ''OiJJTkRJUkVDVCIsMTQ5OiJSRUdJU1RFUiIsMTUwOiJDQUxMIiwxNTE6IkFERC5CQVIiLDE1MjoiQURELk1FTlUiLDE1MzoiQURELkNPTU1BTkQiLDE1NDoiRU5BQkxFLkNPTU1BTkQiLDE1NToiQ0hFQ0suQ09NTUFORCIsMTU2OiJSRU5BTUUuQ09NTUFORCIsMTU3OiJTSE9XLkJBUiIsMTU4''@;'; put 'put ''OiJERUxFVEUuTUVOVSIsMTU5OiJERUxFVEUuQ09NTUFORCIsMTYwOiJHRVQuQ0hBUlQuSVRFTSIsMTYxOiJESUFMT0cuQk9YIiwxNjI6IkNMRUFOIiwxNjM6Ik1ERVRFUk0iLDE2NDoiTUlOVkVSU0UiLDE2NToiTU1VTFQiLDE2NjoiRklMRVMiLDE2NzoiSVBNVCIsMTY4OiJQUE1UIiwxNjk6''@;'; put 'put ''IkNPVU5UQSIsMTcwOiJDQU5DRUwuS0VZIiwxNzE6IkZPUiIsMTcyOiJXSElMRSIsMTczOiJCUkVBSyIsMTc0OiJORVhUIiwxNzU6IklOSVRJQVRFIiwxNzY6IlJFUVVFU1QiLDE3NzoiUE9LRSIsMTc4OiJFWEVDVVRFIiwxNzk6IlRFUk1JTkFURSIsMTgwOiJSRVNUQVJUIiwxODE6IkhFTFAi''@;'; put 'put ''LDE4MjoiR0VULkJBUiIsMTgzOiJQUk9EVUNUIiwxODQ6IkZBQ1QiLDE4NToiR0VULkNFTEwiLDE4NjoiR0VULldPUktTUEFDRSIsMTg3OiJHRVQuV0lORE9XIiwxODg6IkdFVC5ET0NVTUVOVCIsMTg5OiJEUFJPRFVDVCIsMTkwOiJJU05PTlRFWFQiLDE5MToiR0VULk5PVEUiLDE5MjoiTk9U''@;'; put 'put ''RSIsMTkzOiJTVERFVlAiLDE5NDoiVkFSUCIsMTk1OiJEU1RERVZQIiwxOTY6IkRWQVJQIiwxOTc6IlRSVU5DIiwxOTg6IklTTE9HSUNBTCIsMTk5OiJEQ09VTlRBIiwyMDA6IkRFTEVURS5CQVIiLDIwMToiVU5SRUdJU1RFUiIsMjA0OiJVU0RPTExBUiIsMjA1OiJGSU5EQiIsMjA2OiJTRUFS''@;'; put 'put ''Q0hCIiwyMDc6IlJFUExBQ0VCIiwyMDg6IkxFRlRCIiwyMDk6IlJJR0hUQiIsMjEwOiJNSURCIiwyMTE6IkxFTkIiLDIxMjoiUk9VTkRVUCIsMjEzOiJST1VORERPV04iLDIxNDoiQVNDIiwyMTU6IkRCQ1MiLDIxNjoiUkFOSyIsMjE5OiJBRERSRVNTIiwyMjA6IkRBWVMzNjAiLDIyMToiVE9E''@;'; put 'put ''QVkiLDIyMjoiVkRCIiwyMjM6IkVMU0UiLDIyNDoiRUxTRS5JRiIsMjI1OiJFTkQuSUYiLDIyNjoiRk9SLkNFTEwiLDIyNzoiTUVESUFOIiwyMjg6IlNVTVBST0RVQ1QiLDIyOToiU0lOSCIsMjMwOiJDT1NIIiwyMzE6IlRBTkgiLDIzMjoiQVNJTkgiLDIzMzoiQUNPU0giLDIzNDoiQVRBTkgi''@;'; put 'put ''LDIzNToiREdFVCIsMjM2OiJDUkVBVEUuT0JKRUNUIiwyMzc6IlZPTEFUSUxFIiwyMzg6IkxBU1QuRVJST1IiLDIzOToiQ1VTVE9NLlVORE8iLDI0MDoiQ1VTVE9NLlJFUEVBVCIsMjQxOiJGT1JNVUxBLkNPTlZFUlQiLDI0MjoiR0VULkxJTksuSU5GTyIsMjQzOiJURVhULkJPWCIsMjQ0OiJJ''@;'; put 'put ''TkZPIiwyNDU6IkdST1VQIiwyNDY6IkdFVC5PQkpFQ1QiLDI0NzoiREIiLDI0ODoiUEFVU0UiLDI1MToiUkVTVU1FIiwyNTI6IkZSRVFVRU5DWSIsMjUzOiJBREQuVE9PTEJBUiIsMjU0OiJERUxFVEUuVE9PTEJBUiIsMjU1OiJVc2VyIiwyNTY6IlJFU0VULlRPT0xCQVIiLDI1NzoiRVZBTFVB''@;'; put 'put ''VEUiLDI1ODoiR0VULlRPT0xCQVIiLDI1OToiR0VULlRPT0wiLDI2MDoiU1BFTExJTkcuQ0hFQ0siLDI2MToiRVJST1IuVFlQRSIsMjYyOiJBUFAuVElUTEUiLDI2MzoiV0lORE9XLlRJVExFIiwyNjQ6IlNBVkUuVE9PTEJBUiIsMjY1OiJFTkFCTEUuVE9PTCIsMjY2OiJQUkVTUy5UT09MIiwy''@;'; put 'put ''Njc6IlJFR0lTVEVSLklEIiwyNjg6IkdFVC5XT1JLQk9PSyIsMjY5OiJBVkVERVYiLDI3MDoiQkVUQURJU1QiLDI3MToiR0FNTUFMTiIsMjcyOiJCRVRBSU5WIiwyNzM6IkJJTk9NRElTVCIsMjc0OiJDSElESVNUIiwyNzU6IkNISUlOViIsMjc2OiJDT01CSU4iLDI3NzoiQ09ORklERU5DRSIs''@;'; put 'put ''Mjc4OiJDUklUQklOT00iLDI3OToiRVZFTiIsMjgwOiJFWFBPTkRJU1QiLDI4MToiRkRJU1QiLDI4MjoiRklOViIsMjgzOiJGSVNIRVIiLDI4NDoiRklTSEVSSU5WIiwyODU6IkZMT09SIiwyODY6IkdBTU1BRElTVCIsMjg3OiJHQU1NQUlOViIsMjg4OiJDRUlMSU5HIiwyODk6IkhZUEdFT01E''@;'; put 'put ''SVNUIiwyOTA6IkxPR05PUk1ESVNUIiwyOTE6IkxPR0lOViIsMjkyOiJORUdCSU5PTURJU1QiLDI5MzoiTk9STURJU1QiLDI5NDoiTk9STVNESVNUIiwyOTU6Ik5PUk1JTlYiLDI5NjoiTk9STVNJTlYiLDI5NzoiU1RBTkRBUkRJWkUiLDI5ODoiT0REIiwyOTk6IlBFUk1VVCIsMzAwOiJQT0lT''@;'; put 'put ''U09OIiwzMDE6IlRESVNUIiwzMDI6IldFSUJVTEwiLDMwMzoiU1VNWE1ZMiIsMzA0OiJTVU1YMk1ZMiIsMzA1OiJTVU1YMlBZMiIsMzA2OiJDSElURVNUIiwzMDc6IkNPUlJFTCIsMzA4OiJDT1ZBUiIsMzA5OiJGT1JFQ0FTVCIsMzEwOiJGVEVTVCIsMzExOiJJTlRFUkNFUFQiLDMxMjoiUEVB''@;'; put 'put ''UlNPTiIsMzEzOiJSU1EiLDMxNDoiU1RFWVgiLDMxNToiU0xPUEUiLDMxNjoiVFRFU1QiLDMxNzoiUFJPQiIsMzE4OiJERVZTUSIsMzE5OiJHRU9NRUFOIiwzMjA6IkhBUk1FQU4iLDMyMToiU1VNU1EiLDMyMjoiS1VSVCIsMzIzOiJTS0VXIiwzMjQ6IlpURVNUIiwzMjU6IkxBUkdFIiwzMjY6''@;'; put 'put ''IlNNQUxMIiwzMjc6IlFVQVJUSUxFIiwzMjg6IlBFUkNFTlRJTEUiLDMyOToiUEVSQ0VOVFJBTksiLDMzMDoiTU9ERSIsMzMxOiJUUklNTUVBTiIsMzMyOiJUSU5WIiwzMzQ6Ik1PVklFLkNPTU1BTkQiLDMzNToiR0VULk1PVklFIiwzMzY6IkNPTkNBVEVOQVRFIiwzMzc6IlBPV0VSIiwzMzg6''@;'; put 'put ''IlBJVk9ULkFERC5EQVRBIiwzMzk6IkdFVC5QSVZPVC5UQUJMRSIsMzQwOiJHRVQuUElWT1QuRklFTEQiLDM0MToiR0VULlBJVk9ULklURU0iLDM0MjoiUkFESUFOUyIsMzQzOiJERUdSRUVTIiwzNDQ6IlNVQlRPVEFMIiwzNDU6IlNVTUlGIiwzNDY6IkNPVU5USUYiLDM0NzoiQ09VTlRCTEFO''@;'; put 'put ''SyIsMzQ4OiJTQ0VOQVJJTy5HRVQiLDM0OToiT1BUSU9OUy5MSVNUUy5HRVQiLDM1MDoiSVNQTVQiLDM1MToiREFURURJRiIsMzUyOiJEQVRFU1RSSU5HIiwzNTM6Ik5VTUJFUlNUUklORyIsMzU0OiJST01BTiIsMzU1OiJPUEVOLkRJQUxPRyIsMzU2OiJTQVZFLkRJQUxPRyIsMzU3OiJWSUVX''@;'; put 'put ''LkdFVCIsMzU4OiJHRVRQSVZPVERBVEEiLDM1OToiSFlQRVJMSU5LIiwzNjA6IlBIT05FVElDIiwzNjE6IkFWRVJBR0VBIiwzNjI6Ik1BWEEiLDM2MzoiTUlOQSIsMzY0OiJTVERFVlBBIiwzNjU6IlZBUlBBIiwzNjY6IlNUREVWQSIsMzY3OiJWQVJBIiwzNjg6IkJBSFRURVhUIiwzNjk6IlRI''@;'; put 'put ''QUlEQVlPRldFRUsiLDM3MDoiVEhBSURJR0lUIiwzNzE6IlRIQUlNT05USE9GWUVBUiIsMzcyOiJUSEFJTlVNU09VTkQiLDM3MzoiVEhBSU5VTVNUUklORyIsMzc0OiJUSEFJU1RSSU5HTEVOR1RIIiwzNzU6IklTVEhBSURJR0lUIiwzNzY6IlJPVU5EQkFIVERPV04iLDM3NzoiUk9VTkRCQUhU''@;'; put 'put ''VVAiLDM3ODoiVEhBSVlFQVIiLDM3OToiUlREIiwzODA6IkNVQkVWQUxVRSIsMzgxOiJDVUJFTUVNQkVSIiwzODI6IkNVQkVNRU1CRVJQUk9QRVJUWSIsMzgzOiJDVUJFUkFOS0VETUVNQkVSIiwzODQ6IkhFWDJCSU4iLDM4NToiSEVYMkRFQyIsMzg2OiJIRVgyT0NUIiwzODc6IkRFQzJCSU4i''@;'; put 'put ''LDM4ODoiREVDMkhFWCIsMzg5OiJERUMyT0NUIiwzOTA6Ik9DVDJCSU4iLDM5MToiT0NUMkhFWCIsMzkyOiJPQ1QyREVDIiwzOTM6IkJJTjJERUMiLDM5NDoiQklOMk9DVCIsMzk1OiJCSU4ySEVYIiwzOTY6IklNU1VCIiwzOTc6IklNRElWIiwzOTg6IklNUE9XRVIiLDM5OToiSU1BQlMiLDQw''@;'; put 'put ''MDoiSU1TUVJUIiw0MDE6IklNTE4iLDQwMjoiSU1MT0cyIiw0MDM6IklNTE9HMTAiLDQwNDoiSU1TSU4iLDQwNToiSU1DT1MiLDQwNjoiSU1FWFAiLDQwNzoiSU1BUkdVTUVOVCIsNDA4OiJJTUNPTkpVR0FURSIsNDA5OiJJTUFHSU5BUlkiLDQxMDoiSU1SRUFMIiw0MTE6IkNPTVBMRVgiLDQx''@;'; put 'put ''MjoiSU1TVU0iLDQxMzoiSU1QUk9EVUNUIiw0MTQ6IlNFUklFU1NVTSIsNDE1OiJGQUNURE9VQkxFIiw0MTY6IlNRUlRQSSIsNDE3OiJRVU9USUVOVCIsNDE4OiJERUxUQSIsNDE5OiJHRVNURVAiLDQyMDoiSVNFVkVOIiw0MjE6IklTT0REIiw0MjI6Ik1ST1VORCIsNDIzOiJFUkYiLDQyNDoi''@;'; put 'put ''RVJGQyIsNDI1OiJCRVNTRUxKIiw0MjY6IkJFU1NFTEsiLDQyNzoiQkVTU0VMWSIsNDI4OiJCRVNTRUxJIiw0Mjk6IlhJUlIiLDQzMDoiWE5QViIsNDMxOiJQUklDRU1BVCIsNDMyOiJZSUVMRE1BVCIsNDMzOiJJTlRSQVRFIiw0MzQ6IlJFQ0VJVkVEIiw0MzU6IkRJU0MiLDQzNjoiUFJJQ0VE''@;'; put 'put ''SVNDIiw0Mzc6IllJRUxERElTQyIsNDM4OiJUQklMTEVRIiw0Mzk6IlRCSUxMUFJJQ0UiLDQ0MDoiVEJJTExZSUVMRCIsNDQxOiJQUklDRSIsNDQyOiJZSUVMRCIsNDQzOiJET0xMQVJERSIsNDQ0OiJET0xMQVJGUiIsNDQ1OiJOT01JTkFMIiw0NDY6IkVGRkVDVCIsNDQ3OiJDVU1QUklOQyIs''@;'; put 'put ''NDQ4OiJDVU1JUE1UIiw0NDk6IkVEQVRFIiw0NTA6IkVPTU9OVEgiLDQ1MToiWUVBUkZSQUMiLDQ1MjoiQ09VUERBWUJTIiw0NTM6IkNPVVBEQVlTIiw0NTQ6IkNPVVBEQVlTTkMiLDQ1NToiQ09VUE5DRCIsNDU2OiJDT1VQTlVNIiw0NTc6IkNPVVBQQ0QiLDQ1ODoiRFVSQVRJT04iLDQ1OToi''@;'; put 'put ''TURVUkFUSU9OIiw0NjA6Ik9ERExQUklDRSIsNDYxOiJPRERMWUlFTEQiLDQ2MjoiT0RERlBSSUNFIiw0NjM6Ik9EREZZSUVMRCIsNDY0OiJSQU5EQkVUV0VFTiIsNDY1OiJXRUVLTlVNIiw0NjY6IkFNT1JERUdSQyIsNDY3OiJBTU9STElOQyIsNDY4OiJDT05WRVJUIiw3MjQ6IlNIRUVUSlMi''@;'; put 'put ''LDQ2OToiQUNDUklOVCIsNDcwOiJBQ0NSSU5UTSIsNDcxOiJXT1JLREFZIiw0NzI6Ik5FVFdPUktEQVlTIiw0NzM6IkdDRCIsNDc0OiJNVUxUSU5PTUlBTCIsNDc1OiJMQ00iLDQ3NjoiRlZTQ0hFRFVMRSIsNDc3OiJDVUJFS1BJTUVNQkVSIiw0Nzg6IkNVQkVTRVQiLDQ3OToiQ1VCRVNFVENP''@;'; put 'put ''VU5UIiw0ODA6IklGRVJST1IiLDQ4MToiQ09VTlRJRlMiLDQ4MjoiU1VNSUZTIiw0ODM6IkFWRVJBR0VJRiIsNDg0OiJBVkVSQUdFSUZTIn0sQTVlPXsyOjEsMzoxLDEwOjAsMTU6MSwxNjoxLDE3OjEsMTg6MSwxOTowLDIwOjEsMjE6MSwyMjoxLDIzOjEsMjQ6MSwyNToxLDI2OjEsMjc6Miwz''@;'; put 'put ''MDoyLDMxOjMsMzI6MSwzMzoxLDM0OjAsMzU6MCwzODoxLDM5OjIsNDA6Myw0MTozLDQyOjMsNDM6Myw0NDozLDQ1OjMsNDc6Myw0ODoyLDUzOjEsNjE6Myw2MzowLDY1OjMsNjY6Myw2NzoxLDY4OjEsNjk6MSw3MDoxLDcxOjEsNzI6MSw3MzoxLDc0OjAsNzU6MSw3NjoxLDc3OjEsNzk6Miw4''@;'; put 'put ''MDoyLDgzOjEsODU6MCw4NjoxLDg5OjAsOTA6MSw5NDowLDk1OjAsOTc6Miw5ODoxLDk5OjEsMTAxOjMsMTAyOjMsMTA1OjEsMTA2OjEsMTA4OjIsMTExOjEsMTEyOjEsMTEzOjEsMTE0OjEsMTE3OjIsMTE4OjEsMTE5OjQsMTIxOjEsMTI2OjEsMTI3OjEsMTI4OjEsMTI5OjEsMTMwOjEsMTMx''@;'; put 'put ''OjEsMTMzOjEsMTM0OjEsMTM1OjEsMTM2OjIsMTM3OjIsMTM4OjIsMTQwOjEsMTQxOjEsMTQyOjMsMTQzOjQsMTQ0OjQsMTYxOjEsMTYyOjEsMTYzOjEsMTY0OjEsMTY1OjIsMTcyOjEsMTc1OjIsMTc2OjIsMTc3OjMsMTc4OjIsMTc5OjEsMTg0OjEsMTg2OjEsMTg5OjMsMTkwOjEsMTk1OjMs''@;'; put 'put ''MTk2OjMsMTk3OjEsMTk4OjEsMTk5OjMsMjAxOjEsMjA3OjQsMjEwOjMsMjExOjEsMjEyOjIsMjEzOjIsMjE0OjEsMjE1OjEsMjI1OjAsMjI5OjEsMjMwOjEsMjMxOjEsMjMyOjEsMjMzOjEsMjM0OjEsMjM1OjMsMjQ0OjEsMjQ3OjQsMjUyOjIsMjU3OjEsMjYxOjEsMjcxOjEsMjczOjQsMjc0''@;'; put 'put ''OjIsMjc1OjIsMjc2OjIsMjc3OjMsMjc4OjMsMjc5OjEsMjgwOjMsMjgxOjMsMjgyOjMsMjgzOjEsMjg0OjEsMjg1OjIsMjg2OjQsMjg3OjMsMjg4OjIsMjg5OjQsMjkwOjMsMjkxOjMsMjkyOjMsMjkzOjQsMjk0OjEsMjk1OjMsMjk2OjEsMjk3OjMsMjk4OjEsMjk5OjIsMzAwOjMsMzAxOjMs''@;'; put 'put ''MzAyOjQsMzAzOjIsMzA0OjIsMzA1OjIsMzA2OjIsMzA3OjIsMzA4OjIsMzA5OjMsMzEwOjIsMzExOjIsMzEyOjIsMzEzOjIsMzE0OjIsMzE1OjIsMzE2OjQsMzI1OjIsMzI2OjIsMzI3OjIsMzI4OjIsMzMxOjIsMzMyOjIsMzM3OjIsMzQyOjEsMzQzOjEsMzQ2OjIsMzQ3OjEsMzUwOjQsMzUx''@;'; put 'put ''OjMsMzUyOjEsMzUzOjIsMzYwOjEsMzY4OjEsMzY5OjEsMzcwOjEsMzcxOjEsMzcyOjEsMzczOjEsMzc0OjEsMzc1OjEsMzc2OjEsMzc3OjEsMzc4OjEsMzgyOjMsMzg1OjEsMzkyOjEsMzkzOjEsMzk2OjIsMzk3OjIsMzk4OjIsMzk5OjEsNDAwOjEsNDAxOjEsNDAyOjEsNDAzOjEsNDA0OjEs''@;'; put 'put ''NDA1OjEsNDA2OjEsNDA3OjEsNDA4OjEsNDA5OjEsNDEwOjEsNDE0OjQsNDE1OjEsNDE2OjEsNDE3OjIsNDIwOjEsNDIxOjEsNDIyOjIsNDI0OjEsNDI1OjIsNDI2OjIsNDI3OjIsNDI4OjIsNDMwOjMsNDM4OjMsNDM5OjMsNDQwOjMsNDQzOjIsNDQ0OjIsNDQ1OjIsNDQ2OjIsNDQ3OjYsNDQ4''@;'; put 'put ''OjYsNDQ5OjIsNDUwOjIsNDY0OjIsNDY4OjMsNDc2OjIsNDc5OjEsNDgwOjIsNjU1MzU6MH0sYUo9eyJfeGxmbi5BQ09UIjoiQUNPVCIsIl94bGZuLkFDT1RIIjoiQUNPVEgiLCJfeGxmbi5BR0dSRUdBVEUiOiJBR0dSRUdBVEUiLCJfeGxmbi5BUkFCSUMiOiJBUkFCSUMiLCJfeGxmbi5BVkVS''@;'; put 'put ''QUdFSUYiOiJBVkVSQUdFSUYiLCJfeGxmbi5BVkVSQUdFSUZTIjoiQVZFUkFHRUlGUyIsIl94bGZuLkJBU0UiOiJCQVNFIiwiX3hsZm4uQkVUQS5ESVNUIjoiQkVUQS5ESVNUIiwiX3hsZm4uQkVUQS5JTlYiOiJCRVRBLklOViIsIl94bGZuLkJJTk9NLkRJU1QiOiJCSU5PTS5ESVNUIiwiX3hs''@;'; put 'put ''Zm4uQklOT00uRElTVC5SQU5HRSI6IkJJTk9NLkRJU1QuUkFOR0UiLCJfeGxmbi5CSU5PTS5JTlYiOiJCSU5PTS5JTlYiLCJfeGxmbi5CSVRBTkQiOiJCSVRBTkQiLCJfeGxmbi5CSVRMU0hJRlQiOiJCSVRMU0hJRlQiLCJfeGxmbi5CSVRPUiI6IkJJVE9SIiwiX3hsZm4uQklUUlNISUZUIjoi''@;'; put 'put ''QklUUlNISUZUIiwiX3hsZm4uQklUWE9SIjoiQklUWE9SIiwiX3hsZm4uQ0VJTElORy5NQVRIIjoiQ0VJTElORy5NQVRIIiwiX3hsZm4uQ0VJTElORy5QUkVDSVNFIjoiQ0VJTElORy5QUkVDSVNFIiwiX3hsZm4uQ0hJU1EuRElTVCI6IkNISVNRLkRJU1QiLCJfeGxmbi5DSElTUS5ESVNULlJU''@;'; put 'put ''IjoiQ0hJU1EuRElTVC5SVCIsIl94bGZuLkNISVNRLklOViI6IkNISVNRLklOViIsIl94bGZuLkNISVNRLklOVi5SVCI6IkNISVNRLklOVi5SVCIsIl94bGZuLkNISVNRLlRFU1QiOiJDSElTUS5URVNUIiwiX3hsZm4uQ09NQklOQSI6IkNPTUJJTkEiLCJfeGxmbi5DT05DQVQiOiJDT05DQVQi''@;'; put 'put ''LCJfeGxmbi5DT05GSURFTkNFLk5PUk0iOiJDT05GSURFTkNFLk5PUk0iLCJfeGxmbi5DT05GSURFTkNFLlQiOiJDT05GSURFTkNFLlQiLCJfeGxmbi5DT1QiOiJDT1QiLCJfeGxmbi5DT1RIIjoiQ09USCIsIl94bGZuLkNPVU5USUZTIjoiQ09VTlRJRlMiLCJfeGxmbi5DT1ZBUklBTkNFLlAi''@;'; put 'put ''OiJDT1ZBUklBTkNFLlAiLCJfeGxmbi5DT1ZBUklBTkNFLlMiOiJDT1ZBUklBTkNFLlMiLCJfeGxmbi5DU0MiOiJDU0MiLCJfeGxmbi5DU0NIIjoiQ1NDSCIsIl94bGZuLkRBWVMiOiJEQVlTIiwiX3hsZm4uREVDSU1BTCI6IkRFQ0lNQUwiLCJfeGxmbi5FQ01BLkNFSUxJTkciOiJFQ01BLkNF''@;'; put 'put ''SUxJTkciLCJfeGxmbi5FUkYuUFJFQ0lTRSI6IkVSRi5QUkVDSVNFIiwiX3hsZm4uRVJGQy5QUkVDSVNFIjoiRVJGQy5QUkVDSVNFIiwiX3hsZm4uRVhQT04uRElTVCI6IkVYUE9OLkRJU1QiLCJfeGxmbi5GLkRJU1QiOiJGLkRJU1QiLCJfeGxmbi5GLkRJU1QuUlQiOiJGLkRJU1QuUlQiLCJf''@;'; put 'put ''eGxmbi5GLklOViI6IkYuSU5WIiwiX3hsZm4uRi5JTlYuUlQiOiJGLklOVi5SVCIsIl94bGZuLkYuVEVTVCI6IkYuVEVTVCIsIl94bGZuLkZJTFRFUlhNTCI6IkZJTFRFUlhNTCIsIl94bGZuLkZMT09SLk1BVEgiOiJGTE9PUi5NQVRIIiwiX3hsZm4uRkxPT1IuUFJFQ0lTRSI6IkZMT09SLlBS''@;'; put 'put ''RUNJU0UiLCJfeGxmbi5GT1JFQ0FTVC5FVFMiOiJGT1JFQ0FTVC5FVFMiLCJfeGxmbi5GT1JFQ0FTVC5FVFMuQ09ORklOVCI6IkZPUkVDQVNULkVUUy5DT05GSU5UIiwiX3hsZm4uRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIjoiRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIiwiX3hsZm4uRk9S''@;'; put 'put ''RUNBU1QuRVRTLlNUQVQiOiJGT1JFQ0FTVC5FVFMuU1RBVCIsIl94bGZuLkZPUkVDQVNULkxJTkVBUiI6IkZPUkVDQVNULkxJTkVBUiIsIl94bGZuLkZPUk1VTEFURVhUIjoiRk9STVVMQVRFWFQiLCJfeGxmbi5HQU1NQSI6IkdBTU1BIiwiX3hsZm4uR0FNTUEuRElTVCI6IkdBTU1BLkRJU1Qi''@;'; put 'put ''LCJfeGxmbi5HQU1NQS5JTlYiOiJHQU1NQS5JTlYiLCJfeGxmbi5HQU1NQUxOLlBSRUNJU0UiOiJHQU1NQUxOLlBSRUNJU0UiLCJfeGxmbi5HQVVTUyI6IkdBVVNTIiwiX3hsZm4uSFlQR0VPTS5ESVNUIjoiSFlQR0VPTS5ESVNUIiwiX3hsZm4uSUZFUlJPUiI6IklGRVJST1IiLCJfeGxmbi5J''@;'; put 'put ''Rk5BIjoiSUZOQSIsIl94bGZuLklGUyI6IklGUyIsIl94bGZuLklNQ09TSCI6IklNQ09TSCIsIl94bGZuLklNQ09UIjoiSU1DT1QiLCJfeGxmbi5JTUNTQyI6IklNQ1NDIiwiX3hsZm4uSU1DU0NIIjoiSU1DU0NIIiwiX3hsZm4uSU1TRUMiOiJJTVNFQyIsIl94bGZuLklNU0VDSCI6IklNU0VD''@;'; put 'put ''SCIsIl94bGZuLklNU0lOSCI6IklNU0lOSCIsIl94bGZuLklNVEFOIjoiSU1UQU4iLCJfeGxmbi5JU0ZPUk1VTEEiOiJJU0ZPUk1VTEEiLCJfeGxmbi5JU08uQ0VJTElORyI6IklTTy5DRUlMSU5HIiwiX3hsZm4uSVNPV0VFS05VTSI6IklTT1dFRUtOVU0iLCJfeGxmbi5MT0dOT1JNLkRJU1Qi''@;'; put 'put ''OiJMT0dOT1JNLkRJU1QiLCJfeGxmbi5MT0dOT1JNLklOViI6IkxPR05PUk0uSU5WIiwiX3hsZm4uTUFYSUZTIjoiTUFYSUZTIiwiX3hsZm4uTUlOSUZTIjoiTUlOSUZTIiwiX3hsZm4uTU9ERS5NVUxUIjoiTU9ERS5NVUxUIiwiX3hsZm4uTU9ERS5TTkdMIjoiTU9ERS5TTkdMIiwiX3hsZm4u''@;'; put 'put ''TVVOSVQiOiJNVU5JVCIsIl94bGZuLk5FR0JJTk9NLkRJU1QiOiJORUdCSU5PTS5ESVNUIiwiX3hsZm4uTkVUV09SS0RBWVMuSU5UTCI6Ik5FVFdPUktEQVlTLklOVEwiLCJfeGxmbi5OSUdCSU5PTSI6Ik5JR0JJTk9NIiwiX3hsZm4uTk9STS5ESVNUIjoiTk9STS5ESVNUIiwiX3hsZm4uTk9S''@;'; put 'put ''TS5JTlYiOiJOT1JNLklOViIsIl94bGZuLk5PUk0uUy5ESVNUIjoiTk9STS5TLkRJU1QiLCJfeGxmbi5OT1JNLlMuSU5WIjoiTk9STS5TLklOViIsIl94bGZuLk5VTUJFUlZBTFVFIjoiTlVNQkVSVkFMVUUiLCJfeGxmbi5QRFVSQVRJT04iOiJQRFVSQVRJT04iLCJfeGxmbi5QRVJDRU5USUxF''@;'; put 'put ''LkVYQyI6IlBFUkNFTlRJTEUuRVhDIiwiX3hsZm4uUEVSQ0VOVElMRS5JTkMiOiJQRVJDRU5USUxFLklOQyIsIl94bGZuLlBFUkNFTlRSQU5LLkVYQyI6IlBFUkNFTlRSQU5LLkVYQyIsIl94bGZuLlBFUkNFTlRSQU5LLklOQyI6IlBFUkNFTlRSQU5LLklOQyIsIl94bGZuLlBFUk1VVEFUSU9O''@;'; put 'put ''QSI6IlBFUk1VVEFUSU9OQSIsIl94bGZuLlBISSI6IlBISSIsIl94bGZuLlBPSVNTT04uRElTVCI6IlBPSVNTT04uRElTVCIsIl94bGZuLlFVQVJUSUxFLkVYQyI6IlFVQVJUSUxFLkVYQyIsIl94bGZuLlFVQVJUSUxFLklOQyI6IlFVQVJUSUxFLklOQyIsIl94bGZuLlFVRVJZU1RSSU5HIjoi''@;'; put 'put ''UVVFUllTVFJJTkciLCJfeGxmbi5SQU5LLkFWRyI6IlJBTksuQVZHIiwiX3hsZm4uUkFOSy5FUSI6IlJBTksuRVEiLCJfeGxmbi5SUkkiOiJSUkkiLCJfeGxmbi5TRUMiOiJTRUMiLCJfeGxmbi5TRUNIIjoiU0VDSCIsIl94bGZuLlNIRUVUIjoiU0hFRVQiLCJfeGxmbi5TSEVFVFMiOiJTSEVF''@;'; put 'put ''VFMiLCJfeGxmbi5TS0VXLlAiOiJTS0VXLlAiLCJfeGxmbi5TVERFVi5QIjoiU1RERVYuUCIsIl94bGZuLlNUREVWLlMiOiJTVERFVi5TIiwiX3hsZm4uU1VNSUZTIjoiU1VNSUZTIiwiX3hsZm4uU1dJVENIIjoiU1dJVENIIiwiX3hsZm4uVC5ESVNUIjoiVC5ESVNUIiwiX3hsZm4uVC5ESVNU''@;'; put 'put ''LjJUIjoiVC5ESVNULjJUIiwiX3hsZm4uVC5ESVNULlJUIjoiVC5ESVNULlJUIiwiX3hsZm4uVC5JTlYiOiJULklOViIsIl94bGZuLlQuSU5WLjJUIjoiVC5JTlYuMlQiLCJfeGxmbi5ULlRFU1QiOiJULlRFU1QiLCJfeGxmbi5URVhUSk9JTiI6IlRFWFRKT0lOIiwiX3hsZm4uVU5JQ0hBUiI6''@;'; put 'put ''IlVOSUNIQVIiLCJfeGxmbi5VTklDT0RFIjoiVU5JQ09ERSIsIl94bGZuLlZBUi5QIjoiVkFSLlAiLCJfeGxmbi5WQVIuUyI6IlZBUi5TIiwiX3hsZm4uV0VCU0VSVklDRSI6IldFQlNFUlZJQ0UiLCJfeGxmbi5XRUlCVUxMLkRJU1QiOiJXRUlCVUxMLkRJU1QiLCJfeGxmbi5XT1JLREFZLklO''@;'; put 'put ''VEwiOiJXT1JLREFZLklOVEwiLCJfeGxmbi5YT1IiOiJYT1IiLCJfeGxmbi5aLlRFU1QiOiJaLlRFU1QifTtmdW5jdGlvbiBJayhkKXtyZXR1cm4ib2Y6Ij09ZC5zbGljZSgwLDMpJiYoZD1kLnNsaWNlKDMpKSw2MT09ZC5jaGFyQ29kZUF0KDApJiY2MT09KGQ9ZC5zbGljZSgxKSkuY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKGQ9ZC5zbGljZSgxKSksKGQ9KGQ9KGQ9ZC5yZXBsYWNlKC9DT01cLk1JQ1JPU09GVFwuL2csIiIpKS5yZXBsYWNlKC9cWygoPzpcLltBLVpdK1swLTldKykoPzo6XC5bQS1aXStbMC05XSspPylcXS9nLGZ1bmN0aW9uKF8sbSl7cmV0dXJuIG0ucmVwbGFjZSgvXC4vZywiIil9''@;'; put 'put ''KSkucmVwbGFjZSgvXFsuKCNbQS1aXSpbPyFdKVxdL2csIiQxIikpLnJlcGxhY2UoL1s7fl0vZywiLCIpLnJlcGxhY2UoL1x8L2csIjsiKX1mdW5jdGlvbiBzSihkKXtyZXR1cm4oIm9mOj0iK2QucmVwbGFjZShkaywiJDFbLiQyJDMkNCQ1XSIpLnJlcGxhY2UoL1xdOlxbL2csIjoiKSkucmVw''@;'; put 'put ''bGFjZSgvOy9nLCJ8IikucmVwbGFjZSgvLC9nLCI7Iil9ZnVuY3Rpb24gRFMoZCl7dmFyIF89ZC5zcGxpdCgiOiIpO3JldHVybltfWzBdLnNwbGl0KCIuIilbMF0sX1swXS5zcGxpdCgiLiIpWzFdKyhfLmxlbmd0aD4xPyI6IisoX1sxXS5zcGxpdCgiLiIpWzFdfHxfWzFdLnNwbGl0KCIuIilb''@;'; put 'put ''MF0pOiIiKV19ZnVuY3Rpb24gRGsoZCl7cmV0dXJuIGQucmVwbGFjZSgvXC4vLCIhIil9dmFyIEg5PXt9LFhtPXt9O3VhLldTPVsiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiLCJodHRwOi8vcHVy''@;'; put 'put ''bC5vY2xjLm9yZy9vb3htbC9vZmZpY2VEb2N1bWVudC9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCJdO3ZhciBNNT10eXBlb2YgTWFwPCJ1IjtmdW5jdGlvbiBMayhkLF8sbSxUKXt2YXIgUD0wLFE9ZC5sZW5ndGg7aWYoVCl7aWYoTTU/VC5oYXMoXyk6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Q''@;'; put 'put ''cm9wZXJ0eS5jYWxsKFQsXykpZm9yKHZhciBzZT1NNT9ULmdldChfKTpUW19dO1A8c2UubGVuZ3RoOysrUClpZihkW3NlW1BdXS50PT09XyYmKCFkW3NlW1BdXS5yJiYhbXx8ZFtzZVtQXV0ucj09bSkpcmV0dXJuIGQuQ291bnQrKyxzZVtQXX1lbHNlIGZvcig7UDxROysrUClpZihkW1BdLnQ9''@;'; put 'put ''PT1fJiYoIWRbUF0uciYmIW18fGRbUF0ucj09bSkpcmV0dXJuIGQuQ291bnQrKyxQO3JldHVybiBkW1FdPXt0Ol8scjptfSxkLkNvdW50KyssZC5VbmlxdWUrKyxUJiYoTTU/KFQuaGFzKF8pfHxULnNldChfLFtdKSxULmdldChfKS5wdXNoKFEpKTooT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Q''@;'; put 'put ''cm9wZXJ0eS5jYWxsKFQsXyl8fChUW19dPVtdKSxUW19dLnB1c2goUSkpKSxRfWZ1bmN0aW9uIE9rKGQsXyl7dmFyIG09e21pbjpkKzEsbWF4OmQrMX0sVD1zZDtpZighXylyZXR1cm4gXzt2YXIgUD0tMTtyZXR1cm4gXy5hdXRvJiYobS5iZXN0Rml0PTEsXy5iZXN0d2lkdGgmJihQPV8uYmVz''@;'; put 'put ''dHdpZHRoKSxkZWxldGUgXy5iZXN0d2lkdGgpLG51bGwhPV8ud3B4P1A9eTgoXy53cHgpOm51bGwhPV8ud2NoP1A9Xy53Y2g6bnVsbCE9Xy53aWR0aCYmKG0uY3VzdG9tV2lkdGg9MSksUD4tMT8obS53aWR0aD1wUyhQKSxtLmN1c3RvbVdpZHRoPTEpOm51bGwhPV8ud2lkdGgmJihtLndpZHRo''@;'; put 'put ''PV8ud2lkdGgpLF8uaGlkZGVuJiYobS5oaWRkZW49ITApLG0uYmVzdEZpdCYmZGVsZXRlIG0uY3VzdG9tV2lkdGgsc2Q9VCxudWxsIT1fLmxldmVsJiYobS5vdXRsaW5lTGV2ZWw9bS5sZXZlbD1fLmxldmVsKSxudWxsIT1fLnN0eWxlJiYobS5zdHlsZT1fLnN0eWxlKSxtfWZ1bmN0aW9uIHhW''@;'; put 'put ''KGQsXyxtKXt2YXIgVD16YShkWyIhcmVmIl0pLFA9MCxRPWRbIiFtZXJnZXMiXXx8W10sc2U9QXJyYXkuaXNBcnJheShkKTtlOmZvcih2YXIgb2U9MDtvZTw9VC5lLnI7KytvZSl7Zm9yKHZhciBkZT0wO2RlPFEubGVuZ3RoOysrZGUpaWYoUVtkZV0ucy5yPD1vZSYmb2U8PVFbZGVdLmUuciYm''@;'; put 'put ''UVtkZV0ucy5jPD1tJiZtPD1RW2RlXS5lLmMpY29udGludWUgZTt2YXIgTGU9c2U/KGRbb2VdfHxbXSlbbV06ZFtxaSh7cjpvZSxjOm19KV07aWYoTGUpe3ZhciBOZT0xO2lmKExlLnMmJihOZT1ZQShMZS5zKS9nNS5DYWxpYnJpWzEyXXx8MSksTGUudylQPU1hdGgubWF4KFAsTGUudy5sZW5n''@;'; put 'put ''dGgqTmUpO2Vsc2Ugc3dpdGNoKExlLnQpe2Nhc2UiYiI6Y2FzZSJlIjpQPU1hdGgubWF4KFAsNSpOZSk7YnJlYWs7Y2FzZSJzIjpQPU1hdGgubWF4KFAsTGUudi5sZW5ndGgqTmUqMS4yfDApO2JyZWFrO2Nhc2UibiI6anQoTGUsTGUudiksUD1NYXRoLm1heChQLFN0cmluZyhMZS53fHxMZS52''@;'; put 'put ''KS5sZW5ndGgqTmUpO2JyZWFrO2Nhc2UiZCI6UD1NYXRoLm1heChQLDgqTmUpfX19UDwxJiYoUD0xKSxfLmJlc3R3aWR0aD1QfWZ1bmN0aW9uIEw4KGQsXyl7aWYoZCl7dmFyIG09Wy43LC43LC43NSwuNzUsLjMsLjNdOyJ4bG1sIj09XyYmKG09WzEsMSwxLDEsLjUsLjVdKSxudWxsPT1kLmxl''@;'; put 'put ''ZnQmJihkLmxlZnQ9bVswXSksbnVsbD09ZC5yaWdodCYmKGQucmlnaHQ9bVsxXSksbnVsbD09ZC50b3AmJihkLnRvcD1tWzJdKSxudWxsPT1kLmJvdHRvbSYmKGQuYm90dG9tPW1bM10pLG51bGw9PWQuaGVhZGVyJiYoZC5oZWFkZXI9bVs0XSksbnVsbD09ZC5mb290ZXImJihkLmZvb3Rlcj1t''@;'; put 'put ''WzVdKX19ZnVuY3Rpb24gTmsoZCxfKXtmb3IodmFyIG09RmUoXyksVD0wO1Q8ZC5sZW5ndGg7KytUKXt2YXIgUD0hMCxRPWRbVF07aWYoUSYmbS5sZW5ndGg9PUZlKFEpLmxlbmd0aCYmKG0uZm9yRWFjaChmdW5jdGlvbihzZSl7aWYoUCl7aWYobnVsbD09PV9bc2VdIT0obnVsbD09PVFbc2Vd''@;'; put 'put ''KSlyZXR1cm4gdm9pZChQPSExKTtpZigib2JqZWN0Ij09dHlwZW9mIF9bc2VdKWlmKFsiY29sb3IiLCJmZ0NvbG9yIiwiYmdDb2xvciJdLmluZGV4T2Yoc2UpPi0xKXtpZihPZyhfW3NlXSxRW3NlXSkpcmV0dXJuIHZvaWQoUD0hMSl9ZWxzZXtpZighKFsibGVmdCIsInJpZ2h0IiwidG9wIiwi''@;'; put 'put ''Ym90dG9tIl0uaW5kZXhPZihzZSk+LTEpKXJldHVybiB2b2lkKFA9ITEpO2lmKHU1ZShfW3NlXSxRW3NlXSkpcmV0dXJuIHZvaWQoUD0hMSl9aWYoX1tzZV0hPVFbc2VdKXJldHVybiB2b2lkKFA9ITEpfX0pLFApKXJldHVybiBUfXJldHVybiBkW2QubGVuZ3RoXT1RcihfKSxkLmxlbmd0aC0x''@;'; put 'put ''fWZ1bmN0aW9uIEEyKGQsXyxtLFQpe3ZhciBQPVQucmV2c3NmW251bGwhPW0uej9tLno6IkdlbmVyYWwiXSxRPTYwLHNlPWQubGVuZ3RoO2lmKG51bGw9PVAmJlQuc3NmKWZvcig7UTwzOTI7KytRKWlmKG51bGw9PVQuc3NmW1FdKXtJLmxvYWQobS56LFEpLFQuc3NmW1FdPW0ueixULnJldnNz''@;'; put 'put ''ZlttLnpdPVA9UTticmVha312YXIgb2U9MCxkZT0wLExlPTAsTmU9MDtpZihULmNlbGxTdHlsZXMpe2lmKG0ucyl7aWYoVC5Gb250cyl7bS5zLmNvbG9yfHwobS5zLmNvbG9yPXt0aGVtZToxLHJnYjoiMDAwMDAwIn0pO2Zvcih2YXIgQmU9KG0ucy5ib2xkPzE6MCl8KG0ucy5pdGFsaWM/Mjow''@;'; put 'put ''KXwobS5zLnN0cmlrZT80OjApfChtLnMuc2hhZG93Pzg6MCk7b2U8VC5Gb250cy5sZW5ndGg7KytvZSl7dmFyIFplPVQuRm9udHNbb2VdO2lmKG51bGw9PVplLmZvbnRoYXNoJiYoWmUuZm9udGhhc2g9KFplLmJvbGQ/MTowKXwoWmUuaXRhbGljPzI6MCl8KFplLnN0cmlrZT80OjApfChaZS5z''@;'; put 'put ''aGFkb3c/ODowKSksIShCZSE9WmUuZm9udGhhc2h8fCEhbS5zLmNvbG9yIT0hIVplLmNvbG9yfHxtLnMudmFsaWduIT1aZS52YWxpZ258fChtLnMuc3p8fFplLnN6KSYmKG0ucy5zenx8MTIpIT0oWmUuc3p8fDEyKXx8bS5zLm5hbWUmJm0ucy5uYW1lIT1aZS5uYW1lfHwobS5zLnVuZGVybGlu''@;'; put 'put ''ZXx8MCkhPShaZS51bmRlcmxpbmV8fDApfHxtLnMuY29sb3ImJk9nKG0ucy5jb2xvcixaZS5jb2xvcikpKWJyZWFrfW9lPT1ULkZvbnRzLmxlbmd0aCYmKFQuRm9udHMucHVzaCh7c3o6bS5zLnN6fHwxMixjb2xvcjptLnMuY29sb3J8fHt0aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZTptLnMu''@;'; put 'put ''bmFtZXx8IkNhbGlicmkiLGZhbWlseTptLnMuZmFtaWx5fHwyLHNjaGVtZTptLnMuc2NoZW1lLGJvbGQ6bS5zLmJvbGQsaXRhbGljOm0ucy5pdGFsaWMsc3RyaWtlOm0ucy5zdHJpa2Usc2hhZG93Om0ucy5zaGFkb3csdmFsaWduOm0ucy52YWxpZ24sdW5kZXJsaW5lOm0ucy51bmRlcmxpbmV9''@;'; put 'put ''KSwxPT1ULkZvbnRzLmxlbmd0aCYmJG0oVC5Gb250c1swXSkpfWlmKFQuRmlsbHMpe2Zvcig7ZGU8VC5GaWxscy5sZW5ndGg7KytkZSl7dmFyIG50PVQuRmlsbHNbZGVdO2lmKCEhbS5zLnN0b3BzPT0hIW50LnN0b3BzKXtpZihtLnMuc3RvcHMpe2lmKG0ucy5hbmdsZSE9bnQuYW5nbGUpY29u''@;'; put 'put ''dGludWU7dmFyIG10PSEwO2lmKG0ucy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKGJ0LEV0KXtPZyhidCxudC5zdG9wc1tFdF0pJiYobXQ9ITEpLGJ0LnYhPW50LnN0b3BzW0V0XS52JiYobXQ9ITEpfSksIW10KWNvbnRpbnVlfWVsc2V7aWYobnVsbD09bS5zLnBhdHRlcm5UeXBlJiZtLnMuZmdD''@;'; put 'put ''b2xvciYmKG0ucy5wYXR0ZXJuVHlwZT0ic29saWQiKSxudWxsPT1tLnMucGF0dGVyblR5cGUpYnJlYWs7aWYobS5zLnBhdHRlcm5UeXBlIT1udC5wYXR0ZXJuVHlwZXx8T2cobS5zLmZnQ29sb3IsbnQuZmdDb2xvcil8fE9nKG0ucy5iZ0NvbG9yLG50LmJnQ29sb3IpKWNvbnRpbnVlfWJyZWFr''@;'; put 'put ''fX1pZihkZT09VC5GaWxscy5sZW5ndGgpe3ZhciBRZT17fTttLnMuc3RvcHM/KG51bGwhPW0ucy5hbmdsZSYmKFFlLmFuZ2xlPW0ucy5hbmdsZSksUWUuc3RvcHM9W10sbS5zLnN0b3BzLmZvckVhY2goZnVuY3Rpb24oYnQpe1FlLnN0b3BzLnB1c2goUXIoYnQpKX0pKTpRZT17cGF0dGVyblR5''@;'; put 'put ''cGU6bS5zLnBhdHRlcm5UeXBlLGZnQ29sb3I6bS5zLmZnQ29sb3IsYmdDb2xvcjptLnMuYmdDb2xvcn0sVC5GaWxscy5wdXNoKFFlKX19aWYoVC5Cb3JkZXJzKXtmb3IoO0xlPFQuQm9yZGVycy5sZW5ndGg7KytMZSl7dmFyIGZ0PVQuQm9yZGVyc1tMZV0sa3Q9InRvcCI7aWYobS5zW2t0XSl7''@;'; put 'put ''aWYoIWZ0W2t0XXx8bS5zW2t0XS5zdHlsZSE9ZnRba3RdLnN0eWxlfHxPZyhtLnNba3RdLmNvbG9yLGZ0W2t0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1mdFtrdF0pY29udGludWU7aWYobS5zW2t0PSJib3R0b20iXSl7aWYoIWZ0W2t0XXx8bS5zW2t0XS5zdHlsZSE9ZnRba3Rd''@;'; put 'put ''LnN0eWxlfHxPZyhtLnNba3RdLmNvbG9yLGZ0W2t0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1mdFtrdF0pY29udGludWU7aWYobS5zW2t0PSJsZWZ0Il0pe2lmKCFmdFtrdF18fG0uc1trdF0uc3R5bGUhPWZ0W2t0XS5zdHlsZXx8T2cobS5zW2t0XS5jb2xvcixmdFtrdF0uY29s''@;'; put 'put ''b3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9ZnRba3RdKWNvbnRpbnVlO2lmKG0uc1trdD0icmlnaHQiXSl7aWYoIWZ0W2t0XXx8bS5zW2t0XS5zdHlsZSE9ZnRba3RdLnN0eWxlfHxPZyhtLnNba3RdLmNvbG9yLGZ0W2t0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1mdFtrdF0p''@;'; put 'put ''Y29udGludWU7YnJlYWt9TGU9PVQuQm9yZGVycy5sZW5ndGgmJlQuQm9yZGVycy5wdXNoKHt0b3A6bS5zLnRvcCYmUXIobS5zLnRvcCl8fHZvaWQgMCxib3R0b206bS5zLmJvdHRvbSYmUXIobS5zLmJvdHRvbSl8fHZvaWQgMCxsZWZ0Om0ucy5sZWZ0JiZRcihtLnMubGVmdCl8fHZvaWQgMCxy''@;'; put 'put ''aWdodDptLnMucmlnaHQmJlFyKG0ucy5yaWdodCl8fHZvaWQgMH0pfWlmKF8mJm0ucy5zdHlsZSYmIk5vcm1hbCIhPT1tLnMuc3R5bGUpe2ZvcihOZT0xO05lPF8ubGVuZ3RoJiZfW05lXS5uYW1lIT1tLnMuc3R5bGU7KytOZSk7TmU9PV8ubGVuZ3RoJiZfLnB1c2goe25hbWU6bS5zLnN0eWxl''@;'; put 'put ''LG51bUZtdElkOlAsZm9udElkOm9lLGZpbGxJZDpkZSxib3JkZXJJZDpMZX0pfX1mb3IoUT0wO1EhPXNlOysrUSlpZihkW1FdLm51bUZtdElkPT1QJiZkW1FdLmZvbnRJZD09b2UmJmRbUV0uZmlsbElkPT1kZSYmZFtRXS5ib3JkZXJJZD09TGUmJmRbUV0ueGZJZD09TmUpe2lmKG0ucyYmbS5z''@;'; put 'put ''LmFsaWdubWVudCl7aWYoIWRbUV0uYWxpZ25tZW50KWNvbnRpbnVlO2lmKG0ucy5hbGlnbm1lbnQuaG9yaXpvbnRhbCE9ZFtRXS5hbGlnbm1lbnQuaG9yaXpvbnRhbHx8bS5zLmFsaWdubWVudC52ZXJ0aWNhbCE9ZFtRXS5hbGlnbm1lbnQudmVydGljYWx8fG0ucy5hbGlnbm1lbnQud3JhcFRl''@;'; put 'put ''eHQhPWRbUV0uYWxpZ25tZW50LndyYXBUZXh0fHxtLnMuYWxpZ25tZW50LnNocmlua1RvRml0IT1kW1FdLmFsaWdubWVudC5zaHJpbmtUb0ZpdHx8bS5zLmFsaWdubWVudC50ZXh0Um90YXRpb24hPWRbUV0uYWxpZ25tZW50LnRleHRSb3RhdGlvbnx8bS5zLmFsaWdubWVudC5pbmRlbnQhPWRb''@;'; put 'put ''UV0uYWxpZ25tZW50LmluZGVudCljb250aW51ZX1lbHNlIGlmKGRbUV0uYWxpZ25tZW50KWNvbnRpbnVlO2lmKG0ucyl7aWYoISFtLnMuaGlkZGVuPT0oIWRbUV0ucHJvdGVjdGlvbnx8IWRbUV0ucHJvdGVjdGlvbi5oaWRkZW4pfHwhIW0ucy5lZGl0YWJsZT09KCFkW1FdLnByb3RlY3Rpb258''@;'; put 'put ''fCFkW1FdLnByb3RlY3Rpb24uZWRpdGFibGUpKWNvbnRpbnVlfWVsc2UgaWYoZFtRXS5wcm90ZWN0aW9uKWNvbnRpbnVlO3JldHVybiBRfX1lbHNlIGZvcihRPTA7USE9c2U7KytRKWlmKGRbUV0ubnVtRm10SWQ9PT1QKXJldHVybiBRO3JldHVybiBkW3NlXT17bnVtRm10SWQ6UCxmb250SWQ6''@;'; put 'put ''b2UsZmlsbElkOmRlLGJvcmRlcklkOkxlLHhmSWQ6TmUsYXBwbHlOdW1iZXJGb3JtYXQ6MX0sb2U+MCYmKGRbc2VdLmFwcGx5Rm9udD0xKSxkZT4wJiYoZFtzZV0uYXBwbHlGaWxsPTEpLExlPjAmJihkW3NlXS5hcHBseUJvcmRlcj0xKSwhXyYmbS5zJiZtLnMuc3R5bGUmJiJOb3JtYWwiIT1t''@;'; put 'put ''LnMuc3R5bGUmJihkW3NlXS5zdHlsZT1tLnMuc3R5bGUpLG0ucyYmbS5zLmFsaWdubWVudCYmKGRbc2VdLmFsaWdubWVudD17fSxbImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsIndyYXBUZXh0Iiwic2hyaW5rVG9GaXQiLCJpbmRlbnQiLCJ0ZXh0Um90YXRpb24iXS5mb3JFYWNoKGZ1bmN0aW9u''@;'; put 'put ''KGJ0KXtudWxsIT1tLnMuYWxpZ25tZW50W2J0XSYmKGRbc2VdLmFsaWdubWVudFtidF09bS5zLmFsaWdubWVudFtidF0pfSkpLG0ucyYmbS5zLmhpZGRlbiYmKGRbc2VdLnByb3RlY3Rpb258fChkW3NlXS5wcm90ZWN0aW9uPXt9KSxkW3NlXS5wcm90ZWN0aW9uLmhpZGRlbj0hMCksbS5zJiZt''@;'; put 'put ''LnMuZWRpdGFibGUmJihkW3NlXS5wcm90ZWN0aW9ufHwoZFtzZV0ucHJvdGVjdGlvbj17fSksZFtzZV0ucHJvdGVjdGlvbi5lZGl0YWJsZT0hMCksc2V9ZnVuY3Rpb24gRmsoZCxfLG0sVCxQLFEsc2Usb2UpeyJkIj09PWQudCYmInN0cmluZyI9PXR5cGVvZiBkLnYmJihkLnY9bG4oZC52KSk7''@;'; put 'put ''dHJ5e1EuY2VsbE5GJiYoZC56PUkuX3RhYmxlW19dKX1jYXRjaChMZSl7aWYoUS5XVEYpdGhyb3cgTGV9aWYoKCFRfHwhMSE9PVEuY2VsbFRleHQpJiYieiIhPWQudCl0cnl7aWYobnVsbD09SS5fdGFibGVbX10mJkkubG9hZChfZVtfXXx8IkdlbmVyYWwiLF8pLCJlIj09PWQudClkLnc9ZC53''@;'; put 'put ''fHxubFtkLnZdO2Vsc2UgaWYoMD09PV8paWYoIm4iPT09ZC50KWQudz0oMHxkLnYpPT09ZC52P0kuX2dlbmVyYWxfaW50KGQudik6SS5fZ2VuZXJhbF9udW0oZC52KTtlbHNlIGlmKCJkIj09PWQudCl7dmFyIGRlPUtlKGQudik7ZC53PSgwfGRlKT09PWRlP0kuX2dlbmVyYWxfaW50KGRlKTpJ''@;'; put 'put ''Ll9nZW5lcmFsX251bShkZSl9ZWxzZXtpZih2b2lkIDA9PT1kLnYpcmV0dXJuIiI7ZC53PUkuX2dlbmVyYWwoZC52LFhtKX1lbHNlIGQudz1JLmZvcm1hdChfLCJkIj09PWQudD9LZShkLnYpOmQudixYbSl9Y2F0Y2goTGUpe2lmKFEuV1RGKXRocm93IExlfWlmKFEuY2VsbFN0eWxlcyYmb2Up''@;'; put 'put ''e2lmKGQucz17fSxudWxsIT1tJiZvZS5GaWxscyl0cnl7SG4oZC5zLG9lLkZpbGxzW21dKX1jYXRjaChMZSl7aWYoUS5XVEYpdGhyb3cgTGV9aWYobnVsbCE9VCYmb2UuRm9udHMpdHJ5e0huKGQucyxvZS5Gb250c1tUXSl9Y2F0Y2goTGUpe2lmKFEuV1RGKXRocm93IExlfWlmKG51bGwhPVAm''@;'; put 'put ''Jm9lLkJvcmRlcnMpdHJ5e0huKGQucyxvZS5Cb3JkZXJzW1BdKX1jYXRjaChMZSl7aWYoUS5XVEYpdGhyb3cgTGV9fX1mdW5jdGlvbiBsSihkLF8sbSl7aWYoZCYmZFsiIXJlZiJdKXt2YXIgVD15dChkWyIhcmVmIl0pO2lmKFQuZS5jPFQucy5jfHxULmUucjxULnMucil0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIkJhZCByYW5nZSAoIittKyIpOiAiK2RbIiFyZWYiXSl9fXZhciB1Sj0vPCg/Olx3Oik/bWVyZ2VDZWxsIHJlZj0iW0EtWjAtOTpdKyJccypbXC9dPz4vZyxQaz0vPCg/Olx3KzopP3NoZWV0RGF0YVtePl0qPihbXHNcU10qKTxcLyg/Olx3KzopP3NoZWV0RGF0YT4vLGRKPS88KD86XHc6''@;'; put 'put ''KT9oeXBlcmxpbmsgW14+XSo+L2dtLFI1ZT0vIihcdyo6XHcqKSIvLEhrPS88KD86XHc6KT9jb2xcYltePl0qW1wvXT8+L2csQVY9LzwoPzpcdzopP2NvbnRyb2xcYltePl0qW1wvXT8+L2csSTVlPS88KD86XHc6KT9hdXRvRmlsdGVyW14+XSooW1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9h''@;'; put 'put ''dXRvRmlsdGVyKT4vZyxWaz0vPCg/Olx3Oik/cGFnZU1hcmdpbnNbXj5dKlwvPi9nLExTPS88KD86XHc6KT9zaGVldFByXGIoPzpbXj5hLXpdW14+XSopP1wvPi8sQms9LzwoPzpcdzopP3NoZWV0UHJvdGVjdGlvblxiKD86W14+YS16XVtePl0qKT9cLz4vLFFtPS88KD86XHc6KT9zaGVldFBy''@;'; put 'put ''W14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP3NoZWV0UHIpPi8saEo9LzwoPzpcdzopP3NoZWV0Vmlld3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/c2hlZXRWaWV3cyk+LyxrVj0vPCg/Olx3KzopP2RhdGFWYWxpZGF0aW9uc1tePl0qKD86W1wvXXw+KFtcc1xT''@;'; put 'put ''XSo/KTxcLyg/Olx3KzopP2RhdGFWYWxpZGF0aW9ucyk+LyxPUz0vPCg/Olx3KzopP2NvbmRpdGlvbmFsRm9ybWF0dGluZ1xiW14+XSooPzpbXC9dfD4oW1xzXFNdKj8pPFwvKD86XHcrOik/Y29uZGl0aW9uYWxGb3JtYXR0aW5nKT4vZyxENWU9LzwoPzpcdzopP3NoZWV0Rm9ybWF0UHJbXj5d''@;'; put 'put ''KlwvPi8sTDVlPS88KD86XHcrOik/dGFibGVQYXJ0cy4qPz4oW1xzXFNdKj8pPFwvKD86XHcrOik/dGFibGVQYXJ0cz4vLGprPS88KD86XHc6KT9wYWdlU2V0dXBbXj5dKlwvPi8sTzVlPS88KD86XHc6KT9yb3dCcmVha3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/cm93QnJl''@;'; put 'put ''YWtzKT4vLE41ZT0vPCg/Olx3Oik/Y29sQnJlYWtzW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP2NvbEJyZWFrcyk+LyxGNWU9LzwoPzpcdzopP2hlYWRlckZvb3RlcltePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9oZWFkZXJGb290ZXIpPi8sUDVlPS88KD86XHc6''@;'; put 'put ''KT9wcmludE9wdGlvbnNcYltePlwvXSpcLz4vO3ZhciBOUz0vPCg/Olx3Oik/dGFibGVQYXJ0XGJbXlwvPl0qW1wvXT8+L2c7ZnVuY3Rpb24gUFMoZCxfLG0sVCl7dmFyIFA9WHIoZCk7bS5TaGVldHNbVF18fChtLlNoZWV0c1tUXT17fSksUC5jb2RlTmFtZSYmKG0uU2hlZXRzW1RdLkNvZGVO''@;'; put 'put ''YW1lPVAuY29kZU5hbWUpfXZhciBJVj0vPCg/Olx3Oik/dGFiQ29sb3JbXj5dKltcL10/Pi8sRFY9LzwoPzpcdzopP3BhZ2VTZXRVcFByW14+XSpbXC9dPz4vLExWPS88KD86XHc6KT9vdXRsaW5lUHJbXj5dKltcL10/Pi8sVWs9e2Rpc3BsYXllZDoiYXNEaXNwbGF5ZWQiLGVuZDoiYXRFbmQi''@;'; put 'put ''LG5vbmU6Im5vbmUifSxPOD1jZShVayksTlY9e2Rpc3BsYXllZDoiZGlzcGxheWVkIixub25lOiJibGFuayIsZGFzaDoiZGFzaCIsIm4vYSI6Ik5BIn0sTHk9Y2UoTlYpLFQ1PS88KD86XHc6KT9icmtbXj5dKlwvPi9nLFZWPVsib2JqZWN0cyIsInNjZW5hcmlvcyIsInNlbGVjdExvY2tlZENl''@;'; put 'put ''bGxzIiwic2VsZWN0VW5sb2NrZWRDZWxscyJdLGsyPVsiZm9ybWF0Q29sdW1ucyIsImZvcm1hdFJvd3MiLCJmb3JtYXRDZWxscyIsImluc2VydENvbHVtbnMiLCJpbnNlcnRSb3dzIiwiaW5zZXJ0SHlwZXJsaW5rcyIsImRlbGV0ZUNvbHVtbnMiLCJkZWxldGVSb3dzIiwic29ydCIsImF1dG9G''@;'; put 'put ''aWx0ZXIiLCJwaXZvdFRhYmxlcyJdO2Z1bmN0aW9uIEJWKGQpe3ZhciBfPXt9O3JldHVyblsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFjaChmdW5jdGlvbihtKXtkW21dJiYoX1ttXT1wYXJzZUZsb2F0KGRbbV0pKX0pLF99dmFyIFVWPXtD''@;'; put 'put ''dXN0b206ImN1c3RvbSIsRGF0ZToiZGF0ZSIsVGltZToidGltZSIsTGVuZ3RoOiJ0ZXh0TGVuZ3RoIixMaXN0OiJsaXN0IixEZWNpbWFsOiJkZWNpbWFsIixXaG9sZToid2hvbGUiLEFueToibm9uZSJ9LFZTPWNlKFVWKSx3Mz17SU46ImJldHdlZW4iLE9UOiJub3RCZXR3ZWVuIixFUToiZXF1''@;'; put 'put ''YWwiLE5FOiJub3RFcXVhbCIsR1Q6ImdyZWF0ZXJUaGFuIixMVDoibGVzc1RoYW4iLEdFOiJncmVhdGVyVGhhbk9yRXF1YWwiLExFOiJsZXNzVGhhbk9yRXF1YWwifSxWOT1jZSh3Myk7ZnVuY3Rpb24gV2soZCxfLG0pe3ZhciBUPVtdLFA9e30sUT0iIixzZT0hMSxvZT0wLGRlPTA7cmV0dXJu''@;'; put 'put ''IGQucmVwbGFjZShCbixmdW5jdGlvbihMZSxOZSl7dmFyIEJlPVhyKExlKTtzd2l0Y2goZWEoQmVbMF0pKXtjYXNlIjxkYXRhVmFsaWRhdGlvbnMiOmNhc2UiPGRhdGFWYWxpZGF0aW9ucz4iOmNhc2UiPC9kYXRhVmFsaWRhdGlvbnM+IjpicmVhaztjYXNlIjxkYXRhVmFsaWRhdGlvbiI6UD17''@;'; put 'put ''dDpWU1tCZS50eXBlfHwibm9uZSJdLHJlZjooUT1CZS5zcXJlZik/US5pbmRleE9mKCIgIik+LTE/UTp5dChRKToiIn0sQmUub3BlcmF0b3ImJihQLm9wPVY5W0JlLm9wZXJhdG9yXSksUC5ibGFuaz0hIUJlLmFsbG93QmxhbmsmJlRpKEJlLmFsbG93QmxhbmspLCghQmUuc2hvd0lucHV0TWVz''@;'; put 'put ''c2FnZXx8IVRpKEJlLnNob3dJbnB1dE1lc3NhZ2UpKSYmKFAuaW5wdXQ9ITEpLEJlLnByb21wdFRpdGxlJiYoKFAuaW5wdXR8fChQLmlucHV0PXt9KSkudGl0bGU9Q2koQmUucHJvbXB0VGl0bGUpKSxCZS5wcm9tcHQmJigoUC5pbnB1dHx8KFAuaW5wdXQ9e30pKS5tZXNzYWdlPUNpKEJlLnBy''@;'; put 'put ''b21wdCkpLCghQmUuc2hvd0Vycm9yTWVzc2FnZXx8IVRpKEJlLnNob3dFcnJvck1lc3NhZ2UpKSYmKFAuZXJyb3I9ITEpLEJlLmVycm9yVGl0bGUmJigoUC5lcnJvcnx8KFAuZXJyb3I9e30pKS50aXRsZT1DaShCZS5lcnJvclRpdGxlKSksQmUuZXJyb3ImJigoUC5lcnJvcnx8KFAuZXJyb3I9''@;'; put 'put ''e30pKS5tZXNzYWdlPUNpKEJlLmVycm9yKSksUC5lcnJvcj9QLmVycm9yLnN0eWxlPUJlLmVycm9yU3R5bGV8fCJzdG9wIjpCZS5lcnJvclN0eWxlJiYoUC5lcnJvcj17c3R5bGU6QmUuZXJyb3JTdHlsZX0pLFAudCYmVC5wdXNoKFApO2JyZWFrO2Nhc2UiPGRhdGFWYWxpZGF0aW9uLz4iOmNh''@;'; put 'put ''c2UiPC9kYXRhVmFsaWRhdGlvbj4iOmJyZWFrO2Nhc2UiPHNxcmVmPiI6ZGU9TmUrTGUubGVuZ3RoO2JyZWFrO2Nhc2UiPC9zcXJlZj4iOlE9ZC5zbGljZShkZSxOZSksUC5yZWY9UT9RLmluZGV4T2YoIiAiKT4tMT9ROnl0KFEpOiIiO2JyZWFrO2Nhc2UiPGY+IjpjYXNlIjxmb3JtdWxhMSI6''@;'; put 'put ''Y2FzZSI8Zm9ybXVsYTE+IjpjYXNlIjxmb3JtdWxhMiI6Y2FzZSI8Zm9ybXVsYTI+IjpvZT1OZStMZS5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Zvcm11bGExPiI6Y2FzZSI8L2Zvcm11bGEyPiI6aWYobSlicmVhaztjYXNlIjwvZj4iOnZhciBaZT1DaShXbihkLnNsaWNlKG9lLE5lKSkpO3N3aXRj''@;'; put 'put ''aChQLnQpe2Nhc2UiTGlzdCI6aWYoUC5sfHxQLmYpYnJlYWs7aWYoMzQ9PVplLmNoYXJDb2RlQXQoMCkpe1AubD1aZS5zbGljZSgxLC0xKS5zcGxpdCgiLCIpO2JyZWFrfWNhc2UiQ3VzdG9tIjpudWxsPT1QLmYmJihQLmY9WmUpO2JyZWFrO2Nhc2UiRGF0ZSI6Y2FzZSJEZWNpbWFsIjpjYXNl''@;'; put 'put ''Ikxlbmd0aCI6Y2FzZSJUaW1lIjpjYXNlIldob2xlIjpQLm9wfHwoUC5vcD0iSU4iKSxudWxsPT1QLnY/UC52PWlzTmFOKCtaZSk/WmU6K1plOihQLm1pbj1QLnYsUC5tYXg9aXNOYU4oK1plKT9aZTorWmUsZGVsZXRlIFAudil9YnJlYWs7Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+Ijpj''@;'; put 'put ''YXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjpzZT0hMDticmVhaztjYXNlIjwvZXh0PiI6c2U9ITE7YnJlYWs7ZGVmYXVsdDppZihfJiZfLldURiYmIXNlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrQmVbMF0rIiBpbiBkYXRhIHZhbGlkYXRpb24iKX1yZXR1cm4gTGV9''@;'; put 'put ''KSxUfXZhciBZaz17SU46ImNvbnRhaW5zVGV4dCIsT1Q6Im5vdENvbnRhaW5zVGV4dCIsU1Q6ImJlZ2luc1dpdGgiLE5EOiJlbmRzV2l0aCJ9LFRKPWNlKFlrKSx4Sj17TE06Imxhc3RNb250aCIsTFM6Imxhc3Q3RGF5cyIsTFc6Imxhc3RXZWVrIixOTToibmV4dE1vbnRoIixOVzoibmV4dFdl''@;'; put 'put ''ZWsiLFRNOiJ0aGlzTW9udGgiLFRXOiJ0aGlzV2VlayIsVEQ6InRvZGF5IixUTzoidG9tb3Jyb3ciLFlTOiJ5ZXN0ZXJkYXkifSxWNWU9Y2UoeEopO2Z1bmN0aW9uIEI5KGQpe3ZhciBfPXt9O3JldHVybiBudWxsIT1kLnZhbCYmKGlzTmFOKCtkLnZhbCk/Xy5mPWQudmFsOl8udj0rZC52YWwp''@;'; put 'put ''LF8udD1kLnR5cGUsX31mdW5jdGlvbiBOOChkKXtyZXR1cm4gVnIoImNmdm8iLG51bGwse3R5cGU6ZC50LHZhbDpudWxsIT1kLnY/ZC52OkJpKGQuZil9KX1mdW5jdGlvbiBXVihkLF8sbSxUKXt2YXIgUD1COShkKTtyZXR1cm4gUC5jb2xvcj13OChfLG0sVCksUH1mdW5jdGlvbiBCUyhkLF8s''@;'; put 'put ''bSxULFApe3ZhciBRPShkLm1hdGNoKC9zcXJlZj0iKFtcdzokIF0qKSIvKXx8W10pWzFdO3JldHVybiBmdW5jdGlvbiBCNWUoZCxfLG0sVCxQLFEpe3ZhciBzZT0hMSxvZT1bXSxkZT17ZjpbXX0sTGU9MCxOZT0wLEJlPXtjZnZvczpbXSxjb2xvcnM6W119LFplPXt9LG50PS0xLG10PTAsUWU9''@;'; put 'put ''IiI7cmV0dXJuIGQucmVwbGFjZShCbixmdW5jdGlvbihmdCxrdCl7dmFyIGJ0PVhyKGZ0KTtzd2l0Y2goZWEoYnRbMF0pKXtjYXNlIjxjb25kaXRpb25hbEZvcm1hdHRpbmciOmNhc2UiPC9jb25kaXRpb25hbEZvcm1hdHRpbmc+IjpicmVhaztjYXNlIjxjZlJ1bGUiOmNhc2UiPGNmUnVsZT4i''@;'; put 'put ''OmlmKE5lPWt0LFplPWJ0LGRlPXtyZWY6XyxmOltdfSwhZnQubWF0Y2goL1wvPi8pKWJyZWFrO2Nhc2UiPC9jZlJ1bGU+Ijpzd2l0Y2goWmUuZHhmSWQmJlAmJlAuRFhGJiYoZGUucz1QLkRYRlsrWmUuZHhmSWRdKSxaZS50eXBlKXtjYXNlImR1cGxpY2F0ZVZhbHVlcyI6ZGUudD0iZHVwIjti''@;'; put 'put ''cmVhaztjYXNlInVuaXF1ZVZhbHVlcyI6ZGUudD0idW5pcXVlIjticmVhaztjYXNlImNvbnRhaW5zQmxhbmtzIjpkZS50PSJibGFuayIsZGUudj0hMDticmVhaztjYXNlIm5vdENvbnRhaW5zQmxhbmtzIjpkZS50PSJibGFuayIsZGUudj0hMTticmVhaztjYXNlImNvbnRhaW5zRXJyb3JzIjpk''@;'; put 'put ''ZS50PSJlcnJvciIsZGUudj0hMDticmVhaztjYXNlIm5vdENvbnRhaW5zRXJyb3JzIjpkZS50PSJlcnJvciIsZGUudj0hMTticmVhaztjYXNlImNlbGxJcyI6c3dpdGNoKFplLm9wZXJhdG9yKXtjYXNlImNvbnRhaW5zVGV4dCI6Y2FzZSJub3RDb250YWlucyI6Y2FzZSJiZWdpbnNXaXRoIjpj''@;'; put 'put ''YXNlImVuZHNXaXRoIjppZihkZS50PSJ0ZXh0IixkZS5vcD1USltaZS5vcGVyYXRvcl0sbnVsbD09WmUudGV4dCl0aHJvdyBuZXcgRXJyb3IoIkNGIFRleHQgUnVsZSAiK2RlLm9wKyIgbWlzc2luZyB0ZXh0Iik7ZGUudj1aZS50ZXh0LGRlLmY9ZGUuZlswXSxudWxsPT1kZS5mJiZkZWxldGUg''@;'; put 'put ''ZGUuZjticmVhaztkZWZhdWx0OmRlLnQ9InZhbCIsZGUub3A9VjlbWmUub3BlcmF0b3JdLDE9PWRlLmYubGVuZ3RoP2lzTmFOKCtkZS5mWzBdKT9kZS5mPWRlLmZbMF06KGRlLnY9K2RlLmZbMF0sZGVsZXRlIGRlLmYpOihkZS5taW49aXNOYU4oK2RlLmZbMF0pP2RlLmZbMF06K2RlLmZbMF0s''@;'; put 'put ''ZGUubWF4PWlzTmFOKCtkZS5mWzFdKT9kZS5mWzFdOitkZS5mWzFdLGRlbGV0ZSBkZS5mKX1icmVhaztjYXNlImV4cHJlc3Npb24iOmRlLnQ9ImZvcm11bGEiLGRlLmY9ZGUuZlswXTticmVhaztjYXNlImNvbnRhaW5zVGV4dCI6Y2FzZSJub3RDb250YWluc1RleHQiOmNhc2UiYmVnaW5zV2l0''@;'; put 'put ''aCI6Y2FzZSJlbmRzV2l0aCI6aWYoZGUudD0idGV4dCIsZGUub3A9VEpbWmUudHlwZV0sbnVsbD09WmUudGV4dCYmZGUuZi5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoIkNGIFRleHQgUnVsZSAiK2RlLm9wKyIgbWlzc2luZyB0ZXh0Iik7ZGUudj1udWxsIT1aZS50ZXh0P1plLnRleHQ6ZGUu''@;'; put 'put ''ZlsxXS5tYXRjaCgvIi4qIi8pP2RlLmZbMV0uc2xpY2UoMSwtMSk6ZGUuZlsxXSxkZS5mPWRlLmZbMF0sbnVsbD09ZGUuZiYmZGVsZXRlIGRlLmY7YnJlYWs7Y2FzZSJjb2xvclNjYWxlIjppZihkZS50PSJzY2FsZSIsIWRlLmNvbG9yU2NhbGUpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIGNv''@;'; put 'put ''bG9yU2NhbGUiKTtkZS5jbWluPVdWKChCZT1kZS5jb2xvclNjYWxlKS5jZnZvc1swXSxCZS5jb2xvcnNbMF0sUCxUKSwzPT1CZS5jZnZvcy5sZW5ndGgmJihkZS5jbWlkPVdWKEJlLmNmdm9zWzFdLEJlLmNvbG9yc1sxXSxQLFQpKSxkZS5jbWF4PVdWKEJlLmNmdm9zW0JlLmNmdm9zLmxlbmd0''@;'; put 'put ''aC0xXSxCZS5jb2xvcnNbQmUuY2Z2b3MubGVuZ3RoLTFdLFAsVCk7YnJlYWs7Y2FzZSJkYXRhQmFyIjppZihkZS50PSJiYXIiLCFkZS5kYXRhQmFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZyBkYXRhQmFyIik7KEJlPWRlLmRhdGFCYXIpLmNvbG9yc1swXSYmKGRlLmNvbG9yPXc4KEJlLmNv''@;'; put 'put ''bG9yc1swXSxQLFQpKSxkZS5jbWluPUI5KEJlLmNmdm9zWzBdKSxkZS5jbWF4PUI5KEJlLmNmdm9zWzFdKTticmVhaztjYXNlImljb25TZXQiOmlmKGRlLnQ9Imljb24iLCFkZS5pY29uU2V0KXRocm93IG5ldyBFcnJvcigibWlzc2luZyBpY29uU2V0Iik7ZGUudGhyZXNoPShCZT1kZS5pY29u''@;'; put 'put ''U2V0KS5jZnZvcy5tYXAoZnVuY3Rpb24oRXQpe3JldHVybiBCOShFdCl9KSxkZS52PUJlLnRhZyYmQmUudGFnLmljb25TZXR8fCIzVHJhZmZpY0xpZ2h0czEiLGRlLnJldj1UaShCZS50YWcucmV2ZXJzZXx8ImZhbHNlIiksZGUucGN0PVRpKEJlLnRhZy5wZXJjZW50fHwidHJ1ZSIpLGRlLmhp''@;'; put 'put ''ZGRlbj0hVGkoQmUudGFnLnNob3dWYWx1ZXx8InRydWUiKTticmVhaztjYXNlInRpbWVQZXJpb2QiOmRlLnQ9ImRhdGUiLGRlLm9wPVY1ZVtaZS50aW1lUGVyaW9kXTticmVhaztjYXNlImFib3ZlQXZlcmFnZSI6ZGUudD0iYXZnIixkZS5vcD0iMCI9PVplLmFib3ZlQXZlcmFnZT8iTCI6Ikci''@;'; put 'put ''LGRlLm9wKz1aZS5zdGREZXY/WmUuc3RkRGV2OlRpKFplLmVxdWFsQXZlcmFnZXx8IjAiKT8iRSI6IlQiO2JyZWFrO2Nhc2UidG9wMTAiOmRlLnQ9InJhbmsiLGRlLm9wPShUaShaZS5ib3R0b218fCIwIik/IkIiOiJUIikrKFRpKFplLnBlcmNlbnR8fCIwIik/IlAiOiJWIiksZGUudj0rWmUu''@;'; put 'put ''cmFuazticmVhaztkZWZhdWx0OnRocm93IlVuc3VwcG9ydGVkIENGIFR5cGUgIitaZS50eXBlfWlmKGRlbGV0ZSBkZS5jb2xvclNjYWxlLGRlbGV0ZSBkZS5kYXRhQmFyLGRlbGV0ZSBkZS5pY29uU2V0LCFkZS50KXRocm93IGNvbnNvbGUubG9nKGQuc2xpY2UoTmUsa3QrZnQubGVuZ3RoKSks''@;'; put 'put ''ImJhZCBDRiBydWxlIjtudWxsIT1kZS5mJiYhZGUuZi5sZW5ndGgmJmRlbGV0ZSBkZS5mLGRlLmRlbHx8b2UucHVzaChkZSk7YnJlYWs7Y2FzZSI8Zm9ybXVsYSI6Y2FzZSI8Zm9ybXVsYT4iOkxlPWt0K2Z0Lmxlbmd0aDticmVhaztjYXNlIjwvZm9ybXVsYT4iOmRlLmYucHVzaChDaShkLnNs''@;'; put 'put ''aWNlKExlLGt0KSkpO2JyZWFrO2Nhc2UiPGYiOmNhc2UiPGY+IjpMZT1rdCtmdC5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Y+IjpkZS5mLnB1c2goQ2koZC5zbGljZShMZSxrdCkpKTticmVhaztjYXNlIjxzcXJlZj4iOm10PWt0K2Z0Lmxlbmd0aDticmVhaztjYXNlIjwvc3FyZWY+IjpRZT1kLnNs''@;'; put 'put ''aWNlKG10LGt0KSxfPVFlP1FlLmluZGV4T2YoIiAiKT4tMT9RZTp5dChRZSk6IiIsZGUucmVmPV8sb2UuZm9yRWFjaChmdW5jdGlvbihFdCl7RXQucmVmPV99KTticmVhaztjYXNlIjxjb2xvclNjYWxlIjpjYXNlIjxjb2xvclNjYWxlPiI6Y2FzZSI8ZGF0YUJhciI6Y2FzZSI8ZGF0YUJhcj4i''@;'; put 'put ''OmNhc2UiPGljb25TZXQiOmNhc2UiPGljb25TZXQ+IjpCZT17Y2Z2b3M6W10sY29sb3JzOltdLHRhZzpidH0sTGU9a3QrZnQubGVuZ3RoO2JyZWFrO2Nhc2UiPC9jb2xvclNjYWxlPiI6ZGUuY29sb3JTY2FsZT1CZTticmVhaztjYXNlIjwvZGF0YUJhcj4iOmRlLmRhdGFCYXI9QmU7YnJlYWs7''@;'; put 'put ''Y2FzZSI8L2ljb25TZXQ+IjpkZS5pY29uU2V0PUJlO2JyZWFrO2Nhc2UiPGNmdm8iOmNhc2UiPGNmdm8vPiI6QmUuY2Z2b3MucHVzaChidCk7YnJlYWs7Y2FzZSI8L2Nmdm8+IjpicmVhaztjYXNlIjxjb2xvciI6QmUuY29sb3JzLnB1c2goYnQpO2JyZWFrO2Nhc2UiPC9jb2xvcj4iOmNhc2Ui''@;'; put 'put ''PGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6c2U9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOnNlPSExO2JyZWFrO2Nhc2UiPG5lZ2F0aXZlRmlsbENvbG9yIjpjYXNlIjxheGlzQ29sb3IiOmNhc2UiPGJvcmRlckNvbG9yIjpjYXNlIjxuZWdh''@;'; put 'put ''dGl2ZUJvcmRlckNvbG9yIjpjYXNlIjxjZkljb24iOmRlLmRlbD0hMDticmVhaztjYXNlIjxkeGY+IjpzZT0hMCxudD1rdDticmVhaztjYXNlIjwvZHhmPiI6c2U9ITEsZGUucz1DSChkLnNsaWNlKG50LGt0K2Z0Lmxlbmd0aCksUCxULG0pO2JyZWFrO2RlZmF1bHQ6aWYobSYmbS5XVEYpe2lm''@;'; put 'put ''KFEpYnJlYWs7aWYoIXNlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrYnRbMF0rIiBpbiBjb25kZm10Iil9fXJldHVybiBmdH0pLG9lfShkLFEsXyxtLFQsUCl9dmFyIFJKPS88KD86XHc6KT9zaGVldFZpZXcoPzpbXj5hLXpdW14+XSopP1wvPz4vZztmdW5jdGlvbiBPeShkLF8p''@;'; put 'put ''e3ZhciBtPTAsVD0wLFA9MCxRPTA7aWYoIV98fCFfLkNlbGxYZilyZXR1cm4gbnVsbDt2YXIgc2U9Xy5DZWxsWGZbZF07bnVsbCE9c2UmJihudWxsIT1zZS5udW1GbXRJZCYmKG09c2UubnVtRm10SWQpLG51bGwhPXNlLmZpbGxJZCYmKFQ9c2UuZmlsbElkKSxudWxsIT1zZS5mb250SWQmJihQ''@;'; put 'put ''PXNlLmZvbnRJZCksbnVsbCE9c2UuYm9yZGVySWQmJihRPXNlLmJvcmRlcklkKSk7dmFyIG9lPXt0OiJ6In07dHJ5e0ZrKG9lLG0sVCxQLFEse1dURjoxLGNlbGxTdHlsZXM6ITB9LDAsXyl9Y2F0Y2h7fXJldHVybiBvZS5zfWZ1bmN0aW9uIFlWKGQsXyxtLFQpe2lmKHZvaWQgMD09PWQudiYm''@;'; put 'put ''dm9pZCAwPT09ZC5mJiZudWxsPT1kLnMmJiFkLmN8fCJ6Ij09PWQudCYmIWQuYyYmIVQuc2hlZXRTdHVicylyZXR1cm4iIjt2YXIgUD0iIixRPWQudCxzZT1kLnY7aWYoInoiIT09ZC50KXN3aXRjaChkLnQpe2Nhc2UiYiI6UD1kLnY/IjEiOiIwIjticmVhaztjYXNlIm4iOlA9IiIrZC52O2Jy''@;'; put 'put ''ZWFrO2Nhc2UiZSI6UD1ubFtkLnZdO2JyZWFrO2Nhc2UiZCI6VCYmVC5jZWxsRGF0ZXM/UD1sbihkLnYsLTEpLnRvSVNPU3RyaW5nKCk6KChkPVFyKGQpKS50PSJuIixQPSIiKyhkLnY9S2UobG4oZC52KSkpKSx0eXBlb2YgZC56PiJ1IiYmKGQuej1JLl90YWJsZVsxNF0pO2JyZWFrO2RlZmF1''@;'; put 'put ''bHQ6UD1kLnZ9dmFyIG9lPSJ6Ij09ZC50PyIiOlVvKCJ2IixCaShQKSksZGU9e3I6X30sTGU9VD9BMihULmNlbGxYZnMsVC5jZWxsU3R5bGVYZnMsZCxUKTowO3N3aXRjaCgwIT09TGUmJihkZS5zPUxlKSxkLnQpe2Nhc2UibiI6Y2FzZSJ6IjpicmVhaztjYXNlImQiOmRlLnQ9ImQiO2JyZWFr''@;'; put 'put ''O2Nhc2UiYiI6ZGUudD0iYiI7YnJlYWs7Y2FzZSJlIjpkZS50PSJlIjticmVhaztkZWZhdWx0OmlmKG51bGw9PWQudil7ZGVsZXRlIGQudDticmVha31pZihUJiZULmJvb2tTU1Qpe29lPVVvKCJ2IiwiIitMayhULlN0cmluZ3MsZC52LGQuUj9kLnI9TTkoZC5SKTpudWxsLFQucmV2U3RyaW5n''@;'; put 'put ''cykpLGRlLnQ9InMiO2JyZWFrfUFycmF5LmlzQXJyYXkoZC5SKT8ob2U9Ijxpcz4iK005KGQuUikrIjwvaXM+IixkZS50PSJpbmxpbmVTdHIiKTpkZS50PSJzdHIifWlmKGQudCE9USYmKGQudD1RLGQudj1zZSksZC5mKXt2YXIgTmU9ZC5GJiZkLkYuc2xpY2UoMCxfLmxlbmd0aCk9PV8/e3Q6''@;'; put 'put ''ImFycmF5IixyZWY6ZC5GfTpudWxsO29lPVZyKCJmIixCaShkLmYpLE5lKSsobnVsbCE9ZC52P29lOiIiKX1yZXR1cm4gZC5sJiZtWyIhbGlua3MiXS5wdXNoKFtfLGQubF0pLGQuYyYmbVsiIWNvbW1lbnRzIl0ucHVzaChbXyxkLmNdKSxWcigiYyIsb2UsZGUpfXZhciBMSj1mdW5jdGlvbigp''@;'; put 'put ''e3ZhciBkPS88KD86XHcrOik/Y1sgXC8+XS8sXz0vPFwvKD86XHcrOik/cm93Pi8sbT0vcj1bIiddKFteIiddKilbIiddLyxUPS88KD86XHcrOik/aXM+KFtcU1xzXSo/KTxcLyg/Olx3KzopP2lzPi8sUD0vcmVmPVsiJ10oW14iJ10qKVsiJ10vLFE9TGMoInYiKSxzZT1MYygiZiIpO3JldHVy''@;'; put 'put ''biBmdW5jdGlvbihkZSxMZSxOZSxCZSxaZSxudCxtdCl7Zm9yKHZhciBubixhcixzcixncixMaSxRZT0wLGZ0PSIiLGt0PVtdLGJ0PVtdLEV0PTAsVnQ9MCx1bj0wLG5yPSIiLGpuPTAsa249MCxxbj0wLF9pPTAsT2k9MCxzbz0wLG1vPUFycmF5LmlzQXJyYXkobXQuQ2VsbFhmKSxrcj1bXSxE''@;'; put 'put ''bj1bXSxPcj1BcnJheS5pc0FycmF5KE5lKSxfcj1bXSxNbj17fSxOcj0hMSxqaT1kZS5zcGxpdChfKSxiaT0hIUJlLnNoZWV0U3R1YnMsTm89ISFCZS5jZWxsSFRNTCxZYT0hKCExPT09QmUuY2VsbFRleHQmJiFCZS5jZWxsTkYmJiFCZS5jZWxsU3R5bGVzKSx1bz0wLE1zPWppLmxlbmd0aDt1''@;'; put 'put ''byE9TXM7Kyt1byl7dmFyIGRhPShmdD1qaVt1b10udHJpbSgpKS5sZW5ndGg7aWYoMCE9PWRhKXt2YXIgJGE9MDtlOmZvcihRZT0wO1FlPGRhOysrUWUpc3dpdGNoKGZ0W1FlXSl7Y2FzZSI+IjppZigiLyIhPWZ0W1FlLTFdKXsrK1FlO2JyZWFrIGV9QmUuY2VsbFN0eWxlcyYmbnVsbCE9KGFy''@;'; put 'put ''PVhyKGZ0LnNsaWNlKCRhLFFlKSwhMCkpLnImJnBhcnNlSW50KGFyLnIsMTApJiYoam49cGFyc2VJbnQoYXIuciwxMCksTW49e30sTnI9ITEsYXIuaHQmJihOcj0hMCxNbi5ocHQ9cGFyc2VGbG9hdChhci5odCksTW4uaHB4PU5nKE1uLmhwdCkpLGFyLmR5RGVzY2VudCYmKE5yPSEwLE1uLmR5''@;'; put 'put ''RGVzY2VudD1hci5keURlc2NlbnQpLCIxIj09YXIuaGlkZGVuJiYoTnI9ITAsTW4uaGlkZGVuPSEwKSxudWxsIT1hci5vdXRsaW5lTGV2ZWwmJihOcj0hMCxNbi5sZXZlbD0rYXIub3V0bGluZUxldmVsKSxhci5zJiZtdCYmbXQuQ2VsbFhmJiYoTnI9ITAsTW4ucz1PeShhci5zLG10KSksTnIm''@;'; put 'put ''Jihfcltqbi0xXT1NbikpO2JyZWFrO2Nhc2UiPCI6JGE9UWV9aWYoJGE+PVFlKWJyZWFrO2lmKGpuPW51bGwhPShhcj1YcihmdC5zbGljZSgkYSxRZSksITApKS5yP3BhcnNlSW50KGFyLnIsMTApOmpuKzEsa249LTEsIShCZS5zaGVldFJvd3MmJkJlLnNoZWV0Um93czxqbikpe0JlLm5vZGlt''@;'; put 'put ''fHwoWmUucy5yPmpuLTEmJihaZS5zLnI9am4tMSksWmUuZS5yPGpuLTEmJihaZS5lLnI9am4tMSkpO3ZhciBTYT17dDoicm93Iixyb3c6W10sUjpqbi0xLGlkeDpMZX07QmUuY2VsbFN0eWxlcyYmKE1uPXt9LE5yPSExLGFyLmh0JiYoTnI9ITAsTW4uaHB0PXBhcnNlRmxvYXQoYXIuaHQpLE1u''@;'; put 'put ''LmhweD1OZyhNbi5ocHQpKSxhci5keURlc2NlbnQmJihOcj0hMCxNbi5keURlc2NlbnQ9YXIuZHlEZXNjZW50KSwiMSI9PWFyLmhpZGRlbiYmKE5yPSEwLE1uLmhpZGRlbj0hMCksbnVsbCE9YXIub3V0bGluZUxldmVsJiYoTnI9ITAsTW4ubGV2ZWw9K2FyLm91dGxpbmVMZXZlbCksYXIucyYm''@;'; put 'put ''KE5yPSEwLE1uLnM9T3koYXIucyxtdCkpLE5yJiYoQmUuY2FsbGJhY2s/U2EucHJvcHM9TW46X3Jbam4tMV09TW4pKSxrdD1mdC5zbGljZShRZSkuc3BsaXQoZCk7Zm9yKHZhciBQaT0wO1BpIT1rdC5sZW5ndGgmJiI8Ij09a3RbUGldLnRyaW0oKS5jaGFyQXQoMCk7KytQaSk7Zm9yKGt0PWt0''@;'; put 'put ''LnNsaWNlKFBpKSxRZT0wO1FlIT1rdC5sZW5ndGg7KytRZSlpZigwIT09KGZ0PWt0W1FlXS50cmltKCkpLmxlbmd0aCl7aWYoYnQ9ZnQubWF0Y2gobSksRXQ9UWUsVnQ9MCx1bj0wLGZ0PSI8YyAiKygiPCI9PWZ0LnNsaWNlKDAsMSk/Ij4iOiIiKStmdCxudWxsIT1idCYmMj09PWJ0Lmxlbmd0''@;'; put 'put ''aCl7Zm9yKEV0PTAsbnI9YnRbMV0sVnQ9MDtWdCE9bnIubGVuZ3RoJiYhKCh1bj1uci5jaGFyQ29kZUF0KFZ0KS02NCk8MXx8dW4+MjYpOysrVnQpRXQ9MjYqRXQrdW47a249LS1FdH1lbHNlKytrbjtmb3IoVnQ9MDtWdCE9ZnQubGVuZ3RoJiY2MiE9PWZ0LmNoYXJDb2RlQXQoVnQpOysrVnQp''@;'; put 'put ''O2lmKCsrVnQsKGFyPVhyKGZ0LnNsaWNlKDAsVnQpLCEwKSkucnx8KGFyLnI9cWkoe3I6am4tMSxjOmtufSkpLG5uPXt0OiIifSxudWxsIT0oYnQ9KG5yPWZ0LnNsaWNlKFZ0KSkubWF0Y2goUSkpJiYiIiE9PWJ0WzFdJiYobm4udj1DaShidFsxXSkpLEJlLmNlbGxGb3JtdWxhKXtpZihudWxs''@;'; put 'put ''IT0oYnQ9bnIubWF0Y2goc2UpKSYmIiIhPT1idFsxXSl7aWYobm4uZj1DaShXbihidFsxXSkpLnJlcGxhY2UoL1xyXG4vZywiXG4iKSxCZS54bGZufHwobm4uZj1yVihubi5mKSksYnRbMF0uaW5kZXhPZigndD0iYXJyYXkiJyk+LTEpbm4uRj0obnIubWF0Y2goUCl8fFtdKVsxXSxubi5GLmlu''@;'; put 'put ''ZGV4T2YoIjoiKT4tMSYma3IucHVzaChbeXQobm4uRiksbm4uRl0pO2Vsc2UgaWYoYnRbMF0uaW5kZXhPZigndD0ic2hhcmVkIicpPi0xKXtncj1YcihidFswXSk7dmFyIFBjPUNpKFduKGJ0WzFdKSk7QmUueGxmbnx8KFBjPXJWKFBjKSksRG5bcGFyc2VJbnQoZ3Iuc2ksMTApXT1bZ3IsUGMs''@;'; put 'put ''YXIucl19fWVsc2UoYnQ9bnIubWF0Y2goLzxmW14+XSpcLz4vKSkmJkRuWyhncj1YcihidFswXSkpLnNpXSYmKG5uLmY9RFEoRG5bZ3Iuc2ldWzFdLERuW2dyLnNpXVsyXSxhci5yKSk7dmFyIHhuPUlzKGFyLnIpO2ZvcihWdD0wO1Z0PGtyLmxlbmd0aDsrK1Z0KXhuLnI+PWtyW1Z0XVswXS5z''@;'; put 'put ''LnImJnhuLnI8PWtyW1Z0XVswXS5lLnImJnhuLmM+PWtyW1Z0XVswXS5zLmMmJnhuLmM8PWtyW1Z0XVswXS5lLmMmJihubi5GPWtyW1Z0XVsxXSl9aWYobnVsbD09YXIudCYmdm9pZCAwPT09bm4udilpZihubi5mfHxubi5GKW5uLnY9MCxubi50PSJuIjtlbHNle2lmKCFiaSljb250aW51ZTtu''@;'; put 'put ''bi50PSJ6In1lbHNlIG5uLnQ9YXIudHx8Im4iO3N3aXRjaChaZS5zLmM+a24mJihaZS5zLmM9a24pLFplLmUuYzxrbiYmKFplLmUuYz1rbiksbm4udCl7Y2FzZSJuIjppZigiIj09bm4udnx8bnVsbD09bm4udil7aWYoIWJpKWNvbnRpbnVlO25uLnQ9InoifWVsc2Ugbm4udj1wYXJzZUZsb2F0''@;'; put 'put ''KG5uLnYpO2JyZWFrO2Nhc2UicyI6aWYodHlwZW9mIG5uLnY+InUiKXtpZighYmkpY29udGludWU7bm4udD0ieiJ9ZWxzZSBzcj1IOVtwYXJzZUludChubi52LDEwKV0sbm4udj1zci50LG5uLnI9c3Iucixzci5SJiYobm4uUj1zci5SKSxObyYmKG5uLmg9c3IuaCk7YnJlYWs7Y2FzZSJzdHIi''@;'; put 'put ''Om5uLnQ9InMiLG5uLnY9bnVsbCE9bm4udj9Xbihubi52KToiIixObyYmKG5uLmg9JGkobm4udikpO2JyZWFrO2Nhc2UiaW5saW5lU3RyIjpidD1uci5tYXRjaChUKSxubi50PSJzIixudWxsIT1idCYmKHNyPUVzKGJ0WzFdKSk/KG5uLnY9c3IudCxzci5SJiYobm4uUj1zci5SKSxObyYmKG5u''@;'; put 'put ''Lmg9c3IuaCkpOm5uLnY9IiI7YnJlYWs7Y2FzZSJiIjpubi52PVRpKG5uLnYpO2JyZWFrO2Nhc2UiZCI6QmUuY2VsbERhdGVzP25uLnY9bG4obm4udiwxKToobm4udj1LZShsbihubi52LDEpKSxubi50PSJuIik7YnJlYWs7Y2FzZSJlIjohMSE9PUJlLmNlbGxUZXh0JiYobm4udz1ubi52KSxu''@;'; put 'put ''bi52PUgxW25uLnZdfWlmKFlhKXtxbj1faT1PaT1zbz0wLExpPW51bGwsbW8mJnZvaWQgMCE9PWFyLnMmJm51bGwhPShMaT1tdC5DZWxsWGZbYXIuc10pJiYobnVsbCE9TGkubnVtRm10SWQmJihxbj1MaS5udW1GbXRJZCksQmUuY2VsbFN0eWxlcyYmKG51bGwhPUxpLmZpbGxJZCYmKF9pPUxp''@;'; put 'put ''LmZpbGxJZCksbnVsbCE9TGkuZm9udElkJiYoT2k9TGkuZm9udElkKSxudWxsIT1MaS5ib3JkZXJJZCYmKHNvPUxpLmJvcmRlcklkKSkpO3RyeXtGayhubixxbixfaSxPaSxzbyxCZSwwLG10KX1jYXRjaHt9QmUuY2VsbFN0eWxlcyYmbm4ucyYmKExpJiZMaS5hbGlnbm1lbnQmJihubi5zLmFs''@;'; put 'put ''aWdubWVudD1RcihMaS5hbGlnbm1lbnQpKSxMaSYmTGkucHJvdGVjdGlvbiYmKG51bGwhPUxpLnByb3RlY3Rpb24uaGlkZGVuJiYobm4ucy5oaWRkZW49TGkucHJvdGVjdGlvbi5oaWRkZW4pLG51bGwhPUxpLnByb3RlY3Rpb24uZWRpdGFibGUmJihubi5zLmVkaXRhYmxlPUxpLnByb3RlY3Rp''@;'; put 'put ''b24uZWRpdGFibGUpKSxMaSYmTGkuc3R5bGUmJihubi5zLnN0eWxlPUxpLnN0eWxlKSksQmUuY2VsbERhdGVzJiZtbyYmIm4iPT1ubi50JiZJLmlzX2RhdGUoSS5fdGFibGVbcW5dKSYmKG5uLnQ9ImQiLG5uLnY9JHQobm4udikpfXZhciB4bDtCZS5ub2RpbSYmKHhsPUlzKGFyLnIpLFplLnMu''@;'; put 'put ''cj54bC5yJiYoWmUucy5yPXhsLnIpLFplLmUucjx4bC5yJiYoWmUuZS5yPXhsLnIpKSxCZS5jYWxsYmFjaz8oeGw9SXMoYXIuciksU2Eucm93W3hsLmNdPW5uKTpPcj8oTmVbKHhsPUlzKGFyLnIpKS5yXXx8KE5lW3hsLnJdPVtdKSxOZVt4bC5yXVt4bC5jXT1ubik6TmVbYXIucl09bm59QmUu''@;'; put 'put ''Y2FsbGJhY2smJkJlLmNhbGxiYWNrKFNhKX19fWJpJiYhQmUuY2FsbGJhY2smJk95KDAsbXQpLF9yLmxlbmd0aD4wJiYoTmVbIiFyb3dzIl09X3IpfX0oKSxaVj1Wcigid29ya3NoZWV0IixudWxsLHt4bWxuczpVYS5tYWluWzBdLCJ4bWxuczpyIjpVYS5yLCJ4bWxuczp4MTRhYyI6Imh0dHA6''@;'; put 'put ''Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAwOS85L2FjIiwieG1sbnM6bWMiOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvbWFya3VwLWNvbXBhdGliaWxpdHkvMjAwNiIsIm1jOklnbm9yYWJsZSI6IngxNGFjIn0pO2Z1bmN0aW9uIGpT''@;'; put 'put ''KGQsXyxtLFQpe3ZhciBzZSxQPVtwbyxaVl0sb2U9IiIsZGU9bS5TaGVldHNbbS5TaGVldE5hbWVzW2RdXTtudWxsPT1kZSYmKGRlPXt9KTt2YXIgTGU9ZGVbIiFyZWYiXXx8IkExIixOZT15dChMZSk7aWYoTmUuZS5jPjE2MzgzfHxOZS5lLnI+MTA0ODU3NSl7aWYoXy5XVEYpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJSYW5nZSAiK0xlKyIgZXhjZWVkcyBmb3JtYXQgbGltaXQgQTE6WEZEMTA0ODU3NiIpO05lLmUuYz1NYXRoLm1pbihOZS5lLmMsMTYzODMpLE5lLmUucj1NYXRoLm1pbihOZS5lLmMsMTA0ODU3NSksTGU9aHQoTmUpfVR8fChUPXt9KSxkZVsiIWNvbW1lbnRzIl09W107dmFyIEJl''@;'; put 'put ''PVtdLFplPWRlWyIhcHJpbnQiXTtpZihmdW5jdGlvbiBIUyhkLF8sbSxULFApe3ZhciBRPSExLHNlPXt9LG9lPW51bGw7aWYoInhsc3giIT09VC5ib29rVHlwZSYmXy52YmFyYXcpe3ZhciBkZT1fLlNoZWV0TmFtZXNbbV07dHJ5e18uV29ya2Jvb2smJihkZT1fLldvcmtib29rLlNoZWV0c1tt''@;'; put 'put ''XS5Db2RlTmFtZXx8ZGUpfWNhdGNoe31RPSEwLHNlLmNvZGVOYW1lPUJpKGRlKX1kJiZkWyIhY29uZGZtdCJdJiYoc2UuZW5hYmxlRm9ybWF0Q29uZGl0aW9uc0NhbGN1bGF0aW9uPSIxIiksZCYmZFsiIXRhYmNvbG9yIl0mJihvZT0ob2V8fCIiKSsnPHRhYkNvbG9yIHJnYj0iRkYnK1QyKGRb''@;'; put 'put ''IiF0YWJjb2xvciJdLnJnYikrJyIvPicpO3ZhciBMZT0hMSxOZT17fTtpZigoKChkfHx7fSlbIiFwcmludCJdfHx7fSkucHJvcHN8fHt9KS5maXQmJihMZT0hMCxOZS5maXRUb1BhZ2U9MSksTGUmJihvZT0ob2V8fCIiKStWcigicGFnZVNldFVwUHIiLG51bGwsTmUpKSxkJiZkWyIhb3V0bGlu''@;'; put 'put ''ZSJdKXt2YXIgQmU9e3N1bW1hcnlCZWxvdzoxLHN1bW1hcnlSaWdodDoxfTtkWyIhb3V0bGluZSJdLmFib3ZlJiYoQmUuc3VtbWFyeUJlbG93PTApLGRbIiFvdXRsaW5lIl0ubGVmdCYmKEJlLnN1bW1hcnlSaWdodD0wKSxvZT0ob2V8fCIiKStWcigib3V0bGluZVByIixudWxsLEJlKX0hUSYm''@;'; put 'put ''IW9lfHwoUFtQLmxlbmd0aF09VnIoInNoZWV0UHIiLG9lLHNlKSl9KGRlLG0sZCxfLFApLFBbUC5sZW5ndGhdPVZyKCJkaW1lbnNpb24iLG51bGwse3JlZjpMZX0pLFBbUC5sZW5ndGhdPWZ1bmN0aW9uIERKKGQsXyxtLFQpe3ZhciBQPXt3b3JrYm9va1ZpZXdJZDoiMCJ9O2lmKCgoKFR8fHt9''@;'; put 'put ''KS5Xb3JrYm9va3x8e30pLlZpZXdzfHxbXSkubGVuZ3RoKXt2YXIgUT1ULldvcmtib29rLlZpZXdzLHNlPVFbbV18fFFbMF07UC5yaWdodFRvTGVmdD1zZS5SVEw/IjEiOiIwIixzZS56b29tJiYoUC56b29tU2NhbGU9c2Uuem9vbSksbnVsbCE9c2UuZ3JpZCYmKFAuc2hvd0dyaWRMaW5lcz1z''@;'; put 'put ''ZS5ncmlkKSxzZS52aWV3JiYoUC52aWV3PXNlLnZpZXcpfW51bGwhPWRbIiFncmlkbGluZXMiXSYmKFAuc2hvd0dyaWRMaW5lcz0hIWRbIiFncmlkbGluZXMiXSk7dmFyIG9lPSIiLGRlPXtyOjAsYzowfTtpZihkWyIhc2VsIl0pe2lmKCEoZGU9ZFsiIXNlbCJdLmNlbGwpKXtpZighZFsiIXNl''@;'; put 'put ''bCJdLnJhbmdlKXRocm93IG5ldyBFcnJvcigiTXVzdCBzcGVjaWZ5IGEgc2VsZWN0aW9uIGNlbGwgb3IgcmFuZ2UiKTtkZT16YShkWyIhc2VsIl0ucmFuZ2UucmVwbGFjZSgvXHMuKiQvLCIiKSkuc30ic3RyaW5nIj09dHlwZW9mIGRlJiYoZGU9SXMoZGUpKX12YXIgTmU9ZFsiIWZyZWV6ZSJd''@;'; put 'put ''PyJzdHJpbmciPT10eXBlb2YgZFsiIWZyZWV6ZSJdP0lzKGRbIiFmcmVlemUiXSk6ZFsiIWZyZWV6ZSJdOntjOjAscjowfTtpZihkWyIhZnJlZXplIl0pe3ZhciBCZT1xaShOZSksWmU9e3N0YXRlOiJmcm96ZW4iLHhTcGxpdDpOZS5jLHlTcGxpdDpOZS5yLHRvcExlZnRDZWxsOkJlfTtkWyIh''@;'; put 'put ''c2VsIl0mJihaZS5hY3RpdmVQYW5lPShkZS5yPj1OZS5yJiZOZS5yPjA/ImJvdHRvbSI6InRvcCIpKyhkZS5jPj1OZS5jJiZOZS5jPjA/IlJpZ2h0IjoiTGVmdCIpKSxvZT1WcigicGFuZSIsbnVsbCxaZSl9aWYoZFsiIXNlbCJdKXt2YXIgbnQ9e2FjdGl2ZUNlbGw6InN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBkZT9kZTpxaShkZSl9O250LnNxcmVmPWRbIiFzZWwiXS5yYW5nZT9kWyIhc2VsIl0ucmFuZ2U6bnQuYWN0aXZlQ2VsbCsiOiIrbnQuYWN0aXZlQ2VsbCxvZSs9VnIoInNlbGVjdGlvbiIsbnVsbCxudCksZFsiIWZyZWV6ZSJdJiYoTmUuYz4wJiYobnQucGFuZT0idG9wUmlnaHQiLG9lKz1W''@;'; put 'put ''cigic2VsZWN0aW9uIixudWxsLG50KSksTmUucj4wJiYobnQucGFuZT0iYm90dG9tTGVmdCIsb2UrPVZyKCJzZWxlY3Rpb24iLG51bGwsbnQpKSxOZS5jPjAmJk5lLnI+MCYmKG50LnBhbmU9ImJvdHRvbVJpZ2h0IixvZSs9VnIoInNlbGVjdGlvbiIsbnVsbCxudCkpKX1yZXR1cm4gVnIoInNo''@;'; put 'put ''ZWV0Vmlld3MiLFZyKCJzaGVldFZpZXciLG9lfHxudWxsLFApLHt9KX0oZGUsMCxkLG0pLF8uc2hlZXRGb3JtYXQpe3ZhciBudD17ZGVmYXVsdFJvd0hlaWdodDpfLnNoZWV0Rm9ybWF0LmRlZmF1bHRSb3dIZWlnaHR8fCIxNiIsYmFzZUNvbFdpZHRoOl8uc2hlZXRGb3JtYXQuYmFzZUNvbFdp''@;'; put 'put ''ZHRofHwiMTAifTtudWxsIT1fLnNoZWV0Rm9ybWF0Lm91dGxpbmVMZXZlbFJvdyYmKG50Lm91dGxpbmVMZXZlbFJvdz1fLnNoZWV0Rm9ybWF0Lm91dGxpbmVMZXZlbFJvdyksUFtQLmxlbmd0aF09VnIoInNoZWV0Rm9ybWF0UHIiLG51bGwsbnQpfWVsc2UgaWYoZGVbIiFzaGVldEZvcm1hdCJd''@;'; put 'put ''KXt2YXIgbXQ9e30sUWU9ITE7ZGVbIiFzaGVldEZvcm1hdCJdLnJvdyYmKGRlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB0PyhRZT0hMCxtdC5kZWZhdWx0Um93SGVpZ2h0PWRlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB0LG10LmN1c3RvbUhlaWdodD0xKTpkZVsiIXNoZWV0Rm9ybWF0Il0ucm93''@;'; put 'put ''LmhweD8oUWU9ITAsbXQuZGVmYXVsdFJvd0hlaWdodD1iOChkZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhweCksbXQuY3VzdG9tSGVpZ2h0PTEpOigwPT09ZGVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHR8fDA9PT1kZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhweHx8ZGVbIiFzaGVldEZvcm1hdCJd''@;'; put 'put ''LnJvdy5oaWRkZW4pJiYoUWU9ITAsbXQuZGVmYXVsdFJvd0hlaWdodD1tdC5kZWZhdWx0Um93SGVpZ2h0fHwxNixtdC5jdXN0b21IZWlnaHQ9MSxtdC56ZXJvSGVpZ2h0PTEpLGRlWyIhc2hlZXRGb3JtYXQiXS5keURlc2NlbnQmJihtdFsieDE0YWM6ZHlEZXNjZW50Il09ZGVbIiFzaGVldEZv''@;'; put 'put ''cm1hdCJdLmR5RGVzY2VudCkpLGRlWyIhc2hlZXRGb3JtYXQiXS5jb2wmJihkZVsiIXNoZWV0Rm9ybWF0Il0uY29sLndjaHx8QjAoZGVbIiFzaGVldEZvcm1hdCJdLmNvbCksbXQuZGVmYXVsdENvbFdpZHRoPWRlWyIhc2hlZXRGb3JtYXQiXS5jb2wud2NoKzUvc2R8fDAsUWU9ITApLG51bGw9''@;'; put 'put ''PW10LmRlZmF1bHRSb3dIZWlnaHQmJihtdC5kZWZhdWx0Um93SGVpZ2h0PTE2KSxudWxsPT1tdC5kZWZhdWx0Q29sV2lkdGgmJihtdC5kZWZhdWx0Q29sV2lkdGg9MTApLG10Lm91dGxpbmVMZXZlbFJvdz1tdC5vdXRsaW5lTGV2ZWxSb3d8fDcsUWUmJihQW1AubGVuZ3RoXT1Wcigic2hlZXRG''@;'; put 'put ''b3JtYXRQciIsbnVsbCxtdCkpfW51bGwhPWRlWyIhY29scyJdJiZkZVsiIWNvbHMiXS5sZW5ndGg+MCYmKFBbUC5sZW5ndGhdPWZ1bmN0aW9uIENKKGQsXyxtKXtmb3IodmFyIFAsVD1bIjxjb2xzPiJdLFE9MDtRIT1fLmxlbmd0aDsrK1EpaWYoUD1fW1FdKXtpZihQLmF1dG8mJnhWKGQsUCxR''@;'; put 'put ''KSxQLnN8fFAueil7dmFyIHNlPXt0OiJ6In07bnVsbCE9UC5zJiYoc2Uucz1QLnMpLG51bGwhPVAueiYmKHNlLno9UC56KSxQLnN0eWxlPUEyKG0uY2VsbFhmcyxtLmNlbGxTdHlsZVhmcyxzZSxtKX1UW1QubGVuZ3RoXT1WcigiY29sIixudWxsLE9rKFEsUCkpfXJldHVybiBUW1QubGVuZ3Ro''@;'; put 'put ''XT0iPC9jb2xzPiIsVC5qb2luKCIiKX0oZGUsZGVbIiFjb2xzIl0sXykpLFBbc2U9UC5sZW5ndGhdPSI8c2hlZXREYXRhLz4iLGRlWyIhbGlua3MiXT1bXSxudWxsIT1kZVsiIXJlZiJdJiYob2U9ZnVuY3Rpb24gT0ooZCxfKXt2YXIgZGUsZnQsUD1bXSxRPVtdLHNlPXl0KGRbIiFyZWYiXSks''@;'; put 'put ''b2U9IiIsTGU9IiIsTmU9W10sQmU9MCxaZT0wLG50PWRbIiFyb3dzIl0sbXQ9QXJyYXkuaXNBcnJheShkKSxRZT17cjpMZX0sa3Q9LTE7Zm9yKFplPXNlLnMuYztaZTw9c2UuZS5jOysrWmUpTmVbWmVdPW1zKFplKTtmb3IoQmU9c2Uucy5yO0JlPD1zZS5lLnI7KytCZSl7Zm9yKFE9W10sTGU9''@;'; put 'put ''em8oQmUpLFplPXNlLnMuYztaZTw9c2UuZS5jOysrWmUpe2RlPU5lW1plXStMZTt2YXIgYnQ9bXQ/KGRbQmVdfHxbXSlbWmVdOmRbZGVdO3ZvaWQgMCE9PWJ0JiZudWxsIT0ob2U9WVYoYnQsZGUsZCxfKSkmJlEucHVzaChvZSl9KFEubGVuZ3RoPjB8fG50JiZudFtCZV0pJiYoUWU9e3I6TGV9''@;'; put 'put ''LG50JiZudFtCZV0mJigoZnQ9bnRbQmVdKS5oaWRkZW4mJihRZS5oaWRkZW49MSksa3Q9LTEsZnQuaHB4P2t0PWI4KGZ0LmhweCk6ZnQuaHB0JiYoa3Q9ZnQuaHB0KSxrdD4tMSYmKFFlLmh0PWt0LFFlLmN1c3RvbUhlaWdodD0xKSxmdC5sZXZlbCYmKFFlLm91dGxpbmVMZXZlbD1mdC5sZXZl''@;'; put 'put ''bCksZnQuZHlEZXNjZW50JiYoUWVbIngxNGFjOmR5RGVzY2VudCJdPWZ0LmR5RGVzY2VudCksZnQucyYmKFFlLnM9QTIoXy5jZWxsWGZzLF8uY2VsbFN0eWxlWGZzLHt0OiJ6IixzOmZ0LnN9LF8pLFFlLmN1c3RvbUZvcm1hdD0xKSksUFtQLmxlbmd0aF09VnIoInJvdyIsUS5qb2luKCIiKSxR''@;'; put 'put ''ZSkpfWlmKG50KWZvcig7QmU8bnQubGVuZ3RoOysrQmUpbnQmJm50W0JlXSYmKFFlPXtyOkJlKzF9LChmdD1udFtCZV0pLmhpZGRlbiYmKFFlLmhpZGRlbj0xKSxrdD0tMSxmdC5ocHg/a3Q9YjgoZnQuaHB4KTpmdC5ocHQmJihrdD1mdC5ocHQpLGt0Pi0xJiYoUWUuaHQ9a3QsUWUuY3VzdG9t''@;'; put 'put ''SGVpZ2h0PTEpLGZ0LmxldmVsJiYoUWUub3V0bGluZUxldmVsPWZ0LmxldmVsKSxQW1AubGVuZ3RoXT1Wcigicm93IiwiIixRZSkpO3JldHVybiBQLmpvaW4oIiIpfShkZSxfKSxvZS5sZW5ndGg+MCYmKFBbUC5sZW5ndGhdPW9lKSksUC5sZW5ndGg+c2UrMSYmKFBbUC5sZW5ndGhdPSI8L3No''@;'; put 'put ''ZWV0RGF0YT4iLFBbc2VdPVBbc2VdLnJlcGxhY2UoIi8+IiwiPiIpKSxkZVsiIXByb3RlY3QiXSYmKFBbUC5sZW5ndGhdPWZ1bmN0aW9uIEhnKGQpe3ZhciBfPXtzaGVldDoxfTtyZXR1cm4gVlYuZm9yRWFjaChmdW5jdGlvbihtKXtudWxsIT1kW21dJiZkW21dJiYoX1ttXT0iMSIpfSksazIu''@;'; put 'put ''Zm9yRWFjaChmdW5jdGlvbihtKXtudWxsIT1kW21dJiYhZFttXSYmKF9bbV09IjAiKX0pLGQucGFzc3dvcmQ/Xy5wYXNzd29yZD1WQShkLnBhc3N3b3JkKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTpkLmVuY3J5cHRpb24mJihfLmFsZ29yaXRobU5hbWU9ZC5lbmNyeXB0aW9uLmFsZ28s''@;'; put 'put ''Xy5oYXNoVmFsdWU9ZC5lbmNyeXB0aW9uLmhhc2gsXy5zYWx0VmFsdWU9ZC5lbmNyeXB0aW9uLnNhbHQsXy5zcGluQ291bnQ9ZC5lbmNyeXB0aW9uLnNwaW4pLFZyKCJzaGVldFByb3RlY3Rpb24iLG51bGwsXyl9KGRlWyIhcHJvdGVjdCJdKSksbnVsbCE9ZGVbIiFhdXRvZmlsdGVyIl0mJihQ''@;'; put 'put ''W1AubGVuZ3RoXT1mdW5jdGlvbiBTSihkLF8sbSxUKXt2YXIgUD0ic3RyaW5nIj09dHlwZW9mIGQucmVmP2QucmVmOmh0KGQucmVmKTttLldvcmtib29rfHwobS5Xb3JrYm9vaz17U2hlZXRzOltdfSksbS5Xb3JrYm9vay5OYW1lc3x8KG0uV29ya2Jvb2suTmFtZXM9W10pO3ZhciBRPW0uV29y''@;'; put 'put ''a2Jvb2suTmFtZXMsc2U9emEoUCk7c2Uucy5yPT1zZS5lLnImJihzZS5lLnI9emEoX1siIXJlZiJdKS5lLnIsUD1odChzZSkpO2Zvcih2YXIgb2U9MDtvZTxRLmxlbmd0aDsrK29lKXt2YXIgZGU9UVtvZV07aWYoIl94bG5tLl9GaWx0ZXJEYXRhYmFzZSI9PWRlLk5hbWUmJmRlLlNoZWV0PT1U''@;'; put 'put ''KXtkZS5SZWY9IiciK20uU2hlZXROYW1lc1tUXSsiJyEiK1A7YnJlYWt9fXJldHVybiBvZT09US5sZW5ndGgmJlEucHVzaCh7TmFtZToiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIixTaGVldDpULFJlZjoiJyIrbS5TaGVldE5hbWVzW1RdKyInISIrUH0pLFZyKCJhdXRvRmlsdGVyIixudWxsLHty''@;'; put 'put ''ZWY6UH0pfShkZVsiIWF1dG9maWx0ZXIiXSxkZSxtLGQpKSxudWxsIT1kZVsiIW1lcmdlcyJdJiZkZVsiIW1lcmdlcyJdLmxlbmd0aD4wJiYoUFtQLmxlbmd0aF09ZnVuY3Rpb24gUlYoZCl7aWYoMD09PWQubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgXz0nPG1lcmdlQ2VsbHMgY291bnQ9Iicr''@;'; put 'put ''ZC5sZW5ndGgrJyI+JyxtPTA7bSE9ZC5sZW5ndGg7KyttKV8rPSc8bWVyZ2VDZWxsIHJlZj0iJytodChkW21dKSsnIi8+JztyZXR1cm4gXysiPC9tZXJnZUNlbGxzPiJ9KGRlWyIhbWVyZ2VzIl0pKSxkZVsiIWNvbmRmbXQiXSYmKFBbUC5sZW5ndGhdPWZ1bmN0aW9uIGtKKGQsXyl7cmV0dXJu''@;'; put 'put ''IGQubWFwKGZ1bmN0aW9uKG0sVCl7cmV0dXJuIGZ1bmN0aW9uIEFKKGQsXyxtKXt2YXIgVD1kLnM/TmsobS5EWEYsZC5zKTotMSxQPSJzdHJpbmciPT10eXBlb2YgZC5yZWY/ZC5yZWY6aHQoZC5yZWYpLHNlPXl0KFAucmVwbGFjZSgvXHMuKiQvLCIiKSkucztzZS5yPDAmJihzZS5yPTApLHNl''@;'; put 'put ''LmM8MCYmKHNlLmM9MCk7dmFyIG9lPSIiLGRlPXtwcmlvcml0eTpfKzF9O3N3aXRjaChUPi0xJiYoZGUuZHhmSWQ9VCksZC50KXtjYXNlInVuaXF1ZSI6ZGUudHlwZT0idW5pcXVlVmFsdWVzIjticmVhaztjYXNlImR1cCI6ZGUudHlwZT0iZHVwbGljYXRlVmFsdWVzIjticmVhaztjYXNlImJs''@;'; put 'put ''YW5rIjpkZS50eXBlPShkLnY/ImMiOiJub3RDIikrIm9udGFpbnNCbGFua3MiLG9lPSI8Zm9ybXVsYT5MRU4oVFJJTSgiK3FpKHNlKSsiKSkiKyhkLnY/Ij0iOiImZ3Q7IikrIjA8L2Zvcm11bGE+IjticmVhaztjYXNlImVycm9yIjpkZS50eXBlPShkLnY/ImMiOiJub3RDIikrIm9udGFpbnNF''@;'; put 'put ''cnJvcnMiO2JyZWFrO2Nhc2UiZm9ybXVsYSI6ZGUudHlwZT0iZXhwcmVzc2lvbiIsb2U9VnIoImZvcm11bGEiLEJpKGQuZikse30pO2JyZWFrO2Nhc2UiZGF0ZSI6ZGUudHlwZT0idGltZVBlcmlvZCIsZGUudGltZVBlcmlvZD14SltkLm9wXTticmVhaztjYXNlInRleHQiOnN3aXRjaChkZS50''@;'; put 'put ''eXBlPWRlLm9wZXJhdG9yPVlrW2Qub3BdLGRlLnRleHQ9ZC52LGQub3Ape2Nhc2UiSU4iOm9lPSc8Zm9ybXVsYT5OT1QoSVNFUlJPUihTRUFSQ0goIicrQmkoZC52KSsnIiwnK3FpKHNlKSsiKSkpPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJPVCI6b2U9Jzxmb3JtdWxhPklTRVJST1IoU0VBUkNI''@;'; put 'put ''KCInK0JpKGQudikrJyIsJytxaShzZSkrIikpPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJTVCI6b2U9Ijxmb3JtdWxhPkxFRlQoIitxaShzZSkrJyxMRU4oIicrQmkoZC52KSsnIikpPSInK0JpKGQudikrJyI8L2Zvcm11bGE+JzticmVhaztjYXNlIk5EIjpvZT0iPGZvcm11bGE+UklHSFQoIitx''@;'; put 'put ''aShzZSkrJyxMRU4oIicrQmkoZC52KSsnIikpPSInK0JpKGQudikrJyI8L2Zvcm11bGE+J31icmVhaztjYXNlInZhbCI6ZGUudHlwZT0iY2VsbElzIixkZS5vcGVyYXRvcj13M1tkLm9wXSxvZT1udWxsIT1kLm1pbj9WcigiZm9ybXVsYSIsQmkoU3RyaW5nKGQubWluKSkse30pK1ZyKCJmb3Jt''@;'; put 'put ''dWxhIixCaShTdHJpbmcoZC5tYXgpKSx7fSk6VnIoImZvcm11bGEiLEJpKG51bGwhPWQudj9TdHJpbmcoInN0cmluZyI9PXR5cGVvZiBkLnY/JyInK2Qudi5yZXBsYWNlKC8iL2csJyIiJykrJyInOmQudik6ZC5mKSx7fSk7YnJlYWs7Y2FzZSJhdmciOnN3aXRjaChkZS50eXBlPSJhYm92ZUF2''@;'; put 'put ''ZXJhZ2UiLGRlLmFib3ZlQXZlcmFnZT0iTCI9PWQub3AuY2hhckF0KDApPyIwIjoiMSIsZC5vcC5jaGFyQXQoMSkpe2Nhc2UiVCI6ZGUuZXF1YWxBdmVyYWdlPSIwIjticmVhaztjYXNlIkUiOmRlLmVxdWFsQXZlcmFnZT0iMSI7YnJlYWs7ZGVmYXVsdDpkZS5zdGREZXY9ZC5vcC5jaGFyQXQo''@;'; put 'put ''MSl9YnJlYWs7Y2FzZSJyYW5rIjpkZS50eXBlPSJ0b3AxMCIsZGUuYm90dG9tPSJCIj09ZC5vcC5jaGFyQXQoMCk/IjEiOiIwIixkZS5wZXJjZW50PSJQIj09ZC5vcC5jaGFyQXQoMSk/IjEiOiIwIixkZS5yYW5rPWQudjticmVhaztjYXNlImljb24iOmRlLnR5cGU9Imljb25TZXQiO3ZhciBM''@;'; put 'put ''ZT17aWNvblNldDpkLnYscGVyY2VudDpkLnBjdD8idHJ1ZSI6ImZhbHNlIn07ZC5yZXYmJihMZS5yZXZlcnNlPSJ0cnVlIiksZC5oaWRkZW4mJihMZS5zaG93VmFsdWU9ImZhbHNlIiksb2U9VnIoImljb25TZXQiLGQudGhyZXNoLm1hcChOOCkuam9pbigiIiksTGUpO2JyZWFrO2Nhc2Uic2Nh''@;'; put 'put ''bGUiOmRlLnR5cGU9ImNvbG9yU2NhbGUiLG9lKz1OOChkLmNtaW4pLGQuY21pZCYmKG9lKz1OOChkLmNtaWQpKSxvZSs9TjgoZC5jbWF4KSxvZSs9UGcoZC5jbWluLmNvbG9yKSxkLmNtaWQmJihvZSs9UGcoZC5jbWlkLmNvbG9yKSksb2U9VnIoImNvbG9yU2NhbGUiLG9lKz1QZyhkLmNtYXgu''@;'; put 'put ''Y29sb3IpLHt9KTticmVhaztjYXNlImJhciI6ZGUudHlwZT0iZGF0YUJhciIsb2UrPU44KGQuY21pbiksb2UrPU44KGQuY21heCksb2U9VnIoImRhdGFCYXIiLG9lKz1QZyhkLmNvbG9yKSx7fSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBjb25zb2xlLmxvZyhkKSwiQ0YgbWlzc2luZyB0eXBlICIr''@;'; put 'put ''ZC50fXJldHVybic8Y29uZGl0aW9uYWxGb3JtYXR0aW5nIHNxcmVmPSInK1ArJyI+JytWcigiY2ZSdWxlIiwiIj09b2U/bnVsbDpvZSxkZSkrIjwvY29uZGl0aW9uYWxGb3JtYXR0aW5nPiJ9KG0sVCxfKX0pLmpvaW4oIiIpfShkZVsiIWNvbmRmbXQiXSxfKSksZGVbIiF2YWxpZGF0aW9ucyJd''@;'; put 'put ''JiYoUFtQLmxlbmd0aF09ZnVuY3Rpb24gelYoZCl7aWYoIWR8fDA9PWQubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgXz1bXSxtPTAsVD0wO1Q8ZC5sZW5ndGg7KytUKXt2YXIgUD1kW1RdLFE9VVZbUC50XTtpZihQLnJlZiYmKCJzdHJpbmciIT10eXBlb2YgUC5yZWZ8fC0xIT1QLnJlZi5pbmRl''@;'; put 'put ''eE9mKCIgIil8fChQLnJlZj15dChQLnJlZiksUC5yZWYucyYmIShQLnJlZi5zLmM8MCkpKSl7KyttO3ZhciBzZT17dHlwZTpRLGFsbG93Qmxhbms6KygwIT1QLmJsYW5rKSxzaG93SW5wdXRNZXNzYWdlOisoMCE9UC5pbnB1dCksc2hvd0Vycm9yTWVzc2FnZTorKDAhPVAuZXJyb3IpLHNxcmVm''@;'; put 'put ''OiJzdHJpbmciPT10eXBlb2YgUC5yZWY/UC5yZWY6aHQoUC5yZWYpfTtpZihQLmlucHV0JiYoUC5pbnB1dC50aXRsZSYmKHNlLnByb21wdFRpdGxlPXRhKFAuaW5wdXQudGl0bGUpKSxQLmlucHV0Lm1lc3NhZ2UmJihzZS5wcm9tcHQ9dGEoUC5pbnB1dC5tZXNzYWdlKSkpLFAuZXJyb3ImJihQ''@;'; put 'put ''LmVycm9yLnRpdGxlJiYoc2UuZXJyb3JUaXRsZT10YShQLmVycm9yLnRpdGxlKSksUC5lcnJvci5tZXNzYWdlJiYoc2UuZXJyb3I9dGEoUC5lcnJvci5tZXNzYWdlKSksUC5lcnJvci5zdHlsZSYmKHNlLmVycm9yU3R5bGU9UC5lcnJvci5zdHlsZSkpLCFRKXRocm93IG5ldyBFcnJvcigiQmFk''@;'; put 'put ''IHZhbGlkYXRpb246IHVucmVjb2duaXplZCB0eXBlICIrUC50KTt2YXIgb2U9IiI7c3dpdGNoKFAudCl7Y2FzZSJBbnkiOmJyZWFrO2Nhc2UiTGlzdCI6Y2FzZSJDdXN0b20iOmlmKFAubCl7aWYoUC5sLmpvaW4oIiwiKS5sZW5ndGg+MjUwKXRocm93IG5ldyBFcnJvcigiRFYgbGVuZ3RoID4g''@;'; put 'put ''MjUwIHRyaWdnZXJzIGNvcnJ1cHRpb24gZXJyb3JzIGluIEV4Y2VsLiAgVXNlIGEgbG9va3VwIHRhYmxlIik7b2U9Jzxmb3JtdWxhMT4iJytCaShQLmwuam9pbigiLCIpKSsnIjwvZm9ybXVsYTE+J31lbHNlIG9lPSI8Zm9ybXVsYTE+IitCaShQLmYpKyI8L2Zvcm11bGExPiI7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJEYXRlIjpjYXNlIlRpbWUiOmNhc2UiRGVjaW1hbCI6Y2FzZSJMZW5ndGgiOmNhc2UiV2hvbGUiOmlmKCF3M1tQLm9wXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhIFZhbGlkYXRpb24gdHlwZSAiK1Aub3ArIiBmb3IgIitQLnQpO2lmKHNlLm9wZXJhdG9yPXczW1Aub3BdLG51bGwhPVAu''@;'; put 'put ''dilvZT0iPGZvcm11bGExPiIrQmkoU3RyaW5nKFAudiBpbnN0YW5jZW9mIERhdGU/S2UoUC52KTpQLnYpKSsiPC9mb3JtdWxhMT4iO2Vsc2V7aWYobnVsbD09UC5taW58fG51bGw9PVAubWF4KXRocm93IG5ldyBFcnJvcigiQmFkIERhdGEgVmFsaWRhdGlvbjogYHZgIG9yIGBtaW5gK2BtYXhg''@;'; put 'put ''IHJlcXVpcmVkIGZvciBUeXBlICIrUC50KTtvZT0iPGZvcm11bGExPiIrQmkoU3RyaW5nKFAubWluIGluc3RhbmNlb2YgRGF0ZT9LZShQLm1pbik6UC5taW4pKSsiPC9mb3JtdWxhMT48Zm9ybXVsYTI+IitCaShTdHJpbmcoUC5tYXggaW5zdGFuY2VvZiBEYXRlP0tlKFAubWF4KTpQLm1heCkp''@;'; put 'put ''KyI8L2Zvcm11bGEyPiJ9fV8ucHVzaChWcigiZGF0YVZhbGlkYXRpb24iLG9lfHxudWxsLHNlKSl9fXJldHVybiBtPjA/JzxkYXRhVmFsaWRhdGlvbnMgY291bnQ9IicrbSsnIj4nK18uam9pbigiIikrIjwvZGF0YVZhbGlkYXRpb25zPiI6IiJ9KGRlWyIhdmFsaWRhdGlvbnMiXSkpO3ZhciBr''@;'; put 'put ''dCxmdD0tMSxidD0tMTtpZihkZVsiIWxpbmtzIl0ubGVuZ3RoPjAmJihQW1AubGVuZ3RoXT0iPGh5cGVybGlua3M+IixkZVsiIWxpbmtzIl0uZm9yRWFjaChmdW5jdGlvbihubil7bm5bMV0uVGFyZ2V0JiYoa3Q9e3JlZjpublswXX0sIiMiIT1ublsxXS5UYXJnZXQuY2hhckF0KDApJiYoYnQ9''@;'; put 'put ''YWkoVCwtMSxCaShublsxXS5UYXJnZXQpLnJlcGxhY2UoLyMuKiQvLCIiKSx1YS5ITElOSyksa3RbInI6aWQiXT0icklkIitidCksKGZ0PW5uWzFdLlRhcmdldC5pbmRleE9mKCIjIikpPi0xJiYoa3QubG9jYXRpb249Qmkobm5bMV0uVGFyZ2V0LnNsaWNlKGZ0KzEpKSksbm5bMV0uVG9vbHRp''@;'; put 'put ''cCYmKGt0LnRvb2x0aXA9Qmkobm5bMV0uVG9vbHRpcCkpLFBbUC5sZW5ndGhdPVZyKCJoeXBlcmxpbmsiLG51bGwsa3QpKX0pLFBbUC5sZW5ndGhdPSI8L2h5cGVybGlua3M+IiksZGVsZXRlIGRlWyIhbGlua3MiXSxaZSl7dmFyIEV0PWZ1bmN0aW9uIEhWKGQpe2lmKGQucHJvcHMpe3ZhciBf''@;'; put 'put ''PXt9LG09ZC5wcm9wcztyZXR1cm4gbS5ncmlkbGluZXMmJihfLmdyaWRMaW5lcz1fLmdyaWRMaW5lc1NldD0xKSxtLmhlYWRpbmdzJiYoXy5oZWFkaW5ncz0xKSxtLmNlbnRlclgmJihfLmhvcml6b250YWxDZW50ZXJlZD0xKSxtLmNlbnRlclkmJihfLnZlcnRpY2FsQ2VudGVyZWQ9MSksVnIo''@;'; put 'put ''InByaW50T3B0aW9ucyIsbnVsbCxfKX1yZXR1cm4iIn0oWmUpO0V0Lmxlbmd0aCYmKFBbUC5sZW5ndGhdPUV0KX1pZigobnVsbCE9ZGVbIiFtYXJnaW5zIl18fFplJiZaZS5tYXJnaW5zKSYmKFBbUC5sZW5ndGhdPWZ1bmN0aW9uIGJKKGQpe3JldHVybiBMOChkKSxWcigicGFnZU1hcmdpbnMi''@;'; put 'put ''LG51bGwsZCl9KGRlWyIhbWFyZ2lucyJdfHxaZS5tYXJnaW5zKSksWmUpe3ZhciBWdD1mdW5jdGlvbiBGVihkKXtpZihkLnByb3BzKXt2YXIgXz17fSxtPWQucHJvcHM7aWYobS5vcmllbnRhdGlvbiYmKF8ub3JpZW50YXRpb249bS5vcmllbnRhdGlvbiksbS5zY2FsZSYmKF8uc2NhbGU9bS5z''@;'; put 'put ''Y2FsZSksbS5maXQmJihudWxsIT1tLmZpdC5oZWlnaHQmJihfLmZpdFRvSGVpZ2h0PW0uZml0LmhlaWdodCksbnVsbCE9bS5maXQud2lkdGgmJihfLmZpdFRvV2lkdGg9bS5maXQud2lkdGgpKSxtLmRwaSYmKF8uaG9yaXpvbnRhbERwaT1fLnZlcnRpY2FsRHBpPW0uZHBpKSxudWxsIT1tLmZp''@;'; put 'put ''cnN0JiYoXy5maXJzdFBhZ2VOdW1iZXI9bS5maXJzdCxfLnVzZUZpcnN0UGFnZU51bWJlcj0xKSxtLmJ3JiYoXy5ibGFja0FuZFdoaXRlPTEpLG0uZHJhZnQmJihfLmRyYWZ0PTEpLG0uY29tbWVudHMmJihfLmNlbGxDb21tZW50cz1Va1ttLmNvbW1lbnRzXXx8Im5vbmUiKSxtLmVycm9ycyYm''@;'; put 'put ''KF8uZXJyb3JzPU5WW20uZXJyb3JzXXx8Im5vbmUiKSxtLnBhcGVyKXN3aXRjaCh0eXBlb2YgbS5wYXBlcil7Y2FzZSJudW1iZXIiOl8ucGFwZXJTaXplPW0ucGFwZXI7YnJlYWs7Y2FzZSJzdHJpbmciOm5vW20ucGFwZXJdP18ucGFwZXJTaXplPW5vW20ucGFwZXJdOittLnBhcGVyJiYoXy5w''@;'; put 'put ''YXBlclNpemU9K20ucGFwZXIpO2JyZWFrO2Nhc2Uib2JqZWN0IjppZighbS5wYXBlci5oZWlnaHR8fCFtLnBhcGVyLndpZHRoKXRocm93IkN1c3RvbSBQYXBlciBTaXplIG11c3QgaW5jbHVkZSB3aWR0aCBhbmQgaGVpZ2h0ISI7Xy5wYXBlckhlaWdodD1tLnBhcGVyLmhlaWdodCxfLnBhcGVy''@;'; put 'put ''V2lkdGg9bS5wYXBlci53aWR0aH1yZXR1cm5bMSwhMCwidHJ1ZSIsIm92ZXIiXS5pbmRleE9mKG0ub3JkZXIpPi0xJiYoXy5wYWdlT3JkZXI9Im92ZXJUaGVuRG93biIpLFZyKCJwYWdlU2V0dXAiLG51bGwsXyl9cmV0dXJuIiJ9KFplKTtWdC5sZW5ndGgmJihQW1AubGVuZ3RoXT1WdCksVnQ9''@;'; put 'put ''ZnVuY3Rpb24gTUooZCl7dmFyIF89W10sbT0iIixUPSIiLFA9IiIsUT0iIixzZT0iIixvZT0iIixkZT0iIixMZT1LbShkLmhlYWRlcik7TGUubGVuZ3RoJiYoVD1MZVswXSxvZT1MZVsxXSxRPUxlWzJdKTt2YXIgTmU9S20oZC5mb290ZXIpO3JldHVybiBOZS5sZW5ndGgmJihQPU5lWzBdLGRl''@;'; put 'put ''PU5lWzFdLHNlPU5lWzJdKSxUJiZfLnB1c2goIjxvZGRIZWFkZXI+IitCaShUKSsiPC9vZGRIZWFkZXI+IiksUCYmXy5wdXNoKCI8b2RkRm9vdGVyPiIrQmkoUCkrIjwvb2RkRm9vdGVyPiIpLChzZSE9UHx8USE9VCkmJihtKz0nIGRpZmZlcmVudE9kZEV2ZW49IjEiJyxfLnB1c2goIjxldmVu''@;'; put 'put ''SGVhZGVyPiIrQmkoUSkrIjwvZXZlbkhlYWRlcj4iKSxfLnB1c2goIjxldmVuRm9vdGVyPiIrQmkoc2UpKyI8L2V2ZW5Gb290ZXI+IikpLChkZSE9UHx8b2UhPVQpJiYobSs9JyBkaWZmZXJlbnRGaXJzdD0iMSInLF8ucHVzaCgiPGZpcnN0SGVhZGVyPiIrQmkob2UpKyI8L2ZpcnN0SGVhZGVy''@;'; put 'put ''PiIpLF8ucHVzaCgiPGZpcnN0Rm9vdGVyPiIrQmkoZGUpKyI8L2ZpcnN0Rm9vdGVyPiIpKSxfLmxlbmd0aD8iPGhlYWRlckZvb3RlciIrbSsiPiIrXy5qb2luKCIiKSsiPC9oZWFkZXJGb290ZXI+IjoiIn0oWmUpLFZ0Lmxlbmd0aCYmKFBbUC5sZW5ndGhdPVZ0KX1pZigobnVsbCE9ZGVbIiFy''@;'; put 'put ''b3dCcmVha3MiXXx8WmUmJlplLnJvd0JyZWFrcykmJihQW1AubGVuZ3RoXT1mdW5jdGlvbiBnSihkKXtpZigwPT1kLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIF89Wyc8cm93QnJlYWtzIGNvdW50PSInK2QubGVuZ3RoKyciIG1hbnVhbEJyZWFrQ291bnQ9IicrZC5sZW5ndGgrJyI+J10sbT0w''@;'; put 'put ''O208ZC5sZW5ndGg7KyttKV8ucHVzaCgnPGJyayBpZD0iJytkW21dLlIrJyIgbWFuPSIxIi8+Jyk7cmV0dXJuIF8uam9pbigiIikrIjwvcm93QnJlYWtzPiJ9KGRlWyIhcm93QnJlYWtzIl18fFplLnJvd0JyZWFrcykpLChudWxsIT1kZVsiIWNvbEJyZWFrcyJdfHxaZSYmWmUuY29sQnJlYWtz''@;'; put 'put ''KSYmKFBbUC5sZW5ndGhdPWZ1bmN0aW9uIHZKKGQpe2lmKDA9PWQubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgXz1bJzxjb2xCcmVha3MgY291bnQ9IicrZC5sZW5ndGgrJyIgbWFudWFsQnJlYWtDb3VudD0iJytkLmxlbmd0aCsnIj4nXSxtPTA7bTxkLmxlbmd0aDsrK20pXy5wdXNoKCc8YnJr''@;'; put 'put ''IGlkPSInK2RbbV0uQysnIiBtYW49IjEiLz4nKTtyZXR1cm4gXy5qb2luKCIiKSsiPC9jb2xCcmVha3M+In0oZGVbIiFjb2xCcmVha3MiXXx8WmUuY29sQnJlYWtzKSksKCFffHxfLmlnbm9yZUVDfHxudWxsPT1fLmlnbm9yZUVDKSYmKFBbUC5sZW5ndGhdPVVvKCJpZ25vcmVkRXJyb3JzIixW''@;'; put 'put ''cigiaWdub3JlZEVycm9yIixudWxsLHtudW1iZXJTdG9yZWRBc1RleHQ6MSxzcXJlZjpMZX0pKSksZGVbIiFjaGFydHMiXSYmQmUucHVzaC5hcHBseShCZSxkZVsiIWNoYXJ0cyJdKSxkZVsiIWltYWdlcyJdJiZCZS5wdXNoLmFwcGx5KEJlLGRlWyIhaW1hZ2VzIl0pLGRlWyIhc2hhcGVzIl0m''@;'; put 'put ''JkJlLnB1c2guYXBwbHkoQmUsZGVbIiFzaGFwZXMiXSksQmUubGVuZ3RoPjAmJihidD1haShULC0xLCIuLi9kcmF3aW5ncy9kcmF3aW5nIisoZCsxKSsiLnhtbCIsdWEuRFJBVyksUFtQLmxlbmd0aF09VnIoImRyYXdpbmciLG51bGwseyJyOmlkIjoicklkIitidH0pLGRlWyIhZHJhd2luZyJd''@;'; put 'put ''PUJlKSwoZGVbIiFjb21tZW50cyJdLmxlbmd0aD4wfHwoZGVbIiFjb250cm9scyJdfHxbXSkubGVuZ3RoPjApJiYoYnQ9YWkoVCwtMSwiLi4vZHJhd2luZ3Mvdm1sRHJhd2luZyIrKGQrMSkrIi52bWwiLHVhLlZNTCksUFtQLmxlbmd0aF09VnIoImxlZ2FjeURyYXdpbmciLG51bGwseyJyOmlk''@;'; put 'put ''IjoicklkIitidH0pLGRlWyIhbGVnYWN5Il09YnQpLGRlWyIhcHJpbnQiXSYmZGVbIiFwcmludCJdLmltYWdlcyl7dmFyIHVuPWRlWyIhcHJpbnQiXS5pbWFnZXMsbnI9MDtbImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rpb24obm4pe3VuW25uXSYmWyJvZGQiLCJldmVuIiwiZmly''@;'; put 'put ''c3QiXS5mb3JFYWNoKGZ1bmN0aW9uKGFyKXt1bltubl1bYXJdJiZbImxlZnQiLCJyaWdodCIsImNlbnRlciJdLmZvckVhY2goZnVuY3Rpb24oam4pe2lmKEFycmF5LmlzQXJyYXkodW5bbm5dW2FyXVtqbl0pKWZvcih2YXIga249MDtrbjx1bltubl1bYXJdW2puXS5sZW5ndGg7Kytrbil1bltu''@;'; put 'put ''bl1bYXJdW2puXVtrbl0mJih1bltubl1bYXJdW2puXVtrbl0uX2NudD1ucisrKX0pfSl9KSxucj4wJiYoYnQ9YWkoVCwtMSwiLi4vZHJhd2luZ3Mvdm1sRHJhd2luZyIrKGQrMSkrIkhGLnZtbCIsdWEuVk1MKSxQW1AubGVuZ3RoXT1WcigibGVnYWN5RHJhd2luZ0hGIixudWxsLHsicjppZCI6''@;'; put 'put ''InJJZCIrYnR9KSxkZVsiIWxlZ2FjeUhGIl09YnQpfXJldHVybihkZVsiIXRhYmxlcyJdfHxbXSkubGVuZ3RoPjAmJihQW1AubGVuZ3RoXT0nPHRhYmxlUGFydHMgY291bnQ9IicrZGVbIiF0YWJsZXMiXS5sZW5ndGgrJyI+JyxkZVsiIXRhYmxlcyJdLmZvckVhY2goZnVuY3Rpb24obm4sYXIp''@;'; put 'put ''e2J0PWFpKFQsLTEsIi4uL3RhYmxlcy90YWJsZSIrKGQrMSkrIl8iK2FyKyIueG1sIix1YS5UQUJMRSksUFtQLmxlbmd0aF09Jzx0YWJsZVBhcnQgcjppZD0icklkJytidCsnIi8+J30pLFBbUC5sZW5ndGhdPSI8L3RhYmxlUGFydHM+IiksUC5sZW5ndGg+MSYmKFBbUC5sZW5ndGhdPSI8L3dv''@;'; put 'put ''cmtzaGVldD4iLFBbMV09UFsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUC5qb2luKCIiKX1mdW5jdGlvbiBOSihkLF8sbSxUKXt2YXIgUD1mdW5jdGlvbiBaayhkLF8sbSl7dmFyIFQ9RnIoMTQ1KSxQPShtWyIhcm93cyJdfHxbXSlbZF18fHt9O1Qud3JpdGVfc2hpZnQoNCxkKSxULndyaXRlX3No''@;'; put 'put ''aWZ0KDQsMCk7dmFyIFE9MzIwO1AuaHB4P1E9MjAqYjgoUC5ocHgpOlAuaHB0JiYoUT0yMCpQLmhwdCksVC53cml0ZV9zaGlmdCgyLFEpLFQud3JpdGVfc2hpZnQoMSwwKTt2YXIgc2U9MDtQLmxldmVsJiYoc2V8PVAubGV2ZWwpLFAuaGlkZGVuJiYoc2V8PTE2KSwoUC5ocHh8fFAuaHB0KSYm''@;'; put 'put ''KHNlfD0zMiksVC53cml0ZV9zaGlmdCgxLHNlKSxULndyaXRlX3NoaWZ0KDEsMCk7dmFyIG9lPTAsZGU9VC5sO1QubCs9NDtmb3IodmFyIExlPXtyOmQsYzowfSxOZT0wO05lPDE2OysrTmUpaWYoIShfLnMuYz5OZSsxPDwxMHx8Xy5lLmM8TmU8PDEwKSl7Zm9yKHZhciBCZT0tMSxaZT0tMSxu''@;'; put 'put ''dD1OZTw8MTA7bnQ8TmUrMTw8MTA7KytudClMZS5jPW50LChBcnJheS5pc0FycmF5KG0pPyhtW0xlLnJdfHxbXSlbTGUuY106bVtxaShMZSldKSYmKEJlPDAmJihCZT1udCksWmU9bnQpO0JlPDB8fCgrK29lLFQud3JpdGVfc2hpZnQoNCxCZSksVC53cml0ZV9zaGlmdCg0LFplKSl9dmFyIFFl''@;'; put 'put ''PVQubDtyZXR1cm4gVC5sPWRlLFQud3JpdGVfc2hpZnQoNCxvZSksVC5sPVFlLFQubGVuZ3RoPlQubD9ULnNsaWNlKDAsVC5sKTpUfShULG0sXyk7KFAubGVuZ3RoPjE3fHwoX1siIXJvd3MiXXx8W10pW1RdKSYmSWkoZCwiQnJ0Um93SGRyIixQKX12YXIgRko9anUsUEo9QmQ7ZnVuY3Rpb24g''@;'; put 'put ''bkIoZCl7cmV0dXJuW0RhKGQpLHFzKGQpLCJuIl19dmFyIHo1ZT1qdSxHSj1CZCxjQj1bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImhlYWRlciIsImZvb3RlciJdLEprPVsiQW55IiwiV2hvbGUiLCJEZWNpbWFsIiwiTGlzdCIsIkRhdGUiLCJUaW1lIiwiTGVuZ3RoIiwiQ3VzdG9t''@;'; put 'put ''Il0sUHk9WyJJTiIsIk9UIiwiRVEiLCJORSIsIkdUIiwiTFQiLCJHRSIsIkxFIl07ZnVuY3Rpb24gZWVlKGQpe3ZhciBfPUZyKDQpLG09W19dLFQ9SmsuaW5kZXhPZihkLnQpO2lmKFQ8MCl0aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWxpZGF0aW9uOiB1bnJlY29nbml6ZWQgdHlwZSAiK2QudCk7''@;'; put 'put ''dmFyIFE9UHkuaW5kZXhPZihkLm9wKTtzd2l0Y2goVCl7Y2FzZSAwOmNhc2UgMzpjYXNlIDc6UT0wO2JyZWFrO2RlZmF1bHQ6aWYoLTE9PVEpdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIitkLm9wKyIgZm9yICIrZC50KX1fLndyaXRlX3NoaWZ0KDEsMHxUKSxf''@;'; put 'put ''LndyaXRlX3NoaWZ0KDEsMSksXy53cml0ZV9zaGlmdCgxLDEyfFE8PDQpLF8ud3JpdGVfc2hpZnQoMSwwKSxtLnB1c2goZnVuY3Rpb24gcjgoZCl7dmFyIF89ZC5zcGxpdCgvXHMqLFxzKi8pLG09RnIoNCk7bS53cml0ZV9zaGlmdCg0LF8ubGVuZ3RoKTt2YXIgVD1bbV07cmV0dXJuIF8uZm9y''@;'; put 'put ''RWFjaChmdW5jdGlvbihQKXtULnB1c2goQmQoeXQoUCkpKX0pLEcoVCl9KCJzdHJpbmciPT10eXBlb2YgZC5yZWY/ZC5yZWY6aHQoZC5yZWYpKSk7dmFyIHNlPUZyKDE2KTtzZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLHNlLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksc2Uud3JpdGVf''@;'; put 'put ''c2hpZnQoNCw0Mjk0OTY3Mjk1KSxzZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLG0ucHVzaChzZSk7dmFyIG9lPUZyKDgpO29lLndyaXRlX3NoaWZ0KDQsMCksb2Uud3JpdGVfc2hpZnQoNCwwKTt2YXIgZGU9MTtzd2l0Y2goZC50KXtjYXNlIkFueSI6bS5wdXNoKG9lKSxtLnB1c2gob2Up''@;'; put 'put ''O2JyZWFrO2Nhc2UiRGVjaW1hbCI6Y2FzZSJMZW5ndGgiOmNhc2UiV2hvbGUiOmlmKG51bGwhPWQudnx8bnVsbCE9ZC5mKW0ucHVzaCgibnVtYmVyIj09dHlwZW9mIGQudj9EOChkLnYpOkR5KG51bGw9PWQudj9kLmY6ZC52KSk7ZWxzZXtpZihudWxsPT1kLm1pbnx8bnVsbD09ZC5tYXgpdGhy''@;'; put 'put ''b3ciVW5zdXBwb3J0ZWQgRGF0YSBWYWxpZGF0aW9uOiBgdmAgb3IgYG1pbmArYG1heGAgcmVxdWlyZWQgZm9yIFR5cGUgIitkLnQ7bS5wdXNoKCJudW1iZXIiPT10eXBlb2YgZC5taW4/RDgoZC5taW4pOkR5KGQubWluKSksbS5wdXNoKCJudW1iZXIiPT10eXBlb2YgZC5tYXg/RDgoZC5tYXgp''@;'; put 'put ''OkR5KGQubWF4KSksZGU9Mn1icmVhaztjYXNlIkxpc3QiOmlmKG51bGwhPWQubCl7bS5wdXNoKEl5KGQubC5qb2luKCIsIikpKTticmVha31jYXNlIkN1c3RvbSI6aWYoIm51bGwiIT1kLmYpe20ucHVzaChEeShkLmYpKTticmVha310aHJvdyJVbnN1cHBvcnRlZCBEYXRhIFZhbGlkYXRpb246''@;'; put 'put ''IGBmYCIrKCJMaXN0Ij09ZC50PyIgb3IgYGxgIjoiIikrIiByZXF1aXJlZCBmb3IgVHlwZSAiK2QudDtkZWZhdWx0OnRocm93IlhMU0IgZG9lcyBub3Qgc3VwcG9ydCBEYXRhIFZhbGlkYXRpb24gdHlwZSAiK2QudH1yZXR1cm4gMT09ZGUmJm0ucHVzaChvZSksRyhtKX1mdW5jdGlvbiB0ZWUo''@;'; put 'put ''ZCxfLG0sVCxQLFEsc2Upe2lmKHZvaWQgMD09PV8udiYmbnVsbD09Xy5zfHwieiI9PT1fLnQmJiFQLnNoZWV0U3R1YnMpcmV0dXJuITE7dmFyIG9lPSIiO3N3aXRjaChfLnQpe2Nhc2UiYiI6b2U9Xy52PyIxIjoiMCI7YnJlYWs7Y2FzZSJkIjooXz1RcihfKSkuej1fLnp8fEkuX3RhYmxlWzE0''@;'; put 'put ''XSxfLnY9S2UobG4oXy52KSksXy50PSJuIjticmVhaztjYXNlIm4iOmNhc2UiZSI6b2U9IiIrXy52O2JyZWFrO2RlZmF1bHQ6b2U9Xy52fXZhciBkZT17cjptLGM6VH07c3dpdGNoKGRlLnM9QTIoUC5jZWxsWGZzLFAuY2VsbFN0eWxlWGZzLF8sUCksXy5sJiZRWyIhbGlua3MiXS5wdXNoKFtx''@;'; put 'put ''aShkZSksXy5sXSksXy5jJiZRWyIhY29tbWVudHMiXS5wdXNoKFtxaShkZSksXy5jXSksXy50KXtjYXNlInMiOmNhc2Uic3RyIjppZihQLmJvb2tTU1Qpe2lmKG9lPUxrKFAuU3RyaW5ncyxfLnYsXy5SP18ucj1NOShfLlIpOm51bGwsUC5yZXZTdHJpbmdzKSxfLlIpZm9yKHZhciBMZT0wO0xl''@;'; put 'put ''PF8uUi5sZW5ndGg7KytMZSlfLlJbTGVdLnMmJkEyKFAuY2VsbFhmcyxQLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6Xy5SW0xlXS5zfSxQKTtkZS50PSJzIixkZS52PW9lLHNlP0lpKGQsIkJydFNob3J0SXNzdCIsZnVuY3Rpb24gS2soZCxfLG0pe3JldHVybiBudWxsPT1tJiYobT1Gcig4''@;'; put 'put ''KSksbnMoXyxtKSxtLndyaXRlX3NoaWZ0KDQsXy52KSxtfSgwLGRlKSk6SWkoZCwiQnJ0Q2VsbElzc3QiLGZ1bmN0aW9uIHg1KGQsXyxtKXtyZXR1cm4gbnVsbD09bSYmKG09RnIoMTIpKSxpbyhfLG0pLG0ud3JpdGVfc2hpZnQoNCxfLnYpLG19KDAsZGUpKX1lbHNlIGRlLnQ9InN0ciIsc2U/''@;'; put 'put ''SWkoZCwiQnJ0U2hvcnRTdCIsZnVuY3Rpb24gV0ooZCxfLG0pe3JldHVybiBudWxsPT1tJiYobT1Gcig4KzQqZC52Lmxlbmd0aCkpLG5zKF8sbSksa2koZC52LG0pLG0ubGVuZ3RoPm0ubD9tLnNsaWNlKDAsbS5sKTptfShfLGRlKSk6SWkoZCwiQnJ0Q2VsbFN0IixmdW5jdGlvbiBvQihkLF8s''@;'; put 'put ''bSl7cmV0dXJuIG51bGw9PW0mJihtPUZyKDEyKzQqZC52Lmxlbmd0aCkpLGlvKF8sbSksa2koZC52LG0pLG0ubGVuZ3RoPm0ubD9tLnNsaWNlKDAsbS5sKTptfShfLGRlKSk7cmV0dXJuITA7Y2FzZSJuIjpyZXR1cm4gXy52PT0oMHxfLnYpJiZfLnY+LTFlMyYmXy52PDFlMz9zZT9JaShkLCJC''@;'; put 'put ''cnRTaG9ydFJrIixmdW5jdGlvbiBGeShkLF8sbSl7cmV0dXJuIG51bGw9PW0mJihtPUZyKDgpKSxucyhfLG0pLHMwKGQudixtKSxtfShfLGRlKSk6SWkoZCwiQnJ0Q2VsbFJrIixmdW5jdGlvbiByQihkLF8sbSl7cmV0dXJuIG51bGw9PW0mJihtPUZyKDEyKSksaW8oXyxtKSxzMChkLnYsbSks''@;'; put 'put ''bX0oXyxkZSkpOnNlP0lpKGQsIkJydFNob3J0UmVhbCIsZnVuY3Rpb24gVUooZCxfLG0pe3JldHVybiBudWxsPT1tJiYobT1GcigxMikpLG5zKF8sbSksSmEoZC52LG0pLG19KF8sZGUpKTpJaShkLCJCcnRDZWxsUmVhbCIsZnVuY3Rpb24gdEIoZCxfLG0pe3JldHVybiBudWxsPT1tJiYobT1G''@;'; put 'put ''cigxNikpLGlvKF8sbSksSmEoZC52LG0pLG19KF8sZGUpKSwhMDtjYXNlImIiOnJldHVybiBkZS50PSJiIixzZT9JaShkLCJCcnRTaG9ydEJvb2wiLGZ1bmN0aW9uIFFWKGQsXyxtKXtyZXR1cm4gbnVsbD09bSYmKG09RnIoNSkpLG5zKF8sbSksbS53cml0ZV9zaGlmdCgxLGQudj8xOjApLG19''@;'; put 'put ''KF8sZGUpKTpJaShkLCJCcnRDZWxsQm9vbCIsZnVuY3Rpb24gWFYoZCxfLG0pe3JldHVybiBudWxsPT1tJiYobT1Gcig5KSksaW8oXyxtKSxtLndyaXRlX3NoaWZ0KDEsZC52PzE6MCksbX0oXyxkZSkpLCEwO2Nhc2UiZSI6cmV0dXJuIGRlLnQ9ImUiLHNlP0lpKGQsIkJydFNob3J0RXJyb3Ii''@;'; put 'put ''LGZ1bmN0aW9uIGpKKGQsXyxtKXtyZXR1cm4gbnVsbD09bSYmKG09RnIoOCkpLG5zKF8sbSksbS53cml0ZV9zaGlmdCgxLGQudiksbS53cml0ZV9zaGlmdCgyLDApLG0ud3JpdGVfc2hpZnQoMSwwKSxtfShfLGRlKSk6SWkoZCwiQnJ0Q2VsbEVycm9yIixmdW5jdGlvbiBCSihkLF8sbSl7cmV0''@;'; put 'put ''dXJuIG51bGw9PW0mJihtPUZyKDkpKSxpbyhfLG0pLG0ud3JpdGVfc2hpZnQoMSxkLnYpLG19KF8sZGUpKSwhMH1yZXR1cm4gc2U/SWkoZCwiQnJ0U2hvcnRCbGFuayIsZnVuY3Rpb24gRjgoZCxfLG0pe3JldHVybiBudWxsPT1tJiYobT1Gcig0KSksbnMoXyxtKX0oMCxkZSkpOklpKGQsIkJy''@;'; put 'put ''dENlbGxCbGFuayIsZnVuY3Rpb24gJGsoZCxfLG0pe3JldHVybiBudWxsPT1tJiYobT1Gcig4KSksaW8oXyxtKX0oMCxkZSkpLCEwfWZ1bmN0aW9uIFdTKGQsXyxtLFQpe3ZhciBQPU1jKCksUT1tLlNoZWV0TmFtZXNbZF0sc2U9bS5TaGVldHNbUV18fHt9LG9lPVE7dHJ5e20mJm0uV29ya2Jv''@;'; put 'put ''b2smJihvZT1tLldvcmtib29rLlNoZWV0c1tkXS5Db2RlTmFtZXx8b2UpfWNhdGNoe312YXIgZGU9eXQoc2VbIiFyZWYiXXx8IkExIik7aWYoZGUuZS5jPjE2MzgzfHxkZS5lLnI+MTA0ODU3NSl7aWYoXy5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiKyhzZVsiIXJlZiJdfHwiQTEiKSsi''@;'; put 'put ''IGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOlhGRDEwNDg1NzYiKTtkZS5lLmM9TWF0aC5taW4oZGUuZS5jLDE2MzgzKSxkZS5lLnI9TWF0aC5taW4oZGUuZS5jLDEwNDg1NzUpfXJldHVybiBzZVsiIWxpbmtzIl09W10sc2VbIiFjb21tZW50cyJdPVtdLElpKFAsIkJydEJlZ2luU2hlZXQiKSwo''@;'; put 'put ''bS52YmFyYXd8fHNlWyIhb3V0bGluZSJdKSYmSWkoUCwiQnJ0V3NQcm9wIixmdW5jdGlvbiBHayhkLF8sbSl7bnVsbD09bSYmKG09RnIoODQrNCpkLmxlbmd0aCkpO3ZhciBUPTE5MjtfJiYoXy5hYm92ZSYmKFQmPS02NSksXy5sZWZ0JiYoVCY9LTEyOSkpLG0ud3JpdGVfc2hpZnQoMSxUKTtm''@;'; put 'put ''b3IodmFyIFA9MTtQPDM7KytQKW0ud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gbjEoe2F1dG86MX0sbSksbS53cml0ZV9zaGlmdCgtNCwtMSksbS53cml0ZV9zaGlmdCgtNCwtMSksV2MoZCxtKSxtLnNsaWNlKDAsbS5sKX0ob2Usc2VbIiFvdXRsaW5lIl0pKSxJaShQLCJCcnRXc0RpbSIsUEoo''@;'; put 'put ''ZGUpKSxmdW5jdGlvbiBOYyhkLF8sbSl7SWkoZCwiQnJ0QmVnaW5Xc1ZpZXdzIiksSWkoZCwiQnJ0QmVnaW5Xc1ZpZXciLGZ1bmN0aW9uIGRCKGQsXyxtKXtudWxsPT1tJiYobT1GcigzMCkpO3ZhciBUPTkyNDtyZXR1cm4oKChffHx7fSkuVmlld3N8fFtdKVswXXx8e30pLlJUTCYmKFR8PTMy''@;'; put 'put ''KSxfbihkWyIhZ3JpZGxpbmVzIl0pJiYoVCY9LTUpLF9uKCgoKF98fHt9KS5WaWV3c3x8W10pWzBdfHx7fSkuZ3JpZCkmJihUJj0tNSksbS53cml0ZV9zaGlmdCgyLFQpLG0ud3JpdGVfc2hpZnQoNCwwKSxtLndyaXRlX3NoaWZ0KDQsMCksbS53cml0ZV9zaGlmdCg0LDApLG0ud3JpdGVfc2hp''@;'; put 'put ''ZnQoMSwwKSxtLndyaXRlX3NoaWZ0KDEsMCksbS53cml0ZV9zaGlmdCgyLDApLG0ud3JpdGVfc2hpZnQoMiwxMDApLG0ud3JpdGVfc2hpZnQoMiwwKSxtLndyaXRlX3NoaWZ0KDIsMCksbS53cml0ZV9zaGlmdCgyLDApLG0ud3JpdGVfc2hpZnQoNCwwKSxtfShfLG0pKSxfWyIhZnJlZXplIl0m''@;'; put 'put ''JklpKGQsIkJydFBhbmUiLGZ1bmN0aW9uIFA4KGQpe3ZhciBfPUlzKGRbIiFmcmVlemUiXSksbT1GcigyOSk7cmV0dXJuIG0ud3JpdGVfc2hpZnQoOCxfLmMsImYiKSxtLndyaXRlX3NoaWZ0KDgsXy5yLCJmIiksbS53cml0ZV9zaGlmdCg0LF8uciksbS53cml0ZV9zaGlmdCg0LF8uYyksbS53''@;'; put 'put ''cml0ZV9zaGlmdCg0LDApLG0ud3JpdGVfc2hpZnQoMSwzKSxtfShfKSksX1siIXNlbCJdJiZJaShkLCJCcnRTZWwiLGZ1bmN0aW9uIGo5KGQsXyl7dmFyIG09RnIoMzYpLFQ9ZC5jZWxsO2lmKCFUKXtpZighZC5yYW5nZSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3BlY2lmeSBhIHNlbGVjdGlv''@;'; put 'put ''biBjZWxsIG9yIHJhbmdlIik7VD1xaSh6YShkLnJhbmdlLnJlcGxhY2UoL1xzLiokLywiIikpLnMpfXZhciBQPSJzdHJpbmciPT10eXBlb2YgVD9JcyhUKTpUO2lmKF8pe3ZhciBRPSJzdHJpbmciPT10eXBlb2YgXz9JcyhfKTpfO20ud3JpdGVfc2hpZnQoNCxQLnI+PVEuciYmUC5jPj1RLmM/''@;'; put 'put ''MDpQLnI+PVEuciYmUC5jPFEuYz8yOlAucjxRLnImJlAuYz49US5jPzE6Myl9ZWxzZSBtLndyaXRlX3NoaWZ0KDQsMyk7cmV0dXJuIG0ud3JpdGVfc2hpZnQoNCxQLnIpLG0ud3JpdGVfc2hpZnQoNCxQLmMpLG0ud3JpdGVfc2hpZnQoNCwwKSxtLndyaXRlX3NoaWZ0KDQsMSksbS53cml0ZV9z''@;'; put 'put ''aGlmdCg0LFAuciksbS53cml0ZV9zaGlmdCg0LFAuciksbS53cml0ZV9zaGlmdCg0LFAuYyksbS53cml0ZV9zaGlmdCg0LFAuYyksbX0oX1siIXNlbCJdLF9bIiFmcmVlemUiXSkpLElpKGQsIkJydEVuZFdzVmlldyIpLElpKGQsIkJydEVuZFdzVmlld3MiKX0oUCxzZSxtLldvcmtib29rKSxm''@;'; put 'put ''dW5jdGlvbiBpZWUoZCxfKXshX3x8IV9bIiFjb2xzIl18fChJaShkLCJCcnRCZWdpbkNvbEluZm9zIiksX1siIWNvbHMiXS5mb3JFYWNoKGZ1bmN0aW9uKG0sVCl7bSYmSWkoZCwiQnJ0Q29sSW5mbyIsZnVuY3Rpb24gVzVlKGQsXyxtKXtudWxsPT1tJiYobT1GcigxOCkpO3ZhciBUPU9rKGQs''@;'; put 'put ''Xyk7bS53cml0ZV9zaGlmdCgtNCxkKSxtLndyaXRlX3NoaWZ0KC00LGQpLG0ud3JpdGVfc2hpZnQoNCwyNTYqKFQud2lkdGh8fDEwKSksbS53cml0ZV9zaGlmdCg0LDApO3ZhciBQPTA7cmV0dXJuIF8uaGlkZGVuJiYoUHw9MSksIm51bWJlciI9PXR5cGVvZiBULndpZHRoJiYoUHw9MiksXy5s''@;'; put 'put ''ZXZlbCYmKFB8PV8ubGV2ZWw8PDgpLG0ud3JpdGVfc2hpZnQoMixQKSxtfShULG0pKX0pLElpKGQsIkJydEVuZENvbEluZm9zIikpfShQLHNlKSxmdW5jdGlvbiBuZWUoZCxfLG0sVCl7dmFyIFA9eXQoX1siIXJlZiJdfHwiQTEiKSxzZT0iIixvZT1bXTtJaShkLCJCcnRCZWdpblNoZWV0RGF0''@;'; put 'put ''YSIpO3ZhciBkZT1BcnJheS5pc0FycmF5KF8pLExlPVAuZS5yO19bIiFyb3dzIl0mJihMZT1NYXRoLm1heChQLmUucixfWyIhcm93cyJdLmxlbmd0aC0xKSk7Zm9yKHZhciBOZT1QLnMucjtOZTw9TGU7KytOZSl7c2U9em8oTmUpLE5KKGQsXyxQLE5lKTt2YXIgQmU9ITE7aWYoTmU8PVAuZS5y''@;'; put 'put ''KWZvcih2YXIgWmU9UC5zLmM7WmU8PVAuZS5jOysrWmUpe05lPT09UC5zLnImJihvZVtaZV09bXMoWmUpKTt2YXIgbnQ9ZGU/KF9bTmVdfHxbXSlbWmVdOl9bb2VbWmVdK3NlXTtCZT0hIW50JiZ0ZWUoZCxudCxOZSxaZSxULF8sQmUpfX1JaShkLCJCcnRFbmRTaGVldERhdGEiKX0oUCxzZSww''@;'; put 'put ''LF8pLGZ1bmN0aW9uIGxlZShkLF8pe19bIiFwcm90ZWN0Il0mJklpKGQsIkJydFNoZWV0UHJvdGVjdGlvbiIsZnVuY3Rpb24gWEooZCxfKXtyZXR1cm4gbnVsbD09XyYmKF89RnIoNjYpKSxfLndyaXRlX3NoaWZ0KDIsZC5wYXNzd29yZD9WQShkLnBhc3N3b3JkKTowKSxfLndyaXRlX3NoaWZ0''@;'; put 'put ''KDQsMSksW1sib2JqZWN0cyIsITFdLFsic2NlbmFyaW9zIiwhMV0sWyJmb3JtYXRDZWxscyIsITBdLFsiZm9ybWF0Q29sdW1ucyIsITBdLFsiZm9ybWF0Um93cyIsITBdLFsiaW5zZXJ0Q29sdW1ucyIsITBdLFsiaW5zZXJ0Um93cyIsITBdLFsiaW5zZXJ0SHlwZXJsaW5rcyIsITBdLFsiZGVs''@;'; put 'put ''ZXRlQ29sdW1ucyIsITBdLFsiZGVsZXRlUm93cyIsITBdLFsic2VsZWN0TG9ja2VkQ2VsbHMiLCExXSxbInNvcnQiLCEwXSxbImF1dG9GaWx0ZXIiLCEwXSxbInBpdm90VGFibGVzIiwhMF0sWyJzZWxlY3RVbmxvY2tlZENlbGxzIiwhMV1dLmZvckVhY2goZnVuY3Rpb24obSl7Xy53cml0ZV9z''@;'; put 'put ''aGlmdCg0LG1bMV0/bnVsbD09ZFttWzBdXXx8ZFttWzBdXT8wOjE6bnVsbCE9ZFttWzBdXSYmZFttWzBdXT8wOjEpfSksX30oX1siIXByb3RlY3QiXSkpfShQLHNlKSxmdW5jdGlvbiBzZWUoZCxfLG0sVCl7aWYoX1siIWF1dG9maWx0ZXIiXSl7dmFyIFA9X1siIWF1dG9maWx0ZXIiXSxRPSJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgUC5yZWY/UC5yZWY6aHQoUC5yZWYpO20uV29ya2Jvb2t8fChtLldvcmtib29rPXtTaGVldHM6W119KSxtLldvcmtib29rLk5hbWVzfHwobS5Xb3JrYm9vay5OYW1lcz1bXSk7dmFyIHNlPW0uV29ya2Jvb2suTmFtZXMsb2U9emEoUSk7b2Uucy5yPT1vZS5lLnImJihv''@;'; put 'put ''ZS5lLnI9emEoX1siIXJlZiJdKS5lLnIsUT1odChvZSkpO2Zvcih2YXIgZGU9MDtkZTxzZS5sZW5ndGg7KytkZSl7dmFyIExlPXNlW2RlXTtpZigiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIj09TGUuTmFtZSYmTGUuU2hlZXQ9PVQpe0xlLlJlZj0iJyIrbS5TaGVldE5hbWVzW1RdKyInISIrUTti''@;'; put 'put ''cmVha319ZGU9PXNlLmxlbmd0aCYmc2UucHVzaCh7TmFtZToiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIixTaGVldDpULFJlZjoiJyIrbS5TaGVldE5hbWVzW1RdKyInISIrUX0pLElpKGQsIkJydEJlZ2luQUZpbHRlciIsQmQoeXQoUSkpKSxJaShkLCJCcnRFbmRBRmlsdGVyIil9fShQLHNlLG0s''@;'; put 'put ''ZCksZnVuY3Rpb24gcmVlKGQsXyl7IV98fCFfWyIhbWVyZ2VzIl18fChJaShkLCJCcnRCZWdpbk1lcmdlQ2VsbHMiLGZ1bmN0aW9uICRKKGQsXyl7cmV0dXJuIG51bGw9PV8mJihfPUZyKDQpKSxfLndyaXRlX3NoaWZ0KDQsZCksX30oX1siIW1lcmdlcyJdLmxlbmd0aCkpLF9bIiFtZXJnZXMi''@;'; put 'put ''XS5mb3JFYWNoKGZ1bmN0aW9uKG0pe0lpKGQsIkJydE1lcmdlQ2VsbCIsR0oobSkpfSksSWkoZCwiQnJ0RW5kTWVyZ2VDZWxscyIpKX0oUCxzZSksZnVuY3Rpb24gbUIoZCxfKXtpZihfKXtJaShkLCJCcnRCZWdpbkRWYWxzIixmdW5jdGlvbiBoQihkLF8pe251bGw9PV8mJihfPUZyKDE4KSks''@;'; put 'put ''Xy53cml0ZV9zaGlmdCgyLDApLF8ud3JpdGVfc2hpZnQoNCwwKSxfLndyaXRlX3NoaWZ0KDQsMCksXy53cml0ZV9zaGlmdCg0LDApO2Zvcih2YXIgbT0wLFQ9MDtUPGQubGVuZ3RoOysrVCkoKGRbVF18fHt9KS5yZWZ8fHt9KS5zJiZkW1RdLnJlZi5zLmM8MHx8KyttO3JldHVybiBfLndyaXRl''@;'; put 'put ''X3NoaWZ0KDQsbSksX30oXykpO2Zvcih2YXIgbT0wO208Xy5sZW5ndGg7KyttKSgoX1ttXXx8e30pLnJlZnx8e30pLnMmJl9bbV0ucmVmLnMuYzwwfHxJaShkLCJCcnREVmFsIixlZWUoX1ttXSkpO0lpKGQsIkJydEVuZERWYWxzIil9fShQLHNlWyIhdmFsaWRhdGlvbnMiXSksZnVuY3Rpb24g''@;'; put 'put ''b2VlKGQsXyxtKXtfWyIhbGlua3MiXS5mb3JFYWNoKGZ1bmN0aW9uKFQpe2lmKFRbMV0uVGFyZ2V0KXt2YXIgUD1haShtLC0xLFRbMV0uVGFyZ2V0LnJlcGxhY2UoLyMuKiQvLCIiKSx1YS5ITElOSyk7SWkoZCwiQnJ0SExpbmsiLGZ1bmN0aW9uIEtKKGQsXyl7dmFyIG09RnIoNTArNCooZFsx''@;'; put 'put ''XS5UYXJnZXQubGVuZ3RoKyhkWzFdLlRvb2x0aXB8fCIiKS5sZW5ndGgpKTtCZCh7czpJcyhkWzBdKSxlOklzKGRbMF0pfSxtKSx0MSgicklkIitfLG0pO3ZhciBUPWRbMV0uVGFyZ2V0LmluZGV4T2YoIiMiKTtyZXR1cm4ga2koKC0xPT1UPyIiOmRbMV0uVGFyZ2V0LnNsaWNlKFQrMSkpfHwi''@;'; put 'put ''IixtKSxraShkWzFdLlRvb2x0aXB8fCIiLG0pLGtpKCIiLG0pLG0uc2xpY2UoMCxtLmwpfShULFApKX19KSxkZWxldGUgX1siIWxpbmtzIl19KFAsc2UsVCksc2VbIiFtYXJnaW5zIl0mJklpKFAsIkJydE1hcmdpbnMiLGZ1bmN0aW9uIFo1ZShkLF8pe3JldHVybiBudWxsPT1fJiYoXz1Gcig0''@;'; put 'put ''OCkpLEw4KGQpLGNCLmZvckVhY2goZnVuY3Rpb24obSl7SmEoZFttXSxfKX0pLF99KHNlWyIhbWFyZ2lucyJdKSksKCFffHxfLmlnbm9yZUVDfHxudWxsPT1fLmlnbm9yZUVDKSYmZnVuY3Rpb24gcEIoZCxfKXshX3x8IV9bIiFyZWYiXXx8KElpKGQsIkJydEJlZ2luQ2VsbElnbm9yZUVDcyIp''@;'; put 'put ''LElpKGQsIkJydENlbGxJZ25vcmVFQyIsZnVuY3Rpb24gRzVlKGQpe3ZhciBfPUZyKDI0KTtyZXR1cm4gXy53cml0ZV9zaGlmdCg0LDQpLF8ud3JpdGVfc2hpZnQoNCwxKSxCZChkLF8pLF99KHl0KF9bIiFyZWYiXSkpKSxJaShkLCJCcnRFbmRDZWxsSWdub3JlRUNzIikpfShQLHNlKSxmdW5j''@;'; put 'put ''dGlvbiBhZWUoZCxfLG0sVCl7aWYoX1siIWNvbW1lbnRzIl0ubGVuZ3RoPjApe3ZhciBQPWFpKFQsLTEsIi4uL2RyYXdpbmdzL3ZtbERyYXdpbmciKyhtKzEpKyIudm1sIix1YS5WTUwpO0lpKGQsIkJydExlZ2FjeURyYXdpbmciLHQxKCJySWQiK1ApKSxfWyIhbGVnYWN5Il09UH19KFAsc2Us''@;'; put 'put ''ZCxUKSxJaShQLCJCcnRFbmRTaGVldCIpLFAuZW5kKCl9ZnVuY3Rpb24gdkIoZCl7dmFyIFQsXz1bXSxtPWQubWF0Y2goL148YzpudW1DYWNoZT4vKTsoZC5tYXRjaCgvPGM6cHQgaWR4PSIoXGQqKSI+KC4qPyk8XC9jOnB0Pi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciBzZT1R''@;'; put 'put ''Lm1hdGNoKC88YzpwdCBpZHg9IihcZCo/KSI+PGM6dj4oLiopPFwvYzp2PjxcL2M6cHQ+Lyk7c2UmJihfWytzZVsxXV09bT8rc2VbMl06c2VbMl0pfSk7dmFyIFA9Q2koKGQubWF0Y2goLzxjOmZvcm1hdENvZGU+KFtcc1xTXSo/KTxcL2M6Zm9ybWF0Q29kZT4vKXx8WyIiLCJHZW5lcmFsIl0p''@;'; put 'put ''WzFdKTtyZXR1cm4oZC5tYXRjaCgvPGM6Zj4oLio/KTxcL2M6Zj4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXtUPVEucmVwbGFjZSgvPC4qPz4vZywiIil9KSxbXyxQLFRdfXVhLkNIQVJUPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAw''@;'; put 'put ''Ni9yZWxhdGlvbnNoaXBzL2NoYXJ0Iix1YS5DSEFSVEVYPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDE0L3JlbGF0aW9uc2hpcHMvY2hhcnRFeCI7dmFyIHRSPS88KD86XHcrOik/Y2hhcnQ+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2NoYXJ0Pi8saWU9LzwoPzpcdys6''@;'; put 'put ''KT9wbG90QXJlYT4oW1xzXFNdKj8pPFwvKD86XHcrOik/cGxvdEFyZWE+LyxfQj0vPCg/Olx3KzopP2xlZ2VuZD4oW1xzXFNdKj8pPFwvKD86XHcrOik/bGVnZW5kPi8sWVM9LzwoPzpcdys6KT90aXRsZT4oW1xzXFNdKj8pPFwvKD86XHcrOik/dGl0bGU+LztmdW5jdGlvbiBWeShkLF8sbSxU''@;'; put 'put ''LFAsUSxzZSxvZSl7dmFyIGRlPVF8fHsiIXR5cGUiOiJjaGFydCJ9O2lmKCFkKXJldHVybiBRO3NlJiZzZS5BbmNob3ImJihkZVsiIXBvcyJdPUQ5KHNlLkFuY2hvcixvZSksZGVbIiFwb3NUeXBlIl09c2UuQW5jaG9yLnR5cGUucmVwbGFjZSgvQW5jaG9yLywiIiksZGVbIiFhYnNwb3MiXT1E''@;'; put 'put ''OShzZS5BbmNob3Isb2UpLGRlWyIhcmVscG9zIl09dzUoc2UuQW5jaG9yLG9lKSksZGVbIiFwbG90Il09W107dmFyIExlPSIiLE5lPSIiLEJlPWQubWF0Y2godFIpO0JlPyhMZT1kLnNsaWNlKDAsQmUuaW5kZXgpLE5lPWQuc2xpY2UoQmUuaW5kZXgrQmVbMF0ubGVuZ3RoKSk6TGU9TmU9ZDt2''@;'; put 'put ''YXIgWmU9W10sbnQ9TGUubWF0Y2goLzxjOmxhbmcuKj8+Lyl8fGQubWF0Y2goLzxjOmxhbmcuKj8+Lyl8fE5lLm1hdGNoKC88YzpsYW5nLio/Pi8pO3JldHVybiBudCYmKGRlWyIhbGFuZyJdPShYcihudFswXSl8fHt9KS52YWx8fCJlbi1VUyIpLEJlJiYoKFplPUJlWzFdLm1hdGNoKFlTKSkm''@;'; put 'put ''JmZ1bmN0aW9uIEh5KGQsXyl7dmFyIG09IiI7ZC5tYXRjaCgvPGM6cmljaD4vKSYmZC5yZXBsYWNlKC88YTp0PihbXHNcU10qPyk8XC9hOnQ+L2csZnVuY3Rpb24oVCxQKXttKz1QfSksX1siIXRpdGxlIl09bXx8IkNoYXJ0IFRpdGxlIn0oWmVbMV0sZGUpLGZ1bmN0aW9uIHJSKGQsXyl7aWYo''@;'; put 'put ''ZCl7dmFyIG09MCxUPTAsUD0iQSIsUT17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fTtkLnJlcGxhY2UoQTUsZnVuY3Rpb24oc2Usb2Upe3ZhciBkZT17dDpvZSxjOm0sdzowLHNlcjpbXX0sTGU9W10sTmU9KHNlLm1hdGNoKC88YzpzZXIvKXx8W10pLmluZGV4LEJlPU5lP3NlLnNsaWNl''@;'; put 'put ''KDAsTmUpOnNlOyJzY2F0dGVyIj09b2UmJihMZT1zZS5tYXRjaCgvPGM6c2NhdHRlclN0eWxlKFteXC8+XSopXC8+L20pKSYmWHIoTGVbMF0pLCJiYXIiPT1vZSYmKExlPXNlLm1hdGNoKC88YzpiYXJEaXIoW15cLz5dKilcLz4vbSkpJiYoZGUuYmFyRGlyPSJiYXIiPT1YcihMZVswXSkudmFs''@;'; put 'put ''PyJoIjoidiIpLChMZT1CZS5tYXRjaCgvPGM6Z3JvdXBpbmcoW15cLz5dKilcLz4vbSkpJiYoZGUuZ3JvdXBpbmc9WHIoTGVbMF0pLnZhbHx8InN0YW5kYXJkIiksKHNlLm1hdGNoKG5SKXx8W10pLmZvckVhY2goZnVuY3Rpb24obnQpe3ZhciBtdD1bXSxRZT17fSxmdD1bXTtpZihudC5tYXRj''@;'; put 'put ''aCgvPGM6dHg+Lykpe3ZhciBrdD12QigobnQubWF0Y2goLzxjOnR4PihbXHNcU10qPyk8XC9jOnR4Pi8pfHxbXSlbMV18fCIiKXx8W107a3RbMF0mJmt0WzBdWzBdJiYoUWUubmFtZT1rdFswXVswXSksa3RbMl0mJihRZS5uYW1lcmVmPWt0WzJdKX1bInhWYWwiLCJ5VmFsIiwiY2F0IiwidmFs''@;'; put 'put ''IiwiYnViYmxlU2l6ZSJdLmZvckVhY2goZnVuY3Rpb24oYnQpe3ZhciBWdCxFdD1udC5tYXRjaChuZXcgUmVnRXhwKCI8YzoiK2J0KyI+W1xcc1xcU10qPzxcXC9jOiIrYnQrIj4iLCJnbSIpKTtFdCYmKChFdFswXS5tYXRjaCgvPGM6Zj4oLio/KTxcL2M6Zj4vZ20pfHxbXSkuZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbih1bil7VnQ9dW4ucmVwbGFjZSgvPC4qPz4vZywiIil9KSwoRXRbMF0ubWF0Y2goLzxjOig/Olx3KilDYWNoZT5bXHNcU10qPzxcL2M6KD86XHcqKUNhY2hlPi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHVuKXt2YXIgbnI9dkIodW4pO1Eucy5yPVEucy5jPTAsUS5lLmM9bSxQ''@;'; put 'put ''PW1zKG0pLG5yWzBdLmZvckVhY2goZnVuY3Rpb24obm4sYXIpe19bUCt6byhhcildPXt0OiJudW1iZXIiPT10eXBlb2Ygbm4/Im4iOiJzIix2Om5uLHo6bnJbMV19LFQ9YXJ9KSxRLmUucjxUJiYoUS5lLnI9VCksKyttLGRlLncrKyxtdC5wdXNoKGJ0KSwobnJbMl18fFZ0KSYmZnQucHVzaChu''@;'; put 'put ''clsyXXx8VnQpLCJ2YWwiPT1idCYmKFFlLno9bnJbMV18fCJHZW5lcmFsIil9KSl9KSwoTGU9c2UubWF0Y2goLzxjOnNtb290aChbXlwvPl0qKVwvPi9tKSkmJihRZS5zbW9vdGg9bnVsbD09WHIoTGVbMF0pLnZhbHx8VGkoWHIoTGVbMF0pLnZhbCkpLFFlLmNvbHM9bXQsUWUucmFuZ2VzPWZ0''@;'; put 'put ''LGRlLnNlci5wdXNoKFFlKX0pLCJkb3VnaG51dCI9PW9lJiYoTGU9c2UubWF0Y2goLzxjOmhvbGVTaXplKFteXC8+XSopXC8+L20pKSYmKGRlLmhvbGU9KFhyKExlWzBdKS52YWx8fDEwKS8xMDApLF9bIiFwbG90Il0ucHVzaChkZSl9KSxtPjAmJihfWyIhcmVmIl09aHQoUSkpfX0oKEJlWzFd''@;'; put 'put ''Lm1hdGNoKGllKXx8W10pWzFdLGRlKSxudWxsIT0oWmU9QmVbMV0ubWF0Y2goX0IpKSYmZnVuY3Rpb24gZVIoZCxfKXt2YXIgbTtfWyIhbGVnZW5kIl09e3BvczoiciJ9LChtPWQubWF0Y2goLzxjOmxlZ2VuZFBvcyhbXlwvPl0qKVwvPi9tKSkmJihfWyIhbGVnZW5kIl0ucG9zPVhyKG1bMF0p''@;'; put 'put ''LnZhbHx8InIiKX0oWmVbMF0sZGUpKSxkZX12YXIgQTU9LzxjOigoPzphcmVhfGxpbmV8c3RvY2t8cmFkYXJ8c2NhdHRlcnxwaWV8ZG91Z2hudXR8YmFyfG9mUGllfHN1cmZhY2V8YnViYmxlKSg/OjNEKT8pQ2hhcnRbXj5dKj4oW1xzXFNdKj8pPFwvYzooPzphcmVhfGxpbmV8c3RvY2t8cmFk''@;'; put 'put ''YXJ8c2NhdHRlcnxwaWV8ZG91Z2hudXR8YmFyfG9mUGllfHN1cmZhY2V8YnViYmxlKSg/OjNEKT9DaGFydD4vZ20sblI9LzxjOnNlcj4oW1xzXFNdKj8pPFwvYzpzZXI+L2dtO3VhLkNTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxh''@;'; put 'put ''dGlvbnNoaXBzL2NoYXJ0c2hlZXQiO3ZhciBjZWU9VnIoImNoYXJ0c2hlZXQiLG51bGwse3htbG5zOlVhLm1haW5bMF0sInhtbG5zOnIiOlVhLnJ9KTtmdW5jdGlvbiBVOShkLF8sbSxUKXt2YXIgUD1bcG8sY2VlXTtyZXR1cm4gUC5wdXNoKCI8c2hlZXRQci8+IiksUC5wdXNoKCc8c2hlZXRW''@;'; put 'put ''aWV3cz48c2hlZXRWaWV3IHpvb21TY2FsZT0iMTAwIiB3b3JrYm9va1ZpZXdJZD0iMCIgem9vbVRvRml0PSIxIi8+PC9zaGVldFZpZXdzPicpLFBbUC5sZW5ndGhdPVZyKCJkcmF3aW5nIixudWxsLHsicjppZCI6InJJZDEifSksYWkoVCwtMSwiLi4vZHJhd2luZ3MvZHJhd2luZyIrKGQrMSkr''@;'; put 'put ''Ii54bWwiLHVhLkRSQVcpLFAubGVuZ3RoPjImJihQW1AubGVuZ3RoXT0iPC9jaGFydHNoZWV0PiIsUFsxXT1QWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxQLmpvaW4oIiIpfWZ1bmN0aW9uIHlCKCl7dmFyIGQ9TWMoKTtyZXR1cm4gSWkoZCwiQnJ0QmVnaW5TaGVldCIpLElpKGQsIkJydEVuZFNo''@;'; put 'put ''ZWV0IiksZC5lbmQoKX12YXIgR1M9W1siYWxsb3dSZWZyZXNoUXVlcnkiLCExLCJib29sIl0sWyJhdXRvQ29tcHJlc3NQaWN0dXJlcyIsITAsImJvb2wiXSxbImJhY2t1cEZpbGUiLCExLCJib29sIl0sWyJjaGVja0NvbXBhdGliaWxpdHkiLCExLCJib29sIl0sWyJDb2RlTmFtZSIsIiJdLFsi''@;'; put 'put ''ZGF0ZTE5MDQiLCExLCJib29sIl0sWyJkZWZhdWx0VGhlbWVWZXJzaW9uIiwwLCJpbnQiXSxbImZpbHRlclByaXZhY3kiLCExLCJib29sIl0sWyJoaWRlUGl2b3RGaWVsZExpc3QiLCExLCJib29sIl0sWyJwcm9tcHRlZFNvbHV0aW9ucyIsITEsImJvb2wiXSxbInB1Ymxpc2hJdGVtcyIsITEs''@;'; put 'put ''ImJvb2wiXSxbInJlZnJlc2hBbGxDb25uZWN0aW9ucyIsITEsImJvb2wiXSxbInNhdmVFeHRlcm5hbExpbmtWYWx1ZXMiLCEwLCJib29sIl0sWyJzaG93Qm9yZGVyVW5zZWxlY3RlZFRhYmxlcyIsITAsImJvb2wiXSxbInNob3dJbmtBbm5vdGF0aW9uIiwhMCwiYm9vbCJdLFsic2hvd09iamVj''@;'; put 'put ''dHMiLCJhbGwiXSxbInNob3dQaXZvdENoYXJ0RmlsdGVyIiwhMSwiYm9vbCJdLFsidXBkYXRlTGlua3MiLCJ1c2VyU2V0Il1dLGhlZT1bWyJhY3RpdmVUYWIiLDAsImludCJdLFsiYXV0b0ZpbHRlckRhdGVHcm91cGluZyIsITAsImJvb2wiXSxbImZpcnN0U2hlZXQiLDAsImludCJdLFsibWlu''@;'; put 'put ''aW1pemVkIiwhMSwiYm9vbCJdLFsic2hvd0hvcml6b250YWxTY3JvbGwiLCEwLCJib29sIl0sWyJzaG93U2hlZXRUYWJzIiwhMCwiYm9vbCJdLFsic2hvd1ZlcnRpY2FsU2Nyb2xsIiwhMCwiYm9vbCJdLFsidGFiUmF0aW8iLDYwMCwiaW50Il0sWyJ2aXNpYmlsaXR5IiwidmlzaWJsZSJdXSxi''@;'; put 'put ''Qj1bXSxmZWU9W1siY2FsY0NvbXBsZXRlZCIsInRydWUiXSxbImNhbGNNb2RlIiwiYXV0byJdLFsiY2FsY09uU2F2ZSIsInRydWUiXSxbImNvbmN1cnJlbnRDYWxjIiwidHJ1ZSJdLFsiZnVsbENhbGNPbkxvYWQiLCJmYWxzZSJdLFsiZnVsbFByZWNpc2lvbiIsInRydWUiXSxbIml0ZXJhdGUi''@;'; put 'put ''LCJmYWxzZSJdLFsiaXRlcmF0ZUNvdW50IiwiMTAwIl0sWyJpdGVyYXRlRGVsdGEiLCIwLjAwMSJdLFsicmVmTW9kZSIsIkExIl1dO2Z1bmN0aW9uIGs1KGQsXyl7Zm9yKHZhciBtPTA7bSE9ZC5sZW5ndGg7KyttKWZvcih2YXIgVD1kW21dLFA9MDtQIT1fLmxlbmd0aDsrK1Ape3ZhciBRPV9b''@;'; put 'put ''UF07aWYobnVsbD09VFtRWzBdXSlUW1FbMF1dPVFbMV07ZWxzZSBzd2l0Y2goUVsyXSl7Y2FzZSJib29sIjoic3RyaW5nIj09dHlwZW9mIFRbUVswXV0mJihUW1FbMF1dPVRpKFRbUVswXV0pKTticmVhaztjYXNlImludCI6InN0cmluZyI9PXR5cGVvZiBUW1FbMF1dJiYoVFtRWzBdXT1wYXJz''@;'; put 'put ''ZUludChUW1FbMF1dLDEwKSl9fX1mdW5jdGlvbiAkUyhkLF8pe2Zvcih2YXIgbT0wO20hPV8ubGVuZ3RoOysrbSl7dmFyIFQ9X1ttXTtpZihudWxsPT1kW1RbMF1dKWRbVFswXV09VFsxXTtlbHNlIHN3aXRjaChUWzJdKXtjYXNlImJvb2wiOiJzdHJpbmciPT10eXBlb2YgZFtUWzBdXSYmKGRb''@;'; put 'put ''VFswXV09VGkoZFtUWzBdXSkpO2JyZWFrO2Nhc2UiaW50Ijoic3RyaW5nIj09dHlwZW9mIGRbVFswXV0mJihkW1RbMF1dPXBhcnNlSW50KGRbVFswXV0sMTApKX19fWZ1bmN0aW9uIHo5KGQpeyRTKGQuV0JQcm9wcyxHUyksJFMoZC5DYWxjUHIsZmVlKSxrNShkLldCVmlldyxoZWUpLGs1KGQu''@;'; put 'put ''U2hlZXRzLGJCKSxYbS5kYXRlMTkwND1UaShkLldCUHJvcHMuZGF0ZTE5MDQpfXZhciBqMT0iXVsqPy9cXCIuc3BsaXQoIiIpO2Z1bmN0aW9uIGlSKGQsXyl7aWYoZC5sZW5ndGg+MzEpe2lmKF8pcmV0dXJuITE7dGhyb3cgbmV3IEVycm9yKCJTaGVldCBuYW1lcyBjYW5ub3QgZXhjZWVkIDMx''@;'; put 'put ''IGNoYXJzIil9dmFyIG09ITA7cmV0dXJuIGoxLmZvckVhY2goZnVuY3Rpb24oVCl7aWYoLTEhPWQuaW5kZXhPZihUKSl7aWYoIV8pdGhyb3cgbmV3IEVycm9yKCJTaGVldCBuYW1lIGNhbm5vdCBjb250YWluIDogXFwgLyA/ICogWyBdIik7bT0hMX19KSxtfXZhciBDQj0vPFx3Kzp3b3JrYm9v''@;'; put 'put ''ay8scVM9VnIoIndvcmtib29rIixudWxsLHt4bWxuczpVYS5tYWluWzBdLCJ4bWxuczpyIjpVYS5yfSk7ZnVuY3Rpb24gZ2VlKGQsXyl7dmFyIG09X3x8e30sVD1bcG9dO1RbVC5sZW5ndGhdPXFTO3ZhciBQPWQuV29ya2Jvb2smJihkLldvcmtib29rLk5hbWVzfHxbXSkubGVuZ3RoPjA7ZC5X''@;'; put 'put ''b3JrYm9vayYmZC5Xb3JrYm9vay5Nb2RpZnkmJihUW1QubGVuZ3RoXT1mdW5jdGlvbiAkNWUoZCl7dmFyIF89e307cmV0dXJuIGQud2FybiYmKF8ucmVhZE9ubHlSZWNvbW1lbmRlZD0xKSxfLnVzZXJOYW1lPWQudXNlcnx8IlNoZWV0IEpTIixkLmVuY3J5cHRpb24mJihkLmVuY3J5cHRpb24u''@;'; put 'put ''YWxnbyYmKF8uYWxnb3JpdGhtTmFtZT1kLmVuY3J5cHRpb24uYWxnbyksZC5lbmNyeXB0aW9uLmhhc2gmJihfLmhhc2hWYWx1ZT1kLmVuY3J5cHRpb24uaGFzaCksZC5lbmNyeXB0aW9uLnNhbHQmJihfLnNhbHRWYWx1ZT1kLmVuY3J5cHRpb24uc2FsdCksZC5lbmNyeXB0aW9uLnNwaW4mJihf''@;'; put 'put ''LnNwaW5Db3VudD1kLmVuY3J5cHRpb24uc3BpbikpLFZyKCJmaWxlU2hhcmluZyIsbnVsbCxfKX0oZC5Xb3JrYm9vay5Nb2RpZnkpKTt2YXIgUT17Y29kZU5hbWU6IlRoaXNXb3JrYm9vayJ9O2QuV29ya2Jvb2smJmQuV29ya2Jvb2suV0JQcm9wcyYmKEdTLmZvckVhY2goZnVuY3Rpb24oTGUp''@;'; put 'put ''e251bGwhPWQuV29ya2Jvb2suV0JQcm9wc1tMZVswXV0mJmQuV29ya2Jvb2suV0JQcm9wc1tMZVswXV0hPUxlWzFdJiYoUVtMZVswXV09ZC5Xb3JrYm9vay5XQlByb3BzW0xlWzBdXSl9KSxkLldvcmtib29rLldCUHJvcHMuQ29kZU5hbWUmJihRLmNvZGVOYW1lPWQuV29ya2Jvb2suV0JQcm9w''@;'; put 'put ''cy5Db2RlTmFtZSxkZWxldGUgUS5Db2RlTmFtZSkpLFRbVC5sZW5ndGhdPVZyKCJ3b3JrYm9va1ByIixudWxsLFEpLGQuV29ya2Jvb2smJmQuV29ya2Jvb2suUHJvdGVjdGlvbiYmKFRbVC5sZW5ndGhdPWZ1bmN0aW9uIG9SKGQpe3ZhciBfPXt9O3JldHVybiBkLmxvY2tTdHJ1Y3R1cmUmJihf''@;'; put 'put ''LmxvY2tTdHJ1Y3R1cmU9MSksZC5sb2NrV2luZG93cyYmKF8ubG9ja1dpbmRvd3M9MSksZC5lbmNyeXB0aW9uJiYoZC5lbmNyeXB0aW9uLmFsZ28mJihfLndvcmtib29rQWxnb3JpdGhtTmFtZT1kLmVuY3J5cHRpb24uYWxnbyksZC5lbmNyeXB0aW9uLmhhc2gmJihfLndvcmtib29rSGFzaFZh''@;'; put 'put ''bHVlPWQuZW5jcnlwdGlvbi5oYXNoKSxkLmVuY3J5cHRpb24uc2FsdCYmKF8ud29ya2Jvb2tTYWx0VmFsdWU9ZC5lbmNyeXB0aW9uLnNhbHQpLGQuZW5jcnlwdGlvbi5zcGluJiYoXy53b3JrYm9va1NwaW5Db3VudD1kLmVuY3J5cHRpb24uc3BpbikpLFZyKCJ3b3JrYm9va1Byb3RlY3Rpb24i''@;'; put 'put ''LG51bGwsXyl9KGQuV29ya2Jvb2suUHJvdGVjdGlvbikpO3ZhciBzZT1kLldvcmtib29rJiZkLldvcmtib29rLlNoZWV0c3x8W10sb2U9MDtpZihzZSYmc2VbMF0mJnNlWzBdLkhpZGRlbil7Zm9yKFRbVC5sZW5ndGhdPSI8Ym9va1ZpZXdzPiIsb2U9MDtvZSE9ZC5TaGVldE5hbWVzLmxlbmd0''@;'; put 'put ''aCYmc2Vbb2VdJiZzZVtvZV0uSGlkZGVuOysrb2UpO29lPT1kLlNoZWV0TmFtZXMubGVuZ3RoJiYob2U9MCksVFtULmxlbmd0aF09Jzx3b3JrYm9va1ZpZXcgZmlyc3RTaGVldD0iJytvZSsnIiBhY3RpdmVUYWI9Iicrb2UrJyIvPicsVFtULmxlbmd0aF09IjwvYm9va1ZpZXdzPiJ9Zm9yKFRb''@;'; put 'put ''VC5sZW5ndGhdPSI8c2hlZXRzPiIsb2U9MDtvZSE9ZC5TaGVldE5hbWVzLmxlbmd0aDsrK29lKXt2YXIgZGU9e25hbWU6QmkoZC5TaGVldE5hbWVzW29lXS5zbGljZSgwLDMxKSl9O2lmKGRlLnNoZWV0SWQ9IiIrKG9lKzEpLGRlWyJyOmlkIl09InJJZCIrKG9lKzEpLHNlW29lXSlzd2l0Y2go''@;'; put 'put ''c2Vbb2VdLkhpZGRlbil7Y2FzZSAxOmRlLnN0YXRlPSJoaWRkZW4iO2JyZWFrO2Nhc2UgMjpkZS5zdGF0ZT0idmVyeUhpZGRlbiJ9VFtULmxlbmd0aF09VnIoInNoZWV0IixudWxsLGRlKX1yZXR1cm4gVFtULmxlbmd0aF09Ijwvc2hlZXRzPiIsZC5FeHRlcm5hbFdCJiZkLkV4dGVybmFsV0Iu''@;'; put 'put ''bGVuZ3RoJiYoVFtULmxlbmd0aF09IjxleHRlcm5hbFJlZmVyZW5jZXM+IiwoZC5FeHRlcm5hbFdCfHxbXSkuZm9yRWFjaChmdW5jdGlvbihMZSxOZSl7dmFyIEJlPWFpKG0ud2JyZWxzLC0xLCJleHRlcm5hbExpbmtzL2V4dGVybmFsTGluayIrKE5lKzEpKyIueG1sIix1YS5YTElOSyk7VFtU''@;'; put 'put ''Lmxlbmd0aF09JzxleHRlcm5hbFJlZmVyZW5jZSByOmlkPSJySWQnK0JlKyciLz4nfSksVFtULmxlbmd0aF09IjwvZXh0ZXJuYWxSZWZlcmVuY2VzPiIpLFAmJihUW1QubGVuZ3RoXT0iPGRlZmluZWROYW1lcz4iLGQuV29ya2Jvb2smJmQuV29ya2Jvb2suTmFtZXMmJmQuV29ya2Jvb2suTmFt''@;'; put 'put ''ZXMuZm9yRWFjaChmdW5jdGlvbihMZSl7dmFyIE5lPXtuYW1lOkxlLk5hbWV9O0xlLkNvbW1lbnQmJihOZS5jb21tZW50PUxlLkNvbW1lbnQpLG51bGwhPUxlLlNoZWV0JiYoTmUubG9jYWxTaGVldElkPSIiK0xlLlNoZWV0KSxMZS5IaWRkZW4mJihOZS5oaWRkZW49IjEiKSxMZS5SZWYmJihU''@;'; put 'put ''W1QubGVuZ3RoXT1WcigiZGVmaW5lZE5hbWUiLEJpKExlLlJlZiksTmUpKX0pLFRbVC5sZW5ndGhdPSI8L2RlZmluZWROYW1lcz4iKSxtJiZtLnBpdm90cyYmbS5waXZvdHMubGVuZ3RoPjAmJihULnB1c2goIjxwaXZvdENhY2hlcz4iKSxtLnBpdm90cy5mb3JFYWNoKGZ1bmN0aW9uKExlLE5l''@;'; put 'put ''KXtULnB1c2goJzxwaXZvdENhY2hlIGNhY2hlSWQ9IicrKE5lKzEpKyciIHI6aWQ9InJJZCcrTGVbMl0rJyIvPicpfSksVC5wdXNoKCI8L3Bpdm90Q2FjaGVzPiIpKSxULmxlbmd0aD4yJiYoVFtULmxlbmd0aF09Ijwvd29ya2Jvb2s+IixUWzFdPVRbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFQu''@;'; put 'put ''am9pbigiIil9ZnVuY3Rpb24gbWVlKGQsXyl7cmV0dXJuIF98fChfPUZyKDEyNykpLF8ud3JpdGVfc2hpZnQoNCxkLkhpZGRlbiksXy53cml0ZV9zaGlmdCg0LGQuaVRhYklEKSx0MShkLnN0clJlbElELF8pLGtpKGQubmFtZS5zbGljZSgwLDMxKSxfKSxfLmxlbmd0aD5fLmw/Xy5zbGljZSgw''@;'; put 'put ''LF8ubCk6X31mdW5jdGlvbiBfZWUoZCxfKXt2YXIgbT17fTtyZXR1cm4gZC5yZWFkX3NoaWZ0KDQpLG0uQXJjaElEPWQucmVhZF9zaGlmdCg0KSxkLmwrPV8tOCxtfWZ1bmN0aW9uIFRCKGQsXyl7dmFyIG09TWMoKTtyZXR1cm4gSWkobSwiQnJ0QmVnaW5Cb29rIiksSWkobSwiQnJ0RmlsZVZl''@;'; put 'put ''cnNpb24iLGZ1bmN0aW9uIGxSKGQsXyl7X3x8KF89RnIoMTI3KSk7Zm9yKHZhciBtPTA7NCE9bTsrK20pXy53cml0ZV9zaGlmdCg0LDApO3JldHVybiBraSgiU2hlZXRKUyIsXyksa2kodi52ZXJzaW9uLF8pLGtpKHYudmVyc2lvbixfKSxraSgiNzI2MiIsXyksXy5sZW5ndGg+Xy5sP18uc2xp''@;'; put 'put ''Y2UoMCxfLmwpOl99KCkpLElpKG0sIkJydFdiUHJvcCIsZnVuY3Rpb24gdmVlKGQsXyl7X3x8KF89RnIoNzIpKTt2YXIgbT0wO3JldHVybiBkJiZkLmZpbHRlclByaXZhY3kmJihtfD04KSxfLndyaXRlX3NoaWZ0KDQsbSksXy53cml0ZV9zaGlmdCg0LDApLFdjKGQmJmQuQ29kZU5hbWV8fCJU''@;'; put 'put ''aGlzV29ya2Jvb2siLF8pLF8uc2xpY2UoMCxfLmwpfShkLldvcmtib29rJiZkLldvcmtib29rLldCUHJvcHN8fG51bGwpKSxmdW5jdGlvbiBiZWUoZCxfKXtpZihfLldvcmtib29rJiZfLldvcmtib29rLlNoZWV0cyl7Zm9yKHZhciBtPV8uV29ya2Jvb2suU2hlZXRzLFQ9MCxQPS0xLFE9LTE7''@;'; put 'put ''VDxtLmxlbmd0aDsrK1QpIW1bVF18fCFtW1RdLkhpZGRlbiYmLTE9PVA/UD1UOjE9PW1bVF0uSGlkZGVuJiYtMT09USYmKFE9VCk7UT5QfHwoSWkoZCwiQnJ0QmVnaW5Cb29rVmlld3MiKSxJaShkLCJCcnRCb29rVmlldyIsZnVuY3Rpb24geWVlKGQsXyl7cmV0dXJuIF98fChfPUZyKDI5KSks''@;'; put 'put ''Xy53cml0ZV9zaGlmdCgtNCwwKSxfLndyaXRlX3NoaWZ0KC00LDQ2MCksXy53cml0ZV9zaGlmdCg0LDI4ODAwKSxfLndyaXRlX3NoaWZ0KDQsMTc2MDApLF8ud3JpdGVfc2hpZnQoNCw1MDApLF8ud3JpdGVfc2hpZnQoNCxkKSxfLndyaXRlX3NoaWZ0KDQsZCksXy53cml0ZV9zaGlmdCgxLDEy''@;'; put 'put ''MCksXy5sZW5ndGg+Xy5sP18uc2xpY2UoMCxfLmwpOl99KFApKSxJaShkLCJCcnRFbmRCb29rVmlld3MiKSl9fShtLGQpLGZ1bmN0aW9uIE1CKGQsXyl7SWkoZCwiQnJ0QmVnaW5CdW5kbGVTaHMiKTtmb3IodmFyIG09MDttIT1fLlNoZWV0TmFtZXMubGVuZ3RoOysrbSlJaShkLCJCcnRCdW5k''@;'; put 'put ''bGVTaCIsbWVlKHtIaWRkZW46Xy5Xb3JrYm9vayYmXy5Xb3JrYm9vay5TaGVldHMmJl8uV29ya2Jvb2suU2hlZXRzW21dJiZfLldvcmtib29rLlNoZWV0c1ttXS5IaWRkZW58fDAsaVRhYklEOm0rMSxzdHJSZWxJRDoicklkIisobSsxKSxuYW1lOl8uU2hlZXROYW1lc1ttXX0pKTtJaShkLCJC''@;'; put 'put ''cnRFbmRCdW5kbGVTaHMiKX0obSxkKSxJaShtLCJCcnRFbmRCb29rIiksbS5lbmQoKX1mdW5jdGlvbiBNZWUoZCxfLG0sVCxQKXtyZXR1cm4oIi5iaW4iPT09Xy5zbGljZSgtNCk/V1M6alMpKGQsbSxULFApfWZ1bmN0aW9uIFRlZShkLF8sbSxULFApe3JldHVybigiLmJpbiI9PT1fLnNsaWNl''@;'; put 'put ''KC00KT95QjpVOSkoZCxtLFQsUCl9ZnVuY3Rpb24gY1IoZCxfLG0pe3JldHVybigiLmJpbiI9PT1fLnNsaWNlKC00KT9kUzpjSCkoZCxtKX1mdW5jdGlvbiBEQihkLF8sbSl7cmV0dXJuKCIuYmluIj09PV8uc2xpY2UoLTQpP1JROlRRKShkLG0pfXZhciBWOD0vKFtcdzpdKyk9KCg/OiIpKFte''@;'; put 'put ''Il0qKSg/OiIpfCg/OicpKFteJ10qKSg/OicpKS9nLHVSPS8oW1x3Ol0rKT0oKD86IikoPzpbXiJdKikoPzoiKXwoPzonKSg/OlteJ10qKSg/OicpKS87ZnVuY3Rpb24gUjIoZCxfKXt2YXIgbT1kLnNwbGl0KC9ccysvKSxUPVtdO2lmKF98fChUWzBdPW1bMF0pLDE9PT1tLmxlbmd0aClyZXR1''@;'; put 'put ''cm4gVDt2YXIgUSxzZSxkZSxQPWQubWF0Y2goVjgpO2lmKFApZm9yKGRlPTA7ZGUhPVAubGVuZ3RoOysrZGUpLTE9PT0oc2U9KFE9UFtkZV0ubWF0Y2godVIpKVsxXS5pbmRleE9mKCI6IikpP1RbUVsxXV09UVsyXS5zbGljZSgxLFFbMl0ubGVuZ3RoLTEpOlRbInhtbG5zOiI9PT1RWzFdLnNs''@;'; put 'put ''aWNlKDAsNik/InhtbG5zIitRWzFdLnNsaWNlKDYpOlFbMV0uc2xpY2Uoc2UrMSldPVFbMl0uc2xpY2UoMSxRWzJdLmxlbmd0aC0xKTtyZXR1cm4gVH1mdW5jdGlvbiBkUihkKXt2YXIgbT17fTtpZigxPT09ZC5zcGxpdCgvXHMrLykubGVuZ3RoKXJldHVybiBtO3ZhciBQLFEsb2UsVD1kLm1h''@;'; put 'put ''dGNoKFY4KTtpZihUKWZvcihvZT0wO29lIT1ULmxlbmd0aDsrK29lKS0xPT09KFE9KFA9VFtvZV0ubWF0Y2godVIpKVsxXS5pbmRleE9mKCI6IikpP21bUFsxXV09UFsyXS5zbGljZSgxLFBbMl0ubGVuZ3RoLTEpOm1bInhtbG5zOiI9PT1QWzFdLnNsaWNlKDAsNik/InhtbG5zIitQWzFdLnNs''@;'; put 'put ''aWNlKDYpOlBbMV0uc2xpY2UoUSsxKV09UFsyXS5zbGljZSgxLFBbMl0ubGVuZ3RoLTEpO3JldHVybiBtfWZ1bmN0aW9uIHhlZShkKXt2YXIgXz17fTtpZihkLkRlZmF1bHRSb3dIZWlnaHQpe3ZhciBtPXtocHg6NCpwYXJzZUludChkLkRlZmF1bHRSb3dIZWlnaHQpLzN9O1dBKG0pLF8ucm93''@;'; put 'put ''PW19aWYoZC5EZWZhdWx0Q29sV2lkdGgpe3ZhciBUPXt3cHg6NCpwYXJzZUludChkLkRlZmF1bHRDb2xXaWR0aCkvM307QjAoVCksXy5jb2w9VH1yZXR1cm4gX31mdW5jdGlvbiBCeShkLF8sbSxUKXt2YXIgUD1UO3N3aXRjaCgobVswXS5tYXRjaCgvZHQ6ZHQ9IihbXHcuXSspIi8pfHxbIiIs''@;'; put 'put ''IiJdKVsxXSl7Y2FzZSJib29sZWFuIjpQPVRpKFQpO2JyZWFrO2Nhc2UiaTIiOmNhc2UiaW50IjpQPXBhcnNlSW50KFQsMTApO2JyZWFrO2Nhc2UicjQiOmNhc2UiZmxvYXQiOlA9cGFyc2VGbG9hdChUKTticmVhaztjYXNlImRhdGUiOmNhc2UiZGF0ZVRpbWUudHoiOlA9bG4oVCk7YnJlYWs7''@;'; put 'put ''Y2FzZSJpOCI6Y2FzZSJzdHJpbmciOmNhc2UiZml4ZWQiOmNhc2UidXVpZCI6Y2FzZSJiaW4uYmFzZTY0IjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiYmFkIGN1c3Rwcm9wOiIrbVswXSl9ZFtDaShfKV09UH12YXIgcFI9ezA6Ik5vbmUiLDE6IlNpbmdsZSIsMjoiRG91YmxlIiwz''@;'; put 'put ''MzoiU2luZ2xlQWNjb3VudGluZyIsMzQ6IkRvdWJsZUFjY291bnRpbmcifSxBZWU9aGUocFIpO2Z1bmN0aW9uIGtlZShkLF8sbSxUKXtpZihULmNlbGxTdHlsZXMpe2lmKG09bS5yZXBsYWNlKC9ccysvZywiICIpLF8uSW50ZXJpb3Ipe3ZhciBQPV8uSW50ZXJpb3I7UC5QYXR0ZXJuJiYoUC5w''@;'; put 'put ''YXR0ZXJuVHlwZT1tSFtQLlBhdHRlcm5dfHxQLlBhdHRlcm4pLFAuQ29sb3ImJlAuQ29sb3IubWF0Y2goLyNbMC05QS1GYS1mXSovKSYmKFAuZmdDb2xvcj17cmdiOlAuQ29sb3Iuc2xpY2UoMSl9KX0hZnVuY3Rpb24gZ1IoZCl7ZC5Cb3JkZXJzJiYoZC5Cb3JkZXJzLmZvckVhY2goZnVuY3Rp''@;'; put 'put ''b24oXyl7dmFyIG09Xy5Qb3NpdGlvbi50b0xvd2VyQ2FzZSgpO2RbbV09e3N0eWxlOlJlZShfLkxpbmVTdHlsZSwrXy5XZWlnaHQpLGNvbG9yOntyZ2I6KF8uQ29sb3J8fCIjMDAwMDAwIikuc2xpY2UoMSl9fX0pLGRlbGV0ZSBkLkJvcmRlcnMpfShfKTt2YXIgc2UsUT1tLm1hdGNoKC88KD86''@;'; put 'put ''XHcrOik/Rm9udFxzW14+XSo+Lyk7USYmKFRpKChzZT1YcihRWzBdKSkuQm9sZCkmJihfLkJvbGQ9ITApLFRpKHNlLkl0YWxpYykmJihfLkl0YWxpYz0hMCksVGkoc2UuU3RyaWtlVGhyb3VnaCkmJihfLlN0cmlrZT0hMCksc2UuU2l6ZSYmKF8uU2l6ZT0rc2UuU2l6ZSksXy5Gb250TmFtZT1z''@;'; put 'put ''ZS5Gb250TmFtZT9zZS5Gb250TmFtZToiQXJpYWwiLHNlLlVuZGVybGluZSYmKF8uVW5kZXJsaW5lPUFlZVtzZS5VbmRlcmxpbmVdKSxzZS5Db2xvciYmKF8uUkdCPXNlLkNvbG9yLnNsaWNlKC02KSkpLF8uQWxpZ25tZW50JiYoXy5hbGlnbm1lbnQ9e30sXy5BbGlnbm1lbnQuVmVydGljYWwm''@;'; put 'put ''JihfLmFsaWdubWVudC52ZXJ0aWNhbD1fLkFsaWdubWVudC5WZXJ0aWNhbC50b0xvd2VyQ2FzZSgpKSxfLkFsaWdubWVudC5Ib3Jpem9udGFsJiYoXy5hbGlnbm1lbnQuaG9yaXpvbnRhbD1fLkFsaWdubWVudC5Ib3Jpem9udGFsLnRvTG93ZXJDYXNlKCkpLFRpKF8uQWxpZ25tZW50LldyYXBU''@;'; put 'put ''ZXh0fHwiMCIpP18uYWxpZ25tZW50LndyYXBUZXh0PSEwOm51bGw9PV8uQWxpZ25tZW50LldyYXBUZXh0JiZkZWxldGUgXy5hbGlnbm1lbnQud3JhcFRleHQsVGkoXy5BbGlnbm1lbnQuU2hyaW5rVG9GaXR8fCIwIikmJihfLmFsaWdubWVudC5zaHJpbmtUb0ZpdD0hMCksK18uQWxpZ25tZW50''@;'; put 'put ''LkluZGVudCYmKF8uYWxpZ25tZW50LmluZGVudD0rXy5BbGlnbm1lbnQuSW5kZW50fHwwKSwrXy5BbGlnbm1lbnQuUm90YXRlJiYoXy5hbGlnbm1lbnQudGV4dFJvdGF0aW9uPStfLkFsaWdubWVudC5Sb3RhdGV8fDApKX1kW18uSURdPV8sKCJEZWZhdWx0Ij09Xy5JRHx8Ik5vcm1hbCI9PV8u''@;'; put 'put ''TmFtZSkmJiRtKF8pfWZ1bmN0aW9uIFJlZShkLF8pe3N3aXRjaChkKXtjYXNlIk5vbmUiOnJldHVybiJub25lIjtjYXNlIkRhc2giOnJldHVybiJkYXNoZWQiO2Nhc2UiRG90IjpyZXR1cm4iZG90dGVkIjtjYXNlIkRhc2hEb3QiOnJldHVybiJkYXNoRG90IjtjYXNlIkRhc2hEb3REb3QiOnJl''@;'; put 'put ''dHVybiJkYXNoRG90RG90IjtjYXNlIlNsYW50RGFzaERvdCI6cmV0dXJuInNsYW50RGFzaERvdCI7Y2FzZSJEb3VibGUiOnJldHVybiJkb3VibGUiO2Nhc2UiQ29udGludW91cyI6c3dpdGNoKCtffHwwKXtjYXNlIDA6cmV0dXJuImhhaXIiO2Nhc2UgMTpyZXR1cm4idGhpbiI7Y2FzZSAyOnJl''@;'; put 'put ''dHVybiJtZWRpdW0iO2Nhc2UgMzpyZXR1cm4idGhpY2sifXJldHVybiJ0aGluIn1yZXR1cm4gZH1mdW5jdGlvbiBtUihkLF8sbSxULFAsUSxzZSxvZSxkZSxMZSl7dmFyIE5lPSJHZW5lcmFsIixCZT1ULlN0eWxlSUQsWmU9e307TGU9TGV8fHt9O3ZhciBudD1bXSxtdD0wO2Zvcih2b2lkIDA9''@;'; put 'put ''PT1CZSYmb2UmJihCZT1vZS5TdHlsZUlEKSx2b2lkIDA9PT1CZSYmc2UmJihCZT1zZS5TdHlsZUlEKTt2b2lkIDAhPT1RW0JlXTspe3ZhciBRZT1RW0JlXTtpZigiR2VuZXJhbCI9PU5lJiZRZS5uZiYmKE5lPVFbQmVdLm5mKSxRZS5JbnRlcmlvciYmbnQucHVzaChRW0JlXS5JbnRlcmlvciks''@;'; put 'put ''UWUuYWxpZ25tZW50JiYoWmUuYWxpZ25tZW50fHwoWmUuYWxpZ25tZW50PVFyKFFlLmFsaWdubWVudCkpKSxudWxsPT1aZS5ib2xkJiZRZS5Cb2xkJiYoWmUuYm9sZD0hMCksbnVsbD09WmUuaXRhbGljJiZRZS5JdGFsaWMmJihaZS5pdGFsaWM9ITApLG51bGw9PVplLnN0cmlrZSYmUWUuU3Ry''@;'; put 'put ''aWtlJiYoWmUuc3RyaWtlPSEwKSxudWxsPT1aZS5zeiYmUWUuU2l6ZSYmKFplLnN6PVFlLlNpemUpLG51bGw9PVplLm5hbWUmJlFlLkZvbnROYW1lJiYoWmUubmFtZT1RZS5Gb250TmFtZSksbnVsbD09WmUudW5kZXJsaW5lJiZRZS5VbmRlcmxpbmUmJihaZS51bmRlcmxpbmU9UWUuVW5kZXJs''@;'; put 'put ''aW5lKSxudWxsPT1aZS5jb2xvciYmUWUuUkdCJiYoWmUuY29sb3I9e3JnYjpRZS5SR0J9KSxbInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdLmZvckVhY2goZnVuY3Rpb24oRXQpe251bGw9PVplW0V0XSYmUWVbRXRdJiYoWmVbRXRdPVFyKFFlW0V0XSkpfSksIkRlZmF1bHQiPT1CZSli''@;'; put 'put ''cmVhaztCZT1RZS5QYXJlbnR8fCJEZWZhdWx0In1aZS5uYW1lfHwoWmUubmFtZT1RLkRlZmF1bHQmJlEuRGVmYXVsdC5Gb250TmFtZXx8IkFyaWFsIiksWmUuc3p8fChaZS5zej1RLkRlZmF1bHQmJlEuRGVmYXVsdC5TaXplfHwxMik7dmFyIGZ0PSIiO2lmKGR8fFQuRm9ybXVsYXx8IlN0cmlu''@;'; put 'put ''ZyI9PW0uVHlwZXx8Ik51bWJlciI9PW0uVHlwZSlzd2l0Y2gobS5UeXBlKXtjYXNlIkJvb2xlYW4iOlQudD0iYiIsVC52PVRpKGQpO2JyZWFrO2Nhc2UiU3RyaW5nIjpULnQ9InMiLGZ0PWpzKENpKGQpKSxULnY9ZC5pbmRleE9mKCI8Iik+LTE/Q2koX3x8ZCkucmVwbGFjZSgvPFteXSo/Pi9n''@;'; put 'put ''LCIiKTpmdCxkLmluZGV4T2YoIjwiKT4tMSYmKFQuUj1rZi5odG1sX3RvX3JzKENpKGQpKSk7YnJlYWs7Y2FzZSJEYXRlVGltZSI6IloiIT1kLnNsaWNlKC0xKSYmKGQrPSJaIiksVC52PShsbihkKS1uZXcgRGF0ZShEYXRlLlVUQygxODk5LDExLDMwKSkpLzg2NGU1LFQudiE9VC52P1Qudj1D''@;'; put 'put ''aShkKTpULnY8NjAmJihULnY9VC52LTEpLCghTmV8fCJHZW5lcmFsIj09TmUpJiYoTmU9Inl5eXktbW0tZGQiKTtjYXNlIk51bWJlciI6dm9pZCAwPT09VC52JiYoVC52PStkKSxULnR8fChULnQ9Im4iKTticmVhaztjYXNlIkVycm9yIjpULnQ9ImUiLFQudj1IMVtkXSwhMSE9PUxlLmNlbGxU''@;'; put 'put ''ZXh0JiYoVC53PWQpO2JyZWFrO2RlZmF1bHQ6IiI9PWQmJiIiPT1fP1QudD0ieiI6KFQudD0icyIsZnQ9anMoQ2koZCkpLFQudj1kLmluZGV4T2YoIjwiKT4tMT9DaShffHxkKS5yZXBsYWNlKC88W15dKj8+L2csIiIpOmZ0LGQuaW5kZXhPZigiPCIpPi0xJiYoVC5SPWtmLmh0bWxfdG9fcnMo''@;'; put 'put ''Q2koZCkpKSl9ZWxzZSBULnQ9InoiLGRlbGV0ZSBULnY7aWYoZnVuY3Rpb24gZlIoZCxfLG0pe2lmKCJ6IiE9PWQudCl7aWYoIW18fCExIT09bS5jZWxsVGV4dCl0cnl7ZC53PSJlIj09PWQudD9kLnd8fG5sW2Qudl06IkdlbmVyYWwiPT09Xz8ibiI9PT1kLnQ/KDB8ZC52KT09PWQudj9JLl9n''@;'; put 'put ''ZW5lcmFsX2ludChkLnYpOkkuX2dlbmVyYWxfbnVtKGQudik6SS5fZ2VuZXJhbChkLnYpOmZ1bmN0aW9uIGhSKGQsXyl7dmFyIG09bmVbZF18fENpKGQpO3JldHVybiJHZW5lcmFsIj09PW0/SS5fZ2VuZXJhbChfKTpJLmZvcm1hdChtLF8pfShffHwiR2VuZXJhbCIsZC52KX1jYXRjaChRKXtp''@;'; put 'put ''ZihtLldURil0aHJvdyBRfXRyeXt2YXIgVD1uZVtfXXx8X3x8IkdlbmVyYWwiO2lmKG0uY2VsbE5GJiYoZC56PVQpLG0uY2VsbERhdGVzJiYibiI9PWQudCYmSS5pc19kYXRlKFQpKXt2YXIgUD1JLnBhcnNlX2RhdGVfY29kZShkLnYpO1AmJihkLnQ9ImQiLGQudj1uZXcgRGF0ZShQLnksUC5t''@;'; put 'put ''LTEsUC5kLFAuSCxQLk0sUC5TLFAudSkpfX1jYXRjaChRKXtpZihtLldURil0aHJvdyBRfX19KFQsTmUsTGUpLCExIT09TGUuY2VsbEZvcm11bGEpaWYoVC5Gb3JtdWxhKXt2YXIga3Q9Q2koVC5Gb3JtdWxhKTs2MT09a3QuY2hhckNvZGVBdCgwKSYmKGt0PWt0LnNsaWNlKDEpKSxULmY9Ujgo''@;'; put 'put ''a3QsUCksZGVsZXRlIFQuRm9ybXVsYSwiUkMiPT1ULkFycmF5UmFuZ2U/VC5GPVI4KCJSQzpSQyIsUCk6VC5BcnJheVJhbmdlJiYoVC5GPVI4KFQuQXJyYXlSYW5nZSxQKSxkZS5wdXNoKFt5dChULkYpLFQuRl0pKX1lbHNlIGZvcihtdD0wO210PGRlLmxlbmd0aDsrK210KVAucj49ZGVbbXRd''@;'; put 'put ''WzBdLnMuciYmUC5yPD1kZVttdF1bMF0uZS5yJiZQLmM+PWRlW210XVswXS5zLmMmJlAuYzw9ZGVbbXRdWzBdLmUuYyYmKFQuRj1kZVttdF1bMV0pO2lmKExlLmNlbGxTdHlsZXMmJihudC5mb3JFYWNoKGZ1bmN0aW9uKEV0KXshWmUucGF0dGVyblR5cGUmJkV0LnBhdHRlcm5UeXBlJiYoWmUu''@;'; put 'put ''cGF0dGVyblR5cGU9RXQucGF0dGVyblR5cGUpLCFaZS5mZ0NvbG9yJiZFdC5mZ0NvbG9yJiYoWmUuZmdDb2xvcj1FdC5mZ0NvbG9yKX0pLFQucz1aZSksdm9pZCAwIT09VC5TdHlsZUlEJiYoVC5peGZlPVQuU3R5bGVJRCksVC5SJiZULnMpe3ZhciBidD1RcihULnMpO2RlbGV0ZSBidC5ib2xk''@;'; put 'put ''LGRlbGV0ZSBidC5pdGFsaWMsZGVsZXRlIGJ0LnVuZGVybGluZSxkZWxldGUgYnQuc3RyaWtlLFQuUi5mb3JFYWNoKGZ1bmN0aW9uKEV0KXtFdC5zPUhuKFFyKGJ0KSxFdC5zKX0pfX1mdW5jdGlvbiBMQihkKXtkLnQ9ZC52fHwiIixkLnQ9ZC50LnJlcGxhY2UoL1xyXG4vZywiXG4iKS5yZXBs''@;'; put 'put ''YWNlKC9cci9nLCJcbiIpLGQudj1kLnc9ZC5peGZlPXZvaWQgMH1mdW5jdGlvbiBRUyhkKXtpZihJZSYmQnVmZmVyLmlzQnVmZmVyKGQpKXJldHVybiBkLnRvU3RyaW5nKCJ1dGY4Iik7aWYoInN0cmluZyI9PXR5cGVvZiBkKXJldHVybiBkO2lmKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmZCBp''@;'; put 'put ''bnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIFduKE0oSyhkKSkpO3Rocm93IG5ldyBFcnJvcigiQmFkIGlucHV0IGZvcm1hdDogZXhwZWN0ZWQgQnVmZmVyIG9yIHN0cmluZyIpfXZhciBXOT0vPChcLz8pKFteXHM/PjwhXC86XSo6fCkoW15ccz88PjpcL1xbXSspKD86W1xzPzo8XC9dW14+''@;'; put 'put ''XSopPz4vZ207ZnVuY3Rpb24gankoZCxfKXt2YXIgbT1ffHx7fSxUPUYoUVMoZCkpOygiYmluYXJ5Ij09bS50eXBlfHwiYXJyYXkiPT1tLnR5cGV8fCJiYXNlNjQiPT1tLnR5cGUpJiYoVD10eXBlb2YgY3B0YWJsZTwidSI/Y3B0YWJsZS51dGlscy5kZWNvZGUoNjUwMDEsTihUKSk6V24oVCkp''@;'; put 'put ''O3ZhciBQPVQuc2xpY2UoMCwxMDI0KS50b0xvd2VyQ2FzZSgpLFE9ITE7aWYoKDEwMjMmUC5pbmRleE9mKCI+IikpPk1hdGgubWluKDEwMjMmUC5pbmRleE9mKCIsIiksMTAyMyZQLmluZGV4T2YoIjsiKSkpe3ZhciBzZT1RcihtKTtyZXR1cm4gc2UudHlwZT0ic3RyaW5nIix2OC50b193b3Jr''@;'; put 'put ''Ym9vayhULHNlKX1pZigtMT09UC5pbmRleE9mKCI8P3htbCIpJiZbImh0bWwiLCJ0YWJsZSIsImhlYWQiLCJtZXRhIiwic2NyaXB0Iiwic3R5bGUiLCJkaXYiXS5mb3JFYWNoKGZ1bmN0aW9uKExoKXtQLmluZGV4T2YoIjwiK0xoKT49MCYmKFE9ITApfSksUSlyZXR1cm4ga2YudG9fd29ya2Jv''@;'; put 'put ''b2soVCxtKTt2YXIgb2UsTGUsa3IsZGU9W10sTmU9e30sQmU9W10sWmU9bS5kZW5zZT9bXTp7fSxudD0iIixtdD17fSxRZT17fSxmdD17fSxrdD1SMignPERhdGEgc3M6VHlwZT0iU3RyaW5nIj4nKSxidD0wLEV0PTAsVnQ9MCx1bj17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxucj17''@;'; put 'put ''fSxubj17fSxhcj0iIixqbj0wLGtuPVtdLHNyPXt9LGdyPXt9LHFuPTAsX2k9W10sT2k9e30sc289W10sbW89e30sTGk9W10sRG49ITEsT3I9W10sX3I9W10sTW49e30sTnI9MCxqaT0wLGJpPXtTaGVldHM6W10sV0JQcm9wczp7ZGF0ZTE5MDQ6ITF9fSxObz17fTtXOS5sYXN0SW5kZXg9MCxU''@;'; put 'put ''PVQucmVwbGFjZSgvPCEtLShbXHNcU10qPyktLT4vZ20sIiIpO2Zvcih2YXIgWWE9IiI7b2U9VzkuZXhlYyhUKTspc3dpdGNoKG9lWzNdPShZYT1vZVszXSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJkYXRhIjppZigiZGF0YSI9PVlhKXtpZigiLyI9PT1vZVsxXSl7aWYoKExlPWRlLnBvcCgpKVsw''@;'; put 'put ''XSE9PW9lWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK0xlLmpvaW4oInwiKSl9ZWxzZSIvIiE9PW9lWzBdLmNoYXJBdChvZVswXS5sZW5ndGgtMikmJmRlLnB1c2goW29lWzNdLCEwXSk7YnJlYWt9aWYoZGVbZGUubGVuZ3RoLTFdWzFdKWJyZWFrOyIvIj09PW9lWzFdP21SKFQu''@;'; put 'put ''c2xpY2UoYnQsb2UuaW5kZXgpLGFyLGt0LCJjb21tZW50Ij09ZGVbZGUubGVuZ3RoLTFdWzBdP21vOlFlLHtjOkV0LHI6VnR9LG5yLExpW0V0XSxmdCxPcixtKTooYXI9IiIsa3Q9UjIob2VbMF0pLGJ0PW9lLmluZGV4K29lWzBdLmxlbmd0aCk7YnJlYWs7Y2FzZSJjZWxsIjppZigiLyI9PT1v''@;'; put 'put ''ZVsxXXx8Ii8+Ij09PW9lWzBdLnNsaWNlKC0yKSl7aWYoIi8+Ij09PW9lWzBdLnNsaWNlKC0yKSl7aWYoKFFlPWRSKG9lWzBdKSkuSW5kZXgmJihFdD0rUWUuSW5kZXgtMSksRXQ8dW4ucy5jJiYodW4ucy5jPUV0KSxFdD51bi5lLmMmJih1bi5lLmM9RXQpLHNvPVtdLCFtLnNoZWV0U3R1YnMp''@;'; put 'put ''eysrRXQ7YnJlYWt9bVIoIiIsIiIse30sImNvbW1lbnQiPT1kZVtkZS5sZW5ndGgtMV1bMF0/bW86UWUse2M6RXQscjpWdH0sbnIsTGlbRXRdLGZ0LE9yLG0pfWlmKHNvLmxlbmd0aD4wJiYoUWUuYz1zbyksKCFtLnNoZWV0Um93c3x8bS5zaGVldFJvd3M+VnQpJiYodm9pZCAwIT09UWUudnx8''@;'; put 'put ''bS5zaGVldFN0dWJzKSYmKG0uZGVuc2U/KFplW1Z0XXx8KFplW1Z0XT1bXSksWmVbVnRdW0V0XT1RZSk6WmVbbXMoRXQpK3pvKFZ0KV09UWUpLFFlLkhSZWYmJihRZS5sPXtUYXJnZXQ6Q2koUWUuSFJlZil9LFFlLkhSZWZTY3JlZW5UaXAmJihRZS5sLlRvb2x0aXA9UWUuSFJlZlNjcmVlblRp''@;'; put 'put ''cCksZGVsZXRlIFFlLkhSZWYsZGVsZXRlIFFlLkhSZWZTY3JlZW5UaXApLChRZS5NZXJnZUFjcm9zc3x8UWUuTWVyZ2VEb3duKSYmKE5yPUV0KygwfHBhcnNlSW50KFFlLk1lcmdlQWNyb3NzLDEwKSksamk9VnQrKDB8cGFyc2VJbnQoUWUuTWVyZ2VEb3duLDEwKSksKE5yPkV0fHxqaT5WdCkm''@;'; put 'put ''JmtuLnB1c2goe3M6e2M6RXQscjpWdH0sZTp7YzpOcixyOmppfX0pKSxtLnNoZWV0U3R1YnMpaWYoUWUuTWVyZ2VBY3Jvc3N8fFFlLk1lcmdlRG93bil7Zm9yKHZhciB1bz1FdDt1bzw9TnI7Kyt1bylmb3IodmFyIE1zPVZ0O01zPD1qaTsrK01zKSh1bz5FdHx8TXM+VnQpJiYobS5kZW5zZT8o''@;'; put 'put ''WmVbTXNdfHwoWmVbTXNdPVtdKSxaZVtNc11bdW9dPXt0OiJ6In0pOlplW21zKHVvKSt6byhNcyldPXt0OiJ6In0pO0V0PU5yKzF9ZWxzZSsrRXQ7ZWxzZSBRZS5NZXJnZUFjcm9zcz9FdD1OcisxOisrRXR9ZWxzZShRZT1kUihvZVswXSkpLkluZGV4JiYoRXQ9K1FlLkluZGV4LTEpLEV0PHVu''@;'; put 'put ''LnMuYyYmKHVuLnMuYz1FdCksRXQ+dW4uZS5jJiYodW4uZS5jPUV0KSwiLz4iPT09b2VbMF0uc2xpY2UoLTIpJiYrK0V0LHNvPVtdO2JyZWFrO2Nhc2Uicm93IjoiLyI9PT1vZVsxXXx8Ii8+Ij09PW9lWzBdLnNsaWNlKC0yKT8oVnQ8dW4ucy5yJiYodW4ucy5yPVZ0KSxWdD51bi5lLnImJih1''@;'; put 'put ''bi5lLnI9VnQpLCIvPiI9PT1vZVswXS5zbGljZSgtMikmJihmdD1SMihvZVswXSkpLkluZGV4JiYoVnQ9K2Z0LkluZGV4LTEpLEV0PTAsKytWdCk6KChmdD1SMihvZVswXSkpLkluZGV4JiYoVnQ9K2Z0LkluZGV4LTEpLE1uPXt9LCgiMCI9PWZ0LkF1dG9GaXRIZWlnaHR8fGZ0LkhlaWdodCkm''@;'; put 'put ''JihNbi5ocHQ9cGFyc2VGbG9hdChmdC5IZWlnaHQpLE1uLmhweD1OZyhNbi5ocHQpLF9yW1Z0XT1NbiksIjEiPT1mdC5IaWRkZW4mJihNbi5oaWRkZW49ITAsX3JbVnRdPU1uKSk7YnJlYWs7Y2FzZSJ3b3Jrc2hlZXQiOmlmKCIvIj09PW9lWzFdKXtpZigoTGU9ZGUucG9wKCkpWzBdIT09b2Vb''@;'; put 'put ''M10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrTGUuam9pbigifCIpKTtCZS5wdXNoKG50KSx1bi5zLnI8PXVuLmUuciYmdW4ucy5jPD11bi5lLmMmJihaZVsiIXJlZiJdPWh0KHVuKSxtLnNoZWV0Um93cyYmbS5zaGVldFJvd3M8PXVuLmUuciYmKFplWyIhZnVsbHJlZiJdPVplWyIh''@;'; put 'put ''cmVmIl0sdW4uZS5yPW0uc2hlZXRSb3dzLTEsWmVbIiFyZWYiXT1odCh1bikpKSxrbi5sZW5ndGgmJihaZVsiIW1lcmdlcyJdPWtuKSxMaS5sZW5ndGg+MCYmKFplWyIhY29scyJdPUxpKSxfci5sZW5ndGg+MCYmKFplWyIhcm93cyJdPV9yKSxtdCYmKFplWyIhc2hlZXRGb3JtYXQiXT14ZWUo''@;'; put 'put ''bXQpKSxOZVtudF09WmV9ZWxzZSB1bj17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxWdD1FdD0wLGRlLnB1c2goW29lWzNdLCExXSksTGU9UjIob2VbMF0pLG50PUNpKExlLk5hbWUpLFplPW0uZGVuc2U/W106e30sa249W10sT3I9W10sX3I9W10sYmkuU2hlZXRzLnB1c2goTm89e25h''@;'; put 'put ''bWU6bnQsSGlkZGVuOjB9KTticmVhaztjYXNlInRhYmxlIjppZigiLyI9PT1vZVsxXSl7aWYoKExlPWRlLnBvcCgpKVswXSE9PW9lWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK0xlLmpvaW4oInwiKSl9ZWxzZXtpZigiLz4iPT1vZVswXS5zbGljZSgtMikpYnJlYWs7bXQ9UjIo''@;'; put 'put ''b2VbMF0pLGRlLnB1c2goW29lWzNdLCExXSksTGk9W10sRG49ITF9YnJlYWs7Y2FzZSJzdHlsZSI6Ii8iPT09b2VbMV0/a2VlKG5yLG5uLGFyLG0pOihubj1SMihvZVswXSksYXI9IiIpO2JyZWFrO2Nhc2UibnVtYmVyZm9ybWF0Ijpubi5uZj1DaShSMihvZVswXSkuRm9ybWF0fHwiR2VuZXJh''@;'; put 'put ''bCIpLG5lW25uLm5mXSYmKG5uLm5mPW5lW25uLm5mXSk7Zm9yKHZhciBkYT0wOzM5MiE9ZGEmJkkuX3RhYmxlW2RhXSE9bm4ubmY7KytkYSk7aWYoMzkyPT1kYSlmb3IoZGE9NTc7MzkyIT1kYTsrK2RhKWlmKG51bGw9PUkuX3RhYmxlW2RhXSl7SS5sb2FkKG5uLm5mLGRhKTticmVha31icmVh''@;'; put 'put ''aztjYXNlImNvbHVtbiI6aWYoInRhYmxlIiE9PWRlW2RlLmxlbmd0aC0xXVswXXx8Ii8iPT09b2VbMV0pYnJlYWs7aWYoKGtyPVIyKG9lWzBdKSkuSGlkZGVuJiYoa3IuaGlkZGVuPSEwLGRlbGV0ZSBrci5IaWRkZW4pLGtyLldpZHRoP2tyLndweD00KnBhcnNlSW50KGtyLldpZHRoLDEwKS8z''@;'; put 'put ''Oitrci5BdXRvRml0V2lkdGgmJihrci5hdXRvPTEpLCFEbiYma3Iud3B4PjEwKXtEbj0hMCxzZD02O2Zvcih2YXIgJGE9MDskYTxMaS5sZW5ndGg7KyskYSlMaVskYV0mJkIwKExpWyRhXSl9RG4mJkIwKGtyKSxMaVtrci5JbmRleC0xfHxMaS5sZW5ndGhdPWtyO2Zvcih2YXIgU2E9MDtTYTwr''@;'; put 'put ''a3IuU3BhbjsrK1NhKUxpW0xpLmxlbmd0aF09UXIoa3IpO2JyZWFrO2Nhc2UibmFtZWRyYW5nZSI6aWYoIi8iPT09b2VbMV0pYnJlYWs7YmkuTmFtZXN8fChiaS5OYW1lcz1bXSk7dmFyIFBpPVhyKG9lWzBdKSxQYz17TmFtZTpQaS5OYW1lLFJlZjpSOChQaS5SZWZlcnNUby5zbGljZSgxKSx7''@;'; put 'put ''cjowLGM6MH0pfTtiaS5TaGVldHMubGVuZ3RoPjAmJihQYy5TaGVldD1iaS5TaGVldHMubGVuZ3RoLTEpLGJpLk5hbWVzLnB1c2goUGMpO2JyZWFrO2Nhc2UibmFtZWRjZWxsIjpjYXNlImIiOmNhc2UiaSI6Y2FzZSJ1IjpjYXNlInMiOmNhc2UiZW0iOmNhc2UiaDIiOmNhc2UiaDMiOmNhc2Ui''@;'; put 'put ''c3ViIjpjYXNlInN1cCI6Y2FzZSJzcGFuIjpjYXNlInByb3RlY3Rpb24iOmNhc2UicGFyYWdyYXBocyI6Y2FzZSJuYW1lIjpicmVhaztjYXNlImFsaWdubWVudCI6aWYoIW0uY2VsbFN0eWxlc3x8Ii8iPT09b2VbMV0pYnJlYWs7bm4uQWxpZ25tZW50PVIyKG9lWzBdKTticmVhaztjYXNlImJv''@;'; put 'put ''cmRlcnMiOiIvIiE9PW9lWzFdJiYobm4uQm9yZGVycz1bXSk7YnJlYWs7Y2FzZSJib3JkZXIiOmlmKCIvIj09PW9lWzFdKWJyZWFrO25uLkJvcmRlcnN8fChubi5Cb3JkZXJzPVtdKSxubi5Cb3JkZXJzLnB1c2goUjIob2VbMF0pKTticmVhaztjYXNlImZvbnQiOmlmKCIvPiI9PT1vZVswXS5z''@;'; put 'put ''bGljZSgtMikpe2FyKz1vZVswXTticmVha30iLyI9PT1vZVsxXT9hcis9VC5zbGljZShqbixvZS5pbmRleCtvZVswXS5sZW5ndGgpOmpuPW9lLmluZGV4O2JyZWFrO2Nhc2UiaW50ZXJpb3IiOmlmKCFtLmNlbGxTdHlsZXN8fCIvIj09PW9lWzFdKWJyZWFrO25uLkludGVyaW9yPVIyKG9lWzBd''@;'; put 'put ''KTticmVhaztjYXNlImF1dGhvciI6Y2FzZSJ0aXRsZSI6Y2FzZSJkZXNjcmlwdGlvbiI6Y2FzZSJjcmVhdGVkIjpjYXNlImtleXdvcmRzIjpjYXNlInN1YmplY3QiOmNhc2UiY2F0ZWdvcnkiOmNhc2UiY29tcGFueSI6Y2FzZSJsYXN0YXV0aG9yIjpjYXNlImxhc3RzYXZlZCI6Y2FzZSJsYXN0''@;'; put 'put ''cHJpbnRlZCI6Y2FzZSJ2ZXJzaW9uIjpjYXNlInJldmlzaW9uIjpjYXNlInRvdGFsdGltZSI6Y2FzZSJoeXBlcmxpbmtiYXNlIjpjYXNlIm1hbmFnZXIiOmNhc2UiY29udGVudHN0YXR1cyI6Y2FzZSJpZGVudGlmaWVyIjpjYXNlImxhbmd1YWdlIjpjYXNlImFwcG5hbWUiOmlmKCIvPiI9PT1v''@;'; put 'put ''ZVswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09b2VbMV0/bWEoc3IsWWEsVC5zbGljZShxbixvZS5pbmRleCkpOnFuPW9lLmluZGV4K29lWzBdLmxlbmd0aDticmVhaztjYXNlInN0eWxlcyI6Y2FzZSJ3b3JrYm9vayI6aWYoIi8iPT09b2VbMV0pe2lmKChMZT1kZS5wb3AoKSlbMF0hPT1vZVsz''@;'; put 'put ''XSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitMZS5qb2luKCJ8IikpfWVsc2UgZGUucHVzaChbb2VbM10sITFdKTticmVhaztjYXNlImNvbW1lbnQiOmlmKCIvIj09PW9lWzFdKXtpZigoTGU9ZGUucG9wKCkpWzBdIT09b2VbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIr''@;'; put 'put ''TGUuam9pbigifCIpKTtMQihtbyksc28ucHVzaChtbyl9ZWxzZSBkZS5wdXNoKFtvZVszXSwhMV0pLG1vPXthOihMZT1SMihvZVswXSkpLkF1dGhvcn07YnJlYWs7Y2FzZSJhdXRvZmlsdGVyIjppZigiLyI9PT1vZVsxXSl7aWYoKExlPWRlLnBvcCgpKVswXSE9PW9lWzNdKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiQmFkIHN0YXRlOiAiK0xlLmpvaW4oInwiKSl9ZWxzZSBpZigiLyIhPT1vZVswXS5jaGFyQXQob2VbMF0ubGVuZ3RoLTIpKXt2YXIgeG49UjIob2VbMF0pO1plWyIhYXV0b2ZpbHRlciJdPXtyZWY6UjgoeG4uUmFuZ2UpLnJlcGxhY2UoL1wkL2csIiIpfSxkZS5wdXNoKFtvZVszXSwh''@;'; put 'put ''MF0pfWJyZWFrO2Nhc2UiZGF0YXZhbGlkYXRpb24iOmlmKFplWyIhdmFsaWRhdGlvbnMiXXx8KFplWyIhdmFsaWRhdGlvbnMiXT1bXSksIi8iPT09b2VbMV0pe2lmKChMZT1kZS5wb3AoKSlbMF0hPT1vZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitMZS5qb2luKCJ8IikpfWVs''@;'; put 'put ''c2UiLyIhPT1vZVswXS5jaGFyQXQob2VbMF0ubGVuZ3RoLTIpJiZkZS5wdXNoKFtvZVszXSwhMF0pLE9pPXt9O2JyZWFrO2Nhc2UicGl4ZWxzcGVyaW5jaCI6aWYoIi8iPT09b2VbMV0pe3ZhciB4bD0rVC5zbGljZShidCxvZS5pbmRleCk7KDcyPT14bHx8OTY9PXhsKSYmZ1MoeGwpfWVsc2Ug''@;'; put 'put ''YnQ9b2UuaW5kZXgrb2VbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UiY29tcG9uZW50b3B0aW9ucyI6Y2FzZSJkb2N1bWVudHByb3BlcnRpZXMiOmNhc2UiY3VzdG9tZG9jdW1lbnRwcm9wZXJ0aWVzIjpjYXNlIm9mZmljZWRvY3VtZW50c2V0dGluZ3MiOmNhc2UicGl2b3R0YWJsZSI6Y2FzZSJwaXZv''@;'; put 'put ''dGNhY2hlIjpjYXNlIm5hbWVzIjpjYXNlIm1hcGluZm8iOmNhc2UicGFnZWJyZWFrcyI6Y2FzZSJxdWVyeXRhYmxlIjpjYXNlInNvcnRpbmciOmNhc2Uic2NoZW1hIjpjYXNlImNvbmRpdGlvbmFsZm9ybWF0dGluZyI6Y2FzZSJzbWFydHRhZ3R5cGUiOmNhc2Uic21hcnR0YWdzIjpjYXNlImV4''@;'; put 'put ''Y2Vsd29ya2Jvb2siOmNhc2Uid29ya2Jvb2tvcHRpb25zIjpjYXNlIndvcmtzaGVldG9wdGlvbnMiOmlmKCIvIj09PW9lWzFdKXtpZigoTGU9ZGUucG9wKCkpWzBdIT09b2VbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrTGUuam9pbigifCIpKX1lbHNlIi8iIT09b2VbMF0uY2hh''@;'; put 'put ''ckF0KG9lWzBdLmxlbmd0aC0yKSYmZGUucHVzaChbb2VbM10sITBdKTticmVhaztkZWZhdWx0OmlmKDA9PWRlLmxlbmd0aCYmImRvY3VtZW50Ij09b2VbM118fDA9PWRlLmxlbmd0aCYmInVvZiI9PW9lWzNdKXJldHVybiBXeShULG0pO3ZhciBxbD0hMDtzd2l0Y2goZGVbZGUubGVuZ3RoLTFd''@;'; put 'put ''WzBdKXtjYXNlIm9mZmljZWRvY3VtZW50c2V0dGluZ3MiOnN3aXRjaChvZVszXSl7Y2FzZSJhbGxvd3BuZyI6Y2FzZSJyZW1vdmVwZXJzb25hbGluZm9ybWF0aW9uIjpjYXNlImRvd25sb2FkY29tcG9uZW50cyI6Y2FzZSJsb2NhdGlvbm9mY29tcG9uZW50cyI6Y2FzZSJjb2xvcnMiOmNhc2Ui''@;'; put 'put ''Y29sb3IiOmNhc2UiaW5kZXgiOmNhc2UicmdiIjpjYXNlInRhcmdldHNjcmVlbnNpemUiOmNhc2UicmVhZG9ubHlyZWNvbW1lbmRlZCI6YnJlYWs7ZGVmYXVsdDpxbD0hMX1icmVhaztjYXNlImNvbXBvbmVudG9wdGlvbnMiOnN3aXRjaChvZVszXSl7Y2FzZSJ0b29sYmFyIjpjYXNlImhpZGVv''@;'; put 'put ''ZmZpY2Vsb2dvIjpjYXNlInNwcmVhZHNoZWV0YXV0b2ZpdCI6Y2FzZSJsYWJlbCI6Y2FzZSJjYXB0aW9uIjpjYXNlIm1heGhlaWdodCI6Y2FzZSJtYXh3aWR0aCI6Y2FzZSJuZXh0c2hlZXRudW1iZXIiOmJyZWFrO2RlZmF1bHQ6cWw9ITF9YnJlYWs7Y2FzZSJleGNlbHdvcmtib29rIjpzd2l0''@;'; put 'put ''Y2gob2VbM10pe2Nhc2UiZGF0ZTE5MDQiOmJpLldCUHJvcHMuZGF0ZTE5MDQ9ITA7YnJlYWs7Y2FzZSJ3aW5kb3doZWlnaHQiOmNhc2Uid2luZG93d2lkdGgiOmNhc2Uid2luZG93dG9weCI6Y2FzZSJ3aW5kb3d0b3B5IjpjYXNlInRhYnJhdGlvIjpjYXNlInByb3RlY3RzdHJ1Y3R1cmUiOmNh''@;'; put 'put ''c2UicHJvdGVjdHdpbmRvdyI6Y2FzZSJwcm90ZWN0d2luZG93cyI6Y2FzZSJhY3RpdmVzaGVldCI6Y2FzZSJkaXNwbGF5aW5rbm90ZXMiOmNhc2UiZmlyc3R2aXNpYmxlc2hlZXQiOmNhc2Uic3VwYm9vayI6Y2FzZSJzaGVldG5hbWUiOmNhc2Uic2hlZXRpbmRleCI6Y2FzZSJzaGVldGluZGV4''@;'; put 'put ''Zmlyc3QiOmNhc2Uic2hlZXRpbmRleGxhc3QiOmNhc2UiZGxsIjpjYXNlImFjY2VwdGxhYmVsc2luZm9ybXVsYXMiOmNhc2UiZG9ub3RzYXZlbGlua3ZhbHVlcyI6Y2FzZSJpdGVyYXRpb24iOmNhc2UibWF4aXRlcmF0aW9ucyI6Y2FzZSJtYXhjaGFuZ2UiOmNhc2UicGF0aCI6Y2FzZSJ4Y3Qi''@;'; put 'put ''OmNhc2UiY291bnQiOmNhc2Uic2VsZWN0ZWRzaGVldHMiOmNhc2UiY2FsY3VsYXRpb24iOmNhc2UidW5jYWxjZWQiOmNhc2Uic3RhcnR1cHByb21wdCI6Y2FzZSJjcm4iOmNhc2UiZXh0ZXJubmFtZSI6Y2FzZSJmb3JtdWxhIjpjYXNlImNvbGZpcnN0IjpjYXNlImNvbGxhc3QiOmNhc2Uid2Fu''@;'; put 'put ''dGFkdmlzZSI6Y2FzZSJib29sZWFuIjpjYXNlImVycm9yIjpjYXNlInRleHQiOmNhc2Uib2xlIjpjYXNlIm5vYXV0b3JlY292ZXIiOmNhc2UicHVibGlzaG9iamVjdHMiOmNhc2UiZG9ub3RjYWxjdWxhdGViZWZvcmVzYXZlIjpjYXNlIm51bWJlciI6Y2FzZSJyZWZtb2RlcjFjMSI6Y2FzZSJl''@;'; put 'put ''bWJlZHNhdmVzbWFydHRhZ3MiOmJyZWFrO2RlZmF1bHQ6cWw9ITF9YnJlYWs7Y2FzZSJ3b3JrYm9va29wdGlvbnMiOnN3aXRjaChvZVszXSl7Y2FzZSJvd2N2ZXJzaW9uIjpjYXNlImhlaWdodCI6Y2FzZSJ3aWR0aCI6YnJlYWs7ZGVmYXVsdDpxbD0hMX1icmVhaztjYXNlIndvcmtzaGVldG9w''@;'; put 'put ''dGlvbnMiOnN3aXRjaChvZVszXSl7Y2FzZSJ2aXNpYmxlIjppZigiLz4iIT09b2VbMF0uc2xpY2UoLTIpKWlmKCIvIj09PW9lWzFdKXN3aXRjaChULnNsaWNlKHFuLG9lLmluZGV4KSl7Y2FzZSJTaGVldEhpZGRlbiI6Tm8uSGlkZGVuPTE7YnJlYWs7Y2FzZSJTaGVldFZlcnlIaWRkZW4iOk5v''@;'; put 'put ''LkhpZGRlbj0yfWVsc2UgcW49b2UuaW5kZXgrb2VbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UiaGVhZGVyIjpaZVsiIW1hcmdpbnMiXXx8TDgoWmVbIiFtYXJnaW5zIl09e30sInhsbWwiKSxaZVsiIW1hcmdpbnMiXS5oZWFkZXI9WHIob2VbMF0pLk1hcmdpbjticmVhaztjYXNlImZvb3RlciI6WmVb''@;'; put 'put ''IiFtYXJnaW5zIl18fEw4KFplWyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksWmVbIiFtYXJnaW5zIl0uZm9vdGVyPVhyKG9lWzBdKS5NYXJnaW47YnJlYWs7Y2FzZSJwYWdlbWFyZ2lucyI6dmFyIGNoPVhyKG9lWzBdKTtaZVsiIW1hcmdpbnMiXXx8TDgoWmVbIiFtYXJnaW5zIl09e30sInhsbWwi''@;'; put 'put ''KSxjaC5Ub3AmJihaZVsiIW1hcmdpbnMiXS50b3A9Y2guVG9wKSxjaC5MZWZ0JiYoWmVbIiFtYXJnaW5zIl0ubGVmdD1jaC5MZWZ0KSxjaC5SaWdodCYmKFplWyIhbWFyZ2lucyJdLnJpZ2h0PWNoLlJpZ2h0KSxjaC5Cb3R0b20mJihaZVsiIW1hcmdpbnMiXS5ib3R0b209Y2guQm90dG9tKTti''@;'; put 'put ''cmVhaztjYXNlImRpc3BsYXlyaWdodHRvbGVmdCI6YmkuVmlld3N8fChiaS5WaWV3cz1bXSksYmkuVmlld3NbMF18fChiaS5WaWV3c1swXT17fSksYmkuVmlld3NbMF0uUlRMPSEwO2JyZWFrO2Nhc2UiZnJlZXplcGFuZXMiOmNhc2UiZnJvemVubm9zcGxpdCI6Y2FzZSJhY3RpdmVyb3ciOmNh''@;'; put 'put ''c2UiYWN0aXZlY29sIjpjYXNlInRvcHJvd2JvdHRvbXBhbmUiOmNhc2UibGVmdGNvbHVtbnJpZ2h0cGFuZSI6Y2FzZSJ1bnN5bmNlZCI6Y2FzZSJwcmludCI6Y2FzZSJwcmludGVycm9ycyI6Y2FzZSJwYW5lcyI6Y2FzZSJzY2FsZSI6Y2FzZSJwYW5lIjpjYXNlIm51bWJlciI6Y2FzZSJsYXlv''@;'; put 'put ''dXQiOmNhc2UicGFnZXNldHVwIjpjYXNlInNlbGVjdGVkIjpjYXNlInByb3RlY3RvYmplY3RzIjpjYXNlImVuYWJsZXNlbGVjdGlvbiI6Y2FzZSJwcm90ZWN0c2NlbmFyaW9zIjpjYXNlInZhbGlkcHJpbnRlcmluZm8iOmNhc2UiaG9yaXpvbnRhbHJlc29sdXRpb24iOmNhc2UidmVydGljYWxy''@;'; put 'put ''ZXNvbHV0aW9uIjpjYXNlIm51bWJlcm9mY29waWVzIjpjYXNlImFjdGl2ZXBhbmUiOmNhc2UidG9wcm93dmlzaWJsZSI6Y2FzZSJsZWZ0Y29sdW1udmlzaWJsZSI6Y2FzZSJmaXR0b3BhZ2UiOmNhc2UicmFuZ2VzZWxlY3Rpb24iOmNhc2UicGFwZXJzaXplaW5kZXgiOmNhc2UicGFnZWxheW91''@;'; put 'put ''dHpvb20iOmNhc2UicGFnZWJyZWFrem9vbSI6Y2FzZSJmaWx0ZXJvbiI6Y2FzZSJmaXR3aWR0aCI6Y2FzZSJmaXRoZWlnaHQiOmNhc2UiY29tbWVudHNsYXlvdXQiOmNhc2Uiem9vbSI6Y2FzZSJsZWZ0dG9yaWdodCI6Y2FzZSJncmlkbGluZXMiOmNhc2UiYWxsb3dzb3J0IjpjYXNlImFsbG93''@;'; put 'put ''ZmlsdGVyIjpjYXNlImFsbG93aW5zZXJ0cm93cyI6Y2FzZSJhbGxvd2RlbGV0ZXJvd3MiOmNhc2UiYWxsb3dpbnNlcnRjb2xzIjpjYXNlImFsbG93ZGVsZXRlY29scyI6Y2FzZSJhbGxvd2luc2VydGh5cGVybGlua3MiOmNhc2UiYWxsb3dmb3JtYXRjZWxscyI6Y2FzZSJhbGxvd3NpemVjb2xz''@;'; put 'put ''IjpjYXNlImFsbG93c2l6ZXJvd3MiOmNhc2UidGFiY29sb3JpbmRleCI6Y2FzZSJkb25vdGRpc3BsYXloZWFkaW5ncyI6Y2FzZSJzaG93cGFnZWxheW91dHpvb20iOmNhc2UiYmxhY2thbmR3aGl0ZSI6Y2FzZSJkb25vdGRpc3BsYXl6ZXJvcyI6Y2FzZSJkaXNwbGF5cGFnZWJyZWFrIjpjYXNl''@;'; put 'put ''InJvd2NvbGhlYWRpbmdzIjpjYXNlImRvbm90ZGlzcGxheW91dGxpbmUiOmNhc2Uibm9vcmllbnRhdGlvbiI6Y2FzZSJhbGxvd3VzZXBpdm90dGFibGVzIjpjYXNlInplcm9oZWlnaHQiOmNhc2Uidmlld2FibGVyYW5nZSI6Y2FzZSJzZWxlY3Rpb24iOmNhc2UicHJvdGVjdGNvbnRlbnRzIjpi''@;'; put 'put ''cmVhaztjYXNlInNwbGl0aG9yaXpvbnRhbCI6Y2FzZSJzcGxpdHZlcnRpY2FsIjppZigiLz4iIT09b2VbMF0uc2xpY2UoLTIpKWlmKCIvIj09b2VbMV0pe1plWyIhZnJlZXplIl18fChaZVsiIWZyZWV6ZSJdPSJBMSIpO3ZhciBFZD1JcyhaZVsiIWZyZWV6ZSJdKTsic3BsaXRob3Jpem9udGFs''@;'; put 'put ''Ij09b2VbM10/RWQucj0rVC5zbGljZShxbixvZS5pbmRleCk6RWQuYz0rVC5zbGljZShxbixvZS5pbmRleCksWmVbIiFmcmVlemUiXT1xaShFZCl9ZWxzZSBxbj1vZS5pbmRleCtvZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJkb25vdGRpc3BsYXlncmlkbGluZXMiOlplWyIhZ3JpZGxpbmVzIl09''@;'; put 'put ''ITE7YnJlYWs7Y2FzZSJub3N1bW1hcnlyb3dzYmVsb3dkZXRhaWwiOlplWyIhb3V0bGluZSJdfHwoWmVbIiFvdXRsaW5lIl09e30pLFplWyIhb3V0bGluZSJdLmFib3ZlPSEwO2JyZWFrO2Nhc2Uibm9zdW1tYXJ5Y29sdW1uc3JpZ2h0ZGV0YWlsIjpaZVsiIW91dGxpbmUiXXx8KFplWyIhb3V0''@;'; put 'put ''bGluZSJdPXt9KSxaZVsiIW91dGxpbmUiXS5sZWZ0PSEwO2JyZWFrO2RlZmF1bHQ6cWw9ITF9YnJlYWs7Y2FzZSJwaXZvdHRhYmxlIjpjYXNlInBpdm90Y2FjaGUiOnN3aXRjaChvZVszXSl7Y2FzZSJpbW1lZGlhdGVpdGVtc29uZHJvcCI6Y2FzZSJzaG93cGFnZW11bHRpcGxlaXRlbWxhYmVs''@;'; put 'put ''IjpjYXNlImNvbXBhY3Ryb3dpbmRlbnQiOmNhc2UibG9jYXRpb24iOmNhc2UicGl2b3RmaWVsZCI6Y2FzZSJvcmllbnRhdGlvbiI6Y2FzZSJsYXlvdXRmb3JtIjpjYXNlImxheW91dHN1YnRvdGFsbG9jYXRpb24iOmNhc2UibGF5b3V0Y29tcGFjdHJvdyI6Y2FzZSJwb3NpdGlvbiI6Y2FzZSJw''@;'; put 'put ''aXZvdGl0ZW0iOmNhc2UiZGF0YXR5cGUiOmNhc2UiZGF0YWZpZWxkIjpjYXNlInNvdXJjZW5hbWUiOmNhc2UicGFyZW50ZmllbGQiOmNhc2UicHRsaW5laXRlbXMiOmNhc2UicHRsaW5laXRlbSI6Y2FzZSJjb3VudG9mc2FtZWl0ZW1zIjpjYXNlIml0ZW0iOmNhc2UiaXRlbXR5cGUiOmNhc2Ui''@;'; put 'put ''cHRzb3VyY2UiOmNhc2UiY2FjaGVpbmRleCI6Y2FzZSJjb25zb2xpZGF0aW9ucmVmZXJlbmNlIjpjYXNlImZpbGVuYW1lIjpjYXNlInJlZmVyZW5jZSI6Y2FzZSJub2NvbHVtbmdyYW5kIjpjYXNlIm5vcm93Z3JhbmQiOmNhc2UiYmxhbmtsaW5lYWZ0ZXJpdGVtcyI6Y2FzZSJoaWRkZW4iOmNh''@;'; put 'put ''c2Uic3VidG90YWwiOmNhc2UiYmFzZWZpZWxkIjpjYXNlIm1hcGNoaWxkaXRlbXMiOmNhc2UiZnVuY3Rpb24iOmNhc2UicmVmcmVzaG9uZmlsZW9wZW4iOmNhc2UicHJpbnRzZXR0aXRsZXMiOmNhc2UibWVyZ2VsYWJlbHMiOmNhc2UiZGVmYXVsdHZlcnNpb24iOmNhc2UicmVmcmVzaG5hbWUi''@;'; put 'put ''OmNhc2UicmVmcmVzaGRhdGUiOmNhc2UicmVmcmVzaGRhdGVjb3B5IjpjYXNlInZlcnNpb25sYXN0cmVmcmVzaCI6Y2FzZSJ2ZXJzaW9ubGFzdHVwZGF0ZSI6Y2FzZSJ2ZXJzaW9udXBkYXRlYWJsZW1pbiI6Y2FzZSJ2ZXJzaW9ucmVmcmVzaGFibGVtaW4iOmNhc2UiY2FsY3VsYXRpb24iOmJy''@;'; put 'put ''ZWFrO2RlZmF1bHQ6cWw9ITF9YnJlYWs7Y2FzZSJwYWdlYnJlYWtzIjpzd2l0Y2gob2VbM10pe2Nhc2UiY29sYnJlYWtzIjpjYXNlImNvbGJyZWFrIjpjYXNlInJvd2JyZWFrcyI6Y2FzZSJyb3dicmVhayI6Y2FzZSJjb2xzdGFydCI6Y2FzZSJjb2xlbmQiOmNhc2Uicm93ZW5kIjpicmVhaztk''@;'; put 'put ''ZWZhdWx0OnFsPSExfWJyZWFrO2Nhc2UiYXV0b2ZpbHRlciI6c3dpdGNoKG9lWzNdKXtjYXNlImF1dG9maWx0ZXJjb2x1bW4iOmNhc2UiYXV0b2ZpbHRlcmNvbmRpdGlvbiI6Y2FzZSJhdXRvZmlsdGVyYW5kIjpjYXNlImF1dG9maWx0ZXJvciI6YnJlYWs7ZGVmYXVsdDpxbD0hMX1icmVhaztj''@;'; put 'put ''YXNlInF1ZXJ5dGFibGUiOnN3aXRjaChvZVszXSl7Y2FzZSJpZCI6Y2FzZSJhdXRvZm9ybWF0Zm9udCI6Y2FzZSJhdXRvZm9ybWF0cGF0dGVybiI6Y2FzZSJxdWVyeXNvdXJjZSI6Y2FzZSJxdWVyeXR5cGUiOmNhc2UiZW5hYmxlcmVkaXJlY3Rpb25zIjpjYXNlInJlZnJlc2hlZGlueGw5Ijpj''@;'; put 'put ''YXNlInVybHN0cmluZyI6Y2FzZSJodG1sdGFibGVzIjpjYXNlImNvbm5lY3Rpb24iOmNhc2UiY29tbWFuZHRleHQiOmNhc2UicmVmcmVzaGluZm8iOmNhc2Uibm90aXRsZXMiOmNhc2UibmV4dGlkIjpjYXNlImNvbHVtbmluZm8iOmNhc2Uib3ZlcndyaXRlY2VsbHMiOmNhc2UiZG9ub3Rwcm9t''@;'; put 'put ''cHRmb3JmaWxlIjpjYXNlInRleHR3aXphcmRzZXR0aW5ncyI6Y2FzZSJzb3VyY2UiOmNhc2UibnVtYmVyIjpjYXNlImRlY2ltYWwiOmNhc2UidGhvdXNhbmRzZXBhcmF0b3IiOmNhc2UidHJhaWxpbmdtaW51c251bWJlcnMiOmNhc2UiZm9ybWF0c2V0dGluZ3MiOmNhc2UiZmllbGR0eXBlIjpj''@;'; put 'put ''YXNlImRlbGltaXRlcnMiOmNhc2UidGFiIjpjYXNlImNvbW1hIjpjYXNlImF1dG9mb3JtYXRuYW1lIjpjYXNlInZlcnNpb25sYXN0ZWRpdCI6Y2FzZSJ2ZXJzaW9ubGFzdHJlZnJlc2giOmJyZWFrO2RlZmF1bHQ6cWw9ITF9YnJlYWs7Y2FzZSJkYXRhdmFsaWRhdGlvbiI6c3dpdGNoKG9lWzNd''@;'; put 'put ''KXtjYXNlInJhbmdlIjpPaS5yZWY9b2U7YnJlYWs7Y2FzZSJ0eXBlIjpjYXNlIm1pbiI6Y2FzZSJtYXgiOmNhc2Uic29ydCI6Y2FzZSJkZXNjZW5kaW5nIjpjYXNlIm9yZGVyIjpjYXNlImNhc2VzZW5zaXRpdmUiOmNhc2UidmFsdWUiOmNhc2UiZXJyb3JzdHlsZSI6Y2FzZSJlcnJvcm1lc3Nh''@;'; put 'put ''Z2UiOmNhc2UiZXJyb3J0aXRsZSI6Y2FzZSJpbnB1dG1lc3NhZ2UiOmNhc2UiaW5wdXR0aXRsZSI6Y2FzZSJjb21ib2hpZGUiOmNhc2UiaW5wdXRoaWRlIjpjYXNlImNvbmRpdGlvbiI6Y2FzZSJxdWFsaWZpZXIiOmNhc2UidXNlYmxhbmsiOmNhc2UidmFsdWUxIjpjYXNlInZhbHVlMiI6Y2Fz''@;'; put 'put ''ZSJmb3JtYXQiOmNhc2UiY2VsbHJhbmdlbGlzdCI6YnJlYWs7ZGVmYXVsdDpxbD0hMX1icmVhaztjYXNlInNvcnRpbmciOmNhc2UiY29uZGl0aW9uYWxmb3JtYXR0aW5nIjpzd2l0Y2gob2VbM10pe2Nhc2UicmFuZ2UiOmNhc2UidHlwZSI6Y2FzZSJtaW4iOmNhc2UibWF4IjpjYXNlInNvcnQi''@;'; put 'put ''OmNhc2UiZGVzY2VuZGluZyI6Y2FzZSJvcmRlciI6Y2FzZSJjYXNlc2Vuc2l0aXZlIjpjYXNlInZhbHVlIjpjYXNlImVycm9yc3R5bGUiOmNhc2UiZXJyb3JtZXNzYWdlIjpjYXNlImVycm9ydGl0bGUiOmNhc2UiY2VsbHJhbmdlbGlzdCI6Y2FzZSJpbnB1dG1lc3NhZ2UiOmNhc2UiaW5wdXR0''@;'; put 'put ''aXRsZSI6Y2FzZSJjb21ib2hpZGUiOmNhc2UiaW5wdXRoaWRlIjpjYXNlImNvbmRpdGlvbiI6Y2FzZSJxdWFsaWZpZXIiOmNhc2UidXNlYmxhbmsiOmNhc2UidmFsdWUxIjpjYXNlInZhbHVlMiI6Y2FzZSJmb3JtYXQiOmJyZWFrO2RlZmF1bHQ6cWw9ITF9YnJlYWs7Y2FzZSJtYXBpbmZvIjpj''@;'; put 'put ''YXNlInNjaGVtYSI6Y2FzZSJkYXRhIjpzd2l0Y2gob2VbM10pe2Nhc2UibWFwIjpjYXNlImVudHJ5IjpjYXNlInJhbmdlIjpjYXNlInhwYXRoIjpjYXNlImZpZWxkIjpjYXNlInhzZHR5cGUiOmNhc2UiZmlsdGVyb24iOmNhc2UiYWdncmVnYXRlIjpjYXNlImVsZW1lbnR0eXBlIjpjYXNlImF0''@;'; put 'put ''dHJpYnV0ZXR5cGUiOmNhc2Uic2NoZW1hIjpjYXNlImVsZW1lbnQiOmNhc2UiY29tcGxleHR5cGUiOmNhc2UiZGF0YXR5cGUiOmNhc2UiYWxsIjpjYXNlImF0dHJpYnV0ZSI6Y2FzZSJleHRlbmRzIjpjYXNlInJvdyI6YnJlYWs7ZGVmYXVsdDpxbD0hMX1icmVhaztjYXNlInNtYXJ0dGFncyI6''@;'; put 'put ''YnJlYWs7ZGVmYXVsdDpxbD0hMX1pZihxbHx8b2VbM10ubWF0Y2goLyFcW0NEQVRBLykpYnJlYWs7aWYoIWRlW2RlLmxlbmd0aC0xXVsxXSl0aHJvdyJVbnJlY29nbml6ZWQgdGFnOiAiK29lWzNdKyJ8IitkZS5qb2luKCJ8Iik7aWYoImN1c3RvbWRvY3VtZW50cHJvcGVydGllcyI9PT1kZVtk''@;'; put 'put ''ZS5sZW5ndGgtMV1bMF0pe2lmKCIvPiI9PT1vZVswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09b2VbMV0/QnkoZ3IsWWEsX2ksVC5zbGljZShxbixvZS5pbmRleCkpOihfaT1vZSxxbj1vZS5pbmRleCtvZVswXS5sZW5ndGgpO2JyZWFrfWlmKG0uV1RGKXRocm93IlVucmVjb2duaXplZCB0YWc6''@;'; put 'put ''ICIrb2VbM10rInwiK2RlLmpvaW4oInwiKX12YXIgemQ9e307cmV0dXJuIW0uYm9va1NoZWV0cyYmIW0uYm9va1Byb3BzJiYoemQuU2hlZXRzPU5lKSx6ZC5TaGVldE5hbWVzPUJlLHpkLldvcmtib29rPWJpLHpkLlNTRj1JLmdldF90YWJsZSgpLHpkLlByb3BzPXNyLHpkLkN1c3Rwcm9wcz1n''@;'; put 'put ''cix6ZC5TaGVldHMmJnpkLlNoZWV0TmFtZXMuZm9yRWFjaChmdW5jdGlvbihMaCl7dmFyIGdjPXpkLlNoZWV0c1tMaF07Z2NbIiFtZXJnZXMiXSYmZ2NbIiFtZXJnZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKE50KXsic3RyaW5nIj09dHlwZW9mIE50JiYoTnQ9di51dGlscy5kZWNvZGVfcmFuZ2Uo''@;'; put 'put ''TnQpKTt2YXIgaG49di51dGlscy5lbmNvZGVfY2VsbChOdC5zKSxQbj1BcnJheS5pc0FycmF5KGdjKT8oZ2NbTnQucy5yXXx8W10pW050LnMuY106Z2NbaG5dO1BuJiZQbi5zJiYobnVsbCE9UG4ucy50b3AmJlUxLnNoZWV0X3NldF9yYW5nZV9zdHlsZShnYyxOdCx7dG9wOlBuLnMudG9wfSks''@;'; put 'put ''bnVsbCE9UG4ucy5ib3R0b20mJlUxLnNoZWV0X3NldF9yYW5nZV9zdHlsZShnYyxOdCx7Ym90dG9tOlBuLnMuYm90dG9tfSksbnVsbCE9UG4ucy5sZWZ0JiZVMS5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUoZ2MsTnQse2xlZnQ6UG4ucy5sZWZ0fSksbnVsbCE9UG4ucy5yaWdodCYmVTEuc2hlZXRf''@;'; put 'put ''c2V0X3JhbmdlX3N0eWxlKGdjLE50LHtyaWdodDpQbi5zLnJpZ2h0fSkpfSl9KSx6ZH1mdW5jdGlvbiBKUyhkLF8pe3N3aXRjaChJUihfPV98fHt9KSxfLnR5cGV8fCJiYXNlNjQiKXtjYXNlImJhc2U2NCI6cmV0dXJuIGp5KENlLmRlY29kZShkKSxfKTtjYXNlImJpbmFyeSI6Y2FzZSJidWZm''@;'; put 'put ''ZXIiOmNhc2UiZmlsZSI6cmV0dXJuIGp5KGQsXyk7Y2FzZSJhcnJheSI6cmV0dXJuIGp5KE0oZCksXyl9fWZ1bmN0aW9uIFV5KGQpe3JldHVybiBWcigiTmFtZWRSYW5nZSIsbnVsbCx7InNzOk5hbWUiOmQuTmFtZSwic3M6UmVmZXJzVG8iOiI9IitoayhkLlJlZix7cjowLGM6MH0pfSl9ZnVu''@;'; put 'put ''Y3Rpb24gTGVlKGQsXyxtLFQsUCxRLHNlKXtpZighZHx8bnVsbD09ZC52JiZudWxsPT1kLmYmJiFULnNoZWV0U3R1YnMpcmV0dXJuIiI7dmFyIG9lPXt9O2lmKGQuZiYmKG9lWyJzczpGb3JtdWxhIl09Ij0iK0JpKGhrKGQuZixzZSkpKSxkLkYmJmQuRi5zbGljZSgwLF8ubGVuZ3RoKT09Xyl7''@;'; put 'put ''dmFyIGRlPUlzKGQuRi5zbGljZShfLmxlbmd0aCsxKSk7b2VbInNzOkFycmF5UmFuZ2UiXT0iUkM6UiIrKGRlLnI9PXNlLnI/IiI6IlsiKyhkZS5yLXNlLnIpKyJdIikrIkMiKyhkZS5jPT1zZS5jPyIiOiJbIisoZGUuYy1zZS5jKSsiXSIpfWlmKGQubCYmZC5sLlRhcmdldCYmKG9lWyJzczpI''@;'; put 'put ''UmVmIl09QmkoZC5sLlRhcmdldCksZC5sLlRvb2x0aXAmJihvZVsieDpIUmVmU2NyZWVuVGlwIl09QmkoZC5sLlRvb2x0aXApKSksbVsiIW1lcmdlcyJdKWZvcih2YXIgTGU9bVsiIW1lcmdlcyJdLE5lPTA7TmUhPUxlLmxlbmd0aDsrK05lKUxlW05lXS5zLmMhPXNlLmN8fExlW05lXS5zLnIh''@;'; put 'put ''PXNlLnJ8fChMZVtOZV0uZS5jPkxlW05lXS5zLmMmJihvZVsic3M6TWVyZ2VBY3Jvc3MiXT1MZVtOZV0uZS5jLUxlW05lXS5zLmMpLExlW05lXS5lLnI+TGVbTmVdLnMuciYmKG9lWyJzczpNZXJnZURvd24iXT1MZVtOZV0uZS5yLUxlW05lXS5zLnIpKTt2YXIgQmU9IiIsWmU9IiI7c3dpdGNo''@;'; put 'put ''KGQudCl7Y2FzZSJ6IjppZighVC5zaGVldFN0dWJzKXJldHVybiIiO2JyZWFrO2Nhc2UibiI6QmU9Ik51bWJlciIsWmU9U3RyaW5nKGQudik7YnJlYWs7Y2FzZSJiIjpCZT0iQm9vbGVhbiIsWmU9ZC52PyIxIjoiMCI7YnJlYWs7Y2FzZSJlIjpCZT0iRXJyb3IiLFplPW5sW2Qudl07YnJlYWs7''@;'; put 'put ''Y2FzZSJkIjpCZT0iRGF0ZVRpbWUiLFplPW5ldyBEYXRlKGQudikudG9JU09TdHJpbmcoKSxudWxsPT1kLnomJihkLno9ZC56fHxJLl90YWJsZVsxNF0pO2JyZWFrO2Nhc2UicyI6QmU9IlN0cmluZyIsWmU9X3MoZC52fHwiIil9dmFyIG50PUEyKFQuY2VsbFhmcyxudWxsLGQsVCk7b2VbInNz''@;'; put 'put ''OlN0eWxlSUQiXT0icyIrKDIxK250KSxvZVsic3M6SW5kZXgiXT1zZS5jKzE7dmFyIG10PW51bGwhPWQudj9aZToiIixRZT0ieiI9PWQudD8iIjpkLlI/ZnVuY3Rpb24gRGVlKGQpe3JldHVybic8c3M6RGF0YSBzczpUeXBlPSJTdHJpbmciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9S''@;'; put 'put ''RUMtaHRtbDQwIj4nK2QubWFwKGZ1bmN0aW9uKG0pe3ZhciBUPV9zKG0udik7cmV0dXJuIG0ucyYmKG0ucy5ib2xkJiYoVD0iPEI+IitUKyI8L0I+IiksbS5zLml0YWxpYyYmKFQ9IjxJPiIrVCsiPC9JPiIpLG0ucy5zdHJpa2UmJihUPSI8Uz4iK1QrIjwvUz4iKSxtLnMudW5kZXJsaW5lJiYo''@;'; put 'put ''VD0iPFU+IitUKyI8L1U+IiksInN1cGVyIj09bS5zLnZhbGlnbiYmKFQ9IjxTdXA+IitUKyI8L1N1cD4iKSwic3ViIj09bS5zLnZhbGlnbiYmKFQ9IjxTdWI+IitUKyI8L1N1Yj4iKSwobS5zLm5hbWV8fG0ucy5zenx8bS5zLmNvbG9yJiZudWxsIT1tLnMuY29sb3IucmdiKSYmKFQ9WyI8Rm9u''@;'; put 'put ''dCIsbS5zLm5hbWU/JyBodG1sOkZhY2U9IicrbS5zLm5hbWUrJyInOiIiLG0ucy5zej8nIGh0bWw6U2l6ZT0iJyttLnMuc3orJyInOiIiLG0ucy5jb2xvcj8nIGh0bWw6Q29sb3I9IiMnKygiMDAwMDAwIisoIm51bWJlciI9PXR5cGVvZiBtLnMuY29sb3IucmdiP20ucy5jb2xvci5yZ2IudG9T''@;'; put 'put ''dHJpbmcoMTYpOm0ucy5jb2xvci5yZ2IpKS5zbGljZSgtNikrJyInOiIiLCI+IixULCI8L0ZvbnQ+Il0uam9pbigiIikpKSxUfSkuam9pbigiIikrIjwvRGF0YT4ifShkLlIpOic8RGF0YSBzczpUeXBlPSInK0JlKyciPicrbXQrIjwvRGF0YT4iO3JldHVybihkLmN8fFtdKS5sZW5ndGg+MCYm''@;'; put 'put ''KFFlKz1mdW5jdGlvbiBOQihkKXtyZXR1cm4gZC5tYXAoZnVuY3Rpb24oXyl7dmFyIFQ9VnIoInNzOkRhdGEiLENsKF8udHx8IiIpLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCJ9KTtyZXR1cm4gVnIoIkNvbW1lbnQiLFQseyJzczpBdXRob3IiOl8uYX0pfSkuam9p''@;'; put 'put ''bigiIil9KGQuYykpLFZyKCJDZWxsIixRZSxvZSl9ZnVuY3Rpb24gRkIoZCxfKXt2YXIgbT0nPFJvdyBzczpJbmRleD0iJysoZCsxKSsnIic7cmV0dXJuIF8mJihfLmhweCYmIV8uaHB0JiYoXy5ocHQ9YjgoXy5ocHgpKSxfLmhwdCYmKG0rPScgc3M6QXV0b0ZpdEhlaWdodD0iMCIgc3M6SGVp''@;'; put 'put ''Z2h0PSInK18uaHB0KyciJyksXy5oaWRkZW4mJihtKz0nIHNzOkhpZGRlbj0iMSInKSksbSsiPiJ9ZnVuY3Rpb24gWTkoZCxfLG0pe3ZhciBUPVtdLFE9bS5TaGVldHNbbS5TaGVldE5hbWVzW2RdXSxzZT1RP2Z1bmN0aW9uIGVFKGQsXyxtLFQpe2lmKCFkfHwhKChUfHx7fSkuV29ya2Jvb2t8''@;'; put 'put ''fHt9KS5OYW1lcylyZXR1cm4iIjtmb3IodmFyIFA9VC5Xb3JrYm9vay5OYW1lcyxRPVtdLHNlPTA7c2U8UC5sZW5ndGg7KytzZSl7dmFyIG9lPVBbc2VdO29lLlNoZWV0PT1tJiYob2UuTmFtZS5tYXRjaCgvXl94bGZuXC4vKXx8US5wdXNoKFV5KG9lKSkpfXJldHVybiBRLmpvaW4oIiIpfShR''@;'; put 'put ''LDAsZCxtKToiIjtyZXR1cm4gc2UubGVuZ3RoPjAmJlQucHVzaCgiPE5hbWVzPiIrc2UrIjwvTmFtZXM+Iiksc2U9UT9mdW5jdGlvbiB0RShkLF8pe2lmKCFkWyIhcmVmIl0pcmV0dXJuIiI7dmFyIFA9eXQoZFsiIXJlZiJdKSxRPWRbIiFtZXJnZXMiXXx8W10sc2U9MCxvZT1bXTtkWyIhY29s''@;'; put 'put ''cyJdJiZkWyIhY29scyJdLmZvckVhY2goZnVuY3Rpb24oZnQsa3Qpe0IwKGZ0KTt2YXIgYnQ9ISFmdC53aWR0aCxFdD1PayhrdCxmdCksVnQ9eyJzczpJbmRleCI6a3QrMX07YnQmJihWdFsic3M6V2lkdGgiXT1mNShFdC53aWR0aCkpLGZ0LmhpZGRlbiYmKFZ0WyJzczpIaWRkZW4iXT0iMSIp''@;'; put 'put ''LG9lLnB1c2goVnIoIkNvbHVtbiIsbnVsbCxWdCkpfSk7Zm9yKHZhciBkZT1BcnJheS5pc0FycmF5KGQpLExlPVAucy5yO0xlPD1QLmUucjsrK0xlKXtmb3IodmFyIE5lPVtGQihMZSwoZFsiIXJvd3MiXXx8W10pW0xlXSldLEJlPVAucy5jO0JlPD1QLmUuYzsrK0JlKXt2YXIgWmU9ITE7Zm9y''@;'; put 'put ''KHNlPTA7c2UhPVEubGVuZ3RoOysrc2UpaWYoIShRW3NlXS5zLmM+QmV8fFFbc2VdLnMucj5MZXx8UVtzZV0uZS5jPEJlfHxRW3NlXS5lLnI8TGUpKXsoUVtzZV0ucy5jIT1CZXx8UVtzZV0ucy5yIT1MZSkmJihaZT0hMCk7YnJlYWt9aWYoIVplKXt2YXIgbnQ9e3I6TGUsYzpCZX0sbXQ9cWko''@;'; put 'put ''bnQpO05lLnB1c2goTGVlKGRlPyhkW0xlXXx8W10pW0JlXTpkW210XSxtdCxkLF8sMCwwLG50KSl9fU5lLnB1c2goIjwvUm93PiIpLE5lLmxlbmd0aD4yJiZvZS5wdXNoKE5lLmpvaW4oIiIpKX1yZXR1cm4gb2Uuam9pbigiIil9KFEsXyk6IiIsc2UubGVuZ3RoPjAmJlQucHVzaCgiPFRhYmxl''@;'; put 'put ''PiIrc2UrIjwvVGFibGU+IiksVC5wdXNoKGZ1bmN0aW9uIEllZShkLF8sbSxUKXtpZighZClyZXR1cm4iIjt2YXIgUD1bXTtpZihkWyIhbWFyZ2lucyJdJiYoUC5wdXNoKCI8UGFnZVNldHVwPiIpLGRbIiFtYXJnaW5zIl0uaGVhZGVyJiZQLnB1c2goVnIoIkhlYWRlciIsbnVsbCx7Ing6TWFy''@;'; put 'put ''Z2luIjpkWyIhbWFyZ2lucyJdLmhlYWRlcn0pKSxkWyIhbWFyZ2lucyJdLmZvb3RlciYmUC5wdXNoKFZyKCJGb290ZXIiLG51bGwseyJ4Ok1hcmdpbiI6ZFsiIW1hcmdpbnMiXS5mb290ZXJ9KSksUC5wdXNoKFZyKCJQYWdlTWFyZ2lucyIsbnVsbCx7Ing6Qm90dG9tIjpkWyIhbWFyZ2lucyJd''@;'; put 'put ''LmJvdHRvbXx8IjAuNzUiLCJ4OkxlZnQiOmRbIiFtYXJnaW5zIl0ubGVmdHx8IjAuNyIsIng6UmlnaHQiOmRbIiFtYXJnaW5zIl0ucmlnaHR8fCIwLjciLCJ4OlRvcCI6ZFsiIW1hcmdpbnMiXS50b3B8fCIwLjc1In0pKSxQLnB1c2goIjwvUGFnZVNldHVwPiIpKSxUJiZULldvcmtib29rJiZU''@;'; put 'put ''Lldvcmtib29rLlNoZWV0cyYmVC5Xb3JrYm9vay5TaGVldHNbbV0paWYoVC5Xb3JrYm9vay5TaGVldHNbbV0uSGlkZGVuKVAucHVzaChWcigiVmlzaWJsZSIsMT09VC5Xb3JrYm9vay5TaGVldHNbbV0uSGlkZGVuPyJTaGVldEhpZGRlbiI6IlNoZWV0VmVyeUhpZGRlbiIse30pKTtlbHNle2Zv''@;'; put 'put ''cih2YXIgUT0wO1E8bSYmKCFULldvcmtib29rLlNoZWV0c1tRXXx8VC5Xb3JrYm9vay5TaGVldHNbUV0uSGlkZGVuKTsrK1EpO1E9PW0mJlAucHVzaCgiPFNlbGVjdGVkLz4iKX1pZigoKCgoVHx8e30pLldvcmtib29rfHx7fSkuVmlld3N8fFtdKVswXXx8e30pLlJUTCYmUC5wdXNoKCI8RGlz''@;'; put 'put ''cGxheVJpZ2h0VG9MZWZ0Lz4iKSxfbihkWyIhZ3JpZGxpbmVzIl0pJiZQLnB1c2goIjxEb05vdERpc3BsYXlHcmlkbGluZXMvPiIpLGRbIiFmcmVlemUiXSl7UC5wdXNoKCI8RnJlZXplUGFuZXMvPiIpLFAucHVzaCgiPEZyb3plbk5vU3BsaXQvPiIpO3ZhciBzZT1JcyhkWyIhZnJlZXplIl0p''@;'; put 'put ''O3NlLnI+MCYmKFAucHVzaChVbygiU3BsaXRIb3Jpem9udGFsIiwiIitzZS5yKSksUC5wdXNoKFVvKCJUb3BSb3dCb3R0b21QYW5lIiwiIitzZS5yKSkpLHNlLmM+MCYmKFAucHVzaChVbygiU3BsaXRWZXJ0aWNhbCIsIiIrc2UuYykpLFAucHVzaChVbygiTGVmdENvbHVtblJpZ2h0UGFuZSIs''@;'; put 'put ''IiIrc2UuYykpKX1yZXR1cm4gZFsiIXByb3RlY3QiXSYmKFAucHVzaChVbygiUHJvdGVjdENvbnRlbnRzIiwiVHJ1ZSIpKSxkWyIhcHJvdGVjdCJdLm9iamVjdHMmJlAucHVzaChVbygiUHJvdGVjdE9iamVjdHMiLCJUcnVlIikpLGRbIiFwcm90ZWN0Il0uc2NlbmFyaW9zJiZQLnB1c2goVW8o''@;'; put 'put ''IlByb3RlY3RTY2VuYXJpb3MiLCJUcnVlIikpLG51bGw9PWRbIiFwcm90ZWN0Il0uc2VsZWN0TG9ja2VkQ2VsbHN8fGRbIiFwcm90ZWN0Il0uc2VsZWN0TG9ja2VkQ2VsbHM/bnVsbCE9ZFsiIXByb3RlY3QiXS5zZWxlY3RVbmxvY2tlZENlbGxzJiYhZFsiIXByb3RlY3QiXS5zZWxlY3RVbmxv''@;'; put 'put ''Y2tlZENlbGxzJiZQLnB1c2goVW8oIkVuYWJsZVNlbGVjdGlvbiIsIlVubG9ja2VkQ2VsbHMiKSk6UC5wdXNoKFVvKCJFbmFibGVTZWxlY3Rpb24iLCJOb1NlbGVjdGlvbiIpKSxbWyJmb3JtYXRDZWxscyIsIkFsbG93Rm9ybWF0Q2VsbHMiXSxbImZvcm1hdENvbHVtbnMiLCJBbGxvd1NpemVD''@;'; put 'put ''b2xzIl0sWyJmb3JtYXRSb3dzIiwiQWxsb3dTaXplUm93cyJdLFsiaW5zZXJ0Q29sdW1ucyIsIkFsbG93SW5zZXJ0Q29scyJdLFsiaW5zZXJ0Um93cyIsIkFsbG93SW5zZXJ0Um93cyJdLFsiaW5zZXJ0SHlwZXJsaW5rcyIsIkFsbG93SW5zZXJ0SHlwZXJsaW5rcyJdLFsiZGVsZXRlQ29sdW1u''@;'; put 'put ''cyIsIkFsbG93RGVsZXRlQ29scyJdLFsiZGVsZXRlUm93cyIsIkFsbG93RGVsZXRlUm93cyJdLFsic29ydCIsIkFsbG93U29ydCJdLFsiYXV0b0ZpbHRlciIsIkFsbG93RmlsdGVyIl0sWyJwaXZvdFRhYmxlcyIsIkFsbG93VXNlUGl2b3RUYWJsZXMiXV0uZm9yRWFjaChmdW5jdGlvbihvZSl7''@;'; put 'put ''ZFsiIXByb3RlY3QiXVtvZVswXV0mJlAucHVzaCgiPCIrb2VbMV0rIi8+Iil9KSksMD09UC5sZW5ndGg/IiI6VnIoIldvcmtzaGVldE9wdGlvbnMiLFAuam9pbigiIikse3htbG5zOlZ1X3h9KX0oUSwwLGQsbSkpLFQuam9pbigiIil9ZnVuY3Rpb24gT2VlKGQsXyl7X3x8KF89e30pLGQuU1NG''@;'; put 'put ''fHwoZC5TU0Y9SS5nZXRfdGFibGUoKSksZC5TU0YmJih1ZShJKSxJLmxvYWRfdGFibGUoZC5TU0YpLF8ucmV2c3NmPWhlKGQuU1NGKSxfLnJldnNzZltkLlNTRls2NTUzNV1dPTAsXy5zc2Y9ZC5TU0YsZC5TdHlsZXM9e0ZvbnRzOl8uRm9udHM9W3tzejoxMixjb2xvcjp7dGhlbWU6MSxyZ2I6''@;'; put 'put ''IjAwMDAwMCJ9LG5hbWU6IkNhbGlicmkiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0sRmlsbHM6Xy5GaWxscz1be3BhdHRlcm5UeXBlOiJub25lIn0se3BhdHRlcm5UeXBlOiJncmF5MTI1In1dLEJvcmRlcnM6Xy5Cb3JkZXJzPVt7fV19LF8uY2VsbFhmcz1bXSxfLmNlbGxTdHlsZVhmcz1b''@;'; put 'put ''e25hbWU6Ik5vcm1hbCJ9XSxBMihfLmNlbGxYZnMsbnVsbCx7fSx7cmV2c3NmOntHZW5lcmFsOjB9fSkpO3ZhciBtPVtdO20ucHVzaChmdW5jdGlvbiB2UihkLF8pe3ZhciBtPVtdO3JldHVybiBkLlByb3BzJiZtLnB1c2goZnVuY3Rpb24gdTgoZCxfKXt2YXIgbT1bXTtyZXR1cm4gRmUoZzMp''@;'; put 'put ''Lm1hcChmdW5jdGlvbihUKXtmb3IodmFyIFA9MDtQPFhhLmxlbmd0aDsrK1ApaWYoWGFbUF1bMV09PVQpcmV0dXJuIFhhW1BdO2ZvcihQPTA7UDxmYy5sZW5ndGg7KytQKWlmKGZjW1BdWzFdPT1UKXJldHVybiBmY1tQXTt0aHJvdyBUfSkuZm9yRWFjaChmdW5jdGlvbihUKXtpZihudWxsIT1k''@;'; put 'put ''W1RbMV1dKXt2YXIgUD1fJiZfLlByb3BzJiZudWxsIT1fLlByb3BzW1RbMV1dP18uUHJvcHNbVFsxXV06ZFtUWzFdXTsiZGF0ZSI9PT1UWzJdJiYoUD1uZXcgRGF0ZShQKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuXGQqWi8sIloiKSksIm51bWJlciI9PXR5cGVvZiBQP1A9U3RyaW5nKFAp''@;'; put 'put ''OiEwPT09UHx8ITE9PT1QP1A9UD8iMSI6IjAiOlAgaW5zdGFuY2VvZiBEYXRlJiYoUD1uZXcgRGF0ZShQKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuXGQqWi8sIiIpKSxtLnB1c2goVW8oZzNbVFsxXV18fFRbMV0sUCkpfX0pLFZyKCJEb2N1bWVudFByb3BlcnRpZXMiLG0uam9pbigiIiks''@;'; put 'put ''e3htbG5zOlZ1X299KX0oZC5Qcm9wcyxfKSksZC5DdXN0cHJvcHMmJm0ucHVzaChmdW5jdGlvbiBiZihkLF8pe3ZhciBtPVsiV29ya3NoZWV0cyIsIlNoZWV0TmFtZXMiXSxUPSJDdXN0b21Eb2N1bWVudFByb3BlcnRpZXMiLFA9W107cmV0dXJuIGQmJkZlKGQpLmZvckVhY2goZnVuY3Rpb24o''@;'; put 'put ''USl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGQsUSkpe2Zvcih2YXIgc2U9MDtzZTxYYS5sZW5ndGg7KytzZSlpZihRPT1YYVtzZV1bMV0pcmV0dXJuO2ZvcihzZT0wO3NlPGZjLmxlbmd0aDsrK3NlKWlmKFE9PWZjW3NlXVsxXSlyZXR1cm47Zm9yKHNlPTA7c2U8''@;'; put 'put ''bS5sZW5ndGg7KytzZSlpZihRPT1tW3NlXSlyZXR1cm47dmFyIG9lPWRbUV0sZGU9InN0cmluZyI7Im51bWJlciI9PXR5cGVvZiBvZT8oZGU9ImZsb2F0IixvZT1TdHJpbmcob2UpKTohMD09PW9lfHwhMT09PW9lPyhkZT0iYm9vbGVhbiIsb2U9b2U/IjEiOiIwIik6b2U9U3RyaW5nKG9lKSxQ''@;'; put 'put ''LnB1c2goVnIoTXIoUSksb2UseyJkdDpkdCI6ZGV9KSl9fSksXyYmRmUoXykuZm9yRWFjaChmdW5jdGlvbihRKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXyxRKSYmKCFkfHwhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGQsUSkpKXt2YXIg''@;'; put 'put ''c2U9X1tRXSxvZT0ic3RyaW5nIjsibnVtYmVyIj09dHlwZW9mIHNlPyhvZT0iZmxvYXQiLHNlPVN0cmluZyhzZSkpOiEwPT09c2V8fCExPT09c2U/KG9lPSJib29sZWFuIixzZT1zZT8iMSI6IjAiKTpzZSBpbnN0YW5jZW9mIERhdGU/KG9lPSJkYXRlVGltZS50eiIsc2U9c2UudG9JU09TdHJp''@;'; put 'put ''bmcoKSk6c2U9U3RyaW5nKHNlKSxQLnB1c2goVnIoTXIoUSksc2UseyJkdDpkdCI6b2V9KSl9fSksIjwiK1QrJyB4bWxucz0iJytWdV9vKyciPicrUC5qb2luKCIiKSsiPC8iK1QrIj4ifShkLlByb3BzLGQuQ3VzdHByb3BzKSksbS5qb2luKCIiKX0oZCxfKSksbS5wdXNoKCIiKSxtLnB1c2go''@;'; put 'put ''IiIpLG0ucHVzaCgiIik7Zm9yKHZhciBUPTA7VDxkLlNoZWV0TmFtZXMubGVuZ3RoOysrVCltLnB1c2goVnIoIldvcmtzaGVldCIsWTkoVCxfLGQpLHsic3M6TmFtZSI6QmkoZC5TaGVldE5hbWVzW1RdKX0pKTtyZXR1cm4gbVsyXT1mdW5jdGlvbiBPQihkLF8pe3ZhciBUPVtbJzxTdHlsZSBz''@;'; put 'put ''czpJRD0iRGVmYXVsdCIgc3M6TmFtZT0iTm9ybWFsIj4nLCc8QWxpZ25tZW50IHNzOlZlcnRpY2FsPSJCb3R0b20iLz4nLCI8Qm9yZGVycy8+IiwnPEZvbnQgc3M6Rm9udE5hbWU9IkNhbGlicmkiIHg6RmFtaWx5PSJTd2lzcyIgc3M6U2l6ZT0iMTIiIHNzOkNvbG9yPSIjMDAwMDAwIi8+Jywi''@;'; put 'put ''PEludGVyaW9yLz4iLCI8TnVtYmVyRm9ybWF0Lz4iLCI8UHJvdGVjdGlvbi8+IiwiPC9TdHlsZT4iXS5qb2luKCIiKV07cmV0dXJuIF8uY2VsbFhmcy5mb3JFYWNoKGZ1bmN0aW9uKFAsUSl7dmFyIHNlPVtdO2lmKFAuYWxpZ25tZW50KXt2YXIgb2U9e307UC5hbGlnbm1lbnQuc2hyaW5rVG9G''@;'; put 'put ''aXQmJihvZVsic3M6U2hyaW5rVG9GaXQiXT0iMSIpLFAuYWxpZ25tZW50LndyYXBUZXh0JiYob2VbInNzOldyYXBUZXh0Il09IjEiKSxQLmFsaWdubWVudC52ZXJ0aWNhbCYmKG9lWyJzczpWZXJ0aWNhbCJdPVp0KFAuYWxpZ25tZW50LnZlcnRpY2FsKSksUC5hbGlnbm1lbnQuaG9yaXpvbnRh''@;'; put 'put ''bCYmKG9lWyJzczpIb3Jpem9udGFsIl09WnQoUC5hbGlnbm1lbnQuaG9yaXpvbnRhbCkpLFAuYWxpZ25tZW50LmluZGVudCYmKG9lWyJzczpJbmRlbnQiXT1QLmFsaWdubWVudC5pbmRlbnQpLFAuYWxpZ25tZW50LnRleHRSb3RhdGlvbiYmKG9lWyJzczpSb3RhdGUiXT1QLmFsaWdubWVudC50''@;'; put 'put ''ZXh0Um90YXRpb24pLHNlLnB1c2goVnIoIkFsaWdubWVudCIsbnVsbCxvZSkpfWU6aWYobnVsbCE9UC5mb250SWQpe3ZhciBkZT1fLkZvbnRzW1AuZm9udElkXTtpZighZGUpYnJlYWsgZTt2YXIgTGU9eyJzczpGb250TmFtZSI6IkNhbGlicmkiLCJzczpTaXplIjoiMTIifSxOZT0hMTtkZS5i''@;'; put 'put ''b2xkJiYoTmU9ITAsTGVbInNzOkJvbGQiXT0iMSIpLGRlLml0YWxpYyYmKE5lPSEwLExlWyJzczpJdGFsaWMiXT0iMSIpLGRlLnN0cmlrZSYmKE5lPSEwLExlWyJzczpTdHJpa2VUaHJvdWdoIl09IjEiKSxudWxsIT1kZS51bmRlcmxpbmUmJihOZT0hMCxMZVsic3M6VW5kZXJsaW5lIl09cFJb''@;'; put 'put ''ZGUudW5kZXJsaW5lXXx8KGRlLnVuZGVybGluZT8iU2luZ2xlIjoiTm9uZSIpKSxudWxsIT1kZS5zeiYmKE5lPSEwLExlWyJzczpTaXplIl09ZGUuc3opLG51bGwhPWRlLm5hbWUmJihOZT0hMCxMZVsic3M6Rm9udE5hbWUiXT1kZS5uYW1lKSxkZS5jb2xvciYmbnVsbCE9ZGUuY29sb3Iucmdi''@;'; put 'put ''JiYoTmU9ITAsTGVbInNzOkNvbG9yIl09IiMiKygibnVtYmVyIj09dHlwZW9mIGRlLmNvbG9yLnJnYj8iMDAwMDAwIitkZS5jb2xvci5yZ2IudG9TdHJpbmcoMTYpOmRlLmNvbG9yLnJnYikuc2xpY2UoLTYpKSxbInN1YiIsInN1cGVyIl0uaW5kZXhPZihkZS52YWxpZ24pPi0xJiYoTGVbInNz''@;'; put 'put ''OlZlcnRpY2FsQWxpZ24iXT1adChkZS52YWxpZ24pKyJzY3JpcHQiKSxOZSYmc2UucHVzaChWcigiRm9udCIsbnVsbCxMZSkpfWU6aWYoUC5maWxsSWQ+MCl7dmFyIEJlPV8uRmlsbHNbUC5maWxsSWRdO2lmKCFCZXx8IUJlLmZnQ29sb3J8fG51bGw9PUJlLmZnQ29sb3IucmdiKWJyZWFrIGU7''@;'; put 'put ''c2UucHVzaChWcigiSW50ZXJpb3IiLG51bGwseyJzczpQYXR0ZXJuIjpXWFtCZS5wYXR0ZXJuVHlwZV18fCJTb2xpZCIsInNzOkNvbG9yIjoiIyIrKCJudW1iZXIiPT10eXBlb2YgQmUuZmdDb2xvci5yZ2I/IjAwIitCZS5mZ0NvbG9yLnJnYi50b1N0cmluZygxNik6QmUuZmdDb2xvci5yZ2Ip''@;'; put 'put ''LnNsaWNlKC02KX0pKX1zZS5wdXNoKFZyKCJOdW1iZXJGb3JtYXQiLG51bGwseyJzczpGb3JtYXQiOkJpKEkuX3RhYmxlW1AubnVtRm10SWRdKX0pKTt2YXIgWmU9eyJzczpJRCI6InMiKygyMStRKX07UC5zdHlsZSYmKFplWyJzczpOYW1lIl09UC5zdHlsZSksVC5wdXNoKFZyKCJTdHlsZSIs''@;'; put 'put ''c2Uuam9pbigiIiksWmUpKX0pLFZyKCJTdHlsZXMiLFQuam9pbigiIikpfSgwLF8pLG1bM109ZnVuY3Rpb24gX1IoZCl7aWYoISgoZHx8e30pLldvcmtib29rfHx7fSkuTmFtZXMpcmV0dXJuIiI7Zm9yKHZhciBfPWQuV29ya2Jvb2suTmFtZXMsbT1bXSxUPTA7VDxfLmxlbmd0aDsrK1Qpe3Zh''@;'; put 'put ''ciBQPV9bVF07bnVsbD09UC5TaGVldCYmKFAuTmFtZS5tYXRjaCgvXl94bGZuXC4vKXx8bS5wdXNoKFV5KFApKSl9cmV0dXJuIFZyKCJOYW1lcyIsbS5qb2luKCIiKSl9KGQpLHBvK1ZyKCJXb3JrYm9vayIsbS5qb2luKCIiKSx7eG1sbnM6VnVfc3MsInhtbG5zOm8iOlZ1X28sInhtbG5zOngi''@;'; put 'put ''OlZ1X3gsInhtbG5zOnNzIjpWdV9zcywieG1sbnM6ZHQiOiJ1dWlkOkMyRjQxMDEwLTY1QjMtMTFkMS1BMjlGLTAwQUEwMEMxNDg4MiIsInhtbG5zOmh0bWwiOiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIn0pfWZ1bmN0aW9uIFBCKGQsXyxtLFQpe3ZhciBQPW0sUT1bXSxzZT1f''@;'; put 'put ''LnNsaWNlKF8ubCxfLmwrUCk7aWYoVCYmVC5lbmMmJlQuZW5jLmluc2l0dSYmc2UubGVuZ3RoPjApc3dpdGNoKGQubil7Y2FzZSJCT0YiOmNhc2UiRmlsZVBhc3MiOmNhc2UiRmlsZUxvY2siOmNhc2UiSW50ZXJmYWNlSGRyIjpjYXNlIlJSREluZm8iOmNhc2UiUlJESGVhZCI6Y2FzZSJVc3JF''@;'; put 'put ''eGNsIjpjYXNlIkVPRiI6VC5lbmMuaW5zaXR1KGtlKHtsZW5ndGg6c2UubGVuZ3RofSksInNraXAiKTticmVhaztjYXNlIkJvdW5kU2hlZXQ4IjpULmVuYy5pbnNpdHUoa2Uoe2xlbmd0aDo0fSksInNraXAiKSxzZT1CdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShzZS5zbGljZSgwLDQpKSxC''@;'; put 'put ''dWZmZXIuZnJvbShULmVuYy5pbnNpdHUoc2Uuc2xpY2UoNCkpKV0pO2JyZWFrO2RlZmF1bHQ6c2U9VC5lbmMuaW5zaXR1KHNlKX1BcnJheS5pc0FycmF5KF8pJiYhQXJyYXkuaXNBcnJheShzZSkmJihzZT1BcnJheS5mcm9tKHNlKSksUS5wdXNoKHNlKSxfLmwrPVA7Zm9yKHZhciBvZT1HOVtF''@;'; put 'put ''cihfLF8ubCldLGRlPTA7bnVsbCE9b2UmJiJDb250aW51ZSI9PT1vZS5uLnNsaWNlKDAsOCk7KVA9RXIoXyxfLmwrMiksZGU9Xy5sKzQsVCYmVC5lbmMmJlQuZW5jLmluc2l0dSYmVC5lbmMuaW5zaXR1KGtlKHtsZW5ndGg6NH0pLCJza2lwIiksIkNvbnRpbnVlRnJ0Ij09b2Uubj9kZSs9NDoi''@;'; put 'put ''Q29udGludWVGcnQiPT1vZS5uLnNsaWNlKDAsMTEpJiYoZGUrPTEyLFQmJlQuZW5jJiZULmVuYy5pbnNpdHUmJlQuZW5jLmluc2l0dShrZSh7bGVuZ3RoOjh9KSwic2tpcCIpKSxzZT1fLnNsaWNlKGRlLF8ubCs0K1ApLFQmJlQuZW5jJiZULmVuYy5pbnNpdHUmJnNlLmxlbmd0aD4wJiYoc2U9''@;'; put 'put ''VC5lbmMuaW5zaXR1KHNlKSksUS5wdXNoKHNlKSxfLmwrPTQrUCxvZT1HOVtFcihfLF8ubCldO3ZhciBMZT1HKFEpO09sKExlLDApO3ZhciBOZT0wO0xlLmxlbnM9W107Zm9yKHZhciBCZT0wO0JlPFEubGVuZ3RoOysrQmUpTGUubGVucy5wdXNoKE5lKSxOZSs9UVtCZV0ubGVuZ3RoO2lmKExl''@;'; put 'put ''Lmxlbmd0aDxtKXRocm93IlhMUyBSZWNvcmQgIisoZCYmZC5ufHwiPz8iKSsiIFRydW5jYXRlZDogIitMZS5sZW5ndGgrIiA8ICIrbTtyZXR1cm4gZC5mKExlLExlLmxlbmd0aCxUKX1mdW5jdGlvbiBCZyhkLF8sbSl7aWYoInoiIT09ZC50JiZkLlhGKXt2YXIgVD0wO3RyeXtUPWQuenx8ZC5Y''@;'; put 'put ''Ri5udW1GbXRJZHx8MCxfLmNlbGxORiYmKGQuej1JLl90YWJsZVtUXSl9Y2F0Y2goUSl7aWYoXy5XVEYpdGhyb3cgUX1pZighX3x8ITEhPT1fLmNlbGxUZXh0KXRyeXtkLnc9ImUiPT09ZC50P2Qud3x8bmxbZC52XTowPT09VHx8IkdlbmVyYWwiPT1UPyJuIj09PWQudD8oMHxkLnYpPT09ZC52''@;'; put 'put ''P0kuX2dlbmVyYWxfaW50KGQudik6SS5fZ2VuZXJhbF9udW0oZC52KTpJLl9nZW5lcmFsKGQudik6SS5mb3JtYXQoVCxkLnYse2RhdGUxOTA0OiEhbSxkYXRlTkY6XyYmXy5kYXRlTkZ9KX1jYXRjaChRKXtpZihfLldURil0aHJvdyBRfWlmKF8uY2VsbERhdGVzJiZUJiYibiI9PWQudCYmSS5p''@;'; put 'put ''c19kYXRlKEkuX3RhYmxlW1RdfHxTdHJpbmcoVCkpKXt2YXIgUD1JLnBhcnNlX2RhdGVfY29kZShkLnYpO1AmJihkLnQ9ImQiLGQudj1uZXcgRGF0ZShQLnksUC5tLTEsUC5kLFAuSCxQLk0sUC5TLFAudSkpfX19ZnVuY3Rpb24geVIoZCxfLG0pe3JldHVybnt2OmQsaXhmZTpfLHQ6bX19dmFy''@;'; put 'put ''IEZlZT1mdW5jdGlvbihkLF8sbSl7X1siIW9iamVjdHMiXT1kfSxqOF9TST0iZTA4NTlmZjJmOTRmNjgxMGFiOTEwODAwMmIyN2IzZDkiLGo4X0RTST0iMDJkNWNkZDU5YzJlMWIxMDkzOTcwODAwMmIyY2Y5YWUiO2Z1bmN0aW9uIHdSKGQsXyl7dmFyIG0sVCxQLFE7aWYoX3x8KF89e30pLElS''@;'; put 'put ''KF8pLFYoKSxfLmNvZGVwYWdlJiZ4KF8uY29kZXBhZ2UpLGQuRnVsbFBhdGhzKXtpZihhZS5maW5kKGQsIi9lbmNyeXB0aW9uIikpdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO209YWUuZmluZChkLCIhQ29tcE9iaiIpLFQ9YWUuZmluZChkLCIvV29ya2Jv''@;'; put 'put ''b2siKXx8YWUuZmluZChkLCIvQm9vayIpfWVsc2V7c3dpdGNoKF8udHlwZSl7Y2FzZSJiYXNlNjQiOmQ9YihDZS5kZWNvZGUoZCkpO2JyZWFrO2Nhc2UiYmluYXJ5IjpkPWIoZCk7YnJlYWs7Y2FzZSJidWZmZXIiOmJyZWFrO2Nhc2UiYXJyYXkiOkFycmF5LmlzQXJyYXkoZCl8fChkPUFycmF5''@;'; put 'put ''LnByb3RvdHlwZS5zbGljZS5jYWxsKGQpKX1PbChkLDApLFQ9e2NvbnRlbnQ6ZH19aWYobSYmZnVuY3Rpb24gTmVlKGQpe3ZhciBfPXt9LG09ZC5jb250ZW50O2lmKG0ubD0yOCxfLkFuc2lVc2VyVHlwZT1tLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpLF8uQW5zaUNsaXBib2FyZEZvcm1h''@;'; put 'put ''dD1mdW5jdGlvbiBobChkKXtyZXR1cm4gcjEoZCwxKX0obSksbS5sZW5ndGgtbS5sPD00KXJldHVybiBfO3ZhciBUPW0ucmVhZF9zaGlmdCg0KTtpZigwPT1UfHxUPjQwfHwobS5sLT00LF8uUmVzZXJ2ZWQxPW0ucmVhZF9zaGlmdCgwLCJscHN0ci1hbnNpIiksbS5sZW5ndGgtbS5sPD00KXx8''@;'; put 'put ''MTkwNzUwNTY1MiE9PShUPW0ucmVhZF9zaGlmdCg0KSl8fChfLlVuaWNvZGVDbGlwYm9hcmRGb3JtYXQ9ZnVuY3Rpb24gY3MoZCl7cmV0dXJuIHIxKGQsMil9KG0pLDA9PShUPW0ucmVhZF9zaGlmdCg0KSl8fFQ+NDApKXJldHVybiBfO20ubC09NCxfLlJlc2VydmVkMj1tLnJlYWRfc2hpZnQo''@;'; put 'put ''MCwibHB3c3RyIil9KG0pLF8uYm9va1Byb3BzJiYhXy5ib29rU2hlZXRzKVA9e307ZWxzZXt2YXIgc2U9SWU/ImJ1ZmZlciI6ImFycmF5IjtpZihUJiZULmNvbnRlbnQpUD1mdW5jdGlvbiBiUihkLF8pe3ZhciBCZSxudCxRZSxmdCxFdCxWdCxtPXtvcHRzOnt9fSxUPXt9LFA9Xy5kZW5zZT9b''@;'; put 'put ''XTp7fSxRPXt9LHNlPXt9LG9lPW51bGwsZGU9W10sTGU9IiIsTmU9e30sWmU9IiIsa3Q9e30sYnQ9W10sdW49W10sbnI9W10sbm49e1NoZWV0czpbXSxXQlByb3BzOntkYXRlMTkwNDohMX0sVmlld3M6W3t9XX0sYXI9e30sam49e0ZvbnRzOltdfSxrbj1mdW5jdGlvbih3aSl7cmV0dXJuIHdp''@;'; put 'put ''PDg/d2Rbd2ldOndpPDY0JiZuclt3aS04XXx8d2Rbd2ldfSxzcj1mdW5jdGlvbih3aSxLcyl7dmFyIF91LFFzPXdpLlhGLmRhdGE7UXMmJihRcy5wYXR0ZXJuVHlwZXx8bnVsbCE9UXMuaWN2Rm9yZSkmJktzJiZLcy5jZWxsU3R5bGVzJiYod2kucz17fSx3aS5zLnBhdHRlcm5UeXBlPVFzLnBh''@;'; put 'put ''dHRlcm5UeXBlLHdpLlhGLmZvbnQmJkhuKHdpLnMsd2kuWEYuZm9udCksUXMuZldyYXAmJigod2kucy5hbGlnbm1lbnR8fCh3aS5zLmFsaWdubWVudD17fSkpLndyYXBUZXh0PSEwKSxRcy5mU2hyaW5rVG9GaXQmJigod2kucy5hbGlnbm1lbnR8fCh3aS5zLmFsaWdubWVudD17fSkpLnNocmlu''@;'; put 'put ''a1RvRml0PSEwKSxRcy5oYWxpZ24mJigod2kucy5hbGlnbm1lbnR8fCh3aS5zLmFsaWdubWVudD17fSkpLmhvcml6b250YWw9UXMuaGFsaWduKSxRcy52YWxpZ24mJigod2kucy5hbGlnbm1lbnR8fCh3aS5zLmFsaWdubWVudD17fSkpLnZlcnRpY2FsPVFzLnZhbGlnbiksUXMuY0luZGVudCYm''@;'; put 'put ''KCh3aS5zLmFsaWdubWVudHx8KHdpLnMuYWxpZ25tZW50PXt9KSkuaW5kZW50PVFzLmNJbmRlbnQpLDY0IT1Rcy5pY3ZGb3JlJiY2NSE9UXMuaWN2QmFjayYmKChfdT1iMyhrbihRcy5pY3ZGb3JlKSkpJiYod2kucy5mZ0NvbG9yPXtyZ2I6X3V9KSwoX3U9YjMoa24oUXMuaWN2QmFjaykpKSYm''@;'; put 'put ''KHdpLnMuYmdDb2xvcj17cmdiOl91fSkpLFsiTGVmdCIsIlJpZ2h0IiwiVG9wIiwiQm90dG9tIl0uZm9yRWFjaChmdW5jdGlvbihNZCl7UXNbImRnIitNZF0mJih3aS5zW01kLnRvTG93ZXJDYXNlKCldPXtzdHlsZTpFOFtRc1siZGciK01kXV0sY29sb3I6e3JnYjpiMyhrbihRc1siaWN2IitN''@;'; put 'put ''ZF0pKX19KX0pKX0sZ3I9ZnVuY3Rpb24od2ksS3MsUXMpe2lmKCEoamk+MXx8UXMuc2hlZXRSb3dzJiZ3aS5yPj1Rcy5zaGVldFJvd3MpKXtpZihRcy5jZWxsU3R5bGVzJiZLcy5YRiYmS3MuWEYuZGF0YSYmc3IoS3MsUXMpLGRlbGV0ZSBLcy5peGZlLGRlbGV0ZSBLcy5YRixCZT13aSxaZT1x''@;'; put 'put ''aSh3aSksKCFzZXx8IXNlLnN8fCFzZS5lKSYmKHNlPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0pLHdpLnI8c2Uucy5yJiYoc2Uucy5yPXdpLnIpLHdpLmM8c2Uucy5jJiYoc2Uucy5jPXdpLmMpLHdpLnIrMT5zZS5lLnImJihzZS5lLnI9d2kucisxKSx3aS5jKzE+c2UuZS5jJiYoc2UuZS5j''@;'; put 'put ''PXdpLmMrMSksUXMuY2VsbEZvcm11bGEmJktzLmYpZm9yKHZhciBfdT0wO191PGJ0Lmxlbmd0aDsrK191KWlmKCEoYnRbX3VdWzBdLnMuYz53aS5jfHxidFtfdV1bMF0ucy5yPndpLnJ8fGJ0W191XVswXS5lLmM8d2kuY3x8YnRbX3VdWzBdLmUucjx3aS5yKSl7S3MuRj1odChidFtfdV1bMF0p''@;'; put 'put ''LChidFtfdV1bMF0ucy5jIT13aS5jfHxidFtfdV1bMF0ucy5yIT13aS5yKSYmZGVsZXRlIEtzLmYsS3MuZiYmKEtzLmY9IiIrdTEoYnRbX3VdWzFdLHNlLHdpLE1uLHFuKSk7YnJlYWt9UXMuZGVuc2U/KFBbd2kucl18fChQW3dpLnJdPVtdKSxQW3dpLnJdW3dpLmNdPUtzKTpQW1plXT1Lc319''@;'; put 'put ''LHFuPXtlbmM6ITEsc2JjY2g6MCxzbmFtZXM6W10sc2hhcmVkZjprdCxhcnJheWY6YnQscnJ0YWJpZDpbXSxsYXN0dXNlcjoiIixiaWZmOjgsY29kZXBhZ2U6MCx3aW5sb2NrZWQ6MCxjZWxsU3R5bGVzOiEhXyYmISFfLmNlbGxTdHlsZXMsV1RGOiEhXyYmISFfLnd0Zn07cW4ucGFzc3dvcmQ9''@;'; put 'put ''Xy5wYXNzd29yZD9fLnBhc3N3b3JkOiJWZWx2ZXRTd2VhdHNob3AiO3ZhciBPaSxfaT1udWxsLHNvPVtdLG1vPVtdLExpPVtdLGtyPVtdLF9yPSExLE1uPVtdO01uLlNoZWV0TmFtZXM9cW4uc25hbWVzLE1uLnNoYXJlZGY9cW4uc2hhcmVkZixNbi5hcnJheWY9cW4uYXJyYXlmLE1uLm5hbWVz''@;'; put 'put ''PVtdLE1uLlhUST1bXTt2YXIgdW8sTnI9IiIsamk9MCxiaT0wLE5vPVtdLFlhPVtdO3FuLmNvZGVwYWdlPTEyMDAsSCgxMjAwKTtmb3IodmFyIE1zPSExO2QubDxkLmxlbmd0aC0xOyl7dmFyIGRhPWQubCwkYT1kLnJlYWRfc2hpZnQoMik7aWYocW4mJnFuLmVuYyYmcW4uZW5jLmluc2l0dSYm''@;'; put 'put ''cW4uZW5jLmluc2l0dShrZShbMCwwXSksImhlYWRlci0wIiksMD09PSRhJiYiRU9GIj09PU5yKWJyZWFrO3ZhciBTYT1kLmw9PT1kLmxlbmd0aD8wOmQucmVhZF9zaGlmdCgyKTtxbiYmcW4uZW5jJiZxbi5lbmMuaW5zaXR1JiZxbi5lbmMuaW5zaXR1KGtlKFswLDBdKSwibGVuZ3RoLTAiKTt2''@;'; put 'put ''YXIgUGk9RzlbJGFdO2lmKFBpJiZQaS5mKXtpZihfLmJvb2tTaGVldHMmJiJCb3VuZFNoZWV0OCI9PT1OciYmIkJvdW5kU2hlZXQ4IiE9PVBpLm4pYnJlYWs7aWYoTnI9UGkubiwyPT09UGkucnx8MTI9PVBpLnIpe3ZhciBQYz1kLnJlYWRfc2hpZnQoMik7aWYoU2EtPTIscW4mJnFuLmVuYyYm''@;'; put 'put ''cW4uZW5jLmluc2l0dSYmcW4uZW5jLmluc2l0dShrZShbMCwwXSkpLCFxbi5lbmMmJlBjIT09JGEmJigoMjU1JlBjKTw8OHxQYz4+OCkhPT0kYSl0aHJvdyBuZXcgRXJyb3IoInJ0IG1pc21hdGNoOiAiK1BjKyIhPSIrJGEpOzEyPT1QaS5yJiYoZC5sKz0xMCxTYS09MTAscW4mJnFuLmVuYyYm''@;'; put 'put ''cW4uZW5jLmluc2l0dSYmcW4uZW5jLmluc2l0dShrZShbMCwwLDAsMCwwLDAsMCwwLDAsMF0pKSl9dmFyIHhuPVBCKFBpLGQsU2EscW4pLHhsPVBpLm47aWYoMD09amkmJiJCT0YiIT14bCljb250aW51ZTtzd2l0Y2goeGwpe2Nhc2UiRGF0ZTE5MDQiOm0ub3B0cy5EYXRlMTkwND1ubi5XQlBy''@;'; put 'put ''b3BzLmRhdGUxOTA0PXhuO2JyZWFrO2Nhc2UiV3JpdGVQcm90ZWN0IjptLm9wdHMuV3JpdGVQcm90ZWN0PSEwO2JyZWFrO2Nhc2UiRmlsZVBhc3MiOmlmKHFuLmVuY3x8KGQubD0wLGppPTApLHFuLmVuYz14biwhXy5wYXNzd29yZCYmbnVsbD09eG4udmFsaWQpdGhyb3cgbmV3IEVycm9yKCJG''@;'; put 'put ''aWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO2lmKG51bGw9PXhuLnZhbGlkKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGlvbiBzY2hlbWUgdW5zdXBwb3J0ZWQiKTtpZigheG4udmFsaWQpdGhyb3cgbmV3IEVycm9yKCJQYXNzd29yZCBpcyBpbmNvcnJlY3QiKTticmVhaztjYXNlIldyaXRl''@;'; put 'put ''QWNjZXNzIjpxbi5sYXN0dXNlcj14bjticmVhaztjYXNlIkZpbGVTaGFyaW5nIjpjYXNlIlRlbXBsYXRlIjpjYXNlIkJvb2tCb29sIjpjYXNlIlVzZXNFTEZzIjpjYXNlIk1UUlNldHRpbmdzIjpjYXNlIlVuY2FsY2VkIjpjYXNlIkV4dFNTVCI6Y2FzZSJCb29rRXh0IjpjYXNlIlJpY2hUZXh0''@;'; put 'put ''U3RyZWFtIjpjYXNlIkJrSGltIjpjYXNlIkluZGV4IjpjYXNlIlByb3Q0UmV2IjpjYXNlIlByb3Q0UmV2UGFzcyI6YnJlYWs7Y2FzZSJDb2RlUGFnZSI6dmFyIHFsPU51bWJlcih4bik7c3dpdGNoKHFsKXtjYXNlIDIxMDEwOnFsPTEyMDA7YnJlYWs7Y2FzZSAzMjc2ODpxbD0xZTQ7YnJlYWs7''@;'; put 'put ''Y2FzZSAzMjc2OTpxbD0xMjUyfUgocW4uY29kZXBhZ2U9cWwpLE1zPSEwO2JyZWFrO2Nhc2UiUlJUYWJJZCI6cW4ucnJ0YWJpZD14bjticmVhaztjYXNlIldpblByb3RlY3QiOnFuLndpbmxvY2tlZD14bjticmVhaztjYXNlIlJlZnJlc2hBbGwiOmNhc2UiQ2FsY0NvdW50IjpjYXNlIkNhbGNE''@;'; put 'put ''ZWx0YSI6Y2FzZSJDYWxjSXRlciI6Y2FzZSJDYWxjTW9kZSI6Y2FzZSJDYWxjUHJlY2lzaW9uIjpjYXNlIkNhbGNTYXZlUmVjYWxjIjptLm9wdHNbeGxdPXhuO2JyZWFrO2Nhc2UiQ2FsY1JlZk1vZGUiOnFuLkNhbGNSZWZNb2RlPXhuO2JyZWFrO2Nhc2UiRm9yY2VGdWxsQ2FsY3VsYXRpb24i''@;'; put 'put ''Om0ub3B0cy5GdWxsQ2FsYz14bjticmVhaztjYXNlIldzQm9vbCI6eG4uZkRpYWxvZyYmKFBbIiF0eXBlIl09ImRpYWxvZyIpLHhuLmZCZWxvd3x8KChQWyIhb3V0bGluZSJdfHwoUFsiIW91dGxpbmUiXT17fSkpLmFib3ZlPSEwKSx4bi5mUmlnaHR8fCgoUFsiIW91dGxpbmUiXXx8KFBbIiFv''@;'; put 'put ''dXRsaW5lIl09e30pKS5sZWZ0PSEwKTticmVhaztjYXNlIlhGIjp4bi5mb250PWpuLkZvbnRzW3huLmlmbnQ8ND94bi5pZm50OnhuLmlmbnQtMV0sdW4ucHVzaCh4bik7YnJlYWs7Y2FzZSJTdXBCb29rIjpNbi5wdXNoKFt4bl0pLE1uW01uLmxlbmd0aC0xXS5YVEk9W107YnJlYWs7Y2FzZSJF''@;'; put 'put ''eHRlcm5OYW1lIjpNbltNbi5sZW5ndGgtMV0ucHVzaCh4bik7YnJlYWs7Y2FzZSJMYmwiOnVvPXtOYW1lOnhuLk5hbWUsUmVmOnUxKHhuLnJnY2Usc2UsbnVsbCxNbixxbil9LHhuLml0YWI+MCYmKHVvLlNoZWV0PXhuLml0YWItMSksTW4ubmFtZXMucHVzaCh1byksTW5bMF18fChNblswXT1b''@;'; put 'put ''XSxNblswXS5YVEk9W10pLE1uW01uLmxlbmd0aC0xXS5wdXNoKHhuKSwiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIj09eG4uTmFtZSYmeG4uaXRhYj4wJiZ4bi5yZ2NlJiZ4bi5yZ2NlWzBdJiZ4bi5yZ2NlWzBdWzBdJiYiUHRnQXJlYTNkIj09eG4ucmdjZVswXVswXVswXSYmKFlhW3huLml0YWIt''@;'; put 'put ''MV09e3JlZjpodCh4bi5yZ2NlWzBdWzBdWzFdWzJdKX0pO2JyZWFrO2Nhc2UiRXh0ZXJuQ291bnQiOnFuLkV4dGVybkNvdW50PXhuO2JyZWFrO2Nhc2UiRXh0ZXJuU2hlZXQiOjA9PU1uLmxlbmd0aCYmKE1uWzBdPVtdLE1uWzBdLlhUST1bXSksTW5bTW4ubGVuZ3RoLTFdLlhUST1NbltNbi5s''@;'; put 'put ''ZW5ndGgtMV0uWFRJLmNvbmNhdCh4biksTW4uWFRJPU1uLlhUSS5jb25jYXQoeG4pO2JyZWFrO2Nhc2UiTmFtZUNtdCI6aWYocW4uYmlmZjw4KWJyZWFrO251bGwhPXVvJiYodW8uQ29tbWVudD14blsxXSk7YnJlYWs7Y2FzZSJQcm90ZWN0IjpQWyIhcHJvdGVjdCJdPXhuO2JyZWFrO2Nhc2Ui''@;'; put 'put ''UGFzc3dvcmQiOjAhPT14biYmcW4uV1RGJiZjb25zb2xlLmVycm9yKCJQYXNzd29yZCB2ZXJpZmllcjogIit4bik7YnJlYWs7Y2FzZSJCb3VuZFNoZWV0OCI6UVt4bi5wb3NdPXhuLHFuLnNuYW1lcy5wdXNoKHhuLm5hbWUpO2JyZWFrO2Nhc2UiRU9GIjppZihQWyIhZ3JpZGxpbmVzIl09IV9p''@;'; put 'put ''fHxfaS5ncmlkLF9pPW51bGwsLS1qaSlicmVhaztpZihzZS5lKXtpZihzZS5lLnI+MCYmc2UuZS5jPjApe2lmKHNlLmUuci0tLHNlLmUuYy0tLFBbIiFyZWYiXT1odChzZSksXy5zaGVldFJvd3MmJl8uc2hlZXRSb3dzPD1zZS5lLnIpe3ZhciBjaD1zZS5lLnI7c2UuZS5yPV8uc2hlZXRSb3dz''@;'; put 'put ''LTEsUFsiIWZ1bGxyZWYiXT1QWyIhcmVmIl0sUFsiIXJlZiJdPWh0KHNlKSxzZS5lLnI9Y2h9c2UuZS5yKyssc2UuZS5jKyt9c28ubGVuZ3RoPjAmJihQWyIhbWVyZ2VzIl09c28pLG1vLmxlbmd0aD4wJiZGZWUobW8sUCksTGkubGVuZ3RoPjAmJihQWyIhY29scyJdPUxpKSxrci5sZW5ndGg+''@;'; put 'put ''MCYmKFBbIiFyb3dzIl09a3IpLG5uLlNoZWV0cy5wdXNoKGFyKX0iIj09PUxlP05lPVA6VFtMZV09UCxQPV8uZGVuc2U/W106e307YnJlYWs7Y2FzZSJCT0YiOmlmKDg9PT1xbi5iaWZmJiYocW4uYmlmZj17OToyLDUyMTozLDEwMzM6NH1bJGFdfHx7NTEyOjIsNzY4OjMsMTAyNDo0LDEyODA6''@;'; put 'put ''NSwxNTM2OjgsMjoyLDc6Mn1beG4uQklGRlZlcl18fDgpLHFuLmJpZmZndWVzcz0wPT14bi5CSUZGVmVyLDA9PXhuLkJJRkZWZXImJjQwOTY9PXhuLmR0JiYocW4uYmlmZj01LE1zPSEwLEgocW4uY29kZXBhZ2U9Mjg1OTEpKSw4PT1xbi5iaWZmJiYwPT14bi5CSUZGVmVyJiYxNj09eG4uZHQm''@;'; put 'put ''Jihxbi5iaWZmPTIpLGppKyspYnJlYWs7aWYoUD1fLmRlbnNlP1tdOnt9LHFuLmJpZmY8OCYmIU1zJiYoTXM9ITAsSChxbi5jb2RlcGFnZT1fLmNvZGVwYWdlfHwxMjUyKSkscW4uYmlmZjw1fHwwPT14bi5CSUZGVmVyJiY0MDk2PT14bi5kdCl7IiI9PT1MZSYmKExlPSJTaGVldDEiKSxzZT17''@;'; put 'put ''czp7cjowLGM6MH0sZTp7cjowLGM6MH19O3ZhciBFZD17cG9zOmQubC1TYSxuYW1lOkxlfTtRW0VkLnBvc109RWQscW4uc25hbWVzLnB1c2goTGUpfWVsc2UgTGU9KFFbZGFdfHx7bmFtZToiIn0pLm5hbWU7MzI9PXhuLmR0JiYoUFsiIXR5cGUiXT0iY2hhcnQiKSw2ND09eG4uZHQmJihQWyIh''@;'; put 'put ''dHlwZSJdPSJtYWNybyIpLHNvPVtdLG1vPVtdLHFuLmFycmF5Zj1idD1bXSxMaT1bXSxrcj1bXSxfcj0hMSxhcj17SGlkZGVuOihRW2RhXXx8e2hzOjB9KS5ocyxuYW1lOkxlfTticmVhaztjYXNlIk51bWJlciI6Y2FzZSJCSUZGMk5VTSI6Y2FzZSJCSUZGMklOVCI6ImNoYXJ0Ij09UFsiIXR5''@;'; put 'put ''cGUiXSYmKF8uZGVuc2U/KFBbeG4ucl18fFtdKVt4bi5jXTpQW3FpKHtjOnhuLmMscjp4bi5yfSldKSYmKyt4bi5jLEV0PXtpeGZlOnhuLml4ZmUsWEY6dW5beG4uaXhmZV18fHt9LHY6eG4udmFsLHQ6Im4ifSxiaT4wJiYoRXQuej1Ob1tFdC5peGZlPj44JjYzXSksQmcoRXQsXyxtLm9wdHMu''@;'; put 'put ''RGF0ZTE5MDQpLGdyKHtjOnhuLmMscjp4bi5yfSxFdCxfKTticmVhaztjYXNlIkJvb2xFcnIiOkV0PXtpeGZlOnhuLml4ZmUsWEY6dW5beG4uaXhmZV0sdjp4bi52YWwsdDp4bi50fSxiaT4wJiYoRXQuej1Ob1tFdC5peGZlPj44JjYzXSksQmcoRXQsXyxtLm9wdHMuRGF0ZTE5MDQpLGdyKHtj''@;'; put 'put ''OnhuLmMscjp4bi5yfSxFdCxfKTticmVhaztjYXNlIlJLIjpFdD17aXhmZTp4bi5peGZlLFhGOnVuW3huLml4ZmVdLHY6eG4ucmtudW0sdDoibiJ9LGJpPjAmJihFdC56PU5vW0V0Lml4ZmU+PjgmNjNdKSxCZyhFdCxfLG0ub3B0cy5EYXRlMTkwNCksZ3Ioe2M6eG4uYyxyOnhuLnJ9LEV0LF8p''@;'; put 'put ''O2JyZWFrO2Nhc2UiTXVsUmsiOmZvcih2YXIgemQ9eG4uYzt6ZDw9eG4uQzsrK3pkKXt2YXIgTGg9eG4ucmtyZWNbemQteG4uY11bMF07RXQ9e2l4ZmU6TGgsWEY6dW5bTGhdLHY6eG4ucmtyZWNbemQteG4uY11bMV0sdDoibiJ9LGJpPjAmJihFdC56PU5vW0V0Lml4ZmU+PjgmNjNdKSxCZyhF''@;'; put 'put ''dCxfLG0ub3B0cy5EYXRlMTkwNCksZ3Ioe2M6emQscjp4bi5yfSxFdCxfKX1icmVhaztjYXNlIkZvcm11bGEiOmlmKCJTdHJpbmciPT14bi52YWwpe29lPXhuO2JyZWFrfWlmKChFdD15Uih4bi52YWwseG4uY2VsbC5peGZlLHhuLnR0KSkuWEY9dW5bRXQuaXhmZV0sXy5jZWxsRm9ybXVsYSl7''@;'; put 'put ''dmFyIGdjPXhuLmZvcm11bGE7aWYoZ2MmJmdjWzBdJiZnY1swXVswXSYmIlB0Z0V4cCI9PWdjWzBdWzBdWzBdKXt2YXIgTnQ9Z2NbMF1bMF1bMV1bMF0saG49Z2NbMF1bMF1bMV1bMV0sUG49cWkoe3I6TnQsYzpobn0pO2t0W1BuXT9FdC5mPSIiK3UxKHhuLmZvcm11bGEsc2UseG4uY2VsbCxN''@;'; put 'put ''bixxbik6RXQuRj0oKF8uZGVuc2U/KFBbTnRdfHxbXSlbaG5dOlBbUG5dKXx8e30pLkZ9ZWxzZSBFdC5mPSIiK3UxKHhuLmZvcm11bGEsc2UseG4uY2VsbCxNbixxbil9Ymk+MCYmKEV0Lno9Tm9bRXQuaXhmZT4+OCY2M10pLEJnKEV0LF8sbS5vcHRzLkRhdGUxOTA0KSxncih4bi5jZWxsLEV0''@;'; put 'put ''LF8pLG9lPXhuO2JyZWFrO2Nhc2UiU3RyaW5nIjppZighb2UpdGhyb3cgbmV3IEVycm9yKCJTdHJpbmcgcmVjb3JkIGV4cGVjdHMgRm9ybXVsYSIpO29lLnZhbD14biwoRXQ9eVIoeG4sb2UuY2VsbC5peGZlLCJzIikpLlhGPXVuW0V0Lml4ZmVdLF8uY2VsbEZvcm11bGEmJihFdC5mPSIiK3Ux''@;'; put 'put ''KG9lLmZvcm11bGEsc2Usb2UuY2VsbCxNbixxbikpLGJpPjAmJihFdC56PU5vW0V0Lml4ZmU+PjgmNjNdKSxCZyhFdCxfLG0ub3B0cy5EYXRlMTkwNCksZ3Iob2UuY2VsbCxFdCxfKSxvZT1udWxsO2JyZWFrO2Nhc2UiQXJyYXkiOmJ0LnB1c2goeG4pO3ZhciBTaT1xaSh4blswXS5zKTtpZihu''@;'; put 'put ''dD1fLmRlbnNlPyhQW3huWzBdLnMucl18fFtdKVt4blswXS5zLmNdOlBbU2ldLF8uY2VsbEZvcm11bGEmJm50KXtpZighb2V8fCFTaXx8IW50KWJyZWFrO250LmY9IiIrdTEoeG5bMV0sc2UseG5bMF0sTW4scW4pLG50LkY9aHQoeG5bMF0pfWJyZWFrO2Nhc2UiU2hyRm1sYSI6aWYoIV8uY2Vs''@;'; put 'put ''bEZvcm11bGEpYnJlYWs7aWYoWmUpe2lmKCFvZSlicmVhaztrdFtxaShvZS5jZWxsKV09eG5bMF0sKChudD1fLmRlbnNlPyhQW29lLmNlbGwucl18fFtdKVtvZS5jZWxsLmNdOlBbcWkob2UuY2VsbCldKXx8e30pLmY9IiIrdTEoeG5bMF0sc2UsQmUsTW4scW4pfWJyZWFrO2Nhc2UiTGFiZWxT''@;'; put 'put ''c3QiOkV0PXlSKGRlW3huLmlzc3RdLnQseG4uaXhmZSwicyIpLGRlW3huLmlzc3RdLmgmJihFdC5oPWRlW3huLmlzc3RdLmgpLEV0LlhGPXVuW0V0Lml4ZmVdLGJpPjAmJihFdC56PU5vW0V0Lml4ZmU+PjgmNjNdKSxCZyhFdCxfLG0ub3B0cy5EYXRlMTkwNCksZ3Ioe2M6eG4uYyxyOnhuLnJ9''@;'; put 'put ''LEV0LF8pLGRlW3huLmlzc3RdLlImJihFdC5SPWRlW3huLmlzc3RdLlIubWFwKGZ1bmN0aW9uKERvKXt2YXIgd2k9UXIoRG8pO3JldHVybiBEby5zPT1qbi5Gb250c1swXSYmKHdpLnM9RXQucyksd2l9KSk7YnJlYWs7Y2FzZSJCbGFuayI6Xy5zaGVldFN0dWJzJiYoRXQ9e2l4ZmU6eG4uaXhm''@;'; put 'put ''ZSxYRjp1blt4bi5peGZlXSx0OiJ6In0sYmk+MCYmKEV0Lno9Tm9bRXQuaXhmZT4+OCY2M10pLEJnKEV0LF8sbS5vcHRzLkRhdGUxOTA0KSxncih7Yzp4bi5jLHI6eG4ucn0sRXQsXykpO2JyZWFrO2Nhc2UiTXVsQmxhbmsiOmlmKF8uc2hlZXRTdHVicylmb3IodmFyIGVyPXhuLmM7ZXI8PXhu''@;'; put 'put ''LkM7Kytlcil7dmFyIERpPXhuLml4ZmVbZXIteG4uY107RXQ9e2l4ZmU6RGksWEY6dW5bRGldLHQ6InoifSxiaT4wJiYoRXQuej1Ob1tFdC5peGZlPj44JjYzXSksQmcoRXQsXyxtLm9wdHMuRGF0ZTE5MDQpLGdyKHtjOmVyLHI6eG4ucn0sRXQsXyl9YnJlYWs7Y2FzZSJSU3RyaW5nIjpjYXNl''@;'; put 'put ''IkxhYmVsIjpjYXNlIkJJRkYyU1RSIjooRXQ9eVIoeG4udmFsLHhuLml4ZmUsInMiKSkuWEY9dW5bRXQuaXhmZV0sYmk+MCYmKEV0Lno9Tm9bRXQuaXhmZT4+OCY2M10pLEJnKEV0LF8sbS5vcHRzLkRhdGUxOTA0KSxncih7Yzp4bi5jLHI6eG4ucn0sRXQsXyk7YnJlYWs7Y2FzZSJEaW1lbnNp''@;'; put 'put ''b25zIjoxPT09amkmJihzZT14bik7YnJlYWs7Y2FzZSJTU1QiOihkZT14bikuZm9yRWFjaChmdW5jdGlvbihEbyl7RG8uX1I/KERvLl9SWzBdJiZEby5fUlswXS5pZHg+MCYmRG8uX1IudW5zaGlmdCh7aWR4OjAsaWZudDowfSksRG8uUj1Eby5fUi5tYXAoZnVuY3Rpb24od2ksS3Mpe3JldHVy''@;'; put 'put ''bnt0OiJzIix2OkRvLnQuc2xpY2Uod2kuaWR4LChEby5fUltLcysxXXx8e30pLmlkeCksczpqbi5Gb250c1t3aS5pZm50PDQ/d2kuaWZudDp3aS5pZm50LTFdfX0pLF8uY2VsbEhUTUwmJihEby5oPXVTKERvLlIpKSk6Xy5jZWxsSFRNTCYmKERvLmg9JGkoRG8udCkpLGRlbGV0ZSBEby5fUn0p''@;'; put 'put ''O2JyZWFrO2Nhc2UiRm9ybWF0IjppZig0PT1xbi5iaWZmKXtOb1tiaSsrXT14blsxXTtmb3IodmFyIGJyPTA7YnI8YmkrMTYzJiZJLl90YWJsZVticl0hPXhuWzFdOysrYnIpO2JyPj0xNjMmJkkubG9hZCh4blsxXSxiaSsxNjMpfWVsc2UgSS5sb2FkKHhuWzFdLHhuWzBdKTticmVhaztjYXNl''@;'; put 'put ''IkJJRkYyRk9STUFUIjpOb1tiaSsrXT14bjtmb3IodmFyIFJpPTA7Umk8YmkrMTYzJiZJLl90YWJsZVtSaV0hPXhuOysrUmkpO1JpPj0xNjMmJkkubG9hZCh4bixiaSsxNjMpO2JyZWFrO2Nhc2UiTWVyZ2VDZWxscyI6c289c28uY29uY2F0KHhuKTticmVhaztjYXNlIk9iaiI6bW9beG4uY21v''@;'; put 'put ''WzBdXT1xbi5sYXN0b2JqPXhuO2JyZWFrO2Nhc2UiVHhPIjpxbi5sYXN0b2JqLlR4Tz14bjticmVhaztjYXNlIkltRGF0YSI6cW4ubGFzdG9iai5JbURhdGE9eG47YnJlYWs7Y2FzZSJITGluayI6Zm9yKGZ0PXhuWzBdLnMucjtmdDw9eG5bMF0uZS5yOysrZnQpZm9yKFFlPXhuWzBdLnMuYztR''@;'; put 'put ''ZTw9eG5bMF0uZS5jOysrUWUpKG50PV8uZGVuc2U/KFBbZnRdfHxbXSlbUWVdOlBbcWkoe2M6UWUscjpmdH0pXSkmJihudC5sPXhuWzFdKTticmVhaztjYXNlIkhMaW5rVG9vbHRpcCI6Zm9yKGZ0PXhuWzBdLnMucjtmdDw9eG5bMF0uZS5yOysrZnQpZm9yKFFlPXhuWzBdLnMuYztRZTw9eG5b''@;'; put 'put ''MF0uZS5jOysrUWUpKG50PV8uZGVuc2U/KFBbZnRdfHxbXSlbUWVdOlBbcWkoe2M6UWUscjpmdH0pXSkmJm50LmwmJihudC5sLlRvb2x0aXA9eG5bMV0pO2JyZWFrO2Nhc2UiTm90ZSI6aWYocW4uYmlmZjw9NSYmcW4uYmlmZj49MilicmVhaztudD1fLmRlbnNlPyhQW3huWzBdLnJdfHxbXSlb''@;'; put 'put ''eG5bMF0uY106UFtxaSh4blswXSldO3ZhciB2YT1tb1t4blsyXV07bnR8fChfLmRlbnNlPyhQW3huWzBdLnJdfHwoUFt4blswXS5yXT1bXSksbnQ9UFt4blswXS5yXVt4blswXS5jXT17dDoieiJ9KTpudD1QW3FpKHhuWzBdKV09e3Q6InoifSxzZS5lLnI9TWF0aC5tYXgoc2UuZS5yLHhuWzBd''@;'; put 'put ''LnIpLHNlLnMucj1NYXRoLm1pbihzZS5zLnIseG5bMF0uciksc2UuZS5jPU1hdGgubWF4KHNlLmUuYyx4blswXS5jKSxzZS5zLmM9TWF0aC5taW4oc2Uucy5jLHhuWzBdLmMpKSxudC5jfHwobnQuYz1bXSksbnQuYy5wdXNoKHthOnhuWzFdLHQ6dmEuVHhPLnR9KTticmVhaztkZWZhdWx0OnN3''@;'; put 'put ''aXRjaChQaS5uKXtjYXNlIkNscnRDbGllbnQiOmNhc2UiSGVhZGVyIjpjYXNlIkZvb3RlciI6Y2FzZSJIQ2VudGVyIjpjYXNlIlZDZW50ZXIiOmNhc2UiUGxzIjpjYXNlIkdDVyI6Y2FzZSJMSFJlY29yZCI6Y2FzZSJEQkNlbGwiOmNhc2UiRW50RXhVMiI6Y2FzZSJTeFZpZXciOmNhc2UiU3h2''@;'; put 'put ''ZCI6Y2FzZSJTWFZJIjpjYXNlIlNYVkRFeCI6Y2FzZSJTeEl2ZCI6Y2FzZSJTWFN0cmluZyI6Y2FzZSJTeW5jIjpjYXNlIkFkZGluIjpjYXNlIlNYREkiOmNhc2UiU1hMSSI6Y2FzZSJTWEV4IjpjYXNlIlFzaVNYVGFnIjpjYXNlIkZlYXQiOmNhc2UiRmVhdEhkciI6Y2FzZSJGZWF0SGRyMTEi''@;'; put 'put ''OmNhc2UiRmVhdHVyZTExIjpjYXNlIkZlYXR1cmUxMiI6Y2FzZSJMaXN0MTIiOmNhc2UiUmVjYWxjSWQiOmNhc2UiRHhHQ29sIjpjYXNlIkZiaSI6Y2FzZSJGYmkyIjpjYXNlIkdlbEZyYW1lIjpjYXNlIlhGQ1JDIjpjYXNlIlN0eWxlIjpjYXNlIlN0eWxlRXh0IjpjYXNlIlNjZW5hcmlvUHJv''@;'; put 'put ''dGVjdCI6Y2FzZSJPYmpQcm90ZWN0IjpjYXNlIkNvbmRGbXQxMiI6Y2FzZSJUYWJsZSI6Y2FzZSJUYWJsZVN0eWxlcyI6Y2FzZSJUYWJsZVN0eWxlIjpjYXNlIlRhYmxlU3R5bGVFbGVtZW50IjpjYXNlIlNYU3RyZWFtSUQiOmNhc2UiU1hWUyI6Y2FzZSJEQ29uUmVmIjpjYXNlIlNYQWRkbCI6''@;'; put 'put ''Y2FzZSJEQ29uQmluIjpjYXNlIkRDb25OYW1lIjpjYXNlIlNYUEkiOmNhc2UiU3hGb3JtYXQiOmNhc2UiU3hTZWxlY3QiOmNhc2UiU3hSdWxlIjpjYXNlIlN4RmlsdCI6Y2FzZSJTeEl0bSI6Y2FzZSJTeERYRiI6Y2FzZSJTY2VuTWFuIjpjYXNlIkRDb24iOmNhc2UiQ2VsbFdhdGNoIjpjYXNl''@;'; put 'put ''IlByaW50Um93Q29sIjpjYXNlIlByaW50R3JpZCI6Y2FzZSJQcmludFNpemUiOmNhc2UiWENUIjpjYXNlIkNSTiI6Y2FzZSJTY2wiOmNhc2UiU2hlZXRFeHQiOmNhc2UiU2hlZXRFeHRPcHRpb25hbCI6Y2FzZSJPYk5vTWFjcm9zIjpjYXNlIk9iUHJvaiI6Y2FzZSJHVUlEVHlwZUxpYiI6Y2Fz''@;'; put 'put ''ZSJXT3B0IjpjYXNlIlBob25ldGljSW5mbyI6Y2FzZSJPbGVPYmplY3RTaXplIjpjYXNlIkRYRiI6Y2FzZSJEWEZOIjpjYXNlIkRYRk4xMiI6Y2FzZSJEWEZOMTJMaXN0IjpjYXNlIkRYRk4xMk5vQ0IiOmNhc2UiRHYiOmNhc2UiRFZhbCI6Y2FzZSJCUkFJIjpjYXNlIlNlcmllcyI6Y2FzZSJT''@;'; put 'put ''ZXJpZXNUZXh0IjpjYXNlIkRDb25uIjpjYXNlIkRiT3JQYXJhbVFyeSI6Y2FzZSJEQlF1ZXJ5RXh0IjpjYXNlIk9sZURiQ29ubiI6Y2FzZSJFeHRTdHJpbmciOmNhc2UiSUZtdFJlY29yZCI6Y2FzZSJDb25kRm10IjpjYXNlIkNGIjpjYXNlIkNGMTIiOmNhc2UiQ0ZFeCI6Y2FzZSJFeGNlbDlG''@;'; put 'put ''aWxlIjpjYXNlIlVuaXRzIjpjYXNlIkludGVyZmFjZUhkciI6Y2FzZSJNbXMiOmNhc2UiSW50ZXJmYWNlRW5kIjpjYXNlIkRTRiI6Y2FzZSJCdWlsdEluRm5Hcm91cENvdW50IjpjYXNlIldpbmRvdzEiOmNhc2UiSGlkZU9iaiI6Y2FzZSJHcmlkU2V0IjpjYXNlIkd1dHMiOmNhc2UiVXNlckJW''@;'; put 'put ''aWV3IjpjYXNlIlVzZXJTVmlld0JlZ2luIjpjYXNlIlVzZXJTVmlld0VuZCI6Y2FzZSJEZWZDb2xXaWR0aCI6Y2FzZSJEZWZhdWx0Um93SGVpZ2h0IjpicmVhaztjYXNlIlhGRXh0IjpoUSh1blt4bi5peGZlXSx4bi5leHQpO2JyZWFrO2Nhc2UiQ29sSW5mbyI6aWYoIXFuLmNlbGxTdHlsZXMp''@;'; put 'put ''YnJlYWs7Zm9yKDt4bi5lPj14bi5zOylMaVt4bi5lLS1dPXt3aWR0aDp4bi53LzI1NixsZXZlbDp4bi5sZXZlbHx8MCxoaWRkZW46ISEoMSZ4bi5mbGFncyl9LF9yfHwoX3I9ITApLEIwKExpW3huLmUrMV0pO2JyZWFrO2Nhc2UiUm93Ijp2YXIgTmk9e307bnVsbCE9eG4ubGV2ZWwmJihrclt4''@;'; put 'put ''bi5yXT1OaSxOaS5sZXZlbD14bi5sZXZlbCkseG4uaGlkZGVuJiYoa3JbeG4ucl09TmksTmkuaGlkZGVuPSEwKSx4bi5ocHQmJihrclt4bi5yXT1OaSxOaS5ocHQ9eG4uaHB0LE5pLmhweD1OZyh4bi5ocHQpKSx4bi5peGZlJiYoa3JbeG4ucl09Tmksc3IoRXQ9e2l4ZmU6eG4uaXhmZSxYRjp1''@;'; put 'put ''blt4bi5peGZlXXx8e30sdjowLHQ6Im4ifSxfKSxOaS5zPUV0LnMpO2JyZWFrO2Nhc2UiTGVmdE1hcmdpbiI6Y2FzZSJSaWdodE1hcmdpbiI6Y2FzZSJUb3BNYXJnaW4iOmNhc2UiQm90dG9tTWFyZ2luIjpQWyIhbWFyZ2lucyJdfHxMOChQWyIhbWFyZ2lucyJdPXt9KSxQWyIhbWFyZ2lucyJd''@;'; put 'put ''W3hsLnNsaWNlKDAsLTYpLnRvTG93ZXJDYXNlKCldPXhuO2JyZWFrO2Nhc2UiU2VsZWN0aW9uIjpQWyIhc2VsIl09eG47YnJlYWs7Y2FzZSJTZXR1cCI6UFsiIW1hcmdpbnMiXXx8TDgoUFsiIW1hcmdpbnMiXT17fSksUFsiIW1hcmdpbnMiXS5oZWFkZXI9eG4uaGVhZGVyLFBbIiFtYXJnaW5z''@;'; put 'put ''Il0uZm9vdGVyPXhuLmZvb3RlcjticmVhaztjYXNlIldpbmRvdzIiOnhuLlJUTCYmKG5uLlZpZXdzWzBdLlJUTD0hMCksX2k9eG47YnJlYWs7Y2FzZSJDb3VudHJ5IjpWdD14bjticmVhaztjYXNlIkZvbnQiOnhuLmljdiYma24oeG4uaWN2KSYmKHhuLmNvbG9yPXtyZ2I6YjMoa24oeG4uaWN2''@;'; put 'put ''KSl9KSxkZWxldGUgeG4uaWN2LDA9PWpuLkZvbnRzLmxlbmd0aCYmJG0oeG4pLGpuLkZvbnRzLnB1c2goeG4pO2JyZWFrO2Nhc2UiUGFsZXR0ZSI6bnI9eG47YnJlYWs7Y2FzZSJUaGVtZSI6T2k9eG47YnJlYWs7Y2FzZSJDb2RlTmFtZSI6TGU/YXIuQ29kZU5hbWU9eG58fGFyLm5hbWU6bm4u''@;'; put 'put ''V0JQcm9wcy5Db2RlTmFtZT14bnx8IlRoaXNXb3JrYm9vayI7YnJlYWs7Y2FzZSJQYW5lIjooX2l8fHt9KS5mcm96ZW4mJihQWyIhZnJlZXplIl09cWkoe3I6eG4ueXx8MCxjOnhuLnh8fDB9KSk7YnJlYWs7ZGVmYXVsdDpzd2l0Y2goUGkubil7Y2FzZSJEYXQiOmNhc2UiQmVnaW4iOmNhc2Ui''@;'; put 'put ''RW5kIjpjYXNlIlN0YXJ0QmxvY2siOmNhc2UiRW5kQmxvY2siOmNhc2UiRnJhbWUiOmNhc2UiQXJlYSI6Y2FzZSJBeGlzIjpjYXNlIkF4aXNMaW5lIjpjYXNlIlRpY2siOmNhc2UiQXhlc1VzZWQiOmNhc2UiQ3J0TGF5b3V0MTIiOmNhc2UiQ3J0TGF5b3V0MTJBIjpjYXNlIkNydExpbmsiOmNh''@;'; put 'put ''c2UiQ3J0TGluZSI6Y2FzZSJDcnRNbEZydCI6Y2FzZSJDcnRNbEZydENvbnRpbnVlIjpjYXNlIkxpbmVGb3JtYXQiOmNhc2UiQXJlYUZvcm1hdCI6Y2FzZSJDaGFydCI6Y2FzZSJDaGFydDNkIjpjYXNlIkNoYXJ0M0RCYXJTaGFwZSI6Y2FzZSJDaGFydEZvcm1hdCI6Y2FzZSJDaGFydEZydElu''@;'; put 'put ''Zm8iOmNhc2UiUGxvdEFyZWEiOmNhc2UiUGxvdEdyb3d0aCI6Y2FzZSJTZXJpZXNMaXN0IjpjYXNlIlNlclBhcmVudCI6Y2FzZSJTZXJBdXhUcmVuZCI6Y2FzZSJEYXRhRm9ybWF0IjpjYXNlIlNlclRvQ3J0IjpjYXNlIkZvbnRYIjpjYXNlIkNhdFNlclJhbmdlIjpjYXNlIkF4Y0V4dCI6Y2Fz''@;'; put 'put ''ZSJTZXJGbXQiOmNhc2UiU2h0UHJvcHMiOmNhc2UiRGVmYXVsdFRleHQiOmNhc2UiVGV4dCI6Y2FzZSJDYXRMYWIiOmNhc2UiRGF0YUxhYkV4dENvbnRlbnRzIjpjYXNlIkxlZ2VuZCI6Y2FzZSJMZWdlbmRFeGNlcHRpb24iOmNhc2UiUGllIjpjYXNlIlNjYXR0ZXIiOmNhc2UiUGllRm9ybWF0''@;'; put 'put ''IjpjYXNlIk1hcmtlckZvcm1hdCI6Y2FzZSJTdGFydE9iamVjdCI6Y2FzZSJFbmRPYmplY3QiOmNhc2UiQWxSdW5zIjpjYXNlIk9iamVjdExpbmsiOmNhc2UiU0lJbmRleCI6Y2FzZSJBdHRhY2hlZExhYmVsIjpjYXNlIllNdWx0IjpjYXNlIkxpbmUiOmNhc2UiQmFyIjpjYXNlIlN1cmYiOmNh''@;'; put 'put ''c2UiQXhpc1BhcmVudCI6Y2FzZSJQb3MiOmNhc2UiVmFsdWVSYW5nZSI6Y2FzZSJTWFZpZXdFeDkiOmNhc2UiU1hWaWV3TGluayI6Y2FzZSJQaXZvdENoYXJ0Qml0cyI6Y2FzZSJTQmFzZVJlZiI6Y2FzZSJUZXh0UHJvcHNTdHJlYW0iOmNhc2UiTG5FeHQiOmNhc2UiTWtyRXh0IjpjYXNlIkNy''@;'; put 'put ''dENvb3B0IjpjYXNlIlFzaSI6Y2FzZSJRc2lmIjpjYXNlIlFzaXIiOmNhc2UiUXNpU1hUYWciOmNhc2UiVHh0UXJ5IjpjYXNlIkZpbHRlck1vZGUiOmNhc2UiQXV0b0ZpbHRlciI6Y2FzZSJBdXRvRmlsdGVySW5mbyI6Y2FzZSJBdXRvRmlsdGVyMTIiOmNhc2UiRHJvcERvd25PYmpJZHMiOmNh''@;'; put 'put ''c2UiU29ydCI6Y2FzZSJTb3J0RGF0YSI6Y2FzZSJTaGFwZVByb3BzU3RyZWFtIjpjYXNlIk1zb0RyYXdpbmciOmNhc2UiTXNvRHJhd2luZ0dyb3VwIjpjYXNlIk1zb0RyYXdpbmdTZWxlY3Rpb24iOmNhc2UiV2ViUHViIjpjYXNlIkF1dG9XZWJQdWIiOmNhc2UiSGVhZGVyRm9vdGVyIjpjYXNl''@;'; put 'put ''IkhGUGljdHVyZSI6Y2FzZSJQTFYiOmNhc2UiSG9yaXpvbnRhbFBhZ2VCcmVha3MiOmNhc2UiVmVydGljYWxQYWdlQnJlYWtzIjpjYXNlIkJhY2t1cCI6Y2FzZSJDb21wcmVzc1BpY3R1cmVzIjpjYXNlIkNvbXBhdDEyIjpjYXNlIkNvbnRpbnVlIjpjYXNlIkNvbnRpbnVlRnJ0MTIiOmNhc2Ui''@;'; put 'put ''RnJ0Rm9udExpc3QiOmNhc2UiRnJ0V3JhcHBlciI6YnJlYWs7ZGVmYXVsdDpzd2l0Y2goUGkubil7Y2FzZSJUYWJJZENvbmYiOmNhc2UiUmFkYXIiOmNhc2UiUmFkYXJBcmVhIjpjYXNlIkRyb3BCYXIiOmNhc2UiSW50bCI6Y2FzZSJDb29yZExpc3QiOmNhc2UiU2VyQXV4RXJyQmFyIjpjYXNl''@;'; put 'put ''IkJJRkYyRk9OVENMUiI6Y2FzZSJCSUZGMkZNVENOVCI6Y2FzZSJCSUZGMkZPTlRYVFJBIjpjYXNlIkJJRkYyWEYiOmNhc2UiQklGRjNYRiI6Y2FzZSJCSUZGNFhGIjpjYXNlIkJJRkYyWEZJTkRFWCI6Y2FzZSJCSUZGNEZNVENOVCI6Y2FzZSJCSUZGMlJPVyI6Y2FzZSJCSUZGMldJTkRPVzIi''@;'; put 'put ''OmNhc2UiU0NFTkFSSU8iOmNhc2UiRENvbkJpbiI6Y2FzZSJQaWNGIjpjYXNlIkRhdGFMYWJFeHQiOmNhc2UiTGVsIjpjYXNlIkJvcFBvcCI6Y2FzZSJCb3BQb3BDdXN0b20iOmNhc2UiUmVhbFRpbWVEYXRhIjpjYXNlIk5hbWUiOmNhc2UiTEhOR3JhcGgiOmNhc2UiRm5Hcm91cE5hbWUiOmNh''@;'; put 'put ''c2UiQWRkTWVudSI6Y2FzZSJMUHIiOmNhc2UiTGlzdE9iaiI6Y2FzZSJMaXN0RmllbGQiOmNhc2UiUlJTb3J0IjpjYXNlIkJpZ05hbWUiOmNhc2UiVG9vbGJhckhkciI6Y2FzZSJUb29sYmFyRW5kIjpjYXNlIkRERU9iak5hbWUiOmNhc2UiRlJUQXJjaElkJCI6YnJlYWs7ZGVmYXVsdDppZihf''@;'; put 'put ''LldURil0aHJvdyJVbnJlY29nbml6ZWQgUmVjb3JkICIrUGkubn19fX19ZWxzZSBkLmwrPVNhLHFuJiZxbi5lbmMmJnFuLmVuYy5pbnNpdHUmJnFuLmVuYy5pbnNpdHUoa2Uoe2xlbmd0aDpTYX0pKX1yZXR1cm4gbS5TaGVldE5hbWVzPUZlKFEpLnNvcnQoZnVuY3Rpb24oRG8sd2kpe3JldHVy''@;'; put 'put ''biBOdW1iZXIoRG8pLU51bWJlcih3aSl9KS5tYXAoZnVuY3Rpb24oRG8pe3JldHVybiBRW0RvXS5uYW1lfSksXy5ib29rU2hlZXRzfHwobS5TaGVldHM9VCksIW0uU2hlZXROYW1lcy5sZW5ndGgmJk5lWyIhcmVmIl0/KG0uU2hlZXROYW1lcy5wdXNoKCJTaGVldDEiKSxtLlNoZWV0cyYmKG0u''@;'; put 'put ''U2hlZXRzLlNoZWV0MT1OZSkpOm0uUHJlYW1ibGU9TmUsbS5TaGVldHMmJllhLmZvckVhY2goZnVuY3Rpb24oRG8sd2kpe20uU2hlZXRzW20uU2hlZXROYW1lc1t3aV1dWyIhYXV0b2ZpbHRlciJdPURvfSksbS5TdHJpbmdzPWRlLG0uU1NGPUkuZ2V0X3RhYmxlKCkscW4uZW5jJiYobS5FbmNy''@;'; put 'put ''eXB0aW9uPXFuLmVuYyksT2kmJihtLlRoZW1lcz1PaSksbS5NZXRhZGF0YT17fSx2b2lkIDAhPT1WdCYmKG0uTWV0YWRhdGEuQ291bnRyeT1WdCksTW4ubmFtZXMubGVuZ3RoPjAmJihubi5OYW1lcz1Nbi5uYW1lcyksbS5Xb3JrYm9vaz1ubixtfShULmNvbnRlbnQsXyk7ZWxzZSBpZigoUT1h''@;'; put 'put ''ZS5maW5kKGQsIlBlcmZlY3RPZmZpY2VfTUFJTiIpKSYmUS5jb250ZW50KVA9Y1MudG9fd29ya2Jvb2soUS5jb250ZW50LChfLnR5cGU9c2UsXykpO2Vsc2V7aWYoIShRPWFlLmZpbmQoZCwiTmF0aXZlQ29udGVudF9NQUlOIikpfHwhUS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiQ2Fubm90''@;'; put 'put ''IGZpbmQgV29ya2Jvb2sgc3RyZWFtIik7UD1jUy50b193b3JrYm9vayhRLmNvbnRlbnQsKF8udHlwZT1zZSxfKSl9Xy5ib29rVkJBJiZkLkZ1bGxQYXRocyYmYWUuZmluZChkLCIvX1ZCQV9QUk9KRUNUX0NVUi9WQkEvZGlyIikmJihQLnZiYXJhdz1mdW5jdGlvbiBLSChkKXt2YXIgXz1hZS51''@;'; put 'put ''dGlscy5jZmJfbmV3KHtyb290OiJSIn0pO3JldHVybiBkLkZ1bGxQYXRocy5mb3JFYWNoKGZ1bmN0aW9uKG0sVCl7aWYoIi8iIT09bS5zbGljZSgtMSkmJm0ubWF0Y2goL19WQkFfUFJPSkVDVF9DVVIvKSl7dmFyIFA9bS5yZXBsYWNlKC9eW15cL10qLywiUiIpLnJlcGxhY2UoL1wvX1ZCQV9Q''@;'; put 'put ''Uk9KRUNUX0NVUlx1MDAwMCovLCIiKTthZS51dGlscy5jZmJfYWRkKF8sUCxkLkZpbGVJbmRleFtUXS5jb250ZW50KX19KSxhZS53cml0ZShfKX0oZCkpfXZhciBvZT17fTtyZXR1cm4gZC5GdWxsUGF0aHMmJmZ1bmN0aW9uIEhCKGQsXyxtKXt2YXIgVD1hZS5maW5kKGQsIiFEb2N1bWVudFN1''@;'; put 'put ''bW1hcnlJbmZvcm1hdGlvbiIpO2lmKFQmJlQuc2l6ZT4wKXRyeXt2YXIgUD1meShULHVwLGo4X0RTSSk7Zm9yKHZhciBRIGluIFApX1tRXT1QW1FdfWNhdGNoKExlKXtpZihtLldURil0aHJvdyBMZX12YXIgc2U9YWUuZmluZChkLCIhU3VtbWFyeUluZm9ybWF0aW9uIik7aWYoc2UmJnNlLnNp''@;'; put 'put ''emU+MCl0cnl7dmFyIG9lPWZ5KHNlLGMwLGo4X1NJKTtmb3IodmFyIGRlIGluIG9lKW51bGw9PV9bZGVdJiYoX1tkZV09b2VbZGVdKX1jYXRjaChMZSl7aWYobS5XVEYpdGhyb3cgTGV9Xy5IZWFkaW5nUGFpcnMmJl8uVGl0bGVzT2ZQYXJ0cyYmKGdwKF8uSGVhZGluZ1BhaXJzLF8uVGl0bGVz''@;'; put 'put ''T2ZQYXJ0cyxfLG0pLGRlbGV0ZSBfLkhlYWRpbmdQYWlycyxkZWxldGUgXy5UaXRsZXNPZlBhcnRzKX0oZCxvZSxfKSxQLlByb3BzPVAuQ3VzdHByb3BzPW9lLF8uYm9va0ZpbGVzJiYoUC5jZmI9ZCksUH12YXIgWjk9ezA6e246IkJydFJvd0hkciIsZjpmdW5jdGlvbiBHVihkLF8pe3ZhciBt''@;'; put 'put ''PXt9LFQ9ZC5sK187bS5yPWQucmVhZF9zaGlmdCg0KSxkLmwrPTQ7dmFyIFA9ZC5yZWFkX3NoaWZ0KDIpO2QubCs9MTt2YXIgUT1kLnJlYWRfc2hpZnQoMSk7cmV0dXJuIGQubD1ULDcmUSYmKG0ubGV2ZWw9NyZRKSwxNiZRJiYobS5oaWRkZW49ITApLDMyJlEmJihtLmhwdD1QLzIwKSxtfX0s''@;'; put 'put ''MTp7bjoiQnJ0Q2VsbEJsYW5rIixmOmZ1bmN0aW9uIHFWKGQpe3JldHVybltzbihkKV19fSwyOntuOiJCcnRDZWxsUmsiLGY6ZnVuY3Rpb24gekooZCl7cmV0dXJuW3NuKGQpLGJkKGQpLCJuIl19fSwzOntuOiJCcnRDZWxsRXJyb3IiLGY6ZnVuY3Rpb24gVkooZCl7cmV0dXJuW3NuKGQpLGQu''@;'; put 'put ''cmVhZF9zaGlmdCgxKSwiZSJdfX0sNDp7bjoiQnJ0Q2VsbEJvb2wiLGY6ZnVuY3Rpb24gS1YoZCl7cmV0dXJuW3NuKGQpLGQucmVhZF9zaGlmdCgxKSwiYiJdfX0sNTp7bjoiQnJ0Q2VsbFJlYWwiLGY6ZnVuY3Rpb24gWGsoZCl7cmV0dXJuW3NuKGQpLHFzKGQpLCJuIl19fSw2OntuOiJCcnRD''@;'; put 'put ''ZWxsU3QiLGY6ZnVuY3Rpb24gaUIoZCl7cmV0dXJuW3NuKGQpLGlpKGQpLCJzdHIiXX19LDc6e246IkJydENlbGxJc3N0IixmOmZ1bmN0aW9uIHFrKGQpe3JldHVybltzbihkKSxkLnJlYWRfc2hpZnQoNCksInMiXX19LDg6e246IkJydEZtbGFTdHJpbmciLGY6ZnVuY3Rpb24gVTVlKGQsXyxt''@;'; put 'put ''KXt2YXIgVD1kLmwrXyxQPXNuKGQpO1Aucj1tWyIhcm93Il07dmFyIHNlPVtQLGlpKGQpLCJzdHIiXTtpZihtLmNlbGxGb3JtdWxhKXtkLmwrPTI7dmFyIG9lPVA5KGQsVC1kLmwsbSk7c2VbM109dTEob2UsbnVsbCxQLG0uc3VwYm9va3MsbSl9ZWxzZSBkLmw9VDtyZXR1cm4gc2V9fSw5Ontu''@;'; put 'put ''OiJCcnRGbWxhTnVtIixmOmZ1bmN0aW9uIFpKKGQsXyxtKXt2YXIgVD1kLmwrXyxQPXNuKGQpO1Aucj1tWyIhcm93Il07dmFyIHNlPVtQLHFzKGQpLCJuIl07aWYobS5jZWxsRm9ybXVsYSl7ZC5sKz0yO3ZhciBvZT1QOShkLFQtZC5sLG0pO3NlWzNdPXUxKG9lLG51bGwsUCxtLnN1cGJvb2tz''@;'; put 'put ''LG0pfWVsc2UgZC5sPVQ7cmV0dXJuIHNlfX0sMTA6e246IkJydEZtbGFCb29sIixmOmZ1bmN0aW9uIGFCKGQsXyxtKXt2YXIgVD1kLmwrXyxQPXNuKGQpO1Aucj1tWyIhcm93Il07dmFyIHNlPVtQLGQucmVhZF9zaGlmdCgxKSwiYiJdO2lmKG0uY2VsbEZvcm11bGEpe2QubCs9Mjt2YXIgb2U9''@;'; put 'put ''UDkoZCxULWQubCxtKTtzZVszXT11MShvZSxudWxsLFAsbS5zdXBib29rcyxtKX1lbHNlIGQubD1UO3JldHVybiBzZX19LDExOntuOiJCcnRGbWxhRXJyb3IiLGY6ZnVuY3Rpb24gWUooZCxfLG0pe3ZhciBUPWQubCtfLFA9c24oZCk7UC5yPW1bIiFyb3ciXTt2YXIgc2U9W1AsZC5yZWFkX3No''@;'; put 'put ''aWZ0KDEpLCJlIl07aWYobS5jZWxsRm9ybXVsYSl7ZC5sKz0yO3ZhciBvZT1QOShkLFQtZC5sLG0pO3NlWzNdPXUxKG9lLG51bGwsUCxtLnN1cGJvb2tzLG0pfWVsc2UgZC5sPVQ7cmV0dXJuIHNlfX0sMTI6e246IkJydFNob3J0QmxhbmsiLGY6ZnVuY3Rpb24gVVMoZCl7cmV0dXJuW0RhKGQp''@;'; put 'put ''XX19LDEzOntuOiJCcnRTaG9ydFJrIixmOmZ1bmN0aW9uIGo1ZShkKXtyZXR1cm5bRGEoZCksYmQoZCksIm4iXX19LDE0OntuOiJCcnRTaG9ydEVycm9yIixmOmZ1bmN0aW9uIEpWKGQpe3JldHVybltEYShkKSxkLnJlYWRfc2hpZnQoMSksImUiXX19LDE1OntuOiJCcnRTaG9ydEJvb2wiLGY6''@;'; put 'put ''ZnVuY3Rpb24gTnkoZCl7cmV0dXJuW0RhKGQpLGQucmVhZF9zaGlmdCgxKSwiYiJdfX0sMTY6e246IkJydFNob3J0UmVhbCIsZjpuQn0sMTc6e246IkJydFNob3J0U3QiLGY6ZnVuY3Rpb24gelMoZCl7cmV0dXJuW0RhKGQpLGlpKGQpLCJzdHIiXX19LDE4OntuOiJCcnRTaG9ydElzc3QiLGY6''@;'; put 'put ''ZnVuY3Rpb24gZUIoZCl7cmV0dXJuW0RhKGQpLGQucmVhZF9zaGlmdCg0KSwicyJdfX0sMTk6e246IkJydFNTVEl0ZW0iLGY6Um99LDIwOntuOiJCcnRQQ0RJTWlzc2luZyJ9LDIxOntuOiJCcnRQQ0RJTnVtYmVyIn0sMjI6e246IkJydFBDRElCb29sZWFuIn0sMjM6e246IkJydFBDRElFcnJv''@;'; put 'put ''ciJ9LDI0OntuOiJCcnRQQ0RJU3RyaW5nIn0sMjU6e246IkJydFBDRElEYXRldGltZSJ9LDI2OntuOiJCcnRQQ0RJSW5kZXgifSwyNzp7bjoiQnJ0UENESUFNaXNzaW5nIn0sMjg6e246IkJydFBDRElBTnVtYmVyIn0sMjk6e246IkJydFBDRElBQm9vbGVhbiJ9LDMwOntuOiJCcnRQQ0RJQUVy''@;'; put 'put ''cm9yIn0sMzE6e246IkJydFBDRElBU3RyaW5nIn0sMzI6e246IkJydFBDRElBRGF0ZXRpbWUifSwzMzp7bjoiQnJ0UENSUmVjb3JkIn0sMzQ6e246IkJydFBDUlJlY29yZER0In0sMzU6e246IkJydEZSVEJlZ2luIn0sMzY6e246IkJydEZSVEVuZCJ9LDM3OntuOiJCcnRBQ0JlZ2luIn0sMzg6''@;'; put 'put ''e246IkJydEFDRW5kIn0sMzk6e246IkJydE5hbWUiLGY6ZnVuY3Rpb24gc1IoZCxfLG0pe3ZhciBUPWQubCtfO2QubCs9NCxkLmwrPTE7dmFyIFA9ZC5yZWFkX3NoaWZ0KDQpLFE9RHUoZCksc2U9VDVlKGQsMCxtKSxvZT1uYyhkKTtkLmw9VDt2YXIgZGU9e05hbWU6USxQdGc6c2V9O3JldHVy''@;'; put 'put ''biBQPDI2ODQzNTQ1NSYmKGRlLlNoZWV0PVApLG9lJiYoZGUuQ29tbWVudD1vZSksZGV9fSw0MDp7bjoiQnJ0SW5kZXhSb3dCbG9jayJ9LDQyOntuOiJCcnRJbmRleEJsb2NrIn0sNDM6e246IkJydEZvbnQiLGY6ZnVuY3Rpb24gVEgoZCxfLG0pe3ZhciBUPXt9O1Quc3o9ZC5yZWFkX3NoaWZ0''@;'; put 'put ''KDIpLzIwO3ZhciBQPWpkKGQpO3N3aXRjaChQLmZCb2xkJiYoVC5ib2xkPTEpLFAuZkl0YWxpYyYmKFQuaXRhbGljPTEpLFAuZlVuZGVybGluZSYmKFQudW5kZXJsaW5lPTEpLFAuZkNvbmRlbnNlJiYoVC5jb25kZW5zZT0xKSxQLmZFeHRlbmQmJihULmV4dGVuZD0xKSxQLmZTaGFkb3cmJihU''@;'; put 'put ''LnNoYWRvdz0xKSxQLmZPdXRsaW5lJiYoVC5vdXRsaW5lPTEpLFAuZlN0cmlrZW91dCYmKFQuc3RyaWtlPTEpLDcwMD09PWQucmVhZF9zaGlmdCgyKSYmKFQuYm9sZD0xKSxkLnJlYWRfc2hpZnQoMikpe2Nhc2UgMTpULnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2UgMjpULnZhbGlnbj0ic3Vi''@;'; put 'put ''In12YXIgc2U9ZC5yZWFkX3NoaWZ0KDEpOzAhPXNlJiYoVC51bmRlcmxpbmU9c2UpO3ZhciBvZT1kLnJlYWRfc2hpZnQoMSk7b2U+MCYmKFQuZmFtaWx5PW9lKTt2YXIgZGU9ZC5yZWFkX3NoaWZ0KDEpO3N3aXRjaChkZT4wJiYoVC5jaGFyc2V0PWRlKSxkLmwrKyxULmNvbG9yPU5sKGQpLGQu''@;'; put 'put ''cmVhZF9zaGlmdCgxKSl7Y2FzZSAxOlQuc2NoZW1lPSJtYWpvciI7YnJlYWs7Y2FzZSAyOlQuc2NoZW1lPSJtaW5vciJ9cmV0dXJuIFQubmFtZT1paShkKSxUfX0sNDQ6e246IkJydEZtdCIsZjpmdW5jdGlvbiB5UyhkLF8pe3JldHVybltkLnJlYWRfc2hpZnQoMiksaWkoZCldfX0sNDU6e246''@;'; put 'put ''IkJydEZpbGwiLGY6ZnVuY3Rpb24gcUEoZCxfKXt2YXIgbT1kLmwrXyxUPXt9LFA9ZC5yZWFkX3NoaWZ0KDQpO2lmKDQwIT1QKXtULnBhdHRlcm5UeXBlPVM4W1BdO3ZhciBRPU5sKGQpOzY0IT1RLmluZGV4JiYoVC5mZ0NvbG9yPVEpO3ZhciBzZT1ObChkKTs2NSE9c2UuaW5kZXgmJihULmJn''@;'; put 'put ''Q29sb3I9c2UpfWVsc2V7ZC5sKz0xNixkLnJlYWRfc2hpZnQoNCkscXMoZCkscXMoZCkscXMoZCkscXMoZCkscXMoZCk7Zm9yKHZhciBvZT1kLnJlYWRfc2hpZnQoNCksZGU9W10sTGU9MDtMZTxvZTsrK0xlKWRlLnB1c2goclEoZCkpfXJldHVybiBkLmw9bSxUfX0sNDY6e246IkJydEJvcmRl''@;'; put 'put ''ciIsZjpmdW5jdGlvbiBSSChkKXt2YXIgXz17fTtkLnJlYWRfc2hpZnQoMSk7dmFyIG09eXkoZCk7Im5vbmUiIT1tLnN0eWxlJiYoXy50b3A9bSk7dmFyIFQ9eXkoZCk7Im5vbmUiIT1ULnN0eWxlJiYoXy5ib3R0b209VCk7dmFyIFA9eXkoZCk7Im5vbmUiIT1QLnN0eWxlJiYoXy5sZWZ0PVAp''@;'; put 'put ''O3ZhciBRPXl5KGQpOyJub25lIiE9US5zdHlsZSYmKF8ucmlnaHQ9USk7dmFyIHNlPXl5KGQpO3JldHVybiJub25lIiE9c2Uuc3R5bGUmJihfLmRpYWc9c2UpLF99fSw0Nzp7bjoiQnJ0WEYiLGY6ZnVuY3Rpb24gaVEoZCxfKXt2YXIgbT1kLmwrXyxUPXt9LFA9ZC5yZWFkX3NoaWZ0KDIpLFE9''@;'; put 'put ''ZC5yZWFkX3NoaWZ0KDIpLHNlPWQucmVhZF9zaGlmdCgyKSxvZT1kLnJlYWRfc2hpZnQoMiksZGU9ZC5yZWFkX3NoaWZ0KDIpLExlPWQucmVhZF9zaGlmdCgxKTtkLnJlYWRfc2hpZnQoMSk7dmFyIE5lPWQucmVhZF9zaGlmdCgyKSxCZT1kLnJlYWRfc2hpZnQoMSk7ZC5sPW0sVC54ZklkPVAs''@;'; put 'put ''VC5udW1GbXRJZD1RLFQuZm9udElkPXNlLFQuZmlsbElkPW9lLFQuYm9yZGVySWQ9ZGUsMSZCZSYmMCE9VC5udW1GbXRJZCYmKFQuYXBwbHlOdW1iZXJGb3JtYXQ9ITApLFQuYWxpZ25tZW50PXt9LExlPjAmJihULmFsaWdubWVudC50ZXh0Um90YXRpb249TGUpO3ZhciBaZT0hMTtyZXR1cm4g''@;'; put 'put ''NyZOZSYmKFplPSEwLFQuYWxpZ25tZW50Lmhvcml6b250YWw9S0FbNyZOZV0pLFQuYWxpZ25tZW50LnZlcnRpY2FsPWJTW05lPj4+MyY3XSxULmFsaWdubWVudC52ZXJ0aWNhbCYmKFplPSEwKSxOZT4+PjYmMSYmKFQuYWxpZ25tZW50LndyYXBUZXh0PSEwKSxOZT4+PjgmMSYmKFQuYWxpZ25t''@;'; put 'put ''ZW50LnNocmlua1RvRml0PSEwKSxaZXx8ZGVsZXRlIFQuYWxpZ25tZW50LDQmQmUmJlplJiYoVC5hcHBseUFsaWdubWVudD0hMCksVH19LDQ4OntuOiJCcnRTdHlsZSJ9LDQ5OntuOiJCcnRDZWxsTWV0YSJ9LDUwOntuOiJCcnRWYWx1ZU1ldGEifSw1MTp7bjoiQnJ0TWRiIn0sNTI6e246IkJy''@;'; put 'put ''dEJlZ2luRm1kIn0sNTM6e246IkJydEVuZEZtZCJ9LDU0OntuOiJCcnRCZWdpbk1keCJ9LDU1OntuOiJCcnRFbmRNZHgifSw1Njp7bjoiQnJ0QmVnaW5NZHhUdXBsZSJ9LDU3OntuOiJCcnRFbmRNZHhUdXBsZSJ9LDU4OntuOiJCcnRNZHhNYnJJc3RyIn0sNTk6e246IkJydFN0ciJ9LDYwOntu''@;'; put 'put ''OiJCcnRDb2xJbmZvIixmOm04fSw2Mjp7bjoiQnJ0Q2VsbFJTdHJpbmcifSw2Mzp7bjoiQnJ0Q2FsY0NoYWluSXRlbSQiLGY6ZnVuY3Rpb24gbVEoZCl7dmFyIF89e307Xy5pPWQucmVhZF9zaGlmdCg0KTt2YXIgbT17fTttLnI9ZC5yZWFkX3NoaWZ0KDQpLG0uYz1kLnJlYWRfc2hpZnQoNCks''@;'; put 'put ''Xy5yPXFpKG0pO3ZhciBUPWQucmVhZF9zaGlmdCgxKTtyZXR1cm4gMiZUJiYoXy5sPSIxIiksOCZUJiYoXy5hPSIxIiksX319LDY0OntuOiJCcnREVmFsIixmOmZ1bmN0aW9uIFFKKGQsXyxtKXt2YXIgVD1kLmwrXyxQPWQucmVhZF9zaGlmdCg0KSxRPXcyKGQpLHNlPW5jKGQpLG9lPW5jKGQp''@;'; put 'put ''LGRlPW5jKGQpLExlPW5jKGQpLE5lPVRWKGQsXyxtKSxCZT1kLmw8VD9UVihkLF8sbSk6bnVsbCxaZT0xNSZQLG50PXt0OkprW1plXSxzcXJmeDpRLHM6W3NlLG9lLGRlLExlXX07cmV0dXJuIE5lJiYobnQuZjE9TmUpLEJlJiYobnQuZjI9QmUpLDA9PVplfHwzPT1aZXx8Nz09WmV8fChudC5v''@;'; put 'put ''cD1QeVtQPj4yMCYxNV0pLG50fX0sNjU6e246IkJydFN4dmNlbGxOdW0ifSw2Njp7bjoiQnJ0U3h2Y2VsbFN0ciJ9LDY3OntuOiJCcnRTeHZjZWxsQm9vbCJ9LDY4OntuOiJCcnRTeHZjZWxsRXJyIn0sNjk6e246IkJydFN4dmNlbGxEYXRlIn0sNzA6e246IkJydFN4dmNlbGxOaWwifSwxMjg6''@;'; put 'put ''e246IkJydEZpbGVWZXJzaW9uIn0sMTI5OntuOiJCcnRCZWdpblNoZWV0In0sMTMwOntuOiJCcnRFbmRTaGVldCJ9LDEzMTp7bjoiQnJ0QmVnaW5Cb29rIixmOkVjLHA6MH0sMTMyOntuOiJCcnRFbmRCb29rIn0sMTMzOntuOiJCcnRCZWdpbldzVmlld3MifSwxMzQ6e246IkJydEVuZFdzVmll''@;'; put 'put ''d3MifSwxMzU6e246IkJydEJlZ2luQm9va1ZpZXdzIn0sMTM2OntuOiJCcnRFbmRCb29rVmlld3MifSwxMzc6e246IkJydEJlZ2luV3NWaWV3IixmOmZ1bmN0aW9uIHVCKGQpe3ZhciBfPWQucmVhZF9zaGlmdCgyKTtyZXR1cm4gZC5sKz0yOCx7UlRMOjMyJl8sZ3JpZDohISg0Jl8pfX19LDEz''@;'; put 'put ''ODp7bjoiQnJ0RW5kV3NWaWV3In0sMTM5OntuOiJCcnRCZWdpbkNzVmlld3MifSwxNDA6e246IkJydEVuZENzVmlld3MifSwxNDE6e246IkJydEJlZ2luQ3NWaWV3In0sMTQyOntuOiJCcnRFbmRDc1ZpZXcifSwxNDM6e246IkJydEJlZ2luQnVuZGxlU2hzIn0sMTQ0OntuOiJCcnRFbmRCdW5k''@;'; put 'put ''bGVTaHMifSwxNDU6e246IkJydEJlZ2luU2hlZXREYXRhIn0sMTQ2OntuOiJCcnRFbmRTaGVldERhdGEifSwxNDc6e246IkJydFdzUHJvcCIsZjpmdW5jdGlvbiAkVihkLF8pe3ZhciBtPXt9LFQ9ZFtkLmxdO3JldHVybisrZC5sLG0uYWJvdmU9ISg2NCZUKSxtLmxlZnQ9ISgxMjgmVCksZC5s''@;'; put 'put ''Kz0xOCxtLm5hbWU9RWwoZCxfLTE5KSxtfX0sMTQ4OntuOiJCcnRXc0RpbSIsZjpGSixwOjE2fSwxNTE6e246IkJydFBhbmUiLGY6ZnVuY3Rpb24gUWsoZCxfKXt2YXIgbT1kLmwrXztxcyhkKSxxcyhkKTt2YXIgVD1kLnJlYWRfc2hpZnQoNCwiaSIpLFA9ZC5yZWFkX3NoaWZ0KDQsImkiKTtp''@;'; put 'put ''ZihkLnJlYWRfc2hpZnQoNCksZC5yZWFkX3NoaWZ0KDEpLG0hPWQubCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBCcnRQYW5lOiAiK20rIiAhPSAiK2QubCk7cmV0dXJuW3FpKHtyOlQsYzpQfSldfX0sMTUyOntuOiJCcnRTZWwiLGY6ZnVuY3Rpb24gc0IoZCxfKXtyZXR1cm4gZC5yZWFkX3NoaWZ0''@;'; put 'put ''KDQpLHtjZWxsOnFpKHtyOmQucmVhZF9zaGlmdCg0KSxjOmQucmVhZF9zaGlmdCg0KX0pfX19LDE1Mzp7bjoiQnJ0V2JQcm9wIixmOmZ1bmN0aW9uIGFSKGQsXyl7dmFyIG09e30sVD1kLnJlYWRfc2hpZnQoNCk7bS5kZWZhdWx0VGhlbWVWZXJzaW9uPWQucmVhZF9zaGlmdCg0KTt2YXIgUD1f''@;'; put 'put ''Pjg/aWkoZCk6IiI7cmV0dXJuIFAubGVuZ3RoPjAmJihtLkNvZGVOYW1lPVApLG0uYXV0b0NvbXByZXNzUGljdHVyZXM9ISEoNjU1MzYmVCksbS5iYWNrdXBGaWxlPSEhKDY0JlQpLG0uY2hlY2tDb21wYXRpYmlsaXR5PSEhKDQwOTYmVCksbS5kYXRlMTkwND0hISgxJlQpLG0uZmlsdGVyUHJp''@;'; put 'put ''dmFjeT0hISg4JlQpLG0uaGlkZVBpdm90RmllbGRMaXN0PSEhKDEwMjQmVCksbS5wcm9tcHRlZFNvbHV0aW9ucz0hISgxNiZUKSxtLnB1Ymxpc2hJdGVtcz0hISgyMDQ4JlQpLG0ucmVmcmVzaEFsbENvbm5lY3Rpb25zPSEhKDI2MjE0NCZUKSxtLnNhdmVFeHRlcm5hbExpbmtWYWx1ZXM9ISEo''@;'; put 'put ''MTI4JlQpLG0uc2hvd0JvcmRlclVuc2VsZWN0ZWRUYWJsZXM9ISEoNCZUKSxtLnNob3dJbmtBbm5vdGF0aW9uPSEhKDMyJlQpLG0uc2hvd09iamVjdHM9WyJhbGwiLCJwbGFjZWhvbGRlcnMiLCJub25lIl1bVD4+MTMmM10sbS5zaG93UGl2b3RDaGFydEZpbHRlcj0hISgzMjc2OCZUKSxtLnVw''@;'; put 'put ''ZGF0ZUxpbmtzPVsidXNlclNldCIsIm5ldmVyIiwiYWx3YXlzIl1bVD4+OCYzXSxtfX0sMTU0OntuOiJCcnRXYkZhY3RvaWQifSwxNTU6e246IkJydEZpbGVSZWNvdmVyIn0sMTU2OntuOiJCcnRCdW5kbGVTaCIsZjpmdW5jdGlvbiBnYShkLF8pe3ZhciBtPXt9O3JldHVybiBtLkhpZGRlbj1k''@;'; put 'put ''LnJlYWRfc2hpZnQoNCksbS5pVGFiSUQ9ZC5yZWFkX3NoaWZ0KDQpLG0uc3RyUmVsSUQ9ZTEoZCxfLTgpLG0ubmFtZT1paShkKSxtfX0sMTU3OntuOiJCcnRDYWxjUHJvcCJ9LDE1ODp7bjoiQnJ0Qm9va1ZpZXcifSwxNTk6e246IkJydEJlZ2luU3N0IixmOmZ1bmN0aW9uIHAwKGQpe3JldHVy''@;'; put 'put ''bltkLnJlYWRfc2hpZnQoNCksZC5yZWFkX3NoaWZ0KDQpXX19LDE2MDp7bjoiQnJ0RW5kU3N0In0sMTYxOntuOiJCcnRCZWdpbkFGaWx0ZXIiLGY6anV9LDE2Mjp7bjoiQnJ0RW5kQUZpbHRlciJ9LDE2Mzp7bjoiQnJ0QmVnaW5GaWx0ZXJDb2x1bW4ifSwxNjQ6e246IkJydEVuZEZpbHRlckNv''@;'; put 'put ''bHVtbiJ9LDE2NTp7bjoiQnJ0QmVnaW5GaWx0ZXJzIn0sMTY2OntuOiJCcnRFbmRGaWx0ZXJzIn0sMTY3OntuOiJCcnRGaWx0ZXIifSwxNjg6e246IkJydENvbG9yRmlsdGVyIn0sMTY5OntuOiJCcnRJY29uRmlsdGVyIn0sMTcwOntuOiJCcnRUb3AxMEZpbHRlciJ9LDE3MTp7bjoiQnJ0RHlu''@;'; put 'put ''YW1pY0ZpbHRlciJ9LDE3Mjp7bjoiQnJ0QmVnaW5DdXN0b21GaWx0ZXJzIn0sMTczOntuOiJCcnRFbmRDdXN0b21GaWx0ZXJzIn0sMTc0OntuOiJCcnRDdXN0b21GaWx0ZXIifSwxNzU6e246IkJydEFGaWx0ZXJEYXRlR3JvdXBJdGVtIn0sMTc2OntuOiJCcnRNZXJnZUNlbGwiLGY6ejVlfSwx''@;'; put 'put ''Nzc6e246IkJydEJlZ2luTWVyZ2VDZWxscyJ9LDE3ODp7bjoiQnJ0RW5kTWVyZ2VDZWxscyJ9LDE3OTp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlRGVmIn0sMTgwOntuOiJCcnRFbmRQaXZvdENhY2hlRGVmIn0sMTgxOntuOiJCcnRCZWdpblBDREZpZWxkcyJ9LDE4Mjp7bjoiQnJ0RW5kUENERmll''@;'; put 'put ''bGRzIn0sMTgzOntuOiJCcnRCZWdpblBDREZpZWxkIn0sMTg0OntuOiJCcnRFbmRQQ0RGaWVsZCJ9LDE4NTp7bjoiQnJ0QmVnaW5QQ0RTb3VyY2UifSwxODY6e246IkJydEVuZFBDRFNvdXJjZSJ9LDE4Nzp7bjoiQnJ0QmVnaW5QQ0RTUmFuZ2UifSwxODg6e246IkJydEVuZFBDRFNSYW5nZSJ9''@;'; put 'put ''LDE4OTp7bjoiQnJ0QmVnaW5QQ0RGQXRibCJ9LDE5MDp7bjoiQnJ0RW5kUENERkF0YmwifSwxOTE6e246IkJydEJlZ2luUENESVJ1biJ9LDE5Mjp7bjoiQnJ0RW5kUENESVJ1biJ9LDE5Mzp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlUmVjb3JkcyJ9LDE5NDp7bjoiQnJ0RW5kUGl2b3RDYWNoZVJl''@;'; put 'put ''Y29yZHMifSwxOTU6e246IkJydEJlZ2luUENESGllcmFyY2hpZXMifSwxOTY6e246IkJydEVuZFBDREhpZXJhcmNoaWVzIn0sMTk3OntuOiJCcnRCZWdpblBDREhpZXJhcmNoeSJ9LDE5ODp7bjoiQnJ0RW5kUENESGllcmFyY2h5In0sMTk5OntuOiJCcnRCZWdpblBDREhGaWVsZHNVc2FnZSJ9''@;'; put 'put ''LDIwMDp7bjoiQnJ0RW5kUENESEZpZWxkc1VzYWdlIn0sMjAxOntuOiJCcnRCZWdpbkV4dENvbm5lY3Rpb24ifSwyMDI6e246IkJydEVuZEV4dENvbm5lY3Rpb24ifSwyMDM6e246IkJydEJlZ2luRUNEYlByb3BzIn0sMjA0OntuOiJCcnRFbmRFQ0RiUHJvcHMifSwyMDU6e246IkJydEJlZ2lu''@;'; put 'put ''RUNPbGFwUHJvcHMifSwyMDY6e246IkJydEVuZEVDT2xhcFByb3BzIn0sMjA3OntuOiJCcnRCZWdpblBDRFNDb25zb2wifSwyMDg6e246IkJydEVuZFBDRFNDb25zb2wifSwyMDk6e246IkJydEJlZ2luUENEU0NQYWdlcyJ9LDIxMDp7bjoiQnJ0RW5kUENEU0NQYWdlcyJ9LDIxMTp7bjoiQnJ0''@;'; put 'put ''QmVnaW5QQ0RTQ1BhZ2UifSwyMTI6e246IkJydEVuZFBDRFNDUGFnZSJ9LDIxMzp7bjoiQnJ0QmVnaW5QQ0RTQ1BJdGVtIn0sMjE0OntuOiJCcnRFbmRQQ0RTQ1BJdGVtIn0sMjE1OntuOiJCcnRCZWdpblBDRFNDU2V0cyJ9LDIxNjp7bjoiQnJ0RW5kUENEU0NTZXRzIn0sMjE3OntuOiJCcnRC''@;'; put 'put ''ZWdpblBDRFNDU2V0In0sMjE4OntuOiJCcnRFbmRQQ0RTQ1NldCJ9LDIxOTp7bjoiQnJ0QmVnaW5QQ0RGR3JvdXAifSwyMjA6e246IkJydEVuZFBDREZHcm91cCJ9LDIyMTp7bjoiQnJ0QmVnaW5QQ0RGR0l0ZW1zIn0sMjIyOntuOiJCcnRFbmRQQ0RGR0l0ZW1zIn0sMjIzOntuOiJCcnRCZWdp''@;'; put 'put ''blBDREZHUmFuZ2UifSwyMjQ6e246IkJydEVuZFBDREZHUmFuZ2UifSwyMjU6e246IkJydEJlZ2luUENERkdEaXNjcmV0ZSJ9LDIyNjp7bjoiQnJ0RW5kUENERkdEaXNjcmV0ZSJ9LDIyNzp7bjoiQnJ0QmVnaW5QQ0RTRFR1cGxlQ2FjaGUifSwyMjg6e246IkJydEVuZFBDRFNEVHVwbGVDYWNo''@;'; put 'put ''ZSJ9LDIyOTp7bjoiQnJ0QmVnaW5QQ0RTRFRDRW50cmllcyJ9LDIzMDp7bjoiQnJ0RW5kUENEU0RUQ0VudHJpZXMifSwyMzE6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXJzIn0sMjMyOntuOiJCcnRFbmRQQ0RTRFRDRU1lbWJlcnMifSwyMzM6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXIi''@;'; put 'put ''fSwyMzQ6e246IkJydEVuZFBDRFNEVENFTWVtYmVyIn0sMjM1OntuOiJCcnRCZWdpblBDRFNEVENRdWVyaWVzIn0sMjM2OntuOiJCcnRFbmRQQ0RTRFRDUXVlcmllcyJ9LDIzNzp7bjoiQnJ0QmVnaW5QQ0RTRFRDUXVlcnkifSwyMzg6e246IkJydEVuZFBDRFNEVENRdWVyeSJ9LDIzOTp7bjoi''@;'; put 'put ''QnJ0QmVnaW5QQ0RTRFRDU2V0cyJ9LDI0MDp7bjoiQnJ0RW5kUENEU0RUQ1NldHMifSwyNDE6e246IkJydEJlZ2luUENEU0RUQ1NldCJ9LDI0Mjp7bjoiQnJ0RW5kUENEU0RUQ1NldCJ9LDI0Mzp7bjoiQnJ0QmVnaW5QQ0RDYWxjSXRlbXMifSwyNDQ6e246IkJydEVuZFBDRENhbGNJdGVtcyJ9''@;'; put 'put ''LDI0NTp7bjoiQnJ0QmVnaW5QQ0RDYWxjSXRlbSJ9LDI0Njp7bjoiQnJ0RW5kUENEQ2FsY0l0ZW0ifSwyNDc6e246IkJydEJlZ2luUFJ1bGUifSwyNDg6e246IkJydEVuZFBSdWxlIn0sMjQ5OntuOiJCcnRCZWdpblBSRmlsdGVycyJ9LDI1MDp7bjoiQnJ0RW5kUFJGaWx0ZXJzIn0sMjUxOntu''@;'; put 'put ''OiJCcnRCZWdpblBSRmlsdGVyIn0sMjUyOntuOiJCcnRFbmRQUkZpbHRlciJ9LDI1Mzp7bjoiQnJ0QmVnaW5QTmFtZXMifSwyNTQ6e246IkJydEVuZFBOYW1lcyJ9LDI1NTp7bjoiQnJ0QmVnaW5QTmFtZSJ9LDI1Njp7bjoiQnJ0RW5kUE5hbWUifSwyNTc6e246IkJydEJlZ2luUE5QYWlycyJ9''@;'; put 'put ''LDI1ODp7bjoiQnJ0RW5kUE5QYWlycyJ9LDI1OTp7bjoiQnJ0QmVnaW5QTlBhaXIifSwyNjA6e246IkJydEVuZFBOUGFpciJ9LDI2MTp7bjoiQnJ0QmVnaW5FQ1dlYlByb3BzIn0sMjYyOntuOiJCcnRFbmRFQ1dlYlByb3BzIn0sMjYzOntuOiJCcnRCZWdpbkVjV3BUYWJsZXMifSwyNjQ6e246''@;'; put 'put ''IkJydEVuZEVDV1BUYWJsZXMifSwyNjU6e246IkJydEJlZ2luRUNQYXJhbXMifSwyNjY6e246IkJydEVuZEVDUGFyYW1zIn0sMjY3OntuOiJCcnRCZWdpbkVDUGFyYW0ifSwyNjg6e246IkJydEVuZEVDUGFyYW0ifSwyNjk6e246IkJydEJlZ2luUENES1BJcyJ9LDI3MDp7bjoiQnJ0RW5kUENE''@;'; put 'put ''S1BJcyJ9LDI3MTp7bjoiQnJ0QmVnaW5QQ0RLUEkifSwyNzI6e246IkJydEVuZFBDREtQSSJ9LDI3Mzp7bjoiQnJ0QmVnaW5EaW1zIn0sMjc0OntuOiJCcnRFbmREaW1zIn0sMjc1OntuOiJCcnRCZWdpbkRpbSJ9LDI3Njp7bjoiQnJ0RW5kRGltIn0sMjc3OntuOiJCcnRJbmRleFBhcnRFbmQi''@;'; put 'put ''fSwyNzg6e246IkJydEJlZ2luU3R5bGVTaGVldCJ9LDI3OTp7bjoiQnJ0RW5kU3R5bGVTaGVldCJ9LDI4MDp7bjoiQnJ0QmVnaW5TWFZpZXcifSwyODE6e246IkJydEVuZFNYVkkifSwyODI6e246IkJydEJlZ2luU1hWSSJ9LDI4Mzp7bjoiQnJ0QmVnaW5TWFZJcyJ9LDI4NDp7bjoiQnJ0RW5k''@;'; put 'put ''U1hWSXMifSwyODU6e246IkJydEJlZ2luU1hWRCJ9LDI4Njp7bjoiQnJ0RW5kU1hWRCJ9LDI4Nzp7bjoiQnJ0QmVnaW5TWFZEcyJ9LDI4ODp7bjoiQnJ0RW5kU1hWRHMifSwyODk6e246IkJydEJlZ2luU1hQSSJ9LDI5MDp7bjoiQnJ0RW5kU1hQSSJ9LDI5MTp7bjoiQnJ0QmVnaW5TWFBJcyJ9''@;'; put 'put ''LDI5Mjp7bjoiQnJ0RW5kU1hQSXMifSwyOTM6e246IkJydEJlZ2luU1hESSJ9LDI5NDp7bjoiQnJ0RW5kU1hESSJ9LDI5NTp7bjoiQnJ0QmVnaW5TWERJcyJ9LDI5Njp7bjoiQnJ0RW5kU1hESXMifSwyOTc6e246IkJydEJlZ2luU1hMSSJ9LDI5ODp7bjoiQnJ0RW5kU1hMSSJ9LDI5OTp7bjoi''@;'; put 'put ''QnJ0QmVnaW5TWExJUndzIn0sMzAwOntuOiJCcnRFbmRTWExJUndzIn0sMzAxOntuOiJCcnRCZWdpblNYTElDb2xzIn0sMzAyOntuOiJCcnRFbmRTWExJQ29scyJ9LDMwMzp7bjoiQnJ0QmVnaW5TWEZvcm1hdCJ9LDMwNDp7bjoiQnJ0RW5kU1hGb3JtYXQifSwzMDU6e246IkJydEJlZ2luU1hG''@;'; put 'put ''b3JtYXRzIn0sMzA2OntuOiJCcnRFbmRTeEZvcm1hdHMifSwzMDc6e246IkJydEJlZ2luU3hTZWxlY3QifSwzMDg6e246IkJydEVuZFN4U2VsZWN0In0sMzA5OntuOiJCcnRCZWdpbklTWFZEUndzIn0sMzEwOntuOiJCcnRFbmRJU1hWRFJ3cyJ9LDMxMTp7bjoiQnJ0QmVnaW5JU1hWRENvbHMi''@;'; put 'put ''fSwzMTI6e246IkJydEVuZElTWFZEQ29scyJ9LDMxMzp7bjoiQnJ0RW5kU1hMb2NhdGlvbiJ9LDMxNDp7bjoiQnJ0QmVnaW5TWExvY2F0aW9uIn0sMzE1OntuOiJCcnRFbmRTWFZpZXcifSwzMTY6e246IkJydEJlZ2luU1hUSHMifSwzMTc6e246IkJydEVuZFNYVEhzIn0sMzE4OntuOiJCcnRC''@;'; put 'put ''ZWdpblNYVEgifSwzMTk6e246IkJydEVuZFNYVEgifSwzMjA6e246IkJydEJlZ2luSVNYVEhSd3MifSwzMjE6e246IkJydEVuZElTWFRIUndzIn0sMzIyOntuOiJCcnRCZWdpbklTWFRIQ29scyJ9LDMyMzp7bjoiQnJ0RW5kSVNYVEhDb2xzIn0sMzI0OntuOiJCcnRCZWdpblNYVERNUFMifSwz''@;'; put 'put ''MjU6e246IkJydEVuZFNYVERNUHMifSwzMjY6e246IkJydEJlZ2luU1hURE1QIn0sMzI3OntuOiJCcnRFbmRTWFRETVAifSwzMjg6e246IkJydEJlZ2luU1hUSEl0ZW1zIn0sMzI5OntuOiJCcnRFbmRTWFRISXRlbXMifSwzMzA6e246IkJydEJlZ2luU1hUSEl0ZW0ifSwzMzE6e246IkJydEVu''@;'; put 'put ''ZFNYVEhJdGVtIn0sMzMyOntuOiJCcnRCZWdpbk1ldGFkYXRhIn0sMzMzOntuOiJCcnRFbmRNZXRhZGF0YSJ9LDMzNDp7bjoiQnJ0QmVnaW5Fc21kdGluZm8ifSwzMzU6e246IkJydE1kdGluZm8ifSwzMzY6e246IkJydEVuZEVzbWR0aW5mbyJ9LDMzNzp7bjoiQnJ0QmVnaW5Fc21kYiJ9LDMz''@;'; put 'put ''ODp7bjoiQnJ0RW5kRXNtZGIifSwzMzk6e246IkJydEJlZ2luRXNmbWQifSwzNDA6e246IkJydEVuZEVzZm1kIn0sMzQxOntuOiJCcnRCZWdpblNpbmdsZUNlbGxzIn0sMzQyOntuOiJCcnRFbmRTaW5nbGVDZWxscyJ9LDM0Mzp7bjoiQnJ0QmVnaW5MaXN0In0sMzQ0OntuOiJCcnRFbmRMaXN0''@;'; put 'put ''In0sMzQ1OntuOiJCcnRCZWdpbkxpc3RDb2xzIn0sMzQ2OntuOiJCcnRFbmRMaXN0Q29scyJ9LDM0Nzp7bjoiQnJ0QmVnaW5MaXN0Q29sIn0sMzQ4OntuOiJCcnRFbmRMaXN0Q29sIn0sMzQ5OntuOiJCcnRCZWdpbkxpc3RYbWxDUHIifSwzNTA6e246IkJydEVuZExpc3RYbWxDUHIifSwzNTE6''@;'; put 'put ''e246IkJydExpc3RDQ0ZtbGEifSwzNTI6e246IkJydExpc3RUckZtbGEifSwzNTM6e246IkJydEJlZ2luRXh0ZXJuYWxzIn0sMzU0OntuOiJCcnRFbmRFeHRlcm5hbHMifSwzNTU6e246IkJydFN1cEJvb2tTcmMiLGY6ZTF9LDM1Nzp7bjoiQnJ0U3VwU2VsZiJ9LDM1ODp7bjoiQnJ0U3VwU2Ft''@;'; put 'put ''ZSJ9LDM1OTp7bjoiQnJ0U3VwVGFicyJ9LDM2MDp7bjoiQnJ0QmVnaW5TdXBCb29rIn0sMzYxOntuOiJCcnRQbGFjZWhvbGRlck5hbWUifSwzNjI6e246IkJydEV4dGVyblNoZWV0IixmOklBfSwzNjM6e246IkJydEV4dGVyblRhYmxlU3RhcnQifSwzNjQ6e246IkJydEV4dGVyblRhYmxlRW5k''@;'; put 'put ''In0sMzY2OntuOiJCcnRFeHRlcm5Sb3dIZHIifSwzNjc6e246IkJydEV4dGVybkNlbGxCbGFuayJ9LDM2ODp7bjoiQnJ0RXh0ZXJuQ2VsbFJlYWwifSwzNjk6e246IkJydEV4dGVybkNlbGxCb29sIn0sMzcwOntuOiJCcnRFeHRlcm5DZWxsRXJyb3IifSwzNzE6e246IkJydEV4dGVybkNlbGxT''@;'; put 'put ''dHJpbmcifSwzNzI6e246IkJydEJlZ2luRXNtZHgifSwzNzM6e246IkJydEVuZEVzbWR4In0sMzc0OntuOiJCcnRCZWdpbk1keFNldCJ9LDM3NTp7bjoiQnJ0RW5kTWR4U2V0In0sMzc2OntuOiJCcnRCZWdpbk1keE1iclByb3AifSwzNzc6e246IkJydEVuZE1keE1iclByb3AifSwzNzg6e246''@;'; put 'put ''IkJydEJlZ2luTWR4S1BJIn0sMzc5OntuOiJCcnRFbmRNZHhLUEkifSwzODA6e246IkJydEJlZ2luRXNzdHIifSwzODE6e246IkJydEVuZEVzc3RyIn0sMzgyOntuOiJCcnRCZWdpblBSRkl0ZW0ifSwzODM6e246IkJydEVuZFBSRkl0ZW0ifSwzODQ6e246IkJydEJlZ2luUGl2b3RDYWNoZUlE''@;'; put 'put ''cyJ9LDM4NTp7bjoiQnJ0RW5kUGl2b3RDYWNoZUlEcyJ9LDM4Njp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlSUQifSwzODc6e246IkJydEVuZFBpdm90Q2FjaGVJRCJ9LDM4ODp7bjoiQnJ0QmVnaW5JU1hWSXMifSwzODk6e246IkJydEVuZElTWFZJcyJ9LDM5MDp7bjoiQnJ0QmVnaW5Db2xJbmZv''@;'; put 'put ''cyJ9LDM5MTp7bjoiQnJ0RW5kQ29sSW5mb3MifSwzOTI6e246IkJydEJlZ2luUndCcmsifSwzOTM6e246IkJydEVuZFJ3QnJrIn0sMzk0OntuOiJCcnRCZWdpbkNvbEJyayJ9LDM5NTp7bjoiQnJ0RW5kQ29sQnJrIn0sMzk2OntuOiJCcnRCcmsifSwzOTc6e246IkJydFVzZXJCb29rVmlldyJ9''@;'; put 'put ''LDM5ODp7bjoiQnJ0SW5mbyJ9LDM5OTp7bjoiQnJ0Q1VzciJ9LDQwMDp7bjoiQnJ0VXNyIn0sNDAxOntuOiJCcnRCZWdpblVzZXJzIn0sNDAzOntuOiJCcnRFT0YifSw0MDQ6e246IkJydFVDUiJ9LDQwNTp7bjoiQnJ0UlJJbnNEZWwifSw0MDY6e246IkJydFJSRW5kSW5zRGVsIn0sNDA3Ontu''@;'; put 'put ''OiJCcnRSUk1vdmUifSw0MDg6e246IkJydFJSRW5kTW92ZSJ9LDQwOTp7bjoiQnJ0UlJDaGdDZWxsIn0sNDEwOntuOiJCcnRSUkVuZENoZ0NlbGwifSw0MTE6e246IkJydFJSSGVhZGVyIn0sNDEyOntuOiJCcnRSUlVzZXJWaWV3In0sNDEzOntuOiJCcnRSUlJlblNoZWV0In0sNDE0OntuOiJC''@;'; put 'put ''cnRSUkluc2VydFNoIn0sNDE1OntuOiJCcnRSUkRlZk5hbWUifSw0MTY6e246IkJydFJSTm90ZSJ9LDQxNzp7bjoiQnJ0UlJDb25mbGljdCJ9LDQxODp7bjoiQnJ0UlJUUVNJRiJ9LDQxOTp7bjoiQnJ0UlJGb3JtYXQifSw0MjA6e246IkJydFJSRW5kRm9ybWF0In0sNDIxOntuOiJCcnRSUkF1''@;'; put 'put ''dG9GbXQifSw0MjI6e246IkJydEJlZ2luVXNlclNoVmlld3MifSw0MjM6e246IkJydEJlZ2luVXNlclNoVmlldyJ9LDQyNDp7bjoiQnJ0RW5kVXNlclNoVmlldyJ9LDQyNTp7bjoiQnJ0RW5kVXNlclNoVmlld3MifSw0MjY6e246IkJydEFyckZtbGEiLGY6ZnVuY3Rpb24gVmcoZCxfLG0pe3Zh''@;'; put 'put ''ciBUPWQubCtfLFA9YjIoZCksUT1kLnJlYWRfc2hpZnQoMSksc2U9W1BdO2lmKHNlWzJdPVEsbS5jZWxsRm9ybXVsYSl7dmFyIG9lPU1WKGQsVC1kLmwsbSk7c2VbMV09b2V9ZWxzZSBkLmw9VDtyZXR1cm4gc2V9fSw0Mjc6e246IkJydFNockZtbGEiLGY6ZnVuY3Rpb24gbEIoZCxfLG0pe3Zh''@;'; put 'put ''ciBUPWQubCtfLFE9W2p1KGQsMTYpXTtpZihtLmNlbGxGb3JtdWxhKXt2YXIgc2U9eDVlKGQsVC1kLmwsbSk7UVsxXT1zZSxkLmw9VH1lbHNlIGQubD1UO3JldHVybiBRfX0sNDI4OntuOiJCcnRUYWJsZSJ9LDQyOTp7bjoiQnJ0QmVnaW5FeHRDb25uZWN0aW9ucyJ9LDQzMDp7bjoiQnJ0RW5k''@;'; put 'put ''RXh0Q29ubmVjdGlvbnMifSw0MzE6e246IkJydEJlZ2luUENEQ2FsY01lbXMifSw0MzI6e246IkJydEVuZFBDRENhbGNNZW1zIn0sNDMzOntuOiJCcnRCZWdpblBDRENhbGNNZW0ifSw0MzQ6e246IkJydEVuZFBDRENhbGNNZW0ifSw0MzU6e246IkJydEJlZ2luUENESEdMZXZlbHMifSw0MzY6''@;'; put 'put ''e246IkJydEVuZFBDREhHTGV2ZWxzIn0sNDM3OntuOiJCcnRCZWdpblBDREhHTGV2ZWwifSw0Mzg6e246IkJydEVuZFBDREhHTGV2ZWwifSw0Mzk6e246IkJydEJlZ2luUENESEdMR3JvdXBzIn0sNDQwOntuOiJCcnRFbmRQQ0RIR0xHcm91cHMifSw0NDE6e246IkJydEJlZ2luUENESEdMR3Jv''@;'; put 'put ''dXAifSw0NDI6e246IkJydEVuZFBDREhHTEdyb3VwIn0sNDQzOntuOiJCcnRCZWdpblBDREhHTEdNZW1iZXJzIn0sNDQ0OntuOiJCcnRFbmRQQ0RIR0xHTWVtYmVycyJ9LDQ0NTp7bjoiQnJ0QmVnaW5QQ0RIR0xHTWVtYmVyIn0sNDQ2OntuOiJCcnRFbmRQQ0RIR0xHTWVtYmVyIn0sNDQ3Ontu''@;'; put 'put ''OiJCcnRCZWdpblFTSSJ9LDQ0ODp7bjoiQnJ0RW5kUVNJIn0sNDQ5OntuOiJCcnRCZWdpblFTSVIifSw0NTA6e246IkJydEVuZFFTSVIifSw0NTE6e246IkJydEJlZ2luRGVsZXRlZE5hbWVzIn0sNDUyOntuOiJCcnRFbmREZWxldGVkTmFtZXMifSw0NTM6e246IkJydEJlZ2luRGVsZXRlZE5h''@;'; put 'put ''bWUifSw0NTQ6e246IkJydEVuZERlbGV0ZWROYW1lIn0sNDU1OntuOiJCcnRCZWdpblFTSUZzIn0sNDU2OntuOiJCcnRFbmRRU0lGcyJ9LDQ1Nzp7bjoiQnJ0QmVnaW5RU0lGIn0sNDU4OntuOiJCcnRFbmRRU0lGIn0sNDU5OntuOiJCcnRCZWdpbkF1dG9Tb3J0U2NvcGUifSw0NjA6e246IkJy''@;'; put 'put ''dEVuZEF1dG9Tb3J0U2NvcGUifSw0NjE6e246IkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5nIn0sNDYyOntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmcifSw0NjM6e246IkJydEJlZ2luQ0ZSdWxlIn0sNDY0OntuOiJCcnRFbmRDRlJ1bGUifSw0NjU6e246IkJydEJlZ2luSWNv''@;'; put 'put ''blNldCJ9LDQ2Njp7bjoiQnJ0RW5kSWNvblNldCJ9LDQ2Nzp7bjoiQnJ0QmVnaW5EYXRhYmFyIn0sNDY4OntuOiJCcnRFbmREYXRhYmFyIn0sNDY5OntuOiJCcnRCZWdpbkNvbG9yU2NhbGUifSw0NzA6e246IkJydEVuZENvbG9yU2NhbGUifSw0NzE6e246IkJydENGVk8ifSw0NzI6e246IkJy''@;'; put 'put ''dEV4dGVyblZhbHVlTWV0YSJ9LDQ3Mzp7bjoiQnJ0QmVnaW5Db2xvclBhbGV0dGUifSw0NzQ6e246IkJydEVuZENvbG9yUGFsZXR0ZSJ9LDQ3NTp7bjoiQnJ0SW5kZXhlZENvbG9yIn0sNDc2OntuOiJCcnRNYXJnaW5zIixmOmZ1bmN0aW9uIFk1ZShkKXt2YXIgXz17fTtyZXR1cm4gY0IuZm9y''@;'; put 'put ''RWFjaChmdW5jdGlvbihtKXtfW21dPXFzKGQpfSksX319LDQ3Nzp7bjoiQnJ0UHJpbnRPcHRpb25zIn0sNDc4OntuOiJCcnRQYWdlU2V0dXAifSw0Nzk6e246IkJydEJlZ2luSGVhZGVyRm9vdGVyIn0sNDgwOntuOiJCcnRFbmRIZWFkZXJGb290ZXIifSw0ODE6e246IkJydEJlZ2luU1hDcnRG''@;'; put 'put ''b3JtYXQifSw0ODI6e246IkJydEVuZFNYQ3J0Rm9ybWF0In0sNDgzOntuOiJCcnRCZWdpblNYQ3J0Rm9ybWF0cyJ9LDQ4NDp7bjoiQnJ0RW5kU1hDcnRGb3JtYXRzIn0sNDg1OntuOiJCcnRXc0ZtdEluZm8iLGY6ZnVuY3Rpb24gSEooZCl7dmFyIF89e30sbT17fSxUPXt9LFA9ZC5yZWFkX3No''@;'; put 'put ''aWZ0KDQpLFE9ZC5yZWFkX3NoaWZ0KDIpO1Qud2NoPVA8PTY1NTM2P1AvMjU2OlE7dmFyIHNlPWQucmVhZF9zaGlmdCgyKTttLmhwdD1zZS8yMDt2YXIgb2U9ZC5yZWFkX3NoaWZ0KDIpO3JldHVybiAyJm9lJiYobS5oaWRkZW49ITApLDQmb2UmJihfLnRvcHRoaWNrPSEwKSw4Jm9lJiYoXy5i''@;'; put 'put ''b3R0aGljaz0hMCksXy5yb3dvdXRsaW5lPWQucmVhZF9zaGlmdCgxKSxfLmNvbG91dGxpbmU9ZC5yZWFkX3NoaWZ0KDEpLFdBKG0pLF8ucm93PW0sQjAoVCksXy5jb2w9VCxffX0sNDg2OntuOiJCcnRCZWdpbk1ncyJ9LDQ4Nzp7bjoiQnJ0RW5kTUdzIn0sNDg4OntuOiJCcnRCZWdpbk1HTWFw''@;'; put 'put ''cyJ9LDQ4OTp7bjoiQnJ0RW5kTUdNYXBzIn0sNDkwOntuOiJCcnRCZWdpbk1HIn0sNDkxOntuOiJCcnRFbmRNRyJ9LDQ5Mjp7bjoiQnJ0QmVnaW5NYXAifSw0OTM6e246IkJydEVuZE1hcCJ9LDQ5NDp7bjoiQnJ0SExpbmsiLGY6ZnVuY3Rpb24gcUooZCxfKXt2YXIgbT1kLmwrXyxUPWp1KGQs''@;'; put 'put ''MTYpLFA9bmMoZCksUT1paShkKSxzZT1paShkKSxvZT1paShkKTtkLmw9bTt2YXIgZGU9e3JmeDpULHJlbElkOlAsbG9jOlEsZGlzcGxheTpvZX07cmV0dXJuIHNlJiYoZGUuVG9vbHRpcD1zZSksZGV9fSw0OTU6e246IkJydEJlZ2luRENvbiJ9LDQ5Njp7bjoiQnJ0RW5kRENvbiJ9LDQ5Nzp7''@;'; put 'put ''bjoiQnJ0QmVnaW5EUmVmcyJ9LDQ5ODp7bjoiQnJ0RW5kRFJlZnMifSw0OTk6e246IkJydERSZWYifSw1MDA6e246IkJydEJlZ2luU2Nlbk1hbiJ9LDUwMTp7bjoiQnJ0RW5kU2Nlbk1hbiJ9LDUwMjp7bjoiQnJ0QmVnaW5TY3QifSw1MDM6e246IkJydEVuZFNjdCJ9LDUwNDp7bjoiQnJ0U2xj''@;'; put 'put ''In0sNTA1OntuOiJCcnRCZWdpbkRYRnMifSw1MDY6e246IkJydEVuZERYRnMifSw1MDc6e246IkJydERYRiJ9LDUwODp7bjoiQnJ0QmVnaW5UYWJsZVN0eWxlcyJ9LDUwOTp7bjoiQnJ0RW5kVGFibGVTdHlsZXMifSw1MTA6e246IkJydEJlZ2luVGFibGVTdHlsZSJ9LDUxMTp7bjoiQnJ0RW5k''@;'; put 'put ''VGFibGVTdHlsZSJ9LDUxMjp7bjoiQnJ0VGFibGVTdHlsZUVsZW1lbnQifSw1MTM6e246IkJydFRhYmxlU3R5bGVDbGllbnQifSw1MTQ6e246IkJydEJlZ2luVm9sRGVwcyJ9LDUxNTp7bjoiQnJ0RW5kVm9sRGVwcyJ9LDUxNjp7bjoiQnJ0QmVnaW5Wb2xUeXBlIn0sNTE3OntuOiJCcnRFbmRW''@;'; put 'put ''b2xUeXBlIn0sNTE4OntuOiJCcnRCZWdpblZvbE1haW4ifSw1MTk6e246IkJydEVuZFZvbE1haW4ifSw1MjA6e246IkJydEJlZ2luVm9sVG9waWMifSw1MjE6e246IkJydEVuZFZvbFRvcGljIn0sNTIyOntuOiJCcnRWb2xTdWJ0b3BpYyJ9LDUyMzp7bjoiQnJ0Vm9sUmVmIn0sNTI0OntuOiJC''@;'; put 'put ''cnRWb2xOdW0ifSw1MjU6e246IkJydFZvbEVyciJ9LDUyNjp7bjoiQnJ0Vm9sU3RyIn0sNTI3OntuOiJCcnRWb2xCb29sIn0sNTI4OntuOiJCcnRCZWdpbkNhbGNDaGFpbiQifSw1Mjk6e246IkJydEVuZENhbGNDaGFpbiQifSw1MzA6e246IkJydEJlZ2luU29ydFN0YXRlIn0sNTMxOntuOiJC''@;'; put 'put ''cnRFbmRTb3J0U3RhdGUifSw1MzI6e246IkJydEJlZ2luU29ydENvbmQifSw1MzM6e246IkJydEVuZFNvcnRDb25kIn0sNTM0OntuOiJCcnRCb29rUHJvdGVjdGlvbiJ9LDUzNTp7bjoiQnJ0U2hlZXRQcm90ZWN0aW9uIn0sNTM2OntuOiJCcnRSYW5nZVByb3RlY3Rpb24ifSw1Mzc6e246IkJy''@;'; put 'put ''dFBob25ldGljSW5mbyJ9LDUzODp7bjoiQnJ0QmVnaW5FQ1R4dFdpeiJ9LDUzOTp7bjoiQnJ0RW5kRUNUeHRXaXoifSw1NDA6e246IkJydEJlZ2luRUNUV0ZsZEluZm9Mc3QifSw1NDE6e246IkJydEVuZEVDVFdGbGRJbmZvTHN0In0sNTQyOntuOiJCcnRCZWdpbkVDVHdGbGRJbmZvIn0sNTQ4''@;'; put 'put ''OntuOiJCcnRGaWxlU2hhcmluZyJ9LDU0OTp7bjoiQnJ0T2xlU2l6ZSJ9LDU1MDp7bjoiQnJ0RHJhd2luZyIsZjplMX0sNTUxOntuOiJCcnRMZWdhY3lEcmF3aW5nIn0sNTUyOntuOiJCcnRMZWdhY3lEcmF3aW5nSEYifSw1NTM6e246IkJydFdlYk9wdCJ9LDU1NDp7bjoiQnJ0QmVnaW5XZWJQ''@;'; put 'put ''dWJJdGVtcyJ9LDU1NTp7bjoiQnJ0RW5kV2ViUHViSXRlbXMifSw1NTY6e246IkJydEJlZ2luV2ViUHViSXRlbSJ9LDU1Nzp7bjoiQnJ0RW5kV2ViUHViSXRlbSJ9LDU1ODp7bjoiQnJ0QmVnaW5TWENvbmRGbXQifSw1NTk6e246IkJydEVuZFNYQ29uZEZtdCJ9LDU2MDp7bjoiQnJ0QmVnaW5T''@;'; put 'put ''WENvbmRGbXRzIn0sNTYxOntuOiJCcnRFbmRTWENvbmRGbXRzIn0sNTYyOntuOiJCcnRCa0hpbSJ9LDU2NDp7bjoiQnJ0Q29sb3IifSw1NjU6e246IkJydEJlZ2luSW5kZXhlZENvbG9ycyJ9LDU2Njp7bjoiQnJ0RW5kSW5kZXhlZENvbG9ycyJ9LDU2OTp7bjoiQnJ0QmVnaW5NUlVDb2xvcnMi''@;'; put 'put ''fSw1NzA6e246IkJydEVuZE1SVUNvbG9ycyJ9LDU3Mjp7bjoiQnJ0TVJVQ29sb3IifSw1NzM6e246IkJydEJlZ2luRFZhbHMifSw1NzQ6e246IkJydEVuZERWYWxzIn0sNTc3OntuOiJCcnRTdXBOYW1lU3RhcnQifSw1Nzg6e246IkJydFN1cE5hbWVWYWx1ZVN0YXJ0In0sNTc5OntuOiJCcnRT''@;'; put 'put ''dXBOYW1lVmFsdWVFbmQifSw1ODA6e246IkJydFN1cE5hbWVOdW0ifSw1ODE6e246IkJydFN1cE5hbWVFcnIifSw1ODI6e246IkJydFN1cE5hbWVTdCJ9LDU4Mzp7bjoiQnJ0U3VwTmFtZU5pbCJ9LDU4NDp7bjoiQnJ0U3VwTmFtZUJvb2wifSw1ODU6e246IkJydFN1cE5hbWVGbWxhIn0sNTg2''@;'; put 'put ''OntuOiJCcnRTdXBOYW1lQml0cyJ9LDU4Nzp7bjoiQnJ0U3VwTmFtZUVuZCJ9LDU4ODp7bjoiQnJ0RW5kU3VwQm9vayJ9LDU4OTp7bjoiQnJ0Q2VsbFNtYXJ0VGFnUHJvcGVydHkifSw1OTA6e246IkJydEJlZ2luQ2VsbFNtYXJ0VGFnIn0sNTkxOntuOiJCcnRFbmRDZWxsU21hcnRUYWcifSw1''@;'; put 'put ''OTI6e246IkJydEJlZ2luQ2VsbFNtYXJ0VGFncyJ9LDU5Mzp7bjoiQnJ0RW5kQ2VsbFNtYXJ0VGFncyJ9LDU5NDp7bjoiQnJ0QmVnaW5TbWFydFRhZ3MifSw1OTU6e246IkJydEVuZFNtYXJ0VGFncyJ9LDU5Njp7bjoiQnJ0U21hcnRUYWdUeXBlIn0sNTk3OntuOiJCcnRCZWdpblNtYXJ0VGFn''@;'; put 'put ''VHlwZXMifSw1OTg6e246IkJydEVuZFNtYXJ0VGFnVHlwZXMifSw1OTk6e246IkJydEJlZ2luU1hGaWx0ZXJzIn0sNjAwOntuOiJCcnRFbmRTWEZpbHRlcnMifSw2MDE6e246IkJydEJlZ2luU1hGSUxURVIifSw2MDI6e246IkJydEVuZFNYRmlsdGVyIn0sNjAzOntuOiJCcnRCZWdpbkZpbGxz''@;'; put 'put ''In0sNjA0OntuOiJCcnRFbmRGaWxscyJ9LDYwNTp7bjoiQnJ0QmVnaW5DZWxsV2F0Y2hlcyJ9LDYwNjp7bjoiQnJ0RW5kQ2VsbFdhdGNoZXMifSw2MDc6e246IkJydENlbGxXYXRjaCJ9LDYwODp7bjoiQnJ0QmVnaW5DUkVycnMifSw2MDk6e246IkJydEVuZENSRXJycyJ9LDYxMDp7bjoiQnJ0''@;'; put 'put ''Q3Jhc2hSZWNFcnIifSw2MTE6e246IkJydEJlZ2luRm9udHMifSw2MTI6e246IkJydEVuZEZvbnRzIn0sNjEzOntuOiJCcnRCZWdpbkJvcmRlcnMifSw2MTQ6e246IkJydEVuZEJvcmRlcnMifSw2MTU6e246IkJydEJlZ2luRm10cyJ9LDYxNjp7bjoiQnJ0RW5kRm10cyJ9LDYxNzp7bjoiQnJ0''@;'; put 'put ''QmVnaW5DZWxsWEZzIn0sNjE4OntuOiJCcnRFbmRDZWxsWEZzIn0sNjE5OntuOiJCcnRCZWdpblN0eWxlcyJ9LDYyMDp7bjoiQnJ0RW5kU3R5bGVzIn0sNjI1OntuOiJCcnRCaWdOYW1lIn0sNjI2OntuOiJCcnRCZWdpbkNlbGxTdHlsZVhGcyJ9LDYyNzp7bjoiQnJ0RW5kQ2VsbFN0eWxlWEZz''@;'; put 'put ''In0sNjI4OntuOiJCcnRCZWdpbkNvbW1lbnRzIn0sNjI5OntuOiJCcnRFbmRDb21tZW50cyJ9LDYzMDp7bjoiQnJ0QmVnaW5Db21tZW50QXV0aG9ycyJ9LDYzMTp7bjoiQnJ0RW5kQ29tbWVudEF1dGhvcnMifSw2MzI6e246IkJydENvbW1lbnRBdXRob3IiLGY6cUh9LDYzMzp7bjoiQnJ0QmVn''@;'; put 'put ''aW5Db21tZW50TGlzdCJ9LDYzNDp7bjoiQnJ0RW5kQ29tbWVudExpc3QifSw2MzU6e246IkJydEJlZ2luQ29tbWVudCIsZjpmdW5jdGlvbiAkSChkKXt2YXIgXz17fTtfLmlhdXRob3I9ZC5yZWFkX3NoaWZ0KDQpO3ZhciBtPWp1KGQsMTYpO3JldHVybiBfLnJmeD1tLnMsXy5yZWY9cWkobS5z''@;'; put 'put ''KSxkLmwrPTE2LF99fSw2MzY6e246IkJydEVuZENvbW1lbnQifSw2Mzc6e246IkJydENvbW1lbnRUZXh0IixmOm9yfSw2Mzg6e246IkJydEJlZ2luT2xlT2JqZWN0cyJ9LDYzOTp7bjoiQnJ0T2xlT2JqZWN0In0sNjQwOntuOiJCcnRFbmRPbGVPYmplY3RzIn0sNjQxOntuOiJCcnRCZWdpblN4''@;'; put 'put ''cnVsZXMifSw2NDI6e246IkJydEVuZFN4UnVsZXMifSw2NDM6e246IkJydEJlZ2luQWN0aXZlWENvbnRyb2xzIn0sNjQ0OntuOiJCcnRBY3RpdmVYIn0sNjQ1OntuOiJCcnRFbmRBY3RpdmVYQ29udHJvbHMifSw2NDY6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXJzU29ydEJ5In0sNjQ4Ontu''@;'; put 'put ''OiJCcnRCZWdpbkNlbGxJZ25vcmVFQ3MifSw2NDk6e246IkJydENlbGxJZ25vcmVFQyJ9LDY1MDp7bjoiQnJ0RW5kQ2VsbElnbm9yZUVDcyJ9LDY1MTp7bjoiQnJ0Q3NQcm9wIixmOmZ1bmN0aW9uIHVlZShkLF8pe3JldHVybiBkLmwrPTEwLHtuYW1lOmlpKGQpfX19LDY1Mjp7bjoiQnJ0Q3NQ''@;'; put 'put ''YWdlU2V0dXAifSw2NTM6e246IkJydEJlZ2luVXNlckNzVmlld3MifSw2NTQ6e246IkJydEVuZFVzZXJDc1ZpZXdzIn0sNjU1OntuOiJCcnRCZWdpblVzZXJDc1ZpZXcifSw2NTY6e246IkJydEVuZFVzZXJDc1ZpZXcifSw2NTc6e246IkJydEJlZ2luUGNkU0ZDSUVudHJpZXMifSw2NTg6e246''@;'; put 'put ''IkJydEVuZFBDRFNGQ0lFbnRyaWVzIn0sNjU5OntuOiJCcnRQQ0RTRkNJRW50cnkifSw2NjA6e246IkJydEJlZ2luTGlzdFBhcnRzIn0sNjYxOntuOiJCcnRMaXN0UGFydCJ9LDY2Mjp7bjoiQnJ0RW5kTGlzdFBhcnRzIn0sNjYzOntuOiJCcnRTaGVldENhbGNQcm9wIn0sNjY0OntuOiJCcnRC''@;'; put 'put ''ZWdpbkZuR3JvdXAifSw2NjU6e246IkJydEZuR3JvdXAifSw2NjY6e246IkJydEVuZEZuR3JvdXAifSw2Njc6e246IkJydFN1cEFkZGluIn0sNjY4OntuOiJCcnRTWFRETVBPcmRlciJ9LDY2OTp7bjoiQnJ0Q3NQcm90ZWN0aW9uIn0sNjcxOntuOiJCcnRCZWdpbldzU29ydE1hcCJ9LDY3Mjp7''@;'; put 'put ''bjoiQnJ0RW5kV3NTb3J0TWFwIn0sNjczOntuOiJCcnRCZWdpblJSU29ydCJ9LDY3NDp7bjoiQnJ0RW5kUlJTb3J0In0sNjc1OntuOiJCcnRSUlNvcnRJdGVtIn0sNjc2OntuOiJCcnRGaWxlU2hhcmluZ0lzbyJ9LDY3Nzp7bjoiQnJ0Qm9va1Byb3RlY3Rpb25Jc28ifSw2Nzg6e246IkJydFNo''@;'; put 'put ''ZWV0UHJvdGVjdGlvbklzbyJ9LDY3OTp7bjoiQnJ0Q3NQcm90ZWN0aW9uSXNvIn0sNjgwOntuOiJCcnRSYW5nZVByb3RlY3Rpb25Jc28ifSw2ODE6e246IkJydERWYWxMaXN0In0sMTAyNDp7bjoiQnJ0UndEZXNjZW50In0sMTAyNTp7bjoiQnJ0S25vd25Gb250cyJ9LDEwMjY6e246IkJydEJl''@;'; put 'put ''Z2luU1hUdXBsZVNldCJ9LDEwMjc6e246IkJydEVuZFNYVHVwbGVTZXQifSwxMDI4OntuOiJCcnRCZWdpblNYVHVwbGVTZXRIZWFkZXIifSwxMDI5OntuOiJCcnRFbmRTWFR1cGxlU2V0SGVhZGVyIn0sMTAzMDp7bjoiQnJ0U1hUdXBsZVNldEhlYWRlckl0ZW0ifSwxMDMxOntuOiJCcnRCZWdp''@;'; put 'put ''blNYVHVwbGVTZXREYXRhIn0sMTAzMjp7bjoiQnJ0RW5kU1hUdXBsZVNldERhdGEifSwxMDMzOntuOiJCcnRCZWdpblNYVHVwbGVTZXRSb3cifSwxMDM0OntuOiJCcnRFbmRTWFR1cGxlU2V0Um93In0sMTAzNTp7bjoiQnJ0U1hUdXBsZVNldFJvd0l0ZW0ifSwxMDM2OntuOiJCcnROYW1lRXh0''@;'; put 'put ''In0sMTAzNzp7bjoiQnJ0UENESDE0In0sMTAzODp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtMTQifSwxMDM5OntuOiJCcnRFbmRQQ0RDYWxjTWVtMTQifSwxMDQwOntuOiJCcnRTWFRIMTQifSwxMDQxOntuOiJCcnRCZWdpblNwYXJrbGluZUdyb3VwIn0sMTA0Mjp7bjoiQnJ0RW5kU3BhcmtsaW5l''@;'; put 'put ''R3JvdXAifSwxMDQzOntuOiJCcnRTcGFya2xpbmUifSwxMDQ0OntuOiJCcnRTWERJMTQifSwxMDQ1OntuOiJCcnRXc0ZtdEluZm9FeDE0In0sMTA0Njp7bjoiQnJ0QmVnaW5Db25kaXRpb25hbEZvcm1hdHRpbmcxNCJ9LDEwNDc6e246IkJydEVuZENvbmRpdGlvbmFsRm9ybWF0dGluZzE0In0s''@;'; put 'put ''MTA0ODp7bjoiQnJ0QmVnaW5DRlJ1bGUxNCJ9LDEwNDk6e246IkJydEVuZENGUnVsZTE0In0sMTA1MDp7bjoiQnJ0Q0ZWTzE0In0sMTA1MTp7bjoiQnJ0QmVnaW5EYXRhYmFyMTQifSwxMDUyOntuOiJCcnRCZWdpbkljb25TZXQxNCJ9LDEwNTM6e246IkJydERWYWwxNCIsZjpmdW5jdGlvbiBK''@;'; put 'put ''SihkLF8sbSl7dmFyIFQ9ZnVuY3Rpb24gRnQoZCxfLG0pe3ZhciBUPWQucmVhZF9zaGlmdCg0KSxQPXt9O3JldHVybiAxJlQmJihQLnJlZnM9ZnVuY3Rpb24gWWUoZCl7Zm9yKHZhciBfPWQucmVhZF9zaGlmdCg0KSxtPVtdO18tLSA+MDspbS5wdXNoKFhlKGQpKTtyZXR1cm4gbX0oZCkpLDIm''@;'; put 'put ''VCYmKFAuc3FyZWZzPWZ1bmN0aW9uIHlpKGQpe2Zvcih2YXIgXz1kLnJlYWRfc2hpZnQoNCksbT1bXTtfLS0gPjA7KW0ucHVzaChXYShkKSk7cmV0dXJuIG19KGQpKSw0JlQmJihQLmZvcm11bGFzPWZ1bmN0aW9uIFNzKGQsXyxtKXtmb3IodmFyIFQ9ZC5yZWFkX3NoaWZ0KDQpLFA9W107VC0t''@;'; put 'put ''ID4wOylQLnB1c2goV3MoZCwwLG0pKTtyZXR1cm4gUH0oZCwwLG0pKSw4JlQmJihQLnJlbElEPWZ1bmN0aW9uIFdpKGQpe3ZhciBfPWQucmVhZF9zaGlmdCgyKTtyZXR1cm4gMD09PV8/IiI6ZC5yZWFkX3NoaWZ0KF8sInV0ZjE2bGUiKX0oZCkpLFB9KGQsMCxtKSxQPWQucmVhZF9zaGlmdCg0''@;'; put 'put ''KSxRPW5jKGQpLHNlPW5jKGQpLG9lPW5jKGQpLGRlPW5jKGQpLExlPShULmZvcm11bGFzfHxbXSlbMF0sTmU9KFQuZm9ybXVsYXN8fFtdKVsxXSxCZT0xNSZQLFplPXt0OkprW0JlXSxzcXJmeDpULnNxcmVmc1swXSxzOltRLHNlLG9lLGRlXX07cmV0dXJuIExlJiYoWmUuZjE9TGUpLE5lJiYo''@;'; put 'put ''WmUuZjI9TmUpLDA9PUJlfHwzPT1CZXx8Nz09QmV8fChaZS5vcD1QeVtQPj4yMCYxNV0pLFplfX0sMTA1NDp7bjoiQnJ0QmVnaW5EVmFsczE0In0sMTA1NTp7bjoiQnJ0Q29sb3IxNCJ9LDEwNTY6e246IkJydEJlZ2luU3BhcmtsaW5lcyJ9LDEwNTc6e246IkJydEVuZFNwYXJrbGluZXMifSwx''@;'; put 'put ''MDU4OntuOiJCcnRCZWdpblNwYXJrbGluZUdyb3VwcyJ9LDEwNTk6e246IkJydEVuZFNwYXJrbGluZUdyb3VwcyJ9LDEwNjE6e246IkJydFNYVkQxNCJ9LDEwNjI6e246IkJydEJlZ2luU1hWaWV3MTQifSwxMDYzOntuOiJCcnRFbmRTWFZpZXcxNCJ9LDEwNjQ6e246IkJydEJlZ2luU1hWaWV3''@;'; put 'put ''MTYifSwxMDY1OntuOiJCcnRFbmRTWFZpZXcxNiJ9LDEwNjY6e246IkJydEJlZ2luUENEMTQifSwxMDY3OntuOiJCcnRFbmRQQ0QxNCJ9LDEwNjg6e246IkJydEJlZ2luRXh0Q29ubjE0In0sMTA2OTp7bjoiQnJ0RW5kRXh0Q29ubjE0In0sMTA3MDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUlE''@;'; put 'put ''cyJ9LDEwNzE6e246IkJydEVuZFNsaWNlckNhY2hlSURzIn0sMTA3Mjp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUlEIn0sMTA3Mzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVJRCJ9LDEwNzU6e246IkJydEJlZ2luU2xpY2VyQ2FjaGUifSwxMDc2OntuOiJCcnRFbmRTbGljZXJDYWNoZSJ9LDEwNzc6''@;'; put 'put ''e246IkJydEJlZ2luU2xpY2VyQ2FjaGVEZWYifSwxMDc4OntuOiJCcnRFbmRTbGljZXJDYWNoZURlZiJ9LDEwNzk6e246IkJydEJlZ2luU2xpY2Vyc0V4In0sMTA4MDp7bjoiQnJ0RW5kU2xpY2Vyc0V4In0sMTA4MTp7bjoiQnJ0QmVnaW5TbGljZXJFeCJ9LDEwODI6e246IkJydEVuZFNsaWNl''@;'; put 'put ''ckV4In0sMTA4Mzp7bjoiQnJ0QmVnaW5TbGljZXIifSwxMDg0OntuOiJCcnRFbmRTbGljZXIifSwxMDg1OntuOiJCcnRTbGljZXJDYWNoZVBpdm90VGFibGVzIn0sMTA4Njp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZU9sYXBJbXBsIn0sMTA4Nzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVPbGFwSW1w''@;'; put 'put ''bCJ9LDEwODg6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVMZXZlbHNEYXRhIn0sMTA4OTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVMZXZlbHNEYXRhIn0sMTA5MDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUxldmVsRGF0YSJ9LDEwOTE6e246IkJydEVuZFNsaWNlckNhY2hlTGV2ZWxEYXRhIn0sMTA5''@;'; put 'put ''Mjp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZVNpUmFuZ2VzIn0sMTA5Mzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTaVJhbmdlcyJ9LDEwOTQ6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTaVJhbmdlIn0sMTA5NTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTaVJhbmdlIn0sMTA5Njp7bjoiQnJ0U2xpY2Vy''@;'; put 'put ''Q2FjaGVPbGFwSXRlbSJ9LDEwOTc6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTZWxlY3Rpb25zIn0sMTA5ODp7bjoiQnJ0U2xpY2VyQ2FjaGVTZWxlY3Rpb24ifSwxMDk5OntuOiJCcnRFbmRTbGljZXJDYWNoZVNlbGVjdGlvbnMifSwxMTAwOntuOiJCcnRCZWdpblNsaWNlckNhY2hlTmF0aXZl''@;'; put 'put ''In0sMTEwMTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVOYXRpdmUifSwxMTAyOntuOiJCcnRTbGljZXJDYWNoZU5hdGl2ZUl0ZW0ifSwxMTAzOntuOiJCcnRSYW5nZVByb3RlY3Rpb24xNCJ9LDExMDQ6e246IkJydFJhbmdlUHJvdGVjdGlvbklzbzE0In0sMTEwNTp7bjoiQnJ0Q2VsbElnbm9yZUVD''@;'; put 'put ''MTQifSwxMTExOntuOiJCcnRMaXN0MTQifSwxMTEyOntuOiJCcnRDRkljb24ifSwxMTEzOntuOiJCcnRCZWdpblNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRHMifSwxMTE0OntuOiJCcnRFbmRTbGljZXJDYWNoZXNQaXZvdENhY2hlSURzIn0sMTExNTp7bjoiQnJ0QmVnaW5TbGljZXJzIn0sMTEx''@;'; put 'put ''Njp7bjoiQnJ0RW5kU2xpY2VycyJ9LDExMTc6e246IkJydFdiUHJvcDE0In0sMTExODp7bjoiQnJ0QmVnaW5TWEVkaXQifSwxMTE5OntuOiJCcnRFbmRTWEVkaXQifSwxMTIwOntuOiJCcnRCZWdpblNYRWRpdHMifSwxMTIxOntuOiJCcnRFbmRTWEVkaXRzIn0sMTEyMjp7bjoiQnJ0QmVnaW5T''@;'; put 'put ''WENoYW5nZSJ9LDExMjM6e246IkJydEVuZFNYQ2hhbmdlIn0sMTEyNDp7bjoiQnJ0QmVnaW5TWENoYW5nZXMifSwxMTI1OntuOiJCcnRFbmRTWENoYW5nZXMifSwxMTI2OntuOiJCcnRTWFR1cGxlSXRlbXMifSwxMTI4OntuOiJCcnRCZWdpblNsaWNlclN0eWxlIn0sMTEyOTp7bjoiQnJ0RW5k''@;'; put 'put ''U2xpY2VyU3R5bGUifSwxMTMwOntuOiJCcnRTbGljZXJTdHlsZUVsZW1lbnQifSwxMTMxOntuOiJCcnRCZWdpblN0eWxlU2hlZXRFeHQxNCJ9LDExMzI6e246IkJydEVuZFN0eWxlU2hlZXRFeHQxNCJ9LDExMzM6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEIn0sMTEzNDp7''@;'; put 'put ''bjoiQnJ0RW5kU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEIn0sMTEzNTp7bjoiQnJ0QmVnaW5Db25kaXRpb25hbEZvcm1hdHRpbmdzIn0sMTEzNjp7bjoiQnJ0RW5kQ29uZGl0aW9uYWxGb3JtYXR0aW5ncyJ9LDExMzc6e246IkJydEJlZ2luUENEQ2FsY01lbUV4dCJ9LDExMzg6e246IkJydEVu''@;'; put 'put ''ZFBDRENhbGNNZW1FeHQifSwxMTM5OntuOiJCcnRCZWdpblBDRENhbGNNZW1zRXh0In0sMTE0MDp7bjoiQnJ0RW5kUENEQ2FsY01lbXNFeHQifSwxMTQxOntuOiJCcnRQQ0RGaWVsZDE0In0sMTE0Mjp7bjoiQnJ0QmVnaW5TbGljZXJTdHlsZXMifSwxMTQzOntuOiJCcnRFbmRTbGljZXJTdHls''@;'; put 'put ''ZXMifSwxMTQ0OntuOiJCcnRCZWdpblNsaWNlclN0eWxlRWxlbWVudHMifSwxMTQ1OntuOiJCcnRFbmRTbGljZXJTdHlsZUVsZW1lbnRzIn0sMTE0Njp7bjoiQnJ0Q0ZSdWxlRXh0In0sMTE0Nzp7bjoiQnJ0QmVnaW5TWENvbmRGbXQxNCJ9LDExNDg6e246IkJydEVuZFNYQ29uZEZtdDE0In0s''@;'; put 'put ''MTE0OTp7bjoiQnJ0QmVnaW5TWENvbmRGbXRzMTQifSwxMTUwOntuOiJCcnRFbmRTWENvbmRGbXRzMTQifSwxMTUyOntuOiJCcnRCZWdpblNvcnRDb25kMTQifSwxMTUzOntuOiJCcnRFbmRTb3J0Q29uZDE0In0sMTE1NDp7bjoiQnJ0RW5kRFZhbHMxNCJ9LDExNTU6e246IkJydEVuZEljb25T''@;'; put 'put ''ZXQxNCJ9LDExNTY6e246IkJydEVuZERhdGFiYXIxNCJ9LDExNTc6e246IkJydEJlZ2luQ29sb3JTY2FsZTE0In0sMTE1ODp7bjoiQnJ0RW5kQ29sb3JTY2FsZTE0In0sMTE1OTp7bjoiQnJ0QmVnaW5TeHJ1bGVzMTQifSwxMTYwOntuOiJCcnRFbmRTeHJ1bGVzMTQifSwxMTYxOntuOiJCcnRC''@;'; put 'put ''ZWdpblBSdWxlMTQifSwxMTYyOntuOiJCcnRFbmRQUnVsZTE0In0sMTE2Mzp7bjoiQnJ0QmVnaW5QUkZpbHRlcnMxNCJ9LDExNjQ6e246IkJydEVuZFBSRmlsdGVyczE0In0sMTE2NTp7bjoiQnJ0QmVnaW5QUkZpbHRlcjE0In0sMTE2Njp7bjoiQnJ0RW5kUFJGaWx0ZXIxNCJ9LDExNjc6e246''@;'; put 'put ''IkJydEJlZ2luUFJGSXRlbTE0In0sMTE2ODp7bjoiQnJ0RW5kUFJGSXRlbTE0In0sMTE2OTp7bjoiQnJ0QmVnaW5DZWxsSWdub3JlRUNzMTQifSwxMTcwOntuOiJCcnRFbmRDZWxsSWdub3JlRUNzMTQifSwxMTcxOntuOiJCcnREeGYxNCJ9LDExNzI6e246IkJydEJlZ2luRHhGMTRzIn0sMTE3''@;'; put 'put ''Mzp7bjoiQnJ0RW5kRHhmMTRzIn0sMTE3Nzp7bjoiQnJ0RmlsdGVyMTQifSwxMTc4OntuOiJCcnRCZWdpbkN1c3RvbUZpbHRlcnMxNCJ9LDExODA6e246IkJydEN1c3RvbUZpbHRlcjE0In0sMTE4MTp7bjoiQnJ0SWNvbkZpbHRlcjE0In0sMTE4Mjp7bjoiQnJ0UGl2b3RDYWNoZUNvbm5lY3Rp''@;'; put 'put ''b25OYW1lIn0sMjA0ODp7bjoiQnJ0QmVnaW5EZWNvdXBsZWRQaXZvdENhY2hlSURzIn0sMjA0OTp7bjoiQnJ0RW5kRGVjb3VwbGVkUGl2b3RDYWNoZUlEcyJ9LDIwNTA6e246IkJydERlY291cGxlZFBpdm90Q2FjaGVJRCJ9LDIwNTE6e246IkJydEJlZ2luUGl2b3RUYWJsZVJlZnMifSwyMDUy''@;'; put 'put ''OntuOiJCcnRFbmRQaXZvdFRhYmxlUmVmcyJ9LDIwNTM6e246IkJydFBpdm90VGFibGVSZWYifSwyMDU0OntuOiJCcnRTbGljZXJDYWNoZUJvb2tQaXZvdFRhYmxlcyJ9LDIwNTU6e246IkJydEJlZ2luU3h2Y2VsbHMifSwyMDU2OntuOiJCcnRFbmRTeHZjZWxscyJ9LDIwNTc6e246IkJydEJl''@;'; put 'put ''Z2luU3hSb3cifSwyMDU4OntuOiJCcnRFbmRTeFJvdyJ9LDIwNjA6e246IkJydFBjZENhbGNNZW0xNSJ9LDIwNjc6e246IkJydFFzaTE1In0sMjA2ODp7bjoiQnJ0QmVnaW5XZWJFeHRlbnNpb25zIn0sMjA2OTp7bjoiQnJ0RW5kV2ViRXh0ZW5zaW9ucyJ9LDIwNzA6e246IkJydFdlYkV4dGVu''@;'; put 'put ''c2lvbiJ9LDIwNzE6e246IkJydEFic1BhdGgxNSJ9LDIwNzI6e246IkJydEJlZ2luUGl2b3RUYWJsZVVJU2V0dGluZ3MifSwyMDczOntuOiJCcnRFbmRQaXZvdFRhYmxlVUlTZXR0aW5ncyJ9LDIwNzU6e246IkJydFRhYmxlU2xpY2VyQ2FjaGVJRHMifSwyMDc2OntuOiJCcnRUYWJsZVNsaWNl''@;'; put 'put ''ckNhY2hlSUQifSwyMDc3OntuOiJCcnRCZWdpblRhYmxlU2xpY2VyQ2FjaGUifSwyMDc4OntuOiJCcnRFbmRUYWJsZVNsaWNlckNhY2hlIn0sMjA3OTp7bjoiQnJ0U3hGaWx0ZXIxNSJ9LDIwODA6e246IkJydEJlZ2luVGltZWxpbmVDYWNoZVBpdm90Q2FjaGVJRHMifSwyMDgxOntuOiJCcnRF''@;'; put 'put ''bmRUaW1lbGluZUNhY2hlUGl2b3RDYWNoZUlEcyJ9LDIwODI6e246IkJydFRpbWVsaW5lQ2FjaGVQaXZvdENhY2hlSUQifSwyMDgzOntuOiJCcnRCZWdpblRpbWVsaW5lQ2FjaGVJRHMifSwyMDg0OntuOiJCcnRFbmRUaW1lbGluZUNhY2hlSURzIn0sMjA4NTp7bjoiQnJ0QmVnaW5UaW1lbGlu''@;'; put 'put ''ZUNhY2hlSUQifSwyMDg2OntuOiJCcnRFbmRUaW1lbGluZUNhY2hlSUQifSwyMDg3OntuOiJCcnRCZWdpblRpbWVsaW5lc0V4In0sMjA4ODp7bjoiQnJ0RW5kVGltZWxpbmVzRXgifSwyMDg5OntuOiJCcnRCZWdpblRpbWVsaW5lRXgifSwyMDkwOntuOiJCcnRFbmRUaW1lbGluZUV4In0sMjA5''@;'; put 'put ''MTp7bjoiQnJ0V29ya0Jvb2tQcjE1In0sMjA5Mjp7bjoiQnJ0UENESDE1In0sMjA5Mzp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlIn0sMjA5NDp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZSJ9LDIwOTU6e246IkJydFRpbWVsaW5lU3R5bGVFbGVtZW50In0sMjA5Njp7bjoiQnJ0QmVnaW5UaW1l''@;'; put 'put ''bGluZVN0eWxlc2hlZXRFeHQxNSJ9LDIwOTc6e246IkJydEVuZFRpbWVsaW5lU3R5bGVzaGVldEV4dDE1In0sMjA5ODp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlcyJ9LDIwOTk6e246IkJydEVuZFRpbWVsaW5lU3R5bGVzIn0sMjEwMDp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlRWxlbWVu''@;'; put 'put ''dHMifSwyMTAxOntuOiJCcnRFbmRUaW1lbGluZVN0eWxlRWxlbWVudHMifSwyMTAyOntuOiJCcnREeGYxNSJ9LDIxMDM6e246IkJydEJlZ2luRHhmczE1In0sMjEwNDp7bjoiYnJ0RW5kRHhmczE1In0sMjEwNTp7bjoiQnJ0U2xpY2VyQ2FjaGVIaWRlSXRlbXNXaXRoTm9EYXRhIn0sMjEwNjp7''@;'; put 'put ''bjoiQnJ0QmVnaW5JdGVtVW5pcXVlTmFtZXMifSwyMTA3OntuOiJCcnRFbmRJdGVtVW5pcXVlTmFtZXMifSwyMTA4OntuOiJCcnRJdGVtVW5pcXVlTmFtZSJ9LDIxMDk6e246IkJydEJlZ2luRXh0Q29ubjE1In0sMjExMDp7bjoiQnJ0RW5kRXh0Q29ubjE1In0sMjExMTp7bjoiQnJ0QmVnaW5P''@;'; put 'put ''bGVkYlByMTUifSwyMTEyOntuOiJCcnRFbmRPbGVkYlByMTUifSwyMTEzOntuOiJCcnRCZWdpbkRhdGFGZWVkUHIxNSJ9LDIxMTQ6e246IkJydEVuZERhdGFGZWVkUHIxNSJ9LDIxMTU6e246IkJydFRleHRQcjE1In0sMjExNjp7bjoiQnJ0UmFuZ2VQcjE1In0sMjExNzp7bjoiQnJ0RGJDb21t''@;'; put 'put ''YW5kMTUifSwyMTE4OntuOiJCcnRCZWdpbkRiVGFibGVzMTUifSwyMTE5OntuOiJCcnRFbmREYlRhYmxlczE1In0sMjEyMDp7bjoiQnJ0RGJUYWJsZTE1In0sMjEyMTp7bjoiQnJ0QmVnaW5EYXRhTW9kZWwifSwyMTIyOntuOiJCcnRFbmREYXRhTW9kZWwifSwyMTIzOntuOiJCcnRCZWdpbk1v''@;'; put 'put ''ZGVsVGFibGVzIn0sMjEyNDp7bjoiQnJ0RW5kTW9kZWxUYWJsZXMifSwyMTI1OntuOiJCcnRNb2RlbFRhYmxlIn0sMjEyNjp7bjoiQnJ0QmVnaW5Nb2RlbFJlbGF0aW9uc2hpcHMifSwyMTI3OntuOiJCcnRFbmRNb2RlbFJlbGF0aW9uc2hpcHMifSwyMTI4OntuOiJCcnRNb2RlbFJlbGF0aW9u''@;'; put 'put ''c2hpcCJ9LDIxMjk6e246IkJydEJlZ2luRUNUeHRXaXoxNSJ9LDIxMzA6e246IkJydEVuZEVDVHh0V2l6MTUifSwyMTMxOntuOiJCcnRCZWdpbkVDVFdGbGRJbmZvTHN0MTUifSwyMTMyOntuOiJCcnRFbmRFQ1RXRmxkSW5mb0xzdDE1In0sMjEzMzp7bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mbzE1''@;'; put 'put ''In0sMjEzNDp7bjoiQnJ0RmllbGRMaXN0QWN0aXZlSXRlbSJ9LDIxMzU6e246IkJydFBpdm90Q2FjaGVJZFZlcnNpb24ifSwyMTM2OntuOiJCcnRTWERJMTUifSwyMTM3OntuOiJCcnRCZWdpbk1vZGVsVGltZUdyb3VwaW5ncyJ9LDIxMzg6e246IkJydEVuZE1vZGVsVGltZUdyb3VwaW5ncyJ9''@;'; put 'put ''LDIxMzk6e246IkJydEJlZ2luTW9kZWxUaW1lR3JvdXBpbmcifSwyMTQwOntuOiJCcnRFbmRNb2RlbFRpbWVHcm91cGluZyJ9LDIxNDE6e246IkJydE1vZGVsVGltZUdyb3VwaW5nQ2FsY0NvbCJ9LDMwNzI6e246IkJydFVpZCJ9LDMwNzM6e246IkJydFJldmlzaW9uUHRyIn0sNTA5NTp7bjoi''@;'; put 'put ''QnJ0QmVnaW5DYWxjRmVhdHVyZXMifSw1MDk2OntuOiJCcnRFbmRDYWxjRmVhdHVyZXMifSw1MDk3OntuOiJCcnRDYWxjRmVhdHVyZSJ9LDY1NTM1OntuOiIifX0sQkI9Z2UoWjksIm4iKTtCQi5CcnRGUlRBcmNoSUQkPTE2O3ZhciBHOT17Njp7bjoiRm9ybXVsYSIsZjpBa30sMTA6e246IkVP''@;'; put 'put ''RiIsZjptcH0sMTI6e246IkNhbGNDb3VudCIsZjppZH0sMTM6e246IkNhbGNNb2RlIixmOmlkfSwxNDp7bjoiQ2FsY1ByZWNpc2lvbiIsZjp4YX0sMTU6e246IkNhbGNSZWZNb2RlIixmOnhhfSwxNjp7bjoiQ2FsY0RlbHRhIixmOnFzfSwxNzp7bjoiQ2FsY0l0ZXIiLGY6eGF9LDE4OntuOiJQ''@;'; put 'put ''cm90ZWN0IixmOnhhfSwxOTp7bjoiUGFzc3dvcmQiLGY6aWR9LDIwOntuOiJIZWFkZXIiLGY6eTN9LDIxOntuOiJGb290ZXIiLGY6eTN9LDIzOntuOiJFeHRlcm5TaGVldCIsZjpJQX0sMjQ6e246IkxibCIsZjpLUH0sMjU6e246IldpblByb3RlY3QiLGY6eGF9LDI2OntuOiJWZXJ0aWNhbFBh''@;'; put 'put ''Z2VCcmVha3MifSwyNzp7bjoiSG9yaXpvbnRhbFBhZ2VCcmVha3MifSwyODp7bjoiTm90ZSIsZjpmdW5jdGlvbiBUbChkLF8sbSl7cmV0dXJuIGZ1bmN0aW9uIE1sKGQsXyxtKXtpZighKG0uYmlmZjw4KSl7dmFyIFQ9ZC5yZWFkX3NoaWZ0KDIpLFA9ZC5yZWFkX3NoaWZ0KDIpLFE9ZC5yZWFk''@;'; put 'put ''X3NoaWZ0KDIpLHNlPWQucmVhZF9zaGlmdCgyKSxvZT1FbihkLDAsbSk7cmV0dXJuIG0uYmlmZjw4JiZkLnJlYWRfc2hpZnQoMSksW3tyOlQsYzpQfSxvZSxzZSxRXX19KGQsMCxtKX19LDI5OntuOiJTZWxlY3Rpb24iLGY6ZnVuY3Rpb24gRVgoZCxfLG0pe3JldHVybiBtJiZtLmJpZmY8NT8o''@;'; put 'put ''ZC5sKz1fLHtjZWxsOntyOjAsYzowfX0pOihkLnJlYWRfc2hpZnQoMSkse2NlbGw6cWkoe3I6ZC5yZWFkX3NoaWZ0KDIpLGM6ZC5yZWFkX3NoaWZ0KDIpfSl9KX19LDM0OntuOiJEYXRlMTkwNCIsZjp4YX0sMzU6e246IkV4dGVybk5hbWUiLGY6cVB9LDM4OntuOiJMZWZ0TWFyZ2luIixmOnFz''@;'; put 'put ''fSwzOTp7bjoiUmlnaHRNYXJnaW4iLGY6cXN9LDQwOntuOiJUb3BNYXJnaW4iLGY6cXN9LDQxOntuOiJCb3R0b21NYXJnaW4iLGY6cXN9LDQyOntuOiJQcmludFJvd0NvbCIsZjp4YX0sNDM6e246IlByaW50R3JpZCIsZjp4YX0sNDc6e246IkZpbGVQYXNzIixmOmZ1bmN0aW9uIGpYKGQsXyxt''@;'; put 'put ''KXtpZihtLmVuYylyZXR1cm4gbS5lbmM7dmFyIFQ9e1R5cGU6bS5iaWZmPj04P2QucmVhZF9zaGlmdCgyKTowfTtyZXR1cm4gVC5UeXBlP2Z1bmN0aW9uIHBIKGQsXyxtLFQpe3ZhciBQPVR8fHt9O2lmKFAuSW5mbz1kLnJlYWRfc2hpZnQoMiksZC5sLT0yLDE9PT1QLkluZm8pe2lmKFAuRGF0''@;'; put 'put ''YT1mdW5jdGlvbiBoSChkKXt2YXIgXz17fSxtPV8uRW5jcnlwdGlvblZlcnNpb25JbmZvPUxnKGQsNCk7aWYoMSE9bS5NYWpvcnx8MSE9bS5NaW5vcil0aHJvdyJ1bnJlY29nbml6ZWQgdmVyc2lvbiBjb2RlICIrbS5NYWpvcisiIDogIittLk1pbm9yO3JldHVybiBfLlNhbHQ9ZC5yZWFkX3No''@;'; put 'put ''aWZ0KDE2KSxfLkVuY3J5cHRlZFZlcmlmaWVyPWQucmVhZF9zaGlmdCgxNiksXy5FbmNyeXB0ZWRWZXJpZmllckhhc2g9ZC5yZWFkX3NoaWZ0KDE2KSxffShkKSxtLnBhc3N3b3JkJiZ0eXBlb2Ygejg8InUiKXt2YXIgUT16OChtLnBhc3N3b3JkLFAuRGF0YS5TYWx0LCIwMDAwMDAwMCIpLHNl''@;'; put 'put ''PWtlKFAuRGF0YS5FbmNyeXB0ZWRWZXJpZmllcitQLkRhdGEuRW5jcnlwdGVkVmVyaWZpZXJIYXNoLCJoZXgiKSxvZT1PMC5yYzQoa2UoUSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpLHNlKTtULnZhbGlkPU8wLm1kNShvZS5zbGljZSgwLDE2KSk9PUJ1ZmZlci5mcm9tKG9lLnNsaWNlKDE2''@;'; put 'put ''KSkudG9TdHJpbmcoImhleCIpLFAuRGF0YS5LZXk9USxULmluc2l0dT1mdW5jdGlvbiBSUihkLF8pe3ZhciBtPW5ldyBBcnJheSgyNTYpLFQ9MCxQPTAsUT0wLHNlPTA7ZnVuY3Rpb24gb2UoWmUpe2ZvcihUPTAsUD0wLFE9MCxzZT0wLFA9MDsyNTYhPVA7KytQKW1bUF09UDtmb3IoUT0wLFA9''@;'; put 'put ''MDsyNTYhPVA7KytQKXt0cnl7UT1RK21bUF0rWmVbUCVaZS5sZW5ndGhdLmNoYXJDb2RlQXQoMCkmMjU1fWNhdGNoKG50KXt0aHJvdyBjb25zb2xlLmxvZyhQLFplW1AlWmUubGVuZ3RoXSksbnR9c2U9bVtQXSxtW1BdPW1bUV0sbVtRXT1zZX1QPVE9MH1mdW5jdGlvbiBkZShaZSl7dmFyIG50''@;'; put 'put ''PVgoWmUubGVuZ3RoKTtmb3IoVD0wO1QhPVplLmxlbmd0aDsrK1Qpc2U9bVtQPVArMSYyNTVdLG1bUF09bVtRPShRK21bUF0pJTI1Nl0sbVtRXT1zZSxudFtUXT1aZVtUXV5tW21bUF0rbVtRXSYyNTVdO3JldHVybiBCdWZmZXIuZnJvbShudCl9dmFyIExlPWQuS2V5LE5lPTA7b2Uoa2UoTGUs''@;'; put 'put ''ImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSk7dmFyIEJlPTA7cmV0dXJuIGZ1bmN0aW9uKFplKXtpZihCZStaZS5sZW5ndGg8MTAyNClyZXR1cm4gQmUrPVplLmxlbmd0aCxkZShaZSk7dmFyIFFlPTAsZnQ9a2UoWmUuc2xpY2UoUWUsUWUrKG10PTEwMjQtQmUpKSk7UWUrPW10LEJlPTA7dmFy''@;'; put 'put ''IGt0PWRlKGZ0KTtmb3IoUWU9PVplLmxlbmd0aCYmKCsrTmUsTGU9ejgoXyxkLlNhbHQsb0UoTmUpKSxvZShrZShMZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKSk7UWU8WmUubGVuZ3RoOyl7KytOZSxMZT16OChfLGQuU2FsdCxvRShOZSkpLG9lKEJ1ZmZlci5mcm9tKExlLCJoZXgiKS50''@;'; put 'put ''b1N0cmluZygiYmluYXJ5IikpO3ZhciBtdD1NYXRoLm1pbigxMDI0LFplLmxlbmd0aC1RZSk7ZnQ9a2UoWmUuc2xpY2UoUWUsUWUrbXQpKSxRZSs9bXQsQmU9bXQsa3Q9QnVmZmVyLmNvbmNhdChba3QsZGUoZnQpXSl9cmV0dXJuIGt0fX0oUC5EYXRhLG0ucGFzc3dvcmQpfX1lbHNlIGlmKFAu''@;'; put 'put ''RGF0YT1mdW5jdGlvbiBIWChkLF8pe3ZhciBtPXt9LFQ9bS5FbmNyeXB0aW9uVmVyc2lvbkluZm89TGcoZCw0KTtpZihfLT00LDIhPVQuTWlub3IpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgbWlub3IgdmVyc2lvbiBjb2RlOiAiK1QuTWlub3IpO2lmKFQuTWFqb3I+NHx8VC5NYWpv''@;'; put 'put ''cjwyKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIG1ham9yIHZlcnNpb24gY29kZTogIitULk1ham9yKTttLkZsYWdzPWQucmVhZF9zaGlmdCg0KSxfLT00O3ZhciBQPWQucmVhZF9zaGlmdCg0KTtyZXR1cm4gXy09NCxtLkVuY3J5cHRpb25IZWFkZXI9ZEgoZCxQKSxtLkVuY3J5cHRp''@;'; put 'put ''b25WZXJpZmllcj1GWChkLF8tPVApLG19KGQsXyksUC5EYXRhJiZQLkRhdGEuRW5jcnlwdGlvbkhlYWRlciYmMjY2MjU9PT1QLkRhdGEuRW5jcnlwdGlvbkhlYWRlci5BbGdJRCYmbS5wYXNzd29yZCYmdHlwZW9mIGFFPCJ1Iil7dmFyIGRlPWFFKG0ucGFzc3dvcmQsUC5EYXRhLkVuY3J5cHRp''@;'; put 'put ''b25WZXJpZmllci5TYWx0LnRvU3RyaW5nKCJoZXgiKSwiMDAwMDAwMDAiKSxMZT1QLkRhdGEuRW5jcnlwdGlvbkhlYWRlci5LZXlTaXplPj4+Mzs1PT1MZXx8TGU8ZGUubGVuZ3RoJiYoZGU9ZGUuc2xpY2UoMCxMZSkpO3ZhciBOZT1rZShQLkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlZlcmlm''@;'; put 'put ''aWVyLnRvU3RyaW5nKCJoZXgiKStQLkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlZlcmlmaWVySGFzaC50b1N0cmluZygiaGV4IiksImhleCIpLEJlPU8wLnJjNChkZS50b1N0cmluZygiYmluYXJ5IiksTmUpO1QudmFsaWQ9U2QoQmUuc2xpY2UoMCxMZSksIlNIQTEiKS50b1N0cmluZygiaGV4''@;'; put 'put ''Iik9PUJlLnNsaWNlKExlKS50b1N0cmluZygiaGV4IiksUC5EYXRhLktleT1kZSxULnZhbGlkJiYoVC5pbnNpdHU9ZnVuY3Rpb24gZTZlKGQsXyl7dmFyIG09bmV3IEFycmF5KDI1NiksVD0wLFA9MCxRPTAsc2U9MCxvZT1kLkVuY3J5cHRpb25IZWFkZXIuS2V5U2l6ZT4+PjM7ZnVuY3Rpb24g''@;'; put 'put ''ZGUobnQpe2ZvcihudD1CdWZmZXIuZnJvbShudC5zbGljZSgwLG9lKSksVD0wLFA9MCxRPTAsc2U9MCxQPTA7MjU2IT1QOysrUCltW1BdPVA7Zm9yKFE9MCxQPTA7MjU2IT1QOysrUCl7dmFyIG10PW50W1AlbnQubGVuZ3RoXTtRPVErbVtQXSsoInN0cmluZyI9PXR5cGVvZiBtdD9tdC5jaGFy''@;'; put 'put ''Q29kZUF0KDApOm10KSYyNTUsc2U9bVtQXSxtW1BdPW1bUV0sbVtRXT1zZX1QPVE9MH1mdW5jdGlvbiBMZShudCl7dmFyIG10PVgobnQubGVuZ3RoKTtmb3IoVD0wO1QhPW50Lmxlbmd0aDsrK1Qpc2U9bVtQPVArMSYyNTVdLG1bUF09bVtRPShRK21bUF0pJTI1Nl0sbVtRXT1zZSxtdFtUXT1u''@;'; put 'put ''dFtUXV5tW21bUF0rbVtRXSYyNTVdO3JldHVybiBCdWZmZXIuZnJvbShtdCl9dmFyIE5lPWQuS2V5LEJlPTA7ZGUoa2UoTmUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSk7dmFyIFplPTA7cmV0dXJuIGZ1bmN0aW9uKG50KXtpZihaZStudC5sZW5ndGg8MTAyNClyZXR1cm4gWmUrPW50Lmxl''@;'; put 'put ''bmd0aCxMZShudCk7dmFyIFFlPTEwMjQtWmUsZnQ9MCxrdD1CdWZmZXIuZnJvbShudC5zbGljZShmdCxmdCtRZSkpO2Z0Kz1RZSxaZT0wO3ZhciBidD1MZShrdCk7Zm9yKGZ0PT1udC5sZW5ndGgmJigrK0JlLE5lPWFFKF8sZC5FbmNyeXB0aW9uVmVyaWZpZXIuU2FsdCxvRShCZSkpLGRlKEJ1''@;'; put 'put ''ZmZlci5mcm9tKE5lLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpKTtmdDxudC5sZW5ndGg7KSsrQmUsTmU9YUUoXyxkLkVuY3J5cHRpb25WZXJpZmllci5TYWx0LG9FKEJlKSksZGUoQnVmZmVyLmZyb20oTmUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSksUWU9TWF0aC5taW4oMTAyNCxu''@;'; put 'put ''dC5sZW5ndGgtZnQpLGt0PUJ1ZmZlci5mcm9tKG50LnNsaWNlKGZ0LGZ0K1FlKSksZnQrPVFlLFFlPDEwMjQmJihaZT1RZSksYnQ9QnVmZmVyLmNvbmNhdChbYnQsTGUoa3QpXSk7cmV0dXJuIGJ0fX0oUC5EYXRhLG0ucGFzc3dvcmQpKX1yZXR1cm4gUH0oZCxfLTIsbSxUKTpmdW5jdGlvbiBj''@;'; put 'put ''NWUoZCxfLG0sVCl7dmFyIFA9e2tleTppZChkKSx2ZXJpZmljYXRpb25CeXRlczppZChkKX07bS5wYXNzd29yZCYmKFAudmVyaWZpZXI9VkEobS5wYXNzd29yZCkpLFQudmFsaWQ9UC52ZXJpZmljYXRpb25CeXRlcz09PVAudmVyaWZpZXIsVC52YWxpZCYmKFQuaW5zaXR1PWZ1bmN0aW9uKGQs''@;'; put 'put ''Xyl7dmFyIG09X3x8MCxUPWZIKGQpO3JldHVybiBmdW5jdGlvbihQKXt2YXIgUT1mdW5jdGlvbihkLF8sbSxULFApe3ZhciBRLHNlO2ZvcihQfHwoUD1fKSxUfHwoVD1mSCgiIikpLFE9MDtRIT1fLmxlbmd0aDsrK1Epc2U9MjU1Jigoc2U9X1tRXSk+PjV8c2U8PDMpLFBbUV09c2VePVRbbV0s''@;'; put 'put ''bT1tKzEmMTU7cmV0dXJuW1AsbSxUXX0oMCxQLG0sVCk7cmV0dXJuIG09UVsxXSxRWzBdfX0obS5wYXNzd29yZCwwKSl9KGQsMCxtLFQpLFR9fSw0OTp7bjoiRm9udCIsZjpmdW5jdGlvbiBIMChkLF8sbSl7dmFyIFQ9e3N6OmQucmVhZF9zaGlmdCgyKS8yMH0sUD1qZChkKTtQLmZCb2xkJiYo''@;'; put 'put ''VC5ib2xkPTEpLFAuZkl0YWxpYyYmKFQuaXRhbGljPTEpLFAuZlVuZGVybGluZSYmKFQudW5kZXJsaW5lPTEpLFAuZkNvbmRlbnNlJiYoVC5jb25kZW5zZT0xKSxQLmZFeHRlbmQmJihULmV4dGVuZD0xKSxQLmZTaGFkb3cmJihULnNoYWRvdz0xKSxQLmZPdXRsaW5lJiYoVC5vdXRsaW5lPTEp''@;'; put 'put ''LFAuZlN0cmlrZW91dCYmKFQuc3RyaWtlPTEpO3ZhciBRPW0mJm0uYmlmZnx8ODtpZigyIT1RJiYoVC5pY3Y9ZC5yZWFkX3NoaWZ0KDIpLDMhPVEmJjQhPVEpKXtzd2l0Y2goNzAwPT09ZC5yZWFkX3NoaWZ0KDIpJiYoVC5ib2xkPTEpLGQucmVhZF9zaGlmdCgyKSl7Y2FzZSAxOlQudmFsaWdu''@;'; put 'put ''PSJzdXBlciI7YnJlYWs7Y2FzZSAyOlQudmFsaWduPSJzdWIifXZhciBvZT1kLnJlYWRfc2hpZnQoMSk7MCE9b2UmJihULnVuZGVybGluZT1vZSk7dmFyIGRlPWQucmVhZF9zaGlmdCgxKTtkZT4wJiYoVC5mYW1pbHk9ZGUpO3ZhciBMZT1kLnJlYWRfc2hpZnQoMSk7TGU+MCYmKFQuY2hhcnNl''@;'; put 'put ''dD1MZSksZC5sKz0xfXJldHVybiBULm5hbWU9YmUoZCwwLG0pLFR9fSw1MTp7bjoiUHJpbnRTaXplIixmOmlkfSw2MDp7bjoiQ29udGludWUifSw2MTp7bjoiV2luZG93MSIsZjpmdW5jdGlvbiBlUyhkKXtyZXR1cm57UG9zOltkLnJlYWRfc2hpZnQoMiksZC5yZWFkX3NoaWZ0KDIpXSxEaW06''@;'; put 'put ''W2QucmVhZF9zaGlmdCgyKSxkLnJlYWRfc2hpZnQoMildLEZsYWdzOmQucmVhZF9zaGlmdCgyKSxDdXJUYWI6ZC5yZWFkX3NoaWZ0KDIpLEZpcnN0VGFiOmQucmVhZF9zaGlmdCgyKSxTZWxlY3RlZDpkLnJlYWRfc2hpZnQoMiksVGFiUmF0aW86ZC5yZWFkX3NoaWZ0KDIpfX19LDY0OntuOiJC''@;'; put 'put ''YWNrdXAiLGY6eGF9LDY1OntuOiJQYW5lIixmOmZ1bmN0aW9uIFVQKGQsXyxtKXtpZihtJiZtLmJpZmY8NSlyZXR1cm57fTt2YXIgVD17fTtyZXR1cm4gVC54PWQucmVhZF9zaGlmdCgyKSxULnk9ZC5yZWFkX3NoaWZ0KDIpLFQucndUb3A9ZC5yZWFkX3NoaWZ0KDIpLFQuY29sTGVmdD1kLnJl''@;'; put 'put ''YWRfc2hpZnQoMiksVC5wbm5BY2N0PWQucmVhZF9zaGlmdCgxKSxkLnJlYWRfc2hpZnQoMSksVH19LDY2OntuOiJDb2RlUGFnZSIsZjppZH0sNzc6e246IlBscyIsZjpFY30sODA6e246IkRDb24ifSw4MTp7bjoiRENvblJlZiJ9LDgyOntuOiJEQ29uTmFtZSJ9LDg1OntuOiJEZWZDb2xXaWR0''@;'; put 'put ''aCIsZjppZH0sODk6e246IlhDVCJ9LDkwOntuOiJDUk4ifSw5MTp7bjoiRmlsZVNoYXJpbmcifSw5Mjp7bjoiV3JpdGVBY2Nlc3MiLGY6ZnVuY3Rpb24gRTkoZCxfLG0pe2lmKG0uZW5jKXJldHVybiBkLmwrPV8sIiI7dmFyIFQ9ZC5sLFA9RW4oZCwwLG0pO3JldHVybiBkLnJlYWRfc2hpZnQo''@;'; put 'put ''XytULWQubCksUH19LDkzOntuOiJPYmoiLGY6ZnVuY3Rpb24gYlgoZCxfLG0pe2lmKG0mJm0uYmlmZjw4KXJldHVybiBmdW5jdGlvbiBfcChkLF8sbSl7ZC5sKz00O3ZhciBUPWQucmVhZF9zaGlmdCgyKSxQPWQucmVhZF9zaGlmdCgyKSxRPWQucmVhZF9zaGlmdCgyKTtkLmwrPTIsZC5sKz0y''@;'; put 'put ''LGQubCs9MixkLmwrPTIsZC5sKz0yLGQubCs9MixkLmwrPTIsZC5sKz0yLGQubCs9MixkLmwrPTY7dmFyIHNlPVtdO3JldHVybiBzZS5wdXNoKChnOFtUXXx8RWMpKGQsXy09MzYsbSkpLHtjbW86W1AsVCxRXSxmdDpzZX19KGQsXyxtKTt2YXIgVD1NZihkKSxQPWZ1bmN0aW9uIHBhKGQsXyl7''@;'; put 'put ''Zm9yKHZhciBUPWQubCtfLFA9W107ZC5sPFQ7KXt2YXIgUT1kLnJlYWRfc2hpZnQoMik7ZC5sLT0yO3RyeXtQW1FdPVM5W1FdKGQsVC1kLmwpfWNhdGNoe3JldHVybiBkLmw9VCxQfX1yZXR1cm4gZC5sIT1UJiYoZC5sPVQpLFB9KGQsXy0yMik7cmV0dXJue2NtbzpULGZ0OlB9fX0sOTQ6e246''@;'; put 'put ''IlVuY2FsY2VkIn0sOTU6e246IkNhbGNTYXZlUmVjYWxjIixmOnhhfSw5Njp7bjoiVGVtcGxhdGUifSw5Nzp7bjoiSW50bCJ9LDk5OntuOiJPYmpQcm90ZWN0IixmOnhhfSwxMjU6e246IkNvbEluZm8iLGY6bTh9LDEyODp7bjoiR3V0cyIsZjpmdW5jdGlvbiBHUChkKXtkLmwrPTQ7dmFyIF89''@;'; put 'put ''W2QucmVhZF9zaGlmdCgyKSxkLnJlYWRfc2hpZnQoMildO2lmKDAhPT1fWzBdJiZfWzBdLS0sMCE9PV9bMV0mJl9bMV0tLSxfWzBdPjd8fF9bMV0+Nyl0aHJvdyBuZXcgRXJyb3IoIkJhZCBHdXR0ZXJzOiAiK18uam9pbigifCIpKTtyZXR1cm4gX319LDEyOTp7bjoiV3NCb29sIixmOmZ1bmN0''@;'; put 'put ''aW9uIHA4KGQsXyxtKXt2YXIgVD1tJiY4PT1tLmJpZmZ8fDI9PV8/ZC5yZWFkX3NoaWZ0KDIpOihkLmwrPV8sMCk7cmV0dXJue2ZEaWFsb2c6MTYmVCxmQmVsb3c6NjQmVCxmUmlnaHQ6MTI4JlR9fX0sMTMwOntuOiJHcmlkU2V0IixmOmlkfSwxMzE6e246IkhDZW50ZXIiLGY6eGF9LDEzMjp7''@;'; put 'put ''bjoiVkNlbnRlciIsZjp4YX0sMTMzOntuOiJCb3VuZFNoZWV0OCIsZjpmdW5jdGlvbiBJZyhkLF8sbSl7dmFyIFQ9ZC5yZWFkX3NoaWZ0KDQpLFA9MyZkLnJlYWRfc2hpZnQoMSksUT1kLnJlYWRfc2hpZnQoMSk7c3dpdGNoKFEpe2Nhc2UgMDpRPSJXb3Jrc2hlZXQiO2JyZWFrO2Nhc2UgMTpR''@;'; put 'put ''PSJNYWNyb3NoZWV0IjticmVhaztjYXNlIDI6UT0iQ2hhcnRzaGVldCI7YnJlYWs7Y2FzZSA2OlE9IlZCQU1vZHVsZSJ9dmFyIHNlPWJlKGQsMCxtKTtyZXR1cm4gMD09PXNlLmxlbmd0aCYmKHNlPSJTaGVldDEiKSx7cG9zOlQsaHM6UCxkdDpRLG5hbWU6c2V9fX0sMTM0OntuOiJXcml0ZVBy''@;'; put 'put ''b3RlY3QifSwxNDA6e246IkNvdW50cnkiLGY6ZnVuY3Rpb24gQjEoZCl7dmFyIG0sXz1bMCwwXTtyZXR1cm4gbT1kLnJlYWRfc2hpZnQoMiksX1swXT1pOFttXXx8bSxtPWQucmVhZF9zaGlmdCgyKSxfWzFdPWk4W21dfHxtLF99fSwxNDE6e246IkhpZGVPYmoiLGY6aWR9LDE0NDp7bjoiU29y''@;'; put 'put ''dCJ9LDE0Njp7bjoiUGFsZXR0ZSIsZjpmdW5jdGlvbiBuNWUoZCl7Zm9yKHZhciBfPWQucmVhZF9zaGlmdCgyKSxtPVtdO18tLSA+MDspbS5wdXNoKElvKGQpKTtyZXR1cm4gbX19LDE1MTp7bjoiU3luYyJ9LDE1Mjp7bjoiTFByIn0sMTUzOntuOiJEeEdDb2wifSwxNTQ6e246IkZuR3JvdXBO''@;'; put 'put ''YW1lIn0sMTU1OntuOiJGaWx0ZXJNb2RlIn0sMTU2OntuOiJCdWlsdEluRm5Hcm91cENvdW50IixmOmlkfSwxNTc6e246IkF1dG9GaWx0ZXJJbmZvIn0sMTU4OntuOiJBdXRvRmlsdGVyIn0sMTYwOntuOiJTY2wiLGY6Z3l9LDE2MTp7bjoiU2V0dXAiLGY6ZnVuY3Rpb24gcjVlKGQsXyl7dmFy''@;'; put 'put ''IG09e307cmV0dXJuIF88MzJ8fChkLmwrPTE2LG0uaGVhZGVyPXFzKGQpLG0uZm9vdGVyPXFzKGQpLGQubCs9MiksbX19LDE3NDp7bjoiU2Nlbk1hbiJ9LDE3NTp7bjoiU0NFTkFSSU8ifSwxNzY6e246IlN4VmlldyJ9LDE3Nzp7bjoiU3h2ZCJ9LDE3ODp7bjoiU1hWSSJ9LDE4MDp7bjoiU3hJ''@;'; put 'put ''dmQifSwxODE6e246IlNYTEkifSwxODI6e246IlNYUEkifSwxODQ6e246IkRvY1JvdXRlIn0sMTg1OntuOiJSZWNpcE5hbWUifSwxODk6e246Ik11bFJrIixmOmZ1bmN0aW9uIHJTKGQsXyl7Zm9yKHZhciBtPWQubCtfLTIsVD1kLnJlYWRfc2hpZnQoMiksUD1kLnJlYWRfc2hpZnQoMiksUT1b''@;'; put 'put ''XTtkLmw8bTspUS5wdXNoKFVkKGQpKTtpZihkLmwhPT1tKXRocm93IG5ldyBFcnJvcigiTXVsUksgcmVhZCBlcnJvciIpO3ZhciBzZT1kLnJlYWRfc2hpZnQoMik7aWYoUS5sZW5ndGghPXNlLVArMSl0aHJvdyBuZXcgRXJyb3IoIk11bFJLIGxlbmd0aCBtaXNtYXRjaCIpO3JldHVybntyOlQs''@;'; put 'put ''YzpQLEM6c2UscmtyZWM6UX19fSwxOTA6e246Ik11bEJsYW5rIixmOmZ1bmN0aW9uIG1YKGQsXyl7Zm9yKHZhciBtPWQubCtfLTIsVD1kLnJlYWRfc2hpZnQoMiksUD1kLnJlYWRfc2hpZnQoMiksUT1bXTtkLmw8bTspUS5wdXNoKGQucmVhZF9zaGlmdCgyKSk7aWYoZC5sIT09bSl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIk11bEJsYW5rIHJlYWQgZXJyb3IiKTt2YXIgc2U9ZC5yZWFkX3NoaWZ0KDIpO2lmKFEubGVuZ3RoIT1zZS1QKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxCbGFuayBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjpULGM6UCxDOnNlLGl4ZmU6UX19fSwxOTM6e246Ik1tcyIsZjpt''@;'; put 'put ''cH0sMTk3OntuOiJTWERJIn0sMTk4OntuOiJTWERCIn0sMTk5OntuOiJTWEZEQiJ9LDIwMDp7bjoiU1hEQkIifSwyMDE6e246IlNYTnVtIn0sMjAyOntuOiJTeEJvb2wiLGY6eGF9LDIwMzp7bjoiU3hFcnIifSwyMDQ6e246IlNYSW50In0sMjA1OntuOiJTWFN0cmluZyJ9LDIwNjp7bjoiU1hE''@;'; put 'put ''dHIifSwyMDc6e246IlN4TmlsIn0sMjA4OntuOiJTWFRibCJ9LDIwOTp7bjoiU1hUQlJHSUlUTSJ9LDIxMDp7bjoiU3hUYnBnIn0sMjExOntuOiJPYlByb2oifSwyMTM6e246IlNYU3RyZWFtSUQifSwyMTU6e246IkRCQ2VsbCJ9LDIxNjp7bjoiU1hSbmcifSwyMTc6e246IlN4SXN4b3BlciJ9''@;'; put 'put ''LDIxODp7bjoiQm9va0Jvb2wiLGY6aWR9LDIyMDp7bjoiRGJPclBhcmFtUXJ5In0sMjIxOntuOiJTY2VuYXJpb1Byb3RlY3QiLGY6eGF9LDIyMjp7bjoiT2xlT2JqZWN0U2l6ZSJ9LDIyNDp7bjoiWEYiLGY6ZnVuY3Rpb24ga0EoZCxfLG0pe3ZhciBUPXt9O3JldHVybiBULmlmbnQ9ZC5yZWFk''@;'; put 'put ''X3NoaWZ0KDIpLFQubnVtRm10SWQ9ZC5yZWFkX3NoaWZ0KDIpLFQuZmxhZ3M9ZC5yZWFkX3NoaWZ0KDIpLFQuZlN0eWxlPVQuZmxhZ3M+PjImMSxULmRhdGE9ZnVuY3Rpb24gWVAoZCxfLG0sVCl7dmFyIFA9e30sUT1kLnJlYWRfc2hpZnQoNCksc2U9ZC5yZWFkX3NoaWZ0KDQpLG9lPWQucmVh''@;'; put 'put ''ZF9zaGlmdCg0KSxkZT1kLnJlYWRfc2hpZnQoMik7aWYoUC5wYXR0ZXJuVHlwZT1vOFtvZT4+MjZdLCFULmNlbGxTdHlsZXMpcmV0dXJuIFA7dmFyIExlPTcmUTtzd2l0Y2goTGUpe2Nhc2UgMTpQLmhhbGlnbj0ibGVmdCI7YnJlYWs7Y2FzZSAyOlAuaGFsaWduPSJjZW50ZXIiO2JyZWFrO2Nh''@;'; put 'put ''c2UgMzpQLmhhbGlnbj0icmlnaHQifXN3aXRjaChQLmZXcmFwPVE+PjMmMSxMZT1RPj40Jjcpe2Nhc2UgMDpQLnZhbGlnbj0idG9wIjticmVhaztjYXNlIDE6UC52YWxpZ249ImNlbnRlciI7YnJlYWs7Y2FzZSAyOlAudmFsaWduPSJib3R0b20ifXJldHVybiBQLmZKdXN0TGFzdD1RPj43JjEs''@;'; put 'put ''UC50cm90PVE+PjgmMjU1LFAuY0luZGVudD1RPj4xNiYxNSxQLmZTaHJpbmtUb0ZpdD1RPj4yMCYxLFAuaVJlYWRPcmRlcj1RPj4yMiYyLFAuZkF0ck51bT1RPj4yNiYxLFAuZkF0ckZudD1RPj4yNyYxLFAuZkF0ckFsYz1RPj4yOCYxLFAuZkF0ckJkcj1RPj4yOSYxLFAuZkF0clBhdD1RPj4z''@;'; put 'put ''MCYxLFAuZkF0clByb3Q9UT4+MzEmMSxQLmRnTGVmdD0xNSZzZSxQLmRnUmlnaHQ9c2U+PjQmMTUsUC5kZ1RvcD1zZT4+OCYxNSxQLmRnQm90dG9tPXNlPj4xMiYxNSxQLmljdkxlZnQ9c2U+PjE2JjEyNyxQLmljdlJpZ2h0PXNlPj4yMyYxMjcsUC5ncmJpdERpYWc9c2U+PjMwJjMsUC5pY3ZU''@;'; put 'put ''b3A9MTI3Jm9lLFAuaWN2Qm90dG9tPW9lPj43JjEyNyxQLmljdkRpYWc9b2U+PjE0JjEyNyxQLmRnRGlhZz1vZT4+MjEmMTUsUC5pY3ZGb3JlPTEyNyZkZSxQLmljdkJhY2s9ZGU+PjcmMTI3LFAuZnN4QnV0dG9uPWRlPj4xNCYxLFB9KGQsMCwwLG0pLFR9fSwyMjU6e246IkludGVyZmFjZUhk''@;'; put 'put ''ciIsZjpmdW5jdGlvbiBmOChkLF8pe3JldHVybiAwPT09X3x8ZC5yZWFkX3NoaWZ0KDIpLDEyMDB9fSwyMjY6e246IkludGVyZmFjZUVuZCIsZjptcH0sMjI3OntuOiJTWFZTIn0sMjI5OntuOiJNZXJnZUNlbGxzIixmOmZ1bmN0aW9uIE0yKGQsXyl7Zm9yKHZhciBtPVtdLFQ9ZC5yZWFkX3No''@;'; put 'put ''aWZ0KDIpO1QtLTspbS5wdXNoKG9kKGQpKTtyZXR1cm4gbX19LDIzMzp7bjoiQmtIaW0ifSwyMzU6e246Ik1zb0RyYXdpbmdHcm91cCJ9LDIzNjp7bjoiTXNvRHJhd2luZyJ9LDIzNzp7bjoiTXNvRHJhd2luZ1NlbGVjdGlvbiJ9LDIzOTp7bjoiUGhvbmV0aWNJbmZvIn0sMjQwOntuOiJTeFJ1''@;'; put 'put ''bGUifSwyNDE6e246IlNYRXgifSwyNDI6e246IlN4RmlsdCJ9LDI0NDp7bjoiU3hEWEYifSwyNDU6e246IlN4SXRtIn0sMjQ2OntuOiJTeE5hbWUifSwyNDc6e246IlN4U2VsZWN0In0sMjQ4OntuOiJTWFBhaXIifSwyNDk6e246IlN4Rm1sYSJ9LDI1MTp7bjoiU3hGb3JtYXQifSwyNTI6e246''@;'; put 'put ''IlNTVCIsZjpmdW5jdGlvbiBmMChkLF8pe2Zvcih2YXIgbT1kLmwrXyxUPWQucmVhZF9zaGlmdCg0KSxQPWQucmVhZF9zaGlmdCg0KSxRPVtdLHNlPTA7c2UhPVAmJmQubDxtOysrc2UpUS5wdXNoKE9lKGQpKTtyZXR1cm4gUS5Db3VudD1ULFEuVW5pcXVlPVAsUX19LDI1Mzp7bjoiTGFiZWxT''@;'; put 'put ''c3QiLGY6ZnVuY3Rpb24gelAoZCl7dmFyIF89WmkoZCk7cmV0dXJuIF8uaXNzdD1kLnJlYWRfc2hpZnQoNCksX319LDI1NTp7bjoiRXh0U1NUIixmOmZ1bmN0aW9uIHllKGQsXyl7dmFyIG09e307cmV0dXJuIG0uZHNzdD1kLnJlYWRfc2hpZnQoMiksZC5sKz1fLTIsbX19LDI1Njp7bjoiU1hW''@;'; put 'put ''REV4In0sMjU5OntuOiJTWEZvcm11bGEifSwyOTA6e246IlNYREJFeCJ9LDMxMTp7bjoiUlJESW5zRGVsIn0sMzEyOntuOiJSUkRIZWFkIn0sMzE1OntuOiJSUkRDaGdDZWxsIn0sMzE3OntuOiJSUlRhYklkIixmOmg4fSwzMTg6e246IlJSRFJlblNoZWV0In0sMzE5OntuOiJSUlNvcnQifSwz''@;'; put 'put ''MjA6e246IlJSRE1vdmUifSwzMzA6e246IlJSRm9ybWF0In0sMzMxOntuOiJSUkF1dG9GbXQifSwzMzM6e246IlJSSW5zZXJ0U2gifSwzMzQ6e246IlJSRE1vdmVCZWdpbiJ9LDMzNTp7bjoiUlJETW92ZUVuZCJ9LDMzNjp7bjoiUlJESW5zRGVsQmVnaW4ifSwzMzc6e246IlJSREluc0RlbEVu''@;'; put 'put ''ZCJ9LDMzODp7bjoiUlJEQ29uZmxpY3QifSwzMzk6e246IlJSRERlZk5hbWUifSwzNDA6e246IlJSRFJzdEV0eHAifSwzNTE6e246IkxSbmcifSwzNTI6e246IlVzZXNFTEZzIixmOnhhfSwzNTM6e246IkRTRiIsZjptcH0sNDAxOntuOiJDVXNyIn0sNDAyOntuOiJDYlVzciJ9LDQwMzp7bjoi''@;'; put 'put ''VXNySW5mbyJ9LDQwNDp7bjoiVXNyRXhjbCJ9LDQwNTp7bjoiRmlsZUxvY2sifSw0MDY6e246IlJSREluZm8ifSw0MDc6e246IkJDVXNycyJ9LDQwODp7bjoiVXNyQ2hrIn0sNDI1OntuOiJVc2VyQlZpZXcifSw0MjY6e246IlVzZXJTVmlld0JlZ2luIn0sNDI3OntuOiJVc2VyU1ZpZXdFbmQi''@;'; put 'put ''fSw0Mjg6e246IlJSRFVzZXJWaWV3In0sNDI5OntuOiJRc2kifSw0MzA6e246IlN1cEJvb2siLGY6ZnVuY3Rpb24gX1goZCxfLG0pe3ZhciBUPWQubCtfLFA9ZC5yZWFkX3NoaWZ0KDIpLFE9ZC5yZWFkX3NoaWZ0KDIpO2lmKG0uc2JjY2g9USwxMDI1PT1RfHwxNDg0OT09USlyZXR1cm5bUSxQ''@;'; put 'put ''XTtpZihRPDF8fFE+MjU1KXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBTdXBCb29rIHR5cGU6ICIrUSk7Zm9yKHZhciBzZT1TdChkLFEpLG9lPVtdO1Q+ZC5sOylvZS5wdXNoKFF0KGQpKTtyZXR1cm5bUSxQLHNlLG9lXX19LDQzMTp7bjoiUHJvdDRSZXYiLGY6eGF9LDQzMjp7bjoiQ29u''@;'; put 'put ''ZEZtdCJ9LDQzMzp7bjoiQ0YifSw0MzQ6e246IkRWYWwifSw0Mzc6e246IkRDb25CaW4ifSw0Mzg6e246IlR4TyIsZjpmdW5jdGlvbiB3WChkLF8sbSl7dmFyIFQ9ZC5sLFA9IiIsUT0tMTt0cnl7ZC5sKz00LC0xPT1bMCw1LDcsMTEsMTIsMTRdLmluZGV4T2YoKG0ubGFzdG9ianx8e2Ntbzpb''@;'; put 'put ''MCwwXX0pLmNtb1sxXSk/ZC5sKz02OmZ1bmN0aW9uIFVyKGQpe3ZhciBfPWQucmVhZF9zaGlmdCgxKTtkLmwrKzt2YXIgbT1kLnJlYWRfc2hpZnQoMik7ZC5sKz0yfShkKTt2YXIgZGU9ZC5yZWFkX3NoaWZ0KDIpO2QucmVhZF9zaGlmdCgyKSxRPWQucmVhZF9zaGlmdCgyKTt2YXIgTmU9ZC5y''@;'; put 'put ''ZWFkX3NoaWZ0KDIpO2QubCs9TmU7Zm9yKHZhciBCZT0xO0JlPGQubGVucy5sZW5ndGgtMTsrK0JlKXtpZihkLmwtVCE9ZC5sZW5zW0JlXSl0aHJvdyBuZXcgRXJyb3IoIlR4TzogYmFkIGNvbnRpbnVlIHJlY29yZCIpO3ZhciBaZT1kW2QubF07aWYoKFArPVN0KGQsZC5sZW5zW0JlKzFdLWQu''@;'; put 'put ''bGVuc1tCZV0tMSkpLmxlbmd0aD49KFplP2RlOjIqZGUpKWJyZWFrfWlmKFAubGVuZ3RoIT09ZGUmJlAubGVuZ3RoIT09MipkZSl0aHJvdyBuZXcgRXJyb3IoImNjaFRleHQ6ICIrZGUrIiAhPSAiK1AubGVuZ3RoKTtyZXR1cm4gZC5sPVQrXyx7dDpQLGlmbnQ6UX19Y2F0Y2h7cmV0dXJuIGQu''@;'; put 'put ''bD1UK18se3Q6UCxpZm50OlF9fX19LDQzOTp7bjoiUmVmcmVzaEFsbCIsZjp4YX0sNDQwOntuOiJITGluayIsZjpmdW5jdGlvbiBDWChkLF8pe3ZhciBtPW9kKGQpO2QubCs9MTY7dmFyIFQ9ZnVuY3Rpb24gZHMoZCxfKXt2YXIgbT1kLmwrXyxUPWQucmVhZF9zaGlmdCg0KTtpZigyIT09VCl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBzdHJlYW1WZXJzaW9uOiAiK1QpO3ZhciBQPWQucmVhZF9zaGlmdCgyKTtkLmwrPTI7dmFyIFEsc2Usb2UsZGUsTmUsQmUsTGU9IiI7MTYmUCYmKFE9eG8oZCkpLDEyOCZQJiYoc2U9eG8oZCkpLCEoMjU3Jn5QKSYmKG9lPXhvKGQpKSwxPT0o''@;'; put 'put ''MjU3JlApJiYoZGU9ZnVuY3Rpb24gSmkoZCxfKXt2YXIgbT1kLnJlYWRfc2hpZnQoMTYpO3N3aXRjaChtKXtjYXNlImUwYzllYTc5ZjliYWNlMTE4YzgyMDBhYTAwNGJhOTBiIjpyZXR1cm4gZnVuY3Rpb24gcGkoZCl7dmFyIF89ZC5yZWFkX3NoaWZ0KDQpLG09ZC5sLFQ9ITE7Xz4yNCYmKGQu''@;'; put 'put ''bCs9Xy0yNCwiNzk1ODgxZjQzYjFkN2Y0OGFmMmM4MjVkYzQ4NTI3NjMiPT09ZC5yZWFkX3NoaWZ0KDE2KSYmKFQ9ITApLGQubD1tKTt2YXIgUD1kLnJlYWRfc2hpZnQoKFQ/Xy0yNDpfKT4+MSwidXRmMTZsZSIpLnJlcGxhY2UoRCwiIik7cmV0dXJuIFQmJihkLmwrPTI0KSxQfShkKTtjYXNl''@;'; put 'put ''IjAzMDMwMDAwMDAwMDAwMDBjMDAwMDAwMDAwMDAwMDQ2IjpyZXR1cm4gZnVuY3Rpb24gRHIoZCl7Zm9yKHZhciBfPWQucmVhZF9zaGlmdCgyKSxtPSIiO18tLSA+MDspbSs9Ii4uLyI7dmFyIFQ9ZC5yZWFkX3NoaWZ0KDAsImxwc3RyLWFuc2kiKTtpZihkLmwrPTIsNTcwMDUhPWQucmVhZF9z''@;'; put 'put ''aGlmdCgyKSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBGaWxlTW9uaWtlciIpO2lmKDA9PT1kLnJlYWRfc2hpZnQoNCkpcmV0dXJuIG0rVC5yZXBsYWNlKC9cXC9nLCIvIik7dmFyIFE9ZC5yZWFkX3NoaWZ0KDQpO2lmKDMhPWQucmVhZF9zaGlmdCgyKSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBGaWxl''@;'; put 'put ''TW9uaWtlciIpO3JldHVybiBtK2QucmVhZF9zaGlmdChRPj4xLCJ1dGYxNmxlIikucmVwbGFjZShELCIiKX0oZCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE1vbmlrZXIgIittKX19KGQpKSw4JlAmJihMZT14byhkKSksMzImUCYmKE5lPWQucmVhZF9zaGlmdCgxNikp''@;'; put 'put ''LDY0JlAmJihCZT1hMShkKSksZC5sPW07dmFyIFplPXNlfHxvZXx8ZGV8fCIiO1plJiZMZSYmKFplKz0iIyIrTGUpLFplfHwoWmU9IiMiK0xlKSwyJlAmJiIvIj09WmUuY2hhckF0KDApJiYiLyIhPVplLmNoYXJBdCgxKSYmKFplPSJmaWxlOi8vIitaZSk7dmFyIG50PXtUYXJnZXQ6WmV9O3Jl''@;'; put 'put ''dHVybiBOZSYmKG50Lmd1aWQ9TmUpLEJlJiYobnQudGltZT1CZSksUSYmKG50LlRvb2x0aXA9USksbnR9KGQsXy0yNCk7cmV0dXJuW20sVF19fSw0NDE6e246IkxlbCJ9LDQ0Mjp7bjoiQ29kZU5hbWUiLGY6UXR9LDQ0Mzp7bjoiU1hGREJUeXBlIn0sNDQ0OntuOiJQcm90NFJldlBhc3MiLGY6''@;'; put 'put ''aWR9LDQ0NTp7bjoiT2JOb01hY3JvcyJ9LDQ0Njp7bjoiRHYifSw0NDg6e246IkV4Y2VsOUZpbGUiLGY6bXB9LDQ0OTp7bjoiUmVjYWxjSWQiLGY6ZnVuY3Rpb24gYzEoZCl7cmV0dXJuIGQucmVhZF9zaGlmdCgyKSxkLnJlYWRfc2hpZnQoNCl9LHI6Mn0sNDUwOntuOiJFbnRFeFUyIixmOm1w''@;'; put 'put ''fSw1MTI6e246IkRpbWVuc2lvbnMiLGY6blN9LDUxMzp7bjoiQmxhbmsiLGY6YVN9LDUxNTp7bjoiTnVtYmVyIixmOmZ1bmN0aW9uIG9oKGQsXyxtKXttLmJpZmZndWVzcyYmMj09bS5iaWZmJiYobS5iaWZmPTUpO3ZhciBUPVppKGQpLFA9cXMoZCk7cmV0dXJuIFQudmFsPVAsVH19LDUxNjp7''@;'; put 'put ''bjoiTGFiZWwiLGY6ZnVuY3Rpb24gV20oZCxfLG0pe20uYmlmZmd1ZXNzJiYyPT1tLmJpZmYmJihtLmJpZmY9NSk7dmFyIFA9WmkoZCk7Mj09bS5iaWZmJiZkLmwrKzt2YXIgUT1RdChkLDAsbSk7cmV0dXJuIFAudmFsPVEsUH19LDUxNzp7bjoiQm9vbEVyciIsZjppU30sNTE5OntuOiJTdHJp''@;'; put 'put ''bmciLGY6b0h9LDUyMDp7bjoiUm93IixmOmZ1bmN0aW9uIFVlKGQpe3ZhciBfPXt9O18ucj1kLnJlYWRfc2hpZnQoMiksXy5jPWQucmVhZF9zaGlmdCgyKSxfLmNudD1kLnJlYWRfc2hpZnQoMiktXy5jO3ZhciBtPWQucmVhZF9zaGlmdCgyKTtkLmwrPTQ7dmFyIFQ9ZC5yZWFkX3NoaWZ0KDEp''@;'; put 'put ''O2QubCs9MTt2YXIgUD1kLnJlYWRfc2hpZnQoMik7cmV0dXJuIF8uaXhmZT00MDk1JlAsNyZUJiYoXy5sZXZlbD03JlQpLDMyJlQmJihfLmhpZGRlbj0hMCksNjQmVCYmKF8uaHB0PW0vMjApLF99fSw1MjM6e246IkluZGV4In0sNTQ1OntuOiJBcnJheSIsZjpEQX0sNTQ5OntuOiJEZWZhdWx0''@;'; put 'put ''Um93SGVpZ2h0IixmOkRofSw1NjY6e246IlRhYmxlIn0sNTc0OntuOiJXaW5kb3cyIixmOmZ1bmN0aW9uIEo0ZShkLF8sbSl7aWYobSYmbS5iaWZmPj0yJiZtLmJpZmY8NSlyZXR1cm57fTt2YXIgVD1kLnJlYWRfc2hpZnQoMik7cmV0dXJue1JUTDo2NCZULGdyaWQ6ISEoMiZUKSxmcm96ZW46''@;'; put 'put ''ISEoOCZUKX19fSw2Mzg6e246IlJLIixmOmZ1bmN0aW9uIEFBKGQpe3ZhciBfPWQucmVhZF9zaGlmdCgyKSxtPWQucmVhZF9zaGlmdCgyKSxUPVVkKGQpO3JldHVybntyOl8sYzptLGl4ZmU6VFswXSxya251bTpUWzFdfX19LDY1OTp7bjoiU3R5bGUiLGY6ZnVuY3Rpb24gWlAoZCxfLG0pe3Jl''@;'; put 'put ''dHVybiBkLmwrPV8se319fSwxMDQ4OntuOiJCaWdOYW1lIn0sMTA1NDp7bjoiRm9ybWF0IixmOmZ1bmN0aW9uIFdQKGQsXyxtKXtyZXR1cm5bZC5yZWFkX3NoaWZ0KDIpLEVuKGQsMCxtKV19fSwxMDg0OntuOiJDb250aW51ZUJpZ05hbWUifSwxMjEyOntuOiJTaHJGbWxhIixmOmZ1bmN0aW9u''@;'; put 'put ''IHB5KGQsXyxtKXt2YXIgVD1oMChkKTtkLmwrKzt2YXIgUD1kLnJlYWRfc2hpZnQoMSk7cmV0dXJuW25KKGQsXy09OCxtKSxQLFRdfX0sMjA0ODp7bjoiSExpbmtUb29sdGlwIixmOmZ1bmN0aW9uIGVIKGQsXyl7ZC5yZWFkX3NoaWZ0KDIpO3ZhciBtPW9kKGQpLFQ9ZC5yZWFkX3NoaWZ0KChf''@;'; put 'put ''LTEwKS8yLCJkYmNzLWNvbnQiKTtyZXR1cm5bbSxUPVQucmVwbGFjZShELCIiKV19fSwyMDQ5OntuOiJXZWJQdWIifSwyMDUwOntuOiJRc2lTWFRhZyJ9LDIwNTE6e246IkRCUXVlcnlFeHQifSwyMDUyOntuOiJFeHRTdHJpbmcifSwyMDUzOntuOiJUeHRRcnkifSwyMDU0OntuOiJRc2lyIn0s''@;'; put 'put ''MjA1NTp7bjoiUXNpZiJ9LDIwNTY6e246IlJSRFRRU0lGIn0sMjA1Nzp7bjoiQk9GIixmOklofSwyMDU4OntuOiJPbGVEYkNvbm4ifSwyMDU5OntuOiJXT3B0In0sMjA2MDp7bjoiU1hWaWV3RXgifSwyMDYxOntuOiJTWFRIIn0sMjA2Mjp7bjoiU1hQSUV4In0sMjA2Mzp7bjoiU1hWRFRFeCJ9''@;'; put 'put ''LDIwNjQ6e246IlNYVmlld0V4OSJ9LDIwNjY6e246IkNvbnRpbnVlRnJ0In0sMjA2Nzp7bjoiUmVhbFRpbWVEYXRhIn0sMjEyODp7bjoiQ2hhcnRGcnRJbmZvIn0sMjEyOTp7bjoiRnJ0V3JhcHBlciJ9LDIxMzA6e246IlN0YXJ0QmxvY2sifSwyMTMxOntuOiJFbmRCbG9jayJ9LDIxMzI6e246''@;'; put 'put ''IlN0YXJ0T2JqZWN0In0sMjEzMzp7bjoiRW5kT2JqZWN0In0sMjEzNDp7bjoiQ2F0TGFiIn0sMjEzNTp7bjoiWU11bHQifSwyMTM2OntuOiJTWFZpZXdMaW5rIn0sMjEzNzp7bjoiUGl2b3RDaGFydEJpdHMifSwyMTM4OntuOiJGcnRGb250TGlzdCJ9LDIxNDY6e246IlNoZWV0RXh0In0sMjE0''@;'; put 'put ''Nzp7bjoiQm9va0V4dCIscjoxMn0sMjE0ODp7bjoiU1hBZGRsIn0sMjE0OTp7bjoiQ3JFcnIifSwyMTUwOntuOiJIRlBpY3R1cmUifSwyMTUxOntuOiJGZWF0SGRyIixmOm1wfSwyMTUyOntuOiJGZWF0In0sMjE1NDp7bjoiRGF0YUxhYkV4dCJ9LDIxNTU6e246IkRhdGFMYWJFeHRDb250ZW50''@;'; put 'put ''cyJ9LDIxNTY6e246IkNlbGxXYXRjaCJ9LDIxNjE6e246IkZlYXRIZHIxMSJ9LDIxNjI6e246IkZlYXR1cmUxMSJ9LDIxNjQ6e246IkRyb3BEb3duT2JqSWRzIn0sMjE2NTp7bjoiQ29udGludWVGcnQxMSJ9LDIxNjY6e246IkRDb25uIn0sMjE2Nzp7bjoiTGlzdDEyIn0sMjE2ODp7bjoiRmVh''@;'; put 'put ''dHVyZTEyIn0sMjE2OTp7bjoiQ29uZEZtdDEyIn0sMjE3MDp7bjoiQ0YxMiJ9LDIxNzE6e246IkNGRXgifSwyMTcyOntuOiJYRkNSQyIsZjpmdW5jdGlvbiBTWChkKXtkLmwrPTI7dmFyIF89e2N4ZnM6MCxjcmM6MH07cmV0dXJuIF8uY3hmcz1kLnJlYWRfc2hpZnQoMiksXy5jcmM9ZC5yZWFk''@;'; put 'put ''X3NoaWZ0KDQpLF99LHI6MTJ9LDIxNzM6e246IlhGRXh0IixmOmZ1bmN0aW9uIENkKGQsXyl7ZC5sKz0yO3ZhciBUPWQucmVhZF9zaGlmdCgyKTtkLmwrPTI7Zm9yKHZhciBQPWQucmVhZF9zaGlmdCgyKSxRPVtdO1AtLSA+MDspUS5wdXNoKE04KGQpKTtyZXR1cm57aXhmZTpULGV4dDpRfX0s''@;'; put 'put ''cjoxMn0sMjE3NDp7bjoiQXV0b0ZpbHRlcjEyIn0sMjE3NTp7bjoiQ29udGludWVGcnQxMiJ9LDIxODA6e246Ik1EVEluZm8ifSwyMTgxOntuOiJNRFhTdHIifSwyMTgyOntuOiJNRFhUdXBsZSJ9LDIxODM6e246Ik1EWFNldCJ9LDIxODQ6e246Ik1EWFByb3AifSwyMTg1OntuOiJNRFhLUEki''@;'; put 'put ''fSwyMTg2OntuOiJNREIifSwyMTg3OntuOiJQTFYifSwyMTg4OntuOiJDb21wYXQxMiIsZjp4YSxyOjEyfSwyMTg5OntuOiJEWEYifSwyMTkwOntuOiJUYWJsZVN0eWxlcyIscjoxMn0sMjE5MTp7bjoiVGFibGVTdHlsZSJ9LDIxOTI6e246IlRhYmxlU3R5bGVFbGVtZW50In0sMjE5NDp7bjoi''@;'; put 'put ''U3R5bGVFeHQifSwyMTk1OntuOiJOYW1lUHVibGlzaCJ9LDIxOTY6e246Ik5hbWVDbXQiLGY6ZnVuY3Rpb24gb1MoZCxfLG0pe2lmKCEobS5iaWZmPDgpKXt2YXIgVD1kLnJlYWRfc2hpZnQoMiksUD1kLnJlYWRfc2hpZnQoMik7cmV0dXJuW1N0KGQsVCxtKSxTdChkLFAsbSldfWQubCs9X30s''@;'; put 'put ''cjoxMn0sMjE5Nzp7bjoiU29ydERhdGEifSwyMTk4OntuOiJUaGVtZSIsZjpmdW5jdGlvbiB3eShkLF8sbSl7dmFyIFQ9ZC5sK187aWYoMTI0MjI2IT09ZC5yZWFkX3NoaWZ0KDQpKXtpZighbS5jZWxsU3R5bGVzKXJldHVybiB2b2lkKGQubD1UKTt2YXIgc2UsUT1kLnNsaWNlKGQubCk7ZC5s''@;'; put 'put ''PVQ7dHJ5e3NlPXJyKFEse3R5cGU6ImFycmF5In0pfWNhdGNoe3JldHVybn12YXIgb2U9dnIoc2UsInRoZW1lL3RoZW1lL3RoZW1lMS54bWwiLCEwKTtpZihvZSlyZXR1cm4gSTkob2UsbSl9fSxyOjEyfSwyMTk5OntuOiJHVUlEVHlwZUxpYiJ9LDIyMDA6e246IkZuR3JwMTIifSwyMjAxOntu''@;'; put 'put ''OiJOYW1lRm5HcnAxMiJ9LDIyMDI6e246Ik1UUlNldHRpbmdzIixmOmZ1bmN0aW9uIFFQKGQpe3JldHVyblswIT09ZC5yZWFkX3NoaWZ0KDQpLDAhPT1kLnJlYWRfc2hpZnQoNCksZC5yZWFkX3NoaWZ0KDQpXX0scjoxMn0sMjIwMzp7bjoiQ29tcHJlc3NQaWN0dXJlcyIsZjptcH0sMjIwNDp7''@;'; put 'put ''bjoiSGVhZGVyRm9vdGVyIn0sMjIwNTp7bjoiQ3J0TGF5b3V0MTIifSwyMjA2OntuOiJDcnRNbEZydCJ9LDIyMDc6e246IkNydE1sRnJ0Q29udGludWUifSwyMjExOntuOiJGb3JjZUZ1bGxDYWxjdWxhdGlvbiIsZjpmdW5jdGlvbiBpdChkKXt2YXIgXz1mdW5jdGlvbiBqbChkKXt2YXIgXz1k''@;'; put 'put ''LnJlYWRfc2hpZnQoMiksbT1kLnJlYWRfc2hpZnQoMik7cmV0dXJuIGQubCs9OCx7dHlwZTpfLGZsYWdzOm19fShkKTtpZigyMjExIT1fLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEZ1dHVyZSBSZWNvcmQgIitfLnR5cGUpO3JldHVybiAwIT09ZC5yZWFkX3NoaWZ0KDQpfX0sMjIx''@;'; put 'put ''Mjp7bjoiU2hhcGVQcm9wc1N0cmVhbSJ9LDIyMTM6e246IlRleHRQcm9wc1N0cmVhbSJ9LDIyMTQ6e246IlJpY2hUZXh0U3RyZWFtIn0sMjIxNTp7bjoiQ3J0TGF5b3V0MTJBIn0sNDA5Nzp7bjoiVW5pdHMifSw0MDk4OntuOiJDaGFydCJ9LDQwOTk6e246IlNlcmllcyJ9LDQxMDI6e246IkRh''@;'; put 'put ''dGFGb3JtYXQifSw0MTAzOntuOiJMaW5lRm9ybWF0In0sNDEwNTp7bjoiTWFya2VyRm9ybWF0In0sNDEwNjp7bjoiQXJlYUZvcm1hdCJ9LDQxMDc6e246IlBpZUZvcm1hdCJ9LDQxMDg6e246IkF0dGFjaGVkTGFiZWwifSw0MTA5OntuOiJTZXJpZXNUZXh0In0sNDExNjp7bjoiQ2hhcnRGb3Jt''@;'; put 'put ''YXQifSw0MTE3OntuOiJMZWdlbmQifSw0MTE4OntuOiJTZXJpZXNMaXN0In0sNDExOTp7bjoiQmFyIn0sNDEyMDp7bjoiTGluZSJ9LDQxMjE6e246IlBpZSJ9LDQxMjI6e246IkFyZWEifSw0MTIzOntuOiJTY2F0dGVyIn0sNDEyNDp7bjoiQ3J0TGluZSJ9LDQxMjU6e246IkF4aXMifSw0MTI2''@;'; put 'put ''OntuOiJUaWNrIn0sNDEyNzp7bjoiVmFsdWVSYW5nZSJ9LDQxMjg6e246IkNhdFNlclJhbmdlIn0sNDEyOTp7bjoiQXhpc0xpbmUifSw0MTMwOntuOiJDcnRMaW5rIn0sNDEzMjp7bjoiRGVmYXVsdFRleHQifSw0MTMzOntuOiJUZXh0In0sNDEzNDp7bjoiRm9udFgiLGY6aWR9LDQxMzU6e246''@;'; put 'put ''Ik9iamVjdExpbmsifSw0MTQ2OntuOiJGcmFtZSJ9LDQxNDc6e246IkJlZ2luIn0sNDE0ODp7bjoiRW5kIn0sNDE0OTp7bjoiUGxvdEFyZWEifSw0MTU0OntuOiJDaGFydDNkIn0sNDE1Njp7bjoiUGljRiJ9LDQxNTc6e246IkRyb3BCYXIifSw0MTU4OntuOiJSYWRhciJ9LDQxNTk6e246IlN1''@;'; put 'put ''cmYifSw0MTYwOntuOiJSYWRhckFyZWEifSw0MTYxOntuOiJBeGlzUGFyZW50In0sNDE2Mzp7bjoiTGVnZW5kRXhjZXB0aW9uIn0sNDE2NDp7bjoiU2h0UHJvcHMiLGY6ZnVuY3Rpb24gaUgoZCxfLG0pe3ZhciBUPXthcmVhOiExfTtpZig1IT1tLmJpZmYpcmV0dXJuIGQubCs9XyxUO3ZhciBQ''@;'; put 'put ''PWQucmVhZF9zaGlmdCgxKTtyZXR1cm4gZC5sKz0zLDE2JlAmJihULmFyZWE9ITApLFR9fSw0MTY1OntuOiJTZXJUb0NydCJ9LDQxNjY6e246IkF4ZXNVc2VkIn0sNDE2ODp7bjoiU0Jhc2VSZWYifSw0MTcwOntuOiJTZXJQYXJlbnQifSw0MTcxOntuOiJTZXJBdXhUcmVuZCJ9LDQxNzQ6e246''@;'; put 'put ''IklGbXRSZWNvcmQifSw0MTc1OntuOiJQb3MifSw0MTc2OntuOiJBbFJ1bnMifSw0MTc3OntuOiJCUkFJIn0sNDE4Nzp7bjoiU2VyQXV4RXJyQmFyIn0sNDE4ODp7bjoiQ2xydENsaWVudCIsZjpmdW5jdGlvbiB0SChkKXtmb3IodmFyIF89ZC5yZWFkX3NoaWZ0KDIpLG09W107Xy0tID4wOylt''@;'; put 'put ''LnB1c2goSW8oZCkpO3JldHVybiBtfX0sNDE4OTp7bjoiU2VyRm10In0sNDE5MTp7bjoiQ2hhcnQzREJhclNoYXBlIn0sNDE5Mjp7bjoiRmJpIn0sNDE5Mzp7bjoiQm9wUG9wIn0sNDE5NDp7bjoiQXhjRXh0In0sNDE5NTp7bjoiRGF0In0sNDE5Njp7bjoiUGxvdEdyb3d0aCJ9LDQxOTc6e246''@;'; put 'put ''IlNJSW5kZXgifSw0MTk4OntuOiJHZWxGcmFtZSJ9LDQxOTk6e246IkJvcFBvcEN1c3RvbSJ9LDQyMDA6e246IkZiaTIifSwwOntuOiJEaW1lbnNpb25zIixmOm5TfSwxOntuOiJCSUZGMkJMQU5LIn0sMjp7bjoiQklGRjJJTlQiLGY6ZnVuY3Rpb24geFgoZCl7dmFyIF89WmkoZCk7KytkLmw7''@;'; put 'put ''dmFyIG09ZC5yZWFkX3NoaWZ0KDIpO3JldHVybiBfLnQ9Im4iLF8udmFsPW0sX319LDM6e246IkJJRkYyTlVNIixmOmZ1bmN0aW9uIFRYKGQpe3ZhciBfPVppKGQpOysrZC5sO3ZhciBtPXFzKGQpO3JldHVybiBfLnQ9Im4iLF8udmFsPW0sX319LDQ6e246IkJJRkYyU1RSIixmOmZ1bmN0aW9u''@;'; put 'put ''IE1YKGQsXyxtKXttLmJpZmZndWVzcyYmNT09bS5iaWZmJiYobS5iaWZmPTIpO3ZhciBUPVppKGQpOysrZC5sO3ZhciBQPUVuKGQsMCxtKTtyZXR1cm4gVC50PSJzdHIiLFQudmFsPVAsVH19LDU6e246IkJvb2xFcnIiLGY6aVN9LDc6e246IlN0cmluZyIsZjpmdW5jdGlvbiBGQShkKXt2YXIg''@;'; put 'put ''Xz1kLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDA9PT1fPyhkLmwrKywiIik6ZC5yZWFkX3NoaWZ0KF8sInNiY3MtY29udCIpfX0sODp7bjoiQklGRjJST1cifSw5OntuOiJCT0YiLGY6SWh9LDExOntuOiJJbmRleCJ9LDIyOntuOiJFeHRlcm5Db3VudCIsZjppZH0sMzA6e246IkJJRkYyRk9STUFU''@;'; put 'put ''IixmOmdYfSwzMTp7bjoiQklGRjJGTVRDTlQifSwzMjp7bjoiQklGRjJDT0xJTkZPIn0sMzM6e246IkFycmF5IixmOkRBfSwzNjp7bjoiQ09MV0lEVEgifSwzNzp7bjoiRGVmYXVsdFJvd0hlaWdodCIsZjpEaH0sNTA6e246IkJJRkYyRk9OVFhUUkEiLGY6ZnVuY3Rpb24gc0goZCxfKXtkLmwr''@;'; put 'put ''PTYsZC5sKz0yLGQubCs9MSxkLmwrPTMsZC5sKz0xLGQubCs9Xy0xM319LDYyOntuOiJCSUZGMldJTkRPVzIifSw1Mjp7bjoiRERFT2JqTmFtZSJ9LDY3OntuOiJCSUZGMlhGIn0sNjg6e246IkJJRkYyWEZJTkRFWCIsZjppZH0sNjk6e246IkJJRkYyRk9OVENMUiJ9LDg2OntuOiJCSUZGNEZN''@;'; put 'put ''VENOVCJ9LDEyNjp7bjoiUksifSwxMjc6e246IkltRGF0YSIsZjpmdW5jdGlvbiBsNShkKXt2YXIgXz1kLnJlYWRfc2hpZnQoMiksbT1kLnJlYWRfc2hpZnQoMiksVD1kLnJlYWRfc2hpZnQoNCksUD17Zm10Ol8sZW52Om0sbGVuOlQsZGF0YTpkLnNsaWNlKGQubCxkLmwrVCl9O3JldHVybiBk''@;'; put 'put ''LmwrPVQsUH19LDEzNTp7bjoiQWRkaW4ifSwxMzY6e246IkVkZyJ9LDEzNzp7bjoiUHViIn0sMTQ1OntuOiJTdWIifSwxNDg6e246IkxIUmVjb3JkIn0sMTQ5OntuOiJMSE5HcmFwaCJ9LDE1MDp7bjoiU291bmQifSwxNjk6e246IkNvb3JkTGlzdCJ9LDE3MTp7bjoiR0NXIn0sMTg4OntuOiJT''@;'; put 'put ''aHJGbWxhIn0sMTkxOntuOiJUb29sYmFySGRyIn0sMTkyOntuOiJUb29sYmFyRW5kIn0sMTk0OntuOiJBZGRNZW51In0sMTk1OntuOiJEZWxNZW51In0sMjE0OntuOiJSU3RyaW5nIixmOmZ1bmN0aW9uIFptKGQsXyxtKXt2YXIgVD1kLmwrXyxQPVppKGQpLFE9ZC5yZWFkX3NoaWZ0KDIpLHNl''@;'; put 'put ''PVN0KGQsUSxtKTtyZXR1cm4gZC5sPVQsUC50PSJzdHIiLFAudmFsPXNlLFB9fSwyMjM6e246IlVERGVzYyJ9LDIzNDp7bjoiVGFiSWRDb25mIn0sMzU0OntuOiJYTDVNb2RpZnkifSw0MjE6e246IkZpbGVTaGFyaW5nMiJ9LDUxODp7bjoiRm9ybXVsYSIsZjpBa30sNTIxOntuOiJCT0YiLGY6''@;'; put 'put ''SWh9LDUzNjp7bjoiTGJsIixmOktQfSw1NDc6e246IkV4dGVybk5hbWUiLGY6cVB9LDU2MTp7bjoiRm9udCJ9LDU3OTp7bjoiQklGRjNYRiJ9LDEwMzA6e246IkZvcm11bGEiLGY6QWt9LDEwMzM6e246IkJPRiIsZjpJaH0sMTA5MTp7bjoiQklGRjRYRiJ9LDIxNTc6e246IkZlYXRJbmZvIn0s''@;'; put 'put ''MjE2Mzp7bjoiRmVhdEluZm8xMSJ9LDIxNzc6e246IlNYQWRkbDEyIn0sMjI0MDp7bjoiQXV0b1dlYlB1YiJ9LDIyNDE6e246Ikxpc3RPYmoifSwyMjQyOntuOiJMaXN0RmllbGQifSwyMjQzOntuOiJMaXN0RFYifSwyMjQ0OntuOiJMaXN0Q29uZEZtdCJ9LDIyNDU6e246Ikxpc3RDRiJ9LDIy''@;'; put 'put ''NDY6e246IkZNUXJ5In0sMjI0Nzp7bjoiRk1TUXJ5In0sMjI0ODp7bjoiUExWIn0sMjI0OTp7bjoiTG5FeHQifSwyMjUwOntuOiJNa3JFeHQifSwyMjUxOntuOiJDcnRDb29wdCJ9LDIyNjI6e246IkZSVEFyY2hJZCQiLHI6MTJ9LDI5MjgyOnt9fSxqQj1nZShHOSwibiIpO2Z1bmN0aW9uIHpp''@;'; put 'put ''KGQsXyxtLFQpe3ZhciBQPStffHwrakJbX107aWYoIWlzTmFOKFApKXt2YXIgUT1UfHwobXx8W10pLmxlbmd0aHx8MCxzZT1kLm5leHQoNCk7c2Uud3JpdGVfc2hpZnQoMixQKSxzZS53cml0ZV9zaGlmdCgyLFEpLFE+MCYmd28obSkmJmQucHVzaChtKX19ZnVuY3Rpb24gUjUoZCxfLG0pe3Jl''@;'; put 'put ''dHVybiBkfHwoZD1Gcig3KSksZC53cml0ZV9zaGlmdCgyLF8pLGQud3JpdGVfc2hpZnQoMixtKSxkLndyaXRlX3NoaWZ0KDIsMCksZC53cml0ZV9zaGlmdCgxLDApLGR9ZnVuY3Rpb24gVUIoZCxfLG0sVCl7aWYobnVsbCE9Xy52KXN3aXRjaChfLnQpe2Nhc2UiZCI6Y2FzZSJuIjp2YXIgUD0i''@;'; put 'put ''ZCI9PV8udD9LZShsbihfLnYpKTpfLnY7cmV0dXJuIHZvaWQoUD09KDB8UCkmJlA+PTAmJlA8NjU1MzY/emkoZCwyLGZ1bmN0aW9uIEFYKGQsXyxtKXt2YXIgVD1Gcig5KTtyZXR1cm4gUjUoVCxkLF8pLFQud3JpdGVfc2hpZnQoMixtKSxUfShtLFQsUCkpOnppKGQsMyxmdW5jdGlvbiBOQShk''@;'; put 'put ''LF8sbSl7dmFyIFQ9RnIoMTUpO3JldHVybiBSNShULGQsXyksVC53cml0ZV9zaGlmdCg4LG0sImYiKSxUfShtLFQsUCkpKTtjYXNlImIiOmNhc2UiZSI6cmV0dXJuIHZvaWQgemkoZCw1LGZ1bmN0aW9uIG5FKGQsXyxtLFQpe3ZhciBQPUZyKDkpO3JldHVybiBSNShQLGQsXyksbGUobSxUfHwi''@;'; put 'put ''YiIsUCksUH0obSxULF8udixfLnQpKTtjYXNlInMiOmNhc2Uic3RyIjpyZXR1cm4gdm9pZCB6aShkLDQsZnVuY3Rpb24gSzVlKGQsXyxtKXt2YXIgVD1Gcig4KzIqbS5sZW5ndGgpO3JldHVybiBSNShULGQsXyksVC53cml0ZV9zaGlmdCgxLG0ubGVuZ3RoKSxULndyaXRlX3NoaWZ0KG0ubGVu''@;'; put 'put ''Z3RoLG0sInNiY3MiKSxULmw8VC5sZW5ndGg/VC5zbGljZSgwLFQubCk6VH0obSxULChfLnZ8fCIiKS5zbGljZSgwLDI1NSkpKX16aShkLDEsUjUobnVsbCxtLFQpKX1mdW5jdGlvbiBVOChkLF8sbSxULFApe3ZhciBRPTE2K0EyKFAuY2VsbFhmcyxQLmNlbGxTdHlsZVhmcyxfLFApO2lmKG51''@;'; put 'put ''bGwhPV8udnx8Xy5iZilpZihfLmJmKXppKGQsIkZvcm11bGEiLGZ1bmN0aW9uIHJKKGQsXyxtLFQsUCl7dmFyIFE9Z2woXyxtLFApLHNlPWZ1bmN0aW9uIEVWKGQpe2lmKG51bGw9PWQpe3ZhciBfPUZyKDgpO3JldHVybiBfLndyaXRlX3NoaWZ0KDEsMyksXy53cml0ZV9zaGlmdCgxLDApLF8u''@;'; put 'put ''d3JpdGVfc2hpZnQoMiwwKSxfLndyaXRlX3NoaWZ0KDIsMCksXy53cml0ZV9zaGlmdCgyLDY1NTM1KSxffXJldHVybiBKYSgibnVtYmVyIj09dHlwZW9mIGQ/ZDowKX0oZC52KSxvZT1Gcig2KTtvZS53cml0ZV9zaGlmdCgyLDMzKSxvZS53cml0ZV9zaGlmdCg0LDApO2Zvcih2YXIgTGU9RnIo''@;'; put 'put ''ZC5iZi5sZW5ndGgpLE5lPTA7TmU8ZC5iZi5sZW5ndGg7KytOZSlMZVtOZV09ZC5iZltOZV07cmV0dXJuIEcoW1Esc2Usb2UsTGVdKX0oXyxtLFQsMCxRKSk7ZWxzZSBzd2l0Y2goXy50KXtjYXNlImQiOmNhc2UibiI6emkoZCwiTnVtYmVyIixmdW5jdGlvbiBZbShkLF8sbSxUKXt2YXIgUD1G''@;'; put 'put ''cigxNCk7cmV0dXJuIGdsKGQsXyxULFApLEphKG0sUCksUH0obSxULCJkIj09Xy50P0tlKGxuKF8udikpOl8udixRKSk7YnJlYWs7Y2FzZSJiIjpjYXNlImUiOnppKGQsNTE3LGZ1bmN0aW9uIHZYKGQsXyxtLFQsUCxRKXt2YXIgc2U9RnIoOCk7cmV0dXJuIGdsKGQsXyxULHNlKSxsZShtLFEs''@;'; put 'put ''c2UpLHNlfShtLFQsXy52LFEsMCxfLnQpKTticmVhaztjYXNlInMiOmNhc2Uic3RyIjppZihQLmJvb2tTU1Qpe3ZhciBvZT1MayhQLlN0cmluZ3MsXy52LF8uUj9fLnI9TTkoXy5SKTpudWxsLFAucmV2U3RyaW5ncyk7aWYoXy5SKWZvcih2YXIgZGU9MDtkZTxfLlIubGVuZ3RoOysrZGUpXy5S''@;'; put 'put ''W2RlXS5zJiZBMihQLmNlbGxYZnMsUC5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOl8uUltkZV0uc30sUCk7emkoZCwiTGFiZWxTc3QiLGZ1bmN0aW9uIEUyKGQsXyxtLFQpe3ZhciBQPUZyKDEwKTtyZXR1cm4gZ2woZCxfLFQsUCksUC53cml0ZV9zaGlmdCg0LG0pLFB9KG0sVCxvZSxRKSl9''@;'; put 'put ''ZWxzZSB6aShkLCJMYWJlbCIsZnVuY3Rpb24gZlgoZCxfLG0sVCxQKXt2YXIgUT0hUHx8OD09UC5iaWZmLHNlPUZyKCtRKzgrKDErUSkqbS5sZW5ndGgpO3JldHVybiBnbChkLF8sVCxzZSksc2Uud3JpdGVfc2hpZnQoMixtLmxlbmd0aCksUSYmc2Uud3JpdGVfc2hpZnQoMSwxKSxzZS53cml0''@;'; put 'put ''ZV9zaGlmdCgoMStRKSptLmxlbmd0aCxtLFE/InV0ZjE2bGUiOiJzYmNzIiksc2V9KG0sVCwoXy52fHwiIikuc2xpY2UoMCwyNTUpLFEsUCkpO2JyZWFrO2RlZmF1bHQ6emkoZCwiQmxhbmsiLGdsKG0sVCxRKSl9ZWxzZSB6aShkLCJCbGFuayIsZ2wobSxULFEpKX1mdW5jdGlvbiBYNWUoZCxf''@;'; put 'put ''LG0pe3ZhciBOZSxUPU1jKCksUD1tLlNoZWV0TmFtZXNbZF0sUT1tLlNoZWV0c1tQXXx8e30sc2U9KG18fHt9KS5Xb3JrYm9va3x8e30sb2U9KHNlLlNoZWV0c3x8W10pW2RdfHx7fSxkZT1BcnJheS5pc0FycmF5KFEpLExlPTg9PV8uYmlmZixCZT0iIixaZT1bXSxudD15dChRWyIhcmVmIl18''@;'; put 'put ''fCJBMSIpLG10PUxlPzY1NTM2OjE2Mzg0O2lmKG50LmUuYz4yNTV8fG50LmUucj49bXQpe2lmKF8uV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIisoUVsiIXJlZiJdfHwiQTEiKSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOklWMTYzODQiKTtudC5lLmM9TWF0aC5taW4obnQuZS5jLDI1''@;'; put 'put ''NSksbnQuZS5yPU1hdGgubWluKG50LmUuYyxtdC0xKX16aShULDIwNTcsUmcoMCwxNixfKSksemkoVCwiQ2FsY01vZGUiLGQwKDEpKSx6aShULCJDYWxjQ291bnQiLGQwKDEwMCkpLHppKFQsIkNhbGNSZWZNb2RlIixwbCghMCkpLHppKFQsIkNhbGNJdGVyIixwbCghMSkpLHppKFQsIkNhbGNE''@;'; put 'put ''ZWx0YSIsSmEoLjAwMSkpLHppKFQsIkNhbGNTYXZlUmVjYWxjIixwbCghMCkpLHppKFQsIlByaW50Um93Q29sIixwbCghMSkpLHppKFQsIlByaW50R3JpZCIscGwoITEpKSx6aShULCJHcmlkU2V0IixkMCgxKSksemkoVCwiR3V0cyIsZnVuY3Rpb24gJFAoZCl7dmFyIF89RnIoOCk7cmV0dXJu''@;'; put 'put ''IF8ud3JpdGVfc2hpZnQoNCwwKSxfLndyaXRlX3NoaWZ0KDIsZFswXT9kWzBdKzE6MCksXy53cml0ZV9zaGlmdCgyLGRbMV0/ZFsxXSsxOjApLF99KFswLDBdKSksemkoVCwiSENlbnRlciIscGwoITEpKSx6aShULCJWQ2VudGVyIixwbCghMSkpO3ZhciBRZT1RWyIhcHJpbnQiXSYmUVsiIXBy''@;'; put 'put ''aW50Il0ubWFyZ2luc3x8UVsiIW1hcmdpbnMiXTtRZSYmKG51bGwhPVFlLmxlZnQmJnppKFQsIkxlZnRNYXJnaW4iLEphKFFlLmxlZnQpKSxudWxsIT1RZS5yaWdodCYmemkoVCwiUmlnaHRNYXJnaW4iLEphKFFlLnJpZ2h0KSksbnVsbCE9UWUudG9wJiZ6aShULCJUb3BNYXJnaW4iLEphKFFl''@;'; put 'put ''LnRvcCkpLG51bGwhPVFlLmJvdHRvbSYmemkoVCwiQm90dG9tTWFyZ2luIixKYShRZS5ib3R0b20pKSwobnVsbCE9UWUuaGVhZGVyfHxudWxsIT1RZS5mb290ZXIpJiZ6aShULCJTZXR1cCIsZnVuY3Rpb24gckgoZCxfKXt2YXIgbT1GcigzNCksVD0hMSxQPTcwO3JldHVybiJsYW5kc2NhcGUi''@;'; put 'put ''PT0oXy5wcm9wc3x8e30pLm9yaWVudGF0aW9uJiYoVD0hMCxQJj0tNjcpLFQmJihQJj0tNSksbS53cml0ZV9zaGlmdCgyLDEpLG0ud3JpdGVfc2hpZnQoMiwxMDApLG0ud3JpdGVfc2hpZnQoMiwwKSxtLndyaXRlX3NoaWZ0KDIsMCksbS53cml0ZV9zaGlmdCgyLDApLG0ud3JpdGVfc2hpZnQo''@;'; put 'put ''MSxQKSxtLndyaXRlX3NoaWZ0KDEsMCksbS53cml0ZV9zaGlmdCgyLDYwMCksbS53cml0ZV9zaGlmdCgyLDYwMCksSmEobnVsbD09ZC5oZWFkZXI/LjU6ZC5oZWFkZXIsbSksSmEobnVsbD09ZC5mb290ZXI/LjU6ZC5mb290ZXIsbSksbS53cml0ZV9zaGlmdCgyLDEpLG19KFFlLFFbIiFwcmlu''@;'; put 'put ''dCJdfHx7fSkpKSxMZSYmZnVuY3Rpb24gJDkoZCxfLG0pe2lmKF8pe3ZhciBUPTA7Xy5mb3JFYWNoKGZ1bmN0aW9uKFAsUSl7KytUPD0yNTYmJlAmJihQLmF1dG8mJnhWKG0sUCxRKSx6aShkLCJDb2xJbmZvIixmdW5jdGlvbiBuSChkLF8pe3ZhciBtPUZyKDEyKTttLndyaXRlX3NoaWZ0KDIs''@;'; put 'put ''XyksbS53cml0ZV9zaGlmdCgyLF8pLG0ud3JpdGVfc2hpZnQoMiwyNTYqZC53aWR0aCksbS53cml0ZV9zaGlmdCgyLDApO3ZhciBUPTA7cmV0dXJuIGQuaGlkZGVuJiYoVHw9MSksbS53cml0ZV9zaGlmdCgxLFQpLG0ud3JpdGVfc2hpZnQoMSxUPWQubGV2ZWx8fDApLG0ud3JpdGVfc2hpZnQo''@;'; put 'put ''MiwwKSxtfShPayhRLFApLFEpKSl9KX19KFQsUVsiIWNvbHMiXSxRKSx6aShULCJEaW1lbnNpb25zIixmdW5jdGlvbiB4QShkLF8pe3ZhciBtPTghPV8uYmlmZiYmXy5iaWZmPzI6NCxUPUZyKDIqbSs2KTtyZXR1cm4gVC53cml0ZV9zaGlmdChtLGQucy5yKSxULndyaXRlX3NoaWZ0KG0sZC5l''@;'; put 'put ''LnIrMSksVC53cml0ZV9zaGlmdCgyLGQucy5jKSxULndyaXRlX3NoaWZ0KDIsZC5lLmMrMSksVC53cml0ZV9zaGlmdCgyLDApLFR9KG50LF8pKSxMZSYmKFFbIiFsaW5rcyJdPVtdKSxRWyIhcm93cyJdJiZMZSYmUVsiIXJvd3MiXS5mb3JFYWNoKGZ1bmN0aW9uKFZ0LHVuKXtmb3IodmFyIG5y''@;'; put 'put ''PXpvKHVuKSxubj0yNTYsYXI9MCxqbj1WdC5zPzE2K0EyKF8uY2VsbFhmcyxfLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6VnQuc30sXyk6MCxrbj1udC5zLmM7a248PW50LmUuYzsrK2tuKShkZT8oUVt1bl18fFtdKVtrbl06UVtaZVtrbl0rbnJdKSYmKGtuPG5uJiYobm49a24pLGtuPmFy''@;'; put 'put ''JiYoYXI9a24pKTthcjxubiYmKG5uPWFyPTApLHppKFQsIlJvdyIsZnVuY3Rpb24gY3QoZCxfLG0pe3ZhciBUPUZyKDE2KTtULndyaXRlX3NoaWZ0KDIsXyksVC53cml0ZV9zaGlmdCgyLG1bMF0pLFQud3JpdGVfc2hpZnQoMixtWzFdKzEpLFQud3JpdGVfc2hpZnQoMiwyMCpkLmhwdHx8MjAq''@;'; put 'put ''YjgoZC5ocHgpfHwzMzApLFQud3JpdGVfc2hpZnQoNCwwKTt2YXIgUD0wO3JldHVybiBQfD0wfGQubGV2ZWwsZC5oaWRkZW4mJihQfD0zMiksUHw9NjQsbVsyXSYmKFB8PTEyOCksVC53cml0ZV9zaGlmdCgxLFApLFQud3JpdGVfc2hpZnQoMSwxKSxULndyaXRlX3NoaWZ0KDIsbVsyXXx8MCks''@;'; put 'put ''VH0oVnQsdW4sW25uLGFyLGpuXSkpfSk7Zm9yKHZhciBmdD1udC5zLnI7ZnQ8PW50LmUucjsrK2Z0KXtCZT16byhmdCk7Zm9yKHZhciBrdD1udC5zLmM7a3Q8PW50LmUuYzsrK2t0KXtmdD09PW50LnMuciYmKFplW2t0XT1tcyhrdCkpLE5lPVplW2t0XStCZTt2YXIgYnQ9ZGU/KFFbZnRdfHxb''@;'; put 'put ''XSlba3RdOlFbTmVdO2J0JiYoVTgoVCxidCxmdCxrdCxfKSxMZSYmYnQubCYmUVsiIWxpbmtzIl0ucHVzaChbTmUsYnQubF0pKX19dmFyIEV0PW9lLkNvZGVOYW1lfHxvZS5uYW1lfHxQO3JldHVybihMZXx8NT09Xy5iaWZmJiZRWyIhZnJlZXplIl0pJiZ6aShULCJXaW5kb3cyIixmdW5jdGlv''@;'; put 'put ''biBqUChkLF8sbSxUKXt2YXIgUD1UJiZULmJpZmZ8fDgsUT1Gcig4PT1QPzE4OjEwKSxzZT0xNzE4O3JldHVybiBtPjAmJihzZSY9LTUxMyksX24oX1siIWdyaWRsaW5lcyJdKSYmKHNlJj0tMyksX1siIWZyZWV6ZSJdJiYoc2V8PTgpLGQmJmQuUlRMJiYoc2V8PTY0KSw1PT1QJiYoc2U9NDQ2''@;'; put 'put ''KSxRLndyaXRlX3NoaWZ0KDIsc2UpLDg9PVA/KFEud3JpdGVfc2hpZnQoNCwwKSxRLndyaXRlX3NoaWZ0KDQsNjQpLFEud3JpdGVfc2hpZnQoNCwwKSxRLndyaXRlX3NoaWZ0KDQsMCkpOihRLndyaXRlX3NoaWZ0KDQsMCksUS53cml0ZV9zaGlmdCg0LDApKSxRfSgoc2UuVmlld3N8fFtdKVsw''@;'; put 'put ''XSxRLGQpKSwoTGV8fDU9PV8uYmlmZikmJlFbIiFmcmVlemUiXSYmemkoVCwiUGFuZSIsZnVuY3Rpb24gdFMoZCl7InN0cmluZyI9PXR5cGVvZiBkJiYoZD1JcyhkKSk7dmFyIF89RnIoMTApO3JldHVybiBfLndyaXRlX3NoaWZ0KDIsZC5jKSxfLndyaXRlX3NoaWZ0KDIsZC5yKSxfLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsZC5yKSxfLndyaXRlX3NoaWZ0KDIsZC5jKSxfLndyaXRlX3NoaWZ0KDEsMyksXy53cml0ZV9zaGlmdCgxLDApLF99KFFbIiFmcmVlemUiXSkpLExlJiZRWyIhc2VsIl0mJnppKFQsIlNlbGVjdGlvbiIsZnVuY3Rpb24gYUgoZCxfKXt2YXIgbT1GcigxNSksVD1kLmNlbGw7aWYo''@;'; put 'put ''IVQpe2lmKCFkLnJhbmdlKXRocm93IG5ldyBFcnJvcigiTXVzdCBzcGVjaWZ5IGEgc2VsZWN0aW9uIGNlbGwgb3IgcmFuZ2UiKTtUPXFpKHphKGQucmFuZ2UucmVwbGFjZSgvXHMuKiQvLCIiKSkucyl9dmFyIFA9InN0cmluZyI9PXR5cGVvZiBUP0lzKFQpOlQ7aWYoXyl7dmFyIFE9InN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBfP0lzKF8pOl87bS53cml0ZV9zaGlmdCgxLFAucj49US5yJiZQLmM+PVEuYz8wOlAucj49US5yJiZQLmM8US5jPzI6UC5yPFEuciYmUC5jPj1RLmM/MTozKX1lbHNlIG0ud3JpdGVfc2hpZnQoMSwzKTtyZXR1cm4gbS53cml0ZV9zaGlmdCgyLFAuciksbS53cml0ZV9zaGlm''@;'; put 'put ''dCgyLFAuYyksbS53cml0ZV9zaGlmdCgyLDApLG0ud3JpdGVfc2hpZnQoMiwxKSxmdW5jdGlvbiBTMihkLF8pe198fChfPUZyKDYpKSxfLndyaXRlX3NoaWZ0KDIsZC5zP2Qucy5yOmQuciksXy53cml0ZV9zaGlmdCgyLGQuZT9kLmUucjpkLnIpLF8ud3JpdGVfc2hpZnQoMSxkLnM/ZC5zLmM6''@;'; put 'put ''ZC5jKSxfLndyaXRlX3NoaWZ0KDEsZC5lP2QuZS5jOmQuYyl9KHtzOlAsZTpQfSxtKSxtfShRWyIhc2VsIl0sUVsiIWZyZWV6ZSJdKSksTGUmJihRWyIhbWVyZ2VzIl18fFtdKS5sZW5ndGgmJnppKFQsIk1lcmdlQ2VsbHMiLGZ1bmN0aW9uIEpQKGQpe3ZhciBfPUZyKDIrOCpkLmxlbmd0aCk7''@;'; put 'put ''Xy53cml0ZV9zaGlmdCgyLGQubGVuZ3RoKTtmb3IodmFyIG09MDttPGQubGVuZ3RoOysrbSlaYyhkW21dLF8pO3JldHVybiBffShRWyIhbWVyZ2VzIl0pKSxMZSYmZnVuY3Rpb24gVWVlKGQsXyl7Zm9yKHZhciBtPTA7bTxfWyIhbGlua3MiXS5sZW5ndGg7KyttKXt2YXIgVD1fWyIhbGlua3Mi''@;'; put 'put ''XVttXTt6aShkLCJITGluayIsZTVlKFQpKSxUWzFdLlRvb2x0aXAmJnppKGQsIkhMaW5rVG9vbHRpcCIsdDVlKFQpKX1kZWxldGUgX1siIWxpbmtzIl19KFQsUSksemkoVCwiQ29kZU5hbWUiLGNyKEV0KSksTGUmJmZ1bmN0aW9uIGplZShkLF8pe3ZhciBtPUZyKDE5KTttLndyaXRlX3NoaWZ0''@;'; put 'put ''KDQsMjE1MSksbS53cml0ZV9zaGlmdCg0LDApLG0ud3JpdGVfc2hpZnQoNCwwKSxtLndyaXRlX3NoaWZ0KDIsMyksbS53cml0ZV9zaGlmdCgxLDEpLG0ud3JpdGVfc2hpZnQoNCwwKSx6aShkLCJGZWF0SGRyIixtKSwobT1GcigzOSkpLndyaXRlX3NoaWZ0KDQsMjE1MiksbS53cml0ZV9zaGlm''@;'; put 'put ''dCg0LDApLG0ud3JpdGVfc2hpZnQoNCwwKSxtLndyaXRlX3NoaWZ0KDIsMyksbS53cml0ZV9zaGlmdCgxLDApLG0ud3JpdGVfc2hpZnQoNCwwKSxtLndyaXRlX3NoaWZ0KDIsMSksbS53cml0ZV9zaGlmdCg0LDQpLG0ud3JpdGVfc2hpZnQoMiwwKSxaYyh5dChfWyIhcmVmIl18fCJBMSIpLG0p''@;'; put 'put ''LG0ud3JpdGVfc2hpZnQoNCw0KSx6aShkLCJGZWF0IixtKX0oVCxRKSx6aShULCJFT0YiKSxULmVuZCgpfWZ1bmN0aW9uIFE1ZShkLF8sbSl7dmFyIFQ9TWMoKSxQPShkfHx7fSkuV29ya2Jvb2t8fHt9LFE9UC5TaGVldHN8fFtdLHNlPVAuV0JQcm9wc3x8e30sb2U9OD09bS5iaWZmLGRlPTU9''@;'; put 'put ''PW0uYmlmZjt6aShULDIwNTcsUmcoMCw1LG0pKSwieGxhIj09bS5ib29rVHlwZSYmemkoVCwiQWRkaW4iKSx6aShULCJJbnRlcmZhY2VIZHIiLG9lP2QwKDEyMDApOm51bGwpLHppKFQsIk1tcyIsZnVuY3Rpb24gYTUoZCxfKXtffHwoXz1GcihkKSk7Zm9yKHZhciBtPTA7bTxkOysrbSlfLndy''@;'; put 'put ''aXRlX3NoaWZ0KDEsMCk7cmV0dXJuIF99KDIpKSxkZSYmemkoVCwiVG9vbGJhckhkciIpLGRlJiZ6aShULCJUb29sYmFyRW5kIiksemkoVCwiSW50ZXJmYWNlRW5kIiksemkoVCwiV3JpdGVBY2Nlc3MiLGZ1bmN0aW9uIFAwKGQsXyl7dmFyIG09IV98fDg9PV8uYmlmZixUPUZyKG0/MTEyOjU0''@;'; put 'put ''KTtmb3IoVC53cml0ZV9zaGlmdCg4PT1fLmJpZmY/MjoxLDcpLG0mJlQud3JpdGVfc2hpZnQoMSwwKSxULndyaXRlX3NoaWZ0KDQsODU5MDA3MDU5KSxULndyaXRlX3NoaWZ0KDQsNTQ1ODU0OHwobT8wOjUzNjg3MDkxMikpO1QubDxULmxlbmd0aDspVC53cml0ZV9zaGlmdCgxLG0/MDozMik7''@;'; put 'put ''cmV0dXJuIFR9KDAsbSkpLHppKFQsIkNvZGVQYWdlIixkMChvZT8xMjAwOjEyNTIpKSxvZSYmemkoVCwiRFNGIixkMCgwKSksb2UmJnppKFQsIkV4Y2VsOUZpbGUiKSx6aShULCJSUlRhYklkIixmdW5jdGlvbiBzNShkKXtmb3IodmFyIF89RnIoMipkKSxtPTA7bTxkOysrbSlfLndyaXRlX3No''@;'; put 'put ''aWZ0KDIsbSsxKTtyZXR1cm4gX30oZC5TaGVldE5hbWVzLmxlbmd0aCkpLG9lJiZkLnZiYXJhdyYmemkoVCwiT2JQcm9qIiksb2UmJmQudmJhcmF3JiZ6aShULCJDb2RlTmFtZSIsY3Ioc2UuQ29kZU5hbWV8fCJUaGlzV29ya2Jvb2siKSksemkoVCwiQnVpbHRJbkZuR3JvdXBDb3VudCIsZDAo''@;'; put 'put ''MTcpKSx6aShULCJXaW5Qcm90ZWN0IixwbCghMSkpLHppKFQsIlByb3RlY3QiLHBsKCExKSksemkoVCwiUGFzc3dvcmQiLGQwKDApKSxvZSYmemkoVCwiUHJvdDRSZXYiLHBsKCExKSksb2UmJnppKFQsIlByb3Q0UmV2UGFzcyIsZDAoMCkpLHppKFQsIldpbmRvdzEiLGZ1bmN0aW9uIFE0ZSgp''@;'; put 'put ''e3ZhciBkPUZyKDE4KTtyZXR1cm4gZC53cml0ZV9zaGlmdCgyLDApLGQud3JpdGVfc2hpZnQoMiwwKSxkLndyaXRlX3NoaWZ0KDIsMjkyODApLGQud3JpdGVfc2hpZnQoMiwxNzYwMCksZC53cml0ZV9zaGlmdCgyLDU2KSxkLndyaXRlX3NoaWZ0KDIsMCksZC53cml0ZV9zaGlmdCgyLDApLGQu''@;'; put 'put ''d3JpdGVfc2hpZnQoMiwxKSxkLndyaXRlX3NoaWZ0KDIsNTAwKSxkfSgpKSx6aShULCJCYWNrdXAiLHBsKCExKSksemkoVCwiSGlkZU9iaiIsZDAoMCkpLHppKFQsIkRhdGUxOTA0IixwbCgidHJ1ZSI9PWZ1bmN0aW9uIHdCKGQpe3JldHVybiBkLldvcmtib29rJiZkLldvcmtib29rLldCUHJv''@;'; put 'put ''cHMmJlRpKGQuV29ya2Jvb2suV0JQcm9wcy5kYXRlMTkwNCk/InRydWUiOiJmYWxzZSJ9KGQpKSksemkoVCwiQ2FsY1ByZWNpc2lvbiIscGwoITApKSxvZSYmemkoVCwiUmVmcmVzaEFsbCIscGwoITEpKSx6aShULCJCb29rQm9vbCIsZDAoMCkpLHdkPVNnKFswLDE2Nzc3MjE1LDE2NzExNjgw''@;'; put 'put ''LDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNSwwLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNV0pLGZ1bmN0aW9uIFZlZShkLF8sbSl7KCgoX3x8e30pLlN0eWxlc3x8e30pLkZvbnRzfHxbe3N6OjEyLGNvbG9yOnt0aGVtZToxfSxu''@;'; put 'put ''YW1lOiJBcmlhbCIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSkuZm9yRWFjaChmdW5jdGlvbihUKXt6aShkLCJGb250IixmdW5jdGlvbiB6bShkLF8pe3ZhciBtPWQubmFtZXx8IkFyaWFsIixUPV8mJjU9PV8uYmlmZixRPUZyKFQ/MTUrbS5sZW5ndGg6MTYrMiptLmxlbmd0aCk7US53cml0''@;'; put 'put ''ZV9zaGlmdCgyLDIwKihkLnN6fHwxMikpO3ZhciBzZT0wO3JldHVybiBkLmJvbGQmJihzZXw9MSksZC5pdGFsaWMmJihzZXw9MiksZC5zdHJpa2UmJihzZXw9OCksZC5zaGFkb3cmJihzZXw9MzIpLFEud3JpdGVfc2hpZnQoMSxzZSksUS53cml0ZV9zaGlmdCgxLDApLFEud3JpdGVfc2hpZnQo''@;'; put 'put ''MixkLmNvbG9yP01TKGQuY29sb3IsNjQpOjY0KSxRLndyaXRlX3NoaWZ0KDIsZC5ib2xkPzcwMDo0MDApLFEud3JpdGVfc2hpZnQoMiwic3VwZXIiPT1kLnZhbGlnbj8xOiJzdWIiPT1kLnZhbGlnbj8yOjApLFEud3JpdGVfc2hpZnQoMSxkLnVuZGVybGluZXx8MCksUS53cml0ZV9zaGlmdCgx''@;'; put 'put ''LFEuZmFtaWx5fHwwKSxRLndyaXRlX3NoaWZ0KDEsUS5jaGFyc2V0fHwwKSxRLndyaXRlX3NoaWZ0KDEsMCksUS53cml0ZV9zaGlmdCgxLG0ubGVuZ3RoKSxUfHxRLndyaXRlX3NoaWZ0KDEsMSksUS53cml0ZV9zaGlmdCgoVD8xOjIpKm0ubGVuZ3RoLG0sVD8ic2JjcyI6InV0ZjE2bGUiKSxR''@;'; put 'put ''fShULG0pKX0pfShULGQsbSksZnVuY3Rpb24gQmVlKGQsXyxtKXtfJiZbWzUsOF0sWzIzLDI2XSxbNDEsNDRdLFs1MCwzOTJdXS5mb3JFYWNoKGZ1bmN0aW9uKFQpe2Zvcih2YXIgUD1UWzBdO1A8PVRbMV07KytQKW51bGwhPV9bUF0mJnppKGQsIkZvcm1hdCIscFgoUCxfW1BdLG0pKX0pfShU''@;'; put 'put ''LGQuU1NGLG0pLGZ1bmN0aW9uIGlFKGQsXyl7Zm9yKHZhciBtPTA7bTwxNjsrK20pemkoZCwiWEYiLFJBKHtudW1GbXRJZDowLHN0eWxlOiEwfSwwLF8pKTtfLmNlbGxYZnMuZm9yRWFjaChmdW5jdGlvbihUKXt6aShkLCJYRiIsUkEoVCwwLF8pKX0pfShULG0pLHppKFQsIlBhbGV0dGUiLGZ1''@;'; put 'put ''bmN0aW9uIE9BKGQpe3ZhciBfPUZyKDIyNik7Xy53cml0ZV9zaGlmdCgyLDU2KTtmb3IodmFyIG09MDttPDU2OysrbSl7dmFyIFQ9ZFttKzhdfHxIbVttKzhdO18ud3JpdGVfc2hpZnQoMSxUWzBdKSxfLndyaXRlX3NoaWZ0KDEsVFsxXSksXy53cml0ZV9zaGlmdCgxLFRbMl0pLF8ud3JpdGVf''@;'; put 'put ''c2hpZnQoMSwwKX1yZXR1cm4gX30od2QpKSx3ZD1RcihIbSksb2UmJnppKFQsIlVzZXNFTEZzIixwbCghMSkpO3ZhciBOZT1ULmVuZCgpLEJlPU1jKCk7b2UmJnppKEJlLCJDb3VudHJ5IixmdW5jdGlvbiBMQShkKXtyZXR1cm4gZHx8KGQ9RnIoNCkpLGQud3JpdGVfc2hpZnQoMiwxKSxkLndy''@;'; put 'put ''aXRlX3NoaWZ0KDIsMSksZH0oKSksb2UmJm0uU3RyaW5ncyYmZnVuY3Rpb24gSGVlKGQsXyxtLFQpe3ZhciBQPVR8fChtfHxbXSkubGVuZ3RofHwwO2lmKFA8PTgyMjQpcmV0dXJuIHppKGQsXyxtLFApO3ZhciBRPStffHwrakJbX107aWYoIWlzTmFOKFEpKXtmb3IodmFyIHNlPW0ucGFydHN8''@;'; put 'put ''fFtdLG9lPTAsZGU9MCxMZT0wO0xlKyhzZVtvZV18fDgyMjQpPD04MjI0OylMZSs9c2Vbb2VdfHw4MjI0LG9lKys7dmFyIE5lPWQubmV4dCg0KTtmb3IoTmUud3JpdGVfc2hpZnQoMixRKSxOZS53cml0ZV9zaGlmdCgyLExlKSxkLnB1c2gobS5zbGljZShkZSxkZStMZSkpLGRlKz1MZTtkZTxQ''@;'; put 'put ''Oyl7Zm9yKChOZT1kLm5leHQoNCkpLndyaXRlX3NoaWZ0KDIsNjApLExlPTA7TGUrKHNlW29lXXx8ODIyNCk8PTgyMjQ7KUxlKz1zZVtvZV18fDgyMjQsb2UrKztOZS53cml0ZV9zaGlmdCgyLExlKSxkLnB1c2gobS5zbGljZShkZSxkZStMZSkpLGRlKz1MZX19fShCZSwiU1NUIixmdW5jdGlv''@;'; put 'put ''biBIcyhkLF8pe3ZhciBtPUZyKDgpO20ud3JpdGVfc2hpZnQoNCxkLkNvdW50KSxtLndyaXRlX3NoaWZ0KDQsZC5VbmlxdWUpO2Zvcih2YXIgVD1bXSxQPTA7UDxkLmxlbmd0aDsrK1ApVFtQXT0kZShkW1BdLF8pO3ZhciBRPUcoW21dLmNvbmNhdChUKSk7cmV0dXJuIFEucGFydHM9W20ubGVu''@;'; put 'put ''Z3RoXS5jb25jYXQoVC5tYXAoZnVuY3Rpb24oc2Upe3JldHVybiBzZS5sZW5ndGh9KSksUX0obS5TdHJpbmdzLG0pKSx6aShCZSwiRU9GIik7dmFyIFplPUJlLmVuZCgpLG50PU1jKCksbXQ9MCxRZT0wO2ZvcihRZT0wO1FlPGQuU2hlZXROYW1lcy5sZW5ndGg7KytRZSltdCs9KG9lPzEyOjEx''@;'; put 'put ''KSsob2U/MjoxKSpkLlNoZWV0TmFtZXNbUWVdLmxlbmd0aDt2YXIgZnQ9TmUubGVuZ3RoK210K1plLmxlbmd0aDtmb3IoUWU9MDtRZTxkLlNoZWV0TmFtZXMubGVuZ3RoOysrUWUpemkobnQsIkJvdW5kU2hlZXQ4Iix2cCh7cG9zOmZ0LGhzOihRW1FlXXx8e30pLkhpZGRlbnx8MCxkdDowLG5h''@;'; put 'put ''bWU6ZC5TaGVldE5hbWVzW1FlXX0sbSkpLGZ0Kz1fW1FlXS5sZW5ndGg7dmFyIGJ0PW50LmVuZCgpO2lmKG10IT1idC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJCUzggIittdCsiICE9ICIrYnQubGVuZ3RoKTt2YXIgRXQ9W107cmV0dXJuIE5lLmxlbmd0aCYmRXQucHVzaChOZSksYnQubGVu''@;'; put 'put ''Z3RoJiZFdC5wdXNoKGJ0KSxaZS5sZW5ndGgmJkV0LnB1c2goWmUpLG5oKFtFdF0pfWZ1bmN0aW9uIHpCKGQsXyl7dmFyIG09X3x8e307c3dpdGNoKG0uYmlmZnx8Mil7Y2FzZSA4OmNhc2UgNTpyZXR1cm4gZnVuY3Rpb24genkoZCxfKXt2YXIgbT1ffHx7fSxUPVtdO2dTKF8mJl8uUFBJfHw5''@;'; put 'put ''NiksZCYmIWQuU1NGJiYoZC5TU0Y9SS5nZXRfdGFibGUoKSksZCYmZC5TU0YmJih1ZShJKSxJLmxvYWRfdGFibGUoZC5TU0YpLG0ucmV2c3NmPWhlKGQuU1NGKSxtLnJldnNzZltkLlNTRls2NTUzNV1dPTAsbS5zc2Y9ZC5TU0YpLGQuU3R5bGVzPXtGb250czptLkZvbnRzPVt7c3o6MTIsY29s''@;'; put 'put ''b3I6e3RoZW1lOjEscmdiOiIwMDAwMDAifSxuYW1lOiJDYWxpYnJpIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dLEZpbGxzOm0uRmlsbHM9W3twYXR0ZXJuVHlwZToibm9uZSJ9LHtwYXR0ZXJuVHlwZToiZ3JheTEyNSJ9XSxCb3JkZXJzOm0uQm9yZGVycz1be31dLERYRjptLkRYRj1kLlN0''@;'; put 'put ''eWxlcyYmZC5TdHlsZXMuRFhGfHxbXX0sJG0obS5Gb250c1swXSksbS5TdHJpbmdzPVtdLG0uU3RyaW5ncy5Db3VudD0wLG0uU3RyaW5ncy5VbmlxdWU9MCxNNT9tLnJldlN0cmluZ3M9bmV3IE1hcDoobS5yZXZTdHJpbmdzPXt9LG0ucmV2U3RyaW5ncy5mb289W10sZGVsZXRlIG0ucmV2U3Ry''@;'; put 'put ''aW5ncy5mb28pLEplZShtKSxtLmNlbGxYZnM9W10sbS5jZWxsU3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0sQTIobS5jZWxsWGZzLG0uY2VsbFN0eWxlWGZzLHt9LHtyZXZzc2Y6e0dlbmVyYWw6MH19KSxkLlByb3BzfHwoZC5Qcm9wcz17fSk7Zm9yKHZhciBQPTA7UDxkLlNoZWV0TmFtZXMu''@;'; put 'put ''bGVuZ3RoOysrUClUW1QubGVuZ3RoXT1YNWUoUCxtLGQpO3JldHVybiBULnVuc2hpZnQoUTVlKGQsVCxtKSksbmgoW1RdKX0oZCxfKTtjYXNlIDQ6Y2FzZSAzOmNhc2UgMjpyZXR1cm4gZnVuY3Rpb24gckUoZCxfKXtmb3IodmFyIG09X3x8e30sVD1NYygpLFA9MCxRPTA7UTxkLlNoZWV0TmFt''@;'; put 'put ''ZXMubGVuZ3RoOysrUSlkLlNoZWV0TmFtZXNbUV09PW0uc2hlZXQmJihQPVEpO2lmKDA9PVAmJm0uc2hlZXQmJmQuU2hlZXROYW1lc1swXSE9bS5zaGVldCl0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5vdCBmb3VuZDogIittLnNoZWV0KTtyZXR1cm4gemkoVCw0PT1tLmJpZmY/MTAzMzozPT1t''@;'; put 'put ''LmJpZmY/NTIxOjksUmcoMCwxNixtKSksZnVuY3Rpb24gQ1IoZCxfLG0sVCl7dmFyIHNlLFA9QXJyYXkuaXNBcnJheShfKSxRPXl0KF9bIiFyZWYiXXx8IkExIiksb2U9IiIsZGU9W107aWYoUS5lLmM+MjU1fHxRLmUucj4xNjM4Myl7aWYoVC5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAi''@;'; put 'put ''KyhfWyIhcmVmIl18fCJBMSIpKyIgZXhjZWVkcyBmb3JtYXQgbGltaXQgQTE6SVYxNjM4NCIpO1EuZS5jPU1hdGgubWluKFEuZS5jLDI1NSksUS5lLnI9TWF0aC5taW4oUS5lLmMsMTYzODMpLHNlPWh0KFEpfWZvcih2YXIgTGU9US5zLnI7TGU8PVEuZS5yOysrTGUpe29lPXpvKExlKTtmb3Io''@;'; put 'put ''dmFyIE5lPVEucy5jO05lPD1RLmUuYzsrK05lKXtMZT09PVEucy5yJiYoZGVbTmVdPW1zKE5lKSksc2U9ZGVbTmVdK29lO3ZhciBCZT1QPyhfW0xlXXx8W10pW05lXTpfW3NlXTtCZSYmVUIoZCxCZSxMZSxOZSl9fX0oVCxkLlNoZWV0c1tkLlNoZWV0TmFtZXNbUF1dLDAsbSksemkoVCwxMCks''@;'; put 'put ''VC5lbmQoKX0oZCxfKX10aHJvdyBuZXcgRXJyb3IoImludmFsaWQgdHlwZSAiK20uYm9va1R5cGUrIiBmb3IgQklGRiIpfXZhciBrZj1mdW5jdGlvbigpe3ZhciBkPXtjZW50ZXJDb250aW51b3VzOiJjZW50ZXIiLGp1c3RpZnk6ImxlZnQifTtmdW5jdGlvbiBtKEJlLFplKXt2YXIgbnQ9WmV8''@;'; put 'put ''fHt9LG10PW50LmRlbnNlP1tdOnt9LFFlPShCZT1CZS5yZXBsYWNlKC88IS0tLio/LS0+L2csIiIpKS5tYXRjaCgvPHRhYmxlL2kpO2lmKCFRZSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgSFRNTDogY291bGQgbm90IGZpbmQgPHRhYmxlPiIpO3ZhciBmdD1CZS5tYXRjaCgvPFwvdGFibGUv''@;'; put 'put ''aSksa3Q9UWUuaW5kZXgsYnQ9ZnQmJmZ0LmluZGV4fHxCZS5sZW5ndGgsRXQ9ZnVuY3Rpb24gVHQoZCxfLG0pe2lmKHhyfHwic3RyaW5nIj09dHlwZW9mIF8pcmV0dXJuIGQuc3BsaXQoXyk7Zm9yKHZhciBUPWQuc3BsaXQoXyksUD1bVFswXV0sUT0xO1E8VC5sZW5ndGg7KytRKVAucHVzaCht''@;'; put 'put ''KSxQLnB1c2goVFtRXSk7cmV0dXJuIFB9KEJlLnNsaWNlKGt0LGJ0KSwvKDo/PHRyW14+XSo+KS9pLCI8dHI+IiksVnQ9LTEsdW49MCxucj0wLG5uPTAsYXI9e3M6e3I6MWU3LGM6MWU3fSxlOntyOjAsYzowfX0sam49W107Zm9yKGt0PTA7a3Q8RXQubGVuZ3RoOysra3Qpe3ZhciBrbj1FdFtr''@;'; put 'put ''dF0udHJpbSgpLHNyPWtuLnNsaWNlKDAsMykudG9Mb3dlckNhc2UoKTtpZigiPHRyIiE9c3Ipe2lmKCI8dGQiPT1zcnx8Ijx0aCI9PXNyKXt2YXIgZ3I9a24uc3BsaXQoLzxcL3RbZGhdPi9pKTtmb3IoYnQ9MDtidDxnci5sZW5ndGg7KytidCl7dmFyIHFuPWdyW2J0XS50cmltKCk7aWYocW4u''@;'; put 'put ''bWF0Y2goLzx0W2RoXS9pKSl7Zm9yKHZhciBfaT1xbixPaT0wOyI8Ij09X2kuY2hhckF0KDApJiYoT2k9X2kuaW5kZXhPZigiPiIpKT4tMTspX2k9X2kuc2xpY2UoT2krMSk7Zm9yKHZhciBzbz0wO3NvPGpuLmxlbmd0aDsrK3NvKXt2YXIgbW89am5bc29dO21vLnMuYz09dW4mJm1vLnMucjxW''@;'; put 'put ''dCYmVnQ8PW1vLmUuciYmKHVuPW1vLmUuYysxLHNvPS0xKX12YXIgTGk9WHIocW4uc2xpY2UoMCxxbi5pbmRleE9mKCI+IikpKTtubj1MaS5jb2xzcGFuPytMaS5jb2xzcGFuOjEsKChucj0rTGkucm93c3Bhbik+MXx8bm4+MSkmJmpuLnB1c2goe3M6e3I6VnQsYzp1bn0sZTp7cjpWdCsobnJ8''@;'; put 'put ''fDEpLTEsYzp1bitubi0xfX0pO3ZhciBrcj1MaS50fHxMaVsiZGF0YS10Il18fCIiO2lmKCFfaS5sZW5ndGgpe3VuKz1ubjtjb250aW51ZX1pZihfaT1VcyhfaSksYXIucy5yPlZ0JiYoYXIucy5yPVZ0KSxhci5lLnI8VnQmJihhci5lLnI9VnQpLGFyLnMuYz51biYmKGFyLnMuYz11biksYXIu''@;'; put 'put ''ZS5jPHVuJiYoYXIuZS5jPXVuKSxfaS5sZW5ndGgpe3ZhciBEbj17dDoicyIsdjpfaX07bnQucmF3fHwhX2kudHJpbSgpLmxlbmd0aHx8InMiPT1rcnx8KERuPVNuKF9pLG50KSksbnQuZGVuc2U/KG10W1Z0XXx8KG10W1Z0XT1bXSksbXRbVnRdW3VuXT1Ebik6bXRbcWkoe3I6VnQsYzp1bn0p''@;'; put 'put ''XT1Ebix1bis9bm59fX19fWVsc2V7aWYoKytWdCxudC5zaGVldFJvd3MmJm50LnNoZWV0Um93czw9VnQpey0tVnQ7YnJlYWt9dW49MH19cmV0dXJuIG10WyIhcmVmIl09aHQoYXIpLGpuLmxlbmd0aCYmKG10WyIhbWVyZ2VzIl09am4pLG10fWZ1bmN0aW9uIFAoQmUsWmUsbnQsbXQsUWUsZnQp''@;'; put 'put ''e3ZhciBFdCxrdD1CZVsiIW1lcmdlcyJdfHxbXSxidD1bXSxWdD17c3R5bGU6W119LHVuPSExO2Z1bmN0aW9uIG5yKHVvLE1zLGRhKXt2YXIgJGE9IiIsU2E9MDtpZihFdFt1b10pc3dpdGNoKEV0W3VvXS5zdHlsZSl7Y2FzZSJ0aGluIjpjYXNlImhhaXIiOiRhPSJzb2xpZCIsU2E9MTticmVh''@;'; put 'put ''aztjYXNlIm1lZGl1bSI6JGE9InNvbGlkIixTYT0yO2JyZWFrO2Nhc2UidGhpY2siOiRhPSJzb2xpZCIsU2E9MzticmVhaztjYXNlImRvdWJsZSI6JGE9ImRvdWJsZSIsU2E9MzticmVhaztjYXNlImRvdHRlZCI6Y2FzZSJkYXNoRG90RG90IjokYT0iZG90dGVkIixTYT0xO2JyZWFrO2Nhc2Ui''@;'; put 'put ''bWVkaXVtRGFzaERvdERvdCI6JGE9ImRvdHRlZCIsU2E9MjticmVhaztjYXNlImRhc2hlZCI6Y2FzZSJkYXNoRG90IjpjYXNlInNsYW50RGFzaERvdCI6JGE9ImRhc2hlZCIsU2E9MTticmVhaztjYXNlIm1lZGl1bURhc2hlZCI6Y2FzZSJtZWRpdW1EYXNoRG90IjokYT0iZGFzaGVkIixTYT0y''@;'; put 'put ''fWU6aWYoMD09U2Epe3N3aXRjaCh1byl7Y2FzZSJ0b3AiOi0tTXM7YnJlYWs7Y2FzZSJsZWZ0IjotLWRhO2JyZWFrO2Nhc2UiYm90dG9tIjorK01zO2JyZWFrO2Nhc2UicmlnaHQiOisrZGF9dmFyIFBpPU1zPj0wJiZkYT49MD9tdC5kZW5zZT8oQmVbTXNdfHxbXSlbZGFdOkJlW3FpKHtyOk1z''@;'; put 'put ''LGM6ZGF9KV06bnVsbDtpZihQaSl7aWYoUGkucyYmUGkuc1t7dG9wOiJib3R0b20iLGJvdHRvbToidG9wIixsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQifVt1b11dKWJyZWFrIGU7UGkucyYmUGkucy5mZ0NvbG9yJiYoU2E9MSl9RXQuZmdDb2xvciYmKFNhPTEpLCFQaSYmdW4mJjA9PVNhJiYo''@;'; put 'put ''U2E9MSl9MCE9U2EmJlNhJiYoVnQuc3R5bGUucHVzaCgiYm9yZGVyLSIrdW8rIi1zdHlsZToiKygkYXx8InRyYW5zcGFyZW50IikpLFZ0LnN0eWxlLnB1c2goImJvcmRlci0iK3VvKyItd2lkdGg6IitTYSsicHgiKSwiIj09JGE/VnQuc3R5bGUucHVzaCgiYm9yZGVyLSIrdW8rIi1jb2xvcjog''@;'; put 'put ''dHJhbnNwYXJlbnQiKTpFdFt1b10uY29sb3ImJkV0W3VvXS5jb2xvci5yZ2ImJlZ0LnN0eWxlLnB1c2goImJvcmRlci0iK3VvKyItY29sb3I6IyIrVDIoRXRbdW9dLmNvbG9yLnJnYikpKX1mb3IodmFyIG5uPVplLnMuYztubjw9WmUuZS5jOysrbm4pe2Zvcih2YXIgYXI9MCxqbj0wLGtuPTA7''@;'; put 'put ''a248a3QubGVuZ3RoOysra24paWYoIShrdFtrbl0ucy5yPm50fHxrdFtrbl0ucy5jPm5ufHxrdFtrbl0uZS5yPG50fHxrdFtrbl0uZS5jPG5uKSl7aWYoa3Rba25dLnMucjxudHx8a3Rba25dLnMuYzxubil7YXI9LTE7YnJlYWt9YXI9a3Rba25dLmUuci1rdFtrbl0ucy5yKzEsam49a3Rba25d''@;'; put 'put ''LmUuYy1rdFtrbl0ucy5jKzE7YnJlYWt9aWYoIShhcjwwKSl7dmFyIHNyPXFpKHtyOm50LGM6bm59KSxncj1tdC5kZW5zZT8oQmVbbnRdfHxbXSlbbm5dOkJlW3NyXTtncj91bj0hMToodW49ITAsZ3I9e3Q6InoiLHM6e319KTt2YXIgcW49InoiPT1nci50PyIiOmdyLmh8fCRpKGdyLnd8fCh6''@;'; put 'put ''dChnciksZ3Iudyl8fCIiKTtpZihWdD17c3R5bGU6W119LEV0PWdyLnMpe3ZhciBfaT0xO2lmKCgic3VwZXIiPT1FdC52YWxpZ258fCJzdWIiPT1FdC52YWxpZ24pJiYoX2k9LjgzLHFuPVZyKCJzcGFuIixxbix7c3R5bGU6InZlcnRpY2FsLWFsaWduOiAiK0V0LnZhbGlnbn0pKSxWdC5zdHls''@;'; put 'put ''ZS5wdXNoKCJmb250LXdlaWdodDoiKyhFdC5ib2xkPzcwMDo0MDApKSxFdC5pdGFsaWMmJlZ0LnN0eWxlLnB1c2goImZvbnQtc3R5bGU6IGl0YWxpYyIpLChFdC51bmRlcmxpbmV8fEV0LnN0cmlrZSkmJlZ0LnN0eWxlLnB1c2goInRleHQtZGVjb3JhdGlvbjoiKyhFdC51bmRlcmxpbmU/IiB1''@;'; put 'put ''bmRlcmxpbmUiOiIiKSsoRXQuc3RyaWtlPyIgbGluZS10aHJvdWdoIjoiIikpLEV0LmNvbG9yJiZFdC5jb2xvci5yZ2ImJlZ0LnN0eWxlLnB1c2goImNvbG9yOiAjIitUMihFdC5jb2xvci5yZ2IpKSxFdC5uYW1lJiZWdC5zdHlsZS5wdXNoKCJmb250LWZhbWlseToiK0V0Lm5hbWUrIiwgc2Fu''@;'; put 'put ''cy1zZXJpZiIpLEV0LnN6JiZWdC5zdHlsZS5wdXNoKCJmb250LXNpemU6IitFdC5zeipfaSsicHQiKSxudWxsIT09RXQucGF0dGVyblR5cGUmJkV0LmZnQ29sb3ImJkV0LmZnQ29sb3IucmdiJiZWdC5zdHlsZS5wdXNoKCJiYWNrZ3JvdW5kLWNvbG9yOiAjIitUMihFdC5mZ0NvbG9yLnJnYikp''@;'; put 'put ''LFsidG9wIiwibGVmdCJdLmZvckVhY2goZnVuY3Rpb24odW8pe25yKHVvLG50LG5uKX0pLGFyPjF8fGpuPjEpe3ZhciBPaT1xaSh7cjpudCthci0xLGM6bm4ram4tMX0pLHNvPW10LmRlbnNlPyhCZVtudCthci0xXXx8W10pW25uK2puLTFdOkJlW09pXSxMaT1FdDtFdD1zbyYmc28uc3x8RXQs''@;'; put 'put ''WyJib3R0b20iLCJyaWdodCJdLmZvckVhY2goZnVuY3Rpb24odW8pe25yKHVvLG50LG5uKX0pLEV0PUxpfWVsc2VbImJvdHRvbSIsInJpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbih1byl7bnIodW8sbnQsbm4pfSk7aWYoRXQuYWxpZ25tZW50KXtpZihFdC5hbGlnbm1lbnQuaG9yaXpvbnRhbD9W''@;'; put 'put ''dC5zdHlsZS5wdXNoKCJ0ZXh0LWFsaWduOiAiKyhkW0V0LmFsaWdubWVudC5ob3Jpem9udGFsXXx8RXQuYWxpZ25tZW50Lmhvcml6b250YWwpKToibiI9PWdyLnQmJlZ0LnN0eWxlLnB1c2goInRleHQtYWxpZ246IHJpZ2h0IiksRXQuYWxpZ25tZW50LnZlcnRpY2FsKXt2YXIga3I9RXQuYWxp''@;'; put 'put ''Z25tZW50LnZlcnRpY2FsO1Z0LnN0eWxlLnB1c2goInZlcnRpY2FsLWFsaWduOiAiKygiY2VudGVyIj09a3I/Im1pZGRsZSI6a3IpKX1pZihFdC5hbGlnbm1lbnQud3JhcFRleHQpVnQuc3R5bGUucHVzaCgid2hpdGUtc3BhY2U6IHByZS13cmFwIik7ZWxzZXt2YXIgRG49bXQuZGVuc2U/KEJl''@;'; put 'put ''W250XXx8W10pW25uKzFdOkJlW3FpKHtyOm50LGM6bm4rMX0pXTtEbiYmInoiIT1Ebi50JiZWdC5zdHlsZS5wdXNoKCJ3aGl0ZS1zcGFjZTogcHJlLXdyYXAiKX19ZWxzZSJuIj09Z3IudCYmVnQuc3R5bGUucHVzaCgidGV4dC1hbGlnbjogcmlnaHQiKTt2YXIgT3I9KChCZVsiIWNvbHMiXXx8''@;'; put 'put ''W10pW25uXXx8e30pLndweDtudWxsPT1PciYmKE9yPSgoQmVbIiFzaGVldEZvcm1hdCJdfHx7fSkuY29sfHx7fSkud3B4KX12YXIgX3I9MDtpZihqbjw9MSYmYXI8PTEmJihfcj0oKEJlWyIhY29scyJdfHxbXSlbbm5dfHx7fSkud3B4KSYmVnQuc3R5bGUucHVzaCgid2lkdGg6ICIrX3IrInB4''@;'; put 'put ''IiksQmVbIiFjb25kZm10Il0mJlEoZ3IsbnQsbm4sQmVbIiFjb25kZm10Il0sVnQuc3R5bGUsQmUpLDA9PVZ0LnN0eWxlLmxlbmd0aD9kZWxldGUgVnQuc3R5bGU6VnQuc3R5bGU9VnQuc3R5bGUuam9pbigiOyIpLG10LmNzcyl7dmFyIE1uPVFlLmluZGV4T2YoVnQuc3R5bGUpOy0xPT1NbiYm''@;'; put 'put ''KFFlLnB1c2goVnQuc3R5bGUpLE1uPVFlLmxlbmd0aC0xKSxkZWxldGUgVnQuc3R5bGUsVnQuY2xhc3M9InNqcyIrKGZ0fHwiIikrIi0iK01ufWFyPjEmJihWdC5yb3dzcGFuPWFyKSxqbj4xJiYoVnQuY29sc3Bhbj1qbiksbXQuZWRpdGFibGU/cW49JzxzcGFuIGNvbnRlbnRlZGl0YWJsZT0i''@;'; put 'put ''dHJ1ZSI+JytxbisiPC9zcGFuPiI6Z3ImJihWdFsiZGF0YS10Il09Z3ImJmdyLnR8fCJ6IixudWxsIT1nci52JiYoVnRbImRhdGEtdiJdPWdyLnYpLG51bGwhPWdyLnomJihWdFsiZGF0YS16Il09Z3IueikpLFZ0LmlkPShtdC5pZHx8InNqcyIpKyItIitzcixidC5wdXNoKFZyKCJ0ZCIscW4s''@;'; put 'put ''VnQpKX19dmFyIGppLE5yPXtzdHlsZTpbXX07KGppPUJlWyIhc2hlZXRGb3JtYXQiXSkmJmppLnJvdyYmKFdBKGppLnJvdyksamkucm93LmhweCYmKE5yLnN0eWxlLnB1c2goWyJoZWlnaHQiLGppLnJvdy5ocHgrInB4Il0pLE5yLmhlaWdodD1NYXRoLnJvdW5kKGppLnJvdy5ocHgpKSk7dmFy''@;'; put 'put ''IGJpPUJlWyIhcm93cyJdO2lmKGJpJiZiaVtudF0pe3ZhciBObz1iaVtudF07Tm8uaHB4JiYoTnIuc3R5bGUucHVzaChbImhlaWdodCIsK05vLmhweCsicHgiXSksTnIuaGVpZ2h0PU1hdGgucm91bmQoTm8uaHB4KSksTm8uaGlkZGVuJiZOci5zdHlsZS5wdXNoKFsiZGlzcGxheSIsIm5vbmUi''@;'; put 'put ''XSl9dmFyIFlhPVtdO3JldHVybiBOci5zdHlsZT1Oci5zdHlsZS5yZXZlcnNlKCkuZmlsdGVyKGZ1bmN0aW9uKHVvKXtyZXR1cm4hKFlhLmluZGV4T2YodW9bMF0pPi0xfHwoWWEucHVzaCh1b1swXSksMCkpfSkubWFwKGZ1bmN0aW9uKHVvKXtyZXR1cm4gdW9bMF0rIjoiK3VvWzFdfSksMD09''@;'; put 'put ''TnIuc3R5bGUubGVuZ3RoP2RlbGV0ZSBOci5zdHlsZTpOci5zdHlsZT1Oci5zdHlsZS5qb2luKCI7IiksVnIoInRyIixidC5qb2luKCIiKSxOcil9ZnVuY3Rpb24gUShCZSxaZSxudCxtdCxRZSxmdCl7bXQuZm9yRWFjaChmdW5jdGlvbihrdCl7aWYoa3QuX3JlZnx8KGt0Ll9yZWY9InN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBrdC5yZWY/emEoa3QucmVmKTprdC5yZWYpLCEoa3QuX3JlZi5zLmM+bnR8fGt0Ll9yZWYuZS5jPG50fHxrdC5fcmVmLnMucj5aZXx8a3QuX3JlZi5lLnI8WmV8fCJzY2FsZSIhPT1rdC50KSl7aWYoIm4iIT1CZS50KXJldHVybjt2YXIgYnQ7aWYobnVsbD09a3QuX21pbil7''@;'; put 'put ''a3QuX3ZhbHVlcz1bXTtmb3IodmFyIEV0PWt0Ll9yZWYucy5yO0V0PD1rdC5fcmVmLmUucjsrK0V0KWZvcih2YXIgVnQ9a3QuX3JlZi5zLmM7VnQ8PWt0Ll9yZWYuZS5jOysrVnQpe3ZhciB1bj1BcnJheS5pc0FycmF5KGZ0KT8oZnRbRXRdfHxbXSlbVnRdOmZ0W3FpKHtyOkV0LGM6VnR9KV07''@;'; put 'put ''dW4mJiJuIj09dW4udCYma3QuX3ZhbHVlcy5wdXNoKHVuLnYpfWlmKGt0Ll92YWx1ZXMuc29ydChmdW5jdGlvbihucixubil7cmV0dXJuIG5yLW5ufSksa3QuX21pbj1rdC5fdmFsdWVzWzBdLGt0Ll9tYXg9a3QuX3ZhbHVlcy5zbGljZSgtMSlbMF0sa3QuX2JhbmQ9a3QuX21heC1rdC5fbWlu''@;'; put 'put ''LGt0LmNtaWQpe3N3aXRjaChrdC5jbWlkLnQpe2Nhc2UibnVtIjprdC5fbWlkPWt0LmNtaWQudjticmVhaztjYXNlInBlcmNlbnQiOmt0Ll9taWQ9a3QuY21pZC52LzEwMCprdC5fYmFuZCtrdC5fbWluO2JyZWFrO2Nhc2UicGVyY2VudGlsZSI6a3QuX21pZD1mdW5jdGlvbiBBcihkLF8pe2lm''@;'; put 'put ''KDA9PV8pcmV0dXJuIGRbMF07aWYoMTAwPT1fKXJldHVybiBkW2QubGVuZ3RoLTFdO3ZhciBUPV8vMTAwKihkLmxlbmd0aC0xKSxQPVQtTWF0aC5mbG9vcihUKTtyZXR1cm4gUCpkW01hdGguY2VpbChUKV0rKDEtUCkqZFtNYXRoLmZsb29yKFQpXX0oa3QuX3ZhbHVlcyxrdC5jbWlkLnYpfWt0''@;'; put 'put ''Ll9iYW5kaD1rdC5fbWF4LWt0Ll9taWQsa3QuX2JhbmRsPWt0Ll9taWQta3QuX21pbn19KGJ0PWt0LmNtaWQ/QmUudj49a3QuX21pZD92SChrdC5jbWlkLmNvbG9yLGt0LmNtYXguY29sb3IsKEJlLnYta3QuX21pZCkva3QuX2JhbmRoKTp2SChrdC5jbWluLmNvbG9yLGt0LmNtaWQuY29sb3Is''@;'; put 'put ''KEJlLnYta3QuX21pbikva3QuX2JhbmRsKTp2SChrdC5jbWluLmNvbG9yLGt0LmNtYXguY29sb3IsKEJlLnYta3QuX21pbikva3QuX2JhbmQpKSYmUWUucHVzaCgiYmFja2dyb3VuZC1jb2xvcjogIyIrYnQpfX0pfWZ1bmN0aW9uIHNlKEJlLFplKXt2YXIgbnQ9e3NwYW46WmV8fDEsc3R5bGU6''@;'; put 'put ''IiJ9LG10PVtdO3JldHVybiBCZSYmQmUud3B4JiYobnQud2lkdGg9TWF0aC5yb3VuZCg0KkJlLndweC8zKSxtdC5wdXNoKCJ3aWR0aDoiKyhCZS53cHh8fDApKyJweCIpKSxtdC5sZW5ndGg+MCYmKG50LnN0eWxlPW10LmpvaW4oIjsiKSksVnIoImNvbCIsbnVsbCxudCl9ZnVuY3Rpb24gb2Uo''@;'; put 'put ''QmUsWmUsbnQpe3ZhciBtdD17Ym9yZGVyOjAsY2VsbHBhZGRpbmc6MCxjZWxsc3BhY2luZzowLHN0eWxlOlsiYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlIiwidGFibGUtbGF5b3V0OmZpeGVkIl0uam9pbigiOyIpfTtudCYmbnQuaWQmJihtdC5pZD1udC5pZCk7dmFyIFFlPUJlWyIhY29scyJd''@;'; put 'put ''LGZ0PUJlWyIhc2hlZXRGb3JtYXQiXTtpZihCZSYmUWUpe2Zvcih2YXIga3Q9MCxFdD1aZS5zLmM7RXQ8PVplLmUuYzsrK0V0KXt2YXIgVnQ9UWVbRXRdO2t0Kz1WdCYmVnQud3B4P1Z0LndweDpmdCYmZnQuY29sJiZmdC5jb2wud3B4P2Z0LmNvbC53cHg6NTN9bXQuc3R5bGUrPSI7d2lkdGg6''@;'; put 'put ''IitrdCsicHgifXZhciBucix1bj1bIjx0YWJsZSIrZmEobXQpKyI+Il07aWYodW4ucHVzaCgiPHN0eWxlPnRkIHsgcGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1yaWdodDoxcHg7IHBhZGRpbmctbGVmdDoxcHg7IHRleHQtYWxpZ246Z2VuZXJhbDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyBi''@;'; put 'put ''b3JkZXI6MXB4IHNvbGlkOyBib3JkZXItY29sb3I6IisobnQmJm50LmdyaWRjb2xvcj9udC5ncmlkY29sb3I6X24oQmVbIiFncmlkbGluZXMiXSk/InRyYW5zcGFyZW50IjoiYmxhY2siKSsiOyB3aGl0ZS1zcGFjZTpub3dyYXA7IHRleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9PC9zdHlsZT4iKSx1''@;'; put 'put ''bi5wdXNoKCc8Y29sZ3JvdXAgc3Bhbj0iJysoWmUuZS5jLVplLnMuYysxKSsnIj4nKSxRZSl7Zm9yKHZhciBubj1aZS5zLmM7bm48TWF0aC5taW4oUWUubGVuZ3RoLFplLmUuYysxKTsrK25uKSEobnI9UWVbbm5dKSYmZnQmJmZ0LmNvbCYmKG5yPWZ0LmNvbCksbnJ8fChucj17d3B4OjUzfSks''@;'; put 'put ''dW4ucHVzaChzZShuciwxKSk7WmUuZS5jLVplLnMuYysxPlFlLmxlbmd0aCYmKG5yPW51bGwsZnQmJmZ0LmNvbCYmKG5yPWZ0LmNvbCksbnJ8fChucj17d3B4OjUzfSksdW4ucHVzaChzZShucixaZS5lLmMtWmUucy5jKzEtUWUubGVuZ3RoKSkpfWVsc2UgbnI9bnVsbCxmdCYmZnQuY29sJiYo''@;'; put 'put ''bnI9ZnQuY29sKSxucnx8KG5yPXt3cHg6NTN9KSx1bi5wdXNoKHNlKG5yLFplLmUuYy1aZS5zLmMrMSkpO3JldHVybiB1bi5wdXNoKCI8L2NvbGdyb3VwPiIpLHVuLmpvaW4oIiIpfXZhciBkZT0nPGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiLz48dGl0bGU+U2hlZXRKUyBUYWJs''@;'; put 'put ''ZSBFeHBvcnQ8L3RpdGxlPjwvaGVhZD48Ym9keT4nLExlPSI8L2JvZHk+PC9odG1sPiI7cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIFQoQmUsWmUpe3JldHVybiBtbihtKEJlLFplKSxaZSl9LHRvX3NoZWV0Om0sX3JvdzpQLEJFR0lOOmRlLEVORDpMZSxfcHJlYW1ibGU6b2UsaHRtbF90''@;'; put 'put ''b19yczpmdW5jdGlvbiBfKEJlKXt2YXIgWmU9W10sbnQ9e30sbXQ9MDtyZXR1cm4gQmUucmVwbGFjZSgvPChcLz8pKFteXHM/PiFcLzpdKjp8KShbXlxzPz46XC9dKylbXj5dKj4vZ20sZnVuY3Rpb24oUWUsZnQsa3QsYnQsRXQpe3ZhciB1bj1lYShYcihRZSlbMF0pLnJlcGxhY2UoL1s8XC8+''@;'; put 'put ''XS9nLCIiKSxucj1CZS5zbGljZShtdCxFdCkucmVwbGFjZSgvXHMvZywiICIpO3N3aXRjaChuci5sZW5ndGg+MCYmKFplLnB1c2goe3Q6InMiLHY6bnIsczpudH0pLG50PVFyKG50KSksdW4udG9Mb3dlckNhc2UoKSl7Y2FzZSJiIjoiLyIhPWZ0P250LmJvbGQ9ITA6ZGVsZXRlIG50LmJvbGQ7''@;'; put 'put ''YnJlYWs7Y2FzZSJpIjoiLyIhPWZ0P250Lml0YWxpYz0hMDpkZWxldGUgbnQuaXRhbGljO2JyZWFrO2Nhc2UidSI6Ii8iIT1mdD9udC51bmRlcmxpbmU9MTpkZWxldGUgbnQudW5kZXJsaW5lO2JyZWFrO2Nhc2UicyI6Ii8iIT1mdD9udC5zdHJpa2U9ITA6ZGVsZXRlIG50LnN0cmlrZX1yZXR1''@;'; put 'put ''cm4gbXQ9RXQrUWUubGVuZ3RoLFFlfSksWmV9LGZyb21fc2hlZXQ6ZnVuY3Rpb24gTmUoQmUsWmUpe3ZhciBudD1aZXx8e30sUWU9bnVsbCE9bnQuZm9vdGVyP250LmZvb3RlcjpMZSxmdD1bbnVsbCE9bnQuaGVhZGVyP250LmhlYWRlcjpkZSwiIl0sa3Q9W10sYnQ9KG5ldyBEYXRlKS52YWx1''@;'; put 'put ''ZU9mKCk7QmV8fChCZT17fSksQmVbIiFyZWYiXXx8KEJlWyIhcmVmIl09IkExOkExIik7dmFyIEV0PXphKEJlWyIhcmVmIl0pO2lmKG50LmRlbnNlPUFycmF5LmlzQXJyYXkoQmUpLG50LnNraXBlbmQpe3ZhciBWdD1FdC5lLnI7ZTpmb3IoO1Z0Pj1FdC5zLnI7LS1WdClmb3IodmFyIHVuPUV0''@;'; put 'put ''LmUuYzt1bj49RXQucy5jOy0tdW4paWYobnVsbCE9KChudC5kZW5zZT8oQmVbVnRdfHxbXSlbdW5dOkJlW3FpKHtyOlZ0LGM6dW59KV0pfHx7fSkudilicmVhayBlO0V0LmUucj1WdDt2YXIgbnI9RXQuZS5jO2U6Zm9yKDtucj49RXQucy5jOy0tbnIpZm9yKHZhciBubj1FdC5lLnI7bm4+PUV0''@;'; put 'put ''LnMucjstLW5uKWlmKG51bGwhPSgobnQuZGVuc2U/KEJlW25uXXx8W10pW25yXTpCZVtxaSh7cjpubixjOm5yfSldKXx8e30pLnYpYnJlYWsgZTtFdC5lLmM9bnJ9ZnQucHVzaChvZShCZSxFdCxudCkpO2Zvcih2YXIgYXI9RXQucy5yO2FyPD1FdC5lLnI7KythcilmdC5wdXNoKFAoQmUsRXQs''@;'; put 'put ''YXIsbnQsa3QsYnQpKTtyZXR1cm4gZnQucHVzaCgiPC90YWJsZT4iK1FlKSxudC5jc3MmJihmdFsxXT0iPHN0eWxlPlxuIitrdC5tYXAoZnVuY3Rpb24oam4sa24pe3JldHVybiIuc2pzIitidCsiLSIra24rIiB7IitqbisifSJ9KS5qb2luKCJcbiIpKyI8L3N0eWxlPiIpLGZ0LmpvaW4oIiIp''@;'; put 'put ''fX19KCk7ZnVuY3Rpb24gU1IoZCxfLG0pe3ZhciBUPXt9O2lmKHR5cGVvZiBnZXRDb21wdXRlZFN0eWxlPiJ1IilyZXR1cm4gVDt2YXIgUD1nZXRDb21wdXRlZFN0eWxlKGQpO2lmKCg3MDA9PVBbImZvbnQtd2VpZ2h0Il18fCJib2xkIj09UFsiZm9udC13ZWlnaHQiXSkmJihULmJvbGQ9ITAp''@;'; put 'put ''LChQWyJmb250LXN0eWxlIl18fCIiKS5tYXRjaCgvaXRhbGljLykmJihULml0YWxpYz0hMCksKFBbInRleHQtZGVjb3JhdGlvbiJdfHwiIikubWF0Y2goL3VuZGVybGluZS8pJiYoVC51bmRlcmxpbmU9MSksKFBbInRleHQtZGVjb3JhdGlvbiJdfHwiIikubWF0Y2goL2xpbmUtdGhyb3VnaC8p''@;'; put 'put ''JiYoVC5zdHJpa2U9MSkscGFyc2VJbnQoUFsiZm9udC1zaXplIl0pJiYoVC5zej1wYXJzZUZsb2F0KFBbImZvbnQtc2l6ZSJdKSooUFsiZm9udC1zaXplIl0ubWF0Y2goL3B4Lyk/My80OjEpKSxQWyJmb250LWZhbWlseSJdJiYoVC5uYW1lPVBbImZvbnQtZmFtaWx5Il0uc3BsaXQoIiwiKVsw''@;'; put 'put ''XS5yZXBsYWNlKC9ccyoiXHMqL2csIiIpKSxQLmNvbG9yKXt2YXIgUT1UZihQLmNvbG9yLnRvTG93ZXJDYXNlKCksITApO1E+PTAmJihULmNvbG9yPXtyZ2I6UX0pfXN3aXRjaChQWyJ0ZXh0LXRyYW5zZm9ybSJdJiYoVC50ZXh0X3RyYW5zZm9ybT1QWyJ0ZXh0LXRyYW5zZm9ybSJdLnRvTG93''@;'; put 'put ''ZXJDYXNlKCkpLCJub25lIiE9KFBbInRleHQtc2hhZG93Il18fCJub25lIikmJihULnNoYWRvdz0hMCksUFsidGV4dC1hbGlnbiJdKXtjYXNlImNlbnRlciI6VC5hbGlnbm1lbnQ9e2hvcml6b250YWw6ImNlbnRlciJ9O2JyZWFrO2Nhc2UicmlnaHQiOlQuYWxpZ25tZW50PXtob3Jpem9udGFs''@;'; put 'put ''OiJyaWdodCJ9O2JyZWFrO2Nhc2UibGVmdCI6VC5hbGlnbm1lbnQ9e2hvcml6b250YWw6ImxlZnQifTticmVhaztjYXNlImp1c3RpZnkiOlQuYWxpZ25tZW50PXtob3Jpem9udGFsOiJqdXN0aWZ5In19c3dpdGNoKFBbInZlcnRpY2FsLWFsaWduIl0pe2Nhc2UidG9wIjpjYXNlIm1pZGRsZSI6''@;'; put 'put ''Y2FzZSJib3R0b20iOlQuYWxpZ25tZW50fHwoVC5hbGlnbm1lbnQ9e30pLFQuYWxpZ25tZW50LnZlcnRpY2FsPVBbInZlcnRpY2FsLWFsaWduIl0sIm1pZGRsZSI9PVQuYWxpZ25tZW50LnZlcnRpY2FsJiYoVC5hbGlnbm1lbnQudmVydGljYWw9ImNlbnRlciIpO2JyZWFrO2Nhc2Uic3ViIjpj''@;'; put 'put ''YXNlInN1cGVyIjpULnZhbGlnbj1QWyJ2ZXJ0aWNhbC1hbGlnbiJdLFQuc3omJihULnN6Lz0uODMpfXZhciBzZT1fJiZnZXRDb21wdXRlZFN0eWxlKF8pO3JldHVybiBzZSYmbSYmXyYmWyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iXS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXt2YXIgZGU9''@;'; put 'put ''b2UuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrb2Uuc2xpY2UoMSksTGU9c2VbImJvcmRlci0iK29lKyItc3R5bGUiXTtpZigoIm5vbmUiPT1MZXx8IUxlKSYmKExlPXNlWyJib3JkZXIiK2RlKyJTdHlsZSJdKSwibm9uZSIhPUxlJiZMZSl7dmFyIE5lPXBhcnNlSW50KHNlWyJib3JkZXItIitv''@;'; put 'put ''ZSsiLXdpZHRoIl18fHNlWyJib3JkZXIiK2RlKyJXaWR0aCJdLDEwKSxCZT0idGhpbiI7aWYoTmU+MCl7c3dpdGNoKExlKXtjYXNlImRvdWJsZSI6QmU9ImRvdWJsZSI7YnJlYWs7Y2FzZSJkYXNoZWQiOkJlPU5lPj0yPyJtZWRpdW1EYXNoZWQiOiJkYXNoZWQiO2JyZWFrO2Nhc2UiZG90dGVk''@;'; put 'put ''IjpCZT1OZT49Mj8ibWVkaXVtRGFzaERvdERvdCI6ImRvdHRlZCI7YnJlYWs7Y2FzZSJzb2xpZCI6QmU9TmU+PTM/InRoaWNrIjpOZT49Mj8ibWVkaXVtIjoidGhpbiJ9aWYoVFtvZV09e3N0eWxlOkJlfSxzZVsiYm9yZGVyLSIrb2UrIi1jb2xvciJdfHxzZVsiYm9yZGVyIitkZSsiQ29sb3Ii''@;'; put 'put ''XSl7dmFyIFplPVRmKChzZVsiYm9yZGVyLSIrb2UrIi1jb2xvciJdfHxzZVsiYm9yZGVyIitkZSsiQ29sb3IiXSkudG9Mb3dlckNhc2UoKSwhMCk7WmU+PTAmJihUW29lXS5jb2xvcj17cmdiOlplfSl9fX19KSxUfWZ1bmN0aW9uIFdCKGQsXyxtKXt2YXIgVD1kLmNoaWxkTm9kZXM7aWYoMT09''@;'; put 'put ''ZC5ub2RlVHlwZSlzd2l0Y2goZC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpe2Nhc2UicCI6Xy5sZW5ndGg+MCYmXy5wdXNoKHt0OiJ0Iix2OiJcbiIsczptfSk7YnJlYWs7Y2FzZSJzZWxlY3QiOnJldHVybiBmdW5jdGlvbiBXZWUoZCxfLG0pe18ucHVzaCh7dDoidCIsdjpkLmNoaWxkcmVuW2Qu''@;'; put 'put ''c2VsZWN0ZWRJbmRleF0uaW5uZXJUZXh0LHM6bX0pfShkLF8sbSl9aWYoVC5sZW5ndGg+MCl7dmFyIFA9U1IoZCxudWxsLCExKTttJiYobS51bmRlcmxpbmUmJihQLnVuZGVybGluZT1tLnVuZGVybGluZSksbS5zdHJpa2UmJihQLnN0cmlrZT1tLnN0cmlrZSkpO2Zvcih2YXIgUT0wO1E8VC5s''@;'; put 'put ''ZW5ndGg7KytRKXt0cnl7aWYoVFtRXS5nZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIikpY29udGludWV9Y2F0Y2h7fVdCKFRbUV0sXyxQKX1kZWxldGUgUC50ZXh0X3RyYW5zZm9ybX1lbHNlIGlmKDM9PWQubm9kZVR5cGUpe3ZhciBzZT17dDoidCIsdjpkLm5vZGVWYWx1ZS5yZXBsYWNlKC9e''@;'; put 'put ''W1xuIF0rLywiICIpLnJlcGxhY2UoL1tcbiBdKyQvLCIgIiksczptfTtzd2l0Y2gobS50ZXh0X3RyYW5zZm9ybSl7Y2FzZSJ1cHBlcmNhc2UiOnNlLnY9c2Uudi50b1VwcGVyQ2FzZSgpO2JyZWFrO2Nhc2UibG93ZXJjYXNlIjpzZS52PXNlLnYudG9Mb3dlckNhc2UoKX0oXy5sZW5ndGg+MHx8''@;'; put 'put ''c2UudiYmIiAiIT1zZS52KSYmXy5wdXNoKHNlKX1lbHNlIDE9PWQubm9kZVR5cGUmJiJiciI9PT1kLnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmXy5wdXNoKHt0OiJ0Iix2OiJcbiIsczptfSl9ZnVuY3Rpb24gRVIoZCxfLG0sVCxQKXt2YXIgc2UsUT1kLmlubmVySFRNTDtpZih0eXBlb2YgZ2V0''@;'; put 'put ''Q29tcHV0ZWRTdHlsZTwidSIpc3dpdGNoKHNlPWdldENvbXB1dGVkU3R5bGUoZCksKHNlWyJ3aGl0ZS1zcGFjZSJdfHwiIikubWF0Y2goL3ByZS8pJiYoUT1RLnJlcGxhY2UoL1xuL2csIjxici8+IikpLChzZVsidGV4dC10cmFuc2Zvcm0iXXx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UidXBw''@;'; put 'put ''ZXJjYXNlIjpRPVEudG9VcHBlckNhc2UoKTticmVhaztjYXNlImxvd2VyY2FzZSI6UT1RLnRvTG93ZXJDYXNlKCl9dmFyIG9lPWZ1bmN0aW9uIHplZShkLF8sbSxUKXt2YXIgUD17dDoicyIsdjpffSxRPSIiO2lmKGQpe209ZC5nZXRBdHRyaWJ1dGUoImRhdGEtdCIpfHxkLmdldEF0dHJpYnV0''@;'; put 'put ''ZSgidCIpO3ZhciBzZT1kLmdldEF0dHJpYnV0ZSgiZGF0YS12Iil8fGQuZ2V0QXR0cmlidXRlKCJ2Iik7aWYobnVsbCE9KFE9ZC5nZXRBdHRyaWJ1dGUoImRhdGEteiIpfHxkLmdldEF0dHJpYnV0ZSgieiIpKSYmKFAuej1RKSxudWxsIT1tJiZudWxsIT1zZSlyZXR1cm4gUC50PW0sUC52PXNl''@;'; put 'put ''LFB9cmV0dXJuIG51bGwhPV8mJigwPT1fLmxlbmd0aD9QLnQ9bXx8InoiOlQucmF3fHwhXy50cmltKCkubGVuZ3RofHwicyI9PW18fChQPVNuKF8sVCkpKSxRJiYoUC56PVEpLFB9KGQsVXMoUSksbSxQKTtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSImJihvZS5zPVNSKGQsXyxQLmJv''@;'; put 'put ''cmRlcnMpLGRlbGV0ZSBvZS5zLnRleHRfdHJhbnNmb3JtLGQuY2hpbGROb2Rlcy5sZW5ndGg+MXx8MT09ZC5jaGlsZE5vZGVzLmxlbmd0aCYmMyE9ZC5jaGlsZE5vZGVzWzBdLm5vZGVUeXBlKSlzd2l0Y2goV0IoZCxvZS5SPVtdLG51bGwpLG9lLlImJm9lLlJbb2UuUi5sZW5ndGgtMV0mJiJc''@;'; put 'put ''biI9PW9lLlJbb2UuUi5sZW5ndGgtMV0udiYmb2UuUi5sZW5ndGgtLSwoc2VbInRleHQtdHJhbnNmb3JtIl18fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInVwcGVyY2FzZSI6b2UuUi5mb3JFYWNoKGZ1bmN0aW9uKFplKXtaZS52PVplLnYudG9VcHBlckNhc2UoKX0pO2JyZWFrO2Nhc2UibG93''@;'; put 'put ''ZXJjYXNlIjpvZS5SLmZvckVhY2goZnVuY3Rpb24oWmUpe1plLnY9WmUudi50b0xvd2VyQ2FzZSgpfSl9aWYoInMiPT1vZS50KXt2YXIgZGU9b2Uudi5tYXRjaCgvXG4vKTshZGUmJm9lLlImJm9lLlIuZm9yRWFjaChmdW5jdGlvbihaZSl7InN0cmluZyI9PXR5cGVvZiBaZS52JiZaZS52Lm1h''@;'; put 'put ''dGNoKC9cbi8pJiYoZGU9ITApfSksInMiPT1vZS50JiZkZSYmKG9lLnN8fChvZS5zPXt9KSxvZS5zLmFsaWdubWVudHx8KG9lLnMuYWxpZ25tZW50PXt9KSxvZS5zLmFsaWdubWVudC53cmFwVGV4dD0hMCl9aWYoXyl7dmFyIExlPSIiLE5lPV8uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkEiKTtp''@;'; put 'put ''ZihOZSYmTmUubGVuZ3RoKWZvcih2YXIgQmU9MDtCZTxOZS5sZW5ndGgmJighTmVbQmVdLmhhc0F0dHJpYnV0ZSgiaHJlZiIpfHwiIyI9PShMZT1OZVtCZV0uZ2V0QXR0cmlidXRlKCJocmVmIikpLmNoYXJBdCgwKSk7KytCZSk7TGUmJiIjIiE9TGUuY2hhckF0KDApJiYob2UubD17VGFyZ2V0''@;'; put 'put ''OkxlfSl9cmV0dXJuIG9lfWZ1bmN0aW9uIE1SKGQsXyxtKXt2YXIgUCxUPV8ucm93cztpZighVCl7aWYobSYmbnVsbCE9bS5vcmlnaW4pdGhyb3ciVW5zdXBwb3J0ZWQgb3JpZ2luIHdoZW4gIitfLnRhZ05hbWUrIiBpcyBub3QgYSBUQUJMRSI7cmV0dXJuIGZ1bmN0aW9uIFllZShkLF8sbSl7''@;'; put 'put ''bT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG18fHt9KSk7dmFyIFE9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fTtkWyIhbWVyZ2VzIl18fChkWyIhbWVyZ2VzIl09W10pO2Zvcih2YXIgb2Usc2U9Xy5jaGlsZHJlbixkZT0wLExlPTA7TGU8c2UubGVuZ3RoOysrTGUpe3ZhciBaZSxOZT1z''@;'; put 'put ''ZVtMZV0sQmU9IiI7dHJ5e3R5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1Ij9aZT1nZXRDb21wdXRlZFN0eWxlOk5lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcmJiJmdW5jdGlvbiI9PXR5cGVvZiBOZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihaZT1O''@;'; put 'put ''ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUpfWNhdGNoe31pZighWmV8fCJub25lIiE9WmUoTmUpLmRpc3BsYXkpc3dpdGNoKE5lLnRhZ05hbWUudG9VcHBlckNhc2UoKSl7Y2FzZSJUQUJMRSI6ZGU9LTEsZFsiIXJlZiJdJiYobS5vcmlnaW49LTEpLE1SKGQs''@;'; put 'put ''TmUsbSk7YnJlYWs7Y2FzZSJCUiI6Y2FzZSJIUiI6ZGU9LTEsZFsiIXJlZiJdPygrKyhRPXphKGRbIiFyZWYiXSkpLmUucixkWyIhcmVmIl09aHQoUSkpOmRbIiFyZWYiXT0iQTE6QTEiO2JyZWFrO2Nhc2UiRElWIjpjYXNlIlAiOmNhc2UiSDEiOmNhc2UiSDIiOmNhc2UiSDMiOmNhc2UiSDQi''@;'; put 'put ''OmNhc2UiSDUiOmNhc2UiSDYiOmRlPS0xLG9lPUVSKE5lLG51bGwsIiIsMCxtKSxkWyIhcmVmIl0/KG0ub3JpZ2luPS0xLEZuKGQsW1tvZV1dLG0pKTooZFsiIXJlZiJdPSJBMSIsQXJyYXkuaXNBcnJheShkKT8oZFswXXx8KGRbMF09W10pLGRbMF1bMF09b2UpOmQuQTE9b2UpLGRbIiFyb3dz''@;'; put 'put ''Il18fChkWyIhcm93cyJdPVtdKSxaZSYmKFE9emEoZFsiIXJlZiJdKSwoQmU9WmUoTmUpLmhlaWdodCkmJiJhdXRvIiE9QmUmJihkWyIhcm93cyJdW1EuZS5yXT17aHB0OnBhcnNlSW50KEJlLDEwKX0pKTticmVhaztjYXNlIlNQQU4iOmNhc2UiQSI6Y2FzZSJCIjpjYXNlIkVNIjpjYXNlIkki''@;'; put 'put ''OmNhc2UiRk9OVCI6Y2FzZSJTIjpjYXNlIlNVQiI6Y2FzZSJTVVAiOmNhc2UiVSI6b2U9RVIoTmUsbnVsbCwiIiwwLG0pLGRbIiFyZWYiXXx8KGRbIiFyZWYiXT0iQTE6QTEiKSxGbihkLFtbb2VdXSx7b3JpZ2luOnFpKHtyOihkZTwwPzE6MCkrKFE9emEoZFsiIXJlZiJdKSkuZS5yLGM6Kytk''@;'; put 'put ''ZX0pfSk7YnJlYWs7Y2FzZSJETCI6Y2FzZSJVTCI6Y2FzZSJPTCI6ZGU9LTEsY29uc29sZS5lcnJvcigiSFRNTCBDb252ZXJzaW9uIGRvZXMgbm90IHN1cHBvcnQgbGlzdCBlbGVtZW50ICIrTmUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKTticmVhaztkZWZhdWx0OmRlPS0xLGNvbnNvbGUuZXJy''@;'; put 'put ''b3IoIlNraXBwaW5nICIrTmUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKX19cmV0dXJuIGR9KGQsXyxtKX10cnl7dHlwZW9mIGdldENvbXB1dGVkU3R5bGU8InUiP1A9Z2V0Q29tcHV0ZWRTdHlsZTpfLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcmJiJmdW5jdGlvbiI9PXR5cGVvZiBfLm93bmVy''@;'; put 'put ''RG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSYmKFA9Xy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUpfWNhdGNoe312YXIgUT1tfHx7fSxzZT0wLG9lPTA7aWYobnVsbCE9US5vcmlnaW4paWYoIm51bWJlciI9PXR5cGVvZiBRLm9yaWdpbilz''@;'; put 'put ''ZT1RLm9yaWdpbjtlbHNle3ZhciBkZT0ic3RyaW5nIj09dHlwZW9mIFEub3JpZ2luP0lzKFEub3JpZ2luKTpRLm9yaWdpbjtzZT1kZS5yLG9lPWRlLmN9dmFyIExlPU1hdGgubWluKFEuc2hlZXRSb3dzfHwxZTcsVC5sZW5ndGgpLE5lPXtzOntyOjAsYzowfSxlOntyOnNlLGM6b2V9fTtpZihk''@;'; put 'put ''WyIhcmVmIl0pe3ZhciBCZT16YShkWyIhcmVmIl0pO05lLnMucj1NYXRoLm1pbihOZS5zLnIsQmUucy5yKSxOZS5zLmM9TWF0aC5taW4oTmUucy5jLEJlLnMuYyksTmUuZS5yPU1hdGgubWF4KE5lLmUucixCZS5lLnIpLE5lLmUuYz1NYXRoLm1heChOZS5lLmMsQmUuZS5jKSwtMT09c2UmJihO''@;'; put 'put ''ZS5lLnI9c2U9QmUuZS5yKzEpfXZhciBaZT1bXSxudD0wLG10PWRbIiFyb3dzIl18fChkWyIhcm93cyJdPVtdKSxRZT0wLGZ0PTAsa3Q9MCxidD0wLEV0PTAsVnQ9MDtmb3IoZFsiIWNvbHMiXXx8KGRbIiFjb2xzIl09W10pO1FlPFQubGVuZ3RoJiZmdDxMZTsrK1FlKXtmb3IodmFyIHVuPVRb''@;'; put 'put ''UWVdLG5yPXVuLnBhcmVudEVsZW1lbnQ7IlRBQkxFIiE9bnIudGFnTmFtZS50b1VwcGVyQ2FzZSgpOylucj1uci5wYXJlbnRFbGVtZW50O2lmKG5yPT1fKXtlOmlmKHR5cGVvZiBQPCJ1Iil7dmFyIG5uPVAodW4pO2lmKG51bGw9PW5uKWJyZWFrIGU7aWYobm4uc3R5bGV8fChubi5zdHlsZT17''@;'; put 'put ''fSksUS5kaXNwbGF5JiYibm9uZSI9PShubi5kaXNwbGF5fHxubi5zdHlsZS5kaXNwbGF5KSljb250aW51ZTsibm9uZSI9PShubi5kaXNwbGF5fHxubi5zdHlsZS5kaXNwbGF5KSYmKChtdFtmdF18fChtdFtmdF09e30pKS5oaWRkZW49ITApfXZhciBhcj11bi5jZWxscztmb3Ioa3Q9YnQ9MDtr''@;'; put 'put ''dDxhci5sZW5ndGg7KytrdCl7dmFyIGpuPWFyW2t0XSxrbj1udWxsO2lmKCEodHlwZW9mIFA8InUiJiYobnVsbD09a24mJihrbj1QKGpuKSksa24uc3R5bGV8fChrbi5zdHlsZT17fSksUS5kaXNwbGF5JiZudWxsIT1rbiYmIm5vbmUiPT0oa24uZGlzcGxheXx8a24uc3R5bGUuZGlzcGxheSkp''@;'; put 'put ''KSl7Zm9yKFZ0PStqbi5nZXRBdHRyaWJ1dGUoImNvbHNwYW4iKXx8MSxudD0wO250PFplLmxlbmd0aDsrK250KXt2YXIgc3I9WmVbbnRdO3NyLnMuYz09YnQrb2UmJnNyLnMucjxmdCtzZSYmZnQrc2U8PXNyLmUuciYmKGJ0PXNyLmUuYysxLW9lLG50PS0xKX0oKEV0PStqbi5nZXRBdHRyaWJ1''@;'; put 'put ''dGUoInJvd3NwYW4iKXx8MSk+MXx8VnQ+MSkmJlplLnB1c2goe3M6e3I6ZnQrc2UsYzpidCtvZX0sZTp7cjpmdCtzZSsoRXR8fDEpLTEsYzpidCtvZSsoVnR8fDEpLTF9fSk7dmFyIGdyPWpuLmdldEF0dHJpYnV0ZSgidCIpfHwiIixxbj1qbi5nZXRBdHRyaWJ1dGUoImJnY29sb3IiKTtlOmlm''@;'; put 'put ''KHR5cGVvZiBQPCJ1Iil7aWYobnVsbD09a24mJihrbj1QKGpuKSksbnVsbD09a24pYnJlYWsgZTtpZihrbi5zdHlsZXx8KGtuLnN0eWxlPXt9KSwxPT1WdCYma24ud2lkdGgmJihkWyIhY29scyJdW2J0K29lXT1kWyIhY29scyJdW2J0K29lXXx8e30sa24ud2lkdGgubWF0Y2goL3B4Lyk/ZFsi''@;'; put 'put ''IWNvbHMiXVtidCtvZV0ud3B4PU1hdGgubWF4KHBhcnNlSW50KGtuLndpZHRoLDEwKSs1LGRbIiFjb2xzIl1bYnQrb2VdLndweHx8MCk6a24ud2lkdGgubWF0Y2goL3B0LykmJihkWyIhY29scyJdW2J0K29lXS53cHg9TWF0aC5tYXgoNCpwYXJzZUludChrbi53aWR0aCwxMCkvMys1LGRbIiFj''@;'; put 'put ''b2xzIl1bYnQrb2VdLndweHx8MCkpKSxFdDw9MSl7bXRbZnQrc2VdfHwobXRbZnQrc2VdPXt9KTt2YXIgX2k9a24uaGVpZ2h0OyhfaT1faS5tYXRjaCgvcHQvKT9OZyhwYXJzZUludChfaSwxMCkpOnBhcnNlSW50KF9pLDEwKSk+KG10W2Z0K3NlXS5ocHh8fE5nKG10W2Z0K3NlXS5ocHQpfHww''@;'; put 'put ''KSYmKGRlbGV0ZSBtdFtmdCtzZV0uaHB0LG10W2Z0K3NlXS5ocHg9X2kpfX12YXIgT2k9am47aWYoam4uZmlyc3RFbGVtZW50Q2hpbGQmJjE9PWpuLmNoaWxkcmVuLmxlbmd0aCYmInNwYW4iPT1qbi5maXJzdEVsZW1lbnRDaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXtmb3IodmFyIHNv''@;'; put 'put ''PTAsbW89am4uY2hpbGROb2RlcyxMaT0wO0xpPG1vLmxlbmd0aDsrK0xpKTM9PW1vW0xpXS5ub2RlVHlwZSYmKytzbzswPT1zbyYmKGpuPWpuLmZpcnN0RWxlbWVudENoaWxkKX12YXIga3I9RVIoam4sT2ksZ3IsMCxRKTtpZihrbil7dmFyIERuPVAoam4pO2lmKERuJiYhRG4uc3R5bGUmJihE''@;'; put 'put ''bi5zdHlsZT17fSksKERuJiZEblsiYmFja2dyb3VuZC1jb2xvciJdfHxrblsiYmFja2dyb3VuZC1jb2xvciJdKSYmKGtyLnN8fChrci5zPXt9KSwha3Iucy5mZ0NvbG9yKSl0cnl7dmFyIE9yPURuJiZEblsiYmFja2dyb3VuZC1jb2xvciJdfHxrblsiYmFja2dyb3VuZC1jb2xvciJdO09yLm1h''@;'; put 'put ''dGNoKC9yZ2JhWyhdXHMqMC4qWyldL2kpJiYoT3I9a25bImJhY2tncm91bmQtY29sb3IiXSk7dmFyIF9yPVRmKE9yLnRvTG93ZXJDYXNlKCksITApO19yPj0wJiYoa3Iucy5mZ0NvbG9yPXtyZ2I6X3J9KX1jYXRjaHt9c3dpdGNoKGtuWyJ2ZXJ0aWNhbC1hbGlnbiJdKXtjYXNlIm1pZGRsZSI6''@;'; put 'put ''Y2FzZSJiYXNlbGluZSI6a3Iuc3x8KGtyLnM9e30pLGtyLnMuYWxpZ25tZW50fHwoa3Iucy5hbGlnbm1lbnQ9e30pLGtyLnMuYWxpZ25tZW50LnZlcnRpY2FsPSJjZW50ZXIifX1pZihxbiYmKGtyLnN8fChrci5zPXt9KSwha3Iucy5mZ0NvbG9yKSl0cnl7dmFyIE1uPVRmKHFuLnRvTG93ZXJD''@;'; put 'put ''YXNlKCksITApO01uPj0wJiYoa3Iucy5mZ0NvbG9yPXtyZ2I6TW59KX1jYXRjaHt9aWYoUS5kZW5zZT8oZFtmdCtzZV18fChkW2Z0K3NlXT1bXSksZFtmdCtzZV1bYnQrb2VdPWtyKTpkW3FpKHtjOmJ0K29lLHI6ZnQrc2V9KV09a3IsRXQ+MXx8VnQ+MSlmb3IodmFyIE5yPWZ0O05yPGZ0K0V0''@;'; put 'put ''OysrTnIpZm9yKHZhciBqaT1idDtqaTxidCtWdDsrK2ppKWZ0PT1OciYmYnQ9PWppfHwoUS5kZW5zZT8oZFtOcitzZV18fChkW05yK3NlXT1bXSksZFtOcitzZV1bamkrb2VdPXt0OiJ6IixzOlFyKGtyLnN8fHt9KX0pOmRbcWkoe2M6amkrb2UscjpOcitzZX0pXT17dDoieiIsczpRcihrci5z''@;'; put 'put ''fHx7fSl9KTtOZS5lLmM8YnQrb2UmJihOZS5lLmM9YnQrb2UpLGJ0Kz1WdH19KytmdH19aWYoWmUubGVuZ3RoJiYoZFsiIW1lcmdlcyJdPShkWyIhbWVyZ2VzIl18fFtdKS5jb25jYXQoWmUpKSxOZS5lLnI9TWF0aC5tYXgoTmUuZS5yLGZ0LTErc2UpLGRbIiFyZWYiXT1odChOZSksZnQ+PUxl''@;'; put 'put ''JiYoZFsiIWZ1bGxyZWYiXT1odCgoTmUuZS5yPVQubGVuZ3RoLVFlK2Z0LTErc2UsTmUpKSksUS5ib3JkZXJzKWZvcihmdD1OZS5zLnI7ZnQ8PU5lLmUucjsrK2Z0KWZvcihidD1OZS5zLmM7YnQ8PU5lLmUuYzsrK2J0KWlmKCFRLmRlbnNlKXt2YXIgYmk9ZFtxaSh7cjpmdCxjOmJ0fSldO2lm''@;'; put 'put ''KCFiaXx8IWJpLnMpY29udGludWU7aWYoZnQ+MCl7dmFyIE5vPWRbcWkoe3I6ZnQtMSxjOmJ0fSldO05vJiZOby5zJiZOby5zLmJvdHRvbSYmZGVsZXRlIGJpLnMudG9wfWlmKGJ0PjApe3ZhciBZYT1kW3FpKHtyOmZ0LGM6YnQtMX0pXTtZYSYmWWEucyYmWWEucy5ib3R0b20mJmRlbGV0ZSBi''@;'; put 'put ''aS5zLmxlZnR9fXJldHVybiBkfWZ1bmN0aW9uIFRSKGQsXyl7cmV0dXJuIE1SKChffHx7fSkuZGVuc2U/W106e30sZCxfKX12YXIgeFI9ZnVuY3Rpb24oKXt2YXIgZD1mdW5jdGlvbihULFAsUSl7dmFyIHNlPVQucmVwbGFjZSgvW1x0XHJcbl0vZywiICIpLnRyaW0oKS5yZXBsYWNlKC8gKy9n''@;'; put 'put ''LCIgIikucmVwbGFjZSgvPHRleHQ6c1wvPi9nLCIgIikucmVwbGFjZSgvPHRleHQ6cyB0ZXh0OmM9IihcZCspIlwvPi9nLGZ1bmN0aW9uKE5lLEJlKXtyZXR1cm4gQXJyYXkocGFyc2VJbnQoQmUsMTApKzEpLmpvaW4oIiAiKX0pLnJlcGxhY2UoLzx0ZXh0OnRhYltePl0qXC8+L2csIlx0Iiku''@;'; put 'put ''cmVwbGFjZSgvPHRleHQ6bGluZS1icmVha1wvPi9nLCJcbiIpLG9lPUNpKHNlLnJlcGxhY2UoLzxbXj5dKj4vZywiIikpLGRlPVtdLExlPTA7cmV0dXJuIHNlLnJlcGxhY2UoLyg8dGV4dDpzcGFuLio/PikoLio/KTxbXC9ddGV4dDpzcGFuPi9nLGZ1bmN0aW9uKE5lLEJlLFplLG50KXtudCE9''@;'; put 'put ''TGUmJmRlLnB1c2goe3Q6InMiLHY6Q2koc2Uuc2xpY2UoTGUsbnQpKX0pO3ZhciBtdD17dDoicyIsdjpDaShaZSl9LFFlPVhyKEJlKVsic3R5bGUtbmFtZSJdO3JldHVybiBRZSYmUVtRZV0mJihtdC5zPVFyKFFbUWVdKSksZGUucHVzaChtdCksTGU9bnQrTmUubGVuZ3RoLCIifSksTGU8c2Uu''@;'; put 'put ''bGVuZ3RoJiZkZS5wdXNoKHt0OiJzIix2OkNpKHNlLnNsaWNlKExlKSl9KSxbb2UsZGVdfSxfPXtkYXk6WyJkIiwiZGQiXSxtb250aDpbIm0iLCJtbSJdLHllYXI6WyJ5IiwieXkiXSxob3VyczpbImgiLCJoaCJdLG1pbnV0ZXM6WyJtIiwibW0iXSxzZWNvbmRzOlsicyIsInNzIl0sImFtLXBt''@;'; put 'put ''IjpbIkEvUCIsIkFNL1BNIl0sImRheS1vZi13ZWVrIjpbImRkZCIsImRkZGQiXSxlcmE6WyJlIiwiZWUiXSxxdWFydGVyOlsiXFxRbSIsJ21cXCJ0aCBxdWFydGVyIiddfSxtPWZ1bmN0aW9uKFQsUCl7dmFyIFE9WHIoVC5zbGljZSgwLFQuaW5kZXhPZigiPiIpKSksc2U9VC5zbGljZShULmlu''@;'; put 'put ''ZGV4T2YoIj4iKSsxKSxvZT17bmFtZTpRLm5hbWUsZmFtaWx5OlEuZmFtaWx5fTtbWyJwYXJlbnQiLCJwYXJlbnQtc3R5bGUtbmFtZSJdLFsiZGF0YW5hbWUiLCJkYXRhLXN0eWxlLW5hbWUiXSxbIm1wbmFtZSIsIm1hc3Rlci1wYWdlLW5hbWUiXV0uZm9yRWFjaChmdW5jdGlvbihMZSl7UVtM''@;'; put 'put ''ZVsxXV0mJihvZVtMZVswXV09UVtMZVsxXV0pfSk7dmFyIGRlPXt9O3NlLnJlcGxhY2UoQm4sZnVuY3Rpb24oTGUpe3ZhciBOZT1YcihMZSk7aWYoIjxzdHlsZTp0ZXh0LXByb3BlcnRpZXMiPT09TmVbMF0pe2lmKE5lWyJmb250LXdlaWdodCJdJiYoZGUuYm9sZD0rKCJib2xkIj09TmVbImZv''@;'; put 'put ''bnQtd2VpZ2h0Il18fCI3MDAiPT1OZVsiZm9udC13ZWlnaHQiXSkpLCgiaXRhbGljIj09TmVbImZvbnQtc3R5bGUiXXx8Im9ibGlxdWUiPT1OZVsiZm9udC1zdHlsZSJdKSYmKGRlLml0YWxpYz0xKSwibm9uZSIhPShOZVsidGV4dC11bmRlcmxpbmUtc3R5bGUiXXx8Im5vbmUiKT9kZS51bmRl''@;'; put 'put ''cmxpbmU9ImRvdWJsZSI9PU5lWyJ0ZXh0LXVuZGVybGluZS10eXBlIl0/MjoxOihOZVsidGV4dC11bmRlcmxpbmUtc3R5bGUiXXx8Im5vbmUiPT1OZVsidGV4dC11bmRlcmxpbmUtdHlwZSJdKSYmKGRlLnVuZGVybGluZT0wKSwoTmVbImZvbnQtc2l6ZSJdfHwiIikubWF0Y2goL3B0JC8pJiYo''@;'; put 'put ''ZGUuc3o9K05lWyJmb250LXNpemUiXS5yZXBsYWNlKCJwdCIsIiIpKSwibm9uZSIhPShOZVsidGV4dC1saW5lLXRocm91Z2gtc3R5bGUiXXx8Im5vbmUiKSYmKGRlLnN0cmlrZT0xKSxOZVsiZm9udC1uYW1lIl0mJihkZS5uYW1lPU5lWyJmb250LW5hbWUiXSksTmUuY29sb3Ipe3ZhciBCZT1U''@;'; put 'put ''ZihOZS5jb2xvciwhMCk7QmU+PTAmJihkZS5jb2xvcj1CZSl9c3dpdGNoKE5lWyJ0ZXh0LXBvc2l0aW9uIl0pe2Nhc2Uic3VwZXIiOmRlLnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2Uic3ViIjpkZS52YWxpZ249InN1YiI7YnJlYWs7ZGVmYXVsdDooTmVbInRleHQtcG9zaXRpb24iXXx8IiIp''@;'; put 'put ''Lm1hdGNoKC8lLykmJihkZS52YWxpZ249Ii0iPT1OZVsidGV4dC1wb3NpdGlvbiJdLmNoYXJBdCgwKT8ic3ViIjoic3VwZXIiKX0ibm9uZSIhPShOZVsidGV4dC1zaGFkb3ciXXx8Im5vbmUiKSYmKGRlLnNoYWRvdz0xKX1yZXR1cm4iIn0pLFBbUS5uYW1lXT1kZX07cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KFAsUSl7dmFyIExlLE5lLG10LFFlLEV0LFZ0LHNlPVF8fHt9LG9lPVFTKFApLGRlPVtdLEJlPXtuYW1lOiIifSxaZT0iIixudD0wLGZ0PXt9LGt0PVtdLGJ0PXNlLmRlbnNlP1tdOnt9LHVuPXt2YWx1ZToiIn0sbnI9IiIsbm49MCxqbj1bXSxrbj0tMSxzcj0tMSxncj17czp7cjoxZTYsYzox''@;'; put 'put ''ZTd9LGU6e3I6MCxjOjB9fSxxbj0wLF9pPXt9LE9pPVtdLHNvPXt9LG1vPTAsTGk9MCxrcj1bXSxEbj0xLE9yPTEsX3I9W10sTW49e05hbWVzOltdfSxOcj17fSxqaT1bIiIsIiJdLGJpPVtdLE5vPXt9LFlhPXt9LHVvPTAsTXM9IiIsZGE9MCwkYT0hMSxTYT0hMSxQaT0wO2ZvcihXOS5sYXN0''@;'; put 'put ''SW5kZXg9MCxvZT1vZS5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpO0V0PVc5LmV4ZWMob2UpOylzd2l0Y2goRXRbM109RXRbM10ucmVwbGFjZSgvXy4qJC8sIiIpKXtjYXNlInRhYmxlIjpjYXNlIlx1''@;'; put 'put ''NWRlNVx1NGY1Y1x1ODg2OCI6Ii8iPT09RXRbMV0/KGJ0WyIhcmVmIl09Z3IuZS5jPj1nci5zLmMmJmdyLmUucj49Z3Iucy5yP2h0KGdyKToiQTE6QTEiLHNlLnNoZWV0Um93cz4wJiZzZS5zaGVldFJvd3M8PWdyLmUuciYmKGJ0WyIhZnVsbHJlZiJdPWJ0WyIhcmVmIl0sZ3IuZS5yPXNlLnNo''@;'; put 'put ''ZWV0Um93cy0xLGJ0WyIhcmVmIl09aHQoZ3IpKSxPaS5sZW5ndGgmJihidFsiIW1lcmdlcyJdPU9pKSxrci5sZW5ndGgmJihidFsiIXJvd3MiXT1rciksbXQubmFtZT1tdC5cdTU0MGRcdTc5ZjB8fG10Lm5hbWUsdHlwZW9mIEpTT048InUiJiZKU09OLnN0cmluZ2lmeShtdCksa3QucHVzaCht''@;'; put 'put ''dC5uYW1lKSxmdFttdC5uYW1lXT1idCxTYT0hMSk6Ii8iIT09RXRbMF0uY2hhckF0KEV0WzBdLmxlbmd0aC0yKSYmKG10PVhyKEV0WzBdLCExKSxrbj1zcj0tMSxnci5zLnI9Z3Iucy5jPTFlNyxnci5lLnI9Z3IuZS5jPTAsYnQ9c2UuZGVuc2U/W106e30sT2k9W10sa3I9W10sU2E9ITApO2Jy''@;'; put 'put ''ZWFrO2Nhc2UidGFibGUtcm93LWdyb3VwIjoiLyI9PT1FdFsxXT8tLXFuOisrcW47YnJlYWs7Y2FzZSJ0YWJsZS1yb3ciOmNhc2UiXHU4ODRjIjppZigiLyI9PT1FdFsxXSl7a24rPURuLERuPTE7YnJlYWt9aWYoKFFlPVhyKEV0WzBdLCExKSkuXHU4ODRjXHU1M2Y3P2tuPVFlLlx1ODg0Y1x1''@;'; put 'put ''NTNmNy0xOi0xPT1rbiYmKGtuPTApLChEbj0rUWVbIm51bWJlci1yb3dzLXJlcGVhdGVkIl18fDEpPDEwKWZvcihQaT0wO1BpPERuOysrUGkpcW4+MCYmKGtyW2tuK1BpXT17bGV2ZWw6cW59KTtzcj0tMTticmVhaztjYXNlImNvdmVyZWQtdGFibGUtY2VsbCI6Ii8iIT09RXRbMV0mJisrc3Is''@;'; put 'put ''c2Uuc2hlZXRTdHVicyYmKHNlLmRlbnNlPyhidFtrbl18fChidFtrbl09W10pLGJ0W2tuXVtzcl09e3Q6InoifSk6YnRbcWkoe3I6a24sYzpzcn0pXT17dDoieiJ9KSxucj0iIixqbj1bXTticmVhaztjYXNlInRhYmxlLWNlbGwiOmNhc2UiXHU2NTcwXHU2MzZlIjppZigiLyI9PT1FdFswXS5j''@;'; put 'put ''aGFyQXQoRXRbMF0ubGVuZ3RoLTIpKSsrc3IsdW49WHIoRXRbMF0sITEpLE9yPXBhcnNlSW50KHVuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLFZ0PXt0OiJ6Iix2Om51bGx9LHVuLmZvcm11bGEmJjAhPXNlLmNlbGxGb3JtdWxhJiYoVnQuZj1JayhDaSh1bi5mb3JtdWxh''@;'; put 'put ''KSkpLCJzdHJpbmciPT0odW4uXHU2NTcwXHU2MzZlXHU3YzdiXHU1NzhifHx1blsidmFsdWUtdHlwZSJdKSYmKFZ0LnQ9InMiLFZ0LnY9Q2kodW5bInN0cmluZy12YWx1ZSJdfHwiIiksc2UuZGVuc2U/KGJ0W2tuXXx8KGJ0W2tuXT1bXSksYnRba25dW3NyXT1WdCk6YnRbcWkoe3I6a24sYzpz''@;'; put 'put ''cn0pXT1WdCksc3IrPU9yLTE7ZWxzZSBpZigiLyIhPT1FdFsxXSl7T3I9MTt2YXIgUGM9RG4/a24rRG4tMTprbjtpZigrK3NyPmdyLmUuYyYmKGdyLmUuYz1zciksc3I8Z3Iucy5jJiYoZ3Iucy5jPXNyKSxrbjxnci5zLnImJihnci5zLnI9a24pLFBjPmdyLmUuciYmKGdyLmUucj1QYyksYmk9''@;'; put 'put ''W10sTm89e30sVnQ9e3Q6KHVuPVhyKEV0WzBdLCExKSkuXHU2NTcwXHU2MzZlXHU3YzdiXHU1NzhifHx1blsidmFsdWUtdHlwZSJdLHY6bnVsbH0sc2UuY2VsbEZvcm11bGEpaWYodW4uZm9ybXVsYSYmKHVuLmZvcm11bGE9Q2kodW4uZm9ybXVsYSkpLHVuWyJudW1iZXItbWF0cml4LWNvbHVt''@;'; put 'put ''bnMtc3Bhbm5lZCJdJiZ1blsibnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXSYmKG1vPXBhcnNlSW50KHVuWyJudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdLDEwKXx8MCxMaT1wYXJzZUludCh1blsibnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXSwxMCl8fDAsVnQuRj1odChz''@;'; put 'put ''bz17czp7cjprbixjOnNyfSxlOntyOmtuK21vLTEsYzpzcitMaS0xfX0pLF9yLnB1c2goW3NvLFZ0LkZdKSksdW4uZm9ybXVsYSlWdC5mPUlrKHVuLmZvcm11bGEpO2Vsc2UgZm9yKFBpPTA7UGk8X3IubGVuZ3RoOysrUGkpa24+PV9yW1BpXVswXS5zLnImJmtuPD1fcltQaV1bMF0uZS5yJiZz''@;'; put 'put ''cj49X3JbUGldWzBdLnMuYyYmc3I8PV9yW1BpXVswXS5lLmMmJihWdC5GPV9yW1BpXVsxXSk7c3dpdGNoKCh1blsibnVtYmVyLWNvbHVtbnMtc3Bhbm5lZCJdfHx1blsibnVtYmVyLXJvd3Mtc3Bhbm5lZCJdKSYmKG1vPXBhcnNlSW50KHVuWyJudW1iZXItcm93cy1zcGFubmVkIl0sMTApfHww''@;'; put 'put ''LExpPXBhcnNlSW50KHVuWyJudW1iZXItY29sdW1ucy1zcGFubmVkIl0sMTApfHwwLE9pLnB1c2goc289e3M6e3I6a24sYzpzcn0sZTp7cjprbittby0xLGM6c3IrTGktMX19KSksdW5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl0mJihPcj1wYXJzZUludCh1blsibnVtYmVyLWNvbHVtbnMt''@;'; put 'put ''cmVwZWF0ZWQiXSwxMCkpLFZ0LnQpe2Nhc2UiYm9vbGVhbiI6VnQudD0iYiIsVnQudj1UaSh1blsiYm9vbGVhbi12YWx1ZSJdKTticmVhaztjYXNlImZsb2F0IjpjYXNlInBlcmNlbnRhZ2UiOmNhc2UiY3VycmVuY3kiOlZ0LnQ9Im4iLFZ0LnY9cGFyc2VGbG9hdCh1bi52YWx1ZSk7YnJlYWs7''@;'; put 'put ''Y2FzZSJkYXRlIjpWdC50PSJkIixWdC52PWxuKHVuWyJkYXRlLXZhbHVlIl0pLHNlLmNlbGxEYXRlc3x8KFZ0LnQ9Im4iLFZ0LnY9S2UoVnQudikpLFZ0Lno9Im0vZC95eSI7YnJlYWs7Y2FzZSJ0aW1lIjpWdC50PSJuIixWdC52PWd0KHVuWyJ0aW1lLXZhbHVlIl0pLzg2NDAwLHNlLmNlbGxE''@;'; put 'put ''YXRlcyYmKFZ0LnQ9ImQiLFZ0LnY9JHQoVnQudikpLFZ0Lno9IkhIOk1NOlNTIjticmVhaztjYXNlIm51bWJlciI6VnQudD0ibiIsVnQudj1wYXJzZUZsb2F0KHVuLlx1NjU3MFx1NjM2ZVx1NjU3MFx1NTAzYyk7YnJlYWs7ZGVmYXVsdDppZigic3RyaW5nIiE9PVZ0LnQmJiJ0ZXh0IiE9PVZ0''@;'; put 'put ''LnQmJlZ0LnQpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB2YWx1ZSB0eXBlICIrVnQudCk7VnQudD0icyIsbnVsbCE9dW5bInN0cmluZy12YWx1ZSJdJiYobnI9Q2kodW5bInN0cmluZy12YWx1ZSJdKSxqbj1bXSl9fWVsc2V7aWYoJGE9ITEsInMiPT09VnQudCYmKFZ0LnY9bnJ8fCIi''@;'; put 'put ''LGpuLmxlbmd0aCYmKFZ0LlI9am4pLCRhPTA9PW5uKSxOci5UYXJnZXQmJihWdC5sPU5yKSxiaS5sZW5ndGg+MCYmKFZ0LmM9YmksYmk9W10pLG5yJiYhMSE9PXNlLmNlbGxUZXh0JiYoVnQudz1uciksJGEmJihWdC50PSJ6IixkZWxldGUgVnQudiksc2UuY2VsbEhUTUwmJihWdC5oPVZ0LlI/''@;'; put 'put ''dVMoVnQuUik6JGkoIiIrVnQudikpLCghJGF8fHNlLnNoZWV0U3R1YnMpJiYhKHNlLnNoZWV0Um93cyYmc2Uuc2hlZXRSb3dzPD1rbikpZm9yKHZhciB4bj0wO3huPERuOysreG4pe2lmKE9yPXBhcnNlSW50KHVuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLHNlLmRlbnNl''@;'; put 'put ''KWZvcihidFtrbit4bl18fChidFtrbit4bl09W10pLGJ0W2tuK3huXVtzcl09MD09eG4/VnQ6UXIoVnQpOy0tT3I+MDspYnRba24reG5dW3NyK09yXT1RcihWdCk7ZWxzZSBmb3IoYnRbcWkoe3I6a24reG4sYzpzcn0pXT1WdDstLU9yPjA7KWJ0W3FpKHtyOmtuK3huLGM6c3IrT3J9KV09UXIo''@;'; put 'put ''VnQpO2dyLmUuYzw9c3ImJihnci5lLmM9c3IpfXNyKz0oT3I9cGFyc2VJbnQodW5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCkpLTEsT3I9MCxWdD17fSxucj0iIixqbj1bXX1Ocj17fTticmVhaztjYXNlImRvY3VtZW50IjpjYXNlImRvY3VtZW50LWNvbnRlbnQiOmNhc2Ui''@;'; put 'put ''XHU3NTM1XHU1YjUwXHU4ODY4XHU2ODNjXHU2NTg3XHU2ODYzIjpjYXNlInNwcmVhZHNoZWV0IjpjYXNlIlx1NGUzYlx1NGY1MyI6Y2FzZSJzY3JpcHRzIjpjYXNlInN0eWxlcyI6Y2FzZSJmb250LWZhY2UtZGVjbHMiOmNhc2UibWFzdGVyLXN0eWxlcyI6aWYoIi8iPT09RXRbMV0pe2lmKChM''@;'; put 'put ''ZT1kZS5wb3AoKSlbMF0hPT1FdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIrTGV9ZWxzZSIvIiE9PUV0WzBdLmNoYXJBdChFdFswXS5sZW5ndGgtMikmJmRlLnB1c2goW0V0WzNdLCEwXSk7YnJlYWs7Y2FzZSJhbm5vdGF0aW9uIjppZigiLyI9PT1FdFsxXSl7aWYoKExlPWRlLnBvcCgpKVswXSE9''@;'; put 'put ''PUV0WzNdKXRocm93IkJhZCBzdGF0ZTogIitMZTtOby50PW5yLGpuLmxlbmd0aCYmKE5vLlI9am4pLE5vLmE9TXMsYmkucHVzaChObyl9ZWxzZSIvIiE9PUV0WzBdLmNoYXJBdChFdFswXS5sZW5ndGgtMikmJmRlLnB1c2goW0V0WzNdLCExXSk7TXM9IiIsZGE9MCxucj0iIixubj0wLGpuPVtd''@;'; put 'put ''O2JyZWFrO2Nhc2UiY3JlYXRvciI6Ii8iPT09RXRbMV0/TXM9b2Uuc2xpY2UoZGEsRXQuaW5kZXgpOmRhPUV0LmluZGV4K0V0WzBdLmxlbmd0aDticmVhaztjYXNlIm1ldGEiOmNhc2UiXHU1MTQzXHU2NTcwXHU2MzZlIjpjYXNlInNldHRpbmdzIjpjYXNlImNvbmZpZy1pdGVtLXNldCI6Y2Fz''@;'; put 'put ''ZSJjb25maWctaXRlbS1tYXAtaW5kZXhlZCI6Y2FzZSJjb25maWctaXRlbS1tYXAtZW50cnkiOmNhc2UiY29uZmlnLWl0ZW0tbWFwLW5hbWVkIjpjYXNlInNoYXBlcyI6Y2FzZSJmcmFtZSI6Y2FzZSJ0ZXh0LWJveCI6Y2FzZSJpbWFnZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlcyI6Y2FzZSJs''@;'; put 'put ''aXN0LXN0eWxlIjpjYXNlImZvcm0iOmNhc2UiZGRlLWxpbmtzIjpjYXNlImV2ZW50LWxpc3RlbmVycyI6Y2FzZSJjaGFydCI6aWYoIi8iPT09RXRbMV0pe2lmKChMZT1kZS5wb3AoKSlbMF0hPT1FdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIrTGV9ZWxzZSIvIiE9PUV0WzBdLmNoYXJBdChFdFsw''@;'; put 'put ''XS5sZW5ndGgtMikmJmRlLnB1c2goW0V0WzNdLCExXSk7bnI9IiIsbm49MCxqbj1bXTticmVhaztjYXNlInNjaWVudGlmaWMtbnVtYmVyIjpjYXNlImN1cnJlbmN5LXN5bWJvbCI6Y2FzZSJjdXJyZW5jeS1zdHlsZSI6Y2FzZSJzY3JpcHQiOmNhc2UibGlicmFyaWVzIjpjYXNlImF1dG9tYXRp''@;'; put 'put ''Yy1zdHlsZXMiOmNhc2UiZGVmYXVsdC1zdHlsZSI6Y2FzZSJwYWdlLWxheW91dCI6Y2FzZSJtYXAiOmNhc2UiZm9udC1mYWNlIjpjYXNlInBhcmFncmFwaC1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLXByb3BlcnRpZXMiOmNhc2UidGFibGUtY29sdW1uLXByb3BlcnRpZXMiOmNhc2UidGFibGUt''@;'; put 'put ''cm93LXByb3BlcnRpZXMiOmNhc2UidGFibGUtY2VsbC1wcm9wZXJ0aWVzIjpjYXNlImZyYWN0aW9uIjpjYXNlImJvb2xlYW4tc3R5bGUiOmNhc2UiYm9vbGVhbiI6Y2FzZSJ0ZXh0LXN0eWxlIjpjYXNlInRleHQtY29udGVudCI6Y2FzZSJ0ZXh0LXByb3BlcnRpZXMiOmNhc2UiZW1iZWRkZWQt''@;'; put 'put ''dGV4dCI6Y2FzZSJib2R5IjpjYXNlIlx1NzUzNVx1NWI1MFx1ODg2OFx1NjgzYyI6Y2FzZSJmb3JtcyI6Y2FzZSJ0YWJsZS1jb2x1bW4iOmNhc2UidGFibGUtaGVhZGVyLXJvd3MiOmNhc2UidGFibGUtcm93cyI6Y2FzZSJ0YWJsZS1jb2x1bW4tZ3JvdXAiOmNhc2UidGFibGUtaGVhZGVyLWNv''@;'; put 'put ''bHVtbnMiOmNhc2UidGFibGUtY29sdW1ucyI6Y2FzZSJudWxsLWRhdGUiOmNhc2UiZ3JhcGhpYy1wcm9wZXJ0aWVzIjpjYXNlImNhbGN1bGF0aW9uLXNldHRpbmdzIjpjYXNlIm5hbWVkLWV4cHJlc3Npb25zIjpjYXNlImxhYmVsLXJhbmdlIjpjYXNlImxhYmVsLXJhbmdlcyI6Y2FzZSJuYW1l''@;'; put 'put ''ZC1leHByZXNzaW9uIjpjYXNlInNvcnQiOmNhc2Uic29ydC1ieSI6Y2FzZSJzb3J0LWdyb3VwcyI6Y2FzZSJ0YWIiOmNhc2UibGluZS1icmVhayI6Y2FzZSJzcGFuIjpjYXNlInMiOmNhc2UiZGF0ZSI6Y2FzZSJvYmplY3QiOmNhc2UidGl0bGUiOmNhc2UiXHU2ODA3XHU5ODk4IjpjYXNlImRl''@;'; put 'put ''c2MiOmNhc2UiYmluYXJ5LWRhdGEiOmNhc2UidGFibGUtc291cmNlIjpjYXNlInNjZW5hcmlvIjpjYXNlIml0ZXJhdGlvbiI6Y2FzZSJjb250ZW50LXZhbGlkYXRpb25zIjpjYXNlImNvbnRlbnQtdmFsaWRhdGlvbiI6Y2FzZSJoZWxwLW1lc3NhZ2UiOmNhc2UiZXJyb3ItbWVzc2FnZSI6Y2Fz''@;'; put 'put ''ZSJkYXRhYmFzZS1yYW5nZXMiOmNhc2UiZmlsdGVyIjpjYXNlImZpbHRlci1hbmQiOmNhc2UiZmlsdGVyLW9yIjpjYXNlImZpbHRlci1jb25kaXRpb24iOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1idWxsZXQiOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1udW1iZXIiOmNhc2UibGlzdC1sZXZlbC1w''@;'; put 'put ''cm9wZXJ0aWVzIjpjYXNlInNlbmRlci1maXJzdG5hbWUiOmNhc2Uic2VuZGVyLWxhc3RuYW1lIjpjYXNlInNlbmRlci1pbml0aWFscyI6Y2FzZSJzZW5kZXItdGl0bGUiOmNhc2Uic2VuZGVyLXBvc2l0aW9uIjpjYXNlInNlbmRlci1lbWFpbCI6Y2FzZSJzZW5kZXItcGhvbmUtcHJpdmF0ZSI6''@;'; put 'put ''Y2FzZSJzZW5kZXItZmF4IjpjYXNlInNlbmRlci1jb21wYW55IjpjYXNlInNlbmRlci1waG9uZS13b3JrIjpjYXNlInNlbmRlci1zdHJlZXQiOmNhc2Uic2VuZGVyLWNpdHkiOmNhc2Uic2VuZGVyLXBvc3RhbC1jb2RlIjpjYXNlInNlbmRlci1jb3VudHJ5IjpjYXNlInNlbmRlci1zdGF0ZS1v''@;'; put 'put ''ci1wcm92aW5jZSI6Y2FzZSJhdXRob3ItbmFtZSI6Y2FzZSJhdXRob3ItaW5pdGlhbHMiOmNhc2UiY2hhcHRlciI6Y2FzZSJmaWxlLW5hbWUiOmNhc2UidGVtcGxhdGUtbmFtZSI6Y2FzZSJzaGVldC1uYW1lIjpjYXNlImV2ZW50LWxpc3RlbmVyIjpjYXNlImluaXRpYWwtY3JlYXRvciI6Y2Fz''@;'; put 'put ''ZSJjcmVhdGlvbi1kYXRlIjpjYXNlInByaW50LWRhdGUiOmNhc2UiZ2VuZXJhdG9yIjpjYXNlImRvY3VtZW50LXN0YXRpc3RpYyI6Y2FzZSJ1c2VyLWRlZmluZWQiOmNhc2UiZWRpdGluZy1kdXJhdGlvbiI6Y2FzZSJlZGl0aW5nLWN5Y2xlcyI6Y2FzZSJjb25maWctaXRlbSI6Y2FzZSJwYWdl''@;'; put 'put ''LW51bWJlciI6Y2FzZSJwYWdlLWNvdW50IjpjYXNlInRpbWUiOmNhc2UiY2VsbC1yYW5nZS1zb3VyY2UiOmNhc2UiZGV0ZWN0aXZlIjpjYXNlIm9wZXJhdGlvbiI6Y2FzZSJoaWdobGlnaHRlZC1yYW5nZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlIjpjYXNlInNvdXJjZS1jZWxsLXJhbmdlIjpj''@;'; put 'put ''YXNlInNvdXJjZS1zZXJ2aWNlIjpjYXNlImRhdGEtcGlsb3QtZmllbGQiOmNhc2UiZGF0YS1waWxvdC1sZXZlbCI6Y2FzZSJkYXRhLXBpbG90LXN1YnRvdGFscyI6Y2FzZSJkYXRhLXBpbG90LXN1YnRvdGFsIjpjYXNlImRhdGEtcGlsb3QtbWVtYmVycyI6Y2FzZSJkYXRhLXBpbG90LW1lbWJl''@;'; put 'put ''ciI6Y2FzZSJkYXRhLXBpbG90LWRpc3BsYXktaW5mbyI6Y2FzZSJkYXRhLXBpbG90LXNvcnQtaW5mbyI6Y2FzZSJkYXRhLXBpbG90LWxheW91dC1pbmZvIjpjYXNlImRhdGEtcGlsb3QtZmllbGQtcmVmZXJlbmNlIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXBzIjpjYXNlImRhdGEtcGlsb3QtZ3Jv''@;'; put 'put ''dXAiOmNhc2UiZGF0YS1waWxvdC1ncm91cC1tZW1iZXIiOmNhc2UicmVjdCI6Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNscyI6Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNsIjpjYXNlImRkZS1saW5rIjpjYXNlImRkZS1zb3VyY2UiOmNhc2UicHJvcGVydGllcyI6Y2FzZSJwcm9wZXJ0eSI6Y2Fz''@;'; put 'put ''ZSJ0YWJsZS1wcm90ZWN0aW9uIjpjYXNlImRhdGEtcGlsb3QtZ3JhbmQtdG90YWwiOmNhc2Uib2ZmaWNlLWRvY3VtZW50LWNvbW1vbi1hdHRycyI6YnJlYWs7Y2FzZSJudW1iZXItc3R5bGUiOmNhc2UicGVyY2VudGFnZS1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpjYXNlInRpbWUtc3R5bGUi''@;'; put 'put ''OmlmKCIvIj09PUV0WzFdKXtpZihfaVtCZS5uYW1lXT1aZSwoTGU9ZGUucG9wKCkpWzBdIT09RXRbM10pdGhyb3ciQmFkIHN0YXRlOiAiK0xlfWVsc2UiLyIhPT1FdFswXS5jaGFyQXQoRXRbMF0ubGVuZ3RoLTIpJiYoWmU9IiIsQmU9WHIoRXRbMF0sITEpLGRlLnB1c2goW0V0WzNdLCEwXSkp''@;'; put 'put ''O2JyZWFrO2Nhc2Uic3R5bGUiOiIvPiI9PT1FdFswXS5zbGljZSgtMik/bShFdFswXSxZYSk6Ii8iPT1FdFsxXT9tKG9lLnNsaWNlKHVvLEV0LmluZGV4K0V0WzBdLmxlbmd0aCksWWEpOnVvPUV0LmluZGV4O2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImRheSI6Y2FzZSJtb250aCI6Y2FzZSJ5''@;'; put 'put ''ZWFyIjpjYXNlImVyYSI6Y2FzZSJkYXktb2Ytd2VlayI6Y2FzZSJ3ZWVrLW9mLXllYXIiOmNhc2UicXVhcnRlciI6Y2FzZSJob3VycyI6Y2FzZSJtaW51dGVzIjpjYXNlInNlY29uZHMiOmNhc2UiYW0tcG0iOnN3aXRjaChkZVtkZS5sZW5ndGgtMV1bMF0pe2Nhc2UidGltZS1zdHlsZSI6Y2Fz''@;'; put 'put ''ZSJkYXRlLXN0eWxlIjpOZT1YcihFdFswXSwhMSksWmUrPV9bRXRbM11dWyJsb25nIj09PU5lLnN0eWxlPzE6MF19YnJlYWs7Y2FzZSJ0ZXh0IjppZigiLz4iPT09RXRbMF0uc2xpY2UoLTIpKWJyZWFrO2lmKCIvIj09PUV0WzFdKXN3aXRjaChkZVtkZS5sZW5ndGgtMV1bMF0pe2Nhc2UibnVt''@;'; put 'put ''YmVyLXN0eWxlIjpjYXNlImRhdGUtc3R5bGUiOmNhc2UidGltZS1zdHlsZSI6WmUrPW9lLnNsaWNlKG50LEV0LmluZGV4KX1lbHNlIG50PUV0LmluZGV4K0V0WzBdLmxlbmd0aDticmVhaztjYXNlIm5hbWVkLXJhbmdlIjpqaT1EUygoTmU9WHIoRXRbMF0sITEpKVsiY2VsbC1yYW5nZS1hZGRy''@;'; put 'put ''ZXNzIl0pO3ZhciB4bD17TmFtZTpOZS5uYW1lLFJlZjpqaVswXSsiISIramlbMV19O1NhJiYoeGwuU2hlZXQ9a3QubGVuZ3RoKSxNbi5OYW1lcy5wdXNoKHhsKTticmVhaztjYXNlInAiOmNhc2UiXHU2NTg3XHU2NzJjXHU0ZTMyIjppZihbIm1hc3Rlci1zdHlsZXMiXS5pbmRleE9mKGRlW2Rl''@;'; put 'put ''Lmxlbmd0aC0xXVswXSk+LTEpYnJlYWs7aWYoIi8iIT09RXRbMV18fHVuJiZ1blsic3RyaW5nLXZhbHVlIl0pWHIoRXRbMF0sITEpLG5uPUV0LmluZGV4K0V0WzBdLmxlbmd0aDtlbHNle3ZhciBxbD1kKG9lLnNsaWNlKG5uLEV0LmluZGV4KSwwLFlhKTtucj0obnIubGVuZ3RoPjA/bnIrIlxu''@;'; put 'put ''IjoiIikrcWxbMF0sam49cWxbMV19YnJlYWs7Y2FzZSJkYXRhYmFzZS1yYW5nZSI6aWYoIi8iPT09RXRbMV0pYnJlYWs7dHJ5e2Z0WyhqaT1EUyhYcihFdFswXSlbInRhcmdldC1yYW5nZS1hZGRyZXNzIl0pKVswXV1bIiFhdXRvZmlsdGVyIl09e3JlZjpqaVsxXX19Y2F0Y2h7fWJyZWFrO2Nh''@;'; put 'put ''c2UiYSI6aWYoIi8iIT09RXRbMV0pe2lmKCEoTnI9WHIoRXRbMF0sITEpKS5ocmVmKWJyZWFrO05yLlRhcmdldD1DaShOci5ocmVmKSxkZWxldGUgTnIuaHJlZiwiIyI9PU5yLlRhcmdldC5jaGFyQXQoMCkmJk5yLlRhcmdldC5pbmRleE9mKCIuIik+LTE/KGppPURTKE5yLlRhcmdldC5zbGlj''@;'; put 'put ''ZSgxKSksTnIuVGFyZ2V0PSIjIitqaVswXSsiISIramlbMV0pOk5yLlRhcmdldC5tYXRjaCgvXlwuXC5bXFxcL10vKSYmKE5yLlRhcmdldD1Oci5UYXJnZXQuc2xpY2UoMykpfWJyZWFrO2RlZmF1bHQ6c3dpdGNoKEV0WzJdKXtjYXNlImRjOiI6Y2FzZSJjYWxjZXh0OiI6Y2FzZSJsb2V4dDoi''@;'; put 'put ''OmNhc2Uib29vOiI6Y2FzZSJjaGFydG9vbzoiOmNhc2UiZHJhdzoiOmNhc2Uic3R5bGU6IjpjYXNlImNoYXJ0OiI6Y2FzZSJmb3JtOiI6Y2FzZSJ1b2Y6IjpjYXNlIlx1ODg2ODoiOmNhc2UiXHU1YjU3OiI6YnJlYWs7ZGVmYXVsdDppZihzZS5XVEYpdGhyb3cgbmV3IEVycm9yKEV0KX19dmFy''@;'; put 'put ''IGNoPXtTaGVldHM6ZnQsU2hlZXROYW1lczprdCxXb3JrYm9vazpNbn07cmV0dXJuIHNlLmJvb2tTaGVldHMmJmRlbGV0ZSBjaC5TaGVldHMsY2h9fSgpO2Z1bmN0aW9uIFd5KGQsXyl7cmV0dXJuIHhSKGQsXyl9dmFyIFplZT1mdW5jdGlvbigpe3ZhciBkPVsiICA8b2ZmaWNlOm1hc3Rlci1z''@;'; put 'put ''dHlsZXM+IiwnICAgIDxzdHlsZTptYXN0ZXItcGFnZSBzdHlsZTpuYW1lPSJtcDEiIHN0eWxlOnBhZ2UtbGF5b3V0LW5hbWU9Im1wMSI+JywiICAgICAgPHN0eWxlOmhlYWRlci8+IiwnICAgICAgPHN0eWxlOmhlYWRlci1sZWZ0IHN0eWxlOmRpc3BsYXk9ImZhbHNlIi8+JywiICAgICAgPHN0''@;'; put 'put ''eWxlOmZvb3Rlci8+IiwnICAgICAgPHN0eWxlOmZvb3Rlci1sZWZ0IHN0eWxlOmRpc3BsYXk9ImZhbHNlIi8+JywiICAgIDwvc3R5bGU6bWFzdGVyLXBhZ2U+IiwiICA8L29mZmljZTptYXN0ZXItc3R5bGVzPiJdLmpvaW4oIlxuIiksXz0iPG9mZmljZTpkb2N1bWVudC1zdHlsZXMgIitmYSh7''@;'; put 'put ''InhtbG5zOm9mZmljZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMCIsInhtbG5zOnRhYmxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0YWJsZToxLjAiLCJ4bWxuczpzdHlsZSI6InVybjpvYXNpczpuYW1lczp0Yzpv''@;'; put 'put ''cGVuZG9jdW1lbnQ6eG1sbnM6c3R5bGU6MS4wIiwieG1sbnM6dGV4dCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6dGV4dDoxLjAiLCJ4bWxuczpkcmF3IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkcmF3aW5nOjEuMCIsInhtbG5zOmZv''@;'; put 'put ''IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp4c2wtZm8tY29tcGF0aWJsZToxLjAiLCJ4bWxuczp4bGluayI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bWxuczpkYyI6Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiwieG1sbnM6bnVt''@;'; put 'put ''YmVyIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkYXRhc3R5bGU6MS4wIiwieG1sbnM6c3ZnIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdmctY29tcGF0aWJsZToxLjAiLCJ4bWxuczpvZiI6InVybjpvYXNpczpuYW1lczp0YzpvcGVu''@;'; put 'put ''ZG9jdW1lbnQ6eG1sbnM6b2Y6MS4yIiwib2ZmaWNlOnZlcnNpb24iOiIxLjIifSkrIj5cbiIrZCsiXG48L29mZmljZTpkb2N1bWVudC1zdHlsZXM+IjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcG8rX319KCksR2VlPWZ1bmN0aW9uKCl7dmFyIGQ9ZnVuY3Rpb24ob2UsZGUpe3JldHVybiBC''@;'; put 'put ''aShvZSkucmVwbGFjZSgvICArL2csZnVuY3Rpb24oTGUpe3JldHVybic8dGV4dDpzIHRleHQ6Yz0iJytMZS5sZW5ndGgrJyIvPid9KS5yZXBsYWNlKC9cdC9nLCI8dGV4dDp0YWIvPiIpLnJlcGxhY2UoL1xuL2csZGU/Ijx0ZXh0OmxpbmUtYnJlYWsvPiI6IjwvdGV4dDpwPjx0ZXh0OnA+Iiku''@;'; put 'put ''cmVwbGFjZSgvXiAvLCI8dGV4dDpzLz4iKS5yZXBsYWNlKC8gJC8sIjx0ZXh0OnMvPiIpfSxfPWZ1bmN0aW9uKG9lKXtyZXR1cm4gb2UubWFwKGZ1bmN0aW9uKGRlKXt2YXIgTGU9IiI7cmV0dXJuIG51bGwhPWRlLm9kcyYmKExlKz0nIHRleHQ6c3R5bGUtbmFtZT0iVCcrZGUub2RzKyciJyks''@;'; put 'put ''ZGUudj8iPHRleHQ6c3BhbiIrTGUrIj4iK2QoZGUudiwhMCkrIjwvdGV4dDpzcGFuPiI6IiJ9KS5qb2luKCIiKX0sbT0iICAgICAgICAgIDx0YWJsZTp0YWJsZS1jZWxsIC8+XG4iLFA9ZnVuY3Rpb24ob2UsZGUsTGUpe3ZhciBOZT1bXTtOZS5wdXNoKCcgICAgICA8dGFibGU6dGFibGUgdGFi''@;'; put 'put ''bGU6bmFtZT0iJytCaShkZS5TaGVldE5hbWVzW0xlXSkrJyIgdGFibGU6c3R5bGUtbmFtZT0idGExIj5cbicpO3ZhciBCZT0wLFplPTAsbnQ9emEob2VbIiFyZWYiXXx8IkExIiksbXQ9b2VbIiFtZXJnZXMiXXx8W10sUWU9MCxmdD1BcnJheS5pc0FycmF5KG9lKTtpZihvZVsiIWNvbHMiXSlm''@;'; put 'put ''b3IoWmU9MDtaZTw9bnQuZS5jOysrWmUpTmUucHVzaCgiICAgICAgICA8dGFibGU6dGFibGUtY29sdW1uIisob2VbIiFjb2xzIl1bWmVdPycgdGFibGU6c3R5bGUtbmFtZT0iY28nK29lWyIhY29scyJdW1plXS5vZHMrJyInOiIiKSsiPjwvdGFibGU6dGFibGUtY29sdW1uPlxuIik7dmFyIGJ0''@;'; put 'put ''PW9lWyIhcm93cyJdfHxbXTtmb3IoQmU9MDtCZTxudC5zLnI7KytCZSlOZS5wdXNoKCIgICAgICAgIDx0YWJsZTp0YWJsZS1yb3ciKyhidFtCZV0/JyB0YWJsZTpzdHlsZS1uYW1lPSJybycrYnRbQmVdLm9kcysnIic6IiIpKyI+PC90YWJsZTp0YWJsZS1yb3c+XG4iKTtmb3IoO0JlPD1udC5l''@;'; put 'put ''LnI7KytCZSl7Zm9yKE5lLnB1c2goIiAgICAgICAgPHRhYmxlOnRhYmxlLXJvdyIrKGJ0W0JlXT8nIHRhYmxlOnN0eWxlLW5hbWU9InJvJytidFtCZV0ub2RzKyciJzoiIikrIj5cbiIpLFplPTA7WmU8bnQucy5jOysrWmUpTmUucHVzaChtKTtmb3IoO1plPD1udC5lLmM7KytaZSl7dmFyIEV0''@;'; put 'put ''PSExLFZ0PXt9LHVuPSIiO2ZvcihRZT0wO1FlIT1tdC5sZW5ndGg7KytRZSlpZighKG10W1FlXS5zLmM+WmV8fG10W1FlXS5zLnI+QmV8fG10W1FlXS5lLmM8WmV8fG10W1FlXS5lLnI8QmUpKXsobXRbUWVdLnMuYyE9WmV8fG10W1FlXS5zLnIhPUJlKSYmKEV0PSEwKSxWdFsidGFibGU6bnVt''@;'; put 'put ''YmVyLWNvbHVtbnMtc3Bhbm5lZCJdPW10W1FlXS5lLmMtbXRbUWVdLnMuYysxLFZ0WyJ0YWJsZTpudW1iZXItcm93cy1zcGFubmVkIl09bXRbUWVdLmUuci1tdFtRZV0ucy5yKzE7YnJlYWt9aWYoRXQpTmUucHVzaCgiICAgICAgICAgIDx0YWJsZTpjb3ZlcmVkLXRhYmxlLWNlbGwvPlxuIik7''@;'; put 'put ''ZWxzZXt2YXIgbnI9cWkoe3I6QmUsYzpaZX0pLG5uPWZ0PyhvZVtCZV18fFtdKVtaZV06b2VbbnJdO2lmKG5uJiZubi5mJiYoVnRbInRhYmxlOmZvcm11bGEiXT1CaShzSihubi5mKSksbm4uRiYmbm4uRi5zbGljZSgwLG5yLmxlbmd0aCk9PW5yKSl7dmFyIGFyPXphKG5uLkYpO1Z0WyJ0YWJs''@;'; put 'put ''ZTpudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5lZCJdPWFyLmUuYy1hci5zLmMrMSxWdFsidGFibGU6bnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXT1hci5lLnItYXIucy5yKzF9aWYobm4pe3N3aXRjaChubi50KXtjYXNlImIiOnVuPW5uLnY/IlRSVUUiOiJGQUxTRSIsVnRbIm9mZmlj''@;'; put 'put ''ZTp2YWx1ZS10eXBlIl09ImJvb2xlYW4iLFZ0WyJvZmZpY2U6Ym9vbGVhbi12YWx1ZSJdPW5uLnY/InRydWUiOiJmYWxzZSI7YnJlYWs7Y2FzZSJuIjp1bj1ubi53fHxTdHJpbmcobm4udnx8MCksVnRbIm9mZmljZTp2YWx1ZS10eXBlIl09ImZsb2F0IixWdFsib2ZmaWNlOnZhbHVlIl09bm4u''@;'; put 'put ''dnx8MDticmVhaztjYXNlInMiOmNhc2Uic3RyIjp1bj1ubi52LFZ0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJzdHJpbmciO2JyZWFrO2Nhc2UiZCI6dW49bm4ud3x8bG4obm4udikudG9JU09TdHJpbmcoKSxWdFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0iZGF0ZSIsVnRbIm9mZmljZTpkYXRlLXZh''@;'; put 'put ''bHVlIl09bG4obm4udikudG9JU09TdHJpbmcoKSxWdFsidGFibGU6c3R5bGUtbmFtZSJdPSJjZTEiO2JyZWFrO2RlZmF1bHQ6TmUucHVzaChtKTtjb250aW51ZX1udWxsIT1ubi5vZHMmJiFWdFsidGFibGU6c3R5bGUtbmFtZSJdJiYoVnRbInRhYmxlOnN0eWxlLW5hbWUiXT0iY2UiK25uLm9k''@;'; put 'put ''cyk7dmFyIGpuPSFubi5SfHxubi5sJiZubi5sLlRhcmdldD9kKHVuKTpfKG5uLlIpO2lmKG5uLmwmJm5uLmwuVGFyZ2V0KXt2YXIga249bm4ubC5UYXJnZXQ7IiMiIT0oa249IiMiPT1rbi5jaGFyQXQoMCk/IiMiK0RrKGtuLnNsaWNlKDEpKTprbikuY2hhckF0KDApJiYha24ubWF0Y2goL15c''@;'; put 'put ''dys6LykmJihrbj0iLi4vIitrbiksam49VnIoInRleHQ6YSIsam4seyJ4bGluazpocmVmIjprbi5yZXBsYWNlKC8mL2csIiZhbXA7Iil9KX1OZS5wdXNoKCIgICAgICAgICAgIitWcigidGFibGU6dGFibGUtY2VsbCIsVnIoInRleHQ6cCIsam4se30pLFZ0KSsiXG4iKX1lbHNlIE5lLnB1c2go''@;'; put 'put ''bSl9fU5lLnB1c2goIiAgICAgICAgPC90YWJsZTp0YWJsZS1yb3c+XG4iKX1yZXR1cm4gTmUucHVzaCgiICAgICAgPC90YWJsZTp0YWJsZT5cbiIpLE5lLmpvaW4oIiIpfSxRPXtjZW50ZXI6ImNlbnRlciIsbGVmdDoic3RhcnQiLHJpZ2h0OiJlbmQifTtyZXR1cm4gZnVuY3Rpb24oZGUsTGUp''@;'; put 'put ''e3ZhciBOZT1bcG9dLEJlPWZhKHsieG1sbnM6b2ZmaWNlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiwieG1sbnM6dGFibGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRhYmxlOjEuMCIsInhtbG5zOnN0eWxlIjoi''@;'; put 'put ''dXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdHlsZToxLjAiLCJ4bWxuczp0ZXh0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0ZXh0OjEuMCIsInhtbG5zOmRyYXciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRy''@;'; put 'put ''YXdpbmc6MS4wIiwieG1sbnM6Zm8iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnhzbC1mby1jb21wYXRpYmxlOjEuMCIsInhtbG5zOnhsaW5rIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhtbG5zOmRjIjoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1l''@;'; put 'put ''bnRzLzEuMS8iLCJ4bWxuczptZXRhIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczptZXRhOjEuMCIsInhtbG5zOm51bWJlciI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZGF0YXN0eWxlOjEuMCIsInhtbG5zOnByZXNlbnRhdGlvbiI6InVy''@;'; put 'put ''bjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6cHJlc2VudGF0aW9uOjEuMCIsInhtbG5zOnN2ZyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3ZnLWNvbXBhdGlibGU6MS4wIiwieG1sbnM6Y2hhcnQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRv''@;'; put 'put ''Y3VtZW50OnhtbG5zOmNoYXJ0OjEuMCIsInhtbG5zOmRyM2QiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyM2Q6MS4wIiwieG1sbnM6bWF0aCI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLCJ4bWxuczpmb3JtIjoidXJuOm9hc2lzOm5hbWVz''@;'; put 'put ''OnRjOm9wZW5kb2N1bWVudDp4bWxuczpmb3JtOjEuMCIsInhtbG5zOnNjcmlwdCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c2NyaXB0OjEuMCIsInhtbG5zOm9vbyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA0L29mZmljZSIsInhtbG5zOm9vb3ciOiJodHRw''@;'; put 'put ''Oi8vb3Blbm9mZmljZS5vcmcvMjAwNC93cml0ZXIiLCJ4bWxuczpvb29jIjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDQvY2FsYyIsInhtbG5zOmRvbSI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLWV2ZW50cyIsInhtbG5zOnhmb3JtcyI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDIv''@;'; put 'put ''eGZvcm1zIiwieG1sbnM6eHNkIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCJ4bWxuczp4c2kiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIsInhtbG5zOnNoZWV0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDpzaDMzdGpz''@;'; put 'put ''OjEuMCIsInhtbG5zOnJwdCI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA1L3JlcG9ydCIsInhtbG5zOm9mIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZjoxLjIiLCJ4bWxuczp4aHRtbCI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJ4bWxuczpn''@;'; put 'put ''cmRkbCI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvZy9kYXRhLXZpZXcjIiwieG1sbnM6dGFibGVvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwOS90YWJsZSIsInhtbG5zOmRyYXdvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAxMC9kcmF3IiwieG1sbnM6Y2FsY2V4dCI6InVy''@;'; put 'put ''bjpvcmc6ZG9jdW1lbnRmb3VuZGF0aW9uOm5hbWVzOmV4cGVyaW1lbnRhbDpjYWxjOnhtbG5zOmNhbGNleHQ6MS4wIiwieG1sbnM6bG9leHQiOiJ1cm46b3JnOmRvY3VtZW50Zm91bmRhdGlvbjpuYW1lczpleHBlcmltZW50YWw6b2ZmaWNlOnhtbG5zOmxvZXh0OjEuMCIsInhtbG5zOmZpZWxk''@;'; put 'put ''IjoidXJuOm9wZW5vZmZpY2U6bmFtZXM6ZXhwZXJpbWVudGFsOm9vby1tcy1pbnRlcm9wOnhtbG5zOmZpZWxkOjEuMCIsInhtbG5zOmZvcm14IjoidXJuOm9wZW5vZmZpY2U6bmFtZXM6ZXhwZXJpbWVudGFsOm9veG1sLW9kZi1pbnRlcm9wOnhtbG5zOmZvcm06MS4wIiwieG1sbnM6Y3NzM3Qi''@;'; put 'put ''OiJodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXRleHQvIiwib2ZmaWNlOnZlcnNpb24iOiIxLjIifSksWmU9ZmEoeyJ4bWxuczpjb25maWciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmNvbmZpZzoxLjAiLCJvZmZpY2U6bWltZXR5cGUiOiJhcHBsaWNhdGlvbi92''@;'; put 'put ''bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0In0pOyJmb2RzIj09TGUuYm9va1R5cGU/KE5lLnB1c2goIjxvZmZpY2U6ZG9jdW1lbnQiK0JlK1plKyI+XG4iKSxOZS5wdXNoKGZsKCkucmVwbGFjZSgvb2ZmaWNlOmRvY3VtZW50LW1ldGEvZywib2ZmaWNlOm1ldGEiKSkpOk5lLnB1''@;'; put 'put ''c2goIjxvZmZpY2U6ZG9jdW1lbnQtY29udGVudCIrQmUrIj5cbiIpLGZ1bmN0aW9uKG9lLGRlKXt2YXIgTGU9W10sTmU9e307TGUucHVzaCgiIDxvZmZpY2U6YXV0b21hdGljLXN0eWxlcz5cbiIpLExlLnB1c2goJyAgPG51bWJlcjpkYXRlLXN0eWxlIHN0eWxlOm5hbWU9Ik4zNyIgbnVtYmVy''@;'; put 'put ''OmF1dG9tYXRpYy1vcmRlcj0idHJ1ZSI+XG4nKSxMZS5wdXNoKCcgICA8bnVtYmVyOm1vbnRoIG51bWJlcjpzdHlsZT0ibG9uZyIvPlxuJyksTGUucHVzaCgiICAgPG51bWJlcjp0ZXh0Pi88L251bWJlcjp0ZXh0PlxuIiksTGUucHVzaCgnICAgPG51bWJlcjpkYXkgbnVtYmVyOnN0eWxlPSJs''@;'; put 'put ''b25nIi8+XG4nKSxMZS5wdXNoKCIgICA8bnVtYmVyOnRleHQ+LzwvbnVtYmVyOnRleHQ+XG4iKSxMZS5wdXNoKCIgICA8bnVtYmVyOnllYXIvPlxuIiksTGUucHVzaCgiICA8L251bWJlcjpkYXRlLXN0eWxlPlxuIik7dmFyIEJlPTA7ZGUuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oUWUpe3Jl''@;'; put 'put ''dHVybiBkZS5TaGVldHNbUWVdfSkuZm9yRWFjaChmdW5jdGlvbihRZSl7aWYoUWUmJlFlWyIhY29scyJdKWZvcih2YXIgZnQ9MDtmdDxRZVsiIWNvbHMiXS5sZW5ndGg7KytmdClpZihRZVsiIWNvbHMiXVtmdF0pe3ZhciBrdD1RZVsiIWNvbHMiXVtmdF07aWYobnVsbD09a3Qud2lkdGgmJm51''@;'; put 'put ''bGw9PWt0LndweCYmbnVsbD09a3Qud2NoKWNvbnRpbnVlO0IwKGt0KSxrdC5vZHM9QmU7dmFyIGJ0PVFlWyIhY29scyJdW2Z0XS53cHgrInB4IjtMZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJjbycrQmUrJyIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1jb2x1bW4iPlxuJyksTGUu''@;'; put 'put ''cHVzaCgnICAgPHN0eWxlOnRhYmxlLWNvbHVtbi1wcm9wZXJ0aWVzIGZvOmJyZWFrLWJlZm9yZT0iYXV0byIgc3R5bGU6Y29sdW1uLXdpZHRoPSInK2J0KyciLz5cbicpLExlLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIpLCsrQmV9fSk7dmFyIFplPTA7ZGUuU2hlZXROYW1lcy5tYXAoZnVu''@;'; put 'put ''Y3Rpb24oUWUpe3JldHVybiBkZS5TaGVldHNbUWVdfSkuZm9yRWFjaChmdW5jdGlvbihRZSl7aWYoUWUmJlFlWyIhcm93cyJdKWZvcih2YXIgZnQ9MDtmdDxRZVsiIXJvd3MiXS5sZW5ndGg7KytmdClpZihRZVsiIXJvd3MiXVtmdF0pe1FlWyIhcm93cyJdW2Z0XS5vZHM9WmU7dmFyIGt0PVFl''@;'; put 'put ''WyIhcm93cyJdW2Z0XS5ocHgrInB4IjtMZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJybycrWmUrJyIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1yb3ciPlxuJyksTGUucHVzaCgnICAgPHN0eWxlOnRhYmxlLXJvdy1wcm9wZXJ0aWVzIGZvOmJyZWFrLWJlZm9yZT0iYXV0byIgc3R5''@;'; put 'put ''bGU6cm93LWhlaWdodD0iJytrdCsnIi8+XG4nKSxMZS5wdXNoKCIgIDwvc3R5bGU6c3R5bGU+XG4iKSwrK1plfX0pLExlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9InRhMSIgc3R5bGU6ZmFtaWx5PSJ0YWJsZSIgc3R5bGU6bWFzdGVyLXBhZ2UtbmFtZT0ibXAxIj5cbicpLExl''@;'; put 'put ''LnB1c2goJyAgIDxzdHlsZTp0YWJsZS1wcm9wZXJ0aWVzIHRhYmxlOmRpc3BsYXk9InRydWUiIHN0eWxlOndyaXRpbmctbW9kZT0ibHItdGIiLz5cbicpLExlLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIpLExlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9ImNlMSIgc3R5bGU6''@;'; put 'put ''ZmFtaWx5PSJ0YWJsZS1jZWxsIiBzdHlsZTpwYXJlbnQtc3R5bGUtbmFtZT0iRGVmYXVsdCIgc3R5bGU6ZGF0YS1zdHlsZS1uYW1lPSJOMzciLz5cbicpO3ZhciBudD0yO1plPTAsZGUuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oUWUpe3JldHVybiBkZS5TaGVldHNbUWVdfSkuZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbihRZSl7aWYoUWUpZm9yKHZhciBmdD0wLGt0PTAsYnQ9emEoUWVbIiFyZWYiXSksRXQ9QXJyYXkuaXNBcnJheShRZSk7ZnQ8PWJ0LmUucjsrK2Z0KWZvcihrdD0wO2t0PD1idC5lLmM7KytrdCl7dmFyIFZ0PXFpKHtyOmZ0LGM6a3R9KSx1bj1FdD8oUWVbZnRdfHxbXSlba3RdOlFl''@;'; put 'put ''W1Z0XTtpZih1biYmKHVuLnN8fHVuLlIpKXt2YXIgbnI9W107dW4ucyYmbnIucHVzaChbdW4sITBdKSx1bi5SJiZ1bi5SLmZvckVhY2goZnVuY3Rpb24obm4pe25uJiZubi5zJiZuci5wdXNoKFtubiwhMV0pfSksbnIuZm9yRWFjaChmdW5jdGlvbihubil7dmFyIGFyPW5uWzBdLGpuPWFyLnMs''@;'; put 'put ''a249IiIsc3I9eyJzdHlsZTpuYW1lIjoobm5bMV0/ImNlIjoiVCIpK250LCJzdHlsZTpmYW1pbHkiOm5uWzFdPyJ0YWJsZS1jZWxsIjoidGV4dCJ9O25uWzFdJiYoc3JbInN0eWxlOnBhcmVudC1zdHlsZS1uYW1lIl09IkRlZmF1bHQiLHNyWyJzdHlsZTpkYXRhLXN0eWxlLW5hbWUiXT0iTjAi''@;'; put 'put ''KTt2YXIgZ3I9e30scW49ITEsX2k9e30sT2k9ITEsc289e30sbW89ITE7aWYoam4uY29sb3ImJihfaVsiZm86Y29sb3IiXT0iIyIrVDIoam4uY29sb3IucmdiKSxPaT0hMCksam4uc3omJihfaVsiZm86Zm9udC1zaXplIl09am4uc3orInB0IixPaT0hMCksam4uYm9sZCYmKF9pWyJmbzpmb250''@;'; put 'put ''LXdlaWdodCJdPSJib2xkIixPaT0hMCksam4uaXRhbGljJiYoX2lbImZvOmZvbnQtc3R5bGUiXT0iaXRhbGljIixPaT0hMCksam4ubmFtZSYmKE5lW2puLm5hbWVdfHwoTmVbam4ubmFtZV09am4ubmFtZS5tYXRjaCgvIC8pPyImYXBvczsiK2puLm5hbWUrIiZhcG9zOyI6am4ubmFtZSksX2lb''@;'; put 'put ''InN0eWxlOmZvbnQtbmFtZSJdPWpuLm5hbWUsT2k9ITApLGpuLnN0cmlrZSYmKF9pWyJzdHlsZTp0ZXh0LWxpbmUtdGhyb3VnaC1zdHlsZSJdPSJzb2xpZCIsX2lbInN0eWxlOnRleHQtbGluZS10aHJvdWdoLXR5cGUiXT0ic2luZ2xlIixPaT0hMCksam4udW5kZXJsaW5lJiYoX2lbInN0eWxl''@;'; put 'put ''OnRleHQtdW5kZXJsaW5lLXN0eWxlIl09InNvbGlkIixfaVsic3R5bGU6dGV4dC11bmRlcmxpbmUtd2lkdGgiXT0iYXV0byIsX2lbInN0eWxlOnRleHQtdW5kZXJsaW5lLWNvbG9yIl09ImZvbnQtY29sb3IiLE9pPSEwKSxublsxXSl7aWYoam4uYWxpZ25tZW50KXt2YXIgTGk9am4uYWxpZ25t''@;'; put 'put ''ZW50O0xpLndyYXBUZXh0JiYoZ3JbImZvOndyYXAtb3B0aW9uIl09IndyYXAiLHFuPSEwKSxMaS52ZXJ0aWNhbCYmKGdyWyJzdHlsZTp2ZXJ0aWNhbC1hbGlnbiJdPSJjZW50ZXIiPT1MaS52ZXJ0aWNhbD8ibWlkZGxlIjpMaS52ZXJ0aWNhbCxxbj0hMCksUVtMaS5ob3Jpem9udGFsXSYmKHNv''@;'; put 'put ''WyJmbzp0ZXh0LWFsaWduIl09UVtMaS5ob3Jpem9udGFsXSxtbz0hMCl9am4uZmdDb2xvciYmKGdyWyJmbzpiYWNrZ3JvdW5kLWNvbG9yIl09IiMiK1QyKGpuLmZnQ29sb3IucmdiKSxxbj0hMCl9cW4mJihrbis9VnIoInN0eWxlOnRhYmxlLWNlbGwtcHJvcGVydGllcyIsbnVsbCxncikpLE9p''@;'; put 'put ''JiYoa24rPVZyKCJzdHlsZTp0ZXh0LXByb3BlcnRpZXMiLG51bGwsX2kpKSxtbyYmKGtuKz1Wcigic3R5bGU6cGFyYWdyYXBoLXByb3BlcnRpZXMiLG51bGwsc28pKSxMZS5wdXNoKCIgICIrVnIoInN0eWxlOnN0eWxlIixrbixzcikrIlxuIiksYXIub2RzPW50LCsrbnR9KX19fSksTGUucHVz''@;'; put 'put ''aCgiIDwvb2ZmaWNlOmF1dG9tYXRpYy1zdHlsZXM+XG4iKTt2YXIgbXQ9IiA8b2ZmaWNlOmZvbnQtZmFjZS1kZWNscz5cbiIrRmUoTmUpLm1hcChmdW5jdGlvbihRZSl7cmV0dXJuJyAgPHN0eWxlOmZvbnQtZmFjZSBzdHlsZTpuYW1lPSInK1FlKyciIHN2Zzpmb250LWZhbWlseT0iJytOZVtR''@;'; put 'put ''ZV0rJyIvPlxuJ30pLmpvaW4oIiIpKyIgPC9vZmZpY2U6Zm9udC1mYWNlLWRlY2xzPlxuIjtvZS5wdXNoKG10KSxvZS5wdXNoKExlLmpvaW4oIiIpKX0oTmUsZGUpLE5lLnB1c2goIiAgPG9mZmljZTpib2R5PlxuIiksTmUucHVzaCgiICAgIDxvZmZpY2U6c3ByZWFkc2hlZXQ+XG4iKTtmb3Io''@;'; put 'put ''dmFyIG50PTA7bnQhPWRlLlNoZWV0TmFtZXMubGVuZ3RoOysrbnQpTmUucHVzaChQKGRlLlNoZWV0c1tkZS5TaGVldE5hbWVzW250XV0sZGUsbnQpKTtyZXR1cm4gTmUucHVzaCgiICAgIDwvb2ZmaWNlOnNwcmVhZHNoZWV0PlxuIiksTmUucHVzaCgiICA8L29mZmljZTpib2R5PlxuIiksTmUu''@;'; put 'put ''cHVzaCgiZm9kcyI9PUxlLmJvb2tUeXBlPyI8L29mZmljZTpkb2N1bWVudD4iOiI8L29mZmljZTpkb2N1bWVudC1jb250ZW50PiIpLE5lLmpvaW4oIiIpfX0oKTtmdW5jdGlvbiBBUihkLF8pe2lmKCJmb2RzIj09Xy5ib29rVHlwZSlyZXR1cm4gR2VlKGQsXyk7dmFyIG09dmkoKSxUPSIiLFA9''@;'; put 'put ''W10sUT1bXTtyZXR1cm4gem4obSxUPSJtaW1ldHlwZSIsImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiKSx6bihtLFQ9ImNvbnRlbnQueG1sIixHZWUoZCxfKSksUC5wdXNoKFtULCJ0ZXh0L3htbCJdKSxRLnB1c2goW1QsIkNvbnRlbnRGaWxlIl0pLHpu''@;'; put 'put ''KG0sVD0ic3R5bGVzLnhtbCIsWmVlKGQsXykpLFAucHVzaChbVCwidGV4dC94bWwiXSksUS5wdXNoKFtULCJTdHlsZXNGaWxlIl0pLHpuKG0sVD0ibWV0YS54bWwiLHBvK2ZsKCkpLFAucHVzaChbVCwidGV4dC94bWwiXSksUS5wdXNoKFtULCJNZXRhZGF0YUZpbGUiXSksem4obSxUPSJtYW5p''@;'; put 'put ''ZmVzdC5yZGYiLGZ1bmN0aW9uIFZtKGQpe3ZhciBfPVtwb107Xy5wdXNoKCc8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPlxuJyk7Zm9yKHZhciBtPTA7bSE9ZC5sZW5ndGg7KyttKV8ucHVzaChXdShkW21dWzBdLGRbbV1b''@;'; put 'put ''MV0pKSxfLnB1c2goZnAoIiIsZFttXVswXSkpO3JldHVybiBfLnB1c2goV3UoIiIsIkRvY3VtZW50IiwicGtnIikpLF8ucHVzaCgiPC9yZGY6UkRGPiIpLF8uam9pbigiIil9KFEpKSxQLnB1c2goW1QsImFwcGxpY2F0aW9uL3JkZit4bWwiXSksem4obSxUPSJNRVRBLUlORi9tYW5pZmVzdC54''@;'; put 'put ''bWwiLGZ1bmN0aW9uIHp1KGQpe3ZhciBfPVtwb107Xy5wdXNoKCc8bWFuaWZlc3Q6bWFuaWZlc3QgeG1sbnM6bWFuaWZlc3Q9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6bWFuaWZlc3Q6MS4wIiBtYW5pZmVzdDp2ZXJzaW9uPSIxLjIiPlxuJyksXy5wdXNoKCcgIDxt''@;'; put 'put ''YW5pZmVzdDpmaWxlLWVudHJ5IG1hbmlmZXN0OmZ1bGwtcGF0aD0iLyIgbWFuaWZlc3Q6dmVyc2lvbj0iMS4yIiBtYW5pZmVzdDptZWRpYS10eXBlPSJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0Ii8+XG4nKTtmb3IodmFyIG09MDttPGQubGVuZ3RoOysr''@;'; put 'put ''bSlfLnB1c2goJyAgPG1hbmlmZXN0OmZpbGUtZW50cnkgbWFuaWZlc3Q6ZnVsbC1wYXRoPSInK2RbbV1bMF0rJyIgbWFuaWZlc3Q6bWVkaWEtdHlwZT0iJytkW21dWzFdKyciLz5cbicpO3JldHVybiBfLnB1c2goIjwvbWFuaWZlc3Q6bWFuaWZlc3Q+IiksXy5qb2luKCIiKX0oUCkpLG19ZnVu''@;'; put 'put ''Y3Rpb24gSm0oZCl7cmV0dXJuIGZ1bmN0aW9uKG0sVCl7dmFyIFA9ZnVuY3Rpb24gWkIoZCxfKXtpZighXylyZXR1cm4gMDt2YXIgbT1kLlNoZWV0TmFtZXMuaW5kZXhPZihfKTtpZigtMT09bSl0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5vdCBmb3VuZDogIitfKTtyZXR1cm4gbX0obSxULnNo''@;'; put 'put ''ZWV0KTtyZXR1cm4gZC5mcm9tX3NoZWV0KG0uU2hlZXRzW20uU2hlZXROYW1lc1tQXV0sVCxtKX19dmFyICRlZT1KbShrZiksR0I9Sm0oe2Zyb21fc2hlZXQ6Y0V9KSxrUj1KbSh0eXBlb2Ygc1M8InUiP3NTOnt9KSwkQj1KbSh0eXBlb2YgbFM8InUiP2xTOnt9KSxxZWU9Sm0odHlwZW9mIHY4''@;'; put 'put ''PCJ1Ij92ODp7fSkscTk9Sm0odHlwZW9mIGQ1PCJ1Ij9kNTp7fSkscUI9Sm0oe2Zyb21fc2hlZXQ6YWp9KSxLQj1KbSh0eXBlb2YgeXA8InUiP3lwOnt9KSxLOT1KbSh0eXBlb2YgVjA8InUiP1YwOnt9KSxzaD1oKDI4MjY3KXx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jcnlwdG9Ccm93''@;'; put 'put ''c2VyaWZ5O2lmKCFzaCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGNyeXB0byBleHRlbnNpb25zISIpO3ZhciBYOT17U0hBNTEyOiJzaGE1MTIiLFNIQTI1Njoic2hhMjU2IixTSEEzODQ6InNoYTM4NCIsU0hBMToic2hhMSIsTUQ1OiJtZDUiLE1ENDoibWQ0IixNRDI6Im1kMiJ9O2Z1''@;'; put 'put ''bmN0aW9uIFNkKGQsXyl7c3dpdGNoKF89KF98fCIiKS5yZXBsYWNlKC8tL2csIiIpKXtjYXNlIlNIQS01MTIiOmNhc2UiU0hBNTEyIjpyZXR1cm4gbmV3IHNoLmNyZWF0ZUhhc2goInNoYTUxMiIpLnVwZGF0ZShkKS5kaWdlc3QoKTtjYXNlIlNIQS0xIjpjYXNlIlNIQTEiOnJldHVybiBuZXcg''@;'; put 'put ''c2guY3JlYXRlSGFzaCgic2hhMSIpLnVwZGF0ZShkKS5kaWdlc3QoKTtjYXNlIk1EMiI6cmV0dXJuIG5ldyBzaC5jcmVhdGVIYXNoKCJtZDIiKS51cGRhdGUoZCkuZGlnZXN0KCk7ZGVmYXVsdDppZihYOVtfXSlyZXR1cm4gbmV3IHNoLmNyZWF0ZUhhc2goWDlbX10pLnVwZGF0ZShkKS5kaWdl''@;'; put 'put ''c3QoKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGhtICIrXyl9fWZ1bmN0aW9uIEk1KGQsXyxtKXtpZigicmMyIj09bSl0aHJvdyJVbnN1cHBvcnRlZCBSQzIiO3ZhciBUPXNoLmNyZWF0ZURlY2lwaGVyaXYobXx8ImFlcy0yNTYtY2JjIixkLF8pO3JldHVybiBU''@;'; put 'put ''LnNldEF1dG9QYWRkaW5nKCExKSxUfWZ1bmN0aW9uIG9FKGQpe3JldHVyblsoIjAwIisoMjU1JmQpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpLCgiMDAiKyhkPj4+OCYyNTUpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpLCgiMDAiKyhkPj4+MTYmMjU1KS50b1N0cmluZygxNikpLnNsaWNlKC0y''@;'; put 'put ''KSwoIjAwIisoZD4+PjI0JjI1NSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMildLmpvaW4oIiIpfXZhciB6OD1mdW5jdGlvbihkLF8sbSl7Zm9yKHZhciBUPSJzdHJpbmciPT10eXBlb2YgXz9CdWZmZXIuZnJvbShfLCJoZXgiKTpfLFA9InN0cmluZyI9PXR5cGVvZiBkP0J1ZmZlci5mcm9tKGNw''@;'; put 'put ''dGFibGUudXRpbHMuZW5jb2RlKDEyMDAsZCkpOmQsUT0ic3RyaW5nIj09dHlwZW9mIG0/QnVmZmVyLmZyb20obSwiaGV4Iik6bSxzZT1TZChQLCJNRDUiKSxvZT1CdWZmZXIuY29uY2F0KFtzZS5zbGljZSgwLDUpLFRdKSxkZT0wO2RlPDQ7KytkZSlvZT1CdWZmZXIuY29uY2F0KFtvZSxvZV0p''@;'; put 'put ''O3ZhciBMZT1TZChvZSwiTUQ1Iik7cmV0dXJuKFNkKEJ1ZmZlci5jb25jYXQoW0xlLnNsaWNlKDAsNSksUV0pLCJNRDUiKS50b1N0cmluZygiaGV4IikrIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIikuc2xpY2UoMCwzMil9LGFFPWZ1bmN0aW9uKGQsXyxtKXt2YXIgVD0ic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIF8/QnVmZmVyLmZyb20oXywiaGV4Iik6XyxQPSJzdHJpbmciPT10eXBlb2YgZD9CdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLGQpKTpkLFE9InN0cmluZyI9PXR5cGVvZiBtP0J1ZmZlci5mcm9tKG0sImhleCIpOm0sc2U9U2QoQnVmZmVyLmNvbmNh''@;'; put 'put ''dChbVCxQXSksIlNIQTEiKTtyZXR1cm4gU2QoQnVmZmVyLmNvbmNhdChbc2UsUV0pLCJTSEExIil9LFFlZT1mdW5jdGlvbigpe2Z1bmN0aW9uIF8oKXt9Xy5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24oUWUpe3RoaXMuX2k9MDt2YXIgZnQ9dGhpcy5fYnVpbGQoUWUsIiIpO3JldHVybiIiPT09''@;'; put 'put ''ZnQ/IiI6Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4nK2Z0fSxfLnByb3RvdHlwZS5fYnVpbGQ9ZnVuY3Rpb24oUWUsZnQpe2lmKHRoaXMuX2krKyUxZTY9PTAmJih0aGlzLl9jPWZ0WzBdKSxudWxsPT1RZXx8Im9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBRZSYmImZ1bmN0aW9uIiE9dHlwZW9mIFFlKW51bGwhPVFlJiYoZnQrPWZ1bmN0aW9uIGQoUWUsZnQpe3JldHVybiBudWxsPT1RZXx8KFFlPVFlLnRvU3RyaW5nKCkucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLGZ0JiYo''@;'; put 'put ''UWU9UWUucmVwbGFjZSgvIi9nLCImcXVvdDsiKSkpLFFlfShRZSkpO2Vsc2V7aWYoIVFlLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJYTUwgbm9kZSBkb2VzIG5vdCBoYXZlIG5hbWU6ICIrSlNPTi5zdHJpbmdpZnkoUWUpKTtmdCs9IjwiK1FlLm5hbWU7dmFyIGt0PXRoaXM7ZnQrPVFlLmF0dHJp''@;'; put 'put ''YnV0ZXMmJmZhKFFlLmF0dHJpYnV0ZXMpfHwiIixBcnJheS5pc0FycmF5KFFlLmNoaWxkcmVuKSYmMCE9UWUuY2hpbGRyZW4ubGVuZ3RoPyhmdCs9Ij4iLFFlLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYnQpe2Z0PWt0Ll9idWlsZChidCxmdCl9KSxmdCs9IjwvIitRZS5uYW1lKyI+Iik6''@;'; put 'put ''ZnQrPSIvPiJ9cmV0dXJuIGZ0fTt2YXIgbT1CdWZmZXIuZnJvbShbNCwwLDQsMCw2NCwwLDAsMF0pLFE9e2RhdGFJbnRlZ3JpdHk6e2htYWNLZXk6QnVmZmVyLmZyb20oWzk1LDE3OCwxNzMsMSwxMiwxODUsMjI1LDI0Nl0pLGhtYWNWYWx1ZTpCdWZmZXIuZnJvbShbMTYwLDEwMywxMjcsMiwx''@;'; put 'put ''NzgsNDQsMTMyLDUxXSl9LGtleTpCdWZmZXIuZnJvbShbMjAsMTEwLDExLDIzMSwxNzEsMTcyLDIwOCwyMTRdKSx2ZXJpZmllckhhc2g6e2lucHV0OkJ1ZmZlci5mcm9tKFsyNTQsMTY3LDIxMCwxMTgsNTksNzUsMTU4LDEyMV0pLHZhbHVlOkJ1ZmZlci5mcm9tKFsyMTUsMTcwLDE1LDEwOSw0''@;'; put 'put ''OCw5Nyw1Miw3OF0pfX07ZnVuY3Rpb24gc2UoUWUsZnQsa3QsYnQsRXQsVnQpe3ZhciB1bj1mdC50b0xvd2VyQ2FzZSgpKyItIis4KmJ0Lmxlbmd0aDtpZigiQ2hhaW5pbmdNb2RlQ0JDIiE9PWt0KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBjaXBoZXIgY2hhaW5pbmc6ICIra3QpO3ZhciBu''@;'; put 'put ''cj1zaFtRZT8iY3JlYXRlQ2lwaGVyaXYiOiJjcmVhdGVEZWNpcGhlcml2Il0odW4rPSItY2JjIixidCxFdCk7bnIuc2V0QXV0b1BhZGRpbmcoITEpO3ZhciBubj1uci51cGRhdGUoVnQpLGFyPVtubl07dHJ5e3ZhciBqbj1uci5maW5hbCgpO2FyLnB1c2goam4pfWNhdGNoe31yZXR1cm4gQnVm''@;'; put 'put ''ZmVyLmNvbmNhdChhcil9ZnVuY3Rpb24gb2UoUWUpe1FlPVFlLnRvTG93ZXJDYXNlKCk7dmFyIGZ0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2lmKHNoLmdldEhhc2hlcygpLmluZGV4T2YoUWUpPDApdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBoYXNoIGFsZ29yaXRobSAiK1Fl''@;'; put 'put ''KTt2YXIgYnQ9c2guY3JlYXRlSGFzaChRZSk7cmV0dXJuIGJ0LnVwZGF0ZShCdWZmZXIuY29uY2F0KGZ0KSksYnQuZGlnZXN0KCl9ZnVuY3Rpb24gZGUoUWUsZnQsa3QsYnQpeyJudW1iZXIiPT10eXBlb2YgYnQmJihidD1MZShidCkpO3ZhciBFdD1vZShRZSxmdCxidCk7aWYoRXQubGVuZ3Ro''@;'; put 'put ''PGt0KXt2YXIgVnQ9QnVmZmVyLmFsbG9jKGt0LDU0KTtFdC5jb3B5KFZ0KSxFdD1WdH1lbHNlIEV0Lmxlbmd0aD5rdCYmKEV0PUV0LnNsaWNlKDAsa3QpKTtyZXR1cm4gRXR9ZnVuY3Rpb24gTGUoUWUsZnQpe3ZhciBrdD1CdWZmZXIuYWxsb2MoZnR8fDQpO3JldHVybiBrdC53cml0ZVVJbnQz''@;'; put 'put ''MkxFKFFlLDApLGt0fWZ1bmN0aW9uIE5lKFFlLGZ0LGt0LGJ0LEV0LFZ0KXtmb3IodmFyIG5yPW9lKGZ0LGt0LEJ1ZmZlci5mcm9tKFFlLCJ1dGYxNmxlIikpLG5uPTA7bm48YnQ7bm4rKylucj1vZShmdCxMZShubiksbnIpO3ZhciBqbj1FdC84O2lmKChucj1vZShmdCxucixWdCkpLmxlbmd0''@;'; put 'put ''aDxqbil7dmFyIGtuPUJ1ZmZlci5hbGxvYyhqbiw1NCk7bnIuY29weShrbiksbnI9a259ZWxzZSBuci5sZW5ndGg+am4mJihucj1uci5zbGljZSgwLGpuKSk7cmV0dXJuIG5yfXJldHVybiBzaC5yYW5kb21CeXRlc3x8KHNoLnJhbmRvbUJ5dGVzPWZ1bmN0aW9uKFFlKXtmb3IodmFyIGZ0PUJ1''@;'; put 'put ''ZmZlci5hbGxvYyhRZSksa3Q9MDtrdDxRZTsrK2t0KWZ0W2t0XT1NYXRoLmZsb29yKDI1NipNYXRoLnJhbmRvbSgpKTtyZXR1cm4gZnR9KSxmdW5jdGlvbiBtdChRZSxmdCl7aWYoInN0cmluZyI9PXR5cGVvZiBRZSlyZXR1cm4gbXQoQnVmZmVyLmZyb20oUWUsImJpbmFyeSIpLGZ0KTt2YXIg''@;'; put 'put ''a3Q9c2gucmFuZG9tQnl0ZXMoMzIpLGJ0PXtwYWNrYWdlOntjaXBoZXJBbGdvcml0aG06IkFFUyIsY2lwaGVyQ2hhaW5pbmc6IkNoYWluaW5nTW9kZUNCQyIsc2FsdFZhbHVlOnNoLnJhbmRvbUJ5dGVzKDE2KSxoYXNoQWxnb3JpdGhtOiJTSEE1MTIiLGhhc2hTaXplOjY0LGJsb2NrU2l6ZTox''@;'; put 'put ''NixrZXlCaXRzOjgqa3QubGVuZ3RofSxrZXk6e2NpcGhlckFsZ29yaXRobToiQUVTIixjaXBoZXJDaGFpbmluZzoiQ2hhaW5pbmdNb2RlQ0JDIixzYWx0VmFsdWU6c2gucmFuZG9tQnl0ZXMoMTYpLGhhc2hBbGdvcml0aG06IlNIQTUxMiIsaGFzaFNpemU6NjQsYmxvY2tTaXplOjE2LHNwaW5D''@;'; put 'put ''b3VudDoxLGtleUJpdHM6MjU2fX0sRXQ9ZnVuY3Rpb24gQmUoUWUsZnQsa3QsYnQsRXQsVnQsdW4sbnIpe2Zvcih2YXIgbm49W10sYXI9UWU/MDo4LGpuPTAsa249MCxzcj0wO3NyPG5yLmxlbmd0aDspeyhzcj0oa249c3IpKzQwOTYpPm5yLmxlbmd0aCYmKHNyPW5yLmxlbmd0aCk7dmFyIGdy''@;'; put 'put ''PW5yLnNsaWNlKGtuK2FyLHNyK2FyKSxxbj1nci5sZW5ndGglRXQ7cW4mJihncj1CdWZmZXIuY29uY2F0KFtncixCdWZmZXIuYWxsb2MoRXQtcW4pXSkpO3ZhciBPaT1zZShRZSxmdCxrdCx1bixkZShidCxWdCxFdCxqbiksZ3IpO25uLnB1c2goT2kpLGpuKyt9dmFyIHNvPUJ1ZmZlci5jb25j''@;'; put 'put ''YXQobm4pO2lmKFFlKXNvPUJ1ZmZlci5jb25jYXQoW0xlKG5yLmxlbmd0aCw4KSxzb10pO2Vsc2V7dmFyIG1vPW5yLnJlYWRVSW50MzJMRSgwKTtzbz1zby5zbGljZSgwLG1vKX1yZXR1cm4gc299KCEwLGJ0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGJ0LnBhY2thZ2UuY2lwaGVyQ2hhaW5p''@;'; put 'put ''bmcsYnQucGFja2FnZS5oYXNoQWxnb3JpdGhtLGJ0LnBhY2thZ2UuYmxvY2tTaXplLGJ0LnBhY2thZ2Uuc2FsdFZhbHVlLGt0LFFlKSxWdD1zaC5yYW5kb21CeXRlcyg2NCksdW49ZGUoYnQucGFja2FnZS5oYXNoQWxnb3JpdGhtLGJ0LnBhY2thZ2Uuc2FsdFZhbHVlLGJ0LnBhY2thZ2UuYmxv''@;'; put 'put ''Y2tTaXplLFEuZGF0YUludGVncml0eS5obWFjS2V5KSxucj1zZSghMCxidC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxidC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLGt0LHVuLFZ0KSxubj1mdW5jdGlvbiBaZShRZSxmdCl7UWU9UWUudG9Mb3dlckNhc2UoKTt2YXIga3Q9W10uc2xpY2UuY2Fs''@;'; put 'put ''bChhcmd1bWVudHMsMik7aWYoc2guZ2V0SGFzaGVzKCkuaW5kZXhPZihRZSk8MCl0aHJvdyBuZXcgRXJyb3IoIkhNQUMgYWxnb3JpdGhtICciK1FlKyInIG5vdCBzdXBwb3J0ZWQhIik7dmFyIEV0PXNoLmNyZWF0ZUhtYWMoUWUsZnQpO3JldHVybiBFdC51cGRhdGUoQnVmZmVyLmNvbmNhdChr''@;'; put 'put ''dCkpLEV0LmRpZ2VzdCgpfShidC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sVnQsRXQpLGFyPWRlKGJ0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxidC5wYWNrYWdlLnNhbHRWYWx1ZSxidC5wYWNrYWdlLmJsb2NrU2l6ZSxRLmRhdGFJbnRlZ3JpdHkuaG1hY1ZhbHVlKSxqbj1zZSghMCxidC5wYWNr''@;'; put 'put ''YWdlLmNpcGhlckFsZ29yaXRobSxidC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLGt0LGFyLG5uKTtidC5kYXRhSW50ZWdyaXR5PXtlbmNyeXB0ZWRIbWFjS2V5Om5yLGVuY3J5cHRlZEhtYWNWYWx1ZTpqbn07dmFyIGtuPU5lKGZ0LGJ0LmtleS5oYXNoQWxnb3JpdGhtLGJ0LmtleS5zYWx0VmFs''@;'; put 'put ''dWUsYnQua2V5LnNwaW5Db3VudCxidC5rZXkua2V5Qml0cyxRLmtleSk7YnQua2V5LmVuY3J5cHRlZEtleVZhbHVlPXNlKCEwLGJ0LmtleS5jaXBoZXJBbGdvcml0aG0sYnQua2V5LmNpcGhlckNoYWluaW5nLGtuLGJ0LmtleS5zYWx0VmFsdWUsa3QpO3ZhciBzcj1zaC5yYW5kb21CeXRlcygx''@;'; put 'put ''NiksZ3I9TmUoZnQsYnQua2V5Lmhhc2hBbGdvcml0aG0sYnQua2V5LnNhbHRWYWx1ZSxidC5rZXkuc3BpbkNvdW50LGJ0LmtleS5rZXlCaXRzLFEudmVyaWZpZXJIYXNoLmlucHV0KTtidC5rZXkuZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQ9c2UoITAsYnQua2V5LmNpcGhlckFsZ29yaXRo''@;'; put 'put ''bSxidC5rZXkuY2lwaGVyQ2hhaW5pbmcsZ3IsYnQua2V5LnNhbHRWYWx1ZSxzcik7dmFyIHFuPW9lKGJ0LmtleS5oYXNoQWxnb3JpdGhtLHNyKSxfaT1OZShmdCxidC5rZXkuaGFzaEFsZ29yaXRobSxidC5rZXkuc2FsdFZhbHVlLGJ0LmtleS5zcGluQ291bnQsYnQua2V5LmtleUJpdHMsUS52''@;'; put 'put ''ZXJpZmllckhhc2gudmFsdWUpO2J0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZT1zZSghMCxidC5rZXkuY2lwaGVyQWxnb3JpdGhtLGJ0LmtleS5jaXBoZXJDaGFpbmluZyxfaSxidC5rZXkuc2FsdFZhbHVlLHFuKTt2YXIgT2k9ZnVuY3Rpb24gbnQoUWUpe3ZhciBmdD17bmFtZToi''@;'; put 'put ''ZW5jcnlwdGlvbiIsYXR0cmlidXRlczp7eG1sbnM6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvZW5jcnlwdGlvbiIsInhtbG5zOnAiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9wYXNzd29yZCIsInhtbG5z''@;'; put 'put ''OmMiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9jZXJ0aWZpY2F0ZSJ9LGNoaWxkcmVuOlt7bmFtZToia2V5RGF0YSIsYXR0cmlidXRlczp7c2FsdFNpemU6UWUucGFja2FnZS5zYWx0VmFsdWUubGVuZ3RoLGJsb2NrU2l6ZTpRZS5wYWNr''@;'; put 'put ''YWdlLmJsb2NrU2l6ZSxrZXlCaXRzOlFlLnBhY2thZ2Uua2V5Qml0cyxoYXNoU2l6ZTpRZS5wYWNrYWdlLmhhc2hTaXplLGNpcGhlckFsZ29yaXRobTpRZS5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxjaXBoZXJDaGFpbmluZzpRZS5wYWNrYWdlLmNpcGhlckNoYWluaW5nLGhhc2hBbGdvcml0''@;'; put 'put ''aG06UWUucGFja2FnZS5oYXNoQWxnb3JpdGhtLHNhbHRWYWx1ZTpRZS5wYWNrYWdlLnNhbHRWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fSx7bmFtZToiZGF0YUludGVncml0eSIsYXR0cmlidXRlczp7ZW5jcnlwdGVkSG1hY0tleTpRZS5kYXRhSW50ZWdyaXR5LmVuY3J5cHRlZEhtYWNLZXku''@;'; put 'put ''dG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZEhtYWNWYWx1ZTpRZS5kYXRhSW50ZWdyaXR5LmVuY3J5cHRlZEhtYWNWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fSx7bmFtZToia2V5RW5jcnlwdG9ycyIsY2hpbGRyZW46W3tuYW1lOiJrZXlFbmNyeXB0b3IiLGF0dHJpYnV0ZXM6e3VyaToi''@;'; put 'put ''aHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9rZXlFbmNyeXB0b3IvcGFzc3dvcmQifSxjaGlsZHJlbjpbe25hbWU6InA6ZW5jcnlwdGVkS2V5IixhdHRyaWJ1dGVzOntzcGluQ291bnQ6UWUua2V5LnNwaW5Db3VudCxzYWx0U2l6ZTpRZS5rZXkuc2FsdFZhbHVlLmxl''@;'; put 'put ''bmd0aCxibG9ja1NpemU6UWUua2V5LmJsb2NrU2l6ZSxrZXlCaXRzOlFlLmtleS5rZXlCaXRzLGhhc2hTaXplOlFlLmtleS5oYXNoU2l6ZSxjaXBoZXJBbGdvcml0aG06UWUua2V5LmNpcGhlckFsZ29yaXRobSxjaXBoZXJDaGFpbmluZzpRZS5rZXkuY2lwaGVyQ2hhaW5pbmcsaGFzaEFsZ29y''@;'; put 'put ''aXRobTpRZS5rZXkuaGFzaEFsZ29yaXRobSxzYWx0VmFsdWU6UWUua2V5LnNhbHRWYWx1ZS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQ6UWUua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaElucHV0LnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNyeXB0ZWRWZXJp''@;'; put 'put ''Zmllckhhc2hWYWx1ZTpRZS5rZXkuZW5jcnlwdGVkVmVyaWZpZXJIYXNoVmFsdWUudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZEtleVZhbHVlOlFlLmtleS5lbmNyeXB0ZWRLZXlWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fV19XX1dfSxidD0obmV3IF8pLmJ1aWxkKGZ0KTtyZXR1cm4g''@;'; put 'put ''QnVmZmVyLmNvbmNhdChbbSxCdWZmZXIuZnJvbShidCwidXRmOCIpXSl9KGJ0KSxzbz1hZS51dGlscy5jZmJfbmV3KCk7cmV0dXJuIGFlLnV0aWxzLmNmYl9hZGQoc28sIkVuY3J5cHRpb25JbmZvIixPaSksYWUudXRpbHMuY2ZiX2FkZChzbywiRW5jcnlwdGVkUGFja2FnZSIsRXQpLHNvfX0o''@;'; put 'put ''KTtmdW5jdGlvbiBYQihkKXtyZXR1cm4gZnVuY3Rpb24obSl7Zm9yKHZhciBUPTA7VCE9ZC5sZW5ndGg7KytUKXt2YXIgUD1kW1RdO3ZvaWQgMD09PW1bUFswXV0mJihtW1BbMF1dPVBbMV0pLCJuIj09PVBbMl0mJihtW1BbMF1dPU51bWJlcihtW1BbMF1dKSl9fX12YXIgSVI9ZnVuY3Rpb24o''@;'; put 'put ''ZCl7WEIoW1siY2VsbE5GIiwhMV0sWyJjZWxsSFRNTCIsITBdLFsiY2VsbEZvcm11bGEiLCEwXSxbImNlbGxTdHlsZXMiLCExXSxbImNlbGxUZXh0IiwhMF0sWyJjZWxsRGF0ZXMiLCExXSxbInNoZWV0U3R1YnMiLCExXSxbInNoZWV0Um93cyIsMCwibiJdLFsiYm9va0RlcHMiLCExXSxbImJv''@;'; put 'put ''b2tTaGVldHMiLCExXSxbImJvb2tQcm9wcyIsITFdLFsiYm9va0ZpbGVzIiwhMV0sWyJib29rVkJBIiwhMV0sWyJwYXNzd29yZCIsIiJdLFsiV1RGIiwhMV1dKShkKSxkLmJvb2tJbWFnZXMmJihkLmNlbGxTdHlsZXM9ITApfSxKZWU9WEIoW1siY2VsbERhdGVzIiwhMV0sWyJib29rU1NUIiwh''@;'; put 'put ''MV0sWyJib29rVHlwZSIsInhsc3giXSxbImNvbXByZXNzaW9uIiwhMV0sWyJXVEYiLCExXV0pO2Z1bmN0aW9uIHQ2ZShkKXtyZXR1cm4gdWEuV1MuaW5kZXhPZihkKT4tMT8ic2hlZXQiOnVhLkNTJiZkPT11YS5DUz8iY2hhcnQiOnVhLkRTJiZkPT11YS5EUz8iZGlhbG9nIjp1YS5NUyYmZD09''@;'; put 'put ''dWEuTVM/Im1hY3JvIjpkJiZkLmxlbmd0aD9kOiJzaGVldCJ9dmFyIEo5PVtdO2Z1bmN0aW9uIFl5KGQsXyxtLFQsUCxRLHNlLG9lLGRlLExlLE5lLEJlKXt0cnl7UVtUXT1MdSh2cihkLG0sITApLF8pO3ZhciBudCxaZT1VdChkLF8pO3N3aXRjaChvZSl7Y2FzZSJzaGVldCI6bnQ9ZnVuY3Rp''@;'; put 'put ''b24geEIoZCxfLG0sVCxQLFEsc2Usb2Upe3JldHVybiIuYmluIj09PV8uc2xpY2UoLTQpP2Z1bmN0aW9uIGZCKGQsXyxtLFQsUCxRLHNlKXtpZighZClyZXR1cm4gZDt2YXIgb2U9X3x8e307VHx8KFQ9eyIhaWQiOnt9fSk7dmFyIExlLG10LFFlLGZ0LGt0LGJ0LEV0LFZ0LHVuLG5yLGRlPW9l''@;'; put 'put ''LmRlbnNlP1tdOnt9LE5lPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19LEJlPVtdLFplPSExLG50PSExLG5uPVtdO29lLmJpZmY9MTIsb2VbIiFyb3ciXT0wO3ZhciBhcj0wLGpuPSExLGtuPVtdLHNyPXt9LGdyPW9lLnN1cGJvb2tzfHxQLnN1cGJvb2tzfHxbW11dO2lmKGdyLnNoYXJl''@;'; put 'put ''ZGY9c3IsZ3IuYXJyYXlmPWtuLGdyLlNoZWV0TmFtZXM9UC5TaGVldE5hbWVzfHxQLlNoZWV0cy5tYXAoZnVuY3Rpb24oTGkpe3JldHVybiBMaS5uYW1lfSksIW9lLnN1cGJvb2tzJiYob2Uuc3VwYm9va3M9Z3IsUC5OYW1lcykpZm9yKHZhciBxbj0wO3FuPFAuTmFtZXMubGVuZ3RoOysrcW4p''@;'; put 'put ''Z3JbMF1bcW4rMV09UC5OYW1lc1txbl07dmFyIF9pPVtdLE9pPVtdLHNvPSExO2lmKFo5WzE2XT17bjoiQnJ0U2hvcnRSZWFsIixmOm5CfSxJdShkLGZ1bmN0aW9uKGtyLERuLE9yKXtpZighbnQpc3dpdGNoKE9yKXtjYXNlIDE0ODpMZT1rcjticmVhaztjYXNlIDA6bXQ9a3Isb2Uuc2hlZXRS''@;'; put 'put ''b3dzJiZvZS5zaGVldFJvd3M8PW10LnImJihudD0hMCksdW49em8oa3Q9bXQuciksb2VbIiFyb3ciXT1tdC5yLChrci5oaWRkZW58fGtyLmhwdHx8bnVsbCE9a3IubGV2ZWwpJiYoa3IuaHB0JiYoa3IuaHB4PU5nKGtyLmhwdCkpLE9pW2tyLnJdPWtyKTticmVhaztjYXNlIDI6Y2FzZSAzOmNh''@;'; put 'put ''c2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNTpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpzd2l0Y2goUWU9e3Q6a3JbMl19LGtyWzJdKXtjYXNlIm4iOlFlLnY9a3JbMV07YnJlYWs7Y2FzZSJzIjpR''@;'; put 'put ''ZS52PShWdD1IOVtrclsxXV0pLnQsb2UuY2VsbFN0eWxlcyYmKFFlLlI9ZnVuY3Rpb24gYTVlKGQsXyl7aWYoZC5SKXJldHVybiBkLlI7aWYoXyYmXy5Gb250cyYmKDEhPWQuci5sZW5ndGh8fDAhPWQuclswXS5pY2gpKXtkLlI9W107dmFyIG09MCxUPWQuclttXSxQPWQuclttKzFdO2ZvcihU''@;'; put 'put ''LmljaD4wJiZkLlIucHVzaCh7dDoicyIsdjpkLnQuc2xpY2UoMCxULmljaCl9KTttPGQuci5sZW5ndGgtMTsrK20pZC5SLnB1c2goe3Q6InMiLHY6ZC50LnNsaWNlKChUPWQuclttXSkuaWNoLChQPWQuclttKzFdKS5pY2gpLHM6Xy5Gb250c1tULmlmbnRdfSk7cmV0dXJuIGQuUi5wdXNoKHt0''@;'; put 'put ''OiJzIix2OmQudC5zbGljZSgoUHx8VCkuaWNoKSxzOl8uRm9udHNbKFB8fFQpLmlmbnRdfSksZC5SfX0oVnQsc2UpKTticmVhaztjYXNlImIiOlFlLnY9ISFrclsxXTticmVhaztjYXNlImUiOlFlLnY9a3JbMV0sITEhPT1vZS5jZWxsVGV4dCYmKFFlLnc9bmxbUWUudl0pO2JyZWFrO2Nhc2Ui''@;'; put 'put ''c3RyIjpRZS50PSJzIixRZS52PWtyWzFdfWlmKChmdD1zZS5DZWxsWGZba3JbMF0uaVN0eWxlUmVmXSkmJkZrKFFlLGZ0Lm51bUZtdElkLGZ0LmZpbGxJZCxmdC5mb250SWQsZnQuYm9yZGVySWQsb2UsMCxzZSksb2UuY2VsbFN0eWxlcyYmUWUucyYmZnQuYWxpZ25tZW50JiYoUWUucy5hbGln''@;'; put 'put ''bm1lbnQ9UXIoZnQuYWxpZ25tZW50KSksYnQ9LTE9PWtyWzBdLmM/YnQrMTprclswXS5jLG9lLmRlbnNlPyhkZVtrdF18fChkZVtrdF09W10pLGRlW2t0XVtidF09UWUpOmRlW21zKGJ0KSt1bl09UWUsb2UuY2VsbEZvcm11bGEpe2Zvcihqbj0hMSxhcj0wO2FyPGtuLmxlbmd0aDsrK2FyKXt2''@;'; put 'put ''YXIgX3I9a25bYXJdO210LnI+PV9yWzBdLnMuciYmbXQucjw9X3JbMF0uZS5yJiZidD49X3JbMF0ucy5jJiZidDw9X3JbMF0uZS5jJiYoUWUuRj1odChfclswXSksam49ITApfSFqbiYma3IubGVuZ3RoPjMmJihRZS5mPWtyWzNdKX1pZihOZS5zLnI+bXQuciYmKE5lLnMucj1tdC5yKSxOZS5z''@;'; put 'put ''LmM+YnQmJihOZS5zLmM9YnQpLE5lLmUucjxtdC5yJiYoTmUuZS5yPW10LnIpLE5lLmUuYzxidCYmKE5lLmUuYz1idCksb2UuY2VsbERhdGVzJiZmdCYmIm4iPT1RZS50JiZJLmlzX2RhdGUoSS5fdGFibGVbZnQubnVtRm10SWRdKSl7dmFyIE1uPUkucGFyc2VfZGF0ZV9jb2RlKFFlLnYpO01u''@;'; put 'put ''JiYoUWUudD0iZCIsUWUudj1uZXcgRGF0ZShNbi55LE1uLm0tMSxNbi5kLE1uLkgsTW4uTSxNbi5TLE1uLnUpKX1icmVhaztjYXNlIDE6Y2FzZSAxMjppZighb2Uuc2hlZXRTdHVic3x8WmUpYnJlYWs7UWU9e3Q6InoiLHY6dm9pZCAwfSxidD0tMT09a3JbMF0uYz9idCsxOmtyWzBdLmMsKGZ0''@;'; put 'put ''PXNlLkNlbGxYZltrclswXS5pU3R5bGVSZWZdKSYmRmsoUWUsZnQubnVtRm10SWQsZnQuZmlsbElkLGZ0LmZvbnRJZCxmdC5ib3JkZXJJZCxvZSwwLHNlKSxvZS5jZWxsU3R5bGVzJiZRZS5zJiZmdC5hbGlnbm1lbnQmJihRZS5zLmFsaWdubWVudD1RcihmdC5hbGlnbm1lbnQpKSxvZS5kZW5z''@;'; put 'put ''ZT8oZGVba3RdfHwoZGVba3RdPVtdKSxkZVtrdF1bYnRdPVFlKTpkZVttcyhidCkrdW5dPVFlLE5lLnMucj5tdC5yJiYoTmUucy5yPW10LnIpLE5lLnMuYz5idCYmKE5lLnMuYz1idCksTmUuZS5yPG10LnImJihOZS5lLnI9bXQuciksTmUuZS5jPGJ0JiYoTmUuZS5jPWJ0KTticmVhaztjYXNl''@;'; put 'put ''IDE3Njpubi5wdXNoKGtyKTticmVhaztjYXNlIDQ5NDp2YXIgTnI9VFsiIWlkIl1ba3IucmVsSWRdO2ZvcihOcj8oa3IuVGFyZ2V0PU5yLlRhcmdldCxrci5sb2MmJihrci5UYXJnZXQrPSIjIitrci5sb2MpLGtyLlJlbD1Ocik6IiI9PWtyLnJlbElkJiYoa3IuVGFyZ2V0PSIjIitrci5sb2Mp''@;'; put 'put ''LGt0PWtyLnJmeC5zLnI7a3Q8PWtyLnJmeC5lLnI7KytrdClmb3IoYnQ9a3IucmZ4LnMuYztidDw9a3IucmZ4LmUuYzsrK2J0KW9lLmRlbnNlPyhkZVtrdF18fChkZVtrdF09W10pLGRlW2t0XVtidF18fChkZVtrdF1bYnRdPXt0OiJ6Iix2OnZvaWQgMH0pLGRlW2t0XVtidF0ubD1rcik6KEV0''@;'; put 'put ''PXFpKHtjOmJ0LHI6a3R9KSxkZVtFdF18fChkZVtFdF09e3Q6InoiLHY6dm9pZCAwfSksZGVbRXRdLmw9a3IpO2JyZWFrO2Nhc2UgNDI2OmlmKCFvZS5jZWxsRm9ybXVsYSlicmVhaztrbi5wdXNoKGtyKSwobnI9b2UuZGVuc2U/ZGVba3RdW2J0XTpkZVttcyhidCkrdW5dKS5mPXUxKGtyWzFd''@;'; put 'put ''LE5lLHtyOm10LnIsYzpidH0sZ3Isb2UpLG5yLkY9aHQoa3JbMF0pO2JyZWFrO2Nhc2UgNDI3OmlmKCFvZS5jZWxsRm9ybXVsYSlicmVhaztzcltxaShrclswXS5zKV09a3JbMV0sKG5yPW9lLmRlbnNlP2RlW2t0XVtidF06ZGVbbXMoYnQpK3VuXSkuZj11MShrclsxXSxOZSx7cjptdC5yLGM6''@;'; put 'put ''YnR9LGdyLG9lKTticmVhaztjYXNlIDYwOmlmKCFvZS5jZWxsU3R5bGVzKWJyZWFrO2Zvcig7a3IuZT49a3IuczspX2lba3IuZS0tXT17d2lkdGg6a3Iudy8yNTYsaGlkZGVuOiEhKDEma3IuZmxhZ3MpLGxldmVsOmtyLmxldmVsfSxzb3x8KHNvPSEwKSxCMChfaVtrci5lKzFdKTticmVhaztj''@;'; put 'put ''YXNlIDE2MTpkZVsiIWF1dG9maWx0ZXIiXT17cmVmOmh0KGtyKX07YnJlYWs7Y2FzZSA0NzY6ZGVbIiFtYXJnaW5zIl09a3I7YnJlYWs7Y2FzZSAxNDc6UC5TaGVldHNbbV18fChQLlNoZWV0c1ttXT17fSksa3IubmFtZSYmKFAuU2hlZXRzW21dLkNvZGVOYW1lPWtyLm5hbWUpLChrci5hYm92''@;'; put 'put ''ZXx8a3IubGVmdCkmJihkZVsiIW91dGxpbmUiXT17YWJvdmU6a3IuYWJvdmUsbGVmdDprci5sZWZ0fSk7YnJlYWs7Y2FzZSAxMzc6UC5WaWV3c3x8KFAuVmlld3M9W3t9XSksUC5WaWV3c1swXXx8KFAuVmlld3NbMF09e30pLGtyLlJUTCYmKFAuVmlld3NbMF0uUlRMPSEwKSxrci5ncmlkfHwo''@;'; put 'put ''UC5WaWV3c1swXS5ncmlkPSExLGRlWyIhZ3JpZGxpbmVzIl09ITEpO2JyZWFrO2Nhc2UgNDg1OmRlWyIhc2hlZXRGb3JtYXQiXT1rcjticmVhaztjYXNlIDY0OmNhc2UgMTA1MzohZnVuY3Rpb24gd3AoZCxfLG0sVCl7aWYoXyl7dmFyIFA9e3JlZjpfLnNxcmZ4LHQ6Xy50fTtfLm9wJiYoUC5v''@;'; put 'put ''cD1fLm9wKTt2YXIgUT0iIixzZT0iIixvZT1fLnNxcmZ4PyJzdHJpbmciPT10eXBlb2YgXy5zcXJmeD95dChfLnNxcmZ4LnNwbGl0KCIsIilbMF0pOl8uc3FyZng6bnVsbDtpZihfLmYxJiYoUT11MShfLmYxLG9lLG51bGwsbSxULCEwKSksXy5mMiYmKHNlPXUxKF8uZjIsb2UsbnVsbCxtLFQs''@;'; put 'put ''ITApKSxfLm9wJiZbIklOIiwiT1QiXS5pbmRleE9mKF8ub3ApPj0tMSlQLm1pbj1RLFAubWF4PXNlO2Vsc2UgaWYoXy5vcClQLnY9UTtlbHNlIHRyeXtzd2l0Y2goXy50KXtjYXNlIkxpc3QiOmlmKCJQdGdTdHIiPT09Xy5mMVswXVswXVswXSYmMT09Xy5mMVswXS5sZW5ndGgpe1AubD1fLmYx''@;'; put 'put ''WzBdWzBdWzFdLnNwbGl0KCIsIik7YnJlYWt9Y2FzZSJDdXN0b20iOlAuZj1RfX1jYXRjaHt9ZFsiIXZhbGlkYXRpb25zIl18fChkWyIhdmFsaWRhdGlvbnMiXT1bXSksZFsiIXZhbGlkYXRpb25zIl0ucHVzaChQKX19KGRlLGtyLGdyLG9lKTticmVhaztjYXNlIDE1MTpkZVsiIWZyZWV6ZSJd''@;'; put 'put ''PWtyWzBdO2JyZWFrO2Nhc2UgMTUyOmRlWyIhc2VsIl09a3I7YnJlYWs7Y2FzZSAxNzU6Y2FzZSA2NDQ6Y2FzZSA2MjU6Y2FzZSA1NjI6Y2FzZSAzOTY6Y2FzZSAxMTEyOmNhc2UgMTE0NjpjYXNlIDQ3MTpjYXNlIDEwNTA6Y2FzZSA2NDk6Y2FzZSAxMTA1OmNhc2UgNDk6Y2FzZSA1ODk6Y2Fz''@;'; put 'put ''ZSA2MDc6Y2FzZSA1NjQ6Y2FzZSAxMDU1OmNhc2UgMTY4OmNhc2UgMTc0OmNhc2UgMTE4MDpjYXNlIDQ5OTpjYXNlIDUwNzpjYXNlIDU1MDpjYXNlIDE3MTpjYXNlIDE2NzpjYXNlIDExNzc6Y2FzZSAxNjk6Y2FzZSAxMTgxOmNhc2UgNTUxOmNhc2UgNTUyOmNhc2UgNjYxOmNhc2UgNjM5OmNh''@;'; put 'put ''c2UgNDc4OmNhc2UgNTM3OmNhc2UgNDc3OmNhc2UgNTM2OmNhc2UgMTEwMzpjYXNlIDY4MDpjYXNlIDExMDQ6Y2FzZSAxMDI0OmNhc2UgNjYzOmNhc2UgNTM1OmNhc2UgNjc4OmNhc2UgNTA0OmNhc2UgMTA0MzpjYXNlIDQyODpjYXNlIDE3MDpjYXNlIDMwNzI6Y2FzZSA1MDpjYXNlIDIwNzA6''@;'; put 'put ''Y2FzZSAxMDQ1OmJyZWFrO2Nhc2UgMzU6WmU9ITA7YnJlYWs7Y2FzZSAzNjpaZT0hMTticmVhaztjYXNlIDM3OkJlLnB1c2goRG4pLFplPSEwO2JyZWFrO2Nhc2UgMzg6QmUucG9wKCksWmU9ITE7YnJlYWs7ZGVmYXVsdDppZighKChEbnx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCkmJiEoKERu''@;'; put 'put ''fHwiIikuaW5kZXhPZigiRW5kIik+MCkmJighWmV8fG9lLldURiYmIkJydEFDQmVnaW4iIT1CZVtCZS5sZW5ndGgtMV0pKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitPcisiICIrRG4pfX0sb2UpLGRlbGV0ZSBvZS5zdXBib29rcyxkZWxldGUgb2VbIiFyb3ciXSwhZGVb''@;'; put 'put ''IiFyZWYiXSYmKE5lLnMucjwyZTZ8fExlJiYoTGUuZS5yPjB8fExlLmUuYz4wfHxMZS5zLnI+MHx8TGUucy5jPjApKSYmKGRlWyIhcmVmIl09aHQoTGV8fE5lKSksb2Uuc2hlZXRSb3dzJiZkZVsiIXJlZiJdKXt2YXIgbW89eXQoZGVbIiFyZWYiXSk7b2Uuc2hlZXRSb3dzPD0rbW8uZS5yJiYo''@;'; put 'put ''bW8uZS5yPW9lLnNoZWV0Um93cy0xLG1vLmUucj5OZS5lLnImJihtby5lLnI9TmUuZS5yKSxtby5lLnI8bW8ucy5yJiYobW8ucy5yPW1vLmUuciksbW8uZS5jPk5lLmUuYyYmKG1vLmUuYz1OZS5lLmMpLG1vLmUuYzxtby5zLmMmJihtby5zLmM9bW8uZS5jKSxkZVsiIWZ1bGxyZWYiXT1kZVsi''@;'; put 'put ''IXJlZiJdLGRlWyIhcmVmIl09aHQobW8pKX1yZXR1cm4gbm4ubGVuZ3RoPjAmJihkZVsiIW1lcmdlcyJdPW5uKSxfaS5sZW5ndGg+MCYmKGRlWyIhY29scyJdPV9pKSxPaS5sZW5ndGg+MCYmKGRlWyIhcm93cyJdPU9pKSxkZX0oZCxULG0sUCxRLDAsb2UpOmZ1bmN0aW9uIEg1ZShkLF8sbSxU''@;'; put 'put ''LFAsUSxzZSl7aWYoIWQpcmV0dXJuIGQ7VHx8KFQ9eyIhaWQiOnt9fSk7dmFyIG9lPV8uZGVuc2U/W106e30sZGU9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sTGU9IiIsTmU9IiIsQmU9ZC5tYXRjaChQayk7QmU/KExlPWQuc2xpY2UoMCxCZS5pbmRleCksTmU9ZC5zbGljZShCZS5p''@;'; put 'put ''bmRleCtCZVswXS5sZW5ndGgpKTpMZT1OZT1kO3ZhciBaZT1OZS5sYXN0SW5kZXhPZigiZXh0THN0IiksbXQ9KC0xPT1aZXx8TmUuc2xpY2UoWmUpLExlLm1hdGNoKExTKSk7bXQ/UFMobXRbMF0sMCxQLG0pOihtdD1MZS5tYXRjaChRbSkpJiZmdW5jdGlvbiBPVihkLF8sbSxULFAsUSxzZSl7''@;'; put 'put ''UFMoZC5zbGljZSgwLGQuaW5kZXhPZigiPiIpKSwwLFQsUCk7dmFyIG9lPV8ubWF0Y2goSVYpO2lmKG9lKXt2YXIgTGU9dzgoWHIob2VbMF0pLFEsc2UpO21bIiF0YWJjb2xvciJdPUxlfWlmKChvZT1fLm1hdGNoKERWKSkmJlhyKG9lWzBdKS5maXRUb1BhZ2UmJihtWyIhcHJpbnQiXXx8KG1b''@;'; put 'put ''IiFwcmludCJdPXt9KSxtWyIhcHJpbnQiXS5wcm9wc3x8KG1bIiFwcmludCJdLnByb3BzPXt9KSxtWyIhcHJpbnQiXS5wcm9wcy5maXR8fChtWyIhcHJpbnQiXS5wcm9wcy5maXQ9e30pLG51bGw9PW1bIiFwcmludCJdLnByb3BzLmZpdC5oZWlnaHQmJihtWyIhcHJpbnQiXS5wcm9wcy5maXQu''@;'; put 'put ''aGVpZ2h0PTEpLG51bGw9PW1bIiFwcmludCJdLnByb3BzLmZpdC53aWR0aCYmKG1bIiFwcmludCJdLnByb3BzLmZpdC53aWR0aD0xKSksb2U9Xy5tYXRjaChMVikpe21bIiFvdXRsaW5lIl09e307dmFyIEJlPVhyKG9lWzBdKTtCZS5zdW1tYXJ5QmVsb3cmJihtWyIhb3V0bGluZSJdLmFib3Zl''@;'; put 'put ''PSFUaShCZS5zdW1tYXJ5QmVsb3cpKSxCZS5zdW1tYXJ5UmlnaHQmJihtWyIhb3V0bGluZSJdLmxlZnQ9IVRpKEJlLnN1bW1hcnlSaWdodCkpfX0obXRbMF0sbXRbMV18fCIiLG9lLFAsbSxzZSxRKTt2YXIgUWU9KExlLm1hdGNoKC88KD86XHcqOik/ZGltZW5zaW9uLyl8fHtpbmRleDotMX0p''@;'; put 'put ''LmluZGV4O2lmKFFlPjApe3ZhciBmdD1MZS5zbGljZShRZSxRZSs1MCkubWF0Y2goUjVlKTtmdCYmKCFffHwhXy5ub2RpbSkmJmZ1bmN0aW9uIGNKKGQsXyl7dmFyIG09eXQoXyk7bS5zLnI8PW0uZS5yJiZtLnMuYzw9bS5lLmMmJm0ucy5yPj0wJiZtLnMuYz49MCYmKGRbIiFyZWYiXT1odCht''@;'; put 'put ''KSl9KG9lLGZ0WzFdKX12YXIga3Q9TGUubWF0Y2goaEopO2t0JiZrdFsxXSYmZnVuY3Rpb24gSUooZCxfLG0sVCl7bS5WaWV3c3x8KG0uVmlld3M9W3t9XSk7dmFyIFA9MDtkLnJlcGxhY2UoUkosZnVuY3Rpb24oUSxzZSl7dmFyIG9lPVhyKFEpO2lmKG0uVmlld3NbVF18fChtLlZpZXdzW1Rd''@;'; put 'put ''PXt9KSxUaShvZS5yaWdodFRvTGVmdCkmJihtLlZpZXdzW1RdLlJUTD0hMCksb2Uuc2hvd0dyaWRMaW5lcyYmKG0uVmlld3NbVF0uZ3JpZD1UaShvZS5zaG93R3JpZExpbmVzKSxudWxsPT1fWyIhZ3JpZGxpbmVzIl0mJihfWyIhZ3JpZGxpbmVzIl09VGkob2Uuc2hvd0dyaWRMaW5lcykpKSwr''@;'; put 'put ''b2Uuem9vbVNjYWxlJiYobS5WaWV3c1tUXS56b29tPStvZS56b29tU2NhbGUpLG9lLnZpZXcmJihtLlZpZXdzW1RdLnZpZXc9b2UudmlldyksMT09KytQJiYiLz4iIT1RLnNsaWNlKC0yKSl7dmFyIGRlPWQuc2xpY2Uoc2UrUS5sZW5ndGgpLExlPWRlLm1hdGNoKC88XC8oPzpcdzopP3NoZWV0''@;'; put 'put ''Vmlldyg/OltePmEtel1bXj5dKik/XC8/Pi8pO2lmKCFMZSlyZXR1cm4iIjt2YXIgTmU9KGRlPWRlLnNsaWNlKDAsTGUuaW5kZXgpKS5tYXRjaCgvPCg/Olx3Oik/cGFuZSg/OltePmEtel1bXj5dKik/XC8/Pi8pO2lmKE5lKXt2YXIgQmU9WHIoTmVbMF0pOyJmcm96ZW4iPT1CZS5zdGF0ZT9f''@;'; put 'put ''WyIhZnJlZXplIl09bXMoK0JlLnhTcGxpdHx8MCkrem8oK0JlLnlTcGxpdHx8MCk6QmUudG9wTGVmdENlbGwmJihfWyIhZnJlZXplIl09QmUudG9wTGVmdENlbGwpfXZhciBaZT1kZS5tYXRjaCgvPCg/Olx3Oik/c2VsZWN0aW9uKD86W14+YS16XVtePl0qKT9cLz8+Lyk7aWYoWmUpe3ZhciBu''@;'; put 'put ''dD1YcihaZVswXSk7aWYobnQuYWN0aXZlQ2VsbCYmKF9bIiFzZWwiXT17Y2VsbDpudC5hY3RpdmVDZWxsfSksbnQuc3FyZWYpe3ZhciBtdD1udC5zcXJlZi5yZXBsYWNlKC9ccy4qJC8sIiIpO19bIiFzZWwiXXx8KF9bIiFzZWwiXT17Y2VsbDpxaSh6YShtdCkucyl9KSxfWyIhc2VsIl0ucmFu''@;'; put 'put ''Z2U9bnQuc3FyZWZ9fX1yZXR1cm4iIn0pfShrdFsxXSxvZSxQLG0pO3ZhciBidD1MZS5tYXRjaChENWUpLEV0PVtdO2lmKF8uY2VsbFN0eWxlcyl7dmFyIFZ0PUxlLm1hdGNoKEhrKTtWdCYmZnVuY3Rpb24gd0ooZCxfLG0pe2Zvcih2YXIgVD0hMSxQPTA7UCE9Xy5sZW5ndGg7KytQKXt2YXIg''@;'; put 'put ''UT1YcihfW1BdLCEwKTtRLmhpZGRlbiYmKFEuaGlkZGVuPVRpKFEuaGlkZGVuKSk7dmFyIHNlPXBhcnNlSW50KFEubWluLDEwKS0xLG9lPXBhcnNlSW50KFEubWF4LDEwKS0xO2ZvcihRLm91dGxpbmVMZXZlbCYmKFEubGV2ZWw9K1Eub3V0bGluZUxldmVsfHwwKSxkZWxldGUgUS5taW4sZGVs''@;'; put 'put ''ZXRlIFEubWF4LFEud2lkdGg9K1Eud2lkdGgsIVQmJlEud2lkdGgmJihUPSEwKSxCMChRKSxRLnN0eWxlJiYoUS5zPU95KFEuc3R5bGUsbSkpO3NlPD1vZTspZFtzZSsrXT1RcihRKX19KEV0LFZ0LHNlKX1pZihCZSYmTEooQmVbMV0sbSxvZSxfLGRlLFEsc2UpLF8uY2FsbGJhY2spcmV0dXJu''@;'; put 'put ''IG9lO3ZhciB1bj1OZS5tYXRjaChCayk7dW4mJihvZVsiIXByb3RlY3QiXT1mdW5jdGlvbiBfSihkKXt2YXIgXz1YcihkLCEwLCEwKSxtPXt9O2lmKFRpKF8uc2hlZXQpKXJldHVybiBWVi5mb3JFYWNoKGZ1bmN0aW9uKFQpe21bVF09bnVsbCE9X1tUXSYmVGkoX1tUXSl9KSxrMi5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKFQpe21bVF09bnVsbD09X1tUXXx8VGkoX1tUXSl9KSxfLmFsZ29yaXRobU5hbWUmJihtLmVuY3J5cHRpb249e2FsZ286Xy5hbGdvcml0aG1OYW1lLGhhc2g6Xy5oYXNoVmFsdWUsc2FsdDpfLnNhbHRWYWx1ZSxzcGluOitfLnNwaW5Db3VudHx8MWU1fSksbX0odW5bMF0pKTt2''@;'; put 'put ''YXIgbnI9TmUubWF0Y2goSTVlKTtuciYmKG9lWyIhYXV0b2ZpbHRlciJdPWZ1bmN0aW9uIGpWKGQpe3JldHVybntyZWY6KGQubWF0Y2goL3JlZj0iKFteIl0qKSIvKXx8W10pWzFdfX0obnJbMF0pKTt2YXIgbm49W10sYXI9TmUubWF0Y2godUopO2lmKGFyKWZvcihRZT0wO1FlIT1hci5sZW5n''@;'; put 'put ''dGg7KytRZSlubltRZV09eXQoYXJbUWVdLnNsaWNlKGFyW1FlXS5pbmRleE9mKCciJykrMSkpO3ZhciBqbj0oLTE9PVplP05lOk5lLnNsaWNlKDAsWmUpKS5tYXRjaChPUyk7am4mJihvZVsiIWNvbmRmbXQiXT1bXS5jb25jYXQuYXBwbHkoW10sam4ubWFwKGZ1bmN0aW9uKERuKXtyZXR1cm4g''@;'; put 'put ''QlMoRG4sXyxRLHNlKX0pKSksWmU+LTEmJihqbj1OZS5zbGljZShaZSkubWF0Y2goT1MpKSYmKG9lWyIhY29uZGZtdCJdfHwob2VbIiFjb25kZm10Il09W10pLG9lWyIhY29uZGZtdCJdPW9lWyIhY29uZGZtdCJdLmNvbmNhdC5hcHBseShvZVsiIWNvbmRmbXQiXSxqbi5tYXAoZnVuY3Rpb24o''@;'; put 'put ''RG4pe3JldHVybiBCUyhEbixfLFEsc2UsITApfSkpKTt2YXIga249KC0xPT1aZT9OZTpOZS5zbGljZSgwLFplKSkubWF0Y2goa1YpO2tuJiYob2VbIiF2YWxpZGF0aW9ucyJdPVdrKGtuWzBdLF8pKSxaZT4tMSYmKGtuPU5lLnNsaWNlKFplKS5tYXRjaChrVikpJiYob2VbIiF2YWxpZGF0aW9u''@;'; put 'put ''cyJdfHwob2VbIiF2YWxpZGF0aW9ucyJdPVtdKSxvZVsiIXZhbGlkYXRpb25zIl09b2VbIiF2YWxpZGF0aW9ucyJdLmNvbmNhdChXayhrblswXSxfLCEwKSkpO3ZhciBzcj1OZS5tYXRjaChkSik7c3ImJmZ1bmN0aW9uIHlKKGQsXyxtKXtmb3IodmFyIFQ9QXJyYXkuaXNBcnJheShkKSxQPTA7''@;'; put 'put ''UCE9Xy5sZW5ndGg7KytQKXt2YXIgUT1YcihXbihfW1BdKSwhMCk7aWYoIVEucmVmKXJldHVybjt2YXIgc2U9KChtfHx7fSlbIiFpZCJdfHxbXSlbUS5pZF07c2U/KFEuVGFyZ2V0PXNlLlRhcmdldCxRLmxvY2F0aW9uJiYoUS5UYXJnZXQrPSIjIitDaShRLmxvY2F0aW9uKSkpOihRLlRhcmdl''@;'; put 'put ''dD0iIyIrQ2koUS5sb2NhdGlvbiksc2U9e1RhcmdldDpRLlRhcmdldCxUYXJnZXRNb2RlOiJJbnRlcm5hbCJ9KSxRLlJlbD1zZSxRLnRvb2x0aXAmJihRLlRvb2x0aXA9US50b29sdGlwLGRlbGV0ZSBRLnRvb2x0aXApO2Zvcih2YXIgb2U9eXQoUS5yZWYpLGRlPW9lLnMucjtkZTw9b2UuZS5y''@;'; put 'put ''OysrZGUpZm9yKHZhciBMZT1vZS5zLmM7TGU8PW9lLmUuYzsrK0xlKXt2YXIgTmU9cWkoe2M6TGUscjpkZX0pO1Q/KGRbZGVdfHwoZFtkZV09W10pLGRbZGVdW0xlXXx8KGRbZGVdW0xlXT17dDoieiIsdjp2b2lkIDB9KSxkW2RlXVtMZV0ubD1RKTooZFtOZV18fChkW05lXT17dDoieiIsdjp2''@;'; put 'put ''b2lkIDB9KSxkW05lXS5sPVEpfX19KG9lLHNyLFQpO3ZhciBncj1OZS5tYXRjaChQNWUpO2dyJiZmdW5jdGlvbiBQVihkLF8pe3ZhciBtPVhyKGQsITEsITApO19bIiFwcmludCJdfHwoX1siIXByaW50Il09e30pLF9bIiFwcmludCJdLnByb3BzfHwoX1siIXByaW50Il0ucHJvcHM9e30pO3Zh''@;'; put 'put ''ciBUPV9bIiFwcmludCJdLnByb3BzO20uZ3JpZExpbmVzJiYoVC5ncmlkbGluZXM9VGkobS5ncmlkTGluZXMpKSxudWxsIT1tLmhvcml6b250YWxDZW50ZXJlZCYmKFQuY2VudGVyWD1UaShtLmhvcml6b250YWxDZW50ZXJlZCkpLG51bGwhPW0udmVydGljYWxDZW50ZXJlZCYmKFQuY2VudGVy''@;'; put 'put ''WT1UaShtLnZlcnRpY2FsQ2VudGVyZWQpKX0oZ3JbMF0sb2UpO3ZhciBxbj1OZS5tYXRjaChWayk7cW4mJigob2VbIiFwcmludCJdfHwob2VbIiFwcmludCJdPXt9KSkubWFyZ2lucz1vZVsiIW1hcmdpbnMiXT1CVihYcihxblswXSkpKTt2YXIgX2k9TmUubWF0Y2goamspO19pJiZmdW5jdGlv''@;'; put 'put ''biB6ayhkLF8pe3ZhciBtPVhyKGQsITEsITApO2RlbGV0ZSBtLmlkLGRlbGV0ZSBtWzBdLF9bIiFwcmludCJdfHwoX1siIXByaW50Il09e30pLF9bIiFwcmludCJdLnByb3BzfHwoX1siIXByaW50Il0ucHJvcHM9e30pO3ZhciBUPV9bIiFwcmludCJdLnByb3BzO20ub3JpZW50YXRpb24mJihU''@;'; put 'put ''Lm9yaWVudGF0aW9uPW0ub3JpZW50YXRpb24pLG0uc2NhbGUmJihULnNjYWxlPSttLnNjYWxlKSwrbS5maXRUb0hlaWdodD49MCYmKChULmZpdHx8KFQuZml0PXt9KSkuaGVpZ2h0PSttLmZpdFRvSGVpZ2h0KSwrbS5maXRUb1dpZHRoPj0wJiYoKFQuZml0fHwoVC5maXQ9e30pKS53aWR0aD0r''@;'; put 'put ''bS5maXRUb1dpZHRoKSxtLnBhcGVySGVpZ2h0JiZtLnBhcGVyV2lkdGg/VC5wYXBlcj17d2lkdGg6bS5wYXBlcldpZHRoLGhlaWdodDptLnBhcGVySGVpZ2h0fTptLnBhcGVyU2l6ZSYmKFQucGFwZXI9QThbVC5wYXBlcj0rbS5wYXBlclNpemVdfHxULnBhcGVyKSxtLmhvcml6b250YWxEcGk/''@;'; put 'put ''VC5kcGk9K20uaG9yaXpvbnRhbERwaTptLnZlcnRpY2FsRHBpJiYoVC5kcGk9K20udmVydGljYWxEcGkpLCJhdXRvbWF0aWMiIT0obS5maXJzdFBhZ2VOdW1iZXJ8fCJhdXRvbWF0aWMiKSYmKFQuZmlyc3Q9K20uZmlyc3RQYWdlTnVtYmVyKSxUaShtLmJsYWNrQW5kV2hpdGUpJiYoVC5idz0h''@;'; put 'put ''MCksVGkobS5kcmFmdCkmJihULmRyYWZ0PSEwKSwib3ZlclRoZW5Eb3duIj09bS5wYWdlT3JkZXImJihULm9yZGVyPSJvdmVyIiksTzhbbS5jZWxsQ29tbWVudHNdJiYoVC5jb21tZW50cz1POFttLmNlbGxDb21tZW50c10pLEx5W20uZXJyb3JzXSYmKFQuZXJyb3JzPUx5W20uZXJyb3JzXSl9''@;'; put 'put ''KF9pWzBdLG9lKTt2YXIgT2k9TmUubWF0Y2goRjVlKTtPaSYmZnVuY3Rpb24gRUooZCxfKXtpZihfWyIhcHJpbnQiXXx8KF9bIiFwcmludCJdPXt9KSxkWzFdKXt2YXIgbT0iIixUPTA7ZFsxXS5yZXBsYWNlKEJuLGZ1bmN0aW9uKFAsUSl7aWYoIi8iIT1QLmNoYXJBdCgxKSltPVAuc2xpY2Uo''@;'; put 'put ''MSwtMSksVD1RK1AubGVuZ3RoO2Vsc2UgaWYobSl7dmFyIHNlPW0ubWF0Y2goL0hlYWRlci8pPyJoZWFkZXIiOiJmb290ZXIiLG9lPW0ucmVwbGFjZSgvSGVhZGVyfEZvb3Rlci8sIiIpO209IiIsX1siIXByaW50Il1bc2VdfHwoX1siIXByaW50Il1bc2VdPXt9KSxfWyIhcHJpbnQiXVtzZV1b''@;'; put 'put ''b2VdPUNpKFduKGRbMV0uc2xpY2UoVCxRKSkpfX0pfX0oT2ksb2UpO3ZhciBzbz1OZS5tYXRjaChPNWUpO3NvJiYoKG9lWyIhcHJpbnQiXXx8KG9lWyIhcHJpbnQiXT17fSkpLnJvd0JyZWFrcz1vZVsiIXJvd0JyZWFrcyJdPWZ1bmN0aW9uIHBKKGQpe3ZhciBfPVtdO3JldHVybihkLm1hdGNo''@;'; put 'put ''KFQ1KXx8W10pLmZvckVhY2goZnVuY3Rpb24obSl7dmFyIFQ9WHIobSk7Xy5wdXNoKHtSOitULmlkfSl9KSxffShzb1swXSkpO3ZhciBtbz1OZS5tYXRjaChONWUpO21vJiYoKG9lWyIhcHJpbnQiXXx8KG9lWyIhcHJpbnQiXT17fSkpLmNvbEJyZWFrcz1vZVsiIWNvbEJyZWFrcyJdPWZ1bmN0''@;'; put 'put ''aW9uIG1KKGQpe3ZhciBfPVtdO3JldHVybihkLm1hdGNoKFQ1KXx8W10pLmZvckVhY2goZnVuY3Rpb24obSl7dmFyIFQ9WHIobSk7Xy5wdXNoKHtDOitULmlkfSl9KSxffShtb1swXSkpO3ZhciBMaT1bXTtpZigoTGk9TmUubWF0Y2goL2RyYXdpbmcgcjppZD0iKC4qPykiLykpJiYob2VbIiFy''@;'; put 'put ''ZWwiXT1MaVsxXSksKExpPU5lLm1hdGNoKC9sZWdhY3lEcmF3aW5nIHI6aWQ9IiguKj8pIi8pKSYmKG9lWyIhbGVncmVsIl09TGlbMV0pLChMaT1OZS5tYXRjaChBVikpJiYob2VbIiFjdHJsaWQiXT1MaS5tYXAoZnVuY3Rpb24oRG4pe3JldHVybiBYcihEbil9KSksKExpPU5lLm1hdGNoKEw1''@;'; put 'put ''ZSkpJiZmdW5jdGlvbiBGUyhkLF8pe2RbIiF0YWJsZXJlZnMiXXx8KGRbIiF0YWJsZXJlZnMiXT1bXSksKF8ubWF0Y2goTlMpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihtKXtkWyIhdGFibGVyZWZzIl0ucHVzaChYcihtKS5pZCl9KX0ob2UsTGlbMV0pLF8mJl8ubm9kaW0mJihkZS5zLmM9ZGUu''@;'; put 'put ''cy5yPTApLCFvZVsiIXJlZiJdJiZkZS5lLmM+PWRlLnMuYyYmZGUuZS5yPj1kZS5zLnImJihvZVsiIXJlZiJdPWh0KGRlKSksXy5zaGVldFJvd3M+MCYmb2VbIiFyZWYiXSl7dmFyIGtyPXl0KG9lWyIhcmVmIl0pO18uc2hlZXRSb3dzPD0ra3IuZS5yJiYoa3IuZS5yPV8uc2hlZXRSb3dzLTEs''@;'; put 'put ''a3IuZS5yPmRlLmUuciYmKGtyLmUucj1kZS5lLnIpLGtyLmUucjxrci5zLnImJihrci5zLnI9a3IuZS5yKSxrci5lLmM+ZGUuZS5jJiYoa3IuZS5jPWRlLmUuYyksa3IuZS5jPGtyLnMuYyYmKGtyLnMuYz1rci5lLmMpLG9lWyIhZnVsbHJlZiJdPW9lWyIhcmVmIl0sb2VbIiFyZWYiXT1odChr''@;'; put 'put ''cikpfXJldHVybiBidCYmKG9lWyIhc2hlZXRGb3JtYXQiXT1mdW5jdGlvbiBmSihkKXt2YXIgXz17fSxtPXt9LFQ9ITEsUD17fSxRPSExO3JldHVybiBkLmRlZmF1bHRSb3dIZWlnaHQmJihUPSEwLG0uaHB0PXBhcnNlRmxvYXQoZC5kZWZhdWx0Um93SGVpZ2h0KSksZC56ZXJvSGVpZ2h0JiYo''@;'; put 'put ''VD0hMCxtLmhpZGRlbj1UaShkLnplcm9IZWlnaHQpKSxkLmJhc2VDb2xXaWR0aD8oUT0hMCxQLndjaD1wYXJzZUZsb2F0KGQuYmFzZUNvbFdpZHRoKSk6ZC5kZWZhdWx0Q29sV2lkdGgmJihRPSEwLFAud2NoPXBhcnNlRmxvYXQoZC5kZWZhdWx0Q29sV2lkdGgpLTUvc2QpLGQub3V0bGluZUxl''@;'; put 'put ''dmVsQ29sJiYoXy5jb2xvdXRsaW5lPXBhcnNlSW50KGQub3V0bGluZUxldmVsQ29sKSksZC5vdXRsaW5lTGV2ZWxSb3cmJihfLnJvd291dGxpbmU9cGFyc2VJbnQoZC5vdXRsaW5lTGV2ZWxSb3cpKSxkLnRoaWNrQm90dG9tJiYoXy5ib3R0aGljaz1UaShkLnRoaWNrQm90dG9tKSksZC50aGlj''@;'; put 'put ''a1RvcCYmKF8udG9wdGhpY2s9VGkoZC50aGlja1RvcCkpLGQuZHlEZXNjZW50JiYoXy5keURlc2NlbnQ9cGFyc2VGbG9hdChkLmR5RGVzY2VudCkpLFQmJihXQShtKSxfLnJvdz1tKSxRJiYoQjAoUCksXy5jb2w9UCksX30oWHIoYnRbMF0pKSksRXQubGVuZ3RoPjAmJihvZVsiIWNvbHMiXT1F''@;'; put 'put ''dCksbm4ubGVuZ3RoPjAmJihvZVsiIW1lcmdlcyJdPW5uKSxUWyIhaWQiXVtvZVsiIXJlbCJdXSYmKG9lWyIhZHJhd2VsIl09VFsiIWlkIl1bb2VbIiFyZWwiXV0pLFRbIiFpZCJdW29lWyIhbGVncmVsIl1dJiYob2VbIiFsZWdkcmF3ZWwiXT1UWyIhaWQiXVtvZVsiIWxlZ3JlbCJdXSksKG9l''@;'; put 'put ''WyIhY3RybGlkIl18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKERuKXtEbi5yZWw9VFsiIWlkIl1bRG4uaWRdfSksbnVsbD09b2VbIiFncmlkbGluZXMiXSYmKG9lWyIhZ3JpZGxpbmVzIl09ITApLG9lfShkLFQsbSxQLFEsc2Usb2UpfShaZSxfLFAsZGUsUVtUXSxMZSxOZSxCZSk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJjaGFydCI6bnQ9ZnVuY3Rpb24gQUIoZCxfLG0sVCxQLFEsc2Usb2Upe3JldHVybiIuYmluIj09PV8uc2xpY2UoLTQpP2Z1bmN0aW9uIGRlZShkLF8sbSxULFApe2lmKCFkKXJldHVybiBkO1R8fChUPXsiIWlkIjp7fX0pO3ZhciBRPXsiIXR5cGUiOiJjaGFydCIsIiFkcmF3ZWwiOm51bGws''@;'; put 'put ''IiFyZWwiOiIifSxzZT1bXSxvZT0hMTtyZXR1cm4gSXUoZCxmdW5jdGlvbihMZSxOZSxCZSl7c3dpdGNoKEJlKXtjYXNlIDU1MDpRWyIhcmVsIl09TGU7YnJlYWs7Y2FzZSA2NTE6UC5TaGVldHNbbV18fChQLlNoZWV0c1ttXT17fSksTGUubmFtZSYmKFAuU2hlZXRzW21dLkNvZGVOYW1lPUxl''@;'; put 'put ''Lm5hbWUpO2JyZWFrO2Nhc2UgNTYyOmNhc2UgNjUyOmNhc2UgNjY5OmNhc2UgNjc5OmNhc2UgNTUxOmNhc2UgNTUyOmNhc2UgNDc2OmNhc2UgMzA3MjpicmVhaztjYXNlIDM1Om9lPSEwO2JyZWFrO2Nhc2UgMzY6b2U9ITE7YnJlYWs7Y2FzZSAzNzpzZS5wdXNoKE5lKTticmVhaztjYXNlIDM4''@;'; put 'put ''OnNlLnBvcCgpO2JyZWFrO2RlZmF1bHQ6aWYoKE5lfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKXNlLnB1c2goTmUpO2Vsc2UgaWYoKE5lfHwiIikuaW5kZXhPZigiRW5kIik+MClzZS5wb3AoKTtlbHNlIGlmKCFvZXx8Xy5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAi''@;'; put 'put ''K0JlKyIgIitOZSl9fSxfKSxUWyIhaWQiXVtRWyIhcmVsIl1dJiYoUVsiIWRyYXdlbCJdPVRbIiFpZCJdW1FbIiFyZWwiXV0pLFF9KGQsVCxtLFAsUSk6ZnVuY3Rpb24gWlMoZCxfLG0sVCxQKXtpZighZClyZXR1cm4gZDtUfHwoVD17IiFpZCI6e319KTt2YXIgc2UsUT17IiF0eXBlIjoiY2hh''@;'; put 'put ''cnQiLCIhZHJhd2VsIjpudWxsLCIhcmVsIjoiIn0sb2U9ZC5tYXRjaChMUyk7b2UmJlBTKG9lWzBdLDAsUCxtKTt2YXIgZGU9ZC5tYXRjaChWayk7cmV0dXJuIGRlJiYoUVsiIW1hcmdpbnMiXT1CVihYcihkZVswXSkpKSwoc2U9ZC5tYXRjaCgvZHJhd2luZyByOmlkPSIoLio/KSIvKSkmJihR''@;'; put 'put ''WyIhcmVsIl09c2VbMV0pLFRbIiFpZCJdW1FbIiFyZWwiXV0mJihRWyIhZHJhd2VsIl09VFsiIWlkIl1bUVsiIXJlbCJdXSksUX0oZCwwLG0sUCxRKX0oWmUsXyxQLGRlLFFbVF0sTGUpO2JyZWFrO2Nhc2UibWFjcm8iOm50PWZ1bmN0aW9uIENlZShkLF8pe3JldHVybiBfLnNsaWNlKC00KSx7''@;'; put 'put ''IiF0eXBlIjoibWFjcm8ifX0oMCxfKTticmVhaztjYXNlImRpYWxvZyI6bnQ9ZnVuY3Rpb24ga0IoZCxfKXtyZXR1cm4gXy5zbGljZSgtNCkseyIhdHlwZSI6ImRpYWxvZyJ9fSgwLF8pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgc2hlZXQgdHlwZSAiK29l''@;'; put 'put ''KX1pZihkZS5jYWxsYmFjaylyZXR1cm47c2VbVF09bnQsZnVuY3Rpb24gZXRlKGQsXyxtLFQsUCxRLHNlLG9lKXtpZihkJiZkWyIhZHJhd2VsIl0pe3ZhciBkZT1ocihkWyIhZHJhd2VsIl0uVGFyZ2V0LFQpLExlPXZmKGRlKSxOZT1mdW5jdGlvbiBiUShkLF8sbSxULFApe3ZhciBRPXtjaGFy''@;'; put 'put ''dHM6W10saW1hZ2VzOltdLHNoYXBlczpbXX07aWYoIWQpcmV0dXJuIFE7dmFyIHNlPVB8fHt9O3JldHVybihkLm1hdGNoKC88W148XSo/KGFic29sdXRlQW5jaG9yfG9uZUNlbGxBbmNob3J8dHdvQ2VsbEFuY2hvcikuKj8oYWJzb2x1dGVBbmNob3J8b25lQ2VsbEFuY2hvcnx0d29DZWxsQW5j''@;'; put 'put ''aG9yKS4qPz4vZyl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXt2YXIgZGU9IiIsTGU9e3R5cGU6IiJ9LE5lPXt9LEJlPSEwLFplPSExLG50PSExLG10PSExLFFlPXtzOnt9fSxmdD0tMSxrdD1bXSxidD1bXSxFdD17czp7YWxpZ25tZW50Ontob3Jpem9udGFsOiJjZW50ZXIiLHZlcnRpY2Fs''@;'; put 'put ''OiJjZW50ZXIifX19LFZ0PSIiLHVuPS0xLG5uPXt9O29lLnJlcGxhY2UoQm4sZnVuY3Rpb24oYXIsam4pe2t0PW51bGw7dmFyIGtuPVhyKGFyKSxzcj1lYShrblswXSkucmVwbGFjZSgvW1wvXT8+JC8sIiIpO3N3aXRjaChzcil7Y2FzZSI8Y2xpZW50RGF0YSI6YnJlYWs7Y2FzZSI8YWJzb2x1''@;'; put 'put ''dGVBbmNob3IiOmNhc2UiPG9uZUNlbGxBbmNob3IiOmNhc2UiPHR3b0NlbGxBbmNob3IiOkxlLnR5cGU9ZWEoa25bMF0pLnJlcGxhY2UoL1s8Pl0vZywiIik7YnJlYWs7Y2FzZSI8L2Fic29sdXRlQW5jaG9yIjpjYXNlIjwvb25lQ2VsbEFuY2hvciI6Y2FzZSI8L3R3b0NlbGxBbmNob3IiOmJy''@;'; put 'put ''ZWFrO2Nhc2UiPHBvcyI6TGUucG9zPXt4Oitrbi54LHk6K2tuLnl9O2JyZWFrO2Nhc2UiPGV4dCI6QmUmJihMZS5leHQ9e3g6K2tuLmN4LHk6K2tuLmN5fSk7YnJlYWs7Y2FzZSI8ZnJvbSI6Y2FzZSI8dG8iOk5lPXt9O2JyZWFrO2Nhc2UiPC9mcm9tIjpCZSYmKExlLmZyb209TmUpO2JyZWFr''@;'; put 'put ''O2Nhc2UiPC90byI6QmUmJihMZS50bz1OZSk7YnJlYWs7Y2FzZSI8Y29sIjpjYXNlIjxjb2xPZmYiOmNhc2UiPHJvdyI6Y2FzZSI8cm93T2ZmIjpmdD1qbithci5sZW5ndGg7YnJlYWs7Y2FzZSI8L2NvbCI6TmUuYz0rb2Uuc2xpY2UoZnQsam4pO2JyZWFrO2Nhc2UiPC9jb2xPZmYiOk5lLmNP''@;'; put 'put ''ZmY9K29lLnNsaWNlKGZ0LGpuKTticmVhaztjYXNlIjwvcm93IjpOZS5yPStvZS5zbGljZShmdCxqbik7YnJlYWs7Y2FzZSI8L3Jvd09mZiI6TmUuck9mZj0rb2Uuc2xpY2UoZnQsam4pO2JyZWFrO2Nhc2UiPHNwIjpkZT0ic2hhcGUiLEV0LkFuY2hvcj1MZSxRLnNoYXBlcy5wdXNoKEV0KSxC''@;'; put 'put ''ZT0hMTticmVhaztjYXNlIjwvc3AiOkJlPSEwO2JyZWFrO2Nhc2UiPGdyYXBoaWNGcmFtZSI6ZGU9ImdyYXBoaWMiLEJlPSExO2JyZWFrO2Nhc2UiPC9ncmFwaGljRnJhbWUiOkJlPSEwO2JyZWFrO2Nhc2UiPHBpYyI6ZGU9InBpY3R1cmUiLEJlPSExO2JyZWFrO2Nhc2UiPC9waWMiOkJlPSEw''@;'; put 'put ''O2JyZWFrO2Nhc2UiPGdycFNwIjpkZT0iZ3JvdXBzaGFwZSIsQmU9ITE7YnJlYWs7Y2FzZSI8L2dycFNwIjpCZT0hMDticmVhaztjYXNlIjxncmFwaGljIjpjYXNlIjwvZ3JhcGhpYyI6Y2FzZSI8eGZybSI6Y2FzZSI8L3hmcm0iOmNhc2UiPG9mZiI6YnJlYWs7Y2FzZSI8Z3JhcGhpY0RhdGEi''@;'; put 'put ''OlplPSEwO2JyZWFrO2Nhc2UiPC9ncmFwaGljRGF0YSI6WmU9ITE7YnJlYWs7Y2FzZSI8YmxpcEZpbGwiOlplPSEwO2JyZWFrO2Nhc2UiPC9ibGlwRmlsbCI6WmU9ITE7YnJlYWs7Y2FzZSI8L2JsaXAiOmJyZWFrO2Nhc2UiPHNyY1JlY3QiOlplPSEwO2JyZWFrO2Nhc2UiPC9zcmNSZWN0Ijpa''@;'; put 'put ''ZT0hMTticmVhaztjYXNlIjxub0ZpbGwiOmlmKG50KWJyZWFrOyI8c3BQciI9PWJ0LnNsaWNlKC0xKVswXSYmKEV0LnMuZmdDb2xvcj1udWxsKTticmVhaztjYXNlIjwvc29saWRGaWxsIjppZihudHx8bXQpYnJlYWs7IjxzcFByIj09YnQuc2xpY2UoLTIpWzBdP0V0LnMuZmdDb2xvcj1ubjoi''@;'; put 'put ''PHJQciI9PWJ0LnNsaWNlKC0yKVswXSYmYnQuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoUWUucy5jb2xvcj1ubiksbm49e30sbXQ9ITE7YnJlYWs7Y2FzZSI8cHJzdEdlb20iOiJzaGFwZSI9PWRlJiYoRXRbIiFzaGFwZSJdPWtuLnByc3QpO2JyZWFrO2Nhc2UiPC9wcnN0R2VvbSI6Y2FzZSI8''@;'; put 'put ''YXZMc3QiOmJyZWFrO2Nhc2UiPHR4Qm9keSI6WmU9ITAsRXQuUj1bXTticmVhaztjYXNlIjwvdHhCb2R5IjpaZT0hMTticmVhaztjYXNlIjxib2R5UHIiOkV0LnMuYWxpZ25tZW50LnZlcnRpY2FsPVdIW2tuLmFuY2hvcnx8InQiXXx8InRvcCI7YnJlYWs7Y2FzZSI8bHN0U3R5bGUiOmJyZWFr''@;'; put 'put ''O2Nhc2UiPHQiOnVuPWpuK2FyLmxlbmd0aDticmVhaztjYXNlIjxiciI6Y2FzZSI8YnIvPiI6VnQrPSJcbiI7YnJlYWs7Y2FzZSI8L3QiOlZ0Kz1vZS5zbGljZSh1bixqbik7YnJlYWs7Y2FzZSI8cFByIjpFdC5zLmFsaWdubWVudC5ob3Jpem9udGFsfHwoRXQucy5hbGlnbm1lbnQuaG9yaXpv''@;'; put 'put ''bnRhbD1FeVtrbi5hbGdufHwibCJdfHwibGVmdCIpLGJ0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKFFlLnMuYWxpZ25tZW50Lmhvcml6b250YWw9RXlba24uYWxnbnx8ImwiXXx8ImxlZnQiKTticmVhaztjYXNlIjxyUHIiOmtuLnN6JiZidC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihFdC5z''@;'; put 'put ''LnN6PVFlLnMuc3o9K2tuLnN6LzEwMCk7YnJlYWs7Y2FzZSI8cCI6VnQ9IiIsUWU9e3Q6InMiLHY6IiIsczp7YWxpZ25tZW50Ont9fX07YnJlYWs7Y2FzZSI8L3AiOiJzaGFwZSI9PWRlJiZidC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihFdC52PShFdC52fHwiIikrVnQsUWUudj1WdCxFdC5S''@;'; put 'put ''LnB1c2goUWUpKTticmVhaztjYXNlIjxsYXRpbiI6a24udHlwZWZhY2UmJmJ0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKFFlLnMubmFtZT1rbi50eXBlZmFjZSk7YnJlYWs7Y2FzZSI8c3R5bGUiOlplPSEwLG50PSEwO2JyZWFrO2Nhc2UiPC9zdHlsZSI6WmU9ITEsbnQ9ITE7YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8bG5SZWYiOmNhc2UiPGZpbGxSZWYiOmNhc2UiPGVmZmVjdFJlZiI6Y2FzZSI8Zm9udFJlZiI6YnJlYWs7Y2FzZSI8L2ZpbGxSZWYiOiFudCYmInNoYXBlIj09ZGUmJihFdC5zLmZnQ29sb3I9bm4pLG5uPXt9O2JyZWFrO2Nhc2UiPC9mb250UmVmIjohbnQmJiJzaGFwZSI9PWRlJiYoRXQu''@;'; put 'put ''cy5jb2xvcj1ubiksbm49e307YnJlYWs7Y2FzZSI8c2NoZW1lQ2xyIjp2YXIgZ3I9e2JnMToibHQxIixiZzI6Imx0MiIsdHgxOiJkazEiLHR4MjoiZGsyIn1ba24udmFsXXx8a24udmFsLHFuPSgoVC50aGVtZUVsZW1lbnRzfHx7fSkuY2xyU2NoZW1lfHxbXSkuZmluZChmdW5jdGlvbihPaSl7''@;'; put 'put ''cmV0dXJuIE9pLm5hbWU9PWdyfSk7cW4/bm4ucmdiPXFuLnJnYjptdD0hMDticmVhaztjYXNlIjxzY3JnYkNsciI6bXQ9ITA7YnJlYWs7Y2FzZSI8c3JnYkNsciI6bm4ucmdiPWtuLnZhbC5zbGljZSgtNik7YnJlYWs7Y2FzZSI8aHNsQ2xyIjpjYXNlIjxzeXNDbHIiOmNhc2UiPHByc3RDbHIi''@;'; put 'put ''Om10PSEwO2JyZWFrO2Nhc2UiPGNoYXJ0IjprdD1RLmNoYXJ0czt2YXIgX2k9a24uaWQ7Y2FzZSI8YmxpcCI6a3R8fChrdD1RLmltYWdlcyxfaT1rbi5lbWJlZCksa3QucHVzaCh7QW5jaG9yOkxlLFRhcmdldDooX1siIWlkIl1bX2ldfHx7fSkuVGFyZ2V0fSksa24ubGluayYmKGt0W2t0Lmxl''@;'; put 'put ''bmd0aC0xXS5MaW5rPShfWyIhaWQiXVtrbi5saW5rXXx8e30pLlRhcmdldCk7YnJlYWs7Y2FzZSI8Z3JwU3BQciI6WmU9ITA7YnJlYWs7Y2FzZSI8L2dycFNwUHIiOlplPSExO2JyZWFrO2Nhc2UiPG52R3JwU3BQciI6WmU9ITA7YnJlYWs7Y2FzZSI8L252R3JwU3BQciI6WmU9ITE7YnJlYWs7''@;'; put 'put ''Y2FzZSI8c3BQciI6WmU9ITA7YnJlYWs7Y2FzZSI8L3NwUHIiOlplPSExO2JyZWFrO2Nhc2UiPHN0cmV0Y2giOmNhc2UiPC9zdHJldGNoIjpjYXNlIjxmaWxsUmVjdCI6Y2FzZSI8bnZHcmFwaGljRnJhbWVQciI6Y2FzZSI8L252R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPGNOdkdyYXBoaWNGcmFt''@;'; put 'put ''ZVByIjpjYXNlIjwvY052R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPGdyYXBoaWNGcmFtZUxvY2tzIjpjYXNlIjxudlBpY1ByIjpjYXNlIjwvbnZQaWNQciI6Y2FzZSI8Y052UGljUHIiOmNhc2UiPC9jTnZQaWNQciI6Y2FzZSI8cGljTG9ja3MiOmNhc2UiPGNOdkdycFNwUHIiOmNhc2UiPC9jTnZH''@;'; put 'put ''cnBTcFByIjpjYXNlIjxncnBTcExvY2tzIjpjYXNlIjxudlNwUHIiOmNhc2UiPC9udlNwUHIiOmNhc2UiPGNOdlNwUHIiOmNhc2UiPC9jTnZTcFByIjpjYXNlIjxzcExvY2tzIjpicmVhaztjYXNlIjxjTnZQciI6WmU9ITA7YnJlYWs7Y2FzZSI8L2NOdlByIjpaZT0hMTticmVhaztjYXNlIjxj''@;'; put 'put ''eG5TcCI6WmU9ITA7YnJlYWs7Y2FzZSI8L2N4blNwIjpaZT0hMTticmVhaztjYXNlIjxjTnZDeG5TcFByIjpaZT0hMDticmVhaztjYXNlIjwvY052Q3huU3BQciI6WmU9ITE7YnJlYWs7Y2FzZSI8bnZDeG5TcFByIjpjYXNlIjwvbnZDeG5TcFByIjpicmVhaztjYXNlIjxleHRMc3QiOlplPSEw''@;'; put 'put ''LG50PSEwO2JyZWFrO2Nhc2UiPC9leHRMc3QiOlplPSExLG50PSExO2JyZWFrO2Nhc2UiPC9leHQiOmJyZWFrO2RlZmF1bHQ6aWYoc2UmJnNlLldURiYmIVplKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIra25bMF0rIiBpbiBkcmF3aW5nIil9cmV0dXJuIjwvIj09c3Iuc2xpY2Uo''@;'; put 'put ''MCwyKT9idC5wb3AoKToiLz4iIT1hci5zbGljZShhci5sZW5ndGgtMikmJmJ0LnB1c2goc3IpLCIifSl9KSxRfSh2cihtLGRlLCEwKSxMdSh2cihtLExlLCEwKSxkZSksMCxvZSxQKTtpZihOZSl7aWYoTmUuY2hhcnRzKWZvcih2YXIgQmU9MDtCZTxOZS5jaGFydHMubGVuZ3RoOysrQmUpe3Zh''@;'; put 'put ''ciBaZT1OZS5jaGFydHNbQmVdLG50PWhyKFplLlRhcmdldCxkZSksbXQ9dmYobnQpLFFlPSJjaGFydCI9PV8mJjA9PUJlLGZ0PVZ5KHZyKG0sbnQsITApLDAsMCxMdSh2cihtLG10LCEwKSxudCksMCxRZT9kOm51bGwsWmUsUWU/bnVsbDpkKTtRZXx8KGRbIiFjaGFydHMiXXx8KGRbIiFjaGFy''@;'; put 'put ''dHMiXT1bXSksZFsiIWNoYXJ0cyJdLnB1c2goZnQpKX1pZihQLmJvb2tJbWFnZXMmJk5lLmltYWdlcylmb3IodmFyIGt0PTA7a3Q8TmUuaW1hZ2VzLmxlbmd0aDsrK2t0KXt2YXIgYnQ9TmUuaW1hZ2VzW2t0XSxFdD17IiF0eXBlIjoiaW1hZ2UiLCIhcG9zIjpmUShidC5BbmNob3IpLCIhcG9z''@;'; put 'put ''VHlwZSI6YnQuQW5jaG9yLnR5cGUucmVwbGFjZSgvQW5jaG9yLywiIiksIiFhYnNwb3MiOkQ5KGJ0LkFuY2hvcixkKSwiIXJlbHBvcyI6dzUoYnQuQW5jaG9yLGQpfTtpZihidC5UYXJnZXQmJihFdFsiIXBhdGgiXT1ocihidC5UYXJnZXQsZGUpLEV0WyIhZGF0YSJdPVV0KG0sRXRbIiFwYXRo''@;'; put 'put ''Il0pLEV0WyIhZGF0YXR5cGUiXT0ic3RyaW5nIj09dHlwZW9mIEV0WyIhZGF0YSJdPyJiaW5hcnkiOiJidWZmZXIiKSxidC5MaW5rJiYoRXRbIiFkYXRhdHlwZSJdfHwoRXRbIiFkYXRhdHlwZSJdPSJyZW1vdGUiKSxFdFsiIWxpbmsiXT1idC5MaW5rKSwhRXRbIiFkYXRhdHlwZSJdKXRocm93''@;'; put 'put ''IkltYWdlIGRhdGEgY2Fubm90IGJlIGZvdW5kIjtkWyIhaW1hZ2VzIl18fChkWyIhaW1hZ2VzIl09W10pLGRbIiFpbWFnZXMiXS5wdXNoKEV0KX12YXIgVnQsdW47aWYoTmUuc2hhcGVzKWZvcih2YXIgbm49MDtubjxOZS5zaGFwZXMubGVuZ3RoOysrbm4pdW49eyIhdHlwZSI6InNoYXBlIiwi''@;'; put 'put ''IXBvcyI6RDkoKFZ0PU5lLnNoYXBlc1tubl0pLkFuY2hvcixkKSwiIXBvc1R5cGUiOlZ0LkFuY2hvci50eXBlLnJlcGxhY2UoL0FuY2hvci8sIiIpLCIhYWJzcG9zIjpEOShWdC5BbmNob3IsZCksIiFyZWxwb3MiOnc1KFZ0LkFuY2hvcixkKX0sWyJ2IiwiIXNoYXBlIiwicyIsIlIiXS5mb3JF''@;'; put 'put ''YWNoKG5yKSxkWyIhc2hhcGVzIl18fChkWyIhc2hhcGVzIl09W10pLGRbIiFzaGFwZXMiXS5wdXNoKHVuKX19ZnVuY3Rpb24gbnIoYXIpe1Z0W2FyXSYmKHVuW2FyXT1WdFthcl0pfX0obnQsb2UsZCxfLGRlLDAsMCxOZSk7dmFyIG10PVtdO3JldHVybiBRJiZRW1RdJiZGZShRW1RdKS5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKFFlKXtpZihRW1RdW1FlXS5UeXBlPT11YS5DTU5UKXt2YXIgZnQ9aHIoUVtUXVtRZV0uVGFyZ2V0LF8pO2lmKCEobXQ9ZnVuY3Rpb24gUkIoZCxfLG0pe3JldHVybiIuYmluIj09PV8uc2xpY2UoLTQpP2Z1bmN0aW9uIGtRKGQsXyl7dmFyIG09W10sVD1bXSxQPXt9LFE9''@;'; put 'put ''ITE7cmV0dXJuIEl1KGQsZnVuY3Rpb24ob2UsZGUsTGUpe3N3aXRjaChMZSl7Y2FzZSA2MzI6VC5wdXNoKG9lKTticmVhaztjYXNlIDYzNTpQPW9lO2JyZWFrO2Nhc2UgNjM3OlAudD1vZS50LFAuaD1vZS5oLFAucj1vZS5yO2JyZWFrO2Nhc2UgNjM2OmlmKFAuYXV0aG9yPVRbUC5pYXV0aG9y''@;'; put 'put ''XSxkZWxldGUgUC5pYXV0aG9yLF8uc2hlZXRSb3dzJiZQLnJmeCYmXy5zaGVldFJvd3M8PVAucmZ4LnIpYnJlYWs7UC50fHwoUC50PSIiKSxkZWxldGUgUC5yZngsbS5wdXNoKFApO2JyZWFrO2Nhc2UgMzA3MjpjYXNlIDM3OmNhc2UgMzg6YnJlYWs7Y2FzZSAzNTpRPSEwO2JyZWFrO2Nhc2Ug''@;'; put 'put ''MzY6UT0hMTticmVhaztkZWZhdWx0OmlmKCEoKGRlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKSYmISgoZGV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKSYmKCFRfHxfLldURikpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK0xlKyIgIitkZSl9fSksbX0oZCxtKTpmdW5jdGlv''@;'; put 'put ''biBNUShkLF8pe2lmKGQubWF0Y2goLzwoPzpcdys6KT9jb21tZW50cyAqXC8+LykpcmV0dXJuW107dmFyIG09W10sVD1bXSxQPWQubWF0Y2goLzwoPzpcdys6KT9hdXRob3JzPihbXHNcU10qKTxcLyg/Olx3KzopP2F1dGhvcnM+Lyk7UCYmUFsxXSYmUFsxXS5zcGxpdCgvPFwvXHcqOj9hdXRo''@;'; put 'put ''b3I+LykuZm9yRWFjaChmdW5jdGlvbihzZSl7aWYoIiIhPT1zZSYmIiIhPT1zZS50cmltKCkpe3ZhciBvZT1zZS5tYXRjaCgvPCg/Olx3KzopP2F1dGhvcltePl0qPiguKikvKTtvZSYmbS5wdXNoKG9lWzFdKX19KTt2YXIgUT1kLm1hdGNoKC88KD86XHcrOik/Y29tbWVudExpc3Q+KFtcc1xT''@;'; put 'put ''XSopPFwvKD86XHcrOik/Y29tbWVudExpc3Q+Lyk7cmV0dXJuIFEmJlFbMV0mJlFbMV0uc3BsaXQoLzxcL1x3Kjo/Y29tbWVudD4vKS5mb3JFYWNoKGZ1bmN0aW9uKHNlKXtpZigiIiE9PXNlJiYiIiE9PXNlLnRyaW0oKSl7dmFyIG9lPXNlLm1hdGNoKC88KD86XHcrOik/Y29tbWVudFtePl0q''@;'; put 'put ''Pi8pO2lmKG9lKXt2YXIgZGU9WHIob2VbMF0pLExlPXthdXRob3I6ZGUuYXV0aG9ySWQmJm1bZGUuYXV0aG9ySWRdfHwic2hlZXRqc2dob3N0IixyZWY6ZGUucmVmLGd1aWQ6ZGUuZ3VpZH0sTmU9SXMoZGUucmVmKTtpZighKF8uc2hlZXRSb3dzJiZfLnNoZWV0Um93czw9TmUucikpe3ZhciBC''@;'; put 'put ''ZT1zZS5tYXRjaCgvPCg/Olx3KzopP3RleHQ+KFtcc1xTXSopPFwvKD86XHcrOik/dGV4dD4vKSxaZT0hIUJlJiYhIUJlWzFdJiZFcyhCZVsxXSl8fHtyOiIiLHQ6IiIsaDoiIn07TGUucj1aZS5yLCI8dD48L3Q+Ij09WmUuciYmKFplLnQ9WmUuaD0iIiksTGUudD0oWmUudHx8IiIpLnJlcGxh''@;'; put 'put ''Y2UoL1xyXG4vZywiXG4iKS5yZXBsYWNlKC9cci9nLCJcbiIpLF8uY2VsbEhUTUwmJihMZS5oPVplLmgpLFQucHVzaChMZSl9fX19KSxUfShkLG0pfShVdChkLGZ0LCEwKSxmdCxkZSkpfHwhbXQubGVuZ3RoKXJldHVybjshZnVuY3Rpb24gWkgoZCxfKXt2YXIgVCxtPUFycmF5LmlzQXJyYXko''@;'; put 'put ''ZCk7Xy5mb3JFYWNoKGZ1bmN0aW9uKFApe3ZhciBRPUlzKFAucmVmKTtpZihtPyhkW1Eucl18fChkW1Eucl09W10pLFQ9ZFtRLnJdW1EuY10pOlQ9ZFtQLnJlZl0sIVQpe1Q9e3Q6InoifSxtP2RbUS5yXVtRLmNdPVQ6ZFtQLnJlZl09VDt2YXIgc2U9eXQoZFsiIXJlZiJdfHwiQkRXR08xMDAw''@;'; put 'put ''MDAxOkExIik7c2Uucy5yPlEuciYmKHNlLnMucj1RLnIpLHNlLmUucjxRLnImJihzZS5lLnI9US5yKSxzZS5zLmM+US5jJiYoc2Uucy5jPVEuYyksc2UuZS5jPFEuYyYmKHNlLmUuYz1RLmMpO3ZhciBvZT1odChzZSk7b2UhPT1kWyIhcmVmIl0mJihkWyIhcmVmIl09b2UpfVQuY3x8KFQuYz1b''@;'; put 'put ''XSk7dmFyIGRlPXthOlAuYXV0aG9yLHQ6UC50LHI6UC5yfTtkZS5yJiYic3RyaW5nIj09dHlwZW9mIGRlLnImJihkZS5SPW15KGRlLnIpKSxQLmgmJihkZS5oPVAuaCksVC5jLnB1c2goZGUpfSl9KG50LG10KX19KSxmdW5jdGlvbiBudGUoZCxfLG0sVCxQLFEsc2UpeyFkfHwhZFsiIXRhYmxl''@;'; put 'put ''cmVmcyJdfHwhbXx8IW1bIiFpZCJdfHwoZFsiIXRhYmxlcyJdPVtdLGRbIiF0YWJsZXJlZnMiXS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXt2YXIgZGU9bVsiIWlkIl1bb2VdO2lmKGRlJiZkZS5UYXJnZXQpe3ZhciBMZT1ocihkZS5UYXJnZXQsVCk7IWZ1bmN0aW9uIHNrKGQsXyxtLFQsUCl7dmFy''@;'; put 'put ''IFE9e3N0eWxlOnt9LGhlYWRlcjowfSxzZT0hMTtkLnJlcGxhY2UoQm4sZnVuY3Rpb24ob2Upe3ZhciBkZT1YcihvZSk7c3dpdGNoKGVhKGRlWzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8L3RhYmxlPiI6Y2FzZSI8L2F1dG9GaWx0ZXI+IjpjYXNlIjxzb3J0U3RhdGUiOmNhc2UiPHNvcnRTdGF0''@;'; put 'put ''ZT4iOmNhc2UiPC9zb3J0U3RhdGU+IjpjYXNlIjwvdGFibGVDb2x1bW5zIjpjYXNlIjwvdGFibGVDb2x1bW5zPiI6Y2FzZSI8L3RhYmxlQ29sdW1uPiI6Y2FzZSI8Y2FsY3VsYXRlZENvbHVtbkZvcm11bGE+IjpjYXNlIjxjYWxjdWxhdGVkQ29sdW1uRm9ybXVsYSI6Y2FzZSI8L2NhbGN1bGF0''@;'; put 'put ''ZWRDb2x1bW5Gb3JtdWxhPiI6Y2FzZSI8dG90YWxzUm93Rm9ybXVsYT4iOmNhc2UiPHRvdGFsc1Jvd0Zvcm11bGEiOmNhc2UiPC90b3RhbHNSb3dGb3JtdWxhPiI6Y2FzZSI8eG1sQ29sdW1uUHI+IjpjYXNlIjx4bWxDb2x1bW5QciI6Y2FzZSI8L3htbENvbHVtblByPiI6Y2FzZSI8c29ydENv''@;'; put 'put ''bmRpdGlvbj4iOmNhc2UiPHNvcnRDb25kaXRpb24iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+IjpicmVhaztjYXNlIjx0YWJsZSI6ZGUucmVmJiYoUS5yZWY9ZGUucmVmKSxkZS5uYW1lP1EubmFtZT1kZS5uYW1lOmRlLmRpc3Bs''@;'; put 'put ''YXlOYW1lJiYoUS5uYW1lPWRlLmRpc3BsYXlOYW1lKSxudWxsIT1kZS5oZWFkZXJyb3djb3VudCYmMSE9K2RlLmhlYWRlcnJvd2NvdW50P1EuaGVhZGVyPStkZS5oZWFkZXJyb3djb3VudDpudWxsPT1kZS5oZWFkZXJyb3djb3VudCYmKFEuaGVhZGVyPTEpO2JyZWFrO2Nhc2UiPGF1dG9GaWx0''@;'; put 'put ''ZXIiOmNhc2UiPGF1dG9GaWx0ZXI+IjpRLmZpbHRlcj0hMDticmVhaztjYXNlIjx0YWJsZUNvbHVtbnMiOmNhc2UiPHRhYmxlQ29sdW1ucz4iOlEuY29scz1bXTticmVhaztjYXNlIjx0YWJsZVN0eWxlSW5mbyI6ZGUuc2hvd1Jvd1N0cmlwZXMmJihRLnN0eWxlLnJvd3N0cmlwZT1UaShkZS5z''@;'; put 'put ''aG93Um93U3RyaXBlcykpLGRlLnNob3dDb2x1bW5TdHJpcGVzJiYoUS5zdHlsZS5jb2xzdHJpcGU9VGkoZGUuc2hvd0NvbHVtblN0cmlwZXMpKSxkZS5zaG93Rmlyc3RDb2x1bW4mJihRLnN0eWxlLmNvbGZpcnN0PVRpKGRlLnNob3dGaXJzdENvbHVtbikpLGRlLnNob3dMYXN0Q29sdW1uJiYo''@;'; put 'put ''US5zdHlsZS5jb2xsYXN0PVRpKGRlLnNob3dMYXN0Q29sdW1uKSksZGUubmFtZSYmKFEuc3R5bGUubmFtZT1kZS5uYW1lLnJlcGxhY2UoL15UYWJsZVN0eWxlLywiIikpO2JyZWFrO2Nhc2UiPHRhYmxlQ29sdW1uIjpjYXNlIjx0YWJsZUNvbHVtbj4iOlEuY29scy5wdXNoKHtpZDorZGUuaWQs''@;'; put 'put ''bmFtZTpkZS5uYW1lfSk7YnJlYWs7Y2FzZSI8ZmlsdGVyQ29sdW1uPiI6Y2FzZSI8ZmlsdGVyQ29sdW1uIjpjYXNlIjxjdXN0b21GaWx0ZXJzIjpjYXNlIjxjdXN0b21GaWx0ZXJzPiI6Y2FzZSI8ZXh0IjpzZT0hMDticmVhaztjYXNlIjwvZmlsdGVyQ29sdW1uPiI6Y2FzZSI8L2N1c3RvbUZp''@;'; put 'put ''bHRlcnM+IjpjYXNlIjwvZXh0PiI6c2U9ITE7YnJlYWs7ZGVmYXVsdDppZighc2UmJlAuV1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrZGVbMF0rIiBpbiB0YWJsZSIpfXJldHVybiBvZX0pLFEuZmlsdGVyfHwoUS5maWx0ZXI9ITEpLFEuc3R5bGUubmFtZSYmIVEuc3R5bGUu''@;'; put 'put ''bmFtZS5tYXRjaCgvXihMaWdodHxNZWRpdW18RGFyaylcZCskLykmJm0uVGFibGUmJm0uVGFibGUuZm9yRWFjaChmdW5jdGlvbihvZSl7KG9lLm5hbWU9PVEuc3R5bGUubmFtZXx8b2UucmF3bmFtZT09US5zdHlsZS5uYW1lKSYmKFEuc3R5bGUucmF3PVFyKG9lKSl9KSxfWyIhdGFibGVzIl0u''@;'; put 'put ''cHVzaChRKX0oVXQoXyxMZSwhMCksZCxQLDAsc2UpfX0pLGRlbGV0ZSBkWyIhdGFibGVyZWZzIl0pfShudCxkLFFbVF0sXyxCZSwwLGRlKSx0eXBlb2YgcGFyc2Vfc2hlZXRfcGl2b3Q8InUiJiZKOS5wdXNoKFtudCxkLFFbVF0sXyx7U2hlZXRzOnNlfSxCZSxkZV0pLGZ1bmN0aW9uIHR0ZShk''@;'; put 'put ''LF8sbSxULFAsUSxzZSxvZSl7aWYoZCYmZFsiIWxlZ2RyYXdlbCJdKXt2YXIgZGU9aHIoZFsiIWxlZ2RyYXdlbCJdLlRhcmdldCxUKSxMZT12cihtLGRlLCEwKTtMZSYmZnVuY3Rpb24gRVEoZCxfLG0pe3ZhciBUPTA7KGQubWF0Y2goU1EpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihQKXt2YXIg''@;'; put 'put ''a3QsYnQsRXQsVnQsdW4sbnIsbm4sYXIsUT0iIixzZT0hMCxvZT0iIixkZT0tMSxMZT17fSxOZT17fSxCZT17fSxaZT0tMSxudD0tMSxtdD0iIixRZT0iIixmdD0iIixqbj0hMSxrbj0hMTtzd2l0Y2goUC5yZXBsYWNlKEJuLGZ1bmN0aW9uKHFuLF9pKXt2YXIgT2k9WHIocW4pO3N3aXRjaChl''@;'; put 'put ''YShPaVswXSkpe2Nhc2UiPHNoYXBlIjpPaS5maWxsY29sb3ImJihMZS5jb2xvcjE9T2kuZmlsbGNvbG9yKSxPaS5zdHJva2Vjb2xvciYmKEJlLmNvbG9yPU9pLnN0cm9rZWNvbG9yKTticmVhaztjYXNlIjxmaWxsIjpjYXNlIjxmaWxsPiI6Ijx2OmZpbGwiPT1PaVswXSYmKE9pLmNvbG9yMiYm''@;'; put 'put ''KExlLmNvbG9yMj1PaS5jb2xvcjIpLE9pLnR5cGUmJihMZS50eXBlPU9pLnR5cGUpKTticmVhaztjYXNlIjwvZmlsbD4iOmNhc2UiPGxvY2siOmNhc2UiPGxvY2svPiI6YnJlYWs7Y2FzZSI8c2hhZG93IjpPaS5jb2xvciYmKE5lLmNvbG9yPU9pLmNvbG9yKSxPaS5vbiYmKE5lLm9uPU9pLm9u''@;'; put 'put ''KTticmVhaztjYXNlIjxDbGllbnREYXRhIjpPaS5PYmplY3RUeXBlJiYoUT1PaS5PYmplY3RUeXBlKTticmVhaztjYXNlIjxWaXNpYmxlIjpjYXNlIjxWaXNpYmxlLz4iOnNlPSExO2JyZWFrO2Nhc2UiPEFuY2hvciI6Y2FzZSI8QW5jaG9yPiI6Y2FzZSI8Um93IjpjYXNlIjxSb3c+IjpjYXNl''@;'; put 'put ''IjxDb2x1bW4iOmNhc2UiPENvbHVtbj4iOmNhc2UiPEZtbGFNYWNybyI6Y2FzZSI8Rm1sYU1hY3JvPiI6Y2FzZSI8Rm1sYUxpbmsiOmNhc2UiPEZtbGFMaW5rPiI6Y2FzZSI8Rm1sYVJhbmdlIjpjYXNlIjxGbWxhUmFuZ2U+IjpjYXNlIjxTZWxUeXBlIjpjYXNlIjxTZWxUeXBlPiI6Y2FzZSI8''@;'; put 'put ''VmFsIjpjYXNlIjxWYWw+IjpjYXNlIjxNaW4iOmNhc2UiPE1pbj4iOmNhc2UiPE1heCI6Y2FzZSI8TWF4PiI6Y2FzZSI8SW5jIjpjYXNlIjxJbmM+IjpjYXNlIjxQYWdlIjpjYXNlIjxQYWdlPiI6Y2FzZSI8Q2hlY2tlZCI6Y2FzZSI8Q2hlY2tlZD4iOmNhc2UiPHRleHRib3giOmNhc2UiPHRl''@;'; put 'put ''eHRib3g+IjpkZT1faStxbi5sZW5ndGg7YnJlYWs7Y2FzZSI8L0FuY2hvcj4iOm9lPVAuc2xpY2UoZGUsX2kpLnRyaW0oKTticmVhaztjYXNlIjwvUm93PiI6WmU9K1Auc2xpY2UoZGUsX2kpLnRyaW0oKTticmVhaztjYXNlIjwvQ29sdW1uPiI6bnQ9K1Auc2xpY2UoZGUsX2kpLnRyaW0oKTti''@;'; put 'put ''cmVhaztjYXNlIjwvRm1sYU1hY3JvPiI6bXQ9UC5zbGljZShkZSxfaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9GbWxhTGluaz4iOlFlPVAuc2xpY2UoZGUsX2kpLnRyaW0oKTticmVhaztjYXNlIjwvRm1sYVJhbmdlPiI6bm49UC5zbGljZShkZSxfaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9TZWxU''@;'; put 'put ''eXBlPiI6YXI9UC5zbGljZShkZSxfaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9WYWw+IjprdD0rUC5zbGljZShkZSxfaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9NaW4+IjpidD0rUC5zbGljZShkZSxfaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9NYXg+IjpFdD0rUC5zbGljZShkZSxfaSkudHJpbSgp''@;'; put 'put ''O2JyZWFrO2Nhc2UiPC9JbmM+IjpWdD0rUC5zbGljZShkZSxfaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9QYWdlPiI6dW49K1Auc2xpY2UoZGUsX2kpLnRyaW0oKTticmVhaztjYXNlIjwvQ2hlY2tlZD4iOm5yPStQLnNsaWNlKGRlLF9pKS50cmltKCk7YnJlYWs7Y2FzZSI8L3RleHRib3g+Ijpm''@;'; put 'put ''dD1QLnNsaWNlKGRlLF9pKS50cmltKCk7YnJlYWs7Y2FzZSI8TW92ZVdpdGhDZWxscy8+IjpjYXNlIjxNb3ZlV2l0aENlbGxzPiI6am49ITA7YnJlYWs7Y2FzZSI8U2l6ZVdpdGhDZWxscy8+IjpjYXNlIjxTaXplV2l0aENlbGxzPiI6a249ITB9cmV0dXJuIiJ9KSxRKXtjYXNlIk5vdGUiOnZh''@;'; put 'put ''ciBzcj1VMS5zaGVldF9nZXRfY2VsbChfLFplPj0wJiZudD49MD9xaSh7cjpaZSxjOm50fSk6bVtUXS5yZWYpO3NyLmMmJihzci5jLmhpZGRlbj1zZSxvZSYmKHNyLmMucmF3YW5jaG9yPW9lLGpIKG9lLHNyLmMpLHJrKHNyLmNbIiFwb3MiXSwyKiEham4rISFrbixfKSksTGUuY29sb3IxJiYo''@;'; put 'put ''c3IuYy5maWxsPUxlKSxOZS5jb2xvciYmKHNyLmMuc2hhZG93PU5lKSxCZS5jb2xvciYmKHNyLmMuc3Ryb2tlPUJlKSksKytUO2JyZWFrO2Nhc2UiQnV0dG9uIjpjYXNlIkdCb3giOmNhc2UiRHJvcCI6Y2FzZSJMYWJlbCI6Y2FzZSJDaGVja2JveCI6Y2FzZSJTY3JvbGwiOmNhc2UiTGlzdCI6''@;'; put 'put ''Y2FzZSJSYWRpbyI6Y2FzZSJTcGluIjpjYXNlIkVkaXQiOl9bIiFjb250cm9scyJdfHwoX1siIWNvbnRyb2xzIl09W10pO3ZhciBncj17IiF0eXBlIjpRfTtvZSYmakgob2UsZ3IpLG10JiYoZ3IubWFjcm89bXQucmVwbGFjZSgiWzBdISIsIiIpKSxRZSYmKGdyLmxpbms9UWUpLCJTY3JvbGwi''@;'; put 'put ''PT1RfHwiU3BpbiI9PVE/KG51bGw9PWt0JiYoa3Q9MCksbnVsbD09YnQmJihidD0wKSxudWxsPT1FdCYmKEV0PTNlNCksbnVsbD09VnQmJihWdD0xKSwiU2Nyb2xsIj09USYmbnVsbD09dW4mJih1bj0xMCkpOiJSYWRpbyI9PVF8fCJDaGVja2JveCI9PVE/KG51bGw9PW5yJiYobnI9MCksa3Q9''@;'; put 'put ''bnIpOigiTGlzdCI9PVF8fCJEcm9wIj09USkmJihudWxsIT1ubiYmKGdyLnJlZj1ubiksbnVsbD09YXImJihhcj0iU2luZ2xlIiksIkxpc3QiPT1RJiYoZ3Iuc2VsPWFyKSksbnVsbCE9a3QmJihnci52YWw9a3QpLG51bGwhPWJ0JiYoZ3IubWluPWJ0KSxudWxsIT1FdCYmKGdyLm1heD1FdCks''@;'; put 'put ''bnVsbCE9VnQmJihnci5zdGVwPVZ0KSxudWxsIT11biYmKGdyLnBhZ2U9dW4pLGZ0JiYoZ3IudD1mdC5yZXBsYWNlKC9ccyo8W1xzXFNdKj8+XHMqL2csIiIpKSxfWyIhY29udHJvbHMiXS5wdXNoKGdyKX19KX0oV24oTGUpLGQsb2V8fFtdKSxkWyIhTERQIl09ZGUsZFsiIWN0cmxpZCJdJiZk''@;'; put 'put ''WyIhY3RybGlkIl0uZm9yRWFjaChmdW5jdGlvbihOZSl7aWYoTmUucmVsJiZOZS5yZWwuVGFyZ2V0KXt2YXIgQmU9aHIoTmUucmVsLlRhcmdldCxUKTtOZS5wYXRoPUJlLGRlbGV0ZSBOZS5yZWx9fSl9fShudCwwLGQsXywwLDAsMCxtdCksbnR9Y2F0Y2goUWUpe2lmKGRlLldURil0aHJvdyBR''@;'; put 'put ''ZX19ZnVuY3Rpb24gbGgoZCl7cmV0dXJuIi8iPT1kLmNoYXJBdCgwKT9kLnNsaWNlKDEpOmR9dmFyIHNFPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBEUihkLF8pe2lmKEo5PVtdLElSKF89X3x8e30pLE1pKGQsIk1FVEEtSU5GL21hbmlmZXN0LnhtbCIpfHxNaShkLCJvYmplY3RkYXRhLnhtbCIp''@;'; put 'put ''KXJldHVybiBmdW5jdGlvbiBZQihkLF8pe189X3x8e30sTWkoZCwiTUVUQS1JTkYvbWFuaWZlc3QueG1sIikmJmZ1bmN0aW9uIFljKGQsXyl7Zm9yKHZhciBULFAsbT1RUyhkKTtUPVc5LmV4ZWMobSk7KXN3aXRjaChUWzNdKXtjYXNlIm1hbmlmZXN0IjpicmVhaztjYXNlImZpbGUtZW50cnki''@;'; put 'put ''OmlmKCIvIj09KFA9WHIoVFswXSwhMSkpLnBhdGgmJiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0IiE9PVAudHlwZSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgT3BlbkRvY3VtZW50IGlzIG5vdCBhIHNwcmVhZHNoZWV0Iik7YnJlYWs7Y2FzZSJlbmNyeXB0''@;'; put 'put ''aW9uLWRhdGEiOmNhc2UiYWxnb3JpdGhtIjpjYXNlInN0YXJ0LWtleS1nZW5lcmF0aW9uIjpjYXNlImtleS1kZXJpdmF0aW9uIjp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE9EUyBFbmNyeXB0aW9uIik7ZGVmYXVsdDppZihfJiZfLldURil0aHJvdyBUfX0oVXQoZCwiTUVUQS1JTkYv''@;'; put 'put ''bWFuaWZlc3QueG1sIiksXyk7dmFyIG09dnIoZCwiY29udGVudC54bWwiKTtpZighbSl0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgY29udGVudC54bWwgaW4gT0RTIC8gVU9GIGZpbGUiKTt2YXIgVD14UihXbihtKSxfKTtyZXR1cm4gTWkoZCwibWV0YS54bWwiKSYmKFQuUHJvcHM9cnMoVXQo''@;'; put 'put ''ZCwibWV0YS54bWwiKSkpLFR9KGQsXyk7aWYoTWkoZCwiSW5kZXgvRG9jdW1lbnQuaXdhIikpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBOVU1CRVJTIGZpbGUiKTt2YXIgUSxzZSxtPWZ1bmN0aW9uIEJ0KGQpe2Zvcih2YXIgXz1kLkZ1bGxQYXRoc3x8RmUoZC5maWxlcyksbT1bXSxU''@;'; put 'put ''PTA7VDxfLmxlbmd0aDsrK1QpIi8iIT1fW1RdLnNsaWNlKC0xKSYmbS5wdXNoKF9bVF0pO3JldHVybiBtLnNvcnQoKX0oZCksVD1mdW5jdGlvbiBkMyhkKXt2YXIgXz17d29ya2Jvb2tzOltdLHNoZWV0czpbXSxjaGFydHM6W10sZGlhbG9nczpbXSxtYWNyb3M6W10scmVsczpbXSxzdHJzOltd''@;'; put 'put ''LGNvbW1lbnRzOltdLGxpbmtzOltdLGNvcmVwcm9wczpbXSxleHRwcm9wczpbXSxjdXN0cHJvcHM6W10sdGhlbWVzOltdLHN0eWxlczpbXSxjYWxjY2hhaW5zOltdLHZiYTpbXSxkcmF3aW5nczpbXSxwaXZvdHM6W10scGl2b3RjYWNoZXM6W10scGl2b3RyZWNvcmRzOltdLGRhdGFtb2RlbHM6''@;'; put 'put ''W10sY2hhcnRvYmpzOltdLGNoYXJ0c3R5bGVzOltdLGNoYXJ0Y29sb3JzOltdLGNoYXJ0ZXhzOltdLHRhYmxlczpbXSxjb25uczpbXSxjdHJscHJvcHM6W10sY3VzdG9teG1scHJvcHM6W10sVE9ETzpbXSx4bWxuczoiIn07aWYoIWR8fCFkLm1hdGNoKXJldHVybiBfO3ZhciBtPXt9O2lmKChk''@;'; put 'put ''Lm1hdGNoKEJuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oVCl7dmFyIFA9WHIoVCk7c3dpdGNoKFBbMF0ucmVwbGFjZShqYSwiPCIpKXtjYXNlIjw/eG1sIjpicmVhaztjYXNlIjxUeXBlcyI6Xy54bWxucz1QWyJ4bWxucyIrKFBbMF0ubWF0Y2goLzwoXHcrKTovKXx8WyIiLCIiXSlbMV1dO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiPERlZmF1bHQiOm1bUC5FeHRlbnNpb24udG9Mb3dlckNhc2UoKV09UC5Db250ZW50VHlwZTticmVhaztjYXNlIjxPdmVycmlkZSI6dm9pZCAwIT09X1tkcFtQLkNvbnRlbnRUeXBlXV0mJl9bZHBbUC5Db250ZW50VHlwZV1dLnB1c2goUC5QYXJ0TmFtZSl9fSksXy54bWxucyE9''@;'; put 'put ''PVVhLkNUKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBOYW1lc3BhY2U6ICIrXy54bWxucyk7cmV0dXJuIF8uY2FsY2NoYWluPV8uY2FsY2NoYWlucy5sZW5ndGg+MD9fLmNhbGNjaGFpbnNbMF06IiIsXy5zc3Q9Xy5zdHJzLmxlbmd0aD4wP18uc3Ryc1swXToiIixfLnN0eWxlPV8uc3R5bGVz''@;'; put 'put ''Lmxlbmd0aD4wP18uc3R5bGVzWzBdOiIiLF8uY29ubj1fLmNvbm5zLmxlbmd0aD4wP18uY29ubnNbMF06IiIsXy5kZWZhdWx0cz1tLGRlbGV0ZSBfLmNhbGNjaGFpbnMsX30odnIoZCwiW0NvbnRlbnRfVHlwZXNdLnhtbCIpKSxQPSExO2lmKDA9PT1ULndvcmtib29rcy5sZW5ndGgmJlV0KGQs''@;'; put 'put ''c2U9InhsL3dvcmtib29rLnhtbCIsITApJiZULndvcmtib29rcy5wdXNoKHNlKSwwPT09VC53b3JrYm9va3MubGVuZ3RoKXtpZighVXQoZCxzZT0ieGwvd29ya2Jvb2suYmluIiwhMCkpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB3b3JrYm9vayIpO1Qud29ya2Jvb2tzLnB1c2go''@;'; put 'put ''c2UpLFA9ITB9ImJpbiI9PVQud29ya2Jvb2tzWzBdLnNsaWNlKC0zKSYmKFA9ITApO3ZhciBvZT17fSxkZT17fTtpZighXy5ib29rU2hlZXRzJiYhXy5ib29rUHJvcHMpe2lmKEg5PVtdLFQuc3N0KXRyeXtIOT1mdW5jdGlvbiBFZWUoZCxfLG0pe3JldHVybiIuYmluIj09PV8uc2xpY2UoLTQp''@;'; put 'put ''P2Z1bmN0aW9uIGM1KGQsXyl7dmFyIG09W10sVD0hMTtyZXR1cm4gSXUoZCxmdW5jdGlvbihRLHNlLG9lKXtzd2l0Y2gob2Upe2Nhc2UgMTU5Om0uQ291bnQ9UVswXSxtLlVuaXF1ZT1RWzFdO2JyZWFrO2Nhc2UgMTk6bS5wdXNoKFEpO2JyZWFrO2Nhc2UgMTYwOnJldHVybiEwO2Nhc2UgMzU6''@;'; put 'put ''VD0hMDticmVhaztjYXNlIDM2OlQ9ITE7YnJlYWs7ZGVmYXVsdDppZihzZS5pbmRleE9mKCJCZWdpbiIpPjB8fHNlLmluZGV4T2YoIkVuZCIpLCFUfHxfLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrb2UrIiAiK3NlKX19KSxtfShkLG0pOmZ1bmN0aW9uIG81ZShk''@;'; put 'put ''LF8pe3ZhciBtPVtdLFQ9IiI7aWYoIWQpcmV0dXJuIG07dmFyIFA9ZC5tYXRjaChEWCk7aWYoUCl7VD1QWzJdLnJlcGxhY2UoTFgsIiIpLnNwbGl0KGk1ZSk7Zm9yKHZhciBRPTA7USE9VC5sZW5ndGg7KytRKXt2YXIgc2U9RXMoVFtRXS50cmltKCksXyk7bnVsbCE9c2UmJihtW20ubGVuZ3Ro''@;'; put 'put ''XT1zZSl9UD1YcihQWzFdKSxtLkNvdW50PVAuY291bnQsbS5VbmlxdWU9UC51bmlxdWVDb3VudH1yZXR1cm4gbX0oZCxtKX0oVXQoZCxsaChULnNzdCkpLFQuc3N0LF8pfWNhdGNoKF9yKXtpZihfLldURil0aHJvdyBfcn1fLmNlbGxTdHlsZXMmJlQudGhlbWVzLmxlbmd0aCYmKG9lPWZ1bmN0''@;'; put 'put ''aW9uIEg4KGQsXyxtKXtyZXR1cm4gSTkoZCxtKX0odnIoZCxULnRoZW1lc1swXS5yZXBsYWNlKC9eXC8vLCIiKSwhMCl8fCIiLDAsXykpLFQuc3R5bGUmJihkZT1mdW5jdGlvbiBTZWUoZCxfLG0sVCl7cmV0dXJuIi5iaW4iPT09Xy5zbGljZSgtNCk/ZnVuY3Rpb24gb1EoZCxfLG0pe3ZhciBU''@;'; put 'put ''PXtOdW1iZXJGbXQ6W119O2Zvcih2YXIgUCBpbiBJLl90YWJsZSlULk51bWJlckZtdFtQXT1JLl90YWJsZVtQXTtULkNlbGxYZj1bXSxULkZvbnRzPVtdLFQuRmlsbHM9W10sVC5Cb3JkZXJzPVtdO3ZhciBRPVtdLHNlPSExO3JldHVybiBJdShkLGZ1bmN0aW9uKGRlLExlLE5lKXtzd2l0Y2go''@;'; put 'put ''TmUpe2Nhc2UgNDQ6VC5OdW1iZXJGbXRbZGVbMF1dPWRlWzFdLEkubG9hZChkZVsxXSxkZVswXSk7YnJlYWs7Y2FzZSA0Mzp5NShkZS5jb2xvcixfKSxULkZvbnRzLnB1c2goZGUpO2JyZWFrO2Nhc2UgMTAyNTpjYXNlIDQ4OmNhc2UgNTA3OmNhc2UgNTcyOmNhc2UgNDc1OmNhc2UgMTE3MTpj''@;'; put 'put ''YXNlIDIxMDI6Y2FzZSAxMTMwOmNhc2UgNTEyOmNhc2UgMjA5NTpjYXNlIDMwNzI6YnJlYWs7Y2FzZSA0NTpkZS5mZ0NvbG9yJiZ5NShkZS5mZ0NvbG9yLF8pLGRlLmJnQ29sb3ImJnk1KGRlLmJnQ29sb3IsXyksVC5GaWxscy5wdXNoKGRlKTticmVhaztjYXNlIDQ2OlsidG9wIiwiYm90dG9t''@;'; put 'put ''IiwibGVmdCIsInJpZ2h0IiwiZGlhZyJdLmZvckVhY2goZnVuY3Rpb24oQmUpe2RlW0JlXSYmZGVbQmVdLmNvbG9yJiZ5NShkZVtCZV0uY29sb3IsXyl9KSxULkJvcmRlcnMucHVzaChkZSk7YnJlYWs7Y2FzZSA0NzoiQnJ0QmVnaW5DZWxsWEZzIj09UVtRLmxlbmd0aC0xXSYmVC5DZWxsWGYu''@;'; put 'put ''cHVzaChkZSk7YnJlYWs7Y2FzZSAzNTpzZT0hMDticmVhaztjYXNlIDM2OnNlPSExO2JyZWFrO2Nhc2UgMzc6US5wdXNoKExlKSxzZT0hMDticmVhaztjYXNlIDM4OlEucG9wKCksc2U9ITE7YnJlYWs7ZGVmYXVsdDppZigoTGV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApUS5wdXNoKExlKTtl''@;'; put 'put ''bHNlIGlmKChMZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApUS5wb3AoKTtlbHNlIGlmKCFzZXx8bS5XVEYmJiJCcnRBQ0JlZ2luIiE9UVtRLmxlbmd0aC0xXSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrTmUrIiAiK0xlKX19KSwoVC5Gb250c3x8W10pWzBdJiYkbShULkZv''@;'; put 'put ''bnRzWzBdKSxUfShkLG0sVCk6blEoZCxtLFQpfShVdChkLGxoKFQuc3R5bGUpKSxULnN0eWxlLG9lLF8pKX12YXIgTGU9VC5saW5rcy5tYXAoZnVuY3Rpb24oX3Ipe3RyeXt2YXIgTW49THUodnIoZCx2ZihsaChfcikpKSxfcik7cmV0dXJuIGZ1bmN0aW9uIEtTKGQsXyxtLFQpe3JldHVybiIu''@;'; put 'put ''YmluIj09PW0uc2xpY2UoLTQpP2Z1bmN0aW9uIFN5KGQsXyxtLFQpe2lmKCFkKXJldHVybiBkO3ZhciBQPVR8fHt9LFE9ITE7SXUoZCxmdW5jdGlvbihkZSxMZSxOZSl7c3dpdGNoKE5lKXtjYXNlIDM1OTpjYXNlIDM2MzpjYXNlIDM2NDpjYXNlIDM2NjpjYXNlIDM2NzpjYXNlIDM2ODpjYXNl''@;'; put 'put ''IDM2OTpjYXNlIDM3MDpjYXNlIDM3MTpjYXNlIDQ3MjpjYXNlIDU3NzpjYXNlIDU3ODpjYXNlIDU3OTpjYXNlIDU4MDpjYXNlIDU4MTpjYXNlIDU4MjpjYXNlIDU4MzpjYXNlIDU4NDpjYXNlIDU4NTpjYXNlIDU4NjpjYXNlIDU4NzpicmVhaztjYXNlIDM1OlE9ITA7YnJlYWs7Y2FzZSAzNjpR''@;'; put 'put ''PSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoTGV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKChMZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIVF8fFAuV1RGKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrTmUudG9TdHJpbmcoMTYpKyIgIitMZSl9fSxQKX0oZCww''@;'; put 'put ''LDAsVCk6ZnVuY3Rpb24gdlEoZCxfLG0sVCl7dmFyIFA9VHx8e30sUT17U2hlZXROYW1lczpbXSxTaGVldHM6e319LG9lPSExLGRlPXt9LExlPS0xLE5lPS0xLEJlPXtzOntyOjAsYzowfSxlOntyOi0xLGM6LTF9fSxaZT17fSxudD0wO3JldHVybihkfHwiIikucmVwbGFjZShCbixmdW5jdGlv''@;'; put 'put ''bihtdCxRZSl7dmFyIGZ0PVhyKG10KTtzd2l0Y2goZWEoZnRbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxleHRlcm5hbExpbmsiOmNhc2UiPC9leHRlcm5hbExpbms+IjpjYXNlIjwvZXh0ZXJuYWxCb29rPiI6Y2FzZSI8c2hlZXROYW1lcyI6Y2FzZSI8c2hlZXROYW1lcz4iOmNhc2UiPC9zaGVl''@;'; put 'put ''dE5hbWVzPiI6Y2FzZSI8c2hlZXREYXRhU2V0PiI6Y2FzZSI8c2hlZXREYXRhU2V0Lz4iOmNhc2UiPC9zaGVldERhdGFTZXQ+IjpjYXNlIjwvcm93PiI6YnJlYWs7Y2FzZSI8ZXh0ZXJuYWxCb29rIjpjYXNlIjxleHRlcm5hbEJvb2s+IjpRLlRhcmdldD1fWyIhaWQiXVtmdC5pZF0uVGFyZ2V0''@;'; put 'put ''LFEuTWlzc2luZz1fWyIhaWQiXVtmdC5pZF0uVHlwZT09dWEuWE1JU1M7YnJlYWs7Y2FzZSI8c2hlZXROYW1lIjpRLlNoZWV0TmFtZXMucHVzaChDaShXbihmdC52YWwpKSk7YnJlYWs7Y2FzZSI8c2hlZXREYXRhIjpkZT17fSxRLlNoZWV0c1tRLlNoZWV0TmFtZXNbZnQuc2hlZXRJZF1dPVRp''@;'; put 'put ''KGZ0LnJlZnJlc2hFcnJvcnx8IjAiKT9udWxsOmRlO2JyZWFrO2Nhc2UiPC9zaGVldERhdGE+IjpCZS5lLmM+PTAmJihkZVsiIXJlZiJdPWh0KEJlKSk7YnJlYWs7Y2FzZSI8cm93IjpjYXNlIjxyb3c+IjpmdC5yP0xlPXBhcnNlSW50KGZ0LnIsMTApLTE6TGUrKyxOZT0tMTticmVhaztjYXNl''@;'; put 'put ''IjxjZWxsIjpjYXNlIjxjZWxsPiI6ZnQucj9OZT1JcyhmdC5yKS5jOisrTmUsWmUudD1mdC50fHwibiIsInN0ciI9PVplLnQmJihaZS50PSJzIik7YnJlYWs7Y2FzZSI8L2NlbGw+IjpCZS5lLnI8TGUmJihCZS5lLnI9TGUpLEJlLmUuYzxOZSYmKEJlLmUuYz1OZSksZGVbcWkoe3I6TGUsYzpO''@;'; put 'put ''ZX0pXT1aZSxaZT17fTticmVhaztjYXNlIjx2IjpjYXNlIjx2PiI6bnQ9bXQubGVuZ3RoK1FlO2JyZWFrO2Nhc2UiPC92PiI6dmFyIGt0PUNpKGQuc2xpY2UobnQsUWUpKTtaZS52PSJuIj09WmUudD9wYXJzZUZsb2F0KGt0KTprdDticmVhaztjYXNlIjx2Lz4iOlplLnY9IiI7YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8ZGVmaW5lZE5hbWVzPiI6b2U9ITA7YnJlYWs7Y2FzZSI8L2RlZmluZWROYW1lcz4iOm9lPSExO2JyZWFrO2RlZmF1bHQ6aWYoIW9lJiZQLldURil0aHJvdyJ1bnJlY29nbml6ZWQgIitmdFswXSsiIGluIGV4dGVybmFsIGxpbmsifX0pLFF9KGQsXywwLFQpfShVdChkLGxoKF9yKSksTW4s''@;'; put 'put ''X3IsXyl9Y2F0Y2h7fX0pLE5lPWZ1bmN0aW9uIHdlZShkLF8sbSl7cmV0dXJuIi5iaW4iPT09Xy5zbGljZSgtNCk/ZnVuY3Rpb24gRUIoZCxfKXt2YXIgbT17QXBwVmVyc2lvbjp7fSxXQlByb3BzOnt9LFdCVmlldzpbXSxTaGVldHM6W10sQ2FsY1ByOnt9LHhtbG5zOiIifSxUPVtdLFA9ITE7''@;'; put 'put ''X3x8KF89e30pLF8uYmlmZj0xMjt2YXIgUT1bXSxzZT1bW11dO3JldHVybiBzZS5TaGVldE5hbWVzPVtdLHNlLlhUST1bXSxaOVsxNl09e246IkJydEZSVEFyY2hJRCQiLGY6X2VlfSxJdShkLGZ1bmN0aW9uKGRlLExlLE5lKXtzd2l0Y2goTmUpe2Nhc2UgMTU2OnNlLlNoZWV0TmFtZXMucHVz''@;'; put 'put ''aChkZS5uYW1lKSxtLlNoZWV0cy5wdXNoKGRlKTticmVhaztjYXNlIDE1MzptLldCUHJvcHM9ZGU7YnJlYWs7Y2FzZSAzOTpudWxsIT1kZS5TaGVldCYmKF8uU0lEPWRlLlNoZWV0KSxkZS5SZWY9dTEoZGUuUHRnLG51bGwsbnVsbCxzZSxfKSxkZWxldGUgXy5TSUQsZGVsZXRlIGRlLlB0ZyxR''@;'; put 'put ''LnB1c2goZGUpO2JyZWFrO2Nhc2UgMTAzNjpjYXNlIDM2MTpjYXNlIDIwNzE6Y2FzZSAxNTg6Y2FzZSAxNDM6Y2FzZSA2NjQ6Y2FzZSAzNTM6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDUzNDpjYXNlIDY3NzpjYXNlIDE1NzpjYXNlIDYxMDpjYXNlIDIwNTA6Y2FzZSAxNTU6Y2FzZSA1NDg6''@;'; put 'put ''Y2FzZSA2NzY6Y2FzZSAxMjg6Y2FzZSA2NjU6Y2FzZSAyMTI4OmNhc2UgMjEyNTpjYXNlIDU0OTpjYXNlIDIwNTM6Y2FzZSA1OTY6Y2FzZSAyMDc2OmNhc2UgMjA3NTpjYXNlIDIwODI6Y2FzZSAzOTc6Y2FzZSAxNTQ6Y2FzZSAxMTE3OmNhc2UgNTUzOmNhc2UgMjA5MTpjYXNlIDE2OmJyZWFr''@;'; put 'put ''O2Nhc2UgMzU3OmNhc2UgMzU4OmNhc2UgMzU1OmNhc2UgNjY3OnNlWzBdLmxlbmd0aD9zZS5wdXNoKFtOZSxkZV0pOnNlWzBdPVtOZSxkZV0sc2Vbc2UubGVuZ3RoLTFdLlhUST1bXTticmVhaztjYXNlIDM2MjowPT09c2UubGVuZ3RoJiYoc2VbMF09W10sc2VbMF0uWFRJPVtdKSxzZVtzZS5s''@;'; put 'put ''ZW5ndGgtMV0uWFRJPXNlW3NlLmxlbmd0aC0xXS5YVEkuY29uY2F0KGRlKSxzZS5YVEk9c2UuWFRJLmNvbmNhdChkZSk7YnJlYWs7Y2FzZSAzNTpjYXNlIDM3OlQucHVzaChMZSksUD0hMDticmVhaztjYXNlIDM2OmNhc2UgMzg6VC5wb3AoKSxQPSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoTGV8''@;'; put 'put ''fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKChMZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIVB8fF8uV1RGJiYiQnJ0QUNCZWdpbiIhPVRbVC5sZW5ndGgtMV0mJiJCcnRGUlRCZWdpbiIhPVRbVC5sZW5ndGgtMV0pKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitO''@;'; put 'put ''ZSsiICIrTGUpfX0sXyksejkobSksbS5OYW1lcz1RLG0uc3VwYm9va3M9c2UsbX0oZCxtKTpmdW5jdGlvbiBTQihkLF8pe2lmKCFkKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgZmlsZSIpO3ZhciBtPXtBcHBWZXJzaW9uOnt9LFdCUHJvcHM6e30sV0JWaWV3OltdLFNoZWV0czpb''@;'; put 'put ''XSxDYWxjUHI6e30sTmFtZXM6W10sRXh0ZXJuOltdLHhtbG5zOiIifSxUPSExLFA9InhtbG5zIixRPXt9LHNlPTA7aWYoZC5yZXBsYWNlKEJuLGZ1bmN0aW9uKGRlLExlKXt2YXIgTmU9WHIoZGUpO3N3aXRjaChlYShOZVswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPC93b3JrYm9vaz4iOmNhc2Ui''@;'; put 'put ''PGZpbGVWZXJzaW9uLz4iOmNhc2UiPC9maWxlVmVyc2lvbj4iOmNhc2UiPGZpbGVTaGFyaW5nLz4iOmNhc2UiPC93b3JrYm9va1ByPiI6Y2FzZSI8d29ya2Jvb2tQcm90ZWN0aW9uLz4iOmNhc2UiPGJvb2tWaWV3cyI6Y2FzZSI8Ym9va1ZpZXdzPiI6Y2FzZSI8L2Jvb2tWaWV3cz4iOmNhc2Ui''@;'; put 'put ''PC93b3JrYm9va1ZpZXc+IjpjYXNlIjxzaGVldHMiOmNhc2UiPHNoZWV0cz4iOmNhc2UiPC9zaGVldHM+IjpjYXNlIjwvc2hlZXQ+IjpjYXNlIjxmdW5jdGlvbkdyb3VwcyI6Y2FzZSI8ZnVuY3Rpb25Hcm91cHMvPiI6Y2FzZSI8ZnVuY3Rpb25Hcm91cCI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVu''@;'; put 'put ''Y2VzIjpjYXNlIjwvZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZGVmaW5lZE5hbWVzLz4iOmNhc2UiPGRlZmluZWROYW1lLz4iOmNhc2UiPC9jYWxjUHI+IjpjYXNlIjxvbGVTaXplIjpjYXNlIjxjdXN0b21Xb3JrYm9va1ZpZXdzPiI6Y2Fz''@;'; put 'put ''ZSI8L2N1c3RvbVdvcmtib29rVmlld3M+IjpjYXNlIjxjdXN0b21Xb3JrYm9va1ZpZXdzIjpjYXNlIjxjdXN0b21Xb3JrYm9va1ZpZXciOmNhc2UiPC9jdXN0b21Xb3JrYm9va1ZpZXc+IjpjYXNlIjxwaXZvdENhY2hlcz4iOmNhc2UiPC9waXZvdENhY2hlcz4iOmNhc2UiPHBpdm90Q2FjaGVz''@;'; put 'put ''IjpjYXNlIjxwaXZvdENhY2hlIjpjYXNlIjxzbWFydFRhZ1ByIjpjYXNlIjxzbWFydFRhZ1ByLz4iOmNhc2UiPHNtYXJ0VGFnVHlwZXMiOmNhc2UiPHNtYXJ0VGFnVHlwZXM+IjpjYXNlIjwvc21hcnRUYWdUeXBlcz4iOmNhc2UiPHNtYXJ0VGFnVHlwZSI6Y2FzZSI8d2ViUHVibGlzaGluZyI6''@;'; put 'put ''Y2FzZSI8d2ViUHVibGlzaGluZy8+IjpjYXNlIjxmaWxlUmVjb3ZlcnlQciI6Y2FzZSI8ZmlsZVJlY292ZXJ5UHIvPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdHM+IjpjYXNlIjx3ZWJQdWJsaXNoT2JqZWN0cyI6Y2FzZSI8L3dlYlB1Ymxpc2hPYmplY3RzPiI6Y2FzZSI8d2ViUHVibGlzaE9i''@;'; put 'put ''amVjdCI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6Y2FzZSI8ZXh0THN0Lz4iOmNhc2UiPEFyY2hJRCI6Y2FzZSI8cmV2aXNpb25QdHIiOmJyZWFrO2Nhc2UiPHdvcmtib29rIjpkZS5tYXRjaChDQikmJihQPSJ4bWxucyIrZGUubWF0Y2goLzwoXHcrKTov''@;'; put 'put ''KVsxXSksbS54bWxucz1OZVtQXTticmVhaztjYXNlIjxmaWxlVmVyc2lvbiI6ZGVsZXRlIE5lWzBdLG0uQXBwVmVyc2lvbj1OZTticmVhaztjYXNlIjxmaWxlU2hhcmluZyI6bS5Nb2RpZnk9e3VzZXI6TmUudXNlck5hbWUsd2FybjpUaShOZS5yZWFkT25seVJlY29tbWVuZGVkfHwiZmFsc2Ui''@;'; put 'put ''KX0sKE5lLmFsZ29yaXRobU5hbWV8fE5lLmhhc2hWYWx1ZXx8TmUuc2FsdFZhbHVlfHxOZS5zcGluQ291bnQpJiYobS5Nb2RpZnkuZW5jcnlwdGlvbj17YWxnbzpOZS5hbGdvcml0aG1OYW1lLGhhc2g6TmUuaGFzaFZhbHVlLHNhbHQ6TmUuc2FsdFZhbHVlLHNwaW46K05lLnNwaW5Db3VudHx8''@;'; put 'put ''MWU1fSk7YnJlYWs7Y2FzZSI8d29ya2Jvb2tQciI6Y2FzZSI8d29ya2Jvb2tQci8+IjpHUy5mb3JFYWNoKGZ1bmN0aW9uKFplKXtpZihudWxsIT1OZVtaZVswXV0pc3dpdGNoKFplWzJdKXtjYXNlImJvb2wiOm0uV0JQcm9wc1taZVswXV09VGkoTmVbWmVbMF1dKTticmVhaztjYXNlImludCI6''@;'; put 'put ''bS5XQlByb3BzW1plWzBdXT1wYXJzZUludChOZVtaZVswXV0sMTApO2JyZWFrO2RlZmF1bHQ6bS5XQlByb3BzW1plWzBdXT1OZVtaZVswXV19fSksTmUuY29kZU5hbWUmJihtLldCUHJvcHMuQ29kZU5hbWU9V24oTmUuY29kZU5hbWUpKTticmVhaztjYXNlIjx3b3JrYm9va1Byb3RlY3Rpb24i''@;'; put 'put ''OnZhciBCZT1tLlByb3RlY3Rpb258fHt9O0JlLmxvY2tTdHJ1Y3R1cmU9VGkoTmUubG9ja1N0cnVjdHVyZXx8ImZhbHNlIiksQmUubG9ja1dpbmRvd3M9VGkoTmUubG9ja1dpbmRvd3N8fCJmYWxzZSIpLE5lLndvcmtib29rQWxnb3JpdGhtTmFtZSYmKEJlLmVuY3J5cHRpb249e2FsZ286TmUu''@;'; put 'put ''d29ya2Jvb2tBbGdvcml0aG1OYW1lLGhhc2g6TmUud29ya2Jvb2tIYXNoVmFsdWUsc2FsdDpOZS53b3JrYm9va1NhbHRWYWx1ZSxzcGluOitOZS53b3JrYm9va1NwaW5Db3VudHx8MWU1fSksbS5Qcm90ZWN0aW9uPUJlO2JyZWFrO2Nhc2UiPHdvcmtib29rVmlldyI6Y2FzZSI8d29ya2Jvb2tW''@;'; put 'put ''aWV3Lz4iOmRlbGV0ZSBOZVswXSxtLldCVmlldy5wdXNoKE5lKTticmVhaztjYXNlIjxzaGVldCI6c3dpdGNoKE5lLnN0YXRlKXtjYXNlImhpZGRlbiI6TmUuSGlkZGVuPTE7YnJlYWs7Y2FzZSJ2ZXJ5SGlkZGVuIjpOZS5IaWRkZW49MjticmVhaztkZWZhdWx0Ok5lLkhpZGRlbj0wfWRlbGV0''@;'; put 'put ''ZSBOZS5zdGF0ZSxOZS5uYW1lPUNpKFduKE5lLm5hbWUpKSxkZWxldGUgTmVbMF0sbS5TaGVldHMucHVzaChOZSk7YnJlYWs7Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2UiOm0uRXh0ZXJuLnB1c2goTmUuaWQpO2JyZWFrO2Nhc2UiPGRlZmluZWROYW1lcz4iOmNhc2UiPGRlZmluZWROYW1lcyI6''@;'; put 'put ''Y2FzZSI8ZXh0IjpjYXNlIjxBbHRlcm5hdGVDb250ZW50IjpjYXNlIjxBbHRlcm5hdGVDb250ZW50PiI6VD0hMDticmVhaztjYXNlIjwvZGVmaW5lZE5hbWVzPiI6Y2FzZSI8L2V4dD4iOmNhc2UiPC9BbHRlcm5hdGVDb250ZW50PiI6VD0hMTticmVhaztjYXNlIjxkZWZpbmVkTmFtZSI6KFE9''@;'; put 'put ''e30pLk5hbWU9V24oTmUubmFtZSksTmUuY29tbWVudCYmKFEuQ29tbWVudD1OZS5jb21tZW50KSxOZS5sb2NhbFNoZWV0SWQmJihRLlNoZWV0PStOZS5sb2NhbFNoZWV0SWQpLFRpKE5lLmhpZGRlbnx8IjAiKSYmKFEuSGlkZGVuPSEwKSxzZT1MZStkZS5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Rl''@;'; put 'put ''ZmluZWROYW1lPiI6US5SZWY9Q2koV24oZC5zbGljZShzZSxMZSkpKSxtLk5hbWVzLnB1c2goUSk7YnJlYWs7Y2FzZSI8Y2FsY1ByIjpjYXNlIjxjYWxjUHIvPiI6ZGVsZXRlIE5lWzBdLG0uQ2FsY1ByPU5lO2JyZWFrO2RlZmF1bHQ6aWYoIVQmJl8uV1RGKXRocm93IG5ldyBFcnJvcigidW5y''@;'; put 'put ''ZWNvZ25pemVkICIrTmVbMF0rIiBpbiB3b3JrYm9vayIpfXJldHVybiBkZX0pLC0xPT09VWEubWFpbi5pbmRleE9mKG0ueG1sbnMpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBOYW1lc3BhY2U6ICIrbS54bWxucyk7cmV0dXJuIHo5KG0pLG19KGQsbSl9KFV0KGQsbGgoVC53b3JrYm9va3Nb''@;'; put 'put ''MF0pKSxULndvcmtib29rc1swXSxfKSxCZT17fSxaZT0iIjtULmNvcmVwcm9wcy5sZW5ndGgmJigoWmU9VXQoZCxsaChULmNvcmVwcm9wc1swXSksITApKSYmKEJlPXJzKFplKSksMCE9PVQuZXh0cHJvcHMubGVuZ3RoJiYoWmU9VXQoZCxsaChULmV4dHByb3BzWzBdKSwhMCkpJiZmdW5jdGlv''@;'; put 'put ''biBfZihkLF8sbSl7dmFyIFQ9e307X3x8KF89e30pLGQ9V24oZCksZmMuZm9yRWFjaChmdW5jdGlvbihQKXt2YXIgUT0oZC5tYXRjaChMYyhQWzBdKSl8fFtdKVsxXTtzd2l0Y2goUFsyXSl7Y2FzZSJzdHJpbmciOlEmJihfW1BbMV1dPUNpKFEpKTticmVhaztjYXNlImJvb2wiOl9bUFsxXV09''@;'; put 'put ''InRydWUiPT09UTticmVhaztjYXNlInJhdyI6dmFyIHNlPWQubWF0Y2gobmV3IFJlZ0V4cCgiPCIrUFswXSsiW14+XSo+KFtcXHNcXFNdKj8pPC8iK1BbMF0rIj4iKSk7c2UmJnNlLmxlbmd0aD4wJiYoVFtQWzFdXT1zZVsxXSl9fSksVC5IZWFkaW5nUGFpcnMmJlQuVGl0bGVzT2ZQYXJ0cyYm''@;'; put 'put ''Z3AoVC5IZWFkaW5nUGFpcnMsVC5UaXRsZXNPZlBhcnRzLF8sbSl9KFplLEJlLF8pKTt2YXIgbnQ9e307KCFfLmJvb2tTaGVldHN8fF8uYm9va1Byb3BzKSYmMCE9PVQuY3VzdHByb3BzLmxlbmd0aCYmKFplPXZyKGQsbGgoVC5jdXN0cHJvcHNbMF0pLCEwKSkmJihudD1mdW5jdGlvbiBvNShk''@;'; put 'put ''LF8pe3ZhciBtPXt9LFQ9IiIsUD1kLm1hdGNoKHlmKTtpZihQKWZvcih2YXIgUT0wO1EhPVAubGVuZ3RoOysrUSl7dmFyIHNlPVBbUV0sb2U9WHIoc2UpO3N3aXRjaChvZVswXSl7Y2FzZSI8P3htbCI6Y2FzZSI8UHJvcGVydGllcyI6YnJlYWs7Y2FzZSI8cHJvcGVydHkiOlQ9Q2kob2UubmFt''@;'; put 'put ''ZSk7YnJlYWs7Y2FzZSI8L3Byb3BlcnR5PiI6VD1udWxsO2JyZWFrO2RlZmF1bHQ6aWYoMD09PXNlLmluZGV4T2YoIjx2dDoiKSl7dmFyIGRlPXNlLnNwbGl0KCI+IiksTGU9ZGVbMF0uc2xpY2UoNCksTmU9ZGVbMV07c3dpdGNoKExlKXtjYXNlImxwc3RyIjpjYXNlImJzdHIiOmNhc2UibHB3''@;'; put 'put ''c3RyIjpjYXNlImN5IjpjYXNlImVycm9yIjptW1RdPUNpKE5lKTticmVhaztjYXNlImJvb2wiOm1bVF09VGkoTmUpO2JyZWFrO2Nhc2UiaTEiOmNhc2UiaTIiOmNhc2UiaTQiOmNhc2UiaTgiOmNhc2UiaW50IjpjYXNlInVpbnQiOm1bVF09cGFyc2VJbnQoTmUsMTApO2JyZWFrO2Nhc2UicjQi''@;'; put 'put ''OmNhc2UicjgiOmNhc2UiZGVjaW1hbCI6bVtUXT1wYXJzZUZsb2F0KE5lKTticmVhaztjYXNlImZpbGV0aW1lIjpjYXNlImRhdGUiOm1bVF09bG4oTmUpO2JyZWFrO2RlZmF1bHQ6aWYoIi8iPT1MZS5zbGljZSgtMSkpYnJlYWs7Xy5XVEYmJnR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53''@;'; put 'put ''YXJuKCJVbmV4cGVjdGVkIixzZSxMZSxkZSl9fWVsc2UgaWYoIjwvIiE9PXNlLnNsaWNlKDAsMikmJl8uV1RGKXRocm93IG5ldyBFcnJvcihzZSl9fXJldHVybiBtfShaZSxfKSk7dmFyIG10PXt9O2lmKChfLmJvb2tTaGVldHN8fF8uYm9va1Byb3BzKSYmKE5lLlNoZWV0cz9RPU5lLlNoZWV0''@;'; put 'put ''cy5tYXAoZnVuY3Rpb24oTW4pe3JldHVybiBNbi5uYW1lfSk6QmUuV29ya3NoZWV0cyYmQmUuU2hlZXROYW1lcy5sZW5ndGg+MCYmKFE9QmUuU2hlZXROYW1lcyksXy5ib29rUHJvcHMmJihtdC5Qcm9wcz1CZSxtdC5DdXN0cHJvcHM9bnQpLF8uYm9va1NoZWV0cyYmdHlwZW9mIFE8InUiJiYo''@;'; put 'put ''bXQuU2hlZXROYW1lcz1RKSxfLmJvb2tTaGVldHM/bXQuU2hlZXROYW1lczpfLmJvb2tQcm9wcykpcmV0dXJuIG10O1E9e307dmFyIFFlPXt9O18uYm9va0RlcHMmJlQuY2FsY2NoYWluJiYoUWU9ZnVuY3Rpb24gcTVlKGQsXyxtKXtyZXR1cm4iLmJpbiI9PT1fLnNsaWNlKC00KT9mdW5jdGlv''@;'; put 'put ''biBrOChkKXt2YXIgVD1bXTtyZXR1cm4gSXUoZCxmdW5jdGlvbihzZSxvZSxkZSl7aWYoNjM9PT1kZSlULnB1c2goc2UpO2Vsc2UgaWYoISgob2V8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjB8fChvZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBy''@;'; put 'put ''ZWNvcmQgIitkZSsiICIrb2UpfSksVH0oZCk6ZnVuY3Rpb24gVUgoZCl7dmFyIF89W107aWYoIWQpcmV0dXJuIF87dmFyIG09MTtyZXR1cm4oZC5tYXRjaChCbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFQpe3ZhciBQPVhyKFQpO3N3aXRjaChQWzBdKXtjYXNlIjw/eG1sIjpjYXNlIjxjYWxj''@;'; put 'put ''Q2hhaW4iOmNhc2UiPGNhbGNDaGFpbj4iOmNhc2UiPC9jYWxjQ2hhaW4+IjpicmVhaztjYXNlIjxjIjpkZWxldGUgUFswXSxQLmk/bT1QLmk6UC5pPW0sXy5wdXNoKFApfX0pLF99KGQpfShVdChkLGxoKFQuY2FsY2NoYWluKSksVC5jYWxjY2hhaW4pKTt2YXIgYnQsRXQsZnQ9MCxrdD17fSxW''@;'; put 'put ''dD1OZS5TaGVldHM7QmUuV29ya3NoZWV0cz1WdC5sZW5ndGgsQmUuU2hlZXROYW1lcz1bXTtmb3IodmFyIHVuPTA7dW4hPVZ0Lmxlbmd0aDsrK3VuKUJlLlNoZWV0TmFtZXNbdW5dPVZ0W3VuXS5uYW1lO3ZhciBucj1QPyJiaW4iOiJ4bWwiLG5uPVQud29ya2Jvb2tzWzBdLmxhc3RJbmRleE9m''@;'; put 'put ''KCIvIiksYXI9KFQud29ya2Jvb2tzWzBdLnNsaWNlKDAsbm4rMSkrIl9yZWxzLyIrVC53b3JrYm9va3NbMF0uc2xpY2Uobm4rMSkrIi5yZWxzIikucmVwbGFjZSgvXlwvLywiIik7TWkoZCxhcil8fChhcj0ieGwvX3JlbHMvd29ya2Jvb2suIitucisiLnJlbHMiKTt2YXIgam49THUodnIoZCxh''@;'; put 'put ''ciwhMCksYXIpLGtuPWpuLHNyPVtdO2puJiYoTmUmJk5lLkV4dGVybiYmTmUuRXh0ZXJuLmxlbmd0aCYmTmUuRXh0ZXJuLmZvckVhY2goZnVuY3Rpb24oX3IsTW4pe3ZhciBqaT0oIi94bC8iK2puWyIhaWQiXVtfcl0uVGFyZ2V0KS5yZXBsYWNlKC9bXC9dW1wvXS9nLCIvIiksYmk9VC5saW5r''@;'; put 'put ''cy5pbmRleE9mKGppKTtiaT4tMSYmKHNyW01uXT1MZVtiaV0pfSksTmUmJmRlbGV0ZSBOZS5FeHRlcm4pLGpuJiYoam49ZnVuY3Rpb24gbjZlKGQsXyl7aWYoIWQpcmV0dXJuIDA7dHJ5e2Q9Xy5tYXAoZnVuY3Rpb24oVCl7cmV0dXJuIFQuaWR8fChULmlkPVQuc3RyUmVsSUQpLFtULm5hbWUs''@;'; put 'put ''ZFsiIWlkIl1bVC5pZF0uVGFyZ2V0LHQ2ZShkWyIhaWQiXVtULmlkXS5UeXBlKV19KX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gZCYmMCE9PWQubGVuZ3RoP2Q6bnVsbH0oam4sTmUuU2hlZXRzKSk7dmFyIGdyPU1pKGQsInhsL3dvcmtzaGVldHMvc2hlZXQueG1sIik/MTowLHFuPVtdLF9p''@;'; put 'put ''PVtdO2U6Zm9yKGZ0PTA7ZnQhPUJlLldvcmtzaGVldHM7KytmdCl7dmFyIE9pPSJzaGVldCI7aWYoam4mJmpuW2Z0XT8oYnQ9InhsLyIram5bZnRdWzFdLnJlcGxhY2UoL1tcL10/eGxcLy8sIiIpLE1pKGQsYnQpfHwoYnQ9am5bZnRdWzFdKSxNaShkLGJ0KXx8KGJ0PWFyLnJlcGxhY2UoL19y''@;'; put 'put ''ZWxzXC8uKiQvLCIiKStqbltmdF1bMV0pLE9pPWpuW2Z0XVsyXSk6YnQ9KGJ0PSJ4bC93b3Jrc2hlZXRzL3NoZWV0IisoZnQrMS1ncikrIi4iK25yKS5yZXBsYWNlKC9zaGVldDBcLi8sInNoZWV0LiIpLEV0PWJ0LnJlcGxhY2UoL14oLiopKFwvKShbXlwvXSopJC8sIiQxL19yZWxzLyQzLnJl''@;'; put 'put ''bHMiKSxxbi5wdXNoKGJ0KSxfJiZudWxsIT1fLnNoZWV0cylzd2l0Y2godHlwZW9mIF8uc2hlZXRzKXtjYXNlIm51bWJlciI6aWYoZnQhPV8uc2hlZXRzKWNvbnRpbnVlIGU7YnJlYWs7Y2FzZSJzdHJpbmciOmlmKEJlLlNoZWV0TmFtZXNbZnRdLnRvTG93ZXJDYXNlKCkhPV8uc2hlZXRzLnRv''@;'; put 'put ''TG93ZXJDYXNlKCkpY29udGludWUgZTticmVhaztkZWZhdWx0OmlmKEFycmF5LmlzQXJyYXkmJkFycmF5LmlzQXJyYXkoXy5zaGVldHMpKXtmb3IodmFyIHNvPTAsbW89MDttbyE9Xy5zaGVldHMubGVuZ3RoOysrbW8pIm51bWJlciI9PXR5cGVvZiBfLnNoZWV0c1ttb10mJl8uc2hlZXRzW21v''@;'; put 'put ''XT09ZnQmJihzbz0xKSwic3RyaW5nIj09dHlwZW9mIF8uc2hlZXRzW21vXSYmXy5zaGVldHNbbW9dLnRvTG93ZXJDYXNlKCk9PUJlLlNoZWV0TmFtZXNbZnRdLnRvTG93ZXJDYXNlKCkmJihzbz0xKTtpZighc28pY29udGludWUgZX19aWYoIV8uc2tpcFBhcnNlKXt2YXIgTGk9WXkoZCxidCxF''@;'; put 'put ''dCxCZS5TaGVldE5hbWVzW2Z0XSxmdCxrdCxRLE9pLF8sTmUsb2UsZGUpO0xpJiZMaVsiIUxEUCJdJiYoX2lbZnRdPUxpWyIhTERQIl0sZGVsZXRlIExpWyIhTERQIl0pfX1pZih0eXBlb2YgcGFyc2Vfc2hlZXRfcGl2b3Q8InUiKWZvcihmdD0wO2Z0PEo5Lmxlbmd0aDsrK2Z0KXBhcnNlX3No''@;'; put 'put ''ZWV0X3Bpdm90LmFwcGx5KG51bGwsSjlbZnRdKTtpZihtdD17RGlyZWN0b3J5OlQsV29ya2Jvb2s6TmUsUHJvcHM6QmUsQ3VzdHByb3BzOm50LERlcHM6UWUsU2hlZXRzOlEsU2hlZXROYW1lczpCZS5TaGVldE5hbWVzLFN0cmluZ3M6SDksU3R5bGVzOmRlLFRoZW1lczpvZSxTU0Y6SS5nZXRf''@;'; put 'put ''dGFibGUoKX0sIV8uc2tpcFBhcnNlKXtpZihmdW5jdGlvbiBoNWUoZCl7IWR8fCFkLldvcmtib29rfHwhZC5Xb3JrYm9vay5OYW1lc3x8ZC5Xb3JrYm9vay5OYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKF8pe2lmKF8uTmFtZSYmIl94bG5tLiI9PV8uTmFtZS5zbGljZSgwLDYpJiYoIl94bG5tLlBy''@;'; put 'put ''aW50X0FyZWEiPT1fLk5hbWV8fCJfeGxubS5QcmludF9UaXRsZXMiPT1fLk5hbWUpKXt2YXIgbT1kLlNoZWV0c1tkLlNoZWV0TmFtZXNbXy5TaGVldF1dO2lmKG0pe21bIiFwcmludCJdfHwobVsiIXByaW50Il09e30pLG1bIiFwcmludCJdLnByb3BzfHwobVsiIXByaW50Il0ucHJvcHM9e30p''@;'; put 'put ''O3ZhciBUPW1bIiFwcmludCJdLFA9Xy5SZWY7aWYoIl94bG5tLlByaW50X0FyZWEiPT1fLk5hbWUpe1AuaW5kZXhPZigiISIpPi0xJiYoUD1QLnNsaWNlKFAuaW5kZXhPZigiISIpKzEpKTt2YXIgUT15dChQPVAucmVwbGFjZSgvWyRdL2csIiIpKTtULmFyZWE9UX1lbHNlIl94bG5tLlByaW50''@;'; put 'put ''X1RpdGxlcyI9PV8uTmFtZSYmKFQudGl0bGVzPXtzOntyOi0xLGM6LTF9LGU6e3I6LTEsYzotMX19LFAuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHNlKXt2YXIgZGU9emEoc2Uuc2xpY2Uoc2UuaW5kZXhPZigiISIpKzEpLnJlcGxhY2UoL1skXS9nLCIiKSk7ZGUucy5jPi0xJiYoVC50''@;'; put 'put ''aXRsZXMucy5jPWRlLnMuYyksZGUuZS5jPi0xJiYoVC50aXRsZXMuZS5jPWRlLmUuYyksZGUucy5yPi0xJiYoVC50aXRsZXMucy5yPWRlLnMuciksZGUuZS5yPi0xJiYoVC50aXRsZXMuZS5yPWRlLmUucil9KSl9fX0pfShtdCksXyYmXy5ib29rRmlsZXMmJihtdC5rZXlzPW0sbXQuZmlsZXM9''@;'; put 'put ''ZC5maWxlcyksXyYmXy5ib29rVkJBJiYoVC52YmEubGVuZ3RoPjA/bXQudmJhcmF3PVV0KGQsbGgoVC52YmFbMF0pLCEwKTpULmRlZmF1bHRzJiYiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS52YmFQcm9qZWN0Ij09PVQuZGVmYXVsdHMuYmluJiYobXQudmJhcmF3PVV0KGQsInhsL3ZiYVBy''@;'; put 'put ''b2plY3QuYmluIiwhMCkpKSxrbiYma25bIiFpZCJdKXtmb3IodmFyIGtyPVtdLERuPTE7RG48PTEwMjQ7KytEbilrblsiIWlkIl1bInJJZCIrRG5dJiZrblsiIWlkIl1bInJJZCIrRG5dLlR5cGUmJi9jdXN0b21YbWwkLy50ZXN0KGtuWyIhaWQiXVsicklkIitEbl0uVHlwZSkmJmtyLnB1c2go''@;'; put 'put ''aHIoa25bIiFpZCJdWyJySWQiK0RuXS5UYXJnZXQsVC53b3JrYm9va3NbMF0pKTtrci5sZW5ndGg+MCYmKG10LkN1c3RvbVhNTD1bXSxrci5mb3JFYWNoKGZ1bmN0aW9uKF9yKXt2YXIgTW49e2RhdGE6dnIoZCxsaChfcikpfSxOcj12Zihfcik7dHJ5e3ZhciBqaT1MdSh2cihkLGxoKE5yKSwh''@;'; put 'put ''MCksTnIpO2lmKGppKWZvcih2YXIgYmk9MTtiaTw9MTAyNDsrK2JpKWppWyIhaWQiXVsicklkIitiaV0mJmppWyIhaWQiXVsicklkIitiaV0uVHlwZSYmL2N1c3RvbVhtbFByb3BzJC8udGVzdChqaVsiIWlkIl1bInJJZCIrYmldLlR5cGUpJiYoTW4ucHJvcHM9dnIoZCxsaChocihqaVsiIWlk''@;'; put 'put ''Il1bInJJZCIrYmldLlRhcmdldCxfcikpKSl9Y2F0Y2h7fW10LkN1c3RvbVhNTC5wdXNoKE1uKX0pKX12YXIgT3I9eHQoZCwieGwvbW9kZWwvaXRlbS5kYXRhIiwhMCk7T3ImJihtdC5tb2RlbD1PciksVC5jb25uJiYobXQuY29ubj1VdChkLGxoKFQuY29ubiksITApKSxzci5sZW5ndGgmJiht''@;'; put 'put ''dC5FeHRlcm5hbFdCPXNyKSxOZSYmKE5lLlBQST1wNSl9cmV0dXJuIF8udGVtcGxhdGUmJihtdC5fd3NwYXRocz1xbixtdC5fc3R5cGF0aD1saChULnN0eWxlfHwiIiksbXQuX3dicGF0aD1saChULndvcmtib29rc1swXXx8InhsL3dvcmtib29rLnhtbCIpLG10Ll92bWxwYXRocz1faSxtdC5f''@;'; put 'put ''d2JyZWxzcGF0aD1hcixtdC5fY3Q9dnIoZCwiW0NvbnRlbnRfVHlwZXNdLnhtbCIpLG10LmZpbGVzPWQuZmlsZXMsc0UobXQsZCxfKSksbXR9ZnVuY3Rpb24gWnkoZCxfKXt2YXIgbT1ffHx7fTttLnBhc3N3b3JkfHwobS5wYXNzd29yZD0iVmVsdmV0U3dlYXRzaG9wIik7dmFyIFQ9Ildvcmti''@;'; put 'put ''b29rIixQPWFlLmZpbmQoZCxUKTt0cnl7aWYoIShQPWFlLmZpbmQoZCxUPSIvIURhdGFTcGFjZXMvVmVyc2lvbiIpKXx8IVAuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitUKTtpZihmdW5jdGlvbiBPWChkKXt2YXIgXz17fTtfLmlk''@;'; put 'put ''PWQucmVhZF9zaGlmdCgwLCJscHA0IiksXy5SPUxnKGQsNCksXy5VPUxnKGQsNCksXy5XPUxnKGQsNCl9KFAuY29udGVudCksIShQPWFlLmZpbmQoZCxUPSIvIURhdGFTcGFjZXMvRGF0YVNwYWNlTWFwIikpfHwhUC5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVk''@;'; put 'put ''IGZpbGUgbWlzc2luZyAiK1QpO3ZhciBRPWZ1bmN0aW9uIGhTKGQpe3ZhciBfPVtdO2QubCs9NDtmb3IodmFyIG09ZC5yZWFkX3NoaWZ0KDQpO20tLSA+MDspXy5wdXNoKHU1KGQpKTtyZXR1cm4gX30oUC5jb250ZW50KTtpZigxIT09US5sZW5ndGh8fDEhPT1RWzBdLmNvbXBzLmxlbmd0aHx8''@;'; put 'put ''MCE9PVFbMF0uY29tcHNbMF0udHx8IlN0cm9uZ0VuY3J5cHRpb25EYXRhU3BhY2UiIT09UVswXS5uYW1lfHwiRW5jcnlwdGVkUGFja2FnZSIhPT1RWzBdLmNvbXBzWzBdLnYpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBiYWQgIitUKTtpZighKFA9YWUuZmluZChk''@;'; put 'put ''LFQ9Ii8hRGF0YVNwYWNlcy9EYXRhU3BhY2VJbmZvL1N0cm9uZ0VuY3J5cHRpb25EYXRhU3BhY2UiKSl8fCFQLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrVCk7dmFyIHNlPWZ1bmN0aW9uIHM1ZShkKXt2YXIgXz1bXTtkLmwrPTQ7''@;'; put 'put ''Zm9yKHZhciBtPWQucmVhZF9zaGlmdCg0KTttLS0gPjA7KV8ucHVzaChkLnJlYWRfc2hpZnQoMCwibHBwNCIpKTtyZXR1cm4gX30oUC5jb250ZW50KTtpZigxIT1zZS5sZW5ndGh8fCJTdHJvbmdFbmNyeXB0aW9uVHJhbnNmb3JtIiE9c2VbMF0pdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBF''@;'; put 'put ''bmNyeXB0ZWQgZmlsZSBiYWQgIitUKTtpZighKFA9YWUuZmluZChkLFQ9Ii8hRGF0YVNwYWNlcy9UcmFuc2Zvcm1JbmZvL1N0cm9uZ0VuY3J5cHRpb25UcmFuc2Zvcm0vIVByaW1hcnkiKSl8fCFQLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNz''@;'; put 'put ''aW5nICIrVCk7IWZ1bmN0aW9uIEhBKGQpe3ZhciBfPWZ1bmN0aW9uIE5YKGQpe3ZhciBfPXt9O3JldHVybiBkLnJlYWRfc2hpZnQoNCksZC5sKz00LF8uaWQ9ZC5yZWFkX3NoaWZ0KDAsImxwcDQiKSxfLm5hbWU9ZC5yZWFkX3NoaWZ0KDAsImxwcDQiKSxfLlI9TGcoZCw0KSxfLlU9TGcoZCw0''@;'; put 'put ''KSxfLlc9TGcoZCw0KSxffShkKTtpZihfLmVuYW1lPWQucmVhZF9zaGlmdCgwLCI4bHBwNCIpLF8uYmxrc3o9ZC5yZWFkX3NoaWZ0KDQpLF8uY21vZGU9ZC5yZWFkX3NoaWZ0KDQpLDQhPWQucmVhZF9zaGlmdCg0KSl0aHJvdyBuZXcgRXJyb3IoIkJhZCAhUHJpbWFyeSByZWNvcmQiKTtyZXR1''@;'; put 'put ''cm4gX30oUC5jb250ZW50KX1jYXRjaHt9aWYoIShQPWFlLmZpbmQoZCxUPSIvRW5jcnlwdGlvbkluZm8iKSl8fCFQLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrVCk7dmFyIG9lPWZ1bmN0aW9uIFBYKGQpe3ZhciBfPUxnKGQpO3N3''@;'; put 'put ''aXRjaChfLk1pbm9yKXtjYXNlIDI6cmV0dXJuW18uTWlub3IseDkoZCldO2Nhc2UgMzpyZXR1cm5bXy5NaW5vcixsNWUoKV07Y2FzZSA0OnJldHVybltfLk1pbm9yLGZTKGQpXX10aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIHVucmVjb2duaXplZCBWZXJzaW9uOiAi''@;'; put 'put ''K18uTWlub3IpfShQLmNvbnRlbnQpO2lmKCEoUD1hZS5maW5kKGQsVD0iL0VuY3J5cHRlZFBhY2thZ2UiKSl8fCFQLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrVCk7aWYoND09b2VbMF0pcmV0dXJuIGZ1bmN0aW9uIFhlZShkLF8s''@;'; put 'put ''bSxUKXt2YXIgUD1hZS51dGlscy5wcmVwX2Jsb2I7aWYoImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL3Bhc3N3b3JkIiE9ZC51cmkpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBFQ01BLTM3NiBBZ2lsZSBVUkkgIitkLnVyaSk7dmFy''@;'; put 'put ''IFE9ZC5lbmNzWzBdLHNlPVEuaGFzaEFsZ29yaXRobSxvZT0iYWVzLTI1Ni1jYmMiLGRlPUJ1ZmZlci5mcm9tKFEuc2FsdFZhbHVlLCJiYXNlNjQiKSxMZT1CdWZmZXIuZnJvbShkLnNhbHRWYWx1ZSwiYmFzZTY0IiksTmU9K1EuYmxvY2tTaXplLEJlPStRLmtleUJpdHM+PjMsWmU9U2QoQnVm''@;'; put 'put ''ZmVyLmNvbmNhdChbZGUsQnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxtKSldKSxzZSksbnQ9QnVmZmVyLmFsbG9jKDQpO1AobnQsMCk7Zm9yKHZhciBtdD0wO210PFEuc3BpbkNvdW50OysrbXQpbnQubD0wLG50LndyaXRlX3NoaWZ0KDQsbXQpLFplPVNkKEJ1ZmZlci5j''@;'; put 'put ''b25jYXQoW250LFplXSksc2UpO3ZhciBRZT1mdW5jdGlvbihncixxbixfaSxPaSl7dmFyIHNvPVNkKEJ1ZmZlci5jb25jYXQoW2dyLEJ1ZmZlci5mcm9tKFsyMCwxMTAsMTEsMjMxLDE3MSwxNzIsMjA4LDIxNF0pXSksT2kpLG1vPXNvLmxlbmd0aD49X2k/c28uc2xpY2UoMCxfaSk6QnVmZmVy''@;'; put 'put ''LmFsbG9jKF9pKTtpZihzby5sZW5ndGg8X2kpe2Zvcih2YXIgTGk9MDtMaTxzby5sZW5ndGg7KytMaSltb1tMaV09c29bTGldO2Zvcig7TGk8X2k7KytMaSltb1tMaV09NTR9cmV0dXJuIG1vfShaZSwwLEJlLHNlKTtzd2l0Y2goUS5jaXBoZXJBbGdvcml0aG0pe2Nhc2UiQUVTIjppZigiQ2hh''@;'; put 'put ''aW5pbmdNb2RlQ0JDIiE9US5jaXBoZXJDaGFpbmluZyl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNpcGhlciBjaGFpbmluZyAiK1EuY2lwaGVyQ2hhaW5pbmcpO29lPSJhZXMtIitRLmtleUJpdHMrIi1jYmMiO2JyZWFrO2Nhc2UiUkMyIjpvZT0icmMyIjticmVhaztkZWZhdWx0OnRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2lwaGVyIGFsZ28gIitRLmNpcGhlckFsZ29yaXRobSl9ZGU9ZnVuY3Rpb24oc3Ipe2Zvcih2YXIgZ3I9QnVmZmVyLmFsbG9jKE5lKSxxbj0wO3FuPE5lOysrcW4pZ3JbcW5dPXFuPHNyLmxlbmd0aD9zcltxbl06NTQ7cmV0dXJuIGdyfShkZSk7''@;'; put 'put ''dmFyIGZ0PUJ1ZmZlci5mcm9tKFEuZW5jcnlwdGVkS2V5VmFsdWUsImJhc2U2NCIpLGt0PUk1KFFlLGRlLG9lKS51cGRhdGUoZnQpLGJ0PUk1KFNkKEJ1ZmZlci5jb25jYXQoW1plLEJ1ZmZlci5mcm9tKFsyMTUsMTcwLDE1LDEwOSw0OCw5Nyw1Miw3OF0pXSksc2UpLnNsaWNlKDAsQmUpLGRl''@;'; put 'put ''LG9lKS51cGRhdGUoQnVmZmVyLmZyb20oUS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZSwiYmFzZTY0IikpLEV0PVNkKEk1KFNkKEJ1ZmZlci5jb25jYXQoW1plLEJ1ZmZlci5mcm9tKFsyNTQsMTY3LDIxMCwxMTgsNTksNzUsMTU4LDEyMV0pXSksc2UpLnNsaWNlKDAsQmUpLGRlLG9lKS51''@;'; put 'put ''cGRhdGUoQnVmZmVyLmZyb20oUS5lbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dCwiYmFzZTY0IikpLHNlKSxWdD0rUS5oYXNoU2l6ZXx8TWF0aC5taW4oYnQubGVuZ3RoLEV0Lmxlbmd0aCk7aWYoMCE9YnQuc2xpY2UoMCxWdCkuY29tcGFyZShFdC5zbGljZSgwLFZ0KSkpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJJbmNvcnJlY3QgUGFzc3dvcmQiKTtQKF8sMCk7dmFyIHVuPV8ucmVhZF9zaGlmdCg0KTtfLmwrPTQ7dmFyIG5yPVtdLG5uPUJ1ZmZlci5jb25jYXQoW0xlLEJ1ZmZlci5hbGxvYyg0KV0pO2ZvcihQKG5uKSxtdD0wO18ubDxfLmxlbmd0aDspbm4ubD1kZS5sZW5ndGgsbm4ud3JpdGVf''@;'; put 'put ''c2hpZnQoNCxtdCksbnIucHVzaChJNShrdCxTZChCdWZmZXIuZnJvbShubiksc2UpLnNsaWNlKDAsMTYpLG9lKS51cGRhdGUoQnVmZmVyLmZyb20oXy5zbGljZShfLmwsXy5sKzQwOTYpKSkpLF8ubCs9NDA5NiwrK210O3ZhciBqbj1CdWZmZXIuY29uY2F0KG5yKS5zbGljZSgwLHVuKSxrbj1R''@;'; put 'put ''cihUKTtyZXR1cm4ga24udHlwZT0iYnVmZmVyIixZOChqbixrbil9KG9lWzFdLFAuY29udGVudCxtLnBhc3N3b3JkfHwiIixtKTtpZigyPT1vZVswXSlyZXR1cm4gZnVuY3Rpb24gRmMoZCxfLG0sVCl7dmFyIFA9YWUudXRpbHMucHJlcF9ibG9iO2lmKCJTdGQiIT09ZC50KXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiRUNNQS0zNzYgQmFkIFN0YW5kYXJkIEVuY3J5cHRpb24iKTt2YXIgUT1kLnYuU2FsdCxzZT1kLnYuVmVyaWZpZXIsb2U9ZC52LlZlcmlmaWVySGFzaDtpZigzNiE9ZC5oLkZsYWdzKXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgU3RhbmRhcmQgRW5jcnlwdGlvbiBiYWQgRmxhZ3Mi''@;'; put 'put ''KTt2YXIgZGU9MCxMZT0iIjtzd2l0Y2goZC5oLkFsZ0lEKXtjYXNlIDI2MTI2OmRlPTEyOCxMZT0iYWVzLTEyOC1lY2IiO2JyZWFrO2Nhc2UgMjYxMjc6ZGU9MTk2LExlPSJhZXMtMTkyLWVjYiI7YnJlYWs7Y2FzZSAyNjEyODpkZT0yNTYsTGU9ImFlcy0yNTYtZWNiIjticmVhaztkZWZhdWx0''@;'; put 'put ''OnRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgQmFkIFN0YW5kYXJkIEVuY3J5cHRpb24iKX1pZigzMjc3MiE9ZC5oLkFsZ0lESGFzaCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEJhZCBTdGFuZGFyZCBFbmNyeXB0aW9uIik7aWYoZC5oLktleVNpemUhPWRlKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''QWxnSUQvS2V5U2l6ZSBtaXNtYXRjaCIpO2lmKDI0IT1kLmguUHJvdmlkZXJUeXBlKXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgdW5zdXBwb3J0ZWQgUHJvdmlkZXJUeXBlICIrZC5oLlByb3ZpZGVyVHlwZSk7aWYoIk1pY3Jvc29mdCBFbmhhbmNlZCBSU0EgYW5kIEFFUyBDcnlwdG9ncmFw''@;'; put 'put ''aGljIFByb3ZpZGVyIiE9PWQuaC5DU1BOYW1lLnNsaWNlKDAsNTMpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ3J5cHRvIFByb3ZpZGVyICIrZC5oLkNTUE5hbWUpO3ZhciBCZT0iU0hBLTEiLFplPWRlPj4zLG50PVNkKEJ1ZmZlci5jb25jYXQoW1EsY3B0YWJsZS51dGlscy5lbmNv''@;'; put 'put ''ZGUoMTIwMCxtKV0pLEJlKSxtdD1CdWZmZXIuYWxsb2MoNCk7UChtdCwwKTtmb3IodmFyIFFlPTA7UWU8NWU0OysrUWUpbXQubD0wLG10LndyaXRlX3NoaWZ0KDQsUWUpLG50PVNkKEJ1ZmZlci5jb25jYXQoW210LG50XSksQmUpO210Lmw9MCxtdC53cml0ZV9zaGlmdCg0LDApO3ZhciBucixu''@;'; put 'put ''bixhcixqbixrbixrdD0oam49KGFyPWZ1bmN0aW9uKGdyLHFuLF9pKXtmb3IodmFyIE9pPUJ1ZmZlci5hbGxvYyg2NCksc289MDtzbzxPaS5sZW5ndGg7KytzbylPaVtzb109Z3I7Zm9yKHNvPTA7c288cW4ubGVuZ3RoOysrc28pT2lbc29dXj1xbltzb107cmV0dXJuIFNkKE9pLF9pKX0pKDU0''@;'; put 'put ''LG5yPVNkKEJ1ZmZlci5jb25jYXQoW250LG10XSksQmUpLG5uPUJlKSxrbj1hcig5MixucixubiksQnVmZmVyLmNvbmNhdChbam4sa25dKS5zbGljZSgwLFplKSk7aWYoSTUoa3QsQnVmZmVyLmFsbG9jKDApLExlKS51cGRhdGUob2UpLnNsaWNlKDAsMjApLmNvbXBhcmUoU2QoSTUoa3QsQnVm''@;'; put 'put ''ZmVyLmFsbG9jKDApLExlKS51cGRhdGUoc2UpLEJlKSkpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgUGFzc3dvcmQiKTtQKF8sMCk7dmFyIGJ0PV8ucmVhZF9zaGlmdCg0KTtfLmwrPTQ7dmFyIEV0PVtdO2ZvcihRZT0wO18ubDxfLmxlbmd0aDspRXQucHVzaChJNShrdCxCdWZmZXIuYWxs''@;'; put 'put ''b2MoMCksTGUpLnVwZGF0ZShfLnNsaWNlKF8ubCxfLmwrNDA5NikpKSxfLmwrPTQwOTYsKytRZTtyZXR1cm4gWTgoQnVmZmVyLmNvbmNhdChFdCkuc2xpY2UoMCxidCksVCl9KG9lWzFdLFAuY29udGVudCxtLnBhc3N3b3JkfHwiIixtKTt0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dv''@;'; put 'put ''cmQtcHJvdGVjdGVkIil9ZnVuY3Rpb24gcnRlKGQsXyl7aWYoIV8udGVtcGxhdGUpe2lmKCJvZHMiPT1fLmJvb2tUeXBlKXJldHVybiBBUihkLF8pO2dTKF8mJl8uUFBJfHw5NiksZCYmIWQuU1NGJiYoZC5TU0Y9SS5nZXRfdGFibGUoKSksZCYmZC5TU0YmJih1ZShJKSxJLmxvYWRfdGFibGUo''@;'; put 'put ''ZC5TU0YpLF8ucmV2c3NmPWhlKGQuU1NGKSxfLnJldnNzZltkLlNTRls2NTUzNV1dPTAsXy5zc2Y9ZC5TU0YpLGQuU3R5bGVzPXtGb250czpfLkZvbnRzPVt7c3o6MTIsY29sb3I6e3RoZW1lOjEscmdiOiIwMDAwMDAifSxuYW1lOiJDYWxpYnJpIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1d''@;'; put 'put ''LEZpbGxzOl8uRmlsbHM9W3twYXR0ZXJuVHlwZToibm9uZSJ9LHtwYXR0ZXJuVHlwZToiZ3JheTEyNSJ9XSxCb3JkZXJzOl8uQm9yZGVycz1be31dLERYRjpfLkRYRj1kLlN0eWxlcyYmZC5TdHlsZXMuRFhGfHxbXSxUYWJsZTpfLlRhYmxlPWQuU3R5bGVzJiZkLlN0eWxlcy5UYWJsZXx8W119''@;'; put 'put ''LF8ub3ZlcnJpZGVNRFc/c2Q9Xy5vdmVycmlkZU1EVzokbShfLkZvbnRzWzBdKSxfLnJlbHM9e30sXy53YnJlbHM9e30sXy5TdHJpbmdzPVtdLF8uU3RyaW5ncy5Db3VudD0wLF8uU3RyaW5ncy5VbmlxdWU9MCxNNT9fLnJldlN0cmluZ3M9bmV3IE1hcDooXy5yZXZTdHJpbmdzPXt9LF8ucmV2''@;'; put 'put ''U3RyaW5ncy5mb289W10sZGVsZXRlIF8ucmV2U3RyaW5ncy5mb28pO3ZhciBtPSJ4bHNiIj09Xy5ib29rVHlwZT8iYmluIjoieG1sIixUPVFILmluZGV4T2YoXy5ib29rVHlwZSk+LTEsUD17d29ya2Jvb2tzOltdLHNoZWV0czpbXSxjaGFydHM6W10sZGlhbG9nczpbXSxtYWNyb3M6W10scmVs''@;'; put 'put ''czpbXSxzdHJzOltdLGNvbW1lbnRzOltdLGxpbmtzOltdLGNvcmVwcm9wczpbXSxleHRwcm9wczpbXSxjdXN0cHJvcHM6W10sdGhlbWVzOltdLHN0eWxlczpbXSxjYWxjY2hhaW5zOltdLHZiYTpbXSxkcmF3aW5nczpbXSxwaXZvdHM6W10scGl2b3RjYWNoZXM6W10scGl2b3RyZWNvcmRzOltd''@;'; put 'put ''LGRhdGFtb2RlbHM6W10sY2hhcnRvYmpzOltdLGNoYXJ0c3R5bGVzOltdLGNoYXJ0Y29sb3JzOltdLGNoYXJ0ZXhzOltdLHRhYmxlczpbXSxjb25uczpbXSxjdHJscHJvcHM6W10sY3VzdG9teG1scHJvcHM6W10sVE9ETzpbXSx4bWxuczoiIn07SmVlKF89X3x8e30pO3ZhciBRPXZpKCksc2U9''@;'; put 'put ''IiIsb2U9MDtpZihfLmNlbGxYZnM9W10sXy5jZWxsU3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0sQTIoXy5jZWxsWGZzLF8uY2VsbFN0eWxlWGZzLHt9LHtyZXZzc2Y6e0dlbmVyYWw6MH19KSxkLlByb3BzfHwoZC5Qcm9wcz17fSksem4oUSxzZT0iZG9jUHJvcHMvY29yZS54bWwiLGZ1bmN0''@;'; put 'put ''aW9uIFRnKGQsXyl7dmFyIG09X3x8e30sVD1bcG8scHBdLFA9e307aWYoIWQmJiFtLlByb3BzKXJldHVybiBULmpvaW4oIiIpO2QmJihudWxsIT1kLkNyZWF0ZWREYXRlJiZNZygiZGN0ZXJtczpjcmVhdGVkIiwic3RyaW5nIj09dHlwZW9mIGQuQ3JlYXRlZERhdGU/ZC5DcmVhdGVkRGF0ZTph''@;'; put 'put ''MChkLkNyZWF0ZWREYXRlLG0uV1RGKSx7InhzaTp0eXBlIjoiZGN0ZXJtczpXM0NEVEYifSxULFApLG51bGwhPWQuTW9kaWZpZWREYXRlJiZNZygiZGN0ZXJtczptb2RpZmllZCIsInN0cmluZyI9PXR5cGVvZiBkLk1vZGlmaWVkRGF0ZT9kLk1vZGlmaWVkRGF0ZTphMChkLk1vZGlmaWVkRGF0''@;'; put 'put ''ZSxtLldURikseyJ4c2k6dHlwZSI6ImRjdGVybXM6VzNDRFRGIn0sVCxQKSk7Zm9yKHZhciBRPTA7USE9WGEubGVuZ3RoOysrUSl7dmFyIHNlPVhhW1FdLG9lPW0uUHJvcHMmJm51bGwhPW0uUHJvcHNbc2VbMV1dP20uUHJvcHNbc2VbMV1dOmQ/ZFtzZVsxXV06bnVsbDshMD09PW9lP29lPSIx''@;'; put 'put ''IjohMT09PW9lP29lPSIwIjoibnVtYmVyIj09dHlwZW9mIG9lJiYob2U9U3RyaW5nKG9lKSksbnVsbCE9b2UmJk1nKHNlWzBdLG9lLG51bGwsVCxQKX1yZXR1cm4gVC5sZW5ndGg+MiYmKFRbVC5sZW5ndGhdPSI8L2NwOmNvcmVQcm9wZXJ0aWVzPiIsVFsxXT1UWzFdLnJlcGxhY2UoIi8+Iiwi''@;'; put 'put ''PiIpKSxULmpvaW4oIiIpfShkLlByb3BzLF8pKSxQLmNvcmVwcm9wcy5wdXNoKHNlKSxhaShfLnJlbHMsMixzZSx1YS5DT1JFX1BST1BTKSxzZT0iZG9jUHJvcHMvYXBwLnhtbCIsIWQuUHJvcHN8fCFkLlByb3BzLlNoZWV0TmFtZXMpaWYoZC5Xb3JrYm9vayYmZC5Xb3JrYm9vay5TaGVldHMp''@;'; put 'put ''e2Zvcih2YXIgZGU9W10sTGU9MDtMZTxkLlNoZWV0TmFtZXMubGVuZ3RoOysrTGUpMiE9KGQuV29ya2Jvb2suU2hlZXRzW0xlXXx8e30pLkhpZGRlbiYmZGUucHVzaChkLlNoZWV0TmFtZXNbTGVdKTtkLlByb3BzLlNoZWV0TmFtZXM9ZGV9ZWxzZSBkLlByb3BzLlNoZWV0TmFtZXM9ZC5TaGVl''@;'; put 'put ''dE5hbWVzO2QuUHJvcHMuV29ya3NoZWV0cz1kLlByb3BzLlNoZWV0TmFtZXMubGVuZ3RoLHpuKFEsc2UsZnVuY3Rpb24gam0oZCl7dmFyIF89W10sbT1WcjtyZXR1cm4gZHx8KGQ9e30pLGQuQXBwbGljYXRpb249IlNoZWV0SlMiLF9bXy5sZW5ndGhdPXBvLF9bXy5sZW5ndGhdPUJtLGZjLmZv''@;'; put 'put ''ckVhY2goZnVuY3Rpb24oVCl7aWYodm9pZCAwIT09ZFtUWzFdXSl7dmFyIFA7c3dpdGNoKFRbMl0pe2Nhc2Uic3RyaW5nIjpQPUJpKFN0cmluZyhkW1RbMV1dKSk7YnJlYWs7Y2FzZSJib29sIjpQPWRbVFsxXV0/InRydWUiOiJmYWxzZSJ9dm9pZCAwIT09UCYmKF9bXy5sZW5ndGhdPW0oVFsw''@;'; put 'put ''XSxQKSl9fSksX1tfLmxlbmd0aF09bSgiSGVhZGluZ1BhaXJzIixtKCJ2dDp2ZWN0b3IiLG0oInZ0OnZhcmlhbnQiLCI8dnQ6bHBzdHI+V29ya3NoZWV0czwvdnQ6bHBzdHI+IikrbSgidnQ6dmFyaWFudCIsbSgidnQ6aTQiLFN0cmluZyhkLldvcmtzaGVldHMpKSkse3NpemU6MixiYXNlVHlw''@;'; put 'put ''ZToidmFyaWFudCJ9KSksX1tfLmxlbmd0aF09bSgiVGl0bGVzT2ZQYXJ0cyIsbSgidnQ6dmVjdG9yIixkLlNoZWV0TmFtZXMubWFwKGZ1bmN0aW9uKFQpe3JldHVybiI8dnQ6bHBzdHI+IitCaShUKSsiPC92dDpscHN0cj4ifSkuam9pbigiIikse3NpemU6ZC5Xb3Jrc2hlZXRzLGJhc2VUeXBl''@;'; put 'put ''OiJscHN0ciJ9KSksXy5sZW5ndGg+MiYmKF9bXy5sZW5ndGhdPSI8L1Byb3BlcnRpZXM+IixfWzFdPV9bMV0ucmVwbGFjZSgiLz4iLCI+IikpLF8uam9pbigiIil9KGQuUHJvcHMpKSxQLmV4dHByb3BzLnB1c2goc2UpLGFpKF8ucmVscywzLHNlLHVhLkVYVF9QUk9QUyksZC5DdXN0cHJvcHMh''@;'; put 'put ''PT1kLlByb3BzJiZGZShkLkN1c3Rwcm9wc3x8e30pLmxlbmd0aD4wJiYoem4oUSxzZT0iZG9jUHJvcHMvY3VzdG9tLnhtbCIsZnVuY3Rpb24gbzEoZCl7dmFyIF89W3BvLHAzXTtpZighZClyZXR1cm4gXy5qb2luKCIiKTt2YXIgbT0xO3JldHVybiBGZShkKS5mb3JFYWNoKGZ1bmN0aW9uKFAp''@;'; put 'put ''eysrbSxfW18ubGVuZ3RoXT1WcigicHJvcGVydHkiLGZ1bmN0aW9uIGJnKGQsXyl7c3dpdGNoKHR5cGVvZiBkKXtjYXNlInN0cmluZyI6dmFyIG09VnIoInZ0Omxwd3N0ciIsQmkoZCkpO3JldHVybiBfJiYobT1tLnJlcGxhY2UoLyZxdW90Oy9nLCJfeDAwMjJfIikpLG07Y2FzZSJudW1iZXIi''@;'; put 'put ''OnJldHVybiBWcigoMHxkKT09ZD8idnQ6aTQiOiJ2dDpyOCIsQmkoU3RyaW5nKGQpKSk7Y2FzZSJib29sZWFuIjpyZXR1cm4gVnIoInZ0OmJvb2wiLGQ/InRydWUiOiJmYWxzZSIpfWlmKGQgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBWcigidnQ6ZmlsZXRpbWUiLGEwKGQpKTt0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIlVuYWJsZSB0byBzZXJpYWxpemUgIitkKX0oZFtQXSwhMCkse2ZtdGlkOiJ7RDVDREQ1MDUtMkU5Qy0xMDFCLTkzOTctMDgwMDJCMkNGOUFFfSIscGlkOm0sbmFtZTpCaShQKX0pfSksXy5sZW5ndGg+MiYmKF9bXy5sZW5ndGhdPSI8L1Byb3BlcnRpZXM+IixfWzFdPV9bMV0ucmVw''@;'; put 'put ''bGFjZSgiLz4iLCI+IikpLF8uam9pbigiIil9KGQuQ3VzdHByb3BzKSksUC5jdXN0cHJvcHMucHVzaChzZSksYWkoXy5yZWxzLDQsc2UsdWEuQ1VTVF9QUk9QUykpO3ZhciBOZT1bXSxCZT1bXTtmb3Iob2U9MTtvZTw9ZC5TaGVldE5hbWVzLmxlbmd0aDsrK29lKXt2YXIgbXQ9eyIhaWQiOnt9''@;'; put 'put ''fSxRZT1kLlNoZWV0c1tkLlNoZWV0TmFtZXNbb2UtMV1dLGZ0PShRZXx8e30pWyIhdHlwZSJdfHwic2hlZXQiO3N3aXRjaChmdCl7Y2FzZSJjaGFydCI6aWYodHlwZW9mIHdyaXRlX2RyYXdpbmdfPCJ1Iil7em4oUSxzZT0ieGwvY2hhcnRzaGVldHMvc2hlZXQiK29lKyIuIittLFRlZShvZS0x''@;'; put 'put ''LHNlLF8sZCxtdCkpLFAuY2hhcnRzLnB1c2goc2UpLGFpKF8ud2JyZWxzLC0xLCJjaGFydHNoZWV0cy9zaGVldCIrb2UrIi4iK20sdWEuQ1MpO2JyZWFrfWRlZmF1bHQ6em4oUSxzZT0ieGwvd29ya3NoZWV0cy9zaGVldCIrb2UrIi4iK20sTWVlKG9lLTEsc2UsXyxkLG10KSksUC5zaGVldHMu''@;'; put 'put ''cHVzaChzZSksYWkoXy53YnJlbHMsLTEsIndvcmtzaGVldHMvc2hlZXQiK29lKyIuIittLHVhLldTWzBdKX1pZihRZSl7ImNoYXJ0Ij09ZnQmJiFRZVsiIXBvcyJdJiYoUWVbIiFwb3MiXT17eDowLHk6MCx3OjkwMCxoOjYwMH0pO3ZhciBrdD1RZVsiIWNvbW1lbnRzIl0sYnQ9ITE7aWYoa3Qm''@;'; put 'put ''Jmt0Lmxlbmd0aD4wKXt2YXIgRXQ9InhsL2NvbW1lbnRzIitvZSsiLiIrbTt6bihRLEV0LERCKGt0LEV0LF8pKSxQLmNvbW1lbnRzLnB1c2goRXQpLGFpKG10LC0xLCIuLi9jb21tZW50cyIrb2UrIi4iK20sdWEuQ01OVCksYnQ9ITB9KFFlWyIhY29udHJvbHMiXXx8W10pLmxlbmd0aD4wJiYo''@;'; put 'put ''YnQ9ITApLFFlWyIhbGVnYWN5Il0mJmJ0JiZ6bihRLCJ4bC9kcmF3aW5ncy92bWxEcmF3aW5nIitvZSsiLnZtbCIseDIob2UsUWVbIiFjb21tZW50cyJdLFFlWyIhY29udHJvbHMiXSxRZSkpLFFlWyIhbGVnYWN5SEYiXSYmWUgoUSwwLG9lLFFlWyIhcHJpbnQiXS5pbWFnZXMpO3ZhciBWdD0o''@;'; put 'put ''ImNoYXJ0Ij09UWVbIiF0eXBlIl0/W1FlXTpRZVsiIWNoYXJ0cyJdfHxbXSkuY29uY2F0KChRZVsiIWltYWdlcyJdfHxbXSkubWFwKGZ1bmN0aW9uKHVuKXtyZXR1cm4gdW5bIiF0eXBlIl18fCh1blsiIXR5cGUiXT0iaW1hZ2UiKSx1bn0pKS5jb25jYXQoKFFlWyIhc2hhcGVzIl18fFtdKS5t''@;'; put 'put ''YXAoZnVuY3Rpb24odW4pe3JldHVybiB1blsiIXR5cGUiXXx8KHVuWyIhdHlwZSJdPSJzaGFwZSIpLHVufSkpO1Z0JiZWdC5sZW5ndGgmJih0eXBlb2Ygd3JpdGVfZHJhd2luZ188InUiP3dyaXRlX2RyYXdpbmdfKFEsUCxvZSxRZSxWdCk6KHpuKFEsInhsL2RyYXdpbmdzL2RyYXdpbmciK29l''@;'; put 'put ''KyIueG1sIix3USgpKSxQLmRyYXdpbmdzLnB1c2goInhsL2RyYXdpbmdzL2RyYXdpbmciK29lKyIueG1sIikpKSxkZWxldGUgUWVbIiFjb21tZW50cyJdLGRlbGV0ZSBRZVsiIWxlZ2FjeSJdLGRlbGV0ZSBRZVsiIWxlZ2FjeUhGIl19UWUmJlFlWyIhcGl2b3RzIl0mJiJ4bWwiPT1tJiZ0eXBl''@;'; put 'put ''b2Ygd3JpdGVfcGl2b3RfeG1sPCJ1IiYmUWVbIiFwaXZvdHMiXS5mb3JFYWNoKG50KSxtdFsiIWlkIl0ucklkMSYmem4oUSx2ZihzZSksQzIobXQpKSxRZSYmUWVbIiF0YWJsZXMiXSYmInhtbCI9PW0mJlFlWyIhdGFibGVzIl0uZm9yRWFjaChaZSl9cmV0dXJuIG51bGwhPV8uU3RyaW5ncyYm''@;'; put 'put ''Xy5TdHJpbmdzLmxlbmd0aD4wJiYoem4oUSxzZT0ieGwvc2hhcmVkU3RyaW5ncy4iK20sY1IoXy5TdHJpbmdzLHNlLF8pKSxQLnN0cnMucHVzaChzZSksYWkoXy53YnJlbHMsLTEsInNoYXJlZFN0cmluZ3MuIittLHVhLlNTVCkpLCJ4bWwiPT1tJiZ0eXBlb2Ygd3JpdGVfcGl2b3RfeG1sPCJ1''@;'; put 'put ''IiYmd3JpdGVfcGl2b3RfeG1sKE5lLGQsUSxQLF8pLCJ4bWwiPT1tJiZmdW5jdGlvbiBNeShkLF8sbSxUKXtkLmZvckVhY2goZnVuY3Rpb24oUCxRKXt2YXIgc2U9Xy5TaGVldHNbXy5TaGVldE5hbWVzW1BbMF1dXSxvZT0ieGwvdGFibGVzL3RhYmxlIisoUFswXSsxKSsiXyIrUFsxXSsiLnht''@;'; put 'put ''bCI7VC50YWJsZXMucHVzaChvZSk7dmFyIGRlPVBbMl0ucmVmfHxzZVsiIXJlZiJdOyJzdHJpbmciIT10eXBlb2YgZGUmJihkZT1odChkZSkpO3ZhciBMZT15dChkZSksTmU9UFsyXS5uYW1lfHwic2pzdGJsXyIrUFswXSsiXyIrUFsxXSxCZT1bcG9dLFplPSFfbihQWzJdLmhlYWRlciksbnQ9''@;'; put 'put ''WmUmJiFfbihQWzJdLmZpbHRlcik7QmUucHVzaCgnPHRhYmxlIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW4iIGlkPSInKyhRKzEpKyciIG5hbWU9IicrQmkoTmUpKyciIGRpc3BsYXlOYW1lPSInK0JpKE5lKSsnIiByZWY9''@;'; put 'put ''IicrZGUrJyIgJysobnVsbCE9UFsyXS5oZWFkZXImJjEhPVBbMl0uaGVhZGVyPydoZWFkZXJSb3dDb3VudD0iJysoUFsyXS5oZWFkZXJ8fDApKyciICc6IiIpKyI+IiksbnQmJkJlLnB1c2goJzxhdXRvRmlsdGVyIHJlZj0iJytkZSsnIi8+JyksQmUucHVzaCgnPHRhYmxlQ29sdW1ucyBjb3Vu''@;'; put 'put ''dD0iJysoTGUuZS5jLUxlLnMuYysxKSsnIj4nKTtmb3IodmFyIG10PVtdLFFlPUxlLnMuYztRZTw9TGUuZS5jOysrUWUpaWYoWmUpe2Zvcih2YXIgZnQ9cWkoe3I6TGUucy5yLGM6UWV9KSxrdD1zZVtmdF0sYnQ9UFsyXS5jb2xzJiZQWzJdLmNvbHNbUWUtTGUucy5jXSYmUFsyXS5jb2xzW1Fl''@;'; put 'put ''LUxlLnMuY10ubmFtZXx8a3QmJihrdC53fHxrdC52KXx8IkNvbHVtbiAiKyhRZS1MZS5zLmMrMSksRXQ9YnQsVnQ9MTttdC5pbmRleE9mKEV0KT4tMSYmKytWdDwxNjM4NDspRXQ9YnQrVnQ7aWYoRXQhPWJ0KXRocm93InRhYmxlIGNvbHVtbnMgIitRZSsiIGFuZCAiKyhtdC5pbmRleE9mKGJ0''@;'; put 'put ''KStMZS5zLmMpKyIgaGF2ZSB0aGUgc2FtZSBoZWFkZXIgJyIrYnQrIic7IHRyeSBzZXR0aW5nIGNlbGwgIitmdCsiIHRvICciK0V0KyInIjttdC5wdXNoKEV0KSxCZS5wdXNoKCc8dGFibGVDb2x1bW4gaWQ9IicrKFBbMl0uY29scyYmUFsyXS5jb2xzW1FlLUxlLnMuY10mJm51bGwhPVBbMl0u''@;'; put 'put ''Y29sc1tRZS1MZS5zLmNdLmlkP1BbMl0uY29sc1tRZS1MZS5zLmNdLmlkOlFlLUxlLnMuYysxKSsnIiBuYW1lPSInK0JpKEV0KSsnIi8+Jyl9ZWxzZSBCZS5wdXNoKFBbMl0uY29scyYmUFsyXS5jb2xzW1FlLUxlLnMuY10/Jzx0YWJsZUNvbHVtbiBpZD0iJytQWzJdLmNvbHNbUWUtTGUucy5j''@;'; put 'put ''XS5pZCsnIiBuYW1lPSInK1BbMl0uY29sc1tRZS1MZS5zLmNdLm5hbWUrJyIvPic6Jzx0YWJsZUNvbHVtbiBpZD0iJysoUWUtTGUucy5jKzEpKyciIHVuaXF1ZU5hbWU9IicrKFFlLUxlLnMuYysxKSsnIiBuYW1lPSInKyhRZS1MZS5zLmMrMSkrJyIvPicpO0JlLnB1c2goIjwvdGFibGVDb2x1''@;'; put 'put ''bW5zPiIpO3ZhciBucj0rKCExIT09KFBbMl0uc3R5bGV8fHt9KS5yb3dzdHJpcGUpLG5uPSshIShQWzJdLnN0eWxlfHx7fSkuY29sc3RyaXBlLGFyPSshIShQWzJdLnN0eWxlfHx7fSkuY29sZmlyc3Qsam49KyEhKFBbMl0uc3R5bGV8fHt9KS5jb2xsYXN0LGtuPShQWzJdLnN0eWxlfHx7fSku''@;'; put 'put ''bmFtZXx8Ik1lZGl1bTkiO2tuPWtuLm1hdGNoKC9eKExpZ2h0fE1lZGl1bXxEYXJrKVxkKyQvKT8iVGFibGVTdHlsZSIra246a24sQmUucHVzaCgnPHRhYmxlU3R5bGVJbmZvIG5hbWU9Iicra24rJyIgc2hvd0ZpcnN0Q29sdW1uPSInK2FyKyciIHNob3dMYXN0Q29sdW1uPSInK2puKyciIHNo''@;'; put 'put ''b3dSb3dTdHJpcGVzPSInK25yKyciIHNob3dDb2x1bW5TdHJpcGVzPSInK25uKyciLz4nKSxCZS5wdXNoKCI8L3RhYmxlPiIpLHpuKG0sb2UsQmUuam9pbigiIikpfSl9KEJlLGQsUSxQKSwieG1sIj09bSYmKGQuRXh0ZXJuYWxXQnx8W10pLmxlbmd0aCYmZnVuY3Rpb24gekgoZCxfLG0pe20u''@;'; put 'put ''bGlua3N8fChtLmxpbmtzPVtdKSxkLkV4dGVybmFsV0ImJmQuRXh0ZXJuYWxXQi5mb3JFYWNoKGZ1bmN0aW9uKFQsUCl7dmFyIFE9Ii94bC9leHRlcm5hbExpbmtzL19yZWxzL2V4dGVybmFsTGluayIrKFArMSkrIi54bWwucmVscyIsc2U9e307YWkoc2UsLTEsVC5UYXJnZXQsVC5NaXNzaW5n''@;'; put 'put ''P3VhLlhNSVNTOnVhLlhQQVRIKSx6bihfLGxoKFEpLEMyKHNlKSk7dmFyIG9lPSIveGwvZXh0ZXJuYWxMaW5rcy9leHRlcm5hbExpbmsiKyhQKzEpKyIueG1sIjttLmxpbmtzLnB1c2gob2UpLHpuKF8sbGgob2UpLGZ1bmN0aW9uIG9rKGQpe3ZhciBfPVtwbyxfUV07cmV0dXJuKGQuU2hlZXRO''@;'; put 'put ''YW1lc3x8W10pLmxlbmd0aCYmKF8ucHVzaCgnPGV4dGVybmFsQm9vayB4bWxuczpyPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIiByOmlkPSJySWQxIj4nKSxfLnB1c2goIjxzaGVldE5hbWVzPiIpLGQuU2hlZXRO''@;'; put 'put ''YW1lcy5mb3JFYWNoKGZ1bmN0aW9uKG0pe18ucHVzaCgnPHNoZWV0TmFtZSB2YWw9IicrQmkobSkrJyIvPicpfSksXy5wdXNoKCI8L3NoZWV0TmFtZXM+IiksXy5wdXNoKCI8c2hlZXREYXRhU2V0PiIpLGQuU2hlZXROYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKG0sVCl7dmFyIFA9ZC5TaGVldHNb''@;'; put 'put ''bV0sUT17c2hlZXRJZDpUfSxzZT1udWxsO2lmKG51bGw9PVApUS5yZWZyZXNoRXJyb3I9MTtlbHNlIGlmKFBbIiFyZWYiXSl7dmFyIG9lPXphKFBbIiFyZWYiXSk7c2U9IiI7Zm9yKHZhciBkZT1vZS5zLnI7ZGU8PW9lLmUucjsrK2RlKXtmb3IodmFyIExlPSIiLE5lPW9lLnMuYztOZTw9b2Uu''@;'; put 'put ''ZS5jOysrTmUpe3ZhciBCZT1xaSh7cjpkZSxjOk5lfSk7UFtCZV0mJihMZXx8KExlPSc8cm93IHI9IicrKGRlKzEpKyciPicpLExlKz0nPGNlbGwgcj0iJytCZSsnIicrKFBbQmVdLnQ/JyB0PSInK1BbQmVdLnQrJyInOiIiKSsiPjx2PiIrQmkoUFtCZV0udikrIjwvdj48L2NlbGw+Iil9TGUm''@;'; put 'put ''JihzZSs9TGUrIjwvcm93PiIpfX1fLnB1c2goVnIoInNoZWV0RGF0YSIsc2UsUSkpfSksXy5wdXNoKCI8L3NoZWV0RGF0YVNldD4iKSxfLnB1c2goIjwvZXh0ZXJuYWxCb29rPiIpKSxfLmxlbmd0aD4yJiYoX1tfLmxlbmd0aF09IjwvZXh0ZXJuYWxMaW5rPiIsX1sxXT1fWzFdLnJlcGxhY2Uo''@;'; put 'put ''Ii8+IiwiPiIpKSxfLmpvaW4oIiIpfShUKSl9KX0oZCxRLFApLCJ4bWwiPT1tJiZmdW5jdGlvbiBnUShkKXt2YXIgXyxtO2QuV29ya2Jvb2t8fChkLldvcmtib29rPXtOYW1lczpbXX0pLGQuV29ya2Jvb2suTmFtZXN8fChkLldvcmtib29rLk5hbWVzPVtdKTtmb3IodmFyIFQ9ZC5Xb3JrYm9v''@;'; put 'put ''ay5OYW1lcyxQPTA7UDxkLlNoZWV0TmFtZXMubGVuZ3RoOysrUCl7dmFyIFE9ZC5TaGVldE5hbWVzW1BdLHNlPWQuU2hlZXRzW1FdO2lmKHNlJiZzZVsiIXByaW50Il0pe3ZhciBvZT0iJyIrUSsiJyEiLGRlPXNlWyIhcHJpbnQiXTtpZihkZSl7dmFyIExlPSEoXz1kZS5hcmVhKSxOZT0hKG09''@;'; put 'put ''ZGUudGl0bGVzKSxCZT1fPyJzdHJpbmciPT10eXBlb2YgXz9fOmh0KF8pOiIiO2lmKF8mJihULmZvckVhY2goZnVuY3Rpb24obnQpe250LlNoZWV0PT1QJiYhTGUmJiJfeGxubS5QcmludF9BcmVhIj09bnQuTmFtZSYmKExlPSEwLG50LlJlZj1vZStCZSl9KSxMZXx8VC5wdXNoKHtOYW1lOiJf''@;'; put 'put ''eGxubS5QcmludF9BcmVhIixSZWY6b2UrQmUsU2hlZXQ6UH0pKSxtKXt2YXIgWmU9IiI7bS5zLmM+LTEmJm0uZS5jPi0xJiYoWmUrPW9lK21zKG0ucy5jKSsiOiIrbXMobS5lLmMpKyIsIiksbS5zLnI+LTEmJm0uZS5yPi0xJiYoWmUrPW9lK3pvKG0ucy5yKSsiOiIrem8obS5lLnIpKyIsIiks''@;'; put 'put ''WmU9WmUuc2xpY2UoMCwtMSksVC5mb3JFYWNoKGZ1bmN0aW9uKG50KXtudC5TaGVldD09UCYmIU5lJiYiX3hsbm0uUHJpbnRfVGl0bGVzIj09bnQuTmFtZSYmKExlPSEwLG50LlJlZj1aZSl9KSxOZXx8VC5wdXNoKHtOYW1lOiJfeGxubS5QcmludF9UaXRsZXMiLFJlZjpaZSxTaGVldDpQfSl9''@;'; put 'put ''fX19fShkKSx6bihRLHNlPSJ4bC93b3JrYm9vay4iK20sZnVuY3Rpb24gSUIoZCxfLG0pe3JldHVybigiLmJpbiI9PT1fLnNsaWNlKC00KT9UQjpnZWUpKGQsbSl9KGQsc2UsXykpLFAud29ya2Jvb2tzLnB1c2goc2UpLGFpKF8ucmVscywxLHNlLHVhLldCKSx6bihRLHNlPSJ4bC90aGVtZS90''@;'; put 'put ''aGVtZTEueG1sIix1UShkLlRoZW1lcyxfKSksUC50aGVtZXMucHVzaChzZSksYWkoXy53YnJlbHMsLTEsInRoZW1lL3RoZW1lMS54bWwiLHVhLlRIRU1FKSx6bihRLHNlPSJ4bC9zdHlsZXMuIittLGZ1bmN0aW9uIFhTKGQsXyxtKXtyZXR1cm4oIi5iaW4iPT09Xy5zbGljZSgtNCk/dGs6X1Mp''@;'; put 'put ''KGQsbSl9KGQsc2UsXykpLFAuc3R5bGVzLnB1c2goc2UpLGFpKF8ud2JyZWxzLC0xLCJzdHlsZXMuIittLHVhLlNUWSksZC52YmFyYXcmJlQmJih6bihRLHNlPSJ4bC92YmFQcm9qZWN0LmJpbiIsZC52YmFyYXcpLFAudmJhLnB1c2goc2UpLGFpKF8ud2JyZWxzLC0xLCJ2YmFQcm9qZWN0LmJp''@;'; put 'put ''biIsdWEuVkJBKSksZC5tb2RlbCYmZC5tb2RlbC5sZW5ndGgmJih6bihRLCJ4bC9tb2RlbC9pdGVtLmRhdGEiLGQubW9kZWwpLGFpKF8ud2JyZWxzLC0xLCJtb2RlbC9pdGVtLmRhdGEiLHVhLlBXUlBEKSksZC5jb25uJiYoem4oUSwieGwvY29ubmVjdGlvbnMueG1sIixkLmNvbm4pLFAuY29u''@;'; put 'put ''bnMucHVzaCgiL3hsL2Nvbm5lY3Rpb25zLnhtbCIpLGFpKF8ud2JyZWxzLC0xLCJjb25uZWN0aW9ucy54bWwiLHVhLkNPTk4pKSxkLkN1c3RvbVhNTCYmZC5DdXN0b21YTUwuZm9yRWFjaChmdW5jdGlvbih1bixucil7aWYoem4oUSwiY3VzdG9tWG1sL2l0ZW0iKyhucisxKSsiLnhtbCIsdW4u''@;'; put 'put ''ZGF0YSksYWkoXy53YnJlbHMsLTEsIi4uL2N1c3RvbVhtbC9pdGVtIisobnIrMSkrIi54bWwiLHVhLkNYTUwpLHVuLnByb3BzKXt6bihRLCJjdXN0b21YbWwvaXRlbVByb3BzIisobnIrMSkrIi54bWwiLHVuLnByb3BzKSxQLmN1c3RvbXhtbHByb3BzLnB1c2goIi9jdXN0b21YbWwvaXRlbVBy''@;'; put 'put ''b3BzIisobnIrMSkrIi54bWwiKTt2YXIgbm49e307YWkobm4sLTEsIml0ZW1Qcm9wcyIrKG5yKzEpKyIueG1sIix1YS5DWE1MUCksem4oUSwiY3VzdG9tWG1sL19yZWxzL2l0ZW0iKyhucisxKSsiLnhtbC5yZWxzIixDMihubikpfX0pLHpuKFEsIltDb250ZW50X1R5cGVzXS54bWwiLGZ1bmN0''@;'; put 'put ''aW9uIGM4KGQsXyxtKXt2YXIgUCxUPVtdO218fChUW1QubGVuZ3RoXT1wbyxUW1QubGVuZ3RoXT1oMyxUPVQuY29uY2F0KGw4KSk7dmFyIFE9ZnVuY3Rpb24oZGUpe2RbZGVdJiZkW2RlXS5sZW5ndGg+MCYmKFRbVC5sZW5ndGhdPVZyKCJPdmVycmlkZSIsbnVsbCx7UGFydE5hbWU6KCIvIj09''@;'; put 'put ''KFA9ZFtkZV1bMF0pWzBdPyIiOiIvIikrUCxDb250ZW50VHlwZTphOFtkZV1bXy5ib29rVHlwZXx8Inhsc3giXX0pKX0sc2U9ZnVuY3Rpb24oZGUpeyhkW2RlXXx8W10pLmZvckVhY2goZnVuY3Rpb24oTGUpe1RbVC5sZW5ndGhdPVZyKCJPdmVycmlkZSIsbnVsbCx7UGFydE5hbWU6KCIvIj09''@;'; put 'put ''TGVbMF0/IiI6Ii8iKStMZSxDb250ZW50VHlwZTphOFtkZV1bXy5ib29rVHlwZXx8Inhsc3giXX0pfSl9LG9lPWZ1bmN0aW9uKGRlKXsoZFtkZV18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKExlKXtUW1QubGVuZ3RoXT1WcigiT3ZlcnJpZGUiLG51bGwse1BhcnROYW1lOigiLyI9PUxlWzBdPyIi''@;'; put 'put ''OiIvIikrTGUsQ29udGVudFR5cGU6czhbZGVdWzBdfSl9KX07cmV0dXJuIFEoIndvcmtib29rcyIpLHNlKCJzaGVldHMiKSxzZSgiY2hhcnRzIiksb2UoInRoZW1lcyIpLFsic3RycyIsInN0eWxlcyIsImNvbm5zIl0uZm9yRWFjaChRKSxbImNvcmVwcm9wcyIsImV4dHByb3BzIiwiY3VzdHBy''@;'; put 'put ''b3BzIl0uZm9yRWFjaChvZSksb2UoInZiYSIpLG9lKCJjb21tZW50cyIpLG9lKCJkcmF3aW5ncyIpLHNlKCJ0YWJsZXMiKSxzZSgicGl2b3RzIiksc2UoInBpdm90Y2FjaGVzIiksc2UoInBpdm90cmVjb3JkcyIpLG9lKCJkYXRhbW9kZWxzIiksb2UoImN0cmxwcm9wcyIpLG9lKCJjaGFydG9i''@;'; put 'put ''anMiKSxvZSgiY2hhcnRzdHlsZXMiKSxvZSgiY2hhcnRjb2xvcnMiKSxvZSgiY2hhcnRleHMiKSxzZSgibGlua3MiKSxvZSgiY3VzdG9teG1scHJvcHMiKSwhbSYmVC5sZW5ndGg+MiYmKFRbVC5sZW5ndGhdPSI8L1R5cGVzPiIsVFsxXT1UWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxULmpvaW4o''@;'; put 'put ''IiIpfShQLF8pKSx6bihRLCJfcmVscy8ucmVscyIsQzIoXy5yZWxzKSksem4oUSwieGwvX3JlbHMvd29ya2Jvb2suIittKyIucmVscyIsQzIoXy53YnJlbHMpKSxkZWxldGUgXy5Gb250cyxkZWxldGUgXy5GaWxscyxkZWxldGUgXy5Cb3JkZXJzLGRlbGV0ZSBfLnJldnNzZixkZWxldGUgXy5z''@;'; put 'put ''c2YsUX1mdW5jdGlvbiBaZSh1bixucil7QmUucHVzaChbb2UtMSxucix1bl0pfWZ1bmN0aW9uIG50KHVuKXtOZS5wdXNoKFtvZS0xLHVuXSksYWkobXQsLTEsIi4uL3Bpdm90VGFibGVzL3Bpdm90VGFibGUiK05lLmxlbmd0aCsiLiIrbSx1YS5QSVZPVCl9fWZ1bmN0aW9uIFc4KGQsXyl7dmFy''@;'; put 'put ''IG09IiI7c3dpdGNoKChffHx7fSkudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpyZXR1cm5bZFswXSxkWzFdLGRbMl0sZFszXSxkWzRdLGRbNV0sZFs2XSxkWzddXTtjYXNlImJhc2U2NCI6bT1DZS5kZWNvZGUoZC5zbGljZSgwLDEyKSk7YnJlYWs7Y2FzZSJiaW5h''@;'; put 'put ''cnkiOm09ZDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIisoXyYmXy50eXBlfHwidW5kZWZpbmVkIikpfXJldHVyblttLmNoYXJDb2RlQXQoMCksbS5jaGFyQ29kZUF0KDEpLG0uY2hhckNvZGVBdCgyKSxtLmNoYXJDb2RlQXQoMyksbS5jaGFyQ29k''@;'; put 'put ''ZUF0KDQpLG0uY2hhckNvZGVBdCg1KSxtLmNoYXJDb2RlQXQoNiksbS5jaGFyQ29kZUF0KDcpXX1mdW5jdGlvbiBENShkLF8pe3ZhciBtPTA7ZTpmb3IoO208ZC5sZW5ndGg7KXN3aXRjaChkLmNoYXJDb2RlQXQobSkpe2Nhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOisrbTticmVhaztjYXNlIDYw''@;'; put 'put ''OnJldHVybiBKUyhkLnNsaWNlKG0pLF8pO2RlZmF1bHQ6YnJlYWsgZX1yZXR1cm4gdjgudG9fd29ya2Jvb2soZCxfKX1mdW5jdGlvbiBsRShkLF8sbSxUKXtyZXR1cm4gVD8obS50eXBlPSJzdHJpbmciLHY4LnRvX3dvcmtib29rKGQsbSkpOnY4LnRvX3dvcmtib29rKF8sbSl9ZnVuY3Rpb24g''@;'; put 'put ''WTgoZCxfKXt2YXIgbT1JLmdldGxvY2FsZSgpO3VlKEkpLEkuc2V0bG9jYWxlKG0pLFYoKTt2YXIgVD1ffHx7fTtpZih0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZkIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIFk4KG5ldyBVaW50OEFycmF5KGQpLCgoVD1RcihUKSkudHlwZT0iYXJy''@;'; put 'put ''YXkiLFQpKTt2YXIgUSxQPWQsc2U9ITE7aWYoZ1MocDU9VC5QUEl8fDk2KSxULmNlbGxTdHlsZXMmJihULmNlbGxORj0hMCxULnNoZWV0U3R1YnM9ITApLFhtPXt9LFQuZGF0ZU5GJiYoWG0uZGF0ZU5GPVQuZGF0ZU5GKSxULnR5cGV8fChULnR5cGU9SWUmJkJ1ZmZlci5pc0J1ZmZlcihkKT8i''@;'; put 'put ''YnVmZmVyIjoiYmFzZTY0IiksImZpbGUiPT1ULnR5cGUmJihULnR5cGU9SWU/ImJ1ZmZlciI6ImJpbmFyeSIsUD1mdW5jdGlvbiBEZShkKXtpZih0eXBlb2YgeGU8InUiKXJldHVybiB4ZS5yZWFkRmlsZVN5bmMoZCk7aWYodHlwZW9mICQ8InUiJiZ0eXBlb2YgRmlsZTwidSImJnR5cGVvZiBG''@;'; put 'put ''b2xkZXI8InUiKXRyeXt2YXIgXz1GaWxlKGQpO18ub3BlbigiciIpLF8uZW5jb2Rpbmc9ImJpbmFyeSI7dmFyIG09Xy5yZWFkKCk7cmV0dXJuIF8uY2xvc2UoKSxtfWNhdGNoKFQpe2lmKCFULm1lc3NhZ2V8fCFULm1lc3NhZ2UubWF0Y2goL29uc3RydWN0LykpdGhyb3cgVH10aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIkNhbm5vdCBhY2Nlc3MgZmlsZSAiK2QpfShkKSksInN0cmluZyI9PVQudHlwZSYmKHNlPSEwLFQudHlwZT0iYmluYXJ5IixULmNvZGVwYWdlPTY1MDAxLFA9ZnVuY3Rpb24gb3RlKGQpe3JldHVybiBkLm1hdGNoKC9bXlx4MDAtXHg3Rl0vKT9RaChkKTpkfShkKSksImFycmF5Ij09''@;'; put 'put ''VC50eXBlJiZ0eXBlb2YgVWludDhBcnJheTwidSImJmQgaW5zdGFuY2VvZiBVaW50OEFycmF5JiZ0eXBlb2YgQXJyYXlCdWZmZXI8InUiKXt2YXIgb2U9bmV3IEFycmF5QnVmZmVyKDMpLGRlPW5ldyBVaW50OEFycmF5KG9lKTtpZihkZS5mb289ImJhciIsIWRlLmZvbylyZXR1cm4oVD1RcihU''@;'; put 'put ''KSkudHlwZT0iYXJyYXkiLFk4KEsoUCksVCl9c3dpdGNoKChRPVc4KFAsVCkpWzBdKXtjYXNlIDIwODppZigyMDc9PT1RWzFdJiYxNz09PVFbMl0mJjIyND09PVFbM10mJjE2MT09PVFbNF0mJjE3Nz09PVFbNV0mJjI2PT09UVs2XSYmMjI1PT09UVs3XSlyZXR1cm4gZnVuY3Rpb24gSkIoZCxf''@;'; put 'put ''KXtyZXR1cm4gYWUuZmluZChkLCJFbmNyeXB0ZWRQYWNrYWdlIik/WnkoZCxfKTp3UihkLF8pfShhZS5yZWFkKFAsVCksVCk7YnJlYWs7Y2FzZSA5OmlmKFFbMV08PTgpcmV0dXJuIHdSKFAsVCk7YnJlYWs7Y2FzZSA2MDpyZXR1cm4gSlMoUCxUKTtjYXNlIDczOmlmKDczPT09UVsxXSYmNDI9''@;'; put 'put ''PT1RWzJdJiYwPT09UVszXSl0aHJvdyBuZXcgRXJyb3IoIlRJRkYgSW1hZ2UgRmlsZSBpcyBub3QgYSBzcHJlYWRzaGVldCIpO2lmKDY4PT09UVsxXSlyZXR1cm4gZnVuY3Rpb24ga1goZCxfKXt2YXIgbT1ffHx7fSxUPSEhbS5XVEY7bS5XVEY9ITA7dHJ5e3ZhciBQPXNTLnRvX3dvcmtib29r''@;'; put 'put ''KGQsbSk7cmV0dXJuIG0uV1RGPVQsUH1jYXRjaChRKXtpZihtLldURj1ULCFRLm1lc3NhZ2UubWF0Y2goL1NZTEsgYmFkIHJlY29yZCBJRC8pJiZUKXRocm93IFE7cmV0dXJuIHY4LnRvX3dvcmtib29rKGQsXyl9fShQLFQpO2JyZWFrO2Nhc2UgODQ6aWYoNjU9PT1RWzFdJiY2Nj09PVFbMl0m''@;'; put 'put ''Jjc2PT09UVszXSlyZXR1cm4gbFMudG9fd29ya2Jvb2soUCxUKTticmVhaztjYXNlIDgwOnJldHVybiA3NT09PVFbMV0mJlFbMl08OSYmUVszXTw5P2Z1bmN0aW9uIGVqKGQsXyl7dmFyIFQ9ZCxQPV98fHt9O3JldHVybiBQLnR5cGV8fChQLnR5cGU9SWUmJkJ1ZmZlci5pc0J1ZmZlcihkKT8i''@;'; put 'put ''YnVmZmVyIjoiYmFzZTY0IiksRFIocnIoVCxQKSxQKX0oUCxUKTpsRShkLFAsVCxzZSk7Y2FzZSAyMzk6cmV0dXJuIDYwPT09UVszXT9KUyhQLFQpOmxFKGQsUCxULHNlKTtjYXNlIDI1NTppZigyNTQ9PT1RWzFdKXJldHVybiBmdW5jdGlvbiBpdGUoZCxfKXt2YXIgbT1kO3JldHVybiJiYXNl''@;'; put 'put ''NjQiPT1fLnR5cGUmJihtPUNlLmRlY29kZShtKSksbT1jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLG0uc2xpY2UoMiksInN0ciIpLF8udHlwZT0iYmluYXJ5IixENShtLF8pfShQLFQpO2JyZWFrO2Nhc2UgMDppZigwPT09UVsxXSYmUVsyXT49MiYmMD09PVFbM10pcmV0dXJuIGNTLnRvX3dv''@;'; put 'put ''cmtib29rKFAsVCk7YnJlYWs7Y2FzZSAzOmNhc2UgMTMxOmNhc2UgMTM5OmNhc2UgMTQwOnJldHVybiB5cC50b193b3JrYm9vayhQLFQpO2Nhc2UgMTIzOmlmKDkyPT09UVsxXSYmMTE0PT09UVsyXSYmMTE2PT09UVszXSlyZXR1cm4gZDUudG9fd29ya2Jvb2soUCxUKTticmVhaztjYXNlIDEw''@;'; put 'put ''OmNhc2UgMTM6Y2FzZSAzMjpyZXR1cm4gZnVuY3Rpb24gTFIoZCxfKXt2YXIgbT0iIixUPVc4KGQsXyk7c3dpdGNoKF8udHlwZSl7Y2FzZSJiYXNlNjQiOm09Q2UuZGVjb2RlKGQpO2JyZWFrO2Nhc2UiYmluYXJ5IjptPWQ7YnJlYWs7Y2FzZSJidWZmZXIiOm09ZC50b1N0cmluZygiYmluYXJ5''@;'; put 'put ''Iik7YnJlYWs7Y2FzZSJhcnJheSI6bT1PbihkKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitfLnR5cGUpfXJldHVybiAyMzk9PVRbMF0mJjE4Nz09VFsxXSYmMTkxPT1UWzJdJiYobT1XbihtKSksRDUobSxfKX0oUCxUKX1yZXR1cm4geXAudmVy''@;'; put 'put ''c2lvbnMuaW5kZXhPZihRWzBdKT4tMSYmUVsyXTw9MTImJlFbM108PTMxP3lwLnRvX3dvcmtib29rKFAsVCk6bEUoZCxQLFQsc2UpfWZ1bmN0aW9uIHRqKGQsXyl7dmFyIG09X3x8e307cmV0dXJuIG0udHlwZT0iZmlsZSIsWTgoZCxtKX1mdW5jdGlvbiBuaihkLF8pe3N3aXRjaChfLnR5cGUp''@;'; put 'put ''e2Nhc2UiYmFzZTY0IjpjYXNlImJpbmFyeSI6YnJlYWs7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOl8udHlwZT0iIjticmVhaztjYXNlImZpbGUiOnJldHVybiBBZShfLmZpbGUsYWUud3JpdGUoZCx7dHlwZTpJZT8iYnVmZmVyIjoiIn0pKTtjYXNlInN0cmluZyI6dGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCInc3RyaW5nJyBvdXRwdXQgdHlwZSBpbnZhbGlkIGZvciAnIitfLmJvb2tUeXBlKyInIGZpbGVzIik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrXy50eXBlKX1yZXR1cm4gYWUud3JpdGUoZCxfKX1mdW5jdGlvbiBqZyhkLF8sbSl7bXx8KG09IiIpO3Zh''@;'; put 'put ''ciBUPW0rZDtzd2l0Y2goXy50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIENlLmVuY29kZShRaChUKSk7Y2FzZSJiaW5hcnkiOnJldHVybiBRaChUKTtjYXNlInN0cmluZyI6cmV0dXJuIGQ7Y2FzZSJmaWxlIjpyZXR1cm4gQWUoXy5maWxlLFQsInV0ZjgiKTtjYXNlImJ1ZmZlciI6cmV0dXJu''@;'; put 'put ''IEllP2tlKFQsInV0ZjgiKTpqZyhULHt0eXBlOiJiaW5hcnkifSkuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihQKXtyZXR1cm4gUC5jaGFyQ29kZUF0KDApfSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK18udHlwZSl9ZnVuY3Rpb24gcmooZCxfKXtzd2l0Y2goXy50eXBl''@;'; put 'put ''KXtjYXNlInN0cmluZyI6Y2FzZSJiYXNlNjQiOmNhc2UiYmluYXJ5Ijpmb3IodmFyIG09IiIsVD0wO1Q8ZC5sZW5ndGg7KytUKW0rPVN0cmluZy5mcm9tQ2hhckNvZGUoZFtUXSk7cmV0dXJuImJhc2U2NCI9PV8udHlwZT9DZS5lbmNvZGUobSk6InN0cmluZyI9PV8udHlwZT9XbihtKTptO2Nh''@;'; put 'put ''c2UiZmlsZSI6cmV0dXJuIEFlKF8uZmlsZSxkKTtjYXNlImJ1ZmZlciI6cmV0dXJuIGQ7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrXy50eXBlKX19ZnVuY3Rpb24gWjgoZCxfKXtWKCksZnVuY3Rpb24gS3IoZCl7aWYoIWR8fCFkLlNoZWV0TmFtZXN8fCFk''@;'; put 'put ''LlNoZWV0cyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgV29ya2Jvb2siKTtpZighZC5TaGVldE5hbWVzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIldvcmtib29rIGlzIGVtcHR5Iik7IWZ1bmN0aW9uIHBlZShkLF8sbSl7ZC5mb3JFYWNoKGZ1bmN0aW9uKFQsUCl7aVIoVCk7Zm9yKHZhciBR''@;'; put 'put ''PTA7UTxQOysrUSlpZihUPT1kW1FdKXRocm93IG5ldyBFcnJvcigiRHVwbGljYXRlIFNoZWV0IE5hbWU6ICIrVCk7aWYobSl7dmFyIHNlPV8mJl9bUF0mJl9bUF0uQ29kZU5hbWV8fFQ7aWYoOTU9PXNlLmNoYXJDb2RlQXQoMCkmJnNlLmxlbmd0aD4yMil0aHJvdyBuZXcgRXJyb3IoIkJhZCBD''@;'; put 'put ''b2RlIE5hbWU6IFdvcmtzaGVldCIrc2UpfX0pfShkLlNoZWV0TmFtZXMsZC5Xb3JrYm9vayYmZC5Xb3JrYm9vay5TaGVldHN8fFtdLCEhZC52YmFyYXcpO2Zvcih2YXIgbT0wO208ZC5TaGVldE5hbWVzLmxlbmd0aDsrK20pbEooZC5TaGVldHNbZC5TaGVldE5hbWVzW21dXSwwLG0pfShkKTt2''@;'; put 'put ''YXIgbT1ffHx7fTtpZihtLmNlbGxTdHlsZXMmJihtLmNlbGxORj0hMCxtLnNoZWV0U3R1YnM9ITApLCJhcnJheSI9PW0udHlwZSl7bS50eXBlPSJiaW5hcnkiO3ZhciBUPVo4KGQsbSk7cmV0dXJuIG0udHlwZT0iYXJyYXkiLGsoVCl9c3dpdGNoKG0uYm9va1R5cGV8fCJ4bHNiIil7Y2FzZSJ4''@;'; put 'put ''bWwiOmNhc2UieGxtbCI6cmV0dXJuIGpnKE9lZShkLG0pLG0pO2Nhc2Uic2xrIjpjYXNlInN5bGsiOnJldHVybiBqZyhrUihkLG0pLG0pO2Nhc2UiaHRtIjpjYXNlImh0bWwiOnJldHVybiBqZygkZWUoZCxtKSxtKTtjYXNlInR4dCI6cmV0dXJuIGZ1bmN0aW9uIHN0ZShkLF8pe3N3aXRjaChf''@;'; put 'put ''LnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gQ2UuZW5jb2RlKGQpO2Nhc2UiYmluYXJ5IjpjYXNlInN0cmluZyI6cmV0dXJuIGQ7Y2FzZSJmaWxlIjpyZXR1cm4gQWUoXy5maWxlLGQsImJpbmFyeSIpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gSWU/a2UoZCwiYmluYXJ5Iik6ZC5zcGxpdCgiIiku''@;'; put 'put ''bWFwKGZ1bmN0aW9uKG0pe3JldHVybiBtLmNoYXJDb2RlQXQoMCl9KX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrXy50eXBlKX0ocUIoZCxtKSxtKTtjYXNlImNzdiI6cmV0dXJuIGpnKEdCKGQsbSksbSwiXHVmZWZmIik7Y2FzZSJkaWYiOnJldHVybiBqZygkQihkLG0p''@;'; put 'put ''LG0pO2Nhc2UiZGJmIjpyZXR1cm4gcmooS0IoZCxtKSxtKTtjYXNlInBybiI6cmV0dXJuIGpnKHFlZShkLG0pLG0pO2Nhc2UicnRmIjpyZXR1cm4gamcocTkoZCxtKSxtKTtjYXNlImV0aCI6cmV0dXJuIGpnKEs5KGQsbSksbSk7Y2FzZSJmb2RzIjpyZXR1cm4gamcoQVIoZCxtKSxtKTtjYXNl''@;'; put 'put ''ImJpZmYyIjptLmJpZmZ8fChtLmJpZmY9Mik7Y2FzZSJiaWZmMyI6bS5iaWZmfHwobS5iaWZmPTMpO2Nhc2UiYmlmZjQiOnJldHVybiBtLmJpZmZ8fChtLmJpZmY9NCkscmooekIoZCxtKSxtKTtjYXNlImJpZmY1IjptLmJpZmZ8fChtLmJpZmY9NSk7Y2FzZSJiaWZmOCI6Y2FzZSJ4bGEiOmNh''@;'; put 'put ''c2UieGxzIjpyZXR1cm4gbS5iaWZmfHwobS5iaWZmPTgpLGZ1bmN0aW9uIEd5KGQsXyl7dmFyIG09X3x8e307cmV0dXJuIG5qKGZ1bmN0aW9uIFBlZShkLF8pe3ZhciBtPV98fHt9LFQ9YWUudXRpbHMuY2ZiX25ldyh7cm9vdDoiUiJ9KSxQPSIvV29ya2Jvb2siO3N3aXRjaChtLmJvb2tUeXBl''@;'; put 'put ''fHwieGxzIil7Y2FzZSJ4bHMiOm0uYm9va1R5cGU9ImJpZmY4IjtjYXNlInhsYSI6bS5ib29rVHlwZXx8KG0uYm9va1R5cGU9InhsYSIpO2Nhc2UiYmlmZjgiOlA9Ii9Xb3JrYm9vayIsbS5iaWZmPTg7YnJlYWs7Y2FzZSJiaWZmNSI6UD0iL0Jvb2siLG0uYmlmZj01O2JyZWFrO2RlZmF1bHQ6''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHR5cGUgIittLmJvb2tUeXBlKyIgZm9yIFhMUyBDRkIiKX1yZXR1cm4gYWUudXRpbHMuY2ZiX2FkZChULFAsekIoZCxtKSksOD09bS5iaWZmJiYoZC5Qcm9wc3x8ZC5DdXN0cHJvcHMpJiZmdW5jdGlvbiBWQihkLF8pe3ZhciBzZSxtPVtdLFQ9W10s''@;'; put 'put ''UD1bXSxRPTA7aWYoZC5Qcm9wcylmb3Ioc2U9RmUoZC5Qcm9wcyksUT0wO1E8c2UubGVuZ3RoOysrUSkoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFBtLHNlW1FdKT9tOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpMSxzZVtRXSk/VDpQKS5wdXNo''@;'; put 'put ''KFtzZVtRXSxkLlByb3BzW3NlW1FdXV0pO2lmKGQuQ3VzdHByb3BzKWZvcihzZT1GZShkLkN1c3Rwcm9wcyksUT0wO1E8c2UubGVuZ3RoOysrUSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZC5Qcm9wc3x8e30sc2VbUV0pfHwoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Q''@;'; put 'put ''cm9wZXJ0eS5jYWxsKFBtLHNlW1FdKT9tOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpMSxzZVtRXSk/VDpQKS5wdXNoKFtzZVtRXSxkLkN1c3Rwcm9wc1tzZVtRXV1dKTt2YXIgb2U9W107Zm9yKFE9MDtRPFAubGVuZ3RoOysrUSlBZy5pbmRleE9mKFBbUV1bMF0pPi0x''@;'; put 'put ''fHxudWxsIT1QW1FdWzFdJiZvZS5wdXNoKFBbUV0pO1QubGVuZ3RoJiZhZS51dGlscy5jZmJfYWRkKF8sIi9ceDA1U3VtbWFyeUluZm9ybWF0aW9uIixVaShULGo4X1NJLGkxLGMwKSksKG0ubGVuZ3RofHxvZS5sZW5ndGgpJiZhZS51dGlscy5jZmJfYWRkKF8sIi9ceDA1RG9jdW1lbnRTdW1t''@;'; put 'put ''YXJ5SW5mb3JtYXRpb24iLFVpKG0sajhfRFNJLFBtLHVwLG9lLmxlbmd0aD9vZTpudWxsLCIwNWQ1Y2RkNTljMmUxYjEwOTM5NzA4MDAyYjJjZjlhZSIpKX0oZCxUKSw4PT1tLmJpZmYmJmQudmJhcmF3JiZmdW5jdGlvbiBYSChkLF8pe18uRnVsbFBhdGhzLmZvckVhY2goZnVuY3Rpb24obSxU''@;'; put 'put ''KXtpZigwIT1UKXt2YXIgUD1tLnJlcGxhY2UoL1teXC9dKltcL10vLCIvX1ZCQV9QUk9KRUNUX0NVUi8iKTsiLyIhPT1QLnNsaWNlKC0xKSYmYWUudXRpbHMuY2ZiX2FkZChkLFAsXy5GaWxlSW5kZXhbVF0uY29udGVudCl9fSl9KFQsYWUucmVhZChkLnZiYXJhdyx7dHlwZToic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGQudmJhcmF3PyJiaW5hcnkiOiJidWZmZXIifSkpLFR9KGQsbSksbSl9KGQsbSk7Y2FzZSJ4bHN4IjpjYXNlInhsc20iOmNhc2UieGxhbSI6Y2FzZSJ4bHNiIjpjYXNlIm9kcyI6cmV0dXJuIGZ1bmN0aW9uIGF0ZShkLF8pe3ZhciBtPV98fHt9LFQ9cnRlKGQsbSksUD17fTtpZiht''@;'; put 'put ''LmNvbXByZXNzaW9uJiYoUC5jb21wcmVzc2lvbj0iREVGTEFURSIpLG0ucGFzc3dvcmQpUC50eXBlPUllPyJub2RlYnVmZmVyIjoic3RyaW5nIjtlbHNlIHN3aXRjaChtLnR5cGUpe2Nhc2UiYmFzZTY0IjpQLnR5cGU9ImJhc2U2NCI7YnJlYWs7Y2FzZSJiaW5hcnkiOlAudHlwZT0ic3RyaW5n''@;'; put 'put ''IjticmVhaztjYXNlInN0cmluZyI6dGhyb3cgbmV3IEVycm9yKCInc3RyaW5nJyBvdXRwdXQgdHlwZSBpbnZhbGlkIGZvciAnIittLmJvb2tUeXBlKyInIGZpbGVzIik7Y2FzZSJidWZmZXIiOmNhc2UiZmlsZSI6UC50eXBlPUllPyJub2RlYnVmZmVyIjoic3RyaW5nIjticmVhaztkZWZhdWx0''@;'; put 'put ''OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIittLnR5cGUpfXZhciBRPVQuRnVsbFBhdGhzP2FlLndyaXRlKFQse2ZpbGVUeXBlOiJ6aXAiLHR5cGU6e25vZGVidWZmZXI6ImJ1ZmZlciIsc3RyaW5nOiJiaW5hcnkifVtQLnR5cGVdfHxQLnR5cGV9KTpULmdlbmVyYXRlKFAp''@;'; put 'put ''O3JldHVybiBtLnBhc3N3b3JkJiZ0eXBlb2YgUWVlPCJ1Ij9uaihRZWUoUSxtLnBhc3N3b3JkKSxtKToiZmlsZSI9PT1tLnR5cGU/QWUobS5maWxlLFEpOiJzdHJpbmciPT1tLnR5cGU/V24oUSk6UX0oZCxtKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGJvb2tUeXBl''@;'; put 'put ''IHwiK20uYm9va1R5cGUrInwiKX19ZnVuY3Rpb24gT1IoZCl7aWYoIWQuYm9va1R5cGUpe3ZhciBtPWQuZmlsZS5zbGljZShkLmZpbGUubGFzdEluZGV4T2YoIi4iKSkudG9Mb3dlckNhc2UoKTttLm1hdGNoKC9eXC5bYS16XSskLykmJihkLmJvb2tUeXBlPW0uc2xpY2UoMSkpLGQuYm9va1R5''@;'; put 'put ''cGU9e3hsczoiYmlmZjgiLGh0bToiaHRtbCIsc2xrOiJzeWxrIixzb2NpYWxjYWxjOiJldGgiLFNoMzN0SlM6IldURiJ9W2QuYm9va1R5cGVdfHxkLmJvb2tUeXBlfX1mdW5jdGlvbiBOUihkLF8sbSl7dmFyIFQ9bXx8e307cmV0dXJuIFQudHlwZT0iZmlsZSIsVC5maWxlPV8sT1IoVCksWjgo''@;'; put 'put ''ZCxUKX1mdW5jdGlvbiBvaihkLF8sbSxULFAsUSxzZSxvZSl7dmFyIGRlPXpvKG0pLExlPW9lLmRlZnZhbCxOZT1vZS5yYXcsQmU9ITAsWmU9MT09PVA/W106e307aWYoMSE9PVApaWYoT2JqZWN0LmRlZmluZVByb3BlcnR5KXRyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoWmUsIl9fcm93TnVt''@;'; put 'put ''X18iLHt2YWx1ZTptLGVudW1lcmFibGU6ITF9KX1jYXRjaHtaZS5fX3Jvd051bV9fPW19ZWxzZSBaZS5fX3Jvd051bV9fPW07aWYoIXNlfHxkW21dKWZvcih2YXIgbnQ9Xy5zLmM7bnQ8PV8uZS5jOysrbnQpe3ZhciBtdD1zZT9kW21dW250XTpkW1RbbnRdK2RlXTtpZih2b2lkIDAhPT1tdCYm''@;'; put 'put ''dm9pZCAwIT09bXQudCl7dmFyIFFlPW10LnY7c3dpdGNoKG10LnQpe2Nhc2UieiI6aWYobnVsbD09UWUpYnJlYWs7Y29udGludWU7Y2FzZSJlIjpRZT0wPT1RZT9udWxsOnZvaWQgMDticmVhaztjYXNlInMiOmNhc2UiZCI6Y2FzZSJiIjpjYXNlIm4iOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJ1bnJlY29nbml6ZWQgdHlwZSAiK210LnQpfWlmKG51bGwhPVFbbnRdKXtpZihudWxsPT1RZSlpZigiZSI9PW10LnQmJm51bGw9PT1RZSlaZVtRW250XV09bnVsbDtlbHNlIGlmKHZvaWQgMCE9PUxlKVplW1FbbnRdXT1MZTtlbHNle2lmKCFOZXx8bnVsbCE9PVFlKWNvbnRpbnVl''@;'; put 'put ''O1plW1FbbnRdXT1udWxsfWVsc2UgWmVbUVtudF1dPU5lP1FlOnp0KG10LFFlLG9lKTtudWxsIT1RZSYmKEJlPSExKX19ZWxzZXtpZih2b2lkIDA9PT1MZSljb250aW51ZTtudWxsIT1RW250XSYmKFplW1FbbnRdXT1MZSl9fXJldHVybntyb3c6WmUsaXNlbXB0eTpCZX19ZnVuY3Rpb24gJHko''@;'; put 'put ''ZCxfKXtpZihudWxsPT1kfHxudWxsPT1kWyIhcmVmIl0pcmV0dXJuW107dmFyIG09e3Q6Im4iLHY6MH0sVD0wLFA9MSxRPVtdLHNlPTAsb2U9IiIsZGU9SlNPTi5wYXJzZSgneyJzIjp7InIiOjAsImMiOjB9LCJlIjp7InIiOjAsImMiOjB9fScpLExlPV98fHt9LE5lPW51bGwhPUxlLnJhbmdl''@;'; put 'put ''P0xlLnJhbmdlOmRbIiFyZWYiXTtzd2l0Y2goMT09PUxlLmhlYWRlcj9UPTE6IkEiPT09TGUuaGVhZGVyP1Q9MjpBcnJheS5pc0FycmF5KExlLmhlYWRlcik/VD0zOm51bGw9PUxlLmhlYWRlciYmKFQ9MCksdHlwZW9mIE5lKXtjYXNlInN0cmluZyI6ZGU9eXQoTmUpO2JyZWFrO2Nhc2UibnVt''@;'; put 'put ''YmVyIjooZGU9eXQoZFsiIXJlZiJdKSkucy5yPU5lO2JyZWFrO2RlZmF1bHQ6ZGU9TmV9VD4wJiYoUD0wKTt2YXIgQmU9em8oZGUucy5yKSxaZT1bXSxudD1bXSxtdD0wLFFlPTAsZnQ9QXJyYXkuaXNBcnJheShkKSxrdD1kZS5zLnIsYnQ9MCxFdD0wO2ZvcihmdCYmIWRba3RdJiYoZFtrdF09''@;'; put 'put ''W10pLGJ0PWRlLnMuYztidDw9ZGUuZS5jOysrYnQpc3dpdGNoKFplW2J0XT1tcyhidCksbT1mdD9kW2t0XVtidF06ZFtaZVtidF0rQmVdLFQpe2Nhc2UgMTpRW2J0XT1idC1kZS5zLmM7YnJlYWs7Y2FzZSAyOlFbYnRdPVplW2J0XTticmVhaztjYXNlIDM6UVtidF09TGUuaGVhZGVyW2J0LWRl''@;'; put 'put ''LnMuY107YnJlYWs7ZGVmYXVsdDpmb3IobnVsbD09bSYmKG09SlNPTi5wYXJzZSgneyJ3IjogIl9fRU1QVFkiLCAidCI6ICJzIn0nKSksb2U9c2U9enQobSxudWxsLExlKSxRZT0wLEV0PTA7RXQ8US5sZW5ndGg7KytFdClRW0V0XT09b2UmJihvZT1zZSsiXyIrICsrUWUpO1FbYnRdPW9lfWZv''@;'; put 'put ''cihrdD1kZS5zLnIrUDtrdDw9ZGUuZS5yOysra3Qpe3ZhciBWdD1vaihkLGRlLGt0LFplLFQsUSxmdCxMZSk7KCExPT09VnQuaXNlbXB0eXx8KDE9PT1UPyExIT09TGUuYmxhbmtyb3dzOkxlLmJsYW5rcm93cykpJiYobnRbbXQrK109VnQucm93KX1yZXR1cm4gbnQubGVuZ3RoPW10LG50fXZh''@;'; put 'put ''ciBldj0vIi9nO2Z1bmN0aW9uIHF5KGQsXyxtLFQsUCxRLHNlLG9lKXtmb3IodmFyIGRlPSEwLExlPVtdLE5lPSIiLEJlPXpvKG0pLFplPV8ucy5jO1plPD1fLmUuYzsrK1plKWlmKFRbWmVdKXt2YXIgbnQ9b2UuZGVuc2U/KGRbbV18fFtdKVtaZV06ZFtUW1plXStCZV07aWYobnVsbD09bnQp''@;'; put 'put ''TmU9IiI7ZWxzZSBpZihudWxsIT1udC52KXtkZT0hMSxOZT0iIit6dChudCxudWxsLG9lKTtmb3IodmFyIG10PTAsUWU9MDttdCE9PU5lLmxlbmd0aDsrK210KWlmKChRZT1OZS5jaGFyQ29kZUF0KG10KSk9PT1QfHxRZT09PVF8fDM0PT09UWUpe05lPSciJytOZS5yZXBsYWNlKGV2LCciIicp''@;'; put 'put ''KyciJzticmVha30iSUQiPT1OZSYmKE5lPSciSUQiJyl9ZWxzZSBudWxsPT1udC5mfHxudC5GP05lPSIiOihkZT0hMSwoTmU9Ij0iK250LmYpLmluZGV4T2YoIiwiKT49MCYmKE5lPSciJytOZS5yZXBsYWNlKGV2LCciIicpKyciJykpO0xlLnB1c2goTmUpfXJldHVybiExPT09b2UuYmxhbmty''@;'; put 'put ''b3dzJiZkZT9udWxsOkxlLmpvaW4oc2UpfWZ1bmN0aW9uIGNFKGQsXyl7dmFyIG09W10sVD1fPz97fTtpZihudWxsPT1kfHxudWxsPT1kWyIhcmVmIl0pcmV0dXJuIiI7dmFyIFA9eXQoZFsiIXJlZiJdKSxRPXZvaWQgMCE9PVQuRlM/VC5GUzoiLCIsc2U9US5jaGFyQ29kZUF0KDApLG9lPXZv''@;'; put 'put ''aWQgMCE9PVQuUlM/VC5SUzoiXG4iLGRlPW9lLmNoYXJDb2RlQXQoMCksTGU9bmV3IFJlZ0V4cCgoInwiPT1RPyJcXHwiOlEpKyIrJCIpLE5lPSIiLEJlPVtdO1QuZGVuc2U9QXJyYXkuaXNBcnJheShkKTtmb3IodmFyIFplPVQuc2tpcEhpZGRlbiYmZFsiIWNvbHMiXXx8W10sbnQ9VC5za2lw''@;'; put 'put ''SGlkZGVuJiZkWyIhcm93cyJdfHxbXSxtdD1QLnMuYzttdDw9UC5lLmM7KyttdCkoWmVbbXRdfHx7fSkuaGlkZGVufHwoQmVbbXRdPW1zKG10KSk7Zm9yKHZhciBRZT1QLnMucjtRZTw9UC5lLnI7KytRZSkobnRbUWVdfHx7fSkuaGlkZGVufHxudWxsIT0oTmU9cXkoZCxQLFFlLEJlLHNlLGRl''@;'; put 'put ''LFEsVCkpJiYoVC5zdHJpcCYmKE5lPU5lLnJlcGxhY2UoTGUsIiIpKSxtLnB1c2goTmUrb2UpKTtyZXR1cm4gZGVsZXRlIFQuZGVuc2UsbS5qb2luKCIiKX1mdW5jdGlvbiBhaihkLF8pe198fChfPXt9KSxfLkZTPSJcdCIsXy5SUz0iXG4iO3ZhciBtPWNFKGQsXyk7cmV0dXJuIHR5cGVvZiBj''@;'; put 'put ''cHRhYmxlPiJ1Inx8InN0cmluZyI9PV8udHlwZT9tOiJceGZmXHhmZSIrY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxtLCJzdHIiKX1mdW5jdGlvbiBGUihkKXt2YXIgbSxfPSIiLFQ9IiI7aWYobnVsbD09ZHx8bnVsbD09ZFsiIXJlZiJdKXJldHVybltdO3ZhciBvZSxQPXl0KGRbIiFyZWYi''@;'; put 'put ''XSksUT0iIixzZT1bXSxkZT1bXSxMZT1BcnJheS5pc0FycmF5KGQpO2ZvcihvZT1QLnMuYztvZTw9UC5lLmM7KytvZSlzZVtvZV09bXMob2UpO2Zvcih2YXIgTmU9UC5zLnI7TmU8PVAuZS5yOysrTmUpZm9yKFE9em8oTmUpLG9lPVAucy5jO29lPD1QLmUuYzsrK29lKWlmKF89c2Vbb2VdK1Es''@;'; put 'put ''VD0iIix2b2lkIDAhPT0obT1MZT8oZFtOZV18fFtdKVtvZV06ZFtfXSkpe2lmKG51bGwhPW0uRil7aWYoXz1tLkYsIW0uZiljb250aW51ZTtUPW0uZiwtMT09Xy5pbmRleE9mKCI6IikmJihfPV8rIjoiK18pfWlmKG51bGwhPW0uZilUPW0uZjtlbHNle2lmKCJ6Ij09bS50KWNvbnRpbnVlO2lm''@;'; put 'put ''KCJuIj09bS50JiZudWxsIT1tLnYpVD0iIittLnY7ZWxzZSBpZigiYiI9PW0udClUPW0udj8iVFJVRSI6IkZBTFNFIjtlbHNlIGlmKHZvaWQgMCE9PW0udylUPSInIittLnc7ZWxzZXtpZih2b2lkIDA9PT1tLnYpY29udGludWU7VD0icyI9PW0udD8iJyIrbS52OiIiK20udn19ZGVbZGUubGVu''@;'; put 'put ''Z3RoXT1fKyI9IitUfXJldHVybiBkZX1mdW5jdGlvbiBzaihkLF8sbSl7dmFyIFQ9bXx8e30sUD0rIVQuc2tpcEhlYWRlcixRPWR8fHt9LHNlPTAsb2U9MDtpZihRJiZudWxsIT1ULm9yaWdpbilpZigibnVtYmVyIj09dHlwZW9mIFQub3JpZ2luKXNlPVQub3JpZ2luO2Vsc2V7dmFyIGRlPSJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgVC5vcmlnaW4/SXMoVC5vcmlnaW4pOlQub3JpZ2luO3NlPWRlLnIsb2U9ZGUuY312YXIgTGUsTmU9SlNPTi5wYXJzZSgneyJzIjogeyJjIjowLCAiciI6MH0sICJlIjogeyJjIjowLCAiciI6MH19Jyk7aWYoTmUuZS5jPW9lLE5lLmUucj1zZStfLmxlbmd0aC0xK1As''@;'; put 'put ''UVsiIXJlZiJdKXt2YXIgQmU9eXQoUVsiIXJlZiJdKTtOZS5lLmM9TWF0aC5tYXgoTmUuZS5jLEJlLmUuYyksTmUuZS5yPU1hdGgubWF4KE5lLmUucixCZS5lLnIpLC0xPT1zZSYmKE5lLmUucj0oc2U9QmUuZS5yKzEpK18ubGVuZ3RoLTErUCl9ZWxzZS0xPT1zZSYmKHNlPTAsTmUuZS5yPV8u''@;'; put 'put ''bGVuZ3RoLTErUCk7dmFyIFplPVQuaGVhZGVyfHxbXSxudD0wO18uZm9yRWFjaChmdW5jdGlvbihRZSxmdCl7RmUoUWUpLmZvckVhY2goZnVuY3Rpb24oa3Qpey0xPT0obnQ9WmUuaW5kZXhPZihrdCkpJiYoWmVbbnQ9WmUubGVuZ3RoXT1rdCk7dmFyIGJ0PVFlW2t0XSxFdD0ieiIsVnQ9IiIs''@;'; put 'put ''dW49cWkoe2M6b2UrbnQscjpzZStmdCtQfSk7aWYoTGU9VTEuc2hlZXRfZ2V0X2NlbGwoUSx1biksIWJ0fHwib2JqZWN0IiE9dHlwZW9mIGJ0fHxidCBpbnN0YW5jZW9mIERhdGUpe2lmKCJudW1iZXIiPT10eXBlb2YgYnQ/RXQ9Im4iOiJib29sZWFuIj09dHlwZW9mIGJ0P0V0PSJiIjoic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIGJ0P0V0PSJzIjpidCBpbnN0YW5jZW9mIERhdGU/KEV0PSJkIixULmNlbGxEYXRlc3x8KEV0PSJuIixidD1LZShidCkpLFZ0PUxlLnomJkkuaXNfZGF0ZShMZS56KT9MZS56OlQuZGF0ZU5GfHxJLl90YWJsZVsxNF0pOm51bGw9PT1idCYmVC5udWxsRXJyb3ImJihFdD0i''@;'; put 'put ''ZSIsYnQ9MCksTGU/KExlLnQ9RXQsTGUudj1idCxkZWxldGUgTGUudyxkZWxldGUgTGUuUixWdCYmKExlLno9VnQpKTpRW3VuXT1MZT17dDpFdCx2OmJ0fSxWdCYmKExlLno9VnQpLExlJiZMZS5oKXRyeXtpZihMZS5SPWtmLmh0bWxfdG9fcnMoTGUuaCksIUxlLnYpe0xlLnY9IiI7Zm9yKHZh''@;'; put 'put ''ciBucj0wO25yPExlLlIubGVuZ3RoOysrbnIpTGUudis9TGUuUltucl0udnx8IiJ9fWNhdGNoe319ZWxzZSBRW3VuXT1idH0pfSksTmUuZS5jPU1hdGgubWF4KE5lLmUuYyxvZStaZS5sZW5ndGgtMSk7dmFyIG10PXpvKHNlKTtpZihQKWZvcihudD0wO250PFplLmxlbmd0aDsrK250KVFbbXMo''@;'; put 'put ''bnQrb2UpK210XT17dDoicyIsdjpaZVtudF19O3JldHVybiBRWyIhcmVmIl09aHQoTmUpLFF9dmFyIFUxPXtlbmNvZGVfY29sOm1zLGVuY29kZV9yb3c6em8sZW5jb2RlX2NlbGw6cWksZW5jb2RlX3JhbmdlOmh0LGRlY29kZV9jb2w6VGMsZGVjb2RlX3JvdzppYSxzcGxpdF9jZWxsOmZ1bmN0''@;'; put 'put ''aW9uIG44KGQpe3JldHVybiBkLnJlcGxhY2UoLyhcJD9bQS1aXSopKFwkP1xkKikvLCIkMSwkMiIpLnNwbGl0KCIsIil9LGRlY29kZV9jZWxsOklzLGRlY29kZV9yYW5nZTp6YSxmb3JtYXRfY2VsbDp6dCxnZXRfZm9ybXVsYWU6RlIsbWFrZV9jc3Y6Y0UsbWFrZV9qc29uOiR5LG1ha2VfZm9y''@;'; put 'put ''bXVsYWU6RlIsaHRtbF90b19yczprZi5odG1sX3RvX3JzLHNoZWV0X2FkZF9hb2E6Rm4sc2hlZXRfYWRkX2pzb246c2osc2hlZXRfYWRkX2RvbTpNUixhb2FfdG9fc2hlZXQ6UW4sanNvbl90b19zaGVldDpmdW5jdGlvbiBsdGUoZCxfKXtyZXR1cm4gc2oobnVsbCxkLF8pfSx0YWJsZV90b19z''@;'; put 'put ''aGVldDpUUix0YWJsZV90b19ib29rOmZ1bmN0aW9uIEo1ZShkLF8pe3JldHVybiBtbihUUihkLF8pLF8pfSxzaGVldF90b19jc3Y6Y0Usc2hlZXRfdG9fdHh0OmFqLHNoZWV0X3RvX2pzb246JHksc2hlZXRfdG9faHRtbDprZi5mcm9tX3NoZWV0LHNoZWV0X3RvX2Zvcm11bGFlOkZSLHNoZWV0''@;'; put 'put ''X3RvX3Jvd19vYmplY3RfYXJyYXk6JHl9O2Z1bmN0aW9uIEhSKGQsXyxtLFQsUCl7dmFyIFE7aWYoZC5zdHlsZSYmIShkLl9yYW5nZSYmKFE9InN0cmluZyI9PXR5cGVvZiBkLl9yYW5nZT92LnV0aWxzLmRlY29kZV9yYW5nZShkLl9yYW5nZSk6ZC5fcmFuZ2UsbS5jPlEuZS5jfHxtLmM8US5z''@;'; put 'put ''LmN8fG0ucj5RLmUucnx8bS5yPFEucy5yKSkmJlEpe3ZhciBzZT1kLnN0eWxlLnN0eWxlO2lmKHNlKXtzZS53aG9sZVRhYmxlJiZVMS5hcHBseV9zdHlsZV9kZWx0YShULHNlLndob2xlVGFibGUpO2U6aWYoc2UuaGVhZGVyUm93KWlmKFApe2lmKG0uciE9US5zLnIpYnJlYWsgZTtfbihkLnN0''@;'; put 'put ''eWxlLmNvbGhlYWQpfHxVMS5hcHBseV9zdHlsZV9kZWx0YShULHNlLmhlYWRlclJvdyl9ZWxzZXtpZihtLnIhPVEucy5yKWJyZWFrIGU7X24oZC5oZWFkZXIpfHxVMS5hcHBseV9zdHlsZV9kZWx0YShULHNlLmhlYWRlclJvdyl9fX19VTEudGVzdF9wYXNzd29yZD1mdW5jdGlvbiBROShkLF8p''@;'; put 'put ''e3ZhciBtPUJ1ZmZlci5mcm9tKGQuc2FsdCwiYmFzZTY0IiksVD1kLmFsZ28sUD1TZChCdWZmZXIuY29uY2F0KFttLEJ1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsXykpXSksVCksUT1CdWZmZXIuYWxsb2MoNCk7T2woUSwwKTtmb3IodmFyIHNlPTA7c2U8ZC5zcGluOysr''@;'; put 'put ''c2UpUS5sPTAsUS53cml0ZV9zaGlmdCg0LHNlKSxQPVNkKEJ1ZmZlci5jb25jYXQoW1AsUV0pLFQpO3ZhciBvZT1CdWZmZXIuZnJvbShkLmhhc2gsImJhc2U2NCIpO3JldHVybiAwPT1QLmNvbXBhcmUob2UpfSxVMS5oYXNoX3Bhc3N3b3JkPWZ1bmN0aW9uIEtlZShkKXt2YXIgXz17YWxnbzoi''@;'; put 'put ''U0hBLTUxMiIsc2FsdDoiVTJobFpYUktVeTVqYjIwdmVHeHplQT09IixzcGluOjFlM30sbT1CdWZmZXIuZnJvbShfLnNhbHQsImJhc2U2NCIpLFQ9Xy5hbGdvLFA9U2QoQnVmZmVyLmNvbmNhdChbbSxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLGQpKV0pLFQpLFE9QnVm''@;'; put 'put ''ZmVyLmFsbG9jKDQpO09sKFEsMCk7Zm9yKHZhciBzZT0wO3NlPF8uc3BpbjsrK3NlKVEubD0wLFEud3JpdGVfc2hpZnQoNCxzZSksUD1TZChCdWZmZXIuY29uY2F0KFtQLFFdKSxUKTtyZXR1cm4gXy5oYXNoPVAudG9TdHJpbmcoImJhc2U2NCIpLF99LFUxLnNoZWV0X3NldF9yYW5nZV9zdHls''@;'; put 'put ''ZT1mdW5jdGlvbihkLF8sbSl7aWYobSl7dmFyIFQ9InN0cmluZyI9PXR5cGVvZiBfP3l0KF8pOl87bnVsbCE9VC5yJiZudWxsIT1ULmMmJihUPXtzOlQsZTpUfSk7dmFyIG9lLFA9VC5zLnIsUT0wLHNlPSIiLGRlPXphKGRbIiFyZWYiXXx8IkExIik7ZGUucy5yPlQucy5yJiYoZGUucy5yPVQu''@;'; put 'put ''cy5yKSxkZS5zLmM+VC5zLmMmJihkZS5zLmM9VC5zLmMpLGRlLmUucjxULmUuciYmKGRlLmUucj1ULmUuciksZGUuZS5jPFQuZS5jJiYoZGUuZS5jPVQuZS5jKSxkWyIhcmVmIl09aHQoZGUpO2Zvcih2YXIgTmU9QXJyYXkuaXNBcnJheShkKTtQPD1ULmUucjsrK1ApZm9yKFE9VC5zLmM7UTw9''@;'; put 'put ''VC5lLmM7KytRKU5lPyhkW1BdfHwoZFtQXT1bXSksZFtQXVtRXXx8KGRbUF1bUV09e3Q6InoifSksb2U9ZFtQXVtRXSk6KGRbc2U9cWkoe3I6UCxjOlF9KV18fChkW3NlXT17dDoieiJ9KSxvZT1kW3NlXSksb2Uuc3x8KG9lLnM9e30pLE9iamVjdC5rZXlzKG0pLmZvckVhY2goTGUpLG9lLnMu''@;'; put 'put ''cGF0dGVyblR5cGUmJiFvZS5zLmZnQ29sb3ImJihkZWxldGUgb2Uucy5wYXR0ZXJuVHlwZSxkZWxldGUgb2Uucy5iZ0NvbG9yKSwob2Uucy5mZ0NvbG9yfHxvZS5zLmJnQ29sb3IpJiYibm9uZSI9PShvZS5zLnBhdHRlcm5UeXBlfHwibm9uZSIpJiYob2Uucy5wYXR0ZXJuVHlwZT0ic29saWQi''@;'; put 'put ''KTtpZihQPVQucy5yLG0udG9wfHxudWxsPT09bS50b3ApZm9yKFE9VC5zLmM7UTw9VC5lLmM7KytRKXtpZihOZSl7aWYoIWRbUF0pY29udGludWU7b2U9ZFtQXVtRXX1lbHNlIHNlPXFpKHtyOlAsYzpRfSksb2U9ZFtzZV07b2UmJihudWxsPT09bS50b3A/ZGVsZXRlIG9lLnMudG9wOm9lLnMu''@;'; put 'put ''dG9wPVFyKG0udG9wKSl9aWYoUD1ULmUucixtLmJvdHRvbXx8bnVsbD09PW0uYm90dG9tKWZvcihRPVQucy5jO1E8PVQuZS5jOysrUSl7aWYoTmUpe2lmKCFkW1BdKWNvbnRpbnVlO29lPWRbUF1bUV19ZWxzZSBzZT1xaSh7cjpQLGM6UX0pLG9lPWRbc2VdO29lJiYobnVsbD09PW0uYm90dG9t''@;'; put 'put ''P2RlbGV0ZSBvZS5zLmJvdHRvbTpvZS5zLmJvdHRvbT1RcihtLmJvdHRvbSkpfWlmKFE9VC5zLmMsbS5sZWZ0fHxudWxsPT09bS5sZWZ0KWZvcihQPVQucy5yO1A8PVQuZS5yOysrUCl7aWYoTmUpe2lmKCFkW1BdKWNvbnRpbnVlO29lPWRbUF1bUV19ZWxzZSBzZT1xaSh7cjpQLGM6UX0pLG9l''@;'; put 'put ''PWRbc2VdO29lJiYobnVsbD09PW0ubGVmdD9kZWxldGUgb2Uucy5sZWZ0Om9lLnMubGVmdD1RcihtLmxlZnQpKX1pZihRPVQuZS5jLG0ucmlnaHR8fG51bGw9PT1tLnJpZ2h0KWZvcihQPVQucy5yO1A8PVQuZS5yOysrUCl7aWYoTmUpe2lmKCFkW1BdKWNvbnRpbnVlO29lPWRbUF1bUV19ZWxz''@;'; put 'put ''ZSBzZT1xaSh7cjpQLGM6UX0pLG9lPWRbc2VdO29lJiYobnVsbD09PW0ucmlnaHQ/ZGVsZXRlIG9lLnMucmlnaHQ6b2Uucy5yaWdodD1RcihtLnJpZ2h0KSl9fWZ1bmN0aW9uIExlKEJlKXtpZigidG9wIiE9QmUmJiJib3R0b20iIT1CZSYmImxlZnQiIT1CZSYmInJpZ2h0IiE9QmUpe2lmKCJ6''@;'; put 'put ''Ij09QmUpcmV0dXJuIHZvaWQob2Uuej1tLnopO2lmKCJhbGlnbm1lbnQiPT1CZSlyZXR1cm4gdm9pZChvZS5zW0JlXT9PYmplY3Qua2V5cyhtW0JlXSkuZm9yRWFjaChmdW5jdGlvbihaZSl7b2Uuc1tCZV1bWmVdPW1bQmVdW1plXX0pOm9lLnNbQmVdPVFyKG1bQmVdKSk7aWYoImluY29sIj09''@;'; put 'put ''QmUpcmV0dXJuIFE+VC5zLmMmJihudWxsPT09bS5sZWZ0P2RlbGV0ZSBvZS5zLmxlZnQ6b2Uucy5sZWZ0PSJvYmplY3QiPT10eXBlb2YgbVtCZV0/UXIobVtCZV0pOm1bQmVdKSx2b2lkKFE8VC5lLmMmJihudWxsPT09bS5yaWdodD9kZWxldGUgb2Uucy5yaWdodDpvZS5zLnJpZ2h0PSJvYmpl''@;'; put 'put ''Y3QiPT10eXBlb2YgbVtCZV0/UXIobVtCZV0pOm1bQmVdKSk7aWYoImlucm93Ij09QmUpcmV0dXJuIFA+VC5zLnImJihudWxsPT09bS50b3A/ZGVsZXRlIG9lLnMudG9wOm9lLnMudG9wPSJvYmplY3QiPT10eXBlb2YgbVtCZV0/UXIobVtCZV0pOm1bQmVdKSx2b2lkKFA8VC5lLnImJihudWxs''@;'; put 'put ''PT09bS5ib3R0b20/ZGVsZXRlIG9lLnMuYm90dG9tOm9lLnMuYm90dG9tPSJvYmplY3QiPT10eXBlb2YgbVtCZV0/UXIobVtCZV0pOm1bQmVdKSk7bnVsbD09PW1bQmVdP2RlbGV0ZSBvZS5zW0JlXTpvZS5zW0JlXT1tW0JlXSYmQXJyYXkuaXNBcnJheShtW0JlXSk/bVtCZV0uc2xpY2UoKS5t''@;'; put 'put ''YXAoZnVuY3Rpb24oWmUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgWmU/UXIoWmUpOlplfSk6Im9iamVjdCI9PXR5cGVvZiBtW0JlXT9RcihtW0JlXSk6bVtCZV19fX0sVTEuYXBwbHlfc3R5bGVfZGVsdGE9ZnVuY3Rpb24oZCxfKXtbInN6IiwiYm9sZCIsIml0YWxpYyIsInVuZGVybGluZSIs''@;'; put 'put ''InN0cmlrZSIsIm5hbWUiLCJ2YWxpZ24iXS5mb3JFYWNoKGZ1bmN0aW9uKG0pe3ZhciBUPW07ImJnQ29sb3IiPT1tP1Q9ImZnQ29sb3IiOiJmZ0NvbG9yIj09bSYmKFQ9ImJnQ29sb3IiKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXyxtKSYmKG51bGw9PT1fW21dP2Rl''@;'; put 'put ''bGV0ZSBkW1RdOm51bGwhPV9bbV0mJihkW1RdPV9bbV0pKX0pLFsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiYWxpZ25tZW50IiwicHJvdGVjdGlvbiIsImNvbG9yIiwiZmdDb2xvciIsImJnQ29sb3IiXS5mb3JFYWNoKGZ1bmN0aW9uKG0pe09iamVjdC5wcm90b3R5cGUuaGFzT3du''@;'; put 'put ''UHJvcGVydHkuY2FsbChfLG0pJiYobnVsbD09PV9bbV0/ZGVsZXRlIGRbbV06bnVsbCE9X1ttXSYmKGRbbV09UXIoX1ttXSkpKX0pfSxVMS5nZXRfY29tcHV0ZWRfc3R5bGU9ZnVuY3Rpb24oZCxfKXsic3RyaW5nIj09dHlwZW9mIF8mJihfPXYudXRpbHMuZGVjb2RlX2NlbGwoXykpO3ZhciBt''@;'; put 'put ''PUFycmF5LmlzQXJyYXkoZCk/KGRbXy5yXXx8W10pW18uY106ZFt2LnV0aWxzLmVuY29kZV9jZWxsKF8pXSxUPVFyKG0mJm0uc3x8e30pO3JldHVybiBkWyIhdGFibGVzIl0mJmRbIiF0YWJsZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKFApe0hSKFAsMCxfLFQpfSksZFsiIXBpdm90cyJdJiZkWyIh''@;'; put 'put ''cGl2b3RzIl0uZm9yRWFjaChmdW5jdGlvbihQKXtIUihQLDAsXyxULCEwKX0pLFR9O3ZhciBjaj17fTtVMS5jZWxsX2FycmF5X3RvX2Nzdl9yb3c9ZnVuY3Rpb24oZCxfKXt2YXIgbT1fPz97fSxUPXZvaWQgMCE9PW0uRlM/bS5GUzoiLCIsUD1ULmNoYXJDb2RlQXQoMCksUT12b2lkIDAhPT1t''@;'; put 'put ''LlJTP20uUlM6IlxuIixzZT1RLmNoYXJDb2RlQXQoMCksb2U9Y2pbVF18fChjaltUXT1uZXcgUmVnRXhwKCgifCI9PVQ/IlxcfCI6VCkrIiskIikpLGRlPWZ1bmN0aW9uIGxqKGQsXyxtLFQsUCl7Zm9yKHZhciBRPSEwLHNlPVtdLG9lPSIiLGRlPTA7ZGU8PWQubGVuZ3RoLTE7KytkZSl7dmFy''@;'; put 'put ''IExlPWRbZGVdO2lmKG51bGw9PUxlKW9lPSIiO2Vsc2UgaWYobnVsbCE9TGUudil7UT0hMSxvZT0iIit6dChMZSxudWxsLFApO2Zvcih2YXIgTmU9MCxCZT0wO05lIT09b2UubGVuZ3RoOysrTmUpaWYoKEJlPW9lLmNoYXJDb2RlQXQoTmUpKT09PV98fEJlPT09bXx8MzQ9PT1CZSl7b2U9JyIn''@;'; put 'put ''K29lLnJlcGxhY2UoZXYsJyIiJykrJyInO2JyZWFrfSJJRCI9PW9lJiYob2U9JyJJRCInKX1lbHNlIG51bGw9PUxlLmZ8fExlLkY/b2U9IiI6KFE9ITEsKG9lPSI9IitMZS5mKS5pbmRleE9mKCIsIik+PTAmJihvZT0nIicrb2UucmVwbGFjZShldiwnIiInKSsnIicpKTtzZS5wdXNoKG9lKX1y''@;'; put 'put ''ZXR1cm4hMT09PVAuYmxhbmtyb3dzJiZRP251bGw6c2Uuam9pbihUKX0oZCxQLHNlLFQsbSk7cmV0dXJuIG0uc3RyaXAmJihkZT1kZS5yZXBsYWNlKG9lLCIiKSksZGUrUX0sZnVuY3Rpb24oZCl7ZnVuY3Rpb24gbShRLHNlLG9lKXtyZXR1cm4gbnVsbCE9UVtzZV0/UVtzZV06UVtzZV09b2V9''@;'; put 'put ''ZnVuY3Rpb24gVChRLHNlLG9lKXtpZigic3RyaW5nIj09dHlwZW9mIHNlKXtpZihBcnJheS5pc0FycmF5KFEpKXt2YXIgZGU9SXMoc2UpO3JldHVybiBRW2RlLnJdfHwoUVtkZS5yXT1bXSksUVtkZS5yXVtkZS5jXXx8KFFbZGUucl1bZGUuY109e3Q6InoifSl9cmV0dXJuIFFbc2VdfHwoUVtz''@;'; put 'put ''ZV09e3Q6InoifSl9cmV0dXJuIFQoUSxxaSgibnVtYmVyIiE9dHlwZW9mIHNlP3NlOntyOnNlLGM6b2V8fDB9KSl9ZC5jb25zdHM9ZC5jb25zdHN8fHt9LGQuc2hlZXRfZ2V0X2NlbGw9VCxkLmJvb2tfbmV3PWZ1bmN0aW9uKCl7cmV0dXJue1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fX0sZC5i''@;'; put 'put ''b29rX2FwcGVuZF9zaGVldD1mdW5jdGlvbihRLHNlLG9lKXtpZighb2UpZm9yKHZhciBkZT0xO2RlPD02NTUzNSYmLTEhPVEuU2hlZXROYW1lcy5pbmRleE9mKG9lPSJTaGVldCIrZGUpOysrZGUpO2lmKGlSKG9lKSxRLlNoZWV0TmFtZXMuaW5kZXhPZihvZSk+PTApdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJXb3Jrc2hlZXQgd2l0aCBuYW1lIHwiK29lKyJ8IGFscmVhZHkgZXhpc3RzISIpO1EuU2hlZXROYW1lcy5wdXNoKG9lKSxRLlNoZWV0c1tvZV09c2V9LGQuYm9va19zZXRfc2hlZXRfdmlzaWJpbGl0eT1mdW5jdGlvbihRLHNlLG9lKXttKFEsIldvcmtib29rIix7fSksbShRLldvcmtib29r''@;'; put 'put ''LCJTaGVldHMiLFtdKTt2YXIgZGU9ZnVuY3Rpb24gUChRLHNlKXtpZigibnVtYmVyIj09dHlwZW9mIHNlKXtpZihzZT49MCYmUS5TaGVldE5hbWVzLmxlbmd0aD5zZSlyZXR1cm4gc2U7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzaGVldCAjICIrc2UpfWlmKCJzdHJpbmciPT10eXBl''@;'; put 'put ''b2Ygc2Upe3ZhciBvZT1RLlNoZWV0TmFtZXMuaW5kZXhPZihzZSk7aWYob2U+LTEpcmV0dXJuIG9lO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc2hlZXQgbmFtZSB8IitzZSsifCIpfXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc2hlZXQgfCIrc2UrInwiKX0oUSxzZSk7c3dp''@;'; put 'put ''dGNoKG0oUS5Xb3JrYm9vay5TaGVldHMsZGUse30pLG9lKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiQmFkIHNoZWV0IHZpc2liaWxpdHkgc2V0dGluZyAiK29lKX1RLldvcmtib29rLlNoZWV0c1tkZV0uSGlkZGVuPW9lfSxmdW5jdGlvbiBf''@;'; put 'put ''KFEpe1EuZm9yRWFjaChmdW5jdGlvbihzZSl7ZC5jb25zdHNbc2VbMF1dPXNlWzFdfSl9KFtbIlNIRUVUX1ZJU0lCTEUiLDBdLFsiU0hFRVRfSElEREVOIiwxXSxbIlNIRUVUX1ZFUllfSElEREVOIiwyXV0pLGQuY2VsbF9zZXRfbnVtYmVyX2Zvcm1hdD1mdW5jdGlvbihRLHNlKXtyZXR1cm4g''@;'; put 'put ''US56PXNlLFF9LGQuY2VsbF9zZXRfaHlwZXJsaW5rPWZ1bmN0aW9uKFEsc2Usb2Upe3JldHVybiBzZT8oUS5sPXtUYXJnZXQ6c2V9LG9lJiYoUS5sLlRvb2x0aXA9b2UpLFEuc3x8KFEucz17fSksUS5zLmNvbG9yPXt0aGVtZToxMH0pOihkZWxldGUgUS5sLFEucyYmUS5zLmNvbG9yJiYxMD09''@;'; put 'put ''US5zLmNvbG9yLnRoZW1lJiZkZWxldGUgUS5zLmNvbG9yKSxRfSxkLmNlbGxfc2V0X2ludGVybmFsX2xpbms9ZnVuY3Rpb24oUSxzZSxvZSl7cmV0dXJuIGQuY2VsbF9zZXRfaHlwZXJsaW5rKFEsIiMiK3NlLG9lKX0sZC5jZWxsX2FkZF9jb21tZW50PWZ1bmN0aW9uKFEsc2Usb2Upe1EuY3x8''@;'; put 'put ''KFEuYz1bXSksUS5jLnB1c2goe3Q6c2UsYTpvZXx8IlNoZWV0SlMifSl9LGQuc2hlZXRfc2V0X2FycmF5X2Zvcm11bGE9ZnVuY3Rpb24oUSxzZSxvZSl7Zm9yKHZhciBkZT0ic3RyaW5nIiE9dHlwZW9mIHNlP3NlOnl0KHNlKSxMZT0ic3RyaW5nIj09dHlwZW9mIHNlP3NlOmh0KHNlKSxOZT1k''@;'; put 'put ''ZS5zLnI7TmU8PWRlLmUucjsrK05lKWZvcih2YXIgQmU9ZGUucy5jO0JlPD1kZS5lLmM7KytCZSl7dmFyIFplPVQoUSxOZSxCZSk7WmUudD0ibiIsWmUuRj1MZSxkZWxldGUgWmUudixOZT09ZGUucy5yJiZCZT09ZGUucy5jJiYoWmUuZj1vZSl9cmV0dXJuIFF9fShVMSksSWUmJmZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIGQ9aCg3MDQ1KS5SZWFkYWJsZTt2LnN0cmVhbT17dG9fanNvbjpmdW5jdGlvbihQLFEpe3ZhciBzZT1kKHtvYmplY3RNb2RlOiEwfSk7aWYobnVsbD09UHx8bnVsbD09UFsiIXJlZiJdKXJldHVybiBzZS5wdXNoKG51bGwpLHNlO3ZhciBvZT17dDoibiIsdjowfSxkZT0wLExlPTEs''@;'; put 'put ''TmU9W10sQmU9MCxaZT0iIixudD17czp7cjowLGM6MH0sZTp7cjowLGM6MH19LG10PVF8fHt9LFFlPW51bGwhPW10LnJhbmdlP210LnJhbmdlOlBbIiFyZWYiXTtzd2l0Y2goMT09PW10LmhlYWRlcj9kZT0xOiJBIj09PW10LmhlYWRlcj9kZT0yOkFycmF5LmlzQXJyYXkobXQuaGVhZGVyKSYm''@;'; put 'put ''KGRlPTMpLHR5cGVvZiBRZSl7Y2FzZSJzdHJpbmciOm50PXl0KFFlKTticmVhaztjYXNlIm51bWJlciI6KG50PXl0KFBbIiFyZWYiXSkpLnMucj1RZTticmVhaztkZWZhdWx0Om50PVFlfWRlPjAmJihMZT0wKTt2YXIgZnQ9em8obnQucy5yKSxrdD1bXSxidD0wLEV0PUFycmF5LmlzQXJyYXko''@;'; put 'put ''UCksVnQ9bnQucy5yLHVuPTAsbnI9MDtmb3IoRXQmJiFQW1Z0XSYmKFBbVnRdPVtdKSx1bj1udC5zLmM7dW48PW50LmUuYzsrK3VuKXN3aXRjaChrdFt1bl09bXModW4pLG9lPUV0P1BbVnRdW3VuXTpQW2t0W3VuXStmdF0sZGUpe2Nhc2UgMTpOZVt1bl09dW4tbnQucy5jO2JyZWFrO2Nhc2Ug''@;'; put 'put ''MjpOZVt1bl09a3RbdW5dO2JyZWFrO2Nhc2UgMzpOZVt1bl09bXQuaGVhZGVyW3VuLW50LnMuY107YnJlYWs7ZGVmYXVsdDpmb3IobnVsbD09b2UmJihvZT17dzoiX19FTVBUWSIsdDoicyJ9KSxaZT1CZT16dChvZSxudWxsLG10KSxidD0wLG5yPTA7bnI8TmUubGVuZ3RoOysrbnIpTmVbbnJd''@;'; put 'put ''PT1aZSYmKFplPUJlKyJfIisgKytidCk7TmVbdW5dPVplfXJldHVybiBWdD1udC5zLnIrTGUsc2UuX3JlYWQ9ZnVuY3Rpb24oKXtpZihWdD5udC5lLnIpcmV0dXJuIHNlLnB1c2gobnVsbCk7Zm9yKDtWdDw9bnQuZS5yOyl7dmFyIG5uPW9qKFAsbnQsVnQsa3QsZGUsTmUsRXQsbXQpO2lmKCsr''@;'; put 'put ''VnQsITE9PT1ubi5pc2VtcHR5fHwoMT09PWRlPyExIT09bXQuYmxhbmtyb3dzOm10LmJsYW5rcm93cykpe3NlLnB1c2gobm4ucm93KTticmVha319fSxzZX0sdG9faHRtbDpmdW5jdGlvbihQLFEpe3ZhciBzZT1kKCksb2U9UXx8e30sTGU9bnVsbCE9b2UuZm9vdGVyP29lLmZvb3RlcjprZi5F''@;'; put 'put ''TkQ7c2UucHVzaChudWxsIT1vZS5oZWFkZXI/b2UuaGVhZGVyOmtmLkJFR0lOKTt2YXIgTmU9emEoUFsiIXJlZiJdKTtvZS5kZW5zZT1BcnJheS5pc0FycmF5KFApLHNlLnB1c2goa2YuX3ByZWFtYmxlKFAsTmUsb2UpKTt2YXIgQmU9TmUucy5yLFplPSExLG50PVtdO3JldHVybiBzZS5fcmVh''@;'; put 'put ''ZD1mdW5jdGlvbigpe2lmKEJlPk5lLmUucilyZXR1cm4gWmV8fChaZT0hMCxzZS5wdXNoKCI8L3RhYmxlPiIrTGUpKSxzZS5wdXNoKG51bGwpO2Zvcig7QmU8PU5lLmUucjspe3NlLnB1c2goa2YuX3JvdyhQLE5lLEJlLG9lLG50LCIiKSksKytCZTticmVha319LHNlfSx0b19jc3Y6ZnVuY3Rp''@;'; put 'put ''b24oUCxRKXt2YXIgc2U9ZCgpLG9lPVE/P3t9O2lmKG51bGw9PVB8fG51bGw9PVBbIiFyZWYiXSlyZXR1cm4gc2UucHVzaChudWxsKSxzZTt2YXIgZGU9eXQoUFsiIXJlZiJdKSxMZT12b2lkIDAhPT1vZS5GUz9vZS5GUzoiLCIsTmU9TGUuY2hhckNvZGVBdCgwKSxCZT12b2lkIDAhPT1vZS5S''@;'; put 'put ''Uz9vZS5SUzoiXG4iLFplPUJlLmNoYXJDb2RlQXQoMCksbnQ9bmV3IFJlZ0V4cCgoInwiPT1MZT8iXFx8IjpMZSkrIiskIiksbXQ9IiIsUWU9W107b2UuZGVuc2U9QXJyYXkuaXNBcnJheShQKTtmb3IodmFyIGZ0PW9lLnNraXBIaWRkZW4mJlBbIiFjb2xzIl18fFtdLGt0PW9lLnNraXBIaWRk''@;'; put 'put ''ZW4mJlBbIiFyb3dzIl18fFtdLGJ0PWRlLnMuYztidDw9ZGUuZS5jOysrYnQpKGZ0W2J0XXx8e30pLmhpZGRlbnx8KFFlW2J0XT1tcyhidCkpO3ZhciBFdD1kZS5zLnIsVnQ9ITE7cmV0dXJuIHNlLl9yZWFkPWZ1bmN0aW9uKCl7aWYoIVZ0KXJldHVybiBWdD0hMCxzZS5wdXNoKCJcdWZlZmYi''@;'; put 'put ''KTtmb3IoO0V0PD1kZS5lLnI7KWlmKCsrRXQsIShrdFtFdC0xXXx8e30pLmhpZGRlbiYmbnVsbCE9KG10PXF5KFAsZGUsRXQtMSxRZSxOZSxaZSxMZSxvZSkpKXtvZS5zdHJpcCYmKG10PW10LnJlcGxhY2UobnQsIiIpKSxzZS5wdXNoKG10K0JlKTticmVha31yZXR1cm4gRXQ+ZGUuZS5yP3Nl''@;'; put 'put ''LnB1c2gobnVsbCk6dm9pZCAwfSxzZX19fSgpLHYucGFyc2VfeGxzY2ZiPXdSLHYucGFyc2VfemlwPURSLHYucmVhZD1ZOCx2LnJlYWRGaWxlPXRqLHYucmVhZEZpbGVTeW5jPXRqLHYud3JpdGU9Wjgsdi53cml0ZUZpbGU9TlIsdi53cml0ZUZpbGVTeW5jPU5SLHYud3JpdGVGaWxlQXN5bmM9''@;'; put 'put ''ZnVuY3Rpb24gaWooZCxfLG0sVCl7dmFyIFA9bXx8e307UC50eXBlPSJmaWxlIixQLmZpbGU9ZCxPUihQKSxQLnR5cGU9ImJ1ZmZlciI7dmFyIFE9VDtyZXR1cm4gUSBpbnN0YW5jZW9mIEZ1bmN0aW9ufHwoUT1tKSx4ZS53cml0ZUZpbGUoZCxaOChfLFApLFEpfSx2LnNldF9kYXRlX3N0eWxl''@;'; put 'put ''PWZ1bmN0aW9uIEd0KGQpe3N3aXRjaChkKXtjYXNlIDA6UnQoKTticmVhaztjYXNlIDE6IWZ1bmN0aW9uIEx0KCl7dmFyIGQ9bmV3IERhdGU7dHQ9SmUuZ2V0VGltZSgpKzZlNCooZC5nZXRUaW1lem9uZU9mZnNldCgpLUplLmdldFRpbWV6b25lT2Zmc2V0KCkpO3ZhciBfPWQuZ2V0VGltZXpv''@;'; put 'put ''bmVPZmZzZXQoKTtLZT1mdW5jdGlvbihULFApe3ZhciBRPVQuZ2V0VGltZSgpO3JldHVybiBQJiYoUS09MTI2MzE2OGU1KSwoUS0oSmUuZ2V0VGltZSgpKzZlNCooVC5nZXRUaW1lem9uZU9mZnNldCgpLUplLmdldFRpbWV6b25lT2Zmc2V0KCkpKSkvODY0ZTV9LCR0PWZ1bmN0aW9uKFQpe3Zh''@;'; put 'put ''ciBQPW5ldyBEYXRlO3JldHVybiBQLnNldFRpbWUoMjQqVCo2MCo2MCoxZTMrdHQpLFAuZ2V0VGltZXpvbmVPZmZzZXQoKSE9PV8mJlAuc2V0VGltZShQLmdldFRpbWUoKSs2ZTQqKFAuZ2V0VGltZXpvbmVPZmZzZXQoKS1fKSksUH19KCl9fSx2LnV0aWxzPVUxLHYuU1NGPUksdHlwZW9mIGFl''@;'; put 'put ''PCJ1IiYmKHYuQ0ZCPWFlKX0oail9LDU1MTg4KGZlLGopeyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIGg9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHk9bmV3IFVpbnQ4QXJyYXkoMjU2KSxjPTA7Yzw2''@;'; put 'put ''NDtjKyspeVtoLmNoYXJDb2RlQXQoYyldPWM7ai5sPWZ1bmN0aW9uKHMpe3ZhciB2LEE9bmV3IFVpbnQ4QXJyYXkocyksQz1BLmxlbmd0aCx3PSIiO2Zvcih2PTA7djxDO3YrPTMpdys9aFtBW3ZdPj4yXSx3Kz1oWygzJkFbdl0pPDw0fEFbdisxXT4+NF0sdys9aFsoMTUmQVt2KzFdKTw8MnxB''@;'; put 'put ''W3YrMl0+PjZdLHcrPWhbNjMmQVt2KzJdXTtyZXR1cm4gQyUzPT0yP3c9dy5zdWJzdHJpbmcoMCx3Lmxlbmd0aC0xKSsiPSI6QyUzPT0xJiYodz13LnN1YnN0cmluZygwLHcubGVuZ3RoLTIpKyI9PSIpLHd9LGouRD1mdW5jdGlvbihzKXt2YXIgQyxTLEwsUix4LEE9Ljc1KnMubGVuZ3RoLHY9''@;'; put 'put ''cy5sZW5ndGgsdz0wOyI9Ij09PXNbcy5sZW5ndGgtMV0mJihBLS0sIj0iPT09c1tzLmxlbmd0aC0yXSYmQS0tKTt2YXIgVT1uZXcgQXJyYXlCdWZmZXIoQSksSD1uZXcgVWludDhBcnJheShVKTtmb3IoQz0wO0M8djtDKz00KVM9eVtzLmNoYXJDb2RlQXQoQyldLEw9eVtzLmNoYXJDb2RlQXQo''@;'; put 'put ''QysxKV0sUj15W3MuY2hhckNvZGVBdChDKzIpXSx4PXlbcy5jaGFyQ29kZUF0KEMrMyldLEhbdysrXT1TPDwyfEw+PjQsSFt3KytdPSgxNSZMKTw8NHxSPj4yLEhbdysrXT0oMyZSKTw8Nnw2MyZ4O3JldHVybiBVfX0oKX0sMTM5ODEoZmUsail7InVzZSBzdHJpY3QiO2ouYnl0ZUxlbmd0aD1m''@;'; put 'put ''dW5jdGlvbiB3KEgpe3ZhciBWPUMoSCksej1WWzFdO3JldHVybiAzKihWWzBdK3opLzQten0sai50b0J5dGVBcnJheT1mdW5jdGlvbiBMKEgpe3ZhciBWLHJlLE49QyhIKSx6PU5bMF0sWT1OWzFdLEY9bmV3IGMoZnVuY3Rpb24gUyhILFYsTil7cmV0dXJuIDMqKFYrTikvNC1OfSgwLHosWSkp''@;'; put 'put ''LFc9MCxxPVk+MD96LTQ6ejtmb3IocmU9MDtyZTxxO3JlKz00KVY9eVtILmNoYXJDb2RlQXQocmUpXTw8MTh8eVtILmNoYXJDb2RlQXQocmUrMSldPDwxMnx5W0guY2hhckNvZGVBdChyZSsyKV08PDZ8eVtILmNoYXJDb2RlQXQocmUrMyldLEZbVysrXT1WPj4xNiYyNTUsRltXKytdPVY+Pjgm''@;'; put 'put ''MjU1LEZbVysrXT0yNTUmVjtyZXR1cm4gMj09PVkmJihWPXlbSC5jaGFyQ29kZUF0KHJlKV08PDJ8eVtILmNoYXJDb2RlQXQocmUrMSldPj40LEZbVysrXT0yNTUmViksMT09PVkmJihWPXlbSC5jaGFyQ29kZUF0KHJlKV08PDEwfHlbSC5jaGFyQ29kZUF0KHJlKzEpXTw8NHx5W0guY2hhckNv''@;'; put 'put ''ZGVBdChyZSsyKV0+PjIsRltXKytdPVY+PjgmMjU1LEZbVysrXT0yNTUmViksRn0sai5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uIFUoSCl7Zm9yKHZhciBWLE49SC5sZW5ndGgsej1OJTMsWT1bXSxGPTE2MzgzLFc9MCxxPU4tejtXPHE7Vys9RilZLnB1c2goeChILFcsVytGPnE/cTpXK0YpKTty''@;'; put 'put ''ZXR1cm4gMT09PXo/WS5wdXNoKGhbKFY9SFtOLTFdKT4+Ml0raFtWPDw0JjYzXSsiPT0iKToyPT09eiYmWS5wdXNoKGhbKFY9KEhbTi0yXTw8OCkrSFtOLTFdKT4+MTBdK2hbVj4+NCY2M10raFtWPDwyJjYzXSsiPSIpLFkuam9pbigiIil9O2Zvcih2YXIgaD1bXSx5PVtdLGM9dHlwZW9mIFVp''@;'; put 'put ''bnQ4QXJyYXk8InUiP1VpbnQ4QXJyYXk6QXJyYXkscz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsQT0wO0E8NjQ7KytBKWhbQV09c1tBXSx5W3MuY2hhckNvZGVBdChBKV09QTtmdW5jdGlvbiBDKEgpe3ZhciBWPUgu''@;'; put 'put ''bGVuZ3RoO2lmKFYlND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3ZhciBOPUguaW5kZXhPZigiPSIpO3JldHVybi0xPT09TiYmKE49ViksW04sTj09PVY/MDo0LU4lNF19ZnVuY3Rpb24gUihIKXtyZXR1cm4gaFtI''@;'; put 'put ''Pj4xOCY2M10raFtIPj4xMiY2M10raFtIPj42JjYzXStoWzYzJkhdfWZ1bmN0aW9uIHgoSCxWLE4pe2Zvcih2YXIgWT1bXSxGPVY7RjxOO0YrPTMpWS5wdXNoKFIoKEhbRl08PDE2JjE2NzExNjgwKSsoSFtGKzFdPDw4JjY1MjgwKSsoMjU1JkhbRisyXSkpKTtyZXR1cm4gWS5qb2luKCIiKX15''@;'; put 'put ''WzQ1XT02Mix5Wzk1XT02M30sMTIzNzUoZmUsaixoKXt2YXIgeT1oKDI3MDU0KS5CdWZmZXI7ZnVuY3Rpb24gYyhTKXt5LmlzQnVmZmVyKFMpfHwoUz15LmZyb20oUykpO2Zvcih2YXIgTD1TLmxlbmd0aC80fDAsUj1uZXcgQXJyYXkoTCkseD0wO3g8TDt4KyspUlt4XT1TLnJlYWRVSW50MzJC''@;'; put 'put ''RSg0KngpO3JldHVybiBSfWZ1bmN0aW9uIHMoUyl7Zm9yKDswPFMubGVuZ3RoO1MrKylTWzBdPTB9ZnVuY3Rpb24gQShTLEwsUix4LFUpe2Zvcih2YXIgcmUsbWUsQ2UsSWUsSD1SWzBdLFY9UlsxXSxOPVJbMl0sej1SWzNdLFk9U1swXV5MWzBdLEY9U1sxXV5MWzFdLFc9U1syXV5MWzJdLHE9''@;'; put 'put ''U1szXV5MWzNdLGtlPTQscWU9MTtxZTxVO3FlKyspcmU9SFtZPj4+MjRdXlZbRj4+PjE2JjI1NV1eTltXPj4+OCYyNTVdXnpbMjU1JnFdXkxba2UrK10sbWU9SFtGPj4+MjRdXlZbVz4+PjE2JjI1NV1eTltxPj4+OCYyNTVdXnpbMjU1JlldXkxba2UrK10sQ2U9SFtXPj4+MjRdXlZbcT4+PjE2''@;'; put 'put ''JjI1NV1eTltZPj4+OCYyNTVdXnpbMjU1JkZdXkxba2UrK10sSWU9SFtxPj4+MjRdXlZbWT4+PjE2JjI1NV1eTltGPj4+OCYyNTVdXnpbMjU1JlddXkxba2UrK10sWT1yZSxGPW1lLFc9Q2UscT1JZTtyZXR1cm4gcmU9KHhbWT4+PjI0XTw8MjR8eFtGPj4+MTYmMjU1XTw8MTZ8eFtXPj4+OCYy''@;'; put 'put ''NTVdPDw4fHhbMjU1JnFdKV5MW2tlKytdLG1lPSh4W0Y+Pj4yNF08PDI0fHhbVz4+PjE2JjI1NV08PDE2fHhbcT4+PjgmMjU1XTw8OHx4WzI1NSZZXSleTFtrZSsrXSxDZT0oeFtXPj4+MjRdPDwyNHx4W3E+Pj4xNiYyNTVdPDwxNnx4W1k+Pj44JjI1NV08PDh8eFsyNTUmRl0pXkxba2UrK10s''@;'; put 'put ''SWU9KHhbcT4+PjI0XTw8MjR8eFtZPj4+MTYmMjU1XTw8MTZ8eFtGPj4+OCYyNTVdPDw4fHhbMjU1JlddKV5MW2tlKytdLFtyZT4+Pj0wLG1lPj4+PTAsQ2U+Pj49MCxJZT4+Pj0wXX12YXIgdj1bMCwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NF0sQz1mdW5jdGlvbigpe2Zvcih2YXIgUz1u''@;'; put 'put ''ZXcgQXJyYXkoMjU2KSxMPTA7TDwyNTY7TCsrKVNbTF09TDwxMjg/TDw8MTpMPDwxXjI4Mztmb3IodmFyIFI9W10seD1bXSxVPVtbXSxbXSxbXSxbXV0sSD1bW10sW10sW10sW11dLFY9MCxOPTAsej0wO3o8MjU2Oysreil7dmFyIFk9Tl5OPDwxXk48PDJeTjw8M15OPDw0O1JbVl09WT1ZPj4+''@;'; put 'put ''OF4yNTUmWV45OSx4W1ldPVY7dmFyIEY9U1tWXSxXPVNbRl0scT1TW1ddLHJlPTI1NypTW1ldXjE2ODQzMDA4Klk7VVswXVtWXT1yZTw8MjR8cmU+Pj44LFVbMV1bVl09cmU8PDE2fHJlPj4+MTYsVVsyXVtWXT1yZTw8OHxyZT4+PjI0LFVbM11bVl09cmUsSFswXVtZXT0ocmU9MTY4NDMwMDkq''@;'; put 'put ''cV42NTUzNypXXjI1NypGXjE2ODQzMDA4KlYpPDwyNHxyZT4+PjgsSFsxXVtZXT1yZTw8MTZ8cmU+Pj4xNixIWzJdW1ldPXJlPDw4fHJlPj4+MjQsSFszXVtZXT1yZSwwPT09Vj9WPU49MTooVj1GXlNbU1tTW3FeRl1dXSxOXj1TW1NbTl1dKX1yZXR1cm57U0JPWDpSLElOVl9TQk9YOngsU1VC''@;'; put 'put ''X01JWDpVLElOVl9TVUJfTUlYOkh9fSgpO2Z1bmN0aW9uIHcoUyl7dGhpcy5fa2V5PWMoUyksdGhpcy5fcmVzZXQoKX13LmJsb2NrU2l6ZT0xNix3LmtleVNpemU9MzIsdy5wcm90b3R5cGUuYmxvY2tTaXplPXcuYmxvY2tTaXplLHcucHJvdG90eXBlLmtleVNpemU9dy5rZXlTaXplLHcucHJv''@;'; put 'put ''dG90eXBlLl9yZXNldD1mdW5jdGlvbigpe2Zvcih2YXIgUz10aGlzLl9rZXksTD1TLmxlbmd0aCxSPUwrNix4PTQqKFIrMSksVT1bXSxIPTA7SDxMO0grKylVW0hdPVNbSF07Zm9yKEg9TDtIPHg7SCsrKXt2YXIgVj1VW0gtMV07SCVMPT09MD8oVj1DLlNCT1hbKFY9Vjw8OHxWPj4+MjQpPj4+''@;'; put 'put ''MjRdPDwyNHxDLlNCT1hbVj4+PjE2JjI1NV08PDE2fEMuU0JPWFtWPj4+OCYyNTVdPDw4fEMuU0JPWFsyNTUmVl0sVl49dltIL0x8MF08PDI0KTpMPjYmJkglTD09PTQmJihWPUMuU0JPWFtWPj4+MjRdPDwyNHxDLlNCT1hbVj4+PjE2JjI1NV08PDE2fEMuU0JPWFtWPj4+OCYyNTVdPDw4fEMu''@;'; put 'put ''U0JPWFsyNTUmVl0pLFVbSF09VVtILUxdXlZ9Zm9yKHZhciBOPVtdLHo9MDt6PHg7eisrKXt2YXIgWT14LXosRj1VW1ktKHolND8wOjQpXTtOW3pdPXo8NHx8WTw9ND9GOkMuSU5WX1NVQl9NSVhbMF1bQy5TQk9YW0Y+Pj4yNF1dXkMuSU5WX1NVQl9NSVhbMV1bQy5TQk9YW0Y+Pj4xNiYyNTVd''@;'; put 'put ''XV5DLklOVl9TVUJfTUlYWzJdW0MuU0JPWFtGPj4+OCYyNTVdXV5DLklOVl9TVUJfTUlYWzNdW0MuU0JPWFsyNTUmRl1dfXRoaXMuX25Sb3VuZHM9Uix0aGlzLl9rZXlTY2hlZHVsZT1VLHRoaXMuX2ludktleVNjaGVkdWxlPU59LHcucHJvdG90eXBlLmVuY3J5cHRCbG9ja1Jhdz1mdW5jdGlv''@;'; put 'put ''bihTKXtyZXR1cm4gQShTPWMoUyksdGhpcy5fa2V5U2NoZWR1bGUsQy5TVUJfTUlYLEMuU0JPWCx0aGlzLl9uUm91bmRzKX0sdy5wcm90b3R5cGUuZW5jcnlwdEJsb2NrPWZ1bmN0aW9uKFMpe3ZhciBMPXRoaXMuZW5jcnlwdEJsb2NrUmF3KFMpLFI9eS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJu''@;'; put 'put ''IFIud3JpdGVVSW50MzJCRShMWzBdLDApLFIud3JpdGVVSW50MzJCRShMWzFdLDQpLFIud3JpdGVVSW50MzJCRShMWzJdLDgpLFIud3JpdGVVSW50MzJCRShMWzNdLDEyKSxSfSx3LnByb3RvdHlwZS5kZWNyeXB0QmxvY2s9ZnVuY3Rpb24oUyl7dmFyIEw9KFM9YyhTKSlbMV07U1sxXT1TWzNd''@;'; put 'put ''LFNbM109TDt2YXIgUj1BKFMsdGhpcy5faW52S2V5U2NoZWR1bGUsQy5JTlZfU1VCX01JWCxDLklOVl9TQk9YLHRoaXMuX25Sb3VuZHMpLHg9eS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIHgud3JpdGVVSW50MzJCRShSWzBdLDApLHgud3JpdGVVSW50MzJCRShSWzNdLDQpLHgud3JpdGVVSW50''@;'; put 'put ''MzJCRShSWzJdLDgpLHgud3JpdGVVSW50MzJCRShSWzFdLDEyKSx4fSx3LnByb3RvdHlwZS5zY3J1Yj1mdW5jdGlvbigpe3ModGhpcy5fa2V5U2NoZWR1bGUpLHModGhpcy5faW52S2V5U2NoZWR1bGUpLHModGhpcy5fa2V5KX0sZmUuZXhwb3J0cy5BRVM9d30sMTkzMDcoZmUsaixoKXt2YXIg''@;'; put 'put ''eT1oKDEyMzc1KSxjPWgoMjcwNTQpLkJ1ZmZlcixzPWgoMzI0NyksQT1oKDcxOTkzKSx2PWgoODU5MTcpLEM9aCgxMzU0Niksdz1oKDk1NzI1KTtmdW5jdGlvbiBSKHgsVSxILFYpe3MuY2FsbCh0aGlzKTt2YXIgTj1jLmFsbG9jKDQsMCk7dGhpcy5fY2lwaGVyPW5ldyB5LkFFUyhVKTt2YXIg''@;'; put 'put ''ej10aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKE4pO3RoaXMuX2doYXNoPW5ldyB2KHopLEg9ZnVuY3Rpb24gTCh4LFUsSCl7aWYoMTI9PT1VLmxlbmd0aClyZXR1cm4geC5fZmluSUQ9Yy5jb25jYXQoW1UsYy5mcm9tKFswLDAsMCwxXSldKSxjLmNvbmNhdChbVSxjLmZyb20oWzAsMCwwLDJd''@;'; put 'put ''KV0pO3ZhciBWPW5ldyB2KEgpLE49VS5sZW5ndGgsej1OJTE2O1YudXBkYXRlKFUpLHomJlYudXBkYXRlKGMuYWxsb2Moej0xNi16LDApKSxWLnVwZGF0ZShjLmFsbG9jKDgsMCkpO3ZhciBZPTgqTixGPWMuYWxsb2MoOCk7Ri53cml0ZVVJbnRCRShZLDAsOCksVi51cGRhdGUoRikseC5fZmlu''@;'; put 'put ''SUQ9Vi5zdGF0ZTt2YXIgVz1jLmZyb20oeC5fZmluSUQpO3JldHVybiB3KFcpLFd9KHRoaXMsSCx6KSx0aGlzLl9wcmV2PWMuZnJvbShIKSx0aGlzLl9jYWNoZT1jLmFsbG9jVW5zYWZlKDApLHRoaXMuX3NlY0NhY2hlPWMuYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD1WLHRoaXMuX2Fs''@;'; put 'put ''ZW49MCx0aGlzLl9sZW49MCx0aGlzLl9tb2RlPXgsdGhpcy5fYXV0aFRhZz1udWxsLHRoaXMuX2NhbGxlZD0hMX1BKFIscyksUi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih4KXtpZighdGhpcy5fY2FsbGVkJiZ0aGlzLl9hbGVuKXt2YXIgVT0xNi10aGlzLl9hbGVuJTE2O1U8MTYmJihV''@;'; put 'put ''PWMuYWxsb2MoVSwwKSx0aGlzLl9naGFzaC51cGRhdGUoVSkpfXRoaXMuX2NhbGxlZD0hMDt2YXIgSD10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyx4KTtyZXR1cm4gdGhpcy5fZ2hhc2gudXBkYXRlKHRoaXMuX2RlY3J5cHQ/eDpIKSx0aGlzLl9sZW4rPXgubGVuZ3RoLEh9LFIucHJvdG90eXBl''@;'; put 'put ''Ll9maW5hbD1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHQmJiF0aGlzLl9hdXRoVGFnKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhIik7dmFyIHg9Qyh0aGlzLl9naGFzaC5maW5hbCg4KnRoaXMuX2FsZW4sOCp0aGlz''@;'; put 'put ''Ll9sZW4pLHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKTtpZih0aGlzLl9kZWNyeXB0JiZmdW5jdGlvbiBTKHgsVSl7dmFyIEg9MDt4Lmxlbmd0aCE9PVUubGVuZ3RoJiZIKys7Zm9yKHZhciBWPU1hdGgubWluKHgubGVuZ3RoLFUubGVuZ3RoKSxOPTA7TjxWOysrTilI''@;'; put 'put ''Kz14W05dXlVbTl07cmV0dXJuIEh9KHgsdGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt0aGlzLl9hdXRoVGFnPXgsdGhpcy5fY2lwaGVyLnNjcnViKCl9LFIucHJvdG90eXBlLmdldEF1dGhU''@;'; put 'put ''YWc9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0fHwhYy5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7cmV0dXJuIHRoaXMuX2F1dGhUYWd9LFIucHJvdG90eXBlLnNldEF1''@;'; put 'put ''dGhUYWc9ZnVuY3Rpb24oVSl7aWYoIXRoaXMuX2RlY3J5cHQpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2F1dGhUYWc9VX0sUi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKFUpe2lmKHRoaXMuX2NhbGxl''@;'; put 'put ''ZCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IEFBRCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2doYXNoLnVwZGF0ZShVKSx0aGlzLl9hbGVuKz1VLmxlbmd0aH0sZmUuZXhwb3J0cz1SfSw0MzM4OChmZSxqLGgpe3ZhciB5PWgoMzUwKSxjPWgoNjAxMDIpLHM9aCgz''@;'; put 'put ''MjE5KTtqLmNyZWF0ZUNpcGhlcj1qLkNpcGhlcj15LmNyZWF0ZUNpcGhlcixqLmNyZWF0ZUNpcGhlcml2PWouQ2lwaGVyaXY9eS5jcmVhdGVDaXBoZXJpdixqLmNyZWF0ZURlY2lwaGVyPWouRGVjaXBoZXI9Yy5jcmVhdGVEZWNpcGhlcixqLmNyZWF0ZURlY2lwaGVyaXY9ai5EZWNpcGhlcml2''@;'; put 'put ''PWMuY3JlYXRlRGVjaXBoZXJpdixqLmxpc3RDaXBoZXJzPWouZ2V0Q2lwaGVycz1mdW5jdGlvbiBBKCl7cmV0dXJuIE9iamVjdC5rZXlzKHMpfX0sNjAxMDIoZmUsaixoKXt2YXIgeT1oKDE5MzA3KSxjPWgoMjcwNTQpLkJ1ZmZlcixzPWgoNjA1MDMpLEE9aCg5MTgyMSksdj1oKDMyNDcpLEM9''@;'; put 'put ''aCgxMjM3NSksdz1oKDE4MjExKTtmdW5jdGlvbiBMKFYsTix6KXt2LmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IFIsdGhpcy5fbGFzdD12b2lkIDAsdGhpcy5fY2lwaGVyPW5ldyBDLkFFUyhOKSx0aGlzLl9wcmV2PWMuZnJvbSh6KSx0aGlzLl9tb2RlPVYsdGhpcy5fYXV0b3BhZGRpbmc9''@;'; put 'put ''ITB9ZnVuY3Rpb24gUigpe3RoaXMuY2FjaGU9Yy5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBVKFYsTix6KXt2YXIgWT1zW1YudG9Mb3dlckNhc2UoKV07aWYoIVkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiB6JiYoej1jLmZy''@;'; put 'put ''b20oeikpLCJHQ00iIT09WS5tb2RlJiZ6Lmxlbmd0aCE9PVkuaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIit6Lmxlbmd0aCk7aWYoInN0cmluZyI9PXR5cGVvZiBOJiYoTj1jLmZyb20oTikpLE4ubGVuZ3RoIT09WS5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJpbnZhbGlkIGtleSBsZW5ndGggIitOLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT1ZLnR5cGU/bmV3IEEoWS5tb2R1bGUsTix6LCEwKToiYXV0aCI9PT1ZLnR5cGU/bmV3IHkoWS5tb2R1bGUsTix6LCEwKTpuZXcgTChZLm1vZHVsZSxOLHopfWgoNzE5OTMpKEwsdiksTC5wcm90b3R5cGUu''@;'; put 'put ''X3VwZGF0ZT1mdW5jdGlvbihWKXt0aGlzLl9jYWNoZS5hZGQoVik7Zm9yKHZhciBOLHosWT1bXTtOPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KXo9dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsTiksWS5wdXNoKHopO3JldHVybiBjLmNvbmNhdChZKX0sTC5wcm90b3R5cGUu''@;'; put 'put ''X2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFY9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gZnVuY3Rpb24geChWKXt2YXIgTj1WWzE1XTtpZihOPDF8fE4+MTYpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7Zm9yKHZhciB6PS0x''@;'; put 'put ''OysrejxOOylpZihWW3orKDE2LU4pXSE9PU4pdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7aWYoMTYhPT1OKXJldHVybiBWLnNsaWNlKDAsMTYtTil9KHRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLFYpKTtpZihWKXRocm93IG5ldyBFcnJvcigiZGF0YSBub3QgbXVs''@;'; put 'put ''dGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LEwucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKFYpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIVYsdGhpc30sUi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFYpe3RoaXMuY2FjaGU9Yy5jb25jYXQoW3RoaXMuY2FjaGUsVl0pfSxS''@;'; put 'put ''LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oVil7dmFyIE47aWYoVil7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTYpcmV0dXJuIE49dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLE59ZWxzZSBpZih0aGlzLmNhY2hlLmxlbmd0aD49MTYpcmV0dXJu''@;'; put 'put ''IE49dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLE47cmV0dXJuIG51bGx9LFIucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGV9LGouY3JlYXRlRGVjaXBoZXI9ZnVuY3Rp''@;'; put 'put ''b24gSChWLE4pe3ZhciB6PXNbVi50b0xvd2VyQ2FzZSgpXTtpZigheil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgWT13KE4sITEsei5rZXksei5pdik7cmV0dXJuIFUoVixZLmtleSxZLml2KX0sai5jcmVhdGVEZWNpcGhlcml2PVV9LDM1MChmZSxqLGgp''@;'; put 'put ''e3ZhciB5PWgoNjA1MDMpLGM9aCgxOTMwNykscz1oKDI3MDU0KS5CdWZmZXIsQT1oKDkxODIxKSx2PWgoMzI0NyksQz1oKDEyMzc1KSx3PWgoMTgyMTEpO2Z1bmN0aW9uIEwoVixOLHope3YuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgeCx0aGlzLl9jaXBoZXI9bmV3IEMuQUVTKE4pLHRo''@;'; put 'put ''aXMuX3ByZXY9cy5mcm9tKHopLHRoaXMuX21vZGU9Vix0aGlzLl9hdXRvcGFkZGluZz0hMH1oKDcxOTkzKShMLHYpLEwucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVil7dGhpcy5fY2FjaGUuYWRkKFYpO2Zvcih2YXIgTix6LFk9W107Tj10aGlzLl9jYWNoZS5nZXQoKTspej10aGlzLl9t''@;'; put 'put ''b2RlLmVuY3J5cHQodGhpcyxOKSxZLnB1c2goeik7cmV0dXJuIHMuY29uY2F0KFkpfTt2YXIgUj1zLmFsbG9jKDE2LDE2KTtmdW5jdGlvbiB4KCl7dGhpcy5jYWNoZT1zLmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIFUoVixOLHope3ZhciBZPXlbVi50b0xvd2VyQ2FzZSgpXTtpZighWSl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlwZW9mIE4mJihOPXMuZnJvbShOKSksTi5sZW5ndGghPT1ZLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQga2V5IGxlbmd0aCAiK04ubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IHomJih6PXMuZnJvbSh6KSksIkdDTSIhPT1ZLm1vZGUmJnoubGVuZ3RoIT09WS5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK3oubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PVkudHlwZT9uZXcgQShZLm1vZHVsZSxOLHopOiJhdXRoIj09PVkudHlwZT9uZXcg''@;'; put 'put ''YyhZLm1vZHVsZSxOLHopOm5ldyBMKFkubW9kdWxlLE4seil9TC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFY9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gVj10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxWKSx0aGlzLl9jaXBoZXIuc2Ny''@;'; put 'put ''dWIoKSxWO2lmKCFWLmVxdWFscyhSKSl0aHJvdyB0aGlzLl9jaXBoZXIuc2NydWIoKSxuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSxMLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihWKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFW''@;'; put 'put ''LHRoaXN9LHgucHJvdG90eXBlLmFkZD1mdW5jdGlvbihWKXt0aGlzLmNhY2hlPXMuY29uY2F0KFt0aGlzLmNhY2hlLFZdKX0seC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTUpe3ZhciBWPXRoaXMuY2FjaGUuc2xpY2UoMCwxNik7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksVn1yZXR1cm4gbnVsbH0seC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIFY9MTYtdGhpcy5jYWNoZS5sZW5ndGgsTj1zLmFsbG9jVW5zYWZlKFYpLHo9LTE7Kyt6PFY7KU4ud3JpdGVVSW50OChWLHopO3JldHVybiBzLmNvbmNh''@;'; put 'put ''dChbdGhpcy5jYWNoZSxOXSl9LGouY3JlYXRlQ2lwaGVyaXY9VSxqLmNyZWF0ZUNpcGhlcj1mdW5jdGlvbiBIKFYsTil7dmFyIHo9eVtWLnRvTG93ZXJDYXNlKCldO2lmKCF6KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO3ZhciBZPXcoTiwhMSx6LmtleSx6Lml2''@;'; put 'put ''KTtyZXR1cm4gVShWLFkua2V5LFkuaXYpfX0sODU5MTcoZmUsaixoKXt2YXIgeT1oKDI3MDU0KS5CdWZmZXIsYz15LmFsbG9jKDE2LDApO2Z1bmN0aW9uIEEoQyl7dmFyIHc9eS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIHcud3JpdGVVSW50MzJCRShDWzBdPj4+MCwwKSx3LndyaXRlVUludDMy''@;'; put 'put ''QkUoQ1sxXT4+PjAsNCksdy53cml0ZVVJbnQzMkJFKENbMl0+Pj4wLDgpLHcud3JpdGVVSW50MzJCRShDWzNdPj4+MCwxMiksd31mdW5jdGlvbiB2KEMpe3RoaXMuaD1DLHRoaXMuc3RhdGU9eS5hbGxvYygxNiwwKSx0aGlzLmNhY2hlPXkuYWxsb2NVbnNhZmUoMCl9di5wcm90b3R5cGUuZ2hh''@;'; put 'put ''c2g9ZnVuY3Rpb24oQyl7Zm9yKHZhciB3PS0xOysrdzxDLmxlbmd0aDspdGhpcy5zdGF0ZVt3XV49Q1t3XTt0aGlzLl9tdWx0aXBseSgpfSx2LnByb3RvdHlwZS5fbXVsdGlwbHk9ZnVuY3Rpb24oKXtmb3IodmFyIFMsUixDPWZ1bmN0aW9uIHMoQyl7cmV0dXJuW0MucmVhZFVJbnQzMkJFKDAp''@;'; put 'put ''LEMucmVhZFVJbnQzMkJFKDQpLEMucmVhZFVJbnQzMkJFKDgpLEMucmVhZFVJbnQzMkJFKDEyKV19KHRoaXMuaCksdz1bMCwwLDAsMF0seD0tMTsrK3g8MTI4Oyl7Zm9yKCEhKHRoaXMuc3RhdGVbfn4oeC84KV0mMTw8Ny14JTgpJiYod1swXV49Q1swXSx3WzFdXj1DWzFdLHdbMl1ePUNbMl0s''@;'; put 'put ''d1szXV49Q1szXSksUj0hISgxJkNbM10pLFM9MztTPjA7Uy0tKUNbU109Q1tTXT4+PjF8KDEmQ1tTLTFdKTw8MzE7Q1swXT1DWzBdPj4+MSxSJiYoQ1swXT1DWzBdXjIyNTw8MjQpfXRoaXMuc3RhdGU9QSh3KX0sdi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEMpe3RoaXMuY2FjaGU9eS5j''@;'; put 'put ''b25jYXQoW3RoaXMuY2FjaGUsQ10pO2Zvcih2YXIgdzt0aGlzLmNhY2hlLmxlbmd0aD49MTY7KXc9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHRoaXMuZ2hhc2godyl9LHYucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKEMsdyl7cmV0dXJu''@;'; put 'put ''IHRoaXMuY2FjaGUubGVuZ3RoJiZ0aGlzLmdoYXNoKHkuY29uY2F0KFt0aGlzLmNhY2hlLGNdLDE2KSksdGhpcy5naGFzaChBKFswLEMsMCx3XSkpLHRoaXMuc3RhdGV9LGZlLmV4cG9ydHM9dn0sOTU3MjUoZmUpe2ZlLmV4cG9ydHM9ZnVuY3Rpb24gaihoKXtmb3IodmFyIGMseT1oLmxlbmd0''@;'; put 'put ''aDt5LS07KXtpZigyNTUhPT0oYz1oLnJlYWRVSW50OCh5KSkpe2MrKyxoLndyaXRlVUludDgoYyx5KTticmVha31oLndyaXRlVUludDgoMCx5KX19fSwzNDEzMyhmZSxqLGgpe3ZhciB5PWgoMTM1NDYpO2ouZW5jcnlwdD1mdW5jdGlvbihjLHMpe3ZhciBBPXkocyxjLl9wcmV2KTtyZXR1cm4g''@;'; put 'put ''Yy5fcHJldj1jLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEEpLGMuX3ByZXZ9LGouZGVjcnlwdD1mdW5jdGlvbihjLHMpe3ZhciBBPWMuX3ByZXY7Yy5fcHJldj1zO3ZhciB2PWMuX2NpcGhlci5kZWNyeXB0QmxvY2socyk7cmV0dXJuIHkodixBKX19LDE3MDkwKGZlLGosaCl7dmFyIHk9aCgyNzA1''@;'; put 'put ''NCkuQnVmZmVyLGM9aCgxMzU0Nik7ZnVuY3Rpb24gcyhBLHYsQyl7dmFyIHc9di5sZW5ndGgsUz1jKHYsQS5fY2FjaGUpO3JldHVybiBBLl9jYWNoZT1BLl9jYWNoZS5zbGljZSh3KSxBLl9wcmV2PXkuY29uY2F0KFtBLl9wcmV2LEM/djpTXSksU31qLmVuY3J5cHQ9ZnVuY3Rpb24oQSx2LEMp''@;'; put 'put ''e2Zvcih2YXIgUyx3PXkuYWxsb2NVbnNhZmUoMCk7di5sZW5ndGg7KXtpZigwPT09QS5fY2FjaGUubGVuZ3RoJiYoQS5fY2FjaGU9QS5fY2lwaGVyLmVuY3J5cHRCbG9jayhBLl9wcmV2KSxBLl9wcmV2PXkuYWxsb2NVbnNhZmUoMCkpLCEoQS5fY2FjaGUubGVuZ3RoPD12Lmxlbmd0aCkpe3c9''@;'; put 'put ''eS5jb25jYXQoW3cscyhBLHYsQyldKTticmVha313PXkuY29uY2F0KFt3LHMoQSx2LnNsaWNlKDAsUz1BLl9jYWNoZS5sZW5ndGgpLEMpXSksdj12LnNsaWNlKFMpfXJldHVybiB3fX0sNzEwMzkoZmUsaixoKXt2YXIgeT1oKDI3MDU0KS5CdWZmZXI7ZnVuY3Rpb24gYyhBLHYsQyl7Zm9yKHZh''@;'; put 'put ''ciB4LFUsUz0tMSxSPTA7KytTPDg7KVIrPSgxMjgmKFU9QS5fY2lwaGVyLmVuY3J5cHRCbG9jayhBLl9wcmV2KVswXV4oeD12JjE8PDctUz8xMjg6MCkpKT4+UyU4LEEuX3ByZXY9cyhBLl9wcmV2LEM/eDpVKTtyZXR1cm4gUn1mdW5jdGlvbiBzKEEsdil7dmFyIEM9QS5sZW5ndGgsdz0tMSxT''@;'; put 'put ''PXkuYWxsb2NVbnNhZmUoQS5sZW5ndGgpO2ZvcihBPXkuY29uY2F0KFtBLHkuZnJvbShbdl0pXSk7Kyt3PEM7KVNbd109QVt3XTw8MXxBW3crMV0+Pjc7cmV0dXJuIFN9ai5lbmNyeXB0PWZ1bmN0aW9uKEEsdixDKXtmb3IodmFyIHc9di5sZW5ndGgsUz15LmFsbG9jVW5zYWZlKHcpLEw9LTE7''@;'; put 'put ''KytMPHc7KVNbTF09YyhBLHZbTF0sQyk7cmV0dXJuIFN9fSw3MjU3NihmZSxqLGgpe3ZhciB5PWgoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBjKHMsQSx2KXt2YXIgdz1zLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHMuX3ByZXYpWzBdXkE7cmV0dXJuIHMuX3ByZXY9eS5jb25jYXQoW3MuX3ByZXYu''@;'; put 'put ''c2xpY2UoMSkseS5mcm9tKFt2P0E6d10pXSksd31qLmVuY3J5cHQ9ZnVuY3Rpb24ocyxBLHYpe2Zvcih2YXIgQz1BLmxlbmd0aCx3PXkuYWxsb2NVbnNhZmUoQyksUz0tMTsrK1M8Qzspd1tTXT1jKHMsQVtTXSx2KTtyZXR1cm4gd319LDcwMzM2KGZlLGosaCl7dmFyIHk9aCgxMzU0NiksYz1o''@;'; put 'put ''KDI3MDU0KS5CdWZmZXIscz1oKDk1NzI1KTtmdW5jdGlvbiBBKEMpe3ZhciB3PUMuX2NpcGhlci5lbmNyeXB0QmxvY2tSYXcoQy5fcHJldik7cmV0dXJuIHMoQy5fcHJldiksd31qLmVuY3J5cHQ9ZnVuY3Rpb24oQyx3KXt2YXIgUz1NYXRoLmNlaWwody5sZW5ndGgvMTYpLEw9Qy5fY2FjaGUu''@;'; put 'put ''bGVuZ3RoO0MuX2NhY2hlPWMuY29uY2F0KFtDLl9jYWNoZSxjLmFsbG9jVW5zYWZlKDE2KlMpXSk7Zm9yKHZhciBSPTA7UjxTO1IrKyl7dmFyIHg9QShDKSxVPUwrMTYqUjtDLl9jYWNoZS53cml0ZVVJbnQzMkJFKHhbMF0sVSswKSxDLl9jYWNoZS53cml0ZVVJbnQzMkJFKHhbMV0sVSs0KSxD''@;'; put 'put ''Ll9jYWNoZS53cml0ZVVJbnQzMkJFKHhbMl0sVSs4KSxDLl9jYWNoZS53cml0ZVVJbnQzMkJFKHhbM10sVSsxMil9dmFyIEg9Qy5fY2FjaGUuc2xpY2UoMCx3Lmxlbmd0aCk7cmV0dXJuIEMuX2NhY2hlPUMuX2NhY2hlLnNsaWNlKHcubGVuZ3RoKSx5KHcsSCl9fSwzNzUxMyhmZSxqKXtqLmVu''@;'; put 'put ''Y3J5cHQ9ZnVuY3Rpb24oaCx5KXtyZXR1cm4gaC5fY2lwaGVyLmVuY3J5cHRCbG9jayh5KX0sai5kZWNyeXB0PWZ1bmN0aW9uKGgseSl7cmV0dXJuIGguX2NpcGhlci5kZWNyeXB0QmxvY2soeSl9fSw2MDUwMyhmZSxqLGgpe3ZhciB5PXtFQ0I6aCgzNzUxMyksQ0JDOmgoMzQxMzMpLENGQjpo''@;'; put 'put ''KDE3MDkwKSxDRkI4OmgoNzI1NzYpLENGQjE6aCg3MTAzOSksT0ZCOmgoNDY4NTQpLENUUjpoKDcwMzM2KSxHQ006aCg3MDMzNil9LGM9aCgzMjE5KTtmb3IodmFyIHMgaW4gYyljW3NdLm1vZHVsZT15W2Nbc10ubW9kZV07ZmUuZXhwb3J0cz1jfSw0Njg1NChmZSxqLGgpe3ZhciB5PWgoMTM1''@;'; put 'put ''NDYpO2Z1bmN0aW9uIGMocyl7cmV0dXJuIHMuX3ByZXY9cy5fY2lwaGVyLmVuY3J5cHRCbG9jayhzLl9wcmV2KSxzLl9wcmV2fWouZW5jcnlwdD1mdW5jdGlvbihzLEEpe2Zvcig7cy5fY2FjaGUubGVuZ3RoPEEubGVuZ3RoOylzLl9jYWNoZT1CdWZmZXIuY29uY2F0KFtzLl9jYWNoZSxjKHMp''@;'; put 'put ''XSk7dmFyIHY9cy5fY2FjaGUuc2xpY2UoMCxBLmxlbmd0aCk7cmV0dXJuIHMuX2NhY2hlPXMuX2NhY2hlLnNsaWNlKEEubGVuZ3RoKSx5KEEsdil9fSw5MTgyMShmZSxqLGgpe3ZhciB5PWgoMTIzNzUpLGM9aCgyNzA1NCkuQnVmZmVyLHM9aCgzMjQ3KTtmdW5jdGlvbiB2KEMsdyxTLEwpe3Mu''@;'; put 'put ''Y2FsbCh0aGlzKSx0aGlzLl9jaXBoZXI9bmV3IHkuQUVTKHcpLHRoaXMuX3ByZXY9Yy5mcm9tKFMpLHRoaXMuX2NhY2hlPWMuYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9Yy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PUwsdGhpcy5fbW9kZT1DfWgoNzE5OTMpKHYscyksdi5w''@;'; put 'put ''cm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsQyx0aGlzLl9kZWNyeXB0KX0sdi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dGhpcy5fY2lwaGVyLnNjcnViKCl9LGZlLmV4cG9ydHM9dn0sODg4NjIoZmUsaixoKXt2YXIgYz1o''@;'; put 'put ''KDM5Nzk5KSxzPWgoNDMzODgpLEE9aCg2MDUwMyksdj1oKDU5NTcxKTtoKDE4MjExKTtqLlR0PWZ1bmN0aW9uIEwoVSxILFYpe2lmKFU9VS50b0xvd2VyQ2FzZSgpLEFbVV0pcmV0dXJuIHMuY3JlYXRlQ2lwaGVyaXYoVSxILFYpO2lmKHZbVV0pcmV0dXJuIG5ldyBjKHtrZXk6SCxpdjpWLG1v''@;'; put 'put ''ZGU6VX0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfSxqLl83PWZ1bmN0aW9uIFIoVSxILFYpe2lmKFU9VS50b0xvd2VyQ2FzZSgpLEFbVV0pcmV0dXJuIHMuY3JlYXRlRGVjaXBoZXJpdihVLEgsVik7aWYodltVXSlyZXR1cm4gbmV3IGMoe2tleTpILGl2OlYs''@;'; put 'put ''bW9kZTpVLGRlY3J5cHQ6ITB9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX19LDM5Nzk5KGZlLGosaCl7dmFyIHk9aCgzMjQ3KSxjPWgoNzE1NDkpLHM9aCg3MTk5MyksQT1oKDI3MDU0KS5CdWZmZXIsdj17ImRlcy1lZGUzLWNiYyI6Yy5DQkMuaW5zdGFudGlh''@;'; put 'put ''dGUoYy5FREUpLCJkZXMtZWRlMyI6Yy5FREUsImRlcy1lZGUtY2JjIjpjLkNCQy5pbnN0YW50aWF0ZShjLkVERSksImRlcy1lZGUiOmMuRURFLCJkZXMtY2JjIjpjLkNCQy5pbnN0YW50aWF0ZShjLkRFUyksImRlcy1lY2IiOmMuREVTfTtmdW5jdGlvbiBDKHcpe3kuY2FsbCh0aGlzKTt2YXIg''@;'; put 'put ''UixTPXcubW9kZS50b0xvd2VyQ2FzZSgpLEw9dltTXTtSPXcuZGVjcnlwdD8iZGVjcnlwdCI6ImVuY3J5cHQiO3ZhciB4PXcua2V5O0EuaXNCdWZmZXIoeCl8fCh4PUEuZnJvbSh4KSksKCJkZXMtZWRlIj09PVN8fCJkZXMtZWRlLWNiYyI9PT1TKSYmKHg9QS5jb25jYXQoW3gseC5zbGljZSgw''@;'; put 'put ''LDgpXSkpO3ZhciBVPXcuaXY7QS5pc0J1ZmZlcihVKXx8KFU9QS5mcm9tKFUpKSx0aGlzLl9kZXM9TC5jcmVhdGUoe2tleTp4LGl2OlUsdHlwZTpSfSl9di5kZXM9dlsiZGVzLWNiYyJdLHYuZGVzMz12WyJkZXMtZWRlMy1jYmMiXSxmZS5leHBvcnRzPUMscyhDLHkpLEMucHJvdG90eXBlLl91''@;'; put 'put ''cGRhdGU9ZnVuY3Rpb24odyl7cmV0dXJuIEEuZnJvbSh0aGlzLl9kZXMudXBkYXRlKHcpKX0sQy5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIEEuZnJvbSh0aGlzLl9kZXMuZmluYWwoKSl9fSw1OTU3MShmZSxqKXtqWyJkZXMtZWNiIl09e2tleTo4LGl2OjB9LGpbImRlcy1j''@;'; put 'put ''YmMiXT1qLmRlcz17a2V5OjgsaXY6OH0salsiZGVzLWVkZTMtY2JjIl09ai5kZXMzPXtrZXk6MjQsaXY6OH0salsiZGVzLWVkZTMiXT17a2V5OjI0LGl2OjB9LGpbImRlcy1lZGUtY2JjIl09e2tleToxNixpdjo4fSxqWyJkZXMtZWRlIl09e2tleToxNixpdjowfX0sMTM1NDYoZmUpe2ZlLmV4''@;'; put 'put ''cG9ydHM9ZnVuY3Rpb24oaCx5KXtmb3IodmFyIGM9TWF0aC5taW4oaC5sZW5ndGgseS5sZW5ndGgpLHM9bmV3IEJ1ZmZlcihjKSxBPTA7QTxjOysrQSlzW0FdPWhbQV1eeVtBXTtyZXR1cm4gc319LDgzODM4KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoMTM5ODEpLGM9aCgyMjAyMCks''@;'; put 'put ''cz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj9TeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpOm51bGw7ai5CdWZmZXI9dyxqLlNsb3dCdWZmZXI9ZnVuY3Rpb24gRihnZSl7cmV0dXJuK2dlIT1nZSYmKGdlPTAp''@;'; put 'put ''LHcuYWxsb2MoK2dlKX0sai5JTlNQRUNUX01BWF9CWVRFUz01MDt2YXIgQT0yMTQ3NDgzNjQ3O2Z1bmN0aW9uIEMoZ2Upe2lmKGdlPkEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytnZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyk7dmFyIGNlPW5ldyBVaW50''@;'; put 'put ''OEFycmF5KGdlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKGNlLHcucHJvdG90eXBlKSxjZX1mdW5jdGlvbiB3KGdlLGNlLGhlKXtpZigibnVtYmVyIj09dHlwZW9mIGdlKXtpZigic3RyaW5nIj09dHlwZW9mIGNlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1''@;'; put 'put ''bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3JldHVybiB4KGdlKX1yZXR1cm4gUyhnZSxjZSxoZSl9ZnVuY3Rpb24gUyhnZSxjZSxoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBnZSlyZXR1cm4gZnVuY3Rpb24gVShnZSxjZSl7aWYoKCJzdHJpbmci''@;'; put 'put ''IT10eXBlb2YgY2V8fCIiPT09Y2UpJiYoY2U9InV0ZjgiKSwhdy5pc0VuY29kaW5nKGNlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2NlKTt2YXIgaGU9MHxXKGdlLGNlKSx3ZT1DKGhlKSxKZT13ZS53cml0ZShnZSxjZSk7cmV0dXJuIEplIT09aGUmJih3ZT13''@;'; put 'put ''ZS5zbGljZSgwLEplKSksd2V9KGdlLGNlKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoZ2UpKXJldHVybiBmdW5jdGlvbiBWKGdlKXtpZihBZShnZSxVaW50OEFycmF5KSl7dmFyIGNlPW5ldyBVaW50OEFycmF5KGdlKTtyZXR1cm4gTihjZS5idWZmZXIsY2UuYnl0ZU9mZnNldCxjZS5ieXRlTGVu''@;'; put 'put ''Z3RoKX1yZXR1cm4gSChnZSl9KGdlKTtpZihudWxsPT1nZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlw''@;'; put 'put ''ZSAiK3R5cGVvZiBnZSk7aWYoQWUoZ2UsQXJyYXlCdWZmZXIpfHxnZSYmQWUoZ2UuYnVmZmVyLEFycmF5QnVmZmVyKXx8dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1IiYmKEFlKGdlLFNoYXJlZEFycmF5QnVmZmVyKXx8Z2UmJkFlKGdlLmJ1ZmZlcixTaGFyZWRBcnJheUJ1ZmZlcikpKXJl''@;'; put 'put ''dHVybiBOKGdlLGNlLGhlKTtpZigibnVtYmVyIj09dHlwZW9mIGdlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3ZhciB3ZT1nZS52YWx1ZU9mJiZnZS52YWx1ZU9mKCk7''@;'; put 'put ''aWYobnVsbCE9d2UmJndlIT09Z2UpcmV0dXJuIHcuZnJvbSh3ZSxjZSxoZSk7dmFyIEplPWZ1bmN0aW9uIHooZ2Upe2lmKHcuaXNCdWZmZXIoZ2UpKXt2YXIgY2U9MHxZKGdlLmxlbmd0aCksaGU9QyhjZSk7cmV0dXJuIDA9PT1oZS5sZW5ndGh8fGdlLmNvcHkoaGUsMCwwLGNlKSxoZX1yZXR1''@;'; put 'put ''cm4gdm9pZCAwIT09Z2UubGVuZ3RoPyJudW1iZXIiIT10eXBlb2YgZ2UubGVuZ3RofHxEZShnZS5sZW5ndGgpP0MoMCk6SChnZSk6IkJ1ZmZlciI9PT1nZS50eXBlJiZBcnJheS5pc0FycmF5KGdlLmRhdGEpP0goZ2UuZGF0YSk6dm9pZCAwfShnZSk7aWYoSmUpcmV0dXJuIEplO2lmKHR5cGVv''@;'; put 'put ''ZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBnZVtTeW1ib2wudG9QcmltaXRpdmVdKXJldHVybiB3LmZyb20oZ2VbU3ltYm9sLnRvUHJpbWl0aXZlXSgic3RyaW5nIiksY2UsaGUpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJz''@;'; put 'put ''dCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIGdlKX1mdW5jdGlvbiBMKGdlKXtpZigibnVtYmVyIiE9dHlwZW9mIGdlKXRocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJyk7aWYoZ2U8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK2dlKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1mdW5jdGlvbiB4KGdlKXtyZXR1cm4gTChnZSksQyhnZTww''@;'; put 'put ''PzA6MHxZKGdlKSl9ZnVuY3Rpb24gSChnZSl7Zm9yKHZhciBjZT1nZS5sZW5ndGg8MD8wOjB8WShnZS5sZW5ndGgpLGhlPUMoY2UpLHdlPTA7d2U8Y2U7d2UrPTEpaGVbd2VdPTI1NSZnZVt3ZV07cmV0dXJuIGhlfWZ1bmN0aW9uIE4oZ2UsY2UsaGUpe2lmKGNlPDB8fGdlLmJ5dGVMZW5ndGg8''@;'; put 'put ''Y2UpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJvZmZzZXQiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2lmKGdlLmJ5dGVMZW5ndGg8Y2UrKGhlfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignImxlbmd0aCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7dmFyIHdlO3JldHVy''@;'; put 'put ''biB3ZT12b2lkIDA9PT1jZSYmdm9pZCAwPT09aGU/bmV3IFVpbnQ4QXJyYXkoZ2UpOnZvaWQgMD09PWhlP25ldyBVaW50OEFycmF5KGdlLGNlKTpuZXcgVWludDhBcnJheShnZSxjZSxoZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKHdlLHcucHJvdG90eXBlKSx3ZX1mdW5jdGlvbiBZKGdlKXtp''@;'; put 'put ''ZihnZT49QSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrQS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGdlfWZ1bmN0aW9uIFcoZ2UsY2Upe2lmKHcuaXNCdWZmZXIoZ2UpKXJldHVy''@;'; put 'put ''biBnZS5sZW5ndGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KGdlKXx8QWUoZ2UsQXJyYXlCdWZmZXIpKXJldHVybiBnZS5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgZ2UpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUg''@;'; put 'put ''c3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGdlKTt2YXIgaGU9Z2UubGVuZ3RoLHdlPWFyZ3VtZW50cy5sZW5ndGg+MiYmITA9PT1hcmd1bWVudHNbMl07aWYoIXdlJiYwPT09aGUpcmV0dXJuIDA7Zm9yKHZhciBKZT0hMTs7KXN3aXRjaChj''@;'; put 'put ''ZSl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gaGU7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gZHQoZ2UpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqaGU7Y2FzZSJo''@;'; put 'put ''ZXgiOnJldHVybiBoZT4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiB4ZShnZSkubGVuZ3RoO2RlZmF1bHQ6aWYoSmUpcmV0dXJuIHdlPy0xOmR0KGdlKS5sZW5ndGg7Y2U9KCIiK2NlKS50b0xvd2VyQ2FzZSgpLEplPSEwfX1mdW5jdGlvbiBxKGdlLGNlLGhlKXt2YXIgd2U9ITE7aWYoKHZvaWQg''@;'; put 'put ''MD09PWNlfHxjZTwwKSYmKGNlPTApLGNlPnRoaXMubGVuZ3RofHwoKHZvaWQgMD09PWhlfHxoZT50aGlzLmxlbmd0aCkmJihoZT10aGlzLmxlbmd0aCksaGU8PTApfHwoaGU+Pj49MCk8PShjZT4+Pj0wKSlyZXR1cm4iIjtmb3IoZ2V8fChnZT0idXRmOCIpOzspc3dpdGNoKGdlKXtjYXNlImhl''@;'; put 'put ''eCI6cmV0dXJuIEQodGhpcyxjZSxoZSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gayh0aGlzLGNlLGhlKTtjYXNlImFzY2lpIjpyZXR1cm4gSyh0aGlzLGNlLGhlKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBHKHRoaXMsY2UsaGUpO2Nhc2UiYmFzZTY0IjpyZXR1''@;'; put 'put ''cm4gYih0aGlzLGNlLGhlKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHAodGhpcyxjZSxoZSk7ZGVmYXVsdDppZih3ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2dlKTtnZT0oZ2UrIiIpLnRvTG93''@;'; put 'put ''ZXJDYXNlKCksd2U9ITB9fWZ1bmN0aW9uIHJlKGdlLGNlLGhlKXt2YXIgd2U9Z2VbY2VdO2dlW2NlXT1nZVtoZV0sZ2VbaGVdPXdlfWZ1bmN0aW9uIG1lKGdlLGNlLGhlLHdlLEplKXtpZigwPT09Z2UubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2YgaGU/KHdlPWhlLGhlPTAp''@;'; put 'put ''OmhlPjIxNDc0ODM2NDc/aGU9MjE0NzQ4MzY0NzpoZTwtMjE0NzQ4MzY0OCYmKGhlPS0yMTQ3NDgzNjQ4KSxEZShoZT0raGUpJiYoaGU9SmU/MDpnZS5sZW5ndGgtMSksaGU8MCYmKGhlPWdlLmxlbmd0aCtoZSksaGU+PWdlLmxlbmd0aCl7aWYoSmUpcmV0dXJuLTE7aGU9Z2UubGVuZ3RoLTF9''@;'; put 'put ''ZWxzZSBpZihoZTwwKXtpZighSmUpcmV0dXJuLTE7aGU9MH1pZigic3RyaW5nIj09dHlwZW9mIGNlJiYoY2U9dy5mcm9tKGNlLHdlKSksdy5pc0J1ZmZlcihjZSkpcmV0dXJuIDA9PT1jZS5sZW5ndGg/LTE6Q2UoZ2UsY2UsaGUsd2UsSmUpO2lmKCJudW1iZXIiPT10eXBlb2YgY2UpcmV0dXJu''@;'; put 'put ''IGNlJj0yNTUsImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/SmU/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGdlLGNlLGhlKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGdlLGNlLGhlKTpDZShnZSxbY2VdLGhl''@;'; put 'put ''LHdlLEplKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBDZShnZSxjZSxoZSx3ZSxKZSl7dmFyIEx0LHR0PTEsS2U9Z2UubGVuZ3RoLCR0PWNlLmxlbmd0aDtpZih2b2lkIDAhPT13ZSYmKCJ1Y3MyIj09PSh3ZT1T''@;'; put 'put ''dHJpbmcod2UpLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09d2V8fCJ1dGYxNmxlIj09PXdlfHwidXRmLTE2bGUiPT09d2UpKXtpZihnZS5sZW5ndGg8Mnx8Y2UubGVuZ3RoPDIpcmV0dXJuLTE7dHQ9MixLZS89MiwkdC89MixoZS89Mn1mdW5jdGlvbiBSdChMcixsbil7cmV0dXJuIDE9PT10''@;'; put 'put ''dD9Mcltsbl06THIucmVhZFVJbnQxNkJFKGxuKnR0KX1pZihKZSl7dmFyIEd0PS0xO2ZvcihMdD1oZTtMdDxLZTtMdCsrKWlmKFJ0KGdlLEx0KT09PVJ0KGNlLC0xPT09R3Q/MDpMdC1HdCkpe2lmKC0xPT09R3QmJihHdD1MdCksTHQtR3QrMT09PSR0KXJldHVybiBHdCp0dH1lbHNlLTEhPT1H''@;'; put 'put ''dCYmKEx0LT1MdC1HdCksR3Q9LTF9ZWxzZSBmb3IoaGUrJHQ+S2UmJihoZT1LZS0kdCksTHQ9aGU7THQ+PTA7THQtLSl7Zm9yKHZhciBndD0hMCxYdD0wO1h0PCR0O1h0KyspaWYoUnQoZ2UsTHQrWHQpIT09UnQoY2UsWHQpKXtndD0hMTticmVha31pZihndClyZXR1cm4gTHR9cmV0dXJuLTF9''@;'; put 'put ''ZnVuY3Rpb24gSWUoZ2UsY2UsaGUsd2Upe2hlPU51bWJlcihoZSl8fDA7dmFyIEplPWdlLmxlbmd0aC1oZTt3ZT8od2U9TnVtYmVyKHdlKSk+SmUmJih3ZT1KZSk6d2U9SmU7dmFyIHR0PWNlLmxlbmd0aDt3ZT50dC8yJiYod2U9dHQvMik7Zm9yKHZhciBLZT0wO0tlPHdlOysrS2Upe3ZhciAk''@;'; put 'put ''dD1wYXJzZUludChjZS5zdWJzdHIoMipLZSwyKSwxNik7aWYoRGUoJHQpKXJldHVybiBLZTtnZVtoZStLZV09JHR9cmV0dXJuIEtlfWZ1bmN0aW9uIGtlKGdlLGNlLGhlLHdlKXtyZXR1cm4gamUoZHQoY2UsZ2UubGVuZ3RoLWhlKSxnZSxoZSx3ZSl9ZnVuY3Rpb24gcWUoZ2UsY2UsaGUsd2Up''@;'; put 'put ''e3JldHVybiBqZShmdW5jdGlvbiBSZShnZSl7Zm9yKHZhciBjZT1bXSxoZT0wO2hlPGdlLmxlbmd0aDsrK2hlKWNlLnB1c2goMjU1JmdlLmNoYXJDb2RlQXQoaGUpKTtyZXR1cm4gY2V9KGNlKSxnZSxoZSx3ZSl9ZnVuY3Rpb24gWChnZSxjZSxoZSx3ZSl7cmV0dXJuIGplKHhlKGNlKSxnZSxo''@;'; put 'put ''ZSx3ZSl9ZnVuY3Rpb24gZihnZSxjZSxoZSx3ZSl7cmV0dXJuIGplKGZ1bmN0aW9uIGFlKGdlLGNlKXtmb3IodmFyIGhlLHdlLHR0PVtdLEtlPTA7S2U8Z2UubGVuZ3RoJiYhKChjZS09Mik8MCk7KytLZSl3ZT0oaGU9Z2UuY2hhckNvZGVBdChLZSkpPj44LHR0LnB1c2goaGUlMjU2KSx0dC5w''@;'; put 'put ''dXNoKHdlKTtyZXR1cm4gdHR9KGNlLGdlLmxlbmd0aC1oZSksZ2UsaGUsd2UpfWZ1bmN0aW9uIGIoZ2UsY2UsaGUpe3JldHVybiB5LmZyb21CeXRlQXJyYXkoMD09PWNlJiZoZT09PWdlLmxlbmd0aD9nZTpnZS5zbGljZShjZSxoZSkpfWZ1bmN0aW9uIGsoZ2UsY2UsaGUpe2hlPU1hdGgubWlu''@;'; put 'put ''KGdlLmxlbmd0aCxoZSk7Zm9yKHZhciB3ZT1bXSxKZT1jZTtKZTxoZTspe3ZhciBSdCxMdCxHdCxndCx0dD1nZVtKZV0sS2U9bnVsbCwkdD10dD4yMzk/NDp0dD4yMjM/Mzp0dD4xOTE/MjoxO2lmKEplKyR0PD1oZSlzd2l0Y2goJHQpe2Nhc2UgMTp0dDwxMjgmJihLZT10dCk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSAyOjEyOD09KDE5MiYoUnQ9Z2VbSmUrMV0pKSYmKGd0PSgzMSZ0dCk8PDZ8NjMmUnQpPjEyNyYmKEtlPWd0KTticmVhaztjYXNlIDM6THQ9Z2VbSmUrMl0sMTI4PT0oMTkyJihSdD1nZVtKZSsxXSkpJiYxMjg9PSgxOTImTHQpJiYoZ3Q9KDE1JnR0KTw8MTJ8KDYzJlJ0KTw8Nnw2MyZMdCk+''@;'; put 'put ''MjA0NyYmKGd0PDU1Mjk2fHxndD41NzM0MykmJihLZT1ndCk7YnJlYWs7Y2FzZSA0Okx0PWdlW0plKzJdLEd0PWdlW0plKzNdLDEyOD09KDE5MiYoUnQ9Z2VbSmUrMV0pKSYmMTI4PT0oMTkyJkx0KSYmMTI4PT0oMTkyJkd0KSYmKGd0PSgxNSZ0dCk8PDE4fCg2MyZSdCk8PDEyfCg2MyZMdCk8''@;'; put 'put ''PDZ8NjMmR3QpPjY1NTM1JiZndDwxMTE0MTEyJiYoS2U9Z3QpfW51bGw9PT1LZT8oS2U9NjU1MzMsJHQ9MSk6S2U+NjU1MzUmJih3ZS5wdXNoKChLZS09NjU1MzYpPj4+MTAmMTAyM3w1NTI5NiksS2U9NTYzMjB8MTAyMyZLZSksd2UucHVzaChLZSksSmUrPSR0fXJldHVybiBmdW5jdGlvbiBC''@;'; put 'put ''KGdlKXt2YXIgY2U9Z2UubGVuZ3RoO2lmKGNlPD1NKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxnZSk7Zm9yKHZhciBoZT0iIix3ZT0wO3dlPGNlOyloZSs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZ2Uuc2xpY2Uod2Usd2UrPU0pKTtyZXR1cm4g''@;'; put 'put ''aGV9KHdlKX1qLmtNYXhMZW5ndGg9QSwhKHcuVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbiB2KCl7dHJ5e3ZhciBnZT1uZXcgVWludDhBcnJheSgxKSxjZT17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihjZSxVaW50OEFycmF5LnBy''@;'; put 'put ''b3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlLGNlKSw0Mj09PWdlLmZvbygpfWNhdGNoe3JldHVybiExfX0oKSkmJnR5cGVvZiBjb25zb2xlPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIGNvbnNvbGUuZXJyb3ImJmNvbnNvbGUuZXJyb3IoIlRoaXMgYnJvd3NlciBsYWNrcyB0eXBl''@;'; put 'put ''ZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSBgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LiIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LnByb3RvdHlwZSwicGFyZW50Iix7''@;'; put 'put ''ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZih3LmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkody5wcm90b3R5cGUsIm9mZnNldCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYody5pc0J1ZmZlcih0aGlzKSly''@;'; put 'put ''ZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLHcucG9vbFNpemU9ODE5Mix3LmZyb209ZnVuY3Rpb24oZ2UsY2UsaGUpe3JldHVybiBTKGdlLGNlLGhlKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mKHcucHJvdG90eXBlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2Yo''@;'; put 'put ''dyxVaW50OEFycmF5KSx3LmFsbG9jPWZ1bmN0aW9uKGdlLGNlLGhlKXtyZXR1cm4gZnVuY3Rpb24gUihnZSxjZSxoZSl7cmV0dXJuIEwoZ2UpLGdlPD0wP0MoZ2UpOnZvaWQgMCE9PWNlPyJzdHJpbmciPT10eXBlb2YgaGU/QyhnZSkuZmlsbChjZSxoZSk6QyhnZSkuZmlsbChjZSk6QyhnZSl9''@;'; put 'put ''KGdlLGNlLGhlKX0sdy5hbGxvY1Vuc2FmZT1mdW5jdGlvbihnZSl7cmV0dXJuIHgoZ2UpfSx3LmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihnZSl7cmV0dXJuIHgoZ2UpfSx3LmlzQnVmZmVyPWZ1bmN0aW9uKGNlKXtyZXR1cm4gbnVsbCE9Y2UmJiEwPT09Y2UuX2lzQnVmZmVyJiZjZSE9PXcu''@;'; put 'put ''cHJvdG90eXBlfSx3LmNvbXBhcmU9ZnVuY3Rpb24oY2UsaGUpe2lmKEFlKGNlLFVpbnQ4QXJyYXkpJiYoY2U9dy5mcm9tKGNlLGNlLm9mZnNldCxjZS5ieXRlTGVuZ3RoKSksQWUoaGUsVWludDhBcnJheSkmJihoZT13LmZyb20oaGUsaGUub2Zmc2V0LGhlLmJ5dGVMZW5ndGgpKSwhdy5pc0J1''@;'; put 'put ''ZmZlcihjZSl8fCF3LmlzQnVmZmVyKGhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImJ1ZjEiLCAiYnVmMiIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZihjZT09PWhlKXJldHVybiAwO2Zvcih2YXIgd2U9Y2UubGVuZ3RoLEplPWhl''@;'; put 'put ''Lmxlbmd0aCx0dD0wLEtlPU1hdGgubWluKHdlLEplKTt0dDxLZTsrK3R0KWlmKGNlW3R0XSE9PWhlW3R0XSl7d2U9Y2VbdHRdLEplPWhlW3R0XTticmVha31yZXR1cm4gd2U8SmU/LTE6SmU8d2U/MTowfSx3LmlzRW5jb2Rpbmc9ZnVuY3Rpb24oY2Upe3N3aXRjaChTdHJpbmcoY2UpLnRvTG93''@;'; put 'put ''ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJl''@;'; put 'put ''dHVybiExfX0sdy5jb25jYXQ9ZnVuY3Rpb24oY2UsaGUpe2lmKCFBcnJheS5pc0FycmF5KGNlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWNlLmxlbmd0aClyZXR1cm4gdy5hbGxvYygwKTt2YXIgd2U7''@;'; put 'put ''aWYodm9pZCAwPT09aGUpZm9yKGhlPTAsd2U9MDt3ZTxjZS5sZW5ndGg7Kyt3ZSloZSs9Y2Vbd2VdLmxlbmd0aDt2YXIgSmU9dy5hbGxvY1Vuc2FmZShoZSksdHQ9MDtmb3Iod2U9MDt3ZTxjZS5sZW5ndGg7Kyt3ZSl7dmFyIEtlPWNlW3dlXTtpZihBZShLZSxVaW50OEFycmF5KSl0dCtLZS5s''@;'; put 'put ''ZW5ndGg+SmUubGVuZ3RoP3cuZnJvbShLZSkuY29weShKZSx0dCk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoSmUsS2UsdHQpO2Vsc2V7aWYoIXcuaXNCdWZmZXIoS2UpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZl''@;'; put 'put ''cnMnKTtLZS5jb3B5KEplLHR0KX10dCs9S2UubGVuZ3RofXJldHVybiBKZX0sdy5ieXRlTGVuZ3RoPVcsdy5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLHcucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBjZT10aGlzLmxlbmd0aDtpZihjZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9y''@;'; put 'put ''KCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgaGU9MDtoZTxjZTtoZSs9MilyZSh0aGlzLGhlLGhlKzEpO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgY2U9dGhpcy5sZW5ndGg7aWYoY2UlNCE9MCl0aHJv''@;'; put 'put ''dyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIGhlPTA7aGU8Y2U7aGUrPTQpcmUodGhpcyxoZSxoZSszKSxyZSh0aGlzLGhlKzEsaGUrMik7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigp''@;'; put 'put ''e3ZhciBjZT10aGlzLmxlbmd0aDtpZihjZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgaGU9MDtoZTxjZTtoZSs9OClyZSh0aGlzLGhlLGhlKzcpLHJlKHRoaXMsaGUrMSxoZSs2KSxyZSh0aGlz''@;'; put 'put ''LGhlKzIsaGUrNSkscmUodGhpcyxoZSszLGhlKzQpO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBjZT10aGlzLmxlbmd0aDtyZXR1cm4gMD09PWNlPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP2sodGhpcywwLGNlKTpxLmFwcGx5KHRoaXMsYXJndW1l''@;'; put 'put ''bnRzKX0sdy5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9dy5wcm90b3R5cGUudG9TdHJpbmcsdy5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGNlKXtpZighdy5pc0J1ZmZlcihjZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlz''@;'; put 'put ''PT09Y2V8fDA9PT13LmNvbXBhcmUodGhpcyxjZSl9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgY2U9IiIsaGU9ai5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gY2U9dGhpcy50b1N0cmluZygiaGV4IiwwLGhlKS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgpLHRo''@;'; put 'put ''aXMubGVuZ3RoPmhlJiYoY2UrPSIgLi4uICIpLCI8QnVmZmVyICIrY2UrIj4ifSxzJiYody5wcm90b3R5cGVbc109dy5wcm90b3R5cGUuaW5zcGVjdCksdy5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihjZSxoZSx3ZSxKZSx0dCl7aWYoQWUoY2UsVWludDhBcnJheSkmJihjZT13LmZyb20o''@;'; put 'put ''Y2UsY2Uub2Zmc2V0LGNlLmJ5dGVMZW5ndGgpKSwhdy5pc0J1ZmZlcihjZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgY2UpO2lmKHZvaWQg''@;'; put 'put ''MD09PWhlJiYoaGU9MCksdm9pZCAwPT09d2UmJih3ZT1jZT9jZS5sZW5ndGg6MCksdm9pZCAwPT09SmUmJihKZT0wKSx2b2lkIDA9PT10dCYmKHR0PXRoaXMubGVuZ3RoKSxoZTwwfHx3ZT5jZS5sZW5ndGh8fEplPDB8fHR0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQg''@;'; put 'put ''b2YgcmFuZ2UgaW5kZXgiKTtpZihKZT49dHQmJmhlPj13ZSlyZXR1cm4gMDtpZihKZT49dHQpcmV0dXJuLTE7aWYoaGU+PXdlKXJldHVybiAxO2lmKHRoaXM9PT1jZSlyZXR1cm4gMDtmb3IodmFyIEtlPSh0dD4+Pj0wKS0oSmU+Pj49MCksJHQ9KHdlPj4+PTApLShoZT4+Pj0wKSxSdD1NYXRo''@;'; put 'put ''Lm1pbihLZSwkdCksTHQ9dGhpcy5zbGljZShKZSx0dCksR3Q9Y2Uuc2xpY2UoaGUsd2UpLGd0PTA7Z3Q8UnQ7KytndClpZihMdFtndF0hPT1HdFtndF0pe0tlPUx0W2d0XSwkdD1HdFtndF07YnJlYWt9cmV0dXJuIEtlPCR0Py0xOiR0PEtlPzE6MH0sdy5wcm90b3R5cGUuaW5jbHVkZXM9ZnVu''@;'; put 'put ''Y3Rpb24oY2UsaGUsd2Upe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGNlLGhlLHdlKX0sdy5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihjZSxoZSx3ZSl7cmV0dXJuIG1lKHRoaXMsY2UsaGUsd2UsITApfSx3LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihjZSxoZSx3ZSl7cmV0''@;'; put 'put ''dXJuIG1lKHRoaXMsY2UsaGUsd2UsITEpfSx3LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihjZSxoZSx3ZSxKZSl7aWYodm9pZCAwPT09aGUpSmU9InV0ZjgiLHdlPXRoaXMubGVuZ3RoLGhlPTA7ZWxzZSBpZih2b2lkIDA9PT13ZSYmInN0cmluZyI9PXR5cGVvZiBoZSlKZT1oZSx3ZT10aGlz''@;'; put 'put ''Lmxlbmd0aCxoZT0wO2Vsc2V7aWYoIWlzRmluaXRlKGhlKSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7aGU+Pj49MCxpc0Zpbml0ZSh3ZSk/KHdlPj4+PTAsdm9pZCAwPT09''@;'; put 'put ''SmUmJihKZT0idXRmOCIpKTooSmU9d2Usd2U9dm9pZCAwKX12YXIgdHQ9dGhpcy5sZW5ndGgtaGU7aWYoKHZvaWQgMD09PXdlfHx3ZT50dCkmJih3ZT10dCksY2UubGVuZ3RoPjAmJih3ZTwwfHxoZTwwKXx8aGU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8g''@;'; put 'put ''d3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7SmV8fChKZT0idXRmOCIpO2Zvcih2YXIgS2U9ITE7Oylzd2l0Y2goSmUpe2Nhc2UiaGV4IjpyZXR1cm4gSWUodGhpcyxjZSxoZSx3ZSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4ga2UodGhpcyxjZSxoZSx3ZSk7Y2FzZSJhc2Np''@;'; put 'put ''aSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gcWUodGhpcyxjZSxoZSx3ZSk7Y2FzZSJiYXNlNjQiOnJldHVybiBYKHRoaXMsY2UsaGUsd2UpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gZih0aGlzLGNlLGhlLHdl''@;'; put 'put ''KTtkZWZhdWx0OmlmKEtlKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrSmUpO0plPSgiIitKZSkudG9Mb3dlckNhc2UoKSxLZT0hMH19LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBl''@;'; put 'put ''LnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIE09NDA5NjtmdW5jdGlvbiBLKGdlLGNlLGhlKXt2YXIgd2U9IiI7aGU9TWF0aC5taW4oZ2UubGVuZ3RoLGhlKTtmb3IodmFyIEplPWNlO0plPGhlOysrSmUpd2UrPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmdlW0plXSk7cmV0''@;'; put 'put ''dXJuIHdlfWZ1bmN0aW9uIEcoZ2UsY2UsaGUpe3ZhciB3ZT0iIjtoZT1NYXRoLm1pbihnZS5sZW5ndGgsaGUpO2Zvcih2YXIgSmU9Y2U7SmU8aGU7KytKZSl3ZSs9U3RyaW5nLmZyb21DaGFyQ29kZShnZVtKZV0pO3JldHVybiB3ZX1mdW5jdGlvbiBEKGdlLGNlLGhlKXt2YXIgd2U9Z2UubGVu''@;'; put 'put ''Z3RoOyghY2V8fGNlPDApJiYoY2U9MCksKCFoZXx8aGU8MHx8aGU+d2UpJiYoaGU9d2UpO2Zvcih2YXIgSmU9IiIsdHQ9Y2U7dHQ8aGU7Kyt0dClKZSs9RmVbZ2VbdHRdXTtyZXR1cm4gSmV9ZnVuY3Rpb24gcChnZSxjZSxoZSl7Zm9yKHZhciB3ZT1nZS5zbGljZShjZSxoZSksSmU9IiIsdHQ9''@;'; put 'put ''MDt0dDx3ZS5sZW5ndGgtMTt0dCs9MilKZSs9U3RyaW5nLmZyb21DaGFyQ29kZSh3ZVt0dF0rMjU2KndlW3R0KzFdKTtyZXR1cm4gSmV9ZnVuY3Rpb24gSShnZSxjZSxoZSl7aWYoZ2UlMSE9MHx8Z2U8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoZ2Ur''@;'; put 'put ''Y2U+aGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiB1ZShnZSxjZSxoZSx3ZSxKZSx0dCl7aWYoIXcuaXNCdWZmZXIoZ2UpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUg''@;'; put 'put ''YSBCdWZmZXIgaW5zdGFuY2UnKTtpZihjZT5KZXx8Y2U8dHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKGhlK3dlPmdlLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24g''@;'; put 'put ''bmUoZ2UsY2UsaGUsd2UsSmUsdHQpe2lmKGhlK3dlPmdlLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoaGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gX2UoZ2UsY2UsaGUsd2UsSmUpe3Jl''@;'; put 'put ''dHVybiBjZT0rY2UsaGU+Pj49MCxKZXx8bmUoZ2UsMCxoZSw0KSxjLndyaXRlKGdlLGNlLGhlLHdlLDIzLDQpLGhlKzR9ZnVuY3Rpb24gUGUoZ2UsY2UsaGUsd2UsSmUpe3JldHVybiBjZT0rY2UsaGU+Pj49MCxKZXx8bmUoZ2UsMCxoZSw4KSxjLndyaXRlKGdlLGNlLGhlLHdlLDUyLDgpLGhl''@;'; put 'put ''Kzh9dy5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oY2UsaGUpe3ZhciB3ZT10aGlzLmxlbmd0aDsoY2U9fn5jZSk8MD8oY2UrPXdlKTwwJiYoY2U9MCk6Y2U+d2UmJihjZT13ZSksKGhlPXZvaWQgMD09PWhlP3dlOn5+aGUpPDA/KGhlKz13ZSk8MCYmKGhlPTApOmhlPndlJiYoaGU9d2UpLGhl''@;'; put 'put ''PGNlJiYoaGU9Y2UpO3ZhciBKZT10aGlzLnN1YmFycmF5KGNlLGhlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKEplLHcucHJvdG90eXBlKSxKZX0sdy5wcm90b3R5cGUucmVhZFVpbnRMRT13LnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGNlLGhlLHdlKXtjZT4+Pj0wLGhl''@;'; put 'put ''Pj4+PTAsd2V8fEkoY2UsaGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgSmU9dGhpc1tjZV0sdHQ9MSxLZT0wOysrS2U8aGUmJih0dCo9MjU2KTspSmUrPXRoaXNbY2UrS2VdKnR0O3JldHVybiBKZX0sdy5wcm90b3R5cGUucmVhZFVpbnRCRT13LnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9u''@;'; put 'put ''KGNlLGhlLHdlKXtjZT4+Pj0wLGhlPj4+PTAsd2V8fEkoY2UsaGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgSmU9dGhpc1tjZSstLWhlXSx0dD0xO2hlPjAmJih0dCo9MjU2KTspSmUrPXRoaXNbY2UrLS1oZV0qdHQ7cmV0dXJuIEplfSx3LnByb3RvdHlwZS5yZWFkVWludDg9dy5wcm90b3R5cGUu''@;'; put 'put ''cmVhZFVJbnQ4PWZ1bmN0aW9uKGNlLGhlKXtyZXR1cm4gY2U+Pj49MCxoZXx8SShjZSwxLHRoaXMubGVuZ3RoKSx0aGlzW2NlXX0sdy5wcm90b3R5cGUucmVhZFVpbnQxNkxFPXcucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihjZSxoZSl7cmV0dXJuIGNlPj4+PTAsaGV8fEkoY2Us''@;'; put 'put ''Mix0aGlzLmxlbmd0aCksdGhpc1tjZV18dGhpc1tjZSsxXTw8OH0sdy5wcm90b3R5cGUucmVhZFVpbnQxNkJFPXcucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihjZSxoZSl7cmV0dXJuIGNlPj4+PTAsaGV8fEkoY2UsMix0aGlzLmxlbmd0aCksdGhpc1tjZV08PDh8dGhpc1tjZSsx''@;'; put 'put ''XX0sdy5wcm90b3R5cGUucmVhZFVpbnQzMkxFPXcucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihjZSxoZSl7cmV0dXJuIGNlPj4+PTAsaGV8fEkoY2UsNCx0aGlzLmxlbmd0aCksKHRoaXNbY2VdfHRoaXNbY2UrMV08PDh8dGhpc1tjZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbY2Ur''@;'; put 'put ''M119LHcucHJvdG90eXBlLnJlYWRVaW50MzJCRT13LnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oY2UsaGUpe3JldHVybiBjZT4+Pj0wLGhlfHxJKGNlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbY2VdKyh0aGlzW2NlKzFdPDwxNnx0aGlzW2NlKzJdPDw4fHRoaXNbY2Ur''@;'; put 'put ''M10pfSx3LnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oY2UsaGUsd2Upe2NlPj4+PTAsaGU+Pj49MCx3ZXx8SShjZSxoZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBKZT10aGlzW2NlXSx0dD0xLEtlPTA7KytLZTxoZSYmKHR0Kj0yNTYpOylKZSs9dGhpc1tjZStLZV0qdHQ7cmV0dXJuIEpl''@;'; put 'put ''Pj0odHQqPTEyOCkmJihKZS09TWF0aC5wb3coMiw4KmhlKSksSmV9LHcucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihjZSxoZSx3ZSl7Y2U+Pj49MCxoZT4+Pj0wLHdlfHxJKGNlLGhlLHRoaXMubGVuZ3RoKTtmb3IodmFyIEplPWhlLHR0PTEsS2U9dGhpc1tjZSstLUplXTtKZT4wJiYo''@;'; put 'put ''dHQqPTI1Nik7KUtlKz10aGlzW2NlKy0tSmVdKnR0O3JldHVybiBLZT49KHR0Kj0xMjgpJiYoS2UtPU1hdGgucG93KDIsOCpoZSkpLEtlfSx3LnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihjZSxoZSl7cmV0dXJuIGNlPj4+PTAsaGV8fEkoY2UsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNb''@;'; put 'put ''Y2VdPy0xKigyNTUtdGhpc1tjZV0rMSk6dGhpc1tjZV19LHcucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGNlLGhlKXtjZT4+Pj0wLGhlfHxJKGNlLDIsdGhpcy5sZW5ndGgpO3ZhciB3ZT10aGlzW2NlXXx0aGlzW2NlKzFdPDw4O3JldHVybiAzMjc2OCZ3ZT80Mjk0OTAxNzYwfHdl''@;'; put 'put ''OndlfSx3LnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihjZSxoZSl7Y2U+Pj49MCxoZXx8SShjZSwyLHRoaXMubGVuZ3RoKTt2YXIgd2U9dGhpc1tjZSsxXXx0aGlzW2NlXTw8ODtyZXR1cm4gMzI3Njgmd2U/NDI5NDkwMTc2MHx3ZTp3ZX0sdy5wcm90b3R5cGUucmVhZEludDMyTEU9''@;'; put 'put ''ZnVuY3Rpb24oY2UsaGUpe3JldHVybiBjZT4+Pj0wLGhlfHxJKGNlLDQsdGhpcy5sZW5ndGgpLHRoaXNbY2VdfHRoaXNbY2UrMV08PDh8dGhpc1tjZSsyXTw8MTZ8dGhpc1tjZSszXTw8MjR9LHcucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGNlLGhlKXtyZXR1cm4gY2U+Pj49MCxo''@;'; put 'put ''ZXx8SShjZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2NlXTw8MjR8dGhpc1tjZSsxXTw8MTZ8dGhpc1tjZSsyXTw8OHx0aGlzW2NlKzNdfSx3LnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihjZSxoZSl7cmV0dXJuIGNlPj4+PTAsaGV8fEkoY2UsNCx0aGlzLmxlbmd0aCksYy5yZWFkKHRo''@;'; put 'put ''aXMsY2UsITAsMjMsNCl9LHcucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGNlLGhlKXtyZXR1cm4gY2U+Pj49MCxoZXx8SShjZSw0LHRoaXMubGVuZ3RoKSxjLnJlYWQodGhpcyxjZSwhMSwyMyw0KX0sdy5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKGNlLGhlKXtyZXR1''@;'; put 'put ''cm4gY2U+Pj49MCxoZXx8SShjZSw4LHRoaXMubGVuZ3RoKSxjLnJlYWQodGhpcyxjZSwhMCw1Miw4KX0sdy5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGNlLGhlKXtyZXR1cm4gY2U+Pj49MCxoZXx8SShjZSw4LHRoaXMubGVuZ3RoKSxjLnJlYWQodGhpcyxjZSwhMSw1Miw4KX0s''@;'; put 'put ''dy5wcm90b3R5cGUud3JpdGVVaW50TEU9dy5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oY2UsaGUsd2UsSmUpe2NlPStjZSxoZT4+Pj0wLHdlPj4+PTAsSmV8fHVlKHRoaXMsY2UsaGUsd2UsTWF0aC5wb3coMiw4KndlKS0xLDApO3ZhciBLZT0xLCR0PTA7Zm9yKHRoaXNbaGVdPTI1''@;'; put 'put ''NSZjZTsrKyR0PHdlJiYoS2UqPTI1Nik7KXRoaXNbaGUrJHRdPWNlL0tlJjI1NTtyZXR1cm4gaGUrd2V9LHcucHJvdG90eXBlLndyaXRlVWludEJFPXcucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGNlLGhlLHdlLEplKXtjZT0rY2UsaGU+Pj49MCx3ZT4+Pj0wLEplfHx1ZSh0aGlz''@;'; put 'put ''LGNlLGhlLHdlLE1hdGgucG93KDIsOCp3ZSktMSwwKTt2YXIgS2U9d2UtMSwkdD0xO2Zvcih0aGlzW2hlK0tlXT0yNTUmY2U7LS1LZT49MCYmKCR0Kj0yNTYpOyl0aGlzW2hlK0tlXT1jZS8kdCYyNTU7cmV0dXJuIGhlK3dlfSx3LnByb3RvdHlwZS53cml0ZVVpbnQ4PXcucHJvdG90eXBlLndy''@;'; put 'put ''aXRlVUludDg9ZnVuY3Rpb24oY2UsaGUsd2Upe3JldHVybiBjZT0rY2UsaGU+Pj49MCx3ZXx8dWUodGhpcyxjZSxoZSwxLDI1NSwwKSx0aGlzW2hlXT0yNTUmY2UsaGUrMX0sdy5wcm90b3R5cGUud3JpdGVVaW50MTZMRT13LnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGNlLGhl''@;'; put 'put ''LHdlKXtyZXR1cm4gY2U9K2NlLGhlPj4+PTAsd2V8fHVlKHRoaXMsY2UsaGUsMiw2NTUzNSwwKSx0aGlzW2hlXT0yNTUmY2UsdGhpc1toZSsxXT1jZT4+PjgsaGUrMn0sdy5wcm90b3R5cGUud3JpdGVVaW50MTZCRT13LnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGNlLGhlLHdl''@;'; put 'put ''KXtyZXR1cm4gY2U9K2NlLGhlPj4+PTAsd2V8fHVlKHRoaXMsY2UsaGUsMiw2NTUzNSwwKSx0aGlzW2hlXT1jZT4+PjgsdGhpc1toZSsxXT0yNTUmY2UsaGUrMn0sdy5wcm90b3R5cGUud3JpdGVVaW50MzJMRT13LnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGNlLGhlLHdlKXty''@;'; put 'put ''ZXR1cm4gY2U9K2NlLGhlPj4+PTAsd2V8fHVlKHRoaXMsY2UsaGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbaGUrM109Y2U+Pj4yNCx0aGlzW2hlKzJdPWNlPj4+MTYsdGhpc1toZSsxXT1jZT4+PjgsdGhpc1toZV09MjU1JmNlLGhlKzR9LHcucHJvdG90eXBlLndyaXRlVWludDMyQkU9dy5wcm90''@;'; put 'put ''b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihjZSxoZSx3ZSl7cmV0dXJuIGNlPStjZSxoZT4+Pj0wLHdlfHx1ZSh0aGlzLGNlLGhlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2hlXT1jZT4+PjI0LHRoaXNbaGUrMV09Y2U+Pj4xNix0aGlzW2hlKzJdPWNlPj4+OCx0aGlzW2hlKzNdPTI1NSZj''@;'; put 'put ''ZSxoZSs0fSx3LnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGNlLGhlLHdlLEplKXtpZihjZT0rY2UsaGU+Pj49MCwhSmUpe3ZhciB0dD1NYXRoLnBvdygyLDgqd2UtMSk7dWUodGhpcyxjZSxoZSx3ZSx0dC0xLC10dCl9dmFyIEtlPTAsJHQ9MSxSdD0wO2Zvcih0aGlzW2hlXT0yNTUm''@;'; put 'put ''Y2U7KytLZTx3ZSYmKCR0Kj0yNTYpOyljZTwwJiYwPT09UnQmJjAhPT10aGlzW2hlK0tlLTFdJiYoUnQ9MSksdGhpc1toZStLZV09KGNlLyR0fDApLVJ0JjI1NTtyZXR1cm4gaGUrd2V9LHcucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oY2UsaGUsd2UsSmUpe2lmKGNlPStjZSxoZT4+''@;'; put 'put ''Pj0wLCFKZSl7dmFyIHR0PU1hdGgucG93KDIsOCp3ZS0xKTt1ZSh0aGlzLGNlLGhlLHdlLHR0LTEsLXR0KX12YXIgS2U9d2UtMSwkdD0xLFJ0PTA7Zm9yKHRoaXNbaGUrS2VdPTI1NSZjZTstLUtlPj0wJiYoJHQqPTI1Nik7KWNlPDAmJjA9PT1SdCYmMCE9PXRoaXNbaGUrS2UrMV0mJihSdD0x''@;'; put 'put ''KSx0aGlzW2hlK0tlXT0oY2UvJHR8MCktUnQmMjU1O3JldHVybiBoZSt3ZX0sdy5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGNlLGhlLHdlKXtyZXR1cm4gY2U9K2NlLGhlPj4+PTAsd2V8fHVlKHRoaXMsY2UsaGUsMSwxMjcsLTEyOCksY2U8MCYmKGNlPTI1NStjZSsxKSx0aGlzW2hl''@;'; put 'put ''XT0yNTUmY2UsaGUrMX0sdy5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKGNlLGhlLHdlKXtyZXR1cm4gY2U9K2NlLGhlPj4+PTAsd2V8fHVlKHRoaXMsY2UsaGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbaGVdPTI1NSZjZSx0aGlzW2hlKzFdPWNlPj4+OCxoZSsyfSx3LnByb3RvdHlw''@;'; put 'put ''ZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oY2UsaGUsd2Upe3JldHVybiBjZT0rY2UsaGU+Pj49MCx3ZXx8dWUodGhpcyxjZSxoZSwyLDMyNzY3LC0zMjc2OCksdGhpc1toZV09Y2U+Pj44LHRoaXNbaGUrMV09MjU1JmNlLGhlKzJ9LHcucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihj''@;'; put 'put ''ZSxoZSx3ZSl7cmV0dXJuIGNlPStjZSxoZT4+Pj0wLHdlfHx1ZSh0aGlzLGNlLGhlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1toZV09MjU1JmNlLHRoaXNbaGUrMV09Y2U+Pj44LHRoaXNbaGUrMl09Y2U+Pj4xNix0aGlzW2hlKzNdPWNlPj4+MjQsaGUrNH0sdy5wcm90b3R5cGUu''@;'; put 'put ''d3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGNlLGhlLHdlKXtyZXR1cm4gY2U9K2NlLGhlPj4+PTAsd2V8fHVlKHRoaXMsY2UsaGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxjZTwwJiYoY2U9NDI5NDk2NzI5NStjZSsxKSx0aGlzW2hlXT1jZT4+PjI0LHRoaXNbaGUrMV09Y2U+Pj4xNix0aGlz''@;'; put 'put ''W2hlKzJdPWNlPj4+OCx0aGlzW2hlKzNdPTI1NSZjZSxoZSs0fSx3LnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oY2UsaGUsd2Upe3JldHVybiBfZSh0aGlzLGNlLGhlLCEwLHdlKX0sdy5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGNlLGhlLHdlKXtyZXR1cm4gX2Uo''@;'; put 'put ''dGhpcyxjZSxoZSwhMSx3ZSl9LHcucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oY2UsaGUsd2Upe3JldHVybiBQZSh0aGlzLGNlLGhlLCEwLHdlKX0sdy5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihjZSxoZSx3ZSl7cmV0dXJuIFBlKHRoaXMsY2UsaGUsITEsd2Up''@;'; put 'put ''fSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGNlLGhlLHdlLEplKXtpZighdy5pc0J1ZmZlcihjZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYod2V8fCh3ZT0wKSwhSmUmJjAhPT1KZSYmKEplPXRoaXMubGVuZ3RoKSxoZT49Y2UubGVu''@;'; put 'put ''Z3RoJiYoaGU9Y2UubGVuZ3RoKSxoZXx8KGhlPTApLEplPjAmJkplPHdlJiYoSmU9d2UpLEplPT09d2V8fDA9PT1jZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYod2U8''@;'; put 'put ''MHx8d2U+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihKZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO0plPnRoaXMubGVuZ3RoJiYoSmU9dGhpcy5sZW5ndGgpLGNlLmxlbmd0aC1oZTxK''@;'; put 'put ''ZS13ZSYmKEplPWNlLmxlbmd0aC1oZSt3ZSk7dmFyIHR0PUplLXdlO3JldHVybiB0aGlzPT09Y2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluP3RoaXMuY29weVdpdGhpbihoZSx3ZSxKZSk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwo''@;'; put 'put ''Y2UsdGhpcy5zdWJhcnJheSh3ZSxKZSksaGUpLHR0fSx3LnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGNlLGhlLHdlLEplKXtpZigic3RyaW5nIj09dHlwZW9mIGNlKXtpZigic3RyaW5nIj09dHlwZW9mIGhlPyhKZT1oZSxoZT0wLHdlPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIHdl''@;'; put 'put ''JiYoSmU9d2Usd2U9dGhpcy5sZW5ndGgpLHZvaWQgMCE9PUplJiYic3RyaW5nIiE9dHlwZW9mIEplKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIEplJiYhdy5pc0VuY29kaW5nKEplKSl0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0plKTtpZigxPT09Y2UubGVuZ3RoKXt2YXIgdHQ9Y2UuY2hhckNvZGVBdCgwKTsoInV0ZjgiPT09SmUmJnR0PDEyOHx8ImxhdGluMSI9PT1KZSkmJihjZT10dCl9fWVsc2UibnVtYmVyIj09dHlwZW9mIGNlP2NlJj0yNTU6ImJvb2xlYW4iPT10eXBl''@;'; put 'put ''b2YgY2UmJihjZT1OdW1iZXIoY2UpKTtpZihoZTwwfHx0aGlzLmxlbmd0aDxoZXx8dGhpcy5sZW5ndGg8d2UpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKHdlPD1oZSlyZXR1cm4gdGhpczt2YXIgS2U7aWYoaGU+Pj49MCx3ZT12b2lkIDA9PT13ZT90aGlz''@;'; put 'put ''Lmxlbmd0aDp3ZT4+PjAsY2V8fChjZT0wKSwibnVtYmVyIj09dHlwZW9mIGNlKWZvcihLZT1oZTtLZTx3ZTsrK0tlKXRoaXNbS2VdPWNlO2Vsc2V7dmFyICR0PXcuaXNCdWZmZXIoY2UpP2NlOncuZnJvbShjZSxKZSksUnQ9JHQubGVuZ3RoO2lmKDA9PT1SdCl0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCdUaGUgdmFsdWUgIicrY2UrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2ZvcihLZT0wO0tlPHdlLWhlOysrS2UpdGhpc1tLZStoZV09JHRbS2UlUnRdfXJldHVybiB0aGlzfTt2YXIgb3Q9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBkdChnZSxjZSl7Y2U9Y2V8''@;'; put 'put ''fDEvMDtmb3IodmFyIGhlLHdlPWdlLmxlbmd0aCxKZT1udWxsLHR0PVtdLEtlPTA7S2U8d2U7KytLZSl7aWYoKGhlPWdlLmNoYXJDb2RlQXQoS2UpKT41NTI5NSYmaGU8NTczNDQpe2lmKCFKZSl7aWYoaGU+NTYzMTkpeyhjZS09Myk+LTEmJnR0LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVl''@;'; put 'put ''fWlmKEtlKzE9PT13ZSl7KGNlLT0zKT4tMSYmdHQucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9SmU9aGU7Y29udGludWV9aWYoaGU8NTYzMjApeyhjZS09Myk+LTEmJnR0LnB1c2goMjM5LDE5MSwxODkpLEplPWhlO2NvbnRpbnVlfWhlPTY1NTM2KyhKZS01NTI5Njw8MTB8aGUtNTYzMjAp''@;'; put 'put ''fWVsc2UgSmUmJihjZS09Myk+LTEmJnR0LnB1c2goMjM5LDE5MSwxODkpO2lmKEplPW51bGwsaGU8MTI4KXtpZigoY2UtPTEpPDApYnJlYWs7dHQucHVzaChoZSl9ZWxzZSBpZihoZTwyMDQ4KXtpZigoY2UtPTIpPDApYnJlYWs7dHQucHVzaChoZT4+NnwxOTIsNjMmaGV8MTI4KX1lbHNlIGlm''@;'; put 'put ''KGhlPDY1NTM2KXtpZigoY2UtPTMpPDApYnJlYWs7dHQucHVzaChoZT4+MTJ8MjI0LGhlPj42JjYzfDEyOCw2MyZoZXwxMjgpfWVsc2V7aWYoIShoZTwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChjZS09NCk8MClicmVhazt0dC5wdXNoKGhlPj4x''@;'; put 'put ''OHwyNDAsaGU+PjEyJjYzfDEyOCxoZT4+NiY2M3wxMjgsNjMmaGV8MTI4KX19cmV0dXJuIHR0fWZ1bmN0aW9uIHhlKGdlKXtyZXR1cm4geS50b0J5dGVBcnJheShmdW5jdGlvbiBsdChnZSl7aWYoKGdlPShnZT1nZS5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShvdCwiIikpLmxlbmd0''@;'; put 'put ''aDwyKXJldHVybiIiO2Zvcig7Z2UubGVuZ3RoJTQhPTA7KWdlKz0iPSI7cmV0dXJuIGdlfShnZSkpfWZ1bmN0aW9uIGplKGdlLGNlLGhlLHdlKXtmb3IodmFyIEplPTA7SmU8d2UmJiEoSmUraGU+PWNlLmxlbmd0aHx8SmU+PWdlLmxlbmd0aCk7KytKZSljZVtKZStoZV09Z2VbSmVdO3JldHVy''@;'; put 'put ''biBKZX1mdW5jdGlvbiBBZShnZSxjZSl7cmV0dXJuIGdlIGluc3RhbmNlb2YgY2V8fG51bGwhPWdlJiZudWxsIT1nZS5jb25zdHJ1Y3RvciYmbnVsbCE9Z2UuY29uc3RydWN0b3IubmFtZSYmZ2UuY29uc3RydWN0b3IubmFtZT09PWNlLm5hbWV9ZnVuY3Rpb24gRGUoZ2Upe3JldHVybiBnZSE9''@;'; put 'put ''Z2V9dmFyIEZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBnZT0iMDEyMzQ1Njc4OWFiY2RlZiIsY2U9bmV3IEFycmF5KDI1NiksaGU9MDtoZTwxNjsrK2hlKWZvcih2YXIgd2U9MTYqaGUsSmU9MDtKZTwxNjsrK0plKWNlW3dlK0plXT1nZVtoZV0rZ2VbSmVdO3JldHVybiBjZX0oKX0sOTU3MzEoZmUs''@;'; put 'put ''aixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg2NTk5MiksYz1oKDc5NDc3KSxzPWgoNTk3MDUpLEE9aCg1MjkxMCk7ZmUuZXhwb3J0cz1BfHx5LmNhbGwocyxjKX0sOTg5MTAoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg2NTk5MiksYz1oKDc5NDc3KSxzPWgoOTU3MzEpO2ZlLmV4cG9y''@;'; put 'put ''dHM9ZnVuY3Rpb24oKXtyZXR1cm4gcyh5LGMsYXJndW1lbnRzKX19LDc5NDc3KGZlKXsidXNlIHN0cmljdCI7ZmUuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuYXBwbHl9LDU5NzA1KGZlKXsidXNlIHN0cmljdCI7ZmUuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbH0sNjE4ODUo''@;'; put 'put ''ZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg2NTk5MiksYz1oKDQ2NzU4KSxzPWgoNTk3MDUpLEE9aCg5NTczMSk7ZmUuZXhwb3J0cz1mdW5jdGlvbihDKXtpZihDLmxlbmd0aDwxfHwiZnVuY3Rpb24iIT10eXBlb2YgQ1swXSl0aHJvdyBuZXcgYygiYSBmdW5jdGlvbiBpcyByZXF1aXJl''@;'; put 'put ''ZCIpO3JldHVybiBBKHkscyxDKX19LDUyOTEwKGZlKXsidXNlIHN0cmljdCI7ZmUuZXhwb3J0cz10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QmJlJlZmxlY3QuYXBwbHl9LDQ4MTI4KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoMzEzNTgpLGM9aCg0NTcwKSxzPWgoNjE4ODUpLEE9''@;'; put 'put ''aCg5ODkxMCk7ZmUuZXhwb3J0cz1mdW5jdGlvbihDKXt2YXIgdz1zKGFyZ3VtZW50cyksUz0xK0MubGVuZ3RoLShhcmd1bWVudHMubGVuZ3RoLTEpO3JldHVybiB5KHcsUz4wP1M6MCwhMCl9LGM/YyhmZS5leHBvcnRzLCJhcHBseSIse3ZhbHVlOkF9KTpmZS5leHBvcnRzLmFwcGx5PUF9LDEy''@;'; put 'put ''NzczKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoOTAyNTgpLGM9aCg2MTg4NSkscz1jKFt5KCIlU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJSIpXSk7ZmUuZXhwb3J0cz1mdW5jdGlvbih2LEMpe3ZhciB3PXkodiwhIUMpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB3JiZzKHYsIi5w''@;'; put 'put ''cm90b3R5cGUuIik+LTE/Yyhbd10pOnd9fSwzMzYxNChmZSxqLGgpeyJ1c2Ugc3RyaWN0IjtoLnIoaiksaC5kKGose0FsdGVybmF0aW9uOigpPT5ldSxDc3RQYXJzZXI6KCk9PnMxLEVNUFRZX0FMVDooKT0+d2YsRU9GOigpPT5KYyxFYXJseUV4aXRFeGNlcHRpb246KCk9PmM4LEVtYmVkZGVk''@;'; put 'put ''QWN0aW9uc1BhcnNlcjooKT0+djMsRmxhdDooKT0+UnUsR0FzdFZpc2l0b3I6KCk9PmxzLExleGVyOigpPT5KdSxMZXhlckRlZmluaXRpb25FcnJvclR5cGU6KCk9PlJzLE1pc21hdGNoZWRUb2tlbkV4Y2VwdGlvbjooKT0+ZDMsTm9WaWFibGVBbHRFeGNlcHRpb246KCk9PmgzLE5vblRlcm1p''@;'; put 'put ''bmFsOigpPT5CdSxOb3RBbGxJbnB1dFBhcnNlZEV4Y2VwdGlvbjooKT0+bDgsT3B0aW9uOigpPT5oYyxQYXJzZXI6KCk9PkNmLFBhcnNlckRlZmluaXRpb25FcnJvclR5cGU6KCk9PnJkLFJlcGV0aXRpb246KCk9PmNsLFJlcGV0aXRpb25NYW5kYXRvcnk6KCk9PmVkLFJlcGV0aXRpb25NYW5k''@;'; put 'put ''YXRvcnlXaXRoU2VwYXJhdG9yOigpPT5KbixSZXBldGl0aW9uV2l0aFNlcGFyYXRvcjooKT0+bWksUnVsZTooKT0+TjEsVGVybWluYWw6KCk9PlNsLFZFUlNJT046KCk9PnksYXNzaWduT2NjdXJyZW5jZUluZGljZXM6KCk9Pmk1LGNsZWFyQ2FjaGU6KCk9Pmg4LGNyZWF0ZVN5bnRheERpYWdy''@;'; put 'put ''YW1zQ29kZTooKT0+ZHksY3JlYXRlVG9rZW46KCk9Pm5oLGNyZWF0ZVRva2VuSW5zdGFuY2U6KCk9PmdmLGRlZmF1bHRHcmFtbWFyUmVzb2x2ZXJFcnJvclByb3ZpZGVyOigpPT5QbSxkZWZhdWx0R3JhbW1hclZhbGlkYXRvckVycm9yUHJvdmlkZXI6KCk9PmkxLGRlZmF1bHRMZXhlckVycm9y''@;'; put 'put ''UHJvdmlkZXI6KCk9PnNwLGRlZmF1bHRQYXJzZXJFcnJvclByb3ZpZGVyOigpPT5jMCxnZW5lcmF0ZVBhcnNlckZhY3Rvcnk6KCk9PmlkLGdlbmVyYXRlUGFyc2VyTW9kdWxlOigpPT5kMCxpc1JlY29nbml0aW9uRXhjZXB0aW9uOigpPT5ocCxyZXNvbHZlR3JhbW1hcjooKT0+SG0sc2VyaWFs''@;'; put 'put ''aXplR3JhbW1hcjooKT0+Y24sc2VyaWFsaXplUHJvZHVjdGlvbjooKT0+aXIsdG9rZW5MYWJlbDooKT0+eWQsdG9rZW5NYXRjaGVyOigpPT5scCx0b2tlbk5hbWU6KCk9PlVvLHZhbGlkYXRlR3JhbW1hcjooKT0+d2R9KTt2YXIgeT0iNi41LjAiO2Z1bmN0aW9uIGMocGUpe3JldHVybiBwZSYm''@;'; put 'put ''MD09PXBlLmxlbmd0aH1mdW5jdGlvbiBzKHBlKXtyZXR1cm4gbnVsbD09cGU/W106T2JqZWN0LmtleXMocGUpfWZ1bmN0aW9uIEEocGUpe2Zvcih2YXIgbGU9W10sYmU9T2JqZWN0LmtleXMocGUpLE9lPTA7T2U8YmUubGVuZ3RoO09lKyspbGUucHVzaChwZVtiZVtPZV1dKTtyZXR1cm4gbGV9''@;'; put 'put ''ZnVuY3Rpb24gQyhwZSxsZSl7Zm9yKHZhciBiZT1bXSxPZT0wO09lPHBlLmxlbmd0aDtPZSsrKWJlLnB1c2gobGUuY2FsbChudWxsLHBlW09lXSxPZSkpO3JldHVybiBiZX1mdW5jdGlvbiB3KHBlKXtmb3IodmFyIGxlPVtdLGJlPTA7YmU8cGUubGVuZ3RoO2JlKyspe3ZhciBPZT1wZVtiZV07''@;'; put 'put ''QXJyYXkuaXNBcnJheShPZSk/bGU9bGUuY29uY2F0KHcoT2UpKTpsZS5wdXNoKE9lKX1yZXR1cm4gbGV9ZnVuY3Rpb24gUyhwZSl7cmV0dXJuIGMocGUpP3ZvaWQgMDpwZVswXX1mdW5jdGlvbiBMKHBlKXt2YXIgbGU9cGUmJnBlLmxlbmd0aDtyZXR1cm4gbGU/cGVbbGUtMV06dm9pZCAwfWZ1''@;'; put 'put ''bmN0aW9uIFIocGUsbGUpe2lmKEFycmF5LmlzQXJyYXkocGUpKWZvcih2YXIgYmU9MDtiZTxwZS5sZW5ndGg7YmUrKylsZS5jYWxsKG51bGwscGVbYmVdLGJlKTtlbHNle2lmKCFNKHBlKSl0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKTt2YXIgT2U9cyhwZSk7Zm9yKGJlPTA7''@;'; put 'put ''YmU8T2UubGVuZ3RoO2JlKyspe3ZhciAkZT1PZVtiZV07bGUuY2FsbChudWxsLHBlWyRlXSwkZSl9fX1mdW5jdGlvbiB4KHBlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHBlfWZ1bmN0aW9uIFUocGUpe3JldHVybiB2b2lkIDA9PT1wZX1mdW5jdGlvbiBIKHBlKXtyZXR1cm4gcGUgaW5zdGFu''@;'; put 'put ''Y2VvZiBGdW5jdGlvbn1mdW5jdGlvbiBWKHBlLGxlKXtyZXR1cm4gdm9pZCAwPT09bGUmJihsZT0xKSxwZS5zbGljZShsZSxwZS5sZW5ndGgpfWZ1bmN0aW9uIE4ocGUsbGUpe3JldHVybiB2b2lkIDA9PT1sZSYmKGxlPTEpLHBlLnNsaWNlKDAscGUubGVuZ3RoLWxlKX1mdW5jdGlvbiB6KHBl''@;'; put 'put ''LGxlKXt2YXIgYmU9W107aWYoQXJyYXkuaXNBcnJheShwZSkpZm9yKHZhciBPZT0wO09lPHBlLmxlbmd0aDtPZSsrKXt2YXIgJGU9cGVbT2VdO2xlLmNhbGwobnVsbCwkZSkmJmJlLnB1c2goJGUpfXJldHVybiBiZX1mdW5jdGlvbiBZKHBlLGxlKXtyZXR1cm4geihwZSxmdW5jdGlvbihiZSl7''@;'; put 'put ''cmV0dXJuIWxlKGJlKX0pfWZ1bmN0aW9uIEYocGUsbGUpe2Zvcih2YXIgYmU9T2JqZWN0LmtleXMocGUpLE9lPXt9LCRlPTA7JGU8YmUubGVuZ3RoOyRlKyspe3ZhciBTdD1iZVskZV0sUXQ9cGVbU3RdO2xlKFF0KSYmKE9lW1N0XT1RdCl9cmV0dXJuIE9lfWZ1bmN0aW9uIFcocGUsbGUpe3Jl''@;'; put 'put ''dHVybiEhTShwZSkmJnBlLmhhc093blByb3BlcnR5KGxlKX1mdW5jdGlvbiBxKHBlLGxlKXtyZXR1cm4gdm9pZCAwIT09Q2UocGUsZnVuY3Rpb24oYmUpe3JldHVybiBiZT09PWxlfSl9ZnVuY3Rpb24gcmUocGUpe2Zvcih2YXIgbGU9W10sYmU9MDtiZTxwZS5sZW5ndGg7YmUrKylsZS5wdXNo''@;'; put 'put ''KHBlW2JlXSk7cmV0dXJuIGxlfWZ1bmN0aW9uIG1lKHBlKXt2YXIgbGU9e307Zm9yKHZhciBiZSBpbiBwZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGUsYmUpJiYobGVbYmVdPXBlW2JlXSk7cmV0dXJuIGxlfWZ1bmN0aW9uIENlKHBlLGxlKXtmb3IodmFyIGJlPTA7''@;'; put 'put ''YmU8cGUubGVuZ3RoO2JlKyspe3ZhciBPZT1wZVtiZV07aWYobGUuY2FsbChudWxsLE9lKSlyZXR1cm4gT2V9fWZ1bmN0aW9uIGtlKHBlLGxlLGJlKXtmb3IodmFyIE9lPUFycmF5LmlzQXJyYXkocGUpLCRlPU9lP3BlOkEocGUpLFN0PU9lP1tdOnMocGUpLFF0PWJlLEVuPTA7RW48JGUubGVu''@;'; put 'put ''Z3RoO0VuKyspUXQ9bGUuY2FsbChudWxsLFF0LCRlW0VuXSxPZT9FbjpTdFtFbl0pO3JldHVybiBRdH1mdW5jdGlvbiBxZShwZSl7cmV0dXJuIFkocGUsZnVuY3Rpb24obGUpe3JldHVybiBudWxsPT1sZX0pfWZ1bmN0aW9uIFgocGUsbGUpe3ZvaWQgMD09PWxlJiYobGU9ZnVuY3Rpb24oT2Up''@;'; put 'put ''e3JldHVybiBPZX0pO3ZhciBiZT1bXTtyZXR1cm4ga2UocGUsZnVuY3Rpb24oT2UsJGUpe3ZhciBTdD1sZSgkZSk7cmV0dXJuIHEoYmUsU3QpP09lOihiZS5wdXNoKFN0KSxPZS5jb25jYXQoJGUpKX0sW10pfWZ1bmN0aW9uIGIocGUpe3JldHVybiBBcnJheS5pc0FycmF5KHBlKX1mdW5jdGlv''@;'; put 'put ''biBrKHBlKXtyZXR1cm4gcGUgaW5zdGFuY2VvZiBSZWdFeHB9ZnVuY3Rpb24gTShwZSl7cmV0dXJuIHBlIGluc3RhbmNlb2YgT2JqZWN0fWZ1bmN0aW9uIEIocGUsbGUpe2Zvcih2YXIgYmU9MDtiZTxwZS5sZW5ndGg7YmUrKylpZighbGUocGVbYmVdLGJlKSlyZXR1cm4hMTtyZXR1cm4hMH1m''@;'; put 'put ''dW5jdGlvbiBLKHBlLGxlKXtyZXR1cm4gWShwZSxmdW5jdGlvbihiZSl7cmV0dXJuIHEobGUsYmUpfSl9ZnVuY3Rpb24gRyhwZSxsZSl7Zm9yKHZhciBiZT0wO2JlPHBlLmxlbmd0aDtiZSsrKWlmKGxlKHBlW2JlXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gdWUocGUpe2Zvcih2YXIg''@;'; put 'put ''bGU9W10sYmU9MTtiZTxhcmd1bWVudHMubGVuZ3RoO2JlKyspbGVbYmUtMV09YXJndW1lbnRzW2JlXTtmb3IodmFyIE9lPTA7T2U8bGUubGVuZ3RoO09lKyspZm9yKHZhciAkZT1sZVtPZV0sU3Q9cygkZSksUXQ9MDtRdDxTdC5sZW5ndGg7UXQrKyl7dmFyIEVuPVN0W1F0XTtwZVtFbl09JGVb''@;'; put 'put ''RW5dfXJldHVybiBwZX1mdW5jdGlvbiBuZShwZSl7Zm9yKHZhciBsZT1bXSxiZT0xO2JlPGFyZ3VtZW50cy5sZW5ndGg7YmUrKylsZVtiZS0xXT1hcmd1bWVudHNbYmVdO2Zvcih2YXIgT2U9MDtPZTxsZS5sZW5ndGg7T2UrKyl7dmFyICRlPWxlW09lXTtpZighVSgkZSkpZm9yKHZhciBTdD1z''@;'; put 'put ''KCRlKSxRdD0wO1F0PFN0Lmxlbmd0aDtRdCsrKXt2YXIgRW49U3RbUXRdO1cocGUsRW4pfHwocGVbRW5dPSRlW0VuXSl9fXJldHVybiBwZX1mdW5jdGlvbiBfZSgpe2Zvcih2YXIgcGU9W10sbGU9MDtsZTxhcmd1bWVudHMubGVuZ3RoO2xlKyspcGVbbGVdPWFyZ3VtZW50c1tsZV07cmV0dXJu''@;'; put 'put ''IG5lLmFwcGx5KG51bGwsW3t9XS5jb25jYXQocGUpKX1mdW5jdGlvbiBQZShwZSxsZSl7dmFyIGJlPXt9O3JldHVybiBSKHBlLGZ1bmN0aW9uKE9lKXt2YXIgJGU9bGUoT2UpLFN0PWJlWyRlXTtTdD9TdC5wdXNoKE9lKTpiZVskZV09W09lXX0pLGJlfWZ1bmN0aW9uIG90KHBlLGxlKXtmb3Io''@;'; put 'put ''dmFyIGJlPW1lKHBlKSxPZT1zKGxlKSwkZT0wOyRlPE9lLmxlbmd0aDskZSsrKXt2YXIgU3Q9T2VbJGVdO2JlW1N0XT1sZVtTdF19cmV0dXJuIGJlfWZ1bmN0aW9uIGx0KCl7fWZ1bmN0aW9uIGR0KHBlKXtyZXR1cm4gcGV9ZnVuY3Rpb24gYWUocGUpe2NvbnNvbGUmJmNvbnNvbGUuZXJyb3Im''@;'; put 'put ''JmNvbnNvbGUuZXJyb3IoIkVycm9yOiAiK3BlKX1mdW5jdGlvbiB4ZShwZSl7Y29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIldhcm5pbmc6ICIrcGUpfWZ1bmN0aW9uIGplKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE1hcH1mdW5jdGlvbiBEZShwZSl7ZnVuY3Rpb24g''@;'; put 'put ''bGUoKXt9bGUucHJvdG90eXBlPXBlO3ZhciBiZT1uZXcgbGU7ZnVuY3Rpb24gT2UoKXtyZXR1cm4gdHlwZW9mIGJlLmJhcn1yZXR1cm4gT2UoKSxPZSgpLHBlfWZ1bmN0aW9uIEZlKHBlKXtyZXR1cm4gcGVbcGUubGVuZ3RoLTFdfWZ1bmN0aW9uIGdlKHBlKXt2YXIgbGU9KG5ldyBEYXRlKS5n''@;'; put 'put ''ZXRUaW1lKCksYmU9cGUoKTtyZXR1cm57dGltZToobmV3IERhdGUpLmdldFRpbWUoKS1sZSx2YWx1ZTpiZX19dmFyIGNlPWgoNTM5MTYpLGhlPXt9LHdlPW5ldyBjZS5SZWdFeHBQYXJzZXI7ZnVuY3Rpb24gSmUocGUpe3ZhciBsZT1wZS50b1N0cmluZygpO2lmKGhlLmhhc093blByb3BlcnR5''@;'; put 'put ''KGxlKSlyZXR1cm4gaGVbbGVdO3ZhciBiZT13ZS5wYXR0ZXJuKGxlKTtyZXR1cm4gaGVbbGVdPWJlLGJlfXZhciBLZT1mdW5jdGlvbigpe3ZhciBwZT1mdW5jdGlvbihsZSxiZSl7cmV0dXJuKHBlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5''@;'; put 'put ''JiZmdW5jdGlvbihPZSwkZSl7T2UuX19wcm90b19fPSRlfXx8ZnVuY3Rpb24oT2UsJGUpe2Zvcih2YXIgU3QgaW4gJGUpJGUuaGFzT3duUHJvcGVydHkoU3QpJiYoT2VbU3RdPSRlW1N0XSl9KShsZSxiZSl9O3JldHVybiBmdW5jdGlvbihsZSxiZSl7ZnVuY3Rpb24gT2UoKXt0aGlzLmNvbnN0''@;'; put 'put ''cnVjdG9yPWxlfXBlKGxlLGJlKSxsZS5wcm90b3R5cGU9bnVsbD09PWJlP09iamVjdC5jcmVhdGUoYmUpOihPZS5wcm90b3R5cGU9YmUucHJvdG90eXBlLG5ldyBPZSl9fSgpLCR0PSJDb21wbGVtZW50IFNldHMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGZpcnN0IGNoYXIgb3B0aW1pemF0aW9u''@;'; put 'put ''IixSdD0nVW5hYmxlIHRvIHVzZSAiZmlyc3QgY2hhciIgbGV4ZXIgb3B0aW1pemF0aW9uczpcbic7ZnVuY3Rpb24gTHQocGUsbGUpe3ZvaWQgMD09PWxlJiYobGU9ITEpO3RyeXt2YXIgYmU9SmUocGUpO3JldHVybiBHdChiZS52YWx1ZSx7fSxiZS5mbGFncy5pZ25vcmVDYXNlKX1jYXRjaChT''@;'; put 'put ''dCl7aWYoU3QubWVzc2FnZT09PSR0KWxlJiZ4ZShSdCsiXHRVbmFibGUgdG8gb3B0aW1pemU6IDwgIitwZS50b1N0cmluZygpKyIgPlxuXHRDb21wbGVtZW50IFNldHMgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgb3B0aW1pemVkLlxuXHRUaGlzIHdpbGwgZGlzYWJsZSB0aGUgbGV4ZXIncyBm''@;'; put 'put ''aXJzdCBjaGFyIG9wdGltaXphdGlvbnMuXG5cdFNlZTogaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL2NoZXZyb3RhaW4vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjQ09NUExFTUVOVCBmb3IgZGV0YWlscy4iKTtlbHNle3ZhciAkZT0iIjtsZSYmKCRlPSJcblx0VGhpcyB3''@;'; put 'put ''aWxsIGRpc2FibGUgdGhlIGxleGVyJ3MgZmlyc3QgY2hhciBvcHRpbWl6YXRpb25zLlxuXHRTZWU6IGh0dHBzOi8vc2FwLmdpdGh1Yi5pby9jaGV2cm90YWluL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI1JFR0VYUF9QQVJTSU5HIGZvciBkZXRhaWxzLiIpLGFlKFJ0''@;'; put 'put ''KyJcblx0RmFpbGVkIHBhcnNpbmc6IDwgIitwZS50b1N0cmluZygpKyIgPlxuXHRVc2luZyB0aGUgcmVnZXhwLXRvLWFzdCBsaWJyYXJ5IHZlcnNpb246ICIrY2UuVkVSU0lPTisiXG5cdFBsZWFzZSBvcGVuIGFuIGlzc3VlIGF0OiBodHRwczovL2dpdGh1Yi5jb20vYmQ4Mi9yZWdleHAtdG8t''@;'; put 'put ''YXN0L2lzc3VlcyIrJGUpfX1yZXR1cm5bXX1mdW5jdGlvbiBHdChwZSxsZSxiZSl7c3dpdGNoKHBlLnR5cGUpe2Nhc2UiRGlzanVuY3Rpb24iOmZvcih2YXIgT2U9MDtPZTxwZS52YWx1ZS5sZW5ndGg7T2UrKylHdChwZS52YWx1ZVtPZV0sbGUsYmUpO2JyZWFrO2Nhc2UiQWx0ZXJuYXRpdmUi''@;'; put 'put ''OnZhciAkZT1wZS52YWx1ZTtmb3IoT2U9MDtPZTwkZS5sZW5ndGg7T2UrKyl7dmFyIFN0PSRlW09lXTtzd2l0Y2goU3QudHlwZSl7Y2FzZSJFbmRBbmNob3IiOmNhc2UiR3JvdXBCYWNrUmVmZXJlbmNlIjpjYXNlIkxvb2thaGVhZCI6Y2FzZSJOZWdhdGl2ZUxvb2thaGVhZCI6Y2FzZSJTdGFy''@;'; put 'put ''dEFuY2hvciI6Y2FzZSJXb3JkQm91bmRhcnkiOmNhc2UiTm9uV29yZEJvdW5kYXJ5Ijpjb250aW51ZX12YXIgUXQ9U3Q7c3dpdGNoKFF0LnR5cGUpe2Nhc2UiQ2hhcmFjdGVyIjpndChRdC52YWx1ZSxsZSxiZSk7YnJlYWs7Y2FzZSJTZXQiOmlmKCEwPT09UXQuY29tcGxlbWVudCl0aHJvdyBF''@;'; put 'put ''cnJvcigkdCk7UihRdC52YWx1ZSxmdW5jdGlvbihVcil7aWYoIm51bWJlciI9PXR5cGVvZiBVcilndChVcixsZSxiZSk7ZWxzZXt2YXIgcGk9VXI7aWYoITA9PT1iZSlmb3IodmFyIERyPXBpLmZyb207RHI8PXBpLnRvO0RyKyspZ3QoRHIsbGUsYmUpO2Vsc2V7Zm9yKERyPXBpLmZyb207RHI8''@;'; put 'put ''PXBpLnRvJiZEcjxobztEcisrKWd0KERyLGxlLGJlKTtpZihwaS50bz49aG8pZm9yKHZhciB4bz1waS50byxZaT1NYShwaS5mcm9tPj1obz9waS5mcm9tOmhvKSxkcz1NYSh4byksUHM9WWk7UHM8PWRzO1BzKyspbGVbUHNdPVBzfX19KTticmVhaztjYXNlIkdyb3VwIjpHdChRdC52YWx1ZSxs''@;'; put 'put ''ZSxiZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiTm9uIEV4aGF1c3RpdmUgTWF0Y2giKX12YXIgRW49dm9pZCAwIT09UXQucXVhbnRpZmllciYmMD09PVF0LnF1YW50aWZpZXIuYXRMZWFzdDtpZigiR3JvdXAiPT09UXQudHlwZSYmITE9PT1sbihRdCl8fCJHcm91cCIhPT1RdC50eXBl''@;'; put 'put ''JiYhMT09PUVuKWJyZWFrfWJyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoISIpfXJldHVybiBBKGxlKX1mdW5jdGlvbiBndChwZSxsZSxiZSl7dmFyIE9lPU1hKHBlKTtsZVtPZV09T2UsITA9PT1iZSYmZnVuY3Rpb24gWHQocGUsbGUpe3ZhciBiZT1TdHJp''@;'; put 'put ''bmcuZnJvbUNoYXJDb2RlKHBlKSxPZT1iZS50b1VwcGVyQ2FzZSgpO2lmKE9lIT09YmUpbGVbJGU9TWEoT2UuY2hhckNvZGVBdCgwKSldPSRlO2Vsc2V7dmFyICRlLFN0PWJlLnRvTG93ZXJDYXNlKCk7U3QhPT1iZSYmKGxlWyRlPU1hKFN0LmNoYXJDb2RlQXQoMCkpXT0kZSl9fShwZSxsZSl9''@;'; put 'put ''ZnVuY3Rpb24gTHIocGUsbGUpe3JldHVybiBDZShwZS52YWx1ZSxmdW5jdGlvbihiZSl7aWYoIm51bWJlciI9PXR5cGVvZiBiZSlyZXR1cm4gcShsZSxiZSk7dmFyIE9lPWJlO3JldHVybiB2b2lkIDAhPT1DZShsZSxmdW5jdGlvbigkZSl7cmV0dXJuIE9lLmZyb208PSRlJiYkZTw9T2UudG99''@;'; put 'put ''KX0pfWZ1bmN0aW9uIGxuKHBlKXtyZXR1cm4hKCFwZS5xdWFudGlmaWVyfHwwIT09cGUucXVhbnRpZmllci5hdExlYXN0KXx8ISFwZS52YWx1ZSYmKGIocGUudmFsdWUpP0IocGUudmFsdWUsbG4pOmxuKHBlLnZhbHVlKSl9dmFyIE9uPWZ1bmN0aW9uKHBlKXtmdW5jdGlvbiBsZShiZSl7dmFy''@;'; put 'put ''IE9lPXBlLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIE9lLnRhcmdldENoYXJDb2Rlcz1iZSxPZS5mb3VuZD0hMSxPZX1yZXR1cm4gS2UobGUscGUpLGxlLnByb3RvdHlwZS52aXNpdENoaWxkcmVuPWZ1bmN0aW9uKGJlKXtpZighMCE9PXRoaXMuZm91bmQpe3N3aXRjaChiZS50eXBlKXtjYXNl''@;'; put 'put ''Ikxvb2thaGVhZCI6cmV0dXJuIHZvaWQgdGhpcy52aXNpdExvb2thaGVhZChiZSk7Y2FzZSJOZWdhdGl2ZUxvb2thaGVhZCI6cmV0dXJuIHZvaWQgdGhpcy52aXNpdE5lZ2F0aXZlTG9va2FoZWFkKGJlKX1wZS5wcm90b3R5cGUudmlzaXRDaGlsZHJlbi5jYWxsKHRoaXMsYmUpfX0sbGUucHJv''@;'; put 'put ''dG90eXBlLnZpc2l0Q2hhcmFjdGVyPWZ1bmN0aW9uKGJlKXtxKHRoaXMudGFyZ2V0Q2hhckNvZGVzLGJlLnZhbHVlKSYmKHRoaXMuZm91bmQ9ITApfSxsZS5wcm90b3R5cGUudmlzaXRTZXQ9ZnVuY3Rpb24oYmUpe2JlLmNvbXBsZW1lbnQ/dm9pZCAwPT09THIoYmUsdGhpcy50YXJnZXRDaGFy''@;'; put 'put ''Q29kZXMpJiYodGhpcy5mb3VuZD0hMCk6dm9pZCAwIT09THIoYmUsdGhpcy50YXJnZXRDaGFyQ29kZXMpJiYodGhpcy5mb3VuZD0hMCl9LGxlfShjZS5CYXNlUmVnRXhwVmlzaXRvcik7ZnVuY3Rpb24gUXIocGUsbGUpe2lmKGxlIGluc3RhbmNlb2YgUmVnRXhwKXt2YXIgYmU9SmUobGUpLE9l''@;'; put 'put ''PW5ldyBPbihwZSk7cmV0dXJuIE9lLnZpc2l0KGJlKSxPZS5mb3VuZH1yZXR1cm4gdm9pZCAwIT09Q2UobGUsZnVuY3Rpb24oJGUpe3JldHVybiBxKHBlLCRlLmNoYXJDb2RlQXQoMCkpfSl9dmFyIHRyPWZ1bmN0aW9uKCl7dmFyIHBlPWZ1bmN0aW9uKGxlLGJlKXtyZXR1cm4ocGU9T2JqZWN0''@;'; put 'put ''LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKE9lLCRlKXtPZS5fX3Byb3RvX189JGV9fHxmdW5jdGlvbihPZSwkZSl7Zm9yKHZhciBTdCBpbiAkZSkkZS5oYXNPd25Qcm9wZXJ0eShTdCkmJihPZVtTdF09JGVbU3RdKX0pKGxlLGJlKX07''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKGxlLGJlKXtmdW5jdGlvbiBPZSgpe3RoaXMuY29uc3RydWN0b3I9bGV9cGUobGUsYmUpLGxlLnByb3RvdHlwZT1udWxsPT09YmU/T2JqZWN0LmNyZWF0ZShiZSk6KE9lLnByb3RvdHlwZT1iZS5wcm90b3R5cGUsbmV3IE9lKX19KCksSG49IlBBVFRFUk4iLE9vPSJk''@;'; put 'put ''ZWZhdWx0TW9kZSIsdXI9Im1vZGVzIixabj0iYm9vbGVhbiI9PXR5cGVvZiBuZXcgUmVnRXhwKCIoPzopIikuc3RpY2t5O3ZhciBwdD0vW15cXF1bXCRdLyxHZT0vW15cXFtdW1xeXXxeXF4vO2Z1bmN0aW9uIHJyKHBlKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrcGUuc291cmNlKyIpIixw''@;'; put 'put ''ZS5pZ25vcmVDYXNlPyJpIjoiIil9ZnVuY3Rpb24gaHIocGUpe3JldHVybiBuZXcgUmVnRXhwKCIiK3BlLnNvdXJjZSxwZS5pZ25vcmVDYXNlPyJpeSI6InkiKX1mdW5jdGlvbiBqYShwZSl7dmFyIGxlPXBlLlBBVFRFUk47aWYoayhsZSkpcmV0dXJuITE7aWYoSChsZSkpcmV0dXJuITA7aWYo''@;'; put 'put ''VyhsZSwiZXhlYyIpKXJldHVybiEwO2lmKHgobGUpKXJldHVybiExO3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfWZ1bmN0aW9uIGpvKHBlKXtyZXR1cm4hKCF4KHBlKXx8MSE9PXBlLmxlbmd0aCkmJnBlLmNoYXJDb2RlQXQoMCl9dmFyIFhyPXt0ZXN0OmZ1bmN0aW9uKHBl''@;'; put 'put ''KXtmb3IodmFyIGxlPXBlLmxlbmd0aCxiZT10aGlzLmxhc3RJbmRleDtiZTxsZTtiZSsrKXt2YXIgT2U9cGUuY2hhckNvZGVBdChiZSk7aWYoMTA9PT1PZSlyZXR1cm4gdGhpcy5sYXN0SW5kZXg9YmUrMSwhMDtpZigxMz09PU9lKXJldHVybiB0aGlzLmxhc3RJbmRleD0xMD09PXBlLmNoYXJD''@;'; put 'put ''b2RlQXQoYmUrMSk/YmUrMjpiZSsxLCEwfXJldHVybiExfSxsYXN0SW5kZXg6MH07ZnVuY3Rpb24gZWEocGUsbGUpe2lmKFcocGUsIkxJTkVfQlJFQUtTIikpcmV0dXJuITE7aWYoayhwZS5QQVRURVJOKSl7dHJ5e1FyKGxlLHBlLlBBVFRFUk4pfWNhdGNoKGJlKXtyZXR1cm57aXNzdWU6UnMu''@;'; put 'put ''SURFTlRJRllfVEVSTUlOQVRPUixlcnJNc2c6YmUubWVzc2FnZX19cmV0dXJuITF9aWYoeChwZS5QQVRURVJOKSlyZXR1cm4hMTtpZihqYShwZSkpcmV0dXJue2lzc3VlOlJzLkNVU1RPTV9MSU5FX0JSRUFLfTt0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX1mdW5jdGlvbiBj''@;'; put 'put ''YShwZSl7cmV0dXJuIEMocGUsZnVuY3Rpb24oYmUpe3JldHVybiB4KGJlKSYmYmUubGVuZ3RoPjA/YmUuY2hhckNvZGVBdCgwKTpiZX0pfWZ1bmN0aW9uIENpKHBlLGxlLGJlKXt2b2lkIDA9PT1wZVtsZV0/cGVbbGVdPVtiZV06cGVbbGVdLnB1c2goYmUpfXZhciBobz0yNTY7ZnVuY3Rpb24g''@;'; put 'put ''TWEocGUpe3JldHVybiBwZTxobz9wZTprc1twZV19dmFyIGtzPVtdO2Z1bmN0aW9uIHRhKHBlLGxlKXt2YXIgYmU9cGUudG9rZW5UeXBlSWR4O3JldHVybiBiZT09PWxlLnRva2VuVHlwZUlkeHx8ITA9PT1sZS5pc1BhcmVudCYmITA9PT1sZS5jYXRlZ29yeU1hdGNoZXNNYXBbYmVdfWZ1bmN0''@;'; put 'put ''aW9uIE1yKHBlLGxlKXtyZXR1cm4gcGUudG9rZW5UeXBlSWR4PT09bGUudG9rZW5UeXBlSWR4fXZhciBGcz0xLCRpPXt9O2Z1bmN0aW9uIF9zKHBlKXt2YXIgbGU9ZnVuY3Rpb24ganMocGUpe2Zvcih2YXIgbGU9cmUocGUpLGJlPXBlLE9lPSEwO09lOyl7dmFyICRlPUsoYmU9cWUodyhDKGJl''@;'; put 'put ''LGZ1bmN0aW9uKFN0KXtyZXR1cm4gU3QuQ0FURUdPUklFU30pKSksbGUpO2xlPWxlLmNvbmNhdCgkZSksYygkZSk/T2U9ITE6YmU9JGV9cmV0dXJuIGxlfShwZSk7KGZ1bmN0aW9uIENsKHBlKXtSKHBlLGZ1bmN0aW9uKGxlKXtkYyhsZSl8fCgkaVtGc109bGUsbGUudG9rZW5UeXBlSWR4PUZz''@;'; put 'put ''KyspLElsKGxlKSYmIWIobGUuQ0FURUdPUklFUykmJihsZS5DQVRFR09SSUVTPVtsZS5DQVRFR09SSUVTXSksSWwobGUpfHwobGUuQ0FURUdPUklFUz1bXSksZnVuY3Rpb24gZzIocGUpe3JldHVybiBXKHBlLCJjYXRlZ29yeU1hdGNoZXMiKX0obGUpfHwobGUuY2F0ZWdvcnlNYXRjaGVzPVtd''@;'; put 'put ''KSxmdW5jdGlvbiBMYyhwZSl7cmV0dXJuIFcocGUsImNhdGVnb3J5TWF0Y2hlc01hcCIpfShsZSl8fChsZS5jYXRlZ29yeU1hdGNoZXNNYXA9e30pfSl9KShsZSksZnVuY3Rpb24gV24ocGUpe1IocGUsZnVuY3Rpb24obGUpe1FoKFtdLGxlKX0pfShsZSksZnVuY3Rpb24gVGkocGUpe1IocGUs''@;'; put 'put ''ZnVuY3Rpb24obGUpe2xlLmNhdGVnb3J5TWF0Y2hlcz1bXSxSKGxlLmNhdGVnb3J5TWF0Y2hlc01hcCxmdW5jdGlvbihiZSxPZSl7bGUuY2F0ZWdvcnlNYXRjaGVzLnB1c2goJGlbT2VdLnRva2VuVHlwZUlkeCl9KX0pfShsZSksUihsZSxmdW5jdGlvbihiZSl7YmUuaXNQYXJlbnQ9YmUuY2F0''@;'; put 'put ''ZWdvcnlNYXRjaGVzLmxlbmd0aD4wfSl9ZnVuY3Rpb24gUWgocGUsbGUpe1IocGUsZnVuY3Rpb24oYmUpe2xlLmNhdGVnb3J5TWF0Y2hlc01hcFtiZS50b2tlblR5cGVJZHhdPSEwfSksUihsZS5DQVRFR09SSUVTLGZ1bmN0aW9uKGJlKXt2YXIgT2U9cGUuY29uY2F0KGxlKTtxKE9lLGJlKXx8''@;'; put 'put ''UWgoT2UsYmUpfSl9ZnVuY3Rpb24gZGMocGUpe3JldHVybiBXKHBlLCJ0b2tlblR5cGVJZHgiKX1mdW5jdGlvbiBJbChwZSl7cmV0dXJuIFcocGUsIkNBVEVHT1JJRVMiKX1mdW5jdGlvbiBVcyhwZSl7cmV0dXJuIFcocGUsInRva2VuVHlwZUlkeCIpfXZhciBzcD17YnVpbGRVbmFibGVUb1Bv''@;'; put 'put ''cExleGVyTW9kZU1lc3NhZ2U6ZnVuY3Rpb24ocGUpe3JldHVybiJVbmFibGUgdG8gcG9wIExleGVyIE1vZGUgYWZ0ZXIgZW5jb3VudGVyaW5nIFRva2VuIC0+IitwZS5pbWFnZSsiPC0gVGhlIE1vZGUgU3RhY2sgaXMgZW1wdHkifSxidWlsZFVuZXhwZWN0ZWRDaGFyYWN0ZXJzTWVzc2FnZTpm''@;'; put 'put ''dW5jdGlvbihwZSxsZSxiZSxPZSwkZSl7cmV0dXJuInVuZXhwZWN0ZWQgY2hhcmFjdGVyOiAtPiIrcGUuY2hhckF0KGxlKSsiPC0gYXQgb2Zmc2V0OiAiK2xlKyIsIHNraXBwZWQgIitiZSsiIGNoYXJhY3RlcnMuIn19LFJzPWZ1bmN0aW9uKHBlKXtyZXR1cm4gcGVbcGUuTUlTU0lOR19QQVRU''@;'; put 'put ''RVJOPTBdPSJNSVNTSU5HX1BBVFRFUk4iLHBlW3BlLklOVkFMSURfUEFUVEVSTj0xXT0iSU5WQUxJRF9QQVRURVJOIixwZVtwZS5FT0lfQU5DSE9SX0ZPVU5EPTJdPSJFT0lfQU5DSE9SX0ZPVU5EIixwZVtwZS5VTlNVUFBPUlRFRF9GTEFHU19GT1VORD0zXT0iVU5TVVBQT1JURURfRkxBR1Nf''@;'; put 'put ''Rk9VTkQiLHBlW3BlLkRVUExJQ0FURV9QQVRURVJOU19GT1VORD00XT0iRFVQTElDQVRFX1BBVFRFUk5TX0ZPVU5EIixwZVtwZS5JTlZBTElEX0dST1VQX1RZUEVfRk9VTkQ9NV09IklOVkFMSURfR1JPVVBfVFlQRV9GT1VORCIscGVbcGUuUFVTSF9NT0RFX0RPRVNfTk9UX0VYSVNUPTZdPSJQ''@;'; put 'put ''VVNIX01PREVfRE9FU19OT1RfRVhJU1QiLHBlW3BlLk1VTFRJX01PREVfTEVYRVJfV0lUSE9VVF9ERUZBVUxUX01PREU9N109Ik1VTFRJX01PREVfTEVYRVJfV0lUSE9VVF9ERUZBVUxUX01PREUiLHBlW3BlLk1VTFRJX01PREVfTEVYRVJfV0lUSE9VVF9NT0RFU19QUk9QRVJUWT04XT0iTVVM''@;'; put 'put ''VElfTU9ERV9MRVhFUl9XSVRIT1VUX01PREVTX1BST1BFUlRZIixwZVtwZS5NVUxUSV9NT0RFX0xFWEVSX0RFRkFVTFRfTU9ERV9WQUxVRV9ET0VTX05PVF9FWElTVD05XT0iTVVMVElfTU9ERV9MRVhFUl9ERUZBVUxUX01PREVfVkFMVUVfRE9FU19OT1RfRVhJU1QiLHBlW3BlLkxFWEVSX0RF''@;'; put 'put ''RklOSVRJT05fQ0FOTk9UX0NPTlRBSU5fVU5ERUZJTkVEPTEwXT0iTEVYRVJfREVGSU5JVElPTl9DQU5OT1RfQ09OVEFJTl9VTkRFRklORUQiLHBlW3BlLlNPSV9BTkNIT1JfRk9VTkQ9MTFdPSJTT0lfQU5DSE9SX0ZPVU5EIixwZVtwZS5FTVBUWV9NQVRDSF9QQVRURVJOPTEyXT0iRU1QVFlf''@;'; put 'put ''TUFUQ0hfUEFUVEVSTiIscGVbcGUuTk9fTElORV9CUkVBS1NfRkxBR1M9MTNdPSJOT19MSU5FX0JSRUFLU19GTEFHUyIscGVbcGUuVU5SRUFDSEFCTEVfUEFUVEVSTj0xNF09IlVOUkVBQ0hBQkxFX1BBVFRFUk4iLHBlW3BlLklERU5USUZZX1RFUk1JTkFUT1I9MTVdPSJJREVOVElGWV9URVJN''@;'; put 'put ''SU5BVE9SIixwZVtwZS5DVVNUT01fTElORV9CUkVBSz0xNl09IkNVU1RPTV9MSU5FX0JSRUFLIixwZX0oUnN8fHt9KSxMMD17ZGVmZXJEZWZpbml0aW9uRXJyb3JzSGFuZGxpbmc6ITEscG9zaXRpb25UcmFja2luZzoiZnVsbCIsbGluZVRlcm1pbmF0b3JzUGF0dGVybjovXG58XHJcbj8vZyxs''@;'; put 'put ''aW5lVGVybWluYXRvckNoYXJhY3RlcnM6WyJcbiIsIlxyIl0sZW5zdXJlT3B0aW1pemF0aW9uczohMSxzYWZlTW9kZTohMSxlcnJvck1lc3NhZ2VQcm92aWRlcjpzcCx0cmFjZUluaXRQZXJmOiExLHNraXBWYWxpZGF0aW9uczohMX07T2JqZWN0LmZyZWV6ZShMMCk7dmFyIEp1PWZ1bmN0aW9u''@;'; put 'put ''KCl7ZnVuY3Rpb24gcGUobGUsYmUpe3ZhciBPZT10aGlzO2lmKHZvaWQgMD09PWJlJiYoYmU9TDApLHRoaXMubGV4ZXJEZWZpbml0aW9uPWxlLHRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzPVtdLHRoaXMubGV4ZXJEZWZpbml0aW9uV2FybmluZz1bXSx0aGlzLnBhdHRlcm5JZHhUb0NvbmZp''@;'; put 'put ''Zz17fSx0aGlzLmNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWc9e30sdGhpcy5tb2Rlcz1bXSx0aGlzLmVtcHR5R3JvdXBzPXt9LHRoaXMuY29uZmlnPXZvaWQgMCx0aGlzLnRyYWNrU3RhcnRMaW5lcz0hMCx0aGlzLnRyYWNrRW5kTGluZXM9ITAsdGhpcy5oYXNDdXN0b209ITEsdGhpcy5j''@;'; put 'put ''YW5Nb2RlQmVPcHRpbWl6ZWQ9e30sImJvb2xlYW4iPT10eXBlb2YgYmUpdGhyb3cgRXJyb3IoIlRoZSBzZWNvbmQgYXJndW1lbnQgdG8gdGhlIExleGVyIGNvbnN0cnVjdG9yIGlzIG5vdyBhbiBJTGV4ZXJDb25maWcgT2JqZWN0LlxuYSBib29sZWFuIDJuZCBhcmd1bWVudCBpcyBubyBsb25n''@;'; put 'put ''ZXIgc3VwcG9ydGVkIik7dGhpcy5jb25maWc9b3QoTDAsYmUpO3ZhciAkZT10aGlzLmNvbmZpZy50cmFjZUluaXRQZXJmOyEwPT09JGU/KHRoaXMudHJhY2VJbml0TWF4SWRlbnQ9MS8wLHRoaXMudHJhY2VJbml0UGVyZj0hMCk6Im51bWJlciI9PXR5cGVvZiAkZSYmKHRoaXMudHJhY2VJbml0''@;'; put 'put ''TWF4SWRlbnQ9JGUsdGhpcy50cmFjZUluaXRQZXJmPSEwKSx0aGlzLnRyYWNlSW5pdEluZGVudD0tMSx0aGlzLlRSQUNFX0lOSVQoIkxleGVyIENvbnN0cnVjdG9yIixmdW5jdGlvbigpe3ZhciBTdCxRdD0hMDtPZS5UUkFDRV9JTklUKCJMZXhlciBDb25maWcgaGFuZGxpbmciLGZ1bmN0aW9u''@;'; put 'put ''KCl7aWYoT2UuY29uZmlnLmxpbmVUZXJtaW5hdG9yc1BhdHRlcm49PT1MMC5saW5lVGVybWluYXRvcnNQYXR0ZXJuKU9lLmNvbmZpZy5saW5lVGVybWluYXRvcnNQYXR0ZXJuPVhyO2Vsc2UgaWYoT2UuY29uZmlnLmxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVycz09PUwwLmxpbmVUZXJtaW5hdG9y''@;'; put 'put ''Q2hhcmFjdGVycyl0aHJvdyBFcnJvcigiRXJyb3I6IE1pc3NpbmcgPGxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVycz4gcHJvcGVydHkgb24gdGhlIExleGVyIGNvbmZpZy5cblx0Rm9yIGRldGFpbHMgU2VlOiBodHRwczovL3NhcC5naXRodWIuaW8vY2hldnJvdGFpbi9kb2NzL2d1aWRlL3Jlc29s''@;'; put 'put ''dmluZ19sZXhlcl9lcnJvcnMuaHRtbCNNSVNTSU5HX0xJTkVfVEVSTV9DSEFSUyIpO2lmKGJlLnNhZmVNb2RlJiZiZS5lbnN1cmVPcHRpbWl6YXRpb25zKXRocm93IEVycm9yKCcic2FmZU1vZGUiIGFuZCAiZW5zdXJlT3B0aW1pemF0aW9ucyIgZmxhZ3MgYXJlIG11dHVhbGx5IGV4Y2x1c2l2''@;'; put 'put ''ZS4nKTtPZS50cmFja1N0YXJ0TGluZXM9L2Z1bGx8b25seVN0YXJ0L2kudGVzdChPZS5jb25maWcucG9zaXRpb25UcmFja2luZyksT2UudHJhY2tFbmRMaW5lcz0vZnVsbC9pLnRlc3QoT2UuY29uZmlnLnBvc2l0aW9uVHJhY2tpbmcpLGIobGUpPygoU3Q9e21vZGVzOnt9fSkubW9kZXNbT29d''@;'; put 'put ''PXJlKGxlKSxTdFtPb109T28pOihRdD0hMSxTdD1tZShsZSkpfSksITE9PT1PZS5jb25maWcuc2tpcFZhbGlkYXRpb25zJiYoT2UuVFJBQ0VfSU5JVCgicGVyZm9ybVJ1bnRpbWVDaGVja3MiLGZ1bmN0aW9uKCl7T2UubGV4ZXJEZWZpbml0aW9uRXJyb3JzPU9lLmxleGVyRGVmaW5pdGlvbkVy''@;'; put 'put ''cm9ycy5jb25jYXQoZnVuY3Rpb24gcG8ocGUpe3ZhciBPZT1bXTtyZXR1cm4gVyhwZSxPbyl8fE9lLnB1c2goe21lc3NhZ2U6IkEgTXVsdGlNb2RlIExleGVyIGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRob3V0IGEgPCIrT28rIj4gcHJvcGVydHkgaW4gaXRzIGRlZmluaXRpb25cbiIsdHlw''@;'; put 'put ''ZTpScy5NVUxUSV9NT0RFX0xFWEVSX1dJVEhPVVRfREVGQVVMVF9NT0RFfSksVyhwZSx1cil8fE9lLnB1c2goe21lc3NhZ2U6IkEgTXVsdGlNb2RlIExleGVyIGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRob3V0IGEgPG1vZGVzPiBwcm9wZXJ0eSBpbiBpdHMgZGVmaW5pdGlvblxuIix0eXBl''@;'; put 'put ''OlJzLk1VTFRJX01PREVfTEVYRVJfV0lUSE9VVF9NT0RFU19QUk9QRVJUWX0pLFcocGUsdXIpJiZXKHBlLE9vKSYmIVcocGUubW9kZXMscGUuZGVmYXVsdE1vZGUpJiZPZS5wdXNoKHttZXNzYWdlOiJBIE11bHRpTW9kZSBMZXhlciBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhICIrT28r''@;'; put 'put ''IjogPCIrcGUuZGVmYXVsdE1vZGUrIj53aGljaCBkb2VzIG5vdCBleGlzdFxuIix0eXBlOlJzLk1VTFRJX01PREVfTEVYRVJfREVGQVVMVF9NT0RFX1ZBTFVFX0RPRVNfTk9UX0VYSVNUfSksVyhwZSx1cikmJlIocGUubW9kZXMsZnVuY3Rpb24oJGUsU3Qpe1IoJGUsZnVuY3Rpb24oUXQsRW4p''@;'; put 'put ''e1UoUXQpJiZPZS5wdXNoKHttZXNzYWdlOiJBIExleGVyIGNhbm5vdCBiZSBpbml0aWFsaXplZCB1c2luZyBhbiB1bmRlZmluZWQgVG9rZW4gVHlwZS4gTW9kZTo8IitTdCsiPiBhdCBpbmRleDogPCIrRW4rIj5cbiIsdHlwZTpScy5MRVhFUl9ERUZJTklUSU9OX0NBTk5PVF9DT05UQUlOX1VO''@;'; put 'put ''REVGSU5FRH0pfSl9KSxPZX0oU3QpKX0pLE9lLlRSQUNFX0lOSVQoInBlcmZvcm1XYXJuaW5nUnVudGltZUNoZWNrcyIsZnVuY3Rpb24oKXtPZS5sZXhlckRlZmluaXRpb25XYXJuaW5nPU9lLmxleGVyRGVmaW5pdGlvbldhcm5pbmcuY29uY2F0KGZ1bmN0aW9uIHZuKHBlLGxlLGJlKXt2YXIg''@;'; put 'put ''T2U9W10sJGU9ITEsU3Q9cWUodyhmdW5jdGlvbiB2KHBlLGxlKXtmb3IodmFyIGJlPVtdLE9lPXMocGUpLCRlPTA7JGU8T2UubGVuZ3RoOyRlKyspe3ZhciBTdD1PZVskZV07YmUucHVzaChsZS5jYWxsKG51bGwscGVbU3RdLFN0KSl9cmV0dXJuIGJlfShwZS5tb2RlcyxmdW5jdGlvbihjcil7''@;'; put 'put ''cmV0dXJuIGNyfSkpKSxRdD1ZKFN0LGZ1bmN0aW9uKGNyKXtyZXR1cm4gY3JbSG5dPT09SnUuTkF9KSxFbj1jYShiZSk7cmV0dXJuIGxlJiZSKFF0LGZ1bmN0aW9uKGNyKXt2YXIgVXI9ZWEoY3IsRW4pO2lmKCExIT09VXIpe3ZhciBwaT1mdW5jdGlvbiByYShwZSxsZSl7aWYobGUuaXNzdWU9''@;'; put 'put ''PT1Scy5JREVOVElGWV9URVJNSU5BVE9SKXJldHVybiJXYXJuaW5nOiB1bmFibGUgdG8gaWRlbnRpZnkgbGluZSB0ZXJtaW5hdG9yIHVzYWdlIGluIHBhdHRlcm4uXG5cdFRoZSBwcm9ibGVtIGlzIGluIHRoZSA8IitwZS5uYW1lKyI+IFRva2VuIFR5cGVcblx0IFJvb3QgY2F1c2U6ICIrbGUu''@;'; put 'put ''ZXJyTXNnKyIuXG5cdEZvciBkZXRhaWxzIFNlZTogaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL2NoZXZyb3RhaW4vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjSURFTlRJRllfVEVSTUlOQVRPUiI7aWYobGUuaXNzdWU9PT1Scy5DVVNUT01fTElORV9CUkVBSylyZXR1cm4i''@;'; put 'put ''V2FybmluZzogQSBDdXN0b20gVG9rZW4gUGF0dGVybiBzaG91bGQgc3BlY2lmeSB0aGUgPGxpbmVfYnJlYWtzPiBvcHRpb24uXG5cdFRoZSBwcm9ibGVtIGlzIGluIHRoZSA8IitwZS5uYW1lKyI+IFRva2VuIFR5cGVcblx0Rm9yIGRldGFpbHMgU2VlOiBodHRwczovL3NhcC5naXRodWIuaW8v''@;'; put 'put ''Y2hldnJvdGFpbi9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNDVVNUT01fTElORV9CUkVBSyI7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9KGNyLFVyKTtPZS5wdXNoKHttZXNzYWdlOnBpLHR5cGU6VXIuaXNzdWUsdG9rZW5UeXBlOmNyfSl9ZWxz''@;'; put 'put ''ZSBXKGNyLCJMSU5FX0JSRUFLUyIpPyEwPT09Y3IuTElORV9CUkVBS1MmJigkZT0hMCk6UXIoRW4sY3IuUEFUVEVSTikmJigkZT0hMCl9KSxsZSYmISRlJiZPZS5wdXNoKHttZXNzYWdlOiJXYXJuaW5nOiBObyBMSU5FX0JSRUFLUyBGb3VuZC5cblx0VGhpcyBMZXhlciBoYXMgYmVlbiBkZWZp''@;'; put 'put ''bmVkIHRvIHRyYWNrIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbixcblx0QnV0IG5vbmUgb2YgdGhlIFRva2VuIFR5cGVzIGNhbiBiZSBpZGVudGlmaWVkIGFzIG1hdGNoaW5nIGEgbGluZSB0ZXJtaW5hdG9yLlxuXHRTZWUgaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL2NoZXZyb3RhaW4vZG9j''@;'; put 'put ''cy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjTElORV9CUkVBS1MgXG5cdGZvciBkZXRhaWxzLiIsdHlwZTpScy5OT19MSU5FX0JSRUFLU19GTEFHU30pLE9lfShTdCxPZS50cmFja1N0YXJ0TGluZXMsT2UuY29uZmlnLmxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVycykpfSkpLFN0''@;'; put 'put ''Lm1vZGVzPVN0Lm1vZGVzP1N0Lm1vZGVzOnt9LFIoU3QubW9kZXMsZnVuY3Rpb24ocGksRHIpe1N0Lm1vZGVzW0RyXT1ZKHBpLGZ1bmN0aW9uKEppKXtyZXR1cm4gVShKaSl9KX0pO3ZhciBFbj1zKFN0Lm1vZGVzKTtpZihSKFN0Lm1vZGVzLGZ1bmN0aW9uKHBpLERyKXtPZS5UUkFDRV9JTklU''@;'; put 'put ''KCJNb2RlOiA8IitEcisiPiBwcm9jZXNzaW5nIixmdW5jdGlvbigpe3ZhciBKaTtPZS5tb2Rlcy5wdXNoKERyKSwhMT09PU9lLmNvbmZpZy5za2lwVmFsaWRhdGlvbnMmJk9lLlRSQUNFX0lOSVQoInZhbGlkYXRlUGF0dGVybnMiLGZ1bmN0aW9uKCl7T2UubGV4ZXJEZWZpbml0aW9uRXJyb3Jz''@;'; put 'put ''PU9lLmxleGVyRGVmaW5pdGlvbkVycm9ycy5jb25jYXQoZnVuY3Rpb24gQXIocGUsbGUpe3ZhciBiZT1bXSxPZT1mdW5jdGlvbiBadChwZSl7dmFyIGxlPXoocGUsZnVuY3Rpb24oJGUpe3JldHVybiFXKCRlLEhuKX0pLGJlPUMobGUsZnVuY3Rpb24oJGUpe3JldHVybnttZXNzYWdlOiJUb2tl''@;'; put 'put ''biBUeXBlOiAtPiIrJGUubmFtZSsiPC0gbWlzc2luZyBzdGF0aWMgJ1BBVFRFUk4nIHByb3BlcnR5Iix0eXBlOlJzLk1JU1NJTkdfUEFUVEVSTix0b2tlblR5cGVzOlskZV19fSk7cmV0dXJue2Vycm9yczpiZSx2YWxpZDpLKHBlLGxlKX19KHBlKTtiZT1iZS5jb25jYXQoT2UuZXJyb3JzKTt2''@;'; put 'put ''YXIgJGU9ZnVuY3Rpb24gTm4ocGUpe3ZhciBsZT16KHBlLGZ1bmN0aW9uKCRlKXt2YXIgU3Q9JGVbSG5dO3JldHVybiEoayhTdCl8fEgoU3QpfHxXKFN0LCJleGVjIil8fHgoU3QpKX0pLGJlPUMobGUsZnVuY3Rpb24oJGUpe3JldHVybnttZXNzYWdlOiJUb2tlbiBUeXBlOiAtPiIrJGUubmFt''@;'; put 'put ''ZSsiPC0gc3RhdGljICdQQVRURVJOJyBjYW4gb25seSBiZSBhIFJlZ0V4cCwgYSBGdW5jdGlvbiBtYXRjaGluZyB0aGUge0N1c3RvbVBhdHRlcm5NYXRjaGVyRnVuY30gdHlwZSBvciBhbiBPYmplY3QgbWF0Y2hpbmcgdGhlIHtJQ3VzdG9tUGF0dGVybn0gaW50ZXJmYWNlLiIsdHlwZTpScy5J''@;'; put 'put ''TlZBTElEX1BBVFRFUk4sdG9rZW5UeXBlczpbJGVdfX0pO3JldHVybntlcnJvcnM6YmUsdmFsaWQ6SyhwZSxsZSl9fShPZS52YWxpZCksU3Q9JGUudmFsaWQ7cmV0dXJuIGJlPShiZT1iZS5jb25jYXQoJGUuZXJyb3JzKSkuY29uY2F0KGZ1bmN0aW9uIF9uKHBlKXt2YXIgbGU9W10sYmU9eihw''@;'; put 'put ''ZSxmdW5jdGlvbihPZSl7cmV0dXJuIGsoT2VbSG5dKX0pO3JldHVybiBsZT1sZS5jb25jYXQoZnVuY3Rpb24gcG4ocGUpe3ZhciBsZT1mdW5jdGlvbigkZSl7ZnVuY3Rpb24gU3QoKXt2YXIgUXQ9bnVsbCE9PSRlJiYkZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIFF0LmZv''@;'; put 'put ''dW5kPSExLFF0fXJldHVybiB0cihTdCwkZSksU3QucHJvdG90eXBlLnZpc2l0RW5kQW5jaG9yPWZ1bmN0aW9uKFF0KXt0aGlzLmZvdW5kPSEwfSxTdH0oY2UuQmFzZVJlZ0V4cFZpc2l0b3IpLGJlPXoocGUsZnVuY3Rpb24oJGUpe3ZhciBTdD0kZVtIbl07dHJ5e3ZhciBRdD1KZShTdCksRW49''@;'; put 'put ''bmV3IGxlO3JldHVybiBFbi52aXNpdChRdCksRW4uZm91bmR9Y2F0Y2h7cmV0dXJuIHB0LnRlc3QoU3Quc291cmNlKX19KSxPZT1DKGJlLGZ1bmN0aW9uKCRlKXtyZXR1cm57bWVzc2FnZToiVW5leHBlY3RlZCBSZWdFeHAgQW5jaG9yIEVycm9yOlxuXHRUb2tlbiBUeXBlOiAtPiIrJGUubmFt''@;'; put 'put ''ZSsiPC0gc3RhdGljICdQQVRURVJOJyBjYW5ub3QgY29udGFpbiBlbmQgb2YgaW5wdXQgYW5jaG9yICckJ1xuXHRTZWUgc2FwLmdpdGh1Yi5pby9jaGV2cm90YWluL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI0FOQ0hPUlNcdGZvciBkZXRhaWxzLiIsdHlwZTpScy5F''@;'; put 'put ''T0lfQU5DSE9SX0ZPVU5ELHRva2VuVHlwZXM6WyRlXX19KTtyZXR1cm4gT2V9KGJlKSksbGU9bGUuY29uY2F0KGZ1bmN0aW9uIFV0KHBlKXt2YXIgbGU9ZnVuY3Rpb24oJGUpe2Z1bmN0aW9uIFN0KCl7dmFyIFF0PW51bGwhPT0kZSYmJGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3Jl''@;'; put 'put ''dHVybiBRdC5mb3VuZD0hMSxRdH1yZXR1cm4gdHIoU3QsJGUpLFN0LnByb3RvdHlwZS52aXNpdFN0YXJ0QW5jaG9yPWZ1bmN0aW9uKFF0KXt0aGlzLmZvdW5kPSEwfSxTdH0oY2UuQmFzZVJlZ0V4cFZpc2l0b3IpLGJlPXoocGUsZnVuY3Rpb24oJGUpe3ZhciBTdD0kZVtIbl07dHJ5e3ZhciBR''@;'; put 'put ''dD1KZShTdCksRW49bmV3IGxlO3JldHVybiBFbi52aXNpdChRdCksRW4uZm91bmR9Y2F0Y2h7cmV0dXJuIEdlLnRlc3QoU3Quc291cmNlKX19KSxPZT1DKGJlLGZ1bmN0aW9uKCRlKXtyZXR1cm57bWVzc2FnZToiVW5leHBlY3RlZCBSZWdFeHAgQW5jaG9yIEVycm9yOlxuXHRUb2tlbiBUeXBl''@;'; put 'put ''OiAtPiIrJGUubmFtZSsiPC0gc3RhdGljICdQQVRURVJOJyBjYW5ub3QgY29udGFpbiBzdGFydCBvZiBpbnB1dCBhbmNob3IgJ14nXG5cdFNlZSBodHRwczovL3NhcC5naXRodWIuaW8vY2hldnJvdGFpbi9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNBTkNIT1JTXHRm''@;'; put 'put ''b3IgZGV0YWlscy4iLHR5cGU6UnMuU09JX0FOQ0hPUl9GT1VORCx0b2tlblR5cGVzOlskZV19fSk7cmV0dXJuIE9lfShiZSkpLGxlPWxlLmNvbmNhdChmdW5jdGlvbiB2cihwZSl7dmFyIGxlPXoocGUsZnVuY3Rpb24oT2Upe3ZhciAkZT1PZVtIbl07cmV0dXJuICRlIGluc3RhbmNlb2YgUmVn''@;'; put 'put ''RXhwJiYoJGUubXVsdGlsaW5lfHwkZS5nbG9iYWwpfSksYmU9QyhsZSxmdW5jdGlvbihPZSl7cmV0dXJue21lc3NhZ2U6IlRva2VuIFR5cGU6IC0+IitPZS5uYW1lKyI8LSBzdGF0aWMgJ1BBVFRFUk4nIG1heSBOT1QgY29udGFpbiBnbG9iYWwoJ2cnKSBvciBtdWx0aWxpbmUoJ20nKSIsdHlw''@;'; put 'put ''ZTpScy5VTlNVUFBPUlRFRF9GTEFHU19GT1VORCx0b2tlblR5cGVzOltPZV19fSk7cmV0dXJuIGJlfShiZSkpLGxlPWxlLmNvbmNhdChmdW5jdGlvbiB4dChwZSl7dmFyIGxlPVtdLGJlPUMocGUsZnVuY3Rpb24oU3Qpe3JldHVybiBrZShwZSxmdW5jdGlvbihRdCxFbil7cmV0dXJuIFN0LlBB''@;'; put 'put ''VFRFUk4uc291cmNlPT09RW4uUEFUVEVSTi5zb3VyY2UmJiFxKGxlLEVuKSYmRW4uUEFUVEVSTiE9PUp1Lk5BJiYobGUucHVzaChFbiksUXQucHVzaChFbikpLFF0fSxbXSl9KSxPZT16KGJlPXFlKGJlKSxmdW5jdGlvbihTdCl7cmV0dXJuIFN0Lmxlbmd0aD4xfSksJGU9QyhPZSxmdW5jdGlv''@;'; put 'put ''bihTdCl7dmFyIFF0PUMoU3QsZnVuY3Rpb24oY3Ipe3JldHVybiBjci5uYW1lfSk7cmV0dXJue21lc3NhZ2U6IlRoZSBzYW1lIFJlZ0V4cCBwYXR0ZXJuIC0+IitTKFN0KS5QQVRURVJOKyI8LWhhcyBiZWVuIHVzZWQgaW4gYWxsIG9mIHRoZSBmb2xsb3dpbmcgVG9rZW4gVHlwZXM6ICIrUXQu''@;'; put 'put ''am9pbigiLCAiKSsiIDwtIix0eXBlOlJzLkRVUExJQ0FURV9QQVRURVJOU19GT1VORCx0b2tlblR5cGVzOlN0fX0pO3JldHVybiAkZX0oYmUpKSxsZT1sZS5jb25jYXQoZnVuY3Rpb24gTWkocGUpe3ZhciBsZT16KHBlLGZ1bmN0aW9uKE9lKXtyZXR1cm4gT2VbSG5dLnRlc3QoIiIpfSksYmU9''@;'; put 'put ''QyhsZSxmdW5jdGlvbihPZSl7cmV0dXJue21lc3NhZ2U6IlRva2VuIFR5cGU6IC0+IitPZS5uYW1lKyI8LSBzdGF0aWMgJ1BBVFRFUk4nIG11c3Qgbm90IG1hdGNoIGFuIGVtcHR5IHN0cmluZyIsdHlwZTpScy5FTVBUWV9NQVRDSF9QQVRURVJOLHRva2VuVHlwZXM6W09lXX19KTtyZXR1cm4g''@;'; put 'put ''YmV9KGJlKSksbGV9KFN0KSksYmU9YmUuY29uY2F0KGZ1bmN0aW9uIEJ0KHBlKXt2YXIgbGU9eihwZSxmdW5jdGlvbihPZSl7aWYoIVcoT2UsIkdST1VQIikpcmV0dXJuITE7dmFyICRlPU9lLkdST1VQO3JldHVybiAkZSE9PUp1LlNLSVBQRUQmJiRlIT09SnUuTkEmJiF4KCRlKX0pLGJlPUMo''@;'; put 'put ''bGUsZnVuY3Rpb24oT2Upe3JldHVybnttZXNzYWdlOiJUb2tlbiBUeXBlOiAtPiIrT2UubmFtZSsiPC0gc3RhdGljICdHUk9VUCcgY2FuIG9ubHkgYmUgTGV4ZXIuU0tJUFBFRC9MZXhlci5OQS9BIFN0cmluZyIsdHlwZTpScy5JTlZBTElEX0dST1VQX1RZUEVfRk9VTkQsdG9rZW5UeXBlczpb''@;'; put 'put ''T2VdfX0pO3JldHVybiBiZX0oU3QpKSxiZT1iZS5jb25jYXQoZnVuY3Rpb24gem4ocGUsbGUpe3ZhciBiZT16KHBlLGZ1bmN0aW9uKCRlKXtyZXR1cm4gdm9pZCAwIT09JGUuUFVTSF9NT0RFJiYhcShsZSwkZS5QVVNIX01PREUpfSksT2U9QyhiZSxmdW5jdGlvbigkZSl7cmV0dXJue21lc3Nh''@;'; put 'put ''Z2U6IlRva2VuIFR5cGU6IC0+IiskZS5uYW1lKyI8LSBzdGF0aWMgJ1BVU0hfTU9ERScgdmFsdWUgY2Fubm90IHJlZmVyIHRvIGEgTGV4ZXIgTW9kZSAtPiIrJGUuUFVTSF9NT0RFKyI8LXdoaWNoIGRvZXMgbm90IGV4aXN0Iix0eXBlOlJzLlBVU0hfTU9ERV9ET0VTX05PVF9FWElTVCx0b2tl''@;'; put 'put ''blR5cGVzOlskZV19fSk7cmV0dXJuIE9lfShTdCxsZSkpLGJlPWJlLmNvbmNhdChmdW5jdGlvbiBHbihwZSl7dmFyIGxlPVtdLGJlPWtlKHBlLGZ1bmN0aW9uKE9lLCRlLFN0KXt2YXIgUXQ9JGUuUEFUVEVSTjtyZXR1cm4gUXQ9PT1KdS5OQXx8KHgoUXQpP09lLnB1c2goe3N0cjpRdCxpZHg6''@;'; put 'put ''U3QsdG9rZW5UeXBlOiRlfSk6ayhRdCkmJmZ1bmN0aW9uIHZpKHBlKXtyZXR1cm4gdm9pZCAwPT09Q2UoWyIuIiwiXFwiLCJbIiwiXSIsInwiLCJeIiwiJCIsIigiLCIpIiwiPyIsIioiLCIrIiwieyJdLGZ1bmN0aW9uKGJlKXtyZXR1cm4tMSE9PXBlLnNvdXJjZS5pbmRleE9mKGJlKX0pfShR''@;'; put 'put ''dCkmJk9lLnB1c2goe3N0cjpRdC5zb3VyY2UsaWR4OlN0LHRva2VuVHlwZTokZX0pKSxPZX0sW10pO3JldHVybiBSKHBlLGZ1bmN0aW9uKE9lLCRlKXtSKGJlLGZ1bmN0aW9uKFN0KXt2YXIgY3I9U3QudG9rZW5UeXBlOyRlPFN0LmlkeCYmZnVuY3Rpb24geW4ocGUsbGUpe2lmKGsobGUpKXt2''@;'; put 'put ''YXIgYmU9bGUuZXhlYyhwZSk7cmV0dXJuIG51bGwhPT1iZSYmMD09PWJlLmluZGV4fWlmKEgobGUpKXJldHVybiBsZShwZSwwLFtdLHt9KTtpZihXKGxlLCJleGVjIikpcmV0dXJuIGxlLmV4ZWMocGUsMCxbXSx7fSk7aWYoInN0cmluZyI9PXR5cGVvZiBsZSlyZXR1cm4gbGU9PT1wZTt0aHJv''@;'; put 'put ''dyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX0oU3Quc3RyLE9lLlBBVFRFUk4pJiZsZS5wdXNoKHttZXNzYWdlOiJUb2tlbjogLT4iK2NyLm5hbWUrIjwtIGNhbiBuZXZlciBiZSBtYXRjaGVkLlxuQmVjYXVzZSBpdCBhcHBlYXJzIEFGVEVSIHRoZSBUb2tlbiBUeXBlIC0+IitPZS5u''@;'; put 'put ''YW1lKyI8LWluIHRoZSBsZXhlcidzIGRlZmluaXRpb24uXG5TZWUgaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL2NoZXZyb3RhaW4vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjVU5SRUFDSEFCTEUiLHR5cGU6UnMuVU5SRUFDSEFCTEVfUEFUVEVSTix0b2tlblR5cGVzOltP''@;'; put 'put ''ZSxjcl19KX0pfSksbGV9KFN0KSksYmV9KHBpLEVuKSl9KSxjKE9lLmxleGVyRGVmaW5pdGlvbkVycm9ycykmJihfcyhwaSksT2UuVFJBQ0VfSU5JVCgiYW5hbHl6ZVRva2VuVHlwZXMiLGZ1bmN0aW9uKCl7Smk9ZnVuY3Rpb24gVHQocGUsbGUpe3ZhciBPZSxiZT0obGU9X2UobGUse3VzZVN0''@;'; put 'put ''aWNreTpabixkZWJ1ZzohMSxzYWZlTW9kZTohMSxwb3NpdGlvblRyYWNraW5nOiJmdWxsIixsaW5lVGVybWluYXRvckNoYXJhY3RlcnM6WyJcciIsIlxuIl0sdHJhY2VyOmZ1bmN0aW9uKElvLFppKXtyZXR1cm4gWmkoKX19KSkudHJhY2VyO2JlKCJpbml0Q2hhckNvZGVUb09wdGltaXplZElu''@;'; put 'put ''ZGV4TWFwIixmdW5jdGlvbigpeyFmdW5jdGlvbiBCaSgpe2lmKGMoa3MpKXtrcz1uZXcgQXJyYXkoNjU1MzYpO2Zvcih2YXIgcGU9MDtwZTw2NTUzNjtwZSsrKWtzW3BlXT1wZT4yNTU/MjU1K35+KHBlLzI1NSk6cGV9fSgpfSksYmUoIlJlamVjdCBMZXhlci5OQSIsZnVuY3Rpb24oKXtPZT1Z''@;'; put 'put ''KHBlLGZ1bmN0aW9uKElvKXtyZXR1cm4gSW9bSG5dPT09SnUuTkF9KX0pO3ZhciBTdCxRdCxFbixjcixVcixwaSxEcixKaSx4byxZaSxkcywkZT0hMTtiZSgiVHJhbnNmb3JtIFBhdHRlcm5zIixmdW5jdGlvbigpeyRlPSExLFN0PUMoT2UsZnVuY3Rpb24oSW8pe3ZhciBaaT1Jb1tIbl07aWYo''@;'; put 'put ''ayhaaSkpe3ZhciBnbD1aaS5zb3VyY2U7cmV0dXJuIDE9PT1nbC5sZW5ndGgmJiJeIiE9PWdsJiYiJCIhPT1nbCYmIi4iIT09Z2w/Z2w6MiE9PWdsLmxlbmd0aHx8IlxcIiE9PWdsWzBdfHxxKFsiZCIsIkQiLCJzIiwiUyIsInQiLCJyIiwibiIsInQiLCIwIiwiYyIsImIiLCJCIiwiZiIsInYi''@;'; put 'put ''LCJ3IiwiVyJdLGdsWzFdKT9sZS51c2VTdGlja3k/aHIoWmkpOnJyKFppKTpnbFsxXX1pZihIKFppKSlyZXR1cm4gJGU9ITAse2V4ZWM6Wml9O2lmKFcoWmksImV4ZWMiKSlyZXR1cm4gJGU9ITAsWmk7aWYoInN0cmluZyI9PXR5cGVvZiBaaSl7aWYoMT09PVppLmxlbmd0aClyZXR1cm4gWmk7''@;'; put 'put ''dmFyIGpsPVppLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIiksVjE9bmV3IFJlZ0V4cChqbCk7cmV0dXJuIGxlLnVzZVN0aWNreT9ocihWMSk6cnIoVjEpfXRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfSl9KSxiZSgibWlzYyBtYXBwaW5nIixmdW5jdGlv''@;'; put 'put ''bigpe1F0PUMoT2UsZnVuY3Rpb24oSW8pe3JldHVybiBJby50b2tlblR5cGVJZHh9KSxFbj1DKE9lLGZ1bmN0aW9uKElvKXt2YXIgWmk9SW8uR1JPVVA7aWYoWmkhPT1KdS5TS0lQUEVEKXtpZih4KFppKSlyZXR1cm4gWmk7aWYoVShaaSkpcmV0dXJuITE7dGhyb3cgRXJyb3IoIm5vbiBleGhh''@;'; put 'put ''dXN0aXZlIG1hdGNoIil9fSksY3I9QyhPZSxmdW5jdGlvbihJbyl7dmFyIFppPUlvLkxPTkdFUl9BTFQ7aWYoWmkpe3ZhciBnbD1mdW5jdGlvbiBEKHBlLGxlKXtmb3IodmFyIGJlPTA7YmU8cGUubGVuZ3RoO2JlKyspaWYocGVbYmVdPT09bGUpcmV0dXJuIGJlO3JldHVybi0xfShPZSxaaSk7''@;'; put 'put ''cmV0dXJuIGdsfX0pLFVyPUMoT2UsZnVuY3Rpb24oSW8pe3JldHVybiBJby5QVVNIX01PREV9KSxwaT1DKE9lLGZ1bmN0aW9uKElvKXtyZXR1cm4gVyhJbywiUE9QX01PREUiKX0pfSksYmUoIkxpbmUgVGVybWluYXRvciBIYW5kbGluZyIsZnVuY3Rpb24oKXt2YXIgSW89Y2EobGUubGluZVRl''@;'; put 'put ''cm1pbmF0b3JDaGFyYWN0ZXJzKTtEcj1DKE9lLGZ1bmN0aW9uKFppKXtyZXR1cm4hMX0pLCJvbmx5T2Zmc2V0IiE9PWxlLnBvc2l0aW9uVHJhY2tpbmcmJihEcj1DKE9lLGZ1bmN0aW9uKFppKXtyZXR1cm4gVyhaaSwiTElORV9CUkVBS1MiKT9aaS5MSU5FX0JSRUFLUzohMT09PWVhKFppLElv''@;'; put 'put ''KT9RcihJbyxaaS5QQVRURVJOKTp2b2lkIDB9KSl9KSxiZSgiTWlzYyBNYXBwaW5nICMyIixmdW5jdGlvbigpe0ppPUMoT2UsamEpLHhvPUMoU3Qsam8pLFlpPWtlKE9lLGZ1bmN0aW9uKElvLFppKXt2YXIgZ2w9WmkuR1JPVVA7cmV0dXJuIHgoZ2wpJiZnbCE9PUp1LlNLSVBQRUQmJihJb1tn''@;'; put 'put ''bF09W10pLElvfSx7fSksZHM9QyhTdCxmdW5jdGlvbihJbyxaaSl7cmV0dXJue3BhdHRlcm46U3RbWmldLGxvbmdlckFsdDpjcltaaV0sY2FuTGluZVRlcm1pbmF0b3I6RHJbWmldLGlzQ3VzdG9tOkppW1ppXSxzaG9ydDp4b1taaV0sZ3JvdXA6RW5bWmldLHB1c2g6VXJbWmldLHBvcDpwaVta''@;'; put 'put ''aV0sdG9rZW5UeXBlSWR4OlF0W1ppXSx0b2tlblR5cGU6T2VbWmldfX0pfSk7dmFyIFBzPSEwLGFhPVtdO3JldHVybiBsZS5zYWZlTW9kZXx8YmUoIkZpcnN0IENoYXIgT3B0aW1pemF0aW9uIixmdW5jdGlvbigpe2FhPWtlKE9lLGZ1bmN0aW9uKElvLFppLGdsKXtpZigic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIFppLlBBVFRFUk4pe3ZhciBWMT1NYShaaS5QQVRURVJOLmNoYXJDb2RlQXQoMCkpO0NpKElvLFYxLGRzW2dsXSl9ZWxzZSBpZihiKFppLlNUQVJUX0NIQVJTX0hJTlQpKXt2YXIgcGM7UihaaS5TVEFSVF9DSEFSU19ISU5ULGZ1bmN0aW9uKGwxKXt2YXIgWmM9TWEoInN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBsMT9sMS5jaGFyQ29kZUF0KDApOmwxKTtwYyE9PVpjJiYocGM9WmMsQ2koSW8sWmMsZHNbZ2xdKSl9KX1lbHNlIGlmKGsoWmkuUEFUVEVSTikpaWYoWmkuUEFUVEVSTi51bmljb2RlKVBzPSExLGxlLmVuc3VyZU9wdGltaXphdGlvbnMmJmFlKFJ0KyJcdFVuYWJsZSB0byBhbmFseXpl''@;'; put 'put ''IDwgIitaaS5QQVRURVJOLnRvU3RyaW5nKCkrIiA+IHBhdHRlcm4uXG5cdFRoZSByZWdleHAgdW5pY29kZSBmbGFnIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IHRoZSByZWdleHAtdG8tYXN0IGxpYnJhcnkuXG5cdFRoaXMgd2lsbCBkaXNhYmxlIHRoZSBsZXhlcidzIGZpcnN0IGNo''@;'; put 'put ''YXIgb3B0aW1pemF0aW9ucy5cblx0Rm9yIGRldGFpbHMgU2VlOiBodHRwczovL3NhcC5naXRodWIuaW8vY2hldnJvdGFpbi9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNVTklDT0RFX09QVElNSVpFIik7ZWxzZXt2YXIgVWQ9THQoWmkuUEFUVEVSTixsZS5lbnN1cmVP''@;'; put 'put ''cHRpbWl6YXRpb25zKTtjKFVkKSYmKFBzPSExKSxSKFVkLGZ1bmN0aW9uKGwxKXtDaShJbyxsMSxkc1tnbF0pfSl9ZWxzZSBsZS5lbnN1cmVPcHRpbWl6YXRpb25zJiZhZShSdCsiXHRUb2tlblR5cGU6IDwiK1ppLm5hbWUrIj4gaXMgdXNpbmcgYSBjdXN0b20gdG9rZW4gcGF0dGVybiB3aXRo''@;'; put 'put ''b3V0IHByb3ZpZGluZyA8c3RhcnRfY2hhcnNfaGludD4gcGFyYW1ldGVyLlxuXHRUaGlzIHdpbGwgZGlzYWJsZSB0aGUgbGV4ZXIncyBmaXJzdCBjaGFyIG9wdGltaXphdGlvbnMuXG5cdEZvciBkZXRhaWxzIFNlZTogaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL2NoZXZyb3RhaW4vZG9jcy9ndWlk''@;'; put 'put ''ZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjQ1VTVE9NX09QVElNSVpFIiksUHM9ITE7cmV0dXJuIElvfSxbXSl9KSxiZSgiQXJyYXlQYWNraW5nIixmdW5jdGlvbigpe2FhPWZ1bmN0aW9uIFJlKHBlKXtmb3IodmFyIGxlPVtdLGJlPTA7YmU8cGUubGVuZ3RoO2JlKyspe3ZhciBPZT1w''@;'; put 'put ''ZVtiZV07bGUucHVzaCh2b2lkIDAhPT1PZT9PZTp2b2lkIDApfXJldHVybiBsZX0oYWEpfSkse2VtcHR5R3JvdXBzOllpLHBhdHRlcm5JZHhUb0NvbmZpZzpkcyxjaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnOmFhLGhhc0N1c3RvbTokZSxjYW5CZU9wdGltaXplZDpQc319KHBpLHtsaW5l''@;'; put 'put ''VGVybWluYXRvckNoYXJhY3RlcnM6T2UuY29uZmlnLmxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVycyxwb3NpdGlvblRyYWNraW5nOmJlLnBvc2l0aW9uVHJhY2tpbmcsZW5zdXJlT3B0aW1pemF0aW9uczpiZS5lbnN1cmVPcHRpbWl6YXRpb25zLHNhZmVNb2RlOmJlLnNhZmVNb2RlLHRyYWNlcjpP''@;'; put 'put ''ZS5UUkFDRV9JTklULmJpbmQoT2UpfSl9KSxPZS5wYXR0ZXJuSWR4VG9Db25maWdbRHJdPUppLnBhdHRlcm5JZHhUb0NvbmZpZyxPZS5jaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnW0RyXT1KaS5jaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnLE9lLmVtcHR5R3JvdXBzPW90KE9lLmVt''@;'; put 'put ''cHR5R3JvdXBzLEppLmVtcHR5R3JvdXBzKSxPZS5oYXNDdXN0b209SmkuaGFzQ3VzdG9tfHxPZS5oYXNDdXN0b20sT2UuY2FuTW9kZUJlT3B0aW1pemVkW0RyXT1KaS5jYW5CZU9wdGltaXplZCl9KX0pLE9lLmRlZmF1bHRNb2RlPVN0LmRlZmF1bHRNb2RlLCFjKE9lLmxleGVyRGVmaW5pdGlv''@;'; put 'put ''bkVycm9ycykmJiFPZS5jb25maWcuZGVmZXJEZWZpbml0aW9uRXJyb3JzSGFuZGxpbmcpe3ZhciBVcj1DKE9lLmxleGVyRGVmaW5pdGlvbkVycm9ycyxmdW5jdGlvbihwaSl7cmV0dXJuIHBpLm1lc3NhZ2V9KS5qb2luKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7dGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJFcnJvcnMgZGV0ZWN0ZWQgaW4gZGVmaW5pdGlvbiBvZiBMZXhlcjpcbiIrVXIpfVIoT2UubGV4ZXJEZWZpbml0aW9uV2FybmluZyxmdW5jdGlvbihwaSl7eGUocGkubWVzc2FnZSl9KSxPZS5UUkFDRV9JTklUKCJDaG9vc2luZyBzdWItbWV0aG9kcyBpbXBsZW1lbnRhdGlvbnMiLGZ1''@;'; put 'put ''bmN0aW9uKCl7aWYoWm4/KE9lLmNob3BJbnB1dD1kdCxPZS5tYXRjaD1PZS5tYXRjaFdpdGhUZXN0KTooT2UudXBkYXRlTGFzdEluZGV4PWx0LE9lLm1hdGNoPU9lLm1hdGNoV2l0aEV4ZWMpLFF0JiYoT2UuaGFuZGxlTW9kZXM9bHQpLCExPT09T2UudHJhY2tTdGFydExpbmVzJiYoT2UuY29t''@;'; put 'put ''cHV0ZU5ld0NvbHVtbj1kdCksITE9PT1PZS50cmFja0VuZExpbmVzJiYoT2UudXBkYXRlVG9rZW5FbmRMaW5lQ29sdW1uTG9jYXRpb249bHQpLC9mdWxsL2kudGVzdChPZS5jb25maWcucG9zaXRpb25UcmFja2luZykpT2UuY3JlYXRlVG9rZW5JbnN0YW5jZT1PZS5jcmVhdGVGdWxsVG9rZW47''@;'; put 'put ''ZWxzZSBpZigvb25seVN0YXJ0L2kudGVzdChPZS5jb25maWcucG9zaXRpb25UcmFja2luZykpT2UuY3JlYXRlVG9rZW5JbnN0YW5jZT1PZS5jcmVhdGVTdGFydE9ubHlUb2tlbjtlbHNle2lmKCEvb25seU9mZnNldC9pLnRlc3QoT2UuY29uZmlnLnBvc2l0aW9uVHJhY2tpbmcpKXRocm93IEVy''@;'; put 'put ''cm9yKCdJbnZhbGlkIDxwb3NpdGlvblRyYWNraW5nPiBjb25maWcgb3B0aW9uOiAiJytPZS5jb25maWcucG9zaXRpb25UcmFja2luZysnIicpO09lLmNyZWF0ZVRva2VuSW5zdGFuY2U9T2UuY3JlYXRlT2Zmc2V0T25seVRva2VufU9lLmhhc0N1c3RvbT8oT2UuYWRkVG9rZW49T2UuYWRkVG9r''@;'; put 'put ''ZW5Vc2luZ1B1c2gsT2UuaGFuZGxlUGF5bG9hZD1PZS5oYW5kbGVQYXlsb2FkV2l0aEN1c3RvbSk6KE9lLmFkZFRva2VuPU9lLmFkZFRva2VuVXNpbmdNZW1iZXJBY2Nlc3MsT2UuaGFuZGxlUGF5bG9hZD1PZS5oYW5kbGVQYXlsb2FkTm9DdXN0b20pfSksT2UuVFJBQ0VfSU5JVCgiRmFpbGVk''@;'; put 'put ''IE9wdGltaXphdGlvbiBXYXJuaW5ncyIsZnVuY3Rpb24oKXt2YXIgcGk9a2UoT2UuY2FuTW9kZUJlT3B0aW1pemVkLGZ1bmN0aW9uKERyLEppLHhvKXtyZXR1cm4hMT09PUppJiZEci5wdXNoKHhvKSxEcn0sW10pO2lmKGJlLmVuc3VyZU9wdGltaXphdGlvbnMmJiFjKHBpKSl0aHJvdyBFcnJv''@;'; put 'put ''cigiTGV4ZXIgTW9kZXM6IDwgIitwaS5qb2luKCIsICIpKycgPiBjYW5ub3QgYmUgb3B0aW1pemVkLlxuXHQgRGlzYWJsZSB0aGUgImVuc3VyZU9wdGltaXphdGlvbnMiIGxleGVyIGNvbmZpZyBmbGFnIHRvIHNpbGVudGx5IGlnbm9yZSB0aGlzIGFuZCBydW4gdGhlIGxleGVyIGluIGFuIHVu''@;'; put 'put ''LW9wdGltaXplZCBtb2RlLlxuXHQgT3IgaW5zcGVjdCB0aGUgY29uc29sZSBsb2cgZm9yIGRldGFpbHMgb24gaG93IHRvIHJlc29sdmUgdGhlc2UgaXNzdWVzLicpfSksT2UuVFJBQ0VfSU5JVCgiY2xlYXJSZWdFeHBQYXJzZXJDYWNoZSIsZnVuY3Rpb24oKXshZnVuY3Rpb24gdHQoKXtoZT17''@;'; put 'put ''fX0oKX0pLE9lLlRSQUNFX0lOSVQoInRvRmFzdFByb3BlcnRpZXMiLGZ1bmN0aW9uKCl7RGUoT2UpfSl9KX1yZXR1cm4gcGUucHJvdG90eXBlLnRva2VuaXplPWZ1bmN0aW9uKGxlLGJlKXtpZih2b2lkIDA9PT1iZSYmKGJlPXRoaXMuZGVmYXVsdE1vZGUpLCFjKHRoaXMubGV4ZXJEZWZpbml0''@;'; put 'put ''aW9uRXJyb3JzKSl7dmFyICRlPUModGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnMsZnVuY3Rpb24oUXQpe3JldHVybiBRdC5tZXNzYWdlfSkuam9pbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpO3Rocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIFRva2VuaXplIGJlY2F1c2UgRXJyb3Jz''@;'; put 'put ''IGRldGVjdGVkIGluIGRlZmluaXRpb24gb2YgTGV4ZXI6XG4iKyRlKX1yZXR1cm4gdGhpcy50b2tlbml6ZUludGVybmFsKGxlLGJlKX0scGUucHJvdG90eXBlLnRva2VuaXplSW50ZXJuYWw9ZnVuY3Rpb24obGUsYmUpe3ZhciAkZSxTdCxRdCxFbixjcixVcixwaSxEcixKaSxZaSxkcyxhYSxJ''@;'; put 'put ''byxPZT10aGlzLFppPWxlLGdsPVppLmxlbmd0aCxqbD0wLFYxPTAscGM9dGhpcy5oYXNDdXN0b20/MDpNYXRoLmZsb29yKGxlLmxlbmd0aC8xMCksVWQ9bmV3IEFycmF5KHBjKSxsMT1bXSxvZD10aGlzLnRyYWNrU3RhcnRMaW5lcz8xOnZvaWQgMCxaYz10aGlzLnRyYWNrU3RhcnRMaW5lcz8x''@;'; put 'put ''OnZvaWQgMCxoMD1mdW5jdGlvbiBCbihwZSl7dmFyIGxlPXt9O3JldHVybiBSKHMocGUpLGZ1bmN0aW9uKE9lKXtpZighYihwZVtPZV0pKXRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpO2xlW09lXT1bXX0pLGxlfSh0aGlzLmVtcHR5R3JvdXBzKSxTMj10aGlzLnRyYWNrU3Rh''@;'; put 'put ''cnRMaW5lcyxfMz10aGlzLmNvbmZpZy5saW5lVGVybWluYXRvcnNQYXR0ZXJuLE1mPTAsaWg9W10sa2c9W10sWnU9W10sUzk9W107T2JqZWN0LmZyZWV6ZShTOSk7dmFyIHBhPXZvaWQgMDtmdW5jdGlvbiBJaCgpe3JldHVybiBpaH1mdW5jdGlvbiBSZyhXcyl7dmFyIGMxPU1hKFdzKSxEaD1r''@;'; put 'put ''Z1tjMV07cmV0dXJuIHZvaWQgMD09PURoP1M5OkRofXZhciBQMCxmOD1mdW5jdGlvbihXcyl7aWYoMT09PVp1Lmxlbmd0aCYmdm9pZCAwPT09V3MudG9rZW5UeXBlLlBVU0hfTU9ERSl7dmFyIGMxPU9lLmNvbmZpZy5lcnJvck1lc3NhZ2VQcm92aWRlci5idWlsZFVuYWJsZVRvUG9wTGV4ZXJN''@;'; put 'put ''b2RlTWVzc2FnZShXcyk7bDEucHVzaCh7b2Zmc2V0OldzLnN0YXJ0T2Zmc2V0LGxpbmU6dm9pZCAwIT09V3Muc3RhcnRMaW5lP1dzLnN0YXJ0TGluZTp2b2lkIDAsY29sdW1uOnZvaWQgMCE9PVdzLnN0YXJ0Q29sdW1uP1dzLnN0YXJ0Q29sdW1uOnZvaWQgMCxsZW5ndGg6V3MuaW1hZ2UubGVu''@;'; put 'put ''Z3RoLG1lc3NhZ2U6YzF9KX1lbHNle1p1LnBvcCgpO3ZhciBEaD1MKFp1KTtNZj0oaWg9T2UucGF0dGVybklkeFRvQ29uZmlnW0RoXSkubGVuZ3RoLHBhPShrZz1PZS5jaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnW0RoXSkmJk9lLmNhbk1vZGVCZU9wdGltaXplZFtEaF0mJiExPT09T2Uu''@;'; put 'put ''Y29uZmlnLnNhZmVNb2RlP1JnOklofX07ZnVuY3Rpb24gRTkoV3Mpe1p1LnB1c2goV3MpLE1mPShpaD10aGlzLnBhdHRlcm5JZHhUb0NvbmZpZ1tXc10pLmxlbmd0aCxNZj1paC5sZW5ndGgscGE9KGtnPXRoaXMuY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZ1tXc10pJiZ0aGlzLmNhbk1v''@;'; put 'put ''ZGVCZU9wdGltaXplZFtXc10mJiExPT09dGhpcy5jb25maWcuc2FmZU1vZGU/Umc6SWh9Zm9yKEU5LmNhbGwodGhpcyxiZSk7amw8Z2w7KXtjcj1udWxsO3ZhciBwOD1aaS5jaGFyQ29kZUF0KGpsKSxJZz1wYShwOCksdnA9SWcubGVuZ3RoO2ZvcigkZT0wOyRlPHZwOyRlKyspe3ZhciBmMD0o''@;'; put 'put ''UDA9SWdbJGVdKS5wYXR0ZXJuO2lmKFVyPW51bGwsITEhPT0oSHM9UDAuc2hvcnQpP3A4PT09SHMmJihjcj1mMCk6ITA9PT1QMC5pc0N1c3RvbT9udWxsIT09KElvPWYwLmV4ZWMoWmksamwsVWQsaDApKT8oY3I9SW9bMF0sdm9pZCAwIT09SW8ucGF5bG9hZCYmKFVyPUlvLnBheWxvYWQpKTpj''@;'; put 'put ''cj1udWxsOih0aGlzLnVwZGF0ZUxhc3RJbmRleChmMCxqbCksY3I9dGhpcy5tYXRjaChmMCxsZSxqbCkpLG51bGwhPT1jcil7aWYodm9pZCAwIT09KEVuPVAwLmxvbmdlckFsdCkpe3ZhciB5ZT1paFtFbl0sVWU9eWUucGF0dGVybjtwaT1udWxsLCEwPT09eWUuaXNDdXN0b20/bnVsbCE9PShJ''@;'; put 'put ''bz1VZS5leGVjKFppLGpsLFVkLGgwKSk/KFF0PUlvWzBdLHZvaWQgMCE9PUlvLnBheWxvYWQmJihwaT1Jby5wYXlsb2FkKSk6UXQ9bnVsbDoodGhpcy51cGRhdGVMYXN0SW5kZXgoVWUsamwpLFF0PXRoaXMubWF0Y2goVWUsbGUsamwpKSxRdCYmUXQubGVuZ3RoPmNyLmxlbmd0aCYmKGNyPVF0''@;'; put 'put ''LFVyPXBpLFAwPXllKX1icmVha319aWYobnVsbCE9PWNyKXtpZihEcj1jci5sZW5ndGgsdm9pZCAwIT09KEppPVAwLmdyb3VwKSYmKFlpPXRoaXMuY3JlYXRlVG9rZW5JbnN0YW5jZShjcixqbCxQMC50b2tlblR5cGVJZHgsUDAudG9rZW5UeXBlLG9kLFpjLERyKSx0aGlzLmhhbmRsZVBheWxv''@;'; put 'put ''YWQoWWksVXIpLCExPT09Smk/VjE9dGhpcy5hZGRUb2tlbihVZCxWMSxZaSk6aDBbSmldLnB1c2goWWkpKSxsZT10aGlzLmNob3BJbnB1dChsZSxEciksamwrPURyLFpjPXRoaXMuY29tcHV0ZU5ld0NvbHVtbihaYyxEciksITA9PT1TMiYmITA9PT1QMC5jYW5MaW5lVGVybWluYXRvcil7dmFy''@;'; put 'put ''IGN0PTAsaXQ9dm9pZCAwLEZ0PXZvaWQgMDtfMy5sYXN0SW5kZXg9MDtkb3shMD09PShpdD1fMy50ZXN0KGNyKSkmJihGdD1fMy5sYXN0SW5kZXgtMSxjdCsrKX13aGlsZSghMD09PWl0KTswIT09Y3QmJnRoaXMudXBkYXRlVG9rZW5FbmRMaW5lQ29sdW1uTG9jYXRpb24oWWksSmksRnQsY3Qs''@;'; put 'put ''b2QrPWN0LFpjPURyLUZ0LERyKX10aGlzLmhhbmRsZU1vZGVzKFAwLGY4LEU5LFlpKX1lbHNle2Zvcih2YXIgWWU9amwsWGU9b2QseWk9WmMsV2E9ITE7IVdhJiZqbDxnbDspZm9yKFppLmNoYXJDb2RlQXQoamwpLGxlPXRoaXMuY2hvcElucHV0KGxlLDEpLGpsKyssU3Q9MDtTdDxNZjtTdCsr''@;'; put 'put ''KXt2YXIgSHMsU3M9aWhbU3RdO2lmKGYwPVNzLnBhdHRlcm4sITEhPT0oSHM9U3Muc2hvcnQpP1ppLmNoYXJDb2RlQXQoamwpPT09SHMmJihXYT0hMCk6ITA9PT1Tcy5pc0N1c3RvbT9XYT1udWxsIT09ZjAuZXhlYyhaaSxqbCxVZCxoMCk6KHRoaXMudXBkYXRlTGFzdEluZGV4KGYwLGpsKSxX''@;'; put 'put ''YT1udWxsIT09ZjAuZXhlYyhsZSkpLCEwPT09V2EpYnJlYWt9YWE9dGhpcy5jb25maWcuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGRVbmV4cGVjdGVkQ2hhcmFjdGVyc01lc3NhZ2UoWmksWWUsZHM9amwtWWUsWGUseWkpLGwxLnB1c2goe29mZnNldDpZZSxsaW5lOlhlLGNvbHVtbjp5aSxs''@;'; put 'put ''ZW5ndGg6ZHMsbWVzc2FnZTphYX0pfX1yZXR1cm4gdGhpcy5oYXNDdXN0b218fChVZC5sZW5ndGg9VjEpLHt0b2tlbnM6VWQsZ3JvdXBzOmgwLGVycm9yczpsMX19LHBlLnByb3RvdHlwZS5oYW5kbGVNb2Rlcz1mdW5jdGlvbihsZSxiZSxPZSwkZSl7aWYoITA9PT1sZS5wb3Ape3ZhciBTdD1s''@;'; put 'put ''ZS5wdXNoO2JlKCRlKSx2b2lkIDAhPT1TdCYmT2UuY2FsbCh0aGlzLFN0KX1lbHNlIHZvaWQgMCE9PWxlLnB1c2gmJk9lLmNhbGwodGhpcyxsZS5wdXNoKX0scGUucHJvdG90eXBlLmNob3BJbnB1dD1mdW5jdGlvbihsZSxiZSl7cmV0dXJuIGxlLnN1YnN0cmluZyhiZSl9LHBlLnByb3RvdHlw''@;'; put 'put ''ZS51cGRhdGVMYXN0SW5kZXg9ZnVuY3Rpb24obGUsYmUpe2xlLmxhc3RJbmRleD1iZX0scGUucHJvdG90eXBlLnVwZGF0ZVRva2VuRW5kTGluZUNvbHVtbkxvY2F0aW9uPWZ1bmN0aW9uKGxlLGJlLE9lLCRlLFN0LFF0LEVuKXt2YXIgY3IsVXI7dm9pZCAwIT09YmUmJihVcj0oY3I9T2U9PT1F''@;'; put 'put ''bi0xKT8tMTowLDE9PT0kZSYmITA9PT1jcnx8KGxlLmVuZExpbmU9U3QrVXIsbGUuZW5kQ29sdW1uPVF0LTEtVXIpKX0scGUucHJvdG90eXBlLmNvbXB1dGVOZXdDb2x1bW49ZnVuY3Rpb24obGUsYmUpe3JldHVybiBsZStiZX0scGUucHJvdG90eXBlLmNyZWF0ZVRva2VuSW5zdGFuY2U9ZnVu''@;'; put 'put ''Y3Rpb24oKXtmb3IodmFyIGxlPVtdLGJlPTA7YmU8YXJndW1lbnRzLmxlbmd0aDtiZSsrKWxlW2JlXT1hcmd1bWVudHNbYmVdO3JldHVybiBudWxsfSxwZS5wcm90b3R5cGUuY3JlYXRlT2Zmc2V0T25seVRva2VuPWZ1bmN0aW9uKGxlLGJlLE9lLCRlKXtyZXR1cm57aW1hZ2U6bGUsc3RhcnRP''@;'; put 'put ''ZmZzZXQ6YmUsdG9rZW5UeXBlSWR4Ok9lLHRva2VuVHlwZTokZX19LHBlLnByb3RvdHlwZS5jcmVhdGVTdGFydE9ubHlUb2tlbj1mdW5jdGlvbihsZSxiZSxPZSwkZSxTdCxRdCl7cmV0dXJue2ltYWdlOmxlLHN0YXJ0T2Zmc2V0OmJlLHN0YXJ0TGluZTpTdCxzdGFydENvbHVtbjpRdCx0b2tl''@;'; put 'put ''blR5cGVJZHg6T2UsdG9rZW5UeXBlOiRlfX0scGUucHJvdG90eXBlLmNyZWF0ZUZ1bGxUb2tlbj1mdW5jdGlvbihsZSxiZSxPZSwkZSxTdCxRdCxFbil7cmV0dXJue2ltYWdlOmxlLHN0YXJ0T2Zmc2V0OmJlLGVuZE9mZnNldDpiZStFbi0xLHN0YXJ0TGluZTpTdCxlbmRMaW5lOlN0LHN0YXJ0''@;'; put 'put ''Q29sdW1uOlF0LGVuZENvbHVtbjpRdCtFbi0xLHRva2VuVHlwZUlkeDpPZSx0b2tlblR5cGU6JGV9fSxwZS5wcm90b3R5cGUuYWRkVG9rZW49ZnVuY3Rpb24obGUsYmUsT2Upe3JldHVybiA2NjZ9LHBlLnByb3RvdHlwZS5hZGRUb2tlblVzaW5nUHVzaD1mdW5jdGlvbihsZSxiZSxPZSl7cmV0''@;'; put 'put ''dXJuIGxlLnB1c2goT2UpLGJlfSxwZS5wcm90b3R5cGUuYWRkVG9rZW5Vc2luZ01lbWJlckFjY2Vzcz1mdW5jdGlvbihsZSxiZSxPZSl7cmV0dXJuIGxlW2JlXT1PZSwrK2JlfSxwZS5wcm90b3R5cGUuaGFuZGxlUGF5bG9hZD1mdW5jdGlvbihsZSxiZSl7fSxwZS5wcm90b3R5cGUuaGFuZGxl''@;'; put 'put ''UGF5bG9hZE5vQ3VzdG9tPWZ1bmN0aW9uKGxlLGJlKXt9LHBlLnByb3RvdHlwZS5oYW5kbGVQYXlsb2FkV2l0aEN1c3RvbT1mdW5jdGlvbihsZSxiZSl7bnVsbCE9PWJlJiYobGUucGF5bG9hZD1iZSl9LHBlLnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbihsZSxiZSxPZSl7cmV0dXJuIG51bGx9''@;'; put 'put ''LHBlLnByb3RvdHlwZS5tYXRjaFdpdGhUZXN0PWZ1bmN0aW9uKGxlLGJlLE9lKXtyZXR1cm4hMD09PWxlLnRlc3QoYmUpP2JlLnN1YnN0cmluZyhPZSxsZS5sYXN0SW5kZXgpOm51bGx9LHBlLnByb3RvdHlwZS5tYXRjaFdpdGhFeGVjPWZ1bmN0aW9uKGxlLGJlKXt2YXIgT2U9bGUuZXhlYyhi''@;'; put 'put ''ZSk7cmV0dXJuIG51bGwhPT1PZT9PZVswXTpPZX0scGUucHJvdG90eXBlLlRSQUNFX0lOSVQ9ZnVuY3Rpb24obGUsYmUpe2lmKCEwPT09dGhpcy50cmFjZUluaXRQZXJmKXt0aGlzLnRyYWNlSW5pdEluZGVudCsrO3ZhciBPZT1uZXcgQXJyYXkodGhpcy50cmFjZUluaXRJbmRlbnQrMSkuam9p''@;'; put 'put ''bigiXHQiKTt0aGlzLnRyYWNlSW5pdEluZGVudDx0aGlzLnRyYWNlSW5pdE1heElkZW50JiZjb25zb2xlLmxvZyhPZSsiLS1ceDNlIDwiK2xlKyI+Iik7dmFyICRlPWdlKGJlKSxTdD0kZS50aW1lLFF0PSRlLnZhbHVlLEVuPVN0PjEwP2NvbnNvbGUud2Fybjpjb25zb2xlLmxvZztyZXR1cm4g''@;'; put 'put ''dGhpcy50cmFjZUluaXRJbmRlbnQ8dGhpcy50cmFjZUluaXRNYXhJZGVudCYmRW4oT2UrIjwtLSA8IitsZSsiPiB0aW1lOiAiK1N0KyJtcyIpLHRoaXMudHJhY2VJbml0SW5kZW50LS0sUXR9cmV0dXJuIGJlKCl9LHBlLlNLSVBQRUQ9IlRoaXMgbWFya3MgYSBza2lwcGVkIFRva2VuIHBhdHRl''@;'; put 'put ''cm4sIHRoaXMgbWVhbnMgZWFjaCB0b2tlbiBpZGVudGlmaWVkIGJ5IGl0IHdpbGxiZSBjb25zdW1lZCBhbmQgdGhlbiB0aHJvd24gaW50byBvYmxpdmlvbiwgdGhpcyBjYW4gYmUgdXNlZCB0byBmb3IgZXhhbXBsZSB0byBjb21wbGV0ZWx5IGlnbm9yZSB3aGl0ZXNwYWNlLiIscGUuTkE9L05P''@;'; put 'put ''VF9BUFBMSUNBQkxFLyxwZX0oKTtmdW5jdGlvbiB5ZChwZSl7cmV0dXJuIGZhKHBlKT9wZS5MQUJFTDpwZS5uYW1lfWZ1bmN0aW9uIFVvKHBlKXtyZXR1cm4gcGUubmFtZX1mdW5jdGlvbiBmYShwZSl7cmV0dXJuIHgocGUuTEFCRUwpJiYiIiE9PXBlLkxBQkVMfXZhciBRYz0iY2F0ZWdvcmll''@;'; put 'put ''cyIsYmc9InB1c2hfbW9kZSIsVWE9InBvcF9tb2RlIixWdT0ibG9uZ2VyX2FsdCIsTG09ImxpbmVfYnJlYWtzIix1Mz0ic3RhcnRfY2hhcnNfaGludCI7ZnVuY3Rpb24gbmgocGUpe3JldHVybiBmdW5jdGlvbiB3ZyhwZSl7dmFyIGxlPXBlLnBhdHRlcm4sYmU9e307aWYoYmUubmFtZT1wZS5u''@;'; put 'put ''YW1lLFUobGUpfHwoYmUuUEFUVEVSTj1sZSksVyhwZSwicGFyZW50IikpdGhyb3ciVGhlIHBhcmVudCBwcm9wZXJ0eSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLlxuU2VlOiBodHRwczovL2dpdGh1Yi5jb20vU0FQL2NoZXZyb3RhaW4vaXNzdWVzLzU2NCNpc3N1ZWNvbW1lbnQtMzQ5MDYyMzQ2''@;'; put 'put ''IGZvciBkZXRhaWxzLiI7cmV0dXJuIFcocGUsUWMpJiYoYmUuQ0FURUdPUklFUz1wZVtRY10pLF9zKFtiZV0pLFcocGUsImxhYmVsIikmJihiZS5MQUJFTD1wZS5sYWJlbCksVyhwZSwiZ3JvdXAiKSYmKGJlLkdST1VQPXBlLmdyb3VwKSxXKHBlLFVhKSYmKGJlLlBPUF9NT0RFPXBlW1VhXSks''@;'; put 'put ''VyhwZSxiZykmJihiZS5QVVNIX01PREU9cGVbYmddKSxXKHBlLFZ1KSYmKGJlLkxPTkdFUl9BTFQ9cGVbVnVdKSxXKHBlLExtKSYmKGJlLkxJTkVfQlJFQUtTPXBlW0xtXSksVyhwZSx1MykmJihiZS5TVEFSVF9DSEFSU19ISU5UPXBlW3UzXSksYmV9KHBlKX12YXIgSmM9bmgoe25hbWU6IkVP''@;'; put 'put ''RiIscGF0dGVybjpKdS5OQX0pO2Z1bmN0aW9uIGdmKHBlLGxlLGJlLE9lLCRlLFN0LFF0LEVuKXtyZXR1cm57aW1hZ2U6bGUsc3RhcnRPZmZzZXQ6YmUsZW5kT2Zmc2V0Ok9lLHN0YXJ0TGluZTokZSxlbmRMaW5lOlN0LHN0YXJ0Q29sdW1uOlF0LGVuZENvbHVtbjpFbix0b2tlblR5cGVJZHg6''@;'; put 'put ''cGUudG9rZW5UeXBlSWR4LHRva2VuVHlwZTpwZX19ZnVuY3Rpb24gbHAocGUsbGUpe3JldHVybiB0YShwZSxsZSl9X3MoW0pjXSk7dmFyIERsPWZ1bmN0aW9uKCl7dmFyIHBlPWZ1bmN0aW9uKGxlLGJlKXtyZXR1cm4ocGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWlu''@;'; put 'put ''c3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKE9lLCRlKXtPZS5fX3Byb3RvX189JGV9fHxmdW5jdGlvbihPZSwkZSl7Zm9yKHZhciBTdCBpbiAkZSkkZS5oYXNPd25Qcm9wZXJ0eShTdCkmJihPZVtTdF09JGVbU3RdKX0pKGxlLGJlKX07cmV0dXJuIGZ1bmN0aW9uKGxlLGJlKXtmdW5jdGlvbiBP''@;'; put 'put ''ZSgpe3RoaXMuY29uc3RydWN0b3I9bGV9cGUobGUsYmUpLGxlLnByb3RvdHlwZT1udWxsPT09YmU/T2JqZWN0LmNyZWF0ZShiZSk6KE9lLnByb3RvdHlwZT1iZS5wcm90b3R5cGUsbmV3IE9lKX19KCksRW89ZnVuY3Rpb24oKXtmdW5jdGlvbiBwZShsZSl7dGhpcy5kZWZpbml0aW9uPWxlfXJl''@;'; put 'put ''dHVybiBwZS5wcm90b3R5cGUuYWNjZXB0PWZ1bmN0aW9uKGxlKXtsZS52aXNpdCh0aGlzKSxSKHRoaXMuZGVmaW5pdGlvbixmdW5jdGlvbihiZSl7YmUuYWNjZXB0KGxlKX0pfSxwZX0oKSxCdT1mdW5jdGlvbihwZSl7ZnVuY3Rpb24gbGUoYmUpe3ZhciBPZT1wZS5jYWxsKHRoaXMsW10pfHx0''@;'; put 'put ''aGlzO3JldHVybiBPZS5pZHg9MSx1ZShPZSxGKGJlLGZ1bmN0aW9uKCRlKXtyZXR1cm4gdm9pZCAwIT09JGV9KSksT2V9cmV0dXJuIERsKGxlLHBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobGUucHJvdG90eXBlLCJkZWZpbml0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9''@;'; put 'put ''PXRoaXMucmVmZXJlbmNlZFJ1bGU/dGhpcy5yZWZlcmVuY2VkUnVsZS5kZWZpbml0aW9uOltdfSxzZXQ6ZnVuY3Rpb24oYmUpe30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxsZS5wcm90b3R5cGUuYWNjZXB0PWZ1bmN0aW9uKGJlKXtiZS52aXNpdCh0aGlzKX0sbGV9KEVvKSxO''@;'; put 'put ''MT1mdW5jdGlvbihwZSl7ZnVuY3Rpb24gbGUoYmUpe3ZhciBPZT1wZS5jYWxsKHRoaXMsYmUuZGVmaW5pdGlvbil8fHRoaXM7cmV0dXJuIE9lLm9yZ1RleHQ9IiIsdWUoT2UsRihiZSxmdW5jdGlvbigkZSl7cmV0dXJuIHZvaWQgMCE9PSRlfSkpLE9lfXJldHVybiBEbChsZSxwZSksbGV9KEVv''@;'; put 'put ''KSxSdT1mdW5jdGlvbihwZSl7ZnVuY3Rpb24gbGUoYmUpe3ZhciBPZT1wZS5jYWxsKHRoaXMsYmUuZGVmaW5pdGlvbil8fHRoaXM7cmV0dXJuIE9lLmlnbm9yZUFtYmlndWl0aWVzPSExLHVlKE9lLEYoYmUsZnVuY3Rpb24oJGUpe3JldHVybiB2b2lkIDAhPT0kZX0pKSxPZX1yZXR1cm4gRGwo''@;'; put 'put ''bGUscGUpLGxlfShFbyksaGM9ZnVuY3Rpb24ocGUpe2Z1bmN0aW9uIGxlKGJlKXt2YXIgT2U9cGUuY2FsbCh0aGlzLGJlLmRlZmluaXRpb24pfHx0aGlzO3JldHVybiBPZS5pZHg9MSx1ZShPZSxGKGJlLGZ1bmN0aW9uKCRlKXtyZXR1cm4gdm9pZCAwIT09JGV9KSksT2V9cmV0dXJuIERsKGxl''@;'; put 'put ''LHBlKSxsZX0oRW8pLGVkPWZ1bmN0aW9uKHBlKXtmdW5jdGlvbiBsZShiZSl7dmFyIE9lPXBlLmNhbGwodGhpcyxiZS5kZWZpbml0aW9uKXx8dGhpcztyZXR1cm4gT2UuaWR4PTEsdWUoT2UsRihiZSxmdW5jdGlvbigkZSl7cmV0dXJuIHZvaWQgMCE9PSRlfSkpLE9lfXJldHVybiBEbChsZSxw''@;'; put 'put ''ZSksbGV9KEVvKSxKbj1mdW5jdGlvbihwZSl7ZnVuY3Rpb24gbGUoYmUpe3ZhciBPZT1wZS5jYWxsKHRoaXMsYmUuZGVmaW5pdGlvbil8fHRoaXM7cmV0dXJuIE9lLmlkeD0xLHVlKE9lLEYoYmUsZnVuY3Rpb24oJGUpe3JldHVybiB2b2lkIDAhPT0kZX0pKSxPZX1yZXR1cm4gRGwobGUscGUp''@;'; put 'put ''LGxlfShFbyksY2w9ZnVuY3Rpb24ocGUpe2Z1bmN0aW9uIGxlKGJlKXt2YXIgT2U9cGUuY2FsbCh0aGlzLGJlLmRlZmluaXRpb24pfHx0aGlzO3JldHVybiBPZS5pZHg9MSx1ZShPZSxGKGJlLGZ1bmN0aW9uKCRlKXtyZXR1cm4gdm9pZCAwIT09JGV9KSksT2V9cmV0dXJuIERsKGxlLHBlKSxs''@;'; put 'put ''ZX0oRW8pLG1pPWZ1bmN0aW9uKHBlKXtmdW5jdGlvbiBsZShiZSl7dmFyIE9lPXBlLmNhbGwodGhpcyxiZS5kZWZpbml0aW9uKXx8dGhpcztyZXR1cm4gT2UuaWR4PTEsdWUoT2UsRihiZSxmdW5jdGlvbigkZSl7cmV0dXJuIHZvaWQgMCE9PSRlfSkpLE9lfXJldHVybiBEbChsZSxwZSksbGV9''@;'; put 'put ''KEVvKSxldT1mdW5jdGlvbihwZSl7ZnVuY3Rpb24gbGUoYmUpe3ZhciBPZT1wZS5jYWxsKHRoaXMsYmUuZGVmaW5pdGlvbil8fHRoaXM7cmV0dXJuIE9lLmlkeD0xLE9lLmlnbm9yZUFtYmlndWl0aWVzPSExLE9lLmhhc1ByZWRpY2F0ZXM9ITEsdWUoT2UsRihiZSxmdW5jdGlvbigkZSl7cmV0''@;'; put 'put ''dXJuIHZvaWQgMCE9PSRlfSkpLE9lfXJldHVybiBEbChsZSxwZSksbGV9KEVvKSxTbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHBlKGxlKXt0aGlzLmlkeD0xLHVlKHRoaXMsRihsZSxmdW5jdGlvbihiZSl7cmV0dXJuIHZvaWQgMCE9PWJlfSkpfXJldHVybiBwZS5wcm90b3R5cGUuYWNjZXB0PWZ1''@;'; put 'put ''bmN0aW9uKGxlKXtsZS52aXNpdCh0aGlzKX0scGV9KCk7ZnVuY3Rpb24gY24ocGUpe3JldHVybiBDKHBlLGlyKX1mdW5jdGlvbiBpcihwZSl7ZnVuY3Rpb24gbGUoJGUpe3JldHVybiBDKCRlLGlyKX1pZihwZSBpbnN0YW5jZW9mIEJ1KXJldHVybnt0eXBlOiJOb25UZXJtaW5hbCIsbmFtZTpw''@;'; put 'put ''ZS5ub25UZXJtaW5hbE5hbWUsaWR4OnBlLmlkeH07aWYocGUgaW5zdGFuY2VvZiBSdSlyZXR1cm57dHlwZToiRmxhdCIsZGVmaW5pdGlvbjpsZShwZS5kZWZpbml0aW9uKX07aWYocGUgaW5zdGFuY2VvZiBoYylyZXR1cm57dHlwZToiT3B0aW9uIixpZHg6cGUuaWR4LGRlZmluaXRpb246bGUo''@;'; put 'put ''cGUuZGVmaW5pdGlvbil9O2lmKHBlIGluc3RhbmNlb2YgZWQpcmV0dXJue3R5cGU6IlJlcGV0aXRpb25NYW5kYXRvcnkiLG5hbWU6cGUubmFtZSxpZHg6cGUuaWR4LGRlZmluaXRpb246bGUocGUuZGVmaW5pdGlvbil9O2lmKHBlIGluc3RhbmNlb2YgSm4pcmV0dXJue3R5cGU6IlJlcGV0aXRp''@;'; put 'put ''b25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yIixuYW1lOnBlLm5hbWUsaWR4OnBlLmlkeCxzZXBhcmF0b3I6aXIobmV3IFNsKHt0ZXJtaW5hbFR5cGU6cGUuc2VwYXJhdG9yfSkpLGRlZmluaXRpb246bGUocGUuZGVmaW5pdGlvbil9O2lmKHBlIGluc3RhbmNlb2YgbWkpcmV0dXJue3R5cGU6IlJl''@;'; put 'put ''cGV0aXRpb25XaXRoU2VwYXJhdG9yIixuYW1lOnBlLm5hbWUsaWR4OnBlLmlkeCxzZXBhcmF0b3I6aXIobmV3IFNsKHt0ZXJtaW5hbFR5cGU6cGUuc2VwYXJhdG9yfSkpLGRlZmluaXRpb246bGUocGUuZGVmaW5pdGlvbil9O2lmKHBlIGluc3RhbmNlb2YgY2wpcmV0dXJue3R5cGU6IlJlcGV0''@;'; put 'put ''aXRpb24iLG5hbWU6cGUubmFtZSxpZHg6cGUuaWR4LGRlZmluaXRpb246bGUocGUuZGVmaW5pdGlvbil9O2lmKHBlIGluc3RhbmNlb2YgZXUpcmV0dXJue3R5cGU6IkFsdGVybmF0aW9uIixuYW1lOnBlLm5hbWUsaWR4OnBlLmlkeCxkZWZpbml0aW9uOmxlKHBlLmRlZmluaXRpb24pfTtpZihw''@;'; put 'put ''ZSBpbnN0YW5jZW9mIFNsKXt2YXIgYmU9e3R5cGU6IlRlcm1pbmFsIixuYW1lOnBlLnRlcm1pbmFsVHlwZS5uYW1lLGxhYmVsOnlkKHBlLnRlcm1pbmFsVHlwZSksaWR4OnBlLmlkeH0sT2U9cGUudGVybWluYWxUeXBlLlBBVFRFUk47cmV0dXJuIHBlLnRlcm1pbmFsVHlwZS5QQVRURVJOJiYo''@;'; put 'put ''YmUucGF0dGVybj1rKE9lKT9PZS5zb3VyY2U6T2UpLGJlfWlmKHBlIGluc3RhbmNlb2YgTjEpcmV0dXJue3R5cGU6IlJ1bGUiLG5hbWU6cGUubmFtZSxvcmdUZXh0OnBlLm9yZ1RleHQsZGVmaW5pdGlvbjpsZShwZS5kZWZpbml0aW9uKX07dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1h''@;'; put 'put ''dGNoIil9dmFyIGdpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcGUoKXt9cmV0dXJuIHBlLnByb3RvdHlwZS53YWxrPWZ1bmN0aW9uKGxlLGJlKXt2YXIgT2U9dGhpczt2b2lkIDA9PT1iZSYmKGJlPVtdKSxSKGxlLmRlZmluaXRpb24sZnVuY3Rpb24oJGUsU3Qpe3ZhciBRdD1WKGxlLmRlZmluaXRp''@;'; put 'put ''b24sU3QrMSk7aWYoJGUgaW5zdGFuY2VvZiBCdSlPZS53YWxrUHJvZFJlZigkZSxRdCxiZSk7ZWxzZSBpZigkZSBpbnN0YW5jZW9mIFNsKU9lLndhbGtUZXJtaW5hbCgkZSxRdCxiZSk7ZWxzZSBpZigkZSBpbnN0YW5jZW9mIFJ1KU9lLndhbGtGbGF0KCRlLFF0LGJlKTtlbHNlIGlmKCRlIGlu''@;'; put 'put ''c3RhbmNlb2YgaGMpT2Uud2Fsa09wdGlvbigkZSxRdCxiZSk7ZWxzZSBpZigkZSBpbnN0YW5jZW9mIGVkKU9lLndhbGtBdExlYXN0T25lKCRlLFF0LGJlKTtlbHNlIGlmKCRlIGluc3RhbmNlb2YgSm4pT2Uud2Fsa0F0TGVhc3RPbmVTZXAoJGUsUXQsYmUpO2Vsc2UgaWYoJGUgaW5zdGFuY2Vv''@;'; put 'put ''ZiBtaSlPZS53YWxrTWFueVNlcCgkZSxRdCxiZSk7ZWxzZSBpZigkZSBpbnN0YW5jZW9mIGNsKU9lLndhbGtNYW55KCRlLFF0LGJlKTtlbHNle2lmKCEoJGUgaW5zdGFuY2VvZiBldSkpdGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIik7T2Uud2Fsa09yKCRlLFF0LGJlKX19KX0s''@;'; put 'put ''cGUucHJvdG90eXBlLndhbGtUZXJtaW5hbD1mdW5jdGlvbihsZSxiZSxPZSl7fSxwZS5wcm90b3R5cGUud2Fsa1Byb2RSZWY9ZnVuY3Rpb24obGUsYmUsT2Upe30scGUucHJvdG90eXBlLndhbGtGbGF0PWZ1bmN0aW9uKGxlLGJlLE9lKXt2YXIgJGU9YmUuY29uY2F0KE9lKTt0aGlzLndhbGso''@;'; put 'put ''bGUsJGUpfSxwZS5wcm90b3R5cGUud2Fsa09wdGlvbj1mdW5jdGlvbihsZSxiZSxPZSl7dmFyICRlPWJlLmNvbmNhdChPZSk7dGhpcy53YWxrKGxlLCRlKX0scGUucHJvdG90eXBlLndhbGtBdExlYXN0T25lPWZ1bmN0aW9uKGxlLGJlLE9lKXt2YXIgJGU9W25ldyBoYyh7ZGVmaW5pdGlvbjps''@;'; put 'put ''ZS5kZWZpbml0aW9ufSldLmNvbmNhdChiZSxPZSk7dGhpcy53YWxrKGxlLCRlKX0scGUucHJvdG90eXBlLndhbGtBdExlYXN0T25lU2VwPWZ1bmN0aW9uKGxlLGJlLE9lKXt2YXIgJGU9d28obGUsYmUsT2UpO3RoaXMud2FsayhsZSwkZSl9LHBlLnByb3RvdHlwZS53YWxrTWFueT1mdW5jdGlv''@;'; put 'put ''bihsZSxiZSxPZSl7dmFyICRlPVtuZXcgaGMoe2RlZmluaXRpb246bGUuZGVmaW5pdGlvbn0pXS5jb25jYXQoYmUsT2UpO3RoaXMud2FsayhsZSwkZSl9LHBlLnByb3RvdHlwZS53YWxrTWFueVNlcD1mdW5jdGlvbihsZSxiZSxPZSl7dmFyICRlPXdvKGxlLGJlLE9lKTt0aGlzLndhbGsobGUs''@;'; put 'put ''JGUpfSxwZS5wcm90b3R5cGUud2Fsa09yPWZ1bmN0aW9uKGxlLGJlLE9lKXt2YXIgJGU9dGhpcyxTdD1iZS5jb25jYXQoT2UpO1IobGUuZGVmaW5pdGlvbixmdW5jdGlvbihRdCl7dmFyIEVuPW5ldyBSdSh7ZGVmaW5pdGlvbjpbUXRdfSk7JGUud2FsayhFbixTdCl9KX0scGV9KCk7ZnVuY3Rp''@;'; put 'put ''b24gd28ocGUsbGUsYmUpe3JldHVybltuZXcgaGMoe2RlZmluaXRpb246W25ldyBTbCh7dGVybWluYWxUeXBlOnBlLnNlcGFyYXRvcn0pXS5jb25jYXQocGUuZGVmaW5pdGlvbil9KV0uY29uY2F0KGxlLGJlKX12YXIgbHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBwZSgpe31yZXR1cm4gcGUucHJv''@;'; put 'put ''dG90eXBlLnZpc2l0PWZ1bmN0aW9uKGxlKXt2YXIgYmU9bGU7c3dpdGNoKGJlLmNvbnN0cnVjdG9yKXtjYXNlIEJ1OnJldHVybiB0aGlzLnZpc2l0Tm9uVGVybWluYWwoYmUpO2Nhc2UgUnU6cmV0dXJuIHRoaXMudmlzaXRGbGF0KGJlKTtjYXNlIGhjOnJldHVybiB0aGlzLnZpc2l0T3B0aW9u''@;'; put 'put ''KGJlKTtjYXNlIGVkOnJldHVybiB0aGlzLnZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeShiZSk7Y2FzZSBKbjpyZXR1cm4gdGhpcy52aXNpdFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yKGJlKTtjYXNlIG1pOnJldHVybiB0aGlzLnZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3Io''@;'; put 'put ''YmUpO2Nhc2UgY2w6cmV0dXJuIHRoaXMudmlzaXRSZXBldGl0aW9uKGJlKTtjYXNlIGV1OnJldHVybiB0aGlzLnZpc2l0QWx0ZXJuYXRpb24oYmUpO2Nhc2UgU2w6cmV0dXJuIHRoaXMudmlzaXRUZXJtaW5hbChiZSk7Y2FzZSBOMTpyZXR1cm4gdGhpcy52aXNpdFJ1bGUoYmUpO2RlZmF1bHQ6''@;'; put 'put ''dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9fSxwZS5wcm90b3R5cGUudmlzaXROb25UZXJtaW5hbD1mdW5jdGlvbihsZSl7fSxwZS5wcm90b3R5cGUudmlzaXRGbGF0PWZ1bmN0aW9uKGxlKXt9LHBlLnByb3RvdHlwZS52aXNpdE9wdGlvbj1mdW5jdGlvbihsZSl7fSxwZS5w''@;'; put 'put ''cm90b3R5cGUudmlzaXRSZXBldGl0aW9uPWZ1bmN0aW9uKGxlKXt9LHBlLnByb3RvdHlwZS52aXNpdFJlcGV0aXRpb25NYW5kYXRvcnk9ZnVuY3Rpb24obGUpe30scGUucHJvdG90eXBlLnZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3I9ZnVuY3Rpb24obGUpe30scGUucHJv''@;'; put 'put ''dG90eXBlLnZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3I9ZnVuY3Rpb24obGUpe30scGUucHJvdG90eXBlLnZpc2l0QWx0ZXJuYXRpb249ZnVuY3Rpb24obGUpe30scGUucHJvdG90eXBlLnZpc2l0VGVybWluYWw9ZnVuY3Rpb24obGUpe30scGUucHJvdG90eXBlLnZpc2l0UnVsZT1mdW5j''@;'; put 'put ''dGlvbihsZSl7fSxwZX0oKSxFcj1mdW5jdGlvbigpe3ZhciBwZT1mdW5jdGlvbihsZSxiZSl7cmV0dXJuKHBlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihPZSwkZSl7T2UuX19wcm90b19fPSRlfXx8ZnVuY3Rpb24oT2Us''@;'; put 'put ''JGUpe2Zvcih2YXIgU3QgaW4gJGUpJGUuaGFzT3duUHJvcGVydHkoU3QpJiYoT2VbU3RdPSRlW1N0XSl9KShsZSxiZSl9O3JldHVybiBmdW5jdGlvbihsZSxiZSl7ZnVuY3Rpb24gT2UoKXt0aGlzLmNvbnN0cnVjdG9yPWxlfXBlKGxlLGJlKSxsZS5wcm90b3R5cGU9bnVsbD09PWJlP09iamVj''@;'; put 'put ''dC5jcmVhdGUoYmUpOihPZS5wcm90b3R5cGU9YmUucHJvdG90eXBlLG5ldyBPZSl9fSgpO2Z1bmN0aW9uIFFhKHBlLGxlKXtyZXR1cm4gdm9pZCAwPT09bGUmJihsZT1bXSksISEocGUgaW5zdGFuY2VvZiBoY3x8cGUgaW5zdGFuY2VvZiBjbHx8cGUgaW5zdGFuY2VvZiBtaSl8fChwZSBpbnN0''@;'; put 'put ''YW5jZW9mIGV1P0cocGUuZGVmaW5pdGlvbixmdW5jdGlvbihPZSl7cmV0dXJuIFFhKE9lLGxlKX0pOiEocGUgaW5zdGFuY2VvZiBCdSYmcShsZSxwZSkpJiZwZSBpbnN0YW5jZW9mIEVvJiYocGUgaW5zdGFuY2VvZiBCdSYmbGUucHVzaChwZSksQihwZS5kZWZpbml0aW9uLGZ1bmN0aW9uKE9l''@;'; put 'put ''KXtyZXR1cm4gUWEoT2UsbGUpfSkpKX1mdW5jdGlvbiBwcyhwZSl7aWYocGUgaW5zdGFuY2VvZiBCdSlyZXR1cm4iU1VCUlVMRSI7aWYocGUgaW5zdGFuY2VvZiBoYylyZXR1cm4iT1BUSU9OIjtpZihwZSBpbnN0YW5jZW9mIGV1KXJldHVybiJPUiI7aWYocGUgaW5zdGFuY2VvZiBlZClyZXR1''@;'; put 'put ''cm4iQVRfTEVBU1RfT05FIjtpZihwZSBpbnN0YW5jZW9mIEpuKXJldHVybiJBVF9MRUFTVF9PTkVfU0VQIjtpZihwZSBpbnN0YW5jZW9mIG1pKXJldHVybiJNQU5ZX1NFUCI7aWYocGUgaW5zdGFuY2VvZiBjbClyZXR1cm4iTUFOWSI7aWYocGUgaW5zdGFuY2VvZiBTbClyZXR1cm4iQ09OU1VN''@;'; put 'put ''RSI7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9dmFyIHR1PWZ1bmN0aW9uKHBlKXtmdW5jdGlvbiBsZSgpe3ZhciBiZT1udWxsIT09cGUmJnBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gYmUuc2VwYXJhdG9yPSItIixiZS5kc2xNZXRob2RzPXtvcHRp''@;'; put 'put ''b246W10sYWx0ZXJuYXRpb246W10scmVwZXRpdGlvbjpbXSxyZXBldGl0aW9uV2l0aFNlcGFyYXRvcjpbXSxyZXBldGl0aW9uTWFuZGF0b3J5OltdLHJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yOltdfSxiZX1yZXR1cm4gRXIobGUscGUpLGxlLnByb3RvdHlwZS5yZXNldD1mdW5j''@;'; put 'put ''dGlvbigpe3RoaXMuZHNsTWV0aG9kcz17b3B0aW9uOltdLGFsdGVybmF0aW9uOltdLHJlcGV0aXRpb246W10scmVwZXRpdGlvbldpdGhTZXBhcmF0b3I6W10scmVwZXRpdGlvbk1hbmRhdG9yeTpbXSxyZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcjpbXX19LGxlLnByb3RvdHlwZS52''@;'; put 'put ''aXNpdFRlcm1pbmFsPWZ1bmN0aW9uKGJlKXt2YXIgT2U9YmUudGVybWluYWxUeXBlLm5hbWUrdGhpcy5zZXBhcmF0b3IrIlRlcm1pbmFsIjtXKHRoaXMuZHNsTWV0aG9kcyxPZSl8fCh0aGlzLmRzbE1ldGhvZHNbT2VdPVtdKSx0aGlzLmRzbE1ldGhvZHNbT2VdLnB1c2goYmUpfSxsZS5wcm90''@;'; put 'put ''b3R5cGUudmlzaXROb25UZXJtaW5hbD1mdW5jdGlvbihiZSl7dmFyIE9lPWJlLm5vblRlcm1pbmFsTmFtZSt0aGlzLnNlcGFyYXRvcisiVGVybWluYWwiO1codGhpcy5kc2xNZXRob2RzLE9lKXx8KHRoaXMuZHNsTWV0aG9kc1tPZV09W10pLHRoaXMuZHNsTWV0aG9kc1tPZV0ucHVzaChiZSl9''@;'; put 'put ''LGxlLnByb3RvdHlwZS52aXNpdE9wdGlvbj1mdW5jdGlvbihiZSl7dGhpcy5kc2xNZXRob2RzLm9wdGlvbi5wdXNoKGJlKX0sbGUucHJvdG90eXBlLnZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3I9ZnVuY3Rpb24oYmUpe3RoaXMuZHNsTWV0aG9kcy5yZXBldGl0aW9uV2l0aFNlcGFyYXRv''@;'; put 'put ''ci5wdXNoKGJlKX0sbGUucHJvdG90eXBlLnZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeT1mdW5jdGlvbihiZSl7dGhpcy5kc2xNZXRob2RzLnJlcGV0aXRpb25NYW5kYXRvcnkucHVzaChiZSl9LGxlLnByb3RvdHlwZS52aXNpdFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yPWZ1bmN0''@;'; put 'put ''aW9uKGJlKXt0aGlzLmRzbE1ldGhvZHMucmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IucHVzaChiZSl9LGxlLnByb3RvdHlwZS52aXNpdFJlcGV0aXRpb249ZnVuY3Rpb24oYmUpe3RoaXMuZHNsTWV0aG9kcy5yZXBldGl0aW9uLnB1c2goYmUpfSxsZS5wcm90b3R5cGUudmlzaXRB''@;'; put 'put ''bHRlcm5hdGlvbj1mdW5jdGlvbihiZSl7dGhpcy5kc2xNZXRob2RzLmFsdGVybmF0aW9uLnB1c2goYmUpfSxsZX0obHMpLGdzPW5ldyB0dTtmdW5jdGlvbiBMbChwZSl7aWYocGUgaW5zdGFuY2VvZiBCdSlyZXR1cm4gTGwocGUucmVmZXJlbmNlZFJ1bGUpO2lmKHBlIGluc3RhbmNlb2YgU2wp''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uIE9sKHBlKXtyZXR1cm5bcGUudGVybWluYWxUeXBlXX0ocGUpO2lmKGZ1bmN0aW9uIHRjKHBlKXtyZXR1cm4gcGUgaW5zdGFuY2VvZiBSdXx8cGUgaW5zdGFuY2VvZiBoY3x8cGUgaW5zdGFuY2VvZiBjbHx8cGUgaW5zdGFuY2VvZiBlZHx8cGUgaW5zdGFuY2VvZiBK''@;'; put 'put ''bnx8cGUgaW5zdGFuY2VvZiBtaXx8cGUgaW5zdGFuY2VvZiBTbHx8cGUgaW5zdGFuY2VvZiBOMX0ocGUpKXJldHVybiBmdW5jdGlvbiBBaChwZSl7Zm9yKHZhciBTdCxsZT1bXSxiZT1wZS5kZWZpbml0aW9uLE9lPTAsJGU9YmUubGVuZ3RoPk9lLFF0PSEwOyRlJiZRdDspUXQ9UWEoU3Q9YmVb''@;'; put 'put ''T2VdKSxsZT1sZS5jb25jYXQoTGwoU3QpKSwkZT1iZS5sZW5ndGg+KE9lKz0xKTtyZXR1cm4gWChsZSl9KHBlKTtpZihmdW5jdGlvbiB1bChwZSl7cmV0dXJuIHBlIGluc3RhbmNlb2YgZXV9KHBlKSlyZXR1cm4gZnVuY3Rpb24gSmgocGUpe3JldHVybiBYKHcoQyhwZS5kZWZpbml0aW9uLGZ1''@;'; put 'put ''bmN0aW9uKGJlKXtyZXR1cm4gTGwoYmUpfSkpKX0ocGUpO3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfXZhciBJdT1mdW5jdGlvbigpe3ZhciBwZT1mdW5jdGlvbihsZSxiZSl7cmV0dXJuKHBlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5j''@;'; put 'put ''ZW9mIEFycmF5JiZmdW5jdGlvbihPZSwkZSl7T2UuX19wcm90b19fPSRlfXx8ZnVuY3Rpb24oT2UsJGUpe2Zvcih2YXIgU3QgaW4gJGUpJGUuaGFzT3duUHJvcGVydHkoU3QpJiYoT2VbU3RdPSRlW1N0XSl9KShsZSxiZSl9O3JldHVybiBmdW5jdGlvbihsZSxiZSl7ZnVuY3Rpb24gT2UoKXt0''@;'; put 'put ''aGlzLmNvbnN0cnVjdG9yPWxlfXBlKGxlLGJlKSxsZS5wcm90b3R5cGU9bnVsbD09PWJlP09iamVjdC5jcmVhdGUoYmUpOihPZS5wcm90b3R5cGU9YmUucHJvdG90eXBlLG5ldyBPZSl9fSgpLE1jPWZ1bmN0aW9uKHBlKXtmdW5jdGlvbiBsZShiZSl7dmFyIE9lPXBlLmNhbGwodGhpcyl8fHRo''@;'; put 'put ''aXM7cmV0dXJuIE9lLnRvcFByb2Q9YmUsT2UuZm9sbG93cz17fSxPZX1yZXR1cm4gSXUobGUscGUpLGxlLnByb3RvdHlwZS5zdGFydFdhbGtpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53YWxrKHRoaXMudG9wUHJvZCksdGhpcy5mb2xsb3dzfSxsZS5wcm90b3R5cGUud2Fsa1Rlcm1pbmFs''@;'; put 'put ''PWZ1bmN0aW9uKGJlLE9lLCRlKXt9LGxlLnByb3RvdHlwZS53YWxrUHJvZFJlZj1mdW5jdGlvbihiZSxPZSwkZSl7dmFyIFN0PWZ1bmN0aW9uIHJoKHBlLGxlKXtyZXR1cm4gcGUubmFtZStsZSsiX35JTn5fIn0oYmUucmVmZXJlbmNlZFJ1bGUsYmUuaWR4KSt0aGlzLnRvcFByb2QubmFtZSxR''@;'; put 'put ''dD1PZS5jb25jYXQoJGUpLGNyPUxsKG5ldyBSdSh7ZGVmaW5pdGlvbjpRdH0pKTt0aGlzLmZvbGxvd3NbU3RdPWNyfSxsZX0oZ2kpLF8yPTEwMjQsVGM9MTI4MCxtcz0xNTM2O2Z1bmN0aW9uIEYxKHBlLGxlLGJlKXtyZXR1cm4gYmV8bGV8cGV9ZnVuY3Rpb24gbjgocGUsbGUsYmUsT2Upe3Zh''@;'; put 'put ''ciAkZT1PZSsxPDwyNDtyZXR1cm4gRjEocGUsbGUsYmUpfCRlfXZhciBJcz1mdW5jdGlvbigpe3ZhciBwZT1mdW5jdGlvbihsZSxiZSl7cmV0dXJuKHBlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihPZSwkZSl7T2UuX19w''@;'; put 'put ''cm90b19fPSRlfXx8ZnVuY3Rpb24oT2UsJGUpe2Zvcih2YXIgU3QgaW4gJGUpJGUuaGFzT3duUHJvcGVydHkoU3QpJiYoT2VbU3RdPSRlW1N0XSl9KShsZSxiZSl9O3JldHVybiBmdW5jdGlvbihsZSxiZSl7ZnVuY3Rpb24gT2UoKXt0aGlzLmNvbnN0cnVjdG9yPWxlfXBlKGxlLGJlKSxsZS5w''@;'; put 'put ''cm90b3R5cGU9bnVsbD09PWJlP09iamVjdC5jcmVhdGUoYmUpOihPZS5wcm90b3R5cGU9YmUucHJvdG90eXBlLG5ldyBPZSl9fSgpO2Z1bmN0aW9uIHFpKHBlLGxlKXshMD09PWlzTmFOKHBlLnN0YXJ0T2Zmc2V0KT8ocGUuc3RhcnRPZmZzZXQ9bGUuc3RhcnRPZmZzZXQscGUuZW5kT2Zmc2V0''@;'; put 'put ''PWxlLmVuZE9mZnNldCk6cGUuZW5kT2Zmc2V0PGxlLmVuZE9mZnNldCYmKHBlLmVuZE9mZnNldD1sZS5lbmRPZmZzZXQpfWZ1bmN0aW9uIHphKHBlLGxlKXshMD09PWlzTmFOKHBlLnN0YXJ0T2Zmc2V0KT8ocGUuc3RhcnRPZmZzZXQ9bGUuc3RhcnRPZmZzZXQscGUuc3RhcnRDb2x1bW49bGUu''@;'; put 'put ''c3RhcnRDb2x1bW4scGUuc3RhcnRMaW5lPWxlLnN0YXJ0TGluZSxwZS5lbmRPZmZzZXQ9bGUuZW5kT2Zmc2V0LHBlLmVuZENvbHVtbj1sZS5lbmRDb2x1bW4scGUuZW5kTGluZT1sZS5lbmRMaW5lKTpwZS5lbmRPZmZzZXQ8bGUuZW5kT2Zmc2V0JiYocGUuZW5kT2Zmc2V0PWxlLmVuZE9mZnNl''@;'; put 'put ''dCxwZS5lbmRDb2x1bW49bGUuZW5kQ29sdW1uLHBlLmVuZExpbmU9bGUuZW5kTGluZSl9ZnVuY3Rpb24geXQocGUsbGUsYmUpe3ZvaWQgMD09PXBlLmNoaWxkcmVuW2xlXT9wZS5jaGlsZHJlbltsZV09W2JlXTpwZS5jaGlsZHJlbltsZV0ucHVzaChiZSl9dmFyIGp0PWZ1bmN0aW9uKHBlKXtm''@;'; put 'put ''dW5jdGlvbiBsZShiZSl7dmFyIE9lPXBlLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIE9lLnJlc3VsdD1bXSxPZS5ydWxlSWR4PWJlLE9lfXJldHVybiBJcyhsZSxwZSksbGUucHJvdG90eXBlLmNvbGxlY3ROYW1lZERTTE1ldGhvZD1mdW5jdGlvbihiZSxPZSwkZSl7aWYoIVUoYmUubmFtZSkp''@;'; put 'put ''e3ZhciBTdD12b2lkIDA7aWYoYmUgaW5zdGFuY2VvZiBoY3x8YmUgaW5zdGFuY2VvZiBjbHx8YmUgaW5zdGFuY2VvZiBlZHx8YmUgaW5zdGFuY2VvZiBldSlTdD1uZXcgT2Uoe2RlZmluaXRpb246YmUuZGVmaW5pdGlvbixpZHg6YmUuaWR4fSk7ZWxzZXtpZighKGJlIGluc3RhbmNlb2YgSm58''@;'; put 'put ''fGJlIGluc3RhbmNlb2YgbWkpKXRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpO1N0PW5ldyBPZSh7ZGVmaW5pdGlvbjpiZS5kZWZpbml0aW9uLGlkeDpiZS5pZHgsc2VwYXJhdG9yOmJlLnNlcGFyYXRvcn0pfXZhciBRdD1bU3RdLEVuPUYxKHRoaXMucnVsZUlkeCwkZSxiZS5p''@;'; put 'put ''ZHgpO3RoaXMucmVzdWx0LnB1c2goe2RlZjpRdCxrZXk6RW4sbmFtZTpiZS5uYW1lLG9yZ1Byb2Q6YmV9KX19LGxlLnByb3RvdHlwZS52aXNpdE9wdGlvbj1mdW5jdGlvbihiZSl7dGhpcy5jb2xsZWN0TmFtZWREU0xNZXRob2QoYmUsaGMsNTEyKX0sbGUucHJvdG90eXBlLnZpc2l0UmVwZXRp''@;'; put 'put ''dGlvbj1mdW5jdGlvbihiZSl7dGhpcy5jb2xsZWN0TmFtZWREU0xNZXRob2QoYmUsY2wsNzY4KX0sbGUucHJvdG90eXBlLnZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeT1mdW5jdGlvbihiZSl7dGhpcy5jb2xsZWN0TmFtZWREU0xNZXRob2QoYmUsZWQsXzIpfSxsZS5wcm90b3R5cGUudmlzaXRS''@;'; put 'put ''ZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcj1mdW5jdGlvbihiZSl7dGhpcy5jb2xsZWN0TmFtZWREU0xNZXRob2QoYmUsSm4sbXMpfSxsZS5wcm90b3R5cGUudmlzaXRSZXBldGl0aW9uV2l0aFNlcGFyYXRvcj1mdW5jdGlvbihiZSl7dGhpcy5jb2xsZWN0TmFtZWREU0xNZXRob2Qo''@;'; put 'put ''YmUsbWksVGMpfSxsZS5wcm90b3R5cGUudmlzaXRBbHRlcm5hdGlvbj1mdW5jdGlvbihiZSl7dmFyIE9lPXRoaXM7dGhpcy5jb2xsZWN0TmFtZWREU0xNZXRob2QoYmUsZXUsMjU2KTt2YXIgJGU9YmUuZGVmaW5pdGlvbi5sZW5ndGg+MTtSKGJlLmRlZmluaXRpb24sZnVuY3Rpb24oU3QsUXQp''@;'; put 'put ''e2lmKCFVKFN0Lm5hbWUpKXt2YXIgRW47RW49JGU/W25ldyBoYyh7ZGVmaW5pdGlvbjpTdC5kZWZpbml0aW9ufSldOlN0LmRlZmluaXRpb247dmFyIGNyPW44KE9lLnJ1bGVJZHgsMjU2LGJlLmlkeCxRdCk7T2UucmVzdWx0LnB1c2goe2RlZjpFbixrZXk6Y3IsbmFtZTpTdC5uYW1lLG9yZ1By''@;'; put 'put ''b2Q6U3R9KX19KX0sbGV9KGxzKSxtbj1mdW5jdGlvbigpe3ZhciBwZT1mdW5jdGlvbihsZSxiZSl7cmV0dXJuKHBlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihPZSwkZSl7T2UuX19wcm90b19fPSRlfXx8ZnVuY3Rpb24o''@;'; put 'put ''T2UsJGUpe2Zvcih2YXIgU3QgaW4gJGUpJGUuaGFzT3duUHJvcGVydHkoU3QpJiYoT2VbU3RdPSRlW1N0XSl9KShsZSxiZSl9O3JldHVybiBmdW5jdGlvbihsZSxiZSl7ZnVuY3Rpb24gT2UoKXt0aGlzLmNvbnN0cnVjdG9yPWxlfXBlKGxlLGJlKSxsZS5wcm90b3R5cGU9bnVsbD09PWJlP09i''@;'; put 'put ''amVjdC5jcmVhdGUoYmUpOihPZS5wcm90b3R5cGU9YmUucHJvdG90eXBlLG5ldyBPZSl9fSgpLFFuPWZ1bmN0aW9uKHBlKXtmdW5jdGlvbiBsZShiZSxPZSl7dmFyICRlPXBlLmNhbGwodGhpcyxiZSxPZSl8fHRoaXM7cmV0dXJuICRlLnBhdGg9T2UsJGUubmV4dFRlcm1pbmFsTmFtZT0iIiwk''@;'; put 'put ''ZS5uZXh0VGVybWluYWxPY2N1cnJlbmNlPTAsJGUubmV4dFRlcm1pbmFsTmFtZT0kZS5wYXRoLmxhc3RUb2submFtZSwkZS5uZXh0VGVybWluYWxPY2N1cnJlbmNlPSRlLnBhdGgubGFzdFRva09jY3VycmVuY2UsJGV9cmV0dXJuIG1uKGxlLHBlKSxsZS5wcm90b3R5cGUud2Fsa1Rlcm1pbmFs''@;'; put 'put ''PWZ1bmN0aW9uKGJlLE9lLCRlKXtpZih0aGlzLmlzQXRFbmRPZlBhdGgmJmJlLnRlcm1pbmFsVHlwZS5uYW1lPT09dGhpcy5uZXh0VGVybWluYWxOYW1lJiZiZS5pZHg9PT10aGlzLm5leHRUZXJtaW5hbE9jY3VycmVuY2UmJiF0aGlzLmZvdW5kKXt2YXIgU3Q9T2UuY29uY2F0KCRlKSxRdD1u''@;'; put 'put ''ZXcgUnUoe2RlZmluaXRpb246U3R9KTt0aGlzLnBvc3NpYmxlVG9rVHlwZXM9TGwoUXQpLHRoaXMuZm91bmQ9ITB9fSxsZX0oZnVuY3Rpb24ocGUpe2Z1bmN0aW9uIGxlKGJlLE9lKXt2YXIgJGU9cGUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gJGUudG9wUHJvZD1iZSwkZS5wYXRoPU9lLCRl''@;'; put 'put ''LnBvc3NpYmxlVG9rVHlwZXM9W10sJGUubmV4dFByb2R1Y3Rpb25OYW1lPSIiLCRlLm5leHRQcm9kdWN0aW9uT2NjdXJyZW5jZT0wLCRlLmZvdW5kPSExLCRlLmlzQXRFbmRPZlBhdGg9ITEsJGV9cmV0dXJuIG1uKGxlLHBlKSxsZS5wcm90b3R5cGUuc3RhcnRXYWxraW5nPWZ1bmN0aW9uKCl7''@;'; put 'put ''aWYodGhpcy5mb3VuZD0hMSx0aGlzLnBhdGgucnVsZVN0YWNrWzBdIT09dGhpcy50b3BQcm9kLm5hbWUpdGhyb3cgRXJyb3IoIlRoZSBwYXRoIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIHdhbGtlcidzIHRvcCBSdWxlISIpO3JldHVybiB0aGlzLnJ1bGVTdGFjaz1yZSh0aGlzLnBhdGgucnVs''@;'; put 'put ''ZVN0YWNrKS5yZXZlcnNlKCksdGhpcy5vY2N1cnJlbmNlU3RhY2s9cmUodGhpcy5wYXRoLm9jY3VycmVuY2VTdGFjaykucmV2ZXJzZSgpLHRoaXMucnVsZVN0YWNrLnBvcCgpLHRoaXMub2NjdXJyZW5jZVN0YWNrLnBvcCgpLHRoaXMudXBkYXRlRXhwZWN0ZWROZXh0KCksdGhpcy53YWxrKHRo''@;'; put 'put ''aXMudG9wUHJvZCksdGhpcy5wb3NzaWJsZVRva1R5cGVzfSxsZS5wcm90b3R5cGUud2Fsaz1mdW5jdGlvbihiZSxPZSl7dm9pZCAwPT09T2UmJihPZT1bXSksdGhpcy5mb3VuZHx8cGUucHJvdG90eXBlLndhbGsuY2FsbCh0aGlzLGJlLE9lKX0sbGUucHJvdG90eXBlLndhbGtQcm9kUmVmPWZ1''@;'; put 'put ''bmN0aW9uKGJlLE9lLCRlKXtpZihiZS5yZWZlcmVuY2VkUnVsZS5uYW1lPT09dGhpcy5uZXh0UHJvZHVjdGlvbk5hbWUmJmJlLmlkeD09PXRoaXMubmV4dFByb2R1Y3Rpb25PY2N1cnJlbmNlKXt2YXIgU3Q9T2UuY29uY2F0KCRlKTt0aGlzLnVwZGF0ZUV4cGVjdGVkTmV4dCgpLHRoaXMud2Fs''@;'; put 'put ''ayhiZS5yZWZlcmVuY2VkUnVsZSxTdCl9fSxsZS5wcm90b3R5cGUudXBkYXRlRXhwZWN0ZWROZXh0PWZ1bmN0aW9uKCl7Yyh0aGlzLnJ1bGVTdGFjayk/KHRoaXMubmV4dFByb2R1Y3Rpb25OYW1lPSIiLHRoaXMubmV4dFByb2R1Y3Rpb25PY2N1cnJlbmNlPTAsdGhpcy5pc0F0RW5kT2ZQYXRo''@;'; put 'put ''PSEwKToodGhpcy5uZXh0UHJvZHVjdGlvbk5hbWU9dGhpcy5ydWxlU3RhY2sucG9wKCksdGhpcy5uZXh0UHJvZHVjdGlvbk9jY3VycmVuY2U9dGhpcy5vY2N1cnJlbmNlU3RhY2sucG9wKCkpfSxsZX0oZ2kpKSxscj1mdW5jdGlvbihwZSl7ZnVuY3Rpb24gbGUoYmUsT2Upe3ZhciAkZT1wZS5j''@;'; put 'put ''YWxsKHRoaXMpfHx0aGlzO3JldHVybiAkZS50b3BSdWxlPWJlLCRlLm9jY3VycmVuY2U9T2UsJGUucmVzdWx0PXt0b2tlbjp2b2lkIDAsb2NjdXJyZW5jZTp2b2lkIDAsaXNFbmRPZlJ1bGU6dm9pZCAwfSwkZX1yZXR1cm4gbW4obGUscGUpLGxlLnByb3RvdHlwZS5zdGFydFdhbGtpbmc9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpcy53YWxrKHRoaXMudG9wUnVsZSksdGhpcy5yZXN1bHR9LGxlfShnaSksaWk9ZnVuY3Rpb24ocGUpe2Z1bmN0aW9uIGxlKCl7cmV0dXJuIG51bGwhPT1wZSYmcGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBtbihsZSxwZSksbGUucHJvdG90''@;'; put 'put ''eXBlLndhbGtNYW55PWZ1bmN0aW9uKGJlLE9lLCRlKXtpZihiZS5pZHg9PT10aGlzLm9jY3VycmVuY2Upe3ZhciBTdD1TKE9lLmNvbmNhdCgkZSkpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPXZvaWQgMD09PVN0LFN0IGluc3RhbmNlb2YgU2wmJih0aGlzLnJlc3VsdC50b2tlbj1TdC50ZXJt''@;'; put 'put ''aW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1TdC5pZHgpfWVsc2UgcGUucHJvdG90eXBlLndhbGtNYW55LmNhbGwodGhpcyxiZSxPZSwkZSl9LGxlfShsciksa2k9ZnVuY3Rpb24ocGUpe2Z1bmN0aW9uIGxlKCl7cmV0dXJuIG51bGwhPT1wZSYmcGUuYXBwbHkodGhpcyxhcmd1bWVu''@;'; put 'put ''dHMpfHx0aGlzfXJldHVybiBtbihsZSxwZSksbGUucHJvdG90eXBlLndhbGtNYW55U2VwPWZ1bmN0aW9uKGJlLE9lLCRlKXtpZihiZS5pZHg9PT10aGlzLm9jY3VycmVuY2Upe3ZhciBTdD1TKE9lLmNvbmNhdCgkZSkpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPXZvaWQgMD09PVN0LFN0IGlu''@;'; put 'put ''c3RhbmNlb2YgU2wmJih0aGlzLnJlc3VsdC50b2tlbj1TdC50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1TdC5pZHgpfWVsc2UgcGUucHJvdG90eXBlLndhbGtNYW55U2VwLmNhbGwodGhpcyxiZSxPZSwkZSl9LGxlfShsciksV2k9ZnVuY3Rpb24ocGUpe2Z1bmN0aW9uIGxl''@;'; put 'put ''KCl7cmV0dXJuIG51bGwhPT1wZSYmcGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBtbihsZSxwZSksbGUucHJvdG90eXBlLndhbGtBdExlYXN0T25lPWZ1bmN0aW9uKGJlLE9lLCRlKXtpZihiZS5pZHg9PT10aGlzLm9jY3VycmVuY2Upe3ZhciBTdD1TKE9lLmNvbmNhdCgk''@;'; put 'put ''ZSkpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPXZvaWQgMD09PVN0LFN0IGluc3RhbmNlb2YgU2wmJih0aGlzLnJlc3VsdC50b2tlbj1TdC50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1TdC5pZHgpfWVsc2UgcGUucHJvdG90eXBlLndhbGtBdExlYXN0T25lLmNhbGwodGhp''@;'; put 'put ''cyxiZSxPZSwkZSl9LGxlfShsciksS2k9ZnVuY3Rpb24ocGUpe2Z1bmN0aW9uIGxlKCl7cmV0dXJuIG51bGwhPT1wZSYmcGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBtbihsZSxwZSksbGUucHJvdG90eXBlLndhbGtBdExlYXN0T25lU2VwPWZ1bmN0aW9uKGJlLE9lLCRl''@;'; put 'put ''KXtpZihiZS5pZHg9PT10aGlzLm9jY3VycmVuY2Upe3ZhciBTdD1TKE9lLmNvbmNhdCgkZSkpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPXZvaWQgMD09PVN0LFN0IGluc3RhbmNlb2YgU2wmJih0aGlzLnJlc3VsdC50b2tlbj1TdC50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5j''@;'; put 'put ''ZT1TdC5pZHgpfWVsc2UgcGUucHJvdG90eXBlLndhbGtBdExlYXN0T25lU2VwLmNhbGwodGhpcyxiZSxPZSwkZSl9LGxlfShscik7ZnVuY3Rpb24gTmEocGUsbGUsYmUpe3ZvaWQgMD09PWJlJiYoYmU9W10pLGJlPXJlKGJlKTt2YXIgT2U9W10sJGU9MDtmdW5jdGlvbiBRdChVcil7dmFyIHBp''@;'; put 'put ''PU5hKGZ1bmN0aW9uIFN0KFVyKXtyZXR1cm4gVXIuY29uY2F0KFYocGUsJGUrMSkpfShVciksbGUsYmUpO3JldHVybiBPZS5jb25jYXQocGkpfWZvcig7YmUubGVuZ3RoPGxlJiYkZTxwZS5sZW5ndGg7KXt2YXIgRW49cGVbJGVdO2lmKEVuIGluc3RhbmNlb2YgUnUpcmV0dXJuIFF0KEVuLmRl''@;'; put 'put ''ZmluaXRpb24pO2lmKEVuIGluc3RhbmNlb2YgQnUpcmV0dXJuIFF0KEVuLmRlZmluaXRpb24pO2lmKEVuIGluc3RhbmNlb2YgaGMpT2U9UXQoRW4uZGVmaW5pdGlvbik7ZWxzZXtpZihFbiBpbnN0YW5jZW9mIGVkKXJldHVybiBRdChjcj1Fbi5kZWZpbml0aW9uLmNvbmNhdChbbmV3IGNsKHtk''@;'; put 'put ''ZWZpbml0aW9uOkVuLmRlZmluaXRpb259KV0pKTtpZihFbiBpbnN0YW5jZW9mIEpuKXJldHVybiBRdChjcj1bbmV3IFJ1KHtkZWZpbml0aW9uOkVuLmRlZmluaXRpb259KSxuZXcgY2woe2RlZmluaXRpb246W25ldyBTbCh7dGVybWluYWxUeXBlOkVuLnNlcGFyYXRvcn0pXS5jb25jYXQoRW4u''@;'; put 'put ''ZGVmaW5pdGlvbil9KV0pO2lmKEVuIGluc3RhbmNlb2YgbWkpe3ZhciBjcj1Fbi5kZWZpbml0aW9uLmNvbmNhdChbbmV3IGNsKHtkZWZpbml0aW9uOltuZXcgU2woe3Rlcm1pbmFsVHlwZTpFbi5zZXBhcmF0b3J9KV0uY29uY2F0KEVuLmRlZmluaXRpb24pfSldKTtPZT1RdChjcil9ZWxzZSBp''@;'; put 'put ''ZihFbiBpbnN0YW5jZW9mIGNsKWNyPUVuLmRlZmluaXRpb24uY29uY2F0KFtuZXcgY2woe2RlZmluaXRpb246RW4uZGVmaW5pdGlvbn0pXSksT2U9UXQoY3IpO2Vsc2V7aWYoRW4gaW5zdGFuY2VvZiBldSlyZXR1cm4gUihFbi5kZWZpbml0aW9uLGZ1bmN0aW9uKFVyKXtPZT1RdChVci5kZWZp''@;'; put 'put ''bml0aW9uKX0pLE9lO2lmKCEoRW4gaW5zdGFuY2VvZiBTbCkpdGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIik7YmUucHVzaChFbi50ZXJtaW5hbFR5cGUpfX0kZSsrfXJldHVybiBPZS5wdXNoKHtwYXJ0aWFsUGF0aDpiZSxzdWZmaXhEZWY6VihwZSwkZSl9KSxPZX1mdW5jdGlv''@;'; put 'put ''biBSbyhwZSxsZSxiZSxPZSl7dmFyICRlPSJFWElUX05PTkVfVEVSTUlOQUwiLFN0PVskZV0sUXQ9IkVYSVRfQUxURVJOQVRJVkUiLEVuPSExLGNyPWxlLmxlbmd0aCxVcj1jci1PZS0xLHBpPVtdLERyPVtdO2ZvcihEci5wdXNoKHtpZHg6LTEsZGVmOnBlLHJ1bGVTdGFjazpbXSxvY2N1cnJl''@;'; put 'put ''bmNlU3RhY2s6W119KTshYyhEcik7KXt2YXIgSmk9RHIucG9wKCk7aWYoSmkhPT1RdCl7dmFyIHhvPUppLmRlZixZaT1KaS5pZHgsZHM9SmkucnVsZVN0YWNrLFBzPUppLm9jY3VycmVuY2VTdGFjaztpZighYyh4bykpe3ZhciBhYT14b1swXTtpZihhYT09PSRlKXt2YXIgSW89e2lkeDpZaSxk''@;'; put 'put ''ZWY6Vih4bykscnVsZVN0YWNrOk4oZHMpLG9jY3VycmVuY2VTdGFjazpOKFBzKX07RHIucHVzaChJbyl9ZWxzZSBpZihhYSBpbnN0YW5jZW9mIFNsKWlmKFlpPGNyLTEpe3ZhciBaaT1ZaSsxO2JlKGxlW1ppXSxhYS50ZXJtaW5hbFR5cGUpJiYoSW89e2lkeDpaaSxkZWY6Vih4bykscnVsZVN0''@;'; put 'put ''YWNrOmRzLG9jY3VycmVuY2VTdGFjazpQc30sRHIucHVzaChJbykpfWVsc2V7aWYoWWkhPT1jci0xKXRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpO3BpLnB1c2goe25leHRUb2tlblR5cGU6YWEudGVybWluYWxUeXBlLG5leHRUb2tlbk9jY3VycmVuY2U6YWEuaWR4LHJ1bGVT''@;'; put 'put ''dGFjazpkcyxvY2N1cnJlbmNlU3RhY2s6UHN9KSxFbj0hMH1lbHNlIGlmKGFhIGluc3RhbmNlb2YgQnUpe3ZhciBqbD1yZShkcyk7amwucHVzaChhYS5ub25UZXJtaW5hbE5hbWUpO3ZhciBWMT1yZShQcyk7VjEucHVzaChhYS5pZHgpLElvPXtpZHg6WWksZGVmOmFhLmRlZmluaXRpb24uY29u''@;'; put 'put ''Y2F0KFN0LFYoeG8pKSxydWxlU3RhY2s6amwsb2NjdXJyZW5jZVN0YWNrOlYxfSxEci5wdXNoKElvKX1lbHNlIGlmKGFhIGluc3RhbmNlb2YgaGMpe3ZhciBwYz17aWR4OllpLGRlZjpWKHhvKSxydWxlU3RhY2s6ZHMsb2NjdXJyZW5jZVN0YWNrOlBzfTtEci5wdXNoKHBjKSxEci5wdXNoKFF0''@;'; put 'put ''KTt2YXIgVWQ9e2lkeDpZaSxkZWY6YWEuZGVmaW5pdGlvbi5jb25jYXQoVih4bykpLHJ1bGVTdGFjazpkcyxvY2N1cnJlbmNlU3RhY2s6UHN9O0RyLnB1c2goVWQpfWVsc2UgaWYoYWEgaW5zdGFuY2VvZiBlZCl7dmFyIGwxPW5ldyBjbCh7ZGVmaW5pdGlvbjphYS5kZWZpbml0aW9uLGlkeDph''@;'; put 'put ''YS5pZHh9KSxvZD1hYS5kZWZpbml0aW9uLmNvbmNhdChbbDFdLFYoeG8pKTtEci5wdXNoKElvPXtpZHg6WWksZGVmOm9kLHJ1bGVTdGFjazpkcyxvY2N1cnJlbmNlU3RhY2s6UHN9KX1lbHNlIGlmKGFhIGluc3RhbmNlb2YgSm4pe3ZhciBaYz1uZXcgU2woe3Rlcm1pbmFsVHlwZTphYS5zZXBh''@;'; put 'put ''cmF0b3J9KTtsMT1uZXcgY2woe2RlZmluaXRpb246W1pjXS5jb25jYXQoYWEuZGVmaW5pdGlvbiksaWR4OmFhLmlkeH0pLG9kPWFhLmRlZmluaXRpb24uY29uY2F0KFtsMV0sVih4bykpLERyLnB1c2goSW89e2lkeDpZaSxkZWY6b2QscnVsZVN0YWNrOmRzLG9jY3VycmVuY2VTdGFjazpQc30p''@;'; put 'put ''fWVsc2UgaWYoYWEgaW5zdGFuY2VvZiBtaSl7cGM9e2lkeDpZaSxkZWY6Vih4bykscnVsZVN0YWNrOmRzLG9jY3VycmVuY2VTdGFjazpQc30sRHIucHVzaChwYyksRHIucHVzaChRdCksWmM9bmV3IFNsKHt0ZXJtaW5hbFR5cGU6YWEuc2VwYXJhdG9yfSk7dmFyIGgwPW5ldyBjbCh7ZGVmaW5p''@;'; put 'put ''dGlvbjpbWmNdLmNvbmNhdChhYS5kZWZpbml0aW9uKSxpZHg6YWEuaWR4fSk7b2Q9YWEuZGVmaW5pdGlvbi5jb25jYXQoW2gwXSxWKHhvKSksRHIucHVzaChVZD17aWR4OllpLGRlZjpvZCxydWxlU3RhY2s6ZHMsb2NjdXJyZW5jZVN0YWNrOlBzfSl9ZWxzZSBpZihhYSBpbnN0YW5jZW9mIGNs''@;'; put 'put ''KXBjPXtpZHg6WWksZGVmOlYoeG8pLHJ1bGVTdGFjazpkcyxvY2N1cnJlbmNlU3RhY2s6UHN9LERyLnB1c2gocGMpLERyLnB1c2goUXQpLGgwPW5ldyBjbCh7ZGVmaW5pdGlvbjphYS5kZWZpbml0aW9uLGlkeDphYS5pZHh9KSxvZD1hYS5kZWZpbml0aW9uLmNvbmNhdChbaDBdLFYoeG8pKSxE''@;'; put 'put ''ci5wdXNoKFVkPXtpZHg6WWksZGVmOm9kLHJ1bGVTdGFjazpkcyxvY2N1cnJlbmNlU3RhY2s6UHN9KTtlbHNlIGlmKGFhIGluc3RhbmNlb2YgZXUpZm9yKHZhciBTMj1hYS5kZWZpbml0aW9uLmxlbmd0aC0xO1MyPj0wO1MyLS0pe3ZhciBNZj17aWR4OllpLGRlZjphYS5kZWZpbml0aW9uW1My''@;'; put 'put ''XS5kZWZpbml0aW9uLmNvbmNhdChWKHhvKSkscnVsZVN0YWNrOmRzLG9jY3VycmVuY2VTdGFjazpQc307RHIucHVzaChNZiksRHIucHVzaChRdCl9ZWxzZSBpZihhYSBpbnN0YW5jZW9mIFJ1KURyLnB1c2goe2lkeDpZaSxkZWY6YWEuZGVmaW5pdGlvbi5jb25jYXQoVih4bykpLHJ1bGVTdGFj''@;'; put 'put ''azpkcyxvY2N1cnJlbmNlU3RhY2s6UHN9KTtlbHNle2lmKCEoYWEgaW5zdGFuY2VvZiBOMSkpdGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIik7RHIucHVzaChkbChhYSxZaSxkcyxQcykpfX19ZWxzZSBFbiYmTChEcikuaWR4PD1VciYmRHIucG9wKCl9cmV0dXJuIHBpfWZ1bmN0''@;'; put 'put ''aW9uIGRsKHBlLGxlLGJlLE9lKXt2YXIgJGU9cmUoYmUpOyRlLnB1c2gocGUubmFtZSk7dmFyIFN0PXJlKE9lKTtyZXR1cm4gU3QucHVzaCgxKSx7aWR4OmxlLGRlZjpwZS5kZWZpbml0aW9uLHJ1bGVTdGFjazokZSxvY2N1cnJlbmNlU3RhY2s6U3R9fXZhciBvcj1mdW5jdGlvbigpe3ZhciBw''@;'; put 'put ''ZT1mdW5jdGlvbihsZSxiZSl7cmV0dXJuKHBlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihPZSwkZSl7T2UuX19wcm90b19fPSRlfXx8ZnVuY3Rpb24oT2UsJGUpe2Zvcih2YXIgU3QgaW4gJGUpJGUuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkoU3QpJiYoT2VbU3RdPSRlW1N0XSl9KShsZSxiZSl9O3JldHVybiBmdW5jdGlvbihsZSxiZSl7ZnVuY3Rpb24gT2UoKXt0aGlzLmNvbnN0cnVjdG9yPWxlfXBlKGxlLGJlKSxsZS5wcm90b3R5cGU9bnVsbD09PWJlP09iamVjdC5jcmVhdGUoYmUpOihPZS5wcm90b3R5cGU9YmUucHJvdG90''@;'; put 'put ''eXBlLG5ldyBPZSl9fSgpLGNvPWZ1bmN0aW9uKHBlKXtyZXR1cm4gcGVbcGUuT1BUSU9OPTBdPSJPUFRJT04iLHBlW3BlLlJFUEVUSVRJT049MV09IlJFUEVUSVRJT04iLHBlW3BlLlJFUEVUSVRJT05fTUFOREFUT1JZPTJdPSJSRVBFVElUSU9OX01BTkRBVE9SWSIscGVbcGUuUkVQRVRJVElP''@;'; put 'put ''Tl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1I9M109IlJFUEVUSVRJT05fTUFOREFUT1JZX1dJVEhfU0VQQVJBVE9SIixwZVtwZS5SRVBFVElUSU9OX1dJVEhfU0VQQVJBVE9SPTRdPSJSRVBFVElUSU9OX1dJVEhfU0VQQVJBVE9SIixwZVtwZS5BTFRFUk5BVElPTj01XT0iQUxURVJOQVRJT04i''@;'; put 'put ''LHBlfShjb3x8e30pLFdjPWZ1bmN0aW9uKHBlKXtmdW5jdGlvbiBsZShiZSxPZSwkZSl7dmFyIFN0PXBlLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIFN0LnRvcFByb2Q9YmUsU3QudGFyZ2V0T2NjdXJyZW5jZT1PZSxTdC50YXJnZXRQcm9kVHlwZT0kZSxTdH1yZXR1cm4gb3IobGUscGUpLGxl''@;'; put 'put ''LnByb3RvdHlwZS5zdGFydFdhbGtpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53YWxrKHRoaXMudG9wUHJvZCksdGhpcy5yZXN0RGVmfSxsZS5wcm90b3R5cGUuY2hlY2tJc1RhcmdldD1mdW5jdGlvbihiZSxPZSwkZSxTdCl7cmV0dXJuIGJlLmlkeD09PXRoaXMudGFyZ2V0T2NjdXJyZW5j''@;'; put 'put ''ZSYmdGhpcy50YXJnZXRQcm9kVHlwZT09PU9lJiYodGhpcy5yZXN0RGVmPSRlLmNvbmNhdChTdCksITApfSxsZS5wcm90b3R5cGUud2Fsa09wdGlvbj1mdW5jdGlvbihiZSxPZSwkZSl7dGhpcy5jaGVja0lzVGFyZ2V0KGJlLGNvLk9QVElPTixPZSwkZSl8fHBlLnByb3RvdHlwZS53YWxrT3B0''@;'; put 'put ''aW9uLmNhbGwodGhpcyxiZSxPZSwkZSl9LGxlLnByb3RvdHlwZS53YWxrQXRMZWFzdE9uZT1mdW5jdGlvbihiZSxPZSwkZSl7dGhpcy5jaGVja0lzVGFyZ2V0KGJlLGNvLlJFUEVUSVRJT05fTUFOREFUT1JZLE9lLCRlKXx8cGUucHJvdG90eXBlLndhbGtPcHRpb24uY2FsbCh0aGlzLGJlLE9l''@;'; put 'put ''LCRlKX0sbGUucHJvdG90eXBlLndhbGtBdExlYXN0T25lU2VwPWZ1bmN0aW9uKGJlLE9lLCRlKXt0aGlzLmNoZWNrSXNUYXJnZXQoYmUsY28uUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1IsT2UsJGUpfHxwZS5wcm90b3R5cGUud2Fsa09wdGlvbi5jYWxsKHRoaXMsYmUsT2Us''@;'; put 'put ''JGUpfSxsZS5wcm90b3R5cGUud2Fsa01hbnk9ZnVuY3Rpb24oYmUsT2UsJGUpe3RoaXMuY2hlY2tJc1RhcmdldChiZSxjby5SRVBFVElUSU9OLE9lLCRlKXx8cGUucHJvdG90eXBlLndhbGtPcHRpb24uY2FsbCh0aGlzLGJlLE9lLCRlKX0sbGUucHJvdG90eXBlLndhbGtNYW55U2VwPWZ1bmN0''@;'; put 'put ''aW9uKGJlLE9lLCRlKXt0aGlzLmNoZWNrSXNUYXJnZXQoYmUsY28uUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUixPZSwkZSl8fHBlLnByb3RvdHlwZS53YWxrT3B0aW9uLmNhbGwodGhpcyxiZSxPZSwkZSl9LGxlfShnaSksbmM9ZnVuY3Rpb24ocGUpe2Z1bmN0aW9uIGxlKGJlLE9lLCRlKXt2''@;'; put 'put ''YXIgU3Q9cGUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gU3QudGFyZ2V0T2NjdXJyZW5jZT1iZSxTdC50YXJnZXRQcm9kVHlwZT1PZSxTdC50YXJnZXRSZWY9JGUsU3QucmVzdWx0PVtdLFN0fXJldHVybiBvcihsZSxwZSksbGUucHJvdG90eXBlLmNoZWNrSXNUYXJnZXQ9ZnVuY3Rpb24oYmUs''@;'; put 'put ''T2Upe2JlLmlkeD09PXRoaXMudGFyZ2V0T2NjdXJyZW5jZSYmdGhpcy50YXJnZXRQcm9kVHlwZT09PU9lJiYodm9pZCAwPT09dGhpcy50YXJnZXRSZWZ8fGJlPT09dGhpcy50YXJnZXRSZWYpJiYodGhpcy5yZXN1bHQ9YmUuZGVmaW5pdGlvbil9LGxlLnByb3RvdHlwZS52aXNpdE9wdGlvbj1m''@;'; put 'put ''dW5jdGlvbihiZSl7dGhpcy5jaGVja0lzVGFyZ2V0KGJlLGNvLk9QVElPTil9LGxlLnByb3RvdHlwZS52aXNpdFJlcGV0aXRpb249ZnVuY3Rpb24oYmUpe3RoaXMuY2hlY2tJc1RhcmdldChiZSxjby5SRVBFVElUSU9OKX0sbGUucHJvdG90eXBlLnZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeT1m''@;'; put 'put ''dW5jdGlvbihiZSl7dGhpcy5jaGVja0lzVGFyZ2V0KGJlLGNvLlJFUEVUSVRJT05fTUFOREFUT1JZKX0sbGUucHJvdG90eXBlLnZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3I9ZnVuY3Rpb24oYmUpe3RoaXMuY2hlY2tJc1RhcmdldChiZSxjby5SRVBFVElUSU9OX01BTkRB''@;'; put 'put ''VE9SWV9XSVRIX1NFUEFSQVRPUil9LGxlLnByb3RvdHlwZS52aXNpdFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yPWZ1bmN0aW9uKGJlKXt0aGlzLmNoZWNrSXNUYXJnZXQoYmUsY28uUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUil9LGxlLnByb3RvdHlwZS52aXNpdEFsdGVybmF0aW9uPWZ1bmN0''@;'; put 'put ''aW9uKGJlKXt0aGlzLmNoZWNrSXNUYXJnZXQoYmUsY28uQUxURVJOQVRJT04pfSxsZX0obHMpO2Z1bmN0aW9uIHkyKHBlKXtmb3IodmFyIGxlPW5ldyBBcnJheShwZSksYmU9MDtiZTxwZTtiZSsrKWxlW2JlXT1bXTtyZXR1cm4gbGV9ZnVuY3Rpb24gRHUocGUpe2Zvcih2YXIgbGU9WyIiXSxi''@;'; put 'put ''ZT0wO2JlPHBlLmxlbmd0aDtiZSsrKXtmb3IodmFyIE9lPXBlW2JlXSwkZT1bXSxTdD0wO1N0PGxlLmxlbmd0aDtTdCsrKXt2YXIgUXQ9bGVbU3RdOyRlLnB1c2goUXQrIl8iK09lLnRva2VuVHlwZUlkeCk7Zm9yKHZhciBFbj0wO0VuPE9lLmNhdGVnb3J5TWF0Y2hlcy5sZW5ndGg7RW4rKykk''@;'; put 'put ''ZS5wdXNoKFF0KyJfIitPZS5jYXRlZ29yeU1hdGNoZXNbRW5dKX1sZT0kZX1yZXR1cm4gbGV9ZnVuY3Rpb24gZTEocGUsbGUsYmUpe2Zvcih2YXIgT2U9MDtPZTxwZS5sZW5ndGg7T2UrKylpZihPZSE9PWJlKWZvcih2YXIgJGU9cGVbT2VdLFN0PTA7U3Q8bGUubGVuZ3RoO1N0KyspaWYoITA9''@;'; put 'put ''PT0kZVtsZVtTdF1dKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHQxKHBlLGxlKXtmb3IodmFyIGJlPUMocGUsZnVuY3Rpb24ocGkpe3JldHVybiBOYShbcGldLDEpfSksT2U9eTIoYmUubGVuZ3RoKSwkZT1DKGJlLGZ1bmN0aW9uKHBpKXt2YXIgRHI9e307cmV0dXJuIFIocGksZnVuY3Rp''@;'; put 'put ''b24oSmkpe1IoRHUoSmkucGFydGlhbFBhdGgpLGZ1bmN0aW9uKFlpKXtEcltZaV09ITB9KX0pLERyfSksU3Q9YmUsUXQ9MTtRdDw9bGU7UXQrKyl7dmFyIEVuPVN0O1N0PXkyKEVuLmxlbmd0aCk7Zm9yKHZhciBjcj1mdW5jdGlvbihwaSl7Zm9yKHZhciBEcj1FbltwaV0sSmk9MDtKaTxEci5s''@;'; put 'put ''ZW5ndGg7SmkrKyl7dmFyIHhvPURyW0ppXS5wYXJ0aWFsUGF0aCxZaT1EcltKaV0uc3VmZml4RGVmLGRzPUR1KHhvKTtpZihlMSgkZSxkcyxwaSl8fGMoWWkpfHx4by5sZW5ndGg9PT1sZSl7dmFyIGFhPU9lW3BpXTtpZighMT09PWIyKGFhLHhvKSl7YWEucHVzaCh4byk7Zm9yKHZhciBJbz0w''@;'; put 'put ''O0lvPGRzLmxlbmd0aDtJbysrKSRlW3BpXVtkc1tJb11dPSEwfX1lbHNle3ZhciBnbD1OYShZaSxRdCsxLHhvKTtTdFtwaV09U3RbcGldLmNvbmNhdChnbCksUihnbCxmdW5jdGlvbihqbCl7UihEdShqbC5wYXJ0aWFsUGF0aCksZnVuY3Rpb24ocGMpeyRlW3BpXVtwY109ITB9KX0pfX19LFVy''@;'; put 'put ''PTA7VXI8RW4ubGVuZ3RoO1VyKyspY3IoVXIpfXJldHVybiBPZX1mdW5jdGlvbiBiZChwZSxsZSxiZSxPZSl7dmFyICRlPW5ldyBuYyhwZSxjby5BTFRFUk5BVElPTixPZSk7cmV0dXJuIGxlLmFjY2VwdCgkZSksdDEoJGUucmVzdWx0LGJlKX1mdW5jdGlvbiBzMChwZSxsZSxiZSxPZSl7dmFy''@;'; put 'put ''ICRlPW5ldyBuYyhwZSxiZSk7bGUuYWNjZXB0KCRlKTt2YXIgU3Q9JGUucmVzdWx0LEVuPW5ldyBXYyhsZSxwZSxiZSkuc3RhcnRXYWxraW5nKCk7cmV0dXJuIHQxKFtuZXcgUnUoe2RlZmluaXRpb246U3R9KSxuZXcgUnUoe2RlZmluaXRpb246RW59KV0sT2UpfWZ1bmN0aW9uIGIyKHBlLGxl''@;'; put 'put ''KXtlOmZvcih2YXIgYmU9MDtiZTxwZS5sZW5ndGg7YmUrKyl7dmFyIE9lPXBlW2JlXTtpZihPZS5sZW5ndGg9PT1sZS5sZW5ndGgpe2Zvcih2YXIgJGU9MDskZTxPZS5sZW5ndGg7JGUrKyl7dmFyIFN0PWxlWyRlXSxRdD1PZVskZV07aWYoITE9PShTdD09PVF0fHx2b2lkIDAhPT1RdC5jYXRl''@;'; put 'put ''Z29yeU1hdGNoZXNNYXBbU3QudG9rZW5UeXBlSWR4XSkpY29udGludWUgZX1yZXR1cm4hMH19cmV0dXJuITF9ZnVuY3Rpb24ganUocGUpe3JldHVybiBCKHBlLGZ1bmN0aW9uKGxlKXtyZXR1cm4gQihsZSxmdW5jdGlvbihiZSl7cmV0dXJuIEIoYmUsZnVuY3Rpb24oT2Upe3JldHVybiBjKE9l''@;'; put 'put ''LmNhdGVnb3J5TWF0Y2hlcyl9KX0pfSl9dmFyIEJkPWZ1bmN0aW9uKCl7dmFyIHBlPWZ1bmN0aW9uKGxlLGJlKXtyZXR1cm4ocGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKE9lLCRlKXtPZS5fX3Byb3RvX189JGV9fHxm''@;'; put 'put ''dW5jdGlvbihPZSwkZSl7Zm9yKHZhciBTdCBpbiAkZSkkZS5oYXNPd25Qcm9wZXJ0eShTdCkmJihPZVtTdF09JGVbU3RdKX0pKGxlLGJlKX07cmV0dXJuIGZ1bmN0aW9uKGxlLGJlKXtmdW5jdGlvbiBPZSgpe3RoaXMuY29uc3RydWN0b3I9bGV9cGUobGUsYmUpLGxlLnByb3RvdHlwZT1udWxs''@;'; put 'put ''PT09YmU/T2JqZWN0LmNyZWF0ZShiZSk6KE9lLnByb3RvdHlwZT1iZS5wcm90b3R5cGUsbmV3IE9lKX19KCk7ZnVuY3Rpb24gdzIocGUsbGUsYmUsT2UsJGUsU3Qpe3ZhciBRdD1DKHBlLGZ1bmN0aW9uKElvKXtyZXR1cm4gZnVuY3Rpb24gcXMocGUsbGUpe3ZhciBiZT1uZXcgbjE7cGUuYWNj''@;'; put 'put ''ZXB0KGJlKTt2YXIgU3Q9RihQZShiZS5hbGxQcm9kdWN0aW9ucyxKYSksZnVuY3Rpb24oRW4pe3JldHVybiBFbi5sZW5ndGg+MX0pLFF0PUMoQShTdCksZnVuY3Rpb24oRW4pe3ZhciBjcj1TKEVuKSxVcj1sZS5idWlsZER1cGxpY2F0ZUZvdW5kRXJyb3IocGUsRW4pLHBpPXBzKGNyKSxEcj17''@;'; put 'put ''bWVzc2FnZTpVcix0eXBlOnJkLkRVUExJQ0FURV9QUk9EVUNUSU9OUyxydWxlTmFtZTpwZS5uYW1lLGRzbE5hbWU6cGksb2NjdXJyZW5jZTpjci5pZHh9LEppPU5sKGNyKTtyZXR1cm4gSmkmJihEci5wYXJhbWV0ZXI9SmkpLERyfSk7cmV0dXJuIFF0fShJbywkZSl9KSxFbj1DKHBlLGZ1bmN0''@;'; put 'put ''aW9uKElvKXtyZXR1cm4gbnUoSW8sSW8sJGUpfSksY3I9W10sVXI9W10scGk9W107QihFbixjKSYmKGNyPUMocGUsZnVuY3Rpb24oSW8pe3JldHVybiBmdW5jdGlvbiBGbShwZSxsZSl7dmFyIGJlPW5ldyBuZDtwZS5hY2NlcHQoYmUpO3ZhciAkZT1rZShiZS5hbHRlcm5hdGlvbnMsZnVuY3Rp''@;'; put 'put ''b24oU3QsUXQpe3ZhciBjcj1DKE4oUXQuZGVmaW5pdGlvbiksZnVuY3Rpb24oVXIscGkpe3JldHVybiBjKFJvKFtVcl0sW10sbnVsbCwxKSk/e21lc3NhZ2U6bGUuYnVpbGRFbXB0eUFsdGVybmF0aW9uRXJyb3Ioe3RvcExldmVsUnVsZTpwZSxhbHRlcm5hdGlvbjpRdCxlbXB0eUNob2ljZUlk''@;'; put 'put ''eDpwaX0pLHR5cGU6cmQuTk9ORV9MQVNUX0VNUFRZX0FMVCxydWxlTmFtZTpwZS5uYW1lLG9jY3VycmVuY2U6UXQuaWR4LGFsdGVybmF0aXZlOnBpKzF9Om51bGx9KTtyZXR1cm4gU3QuY29uY2F0KHFlKGNyKSl9LFtdKTtyZXR1cm4gJGV9KElvLCRlKX0pLFVyPUMocGUsZnVuY3Rpb24oSW8p''@;'; put 'put ''e3JldHVybiBmdW5jdGlvbiBtZihwZSxsZSxiZSxPZSl7dmFyICRlPW5ldyBuZDtwZS5hY2NlcHQoJGUpO3ZhciBTdD0kZS5hbHRlcm5hdGlvbnMsUXQ9YmVbcGUubmFtZV07UXQmJihTdD1ZKFN0LGZ1bmN0aW9uKGNyKXtyZXR1cm4gUXRbcHMoY3IpKygwPT09Y3IuaWR4PyIiOmNyLmlkeCld''@;'; put 'put ''fSkpLFN0PVkoU3QsZnVuY3Rpb24oY3Ipe3JldHVybiEwPT09Y3IuaWdub3JlQW1iaWd1aXRpZXN9KTt2YXIgRW49a2UoU3QsZnVuY3Rpb24oY3IsVXIpe3ZhciBKaT1iZChVci5pZHgscGUsVXIubWF4TG9va2FoZWFkfHxsZSxVcikseG89ZnVuY3Rpb24geGMocGUsbGUsYmUsT2Upe3ZhciAk''@;'; put 'put ''ZT1bXSxTdD1rZShwZSxmdW5jdGlvbihFbixjcixVcil7cmV0dXJuITA9PT1sZS5kZWZpbml0aW9uW1VyXS5pZ25vcmVBbWJpZ3VpdGllc3x8UihjcixmdW5jdGlvbihwaSl7dmFyIERyPVtVcl07UihwZSxmdW5jdGlvbihKaSx4byl7VXIhPT14byYmYjIoSmkscGkpJiYhMCE9PWxlLmRlZmlu''@;'; put 'put ''aXRpb25beG9dLmlnbm9yZUFtYmlndWl0aWVzJiZEci5wdXNoKHhvKX0pLERyLmxlbmd0aD4xJiYhYjIoJGUscGkpJiYoJGUucHVzaChwaSksRW4ucHVzaCh7YWx0czpEcixwYXRoOnBpfSkpfSksRW59LFtdKSxRdD1DKFN0LGZ1bmN0aW9uKEVuKXt2YXIgY3I9QyhFbi5hbHRzLGZ1bmN0aW9u''@;'; put 'put ''KHBpKXtyZXR1cm4gcGkrMX0pO3JldHVybnttZXNzYWdlOk9lLmJ1aWxkQWx0ZXJuYXRpb25BbWJpZ3VpdHlFcnJvcih7dG9wTGV2ZWxSdWxlOmJlLGFsdGVybmF0aW9uOmxlLGFtYmlndWl0eUluZGljZXM6Y3IscHJlZml4UGF0aDpFbi5wYXRofSksdHlwZTpyZC5BTUJJR1VPVVNfQUxUUyxy''@;'; put 'put ''dWxlTmFtZTpiZS5uYW1lLG9jY3VycmVuY2U6bGUuaWR4LGFsdGVybmF0aXZlczpbRW4uYWx0c119fSk7cmV0dXJuIFF0fShKaSxVcixwZSxPZSksWWk9ZnVuY3Rpb24gbDAocGUsbGUsYmUsT2Upe3ZhciAkZT1bXSxTdD1rZShwZSxmdW5jdGlvbihRdCxFbixjcil7dmFyIFVyPUMoRW4sZnVu''@;'; put 'put ''Y3Rpb24ocGkpe3JldHVybntpZHg6Y3IscGF0aDpwaX19KTtyZXR1cm4gUXQuY29uY2F0KFVyKX0sW10pO3JldHVybiBSKFN0LGZ1bmN0aW9uKFF0KXtpZighMCE9PWxlLmRlZmluaXRpb25bUXQuaWR4XS5pZ25vcmVBbWJpZ3VpdGllcyl7dmFyIGNyPVF0LmlkeCxVcj1RdC5wYXRoLHBpPWZ1''@;'; put 'put ''bmN0aW9uIEllKHBlLGxlKXtmb3IodmFyIGJlPVtdLE9lPTA7T2U8cGUubGVuZ3RoO09lKyspe3ZhciAkZT1wZVtPZV07bGUuY2FsbChudWxsLCRlKSYmYmUucHVzaCgkZSl9cmV0dXJuIGJlfShTdCxmdW5jdGlvbihKaSl7cmV0dXJuITAhPT1sZS5kZWZpbml0aW9uW0ppLmlkeF0uaWdub3Jl''@;'; put 'put ''QW1iaWd1aXRpZXMmJkppLmlkeDxjciYmZnVuY3Rpb24ga2gocGUsbGUpe3JldHVybiBwZS5sZW5ndGg8bGUubGVuZ3RoJiZCKHBlLGZ1bmN0aW9uKGJlLE9lKXt2YXIgJGU9bGVbT2VdO3JldHVybiBiZT09PSRlfHwkZS5jYXRlZ29yeU1hdGNoZXNNYXBbYmUudG9rZW5UeXBlSWR4XX0pfShK''@;'; put 'put ''aS5wYXRoLFVyKX0pLERyPUMocGksZnVuY3Rpb24oSmkpe3ZhciB4bz1bSmkuaWR4KzEsY3IrMV0sWWk9MD09PWxlLmlkeD8iIjpsZS5pZHg7cmV0dXJue21lc3NhZ2U6T2UuYnVpbGRBbHRlcm5hdGlvblByZWZpeEFtYmlndWl0eUVycm9yKHt0b3BMZXZlbFJ1bGU6YmUsYWx0ZXJuYXRpb246''@;'; put 'put ''bGUsYW1iaWd1aXR5SW5kaWNlczp4byxwcmVmaXhQYXRoOkppLnBhdGh9KSx0eXBlOnJkLkFNQklHVU9VU19QUkVGSVhfQUxUUyxydWxlTmFtZTpiZS5uYW1lLG9jY3VycmVuY2U6WWksYWx0ZXJuYXRpdmVzOnhvfX0pOyRlPSRlLmNvbmNhdChEcil9fSksJGV9KEppLFVyLHBlLE9lKTtyZXR1''@;'; put 'put ''cm4gY3IuY29uY2F0KHhvLFlpKX0sW10pO3JldHVybiBFbn0oSW8sbGUsT2UsJGUpfSkscGk9ZnVuY3Rpb24gVXUocGUsbGUsYmUpe3ZhciBPZT1bXTtyZXR1cm4gUihwZSxmdW5jdGlvbigkZSl7dmFyIFN0PW5ldyBQMTskZS5hY2NlcHQoU3QpLFIoU3QuYWxsUHJvZHVjdGlvbnMsZnVuY3Rp''@;'; put 'put ''b24oRW4pe3ZhciBjcj1mdW5jdGlvbiBzbihwZSl7aWYocGUgaW5zdGFuY2VvZiBoYylyZXR1cm4gY28uT1BUSU9OO2lmKHBlIGluc3RhbmNlb2YgY2wpcmV0dXJuIGNvLlJFUEVUSVRJT047aWYocGUgaW5zdGFuY2VvZiBlZClyZXR1cm4gY28uUkVQRVRJVElPTl9NQU5EQVRPUlk7aWYocGUg''@;'; put 'put ''aW5zdGFuY2VvZiBKbilyZXR1cm4gY28uUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1I7aWYocGUgaW5zdGFuY2VvZiBtaSlyZXR1cm4gY28uUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUjtpZihwZSBpbnN0YW5jZW9mIGV1KXJldHVybiBjby5BTFRFUk5BVElPTjt0aHJvdyBF''@;'; put 'put ''cnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX0oRW4pO2lmKGModyhzMChFbi5pZHgsJGUsY3IsRW4ubWF4TG9va2FoZWFkfHxsZSlbMF0pKSl7dmFyIHhvPWJlLmJ1aWxkRW1wdHlSZXBldGl0aW9uRXJyb3Ioe3RvcExldmVsUnVsZTokZSxyZXBldGl0aW9uOkVufSk7T2UucHVzaCh7bWVz''@;'; put 'put ''c2FnZTp4byx0eXBlOnJkLk5PX05PTl9FTVBUWV9MT09LQUhFQUQscnVsZU5hbWU6JGUubmFtZX0pfX0pfSksT2V9KHBlLGxlLCRlKSk7dmFyIERyPWZ1bmN0aW9uIHI1KHBlLGxlLGJlKXt2YXIgT2U9W10sJGU9QyhsZSxmdW5jdGlvbihTdCl7cmV0dXJuIFN0Lm5hbWV9KTtyZXR1cm4gUihw''@;'; put 'put ''ZSxmdW5jdGlvbihTdCl7dmFyIFF0PVN0Lm5hbWU7aWYocSgkZSxRdCkpe3ZhciBFbj1iZS5idWlsZE5hbWVzcGFjZUNvbmZsaWN0RXJyb3IoU3QpO09lLnB1c2goe21lc3NhZ2U6RW4sdHlwZTpyZC5DT05GTElDVF9UT0tFTlNfUlVMRVNfTkFNRVNQQUNFLHJ1bGVOYW1lOlF0fSl9fSksT2V9''@;'; put 'put ''KHBlLGJlLCRlKSxKaT1DKGJlLGZ1bmN0aW9uKElvKXtyZXR1cm4gZnVuY3Rpb24gY3MocGUsbGUpe3ZhciBiZT1bXTtyZXR1cm4gcGUubmFtZS5tYXRjaChqZCl8fGJlLnB1c2goe21lc3NhZ2U6bGUuYnVpbGRUb2tlbk5hbWVFcnJvcih7dG9rZW5UeXBlOnBlLGV4cGVjdGVkUGF0dGVybjpq''@;'; put 'put ''ZH0pLHR5cGU6cmQuSU5WQUxJRF9UT0tFTl9OQU1FfSksYmV9KElvLCRlKX0pLHhvPWZ1bmN0aW9uIHI4KHBlLGxlKXt2YXIgYmU9W107cmV0dXJuIFIocGUsZnVuY3Rpb24oT2Upe3ZhciAkZT1uZXcganQoIiIpO09lLmFjY2VwdCgkZSk7dmFyIFN0PUMoJGUucmVzdWx0LGZ1bmN0aW9uKFF0''@;'; put 'put ''KXtyZXR1cm4gUXQub3JnUHJvZH0pO2JlLnB1c2goQyhTdCxmdW5jdGlvbihRdCl7cmV0dXJuIGZ1bmN0aW9uIGhsKHBlLGxlLGJlKXt2YXIgJGUsT2U9W107cmV0dXJuIGxlLm5hbWUubWF0Y2goTjApfHwoJGU9YmUuYnVpbGRJbnZhbGlkTmVzdGVkUnVsZU5hbWVFcnJvcihwZSxsZSksT2Uu''@;'; put 'put ''cHVzaCh7bWVzc2FnZTokZSx0eXBlOnJkLklOVkFMSURfTkVTVEVEX1JVTEVfTkFNRSxydWxlTmFtZTpwZS5uYW1lfSkpLE9lfShPZSxRdCxsZSl9KSl9KSx3KGJlKX0ocGUsJGUpLFlpPWZ1bmN0aW9uIHVwKHBlLGxlKXt2YXIgYmU9W107cmV0dXJuIFIocGUsZnVuY3Rpb24oT2Upe3ZhciAk''@;'; put 'put ''ZT1uZXcganQoIiIpO09lLmFjY2VwdCgkZSk7dmFyIFN0PVBlKCRlLnJlc3VsdCxmdW5jdGlvbihFbil7cmV0dXJuIEVuLm5hbWV9KSxRdD1GKFN0LGZ1bmN0aW9uKEVuKXtyZXR1cm4gRW4ubGVuZ3RoPjF9KTtSKEEoUXQpLGZ1bmN0aW9uKEVuKXt2YXIgY3I9QyhFbixmdW5jdGlvbihwaSl7''@;'; put 'put ''cmV0dXJuIHBpLm9yZ1Byb2R9KSxVcj1sZS5idWlsZER1cGxpY2F0ZU5lc3RlZFJ1bGVOYW1lRXJyb3IoT2UsY3IpO2JlLnB1c2goe21lc3NhZ2U6VXIsdHlwZTpyZC5EVVBMSUNBVEVfTkVTVEVEX05BTUUscnVsZU5hbWU6T2UubmFtZX0pfSl9KSxiZX0ocGUsJGUpLGRzPUMocGUsZnVuY3Rp''@;'; put 'put ''b24oSW8pe3JldHVybiBmdW5jdGlvbiB1cyhwZSxsZSl7dmFyIGJlPW5ldyBuZDtwZS5hY2NlcHQoYmUpO3ZhciAkZT1rZShiZS5hbHRlcm5hdGlvbnMsZnVuY3Rpb24oU3QsUXQpe3JldHVybiBRdC5kZWZpbml0aW9uLmxlbmd0aD4yNTUmJlN0LnB1c2goe21lc3NhZ2U6bGUuYnVpbGRUb29N''@;'; put 'put ''YW55QWx0ZXJuYXRpdmVzRXJyb3Ioe3RvcExldmVsUnVsZTpwZSxhbHRlcm5hdGlvbjpRdH0pLHR5cGU6cmQuVE9PX01BTllfQUxUUyxydWxlTmFtZTpwZS5uYW1lLG9jY3VycmVuY2U6UXQuaWR4fSksU3R9LFtdKTtyZXR1cm4gJGV9KElvLCRlKX0pLFBzPUMocGUsZnVuY3Rpb24oSW8pe3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbiByMShwZSxsZSl7dmFyIGJlPVtdLE9lPXBlLm5hbWU7cmV0dXJuIE9lLm1hdGNoKGpkKXx8YmUucHVzaCh7bWVzc2FnZTpsZS5idWlsZEludmFsaWRSdWxlTmFtZUVycm9yKHt0b3BMZXZlbFJ1bGU6cGUsZXhwZWN0ZWRQYXR0ZXJuOmpkfSksdHlwZTpyZC5JTlZBTElE''@;'; put 'put ''X1JVTEVfTkFNRSxydWxlTmFtZTpPZX0pLGJlfShJbywkZSl9KSxhYT1DKHBlLGZ1bmN0aW9uKElvKXtyZXR1cm4gZnVuY3Rpb24gY3AocGUsbGUsYmUsT2Upe3ZhciAkZT1bXSxTdD1rZShsZSxmdW5jdGlvbihFbixjcil7cmV0dXJuIGNyLm5hbWU9PT1wZS5uYW1lP0VuKzE6RW59LDApO2lm''@;'; put 'put ''KFN0PjEpe3ZhciBRdD1PZS5idWlsZER1cGxpY2F0ZVJ1bGVOYW1lRXJyb3Ioe3RvcExldmVsUnVsZTpwZSxncmFtbWFyTmFtZTpiZX0pOyRlLnB1c2goe21lc3NhZ2U6UXQsdHlwZTpyZC5EVVBMSUNBVEVfUlVMRV9OQU1FLHJ1bGVOYW1lOnBlLm5hbWV9KX1yZXR1cm4gJGV9KElvLHBlLFN0''@;'; put 'put ''LCRlKX0pO3JldHVybiB3KFF0LmNvbmNhdChKaSx4byxZaSxwaSxFbixjcixVcixEcixkcyxQcyxhYSkpfWZ1bmN0aW9uIEphKHBlKXtyZXR1cm4gcHMocGUpKyJfI18iK3BlLmlkeCsiXyNfIitObChwZSl9ZnVuY3Rpb24gTmwocGUpe3JldHVybiBwZSBpbnN0YW5jZW9mIFNsP3BlLnRlcm1p''@;'; put 'put ''bmFsVHlwZS5uYW1lOnBlIGluc3RhbmNlb2YgQnU/cGUubm9uVGVybWluYWxOYW1lOiIifXZhciBuMT1mdW5jdGlvbihwZSl7ZnVuY3Rpb24gbGUoKXt2YXIgYmU9bnVsbCE9PXBlJiZwZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIGJlLmFsbFByb2R1Y3Rpb25zPVtdLGJl''@;'; put 'put ''fXJldHVybiBCZChsZSxwZSksbGUucHJvdG90eXBlLnZpc2l0Tm9uVGVybWluYWw9ZnVuY3Rpb24oYmUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChiZSl9LGxlLnByb3RvdHlwZS52aXNpdE9wdGlvbj1mdW5jdGlvbihiZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGJlKX0sbGUucHJv''@;'; put 'put ''dG90eXBlLnZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3I9ZnVuY3Rpb24oYmUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChiZSl9LGxlLnByb3RvdHlwZS52aXNpdFJlcGV0aXRpb25NYW5kYXRvcnk9ZnVuY3Rpb24oYmUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChiZSl9LGxlLnBy''@;'; put 'put ''b3RvdHlwZS52aXNpdFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yPWZ1bmN0aW9uKGJlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goYmUpfSxsZS5wcm90b3R5cGUudmlzaXRSZXBldGl0aW9uPWZ1bmN0aW9uKGJlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goYmUpfSxsZS5w''@;'; put 'put ''cm90b3R5cGUudmlzaXRBbHRlcm5hdGlvbj1mdW5jdGlvbihiZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGJlKX0sbGUucHJvdG90eXBlLnZpc2l0VGVybWluYWw9ZnVuY3Rpb24oYmUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChiZSl9LGxlfShscyksamQ9L15bYS16QS1aX11cdyok''@;'; put 'put ''LyxOMD1uZXcgUmVnRXhwKGpkLnNvdXJjZS5yZXBsYWNlKCJeIiwiXlxcJCIpKTtmdW5jdGlvbiBudShwZSxsZSxiZSxPZSl7dm9pZCAwPT09T2UmJihPZT1bXSk7dmFyICRlPVtdLFN0PVJoKGxlLmRlZmluaXRpb24pO2lmKGMoU3QpKXJldHVybltdO3ZhciBRdD1wZS5uYW1lO3EoU3QscGUp''@;'; put 'put ''JiYkZS5wdXNoKHttZXNzYWdlOmJlLmJ1aWxkTGVmdFJlY3Vyc2lvbkVycm9yKHt0b3BMZXZlbFJ1bGU6cGUsbGVmdFJlY3Vyc2lvblBhdGg6T2V9KSx0eXBlOnJkLkxFRlRfUkVDVVJTSU9OLHJ1bGVOYW1lOlF0fSk7dmFyIFVyPUMoSyhTdCxPZS5jb25jYXQoW3BlXSkpLGZ1bmN0aW9uKHBp''@;'; put 'put ''KXt2YXIgRHI9cmUoT2UpO3JldHVybiBEci5wdXNoKHBpKSxudShwZSxwaSxiZSxEcil9KTtyZXR1cm4gJGUuY29uY2F0KHcoVXIpKX1mdW5jdGlvbiBSaChwZSl7dmFyIGxlPVtdO2lmKGMocGUpKXJldHVybiBsZTt2YXIgYmU9UyhwZSk7aWYoYmUgaW5zdGFuY2VvZiBCdSlsZS5wdXNoKGJl''@;'; put 'put ''LnJlZmVyZW5jZWRSdWxlKTtlbHNlIGlmKGJlIGluc3RhbmNlb2YgUnV8fGJlIGluc3RhbmNlb2YgaGN8fGJlIGluc3RhbmNlb2YgZWR8fGJlIGluc3RhbmNlb2YgSm58fGJlIGluc3RhbmNlb2YgbWl8fGJlIGluc3RhbmNlb2YgY2wpbGU9bGUuY29uY2F0KFJoKGJlLmRlZmluaXRpb24pKTtl''@;'; put 'put ''bHNlIGlmKGJlIGluc3RhbmNlb2YgZXUpbGU9dyhDKGJlLmRlZmluaXRpb24sZnVuY3Rpb24oUXQpe3JldHVybiBSaChRdC5kZWZpbml0aW9uKX0pKTtlbHNlIGlmKCEoYmUgaW5zdGFuY2VvZiBTbCkpdGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIik7aWYoUWEoYmUpJiZwZS5s''@;'; put 'put ''ZW5ndGg+MSl7dmFyIFN0PVYocGUpO3JldHVybiBsZS5jb25jYXQoUmgoU3QpKX1yZXR1cm4gbGV9dmFyIG5kPWZ1bmN0aW9uKHBlKXtmdW5jdGlvbiBsZSgpe3ZhciBiZT1udWxsIT09cGUmJnBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gYmUuYWx0ZXJuYXRpb25zPVtd''@;'; put 'put ''LGJlfXJldHVybiBCZChsZSxwZSksbGUucHJvdG90eXBlLnZpc2l0QWx0ZXJuYXRpb249ZnVuY3Rpb24oYmUpe3RoaXMuYWx0ZXJuYXRpb25zLnB1c2goYmUpfSxsZX0obHMpLFAxPWZ1bmN0aW9uKHBlKXtmdW5jdGlvbiBsZSgpe3ZhciBiZT1udWxsIT09cGUmJnBlLmFwcGx5KHRoaXMsYXJn''@;'; put 'put ''dW1lbnRzKXx8dGhpcztyZXR1cm4gYmUuYWxsUHJvZHVjdGlvbnM9W10sYmV9cmV0dXJuIEJkKGxlLHBlKSxsZS5wcm90b3R5cGUudmlzaXRSZXBldGl0aW9uV2l0aFNlcGFyYXRvcj1mdW5jdGlvbihiZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGJlKX0sbGUucHJvdG90eXBlLnZpc2l0''@;'; put 'put ''UmVwZXRpdGlvbk1hbmRhdG9yeT1mdW5jdGlvbihiZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGJlKX0sbGUucHJvdG90eXBlLnZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3I9ZnVuY3Rpb24oYmUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChiZSl9LGxlLnByb3Rv''@;'; put 'put ''dHlwZS52aXNpdFJlcGV0aXRpb249ZnVuY3Rpb24oYmUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChiZSl9LGxlfShscyksYzA9e2J1aWxkTWlzbWF0Y2hUb2tlbk1lc3NhZ2U6ZnVuY3Rpb24ocGUpe3ZhciBsZT1wZS5leHBlY3RlZCxiZT1wZS5hY3R1YWw7cmV0dXJuIkV4cGVjdGluZyAi''@;'; put 'put ''KyhmYShsZSk/Ii0tXHgzZSAiK3lkKGxlKSsiIDwtLSI6InRva2VuIG9mIHR5cGUgLS1ceDNlICIrbGUubmFtZSsiIDwtLSIpKyIgYnV0IGZvdW5kIC0tXHgzZSAnIitiZS5pbWFnZSsiJyA8LS0ifSxidWlsZE5vdEFsbElucHV0UGFyc2VkTWVzc2FnZTpmdW5jdGlvbihwZSl7cmV0dXJuIlJl''@;'; put 'put ''ZHVuZGFudCBpbnB1dCwgZXhwZWN0aW5nIEVPRiBidXQgZm91bmQ6ICIrcGUuZmlyc3RSZWR1bmRhbnQuaW1hZ2V9LGJ1aWxkTm9WaWFibGVBbHRNZXNzYWdlOmZ1bmN0aW9uKHBlKXt2YXIgbGU9cGUuZXhwZWN0ZWRQYXRoc1BlckFsdCwkZT1wZS5jdXN0b21Vc2VyRGVzY3JpcHRpb24sUXQ9''@;'; put 'put ''IkV4cGVjdGluZzogIixjcj0iXG5idXQgZm91bmQ6ICciK1MocGUuYWN0dWFsKS5pbWFnZSsiJyI7aWYoJGUpcmV0dXJuIFF0KyRlK2NyO3ZhciBwaT1DKGtlKGxlLGZ1bmN0aW9uKHhvLFlpKXtyZXR1cm4geG8uY29uY2F0KFlpKX0sW10pLGZ1bmN0aW9uKHhvKXtyZXR1cm4iWyIrQyh4byxm''@;'; put 'put ''dW5jdGlvbihZaSl7cmV0dXJuIHlkKFlpKX0pLmpvaW4oIiwgIikrIl0ifSk7cmV0dXJuIFF0KyJvbmUgb2YgdGhlc2UgcG9zc2libGUgVG9rZW4gc2VxdWVuY2VzOlxuIitDKHBpLGZ1bmN0aW9uKHhvLFlpKXtyZXR1cm4iICAiKyhZaSsxKSsiLiAiK3hvfSkuam9pbigiXG4iKStjcn0sYnVp''@;'; put 'put ''bGRFYXJseUV4aXRNZXNzYWdlOmZ1bmN0aW9uKHBlKXt2YXIgbGU9cGUuZXhwZWN0ZWRJdGVyYXRpb25QYXRocyxPZT1wZS5jdXN0b21Vc2VyRGVzY3JpcHRpb24sU3Q9IkV4cGVjdGluZzogIixFbj0iXG5idXQgZm91bmQ6ICciK1MocGUuYWN0dWFsKS5pbWFnZSsiJyI7cmV0dXJuIE9lP1N0''@;'; put 'put ''K09lK0VuOlN0KyJleHBlY3RpbmcgYXQgbGVhc3Qgb25lIGl0ZXJhdGlvbiB3aGljaCBzdGFydHMgd2l0aCBvbmUgb2YgdGhlc2UgcG9zc2libGUgVG9rZW4gc2VxdWVuY2VzOjpcbiAgPCIrQyhsZSxmdW5jdGlvbihwaSl7cmV0dXJuIlsiK0MocGksZnVuY3Rpb24oRHIpe3JldHVybiB5ZChE''@;'; put 'put ''cil9KS5qb2luKCIsIikrIl0ifSkuam9pbigiICwiKSsiPiIrRW59fTtPYmplY3QuZnJlZXplKGMwKTt2YXIgUG09e2J1aWxkUnVsZU5vdEZvdW5kRXJyb3I6ZnVuY3Rpb24ocGUsbGUpe3JldHVybiJJbnZhbGlkIGdyYW1tYXIsIHJlZmVyZW5jZSB0byBhIHJ1bGUgd2hpY2ggaXMgbm90IGRl''@;'; put 'put ''ZmluZWQ6IC0+IitsZS5ub25UZXJtaW5hbE5hbWUrIjwtXG5pbnNpZGUgdG9wIGxldmVsIHJ1bGU6IC0+IitwZS5uYW1lKyI8LSJ9fSxpMT17YnVpbGREdXBsaWNhdGVGb3VuZEVycm9yOmZ1bmN0aW9uKHBlLGxlKXt2YXIgT2U9cGUubmFtZSwkZT1TKGxlKSxTdD0kZS5pZHgsUXQ9cHMoJGUp''@;'; put 'put ''LEVuPWZ1bmN0aW9uIGJlKHBpKXtyZXR1cm4gcGkgaW5zdGFuY2VvZiBTbD9waS50ZXJtaW5hbFR5cGUubmFtZTpwaSBpbnN0YW5jZW9mIEJ1P3BpLm5vblRlcm1pbmFsTmFtZToiIn0oJGUpLFVyPSItPiIrUXQrKFN0PjA/U3Q6IiIpKyI8LSAiKyhFbj8id2l0aCBhcmd1bWVudDogLT4iK0Vu''@;'; put 'put ''KyI8LSI6IiIpKyJcbiAgICAgICAgICAgICAgICAgIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgKCIrbGUubGVuZ3RoKyIgdGltZXMpIGluIHRoZSB0b3AgbGV2ZWwgcnVsZTogLT4iK09lKyI8LS4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIEZvciBmdXJ0aGVyIGRldGFp''@;'; put 'put ''bHMgc2VlOiBodHRwczovL3NhcC5naXRodWIuaW8vY2hldnJvdGFpbi9kb2NzL0ZBUS5odG1sI05VTUVSSUNBTF9TVUZGSVhFUyBcbiAgICAgICAgICAgICAgICAgICI7cmV0dXJuKFVyPVVyLnJlcGxhY2UoL1sgXHRdKy9nLCIgIikpLnJlcGxhY2UoL1xzXHMrL2csIlxuIil9LGJ1aWxkSW52''@;'; put 'put ''YWxpZE5lc3RlZFJ1bGVOYW1lRXJyb3I6ZnVuY3Rpb24ocGUsbGUpe3JldHVybiJJbnZhbGlkIG5lc3RlZCBydWxlIG5hbWU6IC0+IitsZS5uYW1lKyI8LSBpbnNpZGUgcnVsZTogLT4iK3BlLm5hbWUrIjwtXG5pdCBtdXN0IG1hdGNoIHRoZSBwYXR0ZXJuOiAtPiIrTjAudG9TdHJpbmcoKSsi''@;'; put 'put ''PC0uXG5Ob3RlIHRoYXQgdGhpcyBtZWFucyBhIG5lc3RlZCBydWxlIG5hbWUgbXVzdCBzdGFydCB3aXRoIHRoZSAnJCcoZG9sbGFyKSBzaWduLiJ9LGJ1aWxkRHVwbGljYXRlTmVzdGVkUnVsZU5hbWVFcnJvcjpmdW5jdGlvbihwZSxsZSl7cmV0dXJuIkR1cGxpY2F0ZSBuZXN0ZWQgcnVsZSBu''@;'; put 'put ''YW1lOiAtPiIrUyhsZSkubmFtZSsiPC0gaW5zaWRlIHJ1bGU6IC0+IitwZS5uYW1lKyI8LVxuQSBuZXN0ZWQgbmFtZSBtdXN0IGJlIHVuaXF1ZSBpbiB0aGUgc2NvcGUgb2YgYSB0b3AgbGV2ZWwgZ3JhbW1hciBydWxlLiJ9LGJ1aWxkTmFtZXNwYWNlQ29uZmxpY3RFcnJvcjpmdW5jdGlvbihw''@;'; put 'put ''ZSl7cmV0dXJuIk5hbWVzcGFjZSBjb25mbGljdCBmb3VuZCBpbiBncmFtbWFyLlxuVGhlIGdyYW1tYXIgaGFzIGJvdGggYSBUZXJtaW5hbChUb2tlbikgYW5kIGEgTm9uLVRlcm1pbmFsKFJ1bGUpIG5hbWVkOiA8IitwZS5uYW1lKyI+LlxuVG8gcmVzb2x2ZSB0aGlzIG1ha2Ugc3VyZSBlYWNo''@;'; put 'put ''IFRlcm1pbmFsIGFuZCBOb24tVGVybWluYWwgbmFtZXMgYXJlIHVuaXF1ZVxuVGhpcyBpcyBlYXN5IHRvIGFjY29tcGxpc2ggYnkgdXNpbmcgdGhlIGNvbnZlbnRpb24gdGhhdCBUZXJtaW5hbCBuYW1lcyBzdGFydCB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXJcbmFuZCBOb24tVGVybWluYWwg''@;'; put 'put ''bmFtZXMgc3RhcnQgd2l0aCBhIGxvd2VyIGNhc2UgbGV0dGVyLiJ9LGJ1aWxkQWx0ZXJuYXRpb25QcmVmaXhBbWJpZ3VpdHlFcnJvcjpmdW5jdGlvbihwZSl7dmFyIGxlPUMocGUucHJlZml4UGF0aCxmdW5jdGlvbigkZSl7cmV0dXJuIHlkKCRlKX0pLmpvaW4oIiwgIiksYmU9MD09PXBlLmFs''@;'; put 'put ''dGVybmF0aW9uLmlkeD8iIjpwZS5hbHRlcm5hdGlvbi5pZHg7cmV0dXJuIkFtYmlndW91cyBhbHRlcm5hdGl2ZXM6IDwiK3BlLmFtYmlndWl0eUluZGljZXMuam9pbigiICwiKSsiPiBkdWUgdG8gY29tbW9uIGxvb2thaGVhZCBwcmVmaXhcbmluIDxPUiIrYmUrIj4gaW5zaWRlIDwiK3BlLnRv''@;'; put 'put ''cExldmVsUnVsZS5uYW1lKyI+IFJ1bGUsXG48IitsZSsiPiBtYXkgYXBwZWFycyBhcyBhIHByZWZpeCBwYXRoIGluIGFsbCB0aGVzZSBhbHRlcm5hdGl2ZXMuXG5TZWU6IGh0dHBzOi8vc2FwLmdpdGh1Yi5pby9jaGV2cm90YWluL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2dyYW1tYXJfZXJyb3Jz''@;'; put 'put ''Lmh0bWwjQ09NTU9OX1BSRUZJWFxuRm9yIEZ1cnRoZXIgZGV0YWlscy4ifSxidWlsZEFsdGVybmF0aW9uQW1iaWd1aXR5RXJyb3I6ZnVuY3Rpb24ocGUpe3ZhciBsZT1DKHBlLnByZWZpeFBhdGgsZnVuY3Rpb24oJGUpe3JldHVybiB5ZCgkZSl9KS5qb2luKCIsICIpLGJlPTA9PT1wZS5hbHRl''@;'; put 'put ''cm5hdGlvbi5pZHg/IiI6cGUuYWx0ZXJuYXRpb24uaWR4O3JldHVybiJBbWJpZ3VvdXMgQWx0ZXJuYXRpdmVzIERldGVjdGVkOiA8IitwZS5hbWJpZ3VpdHlJbmRpY2VzLmpvaW4oIiAsIikrIj4gaW4gPE9SIitiZSsiPiBpbnNpZGUgPCIrcGUudG9wTGV2ZWxSdWxlLm5hbWUrIj4gUnVsZSxc''@;'; put 'put ''bjwiK2xlKyI+IG1heSBhcHBlYXJzIGFzIGEgcHJlZml4IHBhdGggaW4gYWxsIHRoZXNlIGFsdGVybmF0aXZlcy5cbiIrIlNlZTogaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL2NoZXZyb3RhaW4vZG9jcy9ndWlkZS9yZXNvbHZpbmdfZ3JhbW1hcl9lcnJvcnMuaHRtbCNBTUJJR1VPVVNfQUxURVJO''@;'; put 'put ''QVRJVkVTXG5Gb3IgRnVydGhlciBkZXRhaWxzLiJ9LGJ1aWxkRW1wdHlSZXBldGl0aW9uRXJyb3I6ZnVuY3Rpb24ocGUpe3ZhciBsZT1wcyhwZS5yZXBldGl0aW9uKTtyZXR1cm4gMCE9PXBlLnJlcGV0aXRpb24uaWR4JiYobGUrPXBlLnJlcGV0aXRpb24uaWR4KSwiVGhlIHJlcGV0aXRpb24g''@;'; put 'put ''PCIrbGUrIj4gd2l0aGluIFJ1bGUgPCIrcGUudG9wTGV2ZWxSdWxlLm5hbWUrIj4gY2FuIG5ldmVyIGNvbnN1bWUgYW55IHRva2Vucy5cblRoaXMgY291bGQgbGVhZCB0byBhbiBpbmZpbml0ZSBsb29wLiJ9LGJ1aWxkVG9rZW5OYW1lRXJyb3I6ZnVuY3Rpb24ocGUpe3JldHVybiJJbnZhbGlk''@;'; put 'put ''IEdyYW1tYXIgVG9rZW4gbmFtZTogLT4iK3BlLnRva2VuVHlwZS5uYW1lKyI8LSBpdCBtdXN0IG1hdGNoIHRoZSBwYXR0ZXJuOiAtPiIrcGUuZXhwZWN0ZWRQYXR0ZXJuLnRvU3RyaW5nKCkrIjwtIn0sYnVpbGRFbXB0eUFsdGVybmF0aW9uRXJyb3I6ZnVuY3Rpb24ocGUpe3JldHVybiJBbWJp''@;'; put 'put ''Z3VvdXMgZW1wdHkgYWx0ZXJuYXRpdmU6IDwiKyhwZS5lbXB0eUNob2ljZUlkeCsxKSsiPiBpbiA8T1IiK3BlLmFsdGVybmF0aW9uLmlkeCsiPiBpbnNpZGUgPCIrcGUudG9wTGV2ZWxSdWxlLm5hbWUrIj4gUnVsZS5cbk9ubHkgdGhlIGxhc3QgYWx0ZXJuYXRpdmUgbWF5IGJlIGFuIGVtcHR5''@;'; put 'put ''IGFsdGVybmF0aXZlLiJ9LGJ1aWxkVG9vTWFueUFsdGVybmF0aXZlc0Vycm9yOmZ1bmN0aW9uKHBlKXtyZXR1cm4iQW4gQWx0ZXJuYXRpb24gY2Fubm90IGhhdmUgbW9yZSB0aGFuIDI1NiBhbHRlcm5hdGl2ZXM6XG48T1IiK3BlLmFsdGVybmF0aW9uLmlkeCsiPiBpbnNpZGUgPCIrcGUudG9w''@;'; put 'put ''TGV2ZWxSdWxlLm5hbWUrIj4gUnVsZS5cbiBoYXMgIisocGUuYWx0ZXJuYXRpb24uZGVmaW5pdGlvbi5sZW5ndGgrMSkrIiBhbHRlcm5hdGl2ZXMuIn0sYnVpbGRMZWZ0UmVjdXJzaW9uRXJyb3I6ZnVuY3Rpb24ocGUpe3ZhciBsZT1wZS50b3BMZXZlbFJ1bGUubmFtZTtyZXR1cm4iTGVmdCBS''@;'; put 'put ''ZWN1cnNpb24gZm91bmQgaW4gZ3JhbW1hci5cbnJ1bGU6IDwiK2xlKyI+IGNhbiBiZSBpbnZva2VkIGZyb20gaXRzZWxmIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KVxud2l0aG91dCBjb25zdW1pbmcgYW55IFRva2Vucy4gVGhlIGdyYW1tYXIgcGF0aCB0aGF0IGNhdXNlcyB0aGlzIGlzOiBc''@;'; put 'put ''biAiK2xlKyIgLS1ceDNlICIrQyhwZS5sZWZ0UmVjdXJzaW9uUGF0aCxmdW5jdGlvbihTdCl7cmV0dXJuIFN0Lm5hbWV9KS5jb25jYXQoW2xlXSkuam9pbigiIC0tXHgzZSAiKSsiXG4gVG8gZml4IHRoaXMgcmVmYWN0b3IgeW91ciBncmFtbWFyIHRvIHJlbW92ZSB0aGUgbGVmdCByZWN1cnNp''@;'; put 'put ''b24uXG5zZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xMX3BhcnNlciNMZWZ0X0ZhY3RvcmluZy4ifSxidWlsZEludmFsaWRSdWxlTmFtZUVycm9yOmZ1bmN0aW9uKHBlKXtyZXR1cm4iSW52YWxpZCBncmFtbWFyIHJ1bGUgbmFtZTogLT4iK3BlLnRvcExldmVsUnVsZS5uYW1l''@;'; put 'put ''KyI8LSBpdCBtdXN0IG1hdGNoIHRoZSBwYXR0ZXJuOiAtPiIrcGUuZXhwZWN0ZWRQYXR0ZXJuLnRvU3RyaW5nKCkrIjwtIn0sYnVpbGREdXBsaWNhdGVSdWxlTmFtZUVycm9yOmZ1bmN0aW9uKHBlKXtyZXR1cm4iRHVwbGljYXRlIGRlZmluaXRpb24sIHJ1bGU6IC0+IisocGUudG9wTGV2ZWxS''@;'; put 'put ''dWxlIGluc3RhbmNlb2YgTjE/cGUudG9wTGV2ZWxSdWxlLm5hbWU6cGUudG9wTGV2ZWxSdWxlKSsiPC0gaXMgYWxyZWFkeSBkZWZpbmVkIGluIHRoZSBncmFtbWFyOiAtPiIrcGUuZ3JhbW1hck5hbWUrIjwtIn19LGk4PWZ1bmN0aW9uKCl7dmFyIHBlPWZ1bmN0aW9uKGxlLGJlKXtyZXR1cm4o''@;'; put 'put ''cGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKE9lLCRlKXtPZS5fX3Byb3RvX189JGV9fHxmdW5jdGlvbihPZSwkZSl7Zm9yKHZhciBTdCBpbiAkZSkkZS5oYXNPd25Qcm9wZXJ0eShTdCkmJihPZVtTdF09JGVbU3RdKX0p''@;'; put 'put ''KGxlLGJlKX07cmV0dXJuIGZ1bmN0aW9uKGxlLGJlKXtmdW5jdGlvbiBPZSgpe3RoaXMuY29uc3RydWN0b3I9bGV9cGUobGUsYmUpLGxlLnByb3RvdHlwZT1udWxsPT09YmU/T2JqZWN0LmNyZWF0ZShiZSk6KE9lLnByb3RvdHlwZT1iZS5wcm90b3R5cGUsbmV3IE9lKX19KCksU2c9ZnVuY3Rp''@;'; put 'put ''b24ocGUpe2Z1bmN0aW9uIGxlKGJlLE9lKXt2YXIgJGU9cGUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gJGUubmFtZVRvVG9wUnVsZT1iZSwkZS5lcnJNc2dQcm92aWRlcj1PZSwkZS5lcnJvcnM9W10sJGV9cmV0dXJuIGk4KGxlLHBlKSxsZS5wcm90b3R5cGUucmVzb2x2ZVJlZnM9ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgYmU9dGhpcztSKEEodGhpcy5uYW1lVG9Ub3BSdWxlKSxmdW5jdGlvbihPZSl7YmUuY3VyclRvcExldmVsPU9lLE9lLmFjY2VwdChiZSl9KX0sbGUucHJvdG90eXBlLnZpc2l0Tm9uVGVybWluYWw9ZnVuY3Rpb24oYmUpe3ZhciBPZT10aGlzLm5hbWVUb1RvcFJ1bGVbYmUubm9u''@;'; put 'put ''VGVybWluYWxOYW1lXTtpZihPZSliZS5yZWZlcmVuY2VkUnVsZT1PZTtlbHNle3ZhciAkZT10aGlzLmVyck1zZ1Byb3ZpZGVyLmJ1aWxkUnVsZU5vdEZvdW5kRXJyb3IodGhpcy5jdXJyVG9wTGV2ZWwsYmUpO3RoaXMuZXJyb3JzLnB1c2goe21lc3NhZ2U6JGUsdHlwZTpyZC5VTlJFU09MVkVE''@;'; put 'put ''X1NVQlJVTEVfUkVGLHJ1bGVOYW1lOnRoaXMuY3VyclRvcExldmVsLm5hbWUsdW5yZXNvbHZlZFJlZk5hbWU6YmUubm9uVGVybWluYWxOYW1lfSl9fSxsZX0obHMpO2Z1bmN0aW9uIEhtKHBlKXtwZT1fZShwZSx7ZXJyTXNnUHJvdmlkZXI6UG19KTt2YXIgbGU9e307cmV0dXJuIFIocGUucnVs''@;'; put 'put ''ZXMsZnVuY3Rpb24oYmUpe2xlW2JlLm5hbWVdPWJlfSksZnVuY3Rpb24gbzgocGUsbGUpe3ZhciBiZT1uZXcgU2cocGUsbGUpO3JldHVybiBiZS5yZXNvbHZlUmVmcygpLGJlLmVycm9yc30obGUscGUuZXJyTXNnUHJvdmlkZXIpfWZ1bmN0aW9uIHdkKHBlKXtyZXR1cm4gdzIoKHBlPV9lKHBl''@;'; put 'put ''LHtlcnJNc2dQcm92aWRlcjppMSxpZ25vcmVkSXNzdWVzOnt9fSkpLnJ1bGVzLHBlLm1heExvb2thaGVhZCxwZS50b2tlblR5cGVzLHBlLmlnbm9yZWRJc3N1ZXMscGUuZXJyTXNnUHJvdmlkZXIscGUuZ3JhbW1hck5hbWUpfWZ1bmN0aW9uIGk1KHBlKXtSKHBlLnJ1bGVzLGZ1bmN0aW9uKGxl''@;'; put 'put ''KXt2YXIgYmU9bmV3IHR1O2xlLmFjY2VwdChiZSksUihiZS5kc2xNZXRob2RzLGZ1bmN0aW9uKE9lKXtSKE9lLGZ1bmN0aW9uKCRlLFN0KXskZS5pZHg9U3QrMX0pfSl9KX12YXIgbmw9Ik1pc21hdGNoZWRUb2tlbkV4Y2VwdGlvbiIsSDE9Ik5vVmlhYmxlQWx0RXhjZXB0aW9uIixkcD0iRWFy''@;'; put 'put ''bHlFeGl0RXhjZXB0aW9uIixhOD0iTm90QWxsSW5wdXRQYXJzZWRFeGNlcHRpb24iLHM4PVtubCxIMSxkcCxhOF07ZnVuY3Rpb24gaHAocGUpe3JldHVybiBxKHM4LHBlLm5hbWUpfWZ1bmN0aW9uIGQzKHBlLGxlLGJlKXt0aGlzLm5hbWU9bmwsdGhpcy5tZXNzYWdlPXBlLHRoaXMudG9rZW49''@;'; put 'put ''bGUsdGhpcy5wcmV2aW91c1Rva2VuPWJlLHRoaXMucmVzeW5jZWRUb2tlbnM9W119ZnVuY3Rpb24gaDMocGUsbGUsYmUpe3RoaXMubmFtZT1IMSx0aGlzLm1lc3NhZ2U9cGUsdGhpcy50b2tlbj1sZSx0aGlzLnByZXZpb3VzVG9rZW49YmUsdGhpcy5yZXN5bmNlZFRva2Vucz1bXX1mdW5jdGlv''@;'; put 'put ''biBsOChwZSxsZSl7dGhpcy5uYW1lPWE4LHRoaXMubWVzc2FnZT1wZSx0aGlzLnRva2VuPWxlLHRoaXMucmVzeW5jZWRUb2tlbnM9W119ZnVuY3Rpb24gYzgocGUsbGUsYmUpe3RoaXMubmFtZT1kcCx0aGlzLm1lc3NhZ2U9cGUsdGhpcy50b2tlbj1sZSx0aGlzLnByZXZpb3VzVG9rZW49YmUs''@;'; put 'put ''dGhpcy5yZXN5bmNlZFRva2Vucz1bXX1PYmplY3QuZnJlZXplKHM4KSxkMy5wcm90b3R5cGU9RXJyb3IucHJvdG90eXBlLGgzLnByb3RvdHlwZT1FcnJvci5wcm90b3R5cGUsbDgucHJvdG90eXBlPUVycm9yLnByb3RvdHlwZSxjOC5wcm90b3R5cGU9RXJyb3IucHJvdG90eXBlO3ZhciB1YT17''@;'; put 'put ''fSx2Zj0iSW5SdWxlUmVjb3ZlcnlFeGNlcHRpb24iO2Z1bmN0aW9uIEx1KHBlKXt0aGlzLm5hbWU9dmYsdGhpcy5tZXNzYWdlPXBlfUx1LnByb3RvdHlwZT1FcnJvci5wcm90b3R5cGU7dmFyIEVnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcGUoKXt9cmV0dXJuIHBlLnByb3RvdHlwZS5pbml0UmVj''@;'; put 'put ''b3ZlcmFibGU9ZnVuY3Rpb24obGUpe3RoaXMuZmlyc3RBZnRlclJlcE1hcD17fSx0aGlzLnJlc3luY0ZvbGxvd3M9e30sdGhpcy5yZWNvdmVyeUVuYWJsZWQ9VyhsZSwicmVjb3ZlcnlFbmFibGVkIik/bGUucmVjb3ZlcnlFbmFibGVkOnpzLnJlY292ZXJ5RW5hYmxlZCx0aGlzLnJlY292ZXJ5''@;'; put 'put ''RW5hYmxlZCYmKHRoaXMuYXR0ZW1wdEluUmVwZXRpdGlvblJlY292ZXJ5PUMyKX0scGUucHJvdG90eXBlLmdldFRva2VuVG9JbnNlcnQ9ZnVuY3Rpb24obGUpe3ZhciBiZT1nZihsZSwiIixOYU4sTmFOLE5hTixOYU4sTmFOLE5hTik7cmV0dXJuIGJlLmlzSW5zZXJ0ZWRJblJlY292ZXJ5PSEw''@;'; put 'put ''LGJlfSxwZS5wcm90b3R5cGUuY2FuVG9rZW5UeXBlQmVJbnNlcnRlZEluUmVjb3Zlcnk9ZnVuY3Rpb24obGUpe3JldHVybiEwfSxwZS5wcm90b3R5cGUudHJ5SW5SZXBldGl0aW9uUmVjb3Zlcnk9ZnVuY3Rpb24obGUsYmUsT2UsJGUpe2Zvcih2YXIgU3Q9dGhpcyxRdD10aGlzLmZpbmRSZVN5''@;'; put 'put ''bmNUb2tlblR5cGUoKSxFbj10aGlzLmV4cG9ydExleGVyU3RhdGUoKSxjcj1bXSxVcj0hMSxwaT10aGlzLkxBKDEpLERyPXRoaXMuTEEoMSksSmk9ZnVuY3Rpb24oKXt2YXIgeG89U3QuTEEoMCksZHM9bmV3IGQzKFN0LmVycm9yTWVzc2FnZVByb3ZpZGVyLmJ1aWxkTWlzbWF0Y2hUb2tlbk1l''@;'; put 'put ''c3NhZ2Uoe2V4cGVjdGVkOiRlLGFjdHVhbDpwaSxwcmV2aW91czp4byxydWxlTmFtZTpTdC5nZXRDdXJyUnVsZUZ1bGxOYW1lKCl9KSxwaSxTdC5MQSgwKSk7ZHMucmVzeW5jZWRUb2tlbnM9TihjciksU3QuU0FWRV9FUlJPUihkcyl9OyFVcjspe2lmKHRoaXMudG9rZW5NYXRjaGVyKERyLCRl''@;'; put 'put ''KSlyZXR1cm4gdm9pZCBKaSgpO2lmKE9lLmNhbGwodGhpcykpcmV0dXJuIEppKCksdm9pZCBsZS5hcHBseSh0aGlzLGJlKTt0aGlzLnRva2VuTWF0Y2hlcihEcixRdCk/VXI9ITA6KERyPXRoaXMuU0tJUF9UT0tFTigpLHRoaXMuYWRkVG9SZXN5bmNUb2tlbnMoRHIsY3IpKX10aGlzLmltcG9y''@;'; put 'put ''dExleGVyU3RhdGUoRW4pfSxwZS5wcm90b3R5cGUuc2hvdWxkSW5SZXBldGl0aW9uUmVjb3ZlcnlCZVRyaWVkPWZ1bmN0aW9uKGxlLGJlLE9lKXtyZXR1cm4hKCExPT09T2V8fHZvaWQgMD09PWxlfHx2b2lkIDA9PT1iZXx8dGhpcy50b2tlbk1hdGNoZXIodGhpcy5MQSgxKSxsZSl8fHRoaXMu''@;'; put 'put ''aXNCYWNrVHJhY2tpbmcoKXx8dGhpcy5jYW5QZXJmb3JtSW5SdWxlUmVjb3ZlcnkobGUsdGhpcy5nZXRGb2xsb3dzRm9ySW5SdWxlUmVjb3ZlcnkobGUsYmUpKSl9LHBlLnByb3RvdHlwZS5nZXRGb2xsb3dzRm9ySW5SdWxlUmVjb3Zlcnk9ZnVuY3Rpb24obGUsYmUpe3ZhciBPZT10aGlzLmdl''@;'; put 'put ''dEN1cnJlbnRHcmFtbWFyUGF0aChsZSxiZSk7cmV0dXJuIHRoaXMuZ2V0TmV4dFBvc3NpYmxlVG9rZW5UeXBlcyhPZSl9LHBlLnByb3RvdHlwZS50cnlJblJ1bGVSZWNvdmVyeT1mdW5jdGlvbihsZSxiZSl7aWYodGhpcy5jYW5SZWNvdmVyV2l0aFNpbmdsZVRva2VuSW5zZXJ0aW9uKGxlLGJl''@;'; put 'put ''KSlyZXR1cm4gdGhpcy5nZXRUb2tlblRvSW5zZXJ0KGxlKTtpZih0aGlzLmNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5EZWxldGlvbihsZSkpe3ZhciAkZT10aGlzLlNLSVBfVE9LRU4oKTtyZXR1cm4gdGhpcy5jb25zdW1lVG9rZW4oKSwkZX10aHJvdyBuZXcgTHUoInNhZCBzYWQgcGFuZGEi''@;'; put 'put ''KX0scGUucHJvdG90eXBlLmNhblBlcmZvcm1JblJ1bGVSZWNvdmVyeT1mdW5jdGlvbihsZSxiZSl7cmV0dXJuIHRoaXMuY2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkluc2VydGlvbihsZSxiZSl8fHRoaXMuY2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkRlbGV0aW9uKGxlKX0scGUucHJvdG90''@;'; put 'put ''eXBlLmNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5JbnNlcnRpb249ZnVuY3Rpb24obGUsYmUpe3ZhciBPZT10aGlzO2lmKCF0aGlzLmNhblRva2VuVHlwZUJlSW5zZXJ0ZWRJblJlY292ZXJ5KGxlKXx8YyhiZSkpcmV0dXJuITE7dmFyICRlPXRoaXMuTEEoMSk7cmV0dXJuIHZvaWQgMCE9PUNl''@;'; put 'put ''KGJlLGZ1bmN0aW9uKFF0KXtyZXR1cm4gT2UudG9rZW5NYXRjaGVyKCRlLFF0KX0pfSxwZS5wcm90b3R5cGUuY2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkRlbGV0aW9uPWZ1bmN0aW9uKGxlKXtyZXR1cm4gdGhpcy50b2tlbk1hdGNoZXIodGhpcy5MQSgyKSxsZSl9LHBlLnByb3RvdHlwZS5p''@;'; put 'put ''c0luQ3VycmVudFJ1bGVSZVN5bmNTZXQ9ZnVuY3Rpb24obGUpe3ZhciBiZT10aGlzLmdldEN1cnJGb2xsb3dLZXkoKTtyZXR1cm4gcSh0aGlzLmdldEZvbGxvd1NldEZyb21Gb2xsb3dLZXkoYmUpLGxlKX0scGUucHJvdG90eXBlLmZpbmRSZVN5bmNUb2tlblR5cGU9ZnVuY3Rpb24oKXtmb3Io''@;'; put 'put ''dmFyIGxlPXRoaXMuZmxhdHRlbkZvbGxvd1NldCgpLGJlPXRoaXMuTEEoMSksT2U9Mjs7KXt2YXIgJGU9YmUudG9rZW5UeXBlO2lmKHEobGUsJGUpKXJldHVybiAkZTtiZT10aGlzLkxBKE9lKSxPZSsrfX0scGUucHJvdG90eXBlLmdldEN1cnJGb2xsb3dLZXk9ZnVuY3Rpb24oKXtpZigxPT09''@;'; put 'put ''dGhpcy5SVUxFX1NUQUNLLmxlbmd0aClyZXR1cm4gdWE7dmFyIGxlPXRoaXMuZ2V0TGFzdEV4cGxpY2l0UnVsZVNob3J0TmFtZSgpLGJlPXRoaXMuZ2V0TGFzdEV4cGxpY2l0UnVsZU9jY3VycmVuY2VJbmRleCgpLE9lPXRoaXMuZ2V0UHJldmlvdXNFeHBsaWNpdFJ1bGVTaG9ydE5hbWUoKTty''@;'; put 'put ''ZXR1cm57cnVsZU5hbWU6dGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZShsZSksaWR4SW5DYWxsaW5nUnVsZTpiZSxpblJ1bGU6dGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZShPZSl9fSxwZS5wcm90b3R5cGUuYnVpbGRGdWxsRm9sbG93S2V5U3RhY2s9ZnVuY3Rpb24oKXt2YXIgbGU9''@;'; put 'put ''dGhpcyxiZT10aGlzLlJVTEVfU1RBQ0ssT2U9dGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0s7cmV0dXJuIGModGhpcy5MQVNUX0VYUExJQ0lUX1JVTEVfU1RBQ0spfHwoYmU9Qyh0aGlzLkxBU1RfRVhQTElDSVRfUlVMRV9TVEFDSyxmdW5jdGlvbigkZSl7cmV0dXJuIGxlLlJVTEVfU1RBQ0tb''@;'; put 'put ''JGVdfSksT2U9Qyh0aGlzLkxBU1RfRVhQTElDSVRfUlVMRV9TVEFDSyxmdW5jdGlvbigkZSl7cmV0dXJuIGxlLlJVTEVfT0NDVVJSRU5DRV9TVEFDS1skZV19KSksQyhiZSxmdW5jdGlvbigkZSxTdCl7cmV0dXJuIDA9PT1TdD91YTp7cnVsZU5hbWU6bGUuc2hvcnRSdWxlTmFtZVRvRnVsbE5h''@;'; put 'put ''bWUoJGUpLGlkeEluQ2FsbGluZ1J1bGU6T2VbU3RdLGluUnVsZTpsZS5zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZShiZVtTdC0xXSl9fSl9LHBlLnByb3RvdHlwZS5mbGF0dGVuRm9sbG93U2V0PWZ1bmN0aW9uKCl7dmFyIGxlPXRoaXM7cmV0dXJuIHcoQyh0aGlzLmJ1aWxkRnVsbEZvbGxvd0tl''@;'; put 'put ''eVN0YWNrKCksZnVuY3Rpb24oT2Upe3JldHVybiBsZS5nZXRGb2xsb3dTZXRGcm9tRm9sbG93S2V5KE9lKX0pKX0scGUucHJvdG90eXBlLmdldEZvbGxvd1NldEZyb21Gb2xsb3dLZXk9ZnVuY3Rpb24obGUpe3JldHVybiBsZT09PXVhP1tKY106dGhpcy5yZXN5bmNGb2xsb3dzW2xlLnJ1bGVO''@;'; put 'put ''YW1lK2xlLmlkeEluQ2FsbGluZ1J1bGUrIl9+SU5+XyIrbGUuaW5SdWxlXX0scGUucHJvdG90eXBlLmFkZFRvUmVzeW5jVG9rZW5zPWZ1bmN0aW9uKGxlLGJlKXtyZXR1cm4gdGhpcy50b2tlbk1hdGNoZXIobGUsSmMpfHxiZS5wdXNoKGxlKSxiZX0scGUucHJvdG90eXBlLnJlU3luY1RvPWZ1''@;'; put 'put ''bmN0aW9uKGxlKXtmb3IodmFyIGJlPVtdLE9lPXRoaXMuTEEoMSk7ITE9PT10aGlzLnRva2VuTWF0Y2hlcihPZSxsZSk7KU9lPXRoaXMuU0tJUF9UT0tFTigpLHRoaXMuYWRkVG9SZXN5bmNUb2tlbnMoT2UsYmUpO3JldHVybiBOKGJlKX0scGUucHJvdG90eXBlLmF0dGVtcHRJblJlcGV0aXRp''@;'; put 'put ''b25SZWNvdmVyeT1mdW5jdGlvbihsZSxiZSxPZSwkZSxTdCxRdCxFbil7fSxwZS5wcm90b3R5cGUuZ2V0Q3VycmVudEdyYW1tYXJQYXRoPWZ1bmN0aW9uKGxlLGJlKXtyZXR1cm57cnVsZVN0YWNrOnRoaXMuZ2V0SHVtYW5SZWFkYWJsZVJ1bGVTdGFjaygpLG9jY3VycmVuY2VTdGFjazpyZSh0''@;'; put 'put ''aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSyksbGFzdFRvazpsZSxsYXN0VG9rT2NjdXJyZW5jZTpiZX19LHBlLnByb3RvdHlwZS5nZXRIdW1hblJlYWRhYmxlUnVsZVN0YWNrPWZ1bmN0aW9uKCl7dmFyIGxlPXRoaXM7cmV0dXJuIGModGhpcy5MQVNUX0VYUExJQ0lUX1JVTEVfU1RBQ0spP0Mo''@;'; put 'put ''dGhpcy5SVUxFX1NUQUNLLGZ1bmN0aW9uKGJlKXtyZXR1cm4gbGUuc2hvcnRSdWxlTmFtZVRvRnVsbE5hbWUoYmUpfSk6Qyh0aGlzLkxBU1RfRVhQTElDSVRfUlVMRV9TVEFDSyxmdW5jdGlvbihiZSl7cmV0dXJuIGxlLnNob3J0UnVsZU5hbWVUb0Z1bGxOYW1lKGxlLlJVTEVfU1RBQ0tbYmVd''@;'; put 'put ''KX0pfSxwZX0oKTtmdW5jdGlvbiBDMihwZSxsZSxiZSxPZSwkZSxTdCxRdCl7dmFyIEVuPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKE9lLCRlKSxjcj10aGlzLmZpcnN0QWZ0ZXJSZXBNYXBbRW5dO2lmKHZvaWQgMD09PWNyKXt2YXIgVXI9dGhpcy5nZXRDdXJyUnVsZUZ1bGxO''@;'; put 'put ''YW1lKCk7Y3I9bmV3IFN0KHRoaXMuZ2V0R0FzdFByb2R1Y3Rpb25zKClbVXJdLCRlKS5zdGFydFdhbGtpbmcoKSx0aGlzLmZpcnN0QWZ0ZXJSZXBNYXBbRW5dPWNyfXZhciBKaT1jci50b2tlbix4bz1jci5vY2N1cnJlbmNlOzE9PT10aGlzLlJVTEVfU1RBQ0subGVuZ3RoJiZjci5pc0VuZE9m''@;'; put 'put ''UnVsZSYmdm9pZCAwPT09SmkmJihKaT1KYyx4bz0xKSx0aGlzLnNob3VsZEluUmVwZXRpdGlvblJlY292ZXJ5QmVUcmllZChKaSx4byxRdCkmJnRoaXMudHJ5SW5SZXBldGl0aW9uUmVjb3ZlcnkocGUsbGUsYmUsSmkpfXZhciBydT1mdW5jdGlvbigpe2Z1bmN0aW9uIHBlKCl7fXJldHVybiBw''@;'; put 'put ''ZS5wcm90b3R5cGUuaW5pdExvb2tzQWhlYWQ9ZnVuY3Rpb24obGUpe3RoaXMuZHluYW1pY1Rva2Vuc0VuYWJsZWQ9VyhsZSwiZHluYW1pY1Rva2Vuc0VuYWJsZWQiKT9sZS5keW5hbWljVG9rZW5zRW5hYmxlZDp6cy5keW5hbWljVG9rZW5zRW5hYmxlZCx0aGlzLm1heExvb2thaGVhZD1XKGxl''@;'; put 'put ''LCJtYXhMb29rYWhlYWQiKT9sZS5tYXhMb29rYWhlYWQ6enMubWF4TG9va2FoZWFkLHRoaXMubG9va0FoZWFkRnVuY3NDYWNoZT1qZSgpP25ldyBNYXA6W10samUoKT8odGhpcy5nZXRMYUZ1bmNGcm9tQ2FjaGU9dGhpcy5nZXRMYUZ1bmNGcm9tTWFwLHRoaXMuc2V0TGFGdW5jQ2FjaGU9dGhp''@;'; put 'put ''cy5zZXRMYUZ1bmNDYWNoZVVzaW5nTWFwKToodGhpcy5nZXRMYUZ1bmNGcm9tQ2FjaGU9dGhpcy5nZXRMYUZ1bmNGcm9tT2JqLHRoaXMuc2V0TGFGdW5jQ2FjaGU9dGhpcy5zZXRMYUZ1bmNVc2luZ09iail9LHBlLnByb3RvdHlwZS5wcmVDb21wdXRlTG9va2FoZWFkRnVuY3Rpb25zPWZ1bmN0''@;'; put 'put ''aW9uKGxlKXt2YXIgYmU9dGhpcztSKGxlLGZ1bmN0aW9uKE9lKXtiZS5UUkFDRV9JTklUKE9lLm5hbWUrIiBSdWxlIExvb2thaGVhZCIsZnVuY3Rpb24oKXt2YXIgJGU9ZnVuY3Rpb24gT2MocGUpe2dzLnJlc2V0KCkscGUuYWNjZXB0KGdzKTt2YXIgbGU9Z3MuZHNsTWV0aG9kcztyZXR1cm4g''@;'; put 'put ''Z3MucmVzZXQoKSxsZX0oT2UpLFF0PSRlLnJlcGV0aXRpb24sRW49JGUub3B0aW9uLGNyPSRlLnJlcGV0aXRpb25NYW5kYXRvcnksVXI9JGUucmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IscGk9JGUucmVwZXRpdGlvbldpdGhTZXBhcmF0b3I7UigkZS5hbHRlcm5hdGlvbixmdW5j''@;'; put 'put ''dGlvbihEcil7dmFyIEppPTA9PT1Eci5pZHg/IiI6RHIuaWR4O2JlLlRSQUNFX0lOSVQoIiIrcHMoRHIpK0ppLGZ1bmN0aW9uKCl7dmFyIHhvPWZ1bmN0aW9uIGlvKHBlLGxlLGJlLE9lLCRlLFN0KXt2YXIgUXQ9YmQocGUsbGUsYmUpO3JldHVybiBTdChRdCxPZSxqdShRdCk/TXI6dGEsJGUp''@;'; put 'put ''fShEci5pZHgsT2UsRHIubWF4TG9va2FoZWFkfHxiZS5tYXhMb29rYWhlYWQsRHIuaGFzUHJlZGljYXRlcyxiZS5keW5hbWljVG9rZW5zRW5hYmxlZCxiZS5sb29rQWhlYWRCdWlsZGVyRm9yQWx0ZXJuYXRpdmVzKSxZaT1GMShiZS5mdWxsUnVsZU5hbWVUb1Nob3J0W09lLm5hbWVdLDI1NixE''@;'; put 'put ''ci5pZHgpO2JlLnNldExhRnVuY0NhY2hlKFlpLHhvKX0pfSksUihRdCxmdW5jdGlvbihEcil7YmUuY29tcHV0ZUxvb2thaGVhZEZ1bmMoT2UsRHIuaWR4LDc2OCxjby5SRVBFVElUSU9OLERyLm1heExvb2thaGVhZCxwcyhEcikpfSksUihFbixmdW5jdGlvbihEcil7YmUuY29tcHV0ZUxvb2th''@;'; put 'put ''aGVhZEZ1bmMoT2UsRHIuaWR4LDUxMixjby5PUFRJT04sRHIubWF4TG9va2FoZWFkLHBzKERyKSl9KSxSKGNyLGZ1bmN0aW9uKERyKXtiZS5jb21wdXRlTG9va2FoZWFkRnVuYyhPZSxEci5pZHgsXzIsY28uUkVQRVRJVElPTl9NQU5EQVRPUlksRHIubWF4TG9va2FoZWFkLHBzKERyKSl9KSxS''@;'; put 'put ''KFVyLGZ1bmN0aW9uKERyKXtiZS5jb21wdXRlTG9va2FoZWFkRnVuYyhPZSxEci5pZHgsbXMsY28uUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1IsRHIubWF4TG9va2FoZWFkLHBzKERyKSl9KSxSKHBpLGZ1bmN0aW9uKERyKXtiZS5jb21wdXRlTG9va2FoZWFkRnVuYyhPZSxE''@;'; put 'put ''ci5pZHgsVGMsY28uUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUixEci5tYXhMb29rYWhlYWQscHMoRHIpKX0pfSl9KX0scGUucHJvdG90eXBlLmNvbXB1dGVMb29rYWhlYWRGdW5jPWZ1bmN0aW9uKGxlLGJlLE9lLCRlLFN0LFF0KXt2YXIgRW49dGhpczt0aGlzLlRSQUNFX0lOSVQoIiIrUXQr''@;'; put 'put ''KDA9PT1iZT8iIjpiZSksZnVuY3Rpb24oKXt2YXIgY3I9ZnVuY3Rpb24gRGEocGUsbGUsYmUsT2UsJGUsU3Qpe3ZhciBRdD1zMChwZSxsZSwkZSxiZSksRW49anUoUXQpP01yOnRhO3JldHVybiBTdChRdFswXSxFbixPZSl9KGJlLGxlLFN0fHxFbi5tYXhMb29rYWhlYWQsRW4uZHluYW1pY1Rv''@;'; put 'put ''a2Vuc0VuYWJsZWQsJGUsRW4ubG9va0FoZWFkQnVpbGRlckZvck9wdGlvbmFsKSxVcj1GMShFbi5mdWxsUnVsZU5hbWVUb1Nob3J0W2xlLm5hbWVdLE9lLGJlKTtFbi5zZXRMYUZ1bmNDYWNoZShVcixjcil9KX0scGUucHJvdG90eXBlLmxvb2tBaGVhZEJ1aWxkZXJGb3JPcHRpb25hbD1mdW5j''@;'; put 'put ''dGlvbihsZSxiZSxPZSl7cmV0dXJuIGZ1bmN0aW9uIEVsKHBlLGxlLGJlKXt2YXIgT2U9QihwZSxmdW5jdGlvbihVcil7cmV0dXJuIDE9PT1Vci5sZW5ndGh9KSwkZT1wZS5sZW5ndGg7aWYoT2UmJiFiZSl7dmFyIFN0PXcocGUpO2lmKDE9PT1TdC5sZW5ndGgmJmMoU3RbMF0uY2F0ZWdvcnlN''@;'; put 'put ''YXRjaGVzKSl7dmFyIEVuPVN0WzBdLnRva2VuVHlwZUlkeDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5MQSgxKS50b2tlblR5cGVJZHg9PT1Fbn19dmFyIGNyPWtlKFN0LGZ1bmN0aW9uKFVyLHBpLERyKXtyZXR1cm4gVXJbcGkudG9rZW5UeXBlSWR4XT0hMCxSKHBpLmNhdGVnb3J5''@;'; put 'put ''TWF0Y2hlcyxmdW5jdGlvbihKaSl7VXJbSmldPSEwfSksVXJ9LFtdKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgVXI9dGhpcy5MQSgxKTtyZXR1cm4hMD09PWNyW1VyLnRva2VuVHlwZUlkeF19fXJldHVybiBmdW5jdGlvbigpe2U6Zm9yKHZhciBVcj0wO1VyPCRlO1VyKyspe2Zvcih2YXIgcGk9''@;'; put 'put ''cGVbVXJdLERyPXBpLmxlbmd0aCxKaT0wO0ppPERyO0ppKyspe3ZhciB4bz10aGlzLkxBKEppKzEpO2lmKCExPT09bGUoeG8scGlbSmldKSljb250aW51ZSBlfXJldHVybiEwfXJldHVybiExfX0obGUsYmUsT2UpfSxwZS5wcm90b3R5cGUubG9va0FoZWFkQnVpbGRlckZvckFsdGVybmF0aXZl''@;'; put 'put ''cz1mdW5jdGlvbihsZSxiZSxPZSwkZSl7cmV0dXJuIGZ1bmN0aW9uIG5zKHBlLGxlLGJlLE9lKXt2YXIgJGU9cGUubGVuZ3RoLFN0PUIocGUsZnVuY3Rpb24oY3Ipe3JldHVybiBCKGNyLGZ1bmN0aW9uKFVyKXtyZXR1cm4gMT09PVVyLmxlbmd0aH0pfSk7aWYobGUpcmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KGNyKXtmb3IodmFyIFVyPUMoY3IsZnVuY3Rpb24oWmkpe3JldHVybiBaaS5HQVRFfSkscGk9MDtwaTwkZTtwaSsrKXt2YXIgRHI9cGVbcGldLEppPURyLmxlbmd0aCx4bz1VcltwaV07aWYodm9pZCAwPT09eG98fCExIT09eG8uY2FsbCh0aGlzKSllOmZvcih2YXIgWWk9MDtZaTxKaTtZaSsr''@;'; put 'put ''KXtmb3IodmFyIGRzPURyW1lpXSxQcz1kcy5sZW5ndGgsYWE9MDthYTxQczthYSsrKXt2YXIgSW89dGhpcy5MQShhYSsxKTtpZighMT09PWJlKElvLGRzW2FhXSkpY29udGludWUgZX1yZXR1cm4gcGl9fX07aWYoU3QmJiFPZSl7dmFyIEVuPWtlKEMocGUsZnVuY3Rpb24oY3Ipe3JldHVybiB3''@;'; put 'put ''KGNyKX0pLGZ1bmN0aW9uKGNyLFVyLHBpKXtyZXR1cm4gUihVcixmdW5jdGlvbihEcil7VyhjcixEci50b2tlblR5cGVJZHgpfHwoY3JbRHIudG9rZW5UeXBlSWR4XT1waSksUihEci5jYXRlZ29yeU1hdGNoZXMsZnVuY3Rpb24oSmkpe1coY3IsSmkpfHwoY3JbSmldPXBpKX0pfSksY3J9LFtd''@;'; put 'put ''KTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgY3I9dGhpcy5MQSgxKTtyZXR1cm4gRW5bY3IudG9rZW5UeXBlSWR4XX19cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBjcj0wO2NyPCRlO2NyKyspe3ZhciBVcj1wZVtjcl0scGk9VXIubGVuZ3RoO2U6Zm9yKHZhciBEcj0wO0RyPHBpO0RyKyspe2Zv''@;'; put 'put ''cih2YXIgSmk9VXJbRHJdLHhvPUppLmxlbmd0aCxZaT0wO1lpPHhvO1lpKyspe3ZhciBkcz10aGlzLkxBKFlpKzEpO2lmKCExPT09YmUoZHMsSmlbWWldKSljb250aW51ZSBlfXJldHVybiBjcn19fX0obGUsYmUsT2UsJGUpfSxwZS5wcm90b3R5cGUuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2Fo''@;'; put 'put ''ZWFkPWZ1bmN0aW9uKGxlLGJlKXtyZXR1cm4gRjEodGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCksbGUsYmUpfSxwZS5wcm90b3R5cGUuZ2V0TGFGdW5jRnJvbUNhY2hlPWZ1bmN0aW9uKGxlKXt9LHBlLnByb3RvdHlwZS5nZXRMYUZ1bmNGcm9tTWFwPWZ1bmN0aW9uKGxlKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5sb29rQWhlYWRGdW5jc0NhY2hlLmdldChsZSl9LHBlLnByb3RvdHlwZS5nZXRMYUZ1bmNGcm9tT2JqPWZ1bmN0aW9uKGxlKXtyZXR1cm4gdGhpcy5sb29rQWhlYWRGdW5jc0NhY2hlW2xlXX0scGUucHJvdG90eXBlLnNldExhRnVuY0NhY2hlPWZ1bmN0aW9uKGxlLGJlKXt9''@;'; put 'put ''LHBlLnByb3RvdHlwZS5zZXRMYUZ1bmNDYWNoZVVzaW5nTWFwPWZ1bmN0aW9uKGxlLGJlKXt0aGlzLmxvb2tBaGVhZEZ1bmNzQ2FjaGUuc2V0KGxlLGJlKX0scGUucHJvdG90eXBlLnNldExhRnVuY1VzaW5nT2JqPWZ1bmN0aW9uKGxlLGJlKXt0aGlzLmxvb2tBaGVhZEZ1bmNzQ2FjaGVbbGVd''@;'; put 'put ''PWJlfSxwZX0oKSxUYT0vXlxzKmZ1bmN0aW9uXHMqKFxTKilccypcKC87ZnVuY3Rpb24genUocGUpe3JldHVybiBwZS5uYW1lfHxwZS50b1N0cmluZygpLm1hdGNoKFRhKVsxXX1mdW5jdGlvbiBXdShwZSxsZSl7dmFyIGJlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocGUsIm5h''@;'; put 'put ''bWUiKTtyZXR1cm4hKCFVKGJlKSYmIWJlLmNvbmZpZ3VyYWJsZXx8KE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwZSwibmFtZSIse2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiExLHZhbHVlOmxlfSksMCkpfWZ1bmN0aW9uIGZwKHBlLGxlKXtmb3IodmFyIGJlPXMocGUp''@;'; put 'put ''LE9lPWJlLmxlbmd0aCwkZT0wOyRlPE9lOyRlKyspZm9yKHZhciBRdD1wZVtiZVskZV1dLEVuPVF0Lmxlbmd0aCxjcj0wO2NyPEVuO2NyKyspe3ZhciBVcj1RdFtjcl07dm9pZCAwPT09VXIudG9rZW5UeXBlSWR4JiYodm9pZCAwIT09VXIuZnVsbE5hbWU/dGhpc1tVci5mdWxsTmFtZV0oVXIu''@;'; put 'put ''Y2hpbGRyZW4sbGUpOnRoaXNbVXIubmFtZV0oVXIuY2hpbGRyZW4sbGUpKX19dmFyIFhhPWZ1bmN0aW9uKHBlKXtyZXR1cm4gcGVbcGUuUkVEVU5EQU5UX01FVEhPRD0wXT0iUkVEVU5EQU5UX01FVEhPRCIscGVbcGUuTUlTU0lOR19NRVRIT0Q9MV09Ik1JU1NJTkdfTUVUSE9EIixwZX0oWGF8''@;'; put 'put ''fHt9KSxwcD1bImNvbnN0cnVjdG9yIiwidmlzaXQiLCJ2YWxpZGF0ZVZpc2l0b3IiXSxUZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHBlKCl7fXJldHVybiBwZS5wcm90b3R5cGUuaW5pdFRyZWVCdWlsZGVyPWZ1bmN0aW9uKGxlKXtpZih0aGlzLkxBU1RfRVhQTElDSVRfUlVMRV9TVEFDSz1bXSx0''@;'; put 'put ''aGlzLkNTVF9TVEFDSz1bXSx0aGlzLm91dHB1dENzdD1XKGxlLCJvdXRwdXRDc3QiKT9sZS5vdXRwdXRDc3Q6enMub3V0cHV0Q3N0LHRoaXMubm9kZUxvY2F0aW9uVHJhY2tpbmc9VyhsZSwibm9kZUxvY2F0aW9uVHJhY2tpbmciKT9sZS5ub2RlTG9jYXRpb25UcmFja2luZzp6cy5ub2RlTG9j''@;'; put 'put ''YXRpb25UcmFja2luZyx0aGlzLm91dHB1dENzdClpZigvZnVsbC9pLnRlc3QodGhpcy5ub2RlTG9jYXRpb25UcmFja2luZykpdGhpcy5yZWNvdmVyeUVuYWJsZWQ/KHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuPXphLHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbU5vZGU9emEsdGhpcy5j''@;'; put 'put ''c3RQb3N0UnVsZT1sdCx0aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb249dGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uRnVsbFJlY292ZXJ5KToodGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW49bHQsdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZT1sdCx0aGlzLmNzdFBvc3RSdWxl''@;'; put 'put ''PXRoaXMuY3N0UG9zdFJ1bGVGdWxsLHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbj10aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb25GdWxsUmVndWxhcik7ZWxzZSBpZigvb25seU9mZnNldC9pLnRlc3QodGhpcy5ub2RlTG9jYXRpb25UcmFja2luZykpdGhpcy5yZWNvdmVyeUVuYWJsZWQ/''@;'; put 'put ''KHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuPXFpLHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbU5vZGU9cWksdGhpcy5jc3RQb3N0UnVsZT1sdCx0aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb249dGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uT25seU9mZnNldFJlY292ZXJ5KToodGhp''@;'; put 'put ''cy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW49bHQsdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZT1sdCx0aGlzLmNzdFBvc3RSdWxlPXRoaXMuY3N0UG9zdFJ1bGVPbmx5T2Zmc2V0LHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbj10aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb25Pbmx5''@;'; put 'put ''T2Zmc2V0UmVndWxhcik7ZWxzZXtpZighL25vbmUvaS50ZXN0KHRoaXMubm9kZUxvY2F0aW9uVHJhY2tpbmcpKXRocm93IEVycm9yKCdJbnZhbGlkIDxub2RlTG9jYXRpb25UcmFja2luZz4gY29uZmlnIG9wdGlvbjogIicrbGUubm9kZUxvY2F0aW9uVHJhY2tpbmcrJyInKTt0aGlzLnNldE5v''@;'; put 'put ''ZGVMb2NhdGlvbkZyb21Ub2tlbj1sdCx0aGlzLnNldE5vZGVMb2NhdGlvbkZyb21Ob2RlPWx0LHRoaXMuY3N0UG9zdFJ1bGU9bHQsdGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uPWx0fWVsc2UgdGhpcy5jc3RJbnZvY2F0aW9uU3RhdGVVcGRhdGU9bHQsdGhpcy5jc3RGaW5hbGx5U3RhdGVV''@;'; put 'put ''cGRhdGU9bHQsdGhpcy5jc3RQb3N0VGVybWluYWw9bHQsdGhpcy5jc3RQb3N0Tm9uVGVybWluYWw9bHQsdGhpcy5jc3RQb3N0UnVsZT1sdCx0aGlzLmdldExhc3RFeHBsaWNpdFJ1bGVTaG9ydE5hbWU9dGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lTm9Dc3QsdGhpcy5nZXRQcmV2''@;'; put 'put ''aW91c0V4cGxpY2l0UnVsZVNob3J0TmFtZT10aGlzLmdldFByZXZpb3VzRXhwbGljaXRSdWxlU2hvcnROYW1lTm9Dc3QsdGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlT2NjdXJyZW5jZUluZGV4PXRoaXMuZ2V0TGFzdEV4cGxpY2l0UnVsZU9jY3VycmVuY2VJbmRleE5vQ3N0LHRoaXMubWFueUlu''@;'; put 'put ''dGVybmFsPXRoaXMubWFueUludGVybmFsTm9Dc3QsdGhpcy5vckludGVybmFsPXRoaXMub3JJbnRlcm5hbE5vQ3N0LHRoaXMub3B0aW9uSW50ZXJuYWw9dGhpcy5vcHRpb25JbnRlcm5hbE5vQ3N0LHRoaXMuYXRMZWFzdE9uZUludGVybmFsPXRoaXMuYXRMZWFzdE9uZUludGVybmFsTm9Dc3Qs''@;'; put 'put ''dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbD10aGlzLm1hbnlTZXBGaXJzdEludGVybmFsTm9Dc3QsdGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbD10aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsTm9Dc3R9LHBlLnByb3RvdHlwZS5zZXRJbml0aWFsTm9kZUxvY2F0aW9uT25s''@;'; put 'put ''eU9mZnNldFJlY292ZXJ5PWZ1bmN0aW9uKGxlKXtsZS5sb2NhdGlvbj17c3RhcnRPZmZzZXQ6TmFOLGVuZE9mZnNldDpOYU59fSxwZS5wcm90b3R5cGUuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbk9ubHlPZmZzZXRSZWd1bGFyPWZ1bmN0aW9uKGxlKXtsZS5sb2NhdGlvbj17c3RhcnRPZmZzZXQ6''@;'; put 'put ''dGhpcy5MQSgxKS5zdGFydE9mZnNldCxlbmRPZmZzZXQ6TmFOfX0scGUucHJvdG90eXBlLnNldEluaXRpYWxOb2RlTG9jYXRpb25GdWxsUmVjb3Zlcnk9ZnVuY3Rpb24obGUpe2xlLmxvY2F0aW9uPXtzdGFydE9mZnNldDpOYU4sc3RhcnRMaW5lOk5hTixzdGFydENvbHVtbjpOYU4sZW5kT2Zm''@;'; put 'put ''c2V0Ok5hTixlbmRMaW5lOk5hTixlbmRDb2x1bW46TmFOfX0scGUucHJvdG90eXBlLnNldEluaXRpYWxOb2RlTG9jYXRpb25GdWxsUmVndWxhcj1mdW5jdGlvbihsZSl7dmFyIGJlPXRoaXMuTEEoMSk7bGUubG9jYXRpb249e3N0YXJ0T2Zmc2V0OmJlLnN0YXJ0T2Zmc2V0LHN0YXJ0TGluZTpi''@;'; put 'put ''ZS5zdGFydExpbmUsc3RhcnRDb2x1bW46YmUuc3RhcnRDb2x1bW4sZW5kT2Zmc2V0Ok5hTixlbmRMaW5lOk5hTixlbmRDb2x1bW46TmFOfX0scGUucHJvdG90eXBlLmNzdE5lc3RlZEludm9jYXRpb25TdGF0ZVVwZGF0ZT1mdW5jdGlvbihsZSxiZSl7dmFyIE9lPXtuYW1lOmxlLGZ1bGxOYW1l''@;'; put 'put ''OnRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbFt0aGlzLmdldExhc3RFeHBsaWNpdFJ1bGVTaG9ydE5hbWUoKV0rbGUsY2hpbGRyZW46e319O3RoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbihPZSksdGhpcy5DU1RfU1RBQ0sucHVzaChPZSl9LHBlLnByb3RvdHlwZS5jc3RJbnZvY2F0aW9uU3Rh''@;'; put 'put ''dGVVcGRhdGU9ZnVuY3Rpb24obGUsYmUpe3RoaXMuTEFTVF9FWFBMSUNJVF9SVUxFX1NUQUNLLnB1c2godGhpcy5SVUxFX1NUQUNLLmxlbmd0aC0xKTt2YXIgT2U9e25hbWU6bGUsY2hpbGRyZW46e319O3RoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbihPZSksdGhpcy5DU1RfU1RBQ0sucHVz''@;'; put 'put ''aChPZSl9LHBlLnByb3RvdHlwZS5jc3RGaW5hbGx5U3RhdGVVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLkxBU1RfRVhQTElDSVRfUlVMRV9TVEFDSy5wb3AoKSx0aGlzLkNTVF9TVEFDSy5wb3AoKX0scGUucHJvdG90eXBlLmNzdE5lc3RlZEZpbmFsbHlTdGF0ZVVwZGF0ZT1mdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBsZT10aGlzLkNTVF9TVEFDSy5wb3AoKTt0aGlzLmNzdFBvc3RSdWxlKGxlKX0scGUucHJvdG90eXBlLmNzdFBvc3RSdWxlRnVsbD1mdW5jdGlvbihsZSl7dmFyIGJlPXRoaXMuTEEoMCksT2U9bGUubG9jYXRpb247T2Uuc3RhcnRPZmZzZXQ8PWJlLnN0YXJ0T2Zmc2V0PyhPZS5lbmRPZmZz''@;'; put 'put ''ZXQ9YmUuZW5kT2Zmc2V0LE9lLmVuZExpbmU9YmUuZW5kTGluZSxPZS5lbmRDb2x1bW49YmUuZW5kQ29sdW1uKTooT2Uuc3RhcnRPZmZzZXQ9TmFOLE9lLnN0YXJ0TGluZT1OYU4sT2Uuc3RhcnRDb2x1bW49TmFOKX0scGUucHJvdG90eXBlLmNzdFBvc3RSdWxlT25seU9mZnNldD1mdW5jdGlv''@;'; put 'put ''bihsZSl7dmFyIGJlPXRoaXMuTEEoMCksT2U9bGUubG9jYXRpb247T2Uuc3RhcnRPZmZzZXQ8PWJlLnN0YXJ0T2Zmc2V0P09lLmVuZE9mZnNldD1iZS5lbmRPZmZzZXQ6T2Uuc3RhcnRPZmZzZXQ9TmFOfSxwZS5wcm90b3R5cGUuY3N0UG9zdFRlcm1pbmFsPWZ1bmN0aW9uKGxlLGJlKXt2YXIg''@;'; put 'put ''T2U9dGhpcy5DU1RfU1RBQ0tbdGhpcy5DU1RfU1RBQ0subGVuZ3RoLTFdOyhmdW5jdGlvbiBodChwZSxsZSxiZSl7dm9pZCAwPT09cGUuY2hpbGRyZW5bYmVdP3BlLmNoaWxkcmVuW2JlXT1bbGVdOnBlLmNoaWxkcmVuW2JlXS5wdXNoKGxlKX0pKE9lLGJlLGxlKSx0aGlzLnNldE5vZGVMb2Nh''@;'; put 'put ''dGlvbkZyb21Ub2tlbihPZS5sb2NhdGlvbixiZSl9LHBlLnByb3RvdHlwZS5jc3RQb3N0Tm9uVGVybWluYWw9ZnVuY3Rpb24obGUsYmUpe2lmKCEwIT09dGhpcy5pc0JhY2tUcmFja2luZygpKXt2YXIgT2U9dGhpcy5DU1RfU1RBQ0tbdGhpcy5DU1RfU1RBQ0subGVuZ3RoLTFdO3l0KE9lLGJl''@;'; put 'put ''LGxlKSx0aGlzLnNldE5vZGVMb2NhdGlvbkZyb21Ob2RlKE9lLmxvY2F0aW9uLGxlLmxvY2F0aW9uKX19LHBlLnByb3RvdHlwZS5nZXRCYXNlQ3N0VmlzaXRvckNvbnN0cnVjdG9yPWZ1bmN0aW9uKCl7aWYoVSh0aGlzLmJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IpKXt2YXIgbGU9ZnVuY3Rp''@;'; put 'put ''b24gVm0ocGUsbGUpe3ZhciBiZT1mdW5jdGlvbigpe307V3UoYmUscGUrIkJhc2VTZW1hbnRpY3MiKTt2YXIgT2U9e3Zpc2l0OmZ1bmN0aW9uKCRlLFN0KXtpZihiKCRlKSYmKCRlPSRlWzBdKSwhVSgkZSkpcmV0dXJuIHZvaWQgMCE9PSRlLmZ1bGxOYW1lP3RoaXNbJGUuZnVsbE5hbWVdKCRl''@;'; put 'put ''LmNoaWxkcmVuLFN0KTp0aGlzWyRlLm5hbWVdKCRlLmNoaWxkcmVuLFN0KX0sdmFsaWRhdGVWaXNpdG9yOmZ1bmN0aW9uKCl7dmFyICRlPWZ1bmN0aW9uIHUwKHBlLGxlKXt2YXIgYmU9ZnVuY3Rpb24gcnMocGUsbGUpe3ZhciBiZT1DKGxlLGZ1bmN0aW9uKE9lKXtpZighSChwZVtPZV0pKXJl''@;'; put 'put ''dHVybnttc2c6Ik1pc3NpbmcgdmlzaXRvciBtZXRob2Q6IDwiK09lKyI+IG9uICIrenUocGUuY29uc3RydWN0b3IpKyIgQ1NUIFZpc2l0b3IuIix0eXBlOlhhLk1JU1NJTkdfTUVUSE9ELG1ldGhvZE5hbWU6T2V9fSk7cmV0dXJuIHFlKGJlKX0ocGUsbGUpLE9lPWZ1bmN0aW9uIE1nKHBlLGxl''@;'; put 'put ''KXt2YXIgYmU9W107Zm9yKHZhciBPZSBpbiBwZSlqZC50ZXN0KE9lKSYmSChwZVtPZV0pJiYhcShwcCxPZSkmJiFxKGxlLE9lKSYmYmUucHVzaCh7bXNnOiJSZWR1bmRhbnQgdmlzaXRvciBtZXRob2Q6IDwiK09lKyI+IG9uICIrenUocGUuY29uc3RydWN0b3IpKyIgQ1NUIFZpc2l0b3JcblRo''@;'; put 'put ''ZXJlIGlzIG5vIEdyYW1tYXIgUnVsZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgbWV0aG9kJ3MgbmFtZS5cbkZvciB1dGlsaXR5IG1ldGhvZHMgb24gdmlzaXRvciBjbGFzc2VzIHVzZSBtZXRob2RzIG5hbWVzIHRoYXQgZG8gbm90IG1hdGNoIC8iK2pkLnNvdXJjZSsiLy4iLHR5cGU6WGEuUkVE''@;'; put 'put ''VU5EQU5UX01FVEhPRCxtZXRob2ROYW1lOk9lfSk7cmV0dXJuIGJlfShwZSxsZSk7cmV0dXJuIGJlLmNvbmNhdChPZSl9KHRoaXMsbGUpO2lmKCFjKCRlKSl7dmFyIFN0PUMoJGUsZnVuY3Rpb24oUXQpe3JldHVybiBRdC5tc2d9KTt0aHJvdyBFcnJvcigiRXJyb3JzIERldGVjdGVkIGluIENT''@;'; put 'put ''VCBWaXNpdG9yIDwiK3p1KHRoaXMuY29uc3RydWN0b3IpKyI+OlxuXHQiK1N0LmpvaW4oIlxuXG4iKS5yZXBsYWNlKC9cbi9nLCJcblx0IikpfX19O3JldHVybihiZS5wcm90b3R5cGU9T2UpLmNvbnN0cnVjdG9yPWJlLGJlLl9SVUxFX05BTUVTPWxlLGJlfSh0aGlzLmNsYXNzTmFtZSx0aGlz''@;'; put 'put ''LmFsbFJ1bGVOYW1lcyk7cmV0dXJuIHRoaXMuYmFzZUNzdFZpc2l0b3JDb25zdHJ1Y3Rvcj1sZSxsZX1yZXR1cm4gdGhpcy5iYXNlQ3N0VmlzaXRvckNvbnN0cnVjdG9yfSxwZS5wcm90b3R5cGUuZ2V0QmFzZUNzdFZpc2l0b3JDb25zdHJ1Y3RvcldpdGhEZWZhdWx0cz1mdW5jdGlvbigpe2lm''@;'; put 'put ''KFUodGhpcy5iYXNlQ3N0VmlzaXRvcldpdGhEZWZhdWx0c0NvbnN0cnVjdG9yKSl7dmFyIGxlPWZ1bmN0aW9uIGZsKHBlLGxlLGJlKXt2YXIgT2U9ZnVuY3Rpb24oKXt9O1d1KE9lLHBlKyJCYXNlU2VtYW50aWNzV2l0aERlZmF1bHRzIik7dmFyICRlPU9iamVjdC5jcmVhdGUoYmUucHJvdG90''@;'; put 'put ''eXBlKTtyZXR1cm4gUihsZSxmdW5jdGlvbihTdCl7JGVbU3RdPWZwfSksKE9lLnByb3RvdHlwZT0kZSkuY29uc3RydWN0b3I9T2UsT2V9KHRoaXMuY2xhc3NOYW1lLHRoaXMuYWxsUnVsZU5hbWVzLHRoaXMuZ2V0QmFzZUNzdFZpc2l0b3JDb25zdHJ1Y3RvcigpKTtyZXR1cm4gdGhpcy5iYXNl''@;'; put 'put ''Q3N0VmlzaXRvcldpdGhEZWZhdWx0c0NvbnN0cnVjdG9yPWxlLGxlfXJldHVybiB0aGlzLmJhc2VDc3RWaXNpdG9yV2l0aERlZmF1bHRzQ29uc3RydWN0b3J9LHBlLnByb3RvdHlwZS5uZXN0ZWRSdWxlQmVmb3JlQ2xhdXNlPWZ1bmN0aW9uKGxlLGJlKXt2YXIgT2U7aWYodm9pZCAwIT09bGUu''@;'; put 'put ''TkFNRSlyZXR1cm4gdGhpcy5uZXN0ZWRSdWxlSW52b2NhdGlvblN0YXRlVXBkYXRlKE9lPWxlLk5BTUUsYmUpLE9lfSxwZS5wcm90b3R5cGUubmVzdGVkQWx0QmVmb3JlQ2xhdXNlPWZ1bmN0aW9uKGxlLGJlLE9lLCRlKXt2YXIgRW4sUXQ9bjgodGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hv''@;'; put 'put ''cnROYW1lKCksT2UsYmUsJGUpO2lmKHZvaWQgMCE9PWxlLk5BTUUpcmV0dXJuIHRoaXMubmVzdGVkUnVsZUludm9jYXRpb25TdGF0ZVVwZGF0ZShFbj1sZS5OQU1FLFF0KSx7c2hvcnROYW1lOlF0LG5lc3RlZE5hbWU6RW59fSxwZS5wcm90b3R5cGUubmVzdGVkUnVsZUZpbmFsbHlDbGF1c2U9''@;'; put 'put ''ZnVuY3Rpb24obGUsYmUpe3ZhciBPZT10aGlzLkNTVF9TVEFDSywkZT1PZVtPZS5sZW5ndGgtMV07dGhpcy5uZXN0ZWRSdWxlRmluYWxseVN0YXRlVXBkYXRlKCk7dmFyIFN0PU9lW09lLmxlbmd0aC0xXTt5dChTdCxiZSwkZSksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZShTdC5sb2Nh''@;'; put 'put ''dGlvbiwkZS5sb2NhdGlvbil9LHBlLnByb3RvdHlwZS5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUlVMRV9TVEFDS1t0aGlzLkxBU1RfRVhQTElDSVRfUlVMRV9TVEFDS1t0aGlzLkxBU1RfRVhQTElDSVRfUlVMRV9TVEFDSy5sZW5ndGgtMV1d''@;'; put 'put ''fSxwZS5wcm90b3R5cGUuZ2V0TGFzdEV4cGxpY2l0UnVsZVNob3J0TmFtZU5vQ3N0PWZ1bmN0aW9uKCl7dmFyIGxlPXRoaXMuUlVMRV9TVEFDSztyZXR1cm4gbGVbbGUubGVuZ3RoLTFdfSxwZS5wcm90b3R5cGUuZ2V0UHJldmlvdXNFeHBsaWNpdFJ1bGVTaG9ydE5hbWU9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5SVUxFX1NUQUNLW3RoaXMuTEFTVF9FWFBMSUNJVF9SVUxFX1NUQUNLW3RoaXMuTEFTVF9FWFBMSUNJVF9SVUxFX1NUQUNLLmxlbmd0aC0yXV19LHBlLnByb3RvdHlwZS5nZXRQcmV2aW91c0V4cGxpY2l0UnVsZVNob3J0TmFtZU5vQ3N0PWZ1bmN0aW9uKCl7dmFyIGxlPXRo''@;'; put 'put ''aXMuUlVMRV9TVEFDSztyZXR1cm4gbGVbbGUubGVuZ3RoLTJdfSxwZS5wcm90b3R5cGUuZ2V0TGFzdEV4cGxpY2l0UnVsZU9jY3VycmVuY2VJbmRleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDS1t0aGlzLkxBU1RfRVhQTElDSVRfUlVMRV9TVEFDS1t0aGlz''@;'; put 'put ''LkxBU1RfRVhQTElDSVRfUlVMRV9TVEFDSy5sZW5ndGgtMV1dfSxwZS5wcm90b3R5cGUuZ2V0TGFzdEV4cGxpY2l0UnVsZU9jY3VycmVuY2VJbmRleE5vQ3N0PWZ1bmN0aW9uKCl7dmFyIGxlPXRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLO3JldHVybiBsZVtsZS5sZW5ndGgtMV19LHBlLnBy''@;'; put 'put ''b3RvdHlwZS5uZXN0ZWRSdWxlSW52b2NhdGlvblN0YXRlVXBkYXRlPWZ1bmN0aW9uKGxlLGJlKXt0aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSy5wdXNoKDEpLHRoaXMuUlVMRV9TVEFDSy5wdXNoKGJlKSx0aGlzLmNzdE5lc3RlZEludm9jYXRpb25TdGF0ZVVwZGF0ZShsZSxiZSl9LHBlLnBy''@;'; put 'put ''b3RvdHlwZS5uZXN0ZWRSdWxlRmluYWxseVN0YXRlVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5SVUxFX1NUQUNLLnBvcCgpLHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLLnBvcCgpLHRoaXMuY3N0TmVzdGVkRmluYWxseVN0YXRlVXBkYXRlKCl9LHBlfSgpLGZjPWZ1bmN0aW9uKCl7ZnVuY3Rp''@;'; put 'put ''b24gcGUoKXt9cmV0dXJuIHBlLnByb3RvdHlwZS5pbml0TGV4ZXJBZGFwdGVyPWZ1bmN0aW9uKCl7dGhpcy50b2tWZWN0b3I9W10sdGhpcy50b2tWZWN0b3JMZW5ndGg9MCx0aGlzLmN1cnJJZHg9LTF9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwZS5wcm90b3R5cGUsImlucHV0Iix7Z2V0OmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9rVmVjdG9yfSxzZXQ6ZnVuY3Rpb24obGUpe2lmKCEwIT09dGhpcy5zZWxmQW5hbHlzaXNEb25lKXRocm93IEVycm9yKCJNaXNzaW5nIDxwZXJmb3JtU2VsZkFuYWx5c2lzPiBpbnZvY2F0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIFBhcnNlcidzIGNvbnN0''@;'; put 'put ''cnVjdG9yLiIpO3RoaXMucmVzZXQoKSx0aGlzLnRva1ZlY3Rvcj1sZSx0aGlzLnRva1ZlY3Rvckxlbmd0aD1sZS5sZW5ndGh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSkscGUucHJvdG90eXBlLlNLSVBfVE9LRU49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJySWR4PD10aGlz''@;'; put 'put ''LnRva1ZlY3Rvci5sZW5ndGgtMj8odGhpcy5jb25zdW1lVG9rZW4oKSx0aGlzLkxBKDEpKTpGbH0scGUucHJvdG90eXBlLkxBPWZ1bmN0aW9uKGxlKXt2YXIgYmU9dGhpcy5jdXJySWR4K2xlO3JldHVybiBiZTwwfHx0aGlzLnRva1ZlY3Rvckxlbmd0aDw9YmU/Rmw6dGhpcy50b2tWZWN0b3Jb''@;'; put 'put ''YmVdfSxwZS5wcm90b3R5cGUuY29uc3VtZVRva2VuPWZ1bmN0aW9uKCl7dGhpcy5jdXJySWR4Kyt9LHBlLnByb3RvdHlwZS5leHBvcnRMZXhlclN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycklkeH0scGUucHJvdG90eXBlLmltcG9ydExleGVyU3RhdGU9ZnVuY3Rpb24obGUpe3Ro''@;'; put 'put ''aXMuY3VycklkeD1sZX0scGUucHJvdG90eXBlLnJlc2V0TGV4ZXJTdGF0ZT1mdW5jdGlvbigpe3RoaXMuY3VycklkeD0tMX0scGUucHJvdG90eXBlLm1vdmVUb1Rlcm1pbmF0ZWRTdGF0ZT1mdW5jdGlvbigpe3RoaXMuY3VycklkeD10aGlzLnRva1ZlY3Rvci5sZW5ndGgtMX0scGUucHJvdG90''@;'; put 'put ''eXBlLmdldExleGVyUG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5leHBvcnRMZXhlclN0YXRlKCl9LHBlfSgpLGYzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcGUoKXt9cmV0dXJuIHBlLnByb3RvdHlwZS5BQ1RJT049ZnVuY3Rpb24obGUpe3JldHVybiBsZS5jYWxsKHRoaXMpfSxwZS5w''@;'; put 'put ''cm90b3R5cGUuY29uc3VtZT1mdW5jdGlvbihsZSxiZSxPZSl7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGJlLGxlLE9lKX0scGUucHJvdG90eXBlLnN1YnJ1bGU9ZnVuY3Rpb24obGUsYmUsT2Upe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChiZSxsZSxPZSl9LHBlLnByb3RvdHlw''@;'; put 'put ''ZS5vcHRpb249ZnVuY3Rpb24obGUsYmUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGJlLGxlKX0scGUucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGxlLGJlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGJlLGxlKX0scGUucHJvdG90eXBlLm1hbnk9ZnVuY3Rpb24obGUsYmUpe3JldHVybiB0''@;'; put 'put ''aGlzLm1hbnlJbnRlcm5hbChsZSxiZSl9LHBlLnByb3RvdHlwZS5hdExlYXN0T25lPWZ1bmN0aW9uKGxlLGJlKXtyZXR1cm4gdGhpcy5hdExlYXN0T25lSW50ZXJuYWwobGUsYmUpfSxwZS5wcm90b3R5cGUuQ09OU1VNRT1mdW5jdGlvbihsZSxiZSl7cmV0dXJuIHRoaXMuY29uc3VtZUludGVy''@;'; put 'put ''bmFsKGxlLDAsYmUpfSxwZS5wcm90b3R5cGUuQ09OU1VNRTE9ZnVuY3Rpb24obGUsYmUpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChsZSwxLGJlKX0scGUucHJvdG90eXBlLkNPTlNVTUUyPWZ1bmN0aW9uKGxlLGJlKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwobGUsMixiZSl9''@;'; put 'put ''LHBlLnByb3RvdHlwZS5DT05TVU1FMz1mdW5jdGlvbihsZSxiZSl7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGxlLDMsYmUpfSxwZS5wcm90b3R5cGUuQ09OU1VNRTQ9ZnVuY3Rpb24obGUsYmUpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChsZSw0LGJlKX0scGUucHJvdG90eXBl''@;'; put 'put ''LkNPTlNVTUU1PWZ1bmN0aW9uKGxlLGJlKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwobGUsNSxiZSl9LHBlLnByb3RvdHlwZS5DT05TVU1FNj1mdW5jdGlvbihsZSxiZSl7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGxlLDYsYmUpfSxwZS5wcm90b3R5cGUuQ09OU1VNRTc9ZnVu''@;'; put 'put ''Y3Rpb24obGUsYmUpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChsZSw3LGJlKX0scGUucHJvdG90eXBlLkNPTlNVTUU4PWZ1bmN0aW9uKGxlLGJlKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwobGUsOCxiZSl9LHBlLnByb3RvdHlwZS5DT05TVU1FOT1mdW5jdGlvbihsZSxiZSl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGxlLDksYmUpfSxwZS5wcm90b3R5cGUuU1VCUlVMRT1mdW5jdGlvbihsZSxiZSl7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGxlLDAsYmUpfSxwZS5wcm90b3R5cGUuU1VCUlVMRTE9ZnVuY3Rpb24obGUsYmUpe3JldHVybiB0aGlzLnN1''@;'; put 'put ''YnJ1bGVJbnRlcm5hbChsZSwxLGJlKX0scGUucHJvdG90eXBlLlNVQlJVTEUyPWZ1bmN0aW9uKGxlLGJlKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwobGUsMixiZSl9LHBlLnByb3RvdHlwZS5TVUJSVUxFMz1mdW5jdGlvbihsZSxiZSl7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFs''@;'; put 'put ''KGxlLDMsYmUpfSxwZS5wcm90b3R5cGUuU1VCUlVMRTQ9ZnVuY3Rpb24obGUsYmUpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChsZSw0LGJlKX0scGUucHJvdG90eXBlLlNVQlJVTEU1PWZ1bmN0aW9uKGxlLGJlKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwobGUsNSxiZSl9LHBl''@;'; put 'put ''LnByb3RvdHlwZS5TVUJSVUxFNj1mdW5jdGlvbihsZSxiZSl7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGxlLDYsYmUpfSxwZS5wcm90b3R5cGUuU1VCUlVMRTc9ZnVuY3Rpb24obGUsYmUpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChsZSw3LGJlKX0scGUucHJvdG90eXBlLlNV''@;'; put 'put ''QlJVTEU4PWZ1bmN0aW9uKGxlLGJlKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwobGUsOCxiZSl9LHBlLnByb3RvdHlwZS5TVUJSVUxFOT1mdW5jdGlvbihsZSxiZSl7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGxlLDksYmUpfSxwZS5wcm90b3R5cGUuT1BUSU9OPWZ1bmN0aW9u''@;'; put 'put ''KGxlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChsZSwwKX0scGUucHJvdG90eXBlLk9QVElPTjE9ZnVuY3Rpb24obGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGxlLDEpfSxwZS5wcm90b3R5cGUuT1BUSU9OMj1mdW5jdGlvbihsZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJu''@;'; put 'put ''YWwobGUsMil9LHBlLnByb3RvdHlwZS5PUFRJT04zPWZ1bmN0aW9uKGxlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChsZSwzKX0scGUucHJvdG90eXBlLk9QVElPTjQ9ZnVuY3Rpb24obGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGxlLDQpfSxwZS5wcm90b3R5cGUuT1BUSU9O''@;'; put 'put ''NT1mdW5jdGlvbihsZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwobGUsNSl9LHBlLnByb3RvdHlwZS5PUFRJT042PWZ1bmN0aW9uKGxlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChsZSw2KX0scGUucHJvdG90eXBlLk9QVElPTjc9ZnVuY3Rpb24obGUpe3JldHVybiB0aGlzLm9w''@;'; put 'put ''dGlvbkludGVybmFsKGxlLDcpfSxwZS5wcm90b3R5cGUuT1BUSU9OOD1mdW5jdGlvbihsZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwobGUsOCl9LHBlLnByb3RvdHlwZS5PUFRJT045PWZ1bmN0aW9uKGxlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChsZSw5KX0scGUucHJvdG90''@;'; put 'put ''eXBlLk9SPWZ1bmN0aW9uKGxlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGxlLDApfSxwZS5wcm90b3R5cGUuT1IxPWZ1bmN0aW9uKGxlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGxlLDEpfSxwZS5wcm90b3R5cGUuT1IyPWZ1bmN0aW9uKGxlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGxl''@;'; put 'put ''LDIpfSxwZS5wcm90b3R5cGUuT1IzPWZ1bmN0aW9uKGxlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGxlLDMpfSxwZS5wcm90b3R5cGUuT1I0PWZ1bmN0aW9uKGxlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGxlLDQpfSxwZS5wcm90b3R5cGUuT1I1PWZ1bmN0aW9uKGxlKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5vckludGVybmFsKGxlLDUpfSxwZS5wcm90b3R5cGUuT1I2PWZ1bmN0aW9uKGxlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGxlLDYpfSxwZS5wcm90b3R5cGUuT1I3PWZ1bmN0aW9uKGxlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGxlLDcpfSxwZS5wcm90b3R5cGUuT1I4PWZ1bmN0aW9u''@;'; put 'put ''KGxlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGxlLDgpfSxwZS5wcm90b3R5cGUuT1I5PWZ1bmN0aW9uKGxlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGxlLDkpfSxwZS5wcm90b3R5cGUuTUFOWT1mdW5jdGlvbihsZSl7dGhpcy5tYW55SW50ZXJuYWwoMCxsZSl9LHBlLnByb3RvdHlwZS5N''@;'; put 'put ''QU5ZMT1mdW5jdGlvbihsZSl7dGhpcy5tYW55SW50ZXJuYWwoMSxsZSl9LHBlLnByb3RvdHlwZS5NQU5ZMj1mdW5jdGlvbihsZSl7dGhpcy5tYW55SW50ZXJuYWwoMixsZSl9LHBlLnByb3RvdHlwZS5NQU5ZMz1mdW5jdGlvbihsZSl7dGhpcy5tYW55SW50ZXJuYWwoMyxsZSl9LHBlLnByb3Rv''@;'; put 'put ''dHlwZS5NQU5ZND1mdW5jdGlvbihsZSl7dGhpcy5tYW55SW50ZXJuYWwoNCxsZSl9LHBlLnByb3RvdHlwZS5NQU5ZNT1mdW5jdGlvbihsZSl7dGhpcy5tYW55SW50ZXJuYWwoNSxsZSl9LHBlLnByb3RvdHlwZS5NQU5ZNj1mdW5jdGlvbihsZSl7dGhpcy5tYW55SW50ZXJuYWwoNixsZSl9LHBl''@;'; put 'put ''LnByb3RvdHlwZS5NQU5ZNz1mdW5jdGlvbihsZSl7dGhpcy5tYW55SW50ZXJuYWwoNyxsZSl9LHBlLnByb3RvdHlwZS5NQU5ZOD1mdW5jdGlvbihsZSl7dGhpcy5tYW55SW50ZXJuYWwoOCxsZSl9LHBlLnByb3RvdHlwZS5NQU5ZOT1mdW5jdGlvbihsZSl7dGhpcy5tYW55SW50ZXJuYWwoOSxs''@;'; put 'put ''ZSl9LHBlLnByb3RvdHlwZS5NQU5ZX1NFUD1mdW5jdGlvbihsZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCgwLGxlKX0scGUucHJvdG90eXBlLk1BTllfU0VQMT1mdW5jdGlvbihsZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCgxLGxlKX0scGUucHJvdG90eXBlLk1BTllfU0VQMj1m''@;'; put 'put ''dW5jdGlvbihsZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCgyLGxlKX0scGUucHJvdG90eXBlLk1BTllfU0VQMz1mdW5jdGlvbihsZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCgzLGxlKX0scGUucHJvdG90eXBlLk1BTllfU0VQND1mdW5jdGlvbihsZSl7dGhpcy5tYW55U2VwRmly''@;'; put 'put ''c3RJbnRlcm5hbCg0LGxlKX0scGUucHJvdG90eXBlLk1BTllfU0VQNT1mdW5jdGlvbihsZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCg1LGxlKX0scGUucHJvdG90eXBlLk1BTllfU0VQNj1mdW5jdGlvbihsZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCg2LGxlKX0scGUucHJvdG90''@;'; put 'put ''eXBlLk1BTllfU0VQNz1mdW5jdGlvbihsZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCg3LGxlKX0scGUucHJvdG90eXBlLk1BTllfU0VQOD1mdW5jdGlvbihsZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCg4LGxlKX0scGUucHJvdG90eXBlLk1BTllfU0VQOT1mdW5jdGlvbihsZSl7''@;'; put 'put ''dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCg5LGxlKX0scGUucHJvdG90eXBlLkFUX0xFQVNUX09ORT1mdW5jdGlvbihsZSl7dGhpcy5hdExlYXN0T25lSW50ZXJuYWwoMCxsZSl9LHBlLnByb3RvdHlwZS5BVF9MRUFTVF9PTkUxPWZ1bmN0aW9uKGxlKXtyZXR1cm4gdGhpcy5hdExlYXN0T25l''@;'; put 'put ''SW50ZXJuYWwoMSxsZSl9LHBlLnByb3RvdHlwZS5BVF9MRUFTVF9PTkUyPWZ1bmN0aW9uKGxlKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCgyLGxlKX0scGUucHJvdG90eXBlLkFUX0xFQVNUX09ORTM9ZnVuY3Rpb24obGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDMsbGUpfSxwZS5wcm90''@;'; put 'put ''b3R5cGUuQVRfTEVBU1RfT05FND1mdW5jdGlvbihsZSl7dGhpcy5hdExlYXN0T25lSW50ZXJuYWwoNCxsZSl9LHBlLnByb3RvdHlwZS5BVF9MRUFTVF9PTkU1PWZ1bmN0aW9uKGxlKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCg1LGxlKX0scGUucHJvdG90eXBlLkFUX0xFQVNUX09ORTY9ZnVu''@;'; put 'put ''Y3Rpb24obGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDYsbGUpfSxwZS5wcm90b3R5cGUuQVRfTEVBU1RfT05FNz1mdW5jdGlvbihsZSl7dGhpcy5hdExlYXN0T25lSW50ZXJuYWwoNyxsZSl9LHBlLnByb3RvdHlwZS5BVF9MRUFTVF9PTkU4PWZ1bmN0aW9uKGxlKXt0aGlzLmF0TGVhc3RP''@;'; put 'put ''bmVJbnRlcm5hbCg4LGxlKX0scGUucHJvdG90eXBlLkFUX0xFQVNUX09ORTk9ZnVuY3Rpb24obGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDksbGUpfSxwZS5wcm90b3R5cGUuQVRfTEVBU1RfT05FX1NFUD1mdW5jdGlvbihsZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCgw''@;'; put 'put ''LGxlKX0scGUucHJvdG90eXBlLkFUX0xFQVNUX09ORV9TRVAxPWZ1bmN0aW9uKGxlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDEsbGUpfSxwZS5wcm90b3R5cGUuQVRfTEVBU1RfT05FX1NFUDI9ZnVuY3Rpb24obGUpe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwo''@;'; put 'put ''MixsZSl9LHBlLnByb3RvdHlwZS5BVF9MRUFTVF9PTkVfU0VQMz1mdW5jdGlvbihsZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCgzLGxlKX0scGUucHJvdG90eXBlLkFUX0xFQVNUX09ORV9TRVA0PWZ1bmN0aW9uKGxlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFs''@;'; put 'put ''KDQsbGUpfSxwZS5wcm90b3R5cGUuQVRfTEVBU1RfT05FX1NFUDU9ZnVuY3Rpb24obGUpe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoNSxsZSl9LHBlLnByb3RvdHlwZS5BVF9MRUFTVF9PTkVfU0VQNj1mdW5jdGlvbihsZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5h''@;'; put 'put ''bCg2LGxlKX0scGUucHJvdG90eXBlLkFUX0xFQVNUX09ORV9TRVA3PWZ1bmN0aW9uKGxlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDcsbGUpfSxwZS5wcm90b3R5cGUuQVRfTEVBU1RfT05FX1NFUDg9ZnVuY3Rpb24obGUpe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJu''@;'; put 'put ''YWwoOCxsZSl9LHBlLnByb3RvdHlwZS5BVF9MRUFTVF9PTkVfU0VQOT1mdW5jdGlvbihsZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCg5LGxlKX0scGUucHJvdG90eXBlLlJVTEU9ZnVuY3Rpb24obGUsYmUsT2Upe2lmKHZvaWQgMD09PU9lJiYoT2U9WXUpLHEodGhpcy5kZWZp''@;'; put 'put ''bmVkUnVsZXNOYW1lcyxsZSkpe3ZhciAkZT1pMS5idWlsZER1cGxpY2F0ZVJ1bGVOYW1lRXJyb3Ioe3RvcExldmVsUnVsZTpsZSxncmFtbWFyTmFtZTp0aGlzLmNsYXNzTmFtZX0pO3RoaXMuZGVmaW5pdGlvbkVycm9ycy5wdXNoKHttZXNzYWdlOiRlLHR5cGU6cmQuRFVQTElDQVRFX1JVTEVf''@;'; put 'put ''TkFNRSxydWxlTmFtZTpsZX0pfXRoaXMuZGVmaW5lZFJ1bGVzTmFtZXMucHVzaChsZSk7dmFyIFF0PXRoaXMuZGVmaW5lUnVsZShsZSxiZSxPZSk7cmV0dXJuIHRoaXNbbGVdPVF0LFF0fSxwZS5wcm90b3R5cGUuT1ZFUlJJREVfUlVMRT1mdW5jdGlvbihsZSxiZSxPZSl7dm9pZCAwPT09T2Um''@;'; put 'put ''JihPZT1ZdSk7dmFyICRlPVtdOyRlPSRlLmNvbmNhdChmdW5jdGlvbiBDcyhwZSxsZSxiZSl7dmFyIE9lPVtdO3JldHVybiBxKGxlLHBlKXx8T2UucHVzaCh7bWVzc2FnZToiSW52YWxpZCBydWxlIG92ZXJyaWRlLCBydWxlOiAtPiIrcGUrIjwtIGNhbm5vdCBiZSBvdmVycmlkZGVuIGluIHRo''@;'; put 'put ''ZSBncmFtbWFyOiAtPiIrYmUrIjwtYXMgaXQgaXMgbm90IGRlZmluZWQgaW4gYW55IG9mIHRoZSBzdXBlciBncmFtbWFycyAiLHR5cGU6cmQuSU5WQUxJRF9SVUxFX09WRVJSSURFLHJ1bGVOYW1lOnBlfSksT2V9KGxlLHRoaXMuZGVmaW5lZFJ1bGVzTmFtZXMsdGhpcy5jbGFzc05hbWUpKSx0''@;'; put 'put ''aGlzLmRlZmluaXRpb25FcnJvcnMucHVzaC5hcHBseSh0aGlzLmRlZmluaXRpb25FcnJvcnMsJGUpO3ZhciBTdD10aGlzLmRlZmluZVJ1bGUobGUsYmUsT2UpO3JldHVybiB0aGlzW2xlXT1TdCxTdH0scGUucHJvdG90eXBlLkJBQ0tUUkFDSz1mdW5jdGlvbihsZSxiZSl7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKCl7dGhpcy5pc0JhY2tUcmFja2luZ1N0YWNrLnB1c2goMSk7dmFyIE9lPXRoaXMuc2F2ZVJlY29nU3RhdGUoKTt0cnl7cmV0dXJuIGxlLmFwcGx5KHRoaXMsYmUpLCEwfWNhdGNoKCRlKXtpZihocCgkZSkpcmV0dXJuITE7dGhyb3cgJGV9ZmluYWxseXt0aGlzLnJlbG9hZFJlY29nU3Rh''@;'; put 'put ''dGUoT2UpLHRoaXMuaXNCYWNrVHJhY2tpbmdTdGFjay5wb3AoKX19fSxwZS5wcm90b3R5cGUuZ2V0R0FzdFByb2R1Y3Rpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGV9LHBlLnByb3RvdHlwZS5nZXRTZXJpYWxpemVkR2FzdFByb2R1Y3Rpb25zPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIGNuKEEodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpfSxwZX0oKSxncD1mdW5jdGlvbigpe2Z1bmN0aW9uIHBlKCl7fXJldHVybiBwZS5wcm90b3R5cGUuaW5pdFJlY29nbml6ZXJFbmdpbmU9ZnVuY3Rpb24obGUsYmUpe2lmKHRoaXMuY2xhc3NOYW1lPWZ1bmN0aW9u''@;'; put 'put ''IGFpKHBlKXtyZXR1cm4genUocGUuY29uc3RydWN0b3IpfSh0aGlzKSx0aGlzLnNob3J0UnVsZU5hbWVUb0Z1bGw9e30sdGhpcy5mdWxsUnVsZU5hbWVUb1Nob3J0PXt9LHRoaXMucnVsZVNob3J0TmFtZUlkeD0yNTYsdGhpcy50b2tlbk1hdGNoZXI9TXIsdGhpcy5kZWZpbmVkUnVsZXNOYW1l''@;'; put 'put ''cz1bXSx0aGlzLnRva2Vuc01hcD17fSx0aGlzLmFsbFJ1bGVOYW1lcz1bXSx0aGlzLmlzQmFja1RyYWNraW5nU3RhY2s9W10sdGhpcy5SVUxFX1NUQUNLPVtdLHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLPVtdLHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGU9e30sVyhiZSwic2VyaWFsaXpl''@;'; put 'put ''ZEdyYW1tYXIiKSl0aHJvdyBFcnJvcigiVGhlIFBhcnNlcidzIGNvbmZpZ3VyYXRpb24gY2FuIG5vIGxvbmdlciBjb250YWluIGEgPHNlcmlhbGl6ZWRHcmFtbWFyPiBwcm9wZXJ0eS5cblx0U2VlOiBodHRwczovL3NhcC5naXRodWIuaW8vY2hldnJvdGFpbi9kb2NzL2NoYW5nZXMvQlJFQUtJ''@;'; put 'put ''TkdfQ0hBTkdFUy5odG1sI182LTAtMFxuXHRGb3IgRnVydGhlciBkZXRhaWxzLiIpO2lmKGIobGUpKXtpZihjKGxlKSl0aHJvdyBFcnJvcigiQSBUb2tlbiBWb2NhYnVsYXJ5IGNhbm5vdCBiZSBlbXB0eS5cblx0Tm90ZSB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCBmb3IgdGhlIHBhcnNlciBj''@;'; put 'put ''b25zdHJ1Y3RvclxuXHRpcyBubyBsb25nZXIgYSBUb2tlbiB2ZWN0b3IgKHNpbmNlIHY0LjApLiIpO2lmKCJudW1iZXIiPT10eXBlb2YgbGVbMF0uc3RhcnRPZmZzZXQpdGhyb3cgRXJyb3IoIlRoZSBQYXJzZXIgY29uc3RydWN0b3Igbm8gbG9uZ2VyIGFjY2VwdHMgYSB0b2tlbiB2ZWN0b3Ig''@;'; put 'put ''YXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxuXHRTZWU6IGh0dHBzOi8vc2FwLmdpdGh1Yi5pby9jaGV2cm90YWluL2RvY3MvY2hhbmdlcy9CUkVBS0lOR19DSEFOR0VTLmh0bWwjXzQtMC0wXG5cdEZvciBGdXJ0aGVyIGRldGFpbHMuIil9aWYoYihsZSkpdGhpcy50b2tlbnNNYXA9a2UobGUsZnVu''@;'; put 'put ''Y3Rpb24oUXQsRW4pe3JldHVybiBRdFtFbi5uYW1lXT1FbixRdH0se30pO2Vsc2UgaWYoVyhsZSwibW9kZXMiKSYmQih3KEEobGUubW9kZXMpKSxVcykpe3ZhciAkZT1YKHcoQShsZS5tb2RlcykpKTt0aGlzLnRva2Vuc01hcD1rZSgkZSxmdW5jdGlvbihRdCxFbil7cmV0dXJuIFF0W0VuLm5h''@;'; put 'put ''bWVdPUVuLFF0fSx7fSl9ZWxzZXtpZighTShsZSkpdGhyb3cgbmV3IEVycm9yKCI8dG9rZW5zRGljdGlvbmFyeT4gYXJndW1lbnQgbXVzdCBiZSBBbiBBcnJheSBvZiBUb2tlbiBjb25zdHJ1Y3RvcnMsIEEgZGljdGlvbmFyeSBvZiBUb2tlbiBjb25zdHJ1Y3RvcnMgb3IgYW4gSU11bHRpTW9k''@;'; put 'put ''ZUxleGVyRGVmaW5pdGlvbiIpO3RoaXMudG9rZW5zTWFwPW1lKGxlKX10aGlzLnRva2Vuc01hcC5FT0Y9SmM7dmFyIFN0PUIoQShsZSksZnVuY3Rpb24oUXQpe3JldHVybiBjKFF0LmNhdGVnb3J5TWF0Y2hlcyl9KTt0aGlzLnRva2VuTWF0Y2hlcj1TdD9Ncjp0YSxfcyhBKHRoaXMudG9rZW5z''@;'; put 'put ''TWFwKSl9LHBlLnByb3RvdHlwZS5kZWZpbmVSdWxlPWZ1bmN0aW9uKGxlLGJlLE9lKXtpZih0aGlzLnNlbGZBbmFseXNpc0RvbmUpdGhyb3cgRXJyb3IoIkdyYW1tYXIgcnVsZSA8IitsZSsiPiBtYXkgbm90IGJlIGRlZmluZWQgYWZ0ZXIgdGhlICdwZXJmb3JtU2VsZkFuYWx5c2lzJyBtZXRo''@;'; put 'put ''b2QgaGFzIGJlZW4gY2FsbGVkJ1xuTWFrZSBzdXJlIHRoYXQgYWxsIGdyYW1tYXIgcnVsZSBkZWZpbml0aW9ucyBhcmUgZG9uZSBiZWZvcmUgJ3BlcmZvcm1TZWxmQW5hbHlzaXMnIGlzIGNhbGxlZC4iKTt2YXIgY3IsJGU9VyhPZSwicmVzeW5jRW5hYmxlZCIpP09lLnJlc3luY0VuYWJsZWQ6''@;'; put 'put ''WXUucmVzeW5jRW5hYmxlZCxTdD1XKE9lLCJyZWNvdmVyeVZhbHVlRnVuYyIpP09lLnJlY292ZXJ5VmFsdWVGdW5jOll1LnJlY292ZXJ5VmFsdWVGdW5jLFF0PXRoaXMucnVsZVNob3J0TmFtZUlkeDw8MTI7ZnVuY3Rpb24gRW4ocGkpe3RyeXtpZighMD09PXRoaXMub3V0cHV0Q3N0KXtiZS5h''@;'; put 'put ''cHBseSh0aGlzLHBpKTt2YXIgRHI9dGhpcy5DU1RfU1RBQ0tbdGhpcy5DU1RfU1RBQ0subGVuZ3RoLTFdO3JldHVybiB0aGlzLmNzdFBvc3RSdWxlKERyKSxEcn1yZXR1cm4gYmUuYXBwbHkodGhpcyxwaSl9Y2F0Y2goSmkpe3JldHVybiB0aGlzLmludm9rZVJ1bGVDYXRjaChKaSwkZSxTdCl9''@;'; put 'put ''ZmluYWxseXt0aGlzLnJ1bGVGaW5hbGx5U3RhdGVVcGRhdGUoKX19cmV0dXJuIHRoaXMucnVsZVNob3J0TmFtZUlkeCsrLHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbFtRdF09bGUsdGhpcy5mdWxsUnVsZU5hbWVUb1Nob3J0W2xlXT1RdCwoY3I9ZnVuY3Rpb24ocGksRHIpe3JldHVybiB2b2lk''@;'; put 'put ''IDA9PT1waSYmKHBpPTApLHRoaXMucnVsZUludm9jYXRpb25TdGF0ZVVwZGF0ZShRdCxsZSxwaSksRW4uY2FsbCh0aGlzLERyKX0pLnJ1bGVOYW1lPWxlLGNyLm9yaWdpbmFsR3JhbW1hckFjdGlvbj1iZSxjcn0scGUucHJvdG90eXBlLmludm9rZVJ1bGVDYXRjaD1mdW5jdGlvbihsZSxiZSxP''@;'; put 'put ''ZSl7dmFyICRlPTE9PT10aGlzLlJVTEVfU1RBQ0subGVuZ3RoLFN0PWJlJiYhdGhpcy5pc0JhY2tUcmFja2luZygpJiZ0aGlzLnJlY292ZXJ5RW5hYmxlZDtpZihocChsZSkpe3ZhciBRdD1sZTtpZihTdCl7dmFyIGNyLEVuPXRoaXMuZmluZFJlU3luY1Rva2VuVHlwZSgpO2lmKHRoaXMuaXNJ''@;'; put 'put ''bkN1cnJlbnRSdWxlUmVTeW5jU2V0KEVuKSlyZXR1cm4gUXQucmVzeW5jZWRUb2tlbnM9dGhpcy5yZVN5bmNUbyhFbiksdGhpcy5vdXRwdXRDc3Q/KChjcj10aGlzLkNTVF9TVEFDS1t0aGlzLkNTVF9TVEFDSy5sZW5ndGgtMV0pLnJlY292ZXJlZE5vZGU9ITAsY3IpOk9lKCk7dGhyb3cgdGhp''@;'; put 'put ''cy5vdXRwdXRDc3QmJigoY3I9dGhpcy5DU1RfU1RBQ0tbdGhpcy5DU1RfU1RBQ0subGVuZ3RoLTFdKS5yZWNvdmVyZWROb2RlPSEwLFF0LnBhcnRpYWxDc3RSZXN1bHQ9Y3IpLFF0fWlmKCRlKXJldHVybiB0aGlzLm1vdmVUb1Rlcm1pbmF0ZWRTdGF0ZSgpLE9lKCk7dGhyb3cgUXR9dGhyb3cg''@;'; put 'put ''bGV9LHBlLnByb3RvdHlwZS5vcHRpb25JbnRlcm5hbD1mdW5jdGlvbihsZSxiZSl7dmFyIE9lPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKDUxMixiZSksJGU9dGhpcy5uZXN0ZWRSdWxlQmVmb3JlQ2xhdXNlKGxlLE9lKTt0cnl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWxM''@;'; put 'put ''b2dpYyhsZSxiZSxPZSl9ZmluYWxseXt2b2lkIDAhPT0kZSYmdGhpcy5uZXN0ZWRSdWxlRmluYWxseUNsYXVzZShPZSwkZSl9fSxwZS5wcm90b3R5cGUub3B0aW9uSW50ZXJuYWxOb0NzdD1mdW5jdGlvbihsZSxiZSl7dmFyIE9lPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKDUx''@;'; put 'put ''MixiZSk7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWxMb2dpYyhsZSxiZSxPZSl9LHBlLnByb3RvdHlwZS5vcHRpb25JbnRlcm5hbExvZ2ljPWZ1bmN0aW9uKGxlLGJlLE9lKXt2YXIgUXQsRW4sJGU9dGhpcyxTdD10aGlzLmdldExhRnVuY0Zyb21DYWNoZShPZSk7aWYodm9pZCAwIT09bGUu''@;'; put 'put ''REVGKXtpZihRdD1sZS5ERUYsdm9pZCAwIT09KEVuPWxlLkdBVEUpKXt2YXIgY3I9U3Q7U3Q9ZnVuY3Rpb24oKXtyZXR1cm4gRW4uY2FsbCgkZSkmJmNyLmNhbGwoJGUpfX19ZWxzZSBRdD1sZTtpZighMD09PVN0LmNhbGwodGhpcykpcmV0dXJuIFF0LmNhbGwodGhpcyl9LHBlLnByb3RvdHlw''@;'; put 'put ''ZS5hdExlYXN0T25lSW50ZXJuYWw9ZnVuY3Rpb24obGUsYmUpe3ZhciBPZT10aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZChfMixsZSksJGU9dGhpcy5uZXN0ZWRSdWxlQmVmb3JlQ2xhdXNlKGJlLE9lKTt0cnl7cmV0dXJuIHRoaXMuYXRMZWFzdE9uZUludGVybmFsTG9naWMobGUs''@;'; put 'put ''YmUsT2UpfWZpbmFsbHl7dm9pZCAwIT09JGUmJnRoaXMubmVzdGVkUnVsZUZpbmFsbHlDbGF1c2UoT2UsJGUpfX0scGUucHJvdG90eXBlLmF0TGVhc3RPbmVJbnRlcm5hbE5vQ3N0PWZ1bmN0aW9uKGxlLGJlKXt2YXIgT2U9dGhpcy5nZXRLZXlGb3JBdXRvbWF0aWNMb29rYWhlYWQoXzIsbGUp''@;'; put 'put ''O3RoaXMuYXRMZWFzdE9uZUludGVybmFsTG9naWMobGUsYmUsT2UpfSxwZS5wcm90b3R5cGUuYXRMZWFzdE9uZUludGVybmFsTG9naWM9ZnVuY3Rpb24obGUsYmUsT2Upe3ZhciBRdCxFbiwkZT10aGlzLFN0PXRoaXMuZ2V0TGFGdW5jRnJvbUNhY2hlKE9lKTtpZih2b2lkIDAhPT1iZS5ERUYp''@;'; put 'put ''e2lmKFF0PWJlLkRFRix2b2lkIDAhPT0oRW49YmUuR0FURSkpe3ZhciBjcj1TdDtTdD1mdW5jdGlvbigpe3JldHVybiBFbi5jYWxsKCRlKSYmY3IuY2FsbCgkZSl9fX1lbHNlIFF0PWJlO2lmKCEwIT09U3QuY2FsbCh0aGlzKSl0aHJvdyB0aGlzLnJhaXNlRWFybHlFeGl0RXhjZXB0aW9uKGxl''@;'; put 'put ''LGNvLlJFUEVUSVRJT05fTUFOREFUT1JZLGJlLkVSUl9NU0cpO2Zvcih2YXIgVXI9dGhpcy5kb1NpbmdsZVJlcGV0aXRpb24oUXQpOyEwPT09U3QuY2FsbCh0aGlzKSYmITA9PT1VcjspVXI9dGhpcy5kb1NpbmdsZVJlcGV0aXRpb24oUXQpO3RoaXMuYXR0ZW1wdEluUmVwZXRpdGlvblJlY292''@;'; put 'put ''ZXJ5KHRoaXMuYXRMZWFzdE9uZUludGVybmFsLFtsZSxiZV0sU3QsXzIsbGUsV2kpfSxwZS5wcm90b3R5cGUuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWw9ZnVuY3Rpb24obGUsYmUpe3ZhciBPZT10aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZChtcyxsZSksJGU9dGhpcy5uZXN0''@;'; put 'put ''ZWRSdWxlQmVmb3JlQ2xhdXNlKGJlLE9lKTt0cnl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbExvZ2ljKGxlLGJlLE9lKX1maW5hbGx5e3ZvaWQgMCE9PSRlJiZ0aGlzLm5lc3RlZFJ1bGVGaW5hbGx5Q2xhdXNlKE9lLCRlKX19LHBlLnByb3RvdHlwZS5hdExlYXN0T25lU2VwRmly''@;'; put 'put ''c3RJbnRlcm5hbE5vQ3N0PWZ1bmN0aW9uKGxlLGJlKXt2YXIgT2U9dGhpcy5nZXRLZXlGb3JBdXRvbWF0aWNMb29rYWhlYWQobXMsbGUpO3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhsZSxiZSxPZSl9LHBlLnByb3RvdHlwZS5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5h''@;'; put 'put ''bExvZ2ljPWZ1bmN0aW9uKGxlLGJlLE9lKXt2YXIgJGU9dGhpcyxTdD1iZS5ERUYsUXQ9YmUuU0VQO2lmKCEwIT09dGhpcy5nZXRMYUZ1bmNGcm9tQ2FjaGUoT2UpLmNhbGwodGhpcykpdGhyb3cgdGhpcy5yYWlzZUVhcmx5RXhpdEV4Y2VwdGlvbihsZSxjby5SRVBFVElUSU9OX01BTkRBVE9S''@;'; put 'put ''WV9XSVRIX1NFUEFSQVRPUixiZS5FUlJfTVNHKTtTdC5jYWxsKHRoaXMpO2Zvcih2YXIgY3I9ZnVuY3Rpb24oKXtyZXR1cm4gJGUudG9rZW5NYXRjaGVyKCRlLkxBKDEpLFF0KX07ITA9PT10aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLFF0KTspdGhpcy5DT05TVU1FKFF0KSxTdC5jYWxs''@;'; put 'put ''KHRoaXMpO3RoaXMuYXR0ZW1wdEluUmVwZXRpdGlvblJlY292ZXJ5KHRoaXMucmVwZXRpdGlvblNlcFNlY29uZEludGVybmFsLFtsZSxRdCxjcixTdCxLaV0sY3IsbXMsbGUsS2kpfSxwZS5wcm90b3R5cGUubWFueUludGVybmFsPWZ1bmN0aW9uKGxlLGJlKXt2YXIgT2U9dGhpcy5nZXRLZXlG''@;'; put 'put ''b3JBdXRvbWF0aWNMb29rYWhlYWQoNzY4LGxlKSwkZT10aGlzLm5lc3RlZFJ1bGVCZWZvcmVDbGF1c2UoYmUsT2UpO3RyeXtyZXR1cm4gdGhpcy5tYW55SW50ZXJuYWxMb2dpYyhsZSxiZSxPZSl9ZmluYWxseXt2b2lkIDAhPT0kZSYmdGhpcy5uZXN0ZWRSdWxlRmluYWxseUNsYXVzZShPZSwk''@;'; put 'put ''ZSl9fSxwZS5wcm90b3R5cGUubWFueUludGVybmFsTm9Dc3Q9ZnVuY3Rpb24obGUsYmUpe3ZhciBPZT10aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZCg3NjgsbGUpO3JldHVybiB0aGlzLm1hbnlJbnRlcm5hbExvZ2ljKGxlLGJlLE9lKX0scGUucHJvdG90eXBlLm1hbnlJbnRlcm5h''@;'; put 'put ''bExvZ2ljPWZ1bmN0aW9uKGxlLGJlLE9lKXt2YXIgUXQsRW4sJGU9dGhpcyxTdD10aGlzLmdldExhRnVuY0Zyb21DYWNoZShPZSk7aWYodm9pZCAwIT09YmUuREVGKXtpZihRdD1iZS5ERUYsdm9pZCAwIT09KEVuPWJlLkdBVEUpKXt2YXIgY3I9U3Q7U3Q9ZnVuY3Rpb24oKXtyZXR1cm4gRW4u''@;'; put 'put ''Y2FsbCgkZSkmJmNyLmNhbGwoJGUpfX19ZWxzZSBRdD1iZTtmb3IodmFyIFVyPSEwOyEwPT09U3QuY2FsbCh0aGlzKSYmITA9PT1VcjspVXI9dGhpcy5kb1NpbmdsZVJlcGV0aXRpb24oUXQpO3RoaXMuYXR0ZW1wdEluUmVwZXRpdGlvblJlY292ZXJ5KHRoaXMubWFueUludGVybmFsLFtsZSxi''@;'; put 'put ''ZV0sU3QsNzY4LGxlLGlpLFVyKX0scGUucHJvdG90eXBlLm1hbnlTZXBGaXJzdEludGVybmFsPWZ1bmN0aW9uKGxlLGJlKXt2YXIgT2U9dGhpcy5nZXRLZXlGb3JBdXRvbWF0aWNMb29rYWhlYWQoVGMsbGUpLCRlPXRoaXMubmVzdGVkUnVsZUJlZm9yZUNsYXVzZShiZSxPZSk7dHJ5e3RoaXMu''@;'; put 'put ''bWFueVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhsZSxiZSxPZSl9ZmluYWxseXt2b2lkIDAhPT0kZSYmdGhpcy5uZXN0ZWRSdWxlRmluYWxseUNsYXVzZShPZSwkZSl9fSxwZS5wcm90b3R5cGUubWFueVNlcEZpcnN0SW50ZXJuYWxOb0NzdD1mdW5jdGlvbihsZSxiZSl7dmFyIE9lPXRoaXMuZ2V0''@;'; put 'put ''S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKFRjLGxlKTt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsTG9naWMobGUsYmUsT2UpfSxwZS5wcm90b3R5cGUubWFueVNlcEZpcnN0SW50ZXJuYWxMb2dpYz1mdW5jdGlvbihsZSxiZSxPZSl7dmFyICRlPXRoaXMsU3Q9YmUuREVGLFF0PWJlLlNFUDtp''@;'; put 'put ''ZighMD09PXRoaXMuZ2V0TGFGdW5jRnJvbUNhY2hlKE9lKS5jYWxsKHRoaXMpKXtTdC5jYWxsKHRoaXMpO2Zvcih2YXIgY3I9ZnVuY3Rpb24oKXtyZXR1cm4gJGUudG9rZW5NYXRjaGVyKCRlLkxBKDEpLFF0KX07ITA9PT10aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLFF0KTspdGhpcy5D''@;'; put 'put ''T05TVU1FKFF0KSxTdC5jYWxsKHRoaXMpO3RoaXMuYXR0ZW1wdEluUmVwZXRpdGlvblJlY292ZXJ5KHRoaXMucmVwZXRpdGlvblNlcFNlY29uZEludGVybmFsLFtsZSxRdCxjcixTdCxraV0sY3IsVGMsbGUsa2kpfX0scGUucHJvdG90eXBlLnJlcGV0aXRpb25TZXBTZWNvbmRJbnRlcm5hbD1m''@;'; put 'put ''dW5jdGlvbihsZSxiZSxPZSwkZSxTdCl7Zm9yKDtPZSgpOyl0aGlzLkNPTlNVTUUoYmUpLCRlLmNhbGwodGhpcyk7dGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkodGhpcy5yZXBldGl0aW9uU2VwU2Vjb25kSW50ZXJuYWwsW2xlLGJlLE9lLCRlLFN0XSxPZSxtcyxsZSxTdCl9LHBl''@;'; put 'put ''LnByb3RvdHlwZS5kb1NpbmdsZVJlcGV0aXRpb249ZnVuY3Rpb24obGUpe3ZhciBiZT10aGlzLmdldExleGVyUG9zaXRpb24oKTtyZXR1cm4gbGUuY2FsbCh0aGlzKSx0aGlzLmdldExleGVyUG9zaXRpb24oKT5iZX0scGUucHJvdG90eXBlLm9ySW50ZXJuYWxOb0NzdD1mdW5jdGlvbihsZSxi''@;'; put 'put ''ZSl7dmFyIE9lPWIobGUpP2xlOmxlLkRFRiwkZT10aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZCgyNTYsYmUpLFF0PXRoaXMuZ2V0TGFGdW5jRnJvbUNhY2hlKCRlKS5jYWxsKHRoaXMsT2UpO2lmKHZvaWQgMCE9PVF0KXJldHVybiBPZVtRdF0uQUxULmNhbGwodGhpcyk7dGhpcy5y''@;'; put 'put ''YWlzZU5vQWx0RXhjZXB0aW9uKGJlLGxlLkVSUl9NU0cpfSxwZS5wcm90b3R5cGUub3JJbnRlcm5hbD1mdW5jdGlvbihsZSxiZSl7dmFyIE9lPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKDI1NixiZSksJGU9dGhpcy5uZXN0ZWRSdWxlQmVmb3JlQ2xhdXNlKGxlLE9lKTt0cnl7''@;'; put 'put ''dmFyIFN0PWIobGUpP2xlOmxlLkRFRixFbj10aGlzLmdldExhRnVuY0Zyb21DYWNoZShPZSkuY2FsbCh0aGlzLFN0KTtpZih2b2lkIDAhPT1Fbil7dmFyIGNyPVN0W0VuXSxVcj10aGlzLm5lc3RlZEFsdEJlZm9yZUNsYXVzZShjcixiZSwyNTYsRW4pO3RyeXtyZXR1cm4gY3IuQUxULmNhbGwo''@;'; put 'put ''dGhpcyl9ZmluYWxseXt2b2lkIDAhPT1VciYmdGhpcy5uZXN0ZWRSdWxlRmluYWxseUNsYXVzZShVci5zaG9ydE5hbWUsVXIubmVzdGVkTmFtZSl9fXRoaXMucmFpc2VOb0FsdEV4Y2VwdGlvbihiZSxsZS5FUlJfTVNHKX1maW5hbGx5e3ZvaWQgMCE9PSRlJiZ0aGlzLm5lc3RlZFJ1bGVGaW5h''@;'; put 'put ''bGx5Q2xhdXNlKE9lLCRlKX19LHBlLnByb3RvdHlwZS5ydWxlRmluYWxseVN0YXRlVXBkYXRlPWZ1bmN0aW9uKCl7aWYodGhpcy5SVUxFX1NUQUNLLnBvcCgpLHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLLnBvcCgpLHRoaXMuY3N0RmluYWxseVN0YXRlVXBkYXRlKCksMD09PXRoaXMuUlVM''@;'; put 'put ''RV9TVEFDSy5sZW5ndGgmJiExPT09dGhpcy5pc0F0RW5kT2ZJbnB1dCgpKXt2YXIgbGU9dGhpcy5MQSgxKSxiZT10aGlzLmVycm9yTWVzc2FnZVByb3ZpZGVyLmJ1aWxkTm90QWxsSW5wdXRQYXJzZWRNZXNzYWdlKHtmaXJzdFJlZHVuZGFudDpsZSxydWxlTmFtZTp0aGlzLmdldEN1cnJSdWxl''@;'; put 'put ''RnVsbE5hbWUoKX0pO3RoaXMuU0FWRV9FUlJPUihuZXcgbDgoYmUsbGUpKX19LHBlLnByb3RvdHlwZS5zdWJydWxlSW50ZXJuYWw9ZnVuY3Rpb24obGUsYmUsT2Upe3ZhciAkZTt0cnl7cmV0dXJuICRlPWxlLmNhbGwodGhpcyxiZSx2b2lkIDAhPT1PZT9PZS5BUkdTOnZvaWQgMCksdGhpcy5j''@;'; put 'put ''c3RQb3N0Tm9uVGVybWluYWwoJGUsdm9pZCAwIT09T2UmJnZvaWQgMCE9PU9lLkxBQkVMP09lLkxBQkVMOmxlLnJ1bGVOYW1lKSwkZX1jYXRjaChRdCl7dGhpcy5zdWJydWxlSW50ZXJuYWxFcnJvcihRdCxPZSxsZS5ydWxlTmFtZSl9fSxwZS5wcm90b3R5cGUuc3VicnVsZUludGVybmFsRXJy''@;'; put 'put ''b3I9ZnVuY3Rpb24obGUsYmUsT2Upe3Rocm93IGhwKGxlKSYmdm9pZCAwIT09bGUucGFydGlhbENzdFJlc3VsdCYmKHRoaXMuY3N0UG9zdE5vblRlcm1pbmFsKGxlLnBhcnRpYWxDc3RSZXN1bHQsdm9pZCAwIT09YmUmJnZvaWQgMCE9PWJlLkxBQkVMP2JlLkxBQkVMOk9lKSxkZWxldGUgbGUu''@;'; put 'put ''cGFydGlhbENzdFJlc3VsdCksbGV9LHBlLnByb3RvdHlwZS5jb25zdW1lSW50ZXJuYWw9ZnVuY3Rpb24obGUsYmUsT2Upe3ZhciAkZTt0cnl7dmFyIFN0PXRoaXMuTEEoMSk7ITA9PT10aGlzLnRva2VuTWF0Y2hlcihTdCxsZSk/KHRoaXMuY29uc3VtZVRva2VuKCksJGU9U3QpOnRoaXMuY29u''@;'; put 'put ''c3VtZUludGVybmFsRXJyb3IobGUsU3QsT2UpfWNhdGNoKFF0KXskZT10aGlzLmNvbnN1bWVJbnRlcm5hbFJlY292ZXJ5KGxlLGJlLFF0KX1yZXR1cm4gdGhpcy5jc3RQb3N0VGVybWluYWwodm9pZCAwIT09T2UmJnZvaWQgMCE9PU9lLkxBQkVMP09lLkxBQkVMOmxlLm5hbWUsJGUpLCRlfSxw''@;'; put 'put ''ZS5wcm90b3R5cGUuY29uc3VtZUludGVybmFsRXJyb3I9ZnVuY3Rpb24obGUsYmUsT2Upe3ZhciAkZSxTdD10aGlzLkxBKDApO3Rocm93ICRlPXZvaWQgMCE9PU9lJiZPZS5FUlJfTVNHP09lLkVSUl9NU0c6dGhpcy5lcnJvck1lc3NhZ2VQcm92aWRlci5idWlsZE1pc21hdGNoVG9rZW5NZXNz''@;'; put 'put ''YWdlKHtleHBlY3RlZDpsZSxhY3R1YWw6YmUscHJldmlvdXM6U3QscnVsZU5hbWU6dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCl9KSx0aGlzLlNBVkVfRVJST1IobmV3IGQzKCRlLGJlLFN0KSl9LHBlLnByb3RvdHlwZS5jb25zdW1lSW50ZXJuYWxSZWNvdmVyeT1mdW5jdGlvbihsZSxiZSxP''@;'; put 'put ''ZSl7aWYoIXRoaXMucmVjb3ZlcnlFbmFibGVkfHwiTWlzbWF0Y2hlZFRva2VuRXhjZXB0aW9uIiE9PU9lLm5hbWV8fHRoaXMuaXNCYWNrVHJhY2tpbmcoKSl0aHJvdyBPZTt2YXIgJGU9dGhpcy5nZXRGb2xsb3dzRm9ySW5SdWxlUmVjb3ZlcnkobGUsYmUpO3RyeXtyZXR1cm4gdGhpcy50cnlJ''@;'; put 'put ''blJ1bGVSZWNvdmVyeShsZSwkZSl9Y2F0Y2goU3Qpe3Rocm93IFN0Lm5hbWU9PT12Zj9PZTpTdH19LHBlLnByb3RvdHlwZS5zYXZlUmVjb2dTdGF0ZT1mdW5jdGlvbigpe3ZhciBsZT10aGlzLmVycm9ycyxiZT1yZSh0aGlzLlJVTEVfU1RBQ0spO3JldHVybntlcnJvcnM6bGUsbGV4ZXJTdGF0''@;'; put 'put ''ZTp0aGlzLmV4cG9ydExleGVyU3RhdGUoKSxSVUxFX1NUQUNLOmJlLENTVF9TVEFDSzp0aGlzLkNTVF9TVEFDSyxMQVNUX0VYUExJQ0lUX1JVTEVfU1RBQ0s6dGhpcy5MQVNUX0VYUExJQ0lUX1JVTEVfU1RBQ0t9fSxwZS5wcm90b3R5cGUucmVsb2FkUmVjb2dTdGF0ZT1mdW5jdGlvbihsZSl7''@;'; put 'put ''dGhpcy5lcnJvcnM9bGUuZXJyb3JzLHRoaXMuaW1wb3J0TGV4ZXJTdGF0ZShsZS5sZXhlclN0YXRlKSx0aGlzLlJVTEVfU1RBQ0s9bGUuUlVMRV9TVEFDS30scGUucHJvdG90eXBlLnJ1bGVJbnZvY2F0aW9uU3RhdGVVcGRhdGU9ZnVuY3Rpb24obGUsYmUsT2Upe3RoaXMuUlVMRV9PQ0NVUlJF''@;'; put 'put ''TkNFX1NUQUNLLnB1c2goT2UpLHRoaXMuUlVMRV9TVEFDSy5wdXNoKGxlKSx0aGlzLmNzdEludm9jYXRpb25TdGF0ZVVwZGF0ZShiZSxsZSl9LHBlLnByb3RvdHlwZS5pc0JhY2tUcmFja2luZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5pc0JhY2tUcmFja2luZ1N0YWNrLmxlbmd0aH0s''@;'; put 'put ''cGUucHJvdG90eXBlLmdldEN1cnJSdWxlRnVsbE5hbWU9ZnVuY3Rpb24oKXt2YXIgbGU9dGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCk7cmV0dXJuIHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbFtsZV19LHBlLnByb3RvdHlwZS5zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZT1mdW5j''@;'; put 'put ''dGlvbihsZSl7cmV0dXJuIHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbFtsZV19LHBlLnByb3RvdHlwZS5pc0F0RW5kT2ZJbnB1dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLEpjKX0scGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5yZXNl''@;'; put 'put ''dExleGVyU3RhdGUoKSx0aGlzLmlzQmFja1RyYWNraW5nU3RhY2s9W10sdGhpcy5lcnJvcnM9W10sdGhpcy5SVUxFX1NUQUNLPVtdLHRoaXMuTEFTVF9FWFBMSUNJVF9SVUxFX1NUQUNLPVtdLHRoaXMuQ1NUX1NUQUNLPVtdLHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLPVtdfSxwZX0oKSxf''@;'; put 'put ''Zj1mdW5jdGlvbigpe2Z1bmN0aW9uIHBlKCl7fXJldHVybiBwZS5wcm90b3R5cGUuaW5pdEVycm9ySGFuZGxlcj1mdW5jdGlvbihsZSl7dGhpcy5fZXJyb3JzPVtdLHRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXI9X2UobGUuZXJyb3JNZXNzYWdlUHJvdmlkZXIsenMuZXJyb3JNZXNzYWdlUHJv''@;'; put 'put ''dmlkZXIpfSxwZS5wcm90b3R5cGUuU0FWRV9FUlJPUj1mdW5jdGlvbihsZSl7aWYoaHAobGUpKXJldHVybiBsZS5jb250ZXh0PXtydWxlU3RhY2s6dGhpcy5nZXRIdW1hblJlYWRhYmxlUnVsZVN0YWNrKCkscnVsZU9jY3VycmVuY2VTdGFjazpyZSh0aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFD''@;'; put 'put ''Syl9LHRoaXMuX2Vycm9ycy5wdXNoKGxlKSxsZTt0aHJvdyBFcnJvcigiVHJ5aW5nIHRvIHNhdmUgYW4gRXJyb3Igd2hpY2ggaXMgbm90IGEgUmVjb2duaXRpb25FeGNlcHRpb24iKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHBlLnByb3RvdHlwZSwiZXJyb3JzIix7Z2V0OmZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHJlKHRoaXMuX2Vycm9ycyl9LHNldDpmdW5jdGlvbihsZSl7dGhpcy5fZXJyb3JzPWxlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHBlLnByb3RvdHlwZS5yYWlzZUVhcmx5RXhpdEV4Y2VwdGlvbj1mdW5jdGlvbihsZSxiZSxPZSl7Zm9yKHZhciAkZT10aGlzLmdl''@;'; put 'put ''dEN1cnJSdWxlRnVsbE5hbWUoKSxFbj1zMChsZSx0aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpWyRlXSxiZSx0aGlzLm1heExvb2thaGVhZClbMF0sY3I9W10sVXI9MTtVcjw9dGhpcy5tYXhMb29rYWhlYWQ7VXIrKyljci5wdXNoKHRoaXMuTEEoVXIpKTt2YXIgcGk9dGhpcy5lcnJvck1lc3Nh''@;'; put 'put ''Z2VQcm92aWRlci5idWlsZEVhcmx5RXhpdE1lc3NhZ2Uoe2V4cGVjdGVkSXRlcmF0aW9uUGF0aHM6RW4sYWN0dWFsOmNyLHByZXZpb3VzOnRoaXMuTEEoMCksY3VzdG9tVXNlckRlc2NyaXB0aW9uOk9lLHJ1bGVOYW1lOiRlfSk7dGhyb3cgdGhpcy5TQVZFX0VSUk9SKG5ldyBjOChwaSx0aGlz''@;'; put 'put ''LkxBKDEpLHRoaXMuTEEoMCkpKX0scGUucHJvdG90eXBlLnJhaXNlTm9BbHRFeGNlcHRpb249ZnVuY3Rpb24obGUsYmUpe2Zvcih2YXIgT2U9dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCksU3Q9YmQobGUsdGhpcy5nZXRHQXN0UHJvZHVjdGlvbnMoKVtPZV0sdGhpcy5tYXhMb29rYWhlYWQp''@;'; put 'put ''LFF0PVtdLEVuPTE7RW48PXRoaXMubWF4TG9va2FoZWFkO0VuKyspUXQucHVzaCh0aGlzLkxBKEVuKSk7dmFyIGNyPXRoaXMuTEEoMCksVXI9dGhpcy5lcnJvck1lc3NhZ2VQcm92aWRlci5idWlsZE5vVmlhYmxlQWx0TWVzc2FnZSh7ZXhwZWN0ZWRQYXRoc1BlckFsdDpTdCxhY3R1YWw6UXQs''@;'; put 'put ''cHJldmlvdXM6Y3IsY3VzdG9tVXNlckRlc2NyaXB0aW9uOmJlLHJ1bGVOYW1lOnRoaXMuZ2V0Q3VyclJ1bGVGdWxsTmFtZSgpfSk7dGhyb3cgdGhpcy5TQVZFX0VSUk9SKG5ldyBoMyhVcix0aGlzLkxBKDEpLGNyKSl9LHBlfSgpLEJtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcGUoKXt9cmV0dXJu''@;'; put 'put ''IHBlLnByb3RvdHlwZS5pbml0Q29udGVudEFzc2lzdD1mdW5jdGlvbigpe30scGUucHJvdG90eXBlLmNvbXB1dGVDb250ZW50QXNzaXN0PWZ1bmN0aW9uKGxlLGJlKXt2YXIgT2U9dGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZVtsZV07aWYoVShPZSkpdGhyb3cgRXJyb3IoIlJ1bGUgLT4iK2xl''@;'; put 'put ''KyI8LSBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGdyYW1tYXIuIik7cmV0dXJuIFJvKFtPZV0sYmUsdGhpcy50b2tlbk1hdGNoZXIsdGhpcy5tYXhMb29rYWhlYWQpfSxwZS5wcm90b3R5cGUuZ2V0TmV4dFBvc3NpYmxlVG9rZW5UeXBlcz1mdW5jdGlvbihsZSl7dmFyIGJlPVMobGUucnVsZVN0''@;'; put 'put ''YWNrKSxPZT10aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpO3JldHVybiBuZXcgUW4oT2VbYmVdLGxlKS5zdGFydFdhbGtpbmcoKX0scGV9KCksam09e2Rlc2NyaXB0aW9uOiJUaGlzIE9iamVjdCBpbmRpY2F0ZXMgdGhlIFBhcnNlciBpcyBkdXJpbmcgUmVjb3JkaW5nIFBoYXNlIn07T2JqZWN0''@;'; put 'put ''LmZyZWV6ZShqbSk7dmFyIG81PU1hdGgucG93KDIsOCktMSxwMz1uaCh7bmFtZToiUkVDT1JESU5HX1BIQVNFX1RPS0VOIixwYXR0ZXJuOkp1Lk5BfSk7X3MoW3AzXSk7dmFyIG8xPWdmKHAzLCJUaGlzIElUb2tlbiBpbmRpY2F0ZXMgdGhlIFBhcnNlciBpcyBpbiBSZWNvcmRpbmcgUGhhc2Vc''@;'; put 'put ''blx0U2VlOiBodHRwczovL3NhcC5naXRodWIuaW8vY2hldnJvdGFpbi9kb2NzL2d1aWRlL2ludGVybmFscy5odG1sI2dyYW1tYXItcmVjb3JkaW5nIGZvciBkZXRhaWxzIiwtMSwtMSwtMSwtMSwtMSwtMSk7T2JqZWN0LmZyZWV6ZShvMSk7dmFyIGczPXtuYW1lOiJUaGlzIENTVE5vZGUgaW5k''@;'; put 'put ''aWNhdGVzIHRoZSBQYXJzZXIgaXMgaW4gUmVjb3JkaW5nIFBoYXNlXG5cdFNlZTogaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL2NoZXZyb3RhaW4vZG9jcy9ndWlkZS9pbnRlcm5hbHMuaHRtbCNncmFtbWFyLXJlY29yZGluZyBmb3IgZGV0YWlscyIsY2hpbGRyZW46e319LG0zPWZ1bmN0aW9uKCl7''@;'; put 'put ''ZnVuY3Rpb24gcGUoKXt9cmV0dXJuIHBlLnByb3RvdHlwZS5pbml0R2FzdFJlY29yZGVyPWZ1bmN0aW9uKGxlKXt0aGlzLnJlY29yZGluZ1Byb2RTdGFjaz1bXSx0aGlzLlJFQ09SRElOR19QSEFTRT0hMX0scGUucHJvdG90eXBlLmVuYWJsZVJlY29yZGluZz1mdW5jdGlvbigpe3ZhciBsZT10''@;'; put 'put ''aGlzO3RoaXMuUkVDT1JESU5HX1BIQVNFPSEwLHRoaXMuVFJBQ0VfSU5JVCgiRW5hYmxlIFJlY29yZGluZyIsZnVuY3Rpb24oKXtmb3IodmFyIGJlPWZ1bmN0aW9uKCRlKXt2YXIgU3Q9JGU+MD8kZToiIjtsZVsiQ09OU1VNRSIrU3RdPWZ1bmN0aW9uKFF0LEVuKXtyZXR1cm4gdGhpcy5jb25z''@;'; put 'put ''dW1lSW50ZXJuYWxSZWNvcmQoUXQsJGUsRW4pfSxsZVsiU1VCUlVMRSIrU3RdPWZ1bmN0aW9uKFF0LEVuKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWxSZWNvcmQoUXQsJGUsRW4pfSxsZVsiT1BUSU9OIitTdF09ZnVuY3Rpb24oUXQpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsUmVj''@;'; put 'put ''b3JkKFF0LCRlKX0sbGVbIk9SIitTdF09ZnVuY3Rpb24oUXQpe3JldHVybiB0aGlzLm9ySW50ZXJuYWxSZWNvcmQoUXQsJGUpfSxsZVsiTUFOWSIrU3RdPWZ1bmN0aW9uKFF0KXt0aGlzLm1hbnlJbnRlcm5hbFJlY29yZCgkZSxRdCl9LGxlWyJNQU5ZX1NFUCIrU3RdPWZ1bmN0aW9uKFF0KXt0''@;'; put 'put ''aGlzLm1hbnlTZXBGaXJzdEludGVybmFsUmVjb3JkKCRlLFF0KX0sbGVbIkFUX0xFQVNUX09ORSIrU3RdPWZ1bmN0aW9uKFF0KXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbFJlY29yZCgkZSxRdCl9LGxlWyJBVF9MRUFTVF9PTkVfU0VQIitTdF09ZnVuY3Rpb24oUXQpe3RoaXMuYXRMZWFzdE9u''@;'; put 'put ''ZVNlcEZpcnN0SW50ZXJuYWxSZWNvcmQoJGUsUXQpfX0sT2U9MDtPZTwxMDtPZSsrKWJlKE9lKTtsZS5jb25zdW1lPWZ1bmN0aW9uKCRlLFN0LFF0KXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWxSZWNvcmQoU3QsJGUsUXQpfSxsZS5zdWJydWxlPWZ1bmN0aW9uKCRlLFN0LFF0KXtyZXR1''@;'; put 'put ''cm4gdGhpcy5zdWJydWxlSW50ZXJuYWxSZWNvcmQoU3QsJGUsUXQpfSxsZS5vcHRpb249ZnVuY3Rpb24oJGUsU3Qpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsUmVjb3JkKFN0LCRlKX0sbGUub3I9ZnVuY3Rpb24oJGUsU3Qpe3JldHVybiB0aGlzLm9ySW50ZXJuYWxSZWNvcmQoU3QsJGUp''@;'; put 'put ''fSxsZS5tYW55PWZ1bmN0aW9uKCRlLFN0KXt0aGlzLm1hbnlJbnRlcm5hbFJlY29yZCgkZSxTdCl9LGxlLmF0TGVhc3RPbmU9ZnVuY3Rpb24oJGUsU3Qpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsUmVjb3JkKCRlLFN0KX0sbGUuQUNUSU9OPWxlLkFDVElPTl9SRUNPUkQsbGUuQkFDS1RSQUNL''@;'; put 'put ''PWxlLkJBQ0tUUkFDS19SRUNPUkQsbGUuTEE9bGUuTEFfUkVDT1JEfSl9LHBlLnByb3RvdHlwZS5kaXNhYmxlUmVjb3JkaW5nPWZ1bmN0aW9uKCl7dmFyIGxlPXRoaXM7dGhpcy5SRUNPUkRJTkdfUEhBU0U9ITEsdGhpcy5UUkFDRV9JTklUKCJEZWxldGluZyBSZWNvcmRpbmcgbWV0aG9kcyIs''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIGJlPTA7YmU8MTA7YmUrKyl7dmFyIE9lPWJlPjA/YmU6IiI7ZGVsZXRlIGxlWyJDT05TVU1FIitPZV0sZGVsZXRlIGxlWyJTVUJSVUxFIitPZV0sZGVsZXRlIGxlWyJPUFRJT04iK09lXSxkZWxldGUgbGVbIk9SIitPZV0sZGVsZXRlIGxlWyJNQU5ZIitPZV0s''@;'; put 'put ''ZGVsZXRlIGxlWyJNQU5ZX1NFUCIrT2VdLGRlbGV0ZSBsZVsiQVRfTEVBU1RfT05FIitPZV0sZGVsZXRlIGxlWyJBVF9MRUFTVF9PTkVfU0VQIitPZV19ZGVsZXRlIGxlLmNvbnN1bWUsZGVsZXRlIGxlLnN1YnJ1bGUsZGVsZXRlIGxlLm9wdGlvbixkZWxldGUgbGUub3IsZGVsZXRlIGxlLm1h''@;'; put 'put ''bnksZGVsZXRlIGxlLmF0TGVhc3RPbmUsZGVsZXRlIGxlLkFDVElPTixkZWxldGUgbGUuQkFDS1RSQUNLLGRlbGV0ZSBsZS5MQX0pfSxwZS5wcm90b3R5cGUuQUNUSU9OX1JFQ09SRD1mdW5jdGlvbihsZSl7fSxwZS5wcm90b3R5cGUuQkFDS1RSQUNLX1JFQ09SRD1mdW5jdGlvbihsZSxiZSl7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSxwZS5wcm90b3R5cGUuTEFfUkVDT1JEPWZ1bmN0aW9uKGxlKXtyZXR1cm4gRmx9LHBlLnByb3RvdHlwZS50b3BMZXZlbFJ1bGVSZWNvcmQ9ZnVuY3Rpb24obGUsYmUpe3RyeXt2YXIgT2U9bmV3IE4xKHtkZWZpbml0aW9uOltdLG5hbWU6bGV9''@;'; put 'put ''KTtyZXR1cm4gT2UubmFtZT1sZSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wdXNoKE9lKSxiZS5jYWxsKHRoaXMpLHRoaXMucmVjb3JkaW5nUHJvZFN0YWNrLnBvcCgpLE9lfWNhdGNoKCRlKXtpZighMCE9PSRlLktOT1dOX1JFQ09SREVSX0VSUk9SKXRyeXskZS5tZXNzYWdlPSRlLm1lc3Nh''@;'; put 'put ''Z2UrJ1xuXHQgVGhpcyBlcnJvciB3YXMgdGhyb3duIGR1cmluZyB0aGUgImdyYW1tYXIgcmVjb3JkaW5nIHBoYXNlIiBGb3IgbW9yZSBpbmZvIHNlZTpcblx0aHR0cHM6Ly9zYXAuZ2l0aHViLmlvL2NoZXZyb3RhaW4vZG9jcy9ndWlkZS9pbnRlcm5hbHMuaHRtbCNncmFtbWFyLXJlY29yZGlu''@;'; put 'put ''Zyd9Y2F0Y2h7dGhyb3cgJGV9dGhyb3cgJGV9fSxwZS5wcm90b3R5cGUub3B0aW9uSW50ZXJuYWxSZWNvcmQ9ZnVuY3Rpb24obGUsYmUpe3JldHVybiBtYS5jYWxsKHRoaXMsaGMsbGUsYmUpfSxwZS5wcm90b3R5cGUuYXRMZWFzdE9uZUludGVybmFsUmVjb3JkPWZ1bmN0aW9uKGxlLGJlKXtt''@;'; put 'put ''YS5jYWxsKHRoaXMsZWQsYmUsbGUpfSxwZS5wcm90b3R5cGUuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWxSZWNvcmQ9ZnVuY3Rpb24obGUsYmUpe21hLmNhbGwodGhpcyxKbixiZSxsZSwhMCl9LHBlLnByb3RvdHlwZS5tYW55SW50ZXJuYWxSZWNvcmQ9ZnVuY3Rpb24obGUsYmUpe21hLmNh''@;'; put 'put ''bGwodGhpcyxjbCxiZSxsZSl9LHBlLnByb3RvdHlwZS5tYW55U2VwRmlyc3RJbnRlcm5hbFJlY29yZD1mdW5jdGlvbihsZSxiZSl7bWEuY2FsbCh0aGlzLG1pLGJlLGxlLCEwKX0scGUucHJvdG90eXBlLm9ySW50ZXJuYWxSZWNvcmQ9ZnVuY3Rpb24obGUsYmUpe3JldHVybiB1OC5jYWxsKHRo''@;'; put 'put ''aXMsbGUsYmUpfSxwZS5wcm90b3R5cGUuc3VicnVsZUludGVybmFsUmVjb3JkPWZ1bmN0aW9uKGxlLGJlLE9lKXtpZihhMShiZSksIWxlfHwhMT09PVcobGUsInJ1bGVOYW1lIikpe3ZhciAkZT1uZXcgRXJyb3IoIjxTVUJSVUxFIitiZihiZSkrIj4gYXJndW1lbnQgaXMgaW52YWxpZCBleHBl''@;'; put 'put ''Y3RpbmcgYSBQYXJzZXIgbWV0aG9kIHJlZmVyZW5jZSBidXQgZ290OiA8IitKU09OLnN0cmluZ2lmeShsZSkrIj5cbiBpbnNpZGUgdG9wIGxldmVsIHJ1bGU6IDwiK3RoaXMucmVjb3JkaW5nUHJvZFN0YWNrWzBdLm5hbWUrIj4iKTt0aHJvdyAkZS5LTk9XTl9SRUNPUkRFUl9FUlJPUj0hMCwk''@;'; put 'put ''ZX12YXIgU3Q9RmUodGhpcy5yZWNvcmRpbmdQcm9kU3RhY2spLEVuPW5ldyBCdSh7aWR4OmJlLG5vblRlcm1pbmFsTmFtZTpsZS5ydWxlTmFtZSxyZWZlcmVuY2VkUnVsZTp2b2lkIDB9KTtyZXR1cm4gU3QuZGVmaW5pdGlvbi5wdXNoKEVuKSx0aGlzLm91dHB1dENzdD9nMzpqbX0scGUucHJv''@;'; put 'put ''dG90eXBlLmNvbnN1bWVJbnRlcm5hbFJlY29yZD1mdW5jdGlvbihsZSxiZSxPZSl7aWYoYTEoYmUpLCFkYyhsZSkpe3ZhciAkZT1uZXcgRXJyb3IoIjxDT05TVU1FIitiZihiZSkrIj4gYXJndW1lbnQgaXMgaW52YWxpZCBleHBlY3RpbmcgYSBUb2tlblR5cGUgcmVmZXJlbmNlIGJ1dCBnb3Q6''@;'; put 'put ''IDwiK0pTT04uc3RyaW5naWZ5KGxlKSsiPlxuIGluc2lkZSB0b3AgbGV2ZWwgcnVsZTogPCIrdGhpcy5yZWNvcmRpbmdQcm9kU3RhY2tbMF0ubmFtZSsiPiIpO3Rocm93ICRlLktOT1dOX1JFQ09SREVSX0VSUk9SPSEwLCRlfXZhciBTdD1GZSh0aGlzLnJlY29yZGluZ1Byb2RTdGFjayksUXQ9''@;'; put 'put ''bmV3IFNsKHtpZHg6YmUsdGVybWluYWxUeXBlOmxlfSk7cmV0dXJuIFN0LmRlZmluaXRpb24ucHVzaChRdCksbzF9LHBlfSgpO2Z1bmN0aW9uIG1hKHBlLGxlLGJlLE9lKXt2b2lkIDA9PT1PZSYmKE9lPSExKSxhMShiZSk7dmFyICRlPUZlKHRoaXMucmVjb3JkaW5nUHJvZFN0YWNrKSxTdD1I''@;'; put 'put ''KGxlKT9sZTpsZS5ERUYsUXQ9bmV3IHBlKHtkZWZpbml0aW9uOltdLGlkeDpiZX0pO3JldHVybiBXKGxlLCJOQU1FIikmJihRdC5uYW1lPWxlLk5BTUUpLE9lJiYoUXQuc2VwYXJhdG9yPWxlLlNFUCksVyhsZSwiTUFYX0xPT0tBSEVBRCIpJiYoUXQubWF4TG9va2FoZWFkPWxlLk1BWF9MT09L''@;'; put 'put ''QUhFQUQpLHRoaXMucmVjb3JkaW5nUHJvZFN0YWNrLnB1c2goUXQpLFN0LmNhbGwodGhpcyksJGUuZGVmaW5pdGlvbi5wdXNoKFF0KSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wb3AoKSxqbX1mdW5jdGlvbiB1OChwZSxsZSl7dmFyIGJlPXRoaXM7YTEobGUpO3ZhciBPZT1GZSh0aGlzLnJl''@;'; put 'put ''Y29yZGluZ1Byb2RTdGFjayksJGU9ITE9PT1iKHBlKSxTdD0hMT09PSRlP3BlOnBlLkRFRixRdD1uZXcgZXUoe2RlZmluaXRpb246W10saWR4OmxlLGlnbm9yZUFtYmlndWl0aWVzOiRlJiYhMD09PXBlLklHTk9SRV9BTUJJR1VJVElFU30pO1cocGUsIk5BTUUiKSYmKFF0Lm5hbWU9cGUuTkFN''@;'; put 'put ''RSksVyhwZSwiTUFYX0xPT0tBSEVBRCIpJiYoUXQubWF4TG9va2FoZWFkPXBlLk1BWF9MT09LQUhFQUQpO3ZhciBFbj1HKFN0LGZ1bmN0aW9uKGNyKXtyZXR1cm4gSChjci5HQVRFKX0pO3JldHVybiBRdC5oYXNQcmVkaWNhdGVzPUVuLE9lLmRlZmluaXRpb24ucHVzaChRdCksUihTdCxmdW5j''@;'; put 'put ''dGlvbihjcil7dmFyIFVyPW5ldyBSdSh7ZGVmaW5pdGlvbjpbXX0pO1F0LmRlZmluaXRpb24ucHVzaChVciksVyhjciwiTkFNRSIpJiYoVXIubmFtZT1jci5OQU1FKSxXKGNyLCJJR05PUkVfQU1CSUdVSVRJRVMiKT9Vci5pZ25vcmVBbWJpZ3VpdGllcz1jci5JR05PUkVfQU1CSUdVSVRJRVM6''@;'; put 'put ''VyhjciwiR0FURSIpJiYoVXIuaWdub3JlQW1iaWd1aXRpZXM9ITApLGJlLnJlY29yZGluZ1Byb2RTdGFjay5wdXNoKFVyKSxjci5BTFQuY2FsbChiZSksYmUucmVjb3JkaW5nUHJvZFN0YWNrLnBvcCgpfSksam19ZnVuY3Rpb24gYmYocGUpe3JldHVybiAwPT09cGU/IiI6IiIrcGV9ZnVuY3Rp''@;'; put 'put ''b24gYTEocGUpe2lmKHBlPDB8fHBlPm81KXt2YXIgbGU9bmV3IEVycm9yKCJJbnZhbGlkIERTTCBNZXRob2QgaWR4IHZhbHVlOiA8IitwZSsiPlxuXHRJZHggdmFsdWUgbXVzdCBiZSBhIG5vbmUgbmVnYXRpdmUgdmFsdWUgc21hbGxlciB0aGFuICIrKG81KzEpKTt0aHJvdyBsZS5LTk9XTl9S''@;'; put 'put ''RUNPUkRFUl9FUlJPUj0hMCxsZX19dmFyIHhnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcGUoKXt9cmV0dXJuIHBlLnByb3RvdHlwZS5pbml0UGVyZm9ybWFuY2VUcmFjZXI9ZnVuY3Rpb24obGUpe2lmKFcobGUsInRyYWNlSW5pdFBlcmYiKSl7dmFyIGJlPWxlLnRyYWNlSW5pdFBlcmYsT2U9Im51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBiZTt0aGlzLnRyYWNlSW5pdE1heElkZW50PU9lP2JlOjEvMCx0aGlzLnRyYWNlSW5pdFBlcmY9T2U/YmU+MDpiZX1lbHNlIHRoaXMudHJhY2VJbml0TWF4SWRlbnQ9MCx0aGlzLnRyYWNlSW5pdFBlcmY9enMudHJhY2VJbml0UGVyZjt0aGlzLnRyYWNlSW5pdEluZGVu''@;'; put 'put ''dD0tMX0scGUucHJvdG90eXBlLlRSQUNFX0lOSVQ9ZnVuY3Rpb24obGUsYmUpe2lmKCEwPT09dGhpcy50cmFjZUluaXRQZXJmKXt0aGlzLnRyYWNlSW5pdEluZGVudCsrO3ZhciBPZT1uZXcgQXJyYXkodGhpcy50cmFjZUluaXRJbmRlbnQrMSkuam9pbigiXHQiKTt0aGlzLnRyYWNlSW5pdElu''@;'; put 'put ''ZGVudDx0aGlzLnRyYWNlSW5pdE1heElkZW50JiZjb25zb2xlLmxvZyhPZSsiLS1ceDNlIDwiK2xlKyI+Iik7dmFyICRlPWdlKGJlKSxTdD0kZS50aW1lLFF0PSRlLnZhbHVlLEVuPVN0PjEwP2NvbnNvbGUud2Fybjpjb25zb2xlLmxvZztyZXR1cm4gdGhpcy50cmFjZUluaXRJbmRlbnQ8dGhp''@;'; put 'put ''cy50cmFjZUluaXRNYXhJZGVudCYmRW4oT2UrIjwtLSA8IitsZSsiPiB0aW1lOiAiK1N0KyJtcyIpLHRoaXMudHJhY2VJbml0SW5kZW50LS0sUXR9cmV0dXJuIGJlKCl9LHBlfSgpLEYwPWZ1bmN0aW9uKCl7dmFyIHBlPWZ1bmN0aW9uKGxlLGJlKXtyZXR1cm4ocGU9T2JqZWN0LnNldFByb3Rv''@;'; put 'put ''dHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKE9lLCRlKXtPZS5fX3Byb3RvX189JGV9fHxmdW5jdGlvbihPZSwkZSl7Zm9yKHZhciBTdCBpbiAkZSkkZS5oYXNPd25Qcm9wZXJ0eShTdCkmJihPZVtTdF09JGVbU3RdKX0pKGxlLGJlKX07cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKGxlLGJlKXtmdW5jdGlvbiBPZSgpe3RoaXMuY29uc3RydWN0b3I9bGV9cGUobGUsYmUpLGxlLnByb3RvdHlwZT1udWxsPT09YmU/T2JqZWN0LmNyZWF0ZShiZSk6KE9lLnByb3RvdHlwZT1iZS5wcm90b3R5cGUsbmV3IE9lKX19KCksRmw9Z2YoSmMsIiIsTmFOLE5hTixOYU4sTmFO''@;'; put 'put ''LE5hTixOYU4pO09iamVjdC5mcmVlemUoRmwpO3ZhciB6cz1PYmplY3QuZnJlZXplKHtyZWNvdmVyeUVuYWJsZWQ6ITEsbWF4TG9va2FoZWFkOjQsaWdub3JlZElzc3Vlczp7fSxkeW5hbWljVG9rZW5zRW5hYmxlZDohMSxvdXRwdXRDc3Q6ITAsZXJyb3JNZXNzYWdlUHJvdmlkZXI6YzAsbm9k''@;'; put 'put ''ZUxvY2F0aW9uVHJhY2tpbmc6Im5vbmUiLHRyYWNlSW5pdFBlcmY6ITEsc2tpcFZhbGlkYXRpb25zOiExfSksWXU9T2JqZWN0LmZyZWV6ZSh7cmVjb3ZlcnlWYWx1ZUZ1bmM6ZnVuY3Rpb24oKXt9LHJlc3luY0VuYWJsZWQ6ITB9KSxyZD1mdW5jdGlvbihwZSl7cmV0dXJuIHBlW3BlLklOVkFM''@;'; put 'put ''SURfUlVMRV9OQU1FPTBdPSJJTlZBTElEX1JVTEVfTkFNRSIscGVbcGUuRFVQTElDQVRFX1JVTEVfTkFNRT0xXT0iRFVQTElDQVRFX1JVTEVfTkFNRSIscGVbcGUuSU5WQUxJRF9SVUxFX09WRVJSSURFPTJdPSJJTlZBTElEX1JVTEVfT1ZFUlJJREUiLHBlW3BlLkRVUExJQ0FURV9QUk9EVUNU''@;'; put 'put ''SU9OUz0zXT0iRFVQTElDQVRFX1BST0RVQ1RJT05TIixwZVtwZS5VTlJFU09MVkVEX1NVQlJVTEVfUkVGPTRdPSJVTlJFU09MVkVEX1NVQlJVTEVfUkVGIixwZVtwZS5MRUZUX1JFQ1VSU0lPTj01XT0iTEVGVF9SRUNVUlNJT04iLHBlW3BlLk5PTkVfTEFTVF9FTVBUWV9BTFQ9Nl09Ik5PTkVf''@;'; put 'put ''TEFTVF9FTVBUWV9BTFQiLHBlW3BlLkFNQklHVU9VU19BTFRTPTddPSJBTUJJR1VPVVNfQUxUUyIscGVbcGUuQ09ORkxJQ1RfVE9LRU5TX1JVTEVTX05BTUVTUEFDRT04XT0iQ09ORkxJQ1RfVE9LRU5TX1JVTEVTX05BTUVTUEFDRSIscGVbcGUuSU5WQUxJRF9UT0tFTl9OQU1FPTldPSJJTlZB''@;'; put 'put ''TElEX1RPS0VOX05BTUUiLHBlW3BlLklOVkFMSURfTkVTVEVEX1JVTEVfTkFNRT0xMF09IklOVkFMSURfTkVTVEVEX1JVTEVfTkFNRSIscGVbcGUuRFVQTElDQVRFX05FU1RFRF9OQU1FPTExXT0iRFVQTElDQVRFX05FU1RFRF9OQU1FIixwZVtwZS5OT19OT05fRU1QVFlfTE9PS0FIRUFEPTEy''@;'; put 'put ''XT0iTk9fTk9OX0VNUFRZX0xPT0tBSEVBRCIscGVbcGUuQU1CSUdVT1VTX1BSRUZJWF9BTFRTPTEzXT0iQU1CSUdVT1VTX1BSRUZJWF9BTFRTIixwZVtwZS5UT09fTUFOWV9BTFRTPTE0XT0iVE9PX01BTllfQUxUUyIscGV9KHJkfHx7fSk7ZnVuY3Rpb24gd2YocGUpe3JldHVybiB2b2lkIDA9''@;'; put 'put ''PT1wZSYmKHBlPXZvaWQgMCksZnVuY3Rpb24oKXtyZXR1cm4gcGV9fXZhciBDZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHBlKGxlLGJlKXt2b2lkIDA9PT1iZSYmKGJlPXpzKSx0aGlzLmlnbm9yZWRJc3N1ZXM9enMuaWdub3JlZElzc3Vlcyx0aGlzLmRlZmluaXRpb25FcnJvcnM9W10sdGhpcy5z''@;'; put 'put ''ZWxmQW5hbHlzaXNEb25lPSExO3ZhciBPZT10aGlzO09lLmluaXRFcnJvckhhbmRsZXIoYmUpLE9lLmluaXRMZXhlckFkYXB0ZXIoKSxPZS5pbml0TG9va3NBaGVhZChiZSksT2UuaW5pdFJlY29nbml6ZXJFbmdpbmUobGUsYmUpLE9lLmluaXRSZWNvdmVyYWJsZShiZSksT2UuaW5pdFRyZWVC''@;'; put 'put ''dWlsZGVyKGJlKSxPZS5pbml0Q29udGVudEFzc2lzdCgpLE9lLmluaXRHYXN0UmVjb3JkZXIoYmUpLE9lLmluaXRQZXJmb3JtYW5jZVRyYWNlcihiZSksVyhiZSwiaWdub3JlZElzc3VlcyIpJiZiZS5pZ25vcmVkSXNzdWVzIT09enMuaWdub3JlZElzc3VlcyYmeGUoIlRoZSA8aWdub3JlZElz''@;'; put 'put ''c3Vlcz4gSVBhcnNlckNvbmZpZyBwcm9wZXJ0eSBpcyBzb2Z0LWRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuXG5cdFBsZWFzZSB1c2UgdGhlIDxJR05PUkVfQU1CSUdVSVRJRVM+IGZsYWcgb24gdGhlIHJlbGV2YW50IERTTCBtZXRob2QgaW5zdGVh''@;'; put 'put ''ZC4iKSx0aGlzLmlnbm9yZWRJc3N1ZXM9VyhiZSwiaWdub3JlZElzc3VlcyIpP2JlLmlnbm9yZWRJc3N1ZXM6enMuaWdub3JlZElzc3Vlcyx0aGlzLnNraXBWYWxpZGF0aW9ucz1XKGJlLCJza2lwVmFsaWRhdGlvbnMiKT9iZS5za2lwVmFsaWRhdGlvbnM6enMuc2tpcFZhbGlkYXRpb25zfXJl''@;'; put 'put ''dHVybiBwZS5wZXJmb3JtU2VsZkFuYWx5c2lzPWZ1bmN0aW9uKGxlKXtsZS5wZXJmb3JtU2VsZkFuYWx5c2lzKCl9LHBlLnByb3RvdHlwZS5wZXJmb3JtU2VsZkFuYWx5c2lzPWZ1bmN0aW9uKCl7dmFyIGxlPXRoaXM7dGhpcy5UUkFDRV9JTklUKCJwZXJmb3JtU2VsZkFuYWx5c2lzIixmdW5j''@;'; put 'put ''dGlvbigpe3ZhciBiZTtsZS5zZWxmQW5hbHlzaXNEb25lPSEwO3ZhciBPZT1sZS5jbGFzc05hbWU7bGUuVFJBQ0VfSU5JVCgidG9GYXN0UHJvcHMiLGZ1bmN0aW9uKCl7RGUobGUpfSksbGUuVFJBQ0VfSU5JVCgiR3JhbW1hciBSZWNvcmRpbmciLGZ1bmN0aW9uKCl7dHJ5e2xlLmVuYWJsZVJl''@;'; put 'put ''Y29yZGluZygpLFIobGUuZGVmaW5lZFJ1bGVzTmFtZXMsZnVuY3Rpb24oU3Qpe3ZhciBFbj1sZVtTdF0ub3JpZ2luYWxHcmFtbWFyQWN0aW9uLGNyPXZvaWQgMDtsZS5UUkFDRV9JTklUKFN0KyIgUnVsZSIsZnVuY3Rpb24oKXtjcj1sZS50b3BMZXZlbFJ1bGVSZWNvcmQoU3QsRW4pfSksbGUu''@;'; put 'put ''Z2FzdFByb2R1Y3Rpb25zQ2FjaGVbU3RdPWNyfSl9ZmluYWxseXtsZS5kaXNhYmxlUmVjb3JkaW5nKCl9fSk7dmFyICRlPVtdO2lmKGxlLlRSQUNFX0lOSVQoIkdyYW1tYXIgUmVzb2x2aW5nIixmdW5jdGlvbigpeyRlPUhtKHtydWxlczpBKGxlLmdhc3RQcm9kdWN0aW9uc0NhY2hlKX0pLGxl''@;'; put 'put ''LmRlZmluaXRpb25FcnJvcnMucHVzaC5hcHBseShsZS5kZWZpbml0aW9uRXJyb3JzLCRlKX0pLGxlLlRSQUNFX0lOSVQoIkdyYW1tYXIgVmFsaWRhdGlvbnMiLGZ1bmN0aW9uKCl7aWYoYygkZSkmJiExPT09bGUuc2tpcFZhbGlkYXRpb25zKXt2YXIgU3Q9d2Qoe3J1bGVzOkEobGUuZ2FzdFBy''@;'; put 'put ''b2R1Y3Rpb25zQ2FjaGUpLG1heExvb2thaGVhZDpsZS5tYXhMb29rYWhlYWQsdG9rZW5UeXBlczpBKGxlLnRva2Vuc01hcCksaWdub3JlZElzc3VlczpsZS5pZ25vcmVkSXNzdWVzLGVyck1zZ1Byb3ZpZGVyOmkxLGdyYW1tYXJOYW1lOk9lfSk7bGUuZGVmaW5pdGlvbkVycm9ycy5wdXNoLmFw''@;'; put 'put ''cGx5KGxlLmRlZmluaXRpb25FcnJvcnMsU3QpfX0pLGMobGUuZGVmaW5pdGlvbkVycm9ycykmJihsZS5yZWNvdmVyeUVuYWJsZWQmJmxlLlRSQUNFX0lOSVQoImNvbXB1dGVBbGxQcm9kc0ZvbGxvd3MiLGZ1bmN0aW9uKCl7dmFyIFN0PWZ1bmN0aW9uIElpKHBlKXt2YXIgbGU9e307cmV0dXJu''@;'; put 'put ''IFIocGUsZnVuY3Rpb24oYmUpe3ZhciBPZT1uZXcgTWMoYmUpLnN0YXJ0V2Fsa2luZygpO3VlKGxlLE9lKX0pLGxlfShBKGxlLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSk7bGUucmVzeW5jRm9sbG93cz1TdH0pLGxlLlRSQUNFX0lOSVQoIkNvbXB1dGVMb29rYWhlYWRGdW5jdGlvbnMiLGZ1bmN0''@;'; put 'put ''aW9uKCl7bGUucHJlQ29tcHV0ZUxvb2thaGVhZEZ1bmN0aW9ucyhBKGxlLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSl9KSksbGUuVFJBQ0VfSU5JVCgiZXhwYW5kQWxsTmVzdGVkUnVsZU5hbWVzIixmdW5jdGlvbigpe3ZhciBTdD1mdW5jdGlvbiB6dChwZSxsZSl7dmFyIGJlPXthbGxSdWxlTmFt''@;'; put 'put ''ZXM6W119O3JldHVybiBSKHBlLGZ1bmN0aW9uKE9lKXt2YXIgJGU9bGVbT2UubmFtZV07YmUuYWxsUnVsZU5hbWVzLnB1c2goT2UubmFtZSk7dmFyIFN0PW5ldyBqdCgkZSk7T2UuYWNjZXB0KFN0KSxSKFN0LnJlc3VsdCxmdW5jdGlvbihRdCl7YmUuYWxsUnVsZU5hbWVzLnB1c2goT2UubmFt''@;'; put 'put ''ZStRdC5uYW1lKX0pfSksYmV9KEEobGUuZ2FzdFByb2R1Y3Rpb25zQ2FjaGUpLGxlLmZ1bGxSdWxlTmFtZVRvU2hvcnQpO2xlLmFsbFJ1bGVOYW1lcz1TdC5hbGxSdWxlTmFtZXN9KSwhcGUuREVGRVJfREVGSU5JVElPTl9FUlJPUlNfSEFORExJTkcmJiFjKGxlLmRlZmluaXRpb25FcnJvcnMp''@;'; put 'put ''KXRocm93IGJlPUMobGUuZGVmaW5pdGlvbkVycm9ycyxmdW5jdGlvbihTdCl7cmV0dXJuIFN0Lm1lc3NhZ2V9KSxuZXcgRXJyb3IoIlBhcnNlciBEZWZpbml0aW9uIEVycm9ycyBkZXRlY3RlZDpcbiAiK2JlLmpvaW4oIlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIikpfSl9''@;'; put 'put ''LHBlLkRFRkVSX0RFRklOSVRJT05fRVJST1JTX0hBTkRMSU5HPSExLHBlfSgpOyFmdW5jdGlvbiBBZShwZSxsZSl7bGUuZm9yRWFjaChmdW5jdGlvbihiZSl7dmFyIE9lPWJlLnByb3RvdHlwZTtPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPZSkuZm9yRWFjaChmdW5jdGlvbigkZSl7aWYo''@;'; put 'put ''ImNvbnN0cnVjdG9yIiE9PSRlKXt2YXIgU3Q9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPZSwkZSk7U3QmJihTdC5nZXR8fFN0LnNldCk/T2JqZWN0LmRlZmluZVByb3BlcnR5KHBlLnByb3RvdHlwZSwkZSxTdCk6cGUucHJvdG90eXBlWyRlXT1iZS5wcm90b3R5cGVbJGVdfX0p''@;'; put 'put ''fSl9KENmLFtFZyxydSxUZyxmYyxncCxmMyxfZixCbSxtMyx4Z10pO3ZhciBzMT1mdW5jdGlvbihwZSl7ZnVuY3Rpb24gbGUoYmUsT2Upe3ZvaWQgMD09PU9lJiYoT2U9enMpO3ZhciBTdD1tZShPZSk7cmV0dXJuIFN0Lm91dHB1dENzdD0hMCxwZS5jYWxsKHRoaXMsYmUsU3QpfHx0aGlzfXJl''@;'; put 'put ''dHVybiBGMChsZSxwZSksbGV9KENmKSx2Mz1mdW5jdGlvbihwZSl7ZnVuY3Rpb24gbGUoYmUsT2Upe3ZvaWQgMD09PU9lJiYoT2U9enMpO3ZhciBTdD1tZShPZSk7cmV0dXJuIFN0Lm91dHB1dENzdD0hMSxwZS5jYWxsKHRoaXMsYmUsU3QpfHx0aGlzfXJldHVybiBGMChsZSxwZSksbGV9KENm''@;'; put 'put ''KTtmdW5jdGlvbiBkeShwZSxsZSl7dmFyIGJlPXZvaWQgMD09PWxlP3t9OmxlLE9lPWJlLnJlc291cmNlQmFzZSwkZT12b2lkIDA9PT1PZT8iaHR0cHM6Ly91bnBrZy5jb20vY2hldnJvdGFpbkAiK3krIi9kaWFncmFtcy8iOk9lLFN0PWJlLmNzcztyZXR1cm4iXG5ceDNjIS0tIFRoaXMgaXMg''@;'; put 'put ''YSBnZW5lcmF0ZWQgZmlsZSAtLVx4M2VcbjwhRE9DVFlQRSBodG1sPlxuPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XG48c3R5bGU+XG4gIGJvZHkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IGhzbCgzMCwgMjAlLCA5NSUpXG4gIH1cbjwvc3R5bGU+XG5cblxuPGxpbmsgcmVsPSdzdHlsZXNo''@;'; put 'put ''ZWV0JyBocmVmPSciKyh2b2lkIDA9PT1TdD8iaHR0cHM6Ly91bnBrZy5jb20vY2hldnJvdGFpbkAiK3krIi9kaWFncmFtcy9kaWFncmFtcy5jc3MiOlN0KSsiJz5cblxuPHNjcmlwdCBzcmM9JyIrJGUrInZlbmRvci9yYWlscm9hZC1kaWFncmFtcy5qcyc+PFwvc2NyaXB0PlxuPHNjcmlwdCBz''@;'; put 'put ''cmM9JyIrJGUrInNyYy9kaWFncmFtc19idWlsZGVyLmpzJz48XC9zY3JpcHQ+XG48c2NyaXB0IHNyYz0nIiskZSsic3JjL2RpYWdyYW1zX2JlaGF2aW9yLmpzJz48XC9zY3JpcHQ+XG48c2NyaXB0IHNyYz0nIiskZSsnc3JjL21haW4uanNcJz48XC9zY3JpcHQ+XG5cbjxkaXYgaWQ9ImRpYWdy''@;'; put 'put ''YW1zIiBhbGlnbj0iY2VudGVyIj48L2Rpdj4gICAgXG5cbjxzY3JpcHQ+XG4gICAgd2luZG93LnNlcmlhbGl6ZWRHcmFtbWFyID0gJytKU09OLnN0cmluZ2lmeShwZSxudWxsLCIgICIpKyc7XG48XC9zY3JpcHQ+XG5cbjxzY3JpcHQ+XG4gICAgdmFyIGRpYWdyYW1zRGl2ID0gZG9jdW1lbnQu''@;'; put 'put ''Z2V0RWxlbWVudEJ5SWQoImRpYWdyYW1zIik7XG4gICAgbWFpbi5kcmF3RGlhZ3JhbXNGcm9tU2VyaWFsaXplZEdyYW1tYXIoc2VyaWFsaXplZEdyYW1tYXIsIGRpYWdyYW1zRGl2KTtcbjxcL3NjcmlwdD5cbid9dmFyIE91PSJcbiI7ZnVuY3Rpb24gQzkocGUpe3JldHVybiJcbmZ1bmN0aW9u''@;'; put 'put ''ICIrcGUubmFtZSsiKHRva2VuVm9jYWJ1bGFyeSwgY29uZmlnKSB7XG4gICAgLy8gaW52b2tlIHN1cGVyIGNvbnN0cnVjdG9yXG4gICAgLy8gTm8gc3VwcG9ydCBmb3IgZW1iZWRkZWQgYWN0aW9ucyBjdXJyZW50bHksIHNvIHdlIGNhbiAnaGFyZGNvZGUnXG4gICAgLy8gVGhlIHVzZSBvZiBD''@;'; put 'put ''c3RQYXJzZXIuXG4gICAgY2hldnJvdGFpbi5Dc3RQYXJzZXIuY2FsbCh0aGlzLCB0b2tlblZvY2FidWxhcnksIGNvbmZpZylcblxuICAgIGNvbnN0ICQgPSB0aGlzXG5cbiAgICAiK2Z1bmN0aW9uIEVmKHBlKXt2YXIgbGU9QyhwZSxmdW5jdGlvbihiZSl7cmV0dXJuIGZ1bmN0aW9uIEFnKHBl''@;'; put 'put ''LGxlKXt2YXIgYmU9cGwobGUsJyQuUlVMRSgiJytwZS5uYW1lKyciLCBmdW5jdGlvbigpIHsnKStPdTtyZXR1cm4gYmUrPXhhKHBlLmRlZmluaXRpb24sbGUrMSksYmUrPXBsKGxlKzEsIn0pIikrT3V9KGJlLDEpfSk7cmV0dXJuIGxlLmpvaW4oIlxuIil9KHBlLnJ1bGVzKSsiXG5cbiAgICAv''@;'; put 'put ''LyB2ZXJ5IGltcG9ydGFudCB0byBjYWxsIHRoaXMgYWZ0ZXIgYWxsIHRoZSBydWxlcyBoYXZlIGJlZW4gZGVmaW5lZC5cbiAgICAvLyBvdGhlcndpc2UgdGhlIHBhcnNlciBtYXkgbm90IHdvcmsgY29ycmVjdGx5IGFzIGl0IHdpbGwgbGFjayBpbmZvcm1hdGlvblxuICAgIC8vIGRlcml2ZWQg''@;'; put 'put ''ZHVyaW5nIHRoZSBzZWxmIGFuYWx5c2lzIHBoYXNlLlxuICAgIHRoaXMucGVyZm9ybVNlbGZBbmFseXNpcyh0aGlzKVxufVxuXG4vLyBpbmhlcml0YW5jZSBhcyBpbXBsZW1lbnRlZCBpbiBqYXZhc2NyaXB0IGluIHRoZSBwcmV2aW91cyBkZWNhZGUuLi4gOihcbiIrcGUubmFtZSsiLnByb3Rv''@;'; put 'put ''dHlwZSA9IE9iamVjdC5jcmVhdGUoY2hldnJvdGFpbi5Dc3RQYXJzZXIucHJvdG90eXBlKVxuIitwZS5uYW1lKyIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gIitwZS5uYW1lKyIgICAgXG4gICAgIn1mdW5jdGlvbiBtcChwZSxsZSl7aWYocGUgaW5zdGFuY2VvZiBCdSlyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24gaHkocGUsbGUpe3JldHVybiBwbChsZSwiJC5TVUJSVUxFIitwZS5pZHgrIigkLiIrcGUubm9uVGVybWluYWxOYW1lKyIpIitPdSl9KHBlLGxlKTtpZihwZSBpbnN0YW5jZW9mIGhjKXJldHVybiBhNSgiT1BUSU9OIixwZSxsZSk7aWYocGUgaW5zdGFuY2VvZiBlZClyZXR1cm4gYTUoIkFU''@;'; put 'put ''X0xFQVNUX09ORSIscGUsbGUpO2lmKHBlIGluc3RhbmNlb2YgSm4pcmV0dXJuIGE1KCJBVF9MRUFTVF9PTkVfU0VQIixwZSxsZSk7aWYocGUgaW5zdGFuY2VvZiBtaSlyZXR1cm4gYTUoIk1BTllfU0VQIixwZSxsZSk7aWYocGUgaW5zdGFuY2VvZiBjbClyZXR1cm4gYTUoIk1BTlkiLHBlLGxl''@;'; put 'put ''KTtpZihwZSBpbnN0YW5jZW9mIGV1KXJldHVybiBmdW5jdGlvbiBmeShwZSxsZSl7dmFyIGJlPXBsKGxlLCIkLk9SIitwZS5pZHgrIihbIikrT3UsT2U9QyhwZS5kZWZpbml0aW9uLGZ1bmN0aW9uKCRlKXtyZXR1cm4gZnVuY3Rpb24gVWkocGUsbGUpe3ZhciBiZT1wbChsZSwieyIpK091O3Jl''@;'; put 'put ''dHVybiBwZS5uYW1lJiYoYmUrPXBsKGxlKzEsJ05BTUU6ICInK3BlLm5hbWUrJyIsJykrT3UpLGJlKz1wbChsZSsxLCJBTFQ6IGZ1bmN0aW9uKCkgeyIpK091LGJlKz14YShwZS5kZWZpbml0aW9uLGxlKzEpLChiZSs9cGwobGUrMSwifSIpK091KStwbChsZSwifSIpfSgkZSxsZSsxKX0pO3Jl''@;'; put 'put ''dHVybihiZSs9T2Uuam9pbigiLFxuIikpKyhPdStwbChsZSwiXSlcbiIpKX0ocGUsbGUpO2lmKHBlIGluc3RhbmNlb2YgU2wpcmV0dXJuIGZ1bmN0aW9uIEpDKHBlLGxlKXtyZXR1cm4gcGwobGUsIiQuQ09OU1VNRSIrcGUuaWR4KyIodGhpcy50b2tlbnNNYXAuIitwZS50ZXJtaW5hbFR5cGUu''@;'; put 'put ''bmFtZSsiKSIrT3UpfShwZSxsZSk7aWYocGUgaW5zdGFuY2VvZiBSdSlyZXR1cm4geGEocGUuZGVmaW5pdGlvbixsZSk7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9ZnVuY3Rpb24gYTUocGUsbGUsYmUpe3ZhciBPZT1wbChiZSwiJC4iKyhwZStsZS5pZHgpKyIoIik7cmV0''@;'; put 'put ''dXJuIGxlLm5hbWV8fGxlLnNlcGFyYXRvcj8oT2UrPSJ7XG4iLGxlLm5hbWUmJihPZSs9cGwoYmUrMSwnTkFNRTogIicrbGUubmFtZSsnIicpKyIsIitPdSksbGUuc2VwYXJhdG9yJiYoT2UrPXBsKGJlKzEsIlNFUDogdGhpcy50b2tlbnNNYXAuIitsZS5zZXBhcmF0b3IubmFtZSkrIiwiK091''@;'; put 'put ''KSxPZSs9IkRFRjogIitkOChsZS5kZWZpbml0aW9uLGJlKzIpK091LE9lKz1wbChiZSwifSIpK091KTpPZSs9ZDgobGUuZGVmaW5pdGlvbixiZSsxKSxPZSsocGwoYmUsIikiKStPdSl9ZnVuY3Rpb24gZDgocGUsbGUpe3ZhciBiZT0iZnVuY3Rpb24oKSB7XG4iO3JldHVybihiZSs9eGEocGUs''@;'; put 'put ''bGUpKSsocGwobGUsIn0iKStPdSl9ZnVuY3Rpb24geGEocGUsbGUpe3ZhciBiZT0iIjtyZXR1cm4gUihwZSxmdW5jdGlvbihPZSl7YmUrPW1wKE9lLGxlKzEpfSksYmV9ZnVuY3Rpb24gcGwocGUsbGUpe3JldHVybiBBcnJheSg0KnBlKzEpLmpvaW4oIiAiKStsZX1mdW5jdGlvbiBpZChwZSl7''@;'; put 'put ''dmFyIGxlPWZ1bmN0aW9uIFVtKHBlKXtyZXR1cm4iICAgIFxuIitDOShwZSkrIlxucmV0dXJuIG5ldyAiK3BlLm5hbWUrIih0b2tlblZvY2FidWxhcnksIGNvbmZpZykgICAgXG4ifSh7bmFtZTpwZS5uYW1lLHJ1bGVzOnBlLnJ1bGVzfSksYmU9bmV3IEZ1bmN0aW9uKCJ0b2tlblZvY2FidWxh''@;'; put 'put ''cnkiLCJjb25maWciLCJjaGV2cm90YWluIixsZSk7cmV0dXJuIGZ1bmN0aW9uKE9lKXtyZXR1cm4gYmUocGUudG9rZW5Wb2NhYnVsYXJ5LE9lLGgoMzM2MTQpKX19ZnVuY3Rpb24gZDAocGUpe3JldHVybiBmdW5jdGlvbiBTZihwZSl7cmV0dXJuIlxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5''@;'; put 'put ''KSB7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICAvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXG4gICAgICAgIGRlZmluZShbJ2NoZXZyb3RhaW4nXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlm''@;'; put 'put ''ICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICAvLyBOb2RlLiBEb2VzIG5vdCB3b3JrIHdpdGggc3RyaWN0IENvbW1vbkpTLCBidXRcbiAgICAgICAgLy8gb25seSBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQg''@;'; put 'put ''bW9kdWxlLmV4cG9ydHMsXG4gICAgICAgIC8vIGxpa2UgTm9kZS5cbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ2NoZXZyb3RhaW4nKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQnJvd3NlciBnbG9iYWxzIChyb290IGlzIHdpbmRvdylcbiAgICAgICAg''@;'; put 'put ''cm9vdC5yZXR1cm5FeHBvcnRzID0gZmFjdG9yeShyb290LmIpO1xuICAgIH1cbn0odHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMsIGZ1bmN0aW9uIChjaGV2cm90YWluKSB7XG5cbiIrQzkocGUpKyJcbiAgICBcbnJldHVybiB7XG4gICAgIitwZS5uYW1lKyI6ICIr''@;'; put 'put ''cGUubmFtZSsiIFxufVxufSkpO1xuIn0oe25hbWU6cGUubmFtZSxydWxlczpwZS5ydWxlc30pfWZ1bmN0aW9uIGg4KCl7Y29uc29sZS53YXJuKCJUaGUgY2xlYXJDYWNoZSBmdW5jdGlvbiB3YXMgJ3NvZnQnIHJlbW92ZWQgZnJvbSB0aGUgQ2hldnJvdGFpbiBBUEkuXG5cdCBJdCBwZXJmb3Jt''@;'; put 'put ''cyBubyBhY3Rpb24gb3RoZXIgdGhhbiBwcmludGluZyB0aGlzIG1lc3NhZ2UuXG5cdCBQbGVhc2UgYXZvaWQgdXNpbmcgaXQgYXMgaXQgd2lsbCBiZSBjb21wbGV0ZWx5IHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSIpfX0sMzI0NyhmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDI3MDU0KS5C''@;'; put 'put ''dWZmZXIsYz1oKDcwNDUpLlRyYW5zZm9ybSxzPWgoNzg0NTQpLkksQT1oKDcxOTkzKSx2PWgoNDEwOTApO2Z1bmN0aW9uIEModyl7Yy5jYWxsKHRoaXMpLHRoaXMuaGFzaE1vZGU9InN0cmluZyI9PXR5cGVvZiB3LHRoaXMuaGFzaE1vZGU/dGhpc1t3XT10aGlzLl9maW5hbE9yRGlnZXN0OnRo''@;'; put 'put ''aXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9maW5hbCYmKHRoaXMuX19maW5hbD10aGlzLl9maW5hbCx0aGlzLl9maW5hbD1udWxsKSx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH1BKEMsYyksQy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHcsUyxM''@;'; put 'put ''KXt2YXIgUj12KHcsUykseD10aGlzLl91cGRhdGUoUik7cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczooTCYmKHg9dGhpcy5fdG9TdHJpbmcoeCxMKSkseCl9LEMucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSxDLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LEMucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sQy5w''@;'; put 'put ''cm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSxDLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHcsUyxMKXt2YXIgUjt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUodyk6''@;'; put 'put ''dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZSh3KSl9Y2F0Y2goeCl7Uj14fWZpbmFsbHl7TChSKX19LEMucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbih3KXt2YXIgUzt0cnl7dGhpcy5wdXNoKHRoaXMuX19maW5hbCgpKX1jYXRjaChMKXtTPUx9dyhTKX0sQy5wcm90b3R5cGUuX2ZpbmFsT3JEaWdl''@;'; put 'put ''c3Q9ZnVuY3Rpb24odyl7dmFyIFM9dGhpcy5fX2ZpbmFsKCl8fHkuYWxsb2MoMCk7cmV0dXJuIHcmJihTPXRoaXMuX3RvU3RyaW5nKFMsdywhMCkpLFN9LEMucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbih3LFMsTCl7aWYodGhpcy5fZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IHMo''@;'; put 'put ''UyksdGhpcy5fZW5jb2Rpbmc9UyksdGhpcy5fZW5jb2RpbmchPT1TKXRocm93IG5ldyBFcnJvcigiY2FuXHUyMDE5dCBzd2l0Y2ggZW5jb2RpbmdzIik7dmFyIFI9dGhpcy5fZGVjb2Rlci53cml0ZSh3KTtyZXR1cm4gTCYmKFIrPXRoaXMuX2RlY29kZXIuZW5kKCkpLFJ9LGZlLmV4cG9ydHM9''@;'; put 'put ''Q30sMjc2MzcoZmUsail7ZnVuY3Rpb24gVihOKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKE4pfWouaXNBcnJheT1mdW5jdGlvbiBoKE4pe3JldHVybiBBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkoTik6IltvYmplY3QgQXJyYXldIj09PVYoTil9LGouaXNCb29s''@;'; put 'put ''ZWFuPWZ1bmN0aW9uIHkoTil7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgTn0sai5pc051bGw9ZnVuY3Rpb24gYyhOKXtyZXR1cm4gbnVsbD09PU59LGouaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24gcyhOKXtyZXR1cm4gbnVsbD09Tn0sai5pc051bWJlcj1mdW5jdGlvbiBBKE4pe3JldHVy''@;'; put 'put ''biJudW1iZXIiPT10eXBlb2YgTn0sai5pc1N0cmluZz1mdW5jdGlvbiB2KE4pe3JldHVybiJzdHJpbmciPT10eXBlb2YgTn0sai5pc1N5bWJvbD1mdW5jdGlvbiBDKE4pe3JldHVybiJzeW1ib2wiPT10eXBlb2YgTn0sai5pc1VuZGVmaW5lZD1mdW5jdGlvbiB3KE4pe3JldHVybiB2b2lkIDA9''@;'; put 'put ''PT1OfSxqLmlzUmVnRXhwPWZ1bmN0aW9uIFMoTil7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1WKE4pfSxqLmlzT2JqZWN0PWZ1bmN0aW9uIEwoTil7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBOJiZudWxsIT09Tn0sai5pc0RhdGU9ZnVuY3Rpb24gUihOKXtyZXR1cm4iW29iamVjdCBEYXRl''@;'; put 'put ''XSI9PT1WKE4pfSxqLmlzRXJyb3I9ZnVuY3Rpb24geChOKXtyZXR1cm4iW29iamVjdCBFcnJvcl0iPT09VihOKXx8TiBpbnN0YW5jZW9mIEVycm9yfSxqLmlzRnVuY3Rpb249ZnVuY3Rpb24gVShOKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTn0sai5pc1ByaW1pdGl2ZT1mdW5jdGlvbiBI''@;'; put 'put ''KE4pe3JldHVybiBudWxsPT09Tnx8ImJvb2xlYW4iPT10eXBlb2YgTnx8Im51bWJlciI9PXR5cGVvZiBOfHwic3RyaW5nIj09dHlwZW9mIE58fCJzeW1ib2wiPT10eXBlb2YgTnx8dHlwZW9mIE4+InUifSxqLmlzQnVmZmVyPUJ1ZmZlci5pc0J1ZmZlcn0sNjcyMTEoZmUsaixoKXsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIHk9aCg3MTk5MyksYz1oKDM0NzI1KSxzPWgoMzY2MzYpLEE9aCgyNTQ0Myksdj1oKDMyNDcpO2Z1bmN0aW9uIEModyl7di5jYWxsKHRoaXMsImRpZ2VzdCIpLHRoaXMuX2hhc2g9d315KEMsdiksQy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih3KXt0aGlzLl9oYXNoLnVw''@;'; put 'put ''ZGF0ZSh3KX0sQy5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc2guZGlnZXN0KCl9LGZlLmV4cG9ydHM9ZnVuY3Rpb24oUyl7cmV0dXJuIm1kNSI9PT0oUz1TLnRvTG93ZXJDYXNlKCkpP25ldyBjOiJybWQxNjAiPT09U3x8InJpcGVtZDE2MCI9PT1TP25ldyBz''@;'; put 'put ''Om5ldyBDKEEoUykpfX0sODM0MDcoZmUsaixoKXt2YXIgeT1oKDM0NzI1KTtmZS5leHBvcnRzPWZ1bmN0aW9uKGMpe3JldHVybihuZXcgeSkudXBkYXRlKGMpLmRpZ2VzdCgpfX0sNTY0MzIoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg3MTk5MyksYz1oKDkwNTA5KSxzPWgoMzI0Nyks''@;'; put 'put ''QT1oKDI3MDU0KS5CdWZmZXIsdj1oKDgzNDA3KSxDPWgoMzY2MzYpLHc9aCgyNTQ0MyksUz1BLmFsbG9jKDEyOCk7ZnVuY3Rpb24gTChSLHgpe3MuY2FsbCh0aGlzLCJkaWdlc3QiKSwic3RyaW5nIj09dHlwZW9mIHgmJih4PUEuZnJvbSh4KSk7dmFyIFU9InNoYTUxMiI9PT1SfHwic2hhMzg0''@;'; put 'put ''Ij09PVI/MTI4OjY0O3RoaXMuX2FsZz1SLHRoaXMuX2tleT14LHgubGVuZ3RoPlU/eD0oInJtZDE2MCI9PT1SP25ldyBDOncoUikpLnVwZGF0ZSh4KS5kaWdlc3QoKTp4Lmxlbmd0aDxVJiYoeD1BLmNvbmNhdChbeCxTXSxVKSk7Zm9yKHZhciBWPXRoaXMuX2lwYWQ9QS5hbGxvY1Vuc2FmZShV''@;'; put 'put ''KSxOPXRoaXMuX29wYWQ9QS5hbGxvY1Vuc2FmZShVKSx6PTA7ejxVO3orKylWW3pdPTU0Xnhbel0sTlt6XT05Ml54W3pdO3RoaXMuX2hhc2g9InJtZDE2MCI9PT1SP25ldyBDOncoUiksdGhpcy5faGFzaC51cGRhdGUoVil9eShMLHMpLEwucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oUil7''@;'; put 'put ''dGhpcy5faGFzaC51cGRhdGUoUil9LEwucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBSPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuKCJybWQxNjAiPT09dGhpcy5fYWxnP25ldyBDOncodGhpcy5fYWxnKSkudXBkYXRlKHRoaXMuX29wYWQpLnVwZGF0ZShSKS5kaWdlc3QoKX0s''@;'; put 'put ''ZmUuZXhwb3J0cz1mdW5jdGlvbih4LFUpe3JldHVybiJybWQxNjAiPT09KHg9eC50b0xvd2VyQ2FzZSgpKXx8InJpcGVtZDE2MCI9PT14P25ldyBMKCJybWQxNjAiLFUpOiJtZDUiPT09eD9uZXcgYyh2LFUpOm5ldyBMKHgsVSl9fSw5MDUwOShmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1o''@;'; put 'put ''KDcxOTkzKSxjPWgoMjcwNTQpLkJ1ZmZlcixzPWgoMzI0NyksQT1jLmFsbG9jKDEyOCksdj02NDtmdW5jdGlvbiBDKHcsUyl7cy5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgUyYmKFM9Yy5mcm9tKFMpKSx0aGlzLl9hbGc9dyx0aGlzLl9rZXk9UyxTLmxlbmd0aD52P1M9''@;'; put 'put ''dyhTKTpTLmxlbmd0aDx2JiYoUz1jLmNvbmNhdChbUyxBXSx2KSk7Zm9yKHZhciBMPXRoaXMuX2lwYWQ9Yy5hbGxvY1Vuc2FmZSh2KSxSPXRoaXMuX29wYWQ9Yy5hbGxvY1Vuc2FmZSh2KSx4PTA7eDx2O3grKylMW3hdPTU0XlNbeF0sUlt4XT05Ml5TW3hdO3RoaXMuX2hhc2g9W0xdfXkoQyxz''@;'; put 'put ''KSxDLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHcpe3RoaXMuX2hhc2gucHVzaCh3KX0sQy5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5fYWxnKGMuY29uY2F0KHRoaXMuX2hhc2gpKTtyZXR1cm4gdGhpcy5fYWxnKGMuY29uY2F0KFt0aGlzLl9vcGFkLHddKSl9''@;'; put 'put ''LGZlLmV4cG9ydHM9Q30sMTc2NTYoZmUsaixoKXt2YXIgeTtmZS5leHBvcnRzPSh5PXl8fGZ1bmN0aW9uKGMpe3ZhciBBO2lmKHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY3J5cHRvJiYoQT13aW5kb3cuY3J5cHRvKSx0eXBlb2Ygc2VsZjwidSImJnNlbGYuY3J5cHRvJiYoQT1zZWxmLmNy''@;'; put 'put ''eXB0byksdHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzLmNyeXB0byYmKEE9Z2xvYmFsVGhpcy5jcnlwdG8pLCFBJiZ0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lm1zQ3J5cHRvJiYoQT13aW5kb3cubXNDcnlwdG8pLCFBJiZ0eXBlb2YgZ2xvYmFsPCJ1IiYmZ2xvYmFsLmNyeXB0''@;'; put 'put ''byYmKEE9Z2xvYmFsLmNyeXB0byksIUEpdHJ5e0E9aCgyODI2Nyl9Y2F0Y2h7fXZhciB2PWZ1bmN0aW9uKCl7aWYoQSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEEuZ2V0UmFuZG9tVmFsdWVzKXRyeXtyZXR1cm4gQS5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXX1jYXRj''@;'; put 'put ''aHt9aWYoImZ1bmN0aW9uIj09dHlwZW9mIEEucmFuZG9tQnl0ZXMpdHJ5e3JldHVybiBBLnJhbmRvbUJ5dGVzKDQpLnJlYWRJbnQzMkxFKCl9Y2F0Y2h7fX10aHJvdyBuZXcgRXJyb3IoIk5hdGl2ZSBjcnlwdG8gbW9kdWxlIGNvdWxkIG5vdCBiZSB1c2VkIHRvIGdldCBzZWN1cmUgcmFuZG9t''@;'; put 'put ''IG51bWJlci4iKX0sQz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbigpe2Z1bmN0aW9uIEYoKXt9cmV0dXJuIGZ1bmN0aW9uKFcpe3ZhciBxO3JldHVybiBGLnByb3RvdHlwZT1XLHE9bmV3IEYsRi5wcm90b3R5cGU9bnVsbCxxfX0oKSx3PXt9LFM9dy5saWI9e30sTD1TLkJhc2U9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm57ZXh0ZW5kOmZ1bmN0aW9uKEYpe3ZhciBXPUModGhpcyk7cmV0dXJuIEYmJlcubWl4SW4oRiksKCFXLmhhc093blByb3BlcnR5KCJpbml0Iil8fHRoaXMuaW5pdD09PVcuaW5pdCkmJihXLmluaXQ9ZnVuY3Rpb24oKXtXLiRzdXBlci5pbml0LmFwcGx5KHRoaXMsYXJndW1lbnRz''@;'; put 'put ''KX0pLFcuaW5pdC5wcm90b3R5cGU9VyxXLiRzdXBlcj10aGlzLFd9LGNyZWF0ZTpmdW5jdGlvbigpe3ZhciBGPXRoaXMuZXh0ZW5kKCk7cmV0dXJuIEYuaW5pdC5hcHBseShGLGFyZ3VtZW50cyksRn0saW5pdDpmdW5jdGlvbigpe30sbWl4SW46ZnVuY3Rpb24oRil7Zm9yKHZhciBXIGluIEYp''@;'; put 'put ''Ri5oYXNPd25Qcm9wZXJ0eShXKSYmKHRoaXNbV109RltXXSk7Ri5oYXNPd25Qcm9wZXJ0eSgidG9TdHJpbmciKSYmKHRoaXMudG9TdHJpbmc9Ri50b1N0cmluZyl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdC5wcm90b3R5cGUuZXh0ZW5kKHRoaXMpfX19KCksUj1TLldvcmRB''@;'; put 'put ''cnJheT1MLmV4dGVuZCh7aW5pdDpmdW5jdGlvbihGLFcpe0Y9dGhpcy53b3Jkcz1GfHxbXSx0aGlzLnNpZ0J5dGVzPW51bGwhPVc/Vzo0KkYubGVuZ3RofSx0b1N0cmluZzpmdW5jdGlvbihGKXtyZXR1cm4oRnx8VSkuc3RyaW5naWZ5KHRoaXMpfSxjb25jYXQ6ZnVuY3Rpb24oRil7dmFyIFc9''@;'; put 'put ''dGhpcy53b3JkcyxxPUYud29yZHMscmU9dGhpcy5zaWdCeXRlcyxtZT1GLnNpZ0J5dGVzO2lmKHRoaXMuY2xhbXAoKSxyZSU0KWZvcih2YXIgQ2U9MDtDZTxtZTtDZSsrKVdbcmUrQ2U+Pj4yXXw9KHFbQ2U+Pj4yXT4+PjI0LUNlJTQqOCYyNTUpPDwyNC0ocmUrQ2UpJTQqODtlbHNlIGZvcih2''@;'; put 'put ''YXIga2U9MDtrZTxtZTtrZSs9NClXW3JlK2tlPj4+Ml09cVtrZT4+PjJdO3JldHVybiB0aGlzLnNpZ0J5dGVzKz1tZSx0aGlzfSxjbGFtcDpmdW5jdGlvbigpe3ZhciBGPXRoaXMud29yZHMsVz10aGlzLnNpZ0J5dGVzO0ZbVz4+PjJdJj00Mjk0OTY3Mjk1PDwzMi1XJTQqOCxGLmxlbmd0aD1j''@;'; put 'put ''LmNlaWwoVy80KX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgRj1MLmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIEYud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKSxGfSxyYW5kb206ZnVuY3Rpb24oRil7Zm9yKHZhciBXPVtdLHE9MDtxPEY7cSs9NClXLnB1c2godigpKTtyZXR1cm4gbmV3IFIuaW5p''@;'; put 'put ''dChXLEYpfX0pLHg9dy5lbmM9e30sVT14LkhleD17c3RyaW5naWZ5OmZ1bmN0aW9uKEYpe2Zvcih2YXIgVz1GLndvcmRzLHE9Ri5zaWdCeXRlcyxyZT1bXSxtZT0wO21lPHE7bWUrKyl7dmFyIENlPVdbbWU+Pj4yXT4+PjI0LW1lJTQqOCYyNTU7cmUucHVzaCgoQ2U+Pj40KS50b1N0cmluZygx''@;'; put 'put ''NikpLHJlLnB1c2goKDE1JkNlKS50b1N0cmluZygxNikpfXJldHVybiByZS5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oRil7Zm9yKHZhciBXPUYubGVuZ3RoLHE9W10scmU9MDtyZTxXO3JlKz0yKXFbcmU+Pj4zXXw9cGFyc2VJbnQoRi5zdWJzdHIocmUsMiksMTYpPDwyNC1yZSU4KjQ7cmV0''@;'; put 'put ''dXJuIG5ldyBSLmluaXQocSxXLzIpfX0sSD14LkxhdGluMT17c3RyaW5naWZ5OmZ1bmN0aW9uKEYpe2Zvcih2YXIgVz1GLndvcmRzLHE9Ri5zaWdCeXRlcyxyZT1bXSxtZT0wO21lPHE7bWUrKylyZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoV1ttZT4+PjJdPj4+MjQtbWUlNCo4JjI1NSkp''@;'; put 'put ''O3JldHVybiByZS5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oRil7Zm9yKHZhciBXPUYubGVuZ3RoLHE9W10scmU9MDtyZTxXO3JlKyspcVtyZT4+PjJdfD0oMjU1JkYuY2hhckNvZGVBdChyZSkpPDwyNC1yZSU0Kjg7cmV0dXJuIG5ldyBSLmluaXQocSxXKX19LFY9eC5VdGY4PXtzdHJpbmdp''@;'; put 'put ''Znk6ZnVuY3Rpb24oRil7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKEguc3RyaW5naWZ5KEYpKSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgVVRGLTggZGF0YSIpfX0scGFyc2U6ZnVuY3Rpb24oRil7cmV0dXJuIEgucGFyc2UodW5lc2NhcGUoZW5jb2Rl''@;'; put 'put ''VVJJQ29tcG9uZW50KEYpKSl9fSxOPVMuQnVmZmVyZWRCbG9ja0FsZ29yaXRobT1MLmV4dGVuZCh7cmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9kYXRhPW5ldyBSLmluaXQsdGhpcy5fbkRhdGFCeXRlcz0wfSxfYXBwZW5kOmZ1bmN0aW9uKEYpeyJzdHJpbmciPT10eXBlb2YgRiYmKEY9Vi5wYXJz''@;'; put 'put ''ZShGKSksdGhpcy5fZGF0YS5jb25jYXQoRiksdGhpcy5fbkRhdGFCeXRlcys9Ri5zaWdCeXRlc30sX3Byb2Nlc3M6ZnVuY3Rpb24oRil7dmFyIFcscT10aGlzLl9kYXRhLHJlPXEud29yZHMsbWU9cS5zaWdCeXRlcyxDZT10aGlzLmJsb2NrU2l6ZSxrZT1tZS8oNCpDZSkscWU9KGtlPUY/Yy5j''@;'; put 'put ''ZWlsKGtlKTpjLm1heCgoMHxrZSktdGhpcy5fbWluQnVmZmVyU2l6ZSwwKSkqQ2UsWD1jLm1pbig0KnFlLG1lKTtpZihxZSl7Zm9yKHZhciBmPTA7ZjxxZTtmKz1DZSl0aGlzLl9kb1Byb2Nlc3NCbG9jayhyZSxmKTtXPXJlLnNwbGljZSgwLHFlKSxxLnNpZ0J5dGVzLT1YfXJldHVybiBuZXcg''@;'; put 'put ''Ui5pbml0KFcsWCl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIEY9TC5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBGLl9kYXRhPXRoaXMuX2RhdGEuY2xvbmUoKSxGfSxfbWluQnVmZmVyU2l6ZTowfSksWT0oUy5IYXNoZXI9Ti5leHRlbmQoe2NmZzpMLmV4dGVuZCgpLGluaXQ6ZnVuY3Rpb24oRil7''@;'; put 'put ''dGhpcy5jZmc9dGhpcy5jZmcuZXh0ZW5kKEYpLHRoaXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rpb24oKXtOLnJlc2V0LmNhbGwodGhpcyksdGhpcy5fZG9SZXNldCgpfSx1cGRhdGU6ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuX2FwcGVuZChGKSx0aGlzLl9wcm9jZXNzKCksdGhpc30sZmluYWxp''@;'; put 'put ''emU6ZnVuY3Rpb24oRil7cmV0dXJuIEYmJnRoaXMuX2FwcGVuZChGKSx0aGlzLl9kb0ZpbmFsaXplKCl9LGJsb2NrU2l6ZToxNixfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKEYpe3JldHVybiBmdW5jdGlvbihXLHEpe3JldHVybiBuZXcgRi5pbml0KHEpLmZpbmFsaXplKFcpfX0sX2NyZWF0ZUht''@;'; put 'put ''YWNIZWxwZXI6ZnVuY3Rpb24oRil7cmV0dXJuIGZ1bmN0aW9uKFcscSl7cmV0dXJuIG5ldyBZLkhNQUMuaW5pdChGLHEpLmZpbmFsaXplKFcpfX19KSx3LmFsZ289e30pO3JldHVybiB3fShNYXRoKSx5KX0sNzg4NTUoZmUsaixoKXt2YXIgeTtmZS5leHBvcnRzPSh5PWgoMTc2NTYpLGZ1bmN0''@;'; put 'put ''aW9uKGMpe3ZhciBzPXksQT1zLmxpYix2PUEuV29yZEFycmF5LEM9QS5IYXNoZXIsdz1zLmFsZ28sUz1bXTshZnVuY3Rpb24oKXtmb3IodmFyIFY9MDtWPDY0O1YrKylTW1ZdPTQyOTQ5NjcyOTYqYy5hYnMoYy5zaW4oVisxKSl8MH0oKTt2YXIgTD13Lk1ENT1DLmV4dGVuZCh7X2RvUmVzZXQ6''@;'; put 'put ''ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyB2LmluaXQoWzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OF0pfSxfZG9Qcm9jZXNzQmxvY2s6ZnVuY3Rpb24oVixOKXtmb3IodmFyIHo9MDt6PDE2O3orKyl7dmFyIFk9Tit6LEY9VltZXTtWW1ldPTE2NzExOTM1JihG''@;'; put 'put ''PDw4fEY+Pj4yNCl8NDI3ODI1NTM2MCYoRjw8MjR8Rj4+PjgpfXZhciBXPXRoaXMuX2hhc2gud29yZHMscT1WW04rMF0scmU9VltOKzFdLG1lPVZbTisyXSxDZT1WW04rM10sSWU9VltOKzRdLGtlPVZbTis1XSxxZT1WW04rNl0sWD1WW04rN10sZj1WW04rOF0sYj1WW04rOV0saz1WW04rMTBd''@;'; put 'put ''LE09VltOKzExXSxCPVZbTisxMl0sSz1WW04rMTNdLEc9VltOKzE0XSxEPVZbTisxNV0scD1XWzBdLEk9V1sxXSx1ZT1XWzJdLG5lPVdbM107cD1SKHAsSSx1ZSxuZSxxLDcsU1swXSksbmU9UihuZSxwLEksdWUscmUsMTIsU1sxXSksdWU9Uih1ZSxuZSxwLEksbWUsMTcsU1syXSksST1SKEks''@;'; put 'put ''dWUsbmUscCxDZSwyMixTWzNdKSxwPVIocCxJLHVlLG5lLEllLDcsU1s0XSksbmU9UihuZSxwLEksdWUsa2UsMTIsU1s1XSksdWU9Uih1ZSxuZSxwLEkscWUsMTcsU1s2XSksST1SKEksdWUsbmUscCxYLDIyLFNbN10pLHA9UihwLEksdWUsbmUsZiw3LFNbOF0pLG5lPVIobmUscCxJLHVlLGIs''@;'; put 'put ''MTIsU1s5XSksdWU9Uih1ZSxuZSxwLEksaywxNyxTWzEwXSksST1SKEksdWUsbmUscCxNLDIyLFNbMTFdKSxwPVIocCxJLHVlLG5lLEIsNyxTWzEyXSksbmU9UihuZSxwLEksdWUsSywxMixTWzEzXSksdWU9Uih1ZSxuZSxwLEksRywxNyxTWzE0XSkscD14KHAsST1SKEksdWUsbmUscCxELDIy''@;'; put 'put ''LFNbMTVdKSx1ZSxuZSxyZSw1LFNbMTZdKSxuZT14KG5lLHAsSSx1ZSxxZSw5LFNbMTddKSx1ZT14KHVlLG5lLHAsSSxNLDE0LFNbMThdKSxJPXgoSSx1ZSxuZSxwLHEsMjAsU1sxOV0pLHA9eChwLEksdWUsbmUsa2UsNSxTWzIwXSksbmU9eChuZSxwLEksdWUsayw5LFNbMjFdKSx1ZT14KHVl''@;'; put 'put ''LG5lLHAsSSxELDE0LFNbMjJdKSxJPXgoSSx1ZSxuZSxwLEllLDIwLFNbMjNdKSxwPXgocCxJLHVlLG5lLGIsNSxTWzI0XSksbmU9eChuZSxwLEksdWUsRyw5LFNbMjVdKSx1ZT14KHVlLG5lLHAsSSxDZSwxNCxTWzI2XSksST14KEksdWUsbmUscCxmLDIwLFNbMjddKSxwPXgocCxJLHVlLG5l''@;'; put 'put ''LEssNSxTWzI4XSksbmU9eChuZSxwLEksdWUsbWUsOSxTWzI5XSksdWU9eCh1ZSxuZSxwLEksWCwxNCxTWzMwXSkscD1VKHAsST14KEksdWUsbmUscCxCLDIwLFNbMzFdKSx1ZSxuZSxrZSw0LFNbMzJdKSxuZT1VKG5lLHAsSSx1ZSxmLDExLFNbMzNdKSx1ZT1VKHVlLG5lLHAsSSxNLDE2LFNb''@;'; put 'put ''MzRdKSxJPVUoSSx1ZSxuZSxwLEcsMjMsU1szNV0pLHA9VShwLEksdWUsbmUscmUsNCxTWzM2XSksbmU9VShuZSxwLEksdWUsSWUsMTEsU1szN10pLHVlPVUodWUsbmUscCxJLFgsMTYsU1szOF0pLEk9VShJLHVlLG5lLHAsaywyMyxTWzM5XSkscD1VKHAsSSx1ZSxuZSxLLDQsU1s0MF0pLG5l''@;'; put 'put ''PVUobmUscCxJLHVlLHEsMTEsU1s0MV0pLHVlPVUodWUsbmUscCxJLENlLDE2LFNbNDJdKSxJPVUoSSx1ZSxuZSxwLHFlLDIzLFNbNDNdKSxwPVUocCxJLHVlLG5lLGIsNCxTWzQ0XSksbmU9VShuZSxwLEksdWUsQiwxMSxTWzQ1XSksdWU9VSh1ZSxuZSxwLEksRCwxNixTWzQ2XSkscD1IKHAs''@;'; put 'put ''ST1VKEksdWUsbmUscCxtZSwyMyxTWzQ3XSksdWUsbmUscSw2LFNbNDhdKSxuZT1IKG5lLHAsSSx1ZSxYLDEwLFNbNDldKSx1ZT1IKHVlLG5lLHAsSSxHLDE1LFNbNTBdKSxJPUgoSSx1ZSxuZSxwLGtlLDIxLFNbNTFdKSxwPUgocCxJLHVlLG5lLEIsNixTWzUyXSksbmU9SChuZSxwLEksdWUs''@;'; put 'put ''Q2UsMTAsU1s1M10pLHVlPUgodWUsbmUscCxJLGssMTUsU1s1NF0pLEk9SChJLHVlLG5lLHAscmUsMjEsU1s1NV0pLHA9SChwLEksdWUsbmUsZiw2LFNbNTZdKSxuZT1IKG5lLHAsSSx1ZSxELDEwLFNbNTddKSx1ZT1IKHVlLG5lLHAsSSxxZSwxNSxTWzU4XSksST1IKEksdWUsbmUscCxLLDIx''@;'; put 'put ''LFNbNTldKSxwPUgocCxJLHVlLG5lLEllLDYsU1s2MF0pLG5lPUgobmUscCxJLHVlLE0sMTAsU1s2MV0pLHVlPUgodWUsbmUscCxJLG1lLDE1LFNbNjJdKSxJPUgoSSx1ZSxuZSxwLGIsMjEsU1s2M10pLFdbMF09V1swXStwfDAsV1sxXT1XWzFdK0l8MCxXWzJdPVdbMl0rdWV8MCxXWzNdPVdb''@;'; put 'put ''M10rbmV8MH0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgVj10aGlzLl9kYXRhLE49Vi53b3Jkcyx6PTgqdGhpcy5fbkRhdGFCeXRlcyxZPTgqVi5zaWdCeXRlcztOW1k+Pj41XXw9MTI4PDwyNC1ZJTMyO3ZhciBGPWMuZmxvb3Ioei80Mjk0OTY3Mjk2KSxXPXo7TlsxNSsoWSs2ND4+Pjk8''@;'; put 'put ''PDQpXT0xNjcxMTkzNSYoRjw8OHxGPj4+MjQpfDQyNzgyNTUzNjAmKEY8PDI0fEY+Pj44KSxOWzE0KyhZKzY0Pj4+OTw8NCldPTE2NzExOTM1JihXPDw4fFc+Pj4yNCl8NDI3ODI1NTM2MCYoVzw8MjR8Vz4+PjgpLFYuc2lnQnl0ZXM9NCooTi5sZW5ndGgrMSksdGhpcy5fcHJvY2VzcygpO2Zv''@;'; put 'put ''cih2YXIgcT10aGlzLl9oYXNoLHJlPXEud29yZHMsbWU9MDttZTw0O21lKyspe3ZhciBDZT1yZVttZV07cmVbbWVdPTE2NzExOTM1JihDZTw8OHxDZT4+PjI0KXw0Mjc4MjU1MzYwJihDZTw8MjR8Q2U+Pj44KX1yZXR1cm4gcX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgVj1DLmNsb25lLmNhbGwo''@;'; put 'put ''dGhpcyk7cmV0dXJuIFYuX2hhc2g9dGhpcy5faGFzaC5jbG9uZSgpLFZ9fSk7ZnVuY3Rpb24gUihWLE4seixZLEYsVyxxKXt2YXIgcmU9VisoTiZ6fH5OJlkpK0YrcTtyZXR1cm4ocmU8PFd8cmU+Pj4zMi1XKStOfWZ1bmN0aW9uIHgoVixOLHosWSxGLFcscSl7dmFyIHJlPVYrKE4mWXx6Jn5Z''@;'; put 'put ''KStGK3E7cmV0dXJuKHJlPDxXfHJlPj4+MzItVykrTn1mdW5jdGlvbiBVKFYsTix6LFksRixXLHEpe3ZhciByZT1WKyhOXnpeWSkrRitxO3JldHVybihyZTw8V3xyZT4+PjMyLVcpK059ZnVuY3Rpb24gSChWLE4seixZLEYsVyxxKXt2YXIgcmU9Visoel4oTnx+WSkpK0YrcTtyZXR1cm4ocmU8''@;'; put 'put ''PFd8cmU+Pj4zMi1XKStOfXMuTUQ1PUMuX2NyZWF0ZUhlbHBlcihMKSxzLkhtYWNNRDU9Qy5fY3JlYXRlSG1hY0hlbHBlcihMKX0oTWF0aCkseS5NRDUpfSw5MjczNihmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDQ1NzApLGM9aCg1ODQxMykscz1oKDQ2NzU4KSxBPWgoODM3OTgpO2Zl''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24oQyx3LFMpe2lmKCFDfHwib2JqZWN0IiE9dHlwZW9mIEMmJiJmdW5jdGlvbiIhPXR5cGVvZiBDKXRocm93IG5ldyBzKCJgb2JqYCBtdXN0IGJlIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uYCIpO2lmKCJzdHJpbmciIT10eXBlb2YgdyYmInN5bWJvbCIhPXR5cGVv''@;'; put 'put ''ZiB3KXRocm93IG5ldyBzKCJgcHJvcGVydHlgIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzeW1ib2xgIik7aWYoYXJndW1lbnRzLmxlbmd0aD4zJiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbM10mJm51bGwhPT1hcmd1bWVudHNbM10pdGhyb3cgbmV3IHMoImBub25FbnVtZXJhYmxlYCwg''@;'; put 'put ''aWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwiKTtpZihhcmd1bWVudHMubGVuZ3RoPjQmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50c1s0XSYmbnVsbCE9PWFyZ3VtZW50c1s0XSl0aHJvdyBuZXcgcygiYG5vbldyaXRhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUg''@;'; put 'put ''YSBib29sZWFuIG9yIG51bGwiKTtpZihhcmd1bWVudHMubGVuZ3RoPjUmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50c1s1XSYmbnVsbCE9PWFyZ3VtZW50c1s1XSl0aHJvdyBuZXcgcygiYG5vbkNvbmZpZ3VyYWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxs''@;'; put 'put ''Iik7aWYoYXJndW1lbnRzLmxlbmd0aD42JiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbNl0pdGhyb3cgbmV3IHMoImBsb29zZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiIpO3ZhciBMPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106bnVsbCxSPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg+ND9hcmd1bWVudHNbNF06bnVsbCx4PWFyZ3VtZW50cy5sZW5ndGg+NT9hcmd1bWVudHNbNV06bnVsbCxVPWFyZ3VtZW50cy5sZW5ndGg+NiYmYXJndW1lbnRzWzZdLEg9ISFBJiZBKEMsdyk7aWYoeSl5KEMsdyx7Y29uZmlndXJhYmxlOm51bGw9PT14JiZIP0guY29uZmlndXJh''@;'; put 'put ''YmxlOiF4LGVudW1lcmFibGU6bnVsbD09PUwmJkg/SC5lbnVtZXJhYmxlOiFMLHZhbHVlOlMsd3JpdGFibGU6bnVsbD09PVImJkg/SC53cml0YWJsZTohUn0pO2Vsc2V7aWYoIVUmJihMfHxSfHx4KSl0aHJvdyBuZXcgYygiVGhpcyBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IGRlZmlu''@;'; put 'put ''aW5nIGEgcHJvcGVydHkgYXMgbm9uLWNvbmZpZ3VyYWJsZSwgbm9uLXdyaXRhYmxlLCBvciBub24tZW51bWVyYWJsZS4iKTtDW3ddPVN9fX0sNzE1NDkoZmUsaixoKXsidXNlIHN0cmljdCI7ai51dGlscz1oKDg1NjcxKSxqLkNpcGhlcj1oKDEwMjE5KSxqLkRFUz1oKDY0MTY2KSxqLkNCQz1o''@;'; put 'put ''KDg4ODAwKSxqLkVERT1oKDYyMTIyKX0sODg4MDAoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCgzOTIxMCksYz1oKDcxOTkzKSxzPXt9O2Z1bmN0aW9uIEEoQyl7eS5lcXVhbChDLmxlbmd0aCw4LCJJbnZhbGlkIElWIGxlbmd0aCIpLHRoaXMuaXY9bmV3IEFycmF5KDgpO2Zvcih2YXIg''@;'; put 'put ''dz0wO3c8dGhpcy5pdi5sZW5ndGg7dysrKXRoaXMuaXZbd109Q1t3XX1qLmluc3RhbnRpYXRlPWZ1bmN0aW9uIHYoQyl7ZnVuY3Rpb24gdyh4KXtDLmNhbGwodGhpcyx4KSx0aGlzLl9jYmNJbml0KCl9Yyh3LEMpO2Zvcih2YXIgUz1PYmplY3Qua2V5cyhzKSxMPTA7TDxTLmxlbmd0aDtMKysp''@;'; put 'put ''e3ZhciBSPVNbTF07dy5wcm90b3R5cGVbUl09c1tSXX1yZXR1cm4gdy5jcmVhdGU9ZnVuY3Rpb24oVSl7cmV0dXJuIG5ldyB3KFUpfSx3fSxzLl9jYmNJbml0PWZ1bmN0aW9uKCl7dmFyIHc9bmV3IEEodGhpcy5vcHRpb25zLml2KTt0aGlzLl9jYmNTdGF0ZT13fSxzLl91cGRhdGU9ZnVuY3Rp''@;'; put 'put ''b24odyxTLEwsUil7dmFyIFU9dGhpcy5jb25zdHJ1Y3Rvci5zdXBlcl8ucHJvdG90eXBlLEg9dGhpcy5fY2JjU3RhdGUuaXY7aWYoImVuY3J5cHQiPT09dGhpcy50eXBlKXtmb3IodmFyIFY9MDtWPHRoaXMuYmxvY2tTaXplO1YrKylIW1ZdXj13W1MrVl07Zm9yKFUuX3VwZGF0ZS5jYWxsKHRo''@;'; put 'put ''aXMsSCwwLEwsUiksVj0wO1Y8dGhpcy5ibG9ja1NpemU7VisrKUhbVl09TFtSK1ZdfWVsc2V7Zm9yKFUuX3VwZGF0ZS5jYWxsKHRoaXMsdyxTLEwsUiksVj0wO1Y8dGhpcy5ibG9ja1NpemU7VisrKUxbUitWXV49SFtWXTtmb3IoVj0wO1Y8dGhpcy5ibG9ja1NpemU7VisrKUhbVl09d1tTK1Zd''@;'; put 'put ''fX19LDEwMjE5KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoMzkyMTApO2Z1bmN0aW9uIGMocyl7dGhpcy5vcHRpb25zPXMsdGhpcy50eXBlPXRoaXMub3B0aW9ucy50eXBlLHRoaXMuYmxvY2tTaXplPTgsdGhpcy5faW5pdCgpLHRoaXMuYnVmZmVyPW5ldyBBcnJheSh0aGlzLmJsb2Nr''@;'; put 'put ''U2l6ZSksdGhpcy5idWZmZXJPZmY9MCx0aGlzLnBhZGRpbmc9ITEhPT1zLnBhZGRpbmd9ZmUuZXhwb3J0cz1jLGMucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKCl7fSxjLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oQSl7cmV0dXJuIDA9PT1BLmxlbmd0aD9bXToiZGVjcnlwdCI9PT10aGlz''@;'; put 'put ''LnR5cGU/dGhpcy5fdXBkYXRlRGVjcnlwdChBKTp0aGlzLl91cGRhdGVFbmNyeXB0KEEpfSxjLnByb3RvdHlwZS5fYnVmZmVyPWZ1bmN0aW9uKEEsdil7Zm9yKHZhciBDPU1hdGgubWluKHRoaXMuYnVmZmVyLmxlbmd0aC10aGlzLmJ1ZmZlck9mZixBLmxlbmd0aC12KSx3PTA7dzxDO3crKyl0''@;'; put 'put ''aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZit3XT1BW3Yrd107cmV0dXJuIHRoaXMuYnVmZmVyT2ZmKz1DLEN9LGMucHJvdG90eXBlLl9mbHVzaEJ1ZmZlcj1mdW5jdGlvbihBLHYpe3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCxBLHYpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5i''@;'; put 'put ''bG9ja1NpemV9LGMucHJvdG90eXBlLl91cGRhdGVFbmNyeXB0PWZ1bmN0aW9uKEEpe3ZhciB2PTAsQz0wLFM9bmV3IEFycmF5KCgodGhpcy5idWZmZXJPZmYrQS5sZW5ndGgpL3RoaXMuYmxvY2tTaXplfDApKnRoaXMuYmxvY2tTaXplKTswIT09dGhpcy5idWZmZXJPZmYmJih2Kz10aGlzLl9i''@;'; put 'put ''dWZmZXIoQSx2KSx0aGlzLmJ1ZmZlck9mZj09PXRoaXMuYnVmZmVyLmxlbmd0aCYmKEMrPXRoaXMuX2ZsdXNoQnVmZmVyKFMsQykpKTtmb3IodmFyIEw9QS5sZW5ndGgtKEEubGVuZ3RoLXYpJXRoaXMuYmxvY2tTaXplO3Y8TDt2Kz10aGlzLmJsb2NrU2l6ZSl0aGlzLl91cGRhdGUoQSx2LFMs''@;'; put 'put ''QyksQys9dGhpcy5ibG9ja1NpemU7Zm9yKDt2PEEubGVuZ3RoO3YrKyx0aGlzLmJ1ZmZlck9mZisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmXT1BW3ZdO3JldHVybiBTfSxjLnByb3RvdHlwZS5fdXBkYXRlRGVjcnlwdD1mdW5jdGlvbihBKXtmb3IodmFyIHY9MCxDPTAsdz1NYXRoLmNl''@;'; put 'put ''aWwoKHRoaXMuYnVmZmVyT2ZmK0EubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZSktMSxTPW5ldyBBcnJheSh3KnRoaXMuYmxvY2tTaXplKTt3PjA7dy0tKXYrPXRoaXMuX2J1ZmZlcihBLHYpLEMrPXRoaXMuX2ZsdXNoQnVmZmVyKFMsQyk7cmV0dXJuIHYrPXRoaXMuX2J1ZmZlcihBLHYpLFN9LGMu''@;'; put 'put ''cHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKEEpe3ZhciB2LEM7cmV0dXJuIEEmJih2PXRoaXMudXBkYXRlKEEpKSxDPSJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9maW5hbEVuY3J5cHQoKTp0aGlzLl9maW5hbERlY3J5cHQoKSx2P3YuY29uY2F0KEMpOkN9LGMucHJvdG90eXBlLl9wYWQ9''@;'; put 'put ''ZnVuY3Rpb24oQSx2KXtpZigwPT09dilyZXR1cm4hMTtmb3IoO3Y8QS5sZW5ndGg7KUFbdisrXT0wO3JldHVybiEwfSxjLnByb3RvdHlwZS5fZmluYWxFbmNyeXB0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3BhZCh0aGlzLmJ1ZmZlcix0aGlzLmJ1ZmZlck9mZikpcmV0dXJuW107dmFyIEE9bmV3''@;'; put 'put ''IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsQSwwKSxBfSxjLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oQSl7cmV0dXJuIEF9LGMucHJvdG90eXBlLl9maW5hbERlY3J5cHQ9ZnVuY3Rpb24oKXt5LmVxdWFsKHRoaXMuYnVmZmVyT2Zm''@;'; put 'put ''LHRoaXMuYmxvY2tTaXplLCJOb3QgZW5vdWdoIGRhdGEgdG8gZGVjcnlwdCIpO3ZhciBBPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX2ZsdXNoQnVmZmVyKEEsMCksdGhpcy5fdW5wYWQoQSl9fSw2NDE2NihmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDM5MjEw''@;'; put 'put ''KSxjPWgoNzE5OTMpLHM9aCg4NTY3MSksQT1oKDEwMjE5KTtmdW5jdGlvbiB2KCl7dGhpcy50bXA9bmV3IEFycmF5KDIpLHRoaXMua2V5cz1udWxsfWZ1bmN0aW9uIEMoUyl7QS5jYWxsKHRoaXMsUyk7dmFyIEw9bmV3IHY7dGhpcy5fZGVzU3RhdGU9TCx0aGlzLmRlcml2ZUtleXMoTCxTLmtl''@;'; put 'put ''eSl9YyhDLEEpLGZlLmV4cG9ydHM9QyxDLmNyZWF0ZT1mdW5jdGlvbihMKXtyZXR1cm4gbmV3IEMoTCl9O3ZhciB3PVsxLDEsMiwyLDIsMiwyLDIsMSwyLDIsMiwyLDIsMiwxXTtDLnByb3RvdHlwZS5kZXJpdmVLZXlzPWZ1bmN0aW9uKEwsUil7TC5rZXlzPW5ldyBBcnJheSgzMikseS5lcXVh''@;'; put 'put ''bChSLmxlbmd0aCx0aGlzLmJsb2NrU2l6ZSwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIHg9cy5yZWFkVUludDMyQkUoUiwwKSxVPXMucmVhZFVJbnQzMkJFKFIsNCk7cy5wYzEoeCxVLEwudG1wLDApLHg9TC50bXBbMF0sVT1MLnRtcFsxXTtmb3IodmFyIEg9MDtIPEwua2V5cy5sZW5ndGg7''@;'; put 'put ''SCs9Mil7dmFyIFY9d1tIPj4+MV07eD1zLnIyOHNobCh4LFYpLFU9cy5yMjhzaGwoVSxWKSxzLnBjMih4LFUsTC5rZXlzLEgpfX0sQy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihMLFIseCxVKXt2YXIgSD10aGlzLl9kZXNTdGF0ZSxWPXMucmVhZFVJbnQzMkJFKEwsUiksTj1zLnJlYWRV''@;'; put 'put ''SW50MzJCRShMLFIrNCk7cy5pcChWLE4sSC50bXAsMCksVj1ILnRtcFswXSxOPUgudG1wWzFdLCJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9lbmNyeXB0KEgsVixOLEgudG1wLDApOnRoaXMuX2RlY3J5cHQoSCxWLE4sSC50bXAsMCksTj1ILnRtcFsxXSxzLndyaXRlVUludDMyQkUoeCxW''@;'; put 'put ''PUgudG1wWzBdLFUpLHMud3JpdGVVSW50MzJCRSh4LE4sVSs0KX0sQy5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbihMLFIpe2lmKCExPT09dGhpcy5wYWRkaW5nKXJldHVybiExO2Zvcih2YXIgeD1MLmxlbmd0aC1SLFU9UjtVPEwubGVuZ3RoO1UrKylMW1VdPXg7cmV0dXJuITB9LEMucHJvdG90''@;'; put 'put ''eXBlLl91bnBhZD1mdW5jdGlvbihMKXtpZighMT09PXRoaXMucGFkZGluZylyZXR1cm4gTDtmb3IodmFyIFI9TFtMLmxlbmd0aC0xXSx4PUwubGVuZ3RoLVI7eDxMLmxlbmd0aDt4KyspeS5lcXVhbChMW3hdLFIpO3JldHVybiBMLnNsaWNlKDAsTC5sZW5ndGgtUil9LEMucHJvdG90eXBlLl9l''@;'; put 'put ''bmNyeXB0PWZ1bmN0aW9uKEwsUix4LFUsSCl7Zm9yKHZhciBWPVIsTj14LHo9MDt6PEwua2V5cy5sZW5ndGg7eis9Mil7dmFyIFk9TC5rZXlzW3pdLEY9TC5rZXlzW3orMV07cy5leHBhbmQoTixMLnRtcCwwKTt2YXIgVz1zLnN1YnN0aXR1dGUoWV49TC50bXBbMF0sRl49TC50bXBbMV0pLHJl''@;'; put 'put ''PU47Tj0oVl5zLnBlcm11dGUoVykpPj4+MCxWPXJlfXMucmlwKE4sVixVLEgpfSxDLnByb3RvdHlwZS5fZGVjcnlwdD1mdW5jdGlvbihMLFIseCxVLEgpe2Zvcih2YXIgVj14LE49Uix6PUwua2V5cy5sZW5ndGgtMjt6Pj0wO3otPTIpe3ZhciBZPUwua2V5c1t6XSxGPUwua2V5c1t6KzFdO3Mu''@;'; put 'put ''ZXhwYW5kKFYsTC50bXAsMCk7dmFyIFc9cy5zdWJzdGl0dXRlKFlePUwudG1wWzBdLEZePUwudG1wWzFdKSxyZT1WO1Y9KE5ecy5wZXJtdXRlKFcpKT4+PjAsTj1yZX1zLnJpcChWLE4sVSxIKX19LDYyMTIyKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoMzkyMTApLGM9aCg3MTk5Myks''@;'; put 'put ''cz1oKDEwMjE5KSxBPWgoNjQxNjYpO2Z1bmN0aW9uIHYodyxTKXt5LmVxdWFsKFMubGVuZ3RoLDI0LCJJbnZhbGlkIGtleSBsZW5ndGgiKTt2YXIgTD1TLnNsaWNlKDAsOCksUj1TLnNsaWNlKDgsMTYpLHg9Uy5zbGljZSgxNiwyNCk7dGhpcy5jaXBoZXJzPSJlbmNyeXB0Ij09PXc/W0EuY3Jl''@;'; put 'put ''YXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6TH0pLEEuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6Un0pLEEuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6eH0pXTpbQS5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTp4fSksQS5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpSfSksQS5j''@;'; put 'put ''cmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpMfSldfWZ1bmN0aW9uIEModyl7cy5jYWxsKHRoaXMsdyk7dmFyIFM9bmV3IHYodGhpcy50eXBlLHRoaXMub3B0aW9ucy5rZXkpO3RoaXMuX2VkZVN0YXRlPVN9YyhDLHMpLGZlLmV4cG9ydHM9QyxDLmNyZWF0ZT1mdW5jdGlvbihTKXtyZXR1cm4g''@;'; put 'put ''bmV3IEMoUyl9LEMucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oUyxMLFIseCl7dmFyIFU9dGhpcy5fZWRlU3RhdGU7VS5jaXBoZXJzWzBdLl91cGRhdGUoUyxMLFIseCksVS5jaXBoZXJzWzFdLl91cGRhdGUoUix4LFIseCksVS5jaXBoZXJzWzJdLl91cGRhdGUoUix4LFIseCl9LEMucHJv''@;'; put 'put ''dG90eXBlLl9wYWQ9QS5wcm90b3R5cGUuX3BhZCxDLnByb3RvdHlwZS5fdW5wYWQ9QS5wcm90b3R5cGUuX3VucGFkfSw4NTY3MShmZSxqKXsidXNlIHN0cmljdCI7ai5yZWFkVUludDMyQkU9ZnVuY3Rpb24oQSx2KXtyZXR1cm4oQVswK3ZdPDwyNHxBWzErdl08PDE2fEFbMit2XTw8OHxBWzMr''@;'; put 'put ''dl0pPj4+MH0sai53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKEEsdixDKXtBWzArQ109dj4+PjI0LEFbMStDXT12Pj4+MTYmMjU1LEFbMitDXT12Pj4+OCYyNTUsQVszK0NdPTI1NSZ2fSxqLmlwPWZ1bmN0aW9uKEEsdixDLHcpe2Zvcih2YXIgUz0wLEw9MCxSPTY7Uj49MDtSLT0yKXtmb3IodmFy''@;'; put 'put ''IHg9MDt4PD0yNDt4Kz04KVM8PD0xLFN8PXY+Pj54K1ImMTtmb3IoeD0wO3g8PTI0O3grPTgpUzw8PTEsU3w9QT4+PngrUiYxfWZvcihSPTY7Uj49MDtSLT0yKXtmb3IoeD0xO3g8PTI1O3grPTgpTDw8PTEsTHw9dj4+PngrUiYxO2Zvcih4PTE7eDw9MjU7eCs9OClMPDw9MSxMfD1BPj4+eCtS''@;'; put 'put ''JjF9Q1t3KzBdPVM+Pj4wLENbdysxXT1MPj4+MH0sai5yaXA9ZnVuY3Rpb24oQSx2LEMsdyl7Zm9yKHZhciBTPTAsTD0wLFI9MDtSPDQ7UisrKWZvcih2YXIgeD0yNDt4Pj0wO3gtPTgpUzw8PTEsU3w9dj4+PngrUiYxLFM8PD0xLFN8PUE+Pj54K1ImMTtmb3IoUj00O1I8ODtSKyspZm9yKHg9''@;'; put 'put ''MjQ7eD49MDt4LT04KUw8PD0xLEx8PXY+Pj54K1ImMSxMPDw9MSxMfD1BPj4+eCtSJjE7Q1t3KzBdPVM+Pj4wLENbdysxXT1MPj4+MH0sai5wYzE9ZnVuY3Rpb24oQSx2LEMsdyl7Zm9yKHZhciBTPTAsTD0wLFI9NztSPj01O1ItLSl7Zm9yKHZhciB4PTA7eDw9MjQ7eCs9OClTPDw9MSxTfD12''@;'; put 'put ''Pj54K1ImMTtmb3IoeD0wO3g8PTI0O3grPTgpUzw8PTEsU3w9QT4+eCtSJjF9Zm9yKHg9MDt4PD0yNDt4Kz04KVM8PD0xLFN8PXY+PngrUiYxO2ZvcihSPTE7Ujw9MztSKyspe2Zvcih4PTA7eDw9MjQ7eCs9OClMPDw9MSxMfD12Pj54K1ImMTtmb3IoeD0wO3g8PTI0O3grPTgpTDw8PTEsTHw9''@;'; put 'put ''QT4+eCtSJjF9Zm9yKHg9MDt4PD0yNDt4Kz04KUw8PD0xLEx8PUE+PngrUiYxO0NbdyswXT1TPj4+MCxDW3crMV09TD4+PjB9LGoucjI4c2hsPWZ1bmN0aW9uKEEsdil7cmV0dXJuIEE8PHYmMjY4NDM1NDU1fEE+Pj4yOC12fTt2YXIgaD1bMTQsMTEsMTcsNCwyNywyMywyNSwwLDEzLDIyLDcs''@;'; put 'put ''MTgsNSw5LDE2LDI0LDIsMjAsMTIsMjEsMSw4LDE1LDI2LDE1LDQsMjUsMTksOSwxLDI2LDE2LDUsMTEsMjMsOCwxMiw3LDE3LDAsMjIsMywxMCwxNCw2LDIwLDI3LDI0XTtqLnBjMj1mdW5jdGlvbihBLHYsQyx3KXtmb3IodmFyIFM9MCxMPTAsUj1oLmxlbmd0aD4+PjEseD0wO3g8Ujt4Kysp''@;'; put 'put ''Uzw8PTEsU3w9QT4+PmhbeF0mMTtmb3IoeD1SO3g8aC5sZW5ndGg7eCsrKUw8PD0xLEx8PXY+Pj5oW3hdJjE7Q1t3KzBdPVM+Pj4wLENbdysxXT1MPj4+MH0sai5leHBhbmQ9ZnVuY3Rpb24oQSx2LEMpe3ZhciB3PTAsUz0wO3c9KDEmQSk8PDV8QT4+PjI3O2Zvcih2YXIgTD0yMztMPj0xNTtM''@;'; put 'put ''LT00KXc8PD02LHd8PUE+Pj5MJjYzO2ZvcihMPTExO0w+PTM7TC09NClTfD1BPj4+TCY2MyxTPDw9NjtTfD0oMzEmQSk8PDF8QT4+PjMxLHZbQyswXT13Pj4+MCx2W0MrMV09Uz4+PjB9O3ZhciB5PVsxNCwwLDQsMTUsMTMsNywxLDQsMiwxNCwxNSwyLDExLDEzLDgsMSwzLDEwLDEwLDYsNiwx''@;'; put 'put ''MiwxMiwxMSw1LDksOSw1LDAsMyw3LDgsNCwxNSwxLDEyLDE0LDgsOCwyLDEzLDQsNiw5LDIsMSwxMSw3LDE1LDUsMTIsMTEsOSwzLDcsMTQsMywxMCwxMCwwLDUsNiwwLDEzLDE1LDMsMSwxMyw4LDQsMTQsNyw2LDE1LDExLDIsMyw4LDQsMTQsOSwxMiw3LDAsMiwxLDEzLDEwLDEyLDYsMCw5''@;'; put 'put ''LDUsMTEsMTAsNSwwLDEzLDE0LDgsNywxMCwxMSwxLDEwLDMsNCwxNSwxMyw0LDEsMiw1LDExLDgsNiwxMiw3LDYsMTIsOSwwLDMsNSwyLDE0LDE1LDksMTAsMTMsMCw3LDksMCwxNCw5LDYsMywzLDQsMTUsNiw1LDEwLDEsMiwxMyw4LDEyLDUsNywxNCwxMSwxMiw0LDExLDIsMTUsOCwxLDEz''@;'; put 'put ''LDEsNiwxMCw0LDEzLDksMCw4LDYsMTUsOSwzLDgsMCw3LDExLDQsMSwxNSwyLDE0LDEyLDMsNSwxMSwxMCw1LDE0LDIsNywxMiw3LDEzLDEzLDgsMTQsMTEsMyw1LDAsNiw2LDE1LDksMCwxMCwzLDEsNCwyLDcsOCwyLDUsMTIsMTEsMSwxMiwxMCw0LDE0LDE1LDksMTAsMyw2LDE1LDksMCww''@;'; put 'put ''LDYsMTIsMTAsMTEsMSw3LDEzLDEzLDgsMTUsOSwxLDQsMyw1LDE0LDExLDUsMTIsMiw3LDgsMiw0LDE0LDIsMTQsMTIsMTEsNCwyLDEsMTIsNyw0LDEwLDcsMTEsMTMsNiwxLDgsNSw1LDAsMywxNSwxNSwxMCwxMywzLDAsOSwxNCw4LDksNiw0LDExLDIsOCwxLDEyLDExLDcsMTAsMSwxMywx''@;'; put 'put ''NCw3LDIsOCwxMywxNSw2LDksMTUsMTIsMCw1LDksNiwxMCwzLDQsMCw1LDE0LDMsMTIsMTAsMSwxNSwxMCw0LDE1LDIsOSw3LDIsMTIsNiw5LDgsNSwwLDYsMTMsMSwzLDEzLDQsMTQsMTQsMCw3LDExLDUsMywxMSw4LDksNCwxNCwzLDE1LDIsNSwxMiwyLDksOCw1LDEyLDE1LDMsMTAsNywx''@;'; put 'put ''MSwwLDE0LDQsMSwxMCw3LDEsNiwxMywwLDExLDgsNiwxMyw0LDEzLDExLDAsMiwxMSwxNCw3LDE1LDQsMCw5LDgsMSwxMywxMCwzLDE0LDEyLDMsOSw1LDcsMTIsNSwyLDEwLDE1LDYsOCwxLDYsMSw2LDQsMTEsMTEsMTMsMTMsOCwxMiwxLDMsNCw3LDEwLDE0LDcsMTAsOSwxNSw1LDYsMCw4''@;'; put 'put ''LDE1LDAsMTQsNSwyLDksMywyLDEyLDEzLDEsMiwxNSw4LDEzLDQsOCw2LDEwLDE1LDMsMTEsNywxLDQsMTAsMTIsOSw1LDMsNiwxNCwxMSw1LDAsMCwxNCwxMiw5LDcsMiw3LDIsMTEsMSw0LDE0LDEsNyw5LDQsMTIsMTAsMTQsOCwyLDEzLDAsMTUsNiwxMiwxMCw5LDEzLDAsMTUsMywzLDUs''@;'; put 'put ''NSw2LDgsMTFdO2ouc3Vic3RpdHV0ZT1mdW5jdGlvbihBLHYpe2Zvcih2YXIgQz0wLHc9MDt3PDQ7dysrKUM8PD00LEN8PXlbNjQqdysoQT4+PjE4LTYqdyY2MyldO2Zvcih3PTA7dzw0O3crKylDPDw9NCxDfD15WzI1Nis2NCp3Kyh2Pj4+MTgtNip3JjYzKV07cmV0dXJuIEM+Pj4wfTt2YXIg''@;'; put 'put ''Yz1bMTYsMjUsMTIsMTEsMywyMCw0LDE1LDMxLDE3LDksNiwyNywxNCwxLDIyLDMwLDI0LDgsMTgsMCw1LDI5LDIzLDEzLDE5LDIsMjYsMTAsMjEsMjgsN107ai5wZXJtdXRlPWZ1bmN0aW9uKEEpe2Zvcih2YXIgdj0wLEM9MDtDPGMubGVuZ3RoO0MrKyl2PDw9MSx2fD1BPj4+Y1tDXSYxO3Jl''@;'; put 'put ''dHVybiB2Pj4+MH0sai5wYWRTcGxpdD1mdW5jdGlvbihBLHYsQyl7Zm9yKHZhciB3PUEudG9TdHJpbmcoMik7dy5sZW5ndGg8djspdz0iMCIrdztmb3IodmFyIFM9W10sTD0wO0w8djtMKz1DKVMucHVzaCh3LnNsaWNlKEwsTCtDKSk7cmV0dXJuIFMuam9pbigiICIpfX0sNjMzNjEoZmUsaixo''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIHMseT1oKDYxODg1KSxjPWgoODM3OTgpO3RyeXtzPVtdLl9fcHJvdG9fXz09PUFycmF5LnByb3RvdHlwZX1jYXRjaCh3KXtpZighd3x8Im9iamVjdCIhPXR5cGVvZiB3fHwhKCJjb2RlImluIHcpfHwiRVJSX1BST1RPX0FDQ0VTUyIhPT13LmNvZGUpdGhyb3cg''@;'; put 'put ''d312YXIgQT0hIXMmJmMmJmMoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIiksdj1PYmplY3QsQz12LmdldFByb3RvdHlwZU9mO2ZlLmV4cG9ydHM9QSYmImZ1bmN0aW9uIj09dHlwZW9mIEEuZ2V0P3koW0EuZ2V0XSk6ImZ1bmN0aW9uIj09dHlwZW9mIEMmJmZ1bmN0aW9uKFMpe3JldHVy''@;'; put 'put ''biBDKG51bGw9PVM/Uzp2KFMpKX19LDQ1NzAoZmUpeyJ1c2Ugc3RyaWN0Ijt2YXIgaj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fCExO2lmKGopdHJ5e2ooe30sImEiLHt2YWx1ZToxfSl9Y2F0Y2h7aj0hMX1mZS5leHBvcnRzPWp9LDE3NTYoZmUpeyJ1c2Ugc3RyaWN0IjtmZS5leHBvcnRzPUV2''@;'; put 'put ''YWxFcnJvcn0sMzc2NDAoZmUpeyJ1c2Ugc3RyaWN0IjtmZS5leHBvcnRzPUVycm9yfSw3NzkzMyhmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9UmFuZ2VFcnJvcn0sNjYxMyhmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9UmVmZXJlbmNlRXJyb3J9LDU4NDEzKGZlKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7ZmUuZXhwb3J0cz1TeW50YXhFcnJvcn0sNDY3NTgoZmUpeyJ1c2Ugc3RyaWN0IjtmZS5leHBvcnRzPVR5cGVFcnJvcn0sNTI4NihmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9VVJJRXJyb3J9LDY1ODkxKGZlKXsidXNlIHN0cmljdCI7ZmUuZXhwb3J0cz1PYmplY3R9LDQ0MzU2KGZl''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIHksaj0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3Q/UmVmbGVjdDpudWxsLGg9aiYmImZ1bmN0aW9uIj09dHlwZW9mIGouYXBwbHk/ai5hcHBseTpmdW5jdGlvbihxLHJlLG1lKXtyZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwocSxyZSxtZSl9''@;'; put 'put ''O3k9aiYmImZ1bmN0aW9uIj09dHlwZW9mIGoub3duS2V5cz9qLm93bktleXM6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbihxKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocSkpfTpm''@;'; put 'put ''dW5jdGlvbihxKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocSl9O3ZhciBzPU51bWJlci5pc05hTnx8ZnVuY3Rpb24ocSl7cmV0dXJuIHEhPXF9O2Z1bmN0aW9uIEEoKXtBLmluaXQuY2FsbCh0aGlzKX1mZS5leHBvcnRzPUEsZmUuZXhwb3J0cy5vbmNlPWZ1bmN0aW9uIHoo''@;'; put 'put ''VyxxKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmUsbWUpe2Z1bmN0aW9uIENlKGtlKXtXLnJlbW92ZUxpc3RlbmVyKHEsSWUpLG1lKGtlKX1mdW5jdGlvbiBJZSgpeyJmdW5jdGlvbiI9PXR5cGVvZiBXLnJlbW92ZUxpc3RlbmVyJiZXLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsQ2Up''@;'; put 'put ''LHJlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9RihXLHEsSWUse29uY2U6ITB9KSwiZXJyb3IiIT09cSYmZnVuY3Rpb24gWShXLHEscmUpeyJmdW5jdGlvbiI9PXR5cGVvZiBXLm9uJiZGKFcsImVycm9yIixxLHJlKX0oVyxDZSx7b25jZTohMH0pfSl9LEEuRXZlbnRFbWl0dGVyPUEsQS5w''@;'; put 'put ''cm90b3R5cGUuX2V2ZW50cz12b2lkIDAsQS5wcm90b3R5cGUuX2V2ZW50c0NvdW50PTAsQS5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDA7dmFyIHY9MTA7ZnVuY3Rpb24gQyhXKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgVyl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImxpc3RlbmVy''@;'; put 'put ''IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgVyl9ZnVuY3Rpb24gdyhXKXtyZXR1cm4gdm9pZCAwPT09Vy5fbWF4TGlzdGVuZXJzP0EuZGVmYXVsdE1heExpc3RlbmVyczpXLl9tYXhMaXN0ZW5lcnN9ZnVuY3Rpb24gUyhXLHEscmUs''@;'; put 'put ''bWUpe3ZhciBDZSxJZSxrZTtpZihDKHJlKSx2b2lkIDA9PT0oSWU9Vy5fZXZlbnRzKT8oSWU9Vy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksVy5fZXZlbnRzQ291bnQ9MCk6KHZvaWQgMCE9PUllLm5ld0xpc3RlbmVyJiYoVy5lbWl0KCJuZXdMaXN0ZW5lciIscSxyZS5saXN0ZW5lcj9y''@;'; put 'put ''ZS5saXN0ZW5lcjpyZSksSWU9Vy5fZXZlbnRzKSxrZT1JZVtxXSksdm9pZCAwPT09a2Upa2U9SWVbcV09cmUsKytXLl9ldmVudHNDb3VudDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBrZT9rZT1JZVtxXT1tZT9bcmUsa2VdOltrZSxyZV06bWU/a2UudW5zaGlmdChyZSk6a2UucHVzaChy''@;'; put 'put ''ZSksKENlPXcoVykpPjAmJmtlLmxlbmd0aD5DZSYmIWtlLndhcm5lZCl7a2Uud2FybmVkPSEwO3ZhciBxZT1uZXcgRXJyb3IoIlBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gIitrZS5sZW5ndGgrIiAiK1N0cmluZyhxKSsiIGxpc3RlbmVycyBhZGRlZC4gVXNl''@;'; put 'put ''IGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQiKTtxZS5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLHFlLmVtaXR0ZXI9VyxxZS50eXBlPXEscWUuY291bnQ9a2UubGVuZ3RoLGZ1bmN0aW9uIGMoVyl7Y29uc29sZSYmY29uc29sZS53YXJuJiZj''@;'; put 'put ''b25zb2xlLndhcm4oVyl9KHFlKX1yZXR1cm4gV31mdW5jdGlvbiBMKCl7aWYoIXRoaXMuZmlyZWQpcmV0dXJuIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCwwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLmxpc3RlbmVyLmNh''@;'; put 'put ''bGwodGhpcy50YXJnZXQpOnRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsYXJndW1lbnRzKX1mdW5jdGlvbiBSKFcscSxyZSl7dmFyIG1lPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDpXLHR5cGU6cSxsaXN0ZW5lcjpyZX0sQ2U9TC5iaW5kKG1lKTtyZXR1cm4gQ2UubGlz''@;'; put 'put ''dGVuZXI9cmUsbWUud3JhcEZuPUNlLENlfWZ1bmN0aW9uIHgoVyxxLHJlKXt2YXIgbWU9Vy5fZXZlbnRzO2lmKHZvaWQgMD09PW1lKXJldHVybltdO3ZhciBDZT1tZVtxXTtyZXR1cm4gdm9pZCAwPT09Q2U/W106ImZ1bmN0aW9uIj09dHlwZW9mIENlP3JlP1tDZS5saXN0ZW5lcnx8Q2VdOltD''@;'; put 'put ''ZV06cmU/ZnVuY3Rpb24gTihXKXtmb3IodmFyIHE9bmV3IEFycmF5KFcubGVuZ3RoKSxyZT0wO3JlPHEubGVuZ3RoOysrcmUpcVtyZV09V1tyZV0ubGlzdGVuZXJ8fFdbcmVdO3JldHVybiBxfShDZSk6SChDZSxDZS5sZW5ndGgpfWZ1bmN0aW9uIFUoVyl7dmFyIHE9dGhpcy5fZXZlbnRzO2lm''@;'; put 'put ''KHZvaWQgMCE9PXEpe3ZhciByZT1xW1ddO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByZSlyZXR1cm4gMTtpZih2b2lkIDAhPT1yZSlyZXR1cm4gcmUubGVuZ3RofXJldHVybiAwfWZ1bmN0aW9uIEgoVyxxKXtmb3IodmFyIHJlPW5ldyBBcnJheShxKSxtZT0wO21lPHE7KyttZSlyZVttZV09V1tt''@;'; put 'put ''ZV07cmV0dXJuIHJlfWZ1bmN0aW9uIEYoVyxxLHJlLG1lKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgVy5vbiltZS5vbmNlP1cub25jZShxLHJlKTpXLm9uKHEscmUpO2Vsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFcuYWRkRXZlbnRMaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUg''@;'; put 'put ''ImVtaXR0ZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgVyk7Vy5hZGRFdmVudExpc3RlbmVyKHEsZnVuY3Rpb24gQ2UoSWUpe21lLm9uY2UmJlcucmVtb3ZlRXZlbnRMaXN0ZW5lcihxLENlKSxyZShJZSl9KX19T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KEEsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB2fSxzZXQ6ZnVuY3Rpb24oVyl7aWYoIm51bWJlciIhPXR5cGVvZiBXfHxXPDB8fHMoVykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAi''@;'; put 'put ''ZGVmYXVsdE1heExpc3RlbmVycyIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytXKyIuIik7dj1XfX0pLEEuaW5pdD1mdW5jdGlvbigpeyh2b2lkIDA9PT10aGlzLl9ldmVudHN8fHRoaXMuX2V2ZW50cz09PU9iamVjdC5nZXRQ''@;'; put 'put ''cm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSYmKHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH0sQS5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9u''@;'; put 'put ''KHEpe2lmKCJudW1iZXIiIT10eXBlb2YgcXx8cTwwfHxzKHEpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrcSsiLiIpO3JldHVybiB0aGlzLl9tYXhMaXN0''@;'; put 'put ''ZW5lcnM9cSx0aGlzfSxBLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdyh0aGlzKX0sQS5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihxKXtmb3IodmFyIHJlPVtdLG1lPTE7bWU8YXJndW1lbnRzLmxlbmd0aDttZSsrKXJlLnB1c2goYXJndW1lbnRzW21lXSk7''@;'; put 'put ''dmFyIENlPSJlcnJvciI9PT1xLEllPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1JZSlDZT1DZSYmdm9pZCAwPT09SWUuZXJyb3I7ZWxzZSBpZighQ2UpcmV0dXJuITE7aWYoQ2Upe3ZhciBrZTtpZihyZS5sZW5ndGg+MCYmKGtlPXJlWzBdKSxrZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IGtl''@;'; put 'put ''O3ZhciBxZT1uZXcgRXJyb3IoIlVuaGFuZGxlZCBlcnJvci4iKyhrZT8iICgiK2tlLm1lc3NhZ2UrIikiOiIiKSk7dGhyb3cgcWUuY29udGV4dD1rZSxxZX12YXIgWD1JZVtxXTtpZih2b2lkIDA9PT1YKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBYKWgoWCx0aGlzLHJlKTtlbHNl''@;'; put 'put ''e3ZhciBmPVgubGVuZ3RoLGI9SChYLGYpO2ZvcihtZT0wO21lPGY7KyttZSloKGJbbWVdLHRoaXMscmUpfXJldHVybiEwfSxBLnByb3RvdHlwZS5vbj1BLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihxLHJlKXtyZXR1cm4gUyh0aGlzLHEscmUsITEpfSxBLnByb3RvdHlwZS5wcmVw''@;'; put 'put ''ZW5kTGlzdGVuZXI9ZnVuY3Rpb24ocSxyZSl7cmV0dXJuIFModGhpcyxxLHJlLCEwKX0sQS5wcm90b3R5cGUub25jZT1mdW5jdGlvbihxLHJlKXtyZXR1cm4gQyhyZSksdGhpcy5vbihxLFIodGhpcyxxLHJlKSksdGhpc30sQS5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlv''@;'; put 'put ''bihxLHJlKXtyZXR1cm4gQyhyZSksdGhpcy5wcmVwZW5kTGlzdGVuZXIocSxSKHRoaXMscSxyZSkpLHRoaXN9LEEucHJvdG90eXBlLm9mZj1BLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihxLHJlKXt2YXIgbWUsQ2UsSWUsa2UscWU7aWYoQyhyZSksdm9pZCAwPT09KENlPXRo''@;'; put 'put ''aXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09KG1lPUNlW3FdKSlyZXR1cm4gdGhpcztpZihtZT09PXJlfHxtZS5saXN0ZW5lcj09PXJlKTA9PT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOihkZWxldGUgQ2VbcV0sQ2UucmVt''@;'; put 'put ''b3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLHEsbWUubGlzdGVuZXJ8fHJlKSk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgbWUpe2ZvcihJZT0tMSxrZT1tZS5sZW5ndGgtMTtrZT49MDtrZS0tKWlmKG1lW2tlXT09PXJlfHxtZVtrZV0ubGlzdGVuZXI9PT1yZSl7''@;'; put 'put ''cWU9bWVba2VdLmxpc3RlbmVyLEllPWtlO2JyZWFrfWlmKEllPDApcmV0dXJuIHRoaXM7MD09PUllP21lLnNoaWZ0KCk6ZnVuY3Rpb24gVihXLHEpe2Zvcig7cSsxPFcubGVuZ3RoO3ErKylXW3FdPVdbcSsxXTtXLnBvcCgpfShtZSxJZSksMT09PW1lLmxlbmd0aCYmKENlW3FdPW1lWzBdKSx2''@;'; put 'put ''b2lkIDAhPT1DZS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIscSxxZXx8cmUpfXJldHVybiB0aGlzfSxBLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24ocSl7dmFyIHJlLG1lLENlO2lmKHZvaWQgMD09PShtZT10aGlzLl9ldmVudHMpKXJl''@;'; put 'put ''dHVybiB0aGlzO2lmKHZvaWQgMD09PW1lLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCk6dm9pZCAwIT09bWVbcV0mJigwPT09LS10aGlzLl9ldmVudHNDb3VudD90''@;'; put 'put ''aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTpkZWxldGUgbWVbcV0pLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBrZSxJZT1PYmplY3Qua2V5cyhtZSk7Zm9yKENlPTA7Q2U8SWUubGVuZ3RoOysrQ2UpInJlbW92ZUxpc3RlbmVyIiE9PShrZT1JZVtDZV0pJiZ0aGlz''@;'; put 'put ''LnJlbW92ZUFsbExpc3RlbmVycyhrZSk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCJyZW1vdmVMaXN0ZW5lciIpLHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTAsdGhpc31pZigiZnVuY3Rpb24iPT10eXBlb2YocmU9bWVbcV0pKXRo''@;'; put 'put ''aXMucmVtb3ZlTGlzdGVuZXIocSxyZSk7ZWxzZSBpZih2b2lkIDAhPT1yZSlmb3IoQ2U9cmUubGVuZ3RoLTE7Q2U+PTA7Q2UtLSl0aGlzLnJlbW92ZUxpc3RlbmVyKHEscmVbQ2VdKTtyZXR1cm4gdGhpc30sQS5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKHEpe3JldHVybiB4KHRoaXMs''@;'; put 'put ''cSwhMCl9LEEucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbihxKXtyZXR1cm4geCh0aGlzLHEsITEpfSxBLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24oVyxxKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgVy5saXN0ZW5lckNvdW50P1cubGlzdGVuZXJDb3VudChxKTpVLmNhbGwoVyxx''@;'; put 'put ''KX0sQS5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1VLEEucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD95KHRoaXMuX2V2ZW50cyk6W119fSwxODIxMShmZSxqLGgpe3ZhciB5PWgoMjcwNTQpLkJ1ZmZlcixjPWgoMzQ3MjUpO2ZlLmV4''@;'; put 'put ''cG9ydHM9ZnVuY3Rpb24gcyhBLHYsQyx3KXtpZih5LmlzQnVmZmVyKEEpfHwoQT15LmZyb20oQSwiYmluYXJ5IikpLHYmJih5LmlzQnVmZmVyKHYpfHwodj15LmZyb20odiwiYmluYXJ5IikpLDghPT12Lmxlbmd0aCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNhbHQgc2hvdWxkIGJlIEJ1ZmZl''@;'; put 'put ''ciB3aXRoIDggYnl0ZSBsZW5ndGgiKTtmb3IodmFyIFM9Qy84LEw9eS5hbGxvYyhTKSxSPXkuYWxsb2Mod3x8MCkseD15LmFsbG9jKDApO1M+MHx8dz4wOyl7dmFyIFU9bmV3IGM7VS51cGRhdGUoeCksVS51cGRhdGUoQSksdiYmVS51cGRhdGUodikseD1VLmRpZ2VzdCgpO3ZhciBIPTA7aWYo''@;'; put 'put ''Uz4wKXt2YXIgVj1MLmxlbmd0aC1TO0g9TWF0aC5taW4oUyx4Lmxlbmd0aCkseC5jb3B5KEwsViwwLEgpLFMtPUh9aWYoSDx4Lmxlbmd0aCYmdz4wKXt2YXIgTj1SLmxlbmd0aC13LHo9TWF0aC5taW4odyx4Lmxlbmd0aC1IKTt4LmNvcHkoUixOLEgsSCt6KSx3LT16fX1yZXR1cm4geC5maWxs''@;'; put 'put ''KDApLHtrZXk6TCxpdjpSfX19LDg5OTk5KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNTgyMzkpLGM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxzPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZmUuZXhwb3J0cz1mdW5jdGlvbihMLFIseCl7aWYoIXkoUikpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7dmFyIFU7YXJndW1lbnRzLmxlbmd0aD49MyYmKFU9eCksZnVuY3Rpb24gdyhTKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09Yy5jYWxsKFMpfShMKT9mdW5jdGlvbihMLFIseCl7Zm9yKHZhciBVPTAsSD1MLmxl''@;'; put 'put ''bmd0aDtVPEg7VSsrKXMuY2FsbChMLFUpJiYobnVsbD09eD9SKExbVV0sVSxMKTpSLmNhbGwoeCxMW1VdLFUsTCkpfShMLFIsVSk6InN0cmluZyI9PXR5cGVvZiBMP2Z1bmN0aW9uKEwsUix4KXtmb3IodmFyIFU9MCxIPUwubGVuZ3RoO1U8SDtVKyspbnVsbD09eD9SKEwuY2hhckF0KFUpLFUs''@;'; put 'put ''TCk6Ui5jYWxsKHgsTC5jaGFyQXQoVSksVSxMKX0oTCxSLFUpOmZ1bmN0aW9uKEwsUix4KXtmb3IodmFyIFUgaW4gTClzLmNhbGwoTCxVKSYmKG51bGw9PXg/UihMW1VdLFUsTCk6Ui5jYWxsKHgsTFtVXSxVLEwpKX0oTCxSLFUpfX0sNDkxMzIoZmUpeyJ1c2Ugc3RyaWN0Ijt2YXIgaD1PYmpl''@;'; put 'put ''Y3QucHJvdG90eXBlLnRvU3RyaW5nLHk9TWF0aC5tYXgscz1mdW5jdGlvbih3LFMpe2Zvcih2YXIgTD1bXSxSPTA7Ujx3Lmxlbmd0aDtSKz0xKUxbUl09d1tSXTtmb3IodmFyIHg9MDt4PFMubGVuZ3RoO3grPTEpTFt4K3cubGVuZ3RoXT1TW3hdO3JldHVybiBMfTtmZS5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKHcpe3ZhciBTPXRoaXM7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFN8fCJbb2JqZWN0IEZ1bmN0aW9uXSIhPT1oLmFwcGx5KFMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgIitTKTtmb3IodmFyIFIsTD1mdW5j''@;'; put 'put ''dGlvbih3KXtmb3IodmFyIEw9W10sUj0xLHg9MDtSPHcubGVuZ3RoO1IrPTEseCs9MSlMW3hdPXdbUl07cmV0dXJuIEx9KGFyZ3VtZW50cyksVT15KDAsUy5sZW5ndGgtTC5sZW5ndGgpLEg9W10sVj0wO1Y8VTtWKyspSFtWXT0iJCIrVjtpZihSPUZ1bmN0aW9uKCJiaW5kZXIiLCJyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24gKCIrZnVuY3Rpb24oQyl7Zm9yKHZhciBTPSIiLEw9MDtMPEMubGVuZ3RoO0wrPTEpUys9Q1tMXSxMKzE8Qy5sZW5ndGgmJihTKz0iLCIpO3JldHVybiBTfShIKSsiKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0iKShmdW5jdGlvbigpe2lmKHRoaXMg''@;'; put 'put ''aW5zdGFuY2VvZiBSKXt2YXIgej1TLmFwcGx5KHRoaXMscyhMLGFyZ3VtZW50cykpO3JldHVybiBPYmplY3Qoeik9PT16P3o6dGhpc31yZXR1cm4gUy5hcHBseSh3LHMoTCxhcmd1bWVudHMpKX0pLFMucHJvdG90eXBlKXt2YXIgTj1mdW5jdGlvbigpe307Ti5wcm90b3R5cGU9Uy5wcm90b3R5''@;'; put 'put ''cGUsUi5wcm90b3R5cGU9bmV3IE4sTi5wcm90b3R5cGU9bnVsbH1yZXR1cm4gUn19LDY1OTkyKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNDkxMzIpO2ZlLmV4cG9ydHM9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmR8fHl9LDkwMjU4KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5LGM9''@;'; put 'put ''aCg2NTg5MSkscz1oKDM3NjQwKSxBPWgoMTc1Niksdj1oKDc3OTMzKSxDPWgoNjYxMyksdz1oKDU4NDEzKSxTPWgoNDY3NTgpLEw9aCg1Mjg2KSxSPWgoNzA4MzcpLHg9aCgzMzgzKSxVPWgoNzkwMzkpLEg9aCgxNDk4MSksVj1oKDgwOTc1KSxOPWgoNTMzNyksej1oKDQ5MTIpLFk9RnVuY3Rp''@;'; put 'put ''b24sRj1mdW5jdGlvbihhZSl7dHJ5e3JldHVybiBZKCcidXNlIHN0cmljdCI7IHJldHVybiAoJythZSsiKS5jb25zdHJ1Y3RvcjsiKSgpfWNhdGNoe319LFc9aCg4Mzc5OCkscT1oKDQ1NzApLHJlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IFN9LG1lPVc/ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHJl''@;'; put 'put ''fWNhdGNoe3RyeXtyZXR1cm4gVyhhcmd1bWVudHMsImNhbGxlZSIpLmdldH1jYXRjaHtyZXR1cm4gcmV9fX0oKTpyZSxDZT1oKDE5OTAwKSgpLEllPWgoOTE2MjcpLGtlPWgoMjcyMDMpLHFlPWgoOTc2NjkpLFg9aCg3OTQ3NyksZj1oKDU5NzA1KSxiPXt9LGs9dHlwZW9mIFVpbnQ4QXJyYXk+''@;'; put 'put ''InUifHwhSWU/eTpJZShVaW50OEFycmF5KSxNPXtfX3Byb3RvX186bnVsbCwiJUFnZ3JlZ2F0ZUVycm9yJSI6dHlwZW9mIEFnZ3JlZ2F0ZUVycm9yPiJ1Ij95OkFnZ3JlZ2F0ZUVycm9yLCIlQXJyYXklIjpBcnJheSwiJUFycmF5QnVmZmVyJSI6dHlwZW9mIEFycmF5QnVmZmVyPiJ1Ij95OkFy''@;'; put 'put ''cmF5QnVmZmVyLCIlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUiOkNlJiZJZT9JZShbXVtTeW1ib2wuaXRlcmF0b3JdKCkpOnksIiVBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUlIjp5LCIlQXN5bmNGdW5jdGlvbiUiOmIsIiVBc3luY0dlbmVyYXRvciUiOmIsIiVBc3luY0dlbmVyYXRv''@;'; put 'put ''ckZ1bmN0aW9uJSI6YiwiJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlIjpiLCIlQXRvbWljcyUiOnR5cGVvZiBBdG9taWNzPiJ1Ij95OkF0b21pY3MsIiVCaWdJbnQlIjp0eXBlb2YgQmlnSW50PiJ1Ij95OkJpZ0ludCwiJUJpZ0ludDY0QXJyYXklIjp0eXBlb2YgQmlnSW50NjRBcnJheT4idSI/''@;'; put 'put ''eTpCaWdJbnQ2NEFycmF5LCIlQmlnVWludDY0QXJyYXklIjp0eXBlb2YgQmlnVWludDY0QXJyYXk+InUiP3k6QmlnVWludDY0QXJyYXksIiVCb29sZWFuJSI6Qm9vbGVhbiwiJURhdGFWaWV3JSI6dHlwZW9mIERhdGFWaWV3PiJ1Ij95OkRhdGFWaWV3LCIlRGF0ZSUiOkRhdGUsIiVkZWNvZGVV''@;'; put 'put ''UkklIjpkZWNvZGVVUkksIiVkZWNvZGVVUklDb21wb25lbnQlIjpkZWNvZGVVUklDb21wb25lbnQsIiVlbmNvZGVVUkklIjplbmNvZGVVUkksIiVlbmNvZGVVUklDb21wb25lbnQlIjplbmNvZGVVUklDb21wb25lbnQsIiVFcnJvciUiOnMsIiVldmFsJSI6ZXZhbCwiJUV2YWxFcnJvciUiOkEs''@;'; put 'put ''IiVGbG9hdDE2QXJyYXklIjp0eXBlb2YgRmxvYXQxNkFycmF5PiJ1Ij95OkZsb2F0MTZBcnJheSwiJUZsb2F0MzJBcnJheSUiOnR5cGVvZiBGbG9hdDMyQXJyYXk+InUiP3k6RmxvYXQzMkFycmF5LCIlRmxvYXQ2NEFycmF5JSI6dHlwZW9mIEZsb2F0NjRBcnJheT4idSI/eTpGbG9hdDY0QXJy''@;'; put 'put ''YXksIiVGaW5hbGl6YXRpb25SZWdpc3RyeSUiOnR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT4idSI/eTpGaW5hbGl6YXRpb25SZWdpc3RyeSwiJUZ1bmN0aW9uJSI6WSwiJUdlbmVyYXRvckZ1bmN0aW9uJSI6YiwiJUludDhBcnJheSUiOnR5cGVvZiBJbnQ4QXJyYXk+InUiP3k6SW50OEFy''@;'; put 'put ''cmF5LCIlSW50MTZBcnJheSUiOnR5cGVvZiBJbnQxNkFycmF5PiJ1Ij95OkludDE2QXJyYXksIiVJbnQzMkFycmF5JSI6dHlwZW9mIEludDMyQXJyYXk+InUiP3k6SW50MzJBcnJheSwiJWlzRmluaXRlJSI6aXNGaW5pdGUsIiVpc05hTiUiOmlzTmFOLCIlSXRlcmF0b3JQcm90b3R5cGUlIjpD''@;'; put 'put ''ZSYmSWU/SWUoSWUoW11bU3ltYm9sLml0ZXJhdG9yXSgpKSk6eSwiJUpTT04lIjoib2JqZWN0Ij09dHlwZW9mIEpTT04/SlNPTjp5LCIlTWFwJSI6dHlwZW9mIE1hcD4idSI/eTpNYXAsIiVNYXBJdGVyYXRvclByb3RvdHlwZSUiOnR5cGVvZiBNYXA+InUifHwhQ2V8fCFJZT95OkllKChuZXcg''@;'; put 'put ''TWFwKVtTeW1ib2wuaXRlcmF0b3JdKCkpLCIlTWF0aCUiOk1hdGgsIiVOdW1iZXIlIjpOdW1iZXIsIiVPYmplY3QlIjpjLCIlT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciUiOlcsIiVwYXJzZUZsb2F0JSI6cGFyc2VGbG9hdCwiJXBhcnNlSW50JSI6cGFyc2VJbnQsIiVQcm9taXNl''@;'; put 'put ''JSI6dHlwZW9mIFByb21pc2U+InUiP3k6UHJvbWlzZSwiJVByb3h5JSI6dHlwZW9mIFByb3h5PiJ1Ij95OlByb3h5LCIlUmFuZ2VFcnJvciUiOnYsIiVSZWZlcmVuY2VFcnJvciUiOkMsIiVSZWZsZWN0JSI6dHlwZW9mIFJlZmxlY3Q+InUiP3k6UmVmbGVjdCwiJVJlZ0V4cCUiOlJlZ0V4cCwi''@;'; put 'put ''JVNldCUiOnR5cGVvZiBTZXQ+InUiP3k6U2V0LCIlU2V0SXRlcmF0b3JQcm90b3R5cGUlIjp0eXBlb2YgU2V0PiJ1Inx8IUNlfHwhSWU/eTpJZSgobmV3IFNldClbU3ltYm9sLml0ZXJhdG9yXSgpKSwiJVNoYXJlZEFycmF5QnVmZmVyJSI6dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPiJ1Ij95''@;'; put 'put ''OlNoYXJlZEFycmF5QnVmZmVyLCIlU3RyaW5nJSI6U3RyaW5nLCIlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlIjpDZSYmSWU/SWUoIiJbU3ltYm9sLml0ZXJhdG9yXSgpKTp5LCIlU3ltYm9sJSI6Q2U/U3ltYm9sOnksIiVTeW50YXhFcnJvciUiOncsIiVUaHJvd1R5cGVFcnJvciUiOm1lLCIl''@;'; put 'put ''VHlwZWRBcnJheSUiOmssIiVUeXBlRXJyb3IlIjpTLCIlVWludDhBcnJheSUiOnR5cGVvZiBVaW50OEFycmF5PiJ1Ij95OlVpbnQ4QXJyYXksIiVVaW50OENsYW1wZWRBcnJheSUiOnR5cGVvZiBVaW50OENsYW1wZWRBcnJheT4idSI/eTpVaW50OENsYW1wZWRBcnJheSwiJVVpbnQxNkFycmF5''@;'; put 'put ''JSI6dHlwZW9mIFVpbnQxNkFycmF5PiJ1Ij95OlVpbnQxNkFycmF5LCIlVWludDMyQXJyYXklIjp0eXBlb2YgVWludDMyQXJyYXk+InUiP3k6VWludDMyQXJyYXksIiVVUklFcnJvciUiOkwsIiVXZWFrTWFwJSI6dHlwZW9mIFdlYWtNYXA+InUiP3k6V2Vha01hcCwiJVdlYWtSZWYlIjp0eXBl''@;'; put 'put ''b2YgV2Vha1JlZj4idSI/eTpXZWFrUmVmLCIlV2Vha1NldCUiOnR5cGVvZiBXZWFrU2V0PiJ1Ij95OldlYWtTZXQsIiVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUiOmYsIiVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklIjpYLCIlT2JqZWN0LmRlZmluZVByb3BlcnR5JSI6cSwiJU9iamVjdC5n''@;'; put 'put ''ZXRQcm90b3R5cGVPZiUiOmtlLCIlTWF0aC5hYnMlIjpSLCIlTWF0aC5mbG9vciUiOngsIiVNYXRoLm1heCUiOlUsIiVNYXRoLm1pbiUiOkgsIiVNYXRoLnBvdyUiOlYsIiVNYXRoLnJvdW5kJSI6TiwiJU1hdGguc2lnbiUiOnosIiVSZWZsZWN0LmdldFByb3RvdHlwZU9mJSI6cWV9O2lmKEll''@;'; put 'put ''KXRyeXtudWxsLmVycm9yfWNhdGNoKGFlKXt2YXIgQj1JZShJZShhZSkpO01bIiVFcnJvci5wcm90b3R5cGUlIl09Qn12YXIgSz1mdW5jdGlvbiBhZSh4ZSl7dmFyIGplO2lmKCIlQXN5bmNGdW5jdGlvbiUiPT09eGUpamU9RigiYXN5bmMgZnVuY3Rpb24gKCkge30iKTtlbHNlIGlmKCIlR2Vu''@;'; put 'put ''ZXJhdG9yRnVuY3Rpb24lIj09PXhlKWplPUYoImZ1bmN0aW9uKiAoKSB7fSIpO2Vsc2UgaWYoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI9PT14ZSlqZT1GKCJhc3luYyBmdW5jdGlvbiogKCkge30iKTtlbHNlIGlmKCIlQXN5bmNHZW5lcmF0b3IlIj09PXhlKXt2YXIgQWU9YWUoIiVBc3lu''@;'; put 'put ''Y0dlbmVyYXRvckZ1bmN0aW9uJSIpO0FlJiYoamU9QWUucHJvdG90eXBlKX1lbHNlIGlmKCIlQXN5bmNJdGVyYXRvclByb3RvdHlwZSUiPT09eGUpe3ZhciBEZT1hZSgiJUFzeW5jR2VuZXJhdG9yJSIpO0RlJiZJZSYmKGplPUllKERlLnByb3RvdHlwZSkpfXJldHVybiBNW3hlXT1qZSxqZX0s''@;'; put 'put ''Rz17X19wcm90b19fOm51bGwsIiVBcnJheUJ1ZmZlclByb3RvdHlwZSUiOlsiQXJyYXlCdWZmZXIiLCJwcm90b3R5cGUiXSwiJUFycmF5UHJvdG90eXBlJSI6WyJBcnJheSIsInByb3RvdHlwZSJdLCIlQXJyYXlQcm90b19lbnRyaWVzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImVudHJpZXMi''@;'; put 'put ''XSwiJUFycmF5UHJvdG9fZm9yRWFjaCUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJmb3JFYWNoIl0sIiVBcnJheVByb3RvX2tleXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwia2V5cyJdLCIlQXJyYXlQcm90b192YWx1ZXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwidmFsdWVzIl0sIiVBc3lu''@;'; put 'put ''Y0Z1bmN0aW9uUHJvdG90eXBlJSI6WyJBc3luY0Z1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVBc3luY0dlbmVyYXRvciUiOlsiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUlIjpbIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iLCJw''@;'; put 'put ''cm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUJvb2xlYW5Qcm90b3R5cGUlIjpbIkJvb2xlYW4iLCJwcm90b3R5cGUiXSwiJURhdGFWaWV3UHJvdG90eXBlJSI6WyJEYXRhVmlldyIsInByb3RvdHlwZSJdLCIlRGF0ZVByb3RvdHlwZSUiOlsiRGF0ZSIsInByb3RvdHlwZSJdLCIlRXJyb3JQcm90''@;'; put 'put ''b3R5cGUlIjpbIkVycm9yIiwicHJvdG90eXBlIl0sIiVFdmFsRXJyb3JQcm90b3R5cGUlIjpbIkV2YWxFcnJvciIsInByb3RvdHlwZSJdLCIlRmxvYXQzMkFycmF5UHJvdG90eXBlJSI6WyJGbG9hdDMyQXJyYXkiLCJwcm90b3R5cGUiXSwiJUZsb2F0NjRBcnJheVByb3RvdHlwZSUiOlsiRmxv''@;'; put 'put ''YXQ2NEFycmF5IiwicHJvdG90eXBlIl0sIiVGdW5jdGlvblByb3RvdHlwZSUiOlsiRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvciUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvclByb3RvdHlwZSUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJw''@;'; put 'put ''cm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUludDhBcnJheVByb3RvdHlwZSUiOlsiSW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQxNkFycmF5UHJvdG90eXBlJSI6WyJJbnQxNkFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQzMkFycmF5UHJvdG90eXBlJSI6WyJJbnQzMkFycmF5IiwicHJv''@;'; put 'put ''dG90eXBlIl0sIiVKU09OUGFyc2UlIjpbIkpTT04iLCJwYXJzZSJdLCIlSlNPTlN0cmluZ2lmeSUiOlsiSlNPTiIsInN0cmluZ2lmeSJdLCIlTWFwUHJvdG90eXBlJSI6WyJNYXAiLCJwcm90b3R5cGUiXSwiJU51bWJlclByb3RvdHlwZSUiOlsiTnVtYmVyIiwicHJvdG90eXBlIl0sIiVPYmpl''@;'; put 'put ''Y3RQcm90b3R5cGUlIjpbIk9iamVjdCIsInByb3RvdHlwZSJdLCIlT2JqUHJvdG9fdG9TdHJpbmclIjpbIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIl0sIiVPYmpQcm90b192YWx1ZU9mJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIl0sIiVQcm9taXNlUHJvdG90eXBl''@;'; put 'put ''JSI6WyJQcm9taXNlIiwicHJvdG90eXBlIl0sIiVQcm9taXNlUHJvdG9fdGhlbiUiOlsiUHJvbWlzZSIsInByb3RvdHlwZSIsInRoZW4iXSwiJVByb21pc2VfYWxsJSI6WyJQcm9taXNlIiwiYWxsIl0sIiVQcm9taXNlX3JlamVjdCUiOlsiUHJvbWlzZSIsInJlamVjdCJdLCIlUHJvbWlzZV9y''@;'; put 'put ''ZXNvbHZlJSI6WyJQcm9taXNlIiwicmVzb2x2ZSJdLCIlUmFuZ2VFcnJvclByb3RvdHlwZSUiOlsiUmFuZ2VFcnJvciIsInByb3RvdHlwZSJdLCIlUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlIjpbIlJlZmVyZW5jZUVycm9yIiwicHJvdG90eXBlIl0sIiVSZWdFeHBQcm90b3R5cGUlIjpbIlJl''@;'; put 'put ''Z0V4cCIsInByb3RvdHlwZSJdLCIlU2V0UHJvdG90eXBlJSI6WyJTZXQiLCJwcm90b3R5cGUiXSwiJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSI6WyJTaGFyZWRBcnJheUJ1ZmZlciIsInByb3RvdHlwZSJdLCIlU3RyaW5nUHJvdG90eXBlJSI6WyJTdHJpbmciLCJwcm90b3R5cGUiXSwi''@;'; put 'put ''JVN5bWJvbFByb3RvdHlwZSUiOlsiU3ltYm9sIiwicHJvdG90eXBlIl0sIiVTeW50YXhFcnJvclByb3RvdHlwZSUiOlsiU3ludGF4RXJyb3IiLCJwcm90b3R5cGUiXSwiJVR5cGVkQXJyYXlQcm90b3R5cGUlIjpbIlR5cGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVR5cGVFcnJvclByb3RvdHlw''@;'; put 'put ''ZSUiOlsiVHlwZUVycm9yIiwicHJvdG90eXBlIl0sIiVVaW50OEFycmF5UHJvdG90eXBlJSI6WyJVaW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUiOlsiVWludDhDbGFtcGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQxNkFycmF5UHJvdG90''@;'; put 'put ''eXBlJSI6WyJVaW50MTZBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDMyQXJyYXlQcm90b3R5cGUlIjpbIlVpbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVVUklFcnJvclByb3RvdHlwZSUiOlsiVVJJRXJyb3IiLCJwcm90b3R5cGUiXSwiJVdlYWtNYXBQcm90b3R5cGUlIjpbIldlYWtNYXAi''@;'; put 'put ''LCJwcm90b3R5cGUiXSwiJVdlYWtTZXRQcm90b3R5cGUlIjpbIldlYWtTZXQiLCJwcm90b3R5cGUiXX0sRD1oKDY1OTkyKSxwPWgoNzgzNjgpLEk9RC5jYWxsKGYsQXJyYXkucHJvdG90eXBlLmNvbmNhdCksdWU9RC5jYWxsKFgsQXJyYXkucHJvdG90eXBlLnNwbGljZSksbmU9RC5jYWxsKGYs''@;'; put 'put ''U3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSxfZT1ELmNhbGwoZixTdHJpbmcucHJvdG90eXBlLnNsaWNlKSxQZT1ELmNhbGwoZixSZWdFeHAucHJvdG90eXBlLmV4ZWMpLG90PS9bXiUuW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwy''@;'; put 'put ''KVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwlJCkpL2csbHQ9L1xcKFxcKT8vZyxSZT1mdW5jdGlvbih4ZSxqZSl7dmFyIERlLEFlPXhlO2lmKHAoRyxBZSkmJihBZT0iJSIrKERlPUdbQWVdKVswXSsiJSIpLHAoTSxBZSkpe3ZhciBGZT1NW0FlXTtpZihGZT09PWImJihGZT1LKEFlKSks''@;'; put 'put ''dHlwZW9mIEZlPiJ1IiYmIWplKXRocm93IG5ldyBTKCJpbnRyaW5zaWMgIit4ZSsiIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlISIpO3JldHVybnthbGlhczpEZSxuYW1lOkFlLHZhbHVlOkZlfX10aHJvdyBuZXcgdygiaW50cmluc2ljICIreGUr''@;'; put 'put ''IiBkb2VzIG5vdCBleGlzdCEiKX07ZmUuZXhwb3J0cz1mdW5jdGlvbih4ZSxqZSl7aWYoInN0cmluZyIhPXR5cGVvZiB4ZXx8MD09PXhlLmxlbmd0aCl0aHJvdyBuZXcgUygiaW50cmluc2ljIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtpZihhcmd1bWVudHMubGVuZ3RoPjEm''@;'; put 'put ''JiJib29sZWFuIiE9dHlwZW9mIGplKXRocm93IG5ldyBTKCciYWxsb3dNaXNzaW5nIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO2lmKG51bGw9PT1QZSgvXiU/W14lXSolPyQvLHhlKSl0aHJvdyBuZXcgdygiYCVgIG1heSBub3QgYmUgcHJlc2VudCBhbnl3aGVyZSBidXQgYXQgdGhl''@;'; put 'put ''IGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBpbnRyaW5zaWMgbmFtZSIpO3ZhciBBZT1mdW5jdGlvbih4ZSl7dmFyIGplPV9lKHhlLDAsMSksQWU9X2UoeGUsLTEpO2lmKCIlIj09PWplJiYiJSIhPT1BZSl0aHJvdyBuZXcgdygiaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBj''@;'; put 'put ''bG9zaW5nIGAlYCIpO2lmKCIlIj09PUFlJiYiJSIhPT1qZSl0aHJvdyBuZXcgdygiaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBvcGVuaW5nIGAlYCIpO3ZhciBEZT1bXTtyZXR1cm4gbmUoeGUsb3QsZnVuY3Rpb24oRmUsZ2UsY2UsaGUpe0RlW0RlLmxlbmd0aF09Y2U/bmUo''@;'; put 'put ''aGUsbHQsIiQxIik6Z2V8fEZlfSksRGV9KHhlKSxEZT1BZS5sZW5ndGg+MD9BZVswXToiIixGZT1SZSgiJSIrRGUrIiUiLGplKSxnZT1GZS5uYW1lLGNlPUZlLnZhbHVlLGhlPSExLHdlPUZlLmFsaWFzO3dlJiYoRGU9d2VbMF0sdWUoQWUsSShbMCwxXSx3ZSkpKTtmb3IodmFyIEplPTEsdHQ9''@;'; put 'put ''ITA7SmU8QWUubGVuZ3RoO0plKz0xKXt2YXIgS2U9QWVbSmVdLCR0PV9lKEtlLDAsMSksUnQ9X2UoS2UsLTEpO2lmKCgnIic9PT0kdHx8IiciPT09JHR8fCJgIj09PSR0fHwnIic9PT1SdHx8IiciPT09UnR8fCJgIj09PVJ0KSYmJHQhPT1SdCl0aHJvdyBuZXcgdygicHJvcGVydHkgbmFtZXMg''@;'; put 'put ''d2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcyIpO2lmKCgiY29uc3RydWN0b3IiPT09S2V8fCF0dCkmJihoZT0hMCkscChNLGdlPSIlIisoRGUrPSIuIitLZSkrIiUiKSljZT1NW2dlXTtlbHNlIGlmKG51bGwhPWNlKXtpZighKEtlIGluIGNlKSl7aWYoIWplKXRocm93IG5l''@;'; put 'put ''dyBTKCJiYXNlIGludHJpbnNpYyBmb3IgIit4ZSsiIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLiIpO3JldHVybn1pZihXJiZKZSsxPj1BZS5sZW5ndGgpe3ZhciBMdD1XKGNlLEtlKTtjZT0odHQ9ISFMdCkmJiJnZXQiaW4gTHQmJiEoIm9yaWdpbmFsVmFsdWUi''@;'; put 'put ''aW4gTHQuZ2V0KT9MdC5nZXQ6Y2VbS2VdfWVsc2UgdHQ9cChjZSxLZSksY2U9Y2VbS2VdO3R0JiYhaGUmJihNW2dlXT1jZSl9fXJldHVybiBjZX19LDI3MjAzKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNjU4OTEpO2ZlLmV4cG9ydHM9eS5nZXRQcm90b3R5cGVPZnx8bnVsbH0sOTc2''@;'; put 'put ''NjkoZmUpeyJ1c2Ugc3RyaWN0IjtmZS5leHBvcnRzPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXRQcm90b3R5cGVPZnx8bnVsbH0sOTE2MjcoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg5NzY2OSksYz1oKDI3MjAzKSxzPWgoNjMzNjEpO2ZlLmV4cG9ydHM9eT9mdW5jdGlv''@;'; put 'put ''bih2KXtyZXR1cm4geSh2KX06Yz9mdW5jdGlvbih2KXtpZighdnx8Im9iamVjdCIhPXR5cGVvZiB2JiYiZnVuY3Rpb24iIT10eXBlb2Ygdil0aHJvdyBuZXcgVHlwZUVycm9yKCJnZXRQcm90bzogbm90IGFuIG9iamVjdCIpO3JldHVybiBjKHYpfTpzP2Z1bmN0aW9uKHYpe3JldHVybiBzKHYp''@;'; put 'put ''fTpudWxsfSw1Mjc4NihmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcn0sODM3OTgoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg1Mjc4Nik7aWYoeSl0cnl7eShbXSwibGVuZ3RoIil9Y2F0Y2h7eT1udWxsfWZlLmV4cG9ydHM9''@;'; put 'put ''eX0sMzU4NjEoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg0NTcwKSxjPWZ1bmN0aW9uKCl7cmV0dXJuISF5fTtjLmhhc0FycmF5TGVuZ3RoRGVmaW5lQnVnPWZ1bmN0aW9uKCl7aWYoIXkpcmV0dXJuIG51bGw7dHJ5e3JldHVybiAxIT09eShbXSwibGVuZ3RoIix7dmFsdWU6MX0pLmxl''@;'; put 'put ''bmd0aH1jYXRjaHtyZXR1cm4hMH19LGZlLmV4cG9ydHM9Y30sMTk5MDAoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbCxjPWgoNDUzMTApO2ZlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeSYmImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiB5KCJmb28iKSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2woImJhciIpJiZjKCl9fSw0NTMxMChmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgU3ltYm9sfHwiZnVuY3Rp''@;'; put 'put ''b24iIT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scylyZXR1cm4hMTtpZigic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcilyZXR1cm4hMDt2YXIgaD17fSx5PVN5bWJvbCgidGVzdCIpLGM9T2JqZWN0KHkpO2lmKCJzdHJpbmciPT10eXBlb2YgeXx8IltvYmplY3Qg''@;'; put 'put ''U3ltYm9sXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeSl8fCJbb2JqZWN0IFN5bWJvbF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpKXJldHVybiExO2Zvcih2YXIgQSBpbiBoW3ldPTQyLGgpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE9i''@;'; put 'put ''amVjdC5rZXlzJiYwIT09T2JqZWN0LmtleXMoaCkubGVuZ3RofHwiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMmJjAhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoKS5sZW5ndGgpcmV0dXJuITE7dmFyIHY9T2JqZWN0LmdldE93blByb3BlcnR5U3lt''@;'; put 'put ''Ym9scyhoKTtpZigxIT09di5sZW5ndGh8fHZbMF0hPT15fHwhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGgseSkpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ipe3ZhciBDPU9iamVjdC5nZXRP''@;'; put 'put ''d25Qcm9wZXJ0eURlc2NyaXB0b3IoaCx5KTtpZig0MiE9PUMudmFsdWV8fCEwIT09Qy5lbnVtZXJhYmxlKXJldHVybiExfXJldHVybiEwfX0sODg3NzkoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg0NTMxMCk7ZmUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiB5KCkmJiEhU3ltYm9s''@;'; put 'put ''LnRvU3RyaW5nVGFnfX0sMTM2ODYoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCgyNzA1NCkuQnVmZmVyLGM9aCgxNzU2OCkscz1oKDIzMjI0KS5UcmFuc2Zvcm07ZnVuY3Rpb24gdihDKXtzLmNhbGwodGhpcyksdGhpcy5fYmxvY2s9eS5hbGxvY1Vuc2FmZShDKSx0aGlzLl9ibG9ja1Np''@;'; put 'put ''emU9Qyx0aGlzLl9ibG9ja09mZnNldD0wLHRoaXMuX2xlbmd0aD1bMCwwLDAsMF0sdGhpcy5fZmluYWxpemVkPSExfWgoNzE5OTMpKHYscyksdi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihDLHcsUyl7dmFyIEw9bnVsbDt0cnl7dGhpcy51cGRhdGUoQyx3KX1jYXRjaChSKXtMPVJ9''@;'; put 'put ''UyhMKX0sdi5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKEMpe3ZhciB3PW51bGw7dHJ5e3RoaXMucHVzaCh0aGlzLmRpZ2VzdCgpKX1jYXRjaChTKXt3PVN9Qyh3KX0sdi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEMsdyl7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''RGlnZXN0IGFscmVhZHkgY2FsbGVkIik7Zm9yKHZhciBTPWMoQyx3KSxMPXRoaXMuX2Jsb2NrLFI9MDt0aGlzLl9ibG9ja09mZnNldCtTLmxlbmd0aC1SPj10aGlzLl9ibG9ja1NpemU7KXtmb3IodmFyIHg9dGhpcy5fYmxvY2tPZmZzZXQ7eDx0aGlzLl9ibG9ja1NpemU7KUxbeF09U1tSXSx4''@;'; put 'put ''Kz0xLFIrPTE7dGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MH1mb3IoO1I8Uy5sZW5ndGg7KUxbdGhpcy5fYmxvY2tPZmZzZXRdPVNbUl0sdGhpcy5fYmxvY2tPZmZzZXQrPTEsUis9MTtmb3IodmFyIFU9MCxIPTgqUy5sZW5ndGg7SD4wOysrVSl0aGlzLl9sZW5ndGhbVV0rPUgs''@;'; put 'put ''KEg9dGhpcy5fbGVuZ3RoW1VdLzQyOTQ5NjcyOTZ8MCk+MCYmKHRoaXMuX2xlbmd0aFtVXS09NDI5NDk2NzI5NipIKTtyZXR1cm4gdGhpc30sdi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sdi5wcm90''@;'; put 'put ''b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKEMpe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgdz10aGlzLl9kaWdlc3QoKTt2b2lkIDAhPT1DJiYodz13LnRvU3RyaW5nKEMpKSx0aGlzLl9ibG9j''@;'; put 'put ''ay5maWxsKDApLHRoaXMuX2Jsb2NrT2Zmc2V0PTA7Zm9yKHZhciBTPTA7Uzw0OysrUyl0aGlzLl9sZW5ndGhbU109MDtyZXR1cm4gd30sdi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX2RpZ2VzdCBpcyBub3QgaW1wbGVtZW50ZWQiKX0sZmUuZXhwb3J0''@;'; put 'put ''cz12fSwxMDU3MShmZSl7dmFyIGo9e30udG9TdHJpbmc7ZmUuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihoKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1qLmNhbGwoaCl9fSw1NjY3NyhmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDk2NTYpLGM9T2JqZWN0LmtleXN8fGZ1''@;'; put 'put ''bmN0aW9uKFUpe3ZhciBIPVtdO2Zvcih2YXIgViBpbiBVKUgucHVzaChWKTtyZXR1cm4gSH07ZmUuZXhwb3J0cz1MO3ZhciBzPU9iamVjdC5jcmVhdGUoaCgyNzYzNykpO3MuaW5oZXJpdHM9aCg3MTk5Myk7dmFyIEE9aCgzMzYxMSksdj1oKDIzNjEyKTtzLmluaGVyaXRzKEwsQSk7Zm9yKHZh''@;'; put 'put ''ciBDPWModi5wcm90b3R5cGUpLHc9MDt3PEMubGVuZ3RoO3crKyl7dmFyIFM9Q1t3XTtMLnByb3RvdHlwZVtTXXx8KEwucHJvdG90eXBlW1NdPXYucHJvdG90eXBlW1NdKX1mdW5jdGlvbiBMKFUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEwpKXJldHVybiBuZXcgTChVKTtBLmNhbGwodGhpcyxV''@;'; put 'put ''KSx2LmNhbGwodGhpcyxVKSxVJiYhMT09PVUucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSxVJiYhMT09PVUud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSx0aGlzLmFsbG93SGFsZk9wZW49ITAsVSYmITE9PT1VLmFsbG93SGFsZk9wZW4mJih0aGlzLmFsbG93SGFsZk9wZW49ITEp''@;'; put 'put ''LHRoaXMub25jZSgiZW5kIixSKX1mdW5jdGlvbiBSKCl7dGhpcy5hbGxvd0hhbGZPcGVufHx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHx5Lm5leHRUaWNrKHgsdGhpcyl9ZnVuY3Rpb24geChVKXtVLmVuZCgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShMLnByb3RvdHlwZSwid3JpdGFibGVI''@;'; put 'put ''aWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9''@;'; put 'put ''PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKFUpe3ZvaWQgMD09PXRoaXMuX3JlYWRhYmxlU3RhdGV8fHZvaWQg''@;'; put 'put ''MD09PXRoaXMuX3dyaXRhYmxlU3RhdGV8fCh0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1VLHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPVUpfX0pLEwucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKFUsSCl7dGhpcy5wdXNoKG51bGwpLHRoaXMuZW5kKCkseS5uZXh0VGlj''@;'; put 'put ''ayhILFUpfX0sNzE0ODkoZmUsaixoKXsidXNlIHN0cmljdCI7ZmUuZXhwb3J0cz1zO3ZhciB5PWgoNjIxMjMpLGM9T2JqZWN0LmNyZWF0ZShoKDI3NjM3KSk7ZnVuY3Rpb24gcyhBKXtpZighKHRoaXMgaW5zdGFuY2VvZiBzKSlyZXR1cm4gbmV3IHMoQSk7eS5jYWxsKHRoaXMsQSl9Yy5pbmhl''@;'; put 'put ''cml0cz1oKDcxOTkzKSxjLmluaGVyaXRzKHMseSkscy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihBLHYsQyl7QyhudWxsLEEpfX0sMzM2MTEoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg5NjU2KTtmZS5leHBvcnRzPXE7dmFyIHMsYz1oKDEwNTcxKTtxLlJlYWRhYmxlU3Rh''@;'; put 'put ''dGU9VyxoKDQ0MzU2KTt2YXIgdj1mdW5jdGlvbihSZSxhZSl7cmV0dXJuIFJlLmxpc3RlbmVycyhhZSkubGVuZ3RofSxDPWgoODE2NTIpLHc9aCgzODA2NSkuQnVmZmVyLFM9KHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUi''@;'; put 'put ''P3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSx4PU9iamVjdC5jcmVhdGUoaCgyNzYzNykpO3guaW5oZXJpdHM9aCg3MTk5Myk7dmFyIFU9aCg5MjM4MiksSD12b2lkIDA7SD1VJiZVLmRlYnVnbG9nP1UuZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgeixWPWgo''@;'; put 'put ''MTQzMzEpLE49aCg4Mjk5KTt4LmluaGVyaXRzKHEsQyk7dmFyIFk9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gVyhSZSxhZSl7dmFyIHhlPWFlIGluc3RhbmNlb2Yocz1zfHxoKDU2Njc3KSk7dGhpcy5vYmplY3RNb2RlPSEhKFJlPVJlfHx7''@;'; put 'put ''fSkub2JqZWN0TW9kZSx4ZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhUmUucmVhZGFibGVPYmplY3RNb2RlKTt2YXIgamU9UmUuaGlnaFdhdGVyTWFyayxBZT1SZS5yZWFkYWJsZUhpZ2hXYXRlck1hcms7dGhpcy5oaWdoV2F0ZXJNYXJrPWplfHwwPT09amU/amU6eGUm''@;'; put 'put ''JihBZXx8MD09PUFlKT9BZTp0aGlzLm9iamVjdE1vZGU/MTY6MTYzODQsdGhpcy5oaWdoV2F0ZXJNYXJrPU1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmJ1ZmZlcj1uZXcgVix0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZs''@;'; put 'put ''b3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9''@;'; put 'put ''ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9UmUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsUmUuZW5jb2RpbmcmJih6fHwoej1o''@;'; put 'put ''KDU5MTY0KS5JKSx0aGlzLmRlY29kZXI9bmV3IHooUmUuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9UmUuZW5jb2RpbmcpfWZ1bmN0aW9uIHEoUmUpe2lmKHM9c3x8aCg1NjY3NyksISh0aGlzIGluc3RhbmNlb2YgcSkpcmV0dXJuIG5ldyBxKFJlKTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyBX''@;'; put 'put ''KFJlLHRoaXMpLHRoaXMucmVhZGFibGU9ITAsUmUmJigiZnVuY3Rpb24iPT10eXBlb2YgUmUucmVhZCYmKHRoaXMuX3JlYWQ9UmUucmVhZCksImZ1bmN0aW9uIj09dHlwZW9mIFJlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PVJlLmRlc3Ryb3kpKSxDLmNhbGwodGhpcyl9ZnVuY3Rpb24gcmUo''@;'; put 'put ''UmUsYWUseGUsamUsQWUpe3ZhciBGZSxEZT1SZS5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gbnVsbD09PWFlPyhEZS5yZWFkaW5nPSExLGZ1bmN0aW9uIGYoUmUsYWUpe2lmKCFhZS5lbmRlZCl7aWYoYWUuZGVjb2Rlcil7dmFyIHhlPWFlLmRlY29kZXIuZW5kKCk7eGUmJnhlLmxlbmd0aCYmKGFl''@;'; put 'put ''LmJ1ZmZlci5wdXNoKHhlKSxhZS5sZW5ndGgrPWFlLm9iamVjdE1vZGU/MTp4ZS5sZW5ndGgpfWFlLmVuZGVkPSEwLGIoUmUpfX0oUmUsRGUpKTooQWV8fChGZT1mdW5jdGlvbiBDZShSZSxhZSl7dmFyIHhlO3JldHVybiFmdW5jdGlvbiBSKFJlKXtyZXR1cm4gdy5pc0J1ZmZlcihSZSl8fFJl''@;'; put 'put ''IGluc3RhbmNlb2YgU30oYWUpJiYic3RyaW5nIiE9dHlwZW9mIGFlJiZ2b2lkIDAhPT1hZSYmIVJlLm9iamVjdE1vZGUmJih4ZT1uZXcgVHlwZUVycm9yKCJJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rIikpLHhlfShEZSxhZSkpLEZlP1JlLmVtaXQoImVycm9yIixGZSk6RGUub2Jq''@;'; put 'put ''ZWN0TW9kZXx8YWUmJmFlLmxlbmd0aD4wPygic3RyaW5nIiE9dHlwZW9mIGFlJiYhRGUub2JqZWN0TW9kZSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKGFlKSE9PXcucHJvdG90eXBlJiYoYWU9ZnVuY3Rpb24gTChSZSl7cmV0dXJuIHcuZnJvbShSZSl9KGFlKSksamU/RGUuZW5kRW1pdHRlZD9S''@;'; put 'put ''ZS5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCIpKTptZShSZSxEZSxhZSwhMCk6RGUuZW5kZWQ/UmUuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigic3RyZWFtLnB1c2goKSBhZnRlciBFT0YiKSk6KERlLnJlYWRpbmc9ITEsRGUuZGVjb2Rl''@;'; put 'put ''ciYmIXhlPyhhZT1EZS5kZWNvZGVyLndyaXRlKGFlKSxEZS5vYmplY3RNb2RlfHwwIT09YWUubGVuZ3RoP21lKFJlLERlLGFlLCExKTpNKFJlLERlKSk6bWUoUmUsRGUsYWUsITEpKSk6amV8fChEZS5yZWFkaW5nPSExKSksZnVuY3Rpb24gSWUoUmUpe3JldHVybiFSZS5lbmRlZCYmKFJlLm5l''@;'; put 'put ''ZWRSZWFkYWJsZXx8UmUubGVuZ3RoPFJlLmhpZ2hXYXRlck1hcmt8fDA9PT1SZS5sZW5ndGgpfShEZSl9ZnVuY3Rpb24gbWUoUmUsYWUseGUsamUpe2FlLmZsb3dpbmcmJjA9PT1hZS5sZW5ndGgmJiFhZS5zeW5jPyhSZS5lbWl0KCJkYXRhIix4ZSksUmUucmVhZCgwKSk6KGFlLmxlbmd0aCs9''@;'; put 'put ''YWUub2JqZWN0TW9kZT8xOnhlLmxlbmd0aCxqZT9hZS5idWZmZXIudW5zaGlmdCh4ZSk6YWUuYnVmZmVyLnB1c2goeGUpLGFlLm5lZWRSZWFkYWJsZSYmYihSZSkpLE0oUmUsYWUpfWZ1bmN0aW9uIFgoUmUsYWUpe3JldHVybiBSZTw9MHx8MD09PWFlLmxlbmd0aCYmYWUuZW5kZWQ/MDphZS5v''@;'; put 'put ''YmplY3RNb2RlPzE6UmUhPVJlP2FlLmZsb3dpbmcmJmFlLmxlbmd0aD9hZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDphZS5sZW5ndGg6KFJlPmFlLmhpZ2hXYXRlck1hcmsmJihhZS5oaWdoV2F0ZXJNYXJrPWZ1bmN0aW9uIHFlKFJlKXtyZXR1cm4gUmU+PTgzODg2MDg/UmU9ODM4ODYwODoo''@;'; put 'put ''UmUtLSxSZXw9UmU+Pj4xLFJlfD1SZT4+PjIsUmV8PVJlPj4+NCxSZXw9UmU+Pj44LFJlfD1SZT4+PjE2LFJlKyspLFJlfShSZSkpLFJlPD1hZS5sZW5ndGg/UmU6YWUuZW5kZWQ/YWUubGVuZ3RoOihhZS5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIGIoUmUpe3ZhciBhZT1SZS5fcmVh''@;'; put 'put ''ZGFibGVTdGF0ZTthZS5uZWVkUmVhZGFibGU9ITEsYWUuZW1pdHRlZFJlYWRhYmxlfHwoSCgiZW1pdFJlYWRhYmxlIixhZS5mbG93aW5nKSxhZS5lbWl0dGVkUmVhZGFibGU9ITAsYWUuc3luYz95Lm5leHRUaWNrKGssUmUpOmsoUmUpKX1mdW5jdGlvbiBrKFJlKXtIKCJlbWl0IHJlYWRhYmxl''@;'; put 'put ''IiksUmUuZW1pdCgicmVhZGFibGUiKSxJKFJlKX1mdW5jdGlvbiBNKFJlLGFlKXthZS5yZWFkaW5nTW9yZXx8KGFlLnJlYWRpbmdNb3JlPSEwLHkubmV4dFRpY2soQixSZSxhZSkpfWZ1bmN0aW9uIEIoUmUsYWUpe2Zvcih2YXIgeGU9YWUubGVuZ3RoOyFhZS5yZWFkaW5nJiYhYWUuZmxvd2lu''@;'; put 'put ''ZyYmIWFlLmVuZGVkJiZhZS5sZW5ndGg8YWUuaGlnaFdhdGVyTWFyayYmKEgoIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksUmUucmVhZCgwKSx4ZSE9PWFlLmxlbmd0aCk7KXhlPWFlLmxlbmd0aDthZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiBHKFJlKXtIKCJyZWFkYWJsZSBuZXh0dGljayBy''@;'; put 'put ''ZWFkIDAiKSxSZS5yZWFkKDApfWZ1bmN0aW9uIHAoUmUsYWUpe2FlLnJlYWRpbmd8fChIKCJyZXN1bWUgcmVhZCAwIiksUmUucmVhZCgwKSksYWUucmVzdW1lU2NoZWR1bGVkPSExLGFlLmF3YWl0RHJhaW49MCxSZS5lbWl0KCJyZXN1bWUiKSxJKFJlKSxhZS5mbG93aW5nJiYhYWUucmVhZGlu''@;'; put 'put ''ZyYmUmUucmVhZCgwKX1mdW5jdGlvbiBJKFJlKXt2YXIgYWU9UmUuX3JlYWRhYmxlU3RhdGU7Zm9yKEgoImZsb3ciLGFlLmZsb3dpbmcpO2FlLmZsb3dpbmcmJm51bGwhPT1SZS5yZWFkKCk7KTt9ZnVuY3Rpb24gdWUoUmUsYWUpe3JldHVybiAwPT09YWUubGVuZ3RoP251bGw6KGFlLm9iamVj''@;'; put 'put ''dE1vZGU/eGU9YWUuYnVmZmVyLnNoaWZ0KCk6IVJlfHxSZT49YWUubGVuZ3RoPyh4ZT1hZS5kZWNvZGVyP2FlLmJ1ZmZlci5qb2luKCIiKToxPT09YWUuYnVmZmVyLmxlbmd0aD9hZS5idWZmZXIuaGVhZC5kYXRhOmFlLmJ1ZmZlci5jb25jYXQoYWUubGVuZ3RoKSxhZS5idWZmZXIuY2xlYXIo''@;'; put 'put ''KSk6eGU9ZnVuY3Rpb24gbmUoUmUsYWUseGUpe3ZhciBqZTtyZXR1cm4gUmU8YWUuaGVhZC5kYXRhLmxlbmd0aD8oamU9YWUuaGVhZC5kYXRhLnNsaWNlKDAsUmUpLGFlLmhlYWQuZGF0YT1hZS5oZWFkLmRhdGEuc2xpY2UoUmUpKTpqZT1SZT09PWFlLmhlYWQuZGF0YS5sZW5ndGg/YWUuc2hp''@;'; put 'put ''ZnQoKTp4ZT9mdW5jdGlvbiBfZShSZSxhZSl7dmFyIHhlPWFlLmhlYWQsamU9MSxBZT14ZS5kYXRhO2ZvcihSZS09QWUubGVuZ3RoO3hlPXhlLm5leHQ7KXt2YXIgRGU9eGUuZGF0YSxGZT1SZT5EZS5sZW5ndGg/RGUubGVuZ3RoOlJlO2lmKEFlKz1GZT09PURlLmxlbmd0aD9EZTpEZS5zbGlj''@;'; put 'put ''ZSgwLFJlKSwwPT09KFJlLT1GZSkpe0ZlPT09RGUubGVuZ3RoPygrK2plLGFlLmhlYWQ9eGUubmV4dD94ZS5uZXh0OmFlLnRhaWw9bnVsbCk6KGFlLmhlYWQ9eGUseGUuZGF0YT1EZS5zbGljZShGZSkpO2JyZWFrfSsramV9cmV0dXJuIGFlLmxlbmd0aC09amUsQWV9KFJlLGFlKTpmdW5jdGlv''@;'; put 'put ''biBQZShSZSxhZSl7dmFyIHhlPXcuYWxsb2NVbnNhZmUoUmUpLGplPWFlLmhlYWQsQWU9MTtmb3IoamUuZGF0YS5jb3B5KHhlKSxSZS09amUuZGF0YS5sZW5ndGg7amU9amUubmV4dDspe3ZhciBEZT1qZS5kYXRhLEZlPVJlPkRlLmxlbmd0aD9EZS5sZW5ndGg6UmU7aWYoRGUuY29weSh4ZSx4''@;'; put 'put ''ZS5sZW5ndGgtUmUsMCxGZSksMD09PShSZS09RmUpKXtGZT09PURlLmxlbmd0aD8oKytBZSxhZS5oZWFkPWplLm5leHQ/amUubmV4dDphZS50YWlsPW51bGwpOihhZS5oZWFkPWplLGplLmRhdGE9RGUuc2xpY2UoRmUpKTticmVha30rK0FlfXJldHVybiBhZS5sZW5ndGgtPUFlLHhlfShSZSxh''@;'; put 'put ''ZSksamV9KFJlLGFlLmJ1ZmZlcixhZS5kZWNvZGVyKSx4ZSk7dmFyIHhlfWZ1bmN0aW9uIG90KFJlKXt2YXIgYWU9UmUuX3JlYWRhYmxlU3RhdGU7aWYoYWUubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCciZW5kUmVhZGFibGUoKSIgY2FsbGVkIG9uIG5vbi1lbXB0eSBzdHJlYW0nKTthZS5l''@;'; put 'put ''bmRFbWl0dGVkfHwoYWUuZW5kZWQ9ITAseS5uZXh0VGljayhsdCxhZSxSZSkpfWZ1bmN0aW9uIGx0KFJlLGFlKXshUmUuZW5kRW1pdHRlZCYmMD09PVJlLmxlbmd0aCYmKFJlLmVuZEVtaXR0ZWQ9ITAsYWUucmVhZGFibGU9ITEsYWUuZW1pdCgiZW5kIikpfWZ1bmN0aW9uIGR0KFJlLGFlKXtm''@;'; put 'put ''b3IodmFyIHhlPTAsamU9UmUubGVuZ3RoO3hlPGplO3hlKyspaWYoUmVbeGVdPT09YWUpcmV0dXJuIHhlO3JldHVybi0xfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3Rh''@;'; put 'put ''dGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oUmUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1SZSl9fSkscS5wcm90b3R5cGUuZGVzdHJveT1OLmRlc3Ryb3kscS5wcm90b3R5cGUuX3VuZGVzdHJveT1O''@;'; put 'put ''LnVuZGVzdHJveSxxLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihSZSxhZSl7dGhpcy5wdXNoKG51bGwpLGFlKFJlKX0scS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihSZSxhZSl7dmFyIGplLHhlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHhlLm9iamVjdE1vZGU/amU9ITA6InN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBSZSYmKChhZT1hZXx8eGUuZGVmYXVsdEVuY29kaW5nKSE9PXhlLmVuY29kaW5nJiYoUmU9dy5mcm9tKFJlLGFlKSxhZT0iIiksamU9ITApLHJlKHRoaXMsUmUsYWUsITEsamUpfSxxLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKFJlKXtyZXR1cm4gcmUodGhpcyxS''@;'; put 'put ''ZSxudWxsLCEwLCExKX0scS5wcm90b3R5cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30scS5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24oUmUpe3JldHVybiB6fHwoej1oKDU5MTY0KS5JKSx0aGlzLl9yZWFkYWJsZVN0''@;'; put 'put ''YXRlLmRlY29kZXI9bmV3IHooUmUpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9UmUsdGhpc30scS5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihSZSl7SCgicmVhZCIsUmUpLFJlPXBhcnNlSW50KFJlLDEwKTt2YXIgYWU9dGhpcy5fcmVhZGFibGVTdGF0ZSx4ZT1SZTtpZigwIT09UmUm''@;'; put 'put ''JihhZS5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT1SZSYmYWUubmVlZFJlYWRhYmxlJiYoYWUubGVuZ3RoPj1hZS5oaWdoV2F0ZXJNYXJrfHxhZS5lbmRlZCkpcmV0dXJuIEgoInJlYWQ6IGVtaXRSZWFkYWJsZSIsYWUubGVuZ3RoLGFlLmVuZGVkKSwwPT09YWUubGVuZ3RoJiZhZS5lbmRlZD9v''@;'; put 'put ''dCh0aGlzKTpiKHRoaXMpLG51bGw7aWYoMD09PShSZT1YKFJlLGFlKSkmJmFlLmVuZGVkKXJldHVybiAwPT09YWUubGVuZ3RoJiZvdCh0aGlzKSxudWxsO3ZhciBBZSxqZT1hZS5uZWVkUmVhZGFibGU7cmV0dXJuIEgoIm5lZWQgcmVhZGFibGUiLGplKSwoMD09PWFlLmxlbmd0aHx8YWUubGVu''@;'; put 'put ''Z3RoLVJlPGFlLmhpZ2hXYXRlck1hcmspJiZIKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsamU9ITApLGFlLmVuZGVkfHxhZS5yZWFkaW5nP0goInJlYWRpbmcgb3IgZW5kZWQiLGplPSExKTpqZSYmKEgoImRvIHJlYWQiKSxhZS5yZWFkaW5nPSEwLGFlLnN5bmM9ITAsMD09PWFlLmxl''@;'; put 'put ''bmd0aCYmKGFlLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZChhZS5oaWdoV2F0ZXJNYXJrKSxhZS5zeW5jPSExLGFlLnJlYWRpbmd8fChSZT1YKHhlLGFlKSkpLG51bGw9PT0oQWU9UmU+MD91ZShSZSxhZSk6bnVsbCk/KGFlLm5lZWRSZWFkYWJsZT0hMCxSZT0wKTphZS5sZW5ndGgtPVJl''@;'; put 'put ''LDA9PT1hZS5sZW5ndGgmJihhZS5lbmRlZHx8KGFlLm5lZWRSZWFkYWJsZT0hMCkseGUhPT1SZSYmYWUuZW5kZWQmJm90KHRoaXMpKSxudWxsIT09QWUmJnRoaXMuZW1pdCgiZGF0YSIsQWUpLEFlfSxxLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihSZSl7dGhpcy5lbWl0KCJlcnJvciIsbmV3''@;'; put 'put ''IEVycm9yKCJfcmVhZCgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpKX0scS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihSZSxhZSl7dmFyIHhlPXRoaXMsamU9dGhpcy5fcmVhZGFibGVTdGF0ZTtzd2l0Y2goamUucGlwZXNDb3VudCl7Y2FzZSAwOmplLnBpcGVzPVJlO2JyZWFrO2Nhc2UgMTpqZS5w''@;'; put 'put ''aXBlcz1bamUucGlwZXMsUmVdO2JyZWFrO2RlZmF1bHQ6amUucGlwZXMucHVzaChSZSl9amUucGlwZXNDb3VudCs9MSxIKCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLGplLnBpcGVzQ291bnQsYWUpO3ZhciBEZT1hZSYmITE9PT1hZS5lbmR8fFJlPT09cHJvY2Vzcy5zdGRvdXR8fFJlPT09cHJv''@;'; put 'put ''Y2Vzcy5zdGRlcnI/THQ6Z2U7ZnVuY3Rpb24gZ2UoKXtIKCJvbmVuZCIpLFJlLmVuZCgpfWplLmVuZEVtaXR0ZWQ/eS5uZXh0VGljayhEZSk6eGUub25jZSgiZW5kIixEZSksUmUub24oInVucGlwZSIsZnVuY3Rpb24gRmUoR3QsZ3Qpe0goIm9udW5waXBlIiksR3Q9PT14ZSYmZ3QmJiExPT09''@;'; put 'put ''Z3QuaGFzVW5waXBlZCYmKGd0Lmhhc1VucGlwZWQ9ITAsZnVuY3Rpb24gd2UoKXtIKCJjbGVhbnVwIiksUmUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIiwkdCksUmUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsUnQpLFJlLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsY2UpLFJlLnJlbW92ZUxpc3Rl''@;'; put 'put ''bmVyKCJlcnJvciIsS2UpLFJlLnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLEZlKSx4ZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixnZSkseGUucmVtb3ZlTGlzdGVuZXIoImVuZCIsTHQpLHhlLnJlbW92ZUxpc3RlbmVyKCJkYXRhIix0dCksaGU9ITAsamUuYXdhaXREcmFpbiYmKCFSZS5fd3JpdGFi''@;'; put 'put ''bGVTdGF0ZXx8UmUuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSYmY2UoKX0oKSl9KTt2YXIgY2U9ZnVuY3Rpb24gSyhSZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGFlPVJlLl9yZWFkYWJsZVN0YXRlO0goInBpcGVPbkRyYWluIixhZS5hd2FpdERyYWluKSxhZS5hd2FpdERyYWluJiZhZS5h''@;'; put 'put ''d2FpdERyYWluLS0sMD09PWFlLmF3YWl0RHJhaW4mJnYoUmUsImRhdGEiKSYmKGFlLmZsb3dpbmc9ITAsSShSZSkpfX0oeGUpO1JlLm9uKCJkcmFpbiIsY2UpO3ZhciBoZT0hMSxKZT0hMTtmdW5jdGlvbiB0dChHdCl7SCgib25kYXRhIiksSmU9ITEsITE9PT1SZS53cml0ZShHdCkmJiFKZSYm''@;'; put 'put ''KCgxPT09amUucGlwZXNDb3VudCYmamUucGlwZXM9PT1SZXx8amUucGlwZXNDb3VudD4xJiYtMSE9PWR0KGplLnBpcGVzLFJlKSkmJiFoZSYmKEgoImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsamUuYXdhaXREcmFpbiksamUuYXdhaXREcmFpbisrLEplPSEwKSx4ZS5wYXVzZSgpKX1m''@;'; put 'put ''dW5jdGlvbiBLZShHdCl7SCgib25lcnJvciIsR3QpLEx0KCksUmUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixLZSksMD09PXYoUmUsImVycm9yIikmJlJlLmVtaXQoImVycm9yIixHdCl9ZnVuY3Rpb24gJHQoKXtSZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixSdCksTHQoKX1mdW5jdGlvbiBS''@;'; put 'put ''dCgpe0goIm9uZmluaXNoIiksUmUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIiwkdCksTHQoKX1mdW5jdGlvbiBMdCgpe0goInVucGlwZSIpLHhlLnVucGlwZShSZSl9cmV0dXJuIHhlLm9uKCJkYXRhIix0dCksZnVuY3Rpb24gRihSZSxhZSx4ZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFJlLnBy''@;'; put 'put ''ZXBlbmRMaXN0ZW5lcilyZXR1cm4gUmUucHJlcGVuZExpc3RlbmVyKGFlLHhlKTtSZS5fZXZlbnRzJiZSZS5fZXZlbnRzW2FlXT9jKFJlLl9ldmVudHNbYWVdKT9SZS5fZXZlbnRzW2FlXS51bnNoaWZ0KHhlKTpSZS5fZXZlbnRzW2FlXT1beGUsUmUuX2V2ZW50c1thZV1dOlJlLm9uKGFlLHhl''@;'; put 'put ''KX0oUmUsImVycm9yIixLZSksUmUub25jZSgiY2xvc2UiLCR0KSxSZS5vbmNlKCJmaW5pc2giLFJ0KSxSZS5lbWl0KCJwaXBlIix4ZSksamUuZmxvd2luZ3x8KEgoInBpcGUgcmVzdW1lIikseGUucmVzdW1lKCkpLFJlfSxxLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24oUmUpe3ZhciBhZT10''@;'; put 'put ''aGlzLl9yZWFkYWJsZVN0YXRlLHhlPXtoYXNVbnBpcGVkOiExfTtpZigwPT09YWUucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09YWUucGlwZXNDb3VudClyZXR1cm4gUmUmJlJlIT09YWUucGlwZXN8fChSZXx8KFJlPWFlLnBpcGVzKSxhZS5waXBlcz1udWxsLGFlLnBpcGVzQ291bnQ9''@;'; put 'put ''MCxhZS5mbG93aW5nPSExLFJlJiZSZS5lbWl0KCJ1bnBpcGUiLHRoaXMseGUpKSx0aGlzO2lmKCFSZSl7dmFyIGplPWFlLnBpcGVzLEFlPWFlLnBpcGVzQ291bnQ7YWUucGlwZXM9bnVsbCxhZS5waXBlc0NvdW50PTAsYWUuZmxvd2luZz0hMTtmb3IodmFyIERlPTA7RGU8QWU7RGUrKylqZVtE''@;'; put 'put ''ZV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIEZlPWR0KGFlLnBpcGVzLFJlKTtyZXR1cm4tMT09PUZlfHwoYWUucGlwZXMuc3BsaWNlKEZlLDEpLGFlLnBpcGVzQ291bnQtPTEsMT09PWFlLnBpcGVzQ291bnQmJihhZS5waXBlcz1hZS5waXBl''@;'; put 'put ''c1swXSksUmUuZW1pdCgidW5waXBlIix0aGlzLHhlKSksdGhpc30scS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9cS5wcm90b3R5cGUub249ZnVuY3Rpb24oUmUsYWUpe3ZhciB4ZT1DLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsUmUsYWUpO2lmKCJkYXRhIj09PVJlKSExIT09dGhpcy5fcmVhZGFi''@;'; put 'put ''bGVTdGF0ZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpO2Vsc2UgaWYoInJlYWRhYmxlIj09PVJlKXt2YXIgamU9dGhpcy5fcmVhZGFibGVTdGF0ZTshamUuZW5kRW1pdHRlZCYmIWplLnJlYWRhYmxlTGlzdGVuaW5nJiYoamUucmVhZGFibGVMaXN0ZW5pbmc9amUubmVlZFJlYWRhYmxlPSEwLGpl''@;'; put 'put ''LmVtaXR0ZWRSZWFkYWJsZT0hMSxqZS5yZWFkaW5nP2plLmxlbmd0aCYmYih0aGlzKTp5Lm5leHRUaWNrKEcsdGhpcykpfXJldHVybiB4ZX0scS5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIFJlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIFJlLmZsb3dpbmd8fChIKCJyZXN1''@;'; put 'put ''bWUiKSxSZS5mbG93aW5nPSEwLGZ1bmN0aW9uIEQoUmUsYWUpe2FlLnJlc3VtZVNjaGVkdWxlZHx8KGFlLnJlc3VtZVNjaGVkdWxlZD0hMCx5Lm5leHRUaWNrKHAsUmUsYWUpKX0odGhpcyxSZSkpLHRoaXN9LHEucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIEgoImNhbGwgcGF1''@;'; put 'put ''c2UgZmxvd2luZz0laiIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKEgoInBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdCgicGF1c2UiKSksdGhpc30scS5wcm90b3R5cGUud3JhcD1m''@;'; put 'put ''dW5jdGlvbihSZSl7dmFyIGFlPXRoaXMseGU9dGhpcy5fcmVhZGFibGVTdGF0ZSxqZT0hMTtmb3IodmFyIEFlIGluIFJlLm9uKCJlbmQiLGZ1bmN0aW9uKCl7aWYoSCgid3JhcHBlZCBlbmQiKSx4ZS5kZWNvZGVyJiYheGUuZW5kZWQpe3ZhciBGZT14ZS5kZWNvZGVyLmVuZCgpO0ZlJiZGZS5s''@;'; put 'put ''ZW5ndGgmJmFlLnB1c2goRmUpfWFlLnB1c2gobnVsbCl9KSxSZS5vbigiZGF0YSIsZnVuY3Rpb24oRmUpe0goIndyYXBwZWQgZGF0YSIpLHhlLmRlY29kZXImJihGZT14ZS5kZWNvZGVyLndyaXRlKEZlKSkseGUub2JqZWN0TW9kZSYmbnVsbD09RmV8fCEoeGUub2JqZWN0TW9kZXx8RmUmJkZl''@;'; put 'put ''Lmxlbmd0aCl8fGFlLnB1c2goRmUpfHwoamU9ITAsUmUucGF1c2UoKSl9KSxSZSl2b2lkIDA9PT10aGlzW0FlXSYmImZ1bmN0aW9uIj09dHlwZW9mIFJlW0FlXSYmKHRoaXNbQWVdPWZ1bmN0aW9uKEZlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gUmVbRmVdLmFwcGx5KFJlLGFyZ3VtZW50''@;'; put 'put ''cyl9fShBZSkpO2Zvcih2YXIgRGU9MDtEZTxZLmxlbmd0aDtEZSsrKVJlLm9uKFlbRGVdLHRoaXMuZW1pdC5iaW5kKHRoaXMsWVtEZV0pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbihGZSl7SCgid3JhcHBlZCBfcmVhZCIsRmUpLGplJiYoamU9ITEsUmUucmVzdW1lKCkpfSx0aGlzfSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkocS5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxxLl9mcm9tTGlzdD11ZX0sNjIxMjMoZmUsaixoKXsidXNl''@;'; put 'put ''IHN0cmljdCI7ZmUuZXhwb3J0cz1BO3ZhciB5PWgoNTY2NzcpLGM9T2JqZWN0LmNyZWF0ZShoKDI3NjM3KSk7ZnVuY3Rpb24gcyh3LFMpe3ZhciBMPXRoaXMuX3RyYW5zZm9ybVN0YXRlO0wudHJhbnNmb3JtaW5nPSExO3ZhciBSPUwud3JpdGVjYjtpZighUilyZXR1cm4gdGhpcy5lbWl0KCJl''@;'; put 'put ''cnJvciIsbmV3IEVycm9yKCJ3cml0ZSBjYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSk7TC53cml0ZWNodW5rPW51bGwsTC53cml0ZWNiPW51bGwsbnVsbCE9UyYmdGhpcy5wdXNoKFMpLFIodyk7dmFyIHg9dGhpcy5fcmVhZGFibGVTdGF0ZTt4LnJlYWRpbmc9ITEsKHgubmVlZFJl''@;'; put 'put ''YWRhYmxlfHx4Lmxlbmd0aDx4LmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKHguaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gQSh3KXtpZighKHRoaXMgaW5zdGFuY2VvZiBBKSlyZXR1cm4gbmV3IEEodyk7eS5jYWxsKHRoaXMsdyksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNm''@;'; put 'put ''b3JtOnMuYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLHcm''@;'; put 'put ''JigiZnVuY3Rpb24iPT10eXBlb2Ygdy50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09dy50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiB3LmZsdXNoJiYodGhpcy5fZmx1c2g9dy5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIsdil9ZnVuY3Rpb24gdigpe3ZhciB3PXRoaXM7ImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIHRoaXMuX2ZsdXNoP3RoaXMuX2ZsdXNoKGZ1bmN0aW9uKFMsTCl7Qyh3LFMsTCl9KTpDKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBDKHcsUyxMKXtpZihTKXJldHVybiB3LmVtaXQoImVycm9yIixTKTtpZihudWxsIT1MJiZ3LnB1c2goTCksdy5fd3JpdGFibGVT''@;'; put 'put ''dGF0ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAiKTtpZih3Ll90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gc3RpbGwgdHJhbnNm''@;'; put 'put ''b3JtaW5nIik7cmV0dXJuIHcucHVzaChudWxsKX1jLmluaGVyaXRzPWgoNzE5OTMpLGMuaW5oZXJpdHMoQSx5KSxBLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHcsUyl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEseS5wcm90b3R5cGUucHVzaC5jYWxsKHRo''@;'; put 'put ''aXMsdyxTKX0sQS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih3LFMsTCl7dGhyb3cgbmV3IEVycm9yKCJfdHJhbnNmb3JtKCkgaXMgbm90IGltcGxlbWVudGVkIil9LEEucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbih3LFMsTCl7dmFyIFI9dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYo''@;'; put 'put ''Ui53cml0ZWNiPUwsUi53cml0ZWNodW5rPXcsUi53cml0ZWVuY29kaW5nPVMsIVIudHJhbnNmb3JtaW5nKXt2YXIgeD10aGlzLl9yZWFkYWJsZVN0YXRlOyhSLm5lZWRUcmFuc2Zvcm18fHgubmVlZFJlYWRhYmxlfHx4Lmxlbmd0aDx4LmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKHguaGln''@;'; put 'put ''aFdhdGVyTWFyayl9fSxBLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbih3KXt2YXIgUz10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsIT09Uy53cml0ZWNodW5rJiZTLndyaXRlY2ImJiFTLnRyYW5zZm9ybWluZz8oUy50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKFMud3JpdGVjaHVu''@;'; put 'put ''ayxTLndyaXRlZW5jb2RpbmcsUy5hZnRlclRyYW5zZm9ybSkpOlMubmVlZFRyYW5zZm9ybT0hMH0sQS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24odyxTKXt2YXIgTD10aGlzO3kucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyx3LGZ1bmN0aW9uKFIpe1MoUiksTC5lbWl0KCJjbG9z''@;'; put 'put ''ZSIpfSl9fSwyMzYxMihmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDk2NTYpO2Z1bmN0aW9uIHMoRCl7dmFyIHA9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24gRyhELHAsSSl7dmFyIHVlPUQuZW50cnk7Zm9y''@;'; put 'put ''KEQuZW50cnk9bnVsbDt1ZTspe3ZhciBuZT11ZS5jYWxsYmFjaztwLnBlbmRpbmdjYi0tLG5lKEkpLHVlPXVlLm5leHR9cC5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1EfShwLEQpfX1mZS5leHBvcnRzPVk7dmFyIHYsQT0hcHJvY2Vzcy5icm93c2VyJiZbInYwLjEwIiwidjAuOS4iXS5pbmRl''@;'; put 'put ''eE9mKHByb2Nlc3MudmVyc2lvbi5zbGljZSgwLDUpKT4tMT9zZXRJbW1lZGlhdGU6eS5uZXh0VGljaztZLldyaXRhYmxlU3RhdGU9Tjt2YXIgQz1PYmplY3QuY3JlYXRlKGgoMjc2MzcpKTtDLmluaGVyaXRzPWgoNzE5OTMpO3ZhciB6LHc9e2RlcHJlY2F0ZTpoKDMzOTgpfSxTPWgoODE2NTIp''@;'; put 'put ''LEw9aCgzODA2NSkuQnVmZmVyLFI9KHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxIPWgoODI5OSk7ZnVuY3Rpb24gVigpe31mdW5jdGlvbiBOKEQscCl7dj12''@;'; put 'put ''fHxoKDU2Njc3KTt2YXIgST1wIGluc3RhbmNlb2Ygdjt0aGlzLm9iamVjdE1vZGU9ISEoRD1EfHx7fSkub2JqZWN0TW9kZSxJJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFELndyaXRhYmxlT2JqZWN0TW9kZSk7dmFyIHVlPUQuaGlnaFdhdGVyTWFyayxuZT1ELndyaXRh''@;'; put 'put ''YmxlSGlnaFdhdGVyTWFyazt0aGlzLmhpZ2hXYXRlck1hcms9dWV8fDA9PT11ZT91ZTpJJiYobmV8fDA9PT1uZSk/bmU6dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0LHRoaXMuaGlnaFdhdGVyTWFyaz1NYXRoLmZsb29yKHRoaXMuaGlnaFdhdGVyTWFyayksdGhpcy5maW5hbENhbGxlZD0hMSx0''@;'; put 'put ''aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWNvZGVTdHJpbmdzPSEoITE9PT1ELmRlY29kZVN0cmluZ3MpLHRoaXMuZGVmYXVsdEVuY29kaW5nPUQuZGVmYXVsdEVuY29kaW5nfHwi''@;'; put 'put ''dXRmOCIsdGhpcy5sZW5ndGg9MCx0aGlzLndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5bmM9ITAsdGhpcy5idWZmZXJQcm9jZXNzaW5nPSExLHRoaXMub253cml0ZT1mdW5jdGlvbihvdCl7IWZ1bmN0aW9uIGtlKEQscCl7dmFyIEk9RC5fd3JpdGFibGVTdGF0ZSx1ZT1JLnN5bmMs''@;'; put 'put ''bmU9SS53cml0ZWNiO2lmKGZ1bmN0aW9uIEllKEQpe0Qud3JpdGluZz0hMSxELndyaXRlY2I9bnVsbCxELmxlbmd0aC09RC53cml0ZWxlbixELndyaXRlbGVuPTB9KEkpLHApIWZ1bmN0aW9uIENlKEQscCxJLHVlLG5lKXstLXAucGVuZGluZ2NiLEk/KHkubmV4dFRpY2sobmUsdWUpLHkubmV4''@;'; put 'put ''dFRpY2soQixELHApLEQuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEQuZW1pdCgiZXJyb3IiLHVlKSk6KG5lKHVlKSxELl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxELmVtaXQoImVycm9yIix1ZSksQihELHApKX0oRCxJLHVlLHAsbmUpO2Vsc2V7dmFyIF9lPWIoSSk7''@;'; put 'put ''IV9lJiYhSS5jb3JrZWQmJiFJLmJ1ZmZlclByb2Nlc3NpbmcmJkkuYnVmZmVyZWRSZXF1ZXN0JiZmKEQsSSksdWU/QShxZSxELEksX2UsbmUpOnFlKEQsSSxfZSxuZSl9fShwLG90KX0sdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRSZXF1ZXN0PW51bGws''@;'; put 'put ''dGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5wZW5kaW5nY2I9MCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgcyh0aGlzKX1mdW5jdGlvbiBZKEQp''@;'; put 'put ''e2lmKHY9dnx8aCg1NjY3NyksISh6LmNhbGwoWSx0aGlzKXx8dGhpcyBpbnN0YW5jZW9mIHYpKXJldHVybiBuZXcgWShEKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBOKEQsdGhpcyksdGhpcy53cml0YWJsZT0hMCxEJiYoImZ1bmN0aW9uIj09dHlwZW9mIEQud3JpdGUmJih0aGlzLl93cml0''@;'; put 'put ''ZT1ELndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgRC53cml0ZXYmJih0aGlzLl93cml0ZXY9RC53cml0ZXYpLCJmdW5jdGlvbiI9PXR5cGVvZiBELmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PUQuZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIEQuZmluYWwmJih0aGlzLl9maW5hbD1ELmZp''@;'; put 'put ''bmFsKSksUy5jYWxsKHRoaXMpfWZ1bmN0aW9uIG1lKEQscCxJLHVlLG5lLF9lLFBlKXtwLndyaXRlbGVuPXVlLHAud3JpdGVjYj1QZSxwLndyaXRpbmc9ITAscC5zeW5jPSEwLEk/RC5fd3JpdGV2KG5lLHAub253cml0ZSk6RC5fd3JpdGUobmUsX2UscC5vbndyaXRlKSxwLnN5bmM9ITF9ZnVu''@;'; put 'put ''Y3Rpb24gcWUoRCxwLEksdWUpe0l8fGZ1bmN0aW9uIFgoRCxwKXswPT09cC5sZW5ndGgmJnAubmVlZERyYWluJiYocC5uZWVkRHJhaW49ITEsRC5lbWl0KCJkcmFpbiIpKX0oRCxwKSxwLnBlbmRpbmdjYi0tLHVlKCksQihELHApfWZ1bmN0aW9uIGYoRCxwKXtwLmJ1ZmZlclByb2Nlc3Npbmc9''@;'; put 'put ''ITA7dmFyIEk9cC5idWZmZXJlZFJlcXVlc3Q7aWYoRC5fd3JpdGV2JiZJJiZJLm5leHQpe3ZhciBuZT1uZXcgQXJyYXkocC5idWZmZXJlZFJlcXVlc3RDb3VudCksX2U9cC5jb3JrZWRSZXF1ZXN0c0ZyZWU7X2UuZW50cnk9STtmb3IodmFyIFBlPTAsb3Q9ITA7STspbmVbUGVdPUksSS5pc0J1''@;'; put 'put ''Znx8KG90PSExKSxJPUkubmV4dCxQZSs9MTtuZS5hbGxCdWZmZXJzPW90LG1lKEQscCwhMCxwLmxlbmd0aCxuZSwiIixfZS5maW5pc2gpLHAucGVuZGluZ2NiKysscC5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsX2UubmV4dD8ocC5jb3JrZWRSZXF1ZXN0c0ZyZWU9X2UubmV4dCxfZS5uZXh0''@;'; put 'put ''PW51bGwpOnAuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBzKHApLHAuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MH1lbHNle2Zvcig7STspe3ZhciBsdD1JLmNodW5rO2lmKG1lKEQscCwhMSxwLm9iamVjdE1vZGU/MTpsdC5sZW5ndGgsbHQsSS5lbmNvZGluZyxJLmNhbGxiYWNrKSxJPUkubmV4dCxw''@;'; put 'put ''LmJ1ZmZlcmVkUmVxdWVzdENvdW50LS0scC53cml0aW5nKWJyZWFrfW51bGw9PT1JJiYocC5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfXAuYnVmZmVyZWRSZXF1ZXN0PUkscC5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIGIoRCl7cmV0dXJuIEQuZW5kaW5nJiYwPT09RC5sZW5ndGgm''@;'; put 'put ''Jm51bGw9PT1ELmJ1ZmZlcmVkUmVxdWVzdCYmIUQuZmluaXNoZWQmJiFELndyaXRpbmd9ZnVuY3Rpb24gayhELHApe0QuX2ZpbmFsKGZ1bmN0aW9uKEkpe3AucGVuZGluZ2NiLS0sSSYmRC5lbWl0KCJlcnJvciIsSSkscC5wcmVmaW5pc2hlZD0hMCxELmVtaXQoInByZWZpbmlzaCIpLEIoRCxw''@;'; put 'put ''KX0pfWZ1bmN0aW9uIEIoRCxwKXt2YXIgST1iKHApO3JldHVybiBJJiYoZnVuY3Rpb24gTShELHApeyFwLnByZWZpbmlzaGVkJiYhcC5maW5hbENhbGxlZCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBELl9maW5hbD8ocC5wZW5kaW5nY2IrKyxwLmZpbmFsQ2FsbGVkPSEwLHkubmV4dFRpY2soayxE''@;'; put 'put ''LHApKToocC5wcmVmaW5pc2hlZD0hMCxELmVtaXQoInByZWZpbmlzaCIpKSl9KEQscCksMD09PXAucGVuZGluZ2NiJiYocC5maW5pc2hlZD0hMCxELmVtaXQoImZpbmlzaCIpKSksSX1DLmluaGVyaXRzKFksUyksTi5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBwPXRo''@;'; put 'put ''aXMuYnVmZmVyZWRSZXF1ZXN0LEk9W107cDspSS5wdXNoKHApLHA9cC5uZXh0O3JldHVybiBJfSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoTi5wcm90b3R5cGUsImJ1ZmZlciIse2dldDp3LmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigp''@;'; put 'put ''fSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyh6PUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShZLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24oRCl7cmV0dXJuISF6LmNhbGwodGhp''@;'; put 'put ''cyxEKXx8dGhpcz09PVkmJkQmJkQuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBOfX0pKTp6PWZ1bmN0aW9uKEQpe3JldHVybiBEIGluc3RhbmNlb2YgdGhpc30sWS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe3RoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigiQ2Fubm90IHBpcGUsIG5v''@;'; put 'put ''dCByZWFkYWJsZSIpKX0sWS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oRCxwLEkpe3ZhciB1ZT10aGlzLl93cml0YWJsZVN0YXRlLG5lPSExLF9lPSF1ZS5vYmplY3RNb2RlJiZmdW5jdGlvbiBVKEQpe3JldHVybiBMLmlzQnVmZmVyKEQpfHxEIGluc3RhbmNlb2YgUn0oRCk7cmV0dXJuIF9l''@;'; put 'put ''JiYhTC5pc0J1ZmZlcihEKSYmKEQ9ZnVuY3Rpb24geChEKXtyZXR1cm4gTC5mcm9tKEQpfShEKSksImZ1bmN0aW9uIj09dHlwZW9mIHAmJihJPXAscD1udWxsKSxfZT9wPSJidWZmZXIiOnB8fChwPXVlLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0aW9uIiE9dHlwZW9mIEkmJihJPVYpLHVlLmVu''@;'; put 'put ''ZGVkP2Z1bmN0aW9uIEYoRCxwKXt2YXIgST1uZXcgRXJyb3IoIndyaXRlIGFmdGVyIGVuZCIpO0QuZW1pdCgiZXJyb3IiLEkpLHkubmV4dFRpY2socCxJKX0odGhpcyxJKTooX2V8fGZ1bmN0aW9uIFcoRCxwLEksdWUpe3ZhciBuZT0hMCxfZT0hMTtyZXR1cm4gbnVsbD09PUk/X2U9bmV3IFR5''@;'; put 'put ''cGVFcnJvcigiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iKToic3RyaW5nIiE9dHlwZW9mIEkmJnZvaWQgMCE9PUkmJiFwLm9iamVjdE1vZGUmJihfZT1uZXcgVHlwZUVycm9yKCJJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rIikpLF9lJiYoRC5lbWl0KCJlcnJv''@;'; put 'put ''ciIsX2UpLHkubmV4dFRpY2sodWUsX2UpLG5lPSExKSxuZX0odGhpcyx1ZSxELEkpKSYmKHVlLnBlbmRpbmdjYisrLG5lPWZ1bmN0aW9uIHJlKEQscCxJLHVlLG5lLF9lKXtpZighSSl7dmFyIFBlPWZ1bmN0aW9uIHEoRCxwLEkpe3JldHVybiFELm9iamVjdE1vZGUmJiExIT09RC5kZWNvZGVT''@;'; put 'put ''dHJpbmdzJiYic3RyaW5nIj09dHlwZW9mIHAmJihwPUwuZnJvbShwLEkpKSxwfShwLHVlLG5lKTt1ZSE9PVBlJiYoST0hMCxuZT0iYnVmZmVyIix1ZT1QZSl9dmFyIG90PXAub2JqZWN0TW9kZT8xOnVlLmxlbmd0aDtwLmxlbmd0aCs9b3Q7dmFyIGx0PXAubGVuZ3RoPHAuaGlnaFdhdGVyTWFy''@;'; put 'put ''aztpZihsdHx8KHAubmVlZERyYWluPSEwKSxwLndyaXRpbmd8fHAuY29ya2VkKXt2YXIgZHQ9cC5sYXN0QnVmZmVyZWRSZXF1ZXN0O3AubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6dWUsZW5jb2Rpbmc6bmUsaXNCdWY6SSxjYWxsYmFjazpfZSxuZXh0Om51bGx9LGR0P2R0Lm5leHQ9cC5s''@;'; put 'put ''YXN0QnVmZmVyZWRSZXF1ZXN0OnAuYnVmZmVyZWRSZXF1ZXN0PXAubGFzdEJ1ZmZlcmVkUmVxdWVzdCxwLmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVsc2UgbWUoRCxwLCExLG90LHVlLG5lLF9lKTtyZXR1cm4gbHR9KHRoaXMsdWUsX2UsRCxwLEkpKSxuZX0sWS5wcm90b3R5cGUuY29yaz1m''@;'; put 'put ''dW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LFkucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciBEPXRoaXMuX3dyaXRhYmxlU3RhdGU7RC5jb3JrZWQmJihELmNvcmtlZC0tLCFELndyaXRpbmcmJiFELmNvcmtlZCYmIUQuYnVmZmVyUHJvY2Vzc2luZyYmRC5i''@;'; put 'put ''dWZmZXJlZFJlcXVlc3QmJmYodGhpcyxEKSl9LFkucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZz1mdW5jdGlvbihwKXtpZigic3RyaW5nIj09dHlwZW9mIHAmJihwPXAudG9Mb3dlckNhc2UoKSksIShbImhleCIsInV0ZjgiLCJ1dGYtOCIsImFzY2lpIiwiYmluYXJ5IiwiYmFzZTY0Iiwi''@;'; put 'put ''dWNzMiIsInVjcy0yIiwidXRmMTZsZSIsInV0Zi0xNmxlIiwicmF3Il0uaW5kZXhPZigocCsiIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcCk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPXAs''@;'; put 'put ''dGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KFkucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksWS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9u''@;'; put 'put ''KEQscCxJKXtJKG5ldyBFcnJvcigiX3dyaXRlKCkgaXMgbm90IGltcGxlbWVudGVkIikpfSxZLnByb3RvdHlwZS5fd3JpdGV2PW51bGwsWS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKEQscCxJKXt2YXIgdWU9dGhpcy5fd3JpdGFibGVTdGF0ZTsiZnVuY3Rpb24iPT10eXBlb2YgRD8oST1ELEQ9''@;'; put 'put ''bnVsbCxwPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiBwJiYoST1wLHA9bnVsbCksbnVsbCE9RCYmdGhpcy53cml0ZShELHApLHVlLmNvcmtlZCYmKHVlLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLHVlLmVuZGluZ3x8ZnVuY3Rpb24gSyhELHAsSSl7cC5lbmRpbmc9ITAsQihELHApLEkmJihw''@;'; put 'put ''LmZpbmlzaGVkP3kubmV4dFRpY2soSSk6RC5vbmNlKCJmaW5pc2giLEkpKSxwLmVuZGVkPSEwLEQud3JpdGFibGU9ITF9KHRoaXMsdWUsSSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShZLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMu''@;'; put 'put ''X3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oRCl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPUQpfX0pLFkucHJvdG90eXBlLmRlc3Ryb3k9SC5kZXN0cm95LFkucHJvdG90eXBlLl91''@;'; put 'put ''bmRlc3Ryb3k9SC51bmRlc3Ryb3ksWS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oRCxwKXt0aGlzLmVuZCgpLHAoRCl9fSwxNDMzMShmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz1oKDM4MDY1KS5CdWZmZXIscz1oKDg0NjApO2Z1bmN0aW9uIEEodixDLHcpe3YuY29weShDLHcpfWZl''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB2KCl7KGZ1bmN0aW9uIHkodixDKXtpZighKHYgaW5zdGFuY2VvZiBDKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsdiksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51''@;'; put 'put ''bGwsdGhpcy5sZW5ndGg9MH1yZXR1cm4gdi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih3KXt2YXIgUz17ZGF0YTp3LG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1TOnRoaXMuaGVhZD1TLHRoaXMudGFpbD1TLCsrdGhpcy5sZW5ndGh9LHYucHJvdG90eXBlLnVuc2hp''@;'; put 'put ''ZnQ9ZnVuY3Rpb24odyl7dmFyIFM9e2RhdGE6dyxuZXh0OnRoaXMuaGVhZH07MD09PXRoaXMubGVuZ3RoJiYodGhpcy50YWlsPVMpLHRoaXMuaGVhZD1TLCsrdGhpcy5sZW5ndGh9LHYucHJvdG90eXBlLnNoaWZ0PWZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgdz10aGlzLmhl''@;'; put 'put ''YWQuZGF0YTtyZXR1cm4gdGhpcy5oZWFkPTE9PT10aGlzLmxlbmd0aD90aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQubmV4dCwtLXRoaXMubGVuZ3RoLHd9fSx2LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfSx2LnByb3Rv''@;'; put 'put ''dHlwZS5qb2luPWZ1bmN0aW9uKHcpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIFM9dGhpcy5oZWFkLEw9IiIrUy5kYXRhO1M9Uy5uZXh0OylMKz13K1MuZGF0YTtyZXR1cm4gTH0sdi5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKHcpe2lmKDA9PT10aGlzLmxlbmd0aCly''@;'; put 'put ''ZXR1cm4gYy5hbGxvYygwKTtmb3IodmFyIFM9Yy5hbGxvY1Vuc2FmZSh3Pj4+MCksTD10aGlzLmhlYWQsUj0wO0w7KUEoTC5kYXRhLFMsUiksUis9TC5kYXRhLmxlbmd0aCxMPUwubmV4dDtyZXR1cm4gU30sdn0oKSxzJiZzLmluc3BlY3QmJnMuaW5zcGVjdC5jdXN0b20mJihmZS5leHBvcnRz''@;'; put 'put ''LnByb3RvdHlwZVtzLmluc3BlY3QuY3VzdG9tXT1mdW5jdGlvbigpe3ZhciB2PXMuaW5zcGVjdCh7bGVuZ3RoOnRoaXMubGVuZ3RofSk7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZSsiICIrdn0pfSw4Mjk5KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoOTY1Nik7ZnVuY3Rpb24g''@;'; put 'put ''QSh2LEMpe3YuZW1pdCgiZXJyb3IiLEMpfWZlLmV4cG9ydHM9e2Rlc3Ryb3k6ZnVuY3Rpb24gYyh2LEMpe3ZhciB3PXRoaXM7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfHx0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJs''@;'; put 'put ''ZVN0YXRlLmRlc3Ryb3llZD8oQz9DKHYpOnYmJih0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAseS5uZXh0VGljayhBLHRoaXMsdikpOnkubmV4dFRpY2soQSx0aGlzLHYpKSx0''@;'; put 'put ''aGlzKToodGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX2Rlc3Ryb3kodnx8bnVsbCxmdW5jdGlvbihSKXshQyYmUj93Ll93cml0''@;'; put 'put ''YWJsZVN0YXRlP3cuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwody5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAseS5uZXh0VGljayhBLHcsUikpOnkubmV4dFRpY2soQSx3LFIpOkMmJkMoUil9KSx0aGlzKX0sdW5kZXN0cm95OmZ1bmN0aW9uIHMoKXt0aGlzLl9yZWFkYWJs''@;'; put 'put ''ZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5nPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSExKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5f''@;'; put 'put ''d3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZz0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUucHJlZmluaXNoZWQ9ITEsdGhpcy5fd3Jp''@;'; put 'put ''dGFibGVTdGF0ZS5maW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMSl9fX0sODE2NTIoZmUsaixoKXtmZS5leHBvcnRzPWgoNDQzNTYpLkV2ZW50RW1pdHRlcn0sMzgwNjUoZmUsaixoKXt2YXIgeT1oKDgzODM4KSxjPXkuQnVmZmVyO2Z1bmN0aW9uIHModixD''@;'; put 'put ''KXtmb3IodmFyIHcgaW4gdilDW3ddPXZbd119ZnVuY3Rpb24gQSh2LEMsdyl7cmV0dXJuIGModixDLHcpfWMuZnJvbSYmYy5hbGxvYyYmYy5hbGxvY1Vuc2FmZSYmYy5hbGxvY1Vuc2FmZVNsb3c/ZmUuZXhwb3J0cz15OihzKHksaiksai5CdWZmZXI9QSkscyhjLEEpLEEuZnJvbT1mdW5jdGlv''@;'; put 'put ''bih2LEMsdyl7aWYoIm51bWJlciI9PXR5cGVvZiB2KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIGModixDLHcpfSxBLmFsbG9jPWZ1bmN0aW9uKHYsQyx3KXtpZigibnVtYmVyIiE9dHlwZW9mIHYpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBTPWModik7cmV0dXJuIHZvaWQgMCE9PUM/InN0cmluZyI9PXR5cGVvZiB3P1MuZmlsbChDLHcpOlMuZmlsbChDKTpTLmZpbGwoMCksU30sQS5hbGxvY1Vuc2FmZT1mdW5jdGlvbih2KXtpZigibnVtYmVyIiE9dHlwZW9mIHYpdGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBjKHYpfSxBLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih2KXtpZigibnVtYmVyIiE9dHlwZW9mIHYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVy''@;'; put 'put ''biB5LlNsb3dCdWZmZXIodil9fSwyMzIyNChmZSxqLGgpeyhqPWZlLmV4cG9ydHM9aCgzMzYxMSkpLlN0cmVhbT1qLGouUmVhZGFibGU9aixqLldyaXRhYmxlPWgoMjM2MTIpLGouRHVwbGV4PWgoNTY2NzcpLGouVHJhbnNmb3JtPWgoNjIxMjMpLGouUGFzc1Rocm91Z2g9aCg3MTQ4OSl9LDU5''@;'; put 'put ''MTY0KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoOTY1OTgpLkJ1ZmZlcixjPXkuaXNFbmNvZGluZ3x8ZnVuY3Rpb24oRil7c3dpdGNoKChGPSIiK0YpJiZGLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UiYmluYXJ5''@;'; put 'put ''IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOmNhc2UicmF3IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX07ZnVuY3Rpb24gdihGKXt2YXIgVztzd2l0Y2godGhpcy5lbmNvZGluZz1mdW5jdGlvbiBBKEYpe3ZhciBX''@;'; put 'put ''PWZ1bmN0aW9uIHMoRil7aWYoIUYpcmV0dXJuInV0ZjgiO2Zvcih2YXIgVzs7KXN3aXRjaChGKXtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiJ1dGY4IjtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuInV0ZjE2bGUiO2Nhc2Ui''@;'; put 'put ''bGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuImxhdGluMSI7Y2FzZSJiYXNlNjQiOmNhc2UiYXNjaWkiOmNhc2UiaGV4IjpyZXR1cm4gRjtkZWZhdWx0OmlmKFcpcmV0dXJuO0Y9KCIiK0YpLnRvTG93ZXJDYXNlKCksVz0hMH19KEYpO2lmKCJzdHJpbmciIT10eXBlb2YgVyYmKHkuaXNFbmNv''@;'; put 'put ''ZGluZz09PWN8fCFjKEYpKSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrRik7cmV0dXJuIFd8fEZ9KEYpLHRoaXMuZW5jb2Rpbmcpe2Nhc2UidXRmMTZsZSI6dGhpcy50ZXh0PVUsdGhpcy5lbmQ9SCxXPTQ7YnJlYWs7Y2FzZSJ1dGY4Ijp0aGlzLmZpbGxMYXN0PUwsVz00''@;'; put 'put ''O2JyZWFrO2Nhc2UiYmFzZTY0Ijp0aGlzLnRleHQ9Vix0aGlzLmVuZD1OLFc9MzticmVhaztkZWZhdWx0OnJldHVybiB0aGlzLndyaXRlPXosdm9pZCh0aGlzLmVuZD1ZKX10aGlzLmxhc3ROZWVkPTAsdGhpcy5sYXN0VG90YWw9MCx0aGlzLmxhc3RDaGFyPXkuYWxsb2NVbnNhZmUoVyl9ZnVu''@;'; put 'put ''Y3Rpb24gQyhGKXtyZXR1cm4gRjw9MTI3PzA6Rj4+NT09Nj8yOkY+PjQ9PTE0PzM6Rj4+Mz09MzA/NDpGPj42PT0yPy0xOi0yfWZ1bmN0aW9uIEwoRil7dmFyIFc9dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCxxPWZ1bmN0aW9uIFMoRixXKXtpZigxMjghPSgxOTImV1swXSkpcmV0dXJu''@;'; put 'put ''IEYubGFzdE5lZWQ9MCwiXHVmZmZkIjtpZihGLmxhc3ROZWVkPjEmJlcubGVuZ3RoPjEpe2lmKDEyOCE9KDE5MiZXWzFdKSlyZXR1cm4gRi5sYXN0TmVlZD0xLCJcdWZmZmQiO2lmKEYubGFzdE5lZWQ+MiYmVy5sZW5ndGg+MiYmMTI4IT0oMTkyJldbMl0pKXJldHVybiBGLmxhc3ROZWVkPTIs''@;'; put 'put ''Ilx1ZmZmZCJ9fSh0aGlzLEYpO3JldHVybiB2b2lkIDAhPT1xP3E6dGhpcy5sYXN0TmVlZDw9Ri5sZW5ndGg/KEYuY29weSh0aGlzLmxhc3RDaGFyLFcsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCkpOihGLmNv''@;'; put 'put ''cHkodGhpcy5sYXN0Q2hhcixXLDAsRi5sZW5ndGgpLHZvaWQodGhpcy5sYXN0TmVlZC09Ri5sZW5ndGgpKX1mdW5jdGlvbiBVKEYsVyl7aWYoKEYubGVuZ3RoLVcpJTI9PTApe3ZhciBxPUYudG9TdHJpbmcoInV0ZjE2bGUiLFcpO2lmKHEpe3ZhciByZT1xLmNoYXJDb2RlQXQocS5sZW5ndGgt''@;'; put 'put ''MSk7aWYocmU+PTU1Mjk2JiZyZTw9NTYzMTkpcmV0dXJuIHRoaXMubGFzdE5lZWQ9Mix0aGlzLmxhc3RUb3RhbD00LHRoaXMubGFzdENoYXJbMF09RltGLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPUZbRi5sZW5ndGgtMV0scS5zbGljZSgwLC0xKX1yZXR1cm4gcX1yZXR1cm4gdGhpcy5s''@;'; put 'put ''YXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT1GW0YubGVuZ3RoLTFdLEYudG9TdHJpbmcoInV0ZjE2bGUiLFcsRi5sZW5ndGgtMSl9ZnVuY3Rpb24gSChGKXt2YXIgVz1GJiZGLmxlbmd0aD90aGlzLndyaXRlKEYpOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP1cr''@;'; put 'put ''dGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCx0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkKTpXfWZ1bmN0aW9uIFYoRixXKXt2YXIgcT0oRi5sZW5ndGgtVyklMztyZXR1cm4gMD09PXE/Ri50b1N0cmluZygiYmFzZTY0IixXKToodGhpcy5sYXN0TmVlZD0zLXEsdGhpcy5s''@;'; put 'put ''YXN0VG90YWw9MywxPT09cT90aGlzLmxhc3RDaGFyWzBdPUZbRi5sZW5ndGgtMV06KHRoaXMubGFzdENoYXJbMF09RltGLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPUZbRi5sZW5ndGgtMV0pLEYudG9TdHJpbmcoImJhc2U2NCIsVyxGLmxlbmd0aC1xKSl9ZnVuY3Rpb24gTihGKXt2YXIg''@;'; put 'put ''Vz1GJiZGLmxlbmd0aD90aGlzLndyaXRlKEYpOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP1crdGhpcy5sYXN0Q2hhci50b1N0cmluZygiYmFzZTY0IiwwLDMtdGhpcy5sYXN0TmVlZCk6V31mdW5jdGlvbiB6KEYpe3JldHVybiBGLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpfWZ1bmN0aW9uIFko''@;'; put 'put ''Ril7cmV0dXJuIEYmJkYubGVuZ3RoP3RoaXMud3JpdGUoRik6IiJ9ai5JPXYsdi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oRil7aWYoMD09PUYubGVuZ3RoKXJldHVybiIiO3ZhciBXLHE7aWYodGhpcy5sYXN0TmVlZCl7aWYodm9pZCAwPT09KFc9dGhpcy5maWxsTGFzdChGKSkpcmV0dXJu''@;'; put 'put ''IiI7cT10aGlzLmxhc3ROZWVkLHRoaXMubGFzdE5lZWQ9MH1lbHNlIHE9MDtyZXR1cm4gcTxGLmxlbmd0aD9XP1crdGhpcy50ZXh0KEYscSk6dGhpcy50ZXh0KEYscSk6V3x8IiJ9LHYucHJvdG90eXBlLmVuZD1mdW5jdGlvbiB4KEYpe3ZhciBXPUYmJkYubGVuZ3RoP3RoaXMud3JpdGUoRik6''@;'; put 'put ''IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/VysiXHVmZmZkIjpXfSx2LnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uIFIoRixXKXt2YXIgcT1mdW5jdGlvbiB3KEYsVyxxKXt2YXIgcmU9Vy5sZW5ndGgtMTtpZihyZTxxKXJldHVybiAwO3ZhciBtZT1DKFdbcmVdKTtyZXR1cm4gbWU+PTA/KG1lPjAm''@;'; put 'put ''JihGLmxhc3ROZWVkPW1lLTEpLG1lKTotLXJlPHF8fC0yPT09bWU/MDoobWU9QyhXW3JlXSkpPj0wPyhtZT4wJiYoRi5sYXN0TmVlZD1tZS0yKSxtZSk6LS1yZTxxfHwtMj09PW1lPzA6KG1lPUMoV1tyZV0pKT49MD8obWU+MCYmKDI9PT1tZT9tZT0wOkYubGFzdE5lZWQ9bWUtMyksbWUpOjB9''@;'; put 'put ''KHRoaXMsRixXKTtpZighdGhpcy5sYXN0TmVlZClyZXR1cm4gRi50b1N0cmluZygidXRmOCIsVyk7dGhpcy5sYXN0VG90YWw9cTt2YXIgcmU9Ri5sZW5ndGgtKHEtdGhpcy5sYXN0TmVlZCk7cmV0dXJuIEYuY29weSh0aGlzLmxhc3RDaGFyLDAscmUpLEYudG9TdHJpbmcoInV0ZjgiLFcscmUp''@;'; put 'put ''fSx2LnByb3RvdHlwZS5maWxsTGFzdD1mdW5jdGlvbihGKXtpZih0aGlzLmxhc3ROZWVkPD1GLmxlbmd0aClyZXR1cm4gRi5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5l''@;'; put 'put ''bmNvZGluZywwLHRoaXMubGFzdFRvdGFsKTtGLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsRi5sZW5ndGgpLHRoaXMubGFzdE5lZWQtPUYubGVuZ3RofX0sOTY1OTgoZmUsaixoKXt2YXIgeT1oKDgzODM4KSxjPXkuQnVmZmVyO2Z1bmN0aW9uIHMo''@;'; put 'put ''dixDKXtmb3IodmFyIHcgaW4gdilDW3ddPXZbd119ZnVuY3Rpb24gQSh2LEMsdyl7cmV0dXJuIGModixDLHcpfWMuZnJvbSYmYy5hbGxvYyYmYy5hbGxvY1Vuc2FmZSYmYy5hbGxvY1Vuc2FmZVNsb3c/ZmUuZXhwb3J0cz15OihzKHksaiksai5CdWZmZXI9QSkscyhjLEEpLEEuZnJvbT1mdW5j''@;'; put 'put ''dGlvbih2LEMsdyl7aWYoIm51bWJlciI9PXR5cGVvZiB2KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIGModixDLHcpfSxBLmFsbG9jPWZ1bmN0aW9uKHYsQyx3KXtpZigibnVtYmVyIiE9dHlwZW9mIHYpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBTPWModik7cmV0dXJuIHZvaWQgMCE9PUM/InN0cmluZyI9PXR5cGVvZiB3P1MuZmlsbChDLHcpOlMuZmlsbChDKTpTLmZpbGwoMCksU30sQS5hbGxvY1Vuc2FmZT1mdW5jdGlvbih2KXtpZigibnVtYmVyIiE9dHlwZW9mIHYp''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBjKHYpfSxBLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih2KXtpZigibnVtYmVyIiE9dHlwZW9mIHYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3Jl''@;'; put 'put ''dHVybiB5LlNsb3dCdWZmZXIodil9fSwxNzU2OChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDI3MDU0KS5CdWZmZXIsYz1oKDQxMDkwKSxzPXR5cGVvZiBVaW50OEFycmF5PCJ1Iix2PXMmJnR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldztmZS5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uKEMsdyl7aWYoInN0cmluZyI9PXR5cGVvZiBDfHx5LmlzQnVmZmVyKEMpfHxzJiZDIGluc3RhbmNlb2YgVWludDhBcnJheXx8diYmdihDKSlyZXR1cm4gYyhDLHcpO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgYSBC''@;'; put 'put ''dWZmZXIsIGEgVWludDhBcnJheSwgb3IgYSBEYXRhVmlldycpfX0sNzgzNjgoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsYz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHM9aCg2NTk5Mik7ZmUuZXhwb3J0cz1zLmNhbGwoeSxjKX0s''@;'; put 'put ''OTM2OTQoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg5MzgwNykuQnVmZmVyO2ouX2RiY3M9TDtmb3IodmFyIGM9LTEsQT0tMTAsdj0tMWUzLEM9bmV3IEFycmF5KDI1NiksUz0wO1M8MjU2O1MrKylDW1NdPWM7ZnVuY3Rpb24gTChILFYpe2lmKHRoaXMuZW5jb2RpbmdOYW1lPUguZW5j''@;'; put 'put ''b2RpbmdOYW1lLCFIKXRocm93IG5ldyBFcnJvcigiREJDUyBjb2RlYyBpcyBjYWxsZWQgd2l0aG91dCB0aGUgZGF0YS4iKTtpZighSC50YWJsZSl0aHJvdyBuZXcgRXJyb3IoIkVuY29kaW5nICciK3RoaXMuZW5jb2RpbmdOYW1lKyInIGhhcyBubyBkYXRhLiIpO3ZhciBOPUgudGFibGUoKTt0''@;'; put 'put ''aGlzLmRlY29kZVRhYmxlcz1bXSx0aGlzLmRlY29kZVRhYmxlc1swXT1DLnNsaWNlKDApLHRoaXMuZGVjb2RlVGFibGVTZXE9W107Zm9yKHZhciB6PTA7ejxOLmxlbmd0aDt6KyspdGhpcy5fYWRkRGVjb2RlQ2h1bmsoTlt6XSk7dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU9Vi5kZWZhdWx0Q2hh''@;'; put 'put ''clVuaWNvZGUsdGhpcy5lbmNvZGVUYWJsZT1bXSx0aGlzLmVuY29kZVRhYmxlU2VxPVtdO3ZhciBZPXt9O2lmKEguZW5jb2RlU2tpcFZhbHMpZm9yKHo9MDt6PEguZW5jb2RlU2tpcFZhbHMubGVuZ3RoO3orKyl7dmFyIEY9SC5lbmNvZGVTa2lwVmFsc1t6XTtpZigibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IEYpWVtGXT0hMDtlbHNlIGZvcih2YXIgVz1GLmZyb207Vzw9Ri50bztXKyspWVtXXT0hMH1pZih0aGlzLl9maWxsRW5jb2RlVGFibGUoMCwwLFkpLEguZW5jb2RlQWRkKWZvcih2YXIgcSBpbiBILmVuY29kZUFkZClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSC5lbmNv''@;'; put 'put ''ZGVBZGQscSkmJnRoaXMuX3NldEVuY29kZUNoYXIocS5jaGFyQ29kZUF0KDApLEguZW5jb2RlQWRkW3FdKTtpZih0aGlzLmRlZkNoYXJTQj10aGlzLmVuY29kZVRhYmxlWzBdW1YuZGVmYXVsdENoYXJTaW5nbGVCeXRlLmNoYXJDb2RlQXQoMCldLHRoaXMuZGVmQ2hhclNCPT09YyYmKHRoaXMu''@;'; put 'put ''ZGVmQ2hhclNCPXRoaXMuZW5jb2RlVGFibGVbMF1bIj8iXSksdGhpcy5kZWZDaGFyU0I9PT1jJiYodGhpcy5kZWZDaGFyU0I9NjMpLCJmdW5jdGlvbiI9PXR5cGVvZiBILmdiMTgwMzApe3RoaXMuZ2IxODAzMD1ILmdiMTgwMzAoKTt2YXIgcmU9dGhpcy5kZWNvZGVUYWJsZXMubGVuZ3RoLG1l''@;'; put 'put ''PXRoaXMuZGVjb2RlVGFibGVzW3JlXT1DLnNsaWNlKDApLENlPXRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aCxJZT10aGlzLmRlY29kZVRhYmxlc1tDZV09Qy5zbGljZSgwKTtmb3Ioej0xMjk7ejw9MjU0O3orKyl7dmFyIHFlPXRoaXMuZGVjb2RlVGFibGVzW3YtdGhpcy5kZWNvZGVUYWJsZXNb''@;'; put 'put ''MF1bel1dO2ZvcihXPTQ4O1c8PTU3O1crKylxZVtXXT12LXJlfWZvcih6PTEyOTt6PD0yNTQ7eisrKW1lW3pdPXYtQ2U7Zm9yKHo9NDg7ejw9NTc7eisrKUllW3pdPS0yfX1mdW5jdGlvbiBSKEgsVil7dGhpcy5sZWFkU3Vycm9nYXRlPS0xLHRoaXMuc2VxT2JqPXZvaWQgMCx0aGlzLmVuY29k''@;'; put 'put ''ZVRhYmxlPVYuZW5jb2RlVGFibGUsdGhpcy5lbmNvZGVUYWJsZVNlcT1WLmVuY29kZVRhYmxlU2VxLHRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlPVYuZGVmQ2hhclNCLHRoaXMuZ2IxODAzMD1WLmdiMTgwMzB9ZnVuY3Rpb24geChILFYpe3RoaXMubm9kZUlkeD0wLHRoaXMucHJldkJ1Zj15''@;'; put 'put ''LmFsbG9jKDApLHRoaXMuZGVjb2RlVGFibGVzPVYuZGVjb2RlVGFibGVzLHRoaXMuZGVjb2RlVGFibGVTZXE9Vi5kZWNvZGVUYWJsZVNlcSx0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1WLmRlZmF1bHRDaGFyVW5pY29kZSx0aGlzLmdiMTgwMzA9Vi5nYjE4MDMwfWZ1bmN0aW9uIFUoSCxWKXtp''@;'; put 'put ''ZihIWzBdPlYpcmV0dXJuLTE7Zm9yKHZhciBOPTAsej1ILmxlbmd0aDtOPHotMTspe3ZhciBZPU4rTWF0aC5mbG9vcigoei1OKzEpLzIpO0hbWV08PVY/Tj1ZOno9WX1yZXR1cm4gTn1MLnByb3RvdHlwZS5lbmNvZGVyPVIsTC5wcm90b3R5cGUuZGVjb2Rlcj14LEwucHJvdG90eXBlLl9nZXRE''@;'; put 'put ''ZWNvZGVUcmllTm9kZT1mdW5jdGlvbihIKXtmb3IodmFyIFY9W107SD4wO0g+Pj04KVYucHVzaCgyNTUmSCk7MD09Vi5sZW5ndGgmJlYucHVzaCgwKTtmb3IodmFyIE49dGhpcy5kZWNvZGVUYWJsZXNbMF0sej1WLmxlbmd0aC0xO3o+MDt6LS0pe3ZhciBZPU5bVlt6XV07aWYoWT09YylOW1Zb''@;'; put 'put ''el1dPXYtdGhpcy5kZWNvZGVUYWJsZXMubGVuZ3RoLHRoaXMuZGVjb2RlVGFibGVzLnB1c2goTj1DLnNsaWNlKDApKTtlbHNle2lmKCEoWTw9dikpdGhyb3cgbmV3IEVycm9yKCJPdmVyd3JpdGUgYnl0ZSBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIsIGFkZHI6ICIrSC50b1N0cmluZygxNikp''@;'; put 'put ''O049dGhpcy5kZWNvZGVUYWJsZXNbdi1ZXX19cmV0dXJuIE59LEwucHJvdG90eXBlLl9hZGREZWNvZGVDaHVuaz1mdW5jdGlvbihIKXt2YXIgVj1wYXJzZUludChIWzBdLDE2KSxOPXRoaXMuX2dldERlY29kZVRyaWVOb2RlKFYpO1YmPTI1NTtmb3IodmFyIHo9MTt6PEgubGVuZ3RoO3orKyl7''@;'; put 'put ''dmFyIFk9SFt6XTtpZigic3RyaW5nIj09dHlwZW9mIFkpZm9yKHZhciBGPTA7RjxZLmxlbmd0aDspe3ZhciBXPVkuY2hhckNvZGVBdChGKyspO2lmKDU1Mjk2PD1XJiZXPDU2MzIwKXt2YXIgcT1ZLmNoYXJDb2RlQXQoRisrKTtpZighKDU2MzIwPD1xJiZxPDU3MzQ0KSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIkluY29ycmVjdCBzdXJyb2dhdGUgcGFpciBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIgYXQgY2h1bmsgIitIWzBdKTtOW1YrK109NjU1MzYrMTAyNCooVy01NTI5NikrKHEtNTYzMjApfWVsc2UgaWYoNDA4MDxXJiZXPD00MDk1KXtmb3IodmFyIHJlPTQwOTUtVysyLG1lPVtdLENlPTA7''@;'; put 'put ''Q2U8cmU7Q2UrKyltZS5wdXNoKFkuY2hhckNvZGVBdChGKyspKTtOW1YrK109QS10aGlzLmRlY29kZVRhYmxlU2VxLmxlbmd0aCx0aGlzLmRlY29kZVRhYmxlU2VxLnB1c2gobWUpfWVsc2UgTltWKytdPVd9ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIFkpdGhyb3cgbmV3IEVycm9yKCJJbmNv''@;'; put 'put ''cnJlY3QgdHlwZSAnIit0eXBlb2YgWSsiJyBnaXZlbiBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIgYXQgY2h1bmsgIitIWzBdKTt2YXIgSWU9TltWLTFdKzE7Zm9yKEY9MDtGPFk7RisrKU5bVisrXT1JZSsrfX1pZihWPjI1NSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBjaHVuayBpbiAi''@;'; put 'put ''K3RoaXMuZW5jb2RpbmdOYW1lKyIgYXQgYWRkciAiK0hbMF0rIjogdG9vIGxvbmciK1YpfSxMLnByb3RvdHlwZS5fZ2V0RW5jb2RlQnVja2V0PWZ1bmN0aW9uKEgpe3ZhciBWPUg+Pjg7cmV0dXJuIHZvaWQgMD09PXRoaXMuZW5jb2RlVGFibGVbVl0mJih0aGlzLmVuY29kZVRhYmxlW1ZdPUMu''@;'; put 'put ''c2xpY2UoMCkpLHRoaXMuZW5jb2RlVGFibGVbVl19LEwucHJvdG90eXBlLl9zZXRFbmNvZGVDaGFyPWZ1bmN0aW9uKEgsVil7dmFyIE49dGhpcy5fZ2V0RW5jb2RlQnVja2V0KEgpLHo9MjU1Jkg7Tlt6XTw9QT90aGlzLmVuY29kZVRhYmxlU2VxW0EtTlt6XV1bLTFdPVY6Tlt6XT09YyYmKE5b''@;'; put 'put ''el09Vil9LEwucHJvdG90eXBlLl9zZXRFbmNvZGVTZXF1ZW5jZT1mdW5jdGlvbihILFYpe3ZhciBGLE49SFswXSx6PXRoaXMuX2dldEVuY29kZUJ1Y2tldChOKSxZPTI1NSZOO3pbWV08PUE/Rj10aGlzLmVuY29kZVRhYmxlU2VxW0EteltZXV06KEY9e30seltZXSE9PWMmJihGWy0xXT16W1ld''@;'; put 'put ''KSx6W1ldPUEtdGhpcy5lbmNvZGVUYWJsZVNlcS5sZW5ndGgsdGhpcy5lbmNvZGVUYWJsZVNlcS5wdXNoKEYpKTtmb3IodmFyIFc9MTtXPEgubGVuZ3RoLTE7VysrKXt2YXIgcT1GW05dOyJvYmplY3QiPT10eXBlb2YgcT9GPXE6KEY9RltOXT17fSx2b2lkIDAhPT1xJiYoRlstMV09cSkpfUZb''@;'; put 'put ''Tj1IW0gubGVuZ3RoLTFdXT1WfSxMLnByb3RvdHlwZS5fZmlsbEVuY29kZVRhYmxlPWZ1bmN0aW9uKEgsVixOKXtmb3IodmFyIHo9dGhpcy5kZWNvZGVUYWJsZXNbSF0sWT0wO1k8MjU2O1krKyl7dmFyIEY9eltZXSxXPVYrWTtOW1ddfHwoRj49MD90aGlzLl9zZXRFbmNvZGVDaGFyKEYsVyk6''@;'; put 'put ''Rjw9dj90aGlzLl9maWxsRW5jb2RlVGFibGUodi1GLFc8PDgsTik6Rjw9QSYmdGhpcy5fc2V0RW5jb2RlU2VxdWVuY2UodGhpcy5kZWNvZGVUYWJsZVNlcVtBLUZdLFcpKX19LFIucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEgpe2Zvcih2YXIgVj15LmFsbG9jKEgubGVuZ3RoKih0aGlzLmdi''@;'; put 'put ''MTgwMzA/NDozKSksTj10aGlzLmxlYWRTdXJyb2dhdGUsej10aGlzLnNlcU9iaixZPS0xLEY9MCxXPTA7Oyl7aWYoLTE9PT1ZKXtpZihGPT1ILmxlbmd0aClicmVhazt2YXIgcT1ILmNoYXJDb2RlQXQoRisrKX1lbHNlIHE9WSxZPS0xO2lmKDU1Mjk2PD1xJiZxPDU3MzQ0KWlmKHE8NTYzMjAp''@;'; put 'put ''e2lmKC0xPT09Til7Tj1xO2NvbnRpbnVlfU49cSxxPWN9ZWxzZS0xIT09Tj8ocT02NTUzNisxMDI0KihOLTU1Mjk2KSsocS01NjMyMCksTj0tMSk6cT1jO2Vsc2UtMSE9PU4mJihZPXEscT1jLE49LTEpO3ZhciByZT1jO2lmKHZvaWQgMCE9PXomJnEhPWMpe3ZhciBtZT16W3FdO2lmKCJvYmpl''@;'; put 'put ''Y3QiPT10eXBlb2YgbWUpe3o9bWU7Y29udGludWV9Im51bWJlciI9PXR5cGVvZiBtZT9yZT1tZTpudWxsPT1tZSYmdm9pZCAwIT09KG1lPXpbLTFdKSYmKHJlPW1lLFk9cSksej12b2lkIDB9ZWxzZSBpZihxPj0wKXt2YXIgQ2U9dGhpcy5lbmNvZGVUYWJsZVtxPj44XTtpZih2b2lkIDAhPT1D''@;'; put 'put ''ZSYmKHJlPUNlWzI1NSZxXSkscmU8PUEpe3o9dGhpcy5lbmNvZGVUYWJsZVNlcVtBLXJlXTtjb250aW51ZX1pZihyZT09YyYmdGhpcy5nYjE4MDMwKXt2YXIgSWU9VSh0aGlzLmdiMTgwMzAudUNoYXJzLHEpO2lmKC0xIT1JZSl7cmU9dGhpcy5nYjE4MDMwLmdiQ2hhcnNbSWVdKyhxLXRoaXMu''@;'; put 'put ''Z2IxODAzMC51Q2hhcnNbSWVdKSxWW1crK109MTI5K01hdGguZmxvb3IocmUvMTI2MDApLHJlJT0xMjYwMCxWW1crK109NDgrTWF0aC5mbG9vcihyZS8xMjYwKSxyZSU9MTI2MCxWW1crK109MTI5K01hdGguZmxvb3IocmUvMTApLFZbVysrXT00OCsocmUlPTEwKTtjb250aW51ZX19fXJlPT09''@;'; put 'put ''YyYmKHJlPXRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlKSxyZTwyNTY/VltXKytdPXJlOnJlPDY1NTM2PyhWW1crK109cmU+PjgsVltXKytdPTI1NSZyZSk6KFZbVysrXT1yZT4+MTYsVltXKytdPXJlPj44JjI1NSxWW1crK109MjU1JnJlKX1yZXR1cm4gdGhpcy5zZXFPYmo9eix0aGlzLmxl''@;'; put 'put ''YWRTdXJyb2dhdGU9TixWLnNsaWNlKDAsVyl9LFIucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2lmKC0xIT09dGhpcy5sZWFkU3Vycm9nYXRlfHx2b2lkIDAhPT10aGlzLnNlcU9iail7dmFyIEg9eS5hbGxvYygxMCksVj0wO2lmKHRoaXMuc2VxT2JqKXt2YXIgTj10aGlzLnNlcU9ialstMV07''@;'; put 'put ''dm9pZCAwIT09TiYmKE48MjU2P0hbVisrXT1OOihIW1YrK109Tj4+OCxIW1YrK109MjU1Jk4pKSx0aGlzLnNlcU9iaj12b2lkIDB9cmV0dXJuLTEhPT10aGlzLmxlYWRTdXJyb2dhdGUmJihIW1YrK109dGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUsdGhpcy5sZWFkU3Vycm9nYXRlPS0xKSxI''@;'; put 'put ''LnNsaWNlKDAsVil9fSxSLnByb3RvdHlwZS5maW5kSWR4PVUseC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSCl7dmFyIFY9eS5hbGxvYygyKkgubGVuZ3RoKSxOPXRoaXMubm9kZUlkeCx6PXRoaXMucHJldkJ1ZixZPXRoaXMucHJldkJ1Zi5sZW5ndGgsRj0tdGhpcy5wcmV2QnVmLmxlbmd0''@;'; put 'put ''aDtZPjAmJih6PXkuY29uY2F0KFt6LEguc2xpY2UoMCwxMCldKSk7Zm9yKHZhciBxPTAscmU9MDtxPEgubGVuZ3RoO3ErKyl7dmFyIFcsbWU9cT49MD9IW3FdOnpbcStZXTtpZighKChXPXRoaXMuZGVjb2RlVGFibGVzW05dW21lXSk+PTApKWlmKFc9PT1jKXE9RixXPXRoaXMuZGVmYXVsdENo''@;'; put 'put ''YXJVbmljb2RlLmNoYXJDb2RlQXQoMCk7ZWxzZSBpZigtMj09PVcpe3ZhciBDZT1GPj0wP0guc2xpY2UoRixxKzEpOnouc2xpY2UoRitZLHErMStZKSxJZT0xMjYwMCooQ2VbMF0tMTI5KSsxMjYwKihDZVsxXS00OCkrMTAqKENlWzJdLTEyOSkrKENlWzNdLTQ4KSxrZT1VKHRoaXMuZ2IxODAz''@;'; put 'put ''MC5nYkNoYXJzLEllKTtXPXRoaXMuZ2IxODAzMC51Q2hhcnNba2VdK0llLXRoaXMuZ2IxODAzMC5nYkNoYXJzW2tlXX1lbHNle2lmKFc8PXYpe049di1XO2NvbnRpbnVlfWlmKCEoVzw9QSkpdGhyb3cgbmV3IEVycm9yKCJpY29udi1saXRlIGludGVybmFsIGVycm9yOiBpbnZhbGlkIGRlY29k''@;'; put 'put ''aW5nIHRhYmxlIHZhbHVlICIrVysiIGF0ICIrTisiLyIrbWUpO2Zvcih2YXIgcWU9dGhpcy5kZWNvZGVUYWJsZVNlcVtBLVddLFg9MDtYPHFlLmxlbmd0aC0xO1grKylWW3JlKytdPTI1NSYoVz1xZVtYXSksVltyZSsrXT1XPj44O1c9cWVbcWUubGVuZ3RoLTFdfWlmKFc+NjU1MzUpe1ctPTY1''@;'; put 'put ''NTM2O3ZhciBmPTU1Mjk2K01hdGguZmxvb3IoVy8xMDI0KTtWW3JlKytdPTI1NSZmLFZbcmUrK109Zj4+OCxXPTU2MzIwK1clMTAyNH1WW3JlKytdPTI1NSZXLFZbcmUrK109Vz4+OCxOPTAsRj1xKzF9cmV0dXJuIHRoaXMubm9kZUlkeD1OLHRoaXMucHJldkJ1Zj1GPj0wP0guc2xpY2UoRik6''@;'; put 'put ''ei5zbGljZShGK1kpLFYuc2xpY2UoMCxyZSkudG9TdHJpbmcoInVjczIiKX0seC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7Zm9yKHZhciBIPSIiO3RoaXMucHJldkJ1Zi5sZW5ndGg+MDspe0grPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlO3ZhciBWPXRoaXMucHJldkJ1Zi5zbGljZSgxKTt0''@;'; put 'put ''aGlzLnByZXZCdWY9eS5hbGxvYygwKSx0aGlzLm5vZGVJZHg9MCxWLmxlbmd0aD4wJiYoSCs9dGhpcy53cml0ZShWKSl9cmV0dXJuIHRoaXMubm9kZUlkeD0wLEh9fSw0NTI3OChmZSxqLGgpeyJ1c2Ugc3RyaWN0IjtmZS5leHBvcnRzPXtzaGlmdGppczp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIGgoNDA2NzkpfSxlbmNvZGVBZGQ6eyJceGE1Ijo5MiwiXHUyMDNlIjoxMjZ9LGVuY29kZVNraXBWYWxzOlt7ZnJvbTo2MDczNix0bzo2MzgwOH1dfSxjc3NoaWZ0amlzOiJzaGlmdGppcyIsbXNrYW5qaToic2hpZnRqaXMiLHNqaXM6InNoaWZ0amlzIix3aW5kb3dz''@;'; put 'put ''MzFqOiJzaGlmdGppcyIsbXMzMWo6InNoaWZ0amlzIix4c2ppczoic2hpZnRqaXMiLHdpbmRvd3M5MzI6InNoaWZ0amlzIixtczkzMjoic2hpZnRqaXMiLDkzMjoic2hpZnRqaXMiLGNwOTMyOiJzaGlmdGppcyIsZXVjanA6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBo''@;'; put 'put ''KDU2NDA2KX0sZW5jb2RlQWRkOnsiXHhhNSI6OTIsIlx1MjAzZSI6MTI2fX0sZ2IyMzEyOiJjcDkzNiIsZ2IyMzEyODA6ImNwOTM2IixnYjIzMTIxOTgwOiJjcDkzNiIsY3NnYjIzMTI6ImNwOTM2Iixjc2lzbzU4Z2IyMzEyODA6ImNwOTM2IixldWNjbjoiY3A5MzYiLHdpbmRvd3M5MzY6ImNw''@;'; put 'put ''OTM2IixtczkzNjoiY3A5MzYiLDkzNjoiY3A5MzYiLGNwOTM2Ont0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gaCg3NDQ4OCl9fSxnYms6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBoKDc0NDg4KS5jb25jYXQoaCg1NTkxNCkpfX0seGdiazoiZ2Jr''@;'; put 'put ''Iixpc29pcjU4OiJnYmsiLGdiMTgwMzA6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBoKDc0NDg4KS5jb25jYXQoaCg1NTkxNCkpfSxnYjE4MDMwOmZ1bmN0aW9uKCl7cmV0dXJuIGgoOTkxMjkpfSxlbmNvZGVTa2lwVmFsczpbMTI4XSxlbmNvZGVBZGQ6eyJcdTIwYWMi''@;'; put 'put ''OjQxNjk5fX0sY2hpbmVzZToiZ2IxODAzMCIsd2luZG93czk0OToiY3A5NDkiLG1zOTQ5OiJjcDk0OSIsOTQ5OiJjcDk0OSIsY3A5NDk6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBoKDIxMTY2KX19LGNzZXVja3I6ImNwOTQ5Iixjc2tzYzU2MDExOTg3OiJjcDk0OSIs''@;'; put 'put ''ZXVja3I6ImNwOTQ5Iixpc29pcjE0OToiY3A5NDkiLGtvcmVhbjoiY3A5NDkiLGtzYzU2MDExOTg3OiJjcDk0OSIsa3NjNTYwMTE5ODk6ImNwOTQ5Iixrc2M1NjAxOiJjcDk0OSIsd2luZG93czk1MDoiY3A5NTAiLG1zOTUwOiJjcDk1MCIsOTUwOiJjcDk1MCIsY3A5NTA6e3R5cGU6Il9kYmNz''@;'; put 'put ''Iix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBoKDcyMzI0KX19LGJpZzU6ImJpZzVoa3NjcyIsYmlnNWhrc2NzOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gaCg3MjMyNCkuY29uY2F0KGgoNDMyNjcpKX0sZW5jb2RlU2tpcFZhbHM6WzQxNjc2XX0sY25iaWc1OiJiaWc1''@;'; put 'put ''aGtzY3MiLGNzYmlnNToiYmlnNWhrc2NzIix4eGJpZzU6ImJpZzVoa3NjcyJ9fSw3Mjg5MyhmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIHk9W2goMTUyNTkpLGgoMzUwODkpLGgoNzE3NSksaCg5NzQ3KSxoKDU4Njc3KSxoKDc2MjMpLGgoMzAxODcpLGgoOTM2OTQpLGgoNDUyNzgpXSxj''@;'; put 'put ''PTA7Yzx5Lmxlbmd0aDtjKyspe3ZhciBzPXlbY107Zm9yKHZhciBBIGluIHMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsQSkmJihqW0FdPXNbQV0pfX0sMTUyNTkoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg5MzgwNykuQnVmZmVyO2Z1bmN0aW9uIGMoTCxS''@;'; put 'put ''KXt0aGlzLmVuYz1MLmVuY29kaW5nTmFtZSx0aGlzLmJvbUF3YXJlPUwuYm9tQXdhcmUsImJhc2U2NCI9PT10aGlzLmVuYz90aGlzLmVuY29kZXI9QzoiY2VzdTgiPT09dGhpcy5lbmMmJih0aGlzLmVuYz0idXRmOCIsdGhpcy5lbmNvZGVyPXcsIlx1ezFmNGE5fSIhPT15LmZyb20oImVkYTBi''@;'; put 'put ''ZGVkYjJhOSIsImhleCIpLnRvU3RyaW5nKCkmJih0aGlzLmRlY29kZXI9Uyx0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1SLmRlZmF1bHRDaGFyVW5pY29kZSkpfWZlLmV4cG9ydHM9e3V0Zjg6e3R5cGU6Il9pbnRlcm5hbCIsYm9tQXdhcmU6ITB9LGNlc3U4Ont0eXBlOiJfaW50ZXJuYWwiLGJv''@;'; put 'put ''bUF3YXJlOiEwfSx1bmljb2RlMTF1dGY4OiJ1dGY4Iix1Y3MyOnt0eXBlOiJfaW50ZXJuYWwiLGJvbUF3YXJlOiEwfSx1dGYxNmxlOiJ1Y3MyIixiaW5hcnk6e3R5cGU6Il9pbnRlcm5hbCJ9LGJhc2U2NDp7dHlwZToiX2ludGVybmFsIn0saGV4Ont0eXBlOiJfaW50ZXJuYWwifSxfaW50ZXJu''@;'; put 'put ''YWw6Y30sYy5wcm90b3R5cGUuZW5jb2Rlcj12LGMucHJvdG90eXBlLmRlY29kZXI9QTt2YXIgcz1oKDc4NDU0KS5JO2Z1bmN0aW9uIEEoTCxSKXtzLmNhbGwodGhpcyxSLmVuYyl9ZnVuY3Rpb24gdihMLFIpe3RoaXMuZW5jPVIuZW5jfWZ1bmN0aW9uIEMoTCxSKXt0aGlzLnByZXZTdHI9IiJ9''@;'; put 'put ''ZnVuY3Rpb24gdyhMLFIpe31mdW5jdGlvbiBTKEwsUil7dGhpcy5hY2M9MCx0aGlzLmNvbnRCeXRlcz0wLHRoaXMuYWNjQnl0ZXM9MCx0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1SLmRlZmF1bHRDaGFyVW5pY29kZX1zLnByb3RvdHlwZS5lbmR8fChzLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24o''@;'; put 'put ''KXt9KSxBLnByb3RvdHlwZT1zLnByb3RvdHlwZSx2LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihMKXtyZXR1cm4geS5mcm9tKEwsdGhpcy5lbmMpfSx2LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LEMucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEwpe3ZhciBSPShMPXRoaXMucHJldlN0''@;'; put 'put ''citMKS5sZW5ndGgtTC5sZW5ndGglNDtyZXR1cm4gdGhpcy5wcmV2U3RyPUwuc2xpY2UoUiksTD1MLnNsaWNlKDAsUikseS5mcm9tKEwsImJhc2U2NCIpfSxDLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4geS5mcm9tKHRoaXMucHJldlN0ciwiYmFzZTY0Iil9LHcucHJvdG90eXBl''@;'; put 'put ''LndyaXRlPWZ1bmN0aW9uKEwpe2Zvcih2YXIgUj15LmFsbG9jKDMqTC5sZW5ndGgpLHg9MCxVPTA7VTxMLmxlbmd0aDtVKyspe3ZhciBIPUwuY2hhckNvZGVBdChVKTtIPDEyOD9SW3grK109SDpIPDIwNDg/KFJbeCsrXT0xOTIrKEg+Pj42KSxSW3grK109MTI4Kyg2MyZIKSk6KFJbeCsrXT0y''@;'; put 'put ''MjQrKEg+Pj4xMiksUlt4KytdPTEyOCsoSD4+PjYmNjMpLFJbeCsrXT0xMjgrKDYzJkgpKX1yZXR1cm4gUi5zbGljZSgwLHgpfSx3LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LFMucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEwpe2Zvcih2YXIgUj10aGlzLmFjYyx4PXRoaXMuY29udEJ5''@;'; put 'put ''dGVzLFU9dGhpcy5hY2NCeXRlcyxIPSIiLFY9MDtWPEwubGVuZ3RoO1YrKyl7dmFyIE49TFtWXTsxMjghPSgxOTImTik/KHg+MCYmKEgrPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlLHg9MCksTjwxMjg/SCs9U3RyaW5nLmZyb21DaGFyQ29kZShOKTpOPDIyND8oUj0zMSZOLHg9MSxVPTEpOk48''@;'; put 'put ''MjQwPyhSPTE1Jk4seD0yLFU9MSk6SCs9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUpOng+MD8oUj1SPDw2fDYzJk4sVSsrLDA9PT0tLXgmJihIKz0yPT09VSYmUjwxMjgmJlI+MHx8Mz09PVUmJlI8MjA0OD90aGlzLmRlZmF1bHRDaGFyVW5pY29kZTpTdHJpbmcuZnJvbUNoYXJDb2RlKFIpKSk6''@;'; put 'put ''SCs9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGV9cmV0dXJuIHRoaXMuYWNjPVIsdGhpcy5jb250Qnl0ZXM9eCx0aGlzLmFjY0J5dGVzPVUsSH0sUy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIEw9MDtyZXR1cm4gdGhpcy5jb250Qnl0ZXM+MCYmKEwrPXRoaXMuZGVmYXVsdENoYXJVbmlj''@;'; put 'put ''b2RlKSxMfX0sNTg2NzcoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg5MzgwNykuQnVmZmVyO2Z1bmN0aW9uIGModixDKXtpZighdil0aHJvdyBuZXcgRXJyb3IoIlNCQ1MgY29kZWMgaXMgY2FsbGVkIHdpdGhvdXQgdGhlIGRhdGEuIik7aWYoIXYuY2hhcnN8fDEyOCE9PXYuY2hhcnMu''@;'; put 'put ''bGVuZ3RoJiYyNTYhPT12LmNoYXJzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkVuY29kaW5nICciK3YudHlwZSsiJyBoYXMgaW5jb3JyZWN0ICdjaGFycycgKG11c3QgYmUgb2YgbGVuIDEyOCBvciAyNTYpIik7aWYoMTI4PT09di5jaGFycy5sZW5ndGgpe2Zvcih2YXIgdz0iIixTPTA7Uzwx''@;'; put 'put ''Mjg7UysrKXcrPVN0cmluZy5mcm9tQ2hhckNvZGUoUyk7di5jaGFycz13K3YuY2hhcnN9dGhpcy5kZWNvZGVCdWY9eS5mcm9tKHYuY2hhcnMsInVjczIiKTt2YXIgTD15LmFsbG9jKDY1NTM2LEMuZGVmYXVsdENoYXJTaW5nbGVCeXRlLmNoYXJDb2RlQXQoMCkpO2ZvcihTPTA7Uzx2LmNoYXJz''@;'; put 'put ''Lmxlbmd0aDtTKyspTFt2LmNoYXJzLmNoYXJDb2RlQXQoUyldPVM7dGhpcy5lbmNvZGVCdWY9TH1mdW5jdGlvbiBzKHYsQyl7dGhpcy5lbmNvZGVCdWY9Qy5lbmNvZGVCdWZ9ZnVuY3Rpb24gQSh2LEMpe3RoaXMuZGVjb2RlQnVmPUMuZGVjb2RlQnVmfWouX3NiY3M9YyxjLnByb3RvdHlwZS5l''@;'; put 'put ''bmNvZGVyPXMsYy5wcm90b3R5cGUuZGVjb2Rlcj1BLHMucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHYpe2Zvcih2YXIgQz15LmFsbG9jKHYubGVuZ3RoKSx3PTA7dzx2Lmxlbmd0aDt3KyspQ1t3XT10aGlzLmVuY29kZUJ1Zlt2LmNoYXJDb2RlQXQodyldO3JldHVybiBDfSxzLnByb3RvdHlw''@;'; put 'put ''ZS5lbmQ9ZnVuY3Rpb24oKXt9LEEucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHYpe2Zvcih2YXIgQz10aGlzLmRlY29kZUJ1Zix3PXkuYWxsb2MoMip2Lmxlbmd0aCksUz0wLEw9MCxSPTA7Ujx2Lmxlbmd0aDtSKyspd1tMPTIqUl09Q1tTPTIqdltSXV0sd1tMKzFdPUNbUysxXTtyZXR1cm4g''@;'; put 'put ''dy50b1N0cmluZygidWNzMiIpfSxBLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9fSwzMDE4NyhmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9ezQzNzoiY3A0MzciLDczNzoiY3A3MzciLDc3NToiY3A3NzUiLDg1MDoiY3A4NTAiLDg1MjoiY3A4NTIiLDg1NToiY3A4NTUiLDg1NjoiY3A4''@;'; put 'put ''NTYiLDg1NzoiY3A4NTciLDg1ODoiY3A4NTgiLDg2MDoiY3A4NjAiLDg2MToiY3A4NjEiLDg2MjoiY3A4NjIiLDg2MzoiY3A4NjMiLDg2NDoiY3A4NjQiLDg2NToiY3A4NjUiLDg2NjoiY3A4NjYiLDg2OToiY3A4NjkiLDg3NDoid2luZG93czg3NCIsOTIyOiJjcDkyMiIsMTA0NjoiY3AxMDQ2''@;'; put 'put ''IiwxMTI0OiJjcDExMjQiLDExMjU6ImNwMTEyNSIsMTEyOToiY3AxMTI5IiwxMTMzOiJjcDExMzMiLDExNjE6ImNwMTE2MSIsMTE2MjoiY3AxMTYyIiwxMTYzOiJjcDExNjMiLDEyNTA6IndpbmRvd3MxMjUwIiwxMjUxOiJ3aW5kb3dzMTI1MSIsMTI1Mjoid2luZG93czEyNTIiLDEyNTM6Indp''@;'; put 'put ''bmRvd3MxMjUzIiwxMjU0OiJ3aW5kb3dzMTI1NCIsMTI1NToid2luZG93czEyNTUiLDEyNTY6IndpbmRvd3MxMjU2IiwxMjU3OiJ3aW5kb3dzMTI1NyIsMTI1ODoid2luZG93czEyNTgiLDI4NTkxOiJpc284ODU5MSIsMjg1OTI6Imlzbzg4NTkyIiwyODU5MzoiaXNvODg1OTMiLDI4NTk0OiJp''@;'; put 'put ''c284ODU5NCIsMjg1OTU6Imlzbzg4NTk1IiwyODU5NjoiaXNvODg1OTYiLDI4NTk3OiJpc284ODU5NyIsMjg1OTg6Imlzbzg4NTk4IiwyODU5OToiaXNvODg1OTkiLDI4NjAwOiJpc284ODU5MTAiLDI4NjAxOiJpc284ODU5MTEiLDI4NjAzOiJpc284ODU5MTMiLDI4NjA0OiJpc284ODU5MTQi''@;'; put 'put ''LDI4NjA1OiJpc284ODU5MTUiLDI4NjA2OiJpc284ODU5MTYiLHdpbmRvd3M4NzQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUw''@;'; put 'put ''Ylx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1''@;'; put 'put ''MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0''@;'; put 'put ''Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZCJ9LHdpbjg3NDoid2luZG93czg3NCIsY3A4NzQ6IndpbmRvd3M4NzQiLHdpbmRvd3MxMjUwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1YVx1''@;'; put 'put ''MDE2NFx1MDE3ZFx1MDE3OVx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDE2MVx1MjAzYVx1MDE1Ylx1MDE2NVx1MDE3ZVx1MDE3YVx4YTBcdTAyYzdcdTAyZDhcdTAxNDFceGE0XHUwMTA0XHhhNlx4YTdceGE4XHhhOVx1MDE1''@;'; put 'put ''ZVx4YWJceGFjXHhhZFx4YWVcdTAxN2JceGIwXHhiMVx1MDJkYlx1MDE0Mlx4YjRceGI1XHhiNlx4YjdceGI4XHUwMTA1XHUwMTVmXHhiYlx1MDEzZFx1MDJkZFx1MDEzZVx1MDE3Y1x1MDE1NFx4YzFceGMyXHUwMTAyXHhjNFx1MDEzOVx1MDEwNlx4YzdcdTAxMGNceGM5XHUwMTE4XHhjYlx1''@;'; put 'put ''MDExYVx4Y2RceGNlXHUwMTBlXHUwMTEwXHUwMTQzXHUwMTQ3XHhkM1x4ZDRcdTAxNTBceGQ2XHhkN1x1MDE1OFx1MDE2ZVx4ZGFcdTAxNzBceGRjXHhkZFx1MDE2Mlx4ZGZcdTAxNTVceGUxXHhlMlx1MDEwM1x4ZTRcdTAxM2FcdTAxMDdceGU3XHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMWJc''@;'; put 'put ''eGVkXHhlZVx1MDEwZlx1MDExMVx1MDE0NFx1MDE0OFx4ZjNceGY0XHUwMTUxXHhmNlx4ZjdcdTAxNTlcdTAxNmZceGZhXHUwMTcxXHhmY1x4ZmRcdTAxNjNcdTAyZDkifSx3aW4xMjUwOiJ3aW5kb3dzMTI1MCIsY3AxMjUwOiJ3aW5kb3dzMTI1MCIsd2luZG93czEyNTE6e3R5cGU6Il9zYmNz''@;'; put 'put ''IixjaGFyczoiXHUwNDAyXHUwNDAzXHUyMDFhXHUwNDUzXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUyMGFjXHUyMDMwXHUwNDA5XHUyMDM5XHUwNDBhXHUwNDBjXHUwNDBiXHUwNDBmXHUwNDUyXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIy''@;'; put 'put ''XHUwNDU5XHUyMDNhXHUwNDVhXHUwNDVjXHUwNDViXHUwNDVmXHhhMFx1MDQwZVx1MDQ1ZVx1MDQwOFx4YTRcdTA0OTBceGE2XHhhN1x1MDQwMVx4YTlcdTA0MDRceGFiXHhhY1x4YWRceGFlXHUwNDA3XHhiMFx4YjFcdTA0MDZcdTA0NTZcdTA0OTFceGI1XHhiNlx4YjdcdTA0NTFcdTIxMTZc''@;'; put 'put ''dTA0NTRceGJiXHUwNDU4XHUwNDA1XHUwNDU1XHUwNDU3XHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1''@;'; put 'put ''XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUw''@;'; put 'put ''NDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmIn0sd2luMTI1MToid2luZG93czEyNTEiLGNwMTI1MToid2luZG93czEyNTEiLHdpbmRvd3MxMjUyOnt0eXBlOiJfc2JjcyIsY2hhcnM6''@;'; put 'put ''Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx1ZmZmZFx1MDE3ZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1''@;'; put 'put ''MjAzYVx1MDE1M1x1ZmZmZFx1MDE3ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFc''@;'; put 'put ''eGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4''@;'; put 'put ''ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LHdpbjEyNTI6IndpbmRvd3MxMjUyIixjcDEyNTI6IndpbmRvd3MxMjUyIix3aW5kb3dzMTI1Mzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIw''@;'; put 'put ''YWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2Fc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHUwMzg1XHUwMzg2XHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1ZmZmZFx4YWJceGFjXHhhZFx4YWVcdTIwMTVceGIwXHhiMVx4YjJceGIzXHUwMzg0XHhiNVx4YjZceGI3XHUwMzg4XHUwMzg5XHUwMzhhXHhiYlx1MDM4Y1x4YmRcdTAz''@;'; put 'put ''OGVcdTAzOGZcdTAzOTBcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdWZmZmRcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlc''@;'; put 'put ''dTAzYWFcdTAzYWJcdTAzYWNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzYjBcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzJcdTAzYzNcdTAzYzRcdTAz''@;'; put 'put ''YzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdTAzY2FcdTAzY2JcdTAzY2NcdTAzY2RcdTAzY2VcdWZmZmQifSx3aW4xMjUzOiJ3aW5kb3dzMTI1MyIsY3AxMjUzOiJ3aW5kb3dzMTI1MyIsd2luZG93czEyNTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTky''@;'; put 'put ''XHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUw''@;'; put 'put ''MTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4''@;'; put 'put ''YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTFlXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMTMwXHUwMTVlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZc''@;'; put 'put ''dTAxMWZceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxMzFcdTAxNWZceGZmIn0sd2luMTI1NDoid2luZG93czEyNTQiLGNwMTI1NDoid2luZG93czEyNTQiLHdpbmRvd3MxMjU1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAx''@;'; put 'put ''YVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx4YTBceGExXHhhMlx4YTNcdTIwYWFceGE1XHhhNlx4YTdceGE4XHhhOVx4ZDdceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGY3XHhiYlx4YmNceGJkXHhiZVx4YmZcdTA1YjBcdTA1YjFcdTA1YjJcdTA1YjNc''@;'; put 'put ''dTA1YjRcdTA1YjVcdTA1YjZcdTA1YjdcdTA1YjhcdTA1YjlcdTA1YmFcdTA1YmJcdTA1YmNcdTA1YmRcdTA1YmVcdTA1YmZcdTA1YzBcdTA1YzFcdTA1YzJcdTA1YzNcdTA1ZjBcdTA1ZjFcdTA1ZjJcdTA1ZjNcdTA1ZjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTIwMGVcdTIwMGZcdWZmZmQifSx3aW4xMjU1OiJ3aW5kb3dzMTI1NSIsY3AxMjU1OiJ3aW5kb3dzMTI1NSIsd2luZG93czEyNTY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHUwNjdlXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUy''@;'; put 'put ''MDMwXHUwNjc5XHUyMDM5XHUwMTUyXHUwNjg2XHUwNjk4XHUwNjg4XHUwNmFmXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwNmE5XHUyMTIyXHUwNjkxXHUyMDNhXHUwMTUzXHUyMDBjXHUyMDBkXHUwNmJhXHhhMFx1MDYwY1x4YTJceGEzXHhhNFx4YTVceGE2''@;'; put 'put ''XHhhN1x4YThceGE5XHUwNmJlXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHUwNjFiXHhiYlx4YmNceGJkXHhiZVx1MDYxZlx1MDZjMVx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYy''@;'; put 'put ''OVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx4ZDdcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M2FcdTA2NDBcdTA2NDFcdTA2NDJcdTA2NDNceGUwXHUwNjQ0XHhlMlx1MDY0NVx1MDY0Nlx1MDY0N1x1''@;'; put 'put ''MDY0OFx4ZTdceGU4XHhlOVx4ZWFceGViXHUwNjQ5XHUwNjRhXHhlZVx4ZWZcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVceGY0XHUwNjRmXHUwNjUwXHhmN1x1MDY1MVx4ZjlcdTA2NTJceGZiXHhmY1x1MjAwZVx1MjAwZlx1MDZkMiJ9LHdpbjEyNTY6IndpbmRvd3MxMjU2IixjcDEyNTY6Indp''@;'; put 'put ''bmRvd3MxMjU2Iix3aW5kb3dzMTI1Nzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRceGE4XHUwMmM3XHhiOFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAx''@;'; put 'put ''ZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx4YWZcdTAyZGJcdWZmZmRceGEwXHVmZmZkXHhhMlx4YTNceGE0XHVmZmZkXHhhNlx4YTdceGQ4XHhhOVx1MDE1Nlx4YWJceGFjXHhhZFx4YWVceGM2XHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4''@;'; put 'put ''YjdceGY4XHhiOVx1MDE1N1x4YmJceGJjXHhiZFx4YmVceGU2XHUwMTA0XHUwMTJlXHUwMTAwXHUwMTA2XHhjNFx4YzVcdTAxMThcdTAxMTJcdTAxMGNceGM5XHUwMTc5XHUwMTE2XHUwMTIyXHUwMTM2XHUwMTJhXHUwMTNiXHUwMTYwXHUwMTQzXHUwMTQ1XHhkM1x1MDE0Y1x4ZDVceGQ2XHhk''@;'; put 'put ''N1x1MDE3Mlx1MDE0MVx1MDE1YVx1MDE2YVx4ZGNcdTAxN2JcdTAxN2RceGRmXHUwMTA1XHUwMTJmXHUwMTAxXHUwMTA3XHhlNFx4ZTVcdTAxMTlcdTAxMTNcdTAxMGRceGU5XHUwMTdhXHUwMTE3XHUwMTIzXHUwMTM3XHUwMTJiXHUwMTNjXHUwMTYxXHUwMTQ0XHUwMTQ2XHhmM1x1MDE0ZFx4''@;'; put 'put ''ZjVceGY2XHhmN1x1MDE3M1x1MDE0Mlx1MDE1Ylx1MDE2Ylx4ZmNcdTAxN2NcdTAxN2VcdTAyZDkifSx3aW4xMjU3OiJ3aW5kb3dzMTI1NyIsY3AxMjU3OiJ3aW5kb3dzMTI1NyIsd2luZG93czEyNTg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFl''@;'; put 'put ''XHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHUwMTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHVmZmZkXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhh''@;'; put 'put ''MFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAxMDJceGM0XHhjNVx4YzZceGM3XHhjOFx4''@;'; put 'put ''YzlceGNhXHhjYlx1MDMwMFx4Y2RceGNlXHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1MDFhMFx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTAzMDFceGVkXHhl''@;'; put 'put ''ZVx4ZWZcdTAxMTFceGYxXHUwMzIzXHhmM1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMWIwXHUyMGFiXHhmZiJ9LHdpbjEyNTg6IndpbmRvd3MxMjU4IixjcDEyNTg6IndpbmRvd3MxMjU4Iixpc284ODU5MTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4''@;'; put 'put ''ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhh''@;'; put 'put ''Ylx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0''@;'; put 'put ''XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRc''@;'; put 'put ''eGZlXHhmZiJ9LGNwMjg1OTE6Imlzbzg4NTkxIixpc284ODU5Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4''@;'; put 'put ''OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMDRcdTAyZDhcdTAxNDFceGE0XHUwMTNkXHUwMTVhXHhhN1x4YThcdTAxNjBcdTAxNWVcdTAxNjRcdTAxNzlceGFkXHUwMTdkXHUwMTdiXHhiMFx1MDEwNVx1MDJkYlx1MDE0Mlx4YjRcdTAxM2VcdTAxNWJcdTAyYzdceGI4XHUwMTYxXHUw''@;'; put 'put ''MTVmXHUwMTY1XHUwMTdhXHUwMmRkXHUwMTdlXHUwMTdjXHUwMTU0XHhjMVx4YzJcdTAxMDJceGM0XHUwMTM5XHUwMTA2XHhjN1x1MDEwY1x4YzlcdTAxMThceGNiXHUwMTFhXHhjZFx4Y2VcdTAxMGVcdTAxMTBcdTAxNDNcdTAxNDdceGQzXHhkNFx1MDE1MFx4ZDZceGQ3XHUwMTU4XHUwMTZl''@;'; put 'put ''XHhkYVx1MDE3MFx4ZGNceGRkXHUwMTYyXHhkZlx1MDE1NVx4ZTFceGUyXHUwMTAzXHhlNFx1MDEzYVx1MDEwN1x4ZTdcdTAxMGRceGU5XHUwMTE5XHhlYlx1MDExYlx4ZWRceGVlXHUwMTBmXHUwMTExXHUwMTQ0XHUwMTQ4XHhmM1x4ZjRcdTAxNTFceGY2XHhmN1x1MDE1OVx1MDE2Zlx4ZmFc''@;'; put 'put ''dTAxNzFceGZjXHhmZFx1MDE2M1x1MDJkOSJ9LGNwMjg1OTI6Imlzbzg4NTkyIixpc284ODU5Mzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1''@;'; put 'put ''XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMjZcdTAyZDhceGEzXHhhNFx1ZmZmZFx1MDEyNFx4YTdceGE4XHUwMTMwXHUwMTVlXHUwMTFlXHUwMTM0XHhhZFx1ZmZmZFx1MDE3Ylx4YjBcdTAxMjdceGIyXHhiM1x4YjRceGI1XHUwMTI1XHhiN1x4Yjhc''@;'; put 'put ''dTAxMzFcdTAxNWZcdTAxMWZcdTAxMzVceGJkXHVmZmZkXHUwMTdjXHhjMFx4YzFceGMyXHVmZmZkXHhjNFx1MDEwYVx1MDEwOFx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1ZmZmZFx4ZDFceGQyXHhkM1x4ZDRcdTAxMjBceGQ2XHhkN1x1MDExY1x4ZDlceGRhXHhkYlx4''@;'; put 'put ''ZGNcdTAxNmNcdTAxNWNceGRmXHhlMFx4ZTFceGUyXHVmZmZkXHhlNFx1MDEwYlx1MDEwOVx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1ZmZmZFx4ZjFceGYyXHhmM1x4ZjRcdTAxMjFceGY2XHhmN1x1MDExZFx4ZjlceGZhXHhmYlx4ZmNcdTAxNmRcdTAxNWRcdTAyZDki''@;'; put 'put ''fSxjcDI4NTkzOiJpc284ODU5MyIsaXNvODg1OTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4''@;'; put 'put ''OWNceDlkXHg5ZVx4OWZceGEwXHUwMTA0XHUwMTM4XHUwMTU2XHhhNFx1MDEyOFx1MDEzYlx4YTdceGE4XHUwMTYwXHUwMTEyXHUwMTIyXHUwMTY2XHhhZFx1MDE3ZFx4YWZceGIwXHUwMTA1XHUwMmRiXHUwMTU3XHhiNFx1MDEyOVx1MDEzY1x1MDJjN1x4YjhcdTAxNjFcdTAxMTNcdTAxMjNc''@;'; put 'put ''dTAxNjdcdTAxNGFcdTAxN2VcdTAxNGJcdTAxMDBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZcdTAxMmVcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExNlx4Y2RceGNlXHUwMTJhXHUwMTEwXHUwMTQ1XHUwMTRjXHUwMTM2XHhkNFx4ZDVceGQ2XHhkN1x4ZDhcdTAxNzJceGRhXHhkYlx4ZGNcdTAx''@;'; put 'put ''NjhcdTAxNmFceGRmXHUwMTAxXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHUwMTJmXHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMTdceGVkXHhlZVx1MDEyYlx1MDExMVx1MDE0Nlx1MDE0ZFx1MDEzN1x4ZjRceGY1XHhmNlx4ZjdceGY4XHUwMTczXHhmYVx4ZmJceGZjXHUwMTY5XHUwMTZiXHUw''@;'; put 'put ''MmQ5In0sY3AyODU5NDoiaXNvODg1OTQiLGlzbzg4NTk1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4''@;'; put 'put ''OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDQwMVx1MDQwMlx1MDQwM1x1MDQwNFx1MDQwNVx1MDQwNlx1MDQwN1x1MDQwOFx1MDQwOVx1MDQwYVx1MDQwYlx1MDQwY1x4YWRcdTA0MGVcdTA0MGZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThc''@;'; put 'put ''dTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0''@;'; put 'put ''MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZc''@;'; put 'put ''dTIxMTZcdTA0NTFcdTA0NTJcdTA0NTNcdTA0NTRcdTA0NTVcdTA0NTZcdTA0NTdcdTA0NThcdTA0NTlcdTA0NWFcdTA0NWJcdTA0NWNceGE3XHUwNDVlXHUwNDVmIn0sY3AyODU5NToiaXNvODg1OTUiLGlzbzg4NTk2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0''@;'; put 'put ''XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTA2MGNceGFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjFiXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjFmXHVmZmZkXHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHUwNjI1''@;'; put 'put ''XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1XHUwNjM2XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjQwXHUw''@;'; put 'put ''NjQxXHUwNjQyXHUwNjQzXHUwNjQ0XHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHUwNjQ5XHUwNjRhXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHUwNjRmXHUwNjUwXHUwNjUxXHUwNjUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkIn0sY3AyODU5NjoiaXNvODg1OTYiLGlzbzg4NTk3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5''@;'; put 'put ''N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MjAxOFx1MjAxOVx4YTNcdTIwYWNcdTIwYWZceGE2XHhhN1x4YThceGE5XHUwMzdhXHhhYlx4YWNceGFkXHVmZmZkXHUyMDE1XHhiMFx4YjFceGIyXHhiM1x1MDM4NFx1MDM4NVx1MDM4Nlx4YjdcdTAzODhcdTAzODlcdTAz''@;'; put 'put ''OGFceGJiXHUwMzhjXHhiZFx1MDM4ZVx1MDM4Zlx1MDM5MFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1ZmZmZFx1MDNhM1x1MDNhNFx1MDNhNVx1MDNh''@;'; put 'put ''Nlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNhYVx1MDNhYlx1MDNhY1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNiMFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1''@;'; put 'put ''MDNjMlx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MDNjYVx1MDNjYlx1MDNjY1x1MDNjZFx1MDNjZVx1ZmZmZCJ9LGNwMjg1OTc6Imlzbzg4NTk3Iixpc284ODU5ODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4''@;'; put 'put ''N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdWZmZmRceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4ZDdceGFiXHhhY1x4YWRceGFlXHhhZlx4''@;'; put 'put ''YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGY3XHhiYlx4YmNceGJkXHhiZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxN1x1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVkOFx1MDVkOVx1MDVkYVx1MDVkYlx1''@;'; put 'put ''MDVkY1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx1ZmZmZFx1ZmZmZFx1MjAwZVx1MjAwZlx1ZmZmZCJ9LGNwMjg1OTg6Imlzbzg4NTk4Iixpc284ODU5OTp7dHlwZToiX3NiY3MiLGNo''@;'; put 'put ''YXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3''@;'; put 'put ''XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDEx''@;'; put 'put ''ZVx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDEzMFx1MDE1ZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTFmXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4''@;'; put 'put ''ZjhceGY5XHhmYVx4ZmJceGZjXHUwMTMxXHUwMTVmXHhmZiJ9LGNwMjg1OTk6Imlzbzg4NTk5Iixpc284ODU5MTA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4''@;'; put 'put ''OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTA0XHUwMTEyXHUwMTIyXHUwMTJhXHUwMTI4XHUwMTM2XHhhN1x1MDEzYlx1MDExMFx1MDE2MFx1MDE2Nlx1MDE3ZFx4YWRcdTAxNmFcdTAxNGFceGIwXHUwMTA1XHUwMTEzXHUwMTIzXHUw''@;'; put 'put ''MTJiXHUwMTI5XHUwMTM3XHhiN1x1MDEzY1x1MDExMVx1MDE2MVx1MDE2N1x1MDE3ZVx1MjAxNVx1MDE2Ylx1MDE0Ylx1MDEwMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx1MDEyZVx1MDEwY1x4YzlcdTAxMThceGNiXHUwMTE2XHhjZFx4Y2VceGNmXHhkMFx1MDE0NVx1MDE0Y1x4ZDNceGQ0''@;'; put 'put ''XHhkNVx4ZDZcdTAxNjhceGQ4XHUwMTcyXHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHUwMTAxXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHUwMTJmXHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMTdceGVkXHhlZVx4ZWZceGYwXHUwMTQ2XHUwMTRkXHhmM1x4ZjRceGY1XHhmNlx1MDE2OVx4Zjhc''@;'; put 'put ''dTAxNzNceGZhXHhmYlx4ZmNceGZkXHhmZVx1MDEzOCJ9LGNwMjg2MDA6Imlzbzg4NTkxMCIsaXNvODg1OTExOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkz''@;'; put 'put ''XHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUx''@;'; put 'put ''M1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1''@;'; put 'put ''MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0''@;'; put 'put ''YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGNwMjg2MDE6Imlzbzg4NTkxMSIsaXNvODg1OTEzOnt0eXBl''@;'; put 'put ''OiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MjAxZFx4YTJceGEzXHhh''@;'; put 'put ''NFx1MjAxZVx4YTZceGE3XHhkOFx4YTlcdTAxNTZceGFiXHhhY1x4YWRceGFlXHhjNlx4YjBceGIxXHhiMlx4YjNcdTIwMWNceGI1XHhiNlx4YjdceGY4XHhiOVx1MDE1N1x4YmJceGJjXHhiZFx4YmVceGU2XHUwMTA0XHUwMTJlXHUwMTAwXHUwMTA2XHhjNFx4YzVcdTAxMThcdTAxMTJcdTAx''@;'; put 'put ''MGNceGM5XHUwMTc5XHUwMTE2XHUwMTIyXHUwMTM2XHUwMTJhXHUwMTNiXHUwMTYwXHUwMTQzXHUwMTQ1XHhkM1x1MDE0Y1x4ZDVceGQ2XHhkN1x1MDE3Mlx1MDE0MVx1MDE1YVx1MDE2YVx4ZGNcdTAxN2JcdTAxN2RceGRmXHUwMTA1XHUwMTJmXHUwMTAxXHUwMTA3XHhlNFx4ZTVcdTAxMTlc''@;'; put 'put ''dTAxMTNcdTAxMGRceGU5XHUwMTdhXHUwMTE3XHUwMTIzXHUwMTM3XHUwMTJiXHUwMTNjXHUwMTYxXHUwMTQ0XHUwMTQ2XHhmM1x1MDE0ZFx4ZjVceGY2XHhmN1x1MDE3M1x1MDE0Mlx1MDE1Ylx1MDE2Ylx4ZmNcdTAxN2NcdTAxN2VcdTIwMTkifSxjcDI4NjAzOiJpc284ODU5MTMiLGlzbzg4''@;'; put 'put ''NTkxNDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTFlMDJc''@;'; put 'put ''dTFlMDNceGEzXHUwMTBhXHUwMTBiXHUxZTBhXHhhN1x1MWU4MFx4YTlcdTFlODJcdTFlMGJcdTFlZjJceGFkXHhhZVx1MDE3OFx1MWUxZVx1MWUxZlx1MDEyMFx1MDEyMVx1MWU0MFx1MWU0MVx4YjZcdTFlNTZcdTFlODFcdTFlNTdcdTFlODNcdTFlNjBcdTFlZjNcdTFlODRcdTFlODVcdTFl''@;'; put 'put ''NjFceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTc0XHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHUxZTZhXHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHUwMTc2XHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZc''@;'; put 'put ''eGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxNzVceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZcdTFlNmJceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRcdTAxNzdceGZmIn0sY3AyODYwNDoiaXNvODg1OTE0Iixpc284ODU5MTU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4''@;'; put 'put ''ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHUyMGFjXHhhNVx1MDE2MFx4YTdcdTAxNjFc''@;'; put 'put ''eGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x1MDE3ZFx4YjVceGI2XHhiN1x1MDE3ZVx4YjlceGJhXHhiYlx1MDE1Mlx1MDE1M1x1MDE3OFx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNm''@;'; put 'put ''XHhkMFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4Zjhc''@;'; put 'put ''eGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIn0sY3AyODYwNToiaXNvODg1OTE1Iixpc284ODU5MTY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0''@;'; put 'put ''XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTA0XHUwMTA1XHUwMTQxXHUyMGFjXHUyMDFlXHUwMTYwXHhhN1x1MDE2MVx4YTlcdTAyMThceGFiXHUwMTc5XHhhZFx1MDE3YVx1MDE3Ylx4YjBceGIxXHUwMTBjXHUwMTQyXHUwMTdkXHUyMDFkXHhi''@;'; put 'put ''Nlx4YjdcdTAxN2VcdTAxMGRcdTAyMTlceGJiXHUwMTUyXHUwMTUzXHUwMTc4XHUwMTdjXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx1MDEwNlx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMTBcdTAxNDNceGQyXHhkM1x4ZDRcdTAxNTBceGQ2XHUwMTVhXHUwMTcw''@;'; put 'put ''XHhkOVx4ZGFceGRiXHhkY1x1MDExOFx1MDIxYVx4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHUwMTA3XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExMVx1MDE0NFx4ZjJceGYzXHhmNFx1MDE1MVx4ZjZcdTAxNWJcdTAxNzFceGY5XHhmYVx4ZmJceGZjXHUw''@;'; put 'put ''MTE5XHUwMjFiXHhmZiJ9LGNwMjg2MDY6Imlzbzg4NTkxNiIsY3A0Mzc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4''@;'; put 'put ''ZDZceGRjXHhhMlx4YTNceGE1XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUy''@;'; put 'put ''NTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUz''@;'; put 'put ''XHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUy''@;'; put 'put ''MjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm00Mzc6ImNwNDM3Iixjc2libTQzNzoiY3A0MzciLGNwNzM3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1''@;'; put 'put ''MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNi''@;'; put 'put ''YVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjMlx1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1''@;'; put 'put ''MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2''@;'; put 'put ''YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNjOVx1MDNhY1x1MDNhZFx1MDNhZVx1MDNjYVx1MDNhZlx1MDNjY1x1MDNjZFx1MDNjYlx1MDNjZVx1MDM4Nlx1MDM4OFx1MDM4OVx1MDM4YVx1MDM4Y1x1MDM4ZVx1MDM4Zlx4YjFcdTIyNjVcdTIyNjRcdTAz''@;'; put 'put ''YWFcdTAzYWJceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTczNzoiY3A3MzciLGNzaWJtNzM3OiJjcDczNyIsY3A3NzU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwMTA2XHhmY1x4ZTlcdTAxMDFceGU0XHUwMTIzXHhlNVx1MDEwN1x1MDE0''@;'; put 'put ''Mlx1MDExM1x1MDE1Nlx1MDE1N1x1MDEyYlx1MDE3OVx4YzRceGM1XHhjOVx4ZTZceGM2XHUwMTRkXHhmNlx1MDEyMlx4YTJcdTAxNWFcdTAxNWJceGQ2XHhkY1x4ZjhceGEzXHhkOFx4ZDdceGE0XHUwMTAwXHUwMTJhXHhmM1x1MDE3Ylx1MDE3Y1x1MDE3YVx1MjAxZFx4YTZceGE5XHhhZVx4''@;'; put 'put ''YWNceGJkXHhiY1x1MDE0MVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUwMTA0XHUwMTBjXHUwMTE4XHUwMTE2XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUwMTJlXHUwMTYwXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUwMTcyXHUw''@;'; put 'put ''MTZhXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUwMTdkXHUwMTA1XHUwMTBkXHUwMTE5XHUwMTE3XHUwMTJmXHUwMTYxXHUwMTczXHUwMTZiXHUwMTdlXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHhkM1x4ZGZcdTAxNGNcdTAx''@;'; put 'put ''NDNceGY1XHhkNVx4YjVcdTAxNDRcdTAxMzZcdTAxMzdcdTAxM2JcdTAxM2NcdTAxNDZcdTAxMTJcdTAxNDVcdTIwMTlceGFkXHhiMVx1MjAxY1x4YmVceGI2XHhhN1x4ZjdcdTIwMWVceGIwXHUyMjE5XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm03NzU6ImNwNzc1Iixjc2libTc3''@;'; put 'put ''NToiY3A3NzUiLGNwODUwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx4ZDdcdTAx''@;'; put 'put ''OTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUy''@;'; put 'put ''NTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhmMFx4ZDBceGNhXHhjYlx4YzhcdTAxMzFceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4''@;'; put 'put ''ZDJceGY1XHhkNVx4YjVceGZlXHhkZVx4ZGFceGRiXHhkOVx4ZmRceGRkXHhhZlx4YjRceGFkXHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTg1MDoiY3A4NTAiLGNzaWJtODUwOiJjcDg1MCIsY3A4NTI6e3R5cGU6''@;'; put 'put ''Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRcdTAxNmZcdTAxMDdceGU3XHUwMTQyXHhlYlx1MDE1MFx1MDE1MVx4ZWVcdTAxNzlceGM0XHUwMTA2XHhjOVx1MDEzOVx1MDEzYVx4ZjRceGY2XHUwMTNkXHUwMTNlXHUwMTVhXHUwMTViXHhkNlx4ZGNcdTAxNjRcdTAxNjVcdTAx''@;'; put 'put ''NDFceGQ3XHUwMTBkXHhlMVx4ZWRceGYzXHhmYVx1MDEwNFx1MDEwNVx1MDE3ZFx1MDE3ZVx1MDExOFx1MDExOVx4YWNcdTAxN2FcdTAxMGNcdTAxNWZceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHUwMTFhXHUwMTVlXHUyNTYzXHUyNTUxXHUyNTU3XHUy''@;'; put 'put ''NTVkXHUwMTdiXHUwMTdjXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUwMTAyXHUwMTAzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx1MDExMVx1MDExMFx1MDEwZVx4Y2JcdTAxMGZcdTAxNDdceGNkXHhjZVx1MDExYlx1''@;'; put 'put ''MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MDE2Mlx1MDE2ZVx1MjU4MFx4ZDNceGRmXHhkNFx1MDE0M1x1MDE0NFx1MDE0OFx1MDE2MFx1MDE2MVx1MDE1NFx4ZGFcdTAxNTVcdTAxNzBceGZkXHhkZFx1MDE2M1x4YjRceGFkXHUwMmRkXHUwMmRiXHUwMmM3XHUwMmQ4XHhhN1x4ZjdceGI4XHhi''@;'; put 'put ''MFx4YThcdTAyZDlcdTAxNzFcdTAxNThcdTAxNTlcdTI1YTBceGEwIn0saWJtODUyOiJjcDg1MiIsY3NpYm04NTI6ImNwODUyIixjcDg1NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0NTJcdTA0MDJcdTA0NTNcdTA0MDNcdTA0NTFcdTA0MDFcdTA0NTRcdTA0MDRcdTA0NTVcdTA0MDVcdTA0''@;'; put 'put ''NTZcdTA0MDZcdTA0NTdcdTA0MDdcdTA0NThcdTA0MDhcdTA0NTlcdTA0MDlcdTA0NWFcdTA0MGFcdTA0NWJcdTA0MGJcdTA0NWNcdTA0MGNcdTA0NWVcdTA0MGVcdTA0NWZcdTA0MGZcdTA0NGVcdTA0MmVcdTA0NGFcdTA0MmFcdTA0MzBcdTA0MTBcdTA0MzFcdTA0MTFcdTA0NDZcdTA0MjZc''@;'; put 'put ''dTA0MzRcdTA0MTRcdTA0MzVcdTA0MTVcdTA0NDRcdTA0MjRcdTA0MzNcdTA0MTNceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MDQ0NVx1MDQyNVx1MDQzOFx1MDQxOFx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDQzOVx1MDQxOVx1MjUxMFx1MjUxNFx1MjUzNFx1''@;'; put 'put ''MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDQzYVx1MDQxYVx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRcdTA0M2JcdTA0MWJcdTA0M2NcdTA0MWNcdTA0M2RcdTA0MWRcdTA0M2VcdTA0MWVcdTA0M2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTA0MWZc''@;'; put 'put ''dTA0NGZcdTI1ODBcdTA0MmZcdTA0NDBcdTA0MjBcdTA0NDFcdTA0MjFcdTA0NDJcdTA0MjJcdTA0NDNcdTA0MjNcdTA0MzZcdTA0MTZcdTA0MzJcdTA0MTJcdTA0NGNcdTA0MmNcdTIxMTZceGFkXHUwNDRiXHUwNDJiXHUwNDM3XHUwNDE3XHUwNDQ4XHUwNDI4XHUwNDRkXHUwNDJkXHUwNDQ5''@;'; put 'put ''XHUwNDI5XHUwNDQ3XHUwNDI3XHhhN1x1MjVhMFx4YTAifSxpYm04NTU6ImNwODU1Iixjc2libTg1NToiY3A4NTUiLGNwODU2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVkOFx1MDVkOVx1MDVkYVx1MDVk''@;'; put 'put ''Ylx1MDVkY1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx1ZmZmZFx4YTNcdWZmZmRceGQ3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHhhZVx4YWNceGJkXHhiY1x1ZmZmZFx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHVmZmZkXHVmZmZkXHVmZmZkXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZcdWZmZmRcdTI1ODBcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRceGI1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhZlx4YjRceGFkXHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTg1NjoiY3A4NTYiLGNzaWJt''@;'; put 'put ''ODU2OiJjcDg1NiIsY3A4NTc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MDEzMVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlcdTAxMzBceGQ2XHhkY1x4ZjhceGEzXHhkOFx1''@;'; put 'put ''MDE1ZVx1MDE1Zlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx1MDExZVx1MDExZlx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUy''@;'; put 'put ''NTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhiYVx4YWFceGNhXHhjYlx4YzhcdWZmZmRceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4''@;'; put 'put ''ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVcdWZmZmRceGQ3XHhkYVx4ZGJceGQ5XHhlY1x4ZmZceGFmXHhiNFx4YWRceGIxXHVmZmZkXHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtODU3OiJjcDg1NyIsY3NpYm04NTc6ImNwODU3''@;'; put 'put ''IixjcDg1ODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHUwMTkyXHhlMVx4''@;'; put 'put ''ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUx''@;'; put 'put ''Y1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4ZjBceGQwXHhjYVx4Y2JceGM4XHUyMGFjXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4''@;'; put 'put ''ZDVceGI1XHhmZVx4ZGVceGRhXHhkYlx4ZDlceGZkXHhkZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm04NTg6ImNwODU4Iixjc2libTg1ODoiY3A4NTgiLGNwODYwOnt0eXBlOiJfc2JjcyIs''@;'; put 'put ''Y2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGUzXHhlMFx4YzFceGU3XHhlYVx4Y2FceGU4XHhjZFx4ZDRceGVjXHhjM1x4YzJceGM5XHhjMFx4YzhceGY0XHhmNVx4ZjJceGRhXHhmOVx4Y2NceGQ1XHhkY1x4YTJceGEzXHhkOVx1MjBhN1x4ZDNceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFh''@;'; put 'put ''XHhiYVx4YmZceGQyXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUy''@;'; put 'put ''NTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2Ix''@;'; put 'put ''XHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVh''@;'; put 'put ''MFx4YTAifSxpYm04NjA6ImNwODYwIixjc2libTg2MDoiY3A4NjAiLGNwODYxOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhkMFx4ZjBceGRlXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZmVceGZiXHhkZFx4''@;'; put 'put ''ZmRceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGMxXHhjZFx4ZDNceGRhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1''@;'; put 'put ''MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1''@;'; put 'put ''MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2''@;'; put 'put ''NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODYxOiJjcDg2MSIsY3NpYm04NjE6ImNwODYxIixjcDg2Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1''@;'; put 'put ''ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFceGEyXHhhM1x4YTVcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNc''@;'; put 'put ''eGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1''@;'; put 'put ''MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNc''@;'; put 'put ''dTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIy''@;'; put 'put ''MWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTg2MjoiY3A4NjIiLGNzaWJtODYyOiJjcDg2MiIsY3A4NjM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4YzJceGUwXHhiNlx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MjAxN1x4YzBceGE3XHhjOVx4YzhceGNhXHhm''@;'; put 'put ''NFx4Y2JceGNmXHhmYlx4ZjlceGE0XHhkNFx4ZGNceGEyXHhhM1x4ZDlceGRiXHUwMTkyXHhhNlx4YjRceGYzXHhmYVx4YThceGI4XHhiM1x4YWZceGNlXHUyMzEwXHhhY1x4YmRceGJjXHhiZVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2''@;'; put 'put ''XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUy''@;'; put 'put ''NTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIy''@;'; put 'put ''MjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjM6ImNwODYzIixjc2libTg2MzoiY3A4NjMiLGNwODY0Ont0eXBlOiJfc2JjcyIsY2hhcnM6IlwwXHgwMVx4MDJceDAzXHgw''@;'; put 'put ''NFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJFx1MDY2YSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xc''@;'; put 'put ''XV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGIwXHhiN1x1MjIxOVx1MjIxYVx1MjU5Mlx1MjUwMFx1MjUwMlx1MjUzY1x1MjUyNFx1MjUyY1x1MjUxY1x1MjUzNFx1MjUxMFx1MjUwY1x1MjUxNFx1MjUxOFx1MDNiMlx1MjIxZVx1MDNjNlx4YjFceGJkXHhiY1x1MjI0''@;'; put 'put ''OFx4YWJceGJiXHVmZWY3XHVmZWY4XHVmZmZkXHVmZmZkXHVmZWZiXHVmZWZjXHVmZmZkXHhhMFx4YWRcdWZlODJceGEzXHhhNFx1ZmU4NFx1ZmZmZFx1ZmZmZFx1ZmU4ZVx1ZmU4Zlx1ZmU5NVx1ZmU5OVx1MDYwY1x1ZmU5ZFx1ZmVhMVx1ZmVhNVx1MDY2MFx1MDY2MVx1MDY2Mlx1MDY2M1x1''@;'; put 'put ''MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1ZmVkMVx1MDYxYlx1ZmViMVx1ZmViNVx1ZmViOVx1MDYxZlx4YTJcdWZlODBcdWZlODFcdWZlODNcdWZlODVcdWZlY2FcdWZlOGJcdWZlOGRcdWZlOTFcdWZlOTNcdWZlOTdcdWZlOWJcdWZlOWZcdWZlYTNcdWZlYTdcdWZlYTlc''@;'; put 'put ''dWZlYWJcdWZlYWRcdWZlYWZcdWZlYjNcdWZlYjdcdWZlYmJcdWZlYmZcdWZlYzFcdWZlYzVcdWZlY2JcdWZlY2ZceGE2XHhhY1x4ZjdceGQ3XHVmZWM5XHUwNjQwXHVmZWQzXHVmZWQ3XHVmZWRiXHVmZWRmXHVmZWUzXHVmZWU3XHVmZWViXHVmZWVkXHVmZWVmXHVmZWYzXHVmZWJkXHVmZWNj''@;'; put 'put ''XHVmZWNlXHVmZWNkXHVmZWUxXHVmZTdkXHUwNjUxXHVmZWU1XHVmZWU5XHVmZWVjXHVmZWYwXHVmZWYyXHVmZWQwXHVmZWQ1XHVmZWY1XHVmZWY2XHVmZWRkXHVmZWQ5XHVmZWYxXHUyNWEwXHVmZmZkIn0saWJtODY0OiJjcDg2NCIsY3NpYm04NjQ6ImNwODY0IixjcDg2NTp7dHlwZToiX3Ni''@;'; put 'put ''Y3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4''@;'; put 'put ''ZDFceGFhXHhiYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YTRcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNc''@;'; put 'put ''dTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1''@;'; put 'put ''ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2Zc''@;'; put 'put ''eGIyXHUyNWEwXHhhMCJ9LGlibTg2NToiY3A4NjUiLGNzaWJtODY1OiJjcDg2NSIsY3A4NjY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFl''@;'; put 'put ''XHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUw''@;'; put 'put ''NDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNj''@;'; put 'put ''XHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwNDQwXHUw''@;'; put 'put ''NDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUwNDAxXHUwNDUxXHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDBlXHUwNDVlXHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIxMTZceGE0''@;'; put 'put ''XHUyNWEwXHhhMCJ9LGlibTg2NjoiY3A4NjYiLGNzaWJtODY2OiJjcDg2NiIsY3A4Njk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzg2XHVmZmZkXHhiN1x4YWNceGE2XHUyMDE4XHUyMDE5XHUwMzg4XHUyMDE1XHUwMzg5XHUw''@;'; put 'put ''MzhhXHUwM2FhXHUwMzhjXHVmZmZkXHVmZmZkXHUwMzhlXHUwM2FiXHhhOVx1MDM4Zlx4YjJceGIzXHUwM2FjXHhhM1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNjYVx1MDM5MFx1MDNjY1x1MDNjZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x4YmRcdTAzOThcdTAz''@;'; put 'put ''OTlceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDM5ZVx1MDM5Zlx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDNhMFx1MDNhMVx1MjU1YVx1MjU1''@;'; put 'put ''NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MDNiNFx1MDNiNVx1MjU4MFx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1''@;'; put 'put ''MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjMlx1MDNjNFx1MDM4NFx4YWRceGIxXHUwM2M1XHUwM2M2XHUwM2M3XHhhN1x1MDNjOFx1MDM4NVx4YjBceGE4XHUwM2M5XHUwM2NiXHUwM2IwXHUwM2NlXHUyNWEwXHhhMCJ9LGlibTg2OToiY3A4Njki''@;'; put 'put ''LGNzaWJtODY5OiJjcDg2OSIsY3A5MjI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlk''@;'; put 'put ''XHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVcdTIwM2VceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhj''@;'; put 'put ''Nlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDE2MFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRcdTAxN2RceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVl''@;'; put 'put ''XHhlZlx1MDE2MVx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRcdTAxN2VceGZmIn0saWJtOTIyOiJjcDkyMiIsY3NpYm05MjI6ImNwOTIyIixjcDEwNDY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZTg4XHhkN1x4ZjdcdWY4ZjZcdWY4ZjVcdWY4''@;'; put 'put ''ZjRcdWY4ZjdcdWZlNzFceDg4XHUyNWEwXHUyNTAyXHUyNTAwXHUyNTEwXHUyNTBjXHUyNTE0XHUyNTE4XHVmZTc5XHVmZTdiXHVmZTdkXHVmZTdmXHVmZTc3XHVmZThhXHVmZWYwXHVmZWYzXHVmZWYyXHVmZWNlXHVmZWNmXHVmZWQwXHVmZWY2XHVmZWY4XHVmZWZhXHVmZWZjXHhhMFx1Zjhm''@;'; put 'put ''YVx1ZjhmOVx1ZjhmOFx4YTRcdWY4ZmJcdWZlOGJcdWZlOTFcdWZlOTdcdWZlOWJcdWZlOWZcdWZlYTNcdTA2MGNceGFkXHVmZWE3XHVmZWIzXHUwNjYwXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHVmZWI3XHUwNjFiXHVmZWJiXHVmZWJm''@;'; put 'put ''XHVmZWNhXHUwNjFmXHVmZWNiXHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHUwNjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1XHUwNjM2XHUwNjM3XHVmZWM3XHUw''@;'; put 'put ''NjM5XHUwNjNhXHVmZWNjXHVmZTgyXHVmZTg0XHVmZThlXHVmZWQzXHUwNjQwXHUwNjQxXHUwNjQyXHUwNjQzXHUwNjQ0XHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHUwNjQ5XHUwNjRhXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHUwNjRmXHUwNjUwXHUwNjUxXHUwNjUyXHVmZWQ3XHVmZWRi''@;'; put 'put ''XHVmZWRmXHVmOGZjXHVmZWY1XHVmZWY3XHVmZWY5XHVmZWZiXHVmZWUzXHVmZWU3XHVmZWVjXHVmZWU5XHVmZmZkIn0saWJtMTA0NjoiY3AxMDQ2Iixjc2libTEwNDY6ImNwMTA0NiIsY3AxMTI0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3''@;'; put 'put ''XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDQwMVx1MDQwMlx1MDQ5MFx1MDQwNFx1MDQwNVx1MDQwNlx1MDQwN1x1MDQwOFx1MDQwOVx1MDQwYVx1MDQw''@;'; put 'put ''Ylx1MDQwY1x4YWRcdTA0MGVcdTA0MGZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0''@;'; put 'put ''MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJc''@;'; put 'put ''dTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTIxMTZcdTA0NTFcdTA0NTJcdTA0OTFcdTA0NTRcdTA0NTVcdTA0NTZcdTA0NTdcdTA0NThcdTA0NTlcdTA0NWFcdTA0NWJcdTA0NWNceGE3XHUwNDVl''@;'; put 'put ''XHUwNDVmIn0saWJtMTEyNDoiY3AxMTI0Iixjc2libTExMjQ6ImNwMTEyNCIsY3AxMTI1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1''@;'; put 'put ''MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQz''@;'; put 'put ''YVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1''@;'; put 'put ''MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0''@;'; put 'put ''MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1MDQ5MFx1MDQ5MVx1MDQwNFx1MDQ1NFx1MDQwNlx1MDQ1Nlx1MDQwN1x1MDQ1N1x4YjdcdTIyMWFcdTIxMTZceGE0''@;'; put 'put ''XHUyNWEwXHhhMCJ9LGlibTExMjU6ImNwMTEyNSIsY3NpYm0xMTI1OiJjcDExMjUiLGNwMTEyOTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1''@;'; put 'put ''XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHUwMTUzXHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNcdTAxNzhceGI1XHhiNlx4YjdcdTAxNTJceGI5XHhiYVx4YmJceGJjXHhi''@;'; put 'put ''ZFx4YmVceGJmXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAzXHhkZlx4ZTBceGUxXHhlMlx1''@;'; put 'put ''MDEwM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVceGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDFiMFx1MjBhYlx4ZmYifSxpYm0xMTI5OiJjcDExMjkiLGNzaWJtMTEyOToiY3AxMTI5''@;'; put 'put ''IixjcDExMzM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUw''@;'; put 'put ''ZTgxXHUwZTgyXHUwZTg0XHUwZTg3XHUwZTg4XHUwZWFhXHUwZThhXHUwZThkXHUwZTk0XHUwZTk1XHUwZTk2XHUwZTk3XHUwZTk5XHUwZTlhXHUwZTliXHUwZTljXHUwZTlkXHUwZTllXHUwZTlmXHUwZWExXHUwZWEyXHUwZWEzXHUwZWE1XHUwZWE3XHUwZWFiXHUwZWFkXHUwZWFlXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHUwZWFmXHUwZWIwXHUwZWIyXHUwZWIzXHUwZWI0XHUwZWI1XHUwZWI2XHUwZWI3XHUwZWI4XHUwZWI5XHUwZWJjXHUwZWIxXHUwZWJiXHUwZWJkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZWMwXHUwZWMxXHUwZWMyXHUwZWMzXHUwZWM0XHUwZWM4XHUwZWM5XHUwZWNhXHUw''@;'; put 'put ''ZWNiXHUwZWNjXHUwZWNkXHUwZWM2XHVmZmZkXHUwZWRjXHUwZWRkXHUyMGFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZWQwXHUwZWQxXHUwZWQyXHUwZWQz''@;'; put 'put ''XHUwZWQ0XHUwZWQ1XHUwZWQ2XHUwZWQ3XHUwZWQ4XHUwZWQ5XHVmZmZkXHVmZmZkXHhhMlx4YWNceGE2XHVmZmZkIn0saWJtMTEzMzoiY3AxMTMzIixjc2libTExMzM6ImNwMTEzMyIsY3AxMTYxOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGU0''@;'; put 'put ''OFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1''@;'; put 'put ''MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUz''@;'; put 'put ''N1x1MGUzOFx1MGUzOVx1MGUzYVx1MGU0OVx1MGU0YVx1MGU0Ylx1MjBhY1x1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1''@;'; put 'put ''MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx4YTJceGFjXHhhNlx4YTAifSxpYm0xMTYxOiJjcDExNjEiLGNzaWJtMTE2MToiY3AxMTYxIixjcDExNjI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHg4MVx4ODJceDgzXHg4NFx1MjAyNlx4''@;'; put 'put ''ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUw''@;'; put 'put ''ZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIz''@;'; put 'put ''XHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUw''@;'; put 'put ''ZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVh''@;'; put 'put ''XHUwZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0saWJtMTE2MjoiY3AxMTYyIixjc2libTExNjI6ImNwMTE2MiIsY3AxMTYzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkw''@;'; put 'put ''XHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x1MjBhY1x4YTVceGE2XHhhN1x1MDE1M1x4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHUwMTc4XHhiNVx4YjZceGI3XHUw''@;'; put 'put ''MTUyXHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx1MDEwMlx4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHUwMzAwXHhjZFx4Y2VceGNmXHUwMTEwXHhkMVx1MDMwOVx4ZDNceGQ0XHUwMWEwXHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDFhZlx1''@;'; put 'put ''MDMwM1x4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDMwMVx4ZWRceGVlXHhlZlx1MDExMVx4ZjFcdTAzMjNceGYzXHhmNFx1MDFhMVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxYjBcdTIwYWJceGZmIn0saWJtMTE2MzoiY3Ax''@;'; put 'put ''MTYzIixjc2libTExNjM6ImNwMTE2MyIsbWFjY3JvYXRpYW46e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2''@;'; put 'put ''XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHUwMTYwXHUyMTIyXHhiNFx4YThcdTIyNjBcdTAxN2RceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MjIwNlx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAxNjFcdTIyMmJceGFhXHhi''@;'; put 'put ''YVx1MjEyNlx1MDE3ZVx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTAxMDZceGFiXHUwMTBjXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MDExMFx1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FcdWZmZmRceGE5XHUyMDQ0XHhhNFx1''@;'; put 'put ''MjAzOVx1MjAzYVx4YzZceGJiXHUyMDEzXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJcdTAxMDdceGMxXHUwMTBkXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1MDExMVx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwM2MwXHhjYlx1MDJkYVx4YjhceGNhXHhl''@;'; put 'put ''Nlx1MDJjNyJ9LG1hY2N5cmlsbGljOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1''@;'; put 'put ''MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHUwNDA2XHhhZVx4YTlcdTIxMjJcdTA0MDJcdTA0NTJcdTIyNjBcdTA0MDNcdTA0NTNcdTIyMWVceGIxXHUy''@;'; put 'put ''MjY0XHUyMjY1XHUwNDU2XHhiNVx1MjIwMlx1MDQwOFx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwOVx1MDQ1OVx1MDQwYVx1MDQ1YVx1MDQ1OFx1MDQwNVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTA0MGJcdTA0NWJcdTA0MGNcdTA0NWNcdTA0''@;'; put 'put ''NTVcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyMDFlXHUwNDBlXHUwNDVlXHUwNDBmXHUwNDVmXHUyMTE2XHUwNDAxXHUwNDUxXHUwNDRmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUw''@;'; put 'put ''NDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHhhNCJ9LG1hY2dyZWVrOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGI5XHhi''@;'; put 'put ''Mlx4YzlceGIzXHhkNlx4ZGNcdTAzODVceGUwXHhlMlx4ZTRcdTAzODRceGE4XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGEzXHUyMTIyXHhlZVx4ZWZcdTIwMjJceGJkXHUyMDMwXHhmNFx4ZjZceGE2XHhhZFx4ZjlceGZiXHhmY1x1MjAyMFx1MDM5M1x1MDM5NFx1MDM5OFx1MDM5Ylx1MDM5ZVx1''@;'; put 'put ''MDNhMFx4ZGZceGFlXHhhOVx1MDNhM1x1MDNhYVx4YTdcdTIyNjBceGIwXHUwMzg3XHUwMzkxXHhiMVx1MjI2NFx1MjI2NVx4YTVcdTAzOTJcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOTlcdTAzOWFcdTAzOWNcdTAzYTZcdTAzYWJcdTAzYThcdTAzYTlcdTAzYWNcdTAzOWRceGFjXHUwMzlmXHUw''@;'; put 'put ''M2ExXHUyMjQ4XHUwM2E0XHhhYlx4YmJcdTIwMjZceGEwXHUwM2E1XHUwM2E3XHUwMzg2XHUwMzg4XHUwMTUzXHUyMDEzXHUyMDE1XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MDM4OVx1MDM4YVx1MDM4Y1x1MDM4ZVx1MDNhZFx1MDNhZVx1MDNhZlx1MDNjY1x1MDM4Zlx1MDNjZFx1''@;'; put 'put ''MDNiMVx1MDNiMlx1MDNjOFx1MDNiNFx1MDNiNVx1MDNjNlx1MDNiM1x1MDNiN1x1MDNiOVx1MDNiZVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZlx1MDNjMFx1MDNjZVx1MDNjMVx1MDNjM1x1MDNjNFx1MDNiOFx1MDNjOVx1MDNjMlx1MDNjN1x1MDNjNVx1MDNiNlx1MDNjYVx1MDNj''@;'; put 'put ''Ylx1MDM5MFx1MDNiMFx1ZmZmZCJ9LG1hY2ljZWxhbmQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhm''@;'; put 'put ''NVx4ZmFceGY5XHhmYlx4ZmNceGRkXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2''@;'; put 'put ''XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx4ZDBceGYwXHhkZVx4ZmVc''@;'; put 'put ''eGZkXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sbWFjcm9tYW46''@;'; put 'put ''e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4''@;'; put 'put ''YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUy''@;'; put 'put ''MjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHVmYjAxXHVmYjAyXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1''@;'; put 'put ''MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sbWFjcm9tYW5pYTp7dHlwZToiX3NiY3MiLGNoYXJz''@;'; put 'put ''OiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhk''@;'; put 'put ''Zlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBcdTAxMDJcdTAxNWVcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx1MDEwM1x1MDE1Zlx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4''@;'; put 'put ''YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx1MDE2Mlx1MDE2M1x1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhj''@;'; put 'put ''YVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LG1hY3RoYWk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhhYlx4YmJcdTIw''@;'; put 'put ''MjZcdWY4OGNcdWY4OGZcdWY4OTJcdWY4OTVcdWY4OThcdWY4OGJcdWY4OGVcdWY4OTFcdWY4OTRcdWY4OTdcdTIwMWNcdTIwMWRcdWY4OTlcdWZmZmRcdTIwMjJcdWY4ODRcdWY4ODlcdWY4ODVcdWY4ODZcdWY4ODdcdWY4ODhcdWY4OGFcdWY4OGRcdWY4OTBcdWY4OTNcdWY4OTZcdTIwMThc''@;'; put 'put ''dTIwMTlcdWZmZmRceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5''@;'; put 'put ''XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUw''@;'; put 'put ''ZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZWZmXHUyMDBiXHUyMDEzXHUyMDE0XHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUyMTIyXHUwZTRmXHUwZTUw''@;'; put 'put ''XHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHhhZVx4YTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxtYWN0dXJraXNoOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0''@;'; put 'put ''XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhi''@;'; put 'put ''MVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1''@;'; put 'put ''MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUwMTFlXHUwMTFmXHUwMTMwXHUwMTMxXHUwMTVlXHUwMTVmXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFc''@;'; put 'put ''eGRiXHhkOVx1ZmZmZFx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sbWFjdWtyYWluZTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlc''@;'; put 'put ''dTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTIwMjBceGIwXHUwNDkwXHhhM1x4YTdcdTIwMjJceGI2''@;'; put 'put ''XHUwNDA2XHhhZVx4YTlcdTIxMjJcdTA0MDJcdTA0NTJcdTIyNjBcdTA0MDNcdTA0NTNcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHUwNDU2XHhiNVx1MDQ5MVx1MDQwOFx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwOVx1MDQ1OVx1MDQwYVx1MDQ1YVx1MDQ1OFx1MDQwNVx4YWNcdTIyMWFc''@;'; put 'put ''dTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTA0MGJcdTA0NWJcdTA0MGNcdTA0NWNcdTA0NTVcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyMDFlXHUwNDBlXHUwNDVlXHUwNDBmXHUwNDVmXHUyMTE2XHUwNDAxXHUwNDUxXHUwNDRmXHUwNDMw''@;'; put 'put ''XHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUw''@;'; put 'put ''NDRjXHUwNDRkXHUwNDRlXHhhNCJ9LGtvaThyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjUxY1x1MjUyNFx1MjUyY1x1MjUzNFx1MjUzY1x1MjU4MFx1MjU4NFx1MjU4OFx1MjU4Y1x1MjU5MFx1MjU5MVx1MjU5Mlx1MjU5M1x1''@;'; put 'put ''MjMyMFx1MjVhMFx1MjIxOVx1MjIxYVx1MjI0OFx1MjI2NFx1MjI2NVx4YTBcdTIzMjFceGIwXHhiMlx4YjdceGY3XHUyNTUwXHUyNTUxXHUyNTUyXHUwNDUxXHUyNTUzXHUyNTU0XHUyNTU1XHUyNTU2XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUyNTVjXHUyNTVkXHUyNTVlXHUy''@;'; put 'put ''NTVmXHUyNTYwXHUyNTYxXHUwNDAxXHUyNTYyXHUyNTYzXHUyNTY0XHUyNTY1XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUyNTZiXHUyNTZjXHhhOVx1MDQ0ZVx1MDQzMFx1MDQzMVx1MDQ0Nlx1MDQzNFx1MDQzNVx1MDQ0NFx1MDQzM1x1MDQ0NVx1MDQzOFx1MDQzOVx1MDQzYVx1''@;'; put 'put ''MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0Zlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1MDQ0OFx1MDQ0ZFx1MDQ0OVx1MDQ0N1x1MDQ0YVx1MDQyZVx1MDQxMFx1MDQxMVx1MDQyNlx1MDQxNFx1MDQxNVx1MDQyNFx1MDQx''@;'; put 'put ''M1x1MDQyNVx1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQxNlx1MDQxMlx1MDQyY1x1MDQyYlx1MDQxN1x1MDQyOFx1MDQyZFx1MDQyOVx1MDQyN1x1MDQyYSJ9LGtvaTh1Ont0eXBlOiJfc2Jj''@;'; put 'put ''cyIsY2hhcnM6Ilx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjUxY1x1MjUyNFx1MjUyY1x1MjUzNFx1MjUzY1x1MjU4MFx1MjU4NFx1MjU4OFx1MjU4Y1x1MjU5MFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjMyMFx1MjVhMFx1MjIxOVx1MjIxYVx1MjI0OFx1MjI2NFx1MjI2''@;'; put 'put ''NVx4YTBcdTIzMjFceGIwXHhiMlx4YjdceGY3XHUyNTUwXHUyNTUxXHUyNTUyXHUwNDUxXHUwNDU0XHUyNTU0XHUwNDU2XHUwNDU3XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUwNDkxXHUyNTVkXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUwNDAxXHUwNDA0XHUyNTYzXHUwNDA2''@;'; put 'put ''XHUwNDA3XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUwNDkwXHUyNTZjXHhhOVx1MDQ0ZVx1MDQzMFx1MDQzMVx1MDQ0Nlx1MDQzNFx1MDQzNVx1MDQ0NFx1MDQzM1x1MDQ0NVx1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0Zlx1MDQ0''@;'; put 'put ''MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1MDQ0OFx1MDQ0ZFx1MDQ0OVx1MDQ0N1x1MDQ0YVx1MDQyZVx1MDQxMFx1MDQxMVx1MDQyNlx1MDQxNFx1MDQxNVx1MDQyNFx1MDQxM1x1MDQyNVx1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1''@;'; put 'put ''MDQxZFx1MDQxZVx1MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQxNlx1MDQxMlx1MDQyY1x1MDQyYlx1MDQxN1x1MDQyOFx1MDQyZFx1MDQyOVx1MDQyN1x1MDQyYSJ9LGtvaThydTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1''@;'; put 'put ''MTRcdTI1MThcdTI1MWNcdTI1MjRcdTI1MmNcdTI1MzRcdTI1M2NcdTI1ODBcdTI1ODRcdTI1ODhcdTI1OGNcdTI1OTBcdTI1OTFcdTI1OTJcdTI1OTNcdTIzMjBcdTI1YTBcdTIyMTlcdTIyMWFcdTIyNDhcdTIyNjRcdTIyNjVceGEwXHUyMzIxXHhiMFx4YjJceGI3XHhmN1x1MjU1MFx1MjU1''@;'; put 'put ''MVx1MjU1Mlx1MDQ1MVx1MDQ1NFx1MjU1NFx1MDQ1Nlx1MDQ1N1x1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1MjU1Ylx1MDQ5MVx1MDQ1ZVx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MDQwMVx1MDQwNFx1MjU2M1x1MDQwNlx1MDQwN1x1MjU2Nlx1MjU2N1x1MjU2OFx1MjU2OVx1MjU2YVx1''@;'; put 'put ''MDQ5MFx1MDQwZVx4YTlcdTA0NGVcdTA0MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZcdTA0MzJcdTA0NGNc''@;'; put 'put ''dTA0NGJcdTA0MzdcdTA0NDhcdTA0NGRcdTA0NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MmZcdTA0MjBcdTA0MjFcdTA0''@;'; put 'put ''MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0MmNcdTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0MjdcdTA0MmEifSxrb2k4dDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0OWJcdTA0OTNcdTIwMWFcdTA0OTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdTA0YjNc''@;'; put 'put ''dTIwMzlcdTA0YjJcdTA0YjdcdTA0YjZcdWZmZmRcdTA0OWFcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0ZWZcdTA0ZWVcdTA0NTFceGE0XHUwNGUzXHhhNlx4''@;'; put 'put ''YTdcdWZmZmRcdWZmZmRcdWZmZmRceGFiXHhhY1x4YWRceGFlXHVmZmZkXHhiMFx4YjFceGIyXHUwNDAxXHVmZmZkXHUwNGUyXHhiNlx4YjdcdWZmZmRcdTIxMTZcdWZmZmRceGJiXHVmZmZkXHVmZmZkXHVmZmZkXHhhOVx1MDQ0ZVx1MDQzMFx1MDQzMVx1MDQ0Nlx1MDQzNFx1MDQzNVx1MDQ0''@;'; put 'put ''NFx1MDQzM1x1MDQ0NVx1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0Zlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1MDQ0OFx1MDQ0ZFx1MDQ0OVx1MDQ0N1x1MDQ0YVx1MDQyZVx1MDQxMFx1''@;'; put 'put ''MDQxMVx1MDQyNlx1MDQxNFx1MDQxNVx1MDQyNFx1MDQxM1x1MDQyNVx1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQxNlx1MDQxMlx1MDQyY1x1MDQyYlx1MDQxN1x1MDQyOFx1MDQyZFx1MDQy''@;'; put 'put ''OVx1MDQyN1x1MDQyYSJ9LGFybXNjaWk4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5''@;'; put 'put ''ZFx4OWVceDlmXHhhMFx1ZmZmZFx1MDU4N1x1MDU4OSkoXHhiYlx4YWJcdTIwMTQuXHUwNTVkLC1cdTA1OGFcdTIwMjZcdTA1NWNcdTA1NWJcdTA1NWVcdTA1MzFcdTA1NjFcdTA1MzJcdTA1NjJcdTA1MzNcdTA1NjNcdTA1MzRcdTA1NjRcdTA1MzVcdTA1NjVcdTA1MzZcdTA1NjZcdTA1Mzdc''@;'; put 'put ''dTA1NjdcdTA1MzhcdTA1NjhcdTA1MzlcdTA1NjlcdTA1M2FcdTA1NmFcdTA1M2JcdTA1NmJcdTA1M2NcdTA1NmNcdTA1M2RcdTA1NmRcdTA1M2VcdTA1NmVcdTA1M2ZcdTA1NmZcdTA1NDBcdTA1NzBcdTA1NDFcdTA1NzFcdTA1NDJcdTA1NzJcdTA1NDNcdTA1NzNcdTA1NDRcdTA1NzRcdTA1''@;'; put 'put ''NDVcdTA1NzVcdTA1NDZcdTA1NzZcdTA1NDdcdTA1NzdcdTA1NDhcdTA1NzhcdTA1NDlcdTA1NzlcdTA1NGFcdTA1N2FcdTA1NGJcdTA1N2JcdTA1NGNcdTA1N2NcdTA1NGRcdTA1N2RcdTA1NGVcdTA1N2VcdTA1NGZcdTA1N2ZcdTA1NTBcdTA1ODBcdTA1NTFcdTA1ODFcdTA1NTJcdTA1ODJc''@;'; put 'put ''dTA1NTNcdTA1ODNcdTA1NTRcdTA1ODRcdTA1NTVcdTA1ODVcdTA1NTZcdTA1ODZcdTA1NWFcdWZmZmQifSxyazEwNDg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDAyXHUwNDAzXHUyMDFhXHUwNDUzXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUyMGFjXHUyMDMwXHUwNDA5XHUyMDM5XHUw''@;'; put 'put ''NDBhXHUwNDlhXHUwNGJhXHUwNDBmXHUwNDUyXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUwNDU5XHUyMDNhXHUwNDVhXHUwNDliXHUwNGJiXHUwNDVmXHhhMFx1MDRiMFx1MDRiMVx1MDRkOFx4YTRcdTA0ZThceGE2XHhhN1x1MDQwMVx4''@;'; put 'put ''YTlcdTA0OTJceGFiXHhhY1x4YWRceGFlXHUwNGFlXHhiMFx4YjFcdTA0MDZcdTA0NTZcdTA0ZTlceGI1XHhiNlx4YjdcdTA0NTFcdTIxMTZcdTA0OTNceGJiXHUwNGQ5XHUwNGEyXHUwNGEzXHUwNGFmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUw''@;'; put 'put ''NDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMz''@;'; put 'put ''XHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUw''@;'; put 'put ''NDRmIn0sdGN2bjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4ZGFcdTFlZTRceDAzXHUxZWVhXHUxZWVjXHUxZWVlXHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx1MWVlOFx1MWVmMFx1MWVmMlx1MWVmNlx1MWVmOFx4ZGRcdTFlZjRceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgx''@;'; put 'put ''ZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjMFx1MWVhMlx4YzNceGMxXHUxZWEwXHUxZWI2XHUxZWFjXHhjOFx1MWViYVx1MWViY1x4YzlcdTFlYjhc''@;'; put 'put ''dTFlYzZceGNjXHUxZWM4XHUwMTI4XHhjZFx1MWVjYVx4ZDJcdTFlY2VceGQ1XHhkM1x1MWVjY1x1MWVkOFx1MWVkY1x1MWVkZVx1MWVlMFx1MWVkYVx1MWVlMlx4ZDlcdTFlZTZcdTAxNjhceGEwXHUwMTAyXHhjMlx4Y2FceGQ0XHUwMWEwXHUwMWFmXHUwMTEwXHUwMTAzXHhlMlx4ZWFceGY0''@;'; put 'put ''XHUwMWExXHUwMWIwXHUwMTExXHUxZWIwXHUwMzAwXHUwMzA5XHUwMzAzXHUwMzAxXHUwMzIzXHhlMFx1MWVhM1x4ZTNceGUxXHUxZWExXHUxZWIyXHUxZWIxXHUxZWIzXHUxZWI1XHUxZWFmXHUxZWI0XHUxZWFlXHUxZWE2XHUxZWE4XHUxZWFhXHUxZWE0XHUxZWMwXHUxZWI3XHUxZWE3XHUx''@;'; put 'put ''ZWE5XHUxZWFiXHUxZWE1XHUxZWFkXHhlOFx1MWVjMlx1MWViYlx1MWViZFx4ZTlcdTFlYjlcdTFlYzFcdTFlYzNcdTFlYzVcdTFlYmZcdTFlYzdceGVjXHUxZWM5XHUxZWM0XHUxZWJlXHUxZWQyXHUwMTI5XHhlZFx1MWVjYlx4ZjJcdTFlZDRcdTFlY2ZceGY1XHhmM1x1MWVjZFx1MWVkM1x1''@;'; put 'put ''MWVkNVx1MWVkN1x1MWVkMVx1MWVkOVx1MWVkZFx1MWVkZlx1MWVlMVx1MWVkYlx1MWVlM1x4ZjlcdTFlZDZcdTFlZTdcdTAxNjlceGZhXHUxZWU1XHUxZWViXHUxZWVkXHUxZWVmXHUxZWU5XHUxZWYxXHUxZWYzXHUxZWY3XHUxZWY5XHhmZFx1MWVmNVx1MWVkMCJ9LGdlb3JnaWFuYWNhZGVt''@;'; put 'put ''eTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx4OGRceDhlXHg4Zlx4OTBcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIx''@;'; put 'put ''MjJcdTAxNjFcdTIwM2FcdTAxNTNceDlkXHg5ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHUx''@;'; put 'put ''MGQwXHUxMGQxXHUxMGQyXHUxMGQzXHUxMGQ0XHUxMGQ1XHUxMGQ2XHUxMGQ3XHUxMGQ4XHUxMGQ5XHUxMGRhXHUxMGRiXHUxMGRjXHUxMGRkXHUxMGRlXHUxMGRmXHUxMGUwXHUxMGUxXHUxMGUyXHUxMGUzXHUxMGU0XHUxMGU1XHUxMGU2XHUxMGU3XHUxMGU4XHUxMGU5XHUxMGVhXHUxMGVi''@;'; put 'put ''XHUxMGVjXHUxMGVkXHUxMGVlXHUxMGVmXHUxMGYwXHUxMGYxXHUxMGYyXHUxMGYzXHUxMGY0XHUxMGY1XHUxMGY2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhm''@;'; put 'put ''ZiJ9LGdlb3JnaWFucHM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJceDhkXHg4ZVx4OGZceDkwXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUy''@;'; put 'put ''MDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHg5ZFx4OWVcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4''@;'; put 'put ''YmRceGJlXHhiZlx1MTBkMFx1MTBkMVx1MTBkMlx1MTBkM1x1MTBkNFx1MTBkNVx1MTBkNlx1MTBmMVx1MTBkN1x1MTBkOFx1MTBkOVx1MTBkYVx1MTBkYlx1MTBkY1x1MTBmMlx1MTBkZFx1MTBkZVx1MTBkZlx1MTBlMFx1MTBlMVx1MTBlMlx1MTBmM1x1MTBlM1x1MTBlNFx1MTBlNVx1MTBl''@;'; put 'put ''Nlx1MTBlN1x1MTBlOFx1MTBlOVx1MTBlYVx1MTBlYlx1MTBlY1x1MTBlZFx1MTBlZVx1MTBmNFx1MTBlZlx1MTBmMFx1MTBmNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZj''@;'; put 'put ''XHhmZFx4ZmVceGZmIn0scHQxNTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDk2XHUwNDkyXHUwNGVlXHUwNDkzXHUyMDFlXHUyMDI2XHUwNGI2XHUwNGFlXHUwNGIyXHUwNGFmXHUwNGEwXHUwNGUyXHUwNGEyXHUwNDlhXHUwNGJhXHUwNGI4XHUwNDk3XHUyMDE4XHUyMDE5XHUyMDFjXHUy''@;'; put 'put ''MDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwNGIzXHUwNGI3XHUwNGExXHUwNGUzXHUwNGEzXHUwNDliXHUwNGJiXHUwNGI5XHhhMFx1MDQwZVx1MDQ1ZVx1MDQwOFx1MDRlOFx1MDQ5OFx1MDRiMFx4YTdcdTA0MDFceGE5XHUwNGQ4XHhhYlx4YWNcdTA0ZWZceGFlXHUwNDljXHhiMFx1MDRiMVx1''@;'; put 'put ''MDQwNlx1MDQ1Nlx1MDQ5OVx1MDRlOVx4YjZceGI3XHUwNDUxXHUyMTE2XHUwNGQ5XHhiYlx1MDQ1OFx1MDRhYVx1MDRhYlx1MDQ5ZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQx''@;'; put 'put ''ZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1''@;'; put 'put ''MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0ZiJ9LHZpc2NpaTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4''@;'; put 'put ''MDFcdTFlYjJceDAzXHgwNFx1MWViNFx1MWVhYVx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNcdTFlZjZceDE1XHgxNlx4MTdceDE4XHUxZWY4XHgxYVx4MWJceDFjXHgxZFx1MWVmNFx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJ''@;'; put 'put ''SktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MWVhMFx1MWVhZVx1MWViMFx1MWViNlx1MWVhNFx1MWVhNlx1MWVhOFx1MWVhY1x1MWViY1x1MWViOFx1MWViZVx1MWVjMFx1MWVjMlx1MWVjNFx1MWVjNlx1MWVkMFx1MWVkMlx1MWVk''@;'; put 'put ''NFx1MWVkNlx1MWVkOFx1MWVlMlx1MWVkYVx1MWVkY1x1MWVkZVx1MWVjYVx1MWVjZVx1MWVjY1x1MWVjOFx1MWVlNlx1MDE2OFx1MWVlNFx1MWVmMlx4ZDVcdTFlYWZcdTFlYjFcdTFlYjdcdTFlYTVcdTFlYTdcdTFlYTlcdTFlYWRcdTFlYmRcdTFlYjlcdTFlYmZcdTFlYzFcdTFlYzNcdTFl''@;'; put 'put ''YzVcdTFlYzdcdTFlZDFcdTFlZDNcdTFlZDVcdTFlZDdcdTFlZTBcdTAxYTBcdTFlZDlcdTFlZGRcdTFlZGZcdTFlY2JcdTFlZjBcdTFlZThcdTFlZWFcdTFlZWNcdTAxYTFcdTFlZGJcdTAxYWZceGMwXHhjMVx4YzJceGMzXHUxZWEyXHUwMTAyXHUxZWIzXHUxZWI1XHhjOFx4YzlceGNhXHUx''@;'; put 'put ''ZWJhXHhjY1x4Y2RcdTAxMjhcdTFlZjNcdTAxMTBcdTFlZTlceGQyXHhkM1x4ZDRcdTFlYTFcdTFlZjdcdTFlZWJcdTFlZWRceGQ5XHhkYVx1MWVmOVx1MWVmNVx4ZGRcdTFlZTFcdTAxYjBceGUwXHhlMVx4ZTJceGUzXHUxZWEzXHUwMTAzXHUxZWVmXHUxZWFiXHhlOFx4ZTlceGVhXHUxZWJi''@;'; put 'put ''XHhlY1x4ZWRcdTAxMjlcdTFlYzlcdTAxMTFcdTFlZjFceGYyXHhmM1x4ZjRceGY1XHUxZWNmXHUxZWNkXHUxZWU1XHhmOVx4ZmFcdTAxNjlcdTFlZTdceGZkXHUxZWUzXHUxZWVlIn0saXNvNjQ2Y246e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3''@;'; put 'put ''XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiNceGE1JSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWpr''@;'; put 'put ''bG1ub3BxcnN0dXZ3eHl6e3x9XHUyMDNlXHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGlzbzY0NmpwOnt0eXBlOiJfc2JjcyIsY2hh''@;'; put 'put ''cnM6IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xN''@;'; put 'put ''Tk9QUVJTVFVWV1hZWltceGE1XV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9XHUyMDNlXHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZCJ9LGhwcm9tYW44Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlm''@;'; put 'put ''XHhhMFx4YzBceGMyXHhjOFx4Y2FceGNiXHhjZVx4Y2ZceGI0XHUwMmNiXHUwMmM2XHhhOFx1MDJkY1x4ZDlceGRiXHUyMGE0XHhhZlx4ZGRceGZkXHhiMFx4YzdceGU3XHhkMVx4ZjFceGExXHhiZlx4YTRceGEzXHhhNVx4YTdcdTAxOTJceGEyXHhlMlx4ZWFceGY0XHhmYlx4ZTFceGU5XHhm''@;'; put 'put ''M1x4ZmFceGUwXHhlOFx4ZjJceGY5XHhlNFx4ZWJceGY2XHhmY1x4YzVceGVlXHhkOFx4YzZceGU1XHhlZFx4ZjhceGU2XHhjNFx4ZWNceGQ2XHhkY1x4YzlceGVmXHhkZlx4ZDRceGMxXHhjM1x4ZTNceGQwXHhmMFx4Y2RceGNjXHhkM1x4ZDJceGQ1XHhmNVx1MDE2MFx1MDE2MVx4ZGFcdTAx''@;'; put 'put ''NzhceGZmXHhkZVx4ZmVceGI3XHhiNVx4YjZceGJlXHUyMDE0XHhiY1x4YmRceGFhXHhiYVx4YWJcdTI1YTBceGJiXHhiMVx1ZmZmZCJ9LG1hY2ludG9zaDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhl''@;'; put 'put ''N1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIy''@;'; put 'put ''NjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRc''@;'; put 'put ''dTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdWZiMDFcdWZiMDJcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMx''@;'; put 'put ''XHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxhc2NpaTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSx0aXM2MjA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBj''@;'; put 'put ''XHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUw''@;'; put 'put ''ZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQz''@;'; put 'put ''XHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkIn19fSw3NjIzKGZlKXsidXNlIHN0cmljdCI7ZmUuZXhwb3J0cz17MTAwMjk6Im1hY2NlbnRldXJvIixtYWNjZW50ZXVybzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHUwMTAwXHUwMTAxXHhjOVx1MDEwNFx4ZDZceGRjXHhlMVx1MDEwNVx1MDEwY1x4ZTRcdTAxMGRcdTAxMDZcdTAx''@;'; put 'put ''MDdceGU5XHUwMTc5XHUwMTdhXHUwMTBlXHhlZFx1MDEwZlx1MDExMlx1MDExM1x1MDExNlx4ZjNcdTAxMTdceGY0XHhmNlx4ZjVceGZhXHUwMTFhXHUwMTFiXHhmY1x1MjAyMFx4YjBcdTAxMThceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJcdTAxMTlceGE4XHUyMjYwXHUw''@;'; put 'put ''MTIzXHUwMTJlXHUwMTJmXHUwMTJhXHUyMjY0XHUyMjY1XHUwMTJiXHUwMTM2XHUyMjAyXHUyMjExXHUwMTQyXHUwMTNiXHUwMTNjXHUwMTNkXHUwMTNlXHUwMTM5XHUwMTNhXHUwMTQ1XHUwMTQ2XHUwMTQzXHhhY1x1MjIxYVx1MDE0NFx1MDE0N1x1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1''@;'; put 'put ''MDE0OFx1MDE1MFx4ZDVcdTAxNTFcdTAxNGNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHUwMTRkXHUwMTU0XHUwMTU1XHUwMTU4XHUyMDM5XHUyMDNhXHUwMTU5XHUwMTU2XHUwMTU3XHUwMTYwXHUyMDFhXHUyMDFlXHUwMTYxXHUwMTVhXHUwMTViXHhj''@;'; put 'put ''MVx1MDE2NFx1MDE2NVx4Y2RcdTAxN2RcdTAxN2VcdTAxNmFceGQzXHhkNFx1MDE2Ylx1MDE2ZVx4ZGFcdTAxNmZcdTAxNzBcdTAxNzFcdTAxNzJcdTAxNzNceGRkXHhmZFx1MDEzN1x1MDE3Ylx1MDE0MVx1MDE3Y1x1MDEyMlx1MDJjNyJ9LDgwODoiY3A4MDgiLGlibTgwODoiY3A4MDgiLGNw''@;'; put 'put ''ODA4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1''@;'; put 'put ''MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5''@;'; put 'put ''M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1''@;'; put 'put ''MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0''@;'; put 'put ''OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwZVx1MDQ1ZVx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMTE2XHUyMGFjXHUyNWEwXHhhMCJ9LG1pazp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0''@;'; put 'put ''MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNc''@;'; put 'put ''dTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0''@;'; put 'put ''NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NjNcdTI1NTFcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1MTBcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJc''@;'; put 'put ''dTI1MjRcdTIxMTZceGE3XHUyNTU3XHUyNTVkXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIy''@;'; put 'put ''NjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxjcDcyMDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ZTlceGUyXHg4NFx4ZTBceDg2XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHg4''@;'; put 'put ''ZFx4OGVceDhmXHg5MFx1MDY1MVx1MDY1Mlx4ZjRceGE0XHUwNjQwXHhmYlx4ZjlcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRceGEzXHUwNjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMz''@;'; put 'put ''XHUwNjM0XHUwNjM1XHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZc''@;'; put 'put ''dTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA2MzZcdTA2MzdcdTA2MzhcdTA2''@;'; put 'put ''MzlcdTA2M2FcdTA2NDFceGI1XHUwNjQyXHUwNjQzXHUwNjQ0XHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHUwNjQ5XHUwNjRhXHUyMjYxXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHUwNjRmXHUwNjUwXHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGFz''@;'; put 'put ''Y2lpOGJpdDoiYXNjaWkiLHVzYXNjaWk6ImFzY2lpIixhbnNpeDM0OiJhc2NpaSIsYW5zaXgzNDE5Njg6ImFzY2lpIixhbnNpeDM0MTk4NjoiYXNjaWkiLGNzYXNjaWk6ImFzY2lpIixjcDM2NzoiYXNjaWkiLGlibTM2NzoiYXNjaWkiLGlzb2lyNjoiYXNjaWkiLGlzbzY0NnVzOiJhc2NpaSIs''@;'; put 'put ''aXNvNjQ2aXJ2OiJhc2NpaSIsdXM6ImFzY2lpIixsYXRpbjE6Imlzbzg4NTkxIixsYXRpbjI6Imlzbzg4NTkyIixsYXRpbjM6Imlzbzg4NTkzIixsYXRpbjQ6Imlzbzg4NTk0IixsYXRpbjU6Imlzbzg4NTk5IixsYXRpbjY6Imlzbzg4NTkxMCIsbGF0aW43OiJpc284ODU5MTMiLGxhdGluODoi''@;'; put 'put ''aXNvODg1OTE0IixsYXRpbjk6Imlzbzg4NTkxNSIsbGF0aW4xMDoiaXNvODg1OTE2Iixjc2lzb2xhdGluMToiaXNvODg1OTEiLGNzaXNvbGF0aW4yOiJpc284ODU5MiIsY3Npc29sYXRpbjM6Imlzbzg4NTkzIixjc2lzb2xhdGluNDoiaXNvODg1OTQiLGNzaXNvbGF0aW5jeXJpbGxpYzoiaXNv''@;'; put 'put ''ODg1OTUiLGNzaXNvbGF0aW5hcmFiaWM6Imlzbzg4NTk2Iixjc2lzb2xhdGluZ3JlZWs6Imlzbzg4NTk3Iixjc2lzb2xhdGluaGVicmV3OiJpc284ODU5OCIsY3Npc29sYXRpbjU6Imlzbzg4NTk5Iixjc2lzb2xhdGluNjoiaXNvODg1OTEwIixsMToiaXNvODg1OTEiLGwyOiJpc284ODU5MiIs''@;'; put 'put ''bDM6Imlzbzg4NTkzIixsNDoiaXNvODg1OTQiLGw1OiJpc284ODU5OSIsbDY6Imlzbzg4NTkxMCIsbDc6Imlzbzg4NTkxMyIsbDg6Imlzbzg4NTkxNCIsbDk6Imlzbzg4NTkxNSIsbDEwOiJpc284ODU5MTYiLGlzb2lyMTQ6ImlzbzY0NmpwIixpc29pcjU3OiJpc282NDZjbiIsaXNvaXIxMDA6''@;'; put 'put ''Imlzbzg4NTkxIixpc29pcjEwMToiaXNvODg1OTIiLGlzb2lyMTA5OiJpc284ODU5MyIsaXNvaXIxMTA6Imlzbzg4NTk0Iixpc29pcjE0NDoiaXNvODg1OTUiLGlzb2lyMTI3OiJpc284ODU5NiIsaXNvaXIxMjY6Imlzbzg4NTk3Iixpc29pcjEzODoiaXNvODg1OTgiLGlzb2lyMTQ4OiJpc284''@;'; put 'put ''ODU5OSIsaXNvaXIxNTc6Imlzbzg4NTkxMCIsaXNvaXIxNjY6InRpczYyMCIsaXNvaXIxNzk6Imlzbzg4NTkxMyIsaXNvaXIxOTk6Imlzbzg4NTkxNCIsaXNvaXIyMDM6Imlzbzg4NTkxNSIsaXNvaXIyMjY6Imlzbzg4NTkxNiIsY3A4MTk6Imlzbzg4NTkxIixpYm04MTk6Imlzbzg4NTkxIixj''@;'; put 'put ''eXJpbGxpYzoiaXNvODg1OTUiLGFyYWJpYzoiaXNvODg1OTYiLGFyYWJpYzg6Imlzbzg4NTk2IixlY21hMTE0OiJpc284ODU5NiIsYXNtbzcwODoiaXNvODg1OTYiLGdyZWVrOiJpc284ODU5NyIsZ3JlZWs4OiJpc284ODU5NyIsZWNtYTExODoiaXNvODg1OTciLGVsb3Q5Mjg6Imlzbzg4NTk3''@;'; put 'put ''IixoZWJyZXc6Imlzbzg4NTk4IixoZWJyZXc4OiJpc284ODU5OCIsdHVya2lzaDoiaXNvODg1OTkiLHR1cmtpc2g4OiJpc284ODU5OSIsdGhhaToiaXNvODg1OTExIix0aGFpODoiaXNvODg1OTExIixjZWx0aWM6Imlzbzg4NTkxNCIsY2VsdGljODoiaXNvODg1OTE0Iixpc29jZWx0aWM6Imlz''@;'; put 'put ''bzg4NTkxNCIsdGlzNjIwMDoidGlzNjIwIix0aXM2MjAyNTI5MToidGlzNjIwIix0aXM2MjAyNTMzMDoidGlzNjIwIiwxZTQ6Im1hY3JvbWFuIiwxMDAwNjoibWFjZ3JlZWsiLDEwMDA3OiJtYWNjeXJpbGxpYyIsMTAwNzk6Im1hY2ljZWxhbmQiLDEwMDgxOiJtYWN0dXJraXNoIixjc3BjOGNv''@;'; put 'put ''ZGVwYWdlNDM3OiJjcDQzNyIsY3NwYzc3NWJhbHRpYzoiY3A3NzUiLGNzcGM4NTBtdWx0aWxpbmd1YWw6ImNwODUwIixjc3BjcDg1MjoiY3A4NTIiLGNzcGM4NjJsYXRpbmhlYnJldzoiY3A4NjIiLGNwZ3I6ImNwODY5Iixtc2VlOiJjcDEyNTAiLG1zY3lybDoiY3AxMjUxIixtc2Fuc2k6ImNw''@;'; put 'put ''MTI1MiIsbXNncmVlazoiY3AxMjUzIixtc3R1cms6ImNwMTI1NCIsbXNoZWJyOiJjcDEyNTUiLG1zYXJhYjoiY3AxMjU2Iix3aW5iYWx0cmltOiJjcDEyNTciLGNwMjA4NjY6ImtvaThyIiwyMDg2Njoia29pOHIiLGlibTg3ODoia29pOHIiLGNza29pOHI6ImtvaThyIixjcDIxODY2OiJrb2k4''@;'; put 'put ''dSIsMjE4NjY6ImtvaTh1IixpYm0xMTY4OiJrb2k4dSIsc3RyazEwNDgyMDAyOiJyazEwNDgiLHRjdm41NzEyOiJ0Y3ZuIix0Y3ZuNTcxMjE6InRjdm4iLGdiMTk4ODgwOiJpc282NDZjbiIsY246ImlzbzY0NmNuIixjc2lzbzE0amlzYzYyMjBybzoiaXNvNjQ2anAiLGppc2M2MjIwMTk2OXJv''@;'; put 'put ''OiJpc282NDZqcCIsanA6ImlzbzY0NmpwIixjc2hwcm9tYW44OiJocHJvbWFuOCIscjg6Imhwcm9tYW44Iixyb21hbjg6Imhwcm9tYW44Iix4cm9tYW44OiJocHJvbWFuOCIsaWJtMTA1MToiaHByb21hbjgiLG1hYzoibWFjaW50b3NoIixjc21hY2ludG9zaDoibWFjaW50b3NoIn19LDcxNzUo''@;'; put 'put ''ZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg5MzgwNykuQnVmZmVyO2Z1bmN0aW9uIGMoKXt9ZnVuY3Rpb24gcygpe31mdW5jdGlvbiBBKCl7dGhpcy5vdmVyZmxvd0J5dGU9LTF9ZnVuY3Rpb24gdihMLFIpe3RoaXMuaWNvbnY9Un1mdW5jdGlvbiBDKEwsUil7dm9pZCAwPT09KEw9THx8''@;'; put 'put ''e30pLmFkZEJPTSYmKEwuYWRkQk9NPSEwKSx0aGlzLmVuY29kZXI9Ui5pY29udi5nZXRFbmNvZGVyKCJ1dGYtMTZsZSIsTCl9ZnVuY3Rpb24gdyhMLFIpe3RoaXMuZGVjb2Rlcj1udWxsLHRoaXMuaW5pdGlhbEJ5dGVzPVtdLHRoaXMuaW5pdGlhbEJ5dGVzTGVuPTAsdGhpcy5vcHRpb25zPUx8''@;'; put 'put ''fHt9LHRoaXMuaWNvbnY9Ui5pY29udn1mdW5jdGlvbiBTKEwsUil7dmFyIHg9Unx8InV0Zi0xNmxlIjtpZihMLmxlbmd0aD49MilpZigyNTQ9PUxbMF0mJjI1NT09TFsxXSl4PSJ1dGYtMTZiZSI7ZWxzZSBpZigyNTU9PUxbMF0mJjI1ND09TFsxXSl4PSJ1dGYtMTZsZSI7ZWxzZXtmb3IodmFy''@;'; put 'put ''IFU9MCxIPTAsVj1NYXRoLm1pbihMLmxlbmd0aC1MLmxlbmd0aCUyLDY0KSxOPTA7TjxWO04rPTIpMD09PUxbTl0mJjAhPT1MW04rMV0mJkgrKywwIT09TFtOXSYmMD09PUxbTisxXSYmVSsrO0g+VT94PSJ1dGYtMTZiZSI6SDxVJiYoeD0idXRmLTE2bGUiKX1yZXR1cm4geH1qLnV0ZjE2YmU9''@;'; put 'put ''YyxjLnByb3RvdHlwZS5lbmNvZGVyPXMsYy5wcm90b3R5cGUuZGVjb2Rlcj1BLGMucHJvdG90eXBlLmJvbUF3YXJlPSEwLHMucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEwpe2Zvcih2YXIgUj15LmZyb20oTCwidWNzMiIpLHg9MDt4PFIubGVuZ3RoO3grPTIpe3ZhciBVPVJbeF07Ult4XT1S''@;'; put 'put ''W3grMV0sUlt4KzFdPVV9cmV0dXJuIFJ9LHMucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sQS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oTCl7aWYoMD09TC5sZW5ndGgpcmV0dXJuIiI7dmFyIFI9eS5hbGxvYyhMLmxlbmd0aCsxKSx4PTAsVT0wO2ZvcigtMSE9PXRoaXMub3ZlcmZsb3dC''@;'; put 'put ''eXRlJiYoUlswXT1MWzBdLFJbMV09dGhpcy5vdmVyZmxvd0J5dGUseD0xLFU9Mik7eDxMLmxlbmd0aC0xO3grPTIsVSs9MilSW1VdPUxbeCsxXSxSW1UrMV09TFt4XTtyZXR1cm4gdGhpcy5vdmVyZmxvd0J5dGU9eD09TC5sZW5ndGgtMT9MW0wubGVuZ3RoLTFdOi0xLFIuc2xpY2UoMCxVKS50''@;'; put 'put ''b1N0cmluZygidWNzMiIpfSxBLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LGoudXRmMTY9dix2LnByb3RvdHlwZS5lbmNvZGVyPUMsdi5wcm90b3R5cGUuZGVjb2Rlcj13LEMucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEwpe3JldHVybiB0aGlzLmVuY29kZXIud3JpdGUoTCl9LEMucHJv''@;'; put 'put ''dG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuY29kZXIuZW5kKCl9LHcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEwpe2lmKCF0aGlzLmRlY29kZXIpe2lmKHRoaXMuaW5pdGlhbEJ5dGVzLnB1c2goTCksdGhpcy5pbml0aWFsQnl0ZXNMZW4rPUwubGVuZ3RoLHRoaXMuaW5p''@;'; put 'put ''dGlhbEJ5dGVzTGVuPDE2KXJldHVybiIiO3ZhciBSPVMoTD15LmNvbmNhdCh0aGlzLmluaXRpYWxCeXRlcyksdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7dGhpcy5kZWNvZGVyPXRoaXMuaWNvbnYuZ2V0RGVjb2RlcihSLHRoaXMub3B0aW9ucyksdGhpcy5pbml0aWFsQnl0ZXMubGVu''@;'; put 'put ''Z3RoPXRoaXMuaW5pdGlhbEJ5dGVzTGVuPTB9cmV0dXJuIHRoaXMuZGVjb2Rlci53cml0ZShMKX0sdy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZGVjb2Rlcil7dmFyIEw9eS5jb25jYXQodGhpcy5pbml0aWFsQnl0ZXMpLFI9UyhMLHRoaXMub3B0aW9ucy5kZWZhdWx0RW5j''@;'; put 'put ''b2RpbmcpO3RoaXMuZGVjb2Rlcj10aGlzLmljb252LmdldERlY29kZXIoUix0aGlzLm9wdGlvbnMpO3ZhciB4PXRoaXMuZGVjb2Rlci53cml0ZShMKSxVPXRoaXMuZGVjb2Rlci5lbmQoKTtyZXR1cm4gVT94K1U6eH1yZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpfX0sMzUwODkoZmUsaixoKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIHk9aCg5MzgwNykuQnVmZmVyO2Z1bmN0aW9uIGMoTCxSKXt0aGlzLmljb252PVIsdGhpcy5ib21Bd2FyZT0hMCx0aGlzLmlzTEU9TC5pc0xFfWZ1bmN0aW9uIHMoTCxSKXt0aGlzLmlzTEU9Ui5pc0xFLHRoaXMuaGlnaFN1cnJvZ2F0ZT0wfWZ1bmN0aW9uIEEoTCxS''@;'; put 'put ''KXt0aGlzLmlzTEU9Ui5pc0xFLHRoaXMuYmFkQ2hhcj1SLmljb252LmRlZmF1bHRDaGFyVW5pY29kZS5jaGFyQ29kZUF0KDApLHRoaXMub3ZlcmZsb3c9bnVsbH1mdW5jdGlvbiB2KEwsUil7dGhpcy5pY29udj1SfWZ1bmN0aW9uIEMoTCxSKXt2b2lkIDA9PT0oTD1MfHx7fSkuYWRkQk9NJiYo''@;'; put 'put ''TC5hZGRCT009ITApLHRoaXMuZW5jb2Rlcj1SLmljb252LmdldEVuY29kZXIoTC5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGYtMzJsZSIsTCl9ZnVuY3Rpb24gdyhMLFIpe3RoaXMuZGVjb2Rlcj1udWxsLHRoaXMuaW5pdGlhbEJ5dGVzPVtdLHRoaXMuaW5pdGlhbEJ5dGVzTGVuPTAsdGhpcy5vcHRp''@;'; put 'put ''b25zPUx8fHt9LHRoaXMuaWNvbnY9Ui5pY29udn1mdW5jdGlvbiBTKEwsUil7dmFyIHg9Unx8InV0Zi0zMmxlIjtpZihMLmxlbmd0aD49NClpZig2NTI3OT09PUwucmVhZFVJbnQzMkJFKDApKXg9InV0Zi0zMmJlIjtlbHNlIGlmKDY1Mjc5PT09TC5yZWFkVUludDMyTEUoMCkpeD0idXRmLTMy''@;'; put 'put ''bGUiO2Vsc2V7Zm9yKHZhciBVPTAsSD0wLFY9MCxOPTAsej1NYXRoLm1pbihMLmxlbmd0aC1MLmxlbmd0aCU0LDEyOCksWT0wO1k8ejtZKz00KXt2YXIgRj1MW1ldLFc9TFtZKzFdLHE9TFtZKzJdLHJlPUxbWSszXTsoMCE9PUZ8fFc+MTYpJiYrK0gsKDAhPT1yZXx8cT4xNikmJisrVSwwPT09''@;'; put 'put ''RiYmMD09PVcmJjA9PT1xJiYwIT09cmUmJk4rKywwIT09RiYmMD09PVcmJjA9PT1xJiYwPT09cmUmJlYrK31IPFU/eD0idXRmLTMyYmUiOlU8SCYmKHg9InV0Zi0zMmxlIiksTj5WP3g9InV0Zi0zMmJlIjpOPFYmJih4PSJ1dGYtMzJsZSIpfXJldHVybiB4fWouX3V0ZjMyPWMsai51dGYzMmxl''@;'; put 'put ''PXt0eXBlOiJfdXRmMzIiLGlzTEU6ITB9LGoudXRmMzJiZT17dHlwZToiX3V0ZjMyIixpc0xFOiExfSxqLnVjczRsZT0idXRmMzJsZSIsai51Y3M0YmU9InV0ZjMyYmUiLGMucHJvdG90eXBlLmVuY29kZXI9cyxjLnByb3RvdHlwZS5kZWNvZGVyPUEscy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rp''@;'; put 'put ''b24oTCl7Zm9yKHZhciBSPXkuZnJvbShMLCJ1Y3MyIikseD15LmFsbG9jKDIqUi5sZW5ndGgpLFU9dGhpcy5pc0xFP3gud3JpdGVVSW50MzJMRTp4LndyaXRlVUludDMyQkUsSD0wLFY9MDtWPFIubGVuZ3RoO1YrPTIpe3ZhciBOPVIucmVhZFVJbnQxNkxFKFYpLHo9NTUyOTY8PU4mJk48NTYz''@;'; put 'put ''MjA7aWYodGhpcy5oaWdoU3Vycm9nYXRlKXtpZigheiYmNTYzMjA8PU4mJk48NTczNDQpe1UuY2FsbCh4LDY1NTM2Kyh0aGlzLmhpZ2hTdXJyb2dhdGUtNTUyOTY8PDEwfE4tNTYzMjApLEgpLEgrPTQsdGhpcy5oaWdoU3Vycm9nYXRlPTA7Y29udGludWV9VS5jYWxsKHgsdGhpcy5oaWdoU3Vy''@;'; put 'put ''cm9nYXRlLEgpLEgrPTR9ej90aGlzLmhpZ2hTdXJyb2dhdGU9TjooVS5jYWxsKHgsTixIKSxIKz00LHRoaXMuaGlnaFN1cnJvZ2F0ZT0wKX1yZXR1cm4gSDx4Lmxlbmd0aCYmKHg9eC5zbGljZSgwLEgpKSx4fSxzLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtpZih0aGlzLmhpZ2hTdXJyb2dh''@;'; put 'put ''dGUpe3ZhciBMPXkuYWxsb2MoNCk7cmV0dXJuIHRoaXMuaXNMRT9MLndyaXRlVUludDMyTEUodGhpcy5oaWdoU3Vycm9nYXRlLDApOkwud3JpdGVVSW50MzJCRSh0aGlzLmhpZ2hTdXJyb2dhdGUsMCksdGhpcy5oaWdoU3Vycm9nYXRlPTAsTH19LEEucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9u''@;'; put 'put ''KEwpe2lmKDA9PT1MLmxlbmd0aClyZXR1cm4iIjt0aGlzLm92ZXJmbG93JiYoTD15LmNvbmNhdChbdGhpcy5vdmVyZmxvdyxMXSkpO3ZhciBSPUwubGVuZ3RoLUwubGVuZ3RoJTQ7TC5sZW5ndGghPT1SPyh0aGlzLm92ZXJmbG93PUwuc2xpY2UoUiksTD1MLnNsaWNlKDAsUikpOnRoaXMub3Zl''@;'; put 'put ''cmZsb3c9bnVsbDtmb3IodmFyIHg9eS5hbGxvYyhSKSxVPTAsSD0wO0g8UjtIKz00KXt2YXIgVj10aGlzLmlzTEU/TC5yZWFkVUludDMyTEUoSCk6TC5yZWFkVUludDMyQkUoSCk7aWYoVjw2NTUzNil4LndyaXRlVUludDE2TEUoVixVKSxVKz0yO2Vsc2UgaWYoVj4xMTE0MTExKXgud3JpdGVV''@;'; put 'put ''SW50MTZMRSh0aGlzLmJhZENoYXIsVSksVSs9MjtlbHNle3ZhciB6PTU2MzIwKygxMDIzJihWLT02NTUzNikpO3gud3JpdGVVSW50MTZMRSg1NTI5NnxWPj4xMCxVKSx4LndyaXRlVUludDE2TEUoeixVKz0yKSxVKz0yfX1yZXR1cm4geC5zbGljZSgwLFUpLnRvU3RyaW5nKCJ1Y3MyIil9LEEu''@;'; put 'put ''cHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3RoaXMub3ZlcmZsb3c9bnVsbH0sai51dGYzMj12LGoudWNzND12LHYucHJvdG90eXBlLmVuY29kZXI9Qyx2LnByb3RvdHlwZS5kZWNvZGVyPXcsQy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oTCl7cmV0dXJuIHRoaXMuZW5jb2Rlci53cml0ZShM''@;'; put 'put ''KX0sQy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5jb2Rlci5lbmQoKX0sdy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oTCl7aWYoIXRoaXMuZGVjb2Rlcil7aWYodGhpcy5pbml0aWFsQnl0ZXMucHVzaChMKSx0aGlzLmluaXRpYWxCeXRlc0xlbis9TC5sZW5ndGgs''@;'; put 'put ''dGhpcy5pbml0aWFsQnl0ZXNMZW48MzIpcmV0dXJuIiI7dmFyIHg9Uyh5LmNvbmNhdCh0aGlzLmluaXRpYWxCeXRlcyksdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7dGhpcy5kZWNvZGVyPXRoaXMuaWNvbnYuZ2V0RGVjb2Rlcih4LHRoaXMub3B0aW9ucyksdGhpcy5pbml0aWFsQnl0''@;'; put 'put ''ZXMubGVuZ3RoPXRoaXMuaW5pdGlhbEJ5dGVzTGVuPTB9cmV0dXJuIHRoaXMuZGVjb2Rlci53cml0ZShMKX0sdy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZGVjb2Rlcil7dmFyIEw9eS5jb25jYXQodGhpcy5pbml0aWFsQnl0ZXMpLFI9UyhMLHRoaXMub3B0aW9ucy5kZWZh''@;'; put 'put ''dWx0RW5jb2RpbmcpO3RoaXMuZGVjb2Rlcj10aGlzLmljb252LmdldERlY29kZXIoUix0aGlzLm9wdGlvbnMpO3ZhciB4PXRoaXMuZGVjb2Rlci53cml0ZShMKSxVPXRoaXMuZGVjb2Rlci5lbmQoKTtyZXR1cm4gVT94K1U6eH1yZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpfX0sOTc0NyhmZSxq''@;'; put 'put ''LGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDkzODA3KS5CdWZmZXI7ZnVuY3Rpb24gYyh6LFkpe3RoaXMuaWNvbnY9WX1qLnV0Zjc9YyxqLnVuaWNvZGUxMXV0Zjc9InV0ZjciLGMucHJvdG90eXBlLmVuY29kZXI9QSxjLnByb3RvdHlwZS5kZWNvZGVyPXYsYy5wcm90b3R5cGUuYm9tQXdhcmU9''@;'; put 'put ''ITA7dmFyIHM9L1teQS1aYS16MC05J1woXCksLVwuXC86XD8gXG5cclx0XSsvZztmdW5jdGlvbiBBKHosWSl7dGhpcy5pY29udj1ZLmljb252fWZ1bmN0aW9uIHYoeixZKXt0aGlzLmljb252PVkuaWNvbnYsdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPSIifUEucHJvdG90eXBl''@;'; put 'put ''LndyaXRlPWZ1bmN0aW9uKHope3JldHVybiB5LmZyb20oei5yZXBsYWNlKHMsZnVuY3Rpb24oWSl7cmV0dXJuIisiKygiKyI9PT1ZPyIiOnRoaXMuaWNvbnYuZW5jb2RlKFksInV0ZjE2LWJlIikudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoLz0rJC8sIiIpKSsiLSJ9LmJpbmQodGhpcykp''@;'; put 'put ''KX0sQS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fTtmb3IodmFyIEM9L1tBLVphLXowLTlcLytdLyx3PVtdLFM9MDtTPDI1NjtTKyspd1tTXT1DLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShTKSk7dmFyIFI9NDU7ZnVuY3Rpb24gVSh6LFkpe3RoaXMuaWNvbnY9WX1mdW5jdGlvbiBIKHos''@;'; put 'put ''WSl7dGhpcy5pY29udj1ZLmljb252LHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT15LmFsbG9jKDYpLHRoaXMuYmFzZTY0QWNjdW1JZHg9MH1mdW5jdGlvbiBWKHosWSl7dGhpcy5pY29udj1ZLmljb252LHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIn12LnBy''@;'; put 'put ''b3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtmb3IodmFyIFk9IiIsRj0wLFc9dGhpcy5pbkJhc2U2NCxxPXRoaXMuYmFzZTY0QWNjdW0scmU9MDtyZTx6Lmxlbmd0aDtyZSsrKWlmKFcpe2lmKCF3W3pbcmVdXSl7aWYocmU9PUYmJnpbcmVdPT1SKVkrPSIrIjtlbHNle3ZhciBtZT1xK3ouc2xp''@;'; put 'put ''Y2UoRixyZSkudG9TdHJpbmcoKTtZKz10aGlzLmljb252LmRlY29kZSh5LmZyb20obWUsImJhc2U2NCIpLCJ1dGYxNi1iZSIpfXpbcmVdIT1SJiZyZS0tLEY9cmUrMSxXPSExLHE9IiJ9fWVsc2UgNDM9PXpbcmVdJiYoWSs9dGhpcy5pY29udi5kZWNvZGUoei5zbGljZShGLHJlKSwiYXNjaWki''@;'; put 'put ''KSxGPXJlKzEsVz0hMCk7aWYoVyl7dmFyIENlPShtZT1xK3ouc2xpY2UoRikudG9TdHJpbmcoKSkubGVuZ3RoLW1lLmxlbmd0aCU4O3E9bWUuc2xpY2UoQ2UpLG1lPW1lLnNsaWNlKDAsQ2UpLFkrPXRoaXMuaWNvbnYuZGVjb2RlKHkuZnJvbShtZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9ZWxz''@;'; put 'put ''ZSBZKz10aGlzLmljb252LmRlY29kZSh6LnNsaWNlKEYpLCJhc2NpaSIpO3JldHVybiB0aGlzLmluQmFzZTY0PVcsdGhpcy5iYXNlNjRBY2N1bT1xLFl9LHYucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciB6PSIiO3JldHVybiB0aGlzLmluQmFzZTY0JiZ0aGlzLmJhc2U2NEFjY3VtLmxl''@;'; put 'put ''bmd0aD4wJiYoej10aGlzLmljb252LmRlY29kZSh5LmZyb20odGhpcy5iYXNlNjRBY2N1bSwiYmFzZTY0IiksInV0ZjE2LWJlIikpLHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIix6fSxqLnV0ZjdpbWFwPVUsVS5wcm90b3R5cGUuZW5jb2Rlcj1ILFUucHJvdG90eXBlLmRl''@;'; put 'put ''Y29kZXI9VixVLnByb3RvdHlwZS5ib21Bd2FyZT0hMCxILnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtmb3IodmFyIFk9dGhpcy5pbkJhc2U2NCxGPXRoaXMuYmFzZTY0QWNjdW0sVz10aGlzLmJhc2U2NEFjY3VtSWR4LHE9eS5hbGxvYyg1KnoubGVuZ3RoKzEwKSxyZT0wLG1lPTA7bWU8''@;'; put 'put ''ei5sZW5ndGg7bWUrKyl7dmFyIENlPXouY2hhckNvZGVBdChtZSk7MzI8PUNlJiZDZTw9MTI2PyhZJiYoVz4wJiYocmUrPXEud3JpdGUoRi5zbGljZSgwLFcpLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC9cLy9nLCIsIikucmVwbGFjZSgvPSskLywiIikscmUpLFc9MCkscVtyZSsrXT1S''@;'; put 'put ''LFk9ITEpLFl8fChxW3JlKytdPUNlLDM4PT09Q2UmJihxW3JlKytdPVIpKSk6KFl8fChxW3JlKytdPTM4LFk9ITApLFkmJihGW1crK109Q2U+PjgsRltXKytdPTI1NSZDZSxXPT1GLmxlbmd0aCYmKHJlKz1xLndyaXRlKEYudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoL1wvL2csIiwiKSxy''@;'; put 'put ''ZSksVz0wKSkpfXJldHVybiB0aGlzLmluQmFzZTY0PVksdGhpcy5iYXNlNjRBY2N1bUlkeD1XLHEuc2xpY2UoMCxyZSl9LEgucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciB6PXkuYWxsb2MoMTApLFk9MDtyZXR1cm4gdGhpcy5pbkJhc2U2NCYmKHRoaXMuYmFzZTY0QWNjdW1JZHg+MCYm''@;'; put 'put ''KFkrPXoud3JpdGUodGhpcy5iYXNlNjRBY2N1bS5zbGljZSgwLHRoaXMuYmFzZTY0QWNjdW1JZHgpLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC9cLy9nLCIsIikucmVwbGFjZSgvPSskLywiIiksWSksdGhpcy5iYXNlNjRBY2N1bUlkeD0wKSx6W1krK109Uix0aGlzLmluQmFzZTY0PSEx''@;'; put 'put ''KSx6LnNsaWNlKDAsWSl9O3ZhciBOPXcuc2xpY2UoKTtOWzQ0XT0hMCxWLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtmb3IodmFyIFk9IiIsRj0wLFc9dGhpcy5pbkJhc2U2NCxxPXRoaXMuYmFzZTY0QWNjdW0scmU9MDtyZTx6Lmxlbmd0aDtyZSsrKWlmKFcpe2lmKCFOW3pbcmVdXSl7''@;'; put 'put ''aWYocmU9PUYmJnpbcmVdPT1SKVkrPSImIjtlbHNle3ZhciBtZT1xK3ouc2xpY2UoRixyZSkudG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csIi8iKTtZKz10aGlzLmljb252LmRlY29kZSh5LmZyb20obWUsImJhc2U2NCIpLCJ1dGYxNi1iZSIpfXpbcmVdIT1SJiZyZS0tLEY9cmUrMSxXPSExLHE9''@;'; put 'put ''IiJ9fWVsc2UgMzg9PXpbcmVdJiYoWSs9dGhpcy5pY29udi5kZWNvZGUoei5zbGljZShGLHJlKSwiYXNjaWkiKSxGPXJlKzEsVz0hMCk7aWYoVyl7dmFyIENlPShtZT1xK3ouc2xpY2UoRikudG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csIi8iKSkubGVuZ3RoLW1lLmxlbmd0aCU4O3E9bWUuc2xp''@;'; put 'put ''Y2UoQ2UpLG1lPW1lLnNsaWNlKDAsQ2UpLFkrPXRoaXMuaWNvbnYuZGVjb2RlKHkuZnJvbShtZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9ZWxzZSBZKz10aGlzLmljb252LmRlY29kZSh6LnNsaWNlKEYpLCJhc2NpaSIpO3JldHVybiB0aGlzLmluQmFzZTY0PVcsdGhpcy5iYXNlNjRBY2N1bT1x''@;'; put 'put ''LFl9LFYucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciB6PSIiO3JldHVybiB0aGlzLmluQmFzZTY0JiZ0aGlzLmJhc2U2NEFjY3VtLmxlbmd0aD4wJiYoej10aGlzLmljb252LmRlY29kZSh5LmZyb20odGhpcy5iYXNlNjRBY2N1bSwiYmFzZTY0IiksInV0ZjE2LWJlIikpLHRoaXMuaW5C''@;'; put 'put ''YXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIix6fX0sMjk0MjIoZmUsail7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHkocyxBKXt0aGlzLmVuY29kZXI9cyx0aGlzLmFkZEJPTT0hMH1mdW5jdGlvbiBjKHMsQSl7dGhpcy5kZWNvZGVyPXMsdGhpcy5wYXNzPSExLHRoaXMub3B0aW9ucz1BfHx7''@;'; put 'put ''fX1qLlByZXBlbmRCT009eSx5LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5hZGRCT00mJihzPSJcdWZlZmYiK3MsdGhpcy5hZGRCT009ITEpLHRoaXMuZW5jb2Rlci53cml0ZShzKX0seS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5jb2Rl''@;'; put 'put ''ci5lbmQoKX0sai5TdHJpcEJPTT1jLGMucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHMpe3ZhciBBPXRoaXMuZGVjb2Rlci53cml0ZShzKTtyZXR1cm4gdGhpcy5wYXNzfHwhQXx8KCJcdWZlZmYiPT09QVswXSYmKEE9QS5zbGljZSgxKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vcHRpb25z''@;'; put 'put ''LnN0cmlwQk9NJiZ0aGlzLm9wdGlvbnMuc3RyaXBCT00oKSksdGhpcy5wYXNzPSEwKSxBfSxjLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpfX0sOTQyNDgoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg5MzgwNykuQnVmZmVyLGM9aCgyOTQy''@;'; put 'put ''Mikscz1mZS5leHBvcnRzO3MuZW5jb2RpbmdzPW51bGwscy5kZWZhdWx0Q2hhclVuaWNvZGU9Ilx1ZmZmZCIscy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGU9Ij8iLHMuZW5jb2RlPWZ1bmN0aW9uKHcsUyxMKXt3PSIiKyh3fHwiIik7dmFyIFI9cy5nZXRFbmNvZGVyKFMsTCkseD1SLndyaXRlKHcp''@;'; put 'put ''LFU9Ui5lbmQoKTtyZXR1cm4gVSYmVS5sZW5ndGg+MD95LmNvbmNhdChbeCxVXSk6eH0scy5kZWNvZGU9ZnVuY3Rpb24odyxTLEwpeyJzdHJpbmciPT10eXBlb2YgdyYmKHMuc2tpcERlY29kZVdhcm5pbmd8fChjb25zb2xlLmVycm9yKCJJY29udi1saXRlIHdhcm5pbmc6IGRlY29kZSgpLWlu''@;'; put 'put ''ZyBzdHJpbmdzIGlzIGRlcHJlY2F0ZWQuIFJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2h0dWNoa2luL2ljb252LWxpdGUvd2lraS9Vc2UtQnVmZmVycy13aGVuLWRlY29kaW5nIikscy5za2lwRGVjb2RlV2FybmluZz0hMCksdz15LmZyb20oIiIrKHd8fCIiKSwiYmluYXJ5IikpO3Zh''@;'; put 'put ''ciBSPXMuZ2V0RGVjb2RlcihTLEwpLHg9Ui53cml0ZSh3KSxVPVIuZW5kKCk7cmV0dXJuIFU/eCtVOnh9LHMuZW5jb2RpbmdFeGlzdHM9ZnVuY3Rpb24odyl7dHJ5e3JldHVybiBzLmdldENvZGVjKHcpLCEwfWNhdGNoe3JldHVybiExfX0scy50b0VuY29kaW5nPXMuZW5jb2RlLHMuZnJvbUVu''@;'; put 'put ''Y29kaW5nPXMuZGVjb2RlLHMuX2NvZGVjRGF0YUNhY2hlPXt9LHMuZ2V0Q29kZWM9ZnVuY3Rpb24odyl7cy5lbmNvZGluZ3N8fChzLmVuY29kaW5ncz1oKDcyODkzKSk7Zm9yKHZhciBTPXMuX2Nhbm9uaWNhbGl6ZUVuY29kaW5nKHcpLEw9e307Oyl7dmFyIFI9cy5fY29kZWNEYXRhQ2FjaGVb''@;'; put 'put ''U107aWYoUilyZXR1cm4gUjt2YXIgeD1zLmVuY29kaW5nc1tTXTtzd2l0Y2godHlwZW9mIHgpe2Nhc2Uic3RyaW5nIjpTPXg7YnJlYWs7Y2FzZSJvYmplY3QiOmZvcih2YXIgVSBpbiB4KUxbVV09eFtVXTtMLmVuY29kaW5nTmFtZXx8KEwuZW5jb2RpbmdOYW1lPVMpLFM9eC50eXBlO2JyZWFr''@;'; put 'put ''O2Nhc2UiZnVuY3Rpb24iOnJldHVybiBMLmVuY29kaW5nTmFtZXx8KEwuZW5jb2RpbmdOYW1lPVMpLFI9bmV3IHgoTCxzKSxzLl9jb2RlY0RhdGFDYWNoZVtMLmVuY29kaW5nTmFtZV09UixSO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJFbmNvZGluZyBub3QgcmVjb2duaXplZDogJyIrdysi''@;'; put 'put ''JyAoc2VhcmNoZWQgYXM6ICciK1MrIicpIil9fX0scy5fY2Fub25pY2FsaXplRW5jb2Rpbmc9ZnVuY3Rpb24oQyl7cmV0dXJuKCIiK0MpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvOlxkezR9JHxbXjAtOWEtel0vZywiIil9LHMuZ2V0RW5jb2Rlcj1mdW5jdGlvbih3LFMpe3ZhciBMPXMuZ2V0''@;'; put 'put ''Q29kZWModyksUj1uZXcgTC5lbmNvZGVyKFMsTCk7cmV0dXJuIEwuYm9tQXdhcmUmJlMmJlMuYWRkQk9NJiYoUj1uZXcgYy5QcmVwZW5kQk9NKFIsUykpLFJ9LHMuZ2V0RGVjb2Rlcj1mdW5jdGlvbih3LFMpe3ZhciBMPXMuZ2V0Q29kZWModyksUj1uZXcgTC5kZWNvZGVyKFMsTCk7cmV0dXJu''@;'; put 'put ''IEwuYm9tQXdhcmUmJiEoUyYmITE9PT1TLnN0cmlwQk9NKSYmKFI9bmV3IGMuU3RyaXBCT00oUixTKSksUn07dmFyIEE9dHlwZW9mIHByb2Nlc3M8InUiJiZwcm9jZXNzLnZlcnNpb25zJiZwcm9jZXNzLnZlcnNpb25zLm5vZGU7aWYoQSl7dmFyIHY9QS5zcGxpdCgiLiIpLm1hcChOdW1iZXIp''@;'; put 'put ''Oyh2WzBdPjB8fHZbMV0+PTEwKSYmaCg2MTA5MykocyksaCgxNTc5MSkocyl9fSwyMjAyMChmZSxqKXtqLnJlYWQ9ZnVuY3Rpb24oaCx5LGMscyxBKXt2YXIgdixDLHc9OCpBLXMtMSxTPSgxPDx3KS0xLEw9Uz4+MSxSPS03LHg9Yz9BLTE6MCxVPWM/LTE6MSxIPWhbeSt4XTtmb3IoeCs9VSx2''@;'; put 'put ''PUgmKDE8PC1SKS0xLEg+Pj0tUixSKz13O1I+MDt2PTI1Nip2K2hbeSt4XSx4Kz1VLFItPTgpO2ZvcihDPXYmKDE8PC1SKS0xLHY+Pj0tUixSKz1zO1I+MDtDPTI1NipDK2hbeSt4XSx4Kz1VLFItPTgpO2lmKDA9PT12KXY9MS1MO2Vsc2V7aWYodj09PVMpcmV0dXJuIEM/TmFOOjEvMCooSD8t''@;'; put 'put ''MToxKTtDKz1NYXRoLnBvdygyLHMpLHYtPUx9cmV0dXJuKEg/LTE6MSkqQypNYXRoLnBvdygyLHYtcyl9LGoud3JpdGU9ZnVuY3Rpb24oaCx5LGMscyxBLHYpe3ZhciBDLHcsUyxMPTgqdi1BLTEsUj0oMTw8TCktMSx4PVI+PjEsVT0yMz09PUE/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIs''@;'; put 'put ''LTc3KTowLEg9cz8wOnYtMSxWPXM/MTotMSxOPXk8MHx8MD09PXkmJjEveTwwPzE6MDtmb3IoeT1NYXRoLmFicyh5KSxpc05hTih5KXx8eT09PTEvMD8odz1pc05hTih5KT8xOjAsQz1SKTooQz1NYXRoLmZsb29yKE1hdGgubG9nKHkpL01hdGguTE4yKSx5KihTPU1hdGgucG93KDIsLUMpKTwx''@;'; put 'put ''JiYoQy0tLFMqPTIpLCh5Kz1DK3g+PTE/VS9TOlUqTWF0aC5wb3coMiwxLXgpKSpTPj0yJiYoQysrLFMvPTIpLEMreD49Uj8odz0wLEM9Uik6Qyt4Pj0xPyh3PSh5KlMtMSkqTWF0aC5wb3coMixBKSxDKz14KToodz15Kk1hdGgucG93KDIseC0xKSpNYXRoLnBvdygyLEEpLEM9MCkpO0E+PTg7''@;'; put 'put ''aFtjK0hdPTI1NSZ3LEgrPVYsdy89MjU2LEEtPTgpO2ZvcihDPUM8PEF8dyxMKz1BO0w+MDtoW2MrSF09MjU1JkMsSCs9VixDLz0yNTYsTC09OCk7aFtjK0gtVl18PTEyOCpOfX0sNzE5OTMoZmUpe2ZlLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24o''@;'; put 'put ''aCx5KXt5JiYoaC5zdXBlcl89eSxoLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6aCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSl9OmZ1bmN0aW9uKGgseSl7aWYoeSl7aC5zdXBlcl89eTt2YXIgYz1m''@;'; put 'put ''dW5jdGlvbigpe307Yy5wcm90b3R5cGU9eS5wcm90b3R5cGUsaC5wcm90b3R5cGU9bmV3IGMsaC5wcm90b3R5cGUuY29uc3RydWN0b3I9aH19fSw1ODIzOShmZSl7InVzZSBzdHJpY3QiO3ZhciB5LGMsaj1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsaD0ib2JqZWN0Ij09dHlwZW9mIFJl''@;'; put 'put ''ZmxlY3QmJm51bGwhPT1SZWZsZWN0JiZSZWZsZWN0LmFwcGx5O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBoJiYiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnR5KXRyeXt5PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwibGVuZ3RoIix7Z2V0OmZ1bmN0aW9uKCl7dGhyb3cg''@;'; put 'put ''Y319KSxjPXt9LGgoZnVuY3Rpb24oKXt0aHJvdyA0Mn0sbnVsbCx5KX1jYXRjaChZKXtZIT09YyYmKGg9bnVsbCl9ZWxzZSBoPW51bGw7dmFyIHM9L15ccypjbGFzc1xiLyxBPWZ1bmN0aW9uKEYpe3RyeXt2YXIgVz1qLmNhbGwoRik7cmV0dXJuIHMudGVzdChXKX1jYXRjaHtyZXR1cm4hMX19''@;'; put 'put ''LHY9ZnVuY3Rpb24oRil7dHJ5e3JldHVybiFBKEYpJiYoai5jYWxsKEYpLCEwKX1jYXRjaHtyZXR1cm4hMX19LEM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxIPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiEhU3ltYm9sLnRvU3RyaW5nVGFnLFY9ISgwIGluWyxdKSxOPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuITF9O2lmKCJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQpe3ZhciB6PWRvY3VtZW50LmFsbDtDLmNhbGwoeik9PT1DLmNhbGwoZG9jdW1lbnQuYWxsKSYmKE49ZnVuY3Rpb24oRil7aWYoKFZ8fCFGKSYmKHR5cGVvZiBGPiJ1Inx8Im9iamVjdCI9PXR5cGVvZiBGKSl0cnl7dmFy''@;'; put 'put ''IFc9Qy5jYWxsKEYpO3JldHVybigiW29iamVjdCBIVE1MQWxsQ29sbGVjdGlvbl0iPT09V3x8IltvYmplY3QgSFRNTCBkb2N1bWVudC5hbGwgY2xhc3NdIj09PVd8fCJbb2JqZWN0IEhUTUxDb2xsZWN0aW9uXSI9PT1XfHwiW29iamVjdCBPYmplY3RdIj09PVcpJiZudWxsPT1GKCIiKX1jYXRj''@;'; put 'put ''aHt9cmV0dXJuITF9KX1mZS5leHBvcnRzPWg/ZnVuY3Rpb24oRil7aWYoTihGKSlyZXR1cm4hMDtpZighRnx8ImZ1bmN0aW9uIiE9dHlwZW9mIEYmJiJvYmplY3QiIT10eXBlb2YgRilyZXR1cm4hMTt0cnl7aChGLG51bGwseSl9Y2F0Y2goVyl7aWYoVyE9PWMpcmV0dXJuITF9cmV0dXJuIUEo''@;'; put 'put ''RikmJnYoRil9OmZ1bmN0aW9uKEYpe2lmKE4oRikpcmV0dXJuITA7aWYoIUZ8fCJmdW5jdGlvbiIhPXR5cGVvZiBGJiYib2JqZWN0IiE9dHlwZW9mIEYpcmV0dXJuITE7aWYoSClyZXR1cm4gdihGKTtpZihBKEYpKXJldHVybiExO3ZhciBXPUMuY2FsbChGKTtyZXR1cm4hKCJbb2JqZWN0IEZ1''@;'; put 'put ''bmN0aW9uXSIhPT1XJiYiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iIT09VyYmIS9eXFtvYmplY3QgSFRNTC8udGVzdChXKSkmJnYoRil9fSw0NzI5KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNDQwNjgpO2ZlLmV4cG9ydHM9ZnVuY3Rpb24ocyl7cmV0dXJuISF5KHMpfX0sMjAw''@;'; put 'put ''NTMoZmUpe3ZhciBqPXt9LnRvU3RyaW5nO2ZlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oaCl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09ai5jYWxsKGgpfX0sNzA4MzcoZmUpeyJ1c2Ugc3RyaWN0IjtmZS5leHBvcnRzPU1hdGguYWJzfSwzMzgzKGZlKXsidXNlIHN0cmljdCI7''@;'; put 'put ''ZmUuZXhwb3J0cz1NYXRoLmZsb29yfSw4NTQ4OChmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihoKXtyZXR1cm4gaCE9aH19LDc5MDM5KGZlKXsidXNlIHN0cmljdCI7ZmUuZXhwb3J0cz1NYXRoLm1heH0sMTQ5ODEoZmUpeyJ1c2Ugc3RyaWN0Ijtm''@;'; put 'put ''ZS5leHBvcnRzPU1hdGgubWlufSw4MDk3NShmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9TWF0aC5wb3d9LDUzMzcoZmUpeyJ1c2Ugc3RyaWN0IjtmZS5leHBvcnRzPU1hdGgucm91bmR9LDQ5MTIoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg4NTQ4OCk7ZmUuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbihzKXtyZXR1cm4geShzKXx8MD09PXM/czpzPDA/LTE6MX19LDM0NzI1KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNzE5OTMpLGM9aCgxMzY4Nikscz1oKDI3MDU0KS5CdWZmZXIsQT1uZXcgQXJyYXkoMTYpO2Z1bmN0aW9uIHYoKXtjLmNhbGwodGhpcyw2NCksdGhpcy5fYT0x''@;'; put 'put ''NzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4Nzh9ZnVuY3Rpb24gQyh4LFUpe3JldHVybiB4PDxVfHg+Pj4zMi1VfWZ1bmN0aW9uIHcoeCxVLEgsVixOLHosWSl7cmV0dXJuIEMoeCsoVSZIfH5VJlYpK04renwwLFkpK1V8MH1m''@;'; put 'put ''dW5jdGlvbiBTKHgsVSxILFYsTix6LFkpe3JldHVybiBDKHgrKFUmVnxIJn5WKStOK3p8MCxZKStVfDB9ZnVuY3Rpb24gTCh4LFUsSCxWLE4seixZKXtyZXR1cm4gQyh4KyhVXkheVikrTit6fDAsWSkrVXwwfWZ1bmN0aW9uIFIoeCxVLEgsVixOLHosWSl7cmV0dXJuIEMoeCsoSF4oVXx+Vikp''@;'; put 'put ''K04renwwLFkpK1V8MH15KHYsYyksdi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgeD1BLFU9MDtVPDE2OysrVSl4W1VdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqVSk7dmFyIEg9dGhpcy5fYSxWPXRoaXMuX2IsTj10aGlzLl9jLHo9dGhpcy5fZDtIPXcoSCxWLE4s''@;'; put 'put ''eix4WzBdLDM2MTQwOTAzNjAsNyksej13KHosSCxWLE4seFsxXSwzOTA1NDAyNzEwLDEyKSxOPXcoTix6LEgsVix4WzJdLDYwNjEwNTgxOSwxNyksVj13KFYsTix6LEgseFszXSwzMjUwNDQxOTY2LDIyKSxIPXcoSCxWLE4seix4WzRdLDQxMTg1NDgzOTksNyksej13KHosSCxWLE4seFs1XSwx''@;'; put 'put ''MjAwMDgwNDI2LDEyKSxOPXcoTix6LEgsVix4WzZdLDI4MjE3MzU5NTUsMTcpLFY9dyhWLE4seixILHhbN10sNDI0OTI2MTMxMywyMiksSD13KEgsVixOLHoseFs4XSwxNzcwMDM1NDE2LDcpLHo9dyh6LEgsVixOLHhbOV0sMjMzNjU1Mjg3OSwxMiksTj13KE4seixILFYseFsxMF0sNDI5NDky''@;'; put 'put ''NTIzMywxNyksVj13KFYsTix6LEgseFsxMV0sMjMwNDU2MzEzNCwyMiksSD13KEgsVixOLHoseFsxMl0sMTgwNDYwMzY4Miw3KSx6PXcoeixILFYsTix4WzEzXSw0MjU0NjI2MTk1LDEyKSxOPXcoTix6LEgsVix4WzE0XSwyNzkyOTY1MDA2LDE3KSxIPVMoSCxWPXcoVixOLHosSCx4WzE1XSwx''@;'; put 'put ''MjM2NTM1MzI5LDIyKSxOLHoseFsxXSw0MTI5MTcwNzg2LDUpLHo9Uyh6LEgsVixOLHhbNl0sMzIyNTQ2NTY2NCw5KSxOPVMoTix6LEgsVix4WzExXSw2NDM3MTc3MTMsMTQpLFY9UyhWLE4seixILHhbMF0sMzkyMTA2OTk5NCwyMCksSD1TKEgsVixOLHoseFs1XSwzNTkzNDA4NjA1LDUpLHo9''@;'; put 'put ''Uyh6LEgsVixOLHhbMTBdLDM4MDE2MDgzLDkpLE49UyhOLHosSCxWLHhbMTVdLDM2MzQ0ODg5NjEsMTQpLFY9UyhWLE4seixILHhbNF0sMzg4OTQyOTQ0OCwyMCksSD1TKEgsVixOLHoseFs5XSw1Njg0NDY0MzgsNSksej1TKHosSCxWLE4seFsxNF0sMzI3NTE2MzYwNiw5KSxOPVMoTix6LEgs''@;'; put 'put ''Vix4WzNdLDQxMDc2MDMzMzUsMTQpLFY9UyhWLE4seixILHhbOF0sMTE2MzUzMTUwMSwyMCksSD1TKEgsVixOLHoseFsxM10sMjg1MDI4NTgyOSw1KSx6PVMoeixILFYsTix4WzJdLDQyNDM1NjM1MTIsOSksTj1TKE4seixILFYseFs3XSwxNzM1MzI4NDczLDE0KSxIPUwoSCxWPVMoVixOLHos''@;'; put 'put ''SCx4WzEyXSwyMzY4MzU5NTYyLDIwKSxOLHoseFs1XSw0Mjk0NTg4NzM4LDQpLHo9TCh6LEgsVixOLHhbOF0sMjI3MjM5MjgzMywxMSksTj1MKE4seixILFYseFsxMV0sMTgzOTAzMDU2MiwxNiksVj1MKFYsTix6LEgseFsxNF0sNDI1OTY1Nzc0MCwyMyksSD1MKEgsVixOLHoseFsxXSwyNzYz''@;'; put 'put ''OTc1MjM2LDQpLHo9TCh6LEgsVixOLHhbNF0sMTI3Mjg5MzM1MywxMSksTj1MKE4seixILFYseFs3XSw0MTM5NDY5NjY0LDE2KSxWPUwoVixOLHosSCx4WzEwXSwzMjAwMjM2NjU2LDIzKSxIPUwoSCxWLE4seix4WzEzXSw2ODEyNzkxNzQsNCksej1MKHosSCxWLE4seFswXSwzOTM2NDMwMDc0''@;'; put 'put ''LDExKSxOPUwoTix6LEgsVix4WzNdLDM1NzI0NDUzMTcsMTYpLFY9TChWLE4seixILHhbNl0sNzYwMjkxODksMjMpLEg9TChILFYsTix6LHhbOV0sMzY1NDYwMjgwOSw0KSx6PUwoeixILFYsTix4WzEyXSwzODczMTUxNDYxLDExKSxOPUwoTix6LEgsVix4WzE1XSw1MzA3NDI1MjAsMTYpLEg9''@;'; put 'put ''UihILFY9TChWLE4seixILHhbMl0sMzI5OTYyODY0NSwyMyksTix6LHhbMF0sNDA5NjMzNjQ1Miw2KSx6PVIoeixILFYsTix4WzddLDExMjY4OTE0MTUsMTApLE49UihOLHosSCxWLHhbMTRdLDI4Nzg2MTIzOTEsMTUpLFY9UihWLE4seixILHhbNV0sNDIzNzUzMzI0MSwyMSksSD1SKEgsVixO''@;'; put 'put ''LHoseFsxMl0sMTcwMDQ4NTU3MSw2KSx6PVIoeixILFYsTix4WzNdLDIzOTk5ODA2OTAsMTApLE49UihOLHosSCxWLHhbMTBdLDQyOTM5MTU3NzMsMTUpLFY9UihWLE4seixILHhbMV0sMjI0MDA0NDQ5NywyMSksSD1SKEgsVixOLHoseFs4XSwxODczMzEzMzU5LDYpLHo9Uih6LEgsVixOLHhb''@;'; put 'put ''MTVdLDQyNjQzNTU1NTIsMTApLE49UihOLHosSCxWLHhbNl0sMjczNDc2ODkxNiwxNSksVj1SKFYsTix6LEgseFsxM10sMTMwOTE1MTY0OSwyMSksSD1SKEgsVixOLHoseFs0XSw0MTQ5NDQ0MjI2LDYpLHo9Uih6LEgsVixOLHhbMTFdLDMxNzQ3NTY5MTcsMTApLE49UihOLHosSCxWLHhbMl0s''@;'; put 'put ''NzE4Nzg3MjU5LDE1KSxWPVIoVixOLHosSCx4WzldLDM5NTE0ODE3NDUsMjEpLHRoaXMuX2E9dGhpcy5fYStIfDAsdGhpcy5fYj10aGlzLl9iK1Z8MCx0aGlzLl9jPXRoaXMuX2MrTnwwLHRoaXMuX2Q9dGhpcy5fZCt6fDB9LHYucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aGlzLl9i''@;'; put 'put ''bG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhpcy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNl''@;'; put 'put ''dCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgeD1zLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4geC53cml0ZUludDMyTEUodGhpcy5f''@;'; put 'put ''YSwwKSx4LndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLHgud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCkseC53cml0ZUludDMyTEUodGhpcy5fZCwxMikseH0sZmUuZXhwb3J0cz12fSwzOTIxMChmZSl7ZnVuY3Rpb24gaihoLHkpe2lmKCFoKXRocm93IG5ldyBFcnJvcih5fHwiQXNzZXJ0aW9uIGZh''@;'; put 'put ''aWxlZCIpfWZlLmV4cG9ydHM9aixqLmVxdWFsPWZ1bmN0aW9uKHksYyxzKXtpZih5IT1jKXRocm93IG5ldyBFcnJvcihzfHwiQXNzZXJ0aW9uIGZhaWxlZDogIit5KyIgIT0gIitjKX19LDExNTQ0KGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt5LmRlZmluZUxvY2FsZSgiYWYi''@;'; put 'put ''LHttb250aHM6IkphbnVhcmllX0ZlYnJ1YXJpZV9NYWFydF9BcHJpbF9NZWlfSnVuaWVfSnVsaWVfQXVndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTXJ0X0Fwcl9NZWlfSnVuX0p1bF9BdWdfU2VwX09r''@;'; put 'put ''dF9Ob3ZfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTb25kYWdfTWFhbmRhZ19EaW5zZGFnX1dvZW5zZGFnX0RvbmRlcmRhZ19WcnlkYWdfU2F0ZXJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU29uX01hYV9EaW5fV29lX0Rvbl9WcnlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''TWluOiJTb19NYV9EaV9Xb19Eb19Wcl9TYSIuc3BsaXQoIl8iKSxtZXJpZGllbVBhcnNlOi92bXxubS9pLGlzUE06ZnVuY3Rpb24ocyl7cmV0dXJuL15ubSQvaS50ZXN0KHMpfSxtZXJpZGllbTpmdW5jdGlvbihzLEEsdil7cmV0dXJuIHM8MTI/dj8idm0iOiJWTSI6dj8ibm0iOiJOTSJ9LGxv''@;'; put 'put ''bmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1ZhbmRhZyBvbV0gTFQiLG5l''@;'; put 'put ''eHREYXk6IltNXHhmNHJlIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToiW0dpc3RlciBvbV0gTFQiLGxhc3RXZWVrOiJbTGFhc10gZGRkZCBbb21dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvb3IgJXMiLHBhc3Q6IiVzIGdlbGVkZSIs''@;'; put 'put ''czoiJ24gcGFhciBzZWtvbmRlcyIsc3M6IiVkIHNla29uZGVzIixtOiInbiBtaW51dXQiLG1tOiIlZCBtaW51dGUiLGg6IiduIHV1ciIsaGg6IiVkIHVyZSIsZDoiJ24gZGFnIixkZDoiJWQgZGFlIixNOiInbiBtYWFuZCIsTU06IiVkIG1hYW5kZSIseToiJ24gamFhciIseXk6IiVkIGphYXIi''@;'; put 'put ''fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24ocyl7cmV0dXJuIHMrKDE9PT1zfHw4PT09c3x8cz49MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShoKDk3NTg2KSl9LDUyMTU1KGZlLGosaCl7IWZ1bmN0aW9uKHkp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgYz1mdW5jdGlvbih3KXtyZXR1cm4gMD09PXc/MDoxPT09dz8xOjI9PT13PzI6dyUxMDA+PTMmJnclMTAwPD0xMD8zOnclMTAwPj0xMT80OjV9LHM9e3M6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1''@;'; put 'put ''MDYyOSIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVk''@;'; put 'put ''IFx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSJdLG06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYy''@;'; put 'put ''OSIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1''@;'; put 'put ''MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSJdLGg6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIs''@;'; put 'put ''Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYy''@;'; put 'put ''N1x1MDYyYSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSJdLGQ6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDY0YVx1MDY0OFx1MDY0NSIsIlx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRc''@;'; put 'put ''dTA2MmYiLFsiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NSJd''@;'; put 'put ''LE06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzNFx1MDY0N1x1MDYzMSIsIlx1MDYzNFx1MDY0N1x1MDYzMSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjRhXHUw''@;'; put 'put ''NjQ2Il0sIiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyNyIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMSJdLHk6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzOVx1MDYyN1x1MDY0NSIsIlx1MDYzOVx1MDYyN1x1MDY0''@;'; put 'put ''NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzOVx1MDY0OFx1MDYyN1x1MDY0NSIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0Ylx1MDYy''@;'; put 'put ''NyIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NSJdfSxBPWZ1bmN0aW9uKHcpe3JldHVybiBmdW5jdGlvbihTLEwsUix4KXt2YXIgVT1jKFMpLEg9c1t3XVtjKFMpXTtyZXR1cm4gMj09PVUmJihIPUhbTD8wOjFdKSxILnJlcGxhY2UoLyVkL2ksUyl9fSx2PVsiXHUwNjJjXHUwNjI3XHUwNjQ2XHUw''@;'; put 'put ''NjQxXHUwNjRhIiwiXHUwNjQxXHUwNjRhXHUwNjQxXHUwNjMxXHUwNjRhIiwiXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzIiwiXHUwNjIzXHUwNjQxXHUwNjMxXHUwNjRhXHUwNjQ0IiwiXHUwNjQ1XHUwNjI3XHUwNjRhIiwiXHUwNjJjXHUwNjQ4XHUwNjI3XHUwNjQ2IiwiXHUwNjJjXHUwNjQ4''@;'; put 'put ''XHUwNjRhXHUwNjQ0XHUwNjRhXHUwNjI5IiwiXHUwNjIzXHUwNjQ4XHUwNjJhIiwiXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxIiwiXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxIiwi''@;'; put 'put ''XHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIl07eS5kZWZpbmVMb2NhbGUoImFyLWR6Iix7bW9udGhzOnYsbW9udGhzU2hvcnQ6dix3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1''@;'; put 'put ''MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVc''@;'; put 'put ''dTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1''@;'; put 'put ''MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNf''@;'; put 'put ''XHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL1x1MjAwZk0vXHUyMDBmWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1N''@;'; put 'put ''TSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4iXHUwNjQ1Ij09PXd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUyxMKXtyZXR1cm4gdzwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2Mjdc''@;'; put 'put ''dTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2NGJcdTA2MjcgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1''@;'; put 'put ''MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3''@;'; put 'put ''XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2MjhcdTA2MzlcdTA2MmYgJXMiLHBhc3Q6Ilx1MDY0''@;'; put 'put ''NVx1MDY0Nlx1MDYzMCAlcyIsczpBKCJzIiksc3M6QSgicyIpLG06QSgibSIpLG1tOkEoIm0iKSxoOkEoImgiKSxoaDpBKCJoIiksZDpBKCJkIiksZGQ6QSgiZCIpLE06QSgiTSIpLE1NOkEoIk0iKSx5OkEoInkiKSx5eTpBKCJ5Iil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcu''@;'; put 'put ''cmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjAsZG95OjR9fSl9KGgoOTc1ODYpKX0sNTM1ODMoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJhci1rdyIse21vbnRoczoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0''@;'; put 'put ''MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUw''@;'; put 'put ''NjQ4XHUwNjMyX1x1MDYzYVx1MDYzNFx1MDYyYV9cdTA2MzRcdTA2MmFcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MmNcdTA2NDZcdTA2MjhcdTA2MzEiLnNwbGl0''@;'; put 'put ''KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUw''@;'; put 'put ''NjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OFx1MDYzMl9cdTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUwNjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhc''@;'; put 'put ''dTA2NDZcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJhXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1''@;'; put 'put ''MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRc''@;'; put 'put ''dTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjI3XHUwNjJkXHUwNjJmX1x1MDYyN1x1MDYyYVx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUw''@;'; put 'put ''NjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb''@;'; put 'put ''XHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2Mjdc''@;'; put 'put ''dTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYy''@;'; put 'put ''N1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2''@;'; put 'put ''NDZcdTA2MzAgJXMiLHM6Ilx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNc''@;'; put 'put ''dTA2MjdcdTA2MzlcdTA2MjkiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUw''@;'; put 'put ''NjMxIix5OiJcdTA2MzNcdTA2NDZcdTA2MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEifSx3ZWVrOntkb3c6MCxkb3k6MTJ9fSl9KGgoOTc1ODYpKX0sNDE2MzgoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3ZhciBjPXsxOiIxIiwyOiIyIiwzOiIz''@;'; put 'put ''Iiw0OiI0Iiw1OiI1Iiw2OiI2Iiw3OiI3Iiw4OiI4Iiw5OiI5IiwwOiIwIn0scz1mdW5jdGlvbihTKXtyZXR1cm4gMD09PVM/MDoxPT09Uz8xOjI9PT1TPzI6UyUxMDA+PTMmJlMlMTAwPD0xMD8zOlMlMTAwPj0xMT80OjV9LEE9e3M6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2''@;'; put 'put ''IFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUw''@;'; put 'put ''NjRhXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSJdLG06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1''@;'; put 'put ''MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQy''@;'; put 'put ''XHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSJdLGg6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2''@;'; put 'put ''IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjRhXHUwNjQ2Il0s''@;'; put 'put ''IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSJdLGQ6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDY0YVx1MDY0OFx1MDY0NSIsIlx1MDY0YVx1MDY0''@;'; put 'put ''OFx1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0Ylx1MDYy''@;'; put 'put ''NyIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NSJdLE06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzNFx1MDY0N1x1MDYzMSIsIlx1MDYzNFx1MDY0N1x1MDYzMSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3XHUwNjQ2Iiwi''@;'; put 'put ''XHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyNyIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMSJdLHk6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzOVx1MDYy''@;'; put 'put ''N1x1MDY0NSIsIlx1MDYzOVx1MDYyN1x1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzOVx1MDY0OFx1MDYyN1x1MDY0NSIsIiVkIFx1''@;'; put 'put ''MDYzOVx1MDYyN1x1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NSJdfSx2PWZ1bmN0aW9uKFMpe3JldHVybiBmdW5jdGlvbihMLFIseCxVKXt2YXIgSD1zKEwpLFY9QVtTXVtzKEwpXTtyZXR1cm4gMj09PUgmJihWPVZbUj8wOjFdKSxWLnJlcGxhY2UoLyVkL2ksTCl9''@;'; put 'put ''fSxDPVsiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxIiwiXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxIiwiXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzIiwiXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0IiwiXHUwNjQ1XHUwNjI3XHUwNjRhXHUwNjQ4Iiwi''@;'; put 'put ''XHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4IiwiXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4IiwiXHUwNjIzXHUwNjNhXHUwNjMzXHUwNjM3XHUwNjMzIiwiXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUw''@;'; put 'put ''NjI4XHUwNjMxIiwiXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIl07eS5kZWZpbmVMb2NhbGUoImFyLWx5Iix7bW9udGhzOkMsbW9udGhzU2hvcnQ6Qyx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIz''@;'; put 'put ''XHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0''@;'; put 'put ''NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFc''@;'; put 'put ''dTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL1x1MjAwZk0vXHUyMDBmWVlZWSIsTEw6IkQg''@;'; put 'put ''TU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbihTKXtyZXR1cm4iXHUwNjQ1Ij09PVN9LG1lcmlkaWVtOmZ1bmN0aW9uKFMsTCxSKXtyZXR1cm4g''@;'; put 'put ''UzwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2NGJc''@;'; put 'put ''dTA2MjcgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0''@;'; put 'put ''NVx1MDYzMyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0''@;'; put 'put ''aXZlVGltZTp7ZnV0dXJlOiJcdTA2MjhcdTA2MzlcdTA2MmYgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczp2KCJzIiksc3M6digicyIpLG06digibSIpLG1tOnYoIm0iKSxoOnYoImgiKSxoaDp2KCJoIiksZDp2KCJkIiksZGQ6digiZCIpLE06digiTSIpLE1NOnYoIk0iKSx5''@;'; put 'put ''OnYoInkiKSx5eTp2KCJ5Iil9LHByZXBhcnNlOmZ1bmN0aW9uKFMpe3JldHVybiBTLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oUyl7cmV0dXJuIFMucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihMKXtyZXR1cm4gY1tMXX0pLnJlcGxhY2UoLywvZywiXHUwNjBj''@;'; put 'put ''Iil9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oaCg5NzU4NikpfSw4NzgyMyhmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5kZWZpbmVMb2NhbGUoImFyLW1hIix7bW9udGhzOiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3''@;'; put 'put ''XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJfXHUwNjNhXHUw''@;'; put 'put ''NjM0XHUwNjJhX1x1MDYzNFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi''@;'; put 'put ''XHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2''@;'; put 'put ''NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjMyX1x1MDYzYVx1MDYzNFx1MDYyYV9cdTA2MzRcdTA2MmFcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDYyOFx1MDYzMV9c''@;'; put 'put ''dTA2MmZcdTA2MmNcdTA2NDZcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUw''@;'; put 'put ''NjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjdcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUw''@;'; put 'put ''NjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9u''@;'; put 'put ''Z0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFc''@;'; put 'put ''dTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5l''@;'; put 'put ''eHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIs''@;'; put 'put ''bGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUw''@;'; put 'put ''NjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIs''@;'; put 'put ''aGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0''@;'; put 'put ''Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShoKDk3NTg2KSl9LDc3MTIoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3ZhciBjPXsxOiJcdTA2NjEiLDI6Ilx1MDY2MiIsMzoiXHUwNjYzIiw0OiJc''@;'; put 'put ''dTA2NjQiLDU6Ilx1MDY2NSIsNjoiXHUwNjY2Iiw3OiJcdTA2NjciLDg6Ilx1MDY2OCIsOToiXHUwNjY5IiwwOiJcdTA2NjAifSxzPXsiXHUwNjYxIjoiMSIsIlx1MDY2MiI6IjIiLCJcdTA2NjMiOiIzIiwiXHUwNjY0IjoiNCIsIlx1MDY2NSI6IjUiLCJcdTA2NjYiOiI2IiwiXHUwNjY3Ijoi''@;'; put 'put ''NyIsIlx1MDY2OCI6IjgiLCJcdTA2NjkiOiI5IiwiXHUwNjYwIjoiMCJ9O3kuZGVmaW5lTG9jYWxlKCJhci1wcyIse21vbnRoczoiXHUwNjQzXHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNjQ2IFx1MDYyN1x1MDY0NFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YV9cdTA2MzRcdTA2MjhcdTA2MjdcdTA2''@;'; put 'put ''MzdfXHUwNjIyXHUwNjMwXHUwNjI3XHUwNjMxX1x1MDY0Nlx1MDY0YVx1MDYzM1x1MDYyN1x1MDY0Nl9cdTA2MjNcdTA2NGFcdTA2NTFcdTA2MjdcdTA2MzFfXHUwNjJkXHUwNjMyXHUwNjRhXHUwNjMxXHUwNjI3XHUwNjQ2X1x1MDYyYVx1MDY0NVx1MDY1MVx1MDY0OFx1MDYzMl9cdTA2MjJc''@;'; put 'put ''dTA2MjhfXHUwNjIzXHUwNjRhXHUwNjQ0XHUwNjQ4XHUwNjQ0X1x1MDYyYVx1MDYzNFx1MDYzMVx1MDY0YSBcdTA2MjdcdTA2NDRcdTA2MjNcdTA2NDhcdTA2NTFcdTA2NDRfXHUwNjJhXHUwNjM0XHUwNjMxXHUwNjRhXHUwNjQ2IFx1MDYyN1x1MDY0NFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0''@;'; put 'put ''YV9cdTA2NDNcdTA2MjdcdTA2NDZcdTA2NDhcdTA2NDYgXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjQ4XHUwNjUxXHUwNjQ0Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2NDNcdTA2NjJfXHUwNjM0XHUwNjI4XHUwNjI3XHUwNjM3X1x1MDYyMlx1MDYzMFx1MDYyN1x1MDYzMV9cdTA2NDZc''@;'; put 'put ''dTA2NGFcdTA2MzNcdTA2MjdcdTA2NDZfXHUwNjIzXHUwNjRhXHUwNjUxXHUwNjI3XHUwNjMxX1x1MDYyZFx1MDYzMlx1MDY0YVx1MDYzMVx1MDYyN1x1MDY0Nl9cdTA2MmFcdTA2NDVcdTA2NTFcdTA2NDhcdTA2MzJfXHUwNjIyXHUwNjI4X1x1MDYyM1x1MDY0YVx1MDY0NFx1MDY0OFx1MDY0''@;'; put 'put ''NF9cdTA2MmFcdTA2NjFfXHUwNjJhXHUwNjYyX1x1MDY0M1x1MDY2MSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2''@;'; put 'put ''MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUw''@;'; put 'put ''NjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2''@;'; put 'put ''MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VF''@;'; put 'put ''eGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1''@;'; put 'put ''Lyxpc1BNOmZ1bmN0aW9uKHYpe3JldHVybiJcdTA2NDUiPT09dn0sbWVyaWRpZW06ZnVuY3Rpb24odixDLHcpe3JldHVybiB2PDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDRcdTA2NDkg''@;'; put 'put ''XHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0''@;'; put 'put ''OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUw''@;'; put 'put ''NjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLHNzOiIlZCBc''@;'; put 'put ''dTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLG06Ilx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3''@;'; put 'put ''XHUwNjJhIixkOiJcdTA2NGFcdTA2NDhcdTA2NDUiLGRkOiIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIseToiXHUwNjMzXHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUwNjMzXHUwNjQ2XHUw''@;'; put 'put ''NjQ4XHUwNjI3XHUwNjJhIn0scHJlcGFyc2U6ZnVuY3Rpb24odil7cmV0dXJuIHYucmVwbGFjZSgvW1x1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1MDY2MF0vZyxmdW5jdGlvbihDKXtyZXR1cm4gc1tDXX0pLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIiku''@;'; put 'put ''cmVwbGFjZSgvW1x1MDY2MVx1MDY2Ml0oPyFbXHUwNjJhXHUwNjQzXSkvZyxmdW5jdGlvbihDKXtyZXR1cm4gc1tDXX0pLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIikucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbih2KXtyZXR1cm4gdi5yZXBsYWNlKC9c''@;'; put 'put ''ZC9nLGZ1bmN0aW9uKEMpe3JldHVybiBjW0NdfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KGgoOTc1ODYpKX0sNzgyNjEoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3ZhciBjPXsxOiJcdTA2NjEiLDI6Ilx1MDY2MiIsMzoiXHUwNjYz''@;'; put 'put ''Iiw0OiJcdTA2NjQiLDU6Ilx1MDY2NSIsNjoiXHUwNjY2Iiw3OiJcdTA2NjciLDg6Ilx1MDY2OCIsOToiXHUwNjY5IiwwOiJcdTA2NjAifSxzPXsiXHUwNjYxIjoiMSIsIlx1MDY2MiI6IjIiLCJcdTA2NjMiOiIzIiwiXHUwNjY0IjoiNCIsIlx1MDY2NSI6IjUiLCJcdTA2NjYiOiI2IiwiXHUw''@;'; put 'put ''NjY3IjoiNyIsIlx1MDY2OCI6IjgiLCJcdTA2NjkiOiI5IiwiXHUwNjYwIjoiMCJ9O3kuZGVmaW5lTG9jYWxlKCJhci1zYSIse21vbnRoczoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2''@;'; put 'put ''MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4X1x1MDYyM1x1MDYzYVx1MDYzM1x1MDYzN1x1MDYzM19cdTA2MzNc''@;'; put 'put ''dTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6''@;'; put 'put ''Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUw''@;'; put 'put ''NjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OF9cdTA2MjNcdTA2M2FcdTA2MzNcdTA2MzdcdTA2MzNfXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhc''@;'; put 'put ''dTA2NDFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1''@;'; put 'put ''MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9c''@;'; put 'put ''dTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUw''@;'; put 'put ''NjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVt''@;'; put 'put ''UGFyc2U6L1x1MDYzNXxcdTA2NDUvLGlzUE06ZnVuY3Rpb24odil7cmV0dXJuIlx1MDY0NSI9PT12fSxtZXJpZGllbTpmdW5jdGlvbih2LEMsdyl7cmV0dXJuIHY8MTI/Ilx1MDYzNSI6Ilx1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1''@;'; put 'put ''IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRk''@;'; put 'put ''ZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJk''@;'; put 'put ''ZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6Ilx1MDYyYlx1MDY0OFx1''@;'; put 'put ''MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLGhoOiIlZCBcdTA2''@;'; put 'put ''MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5OiJcdTA2MzNcdTA2NDZcdTA2MjkiLHl5''@;'; put 'put ''OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEifSxwcmVwYXJzZTpmdW5jdGlvbih2KXtyZXR1cm4gdi5yZXBsYWNlKC9bXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHUwNjYwXS9nLGZ1bmN0aW9uKEMpe3JldHVybiBzW0Nd''@;'; put 'put ''fSkucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbih2KXtyZXR1cm4gdi5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEMpe3JldHVybiBjW0NdfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KGgoOTc1ODYpKX0sNTY3MDMoZmUs''@;'; put 'put ''aixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJhci10biIse21vbnRoczoiXHUwNjJjXHUwNjI3XHUwNjQ2XHUwNjQxXHUwNjRhX1x1MDY0MVx1MDY0YVx1MDY0MVx1MDYzMVx1MDY0YV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjQxXHUw''@;'; put 'put ''NjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2MmNcdTA2NDhcdTA2MjdcdTA2NDZfXHUwNjJjXHUwNjQ4XHUwNjRhXHUwNjQ0XHUwNjRhXHUwNjI5X1x1MDYyM1x1MDY0OFx1MDYyYV9cdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQz''@;'; put 'put ''XHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDYyY1x1MDYyN1x1MDY0Nlx1MDY0MVx1MDY0YV9cdTA2NDFcdTA2''@;'; put 'put ''NGFcdTA2NDFcdTA2MzFcdTA2NGFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDY0MVx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjJjXHUwNjQ4XHUwNjI3XHUwNjQ2X1x1MDYyY1x1MDY0OFx1MDY0YVx1MDY0NFx1MDY0YVx1MDYyOV9cdTA2MjNc''@;'; put 'put ''dTA2NDhcdTA2MmFfXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFc''@;'; put 'put ''dTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUw''@;'; put 'put ''NjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2Mjlf''@;'; put 'put ''XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06''@;'; put 'put ''c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2''@;'; put 'put ''MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1''@;'; put 'put ''MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkg''@;'; put 'put ''XHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6Ilx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYy''@;'; put 'put ''Ylx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2''@;'; put 'put ''MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5OiJcdTA2MzNcdTA2NDZcdTA2MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhc''@;'; put 'put ''dTA2MjdcdTA2MmEifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oaCg5NzU4NikpfSwzMzEwOChmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7dmFyIGM9ezE6Ilx1MDY2MSIsMjoiXHUwNjYyIiwzOiJcdTA2NjMiLDQ6Ilx1MDY2NCIsNToiXHUwNjY1Iiw2OiJcdTA2NjYiLDc6Ilx1''@;'; put 'put ''MDY2NyIsODoiXHUwNjY4Iiw5OiJcdTA2NjkiLDA6Ilx1MDY2MCJ9LHM9eyJcdTA2NjEiOiIxIiwiXHUwNjYyIjoiMiIsIlx1MDY2MyI6IjMiLCJcdTA2NjQiOiI0IiwiXHUwNjY1IjoiNSIsIlx1MDY2NiI6IjYiLCJcdTA2NjciOiI3IiwiXHUwNjY4IjoiOCIsIlx1MDY2OSI6IjkiLCJcdTA2''@;'; put 'put ''NjAiOiIwIn0sQT1mdW5jdGlvbihMKXtyZXR1cm4gMD09PUw/MDoxPT09TD8xOjI9PT1MPzI6TCUxMDA+PTMmJkwlMTAwPD0xMD8zOkwlMTAwPj0xMT80OjV9LHY9e3M6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIlx1''@;'; put 'put ''MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyYlx1''@;'; put 'put ''MDY0OFx1MDYyN1x1MDY0NiIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSJdLG06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIlx1MDYy''@;'; put 'put ''Zlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyZlx1MDY0''@;'; put 'put ''Mlx1MDYyN1x1MDYyNlx1MDY0MiIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSJdLGg6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIlx1MDYzM1x1''@;'; put 'put ''MDYyN1x1MDYzOVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIs''@;'; put 'put ''IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSJdLGQ6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDY0YVx1MDY0OFx1MDY0NSIsIlx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsi''@;'; put 'put ''XHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NSJdLE06WyJcdTA2''@;'; put 'put ''MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzNFx1MDY0N1x1MDYzMSIsIlx1MDYzNFx1MDY0N1x1MDYzMSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjRhXHUwNjQ2Il0sIiVk''@;'; put 'put ''IFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyNyIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMSJdLHk6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzOVx1MDYyN1x1MDY0NSIsIlx1MDYzOVx1MDYyN1x1MDY0NSBcdTA2NDhc''@;'; put 'put ''dTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzOVx1MDY0OFx1MDYyN1x1MDY0NSIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1''@;'; put 'put ''MDYzOVx1MDYyN1x1MDY0NSJdfSxDPWZ1bmN0aW9uKEwpe3JldHVybiBmdW5jdGlvbihSLHgsVSxIKXt2YXIgVj1BKFIpLE49dltMXVtBKFIpXTtyZXR1cm4gMj09PVYmJihOPU5beD8wOjFdKSxOLnJlcGxhY2UoLyVkL2ksUil9fSx3PVsiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMx''@;'; put 'put ''IiwiXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxIiwiXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzIiwiXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0IiwiXHUwNjQ1XHUwNjI3XHUwNjRhXHUwNjQ4IiwiXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4IiwiXHUw''@;'; put 'put ''NjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4IiwiXHUwNjIzXHUwNjNhXHUwNjMzXHUwNjM3XHUwNjMzIiwiXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxIiwiXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1''@;'; put 'put ''XHUwNjI4XHUwNjMxIiwiXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIl07eS5kZWZpbmVMb2NhbGUoImFyIix7bW9udGhzOncsbW9udGhzU2hvcnQ6dyx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1''@;'; put 'put ''MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRc''@;'; put 'put ''dTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUw''@;'; put 'put ''NjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1''@;'; put 'put ''MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL1x1MjAwZk0vXHUyMDBmWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExM''@;'; put 'put ''OiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbihMKXtyZXR1cm4iXHUwNjQ1Ij09PUx9LG1lcmlkaWVtOmZ1bmN0aW9uKEwsUix4KXtyZXR1cm4gTDwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVE''@;'; put 'put ''YXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2NGJcdTA2MjcgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1''@;'; put 'put ''MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0''@;'; put 'put ''XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2MjhcdTA2MzlcdTA2MmYgJXMi''@;'; put 'put ''LHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczpDKCJzIiksc3M6QygicyIpLG06QygibSIpLG1tOkMoIm0iKSxoOkMoImgiKSxoaDpDKCJoIiksZDpDKCJkIiksZGQ6QygiZCIpLE06QygiTSIpLE1NOkMoIk0iKSx5OkMoInkiKSx5eTpDKCJ5Iil9LHByZXBhcnNlOmZ1bmN0aW9uKEwp''@;'; put 'put ''e3JldHVybiBMLnJlcGxhY2UoL1tcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdTA2NjBdL2csZnVuY3Rpb24oUil7cmV0dXJuIHNbUl19KS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKEwpe3JldHVybiBM''@;'; put 'put ''LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUil7cmV0dXJuIGNbUl19KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KGgoOTc1ODYpKX0sNDY1MDgoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3ZhciBjPXsxOiItaW5jaSIsNToiLWluY2ki''@;'; put 'put ''LDg6Ii1pbmNpIiw3MDoiLWluY2kiLDgwOiItaW5jaSIsMjoiLW5jaSIsNzoiLW5jaSIsMjA6Ii1uY2kiLDUwOiItbmNpIiwzOiItXHhmY25jXHhmYyIsNDoiLVx4ZmNuY1x4ZmMiLDEwMDoiLVx4ZmNuY1x4ZmMiLDY6Ii1uY1x1MDEzMSIsOToiLXVuY3UiLDEwOiItdW5jdSIsMzA6Ii11bmN1''@;'; put 'put ''Iiw2MDoiLVx1MDEzMW5jXHUwMTMxIiw5MDoiLVx1MDEzMW5jXHUwMTMxIn07eS5kZWZpbmVMb2NhbGUoImF6Iix7bW9udGhzOiJ5YW52YXJfZmV2cmFsX21hcnRfYXByZWxfbWF5X2l5dW5faXl1bF9hdnF1c3Rfc2VudHlhYnJfb2t0eWFicl9ub3lhYnJfZGVrYWJyIi5zcGxpdCgiXyIpLG1v''@;'; put 'put ''bnRoc1Nob3J0OiJ5YW5fZmV2X21hcl9hcHJfbWF5X2l5bl9peWxfYXZxX3Nlbl9va3Rfbm95X2RlayIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiQmF6YXJfQmF6YXIgZXJ0XHUwMjU5c2lfXHhjN1x1MDI1OXJcdTAxNWZcdTAyNTluYlx1MDI1OSBheFx1MDE1ZmFtXHUwMTMxX1x4YzdcdTAyNTly''@;'; put 'put ''XHUwMTVmXHUwMjU5bmJcdTAyNTlfQ1x4ZmNtXHUwMjU5IGF4XHUwMTVmYW1cdTAxMzFfQ1x4ZmNtXHUwMjU5X1x1MDE1ZVx1MDI1OW5iXHUwMjU5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkJhel9CekVfXHhjN0F4X1x4YzdcdTAyNTlyX0NBeF9DXHhmY21fXHUwMTVlXHUwMjU5biIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQnpfQkVfXHhjN0FfXHhjN1x1MDI1OV9DQV9DXHhmY19cdTAxNWVcdTAyNTkiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJE''@;'; put 'put ''IE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2J1Z1x4ZmNuIHNhYXRdIExUIixuZXh0RGF5OiJbc2FiYWggc2FhdF0gTFQiLG5leHRXZWVrOiJbZ1x1MDI1OWxcdTAyNTluIGhcdTAy''@;'; put 'put ''NTlmdFx1MDI1OV0gZGRkZCBbc2FhdF0gTFQiLGxhc3REYXk6IltkXHhmY25cdTAyNTluXSBMVCIsbGFzdFdlZWs6IltrZVx4ZTdcdTAyNTluIGhcdTAyNTlmdFx1MDI1OV0gZGRkZCBbc2FhdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHNvbnJhIixwYXN0''@;'; put 'put ''OiIlcyBcdTAyNTl2dlx1MDI1OWwiLHM6ImJpciBuZVx4ZTdcdTAyNTkgc2FuaXlcdTAyNTkiLHNzOiIlZCBzYW5peVx1MDI1OSIsbToiYmlyIGRcdTAyNTlxaXFcdTAyNTkiLG1tOiIlZCBkXHUwMjU5cWlxXHUwMjU5IixoOiJiaXIgc2FhdCIsaGg6IiVkIHNhYXQiLGQ6ImJpciBnXHhmY24i''@;'; put 'put ''LGRkOiIlZCBnXHhmY24iLE06ImJpciBheSIsTU06IiVkIGF5Iix5OiJiaXIgaWwiLHl5OiIlZCBpbCJ9LG1lcmlkaWVtUGFyc2U6L2dlY1x1MDI1OXxzXHUwMjU5aFx1MDI1OXJ8Z1x4ZmNuZFx4ZmN6fGF4XHUwMTVmYW0vLGlzUE06ZnVuY3Rpb24oQSl7cmV0dXJuL14oZ1x4ZmNuZFx4ZmN6''@;'; put 'put ''fGF4XHUwMTVmYW0pJC8udGVzdChBKX0sbWVyaWRpZW06ZnVuY3Rpb24oQSx2LEMpe3JldHVybiBBPDQ/ImdlY1x1MDI1OSI6QTwxMj8ic1x1MDI1OWhcdTAyNTlyIjpBPDE3PyJnXHhmY25kXHhmY3oiOiJheFx1MDE1ZmFtIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUw''@;'; put 'put ''MTMxbmNcdTAxMzF8aW5jaXxuY2l8XHhmY25jXHhmY3xuY1x1MDEzMXx1bmN1KS8sb3JkaW5hbDpmdW5jdGlvbihBKXtpZigwPT09QSlyZXR1cm4gQSsiLVx1MDEzMW5jXHUwMTMxIjt2YXIgdj1BJTEwO3JldHVybiBBKyhjW3ZdfHxjW0ElMTAwLXZdfHxjW0E+PTEwMD8xMDA6bnVsbF0pfSx3''@;'; put 'put ''ZWVrOntkb3c6MSxkb3k6N319KX0oaCg5NzU4NikpfSwxNjc2NihmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcyh2LEMsdyl7cmV0dXJuIm0iPT09dz9DPyJcdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0MzAiOiJcdTA0NDVcdTA0MzJc''@;'; put 'put ''dTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0NDMiOiJoIj09PXc/Qz8iXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDMwIjoiXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDQzIjp2KyIgIitmdW5jdGlvbiBjKHYsQyl7dmFyIHc9di5zcGxp''@;'; put 'put ''dCgiXyIpO3JldHVybiBDJTEwPT0xJiZDJTEwMCE9MTE/d1swXTpDJTEwPj0yJiZDJTEwPD00JiYoQyUxMDA8MTB8fEMlMTAwPj0yMCk/d1sxXTp3WzJdfSh7c3M6Qz8iXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1''@;'; put 'put ''MDQzZFx1MDQzNFx1MDQ0Yl9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiOiJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NDNfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDRiX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0''@;'; put 'put ''M1x1MDQzZFx1MDQzNCIsbW06Qz8iXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDMwX1x1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQ0Yl9cdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2QiOiJcdTA0NDVcdTA0MzJcdTA0NTZc''@;'; put 'put ''dTA0M2JcdTA0NTZcdTA0M2RcdTA0NDNfXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDRiX1x1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZCIsaGg6Qz8iXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDMwX1x1MDQzM1x1MDQz''@;'; put 'put ''MFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0Yl9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2QiOiJcdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NDNfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDRiX1x1MDQzM1x1''@;'; put 'put ''MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZCIsZGQ6Ilx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzRcdTA0M2RcdTA0NTZfXHUwNDM0XHUwNDM3XHUwNDUxXHUwNDNkIixNTToiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2X1x1MDQzY1x1MDQzNVx1MDQ0MVx1''@;'; put 'put ''MDQ0Zlx1MDQ0Nlx1MDQ0Yl9cdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZcdTA0MzBcdTA0NWUiLHl5OiJcdTA0MzNcdTA0M2VcdTA0MzRfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDRiX1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQzZVx1MDQ1ZSJ9W3ddLCt2KX15LmRlZmluZUxvY2FsZSgi''@;'; put 'put ''YmUiLHttb250aHM6e2Zvcm1hdDoiXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRmX1x1MDQzYlx1MDQ0ZVx1MDQ0Mlx1MDQzMFx1MDQzM1x1MDQzMF9cdTA0NDFcdTA0MzBcdTA0M2FcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M2FcdTA0MzBfXHUwNDNhXHUw''@;'; put 'put ''NDQwXHUwNDMwXHUwNDQxXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNhXHUwNDMwX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQ1ZVx1MDQzZFx1MDQ0Zl9cdTA0NDdcdTA0NGRcdTA0NDBcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGZfXHUwNDNiXHUwNDU2XHUwNDNmXHUwNDM1XHUwNDNkXHUwNDRmX1x1''@;'; put 'put ''MDQzNlx1MDQzZFx1MDQ1Nlx1MDQ1ZVx1MDQzZFx1MDQ0Zl9cdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzBcdTA0NDFcdTA0M2RcdTA0NGZfXHUwNDNhXHUwNDMwXHUwNDQxXHUwNDQyXHUwNDQwXHUwNDRiXHUwNDQ3XHUwNDNkXHUwNDU2XHUwNDNhXHUwNDMwX1x1MDQzYlx1MDQ1Nlx1MDQ0MVx1''@;'; put 'put ''MDQ0Mlx1MDQzMFx1MDQzZlx1MDQzMFx1MDQzNFx1MDQzMF9cdTA0NDFcdTA0M2RcdTA0MzVcdTA0MzZcdTA0M2RcdTA0NGYiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1MDQ0ZVx1MDQ0Mlx1''@;'; put 'put ''MDQ0Yl9cdTA0NDFcdTA0MzBcdTA0M2FcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M2FfXHUwNDNhXHUwNDQwXHUwNDMwXHUwNDQxXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNhX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0NDdcdTA0NGRcdTA0NDBcdTA0MzJc''@;'; put 'put ''dTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUwNDU2XHUwNDNmXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzNlx1MDQzZFx1MDQ1Nlx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzBcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNhXHUwNDMwXHUwNDQx''@;'; put 'put ''XHUwNDQyXHUwNDQwXHUwNDRiXHUwNDQ3XHUwNDNkXHUwNDU2XHUwNDNhX1x1MDQzYlx1MDQ1Nlx1MDQ0MVx1MDQ0Mlx1MDQzMFx1MDQzZlx1MDQzMFx1MDQzNF9cdTA0NDFcdTA0M2RcdTA0MzVcdTA0MzZcdTA0MzBcdTA0M2RcdTA0NGMiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJcdTA0''@;'; put 'put ''NDFcdTA0NDJcdTA0NDNcdTA0MzRfXHUwNDNiXHUwNDRlXHUwNDQyX1x1MDQ0MVx1MDQzMFx1MDQzYV9cdTA0M2FcdTA0NDBcdTA0MzBcdTA0NDFfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyX1x1MDQ0N1x1MDQ0ZFx1MDQ0MFx1MDQzMl9cdTA0M2JcdTA0NTZcdTA0M2ZfXHUwNDM2XHUwNDNk''@;'; put 'put ''XHUwNDU2XHUwNDMyX1x1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0M2FcdTA0MzBcdTA0NDFcdTA0NDJfXHUwNDNiXHUwNDU2XHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzZFx1MDQzNVx1MDQzNiIuc3BsaXQoIl8iKSx3ZWVrZGF5czp7Zm9ybWF0OiJcdTA0M2RcdTA0NGZcdTA0MzRcdTA0MzdcdTA0''@;'; put 'put ''MzVcdTA0M2JcdTA0NGVfXHUwNDNmXHUwNDMwXHUwNDNkXHUwNDRmXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNiXHUwNDMwXHUwNDNhX1x1MDQzMFx1MDQ1ZVx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzMFx1MDQzYV9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0MzBcdTA0MzRcdTA0NDNfXHUwNDQ3XHUw''@;'; put 'put ''NDMwXHUwNDQ2XHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzZlx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQ1Nlx1MDQ0Nlx1MDQ0M19cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0NDMiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDNkXHUwNDRmXHUwNDM0XHUwNDM3XHUwNDM1XHUw''@;'; put 'put ''NDNiXHUwNDRmX1x1MDQzZlx1MDQzMFx1MDQzZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQzMFx1MDQzYV9cdTA0MzBcdTA0NWVcdTA0NDJcdTA0M2VcdTA0NDBcdTA0MzBcdTA0M2FfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzMFx1''@;'; put 'put ''MDQ0Nlx1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0M2ZcdTA0NGZcdTA0NDJcdTA0M2RcdTA0NTZcdTA0NDZcdTA0MzBfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9cWyA/W1x1MDQyM1x1MDQ0M1x1MDQ1ZV0gPyg/Olx1MDQzY1x1MDQ1''@;'; put 'put ''Nlx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQ0M1x1MDQ0ZXxcdTA0M2RcdTA0MzBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0M2ZcdTA0M2RcdTA0NDNcdTA0NGUpPyA/XF0gP2RkZGQvfSx3ZWVrZGF5c1Nob3J0OiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQzMFx1MDQ0Ml9cdTA0NDFcdTA0''@;'; put 'put ''NDBfXHUwNDQ3XHUwNDQ2X1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzZFx1MDQzNF9cdTA0M2ZcdTA0M2RfXHUwNDMwXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDZfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQo''@;'; put 'put ''Il8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkgXHUwNDMzLiIsTExMOiJEIE1NTU0gWVlZWSBcdTA0MzMuLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgXHUwNDMzLiwgSEg6bW0ifSxjYWxl''@;'; put 'put ''bmRhcjp7c2FtZURheToiW1x1MDQyMVx1MDQ1MVx1MDQzZFx1MDQzZFx1MDQ0ZiBcdTA0NWVdIExUIixuZXh0RGF5OiJbXHUwNDE3XHUwNDMwXHUwNDVlXHUwNDQyXHUwNDQwXHUwNDMwIFx1MDQ1ZV0gTFQiLGxhc3REYXk6IltcdTA0MjNcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzAgXHUwNDVl''@;'; put 'put ''XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW1x1MDQyM10gZGRkZCBbXHUwNDVlXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4iW1x1MDQyMyBcdTA0M2NcdTA0NTZcdTA0M2RcdTA0''@;'; put 'put ''NDNcdTA0M2JcdTA0NDNcdTA0NGVdIGRkZGQgW1x1MDQ1ZV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OnJldHVybiJbXHUwNDIzIFx1MDQzY1x1MDQ1Nlx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQ0Yl0gZGRkZCBbXHUwNDVlXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0''@;'; put 'put ''dXJlOiJcdTA0M2ZcdTA0NDBcdTA0MzBcdTA0MzcgJXMiLHBhc3Q6IiVzIFx1MDQ0Mlx1MDQzMFx1MDQzY1x1MDQ0MyIsczoiXHUwNDNkXHUwNDM1XHUwNDNhXHUwNDMwXHUwNDNiXHUwNDRjXHUwNDNhXHUwNDU2IFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbTpzLG1t''@;'; put 'put ''OnMsaDpzLGhoOnMsZDoiXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRjIixkZDpzLE06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0NiIsTU06cyx5OiJcdTA0MzNcdTA0M2VcdTA0MzQiLHl5OnN9LG1lcmlkaWVtUGFyc2U6L1x1MDQzZFx1MDQzZVx1MDQ0N1x1MDQ0YnxcdTA0''@;'; put 'put ''NDBcdTA0MzBcdTA0M2RcdTA0NTZcdTA0NDZcdTA0NGJ8XHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzMFx1MDQ0MFx1MDQzMC8saXNQTTpmdW5jdGlvbih2KXtyZXR1cm4vXihcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDMwXHUwNDQw''@;'; put 'put ''XHUwNDMwKSQvLnRlc3Qodil9LG1lcmlkaWVtOmZ1bmN0aW9uKHYsQyx3KXtyZXR1cm4gdjw0PyJcdTA0M2RcdTA0M2VcdTA0NDdcdTA0NGIiOnY8MTI/Ilx1MDQ0MFx1MDQzMFx1MDQzZFx1MDQ1Nlx1MDQ0Nlx1MDQ0YiI6djwxNz8iXHUwNDM0XHUwNDNkXHUwNDRmIjoiXHUwNDMyXHUwNDM1''@;'; put 'put ''XHUwNDQ3XHUwNDMwXHUwNDQwXHUwNDMwIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDU2fFx1MDQ0YnxcdTA0MzNcdTA0MzApLyxvcmRpbmFsOmZ1bmN0aW9uKHYsQyl7c3dpdGNoKEMpe2Nhc2UiTSI6Y2FzZSJkIjpjYXNlIkRERCI6Y2FzZSJ3IjpjYXNlIlciOnJl''@;'; put 'put ''dHVybiB2JTEwIT0yJiZ2JTEwIT0zfHx2JTEwMD09MTJ8fHYlMTAwPT0xMz92KyItXHUwNDRiIjp2KyItXHUwNDU2IjtjYXNlIkQiOnJldHVybiB2KyItXHUwNDMzXHUwNDMwIjtkZWZhdWx0OnJldHVybiB2fX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGgoOTc1ODYpKX0sMjg1NjQoZmUsaixo''@;'; put 'put ''KXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJiZyIse21vbnRoczoiXHUwNDRmXHUwNDNkXHUwNDQzXHUwNDMwXHUwNDQwXHUwNDM4X1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0''@;'; put 'put ''NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM4XHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0NGVcdTA0M2RcdTA0MzhfXHUwNDRlXHUwNDNiXHUwNDM4X1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2ZcdTA0NDJcdTA0MzVcdTA0M2Nc''@;'; put 'put ''dTA0MzJcdTA0NDBcdTA0MzhfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDNlXHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzZFx1MDQzZVx1MDQzNVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzgiLnNwbGl0''@;'; put 'put ''KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQ0Zlx1MDQzZFx1MDQ0M19cdTA0NDRcdTA0MzVcdTA0MzJfXHUwNDNjXHUwNDMwXHUwNDQwX1x1MDQzMFx1MDQzZlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDRlXHUwNDNkXHUwNDM4X1x1MDQ0ZVx1MDQzYlx1MDQzOF9cdTA0MzBcdTA0MzJc''@;'; put 'put ''dTA0MzNfXHUwNDQxXHUwNDM1XHUwNDNmX1x1MDQzZVx1MDQzYVx1MDQ0Ml9cdTA0M2RcdTA0M2VcdTA0MzVfXHUwNDM0XHUwNDM1XHUwNDNhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGZfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1''@;'; put 'put ''XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0NDFcdTA0NDBcdTA0NGZcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDRhXHUwNDQwXHUwNDQyXHUwNDRhXHUwNDNh''@;'; put 'put ''X1x1MDQzZlx1MDQzNVx1MDQ0Mlx1MDQ0YVx1MDQzYV9cdTA0NDFcdTA0NGFcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM1XHUwNDM0X1x1MDQzZlx1MDQzZVx1MDQzZF9cdTA0MzJcdTA0NDJcdTA0M2VfXHUwNDQxXHUwNDQw''@;'; put 'put ''XHUwNDRmX1x1MDQ0N1x1MDQzNVx1MDQ0Ml9cdTA0M2ZcdTA0MzVcdTA0NDJfXHUwNDQxXHUwNDRhXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQyX1x1MDQzZlx1MDQ0''@;'; put 'put ''Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2Ft''@;'; put 'put ''ZURheToiW1x1MDQxNFx1MDQzZFx1MDQzNVx1MDQ0MSBcdTA0MzJdIExUIixuZXh0RGF5OiJbXHUwNDIzXHUwNDQyXHUwNDQwXHUwNDM1IFx1MDQzMl0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA0MzJdIExUIixsYXN0RGF5OiJbXHUwNDEyXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwIFx1MDQz''@;'; put 'put ''Ml0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA2OnJldHVybiJbXHUwNDFjXHUwNDM4XHUwNDNkXHUwNDMwXHUwNDNiXHUwNDMwXHUwNDQyXHUwNDMwXSBkZGRkIFtcdTA0MzJdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpj''@;'; put 'put ''YXNlIDU6cmV0dXJuIltcdTA0MWNcdTA0MzhcdTA0M2RcdTA0MzBcdTA0M2JcdTA0MzhcdTA0NGZdIGRkZGQgW1x1MDQzMl0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDQxXHUwNDNiXHUwNDM1XHUwNDM0ICVzIixwYXN0OiJcdTA0M2ZcdTA0NDBcdTA0''@;'; put 'put ''MzVcdTA0MzRcdTA0MzggJXMiLHM6Ilx1MDQzZFx1MDQ0Zlx1MDQzYVx1MDQzZVx1MDQzYlx1MDQzYVx1MDQzZSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiLHNzOiIlZCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiLG06Ilx1''@;'; put 'put ''MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCIsbW06IiVkIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzOCIsaDoiXHUwNDQ3XHUwNDMwXHUwNDQxIixoaDoiJWQgXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDMwIixkOiJcdTA0MzRcdTA0MzVcdTA0M2QiLGRkOiIl''@;'; put 'put ''ZCBcdTA0MzRcdTA0MzVcdTA0M2RcdTA0MzAiLHc6Ilx1MDQ0MVx1MDQzNVx1MDQzNFx1MDQzY1x1MDQzOFx1MDQ0Nlx1MDQzMCIsd3c6IiVkIFx1MDQ0MVx1MDQzNVx1MDQzNFx1MDQzY1x1MDQzOFx1MDQ0Nlx1MDQzOCIsTToiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2IixNTToi''@;'; put 'put ''JWQgXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2XHUwNDMwIix5OiJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiLHl5OiIlZCBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzgifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0''@;'; put 'put ''MzVcdTA0MzJ8XHUwNDM1XHUwNDNkfFx1MDQ0Mlx1MDQzOHxcdTA0MzJcdTA0Mzh8XHUwNDQwXHUwNDM4fFx1MDQzY1x1MDQzOCkvLG9yZGluYWw6ZnVuY3Rpb24ocyl7dmFyIEE9cyUxMCx2PXMlMTAwO3JldHVybiAwPT09cz9zKyItXHUwNDM1XHUwNDMyIjowPT09dj9zKyItXHUwNDM1XHUw''@;'; put 'put ''NDNkIjp2PjEwJiZ2PDIwP3MrIi1cdTA0NDJcdTA0MzgiOjE9PT1BP3MrIi1cdTA0MzJcdTA0MzgiOjI9PT1BP3MrIi1cdTA0NDBcdTA0MzgiOjc9PT1BfHw4PT09QT9zKyItXHUwNDNjXHUwNDM4IjpzKyItXHUwNDQyXHUwNDM4In0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGgoOTc1ODYpKX0s''@;'; put 'put ''OTc0NjIoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJibSIse21vbnRoczoiWmFud3V5ZWthbG9fRmV3dXJ1eWVrYWxvX01hcmlzaWthbG9fQXdpcmlsaWthbG9fTVx1MDI1YmthbG9fWnV3XHUwMjVibmthbG9fWnVsdXlla2Fsb19VdGlrYWxvX1Nc''@;'; put 'put ''dTAyNWJ0YW5idXJ1a2Fsb19cdTAyNTRrdXRcdTAyNTRidXJ1a2Fsb19Ob3dhbmJ1cnVrYWxvX0Rlc2FuYnVydWthbG8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilphbl9GZXdfTWFyX0F3aV9NXHUwMjViX1p1d19adWxfVXRpX1NcdTAyNWJ0X1x1MDI1NGt1X05vd19EZXMiLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXM6IkthcmlfTnRcdTAyNWJuXHUwMjVibl9UYXJhdGFfQXJhYmFfQWxhbWlzYV9KdW1hX1NpYmlyaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJLYXJfTnRcdTAyNWJfVGFyX0FyYV9BbGFfSnVtX1NpYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiS2FfTnRfVGFfQXJf''@;'; put 'put ''QWxfSnVfU2kiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6Ik1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSIsTExMOiJNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkgW2xcdTAyNWJyXHUwMjViXSBISDptbSIsTExM''@;'; put 'put ''TDoiZGRkZCBNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkgW2xcdTAyNWJyXHUwMjViXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQmkgbFx1MDI1YnJcdTAyNWJdIExUIixuZXh0RGF5OiJbU2luaSBsXHUwMjViclx1MDI1Yl0gTFQiLG5leHRXZWVrOiJkZGRkIFtkb24gbFx1MDI1YnJc''@;'; put 'put ''dTAyNWJdIExUIixsYXN0RGF5OiJbS3VudSBsXHUwMjViclx1MDI1Yl0gTFQiLGxhc3RXZWVrOiJkZGRkIFt0XHUwMjVibVx1MDI1Ym5lbiBsXHUwMjViclx1MDI1Yl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIGtcdTAyNTRuXHUwMjU0IixwYXN0OiJhIGJc''@;'; put 'put ''dTAyNWIgJXMgYlx1MDI1NCIsczoic2FuZ2EgZGFtYSBkYW1hIixzczoic2Vrb25kaSAlZCIsbToibWluaXRpIGtlbGVuIixtbToibWluaXRpICVkIixoOiJsXHUwMjViclx1MDI1YiBrZWxlbiIsaGg6ImxcdTAyNWJyXHUwMjViICVkIixkOiJ0aWxlIGtlbGVuIixkZDoidGlsZSAlZCIsTToi''@;'; put 'put ''a2FsbyBrZWxlbiIsTU06ImthbG8gJWQiLHk6InNhbiBrZWxlbiIseXk6InNhbiAlZCJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShoKDk3NTg2KSl9LDQzNDM4KGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz17MToiXHUwOWU3IiwyOiJcdTA5ZTgiLDM6Ilx1MDllOSIs''@;'; put 'put ''NDoiXHUwOWVhIiw1OiJcdTA5ZWIiLDY6Ilx1MDllYyIsNzoiXHUwOWVkIiw4OiJcdTA5ZWUiLDk6Ilx1MDllZiIsMDoiXHUwOWU2In0scz17Ilx1MDllNyI6IjEiLCJcdTA5ZTgiOiIyIiwiXHUwOWU5IjoiMyIsIlx1MDllYSI6IjQiLCJcdTA5ZWIiOiI1IiwiXHUwOWVjIjoiNiIsIlx1MDll''@;'; put 'put ''ZCI6IjciLCJcdTA5ZWUiOiI4IiwiXHUwOWVmIjoiOSIsIlx1MDllNiI6IjAifTt5LmRlZmluZUxvY2FsZSgiYm4tYmQiLHttb250aHM6Ilx1MDk5Y1x1MDliZVx1MDlhOFx1MDljMVx1MDlkZlx1MDliZVx1MDliMFx1MDliZl9cdTA5YWJcdTA5YzdcdTA5YWNcdTA5Y2RcdTA5YjBcdTA5YzFc''@;'; put 'put ''dTA5ZGZcdTA5YmVcdTA5YjBcdTA5YmZfXHUwOWFlXHUwOWJlXHUwOWIwXHUwOWNkXHUwOTlhX1x1MDk4Zlx1MDlhYVx1MDljZFx1MDliMFx1MDliZlx1MDliMl9cdTA5YWVcdTA5YzdfXHUwOTljXHUwOWMxXHUwOWE4X1x1MDk5Y1x1MDljMVx1MDliMlx1MDliZVx1MDk4N19cdTA5ODZcdTA5''@;'; put 'put ''OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFhXHUwOWNkXHUwOTlmXHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwX1x1MDk4NVx1MDk5NVx1MDljZFx1MDk5Zlx1MDljYlx1MDlhY1x1MDliMF9cdTA5YThcdTA5YWRcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5''@;'; put 'put ''YjBfXHUwOWExXHUwOWJmXHUwOWI4XHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA5OWNcdTA5YmVcdTA5YThcdTA5YzFfXHUwOWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUwOWIwXHUwOWMxX1x1MDlhZVx1MDliZVx1MDliMFx1MDljZFx1''@;'; put 'put ''MDk5YV9cdTA5OGZcdTA5YWFcdTA5Y2RcdTA5YjBcdTA5YmZcdTA5YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1MDljMVx1MDlhOF9cdTA5OWNcdTA5YzFcdTA5YjJcdTA5YmVcdTA5ODdfXHUwOTg2XHUwOTk3XHUwOWI4XHUwOWNkXHUwOTlmX1x1MDliOFx1MDljN1x1MDlhYVx1MDljZFx1MDk5''@;'; put 'put ''Zl9cdTA5ODVcdTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2JfXHUwOWE4XHUwOWFkXHUwOWM3X1x1MDlhMVx1MDliZlx1MDliOFx1MDljNyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwOWIwXHUwOWFjXHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliOFx1MDljYlx1MDlhZVx1MDlhY1x1MDli''@;'; put 'put ''ZVx1MDliMF9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMxXHUwOWE3XHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhY1x1MDljM1x1MDliOVx1MDliOFx1MDljZFx1MDlhYVx1MDlhNFx1MDliZlx1MDlhY1x1MDliZVx1MDliMF9cdTA5''@;'; put 'put ''YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDliMFx1MDlhY1x1MDliZl9cdTA5YjhcdTA5Y2JcdTA5YWVfXHUwOWFlXHUwOTk5XHUwOWNk''@;'; put 'put ''XHUwOTk3XHUwOWIyX1x1MDlhY1x1MDljMVx1MDlhN19cdTA5YWNcdTA5YzNcdTA5YjlcdTA5YjhcdTA5Y2RcdTA5YWFcdTA5YTRcdTA5YmZfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOWIwXHUw''@;'; put 'put ''OWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJfXHUwOWFjXHUwOWMxXHUwOWE3X1x1MDlhY1x1MDljM1x1MDliOV9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmIi5zcGxpdCgiXyIpLGxvbmdE''@;'; put 'put ''YXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIsTFRTOiJBIGg6bW06c3MgXHUwOWI4XHUwOWFlXHUwOWRmIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYiLExMTEw6ImRkZGQs''@;'; put 'put ''IEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5ODZcdTA5OWNdIExUIixuZXh0RGF5OiJbXHUwOTg2XHUwOTk3XHUwOWJlXHUwOWFlXHUwOWMwXHUwOTk1XHUwOWJlXHUwOWIyXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixs''@;'; put 'put ''YXN0RGF5OiJbXHUwOTk3XHUwOWE0XHUwOTk1XHUwOWJlXHUwOWIyXSBMVCIsbGFzdFdlZWs6IltcdTA5OTdcdTA5YTRdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA5YWFcdTA5YjBcdTA5YzciLHBhc3Q6IiVzIFx1MDk4Nlx1MDk5N1x1MDlj''@;'; put 'put ''NyIsczoiXHUwOTk1XHUwOWRmXHUwOWM3XHUwOTk1IFx1MDliOFx1MDljN1x1MDk5NVx1MDljN1x1MDlhOFx1MDljZFx1MDlhMSIsc3M6IiVkIFx1MDliOFx1MDljN1x1MDk5NVx1MDljN1x1MDlhOFx1MDljZFx1MDlhMSIsbToiXHUwOThmXHUwOTk1IFx1MDlhZVx1MDliZlx1MDlhOFx1MDli''@;'; put 'put ''Zlx1MDk5ZiIsbW06IiVkIFx1MDlhZVx1MDliZlx1MDlhOFx1MDliZlx1MDk5ZiIsaDoiXHUwOThmXHUwOTk1IFx1MDk5OFx1MDlhOFx1MDljZFx1MDk5Zlx1MDliZSIsaGg6IiVkIFx1MDk5OFx1MDlhOFx1MDljZFx1MDk5Zlx1MDliZSIsZDoiXHUwOThmXHUwOTk1IFx1MDlhNlx1MDliZlx1''@;'; put 'put ''MDlhOCIsZGQ6IiVkIFx1MDlhNlx1MDliZlx1MDlhOCIsTToiXHUwOThmXHUwOTk1IFx1MDlhZVx1MDliZVx1MDliOCIsTU06IiVkIFx1MDlhZVx1MDliZVx1MDliOCIseToiXHUwOThmXHUwOTk1IFx1MDlhY1x1MDk5Ylx1MDliMCIseXk6IiVkIFx1MDlhY1x1MDk5Ylx1MDliMCJ9LHByZXBh''@;'; put 'put ''cnNlOmZ1bmN0aW9uKHYpe3JldHVybiB2LnJlcGxhY2UoL1tcdTA5ZTdcdTA5ZThcdTA5ZTlcdTA5ZWFcdTA5ZWJcdTA5ZWNcdTA5ZWRcdTA5ZWVcdTA5ZWZcdTA5ZTZdL2csZnVuY3Rpb24oQyl7cmV0dXJuIHNbQ119KX0scG9zdGZvcm1hdDpmdW5jdGlvbih2KXtyZXR1cm4gdi5yZXBsYWNl''@;'; put 'put ''KC9cZC9nLGZ1bmN0aW9uKEMpe3JldHVybiBjW0NdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MDliMFx1MDliZVx1MDlhNHxcdTA5YWRcdTA5Y2JcdTA5YjB8XHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyfFx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMHxcdTA5YWNcdTA5YmZcdTA5OTVcdTA5''@;'; put 'put ''YmVcdTA5YjJ8XHUwOWI4XHUwOWE4XHUwOWNkXHUwOWE3XHUwOWNkXHUwOWFmXHUwOWJlfFx1MDliMFx1MDliZVx1MDlhNC8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHYsQyl7cmV0dXJuIDEyPT09diYmKHY9MCksIlx1MDliMFx1MDliZVx1MDlhNCI9PT1DP3Y8ND92OnYrMTI6Ilx1MDlhZFx1''@;'; put 'put ''MDljYlx1MDliMCI9PT1DfHwiXHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyIj09PUM/djoiXHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwIj09PUM/dj49Mz92OnYrMTI6Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI9PT1DfHwiXHUwOWI4XHUwOWE4XHUwOWNkXHUwOWE3XHUw''@;'; put 'put ''OWNkXHUwOWFmXHUwOWJlIj09PUM/disxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHYsQyx3KXtyZXR1cm4gdjw0PyJcdTA5YjBcdTA5YmVcdTA5YTQiOnY8Nj8iXHUwOWFkXHUwOWNiXHUwOWIwIjp2PDEyPyJcdTA5YjhcdTA5OTVcdTA5YmVcdTA5YjIiOnY8MTU/Ilx1MDlhNlx1MDlj''@;'; put 'put ''MVx1MDlhYVx1MDljMVx1MDliMCI6djwxOD8iXHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyIjp2PDIwPyJcdTA5YjhcdTA5YThcdTA5Y2RcdTA5YTdcdTA5Y2RcdTA5YWZcdTA5YmUiOiJcdTA5YjBcdTA5YmVcdTA5YTQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oaCg5NzU4NikpfSwx''@;'; put 'put ''NzEwNyhmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7dmFyIGM9ezE6Ilx1MDllNyIsMjoiXHUwOWU4IiwzOiJcdTA5ZTkiLDQ6Ilx1MDllYSIsNToiXHUwOWViIiw2OiJcdTA5ZWMiLDc6Ilx1MDllZCIsODoiXHUwOWVlIiw5OiJcdTA5ZWYiLDA6Ilx1MDllNiJ9LHM9eyJcdTA5''@;'; put 'put ''ZTciOiIxIiwiXHUwOWU4IjoiMiIsIlx1MDllOSI6IjMiLCJcdTA5ZWEiOiI0IiwiXHUwOWViIjoiNSIsIlx1MDllYyI6IjYiLCJcdTA5ZWQiOiI3IiwiXHUwOWVlIjoiOCIsIlx1MDllZiI6IjkiLCJcdTA5ZTYiOiIwIn07eS5kZWZpbmVMb2NhbGUoImJuIix7bW9udGhzOiJcdTA5OWNcdTA5''@;'; put 'put ''YmVcdTA5YThcdTA5YzFcdTA5ZGZcdTA5YmVcdTA5YjBcdTA5YmZfXHUwOWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUwOWIwXHUwOWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUwOWJmX1x1MDlhZVx1MDliZVx1MDliMFx1MDljZFx1MDk5YV9cdTA5OGZcdTA5YWFcdTA5Y2RcdTA5YjBcdTA5YmZcdTA5''@;'; put 'put ''YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1MDljMVx1MDlhOF9cdTA5OWNcdTA5YzFcdTA5YjJcdTA5YmVcdTA5ODdfXHUwOTg2XHUwOTk3XHUwOWI4XHUwOWNkXHUwOTlmX1x1MDliOFx1MDljN1x1MDlhYVx1MDljZFx1MDk5Zlx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMF9cdTA5ODVc''@;'; put 'put ''dTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2JcdTA5YWNcdTA5YjBfXHUwOWE4XHUwOWFkXHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwX1x1MDlhMVx1MDliZlx1MDliOFx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwOTljXHUwOWJl''@;'; put 'put ''XHUwOWE4XHUwOWMxX1x1MDlhYlx1MDljN1x1MDlhY1x1MDljZFx1MDliMFx1MDljMV9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5Y2RcdTA5OWFfXHUwOThmXHUwOWFhXHUwOWNkXHUwOWIwXHUwOWJmXHUwOWIyX1x1MDlhZVx1MDljN19cdTA5OWNcdTA5YzFcdTA5YThfXHUwOTljXHUwOWMxXHUw''@;'; put 'put ''OWIyXHUwOWJlXHUwOTg3X1x1MDk4Nlx1MDk5N1x1MDliOFx1MDljZFx1MDk5Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2RcdTA5OWZfXHUwOTg1XHUwOTk1XHUwOWNkXHUwOTlmXHUwOWNiX1x1MDlhOFx1MDlhZFx1MDljN19cdTA5YTFcdTA5YmZcdTA5YjhcdTA5YzciLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXM6Ilx1MDliMFx1MDlhY1x1MDliZlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjhcdTA5Y2JcdTA5YWVcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhY1x1MDljMVx1MDlhN1x1MDlhY1x1MDliZVx1''@;'; put 'put ''MDliMF9cdTA5YWNcdTA5YzNcdTA5YjlcdTA5YjhcdTA5Y2RcdTA5YWFcdTA5YTRcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZlx1MDlhY1x1MDliZVx1MDliMCIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5YjBcdTA5YWNcdTA5YmZfXHUwOWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMl9cdTA5YWNcdTA5YzFcdTA5YTdfXHUwOWFjXHUwOWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUwOWFhXHUwOWE0XHUwOWJmX1x1MDliNlx1''@;'; put 'put ''MDljMVx1MDk5NVx1MDljZFx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDliMFx1MDlhY1x1MDliZl9cdTA5YjhcdTA5Y2JcdTA5YWVfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyX1x1MDlhY1x1MDljMVx1MDlhN19cdTA5YWNcdTA5''@;'; put 'put ''YzNcdTA5YjlfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYiLExUUzoiQSBoOm1tOnNzIFx1MDliOFx1MDlhZVx1MDlkZiIsTDoiREQvTU0vWVlZ''@;'; put 'put ''WSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTg2XHUwOTljXSBMVCIsbmV4dERheToi''@;'; put 'put ''W1x1MDk4Nlx1MDk5N1x1MDliZVx1MDlhZVx1MDljMFx1MDk5NVx1MDliZVx1MDliMl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MDk5N1x1MDlhNFx1MDk5NVx1MDliZVx1MDliMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTk3XHUwOWE0XSBkZGRkLCBMVCIsc2FtZUVsc2U6''@;'; put 'put ''IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwOWFhXHUwOWIwXHUwOWM3IixwYXN0OiIlcyBcdTA5ODZcdTA5OTdcdTA5YzciLHM6Ilx1MDk5NVx1MDlkZlx1MDljN1x1MDk5NSBcdTA5YjhcdTA5YzdcdTA5OTVcdTA5YzdcdTA5YThcdTA5Y2RcdTA5YTEiLHNzOiIlZCBcdTA5Yjhc''@;'; put 'put ''dTA5YzdcdTA5OTVcdTA5YzdcdTA5YThcdTA5Y2RcdTA5YTEiLG06Ilx1MDk4Zlx1MDk5NSBcdTA5YWVcdTA5YmZcdTA5YThcdTA5YmZcdTA5OWYiLG1tOiIlZCBcdTA5YWVcdTA5YmZcdTA5YThcdTA5YmZcdTA5OWYiLGg6Ilx1MDk4Zlx1MDk5NSBcdTA5OThcdTA5YThcdTA5Y2RcdTA5OWZc''@;'; put 'put ''dTA5YmUiLGhoOiIlZCBcdTA5OThcdTA5YThcdTA5Y2RcdTA5OWZcdTA5YmUiLGQ6Ilx1MDk4Zlx1MDk5NSBcdTA5YTZcdTA5YmZcdTA5YTgiLGRkOiIlZCBcdTA5YTZcdTA5YmZcdTA5YTgiLE06Ilx1MDk4Zlx1MDk5NSBcdTA5YWVcdTA5YmVcdTA5YjgiLE1NOiIlZCBcdTA5YWVcdTA5YmVc''@;'; put 'put ''dTA5YjgiLHk6Ilx1MDk4Zlx1MDk5NSBcdTA5YWNcdTA5OWJcdTA5YjAiLHl5OiIlZCBcdTA5YWNcdTA5OWJcdTA5YjAifSxwcmVwYXJzZTpmdW5jdGlvbih2KXtyZXR1cm4gdi5yZXBsYWNlKC9bXHUwOWU3XHUwOWU4XHUwOWU5XHUwOWVhXHUwOWViXHUwOWVjXHUwOWVkXHUwOWVlXHUwOWVm''@;'; put 'put ''XHUwOWU2XS9nLGZ1bmN0aW9uKEMpe3JldHVybiBzW0NdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odil7cmV0dXJuIHYucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihDKXtyZXR1cm4gY1tDXX0pfSxtZXJpZGllbVBhcnNlOi9cdTA5YjBcdTA5YmVcdTA5YTR8XHUwOWI4XHUwOTk1XHUwOWJlXHUw''@;'; put 'put ''OWIyfFx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMHxcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjJ8XHUwOWIwXHUwOWJlXHUwOWE0LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odixDKXtyZXR1cm4gMTI9PT12JiYodj0wKSwiXHUwOWIwXHUwOWJlXHUwOWE0Ij09PUMmJnY+PTR8''@;'; put 'put ''fCJcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjAiPT09QyYmdjw1fHwiXHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyIj09PUM/disxMjp2fSxtZXJpZGllbTpmdW5jdGlvbih2LEMsdyl7cmV0dXJuIHY8ND8iXHUwOWIwXHUwOWJlXHUwOWE0Ijp2PDEwPyJcdTA5YjhcdTA5OTVc''@;'; put 'put ''dTA5YmVcdTA5YjIiOnY8MTc/Ilx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMCI6djwyMD8iXHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyIjoiXHUwOWIwXHUwOWJlXHUwOWE0In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KGgoOTc1ODYpKX0sOTAwNChmZSxqLGgpeyFmdW5jdGlv''@;'; put 'put ''bih5KXsidXNlIHN0cmljdCI7dmFyIGM9ezE6Ilx1MGYyMSIsMjoiXHUwZjIyIiwzOiJcdTBmMjMiLDQ6Ilx1MGYyNCIsNToiXHUwZjI1Iiw2OiJcdTBmMjYiLDc6Ilx1MGYyNyIsODoiXHUwZjI4Iiw5OiJcdTBmMjkiLDA6Ilx1MGYyMCJ9LHM9eyJcdTBmMjEiOiIxIiwiXHUwZjIyIjoiMiIs''@;'; put 'put ''Ilx1MGYyMyI6IjMiLCJcdTBmMjQiOiI0IiwiXHUwZjI1IjoiNSIsIlx1MGYyNiI6IjYiLCJcdTBmMjciOiI3IiwiXHUwZjI4IjoiOCIsIlx1MGYyOSI6IjkiLCJcdTBmMjAiOiIwIn07eS5kZWZpbmVMb2NhbGUoImJvIix7bW9udGhzOiJcdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJc''@;'; put 'put ''dTBmNTFcdTBmNDRcdTBmMGJcdTBmNTRcdTBmN2NfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjQyXHUwZjQ5XHUwZjcyXHUwZjY2XHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY0Mlx1MGY2Nlx1MGY3NFx1MGY1OFx1MGYwYlx1MGY1NF9c''@;'; put 'put ''dTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNWVcdTBmNzJcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjYzXHUwZjk0XHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1MVx1MGZiMlx1MGY3NFx1''@;'; put 'put ''MGY0Mlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNTFcdTBmNzRcdTBmNTNcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjYyXHUwZjkyXHUwZmIxXHUwZjUxXHUwZjBiXHUwZjU0X1x1MGY1Zlx1''@;'; put 'put ''MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1MVx1MGY0Mlx1MGY3NFx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNDVcdTBmNzRcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjQ1XHUwZjc0XHUw''@;'; put 'put ''ZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY0NVx1MGY3NFx1MGYwYlx1MGY0Mlx1MGY0OVx1MGY3Mlx1MGY2Nlx1MGYwYlx1MGY1NCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwZjVmXHUw''@;'; put 'put ''ZmIzXHUwZjBiMV9cdTBmNWZcdTBmYjNcdTBmMGIyX1x1MGY1Zlx1MGZiM1x1MGYwYjNfXHUwZjVmXHUwZmIzXHUwZjBiNF9cdTBmNWZcdTBmYjNcdTBmMGI1X1x1MGY1Zlx1MGZiM1x1MGYwYjZfXHUwZjVmXHUwZmIzXHUwZjBiN19cdTBmNWZcdTBmYjNcdTBmMGI4X1x1MGY1Zlx1MGZiM1x1''@;'; put 'put ''MGYwYjlfXHUwZjVmXHUwZmIzXHUwZjBiMTBfXHUwZjVmXHUwZmIzXHUwZjBiMTFfXHUwZjVmXHUwZmIzXHUwZjBiMTIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnRSZWdleDovXihcdTBmNWZcdTBmYjNcdTBmMGJcZHsxLDJ9KS8sbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwZjQy''@;'; put 'put ''XHUwZjVmXHUwZjYwXHUwZjBiXHUwZjQ5XHUwZjcyXHUwZjBiXHUwZjU4XHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNThcdTBmNzJcdTBmNDJcdTBmMGJcdTBmNTFcdTBmNThc''@;'; put 'put ''dTBmNjJcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjYzXHUwZmI3XHUwZjQyXHUwZjBiXHUwZjU0XHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY1NVx1MGY3NFx1MGY2Mlx1MGYwYlx1MGY1Nlx1MGY3NF9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNTRc''@;'; put 'put ''dTBmMGJcdTBmNjZcdTBmNDRcdTBmNjZcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjY2XHUwZmE0XHUwZjdhXHUwZjUzXHUwZjBiXHUwZjU0XHUwZjBiIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGY0OVx1MGY3Mlx1MGYwYlx1MGY1OFx1MGYwYl9cdTBmNWZcdTBm''@;'; put 'put ''YjNcdTBmMGJcdTBmNTZcdTBmMGJfXHUwZjU4XHUwZjcyXHUwZjQyXHUwZjBiXHUwZjUxXHUwZjU4XHUwZjYyXHUwZjBiX1x1MGY2M1x1MGZiN1x1MGY0Mlx1MGYwYlx1MGY1NFx1MGYwYl9cdTBmNTVcdTBmNzRcdTBmNjJcdTBmMGJcdTBmNTZcdTBmNzRfXHUwZjU0XHUwZjBiXHUwZjY2XHUw''@;'; put 'put ''ZjQ0XHUwZjY2XHUwZjBiX1x1MGY2Nlx1MGZhNFx1MGY3YVx1MGY1M1x1MGYwYlx1MGY1NFx1MGYwYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwZjQ5XHUwZjcyX1x1MGY1Zlx1MGZiM19cdTBmNThcdTBmNzJcdTBmNDJfXHUwZjYzXHUwZmI3XHUwZjQyX1x1MGY1NVx1MGY3NFx1MGY2''@;'; put 'put ''Ml9cdTBmNjZcdTBmNDRcdTBmNjZfXHUwZjY2XHUwZmE0XHUwZjdhXHUwZjUzIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIixMVFM6IkEgaDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0iLExMTEw6''@;'; put 'put ''ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGY1MVx1MGY3Mlx1MGYwYlx1MGY2Mlx1MGY3Mlx1MGY0NF0gTFQiLG5leHREYXk6IltcdTBmNjZcdTBmNDRcdTBmMGJcdTBmNDlcdTBmNzJcdTBmNTNdIExUIixuZXh0V2VlazoiW1x1MGY1Nlx1MGY1''@;'; put 'put ''MVx1MGY3NFx1MGY1M1x1MGYwYlx1MGY1NVx1MGZiMlx1MGY0Mlx1MGYwYlx1MGY2Mlx1MGY5N1x1MGY3YVx1MGY2Nlx1MGYwYlx1MGY1OF0sIExUIixsYXN0RGF5OiJbXHUwZjQxXHUwZjBiXHUwZjY2XHUwZjQ0XSBMVCIsbGFzdFdlZWs6IltcdTBmNTZcdTBmNTFcdTBmNzRcdTBmNTNcdTBm''@;'; put 'put ''MGJcdTBmNTVcdTBmYjJcdTBmNDJcdTBmMGJcdTBmNThcdTBmNTBcdTBmNjBcdTBmMGJcdTBmNThdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBmNjNcdTBmMGIiLHBhc3Q6IiVzIFx1MGY2Nlx1MGY5NFx1MGY1M1x1MGYwYlx1MGY2MyIsczoi''@;'; put 'put ''XHUwZjYzXHUwZjU4XHUwZjBiXHUwZjY2XHUwZjQ0IixzczoiJWQgXHUwZjY2XHUwZjkwXHUwZjYyXHUwZjBiXHUwZjQ2XHUwZjBkIixtOiJcdTBmNjZcdTBmOTBcdTBmNjJcdTBmMGJcdTBmNThcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLG1tOiIlZCBcdTBmNjZcdTBmOTBcdTBm''@;'; put 'put ''NjJcdTBmMGJcdTBmNTgiLGg6Ilx1MGY0Nlx1MGY3NFx1MGYwYlx1MGY1YVx1MGY3Y1x1MGY1MVx1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIsaGg6IiVkIFx1MGY0Nlx1MGY3NFx1MGYwYlx1MGY1YVx1MGY3Y1x1MGY1MSIsZDoiXHUwZjQ5XHUwZjcyXHUwZjUzXHUwZjBiXHUwZjQy''@;'; put 'put ''XHUwZjQ1XHUwZjcyXHUwZjQyIixkZDoiJWQgXHUwZjQ5XHUwZjcyXHUwZjUzXHUwZjBiIixNOiJcdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLE1NOiIlZCBcdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTYiLHk6Ilx1MGY2M1x1MGY3Y1x1MGYw''@;'; put 'put ''Ylx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIseXk6IiVkIFx1MGY2M1x1MGY3YyJ9LHByZXBhcnNlOmZ1bmN0aW9uKHYpe3JldHVybiB2LnJlcGxhY2UoL1tcdTBmMjFcdTBmMjJcdTBmMjNcdTBmMjRcdTBmMjVcdTBmMjZcdTBmMjdcdTBmMjhcdTBmMjlcdTBmMjBdL2csZnVuY3Rpb24oQyl7''@;'; put 'put ''cmV0dXJuIHNbQ119KX0scG9zdGZvcm1hdDpmdW5jdGlvbih2KXtyZXR1cm4gdi5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEMpe3JldHVybiBjW0NdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3Y3xcdTBmNWVcdTBmN2NcdTBmNDJcdTBmNjZc''@;'; put 'put ''dTBmMGJcdTBmNDBcdTBmNjZ8XHUwZjQ5XHUwZjcyXHUwZjUzXHUwZjBiXHUwZjQyXHUwZjc0XHUwZjQ0fFx1MGY1MVx1MGY0Mlx1MGY3Y1x1MGY0NFx1MGYwYlx1MGY1MVx1MGY0MnxcdTBmNThcdTBmNWFcdTBmNTNcdTBmMGJcdTBmNThcdTBmN2MvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih2''@;'; put 'put ''LEMpe3JldHVybiAxMj09PXYmJih2PTApLCJcdTBmNThcdTBmNWFcdTBmNTNcdTBmMGJcdTBmNThcdTBmN2MiPT09QyYmdj49NHx8Ilx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY3NFx1MGY0NCI9PT1DJiZ2PDV8fCJcdTBmNTFcdTBmNDJcdTBmN2NcdTBmNDRcdTBmMGJcdTBm''@;'; put 'put ''NTFcdTBmNDIiPT09Qz92KzEyOnZ9LG1lcmlkaWVtOmZ1bmN0aW9uKHYsQyx3KXtyZXR1cm4gdjw0PyJcdTBmNThcdTBmNWFcdTBmNTNcdTBmMGJcdTBmNThcdTBmN2MiOnY8MTA/Ilx1MGY1ZVx1MGY3Y1x1MGY0Mlx1MGY2Nlx1MGYwYlx1MGY0MFx1MGY2NiI6djwxNz8iXHUwZjQ5XHUwZjcy''@;'; put 'put ''XHUwZjUzXHUwZjBiXHUwZjQyXHUwZjc0XHUwZjQ0Ijp2PDIwPyJcdTBmNTFcdTBmNDJcdTBmN2NcdTBmNDRcdTBmMGJcdTBmNTFcdTBmNDIiOiJcdTBmNThcdTBmNWFcdTBmNTNcdTBmMGJcdTBmNThcdTBmN2MifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oaCg5NzU4NikpfSw1MDkyNyhmZSxq''@;'; put 'put ''LGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyhOLHosWSl7cmV0dXJuIE4rIiAiK2Z1bmN0aW9uIHYoTix6KXtyZXR1cm4gMj09PXo/ZnVuY3Rpb24gQyhOKXt2YXIgej17bToidiIsYjoidiIsZDoieiJ9O3JldHVybiB2b2lkIDA9PT16W04uY2hhckF0KDApXT9OOnpb''@;'; put 'put ''Ti5jaGFyQXQoMCldK04uc3Vic3RyaW5nKDEpfShOKTpOfSh7bW06Im11bnV0ZW5uIixNTToibWl6IixkZDoiZGV2ZXpoIn1bWV0sTil9ZnVuY3Rpb24gQShOKXtyZXR1cm4gTj45P0EoTiUxMCk6Tn12YXIgdz1bL15nZW4vaSwvXmNbXHUwMmJjXCddaHdlL2ksL15tZXUvaSwvXmVici9pLC9e''@;'; put 'put ''bWFlL2ksL14obWV6fGV2ZSkvaSwvXmdvdS9pLC9eZW9zL2ksL15nd2UvaSwvXmhlci9pLC9eZHUvaSwvXmtlci9pXSxTPS9eKGdlbnZlcnxjW1x1MDJiY1wnXWh3ZXZyZXJ8bWV1cnpofGVicmVsfG1hZXxtZXpoZXZlbnxnb3VlcmV8ZW9zdHxnd2VuZ29sb3xoZXJlfGR1fGtlcnp1fGdlbnxj''@;'; put 'put ''W1x1MDJiY1wnXWh3ZXxtZXV8ZWJyfG1hZXxldmV8Z291fGVvc3xnd2V8aGVyfGR1fGtlcikvaSxIPVsvXlN1L2ksL15MdS9pLC9eTWUoW15yXXwkKS9pLC9eTWVyL2ksL15ZYS9pLC9eR3cvaSwvXlNhL2ldO3kuZGVmaW5lTG9jYWxlKCJiciIse21vbnRoczoiR2VudmVyX0NcdTAyYmNod2V2''@;'; put 'put ''cmVyX01ldXJ6aF9FYnJlbF9NYWVfTWV6aGV2ZW5fR291ZXJlX0Vvc3RfR3dlbmdvbG9fSGVyZV9EdV9LZXJ6dSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiR2VuX0NcdTAyYmNod2VfTWV1X0Vicl9NYWVfRXZlX0dvdV9Fb3NfR3dlX0hlcl9EdV9LZXIiLnNwbGl0KCJfIiksd2Vla2RheXM6''@;'; put 'put ''IlN1bF9MdW5fTWV1cnpoX01lcmNcdTAyYmNoZXJfWWFvdV9Hd2VuZXJfU2Fkb3JuIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bF9MdW5fTWV1X01lcl9ZYW9fR3dlX1NhZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTHVfTWVfTWVyX1lhX0d3X1NhIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzUGFyc2U6SCxmdWxsV2Vla2RheXNQYXJzZTpbL15zdWwvaSwvXmx1bi9pLC9ebWV1cnpoL2ksL15tZXJjW1x1MDJiY1wnXWhlci9pLC9eeWFvdS9pLC9eZ3dlbmVyL2ksL15zYWRvcm4vaV0sc2hvcnRXZWVrZGF5c1BhcnNlOlsvXlN1bC9pLC9eTHVuL2ksL15NZXUvaSwvXk1lci9p''@;'; put 'put ''LC9eWWFvL2ksL15Hd2UvaSwvXlNhZC9pXSxtaW5XZWVrZGF5c1BhcnNlOkgsbW9udGhzUmVnZXg6Uyxtb250aHNTaG9ydFJlZ2V4OlMsbW9udGhzU3RyaWN0UmVnZXg6L14oZ2VudmVyfGNbXHUwMmJjXCddaHdldnJlcnxtZXVyemh8ZWJyZWx8bWFlfG1lemhldmVufGdvdWVyZXxlb3N0fGd3''@;'; put 'put ''ZW5nb2xvfGhlcmV8ZHV8a2VyenUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihnZW58Y1tcdTAyYmNcJ11od2V8bWV1fGVicnxtYWV8ZXZlfGdvdXxlb3N8Z3dlfGhlcnxkdXxrZXIpL2ksbW9udGhzUGFyc2U6dyxsb25nTW9udGhzUGFyc2U6dyxzaG9ydE1vbnRoc1BhcnNlOncsbG9u''@;'; put 'put ''Z0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2Egdml6XSBNTU1NIFlZWVkiLExMTDoiRCBbYSB2aXpdIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBbYSB2aXpdIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1l''@;'; put 'put ''RGF5OiJbSGl6aXYgZGFdIExUIixuZXh0RGF5OiJbV2FyY1x1MDJiY2hvYXpoIGRhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2RhXSBMVCIsbGFzdERheToiW0RlY1x1MDJiY2ggZGFdIExUIixsYXN0V2VlazoiZGRkZCBbcGFzZXQgZGFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7''@;'; put 'put ''ZnV0dXJlOiJhLWJlbm4gJXMiLHBhc3Q6IiVzIFx1MDJiY3pvIixzOiJ1biBuZWJldWQgc2Vnb25kZW5ub1x4ZjkiLHNzOiIlZCBlaWxlbm4iLG06InVyIHZ1bnV0ZW5uIixtbTpjLGg6InVuIGV1ciIsaGg6IiVkIGV1ciIsZDoidW4gZGV2ZXpoIixkZDpjLE06InVyIG1peiIsTU06Yyx5OiJ1''@;'; put 'put ''ciBibG9heiIseXk6ZnVuY3Rpb24gcyhOKXtzd2l0Y2goQShOKSl7Y2FzZSAxOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OmNhc2UgOTpyZXR1cm4gTisiIGJsb2F6IjtkZWZhdWx0OnJldHVybiBOKyIgdmxvYXoifX19LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oYVx4ZjF8dmV0KS8s''@;'; put 'put ''b3JkaW5hbDpmdW5jdGlvbihOKXtyZXR1cm4gTisoMT09PU4/ImFceGYxIjoidmV0Iil9LHdlZWs6e2RvdzoxLGRveTo0fSxtZXJpZGllbVBhcnNlOi9hLm0ufGcubS4vLGlzUE06ZnVuY3Rpb24oTil7cmV0dXJuImcubS4iPT09Tn0sbWVyaWRpZW06ZnVuY3Rpb24oTix6LFkpe3JldHVybiBO''@;'; put 'put ''PDEyPyJhLm0uIjoiZy5tLiJ9fSl9KGgoOTc1ODYpKX0sODc3NjgoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHModixDLHcpe3ZhciBTPXYrIiAiO3N3aXRjaCh3KXtjYXNlInNzIjpyZXR1cm4gUysoMT09PXY/InNla3VuZGEiOjI9PT12fHwzPT09dnx8ND09''@;'; put 'put ''PXY/InNla3VuZGUiOiJzZWt1bmRpIik7Y2FzZSJtbSI6cmV0dXJuIFMrKDE9PT12PyJtaW51dGEiOjI9PT12fHwzPT09dnx8ND09PXY/Im1pbnV0ZSI6Im1pbnV0YSIpO2Nhc2UiaCI6cmV0dXJuImplZGFuIHNhdCI7Y2FzZSJoaCI6cmV0dXJuIFMrKDE9PT12PyJzYXQiOjI9PT12fHwzPT09''@;'; put 'put ''dnx8ND09PXY/InNhdGEiOiJzYXRpIik7Y2FzZSJkZCI6cmV0dXJuIFMrKDE9PT12PyJkYW4iOiJkYW5hIik7Y2FzZSJNTSI6cmV0dXJuIFMrKDE9PT12PyJtamVzZWMiOjI9PT12fHwzPT09dnx8ND09PXY/Im1qZXNlY2EiOiJtamVzZWNpIik7Y2FzZSJ5eSI6cmV0dXJuIFMrKDE9PT12PyJn''@;'; put 'put ''b2RpbmEiOjI9PT12fHwzPT09dnx8ND09PXY/ImdvZGluZSI6ImdvZGluYSIpfX15LmRlZmluZUxvY2FsZSgiYnMiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXIiLnNwbGl0''@;'; put 'put ''KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXIuX2Fwci5fbWFqLl9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX1x1MDEwZGV0''@;'; put 'put ''dnJ0YWtfcGV0YWtfc3Vib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5fcG9uLl91dG8uX3NyaS5fXHUwMTBkZXQuX3BldC5fc3ViLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRfc3JfXHUwMTBkZV9wZV9zdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhh''@;'; put 'put ''Y3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkYW5hcyB1XSBM''@;'; put 'put ''VCIsbmV4dERheToiW3N1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0g''@;'; put 'put ''W3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanVcdTAxMGRlciB1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpyZXR1cm4iW3Byb1x1MDE2MWx1XSBk''@;'; put 'put ''ZGRkIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbcHJvXHUwMTYxbGVdIFtzdWJvdGVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbcHJvXHUwMTYxbGldIGRkZGQgW3VdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixw''@;'; put 'put ''YXN0OiJwcmlqZSAlcyIsczoicGFyIHNla3VuZGkiLHNzOnMsbTpmdW5jdGlvbiBjKHYsQyx3LFMpe2lmKCJtIj09PXcpcmV0dXJuIEM/ImplZG5hIG1pbnV0YSI6Uz8iamVkbnUgbWludXR1IjoiamVkbmUgbWludXRlIn0sbW06cyxoOnMsaGg6cyxkOiJkYW4iLGRkOnMsTToibWplc2VjIixN''@;'; put 'put ''TTpzLHk6ImdvZGludSIseXk6c30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShoKDk3NTg2KSl9LDU2MjkxKGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt5LmRlZmluZUxvY2FsZSgiY2EiLHtt''@;'; put 'put ''b250aHM6e3N0YW5kYWxvbmU6ImdlbmVyX2ZlYnJlcl9tYXJceGU3X2FicmlsX21haWdfanVueV9qdWxpb2xfYWdvc3Rfc2V0ZW1icmVfb2N0dWJyZV9ub3ZlbWJyZV9kZXNlbWJyZSIuc3BsaXQoIl8iKSxmb3JtYXQ6ImRlIGdlbmVyX2RlIGZlYnJlcl9kZSBtYXJceGU3X2QnYWJyaWxfZGUg''@;'; put 'put ''bWFpZ19kZSBqdW55X2RlIGp1bGlvbF9kJ2Fnb3N0X2RlIHNldGVtYnJlX2Qnb2N0dWJyZV9kZSBub3ZlbWJyZV9kZSBkZXNlbWJyZSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovRFtvRF0/KFxzKStNTU1NL30sbW9udGhzU2hvcnQ6Imdlbi5fZmVici5fbWFyXHhlN19hYnIuX21haWdfanVueV9q''@;'; put 'put ''dWwuX2FnLl9zZXQuX29jdC5fbm92Ll9kZXMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRpdW1lbmdlX2RpbGx1bnNfZGltYXJ0c19kaW1lY3Jlc19kaWpvdXNfZGl2ZW5kcmVzX2Rpc3NhYnRlIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRnLl9kbC5f''@;'; put 'put ''ZHQuX2RjLl9kai5fZHYuX2RzLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGdfZGxfZHRfZGNfZGpfZHZfZHMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1N''@;'; put 'put ''IFtkZV0gWVlZWSIsbGw6IkQgTU1NIFlZWVkiLExMTDoiRCBNTU1NIFtkZV0gWVlZWSBbYSBsZXNdIEg6bW0iLGxsbDoiRCBNTU0gWVlZWSwgSDptbSIsTExMTDoiZGRkZCBEIE1NTU0gW2RlXSBZWVlZIFthIGxlc10gSDptbSIsbGxsbDoiZGRkIEQgTU1NIFlZWVksIEg6bW0ifSxjYWxlbmRh''@;'; put 'put ''cjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbYXZ1aSBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltkZW1ceGUwIGEgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2FoaXIgYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4i''@;'; put 'put ''W2VsXSBkZGRkIFtwYXNzYXQgYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZCdhcXVceGVkICVzIixwYXN0OiJmYSAlcyIsczoidW5zIHNlZ29ucyIsc3M6IiVkIHNlZ29ucyIsbToidW4gbWludXQi''@;'; put 'put ''LG1tOiIlZCBtaW51dHMiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yZXMiLGQ6InVuIGRpYSIsZGQ6IiVkIGRpZXMiLE06InVuIG1lcyIsTU06IiVkIG1lc29zIix5OiJ1biBhbnkiLHl5OiIlZCBhbnlzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShyfG58dHxceGU4fGEpLyxv''@;'; put 'put ''cmRpbmFsOmZ1bmN0aW9uKHMsQSl7dmFyIHY9MT09PXM/InIiOjI9PT1zPyJuIjozPT09cz8iciI6ND09PXM/InQiOiJceGU4IjtyZXR1cm4oInciPT09QXx8IlciPT09QSkmJih2PSJhIikscyt2fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oaCg5NzU4NikpfSw4NTMwMShmZSxqLGgpeyFmdW5j''@;'; put 'put ''dGlvbih5KXsidXNlIHN0cmljdCI7dmFyIGM9e3N0YW5kYWxvbmU6ImxlZGVuX1x4ZmFub3JfYlx1MDE1OWV6ZW5fZHViZW5fa3ZcdTAxMWJ0ZW5fXHUwMTBkZXJ2ZW5fXHUwMTBkZXJ2ZW5lY19zcnBlbl96XHhlMVx1MDE1OVx4ZWRfXHUwMTU5XHhlZGplbl9saXN0b3BhZF9wcm9zaW5lYyIu''@;'; put 'put ''c3BsaXQoIl8iKSxmb3JtYXQ6ImxlZG5hX1x4ZmFub3JhX2JcdTAxNTllem5hX2R1Ym5hX2t2XHUwMTFidG5hX1x1MDEwZGVydm5hX1x1MDEwZGVydmVuY2Vfc3JwbmFfelx4ZTFcdTAxNTlceGVkX1x1MDE1OVx4ZWRqbmFfbGlzdG9wYWR1X3Byb3NpbmNlIi5zcGxpdCgiXyIpLGlzRm9ybWF0''@;'; put 'put ''Oi9ERD9bby5dPyhcW1teXFtcXV0qXF18XHMpK01NTU0vfSxzPSJsZWRfXHhmYW5vX2JcdTAxNTllX2R1Yl9rdlx1MDExYl9cdTAxMGR2bl9cdTAxMGR2Y19zcnBfelx4ZTFcdTAxNTlfXHUwMTU5XHhlZGpfbGlzX3BybyIuc3BsaXQoIl8iKSxBPVsvXmxlZC9pLC9eXHhmYW5vL2ksL15iXHUw''@;'; put 'put ''MTU5ZS9pLC9eZHViL2ksL15rdlx1MDExYi9pLC9eKFx1MDEwZHZufFx1MDEwZGVydmVuJHxcdTAxMGRlcnZuYSkvaSwvXihcdTAxMGR2Y3xcdTAxMGRlcnZlbmVjfFx1MDEwZGVydmVuY2UpL2ksL15zcnAvaSwvXnpceGUxXHUwMTU5L2ksL15cdTAxNTlceGVkai9pLC9ebGlzL2ksL15wcm8v''@;'; put 'put ''aV0sdj0vXihsZWRlbnxceGZhbm9yfGJcdTAxNTllemVufGR1YmVufGt2XHUwMTFidGVufFx1MDEwZGVydmVuZWN8XHUwMTBkZXJ2ZW5jZXxcdTAxMGRlcnZlbnxcdTAxMGRlcnZuYXxzcnBlbnx6XHhlMVx1MDE1OVx4ZWR8XHUwMTU5XHhlZGplbnxsaXN0b3BhZHxwcm9zaW5lY3xsZWR8XHhm''@;'; put 'put ''YW5vfGJcdTAxNTllfGR1Ynxrdlx1MDExYnxcdTAxMGR2bnxcdTAxMGR2Y3xzcnB8elx4ZTFcdTAxNTl8XHUwMTU5XHhlZGp8bGlzfHBybykvaTtmdW5jdGlvbiBDKEwpe3JldHVybiBMPjEmJkw8NSYmMSE9fn4oTC8xMCl9ZnVuY3Rpb24gdyhMLFIseCxVKXt2YXIgSD1MKyIgIjtzd2l0Y2go''@;'; put 'put ''eCl7Y2FzZSJzIjpyZXR1cm4gUnx8VT8icFx4ZTFyIHNla3VuZCI6InBceGUxciBzZWt1bmRhbWkiO2Nhc2Uic3MiOnJldHVybiBSfHxVP0grKEMoTCk/InNla3VuZHkiOiJzZWt1bmQiKTpIKyJzZWt1bmRhbWkiO2Nhc2UibSI6cmV0dXJuIFI/Im1pbnV0YSI6VT8ibWludXR1IjoibWludXRv''@;'; put 'put ''dSI7Y2FzZSJtbSI6cmV0dXJuIFJ8fFU/SCsoQyhMKT8ibWludXR5IjoibWludXQiKTpIKyJtaW51dGFtaSI7Y2FzZSJoIjpyZXR1cm4gUj8iaG9kaW5hIjpVPyJob2RpbnUiOiJob2Rpbm91IjtjYXNlImhoIjpyZXR1cm4gUnx8VT9IKyhDKEwpPyJob2RpbnkiOiJob2RpbiIpOkgrImhvZGlu''@;'; put 'put ''YW1pIjtjYXNlImQiOnJldHVybiBSfHxVPyJkZW4iOiJkbmVtIjtjYXNlImRkIjpyZXR1cm4gUnx8VT9IKyhDKEwpPyJkbnkiOiJkblx4ZWQiKTpIKyJkbnkiO2Nhc2UiTSI6cmV0dXJuIFJ8fFU/Im1cdTAxMWJzXHhlZGMiOiJtXHUwMTFic1x4ZWRjZW0iO2Nhc2UiTU0iOnJldHVybiBSfHxV''@;'; put 'put ''P0grKEMoTCk/Im1cdTAxMWJzXHhlZGNlIjoibVx1MDExYnNceGVkY1x1MDE2ZiIpOkgrIm1cdTAxMWJzXHhlZGNpIjtjYXNlInkiOnJldHVybiBSfHxVPyJyb2siOiJyb2tlbSI7Y2FzZSJ5eSI6cmV0dXJuIFJ8fFU/SCsoQyhMKT8icm9reSI6ImxldCIpOkgrImxldHkifX15LmRlZmluZUxv''@;'; put 'put ''Y2FsZSgiY3MiLHttb250aHM6Yyxtb250aHNTaG9ydDpzLG1vbnRoc1JlZ2V4OnYsbW9udGhzU2hvcnRSZWdleDp2LG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGxlZGVufGxlZG5hfFx4ZmFub3JhfFx4ZmFub3J8Ylx1MDE1OWV6ZW58Ylx1MDE1OWV6bmF8ZHViZW58ZHVibmF8a3ZcdTAxMWJ0ZW58''@;'; put 'put ''a3ZcdTAxMWJ0bmF8XHUwMTBkZXJ2ZW5lY3xcdTAxMGRlcnZlbmNlfFx1MDEwZGVydmVufFx1MDEwZGVydm5hfHNycGVufHNycG5hfHpceGUxXHUwMTU5XHhlZHxcdTAxNTlceGVkamVufFx1MDE1OVx4ZWRqbmF8bGlzdG9wYWR1fGxpc3RvcGFkfHByb3NpbmVjfHByb3NpbmNlKS9pLG1vbnRo''@;'; put 'put ''c1Nob3J0U3RyaWN0UmVnZXg6L14obGVkfFx4ZmFub3xiXHUwMTU5ZXxkdWJ8a3ZcdTAxMWJ8XHUwMTBkdm58XHUwMTBkdmN8c3JwfHpceGUxXHUwMTU5fFx1MDE1OVx4ZWRqfGxpc3xwcm8pL2ksbW9udGhzUGFyc2U6QSxsb25nTW9udGhzUGFyc2U6QSxzaG9ydE1vbnRoc1BhcnNlOkEsd2Vl''@;'; put 'put ''a2RheXM6Im5lZFx1MDExYmxlX3BvbmRcdTAxMWJsXHhlZF9ceGZhdGVyXHhmZF9zdFx1MDE1OWVkYV9cdTAxMGR0dnJ0ZWtfcFx4ZTF0ZWtfc29ib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lX3BvX1x4ZmF0X3N0X1x1MDEwZHRfcFx4ZTFfc28iLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXNNaW46Im5lX3BvX1x4ZmF0X3N0X1x1MDEwZHRfcFx4ZTFfc28iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQgRC4gTU1N''@;'; put 'put ''TSBZWVlZIEg6bW0iLGw6IkQuIE0uIFlZWVkifSxjYWxlbmRhcjp7c2FtZURheToiW2RuZXMgdl0gTFQiLG5leHREYXk6Ilt6XHhlZHRyYSB2XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdiBuZWRcdTAxMWJsaSB2XSBMVCI7Y2Fz''@;'; put 'put ''ZSAxOmNhc2UgMjpyZXR1cm4iW3ZdIGRkZGQgW3ZdIExUIjtjYXNlIDM6cmV0dXJuIlt2ZSBzdFx1MDE1OWVkdSB2XSBMVCI7Y2FzZSA0OnJldHVybiJbdmUgXHUwMTBkdHZydGVrIHZdIExUIjtjYXNlIDU6cmV0dXJuIlt2IHBceGUxdGVrIHZdIExUIjtjYXNlIDY6cmV0dXJuIlt2IHNvYm90''@;'; put 'put ''dSB2XSBMVCJ9fSxsYXN0RGF5OiJbdlx1MDEwZGVyYSB2XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbbWludWxvdSBuZWRcdTAxMWJsaSB2XSBMVCI7Y2FzZSAxOmNhc2UgMjpyZXR1cm4iW21pbnVsXHhlOV0gZGRkZCBbdl0gTFQi''@;'; put 'put ''O2Nhc2UgMzpyZXR1cm4iW21pbnVsb3Ugc3RcdTAxNTllZHUgdl0gTFQiO2Nhc2UgNDpjYXNlIDU6cmV0dXJuIlttaW51bFx4ZmRdIGRkZGQgW3ZdIExUIjtjYXNlIDY6cmV0dXJuIlttaW51bG91IHNvYm90dSB2XSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6''@;'; put 'put ''YSAlcyIscGFzdDoicFx1MDE1OWVkICVzIixzOncsc3M6dyxtOncsbW06dyxoOncsaGg6dyxkOncsZGQ6dyxNOncsTU06dyx5OncseXk6d30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShoKDk3NTg2KSl9LDY2''@;'; put 'put ''NjY2KGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt5LmRlZmluZUxvY2FsZSgiY3YiLHttb250aHM6Ilx1MDQzYVx1MDRkMVx1MDQ0MFx1MDQzYlx1MDQzMFx1MDQ0N19cdTA0M2RcdTA0MzBcdTA0NDBcdTA0ZDFcdTA0NDFfXHUwNDNmXHUwNDQzXHUwNDQ4X1x1MDQzMFx1MDQz''@;'; put 'put ''YVx1MDQzMF9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNGFiXHUwNGQ3XHUwNDQwXHUwNDQyXHUwNDNjXHUwNDM1X1x1MDQ0M1x1MDQ0Mlx1MDRkMV9cdTA0YWJcdTA0NDNcdTA0NDBcdTA0M2JcdTA0MzBfXHUwNDMwXHUwNDMyXHUwNGQxXHUwNDNkX1x1MDQ0ZVx1MDQzZlx1MDQzMF9cdTA0NDdc''@;'; put 'put ''dTA0ZjNcdTA0M2FfXHUwNDQwXHUwNDMwXHUwNDQ4XHUwNDQyXHUwNDMwXHUwNDMyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0M2FcdTA0ZDFcdTA0NDBfXHUwNDNkXHUwNDMwXHUwNDQwX1x1MDQzZlx1MDQ0M1x1MDQ0OF9cdTA0MzBcdTA0M2FcdTA0MzBfXHUwNDNjXHUwNDMwXHUw''@;'; put 'put ''NDM5X1x1MDRhYlx1MDRkN1x1MDQ0MF9cdTA0NDNcdTA0NDJcdTA0ZDFfXHUwNGFiXHUwNDQzXHUwNDQwX1x1MDQzMFx1MDQzMlx1MDQzZF9cdTA0NGVcdTA0M2ZcdTA0MzBfXHUwNDQ3XHUwNGYzXHUwNDNhX1x1MDQ0MFx1MDQzMFx1MDQ0OCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDMy''@;'; put 'put ''XHUwNDRiXHUwNDQwXHUwNDQxXHUwNDMwXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0Mlx1MDQ0M1x1MDQzZFx1MDQ0Mlx1MDQzOFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0NGJcdTA0NDJcdTA0M2JcdTA0MzBcdTA0NDBcdTA0MzhcdTA0M2FcdTA0NDNcdTA0M2Rf''@;'; put 'put ''XHUwNDRlXHUwNDNkXHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQzYVx1MDRkN1x1MDRhYlx1MDQzZFx1MDQzNVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0NGRcdTA0NDBcdTA0M2RcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDQ4XHUwNGQxXHUwNDNjXHUwNDMw''@;'; put 'put ''XHUwNDQyXHUwNDNhXHUwNDQzXHUwNDNkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzMlx1MDQ0Ylx1MDQ0MF9cdTA0NDJcdTA0NDNcdTA0M2RfXHUwNDRiXHUwNDQyXHUwNDNiX1x1MDQ0ZVx1MDQzZF9cdTA0M2FcdTA0ZDdcdTA0YWJfXHUwNDRkXHUwNDQwXHUwNDNkX1x1MDQ0''@;'; put 'put ''OFx1MDRkMVx1MDQzYyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDMyXHUwNDQwX1x1MDQ0Mlx1MDQzZF9cdTA0NGJcdTA0NDJfXHUwNDRlXHUwNDNkX1x1MDQzYVx1MDRhYl9cdTA0NGRcdTA0NDBfXHUwNDQ4XHUwNDNjIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6''@;'; put 'put ''bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELU1NLVlZWVkiLExMOiJZWVlZIFtcdTA0YWJcdTA0NDNcdTA0M2JcdTA0NDVcdTA0MzhdIE1NTU0gW1x1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NVx1MDRkN1x1MDQzZF0gRFstXHUwNDNjXHUwNGQ3XHUwNDQ4XHUwNGQ3XSIsTExMOiJZWVlZIFtcdTA0''@;'; put 'put ''YWJcdTA0NDNcdTA0M2JcdTA0NDVcdTA0MzhdIE1NTU0gW1x1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NVx1MDRkN1x1MDQzZF0gRFstXHUwNDNjXHUwNGQ3XHUwNDQ4XHUwNGQ3XSwgSEg6bW0iLExMTEw6ImRkZGQsIFlZWVkgW1x1MDRhYlx1MDQ0M1x1MDQzYlx1MDQ0NVx1MDQzOF0gTU1NTSBb''@;'; put 'put ''XHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1XHUwNGQ3XHUwNDNkXSBEWy1cdTA0M2NcdTA0ZDdcdTA0NDhcdTA0ZDddLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDFmXHUwNDMwXHUwNDRmXHUwNDNkXSBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUw''@;'; put 'put ''NDM1XSIsbmV4dERheToiW1x1MDQyYlx1MDQ0MFx1MDQzMFx1MDQzZF0gTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLGxhc3REYXk6IltcdTA0ZDZcdTA0M2RcdTA0MzVcdTA0NDBdIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0''@;'; put 'put ''NDBcdTA0MzVdIixuZXh0V2VlazoiW1x1MDRhYVx1MDQzOFx1MDQ0Mlx1MDQzNVx1MDQ0MV0gZGRkZCBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsbGFzdFdlZWs6IltcdTA0MThcdTA0NDBcdTA0NDJcdTA0M2RcdTA0ZDddIGRkZGQgTFQgW1x1MDQ0''@;'; put 'put ''MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24ocyl7cmV0dXJuIHMrKC9cdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDIkL2kuZXhlYyhzKT8iXHUwNDQwXHUwNDM1XHUwNDNkIjovXHUw''@;'; put 'put ''NGFiXHUwNDQzXHUwNDNiJC9pLmV4ZWMocyk/Ilx1MDQ0Mlx1MDQzMFx1MDQzZCI6Ilx1MDQ0MFx1MDQzMFx1MDQzZCIpfSxwYXN0OiIlcyBcdTA0M2FcdTA0MzBcdTA0NGZcdTA0M2JcdTA0M2JcdTA0MzAiLHM6Ilx1MDQzZlx1MDRkN1x1MDQ0MC1cdTA0MzhcdTA0M2EgXHUwNGFiXHUwNDM1''@;'; put 'put ''XHUwNDNhXHUwNDNhXHUwNDQzXHUwNDNkXHUwNDQyIixzczoiJWQgXHUwNGFiXHUwNDM1XHUwNDNhXHUwNDNhXHUwNDQzXHUwNDNkXHUwNDQyIixtOiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUw''@;'; put 'put ''NDQzXHUwNDQyIixoOiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyIixkOiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNDNhXHUwNDQzXHUwNDNkIixkZDoiJWQgXHUwNDNhXHUwNDQz''@;'; put 'put ''XHUwNDNkIixNOiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1IixNTToiJWQgXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1Iix5OiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNGFiXHUwNDQzXHUwNDNiIix5eToiJWQgXHUwNGFiXHUwNDQzXHUwNDNiIn0sZGF5T2ZN''@;'; put 'put ''b250aE9yZGluYWxQYXJzZTovXGR7MSwyfS1cdTA0M2NcdTA0ZDdcdTA0NDgvLG9yZGluYWw6IiVkLVx1MDQzY1x1MDRkN1x1MDQ0OCIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGgoOTc1ODYpKX0sNTUxNjMoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxl''@;'; put 'put ''KCJjeSIse21vbnRoczoiSW9uYXdyX0Nod2Vmcm9yX01hd3J0aF9FYnJpbGxfTWFpX01laGVmaW5fR29yZmZlbm5hZl9Bd3N0X01lZGlfSHlkcmVmX1RhY2h3ZWRkX1JoYWdmeXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Iklvbl9DaHdlX01hd19FYnJfTWFpX01laF9Hb3JfQXdzX01lZF9I''@;'; put 'put ''eWRfVGFjaF9SaGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJEeWRkIFN1bF9EeWRkIExsdW5fRHlkZCBNYXdydGhfRHlkZCBNZXJjaGVyX0R5ZGQgSWF1X0R5ZGQgR3dlbmVyX0R5ZGQgU2Fkd3JuIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bF9MbHVuX01hd19NZXJfSWF1X0d3ZV9T''@;'; put 'put ''YWQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X0xsX01hX01lX0lhX0d3X1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBN''@;'; put 'put ''TU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIZWRkaXcgYW1dIExUIixuZXh0RGF5OiJbWWZvcnkgYW1dIExUIixuZXh0V2VlazoiZGRkZCBbYW1dIExUIixsYXN0RGF5OiJbRGRvZSBhbV0gTFQiLGxhc3RXZWVrOiJk''@;'; put 'put ''ZGRkIFtkaXdldGhhZiBhbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im1ld24gJXMiLHBhc3Q6IiVzIHluIFx4ZjRsIixzOiJ5Y2h5ZGlnIGVpbGlhZGF1IixzczoiJWQgZWlsaWFkIixtOiJtdW51ZCIsbW06IiVkIG11bnVkIixoOiJhd3IiLGhoOiIlZCBhd3Ii''@;'; put 'put ''LGQ6ImRpd3Jub2QiLGRkOiIlZCBkaXdybm9kIixNOiJtaXMiLE1NOiIlZCBtaXMiLHk6ImJsd3lkZHluIix5eToiJWQgZmx5bmVkZCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZmVkfGFpbnxhZnxpbHx5ZGR8ZWR8ZWcpLyxvcmRpbmFsOmZ1bmN0aW9uKHMpe3ZhciB2PSIi''@;'; put 'put ''O3JldHVybiBzPjIwP3Y9NDA9PT1zfHw1MD09PXN8fDYwPT09c3x8ODA9PT1zfHwxMDA9PT1zPyJmZWQiOiJhaW4iOnM+MCYmKHY9WyIiLCJhZiIsImlsIiwieWRkIiwieWRkIiwiZWQiLCJlZCIsImVkIiwiZmVkIiwiZmVkIiwiZmVkIiwiZWciLCJmZWQiLCJlZyIsImVnIiwiZmVkIiwiZWci''@;'; put 'put ''LCJlZyIsImZlZCIsImVnIiwiZmVkIl1bc10pLHMrdn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGgoOTc1ODYpKX0sODczNjAoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJkYSIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFydHNfYXByaWxfbWFq''@;'; put 'put ''X2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzXHhmOG5kYWdfbWFuZGFn''@;'; put 'put ''X3RpcnNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2xceGY4cmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzXHhmOG5fbWFuX3Rpcl9vbnNfdG9yX2ZyZV9sXHhmOHIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InNceGY4X21hX3RpX29uX3RvX2ZyX2xceGY4Ii5zcGxpdCgiXyIp''@;'; put 'put ''LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIFtkLl0gRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Iltp''@;'; put 'put ''IGRhZyBrbC5dIExUIixuZXh0RGF5OiJbaSBtb3JnZW4ga2wuXSBMVCIsbmV4dFdlZWs6InBceGU1IGRkZGQgW2tsLl0gTFQiLGxhc3REYXk6IltpIGdceGU1ciBrbC5dIExUIixsYXN0V2VlazoiW2ldIGRkZGRbcyBrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJl''@;'; put 'put ''OiJvbSAlcyIscGFzdDoiJXMgc2lkZW4iLHM6ImZceGU1IHNla3VuZGVyIixzczoiJWQgc2VrdW5kZXIiLG06ImV0IG1pbnV0IixtbToiJWQgbWludXR0ZXIiLGg6ImVuIHRpbWUiLGhoOiIlZCB0aW1lciIsZDoiZW4gZGFnIixkZDoiJWQgZGFnZSIsTToiZW4gbVx4ZTVuZWQiLE1NOiIlZCBt''@;'; put 'put ''XHhlNW5lZGVyIix5OiJldCBceGU1ciIseXk6IiVkIFx4ZTVyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShoKDk3NTg2KSl9LDQzMjQ4KGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0IjtmdW5j''@;'; put 'put ''dGlvbiBjKEEsdixDLHcpe3ZhciBTPXttOlsiZWluZSBNaW51dGUiLCJlaW5lciBNaW51dGUiXSxoOlsiZWluZSBTdHVuZGUiLCJlaW5lciBTdHVuZGUiXSxkOlsiZWluIFRhZyIsImVpbmVtIFRhZyJdLGRkOltBKyIgVGFnZSIsQSsiIFRhZ2VuIl0sdzpbImVpbmUgV29jaGUiLCJlaW5lciBX''@;'; put 'put ''b2NoZSJdLE06WyJlaW4gTW9uYXQiLCJlaW5lbSBNb25hdCJdLE1NOltBKyIgTW9uYXRlIixBKyIgTW9uYXRlbiJdLHk6WyJlaW4gSmFociIsImVpbmVtIEphaHIiXSx5eTpbQSsiIEphaHJlIixBKyIgSmFocmVuIl19O3JldHVybiB2P1NbQ11bMF06U1tDXVsxXX15LmRlZmluZUxvY2FsZSgi''@;'; put 'put ''ZGUtYXQiLHttb250aHM6IkpceGU0bm5lcl9GZWJydWFyX01ceGU0cnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IkpceGU0bi5fRmViLl9NXHhlNHJ6X0Fwci5fTWFpX0p1bmlf''@;'; put 'put ''SnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU28uX01v''@;'; put 'put ''Ll9EaS5fTWkuX0RvLl9Gci5fU2EuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19Nb19EaV9NaV9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQu''@;'; put 'put ''IE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGV1dGUgdW1dIExUIFtVaHJdIixzYW1lRWxzZToiTCIsbmV4dERheToiW21vcmdlbiB1bV0gTFQgW1Vocl0iLG5leHRXZWVrOiJk''@;'; put 'put ''ZGRkIFt1bV0gTFQgW1Vocl0iLGxhc3REYXk6IltnZXN0ZXJuIHVtXSBMVCBbVWhyXSIsbGFzdFdlZWs6IltsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0ifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6InZvciAlcyIsczoiZWluIHBhYXIgU2VrdW5kZW4iLHNzOiIlZCBT''@;'; put 'put ''ZWt1bmRlbiIsbTpjLG1tOiIlZCBNaW51dGVuIixoOmMsaGg6IiVkIFN0dW5kZW4iLGQ6YyxkZDpjLHc6Yyx3dzoiJWQgV29jaGVuIixNOmMsTU06Yyx5OmMseXk6Y30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0p''@;'; put 'put ''fShoKDk3NTg2KSl9LDgzMjIyKGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjKEEsdixDLHcpe3ZhciBTPXttOlsiZWluZSBNaW51dGUiLCJlaW5lciBNaW51dGUiXSxoOlsiZWluZSBTdHVuZGUiLCJlaW5lciBTdHVuZGUiXSxkOlsiZWluIFRhZyIsImVpbmVt''@;'; put 'put ''IFRhZyJdLGRkOltBKyIgVGFnZSIsQSsiIFRhZ2VuIl0sdzpbImVpbmUgV29jaGUiLCJlaW5lciBXb2NoZSJdLE06WyJlaW4gTW9uYXQiLCJlaW5lbSBNb25hdCJdLE1NOltBKyIgTW9uYXRlIixBKyIgTW9uYXRlbiJdLHk6WyJlaW4gSmFociIsImVpbmVtIEphaHIiXSx5eTpbQSsiIEphaHJl''@;'; put 'put ''IixBKyIgSmFocmVuIl19O3JldHVybiB2P1NbQ11bMF06U1tDXVsxXX15LmRlZmluZUxvY2FsZSgiZGUtY2giLHttb250aHM6IkphbnVhcl9GZWJydWFyX01ceGU0cnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXIiLnNwbGl0''@;'; put 'put ''KCJfIiksbW9udGhzU2hvcnQ6Ikphbi5fRmViLl9NXHhlNHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3Rh''@;'; put 'put ''Z19GcmVpdGFnX1NhbXN0YWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01vX0RpX01pX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6''@;'; put 'put ''IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltoZXV0ZSB1bV0gTFQgW1Vocl0iLHNhbWVFbHNlOiJM''@;'; put 'put ''IixuZXh0RGF5OiJbbW9yZ2VuIHVtXSBMVCBbVWhyXSIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCBbVWhyXSIsbGFzdERheToiW2dlc3Rlcm4gdW1dIExUIFtVaHJdIixsYXN0V2VlazoiW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIs''@;'; put 'put ''cGFzdDoidm9yICVzIixzOiJlaW4gcGFhciBTZWt1bmRlbiIsc3M6IiVkIFNla3VuZGVuIixtOmMsbW06IiVkIE1pbnV0ZW4iLGg6YyxoaDoiJWQgU3R1bmRlbiIsZDpjLGRkOmMsdzpjLHd3OiIlZCBXb2NoZW4iLE06YyxNTTpjLHk6Yyx5eTpjfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9c''@;'; put 'put ''ZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGgoOTc1ODYpKX0sNDU5MzIoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoQSx2LEMsdyl7dmFyIFM9e206WyJlaW5lIE1pbnV0ZSIsImVpbmVyIE1pbnV0ZSJdLGg6WyJlaW5l''@;'; put 'put ''IFN0dW5kZSIsImVpbmVyIFN0dW5kZSJdLGQ6WyJlaW4gVGFnIiwiZWluZW0gVGFnIl0sZGQ6W0ErIiBUYWdlIixBKyIgVGFnZW4iXSx3OlsiZWluZSBXb2NoZSIsImVpbmVyIFdvY2hlIl0sTTpbImVpbiBNb25hdCIsImVpbmVtIE1vbmF0Il0sTU06W0ErIiBNb25hdGUiLEErIiBNb25hdGVu''@;'; put 'put ''Il0seTpbImVpbiBKYWhyIiwiZWluZW0gSmFociJdLHl5OltBKyIgSmFocmUiLEErIiBKYWhyZW4iXX07cmV0dXJuIHY/U1tDXVswXTpTW0NdWzFdfXkuZGVmaW5lTG9jYWxlKCJkZSIse21vbnRoczoiSmFudWFyX0ZlYnJ1YXJfTVx4ZTRyel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9T''@;'; put 'put ''ZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuLl9GZWIuX01ceGU0cnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJT''@;'; put 'put ''b25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01vX0RpX01pX0RvX0ZyX1NhIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tIn0sY2Fs''@;'; put 'put ''ZW5kYXI6e3NhbWVEYXk6IltoZXV0ZSB1bV0gTFQgW1Vocl0iLHNhbWVFbHNlOiJMIixuZXh0RGF5OiJbbW9yZ2VuIHVtXSBMVCBbVWhyXSIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCBbVWhyXSIsbGFzdERheToiW2dlc3Rlcm4gdW1dIExUIFtVaHJdIixsYXN0V2VlazoiW2xldHp0ZW5dIGRk''@;'; put 'put ''ZGQgW3VtXSBMVCBbVWhyXSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoidm9yICVzIixzOiJlaW4gcGFhciBTZWt1bmRlbiIsc3M6IiVkIFNla3VuZGVuIixtOmMsbW06IiVkIE1pbnV0ZW4iLGg6YyxoaDoiJWQgU3R1bmRlbiIsZDpjLGRkOmMsdzpjLHd3OiIlZCBXb2No''@;'; put 'put ''ZW4iLE06YyxNTTpjLHk6Yyx5eTpjfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGgoOTc1ODYpKX0sNjQwNShmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7dmFyIGM9WyJcdTA3OTZcdTA3YWNc''@;'; put 'put ''dTA3ODJcdTA3YWFcdTA3ODdcdTA3YTZcdTA3ODNcdTA3YTkiLCJcdTA3OGFcdTA3YWNcdTA3ODRcdTA3YjBcdTA3ODNcdTA3YWFcdTA3ODdcdTA3YTZcdTA3ODNcdTA3YTkiLCJcdTA3ODlcdTA3YTdcdTA3ODNcdTA3YThcdTA3OTdcdTA3YWEiLCJcdTA3ODdcdTA3YWRcdTA3OTVcdTA3YjBc''@;'; put 'put ''dTA3ODNcdTA3YTlcdTA3OGRcdTA3YWEiLCJcdTA3ODlcdTA3YWQiLCJcdTA3OTZcdTA3YWJcdTA3ODJcdTA3YjAiLCJcdTA3OTZcdTA3YWFcdTA3OGRcdTA3YTZcdTA3ODdcdTA3YTgiLCJcdTA3ODdcdTA3YWZcdTA3OGVcdTA3YTZcdTA3OTBcdTA3YjBcdTA3OTNcdTA3YWEiLCJcdTA3OTBc''@;'; put 'put ''dTA3YWNcdTA3OTVcdTA3YjBcdTA3OTNcdTA3YWNcdTA3ODlcdTA3YjBcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiLCJcdTA3ODdcdTA3YWVcdTA3ODZcdTA3YjBcdTA3OTNcdTA3YWZcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiLCJcdTA3ODJcdTA3YWVcdTA3ODhcdTA3YWNcdTA3ODlcdTA3''@;'; put 'put ''YjBcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiLCJcdTA3OTFcdTA3YThcdTA3OTBcdTA3YWNcdTA3ODlcdTA3YjBcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiXSxzPVsiXHUwNzg3XHUwN2E3XHUwNzhiXHUwN2E4XHUwNzg3XHUwN2IwXHUwNzhjXHUwN2E2IiwiXHUwNzgwXHUwN2FmXHUwNzg5''@;'; put 'put ''XHUwN2E2IiwiXHUwNzg3XHUwN2E2XHUwNzgyXHUwN2IwXHUwNzhlXHUwN2E3XHUwNzgzXHUwN2E2IiwiXHUwNzg0XHUwN2FhXHUwNzhiXHUwN2E2IiwiXHUwNzg0XHUwN2FhXHUwNzgzXHUwN2E3XHUwNzkwXHUwN2IwXHUwNzhhXHUwN2E2XHUwNzhjXHUwN2E4IiwiXHUwNzgwXHUwN2FhXHUw''@;'; put 'put ''Nzg2XHUwN2FhXHUwNzgzXHUwN2FhIiwiXHUwNzgwXHUwN2FlXHUwNzgyXHUwN2E4XHUwNzgwXHUwN2E4XHUwNzgzXHUwN2FhIl07eS5kZWZpbmVMb2NhbGUoImR2Iix7bW9udGhzOmMsbW9udGhzU2hvcnQ6Yyx3ZWVrZGF5czpzLHdlZWtkYXlzU2hvcnQ6cyx3ZWVrZGF5c01pbjoiXHUwNzg3''@;'; put 'put ''XHUwN2E3XHUwNzhiXHUwN2E4X1x1MDc4MFx1MDdhZlx1MDc4OVx1MDdhNl9cdTA3ODdcdTA3YTZcdTA3ODJcdTA3YjBfXHUwNzg0XHUwN2FhXHUwNzhiXHUwN2E2X1x1MDc4NFx1MDdhYVx1MDc4M1x1MDdhN19cdTA3ODBcdTA3YWFcdTA3ODZcdTA3YWFfXHUwNzgwXHUwN2FlXHUwNzgyXHUw''@;'; put 'put ''N2E4Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA3ODlc''@;'; put 'put ''dTA3ODZ8XHUwNzg5XHUwNzhhLyxpc1BNOmZ1bmN0aW9uKHYpe3JldHVybiJcdTA3ODlcdTA3OGEiPT09dn0sbWVyaWRpZW06ZnVuY3Rpb24odixDLHcpe3JldHVybiB2PDEyPyJcdTA3ODlcdTA3ODYiOiJcdTA3ODlcdTA3OGEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDc4OVx1MDdhOFx1''@;'; put 'put ''MDc4N1x1MDdhNlx1MDc4Ylx1MDdhYV0gTFQiLG5leHREYXk6IltcdTA3ODlcdTA3YTdcdTA3OGJcdTA3YTZcdTA3ODlcdTA3YTddIExUIixuZXh0V2VlazoiZGRkZCBMVCIsbGFzdERheToiW1x1MDc4N1x1MDdhOFx1MDc4N1x1MDdiMFx1MDc5NFx1MDdhY10gTFQiLGxhc3RXZWVrOiJbXHUw''@;'; put 'put ''NzhhXHUwN2E3XHUwNzg3XHUwN2E4XHUwNzhjXHUwN2FhXHUwNzg4XHUwN2E4XSBkZGRkIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA3OGNcdTA3YWNcdTA3ODNcdTA3YWRcdTA3OGVcdTA3YTZcdTA3ODdcdTA3YTggJXMiLHBhc3Q6Ilx1MDc4Nlx1MDdhYVx1''@;'; put 'put ''MDc4M1x1MDdhOFx1MDc4Mlx1MDdiMCAlcyIsczoiXHUwNzkwXHUwN2E4XHUwNzg2XHUwN2FhXHUwNzgyXHUwN2IwXHUwNzhjXHUwN2FhXHUwNzg2XHUwN2FlXHUwNzg1XHUwN2FjXHUwNzg3XHUwN2IwIixzczoiZCUgXHUwNzkwXHUwN2E4XHUwNzg2XHUwN2FhXHUwNzgyXHUwN2IwXHUwNzhj''@;'; put 'put ''XHUwN2FhIixtOiJcdTA3ODlcdTA3YThcdTA3ODJcdTA3YThcdTA3OTNcdTA3YWNcdTA3ODdcdTA3YjAiLG1tOiJcdTA3ODlcdTA3YThcdTA3ODJcdTA3YThcdTA3OTNcdTA3YWEgJWQiLGg6Ilx1MDc4ZVx1MDdhNlx1MDc5MVx1MDdhOFx1MDc4N1x1MDdhOFx1MDc4M1x1MDdhY1x1MDc4N1x1''@;'; put 'put ''MDdiMCIsaGg6Ilx1MDc4ZVx1MDdhNlx1MDc5MVx1MDdhOFx1MDc4N1x1MDdhOFx1MDc4M1x1MDdhYSAlZCIsZDoiXHUwNzhiXHUwN2FhXHUwNzg4XHUwN2E2XHUwNzgwXHUwN2FjXHUwNzg3XHUwN2IwIixkZDoiXHUwNzhiXHUwN2FhXHUwNzg4XHUwN2E2XHUwNzkwXHUwN2IwICVkIixNOiJc''@;'; put 'put ''dTA3ODlcdTA3YTZcdTA3ODBcdTA3YWNcdTA3ODdcdTA3YjAiLE1NOiJcdTA3ODlcdTA3YTZcdTA3OTBcdTA3YjAgJWQiLHk6Ilx1MDc4N1x1MDdhNlx1MDc4MFx1MDdhNlx1MDc4M1x1MDdhY1x1MDc4N1x1MDdiMCIseXk6Ilx1MDc4N1x1MDdhNlx1MDc4MFx1MDdhNlx1MDc4M1x1MDdhYSAl''@;'; put 'put ''ZCJ9LHByZXBhcnNlOmZ1bmN0aW9uKHYpe3JldHVybiB2LnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odil7cmV0dXJuIHYucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjcsZG95OjEyfX0pfShoKDk3NTg2KSl9LDYwNzE4KGZlLGosaCl7IWZ1''@;'; put 'put ''bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt5LmRlZmluZUxvY2FsZSgiZWwiLHttb250aHNOb21pbmF0aXZlRWw6Ilx1MDM5OVx1MDNiMVx1MDNiZFx1MDNiZlx1MDNjNVx1MDNhY1x1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzYTZcdTAzYjVcdTAzYjJcdTAzYzFcdTAzYmZcdTAzYzVcdTAz''@;'; put 'put ''YWNcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzljXHUwM2FjXHUwM2MxXHUwM2M0XHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5MVx1MDNjMFx1MDNjMVx1MDNhZlx1MDNiYlx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOWNcdTAzYWNcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzk5XHUwM2JmXHUw''@;'; put 'put ''M2NkXHUwM2JkXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5OVx1MDNiZlx1MDNjZFx1MDNiYlx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTFcdTAzY2RcdTAzYjNcdTAzYmZcdTAzYzVcdTAzYzNcdTAzYzRcdTAzYmZcdTAzYzJfXHUwM2EzXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2FkXHUwM2JjXHUw''@;'; put 'put ''M2IyXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5Zlx1MDNiYVx1MDNjNFx1MDNjZVx1MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOWRcdTAzYmZcdTAzYWRcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzk0XHUwM2I1XHUwM2JhXHUwM2FkXHUw''@;'; put 'put ''M2JjXHUwM2IyXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyIi5zcGxpdCgiXyIpLG1vbnRoc0dlbml0aXZlRWw6Ilx1MDM5OVx1MDNiMVx1MDNiZFx1MDNiZlx1MDNjNVx1MDNiMVx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzYTZcdTAzYjVcdTAzYjJcdTAzYzFcdTAzYmZcdTAzYzVcdTAz''@;'; put 'put ''YjFcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzljXHUwM2IxXHUwM2MxXHUwM2M0XHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5MVx1MDNjMFx1MDNjMVx1MDNiOVx1MDNiYlx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOWNcdTAzYjFcdTAzOTBcdTAzYmZcdTAzYzVfXHUwMzk5XHUwM2JmXHUw''@;'; put 'put ''M2M1XHUwM2JkXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5OVx1MDNiZlx1MDNjNVx1MDNiYlx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTFcdTAzYzVcdTAzYjNcdTAzYmZcdTAzY2RcdTAzYzNcdTAzYzRcdTAzYmZcdTAzYzVfXHUwM2EzXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2I1XHUwM2JjXHUw''@;'; put 'put ''M2IyXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5Zlx1MDNiYVx1MDNjNFx1MDNjOVx1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOWRcdTAzYmZcdTAzYjVcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzk0XHUwM2I1XHUwM2JhXHUwM2I1XHUw''@;'; put 'put ''M2JjXHUwM2IyXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1Ii5zcGxpdCgiXyIpLG1vbnRoczpmdW5jdGlvbihBLHYpe3JldHVybiBBPyJzdHJpbmciPT10eXBlb2YgdiYmL0QvLnRlc3Qodi5zdWJzdHJpbmcoMCx2LmluZGV4T2YoIk1NTU0iKSkpP3RoaXMuX21vbnRoc0dlbml0aXZlRWxbQS5t''@;'; put 'put ''b250aCgpXTp0aGlzLl9tb250aHNOb21pbmF0aXZlRWxbQS5tb250aCgpXTp0aGlzLl9tb250aHNOb21pbmF0aXZlRWx9LG1vbnRoc1Nob3J0OiJcdTAzOTlcdTAzYjFcdTAzYmRfXHUwM2E2XHUwM2I1XHUwM2IyX1x1MDM5Y1x1MDNiMVx1MDNjMV9cdTAzOTFcdTAzYzBcdTAzYzFfXHUwMzlj''@;'; put 'put ''XHUwM2IxXHUwM2NhX1x1MDM5OVx1MDNiZlx1MDNjNVx1MDNiZF9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmJfXHUwMzkxXHUwM2M1XHUwM2IzX1x1MDNhM1x1MDNiNVx1MDNjMF9cdTAzOWZcdTAzYmFcdTAzYzRfXHUwMzlkXHUwM2JmXHUwM2I1X1x1MDM5NFx1MDNiNVx1MDNiYSIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5czoiXHUwMzlhXHUwM2M1XHUwM2MxXHUwM2I5XHUwM2IxXHUwM2JhXHUwM2FlX1x1MDM5NFx1MDNiNVx1MDNjNVx1MDNjNFx1MDNhZFx1MDNjMVx1MDNiMV9cdTAzYTRcdTAzYzFcdTAzYWZcdTAzYzRcdTAzYjdfXHUwM2E0XHUwM2I1XHUwM2M0XHUwM2FjXHUwM2MxXHUw''@;'; put 'put ''M2M0XHUwM2I3X1x1MDNhMFx1MDNhZFx1MDNiY1x1MDNjMFx1MDNjNFx1MDNiN19cdTAzYTBcdTAzYjFcdTAzYzFcdTAzYjFcdTAzYzNcdTAzYmFcdTAzYjVcdTAzYzVcdTAzYWVfXHUwM2EzXHUwM2FjXHUwM2IyXHUwM2IyXHUwM2IxXHUwM2M0XHUwM2JmIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''U2hvcnQ6Ilx1MDM5YVx1MDNjNVx1MDNjMV9cdTAzOTRcdTAzYjVcdTAzYzVfXHUwM2E0XHUwM2MxXHUwM2I5X1x1MDNhNFx1MDNiNVx1MDNjNF9cdTAzYTBcdTAzYjVcdTAzYmNfXHUwM2EwXHUwM2IxXHUwM2MxX1x1MDNhM1x1MDNiMVx1MDNiMiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi''@;'; put 'put ''XHUwMzlhXHUwM2M1X1x1MDM5NFx1MDNiNV9cdTAzYTRcdTAzYzFfXHUwM2E0XHUwM2I1X1x1MDNhMFx1MDNiNV9cdTAzYTBcdTAzYjFfXHUwM2EzXHUwM2IxIi5zcGxpdCgiXyIpLG1lcmlkaWVtOmZ1bmN0aW9uKEEsdixDKXtyZXR1cm4gQT4xMT9DPyJcdTAzYmNcdTAzYmMiOiJcdTAzOWNc''@;'; put 'put ''dTAzOWMiOkM/Ilx1MDNjMFx1MDNiYyI6Ilx1MDNhMFx1MDM5YyJ9LGlzUE06ZnVuY3Rpb24oQSl7cmV0dXJuIlx1MDNiYyI9PT0oQSsiIikudG9Mb3dlckNhc2UoKVswXX0sbWVyaWRpZW1QYXJzZTovW1x1MDNhMFx1MDM5Y11cLj9cdTAzOWM/XC4/L2ksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJo''@;'; put 'put ''Om1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhckVsOntzYW1lRGF5OiJbXHUwM2EzXHUwM2FlXHUwM2JjXHUwM2I1XHUwM2Mx''@;'; put 'put ''XHUwM2IxIHt9XSBMVCIsbmV4dERheToiW1x1MDM5MVx1MDNjZFx1MDNjMVx1MDNiOVx1MDNiZiB7fV0gTFQiLG5leHRXZWVrOiJkZGRkIFt7fV0gTFQiLGxhc3REYXk6IltcdTAzYTdcdTAzYjhcdTAzYjVcdTAzYzIge31dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiA2PT09dGhp''@;'; put 'put ''cy5kYXkoKT8iW1x1MDNjNFx1MDNiZiBcdTAzYzBcdTAzYzFcdTAzYmZcdTAzYjdcdTAzYjNcdTAzYmZcdTAzY2RcdTAzYmNcdTAzYjVcdTAzYmRcdTAzYmZdIGRkZGQgW3t9XSBMVCI6IltcdTAzYzRcdTAzYjdcdTAzYmQgXHUwM2MwXHUwM2MxXHUwM2JmXHUwM2I3XHUwM2IzXHUwM2JmXHUw''@;'; put 'put ''M2NkXHUwM2JjXHUwM2I1XHUwM2JkXHUwM2I3XSBkZGRkIFt7fV0gTFQifSxzYW1lRWxzZToiTCJ9LGNhbGVuZGFyOmZ1bmN0aW9uKEEsdil7dmFyIEM9dGhpcy5fY2FsZW5kYXJFbFtBXSx3PXYmJnYuaG91cnMoKTtyZXR1cm4gZnVuY3Rpb24gYyhBKXtyZXR1cm4gdHlwZW9mIEZ1bmN0aW9u''@;'; put 'put ''PCJ1IiYmQSBpbnN0YW5jZW9mIEZ1bmN0aW9ufHwiW29iamVjdCBGdW5jdGlvbl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEEpfShDKSYmKEM9Qy5hcHBseSh2KSksQy5yZXBsYWNlKCJ7fSIsdyUxMj09MT8iXHUwM2MzXHUwM2M0XHUwM2I3IjoiXHUwM2MzXHUwM2M0XHUw''@;'; put 'put ''M2I5XHUwM2MyIil9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTAzYzNcdTAzYjUgJXMiLHBhc3Q6IiVzIFx1MDNjMFx1MDNjMVx1MDNiOVx1MDNiZCIsczoiXHUwM2JiXHUwM2FmXHUwM2IzXHUwM2IxIFx1MDNiNFx1MDNiNVx1MDNjNVx1MDNjNFx1MDNiNVx1MDNjMVx1MDNjY1x1MDNiYlx1''@;'; put 'put ''MDNiNVx1MDNjMFx1MDNjNFx1MDNiMSIsc3M6IiVkIFx1MDNiNFx1MDNiNVx1MDNjNVx1MDNjNFx1MDNiNVx1MDNjMVx1MDNjY1x1MDNiYlx1MDNiNVx1MDNjMFx1MDNjNFx1MDNiMSIsbToiXHUwM2FkXHUwM2JkXHUwM2IxIFx1MDNiYlx1MDNiNVx1MDNjMFx1MDNjNFx1MDNjYyIsbW06IiVk''@;'; put 'put ''IFx1MDNiYlx1MDNiNVx1MDNjMFx1MDNjNFx1MDNhYyIsaDoiXHUwM2JjXHUwM2FmXHUwM2IxIFx1MDNjZVx1MDNjMVx1MDNiMSIsaGg6IiVkIFx1MDNjZVx1MDNjMVx1MDNiNVx1MDNjMiIsZDoiXHUwM2JjXHUwM2FmXHUwM2IxIFx1MDNiY1x1MDNhZFx1MDNjMVx1MDNiMSIsZGQ6IiVkIFx1''@;'; put 'put ''MDNiY1x1MDNhZFx1MDNjMVx1MDNiNVx1MDNjMiIsTToiXHUwM2FkXHUwM2JkXHUwM2IxXHUwM2MyIFx1MDNiY1x1MDNhZVx1MDNiZFx1MDNiMVx1MDNjMiIsTU06IiVkIFx1MDNiY1x1MDNhZVx1MDNiZFx1MDNiNVx1MDNjMiIseToiXHUwM2FkXHUwM2JkXHUwM2IxXHUwM2MyIFx1MDNjN1x1''@;'; put 'put ''MDNjMVx1MDNjY1x1MDNiZFx1MDNiZlx1MDNjMiIseXk6IiVkIFx1MDNjN1x1MDNjMVx1MDNjY1x1MDNiZFx1MDNiOVx1MDNiMSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cdTAzYjcvLG9yZGluYWw6IiVkXHUwM2I3Iix3ZWVrOntkb3c6MSxkb3k6NH19KX0oaCg5NzU4Nikp''@;'; put 'put ''fSwzNjMxOShmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5kZWZpbmVMb2NhbGUoImVuLWF1Iix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxp''@;'; put 'put ''dCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0g''@;'; put 'put ''WVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVy''@;'; put 'put ''ZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6''@;'; put 'put ''ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKHMp''@;'; put 'put ''e3ZhciBBPXMlMTA7cmV0dXJuIHMrKDE9PX5+KHMlMTAwLzEwKT8idGgiOjE9PT1BPyJzdCI6Mj09PUE/Im5kIjozPT09QT8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MCxkb3k6NH19KX0oaCg5NzU4NikpfSw4MDU5NyhmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5kZWZpbmVM''@;'; put 'put ''b2NhbGUoImVuLWNhIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVn''@;'; put 'put ''X1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IllZWVktTU0tREQiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBE''@;'; put 'put ''LCBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVF''@;'; put 'put ''bHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixN''@;'; put 'put ''OiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKHMpe3ZhciBBPXMlMTA7cmV0dXJuIHMrKDE9PX5+KHMlMTAwLzEwKT8idGgiOjE9PT1B''@;'; put 'put ''PyJzdCI6Mj09PUE/Im5kIjozPT09QT8icmQiOiJ0aCIpfX0pfShoKDk3NTg2KSl9LDUxODAwKGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt5LmRlZmluZUxvY2FsZSgiZW4tZ2IiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9B''@;'; put 'put ''dWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVz''@;'; put 'put ''ZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6''@;'; put 'put ''bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBM''@;'; put 'put ''VCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoi''@;'; put 'put ''JWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNl''@;'; put 'put ''Oi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihzKXt2YXIgQT1zJTEwO3JldHVybiBzKygxPT1+fihzJTEwMC8xMCk/InRoIjoxPT09QT8ic3QiOjI9PT1BPyJuZCI6Mz09PUE/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGgoOTc1ODYpKX0sODA3KGZl''@;'; put 'put ''LGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt5LmRlZmluZUxvY2FsZSgiZW4taWUiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9u''@;'; put 'put ''dGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJT''@;'; put 'put ''dW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJE''@;'; put 'put ''IE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFz''@;'; put 'put ''dFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIl''@;'; put 'put ''ZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKHMpe3ZhciBBPXMlMTA7cmV0''@;'; put 'put ''dXJuIHMrKDE9PX5+KHMlMTAwLzEwKT8idGgiOjE9PT1BPyJzdCI6Mj09PUE/Im5kIjozPT09QT8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oaCg5NzU4NikpfSw5NTk2MChmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5kZWZpbmVMb2NhbGUoImVuLWlsIix7''@;'; put 'put ''bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0Rl''@;'; put 'put ''YyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9N''@;'; put 'put ''b19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5k''@;'; put 'put ''YXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6''@;'; put 'put ''e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250''@;'; put 'put ''aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24ocyl7dmFyIEE9cyUxMDtyZXR1cm4gcysoMT09fn4ocyUxMDAvMTApPyJ0aCI6MT09PUE/InN0IjoyPT09QT8ibmQiOjM9PT1B''@;'; put 'put ''PyJyZCI6InRoIil9fSl9KGgoOTc1ODYpKX0sODQ0MTgoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJlbi1pbiIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jl''@;'; put 'put ''cl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1Nh''@;'; put 'put ''dHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixM''@;'; put 'put ''OiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQg''@;'; put 'put ''W2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBt''@;'; put 'put ''aW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJk''@;'; put 'put ''fHRoKS8sb3JkaW5hbDpmdW5jdGlvbihzKXt2YXIgQT1zJTEwO3JldHVybiBzKygxPT1+fihzJTEwMC8xMCk/InRoIjoxPT09QT8ic3QiOjI9PT1BPyJuZCI6Mz09PUE/InJkIjoidGgiKX0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KGgoOTc1ODYpKX0sNDY4NjUoZmUsaixoKXshZnVuY3Rpb24o''@;'; put 'put ''eSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJlbi1ueiIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0Zl''@;'; put 'put ''Yl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9U''@;'; put 'put ''aHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDpt''@;'; put 'put ''bSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFz''@;'; put 'put ''dF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6''@;'; put 'put ''ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihzKXt2YXIgQT1zJTEwO3JldHVybiBzKygxPT1+''@;'; put 'put ''fihzJTEwMC8xMCk/InRoIjoxPT09QT8ic3QiOjI9PT1BPyJuZCI6Mz09PUE/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGgoOTc1ODYpKX0sMzI2NDcoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJlbi1zZyIse21vbnRoczoiSmFu''@;'; put 'put ''dWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhf''@;'; put 'put ''RnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5''@;'; put 'put ''OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Imlu''@;'; put 'put ''ICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHll''@;'; put 'put ''YXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKHMpe3ZhciBBPXMlMTA7cmV0dXJuIHMrKDE9PX5+KHMlMTAwLzEwKT8idGgiOjE9PT1BPyJzdCI6Mj09PUE/Im5kIjozPT09QT8icmQiOiJ0aCIp''@;'; put 'put ''fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oaCg5NzU4NikpfSw2MTkzMShmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5kZWZpbmVMb2NhbGUoImVvIix7bW9udGhzOiJqYW51YXJvX2ZlYnJ1YXJvX21hcnRvX2Fwcmlsb19tYWpvX2p1bmlvX2p1bGlvX2FcdTAxNmRndXN0b19z''@;'; put 'put ''ZXB0ZW1icm9fb2t0b2Jyb19ub3ZlbWJyb19kZWNlbWJybyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJ0X2Fwcl9tYWpfanVuX2p1bF9hXHUwMTZkZ19zZXB0X29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJkaW1hblx1MDEwOW9fbHVuZG9fbWFyZG9fbWVy''@;'; put 'put ''a3JlZG9fXHUwMTM1YVx1MDE2ZGRvX3ZlbmRyZWRvX3NhYmF0byIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW1fbHVuX21hcmRfbWVya19cdTAxMzVhXHUwMTZkX3Zlbl9zYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21lX1x1MDEzNWFfdmVfc2EiLnNwbGl0KCJf''@;'; put 'put ''IiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IltsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVkiLExMTDoiW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWSBISDptbSIsTExMTDoiZGRkZFtuXSwgW2xhXSBEWy1hbiBkZV0gTU1NTSwg''@;'; put 'put ''WVlZWSBISDptbSIsbGxsbDoiZGRkLCBbbGFdIERbLWFuIGRlXSBNTU0sIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9bYXBdXC50XC5tL2ksaXNQTTpmdW5jdGlvbihzKXtyZXR1cm4icCI9PT1zLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpfSxtZXJpZGllbTpmdW5jdGlvbihzLEEsdil7''@;'; put 'put ''cmV0dXJuIHM+MTE/dj8icC50Lm0uIjoiUC5ULk0uIjp2PyJhLnQubS4iOiJBLlQuTS4ifSxjYWxlbmRhcjp7c2FtZURheToiW0hvZGlhXHUwMTZkIGplXSBMVCIsbmV4dERheToiW01vcmdhXHUwMTZkIGplXSBMVCIsbmV4dFdlZWs6ImRkZGRbbiBqZV0gTFQiLGxhc3REYXk6IltIaWVyYVx1''@;'; put 'put ''MDE2ZCBqZV0gTFQiLGxhc3RXZWVrOiJbcGFzaW50YW5dIGRkZGRbbiBqZV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBvc3QgJXMiLHBhc3Q6ImFudGFcdTAxNmQgJXMiLHM6ImtlbGthaiBzZWt1bmRvaiIsc3M6IiVkIHNla3VuZG9qIixtOiJ1bnUgbWludXRv''@;'; put 'put ''IixtbToiJWQgbWludXRvaiIsaDoidW51IGhvcm8iLGhoOiIlZCBob3JvaiIsZDoidW51IHRhZ28iLGRkOiIlZCB0YWdvaiIsTToidW51IG1vbmF0byIsTU06IiVkIG1vbmF0b2oiLHk6InVudSBqYXJvIix5eToiJWQgamFyb2oifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9YS8s''@;'; put 'put ''b3JkaW5hbDoiJWRhIix3ZWVrOntkb3c6MSxkb3k6N319KX0oaCg5NzU4NikpfSw0MTgwNShmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7dmFyIGM9ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuIi5zcGxpdCgiXyIp''@;'; put 'put ''LHM9ImVuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljIi5zcGxpdCgiXyIpLEE9Wy9eZW5lL2ksL15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9pLC9eb2N0L2ksL15ub3YvaSwvXmRpYy9pXSx2''@;'; put 'put ''PS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5v''@;'; put 'put ''dlwuP3xkaWNcLj8pL2k7eS5kZWZpbmVMb2NhbGUoImVzLWRvIix7bW9udGhzOiJlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0''@;'; put 'put ''aW9uKHcsUyl7cmV0dXJuIHc/Ly1NTU0tLy50ZXN0KFMpP3Nbdy5tb250aCgpXTpjW3cubW9udGgoKV06Y30sbW9udGhzUmVnZXg6dixtb250aHNTaG9ydFJlZ2V4OnYsbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0''@;'; put 'put ''b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pLG1vbnRoc1Bh''@;'; put 'put ''cnNlOkEsbG9uZ01vbnRoc1BhcnNlOkEsc2hvcnRNb250aHNQYXJzZTpBLHdlZWtkYXlzOiJkb21pbmdvX2x1bmVzX21hcnRlc19taVx4ZTlyY29sZXNfanVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21pXHhlOS5fanVl''@;'; put 'put ''Ll92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21pX2p1X3ZpX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIFtk''@;'; put 'put ''ZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMi''@;'; put 'put ''OiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhmMWFuYSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxh''@;'; put 'put ''c3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxzYW1lRWxzZToi''@;'; put 'put ''TCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIlZCBkXHhl''@;'; put 'put ''ZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFceGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19''@;'; put 'put ''KX0oaCg5NzU4NikpfSw4MzQ0NShmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7dmFyIGM9ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuIi5zcGxpdCgiXyIpLHM9ImVuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9h''@;'; put 'put ''Z29fc2VwX29jdF9ub3ZfZGljIi5zcGxpdCgiXyIpLEE9Wy9eZW5lL2ksL15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9pLC9eb2N0L2ksL15ub3YvaSwvXmRpYy9pXSx2PS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5''@;'; put 'put ''b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2k7eS5kZWZpbmVMb2NhbGUoImVz''@;'; put 'put ''LW14Iix7bW9udGhzOiJlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKHcsUyl7cmV0dXJuIHc/Ly1NTU0tLy50ZXN0KFMp''@;'; put 'put ''P3Nbdy5tb250aCgpXTpjW3cubW9udGgoKV06Y30sbW9udGhzUmVnZXg6dixtb250aHNTaG9ydFJlZ2V4OnYsbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRp''@;'; put 'put ''Y2llbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pLG1vbnRoc1BhcnNlOkEsbG9uZ01vbnRoc1BhcnNlOkEsc2hvcnRNb250''@;'; put 'put ''aHNQYXJzZTpBLHdlZWtkYXlzOiJkb21pbmdvX2x1bmVzX21hcnRlc19taVx4ZTlyY29sZXNfanVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21pXHhlOS5fanVlLl92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXNNaW46ImRvX2x1X21hX21pX2p1X3ZpX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBb''@;'; put 'put ''ZGVdIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG95IGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltt''@;'; put 'put ''YVx4ZjFhbmEgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09''@;'; put 'put ''dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6Imhh''@;'; put 'put ''Y2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsdzoidW5hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVu''@;'; put 'put ''IG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhXHhmMW8iLHl5OiIlZCBhXHhmMW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjAsZG95OjR9LGludmFsaWREYXRlOiJGZWNoYSBpbnZceGUxbGlkYSJ9KX0oaCg5NzU4''@;'; put 'put ''NikpfSw4MTUxNihmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7dmFyIGM9ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuIi5zcGxpdCgiXyIpLHM9ImVuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29j''@;'; put 'put ''dF9ub3ZfZGljIi5zcGxpdCgiXyIpLEE9Wy9eZW5lL2ksL15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9pLC9eb2N0L2ksL15ub3YvaSwvXmRpYy9pXSx2PS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xq''@;'; put 'put ''dWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2k7eS5kZWZpbmVMb2NhbGUoImVzLXVzIix7bW9u''@;'; put 'put ''dGhzOiJlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKHcsUyl7cmV0dXJuIHc/Ly1NTU0tLy50ZXN0KFMpP3Nbdy5tb250''@;'; put 'put ''aCgpXTpjW3cubW9udGgoKV06Y30sbW9udGhzUmVnZXg6dixtb250aHNTaG9ydFJlZ2V4OnYsbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkv''@;'; put 'put ''aSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pLG1vbnRoc1BhcnNlOkEsbG9uZ01vbnRoc1BhcnNlOkEsc2hvcnRNb250aHNQYXJzZTpB''@;'; put 'put ''LHdlZWtkYXlzOiJkb21pbmdvX2x1bmVzX21hcnRlc19taVx4ZTlyY29sZXNfanVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21pXHhlOS5fanVlLl92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRv''@;'; put 'put ''X2x1X21hX21pX2p1X3ZpX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6Ik1NL0REL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZ''@;'; put 'put ''WVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21h''@;'; put 'put ''XHhmMWFuYSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10''@;'; put 'put ''aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFj''@;'; put 'put ''ZSAlcyIsczoidW5vcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIlZCBkXHhlZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4g''@;'; put 'put ''bWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFceGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MCxkb3k6Nn19KX0oaCg5NzU4NikpfSw0NjY3OShmZSxqLGgpeyFmdW5jdGlvbih5KXsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIGM9ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuIi5zcGxpdCgiXyIpLHM9ImVuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljIi5zcGxpdCgiXyIpLEE9Wy9eZW5lL2ks''@;'; put 'put ''L15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9pLC9eb2N0L2ksL15ub3YvaSwvXmRpYy9pXSx2PS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5v''@;'; put 'put ''dmllbWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2k7eS5kZWZpbmVMb2NhbGUoImVzIix7bW9udGhzOiJlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9f''@;'; put 'put ''anVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKHcsUyl7cmV0dXJuIHc/Ly1NTU0tLy50ZXN0KFMpP3Nbdy5tb250aCgpXTpjW3cubW9udGgoKV06Y30sbW9udGhzUmVnZXg6dixt''@;'; put 'put ''b250aHNTaG9ydFJlZ2V4OnYsbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVwuP3xm''@;'; put 'put ''ZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pLG1vbnRoc1BhcnNlOkEsbG9uZ01vbnRoc1BhcnNlOkEsc2hvcnRNb250aHNQYXJzZTpBLHdlZWtkYXlzOiJkb21pbmdvX2x1bmVzX21hcnRlc19taVx4''@;'; put 'put ''ZTlyY29sZXNfanVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21pXHhlOS5fanVlLl92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21pX2p1X3ZpX3NceGUxIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZ''@;'; put 'put ''WVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG95IGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4ZjFhbmEgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBM''@;'; put 'put ''VCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToi''@;'; put 'put ''dW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsdzoidW5hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhXHhmMW8iLHl5OiIlZCBhXHhm''@;'; put 'put ''MW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9LGludmFsaWREYXRlOiJGZWNoYSBpbnZceGUxbGlkYSJ9KX0oaCg5NzU4NikpfSw4ODE1MChmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7''@;'; put 'put ''ZnVuY3Rpb24gYyhBLHYsQyx3KXt2YXIgUz17czpbIm1ceGY1bmUgc2VrdW5kaSIsIm1ceGY1bmkgc2VrdW5kIiwicGFhciBzZWt1bmRpdCJdLHNzOltBKyJzZWt1bmRpIixBKyJzZWt1bmRpdCJdLG06WyJceGZjaGUgbWludXRpIiwiXHhmY2tzIG1pbnV0Il0sbW06W0ErIiBtaW51dGkiLEEr''@;'; put 'put ''IiBtaW51dGl0Il0saDpbIlx4ZmNoZSB0dW5uaSIsInR1bmQgYWVnYSIsIlx4ZmNrcyB0dW5kIl0saGg6W0ErIiB0dW5uaSIsQSsiIHR1bmRpIl0sZDpbIlx4ZmNoZSBwXHhlNGV2YSIsIlx4ZmNrcyBwXHhlNGV2Il0sTTpbImt1dSBhamEiLCJrdXUgYWVnYSIsIlx4ZmNrcyBrdXUiXSxNTTpb''@;'; put 'put ''QSsiIGt1dSIsQSsiIGt1dWQiXSx5OlsiXHhmY2hlIGFhc3RhIiwiYWFzdGEiLCJceGZja3MgYWFzdGEiXSx5eTpbQSsiIGFhc3RhIixBKyIgYWFzdGF0Il19O3JldHVybiB2P1NbQ11bMl0/U1tDXVsyXTpTW0NdWzFdOnc/U1tDXVswXTpTW0NdWzFdfXkuZGVmaW5lTG9jYWxlKCJldCIse21v''@;'; put 'put ''bnRoczoiamFhbnVhcl92ZWVicnVhcl9tXHhlNHJ0c19hcHJpbGxfbWFpX2p1dW5pX2p1dWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b29iZXJfbm92ZW1iZXJfZGV0c2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYWFuX3ZlZWJyX21ceGU0cnRzX2Fwcl9tYWlfanV1bmlfanV1bGlf''@;'; put 'put ''YXVnX3NlcHRfb2t0X25vdl9kZXRzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJwXHhmY2hhcFx4ZTRldl9lc21hc3BceGU0ZXZfdGVpc2lwXHhlNGV2X2tvbG1hcFx4ZTRldl9uZWxqYXBceGU0ZXZfcmVlZGVfbGF1cFx4ZTRldiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJQX0VfVF9LX05f''@;'; put 'put ''Ul9MIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJQX0VfVF9LX05fUl9MIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBE''@;'; put 'put ''LiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVFx4ZTRuYSxdIExUIixuZXh0RGF5OiJbSG9tbWUsXSBMVCIsbmV4dFdlZWs6IltKXHhlNHJnbWluZV0gZGRkZCBMVCIsbGFzdERheToiW0VpbGUsXSBMVCIsbGFzdFdlZWs6IltFZWxtaW5lXSBkZGRkIExUIixzYW1lRWxz''@;'; put 'put ''ZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBwXHhlNHJhc3QiLHBhc3Q6IiVzIHRhZ2FzaSIsczpjLHNzOmMsbTpjLG1tOmMsaDpjLGhoOmMsZDpjLGRkOiIlZCBwXHhlNGV2YSIsTTpjLE1NOmMseTpjLHl5OmN9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3Jk''@;'; put 'put ''aW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oaCg5NzU4NikpfSw4MDc1NyhmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5kZWZpbmVMb2NhbGUoImV1Iix7bW9udGhzOiJ1cnRhcnJpbGFfb3RzYWlsYV9tYXJ0eG9hX2FwaXJpbGFfbWFpYXR6YV9la2FpbmFfdXp0''@;'; put 'put ''YWlsYV9hYnV6dHVhX2lyYWlsYV91cnJpYV9hemFyb2FfYWJlbmR1YSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoidXJ0Ll9vdHMuX21hci5fYXBpLl9tYWkuX2VrYS5fdXp0Ll9hYnUuX2lyYS5fdXJyLl9hemEuX2FiZS4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5''@;'; put 'put ''czoiaWdhbmRlYV9hc3RlbGVoZW5hX2FzdGVhcnRlYV9hc3RlYXprZW5hX29zdGVndW5hX29zdGlyYWxhX2xhcnVuYmF0YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJpZy5fYWwuX2FyLl9hei5fb2cuX29sLl9sci4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImlnX2FsX2FyX2F6X29n''@;'; put 'put ''X29sX2xyIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWVtrb10gTU1NTVtyZW5dIERbYV0iLExMTDoiWVlZWVtrb10gTU1NTVtyZW5dIERbYV0gSEg6bW0iLExM''@;'; put 'put ''TEw6ImRkZGQsIFlZWVlba29dIE1NTU1bcmVuXSBEW2FdIEhIOm1tIixsOiJZWVlZLU0tRCIsbGw6IllZWVlba29dIE1NTSBEW2FdIixsbGw6IllZWVlba29dIE1NTSBEW2FdIEhIOm1tIixsbGxsOiJkZGQsIFlZWVlba29dIE1NTSBEW2FdIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Iltn''@;'; put 'put ''YXVyXSBMVFtldGFuXSIsbmV4dERheToiW2JpaGFyXSBMVFtldGFuXSIsbmV4dFdlZWs6ImRkZGQgTFRbZXRhbl0iLGxhc3REYXk6IlthdHpvXSBMVFtldGFuXSIsbGFzdFdlZWs6IlthdXJyZWtvXSBkZGRkIExUW2V0YW5dIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIl''@;'; put 'put ''cyBiYXJydSIscGFzdDoiZHVlbGEgJXMiLHM6InNlZ3VuZG8gYmF0enVrIixzczoiJWQgc2VndW5kbyIsbToibWludXR1IGJhdCIsbW06IiVkIG1pbnV0dSIsaDoib3JkdSBiYXQiLGhoOiIlZCBvcmR1IixkOiJlZ3VuIGJhdCIsZGQ6IiVkIGVndW4iLE06ImhpbGFiZXRlIGJhdCIsTU06IiVk''@;'; put 'put ''IGhpbGFiZXRlIix5OiJ1cnRlIGJhdCIseXk6IiVkIHVydGUifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGgoOTc1ODYpKX0sNjU3NDIoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3ZhciBj''@;'; put 'put ''PXsxOiJcdTA2ZjEiLDI6Ilx1MDZmMiIsMzoiXHUwNmYzIiw0OiJcdTA2ZjQiLDU6Ilx1MDZmNSIsNjoiXHUwNmY2Iiw3OiJcdTA2ZjciLDg6Ilx1MDZmOCIsOToiXHUwNmY5IiwwOiJcdTA2ZjAifSxzPXsiXHUwNmYxIjoiMSIsIlx1MDZmMiI6IjIiLCJcdTA2ZjMiOiIzIiwiXHUwNmY0Ijoi''@;'; put 'put ''NCIsIlx1MDZmNSI6IjUiLCJcdTA2ZjYiOiI2IiwiXHUwNmY3IjoiNyIsIlx1MDZmOCI6IjgiLCJcdTA2ZjkiOiI5IiwiXHUwNmYwIjoiMCJ9O3kuZGVmaW5lTG9jYWxlKCJmYSIse21vbnRoczoiXHUwNjk4XHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNmNjXHUwNjQ3X1x1MDY0MVx1MDY0OFx1MDYz''@;'; put 'put ''MVx1MDZjY1x1MDY0N19cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIyXHUwNjQ4XHUwNjMxXHUwNmNjXHUwNjQ0X1x1MDY0NVx1MDY0N19cdTA2OThcdTA2NDhcdTA2MjZcdTA2NDZfXHUwNjk4XHUwNjQ4XHUwNjI2XHUwNmNjXHUwNjQ3X1x1MDYyN1x1MDY0OFx1MDYyYV9cdTA2MzNc''@;'; put 'put ''dTA2N2VcdTA2MmFcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjI3XHUwNmE5XHUwNjJhXHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MzNcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6''@;'; put 'put ''Ilx1MDY5OFx1MDYyN1x1MDY0Nlx1MDY0OFx1MDZjY1x1MDY0N19cdTA2NDFcdTA2NDhcdTA2MzFcdTA2Y2NcdTA2NDdfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyMlx1MDY0OFx1MDYzMVx1MDZjY1x1MDY0NF9cdTA2NDVcdTA2NDdfXHUwNjk4XHUwNjQ4XHUwNjI2XHUwNjQ2X1x1''@;'; put 'put ''MDY5OFx1MDY0OFx1MDYyNlx1MDZjY1x1MDY0N19cdTA2MjdcdTA2NDhcdTA2MmFfXHUwNjMzXHUwNjdlXHUwNjJhXHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyN1x1MDZhOVx1MDYyYVx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJm''@;'; put 'put ''XHUwNjMzXHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2Y2NcdTA2YTlcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJmXHUwNjQ4XHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYzM1x1MDY0N1x1MjAwY1x1MDYzNFx1MDY0Nlx1''@;'; put 'put ''MDYyOFx1MDY0N19cdTA2ODZcdTA2NDdcdTA2MjdcdTA2MzFcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjdlXHUwNjQ2XHUwNjJjXHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYyY1x1MDY0NVx1MDYzOVx1MDY0N19cdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDciLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNmNjXHUwNmE5XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYyZlx1MDY0OFx1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MzNcdTA2NDdcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjg2XHUwNjQ3XHUwNjI3XHUw''@;'; put 'put ''NjMxXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDY3ZVx1MDY0Nlx1MDYyY1x1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2NDdfXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2Y2NfXHUwNjJm''@;'; put 'put ''X1x1MDYzM19cdTA2ODZfXHUwNjdlX1x1MDYyY19cdTA2MzQiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDpt''@;'; put 'put ''bSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2NDJcdTA2MjhcdTA2NDQgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMXxcdTA2MjhcdTA2MzlcdTA2MmYgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMS8saXNQTTpmdW5jdGlv''@;'; put 'put ''bih2KXtyZXR1cm4vXHUwNjI4XHUwNjM5XHUwNjJmIFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzEvLnRlc3Qodil9LG1lcmlkaWVtOmZ1bmN0aW9uKHYsQyx3KXtyZXR1cm4gdjwxMj8iXHUwNjQyXHUwNjI4XHUwNjQ0IFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzEiOiJc''@;'; put 'put ''dTA2MjhcdTA2MzlcdTA2MmYgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ1XHUwNjMxXHUwNjQ4XHUwNjMyIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLG5leHREYXk6IltcdTA2NDFcdTA2MzFcdTA2MmZcdTA2''@;'; put 'put ''MjcgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLGxhc3REYXk6IltcdTA2MmZcdTA2Y2NcdTA2MzFcdTA2NDhcdTA2MzIgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsbGFzdFdlZWs6ImRkZGQg''@;'; put 'put ''W1x1MDY3ZVx1MDZjY1x1MDYzNF0gW1x1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyZlx1MDYzMSAlcyIscGFzdDoiJXMgXHUwNjdlXHUwNmNjXHUwNjM0IixzOiJcdTA2ODZcdTA2NDZcdTA2MmYgXHUwNjJiXHUw''@;'; put 'put ''NjI3XHUwNjQ2XHUwNmNjXHUwNjQ3IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNmNjXHUwNjQ3IixtOiJcdTA2Y2NcdTA2YTkgXHUwNjJmXHUwNjQyXHUwNmNjXHUwNjQyXHUwNjQ3IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNmNjXHUwNjQyXHUwNjQ3IixoOiJcdTA2Y2NcdTA2YTkg''@;'; put 'put ''XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhIixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhIixkOiJcdTA2Y2NcdTA2YTkgXHUwNjMxXHUwNjQ4XHUwNjMyIixkZDoiJWQgXHUwNjMxXHUwNjQ4XHUwNjMyIixNOiJcdTA2Y2NcdTA2YTkgXHUwNjQ1XHUwNjI3XHUwNjQ3IixNTToiJWQg''@;'; put 'put ''XHUwNjQ1XHUwNjI3XHUwNjQ3Iix5OiJcdTA2Y2NcdTA2YTkgXHUwNjMzXHUwNjI3XHUwNjQ0Iix5eToiJWQgXHUwNjMzXHUwNjI3XHUwNjQ0In0scHJlcGFyc2U6ZnVuY3Rpb24odil7cmV0dXJuIHYucmVwbGFjZSgvW1x1MDZmMC1cdTA2ZjldL2csZnVuY3Rpb24oQyl7cmV0dXJuIHNbQ119''@;'; put 'put ''KS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHYpe3JldHVybiB2LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oQyl7cmV0dXJuIGNbQ119KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwNjQ1LyxvcmRp''@;'; put 'put ''bmFsOiIlZFx1MDY0NSIsd2Vlazp7ZG93OjYsZG95OjEyfX0pfShoKDk3NTg2KSl9LDMzOTU4KGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz0ibm9sbGEgeWtzaSBrYWtzaSBrb2xtZSBuZWxqXHhlNCB2aWlzaSBrdXVzaSBzZWl0c2VtXHhlNG4ga2FoZGVrc2FuIHlo''@;'; put 'put ''ZGVrc1x4ZTRuIi5zcGxpdCgiICIpLHM9WyJub2xsYSIsInloZGVuIiwia2FoZGVuIiwia29sbWVuIiwibmVsalx4ZTRuIiwidmlpZGVuIiwia3V1ZGVuIixjWzddLGNbOF0sY1s5XV07ZnVuY3Rpb24gQSh3LFMsTCxSKXt2YXIgeD0iIjtzd2l0Y2goTCl7Y2FzZSJzIjpyZXR1cm4gUj8ibXV1''@;'; put 'put ''dGFtYW4gc2VrdW5uaW4iOiJtdXV0YW1hIHNla3VudGkiO2Nhc2Uic3MiOng9Uj8ic2VrdW5uaW4iOiJzZWt1bnRpYSI7YnJlYWs7Y2FzZSJtIjpyZXR1cm4gUj8ibWludXV0aW4iOiJtaW51dXR0aSI7Y2FzZSJtbSI6eD1SPyJtaW51dXRpbiI6Im1pbnV1dHRpYSI7YnJlYWs7Y2FzZSJoIjpy''@;'; put 'put ''ZXR1cm4gUj8idHVubmluIjoidHVudGkiO2Nhc2UiaGgiOng9Uj8idHVubmluIjoidHVudGlhIjticmVhaztjYXNlImQiOnJldHVybiBSPyJwXHhlNGl2XHhlNG4iOiJwXHhlNGl2XHhlNCI7Y2FzZSJkZCI6eD1SPyJwXHhlNGl2XHhlNG4iOiJwXHhlNGl2XHhlNFx4ZTQiO2JyZWFrO2Nhc2Ui''@;'; put 'put ''TSI6cmV0dXJuIFI/Imt1dWthdWRlbiI6Imt1dWthdXNpIjtjYXNlIk1NIjp4PVI/Imt1dWthdWRlbiI6Imt1dWthdXR0YSI7YnJlYWs7Y2FzZSJ5IjpyZXR1cm4gUj8idnVvZGVuIjoidnVvc2kiO2Nhc2UieXkiOng9Uj8idnVvZGVuIjoidnVvdHRhIn1yZXR1cm4gZnVuY3Rpb24gdih3LFMp''@;'; put 'put ''e3JldHVybiB3PDEwP1M/c1t3XTpjW3ddOnd9KHcsUikrIiAiK3h9eS5kZWZpbmVMb2NhbGUoImZpIix7bW9udGhzOiJ0YW1taWt1dV9oZWxtaWt1dV9tYWFsaXNrdXVfaHVodGlrdXVfdG91a29rdXVfa2VzXHhlNGt1dV9oZWluXHhlNGt1dV9lbG9rdXVfc3l5c2t1dV9sb2tha3V1X21hcnJh''@;'; put 'put ''c2t1dV9qb3VsdWt1dSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoidGFtbWlfaGVsbWlfbWFhbGlzX2h1aHRpX3RvdWtvX2tlc1x4ZTRfaGVpblx4ZTRfZWxvX3N5eXNfbG9rYV9tYXJyYXNfam91bHUiLnNwbGl0KCJfIiksd2Vla2RheXM6InN1bm51bnRhaV9tYWFuYW50YWlfdGlpc3RhaV9r''@;'; put 'put ''ZXNraXZpaWtrb190b3JzdGFpX3BlcmphbnRhaV9sYXVhbnRhaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdV9tYV90aV9rZV90b19wZV9sYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic3VfbWFfdGlfa2VfdG9fcGVfbGEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJI''@;'; put 'put ''SC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQuTU0uWVlZWSIsTEw6IkRvIE1NTU1bdGFdIFlZWVkiLExMTDoiRG8gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW0iLExMTEw6ImRkZGQsIERvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tIixsOiJELk0uWVlZWSIsbGw6IkRvIE1NTSBZWVlZ''@;'; put 'put ''IixsbGw6IkRvIE1NTSBZWVlZLCBba2xvXSBISC5tbSIsbGxsbDoiZGRkLCBEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0ifSxjYWxlbmRhcjp7c2FtZURheToiW3RceGU0blx4ZTRceGU0bl0gW2tsb10gTFQiLG5leHREYXk6IltodW9tZW5uYV0gW2tsb10gTFQiLG5leHRXZWVrOiJkZGRkIFtr''@;'; put 'put ''bG9dIExUIixsYXN0RGF5OiJbZWlsZW5dIFtrbG9dIExUIixsYXN0V2VlazoiW3ZpaW1lXSBkZGRkW25hXSBba2xvXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgcFx4ZTRceGU0c3RceGU0IixwYXN0OiIlcyBzaXR0ZW4iLHM6QSxzczpBLG06QSxtbTpBLGg6''@;'; put 'put ''QSxoaDpBLGQ6QSxkZDpBLE06QSxNTTpBLHk6QSx5eTpBfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGgoOTc1ODYpKX0sNDY3MjAoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5l''@;'; put 'put ''TG9jYWxlKCJmaWwiLHttb250aHM6IkVuZXJvX1BlYnJlcm9fTWFyc29fQWJyaWxfTWF5b19IdW55b19IdWx5b19BZ29zdG9fU2V0eWVtYnJlX09rdHVicmVfTm9ieWVtYnJlX0Rpc3llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiRW5lX1BlYl9NYXJfQWJyX01heV9IdW5fSHVsX0Fn''@;'; put 'put ''b19TZXRfT2t0X05vYl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ikxpbmdnb19MdW5lc19NYXJ0ZXNfTWl5ZXJrdWxlc19IdXdlYmVzX0JpeWVybmVzX1NhYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJMaW5fTHVuX01hcl9NaXlfSHV3X0JpeV9TYWIiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNNaW46IkxpX0x1X01hX01pX0h1X0JpX1NhYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJNTS9EL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBNTU1NIERELCBZ''@;'; put 'put ''WVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IkxUIFtuZ2F5b25nIGFyYXddIixuZXh0RGF5OiJbQnVrYXMgbmddIExUIixuZXh0V2VlazoiTFQgW3NhIHN1c3Vub2QgbmFdIGRkZGQiLGxhc3REYXk6IkxUIFtrYWhhcG9uXSIsbGFzdFdlZWs6IkxUIFtub29uZyBuYWthcmFhbmddIGRk''@;'; put 'put ''ZGQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InNhIGxvb2IgbmcgJXMiLHBhc3Q6IiVzIGFuZyBuYWthbGlwYXMiLHM6ImlsYW5nIHNlZ3VuZG8iLHNzOiIlZCBzZWd1bmRvIixtOiJpc2FuZyBtaW51dG8iLG1tOiIlZCBtaW51dG8iLGg6ImlzYW5nIG9yYXMiLGhoOiIl''@;'; put 'put ''ZCBvcmFzIixkOiJpc2FuZyBhcmF3IixkZDoiJWQgYXJhdyIsTToiaXNhbmcgYnV3YW4iLE1NOiIlZCBidXdhbiIseToiaXNhbmcgdGFvbiIseXk6IiVkIHRhb24ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxvcmRpbmFsOmZ1bmN0aW9uKHMpe3JldHVybiBzfSx3ZWVrOntk''@;'; put 'put ''b3c6MSxkb3k6NH19KX0oaCg5NzU4NikpfSw5ODM1MihmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5kZWZpbmVMb2NhbGUoImZvIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJzX2Fwclx4ZWRsX21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25v''@;'; put 'put ''dmVtYmVyX2Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic3VubnVkYWd1cl9tXHhlMW5hZGFndXJfdFx4ZmRzZGFndXJfbWlrdWRhZ3VyX2hceGYzc2Rh''@;'; put 'put ''Z3VyX2ZyXHhlZGdnamFkYWd1cl9sZXlnYXJkYWd1ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdW5fbVx4ZTFuX3RceGZkc19taWtfaFx4ZjNzX2ZyXHhlZF9sZXkiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InN1X21ceGUxX3RceGZkX21pX2hceGYzX2ZyX2xlIi5zcGxpdCgiXyIp''@;'; put 'put ''LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBELiBNTU1NLCBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltceGNkIGRhZyBrbC5d''@;'; put 'put ''IExUIixuZXh0RGF5OiJbXHhjZCBtb3JnaW4ga2wuXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsLl0gTFQiLGxhc3REYXk6IltceGNkIGdqXHhlMXIga2wuXSBMVCIsbGFzdFdlZWs6IltzXHhlZFx4ZjBzdHVdIGRkZGQgW2tsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVy''@;'; put 'put ''ZToidW0gJXMiLHBhc3Q6IiVzIHNceGVkXHhmMGFuaSIsczoiZlx4ZTEgc2VrdW5kIixzczoiJWQgc2VrdW5kaXIiLG06ImVpbiBtaW51dHR1ciIsbW06IiVkIG1pbnV0dGlyIixoOiJlaW4gdFx4ZWRtaSIsaGg6IiVkIHRceGVkbWFyIixkOiJlaW4gZGFndXIiLGRkOiIlZCBkYWdhciIsTToi''@;'; put 'put ''ZWluIG1ceGUxbmFceGYwdXIiLE1NOiIlZCBtXHhlMW5hXHhmMGlyIix5OiJlaXR0IFx4ZTFyIix5eToiJWQgXHhlMXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGgoOTc1ODYpKX0sNDIwOTYoZmUsaixo''@;'; put 'put ''KXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJmci1jYSIse21vbnRoczoiamFudmllcl9mXHhlOXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb1x4ZmJ0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2RceGU5Y2VtYnJlIi5zcGxpdCgiXyIp''@;'; put 'put ''LG1vbnRoc1Nob3J0OiJqYW52Ll9mXHhlOXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW9ceGZidF9zZXB0Ll9vY3QuX25vdi5fZFx4ZTljLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92''@;'; put 'put ''ZW5kcmVkaV9zYW1lZGkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGlfbHVfbWFfbWVfamVfdmVfc2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRl''@;'; put 'put ''Rm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQXVqb3VyZFx1MjAxOWh1aSBceGUwXSBM''@;'; put 'put ''VCIsbmV4dERheToiW0RlbWFpbiBceGUwXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBdIExUIixsYXN0RGF5OiJbSGllciBceGUwXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2Rlcm5pZXIgXHhlMF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbnMgJXMiLHBhc3Q6''@;'; put 'put ''ImlsIHkgYSAlcyIsczoicXVlbHF1ZXMgc2Vjb25kZXMiLHNzOiIlZCBzZWNvbmRlcyIsbToidW5lIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6InVuZSBoZXVyZSIsaGg6IiVkIGhldXJlcyIsZDoidW4gam91ciIsZGQ6IiVkIGpvdXJzIixNOiJ1biBtb2lzIixNTToiJWQgbW9pcyIseToi''@;'; put 'put ''dW4gYW4iLHl5OiIlZCBhbnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGVyfGUpLyxvcmRpbmFsOmZ1bmN0aW9uKHMsQSl7c3dpdGNoKEEpe2RlZmF1bHQ6Y2FzZSJNIjpjYXNlIlEiOmNhc2UiRCI6Y2FzZSJEREQiOmNhc2UiZCI6cmV0dXJuIHMrKDE9PT1zPyJlciI6ImUi''@;'; put 'put ''KTtjYXNlInciOmNhc2UiVyI6cmV0dXJuIHMrKDE9PT1zPyJyZSI6ImUiKX19fSl9KGgoOTc1ODYpKX0sOTU3NTkoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJmci1jaCIse21vbnRoczoiamFudmllcl9mXHhlOXZyaWVyX21hcnNfYXZyaWxfbWFp''@;'; put 'put ''X2p1aW5fanVpbGxldF9hb1x4ZmJ0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2RceGU5Y2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW52Ll9mXHhlOXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW9ceGZidF9zZXB0Ll9vY3QuX25vdi5fZFx4ZTljLiIuc3BsaXQo''@;'; put 'put ''Il8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLiIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c01pbjoiZGlfbHVfbWFfbWVfamVfdmVfc2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExM''@;'; put 'put ''TDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQXVqb3VyZFx1MjAxOWh1aSBceGUwXSBMVCIsbmV4dERheToiW0RlbWFpbiBceGUwXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBdIExUIixsYXN0RGF5OiJbSGllciBceGUwXSBMVCIsbGFzdFdlZWs6ImRk''@;'; put 'put ''ZGQgW2Rlcm5pZXIgXHhlMF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbnMgJXMiLHBhc3Q6ImlsIHkgYSAlcyIsczoicXVlbHF1ZXMgc2Vjb25kZXMiLHNzOiIlZCBzZWNvbmRlcyIsbToidW5lIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6InVuZSBoZXVy''@;'; put 'put ''ZSIsaGg6IiVkIGhldXJlcyIsZDoidW4gam91ciIsZGQ6IiVkIGpvdXJzIixNOiJ1biBtb2lzIixNTToiJWQgbW9pcyIseToidW4gYW4iLHl5OiIlZCBhbnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGVyfGUpLyxvcmRpbmFsOmZ1bmN0aW9uKHMsQSl7c3dpdGNoKEEpe2Rl''@;'; put 'put ''ZmF1bHQ6Y2FzZSJNIjpjYXNlIlEiOmNhc2UiRCI6Y2FzZSJEREQiOmNhc2UiZCI6cmV0dXJuIHMrKDE9PT1zPyJlciI6ImUiKTtjYXNlInciOmNhc2UiVyI6cmV0dXJuIHMrKDE9PT1zPyJyZSI6ImUiKX19LHdlZWs6e2RvdzoxLGRveTo0fX0pfShoKDk3NTg2KSl9LDQwNTkoZmUsaixoKXsh''@;'; put 'put ''ZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3ZhciBBPS8oamFudlwuP3xmXHhlOXZyXC4/fG1hcnN8YXZyXC4/fG1haXxqdWlufGp1aWxcLj98YW9ceGZidHxzZXB0XC4/fG9jdFwuP3xub3ZcLj98ZFx4ZTljXC4/fGphbnZpZXJ8Zlx4ZTl2cmllcnxtYXJzfGF2cmlsfG1haXxqdWlufGp1aWxs''@;'; put 'put ''ZXR8YW9ceGZidHxzZXB0ZW1icmV8b2N0b2JyZXxub3ZlbWJyZXxkXHhlOWNlbWJyZSkvaSx2PVsvXmphbnYvaSwvXmZceGU5dnIvaSwvXm1hcnMvaSwvXmF2ci9pLC9ebWFpL2ksL15qdWluL2ksL15qdWlsL2ksL15hb1x4ZmJ0L2ksL15zZXB0L2ksL15vY3QvaSwvXm5vdi9pLC9eZFx4ZTlj''@;'; put 'put ''L2ldO3kuZGVmaW5lTG9jYWxlKCJmciIse21vbnRoczoiamFudmllcl9mXHhlOXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb1x4ZmJ0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2RceGU5Y2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW52Ll9mXHhlOXZy''@;'; put 'put ''Ll9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW9ceGZidF9zZXB0Ll9vY3QuX25vdi5fZFx4ZTljLiIuc3BsaXQoIl8iKSxtb250aHNSZWdleDpBLG1vbnRoc1Nob3J0UmVnZXg6QSxtb250aHNTdHJpY3RSZWdleDovXihqYW52aWVyfGZceGU5dnJpZXJ8bWFyc3xhdnJpbHxtYWl8anVpbnxq''@;'; put 'put ''dWlsbGV0fGFvXHhmYnR8c2VwdGVtYnJlfG9jdG9icmV8bm92ZW1icmV8ZFx4ZTljZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovKGphbnZcLj98Zlx4ZTl2clwuP3xtYXJzfGF2clwuP3xtYWl8anVpbnxqdWlsXC4/fGFvXHhmYnR8c2VwdFwuP3xvY3RcLj98bm92XC4/fGRceGU5''@;'; put 'put ''Y1wuPykvaSxtb250aHNQYXJzZTp2LGxvbmdNb250aHNQYXJzZTp2LHNob3J0TW9udGhzUGFyc2U6dix3ZWVrZGF5czoiZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRpbS5fbHVuLl9tYXIuX21l''@;'; put 'put ''ci5famV1Ll92ZW4uX3NhbS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21lX2plX3ZlX3NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1N''@;'; put 'put ''IFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0F1am91cmRcdTIwMTlodWkgXHhlMF0gTFQiLG5leHREYXk6IltEZW1haW4gXHhlMF0gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUwXSBMVCIsbGFz''@;'; put 'put ''dERheToiW0hpZXIgXHhlMF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkZXJuaWVyIFx4ZTBdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYW5zICVzIixwYXN0OiJpbCB5IGEgJXMiLHM6InF1ZWxxdWVzIHNlY29uZGVzIixzczoiJWQgc2Vjb25kZXMiLG06InVuZSBt''@;'; put 'put ''aW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJ1bmUgaGV1cmUiLGhoOiIlZCBoZXVyZXMiLGQ6InVuIGpvdXIiLGRkOiIlZCBqb3VycyIsdzoidW5lIHNlbWFpbmUiLHd3OiIlZCBzZW1haW5lcyIsTToidW4gbW9pcyIsTU06IiVkIG1vaXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZN''@;'; put 'put ''b250aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcnwpLyxvcmRpbmFsOmZ1bmN0aW9uKHcsUyl7c3dpdGNoKFMpe2Nhc2UiRCI6cmV0dXJuIHcrKDE9PT13PyJlciI6IiIpO2RlZmF1bHQ6Y2FzZSJNIjpjYXNlIlEiOmNhc2UiREREIjpjYXNlImQiOnJldHVybiB3KygxPT09dz8iZXIiOiJlIik7''@;'; put 'put ''Y2FzZSJ3IjpjYXNlIlciOnJldHVybiB3KygxPT09dz8icmUiOiJlIil9fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oaCg5NzU4NikpfSwxNTk1OChmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7dmFyIGM9Imphbi5fZmViLl9tcnQuX2Fwci5fbWFpX2p1bi5fanVsLl9hdWcuX3Nl''@;'; put 'put ''cC5fb2t0Ll9ub3YuX2Rlcy4iLnNwbGl0KCJfIikscz0iamFuX2ZlYl9tcnRfYXByX21haV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZXMiLnNwbGl0KCJfIik7eS5kZWZpbmVMb2NhbGUoImZ5Iix7bW9udGhzOiJqYW5uZXdhcmlzX2ZlYnJld2FyaXNfbWFhcnRfYXByaWxfbWFhaWVfanVu''@;'; put 'put ''eV9qdWx5X2F1Z3VzdHVzX3NlcHRpbWJlcl9va3RvYmVyX25vdmltYmVyX2Rlc2ltYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKHYsQyl7cmV0dXJuIHY/Ly1NTU0tLy50ZXN0KEMpP3Nbdi5tb250aCgpXTpjW3YubW9udGgoKV06Y30sbW9udGhzUGFyc2VFeGFjdDohMCx3''@;'; put 'put ''ZWVrZGF5czoic25laW5fbW9hbmRlaV90aWlzZGVpX3dvYW5zZGVpX3RvbmdlcnNkZWlfZnJlZWRfc25lb24iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic2kuX21vLl90aS5fd28uX3RvLl9mci5fc28uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTaV9Nb19UaV9Xb19Ub19Gcl9TbyIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2Fs''@;'; put 'put ''ZW5kYXI6e3NhbWVEYXk6Iltoam9lZCBvbV0gTFQiLG5leHREYXk6Ilttb2FybiBvbV0gTFQiLG5leHRXZWVrOiJkZGRkIFtvbV0gTFQiLGxhc3REYXk6IltqdXN0ZXIgb21dIExUIixsYXN0V2VlazoiW1x4ZjRmclx4ZmJuZV0gZGRkZCBbb21dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZl''@;'; put 'put ''VGltZTp7ZnV0dXJlOiJvZXIgJXMiLHBhc3Q6IiVzIGx5biIsczoiaW4gcGVhciBzZWtvbmRlbiIsc3M6IiVkIHNla29uZGVuIixtOiJpZW4gbWluXHhmYXQiLG1tOiIlZCBtaW51dGVuIixoOiJpZW4gb2VyZSIsaGg6IiVkIG9lcmVuIixkOiJpZW4gZGVpIixkZDoiJWQgZGFnZW4iLE06Imll''@;'; put 'put ''biBtb2FubmUiLE1NOiIlZCBtb2FubmVuIix5OiJpZW4gamllciIseXk6IiVkIGppZXJyZW4ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24odil7cmV0dXJuIHYrKDE9PT12fHw4PT09dnx8dj49MjA/InN0ZSI6ImRlIil9LHdlZWs6''@;'; put 'put ''e2RvdzoxLGRveTo0fX0pfShoKDk3NTg2KSl9LDk0MTQzKGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt5LmRlZmluZUxvY2FsZSgiZ2EiLHttb250aHM6WyJFYW5ceGUxaXIiLCJGZWFiaHJhIiwiTVx4ZTFydGEiLCJBaWJyZVx4ZTFuIiwiQmVhbHRhaW5lIiwiTWVpdGhlYW1o''@;'; put 'put ''IiwiSVx4ZmFpbCIsIkxceGZhbmFzYSIsIk1lXHhlMW4gRlx4ZjNtaGFpciIsIkRlaXJlYWRoIEZceGYzbWhhaXIiLCJTYW1oYWluIiwiTm9sbGFpZyJdLG1vbnRoc1Nob3J0OlsiRWFuIiwiRmVhYmgiLCJNXHhlMXJ0IiwiQWliIiwiQmVhbCIsIk1laXRoIiwiSVx4ZmFpbCIsIkxceGZhbiIs''@;'; put 'put ''Ik0uRi4iLCJELkYuIiwiU2FtaCIsIk5vbGwiXSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlsiRFx4ZTkgRG9taG5haWdoIiwiRFx4ZTkgTHVhaW4iLCJEXHhlOSBNXHhlMWlydCIsIkRceGU5IENceGU5YWRhb2luIiwiRFx4ZTlhcmRhb2luIiwiRFx4ZTkgaEFvaW5lIiwiRFx4ZTkg''@;'; put 'put ''U2F0aGFpcm4iXSx3ZWVrZGF5c1Nob3J0OlsiRG9taCIsIkx1YW4iLCJNXHhlMWlydCIsIkNceGU5YWQiLCJEXHhlOWFyIiwiQW9pbmUiLCJTYXRoIl0sd2Vla2RheXNNaW46WyJEbyIsIkx1IiwiTVx4ZTEiLCJDXHhlOSIsIkRceGU5IiwiQSIsIlNhIl0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJI''@;'; put 'put ''SDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSW5uaXUgYWddIExUIixuZXh0RGF5OiJbQW1ceGUxcmFjaCBh''@;'; put 'put ''Z10gTFQiLG5leHRXZWVrOiJkZGRkIFthZ10gTFQiLGxhc3REYXk6IltJbm5ceGU5IGFnXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3NlbyBjYWl0ZV0gW2FnXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaSAlcyIscGFzdDoiJXMgXHhmMyBzaGluIixzOiJjXHhmYXBs''@;'; put 'put ''YSBzb2ljaW5kIixzczoiJWQgc29pY2luZCIsbToiblx4ZjNpbVx4ZTlhZCIsbW06IiVkIG5ceGYzaW1ceGU5YWQiLGg6InVhaXIgYW4gY2hsb2lnIixoaDoiJWQgdWFpciBhbiBjaGxvaWciLGQ6ImxceGUxIixkZDoiJWQgbFx4ZTEiLE06Im1ceGVkIixNTToiJWQgbVx4ZWRvbm5hIix5OiJi''@;'; put 'put ''bGlhaW4iLHl5OiIlZCBibGlhaW4ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGR8bmF8bWgpLyxvcmRpbmFsOmZ1bmN0aW9uKFMpe3JldHVybiBTKygxPT09Uz8iZCI6UyUxMD09Mj8ibmEiOiJtaCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oaCg5NzU4NikpfSw2NzAyOChm''@;'; put 'put ''ZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5kZWZpbmVMb2NhbGUoImdkIix7bW9udGhzOlsiQW0gRmFvaWxsZWFjaCIsIkFuIEdlYXJyYW4iLCJBbSBNXHhlMHJ0IiwiQW4gR2libGVhbiIsIkFuIENceGU4aXRlYW4iLCJBbiB0LVx4ZDJnbWhpb3MiLCJBbiB0LUl1Y2hhciIs''@;'; put 'put ''IkFuIExceGY5bmFzdGFsIiwiQW4gdC1TdWx0YWluIiwiQW4gRFx4ZTBtaGFpciIsIkFuIHQtU2FtaGFpbiIsIkFuIERceGY5YmhsYWNoZCJdLG1vbnRoc1Nob3J0OlsiRmFvaSIsIkdlYXIiLCJNXHhlMHJ0IiwiR2libCIsIkNceGU4aXQiLCJceGQyZ21oIiwiSXVjaCIsIkxceGY5biIsIlN1''@;'; put 'put ''bHQiLCJEXHhlMG1oIiwiU2FtaCIsIkRceGY5YmgiXSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlsiRGlkXHhmMm1obmFpY2giLCJEaWx1YWluIiwiRGltXHhlMGlydCIsIkRpY2lhZGFpbiIsIkRpYXJkYW9pbiIsIkRpaGFvaW5lIiwiRGlzYXRoYWlybmUiXSx3ZWVrZGF5c1Nob3J0''@;'; put 'put ''OlsiRGlkIiwiRGlsIiwiRGltIiwiRGljIiwiRGlhIiwiRGloIiwiRGlzIl0sd2Vla2RheXNNaW46WyJEXHhmMiIsIkx1IiwiTVx4ZTAiLCJDaSIsIkFyIiwiSGEiLCJTYSJdLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1N''@;'; put 'put ''TU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0FuLWRpdWdoIGFpZ10gTFQiLG5leHREYXk6IltBLW1ceGUwaXJlYWNoIGFpZ10gTFQiLG5leHRXZWVrOiJkZGRkIFthaWddIExUIixsYXN0''@;'; put 'put ''RGF5OiJbQW4tZFx4ZTggYWlnXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3NlbyBjaGFpZGhdIFthaWddIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJhbm4gYW4gJXMiLHBhc3Q6ImJobyBjaGlvbm4gJXMiLHM6ImJlYWdhbiBkaW9nYW4iLHNzOiIlZCBkaW9nYW4iLG06''@;'; put 'put ''Im1pb25haWQiLG1tOiIlZCBtaW9uYWlkZWFuIixoOiJ1YWlyIixoaDoiJWQgdWFpcmVhbiIsZDoibGF0aGEiLGRkOiIlZCBsYXRoYSIsTToibVx4ZWNvcyIsTU06IiVkIG1ceGVjb3NhbiIseToiYmxpYWRobmEiLHl5OiIlZCBibGlhZGhuYSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xk''@;'; put 'put ''ezEsMn0oZHxuYXxtaCkvLG9yZGluYWw6ZnVuY3Rpb24oUyl7cmV0dXJuIFMrKDE9PT1TPyJkIjpTJTEwPT0yPyJuYSI6Im1oIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShoKDk3NTg2KSl9LDgwNDI4KGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt5LmRlZmluZUxvY2FsZSgi''@;'; put 'put ''Z2wiLHttb250aHM6InhhbmVpcm9fZmVicmVpcm9fbWFyem9fYWJyaWxfbWFpb194dVx4ZjFvX3h1bGxvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlY2VtYnJvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJ4YW4uX2ZlYi5fbWFyLl9hYnIuX21haS5feHVceGYxLl94dWwu''@;'; put 'put ''X2Fnby5fc2V0Ll9vdXQuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkb21pbmdvX2x1bnNfbWFydGVzX21ceGU5cmNvcmVzX3hvdmVzX3ZlbnJlc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5f''@;'; put 'put ''bVx4ZTlyLl94b3YuX3Zlbi5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbVx4ZTlfeG9fdmVfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZ''@;'; put 'put ''IixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3hlICIrKDEhPT10aGlzLmhvdXJzKCk/''@;'; put 'put ''Ilx4ZTFzIjoiXHhlMSIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxXHhlMSAiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6Ilx4ZTEiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgWyIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFz''@;'; put 'put ''IjoiYSIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbb250ZSAiKygxIT09dGhpcy5ob3VycygpPyJceGUxIjoiYSIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW29dIGRkZGQgW3Bhc2FkbyAiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6ImEiKSsi''@;'; put 'put ''XSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24ocyl7cmV0dXJuIDA9PT1zLmluZGV4T2YoInVuIik/Im4iK3M6ImVuICIrc30scGFzdDoiaGFpICVzIixzOiJ1bnMgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQg''@;'; put 'put ''bWludXRvcyIsaDoidW5oYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhbm8iLHl5OiIlZCBhbm9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVk''@;'; put 'put ''XHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGgoOTc1ODYpKX0sNzY4NjEoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoQSx2LEMsdyl7dmFyIFM9e3M6WyJcdTA5MjVcdTA5NGJcdTA5MjFcdTA5MmZcdTA5M2UgXHUwOTM4XHUwOTQ1XHUwOTE1XHUwOTAy''@;'; put 'put ''XHUwOTIxXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIiwiXHUwOTI1XHUwOTRiXHUwOTIxXHUwOTQ3IFx1MDkzOFx1MDk0NVx1MDkxNVx1MDkwMlx1MDkyMSJdLHNzOltBKyIgXHUwOTM4XHUwOTQ1XHUwOTE1XHUwOTAyXHUwOTIxXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixBKyIgXHUwOTM4''@;'; put 'put ''XHUwOTQ1XHUwOTE1XHUwOTAyXHUwOTIxIl0sbTpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5M2ZcdTA5MjNcdTA5MWZcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTQyXHUwOTFmIl0sbW06W0ErIiBcdTA5MmVcdTA5M2ZcdTA5MjNcdTA5''@;'; put 'put ''MWZcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLEErIiBcdTA5MmVcdTA5M2ZcdTA5MjNcdTA5MWZcdTA5M2VcdTA5MDIiXSxoOlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkzNVx1MDkzMFx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MzVcdTA5MzAiXSxoaDpbQSsiIFx1MDkzNVx1''@;'; put 'put ''MDkzMFx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsQSsiIFx1MDkzNVx1MDkzMFx1MDkzZVx1MDkwMiJdLGQ6WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTNlXHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDk0MFx1MDkzOCJdLGRkOltBKyIgXHUwOTI2''@;'; put 'put ''XHUwOTNmXHUwOTM4XHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixBKyIgXHUwOTI2XHUwOTQwXHUwOTM4Il0sTTpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTJlXHUw''@;'; put 'put ''OTRkXHUwOTM5XHUwOTJmXHUwOTI4XHUwOTRiIl0sTU06W0ErIiBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2VcdTA5MjhcdTA5NDAiLEErIiBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NDciXSx5OlsiXHUwOTBmXHUwOTE1XHUwOTNl''@;'; put 'put ''IFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzOFx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzgiXSx5eTpbQSsiIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzOFx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsQSsiIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkz''@;'; put 'put ''OFx1MDkzZVx1MDkwMiJdfTtyZXR1cm4gdz9TW0NdWzBdOlNbQ11bMV19eS5kZWZpbmVMb2NhbGUoImdvbS1kZXZhIix7bW9udGhzOntzdGFuZGFsb25lOiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDdcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUw''@;'; put 'put ''OTMwXHUwOTQxXHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDBcdTA5MzJfXHUwOTJlXHUwOTQ3X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5MmZfXHUwOTEx''@;'; put 'put ''XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTFmX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyXHUwOTJj''@;'; put 'put ''XHUwOTMwX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKSxmb3JtYXQ6Ilx1MDkxY1x1MDkzZVx1MDkyOFx1MDk0N1x1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MFx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5''@;'; put 'put ''NGRcdTA5MzBcdTA5NDFcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkwZlx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0MFx1MDkzMlx1MDkz''@;'; put 'put ''ZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MmVcdTA5NDdcdTA5MmZcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTFjXHUwOTQyXHUwOTI4XHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkyZlx1MDkzZVx1MDkxYVx1MDk0''@;'; put 'put ''ZFx1MDkyZlx1MDkzZV9cdTA5MTFcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MWZcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTM4XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkxMVx1MDkx''@;'; put 'put ''NVx1MDk0ZFx1MDkxZlx1MDk0Ylx1MDkyY1x1MDkzMFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTIxXHUwOTNmXHUwOTM4''@;'; put 'put ''XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9NTU1NKFxzKStEW29EXT8vfSxtb250aHNTaG9ydDoiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3Ll9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBc''@;'; put 'put ''dTA5NDEuX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDAuX1x1MDkyZVx1MDk0N19cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyLl9cdTA5MTFcdTA5MTcuX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0''@;'; put 'put ''N1x1MDkwMi5fXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiLl9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdcdTA5MDIuX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMi4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwOTA2''@;'; put 'put ''XHUwOTJmXHUwOTI0XHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0Ylx1MDkyZVx1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzNcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTQxXHUwOTI3XHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkyY1x1MDkzZlx1MDkzMFx1MDk0N1x1MDkzOFx1MDk0''@;'; put 'put ''ZFx1MDkyNFx1MDkzZVx1MDkzMF9cdTA5MzhcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTQ3XHUwOTI4XHUwOTM1XHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDkwNlx1MDkyZlx1MDkyNC5fXHUwOTM4XHUwOTRiXHUwOTJl''@;'; put 'put ''Ll9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzMuX1x1MDkyY1x1MDk0MVx1MDkyNy5fXHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQ3XHUwOTM4XHUwOTRkXHUwOTI0Ll9cdTA5MzhcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzAuX1x1MDkzNlx1MDk0N1x1MDkyOC4iLnNwbGl0KCJfIiksd2Vla2RheXNN''@;'; put 'put ''aW46Ilx1MDkwNl9cdTA5MzhcdTA5NGJfXHUwOTJlXHUwOTAyX1x1MDkyY1x1MDk0MV9cdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDdfXHUwOTM4XHUwOTQxX1x1MDkzNlx1MDk0NyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gW1x1''@;'; put 'put ''MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0iLExUUzoiQSBoOm1tOnNzIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgQSBoOm1tIFtcdTA5MzVcdTA5M2VcdTA5''@;'; put 'put ''MWNcdTA5MjRcdTA5M2VcdTA5MDJdIixMTExMOiJkZGRkLCBNTU1NIERvLCBZWVlZLCBBIGg6bW0gW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0iLGxsbGw6ImRkZCwgRCBNTU0gWVlZWSwgQSBoOm1tIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJd''@;'; put 'put ''In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5MDZcdTA5MmZcdTA5MWNdIExUIixuZXh0RGF5OiJbXHUwOTJiXHUwOTNlXHUwOTMyXHUwOTRkXHUwOTJmXHUwOTNlXHUwOTAyXSBMVCIsbmV4dFdlZWs6IltcdTA5MmJcdTA5NDFcdTA5MjFcdTA5MzJcdTA5NGJdIGRkZGRbLF0gTFQiLGxhc3RE''@;'; put 'put ''YXk6IltcdTA5MTVcdTA5M2VcdTA5MzJdIExUIixsYXN0V2VlazoiW1x1MDkyYlx1MDkzZVx1MDkxZlx1MDkzMlx1MDk0Yl0gZGRkZFssXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMiLHBhc3Q6IiVzIFx1MDkwNlx1MDkyNlx1MDk0MFx1MDkwMiIsczpjLHNz''@;'; put 'put ''OmMsbTpjLG1tOmMsaDpjLGhoOmMsZDpjLGRkOmMsTTpjLE1NOmMseTpjLHl5OmN9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHUwOTM1XHUwOTQ3XHUwOTMwKS8sb3JkaW5hbDpmdW5jdGlvbihBLHYpe3JldHVybiJEIj09PXY/QSsiXHUwOTM1XHUwOTQ3XHUwOTMwIjpBfSx3''@;'; put 'put ''ZWVrOntkb3c6MCxkb3k6M30sbWVyaWRpZW1QYXJzZTovXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwfFx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MFx1MDkwMnxcdTA5MjZcdTA5MjhcdTA5MmFcdTA5M2VcdTA5MzBcdTA5M2VcdTA5MDJ8XHUwOTM4XHUwOTNlXHUwOTAyXHUwOTFjXHUw''@;'; put 'put ''OTQ3LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oQSx2KXtyZXR1cm4gMTI9PT1BJiYoQT0wKSwiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwIj09PXY/QTw0P0E6QSsxMjoiXHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwXHUwOTAyIj09PXY/QToiXHUwOTI2XHUwOTI4XHUwOTJhXHUwOTNl''@;'; put 'put ''XHUwOTMwXHUwOTNlXHUwOTAyIj09PXY/QT4xMj9BOkErMTI6Ilx1MDkzOFx1MDkzZVx1MDkwMlx1MDkxY1x1MDk0NyI9PT12P0ErMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihBLHYsQyl7cmV0dXJuIEE8ND8iXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwIjpBPDEyPyJcdTA5MzhcdTA5''@;'; put 'put ''MTVcdTA5M2VcdTA5MzNcdTA5NDBcdTA5MDIiOkE8MTY/Ilx1MDkyNlx1MDkyOFx1MDkyYVx1MDkzZVx1MDkzMFx1MDkzZVx1MDkwMiI6QTwyMD8iXHUwOTM4XHUwOTNlXHUwOTAyXHUwOTFjXHUwOTQ3IjoiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwIn19KX0oaCg5NzU4NikpfSw1NzcxOChm''@;'; put 'put ''ZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyhBLHYsQyx3KXt2YXIgUz17czpbInRob2RkZWEgc2Vrb25kYW1uaSIsInRob2RkZSBzZWtvbmQiXSxzczpbQSsiIHNla29uZGFtbmkiLEErIiBzZWtvbmQiXSxtOlsiZWthIG1pbnRhbiIsImVrIG1pbnV0Il0sbW06''@;'; put 'put ''W0ErIiBtaW50YW1uaSIsQSsiIG1pbnRhbSJdLGg6WyJla2Egdm9yYW4iLCJlayB2b3IiXSxoaDpbQSsiIHZvcmFtbmkiLEErIiB2b3JhbSJdLGQ6WyJla2EgZGlzYW4iLCJlayBkaXMiXSxkZDpbQSsiIGRpc2FtbmkiLEErIiBkaXMiXSxNOlsiZWthIG1ob2luZWFuIiwiZWsgbWhvaW5vIl0s''@;'; put 'put ''TU06W0ErIiBtaG9pbmVhbW5pIixBKyIgbWhvaW5lIl0seTpbImVrYSB2b3JzYW4iLCJlayB2b3JvcyJdLHl5OltBKyIgdm9yc2FtbmkiLEErIiB2b3JzYW0iXX07cmV0dXJuIHc/U1tDXVswXTpTW0NdWzFdfXkuZGVmaW5lTG9jYWxlKCJnb20tbGF0biIse21vbnRoczp7c3RhbmRhbG9uZToi''@;'; put 'put ''SmFuZXJfRmVicmVyX01hcnNfQWJyaWxfTWFpX0p1bl9KdWxhaV9BZ29zdF9TZXRlbWJyX090dWJyX05vdmVtYnJfRGV6ZW1iciIuc3BsaXQoIl8iKSxmb3JtYXQ6IkphbmVyYWNoZWFfRmVicmVyYWNoZWFfTWFyc2FjaGVhX0FicmlsYWNoZWFfTWFpYWNoZWFfSnVuYWNoZWFfSnVsYWlhY2hl''@;'; put 'put ''YV9BZ29zdGFjaGVhX1NldGVtYnJhY2hlYV9PdHVicmFjaGVhX05vdmVtYnJhY2hlYV9EZXplbWJyYWNoZWEiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L01NTU0oXHMpK0Rbb0RdPy99LG1vbnRoc1Nob3J0OiJKYW4uX0ZlYi5fTWFyc19BYnIuX01haV9KdW5fSnVsLl9BZ28uX1NldC5fT3R1Ll9O''@;'; put 'put ''b3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiQWl0YXJfU29tYXJfTW9uZ2xsYXJfQnVkaHZhcl9CaXJlc3Rhcl9TdWtyYXJfU29uJ3ZhciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaXQuX1NvbS5fTW9uLl9CdWQuX0JyZS5fU3VrLl9Tb24u''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJBaV9TbV9Nb19CdV9Ccl9TdV9TbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gW3ZhenRhXSIsTFRTOiJBIGg6bW06c3MgW3ZhenRhXSIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1N''@;'; put 'put ''TSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEEgaDptbSBbdmF6dGFdIixMTExMOiJkZGRkLCBNTU1NIERvLCBZWVlZLCBBIGg6bW0gW3ZhenRhXSIsbGxsbDoiZGRkLCBEIE1NTSBZWVlZLCBBIGg6bW0gW3ZhenRhXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQWl6XSBMVCIsbmV4dERheToiW0Zh''@;'; put 'put ''bGVhbV0gTFQiLG5leHRXZWVrOiJbRnVkZGxvXSBkZGRkWyxdIExUIixsYXN0RGF5OiJbS2FsXSBMVCIsbGFzdFdlZWs6IltGYXR0bG9dIGRkZGRbLF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIixwYXN0OiIlcyBhZGltIixzOmMsc3M6YyxtOmMsbW06Yyxo''@;'; put 'put ''OmMsaGg6YyxkOmMsZGQ6YyxNOmMsTU06Yyx5OmMseXk6Y30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcikvLG9yZGluYWw6ZnVuY3Rpb24oQSx2KXtyZXR1cm4iRCI9PT12P0ErImVyIjpBfSx3ZWVrOntkb3c6MCxkb3k6M30sbWVyaWRpZW1QYXJzZTovcmF0aXxzb2thbGxp''@;'; put 'put ''bXxkb25wYXJhbXxzYW5qZS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKEEsdil7cmV0dXJuIDEyPT09QSYmKEE9MCksInJhdGkiPT09dj9BPDQ/QTpBKzEyOiJzb2thbGxpbSI9PT12P0E6ImRvbnBhcmFtIj09PXY/QT4xMj9BOkErMTI6InNhbmplIj09PXY/QSsxMjp2b2lkIDB9LG1lcmlkaWVt''@;'; put 'put ''OmZ1bmN0aW9uKEEsdixDKXtyZXR1cm4gQTw0PyJyYXRpIjpBPDEyPyJzb2thbGxpbSI6QTwxNj8iZG9ucGFyYW0iOkE8MjA/InNhbmplIjoicmF0aSJ9fSl9KGgoOTc1ODYpKX0sMjY4MjcoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3ZhciBjPXsxOiJcdTBhZTciLDI6Ilx1''@;'; put 'put ''MGFlOCIsMzoiXHUwYWU5Iiw0OiJcdTBhZWEiLDU6Ilx1MGFlYiIsNjoiXHUwYWVjIiw3OiJcdTBhZWQiLDg6Ilx1MGFlZSIsOToiXHUwYWVmIiwwOiJcdTBhZTYifSxzPXsiXHUwYWU3IjoiMSIsIlx1MGFlOCI6IjIiLCJcdTBhZTkiOiIzIiwiXHUwYWVhIjoiNCIsIlx1MGFlYiI6IjUiLCJc''@;'; put 'put ''dTBhZWMiOiI2IiwiXHUwYWVkIjoiNyIsIlx1MGFlZSI6IjgiLCJcdTBhZWYiOiI5IiwiXHUwYWU2IjoiMCJ9O3kuZGVmaW5lTG9jYWxlKCJndSIse21vbnRoczoiXHUwYTljXHUwYWJlXHUwYWE4XHUwYWNkXHUwYWFmXHUwYWMxXHUwYTg2XHUwYWIwXHUwYWMwX1x1MGFhYlx1MGFjN1x1MGFh''@;'; put 'put ''Y1x1MGFjZFx1MGFiMFx1MGFjMVx1MGE4Nlx1MGFiMFx1MGFjMF9cdTBhYWVcdTBhYmVcdTBhYjBcdTBhY2RcdTBhOWFfXHUwYThmXHUwYWFhXHUwYWNkXHUwYWIwXHUwYWJmXHUwYWIyX1x1MGFhZVx1MGFjN19cdTBhOWNcdTBhYzJcdTBhYThfXHUwYTljXHUwYWMxXHUwYWIyXHUwYWJlXHUw''@;'; put 'put ''YTg4X1x1MGE5MVx1MGE5N1x1MGFiOFx1MGFjZFx1MGE5Zl9cdTBhYjhcdTBhYWFcdTBhY2RcdTBhOWZcdTBhYzdcdTBhYWVcdTBhY2RcdTBhYWNcdTBhYjBfXHUwYTkxXHUwYTk1XHUwYWNkXHUwYTlmXHUwYWNkXHUwYWFjXHUwYWIwX1x1MGFhOFx1MGFiNVx1MGFjN1x1MGFhZVx1MGFjZFx1''@;'; put 'put ''MGFhY1x1MGFiMF9cdTBhYTFcdTBhYmZcdTBhYjhcdTBhYzdcdTBhYWVcdTBhY2RcdTBhYWNcdTBhYjAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGE5Y1x1MGFiZVx1MGFhOFx1MGFjZFx1MGFhZlx1MGFjMS5fXHUwYWFiXHUwYWM3XHUwYWFjXHUwYWNkXHUwYWIwXHUwYWMxLl9cdTBh''@;'; put 'put ''YWVcdTBhYmVcdTBhYjBcdTBhY2RcdTBhOWFfXHUwYThmXHUwYWFhXHUwYWNkXHUwYWIwXHUwYWJmLl9cdTBhYWVcdTBhYzdfXHUwYTljXHUwYWMyXHUwYWE4X1x1MGE5Y1x1MGFjMVx1MGFiMlx1MGFiZS5fXHUwYTkxXHUwYTk3Ll9cdTBhYjhcdTBhYWFcdTBhY2RcdTBhOWZcdTBhYzcuX1x1''@;'; put 'put ''MGE5MVx1MGE5NVx1MGFjZFx1MGE5Zlx1MGFjZC5fXHUwYWE4XHUwYWI1XHUwYWM3Ll9cdTBhYTFcdTBhYmZcdTBhYjhcdTBhYzcuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGFiMFx1MGFiNVx1MGFiZlx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYjhcdTBh''@;'; put 'put ''Y2JcdTBhYWVcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWFlXHUwYTgyXHUwYTk3XHUwYWIzXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFhY1x1MGFjMVx1MGFhN1x1MGFjZFx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhOTdcdTBhYzFcdTBhYjBcdTBhYzFcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWI2XHUw''@;'; put 'put ''YWMxXHUwYTk1XHUwYWNkXHUwYWIwXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFiNlx1MGFhOFx1MGFiZlx1MGFiNVx1MGFiZVx1MGFiMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBhYjBcdTBhYjVcdTBhYmZfXHUwYWI4XHUwYWNiXHUwYWFlX1x1MGFhZVx1MGE4Mlx1MGE5N1x1MGFi''@;'; put 'put ''M19cdTBhYWNcdTBhYzFcdTBhYTdcdTBhY2RfXHUwYTk3XHUwYWMxXHUwYWIwXHUwYWMxX1x1MGFiNlx1MGFjMVx1MGE5NVx1MGFjZFx1MGFiMF9cdTBhYjZcdTBhYThcdTBhYmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGFiMF9cdTBhYjhcdTBhY2JfXHUwYWFlXHUwYTgyX1x1MGFh''@;'; put 'put ''Y1x1MGFjMV9cdTBhOTdcdTBhYzFfXHUwYWI2XHUwYWMxX1x1MGFiNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTBhYjVcdTBhYmVcdTBhOTdcdTBhY2RcdTBhYWZcdTBhYzciLExUUzoiQSBoOm1tOnNzIFx1MGFiNVx1MGFiZVx1MGE5N1x1MGFjZFx1MGFhZlx1''@;'; put 'put ''MGFjNyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3IixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MGFiNVx1MGFiZVx1MGE5N1x1MGFjZFx1MGFhZlx1''@;'; put 'put ''MGFjNyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYTg2XHUwYTljXSBMVCIsbmV4dERheToiW1x1MGE5NVx1MGFiZVx1MGFiMlx1MGFjN10gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGE5N1x1MGE4N1x1MGE5NVx1MGFiZVx1MGFiMlx1MGFjN10gTFQiLGxhc3RXZWVr''@;'; put 'put ''OiJbXHUwYWFhXHUwYWJlXHUwYTliXHUwYWIyXHUwYWJlXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwYWFlXHUwYWJlIixwYXN0OiIlcyBcdTBhYWFcdTBhYjlcdTBhYzdcdTBhYjJcdTBhYmUiLHM6Ilx1MGE4NVx1MGFhZVx1MGFjMVx1MGE5''@;'; put 'put ''NSBcdTBhYWFcdTBhYjNcdTBhY2IiLHNzOiIlZCBcdTBhYjhcdTBhYzdcdTBhOTVcdTBhODJcdTBhYTEiLG06Ilx1MGE4Zlx1MGE5NSBcdTBhYWVcdTBhYmZcdTBhYThcdTBhYmZcdTBhOWYiLG1tOiIlZCBcdTBhYWVcdTBhYmZcdTBhYThcdTBhYmZcdTBhOWYiLGg6Ilx1MGE4Zlx1MGE5NSBc''@;'; put 'put ''dTBhOTVcdTBhYjJcdTBhYmVcdTBhOTUiLGhoOiIlZCBcdTBhOTVcdTBhYjJcdTBhYmVcdTBhOTUiLGQ6Ilx1MGE4Zlx1MGE5NSBcdTBhYTZcdTBhYmZcdTBhYjVcdTBhYjgiLGRkOiIlZCBcdTBhYTZcdTBhYmZcdTBhYjVcdTBhYjgiLE06Ilx1MGE4Zlx1MGE5NSBcdTBhYWVcdTBhYjlcdTBh''@;'; put 'put ''YmZcdTBhYThcdTBhY2IiLE1NOiIlZCBcdTBhYWVcdTBhYjlcdTBhYmZcdTBhYThcdTBhY2IiLHk6Ilx1MGE4Zlx1MGE5NSBcdTBhYjVcdTBhYjBcdTBhY2RcdTBhYjciLHl5OiIlZCBcdTBhYjVcdTBhYjBcdTBhY2RcdTBhYjcifSxwcmVwYXJzZTpmdW5jdGlvbih2KXtyZXR1cm4gdi5yZXBs''@;'; put 'put ''YWNlKC9bXHUwYWU3XHUwYWU4XHUwYWU5XHUwYWVhXHUwYWViXHUwYWVjXHUwYWVkXHUwYWVlXHUwYWVmXHUwYWU2XS9nLGZ1bmN0aW9uKEMpe3JldHVybiBzW0NdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odil7cmV0dXJuIHYucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihDKXtyZXR1cm4gY1tD''@;'; put 'put ''XX0pfSxtZXJpZGllbVBhcnNlOi9cdTBhYjBcdTBhYmVcdTBhYTR8XHUwYWFjXHUwYWFhXHUwYWNiXHUwYWIwfFx1MGFiOFx1MGFiNVx1MGFiZVx1MGFiMHxcdTBhYjhcdTBhYmVcdTBhODJcdTBhOWMvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih2LEMpe3JldHVybiAxMj09PXYmJih2PTApLCJc''@;'; put 'put ''dTBhYjBcdTBhYmVcdTBhYTQiPT09Qz92PDQ/djp2KzEyOiJcdTBhYjhcdTBhYjVcdTBhYmVcdTBhYjAiPT09Qz92OiJcdTBhYWNcdTBhYWFcdTBhY2JcdTBhYjAiPT09Qz92Pj0xMD92OnYrMTI6Ilx1MGFiOFx1MGFiZVx1MGE4Mlx1MGE5YyI9PT1DP3YrMTI6dm9pZCAwfSxtZXJpZGllbTpm''@;'; put 'put ''dW5jdGlvbih2LEMsdyl7cmV0dXJuIHY8ND8iXHUwYWIwXHUwYWJlXHUwYWE0Ijp2PDEwPyJcdTBhYjhcdTBhYjVcdTBhYmVcdTBhYjAiOnY8MTc/Ilx1MGFhY1x1MGFhYVx1MGFjYlx1MGFiMCI6djwyMD8iXHUwYWI4XHUwYWJlXHUwYTgyXHUwYTljIjoiXHUwYWIwXHUwYWJlXHUwYWE0In0s''@;'; put 'put ''d2Vlazp7ZG93OjAsZG95OjZ9fSl9KGgoOTc1ODYpKX0sMjE5MzYoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJoZSIse21vbnRoczoiXHUwNWQ5XHUwNWUwXHUwNWQ1XHUwNWQwXHUwNWU4X1x1MDVlNFx1MDVkMVx1MDVlOFx1MDVkNVx1MDVkMFx1''@;'; put 'put ''MDVlOF9cdTA1ZGVcdTA1ZThcdTA1ZTVfXHUwNWQwXHUwNWU0XHUwNWU4XHUwNWQ5XHUwNWRjX1x1MDVkZVx1MDVkMFx1MDVkOV9cdTA1ZDlcdTA1ZDVcdTA1ZTBcdTA1ZDlfXHUwNWQ5XHUwNWQ1XHUwNWRjXHUwNWQ5X1x1MDVkMFx1MDVkNVx1MDVkMlx1MDVkNVx1MDVlMVx1MDVkOF9cdTA1''@;'; put 'put ''ZTFcdTA1ZTRcdTA1ZDhcdTA1ZGVcdTA1ZDFcdTA1ZThfXHUwNWQwXHUwNWQ1XHUwNWU3XHUwNWQ4XHUwNWQ1XHUwNWQxXHUwNWU4X1x1MDVlMFx1MDVkNVx1MDVkMVx1MDVkZVx1MDVkMVx1MDVlOF9cdTA1ZDNcdTA1ZTZcdTA1ZGVcdTA1ZDFcdTA1ZTgiLnNwbGl0KCJfIiksbW9udGhzU2hv''@;'; put 'put ''cnQ6Ilx1MDVkOVx1MDVlMFx1MDVkNVx1MDVmM19cdTA1ZTRcdTA1ZDFcdTA1ZThcdTA1ZjNfXHUwNWRlXHUwNWU4XHUwNWU1X1x1MDVkMFx1MDVlNFx1MDVlOFx1MDVmM19cdTA1ZGVcdTA1ZDBcdTA1ZDlfXHUwNWQ5XHUwNWQ1XHUwNWUwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVkY1x1MDVk''@;'; put 'put ''OV9cdTA1ZDBcdTA1ZDVcdTA1ZDJcdTA1ZjNfXHUwNWUxXHUwNWU0XHUwNWQ4XHUwNWYzX1x1MDVkMFx1MDVkNVx1MDVlN1x1MDVmM19cdTA1ZTBcdTA1ZDVcdTA1ZDFcdTA1ZjNfXHUwNWQzXHUwNWU2XHUwNWRlXHUwNWYzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA1ZThcdTA1ZDBcdTA1''@;'; put 'put ''ZTlcdTA1ZDVcdTA1ZGZfXHUwNWU5XHUwNWUwXHUwNWQ5X1x1MDVlOVx1MDVkY1x1MDVkOVx1MDVlOVx1MDVkOV9cdTA1ZThcdTA1ZDFcdTA1ZDlcdTA1ZTJcdTA1ZDlfXHUwNWQ3XHUwNWRlXHUwNWQ5XHUwNWU5XHUwNWQ5X1x1MDVlOVx1MDVkOVx1MDVlOVx1MDVkOV9cdTA1ZTlcdTA1ZDFc''@;'; put 'put ''dTA1ZWEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNWQwXHUwNWYzX1x1MDVkMVx1MDVmM19cdTA1ZDJcdTA1ZjNfXHUwNWQzXHUwNWYzX1x1MDVkNFx1MDVmM19cdTA1ZDVcdTA1ZjNfXHUwNWU5XHUwNWYzIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA1ZDBfXHUwNWQxX1x1''@;'; put 'put ''MDVkMl9cdTA1ZDNfXHUwNWQ0X1x1MDVkNV9cdTA1ZTkiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW1x1MDVkMV1NTU1NIFlZWVkiLExMTDoiRCBbXHUwNWQxXU1NTU0gWVlZWSBISDptbSIsTExMTDoi''@;'; put 'put ''ZGRkZCwgRCBbXHUwNWQxXU1NTU0gWVlZWSBISDptbSIsbDoiRC9NL1lZWVkiLGxsOiJEIE1NTSBZWVlZIixsbGw6IkQgTU1NIFlZWVkgSEg6bW0iLGxsbGw6ImRkZCwgRCBNTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNWQ0XHUwNWQ5XHUwNWQ1XHUwNWRkIFx1MDVk''@;'; put 'put ''MVx1MDViZV1MVCIsbmV4dERheToiW1x1MDVkZVx1MDVkN1x1MDVlOCBcdTA1ZDFcdTA1YmVdTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA1ZDFcdTA1ZTlcdTA1ZTJcdTA1ZDRdIExUIixsYXN0RGF5OiJbXHUwNWQwXHUwNWVhXHUwNWRlXHUwNWQ1XHUwNWRjIFx1MDVkMVx1MDViZV1MVCIsbGFz''@;'; put 'put ''dFdlZWs6IltcdTA1ZDFcdTA1ZDlcdTA1ZDVcdTA1ZGRdIGRkZGQgW1x1MDVkNFx1MDVkMFx1MDVkN1x1MDVlOFx1MDVkNVx1MDVkZiBcdTA1ZDFcdTA1ZTlcdTA1ZTJcdTA1ZDRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA1ZDFcdTA1ZTJcdTA1ZDVcdTA1''@;'; put 'put ''ZDMgJXMiLHBhc3Q6Ilx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkOSAlcyIsczoiXHUwNWRlXHUwNWUxXHUwNWU0XHUwNWU4IFx1MDVlOVx1MDVlMFx1MDVkOVx1MDVkNVx1MDVlYSIsc3M6IiVkIFx1MDVlOVx1MDVlMFx1MDVkOVx1MDVkNVx1MDVlYSIsbToiXHUwNWQzXHUwNWU3XHUwNWQ0Iixt''@;'; put 'put ''bToiJWQgXHUwNWQzXHUwNWU3XHUwNWQ1XHUwNWVhIixoOiJcdTA1ZTlcdTA1ZTJcdTA1ZDQiLGhoOmZ1bmN0aW9uKHMpe3JldHVybiAyPT09cz8iXHUwNWU5XHUwNWUyXHUwNWVhXHUwNWQ5XHUwNWQ5XHUwNWRkIjpzKyIgXHUwNWU5XHUwNWUyXHUwNWQ1XHUwNWVhIn0sZDoiXHUwNWQ5XHUw''@;'; put 'put ''NWQ1XHUwNWRkIixkZDpmdW5jdGlvbihzKXtyZXR1cm4gMj09PXM/Ilx1MDVkOVx1MDVkNVx1MDVkZVx1MDVkOVx1MDVkOVx1MDVkZCI6cysiIFx1MDVkOVx1MDVkZVx1MDVkOVx1MDVkZCJ9LE06Ilx1MDVkN1x1MDVkNVx1MDVkM1x1MDVlOSIsTU06ZnVuY3Rpb24ocyl7cmV0dXJuIDI9PT1z''@;'; put 'put ''PyJcdTA1ZDdcdTA1ZDVcdTA1ZDNcdTA1ZTlcdTA1ZDlcdTA1ZDlcdTA1ZGQiOnMrIiBcdTA1ZDdcdTA1ZDVcdTA1ZDNcdTA1ZTlcdTA1ZDlcdTA1ZGQifSx5OiJcdTA1ZTlcdTA1ZTBcdTA1ZDQiLHl5OmZ1bmN0aW9uKHMpe3JldHVybiAyPT09cz8iXHUwNWU5XHUwNWUwXHUwNWVhXHUwNWQ5''@;'; put 'put ''XHUwNWQ5XHUwNWRkIjpzJTEwPT0wJiYxMCE9PXM/cysiIFx1MDVlOVx1MDVlMFx1MDVkNCI6cysiIFx1MDVlOVx1MDVlMFx1MDVkOVx1MDVkZCJ9fSxtZXJpZGllbVBhcnNlOi9cdTA1ZDBcdTA1ZDdcdTA1ZDQiXHUwNWU2fFx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkNCJcdTA1ZTZ8XHUwNWQw''@;'; put 'put ''XHUwNWQ3XHUwNWU4XHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZHxcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDkgXHUwNWQ0XHUwNWU2XHUwNWQ0XHUwNWU4XHUwNWQ5XHUwNWQ5XHUwNWRkfFx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkNVx1MDVlYSBcdTA1''@;'; put 'put ''ZDFcdTA1ZDVcdTA1ZTdcdTA1ZTh8XHUwNWQxXHUwNWQxXHUwNWQ1XHUwNWU3XHUwNWU4fFx1MDVkMVx1MDVlMlx1MDVlOFx1MDVkMS9pLGlzUE06ZnVuY3Rpb24ocyl7cmV0dXJuL14oXHUwNWQwXHUwNWQ3XHUwNWQ0Ilx1MDVlNnxcdTA1ZDBcdTA1ZDdcdTA1ZThcdTA1ZDkgXHUwNWQ0XHUw''@;'; put 'put ''NWU2XHUwNWQ0XHUwNWU4XHUwNWQ5XHUwNWQ5XHUwNWRkfFx1MDVkMVx1MDVlMlx1MDVlOFx1MDVkMSkkLy50ZXN0KHMpfSxtZXJpZGllbTpmdW5jdGlvbihzLEEsdil7cmV0dXJuIHM8NT8iXHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ1XHUwNWVhIFx1MDVkMVx1MDVkNVx1MDVlN1x1MDVlOCI6''@;'; put 'put ''czwxMD8iXHUwNWQxXHUwNWQxXHUwNWQ1XHUwNWU3XHUwNWU4IjpzPDEyP3Y/J1x1MDVkY1x1MDVlNFx1MDVlMFx1MDVkNCJcdTA1ZTYnOiJcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDkgXHUwNWQ0XHUwNWU2XHUwNWQ0XHUwNWU4XHUwNWQ5XHUwNWQ5XHUwNWRkIjpzPDE4P3Y/J1x1MDVkMFx1''@;'; put 'put ''MDVkN1x1MDVkNCJcdTA1ZTYnOiJcdTA1ZDBcdTA1ZDdcdTA1ZThcdTA1ZDkgXHUwNWQ0XHUwNWU2XHUwNWQ0XHUwNWU4XHUwNWQ5XHUwNWQ5XHUwNWRkIjoiXHUwNWQxXHUwNWUyXHUwNWU4XHUwNWQxIn19KX0oaCg5NzU4NikpfSwzMTMzMihmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIGM9ezE6Ilx1MDk2NyIsMjoiXHUwOTY4IiwzOiJcdTA5NjkiLDQ6Ilx1MDk2YSIsNToiXHUwOTZiIiw2OiJcdTA5NmMiLDc6Ilx1MDk2ZCIsODoiXHUwOTZlIiw5OiJcdTA5NmYiLDA6Ilx1MDk2NiJ9LHM9eyJcdTA5NjciOiIxIiwiXHUwOTY4IjoiMiIsIlx1MDk2OSI6IjMi''@;'; put 'put ''LCJcdTA5NmEiOiI0IiwiXHUwOTZiIjoiNSIsIlx1MDk2YyI6IjYiLCJcdTA5NmQiOiI3IiwiXHUwOTZlIjoiOCIsIlx1MDk2ZiI6IjkiLCJcdTA5NjYiOiIwIn0sQT1bL15cdTA5MWNcdTA5MjgvaSwvXlx1MDkyYlx1MDkzY1x1MDkzMHxcdTA5MmJcdTA5MzAvaSwvXlx1MDkyZVx1MDkzZVx1''@;'; put 'put ''MDkzMFx1MDk0ZFx1MDkxYS9pLC9eXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4L2ksL15cdTA5MmVcdTA5MDgvaSwvXlx1MDkxY1x1MDk0Mlx1MDkyOC9pLC9eXHUwOTFjXHUwOTQxXHUwOTMyL2ksL15cdTA5MDVcdTA5MTcvaSwvXlx1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMnxcdTA5''@;'; put 'put ''MzhcdTA5M2ZcdTA5MjQvaSwvXlx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mi9pLC9eXHUwOTI4XHUwOTM1fFx1MDkyOFx1MDkzNVx1MDkwMi9pLC9eXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyfFx1MDkyNlx1MDkzZlx1MDkzOC9pXTt5LmRlZmluZUxvY2FsZSgiaGkiLHttb250aHM6''@;'; put 'put ''e2Zvcm1hdDoiXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyYlx1MDkzY1x1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyX1x1MDkyZVx1MDkwOF9cdTA5MWNc''@;'; put 'put ''dTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4X1x1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyNF9cdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzBfXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwX1x1MDky''@;'; put 'put ''OFx1MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMF9cdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyYlx1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5''@;'; put 'put ''MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4X1x1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyNF9cdTA5Mzhc''@;'; put 'put ''dTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0''@;'; put 'put ''OiJcdTA5MWNcdTA5MjguX1x1MDkyYlx1MDkzY1x1MDkzMC5fXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OC5fXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzIuX1x1MDkwNVx1MDkxNy5f''@;'; put 'put ''XHUwOTM4XHUwOTNmXHUwOTI0Ll9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDIuX1x1MDkyOFx1MDkzNS5fXHUwOTI2XHUwOTNmXHUwOTM4LiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwOTMwXHUwOTM1XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0Ylx1MDkyZVx1''@;'; put 'put ''MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzJcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTQxXHUwOTI3XHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkxN1x1MDk0MVx1MDkzMFx1MDk0Mlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRc''@;'; put 'put ''dTA5MzBcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDkzMFx1MDkzNVx1MDkzZl9cdTA5MzhcdTA5NGJcdTA5MmVfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMyX1x1MDkyY1x1MDk0MVx1''@;'; put 'put ''MDkyN19cdTA5MTdcdTA5NDFcdTA5MzBcdTA5NDJfXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOTMwX1x1MDkzOFx1MDk0Yl9cdTA5MmVcdTA5MDJfXHUwOTJjXHUwOTQxX1x1MDkxN1x1MDk0MV9c''@;'; put 'put ''dTA5MzZcdTA5NDFfXHUwOTM2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIsTFRTOiJBIGg6bW06c3MgXHUwOTJjXHUwOTFjXHUwOTQ3IixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEg''@;'; put 'put ''aDptbSBcdTA5MmNcdTA5MWNcdTA5NDciLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3In0sbW9udGhzUGFyc2U6QSxsb25nTW9udGhzUGFyc2U6QSxzaG9ydE1vbnRoc1BhcnNlOlsvXlx1MDkxY1x1MDkyOC9pLC9eXHUwOTJiXHUwOTNjXHUwOTMw''@;'; put 'put ''L2ksL15cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWEvaSwvXlx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OC9pLC9eXHUwOTJlXHUwOTA4L2ksL15cdTA5MWNcdTA5NDJcdTA5MjgvaSwvXlx1MDkxY1x1MDk0MVx1MDkzMi9pLC9eXHUwOTA1XHUwOTE3L2ksL15cdTA5MzhcdTA5''@;'; put 'put ''M2ZcdTA5MjQvaSwvXlx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mi9pLC9eXHUwOTI4XHUwOTM1L2ksL15cdTA5MjZcdTA5M2ZcdTA5MzgvaV0sbW9udGhzUmVnZXg6L14oXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkxY1x1MDkyOFwuP3xcdTA5MmJcdTA5M2NcdTA5''@;'; put 'put ''MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzY1x1MDkzMFwuP3xcdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWE/fFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMnxcdTA5MDVcdTA5MmFcdTA5NGRcdTA5''@;'; put 'put ''MzBcdTA5NDhcLj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOHxcdTA5MWNcdTA5NDFcdTA5MzJcLj98XHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0fFx1MDkwNVx1MDkxN1wuP3xcdTA5MzhcdTA5M2ZcdTA5MjRc''@;'; put 'put ''dTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFwuP3xcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzB8XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXC4/fFx1MDky''@;'; put 'put ''OFx1MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XC4/fFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTI2''@;'; put 'put ''XHUwOTNmXHUwOTM4XC4/KS9pLG1vbnRoc1Nob3J0UmVnZXg6L14oXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkxY1x1MDkyOFwuP3xcdTA5MmJcdTA5M2NcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkz''@;'; put 'put ''Y1x1MDkzMFwuP3xcdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWE/fFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMnxcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcLj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkz''@;'; put 'put ''Mlx1MDkzZVx1MDkwOHxcdTA5MWNcdTA5NDFcdTA5MzJcLj98XHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0fFx1MDkwNVx1MDkxN1wuP3xcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwfFx1''@;'; put 'put ''MDkzOFx1MDkzZlx1MDkyNFwuP3xcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzB8XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXC4/fFx1MDkyOFx1MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcdTA5MDJcdTA5MmNcdTA5MzB8''@;'; put 'put ''XHUwOTI4XHUwOTM1XC4/fFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTI2XHUwOTNmXHUwOTM4XC4/KS9pLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKFx1MDkxY1x1MDkyOFx1MDkzNVx1MDkz''@;'; put 'put ''MFx1MDk0MD98XHUwOTJiXHUwOTNjXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MD98XHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhP3xcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzI/fFx1MDkyZVx1MDkwOD98XHUw''@;'; put 'put ''OTFjXHUwOTQyXHUwOTI4P3xcdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDg/fFx1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyND98XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5''@;'; put 'put ''MzhcdTA5M2ZcdTA5MjQ/XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMHxcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcLj98XHUwOTI4XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMD98''@;'; put 'put ''XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMD8pL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihcdTA5MWNcdTA5MjhcLj98XHUwOTJiXHUwOTNjXHUwOTMwXC4/fFx1MDkyZVx1MDkzZVx1MDkz''@;'; put 'put ''MFx1MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XC4/fFx1MDkyZVx1MDkwOD98XHUwOTFjXHUwOTQyXHUwOTI4P3xcdTA5MWNcdTA5NDFcdTA5MzJcLj98XHUwOTA1XHUwOTE3XC4/fFx1MDkzOFx1MDkzZlx1MDkyNFwuP3xcdTA5MDVcdTA5MTVcdTA5NGRcdTA5''@;'; put 'put ''MWZcdTA5NDJcLj98XHUwOTI4XHUwOTM1XC4/fFx1MDkyNlx1MDkzZlx1MDkzOFwuPykvaSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDkwNlx1MDkxY10gTFQiLG5leHREYXk6IltcdTA5MTVcdTA5MzJdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTA5MTVcdTA5MzJdIExU''@;'; put 'put ''IixsYXN0V2VlazoiW1x1MDkyYVx1MDkzZlx1MDkxYlx1MDkzMlx1MDk0N10gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDkyZVx1MDk0N1x1MDkwMiIscGFzdDoiJXMgXHUwOTJhXHUwOTM5XHUwOTMyXHUwOTQ3IixzOiJcdTA5MTVcdTA5NDFc''@;'; put 'put ''dTA5MWIgXHUwOTM5XHUwOTQwIFx1MDkxNVx1MDk0ZFx1MDkzN1x1MDkyMyIsc3M6IiVkIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyMSIsbToiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkxZiIsbW06IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkxZiIsaDoiXHUw''@;'; put 'put ''OTBmXHUwOTE1IFx1MDkxOFx1MDkwMlx1MDkxZlx1MDkzZSIsaGg6IiVkIFx1MDkxOFx1MDkwMlx1MDkxZlx1MDk0NyIsZDoiXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDkzZlx1MDkyOCIsZGQ6IiVkIFx1MDkyNlx1MDkzZlx1MDkyOCIsTToiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzOVx1MDk0''@;'; put 'put ''MFx1MDkyOFx1MDk0NyIsTU06IiVkIFx1MDkyZVx1MDkzOVx1MDk0MFx1MDkyOFx1MDk0NyIseToiXHUwOTBmXHUwOTE1IFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzNyIseXk6IiVkIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzNyJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxh''@;'; put 'put ''Y2UoL1tcdTA5NjdcdTA5NjhcdTA5NjlcdTA5NmFcdTA5NmJcdTA5NmNcdTA5NmRcdTA5NmVcdTA5NmZcdTA5NjZdL2csZnVuY3Rpb24oUyl7cmV0dXJuIHNbU119KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFMpe3JldHVybiBjW1Nd''@;'; put 'put ''fSl9LG1lcmlkaWVtUGFyc2U6L1x1MDkzMFx1MDkzZVx1MDkyNHxcdTA5MzhcdTA5NDFcdTA5MmNcdTA5Mzl8XHUwOTI2XHUwOTRiXHUwOTJhXHUwOTM5XHUwOTMwfFx1MDkzNlx1MDkzZVx1MDkyZS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHcsUyl7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1''@;'; put 'put ''MDkzMFx1MDkzZVx1MDkyNCI9PT1TP3c8ND93OncrMTI6Ilx1MDkzOFx1MDk0MVx1MDkyY1x1MDkzOSI9PT1TP3c6Ilx1MDkyNlx1MDk0Ylx1MDkyYVx1MDkzOVx1MDkzMCI9PT1TP3c+PTEwP3c6dysxMjoiXHUwOTM2XHUwOTNlXHUwOTJlIj09PVM/dysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1''@;'; put 'put ''bmN0aW9uKHcsUyxMKXtyZXR1cm4gdzw0PyJcdTA5MzBcdTA5M2VcdTA5MjQiOnc8MTA/Ilx1MDkzOFx1MDk0MVx1MDkyY1x1MDkzOSI6dzwxNz8iXHUwOTI2XHUwOTRiXHUwOTJhXHUwOTM5XHUwOTMwIjp3PDIwPyJcdTA5MzZcdTA5M2VcdTA5MmUiOiJcdTA5MzBcdTA5M2VcdTA5MjQifSx3''@;'; put 'put ''ZWVrOntkb3c6MCxkb3k6Nn19KX0oaCg5NzU4NikpfSw5MTk1NyhmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyhBLHYsQyl7dmFyIHc9QSsiICI7c3dpdGNoKEMpe2Nhc2Uic3MiOnJldHVybiB3KygxPT09QT8ic2VrdW5kYSI6Mj09PUF8fDM9PT1BfHw0PT09''@;'; put 'put ''QT8ic2VrdW5kZSI6InNla3VuZGkiKTtjYXNlIm0iOnJldHVybiB2PyJqZWRuYSBtaW51dGEiOiJqZWRuZSBtaW51dGUiO2Nhc2UibW0iOnJldHVybiB3KygxPT09QT8ibWludXRhIjoyPT09QXx8Mz09PUF8fDQ9PT1BPyJtaW51dGUiOiJtaW51dGEiKTtjYXNlImgiOnJldHVybiB2PyJqZWRh''@;'; put 'put ''biBzYXQiOiJqZWRub2cgc2F0YSI7Y2FzZSJoaCI6cmV0dXJuIHcrKDE9PT1BPyJzYXQiOjI9PT1BfHwzPT09QXx8ND09PUE/InNhdGEiOiJzYXRpIik7Y2FzZSJkZCI6cmV0dXJuIHcrKDE9PT1BPyJkYW4iOiJkYW5hIik7Y2FzZSJNTSI6cmV0dXJuIHcrKDE9PT1BPyJtamVzZWMiOjI9PT1B''@;'; put 'put ''fHwzPT09QXx8ND09PUE/Im1qZXNlY2EiOiJtamVzZWNpIik7Y2FzZSJ5eSI6cmV0dXJuIHcrKDE9PT1BPyJnb2RpbmEiOjI9PT1BfHwzPT09QXx8ND09PUE/ImdvZGluZSI6ImdvZGluYSIpfX15LmRlZmluZUxvY2FsZSgiaHIiLHttb250aHM6e2Zvcm1hdDoic2lqZVx1MDEwZG5qYV92ZWxq''@;'; put 'put ''YVx1MDEwZGVfb1x1MDE3ZXVqa2FfdHJhdm5qYV9zdmlibmphX2xpcG5qYV9zcnBuamFfa29sb3ZvemFfcnVqbmFfbGlzdG9wYWRhX3N0dWRlbm9nYV9wcm9zaW5jYSIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJzaWplXHUwMTBkYW5qX3ZlbGphXHUwMTBkYV9vXHUwMTdldWpha190cmF2YW5q''@;'; put 'put ''X3N2aWJhbmpfbGlwYW5qX3NycGFual9rb2xvdm96X3J1amFuX2xpc3RvcGFkX3N0dWRlbmlfcHJvc2luYWMiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJzaWouX3ZlbGouX29cdTAxN2V1Ll90cmEuX3N2aS5fbGlwLl9zcnAuX2tvbC5fcnVqLl9saXMuX3N0dS5fcHJvLiIuc3BsaXQoIl8i''@;'; put 'put ''KSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJuZWRqZWxqYV9wb25lZGplbGpha191dG9yYWtfc3JpamVkYV9cdTAxMGRldHZydGFrX3BldGFrX3N1Ym90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZWQuX3Bvbi5fdXRvLl9zcmkuX1x1MDEwZGV0Ll9wZXQuX3N1Yi4iLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3NyX1x1MDEwZGVfcGVfc3UiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRG8gTU1NTSBZWVlZIixMTEw6IkRvIE1N''@;'; put 'put ''TU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEbyBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZGFuYXMgdV0gTFQiLG5leHREYXk6IltzdXRyYSB1XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdV0gW25lZGpl''@;'; put 'put ''bGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3VdIFtzcmlqZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3VdIFtzdWJvdHVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbdV0gZGRkZCBbdV0gTFQifX0sbGFzdERheToiW2p1XHUwMTBkZXIgdV0gTFQi''@;'; put 'put ''LGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3Byb1x1MDE2MWx1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbcHJvXHUwMTYxbHVdIFtzcmlqZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3Byb1x1MDE2MWxlXSBbc3Vi''@;'; put 'put ''b3RlXSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3Byb1x1MDE2MWxpXSBkZGRkIFt1XSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJpamUgJXMiLHM6InBhciBzZWt1bmRpIixzczpjLG06YyxtbTpj''@;'; put 'put ''LGg6YyxoaDpjLGQ6ImRhbiIsZGQ6YyxNOiJtamVzZWMiLE1NOmMseToiZ29kaW51Iix5eTpjfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGgoOTc1ODYpKX0sNDg5MjgoZmUsaixoKXshZnVuY3Rpb24oeSl7''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBjPSJ2YXNceGUxcm5hcCBoXHhlOXRmXHUwMTUxbiBrZWRkZW4gc3plcmRceGUxbiBjc1x4ZmN0XHhmNnJ0XHhmNmtceGY2biBwXHhlOW50ZWtlbiBzem9tYmF0b24iLnNwbGl0KCIgIik7ZnVuY3Rpb24gcyhDLHcsUyxMKXt2YXIgUj1DO3N3aXRjaChTKXtjYXNl''@;'; put 'put ''InMiOnJldHVybiBMfHx3PyJuXHhlOWhceGUxbnkgbVx4ZTFzb2RwZXJjIjoiblx4ZTloXHhlMW55IG1ceGUxc29kcGVyY2UiO2Nhc2Uic3MiOnJldHVybiBSKyhMfHx3KT8iIG1ceGUxc29kcGVyYyI6IiBtXHhlMXNvZHBlcmNlIjtjYXNlIm0iOnJldHVybiJlZ3kiKyhMfHx3PyIgcGVyYyI6''@;'; put 'put ''IiBwZXJjZSIpO2Nhc2UibW0iOnJldHVybiBSKyhMfHx3PyIgcGVyYyI6IiBwZXJjZSIpO2Nhc2UiaCI6cmV0dXJuImVneSIrKEx8fHc/IiBceGYzcmEiOiIgXHhmM3JceGUxamEiKTtjYXNlImhoIjpyZXR1cm4gUisoTHx8dz8iIFx4ZjNyYSI6IiBceGYzclx4ZTFqYSIpO2Nhc2UiZCI6cmV0''@;'; put 'put ''dXJuImVneSIrKEx8fHc/IiBuYXAiOiIgbmFwamEiKTtjYXNlImRkIjpyZXR1cm4gUisoTHx8dz8iIG5hcCI6IiBuYXBqYSIpO2Nhc2UiTSI6cmV0dXJuImVneSIrKEx8fHc/IiBoXHhmM25hcCI6IiBoXHhmM25hcGphIik7Y2FzZSJNTSI6cmV0dXJuIFIrKEx8fHc/IiBoXHhmM25hcCI6IiBo''@;'; put 'put ''XHhmM25hcGphIik7Y2FzZSJ5IjpyZXR1cm4iZWd5IisoTHx8dz8iIFx4ZTl2IjoiIFx4ZTl2ZSIpO2Nhc2UieXkiOnJldHVybiBSKyhMfHx3PyIgXHhlOXYiOiIgXHhlOXZlIil9cmV0dXJuIiJ9ZnVuY3Rpb24gQShDKXtyZXR1cm4oQz8iIjoiW21ceGZhbHRdICIpKyJbIitjW3RoaXMuZGF5''@;'; put 'put ''KCldKyJdIExUWy1rb3JdIn15LmRlZmluZUxvY2FsZSgiaHUiLHttb250aHM6ImphbnVceGUxcl9mZWJydVx4ZTFyX21ceGUxcmNpdXNfXHhlMXByaWxpc19tXHhlMWp1c19qXHhmYW5pdXNfalx4ZmFsaXVzX2F1Z3VzenR1c19zemVwdGVtYmVyX29rdFx4ZjNiZXJfbm92ZW1iZXJfZGVjZW1i''@;'; put 'put ''ZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tXHhlMXJjLl9ceGUxcHIuX21ceGUxai5falx4ZmFuLl9qXHhmYWwuX2F1Zy5fc3plcHQuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6InZhc1x4ZTFybmFwX2hceGU5''@;'; put 'put ''dGZcdTAxNTFfa2VkZF9zemVyZGFfY3NceGZjdFx4ZjZydFx4ZjZrX3BceGU5bnRla19zem9tYmF0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InZhc19oXHhlOXRfa2VkZF9zemVfY3NceGZjdF9wXHhlOW5fc3pvIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJ2X2hfa19zemVfY3NfcF9z''@;'; put 'put ''em8iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IllZWVkuTU0uREQuIixMTDoiWVlZWS4gTU1NTSBELiIsTExMOiJZWVlZLiBNTU1NIEQuIEg6bW0iLExMTEw6IllZWVkuIE1NTU0gRC4sIGRkZGQgSDptbSJ9LG1lcmlkaWVtUGFyc2U6L2Rl''@;'; put 'put ''fGR1L2ksaXNQTTpmdW5jdGlvbihDKXtyZXR1cm4idSI9PT1DLmNoYXJBdCgxKS50b0xvd2VyQ2FzZSgpfSxtZXJpZGllbTpmdW5jdGlvbihDLHcsUyl7cmV0dXJuIEM8MTI/ITA9PT1TPyJkZSI6IkRFIjohMD09PVM/ImR1IjoiRFUifSxjYWxlbmRhcjp7c2FtZURheToiW21hXSBMVFsta29y''@;'; put 'put ''XSIsbmV4dERheToiW2hvbG5hcF0gTFRbLWtvcl0iLG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIEEuY2FsbCh0aGlzLCEwKX0sbGFzdERheToiW3RlZ25hcF0gTFRbLWtvcl0iLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIEEuY2FsbCh0aGlzLCExKX0sc2FtZUVsc2U6IkwifSxyZWxh''@;'; put 'put ''dGl2ZVRpbWU6e2Z1dHVyZToiJXMgbVx4ZmFsdmEiLHBhc3Q6IiVzIixzLHNzOnMsbTpzLG1tOnMsaDpzLGhoOnMsZDpzLGRkOnMsTTpzLE1NOnMseTpzLHl5OnN9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0o''@;'; put 'put ''aCg5NzU4NikpfSw1NjIxNShmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5kZWZpbmVMb2NhbGUoImh5LWFtIix7bW9udGhzOntmb3JtYXQ6Ilx1MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU3ZVx1MDU2MVx1MDU4MFx1MDU2Yl9cdTA1ODNcdTA1NjVcdTA1N2ZcdTA1ODBc''@;'; put 'put ''dTA1N2VcdTA1NjFcdTA1ODBcdTA1NmJfXHUwNTc0XHUwNTYxXHUwNTgwXHUwNTdmXHUwNTZiX1x1MDU2MVx1MDU3YVx1MDU4MFx1MDU2Ylx1MDU2Y1x1MDU2Yl9cdTA1NzRcdTA1NjFcdTA1NzVcdTA1NmJcdTA1N2RcdTA1NmJfXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTZiXHUwNTdk''@;'; put 'put ''XHUwNTZiX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU2Y1x1MDU2Ylx1MDU3ZFx1MDU2Yl9cdTA1ODVcdTA1NjNcdTA1NzhcdTA1N2RcdTA1N2ZcdTA1NzhcdTA1N2RcdTA1NmJfXHUwNTdkXHUwNTY1XHUwNTdhXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwXHUwNTZiX1x1MDU3''@;'; put 'put ''MFx1MDU3OFx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2Yl9cdTA1NzZcdTA1NzhcdTA1NzVcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBcdTA1NmJfXHUwNTY0XHUwNTY1XHUwNTZmXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgw''@;'; put 'put ''XHUwNTZiIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU3ZVx1MDU2MVx1MDU4MF9cdTA1ODNcdTA1NjVcdTA1N2ZcdTA1ODBcdTA1N2VcdTA1NjFcdTA1ODBfXHUwNTc0XHUwNTYxXHUwNTgwXHUwNTdmX1x1MDU2MVx1MDU3YVx1MDU4MFx1MDU2''@;'; put 'put ''Ylx1MDU2Y19cdTA1NzRcdTA1NjFcdTA1NzVcdTA1NmJcdTA1N2RfXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTZiXHUwNTdkX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU2Y1x1MDU2Ylx1MDU3ZF9cdTA1ODVcdTA1NjNcdTA1NzhcdTA1N2RcdTA1N2ZcdTA1NzhcdTA1N2RfXHUwNTdkXHUw''@;'; put 'put ''NTY1XHUwNTdhXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwX1x1MDU3MFx1MDU3OFx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MF9cdTA1NzZcdTA1NzhcdTA1NzVcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBfXHUwNTY0XHUwNTY1XHUw''@;'; put 'put ''NTZmXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoiXHUwNTcwXHUwNTc2XHUwNTdlX1x1MDU4M1x1MDU3Zlx1MDU4MF9cdTA1NzRcdTA1ODBcdTA1N2ZfXHUwNTYxXHUwNTdhXHUwNTgwX1x1MDU3NFx1MDU3NVx1MDU3ZF9cdTA1''@;'; put 'put ''NzBcdTA1NzZcdTA1N2RfXHUwNTcwXHUwNTZjXHUwNTdkX1x1MDU4NVx1MDU2M1x1MDU3ZF9cdTA1N2RcdTA1N2FcdTA1N2ZfXHUwNTcwXHUwNTZmXHUwNTdmX1x1MDU3Nlx1MDU3NFx1MDU2Ml9cdTA1NjRcdTA1NmZcdTA1N2YiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDU2Zlx1MDU2Ylx1''@;'; put 'put ''MDU4MFx1MDU2MVx1MDU2Zlx1MDU2Yl9cdTA1NjVcdTA1ODBcdTA1NmZcdTA1NzhcdTA1ODJcdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjlcdTA1NmJfXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTg0XHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZiX1x1MDU3OVx1MDU3OFx1MDU4MFx1MDU2NVx1''@;'; put 'put ''MDU4NFx1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2OVx1MDU2Yl9cdTA1NzBcdTA1NmJcdTA1NzZcdTA1NjNcdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjlcdTA1NmJfXHUwNTc4XHUwNTgyXHUwNTgwXHUwNTYyXHUwNTYxXHUwNTY5X1x1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2MVx1MDU2OSIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA1NmZcdTA1ODBcdTA1NmZfXHUwNTY1XHUwNTgwXHUwNTZmX1x1MDU2NVx1MDU4MFx1MDU4NF9cdTA1NzlcdTA1ODBcdTA1ODRfXHUwNTcwXHUwNTc2XHUwNTYzX1x1MDU3OFx1MDU4Mlx1MDU4MFx1MDU2Ml9cdTA1NzdcdTA1NjJcdTA1NjkiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNNaW46Ilx1MDU2Zlx1MDU4MFx1MDU2Zl9cdTA1NjVcdTA1ODBcdTA1NmZfXHUwNTY1XHUwNTgwXHUwNTg0X1x1MDU3OVx1MDU4MFx1MDU4NF9cdTA1NzBcdTA1NzZcdTA1NjNfXHUwNTc4XHUwNTgyXHUwNTgwXHUwNTYyX1x1MDU3N1x1MDU2Mlx1MDU2OSIuc3BsaXQo''@;'; put 'put ''Il8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkgXHUwNTY5LiIsTExMOiJEIE1NTU0gWVlZWSBcdTA1NjkuLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgXHUwNTY5LiwgSEg6bW0ifSxjYWxl''@;'; put 'put ''bmRhcjp7c2FtZURheToiW1x1MDU2MVx1MDU3NVx1MDU3ZFx1MDU4NVx1MDU4MF0gTFQiLG5leHREYXk6IltcdTA1N2VcdTA1NjFcdTA1NzJcdTA1NjhdIExUIixsYXN0RGF5OiJbXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBb''@;'; put 'put ''XHUwNTg1XHUwNTgwXHUwNTY4IFx1MDU2YVx1MDU2MVx1MDU3NFx1MDU2OF0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbXHUwNTYxXHUwNTc2XHUwNTgxXHUwNTYxXHUwNTZlXSBkZGRkIFtcdTA1ODVcdTA1ODBcdTA1NjggXHUwNTZhXHUwNTYxXHUwNTc0XHUwNTY4XSBMVCJ9''@;'; put 'put ''LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDU3MFx1MDU2NVx1MDU3Zlx1MDU3OCIscGFzdDoiJXMgXHUwNTYxXHUwNTdjXHUwNTYxXHUwNTdiIixzOiJcdTA1NzRcdTA1NmIgXHUwNTg0XHUwNTYxXHUwNTc2XHUwNTZiIFx1MDU3ZVx1MDU2MVx1MDU3NVx1MDU4''@;'; put 'put ''MFx1MDU2Zlx1MDU3NVx1MDU2MVx1MDU3NiIsc3M6IiVkIFx1MDU3ZVx1MDU2MVx1MDU3NVx1MDU4MFx1MDU2Zlx1MDU3NVx1MDU2MVx1MDU3NiIsbToiXHUwNTgwXHUwNTc4XHUwNTdhXHUwNTY1IixtbToiJWQgXHUwNTgwXHUwNTc4XHUwNTdhXHUwNTY1IixoOiJcdTA1NmFcdTA1NjFcdTA1''@;'; put 'put ''NzQiLGhoOiIlZCBcdTA1NmFcdTA1NjFcdTA1NzQiLGQ6Ilx1MDU4NVx1MDU4MCIsZGQ6IiVkIFx1MDU4NVx1MDU4MCIsTToiXHUwNTYxXHUwNTc0XHUwNTZiXHUwNTdkIixNTToiJWQgXHUwNTYxXHUwNTc0XHUwNTZiXHUwNTdkIix5OiJcdTA1N2ZcdTA1NjFcdTA1ODBcdTA1NmIiLHl5OiIl''@;'; put 'put ''ZCBcdTA1N2ZcdTA1NjFcdTA1ODBcdTA1NmIifSxtZXJpZGllbVBhcnNlOi9cdTA1NjNcdTA1NmJcdTA1NzdcdTA1NjVcdTA1ODBcdTA1N2VcdTA1NjF8XHUwNTYxXHUwNTdjXHUwNTYxXHUwNTdlXHUwNTc4XHUwNTdmXHUwNTdlXHUwNTYxfFx1MDU4MVx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2''@;'; put 'put ''Zlx1MDU3ZVx1MDU2MXxcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1NzhcdTA1NzVcdTA1NjFcdTA1NzYvLGlzUE06ZnVuY3Rpb24ocyl7cmV0dXJuL14oXHUwNTgxXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTdlXHUwNTYxfFx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3OFx1''@;'; put 'put ''MDU3NVx1MDU2MVx1MDU3NikkLy50ZXN0KHMpfSxtZXJpZGllbTpmdW5jdGlvbihzKXtyZXR1cm4gczw0PyJcdTA1NjNcdTA1NmJcdTA1NzdcdTA1NjVcdTA1ODBcdTA1N2VcdTA1NjEiOnM8MTI/Ilx1MDU2MVx1MDU3Y1x1MDU2MVx1MDU3ZVx1MDU3OFx1MDU3Zlx1MDU3ZVx1MDU2MSI6czwx''@;'; put 'put ''Nz8iXHUwNTgxXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTdlXHUwNTYxIjoiXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTc4XHUwNTc1XHUwNTYxXHUwNTc2In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfXxcZHsxLDJ9LShcdTA1NmJcdTA1NzZ8XHUwNTgwXHUwNTY0''@;'; put 'put ''KS8sb3JkaW5hbDpmdW5jdGlvbihzLEEpe3N3aXRjaChBKXtjYXNlIkRERCI6Y2FzZSJ3IjpjYXNlIlciOmNhc2UiREREbyI6cmV0dXJuIDE9PT1zP3MrIi1cdTA1NmJcdTA1NzYiOnMrIi1cdTA1ODBcdTA1NjQiO2RlZmF1bHQ6cmV0dXJuIHN9fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oaCg5''@;'; put 'put ''NzU4NikpfSw1ODYoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJpZCIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYXJldF9BcHJpbF9NZWlfSnVuaV9KdWxpX0FndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGVzZW1iZXIiLnNw''@;'; put 'put ''bGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3RfU2VwX09rdF9Ob3ZfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJNaW5nZ3VfU2VuaW5fU2VsYXNhX1JhYnVfS2FtaXNfSnVtYXRfU2FidHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTWlu''@;'; put 'put ''X1Nlbl9TZWxfUmFiX0thbV9KdW1fU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJNZ19Tbl9TbF9SYl9LbV9KbV9TYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBN''@;'; put 'put ''TU1NIFlZWVkgW3B1a3VsXSBISC5tbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSJ9LG1lcmlkaWVtUGFyc2U6L3BhZ2l8c2lhbmd8c29yZXxtYWxhbS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHMsQSl7cmV0dXJuIDEyPT09cyYmKHM9MCksInBhZ2kiPT09QT9zOiJz''@;'; put 'put ''aWFuZyI9PT1BP3M+PTExP3M6cysxMjoic29yZSI9PT1BfHwibWFsYW0iPT09QT9zKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24ocyxBLHYpe3JldHVybiBzPDExPyJwYWdpIjpzPDE1PyJzaWFuZyI6czwxOT8ic29yZSI6Im1hbGFtIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIYXJpIGlu''@;'; put 'put ''aSBwdWt1bF0gTFQiLG5leHREYXk6IltCZXNvayBwdWt1bF0gTFQiLG5leHRXZWVrOiJkZGRkIFtwdWt1bF0gTFQiLGxhc3REYXk6IltLZW1hcmluIHB1a3VsXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2xhbHUgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJk''@;'; put 'put ''YWxhbSAlcyIscGFzdDoiJXMgeWFuZyBsYWx1IixzOiJiZWJlcmFwYSBkZXRpayIsc3M6IiVkIGRldGlrIixtOiJzZW1lbml0IixtbToiJWQgbWVuaXQiLGg6InNlamFtIixoaDoiJWQgamFtIixkOiJzZWhhcmkiLGRkOiIlZCBoYXJpIixNOiJzZWJ1bGFuIixNTToiJWQgYnVsYW4iLHk6InNl''@;'; put 'put ''dGFodW4iLHl5OiIlZCB0YWh1biJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShoKDk3NTg2KSl9LDkwMjExKGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjKHYpe3JldHVybiB2JTEwMD09MTF8fHYlMTAhPTF9ZnVuY3Rpb24gcyh2LEMsdyxTKXt2YXIgTD12KyIg''@;'; put 'put ''Ijtzd2l0Y2godyl7Y2FzZSJzIjpyZXR1cm4gQ3x8Uz8ibm9ra3JhciBzZWtceGZhbmR1ciI6Im5va2tydW0gc2VrXHhmYW5kdW0iO2Nhc2Uic3MiOnJldHVybiBjKHYpP0wrKEN8fFM/InNla1x4ZmFuZHVyIjoic2VrXHhmYW5kdW0iKTpMKyJzZWtceGZhbmRhIjtjYXNlIm0iOnJldHVybiBD''@;'; put 'put ''PyJtXHhlZG5ceGZhdGEiOiJtXHhlZG5ceGZhdHUiO2Nhc2UibW0iOnJldHVybiBjKHYpP0wrKEN8fFM/Im1ceGVkblx4ZmF0dXIiOiJtXHhlZG5ceGZhdHVtIik6Qz9MKyJtXHhlZG5ceGZhdGEiOkwrIm1ceGVkblx4ZmF0dSI7Y2FzZSJoaCI6cmV0dXJuIGModik/TCsoQ3x8Uz8ia2x1a2t1''@;'; put 'put ''c3R1bmRpciI6ImtsdWtrdXN0dW5kdW0iKTpMKyJrbHVra3VzdHVuZCI7Y2FzZSJkIjpyZXR1cm4gQz8iZGFndXIiOlM/ImRhZyI6ImRlZ2kiO2Nhc2UiZGQiOnJldHVybiBjKHYpP0M/TCsiZGFnYXIiOkwrKFM/ImRhZ2EiOiJkXHhmNmd1bSIpOkM/TCsiZGFndXIiOkwrKFM/ImRhZyI6ImRl''@;'; put 'put ''Z2kiKTtjYXNlIk0iOnJldHVybiBDPyJtXHhlMW51XHhmMHVyIjpTPyJtXHhlMW51XHhmMCI6Im1ceGUxbnVceGYwaSI7Y2FzZSJNTSI6cmV0dXJuIGModik/Qz9MKyJtXHhlMW51XHhmMGlyIjpMKyhTPyJtXHhlMW51XHhmMGkiOiJtXHhlMW51XHhmMHVtIik6Qz9MKyJtXHhlMW51XHhmMHVy''@;'; put 'put ''IjpMKyhTPyJtXHhlMW51XHhmMCI6Im1ceGUxbnVceGYwaSIpO2Nhc2UieSI6cmV0dXJuIEN8fFM/Ilx4ZTFyIjoiXHhlMXJpIjtjYXNlInl5IjpyZXR1cm4gYyh2KT9MKyhDfHxTPyJceGUxciI6Ilx4ZTFydW0iKTpMKyhDfHxTPyJceGUxciI6Ilx4ZTFyaSIpfX15LmRlZmluZUxvY2FsZSgi''@;'; put 'put ''aXMiLHttb250aHM6Imphblx4ZmFhcl9mZWJyXHhmYWFyX21hcnNfYXByXHhlZGxfbWFceGVkX2pceGZhblx4ZWRfalx4ZmFsXHhlZF9ceGUxZ1x4ZmFzdF9zZXB0ZW1iZXJfb2t0XHhmM2Jlcl9uXHhmM3ZlbWJlcl9kZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9t''@;'; put 'put ''YXJfYXByX21hXHhlZF9qXHhmYW5falx4ZmFsX1x4ZTFnXHhmYV9zZXBfb2t0X25ceGYzdl9kZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6InN1bm51ZGFndXJfbVx4ZTFudWRhZ3VyX1x4ZmVyaVx4ZjBqdWRhZ3VyX21pXHhmMHZpa3VkYWd1cl9maW1tdHVkYWd1cl9mXHhmNnN0dWRhZ3VyX2xh''@;'; put 'put ''dWdhcmRhZ3VyIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InN1bl9tXHhlMW5fXHhmZXJpX21pXHhmMF9maW1fZlx4ZjZzX2xhdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTVx4ZTFfXHhkZXJfTWlfRmlfRlx4ZjZfTGEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJI''@;'; put 'put ''Om1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIFtrbC5dIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBba2wuXSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltceGVkIGRhZyBrbC5dIExUIixuZXh0RGF5''@;'; put 'put ''OiJbXHhlMSBtb3JndW4ga2wuXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsLl0gTFQiLGxhc3REYXk6IltceGVkIGdceGU2ciBrbC5dIExUIixsYXN0V2VlazoiW3NceGVkXHhmMGFzdGFdIGRkZGQgW2tsLl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVmdGlyICVz''@;'; put 'put ''IixwYXN0OiJmeXJpciAlcyBzXHhlZFx4ZjBhbiIscyxzczpzLG06cyxtbTpzLGg6ImtsdWtrdXN0dW5kIixoaDpzLGQ6cyxkZDpzLE06cyxNTTpzLHk6cyx5eTpzfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9''@;'; put 'put ''KGgoOTc1ODYpKX0sMjIzNDAoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJpdC1jaCIse21vbnRoczoiZ2VubmFpb19mZWJicmFpb19tYXJ6b19hcHJpbGVfbWFnZ2lvX2dpdWdub19sdWdsaW9fYWdvc3RvX3NldHRlbWJyZV9vdHRvYnJlX25vdmVt''@;'; put 'put ''YnJlX2RpY2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJnZW5fZmViX21hcl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRfbm92X2RpYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiZG9tZW5pY2FfbHVuZWRceGVjX21hcnRlZFx4ZWNfbWVyY29sZWRceGVjX2dpb3ZlZFx4ZWNfdmVu''@;'; put 'put ''ZXJkXHhlY19zYWJhdG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tX2x1bl9tYXJfbWVyX2dpb192ZW5fc2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9tZV9naV92ZV9zYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1t''@;'; put 'put ''OnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW09nZ2kgYWxsZV0gTFQiLG5leHREYXk6IltEb21hbmkgYWxsZV0gTFQiLG5leHRXZWVrOiJk''@;'; put 'put ''ZGRkIFthbGxlXSBMVCIsbGFzdERheToiW0llcmkgYWxsZV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmRheSgpPyJbbGEgc2NvcnNhXSBkZGRkIFthbGxlXSBMVCI6IltsbyBzY29yc29dIGRkZGQgW2FsbGVdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRp''@;'; put 'put ''bWU6e2Z1dHVyZTpmdW5jdGlvbihzKXtyZXR1cm4oL15bMC05XS4rJC8udGVzdChzKT8idHJhIjoiaW4iKSsiICIrc30scGFzdDoiJXMgZmEiLHM6ImFsY3VuaSBzZWNvbmRpIixzczoiJWQgc2Vjb25kaSIsbToidW4gbWludXRvIixtbToiJWQgbWludXRpIixoOiJ1bidvcmEiLGhoOiIlZCBv''@;'; put 'put ''cmUiLGQ6InVuIGdpb3JubyIsZGQ6IiVkIGdpb3JuaSIsTToidW4gbWVzZSIsTU06IiVkIG1lc2kiLHk6InVuIGFubm8iLHl5OiIlZCBhbm5pIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGgoOTc1''@;'; put 'put ''ODYpKX0sNzAxNzAoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJpdCIse21vbnRoczoiZ2VubmFpb19mZWJicmFpb19tYXJ6b19hcHJpbGVfbWFnZ2lvX2dpdWdub19sdWdsaW9fYWdvc3RvX3NldHRlbWJyZV9vdHRvYnJlX25vdmVtYnJlX2RpY2Vt''@;'; put 'put ''YnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJnZW5fZmViX21hcl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRfbm92X2RpYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiZG9tZW5pY2FfbHVuZWRceGVjX21hcnRlZFx4ZWNfbWVyY29sZWRceGVjX2dpb3ZlZFx4ZWNfdmVuZXJkXHhlY19z''@;'; put 'put ''YWJhdG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tX2x1bl9tYXJfbWVyX2dpb192ZW5fc2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9tZV9naV92ZV9zYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJE''@;'; put 'put ''RC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbT2dnaSBhIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJz''@;'; put 'put ''KCk/IiAiOiJsbCciKSsiXUxUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbRG9tYW5pIGEiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIisodGhpcy5ob3Vycygp''@;'; put 'put ''PjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbSWVyaSBhIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''MD09PXRoaXMuZGF5KCk/IltMYSBzY29yc2FdIGRkZGQgW2EiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQiOiJbTG8gc2NvcnNvXSBkZGRkIFthIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCci''@;'; put 'put ''KSsiXUxUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToidHJhICVzIixwYXN0OiIlcyBmYSIsczoiYWxjdW5pIHNlY29uZGkiLHNzOiIlZCBzZWNvbmRpIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dGkiLGg6InVuJ29yYSIsaGg6IiVkIG9yZSIsZDoidW4gZ2lvcm5v''@;'; put 'put ''IixkZDoiJWQgZ2lvcm5pIix3OiJ1bmEgc2V0dGltYW5hIix3dzoiJWQgc2V0dGltYW5lIixNOiJ1biBtZXNlIixNTToiJWQgbWVzaSIseToidW4gYW5ubyIseXk6IiVkIGFubmkifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntk''@;'; put 'put ''b3c6MSxkb3k6NH19KX0oaCg5NzU4NikpfSwzOTc3MChmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5kZWZpbmVMb2NhbGUoImphIix7ZXJhczpbe3NpbmNlOiIyMDE5LTA1LTAxIixvZmZzZXQ6MSxuYW1lOiJcdTRlZTRcdTU0OGMiLG5hcnJvdzoiXHUzMmZmIixhYmJyOiJS''@;'; put 'put ''In0se3NpbmNlOiIxOTg5LTAxLTA4Iix1bnRpbDoiMjAxOS0wNC0zMCIsb2Zmc2V0OjEsbmFtZToiXHU1ZTczXHU2MjEwIixuYXJyb3c6Ilx1MzM3YiIsYWJicjoiSCJ9LHtzaW5jZToiMTkyNi0xMi0yNSIsdW50aWw6IjE5ODktMDEtMDciLG9mZnNldDoxLG5hbWU6Ilx1NjYyZFx1NTQ4YyIs''@;'; put 'put ''bmFycm93OiJcdTMzN2MiLGFiYnI6IlMifSx7c2luY2U6IjE5MTItMDctMzAiLHVudGlsOiIxOTI2LTEyLTI0IixvZmZzZXQ6MSxuYW1lOiJcdTU5MjdcdTZiNjMiLG5hcnJvdzoiXHUzMzdkIixhYmJyOiJUIn0se3NpbmNlOiIxODczLTAxLTAxIix1bnRpbDoiMTkxMi0wNy0yOSIsb2Zmc2V0''@;'; put 'put ''OjYsbmFtZToiXHU2NjBlXHU2Y2JiIixuYXJyb3c6Ilx1MzM3ZSIsYWJicjoiTSJ9LHtzaW5jZToiMDAwMS0wMS0wMSIsdW50aWw6IjE4NzMtMTItMzEiLG9mZnNldDoxLG5hbWU6Ilx1ODk3Zlx1NjZhNiIsbmFycm93OiJBRCIsYWJicjoiQUQifSx7c2luY2U6IjAwMDAtMTItMzEiLHVudGls''@;'; put 'put ''Oi0xLzAsb2Zmc2V0OjEsbmFtZToiXHU3ZDAwXHU1MTQzXHU1MjRkIixuYXJyb3c6IkJDIixhYmJyOiJCQyJ9XSxlcmFZZWFyT3JkaW5hbFJlZ2V4Oi8oXHU1MTQzfFxkKylcdTVlNzQvLGVyYVllYXJPcmRpbmFsUGFyc2U6ZnVuY3Rpb24ocyxBKXtyZXR1cm4iXHU1MTQzIj09PUFbMV0/MTpw''@;'; put 'put ''YXJzZUludChBWzFdfHxzLDEwKX0sbW9udGhzOiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1NjcwOF8yXHU2''@;'; put 'put ''NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1NjVlNVx1NjZkY1x1NjVlNV9cdTY3MDhcdTY2ZGNcdTY1ZTVfXHU3MDZiXHU2NmRjXHU2NWU1''@;'; put 'put ''X1x1NmMzNFx1NjZkY1x1NjVlNV9cdTY3MjhcdTY2ZGNcdTY1ZTVfXHU5MWQxXHU2NmRjXHU2NWU1X1x1NTcxZlx1NjZkY1x1NjVlNSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTY1ZTVfXHU2NzA4X1x1NzA2Yl9cdTZjMzRfXHU2NzI4X1x1OTFkMV9cdTU3MWYiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNNaW46Ilx1NjVlNV9cdTY3MDhfXHU3MDZiX1x1NmMzNF9cdTY3MjhfXHU5MWQxX1x1NTcxZiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixMTEw6''@;'; put 'put ''IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsTExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IGRkZGQgSEg6bW0iLGw6IllZWVkvTU0vREQiLGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixsbGxsOiJZ''@;'; put 'put ''WVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUoZGRkKSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1NTM0OFx1NTI0ZHxcdTUzNDhcdTVmOGMvaSxpc1BNOmZ1bmN0aW9uKHMpe3JldHVybiJcdTUzNDhcdTVmOGMiPT09c30sbWVyaWRpZW06ZnVuY3Rpb24ocyxBLHYpe3JldHVybiBzPDEyPyJcdTUz''@;'; put 'put ''NDhcdTUyNGQiOiJcdTUzNDhcdTVmOGMifSxjYWxlbmRhcjp7c2FtZURheToiW1x1NGVjYVx1NjVlNV0gTFQiLG5leHREYXk6IltcdTY2MGVcdTY1ZTVdIExUIixuZXh0V2VlazpmdW5jdGlvbihzKXtyZXR1cm4gcy53ZWVrKCkhPT10aGlzLndlZWsoKT8iW1x1Njc2NVx1OTAzMV1kZGRkIExU''@;'; put 'put ''IjoiZGRkZCBMVCJ9LGxhc3REYXk6IltcdTY2MjhcdTY1ZTVdIExUIixsYXN0V2VlazpmdW5jdGlvbihzKXtyZXR1cm4gdGhpcy53ZWVrKCkhPT1zLndlZWsoKT8iW1x1NTE0OFx1OTAzMV1kZGRkIExUIjoiZGRkZCBMVCJ9LHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTov''@;'; put 'put ''XGR7MSwyfVx1NjVlNS8sb3JkaW5hbDpmdW5jdGlvbihzLEEpe3N3aXRjaChBKXtjYXNlInkiOnJldHVybiAxPT09cz8iXHU1MTQzXHU1ZTc0IjpzKyJcdTVlNzQiO2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIHMrIlx1NjVlNSI7ZGVmYXVsdDpyZXR1cm4gc319LHJlbGF0aXZl''@;'; put 'put ''VGltZTp7ZnV0dXJlOiIlc1x1NWY4YyIscGFzdDoiJXNcdTUyNGQiLHM6Ilx1NjU3MFx1NzlkMiIsc3M6IiVkXHU3OWQyIixtOiIxXHU1MjA2IixtbToiJWRcdTUyMDYiLGg6IjFcdTY2NDJcdTk1OTMiLGhoOiIlZFx1NjY0Mlx1OTU5MyIsZDoiMVx1NjVlNSIsZGQ6IiVkXHU2NWU1IixNOiIx''@;'; put 'put ''XHUzMGY2XHU2NzA4IixNTToiJWRcdTMwZjZcdTY3MDgiLHk6IjFcdTVlNzQiLHl5OiIlZFx1NWU3NCJ9fSl9KGgoOTc1ODYpKX0sNzM4NzUoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJqdiIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYXJl''@;'; put 'put ''dF9BcHJpbF9NZWlfSnVuaV9KdWxpX0FndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm9wZW1iZXJfRGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3NfU2VwX09rdF9Ob3BfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJNaW5n''@;'; put 'put ''Z3VfU2VuZW5fU2Vsb3NvX1JlYnVfS2VtaXNfSmVtdXdhaF9TZXB0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJNaW5fU2VuX1NlbF9SZWJfS2VtX0plbV9TZXAiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ik1nX1NuX1NsX1JiX0ttX0ptX1NwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9y''@;'; put 'put ''bWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovZW5qaW5nfHNpeWFuZ3xz''@;'; put 'put ''b250ZW58bmRhbHUvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihzLEEpe3JldHVybiAxMj09PXMmJihzPTApLCJlbmppbmciPT09QT9zOiJzaXlhbmciPT09QT9zPj0xMT9zOnMrMTI6InNvbnRlbiI9PT1BfHwibmRhbHUiPT09QT9zKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24ocyxBLHYp''@;'; put 'put ''e3JldHVybiBzPDExPyJlbmppbmciOnM8MTU/InNpeWFuZyI6czwxOT8ic29udGVuIjoibmRhbHUifSxjYWxlbmRhcjp7c2FtZURheToiW0RpbnRlbiBwdW5pa28gcHVrdWxdIExUIixuZXh0RGF5OiJbTWJlbmphbmcgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0''@;'; put 'put ''RGF5OiJbS2FsYSB3aW5naSBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtrZXBlbmdrZXIgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ3b250ZW4gaW5nICVzIixwYXN0OiIlcyBpbmdrYW5nIGtlcGVuZ2tlciIsczoic2F3ZXRhd2lzIGRldGlrIixz''@;'; put 'put ''czoiJWQgZGV0aWsiLG06InNldHVuZ2dhbCBtZW5pdCIsbW06IiVkIG1lbml0IixoOiJzZXR1bmdnYWwgamFtIixoaDoiJWQgamFtIixkOiJzZWRpbnRlbiIsZGQ6IiVkIGRpbnRlbiIsTToic2V3dWxhbiIsTU06IiVkIHd1bGFuIix5OiJzZXRhdW4iLHl5OiIlZCB0YXVuIn0sd2Vlazp7ZG93''@;'; put 'put ''OjEsZG95Ojd9fSl9KGgoOTc1ODYpKX0sNzk0OTkoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJrYSIse21vbnRoczoiXHUxMGQ4XHUxMGQwXHUxMGRjXHUxMGQ1XHUxMGQwXHUxMGUwXHUxMGQ4X1x1MTBkN1x1MTBkNFx1MTBkMVx1MTBkNFx1MTBl''@;'; put 'put ''MFx1MTBkNVx1MTBkMFx1MTBkYVx1MTBkOF9cdTEwZGJcdTEwZDBcdTEwZTBcdTEwZTJcdTEwZDhfXHUxMGQwXHUxMGRlXHUxMGUwXHUxMGQ4XHUxMGRhXHUxMGQ4X1x1MTBkYlx1MTBkMFx1MTBkOFx1MTBlMVx1MTBkOF9cdTEwZDhcdTEwZDVcdTEwZGNcdTEwZDhcdTEwZTFcdTEwZDhfXHUx''@;'; put 'put ''MGQ4XHUxMGQ1XHUxMGRhXHUxMGQ4XHUxMGUxXHUxMGQ4X1x1MTBkMFx1MTBkMlx1MTBkNVx1MTBkOFx1MTBlMVx1MTBlMlx1MTBkZF9cdTEwZTFcdTEwZDRcdTEwZTVcdTEwZTJcdTEwZDRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDhfXHUxMGRkXHUxMGU1XHUxMGUyXHUxMGRkXHUx''@;'; put 'put ''MGRiXHUxMGQxXHUxMGQ0XHUxMGUwXHUxMGQ4X1x1MTBkY1x1MTBkZFx1MTBkNFx1MTBkYlx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkOF9cdTEwZDNcdTEwZDRcdTEwZDlcdTEwZDRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MTBkOFx1''@;'; put 'put ''MTBkMFx1MTBkY19cdTEwZDdcdTEwZDRcdTEwZDFfXHUxMGRiXHUxMGQwXHUxMGUwX1x1MTBkMFx1MTBkZVx1MTBlMF9cdTEwZGJcdTEwZDBcdTEwZDhfXHUxMGQ4XHUxMGQ1XHUxMGRjX1x1MTBkOFx1MTBkNVx1MTBkYV9cdTEwZDBcdTEwZDJcdTEwZDVfXHUxMGUxXHUxMGQ0XHUxMGU1X1x1''@;'; put 'put ''MTBkZFx1MTBlNVx1MTBlMl9cdTEwZGNcdTEwZGRcdTEwZDRfXHUxMGQzXHUxMGQ0XHUxMGQ5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOntzdGFuZGFsb25lOiJcdTEwZDlcdTEwZDVcdTEwZDhcdTEwZTBcdTEwZDBfXHUxMGRkXHUxMGUwXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUx''@;'; put 'put ''MGQ4X1x1MTBlMVx1MTBkMFx1MTBkYlx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBkOF9cdTEwZGRcdTEwZDdcdTEwZWVcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDhfXHUxMGVlXHUxMGUzXHUxMGQ3XHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUx''@;'; put 'put ''MGQ4X1x1MTBkZVx1MTBkMFx1MTBlMFx1MTBkMFx1MTBlMVx1MTBkOVx1MTBkNFx1MTBkNVx1MTBkOF9cdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDgiLnNwbGl0KCJfIiksZm9ybWF0OiJcdTEwZDlcdTEwZDVcdTEwZDhcdTEwZTBcdTEwZDBcdTEwZTFfXHUxMGRkXHUxMGUw''@;'; put 'put ''XHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBlMVx1MTBkMFx1MTBkYlx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMV9cdTEwZGRcdTEwZDdcdTEwZWVcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTFfXHUxMGVlXHUxMGUzXHUxMGQ3''@;'; put 'put ''XHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBkZVx1MTBkMFx1MTBlMFx1MTBkMFx1MTBlMVx1MTBkOVx1MTBkNFx1MTBkNVx1MTBlMV9cdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTEiLnNwbGl0KCJfIiksaXNGb3JtYXQ6LyhcdTEwZWNcdTEwZDhc''@;'; put 'put ''dTEwZGNcdTEwZDB8XHUxMGU4XHUxMGQ0XHUxMGRiXHUxMGQzXHUxMGQ0XHUxMGQyKS99LHdlZWtkYXlzU2hvcnQ6Ilx1MTBkOVx1MTBkNVx1MTBkOF9cdTEwZGRcdTEwZTBcdTEwZThfXHUxMGUxXHUxMGQwXHUxMGRiX1x1MTBkZFx1MTBkN1x1MTBlZV9cdTEwZWVcdTEwZTNcdTEwZDdfXHUx''@;'; put 'put ''MGRlXHUxMGQwXHUxMGUwX1x1MTBlOFx1MTBkMFx1MTBkMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUxMGQ5XHUxMGQ1X1x1MTBkZFx1MTBlMF9cdTEwZTFcdTEwZDBfXHUxMGRkXHUxMGQ3X1x1MTBlZVx1MTBlM19cdTEwZGVcdTEwZDBfXHUxMGU4XHUxMGQwIi5zcGxpdCgiXyIpLGxv''@;'; put 'put ''bmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MTBkM1x1MTBlNlx1MTBk''@;'; put 'put ''NFx1MTBlMV0gTFRbLVx1MTBkNlx1MTBkNF0iLG5leHREYXk6IltcdTEwZWVcdTEwZDVcdTEwZDBcdTEwZGFdIExUWy1cdTEwZDZcdTEwZDRdIixsYXN0RGF5OiJbXHUxMGQyXHUxMGUzXHUxMGU4XHUxMGQ4XHUxMGRjXSBMVFstXHUxMGQ2XHUxMGQ0XSIsbmV4dFdlZWs6IltcdTEwZThcdTEw''@;'; put 'put ''ZDRcdTEwZGJcdTEwZDNcdTEwZDRcdTEwZDJdIGRkZGQgTFRbLVx1MTBkNlx1MTBkNF0iLGxhc3RXZWVrOiJbXHUxMGVjXHUxMGQ4XHUxMGRjXHUxMGQwXSBkZGRkIExULVx1MTBkNlx1MTBkNCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihzKXtyZXR1cm4g''@;'; put 'put ''cy5yZXBsYWNlKC8oXHUxMGVjXHUxMGQwXHUxMGRifFx1MTBlY1x1MTBlM1x1MTBkN3xcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDd8XHUxMGVjXHUxMGQ0XHUxMGRhfFx1MTBkM1x1MTBlNnxcdTEwZDdcdTEwZDUpKFx1MTBkOHxcdTEwZDQpLyxmdW5jdGlvbihBLHYsQyl7cmV0dXJuIlx1MTBk''@;'; put 'put ''OCI9PT1DP3YrIlx1MTBlOFx1MTBkOCI6ditDKyJcdTEwZThcdTEwZDgifSl9LHBhc3Q6ZnVuY3Rpb24ocyl7cmV0dXJuLyhcdTEwZWNcdTEwZDBcdTEwZGJcdTEwZDh8XHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4fFx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN1x1MTBkOHxcdTEwZDNcdTEwZTZc''@;'; put 'put ''dTEwZDR8XHUxMGQ3XHUxMGQ1XHUxMGQ0KS8udGVzdChzKT9zLnJlcGxhY2UoLyhcdTEwZDh8XHUxMGQ0KSQvLCJcdTEwZDhcdTEwZTEgXHUxMGVjXHUxMGQ4XHUxMGRjIik6L1x1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOC8udGVzdChzKT9zLnJlcGxhY2UoL1x1MTBlY1x1MTBkNFx1MTBkYVx1''@;'; put 'put ''MTBkOCQvLCJcdTEwZWNcdTEwZGFcdTEwZDhcdTEwZTEgXHUxMGVjXHUxMGQ4XHUxMGRjIik6c30sczoiXHUxMGUwXHUxMGQwXHUxMGRiXHUxMGQzXHUxMGQ0XHUxMGRjXHUxMGQ4XHUxMGRiXHUxMGQ0IFx1MTBlY1x1MTBkMFx1MTBkYlx1MTBkOCIsc3M6IiVkIFx1MTBlY1x1MTBkMFx1MTBk''@;'; put 'put ''Ylx1MTBkOCIsbToiXHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4IixtbToiJWQgXHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4IixoOiJcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDdcdTEwZDgiLGhoOiIlZCBcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDdcdTEwZDgiLGQ6Ilx1MTBkM1x1MTBlNlx1MTBk''@;'; put 'put ''NCIsZGQ6IiVkIFx1MTBkM1x1MTBlNlx1MTBkNCIsTToiXHUxMGQ3XHUxMGQ1XHUxMGQ0IixNTToiJWQgXHUxMGQ3XHUxMGQ1XHUxMGQ0Iix5OiJcdTEwZWNcdTEwZDRcdTEwZGFcdTEwZDgiLHl5OiIlZCBcdTEwZWNcdTEwZDRcdTEwZGFcdTEwZDgifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNl''@;'; put 'put ''Oi8wfDEtXHUxMGRhXHUxMGQ4fFx1MTBkYlx1MTBkNC1cZHsxLDJ9fFxkezEsMn0tXHUxMGQ0LyxvcmRpbmFsOmZ1bmN0aW9uKHMpe3JldHVybiAwPT09cz9zOjE9PT1zP3MrIi1cdTEwZGFcdTEwZDgiOnM8MjB8fHM8PTEwMCYmcyUyMD09MHx8cyUxMDA9PTA/Ilx1MTBkYlx1MTBkNC0iK3M6''@;'; put 'put ''cysiLVx1MTBkNCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShoKDk3NTg2KSl9LDkzNTczKGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz17MDoiLVx1MDQ0OFx1MDQ1NiIsMToiLVx1MDQ0OFx1MDQ1NiIsMjoiLVx1MDQ0OFx1MDQ1NiIsMzoiLVx1MDQ0OFx1MDQ1NiIs''@;'; put 'put ''NDoiLVx1MDQ0OFx1MDQ1NiIsNToiLVx1MDQ0OFx1MDQ1NiIsNjoiLVx1MDQ0OFx1MDQ0YiIsNzoiLVx1MDQ0OFx1MDQ1NiIsODoiLVx1MDQ0OFx1MDQ1NiIsOToiLVx1MDQ0OFx1MDQ0YiIsMTA6Ii1cdTA0NDhcdTA0NGIiLDIwOiItXHUwNDQ4XHUwNDRiIiwzMDoiLVx1MDQ0OFx1MDQ0YiIs''@;'; put 'put ''NDA6Ii1cdTA0NDhcdTA0NGIiLDUwOiItXHUwNDQ4XHUwNDU2Iiw2MDoiLVx1MDQ0OFx1MDQ0YiIsNzA6Ii1cdTA0NDhcdTA0NTYiLDgwOiItXHUwNDQ4XHUwNDU2Iiw5MDoiLVx1MDQ0OFx1MDQ0YiIsMTAwOiItXHUwNDQ4XHUwNDU2In07eS5kZWZpbmVMb2NhbGUoImtrIix7bW9udGhzOiJc''@;'; put 'put ''dTA0OWJcdTA0MzBcdTA0YTNcdTA0NDJcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDliXHUwNDNmXHUwNDMwXHUwNDNkX1x1MDQzZFx1MDQzMFx1MDQ0M1x1MDQ0MFx1MDQ0Ylx1MDQzN19cdTA0NDFcdTA0ZDlcdTA0NDNcdTA0NTZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDNjXHUwNDRiXHUwNDQw''@;'; put 'put ''X1x1MDQzY1x1MDQzMFx1MDQ0M1x1MDQ0MVx1MDQ0Ylx1MDQzY19cdTA0NDhcdTA0NTZcdTA0M2JcdTA0MzRcdTA0MzVfXHUwNDQyXHUwNDMwXHUwNDNjXHUwNDRiXHUwNDM3X1x1MDQ5Ylx1MDQ0Ylx1MDQ0MFx1MDQzYVx1MDRhZlx1MDQzOVx1MDQzNVx1MDQzYV9cdTA0OWJcdTA0MzBcdTA0''@;'; put 'put ''MzdcdTA0MzBcdTA0M2RfXHUwNDliXHUwNDMwXHUwNDQwXHUwNDMwXHUwNDQ4XHUwNDMwX1x1MDQzNlx1MDQzNVx1MDQzYlx1MDQ0Mlx1MDQzZVx1MDQ5Ylx1MDQ0MVx1MDQzMFx1MDQzZCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDliXHUwNDMwXHUwNGEzX1x1MDQzMFx1MDQ5Ylx1''@;'; put 'put ''MDQzZl9cdTA0M2RcdTA0MzBcdTA0NDNfXHUwNDQxXHUwNGQ5XHUwNDQzX1x1MDQzY1x1MDQzMFx1MDQzY19cdTA0M2NcdTA0MzBcdTA0NDNfXHUwNDQ4XHUwNDU2XHUwNDNiX1x1MDQ0Mlx1MDQzMFx1MDQzY19cdTA0OWJcdTA0NGJcdTA0NDBfXHUwNDliXHUwNDMwXHUwNDM3X1x1MDQ5Ylx1''@;'; put 'put ''MDQzMFx1MDQ0MF9cdTA0MzZcdTA0MzVcdTA0M2IiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQzNlx1MDQzNVx1MDQzYVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0MzRcdTA0YWZcdTA0MzlcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDQxXHUwNDM1XHUw''@;'; put 'put ''NDM5XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQ0MVx1MDRkOVx1MDQ0MFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0MzFcdTA0MzVcdTA0MzlcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDM2XHUwNGIxXHUwNDNjXHUwNDMwX1x1MDQ0MVx1''@;'; put 'put ''MDQzNVx1MDQzZFx1MDQzMVx1MDQ1NiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MzZcdTA0MzVcdTA0M2FfXHUwNDM0XHUwNGFmXHUwNDM5X1x1MDQ0MVx1MDQzNVx1MDQzOV9cdTA0NDFcdTA0ZDlcdTA0NDBfXHUwNDMxXHUwNDM1XHUwNDM5X1x1MDQzNlx1MDRiMVx1MDQzY19c''@;'; put 'put ''dTA0NDFcdTA0MzVcdTA0M2QiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzNlx1MDQzYV9cdTA0MzRcdTA0MzlfXHUwNDQxXHUwNDM5X1x1MDQ0MVx1MDQ0MF9cdTA0MzFcdTA0MzlfXHUwNDM2XHUwNDNjX1x1MDQ0MVx1MDQzZCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6''@;'; put 'put ''IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTFcdTA0YWZcdTA0MzNcdTA0NTZcdTA0M2QgXHUw''@;'; put 'put ''NDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsbmV4dERheToiW1x1MDQxNVx1MDQ0MFx1MDQ0Mlx1MDQzNVx1MDRhMyBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsbGFz''@;'; put 'put ''dERheToiW1x1MDQxYVx1MDQzNVx1MDQ0OFx1MDQzNSBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixsYXN0V2VlazoiW1x1MDRlOFx1MDQ0Mlx1MDQzYVx1MDQzNVx1MDQzZCBcdTA0MzBcdTA0M2ZcdTA0NDJcdTA0MzBcdTA0M2RcdTA0NGJcdTA0YTNdIGRkZGQgW1x1MDQ0''@;'; put 'put ''MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDQ1Nlx1MDQ0OFx1MDQ1Nlx1MDQzZFx1MDQzNFx1MDQzNSIscGFzdDoiJXMgXHUwNDMxXHUwNGIxXHUwNDQwXHUwNDRiXHUwNDNkIixzOiJcdTA0MzFcdTA0NTZc''@;'; put 'put ''dTA0NDBcdTA0M2RcdTA0MzVcdTA0NDhcdTA0MzUgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQy''@;'; put 'put ''IixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixoOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyIixkOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDNhXHUw''@;'; put 'put ''NGFmXHUwNDNkIixkZDoiJWQgXHUwNDNhXHUwNGFmXHUwNDNkIixNOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDMwXHUwNDM5IixNTToiJWQgXHUwNDMwXHUwNDM5Iix5OiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDM2XHUwNDRiXHUwNDNiIix5eToiJWQgXHUwNDM2XHUwNDRiXHUwNDNiIn0s''@;'; put 'put ''ZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDQ4XHUwNDU2fFx1MDQ0OFx1MDQ0YikvLG9yZGluYWw6ZnVuY3Rpb24oQSl7cmV0dXJuIEErKGNbQV18fGNbQSUxMF18fGNbQT49MTAwPzEwMDpudWxsXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShoKDk3NTg2KSl9LDY4ODA3''@;'; put 'put ''KGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz17MToiXHUxN2UxIiwyOiJcdTE3ZTIiLDM6Ilx1MTdlMyIsNDoiXHUxN2U0Iiw1OiJcdTE3ZTUiLDY6Ilx1MTdlNiIsNzoiXHUxN2U3Iiw4OiJcdTE3ZTgiLDk6Ilx1MTdlOSIsMDoiXHUxN2UwIn0scz17Ilx1MTdlMSI6''@;'; put 'put ''IjEiLCJcdTE3ZTIiOiIyIiwiXHUxN2UzIjoiMyIsIlx1MTdlNCI6IjQiLCJcdTE3ZTUiOiI1IiwiXHUxN2U2IjoiNiIsIlx1MTdlNyI6IjciLCJcdTE3ZTgiOiI4IiwiXHUxN2U5IjoiOSIsIlx1MTdlMCI6IjAifTt5LmRlZmluZUxvY2FsZSgia20iLHttb250aHM6Ilx1MTc5OFx1MTc4MFx1''@;'; put 'put ''MTc5YVx1MTdiNl9cdTE3ODBcdTE3YmJcdTE3OThcdTE3ZDJcdTE3OTdcdTE3YzhfXHUxNzk4XHUxN2I4XHUxNzkzXHUxN2I2X1x1MTc5OFx1MTdjMVx1MTc5Zlx1MTdiNl9cdTE3YTdcdTE3OWZcdTE3OTdcdTE3YjZfXHUxNzk4XHUxN2I3XHUxNzkwXHUxN2JiXHUxNzkzXHUxN2I2X1x1MTc4''@;'; put 'put ''MFx1MTc4MFx1MTdkMlx1MTc4MFx1MTc4YVx1MTdiNl9cdTE3OWZcdTE3YjhcdTE3YTBcdTE3YjZfXHUxNzgwXHUxNzg5XHUxN2QyXHUxNzg5XHUxN2I2X1x1MTc4Zlx1MTdiYlx1MTc5Ylx1MTdiNl9cdTE3OWNcdTE3YjdcdTE3ODVcdTE3ZDJcdTE3ODZcdTE3YjdcdTE3ODBcdTE3YjZfXHUx''@;'; put 'put ''NzkyXHUxN2QyXHUxNzkzXHUxN2JjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTE3OThcdTE3ODBcdTE3OWFcdTE3YjZfXHUxNzgwXHUxN2JiXHUxNzk4XHUxN2QyXHUxNzk3XHUxN2M4X1x1MTc5OFx1MTdiOFx1MTc5M1x1MTdiNl9cdTE3OThcdTE3YzFcdTE3OWZcdTE3YjZfXHUxN2E3''@;'; put 'put ''XHUxNzlmXHUxNzk3XHUxN2I2X1x1MTc5OFx1MTdiN1x1MTc5MFx1MTdiYlx1MTc5M1x1MTdiNl9cdTE3ODBcdTE3ODBcdTE3ZDJcdTE3ODBcdTE3OGFcdTE3YjZfXHUxNzlmXHUxN2I4XHUxN2EwXHUxN2I2X1x1MTc4MFx1MTc4OVx1MTdkMlx1MTc4OVx1MTdiNl9cdTE3OGZcdTE3YmJcdTE3''@;'; put 'put ''OWJcdTE3YjZfXHUxNzljXHUxN2I3XHUxNzg1XHUxN2QyXHUxNzg2XHUxN2I3XHUxNzgwXHUxN2I2X1x1MTc5Mlx1MTdkMlx1MTc5M1x1MTdiYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUxN2EyXHUxN2I2XHUxNzkxXHUxN2I3XHUxNzhmXHUxN2QyXHUxNzk5X1x1MTc4NVx1MTdkMFx1MTc5''@;'; put 'put ''M1x1MTdkMlx1MTc5MV9cdTE3YTJcdTE3ODRcdTE3ZDJcdTE3ODJcdTE3YjZcdTE3OWFfXHUxNzk2XHUxN2JiXHUxNzkyX1x1MTc5Nlx1MTdkMlx1MTc5YVx1MTdhMFx1MTc5Zlx1MTdkMlx1MTc5NFx1MTc4Zlx1MTdiN1x1MTdjZF9cdTE3OWZcdTE3YmJcdTE3ODBcdTE3ZDJcdTE3OWFfXHUx''@;'; put 'put ''NzlmXHUxN2M1XHUxNzlhXHUxN2NkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MTdhMlx1MTdiNl9cdTE3ODVfXHUxN2EyX1x1MTc5Nl9cdTE3OTZcdTE3ZDJcdTE3OWFfXHUxNzlmXHUxN2JiX1x1MTc5ZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUxN2EyXHUxN2I2X1x1MTc4''@;'; put 'put ''NV9cdTE3YTJfXHUxNzk2X1x1MTc5Nlx1MTdkMlx1MTc5YV9cdTE3OWZcdTE3YmJfXHUxNzlmIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExM''@;'; put 'put ''TDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUxNzk2XHUxN2QyXHUxNzlhXHUxN2I5XHUxNzgwfFx1MTc5Ylx1MTdkMlx1MTc4NFx1MTdiNlx1MTc4NS8saXNQTTpmdW5jdGlvbih2KXtyZXR1cm4iXHUxNzliXHUx''@;'; put 'put ''N2QyXHUxNzg0XHUxN2I2XHUxNzg1Ij09PXZ9LG1lcmlkaWVtOmZ1bmN0aW9uKHYsQyx3KXtyZXR1cm4gdjwxMj8iXHUxNzk2XHUxN2QyXHUxNzlhXHUxN2I5XHUxNzgwIjoiXHUxNzliXHUxN2QyXHUxNzg0XHUxN2I2XHUxNzg1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTE3OTBcdTE3ZDJc''@;'; put 'put ''dTE3ODRcdTE3YzNcdTE3OTNcdTE3YzFcdTE3YzcgXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsbmV4dERheToiW1x1MTc5Zlx1MTdkMlx1MTdhMlx1MTdjMlx1MTc4MCBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixuZXh0V2VlazoiZGRkZCBbXHUxNzk4XHUxN2M5XHUxN2M0''@;'; put 'put ''XHUxNzg0XSBMVCIsbGFzdERheToiW1x1MTc5OFx1MTdkMlx1MTc5Zlx1MTdiN1x1MTc5Ylx1MTc5OFx1MTdiN1x1MTc4OSBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixsYXN0V2VlazoiZGRkZCBbXHUxNzlmXHUxNzk0XHUxN2QyXHUxNzhmXHUxN2I2XHUxN2EwXHUxN2NkXHUxNzk4''@;'; put 'put ''XHUxN2JiXHUxNzkzXSBbXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTE3OTFcdTE3YzBcdTE3OGYiLHBhc3Q6IiVzXHUxNzk4XHUxN2JiXHUxNzkzIixzOiJcdTE3OTRcdTE3YzlcdTE3YmJcdTE3OTNcdTE3ZDJc''@;'; put 'put ''dTE3OThcdTE3YjZcdTE3OTNcdTE3OWNcdTE3YjdcdTE3OTNcdTE3YjZcdTE3OTFcdTE3YjgiLHNzOiIlZCBcdTE3OWNcdTE3YjdcdTE3OTNcdTE3YjZcdTE3OTFcdTE3YjgiLG06Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc5M1x1MTdiNlx1MTc5MVx1MTdiOCIsbW06IiVkIFx1MTc5M1x1MTdi''@;'; put 'put ''Nlx1MTc5MVx1MTdiOCIsaDoiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0IixoaDoiJWQgXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0IixkOiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3OTBcdTE3ZDJcdTE3ODRcdTE3YzMiLGRkOiIlZCBcdTE3OTBcdTE3ZDJcdTE3''@;'; put 'put ''ODRcdTE3YzMiLE06Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc4MVx1MTdjMiIsTU06IiVkIFx1MTc4MVx1MTdjMiIseToiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzg2XHUxN2QyXHUxNzkzXHUxN2I2XHUxN2M2Iix5eToiJWQgXHUxNzg2XHUxN2QyXHUxNzkzXHUxN2I2XHUxN2M2In0sZGF5T2ZN''@;'; put 'put ''b250aE9yZGluYWxQYXJzZTovXHUxNzkxXHUxN2I4XGR7MSwyfS8sb3JkaW5hbDoiXHUxNzkxXHUxN2I4JWQiLHByZXBhcnNlOmZ1bmN0aW9uKHYpe3JldHVybiB2LnJlcGxhY2UoL1tcdTE3ZTFcdTE3ZTJcdTE3ZTNcdTE3ZTRcdTE3ZTVcdTE3ZTZcdTE3ZTdcdTE3ZThcdTE3ZTlcdTE3ZTBd''@;'; put 'put ''L2csZnVuY3Rpb24oQyl7cmV0dXJuIHNbQ119KX0scG9zdGZvcm1hdDpmdW5jdGlvbih2KXtyZXR1cm4gdi5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEMpe3JldHVybiBjW0NdfSl9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShoKDk3NTg2KSl9LDY1MDgyKGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgYz17MToiXHUwY2U3IiwyOiJcdTBjZTgiLDM6Ilx1MGNlOSIsNDoiXHUwY2VhIiw1OiJcdTBjZWIiLDY6Ilx1MGNlYyIsNzoiXHUwY2VkIiw4OiJcdTBjZWUiLDk6Ilx1MGNlZiIsMDoiXHUwY2U2In0scz17Ilx1MGNlNyI6IjEiLCJcdTBjZTgiOiIyIiwiXHUwY2U5''@;'; put 'put ''IjoiMyIsIlx1MGNlYSI6IjQiLCJcdTBjZWIiOiI1IiwiXHUwY2VjIjoiNiIsIlx1MGNlZCI6IjciLCJcdTBjZWUiOiI4IiwiXHUwY2VmIjoiOSIsIlx1MGNlNiI6IjAifTt5LmRlZmluZUxvY2FsZSgia24iLHttb250aHM6Ilx1MGM5Y1x1MGNhOFx1MGNiNVx1MGNiMFx1MGNiZl9cdTBjYWJc''@;'; put 'put ''dTBjYzZcdTBjYWNcdTBjY2RcdTBjYjBcdTBjYjVcdTBjYjBcdTBjYmZfXHUwY2FlXHUwY2JlXHUwY2IwXHUwY2NkXHUwYzlhXHUwY2NkX1x1MGM4Zlx1MGNhYVx1MGNjZFx1MGNiMFx1MGNiZlx1MGNiMlx1MGNjZF9cdTBjYWVcdTBjYzZcdTBjZDVfXHUwYzljXHUwY2MyXHUwY2E4XHUwY2Nk''@;'; put 'put ''X1x1MGM5Y1x1MGNjMVx1MGNiMlx1MGNjNlx1MGNkNl9cdTBjODZcdTBjOTdcdTBjYjhcdTBjY2RcdTBjOWZcdTBjY2RfXHUwY2I4XHUwY2M2XHUwY2FhXHUwY2NkXHUwYzlmXHUwY2M2XHUwYzgyXHUwY2FjXHUwY2IwXHUwY2NkX1x1MGM4NVx1MGM5NVx1MGNjZFx1MGM5Zlx1MGNjNlx1MGNj''@;'; put 'put ''Mlx1MGNkNVx1MGNhY1x1MGNiMFx1MGNjZF9cdTBjYThcdTBjYjVcdTBjYzZcdTBjODJcdTBjYWNcdTBjYjBcdTBjY2RfXHUwY2ExXHUwY2JmXHUwY2I4XHUwY2M2XHUwYzgyXHUwY2FjXHUwY2IwXHUwY2NkIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBjOWNcdTBjYThfXHUwY2FiXHUw''@;'; put 'put ''Y2M2XHUwY2FjXHUwY2NkXHUwY2IwX1x1MGNhZVx1MGNiZVx1MGNiMFx1MGNjZFx1MGM5YVx1MGNjZF9cdTBjOGZcdTBjYWFcdTBjY2RcdTBjYjBcdTBjYmZcdTBjYjJcdTBjY2RfXHUwY2FlXHUwY2M2XHUwY2Q1X1x1MGM5Y1x1MGNjMlx1MGNhOFx1MGNjZF9cdTBjOWNcdTBjYzFcdTBjYjJc''@;'; put 'put ''dTBjYzZcdTBjZDZfXHUwYzg2XHUwYzk3XHUwY2I4XHUwY2NkXHUwYzlmXHUwY2NkX1x1MGNiOFx1MGNjNlx1MGNhYVx1MGNjZFx1MGM5Zlx1MGNjNlx1MGM4Ml9cdTBjODVcdTBjOTVcdTBjY2RcdTBjOWZcdTBjYzZcdTBjYzJcdTBjZDVfXHUwY2E4XHUwY2I1XHUwY2M2XHUwYzgyX1x1MGNh''@;'; put 'put ''MVx1MGNiZlx1MGNiOFx1MGNjNlx1MGM4MiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBjYWRcdTBjYmVcdTBjYThcdTBjYzFcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2I4XHUwY2M2XHUwY2MyXHUwY2Q1XHUwY2FlXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNh''@;'; put 'put ''ZVx1MGM4Mlx1MGM5N1x1MGNiM1x1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYWNcdTBjYzFcdTBjYTdcdTBjYjVcdTBjYmVcdTBjYjBfXHUwYzk3XHUwY2MxXHUwY2IwXHUwY2MxXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNiNlx1MGNjMVx1MGM5NVx1MGNjZFx1MGNiMFx1MGNiNVx1MGNiZVx1MGNi''@;'; put 'put ''MF9cdTBjYjZcdTBjYThcdTBjYmZcdTBjYjVcdTBjYmVcdTBjYjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwY2FkXHUwY2JlXHUwY2E4XHUwY2MxX1x1MGNiOFx1MGNjNlx1MGNjMlx1MGNkNVx1MGNhZV9cdTBjYWVcdTBjODJcdTBjOTdcdTBjYjNfXHUwY2FjXHUwY2MxXHUwY2E3''@;'; put 'put ''X1x1MGM5N1x1MGNjMVx1MGNiMFx1MGNjMV9cdTBjYjZcdTBjYzFcdTBjOTVcdTBjY2RcdTBjYjBfXHUwY2I2XHUwY2E4XHUwY2JmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBjYWRcdTBjYmVfXHUwY2I4XHUwY2M2XHUwY2MyXHUwY2Q1X1x1MGNhZVx1MGM4Ml9cdTBjYWNcdTBjYzFf''@;'; put 'put ''XHUwYzk3XHUwY2MxX1x1MGNiNlx1MGNjMV9cdTBjYjYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSIsTExMTDoiZGRkZCwgRCBNTU1N''@;'; put 'put ''IFlZWVksIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYzg3XHUwYzgyXHUwY2E2XHUwY2MxXSBMVCIsbmV4dERheToiW1x1MGNhOFx1MGNiZVx1MGNiM1x1MGNjNl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGNhOFx1MGNiZlx1MGNhOFx1MGNjZFx1MGNh''@;'; put 'put ''OFx1MGNjNl0gTFQiLGxhc3RXZWVrOiJbXHUwYzk1XHUwY2M2XHUwY2MyXHUwY2E4XHUwY2M2XHUwY2FmXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwY2E4XHUwYzgyXHUwY2E0XHUwY2IwIixwYXN0OiIlcyBcdTBjYjlcdTBjYmZcdTBjODJc''@;'; put 'put ''dTBjYTZcdTBjYzYiLHM6Ilx1MGM5NVx1MGNjNlx1MGNiMlx1MGNiNVx1MGNjMSBcdTBjOTVcdTBjY2RcdTBjYjdcdTBjYTNcdTBjOTdcdTBjYjNcdTBjYzEiLHNzOiIlZCBcdTBjYjhcdTBjYzZcdTBjOTVcdTBjYzZcdTBjODJcdTBjYTFcdTBjYzFcdTBjOTdcdTBjYjNcdTBjYzEiLG06Ilx1''@;'; put 'put ''MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYThcdTBjYmZcdTBjYWVcdTBjYmZcdTBjYjciLG1tOiIlZCBcdTBjYThcdTBjYmZcdTBjYWVcdTBjYmZcdTBjYjciLGg6Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjOTdcdTBjODJcdTBjOWZcdTBjYzYiLGhoOiIlZCBcdTBjOTdcdTBj''@;'; put 'put ''ODJcdTBjOWZcdTBjYzYiLGQ6Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYTZcdTBjYmZcdTBjYTgiLGRkOiIlZCBcdTBjYTZcdTBjYmZcdTBjYTgiLE06Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYTRcdTBjYmZcdTBjODJcdTBjOTdcdTBjYjNcdTBjYzEiLE1NOiIlZCBc''@;'; put 'put ''dTBjYTRcdTBjYmZcdTBjODJcdTBjOTdcdTBjYjNcdTBjYzEiLHk6Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYjVcdTBjYjBcdTBjY2RcdTBjYjciLHl5OiIlZCBcdTBjYjVcdTBjYjBcdTBjY2RcdTBjYjcifSxwcmVwYXJzZTpmdW5jdGlvbih2KXtyZXR1cm4gdi5yZXBsYWNlKC9b''@;'; put 'put ''XHUwY2U3XHUwY2U4XHUwY2U5XHUwY2VhXHUwY2ViXHUwY2VjXHUwY2VkXHUwY2VlXHUwY2VmXHUwY2U2XS9nLGZ1bmN0aW9uKEMpe3JldHVybiBzW0NdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odil7cmV0dXJuIHYucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihDKXtyZXR1cm4gY1tDXX0pfSxt''@;'; put 'put ''ZXJpZGllbVBhcnNlOi9cdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmZ8XHUwY2FjXHUwY2M2XHUwY2IzXHUwY2JmXHUwYzk3XHUwY2NkXHUwYzk3XHUwY2M2fFx1MGNhZVx1MGNhN1x1MGNjZFx1MGNhZlx1MGNiZVx1MGNiOVx1MGNjZFx1MGNhOHxcdTBjYjhcdTBjODJcdTBj''@;'; put 'put ''OWNcdTBjYzYvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih2LEMpe3JldHVybiAxMj09PXYmJih2PTApLCJcdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmYiPT09Qz92PDQ/djp2KzEyOiJcdTBjYWNcdTBjYzZcdTBjYjNcdTBjYmZcdTBjOTdcdTBjY2RcdTBjOTdcdTBjYzYiPT09''@;'; put 'put ''Qz92OiJcdTBjYWVcdTBjYTdcdTBjY2RcdTBjYWZcdTBjYmVcdTBjYjlcdTBjY2RcdTBjYTgiPT09Qz92Pj0xMD92OnYrMTI6Ilx1MGNiOFx1MGM4Mlx1MGM5Y1x1MGNjNiI9PT1DP3YrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbih2LEMsdyl7cmV0dXJuIHY8ND8iXHUwY2IwXHUwY2Jl''@;'; put 'put ''XHUwY2E0XHUwY2NkXHUwY2IwXHUwY2JmIjp2PDEwPyJcdTBjYWNcdTBjYzZcdTBjYjNcdTBjYmZcdTBjOTdcdTBjY2RcdTBjOTdcdTBjYzYiOnY8MTc/Ilx1MGNhZVx1MGNhN1x1MGNjZFx1MGNhZlx1MGNiZVx1MGNiOVx1MGNjZFx1MGNhOCI6djwyMD8iXHUwY2I4XHUwYzgyXHUwYzljXHUw''@;'; put 'put ''Y2M2IjoiXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUwY2JmIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTBjYThcdTBjYzZcdTBjZDUpLyxvcmRpbmFsOmZ1bmN0aW9uKHYpe3JldHVybiB2KyJcdTBjYThcdTBjYzZcdTBjZDUifSx3ZWVrOntkb3c6MCxkb3k6''@;'; put 'put ''Nn19KX0oaCg5NzU4NikpfSwyMDEzNyhmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5kZWZpbmVMb2NhbGUoImtvIix7bW9udGhzOiIxXHVjNmQ0XzJcdWM2ZDRfM1x1YzZkNF80XHVjNmQ0XzVcdWM2ZDRfNlx1YzZkNF83XHVjNmQ0XzhcdWM2ZDRfOVx1YzZkNF8xMFx1YzZk''@;'; put 'put ''NF8xMVx1YzZkNF8xMlx1YzZkNCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1YzZkNF8yXHVjNmQ0XzNcdWM2ZDRfNFx1YzZkNF81XHVjNmQ0XzZcdWM2ZDRfN1x1YzZkNF84XHVjNmQ0XzlcdWM2ZDRfMTBcdWM2ZDRfMTFcdWM2ZDRfMTJcdWM2ZDQiLnNwbGl0KCJfIiksd2Vla2RheXM6''@;'; put 'put ''Ilx1Yzc3Y1x1YzY5NFx1Yzc3Y19cdWM2ZDRcdWM2OTRcdWM3N2NfXHVkNjU0XHVjNjk0XHVjNzdjX1x1YzIxOFx1YzY5NFx1Yzc3Y19cdWJhYTlcdWM2OTRcdWM3N2NfXHVhZTA4XHVjNjk0XHVjNzdjX1x1ZDFhMFx1YzY5NFx1Yzc3YyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdWM3''@;'; put 'put ''N2NfXHVjNmQ0X1x1ZDY1NF9cdWMyMThfXHViYWE5X1x1YWUwOF9cdWQxYTAiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1Yzc3Y19cdWM2ZDRfXHVkNjU0X1x1YzIxOF9cdWJhYTlfXHVhZTA4X1x1ZDFhMCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJB''@;'; put 'put ''IGg6bW06c3MiLEw6IllZWVkuTU0uREQuIixMTDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MiLExMTDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MgQSBoOm1tIixMTExMOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyBkZGRkIEEgaDptbSIsbDoiWVlZWS5NTS5ERC4iLGxsOiJZWVlZXHViMTQ0''@;'; put 'put ''IE1NTU0gRFx1Yzc3YyIsbGxsOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyBBIGg6bW0iLGxsbGw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIGRkZGQgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilx1YzYyNFx1YjI5OCBMVCIsbmV4dERheToiXHViMGI0XHVjNzdjIExUIixuZXh0V2Vl''@;'; put 'put ''azoiZGRkZCBMVCIsbGFzdERheToiXHVjNWI0XHVjODFjIExUIixsYXN0V2VlazoiXHVjOWMwXHViMDljXHVjOGZjIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1ZDZjNCIscGFzdDoiJXMgXHVjODA0IixzOiJcdWJhODcgXHVjZDA4IixzczoiJWRc''@;'; put 'put ''dWNkMDgiLG06IjFcdWJkODQiLG1tOiIlZFx1YmQ4NCIsaDoiXHVkNTVjIFx1YzJkY1x1YWMwNCIsaGg6IiVkXHVjMmRjXHVhYzA0IixkOiJcdWQ1NThcdWI4ZTgiLGRkOiIlZFx1Yzc3YyIsTToiXHVkNTVjIFx1YjJlYyIsTU06IiVkXHViMmVjIix5OiJcdWM3N2MgXHViMTQ0Iix5eToiJWRc''@;'; put 'put ''dWIxNDQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1Yzc3Y3xcdWM2ZDR8XHVjOGZjKS8sb3JkaW5hbDpmdW5jdGlvbihzLEEpe3N3aXRjaChBKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBzKyJcdWM3N2MiO2Nhc2UiTSI6cmV0dXJuIHMrIlx1YzZkNCI7''@;'; put 'put ''Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBzKyJcdWM4ZmMiO2RlZmF1bHQ6cmV0dXJuIHN9fSxtZXJpZGllbVBhcnNlOi9cdWM2MjRcdWM4MDR8XHVjNjI0XHVkNmM0Lyxpc1BNOmZ1bmN0aW9uKHMpe3JldHVybiJcdWM2MjRcdWQ2YzQiPT09c30sbWVyaWRpZW06ZnVuY3Rpb24ocyxBLHYpe3Jl''@;'; put 'put ''dHVybiBzPDEyPyJcdWM2MjRcdWM4MDQiOiJcdWM2MjRcdWQ2YzQifX0pfShoKDk3NTg2KSl9LDYzNzQ0KGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjKHYsQyx3LFMpe3ZhciBMPXtzOlsiXHhlN2VuZCBzYW5ceGVleWUiLCJceGU3ZW5kIHNhblx4ZWV5ZXlh''@;'; put 'put ''biJdLHNzOlt2KyIgc2FuXHhlZXllIix2KyIgc2FuXHhlZXlleWFuIl0sbTpbImRlcVx4ZWVxZXllayIsImRlcVx4ZWVxZXlla1x4ZWEiXSxtbTpbdisiIGRlcVx4ZWVxZSIsdisiIGRlcVx4ZWVxZXlhbiJdLGg6WyJzYWV0ZWsiLCJzYWV0ZWtceGVhIl0saGg6W3YrIiBzYWV0Iix2KyIgc2Fl''@;'; put 'put ''dGFuIl0sZDpbInJvamVrIiwicm9qZWtceGVhIl0sZGQ6W3YrIiByb2oiLHYrIiByb2phbiJdLHc6WyJoZWZ0ZXllayIsImhlZnRleWVrXHhlYSJdLHd3Olt2KyIgaGVmdGUiLHYrIiBoZWZ0ZXlhbiJdLE06WyJtZWhlayIsIm1laGVrXHhlYSJdLE1NOlt2KyIgbWVoIix2KyIgbWVoYW4iXSx5''@;'; put 'put ''Olsic2FsZWsiLCJzYWxla1x4ZWEiXSx5eTpbdisiIHNhbCIsdisiIHNhbGFuIl19O3JldHVybiBDP0xbd11bMF06TFt3XVsxXX15LmRlZmluZUxvY2FsZSgia3Uta21yIix7bW9udGhzOiJSXHhlYWJlbmRhbl9TaWJhdF9BZGFyX05ceGVlc2FuX0d1bGFuX0hlelx4ZWVyYW5fVFx4ZWVybWVo''@;'; put 'put ''X1RlYmF4X1x4Y2Vsb25fQ290bWVoX01pamRhcl9CZXJmYW5iYXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IlJceGVhYl9TaWJfQWRhX05ceGVlc19HdWxfSGV6X1RceGVlcl9UZWJfXHhjZWxvX0NvdF9NaWpfQmVyIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6''@;'; put 'put ''Illla1x1MDE1ZmVtX0R1XHUwMTVmZW1fU1x4ZWFcdTAxNWZlbV9ceGM3YXJcdTAxNWZlbV9QXHhlYW5jXHUwMTVmZW1fXHhjZW5fXHUwMTVlZW1ceGVlIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Illla19EdV9TXHhlYV9ceGM3YXJfUFx4ZWFuX1x4Y2VuX1x1MDE1ZWVtIi5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzTWluOiJZZV9EdV9TXHhlYV9ceGM3YV9QXHhlYV9ceGNlbl9cdTAxNWVlIi5zcGxpdCgiXyIpLG1lcmlkaWVtOmZ1bmN0aW9uKHYsQyx3KXtyZXR1cm4gdjwxMj93PyJibiI6IkJOIjp3PyJwbiI6IlBOIn0sbWVyaWRpZW1QYXJzZTovYm58Qk58cG58UE4vLGxvbmdEYXRl''@;'; put 'put ''Rm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEbyBNTU1NW2FdIFlZWVlbYW5dIixMTEw6IkRvIE1NTU1bYV0gWVlZWVthbl0gSEg6bW0iLExMTEw6ImRkZGQsIERvIE1NTU1bYV0gWVlZWVthbl0gSEg6bW0iLGxsOiJEbyBNTU1bLl0gWVlZWVth''@;'; put 'put ''bl0iLGxsbDoiRG8gTU1NWy5dIFlZWVlbYW5dIEhIOm1tIixsbGxsOiJkZGRbLl0sIERvIE1NTVsuXSBZWVlZW2FuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHhjZXJvIGRpIHNhZXRdIExUIFtkZV0iLG5leHREYXk6IltTaWJceGVhIGRpIHNhZXRdIExUIFtkZV0iLG5leHRXZWVr''@;'; put 'put ''OiJkZGRkIFtkaSBzYWV0XSBMVCBbZGVdIixsYXN0RGF5OiJbRHVoIGRpIHNhZXRdIExUIFtkZV0iLGxhc3RXZWVrOiJkZGRkW2EgYm9yXHhlZSBkaSBzYWV0XSBMVCBbZGVdIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkaSAlcyBkZSIscGFzdDoiYmVyXHhlZSAlcyIs''@;'; put 'put ''czpjLHNzOmMsbTpjLG1tOmMsaDpjLGhoOmMsZDpjLGRkOmMsdzpjLHd3OmMsTTpjLE1NOmMseTpjLHl5OmN9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oPzp5XHhlYXxceGVhfFwuKS8sb3JkaW5hbDpmdW5jdGlvbih2LEMpe3ZhciB3PUMudG9Mb3dlckNhc2UoKTtyZXR1cm4g''@;'; put 'put ''dy5pbmNsdWRlcygidyIpfHx3LmluY2x1ZGVzKCJtIik/disiLiI6ditmdW5jdGlvbiBzKHYpe3ZhciBDPSh2PSIiK3YpLnN1YnN0cmluZyh2Lmxlbmd0aC0xKSx3PXYubGVuZ3RoPjE/di5zdWJzdHJpbmcodi5sZW5ndGgtMik6IiI7cmV0dXJuIDEyPT13fHwxMz09d3x8IjIiIT1DJiYiMyIh''@;'; put 'put ''PUMmJiI1MCIhPXcmJiI3MCIhPUMmJiI4MCIhPUM/Ilx4ZWEiOiJ5XHhlYSJ9KHYpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oaCg5NzU4NikpfSw3MDExMShmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7dmFyIGM9ezE6Ilx1MDY2MSIsMjoiXHUwNjYyIiwzOiJcdTA2NjMiLDQ6''@;'; put 'put ''Ilx1MDY2NCIsNToiXHUwNjY1Iiw2OiJcdTA2NjYiLDc6Ilx1MDY2NyIsODoiXHUwNjY4Iiw5OiJcdTA2NjkiLDA6Ilx1MDY2MCJ9LHM9eyJcdTA2NjEiOiIxIiwiXHUwNjYyIjoiMiIsIlx1MDY2MyI6IjMiLCJcdTA2NjQiOiI0IiwiXHUwNjY1IjoiNSIsIlx1MDY2NiI6IjYiLCJcdTA2Njci''@;'; put 'put ''OiI3IiwiXHUwNjY4IjoiOCIsIlx1MDY2OSI6IjkiLCJcdTA2NjAiOiIwIn0sQT1bIlx1MDZhOVx1MDYyN1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDZjYyBcdTA2MmZcdTA2NDhcdTA2NDhcdTA2ZDVcdTA2NDUiLCJcdTA2MzRcdTA2NDhcdTA2MjhcdTA2MjdcdTA2MmEiLCJcdTA2MjZcdTA2Mjdc''@;'; put 'put ''dTA2MzJcdTA2MjdcdTA2MzEiLCJcdTA2NDZcdTA2Y2NcdTA2MzNcdTA2MjdcdTA2NDYiLCJcdTA2MjZcdTA2MjdcdTA2Y2NcdTA2MjdcdTA2MzEiLCJcdTA2MmRcdTA2NDhcdTA2MzJcdTA2ZDVcdTA2Y2NcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MmFcdTA2ZDVcdTA2NDVcdTA2NDVcdTA2''@;'; put 'put ''NDhcdTA2MzIiLCJcdTA2MjZcdTA2MjdcdTA2MjgiLCJcdTA2MjZcdTA2ZDVcdTA2Y2NcdTA2NDRcdTA2NDhcdTA2NDhcdTA2NDQiLCJcdTA2MmFcdTA2MzRcdTA2MzFcdTA2Y2NcdTA2NDZcdTA2Y2MgXHUwNmNjXHUwNmQ1XHUwNjQzXHUwNmQ1XHUwNjQ1IiwiXHUwNjJhXHUwNjM0XHUwNjMx''@;'; put 'put ''XHUwNmNjXHUwNjQ2XHUwNmNjIFx1MDYyZlx1MDY0OFx1MDY0OFx1MDZkNVx1MDY0NSIsIlx1MDY0M1x1MDYyN1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDZjYyBcdTA2Y2NcdTA2ZDVcdTA2YTlcdTA2ZDVcdTA2NDUiXTt5LmRlZmluZUxvY2FsZSgia3UiLHttb250aHM6QSxtb250aHNTaG9ydDpB''@;'; put 'put ''LHdlZWtkYXlzOiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDNcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjJmXHUwNjQ4XHUwNjQ4XHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDYzM1x1MDZjZVx1MDYzNFx1MDY0N1x1''@;'; put 'put ''MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2ODZcdTA2NDhcdTA2MjdcdTA2MzFcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjdlXHUwNmNlXHUwNjQ2XHUwNjJjXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1''@;'; put 'put ''MDY0N1x1MDY0N1x1MjAwY1x1MDZjY1x1MDY0Nlx1MDZjY19cdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGMiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDYyZlx1MDY0''@;'; put 'put ''OFx1MDY0OFx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2MzNcdTA2Y2VcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjg2XHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDY3ZVx1MDZjZVx1MDY0Nlx1MDYyY1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0''@;'; put 'put ''NV9cdTA2NDdcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2NDZcdTA2Y2NfXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2Y2NfXHUwNjJmX1x1MDYzM19cdTA2ODZfXHUwNjdlX1x1MDY0N19cdTA2MzQiLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBh''@;'; put 'put ''cnNlOi9cdTA2MjZcdTA2Y2VcdTA2NDhcdTA2MjdcdTA2MzFcdTA2NDdcdTIwMGN8XHUwNjI4XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjI3XHUwNjQ2XHUwNmNjLyxpc1BNOmZ1bmN0aW9uKEMpe3JldHVybi9cdTA2MjZcdTA2Y2VcdTA2NDhcdTA2MjdcdTA2MzFcdTA2NDdcdTIwMGMvLnRlc3Qo''@;'; put 'put ''Qyl9LG1lcmlkaWVtOmZ1bmN0aW9uKEMsdyxTKXtyZXR1cm4gQzwxMj8iXHUwNjI4XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjI3XHUwNjQ2XHUwNmNjIjoiXHUwNjI2XHUwNmNlXHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjQ3XHUyMDBjIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjZcdTA2NDdc''@;'; put 'put ''dTIwMGNcdTA2NDVcdTA2MzFcdTA2YzYgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbmV4dERheToiW1x1MDYyOFx1MDY0N1x1MjAwY1x1MDZjY1x1MDYyN1x1MDY0Nlx1MDZjYyBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2''@;'; put 'put ''MzFdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbGFzdERheToiW1x1MDYyZlx1MDY0OFx1MDZjZVx1MDY0Nlx1MDZjZSBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixsYXN0''@;'; put 'put ''V2VlazoiZGRkZCBbXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQ0XHUwNjQ3XHUyMDBjICVzIixwYXN0OiIlcyIsczoiXHUwNjg2XHUwNjQ3XHUyMDBjXHUwNjQ2XHUwNjJmIFx1''@;'; put 'put ''MDY4Nlx1MDYzMVx1MDY0M1x1MDY0N1x1MjAwY1x1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyIsc3M6Ilx1MDY4Nlx1MDYzMVx1MDY0M1x1MDY0N1x1MjAwYyAlZCIsbToiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDYyZVx1MDY0OFx1MDY0NFx1MDY0N1x1MjAwY1x1MDY0MyIsbW06IiVk''@;'; put 'put ''IFx1MDYyZVx1MDY0OFx1MDY0NFx1MDY0N1x1MjAwY1x1MDY0MyIsaDoiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMSIsaGg6IiVkIFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMSIsZDoi''@;'; put 'put ''XHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDY5NVx1MDZjNlx1MDY5OCIsZGQ6IiVkIFx1MDY5NVx1MDZjNlx1MDY5OCIsTToiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDY0NVx1MDYyN1x1MDY0Nlx1MDZhZiIsTU06IiVkIFx1MDY0NVx1MDYyN1x1MDY0Nlx1MDZhZiIseToiXHUw''@;'; put 'put ''NmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDYzM1x1MDYyN1x1MDZiNSIseXk6IiVkIFx1MDYzM1x1MDYyN1x1MDZiNSJ9LHByZXBhcnNlOmZ1bmN0aW9uKEMpe3JldHVybiBDLnJlcGxhY2UoL1tcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2Njlc''@;'; put 'put ''dTA2NjBdL2csZnVuY3Rpb24odyl7cmV0dXJuIHNbd119KS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKEMpe3JldHVybiBDLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24odyl7cmV0dXJuIGNbd119KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6''@;'; put 'put ''Nixkb3k6MTJ9fSl9KGgoOTc1ODYpKX0sOTkxODcoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3ZhciBjPXswOiItXHUwNDQ3XHUwNGFmIiwxOiItXHUwNDQ3XHUwNDM4IiwyOiItXHUwNDQ3XHUwNDM4IiwzOiItXHUwNDQ3XHUwNGFmIiw0OiItXHUwNDQ3XHUwNGFmIiw1OiIt''@;'; put 'put ''XHUwNDQ3XHUwNDM4Iiw2OiItXHUwNDQ3XHUwNDRiIiw3OiItXHUwNDQ3XHUwNDM4Iiw4OiItXHUwNDQ3XHUwNDM4Iiw5OiItXHUwNDQ3XHUwNDQzIiwxMDoiLVx1MDQ0N1x1MDQ0MyIsMjA6Ii1cdTA0NDdcdTA0NGIiLDMwOiItXHUwNDQ3XHUwNDQzIiw0MDoiLVx1MDQ0N1x1MDQ0YiIsNTA6''@;'; put 'put ''Ii1cdTA0NDdcdTA0YWYiLDYwOiItXHUwNDQ3XHUwNDRiIiw3MDoiLVx1MDQ0N1x1MDQzOCIsODA6Ii1cdTA0NDdcdTA0MzgiLDkwOiItXHUwNDQ3XHUwNDQzIiwxMDA6Ii1cdTA0NDdcdTA0YWYifTt5LmRlZmluZUxvY2FsZSgia3kiLHttb250aHM6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQz''@;'; put 'put ''MFx1MDQ0MFx1MDQ0Y19cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JcdTA0NGNfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYlx1MDQ0Y19cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRjX1x1''@;'; put 'put ''MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Y19cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0M2RcdTA0M2Vc''@;'; put 'put ''dTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwXHUwNDRjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NGZcdTA0M2RcdTA0MzJfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0''@;'; put 'put ''M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Y19cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGNfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZF9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDRmX1x1MDQzNFx1MDQz''@;'; put 'put ''NVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDE2XHUwNDM1XHUwNDNhXHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4X1x1MDQxNFx1MDRhZlx1MDQzOVx1MDQ0OFx1MDRlOVx1MDQzY1x1MDQzMVx1MDRhZl9cdTA0MjhcdTA0MzVcdTA0MzlcdTA0NDhcdTA0MzVcdTA0M2Nc''@;'; put 'put ''dTA0MzFcdTA0MzhfXHUwNDI4XHUwNDMwXHUwNDQwXHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4X1x1MDQxMVx1MDQzNVx1MDQzOVx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOF9cdTA0MTZcdTA0NDNcdTA0M2NcdTA0MzBfXHUwNDE4XHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMx''@;'; put 'put ''XHUwNDM4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQxNlx1MDQzNVx1MDQzYV9cdTA0MTRcdTA0YWZcdTA0MzlfXHUwNDI4XHUwNDM1XHUwNDM5X1x1MDQyOFx1MDQzMFx1MDQ0MF9cdTA0MTFcdTA0MzVcdTA0MzlfXHUwNDE2XHUwNDQzXHUwNDNjX1x1MDQxOFx1MDQ0OFx1MDQz''@;'; put 'put ''NSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDE2XHUwNDNhX1x1MDQxNFx1MDQzOV9cdTA0MjhcdTA0MzlfXHUwNDI4XHUwNDQwX1x1MDQxMVx1MDQzOV9cdTA0MTZcdTA0M2NfXHUwNDE4XHUwNDQ4Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6''@;'; put 'put ''bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxMVx1MDRhZlx1MDQzM1x1MDRhZlx1MDQzZCBcdTA0NDFcdTA0MzBcdTA0MzBc''@;'; put 'put ''dTA0NDJdIExUIixuZXh0RGF5OiJbXHUwNDJkXHUwNDQwXHUwNDQyXHUwNDM1XHUwNGEzIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixsYXN0RGF5OiJbXHUwNDFhXHUwNDM1XHUwNDQ3XHUwNDRkXHUw''@;'; put 'put ''NDRkIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQiLGxhc3RXZWVrOiJbXHUwNGU4XHUwNDQyXHUwNDNhXHUwNGU5XHUwNDNkIFx1MDQzMFx1MDQzZlx1MDQ0Mlx1MDQzMFx1MDQzZFx1MDQ0Ylx1MDQzZF0gZGRkZCBbXHUwNDNhXHUwNGFmXHUwNDNkXHUwNGFmXSBbXHUwNDQxXHUwNDMw''@;'; put 'put ''XHUwNDMwXHUwNDQyXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNDM4XHUwNDQ3XHUwNDM4XHUwNDNkXHUwNDM0XHUwNDM1IixwYXN0OiIlcyBcdTA0M2NcdTA0NDNcdTA0NDBcdTA0NDNcdTA0M2QiLHM6Ilx1MDQzMVx1MDQzOFx1MDQ0MFx1MDQzZFx1''@;'; put 'put ''MDQzNVx1MDQ0N1x1MDQzNSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLHNzOiIlZCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG06Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0M2NcdTA0YWZcdTA0M2RcdTA0ZTlcdTA0NDIiLG1tOiIlZCBcdTA0''@;'; put 'put ''M2NcdTA0YWZcdTA0M2RcdTA0ZTlcdTA0NDIiLGg6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDIiLGQ6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0M2FcdTA0YWZcdTA0M2QiLGRkOiIlZCBcdTA0M2Fc''@;'; put 'put ''dTA0YWZcdTA0M2QiLE06Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0MzBcdTA0MzkiLE1NOiIlZCBcdTA0MzBcdTA0MzkiLHk6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0MzZcdTA0NGJcdTA0M2IiLHl5OiIlZCBcdTA0MzZcdTA0NGJcdTA0M2IifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9c''@;'; put 'put ''ZHsxLDJ9LShcdTA0NDdcdTA0Mzh8XHUwNDQ3XHUwNDRifFx1MDQ0N1x1MDRhZnxcdTA0NDdcdTA0NDMpLyxvcmRpbmFsOmZ1bmN0aW9uKEEpe3JldHVybiBBKyhjW0FdfHxjW0ElMTBdfHxjW0E+PTEwMD8xMDA6bnVsbF0pfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oaCg5NzU4NikpfSwzNTk2''@;'; put 'put ''OShmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyh3LFMsTCxSKXt2YXIgeD17bTpbImVuZyBNaW51dHQiLCJlbmdlciBNaW51dHQiXSxoOlsiZW5nIFN0b25uIiwiZW5nZXIgU3Rvbm4iXSxkOlsiZWVuIERhZyIsImVuZ2VtIERhZyJdLE06WyJlZSBNb3VudCIs''@;'; put 'put ''ImVuZ2VtIE1vdW50Il0seTpbImVlIEpvZXIiLCJlbmdlbSBKb2VyIl19O3JldHVybiBTP3hbTF1bMF06eFtMXVsxXX1mdW5jdGlvbiB2KHcpe2lmKHc9cGFyc2VJbnQodywxMCksaXNOYU4odykpcmV0dXJuITE7aWYodzwwKXJldHVybiEwO2lmKHc8MTApcmV0dXJuIDQ8PXcmJnc8PTc7aWYo''@;'; put 'put ''dzwxMDApe3ZhciBTPXclMTA7cmV0dXJuIHYoMD09PVM/dy8xMDpTKX1pZih3PDFlNCl7Zm9yKDt3Pj0xMDspdy89MTA7cmV0dXJuIHYodyl9cmV0dXJuIHYody89MWUzKX15LmRlZmluZUxvY2FsZSgibGIiLHttb250aHM6IkphbnVhcl9GZWJydWFyX01ceGU0ZXJ6X0Ficlx4ZWJsbF9NZWVf''@;'; put 'put ''SnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuLl9GZWJyLl9NcnouX0Fici5fTWVlX0p1bi5fSnVsLl9BdWcuX1NlcHQuX09rdC5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhh''@;'; put 'put ''Y3Q6ITAsd2Vla2RheXM6IlNvbm5kZWdfTVx4ZTlpbmRlZ19EXHhlYm5zY2hkZWdfTVx4ZWJ0dHdvY2hfRG9ubmVzY2hkZWdfRnJlaWRlZ19TYW1zY2hkZWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU28uX01ceGU5Ll9EXHhlYi5fTVx4ZWIuX0RvLl9Gci5fU2EuIi5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzTWluOiJTb19NXHhlOV9EXHhlYl9NXHhlYl9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIFtBdWVyXSIsTFRTOiJIOm1tOnNzIFtBdWVyXSIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIs''@;'; put 'put ''TExMOiJELiBNTU1NIFlZWVkgSDptbSBbQXVlcl0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIFtBdWVyXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGF1dCB1bV0gTFQiLHNhbWVFbHNlOiJMIixuZXh0RGF5OiJbTXVlciB1bV0gTFQiLG5leHRXZWVrOiJkZGRkIFt1bV0gTFQiLGxh''@;'; put 'put ''c3REYXk6IltHXHhlYnNjaHRlciB1bV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMjpjYXNlIDQ6cmV0dXJuIltMZXNjaHRlbl0gZGRkZCBbdW1dIExUIjtkZWZhdWx0OnJldHVybiJbTGVzY2h0ZV0gZGRkZCBbdW1dIExUIn19fSxyZWxhdGl2ZVRp''@;'; put 'put ''bWU6e2Z1dHVyZTpmdW5jdGlvbiBzKHcpe3JldHVybiB2KHcuc3Vic3RyKDAsdy5pbmRleE9mKCIgIikpKT8iYSAiK3c6ImFuICIrd30scGFzdDpmdW5jdGlvbiBBKHcpe3JldHVybiB2KHcuc3Vic3RyKDAsdy5pbmRleE9mKCIgIikpKT8idmlydSAiK3c6InZpcnVuICIrd30sczoiZSBwdWVy''@;'; put 'put ''IFNla29ubmVuIixzczoiJWQgU2Vrb25uZW4iLG06YyxtbToiJWQgTWludXR0ZW4iLGg6YyxoaDoiJWQgU3Rvbm5lbiIsZDpjLGRkOiIlZCBEZWVnIixNOmMsTU06IiVkIE1ceGU5aW50Iix5OmMseXk6IiVkIEpvZXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGlu''@;'; put 'put ''YWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGgoOTc1ODYpKX0sMzM1MjYoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJsbyIse21vbnRoczoiXHUwZWExXHUwZWIxXHUwZTg3XHUwZTgxXHUwZWFkXHUwZTk5X1x1MGU4MVx1MGViOFx1MGVh''@;'; put 'put ''MVx1MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjVcdTBlOTlcdTBlYjJfXHUwZWMwXHUwZWExXHUwZWFhXHUwZWIyX1x1MGU5ZVx1MGViNlx1MGU5NFx1MGVhYVx1MGViMFx1MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjRcdTBlOTZcdTBlYjhcdTBlOTlcdTBlYjJfXHUwZTgxXHUwZWNkXHUwZWE1XHUw''@;'; put 'put ''ZWIwXHUwZTgxXHUwZWJiXHUwZTk0X1x1MGVhYVx1MGViNFx1MGU4N1x1MGVhYlx1MGViMl9cdTBlODFcdTBlYjFcdTBlOTlcdTBlOGRcdTBlYjJfXHUwZTk1XHUwZWI4XHUwZWE1XHUwZWIyX1x1MGU5ZVx1MGViMFx1MGU4OFx1MGViNFx1MGU4MV9cdTBlOTdcdTBlYjFcdTBlOTlcdTBlYTdc''@;'; put 'put ''dTBlYjIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGVhMVx1MGViMVx1MGU4N1x1MGU4MVx1MGVhZFx1MGU5OV9cdTBlODFcdTBlYjhcdTBlYTFcdTBlOWVcdTBlYjJfXHUwZWExXHUwZWI1XHUwZTk5XHUwZWIyX1x1MGVjMFx1MGVhMVx1MGVhYVx1MGViMl9cdTBlOWVcdTBlYjZcdTBl''@;'; put 'put ''OTRcdTBlYWFcdTBlYjBcdTBlOWVcdTBlYjJfXHUwZWExXHUwZWI0XHUwZTk2XHUwZWI4XHUwZTk5XHUwZWIyX1x1MGU4MVx1MGVjZFx1MGVhNVx1MGViMFx1MGU4MVx1MGViYlx1MGU5NF9cdTBlYWFcdTBlYjRcdTBlODdcdTBlYWJcdTBlYjJfXHUwZTgxXHUwZWIxXHUwZTk5XHUwZThkXHUw''@;'; put 'put ''ZWIyX1x1MGU5NVx1MGViOFx1MGVhNVx1MGViMl9cdTBlOWVcdTBlYjBcdTBlODhcdTBlYjRcdTBlODFfXHUwZTk3XHUwZWIxXHUwZTk5XHUwZWE3XHUwZWIyIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTBlYWRcdTBlYjJcdTBlOTdcdTBlYjRcdTBlOTRfXHUwZTg4XHUwZWIxXHUwZTk5X1x1''@;'; put 'put ''MGVhZFx1MGViMVx1MGU4N1x1MGU4NFx1MGViMlx1MGU5OV9cdTBlOWVcdTBlYjhcdTBlOTRfXHUwZTllXHUwZWIwXHUwZWFiXHUwZWIxXHUwZTk0X1x1MGVhYVx1MGViOFx1MGU4MV9cdTBlYzBcdTBlYWFcdTBlYmJcdTBlYjIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwZTk3XHUw''@;'; put 'put ''ZWI0XHUwZTk0X1x1MGU4OFx1MGViMVx1MGU5OV9cdTBlYWRcdTBlYjFcdTBlODdcdTBlODRcdTBlYjJcdTBlOTlfXHUwZTllXHUwZWI4XHUwZTk0X1x1MGU5ZVx1MGViMFx1MGVhYlx1MGViMVx1MGU5NF9cdTBlYWFcdTBlYjhcdTBlODFfXHUwZWMwXHUwZWFhXHUwZWJiXHUwZWIyIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzTWluOiJcdTBlOTdfXHUwZTg4X1x1MGVhZFx1MGU4NF9cdTBlOWVfXHUwZTllXHUwZWFiX1x1MGVhYVx1MGU4MV9cdTBlYWEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6''@;'; put 'put ''IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiXHUwZWE3XHUwZWIxXHUwZTk5ZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MGU5NVx1MGVhZFx1MGU5OVx1MGVjMFx1MGU4YVx1MGViYlx1MGVjOVx1MGVi''@;'; put 'put ''MnxcdTBlOTVcdTBlYWRcdTBlOTlcdTBlYzFcdTBlYTVcdTBlODcvLGlzUE06ZnVuY3Rpb24ocyl7cmV0dXJuIlx1MGU5NVx1MGVhZFx1MGU5OVx1MGVjMVx1MGVhNVx1MGU4NyI9PT1zfSxtZXJpZGllbTpmdW5jdGlvbihzLEEsdil7cmV0dXJuIHM8MTI/Ilx1MGU5NVx1MGVhZFx1MGU5OVx1''@;'; put 'put ''MGVjMFx1MGU4YVx1MGViYlx1MGVjOVx1MGViMiI6Ilx1MGU5NVx1MGVhZFx1MGU5OVx1MGVjMVx1MGVhNVx1MGU4NyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwZWExXHUwZWI3XHUwZWM5XHUwZTk5XHUwZWI1XHUwZWM5XHUwZWMwXHUwZWE3XHUwZWE1XHUwZWIyXSBMVCIsbmV4dERheToi''@;'; put 'put ''W1x1MGVhMVx1MGViN1x1MGVjOVx1MGVhZFx1MGViN1x1MGVjOFx1MGU5OVx1MGVjMFx1MGVhN1x1MGVhNVx1MGViMl0gTFQiLG5leHRXZWVrOiJbXHUwZWE3XHUwZWIxXHUwZTk5XWRkZGRbXHUwZWRjXHUwZWM5XHUwZWIyXHUwZWMwXHUwZWE3XHUwZWE1XHUwZWIyXSBMVCIsbGFzdERheToi''@;'; put 'put ''W1x1MGVhMVx1MGViN1x1MGVjOVx1MGVhN1x1MGViMlx1MGU5OVx1MGU5OVx1MGViNVx1MGVjOVx1MGVjMFx1MGVhN1x1MGVhNVx1MGViMl0gTFQiLGxhc3RXZWVrOiJbXHUwZWE3XHUwZWIxXHUwZTk5XWRkZGRbXHUwZWMxXHUwZWE1XHUwZWM5XHUwZWE3XHUwZTk5XHUwZWI1XHUwZWM5XHUw''@;'; put 'put ''ZWMwXHUwZWE3XHUwZWE1XHUwZWIyXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwZWFkXHUwZWI1XHUwZTgxICVzIixwYXN0OiIlc1x1MGU5Y1x1MGVjOFx1MGViMlx1MGU5OVx1MGVhMVx1MGViMiIsczoiXHUwZTlhXHUwZWNkXHUwZWM4XHUwZWMwXHUwZTk3''@;'; put 'put ''XHUwZWJiXHUwZWM4XHUwZWIyXHUwZWMzXHUwZTk0XHUwZWE3XHUwZWI0XHUwZTk5XHUwZWIyXHUwZTk3XHUwZWI1IixzczoiJWQgXHUwZWE3XHUwZWI0XHUwZTk5XHUwZWIyXHUwZTk3XHUwZWI1IixtOiIxIFx1MGU5OVx1MGViMlx1MGU5N1x1MGViNSIsbW06IiVkIFx1MGU5OVx1MGViMlx1''@;'; put 'put ''MGU5N1x1MGViNSIsaDoiMSBcdTBlOGFcdTBlYmJcdTBlYzhcdTBlYTdcdTBlYzJcdTBlYTFcdTBlODciLGhoOiIlZCBcdTBlOGFcdTBlYmJcdTBlYzhcdTBlYTdcdTBlYzJcdTBlYTFcdTBlODciLGQ6IjEgXHUwZWExXHUwZWI3XHUwZWM5IixkZDoiJWQgXHUwZWExXHUwZWI3XHUwZWM5IixN''@;'; put 'put ''OiIxIFx1MGVjMFx1MGU5NFx1MGViN1x1MGVhZFx1MGU5OSIsTU06IiVkIFx1MGVjMFx1MGU5NFx1MGViN1x1MGVhZFx1MGU5OSIseToiMSBcdTBlOWJcdTBlYjUiLHl5OiIlZCBcdTBlOWJcdTBlYjUifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi8oXHUwZTk3XHUwZWI1XHUwZWM4KVxkezEs''@;'; put 'put ''Mn0vLG9yZGluYWw6ZnVuY3Rpb24ocyl7cmV0dXJuIlx1MGU5N1x1MGViNVx1MGVjOCIrc319KX0oaCg5NzU4NikpfSw5MDQxMShmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7dmFyIGM9e3NzOiJzZWt1bmRcdTAxMTdfc2VrdW5kXHUwMTdlaVx1MDE3M19zZWt1bmRlcyIsbToi''@;'; put 'put ''bWludXRcdTAxMTdfbWludXRcdTAxMTdzX21pbnV0XHUwMTE5IixtbToibWludXRcdTAxMTdzX21pbnVcdTAxMGRpXHUwMTczX21pbnV0ZXMiLGg6InZhbGFuZGFfdmFsYW5kb3NfdmFsYW5kXHUwMTA1IixoaDoidmFsYW5kb3NfdmFsYW5kXHUwMTczX3ZhbGFuZGFzIixkOiJkaWVuYV9kaWVu''@;'; put 'put ''b3NfZGllblx1MDEwNSIsZGQ6ImRpZW5vc19kaWVuXHUwMTczX2RpZW5hcyIsTToibVx1MDExN251b19tXHUwMTE3bmVzaW9fbVx1MDExN25lc1x1MDEyZiIsTU06Im1cdTAxMTduZXNpYWlfbVx1MDExN25lc2lcdTAxNzNfbVx1MDExN25lc2l1cyIseToibWV0YWlfbWV0XHUwMTczX21ldHVz''@;'; put 'put ''Iix5eToibWV0YWlfbWV0XHUwMTczX21ldHVzIn07ZnVuY3Rpb24gQShMLFIseCxVKXtyZXR1cm4gUj9DKHgpWzBdOlU/Qyh4KVsxXTpDKHgpWzJdfWZ1bmN0aW9uIHYoTCl7cmV0dXJuIEwlMTA9PTB8fEw+MTAmJkw8MjB9ZnVuY3Rpb24gQyhMKXtyZXR1cm4gY1tMXS5zcGxpdCgiXyIpfWZ1''@;'; put 'put ''bmN0aW9uIHcoTCxSLHgsVSl7dmFyIEg9TCsiICI7cmV0dXJuIDE9PT1MP0grQSgwLFIseFswXSxVKTpSP0grKHYoTCk/Qyh4KVsxXTpDKHgpWzBdKTpVP0grQyh4KVsxXTpIKyh2KEwpP0MoeClbMV06Qyh4KVsyXSl9eS5kZWZpbmVMb2NhbGUoImx0Iix7bW9udGhzOntmb3JtYXQ6InNhdXNp''@;'; put 'put ''b192YXNhcmlvX2tvdm9fYmFsYW5kXHUwMTdlaW9fZ2VndVx1MDE3ZVx1MDExN3NfYmlyXHUwMTdlZWxpb19saWVwb3NfcnVncGpcdTAxNmJcdTAxMGRpb19ydWdzXHUwMTE3am9fc3BhbGlvX2xhcGtyaVx1MDEwZGlvX2dydW9kXHUwMTdlaW8iLnNwbGl0KCJfIiksc3RhbmRhbG9uZToic2F1''@;'; put 'put ''c2lzX3Zhc2FyaXNfa292YXNfYmFsYW5kaXNfZ2VndVx1MDE3ZVx1MDExN19iaXJcdTAxN2VlbGlzX2xpZXBhX3J1Z3BqXHUwMTZidGlzX3J1Z3NcdTAxMTdqaXNfc3BhbGlzX2xhcGtyaXRpc19ncnVvZGlzIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9EW29EXT8oXFtbXlxbXF1dKlxdfFxzKStN''@;'; put 'put ''TU1NP3xNTU1NPyhcW1teXFtcXV0qXF18XHMpK0Rbb0RdPy99LG1vbnRoc1Nob3J0OiJzYXVfdmFzX2tvdl9iYWxfZ2VnX2Jpcl9saWVfcmdwX3Jnc19zcGFfbGFwX2dyZCIuc3BsaXQoIl8iKSx3ZWVrZGF5czp7Zm9ybWF0OiJzZWttYWRpZW5cdTAxMmZfcGlybWFkaWVuXHUwMTJmX2FudHJh''@;'; put 'put ''ZGllblx1MDEyZl90cmVcdTAxMGRpYWRpZW5cdTAxMmZfa2V0dmlydGFkaWVuXHUwMTJmX3Blbmt0YWRpZW5cdTAxMmZfXHUwMTYxZVx1MDE2MXRhZGllblx1MDEyZiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJzZWttYWRpZW5pc19waXJtYWRpZW5pc19hbnRyYWRpZW5pc190cmVcdTAxMGRp''@;'; put 'put ''YWRpZW5pc19rZXR2aXJ0YWRpZW5pc19wZW5rdGFkaWVuaXNfXHUwMTYxZVx1MDE2MXRhZGllbmlzIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9kZGRkIEhIOm1tL30sd2Vla2RheXNTaG9ydDoiU2VrX1Bpcl9BbnRfVHJlX0tldF9QZW5fXHUwMTYwZVx1MDE2MSIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c01pbjoiU19QX0FfVF9LX1BuX1x1MDE2MCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSIsTExMOiJZWVlZIFttLl0gTU1NTSBE''@;'; put 'put ''IFtkLl0sIEhIOm1tIFt2YWwuXSIsTExMTDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBkZGRkLCBISDptbSBbdmFsLl0iLGw6IllZWVktTU0tREQiLGxsOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0iLGxsbDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBISDptbSBbdmFsLl0iLGxsbGw6IllZWVkg''@;'; put 'put ''W20uXSBNTU1NIEQgW2QuXSwgZGRkLCBISDptbSBbdmFsLl0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDE2MGlhbmRpZW5dIExUIixuZXh0RGF5OiJbUnl0b2pdIExUIixuZXh0V2VlazoiZGRkZCBMVCIsbGFzdERheToiW1Zha2FyXSBMVCIsbGFzdFdlZWs6IltQcmFcdTAxMTdqdXNcdTAx''@;'; put 'put ''MmZdIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBvICVzIixwYXN0OiJwcmllXHUwMTYxICVzIixzOmZ1bmN0aW9uIHMoTCxSLHgsVSl7cmV0dXJuIFI/ImtlbGlvcyBzZWt1bmRcdTAxMTdzIjpVPyJrZWxpXHUwMTczIHNla3VuZFx1MDE3ZWlcdTAxNzMi''@;'; put 'put ''OiJrZWxpYXMgc2VrdW5kZXMifSxzczp3LG06QSxtbTp3LGg6QSxoaDp3LGQ6QSxkZDp3LE06QSxNTTp3LHk6QSx5eTp3fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LW9qaS8sb3JkaW5hbDpmdW5jdGlvbihMKXtyZXR1cm4gTCsiLW9qaSJ9LHdlZWs6e2RvdzoxLGRveTo0fX0p''@;'; put 'put ''fShoKDk3NTg2KSl9LDMyNjIxKGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz17c3M6InNla3VuZGVzX3Nla3VuZFx1MDExM21fc2VrdW5kZV9zZWt1bmRlcyIuc3BsaXQoIl8iKSxtOiJtaW5cdTAxNmJ0ZXNfbWluXHUwMTZidFx1MDExM21fbWluXHUwMTZidGVfbWlu''@;'; put 'put ''XHUwMTZidGVzIi5zcGxpdCgiXyIpLG1tOiJtaW5cdTAxNmJ0ZXNfbWluXHUwMTZidFx1MDExM21fbWluXHUwMTZidGVfbWluXHUwMTZidGVzIi5zcGxpdCgiXyIpLGg6InN0dW5kYXNfc3R1bmRcdTAxMDFtX3N0dW5kYV9zdHVuZGFzIi5zcGxpdCgiXyIpLGhoOiJzdHVuZGFzX3N0dW5kXHUw''@;'; put 'put ''MTAxbV9zdHVuZGFfc3R1bmRhcyIuc3BsaXQoIl8iKSxkOiJkaWVuYXNfZGllblx1MDEwMW1fZGllbmFfZGllbmFzIi5zcGxpdCgiXyIpLGRkOiJkaWVuYXNfZGllblx1MDEwMW1fZGllbmFfZGllbmFzIi5zcGxpdCgiXyIpLE06Im1cdTAxMTNuZVx1MDE2MWFfbVx1MDExM25lXHUwMTYxaWVt''@;'; put 'put ''X21cdTAxMTNuZXNpc19tXHUwMTEzbmVcdTAxNjFpIi5zcGxpdCgiXyIpLE1NOiJtXHUwMTEzbmVcdTAxNjFhX21cdTAxMTNuZVx1MDE2MWllbV9tXHUwMTEzbmVzaXNfbVx1MDExM25lXHUwMTYxaSIuc3BsaXQoIl8iKSx5OiJnYWRhX2dhZGllbV9nYWRzX2dhZGkiLnNwbGl0KCJfIikseXk6''@;'; put 'put ''ImdhZGFfZ2FkaWVtX2dhZHNfZ2FkaSIuc3BsaXQoIl8iKX07ZnVuY3Rpb24gcyhTLEwsUil7cmV0dXJuIFI/TCUxMD09MSYmTCUxMDAhPTExP1NbMl06U1szXTpMJTEwPT0xJiZMJTEwMCE9MTE/U1swXTpTWzFdfWZ1bmN0aW9uIEEoUyxMLFIpe3JldHVybiBTKyIgIitzKGNbUl0sUyxMKX1m''@;'; put 'put ''dW5jdGlvbiB2KFMsTCxSKXtyZXR1cm4gcyhjW1JdLFMsTCl9eS5kZWZpbmVMb2NhbGUoImx2Iix7bW9udGhzOiJqYW52XHUwMTAxcmlzX2ZlYnJ1XHUwMTAxcmlzX21hcnRzX2Fwclx1MDEyYmxpc19tYWlqc19qXHUwMTZibmlqc19qXHUwMTZibGlqc19hdWd1c3RzX3NlcHRlbWJyaXNfb2t0''@;'; put 'put ''b2JyaXNfbm92ZW1icmlzX2RlY2VtYnJpcyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJfYXByX21haV9qXHUwMTZibl9qXHUwMTZibF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdlx1MDExM3RkaWVuYV9waXJtZGllbmFfb3RyZGllbmFf''@;'; put 'put ''dHJlXHUwMTYxZGllbmFfY2V0dXJ0ZGllbmFfcGlla3RkaWVuYV9zZXN0ZGllbmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3ZfUF9PX1RfQ19Qa19TIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdl9QX09fVF9DX1BrX1MiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEw''@;'; put 'put ''LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkuIixMTDoiWVlZWS4gW2dhZGFdIEQuIE1NTU0iLExMTDoiWVlZWS4gW2dhZGFdIEQuIE1NTU0sIEhIOm1tIixMTExMOiJZWVlZLiBbZ2FkYV0gRC4gTU1NTSwgZGRkZCwgSEg6bW0ifSxjYWxl''@;'; put 'put ''bmRhcjp7c2FtZURheToiW1x1MDE2MG9kaWVuIHB1bGtzdGVuXSBMVCIsbmV4dERheToiW1JcdTAxMmJ0IHB1bGtzdGVuXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3B1bGtzdGVuXSBMVCIsbGFzdERheToiW1Zha2FyIHB1bGtzdGVuXSBMVCIsbGFzdFdlZWs6IltQYWdcdTAxMDFqdVx1MDE2MVx1''@;'; put 'put ''MDEwMV0gZGRkZCBbcHVsa3N0ZW5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJwXHUwMTEzYyAlcyIscGFzdDoicGlybXMgJXMiLHM6ZnVuY3Rpb24gQyhTLEwpe3JldHVybiBMPyJkYVx1MDE3ZWFzIHNla3VuZGVzIjoiZGFcdTAxN2VcdTAxMDFtIHNla3VuZFx1''@;'; put 'put ''MDExM20ifSxzczpBLG06dixtbTpBLGg6dixoaDpBLGQ6dixkZDpBLE06dixNTTpBLHk6dix5eTpBfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGgoOTc1ODYpKX0sODU4NjkoZmUsaixoKXshZnVuY3Rpb24o''@;'; put 'put ''eSl7InVzZSBzdHJpY3QiO3ZhciBjPXt3b3Jkczp7c3M6WyJzZWt1bmQiLCJzZWt1bmRhIiwic2VrdW5kaSJdLG06WyJqZWRhbiBtaW51dCIsImplZG5vZyBtaW51dGEiXSxtbTpbIm1pbnV0IiwibWludXRhIiwibWludXRhIl0saDpbImplZGFuIHNhdCIsImplZG5vZyBzYXRhIl0saGg6WyJz''@;'; put 'put ''YXQiLCJzYXRhIiwic2F0aSJdLGRkOlsiZGFuIiwiZGFuYSIsImRhbmEiXSxNTTpbIm1qZXNlYyIsIm1qZXNlY2EiLCJtamVzZWNpIl0seXk6WyJnb2RpbmEiLCJnb2RpbmUiLCJnb2RpbmEiXX0sY29ycmVjdEdyYW1tYXRpY2FsQ2FzZTpmdW5jdGlvbihBLHYpe3JldHVybiAxPT09QT92WzBd''@;'; put 'put ''OkE+PTImJkE8PTQ/dlsxXTp2WzJdfSx0cmFuc2xhdGU6ZnVuY3Rpb24oQSx2LEMpe3ZhciB3PWMud29yZHNbQ107cmV0dXJuIDE9PT1DLmxlbmd0aD92P3dbMF06d1sxXTpBKyIgIitjLmNvcnJlY3RHcmFtbWF0aWNhbENhc2UoQSx3KX19O3kuZGVmaW5lTG9jYWxlKCJtZSIse21vbnRoczoi''@;'; put 'put ''amFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuX2p1bF9hdmd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXIuX2Fwci5fbWFqX2p1bl9qdWxfYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5z''@;'; put 'put ''cGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX1x1MDEwZGV0dnJ0YWtfcGV0YWtfc3Vib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5fcG9uLl91dG8uX3NyaS5fXHUwMTBkZXQuX3BldC5f''@;'; put 'put ''c3ViLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRfc3JfXHUwMTBkZV9wZV9zdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExM''@;'; put 'put ''TDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkYW5hcyB1XSBMVCIsbmV4dERheToiW3NqdXRyYSB1XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJb''@;'; put 'put ''dV0gW25lZGplbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3VdIFtzcmlqZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3VdIFtzdWJvdHVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbdV0gZGRkZCBbdV0gTFQifX0sbGFzdERheToiW2p1XHUwMTBk''@;'; put 'put ''ZSB1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm5bIltwcm9cdTAxNjFsZV0gW25lZGplbGplXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbcG9uZWRqZWxqa2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFt1dG9ya2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsZV0gW3NyaWplZGVd''@;'; put 'put ''IFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtcdTAxMGRldHZydGthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbcGV0a2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsZV0gW3N1Ym90ZV0gW3VdIExUIl1bdGhpcy5kYXkoKV19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Inph''@;'; put 'put ''ICVzIixwYXN0OiJwcmlqZSAlcyIsczoibmVrb2xpa28gc2VrdW5kaSIsc3M6Yy50cmFuc2xhdGUsbTpjLnRyYW5zbGF0ZSxtbTpjLnRyYW5zbGF0ZSxoOmMudHJhbnNsYXRlLGhoOmMudHJhbnNsYXRlLGQ6ImRhbiIsZGQ6Yy50cmFuc2xhdGUsTToibWplc2VjIixNTTpjLnRyYW5zbGF0ZSx5''@;'; put 'put ''OiJnb2RpbnUiLHl5OmMudHJhbnNsYXRlfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGgoOTc1ODYpKX0sMzU4ODEoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJt''@;'; put 'put ''aSIse21vbnRoczoiS29oaS10XHUwMTAxdGVfSHVpLXRhbmd1cnVfUG91dFx1MDE2Yi10ZS1yYW5naV9QYWVuZ2Etd2hcdTAxMDF3aFx1MDEwMV9IYXJhdHVhX1BpcGlyaV9IXHUwMTRkbmdvaW5nb2lfSGVyZS10dXJpLWtcdTAxNGRrXHUwMTAxX01haHVydV9XaGlyaW5nYS1cdTAxMDEtbnVr''@;'; put 'put ''dV9XaGlyaW5nYS1cdTAxMDEtcmFuZ2lfSGFraWhlYSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiS29oaV9IdWlfUG91X1BhZV9IYXJhX1BpcGlfSFx1MDE0ZG5nb2lfSGVyZV9NYWh1X1doaS1udV9XaGktcmFfSGFraSIuc3BsaXQoIl8iKSxtb250aHNSZWdleDovKD86WydhLXpcdTAxMDFc''@;'; put 'put ''dTAxNERcdTAxNkJdK1wtPyl7MSwzfS9pLG1vbnRoc1N0cmljdFJlZ2V4Oi8oPzpbJ2Etelx1MDEwMVx1MDE0RFx1MDE2Ql0rXC0/KXsxLDN9L2ksbW9udGhzU2hvcnRSZWdleDovKD86WydhLXpcdTAxMDFcdTAxNERcdTAxNkJdK1wtPyl7MSwzfS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6''@;'; put 'put ''Lyg/OlsnYS16XHUwMTAxXHUwMTREXHUwMTZCXStcLT8pezEsMn0vaSx3ZWVrZGF5czoiUlx1MDEwMXRhcHVfTWFuZV9UXHUwMTZicmVpX1dlbmVyZWlfVFx1MDEwMWl0ZV9QYXJhaXJlX0hcdTAxMDF0YXJlaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJUYV9NYV9UXHUwMTZiX1dlX1Rc''@;'; put 'put ''dTAxMDFpX1BhX0hcdTAxMDEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlRhX01hX1RcdTAxNmJfV2VfVFx1MDEwMWlfUGFfSFx1MDEwMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVki''@;'; put 'put ''LExMTDoiRCBNTU1NIFlZWVkgW2ldIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbaV0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2kgdGVpZSBtYWhhbmEsIGldIExUIixuZXh0RGF5OiJbYXBvcG8gaV0gTFQiLG5leHRXZWVrOiJkZGRkIFtpXSBMVCIsbGFzdERheToiW2lu''@;'; put 'put ''YW5haGkgaV0gTFQiLGxhc3RXZWVrOiJkZGRkIFt3aGFrYW11dHVuZ2EgaV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Imkgcm90byBpICVzIixwYXN0OiIlcyBpIG11YSIsczoidGUgaFx1MDExM2tvbmEgcnVhcnVhIixzczoiJWQgaFx1MDExM2tvbmEiLG06Imhl''@;'; put 'put ''IG1lbmV0aSIsbW06IiVkIG1lbmV0aSIsaDoidGUgaGFvcmEiLGhoOiIlZCBoYW9yYSIsZDoiaGUgcmEiLGRkOiIlZCByYSIsTToiaGUgbWFyYW1hIixNTToiJWQgbWFyYW1hIix5OiJoZSB0YXUiLHl5OiIlZCB0YXUifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3Jk''@;'; put 'put ''aW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oaCg5NzU4NikpfSw5MjM5MShmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5kZWZpbmVMb2NhbGUoIm1rIix7bW9udGhzOiJcdTA0NThcdTA0MzBcdTA0M2RcdTA0NDNcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDQ0''@;'; put 'put ''XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDQzXHUwNDMwXHUwNDQwXHUwNDM4X1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzhcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDU4X1x1MDQ1OFx1MDQ0M1x1MDQzZFx1MDQzOF9cdTA0NThcdTA0NDNcdTA0M2JcdTA0''@;'; put 'put ''MzhfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZlx1MDQ0Mlx1MDQzNVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0M2VcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDNkXHUwNDNlXHUwNDM1XHUw''@;'; put 'put ''NDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzNVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDU4XHUwNDMwXHUwNDNkX1x1MDQ0NFx1MDQzNVx1MDQzMl9cdTA0M2NcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDNm''@;'; put 'put ''XHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQ1OF9cdTA0NThcdTA0NDNcdTA0M2RfXHUwNDU4XHUwNDQzXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQzM19cdTA0NDFcdTA0MzVcdTA0M2ZfXHUwNDNlXHUwNDNhXHUwNDQyX1x1MDQzZFx1MDQzZVx1MDQzNV9cdTA0MzRcdTA0MzVcdTA0M2EiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXM6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQzMF9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQ0MVx1''@;'; put 'put ''MDQ0MFx1MDQzNVx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0NDBcdTA0NDJcdTA0M2VcdTA0M2FfXHUwNDNmXHUwNDM1XHUwNDQyXHUwNDNlXHUwNDNhX1x1MDQ0MVx1MDQzMFx1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0''@;'; put 'put ''OiJcdTA0M2RcdTA0MzVcdTA0MzRfXHUwNDNmXHUwNDNlXHUwNDNkX1x1MDQzMlx1MDQ0Mlx1MDQzZV9cdTA0NDFcdTA0NDBcdTA0MzVfXHUwNDQ3XHUwNDM1XHUwNDQyX1x1MDQzZlx1MDQzNVx1MDQ0Ml9cdTA0NDFcdTA0MzBcdTA0MzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQz''@;'; put 'put ''ZGVfXHUwNDNmb19cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQzNV9cdTA0M2ZcdTA0MzVfXHUwNDQxYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiRC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1N''@;'; put 'put ''IFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDE0XHUwNDM1XHUwNDNkXHUwNDM1XHUwNDQxIFx1MDQzMlx1MDQzZV0gTFQiLG5leHREYXk6IltcdTA0MjNcdTA0NDJcdTA0NDBcdTA0MzUgXHUwNDMyXHUwNDNlXSBMVCIs''@;'; put 'put ''bmV4dFdlZWs6IltcdTA0MTJcdTA0M2VdIGRkZGQgW1x1MDQzMlx1MDQzZV0gTFQiLGxhc3REYXk6IltcdTA0MTJcdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzAgXHUwNDMyXHUwNDNlXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpjYXNl''@;'; put 'put ''IDY6cmV0dXJuIltcdTA0MThcdTA0MzdcdTA0M2NcdTA0MzhcdTA0M2RcdTA0MzBcdTA0NDJcdTA0MzBcdTA0NDJcdTA0MzBdIGRkZGQgW1x1MDQzMlx1MDQzZV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW1x1MDQxOFx1MDQzN1x1MDQzY1x1MDQzOFx1MDQzZFx1''@;'; put 'put ''MDQzMFx1MDQ0Mlx1MDQzOFx1MDQzZVx1MDQ0Ml0gZGRkZCBbXHUwNDMyXHUwNDNlXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0MzdcdTA0MzAgJXMiLHBhc3Q6Ilx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzNCAlcyIsczoiXHUwNDNkXHUwNDM1XHUwNDNh''@;'; put 'put ''XHUwNDNlXHUwNDNiXHUwNDNhXHUwNDQzIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOCIsc3M6IiVkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOCIsbToiXHUwNDM1XHUwNDM0XHUwNDNkXHUwNDMwIFx1MDQzY1x1MDQzOFx1MDQz''@;'; put 'put ''ZFx1MDQ0M1x1MDQ0Mlx1MDQzMCIsbW06IiVkIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzOCIsaDoiXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNkIFx1MDQ0N1x1MDQzMFx1MDQ0MSIsaGg6IiVkIFx1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzMCIsZDoiXHUwNDM1XHUwNDM0XHUw''@;'; put 'put ''NDM1XHUwNDNkIFx1MDQzNFx1MDQzNVx1MDQzZCIsZGQ6IiVkIFx1MDQzNFx1MDQzNVx1MDQzZFx1MDQzMCIsTToiXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNkIFx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0NiIsTU06IiVkIFx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQz''@;'; put 'put ''OCIseToiXHUwNDM1XHUwNDM0XHUwNDNkXHUwNDMwIFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzMCIseXk6IiVkIFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzOCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQzNVx1MDQzMnxcdTA0''@;'; put 'put ''MzVcdTA0M2R8XHUwNDQyXHUwNDM4fFx1MDQzMlx1MDQzOHxcdTA0NDBcdTA0Mzh8XHUwNDNjXHUwNDM4KS8sb3JkaW5hbDpmdW5jdGlvbihzKXt2YXIgQT1zJTEwLHY9cyUxMDA7cmV0dXJuIDA9PT1zP3MrIi1cdTA0MzVcdTA0MzIiOjA9PT12P3MrIi1cdTA0MzVcdTA0M2QiOnY+MTAmJnY8''@;'; put 'put ''MjA/cysiLVx1MDQ0Mlx1MDQzOCI6MT09PUE/cysiLVx1MDQzMlx1MDQzOCI6Mj09PUE/cysiLVx1MDQ0MFx1MDQzOCI6Nz09PUF8fDg9PT1BP3MrIi1cdTA0M2NcdTA0MzgiOnMrIi1cdTA0NDJcdTA0MzgifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oaCg5NzU4NikpfSwyMTEyNihmZSxqLGgp''@;'; put 'put ''eyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5kZWZpbmVMb2NhbGUoIm1sIix7bW9udGhzOiJcdTBkMWNcdTBkMjhcdTBkNDFcdTBkMzVcdTBkMzBcdTBkM2ZfXHUwZDJiXHUwZDQ2XHUwZDJjXHUwZDRkXHUwZDMwXHUwZDQxXHUwZDM1XHUwZDMwXHUwZDNmX1x1MGQyZVx1MGQzZVx1MGQ3''@;'; put 'put ''Y1x1MGQxYVx1MGQ0ZFx1MGQxYVx1MGQ0ZF9cdTBkMGZcdTBkMmFcdTBkNGRcdTBkMzBcdTBkM2ZcdTBkN2RfXHUwZDJlXHUwZDQ3XHUwZDJmXHUwZDRkX1x1MGQxY1x1MGQ0Mlx1MGQ3YV9cdTBkMWNcdTBkNDJcdTBkMzJcdTBkNDhfXHUwZDEzXHUwZDE3XHUwZDM4XHUwZDRkXHUwZDMxXHUw''@;'; put 'put ''ZDRkXHUwZDMxXHUwZDRkX1x1MGQzOFx1MGQ0Nlx1MGQyYVx1MGQ0ZFx1MGQzMVx1MGQ0ZFx1MGQzMVx1MGQwMlx1MGQyY1x1MGQ3Y19cdTBkMTJcdTBkMTVcdTBkNGRcdTBkMWZcdTBkNGJcdTBkMmNcdTBkN2NfXHUwZDI4XHUwZDM1XHUwZDAyXHUwZDJjXHUwZDdjX1x1MGQyMVx1MGQzZlx1''@;'; put 'put ''MGQzOFx1MGQwMlx1MGQyY1x1MGQ3YyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwZDFjXHUwZDI4XHUwZDQxLl9cdTBkMmJcdTBkNDZcdTBkMmNcdTBkNGRcdTBkMzBcdTBkNDEuX1x1MGQyZVx1MGQzZVx1MGQ3Yy5fXHUwZDBmXHUwZDJhXHUwZDRkXHUwZDMwXHUwZDNmLl9cdTBkMmVc''@;'; put 'put ''dTBkNDdcdTBkMmZcdTBkNGRfXHUwZDFjXHUwZDQyXHUwZDdhX1x1MGQxY1x1MGQ0Mlx1MGQzMlx1MGQ0OC5fXHUwZDEzXHUwZDE3Ll9cdTBkMzhcdTBkNDZcdTBkMmFcdTBkNGRcdTBkMzFcdTBkNGRcdTBkMzEuX1x1MGQxMlx1MGQxNVx1MGQ0ZFx1MGQxZlx1MGQ0Yi5fXHUwZDI4XHUwZDM1''@;'; put 'put ''XHUwZDAyLl9cdTBkMjFcdTBkM2ZcdTBkMzhcdTBkMDIuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGQxZVx1MGQzZVx1MGQyZlx1MGQzMVx1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMjRcdTBkM2ZcdTBkMTlcdTBkNGRcdTBkMTVcdTBkMzNcdTBk''@;'; put 'put ''M2VcdTBkMzRcdTBkNGRcdTBkMWFfXHUwZDFhXHUwZDRhXHUwZDM1XHUwZDRkXHUwZDM1XHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQyY1x1MGQ0MVx1MGQyN1x1MGQyOFx1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMzVcdTBkNGRcdTBkMmZcdTBkM2VcdTBkMzRcdTBkM2VcdTBk''@;'; put 'put ''MzRcdTBkNGRcdTBkMWFfXHUwZDM1XHUwZDQ2XHUwZDMzXHUwZDRkXHUwZDMzXHUwZDNmXHUwZDJmXHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQzNlx1MGQyOFx1MGQzZlx1MGQyZlx1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBkMWVc''@;'; put 'put ''dTBkM2VcdTBkMmZcdTBkN2NfXHUwZDI0XHUwZDNmXHUwZDE5XHUwZDRkXHUwZDE1XHUwZDdlX1x1MGQxYVx1MGQ0YVx1MGQzNVx1MGQ0ZFx1MGQzNV9cdTBkMmNcdTBkNDFcdTBkMjdcdTBkN2JfXHUwZDM1XHUwZDRkXHUwZDJmXHUwZDNlXHUwZDM0XHUwZDAyX1x1MGQzNVx1MGQ0Nlx1MGQz''@;'; put 'put ''M1x1MGQ0ZFx1MGQzM1x1MGQzZl9cdTBkMzZcdTBkMjhcdTBkM2YiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGQxZVx1MGQzZV9cdTBkMjRcdTBkM2ZfXHUwZDFhXHUwZDRhX1x1MGQyY1x1MGQ0MV9cdTBkMzVcdTBkNGRcdTBkMmZcdTBkM2VfXHUwZDM1XHUwZDQ2X1x1MGQzNiIuc3Bs''@;'; put 'put ''aXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSAtXHUwZDI4XHUwZDQxIixMVFM6IkEgaDptbTpzcyAtXHUwZDI4XHUwZDQxIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSAtXHUwZDI4XHUwZDQxIixMTExMOiJkZGRkLCBE''@;'; put 'put ''IE1NTU0gWVlZWSwgQSBoOm1tIC1cdTBkMjhcdTBkNDEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGQwN1x1MGQyOFx1MGQ0ZFx1MGQyOFx1MGQ0ZF0gTFQiLG5leHREYXk6IltcdTBkMjhcdTBkM2VcdTBkMzNcdTBkNDZdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTBk''@;'; put 'put ''MDdcdTBkMjhcdTBkNGRcdTBkMjhcdTBkMzJcdTBkNDZdIExUIixsYXN0V2VlazoiW1x1MGQxNVx1MGQzNFx1MGQzZlx1MGQxZVx1MGQ0ZFx1MGQxZV0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGQxNVx1MGQzNFx1MGQzZlx1MGQxZVx1MGQ0''@;'; put 'put ''ZFx1MGQxZVx1MGQ0ZCIscGFzdDoiJXMgXHUwZDJlXHUwZDQxXHUwZDdiXHUwZDJhXHUwZDRkIixzOiJcdTBkMDVcdTBkN2RcdTBkMmEgXHUwZDI4XHUwZDNmXHUwZDJlXHUwZDNmXHUwZDM3XHUwZDE5XHUwZDRkXHUwZDE5XHUwZDdlIixzczoiJWQgXHUwZDM4XHUwZDQ2XHUwZDE1XHUwZDRk''@;'; put 'put ''XHUwZDE1XHUwZDdiXHUwZDIxXHUwZDRkIixtOiJcdTBkMTJcdTBkMzBcdTBkNDEgXHUwZDJlXHUwZDNmXHUwZDI4XHUwZDNmXHUwZDMxXHUwZDRkXHUwZDMxXHUwZDRkIixtbToiJWQgXHUwZDJlXHUwZDNmXHUwZDI4XHUwZDNmXHUwZDMxXHUwZDRkXHUwZDMxXHUwZDRkIixoOiJcdTBkMTJc''@;'; put 'put ''dTBkMzBcdTBkNDEgXHUwZDJlXHUwZDIzXHUwZDNmXHUwZDE1XHUwZDRkXHUwZDE1XHUwZDQyXHUwZDdjIixoaDoiJWQgXHUwZDJlXHUwZDIzXHUwZDNmXHUwZDE1XHUwZDRkXHUwZDE1XHUwZDQyXHUwZDdjIixkOiJcdTBkMTJcdTBkMzBcdTBkNDEgXHUwZDI2XHUwZDNmXHUwZDM1XHUwZDM4''@;'; put 'put ''XHUwZDAyIixkZDoiJWQgXHUwZDI2XHUwZDNmXHUwZDM1XHUwZDM4XHUwZDAyIixNOiJcdTBkMTJcdTBkMzBcdTBkNDEgXHUwZDJlXHUwZDNlXHUwZDM4XHUwZDAyIixNTToiJWQgXHUwZDJlXHUwZDNlXHUwZDM4XHUwZDAyIix5OiJcdTBkMTJcdTBkMzBcdTBkNDEgXHUwZDM1XHUwZDdjXHUw''@;'; put 'put ''ZDM3XHUwZDAyIix5eToiJWQgXHUwZDM1XHUwZDdjXHUwZDM3XHUwZDAyIn0sbWVyaWRpZW1QYXJzZTovXHUwZDMwXHUwZDNlXHUwZDI0XHUwZDRkXHUwZDMwXHUwZDNmfFx1MGQzMFx1MGQzZVx1MGQzNVx1MGQzZlx1MGQzMlx1MGQ0NnxcdTBkMDlcdTBkMWFcdTBkNGRcdTBkMWEgXHUwZDE1''@;'; put 'put ''XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXHUwZDRkfFx1MGQzNVx1MGQ0OFx1MGQxNVx1MGQ0MVx1MGQyOFx1MGQ0ZFx1MGQyOFx1MGQ0N1x1MGQzMFx1MGQwMnxcdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2YvaSxtZXJpZGllbUhvdXI6ZnVuY3Rpb24ocyxBKXty''@;'; put 'put ''ZXR1cm4gMTI9PT1zJiYocz0wKSwiXHUwZDMwXHUwZDNlXHUwZDI0XHUwZDRkXHUwZDMwXHUwZDNmIj09PUEmJnM+PTR8fCJcdTBkMDlcdTBkMWFcdTBkNGRcdTBkMWEgXHUwZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXHUwZDRkIj09PUF8fCJcdTBkMzVcdTBkNDhcdTBkMTVc''@;'; put 'put ''dTBkNDFcdTBkMjhcdTBkNGRcdTBkMjhcdTBkNDdcdTBkMzBcdTBkMDIiPT09QT9zKzEyOnN9LG1lcmlkaWVtOmZ1bmN0aW9uKHMsQSx2KXtyZXR1cm4gczw0PyJcdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2YiOnM8MTI/Ilx1MGQzMFx1MGQzZVx1MGQzNVx1MGQzZlx1MGQz''@;'; put 'put ''Mlx1MGQ0NiI6czwxNz8iXHUwZDA5XHUwZDFhXHUwZDRkXHUwZDFhIFx1MGQxNVx1MGQzNFx1MGQzZlx1MGQxZVx1MGQ0ZFx1MGQxZVx1MGQ0ZCI6czwyMD8iXHUwZDM1XHUwZDQ4XHUwZDE1XHUwZDQxXHUwZDI4XHUwZDRkXHUwZDI4XHUwZDQ3XHUwZDMwXHUwZDAyIjoiXHUwZDMwXHUwZDNl''@;'; put 'put ''XHUwZDI0XHUwZDRkXHUwZDMwXHUwZDNmIn19KX0oaCg5NzU4NikpfSw0NDg5MihmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyhBLHYsQyx3KXtzd2l0Y2goQyl7Y2FzZSJzIjpyZXR1cm4gdj8iXHUwNDQ1XHUwNDRkXHUwNDM0XHUwNDQ1XHUwNDRkXHUwNDNk''@;'; put 'put ''IFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCI6Ilx1MDQ0NVx1MDQ0ZFx1MDQzNFx1MDQ0NVx1MDQ0ZFx1MDQzZCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJcdTA0M2QiO2Nhc2Uic3MiOnJldHVybiBBKyh2PyIgXHUwNDQxXHUwNDM1XHUw''@;'; put 'put ''NDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Ylx1MDQzZCIpO2Nhc2UibSI6Y2FzZSJtbSI6cmV0dXJuIEErKHY/IiBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiOiIgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQz''@;'; put 'put ''XHUwNDQyXHUwNDRiXHUwNDNkIik7Y2FzZSJoIjpjYXNlImhoIjpyZXR1cm4gQSsodj8iIFx1MDQ0Nlx1MDQzMFx1MDQzMyI6IiBcdTA0NDZcdTA0MzBcdTA0MzNcdTA0MzhcdTA0MzlcdTA0M2QiKTtjYXNlImQiOmNhc2UiZGQiOnJldHVybiBBKyh2PyIgXHUwNGU5XHUwNDM0XHUwNGU5XHUw''@;'; put 'put ''NDQwIjoiIFx1MDRlOVx1MDQzNFx1MDQ0MFx1MDQzOFx1MDQzOVx1MDQzZCIpO2Nhc2UiTSI6Y2FzZSJNTSI6cmV0dXJuIEErKHY/IiBcdTA0NDFcdTA0MzBcdTA0NDAiOiIgXHUwNDQxXHUwNDMwXHUwNDQwXHUwNDRiXHUwNDNkIik7Y2FzZSJ5IjpjYXNlInl5IjpyZXR1cm4gQSsodj8iIFx1''@;'; put 'put ''MDQzNlx1MDQzOFx1MDQzYiI6IiBcdTA0MzZcdTA0MzhcdTA0M2JcdTA0MzhcdTA0MzlcdTA0M2QiKTtkZWZhdWx0OnJldHVybiBBfX15LmRlZmluZUxvY2FsZSgibW4iLHttb250aHM6Ilx1MDQxZFx1MDQ0ZFx1MDQzM1x1MDQzNFx1MDRhZlx1MDQzM1x1MDQ0ZFx1MDQ0ZFx1MDQ0MCBcdTA0''@;'; put 'put ''NDFcdTA0MzBcdTA0NDBfXHUwNDI1XHUwNDNlXHUwNDUxXHUwNDQwXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTNcdTA0NDNcdTA0NDBcdTA0MzBcdTA0MzJcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUw''@;'; put 'put ''NDQxXHUwNDMwXHUwNDQwX1x1MDQxNFx1MDRlOVx1MDQ0MFx1MDRlOVx1MDQzMlx1MDQzNFx1MDRhZlx1MDQzM1x1MDQ0ZFx1MDQ0ZFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDIyXHUwNDMwXHUwNDMyXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1''@;'; put 'put ''MDQzMFx1MDQ0MF9cdTA0MTdcdTA0NDNcdTA0NDBcdTA0MzNcdTA0MzBcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxNFx1MDQzZVx1MDQzYlx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBc''@;'; put 'put ''dTA0NDBfXHUwNDFkXHUwNDMwXHUwNDM5XHUwNDNjXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTVcdTA0NDFcdTA0MzRcdTA0YWZcdTA0MzNcdTA0NGRcdTA0NGRcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxMFx1MDQ0''@;'; put 'put ''MFx1MDQzMFx1MDQzMlx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDEwXHUwNDQwXHUwNDMyXHUwNDMwXHUwNDNkIFx1MDQzZFx1MDQ0ZFx1MDQzM1x1MDQzNFx1MDRhZlx1MDQzM1x1MDQ0ZFx1MDQ0ZFx1MDQ0MCBcdTA0NDFcdTA0''@;'; put 'put ''MzBcdTA0NDBfXHUwNDEwXHUwNDQwXHUwNDMyXHUwNDMwXHUwNDNkIFx1MDQ0NVx1MDQzZVx1MDQ1MVx1MDQ0MFx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjEgXHUwNDQxXHUwNDMwXHUwNDQw''@;'; put 'put ''XzIgXHUwNDQxXHUwNDMwXHUwNDQwXzMgXHUwNDQxXHUwNDMwXHUwNDQwXzQgXHUwNDQxXHUwNDMwXHUwNDQwXzUgXHUwNDQxXHUwNDMwXHUwNDQwXzYgXHUwNDQxXHUwNDMwXHUwNDQwXzcgXHUwNDQxXHUwNDMwXHUwNDQwXzggXHUwNDQxXHUwNDMwXHUwNDQwXzkgXHUwNDQxXHUwNDMwXHUw''@;'; put 'put ''NDQwXzEwIFx1MDQ0MVx1MDQzMFx1MDQ0MF8xMSBcdTA0NDFcdTA0MzBcdTA0NDBfMTIgXHUwNDQxXHUwNDMwXHUwNDQwIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MDQxZFx1MDQ0Zlx1MDQzY19cdTA0MTRcdTA0MzBcdTA0MzJcdTA0MzBcdTA0MzBfXHUw''@;'; put 'put ''NDFjXHUwNDRmXHUwNDMzXHUwNDNjXHUwNDMwXHUwNDQwX1x1MDQxYlx1MDQ0NVx1MDQzMFx1MDQzM1x1MDQzMlx1MDQzMF9cdTA0MWZcdTA0YWZcdTA0NDBcdTA0NGRcdTA0MzJfXHUwNDExXHUwNDMwXHUwNDMwXHUwNDQxXHUwNDMwXHUwNDNkX1x1MDQxMVx1MDQ0Zlx1MDQzY1x1MDQzMVx1''@;'; put 'put ''MDQzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MWRcdTA0NGZcdTA0M2NfXHUwNDE0XHUwNDMwXHUwNDMyX1x1MDQxY1x1MDQ0Zlx1MDQzM19cdTA0MWJcdTA0NDVcdTA0MzBfXHUwNDFmXHUwNGFmXHUwNDQwX1x1MDQxMVx1MDQzMFx1MDQzMF9cdTA0MTFcdTA0NGZcdTA0M2Mi''@;'; put 'put ''LnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQxZFx1MDQ0Zl9cdTA0MTRcdTA0MzBfXHUwNDFjXHUwNDRmX1x1MDQxYlx1MDQ0NV9cdTA0MWZcdTA0YWZfXHUwNDExXHUwNDMwX1x1MDQxMVx1MDQ0ZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6''@;'; put 'put ''e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IllZWVkgXHUwNDNlXHUwNDNkXHUwNDRiIE1NTU1cdTA0NGJcdTA0M2QgRCIsTExMOiJZWVlZIFx1MDQzZVx1MDQzZFx1MDQ0YiBNTU1NXHUwNDRiXHUwNDNkIEQgSEg6bW0iLExMTEw6ImRkZGQsIFlZWVkgXHUw''@;'; put 'put ''NDNlXHUwNDNkXHUwNDRiIE1NTU1cdTA0NGJcdTA0M2QgRCBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDRhZVx1MDRlOHxcdTA0YWVcdTA0MjUvaSxpc1BNOmZ1bmN0aW9uKEEpe3JldHVybiJcdTA0YWVcdTA0MjUiPT09QX0sbWVyaWRpZW06ZnVuY3Rpb24oQSx2LEMpe3JldHVybiBBPDEy''@;'; put 'put ''PyJcdTA0YWVcdTA0ZTgiOiJcdTA0YWVcdTA0MjUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDRlOFx1MDQzZFx1MDRlOVx1MDRlOVx1MDQzNFx1MDRlOVx1MDQ0MF0gTFQiLG5leHREYXk6IltcdTA0MWNcdTA0MzBcdTA0NDBcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDhdIExUIixuZXh0V2Vl''@;'; put 'put ''azoiW1x1MDQxOFx1MDQ0MFx1MDQ0ZFx1MDQ0NV0gZGRkZCBMVCIsbGFzdERheToiW1x1MDRlOFx1MDQ0N1x1MDQzOFx1MDQzM1x1MDQzNFx1MDRlOVx1MDQ0MF0gTFQiLGxhc3RXZWVrOiJbXHUwNGU4XHUwNDNkXHUwNDMzXHUwNGU5XHUwNDQwXHUwNDQxXHUwNGU5XHUwNDNkXSBkZGRkIExU''@;'; put 'put ''IixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA0MzRcdTA0MzBcdTA0NDBcdTA0MzBcdTA0MzAiLHBhc3Q6IiVzIFx1MDRlOVx1MDQzY1x1MDQzZFx1MDRlOSIsczpjLHNzOmMsbTpjLG1tOmMsaDpjLGhoOmMsZDpjLGRkOmMsTTpjLE1NOmMseTpjLHl5OmN9LGRh''@;'; put 'put ''eU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0gXHUwNGU5XHUwNDM0XHUwNGU5XHUwNDQwLyxvcmRpbmFsOmZ1bmN0aW9uKEEsdil7c3dpdGNoKHYpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIEErIiBcdTA0ZTlcdTA0MzRcdTA0ZTlcdTA0NDAiO2RlZmF1bHQ6cmV0dXJu''@;'; put 'put ''IEF9fX0pfShoKDk3NTg2KSl9LDU5MDgwKGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz17MToiXHUwOTY3IiwyOiJcdTA5NjgiLDM6Ilx1MDk2OSIsNDoiXHUwOTZhIiw1OiJcdTA5NmIiLDY6Ilx1MDk2YyIsNzoiXHUwOTZkIiw4OiJcdTA5NmUiLDk6Ilx1MDk2ZiIs''@;'; put 'put ''MDoiXHUwOTY2In0scz17Ilx1MDk2NyI6IjEiLCJcdTA5NjgiOiIyIiwiXHUwOTY5IjoiMyIsIlx1MDk2YSI6IjQiLCJcdTA5NmIiOiI1IiwiXHUwOTZjIjoiNiIsIlx1MDk2ZCI6IjciLCJcdTA5NmUiOiI4IiwiXHUwOTZmIjoiOSIsIlx1MDk2NiI6IjAifTtmdW5jdGlvbiBBKEMsdyxTLEwp''@;'; put 'put ''e3ZhciBSPSIiO2lmKHcpc3dpdGNoKFMpe2Nhc2UicyI6Uj0iXHUwOTE1XHUwOTNlXHUwOTM5XHUwOTQwIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyNiI7YnJlYWs7Y2FzZSJzcyI6Uj0iJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTI2IjticmVhaztjYXNlIm0iOlI9Ilx1''@;'; put 'put ''MDkwZlx1MDkxNSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5M2ZcdTA5MWYiO2JyZWFrO2Nhc2UibW0iOlI9IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkzZlx1MDkxZlx1MDk0NyI7YnJlYWs7Y2FzZSJoIjpSPSJcdTA5MGZcdTA5MTUgXHUwOTI0XHUwOTNlXHUwOTM4IjticmVhaztjYXNlImho''@;'; put 'put ''IjpSPSIlZCBcdTA5MjRcdTA5M2VcdTA5MzgiO2JyZWFrO2Nhc2UiZCI6Uj0iXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDkzZlx1MDkzNVx1MDkzOCI7YnJlYWs7Y2FzZSJkZCI6Uj0iJWQgXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTM4IjticmVhaztjYXNlIk0iOlI9Ilx1MDkwZlx1MDkxNSBcdTA5''@;'; put 'put ''MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5M2UiO2JyZWFrO2Nhc2UiTU0iOlI9IiVkIFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDk0NyI7YnJlYWs7Y2FzZSJ5IjpSPSJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3IjticmVhaztjYXNlInl5IjpSPSIlZCBcdTA5MzVc''@;'; put 'put ''dTA5MzBcdTA5NGRcdTA5MzdcdTA5NDcifWVsc2Ugc3dpdGNoKFMpe2Nhc2UicyI6Uj0iXHUwOTE1XHUwOTNlXHUwOTM5XHUwOTQwIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyNlx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJzcyI6Uj0iJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAy''@;'; put 'put ''XHUwOTI2XHUwOTNlXHUwOTAyIjticmVhaztjYXNlIm0iOlI9Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5M2ZcdTA5MWZcdTA5M2UiO2JyZWFrO2Nhc2UibW0iOlI9IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkzZlx1MDkxZlx1MDkzZVx1MDkwMiI7YnJlYWs7''@;'; put 'put ''Y2FzZSJoIjpSPSJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTI0XHUwOTNlXHUwOTM4XHUwOTNlIjticmVhaztjYXNlImhoIjpSPSIlZCBcdTA5MjRcdTA5M2VcdTA5MzhcdTA5M2VcdTA5MDIiO2JyZWFrO2Nhc2UiZCI6Uj0iXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyNlx1MDkzZlx1MDkzNVx1''@;'; put 'put ''MDkzOFx1MDkzZSI7YnJlYWs7Y2FzZSJkZCI6Uj0iJWQgXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTM4XHUwOTNlXHUwOTAyIjticmVhaztjYXNlIk0iOlI9Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2UiO2JyZWFrO2Nhc2UiTU0i''@;'; put 'put ''OlI9IiVkIFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJ5IjpSPSJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3XHUwOTNlIjticmVhaztjYXNlInl5IjpSPSIlZCBcdTA5MzVcdTA5MzBcdTA5NGRc''@;'; put 'put ''dTA5MzdcdTA5M2VcdTA5MDIifXJldHVybiBSLnJlcGxhY2UoLyVkL2ksQyl9eS5kZWZpbmVMb2NhbGUoIm1yIix7bW9udGhzOiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDdcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxXHUwOTM1''@;'; put 'put ''XHUwOTNlXHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5M2ZcdTA5MzJfXHUwOTJlXHUwOTQ3X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5NDhfXHUwOTExXHUwOTE3XHUwOTM4XHUw''@;'; put 'put ''OTRkXHUwOTFmX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkyMVx1''@;'; put 'put ''MDkzZlx1MDkzOFx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3Ll9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDEuX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYS5fXHUwOTBmXHUw''@;'; put 'put ''OTJhXHUwOTRkXHUwOTMwXHUwOTNmLl9cdTA5MmVcdTA5NDcuX1x1MDkxY1x1MDk0Mlx1MDkyOC5fXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTQ4Ll9cdTA5MTFcdTA5MTcuX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMi5fXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRi''@;'; put 'put ''Ll9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdcdTA5MDIuX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMi4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwOTMwXHUwOTM1XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzOFx1''@;'; put 'put ''MDk0Ylx1MDkyZVx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzNcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTQxXHUwOTI3XHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkxN1x1MDk0MVx1MDkzMFx1MDk0Mlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5NDFc''@;'; put 'put ''dTA5MTVcdTA5NGRcdTA5MzBcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDkzMFx1MDkzNVx1MDkzZl9cdTA5MzhcdTA5NGJcdTA5MmVfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMzX1x1''@;'; put 'put ''MDkyY1x1MDk0MVx1MDkyN19cdTA5MTdcdTA5NDFcdTA5MzBcdTA5NDJfXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOTMwX1x1MDkzOFx1MDk0Yl9cdTA5MmVcdTA5MDJfXHUwOTJjXHUwOTQxX1x1''@;'; put 'put ''MDkxN1x1MDk0MV9cdTA5MzZcdTA5NDFfXHUwOTM2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZSIsTFRTOiJBIGg6bW06c3MgXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlIixMOiJERC9NTS9ZWVlZIixM''@;'; put 'put ''TDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2UiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5MDZc''@;'; put 'put ''dTA5MWNdIExUIixuZXh0RGF5OiJbXHUwOTA5XHUwOTI2XHUwOTRkXHUwOTJmXHUwOTNlXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwOTE1XHUwOTNlXHUwOTMyXSBMVCIsbGFzdFdlZWs6IltcdTA5MmVcdTA5M2VcdTA5MTdcdTA5NDBcdTA5MzJdIGRkZGQsIExUIixz''@;'; put 'put ''YW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1MDkyZVx1MDkyN1x1MDk0ZFx1MDkyZlx1MDk0NyIscGFzdDoiJXNcdTA5MmFcdTA5NDJcdTA5MzBcdTA5NGRcdTA5MzVcdTA5NDAiLHM6QSxzczpBLG06QSxtbTpBLGg6QSxoaDpBLGQ6QSxkZDpBLE06QSxNTTpBLHk6QSx5''@;'; put 'put ''eTpBfSxwcmVwYXJzZTpmdW5jdGlvbihDKXtyZXR1cm4gQy5yZXBsYWNlKC9bXHUwOTY3XHUwOTY4XHUwOTY5XHUwOTZhXHUwOTZiXHUwOTZjXHUwOTZkXHUwOTZlXHUwOTZmXHUwOTY2XS9nLGZ1bmN0aW9uKHcpe3JldHVybiBzW3ddfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oQyl7cmV0dXJu''@;'; put 'put ''IEMucmVwbGFjZSgvXGQvZyxmdW5jdGlvbih3KXtyZXR1cm4gY1t3XX0pfSxtZXJpZGllbVBhcnNlOi9cdTA5MmFcdTA5MzlcdTA5M2VcdTA5MWZcdTA5NDd8XHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwfFx1MDkyNlx1MDk0MVx1MDkyYVx1MDkzZVx1MDkzMFx1MDk0MHxcdTA5Mzhc''@;'; put 'put ''dTA5M2VcdTA5MmZcdTA5MDJcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDB8XHUwOTMwXHUwOTNlXHUwOTI0XHUwOTRkXHUwOTMwXHUwOTQwLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oQyx3KXtyZXR1cm4gMTI9PT1DJiYoQz0wKSwiXHUwOTJhXHUwOTM5XHUwOTNlXHUwOTFmXHUwOTQ3Ij09PXd8''@;'; put 'put ''fCJcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDAiPT09dz9DOiJcdTA5MjZcdTA5NDFcdTA5MmFcdTA5M2VcdTA5MzBcdTA5NDAiPT09d3x8Ilx1MDkzOFx1MDkzZVx1MDkyZlx1MDkwMlx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MCI9PT13fHwiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTRk''@;'; put 'put ''XHUwOTMwXHUwOTQwIj09PXc/Qz49MTI/QzpDKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oQyx3LFMpe3JldHVybiBDPj0wJiZDPDY/Ilx1MDkyYVx1MDkzOVx1MDkzZVx1MDkxZlx1MDk0NyI6QzwxMj8iXHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwIjpDPDE3PyJcdTA5MjZc''@;'; put 'put ''dTA5NDFcdTA5MmFcdTA5M2VcdTA5MzBcdTA5NDAiOkM8MjA/Ilx1MDkzOFx1MDkzZVx1MDkyZlx1MDkwMlx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MCI6Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0ZFx1MDkzMFx1MDk0MCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShoKDk3NTg2KSl9LDI1OTUw''@;'; put 'put ''KGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt5LmRlZmluZUxvY2FsZSgibXMtbXkiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFjX0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlciIuc3BsaXQoIl8iKSxtb250''@;'; put 'put ''aHNTaG9ydDoiSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IkFoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaGRfSXNuX1NlbF9SYWJf''@;'; put 'put ''S2hhX0p1bV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkFoX0lzX1NsX1JiX0ttX0ptX1NiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVr''@;'; put 'put ''dWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovcGFnaXx0ZW5nYWhhcml8cGV0YW5nfG1hbGFtLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24ocyxBKXtyZXR1cm4gMTI9PT1zJiYocz0wKSwicGFnaSI9PT1BP3M6InRlbmdhaGFy''@;'; put 'put ''aSI9PT1BP3M+PTExP3M6cysxMjoicGV0YW5nIj09PUF8fCJtYWxhbSI9PT1BP3MrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihzLEEsdil7cmV0dXJuIHM8MTE/InBhZ2kiOnM8MTU/InRlbmdhaGFyaSI6czwxOT8icGV0YW5nIjoibWFsYW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hh''@;'; put 'put ''cmkgaW5pIHB1a3VsXSBMVCIsbmV4dERheToiW0Vzb2sgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2VsbWFyaW4gcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBbbGVwYXMgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0''@;'; put 'put ''dXJlOiJkYWxhbSAlcyIscGFzdDoiJXMgeWFuZyBsZXBhcyIsczoiYmViZXJhcGEgc2FhdCIsc3M6IiVkIHNhYXQiLG06InNlbWluaXQiLG1tOiIlZCBtaW5pdCIsaDoic2VqYW0iLGhoOiIlZCBqYW0iLGQ6InNlaGFyaSIsZGQ6IiVkIGhhcmkiLE06InNlYnVsYW4iLE1NOiIlZCBidWxhbiIs''@;'; put 'put ''eToic2V0YWh1biIseXk6IiVkIHRhaHVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGgoOTc1ODYpKX0sNzAzOTkoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJtcyIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYWNfQXByaWxfTWVpX0p1bl9K''@;'; put 'put ''dWxhaV9PZ29zX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rpc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfT2dzX1NlcF9Pa3RfTm92X0RpcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiQWhhZF9Jc25pbl9TZWxhc2FfUmFidV9L''@;'; put 'put ''aGFtaXNfSnVtYWF0X1NhYnR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkFoZF9Jc25fU2VsX1JhYl9LaGFfSnVtX1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQWhfSXNfU2xfUmJfS21fSm1fU2IiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJI''@;'; put 'put ''SC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9wYWdpfHRlbmdhaGFyaXxwZXRhbmd8bWFsYW0vLG1lcmlkaWVt''@;'; put 'put ''SG91cjpmdW5jdGlvbihzLEEpe3JldHVybiAxMj09PXMmJihzPTApLCJwYWdpIj09PUE/czoidGVuZ2FoYXJpIj09PUE/cz49MTE/czpzKzEyOiJwZXRhbmciPT09QXx8Im1hbGFtIj09PUE/cysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHMsQSx2KXtyZXR1cm4gczwxMT8icGFnaSI6''@;'; put 'put ''czwxNT8idGVuZ2FoYXJpIjpzPDE5PyJwZXRhbmciOiJtYWxhbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGFyaSBpbmkgcHVrdWxdIExUIixuZXh0RGF5OiJbRXNvayBwdWt1bF0gTFQiLG5leHRXZWVrOiJkZGRkIFtwdWt1bF0gTFQiLGxhc3REYXk6IltLZWxtYXJpbiBwdWt1bF0gTFQiLGxh''@;'; put 'put ''c3RXZWVrOiJkZGRkIFtsZXBhcyBwdWt1bF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbGFtICVzIixwYXN0OiIlcyB5YW5nIGxlcGFzIixzOiJiZWJlcmFwYSBzYWF0IixzczoiJWQgc2FhdCIsbToic2VtaW5pdCIsbW06IiVkIG1pbml0IixoOiJzZWphbSIs''@;'; put 'put ''aGg6IiVkIGphbSIsZDoic2VoYXJpIixkZDoiJWQgaGFyaSIsTToic2VidWxhbiIsTU06IiVkIGJ1bGFuIix5OiJzZXRhaHVuIix5eToiJWQgdGFodW4ifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oaCg5NzU4NikpfSw3OTkwMihmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5k''@;'; put 'put ''ZWZpbmVMb2NhbGUoIm10Iix7bW9udGhzOiJKYW5uYXJfRnJhcl9NYXJ6dV9BcHJpbF9NZWpqdV9cdTAxMjB1bmp1X0x1bGp1X0F3d2lzc3VfU2V0dGVtYnJ1X090dHVicnVfTm92ZW1icnVfRGlcdTAxMGJlbWJydSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZyYV9NYXJfQXByX01l''@;'; put 'put ''al9cdTAxMjB1bl9MdWxfQXd3X1NldF9PdHRfTm92X0RpXHUwMTBiIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJJbC1cdTAxMjZhZGRfSXQtVG5lam5fSXQtVGxpZXRhX0wtRXJiZ1x1MDEyN2FfSWwtXHUwMTI2YW1pc19JbC1cdTAxMjBpbWdcdTAxMjdhX0lzLVNpYnQiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNTaG9ydDoiXHUwMTI2YWRfVG5lX1RsaV9FcmJfXHUwMTI2YW1fXHUwMTIwaW1fU2liIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTAxMjZhX1RuX1RsX0VyX1x1MDEyNmFfXHUwMTIwaV9TaSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1t''@;'; put 'put ''OnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltJbGx1bSBmaWwtXUxUIixuZXh0RGF5OiJbR1x1MDEyN2FkYSBmaWwtXUxUIixuZXh0V2Vl''@;'; put 'put ''azoiZGRkZCBbZmlsLV1MVCIsbGFzdERheToiW0lsLWJpZXJhXHUwMTI3IGZpbC1dTFQiLGxhc3RXZWVrOiJkZGRkIFtsaSBnXHUwMTI3YWRkYV0gW2ZpbC1dTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImZcdTIwMTkgJXMiLHBhc3Q6IiVzIGlsdSIsczoiZnRpdCBz''@;'; put 'put ''ZWtvbmRpIixzczoiJWQgc2Vrb25kaSIsbToibWludXRhIixtbToiJWQgbWludXRpIixoOiJzaWVnXHUwMTI3YSIsaGg6IiVkIHNpZWdcdTAxMjdhdCIsZDoiXHUwMTIxdXJuYXRhIixkZDoiJWQgXHUwMTIxcmFuZXQiLE06InhhaGFyIixNTToiJWQgeGh1ciIseToic2VuYSIseXk6IiVkIHNu''@;'; put 'put ''aSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShoKDk3NTg2KSl9LDcyOTg1KGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz17MToiXHUxMDQxIiwyOiJcdTEwNDIiLDM6Ilx1''@;'; put 'put ''MTA0MyIsNDoiXHUxMDQ0Iiw1OiJcdTEwNDUiLDY6Ilx1MTA0NiIsNzoiXHUxMDQ3Iiw4OiJcdTEwNDgiLDk6Ilx1MTA0OSIsMDoiXHUxMDQwIn0scz17Ilx1MTA0MSI6IjEiLCJcdTEwNDIiOiIyIiwiXHUxMDQzIjoiMyIsIlx1MTA0NCI6IjQiLCJcdTEwNDUiOiI1IiwiXHUxMDQ2IjoiNiIs''@;'; put 'put ''Ilx1MTA0NyI6IjciLCJcdTEwNDgiOiI4IiwiXHUxMDQ5IjoiOSIsIlx1MTA0MCI6IjAifTt5LmRlZmluZUxvY2FsZSgibXkiLHttb250aHM6Ilx1MTAwN1x1MTAxNFx1MTAzYVx1MTAxNFx1MTAxZFx1MTAyYlx1MTAxYlx1MTAyZV9cdTEwMTZcdTEwMzFcdTEwMTZcdTEwMzFcdTEwMmNcdTEw''@;'; put 'put ''M2FcdTEwMWRcdTEwMmJcdTEwMWJcdTEwMmVfXHUxMDE5XHUxMDEwXHUxMDNhX1x1MTAyN1x1MTAxNVx1MTAzY1x1MTAyZV9cdTEwMTlcdTEwMzFfXHUxMDA3XHUxMDNkXHUxMDE0XHUxMDNhX1x1MTAwN1x1MTAzMFx1MTAxY1x1MTAyZFx1MTAyZlx1MTAwNFx1MTAzYV9cdTEwMWVcdTEwM2Nc''@;'; put 'put ''dTEwMDJcdTEwMmZcdTEwMTBcdTEwM2FfXHUxMDA1XHUxMDAwXHUxMDNhXHUxMDEwXHUxMDA0XHUxMDNhXHUxMDE4XHUxMDJjX1x1MTAyMVx1MTAzMVx1MTAyY1x1MTAwMFx1MTAzYVx1MTAxMFx1MTAyZFx1MTAyZlx1MTAxOFx1MTAyY19cdTEwMTRcdTEwMmRcdTEwMmZcdTEwMWRcdTEwMDRc''@;'; put 'put ''dTEwM2FcdTEwMThcdTEwMmNfXHUxMDEyXHUxMDJlXHUxMDA3XHUxMDA0XHUxMDNhXHUxMDE4XHUxMDJjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTEwMDdcdTEwMTRcdTEwM2FfXHUxMDE2XHUxMDMxX1x1MTAxOVx1MTAxMFx1MTAzYV9cdTEwMTVcdTEwM2NcdTEwMmVfXHUxMDE5XHUx''@;'; put 'put ''MDMxX1x1MTAwN1x1MTAzZFx1MTAxNFx1MTAzYV9cdTEwMWNcdTEwMmRcdTEwMmZcdTEwMDRcdTEwM2FfXHUxMDFlXHUxMDNjX1x1MTAwNVx1MTAwMFx1MTAzYV9cdTEwMjFcdTEwMzFcdTEwMmNcdTEwMDBcdTEwM2FfXHUxMDE0XHUxMDJkXHUxMDJmX1x1MTAxMlx1MTAyZSIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5czoiXHUxMDEwXHUxMDE0XHUxMDA0XHUxMDNhXHUxMDM5XHUxMDAyXHUxMDE0XHUxMDNkXHUxMDMxX1x1MTAxMFx1MTAxNFx1MTAwNFx1MTAzYVx1MTAzOVx1MTAxY1x1MTAyY19cdTEwMjFcdTEwMDRcdTEwM2FcdTEwMzlcdTEwMDJcdTEwMmJfXHUxMDE3XHUxMDJmXHUxMDEy''@;'; put 'put ''XHUxMDM5XHUxMDEzXHUxMDFmXHUxMDMwXHUxMDM4X1x1MTAwMFx1MTAzY1x1MTAyY1x1MTAxZVx1MTAxNVx1MTAxMFx1MTAzMVx1MTAzOF9cdTEwMWVcdTEwMzFcdTEwMmNcdTEwMDBcdTEwM2NcdTEwMmNfXHUxMDA1XHUxMDE0XHUxMDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1''@;'; put 'put ''MTAxNFx1MTAzZFx1MTAzMV9cdTEwMWNcdTEwMmNfXHUxMDAyXHUxMDJiX1x1MTAxZlx1MTAzMFx1MTAzOF9cdTEwMDBcdTEwM2NcdTEwMmNfXHUxMDFlXHUxMDMxXHUxMDJjX1x1MTAxNFx1MTAzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUxMDE0XHUxMDNkXHUxMDMxX1x1MTAxY1x1''@;'; put 'put ''MTAyY19cdTEwMDJcdTEwMmJfXHUxMDFmXHUxMDMwXHUxMDM4X1x1MTAwMFx1MTAzY1x1MTAyY19cdTEwMWVcdTEwMzFcdTEwMmNfXHUxMDE0XHUxMDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1N''@;'; put 'put ''TU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUxMDFhXHUxMDE0XHUxMDMxLl0gTFQgW1x1MTAxOVx1MTAzZVx1MTAyY10iLG5leHREYXk6IltcdTEwMTlcdTEwMTRcdTEwMDBcdTEwM2Fc''@;'; put 'put ''dTEwMTZcdTEwM2NcdTEwMTRcdTEwM2FdIExUIFtcdTEwMTlcdTEwM2VcdTEwMmNdIixuZXh0V2VlazoiZGRkZCBMVCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsbGFzdERheToiW1x1MTAxOVx1MTAxNFx1MTAzMS5cdTEwMDBdIExUIFtcdTEwMTlcdTEwM2VcdTEwMmNdIixsYXN0V2VlazoiW1x1''@;'; put 'put ''MTAxNVx1MTAzY1x1MTAyZVx1MTAzOFx1MTAwMVx1MTAzMlx1MTAzN1x1MTAxZVx1MTAzMVx1MTAyY10gZGRkZCBMVCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUxMDFjXHUxMDJjXHUxMDE5XHUxMDBhXHUxMDNhXHUxMDM3ICVz''@;'; put 'put ''IFx1MTAxOVx1MTAzZVx1MTAyYyIscGFzdDoiXHUxMDFjXHUxMDNkXHUxMDE0XHUxMDNhXHUxMDAxXHUxMDMyXHUxMDM3XHUxMDFlXHUxMDMxXHUxMDJjICVzIFx1MTAwMCIsczoiXHUxMDA1XHUxMDAwXHUxMDM5XHUxMDAwXHUxMDE0XHUxMDNhLlx1MTAyMVx1MTAxNFx1MTAwYVx1MTAzYVx1''@;'; put 'put ''MTAzOFx1MTAwNFx1MTAxYVx1MTAzYSIsc3M6IiVkIFx1MTAwNVx1MTAwMFx1MTAzOVx1MTAwMFx1MTAxNFx1MTAzN1x1MTAzYSIsbToiXHUxMDEwXHUxMDA1XHUxMDNhXHUxMDE5XHUxMDJkXHUxMDE0XHUxMDA1XHUxMDNhIixtbToiJWQgXHUxMDE5XHUxMDJkXHUxMDE0XHUxMDA1XHUxMDNh''@;'; put 'put ''IixoOiJcdTEwMTBcdTEwMDVcdTEwM2FcdTEwMTRcdTEwMmNcdTEwMWJcdTEwMmUiLGhoOiIlZCBcdTEwMTRcdTEwMmNcdTEwMWJcdTEwMmUiLGQ6Ilx1MTAxMFx1MTAwNVx1MTAzYVx1MTAxYlx1MTAwMFx1MTAzYSIsZGQ6IiVkIFx1MTAxYlx1MTAwMFx1MTAzYSIsTToiXHUxMDEwXHUxMDA1''@;'; put 'put ''XHUxMDNhXHUxMDFjIixNTToiJWQgXHUxMDFjIix5OiJcdTEwMTBcdTEwMDVcdTEwM2FcdTEwMTRcdTEwM2VcdTEwMDVcdTEwM2EiLHl5OiIlZCBcdTEwMTRcdTEwM2VcdTEwMDVcdTEwM2EifSxwcmVwYXJzZTpmdW5jdGlvbih2KXtyZXR1cm4gdi5yZXBsYWNlKC9bXHUxMDQxXHUxMDQyXHUx''@;'; put 'put ''MDQzXHUxMDQ0XHUxMDQ1XHUxMDQ2XHUxMDQ3XHUxMDQ4XHUxMDQ5XHUxMDQwXS9nLGZ1bmN0aW9uKEMpe3JldHVybiBzW0NdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odil7cmV0dXJuIHYucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihDKXtyZXR1cm4gY1tDXX0pfSx3ZWVrOntkb3c6MSxkb3k6''@;'; put 'put ''NH19KX0oaCg5NzU4NikpfSw2Nzg1OShmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5kZWZpbmVMb2NhbGUoIm5iIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJzX2FwcmlsX21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2Vt''@;'; put 'put ''YmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyc19hcHIuX21haV9qdW5pX2p1bGlfYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6InNceGY4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9y''@;'; put 'put ''c2RhZ19mcmVkYWdfbFx4ZjhyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InNceGY4Ll9tYS5fdGkuX29uLl90by5fZnIuX2xceGY4LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic1x4ZjhfbWFfdGlfb25fdG9fZnJfbFx4ZjgiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0''@;'; put 'put ''OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5''@;'; put 'put ''OiJbaSBkYWcga2wuXSBMVCIsbmV4dERheToiW2kgbW9yZ2VuIGtsLl0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbaSBnXHhlNXIga2wuXSBMVCIsbGFzdFdlZWs6Iltmb3JyaWdlXSBkZGRkIFtrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0''@;'; put 'put ''dXJlOiJvbSAlcyIscGFzdDoiJXMgc2lkZW4iLHM6Im5vZW4gc2VrdW5kZXIiLHNzOiIlZCBzZWt1bmRlciIsbToiZXR0IG1pbnV0dCIsbW06IiVkIG1pbnV0dGVyIixoOiJceGU5biB0aW1lIixoaDoiJWQgdGltZXIiLGQ6Ilx4ZTluIGRhZyIsZGQ6IiVkIGRhZ2VyIix3OiJceGU5biB1a2Ui''@;'; put 'put ''LHd3OiIlZCB1a2VyIixNOiJceGU5biBtXHhlNW5lZCIsTU06IiVkIG1ceGU1bmVkZXIiLHk6ImV0dCBceGU1ciIseXk6IiVkIFx4ZTVyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShoKDk3NTg2KSl9LDEz''@;'; put 'put ''NjQyKGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz17MToiXHUwOTY3IiwyOiJcdTA5NjgiLDM6Ilx1MDk2OSIsNDoiXHUwOTZhIiw1OiJcdTA5NmIiLDY6Ilx1MDk2YyIsNzoiXHUwOTZkIiw4OiJcdTA5NmUiLDk6Ilx1MDk2ZiIsMDoiXHUwOTY2In0scz17Ilx1MDk2''@;'; put 'put ''NyI6IjEiLCJcdTA5NjgiOiIyIiwiXHUwOTY5IjoiMyIsIlx1MDk2YSI6IjQiLCJcdTA5NmIiOiI1IiwiXHUwOTZjIjoiNiIsIlx1MDk2ZCI6IjciLCJcdTA5NmUiOiI4IiwiXHUwOTZmIjoiOSIsIlx1MDk2NiI6IjAifTt5LmRlZmluZUxvY2FsZSgibmUiLHttb250aHM6Ilx1MDkxY1x1MDky''@;'; put 'put ''OFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDFcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDkzZlx1MDkzMl9cdTA5MmVcdTA5MDhfXHUwOTFjXHUw''@;'; put 'put ''OTQxXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOF9cdTA5MDVcdTA5MTdcdTA5MzdcdTA5NGRcdTA5MWZfXHUwOTM4XHUwOTQ3XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwX1x1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Ylx1''@;'; put 'put ''MDkyY1x1MDkzMF9cdTA5MjhcdTA5NGJcdTA5MmRcdTA5NDdcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzBfXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA5MWNcdTA5MjguX1x1MDkyYlx1MDk0N1x1MDky''@;'; put 'put ''Y1x1MDk0ZFx1MDkzMFx1MDk0MS5fXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDkzZi5fXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0MVx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDguX1x1MDkwNVx1MDkxNy5fXHUw''@;'; put 'put ''OTM4XHUwOTQ3XHUwOTJhXHUwOTRkXHUwOTFmLl9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGIuX1x1MDkyOFx1MDk0Ylx1MDkyZFx1MDk0Ny5fXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTA5MDZcdTA5''@;'; put 'put ''MDdcdTA5MjRcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTRiXHUwOTJlXHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkyZVx1MDkxOVx1MDk0ZFx1MDkxN1x1MDkzMlx1MDkyY1x1MDkzZVx1MDkzMF9cdTA5MmNcdTA5NDFcdTA5MjdcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTNmXHUw''@;'; put 'put ''OTM5XHUwOTNmXHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMFx1MDkyY1x1MDkzZVx1MDkzMF9cdTA5MzZcdTA5MjhcdTA5M2ZcdTA5MmNcdTA5M2VcdTA5MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOTA2XHUwOTA3XHUwOTI0Ll9cdTA5''@;'; put 'put ''MzhcdTA5NGJcdTA5MmUuX1x1MDkyZVx1MDkxOVx1MDk0ZFx1MDkxN1x1MDkzMi5fXHUwOTJjXHUwOTQxXHUwOTI3Ll9cdTA5MmNcdTA5M2ZcdTA5MzlcdTA5M2YuX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMC5fXHUwOTM2XHUwOTI4XHUwOTNmLiIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c01pbjoiXHUwOTA2Ll9cdTA5MzhcdTA5NGIuX1x1MDkyZVx1MDkwMi5fXHUwOTJjXHUwOTQxLl9cdTA5MmNcdTA5M2YuX1x1MDkzNlx1MDk0MS5fXHUwOTM2LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBXHUwOTE1XHUwOTRiIGg6bW0g''@;'; put 'put ''XHUwOTJjXHUwOTFjXHUwOTQ3IixMVFM6IkFcdTA5MTVcdTA5NGIgaDptbTpzcyBcdTA5MmNcdTA5MWNcdTA5NDciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQVx1MDkxNVx1MDk0YiBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIsTExMTDoiZGRk''@;'; put 'put ''ZCwgRCBNTU1NIFlZWVksIEFcdTA5MTVcdTA5NGIgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDcifSxwcmVwYXJzZTpmdW5jdGlvbih2KXtyZXR1cm4gdi5yZXBsYWNlKC9bXHUwOTY3XHUwOTY4XHUwOTY5XHUwOTZhXHUwOTZiXHUwOTZjXHUwOTZkXHUwOTZlXHUwOTZmXHUwOTY2XS9nLGZ1bmN0''@;'; put 'put ''aW9uKEMpe3JldHVybiBzW0NdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odil7cmV0dXJuIHYucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihDKXtyZXR1cm4gY1tDXX0pfSxtZXJpZGllbVBhcnNlOi9cdTA5MzBcdTA5M2VcdTA5MjRcdTA5M2Z8XHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNlXHUwOTI4''@;'; put 'put ''fFx1MDkyNlx1MDkzZlx1MDkwOVx1MDkwMVx1MDkzOFx1MDk0YnxcdTA5MzhcdTA5M2VcdTA5MDFcdTA5MWQvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih2LEMpe3JldHVybiAxMj09PXYmJih2PTApLCJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5M2YiPT09Qz92PDQ/djp2KzEyOiJcdTA5MmNcdTA5''@;'; put 'put ''M2ZcdTA5MzlcdTA5M2VcdTA5MjgiPT09Qz92OiJcdTA5MjZcdTA5M2ZcdTA5MDlcdTA5MDFcdTA5MzhcdTA5NGIiPT09Qz92Pj0xMD92OnYrMTI6Ilx1MDkzOFx1MDkzZVx1MDkwMVx1MDkxZCI9PT1DP3YrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbih2LEMsdyl7cmV0dXJuIHY8Mz8i''@;'; put 'put ''XHUwOTMwXHUwOTNlXHUwOTI0XHUwOTNmIjp2PDEyPyJcdTA5MmNcdTA5M2ZcdTA5MzlcdTA5M2VcdTA5MjgiOnY8MTY/Ilx1MDkyNlx1MDkzZlx1MDkwOVx1MDkwMVx1MDkzOFx1MDk0YiI6djwyMD8iXHUwOTM4XHUwOTNlXHUwOTAxXHUwOTFkIjoiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTNm''@;'; put 'put ''In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5MDZcdTA5MWNdIExUIixuZXh0RGF5OiJbXHUwOTJkXHUwOTRiXHUwOTMyXHUwOTNmXSBMVCIsbmV4dFdlZWs6IltcdTA5MDZcdTA5MDlcdTA5MDFcdTA5MjZcdTA5NGJdIGRkZGRbLF0gTFQiLGxhc3REYXk6IltcdTA5MzlcdTA5M2ZcdTA5MWNc''@;'; put 'put ''dTA5NGJdIExUIixsYXN0V2VlazoiW1x1MDkxN1x1MDkwZlx1MDkxNVx1MDk0Yl0gZGRkZFssXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTA5MmVcdTA5M2UiLHBhc3Q6IiVzIFx1MDkwNVx1MDkxN1x1MDkzZVx1MDkyMVx1MDkzZiIsczoiXHUwOTE1XHUw''@;'; put 'put ''OTQ3XHUwOTM5XHUwOTQwIFx1MDkxNVx1MDk0ZFx1MDkzN1x1MDkyMyIsc3M6IiVkIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDk0N1x1MDkyM1x1MDk0ZFx1MDkyMSIsbToiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzZlx1MDkyOFx1MDk0N1x1MDkxZiIsbW06IiVkIFx1MDkyZVx1MDkzZlx1MDky''@;'; put 'put ''OFx1MDk0N1x1MDkxZiIsaDoiXHUwOTBmXHUwOTE1IFx1MDkxOFx1MDkyM1x1MDk0ZFx1MDkxZlx1MDkzZSIsaGg6IiVkIFx1MDkxOFx1MDkyM1x1MDk0ZFx1MDkxZlx1MDkzZSIsZDoiXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDkzZlx1MDkyOCIsZGQ6IiVkIFx1MDkyNlx1MDkzZlx1MDkyOCIs''@;'; put 'put ''TToiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDkzZSIsTU06IiVkIFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDkzZSIseToiXHUwOTBmXHUwOTE1IFx1MDkyY1x1MDkzMFx1MDk0ZFx1MDkzNyIseXk6IiVkIFx1MDkyY1x1MDkzMFx1MDk0ZFx1MDkzNyJ9LHdl''@;'; put 'put ''ZWs6e2RvdzowLGRveTo2fX0pfShoKDk3NTg2KSl9LDk5ODc1KGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz0iamFuLl9mZWIuX21ydC5fYXByLl9tZWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxzPSJqYW5fZmViX21ydF9h''@;'; put 'put ''cHJfbWVpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSxBPVsvXmphbi9pLC9eZmViL2ksL14obWFhcnR8bXJ0XC4/KSQvaSwvXmFwci9pLC9ebWVpJC9pLC9eanVuW2kuXT8kL2ksL15qdWxbaS5dPyQvaSwvXmF1Zy9pLC9ec2VwL2ksL15va3QvaSwvXm5vdi9pLC9e''@;'; put 'put ''ZGVjL2ldLHY9L14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcnxqYW5cLj98ZmViXC4/fG1ydFwuP3xhcHJcLj98anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xk''@;'; put 'put ''ZWNcLj8pL2k7eS5kZWZpbmVMb2NhbGUoIm5sLWJlIix7bW9udGhzOiJqYW51YXJpX2ZlYnJ1YXJpX21hYXJ0X2FwcmlsX21laV9qdW5pX2p1bGlfYXVndXN0dXNfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24odyxT''@;'; put 'put ''KXtyZXR1cm4gdz8vLU1NTS0vLnRlc3QoUyk/c1t3Lm1vbnRoKCldOmNbdy5tb250aCgpXTpjfSxtb250aHNSZWdleDp2LG1vbnRoc1Nob3J0UmVnZXg6dixtb250aHNTdHJpY3RSZWdleDovXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRl''@;'; put 'put ''bWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oamFuXC4/fGZlYlwuP3xtcnRcLj98YXByXC4/fG1laXxqdVtubF1cLj98YXVnXC4/fHNlcFwuP3xva3RcLj98bm92XC4/fGRlY1wuPykvaSxtb250aHNQYXJzZTpBLGxvbmdNb250aHNQ''@;'; put 'put ''YXJzZTpBLHNob3J0TW9udGhzUGFyc2U6QSx3ZWVrZGF5czoiem9uZGFnX21hYW5kYWdfZGluc2RhZ193b2Vuc2RhZ19kb25kZXJkYWdfdnJpamRhZ196YXRlcmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJ6by5fbWEuX2RpLl93by5fZG8uX3ZyLl96YS4iLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNNaW46InpvX21hX2RpX3dvX2RvX3ZyX3phIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExM''@;'; put 'put ''TEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW3ZhbmRhYWcgb21dIExUIixuZXh0RGF5OiJbbW9yZ2VuIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToiW2dpc3RlcmVuIG9tXSBMVCIsbGFzdFdlZWs6IlthZmdlbG9wZW5dIGRk''@;'; put 'put ''ZGQgW29tXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib3ZlciAlcyIscGFzdDoiJXMgZ2VsZWRlbiIsczoiZWVuIHBhYXIgc2Vjb25kZW4iLHNzOiIlZCBzZWNvbmRlbiIsbToiXHhlOVx4ZTluIG1pbnV1dCIsbW06IiVkIG1pbnV0ZW4iLGg6Ilx4ZTlceGU5biB1''@;'; put 'put ''dXIiLGhoOiIlZCB1dXIiLGQ6Ilx4ZTlceGU5biBkYWciLGRkOiIlZCBkYWdlbiIsTToiXHhlOVx4ZTluIG1hYW5kIixNTToiJWQgbWFhbmRlbiIseToiXHhlOVx4ZTluIGphYXIiLHl5OiIlZCBqYWFyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdGV8ZGUpLyxvcmRpbmFs''@;'; put 'put ''OmZ1bmN0aW9uKHcpe3JldHVybiB3KygxPT09d3x8OD09PXd8fHc+PTIwPyJzdGUiOiJkZSIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oaCg5NzU4NikpfSw2NTQ0MShmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7dmFyIGM9Imphbi5fZmViLl9tcnQuX2Fwci5fbWVpX2p1bi5f''@;'; put 'put ''anVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIikscz0iamFuX2ZlYl9tcnRfYXByX21laV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksQT1bL15qYW4vaSwvXmZlYi9pLC9eKG1hYXJ0fG1ydFwuPykkL2ksL15hcHIvaSwvXm1laSQvaSwvXmp1''@;'; put 'put ''bltpLl0/JC9pLC9eanVsW2kuXT8kL2ksL15hdWcvaSwvXnNlcC9pLC9eb2t0L2ksL15ub3YvaSwvXmRlYy9pXSx2PS9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXJ8amFuXC4/fGZl''@;'; put 'put ''YlwuP3xtcnRcLj98YXByXC4/fGp1W25sXVwuP3xhdWdcLj98c2VwXC4/fG9rdFwuP3xub3ZcLj98ZGVjXC4/KS9pO3kuZGVmaW5lTG9jYWxlKCJubCIse21vbnRoczoiamFudWFyaV9mZWJydWFyaV9tYWFydF9hcHJpbF9tZWlfanVuaV9qdWxpX2F1Z3VzdHVzX3NlcHRlbWJlcl9va3RvYmVy''@;'; put 'put ''X25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKHcsUyl7cmV0dXJuIHc/Ly1NTU0tLy50ZXN0KFMpP3Nbdy5tb250aCgpXTpjW3cubW9udGgoKV06Y30sbW9udGhzUmVnZXg6dixtb250aHNTaG9ydFJlZ2V4OnYsbW9udGhzU3RyaWN0UmVnZXg6L14o''@;'; put 'put ''amFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGphblwuP3xmZWJcLj98bXJ0XC4/fGFwclwuP3xtZWl8anVbbmxdXC4/fGF1Z1wuP3xz''@;'; put 'put ''ZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2ksbW9udGhzUGFyc2U6QSxsb25nTW9udGhzUGFyc2U6QSxzaG9ydE1vbnRoc1BhcnNlOkEsd2Vla2RheXM6InpvbmRhZ19tYWFuZGFnX2RpbnNkYWdfd29lbnNkYWdfZG9uZGVyZGFnX3ZyaWpkYWdfemF0ZXJkYWciLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNTaG9ydDoiem8uX21hLl9kaS5fd28uX2RvLl92ci5femEuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJ6b19tYV9kaV93b19kb192cl96YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoi''@;'; put 'put ''REQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilt2YW5kYWFnIG9tXSBMVCIsbmV4dERheToiW21vcmdlbiBvbV0gTFQiLG5leHRXZWVrOiJkZGRkIFtvbV0g''@;'; put 'put ''TFQiLGxhc3REYXk6IltnaXN0ZXJlbiBvbV0gTFQiLGxhc3RXZWVrOiJbYWZnZWxvcGVuXSBkZGRkIFtvbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im92ZXIgJXMiLHBhc3Q6IiVzIGdlbGVkZW4iLHM6ImVlbiBwYWFyIHNlY29uZGVuIixzczoiJWQgc2Vjb25k''@;'; put 'put ''ZW4iLG06Ilx4ZTlceGU5biBtaW51dXQiLG1tOiIlZCBtaW51dGVuIixoOiJceGU5XHhlOW4gdXVyIixoaDoiJWQgdXVyIixkOiJceGU5XHhlOW4gZGFnIixkZDoiJWQgZGFnZW4iLHc6Ilx4ZTlceGU5biB3ZWVrIix3dzoiJWQgd2VrZW4iLE06Ilx4ZTlceGU5biBtYWFuZCIsTU06IiVkIG1h''@;'; put 'put ''YW5kZW4iLHk6Ilx4ZTlceGU5biBqYWFyIix5eToiJWQgamFhciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8sb3JkaW5hbDpmdW5jdGlvbih3KXtyZXR1cm4gdysoMT09PXd8fDg9PT13fHx3Pj0yMD8ic3RlIjoiZGUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9''@;'; put 'put ''KGgoOTc1ODYpKX0sODEzMTEoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJubiIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJpbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlciIu''@;'; put 'put ''c3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hcnNfYXByLl9tYWlfanVuaV9qdWxpX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJzdW5kYWdfbVx4ZTVuZGFnX3R5c2RhZ19vbnNkYWdfdG9yc2RhZ19m''@;'; put 'put ''cmVkYWdfbGF1cmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdS5fbVx4ZTUuX3R5Ll9vbi5fdG8uX2ZyLl9sYXUuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzdV9tXHhlNV90eV9vbl90b19mcl9sYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVG''@;'; put 'put ''b3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgW2tsLl0gSDptbSIsTExMTDoiZGRkZCBELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0kgZGFnIGtsb2tr''@;'; put 'put ''YV0gTFQiLG5leHREYXk6IltJIG1vcmdvbiBrbG9ra2FdIExUIixuZXh0V2VlazoiZGRkZCBba2xva2thXSBMVCIsbGFzdERheToiW0kgZ1x4ZTVyIGtsb2trYV0gTFQiLGxhc3RXZWVrOiJbRlx4ZjhyZWdceGU1YW5kZV0gZGRkZCBba2xva2thXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2''@;'; put 'put ''ZVRpbWU6e2Z1dHVyZToib20gJXMiLHBhc3Q6IiVzIHNpZGFuIixzOiJub2tyZSBzZWt1bmQiLHNzOiIlZCBzZWt1bmQiLG06ImVpdCBtaW51dHQiLG1tOiIlZCBtaW51dHQiLGg6ImVpbiB0aW1lIixoaDoiJWQgdGltYXIiLGQ6ImVpbiBkYWciLGRkOiIlZCBkYWdhciIsdzoiZWkgdmVrZSIs''@;'; put 'put ''d3c6IiVkIHZla2VyIixNOiJlaW4gbVx4ZTVuYWQiLE1NOiIlZCBtXHhlNW5hZGVyIix5OiJlaXQgXHhlNXIiLHl5OiIlZCBceGU1ciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oaCg5NzU4NikpfSw3MjU2''@;'; put 'put ''NyhmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5kZWZpbmVMb2NhbGUoIm9jLWxuYyIse21vbnRoczp7c3RhbmRhbG9uZToiZ2VuaVx4ZThyX2ZlYnJpXHhlOHJfbWFyXHhlN19hYnJpbF9tYWlfanVuaF9qdWxoZXRfYWdvc3Rfc2V0ZW1icmVfb2N0XHhmMmJyZV9ub3ZlbWJy''@;'; put 'put ''ZV9kZWNlbWJyZSIuc3BsaXQoIl8iKSxmb3JtYXQ6ImRlIGdlbmlceGU4cl9kZSBmZWJyaVx4ZThyX2RlIG1hclx4ZTdfZCdhYnJpbF9kZSBtYWlfZGUganVuaF9kZSBqdWxoZXRfZCdhZ29zdF9kZSBzZXRlbWJyZV9kJ29jdFx4ZjJicmVfZGUgbm92ZW1icmVfZGUgZGVjZW1icmUiLnNwbGl0''@;'; put 'put ''KCJfIiksaXNGb3JtYXQ6L0Rbb0RdPyhccykrTU1NTS99LG1vbnRoc1Nob3J0OiJnZW4uX2ZlYnIuX21hclx4ZTdfYWJyLl9tYWlfanVuaF9qdWxoLl9hZ28uX3NldC5fb2N0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGltZW5nZV9kaWx1''@;'; put 'put ''bnNfZGltYXJzX2RpbVx4ZThjcmVzX2Rpalx4ZjJ1c19kaXZlbmRyZXNfZGlzc2FidGUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGcuX2RsLl9kbS5fZGMuX2RqLl9kdi5fZHMuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkZ19kbF9kbV9kY19kal9kdl9kcyIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gW2RlXSBZWVlZIixsbDoiRCBNTU0gWVlZWSIsTExMOiJEIE1NTU0gW2RlXSBZWVlZIFthXSBIOm1tIixsbGw6IkQgTU1NIFlZWVksIEg6''@;'; put 'put ''bW0iLExMTEw6ImRkZGQgRCBNTU1NIFtkZV0gWVlZWSBbYV0gSDptbSIsbGxsbDoiZGRkIEQgTU1NIFlZWVksIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW3VceGU4aSBhXSBMVCIsbmV4dERheToiW2RlbWFuIGFdIExUIixuZXh0V2VlazoiZGRkZCBbYV0gTFQiLGxhc3REYXk6IltpXHhl''@;'; put 'put ''OHIgYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtwYXNzYXQgYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImQnYXF1XHhlZCAlcyIscGFzdDoiZmEgJXMiLHM6InVuYXMgc2Vnb25kYXMiLHNzOiIlZCBzZWdvbmRhcyIsbToidW5hIG1pbnV0YSIsbW06IiVkIG1pbnV0''@;'; put 'put ''YXMiLGg6InVuYSBvcmEiLGhoOiIlZCBvcmFzIixkOiJ1biBqb3JuIixkZDoiJWQgam9ybnMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0ocnxufHR8XHhlOHxhKS8sb3JkaW5hbDpmdW5jdGlv''@;'; put 'put ''bihzLEEpe3ZhciB2PTE9PT1zPyJyIjoyPT09cz8ibiI6Mz09PXM/InIiOjQ9PT1zPyJ0IjoiXHhlOCI7cmV0dXJuKCJ3Ij09PUF8fCJXIj09PUEpJiYodj0iYSIpLHMrdn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGgoOTc1ODYpKX0sNTY5NjIoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBjPXsxOiJcdTBhNjciLDI6Ilx1MGE2OCIsMzoiXHUwYTY5Iiw0OiJcdTBhNmEiLDU6Ilx1MGE2YiIsNjoiXHUwYTZjIiw3OiJcdTBhNmQiLDg6Ilx1MGE2ZSIsOToiXHUwYTZmIiwwOiJcdTBhNjYifSxzPXsiXHUwYTY3IjoiMSIsIlx1MGE2OCI6IjIiLCJcdTBhNjkiOiIz''@;'; put 'put ''IiwiXHUwYTZhIjoiNCIsIlx1MGE2YiI6IjUiLCJcdTBhNmMiOiI2IiwiXHUwYTZkIjoiNyIsIlx1MGE2ZSI6IjgiLCJcdTBhNmYiOiI5IiwiXHUwYTY2IjoiMCJ9O3kuZGVmaW5lTG9jYWxlKCJwYS1pbiIse21vbnRoczoiXHUwYTFjXHUwYTI4XHUwYTM1XHUwYTMwXHUwYTQwX1x1MGEyYlx1''@;'; put 'put ''MGEzY1x1MGEzMFx1MGEzNVx1MGEzMFx1MGE0MF9cdTBhMmVcdTBhM2VcdTBhMzBcdTBhMWFfXHUwYTA1XHUwYTJhXHUwYTRkXHUwYTMwXHUwYTQ4XHUwYTMyX1x1MGEyZVx1MGEwOF9cdTBhMWNcdTBhNDJcdTBhMjhfXHUwYTFjXHUwYTQxXHUwYTMyXHUwYTNlXHUwYTA4X1x1MGEwNVx1MGEx''@;'; put 'put ''N1x1MGEzOFx1MGEyNF9cdTBhMzhcdTBhMjRcdTBhNzBcdTBhMmNcdTBhMzBfXHUwYTA1XHUwYTE1XHUwYTI0XHUwYTQyXHUwYTJjXHUwYTMwX1x1MGEyOFx1MGEzNVx1MGE3MFx1MGEyY1x1MGEzMF9cdTBhMjZcdTBhMzhcdTBhNzBcdTBhMmNcdTBhMzAiLnNwbGl0KCJfIiksbW9udGhzU2hv''@;'; put 'put ''cnQ6Ilx1MGExY1x1MGEyOFx1MGEzNVx1MGEzMFx1MGE0MF9cdTBhMmJcdTBhM2NcdTBhMzBcdTBhMzVcdTBhMzBcdTBhNDBfXHUwYTJlXHUwYTNlXHUwYTMwXHUwYTFhX1x1MGEwNVx1MGEyYVx1MGE0ZFx1MGEzMFx1MGE0OFx1MGEzMl9cdTBhMmVcdTBhMDhfXHUwYTFjXHUwYTQyXHUwYTI4''@;'; put 'put ''X1x1MGExY1x1MGE0MVx1MGEzMlx1MGEzZVx1MGEwOF9cdTBhMDVcdTBhMTdcdTBhMzhcdTBhMjRfXHUwYTM4XHUwYTI0XHUwYTcwXHUwYTJjXHUwYTMwX1x1MGEwNVx1MGExNVx1MGEyNFx1MGE0Mlx1MGEyY1x1MGEzMF9cdTBhMjhcdTBhMzVcdTBhNzBcdTBhMmNcdTBhMzBfXHUwYTI2XHUw''@;'; put 'put ''YTM4XHUwYTcwXHUwYTJjXHUwYTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTBhMTBcdTBhMjRcdTBhMzVcdTBhM2VcdTBhMzBfXHUwYTM4XHUwYTRiXHUwYTJlXHUwYTM1XHUwYTNlXHUwYTMwX1x1MGEyZVx1MGE3MFx1MGExN1x1MGEzMlx1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMmNcdTBh''@;'; put 'put ''NDFcdTBhMjdcdTBhMzVcdTBhM2VcdTBhMzBfXHUwYTM1XHUwYTQwXHUwYTMwXHUwYTM1XHUwYTNlXHUwYTMwX1x1MGEzOFx1MGEzY1x1MGE0MVx1MGE3MVx1MGExNVx1MGEzMFx1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhMjhcdTBhNDBcdTBhMWFcdTBhMzBcdTBhMzVcdTBh''@;'; put 'put ''M2VcdTBhMzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwYTEwXHUwYTI0X1x1MGEzOFx1MGE0Ylx1MGEyZV9cdTBhMmVcdTBhNzBcdTBhMTdcdTBhMzJfXHUwYTJjXHUwYTQxXHUwYTI3X1x1MGEzNVx1MGE0MFx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhNDFcdTBhMTVcdTBhMzBfXHUw''@;'; put 'put ''YTM4XHUwYTNjXHUwYTI4XHUwYTQwIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBhMTBcdTBhMjRfXHUwYTM4XHUwYTRiXHUwYTJlX1x1MGEyZVx1MGE3MFx1MGExN1x1MGEzMl9cdTBhMmNcdTBhNDFcdTBhMjdfXHUwYTM1XHUwYTQwXHUwYTMwX1x1MGEzOFx1MGEzY1x1MGE0MVx1MGEx''@;'; put 'put ''NVx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhMjhcdTBhNDAiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwYTM1XHUwYTFjXHUwYTQ3IixMVFM6IkEgaDptbTpzcyBcdTBhMzVcdTBhMWNcdTBhNDciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJE''@;'; put 'put ''IE1NTU0gWVlZWSwgQSBoOm1tIFx1MGEzNVx1MGExY1x1MGE0NyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTBhMzVcdTBhMWNcdTBhNDcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGEwNVx1MGExY10gTFQiLG5leHREYXk6IltcdTBhMTVcdTBhMzJdIExUIixuZXh0V2Vl''@;'; put 'put ''azoiW1x1MGEwNVx1MGExN1x1MGEzMlx1MGEzZV0gZGRkZCwgTFQiLGxhc3REYXk6IltcdTBhMTVcdTBhMzJdIExUIixsYXN0V2VlazoiW1x1MGEyYVx1MGEzZlx1MGExYlx1MGEzMlx1MGE0N10gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGEz''@;'; put 'put ''NVx1MGEzZlx1MGE3MVx1MGExYSIscGFzdDoiJXMgXHUwYTJhXHUwYTNmXHUwYTFiXHUwYTMyXHUwYTQ3IixzOiJcdTBhMTVcdTBhNDFcdTBhMWQgXHUwYTM4XHUwYTE1XHUwYTNmXHUwYTcwXHUwYTFmIixzczoiJWQgXHUwYTM4XHUwYTE1XHUwYTNmXHUwYTcwXHUwYTFmIixtOiJcdTBhMDdc''@;'; put 'put ''dTBhMTUgXHUwYTJlXHUwYTNmXHUwYTcwXHUwYTFmIixtbToiJWQgXHUwYTJlXHUwYTNmXHUwYTcwXHUwYTFmIixoOiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUwYTE4XHUwYTcwXHUwYTFmXHUwYTNlIixoaDoiJWQgXHUwYTE4XHUwYTcwXHUwYTFmXHUwYTQ3IixkOiJcdTBhMDdcdTBhNzFcdTBh''@;'; put 'put ''MTUgXHUwYTI2XHUwYTNmXHUwYTI4IixkZDoiJWQgXHUwYTI2XHUwYTNmXHUwYTI4IixNOiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUwYTJlXHUwYTM5XHUwYTQwXHUwYTI4XHUwYTNlIixNTToiJWQgXHUwYTJlXHUwYTM5XHUwYTQwXHUwYTI4XHUwYTQ3Iix5OiJcdTBhMDdcdTBhNzFcdTBhMTUg''@;'; put 'put ''XHUwYTM4XHUwYTNlXHUwYTMyIix5eToiJWQgXHUwYTM4XHUwYTNlXHUwYTMyIn0scHJlcGFyc2U6ZnVuY3Rpb24odil7cmV0dXJuIHYucmVwbGFjZSgvW1x1MGE2N1x1MGE2OFx1MGE2OVx1MGE2YVx1MGE2Ylx1MGE2Y1x1MGE2ZFx1MGE2ZVx1MGE2Zlx1MGE2Nl0vZyxmdW5jdGlvbihDKXty''@;'; put 'put ''ZXR1cm4gc1tDXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHYpe3JldHVybiB2LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oQyl7cmV0dXJuIGNbQ119KX0sbWVyaWRpZW1QYXJzZTovXHUwYTMwXHUwYTNlXHUwYTI0fFx1MGEzOFx1MGEzNVx1MGE0N1x1MGEzMHxcdTBhMjZcdTBhNDFcdTBhMmFc''@;'; put 'put ''dTBhMzlcdTBhM2ZcdTBhMzB8XHUwYTM4XHUwYTNjXHUwYTNlXHUwYTJlLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odixDKXtyZXR1cm4gMTI9PT12JiYodj0wKSwiXHUwYTMwXHUwYTNlXHUwYTI0Ij09PUM/djw0P3Y6disxMjoiXHUwYTM4XHUwYTM1XHUwYTQ3XHUwYTMwIj09PUM/djoiXHUw''@;'; put 'put ''YTI2XHUwYTQxXHUwYTJhXHUwYTM5XHUwYTNmXHUwYTMwIj09PUM/dj49MTA/djp2KzEyOiJcdTBhMzhcdTBhM2NcdTBhM2VcdTBhMmUiPT09Qz92KzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24odixDLHcpe3JldHVybiB2PDQ/Ilx1MGEzMFx1MGEzZVx1MGEyNCI6djwxMD8iXHUwYTM4''@;'; put 'put ''XHUwYTM1XHUwYTQ3XHUwYTMwIjp2PDE3PyJcdTBhMjZcdTBhNDFcdTBhMmFcdTBhMzlcdTBhM2ZcdTBhMzAiOnY8MjA/Ilx1MGEzOFx1MGEzY1x1MGEzZVx1MGEyZSI6Ilx1MGEzMFx1MGEzZVx1MGEyNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShoKDk3NTg2KSl9LDYxMDYzKGZlLGosaCl7''@;'; put 'put ''IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz0ic3R5Y3plXHUwMTQ0X2x1dHlfbWFyemVjX2t3aWVjaWVcdTAxNDRfbWFqX2N6ZXJ3aWVjX2xpcGllY19zaWVycGllXHUwMTQ0X3dyemVzaWVcdTAxNDRfcGFcdTAxN2Fkemllcm5pa19saXN0b3BhZF9ncnVkemllXHUwMTQ0Ii5zcGxp''@;'; put 'put ''dCgiXyIpLHM9InN0eWN6bmlhX2x1dGVnb19tYXJjYV9rd2lldG5pYV9tYWphX2N6ZXJ3Y2FfbGlwY2Ffc2llcnBuaWFfd3J6ZVx1MDE1Ym5pYV9wYVx1MDE3YWR6aWVybmlrYV9saXN0b3BhZGFfZ3J1ZG5pYSIuc3BsaXQoIl8iKSxBPVsvXnN0eS9pLC9ebHV0L2ksL15tYXIvaSwvXmt3aS9p''@;'; put 'put ''LC9ebWFqL2ksL15jemUvaSwvXmxpcC9pLC9ec2llL2ksL153cnovaSwvXnBhXHUwMTdhL2ksL15saXMvaSwvXmdydS9pXTtmdW5jdGlvbiB2KFMpe3JldHVybiBTJTEwPDUmJlMlMTA+MSYmfn4oUy8xMCklMTAhPTF9ZnVuY3Rpb24gQyhTLEwsUil7dmFyIHg9UysiICI7c3dpdGNoKFIpe2Nh''@;'; put 'put ''c2Uic3MiOnJldHVybiB4Kyh2KFMpPyJzZWt1bmR5Ijoic2VrdW5kIik7Y2FzZSJtIjpyZXR1cm4gTD8ibWludXRhIjoibWludXRcdTAxMTkiO2Nhc2UibW0iOnJldHVybiB4Kyh2KFMpPyJtaW51dHkiOiJtaW51dCIpO2Nhc2UiaCI6cmV0dXJuIEw/ImdvZHppbmEiOiJnb2R6aW5cdTAxMTki''@;'; put 'put ''O2Nhc2UiaGgiOnJldHVybiB4Kyh2KFMpPyJnb2R6aW55IjoiZ29kemluIik7Y2FzZSJ3dyI6cmV0dXJuIHgrKHYoUyk/InR5Z29kbmllIjoidHlnb2RuaSIpO2Nhc2UiTU0iOnJldHVybiB4Kyh2KFMpPyJtaWVzaVx1MDEwNWNlIjoibWllc2lcdTAxMTljeSIpO2Nhc2UieXkiOnJldHVybiB4''@;'; put 'put ''Kyh2KFMpPyJsYXRhIjoibGF0Iil9fXkuZGVmaW5lTG9jYWxlKCJwbCIse21vbnRoczpmdW5jdGlvbihTLEwpe3JldHVybiBTPy9EIE1NTU0vLnRlc3QoTCk/c1tTLm1vbnRoKCldOmNbUy5tb250aCgpXTpjfSxtb250aHNTaG9ydDoic3R5X2x1dF9tYXJfa3dpX21hal9jemVfbGlwX3NpZV93''@;'; put 'put ''cnpfcGFcdTAxN2FfbGlzX2dydSIuc3BsaXQoIl8iKSxtb250aHNQYXJzZTpBLGxvbmdNb250aHNQYXJzZTpBLHNob3J0TW9udGhzUGFyc2U6QSx3ZWVrZGF5czoibmllZHppZWxhX3BvbmllZHppYVx1MDE0MmVrX3d0b3Jla19cdTAxNWJyb2RhX2N6d2FydGVrX3BpXHUwMTA1dGVrX3NvYm90''@;'; put 'put ''YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZHpfcG9uX3d0X1x1MDE1YnJfY3p3X3B0X3NvYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTmRfUG5fV3RfXHUwMTVhcl9Del9QdF9TbyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixM''@;'; put 'put ''OiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltEemlcdTAxNWIgb10gTFQiLG5leHREYXk6IltKdXRybyBvXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24o''@;'; put 'put ''KXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbVyBuaWVkemllbFx1MDExOSBvXSBMVCI7Y2FzZSAyOnJldHVybiJbV2Ugd3RvcmVrIG9dIExUIjtjYXNlIDM6cmV0dXJuIltXIFx1MDE1YnJvZFx1MDExOSBvXSBMVCI7Y2FzZSA2OnJldHVybiJbVyBzb2JvdFx1MDExOSBvXSBM''@;'; put 'put ''VCI7ZGVmYXVsdDpyZXR1cm4iW1ddIGRkZGQgW29dIExUIn19LGxhc3REYXk6IltXY3pvcmFqIG9dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltXIHplc3pcdTAxNDJcdTAxMDUgbmllZHppZWxcdTAxMTkgb10gTFQiO2Nhc2UgMzpy''@;'; put 'put ''ZXR1cm4iW1cgemVzelx1MDE0Mlx1MDEwNSBcdTAxNWJyb2RcdTAxMTkgb10gTFQiO2Nhc2UgNjpyZXR1cm4iW1cgemVzelx1MDE0Mlx1MDEwNSBzb2JvdFx1MDExOSBvXSBMVCI7ZGVmYXVsdDpyZXR1cm4iW1cgemVzelx1MDE0MnldIGRkZGQgW29dIExUIn19LHNhbWVFbHNlOiJMIn0scmVs''@;'; put 'put ''YXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiIlcyB0ZW11IixzOiJraWxrYSBzZWt1bmQiLHNzOkMsbTpDLG1tOkMsaDpDLGhoOkMsZDoiMSBkemllXHUwMTQ0IixkZDoiJWQgZG5pIix3OiJ0eWR6aWVcdTAxNDQiLHd3OkMsTToibWllc2lcdTAxMDVjIixNTTpDLHk6InJvayIseXk6''@;'; put 'put ''Q30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShoKDk3NTg2KSl9LDk3NDc2KGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt5LmRlZmluZUxvY2FsZSgicHQtYnIiLHttb250aHM6ImphbmVpcm9f''@;'; put 'put ''ZmV2ZXJlaXJvX21hclx4ZTdvX2FicmlsX21haW9fanVuaG9fanVsaG9fYWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1icm9fZGV6ZW1icm8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZXZfbWFyX2Ficl9tYWlfanVuX2p1bF9hZ29fc2V0X291dF9ub3ZfZGV6Ii5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzOiJkb21pbmdvX3NlZ3VuZGEtZmVpcmFfdGVyXHhlN2EtZmVpcmFfcXVhcnRhLWZlaXJhX3F1aW50YS1mZWlyYV9zZXh0YS1mZWlyYV9zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tX3NlZ190ZXJfcXVhX3F1aV9zZXhfc1x4ZTFiIi5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzTWluOiJkb18yXHhhYV8zXHhhYV80XHhhYV81XHhhYV82XHhhYV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtk''@;'; put 'put ''ZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgW1x4ZTBzXSBISDptbSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIFtceGUwc10gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hvamUgXHhlMHNdIExUIixuZXh0RGF5OiJbQW1hbmhceGUzIFx4ZTBzXSBM''@;'; put 'put ''VCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBzXSBMVCIsbGFzdERheToiW09udGVtIFx4ZTBzXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZGF5KCl8fDY9PT10aGlzLmRheSgpPyJbXHhkYWx0aW1vXSBkZGRkIFtceGUwc10gTFQiOiJbXHhkYWx0aW1hXSBkZGRkIFtc''@;'; put 'put ''eGUwc10gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbSAlcyIscGFzdDoiaFx4ZTEgJXMiLHM6InBvdWNvcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1bSBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bWEgaG9yYSIsaGg6IiVkIGhvcmFzIixk''@;'; put 'put ''OiJ1bSBkaWEiLGRkOiIlZCBkaWFzIixNOiJ1bSBtXHhlYXMiLE1NOiIlZCBtZXNlcyIseToidW0gYW5vIix5eToiJWQgYW5vcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLGludmFsaWREYXRlOiJEYXRhIGludlx4ZTFsaWRhIn0pfSho''@;'; put 'put ''KDk3NTg2KSl9LDc4NzE5KGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt5LmRlZmluZUxvY2FsZSgicHQiLHttb250aHM6ImphbmVpcm9fZmV2ZXJlaXJvX21hclx4ZTdvX2FicmlsX21haW9fanVuaG9fanVsaG9fYWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1icm9fZGV6''@;'; put 'put ''ZW1icm8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZXZfbWFyX2Ficl9tYWlfanVuX2p1bF9hZ29fc2V0X291dF9ub3ZfZGV6Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJEb21pbmdvX1NlZ3VuZGEtZmVpcmFfVGVyXHhlN2EtZmVpcmFfUXVhcnRhLWZlaXJhX1F1aW50YS1mZWlyYV9T''@;'; put 'put ''ZXh0YS1mZWlyYV9TXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiRG9tX1NlZ19UZXJfUXVhX1F1aV9TZXhfU1x4ZTFiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJEb18yXHhhYV8zXHhhYV80XHhhYV81XHhhYV82XHhhYV9TXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Bh''@;'; put 'put ''cnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBI''@;'; put 'put ''SDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSG9qZSBceGUwc10gTFQiLG5leHREYXk6IltBbWFuaFx4ZTMgXHhlMHNdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMHNdIExUIixsYXN0RGF5OiJbT250ZW0gXHhlMHNdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5k''@;'; put 'put ''YXkoKXx8Nj09PXRoaXMuZGF5KCk/IltceGRhbHRpbW9dIGRkZGQgW1x4ZTBzXSBMVCI6IltceGRhbHRpbWFdIGRkZGQgW1x4ZTBzXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVtICVzIixwYXN0OiJoXHhlMSAlcyIsczoic2VndW5kb3MiLHNzOiIlZCBzZWd1''@;'; put 'put ''bmRvcyIsbToidW0gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW1hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW0gZGlhIixkZDoiJWQgZGlhcyIsdzoidW1hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVtIG1ceGVhcyIsTU06IiVkIG1lc2VzIix5OiJ1bSBhbm8iLHl5OiIlZCBh''@;'; put 'put ''bm9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGgoOTc1ODYpKX0sNTEwMDQoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoQSx2LEMpe3ZhciBTPSIgIjtyZXR1''@;'; put 'put ''cm4oQSUxMDA+PTIwfHxBPj0xMDAmJkElMTAwPT0wKSYmKFM9IiBkZSAiKSxBK1Mre3NzOiJzZWN1bmRlIixtbToibWludXRlIixoaDoib3JlIixkZDoiemlsZSIsd3c6InNcdTAxMDNwdFx1MDEwM21ceGUybmkiLE1NOiJsdW5pIix5eToiYW5pIn1bQ119eS5kZWZpbmVMb2NhbGUoInJvIix7''@;'; put 'put ''bW9udGhzOiJpYW51YXJpZV9mZWJydWFyaWVfbWFydGllX2FwcmlsaWVfbWFpX2l1bmllX2l1bGllX2F1Z3VzdF9zZXB0ZW1icmllX29jdG9tYnJpZV9ub2llbWJyaWVfZGVjZW1icmllIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJpYW4uX2ZlYi5fbWFydC5fYXByLl9tYWlfaXVuLl9pdWwu''@;'; put 'put ''X2F1Zy5fc2VwdC5fb2N0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZHVtaW5pY1x1MDEwM19sdW5pX21hclx1MDIxYmlfbWllcmN1cmlfam9pX3ZpbmVyaV9zXHhlMm1iXHUwMTAzdFx1MDEwMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0''@;'; put 'put ''OiJEdW1fTHVuX01hcl9NaWVfSm9pX1Zpbl9TXHhlMm0iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkR1X0x1X01hX01pX0pvX1ZpX1NceGUyIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVki''@;'; put 'put ''LExMTDoiRCBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYXppIGxhXSBMVCIsbmV4dERheToiW21ceGUyaW5lIGxhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2xhXSBMVCIsbGFzdERheToiW2llcmkgbGFdIExUIixsYXN0''@;'; put 'put ''V2VlazoiW2Zvc3RhXSBkZGRkIFtsYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBlc3RlICVzIixwYXN0OiIlcyBceGVlbiB1cm1cdTAxMDMiLHM6ImNceGUydGV2YSBzZWN1bmRlIixzczpjLG06InVuIG1pbnV0IixtbTpjLGg6Im8gb3JcdTAxMDMiLGhoOmMs''@;'; put 'put ''ZDoibyB6aSIsZGQ6Yyx3OiJvIHNcdTAxMDNwdFx1MDEwM21ceGUyblx1MDEwMyIsd3c6YyxNOiJvIGx1blx1MDEwMyIsTU06Yyx5OiJ1biBhbiIseXk6Y30sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGgoOTc1ODYpKX0sNTEzMjYoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO2Z1''@;'; put 'put ''bmN0aW9uIHMoQyx3LFMpe3JldHVybiJtIj09PVM/dz8iXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIjoiXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDQzIjpDKyIgIitmdW5jdGlvbiBjKEMsdyl7dmFyIFM9Qy5zcGxpdCgiXyIpO3JldHVybiB3JTEwPT0x''@;'; put 'put ''JiZ3JTEwMCE9MTE/U1swXTp3JTEwPj0yJiZ3JTEwPD00JiYodyUxMDA8MTB8fHclMTAwPj0yMCk/U1sxXTpTWzJdfSh7c3M6dz8iXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Yl9cdTA0''@;'; put 'put ''NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiOiJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NDNfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDRiX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbW06dz8i''@;'; put 'put ''XHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwX1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQ0Yl9cdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiOiJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0NDNfXHUwNDNjXHUwNDM4XHUwNDNkXHUw''@;'; put 'put ''NDQzXHUwNDQyXHUwNDRiX1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsaGg6Ilx1MDQ0N1x1MDQzMFx1MDQ0MV9cdTA0NDdcdTA0MzBcdTA0NDFcdTA0MzBfXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDNlXHUwNDMyIixkZDoiXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzNFx1''@;'; put 'put ''MDQzZFx1MDQ0Zl9cdTA0MzRcdTA0M2RcdTA0MzVcdTA0MzkiLHd3OiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGZfXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDM4X1x1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQ0YyIsTU06Ilx1MDQzY1x1''@;'; put 'put ''MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nl9cdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZcdTA0MzBfXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDM1XHUwNDMyIix5eToiXHUwNDMzXHUwNDNlXHUwNDM0X1x1MDQzM1x1MDQzZVx1MDQzNFx1MDQzMF9cdTA0M2JcdTA0MzVc''@;'; put 'put ''dTA0NDIifVtTXSwrQyl9dmFyIEE9Wy9eXHUwNDRmXHUwNDNkXHUwNDMyL2ksL15cdTA0NDRcdTA0MzVcdTA0MzIvaSwvXlx1MDQzY1x1MDQzMFx1MDQ0MC9pLC9eXHUwNDMwXHUwNDNmXHUwNDQwL2ksL15cdTA0M2NcdTA0MzBbXHUwNDM5XHUwNDRmXS9pLC9eXHUwNDM4XHUwNDRlXHUwNDNk''@;'; put 'put ''L2ksL15cdTA0MzhcdTA0NGVcdTA0M2IvaSwvXlx1MDQzMFx1MDQzMlx1MDQzMy9pLC9eXHUwNDQxXHUwNDM1XHUwNDNkL2ksL15cdTA0M2VcdTA0M2FcdTA0NDIvaSwvXlx1MDQzZFx1MDQzZVx1MDQ0Zi9pLC9eXHUwNDM0XHUwNDM1XHUwNDNhL2ldO3kuZGVmaW5lTG9jYWxlKCJydSIse21v''@;'; put 'put ''bnRoczp7Zm9ybWF0OiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBcdTA0NGZfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiXHUwNDRmX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Mlx1MDQzMF9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JcdTA0NGZfXHUw''@;'; put 'put ''NDNjXHUwNDMwXHUwNDRmX1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Zl9cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGZfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Zl9cdTA0M2Vc''@;'; put 'put ''dTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGZfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRmX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFx1MDQ0ZiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBc''@;'; put 'put ''dTA0NDBcdTA0NGNfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiXHUwNDRjX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JcdTA0NGNfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Y19cdTA0''@;'; put 'put ''MzhcdTA0NGVcdTA0M2JcdTA0NGNfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDNkXHUwNDNlXHUw''@;'; put 'put ''NDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFx1MDQ0YyIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6e2Zvcm1hdDoiXHUwNDRmXHUwNDNkXHUwNDMyLl9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQ0MC5f''@;'; put 'put ''XHUwNDMwXHUwNDNmXHUwNDQwLl9cdTA0M2NcdTA0MzBcdTA0NGZfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRmX1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Zl9cdTA0MzBcdTA0MzJcdTA0MzMuX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mi5fXHUwNDNlXHUwNDNhXHUwNDQyLl9cdTA0M2RcdTA0''@;'; put 'put ''M2VcdTA0NGZcdTA0MzEuX1x1MDQzNFx1MDQzNVx1MDQzYS4iLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDRmXHUwNDNkXHUwNDMyLl9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDAuX1x1MDQzY1x1MDQzMFx1''@;'; put 'put ''MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGNfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRjX1x1MDQzMFx1MDQzMlx1MDQzMy5fXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyLl9cdTA0M2VcdTA0M2FcdTA0NDIuX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMS5fXHUwNDM0XHUwNDM1XHUwNDNh''@;'; put 'put ''LiIuc3BsaXQoIl8iKX0sd2Vla2RheXM6e3N0YW5kYWxvbmU6Ilx1MDQzMlx1MDQzZVx1MDQ0MVx1MDQzYVx1MDQ0MFx1MDQzNVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Y1x1MDQzNV9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGNcdTA0M2RcdTA0Mzhc''@;'; put 'put ''dTA0M2FfXHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzNfXHUwNDNmXHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDMw''@;'; put 'put ''X1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSxmb3JtYXQ6Ilx1MDQzMlx1MDQzZVx1MDQ0MVx1MDQzYVx1MDQ0MFx1MDQzNVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Y1x1MDQzNV9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0''@;'; put 'put ''MzVcdTA0M2JcdTA0NGNcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQ0M19cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzNfXHUwNDNmXHUwNDRmXHUw''@;'; put 'put ''NDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDQzX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQ0MyIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovXFsgP1tcdTA0MTJcdTA0MzJdID8oPzpcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0NDNcdTA0NGV8XHUwNDQx''@;'; put 'put ''XHUwNDNiXHUwNDM1XHUwNDM0XHUwNDQzXHUwNDRlXHUwNDQ5XHUwNDQzXHUwNDRlfFx1MDQ0ZFx1MDQ0Mlx1MDQ0Myk/ID9dID9kZGRkL30sd2Vla2RheXNTaG9ydDoiXHUwNDMyXHUwNDQxX1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0''@;'; put 'put ''M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0MzJcdTA0NDFfXHUwNDNmXHUwNDNkX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQyX1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksbW9udGhzUGFyc2U6QSxs''@;'; put 'put ''b25nTW9udGhzUGFyc2U6QSxzaG9ydE1vbnRoc1BhcnNlOkEsbW9udGhzUmVnZXg6L14oXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDRmXHUwNDNkXHUwNDMyXC4/fFx1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYltcdTA0NGNcdTA0''@;'; put 'put ''NGZdfFx1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MD9cLj98XHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyXHUwNDMwP3xcdTA0M2NcdTA0MzBcdTA0NDBcLj98XHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNiW1x1MDQ0Y1x1MDQ0Zl18XHUwNDMwXHUwNDNmXHUwNDQwXC4/fFx1MDQzY1x1MDQz''@;'; put 'put ''MFtcdTA0MzlcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzZFtcdTA0NGNcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzZFwuP3xcdTA0MzhcdTA0NGVcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0MzhcdTA0NGVcdTA0M2JcLj98XHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUw''@;'; put 'put ''NDMwP3xcdTA0MzBcdTA0MzJcdTA0MzNcLj98XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyP1wuP3xcdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxc''@;'; put 'put ''dTA0M2VcdTA0M2FcdTA0NDJcLj98XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxP1wuP3xcdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0MzRcdTA0MzVcdTA0M2Fc''@;'; put 'put ''Lj8pL2ksbW9udGhzU2hvcnRSZWdleDovXihcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0NGZcdTA0M2RcdTA0MzJcLj98XHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiW1x1MDQ0Y1x1MDQ0Zl18XHUwNDQ0XHUwNDM1XHUwNDMyXHUw''@;'; put 'put ''NDQwP1wuP3xcdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJcdTA0MzA/fFx1MDQzY1x1MDQzMFx1MDQ0MFwuP3xcdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0MzBcdTA0M2ZcdTA0NDBcLj98XHUwNDNjXHUwNDMwW1x1MDQzOVx1MDQ0Zl18XHUwNDM4XHUw''@;'; put 'put ''NDRlXHUwNDNkW1x1MDQ0Y1x1MDQ0Zl18XHUwNDM4XHUwNDRlXHUwNDNkXC4/fFx1MDQzOFx1MDQ0ZVx1MDQzYltcdTA0NGNcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzYlwuP3xcdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJcdTA0MzA/fFx1MDQzMFx1MDQzMlx1MDQzM1wu''@;'; put 'put ''P3xcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDI/XC4/fFx1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQzZVx1MDQzYVx1MDQ0MlwuP3xcdTA0''@;'; put 'put ''M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzE/XC4/fFx1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQzNFx1MDQzNVx1MDQzYVwuPykvaSxtb250aHNTdHJpY3RSZWdleDov''@;'; put 'put ''XihcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBbXHUwNDRmXHUwNDRjXXxcdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JbXHUwNDRmXHUwNDRjXXxcdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJcdTA0MzA/fFx1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYltcdTA0''@;'; put 'put ''NGZcdTA0NGNdfFx1MDQzY1x1MDQzMFtcdTA0NGZcdTA0MzldfFx1MDQzOFx1MDQ0ZVx1MDQzZFtcdTA0NGZcdTA0NGNdfFx1MDQzOFx1MDQ0ZVx1MDQzYltcdTA0NGZcdTA0NGNdfFx1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQzMD98XHUwNDQxXHUwNDM1XHUwNDNk''@;'; put 'put ''XHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMx''@;'; put 'put ''XHUwNDQwW1x1MDQ0Zlx1MDQ0Y10pL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihcdTA0NGZcdTA0M2RcdTA0MzJcLnxcdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDA/XC58XHUwNDNjXHUwNDMwXHUwNDQwW1x1MDQ0Mi5dfFx1MDQzMFx1MDQzZlx1MDQ0MFwufFx1MDQzY1x1MDQzMFtcdTA0''@;'; put 'put ''NGZcdTA0MzldfFx1MDQzOFx1MDQ0ZVx1MDQzZFtcdTA0NGNcdTA0NGYuXXxcdTA0MzhcdTA0NGVcdTA0M2JbXHUwNDRjXHUwNDRmLl18XHUwNDMwXHUwNDMyXHUwNDMzXC58XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyP1wufFx1MDQzZVx1MDQzYVx1MDQ0MlwufFx1MDQzZFx1MDQzZVx1MDQ0''@;'; put 'put ''Zlx1MDQzMT9cLnxcdTA0MzRcdTA0MzVcdTA0M2FcLikvaSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDQzMy4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNDMzLiwgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1N''@;'; put 'put ''IFlZWVkgXHUwNDMzLiwgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDIxXHUwNDM1XHUwNDMzXHUwNDNlXHUwNDM0XHUwNDNkXHUwNDRmLCBcdTA0MzJdIExUIixuZXh0RGF5OiJbXHUwNDE3XHUwNDMwXHUwNDMyXHUwNDQyXHUwNDQwXHUwNDMwLCBcdTA0MzJdIExUIixsYXN0RGF5''@;'; put 'put ''OiJbXHUwNDEyXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwLCBcdTA0MzJdIExUIixuZXh0V2VlazpmdW5jdGlvbihDKXtpZihDLndlZWsoKT09PXRoaXMud2VlaygpKXJldHVybiAyPT09dGhpcy5kYXkoKT8iW1x1MDQxMlx1MDQzZV0gZGRkZCwgW1x1MDQzMl0gTFQiOiJbXHUwNDEyXSBkZGRk''@;'; put 'put ''LCBbXHUwNDMyXSBMVCI7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW1x1MDQxMiBcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NGVcdTA0NDlcdTA0MzVcdTA0MzVdIGRkZGQsIFtcdTA0MzJdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW1x1MDQx''@;'; put 'put ''MiBcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NGVcdTA0NDlcdTA0MzhcdTA0MzldIGRkZGQsIFtcdTA0MzJdIExUIjtjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4iW1x1MDQxMiBcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NGVcdTA0NDlcdTA0NDNcdTA0''@;'; put 'put ''NGVdIGRkZGQsIFtcdTA0MzJdIExUIn19LGxhc3RXZWVrOmZ1bmN0aW9uKEMpe2lmKEMud2VlaygpPT09dGhpcy53ZWVrKCkpcmV0dXJuIDI9PT10aGlzLmRheSgpPyJbXHUwNDEyXHUwNDNlXSBkZGRkLCBbXHUwNDMyXSBMVCI6IltcdTA0MTJdIGRkZGQsIFtcdTA0MzJdIExUIjtzd2l0Y2go''@;'; put 'put ''dGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbXHUwNDEyIFx1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzZVx1MDQzNV0gZGRkZCwgW1x1MDQzMl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OnJldHVybiJbXHUwNDEyIFx1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1''@;'; put 'put ''MDQ0Ylx1MDQzOV0gZGRkZCwgW1x1MDQzMl0gTFQiO2Nhc2UgMzpjYXNlIDU6Y2FzZSA2OnJldHVybiJbXHUwNDEyIFx1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQ0M1x1MDQ0ZV0gZGRkZCwgW1x1MDQzMl0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVy''@;'; put 'put ''ZToiXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDM1XHUwNDM3ICVzIixwYXN0OiIlcyBcdTA0M2RcdTA0MzBcdTA0MzdcdTA0MzBcdTA0MzQiLHM6Ilx1MDQzZFx1MDQzNVx1MDQ0MVx1MDQzYVx1MDQzZVx1MDQzYlx1MDQ0Y1x1MDQzYVx1MDQzZSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0''@;'; put 'put ''M2RcdTA0MzQiLHNzOnMsbTpzLG1tOnMsaDoiXHUwNDQ3XHUwNDMwXHUwNDQxIixoaDpzLGQ6Ilx1MDQzNFx1MDQzNVx1MDQzZFx1MDQ0YyIsZGQ6cyx3OiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGYiLHd3OnMsTToiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2''@;'; put 'put ''IixNTTpzLHk6Ilx1MDQzM1x1MDQzZVx1MDQzNCIseXk6c30sbWVyaWRpZW1QYXJzZTovXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDM4fFx1MDQ0M1x1MDQ0Mlx1MDQ0MFx1MDQzMHxcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwL2ksaXNQTTpm''@;'; put 'put ''dW5jdGlvbihDKXtyZXR1cm4vXihcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwKSQvLnRlc3QoQyl9LG1lcmlkaWVtOmZ1bmN0aW9uKEMsdyxTKXtyZXR1cm4gQzw0PyJcdTA0M2RcdTA0M2VcdTA0NDdcdTA0MzgiOkM8MTI/Ilx1MDQ0M1x1''@;'; put 'put ''MDQ0Mlx1MDQ0MFx1MDQzMCI6QzwxNz8iXHUwNDM0XHUwNDNkXHUwNDRmIjoiXHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDM5fFx1MDQzM1x1MDQzZXxcdTA0NGYpLyxvcmRpbmFsOmZ1bmN0aW9uKEMs''@;'; put 'put ''dyl7c3dpdGNoKHcpe2Nhc2UiTSI6Y2FzZSJkIjpjYXNlIkRERCI6cmV0dXJuIEMrIi1cdTA0MzkiO2Nhc2UiRCI6cmV0dXJuIEMrIi1cdTA0MzNcdTA0M2UiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gQysiLVx1MDQ0ZiI7ZGVmYXVsdDpyZXR1cm4gQ319LHdlZWs6e2RvdzoxLGRveTo0fX0p''@;'; put 'put ''fShoKDk3NTg2KSl9LDcyNjA4KGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz1bIlx1MDYyY1x1MDY0Nlx1MDY0OFx1MDYzMVx1MDY0YSIsIlx1MDY0MVx1MDY0YVx1MDYyOFx1MDYzMVx1MDY0OFx1MDYzMVx1MDY0YSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDY4NiIs''@;'; put 'put ''Ilx1MDYyN1x1MDY3ZVx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyNlx1MDY0YSIsIlx1MDYyY1x1MDY0OFx1MDY0NiIsIlx1MDYyY1x1MDY0OFx1MDY0NFx1MDYyN1x1MDYyMVx1MDY1MCIsIlx1MDYyMlx1MDZhZlx1MDYzM1x1MDY3ZCIsIlx1MDYzM1x1MDY0YVx1MDY3ZVx1MDY3''@;'; put 'put ''ZFx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyMlx1MDZhYVx1MDY3ZFx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDY4YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdLHM9WyJcdTA2MjJcdTA2ODZcdTA2MzEiLCJcdTA2MzNcdTA2NDhc''@;'; put 'put ''dTA2NDVcdTA2MzEiLCJcdTA2MjdcdTA2YjFcdTA2MjdcdTA2MzFcdTA2NDgiLCJcdTA2MjdcdTA2MzFcdTA2MjhcdTA2MzkiLCJcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzMiLCJcdTA2MmNcdTA2NDVcdTA2MzkiLCJcdTA2ODdcdTA2NDZcdTA2ODdcdTA2MzEiXTt5LmRlZmluZUxvY2FsZSgi''@;'; put 'put ''c2QiLHttb250aHM6Yyxtb250aHNTaG9ydDpjLHdlZWtkYXlzOnMsd2Vla2RheXNTaG9ydDpzLHdlZWtkYXlzTWluOnMsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1t''@;'; put 'put ''IixMTExMOiJkZGRkXHUwNjBjIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1XHUwNjI4XHUwNjJkfFx1MDYzNFx1MDYyN1x1MDY0NS8saXNQTTpmdW5jdGlvbih2KXtyZXR1cm4iXHUwNjM0XHUwNjI3XHUwNjQ1Ij09PXZ9LG1lcmlkaWVtOmZ1bmN0aW9uKHYsQyx3''@;'; put 'put ''KXtyZXR1cm4gdjwxMj8iXHUwNjM1XHUwNjI4XHUwNjJkIjoiXHUwNjM0XHUwNjI3XHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2ODRdIExUIixuZXh0RGF5OiJbXHUwNjMzXHUwNjgwXHUwNjI3XHUwNmJiXHUwNjRhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYyN1x1''@;'; put 'put ''MDZiM1x1MDY0YVx1MDY0NiBcdTA2NDdcdTA2NDFcdTA2MmFcdTA2NGEgXHUwNjJhXHUwNjRhXSBMVCIsbGFzdERheToiW1x1MDZhYVx1MDYyN1x1MDY0NFx1MDY0N1x1MDY0N10gTFQiLGxhc3RXZWVrOiJbXHUwNmFmXHUwNjMyXHUwNjMxXHUwNjRhXHUwNjQ0IFx1MDY0N1x1MDY0MVx1MDYy''@;'; put 'put ''YVx1MDY0YV0gZGRkZCBbXHUwNjJhXHUwNjRhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNjdlXHUwNjQ4XHUwNjIxIixwYXN0OiIlcyBcdTA2MjdcdTA2YjMiLHM6Ilx1MDY4Nlx1MDY0Nlx1MDYyZiBcdTA2MzNcdTA2NGFcdTA2YWFcdTA2NDZcdTA2''@;'; put 'put ''OGEiLHNzOiIlZCBcdTA2MzNcdTA2NGFcdTA2YWFcdTA2NDZcdTA2OGEiLG06Ilx1MDY0N1x1MDZhYSBcdTA2NDVcdTA2NDZcdTA2N2QiLG1tOiIlZCBcdTA2NDVcdTA2NDZcdTA2N2QiLGg6Ilx1MDY0N1x1MDZhYSBcdTA2YWFcdTA2NDRcdTA2MjdcdTA2YWEiLGhoOiIlZCBcdTA2YWFcdTA2''@;'; put 'put ''NDRcdTA2MjdcdTA2YWEiLGQ6Ilx1MDY0N1x1MDZhYSBcdTA2OGZcdTA2NGFcdTA2NDZcdTA2NDdcdTA2NDYiLGRkOiIlZCBcdTA2OGZcdTA2NGFcdTA2NDZcdTA2NDdcdTA2NDYiLE06Ilx1MDY0N1x1MDZhYSBcdTA2NDVcdTA2NDdcdTA2NGFcdTA2NDZcdTA2NDgiLE1NOiIlZCBcdTA2NDVc''@;'; put 'put ''dTA2NDdcdTA2NGFcdTA2NDZcdTA2MjciLHk6Ilx1MDY0N1x1MDZhYSBcdTA2MzNcdTA2MjdcdTA2NDQiLHl5OiIlZCBcdTA2MzNcdTA2MjdcdTA2NDQifSxwcmVwYXJzZTpmdW5jdGlvbih2KXtyZXR1cm4gdi5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHYp''@;'; put 'put ''e3JldHVybiB2LnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShoKDk3NTg2KSl9LDEzOTExKGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt5LmRlZmluZUxvY2FsZSgic2UiLHttb250aHM6Im9cdTAxMTFcdTAxMTFhamFnZW1ceGUxbm51X2d1''@;'; put 'put ''b3Z2YW1ceGUxbm51X25qdWtcdTAxMGRhbVx4ZTFubnVfY3VvXHUwMTRib21ceGUxbm51X21pZXNzZW1ceGUxbm51X2dlYXNzZW1ceGUxbm51X3N1b2lkbmVtXHhlMW5udV9ib3JnZW1ceGUxbm51X1x1MDEwZGFrXHUwMTBkYW1ceGUxbm51X2dvbGdnb3RtXHhlMW5udV9za1x4ZTFibWFtXHhl''@;'; put 'put ''MW5udV9qdW92bGFtXHhlMW5udSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoib1x1MDExMVx1MDExMWpfZ3Vvdl9uanVrX2N1b19taWVzX2dlYXNfc3VvaV9ib3JnX1x1MDEwZGFrXHUwMTBkX2dvbGdfc2tceGUxYl9qdW92Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzb3RuYWJlYWl2aV92dW9z''@;'; put 'put ''c1x4ZTFyZ2FfbWFcdTAxNGJcdTAxNGJlYlx4ZTFyZ2FfZ2Fza2F2YWhra3VfZHVvcmFzdGF0X2JlYXJqYWRhdF9sXHhlMXZ2YXJkYXQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic290bl92dW9zX21hXHUwMTRiX2dhc2tfZHVvcl9iZWFyX2xceGUxdiIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c01pbjoic192X21fZ19kX2JfTCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiTU1NTSBELiBbYi5dIFlZWVkiLExMTDoiTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW0iLExMTEw6ImRkZGQsIE1NTU0g''@;'; put 'put ''RC4gW2IuXSBZWVlZIFt0aS5dIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltvdG5lIHRpXSBMVCIsbmV4dERheToiW2lodHRpbiB0aV0gTFQiLG5leHRXZWVrOiJkZGRkIFt0aV0gTFQiLGxhc3REYXk6Iltpa3RlIHRpXSBMVCIsbGFzdFdlZWs6IltvdmRkaXRdIGRkZGQgW3RpXSBMVCIs''@;'; put 'put ''c2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgZ2VhXHUwMTdlZXMiLHBhc3Q6Im1hXHUwMTRiaXQgJXMiLHM6Im1vYWRkZSBzZWt1bmRkYXQiLHNzOiIlZCBzZWt1bmRkYXQiLG06Im9rdGEgbWludWh0YSIsbW06IiVkIG1pbnVodGF0IixoOiJva3RhIGRpaW1tdSIsaGg6''@;'; put 'put ''IiVkIGRpaW1tdXQiLGQ6Im9rdGEgYmVhaXZpIixkZDoiJWQgYmVhaXZ2aXQiLE06Im9rdGEgbVx4ZTFubnUiLE1NOiIlZCBtXHhlMW51dCIseToib2t0YSBqYWhraSIseXk6IiVkIGphZ2l0In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6''@;'; put 'put ''e2RvdzoxLGRveTo0fX0pfShoKDk3NTg2KSl9LDI1MTQ3KGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt5LmRlZmluZUxvY2FsZSgic2kiLHttb250aHM6Ilx1MGRhMlx1MGRiMVx1MGRjMFx1MGRjZlx1MGRiYlx1MGRkMl9cdTBkYjRcdTBkZDlcdTBkYjZcdTBkYmJcdTBkYzBc''@;'; put 'put ''dTBkY2ZcdTBkYmJcdTBkZDJfXHUwZGI4XHUwZGNmXHUwZGJiXHUwZGNhXHUwZGFkXHUwZGQ0X1x1MGQ4NVx1MGRiNFx1MGRjYVx1MjAwZFx1MGRiYlx1MGRkYVx1MGRiZFx1MGRjYV9cdTBkYjhcdTBkZDBcdTBkYmFcdTBkZDJfXHUwZGEyXHUwZGQ2XHUwZGIxXHUwZGQyX1x1MGRhMlx1MGRk''@;'; put 'put ''Nlx1MGRiZFx1MGRkMl9cdTBkODVcdTBkOWNcdTBkZGRcdTBkYzNcdTBkY2FcdTBkYWRcdTBkZDRfXHUwZGMzXHUwZGQwXHUwZGI0XHUwZGNhXHUwZGFkXHUwZGQwXHUwZGI4XHUwZGNhXHUwZGI2XHUwZGJiXHUwZGNhX1x1MGQ5NFx1MGQ5YVx1MGRjYVx1MGRhZFx1MGRkZFx1MGRiNlx1MGRi''@;'; put 'put ''Ylx1MGRjYV9cdTBkYjFcdTBkZGNcdTBkYzBcdTBkZDBcdTBkYjhcdTBkY2FcdTBkYjZcdTBkYmJcdTBkY2FfXHUwZGFmXHUwZGQ5XHUwZGMzXHUwZGQwXHUwZGI4XHUwZGNhXHUwZGI2XHUwZGJiXHUwZGNhIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBkYTJcdTBkYjFfXHUwZGI0XHUw''@;'; put 'put ''ZGQ5XHUwZGI2X1x1MGRiOFx1MGRjZlx1MGRiYlx1MGRjYV9cdTBkODVcdTBkYjRcdTBkY2FfXHUwZGI4XHUwZGQwXHUwZGJhXHUwZGQyX1x1MGRhMlx1MGRkNlx1MGRiMVx1MGRkMl9cdTBkYTJcdTBkZDZcdTBkYmRcdTBkZDJfXHUwZDg1XHUwZDljXHUwZGRkX1x1MGRjM1x1MGRkMFx1MGRi''@;'; put 'put ''NFx1MGRjYV9cdTBkOTRcdTBkOWFcdTBkY2FfXHUwZGIxXHUwZGRjXHUwZGMwXHUwZGQwX1x1MGRhZlx1MGRkOVx1MGRjM1x1MGRkMCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwZDg5XHUwZGJiXHUwZGQyXHUwZGFmXHUwZGNmX1x1MGRjM1x1MGRiM1x1MGRkNFx1MGRhZlx1MGRjZl9cdTBk''@;'; put 'put ''ODVcdTBkOWZcdTBkYzRcdTBkYmJcdTBkZDRcdTBkYzBcdTBkY2ZcdTBkYWZcdTBkY2ZfXHUwZGI2XHUwZGFmXHUwZGNmXHUwZGFmXHUwZGNmX1x1MGRiNlx1MGRjYVx1MjAwZFx1MGRiYlx1MGRjNFx1MGRjM1x1MGRjYVx1MGRiNFx1MGRhZFx1MGRkMlx1MGRiMVx1MGRjYVx1MGRhZlx1MGRj''@;'; put 'put ''Zl9cdTBkYzNcdTBkZDJcdTBkOWFcdTBkZDRcdTBkYmJcdTBkY2ZcdTBkYWZcdTBkY2ZfXHUwZGMzXHUwZGQ5XHUwZGIxXHUwZGMzXHUwZGQ0XHUwZGJiXHUwZGNmXHUwZGFmXHUwZGNmIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGQ4OVx1MGRiYlx1MGRkMl9cdTBkYzNcdTBkYjNc''@;'; put 'put ''dTBkZDRfXHUwZDg1XHUwZDlmX1x1MGRiNlx1MGRhZlx1MGRjZl9cdTBkYjZcdTBkY2FcdTIwMGRcdTBkYmJcdTBkYzRfXHUwZGMzXHUwZGQyXHUwZDlhXHUwZGQ0X1x1MGRjM1x1MGRkOVx1MGRiMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwZDg5X1x1MGRjM19cdTBkODVfXHUwZGI2''@;'; put 'put ''X1x1MGRiNlx1MGRjYVx1MjAwZFx1MGRiYl9cdTBkYzNcdTBkZDJfXHUwZGMzXHUwZGQ5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6ImEgaDptbSIsTFRTOiJhIGg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZIE1NTU0gRCIsTExM''@;'; put 'put ''OiJZWVlZIE1NTU0gRCwgYSBoOm1tIixMTExMOiJZWVlZIE1NTU0gRCBbXHUwZGMwXHUwZGQwXHUwZGIxXHUwZGQyXSBkZGRkLCBhIGg6bW06c3MifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGQ4NVx1MGRhZl0gTFRbXHUwZGE3XSIsbmV4dERheToiW1x1MGRjNFx1MGRkOVx1MGRhN10gTFRb''@;'; put 'put ''XHUwZGE3XSIsbmV4dFdlZWs6ImRkZGQgTFRbXHUwZGE3XSIsbGFzdERheToiW1x1MGQ4YVx1MGRiYVx1MGRkYV0gTFRbXHUwZGE3XSIsbGFzdFdlZWs6IltcdTBkYjRcdTBkYzNcdTBkZDRcdTBkOWNcdTBkZDJcdTBkYmFdIGRkZGQgTFRbXHUwZGE3XSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2''@;'; put 'put ''ZVRpbWU6e2Z1dHVyZToiJXNcdTBkOWFcdTBkZDJcdTBkYjFcdTBkY2EiLHBhc3Q6IiVzXHUwZDlhXHUwZGE3IFx1MGRiNFx1MGRkOVx1MGRiYiIsczoiXHUwZGFkXHUwZGFkXHUwZGNhXHUwZGI0XHUwZGJiIFx1MGQ5YVx1MGRkMlx1MGRjNFx1MGRkMlx1MGRiNFx1MGRiYSIsc3M6Ilx1MGRh''@;'; put 'put ''ZFx1MGRhZFx1MGRjYVx1MGRiNFx1MGRiYiAlZCIsbToiXHUwZGI4XHUwZGQyXHUwZGIxXHUwZGQyXHUwZGFkXHUwZGNhXHUwZGFkXHUwZGQ0XHUwZGMwIixtbToiXHUwZGI4XHUwZGQyXHUwZGIxXHUwZGQyXHUwZGFkXHUwZGNhXHUwZGFkXHUwZGQ0ICVkIixoOiJcdTBkYjRcdTBkZDBcdTBk''@;'; put 'put ''YmEiLGhoOiJcdTBkYjRcdTBkZDBcdTBkYmEgJWQiLGQ6Ilx1MGRhZlx1MGRkMlx1MGRiMVx1MGRiYSIsZGQ6Ilx1MGRhZlx1MGRkMlx1MGRiMSAlZCIsTToiXHUwZGI4XHUwZGNmXHUwZGMzXHUwZGJhIixNTToiXHUwZGI4XHUwZGNmXHUwZGMzICVkIix5OiJcdTBkYzBcdTBkYzNcdTBkYmIi''@;'; put 'put ''LHl5OiJcdTBkYzBcdTBkYzNcdTBkYmIgJWQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9IFx1MGRjMFx1MGRkMFx1MGRiMVx1MGRkMi8sb3JkaW5hbDpmdW5jdGlvbihzKXtyZXR1cm4gcysiIFx1MGRjMFx1MGRkMFx1MGRiMVx1MGRkMiJ9LG1lcmlkaWVtUGFyc2U6L1x1MGRi''@;'; put 'put ''NFx1MGRkOVx1MGRiYiBcdTBkYzBcdTBkYmJcdTBkZDR8XHUwZGI0XHUwZGMzXHUwZGNhIFx1MGRjMFx1MGRiYlx1MGRkNHxcdTBkYjRcdTBkZDkuXHUwZGMwfFx1MGRiNC5cdTBkYzAuLyxpc1BNOmZ1bmN0aW9uKHMpe3JldHVybiJcdTBkYjQuXHUwZGMwLiI9PT1zfHwiXHUwZGI0XHUwZGMz''@;'; put 'put ''XHUwZGNhIFx1MGRjMFx1MGRiYlx1MGRkNCI9PT1zfSxtZXJpZGllbTpmdW5jdGlvbihzLEEsdil7cmV0dXJuIHM+MTE/dj8iXHUwZGI0Llx1MGRjMC4iOiJcdTBkYjRcdTBkYzNcdTBkY2EgXHUwZGMwXHUwZGJiXHUwZGQ0Ijp2PyJcdTBkYjRcdTBkZDkuXHUwZGMwLiI6Ilx1MGRiNFx1MGRk''@;'; put 'put ''OVx1MGRiYiBcdTBkYzBcdTBkYmJcdTBkZDQifX0pfShoKDk3NTg2KSl9LDIzNzQxKGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz0iamFudVx4ZTFyX2ZlYnJ1XHhlMXJfbWFyZWNfYXByXHhlZGxfbVx4ZTFqX2pceGZhbl9qXHhmYWxfYXVndXN0X3NlcHRlbWJlcl9v''@;'; put 'put ''a3RceGYzYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLHM9Imphbl9mZWJfbWFyX2Fwcl9tXHhlMWpfalx4ZmFuX2pceGZhbF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpO2Z1bmN0aW9uIEEodyl7cmV0dXJuIHc+MSYmdzw1fWZ1bmN0aW9uIHYodyxTLEwsUil7dmFy''@;'; put 'put ''IHg9dysiICI7c3dpdGNoKEwpe2Nhc2UicyI6cmV0dXJuIFN8fFI/InBceGUxciBzZWtceGZhbmQiOiJwXHhlMXIgc2VrdW5kYW1pIjtjYXNlInNzIjpyZXR1cm4gU3x8Uj94KyhBKHcpPyJzZWt1bmR5Ijoic2VrXHhmYW5kIik6eCsic2VrdW5kYW1pIjtjYXNlIm0iOnJldHVybiBTPyJtaW5c''@;'; put 'put ''eGZhdGEiOlI/Im1pblx4ZmF0dSI6Im1pblx4ZmF0b3UiO2Nhc2UibW0iOnJldHVybiBTfHxSP3grKEEodyk/Im1pblx4ZmF0eSI6Im1pblx4ZmF0Iik6eCsibWluXHhmYXRhbWkiO2Nhc2UiaCI6cmV0dXJuIFM/ImhvZGluYSI6Uj8iaG9kaW51IjoiaG9kaW5vdSI7Y2FzZSJoaCI6cmV0dXJu''@;'; put 'put ''IFN8fFI/eCsoQSh3KT8iaG9kaW55IjoiaG9kXHhlZG4iKTp4KyJob2RpbmFtaSI7Y2FzZSJkIjpyZXR1cm4gU3x8Uj8iZGVcdTAxNDgiOiJkXHUwMTQ4b20iO2Nhc2UiZGQiOnJldHVybiBTfHxSP3grKEEodyk/ImRuaSI6ImRuXHhlZCIpOngrImRcdTAxNDhhbWkiO2Nhc2UiTSI6cmV0dXJu''@;'; put 'put ''IFN8fFI/Im1lc2lhYyI6Im1lc2lhY29tIjtjYXNlIk1NIjpyZXR1cm4gU3x8Uj94KyhBKHcpPyJtZXNpYWNlIjoibWVzaWFjb3YiKTp4KyJtZXNpYWNtaSI7Y2FzZSJ5IjpyZXR1cm4gU3x8Uj8icm9rIjoicm9rb20iO2Nhc2UieXkiOnJldHVybiBTfHxSP3grKEEodyk/InJva3kiOiJyb2tv''@;'; put 'put ''diIpOngrInJva21pIn19eS5kZWZpbmVMb2NhbGUoInNrIix7bW9udGhzOmMsbW9udGhzU2hvcnQ6cyx3ZWVrZGF5czoibmVkZVx1MDEzZWFfcG9uZGVsb2tfdXRvcm9rX3N0cmVkYV9cdTAxNjF0dnJ0b2tfcGlhdG9rX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZV9wb191''@;'; put 'put ''dF9zdF9cdTAxNjF0X3BpX3NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zdF9cdTAxNjF0X3BpX3NvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1N''@;'; put 'put ''TU0gWVlZWSBIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkbmVzIG9dIExUIixuZXh0RGF5OiJbemFqdHJhIG9dIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt2IG5lZGVcdTAx''@;'; put 'put ''M2V1IG9dIExUIjtjYXNlIDE6Y2FzZSAyOnJldHVybiJbdl0gZGRkZCBbb10gTFQiO2Nhc2UgMzpyZXR1cm4iW3Ygc3RyZWR1IG9dIExUIjtjYXNlIDQ6cmV0dXJuIlt2byBcdTAxNjF0dnJ0b2sgb10gTFQiO2Nhc2UgNTpyZXR1cm4iW3YgcGlhdG9rIG9dIExUIjtjYXNlIDY6cmV0dXJuIlt2''@;'; put 'put ''IHNvYm90dSBvXSBMVCJ9fSxsYXN0RGF5OiJbdlx1MDEwZGVyYSBvXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbbWludWxceGZhIG5lZGVcdTAxM2V1IG9dIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltt''@;'; put 'put ''aW51bFx4ZmRdIGRkZGQgW29dIExUIjtjYXNlIDM6cmV0dXJuIlttaW51bFx4ZmEgc3RyZWR1IG9dIExUIjtjYXNlIDY6cmV0dXJuIlttaW51bFx4ZmEgc29ib3R1IG9dIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwcmVkICVzIixzOnYs''@;'; put 'put ''c3M6dixtOnYsbW06dixoOnYsaGg6dixkOnYsZGQ6dixNOnYsTU06dix5OnYseXk6dn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShoKDk3NTg2KSl9LDkzZTMoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBz''@;'; put 'put ''dHJpY3QiO2Z1bmN0aW9uIGMoQSx2LEMsdyl7dmFyIFM9QSsiICI7c3dpdGNoKEMpe2Nhc2UicyI6cmV0dXJuIHZ8fHc/Im5la2FqIHNla3VuZCI6Im5la2FqIHNla3VuZGFtaSI7Y2FzZSJzcyI6cmV0dXJuIFMrKDE9PT1BP3Y/InNla3VuZG8iOiJzZWt1bmRpIjoyPT09QT92fHx3PyJzZWt1''@;'; put 'put ''bmRpIjoic2VrdW5kYWgiOkE8NT92fHx3PyJzZWt1bmRlIjoic2VrdW5kYWgiOiJzZWt1bmQiKTtjYXNlIm0iOnJldHVybiB2PyJlbmEgbWludXRhIjoiZW5vIG1pbnV0byI7Y2FzZSJtbSI6cmV0dXJuIFMrKDE9PT1BP3Y/Im1pbnV0YSI6Im1pbnV0byI6Mj09PUE/dnx8dz8ibWludXRpIjoi''@;'; put 'put ''bWludXRhbWEiOkE8NT92fHx3PyJtaW51dGUiOiJtaW51dGFtaSI6dnx8dz8ibWludXQiOiJtaW51dGFtaSIpO2Nhc2UiaCI6cmV0dXJuIHY/ImVuYSB1cmEiOiJlbm8gdXJvIjtjYXNlImhoIjpyZXR1cm4gUysoMT09PUE/dj8idXJhIjoidXJvIjoyPT09QT92fHx3PyJ1cmkiOiJ1cmFtYSI6''@;'; put 'put ''QTw1P3Z8fHc/InVyZSI6InVyYW1pIjp2fHx3PyJ1ciI6InVyYW1pIik7Y2FzZSJkIjpyZXR1cm4gdnx8dz8iZW4gZGFuIjoiZW5pbSBkbmVtIjtjYXNlImRkIjpyZXR1cm4gUysoMT09PUE/dnx8dz8iZGFuIjoiZG5lbSI6Mj09PUE/dnx8dz8iZG5pIjoiZG5ldm9tYSI6dnx8dz8iZG5pIjoi''@;'; put 'put ''ZG5ldmkiKTtjYXNlIk0iOnJldHVybiB2fHx3PyJlbiBtZXNlYyI6ImVuaW0gbWVzZWNlbSI7Y2FzZSJNTSI6cmV0dXJuIFMrKDE9PT1BP3Z8fHc/Im1lc2VjIjoibWVzZWNlbSI6Mj09PUE/dnx8dz8ibWVzZWNhIjoibWVzZWNlbWEiOkE8NT92fHx3PyJtZXNlY2UiOiJtZXNlY2kiOnZ8fHc/''@;'; put 'put ''Im1lc2VjZXYiOiJtZXNlY2kiKTtjYXNlInkiOnJldHVybiB2fHx3PyJlbm8gbGV0byI6ImVuaW0gbGV0b20iO2Nhc2UieXkiOnJldHVybiBTKygxPT09QT92fHx3PyJsZXRvIjoibGV0b20iOjI9PT1BP3Z8fHc/ImxldGkiOiJsZXRvbWEiOkE8NT92fHx3PyJsZXRhIjoibGV0aSI6dnx8dz8i''@;'; put 'put ''bGV0IjoibGV0aSIpfX15LmRlZmluZUxvY2FsZSgic2wiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcmVjX2FwcmlsX21hal9qdW5pal9qdWxpal9hdmd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9t''@;'; put 'put ''YXIuX2Fwci5fbWFqLl9qdW4uX2p1bC5fYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGVsamFfcG9uZWRlbGpla190b3Jla19zcmVkYV9cdTAxMGRldHJ0ZWtfcGV0ZWtfc29ib3RhIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzU2hvcnQ6Im5lZC5fcG9uLl90b3IuX3NyZS5fXHUwMTBkZXQuX3BldC5fc29iLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdG9fc3JfXHUwMTBkZV9wZV9zbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6''@;'; put 'put ''Ikg6bW06c3MiLEw6IkRELiBNTS4gWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmVzIG9iXSBMVCIsbmV4dERheToiW2p1dHJpIG9iXSBMVCIsbmV4dFdl''@;'; put 'put ''ZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdl0gW25lZGVsam9dIFtvYl0gTFQiO2Nhc2UgMzpyZXR1cm4iW3ZdIFtzcmVkb10gW29iXSBMVCI7Y2FzZSA2OnJldHVybiJbdl0gW3NvYm90b10gW29iXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2Fz''@;'; put 'put ''ZSA1OnJldHVybiJbdl0gZGRkZCBbb2JdIExUIn19LGxhc3REYXk6Ilt2XHUwMTBkZXJhaiBvYl0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3ByZWpcdTAxNjFuam9dIFtuZWRlbGpvXSBbb2JdIExUIjtjYXNlIDM6cmV0dXJuIltw''@;'; put 'put ''cmVqXHUwMTYxbmpvXSBbc3JlZG9dIFtvYl0gTFQiO2Nhc2UgNjpyZXR1cm4iW3ByZWpcdTAxNjFuam9dIFtzb2JvdG9dIFtvYl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3ByZWpcdTAxNjFuamldIGRkZGQgW29iXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0''@;'; put 'put ''aXZlVGltZTp7ZnV0dXJlOiJcdTAxMGRleiAlcyIscGFzdDoicHJlZCAlcyIsczpjLHNzOmMsbTpjLG1tOmMsaDpjLGhoOmMsZDpjLGRkOmMsTTpjLE1NOmMseTpjLHl5OmN9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6''@;'; put 'put ''N319KX0oaCg5NzU4NikpfSw2MDQ1MShmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5kZWZpbmVMb2NhbGUoInNxIix7bW9udGhzOiJKYW5hcl9TaGt1cnRfTWFyc19QcmlsbF9NYWpfUWVyc2hvcl9Lb3JyaWtfR3VzaHRfU2h0YXRvcl9UZXRvcl9OXHhlYm50b3JfRGhqZXRv''@;'; put 'put ''ciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX1Noa19NYXJfUHJpX01hal9RZXJfS29yX0d1c19TaHRfVGV0X05ceGVibl9EaGoiLnNwbGl0KCJfIiksd2Vla2RheXM6IkUgRGllbF9FIEhceGViblx4ZWJfRSBNYXJ0XHhlYl9FIE1ceGVicmt1clx4ZWJfRSBFbmp0ZV9FIFByZW10ZV9F''@;'; put 'put ''IFNodHVuXHhlYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJEaWVfSFx4ZWJuX01hcl9NXHhlYnJfRW5qX1ByZV9TaHQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkRfSF9NYV9NXHhlYl9FX1BfU2giLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLG1lcmlkaWVtUGFyc2U6''@;'; put 'put ''L1BEfE1ELyxpc1BNOmZ1bmN0aW9uKHMpe3JldHVybiJNIj09PXMuY2hhckF0KDApfSxtZXJpZGllbTpmdW5jdGlvbihzLEEsdil7cmV0dXJuIHM8MTI/IlBEIjoiTUQifSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1N''@;'; put 'put ''IFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltTb3Qgblx4ZWJdIExUIixuZXh0RGF5OiJbTmVzXHhlYnIgblx4ZWJdIExUIixuZXh0V2VlazoiZGRkZCBbblx4ZWJdIExUIixsYXN0RGF5OiJb''@;'; put 'put ''RGplIG5ceGViXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2Uga2FsdWFyIG5ceGViXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiblx4ZWIgJXMiLHBhc3Q6IiVzIG1ceGViIHBhclx4ZWIiLHM6ImRpc2Egc2Vrb25kYSIsc3M6IiVkIHNla29uZGEiLG06Im5qXHhlYiBt''@;'; put 'put ''aW51dFx4ZWIiLG1tOiIlZCBtaW51dGEiLGg6Im5qXHhlYiBvclx4ZWIiLGhoOiIlZCBvclx4ZWIiLGQ6Im5qXHhlYiBkaXRceGViIixkZDoiJWQgZGl0XHhlYiIsTToibmpceGViIG11YWoiLE1NOiIlZCBtdWFqIix5OiJualx4ZWIgdml0Iix5eToiJWQgdml0ZSJ9LGRheU9mTW9udGhPcmRp''@;'; put 'put ''bmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oaCg5NzU4NikpfSw0MDkwNShmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7dmFyIGM9e3dvcmRzOntzczpbIlx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1''@;'; put 'put ''MDQzMCIsIlx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzNSIsIlx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOCJdLG06WyJcdTA0NThcdTA0MzVcdTA0MzRcdTA0MzBcdTA0M2QgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIiwi''@;'; put 'put ''XHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDNlXHUwNDMzIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCJdLG1tOlsiXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIiwiXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIiwiXHUwNDNjXHUwNDM4''@;'; put 'put ''XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIl0saDpbIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzMFx1MDQzZCBcdTA0NDFcdTA0MzBcdTA0NDIiLCJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0M2VcdTA0MzMgXHUwNDQxXHUwNDMwXHUwNDQyXHUwNDMwIl0saGg6WyJcdTA0NDFcdTA0MzBc''@;'; put 'put ''dTA0NDIiLCJcdTA0NDFcdTA0MzBcdTA0NDJcdTA0MzAiLCJcdTA0NDFcdTA0MzBcdTA0NDJcdTA0MzgiXSxkOlsiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDMwXHUwNDNkIFx1MDQzNFx1MDQzMFx1MDQzZCIsIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzZVx1MDQzMyBcdTA0MzRcdTA0''@;'; put 'put ''MzBcdTA0M2RcdTA0MzAiXSxkZDpbIlx1MDQzNFx1MDQzMFx1MDQzZCIsIlx1MDQzNFx1MDQzMFx1MDQzZFx1MDQzMCIsIlx1MDQzNFx1MDQzMFx1MDQzZFx1MDQzMCJdLE06WyJcdTA0NThcdTA0MzVcdTA0MzRcdTA0MzBcdTA0M2QgXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2Iiwi''@;'; put 'put ''XHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDNlXHUwNDMzIFx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzMCJdLE1NOlsiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2IiwiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2XHUwNDMwIiwiXHUwNDNjXHUwNDM1''@;'; put 'put ''XHUwNDQxXHUwNDM1XHUwNDQ2XHUwNDM4Il0seTpbIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQ0MyBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0NDMiLCJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0MzUgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUw''@;'; put 'put ''NDM1Il0seXk6WyJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0NDMiLCJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzUiLCJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiXX0sY29ycmVjdEdyYW1tYXRpY2FsQ2FzZTpmdW5jdGlvbihBLHYp''@;'; put 'put ''e3JldHVybiBBJTEwPj0xJiZBJTEwPD00JiYoQSUxMDA8MTB8fEElMTAwPj0yMCk/QSUxMD09MT92WzBdOnZbMV06dlsyXX0sdHJhbnNsYXRlOmZ1bmN0aW9uKEEsdixDLHcpe3ZhciBMLFM9Yy53b3Jkc1tDXTtyZXR1cm4gMT09PUMubGVuZ3RoPyJ5Ij09PUMmJnY/Ilx1MDQ1OFx1MDQzNVx1''@;'; put 'put ''MDQzNFx1MDQzZFx1MDQzMCBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiOnd8fHY/U1swXTpTWzFdOihMPWMuY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShBLFMpLCJ5eSI9PT1DJiZ2JiYiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQzIj09PUw/QSsiIFx1''@;'; put 'put ''MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzMCI6QSsiICIrTCl9fTt5LmRlZmluZUxvY2FsZSgic3ItY3lybCIse21vbnRoczoiXHUwNDU4XHUwNDMwXHUwNDNkXHUwNDQzXHUwNDMwXHUwNDQwX1x1MDQ0NFx1MDQzNVx1MDQzMVx1MDQ0MFx1MDQ0M1x1MDQzMFx1MDQ0MF9cdTA0''@;'; put 'put ''M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM4XHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQ1OF9cdTA0NThcdTA0NDNcdTA0M2RfXHUwNDU4XHUwNDQzXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2Zc''@;'; put 'put ''dTA0NDJcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzBcdTA0NDBfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDNlXHUwNDMxXHUwNDMwXHUwNDQwX1x1MDQzZFx1MDQzZVx1MDQzMlx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzMFx1MDQ0MF9cdTA0MzRcdTA0MzVcdTA0NDZcdTA0MzVcdTA0M2NcdTA0MzFc''@;'; put 'put ''dTA0MzBcdTA0NDAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQ1OFx1MDQzMFx1MDQzZC5fXHUwNDQ0XHUwNDM1XHUwNDMxLl9cdTA0M2NcdTA0MzBcdTA0NDAuX1x1MDQzMFx1MDQzZlx1MDQ0MC5fXHUwNDNjXHUwNDMwXHUwNDU4X1x1MDQ1OFx1MDQ0M1x1MDQzZF9cdTA0NThcdTA0''@;'; put 'put ''NDNcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzLl9cdTA0NDFcdTA0MzVcdTA0M2YuX1x1MDQzZVx1MDQzYVx1MDQ0Mi5fXHUwNDNkXHUwNDNlXHUwNDMyLl9cdTA0MzRcdTA0MzVcdTA0NDYuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MDQzZFx1MDQzNVx1''@;'; put 'put ''MDQzNFx1MDQzNVx1MDQ1OVx1MDQzMF9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0NTlcdTA0MzBcdTA0M2FfXHUwNDQzXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDMwXHUwNDNhX1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJc''@;'; put 'put ''dTA0MzJcdTA0NDBcdTA0NDJcdTA0MzBcdTA0M2FfXHUwNDNmXHUwNDM1XHUwNDQyXHUwNDMwXHUwNDNhX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0M2RcdTA0MzVcdTA0MzQuX1x1MDQzZlx1MDQzZVx1MDQzZC5f''@;'; put 'put ''XHUwNDQzXHUwNDQyXHUwNDNlLl9cdTA0NDFcdTA0NDBcdTA0MzUuX1x1MDQ0N1x1MDQzNVx1MDQ0Mi5fXHUwNDNmXHUwNDM1XHUwNDQyLl9cdTA0NDFcdTA0NDNcdTA0MzEuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RcdTA0MzVfXHUwNDNmXHUwNDNlX1x1MDQ0M1x1MDQ0Ml9c''@;'; put 'put ''dTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDM1X1x1MDQzZlx1MDQzNV9cdTA0NDFcdTA0NDMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJELiBNLiBZWVlZLiIsTEw6IkQuIE1NTU0gWVlZWS4iLExMTDoi''@;'; put 'put ''RC4gTU1NTSBZWVlZLiBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkuIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQzNFx1MDQzMFx1MDQzZFx1MDQzMFx1MDQ0MSBcdTA0NDNdIExUIixuZXh0RGF5OiJbXHUwNDQxXHUwNDQzXHUwNDQyXHUwNDQwXHUwNDMwIFx1MDQ0M10g''@;'; put 'put ''TFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW1x1MDQ0M10gW1x1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQ1OVx1MDQ0M10gW1x1MDQ0M10gTFQiO2Nhc2UgMzpyZXR1cm4iW1x1MDQ0M10gW1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQz''@;'; put 'put ''NFx1MDQ0M10gW1x1MDQ0M10gTFQiO2Nhc2UgNjpyZXR1cm4iW1x1MDQ0M10gW1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQ0M10gW1x1MDQ0M10gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW1x1MDQ0M10gZGRkZCBbXHUwNDQzXSBMVCJ9fSxsYXN0''@;'; put 'put ''RGF5OiJbXHUwNDU4XHUwNDQzXHUwNDQ3XHUwNDM1IFx1MDQ0M10gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuWyJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDM1XSBbXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDU5XHUwNDM1XSBbXHUwNDQzXSBMVCIsIltc''@;'; put 'put ''dTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzNdIFtcdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0NTlcdTA0M2FcdTA0MzBdIFtcdTA0NDNdIExUIiwiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzZVx1MDQzM10gW1x1MDQ0''@;'; put 'put ''M1x1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzYVx1MDQzMF0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDM1XSBbXHUwNDQxXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDM1XSBbXHUwNDQzXSBMVCIsIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2Jc''@;'; put 'put ''dTA0M2VcdTA0MzNdIFtcdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0NDBcdTA0NDJcdTA0M2FcdTA0MzBdIFtcdTA0NDNdIExUIiwiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzZVx1MDQzM10gW1x1MDQzZlx1MDQzNVx1MDQ0Mlx1MDQzYVx1MDQzMF0gW1x1MDQ0M10g''@;'; put 'put ''TFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDM1XSBbXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDM1XSBbXHUwNDQzXSBMVCJdW3RoaXMuZGF5KCldfSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0MzdcdTA0MzAgJXMiLHBh''@;'; put 'put ''c3Q6Ilx1MDQzZlx1MDQ0MFx1MDQzNSAlcyIsczoiXHUwNDNkXHUwNDM1XHUwNDNhXHUwNDNlXHUwNDNiXHUwNDM4XHUwNDNhXHUwNDNlIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOCIsc3M6Yy50cmFuc2xhdGUsbTpjLnRyYW5zbGF0ZSxtbTpjLnRyYW5zbGF0''@;'; put 'put ''ZSxoOmMudHJhbnNsYXRlLGhoOmMudHJhbnNsYXRlLGQ6Yy50cmFuc2xhdGUsZGQ6Yy50cmFuc2xhdGUsTTpjLnRyYW5zbGF0ZSxNTTpjLnRyYW5zbGF0ZSx5OmMudHJhbnNsYXRlLHl5OmMudHJhbnNsYXRlfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVk''@;'; put 'put ''LiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGgoOTc1ODYpKX0sNTUwNDYoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3ZhciBjPXt3b3Jkczp7c3M6WyJzZWt1bmRhIiwic2VrdW5kZSIsInNla3VuZGkiXSxtOlsiamVkYW4gbWludXQiLCJqZWRub2cgbWludXRhIl0sbW06WyJt''@;'; put 'put ''aW51dCIsIm1pbnV0YSIsIm1pbnV0YSJdLGg6WyJqZWRhbiBzYXQiLCJqZWRub2cgc2F0YSJdLGhoOlsic2F0Iiwic2F0YSIsInNhdGkiXSxkOlsiamVkYW4gZGFuIiwiamVkbm9nIGRhbmEiXSxkZDpbImRhbiIsImRhbmEiLCJkYW5hIl0sTTpbImplZGFuIG1lc2VjIiwiamVkbm9nIG1lc2Vj''@;'; put 'put ''YSJdLE1NOlsibWVzZWMiLCJtZXNlY2EiLCJtZXNlY2kiXSx5OlsiamVkbnUgZ29kaW51IiwiamVkbmUgZ29kaW5lIl0seXk6WyJnb2RpbnUiLCJnb2RpbmUiLCJnb2RpbmEiXX0sY29ycmVjdEdyYW1tYXRpY2FsQ2FzZTpmdW5jdGlvbihBLHYpe3JldHVybiBBJTEwPj0xJiZBJTEwPD00JiYo''@;'; put 'put ''QSUxMDA8MTB8fEElMTAwPj0yMCk/QSUxMD09MT92WzBdOnZbMV06dlsyXX0sdHJhbnNsYXRlOmZ1bmN0aW9uKEEsdixDLHcpe3ZhciBMLFM9Yy53b3Jkc1tDXTtyZXR1cm4gMT09PUMubGVuZ3RoPyJ5Ij09PUMmJnY/ImplZG5hIGdvZGluYSI6d3x8dj9TWzBdOlNbMV06KEw9Yy5jb3JyZWN0''@;'; put 'put ''R3JhbW1hdGljYWxDYXNlKEEsUyksInl5Ij09PUMmJnYmJiJnb2RpbnUiPT09TD9BKyIgZ29kaW5hIjpBKyIgIitMKX19O3kuZGVmaW5lTG9jYWxlKCJzciIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuX2p1bF9hdmd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92''@;'; put 'put ''ZW1iYXJfZGVjZW1iYXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXIuX2Fwci5fbWFqX2p1bl9qdWxfYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGVsamFfcG9uZWRlbGpha191dG9yYWtf''@;'; put 'put ''c3JlZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0by5fc3JlLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl9cdTAxMGRlX3BlX3N1Ii5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiRC4gTS4gWVlZWS4iLExMOiJELiBNTU1NIFlZWVkuIixMTEw6IkQuIE1NTU0gWVlZWS4gSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZLiBIOm1tIn0sY2FsZW5kYXI6e3Nh''@;'; put 'put ''bWVEYXk6IltkYW5hcyB1XSBMVCIsbmV4dERheToiW3N1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIlt1XSBbc3JlZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVy''@;'; put 'put ''biJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanVcdTAxMGRlIHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVyblsiW3Byb1x1MDE2MWxlXSBbbmVkZWxqZV0gW3VdIExUIiwi''@;'; put 'put ''W3Byb1x1MDE2MWxvZ10gW3BvbmVkZWxqa2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFt1dG9ya2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsZV0gW3NyZWRlXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbXHUwMTBkZXR2cnRrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW3BldGthXSBb''@;'; put 'put ''dV0gTFQiLCJbcHJvXHUwMTYxbGVdIFtzdWJvdGVdIFt1XSBMVCJdW3RoaXMuZGF5KCldfSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJlICVzIixzOiJuZWtvbGlrbyBzZWt1bmRpIixzczpjLnRyYW5zbGF0ZSxtOmMudHJhbnNsYXRlLG1tOmMu''@;'; put 'put ''dHJhbnNsYXRlLGg6Yy50cmFuc2xhdGUsaGg6Yy50cmFuc2xhdGUsZDpjLnRyYW5zbGF0ZSxkZDpjLnRyYW5zbGF0ZSxNOmMudHJhbnNsYXRlLE1NOmMudHJhbnNsYXRlLHk6Yy50cmFuc2xhdGUseXk6Yy50cmFuc2xhdGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3Jk''@;'; put 'put ''aW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oaCg5NzU4NikpfSw4NTc2NShmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5kZWZpbmVMb2NhbGUoInNzIix7bW9udGhzOiJCaGltYmlkdndhbmVfSW5kbG92YW5hX0luZGxvdidsZW5raHVsdV9NYWJhc2FfSW5raHdl''@;'; put 'put ''a2h3ZXRpX0luaGxhYmFfS2hvbHdhbmVfSW5nY2lfSW55b25pX0ltcGhhbGFfTHdldGlfSW5nb25nb25pIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJCaGlfSW5hX0ludV9NYWJfSW5rX0luaF9LaG9fSWdjX0lueV9JbXBfTHdlX0lnbyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTGlzb250Zm9f''@;'; put 'put ''VW1zb21idWx1a29fTGVzaWJpbGlfTGVzaXRzYXRmdV9MZXNpbmVfTGVzaWhsYW51X1VtZ2NpYmVsbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJMaXNfVW1iX0xzYl9MZXNfTHNpX0xzaF9VbWciLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkxpX1VzX0xiX0x0X0xzX0xoX1VnIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNh''@;'; put 'put ''bGVuZGFyOntzYW1lRGF5OiJbTmFtdWhsYSBuZ2FdIExUIixuZXh0RGF5OiJbS3VzYXNhIG5nYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtuZ2FdIExUIixsYXN0RGF5OiJbSXRvbG8gbmdhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2xlbGlwaGVsaWxlXSBbbmdhXSBMVCIsc2FtZUVsc2U6IkwifSxy''@;'; put 'put ''ZWxhdGl2ZVRpbWU6e2Z1dHVyZToibmdhICVzIixwYXN0OiJ3ZW50ZWthIG5nYSAlcyIsczoiZW1penV6d2FuYSBsb21jYW5lIixzczoiJWQgbXp1endhbmEiLG06InVtenV6dSIsbW06IiVkIGVtaXp1enUiLGg6ImxpaG9yYSIsaGg6IiVkIGVtYWhvcmEiLGQ6ImxpbGFuZ2EiLGRkOiIlZCBl''@;'; put 'put ''bWFsYW5nYSIsTToiaW55YW5nYSIsTU06IiVkIHRpbnlhbmdhIix5OiJ1bW55YWthIix5eToiJWQgaW1pbnlha2EifSxtZXJpZGllbVBhcnNlOi9la3VzZW5pfGVtaW5pfGVudHNhbWJhbWF8ZWJ1c3VrdS8sbWVyaWRpZW06ZnVuY3Rpb24ocyxBLHYpe3JldHVybiBzPDExPyJla3VzZW5pIjpz''@;'; put 'put ''PDE1PyJlbWluaSI6czwxOT8iZW50c2FtYmFtYSI6ImVidXN1a3UifSxtZXJpZGllbUhvdXI6ZnVuY3Rpb24ocyxBKXtyZXR1cm4gMTI9PT1zJiYocz0wKSwiZWt1c2VuaSI9PT1BP3M6ImVtaW5pIj09PUE/cz49MTE/czpzKzEyOiJlbnRzYW1iYW1hIj09PUF8fCJlYnVzdWt1Ij09PUE/MD09''@;'; put 'put ''PXM/MDpzKzEyOnZvaWQgMH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS8sb3JkaW5hbDoiJWQiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShoKDk3NTg2KSl9LDk5MjkwKGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt5LmRlZmluZUxvY2FsZSgic3YiLHttb250aHM6''@;'; put 'put ''ImphbnVhcmlfZmVicnVhcmlfbWFyc19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdGlfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzOiJzXHhmNm5kYWdfbVx4ZTVuZGFnX3Rpc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbFx4ZjZyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InNceGY2bl9tXHhlNW5fdGlzX29uc190b3JfZnJlX2xceGY2ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi''@;'; put 'put ''c1x4ZjZfbVx4ZTVfdGlfb25fdG9fZnJfbFx4ZjYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtrbC5dIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZ''@;'; put 'put ''WVlZIFtrbC5dIEhIOm1tIixsbGw6IkQgTU1NIFlZWVkgSEg6bW0iLGxsbGw6ImRkZCBEIE1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltJZGFnXSBMVCIsbmV4dERheToiW0ltb3Jnb25dIExUIixsYXN0RGF5OiJbSWdceGU1cl0gTFQiLG5leHRXZWVrOiJbUFx4ZTVdIGRk''@;'; put 'put ''ZGQgTFQiLGxhc3RXZWVrOiJbSV0gZGRkZFtzXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib20gJXMiLHBhc3Q6ImZceGY2ciAlcyBzZWRhbiIsczoiblx4ZTVncmEgc2VrdW5kZXIiLHNzOiIlZCBzZWt1bmRlciIsbToiZW4gbWludXQiLG1tOiIlZCBtaW51dGVy''@;'; put 'put ''IixoOiJlbiB0aW1tZSIsaGg6IiVkIHRpbW1hciIsZDoiZW4gZGFnIixkZDoiJWQgZGFnYXIiLE06ImVuIG1ceGU1bmFkIixNTToiJWQgbVx4ZTVuYWRlciIseToiZXR0IFx4ZTVyIix5eToiJWQgXHhlNXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFw6ZXxcOmEpLyxvcmRp''@;'; put 'put ''bmFsOmZ1bmN0aW9uKHMpe3ZhciBBPXMlMTA7cmV0dXJuIHMrKDE9PX5+KHMlMTAwLzEwKT8iOmUiOjE9PT1BfHwyPT09QT8iOmEiOiI6ZSIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oaCg5NzU4NikpfSw1MzQ0OShmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5kZWZpbmVM''@;'; put 'put ''b2NhbGUoInN3Iix7bW9udGhzOiJKYW51YXJpX0ZlYnJ1YXJpX01hY2hpX0FwcmlsaV9NZWlfSnVuaV9KdWxhaV9BZ29zdGlfU2VwdGVtYmFfT2t0b2JhX05vdmVtYmFfRGVzZW1iYSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX0Fnb19TZXBf''@;'; put 'put ''T2t0X05vdl9EZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ikp1bWFwaWxpX0p1bWF0YXR1X0p1bWFubmVfSnVtYXRhbm9fQWxoYW1pc2lfSWp1bWFhX0p1bWFtb3NpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkpwbF9KdGF0X0pubmVfSnRhbl9BbGhfSWptX0ptb3MiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNNaW46IkoyX0ozX0o0X0o1X0FsX0lqX0oxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6ImhoOm1tIEEiLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDpt''@;'; put 'put ''bSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2xlbyBzYWFdIExUIixuZXh0RGF5OiJba2VzaG8gc2FhXSBMVCIsbmV4dFdlZWs6Ilt3aWtpIGlqYXlvXSBkZGRkIFtzYWF0XSBMVCIsbGFzdERheToiW2phbmFdIExUIixsYXN0V2VlazoiW3dp''@;'; put 'put ''a2kgaWxpeW9waXRhXSBkZGRkIFtzYWF0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgYmFhZGF5ZSIscGFzdDoidG9rZWEgJXMiLHM6ImhpdmkgcHVuZGUiLHNzOiJzZWt1bmRlICVkIixtOiJkYWtpa2EgbW9qYSIsbW06ImRha2lrYSAlZCIsaDoic2FhIGxp''@;'; put 'put ''bW9qYSIsaGg6Im1hc2FhICVkIixkOiJzaWt1IG1vamEiLGRkOiJzaWt1ICVkIixNOiJtd2V6aSBtbW9qYSIsTU06Im1pZXppICVkIix5OiJtd2FrYSBtbW9qYSIseXk6Im1pYWthICVkIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGgoOTc1ODYpKX0sNzI2ODgoZmUsaixoKXshZnVuY3Rpb24o''@;'; put 'put ''eSl7InVzZSBzdHJpY3QiO3ZhciBjPXsxOiJcdTBiZTciLDI6Ilx1MGJlOCIsMzoiXHUwYmU5Iiw0OiJcdTBiZWEiLDU6Ilx1MGJlYiIsNjoiXHUwYmVjIiw3OiJcdTBiZWQiLDg6Ilx1MGJlZSIsOToiXHUwYmVmIiwwOiJcdTBiZTYifSxzPXsiXHUwYmU3IjoiMSIsIlx1MGJlOCI6IjIiLCJc''@;'; put 'put ''dTBiZTkiOiIzIiwiXHUwYmVhIjoiNCIsIlx1MGJlYiI6IjUiLCJcdTBiZWMiOiI2IiwiXHUwYmVkIjoiNyIsIlx1MGJlZSI6IjgiLCJcdTBiZWYiOiI5IiwiXHUwYmU2IjoiMCJ9O3kuZGVmaW5lTG9jYWxlKCJ0YSIse21vbnRoczoiXHUwYjljXHUwYmE5XHUwYmI1XHUwYmIwXHUwYmJmX1x1''@;'; put 'put ''MGJhYVx1MGJiZlx1MGJhYVx1MGJjZFx1MGJiMFx1MGJiNVx1MGJiMFx1MGJiZl9cdTBiYWVcdTBiYmVcdTBiYjBcdTBiY2RcdTBiOWFcdTBiY2RfXHUwYjhmXHUwYmFhXHUwYmNkXHUwYmIwXHUwYmIyXHUwYmNkX1x1MGJhZVx1MGJjN19cdTBiOWNcdTBiYzJcdTBiYTlcdTBiY2RfXHUwYjlj''@;'; put 'put ''XHUwYmMyXHUwYmIyXHUwYmM4X1x1MGI4Nlx1MGI5NVx1MGJiOFx1MGJjZFx1MGI5Zlx1MGJjZF9cdTBiOWFcdTBiYzZcdTBiYWFcdTBiY2RcdTBiOWZcdTBiYzZcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBiY2RfXHUwYjg1XHUwYjk1XHUwYmNkXHUwYjlmXHUwYmM3XHUwYmJlXHUwYmFh''@;'; put 'put ''XHUwYmIwXHUwYmNkX1x1MGJhOFx1MGJiNVx1MGJhZVx1MGJjZFx1MGJhYVx1MGJiMFx1MGJjZF9cdTBiOWZcdTBiYmZcdTBiOWFcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBiY2QiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGI5Y1x1MGJhOVx1MGJiNVx1MGJiMFx1MGJiZl9cdTBi''@;'; put 'put ''YWFcdTBiYmZcdTBiYWFcdTBiY2RcdTBiYjBcdTBiYjVcdTBiYjBcdTBiYmZfXHUwYmFlXHUwYmJlXHUwYmIwXHUwYmNkXHUwYjlhXHUwYmNkX1x1MGI4Zlx1MGJhYVx1MGJjZFx1MGJiMFx1MGJiMlx1MGJjZF9cdTBiYWVcdTBiYzdfXHUwYjljXHUwYmMyXHUwYmE5XHUwYmNkX1x1MGI5Y1x1''@;'; put 'put ''MGJjMlx1MGJiMlx1MGJjOF9cdTBiODZcdTBiOTVcdTBiYjhcdTBiY2RcdTBiOWZcdTBiY2RfXHUwYjlhXHUwYmM2XHUwYmFhXHUwYmNkXHUwYjlmXHUwYmM2XHUwYmFlXHUwYmNkXHUwYmFhXHUwYmIwXHUwYmNkX1x1MGI4NVx1MGI5NVx1MGJjZFx1MGI5Zlx1MGJjN1x1MGJiZVx1MGJhYVx1''@;'; put 'put ''MGJiMFx1MGJjZF9cdTBiYThcdTBiYjVcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBiY2RfXHUwYjlmXHUwYmJmXHUwYjlhXHUwYmFlXHUwYmNkXHUwYmFhXHUwYmIwXHUwYmNkIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTBiOWVcdTBiYmVcdTBiYWZcdTBiYmZcdTBiYjFcdTBiY2RcdTBi''@;'; put 'put ''YjFcdTBiYzFcdTBiOTVcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUwYmE0XHUwYmJmXHUwYjk5XHUwYmNkXHUwYjk1XHUwYjlmXHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4X1x1MGI5YVx1MGJjNlx1MGJiNVx1MGJjZFx1MGJiNVx1MGJiZVx1MGJh''@;'; put 'put ''Zlx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOF9cdTBiYWFcdTBiYzFcdTBiYTRcdTBiYTlcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUwYmI1XHUwYmJmXHUwYmFmXHUwYmJlXHUwYmI0XHUwYjk1XHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFl''@;'; put 'put ''XHUwYmM4X1x1MGJiNVx1MGJjNlx1MGJiM1x1MGJjZFx1MGJiM1x1MGJiZlx1MGI5NVx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOF9cdTBiOWFcdTBiYTlcdTBiYmZcdTBiOTVcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzgiLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXNTaG9ydDoiXHUwYjllXHUwYmJlXHUwYmFmXHUwYmJmXHUwYmIxXHUwYmMxX1x1MGJhNFx1MGJiZlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJiM1x1MGJjZF9cdTBiOWFcdTBiYzZcdTBiYjVcdTBiY2RcdTBiYjVcdTBiYmVcdTBiYWZcdTBiY2RfXHUwYmFhXHUwYmMxXHUwYmE0XHUwYmE5XHUw''@;'; put 'put ''YmNkX1x1MGJiNVx1MGJiZlx1MGJhZlx1MGJiZVx1MGJiNFx1MGJhOVx1MGJjZF9cdTBiYjVcdTBiYzZcdTBiYjNcdTBiY2RcdTBiYjNcdTBiYmZfXHUwYjlhXHUwYmE5XHUwYmJmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBiOWVcdTBiYmVfXHUwYmE0XHUwYmJmX1x1MGI5YVx1MGJj''@;'; put 'put ''Nl9cdTBiYWFcdTBiYzFfXHUwYmI1XHUwYmJmX1x1MGJiNVx1MGJjNl9cdTBiOWEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBISDptbSIsTExMTDoi''@;'; put 'put ''ZGRkZCwgRCBNTU1NIFlZWVksIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBiODdcdTBiYTlcdTBiY2RcdTBiYjFcdTBiYzFdIExUIixuZXh0RGF5OiJbXHUwYmE4XHUwYmJlXHUwYmIzXHUwYmM4XSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwYmE4XHUwYmM3''@;'; put 'put ''XHUwYmIxXHUwYmNkXHUwYmIxXHUwYmMxXSBMVCIsbGFzdFdlZWs6IltcdTBiOTVcdTBiOWZcdTBiYThcdTBiY2RcdTBiYTQgXHUwYmI1XHUwYmJlXHUwYmIwXHUwYmFlXHUwYmNkXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwYjg3XHUwYmIy''@;'; put 'put ''XHUwYmNkIixwYXN0OiIlcyBcdTBiYWVcdTBiYzFcdTBiYTlcdTBiY2QiLHM6Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiOWFcdTBiYmZcdTBiYjIgXHUwYmI1XHUwYmJmXHUwYmE4XHUwYmJlXHUwYjlmXHUwYmJmXHUwYjk1XHUwYmIzXHUwYmNkIixzczoiJWQgXHUwYmI1XHUwYmJmXHUwYmE4''@;'; put 'put ''XHUwYmJlXHUwYjlmXHUwYmJmXHUwYjk1XHUwYmIzXHUwYmNkIixtOiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYmE4XHUwYmJmXHUwYmFlXHUwYmJmXHUwYjlmXHUwYmFlXHUwYmNkIixtbToiJWQgXHUwYmE4XHUwYmJmXHUwYmFlXHUwYmJmXHUwYjlmXHUwYjk5XHUwYmNkXHUwYjk1XHUwYmIz''@;'; put 'put ''XHUwYmNkIixoOiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYmFlXHUwYmEzXHUwYmJmIFx1MGJhOFx1MGJjN1x1MGJiMFx1MGJhZVx1MGJjZCIsaGg6IiVkIFx1MGJhZVx1MGJhM1x1MGJiZiBcdTBiYThcdTBiYzdcdTBiYjBcdTBiYWVcdTBiY2QiLGQ6Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBi''@;'; put 'put ''YThcdTBiYmVcdTBiYjNcdTBiY2QiLGRkOiIlZCBcdTBiYThcdTBiYmVcdTBiOWZcdTBiY2RcdTBiOTVcdTBiYjNcdTBiY2QiLE06Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiYWVcdTBiYmVcdTBiYTRcdTBiYWVcdTBiY2QiLE1NOiIlZCBcdTBiYWVcdTBiYmVcdTBiYTRcdTBiOTlcdTBiY2Rc''@;'; put 'put ''dTBiOTVcdTBiYjNcdTBiY2QiLHk6Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiYjVcdTBiYjBcdTBiYzFcdTBiOWZcdTBiYWVcdTBiY2QiLHl5OiIlZCBcdTBiODZcdTBiYTNcdTBiY2RcdTBiOWZcdTBiYzFcdTBiOTVcdTBiYjNcdTBiY2QifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsx''@;'; put 'put ''LDJ9XHUwYmI1XHUwYmE0XHUwYmMxLyxvcmRpbmFsOmZ1bmN0aW9uKHYpe3JldHVybiB2KyJcdTBiYjVcdTBiYTRcdTBiYzEifSxwcmVwYXJzZTpmdW5jdGlvbih2KXtyZXR1cm4gdi5yZXBsYWNlKC9bXHUwYmU3XHUwYmU4XHUwYmU5XHUwYmVhXHUwYmViXHUwYmVjXHUwYmVkXHUwYmVlXHUw''@;'; put 'put ''YmVmXHUwYmU2XS9nLGZ1bmN0aW9uKEMpe3JldHVybiBzW0NdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odil7cmV0dXJuIHYucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihDKXtyZXR1cm4gY1tDXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBiYWZcdTBiYmVcdTBiYWVcdTBiYWVcdTBiY2R8XHUwYmI1''@;'; put 'put ''XHUwYmM4XHUwYjk1XHUwYmIxXHUwYmM4fFx1MGI5NVx1MGJiZVx1MGJiMlx1MGJjOHxcdTBiYThcdTBiYTNcdTBiY2RcdTBiYWFcdTBiOTVcdTBiYjJcdTBiY2R8XHUwYjhlXHUwYmIxXHUwYmNkXHUwYmFhXHUwYmJlXHUwYjlmXHUwYmMxfFx1MGJhZVx1MGJiZVx1MGJiMlx1MGJjOC8sbWVy''@;'; put 'put ''aWRpZW06ZnVuY3Rpb24odixDLHcpe3JldHVybiB2PDI/IiBcdTBiYWZcdTBiYmVcdTBiYWVcdTBiYWVcdTBiY2QiOnY8Nj8iIFx1MGJiNVx1MGJjOFx1MGI5NVx1MGJiMVx1MGJjOCI6djwxMD8iIFx1MGI5NVx1MGJiZVx1MGJiMlx1MGJjOCI6djwxND8iIFx1MGJhOFx1MGJhM1x1MGJjZFx1''@;'; put 'put ''MGJhYVx1MGI5NVx1MGJiMlx1MGJjZCI6djwxOD8iIFx1MGI4ZVx1MGJiMVx1MGJjZFx1MGJhYVx1MGJiZVx1MGI5Zlx1MGJjMSI6djwyMj8iIFx1MGJhZVx1MGJiZVx1MGJiMlx1MGJjOCI6IiBcdTBiYWZcdTBiYmVcdTBiYWVcdTBiYWVcdTBiY2QifSxtZXJpZGllbUhvdXI6ZnVuY3Rpb24o''@;'; put 'put ''dixDKXtyZXR1cm4gMTI9PT12JiYodj0wKSwiXHUwYmFmXHUwYmJlXHUwYmFlXHUwYmFlXHUwYmNkIj09PUM/djwyP3Y6disxMjoiXHUwYmI1XHUwYmM4XHUwYjk1XHUwYmIxXHUwYmM4Ij09PUN8fCJcdTBiOTVcdTBiYmVcdTBiYjJcdTBiYzgiPT09Q3x8Ilx1MGJhOFx1MGJhM1x1MGJjZFx1''@;'; put 'put ''MGJhYVx1MGI5NVx1MGJiMlx1MGJjZCI9PT1DJiZ2Pj0xMD92OnYrMTJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShoKDk3NTg2KSl9LDMyMDYwKGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt5LmRlZmluZUxvY2FsZSgidGUiLHttb250aHM6Ilx1MGMxY1x1MGMyOFx1MGMzNVx1''@;'; put 'put ''MGMzMFx1MGMzZl9cdTBjMmJcdTBjM2ZcdTBjMmNcdTBjNGRcdTBjMzBcdTBjMzVcdTBjMzBcdTBjM2ZfXHUwYzJlXHUwYzNlXHUwYzMwXHUwYzRkXHUwYzFhXHUwYzNmX1x1MGMwZlx1MGMyYVx1MGM0ZFx1MGMzMFx1MGMzZlx1MGMzMlx1MGM0ZF9cdTBjMmVcdTBjNDdfXHUwYzFjXHUwYzQy''@;'; put 'put ''XHUwYzI4XHUwYzRkX1x1MGMxY1x1MGM0MVx1MGMzMlx1MGM0OF9cdTBjMDZcdTBjMTdcdTBjMzhcdTBjNGRcdTBjMWZcdTBjNDFfXHUwYzM4XHUwYzQ2XHUwYzJhXHUwYzRkXHUwYzFmXHUwYzQ2XHUwYzAyXHUwYzJjXHUwYzMwXHUwYzRkX1x1MGMwNVx1MGMxNVx1MGM0ZFx1MGMxZlx1MGM0''@;'; put 'put ''Ylx1MGMyY1x1MGMzMFx1MGM0ZF9cdTBjMjhcdTBjMzVcdTBjMDJcdTBjMmNcdTBjMzBcdTBjNGRfXHUwYzIxXHUwYzNmXHUwYzM4XHUwYzQ2XHUwYzAyXHUwYzJjXHUwYzMwXHUwYzRkIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBjMWNcdTBjMjguX1x1MGMyYlx1MGMzZlx1MGMyY1x1''@;'; put 'put ''MGM0ZFx1MGMzMC5fXHUwYzJlXHUwYzNlXHUwYzMwXHUwYzRkXHUwYzFhXHUwYzNmX1x1MGMwZlx1MGMyYVx1MGM0ZFx1MGMzMFx1MGMzZi5fXHUwYzJlXHUwYzQ3X1x1MGMxY1x1MGM0Mlx1MGMyOFx1MGM0ZF9cdTBjMWNcdTBjNDFcdTBjMzJcdTBjNDhfXHUwYzA2XHUwYzE3Ll9cdTBjMzhc''@;'; put 'put ''dTBjNDZcdTBjMmFcdTBjNGQuX1x1MGMwNVx1MGMxNVx1MGM0ZFx1MGMxZlx1MGM0Yi5fXHUwYzI4XHUwYzM1Ll9cdTBjMjFcdTBjM2ZcdTBjMzhcdTBjNDYuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGMwNlx1MGMyNlx1MGMzZlx1MGMzNVx1MGMzZVx1''@;'; put 'put ''MGMzMFx1MGMwMl9cdTBjMzhcdTBjNGJcdTBjMmVcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzJlXHUwYzAyXHUwYzE3XHUwYzMzXHUwYzM1XHUwYzNlXHUwYzMwXHUwYzAyX1x1MGMyY1x1MGM0MVx1MGMyN1x1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMl9cdTBjMTdcdTBjNDFcdTBjMzBc''@;'; put 'put ''dTBjNDFcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzM2XHUwYzQxXHUwYzE1XHUwYzRkXHUwYzMwXHUwYzM1XHUwYzNlXHUwYzMwXHUwYzAyX1x1MGMzNlx1MGMyOFx1MGMzZlx1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBjMDZcdTBj''@;'; put 'put ''MjZcdTBjM2ZfXHUwYzM4XHUwYzRiXHUwYzJlX1x1MGMyZVx1MGMwMlx1MGMxN1x1MGMzM19cdTBjMmNcdTBjNDFcdTBjMjdfXHUwYzE3XHUwYzQxXHUwYzMwXHUwYzQxX1x1MGMzNlx1MGM0MVx1MGMxNVx1MGM0ZFx1MGMzMF9cdTBjMzZcdTBjMjhcdTBjM2YiLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXNNaW46Ilx1MGMwNl9cdTBjMzhcdTBjNGJfXHUwYzJlXHUwYzAyX1x1MGMyY1x1MGM0MV9cdTBjMTdcdTBjNDFfXHUwYzM2XHUwYzQxX1x1MGMzNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1N''@;'; put 'put ''TU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBjMjhcdTBjNDdcdTBjMjFcdTBjNDFdIExUIixuZXh0RGF5OiJbXHUwYzMwXHUwYzQ3XHUwYzJhXHUwYzQxXSBMVCIsbmV4dFdl''@;'; put 'put ''ZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwYzI4XHUwYzNmXHUwYzI4XHUwYzRkXHUwYzI4XSBMVCIsbGFzdFdlZWs6IltcdTBjMTdcdTBjMjRdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBjMzJcdTBjNGIiLHBhc3Q6IiVzIFx1MGMxNVx1''@;'; put 'put ''MGM0ZFx1MGMzMFx1MGMzZlx1MGMyNFx1MGMwMiIsczoiXHUwYzE1XHUwYzRhXHUwYzI4XHUwYzRkXHUwYzI4XHUwYzNmIFx1MGMxNVx1MGM0ZFx1MGMzN1x1MGMyM1x1MGMzZVx1MGMzMlx1MGM0MSIsc3M6IiVkIFx1MGMzOFx1MGM0Nlx1MGMxNVx1MGMyOFx1MGM0ZFx1MGMzMlx1MGM0MSIs''@;'; put 'put ''bToiXHUwYzEyXHUwYzE1IFx1MGMyOFx1MGMzZlx1MGMyZVx1MGMzZlx1MGMzN1x1MGMwMiIsbW06IiVkIFx1MGMyOFx1MGMzZlx1MGMyZVx1MGMzZlx1MGMzN1x1MGMzZVx1MGMzMlx1MGM0MSIsaDoiXHUwYzEyXHUwYzE1IFx1MGMxN1x1MGMwMlx1MGMxZiIsaGg6IiVkIFx1MGMxN1x1MGMw''@;'; put 'put ''Mlx1MGMxZlx1MGMzMlx1MGM0MSIsZDoiXHUwYzEyXHUwYzE1IFx1MGMzMFx1MGM0Ylx1MGMxY1x1MGM0MSIsZGQ6IiVkIFx1MGMzMFx1MGM0Ylx1MGMxY1x1MGM0MVx1MGMzMlx1MGM0MSIsTToiXHUwYzEyXHUwYzE1IFx1MGMyOFx1MGM0Nlx1MGMzMiIsTU06IiVkIFx1MGMyOFx1MGM0Nlx1''@;'; put 'put ''MGMzMlx1MGMzMlx1MGM0MSIseToiXHUwYzEyXHUwYzE1IFx1MGMzOFx1MGMwMlx1MGMzNVx1MGMyNFx1MGM0ZFx1MGMzOFx1MGMzMFx1MGMwMiIseXk6IiVkIFx1MGMzOFx1MGMwMlx1MGMzNVx1MGMyNFx1MGM0ZFx1MGMzOFx1MGMzMFx1MGMzZVx1MGMzMlx1MGM0MSJ9LGRheU9mTW9udGhP''@;'; put 'put ''cmRpbmFsUGFyc2U6L1xkezEsMn1cdTBjMzUvLG9yZGluYWw6IiVkXHUwYzM1IixtZXJpZGllbVBhcnNlOi9cdTBjMzBcdTBjM2VcdTBjMjRcdTBjNGRcdTBjMzBcdTBjM2Z8XHUwYzA5XHUwYzI2XHUwYzJmXHUwYzAyfFx1MGMyZVx1MGMyN1x1MGM0ZFx1MGMyZlx1MGMzZVx1MGMzOVx1MGM0''@;'; put 'put ''ZFx1MGMyOFx1MGMwMnxcdTBjMzhcdTBjM2VcdTBjMmZcdTBjMDJcdTBjMjRcdTBjNGRcdTBjMzBcdTBjMDIvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihzLEEpe3JldHVybiAxMj09PXMmJihzPTApLCJcdTBjMzBcdTBjM2VcdTBjMjRcdTBjNGRcdTBjMzBcdTBjM2YiPT09QT9zPDQ/czpzKzEy''@;'; put 'put ''OiJcdTBjMDlcdTBjMjZcdTBjMmZcdTBjMDIiPT09QT9zOiJcdTBjMmVcdTBjMjdcdTBjNGRcdTBjMmZcdTBjM2VcdTBjMzlcdTBjNGRcdTBjMjhcdTBjMDIiPT09QT9zPj0xMD9zOnMrMTI6Ilx1MGMzOFx1MGMzZVx1MGMyZlx1MGMwMlx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMwMiI9PT1BP3Mr''@;'; put 'put ''MTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihzLEEsdil7cmV0dXJuIHM8ND8iXHUwYzMwXHUwYzNlXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzNmIjpzPDEwPyJcdTBjMDlcdTBjMjZcdTBjMmZcdTBjMDIiOnM8MTc/Ilx1MGMyZVx1MGMyN1x1MGM0ZFx1MGMyZlx1MGMzZVx1MGMzOVx1MGM0''@;'; put 'put ''ZFx1MGMyOFx1MGMwMiI6czwyMD8iXHUwYzM4XHUwYzNlXHUwYzJmXHUwYzAyXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzAyIjoiXHUwYzMwXHUwYzNlXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzNmIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KGgoOTc1ODYpKX0sOTMyOTAoZmUsaixoKXshZnVuY3Rp''@;'; put 'put ''b24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJ0ZXQiLHttb250aHM6IkphbmVpcnVfRmV2ZXJlaXJ1X01hcnN1X0FicmlsX01haXVfSnVceGYxdV9KdWxsdV9BZ3VzdHVfU2V0ZW1icnVfT3V0dWJydV9Ob3ZlbWJydV9EZXplbWJydSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi''@;'; put 'put ''SmFuX0Zldl9NYXJfQWJyX01haV9KdW5fSnVsX0Fnb19TZXRfT3V0X05vdl9EZXoiLnNwbGl0KCJfIiksd2Vla2RheXM6IkRvbWluZ3VfU2VndW5kYV9UZXJzYV9LdWFydGFfS2ludGFfU2VzdGFfU2FiYWR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkRvbV9TZWdfVGVyc19LdWFfS2lu''@;'; put 'put ''dF9TZXN0X1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiRG9fU2VnX1RlX0t1X0tpX1Nlc19TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6''@;'; put 'put ''bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltPaGluIGloYV0gTFQiLG5leHREYXk6IltBYmFuIGloYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtpaGFdIExUIixsYXN0RGF5OiJbSG9yaXNlaWsgaWhhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3Nl''@;'; put 'put ''bWFuYSBrb3R1a10gW2loYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImloYSAlcyIscGFzdDoiJXMgbGl1YmEiLHM6InNlZ3VuZHUgYmFsdW4iLHNzOiJzZWd1bmR1ICVkIixtOiJtaW51dHUgaWRhIixtbToibWludXR1ICVkIixoOiJvcmFzIGlkYSIsaGg6Im9y''@;'; put 'put ''YXMgJWQiLGQ6Imxvcm9uIGlkYSIsZGQ6Imxvcm9uICVkIixNOiJmdWxhbiBpZGEiLE1NOiJmdWxhbiAlZCIseToidGluYW4gaWRhIix5eToidGluYW4gJWQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihzKXt2YXIgQT1z''@;'; put 'put ''JTEwO3JldHVybiBzKygxPT1+fihzJTEwMC8xMCk/InRoIjoxPT09QT8ic3QiOjI9PT1BPyJuZCI6Mz09PUE/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGgoOTc1ODYpKX0sODI5NChmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7dmFyIGM9ezA6Ii1cdTA0NDNc''@;'; put 'put ''dTA0M2MiLDE6Ii1cdTA0NDNcdTA0M2MiLDI6Ii1cdTA0NGVcdTA0M2MiLDM6Ii1cdTA0NGVcdTA0M2MiLDQ6Ii1cdTA0NDNcdTA0M2MiLDU6Ii1cdTA0NDNcdTA0M2MiLDY6Ii1cdTA0NDNcdTA0M2MiLDc6Ii1cdTA0NDNcdTA0M2MiLDg6Ii1cdTA0NDNcdTA0M2MiLDk6Ii1cdTA0NDNcdTA0''@;'; put 'put ''M2MiLDEwOiItXHUwNDQzXHUwNDNjIiwxMjoiLVx1MDQ0M1x1MDQzYyIsMTM6Ii1cdTA0NDNcdTA0M2MiLDIwOiItXHUwNDQzXHUwNDNjIiwzMDoiLVx1MDQ0ZVx1MDQzYyIsNDA6Ii1cdTA0NDNcdTA0M2MiLDUwOiItXHUwNDQzXHUwNDNjIiw2MDoiLVx1MDQ0M1x1MDQzYyIsNzA6Ii1cdTA0''@;'; put 'put ''NDNcdTA0M2MiLDgwOiItXHUwNDQzXHUwNDNjIiw5MDoiLVx1MDQ0M1x1MDQzYyIsMTAwOiItXHUwNDQzXHUwNDNjIn07eS5kZWZpbmVMb2NhbGUoInRnIix7bW9udGhzOntmb3JtYXQ6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0''@;'; put 'put ''NDBcdTA0MzBcdTA0M2JcdTA0MzhfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyXHUwNDM4X1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYlx1MDQzOF9cdTA0M2NcdTA0MzBcdTA0MzlcdTA0MzhfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDM4X1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQzOF9c''@;'; put 'put ''dTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJcdTA0MzhfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDM4X1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQzOF9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBc''@;'; put 'put ''dTA0MzhfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwXHUwNDM4Ii5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQy''@;'; put 'put ''X1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkX1x1MDQzOFx1MDQ0ZVx1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUw''@;'; put 'put ''NDQwX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoiXHUwNDRmXHUwNDNkXHUwNDMyX1x1MDQ0NFx1MDQz''@;'; put 'put ''NVx1MDQzMl9cdTA0M2NcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDNmXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RfXHUwNDM4XHUwNDRlXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQzM19cdTA0NDFcdTA0MzVcdTA0M2RfXHUwNDNlXHUwNDNhXHUwNDQyX1x1MDQz''@;'; put 'put ''ZFx1MDQzZVx1MDQ0Zl9cdTA0MzRcdTA0MzVcdTA0M2EiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQ0Zlx1MDQzYVx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzNV9cdTA0MzRcdTA0NDNcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzVfXHUwNDQxXHUwNDM1XHUwNDQ4XHUwNDMw''@;'; put 'put ''XHUwNDNkXHUwNDMxXHUwNDM1X1x1MDQ0N1x1MDQzZVx1MDQ0MFx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzNV9cdTA0M2ZcdTA0MzBcdTA0M2RcdTA0YjdcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzVfXHUwNGI3XHUwNDQzXHUwNDNjXHUwNDRhXHUwNDMwX1x1MDQ0OFx1MDQz''@;'; put 'put ''MFx1MDQzZFx1MDQzMVx1MDQzNSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0NGZcdTA0NDhcdTA0MzFfXHUwNDM0XHUwNDQ4XHUwNDMxX1x1MDQ0MVx1MDQ0OFx1MDQzMV9cdTA0NDdcdTA0NDhcdTA0MzFfXHUwNDNmXHUwNDQ4XHUwNDMxX1x1MDRiN1x1MDQ0M1x1MDQzY19cdTA0''@;'; put 'put ''NDhcdTA0M2RcdTA0MzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQ0Zlx1MDQ0OF9cdTA0MzRcdTA0NDhfXHUwNDQxXHUwNDQ4X1x1MDQ0N1x1MDQ0OF9cdTA0M2ZcdTA0NDhfXHUwNGI3XHUwNDNjX1x1MDQ0OFx1MDQzMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhI''@;'; put 'put ''Om1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MThcdTA0M2NcdTA0NDBcdTA0ZWZcdTA0MzcgXHUwNDQx''@;'; put 'put ''XHUwNDNlXHUwNDMwXHUwNDQyXHUwNDM4XSBMVCIsbmV4dERheToiW1x1MDQyNFx1MDQzMFx1MDQ0MFx1MDQzNFx1MDQzZSBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJcdTA0MzhdIExUIixsYXN0RGF5OiJbXHUwNDE0XHUwNDM4XHUwNDQwXHUwNGVmXHUwNDM3IFx1MDQ0MVx1MDQzZVx1MDQz''@;'; put 'put ''MFx1MDQ0Mlx1MDQzOF0gTFQiLG5leHRXZWVrOiJkZGRkW1x1MDQzOF0gW1x1MDRiM1x1MDQzMFx1MDQ0NFx1MDQ0Mlx1MDQzMFx1MDQzOCBcdTA0M2VcdTA0NGZcdTA0M2RcdTA0MzRcdTA0MzAgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXHUwNDM4XSBMVCIsbGFzdFdlZWs6ImRkZGRbXHUw''@;'; put 'put ''NDM4XSBbXHUwNGIzXHUwNDMwXHUwNDQ0XHUwNDQyXHUwNDMwXHUwNDM4IFx1MDQzM1x1MDQ0M1x1MDQzN1x1MDQzMFx1MDQ0OFx1MDQ0Mlx1MDQzMCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJcdTA0MzhdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0MzFc''@;'; put 'put ''dTA0MzBcdTA0NGFcdTA0MzRcdTA0MzggJXMiLHBhc3Q6IiVzIFx1MDQzZlx1MDQzNVx1MDQ0OCIsczoiXHUwNDRmXHUwNDNhXHUwNDQ3XHUwNDMwXHUwNDNkXHUwNDM0IFx1MDQ0MVx1MDQzZVx1MDQzZFx1MDQzOFx1MDQ0ZiIsbToiXHUwNDRmXHUwNDNhIFx1MDQzNFx1MDQzMFx1MDQ5Ylx1''@;'; put 'put ''MDQzOFx1MDQ5Ylx1MDQzMCIsbW06IiVkIFx1MDQzNFx1MDQzMFx1MDQ5Ylx1MDQzOFx1MDQ5Ylx1MDQzMCIsaDoiXHUwNDRmXHUwNDNhIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0MiIsZDoiXHUwNDRmXHUwNDNhIFx1MDQ0MFx1MDRl''@;'; put 'put ''Zlx1MDQzNyIsZGQ6IiVkIFx1MDQ0MFx1MDRlZlx1MDQzNyIsTToiXHUwNDRmXHUwNDNhIFx1MDQzY1x1MDQzZVx1MDRiMyIsTU06IiVkIFx1MDQzY1x1MDQzZVx1MDRiMyIseToiXHUwNDRmXHUwNDNhIFx1MDQ0MVx1MDQzZVx1MDQzYiIseXk6IiVkIFx1MDQ0MVx1MDQzZVx1MDQzYiJ9LG1l''@;'; put 'put ''cmlkaWVtUGFyc2U6L1x1MDQ0OFx1MDQzMFx1MDQzMXxcdTA0NDFcdTA0NDNcdTA0MzFcdTA0YjN8XHUwNDQwXHUwNGVmXHUwNDM3fFx1MDQzMVx1MDQzNVx1MDQzM1x1MDQzZVx1MDRiMy8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKEEsdil7cmV0dXJuIDEyPT09QSYmKEE9MCksIlx1MDQ0OFx1''@;'; put 'put ''MDQzMFx1MDQzMSI9PT12P0E8ND9BOkErMTI6Ilx1MDQ0MVx1MDQ0M1x1MDQzMVx1MDRiMyI9PT12P0E6Ilx1MDQ0MFx1MDRlZlx1MDQzNyI9PT12P0E+PTExP0E6QSsxMjoiXHUwNDMxXHUwNDM1XHUwNDMzXHUwNDNlXHUwNGIzIj09PXY/QSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9u''@;'; put 'put ''KEEsdixDKXtyZXR1cm4gQTw0PyJcdTA0NDhcdTA0MzBcdTA0MzEiOkE8MTE/Ilx1MDQ0MVx1MDQ0M1x1MDQzMVx1MDRiMyI6QTwxNj8iXHUwNDQwXHUwNGVmXHUwNDM3IjpBPDE5PyJcdTA0MzFcdTA0MzVcdTA0MzNcdTA0M2VcdTA0YjMiOiJcdTA0NDhcdTA0MzBcdTA0MzEifSxkYXlPZk1v''@;'; put 'put ''bnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0NDNcdTA0M2N8XHUwNDRlXHUwNDNjKS8sb3JkaW5hbDpmdW5jdGlvbihBKXtyZXR1cm4gQSsoY1tBXXx8Y1tBJTEwXXx8Y1tBPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGgoOTc1ODYpKX0sMTIzMShmZSxqLGgp''@;'; put 'put ''eyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5kZWZpbmVMb2NhbGUoInRoIix7bW9udGhzOiJcdTBlMjFcdTBlMDFcdTBlMjNcdTBlMzJcdTBlMDRcdTBlMjFfXHUwZTAxXHUwZTM4XHUwZTIxXHUwZTIwXHUwZTMyXHUwZTFlXHUwZTMxXHUwZTE5XHUwZTE4XHUwZTRjX1x1MGUyMVx1MGUz''@;'; put 'put ''NVx1MGUxOVx1MGUzMlx1MGUwNFx1MGUyMV9cdTBlNDBcdTBlMjFcdTBlMjlcdTBlMzJcdTBlMjJcdTBlMTlfXHUwZTFlXHUwZTI0XHUwZTI5XHUwZTIwXHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUyMVx1MGUzNFx1MGUxNlx1MGUzOFx1MGUxOVx1MGUzMlx1MGUyMlx1MGUxOV9cdTBlMDFcdTBl''@;'; put 'put ''MjNcdTBlMDFcdTBlMGVcdTBlMzJcdTBlMDRcdTBlMjFfXHUwZTJhXHUwZTM0XHUwZTA3XHUwZTJiXHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUwMVx1MGUzMVx1MGUxOVx1MGUyMlx1MGUzMlx1MGUyMlx1MGUxOV9cdTBlMTVcdTBlMzhcdTBlMjVcdTBlMzJcdTBlMDRcdTBlMjFfXHUwZTFlXHUw''@;'; put 'put ''ZTI0XHUwZTI4XHUwZTA4XHUwZTM0XHUwZTAxXHUwZTMyXHUwZTIyXHUwZTE5X1x1MGUxOFx1MGUzMVx1MGUxOVx1MGUyN1x1MGUzMlx1MGUwNFx1MGUyMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwZTIxLlx1MGUwNC5fXHUwZTAxLlx1MGUxZS5fXHUwZTIxXHUwZTM1Llx1MGUwNC5f''@;'; put 'put ''XHUwZTQwXHUwZTIxLlx1MGUyMi5fXHUwZTFlLlx1MGUwNC5fXHUwZTIxXHUwZTM0Llx1MGUyMi5fXHUwZTAxLlx1MGUwNC5fXHUwZTJhLlx1MGUwNC5fXHUwZTAxLlx1MGUyMi5fXHUwZTE1Llx1MGUwNC5fXHUwZTFlLlx1MGUyMi5fXHUwZTE4Llx1MGUwNC4iLnNwbGl0KCJfIiksbW9udGhz''@;'; put 'put ''UGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwZTJkXHUwZTMyXHUwZTE3XHUwZTM0XHUwZTE1XHUwZTIyXHUwZTRjX1x1MGUwOFx1MGUzMVx1MGUxOVx1MGUxN1x1MGUyM1x1MGU0Y19cdTBlMmRcdTBlMzFcdTBlMDdcdTBlMDRcdTBlMzJcdTBlMjNfXHUwZTFlXHUwZTM4XHUwZTE4X1x1MGUx''@;'; put 'put ''ZVx1MGUyNFx1MGUyYlx1MGUzMVx1MGUyYVx1MGUxYVx1MGUxNFx1MGUzNV9cdTBlMjhcdTBlMzhcdTBlMDFcdTBlMjNcdTBlNGNfXHUwZTQwXHUwZTJhXHUwZTMyXHUwZTIzXHUwZTRjIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGUyZFx1MGUzMlx1MGUxN1x1MGUzNFx1MGUxNVx1''@;'; put 'put ''MGUyMlx1MGU0Y19cdTBlMDhcdTBlMzFcdTBlMTlcdTBlMTdcdTBlMjNcdTBlNGNfXHUwZTJkXHUwZTMxXHUwZTA3XHUwZTA0XHUwZTMyXHUwZTIzX1x1MGUxZVx1MGUzOFx1MGUxOF9cdTBlMWVcdTBlMjRcdTBlMmJcdTBlMzFcdTBlMmFfXHUwZTI4XHUwZTM4XHUwZTAxXHUwZTIzXHUwZTRj''@;'; put 'put ''X1x1MGU0MFx1MGUyYVx1MGUzMlx1MGUyM1x1MGU0YyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwZTJkXHUwZTMyLl9cdTBlMDguX1x1MGUyZC5fXHUwZTFlLl9cdTBlMWVcdTBlMjQuX1x1MGUyOC5fXHUwZTJhLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0Rh''@;'; put 'put ''dGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzIgSDptbSIsTExMTDoiXHUwZTI3XHUwZTMxXHUwZTE5ZGRkZFx1MGUxN1x1MGUzNVx1MGU0OCBEIE1N''@;'; put 'put ''TU0gWVlZWSBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzIgSDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MGUwMVx1MGU0OFx1MGUyZFx1MGUxOVx1MGU0MFx1MGUxN1x1MGUzNVx1MGU0OFx1MGUyMlx1MGUwN3xcdTBlMmJcdTBlMjVcdTBlMzFcdTBlMDdcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhc''@;'; put 'put ''dTBlMjJcdTBlMDcvLGlzUE06ZnVuY3Rpb24ocyl7cmV0dXJuIlx1MGUyYlx1MGUyNVx1MGUzMVx1MGUwN1x1MGU0MFx1MGUxN1x1MGUzNVx1MGU0OFx1MGUyMlx1MGUwNyI9PT1zfSxtZXJpZGllbTpmdW5jdGlvbihzLEEsdil7cmV0dXJuIHM8MTI/Ilx1MGUwMVx1MGU0OFx1MGUyZFx1MGUx''@;'; put 'put ''OVx1MGU0MFx1MGUxN1x1MGUzNVx1MGU0OFx1MGUyMlx1MGUwNyI6Ilx1MGUyYlx1MGUyNVx1MGUzMVx1MGUwN1x1MGU0MFx1MGUxN1x1MGUzNVx1MGU0OFx1MGUyMlx1MGUwNyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwZTI3XHUwZTMxXHUwZTE5XHUwZTE5XHUwZTM1XHUwZTQ5IFx1MGU0''@;'; put 'put ''MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLG5leHREYXk6IltcdTBlMWVcdTBlMjNcdTBlMzhcdTBlNDhcdTBlMDdcdTBlMTlcdTBlMzVcdTBlNDkgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyXSBMVCIsbmV4dFdlZWs6ImRkZGRbXHUwZTJiXHUwZTE5XHUwZTQ5XHUwZTMyIFx1MGU0MFx1MGUy''@;'; put 'put ''N1x1MGUyNVx1MGUzMl0gTFQiLGxhc3REYXk6IltcdTBlNDBcdTBlMjFcdTBlMzdcdTBlNDhcdTBlMmRcdTBlMjdcdTBlMzJcdTBlMTlcdTBlMTlcdTBlMzVcdTBlNDkgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyXSBMVCIsbGFzdFdlZWs6IltcdTBlMjdcdTBlMzFcdTBlMTldZGRkZFtcdTBl''@;'; put 'put ''MTdcdTBlMzVcdTBlNDhcdTBlNDFcdTBlMjVcdTBlNDlcdTBlMjcgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwZTJkXHUwZTM1XHUwZTAxICVzIixwYXN0OiIlc1x1MGUxN1x1MGUzNVx1MGU0OFx1MGU0MVx1MGUy''@;'; put 'put ''NVx1MGU0OVx1MGUyNyIsczoiXHUwZTQ0XHUwZTIxXHUwZTQ4XHUwZTAxXHUwZTM1XHUwZTQ4XHUwZTI3XHUwZTM0XHUwZTE5XHUwZTMyXHUwZTE3XHUwZTM1IixzczoiJWQgXHUwZTI3XHUwZTM0XHUwZTE5XHUwZTMyXHUwZTE3XHUwZTM1IixtOiIxIFx1MGUxOVx1MGUzMlx1MGUxN1x1MGUz''@;'; put 'put ''NSIsbW06IiVkIFx1MGUxOVx1MGUzMlx1MGUxN1x1MGUzNSIsaDoiMSBcdTBlMGFcdTBlMzFcdTBlNDhcdTBlMjdcdTBlNDJcdTBlMjFcdTBlMDciLGhoOiIlZCBcdTBlMGFcdTBlMzFcdTBlNDhcdTBlMjdcdTBlNDJcdTBlMjFcdTBlMDciLGQ6IjEgXHUwZTI3XHUwZTMxXHUwZTE5IixkZDoi''@;'; put 'put ''JWQgXHUwZTI3XHUwZTMxXHUwZTE5Iix3OiIxIFx1MGUyYVx1MGUzMVx1MGUxYlx1MGUxNFx1MGUzMlx1MGUyYlx1MGU0YyIsd3c6IiVkIFx1MGUyYVx1MGUzMVx1MGUxYlx1MGUxNFx1MGUzMlx1MGUyYlx1MGU0YyIsTToiMSBcdTBlNDBcdTBlMTRcdTBlMzdcdTBlMmRcdTBlMTkiLE1NOiIl''@;'; put 'put ''ZCBcdTBlNDBcdTBlMTRcdTBlMzdcdTBlMmRcdTBlMTkiLHk6IjEgXHUwZTFiXHUwZTM1Iix5eToiJWQgXHUwZTFiXHUwZTM1In19KX0oaCg5NzU4NikpfSwzNzQ2KGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz17MToiJ2luamkiLDU6IidpbmppIiw4OiInaW5qaSIs''@;'; put 'put ''NzA6IidpbmppIiw4MDoiJ2luamkiLDI6IiduamkiLDc6IiduamkiLDIwOiInbmppIiw1MDoiJ25qaSIsMzoiJ1x4ZmNuamkiLDQ6IidceGZjbmppIiwxMDA6IidceGZjbmppIiw2OiInbmp5Iiw5OiIndW5qeSIsMTA6Iid1bmp5IiwzMDoiJ3VuankiLDYwOiIneW5qeSIsOTA6Iid5bmp5In07''@;'; put 'put ''eS5kZWZpbmVMb2NhbGUoInRrIix7bW9udGhzOiJceGRkYW53YXJfRmV3cmFsX01hcnRfQXByZWxfTWFceGZkX0lceGZkdW5fSVx4ZmR1bF9Bd2d1c3RfU2VudFx4ZmRhYnJfT2t0XHhmZGFicl9Ob1x4ZmRhYnJfRGVrYWJyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJceGRkYW5fRmV3X01h''@;'; put 'put ''cl9BcHJfTWFceGZkX0lceGZkbl9JXHhmZGxfQXdnX1Nlbl9Pa3RfTm9ceGZkX0RlayIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHhkZGVrXHUwMTVmZW5iZV9EdVx1MDE1ZmVuYmVfU2lcdTAxNWZlbmJlX1x4Yzdhclx1MDE1ZmVuYmVfUGVuXHUwMTVmZW5iZV9Bbm5hX1x1MDE1ZWVuYmUiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHhkZGVrX0R1XHUwMTVmX1NpXHUwMTVmX1x4Yzdhcl9QZW5fQW5uX1x1MDE1ZWVuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJceGRka19EXHUwMTVmX1NcdTAxNWZfXHhjN3JfUG5fQW5fXHUwMTVlbiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1h''@;'; put 'put ''dDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltidWdceGZjbiBzYWdhdF0gTFQiLG5leHREYXk6''@;'; put 'put ''IltlcnRpciBzYWdhdF0gTFQiLG5leHRXZWVrOiJbaW5kaWtpXSBkZGRkIFtzYWdhdF0gTFQiLGxhc3REYXk6IltkXHhmY1x4ZmRuXSBMVCIsbGFzdFdlZWs6IltnZVx4ZTdlbl0gZGRkZCBbc2FnYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBzb1x1MDE0''@;'; put 'put ''OCIscGFzdDoiJXMgXHhmNlx1MDE0OCIsczoiYmlyblx4ZTRceGU3ZSBzZWt1bnQiLG06ImJpciBtaW51dCIsbW06IiVkIG1pbnV0IixoOiJiaXIgc2FnYXQiLGhoOiIlZCBzYWdhdCIsZDoiYmlyIGdceGZjbiIsZGQ6IiVkIGdceGZjbiIsTToiYmlyIGFceGZkIixNTToiJWQgYVx4ZmQiLHk6''@;'; put 'put ''ImJpciBceGZkeWwiLHl5OiIlZCBceGZkeWwifSxvcmRpbmFsOmZ1bmN0aW9uKEEsdil7c3dpdGNoKHYpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRvIjpjYXNlIkREIjpyZXR1cm4gQTtkZWZhdWx0OmlmKDA9PT1BKXJldHVybiBBKyIndW5qeSI7dmFyIEM9QSUxMDtyZXR1cm4gQSsoY1tDXXx8''@;'; put 'put ''Y1tBJTEwMC1DXXx8Y1tBPj0xMDA/MTAwOm51bGxdKX19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShoKDk3NTg2KSl9LDQ5MDQwKGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt5LmRlZmluZUxvY2FsZSgidGwtcGgiLHttb250aHM6IkVuZXJvX1BlYnJlcm9fTWFyc29fQWJyaWxf''@;'; put 'put ''TWF5b19IdW55b19IdWx5b19BZ29zdG9fU2V0eWVtYnJlX09rdHVicmVfTm9ieWVtYnJlX0Rpc3llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiRW5lX1BlYl9NYXJfQWJyX01heV9IdW5fSHVsX0Fnb19TZXRfT2t0X05vYl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ikxpbmdnb19M''@;'; put 'put ''dW5lc19NYXJ0ZXNfTWl5ZXJrdWxlc19IdXdlYmVzX0JpeWVybmVzX1NhYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJMaW5fTHVuX01hcl9NaXlfSHV3X0JpeV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkxpX0x1X01hX01pX0h1X0JpX1NhYiIuc3BsaXQoIl8iKSxsb25n''@;'; put 'put ''RGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJNTS9EL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBNTU1NIERELCBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IkxUIFtuZ2F5b25nIGFyYXdd''@;'; put 'put ''IixuZXh0RGF5OiJbQnVrYXMgbmddIExUIixuZXh0V2VlazoiTFQgW3NhIHN1c3Vub2QgbmFdIGRkZGQiLGxhc3REYXk6IkxUIFtrYWhhcG9uXSIsbGFzdFdlZWs6IkxUIFtub29uZyBuYWthcmFhbmddIGRkZGQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InNhIGxvb2Ig''@;'; put 'put ''bmcgJXMiLHBhc3Q6IiVzIGFuZyBuYWthbGlwYXMiLHM6ImlsYW5nIHNlZ3VuZG8iLHNzOiIlZCBzZWd1bmRvIixtOiJpc2FuZyBtaW51dG8iLG1tOiIlZCBtaW51dG8iLGg6ImlzYW5nIG9yYXMiLGhoOiIlZCBvcmFzIixkOiJpc2FuZyBhcmF3IixkZDoiJWQgYXJhdyIsTToiaXNhbmcgYnV3''@;'; put 'put ''YW4iLE1NOiIlZCBidXdhbiIseToiaXNhbmcgdGFvbiIseXk6IiVkIHRhb24ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxvcmRpbmFsOmZ1bmN0aW9uKHMpe3JldHVybiBzfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oaCg5NzU4NikpfSwxNzE4NyhmZSxqLGgpeyFmdW5jdGlv''@;'; put 'put ''bih5KXsidXNlIHN0cmljdCI7dmFyIGM9InBhZ2hfd2FcdTIwMTlfY2hhXHUyMDE5X3dlal9sb1NfdmFnaF9qYXZfU29jaF9jaG9yZ2hfSHV0Ii5zcGxpdCgiXyIpO2Z1bmN0aW9uIHYoUyxMLFIseCl7dmFyIFU9ZnVuY3Rpb24gQyhTKXt2YXIgTD1NYXRoLmZsb29yKFMlMWUzLzEwMCksUj1N''@;'; put 'put ''YXRoLmZsb29yKFMlMTAwLzEwKSx4PVMlMTAsVT0iIjtyZXR1cm4gTD4wJiYoVSs9Y1tMXSsidmF0bGgiKSxSPjAmJihVKz0oIiIhPT1VPyIgIjoiIikrY1tSXSsibWFIIikseD4wJiYoVSs9KCIiIT09VT8iICI6IiIpK2NbeF0pLCIiPT09VT8icGFnaCI6VX0oUyk7c3dpdGNoKFIpe2Nhc2Ui''@;'; put 'put ''c3MiOnJldHVybiBVKyIgbHVwIjtjYXNlIm1tIjpyZXR1cm4gVSsiIHR1cCI7Y2FzZSJoaCI6cmV0dXJuIFUrIiByZXAiO2Nhc2UiZGQiOnJldHVybiBVKyIgamFqIjtjYXNlIk1NIjpyZXR1cm4gVSsiIGphciI7Y2FzZSJ5eSI6cmV0dXJuIFUrIiBESVMifX15LmRlZmluZUxvY2FsZSgidGxo''@;'; put 'put ''Iix7bW9udGhzOiJ0ZXJhXHUyMDE5IGphciB3YVx1MjAxOV90ZXJhXHUyMDE5IGphciBjaGFcdTIwMTlfdGVyYVx1MjAxOSBqYXIgd2VqX3RlcmFcdTIwMTkgamFyIGxvU190ZXJhXHUyMDE5IGphciB2YWdoX3RlcmFcdTIwMTkgamFyIGphdl90ZXJhXHUyMDE5IGphciBTb2NoX3RlcmFcdTIw''@;'; put 'put ''MTkgamFyIGNob3JnaF90ZXJhXHUyMDE5IGphciBIdXRfdGVyYVx1MjAxOSBqYXIgd2FcdTIwMTltYUhfdGVyYVx1MjAxOSBqYXIgd2FcdTIwMTltYUggd2FcdTIwMTlfdGVyYVx1MjAxOSBqYXIgd2FcdTIwMTltYUggY2hhXHUyMDE5Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYXIgd2Fc''@;'; put 'put ''dTIwMTlfamFyIGNoYVx1MjAxOV9qYXIgd2VqX2phciBsb1NfamFyIHZhZ2hfamFyIGphdl9qYXIgU29jaF9qYXIgY2hvcmdoX2phciBIdXRfamFyIHdhXHUyMDE5bWFIX2phciB3YVx1MjAxOW1hSCB3YVx1MjAxOV9qYXIgd2FcdTIwMTltYUggY2hhXHUyMDE5Ii5zcGxpdCgiXyIpLG1vbnRo''@;'; put 'put ''c1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Imxvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Imxvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFq''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZ''@;'; put 'put ''WVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltEYUhqYWpdIExUIixuZXh0RGF5OiJbd2FcdTIwMTlsZVNdIExUIixuZXh0V2VlazoiTExMIixsYXN0RGF5OiJbd2FcdTIwMTlIdVx1MjAxOV0gTFQi''@;'; put 'put ''LGxhc3RXZWVrOiJMTEwiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24gcyhTKXt2YXIgTD1TO3JldHVybi0xIT09Uy5pbmRleE9mKCJqYWoiKT9MLnNsaWNlKDAsLTMpKyJsZVMiOi0xIT09Uy5pbmRleE9mKCJqYXIiKT9MLnNsaWNlKDAsLTMpKyJ3YVEiOi0x''@;'; put 'put ''IT09Uy5pbmRleE9mKCJESVMiKT9MLnNsaWNlKDAsLTMpKyJuZW0iOkwrIiBwSXEifSxwYXN0OmZ1bmN0aW9uIEEoUyl7dmFyIEw9UztyZXR1cm4tMSE9PVMuaW5kZXhPZigiamFqIik/TC5zbGljZSgwLC0zKSsiSHVcdTIwMTkiOi0xIT09Uy5pbmRleE9mKCJqYXIiKT9MLnNsaWNlKDAsLTMp''@;'; put 'put ''KyJ3ZW4iOi0xIT09Uy5pbmRleE9mKCJESVMiKT9MLnNsaWNlKDAsLTMpKyJiZW4iOkwrIiByZXQifSxzOiJwdVMgbHVwIixzczp2LG06IndhXHUyMDE5IHR1cCIsbW06dixoOiJ3YVx1MjAxOSByZXAiLGhoOnYsZDoid2FcdTIwMTkgamFqIixkZDp2LE06IndhXHUyMDE5IGphciIsTU06dix5''@;'; put 'put ''OiJ3YVx1MjAxOSBESVMiLHl5OnZ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oaCg5NzU4NikpfSw2MDE1MyhmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7dmFyIGM9ezE6IidpbmNpIiw1OiIn''@;'; put 'put ''aW5jaSIsODoiJ2luY2kiLDcwOiInaW5jaSIsODA6IidpbmNpIiwyOiInbmNpIiw3OiInbmNpIiwyMDoiJ25jaSIsNTA6IiduY2kiLDM6IidceGZjbmNceGZjIiw0OiInXHhmY25jXHhmYyIsMTAwOiInXHhmY25jXHhmYyIsNjoiJ25jXHUwMTMxIiw5OiIndW5jdSIsMTA6Iid1bmN1IiwzMDoi''@;'; put 'put ''J3VuY3UiLDYwOiInXHUwMTMxbmNcdTAxMzEiLDkwOiInXHUwMTMxbmNcdTAxMzEifTt5LmRlZmluZUxvY2FsZSgidHIiLHttb250aHM6Ik9jYWtfXHUwMTVldWJhdF9NYXJ0X05pc2FuX01heVx1MDEzMXNfSGF6aXJhbl9UZW1tdXpfQVx1MDExZnVzdG9zX0V5bFx4ZmNsX0VraW1fS2FzXHUw''@;'; put 'put ''MTMxbV9BcmFsXHUwMTMxayIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiT2NhX1x1MDE1ZXViX01hcl9OaXNfTWF5X0hhel9UZW1fQVx1MDExZnVfRXlsX0VraV9LYXNfQXJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJQYXphcl9QYXphcnRlc2lfU2FsXHUwMTMxX1x4Yzdhclx1MDE1ZmFtYmFf''@;'; put 'put ''UGVyXHUwMTVmZW1iZV9DdW1hX0N1bWFydGVzaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJQYXpfUHp0X1NhbF9ceGM3YXJfUGVyX0N1bV9DbXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlB6X1B0X1NhX1x4YzdhX1BlX0N1X0N0Ii5zcGxpdCgiXyIpLG1lcmlkaWVtOmZ1bmN0aW9u''@;'; put 'put ''KEEsdixDKXtyZXR1cm4gQTwxMj9DPyJceGY2XHhmNiI6Ilx4ZDZceGQ2IjpDPyJceGY2cyI6Ilx4ZDZTIn0sbWVyaWRpZW1QYXJzZTovXHhmNlx4ZjZ8XHhkNlx4ZDZ8XHhmNnN8XHhkNlMvLGlzUE06ZnVuY3Rpb24oQSl7cmV0dXJuIlx4ZjZzIj09PUF8fCJceGQ2UyI9PT1BfSxsb25nRGF0''@;'; put 'put ''ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltidWdceGZjbiBzYWF0XSBMVCIsbmV4''@;'; put 'put ''dERheToiW3lhclx1MDEzMW4gc2FhdF0gTFQiLG5leHRXZWVrOiJbZ2VsZWNla10gZGRkZCBbc2FhdF0gTFQiLGxhc3REYXk6IltkXHhmY25dIExUIixsYXN0V2VlazoiW2dlXHhlN2VuXSBkZGRkIFtzYWF0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgc29u''@;'; put 'put ''cmEiLHBhc3Q6IiVzIFx4ZjZuY2UiLHM6ImJpcmthXHhlNyBzYW5peWUiLHNzOiIlZCBzYW5peWUiLG06ImJpciBkYWtpa2EiLG1tOiIlZCBkYWtpa2EiLGg6ImJpciBzYWF0IixoaDoiJWQgc2FhdCIsZDoiYmlyIGdceGZjbiIsZGQ6IiVkIGdceGZjbiIsdzoiYmlyIGhhZnRhIix3dzoiJWQg''@;'; put 'put ''aGFmdGEiLE06ImJpciBheSIsTU06IiVkIGF5Iix5OiJiaXIgeVx1MDEzMWwiLHl5OiIlZCB5XHUwMTMxbCJ9LG9yZGluYWw6ZnVuY3Rpb24oQSx2KXtzd2l0Y2godil7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiRG8iOmNhc2UiREQiOnJldHVybiBBO2RlZmF1bHQ6aWYoMD09PUEpcmV0dXJuIEEr''@;'; put 'put ''IidcdTAxMzFuY1x1MDEzMSI7dmFyIEM9QSUxMDtyZXR1cm4gQSsoY1tDXXx8Y1tBJTEwMC1DXXx8Y1tBPj0xMDA/MTAwOm51bGxdKX19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShoKDk3NTg2KSl9LDg4NTIxKGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBzKEEs''@;'; put 'put ''dixDLHcpe3ZhciBTPXtzOlsidmllbnNhcyBzZWN1bmRzIiwiJ2llbnNhcyBzZWN1bmRzIl0sc3M6W0ErIiBzZWN1bmRzIixBKyIgc2VjdW5kcyJdLG06WyInbiBtXHhlZHV0IiwiJ2llbnMgbVx4ZWR1dCJdLG1tOltBKyIgbVx4ZWR1dHMiLEErIiBtXHhlZHV0cyJdLGg6WyInbiBceGZlb3Jh''@;'; put 'put ''IiwiJ2llbnNhIFx4ZmVvcmEiXSxoaDpbQSsiIFx4ZmVvcmFzIixBKyIgXHhmZW9yYXMiXSxkOlsiJ24geml1YSIsIidpZW5zYSB6aXVhIl0sZGQ6W0ErIiB6aXVhcyIsQSsiIHppdWFzIl0sTTpbIiduIG1lcyIsIidpZW5zIG1lcyJdLE1NOltBKyIgbWVzZW4iLEErIiBtZXNlbiJdLHk6WyIn''@;'; put 'put ''biBhciIsIidpZW5zIGFyIl0seXk6W0ErIiBhcnMiLEErIiBhcnMiXX07cmV0dXJuIHd8fHY/U1tDXVswXTpTW0NdWzFdfXkuZGVmaW5lTG9jYWxlKCJ0emwiLHttb250aHM6IkphbnVhcl9GZXZyYWdsaF9NYXJceGU3X0F2clx4ZWZ1X01haV9HXHhmY25fSnVsaWFfR3VzY2h0X1NldGVtdmFy''@;'; put 'put ''X0xpc3RvcFx4ZTR0c19Ob2VtdmFyX1plY2VtdmFyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmV2X01hcl9BdnJfTWFpX0dceGZjbl9KdWxfR3VzX1NldF9MaXNfTm9lX1plYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU1x4ZmFsYWRpX0xceGZhbmVceGU3aV9NYWl0emlfTVx4ZTFy''@;'; put 'put ''Y3VyaV9YaFx4ZmFhZGlfVmlceGU5bmVyXHhlN2lfU1x4ZTF0dXJpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNceGZhbF9MXHhmYW5fTWFpX01ceGUxcl9YaFx4ZmFfVmlceGU5X1NceGUxdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU1x4ZmFfTFx4ZmFfTWFfTVx4ZTFfWGhfVmlf''@;'; put 'put ''U1x4ZTEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gW2RhbGxhc10gWVlZWSIsTExMOiJELiBNTU1NIFtkYWxsYXNdIFlZWVkgSEgubW0iLExMTEw6ImRkZGQsIFtsaV0gRC4gTU1NTSBbZGFs''@;'; put 'put ''bGFzXSBZWVlZIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovZFwnb3xkXCdhL2ksaXNQTTpmdW5jdGlvbihBKXtyZXR1cm4iZCdvIj09PUEudG9Mb3dlckNhc2UoKX0sbWVyaWRpZW06ZnVuY3Rpb24oQSx2LEMpe3JldHVybiBBPjExP0M/ImQnbyI6IkQnTyI6Qz8iZCdhIjoiRCdBIn0sY2FsZW5k''@;'; put 'put ''YXI6e3NhbWVEYXk6IltveGhpIFx4ZTBdIExUIixuZXh0RGF5OiJbZGVtXHhlMCBceGUwXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBdIExUIixsYXN0RGF5OiJbaWVpcmkgXHhlMF0gTFQiLGxhc3RXZWVrOiJbc1x4ZmNyIGVsXSBkZGRkIFtsYXN0ZXUgXHhlMF0gTFQiLHNhbWVFbHNlOiJM''@;'; put 'put ''In0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9zcHJlaSAlcyIscGFzdDoiamElcyIscyxzczpzLG06cyxtbTpzLGg6cyxoaDpzLGQ6cyxkZDpzLE06cyxNTTpzLHk6cyx5eTpzfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95''@;'; put 'put ''OjR9fSl9KGgoOTc1ODYpKX0sMjIyMzQoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJ0em0tbGF0biIse21vbnRoczoiaW5uYXlyX2JyXHUwMmU0YXlyXHUwMmU0X21hclx1MDJlNHNcdTAyZTRfaWJyaXJfbWF5eXdfeXdueXdfeXdseXd6X1x1MDI2''@;'; put 'put ''M3dcdTAxNjF0X1x1MDE2MXd0YW5iaXJfa3RcdTAyZTR3YnJcdTAyZTRfbnd3YW5iaXJfZHdqbmJpciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiaW5uYXlyX2JyXHUwMmU0YXlyXHUwMmU0X21hclx1MDJlNHNcdTAyZTRfaWJyaXJfbWF5eXdfeXdueXdfeXdseXd6X1x1MDI2M3dcdTAxNjF0''@;'; put 'put ''X1x1MDE2MXd0YW5iaXJfa3RcdTAyZTR3YnJcdTAyZTRfbnd3YW5iaXJfZHdqbmJpciIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiYXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaVx1MWUwZHlhcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJhc2FtYXNfYXluYXNf''@;'; put 'put ''YXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNpXHUxZTBkeWFzIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNpXHUxZTBkeWFzIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6''@;'; put 'put ''bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYXNka2ggZ10gTFQiLG5leHREYXk6Ilthc2thIGddIExUIixuZXh0V2VlazoiZGRkZCBb''@;'; put 'put ''Z10gTFQiLGxhc3REYXk6Ilthc3NhbnQgZ10gTFQiLGxhc3RXZWVrOiJkZGRkIFtnXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFka2ggcyB5YW4gJXMiLHBhc3Q6InlhbiAlcyIsczoiaW1payIsc3M6IiVkIGltaWsiLG06Im1pbnVcdTFlMGQiLG1tOiIlZCBt''@;'; put 'put ''aW51XHUxZTBkIixoOiJzYVx1MDI1YmEiLGhoOiIlZCB0YXNzYVx1MDI1YmluIixkOiJhc3MiLGRkOiIlZCBvc3NhbiIsTToiYXlvd3IiLE1NOiIlZCBpeXlpcm4iLHk6ImFzZ2FzIix5eToiJWQgaXNnYXNuIn0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShoKDk3NTg2KSl9LDE4MDEwKGZlLGos''@;'; put 'put ''aCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt5LmRlZmluZUxvY2FsZSgidHptIix7bW9udGhzOiJcdTJkNDlcdTJkNGZcdTJkNGZcdTJkMzBcdTJkNjJcdTJkNTRfXHUyZDMxXHUyZDU1XHUyZDMwXHUyZDYyXHUyZDU1X1x1MmQ0ZVx1MmQzMFx1MmQ1NVx1MmQ1YV9cdTJkNDlcdTJkMzFc''@;'; put 'put ''dTJkNTRcdTJkNDlcdTJkNTRfXHUyZDRlXHUyZDMwXHUyZDYyXHUyZDYyXHUyZDUzX1x1MmQ2Mlx1MmQ1M1x1MmQ0Zlx1MmQ2Mlx1MmQ1M19cdTJkNjJcdTJkNTNcdTJkNGRcdTJkNjJcdTJkNTNcdTJkNjNfXHUyZDU2XHUyZDUzXHUyZDViXHUyZDVjX1x1MmQ1Ylx1MmQ1M1x1MmQ1Y1x1MmQz''@;'; put 'put ''MFx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NF9cdTJkM2RcdTJkNWZcdTJkNTNcdTJkMzFcdTJkNTVfXHUyZDRmXHUyZDUzXHUyZDYxXHUyZDMwXHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0X1x1MmQzN1x1MmQ1M1x1MmQ0YVx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NCIuc3BsaXQoIl8iKSxtb250''@;'; put 'put ''aHNTaG9ydDoiXHUyZDQ5XHUyZDRmXHUyZDRmXHUyZDMwXHUyZDYyXHUyZDU0X1x1MmQzMVx1MmQ1NVx1MmQzMFx1MmQ2Mlx1MmQ1NV9cdTJkNGVcdTJkMzBcdTJkNTVcdTJkNWFfXHUyZDQ5XHUyZDMxXHUyZDU0XHUyZDQ5XHUyZDU0X1x1MmQ0ZVx1MmQzMFx1MmQ2Mlx1MmQ2Mlx1MmQ1M19c''@;'; put 'put ''dTJkNjJcdTJkNTNcdTJkNGZcdTJkNjJcdTJkNTNfXHUyZDYyXHUyZDUzXHUyZDRkXHUyZDYyXHUyZDUzXHUyZDYzX1x1MmQ1Nlx1MmQ1M1x1MmQ1Ylx1MmQ1Y19cdTJkNWJcdTJkNTNcdTJkNWNcdTJkMzBcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTRfXHUyZDNkXHUyZDVmXHUyZDUzXHUyZDMx''@;'; put 'put ''XHUyZDU1X1x1MmQ0Zlx1MmQ1M1x1MmQ2MVx1MmQzMFx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NF9cdTJkMzdcdTJkNTNcdTJkNGFcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTQiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MmQzMFx1MmQ1OVx1MmQzMFx1MmQ0ZVx1MmQzMFx1MmQ1OV9cdTJkMzBc''@;'; put 'put ''dTJkNjJcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQzZFx1MmQ1NFx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNjFcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRlXHUyZDYxXHUyZDMwXHUyZDU5''@;'; put 'put ''X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQzOVx1MmQ2Mlx1MmQzMFx1MmQ1OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTJkMzBcdTJkNTlcdTJkMzBcdTJkNGVcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDYyXHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0Zlx1''@;'; put 'put ''MmQzMFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNTRcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNkXHUyZDYxXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0ZVx1MmQ2MVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkMzlcdTJkNjJcdTJkMzBcdTJkNTkiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNNaW46Ilx1MmQzMFx1MmQ1OVx1MmQzMFx1MmQ0ZVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNjJcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQzZFx1MmQ1NFx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJk''@;'; put 'put ''M2RcdTJkNjFcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRlXHUyZDYxXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQzOVx1MmQ2Mlx1MmQzMFx1MmQ1OSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJE''@;'; put 'put ''RC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MmQzMFx1MmQ1OVx1MmQzN1x1MmQ0NSBcdTJkMzRdIExUIixuZXh0RGF5OiJbXHUyZDMwXHUyZDU5XHUy''@;'; put 'put ''ZDNkXHUyZDMwIFx1MmQzNF0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTJkMzRdIExUIixsYXN0RGF5OiJbXHUyZDMwXHUyZDVhXHUyZDMwXHUyZDRmXHUyZDVjIFx1MmQzNF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTJkMzRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJl''@;'; put 'put ''OiJcdTJkMzdcdTJkMzBcdTJkMzdcdTJkNDUgXHUyZDU5IFx1MmQ2Mlx1MmQzMFx1MmQ0ZiAlcyIscGFzdDoiXHUyZDYyXHUyZDMwXHUyZDRmICVzIixzOiJcdTJkNDlcdTJkNGVcdTJkNDlcdTJkM2QiLHNzOiIlZCBcdTJkNDlcdTJkNGVcdTJkNDlcdTJkM2QiLG06Ilx1MmQ0ZVx1MmQ0OVx1''@;'; put 'put ''MmQ0Zlx1MmQ1M1x1MmQzYSIsbW06IiVkIFx1MmQ0ZVx1MmQ0OVx1MmQ0Zlx1MmQ1M1x1MmQzYSIsaDoiXHUyZDU5XHUyZDMwXHUyZDQ0XHUyZDMwIixoaDoiJWQgXHUyZDVjXHUyZDMwXHUyZDU5XHUyZDU5XHUyZDMwXHUyZDQ0XHUyZDQ5XHUyZDRmIixkOiJcdTJkMzBcdTJkNTlcdTJkNTki''@;'; put 'put ''LGRkOiIlZCBvXHUyZDU5XHUyZDU5XHUyZDMwXHUyZDRmIixNOiJcdTJkMzBcdTJkNjJvXHUyZDUzXHUyZDU0IixNTToiJWQgXHUyZDQ5XHUyZDYyXHUyZDYyXHUyZDQ5XHUyZDU0XHUyZDRmIix5OiJcdTJkMzBcdTJkNTlcdTJkMzNcdTJkMzBcdTJkNTkiLHl5OiIlZCBcdTJkNDlcdTJkNTlc''@;'; put 'put ''dTJkMzNcdTJkMzBcdTJkNTlcdTJkNGYifSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KGgoOTc1ODYpKX0sNjMzNDkoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJ1Zy1jbiIse21vbnRoczoiXHUwNjRhXHUwNjI3XHUwNjQ2XHUwNmNiXHUwNjI3XHUw''@;'; put 'put ''NjMxX1x1MDY0MVx1MDZkMFx1MDZjYlx1MDYzMVx1MDYyN1x1MDY0NF9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MmFfXHUwNjI2XHUwNjI3XHUwNjdlXHUwNjMxXHUwNmQwXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2MjZcdTA2NDlcdTA2NGFcdTA2YzdcdTA2NDZfXHUwNjI2XHUwNjQ5''@;'; put 'put ''XHUwNjRhXHUwNmM3XHUwNjQ0X1x1MDYyNlx1MDYyN1x1MDZjYlx1MDYzYVx1MDZjN1x1MDYzM1x1MDYyYV9cdTA2MzNcdTA2ZDBcdTA2NDZcdTA2MmFcdTA2ZDVcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjI2XHUwNmM2XHUwNjQzXHUwNjJhXHUwNmQ1XHUwNjI4XHUwNjQ5XHUwNjMxX1x1MDY0''@;'; put 'put ''Nlx1MDY0OFx1MDY0YVx1MDYyN1x1MDYyOFx1MDY0OVx1MDYzMV9cdTA2MmZcdTA2ZDBcdTA2NDNcdTA2MjdcdTA2MjhcdTA2NDlcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY0YVx1MDYyN1x1MDY0Nlx1MDZjYlx1MDYyN1x1MDYzMV9cdTA2NDFcdTA2ZDBcdTA2Y2JcdTA2''@;'; put 'put ''MzFcdTA2MjdcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjJhX1x1MDYyNlx1MDYyN1x1MDY3ZVx1MDYzMVx1MDZkMFx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjI2XHUwNjQ5XHUwNjRhXHUwNmM3XHUwNjQ2X1x1MDYyNlx1MDY0OVx1MDY0YVx1MDZjN1x1MDY0NF9cdTA2MjZc''@;'; put 'put ''dTA2MjdcdTA2Y2JcdTA2M2FcdTA2YzdcdTA2MzNcdTA2MmFfXHUwNjMzXHUwNmQwXHUwNjQ2XHUwNjJhXHUwNmQ1XHUwNjI4XHUwNjQ5XHUwNjMxX1x1MDYyNlx1MDZjNlx1MDY0M1x1MDYyYVx1MDZkNVx1MDYyOFx1MDY0OVx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NGFcdTA2MjdcdTA2Mjhc''@;'; put 'put ''dTA2NDlcdTA2MzFfXHUwNjJmXHUwNmQwXHUwNjQzXHUwNjI3XHUwNjI4XHUwNjQ5XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2NGFcdTA2ZDVcdTA2NDNcdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDVfXHUwNjJmXHUwNmM4XHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUw''@;'; put 'put ''NmQ1X1x1MDYzM1x1MDZkNVx1MDY0YVx1MDYzNFx1MDZkNVx1MDY0Nlx1MDYyOFx1MDZkNV9cdTA2ODZcdTA2MjdcdTA2MzFcdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDVfXHUwNjdlXHUwNmQ1XHUwNjRhXHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1X1x1MDYyY1x1MDZjOFx1''@;'; put 'put ''MDY0NVx1MDZkNV9cdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjRhXHUwNmQ1X1x1MDYyZlx1MDZjOF9cdTA2MzNcdTA2ZDVfXHUwNjg2XHUwNjI3X1x1MDY3ZVx1MDZkNV9cdTA2MmNcdTA2YzhfXHUwNjM0XHUwNmQ1Ii5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2NGFcdTA2ZDVfXHUwNjJmXHUwNmM4X1x1MDYzM1x1MDZkNV9cdTA2ODZcdTA2MjdfXHUwNjdlXHUwNmQ1X1x1MDYyY1x1MDZjOF9cdTA2MzRcdTA2ZDUiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIs''@;'; put 'put ''TDoiWVlZWS1NTS1ERCIsTEw6IllZWVktXHUwNjRhXHUwNjQ5XHUwNjQ0XHUwNjQ5TS1cdTA2MjZcdTA2MjdcdTA2NGFcdTA2NDZcdTA2NDlcdTA2YWRELVx1MDY0M1x1MDZjOFx1MDY0Nlx1MDY0OSIsTExMOiJZWVlZLVx1MDY0YVx1MDY0OVx1MDY0NFx1MDY0OU0tXHUwNjI2XHUwNjI3XHUw''@;'; put 'put ''NjRhXHUwNjQ2XHUwNjQ5XHUwNmFkRC1cdTA2NDNcdTA2YzhcdTA2NDZcdTA2NDlcdTA2MGMgSEg6bW0iLExMTEw6ImRkZGRcdTA2MGMgWVlZWS1cdTA2NGFcdTA2NDlcdTA2NDRcdTA2NDlNLVx1MDYyNlx1MDYyN1x1MDY0YVx1MDY0Nlx1MDY0OVx1MDZhZEQtXHUwNjQzXHUwNmM4XHUwNjQ2''@;'; put 'put ''XHUwNjQ5XHUwNjBjIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjRhXHUwNmQwXHUwNjMxXHUwNjQ5XHUwNjQ1IFx1MDY0M1x1MDZkMFx1MDY4Nlx1MDZkNXxcdTA2MzNcdTA2ZDVcdTA2YmVcdTA2ZDVcdTA2MzF8XHUwNjg2XHUwNmM4XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDYy''@;'; put 'put ''OFx1MDZjN1x1MDYzMVx1MDZjN1x1MDY0NnxcdTA2ODZcdTA2YzhcdTA2MzR8XHUwNjg2XHUwNmM4XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDY0M1x1MDZkMFx1MDY0YVx1MDY0OVx1MDY0NnxcdTA2NDNcdTA2ZDVcdTA2ODYvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihzLEEpe3JldHVy''@;'; put 'put ''biAxMj09PXMmJihzPTApLCJcdTA2NGFcdTA2ZDBcdTA2MzFcdTA2NDlcdTA2NDUgXHUwNjQzXHUwNmQwXHUwNjg2XHUwNmQ1Ij09PUF8fCJcdTA2MzNcdTA2ZDVcdTA2YmVcdTA2ZDVcdTA2MzEiPT09QXx8Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2MjhcdTA2''@;'; put 'put ''YzdcdTA2MzFcdTA2YzdcdTA2NDYiPT09QT9zOiJcdTA2ODZcdTA2YzhcdTA2MzRcdTA2MmFcdTA2NDlcdTA2NDYgXHUwNjQzXHUwNmQwXHUwNjRhXHUwNjQ5XHUwNjQ2Ij09PUF8fCJcdTA2NDNcdTA2ZDVcdTA2ODYiPT09QT9zKzEyOnM+PTExP3M6cysxMn0sbWVyaWRpZW06ZnVuY3Rpb24o''@;'; put 'put ''cyxBLHYpe3ZhciBDPTEwMCpzK0E7cmV0dXJuIEM8NjAwPyJcdTA2NGFcdTA2ZDBcdTA2MzFcdTA2NDlcdTA2NDUgXHUwNjQzXHUwNmQwXHUwNjg2XHUwNmQ1IjpDPDkwMD8iXHUwNjMzXHUwNmQ1XHUwNmJlXHUwNmQ1XHUwNjMxIjpDPDExMzA/Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1''@;'; put 'put ''MDY0OVx1MDY0NiBcdTA2MjhcdTA2YzdcdTA2MzFcdTA2YzdcdTA2NDYiOkM8MTIzMD8iXHUwNjg2XHUwNmM4XHUwNjM0IjpDPDE4MDA/Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2NDNcdTA2ZDBcdTA2NGFcdTA2NDlcdTA2NDYiOiJcdTA2NDNcdTA2ZDVcdTA2''@;'; put 'put ''ODYifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyOFx1MDZjOFx1MDZhZlx1MDZjOFx1MDY0NiBcdTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmFdIExUIixuZXh0RGF5OiJbXHUwNjI2XHUwNmQ1XHUwNjJhXHUwNmQ1IFx1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYV0gTFQiLG5l''@;'; put 'put ''eHRXZWVrOiJbXHUwNjQzXHUwNmQwXHUwNjQ0XHUwNmQ1XHUwNjMxXHUwNjQzXHUwNjQ5XSBkZGRkIFtcdTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmFdIExUIixsYXN0RGF5OiJbXHUwNjJhXHUwNmM2XHUwNjQ2XHUwNmM4XHUwNmFmXHUwNmM4XHUwNjQ2XSBMVCIsbGFzdFdlZWs6Iltc''@;'; put 'put ''dTA2MjZcdTA2MjdcdTA2NDRcdTA2MmZcdTA2NDlcdTA2NDZcdTA2NDJcdTA2NDldIGRkZGQgW1x1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDY0M1x1MDZkMFx1MDY0YVx1MDY0OVx1MDY0NiIscGFz''@;'; put 'put ''dDoiJXMgXHUwNjI4XHUwNmM3XHUwNjMxXHUwNmM3XHUwNjQ2IixzOiJcdTA2NDZcdTA2ZDVcdTA2ODZcdTA2ODZcdTA2ZDUgXHUwNjMzXHUwNmQwXHUwNjQzXHUwNjQ4XHUwNjQ2XHUwNjJhIixzczoiJWQgXHUwNjMzXHUwNmQwXHUwNjQzXHUwNjQ4XHUwNjQ2XHUwNjJhIixtOiJcdTA2Mjhc''@;'; put 'put ''dTA2NDlcdTA2MzEgXHUwNjQ1XHUwNjQ5XHUwNjQ2XHUwNmM3XHUwNjJhIixtbToiJWQgXHUwNjQ1XHUwNjQ5XHUwNjQ2XHUwNmM3XHUwNjJhIixoOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhIixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjI2XHUw''@;'; put 'put ''NmQ1XHUwNjJhIixkOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjQzXHUwNmM4XHUwNjQ2IixkZDoiJWQgXHUwNjQzXHUwNmM4XHUwNjQ2IixNOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjI2XHUwNjI3XHUwNjRhIixNTToiJWQgXHUwNjI2XHUwNjI3XHUwNjRhIix5OiJcdTA2MjhcdTA2NDlc''@;'; put 'put ''dTA2MzEgXHUwNjRhXHUwNjQ5XHUwNjQ0Iix5eToiJWQgXHUwNjRhXHUwNjQ5XHUwNjQ0In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSgtXHUwNjQzXHUwNmM4XHUwNjQ2XHUwNjQ5fC1cdTA2MjZcdTA2MjdcdTA2NGF8LVx1MDZiZVx1MDZkNVx1MDY3ZVx1MDYyYVx1MDZkNSkv''@;'; put 'put ''LG9yZGluYWw6ZnVuY3Rpb24ocyxBKXtzd2l0Y2goQSl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gcysiLVx1MDY0M1x1MDZjOFx1MDY0Nlx1MDY0OSI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBzKyItXHUwNmJlXHUwNmQ1XHUwNjdlXHUwNjJhXHUwNmQ1IjtkZWZhdWx0OnJl''@;'; put 'put ''dHVybiBzfX0scHJlcGFyc2U6ZnVuY3Rpb24ocyl7cmV0dXJuIHMucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihzKXtyZXR1cm4gcy5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oaCg5NzU4NikpfSw2ODQ3OShmZSxqLGgp''@;'; put 'put ''eyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcyh3LFMsTCl7cmV0dXJuIm0iPT09TD9TPyJcdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0MzAiOiJcdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0NDMiOiJoIj09PUw/Uz8iXHUw''@;'; put 'put ''NDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIjoiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQzIjp3KyIgIitmdW5jdGlvbiBjKHcsUyl7dmFyIEw9dy5zcGxpdCgiXyIpO3JldHVybiBTJTEwPT0xJiZTJTEwMCE9MTE/TFswXTpTJTEwPj0yJiZTJTEwPD00JiYo''@;'; put 'put ''UyUxMDA8MTB8fFMlMTAwPj0yMCk/TFsxXTpMWzJdfSh7c3M6Uz8iXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOF9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiOiJc''@;'; put 'put ''dTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NDNfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4X1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbW06Uz8iXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNk''@;'; put 'put ''XHUwNDMwX1x1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZFx1MDQzOF9cdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2QiOiJcdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0NDNfXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUw''@;'; put 'put ''NDNkXHUwNDM4X1x1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZCIsaGg6Uz8iXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwX1x1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzOF9cdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2QiOiJcdTA0''@;'; put 'put ''MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0NDNfXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM4X1x1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZCIsZGQ6Ilx1MDQzNFx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzRcdTA0M2RcdTA0NTZfXHUwNDM0XHUwNDNkXHUw''@;'; put 'put ''NDU2XHUwNDMyIixNTToiXHUwNDNjXHUwNDU2XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDRjX1x1MDQzY1x1MDQ1Nlx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQ1Nl9cdTA0M2NcdTA0NTZcdTA0NDFcdTA0NGZcdTA0NDZcdTA0NTZcdTA0MzIiLHl5OiJcdTA0NDBcdTA0NTZcdTA0M2FfXHUwNDQwXHUw''@;'; put 'put ''NDNlXHUwNDNhXHUwNDM4X1x1MDQ0MFx1MDQzZVx1MDQzYVx1MDQ1Nlx1MDQzMiJ9W0xdLCt3KX1mdW5jdGlvbiB2KHcpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB3KyJcdTA0M2UiKygxMT09PXRoaXMuaG91cnMoKT8iXHUwNDMxIjoiIikrIl0gTFQifX15LmRlZmluZUxvY2FsZSgidWsi''@;'; put 'put ''LHttb250aHM6e2Zvcm1hdDoiXHUwNDQxXHUwNDU2XHUwNDQ3XHUwNDNkXHUwNDRmX1x1MDQzYlx1MDQ0ZVx1MDQ0Mlx1MDQzZVx1MDQzM1x1MDQzZV9cdTA0MzFcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzdcdTA0M2RcdTA0NGZfXHUwNDNhXHUwNDMyXHUwNDU2XHUwNDQyXHUwNDNkXHUwNDRm''@;'; put 'put ''X1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzZFx1MDQ0Zl9cdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzJcdTA0M2RcdTA0NGZfXHUwNDNiXHUwNDM4XHUwNDNmXHUwNDNkXHUwNDRmX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzZlx1MDQzZFx1MDQ0Zl9cdTA0MzJcdTA0MzVcdTA0NDBcdTA0''@;'; put 'put ''MzVcdTA0NDFcdTA0M2RcdTA0NGZfXHUwNDM2XHUwNDNlXHUwNDMyXHUwNDQyXHUwNDNkXHUwNDRmX1x1MDQzYlx1MDQzOFx1MDQ0MVx1MDQ0Mlx1MDQzZVx1MDQzZlx1MDQzMFx1MDQzNFx1MDQzMF9cdTA0MzNcdTA0NDBcdTA0NDNcdTA0MzRcdTA0M2RcdTA0NGYiLnNwbGl0KCJfIiksc3Rh''@;'; put 'put ''bmRhbG9uZToiXHUwNDQxXHUwNDU2XHUwNDQ3XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1MDQ0ZVx1MDQ0Mlx1MDQzOFx1MDQzOV9cdTA0MzFcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNhXHUwNDMyXHUwNDU2XHUwNDQyXHUwNDM1XHUwNDNkXHUw''@;'; put 'put ''NDRjX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUwNDM4XHUwNDNmXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzZlx1MDQzNVx1MDQzZFx1''@;'; put 'put ''MDQ0Y19cdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzVcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDM2XHUwNDNlXHUwNDMyXHUwNDQyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1MDQzOFx1MDQ0MVx1MDQ0Mlx1MDQzZVx1MDQzZlx1MDQzMFx1MDQzNF9cdTA0MzNcdTA0NDBcdTA0NDNc''@;'; put 'put ''dTA0MzRcdTA0MzVcdTA0M2RcdTA0NGMiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJcdTA0NDFcdTA0NTZcdTA0NDdfXHUwNDNiXHUwNDRlXHUwNDQyX1x1MDQzMVx1MDQzNVx1MDQ0MF9cdTA0M2FcdTA0MzJcdTA0NTZcdTA0NDJfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyX1x1MDQ0N1x1''@;'; put 'put ''MDQzNVx1MDQ0MFx1MDQzMl9cdTA0M2JcdTA0MzhcdTA0M2ZfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDNmX1x1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0MzZcdTA0M2VcdTA0MzJcdTA0NDJfXHUwNDNiXHUwNDM4XHUwNDQxXHUwNDQyX1x1MDQzM1x1MDQ0MFx1MDQ0M1x1MDQzNCIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5czpmdW5jdGlvbiBBKHcsUyl7dmFyIEw9e25vbWluYXRpdmU6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQ0Zl9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0M2VcdTA0M2FfXHUwNDMyXHUwNDU2XHUwNDMyXHUwNDQyXHUw''@;'; put 'put ''NDNlXHUwNDQwXHUwNDNlXHUwNDNhX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNmXHUyMDE5XHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDRmX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1''@;'; put 'put ''MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSxhY2N1c2F0aXZlOiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0NGVfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDU2XHUwNDNiXHUwNDNlXHUwNDNhX1x1MDQzMlx1MDQ1Nlx1MDQzMlx1MDQ0Mlx1MDQzZVx1''@;'; put 'put ''MDQ0MFx1MDQzZVx1MDQzYV9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzRcdTA0NDNfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzZlx1MjAxOVx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQzOFx1MDQ0Nlx1MDQ0ZV9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2Vc''@;'; put 'put ''dTA0NDJcdTA0NDMiLnNwbGl0KCJfIiksZ2VuaXRpdmU6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQ1Nl9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0M2FcdTA0MzBfXHUwNDMyXHUwNDU2XHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUw''@;'; put 'put ''NDNhXHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzOF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzNcdTA0MzBfXHUwNDNmXHUyMDE5XHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDU2X1x1MDQ0MVx1MDQ0M1x1MDQzMVx1''@;'; put 'put ''MDQzZVx1MDQ0Mlx1MDQzOCIuc3BsaXQoIl8iKX07cmV0dXJuITA9PT13P0wubm9taW5hdGl2ZS5zbGljZSgxLDcpLmNvbmNhdChMLm5vbWluYXRpdmUuc2xpY2UoMCwxKSk6dz9MWy8oXFtbXHUwNDEyXHUwNDMyXHUwNDIzXHUwNDQzXVxdKSA/ZGRkZC8udGVzdChTKT8iYWNjdXNhdGl2ZSI6''@;'; put 'put ''L1xbPyg/Olx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQzZVx1MDQ1N3xcdTA0M2RcdTA0MzBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0M2ZcdTA0M2RcdTA0M2VcdTA0NTcpPyA/XF0gP2RkZGQvLnRlc3QoUyk/Imdlbml0aXZlIjoibm9taW5hdGl2ZSJdW3cuZGF5KCldOkwubm9t''@;'; put 'put ''aW5hdGl2ZX0sd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNk''@;'; put 'put ''X1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQyX1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDQ0MC4iLExMTDoi''@;'; put 'put ''RCBNTU1NIFlZWVkgXHUwNDQwLiwgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFx1MDQ0MC4sIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6digiW1x1MDQyMVx1MDQ0Y1x1MDQzZVx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzZFx1MDQ1NiAiKSxuZXh0RGF5OnYoIltcdTA0MTdcdTA0''@;'; put 'put ''MzBcdTA0MzJcdTA0NDJcdTA0NDBcdTA0MzAgIiksbGFzdERheTp2KCJbXHUwNDEyXHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwICIpLG5leHRXZWVrOnYoIltcdTA0MjNdIGRkZGQgWyIpLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA1''@;'; put 'put ''OmNhc2UgNjpyZXR1cm4gdigiW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQzZVx1MDQ1N10gZGRkZCBbIikuY2FsbCh0aGlzKTtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4gdigiW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQzZVx1MDQzM1x1MDQzZV0g''@;'; put 'put ''ZGRkZCBbIikuY2FsbCh0aGlzKX19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQzN1x1MDQzMCAlcyIscGFzdDoiJXMgXHUwNDQyXHUwNDNlXHUwNDNjXHUwNDQzIixzOiJcdTA0MzRcdTA0MzVcdTA0M2FcdTA0NTZcdTA0M2JcdTA0NGNcdTA0M2FcdTA0MzAgXHUw''@;'; put 'put ''NDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixzczpzLG06cyxtbTpzLGg6Ilx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0MyIsaGg6cyxkOiJcdTA0MzRcdTA0MzVcdTA0M2RcdTA0NGMiLGRkOnMsTToiXHUwNDNjXHUwNDU2XHUwNDQxXHUwNDRmXHUwNDQ2XHUw''@;'; put 'put ''NDRjIixNTTpzLHk6Ilx1MDQ0MFx1MDQ1Nlx1MDQzYSIseXk6c30sbWVyaWRpZW1QYXJzZTovXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDU2fFx1MDQ0MFx1MDQzMFx1MDQzZFx1MDQzYVx1MDQ0M3xcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMw''@;'; put 'put ''Lyxpc1BNOmZ1bmN0aW9uKHcpe3JldHVybi9eKFx1MDQzNFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzApJC8udGVzdCh3KX0sbWVyaWRpZW06ZnVuY3Rpb24odyxTLEwpe3JldHVybiB3PDQ/Ilx1MDQzZFx1MDQzZVx1MDQ0N1x1MDQ1NiI6dzwxMj8i''@;'; put 'put ''XHUwNDQwXHUwNDMwXHUwNDNkXHUwNDNhXHUwNDQzIjp3PDE3PyJcdTA0MzRcdTA0M2RcdTA0NGYiOiJcdTA0MzJcdTA0MzVcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzAifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0Mzl8XHUwNDMzXHUwNDNlKS8sb3JkaW5hbDpmdW5j''@;'; put 'put ''dGlvbih3LFMpe3N3aXRjaChTKXtjYXNlIk0iOmNhc2UiZCI6Y2FzZSJEREQiOmNhc2UidyI6Y2FzZSJXIjpyZXR1cm4gdysiLVx1MDQzOSI7Y2FzZSJEIjpyZXR1cm4gdysiLVx1MDQzM1x1MDQzZSI7ZGVmYXVsdDpyZXR1cm4gd319LHdlZWs6e2RvdzoxLGRveTo3fX0pfShoKDk3NTg2KSl9''@;'; put 'put ''LDQzMDI0KGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz1bIlx1MDYyY1x1MDY0Nlx1MDY0OFx1MDYzMVx1MDZjYyIsIlx1MDY0MVx1MDYzMVx1MDY0OFx1MDYzMVx1MDZjYyIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDY4NiIsIlx1MDYyN1x1MDY3ZVx1MDYzMVx1MDZj''@;'; put 'put ''Y1x1MDY0NCIsIlx1MDY0NVx1MDYyNlx1MDZjYyIsIlx1MDYyY1x1MDY0OFx1MDY0NiIsIlx1MDYyY1x1MDY0OFx1MDY0NFx1MDYyN1x1MDYyNlx1MDZjYyIsIlx1MDYyN1x1MDZhZlx1MDYzM1x1MDYyYSIsIlx1MDYzM1x1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyN1x1MDZhOVx1''@;'; put 'put ''MDYyYVx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyZlx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdLHM9WyJcdTA2MjdcdTA2MmFcdTA2NDhcdTA2MjdcdTA2MzEiLCJcdTA2N2VcdTA2Y2NcdTA2MzEiLCJcdTA2NDVcdTA2NDZcdTA2''@;'; put 'put ''YWZcdTA2NDQiLCJcdTA2MjhcdTA2MmZcdTA2YmUiLCJcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MzFcdTA2MjdcdTA2MmEiLCJcdTA2MmNcdTA2NDVcdTA2MzlcdTA2YzEiLCJcdTA2YzFcdTA2NDFcdTA2MmFcdTA2YzEiXTt5LmRlZmluZUxvY2FsZSgidXIiLHttb250aHM6Yyxtb250aHNTaG9y''@;'; put 'put ''dDpjLHdlZWtkYXlzOnMsd2Vla2RheXNTaG9ydDpzLHdlZWtkYXlzTWluOnMsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkXHUwNjBjIEQgTU1N''@;'; put 'put ''TSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1XHUwNjI4XHUwNjJkfFx1MDYzNFx1MDYyN1x1MDY0NS8saXNQTTpmdW5jdGlvbih2KXtyZXR1cm4iXHUwNjM0XHUwNjI3XHUwNjQ1Ij09PXZ9LG1lcmlkaWVtOmZ1bmN0aW9uKHYsQyx3KXtyZXR1cm4gdjwxMj8iXHUwNjM1XHUw''@;'; put 'put ''NjI4XHUwNjJkIjoiXHUwNjM0XHUwNjI3XHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjJcdTA2MmMgXHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJhXSBMVCIsbmV4dERheToiW1x1MDZhOVx1MDY0NCBcdTA2MjhcdTA2NDhcdTA2NDJcdTA2MmFdIExUIixuZXh0V2VlazoiZGRkZCBb''@;'; put 'put ''XHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJhXSBMVCIsbGFzdERheToiW1x1MDZhZlx1MDYzMFx1MDYzNFx1MDYyYVx1MDZjMSBcdTA2MzFcdTA2NDhcdTA2MzIgXHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJhXSBMVCIsbGFzdFdlZWs6IltcdTA2YWZcdTA2MzBcdTA2MzRcdTA2MmFcdTA2YzFdIGRk''@;'; put 'put ''ZGQgW1x1MDYyOFx1MDY0OFx1MDY0Mlx1MDYyYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDYyOFx1MDYzOVx1MDYyZiIscGFzdDoiJXMgXHUwNjQyXHUwNjI4XHUwNjQ0IixzOiJcdTA2ODZcdTA2NDZcdTA2MmYgXHUwNjMzXHUwNmNjXHUwNmE5XHUw''@;'; put 'put ''NjQ2XHUwNjg4IixzczoiJWQgXHUwNjMzXHUwNmNjXHUwNmE5XHUwNjQ2XHUwNjg4IixtOiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNjQ1XHUwNjQ2XHUwNjc5IixtbToiJWQgXHUwNjQ1XHUwNjQ2XHUwNjc5IixoOiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNmFmXHUwNmJlXHUwNjQ2XHUwNjc5''@;'; put 'put ''XHUwNmMxIixoaDoiJWQgXHUwNmFmXHUwNmJlXHUwNjQ2XHUwNjc5XHUwNmQyIixkOiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNjJmXHUwNjQ2IixkZDoiJWQgXHUwNjJmXHUwNjQ2IixNOiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNjQ1XHUwNjI3XHUwNmMxIixNTToiJWQgXHUwNjQ1XHUwNjI3''@;'; put 'put ''XHUwNmMxIix5OiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNjMzXHUwNjI3XHUwNjQ0Iix5eToiJWQgXHUwNjMzXHUwNjI3XHUwNjQ0In0scHJlcGFyc2U6ZnVuY3Rpb24odil7cmV0dXJuIHYucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbih2KXtyZXR1cm4gdi5y''@;'; put 'put ''ZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oaCg5NzU4NikpfSw3MjM3NihmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5kZWZpbmVMb2NhbGUoInV6LWxhdG4iLHttb250aHM6IllhbnZhcl9GZXZyYWxfTWFydF9BcHJlbF9NYXlfSXl1bl9J''@;'; put 'put ''eXVsX0F2Z3VzdF9TZW50YWJyX09rdGFicl9Ob3lhYnJfRGVrYWJyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJZYW5fRmV2X01hcl9BcHJfTWF5X0l5dW5fSXl1bF9BdmdfU2VuX09rdF9Ob3lfRGVrIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJZYWtzaGFuYmFfRHVzaGFuYmFfU2VzaGFuYmFf''@;'; put 'put ''Q2hvcnNoYW5iYV9QYXlzaGFuYmFfSnVtYV9TaGFuYmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiWWFrX0R1c2hfU2VzaF9DaG9yX1BheV9KdW1fU2hhbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiWWFfRHVfU2VfQ2hvX1BhX0p1X1NoYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1h''@;'; put 'put ''dDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6IkQgTU1NTSBZWVlZLCBkZGRkIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltCdWd1biBzb2F0XSBMVCBbZGFdIixuZXh0RGF5''@;'; put 'put ''OiJbRXJ0YWdhXSBMVCBbZGFdIixuZXh0V2VlazoiZGRkZCBba3VuaSBzb2F0XSBMVCBbZGFdIixsYXN0RGF5OiJbS2VjaGEgc29hdF0gTFQgW2RhXSIsbGFzdFdlZWs6IltPJ3RnYW5dIGRkZGQgW2t1bmkgc29hdF0gTFQgW2RhXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVy''@;'; put 'put ''ZToiWWFxaW4gJXMgaWNoaWRhIixwYXN0OiJCaXIgbmVjaGEgJXMgb2xkaW4iLHM6InNvbml5YSIsc3M6IiVkIHNvbml5YSIsbToiYmlyIGRhcWlxYSIsbW06IiVkIGRhcWlxYSIsaDoiYmlyIHNvYXQiLGhoOiIlZCBzb2F0IixkOiJiaXIga3VuIixkZDoiJWQga3VuIixNOiJiaXIgb3kiLE1N''@;'; put 'put ''OiIlZCBveSIseToiYmlyIHlpbCIseXk6IiVkIHlpbCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShoKDk3NTg2KSl9LDE5ODAwKGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt5LmRlZmluZUxvY2FsZSgidXoiLHttb250aHM6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0''@;'; put 'put ''MF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkX1x1MDQzOFx1MDQ0ZVx1MDQzYl9cdTA0MzBcdTA0MzJc''@;'; put 'put ''dTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMx''@;'; put 'put ''XHUwNDQwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NGZcdTA0M2RcdTA0MzJfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZF9cdTA0MzhcdTA0NGVcdTA0M2Jf''@;'; put 'put ''XHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZF9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDRmX1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDJmXHUwNDNhXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwX1x1MDQx''@;'; put 'put ''NFx1MDQ0M1x1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzMF9cdTA0MjFcdTA0MzVcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzBfXHUwNDI3XHUwNDNlXHUwNDQwXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwX1x1MDQxZlx1MDQzMFx1MDQzOVx1MDQ0OFx1MDQzMFx1MDQz''@;'; put 'put ''ZFx1MDQzMVx1MDQzMF9cdTA0MTZcdTA0NDNcdTA0M2NcdTA0MzBfXHUwNDI4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQyZlx1MDQzYVx1MDQ0OF9cdTA0MTRcdTA0NDNcdTA0NDhfXHUwNDIxXHUwNDM1XHUwNDQ4X1x1MDQyN1x1MDQz''@;'; put 'put ''ZVx1MDQ0MF9cdTA0MWZcdTA0MzBcdTA0MzlfXHUwNDE2XHUwNDQzXHUwNDNjX1x1MDQyOFx1MDQzMFx1MDQzZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDJmXHUwNDNhX1x1MDQxNFx1MDQ0M19cdTA0MjFcdTA0MzVfXHUwNDI3XHUwNDNlX1x1MDQxZlx1MDQzMF9cdTA0MTZcdTA0''@;'; put 'put ''NDNfXHUwNDI4XHUwNDMwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiRCBNTU1NIFlZWVksIGRkZGQgSEg6bW0ifSxjYWxlbmRh''@;'; put 'put ''cjp7c2FtZURheToiW1x1MDQxMVx1MDQ0M1x1MDQzM1x1MDQ0M1x1MDQzZCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJdIExUIFtcdTA0MzRcdTA0MzBdIixuZXh0RGF5OiJbXHUwNDJkXHUwNDQwXHUwNDQyXHUwNDMwXHUwNDMzXHUwNDMwXSBMVCBbXHUwNDM0XHUwNDMwXSIsbmV4dFdlZWs6''@;'; put 'put ''ImRkZGQgW1x1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzOCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJdIExUIFtcdTA0MzRcdTA0MzBdIixsYXN0RGF5OiJbXHUwNDFhXHUwNDM1XHUwNDQ3XHUwNDMwIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Ml0gTFQgW1x1MDQzNFx1MDQzMF0iLGxhc3RXZWVr''@;'; put 'put ''OiJbXHUwNDIzXHUwNDQyXHUwNDMzXHUwNDMwXHUwNDNkXSBkZGRkIFtcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzggXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXSBMVCBbXHUwNDM0XHUwNDMwXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDJmXHUwNDNhXHUwNDM4''@;'; put 'put ''XHUwNDNkICVzIFx1MDQzOFx1MDQ0N1x1MDQzOFx1MDQzNFx1MDQzMCIscGFzdDoiXHUwNDExXHUwNDM4XHUwNDQwIFx1MDQzZFx1MDQzNVx1MDQ0N1x1MDQzMCAlcyBcdTA0M2VcdTA0M2JcdTA0MzRcdTA0MzhcdTA0M2QiLHM6Ilx1MDQ0NFx1MDQ0M1x1MDQ0MFx1MDQ0MVx1MDQzMFx1MDQ0''@;'; put 'put ''MiIsc3M6IiVkIFx1MDQ0NFx1MDQ0M1x1MDQ0MFx1MDQ0MVx1MDQzMFx1MDQ0MiIsbToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzNFx1MDQzMFx1MDQzYVx1MDQzOFx1MDQzYVx1MDQzMCIsbW06IiVkIFx1MDQzNFx1MDQzMFx1MDQzYVx1MDQzOFx1MDQzYVx1MDQzMCIsaDoiXHUwNDMxXHUw''@;'; put 'put ''NDM4XHUwNDQwIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0MiIsZDoiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzYVx1MDQ0M1x1MDQzZCIsZGQ6IiVkIFx1MDQzYVx1MDQ0M1x1MDQzZCIsTToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQz''@;'; put 'put ''ZVx1MDQzOSIsTU06IiVkIFx1MDQzZVx1MDQzOSIseToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzOVx1MDQzOFx1MDQzYiIseXk6IiVkIFx1MDQzOVx1MDQzOFx1MDQzYiJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShoKDk3NTg2KSl9LDg5MzY2KGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt5LmRlZmluZUxvY2FsZSgidmkiLHttb250aHM6InRoXHhlMW5nIDFfdGhceGUxbmcgMl90aFx4ZTFuZyAzX3RoXHhlMW5nIDRfdGhceGUxbmcgNV90aFx4ZTFuZyA2X3RoXHhlMW5nIDdfdGhceGUxbmcgOF90aFx4ZTFuZyA5X3RoXHhlMW5nIDEwX3RoXHhlMW5nIDExX3RoXHhl''@;'; put 'put ''MW5nIDEyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJUaGcgMDFfVGhnIDAyX1RoZyAwM19UaGcgMDRfVGhnIDA1X1RoZyAwNl9UaGcgMDdfVGhnIDA4X1RoZyAwOV9UaGcgMTBfVGhnIDExX1RoZyAxMiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJjaFx1MWVl''@;'; put 'put ''NyBuaFx1MWVhZHRfdGhcdTFlZTkgaGFpX3RoXHUxZWU5IGJhX3RoXHUxZWU5IHRcdTAxYjBfdGhcdTFlZTkgblx1MDEwM21fdGhcdTFlZTkgc1x4ZTF1X3RoXHUxZWU5IGJcdTFlYTN5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkNOX1QyX1QzX1Q0X1Q1X1Q2X1Q3Ii5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzTWluOiJDTl9UMl9UM19UNF9UNV9UNl9UNyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbWVyaWRpZW1QYXJzZTovc2F8Y2gvaSxpc1BNOmZ1bmN0aW9uKHMpe3JldHVybi9eY2gkL2kudGVzdChzKX0sbWVyaWRpZW06ZnVuY3Rpb24ocyxBLHYpe3JldHVybiBz''@;'; put 'put ''PDEyP3Y/InNhIjoiU0EiOnY/ImNoIjoiQ0gifSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFtuXHUwMTAzbV0gWVlZWSIsTExMOiJEIE1NTU0gW25cdTAxMDNtXSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1N''@;'; put 'put ''TU0gW25cdTAxMDNtXSBZWVlZIEhIOm1tIixsOiJERC9NL1lZWVkiLGxsOiJEIE1NTSBZWVlZIixsbGw6IkQgTU1NIFlZWVkgSEg6bW0iLGxsbGw6ImRkZCwgRCBNTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSFx4ZjRtIG5heSBsXHhmYWNdIExUIixuZXh0RGF5OiJbTmdc''@;'; put 'put ''eGUweSBtYWkgbFx4ZmFjXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3R1XHUxZWE3biB0XHUxZWRiaSBsXHhmYWNdIExUIixsYXN0RGF5OiJbSFx4ZjRtIHF1YSBsXHhmYWNdIExUIixsYXN0V2VlazoiZGRkZCBbdHVcdTFlYTduIHRyXHUwMWIwXHUxZWRiYyBsXHhmYWNdIExUIixzYW1lRWxzZToi''@;'; put 'put ''TCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyB0XHUxZWRiaSIscGFzdDoiJXMgdHJcdTAxYjBcdTFlZGJjIixzOiJ2XHhlMGkgZ2lceGUyeSIsc3M6IiVkIGdpXHhlMnkiLG06Im1cdTFlZDl0IHBoXHhmYXQiLG1tOiIlZCBwaFx4ZmF0IixoOiJtXHUxZWQ5dCBnaVx1MWVkZCIsaGg6IiVk''@;'; put 'put ''IGdpXHUxZWRkIixkOiJtXHUxZWQ5dCBuZ1x4ZTB5IixkZDoiJWQgbmdceGUweSIsdzoibVx1MWVkOXQgdHVcdTFlYTduIix3dzoiJWQgdHVcdTFlYTduIixNOiJtXHUxZWQ5dCB0aFx4ZTFuZyIsTU06IiVkIHRoXHhlMW5nIix5OiJtXHUxZWQ5dCBuXHUwMTAzbSIseXk6IiVkIG5cdTAxMDNt''@;'; put 'put ''In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihzKXtyZXR1cm4gc30sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGgoOTc1ODYpKX0sNjk3MDIoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJ4LXBzZXVkbyIs''@;'; put 'put ''e21vbnRoczoiSn5ceGUxXHhmMVx4ZmFceGUxfnJceGZkX0Z+XHhlOWJyXHhmYX5ceGUxclx4ZmRffk1ceGUxcmN+aF9ceGMxcH5yXHhlZGxffk1ceGUxXHhmZF9+Slx4ZmFceGYxXHhlOX5fSlx4ZmFsflx4ZmRfXHhjMVx4ZmF+Z1x4ZmFzdH5fU1x4ZTlwfnRceGU5bWJ+XHhlOXJfXHhkM35j''@;'; put 'put ''dFx4ZjNiflx4ZTlyX1x4ZDF+XHhmM3ZceGU5bX5iXHhlOXJffkRceGU5Y1x4ZTl+bWJceGU5ciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSn5ceGUxXHhmMV9+Rlx4ZTliX35NXHhlMXJfflx4YzFwcl9+TVx4ZTFceGZkX35KXHhmYVx4ZjFffkpceGZhbF9+XHhjMVx4ZmFnX35TXHhlOXBf''@;'; put 'put ''flx4ZDNjdF9+XHhkMVx4ZjN2X35EXHhlOWMiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU35ceGZhXHhmMWRceGUxflx4ZmRfTVx4ZjN+XHhmMWRceGUxXHhmZH5fVFx4ZmFceGU5fnNkXHhlMVx4ZmR+X1dceGU5ZH5ceGYxXHhlOXNkflx4ZTFceGZkX1R+aFx4''@;'; put 'put ''ZmFyc35kXHhlMVx4ZmRffkZyXHhlZGR+XHhlMVx4ZmRfU35ceGUxdFx4ZmFyfmRceGUxXHhmZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTflx4ZmFceGYxX35NXHhmM1x4ZjFfflRceGZhXHhlOV9+V1x4ZTlkX35UaFx4ZmFffkZyXHhlZF9+U1x4ZTF0Ii5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzTWluOiJTflx4ZmFfTVx4ZjN+X1RceGZhX35XXHhlOV9UfmhfRnJ+X1NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0i''@;'; put 'put ''LExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUflx4ZjNkXHhlMX5ceGZkIFx4ZTF0XSBMVCIsbmV4dERheToiW1R+XHhmM21ceGYzfnJyXHhmM353IFx4ZTF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTF0XSBMVCIsbGFzdERheToiW1x4ZGR+''@;'; put 'put ''XHhlOXN0flx4ZTlyZFx4ZTF+XHhmZCBceGUxdF0gTFQiLGxhc3RXZWVrOiJbTH5ceGUxc3RdIGRkZGQgW1x4ZTF0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHhlZH5ceGYxICVzIixwYXN0OiIlcyBceGUxfmdceGYzIixzOiJceGUxIH5mXHhlOXcgfnNceGU5''@;'; put 'put ''Y1x4ZjN+XHhmMWRzIixzczoiJWQgc35ceGU5Y1x4ZjNceGYxfmRzIixtOiJceGUxIH5tXHhlZFx4ZjF+XHhmYXRceGU5IixtbToiJWQgbX5ceGVkXHhmMVx4ZmF+dFx4ZTlzIixoOiJceGUxflx4ZjEgaFx4ZjN+XHhmYXIiLGhoOiIlZCBoflx4ZjNceGZhcnMiLGQ6Ilx4ZTEgfmRceGUxXHhm''@;'; put 'put ''ZCIsZGQ6IiVkIGR+XHhlMVx4ZmRzIixNOiJceGUxIH5tXHhmM1x4ZjF+dGgiLE1NOiIlZCBtflx4ZjNceGYxdH5ocyIseToiXHhlMSB+XHhmZFx4ZTlceGUxciIseXk6IiVkIFx4ZmR+XHhlOVx4ZTFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0odGh8c3R8bmR8cmQpLyxv''@;'; put 'put ''cmRpbmFsOmZ1bmN0aW9uKHMpe3ZhciBBPXMlMTA7cmV0dXJuIHMrKDE9PX5+KHMlMTAwLzEwKT8idGgiOjE9PT1BPyJzdCI6Mj09PUE/Im5kIjozPT09QT8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oaCg5NzU4NikpfSw3MjY1NShmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNl''@;'; put 'put ''IHN0cmljdCI7eS5kZWZpbmVMb2NhbGUoInlvIix7bW9udGhzOiJTXHUxZWI5XHUwMzAxclx1MWViOVx1MDMwMV9FXHUwMzAwcmVcdTAzMDBsZVx1MDMwMF9cdTFlYjhyXHUxZWI5XHUwMzAwbmFcdTAzMDBfSVx1MDMwMGdiZVx1MDMwMV9FXHUwMzAwYmliaV9PXHUwMzAwa3VcdTAzMDBkdV9B''@;'; put 'put ''Z1x1MWViOW1vX09cdTAzMDBndVx1MDMwMW5fT3dld2VfXHUxZWNjXHUwMzAwd2FcdTAzMDByYVx1MDMwMF9CZVx1MDMwMWx1XHUwMzAxX1x1MWVjY1x1MDMwMHBcdTFlYjlcdTAzMDBcdTAzMDAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IlNcdTFlYjlcdTAzMDFyX0VcdTAzMDBybF9cdTFl''@;'; put 'put ''Yjhybl9JXHUwMzAwZ2JfRVx1MDMwMGJpX09cdTAzMDBrdVx1MDMwMF9BZ1x1MWViOV9PXHUwMzAwZ3VcdTAzMDFfT3dlX1x1MWVjY1x1MDMwMHdhXHUwMzAwX0JlXHUwMzAxbF9cdTFlY2NcdTAzMDBwXHUxZWI5XHUwMzAwXHUwMzAwIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJBXHUwMzAwaVx1''@;'; put 'put ''MDMwMGt1XHUwMzAxX0FqZVx1MDMwMV9JXHUwMzAwc1x1MWViOVx1MDMwMWd1bl9cdTFlY2NqXHUxZWNkXHUwMzAxcnVcdTAzMDFfXHUxZWNjalx1MWVjZFx1MDMwMWJcdTFlY2RfXHUxZWI4dGlcdTAzMDBfQVx1MDMwMGJhXHUwMzAxbVx1MWViOVx1MDMwMXRhIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzU2hvcnQ6IkFcdTAzMDBpXHUwMzAwa19BamVcdTAzMDFfSVx1MDMwMHNcdTFlYjlcdTAzMDFfXHUxZWNjanJfXHUxZWNjamJfXHUxZWI4dGlcdTAzMDBfQVx1MDMwMGJhXHUwMzAxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJBXHUwMzAwaVx1MDMwMF9Bal9JXHUwMzAwc19cdTFlY2Ny''@;'; put 'put ''X1x1MWVjY2JfXHUxZWI4dF9BXHUwMzAwYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6''@;'; put 'put ''bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbT1x1MDMwMG5pXHUwMzAwIG5pXSBMVCIsbmV4dERheToiW1x1MWVjY1x1MDMwMGxhIG5pXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MWVjY3NcdTFlYjlcdTAzMDAgdG9cdTAzMDFuJ2JcdTFlY2RdIFtuaV0gTFQiLGxhc3REYXk6IltBXHUwMzAw''@;'; put 'put ''bmEgbmldIExUIixsYXN0V2VlazoiZGRkZCBbXHUxZWNjc1x1MWViOVx1MDMwMCB0b1x1MDMwMWxcdTFlY2RcdTAzMDFdIFtuaV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im5pXHUwMzAxICVzIixwYXN0OiIlcyBrXHUxZWNkamFcdTAzMDEiLHM6ImlcdTAzMDBz''@;'; put 'put ''XHUxZWI5anVcdTAzMDEgYWF5YVx1MDMwMSBkaWUiLHNzOiJhYXlhXHUwMzAxICVkIixtOiJpXHUwMzAwc1x1MWViOWp1XHUwMzAxIGthbiIsbW06ImlcdTAzMDBzXHUxZWI5anVcdTAzMDEgJWQiLGg6IndhXHUwMzAxa2F0aSBrYW4iLGhoOiJ3YVx1MDMwMWthdGkgJWQiLGQ6Ilx1MWVjZGpc''@;'; put 'put ''dTFlY2RcdTAzMDEga2FuIixkZDoiXHUxZWNkalx1MWVjZFx1MDMwMSAlZCIsTToib3N1XHUwMzAwIGthbiIsTU06Im9zdVx1MDMwMCAlZCIseToiXHUxZWNkZHVcdTAzMDFuIGthbiIseXk6Ilx1MWVjZGR1XHUwMzAxbiAlZCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1x1MWVjZGpcdTFl''@;'; put 'put ''Y2RcdTAzMDFcc1xkezEsMn0vLG9yZGluYWw6Ilx1MWVjZGpcdTFlY2RcdTAzMDEgJWQiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShoKDk3NTg2KSl9LDU3NShmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5kZWZpbmVMb2NhbGUoInpoLWNuIix7bW9udGhzOiJcdTRlMDBcdTY3''@;'; put 'put ''MDhfXHU0ZThjXHU2NzA4X1x1NGUwOVx1NjcwOF9cdTU2ZGJcdTY3MDhfXHU0ZTk0XHU2NzA4X1x1NTE2ZFx1NjcwOF9cdTRlMDNcdTY3MDhfXHU1MTZiXHU2NzA4X1x1NGU1ZFx1NjcwOF9cdTUzNDFcdTY3MDhfXHU1MzQxXHU0ZTAwXHU2NzA4X1x1NTM0MVx1NGU4Y1x1NjcwOCIuc3BsaXQo''@;'; put 'put ''Il8iKSxtb250aHNTaG9ydDoiMVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1NjYxZlx1NjcxZlx1NjVlNV9cdTY2MWZc''@;'; put 'put ''dTY3MWZcdTRlMDBfXHU2NjFmXHU2NzFmXHU0ZThjX1x1NjYxZlx1NjcxZlx1NGUwOV9cdTY2MWZcdTY3MWZcdTU2ZGJfXHU2NjFmXHU2NzFmXHU0ZTk0X1x1NjYxZlx1NjcxZlx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTU0NjhcdTY1ZTVfXHU1NDY4XHU0ZTAwX1x1NTQ2''@;'; put 'put ''OFx1NGU4Y19cdTU0NjhcdTRlMDlfXHU1NDY4XHU1NmRiX1x1NTQ2OFx1NGU5NF9cdTU0NjhcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1NjVlNV9cdTRlMDBfXHU0ZThjX1x1NGUwOV9cdTU2ZGJfXHU0ZTk0X1x1NTE2ZCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6''@;'; put 'put ''IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNUFoXHU3MGI5bW1cdTUyMDYiLExMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGRBaFx1NzBiOW1tXHU1MjA2''@;'; put 'put ''IixsOiJZWVlZL00vRCIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2NcdTY2Njh8XHU2NWU5XHU0ZTBh''@;'; put 'put ''fFx1NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1NjY1YVx1NGUwYS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHMsQSl7cmV0dXJuIDEyPT09cyYmKHM9MCksIlx1NTFjY1x1NjY2OCI9PT1BfHwiXHU2NWU5XHU0ZTBhIj09PUF8fCJcdTRlMGFcdTUzNDgiPT09QT9zOiJc''@;'; put 'put ''dTRlMGJcdTUzNDgiPT09QXx8Ilx1NjY1YVx1NGUwYSI9PT1BP3MrMTI6cz49MTE/czpzKzEyfSxtZXJpZGllbTpmdW5jdGlvbihzLEEsdil7dmFyIEM9MTAwKnMrQTtyZXR1cm4gQzw2MDA/Ilx1NTFjY1x1NjY2OCI6Qzw5MDA/Ilx1NjVlOVx1NGUwYSI6QzwxMTMwPyJcdTRlMGFcdTUzNDgi''@;'; put 'put ''OkM8MTIzMD8iXHU0ZTJkXHU1MzQ4IjpDPDE4MDA/Ilx1NGUwYlx1NTM0OCI6Ilx1NjY1YVx1NGUwYSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHU0ZWNhXHU1OTI5XUxUIixuZXh0RGF5OiJbXHU2NjBlXHU1OTI5XUxUIixuZXh0V2VlazpmdW5jdGlvbihzKXtyZXR1cm4gcy53ZWVrKCkhPT10''@;'; put 'put ''aGlzLndlZWsoKT8iW1x1NGUwYl1kZGRMVCI6IltcdTY3MmNdZGRkTFQifSxsYXN0RGF5OiJbXHU2NjI4XHU1OTI5XUxUIixsYXN0V2VlazpmdW5jdGlvbihzKXtyZXR1cm4gdGhpcy53ZWVrKCkhPT1zLndlZWsoKT8iW1x1NGUwYV1kZGRMVCI6IltcdTY3MmNdZGRkTFQifSxzYW1lRWxzZToi''@;'; put 'put ''TCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHU2NWU1fFx1NjcwOHxcdTU0NjgpLyxvcmRpbmFsOmZ1bmN0aW9uKHMsQSl7c3dpdGNoKEEpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIHMrIlx1NjVlNSI7Y2FzZSJNIjpyZXR1cm4gcysiXHU2NzA4IjtjYXNl''@;'; put 'put ''InciOmNhc2UiVyI6cmV0dXJuIHMrIlx1NTQ2OCI7ZGVmYXVsdDpyZXR1cm4gc319LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1NTQwZSIscGFzdDoiJXNcdTUyNGQiLHM6Ilx1NTFlMFx1NzlkMiIsc3M6IiVkIFx1NzlkMiIsbToiMSBcdTUyMDZcdTk0OWYiLG1tOiIlZCBcdTUyMDZcdTk0''@;'; put 'put ''OWYiLGg6IjEgXHU1YzBmXHU2NWY2IixoaDoiJWQgXHU1YzBmXHU2NWY2IixkOiIxIFx1NTkyOSIsZGQ6IiVkIFx1NTkyOSIsdzoiMSBcdTU0NjgiLHd3OiIlZCBcdTU0NjgiLE06IjEgXHU0ZTJhXHU2NzA4IixNTToiJWQgXHU0ZTJhXHU2NzA4Iix5OiIxIFx1NWU3NCIseXk6IiVkIFx1NWU3''@;'; put 'put ''NCJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShoKDk3NTg2KSl9LDE4MzUxKGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt5LmRlZmluZUxvY2FsZSgiemgtaGsiLHttb250aHM6Ilx1NGUwMFx1NjcwOF9cdTRlOGNcdTY3MDhfXHU0ZTA5XHU2NzA4X1x1NTZkYlx1NjcwOF9cdTRl''@;'; put 'put ''OTRcdTY3MDhfXHU1MTZkXHU2NzA4X1x1NGUwM1x1NjcwOF9cdTUxNmJcdTY3MDhfXHU0ZTVkXHU2NzA4X1x1NTM0MVx1NjcwOF9cdTUzNDFcdTRlMDBcdTY3MDhfXHU1MzQxXHU0ZThjXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2''@;'; put 'put ''NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHU2NjFmXHU2NzFmXHU2NWU1X1x1NjYxZlx1NjcxZlx1NGUwMF9cdTY2MWZcdTY3MWZcdTRlOGNfXHU2NjFmXHU2NzFmXHU0''@;'; put 'put ''ZTA5X1x1NjYxZlx1NjcxZlx1NTZkYl9cdTY2MWZcdTY3MWZcdTRlOTRfXHU2NjFmXHU2NzFmXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1OTAzMVx1NjVlNV9cdTkwMzFcdTRlMDBfXHU5MDMxXHU0ZThjX1x1OTAzMVx1NGUwOV9cdTkwMzFcdTU2ZGJfXHU5MDMxXHU0ZTk0''@;'; put 'put ''X1x1OTAzMVx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NGUwMF9cdTRlOGNfXHU0ZTA5X1x1NTZkYl9cdTRlOTRfXHU1MTZkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZ''@;'; put 'put ''XHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIixsOiJZWVlZL00vRCIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1Njcw''@;'; put 'put ''OERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2NcdTY2Njh8XHU2NWU5XHU0ZTBhfFx1NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1NjY1YVx1NGUwYS8sbWVyaWRpZW1Ib3Vy''@;'; put 'put ''OmZ1bmN0aW9uKHMsQSl7cmV0dXJuIDEyPT09cyYmKHM9MCksIlx1NTFjY1x1NjY2OCI9PT1BfHwiXHU2NWU5XHU0ZTBhIj09PUF8fCJcdTRlMGFcdTUzNDgiPT09QT9zOiJcdTRlMmRcdTUzNDgiPT09QT9zPj0xMT9zOnMrMTI6Ilx1NGUwYlx1NTM0OCI9PT1BfHwiXHU2NjVhXHU0ZTBhIj09''@;'; put 'put ''PUE/cysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHMsQSx2KXt2YXIgQz0xMDAqcytBO3JldHVybiBDPDYwMD8iXHU1MWNjXHU2NjY4IjpDPDkwMD8iXHU2NWU5XHU0ZTBhIjpDPDEyMDA/Ilx1NGUwYVx1NTM0OCI6MTIwMD09PUM/Ilx1NGUyZFx1NTM0OCI6QzwxODAwPyJcdTRlMGJc''@;'; put 'put ''dTUzNDgiOiJcdTY2NWFcdTRlMGEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1NGVjYVx1NTkyOV1MVCIsbmV4dERheToiW1x1NjYwZVx1NTkyOV1MVCIsbmV4dFdlZWs6IltcdTRlMGJdZGRkZExUIixsYXN0RGF5OiJbXHU2NjI4XHU1OTI5XUxUIixsYXN0V2VlazoiW1x1NGUwYV1kZGRkTFQi''@;'; put 'put ''LHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTY1ZTV8XHU2NzA4fFx1OTAzMSkvLG9yZGluYWw6ZnVuY3Rpb24ocyxBKXtzd2l0Y2goQSl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gcysiXHU2NWU1IjtjYXNlIk0iOnJldHVybiBzKyJc''@;'; put 'put ''dTY3MDgiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gcysiXHU5MDMxIjtkZWZhdWx0OnJldHVybiBzfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1ZjhjIixwYXN0OiIlc1x1NTI0ZCIsczoiXHU1ZTdlXHU3OWQyIixzczoiJWQgXHU3OWQyIixtOiIxIFx1NTIwNlx1OTQxOCIsbW06IiVk''@;'; put 'put ''IFx1NTIwNlx1OTQxOCIsaDoiMSBcdTVjMGZcdTY2NDIiLGhoOiIlZCBcdTVjMGZcdTY2NDIiLGQ6IjEgXHU1OTI5IixkZDoiJWQgXHU1OTI5IixNOiIxIFx1NTAwYlx1NjcwOCIsTU06IiVkIFx1NTAwYlx1NjcwOCIseToiMSBcdTVlNzQiLHl5OiIlZCBcdTVlNzQifX0pfShoKDk3NTg2KSl9''@;'; put 'put ''LDUxNjI2KGZlLGosaCl7IWZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt5LmRlZmluZUxvY2FsZSgiemgtbW8iLHttb250aHM6Ilx1NGUwMFx1NjcwOF9cdTRlOGNcdTY3MDhfXHU0ZTA5XHU2NzA4X1x1NTZkYlx1NjcwOF9cdTRlOTRcdTY3MDhfXHU1MTZkXHU2NzA4X1x1NGUwM1x1NjcwOF9c''@;'; put 'put ''dTUxNmJcdTY3MDhfXHU0ZTVkXHU2NzA4X1x1NTM0MVx1NjcwOF9cdTUzNDFcdTRlMDBcdTY3MDhfXHU1MzQxXHU0ZThjXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhf''@;'; put 'put ''OVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHU2NjFmXHU2NzFmXHU2NWU1X1x1NjYxZlx1NjcxZlx1NGUwMF9cdTY2MWZcdTY3MWZcdTRlOGNfXHU2NjFmXHU2NzFmXHU0ZTA5X1x1NjYxZlx1NjcxZlx1NTZkYl9cdTY2MWZcdTY3MWZc''@;'; put 'put ''dTRlOTRfXHU2NjFmXHU2NzFmXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1OTAzMVx1NjVlNV9cdTkwMzFcdTRlMDBfXHU5MDMxXHU0ZThjX1x1OTAzMVx1NGUwOV9cdTkwMzFcdTU2ZGJfXHU5MDMxXHU0ZTk0X1x1OTAzMVx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01p''@;'; put 'put ''bjoiXHU2NWU1X1x1NGUwMF9cdTRlOGNfXHU0ZTA5X1x1NTZkYl9cdTRlOTRfXHU1MTZkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3''@;'; put 'put ''NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIixsOiJEL00vWVlZWSIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2''@;'; put 'put ''NzA4RFx1NjVlNWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2NcdTY2Njh8XHU2NWU5XHU0ZTBhfFx1NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1NjY1YVx1NGUwYS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHMsQSl7cmV0dXJuIDEyPT09cyYmKHM9MCks''@;'; put 'put ''Ilx1NTFjY1x1NjY2OCI9PT1BfHwiXHU2NWU5XHU0ZTBhIj09PUF8fCJcdTRlMGFcdTUzNDgiPT09QT9zOiJcdTRlMmRcdTUzNDgiPT09QT9zPj0xMT9zOnMrMTI6Ilx1NGUwYlx1NTM0OCI9PT1BfHwiXHU2NjVhXHU0ZTBhIj09PUE/cysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHMs''@;'; put 'put ''QSx2KXt2YXIgQz0xMDAqcytBO3JldHVybiBDPDYwMD8iXHU1MWNjXHU2NjY4IjpDPDkwMD8iXHU2NWU5XHU0ZTBhIjpDPDExMzA/Ilx1NGUwYVx1NTM0OCI6QzwxMjMwPyJcdTRlMmRcdTUzNDgiOkM8MTgwMD8iXHU0ZTBiXHU1MzQ4IjoiXHU2NjVhXHU0ZTBhIn0sY2FsZW5kYXI6e3NhbWVE''@;'; put 'put ''YXk6IltcdTRlY2FcdTU5MjldIExUIixuZXh0RGF5OiJbXHU2NjBlXHU1OTI5XSBMVCIsbmV4dFdlZWs6IltcdTRlMGJdZGRkZCBMVCIsbGFzdERheToiW1x1NjYyOFx1NTkyOV0gTFQiLGxhc3RXZWVrOiJbXHU0ZTBhXWRkZGQgTFQiLHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQ''@;'; put 'put ''YXJzZTovXGR7MSwyfShcdTY1ZTV8XHU2NzA4fFx1OTAzMSkvLG9yZGluYWw6ZnVuY3Rpb24ocyxBKXtzd2l0Y2goQSl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gcysiXHU2NWU1IjtjYXNlIk0iOnJldHVybiBzKyJcdTY3MDgiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gcysi''@;'; put 'put ''XHU5MDMxIjtkZWZhdWx0OnJldHVybiBzfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1MTY3IixwYXN0OiIlc1x1NTI0ZCIsczoiXHU1ZTdlXHU3OWQyIixzczoiJWQgXHU3OWQyIixtOiIxIFx1NTIwNlx1OTQxOCIsbW06IiVkIFx1NTIwNlx1OTQxOCIsaDoiMSBcdTVjMGZcdTY2NDIi''@;'; put 'put ''LGhoOiIlZCBcdTVjMGZcdTY2NDIiLGQ6IjEgXHU1OTI5IixkZDoiJWQgXHU1OTI5IixNOiIxIFx1NTAwYlx1NjcwOCIsTU06IiVkIFx1NTAwYlx1NjcwOCIseToiMSBcdTVlNzQiLHl5OiIlZCBcdTVlNzQifX0pfShoKDk3NTg2KSl9LDg4ODcoZmUsaixoKXshZnVuY3Rpb24oeSl7InVzZSBz''@;'; put 'put ''dHJpY3QiO3kuZGVmaW5lTG9jYWxlKCJ6aC10dyIse21vbnRoczoiXHU0ZTAwXHU2NzA4X1x1NGU4Y1x1NjcwOF9cdTRlMDlcdTY3MDhfXHU1NmRiXHU2NzA4X1x1NGU5NFx1NjcwOF9cdTUxNmRcdTY3MDhfXHU0ZTAzXHU2NzA4X1x1NTE2Ylx1NjcwOF9cdTRlNWRcdTY3MDhfXHU1MzQxXHU2''@;'; put 'put ''NzA4X1x1NTM0MVx1NGUwMFx1NjcwOF9cdTUzNDFcdTRlOGNcdTY3MDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjFcdTY3MDhfMlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhfOFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTY2MWZcdTY3MWZcdTY1ZTVfXHU2NjFmXHU2NzFmXHU0ZTAwX1x1NjYxZlx1NjcxZlx1NGU4Y19cdTY2MWZcdTY3MWZcdTRlMDlfXHU2NjFmXHU2NzFmXHU1NmRiX1x1NjYxZlx1NjcxZlx1NGU5NF9cdTY2MWZcdTY3MWZcdTUxNmQiLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXNTaG9ydDoiXHU5MDMxXHU2NWU1X1x1OTAzMVx1NGUwMF9cdTkwMzFcdTRlOGNfXHU5MDMxXHU0ZTA5X1x1OTAzMVx1NTZkYl9cdTkwMzFcdTRlOTRfXHU5MDMxXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTY1ZTVfXHU0ZTAwX1x1NGU4Y19cdTRlMDlfXHU1''@;'; put 'put ''NmRiX1x1NGU5NF9cdTUxNmQiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS9NTS9ERCIsTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLExMTEw6IllZWVlc''@;'; put 'put ''dTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0iLGw6IllZWVkvTS9EIixsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsbGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1ZGRkZCBISDptbSJ9LG1lcmlkaWVtUGFy''@;'; put 'put ''c2U6L1x1NTFjY1x1NjY2OHxcdTY1ZTlcdTRlMGF8XHU0ZTBhXHU1MzQ4fFx1NGUyZFx1NTM0OHxcdTRlMGJcdTUzNDh8XHU2NjVhXHU0ZTBhLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24ocyxBKXtyZXR1cm4gMTI9PT1zJiYocz0wKSwiXHU1MWNjXHU2NjY4Ij09PUF8fCJcdTY1ZTlcdTRlMGEi''@;'; put 'put ''PT09QXx8Ilx1NGUwYVx1NTM0OCI9PT1BP3M6Ilx1NGUyZFx1NTM0OCI9PT1BP3M+PTExP3M6cysxMjoiXHU0ZTBiXHU1MzQ4Ij09PUF8fCJcdTY2NWFcdTRlMGEiPT09QT9zKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24ocyxBLHYpe3ZhciBDPTEwMCpzK0E7cmV0dXJuIEM8NjAwPyJc''@;'; put 'put ''dTUxY2NcdTY2NjgiOkM8OTAwPyJcdTY1ZTlcdTRlMGEiOkM8MTEzMD8iXHU0ZTBhXHU1MzQ4IjpDPDEyMzA/Ilx1NGUyZFx1NTM0OCI6QzwxODAwPyJcdTRlMGJcdTUzNDgiOiJcdTY2NWFcdTRlMGEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1NGVjYVx1NTkyOV0gTFQiLG5leHREYXk6Iltc''@;'; put 'put ''dTY2MGVcdTU5MjldIExUIixuZXh0V2VlazoiW1x1NGUwYl1kZGRkIExUIixsYXN0RGF5OiJbXHU2NjI4XHU1OTI5XSBMVCIsbGFzdFdlZWs6IltcdTRlMGFdZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1NjVlNXxcdTY3MDh8XHU5MDMx''@;'; put 'put ''KS8sb3JkaW5hbDpmdW5jdGlvbihzLEEpe3N3aXRjaChBKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBzKyJcdTY1ZTUiO2Nhc2UiTSI6cmV0dXJuIHMrIlx1NjcwOCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBzKyJcdTkwMzEiO2RlZmF1bHQ6cmV0dXJuIHN9fSxyZWxhdGl2''@;'; put 'put ''ZVRpbWU6e2Z1dHVyZToiJXNcdTVmOGMiLHBhc3Q6IiVzXHU1MjRkIixzOiJcdTVlN2VcdTc5ZDIiLHNzOiIlZCBcdTc5ZDIiLG06IjEgXHU1MjA2XHU5NDE4IixtbToiJWQgXHU1MjA2XHU5NDE4IixoOiIxIFx1NWMwZlx1NjY0MiIsaGg6IiVkIFx1NWMwZlx1NjY0MiIsZDoiMSBcdTU5Mjki''@;'; put 'put ''LGRkOiIlZCBcdTU5MjkiLE06IjEgXHU1MDBiXHU2NzA4IixNTToiJWQgXHU1MDBiXHU2NzA4Iix5OiIxIFx1NWU3NCIseXk6IiVkIFx1NWU3NCJ9fSl9KGgoOTc1ODYpKX0sOTc1ODYoZmUsaixoKXsoZmU9aC5ubWQoZmUpKS5leHBvcnRzPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB5''@;'; put 'put ''LHo7ZnVuY3Rpb24gYygpe3JldHVybiB5LmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBBKHllKXtyZXR1cm4geWUgaW5zdGFuY2VvZiBBcnJheXx8IltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh5ZSl9ZnVuY3Rpb24gdih5ZSl7cmV0dXJu''@;'; put 'put ''IG51bGwhPXllJiYiW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh5ZSl9ZnVuY3Rpb24gQyh5ZSxVZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5ZSxVZSl9ZnVuY3Rpb24gdyh5ZSl7aWYoT2JqZWN0LmdldE93''@;'; put 'put ''blByb3BlcnR5TmFtZXMpcmV0dXJuIDA9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh5ZSkubGVuZ3RoO3ZhciBVZTtmb3IoVWUgaW4geWUpaWYoQyh5ZSxVZSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gUyh5ZSl7cmV0dXJuIHZvaWQgMD09PXllfWZ1bmN0aW9uIEwoeWUpe3Jl''@;'; put 'put ''dHVybiJudW1iZXIiPT10eXBlb2YgeWV8fCJbb2JqZWN0IE51bWJlcl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHllKX1mdW5jdGlvbiBSKHllKXtyZXR1cm4geWUgaW5zdGFuY2VvZiBEYXRlfHwiW29iamVjdCBEYXRlXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5n''@;'; put 'put ''LmNhbGwoeWUpfWZ1bmN0aW9uIHgoeWUsVWUpe3ZhciBpdCxjdD1bXSxGdD15ZS5sZW5ndGg7Zm9yKGl0PTA7aXQ8RnQ7KytpdCljdC5wdXNoKFVlKHllW2l0XSxpdCkpO3JldHVybiBjdH1mdW5jdGlvbiBVKHllLFVlKXtmb3IodmFyIGN0IGluIFVlKUMoVWUsY3QpJiYoeWVbY3RdPVVlW2N0''@;'; put 'put ''XSk7cmV0dXJuIEMoVWUsInRvU3RyaW5nIikmJih5ZS50b1N0cmluZz1VZS50b1N0cmluZyksQyhVZSwidmFsdWVPZiIpJiYoeWUudmFsdWVPZj1VZS52YWx1ZU9mKSx5ZX1mdW5jdGlvbiBIKHllLFVlLGN0LGl0KXtyZXR1cm4gTmEoeWUsVWUsY3QsaXQsITApLnV0YygpfWZ1bmN0aW9uIE4o''@;'; put 'put ''eWUpe3JldHVybiBudWxsPT15ZS5fcGYmJih5ZS5fcGY9e2VtcHR5OiExLHVudXNlZFRva2VuczpbXSx1bnVzZWRJbnB1dDpbXSxvdmVyZmxvdzotMixjaGFyc0xlZnRPdmVyOjAsbnVsbElucHV0OiExLGludmFsaWRFcmE6bnVsbCxpbnZhbGlkTW9udGg6bnVsbCxpbnZhbGlkRm9ybWF0OiEx''@;'; put 'put ''LHVzZXJJbnZhbGlkYXRlZDohMSxpc286ITEscGFyc2VkRGF0ZVBhcnRzOltdLGVyYTpudWxsLG1lcmlkaWVtOm51bGwscmZjMjgyMjohMSx3ZWVrZGF5TWlzbWF0Y2g6ITF9KSx5ZS5fcGZ9ZnVuY3Rpb24gWSh5ZSl7dmFyIFVlPW51bGwsY3Q9ITEsaXQ9eWUuX2QmJiFpc05hTih5ZS5fZC5n''@;'; put 'put ''ZXRUaW1lKCkpO3JldHVybiBpdCYmKFVlPU4oeWUpLGN0PXouY2FsbChVZS5wYXJzZWREYXRlUGFydHMsZnVuY3Rpb24oRnQpe3JldHVybiBudWxsIT1GdH0pLGl0PVVlLm92ZXJmbG93PDAmJiFVZS5lbXB0eSYmIVVlLmludmFsaWRFcmEmJiFVZS5pbnZhbGlkTW9udGgmJiFVZS5pbnZhbGlk''@;'; put 'put ''V2Vla2RheSYmIVVlLndlZWtkYXlNaXNtYXRjaCYmIVVlLm51bGxJbnB1dCYmIVVlLmludmFsaWRGb3JtYXQmJiFVZS51c2VySW52YWxpZGF0ZWQmJighVWUubWVyaWRpZW18fFVlLm1lcmlkaWVtJiZjdCkseWUuX3N0cmljdCYmKGl0PWl0JiYwPT09VWUuY2hhcnNMZWZ0T3ZlciYmMD09PVVl''@;'; put 'put ''LnVudXNlZFRva2Vucy5sZW5ndGgmJnZvaWQgMD09PVVlLmJpZ0hvdXIpKSxudWxsIT1PYmplY3QuaXNGcm96ZW4mJk9iamVjdC5pc0Zyb3plbih5ZSk/aXQ6KHllLl9pc1ZhbGlkPWl0LHllLl9pc1ZhbGlkKX1mdW5jdGlvbiBGKHllKXt2YXIgVWU9SChOYU4pO3JldHVybiBudWxsIT15ZT9V''@;'; put 'put ''KE4oVWUpLHllKTpOKFVlKS51c2VySW52YWxpZGF0ZWQ9ITAsVWV9ej1BcnJheS5wcm90b3R5cGUuc29tZT9BcnJheS5wcm90b3R5cGUuc29tZTpmdW5jdGlvbih5ZSl7dmFyIGl0LFVlPU9iamVjdCh0aGlzKSxjdD1VZS5sZW5ndGg+Pj4wO2ZvcihpdD0wO2l0PGN0O2l0KyspaWYoaXQgaW4g''@;'; put 'put ''VWUmJnllLmNhbGwodGhpcyxVZVtpdF0saXQsVWUpKXJldHVybiEwO3JldHVybiExfTt2YXIgVz1jLm1vbWVudFByb3BlcnRpZXM9W10scT0hMTtmdW5jdGlvbiByZSh5ZSxVZSl7dmFyIGN0LGl0LEZ0LFllPVcubGVuZ3RoO2lmKFMoVWUuX2lzQU1vbWVudE9iamVjdCl8fCh5ZS5faXNBTW9t''@;'; put 'put ''ZW50T2JqZWN0PVVlLl9pc0FNb21lbnRPYmplY3QpLFMoVWUuX2kpfHwoeWUuX2k9VWUuX2kpLFMoVWUuX2YpfHwoeWUuX2Y9VWUuX2YpLFMoVWUuX2wpfHwoeWUuX2w9VWUuX2wpLFMoVWUuX3N0cmljdCl8fCh5ZS5fc3RyaWN0PVVlLl9zdHJpY3QpLFMoVWUuX3R6bSl8fCh5ZS5fdHptPVVl''@;'; put 'put ''Ll90em0pLFMoVWUuX2lzVVRDKXx8KHllLl9pc1VUQz1VZS5faXNVVEMpLFMoVWUuX29mZnNldCl8fCh5ZS5fb2Zmc2V0PVVlLl9vZmZzZXQpLFMoVWUuX3BmKXx8KHllLl9wZj1OKFVlKSksUyhVZS5fbG9jYWxlKXx8KHllLl9sb2NhbGU9VWUuX2xvY2FsZSksWWU+MClmb3IoY3Q9MDtjdDxZ''@;'; put 'put ''ZTtjdCsrKVMoRnQ9VWVbaXQ9V1tjdF1dKXx8KHllW2l0XT1GdCk7cmV0dXJuIHllfWZ1bmN0aW9uIG1lKHllKXtyZSh0aGlzLHllKSx0aGlzLl9kPW5ldyBEYXRlKG51bGwhPXllLl9kP3llLl9kLmdldFRpbWUoKTpOYU4pLHRoaXMuaXNWYWxpZCgpfHwodGhpcy5fZD1uZXcgRGF0ZShOYU4p''@;'; put 'put ''KSwhMT09PXEmJihxPSEwLGMudXBkYXRlT2Zmc2V0KHRoaXMpLHE9ITEpfWZ1bmN0aW9uIENlKHllKXtyZXR1cm4geWUgaW5zdGFuY2VvZiBtZXx8bnVsbCE9eWUmJm51bGwhPXllLl9pc0FNb21lbnRPYmplY3R9ZnVuY3Rpb24gSWUoeWUpeyExPT09Yy5zdXBwcmVzc0RlcHJlY2F0aW9uV2Fy''@;'; put 'put ''bmluZ3MmJnR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIkRlcHJlY2F0aW9uIHdhcm5pbmc6ICIreWUpfWZ1bmN0aW9uIGtlKHllLFVlKXt2YXIgY3Q9ITA7cmV0dXJuIFUoZnVuY3Rpb24oKXtpZihudWxsIT1jLmRlcHJlY2F0aW9uSGFuZGxlciYmYy5k''@;'; put 'put ''ZXByZWNhdGlvbkhhbmRsZXIobnVsbCx5ZSksY3Qpe3ZhciBGdCxZZSxYZSxpdD1bXSx5aT1hcmd1bWVudHMubGVuZ3RoO2ZvcihZZT0wO1llPHlpO1llKyspe2lmKEZ0PSIiLCJvYmplY3QiPT10eXBlb2YgYXJndW1lbnRzW1llXSl7Zm9yKFhlIGluIEZ0Kz0iXG5bIitZZSsiXSAiLGFyZ3Vt''@;'; put 'put ''ZW50c1swXSlDKGFyZ3VtZW50c1swXSxYZSkmJihGdCs9WGUrIjogIithcmd1bWVudHNbMF1bWGVdKyIsICIpO0Z0PUZ0LnNsaWNlKDAsLTIpfWVsc2UgRnQ9YXJndW1lbnRzW1llXTtpdC5wdXNoKEZ0KX1JZSh5ZSsiXG5Bcmd1bWVudHM6ICIrQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwo''@;'; put 'put ''aXQpLmpvaW4oIiIpKyJcbiIrKG5ldyBFcnJvcikuc3RhY2spLGN0PSExfXJldHVybiBVZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LFVlKX12YXIgQixxZT17fTtmdW5jdGlvbiBYKHllLFVlKXtudWxsIT1jLmRlcHJlY2F0aW9uSGFuZGxlciYmYy5kZXByZWNhdGlvbkhhbmRsZXIoeWUsVWUp''@;'; put 'put ''LHFlW3llXXx8KEllKFVlKSxxZVt5ZV09ITApfWZ1bmN0aW9uIGYoeWUpe3JldHVybiB0eXBlb2YgRnVuY3Rpb248InUiJiZ5ZSBpbnN0YW5jZW9mIEZ1bmN0aW9ufHwiW29iamVjdCBGdW5jdGlvbl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHllKX1mdW5jdGlvbiBrKHll''@;'; put 'put ''LFVlKXt2YXIgaXQsY3Q9VSh7fSx5ZSk7Zm9yKGl0IGluIFVlKUMoVWUsaXQpJiYodih5ZVtpdF0pJiZ2KFVlW2l0XSk/KGN0W2l0XT17fSxVKGN0W2l0XSx5ZVtpdF0pLFUoY3RbaXRdLFVlW2l0XSkpOm51bGwhPVVlW2l0XT9jdFtpdF09VWVbaXRdOmRlbGV0ZSBjdFtpdF0pO2ZvcihpdCBp''@;'; put 'put ''biB5ZSlDKHllLGl0KSYmIUMoVWUsaXQpJiZ2KHllW2l0XSkmJihjdFtpdF09VSh7fSxjdFtpdF0pKTtyZXR1cm4gY3R9ZnVuY3Rpb24gTSh5ZSl7bnVsbCE9eWUmJnRoaXMuc2V0KHllKX1jLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncz0hMSxjLmRlcHJlY2F0aW9uSGFuZGxlcj1udWxs''@;'; put 'put ''LEI9T2JqZWN0LmtleXM/T2JqZWN0LmtleXM6ZnVuY3Rpb24oeWUpe3ZhciBVZSxjdD1bXTtmb3IoVWUgaW4geWUpQyh5ZSxVZSkmJmN0LnB1c2goVWUpO3JldHVybiBjdH07ZnVuY3Rpb24gRCh5ZSxVZSxjdCl7dmFyIGl0PSIiK01hdGguYWJzKHllKTtyZXR1cm4oeWU+PTA/Y3Q/IisiOiIi''@;'; put 'put ''OiItIikrTWF0aC5wb3coMTAsTWF0aC5tYXgoMCxVZS1pdC5sZW5ndGgpKS50b1N0cmluZygpLnN1YnN0cigxKStpdH12YXIgcD0vKFxbW15cW10qXF0pfChcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xO''@;'; put 'put ''ezEsNX18WVlZWVlZfFlZWVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyxJPS8oXFtbXlxbXSpcXSl8KFxcKT8oTFRTfExUfExMP0w/TD98bHsxLDR9KS9nLHVlPXt9LG5l''@;'; put 'put ''PXt9O2Z1bmN0aW9uIF9lKHllLFVlLGN0LGl0KXt2YXIgRnQ9aXQ7InN0cmluZyI9PXR5cGVvZiBpdCYmKEZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbaXRdKCl9KSx5ZSYmKG5lW3llXT1GdCksVWUmJihuZVtVZVswXV09ZnVuY3Rpb24oKXtyZXR1cm4gRChGdC5hcHBseSh0aGlzLGFyZ3Vt''@;'; put 'put ''ZW50cyksVWVbMV0sVWVbMl0pfSksY3QmJihuZVtjdF09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkub3JkaW5hbChGdC5hcHBseSh0aGlzLGFyZ3VtZW50cykseWUpfSl9ZnVuY3Rpb24gUGUoeWUpe3JldHVybiB5ZS5tYXRjaCgvXFtbXHNcU10vKT95ZS5yZXBsYWNlKC9e''@;'; put 'put ''XFt8XF0kL2csIiIpOnllLnJlcGxhY2UoL1xcL2csIiIpfWZ1bmN0aW9uIGx0KHllLFVlKXtyZXR1cm4geWUuaXNWYWxpZCgpPyhVZT1kdChVZSx5ZS5sb2NhbGVEYXRhKCkpLHVlW1VlXT11ZVtVZV18fGZ1bmN0aW9uIG90KHllKXt2YXIgY3QsaXQsVWU9eWUubWF0Y2gocCk7Zm9yKGN0PTAs''@;'; put 'put ''aXQ9VWUubGVuZ3RoO2N0PGl0O2N0KyspVWVbY3RdPW5lW1VlW2N0XV0/bmVbVWVbY3RdXTpQZShVZVtjdF0pO3JldHVybiBmdW5jdGlvbihGdCl7dmFyIFhlLFllPSIiO2ZvcihYZT0wO1hlPGl0O1hlKyspWWUrPWYoVWVbWGVdKT9VZVtYZV0uY2FsbChGdCx5ZSk6VWVbWGVdO3JldHVybiBZ''@;'; put 'put ''ZX19KFVlKSx1ZVtVZV0oeWUpKTp5ZS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX1mdW5jdGlvbiBkdCh5ZSxVZSl7dmFyIGN0PTU7ZnVuY3Rpb24gaXQoRnQpe3JldHVybiBVZS5sb25nRGF0ZUZvcm1hdChGdCl8fEZ0fWZvcihJLmxhc3RJbmRleD0wO2N0Pj0wJiZJLnRlc3QoeWUpOyl5''@;'; put 'put ''ZT15ZS5yZXBsYWNlKEksaXQpLEkubGFzdEluZGV4PTAsY3QtPTE7cmV0dXJuIHllfXZhciB3ZT17RDoiZGF0ZSIsZGF0ZXM6ImRhdGUiLGRhdGU6ImRhdGUiLGQ6ImRheSIsZGF5czoiZGF5IixkYXk6ImRheSIsZToid2Vla2RheSIsd2Vla2RheXM6IndlZWtkYXkiLHdlZWtkYXk6IndlZWtk''@;'; put 'put ''YXkiLEU6Imlzb1dlZWtkYXkiLGlzb3dlZWtkYXlzOiJpc29XZWVrZGF5Iixpc293ZWVrZGF5OiJpc29XZWVrZGF5IixEREQ6ImRheU9mWWVhciIsZGF5b2Z5ZWFyczoiZGF5T2ZZZWFyIixkYXlvZnllYXI6ImRheU9mWWVhciIsaDoiaG91ciIsaG91cnM6ImhvdXIiLGhvdXI6ImhvdXIiLG1z''@;'; put 'put ''OiJtaWxsaXNlY29uZCIsbWlsbGlzZWNvbmRzOiJtaWxsaXNlY29uZCIsbWlsbGlzZWNvbmQ6Im1pbGxpc2Vjb25kIixtOiJtaW51dGUiLG1pbnV0ZXM6Im1pbnV0ZSIsbWludXRlOiJtaW51dGUiLE06Im1vbnRoIixtb250aHM6Im1vbnRoIixtb250aDoibW9udGgiLFE6InF1YXJ0ZXIiLHF1''@;'; put 'put ''YXJ0ZXJzOiJxdWFydGVyIixxdWFydGVyOiJxdWFydGVyIixzOiJzZWNvbmQiLHNlY29uZHM6InNlY29uZCIsc2Vjb25kOiJzZWNvbmQiLGdnOiJ3ZWVrWWVhciIsd2Vla3llYXJzOiJ3ZWVrWWVhciIsd2Vla3llYXI6IndlZWtZZWFyIixHRzoiaXNvV2Vla1llYXIiLGlzb3dlZWt5ZWFyczoi''@;'; put 'put ''aXNvV2Vla1llYXIiLGlzb3dlZWt5ZWFyOiJpc29XZWVrWWVhciIsdzoid2VlayIsd2Vla3M6IndlZWsiLHdlZWs6IndlZWsiLFc6Imlzb1dlZWsiLGlzb3dlZWtzOiJpc29XZWVrIixpc293ZWVrOiJpc29XZWVrIix5OiJ5ZWFyIix5ZWFyczoieWVhciIseWVhcjoieWVhciJ9O2Z1bmN0aW9u''@;'; put 'put ''IEplKHllKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHllP3dlW3llXXx8d2VbeWUudG9Mb3dlckNhc2UoKV06dm9pZCAwfWZ1bmN0aW9uIHR0KHllKXt2YXIgY3QsaXQsVWU9e307Zm9yKGl0IGluIHllKUMoeWUsaXQpJiYoY3Q9SmUoaXQpKSYmKFVlW2N0XT15ZVtpdF0pO3JldHVybiBVZX12''@;'; put 'put ''YXIgS2U9e2RhdGU6OSxkYXk6MTEsd2Vla2RheToxMSxpc29XZWVrZGF5OjExLGRheU9mWWVhcjo0LGhvdXI6MTMsbWlsbGlzZWNvbmQ6MTYsbWludXRlOjE0LG1vbnRoOjgscXVhcnRlcjo3LHNlY29uZDoxNSx3ZWVrWWVhcjoxLGlzb1dlZWtZZWFyOjEsd2Vlazo1LGlzb1dlZWs6NSx5ZWFy''@;'; put 'put ''OjF9O3ZhciBadCxSdD0vXGQvLEx0PS9cZFxkLyxHdD0vXGR7M30vLGd0PS9cZHs0fS8sWHQ9L1srLV0/XGR7Nn0vLExyPS9cZFxkPy8sbG49L1xkXGRcZFxkPy8sT249L1xkXGRcZFxkXGRcZD8vLFFyPS9cZHsxLDN9Lyx0cj0vXGR7MSw0fS8sSG49L1srLV0/XGR7MSw2fS8sT289L1xkKy8s''@;'; put 'put ''dXI9L1srLV0/XGQrLyxabj0vWnxbKy1dXGRcZDo/XGRcZC9naSxTbj0vWnxbKy1dXGRcZCg/Ojo/XGRcZCk/L2dpLFR0PS9bMC05XXswLDI1Nn1bJ2Etelx1MDBBMC1cdTA1RkZcdTA3MDAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGMDdcdUZGMTAtXHVGRkVGXXsxLDI1Nn18W1x1''@;'; put 'put ''MDYwMC1cdTA2RkZcL117MSwyNTZ9KFxzKj9bXHUwNjAwLVx1MDZGRl17MSwyNTZ9KXsxLDJ9L2ksQXI9L15bMS05XVxkPy8sX249L14oWzEtOV1cZHxcZCkvO2Z1bmN0aW9uIE5uKHllLFVlLGN0KXtadFt5ZV09ZihVZSk/VWU6ZnVuY3Rpb24oaXQsRnQpe3JldHVybiBpdCYmY3Q/Y3Q6VWV9''@;'; put 'put ''fWZ1bmN0aW9uIHB0KHllLFVlKXtyZXR1cm4gQyhadCx5ZSk/WnRbeWVdKFVlLl9zdHJpY3QsVWUuX2xvY2FsZSk6bmV3IFJlZ0V4cChmdW5jdGlvbiBwbih5ZSl7cmV0dXJuIE1pKHllLnJlcGxhY2UoIlxcIiwiIikucmVwbGFjZSgvXFwoXFspfFxcKFxdKXxcWyhbXlxdXFtdKilcXXxcXCgu''@;'; put 'put ''KS9nLGZ1bmN0aW9uKFVlLGN0LGl0LEZ0LFllKXtyZXR1cm4gY3R8fGl0fHxGdHx8WWV9KSl9KHllKSl9ZnVuY3Rpb24gTWkoeWUpe3JldHVybiB5ZS5yZXBsYWNlKC9bLVwvXFxeJCorPy4oKXxbXF17fV0vZywiXFwkJiIpfWZ1bmN0aW9uIEdlKHllKXtyZXR1cm4geWU8MD9NYXRoLmNlaWwo''@;'; put 'put ''eWUpfHwwOk1hdGguZmxvb3IoeWUpfWZ1bmN0aW9uIFV0KHllKXt2YXIgVWU9K3llLGN0PTA7cmV0dXJuIDAhPT1VZSYmaXNGaW5pdGUoVWUpJiYoY3Q9R2UoVWUpKSxjdH1adD17fTt2YXIgdnI9e307ZnVuY3Rpb24geHQoeWUsVWUpe3ZhciBjdCxGdCxpdD1VZTtmb3IoInN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiB5ZSYmKHllPVt5ZV0pLEwoVWUpJiYoaXQ9ZnVuY3Rpb24oWWUsWGUpe1hlW1VlXT1VdChZZSl9KSxGdD15ZS5sZW5ndGgsY3Q9MDtjdDxGdDtjdCsrKXZyW3llW2N0XV09aXR9ZnVuY3Rpb24gQnQoeWUsVWUpe3h0KHllLGZ1bmN0aW9uKGN0LGl0LEZ0LFllKXtGdC5fdz1GdC5fd3x8''@;'; put 'put ''e30sVWUoY3QsRnQuX3csRnQsWWUpfSl9ZnVuY3Rpb24gem4oeWUsVWUsY3Qpe251bGwhPVVlJiZDKHZyLHllKSYmdnJbeWVdKFVlLGN0Ll9hLGN0LHllKX1mdW5jdGlvbiBHbih5ZSl7cmV0dXJuIHllJTQ9PTAmJnllJTEwMCE9MHx8eWUlNDAwPT0wfXZhciB5bj0wLHZpPTEscnI9Mixocj0z''@;'; put 'put ''LHBvPTQsdm49NSxCbj02LGphPTcsam89ODtmdW5jdGlvbiBYcih5ZSl7cmV0dXJuIEduKHllKT8zNjY6MzY1fV9lKCJZIiwwLDAsZnVuY3Rpb24oKXt2YXIgeWU9dGhpcy55ZWFyKCk7cmV0dXJuIHllPD05OTk5P0QoeWUsNCk6IisiK3llfSksX2UoMCxbIllZIiwyXSwwLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMueWVhcigpJTEwMH0pLF9lKDAsWyJZWVlZIiw0XSwwLCJ5ZWFyIiksX2UoMCxbIllZWVlZIiw1XSwwLCJ5ZWFyIiksX2UoMCxbIllZWVlZWSIsNiwhMF0sMCwieWVhciIpLE5uKCJZIix1ciksTm4oIllZIixMcixMdCksTm4oIllZWVkiLHRyLGd0KSxObigiWVlZWVkiLEhu''@;'; put 'put ''LFh0KSxObigiWVlZWVlZIixIbixYdCkseHQoWyJZWVlZWSIsIllZWVlZWSJdLHluKSx4dCgiWVlZWSIsZnVuY3Rpb24oeWUsVWUpe1VlW3luXT0yPT09eWUubGVuZ3RoP2MucGFyc2VUd29EaWdpdFllYXIoeWUpOlV0KHllKX0pLHh0KCJZWSIsZnVuY3Rpb24oeWUsVWUpe1VlW3luXT1jLnBh''@;'; put 'put ''cnNlVHdvRGlnaXRZZWFyKHllKX0pLHh0KCJZIixmdW5jdGlvbih5ZSxVZSl7VWVbeW5dPXBhcnNlSW50KHllLDEwKX0pLGMucGFyc2VUd29EaWdpdFllYXI9ZnVuY3Rpb24oeWUpe3JldHVybiBVdCh5ZSkrKFV0KHllKT42OD8xOTAwOjJlMyl9O3ZhciB0YSxlYT1jYSgiRnVsbFllYXIiLCEw''@;'; put 'put ''KTtmdW5jdGlvbiBjYSh5ZSxVZSl7cmV0dXJuIGZ1bmN0aW9uKGN0KXtyZXR1cm4gbnVsbCE9Y3Q/KGhvKHRoaXMseWUsY3QpLGMudXBkYXRlT2Zmc2V0KHRoaXMsVWUpLHRoaXMpOkNpKHRoaXMseWUpfX1mdW5jdGlvbiBDaSh5ZSxVZSl7aWYoIXllLmlzVmFsaWQoKSlyZXR1cm4gTmFOO3Zh''@;'; put 'put ''ciBjdD15ZS5fZCxpdD15ZS5faXNVVEM7c3dpdGNoKFVlKXtjYXNlIk1pbGxpc2Vjb25kcyI6cmV0dXJuIGl0P2N0LmdldFVUQ01pbGxpc2Vjb25kcygpOmN0LmdldE1pbGxpc2Vjb25kcygpO2Nhc2UiU2Vjb25kcyI6cmV0dXJuIGl0P2N0LmdldFVUQ1NlY29uZHMoKTpjdC5nZXRTZWNvbmRz''@;'; put 'put ''KCk7Y2FzZSJNaW51dGVzIjpyZXR1cm4gaXQ/Y3QuZ2V0VVRDTWludXRlcygpOmN0LmdldE1pbnV0ZXMoKTtjYXNlIkhvdXJzIjpyZXR1cm4gaXQ/Y3QuZ2V0VVRDSG91cnMoKTpjdC5nZXRIb3VycygpO2Nhc2UiRGF0ZSI6cmV0dXJuIGl0P2N0LmdldFVUQ0RhdGUoKTpjdC5nZXREYXRlKCk7''@;'; put 'put ''Y2FzZSJEYXkiOnJldHVybiBpdD9jdC5nZXRVVENEYXkoKTpjdC5nZXREYXkoKTtjYXNlIk1vbnRoIjpyZXR1cm4gaXQ/Y3QuZ2V0VVRDTW9udGgoKTpjdC5nZXRNb250aCgpO2Nhc2UiRnVsbFllYXIiOnJldHVybiBpdD9jdC5nZXRVVENGdWxsWWVhcigpOmN0LmdldEZ1bGxZZWFyKCk7ZGVm''@;'; put 'put ''YXVsdDpyZXR1cm4gTmFOfX1mdW5jdGlvbiBobyh5ZSxVZSxjdCl7dmFyIGl0LEZ0LFllLFhlLHlpO2lmKHllLmlzVmFsaWQoKSYmIWlzTmFOKGN0KSl7c3dpdGNoKGl0PXllLl9kLEZ0PXllLl9pc1VUQyxVZSl7Y2FzZSJNaWxsaXNlY29uZHMiOnJldHVybiB2b2lkKEZ0P2l0LnNldFVUQ01p''@;'; put 'put ''bGxpc2Vjb25kcyhjdCk6aXQuc2V0TWlsbGlzZWNvbmRzKGN0KSk7Y2FzZSJTZWNvbmRzIjpyZXR1cm4gdm9pZChGdD9pdC5zZXRVVENTZWNvbmRzKGN0KTppdC5zZXRTZWNvbmRzKGN0KSk7Y2FzZSJNaW51dGVzIjpyZXR1cm4gdm9pZChGdD9pdC5zZXRVVENNaW51dGVzKGN0KTppdC5zZXRN''@;'; put 'put ''aW51dGVzKGN0KSk7Y2FzZSJIb3VycyI6cmV0dXJuIHZvaWQoRnQ/aXQuc2V0VVRDSG91cnMoY3QpOml0LnNldEhvdXJzKGN0KSk7Y2FzZSJEYXRlIjpyZXR1cm4gdm9pZChGdD9pdC5zZXRVVENEYXRlKGN0KTppdC5zZXREYXRlKGN0KSk7Y2FzZSJGdWxsWWVhciI6YnJlYWs7ZGVmYXVsdDpy''@;'; put 'put ''ZXR1cm59WWU9Y3QsWGU9eWUubW9udGgoKSx5aT0yOSE9PSh5aT15ZS5kYXRlKCkpfHwxIT09WGV8fEduKFllKT95aToyOCxGdD9pdC5zZXRVVENGdWxsWWVhcihZZSxYZSx5aSk6aXQuc2V0RnVsbFllYXIoWWUsWGUseWkpfX1mdW5jdGlvbiBNcih5ZSxVZSl7aWYoaXNOYU4oeWUpfHxpc05h''@;'; put 'put ''TihVZSkpcmV0dXJuIE5hTjt2YXIgY3Q9ZnVuY3Rpb24gQmkoeWUsVWUpe3JldHVybih5ZSVVZStVZSklVWV9KFVlLDEyKTtyZXR1cm4geWUrPShVZS1jdCkvMTIsMT09PWN0P0duKHllKT8yOToyODozMS1jdCU3JTJ9dGE9QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/QXJyYXkucHJvdG90eXBl''@;'; put 'put ''LmluZGV4T2Y6ZnVuY3Rpb24oeWUpe3ZhciBVZTtmb3IoVWU9MDtVZTx0aGlzLmxlbmd0aDsrK1VlKWlmKHRoaXNbVWVdPT09eWUpcmV0dXJuIFVlO3JldHVybi0xfSxfZSgiTSIsWyJNTSIsMl0sIk1vIixmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vbnRoKCkrMX0pLF9lKCJNTU0iLDAsMCxm''@;'; put 'put ''dW5jdGlvbih5ZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRoc1Nob3J0KHRoaXMseWUpfSksX2UoIk1NTU0iLDAsMCxmdW5jdGlvbih5ZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRocyh0aGlzLHllKX0pLE5uKCJNIixMcixBciksTm4oIk1NIixMcixMdCksTm4oIk1N''@;'; put 'put ''TSIsZnVuY3Rpb24oeWUsVWUpe3JldHVybiBVZS5tb250aHNTaG9ydFJlZ2V4KHllKX0pLE5uKCJNTU1NIixmdW5jdGlvbih5ZSxVZSl7cmV0dXJuIFVlLm1vbnRoc1JlZ2V4KHllKX0pLHh0KFsiTSIsIk1NIl0sZnVuY3Rpb24oeWUsVWUpe1VlW3ZpXT1VdCh5ZSktMX0pLHh0KFsiTU1NIiwi''@;'; put 'put ''TU1NTSJdLGZ1bmN0aW9uKHllLFVlLGN0LGl0KXt2YXIgRnQ9Y3QuX2xvY2FsZS5tb250aHNQYXJzZSh5ZSxpdCxjdC5fc3RyaWN0KTtudWxsIT1GdD9VZVt2aV09RnQ6TihjdCkuaW52YWxpZE1vbnRoPXllfSk7dmFyIEZzPSJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5l''@;'; put 'put ''X0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLCRpPSJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSxfcz0vRFtvRF0/KFxbW15cW1xdXSpcXXxccykrTU1NTT8vLGpzPVR0''@;'; put 'put ''LENsPVR0O2Z1bmN0aW9uIFFoKHllLFVlLGN0KXt2YXIgaXQsRnQsWWUsWGU9eWUudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fbW9udGhzUGFyc2UpZm9yKHRoaXMuX21vbnRoc1BhcnNlPVtdLHRoaXMuX2xvbmdNb250aHNQYXJzZT1bXSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlPVtd''@;'; put 'put ''LGl0PTA7aXQ8MTI7KytpdClZZT1IKFsyZTMsaXRdKSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2l0XT10aGlzLm1vbnRoc1Nob3J0KFllLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX2xvbmdNb250aHNQYXJzZVtpdF09dGhpcy5tb250aHMoWWUsIiIpLnRvTG9jYWxlTG93ZXJDYXNl''@;'; put 'put ''KCk7cmV0dXJuIGN0PyJNTU0iPT09VWU/LTEhPT0oRnQ9dGEuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLFhlKSk/RnQ6bnVsbDotMSE9PShGdD10YS5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxYZSkpP0Z0Om51bGw6Ik1NTSI9PT1VZT8tMSE9PShGdD10YS5jYWxsKHRoaXMuX3No''@;'; put 'put ''b3J0TW9udGhzUGFyc2UsWGUpKXx8LTEhPT0oRnQ9dGEuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsWGUpKT9GdDpudWxsOi0xIT09KEZ0PXRhLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLFhlKSl8fC0xIT09KEZ0PXRhLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxYZSkpP0Z0''@;'; put 'put ''Om51bGx9ZnVuY3Rpb24gSWwoeWUsVWUpe2lmKCF5ZS5pc1ZhbGlkKCkpcmV0dXJuIHllO2lmKCJzdHJpbmciPT10eXBlb2YgVWUpaWYoL15cZCskLy50ZXN0KFVlKSlVZT1VdChVZSk7ZWxzZSBpZighTChVZT15ZS5sb2NhbGVEYXRhKCkubW9udGhzUGFyc2UoVWUpKSlyZXR1cm4geWU7dmFy''@;'; put 'put ''IGN0PVVlLGl0PXllLmRhdGUoKTtyZXR1cm4gaXQ9aXQ8Mjk/aXQ6TWF0aC5taW4oaXQsTXIoeWUueWVhcigpLGN0KSkseWUuX2lzVVRDP3llLl9kLnNldFVUQ01vbnRoKGN0LGl0KTp5ZS5fZC5zZXRNb250aChjdCxpdCkseWV9ZnVuY3Rpb24gZzIoeWUpe3JldHVybiBudWxsIT15ZT8oSWwo''@;'; put 'put ''dGhpcyx5ZSksYy51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpcyk6Q2kodGhpcywiTW9udGgiKX1mdW5jdGlvbiBScygpe2Z1bmN0aW9uIHllKFdhLFNzKXtyZXR1cm4gU3MubGVuZ3RoLVdhLmxlbmd0aH12YXIgRnQsWWUsWGUseWksVWU9W10sY3Q9W10saXQ9W107Zm9yKEZ0PTA7RnQ8MTI7''@;'; put 'put ''RnQrKylZZT1IKFsyZTMsRnRdKSxYZT1NaSh0aGlzLm1vbnRoc1Nob3J0KFllLCIiKSkseWk9TWkodGhpcy5tb250aHMoWWUsIiIpKSxVZS5wdXNoKFhlKSxjdC5wdXNoKHlpKSxpdC5wdXNoKHlpKSxpdC5wdXNoKFhlKTtVZS5zb3J0KHllKSxjdC5zb3J0KHllKSxpdC5zb3J0KHllKSx0aGlz''@;'; put 'put ''Ll9tb250aHNSZWdleD1uZXcgUmVnRXhwKCJeKCIraXQuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9dGhpcy5fbW9udGhzUmVnZXgsdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK2N0LmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9tb250''@;'; put 'put ''aHNTaG9ydFN0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitVZS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gTDAoeWUsVWUsY3QsaXQsRnQsWWUsWGUpe3ZhciB5aTtyZXR1cm4geWU8MTAwJiZ5ZT49MD8oeWk9bmV3IERhdGUoeWUrNDAwLFVlLGN0LGl0LEZ0LFllLFhlKSxpc0Zpbml0''@;'; put 'put ''ZSh5aS5nZXRGdWxsWWVhcigpKSYmeWkuc2V0RnVsbFllYXIoeWUpKTp5aT1uZXcgRGF0ZSh5ZSxVZSxjdCxpdCxGdCxZZSxYZSkseWl9ZnVuY3Rpb24gSnUoeWUpe3ZhciBVZSxjdDtyZXR1cm4geWU8MTAwJiZ5ZT49MD8oKGN0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50''@;'; put 'put ''cykpWzBdPXllKzQwMCxVZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLGN0KSksaXNGaW5pdGUoVWUuZ2V0VVRDRnVsbFllYXIoKSkmJlVlLnNldFVUQ0Z1bGxZZWFyKHllKSk6VWU9bmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCxhcmd1bWVudHMpKSxVZX1mdW5jdGlvbiB5ZCh5''@;'; put 'put ''ZSxVZSxjdCl7dmFyIGl0PTcrVWUtY3Q7cmV0dXJuLSg3K0p1KHllLDAsaXQpLmdldFVUQ0RheSgpLVVlKSU3K2l0LTF9ZnVuY3Rpb24gVW8oeWUsVWUsY3QsaXQsRnQpe3ZhciBXYSxTcyx5aT0xKzcqKFVlLTEpKyg3K2N0LWl0KSU3K3lkKHllLGl0LEZ0KTtyZXR1cm4geWk8PTA/U3M9WHIo''@;'; put 'put ''V2E9eWUtMSkreWk6eWk+WHIoeWUpPyhXYT15ZSsxLFNzPXlpLVhyKHllKSk6KFdhPXllLFNzPXlpKSx7eWVhcjpXYSxkYXlPZlllYXI6U3N9fWZ1bmN0aW9uIGZhKHllLFVlLGN0KXt2YXIgWWUsWGUsaXQ9eWQoeWUueWVhcigpLFVlLGN0KSxGdD1NYXRoLmZsb29yKCh5ZS5kYXlPZlllYXIo''@;'; put 'put ''KS1pdC0xKS83KSsxO3JldHVybiBGdDwxP1llPUZ0K1ZyKFhlPXllLnllYXIoKS0xLFVlLGN0KTpGdD5Wcih5ZS55ZWFyKCksVWUsY3QpPyhZZT1GdC1Wcih5ZS55ZWFyKCksVWUsY3QpLFhlPXllLnllYXIoKSsxKTooWGU9eWUueWVhcigpLFllPUZ0KSx7d2VlazpZZSx5ZWFyOlhlfX1mdW5j''@;'; put 'put ''dGlvbiBWcih5ZSxVZSxjdCl7dmFyIGl0PXlkKHllLFVlLGN0KSxGdD15ZCh5ZSsxLFVlLGN0KTtyZXR1cm4oWHIoeWUpLWl0K0Z0KS83fV9lKCJ3IixbInd3IiwyXSwid28iLCJ3ZWVrIiksX2UoIlciLFsiV1ciLDJdLCJXbyIsImlzb1dlZWsiKSxObigidyIsTHIsQXIpLE5uKCJ3dyIsTHIs''@;'; put 'put ''THQpLE5uKCJXIixMcixBciksTm4oIldXIixMcixMdCksQnQoWyJ3Iiwid3ciLCJXIiwiV1ciXSxmdW5jdGlvbih5ZSxVZSxjdCxpdCl7VWVbaXQuc3Vic3RyKDAsMSldPVV0KHllKX0pO2Z1bmN0aW9uIG5oKHllLFVlKXtyZXR1cm4geWUuc2xpY2UoVWUsNykuY29uY2F0KHllLnNsaWNlKDAs''@;'; put 'put ''VWUpKX1fZSgiZCIsMCwiZG8iLCJkYXkiKSxfZSgiZGQiLDAsMCxmdW5jdGlvbih5ZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMseWUpfSksX2UoImRkZCIsMCwwLGZ1bmN0aW9uKHllKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0''@;'; put 'put ''aGlzLHllKX0pLF9lKCJkZGRkIiwwLDAsZnVuY3Rpb24oeWUpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLHllKX0pLF9lKCJlIiwwLDAsIndlZWtkYXkiKSxfZSgiRSIsMCwwLCJpc29XZWVrZGF5IiksTm4oImQiLExyKSxObigiZSIsTHIpLE5uKCJFIixMciksTm4o''@;'; put 'put ''ImRkIixmdW5jdGlvbih5ZSxVZSl7cmV0dXJuIFVlLndlZWtkYXlzTWluUmVnZXgoeWUpfSksTm4oImRkZCIsZnVuY3Rpb24oeWUsVWUpe3JldHVybiBVZS53ZWVrZGF5c1Nob3J0UmVnZXgoeWUpfSksTm4oImRkZGQiLGZ1bmN0aW9uKHllLFVlKXtyZXR1cm4gVWUud2Vla2RheXNSZWdleCh5''@;'; put 'put ''ZSl9KSxCdChbImRkIiwiZGRkIiwiZGRkZCJdLGZ1bmN0aW9uKHllLFVlLGN0LGl0KXt2YXIgRnQ9Y3QuX2xvY2FsZS53ZWVrZGF5c1BhcnNlKHllLGl0LGN0Ll9zdHJpY3QpO251bGwhPUZ0P1VlLmQ9RnQ6TihjdCkuaW52YWxpZFdlZWtkYXk9eWV9KSxCdChbImQiLCJlIiwiRSJdLGZ1bmN0''@;'; put 'put ''aW9uKHllLFVlLGN0LGl0KXtVZVtpdF09VXQoeWUpfSk7dmFyIHdnPSJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSxKYz0iU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLGdmPSJTdV9Nb19U''@;'; put 'put ''dV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxscD1UdCxEbD1UdCxFbz1UdDtmdW5jdGlvbiBoYyh5ZSxVZSxjdCl7dmFyIGl0LEZ0LFllLFhlPXllLnRvTG9jYWxlTG93ZXJDYXNlKCk7aWYoIXRoaXMuX3dlZWtkYXlzUGFyc2UpZm9yKHRoaXMuX3dlZWtkYXlzUGFyc2U9W10sdGhpcy5fc2hv''@;'; put 'put ''cnRXZWVrZGF5c1BhcnNlPVtdLHRoaXMuX21pbldlZWtkYXlzUGFyc2U9W10saXQ9MDtpdDw3OysraXQpWWU9SChbMmUzLDFdKS5kYXkoaXQpLHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaXRdPXRoaXMud2Vla2RheXNNaW4oWWUsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fc2hvcnRX''@;'; put 'put ''ZWVrZGF5c1BhcnNlW2l0XT10aGlzLndlZWtkYXlzU2hvcnQoWWUsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fd2Vla2RheXNQYXJzZVtpdF09dGhpcy53ZWVrZGF5cyhZZSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKTtyZXR1cm4gY3Q/ImRkZGQiPT09VWU/LTEhPT0oRnQ9dGEuY2Fs''@;'; put 'put ''bCh0aGlzLl93ZWVrZGF5c1BhcnNlLFhlKSk/RnQ6bnVsbDoiZGRkIj09PVVlPy0xIT09KEZ0PXRhLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLFhlKSk/RnQ6bnVsbDotMSE9PShGdD10YS5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsWGUpKT9GdDpudWxsOiJkZGRkIj09PVVl''@;'; put 'put ''Py0xIT09KEZ0PXRhLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxYZSkpfHwtMSE9PShGdD10YS5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxYZSkpfHwtMSE9PShGdD10YS5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsWGUpKT9GdDpudWxsOiJkZGQiPT09VWU/LTEhPT0oRnQ9''@;'; put 'put ''dGEuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsWGUpKXx8LTEhPT0oRnQ9dGEuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLFhlKSl8fC0xIT09KEZ0PXRhLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxYZSkpP0Z0Om51bGw6LTEhPT0oRnQ9dGEuY2FsbCh0aGlzLl9taW5XZWVr''@;'; put 'put ''ZGF5c1BhcnNlLFhlKSl8fC0xIT09KEZ0PXRhLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxYZSkpfHwtMSE9PShGdD10YS5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxYZSkpP0Z0Om51bGx9ZnVuY3Rpb24gaXIoKXtmdW5jdGlvbiB5ZShXcyxjMSl7cmV0dXJuIGMxLmxlbmd0aC1X''@;'; put 'put ''cy5sZW5ndGh9dmFyIFllLFhlLHlpLFdhLFNzLFVlPVtdLGN0PVtdLGl0PVtdLEZ0PVtdO2ZvcihZZT0wO1llPDc7WWUrKylYZT1IKFsyZTMsMV0pLmRheShZZSkseWk9TWkodGhpcy53ZWVrZGF5c01pbihYZSwiIikpLFdhPU1pKHRoaXMud2Vla2RheXNTaG9ydChYZSwiIikpLFNzPU1pKHRo''@;'; put 'put ''aXMud2Vla2RheXMoWGUsIiIpKSxVZS5wdXNoKHlpKSxjdC5wdXNoKFdhKSxpdC5wdXNoKFNzKSxGdC5wdXNoKHlpKSxGdC5wdXNoKFdhKSxGdC5wdXNoKFNzKTtVZS5zb3J0KHllKSxjdC5zb3J0KHllKSxpdC5zb3J0KHllKSxGdC5zb3J0KHllKSx0aGlzLl93ZWVrZGF5c1JlZ2V4PW5ldyBS''@;'; put 'put ''ZWdFeHAoIl4oIitGdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4PXRoaXMuX3dlZWtkYXlzUmVnZXgsdGhpcy5fd2Vla2RheXNNaW5SZWdleD10aGlzLl93ZWVrZGF5c1JlZ2V4LHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK2l0''@;'; put 'put ''LmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK2N0LmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitVZS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24g''@;'; put 'put ''Z2koKXtyZXR1cm4gdGhpcy5ob3VycygpJTEyfHwxMn1mdW5jdGlvbiBscyh5ZSxVZSl7X2UoeWUsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1lcmlkaWVtKHRoaXMuaG91cnMoKSx0aGlzLm1pbnV0ZXMoKSxVZSl9KX1mdW5jdGlvbiBFcih5ZSxVZSl7cmV0dXJu''@;'; put 'put ''IFVlLl9tZXJpZGllbVBhcnNlfV9lKCJIIixbIkhIIiwyXSwwLCJob3VyIiksX2UoImgiLFsiaGgiLDJdLDAsZ2kpLF9lKCJrIixbImtrIiwyXSwwLGZ1bmN0aW9uIHdvKCl7cmV0dXJuIHRoaXMuaG91cnMoKXx8MjR9KSxfZSgiaG1tIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm4iIitnaS5hcHBs''@;'; put 'put ''eSh0aGlzKStEKHRoaXMubWludXRlcygpLDIpfSksX2UoImhtbXNzIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm4iIitnaS5hcHBseSh0aGlzKStEKHRoaXMubWludXRlcygpLDIpK0QodGhpcy5zZWNvbmRzKCksMil9KSxfZSgiSG1tIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm4iIit0aGlzLmhvdXJz''@;'; put 'put ''KCkrRCh0aGlzLm1pbnV0ZXMoKSwyKX0pLF9lKCJIbW1zcyIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5ob3VycygpK0QodGhpcy5taW51dGVzKCksMikrRCh0aGlzLnNlY29uZHMoKSwyKX0pLGxzKCJhIiwhMCksbHMoIkEiLCExKSxObigiYSIsRXIpLE5uKCJBIixFciksTm4oIkgi''@;'; put 'put ''LExyLF9uKSxObigiaCIsTHIsQXIpLE5uKCJrIixMcixBciksTm4oIkhIIixMcixMdCksTm4oImhoIixMcixMdCksTm4oImtrIixMcixMdCksTm4oImhtbSIsbG4pLE5uKCJobW1zcyIsT24pLE5uKCJIbW0iLGxuKSxObigiSG1tc3MiLE9uKSx4dChbIkgiLCJISCJdLGhyKSx4dChbImsiLCJr''@;'; put 'put ''ayJdLGZ1bmN0aW9uKHllLFVlLGN0KXt2YXIgaXQ9VXQoeWUpO1VlW2hyXT0yND09PWl0PzA6aXR9KSx4dChbImEiLCJBIl0sZnVuY3Rpb24oeWUsVWUsY3Qpe2N0Ll9pc1BtPWN0Ll9sb2NhbGUuaXNQTSh5ZSksY3QuX21lcmlkaWVtPXllfSkseHQoWyJoIiwiaGgiXSxmdW5jdGlvbih5ZSxV''@;'; put 'put ''ZSxjdCl7VWVbaHJdPVV0KHllKSxOKGN0KS5iaWdIb3VyPSEwfSkseHQoImhtbSIsZnVuY3Rpb24oeWUsVWUsY3Qpe3ZhciBpdD15ZS5sZW5ndGgtMjtVZVtocl09VXQoeWUuc3Vic3RyKDAsaXQpKSxVZVtwb109VXQoeWUuc3Vic3RyKGl0KSksTihjdCkuYmlnSG91cj0hMH0pLHh0KCJobW1z''@;'; put 'put ''cyIsZnVuY3Rpb24oeWUsVWUsY3Qpe3ZhciBpdD15ZS5sZW5ndGgtNCxGdD15ZS5sZW5ndGgtMjtVZVtocl09VXQoeWUuc3Vic3RyKDAsaXQpKSxVZVtwb109VXQoeWUuc3Vic3RyKGl0LDIpKSxVZVt2bl09VXQoeWUuc3Vic3RyKEZ0KSksTihjdCkuYmlnSG91cj0hMH0pLHh0KCJIbW0iLGZ1''@;'; put 'put ''bmN0aW9uKHllLFVlLGN0KXt2YXIgaXQ9eWUubGVuZ3RoLTI7VWVbaHJdPVV0KHllLnN1YnN0cigwLGl0KSksVWVbcG9dPVV0KHllLnN1YnN0cihpdCkpfSkseHQoIkhtbXNzIixmdW5jdGlvbih5ZSxVZSxjdCl7dmFyIGl0PXllLmxlbmd0aC00LEZ0PXllLmxlbmd0aC0yO1VlW2hyXT1VdCh5''@;'; put 'put ''ZS5zdWJzdHIoMCxpdCkpLFVlW3BvXT1VdCh5ZS5zdWJzdHIoaXQsMikpLFVlW3ZuXT1VdCh5ZS5zdWJzdHIoRnQpKX0pO3ZhciB1bD1jYSgiSG91cnMiLCEwKTt2YXIgTGwsdHU9e2NhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixu''@;'; put 'put ''ZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUUzoiaDptbTpzcyBBIixMVDoiaDptbSBBIixMOiJNTS9ERC9ZWVlZIixMTDoiTU1NTSBE''@;'; put 'put ''LCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEifSxpbnZhbGlkRGF0ZToiSW52YWxpZCBkYXRlIixvcmRpbmFsOiIlZCIsZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS8scmVsYXRpdmVUaW1lOntmdXR1cmU6Imlu''@;'; put 'put ''ICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIix3OiJhIHdlZWsiLHd3OiIlZCB3ZWVrcyIsTToiYSBtb250''@;'; put 'put ''aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxtb250aHM6RnMsbW9udGhzU2hvcnQ6JGksd2Vlazp7ZG93OjAsZG95OjZ9LHdlZWtkYXlzOndnLHdlZWtkYXlzTWluOmdmLHdlZWtkYXlzU2hvcnQ6SmMsbWVyaWRpZW1QYXJzZTovW2FwXVwuP20/XC4/L2l9LGdz''@;'; put 'put ''PXt9LE9jPXt9O2Z1bmN0aW9uIEFoKHllLFVlKXt2YXIgY3QsaXQ9TWF0aC5taW4oeWUubGVuZ3RoLFVlLmxlbmd0aCk7Zm9yKGN0PTA7Y3Q8aXQ7Y3QrPTEpaWYoeWVbY3RdIT09VWVbY3RdKXJldHVybiBjdDtyZXR1cm4gaXR9ZnVuY3Rpb24gSmgoeWUpe3JldHVybiB5ZSYmeWUudG9Mb3dl''@;'; put 'put ''ckNhc2UoKS5yZXBsYWNlKCJfIiwiLSIpfWZ1bmN0aW9uIEZyKHllKXt2YXIgVWU9bnVsbDtpZih2b2lkIDA9PT1nc1t5ZV0mJmZlJiZmZS5leHBvcnRzJiZmdW5jdGlvbiBFYyh5ZSl7cmV0dXJuISgheWV8fCF5ZS5tYXRjaCgiXlteL1xcXFxdKiQiKSl9KHllKSl0cnl7VWU9TGwuX2FiYnIs''@;'; put 'put ''aCgzNTM1OCkoIi4vIit5ZSksSXUoVWUpfWNhdGNoe2dzW3llXT1udWxsfXJldHVybiBnc1t5ZV19ZnVuY3Rpb24gSXUoeWUsVWUpe3ZhciBjdDtyZXR1cm4geWUmJigoY3Q9UyhVZSk/cmgoeWUpOk1jKHllLFVlKSk/TGw9Y3Q6dHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLndhcm4mJmNv''@;'; put 'put ''bnNvbGUud2FybigiTG9jYWxlICIreWUrIiBub3QgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGxvYWQgaXQ/IikpLExsLl9hYmJyfWZ1bmN0aW9uIE1jKHllLFVlKXtpZihudWxsIT09VWUpe3ZhciBjdCxpdD10dTtpZihVZS5hYmJyPXllLG51bGwhPWdzW3llXSlYKCJkZWZpbmVMb2NhbGVP''@;'; put 'put ''dmVycmlkZSIsInVzZSBtb21lbnQudXBkYXRlTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgdG8gY2hhbmdlIGFuIGV4aXN0aW5nIGxvY2FsZS4gbW9tZW50LmRlZmluZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxv''@;'; put 'put ''Y2FsZSBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kZWZpbmUtbG9jYWxlLyBmb3IgbW9yZSBpbmZvLiIpLGl0PWdzW3llXS5fY29uZmlnO2Vsc2UgaWYobnVsbCE9VWUucGFyZW50TG9jYWxlKWlmKG51bGwhPWdzW1VlLnBhcmVudExvY2FsZV0paXQ9Z3NbVWUu''@;'; put 'put ''cGFyZW50TG9jYWxlXS5fY29uZmlnO2Vsc2V7aWYobnVsbD09KGN0PUZyKFVlLnBhcmVudExvY2FsZSkpKXJldHVybiBPY1tVZS5wYXJlbnRMb2NhbGVdfHwoT2NbVWUucGFyZW50TG9jYWxlXT1bXSksT2NbVWUucGFyZW50TG9jYWxlXS5wdXNoKHtuYW1lOnllLGNvbmZpZzpVZX0pLG51bGw7''@;'; put 'put ''aXQ9Y3QuX2NvbmZpZ31yZXR1cm4gZ3NbeWVdPW5ldyBNKGsoaXQsVWUpKSxPY1t5ZV0mJk9jW3llXS5mb3JFYWNoKGZ1bmN0aW9uKEZ0KXtNYyhGdC5uYW1lLEZ0LmNvbmZpZyl9KSxJdSh5ZSksZ3NbeWVdfXJldHVybiBkZWxldGUgZ3NbeWVdLG51bGx9ZnVuY3Rpb24gcmgoeWUpe3ZhciBV''@;'; put 'put ''ZTtpZih5ZSYmeWUuX2xvY2FsZSYmeWUuX2xvY2FsZS5fYWJiciYmKHllPXllLl9sb2NhbGUuX2FiYnIpLCF5ZSlyZXR1cm4gTGw7aWYoIUEoeWUpKXtpZihVZT1Gcih5ZSkpcmV0dXJuIFVlO3llPVt5ZV19cmV0dXJuIGZ1bmN0aW9uIE9sKHllKXtmb3IodmFyIGN0LGl0LEZ0LFllLFVlPTA7''@;'; put 'put ''VWU8eWUubGVuZ3RoOyl7Zm9yKGN0PShZZT1KaCh5ZVtVZV0pLnNwbGl0KCItIikpLmxlbmd0aCxpdD0oaXQ9SmgoeWVbVWUrMV0pKT9pdC5zcGxpdCgiLSIpOm51bGw7Y3Q+MDspe2lmKEZ0PUZyKFllLnNsaWNlKDAsY3QpLmpvaW4oIi0iKSkpcmV0dXJuIEZ0O2lmKGl0JiZpdC5sZW5ndGg+''@;'; put 'put ''PWN0JiZBaChZZSxpdCk+PWN0LTEpYnJlYWs7Y3QtLX1VZSsrfXJldHVybiBMbH0oeWUpfWZ1bmN0aW9uIHYyKHllKXt2YXIgVWUsY3Q9eWUuX2E7cmV0dXJuIGN0JiYtMj09PU4oeWUpLm92ZXJmbG93JiYoVWU9Y3RbdmldPDB8fGN0W3ZpXT4xMT92aTpjdFtycl08MXx8Y3RbcnJdPk1yKGN0''@;'; put 'put ''W3luXSxjdFt2aV0pP3JyOmN0W2hyXTwwfHxjdFtocl0+MjR8fDI0PT09Y3RbaHJdJiYoMCE9PWN0W3BvXXx8MCE9PWN0W3ZuXXx8MCE9PWN0W0JuXSk/aHI6Y3RbcG9dPDB8fGN0W3BvXT41OT9wbzpjdFt2bl08MHx8Y3Rbdm5dPjU5P3ZuOmN0W0JuXTwwfHxjdFtCbl0+OTk5P0JuOi0xLE4o''@;'; put 'put ''eWUpLl9vdmVyZmxvd0RheU9mWWVhciYmKFVlPHlufHxVZT5ycikmJihVZT1yciksTih5ZSkuX292ZXJmbG93V2Vla3MmJi0xPT09VWUmJihVZT1qYSksTih5ZSkuX292ZXJmbG93V2Vla2RheSYmLTE9PT1VZSYmKFVlPWpvKSxOKHllKS5vdmVyZmxvdz1VZSkseWV9dmFyIHRkPS9eXHMqKCg/''@;'; put 'put ''OlsrLV1cZHs2fXxcZHs0fSktKD86XGRcZC1cZFxkfFdcZFxkLVxkfFdcZFxkfFxkXGRcZHxcZFxkKSkoPzooVHwgKShcZFxkKD86OlxkXGQoPzo6XGRcZCg/OlsuLF1cZCspPyk/KT8pKFsrLV1cZFxkKD86Oj9cZFxkKT98XHMqWik/KT8kLyxPMD0vXlxzKigoPzpbKy1dXGR7Nn18XGR7NH0p''@;'; put 'put ''KD86XGRcZFxkXGR8V1xkXGRcZHxXXGRcZHxcZFxkXGR8XGRcZHwpKSg/OihUfCApKFxkXGQoPzpcZFxkKD86XGRcZCg/OlsuLF1cZCspPyk/KT8pKFsrLV1cZFxkKD86Oj9cZFxkKT98XHMqWik/KT8kLyxPbT0vWnxbKy1dXGRcZCg/Ojo/XGRcZCk/LyxpYT1bWyJZWVlZWVktTU0tREQiLC9b''@;'; put 'put ''Ky1dXGR7Nn0tXGRcZC1cZFxkL10sWyJZWVlZLU1NLUREIiwvXGR7NH0tXGRcZC1cZFxkL10sWyJHR0dHLVtXXVdXLUUiLC9cZHs0fS1XXGRcZC1cZC9dLFsiR0dHRy1bV11XVyIsL1xkezR9LVdcZFxkLywhMV0sWyJZWVlZLURERCIsL1xkezR9LVxkezN9L10sWyJZWVlZLU1NIiwvXGR7NH0t''@;'; put 'put ''XGRcZC8sITFdLFsiWVlZWVlZTU1ERCIsL1srLV1cZHsxMH0vXSxbIllZWVlNTUREIiwvXGR7OH0vXSxbIkdHR0dbV11XV0UiLC9cZHs0fVdcZHszfS9dLFsiR0dHR1tXXVdXIiwvXGR7NH1XXGR7Mn0vLCExXSxbIllZWVlEREQiLC9cZHs3fS9dLFsiWVlZWU1NIiwvXGR7Nn0vLCExXSxbIllZ''@;'; put 'put ''WVkiLC9cZHs0fS8sITFdXSx6bz1bWyJISDptbTpzcy5TU1NTIiwvXGRcZDpcZFxkOlxkXGRcLlxkKy9dLFsiSEg6bW06c3MsU1NTUyIsL1xkXGQ6XGRcZDpcZFxkLFxkKy9dLFsiSEg6bW06c3MiLC9cZFxkOlxkXGQ6XGRcZC9dLFsiSEg6bW0iLC9cZFxkOlxkXGQvXSxbIkhIbW1zcy5TU1NT''@;'; put 'put ''IiwvXGRcZFxkXGRcZFxkXC5cZCsvXSxbIkhIbW1zcyxTU1NTIiwvXGRcZFxkXGRcZFxkLFxkKy9dLFsiSEhtbXNzIiwvXGRcZFxkXGRcZFxkL10sWyJISG1tIiwvXGRcZFxkXGQvXSxbIkhIIiwvXGRcZC9dXSxDZz0vXlwvP0RhdGVcKCgtP1xkKykvaSxfMj0vXig/OihNb258VHVlfFdlZHxU''@;'; put 'put ''aHV8RnJpfFNhdHxTdW4pLD9ccyk/KFxkezEsMn0pXHMoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpXHMoXGR7Miw0fSlccyhcZFxkKTooXGRcZCkoPzo6KFxkXGQpKT9ccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxkezR9KSkk''@;'; put 'put ''LyxUYz17VVQ6MCxHTVQ6MCxFRFQ6LTI0MCxFU1Q6LTMwMCxDRFQ6LTMwMCxDU1Q6LTM2MCxNRFQ6LTM2MCxNU1Q6LTQyMCxQRFQ6LTQyMCxQU1Q6LTQ4MH07ZnVuY3Rpb24gbXMoeWUpe3ZhciBVZSxjdCxZZSxYZSx5aSxXYSxpdD15ZS5faSxGdD10ZC5leGVjKGl0KXx8TzAuZXhlYyhpdCks''@;'; put 'put ''U3M9aWEubGVuZ3RoLFdzPXpvLmxlbmd0aDtpZihGdCl7Zm9yKE4oeWUpLmlzbz0hMCxVZT0wLGN0PVNzO1VlPGN0O1VlKyspaWYoaWFbVWVdWzFdLmV4ZWMoRnRbMV0pKXtYZT1pYVtVZV1bMF0sWWU9ITEhPT1pYVtVZV1bMl07YnJlYWt9aWYobnVsbD09WGUpcmV0dXJuIHZvaWQoeWUuX2lz''@;'; put 'put ''VmFsaWQ9ITEpO2lmKEZ0WzNdKXtmb3IoVWU9MCxjdD1XcztVZTxjdDtVZSsrKWlmKHpvW1VlXVsxXS5leGVjKEZ0WzNdKSl7eWk9KEZ0WzJdfHwiICIpK3pvW1VlXVswXTticmVha31pZihudWxsPT15aSlyZXR1cm4gdm9pZCh5ZS5faXNWYWxpZD0hMSl9aWYoIVllJiZudWxsIT15aSlyZXR1''@;'; put 'put ''cm4gdm9pZCh5ZS5faXNWYWxpZD0hMSk7aWYoRnRbNF0pe2lmKCFPbS5leGVjKEZ0WzRdKSlyZXR1cm4gdm9pZCh5ZS5faXNWYWxpZD0hMSk7V2E9IloifXllLl9mPVhlKyh5aXx8IiIpKyhXYXx8IiIpLEZuKHllKX1lbHNlIHllLl9pc1ZhbGlkPSExfWZ1bmN0aW9uIE5tKHllKXt2YXIgVWU9''@;'; put 'put ''cGFyc2VJbnQoeWUsMTApO3JldHVybiBVZTw9NDk/MmUzK1VlOlVlPD05OTk/MTkwMCtVZTpVZX1mdW5jdGlvbiB6YSh5ZSl7dmFyIGN0LFVlPV8yLmV4ZWMoZnVuY3Rpb24gbjgoeWUpe3JldHVybiB5ZS5yZXBsYWNlKC9cKFteKCldKlwpfFtcblx0XS9nLCIgIikucmVwbGFjZSgvKFxzXHMr''@;'; put 'put ''KS9nLCIgIikucmVwbGFjZSgvXlxzXHMqLywiIikucmVwbGFjZSgvXHNccyokLywiIil9KHllLl9pKSk7aWYoVWUpe2lmKGN0PWZ1bmN0aW9uIEYxKHllLFVlLGN0LGl0LEZ0LFllKXt2YXIgWGU9W05tKHllKSwkaS5pbmRleE9mKFVlKSxwYXJzZUludChjdCwxMCkscGFyc2VJbnQoaXQsMTAp''@;'; put 'put ''LHBhcnNlSW50KEZ0LDEwKV07cmV0dXJuIFllJiZYZS5wdXNoKHBhcnNlSW50KFllLDEwKSksWGV9KFVlWzRdLFVlWzNdLFVlWzJdLFVlWzVdLFVlWzZdLFVlWzddKSwhZnVuY3Rpb24gSXMoeWUsVWUsY3Qpe3JldHVybiF5ZXx8SmMuaW5kZXhPZih5ZSk9PT1uZXcgRGF0ZShVZVswXSxVZVsx''@;'; put 'put ''XSxVZVsyXSkuZ2V0RGF5KCl8fChOKGN0KS53ZWVrZGF5TWlzbWF0Y2g9ITAsY3QuX2lzVmFsaWQ9ITEsITEpfShVZVsxXSxjdCx5ZSkpcmV0dXJuO3llLl9hPWN0LHllLl90em09ZnVuY3Rpb24gcWkoeWUsVWUsY3Qpe2lmKHllKXJldHVybiBUY1t5ZV07aWYoVWUpcmV0dXJuIDA7dmFyIGl0''@;'; put 'put ''PXBhcnNlSW50KGN0LDEwKSxGdD1pdCUxMDA7cmV0dXJuKGl0LUZ0KS8xMDAqNjArRnR9KFVlWzhdLFVlWzldLFVlWzEwXSkseWUuX2Q9SnUuYXBwbHkobnVsbCx5ZS5fYSkseWUuX2Quc2V0VVRDTWludXRlcyh5ZS5fZC5nZXRVVENNaW51dGVzKCkteWUuX3R6bSksTih5ZSkucmZjMjgyMj0h''@;'; put 'put ''MH1lbHNlIHllLl9pc1ZhbGlkPSExfWZ1bmN0aW9uIHl0KHllLFVlLGN0KXtyZXR1cm4geWU/P1VlPz9jdH1mdW5jdGlvbiB6dCh5ZSl7dmFyIFVlLGN0LEZ0LFllLFhlLGl0PVtdO2lmKCF5ZS5fZCl7Zm9yKEZ0PWZ1bmN0aW9uIGp0KHllKXt2YXIgVWU9bmV3IERhdGUoYy5ub3coKSk7cmV0''@;'; put 'put ''dXJuIHllLl91c2VVVEM/W1VlLmdldFVUQ0Z1bGxZZWFyKCksVWUuZ2V0VVRDTW9udGgoKSxVZS5nZXRVVENEYXRlKCldOltVZS5nZXRGdWxsWWVhcigpLFVlLmdldE1vbnRoKCksVWUuZ2V0RGF0ZSgpXX0oeWUpLHllLl93JiZudWxsPT15ZS5fYVtycl0mJm51bGw9PXllLl9hW3ZpXSYmZnVu''@;'; put 'put ''Y3Rpb24gbW4oeWUpe3ZhciBVZSxjdCxpdCxGdCxZZSxYZSx5aSxXYSxTcztudWxsIT0oVWU9eWUuX3cpLkdHfHxudWxsIT1VZS5XfHxudWxsIT1VZS5FPyhZZT0xLFhlPTQsY3Q9eXQoVWUuR0cseWUuX2FbeW5dLGZhKFJvKCksMSw0KS55ZWFyKSxpdD15dChVZS5XLDEpLCgoRnQ9eXQoVWUu''@;'; put 'put ''RSwxKSk8MXx8RnQ+NykmJihXYT0hMCkpOihZZT15ZS5fbG9jYWxlLl93ZWVrLmRvdyxYZT15ZS5fbG9jYWxlLl93ZWVrLmRveSxTcz1mYShSbygpLFllLFhlKSxjdD15dChVZS5nZyx5ZS5fYVt5bl0sU3MueWVhciksaXQ9eXQoVWUudyxTcy53ZWVrKSxudWxsIT1VZS5kPygoRnQ9VWUuZCk8''@;'; put 'put ''MHx8RnQ+NikmJihXYT0hMCk6bnVsbCE9VWUuZT8oRnQ9VWUuZStZZSwoVWUuZTwwfHxVZS5lPjYpJiYoV2E9ITApKTpGdD1ZZSksaXQ8MXx8aXQ+VnIoY3QsWWUsWGUpP04oeWUpLl9vdmVyZmxvd1dlZWtzPSEwOm51bGwhPVdhP04oeWUpLl9vdmVyZmxvd1dlZWtkYXk9ITA6KHlpPVVvKGN0''@;'; put 'put ''LGl0LEZ0LFllLFhlKSx5ZS5fYVt5bl09eWkueWVhcix5ZS5fZGF5T2ZZZWFyPXlpLmRheU9mWWVhcil9KHllKSxudWxsIT15ZS5fZGF5T2ZZZWFyJiYoWGU9eXQoeWUuX2FbeW5dLEZ0W3luXSksKHllLl9kYXlPZlllYXI+WHIoWGUpfHwwPT09eWUuX2RheU9mWWVhcikmJihOKHllKS5fb3Zl''@;'; put 'put ''cmZsb3dEYXlPZlllYXI9ITApLGN0PUp1KFhlLDAseWUuX2RheU9mWWVhcikseWUuX2FbdmldPWN0LmdldFVUQ01vbnRoKCkseWUuX2FbcnJdPWN0LmdldFVUQ0RhdGUoKSksVWU9MDtVZTwzJiZudWxsPT15ZS5fYVtVZV07KytVZSl5ZS5fYVtVZV09aXRbVWVdPUZ0W1VlXTtmb3IoO1VlPDc7''@;'; put 'put ''VWUrKyl5ZS5fYVtVZV09aXRbVWVdPW51bGw9PXllLl9hW1VlXT8yPT09VWU/MTowOnllLl9hW1VlXTsyND09PXllLl9hW2hyXSYmMD09PXllLl9hW3BvXSYmMD09PXllLl9hW3ZuXSYmMD09PXllLl9hW0JuXSYmKHllLl9uZXh0RGF5PSEwLHllLl9hW2hyXT0wKSx5ZS5fZD0oeWUuX3VzZVVU''@;'; put 'put ''Qz9KdTpMMCkuYXBwbHkobnVsbCxpdCksWWU9eWUuX3VzZVVUQz95ZS5fZC5nZXRVVENEYXkoKTp5ZS5fZC5nZXREYXkoKSxudWxsIT15ZS5fdHptJiZ5ZS5fZC5zZXRVVENNaW51dGVzKHllLl9kLmdldFVUQ01pbnV0ZXMoKS15ZS5fdHptKSx5ZS5fbmV4dERheSYmKHllLl9hW2hyXT0yNCks''@;'; put 'put ''eWUuX3cmJnR5cGVvZiB5ZS5fdy5kPCJ1IiYmeWUuX3cuZCE9PVllJiYoTih5ZSkud2Vla2RheU1pc21hdGNoPSEwKX19ZnVuY3Rpb24gRm4oeWUpe2lmKHllLl9mIT09Yy5JU09fODYwMSlpZih5ZS5fZiE9PWMuUkZDXzI4MjIpe3llLl9hPVtdLE4oeWUpLmVtcHR5PSEwO3ZhciBjdCxpdCxG''@;'; put 'put ''dCxZZSxYZSxTcyxXcyxVZT0iIit5ZS5faSx5aT1VZS5sZW5ndGgsV2E9MDtmb3IoV3M9KEZ0PWR0KHllLl9mLHllLl9sb2NhbGUpLm1hdGNoKHApfHxbXSkubGVuZ3RoLGN0PTA7Y3Q8V3M7Y3QrKykoaXQ9KFVlLm1hdGNoKHB0KFllPUZ0W2N0XSx5ZSkpfHxbXSlbMF0pJiYoKFhlPVVlLnN1''@;'; put 'put ''YnN0cigwLFVlLmluZGV4T2YoaXQpKSkubGVuZ3RoPjAmJk4oeWUpLnVudXNlZElucHV0LnB1c2goWGUpLFVlPVVlLnNsaWNlKFVlLmluZGV4T2YoaXQpK2l0Lmxlbmd0aCksV2ErPWl0Lmxlbmd0aCksbmVbWWVdPyhpdD9OKHllKS5lbXB0eT0hMTpOKHllKS51bnVzZWRUb2tlbnMucHVzaChZ''@;'; put 'put ''ZSksem4oWWUsaXQseWUpKTp5ZS5fc3RyaWN0JiYhaXQmJk4oeWUpLnVudXNlZFRva2Vucy5wdXNoKFllKTtOKHllKS5jaGFyc0xlZnRPdmVyPXlpLVdhLFVlLmxlbmd0aD4wJiZOKHllKS51bnVzZWRJbnB1dC5wdXNoKFVlKSx5ZS5fYVtocl08PTEyJiYhMD09PU4oeWUpLmJpZ0hvdXImJnll''@;'; put 'put ''Ll9hW2hyXT4wJiYoTih5ZSkuYmlnSG91cj12b2lkIDApLE4oeWUpLnBhcnNlZERhdGVQYXJ0cz15ZS5fYS5zbGljZSgwKSxOKHllKS5tZXJpZGllbT15ZS5fbWVyaWRpZW0seWUuX2FbaHJdPWZ1bmN0aW9uIFFuKHllLFVlLGN0KXt2YXIgaXQ7cmV0dXJuIG51bGw9PWN0P1VlOm51bGwhPXll''@;'; put 'put ''Lm1lcmlkaWVtSG91cj95ZS5tZXJpZGllbUhvdXIoVWUsY3QpOihudWxsIT15ZS5pc1BNJiYoKGl0PXllLmlzUE0oY3QpKSYmVWU8MTImJihVZSs9MTIpLCFpdCYmMTI9PT1VZSYmKFVlPTApKSxVZSl9KHllLl9sb2NhbGUseWUuX2FbaHJdLHllLl9tZXJpZGllbSksbnVsbCE9PShTcz1OKHll''@;'; put 'put ''KS5lcmEpJiYoeWUuX2FbeW5dPXllLl9sb2NhbGUuZXJhc0NvbnZlcnRZZWFyKFNzLHllLl9hW3luXSkpLHp0KHllKSx2Mih5ZSl9ZWxzZSB6YSh5ZSk7ZWxzZSBtcyh5ZSl9ZnVuY3Rpb24gV2koeWUpe3ZhciBVZT15ZS5faSxjdD15ZS5fZjtyZXR1cm4geWUuX2xvY2FsZT15ZS5fbG9jYWxl''@;'; put 'put ''fHxyaCh5ZS5fbCksbnVsbD09PVVlfHx2b2lkIDA9PT1jdCYmIiI9PT1VZT9GKHtudWxsSW5wdXQ6ITB9KTooInN0cmluZyI9PXR5cGVvZiBVZSYmKHllLl9pPVVlPXllLl9sb2NhbGUucHJlcGFyc2UoVWUpKSxDZShVZSk/bmV3IG1lKHYyKFVlKSk6KFIoVWUpP3llLl9kPVVlOkEoY3QpP2Z1''@;'; put 'put ''bmN0aW9uIGxyKHllKXt2YXIgVWUsY3QsaXQsRnQsWWUsWGUseWk9ITEsV2E9eWUuX2YubGVuZ3RoO2lmKDA9PT1XYSlyZXR1cm4gTih5ZSkuaW52YWxpZEZvcm1hdD0hMCx2b2lkKHllLl9kPW5ldyBEYXRlKE5hTikpO2ZvcihGdD0wO0Z0PFdhO0Z0KyspWWU9MCxYZT0hMSxVZT1yZSh7fSx5''@;'; put 'put ''ZSksbnVsbCE9eWUuX3VzZVVUQyYmKFVlLl91c2VVVEM9eWUuX3VzZVVUQyksVWUuX2Y9eWUuX2ZbRnRdLEZuKFVlKSxZKFVlKSYmKFhlPSEwKSxZZSs9TihVZSkuY2hhcnNMZWZ0T3ZlcixZZSs9MTAqTihVZSkudW51c2VkVG9rZW5zLmxlbmd0aCxOKFVlKS5zY29yZT1ZZSx5aT9ZZTxpdCYm''@;'; put 'put ''KGl0PVllLGN0PVVlKToobnVsbD09aXR8fFllPGl0fHxYZSkmJihpdD1ZZSxjdD1VZSxYZSYmKHlpPSEwKSk7VSh5ZSxjdHx8VWUpfSh5ZSk6Y3Q/Rm4oeWUpOmZ1bmN0aW9uIEtpKHllKXt2YXIgVWU9eWUuX2k7UyhVZSk/eWUuX2Q9bmV3IERhdGUoYy5ub3coKSk6UihVZSk/eWUuX2Q9bmV3''@;'; put 'put ''IERhdGUoVWUudmFsdWVPZigpKToic3RyaW5nIj09dHlwZW9mIFVlP2Z1bmN0aW9uIGh0KHllKXt2YXIgVWU9Q2cuZXhlYyh5ZS5faSk7bnVsbD09PVVlPyhtcyh5ZSksITE9PT15ZS5faXNWYWxpZCYmKGRlbGV0ZSB5ZS5faXNWYWxpZCx6YSh5ZSksITE9PT15ZS5faXNWYWxpZCYmKGRlbGV0''@;'; put 'put ''ZSB5ZS5faXNWYWxpZCx5ZS5fc3RyaWN0P3llLl9pc1ZhbGlkPSExOmMuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soeWUpKSkpOnllLl9kPW5ldyBEYXRlKCtVZVsxXSl9KHllKTpBKFVlKT8oeWUuX2E9eChVZS5zbGljZSgwKSxmdW5jdGlvbihjdCl7cmV0dXJuIHBhcnNlSW50KGN0LDEwKX0p''@;'; put 'put ''LHp0KHllKSk6dihVZSk/ZnVuY3Rpb24gaWkoeWUpe2lmKCF5ZS5fZCl7dmFyIFVlPXR0KHllLl9pKTt5ZS5fYT14KFtVZS55ZWFyLFVlLm1vbnRoLHZvaWQgMD09PVVlLmRheT9VZS5kYXRlOlVlLmRheSxVZS5ob3VyLFVlLm1pbnV0ZSxVZS5zZWNvbmQsVWUubWlsbGlzZWNvbmRdLGZ1bmN0''@;'; put 'put ''aW9uKGl0KXtyZXR1cm4gaXQmJnBhcnNlSW50KGl0LDEwKX0pLHp0KHllKX19KHllKTpMKFVlKT95ZS5fZD1uZXcgRGF0ZShVZSk6Yy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayh5ZSl9KHllKSxZKHllKXx8KHllLl9kPW51bGwpLHllKSl9ZnVuY3Rpb24gTmEoeWUsVWUsY3QsaXQsRnQpe3Zh''@;'; put 'put ''ciBZZT17fTtyZXR1cm4oITA9PT1VZXx8ITE9PT1VZSkmJihpdD1VZSxVZT12b2lkIDApLCghMD09PWN0fHwhMT09PWN0KSYmKGl0PWN0LGN0PXZvaWQgMCksKHYoeWUpJiZ3KHllKXx8QSh5ZSkmJjA9PT15ZS5sZW5ndGgpJiYoeWU9dm9pZCAwKSxZZS5faXNBTW9tZW50T2JqZWN0PSEwLFll''@;'; put 'put ''Ll91c2VVVEM9WWUuX2lzVVRDPUZ0LFllLl9sPWN0LFllLl9pPXllLFllLl9mPVVlLFllLl9zdHJpY3Q9aXQsZnVuY3Rpb24ga2koeWUpe3ZhciBVZT1uZXcgbWUodjIoV2koeWUpKSk7cmV0dXJuIFVlLl9uZXh0RGF5JiYoVWUuYWRkKDEsImQiKSxVZS5fbmV4dERheT12b2lkIDApLFVlfShZ''@;'; put 'put ''ZSl9ZnVuY3Rpb24gUm8oeWUsVWUsY3QsaXQpe3JldHVybiBOYSh5ZSxVZSxjdCxpdCwhMSl9Yy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjaz1rZSgidmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24g''@;'; put 'put ''ZmFsbHMgYmFjayB0byBqcyBEYXRlKCksIHdoaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1''@;'; put 'put ''aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uIixmdW5jdGlvbih5ZSl7eWUuX2Q9bmV3IERhdGUoeWUuX2krKHllLl91c2VVVEM/IiBVVEMiOiIiKSl9KSxjLklTT184NjAxPWZ1bmN0aW9uKCl7fSxjLlJGQ18yODIyPWZ1bmN0aW9uKCl7fTt2YXIgZGw9a2UoIm1vbWVu''@;'; put 'put ''dCgpLm1pbiBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1heCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvIixmdW5jdGlvbigpe3ZhciB5ZT1Sby5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZ5ZS5p''@;'; put 'put ''c1ZhbGlkKCk/eWU8dGhpcz90aGlzOnllOkYoKX0pLG9yPWtlKCJtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LyIsZnVuY3Rpb24oKXt2YXIgeWU9Um8uYXBwbHko''@;'; put 'put ''bnVsbCxhcmd1bWVudHMpO3JldHVybiB0aGlzLmlzVmFsaWQoKSYmeWUuaXNWYWxpZCgpP3llPnRoaXM/dGhpczp5ZTpGKCl9KTtmdW5jdGlvbiBjbyh5ZSxVZSl7dmFyIGN0LGl0O2lmKDE9PT1VZS5sZW5ndGgmJkEoVWVbMF0pJiYoVWU9VWVbMF0pLCFVZS5sZW5ndGgpcmV0dXJuIFJvKCk7''@;'; put 'put ''Zm9yKGN0PVVlWzBdLGl0PTE7aXQ8VWUubGVuZ3RoOysraXQpKCFVZVtpdF0uaXNWYWxpZCgpfHxVZVtpdF1beWVdKGN0KSkmJihjdD1VZVtpdF0pO3JldHVybiBjdH12YXIgbnM9WyJ5ZWFyIiwicXVhcnRlciIsIm1vbnRoIiwid2VlayIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQi''@;'; put 'put ''LCJtaWxsaXNlY29uZCJdO2Z1bmN0aW9uIHkyKHllKXt2YXIgVWU9dHQoeWUpLGN0PVVlLnllYXJ8fDAsaXQ9VWUucXVhcnRlcnx8MCxGdD1VZS5tb250aHx8MCxZZT1VZS53ZWVrfHxVZS5pc29XZWVrfHwwLFhlPVVlLmRheXx8MCx5aT1VZS5ob3VyfHwwLFdhPVVlLm1pbnV0ZXx8MCxTcz1V''@;'; put 'put ''ZS5zZWNvbmR8fDAsV3M9VWUubWlsbGlzZWNvbmR8fDA7dGhpcy5faXNWYWxpZD1mdW5jdGlvbiBFbCh5ZSl7dmFyIFVlLGl0LGN0PSExLEZ0PW5zLmxlbmd0aDtmb3IoVWUgaW4geWUpaWYoQyh5ZSxVZSkmJigtMT09PXRhLmNhbGwobnMsVWUpfHxudWxsIT15ZVtVZV0mJmlzTmFOKHllW1Vl''@;'; put 'put ''XSkpKXJldHVybiExO2ZvcihpdD0wO2l0PEZ0OysraXQpaWYoeWVbbnNbaXRdXSl7aWYoY3QpcmV0dXJuITE7cGFyc2VGbG9hdCh5ZVtuc1tpdF1dKSE9PVV0KHllW25zW2l0XV0pJiYoY3Q9ITApfXJldHVybiEwfShVZSksdGhpcy5fbWlsbGlzZWNvbmRzPStXcysxZTMqU3MrNmU0KldhKzFl''@;'; put 'put ''Myp5aSo2MCo2MCx0aGlzLl9kYXlzPStYZSs3KlllLHRoaXMuX21vbnRocz0rRnQrMyppdCsxMipjdCx0aGlzLl9kYXRhPXt9LHRoaXMuX2xvY2FsZT1yaCgpLHRoaXMuX2J1YmJsZSgpfWZ1bmN0aW9uIER1KHllKXtyZXR1cm4geWUgaW5zdGFuY2VvZiB5Mn1mdW5jdGlvbiBlMSh5ZSl7cmV0''@;'; put 'put ''dXJuIHllPDA/LTEqTWF0aC5yb3VuZCgtMSp5ZSk6TWF0aC5yb3VuZCh5ZSl9ZnVuY3Rpb24gYmQoeWUsVWUpe19lKHllLDAsMCxmdW5jdGlvbigpe3ZhciBjdD10aGlzLnV0Y09mZnNldCgpLGl0PSIrIjtyZXR1cm4gY3Q8MCYmKGN0PS1jdCxpdD0iLSIpLGl0K0Qofn4oY3QvNjApLDIpK1Vl''@;'; put 'put ''K0Qofn5jdCU2MCwyKX0pfWJkKCJaIiwiOiIpLGJkKCJaWiIsIiIpLE5uKCJaIixTbiksTm4oIlpaIixTbikseHQoWyJaIiwiWloiXSxmdW5jdGlvbih5ZSxVZSxjdCl7Y3QuX3VzZVVUQz0hMCxjdC5fdHptPWIyKFNuLHllKX0pO3ZhciBzMD0vKFtcK1wtXXxcZFxkKS9naTtmdW5jdGlvbiBi''@;'; put 'put ''Mih5ZSxVZSl7dmFyIEZ0LFllLGN0PShVZXx8IiIpLm1hdGNoKHllKTtyZXR1cm4gbnVsbD09PWN0P251bGw6MD09PShZZT02MCooRnQ9KChjdFtjdC5sZW5ndGgtMV18fFtdKSsiIikubWF0Y2goczApfHxbIi0iLDAsMF0pWzFdK1V0KEZ0WzJdKSk/MDoiKyI9PT1GdFswXT9ZZTotWWV9ZnVu''@;'; put 'put ''Y3Rpb24ga2goeWUsVWUpe3ZhciBjdCxpdDtyZXR1cm4gVWUuX2lzVVRDPyhjdD1VZS5jbG9uZSgpLGl0PShDZSh5ZSl8fFIoeWUpP3llLnZhbHVlT2YoKTpSbyh5ZSkudmFsdWVPZigpKS1jdC52YWx1ZU9mKCksY3QuX2Quc2V0VGltZShjdC5fZC52YWx1ZU9mKCkraXQpLGMudXBkYXRlT2Zm''@;'; put 'put ''c2V0KGN0LCExKSxjdCk6Um8oeWUpLmxvY2FsKCl9ZnVuY3Rpb24ganUoeWUpe3JldHVybi1NYXRoLnJvdW5kKHllLl9kLmdldFRpbWV6b25lT2Zmc2V0KCkpfWZ1bmN0aW9uIGhsKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmdGhpcy5faXNVVEMmJjA9PT10aGlzLl9vZmZzZXR9Yy51cGRh''@;'; put 'put ''dGVPZmZzZXQ9ZnVuY3Rpb24oKXt9O3ZhciBjcz0vXigtfFwrKT8oPzooXGQqKVsuIF0pPyhcZCspOihcZCspKD86OihcZCspKFwuXGQqKT8pPyQvLGNwPS9eKC18XCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzoo''@;'; put 'put ''Wy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztmdW5jdGlvbiBDcyh5ZSxVZSl7dmFyIEZ0LFllLFhlLGN0PXllLGl0PW51bGw7cmV0dXJuIER1KHllKT9jdD17bXM6eWUuX21pbGxp''@;'; put 'put ''c2Vjb25kcyxkOnllLl9kYXlzLE06eWUuX21vbnRoc306TCh5ZSl8fCFpc05hTigreWUpPyhjdD17fSxVZT9jdFtVZV09K3llOmN0Lm1pbGxpc2Vjb25kcz0reWUpOihpdD1jcy5leGVjKHllKSk/KEZ0PSItIj09PWl0WzFdPy0xOjEsY3Q9e3k6MCxkOlV0KGl0W3JyXSkqRnQsaDpVdChpdFto''@;'; put 'put ''cl0pKkZ0LG06VXQoaXRbcG9dKSpGdCxzOlV0KGl0W3ZuXSkqRnQsbXM6VXQoZTEoMWUzKml0W0JuXSkpKkZ0fSk6KGl0PWNwLmV4ZWMoeWUpKT9jdD17eTpudShpdFsyXSxGdD0iLSI9PT1pdFsxXT8tMToxKSxNOm51KGl0WzNdLEZ0KSx3Om51KGl0WzRdLEZ0KSxkOm51KGl0WzVdLEZ0KSxo''@;'; put 'put ''Om51KGl0WzZdLEZ0KSxtOm51KGl0WzddLEZ0KSxzOm51KGl0WzhdLEZ0KX06bnVsbD09Y3Q/Y3Q9e306Im9iamVjdCI9PXR5cGVvZiBjdCYmKCJmcm9tImluIGN0fHwidG8iaW4gY3QpJiYoWGU9ZnVuY3Rpb24gbmQoeWUsVWUpe3ZhciBjdDtyZXR1cm4geWUuaXNWYWxpZCgpJiZVZS5pc1Zh''@;'; put 'put ''bGlkKCk/KFVlPWtoKFVlLHllKSx5ZS5pc0JlZm9yZShVZSk/Y3Q9UmgoeWUsVWUpOigoY3Q9UmgoVWUseWUpKS5taWxsaXNlY29uZHM9LWN0Lm1pbGxpc2Vjb25kcyxjdC5tb250aHM9LWN0Lm1vbnRocyksY3QpOnttaWxsaXNlY29uZHM6MCxtb250aHM6MH19KFJvKGN0LmZyb20pLFJvKGN0''@;'; put 'put ''LnRvKSksKGN0PXt9KS5tcz1YZS5taWxsaXNlY29uZHMsY3QuTT1YZS5tb250aHMpLFllPW5ldyB5MihjdCksRHUoeWUpJiZDKHllLCJfbG9jYWxlIikmJihZZS5fbG9jYWxlPXllLl9sb2NhbGUpLER1KHllKSYmQyh5ZSwiX2lzVmFsaWQiKSYmKFllLl9pc1ZhbGlkPXllLl9pc1ZhbGlkKSxZ''@;'; put 'put ''ZX1mdW5jdGlvbiBudSh5ZSxVZSl7dmFyIGN0PXllJiZwYXJzZUZsb2F0KHllLnJlcGxhY2UoIiwiLCIuIikpO3JldHVybihpc05hTihjdCk/MDpjdCkqVWV9ZnVuY3Rpb24gUmgoeWUsVWUpe3ZhciBjdD17fTtyZXR1cm4gY3QubW9udGhzPVVlLm1vbnRoKCkteWUubW9udGgoKSsxMiooVWUu''@;'; put 'put ''eWVhcigpLXllLnllYXIoKSkseWUuY2xvbmUoKS5hZGQoY3QubW9udGhzLCJNIikuaXNBZnRlcihVZSkmJi0tY3QubW9udGhzLGN0Lm1pbGxpc2Vjb25kcz0rVWUtK3llLmNsb25lKCkuYWRkKGN0Lm1vbnRocywiTSIpLGN0fWZ1bmN0aW9uIEZtKHllLFVlKXtyZXR1cm4gZnVuY3Rpb24oY3Qs''@;'; put 'put ''aXQpe3ZhciBZZTtyZXR1cm4gbnVsbCE9PWl0JiYhaXNOYU4oK2l0KSYmKFgoVWUsIm1vbWVudCgpLiIrVWUrIihwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4iK1VlKyIobnVtYmVyLCBwZXJpb2QpLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9n''@;'; put 'put ''dWlkZXMvIy93YXJuaW5ncy9hZGQtaW52ZXJ0ZWQtcGFyYW0vIGZvciBtb3JlIGluZm8uIiksWWU9Y3QsY3Q9aXQsaXQ9WWUpLG1mKHRoaXMsQ3MoY3QsaXQpLHllKSx0aGlzfX1mdW5jdGlvbiBtZih5ZSxVZSxjdCxpdCl7dmFyIEZ0PVVlLl9taWxsaXNlY29uZHMsWWU9ZTEoVWUuX2RheXMp''@;'; put 'put ''LFhlPWUxKFVlLl9tb250aHMpO3llLmlzVmFsaWQoKSYmKGl0PWl0Pz8hMCxYZSYmSWwoeWUsQ2koeWUsIk1vbnRoIikrWGUqY3QpLFllJiZobyh5ZSwiRGF0ZSIsQ2koeWUsIkRhdGUiKStZZSpjdCksRnQmJnllLl9kLnNldFRpbWUoeWUuX2QudmFsdWVPZigpK0Z0KmN0KSxpdCYmYy51cGRh''@;'; put 'put ''dGVPZmZzZXQoeWUsWWV8fFhlKSl9Q3MuZm49eTIucHJvdG90eXBlLENzLmludmFsaWQ9ZnVuY3Rpb24gbmMoKXtyZXR1cm4gQ3MoTmFOKX07dmFyIFAxPUZtKDEsImFkZCIpLHVzPUZtKC0xLCJzdWJ0cmFjdCIpO2Z1bmN0aW9uIFV1KHllKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHllfHx5''@;'; put 'put ''ZSBpbnN0YW5jZW9mIFN0cmluZ31mdW5jdGlvbiB4Yyh5ZSl7cmV0dXJuIENlKHllKXx8Uih5ZSl8fFV1KHllKXx8TCh5ZSl8fGZ1bmN0aW9uIHI1KHllKXt2YXIgVWU9QSh5ZSksY3Q9ITE7cmV0dXJuIFVlJiYoY3Q9MD09PXllLmZpbHRlcihmdW5jdGlvbihpdCl7cmV0dXJuIUwoaXQpJiZV''@;'; put 'put ''dSh5ZSl9KS5sZW5ndGgpLFVlJiZjdH0oeWUpfHxmdW5jdGlvbiBsMCh5ZSl7dmFyIEZ0LFVlPXYoeWUpJiYhdyh5ZSksY3Q9ITEsaXQ9WyJ5ZWFycyIsInllYXIiLCJ5IiwibW9udGhzIiwibW9udGgiLCJNIiwiZGF5cyIsImRheSIsImQiLCJkYXRlcyIsImRhdGUiLCJEIiwiaG91cnMiLCJo''@;'; put 'put ''b3VyIiwiaCIsIm1pbnV0ZXMiLCJtaW51dGUiLCJtIiwic2Vjb25kcyIsInNlY29uZCIsInMiLCJtaWxsaXNlY29uZHMiLCJtaWxsaXNlY29uZCIsIm1zIl0sWGU9aXQubGVuZ3RoO2ZvcihGdD0wO0Z0PFhlO0Z0Kz0xKWN0PWN0fHxDKHllLGl0W0Z0XSk7cmV0dXJuIFVlJiZjdH0oeWUpfHxu''@;'; put 'put ''dWxsPT15ZX1mdW5jdGlvbiBIMSh5ZSxVZSl7aWYoeWUuZGF0ZSgpPFVlLmRhdGUoKSlyZXR1cm4tSDEoVWUseWUpO3ZhciBjdD0xMiooVWUueWVhcigpLXllLnllYXIoKSkrKFVlLm1vbnRoKCkteWUubW9udGgoKSksaXQ9eWUuY2xvbmUoKS5hZGQoY3QsIm1vbnRocyIpO3JldHVybi0oY3Qr''@;'; put 'put ''KFVlLWl0PDA/KFVlLWl0KS8oaXQteWUuY2xvbmUoKS5hZGQoY3QtMSwibW9udGhzIikpOihVZS1pdCkvKHllLmNsb25lKCkuYWRkKGN0KzEsIm1vbnRocyIpLWl0KSkpfHwwfWZ1bmN0aW9uIHVhKHllKXt2YXIgVWU7cmV0dXJuIHZvaWQgMD09PXllP3RoaXMuX2xvY2FsZS5fYWJicjoobnVs''@;'; put 'put ''bCE9KFVlPXJoKHllKSkmJih0aGlzLl9sb2NhbGU9VWUpLHRoaXMpfWMuZGVmYXVsdEZvcm1hdD0iWVlZWS1NTS1ERFRISDptbTpzc1oiLGMuZGVmYXVsdEZvcm1hdFV0Yz0iWVlZWS1NTS1ERFRISDptbTpzc1taXSI7dmFyIHZmPWtlKCJtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4g''@;'; put 'put ''SW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLiIsZnVuY3Rpb24oeWUpe3JldHVybiB2b2lkIDA9PT15ZT90aGlzLmxvY2FsZURhdGEoKTp0''@;'; put 'put ''aGlzLmxvY2FsZSh5ZSl9KTtmdW5jdGlvbiBMdSgpe3JldHVybiB0aGlzLl9sb2NhbGV9dmFyIEMyPTZlNCxydT02MCpDMixhaT0zNTA2MzI4KnJ1O2Z1bmN0aW9uIFRhKHllLFVlKXtyZXR1cm4oeWUlVWUrVWUpJVVlfWZ1bmN0aW9uIFljKHllLFVlLGN0KXtyZXR1cm4geWU8MTAwJiZ5ZT49''@;'; put 'put ''MD9uZXcgRGF0ZSh5ZSs0MDAsVWUsY3QpLWFpOm5ldyBEYXRlKHllLFVlLGN0KS52YWx1ZU9mKCl9ZnVuY3Rpb24genUoeWUsVWUsY3Qpe3JldHVybiB5ZTwxMDAmJnllPj0wP0RhdGUuVVRDKHllKzQwMCxVZSxjdCktYWk6RGF0ZS5VVEMoeWUsVWUsY3QpfWZ1bmN0aW9uIG1hKHllLFVlKXty''@;'; put 'put ''ZXR1cm4gVWUuZXJhc0FiYnJSZWdleCh5ZSl9ZnVuY3Rpb24geGcoKXt2YXIgRnQsWWUsWGUseWksV2EseWU9W10sVWU9W10sY3Q9W10saXQ9W10sU3M9dGhpcy5lcmFzKCk7Zm9yKEZ0PTAsWWU9U3MubGVuZ3RoO0Z0PFllOysrRnQpWGU9TWkoU3NbRnRdLm5hbWUpLHlpPU1pKFNzW0Z0XS5h''@;'; put 'put ''YmJyKSxXYT1NaShTc1tGdF0ubmFycm93KSxVZS5wdXNoKFhlKSx5ZS5wdXNoKHlpKSxjdC5wdXNoKFdhKSxpdC5wdXNoKFhlKSxpdC5wdXNoKHlpKSxpdC5wdXNoKFdhKTt0aGlzLl9lcmFzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK2l0LmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9lcmFzTmFt''@;'; put 'put ''ZVJlZ2V4PW5ldyBSZWdFeHAoIl4oIitVZS5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fZXJhc0FiYnJSZWdleD1uZXcgUmVnRXhwKCJeKCIreWUuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX2VyYXNOYXJyb3dSZWdleD1uZXcgUmVnRXhwKCJeKCIrY3Quam9pbigifCIpKyIpIiwiaSIpfWZ1''@;'; put 'put ''bmN0aW9uIEYwKHllLFVlKXtfZSgwLFt5ZSx5ZS5sZW5ndGhdLDAsVWUpfWZ1bmN0aW9uIHMxKHllLFVlLGN0LGl0LEZ0KXt2YXIgWWU7cmV0dXJuIG51bGw9PXllP2ZhKHRoaXMsaXQsRnQpLnllYXI6KFVlPihZZT1Wcih5ZSxpdCxGdCkpJiYoVWU9WWUpLHYzLmNhbGwodGhpcyx5ZSxVZSxj''@;'; put 'put ''dCxpdCxGdCkpfWZ1bmN0aW9uIHYzKHllLFVlLGN0LGl0LEZ0KXt2YXIgWWU9VW8oeWUsVWUsY3QsaXQsRnQpLFhlPUp1KFllLnllYXIsMCxZZS5kYXlPZlllYXIpO3JldHVybiB0aGlzLnllYXIoWGUuZ2V0VVRDRnVsbFllYXIoKSksdGhpcy5tb250aChYZS5nZXRVVENNb250aCgpKSx0aGlz''@;'; put 'put ''LmRhdGUoWGUuZ2V0VVRDRGF0ZSgpKSx0aGlzfV9lKCJOIiwwLDAsImVyYUFiYnIiKSxfZSgiTk4iLDAsMCwiZXJhQWJiciIpLF9lKCJOTk4iLDAsMCwiZXJhQWJiciIpLF9lKCJOTk5OIiwwLDAsImVyYU5hbWUiKSxfZSgiTk5OTk4iLDAsMCwiZXJhTmFycm93IiksX2UoInkiLFsieSIsMV0s''@;'; put 'put ''InlvIiwiZXJhWWVhciIpLF9lKCJ5IixbInl5IiwyXSwwLCJlcmFZZWFyIiksX2UoInkiLFsieXl5IiwzXSwwLCJlcmFZZWFyIiksX2UoInkiLFsieXl5eSIsNF0sMCwiZXJhWWVhciIpLE5uKCJOIixtYSksTm4oIk5OIixtYSksTm4oIk5OTiIsbWEpLE5uKCJOTk5OIixmdW5jdGlvbiB1OCh5''@;'; put 'put ''ZSxVZSl7cmV0dXJuIFVlLmVyYXNOYW1lUmVnZXgoeWUpfSksTm4oIk5OTk5OIixmdW5jdGlvbiBiZih5ZSxVZSl7cmV0dXJuIFVlLmVyYXNOYXJyb3dSZWdleCh5ZSl9KSx4dChbIk4iLCJOTiIsIk5OTiIsIk5OTk4iLCJOTk5OTiJdLGZ1bmN0aW9uKHllLFVlLGN0LGl0KXt2YXIgRnQ9Y3Qu''@;'; put 'put ''X2xvY2FsZS5lcmFzUGFyc2UoeWUsaXQsY3QuX3N0cmljdCk7RnQ/TihjdCkuZXJhPUZ0Ok4oY3QpLmludmFsaWRFcmE9eWV9KSxObigieSIsT28pLE5uKCJ5eSIsT28pLE5uKCJ5eXkiLE9vKSxObigieXl5eSIsT28pLE5uKCJ5byIsZnVuY3Rpb24gYTEoeWUsVWUpe3JldHVybiBVZS5fZXJh''@;'; put 'put ''WWVhck9yZGluYWxSZWdleHx8T299KSx4dChbInkiLCJ5eSIsInl5eSIsInl5eXkiXSx5bikseHQoWyJ5byJdLGZ1bmN0aW9uKHllLFVlLGN0LGl0KXt2YXIgRnQ7Y3QuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCYmKEZ0PXllLm1hdGNoKGN0Ll9sb2NhbGUuX2VyYVllYXJPcmRpbmFs''@;'; put 'put ''UmVnZXgpKSxVZVt5bl09Y3QuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlP2N0Ll9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZSh5ZSxGdCk6cGFyc2VJbnQoeWUsMTApfSksX2UoMCxbImdnIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2Vla1llYXIoKSUxMDB9KSxfZSgwLFsi''@;'; put 'put ''R0ciLDJdLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc29XZWVrWWVhcigpJTEwMH0pLEYwKCJnZ2dnIiwid2Vla1llYXIiKSxGMCgiZ2dnZ2ciLCJ3ZWVrWWVhciIpLEYwKCJHR0dHIiwiaXNvV2Vla1llYXIiKSxGMCgiR0dHR0ciLCJpc29XZWVrWWVhciIpLE5uKCJHIix1ciksTm4oImci''@;'; put 'put ''LHVyKSxObigiR0ciLExyLEx0KSxObigiZ2ciLExyLEx0KSxObigiR0dHRyIsdHIsZ3QpLE5uKCJnZ2dnIix0cixndCksTm4oIkdHR0dHIixIbixYdCksTm4oImdnZ2dnIixIbixYdCksQnQoWyJnZ2dnIiwiZ2dnZ2ciLCJHR0dHIiwiR0dHR0ciXSxmdW5jdGlvbih5ZSxVZSxjdCxpdCl7VWVb''@;'; put 'put ''aXQuc3Vic3RyKDAsMildPVV0KHllKX0pLEJ0KFsiZ2ciLCJHRyJdLGZ1bmN0aW9uKHllLFVlLGN0LGl0KXtVZVtpdF09Yy5wYXJzZVR3b0RpZ2l0WWVhcih5ZSl9KSxfZSgiUSIsMCwiUW8iLCJxdWFydGVyIiksTm4oIlEiLFJ0KSx4dCgiUSIsZnVuY3Rpb24oeWUsVWUpe1VlW3ZpXT0zKihV''@;'; put 'put ''dCh5ZSktMSl9KSxfZSgiRCIsWyJERCIsMl0sIkRvIiwiZGF0ZSIpLE5uKCJEIixMcixBciksTm4oIkREIixMcixMdCksTm4oIkRvIixmdW5jdGlvbih5ZSxVZSl7cmV0dXJuIHllP1VlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlfHxVZS5fb3JkaW5hbFBhcnNlOlVlLl9kYXlPZk1vbnRoT3Jk''@;'; put 'put ''aW5hbFBhcnNlTGVuaWVudH0pLHh0KFsiRCIsIkREIl0scnIpLHh0KCJEbyIsZnVuY3Rpb24oeWUsVWUpe1VlW3JyXT1VdCh5ZS5tYXRjaChMcilbMF0pfSk7dmFyIE91PWNhKCJEYXRlIiwhMCk7X2UoIkRERCIsWyJEREREIiwzXSwiREREbyIsImRheU9mWWVhciIpLE5uKCJEREQiLFFyKSxO''@;'; put 'put ''bigiRERERCIsR3QpLHh0KFsiREREIiwiRERERCJdLGZ1bmN0aW9uKHllLFVlLGN0KXtjdC5fZGF5T2ZZZWFyPVV0KHllKX0pLF9lKCJtIixbIm1tIiwyXSwwLCJtaW51dGUiKSxObigibSIsTHIsX24pLE5uKCJtbSIsTHIsTHQpLHh0KFsibSIsIm1tIl0scG8pO3ZhciBVbT1jYSgiTWludXRl''@;'; put 'put ''cyIsITEpO19lKCJzIixbInNzIiwyXSwwLCJzZWNvbmQiKSxObigicyIsTHIsX24pLE5uKCJzcyIsTHIsTHQpLHh0KFsicyIsInNzIl0sdm4pO3ZhciBFZixBZyxDOT1jYSgiU2Vjb25kcyIsITEpO2ZvcihfZSgiUyIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxsaXNlY29uZCgp''@;'; put 'put ''LzEwMCl9KSxfZSgwLFsiU1MiLDJdLDAsZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTApfSksX2UoMCxbIlNTUyIsM10sMCwibWlsbGlzZWNvbmQiKSxfZSgwLFsiU1NTUyIsNF0sMCxmdW5jdGlvbigpe3JldHVybiAxMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSxfZSgw''@;'; put 'put ''LFsiU1NTU1MiLDVdLDAsZnVuY3Rpb24oKXtyZXR1cm4gMTAwKnRoaXMubWlsbGlzZWNvbmQoKX0pLF9lKDAsWyJTU1NTU1MiLDZdLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWUzKnRoaXMubWlsbGlzZWNvbmQoKX0pLF9lKDAsWyJTU1NTU1NTIiw3XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlNCp0''@;'; put 'put ''aGlzLm1pbGxpc2Vjb25kKCl9KSxfZSgwLFsiU1NTU1NTU1MiLDhdLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWU1KnRoaXMubWlsbGlzZWNvbmQoKX0pLF9lKDAsWyJTU1NTU1NTU1MiLDldLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWU2KnRoaXMubWlsbGlzZWNvbmQoKX0pLE5uKCJTIixRcixSdCks''@;'; put 'put ''Tm4oIlNTIixRcixMdCksTm4oIlNTUyIsUXIsR3QpLEVmPSJTU1NTIjtFZi5sZW5ndGg8PTk7RWYrPSJTIilObihFZixPbyk7ZnVuY3Rpb24gSkMoeWUsVWUpe1VlW0JuXT1VdCgxZTMqKCIwLiIreWUpKX1mb3IoRWY9IlMiO0VmLmxlbmd0aDw9OTtFZis9IlMiKXh0KEVmLEpDKTtBZz1jYSgi''@;'; put 'put ''TWlsbGlzZWNvbmRzIiwhMSksX2UoInoiLDAsMCwiem9uZUFiYnIiKSxfZSgienoiLDAsMCwiem9uZU5hbWUiKTt2YXIgVWk9bWUucHJvdG90eXBlO2Z1bmN0aW9uIGQ4KHllKXtyZXR1cm4geWV9VWkuYWRkPVAxLFVpLmNhbGVuZGFyPWZ1bmN0aW9uIFBtKHllLFVlKXsxPT09YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aCYmKGFyZ3VtZW50c1swXT94Yyhhcmd1bWVudHNbMF0pPyh5ZT1hcmd1bWVudHNbMF0sVWU9dm9pZCAwKTpmdW5jdGlvbiB1cCh5ZSl7dmFyIEZ0LFVlPXYoeWUpJiYhdyh5ZSksY3Q9ITEsaXQ9WyJzYW1lRGF5IiwibmV4dERheSIsImxhc3REYXkiLCJuZXh0V2VlayIsImxhc3RX''@;'; put 'put ''ZWVrIiwic2FtZUVsc2UiXTtmb3IoRnQ9MDtGdDxpdC5sZW5ndGg7RnQrPTEpY3Q9Y3R8fEMoeWUsaXRbRnRdKTtyZXR1cm4gVWUmJmN0fShhcmd1bWVudHNbMF0pJiYoVWU9YXJndW1lbnRzWzBdLHllPXZvaWQgMCk6KHllPXZvaWQgMCxVZT12b2lkIDApKTt2YXIgY3Q9eWV8fFJvKCksaXQ9''@;'; put 'put ''a2goY3QsdGhpcykuc3RhcnRPZigiZGF5IiksRnQ9Yy5jYWxlbmRhckZvcm1hdCh0aGlzLGl0KXx8InNhbWVFbHNlIixZZT1VZSYmKGYoVWVbRnRdKT9VZVtGdF0uY2FsbCh0aGlzLGN0KTpVZVtGdF0pO3JldHVybiB0aGlzLmZvcm1hdChZZXx8dGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIo''@;'; put 'put ''RnQsdGhpcyxSbyhjdCkpKX0sVWkuY2xvbmU9ZnVuY3Rpb24gaTEoKXtyZXR1cm4gbmV3IG1lKHRoaXMpfSxVaS5kaWZmPWZ1bmN0aW9uIG5sKHllLFVlLGN0KXt2YXIgaXQsRnQsWWU7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBOYU47aWYoIShpdD1raCh5ZSx0aGlzKSkuaXNWYWxpZCgp''@;'; put 'put ''KXJldHVybiBOYU47c3dpdGNoKEZ0PTZlNCooaXQudXRjT2Zmc2V0KCktdGhpcy51dGNPZmZzZXQoKSksVWU9SmUoVWUpKXtjYXNlInllYXIiOlllPUgxKHRoaXMsaXQpLzEyO2JyZWFrO2Nhc2UibW9udGgiOlllPUgxKHRoaXMsaXQpO2JyZWFrO2Nhc2UicXVhcnRlciI6WWU9SDEodGhpcyxp''@;'; put 'put ''dCkvMzticmVhaztjYXNlInNlY29uZCI6WWU9KHRoaXMtaXQpLzFlMzticmVhaztjYXNlIm1pbnV0ZSI6WWU9KHRoaXMtaXQpLzZlNDticmVhaztjYXNlImhvdXIiOlllPSh0aGlzLWl0KS8zNmU1O2JyZWFrO2Nhc2UiZGF5IjpZZT0odGhpcy1pdC1GdCkvODY0ZTU7YnJlYWs7Y2FzZSJ3ZWVr''@;'; put 'put ''IjpZZT0odGhpcy1pdC1GdCkvNjA0OGU1O2JyZWFrO2RlZmF1bHQ6WWU9dGhpcy1pdH1yZXR1cm4gY3Q/WWU6R2UoWWUpfSxVaS5lbmRPZj1mdW5jdGlvbiBmcCh5ZSl7dmFyIFVlLGN0O2lmKHZvaWQgMD09PSh5ZT1KZSh5ZSkpfHwibWlsbGlzZWNvbmQiPT09eWV8fCF0aGlzLmlzVmFsaWQo''@;'; put 'put ''KSlyZXR1cm4gdGhpcztzd2l0Y2goY3Q9dGhpcy5faXNVVEM/enU6WWMseWUpe2Nhc2UieWVhciI6VWU9Y3QodGhpcy55ZWFyKCkrMSwwLDEpLTE7YnJlYWs7Y2FzZSJxdWFydGVyIjpVZT1jdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCktdGhpcy5tb250aCgpJTMrMywxKS0xO2JyZWFrO2Nh''@;'; put 'put ''c2UibW9udGgiOlVlPWN0KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSsxLDEpLTE7YnJlYWs7Y2FzZSJ3ZWVrIjpVZT1jdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktdGhpcy53ZWVrZGF5KCkrNyktMTticmVhaztjYXNlImlzb1dlZWsiOlVlPWN0KHRoaXMueWVhcigp''@;'; put 'put ''LHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkrNyktMTticmVhaztjYXNlImRheSI6Y2FzZSJkYXRlIjpVZT1jdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkrMSktMTticmVhaztjYXNlImhvdXIiOlVlPXRoaXMuX2QudmFsdWVPZigp''@;'; put 'put ''LFVlKz1ydS1UYShVZSsodGhpcy5faXNVVEM/MDp0aGlzLnV0Y09mZnNldCgpKkMyKSxydSktMTticmVhaztjYXNlIm1pbnV0ZSI6VWU9dGhpcy5fZC52YWx1ZU9mKCksVWUrPUMyLVRhKFVlLEMyKS0xO2JyZWFrO2Nhc2Uic2Vjb25kIjpVZT10aGlzLl9kLnZhbHVlT2YoKSxVZSs9MWUzLVRh''@;'; put 'put ''KFVlLDFlMyktMX1yZXR1cm4gdGhpcy5fZC5zZXRUaW1lKFVlKSxjLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzfSxVaS5mb3JtYXQ9ZnVuY3Rpb24gaHAoeWUpe3llfHwoeWU9dGhpcy5pc1V0YygpP2MuZGVmYXVsdEZvcm1hdFV0YzpjLmRlZmF1bHRGb3JtYXQpO3ZhciBVZT1sdCh0aGlz''@;'; put 'put ''LHllKTtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChVZSl9LFVpLmZyb209ZnVuY3Rpb24gZDMoeWUsVWUpe3JldHVybiB0aGlzLmlzVmFsaWQoKSYmKENlKHllKSYmeWUuaXNWYWxpZCgpfHxSbyh5ZSkuaXNWYWxpZCgpKT9Dcyh7dG86dGhpcyxmcm9tOnllfSkubG9jYWxl''@;'; put 'put ''KHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCFVZSk6dGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX0sVWkuZnJvbU5vdz1mdW5jdGlvbiBoMyh5ZSl7cmV0dXJuIHRoaXMuZnJvbShSbygpLHllKX0sVWkudG89ZnVuY3Rpb24gbDgoeWUsVWUpe3JldHVybiB0aGlzLmlzVmFsaWQoKSYm''@;'; put 'put ''KENlKHllKSYmeWUuaXNWYWxpZCgpfHxSbyh5ZSkuaXNWYWxpZCgpKT9Dcyh7ZnJvbTp0aGlzLHRvOnllfSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCFVZSk6dGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX0sVWkudG9Ob3c9ZnVuY3Rpb24gYzgoeWUpe3JldHVybiB0''@;'; put 'put ''aGlzLnRvKFJvKCkseWUpfSxVaS5nZXQ9ZnVuY3Rpb24gTWEoeWUpe3JldHVybiBmKHRoaXNbeWU9SmUoeWUpXSk/dGhpc1t5ZV0oKTp0aGlzfSxVaS5pbnZhbGlkQXQ9ZnVuY3Rpb24gZmMoKXtyZXR1cm4gTih0aGlzKS5vdmVyZmxvd30sVWkuaXNBZnRlcj1mdW5jdGlvbiBpOCh5ZSxVZSl7''@;'; put 'put ''dmFyIGN0PUNlKHllKT95ZTpSbyh5ZSk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFjdC5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PShVZT1KZShVZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPmN0LnZhbHVlT2YoKTpjdC52YWx1ZU9mKCk8dGhpcy5jbG9uZSgpLnN0''@;'; put 'put ''YXJ0T2YoVWUpLnZhbHVlT2YoKSl9LFVpLmlzQmVmb3JlPWZ1bmN0aW9uIG84KHllLFVlKXt2YXIgY3Q9Q2UoeWUpP3llOlJvKHllKTtyZXR1cm4hKCF0aGlzLmlzVmFsaWQoKXx8IWN0LmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KFVlPUplKFVlKXx8Im1pbGxpc2Vjb25kIik/dGhp''@;'; put 'put ''cy52YWx1ZU9mKCk8Y3QudmFsdWVPZigpOnRoaXMuY2xvbmUoKS5lbmRPZihVZSkudmFsdWVPZigpPGN0LnZhbHVlT2YoKSl9LFVpLmlzQmV0d2Vlbj1mdW5jdGlvbiBTZyh5ZSxVZSxjdCxpdCl7dmFyIEZ0PUNlKHllKT95ZTpSbyh5ZSksWWU9Q2UoVWUpP1VlOlJvKFVlKTtyZXR1cm4hISh0''@;'; put 'put ''aGlzLmlzVmFsaWQoKSYmRnQuaXNWYWxpZCgpJiZZZS5pc1ZhbGlkKCkpJiYoIigiPT09KGl0PWl0fHwiKCkiKVswXT90aGlzLmlzQWZ0ZXIoRnQsY3QpOiF0aGlzLmlzQmVmb3JlKEZ0LGN0KSkmJigiKSI9PT1pdFsxXT90aGlzLmlzQmVmb3JlKFllLGN0KTohdGhpcy5pc0FmdGVyKFllLGN0''@;'; put 'put ''KSl9LFVpLmlzU2FtZT1mdW5jdGlvbiBIbSh5ZSxVZSl7dmFyIGl0LGN0PUNlKHllKT95ZTpSbyh5ZSk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFjdC5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PShVZT1KZShVZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPT09Y3Qu''@;'; put 'put ''dmFsdWVPZigpOihpdD1jdC52YWx1ZU9mKCksdGhpcy5jbG9uZSgpLnN0YXJ0T2YoVWUpLnZhbHVlT2YoKTw9aXQmJml0PD10aGlzLmNsb25lKCkuZW5kT2YoVWUpLnZhbHVlT2YoKSkpfSxVaS5pc1NhbWVPckFmdGVyPWZ1bmN0aW9uIHdkKHllLFVlKXtyZXR1cm4gdGhpcy5pc1NhbWUoeWUs''@;'; put 'put ''VWUpfHx0aGlzLmlzQWZ0ZXIoeWUsVWUpfSxVaS5pc1NhbWVPckJlZm9yZT1mdW5jdGlvbiBpNSh5ZSxVZSl7cmV0dXJuIHRoaXMuaXNTYW1lKHllLFVlKXx8dGhpcy5pc0JlZm9yZSh5ZSxVZSl9LFVpLmlzVmFsaWQ9ZnVuY3Rpb24gTWcoKXtyZXR1cm4gWSh0aGlzKX0sVWkubGFuZz12ZixV''@;'; put 'put ''aS5sb2NhbGU9dWEsVWkubG9jYWxlRGF0YT1MdSxVaS5tYXg9b3IsVWkubWluPWRsLFVpLnBhcnNpbmdGbGFncz1mdW5jdGlvbiBUZygpe3JldHVybiBVKHt9LE4odGhpcykpfSxVaS5zZXQ9ZnVuY3Rpb24ga3MoeWUsVWUpe2lmKCJvYmplY3QiPT10eXBlb2YgeWUpe3ZhciBpdCxjdD1mdW5j''@;'; put 'put ''dGlvbiAkdCh5ZSl7dmFyIGN0LFVlPVtdO2ZvcihjdCBpbiB5ZSlDKHllLGN0KSYmVWUucHVzaCh7dW5pdDpjdCxwcmlvcml0eTpLZVtjdF19KTtyZXR1cm4gVWUuc29ydChmdW5jdGlvbihpdCxGdCl7cmV0dXJuIGl0LnByaW9yaXR5LUZ0LnByaW9yaXR5fSksVWV9KHllPXR0KHllKSksRnQ9''@;'; put 'put ''Y3QubGVuZ3RoO2ZvcihpdD0wO2l0PEZ0O2l0KyspdGhpc1tjdFtpdF0udW5pdF0oeWVbY3RbaXRdLnVuaXRdKX1lbHNlIGlmKGYodGhpc1t5ZT1KZSh5ZSldKSlyZXR1cm4gdGhpc1t5ZV0oVWUpO3JldHVybiB0aGlzfSxVaS5zdGFydE9mPWZ1bmN0aW9uIFd1KHllKXt2YXIgVWUsY3Q7aWYo''@;'; put 'put ''dm9pZCAwPT09KHllPUplKHllKSl8fCJtaWxsaXNlY29uZCI9PT15ZXx8IXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzO3N3aXRjaChjdD10aGlzLl9pc1VUQz96dTpZYyx5ZSl7Y2FzZSJ5ZWFyIjpVZT1jdCh0aGlzLnllYXIoKSwwLDEpO2JyZWFrO2Nhc2UicXVhcnRlciI6VWU9Y3QodGhp''@;'; put 'put ''cy55ZWFyKCksdGhpcy5tb250aCgpLXRoaXMubW9udGgoKSUzLDEpO2JyZWFrO2Nhc2UibW9udGgiOlVlPWN0KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSwxKTticmVhaztjYXNlIndlZWsiOlVlPWN0KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS10aGlzLndlZWtkYXko''@;'; put 'put ''KSk7YnJlYWs7Y2FzZSJpc29XZWVrIjpVZT1jdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktKHRoaXMuaXNvV2Vla2RheSgpLTEpKTticmVhaztjYXNlImRheSI6Y2FzZSJkYXRlIjpVZT1jdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkpO2JyZWFr''@;'; put 'put ''O2Nhc2UiaG91ciI6VWU9dGhpcy5fZC52YWx1ZU9mKCksVWUtPVRhKFVlKyh0aGlzLl9pc1VUQz8wOnRoaXMudXRjT2Zmc2V0KCkqQzIpLHJ1KTticmVhaztjYXNlIm1pbnV0ZSI6VWU9dGhpcy5fZC52YWx1ZU9mKCksVWUtPVRhKFVlLEMyKTticmVhaztjYXNlInNlY29uZCI6VWU9dGhpcy5f''@;'; put 'put ''ZC52YWx1ZU9mKCksVWUtPVRhKFVlLDFlMyl9cmV0dXJuIHRoaXMuX2Quc2V0VGltZShVZSksYy51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpc30sVWkuc3VidHJhY3Q9dXMsVWkudG9BcnJheT1mdW5jdGlvbiB1MCgpe3ZhciB5ZT10aGlzO3JldHVyblt5ZS55ZWFyKCkseWUubW9udGgoKSx5''@;'; put 'put ''ZS5kYXRlKCkseWUuaG91cigpLHllLm1pbnV0ZSgpLHllLnNlY29uZCgpLHllLm1pbGxpc2Vjb25kKCldfSxVaS50b09iamVjdD1mdW5jdGlvbiBycygpe3ZhciB5ZT10aGlzO3JldHVybnt5ZWFyczp5ZS55ZWFyKCksbW9udGhzOnllLm1vbnRoKCksZGF0ZTp5ZS5kYXRlKCksaG91cnM6eWUu''@;'; put 'put ''aG91cnMoKSxtaW51dGVzOnllLm1pbnV0ZXMoKSxzZWNvbmRzOnllLnNlY29uZHMoKSxtaWxsaXNlY29uZHM6eWUubWlsbGlzZWNvbmRzKCl9fSxVaS50b0RhdGU9ZnVuY3Rpb24gWGEoKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSxVaS50b0lTT1N0cmluZz1mdW5jdGlvbiBh''@;'; put 'put ''OCh5ZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsO3ZhciBVZT0hMCE9PXllLGN0PVVlP3RoaXMuY2xvbmUoKS51dGMoKTp0aGlzO3JldHVybiBjdC55ZWFyKCk8MHx8Y3QueWVhcigpPjk5OTk/bHQoY3QsVWU/IllZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSI6IllZWVlZ''@;'; put 'put ''WS1NTS1ERFtUXUhIOm1tOnNzLlNTU1oiKTpmKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKT9VZT90aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk6bmV3IERhdGUodGhpcy52YWx1ZU9mKCkrNjAqdGhpcy51dGNPZmZzZXQoKSoxZTMpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgiWiIsbHQo''@;'; put 'put ''Y3QsIloiKSk6bHQoY3QsVWU/IllZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0iOiJZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWiIpfSxVaS5pbnNwZWN0PWZ1bmN0aW9uIHM4KCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiJtb21lbnQuaW52YWxpZCgvKiAiK3RoaXMuX2krIiAqLyki''@;'; put 'put ''O3ZhciBjdCxpdCx5ZT0ibW9tZW50IixVZT0iIjtyZXR1cm4gdGhpcy5pc0xvY2FsKCl8fCh5ZT0wPT09dGhpcy51dGNPZmZzZXQoKT8ibW9tZW50LnV0YyI6Im1vbWVudC5wYXJzZVpvbmUiLFVlPSJaIiksY3Q9IlsiK3llKycoIl0nLGl0PTA8PXRoaXMueWVhcigpJiZ0aGlzLnllYXIoKTw9''@;'; put 'put ''OTk5OT8iWVlZWSI6IllZWVlZWSIsdGhpcy5mb3JtYXQoY3QraXQrIi1NTS1ERFtUXUhIOm1tOnNzLlNTUyIrVWUrJ1siKV0nKX0sdHlwZW9mIFN5bWJvbDwidSImJm51bGwhPVN5bWJvbC5mb3ImJihVaVtTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpXT1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiJNb21lbnQ8Iit0aGlzLmZvcm1hdCgpKyI+In0pLFVpLnRvSlNPTj1mdW5jdGlvbiBwcCgpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLnRvSVNPU3RyaW5nKCk6bnVsbH0sVWkudG9TdHJpbmc9ZnVuY3Rpb24gZHAoKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmxvY2FsZSgi''@;'; put 'put ''ZW4iKS5mb3JtYXQoImRkZCBNTU0gREQgWVlZWSBISDptbTpzcyBbR01UXVpaIil9LFVpLnVuaXg9ZnVuY3Rpb24gZmwoKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxVaS52YWx1ZU9mPWZ1bmN0aW9uIFZtKCl7cmV0dXJuIHRoaXMuX2QudmFsdWVPZigpLTZlNCoo''@;'; put 'put ''dGhpcy5fb2Zmc2V0fHwwKX0sVWkuY3JlYXRpb25EYXRhPWZ1bmN0aW9uIGYzKCl7cmV0dXJue2lucHV0OnRoaXMuX2ksZm9ybWF0OnRoaXMuX2YsbG9jYWxlOnRoaXMuX2xvY2FsZSxpc1VUQzp0aGlzLl9pc1VUQyxzdHJpY3Q6dGhpcy5fc3RyaWN0fX0sVWkuZXJhTmFtZT1mdW5jdGlvbiBq''@;'; put 'put ''bSgpe3ZhciB5ZSxVZSxjdCxpdD10aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7Zm9yKHllPTAsVWU9aXQubGVuZ3RoO3llPFVlOysreWUpaWYoY3Q9dGhpcy5jbG9uZSgpLnN0YXJ0T2YoImRheSIpLnZhbHVlT2YoKSxpdFt5ZV0uc2luY2U8PWN0JiZjdDw9aXRbeWVdLnVudGlsfHxpdFt5ZV0u''@;'; put 'put ''dW50aWw8PWN0JiZjdDw9aXRbeWVdLnNpbmNlKXJldHVybiBpdFt5ZV0ubmFtZTtyZXR1cm4iIn0sVWkuZXJhTmFycm93PWZ1bmN0aW9uIHlmKCl7dmFyIHllLFVlLGN0LGl0PXRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtmb3IoeWU9MCxVZT1pdC5sZW5ndGg7eWU8VWU7Kyt5ZSlpZihjdD10''@;'; put 'put ''aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpLGl0W3llXS5zaW5jZTw9Y3QmJmN0PD1pdFt5ZV0udW50aWx8fGl0W3llXS51bnRpbDw9Y3QmJmN0PD1pdFt5ZV0uc2luY2UpcmV0dXJuIGl0W3llXS5uYXJyb3c7cmV0dXJuIiJ9LFVpLmVyYUFiYnI9ZnVuY3Rpb24gbzUoKXt2''@;'; put 'put ''YXIgeWUsVWUsY3QsaXQ9dGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO2Zvcih5ZT0wLFVlPWl0Lmxlbmd0aDt5ZTxVZTsrK3llKWlmKGN0PXRoaXMuY2xvbmUoKS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCksaXRbeWVdLnNpbmNlPD1jdCYmY3Q8PWl0W3llXS51bnRpbHx8aXRbeWVdLnVudGls''@;'; put 'put ''PD1jdCYmY3Q8PWl0W3llXS5zaW5jZSlyZXR1cm4gaXRbeWVdLmFiYnI7cmV0dXJuIiJ9LFVpLmVyYVllYXI9ZnVuY3Rpb24gcDMoKXt2YXIgeWUsVWUsY3QsaXQsRnQ9dGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO2Zvcih5ZT0wLFVlPUZ0Lmxlbmd0aDt5ZTxVZTsrK3llKWlmKGN0PUZ0W3ll''@;'; put 'put ''XS5zaW5jZTw9RnRbeWVdLnVudGlsPzE6LTEsaXQ9dGhpcy5jbG9uZSgpLnN0YXJ0T2YoImRheSIpLnZhbHVlT2YoKSxGdFt5ZV0uc2luY2U8PWl0JiZpdDw9RnRbeWVdLnVudGlsfHxGdFt5ZV0udW50aWw8PWl0JiZpdDw9RnRbeWVdLnNpbmNlKXJldHVybih0aGlzLnllYXIoKS1jKEZ0W3ll''@;'; put 'put ''XS5zaW5jZSkueWVhcigpKSpjdCtGdFt5ZV0ub2Zmc2V0O3JldHVybiB0aGlzLnllYXIoKX0sVWkueWVhcj1lYSxVaS5pc0xlYXBZZWFyPWZ1bmN0aW9uIHJhKCl7cmV0dXJuIEduKHRoaXMueWVhcigpKX0sVWkud2Vla1llYXI9ZnVuY3Rpb24gRmwoeWUpe3JldHVybiBzMS5jYWxsKHRoaXMs''@;'; put 'put ''eWUsdGhpcy53ZWVrKCksdGhpcy53ZWVrZGF5KCkrdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyx0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3kpfSxVaS5pc29XZWVrWWVhcj1mdW5jdGlvbiB6cyh5ZSl7cmV0dXJuIHMxLmNhbGwodGhp''@;'; put 'put ''cyx5ZSx0aGlzLmlzb1dlZWsoKSx0aGlzLmlzb1dlZWtkYXkoKSwxLDQpfSxVaS5xdWFydGVyPVVpLnF1YXJ0ZXJzPWZ1bmN0aW9uIGR5KHllKXtyZXR1cm4gbnVsbD09eWU/TWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkrMSkvMyk6dGhpcy5tb250aCgzKih5ZS0xKSt0aGlzLm1vbnRoKCklMyl9''@;'; put 'put ''LFVpLm1vbnRoPWcyLFVpLmRheXNJbk1vbnRoPWZ1bmN0aW9uIExjKCl7cmV0dXJuIE1yKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSl9LFVpLndlZWs9VWkud2Vla3M9ZnVuY3Rpb24gVWEoeWUpe3ZhciBVZT10aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO3JldHVybiBudWxsPT15ZT9V''@;'; put 'put ''ZTp0aGlzLmFkZCg3Kih5ZS1VZSksImQiKX0sVWkuaXNvV2Vlaz1VaS5pc29XZWVrcz1mdW5jdGlvbiBWdSh5ZSl7dmFyIFVlPWZhKHRoaXMsMSw0KS53ZWVrO3JldHVybiBudWxsPT15ZT9VZTp0aGlzLmFkZCg3Kih5ZS1VZSksImQiKX0sVWkud2Vla3NJblllYXI9ZnVuY3Rpb24gd2YoKXt2''@;'; put 'put ''YXIgeWU9dGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7cmV0dXJuIFZyKHRoaXMueWVhcigpLHllLmRvdyx5ZS5kb3kpfSxVaS53ZWVrc0luV2Vla1llYXI9ZnVuY3Rpb24gQ2YoKXt2YXIgeWU9dGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7cmV0dXJuIFZyKHRoaXMud2Vla1llYXIoKSx5ZS5kb3cs''@;'; put 'put ''eWUuZG95KX0sVWkuaXNvV2Vla3NJblllYXI9ZnVuY3Rpb24gWXUoKXtyZXR1cm4gVnIodGhpcy55ZWFyKCksMSw0KX0sVWkuaXNvV2Vla3NJbklTT1dlZWtZZWFyPWZ1bmN0aW9uIHJkKCl7cmV0dXJuIFZyKHRoaXMuaXNvV2Vla1llYXIoKSwxLDQpfSxVaS5kYXRlPU91LFVpLmRheT1VaS5k''@;'; put 'put ''YXlzPWZ1bmN0aW9uIEpuKHllKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPXllP3RoaXM6TmFOO3ZhciBVZT1DaSh0aGlzLCJEYXkiKTtyZXR1cm4gbnVsbCE9eWU/KHllPWZ1bmN0aW9uIExtKHllLFVlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHllP3llOmlzTmFOKHllKT8i''@;'; put 'put ''bnVtYmVyIj09dHlwZW9mKHllPVVlLndlZWtkYXlzUGFyc2UoeWUpKT95ZTpudWxsOnBhcnNlSW50KHllLDEwKX0oeWUsdGhpcy5sb2NhbGVEYXRhKCkpLHRoaXMuYWRkKHllLVVlLCJkIikpOlVlfSxVaS53ZWVrZGF5PWZ1bmN0aW9uIGNsKHllKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJu''@;'; put 'put ''IG51bGwhPXllP3RoaXM6TmFOO3ZhciBVZT0odGhpcy5kYXkoKSs3LXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyklNztyZXR1cm4gbnVsbD09eWU/VWU6dGhpcy5hZGQoeWUtVWUsImQiKX0sVWkuaXNvV2Vla2RheT1mdW5jdGlvbiBtaSh5ZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVy''@;'; put 'put ''biBudWxsIT15ZT90aGlzOk5hTjtpZihudWxsIT15ZSl7dmFyIFVlPWZ1bmN0aW9uIHUzKHllLFVlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHllP1VlLndlZWtkYXlzUGFyc2UoeWUpJTd8fDc6aXNOYU4oeWUpP251bGw6eWV9KHllLHRoaXMubG9jYWxlRGF0YSgpKTtyZXR1cm4gdGhpcy5k''@;'; put 'put ''YXkodGhpcy5kYXkoKSU3P1VlOlVlLTcpfXJldHVybiB0aGlzLmRheSgpfHw3fSxVaS5kYXlPZlllYXI9ZnVuY3Rpb24gU2YoeWUpe3ZhciBVZT1NYXRoLnJvdW5kKCh0aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IiktdGhpcy5jbG9uZSgpLnN0YXJ0T2YoInllYXIiKSkvODY0ZTUpKzE7cmV0''@;'; put 'put ''dXJuIG51bGw9PXllP1VlOnRoaXMuYWRkKHllLVVlLCJkIil9LFVpLmhvdXI9VWkuaG91cnM9dWwsVWkubWludXRlPVVpLm1pbnV0ZXM9VW0sVWkuc2Vjb25kPVVpLnNlY29uZHM9QzksVWkubWlsbGlzZWNvbmQ9VWkubWlsbGlzZWNvbmRzPUFnLFVpLnV0Y09mZnNldD1mdW5jdGlvbiBCZCh5''@;'; put 'put ''ZSxVZSxjdCl7dmFyIEZ0LGl0PXRoaXMuX29mZnNldHx8MDtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPXllP3RoaXM6TmFOO2lmKG51bGwhPXllKXtpZigic3RyaW5nIj09dHlwZW9mIHllKXtpZihudWxsPT09KHllPWIyKFNuLHllKSkpcmV0dXJuIHRoaXN9ZWxzZSBNYXRoLmFi''@;'; put 'put ''cyh5ZSk8MTYmJiFjdCYmKHllKj02MCk7cmV0dXJuIXRoaXMuX2lzVVRDJiZVZSYmKEZ0PWp1KHRoaXMpKSx0aGlzLl9vZmZzZXQ9eWUsdGhpcy5faXNVVEM9ITAsbnVsbCE9RnQmJnRoaXMuYWRkKEZ0LCJtIiksaXQhPT15ZSYmKCFVZXx8dGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz9tZih0aGlz''@;'; put 'put ''LENzKHllLWl0LCJtIiksMSwhMSk6dGhpcy5fY2hhbmdlSW5Qcm9ncmVzc3x8KHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M9ITAsYy51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz1udWxsKSksdGhpc31yZXR1cm4gdGhpcy5faXNVVEM/aXQ6anUodGhpcyl9LFVp''@;'; put 'put ''LnV0Yz1mdW5jdGlvbiByOCh5ZSl7cmV0dXJuIHRoaXMudXRjT2Zmc2V0KDAseWUpfSxVaS5sb2NhbD1mdW5jdGlvbiBxcyh5ZSl7cmV0dXJuIHRoaXMuX2lzVVRDJiYodGhpcy51dGNPZmZzZXQoMCx5ZSksdGhpcy5faXNVVEM9ITEseWUmJnRoaXMuc3VidHJhY3QoanUodGhpcyksIm0iKSks''@;'; put 'put ''dGhpc30sVWkucGFyc2Vab25lPWZ1bmN0aW9uIEphKCl7aWYobnVsbCE9dGhpcy5fdHptKXRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwhMSwhMCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHRoaXMuX2kpe3ZhciB5ZT1iMihabix0aGlzLl9pKTtudWxsIT15ZT90aGlzLnV0Y09mZnNldCh5''@;'; put 'put ''ZSk6dGhpcy51dGNPZmZzZXQoMCwhMCl9cmV0dXJuIHRoaXN9LFVpLmhhc0FsaWduZWRIb3VyT2Zmc2V0PWZ1bmN0aW9uIE5sKHllKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiYoeWU9eWU/Um8oeWUpLnV0Y09mZnNldCgpOjAsKHRoaXMudXRjT2Zmc2V0KCkteWUpJTYwPT0wKX0sVWkuaXNE''@;'; put 'put ''U1Q9ZnVuY3Rpb24gbjEoKXtyZXR1cm4gdGhpcy51dGNPZmZzZXQoKT50aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCl8fHRoaXMudXRjT2Zmc2V0KCk+dGhpcy5jbG9uZSgpLm1vbnRoKDUpLnV0Y09mZnNldCgpfSxVaS5pc0xvY2FsPWZ1bmN0aW9uIE4wKCl7cmV0dXJuISF0aGlz''@;'; put 'put ''LmlzVmFsaWQoKSYmIXRoaXMuX2lzVVRDfSxVaS5pc1V0Y09mZnNldD1mdW5jdGlvbiByMSgpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJnRoaXMuX2lzVVRDfSxVaS5pc1V0Yz1obCxVaS5pc1VUQz1obCxVaS56b25lQWJicj1mdW5jdGlvbiBoeSgpe3JldHVybiB0aGlzLl9pc1VUQz8iVVRD''@;'; put 'put ''IjoiIn0sVWkuem9uZU5hbWU9ZnVuY3Rpb24gZnkoKXtyZXR1cm4gdGhpcy5faXNVVEM/IkNvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lIjoiIn0sVWkuZGF0ZXM9a2UoImRhdGVzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBkYXRlIGluc3RlYWQuIixPdSksVWkubW9udGhzPWtlKCJt''@;'; put 'put ''b250aHMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbnRoIGluc3RlYWQiLGcyKSxVaS55ZWFycz1rZSgieWVhcnMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIHllYXIgaW5zdGVhZCIsZWEpLFVpLnpvbmU9a2UoIm1vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1v''@;'; put 'put ''bWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3pvbmUvIixmdW5jdGlvbiB3Mih5ZSxVZSl7cmV0dXJuIG51bGwhPXllPygic3RyaW5nIiE9dHlwZW9mIHllJiYoeWU9LXllKSx0aGlzLnV0Y09mZnNldCh5ZSxVZSksdGhpcyk6''@;'; put 'put ''LXRoaXMudXRjT2Zmc2V0KCl9KSxVaS5pc0RTVFNoaWZ0ZWQ9a2UoImlzRFNUU2hpZnRlZCBpcyBkZXByZWNhdGVkLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kc3Qtc2hpZnRlZC8gZm9yIG1vcmUgaW5mb3JtYXRpb24iLGZ1bmN0aW9uIGpkKCl7aWYoIVMo''@;'; put 'put ''dGhpcy5faXNEU1RTaGlmdGVkKSlyZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO3ZhciBVZSx5ZT17fTtyZXR1cm4gcmUoeWUsdGhpcyksKHllPVdpKHllKSkuX2E/KFVlPXllLl9pc1VUQz9IKHllLl9hKTpSbyh5ZS5fYSksdGhpcy5faXNEU1RTaGlmdGVkPXRoaXMuaXNWYWxpZCgpJiZmdW5j''@;'; put 'put ''dGlvbiB0MSh5ZSxVZSxjdCl7dmFyIFhlLGl0PU1hdGgubWluKHllLmxlbmd0aCxVZS5sZW5ndGgpLEZ0PU1hdGguYWJzKHllLmxlbmd0aC1VZS5sZW5ndGgpLFllPTA7Zm9yKFhlPTA7WGU8aXQ7WGUrKykoY3QmJnllW1hlXSE9PVVlW1hlXXx8IWN0JiZVdCh5ZVtYZV0pIT09VXQoVWVbWGVd''@;'; put 'put ''KSkmJlllKys7cmV0dXJuIFllK0Z0fSh5ZS5fYSxVZS50b0FycmF5KCkpPjApOnRoaXMuX2lzRFNUU2hpZnRlZD0hMSx0aGlzLl9pc0RTVFNoaWZ0ZWR9KTt2YXIgeGE9TS5wcm90b3R5cGU7ZnVuY3Rpb24gcGwoeWUsVWUsY3QsaXQpe3ZhciBGdD1yaCgpLFllPUgoKS5zZXQoaXQsVWUpO3Jl''@;'; put 'put ''dHVybiBGdFtjdF0oWWUseWUpfWZ1bmN0aW9uIGlkKHllLFVlLGN0KXtpZihMKHllKSYmKFVlPXllLHllPXZvaWQgMCkseWU9eWV8fCIiLG51bGwhPVVlKXJldHVybiBwbCh5ZSxVZSxjdCwibW9udGgiKTt2YXIgaXQsRnQ9W107Zm9yKGl0PTA7aXQ8MTI7aXQrKylGdFtpdF09cGwoeWUsaXQs''@;'; put 'put ''Y3QsIm1vbnRoIik7cmV0dXJuIEZ0fWZ1bmN0aW9uIGQwKHllLFVlLGN0LGl0KXsiYm9vbGVhbiI9PXR5cGVvZiB5ZT8oTChVZSkmJihjdD1VZSxVZT12b2lkIDApLFVlPVVlfHwiIik6KGN0PVVlPXllLHllPSExLEwoVWUpJiYoY3Q9VWUsVWU9dm9pZCAwKSxVZT1VZXx8IiIpO3ZhciBYZSxG''@;'; put 'put ''dD1yaCgpLFllPXllP0Z0Ll93ZWVrLmRvdzowLHlpPVtdO2lmKG51bGwhPWN0KXJldHVybiBwbChVZSwoY3QrWWUpJTcsaXQsImRheSIpO2ZvcihYZT0wO1hlPDc7WGUrKyl5aVtYZV09cGwoVWUsKFhlK1llKSU3LGl0LCJkYXkiKTtyZXR1cm4geWl9eGEuY2FsZW5kYXI9ZnVuY3Rpb24gRyh5''@;'; put 'put ''ZSxVZSxjdCl7dmFyIGl0PXRoaXMuX2NhbGVuZGFyW3llXXx8dGhpcy5fY2FsZW5kYXIuc2FtZUVsc2U7cmV0dXJuIGYoaXQpP2l0LmNhbGwoVWUsY3QpOml0fSx4YS5sb25nRGF0ZUZvcm1hdD1mdW5jdGlvbiBhZSh5ZSl7dmFyIFVlPXRoaXMuX2xvbmdEYXRlRm9ybWF0W3llXSxjdD10aGlz''@;'; put 'put ''Ll9sb25nRGF0ZUZvcm1hdFt5ZS50b1VwcGVyQ2FzZSgpXTtyZXR1cm4gVWV8fCFjdD9VZToodGhpcy5fbG9uZ0RhdGVGb3JtYXRbeWVdPWN0Lm1hdGNoKHApLm1hcChmdW5jdGlvbihpdCl7cmV0dXJuIk1NTU0iPT09aXR8fCJNTSI9PT1pdHx8IkREIj09PWl0fHwiZGRkZCI9PT1pdD9pdC5z''@;'; put 'put ''bGljZSgxKTppdH0pLmpvaW4oIiIpLHRoaXMuX2xvbmdEYXRlRm9ybWF0W3llXSl9LHhhLmludmFsaWREYXRlPWZ1bmN0aW9uIGplKCl7cmV0dXJuIHRoaXMuX2ludmFsaWREYXRlfSx4YS5vcmRpbmFsPWZ1bmN0aW9uIEZlKHllKXtyZXR1cm4gdGhpcy5fb3JkaW5hbC5yZXBsYWNlKCIlZCIs''@;'; put 'put ''eWUpfSx4YS5wcmVwYXJzZT1kOCx4YS5wb3N0Zm9ybWF0PWQ4LHhhLnJlbGF0aXZlVGltZT1mdW5jdGlvbiBjZSh5ZSxVZSxjdCxpdCl7dmFyIEZ0PXRoaXMuX3JlbGF0aXZlVGltZVtjdF07cmV0dXJuIGYoRnQpP0Z0KHllLFVlLGN0LGl0KTpGdC5yZXBsYWNlKC8lZC9pLHllKX0seGEucGFz''@;'; put 'put ''dEZ1dHVyZT1mdW5jdGlvbiBoZSh5ZSxVZSl7dmFyIGN0PXRoaXMuX3JlbGF0aXZlVGltZVt5ZT4wPyJmdXR1cmUiOiJwYXN0Il07cmV0dXJuIGYoY3QpP2N0KFVlKTpjdC5yZXBsYWNlKC8lcy9pLFVlKX0seGEuc2V0PWZ1bmN0aW9uIGIoeWUpe3ZhciBVZSxjdDtmb3IoY3QgaW4geWUpQyh5''@;'; put 'put ''ZSxjdCkmJihmKFVlPXllW2N0XSk/dGhpc1tjdF09VWU6dGhpc1siXyIrY3RdPVVlKTt0aGlzLl9jb25maWc9eWUsdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ9bmV3IFJlZ0V4cCgodGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZS5zb3VyY2V8fHRoaXMuX29yZGluYWxQ''@;'; put 'put ''YXJzZS5zb3VyY2UpKyJ8IisvXGR7MSwyfS8uc291cmNlKX0seGEuZXJhcz1mdW5jdGlvbiBncCh5ZSxVZSl7dmFyIGN0LGl0LEZ0LFllPXRoaXMuX2VyYXN8fHJoKCJlbiIpLl9lcmFzO2ZvcihjdD0wLGl0PVllLmxlbmd0aDtjdDxpdDsrK2N0KXN3aXRjaCgic3RyaW5nIj09dHlwZW9mIFll''@;'; put 'put ''W2N0XS5zaW5jZSYmKEZ0PWMoWWVbY3RdLnNpbmNlKS5zdGFydE9mKCJkYXkiKSxZZVtjdF0uc2luY2U9RnQudmFsdWVPZigpKSx0eXBlb2YgWWVbY3RdLnVudGlsKXtjYXNlInVuZGVmaW5lZCI6WWVbY3RdLnVudGlsPTEvMDticmVhaztjYXNlInN0cmluZyI6RnQ9YyhZZVtjdF0udW50aWwp''@;'; put 'put ''LnN0YXJ0T2YoImRheSIpLnZhbHVlT2YoKSxZZVtjdF0udW50aWw9RnQudmFsdWVPZigpfXJldHVybiBZZX0seGEuZXJhc1BhcnNlPWZ1bmN0aW9uIF9mKHllLFVlLGN0KXt2YXIgaXQsRnQsWGUseWksV2EsWWU9dGhpcy5lcmFzKCk7Zm9yKHllPXllLnRvVXBwZXJDYXNlKCksaXQ9MCxGdD1Z''@;'; put 'put ''ZS5sZW5ndGg7aXQ8RnQ7KytpdClpZihYZT1ZZVtpdF0ubmFtZS50b1VwcGVyQ2FzZSgpLHlpPVllW2l0XS5hYmJyLnRvVXBwZXJDYXNlKCksV2E9WWVbaXRdLm5hcnJvdy50b1VwcGVyQ2FzZSgpLGN0KXN3aXRjaChVZSl7Y2FzZSJOIjpjYXNlIk5OIjpjYXNlIk5OTiI6aWYoeWk9PT15ZSly''@;'; put 'put ''ZXR1cm4gWWVbaXRdO2JyZWFrO2Nhc2UiTk5OTiI6aWYoWGU9PT15ZSlyZXR1cm4gWWVbaXRdO2JyZWFrO2Nhc2UiTk5OTk4iOmlmKFdhPT09eWUpcmV0dXJuIFllW2l0XX1lbHNlIGlmKFtYZSx5aSxXYV0uaW5kZXhPZih5ZSk+PTApcmV0dXJuIFllW2l0XX0seGEuZXJhc0NvbnZlcnRZZWFy''@;'; put 'put ''PWZ1bmN0aW9uIEJtKHllLFVlKXt2YXIgY3Q9eWUuc2luY2U8PXllLnVudGlsPzE6LTE7cmV0dXJuIHZvaWQgMD09PVVlP2MoeWUuc2luY2UpLnllYXIoKTpjKHllLnNpbmNlKS55ZWFyKCkrKFVlLXllLm9mZnNldCkqY3R9LHhhLmVyYXNBYmJyUmVnZXg9ZnVuY3Rpb24gZzMoeWUpe3JldHVy''@;'; put 'put ''biBDKHRoaXMsIl9lcmFzQWJiclJlZ2V4Iil8fHhnLmNhbGwodGhpcykseWU/dGhpcy5fZXJhc0FiYnJSZWdleDp0aGlzLl9lcmFzUmVnZXh9LHhhLmVyYXNOYW1lUmVnZXg9ZnVuY3Rpb24gbzEoeWUpe3JldHVybiBDKHRoaXMsIl9lcmFzTmFtZVJlZ2V4Iil8fHhnLmNhbGwodGhpcykseWU/''@;'; put 'put ''dGhpcy5fZXJhc05hbWVSZWdleDp0aGlzLl9lcmFzUmVnZXh9LHhhLmVyYXNOYXJyb3dSZWdleD1mdW5jdGlvbiBtMyh5ZSl7cmV0dXJuIEModGhpcywiX2VyYXNOYXJyb3dSZWdleCIpfHx4Zy5jYWxsKHRoaXMpLHllP3RoaXMuX2VyYXNOYXJyb3dSZWdleDp0aGlzLl9lcmFzUmVnZXh9LHhh''@;'; put 'put ''Lm1vbnRocz1mdW5jdGlvbiBUaSh5ZSxVZSl7cmV0dXJuIHllP0EodGhpcy5fbW9udGhzKT90aGlzLl9tb250aHNbeWUubW9udGgoKV06dGhpcy5fbW9udGhzWyh0aGlzLl9tb250aHMuaXNGb3JtYXR8fF9zKS50ZXN0KFVlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdW3llLm1vbnRoKCldOkEo''@;'; put 'put ''dGhpcy5fbW9udGhzKT90aGlzLl9tb250aHM6dGhpcy5fbW9udGhzLnN0YW5kYWxvbmV9LHhhLm1vbnRoc1Nob3J0PWZ1bmN0aW9uIFduKHllLFVlKXtyZXR1cm4geWU/QSh0aGlzLl9tb250aHNTaG9ydCk/dGhpcy5fbW9udGhzU2hvcnRbeWUubW9udGgoKV06dGhpcy5fbW9udGhzU2hvcnRb''@;'; put 'put ''X3MudGVzdChVZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXVt5ZS5tb250aCgpXTpBKHRoaXMuX21vbnRoc1Nob3J0KT90aGlzLl9tb250aHNTaG9ydDp0aGlzLl9tb250aHNTaG9ydC5zdGFuZGFsb25lfSx4YS5tb250aHNQYXJzZT1mdW5jdGlvbiBkYyh5ZSxVZSxjdCl7dmFyIGl0LEZ0LFll''@;'; put 'put ''O2lmKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpcmV0dXJuIFFoLmNhbGwodGhpcyx5ZSxVZSxjdCk7Zm9yKHRoaXMuX21vbnRoc1BhcnNlfHwodGhpcy5fbW9udGhzUGFyc2U9W10sdGhpcy5fbG9uZ01vbnRoc1BhcnNlPVtdLHRoaXMuX3Nob3J0TW9udGhzUGFyc2U9W10pLGl0PTA7aXQ8MTI7''@;'; put 'put ''aXQrKyl7aWYoRnQ9SChbMmUzLGl0XSksY3QmJiF0aGlzLl9sb25nTW9udGhzUGFyc2VbaXRdJiYodGhpcy5fbG9uZ01vbnRoc1BhcnNlW2l0XT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRocyhGdCwiIikucmVwbGFjZSgiLiIsIiIpKyIkIiwiaSIpLHRoaXMuX3Nob3J0TW9udGhzUGFyc2Vb''@;'; put 'put ''aXRdPW5ldyBSZWdFeHAoIl4iK3RoaXMubW9udGhzU2hvcnQoRnQsIiIpLnJlcGxhY2UoIi4iLCIiKSsiJCIsImkiKSksIWN0JiYhdGhpcy5fbW9udGhzUGFyc2VbaXRdJiYoWWU9Il4iK3RoaXMubW9udGhzKEZ0LCIiKSsifF4iK3RoaXMubW9udGhzU2hvcnQoRnQsIiIpLHRoaXMuX21vbnRo''@;'; put 'put ''c1BhcnNlW2l0XT1uZXcgUmVnRXhwKFllLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxjdCYmIk1NTU0iPT09VWUmJnRoaXMuX2xvbmdNb250aHNQYXJzZVtpdF0udGVzdCh5ZSkpcmV0dXJuIGl0O2lmKGN0JiYiTU1NIj09PVVlJiZ0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2l0XS50ZXN0KHllKSly''@;'; put 'put ''ZXR1cm4gaXQ7aWYoIWN0JiZ0aGlzLl9tb250aHNQYXJzZVtpdF0udGVzdCh5ZSkpcmV0dXJuIGl0fX0seGEubW9udGhzUmVnZXg9ZnVuY3Rpb24gc3AoeWUpe3JldHVybiB0aGlzLl9tb250aHNQYXJzZUV4YWN0PyhDKHRoaXMsIl9tb250aHNSZWdleCIpfHxScy5jYWxsKHRoaXMpLHllP3Ro''@;'; put 'put ''aXMuX21vbnRoc1N0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1JlZ2V4KTooQyh0aGlzLCJfbW9udGhzUmVnZXgiKXx8KHRoaXMuX21vbnRoc1JlZ2V4PUNsKSx0aGlzLl9tb250aHNTdHJpY3RSZWdleCYmeWU/dGhpcy5fbW9udGhzU3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzUmVnZXgpfSx4YS5t''@;'; put 'put ''b250aHNTaG9ydFJlZ2V4PWZ1bmN0aW9uIFVzKHllKXtyZXR1cm4gdGhpcy5fbW9udGhzUGFyc2VFeGFjdD8oQyh0aGlzLCJfbW9udGhzUmVnZXgiKXx8UnMuY2FsbCh0aGlzKSx5ZT90aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1Nob3J0UmVnZXgpOihDKHRoaXMs''@;'; put 'put ''Il9tb250aHNTaG9ydFJlZ2V4Iil8fCh0aGlzLl9tb250aHNTaG9ydFJlZ2V4PWpzKSx0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4JiZ5ZT90aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1Nob3J0UmVnZXgpfSx4YS53ZWVrPWZ1bmN0aW9uIFFjKHllKXtyZXR1''@;'; put 'put ''cm4gZmEoeWUsdGhpcy5fd2Vlay5kb3csdGhpcy5fd2Vlay5kb3kpLndlZWt9LHhhLmZpcnN0RGF5T2ZZZWFyPWZ1bmN0aW9uIGJnKCl7cmV0dXJuIHRoaXMuX3dlZWsuZG95fSx4YS5maXJzdERheU9mV2Vlaz1mdW5jdGlvbiBhMCgpe3JldHVybiB0aGlzLl93ZWVrLmRvd30seGEud2Vla2Rh''@;'; put 'put ''eXM9ZnVuY3Rpb24gQnUoeWUsVWUpe3ZhciBjdD1BKHRoaXMuX3dlZWtkYXlzKT90aGlzLl93ZWVrZGF5czp0aGlzLl93ZWVrZGF5c1t5ZSYmITAhPT15ZSYmdGhpcy5fd2Vla2RheXMuaXNGb3JtYXQudGVzdChVZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXTtyZXR1cm4hMD09PXllP25oKGN0''@;'; put 'put ''LHRoaXMuX3dlZWsuZG93KTp5ZT9jdFt5ZS5kYXkoKV06Y3R9LHhhLndlZWtkYXlzTWluPWZ1bmN0aW9uIFJ1KHllKXtyZXR1cm4hMD09PXllP25oKHRoaXMuX3dlZWtkYXlzTWluLHRoaXMuX3dlZWsuZG93KTp5ZT90aGlzLl93ZWVrZGF5c01pblt5ZS5kYXkoKV06dGhpcy5fd2Vla2RheXNN''@;'; put 'put ''aW59LHhhLndlZWtkYXlzU2hvcnQ9ZnVuY3Rpb24gTjEoeWUpe3JldHVybiEwPT09eWU/bmgodGhpcy5fd2Vla2RheXNTaG9ydCx0aGlzLl93ZWVrLmRvdyk6eWU/dGhpcy5fd2Vla2RheXNTaG9ydFt5ZS5kYXkoKV06dGhpcy5fd2Vla2RheXNTaG9ydH0seGEud2Vla2RheXNQYXJzZT1mdW5j''@;'; put 'put ''dGlvbiBlZCh5ZSxVZSxjdCl7dmFyIGl0LEZ0LFllO2lmKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdClyZXR1cm4gaGMuY2FsbCh0aGlzLHllLFVlLGN0KTtmb3IodGhpcy5fd2Vla2RheXNQYXJzZXx8KHRoaXMuX3dlZWtkYXlzUGFyc2U9W10sdGhpcy5fbWluV2Vla2RheXNQYXJzZT1bXSx0''@;'; put 'put ''aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2U9W10sdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2U9W10pLGl0PTA7aXQ8NztpdCsrKXtpZihGdD1IKFsyZTMsMV0pLmRheShpdCksY3QmJiF0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpdF0mJih0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpdF09bmV3IFJl''@;'; put 'put ''Z0V4cCgiXiIrdGhpcy53ZWVrZGF5cyhGdCwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaXRdPW5ldyBSZWdFeHAoIl4iK3RoaXMud2Vla2RheXNTaG9ydChGdCwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSx0aGlzLl9t''@;'; put 'put ''aW5XZWVrZGF5c1BhcnNlW2l0XT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzTWluKEZ0LCIiKS5yZXBsYWNlKCIuIiwiXFwuPyIpKyIkIiwiaSIpKSx0aGlzLl93ZWVrZGF5c1BhcnNlW2l0XXx8KFllPSJeIit0aGlzLndlZWtkYXlzKEZ0LCIiKSsifF4iK3RoaXMud2Vla2RheXNTaG9y''@;'; put 'put ''dChGdCwiIikrInxeIit0aGlzLndlZWtkYXlzTWluKEZ0LCIiKSx0aGlzLl93ZWVrZGF5c1BhcnNlW2l0XT1uZXcgUmVnRXhwKFllLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxjdCYmImRkZGQiPT09VWUmJnRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2l0XS50ZXN0KHllKSlyZXR1cm4gaXQ7aWYo''@;'; put 'put ''Y3QmJiJkZGQiPT09VWUmJnRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpdF0udGVzdCh5ZSkpcmV0dXJuIGl0O2lmKGN0JiYiZGQiPT09VWUmJnRoaXMuX21pbldlZWtkYXlzUGFyc2VbaXRdLnRlc3QoeWUpKXJldHVybiBpdDtpZighY3QmJnRoaXMuX3dlZWtkYXlzUGFyc2VbaXRdLnRlc3Qo''@;'; put 'put ''eWUpKXJldHVybiBpdH19LHhhLndlZWtkYXlzUmVnZXg9ZnVuY3Rpb24gZXUoeWUpe3JldHVybiB0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3Q/KEModGhpcywiX3dlZWtkYXlzUmVnZXgiKXx8aXIuY2FsbCh0aGlzKSx5ZT90aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlz''@;'; put 'put ''UmVnZXgpOihDKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1JlZ2V4PWxwKSx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4JiZ5ZT90aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzUmVnZXgpfSx4YS53ZWVrZGF5c1Nob3J0UmVnZXg9ZnVuY3Rp''@;'; put 'put ''b24gU2woeWUpe3JldHVybiB0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3Q/KEModGhpcywiX3dlZWtkYXlzUmVnZXgiKXx8aXIuY2FsbCh0aGlzKSx5ZT90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KTooQyh0aGlzLCJfd2Vla2RheXNTaG9y''@;'; put 'put ''dFJlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg9RGwpLHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCYmeWU/dGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCl9LHhhLndlZWtkYXlzTWluUmVnZXg9ZnVuY3Rpb24gY24o''@;'; put 'put ''eWUpe3JldHVybiB0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3Q/KEModGhpcywiX3dlZWtkYXlzUmVnZXgiKXx8aXIuY2FsbCh0aGlzKSx5ZT90aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzTWluUmVnZXgpOihDKHRoaXMsIl93ZWVrZGF5c01pblJlZ2V4Iil8fCh0''@;'; put 'put ''aGlzLl93ZWVrZGF5c01pblJlZ2V4PUVvKSx0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4JiZ5ZT90aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzTWluUmVnZXgpfSx4YS5pc1BNPWZ1bmN0aW9uIHRjKHllKXtyZXR1cm4icCI9PT0oeWUrIiIpLnRvTG93ZXJD''@;'; put 'put ''YXNlKCkuY2hhckF0KDApfSx4YS5tZXJpZGllbT1mdW5jdGlvbiBwcyh5ZSxVZSxjdCl7cmV0dXJuIHllPjExP2N0PyJwbSI6IlBNIjpjdD8iYW0iOiJBTSJ9LEl1KCJlbiIse2VyYXM6W3tzaW5jZToiMDAwMS0wMS0wMSIsdW50aWw6MS8wLG9mZnNldDoxLG5hbWU6IkFubm8gRG9taW5pIixu''@;'; put 'put ''YXJyb3c6IkFEIixhYmJyOiJBRCJ9LHtzaW5jZToiMDAwMC0xMi0zMSIsdW50aWw6LTEvMCxvZmZzZXQ6MSxuYW1lOiJCZWZvcmUgQ2hyaXN0IixuYXJyb3c6IkJDIixhYmJyOiJCQyJ9XSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHRofHN0fG5kfHJkKS8sb3JkaW5hbDpmdW5j''@;'; put 'put ''dGlvbih5ZSl7dmFyIFVlPXllJTEwO3JldHVybiB5ZSsoMT09PVV0KHllJTEwMC8xMCk/InRoIjoxPT09VWU/InN0IjoyPT09VWU/Im5kIjozPT09VWU/InJkIjoidGgiKX19KSxjLmxhbmc9a2UoIm1vbWVudC5sYW5nIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlIGluc3RlYWQu''@;'; put 'put ''IixJdSksYy5sYW5nRGF0YT1rZSgibW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLiIscmgpO3ZhciAkZT1NYXRoLmFicztmdW5jdGlvbiBRdCh5ZSxVZSxjdCxpdCl7dmFyIEZ0PUNzKFVlLGN0KTtyZXR1cm4geWUuX21pbGxpc2Vj''@;'; put 'put ''b25kcys9aXQqRnQuX21pbGxpc2Vjb25kcyx5ZS5fZGF5cys9aXQqRnQuX2RheXMseWUuX21vbnRocys9aXQqRnQuX21vbnRocyx5ZS5fYnViYmxlKCl9ZnVuY3Rpb24gVXIoeWUpe3JldHVybiB5ZTwwP01hdGguZmxvb3IoeWUpOk1hdGguY2VpbCh5ZSl9ZnVuY3Rpb24gRHIoeWUpe3JldHVy''@;'; put 'put ''biA0ODAwKnllLzE0NjA5N31mdW5jdGlvbiBKaSh5ZSl7cmV0dXJuIDE0NjA5Nyp5ZS80ODAwfWZ1bmN0aW9uIFlpKHllKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcyh5ZSl9fXZhciBkcz1ZaSgibXMiKSxQcz1ZaSgicyIpLGFhPVlpKCJtIiksSW89WWkoImgiKSxaaT1ZaSgi''@;'; put 'put ''ZCIpLGdsPVlpKCJ3Iiksamw9WWkoIk0iKSxWMT1ZaSgiUSIpLHBjPVlpKCJ5IiksVWQ9ZHM7ZnVuY3Rpb24gWmMoeWUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLl9kYXRhW3llXTpOYU59fXZhciBoMD1aYygibWlsbGlzZWNvbmRzIiksUzI9WmMoInNl''@;'; put 'put ''Y29uZHMiKSxfMz1aYygibWludXRlcyIpLE1mPVpjKCJob3VycyIpLGloPVpjKCJkYXlzIiksa2c9WmMoIm1vbnRocyIpLFp1PVpjKCJ5ZWFycyIpO3ZhciBwYT1NYXRoLnJvdW5kLEloPXtzczo0NCxzOjQ1LG06NDUsaDoyMixkOjI2LHc6bnVsbCxNOjExfTtmdW5jdGlvbiBSZyh5ZSxVZSxj''@;'; put 'put ''dCxpdCxGdCl7cmV0dXJuIEZ0LnJlbGF0aXZlVGltZShVZXx8MSwhIWN0LHllLGl0KX12YXIgSWc9TWF0aC5hYnM7ZnVuY3Rpb24gdnAoeWUpe3JldHVybih5ZT4wKS0oeWU8MCl8fCt5ZX1mdW5jdGlvbiBmMCgpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCku''@;'; put 'put ''aW52YWxpZERhdGUoKTt2YXIgaXQsRnQsWWUsWGUsV2EsU3MsV3MsYzEseWU9SWcodGhpcy5fbWlsbGlzZWNvbmRzKS8xZTMsVWU9SWcodGhpcy5fZGF5cyksY3Q9SWcodGhpcy5fbW9udGhzKSx5aT10aGlzLmFzU2Vjb25kcygpO3JldHVybiB5aT8oaXQ9R2UoeWUvNjApLEZ0PUdlKGl0LzYw''@;'; put 'put ''KSx5ZSU9NjAsaXQlPTYwLFllPUdlKGN0LzEyKSxjdCU9MTIsWGU9eWU/eWUudG9GaXhlZCgzKS5yZXBsYWNlKC9cLj8wKyQvLCIiKToiIixXYT15aTwwPyItIjoiIixTcz12cCh0aGlzLl9tb250aHMpIT09dnAoeWkpPyItIjoiIixXcz12cCh0aGlzLl9kYXlzKSE9PXZwKHlpKT8iLSI6IiIs''@;'; put 'put ''YzE9dnAodGhpcy5fbWlsbGlzZWNvbmRzKSE9PXZwKHlpKT8iLSI6IiIsV2ErIlAiKyhZZT9TcytZZSsiWSI6IiIpKyhjdD9TcytjdCsiTSI6IiIpKyhVZT9XcytVZSsiRCI6IiIpKyhGdHx8aXR8fHllPyJUIjoiIikrKEZ0P2MxK0Z0KyJIIjoiIikrKGl0P2MxK2l0KyJNIjoiIikrKHllP2Mx''@;'; put 'put ''K1hlKyJTIjoiIikpOiJQMEQifXZhciBIcz15Mi5wcm90b3R5cGU7cmV0dXJuIEhzLmlzVmFsaWQ9ZnVuY3Rpb24gV2MoKXtyZXR1cm4gdGhpcy5faXNWYWxpZH0sSHMuYWJzPWZ1bmN0aW9uIFN0KCl7dmFyIHllPXRoaXMuX2RhdGE7cmV0dXJuIHRoaXMuX21pbGxpc2Vjb25kcz0kZSh0aGlz''@;'; put 'put ''Ll9taWxsaXNlY29uZHMpLHRoaXMuX2RheXM9JGUodGhpcy5fZGF5cyksdGhpcy5fbW9udGhzPSRlKHRoaXMuX21vbnRocykseWUubWlsbGlzZWNvbmRzPSRlKHllLm1pbGxpc2Vjb25kcykseWUuc2Vjb25kcz0kZSh5ZS5zZWNvbmRzKSx5ZS5taW51dGVzPSRlKHllLm1pbnV0ZXMpLHllLmhv''@;'; put 'put ''dXJzPSRlKHllLmhvdXJzKSx5ZS5tb250aHM9JGUoeWUubW9udGhzKSx5ZS55ZWFycz0kZSh5ZS55ZWFycyksdGhpc30sSHMuYWRkPWZ1bmN0aW9uIEVuKHllLFVlKXtyZXR1cm4gUXQodGhpcyx5ZSxVZSwxKX0sSHMuc3VidHJhY3Q9ZnVuY3Rpb24gY3IoeWUsVWUpe3JldHVybiBRdCh0aGlz''@;'; put 'put ''LHllLFVlLC0xKX0sSHMuYXM9ZnVuY3Rpb24geG8oeWUpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gTmFOO3ZhciBVZSxjdCxpdD10aGlzLl9taWxsaXNlY29uZHM7aWYoIm1vbnRoIj09PSh5ZT1KZSh5ZSkpfHwicXVhcnRlciI9PT15ZXx8InllYXIiPT09eWUpc3dpdGNoKFVlPXRoaXMu''@;'; put 'put ''X2RheXMraXQvODY0ZTUsY3Q9dGhpcy5fbW9udGhzK0RyKFVlKSx5ZSl7Y2FzZSJtb250aCI6cmV0dXJuIGN0O2Nhc2UicXVhcnRlciI6cmV0dXJuIGN0LzM7Y2FzZSJ5ZWFyIjpyZXR1cm4gY3QvMTJ9ZWxzZSBzd2l0Y2goVWU9dGhpcy5fZGF5cytNYXRoLnJvdW5kKEppKHRoaXMuX21vbnRo''@;'; put 'put ''cykpLHllKXtjYXNlIndlZWsiOnJldHVybiBVZS83K2l0LzYwNDhlNTtjYXNlImRheSI6cmV0dXJuIFVlK2l0Lzg2NGU1O2Nhc2UiaG91ciI6cmV0dXJuIDI0KlVlK2l0LzM2ZTU7Y2FzZSJtaW51dGUiOnJldHVybiAxNDQwKlVlK2l0LzZlNDtjYXNlInNlY29uZCI6cmV0dXJuIDg2NDAwKlVl''@;'; put 'put ''K2l0LzFlMztjYXNlIm1pbGxpc2Vjb25kIjpyZXR1cm4gTWF0aC5mbG9vcig4NjRlNSpVZSkraXQ7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gdW5pdCAiK3llKX19LEhzLmFzTWlsbGlzZWNvbmRzPWRzLEhzLmFzU2Vjb25kcz1QcyxIcy5hc01pbnV0ZXM9YWEsSHMuYXNIb3Vy''@;'; put 'put ''cz1JbyxIcy5hc0RheXM9WmksSHMuYXNXZWVrcz1nbCxIcy5hc01vbnRocz1qbCxIcy5hc1F1YXJ0ZXJzPVYxLEhzLmFzWWVhcnM9cGMsSHMudmFsdWVPZj1VZCxIcy5fYnViYmxlPWZ1bmN0aW9uIHBpKCl7dmFyIEZ0LFllLFhlLHlpLFdhLHllPXRoaXMuX21pbGxpc2Vjb25kcyxVZT10aGlz''@;'; put 'put ''Ll9kYXlzLGN0PXRoaXMuX21vbnRocyxpdD10aGlzLl9kYXRhO3JldHVybiB5ZT49MCYmVWU+PTAmJmN0Pj0wfHx5ZTw9MCYmVWU8PTAmJmN0PD0wfHwoeWUrPTg2NGU1KlVyKEppKGN0KStVZSksVWU9MCxjdD0wKSxpdC5taWxsaXNlY29uZHM9eWUlMWUzLEZ0PUdlKHllLzFlMyksaXQuc2Vj''@;'; put 'put ''b25kcz1GdCU2MCxZZT1HZShGdC82MCksaXQubWludXRlcz1ZZSU2MCxYZT1HZShZZS82MCksaXQuaG91cnM9WGUlMjQsVWUrPUdlKFhlLzI0KSxjdCs9V2E9R2UoRHIoVWUpKSxVZS09VXIoSmkoV2EpKSx5aT1HZShjdC8xMiksY3QlPTEyLGl0LmRheXM9VWUsaXQubW9udGhzPWN0LGl0Lnll''@;'; put 'put ''YXJzPXlpLHRoaXN9LEhzLmNsb25lPWZ1bmN0aW9uIGwxKCl7cmV0dXJuIENzKHRoaXMpfSxIcy5nZXQ9ZnVuY3Rpb24gb2QoeWUpe3JldHVybiB5ZT1KZSh5ZSksdGhpcy5pc1ZhbGlkKCk/dGhpc1t5ZSsicyJdKCk6TmFOfSxIcy5taWxsaXNlY29uZHM9aDAsSHMuc2Vjb25kcz1TMixIcy5t''@;'; put 'put ''aW51dGVzPV8zLEhzLmhvdXJzPU1mLEhzLmRheXM9aWgsSHMud2Vla3M9ZnVuY3Rpb24gUzkoKXtyZXR1cm4gR2UodGhpcy5kYXlzKCkvNyl9LEhzLm1vbnRocz1rZyxIcy55ZWFycz1adSxIcy5odW1hbml6ZT1mdW5jdGlvbiBwOCh5ZSxVZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiB0''@;'; put 'put ''aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO3ZhciBGdCxZZSxjdD0hMSxpdD1JaDtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHllJiYoVWU9eWUseWU9ITEpLCJib29sZWFuIj09dHlwZW9mIHllJiYoY3Q9eWUpLCJvYmplY3QiPT10eXBlb2YgVWUmJihpdD1PYmplY3QuYXNzaWduKHt9''@;'; put 'put ''LEloLFVlKSxudWxsIT1VZS5zJiZudWxsPT1VZS5zcyYmKGl0LnNzPVVlLnMtMSkpLFllPWZ1bmN0aW9uIGY4KHllLFVlLGN0LGl0KXt2YXIgRnQ9Q3MoeWUpLmFicygpLFllPXBhKEZ0LmFzKCJzIikpLFhlPXBhKEZ0LmFzKCJtIikpLHlpPXBhKEZ0LmFzKCJoIikpLFdhPXBhKEZ0LmFzKCJk''@;'; put 'put ''IikpLFNzPXBhKEZ0LmFzKCJNIikpLFdzPXBhKEZ0LmFzKCJ3IikpLGMxPXBhKEZ0LmFzKCJ5IikpLERoPVllPD1jdC5zcyYmWyJzIixZZV18fFllPGN0LnMmJlsic3MiLFllXXx8WGU8PTEmJlsibSJdfHxYZTxjdC5tJiZbIm1tIixYZV18fHlpPD0xJiZbImgiXXx8eWk8Y3QuaCYmWyJoaCIs''@;'; put 'put ''eWldfHxXYTw9MSYmWyJkIl18fFdhPGN0LmQmJlsiZGQiLFdhXTtyZXR1cm4gbnVsbCE9Y3QudyYmKERoPURofHxXczw9MSYmWyJ3Il18fFdzPGN0LncmJlsid3ciLFdzXSksKERoPURofHxTczw9MSYmWyJNIl18fFNzPGN0Lk0mJlsiTU0iLFNzXXx8YzE8PTEmJlsieSJdfHxbInl5IixjMV0p''@;'; put 'put ''WzJdPVVlLERoWzNdPSt5ZT4wLERoWzRdPWl0LFJnLmFwcGx5KG51bGwsRGgpfSh0aGlzLCFjdCxpdCxGdD10aGlzLmxvY2FsZURhdGEoKSksY3QmJihZZT1GdC5wYXN0RnV0dXJlKCt0aGlzLFllKSksRnQucG9zdGZvcm1hdChZZSl9LEhzLnRvSVNPU3RyaW5nPWYwLEhzLnRvU3RyaW5nPWYw''@;'; put 'put ''LEhzLnRvSlNPTj1mMCxIcy5sb2NhbGU9dWEsSHMubG9jYWxlRGF0YT1MdSxIcy50b0lzb1N0cmluZz1rZSgidG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscykiLGYwKSxIcy5sYW5nPXZmLF9l''@;'; put 'put ''KCJYIiwwLDAsInVuaXgiKSxfZSgieCIsMCwwLCJ2YWx1ZU9mIiksTm4oIngiLHVyKSxObigiWCIsL1srLV0/XGQrKFwuXGR7MSwzfSk/LykseHQoIlgiLGZ1bmN0aW9uKHllLFVlLGN0KXtjdC5fZD1uZXcgRGF0ZSgxZTMqcGFyc2VGbG9hdCh5ZSkpfSkseHQoIngiLGZ1bmN0aW9uKHllLFVl''@;'; put 'put ''LGN0KXtjdC5fZD1uZXcgRGF0ZShVdCh5ZSkpfSksYy52ZXJzaW9uPSIyLjMwLjEiLGZ1bmN0aW9uIHMoeWUpe3k9eWV9KFJvKSxjLmZuPVVpLGMubWluPWZ1bmN0aW9uIHNuKCl7cmV0dXJuIGNvKCJpc0JlZm9yZSIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpfSxjLm1heD1mdW5jdGlv''@;'; put 'put ''biBpbygpe3JldHVybiBjbygiaXNBZnRlciIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpfSxjLm5vdz1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdz9EYXRlLm5vdygpOituZXcgRGF0ZX0sYy51dGM9SCxjLnVuaXg9ZnVuY3Rpb24gbXAoeWUpe3JldHVybiBSbygxZTMqeWUpfSxjLm1v''@;'; put 'put ''bnRocz1mdW5jdGlvbiBoOCh5ZSxVZSl7cmV0dXJuIGlkKHllLFVlLCJtb250aHMiKX0sYy5pc0RhdGU9UixjLmxvY2FsZT1JdSxjLmludmFsaWQ9RixjLmR1cmF0aW9uPUNzLGMuaXNNb21lbnQ9Q2UsYy53ZWVrZGF5cz1mdW5jdGlvbiBsZSh5ZSxVZSxjdCl7cmV0dXJuIGQwKHllLFVlLGN0''@;'; put 'put ''LCJ3ZWVrZGF5cyIpfSxjLnBhcnNlWm9uZT1mdW5jdGlvbiBhNSgpe3JldHVybiBSby5hcHBseShudWxsLGFyZ3VtZW50cykucGFyc2Vab25lKCl9LGMubG9jYWxlRGF0YT1yaCxjLmlzRHVyYXRpb249RHUsYy5tb250aHNTaG9ydD1mdW5jdGlvbiBwZSh5ZSxVZSl7cmV0dXJuIGlkKHllLFVl''@;'; put 'put ''LCJtb250aHNTaG9ydCIpfSxjLndlZWtkYXlzTWluPWZ1bmN0aW9uIE9lKHllLFVlLGN0KXtyZXR1cm4gZDAoeWUsVWUsY3QsIndlZWtkYXlzTWluIil9LGMuZGVmaW5lTG9jYWxlPU1jLGMudXBkYXRlTG9jYWxlPWZ1bmN0aW9uIElpKHllLFVlKXtpZihudWxsIT1VZSl7dmFyIGN0LGl0LEZ0''@;'; put 'put ''PXR1O251bGwhPWdzW3llXSYmbnVsbCE9Z3NbeWVdLnBhcmVudExvY2FsZT9nc1t5ZV0uc2V0KGsoZ3NbeWVdLl9jb25maWcsVWUpKToobnVsbCE9KGl0PUZyKHllKSkmJihGdD1pdC5fY29uZmlnKSxVZT1rKEZ0LFVlKSxudWxsPT1pdCYmKFVlLmFiYnI9eWUpLChjdD1uZXcgTShVZSkpLnBh''@;'; put 'put ''cmVudExvY2FsZT1nc1t5ZV0sZ3NbeWVdPWN0KSxJdSh5ZSl9ZWxzZSBudWxsIT1nc1t5ZV0mJihudWxsIT1nc1t5ZV0ucGFyZW50TG9jYWxlPyhnc1t5ZV09Z3NbeWVdLnBhcmVudExvY2FsZSx5ZT09PUl1KCkmJkl1KHllKSk6bnVsbCE9Z3NbeWVdJiZkZWxldGUgZ3NbeWVdKTtyZXR1cm4g''@;'; put 'put ''Z3NbeWVdfSxjLmxvY2FsZXM9ZnVuY3Rpb24gbjUoKXtyZXR1cm4gQihncyl9LGMud2Vla2RheXNTaG9ydD1mdW5jdGlvbiBiZSh5ZSxVZSxjdCl7cmV0dXJuIGQwKHllLFVlLGN0LCJ3ZWVrZGF5c1Nob3J0Iil9LGMubm9ybWFsaXplVW5pdHM9SmUsYy5yZWxhdGl2ZVRpbWVSb3VuZGluZz1m''@;'; put 'put ''dW5jdGlvbiBFOSh5ZSl7cmV0dXJuIHZvaWQgMD09PXllP3BhOiJmdW5jdGlvbiI9PXR5cGVvZiB5ZSYmKHBhPXllLCEwKX0sYy5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQ9ZnVuY3Rpb24gUDAoeWUsVWUpe3JldHVybiB2b2lkIDAhPT1JaFt5ZV0mJih2b2lkIDA9PT1VZT9JaFt5ZV06KEloW3ll''@;'; put 'put ''XT1VZSwicyI9PT15ZSYmKEloLnNzPVVlLTEpLCEwKSl9LGMuY2FsZW5kYXJGb3JtYXQ9ZnVuY3Rpb24gYzAoeWUsVWUpe3ZhciBjdD15ZS5kaWZmKFVlLCJkYXlzIiwhMCk7cmV0dXJuIGN0PC02PyJzYW1lRWxzZSI6Y3Q8LTE/Imxhc3RXZWVrIjpjdDwwPyJsYXN0RGF5IjpjdDwxPyJzYW1l''@;'; put 'put ''RGF5IjpjdDwyPyJuZXh0RGF5IjpjdDw3PyJuZXh0V2VlayI6InNhbWVFbHNlIn0sYy5wcm90b3R5cGU9VWksYy5IVE1MNV9GTVQ9e0RBVEVUSU1FX0xPQ0FMOiJZWVlZLU1NLUREVEhIOm1tIixEQVRFVElNRV9MT0NBTF9TRUNPTkRTOiJZWVlZLU1NLUREVEhIOm1tOnNzIixEQVRFVElNRV9M''@;'; put 'put ''T0NBTF9NUzoiWVlZWS1NTS1ERFRISDptbTpzcy5TU1MiLERBVEU6IllZWVktTU0tREQiLFRJTUU6IkhIOm1tIixUSU1FX1NFQ09ORFM6IkhIOm1tOnNzIixUSU1FX01TOiJISDptbTpzcy5TU1MiLFdFRUs6IkdHR0ctW1ddV1ciLE1PTlRIOiJZWVlZLU1NIn0sY30oKX0sNTAxOShmZSl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO2ZlLmV4cG9ydHM9WyJGbG9hdDE2QXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIlVpbnQ4QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXki''@;'; put 'put ''LCJCaWdJbnQ2NEFycmF5IiwiQmlnVWludDY0QXJyYXkiXX0sOTY1NihmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9dHlwZW9mIHByb2Nlc3M+InUifHwhcHJvY2Vzcy52ZXJzaW9ufHwwPT09cHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoInYwLiIpfHwwPT09cHJvY2Vzcy52ZXJzaW9uLmlu''@;'; put 'put ''ZGV4T2YoInYxLiIpJiYwIT09cHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoInYxLjguIik/e25leHRUaWNrOmZ1bmN0aW9uIGooaCx5LGMscyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGgpdGhyb3cgbmV3IFR5cGVFcnJvcignImNhbGxiYWNrIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24n''@;'; put 'put ''KTt2YXIgdixDLEE9YXJndW1lbnRzLmxlbmd0aDtzd2l0Y2goQSl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhoKTtjYXNlIDI6cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtoLmNhbGwobnVsbCx5KX0pO2Nhc2UgMzpyZXR1cm4gcHJvY2Vzcy5uZXh0''@;'; put 'put ''VGljayhmdW5jdGlvbigpe2guY2FsbChudWxsLHksYyl9KTtjYXNlIDQ6cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtoLmNhbGwobnVsbCx5LGMscyl9KTtkZWZhdWx0OmZvcih2PW5ldyBBcnJheShBLTEpLEM9MDtDPHYubGVuZ3RoOyl2W0MrK109YXJndW1lbnRzW0NdO3Jl''@;'; put 'put ''dHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7aC5hcHBseShudWxsLHYpfSl9fX06cHJvY2Vzc30sMzM0MihmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT02NTUzNixBPWgoMjcwNTQpLkJ1ZmZlcix2PWdsb2JhbC5jcnlwdG98fGdsb2JhbC5tc0NyeXB0bztmZS5leHBvcnRzPXYm''@;'; put 'put ''JnYuZ2V0UmFuZG9tVmFsdWVzP2Z1bmN0aW9uIEModyxTKXtpZih3PjQyOTQ5NjcyOTUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMiKTt2YXIgTD1BLmFsbG9jVW5zYWZlKHcpO2lmKHc+MClpZih3PnkpZm9yKHZhciBSPTA7Ujx3O1IrPXkp''@;'; put 'put ''di5nZXRSYW5kb21WYWx1ZXMoTC5zbGljZShSLFIreSkpO2Vsc2Ugdi5nZXRSYW5kb21WYWx1ZXMoTCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFM/cHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe1MobnVsbCxMKX0pOkx9OmZ1bmN0aW9uIHMoKXt0aHJvdyBuZXcgRXJyb3IoIlNlY3Vy''@;'; put 'put ''ZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXG5Vc2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9fSwyNjExMyhmZSl7InVzZSBzdHJpY3QiO3ZhciBoPXt9O2Z1bmN0aW9uIHkoQyx3LFMpe1N8fChT''@;'; put 'put ''PUVycm9yKTt2YXIgUj1mdW5jdGlvbih4KXtmdW5jdGlvbiBVKEgsVixOKXtyZXR1cm4geC5jYWxsKHRoaXMsZnVuY3Rpb24gTCh4LFUsSCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB3P3c6dyh4LFUsSCl9KEgsVixOKSl8fHRoaXN9cmV0dXJuIGZ1bmN0aW9uIGooQyx3KXtDLnByb3RvdHlw''@;'; put 'put ''ZT1PYmplY3QuY3JlYXRlKHcucHJvdG90eXBlKSxDLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1DLEMuX19wcm90b19fPXd9KFUseCksVX0oUyk7Ui5wcm90b3R5cGUubmFtZT1TLm5hbWUsUi5wcm90b3R5cGUuY29kZT1DLGhbQ109Un1mdW5jdGlvbiBjKEMsdyl7aWYoQXJyYXkuaXNBcnJheShD''@;'; put 'put ''KSl7dmFyIFM9Qy5sZW5ndGg7cmV0dXJuIEM9Qy5tYXAoZnVuY3Rpb24oTCl7cmV0dXJuIFN0cmluZyhMKX0pLFM+Mj8ib25lIG9mICIuY29uY2F0KHcsIiAiKS5jb25jYXQoQy5zbGljZSgwLFMtMSkuam9pbigiLCAiKSwiLCBvciAiKStDW1MtMV06Mj09PVM/Im9uZSBvZiAiLmNvbmNhdCh3''@;'; put 'put ''LCIgIikuY29uY2F0KENbMF0sIiBvciAiKS5jb25jYXQoQ1sxXSk6Im9mICIuY29uY2F0KHcsIiAiKS5jb25jYXQoQ1swXSl9cmV0dXJuIm9mICIuY29uY2F0KHcsIiAiKS5jb25jYXQoU3RyaW5nKEMpKX15KCJFUlJfSU5WQUxJRF9PUFRfVkFMVUUiLGZ1bmN0aW9uKEMsdyl7cmV0dXJuJ1Ro''@;'; put 'put ''ZSB2YWx1ZSAiJyt3KyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAiJytDKyciJ30sVHlwZUVycm9yKSx5KCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24oQyx3LFMpe3ZhciBMLFI7aWYoInN0cmluZyI9PXR5cGVvZiB3JiZmdW5jdGlvbiBzKEMsdyxTKXtyZXR1cm4gQy5zdWJzdHIo''@;'; put 'put ''IVN8fFM8MD8wOitTLHcubGVuZ3RoKT09PXd9KHcsIm5vdCAiKT8oTD0ibXVzdCBub3QgYmUiLHc9dy5yZXBsYWNlKC9ebm90IC8sIiIpKTpMPSJtdXN0IGJlIixmdW5jdGlvbiBBKEMsdyxTKXtyZXR1cm4odm9pZCAwPT09U3x8Uz5DLmxlbmd0aCkmJihTPUMubGVuZ3RoKSxDLnN1YnN0cmlu''@;'; put 'put ''ZyhTLXcubGVuZ3RoLFMpPT09d30oQywiIGFyZ3VtZW50IikpUj0iVGhlICIuY29uY2F0KEMsIiAiKS5jb25jYXQoTCwiICIpLmNvbmNhdChjKHcsInR5cGUiKSk7ZWxzZXt2YXIgeD1mdW5jdGlvbiB2KEMsdyxTKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIFMmJihTPTApLCEoUyt3Lmxlbmd0''@;'; put 'put ''aD5DLmxlbmd0aCkmJi0xIT09Qy5pbmRleE9mKHcsUyl9KEMsIi4iKT8icHJvcGVydHkiOiJhcmd1bWVudCI7Uj0nVGhlICInLmNvbmNhdChDLCciICcpLmNvbmNhdCh4LCIgIikuY29uY2F0KEwsIiAiKS5jb25jYXQoYyh3LCJ0eXBlIikpfXJldHVybiBSKyIuIFJlY2VpdmVkIHR5cGUgIi5j''@;'; put 'put ''b25jYXQodHlwZW9mIFMpfSxUeXBlRXJyb3IpLHkoIkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YiLCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpLHkoIkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEIixmdW5jdGlvbihDKXtyZXR1cm4iVGhlICIrQysiIG1ldGhvZCBpcyBub3QgaW1wbGVt''@;'; put 'put ''ZW50ZWQifSkseSgiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiLCJQcmVtYXR1cmUgY2xvc2UiKSx5KCJFUlJfU1RSRUFNX0RFU1RST1lFRCIsZnVuY3Rpb24oQyl7cmV0dXJuIkNhbm5vdCBjYWxsICIrQysiIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQifSkseSgiRVJSX01VTFRJ''@;'; put 'put ''UExFX0NBTExCQUNLIiwiQ2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzIikseSgiRVJSX1NUUkVBTV9DQU5OT1RfUElQRSIsIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSx5KCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCIsIndyaXRlIGFmdGVyIGVuZCIpLHkoIkVSUl9TVFJF''@;'; put 'put ''QU1fTlVMTF9WQUxVRVMiLCJNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbSIsVHlwZUVycm9yKSx5KCJFUlJfVU5LTk9XTl9FTkNPRElORyIsZnVuY3Rpb24oQyl7cmV0dXJuIlVua25vd24gZW5jb2Rpbmc6ICIrQ30sVHlwZUVycm9yKSx5KCJFUlJfU1RSRUFNX1VOU0hJRlRf''@;'; put 'put ''QUZURVJfRU5EX0VWRU5UIiwic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQiKSxmZS5leHBvcnRzLkY9aH0sNzQwNzUoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKFIpe3ZhciB4PVtdO2Zvcih2YXIgVSBpbiBSKXgucHVzaChVKTtyZXR1''@;'; put 'put ''cm4geH07ZmUuZXhwb3J0cz13O3ZhciBjPWgoMTk2MDkpLHM9aCg0Nzg0OSk7aCg3MTk5MykodyxjKTtmb3IodmFyIEE9eShzLnByb3RvdHlwZSksdj0wO3Y8QS5sZW5ndGg7disrKXt2YXIgQz1BW3ZdO3cucHJvdG90eXBlW0NdfHwody5wcm90b3R5cGVbQ109cy5wcm90b3R5cGVbQ10pfWZ1''@;'; put 'put ''bmN0aW9uIHcoUil7aWYoISh0aGlzIGluc3RhbmNlb2YgdykpcmV0dXJuIG5ldyB3KFIpO2MuY2FsbCh0aGlzLFIpLHMuY2FsbCh0aGlzLFIpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCxSJiYoITE9PT1SLnJlYWRhYmxlJiYodGhpcy5yZWFkYWJsZT0hMSksITE9PT1SLndyaXRhYmxlJiYodGhp''@;'; put 'put ''cy53cml0YWJsZT0hMSksITE9PT1SLmFsbG93SGFsZk9wZW4mJih0aGlzLmFsbG93SGFsZk9wZW49ITEsdGhpcy5vbmNlKCJlbmQiLFMpKSl9ZnVuY3Rpb24gUygpe3RoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fHByb2Nlc3MubmV4dFRpY2soTCx0aGlzKX1mdW5jdGlvbiBMKFIpe1IuZW5k''@;'; put 'put ''KCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHcucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcucHJvdG90''@;'; put 'put ''eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcucHJvdG90eXBlLCJ3cml0YWJsZUxlbmd0aCIs''@;'; put 'put ''e2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5f''@;'; put 'put ''cmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oeCl7dm9pZCAwPT09dGhpcy5fcmVhZGFibGVTdGF0ZXx8dm9pZCAwPT09dGhp''@;'; put 'put ''cy5fd3JpdGFibGVTdGF0ZXx8KHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPXgsdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9eCl9fSl9LDE4ODIzKGZlLGosaCl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9Yzt2YXIgeT1oKDI5MDkpO2Z1bmN0aW9uIGMocyl7aWYoISh0aGlz''@;'; put 'put ''IGluc3RhbmNlb2YgYykpcmV0dXJuIG5ldyBjKHMpO3kuY2FsbCh0aGlzLHMpfWgoNzE5OTMpKGMseSksYy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihzLEEsdil7dihudWxsLHMpfX0sMTk2MDkoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk7ZmUuZXhwb3J0cz1YLFguUmVhZGFi''@;'; put 'put ''bGVTdGF0ZT1xZSxoKDQ0MzU2KTt2YXIgUixzPWZ1bmN0aW9uKERlLEZlKXtyZXR1cm4gRGUubGlzdGVuZXJzKEZlKS5sZW5ndGh9LEE9aCgxODM0Miksdj1oKDgzODM4KS5CdWZmZXIsQz0odHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Yg''@;'; put 'put ''c2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LEw9aCg3OTgzOCk7Uj1MJiZMLmRlYnVnbG9nP0wuZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgcSxyZSxtZSx4PWgoMTk1ODgpLFU9aCgyMTUwOSksVj1oKDQyOTM0KS5nZXRIaWdoV2F0ZXJNYXJr''@;'; put 'put ''LE49aCgyNjExMykuRix6PU4uRVJSX0lOVkFMSURfQVJHX1RZUEUsWT1OLkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YsRj1OLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELFc9Ti5FUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UO2goNzE5OTMpKFgsQSk7dmFyIENlPVUuZXJy''@;'; put 'put ''b3JPckRlc3Ryb3ksSWU9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gcWUoQWUsRGUsRmUpe3k9eXx8aCg3NDA3NSksImJvb2xlYW4iIT10eXBlb2YgRmUmJihGZT1EZSBpbnN0YW5jZW9mIHkpLHRoaXMub2JqZWN0TW9kZT0hIShBZT1BZXx8''@;'; put 'put ''e30pLm9iamVjdE1vZGUsRmUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIUFlLnJlYWRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPVYodGhpcyxBZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIixGZSksdGhpcy5idWZmZXI9bmV3IHgsdGhpcy5sZW5ndGg9''@;'; put 'put ''MCx0aGlzLnBpcGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlz''@;'; put 'put ''LnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMucGF1c2VkPSEwLHRoaXMuZW1pdENsb3NlPSExIT09QWUuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9ISFBZS5hdXRvRGVzdHJveSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGlu''@;'; put 'put ''Zz1BZS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmF3YWl0RHJhaW49MCx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGVjb2Rlcj1udWxsLHRoaXMuZW5jb2Rpbmc9bnVsbCxBZS5lbmNvZGluZyYmKHF8fChxPWgoNzg0NTQpLkkpLHRoaXMuZGVjb2Rlcj1uZXcgcShBZS5lbmNvZGlu''@;'; put 'put ''ZyksdGhpcy5lbmNvZGluZz1BZS5lbmNvZGluZyl9ZnVuY3Rpb24gWChBZSl7aWYoeT15fHxoKDc0MDc1KSwhKHRoaXMgaW5zdGFuY2VvZiBYKSlyZXR1cm4gbmV3IFgoQWUpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IHFlKEFlLHRoaXMsdGhpcyBpbnN0YW5jZW9mIHkpLHRoaXMucmVhZGFi''@;'; put 'put ''bGU9ITAsQWUmJigiZnVuY3Rpb24iPT10eXBlb2YgQWUucmVhZCYmKHRoaXMuX3JlYWQ9QWUucmVhZCksImZ1bmN0aW9uIj09dHlwZW9mIEFlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PUFlLmRlc3Ryb3kpKSxBLmNhbGwodGhpcyl9ZnVuY3Rpb24gZihBZSxEZSxGZSxnZSxjZSl7UigicmVh''@;'; put 'put ''ZGFibGVBZGRDaHVuayIsRGUpO3ZhciB3ZSxoZT1BZS5fcmVhZGFibGVTdGF0ZTtpZihudWxsPT09RGUpaGUucmVhZGluZz0hMSxmdW5jdGlvbiBHKEFlLERlKXtpZihSKCJvbkVvZkNodW5rIiksIURlLmVuZGVkKXtpZihEZS5kZWNvZGVyKXt2YXIgRmU9RGUuZGVjb2Rlci5lbmQoKTtGZSYm''@;'; put 'put ''RmUubGVuZ3RoJiYoRGUuYnVmZmVyLnB1c2goRmUpLERlLmxlbmd0aCs9RGUub2JqZWN0TW9kZT8xOkZlLmxlbmd0aCl9RGUuZW5kZWQ9ITAsRGUuc3luYz9EKEFlKTooRGUubmVlZFJlYWRhYmxlPSExLERlLmVtaXR0ZWRSZWFkYWJsZXx8KERlLmVtaXR0ZWRSZWFkYWJsZT0hMCxwKEFlKSkp''@;'; put 'put ''fX0oQWUsaGUpO2Vsc2UgaWYoY2V8fCh3ZT1mdW5jdGlvbiBrKEFlLERlKXt2YXIgRmU7cmV0dXJuIWZ1bmN0aW9uIFMoQWUpe3JldHVybiB2LmlzQnVmZmVyKEFlKXx8QWUgaW5zdGFuY2VvZiBDfShEZSkmJiJzdHJpbmciIT10eXBlb2YgRGUmJnZvaWQgMCE9PURlJiYhQWUub2JqZWN0TW9k''@;'; put 'put ''ZSYmKEZlPW5ldyB6KCJjaHVuayIsWyJzdHJpbmciLCJCdWZmZXIiLCJVaW50OEFycmF5Il0sRGUpKSxGZX0oaGUsRGUpKSx3ZSlDZShBZSx3ZSk7ZWxzZSBpZihoZS5vYmplY3RNb2RlfHxEZSYmRGUubGVuZ3RoPjApaWYoInN0cmluZyIhPXR5cGVvZiBEZSYmIWhlLm9iamVjdE1vZGUmJk9i''@;'; put 'put ''amVjdC5nZXRQcm90b3R5cGVPZihEZSkhPT12LnByb3RvdHlwZSYmKERlPWZ1bmN0aW9uIHcoQWUpe3JldHVybiB2LmZyb20oQWUpfShEZSkpLGdlKWhlLmVuZEVtaXR0ZWQ/Q2UoQWUsbmV3IFcpOmIoQWUsaGUsRGUsITApO2Vsc2UgaWYoaGUuZW5kZWQpQ2UoQWUsbmV3IFkpO2Vsc2V7aWYo''@;'; put 'put ''aGUuZGVzdHJveWVkKXJldHVybiExO2hlLnJlYWRpbmc9ITEsaGUuZGVjb2RlciYmIUZlPyhEZT1oZS5kZWNvZGVyLndyaXRlKERlKSxoZS5vYmplY3RNb2RlfHwwIT09RGUubGVuZ3RoP2IoQWUsaGUsRGUsITEpOkkoQWUsaGUpKTpiKEFlLGhlLERlLCExKX1lbHNlIGdlfHwoaGUucmVhZGlu''@;'; put 'put ''Zz0hMSxJKEFlLGhlKSk7cmV0dXJuIWhlLmVuZGVkJiYoaGUubGVuZ3RoPGhlLmhpZ2hXYXRlck1hcmt8fDA9PT1oZS5sZW5ndGgpfWZ1bmN0aW9uIGIoQWUsRGUsRmUsZ2Upe0RlLmZsb3dpbmcmJjA9PT1EZS5sZW5ndGgmJiFEZS5zeW5jPyhEZS5hd2FpdERyYWluPTAsQWUuZW1pdCgiZGF0''@;'; put 'put ''YSIsRmUpKTooRGUubGVuZ3RoKz1EZS5vYmplY3RNb2RlPzE6RmUubGVuZ3RoLGdlP0RlLmJ1ZmZlci51bnNoaWZ0KEZlKTpEZS5idWZmZXIucHVzaChGZSksRGUubmVlZFJlYWRhYmxlJiZEKEFlKSksSShBZSxEZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KFgucHJvdG90eXBlLCJkZXN0cm95''@;'; put 'put ''ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKERlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0''@;'; put 'put ''cm95ZWQ9RGUpfX0pLFgucHJvdG90eXBlLmRlc3Ryb3k9VS5kZXN0cm95LFgucHJvdG90eXBlLl91bmRlc3Ryb3k9VS51bmRlc3Ryb3ksWC5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oQWUsRGUpe0RlKEFlKX0sWC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihBZSxEZSl7dmFyIGdlLEZl''@;'; put 'put ''PXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIEZlLm9iamVjdE1vZGU/Z2U9ITA6InN0cmluZyI9PXR5cGVvZiBBZSYmKChEZT1EZXx8RmUuZGVmYXVsdEVuY29kaW5nKSE9PUZlLmVuY29kaW5nJiYoQWU9di5mcm9tKEFlLERlKSxEZT0iIiksZ2U9ITApLGYodGhpcyxBZSxEZSwhMSxnZSl9''@;'; put 'put ''LFgucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oQWUpe3JldHVybiBmKHRoaXMsQWUsbnVsbCwhMCwhMSl9LFgucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LFgucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0''@;'; put 'put ''aW9uKEFlKXtxfHwocT1oKDc4NDU0KS5JKTt2YXIgRGU9bmV3IHEoQWUpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1EZSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZztmb3IodmFyIEZlPXRoaXMuX3JlYWRhYmxl''@;'; put 'put ''U3RhdGUuYnVmZmVyLmhlYWQsZ2U9IiI7bnVsbCE9PUZlOylnZSs9RGUud3JpdGUoRmUuZGF0YSksRmU9RmUubmV4dDtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKSwiIiE9PWdlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5wdXNoKGdlKSx0aGlzLl9yZWFk''@;'; put 'put ''YWJsZVN0YXRlLmxlbmd0aD1nZS5sZW5ndGgsdGhpc307dmFyIE09MTA3Mzc0MTgyNDtmdW5jdGlvbiBLKEFlLERlKXtyZXR1cm4gQWU8PTB8fDA9PT1EZS5sZW5ndGgmJkRlLmVuZGVkPzA6RGUub2JqZWN0TW9kZT8xOkFlIT1BZT9EZS5mbG93aW5nJiZEZS5sZW5ndGg/RGUuYnVmZmVyLmhl''@;'; put 'put ''YWQuZGF0YS5sZW5ndGg6RGUubGVuZ3RoOihBZT5EZS5oaWdoV2F0ZXJNYXJrJiYoRGUuaGlnaFdhdGVyTWFyaz1mdW5jdGlvbiBCKEFlKXtyZXR1cm4gQWU+PU0/QWU9TTooQWUtLSxBZXw9QWU+Pj4xLEFlfD1BZT4+PjIsQWV8PUFlPj4+NCxBZXw9QWU+Pj44LEFlfD1BZT4+PjE2LEFlKysp''@;'; put 'put ''LEFlfShBZSkpLEFlPD1EZS5sZW5ndGg/QWU6RGUuZW5kZWQ/RGUubGVuZ3RoOihEZS5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIEQoQWUpe3ZhciBEZT1BZS5fcmVhZGFibGVTdGF0ZTtSKCJlbWl0UmVhZGFibGUiLERlLm5lZWRSZWFkYWJsZSxEZS5lbWl0dGVkUmVhZGFibGUpLERl''@;'; put 'put ''Lm5lZWRSZWFkYWJsZT0hMSxEZS5lbWl0dGVkUmVhZGFibGV8fChSKCJlbWl0UmVhZGFibGUiLERlLmZsb3dpbmcpLERlLmVtaXR0ZWRSZWFkYWJsZT0hMCxwcm9jZXNzLm5leHRUaWNrKHAsQWUpKX1mdW5jdGlvbiBwKEFlKXt2YXIgRGU9QWUuX3JlYWRhYmxlU3RhdGU7UigiZW1pdFJlYWRh''@;'; put 'put ''YmxlXyIsRGUuZGVzdHJveWVkLERlLmxlbmd0aCxEZS5lbmRlZCksIURlLmRlc3Ryb3llZCYmKERlLmxlbmd0aHx8RGUuZW5kZWQpJiYoQWUuZW1pdCgicmVhZGFibGUiKSxEZS5lbWl0dGVkUmVhZGFibGU9ITEpLERlLm5lZWRSZWFkYWJsZT0hRGUuZmxvd2luZyYmIURlLmVuZGVkJiZEZS5s''@;'; put 'put ''ZW5ndGg8PURlLmhpZ2hXYXRlck1hcmssZHQoQWUpfWZ1bmN0aW9uIEkoQWUsRGUpe0RlLnJlYWRpbmdNb3JlfHwoRGUucmVhZGluZ01vcmU9ITAscHJvY2Vzcy5uZXh0VGljayh1ZSxBZSxEZSkpfWZ1bmN0aW9uIHVlKEFlLERlKXtmb3IoOyFEZS5yZWFkaW5nJiYhRGUuZW5kZWQmJihEZS5s''@;'; put 'put ''ZW5ndGg8RGUuaGlnaFdhdGVyTWFya3x8RGUuZmxvd2luZyYmMD09PURlLmxlbmd0aCk7KXt2YXIgRmU9RGUubGVuZ3RoO2lmKFIoIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksQWUucmVhZCgwKSxGZT09PURlLmxlbmd0aClicmVha31EZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiBfZShBZSl7''@;'; put 'put ''dmFyIERlPUFlLl9yZWFkYWJsZVN0YXRlO0RlLnJlYWRhYmxlTGlzdGVuaW5nPUFlLmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCxEZS5yZXN1bWVTY2hlZHVsZWQmJiFEZS5wYXVzZWQ/RGUuZmxvd2luZz0hMDpBZS5saXN0ZW5lckNvdW50KCJkYXRhIik+MCYmQWUucmVzdW1lKCl9ZnVu''@;'; put 'put ''Y3Rpb24gUGUoQWUpe1IoInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLEFlLnJlYWQoMCl9ZnVuY3Rpb24gbHQoQWUsRGUpe1IoInJlc3VtZSIsRGUucmVhZGluZyksRGUucmVhZGluZ3x8QWUucmVhZCgwKSxEZS5yZXN1bWVTY2hlZHVsZWQ9ITEsQWUuZW1pdCgicmVzdW1lIiksZHQoQWUp''@;'; put 'put ''LERlLmZsb3dpbmcmJiFEZS5yZWFkaW5nJiZBZS5yZWFkKDApfWZ1bmN0aW9uIGR0KEFlKXt2YXIgRGU9QWUuX3JlYWRhYmxlU3RhdGU7Zm9yKFIoImZsb3ciLERlLmZsb3dpbmcpO0RlLmZsb3dpbmcmJm51bGwhPT1BZS5yZWFkKCk7KTt9ZnVuY3Rpb24gUmUoQWUsRGUpe3JldHVybiAwPT09''@;'; put 'put ''RGUubGVuZ3RoP251bGw6KERlLm9iamVjdE1vZGU/RmU9RGUuYnVmZmVyLnNoaWZ0KCk6IUFlfHxBZT49RGUubGVuZ3RoPyhGZT1EZS5kZWNvZGVyP0RlLmJ1ZmZlci5qb2luKCIiKToxPT09RGUuYnVmZmVyLmxlbmd0aD9EZS5idWZmZXIuZmlyc3QoKTpEZS5idWZmZXIuY29uY2F0KERlLmxl''@;'; put 'put ''bmd0aCksRGUuYnVmZmVyLmNsZWFyKCkpOkZlPURlLmJ1ZmZlci5jb25zdW1lKEFlLERlLmRlY29kZXIpLEZlKTt2YXIgRmV9ZnVuY3Rpb24gYWUoQWUpe3ZhciBEZT1BZS5fcmVhZGFibGVTdGF0ZTtSKCJlbmRSZWFkYWJsZSIsRGUuZW5kRW1pdHRlZCksRGUuZW5kRW1pdHRlZHx8KERlLmVu''@;'; put 'put ''ZGVkPSEwLHByb2Nlc3MubmV4dFRpY2soeGUsRGUsQWUpKX1mdW5jdGlvbiB4ZShBZSxEZSl7aWYoUigiZW5kUmVhZGFibGVOVCIsQWUuZW5kRW1pdHRlZCxBZS5sZW5ndGgpLCFBZS5lbmRFbWl0dGVkJiYwPT09QWUubGVuZ3RoJiYoQWUuZW5kRW1pdHRlZD0hMCxEZS5yZWFkYWJsZT0hMSxE''@;'; put 'put ''ZS5lbWl0KCJlbmQiKSxBZS5hdXRvRGVzdHJveSkpe3ZhciBGZT1EZS5fd3JpdGFibGVTdGF0ZTsoIUZlfHxGZS5hdXRvRGVzdHJveSYmRmUuZmluaXNoZWQpJiZEZS5kZXN0cm95KCl9fWZ1bmN0aW9uIGplKEFlLERlKXtmb3IodmFyIEZlPTAsZ2U9QWUubGVuZ3RoO0ZlPGdlO0ZlKyspaWYo''@;'; put 'put ''QWVbRmVdPT09RGUpcmV0dXJuIEZlO3JldHVybi0xfVgucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oQWUpe1IoInJlYWQiLEFlKSxBZT1wYXJzZUludChBZSwxMCk7dmFyIERlPXRoaXMuX3JlYWRhYmxlU3RhdGUsRmU9QWU7aWYoMCE9PUFlJiYoRGUuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09''@;'; put 'put ''QWUmJkRlLm5lZWRSZWFkYWJsZSYmKCgwIT09RGUuaGlnaFdhdGVyTWFyaz9EZS5sZW5ndGg+PURlLmhpZ2hXYXRlck1hcms6RGUubGVuZ3RoPjApfHxEZS5lbmRlZCkpcmV0dXJuIFIoInJlYWQ6IGVtaXRSZWFkYWJsZSIsRGUubGVuZ3RoLERlLmVuZGVkKSwwPT09RGUubGVuZ3RoJiZEZS5l''@;'; put 'put ''bmRlZD9hZSh0aGlzKTpEKHRoaXMpLG51bGw7aWYoMD09PShBZT1LKEFlLERlKSkmJkRlLmVuZGVkKXJldHVybiAwPT09RGUubGVuZ3RoJiZhZSh0aGlzKSxudWxsO3ZhciBjZSxnZT1EZS5uZWVkUmVhZGFibGU7cmV0dXJuIFIoIm5lZWQgcmVhZGFibGUiLGdlKSwoMD09PURlLmxlbmd0aHx8''@;'; put 'put ''RGUubGVuZ3RoLUFlPERlLmhpZ2hXYXRlck1hcmspJiZSKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsZ2U9ITApLERlLmVuZGVkfHxEZS5yZWFkaW5nP1IoInJlYWRpbmcgb3IgZW5kZWQiLGdlPSExKTpnZSYmKFIoImRvIHJlYWQiKSxEZS5yZWFkaW5nPSEwLERlLnN5bmM9ITAsMD09''@;'; put 'put ''PURlLmxlbmd0aCYmKERlLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZChEZS5oaWdoV2F0ZXJNYXJrKSxEZS5zeW5jPSExLERlLnJlYWRpbmd8fChBZT1LKEZlLERlKSkpLG51bGw9PT0oY2U9QWU+MD9SZShBZSxEZSk6bnVsbCk/KERlLm5lZWRSZWFkYWJsZT1EZS5sZW5ndGg8PURlLmhp''@;'; put 'put ''Z2hXYXRlck1hcmssQWU9MCk6KERlLmxlbmd0aC09QWUsRGUuYXdhaXREcmFpbj0wKSwwPT09RGUubGVuZ3RoJiYoRGUuZW5kZWR8fChEZS5uZWVkUmVhZGFibGU9ITApLEZlIT09QWUmJkRlLmVuZGVkJiZhZSh0aGlzKSksbnVsbCE9PWNlJiZ0aGlzLmVtaXQoImRhdGEiLGNlKSxjZX0sWC5w''@;'; put 'put ''cm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oQWUpe0NlKHRoaXMsbmV3IEYoIl9yZWFkKCkiKSl9LFgucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oQWUsRGUpe3ZhciBGZT10aGlzLGdlPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKGdlLnBpcGVzQ291bnQpe2Nhc2UgMDpnZS5waXBlcz1BZTti''@;'; put 'put ''cmVhaztjYXNlIDE6Z2UucGlwZXM9W2dlLnBpcGVzLEFlXTticmVhaztkZWZhdWx0OmdlLnBpcGVzLnB1c2goQWUpfWdlLnBpcGVzQ291bnQrPTEsUigicGlwZSBjb3VudD0lZCBvcHRzPSVqIixnZS5waXBlc0NvdW50LERlKTt2YXIgaGU9RGUmJiExPT09RGUuZW5kfHxBZT09PXByb2Nlc3Mu''@;'; put 'put ''c3Rkb3V0fHxBZT09PXByb2Nlc3Muc3RkZXJyP1h0OkplO2Z1bmN0aW9uIEplKCl7Uigib25lbmQiKSxBZS5lbmQoKX1nZS5lbmRFbWl0dGVkP3Byb2Nlc3MubmV4dFRpY2soaGUpOkZlLm9uY2UoImVuZCIsaGUpLEFlLm9uKCJ1bnBpcGUiLGZ1bmN0aW9uIHdlKExyLGxuKXtSKCJvbnVucGlw''@;'; put 'put ''ZSIpLExyPT09RmUmJmxuJiYhMT09PWxuLmhhc1VucGlwZWQmJihsbi5oYXNVbnBpcGVkPSEwLGZ1bmN0aW9uICR0KCl7UigiY2xlYW51cCIpLEFlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsR3QpLEFlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLGd0KSxBZS5yZW1vdmVMaXN0ZW5lcigiZHJh''@;'; put 'put ''aW4iLHR0KSxBZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLEx0KSxBZS5yZW1vdmVMaXN0ZW5lcigidW5waXBlIix3ZSksRmUucmVtb3ZlTGlzdGVuZXIoImVuZCIsSmUpLEZlLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFh0KSxGZS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsUnQpLEtlPSEwLGdlLmF3''@;'; put 'put ''YWl0RHJhaW4mJighQWUuX3dyaXRhYmxlU3RhdGV8fEFlLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbikmJnR0KCl9KCkpfSk7dmFyIHR0PWZ1bmN0aW9uIG5lKEFlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgRmU9QWUuX3JlYWRhYmxlU3RhdGU7UigicGlwZU9uRHJhaW4iLEZlLmF3YWl0RHJh''@;'; put 'put ''aW4pLEZlLmF3YWl0RHJhaW4mJkZlLmF3YWl0RHJhaW4tLSwwPT09RmUuYXdhaXREcmFpbiYmcyhBZSwiZGF0YSIpJiYoRmUuZmxvd2luZz0hMCxkdChBZSkpfX0oRmUpO0FlLm9uKCJkcmFpbiIsdHQpO3ZhciBLZT0hMTtmdW5jdGlvbiBSdChMcil7Uigib25kYXRhIik7dmFyIGxuPUFlLndy''@;'; put 'put ''aXRlKExyKTtSKCJkZXN0LndyaXRlIixsbiksITE9PT1sbiYmKCgxPT09Z2UucGlwZXNDb3VudCYmZ2UucGlwZXM9PT1BZXx8Z2UucGlwZXNDb3VudD4xJiYtMSE9PWplKGdlLnBpcGVzLEFlKSkmJiFLZSYmKFIoImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsZ2UuYXdhaXREcmFpbiks''@;'; put 'put ''Z2UuYXdhaXREcmFpbisrKSxGZS5wYXVzZSgpKX1mdW5jdGlvbiBMdChMcil7Uigib25lcnJvciIsTHIpLFh0KCksQWUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixMdCksMD09PXMoQWUsImVycm9yIikmJkNlKEFlLExyKX1mdW5jdGlvbiBHdCgpe0FlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2gi''@;'; put 'put ''LGd0KSxYdCgpfWZ1bmN0aW9uIGd0KCl7Uigib25maW5pc2giKSxBZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLEd0KSxYdCgpfWZ1bmN0aW9uIFh0KCl7UigidW5waXBlIiksRmUudW5waXBlKEFlKX1yZXR1cm4gRmUub24oImRhdGEiLFJ0KSxmdW5jdGlvbiBrZShBZSxEZSxGZSl7aWYoImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIEFlLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gQWUucHJlcGVuZExpc3RlbmVyKERlLEZlKTtBZS5fZXZlbnRzJiZBZS5fZXZlbnRzW0RlXT9BcnJheS5pc0FycmF5KEFlLl9ldmVudHNbRGVdKT9BZS5fZXZlbnRzW0RlXS51bnNoaWZ0KEZlKTpBZS5fZXZlbnRzW0Rl''@;'; put 'put ''XT1bRmUsQWUuX2V2ZW50c1tEZV1dOkFlLm9uKERlLEZlKX0oQWUsImVycm9yIixMdCksQWUub25jZSgiY2xvc2UiLEd0KSxBZS5vbmNlKCJmaW5pc2giLGd0KSxBZS5lbWl0KCJwaXBlIixGZSksZ2UuZmxvd2luZ3x8KFIoInBpcGUgcmVzdW1lIiksRmUucmVzdW1lKCkpLEFlfSxYLnByb3Rv''@;'; put 'put ''dHlwZS51bnBpcGU9ZnVuY3Rpb24oQWUpe3ZhciBEZT10aGlzLl9yZWFkYWJsZVN0YXRlLEZlPXtoYXNVbnBpcGVkOiExfTtpZigwPT09RGUucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09RGUucGlwZXNDb3VudClyZXR1cm4gQWUmJkFlIT09RGUucGlwZXN8fChBZXx8KEFlPURlLnBp''@;'; put 'put ''cGVzKSxEZS5waXBlcz1udWxsLERlLnBpcGVzQ291bnQ9MCxEZS5mbG93aW5nPSExLEFlJiZBZS5lbWl0KCJ1bnBpcGUiLHRoaXMsRmUpKSx0aGlzO2lmKCFBZSl7dmFyIGdlPURlLnBpcGVzLGNlPURlLnBpcGVzQ291bnQ7RGUucGlwZXM9bnVsbCxEZS5waXBlc0NvdW50PTAsRGUuZmxvd2lu''@;'; put 'put ''Zz0hMTtmb3IodmFyIGhlPTA7aGU8Y2U7aGUrKylnZVtoZV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIHdlPWplKERlLnBpcGVzLEFlKTtyZXR1cm4tMT09PXdlfHwoRGUucGlwZXMuc3BsaWNlKHdlLDEpLERlLnBpcGVzQ291bnQtPTEsMT09''@;'; put 'put ''PURlLnBpcGVzQ291bnQmJihEZS5waXBlcz1EZS5waXBlc1swXSksQWUuZW1pdCgidW5waXBlIix0aGlzLEZlKSksdGhpc30sWC5wcm90b3R5cGUuYWRkTGlzdGVuZXI9WC5wcm90b3R5cGUub249ZnVuY3Rpb24oQWUsRGUpe3ZhciBGZT1BLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsQWUsRGUp''@;'; put 'put ''LGdlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuImRhdGEiPT09QWU/KGdlLnJlYWRhYmxlTGlzdGVuaW5nPXRoaXMubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLCExIT09Z2UuZmxvd2luZyYmdGhpcy5yZXN1bWUoKSk6InJlYWRhYmxlIj09PUFlJiYhZ2UuZW5kRW1pdHRlZCYmIWdl''@;'; put 'put ''LnJlYWRhYmxlTGlzdGVuaW5nJiYoZ2UucmVhZGFibGVMaXN0ZW5pbmc9Z2UubmVlZFJlYWRhYmxlPSEwLGdlLmZsb3dpbmc9ITEsZ2UuZW1pdHRlZFJlYWRhYmxlPSExLFIoIm9uIHJlYWRhYmxlIixnZS5sZW5ndGgsZ2UucmVhZGluZyksZ2UubGVuZ3RoP0QodGhpcyk6Z2UucmVhZGluZ3x8''@;'; put 'put ''cHJvY2Vzcy5uZXh0VGljayhQZSx0aGlzKSksRmV9LFgucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKEFlLERlKXt2YXIgRmU9QS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIuY2FsbCh0aGlzLEFlLERlKTtyZXR1cm4icmVhZGFibGUiPT09QWUmJnByb2Nlc3MubmV4dFRpY2so''@;'; put 'put ''X2UsdGhpcyksRmV9LFgucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihBZSl7dmFyIERlPUEucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuKCJyZWFkYWJsZSI9PT1BZXx8dm9pZCAwPT09QWUpJiZwcm9jZXNzLm5l''@;'; put 'put ''eHRUaWNrKF9lLHRoaXMpLERlfSxYLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgQWU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gQWUuZmxvd2luZ3x8KFIoInJlc3VtZSIpLEFlLmZsb3dpbmc9IUFlLnJlYWRhYmxlTGlzdGVuaW5nLGZ1bmN0aW9uIG90KEFlLERlKXtEZS5y''@;'; put 'put ''ZXN1bWVTY2hlZHVsZWR8fChEZS5yZXN1bWVTY2hlZHVsZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhsdCxBZSxEZSkpfSh0aGlzLEFlKSksQWUucGF1c2VkPSExLHRoaXN9LFgucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIFIoImNhbGwgcGF1c2UgZmxvd2luZz0laiIsdGhpcy5f''@;'; put 'put ''cmVhZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKFIoInBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdCgicGF1c2UiKSksdGhpcy5fcmVhZGFibGVTdGF0ZS5wYXVzZWQ9ITAsdGhpc30sWC5wcm90b3R5''@;'; put 'put ''cGUud3JhcD1mdW5jdGlvbihBZSl7dmFyIERlPXRoaXMsRmU9dGhpcy5fcmVhZGFibGVTdGF0ZSxnZT0hMTtmb3IodmFyIGNlIGluIEFlLm9uKCJlbmQiLGZ1bmN0aW9uKCl7aWYoUigid3JhcHBlZCBlbmQiKSxGZS5kZWNvZGVyJiYhRmUuZW5kZWQpe3ZhciB3ZT1GZS5kZWNvZGVyLmVuZCgp''@;'; put 'put ''O3dlJiZ3ZS5sZW5ndGgmJkRlLnB1c2god2UpfURlLnB1c2gobnVsbCl9KSxBZS5vbigiZGF0YSIsZnVuY3Rpb24od2Upe1IoIndyYXBwZWQgZGF0YSIpLEZlLmRlY29kZXImJih3ZT1GZS5kZWNvZGVyLndyaXRlKHdlKSksRmUub2JqZWN0TW9kZSYmbnVsbD09d2V8fCEoRmUub2JqZWN0TW9k''@;'; put 'put ''ZXx8d2UmJndlLmxlbmd0aCl8fERlLnB1c2god2UpfHwoZ2U9ITAsQWUucGF1c2UoKSl9KSxBZSl2b2lkIDA9PT10aGlzW2NlXSYmImZ1bmN0aW9uIj09dHlwZW9mIEFlW2NlXSYmKHRoaXNbY2VdPWZ1bmN0aW9uKEplKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQWVbSmVdLmFwcGx5KEFl''@;'; put 'put ''LGFyZ3VtZW50cyl9fShjZSkpO2Zvcih2YXIgaGU9MDtoZTxJZS5sZW5ndGg7aGUrKylBZS5vbihJZVtoZV0sdGhpcy5lbWl0LmJpbmQodGhpcyxJZVtoZV0pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbih3ZSl7Uigid3JhcHBlZCBfcmVhZCIsd2UpLGdlJiYoZ2U9ITEsQWUucmVzdW1l''@;'; put 'put ''KCkpfSx0aGlzfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoWC5wcm90b3R5cGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXJlJiYocmU9aCg2MzIwKSkscmUodGhpcyl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWC5wcm90b3R5cGUsInJl''@;'; put 'put ''YWRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWC5wcm90b3R5cGUsInJlYWRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgucHJvdG90eXBlLCJyZWFkYWJsZUZsb3dpbmciLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9y''@;'; put 'put ''ZWFkYWJsZVN0YXRlLmZsb3dpbmd9LHNldDpmdW5jdGlvbihEZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz1EZSl9fSksWC5fZnJvbUxpc3Q9UmUsT2JqZWN0LmRlZmluZVByb3BlcnR5KFgucHJvdG90eXBlLCJyZWFkYWJsZUxlbmd0aCIse2Vu''@;'; put 'put ''dW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RofX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihYLmZyb209ZnVuY3Rpb24oQWUsRGUpe3JldHVybiB2b2lkIDA9PT1tZSYmKG1lPWgoODc2NTQpKSxtZShYLEFlLERlKX0pfSwy''@;'; put 'put ''OTA5KGZlLGosaCl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9Uzt2YXIgeT1oKDI2MTEzKS5GLGM9eS5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxzPXkuRVJSX01VTFRJUExFX0NBTExCQUNLLEE9eS5FUlJfVFJBTlNGT1JNX0FMUkVBRFlfVFJBTlNGT1JNSU5HLHY9eS5FUlJfVFJBTlNG''@;'; put 'put ''T1JNX1dJVEhfTEVOR1RIXzAsQz1oKDc0MDc1KTtmdW5jdGlvbiB3KHgsVSl7dmFyIEg9dGhpcy5fdHJhbnNmb3JtU3RhdGU7SC50cmFuc2Zvcm1pbmc9ITE7dmFyIFY9SC53cml0ZWNiO2lmKG51bGw9PT1WKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgcyk7SC53cml0ZWNodW5rPW51''@;'; put 'put ''bGwsSC53cml0ZWNiPW51bGwsbnVsbCE9VSYmdGhpcy5wdXNoKFUpLFYoeCk7dmFyIE49dGhpcy5fcmVhZGFibGVTdGF0ZTtOLnJlYWRpbmc9ITEsKE4ubmVlZFJlYWRhYmxlfHxOLmxlbmd0aDxOLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKE4uaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24g''@;'; put 'put ''Uyh4KXtpZighKHRoaXMgaW5zdGFuY2VvZiBTKSlyZXR1cm4gbmV3IFMoeCk7Qy5jYWxsKHRoaXMseCksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOncuYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVu''@;'; put 'put ''azpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLHgmJigiZnVuY3Rpb24iPT10eXBlb2YgeC50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09eC50cmFuc2Zvcm0pLCJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiB4LmZsdXNoJiYodGhpcy5fZmx1c2g9eC5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIsTCl9ZnVuY3Rpb24gTCgpe3ZhciB4PXRoaXM7ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX2ZsdXNofHx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD9SKHRoaXMsbnVsbCxu''@;'; put 'put ''dWxsKTp0aGlzLl9mbHVzaChmdW5jdGlvbihVLEgpe1IoeCxVLEgpfSl9ZnVuY3Rpb24gUih4LFUsSCl7aWYoVSlyZXR1cm4geC5lbWl0KCJlcnJvciIsVSk7aWYobnVsbCE9SCYmeC5wdXNoKEgpLHguX3dyaXRhYmxlU3RhdGUubGVuZ3RoKXRocm93IG5ldyB2O2lmKHguX3RyYW5zZm9ybVN0''@;'; put 'put ''YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgQTtyZXR1cm4geC5wdXNoKG51bGwpfWgoNzE5OTMpKFMsQyksUy5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih4LFUpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLEMucHJvdG90eXBlLnB1c2guY2FsbCh0aGlz''@;'; put 'put ''LHgsVSl9LFMucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oeCxVLEgpe0gobmV3IGMoIl90cmFuc2Zvcm0oKSIpKX0sUy5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHgsVSxIKXt2YXIgVj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihWLndyaXRlY2I9SCxWLndyaXRlY2h1bms9eCxW''@;'; put 'put ''LndyaXRlZW5jb2Rpbmc9VSwhVi50cmFuc2Zvcm1pbmcpe3ZhciBOPXRoaXMuX3JlYWRhYmxlU3RhdGU7KFYubmVlZFRyYW5zZm9ybXx8Ti5uZWVkUmVhZGFibGV8fE4ubGVuZ3RoPE4uaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoTi5oaWdoV2F0ZXJNYXJrKX19LFMucHJvdG90eXBlLl9y''@;'; put 'put ''ZWFkPWZ1bmN0aW9uKHgpe3ZhciBVPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGw9PT1VLndyaXRlY2h1bmt8fFUudHJhbnNmb3JtaW5nP1UubmVlZFRyYW5zZm9ybT0hMDooVS50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKFUud3JpdGVjaHVuayxVLndyaXRlZW5jb2RpbmcsVS5h''@;'; put 'put ''ZnRlclRyYW5zZm9ybSkpfSxTLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbih4LFUpe0MucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyx4LGZ1bmN0aW9uKEgpe1UoSCl9KX19LDQ3ODQ5KGZlLGosaCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoZHQpe3ZhciBSZT10aGlzO3RoaXMu''@;'; put 'put ''bmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbiBsdChkdCxSZSxhZSl7dmFyIHhlPWR0LmVudHJ5O2ZvcihkdC5lbnRyeT1udWxsO3hlOyl7dmFyIGplPXhlLmNhbGxiYWNrO1JlLnBlbmRpbmdjYi0tLGplKGFlKSx4ZT14ZS5uZXh0fVJl''@;'; put 'put ''LmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PWR0fShSZSxkdCl9fXZhciBzO2ZlLmV4cG9ydHM9cWUscWUuV3JpdGFibGVTdGF0ZT1JZTt2YXIga2UsQT17ZGVwcmVjYXRlOmgoMzM5OCl9LHY9aCgxODM0MiksQz1oKDgzODM4KS5CdWZmZXIsdz0odHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5''@;'; put 'put ''cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LFI9aCgyMTUwOSksVT1oKDQyOTM0KS5nZXRIaWdoV2F0ZXJNYXJrLEg9aCgyNjExMykuRixWPUguRVJSX0lOVkFMSURfQVJHX1RZUEUsTj1ILkVSUl9NRVRIT0Rf''@;'; put 'put ''Tk9UX0lNUExFTUVOVEVELHo9SC5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssWT1ILkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUsRj1ILkVSUl9TVFJFQU1fREVTVFJPWUVELFc9SC5FUlJfU1RSRUFNX05VTExfVkFMVUVTLHE9SC5FUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCxyZT1ILkVSUl9VTktO''@;'; put 'put ''T1dOX0VOQ09ESU5HLG1lPVIuZXJyb3JPckRlc3Ryb3k7ZnVuY3Rpb24gQ2UoKXt9ZnVuY3Rpb24gSWUoZHQsUmUsYWUpe3M9c3x8aCg3NDA3NSksImJvb2xlYW4iIT10eXBlb2YgYWUmJihhZT1SZSBpbnN0YW5jZW9mIHMpLHRoaXMub2JqZWN0TW9kZT0hIShkdD1kdHx8e30pLm9iamVjdE1v''@;'; put 'put ''ZGUsYWUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIWR0LndyaXRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPVUodGhpcyxkdCwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIixhZSksdGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlz''@;'; put 'put ''LmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWNvZGVTdHJpbmdzPSEoITE9PT1kdC5kZWNvZGVTdHJpbmdzKSx0aGlzLmRlZmF1bHRFbmNvZGluZz1kdC5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmxlbmd0aD0w''@;'; put 'put ''LHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKGplKXshZnVuY3Rpb24gRyhkdCxSZSl7dmFyIGFlPWR0Ll93cml0YWJsZVN0YXRlLHhlPWFlLnN5bmMsamU9YWUud3JpdGVjYjtp''@;'; put 'put ''ZigiZnVuY3Rpb24iIT10eXBlb2YgamUpdGhyb3cgbmV3IHo7aWYoZnVuY3Rpb24gSyhkdCl7ZHQud3JpdGluZz0hMSxkdC53cml0ZWNiPW51bGwsZHQubGVuZ3RoLT1kdC53cml0ZWxlbixkdC53cml0ZWxlbj0wfShhZSksUmUpIWZ1bmN0aW9uIEIoZHQsUmUsYWUseGUsamUpey0tUmUucGVu''@;'; put 'put ''ZGluZ2NiLGFlPyhwcm9jZXNzLm5leHRUaWNrKGplLHhlKSxwcm9jZXNzLm5leHRUaWNrKFBlLGR0LFJlKSxkdC5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsbWUoZHQseGUpKTooamUoeGUpLGR0Ll93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxtZShkdCx4ZSksUGUoZHQs''@;'; put 'put ''UmUpKX0oZHQsYWUseGUsUmUsamUpO2Vsc2V7dmFyIEFlPXVlKGFlKXx8ZHQuZGVzdHJveWVkOyFBZSYmIWFlLmNvcmtlZCYmIWFlLmJ1ZmZlclByb2Nlc3NpbmcmJmFlLmJ1ZmZlcmVkUmVxdWVzdCYmSShkdCxhZSkseGU/cHJvY2Vzcy5uZXh0VGljayhELGR0LGFlLEFlLGplKTpEKGR0LGFl''@;'; put 'put ''LEFlLGplKX19KFJlLGplKX0sdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5wZW5kaW5nY2I9MCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSEx''@;'; put 'put ''LHRoaXMuZW1pdENsb3NlPSExIT09ZHQuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9ISFkdC5hdXRvRGVzdHJveSx0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IGModGhpcyl9ZnVuY3Rpb24gcWUoZHQpe3ZhciBSZT10aGlzIGluc3Rh''@;'; put 'put ''bmNlb2Yocz1zfHxoKDc0MDc1KSk7aWYoIVJlJiYha2UuY2FsbChxZSx0aGlzKSlyZXR1cm4gbmV3IHFlKGR0KTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBJZShkdCx0aGlzLFJlKSx0aGlzLndyaXRhYmxlPSEwLGR0JiYoImZ1bmN0aW9uIj09dHlwZW9mIGR0LndyaXRlJiYodGhpcy5fd3Jp''@;'; put 'put ''dGU9ZHQud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBkdC53cml0ZXYmJih0aGlzLl93cml0ZXY9ZHQud3JpdGV2KSwiZnVuY3Rpb24iPT10eXBlb2YgZHQuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9ZHQuZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIGR0LmZpbmFsJiYodGhpcy5fZmlu''@;'; put 'put ''YWw9ZHQuZmluYWwpKSx2LmNhbGwodGhpcyl9ZnVuY3Rpb24gTShkdCxSZSxhZSx4ZSxqZSxBZSxEZSl7UmUud3JpdGVsZW49eGUsUmUud3JpdGVjYj1EZSxSZS53cml0aW5nPSEwLFJlLnN5bmM9ITAsUmUuZGVzdHJveWVkP1JlLm9ud3JpdGUobmV3IEYoIndyaXRlIikpOmFlP2R0Ll93cml0''@;'; put 'put ''ZXYoamUsUmUub253cml0ZSk6ZHQuX3dyaXRlKGplLEFlLFJlLm9ud3JpdGUpLFJlLnN5bmM9ITF9ZnVuY3Rpb24gRChkdCxSZSxhZSx4ZSl7YWV8fGZ1bmN0aW9uIHAoZHQsUmUpezA9PT1SZS5sZW5ndGgmJlJlLm5lZWREcmFpbiYmKFJlLm5lZWREcmFpbj0hMSxkdC5lbWl0KCJkcmFpbiIp''@;'; put 'put ''KX0oZHQsUmUpLFJlLnBlbmRpbmdjYi0tLHhlKCksUGUoZHQsUmUpfWZ1bmN0aW9uIEkoZHQsUmUpe1JlLmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIGFlPVJlLmJ1ZmZlcmVkUmVxdWVzdDtpZihkdC5fd3JpdGV2JiZhZSYmYWUubmV4dCl7dmFyIGplPW5ldyBBcnJheShSZS5idWZmZXJlZFJl''@;'; put 'put ''cXVlc3RDb3VudCksQWU9UmUuY29ya2VkUmVxdWVzdHNGcmVlO0FlLmVudHJ5PWFlO2Zvcih2YXIgRGU9MCxGZT0hMDthZTspamVbRGVdPWFlLGFlLmlzQnVmfHwoRmU9ITEpLGFlPWFlLm5leHQsRGUrPTE7amUuYWxsQnVmZmVycz1GZSxNKGR0LFJlLCEwLFJlLmxlbmd0aCxqZSwiIixBZS5m''@;'; put 'put ''aW5pc2gpLFJlLnBlbmRpbmdjYisrLFJlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCxBZS5uZXh0PyhSZS5jb3JrZWRSZXF1ZXN0c0ZyZWU9QWUubmV4dCxBZS5uZXh0PW51bGwpOlJlLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgYyhSZSksUmUuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MH1lbHNl''@;'; put 'put ''e2Zvcig7YWU7KXt2YXIgZ2U9YWUuY2h1bms7aWYoTShkdCxSZSwhMSxSZS5vYmplY3RNb2RlPzE6Z2UubGVuZ3RoLGdlLGFlLmVuY29kaW5nLGFlLmNhbGxiYWNrKSxhZT1hZS5uZXh0LFJlLmJ1ZmZlcmVkUmVxdWVzdENvdW50LS0sUmUud3JpdGluZylicmVha31udWxsPT09YWUmJihSZS5s''@;'; put 'put ''YXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfVJlLmJ1ZmZlcmVkUmVxdWVzdD1hZSxSZS5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIHVlKGR0KXtyZXR1cm4gZHQuZW5kaW5nJiYwPT09ZHQubGVuZ3RoJiZudWxsPT09ZHQuYnVmZmVyZWRSZXF1ZXN0JiYhZHQuZmluaXNoZWQmJiFkdC53''@;'; put 'put ''cml0aW5nfWZ1bmN0aW9uIG5lKGR0LFJlKXtkdC5fZmluYWwoZnVuY3Rpb24oYWUpe1JlLnBlbmRpbmdjYi0tLGFlJiZtZShkdCxhZSksUmUucHJlZmluaXNoZWQ9ITAsZHQuZW1pdCgicHJlZmluaXNoIiksUGUoZHQsUmUpfSl9ZnVuY3Rpb24gUGUoZHQsUmUpe3ZhciBhZT11ZShSZSk7aWYo''@;'; put 'put ''YWUmJihmdW5jdGlvbiBfZShkdCxSZSl7IVJlLnByZWZpbmlzaGVkJiYhUmUuZmluYWxDYWxsZWQmJigiZnVuY3Rpb24iIT10eXBlb2YgZHQuX2ZpbmFsfHxSZS5kZXN0cm95ZWQ/KFJlLnByZWZpbmlzaGVkPSEwLGR0LmVtaXQoInByZWZpbmlzaCIpKTooUmUucGVuZGluZ2NiKyssUmUuZmlu''@;'; put 'put ''YWxDYWxsZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhuZSxkdCxSZSkpKX0oZHQsUmUpLDA9PT1SZS5wZW5kaW5nY2ImJihSZS5maW5pc2hlZD0hMCxkdC5lbWl0KCJmaW5pc2giKSxSZS5hdXRvRGVzdHJveSkpKXt2YXIgeGU9ZHQuX3JlYWRhYmxlU3RhdGU7KCF4ZXx8eGUuYXV0b0Rlc3Ryb3km''@;'; put 'put ''JnhlLmVuZEVtaXR0ZWQpJiZkdC5kZXN0cm95KCl9cmV0dXJuIGFlfWgoNzE5OTMpKHFlLHYpLEllLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIFJlPXRoaXMuYnVmZmVyZWRSZXF1ZXN0LGFlPVtdO1JlOylhZS5wdXNoKFJlKSxSZT1SZS5uZXh0O3JldHVybiBhZX0s''@;'; put 'put ''ZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEllLnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0OkEuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0''@;'; put 'put ''YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KGtlPUZ1bmN0aW9u''@;'; put 'put ''LnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxZSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKFJlKXtyZXR1cm4hIWtlLmNhbGwodGhpcyxSZSl8fHRoaXM9PT1xZSYmUmUmJlJlLl93cml0YWJsZVN0YXRlIGluc3RhbmNlb2Yg''@;'; put 'put ''SWV9fSkpOmtlPWZ1bmN0aW9uKFJlKXtyZXR1cm4gUmUgaW5zdGFuY2VvZiB0aGlzfSxxZS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe21lKHRoaXMsbmV3IFkpfSxxZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZHQsUmUsYWUpe3ZhciB4ZT10aGlzLl93cml0YWJsZVN0YXRlLGplPSEx''@;'; put 'put ''LEFlPSF4ZS5vYmplY3RNb2RlJiZmdW5jdGlvbiBMKGR0KXtyZXR1cm4gQy5pc0J1ZmZlcihkdCl8fGR0IGluc3RhbmNlb2Ygd30oZHQpO3JldHVybiBBZSYmIUMuaXNCdWZmZXIoZHQpJiYoZHQ9ZnVuY3Rpb24gUyhkdCl7cmV0dXJuIEMuZnJvbShkdCl9KGR0KSksImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIFJlJiYoYWU9UmUsUmU9bnVsbCksQWU/UmU9ImJ1ZmZlciI6UmV8fChSZT14ZS5kZWZhdWx0RW5jb2RpbmcpLCJmdW5jdGlvbiIhPXR5cGVvZiBhZSYmKGFlPUNlKSx4ZS5lbmRpbmc/ZnVuY3Rpb24gWChkdCxSZSl7dmFyIGFlPW5ldyBxO21lKGR0LGFlKSxwcm9jZXNzLm5leHRUaWNr''@;'; put 'put ''KFJlLGFlKX0odGhpcyxhZSk6KEFlfHxmdW5jdGlvbiBmKGR0LFJlLGFlLHhlKXt2YXIgamU7cmV0dXJuIG51bGw9PT1hZT9qZT1uZXcgVzoic3RyaW5nIiE9dHlwZW9mIGFlJiYhUmUub2JqZWN0TW9kZSYmKGplPW5ldyBWKCJjaHVuayIsWyJzdHJpbmciLCJCdWZmZXIiXSxhZSkpLCFqZXx8''@;'; put 'put ''KG1lKGR0LGplKSxwcm9jZXNzLm5leHRUaWNrKHhlLGplKSwhMSl9KHRoaXMseGUsZHQsYWUpKSYmKHhlLnBlbmRpbmdjYisrLGplPWZ1bmN0aW9uIGsoZHQsUmUsYWUseGUsamUsQWUpe2lmKCFhZSl7dmFyIERlPWZ1bmN0aW9uIGIoZHQsUmUsYWUpe3JldHVybiFkdC5vYmplY3RNb2RlJiYh''@;'; put 'put ''MSE9PWR0LmRlY29kZVN0cmluZ3MmJiJzdHJpbmciPT10eXBlb2YgUmUmJihSZT1DLmZyb20oUmUsYWUpKSxSZX0oUmUseGUsamUpO3hlIT09RGUmJihhZT0hMCxqZT0iYnVmZmVyIix4ZT1EZSl9dmFyIEZlPVJlLm9iamVjdE1vZGU/MTp4ZS5sZW5ndGg7UmUubGVuZ3RoKz1GZTt2YXIgZ2U9''@;'; put 'put ''UmUubGVuZ3RoPFJlLmhpZ2hXYXRlck1hcms7aWYoZ2V8fChSZS5uZWVkRHJhaW49ITApLFJlLndyaXRpbmd8fFJlLmNvcmtlZCl7dmFyIGNlPVJlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7UmUubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6eGUsZW5jb2Rpbmc6amUsaXNCdWY6YWUsY2FsbGJh''@;'; put 'put ''Y2s6QWUsbmV4dDpudWxsfSxjZT9jZS5uZXh0PVJlLmxhc3RCdWZmZXJlZFJlcXVlc3Q6UmUuYnVmZmVyZWRSZXF1ZXN0PVJlLmxhc3RCdWZmZXJlZFJlcXVlc3QsUmUuYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSBNKGR0LFJlLCExLEZlLHhlLGplLEFlKTtyZXR1cm4gZ2V9KHRoaXMs''@;'; put 'put ''eGUsQWUsZHQsUmUsYWUpKSxqZX0scWUucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSxxZS5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIGR0PXRoaXMuX3dyaXRhYmxlU3RhdGU7ZHQuY29ya2VkJiYoZHQuY29ya2VkLS0sIWR0''@;'; put 'put ''LndyaXRpbmcmJiFkdC5jb3JrZWQmJiFkdC5idWZmZXJQcm9jZXNzaW5nJiZkdC5idWZmZXJlZFJlcXVlc3QmJkkodGhpcyxkdCkpfSxxZS5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKFJlKXtpZigic3RyaW5nIj09dHlwZW9mIFJlJiYoUmU9UmUudG9Mb3dlckNhc2Uo''@;'; put 'put ''KSksIShbImhleCIsInV0ZjgiLCJ1dGYtOCIsImFzY2lpIiwiYmluYXJ5IiwiYmFzZTY0IiwidWNzMiIsInVjcy0yIiwidXRmMTZsZSIsInV0Zi0xNmxlIiwicmF3Il0uaW5kZXhPZigoUmUrIiIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgcmUoUmUpO3JldHVybiB0aGlzLl93cml0''@;'; put 'put ''YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz1SZSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkocWUucHJvdG90eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUu''@;'; put 'put ''Z2V0QnVmZmVyKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHFlLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLHFlLnByb3RvdHlwZS5fd3Jp''@;'; put 'put ''dGU9ZnVuY3Rpb24oZHQsUmUsYWUpe2FlKG5ldyBOKCJfd3JpdGUoKSIpKX0scWUucHJvdG90eXBlLl93cml0ZXY9bnVsbCxxZS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKGR0LFJlLGFlKXt2YXIgeGU9dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZHQ/KGFl''@;'; put 'put ''PWR0LGR0PW51bGwsUmU9bnVsbCk6ImZ1bmN0aW9uIj09dHlwZW9mIFJlJiYoYWU9UmUsUmU9bnVsbCksbnVsbCE9ZHQmJnRoaXMud3JpdGUoZHQsUmUpLHhlLmNvcmtlZCYmKHhlLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLHhlLmVuZGluZ3x8ZnVuY3Rpb24gb3QoZHQsUmUsYWUpe1JlLmVu''@;'; put 'put ''ZGluZz0hMCxQZShkdCxSZSksYWUmJihSZS5maW5pc2hlZD9wcm9jZXNzLm5leHRUaWNrKGFlKTpkdC5vbmNlKCJmaW5pc2giLGFlKSksUmUuZW5kZWQ9ITAsZHQud3JpdGFibGU9ITF9KHRoaXMseGUsYWUpLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxZS5wcm90b3R5cGUsIndyaXRh''@;'; put 'put ''YmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHFlLnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9p''@;'; put 'put ''ZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihSZSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPVJlKX19KSxxZS5wcm90b3R5cGUuZGVzdHJveT1SLmRlc3Ryb3ks''@;'; put 'put ''cWUucHJvdG90eXBlLl91bmRlc3Ryb3k9Ui51bmRlc3Ryb3kscWUucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGR0LFJlKXtSZShkdCl9fSw2MzIwKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5O2Z1bmN0aW9uIGMocSxyZSxtZSl7cmV0dXJuIHJlPWZ1bmN0aW9uIHMocSl7dmFyIHJl''@;'; put 'put ''PWZ1bmN0aW9uIEEocSxyZSl7aWYoIm9iamVjdCIhPXR5cGVvZiBxfHxudWxsPT09cSlyZXR1cm4gcTt2YXIgbWU9cVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PW1lKXt2YXIgQ2U9bWUuY2FsbChxLHJlfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgQ2UpcmV0dXJu''@;'; put 'put ''IENlO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09cmU/U3RyaW5nOk51bWJlcikocSl9KHEsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgcmU/cmU6U3RyaW5nKHJlKX0o''@;'; put 'put ''cmUpLHJlIGluIHE/T2JqZWN0LmRlZmluZVByb3BlcnR5KHEscmUse3ZhbHVlOm1lLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cVtyZV09bWUscX12YXIgdj1oKDMzMTM5KSxDPVN5bWJvbCgibGFzdFJlc29sdmUiKSx3PVN5bWJvbCgibGFzdFJlamVjdCIp''@;'; put 'put ''LFM9U3ltYm9sKCJlcnJvciIpLEw9U3ltYm9sKCJlbmRlZCIpLFI9U3ltYm9sKCJsYXN0UHJvbWlzZSIpLHg9U3ltYm9sKCJoYW5kbGVQcm9taXNlIiksVT1TeW1ib2woInN0cmVhbSIpO2Z1bmN0aW9uIEgocSxyZSl7cmV0dXJue3ZhbHVlOnEsZG9uZTpyZX19ZnVuY3Rpb24gVihxKXt2YXIg''@;'; put 'put ''cmU9cVtDXTtpZihudWxsIT09cmUpe3ZhciBtZT1xW1VdLnJlYWQoKTtudWxsIT09bWUmJihxW1JdPW51bGwscVtDXT1udWxsLHFbd109bnVsbCxyZShIKG1lLCExKSkpfX1mdW5jdGlvbiBOKHEpe3Byb2Nlc3MubmV4dFRpY2soVixxKX12YXIgWT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZnVu''@;'; put 'put ''Y3Rpb24oKXt9KSxGPU9iamVjdC5zZXRQcm90b3R5cGVPZigoYyh5PXtnZXQgc3RyZWFtKCl7cmV0dXJuIHRoaXNbVV19LG5leHQ6ZnVuY3Rpb24oKXt2YXIgcmU9dGhpcyxtZT10aGlzW1NdO2lmKG51bGwhPT1tZSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobWUpO2lmKHRoaXNbTF0pcmV0dXJu''@;'; put 'put ''IFByb21pc2UucmVzb2x2ZShIKHZvaWQgMCwhMCkpO2lmKHRoaXNbVV0uZGVzdHJveWVkKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihxZSxYKXtwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7cmVbU10/WChyZVtTXSk6cWUoSCh2b2lkIDAsITApKX0pfSk7dmFyIEllLENlPXRoaXNb''@;'; put 'put ''Ul07aWYoQ2UpSWU9bmV3IFByb21pc2UoZnVuY3Rpb24geihxLHJlKXtyZXR1cm4gZnVuY3Rpb24obWUsQ2Upe3EudGhlbihmdW5jdGlvbigpe3JlW0xdP21lKEgodm9pZCAwLCEwKSk6cmVbeF0obWUsQ2UpfSxDZSl9fShDZSx0aGlzKSk7ZWxzZXt2YXIga2U9dGhpc1tVXS5yZWFkKCk7aWYo''@;'; put 'put ''bnVsbCE9PWtlKXJldHVybiBQcm9taXNlLnJlc29sdmUoSChrZSwhMSkpO0llPW5ldyBQcm9taXNlKHRoaXNbeF0pfXJldHVybiB0aGlzW1JdPUllLEllfX0sU3ltYm9sLmFzeW5jSXRlcmF0b3IsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGMoeSwicmV0dXJuIixmdW5jdGlvbigpe3ZhciBy''@;'; put 'put ''ZT10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihtZSxDZSl7cmVbVV0uZGVzdHJveShudWxsLGZ1bmN0aW9uKEllKXtJZT9DZShJZSk6bWUoSCh2b2lkIDAsITApKX0pfSl9KSx5KSxZKTtmZS5leHBvcnRzPWZ1bmN0aW9uKHJlKXt2YXIgbWUsQ2U9T2JqZWN0LmNyZWF0ZShGLChj''@;'; put 'put ''KG1lPXt9LFUse3ZhbHVlOnJlLHdyaXRhYmxlOiEwfSksYyhtZSxDLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksYyhtZSx3LHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksYyhtZSxTLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksYyhtZSxMLHt2YWx1ZTpyZS5fcmVhZGFibGVTdGF0ZS5l''@;'; put 'put ''bmRFbWl0dGVkLHdyaXRhYmxlOiEwfSksYyhtZSx4LHt2YWx1ZTpmdW5jdGlvbihrZSxxZSl7dmFyIFg9Q2VbVV0ucmVhZCgpO1g/KENlW1JdPW51bGwsQ2VbQ109bnVsbCxDZVt3XT1udWxsLGtlKEgoWCwhMSkpKTooQ2VbQ109a2UsQ2Vbd109cWUpfSx3cml0YWJsZTohMH0pLG1lKSk7cmV0''@;'; put 'put ''dXJuIENlW1JdPW51bGwsdihyZSxmdW5jdGlvbihJZSl7aWYoSWUmJiJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIhPT1JZS5jb2RlKXt2YXIga2U9Q2Vbd107cmV0dXJuIG51bGwhPT1rZSYmKENlW1JdPW51bGwsQ2VbQ109bnVsbCxDZVt3XT1udWxsLGtlKEllKSksdm9pZChDZVtTXT1J''@;'; put 'put ''ZSl9dmFyIHFlPUNlW0NdO251bGwhPT1xZSYmKENlW1JdPW51bGwsQ2VbQ109bnVsbCxDZVt3XT1udWxsLHFlKEgodm9pZCAwLCEwKSkpLENlW0xdPSEwfSkscmUub24oInJlYWRhYmxlIixOLmJpbmQobnVsbCxDZSkpLENlfX0sMTk1ODgoZmUsaixoKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g''@;'; put 'put ''eShOLHope3ZhciBZPU9iamVjdC5rZXlzKE4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBGPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTik7eiYmKEY9Ri5maWx0ZXIoZnVuY3Rpb24oVyl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io''@;'; put 'put ''TixXKS5lbnVtZXJhYmxlfSkpLFkucHVzaC5hcHBseShZLEYpfXJldHVybiBZfWZ1bmN0aW9uIGMoTil7Zm9yKHZhciB6PTE7ejxhcmd1bWVudHMubGVuZ3RoO3orKyl7dmFyIFk9bnVsbCE9YXJndW1lbnRzW3pdP2FyZ3VtZW50c1t6XTp7fTt6JTI/eShPYmplY3QoWSksITApLmZvckVhY2go''@;'; put 'put ''ZnVuY3Rpb24oRil7cyhOLEYsWVtGXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKFkpKTp5KE9iamVjdChZKSkuZm9yRWFjaChmdW5jdGlvbihGKXtPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoTixGLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoWSxGKSl9KX1yZXR1cm4gTn1mdW5jdGlvbiBzKE4seixZKXtyZXR1cm4oej13KHopKWluIE4/T2JqZWN0LmRlZmluZVByb3BlcnR5KE4seix7dmFsdWU6WSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh''@;'; put 'put ''MCx3cml0YWJsZTohMH0pOk5bel09WSxOfWZ1bmN0aW9uIHYoTix6KXtmb3IodmFyIFk9MDtZPHoubGVuZ3RoO1krKyl7dmFyIEY9eltZXTtGLmVudW1lcmFibGU9Ri5lbnVtZXJhYmxlfHwhMSxGLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gRiYmKEYud3JpdGFibGU9ITApLE9iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShOLHcoRi5rZXkpLEYpfX1mdW5jdGlvbiB3KE4pe3ZhciB6PWZ1bmN0aW9uIFMoTix6KXtpZigib2JqZWN0IiE9dHlwZW9mIE58fG51bGw9PT1OKXJldHVybiBOO3ZhciBZPU5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1ZKXt2YXIgRj1ZLmNhbGwoTix6''@;'; put 'put ''fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgRilyZXR1cm4gRjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXo/U3RyaW5nOk51bWJlcikoTil9KE4sInN0cmluZyIpO3Jl''@;'; put 'put ''dHVybiJzeW1ib2wiPT10eXBlb2Ygej96OlN0cmluZyh6KX12YXIgUj1oKDgzODM4KS5CdWZmZXIsVT1oKDE1MzQwKS5pbnNwZWN0LEg9VSYmVS5jdXN0b218fCJpbnNwZWN0IjtmdW5jdGlvbiBWKE4seixZKXtSLnByb3RvdHlwZS5jb3B5LmNhbGwoTix6LFkpfWZlLmV4cG9ydHM9ZnVuY3Rp''@;'; put 'put ''b24oKXtmdW5jdGlvbiBOKCl7KGZ1bmN0aW9uIEEoTix6KXtpZighKE4gaW5zdGFuY2VvZiB6KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsTiksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9''@;'; put 'put ''MH1yZXR1cm4gZnVuY3Rpb24gQyhOLHosWSl7eiYmdihOLnByb3RvdHlwZSx6KSxZJiZ2KE4sWSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE4sInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KE4sW3trZXk6InB1c2giLHZhbHVlOmZ1bmN0aW9uKFkpe3ZhciBGPXtkYXRhOlksbmV4dDpudWxs''@;'; put 'put ''fTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PUY6dGhpcy5oZWFkPUYsdGhpcy50YWlsPUYsKyt0aGlzLmxlbmd0aH19LHtrZXk6InVuc2hpZnQiLHZhbHVlOmZ1bmN0aW9uKFkpe3ZhciBGPXtkYXRhOlksbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1G''@;'; put 'put ''KSx0aGlzLmhlYWQ9RiwrK3RoaXMubGVuZ3RofX0se2tleToic2hpZnQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgWT10aGlzLmhlYWQuZGF0YTtyZXR1cm4gdGhpcy5oZWFkPTE9PT10aGlzLmxlbmd0aD90aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQubmV4dCwt''@;'; put 'put ''LXRoaXMubGVuZ3RoLFl9fX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9fSx7a2V5OiJqb2luIix2YWx1ZTpmdW5jdGlvbihZKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBGPXRoaXMuaGVh''@;'; put 'put ''ZCxXPSIiK0YuZGF0YTtGPUYubmV4dDspVys9WStGLmRhdGE7cmV0dXJuIFd9fSx7a2V5OiJjb25jYXQiLHZhbHVlOmZ1bmN0aW9uKFkpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gUi5hbGxvYygwKTtmb3IodmFyIEY9Ui5hbGxvY1Vuc2FmZShZPj4+MCksVz10aGlzLmhlYWQscT0wO1c7''@;'; put 'put ''KVYoVy5kYXRhLEYscSkscSs9Vy5kYXRhLmxlbmd0aCxXPVcubmV4dDtyZXR1cm4gRn19LHtrZXk6ImNvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uKFksRil7dmFyIFc7cmV0dXJuIFk8dGhpcy5oZWFkLmRhdGEubGVuZ3RoPyhXPXRoaXMuaGVhZC5kYXRhLnNsaWNlKDAsWSksdGhpcy5oZWFkLmRh''@;'; put 'put ''dGE9dGhpcy5oZWFkLmRhdGEuc2xpY2UoWSkpOlc9WT09PXRoaXMuaGVhZC5kYXRhLmxlbmd0aD90aGlzLnNoaWZ0KCk6Rj90aGlzLl9nZXRTdHJpbmcoWSk6dGhpcy5fZ2V0QnVmZmVyKFkpLFd9fSx7a2V5OiJmaXJzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWFkLmRhdGF9''@;'; put 'put ''fSx7a2V5OiJfZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihZKXt2YXIgRj10aGlzLmhlYWQsVz0xLHE9Ri5kYXRhO2ZvcihZLT1xLmxlbmd0aDtGPUYubmV4dDspe3ZhciByZT1GLmRhdGEsbWU9WT5yZS5sZW5ndGg/cmUubGVuZ3RoOlk7aWYocSs9bWU9PT1yZS5sZW5ndGg/cmU6cmUuc2xp''@;'; put 'put ''Y2UoMCxZKSwwPT09KFktPW1lKSl7bWU9PT1yZS5sZW5ndGg/KCsrVyx0aGlzLmhlYWQ9Ri5uZXh0P0YubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1GLEYuZGF0YT1yZS5zbGljZShtZSkpO2JyZWFrfSsrV31yZXR1cm4gdGhpcy5sZW5ndGgtPVcscX19LHtrZXk6Il9nZXRCdWZm''@;'; put 'put ''ZXIiLHZhbHVlOmZ1bmN0aW9uKFkpe3ZhciBGPVIuYWxsb2NVbnNhZmUoWSksVz10aGlzLmhlYWQscT0xO2ZvcihXLmRhdGEuY29weShGKSxZLT1XLmRhdGEubGVuZ3RoO1c9Vy5uZXh0Oyl7dmFyIHJlPVcuZGF0YSxtZT1ZPnJlLmxlbmd0aD9yZS5sZW5ndGg6WTtpZihyZS5jb3B5KEYsRi5s''@;'; put 'put ''ZW5ndGgtWSwwLG1lKSwwPT09KFktPW1lKSl7bWU9PT1yZS5sZW5ndGg/KCsrcSx0aGlzLmhlYWQ9Vy5uZXh0P1cubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1XLFcuZGF0YT1yZS5zbGljZShtZSkpO2JyZWFrfSsrcX1yZXR1cm4gdGhpcy5sZW5ndGgtPXEsRn19LHtrZXk6SCx2''@;'; put 'put ''YWx1ZTpmdW5jdGlvbihZLEYpe3JldHVybiBVKHRoaXMsYyhjKHt9LEYpLHt9LHtkZXB0aDowLGN1c3RvbUluc3BlY3Q6ITF9KSl9fV0pLE59KCl9LDIxNTA5KGZlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaCh2LEMpe3ModixDKSx5KHYpfWZ1bmN0aW9uIHkodil7di5fd3JpdGFibGVTdGF0''@;'; put 'put ''ZSYmIXYuX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlfHx2Ll9yZWFkYWJsZVN0YXRlJiYhdi5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2V8fHYuZW1pdCgiY2xvc2UiKX1mdW5jdGlvbiBzKHYsQyl7di5lbWl0KCJlcnJvciIsQyl9ZmUuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbiBqKHYsQyl7''@;'; put 'put ''dmFyIHc9dGhpcztyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPyhDP0Modik6diYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFi''@;'; put 'put ''bGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxwcm9jZXNzLm5leHRUaWNrKHMsdGhpcyx2KSk6cHJvY2Vzcy5uZXh0VGljayhzLHRoaXMsdikpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5k''@;'; put 'put ''ZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveSh2fHxudWxsLGZ1bmN0aW9uKFIpeyFDJiZSP3cuX3dyaXRhYmxlU3RhdGU/dy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ/cHJvY2Vzcy5u''@;'; put 'put ''ZXh0VGljayh5LHcpOih3Ll93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxwcm9jZXNzLm5leHRUaWNrKGgsdyxSKSk6cHJvY2Vzcy5uZXh0VGljayhoLHcsUik6Qz8ocHJvY2Vzcy5uZXh0VGljayh5LHcpLEMoUikpOnByb2Nlc3MubmV4dFRpY2soeSx3KX0pLHRoaXMpfSx1bmRlc3Ry''@;'; put 'put ''b3k6ZnVuY3Rpb24gYygpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEp''@;'; put 'put ''LHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVT''@;'; put 'put ''dGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSExKX0sZXJyb3JPckRlc3Ryb3k6ZnVuY3Rpb24gQSh2LEMpe3ZhciB3PXYuX3JlYWRhYmxlU3RhdGUsUz12Ll93cml0YWJsZVN0YXRlO3cm''@;'; put 'put ''JncuYXV0b0Rlc3Ryb3l8fFMmJlMuYXV0b0Rlc3Ryb3k/di5kZXN0cm95KEMpOnYuZW1pdCgiZXJyb3IiLEMpfX19LDMzMTM5KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoMjYxMTMpLkYuRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U7ZnVuY3Rpb24gcygpe31mZS5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uIHYoQyx3LFMpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB3KXJldHVybiB2KEMsbnVsbCx3KTt3fHwodz17fSksUz1mdW5jdGlvbiBjKEMpe3ZhciB3PSExO3JldHVybiBmdW5jdGlvbigpe2lmKCF3KXt3PSEwO2Zvcih2YXIgUz1hcmd1bWVudHMubGVuZ3RoLEw9bmV3IEFycmF5KFMp''@;'; put 'put ''LFI9MDtSPFM7UisrKUxbUl09YXJndW1lbnRzW1JdO0MuYXBwbHkodGhpcyxMKX19fShTfHxzKTt2YXIgTD13LnJlYWRhYmxlfHwhMSE9PXcucmVhZGFibGUmJkMucmVhZGFibGUsUj13LndyaXRhYmxlfHwhMSE9PXcud3JpdGFibGUmJkMud3JpdGFibGUseD1mdW5jdGlvbigpe0Mud3JpdGFi''@;'; put 'put ''bGV8fEgoKX0sVT1DLl93cml0YWJsZVN0YXRlJiZDLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkLEg9ZnVuY3Rpb24oKXtSPSExLFU9ITAsTHx8Uy5jYWxsKEMpfSxWPUMuX3JlYWRhYmxlU3RhdGUmJkMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCxOPWZ1bmN0aW9uKCl7TD0hMSxWPSEwLFJ8''@;'; put 'put ''fFMuY2FsbChDKX0sej1mdW5jdGlvbihxKXtTLmNhbGwoQyxxKX0sWT1mdW5jdGlvbigpe3ZhciBxO3JldHVybiBMJiYhVj8oKCFDLl9yZWFkYWJsZVN0YXRlfHwhQy5fcmVhZGFibGVTdGF0ZS5lbmRlZCkmJihxPW5ldyB5KSxTLmNhbGwoQyxxKSk6UiYmIVU/KCghQy5fd3JpdGFibGVTdGF0''@;'; put 'put ''ZXx8IUMuX3dyaXRhYmxlU3RhdGUuZW5kZWQpJiYocT1uZXcgeSksUy5jYWxsKEMscSkpOnZvaWQgMH0sRj1mdW5jdGlvbigpe0MucmVxLm9uKCJmaW5pc2giLEgpfTtyZXR1cm4gZnVuY3Rpb24gQShDKXtyZXR1cm4gQy5zZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBDLmFib3J0fShD''@;'; put 'put ''KT8oQy5vbigiY29tcGxldGUiLEgpLEMub24oImFib3J0IixZKSxDLnJlcT9GKCk6Qy5vbigicmVxdWVzdCIsRikpOlImJiFDLl93cml0YWJsZVN0YXRlJiYoQy5vbigiZW5kIix4KSxDLm9uKCJjbG9zZSIseCkpLEMub24oImVuZCIsTiksQy5vbigiZmluaXNoIixIKSwhMSE9PXcuZXJyb3Im''@;'; put 'put ''JkMub24oImVycm9yIix6KSxDLm9uKCJjbG9zZSIsWSksZnVuY3Rpb24oKXtDLnJlbW92ZUxpc3RlbmVyKCJjb21wbGV0ZSIsSCksQy5yZW1vdmVMaXN0ZW5lcigiYWJvcnQiLFkpLEMucmVtb3ZlTGlzdGVuZXIoInJlcXVlc3QiLEYpLEMucmVxJiZDLnJlcS5yZW1vdmVMaXN0ZW5lcigiZmlu''@;'; put 'put ''aXNoIixIKSxDLnJlbW92ZUxpc3RlbmVyKCJlbmQiLHgpLEMucmVtb3ZlTGlzdGVuZXIoImNsb3NlIix4KSxDLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLEgpLEMucmVtb3ZlTGlzdGVuZXIoImVuZCIsTiksQy5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLHopLEMucmVtb3ZlTGlzdGVuZXIoImNs''@;'; put 'put ''b3NlIixZKX19fSw4NzY1NChmZSl7ZmUuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiUmVhZGFibGUuZnJvbSBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyIil9fSw5NjI0OShmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeSxzPWgoMjYxMTMpLkYsQT1zLkVSUl9N''@;'; put 'put ''SVNTSU5HX0FSR1Msdj1zLkVSUl9TVFJFQU1fREVTVFJPWUVEO2Z1bmN0aW9uIEMoSCl7aWYoSCl0aHJvdyBIfWZ1bmN0aW9uIEwoSCl7SCgpfWZ1bmN0aW9uIFIoSCxWKXtyZXR1cm4gSC5waXBlKFYpfWZlLmV4cG9ydHM9ZnVuY3Rpb24gVSgpe2Zvcih2YXIgSD1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''LFY9bmV3IEFycmF5KEgpLE49MDtOPEg7TisrKVZbTl09YXJndW1lbnRzW05dO3ZhciB6PWZ1bmN0aW9uIHgoSCl7cmV0dXJuIEgubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgSFtILmxlbmd0aC0xXT9ILnBvcCgpOkN9KFYpO2lmKEFycmF5LmlzQXJyYXkoVlswXSkmJihWPVZbMF0pLFYu''@;'; put 'put ''bGVuZ3RoPDIpdGhyb3cgbmV3IEEoInN0cmVhbXMiKTt2YXIgWSxGPVYubWFwKGZ1bmN0aW9uKFcscSl7dmFyIHJlPXE8Vi5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24gUyhILFYsTix6KXt6PWZ1bmN0aW9uIGMoSCl7dmFyIFY9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7Vnx8KFY9ITAsSC5hcHBs''@;'; put 'put ''eSh2b2lkIDAsYXJndW1lbnRzKSl9fSh6KTt2YXIgWT0hMTtILm9uKCJjbG9zZSIsZnVuY3Rpb24oKXtZPSEwfSksdm9pZCAwPT09eSYmKHk9aCgzMzEzOSkpLHkoSCx7cmVhZGFibGU6Vix3cml0YWJsZTpOfSxmdW5jdGlvbihXKXtpZihXKXJldHVybiB6KFcpO1k9ITAseigpfSk7dmFyIEY9''@;'; put 'put ''ITE7cmV0dXJuIGZ1bmN0aW9uKFcpe2lmKCFZJiYhRil7aWYoRj0hMCxmdW5jdGlvbiB3KEgpe3JldHVybiBILnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIEguYWJvcnR9KEgpKXJldHVybiBILmFib3J0KCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEguZGVzdHJveSlyZXR1cm4gSC5k''@;'; put 'put ''ZXN0cm95KCk7eihXfHxuZXcgdigicGlwZSIpKX19fShXLHJlLHE+MCxmdW5jdGlvbihDZSl7WXx8KFk9Q2UpLENlJiZGLmZvckVhY2goTCksIXJlJiYoRi5mb3JFYWNoKEwpLHooWSkpfSl9KTtyZXR1cm4gVi5yZWR1Y2UoUil9fSw0MjkzNChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1o''@;'; put 'put ''KDI2MTEzKS5GLkVSUl9JTlZBTElEX09QVF9WQUxVRTtmZS5leHBvcnRzPXtnZXRIaWdoV2F0ZXJNYXJrOmZ1bmN0aW9uIHMoQSx2LEMsdyl7dmFyIFM9ZnVuY3Rpb24gYyhBLHYsQyl7cmV0dXJuIG51bGwhPUEuaGlnaFdhdGVyTWFyaz9BLmhpZ2hXYXRlck1hcms6dj9BW0NdOm51bGx9KHYs''@;'; put 'put ''dyxDKTtpZihudWxsIT1TKXtpZighaXNGaW5pdGUoUyl8fE1hdGguZmxvb3IoUykhPT1TfHxTPDApdGhyb3cgbmV3IHkodz9DOiJoaWdoV2F0ZXJNYXJrIixTKTtyZXR1cm4gTWF0aC5mbG9vcihTKX1yZXR1cm4gQS5vYmplY3RNb2RlPzE2OjE2Mzg0fX19LDE4MzQyKGZlLGosaCl7ZmUuZXhw''@;'; put 'put ''b3J0cz1oKDQ0MzU2KS5FdmVudEVtaXR0ZXJ9LDUzOTE2KGZlLGope3ZhciBoLGM7dHlwZW9mIHNlbGY8InUiJiZzZWxmLHZvaWQgMCE9PShjPSJmdW5jdGlvbiI9PXR5cGVvZihoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcygpe31zLnByb3RvdHlwZS5zYXZlU3RhdGU9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm57aWR4OnRoaXMuaWR4LGlucHV0OnRoaXMuaW5wdXQsZ3JvdXBJZHg6dGhpcy5ncm91cElkeH19LHMucHJvdG90eXBlLnJlc3RvcmVTdGF0ZT1mdW5jdGlvbihZKXt0aGlzLmlkeD1ZLmlkeCx0aGlzLmlucHV0PVkuaW5wdXQsdGhpcy5ncm91cElkeD1ZLmdyb3VwSWR4fSxzLnByb3RvdHlw''@;'; put 'put ''ZS5wYXR0ZXJuPWZ1bmN0aW9uKFkpe3RoaXMuaWR4PTAsdGhpcy5pbnB1dD1ZLHRoaXMuZ3JvdXBJZHg9MCx0aGlzLmNvbnN1bWVDaGFyKCIvIik7dmFyIEY9dGhpcy5kaXNqdW5jdGlvbigpO3RoaXMuY29uc3VtZUNoYXIoIi8iKTtmb3IodmFyIFc9e3R5cGU6IkZsYWdzIixnbG9iYWw6ITEs''@;'; put 'put ''aWdub3JlQ2FzZTohMSxtdWx0aUxpbmU6ITEsdW5pY29kZTohMSxzdGlja3k6ITF9O3RoaXMuaXNSZWdFeHBGbGFnKCk7KXN3aXRjaCh0aGlzLnBvcENoYXIoKSl7Y2FzZSJnIjpMKFcsImdsb2JhbCIpO2JyZWFrO2Nhc2UiaSI6TChXLCJpZ25vcmVDYXNlIik7YnJlYWs7Y2FzZSJtIjpMKFcs''@;'; put 'put ''Im11bHRpTGluZSIpO2JyZWFrO2Nhc2UidSI6TChXLCJ1bmljb2RlIik7YnJlYWs7Y2FzZSJ5IjpMKFcsInN0aWNreSIpfWlmKHRoaXMuaWR4IT09dGhpcy5pbnB1dC5sZW5ndGgpdGhyb3cgRXJyb3IoIlJlZHVuZGFudCBpbnB1dDogIit0aGlzLmlucHV0LnN1YnN0cmluZyh0aGlzLmlkeCkp''@;'; put 'put ''O3JldHVybnt0eXBlOiJQYXR0ZXJuIixmbGFnczpXLHZhbHVlOkZ9fSxzLnByb3RvdHlwZS5kaXNqdW5jdGlvbj1mdW5jdGlvbigpe3ZhciBZPVtdO2ZvcihZLnB1c2godGhpcy5hbHRlcm5hdGl2ZSgpKTsifCI9PT10aGlzLnBlZWtDaGFyKCk7KXRoaXMuY29uc3VtZUNoYXIoInwiKSxZLnB1''@;'; put 'put ''c2godGhpcy5hbHRlcm5hdGl2ZSgpKTtyZXR1cm57dHlwZToiRGlzanVuY3Rpb24iLHZhbHVlOll9fSxzLnByb3RvdHlwZS5hbHRlcm5hdGl2ZT1mdW5jdGlvbigpe2Zvcih2YXIgWT1bXTt0aGlzLmlzVGVybSgpOylZLnB1c2godGhpcy50ZXJtKCkpO3JldHVybnt0eXBlOiJBbHRlcm5hdGl2''@;'; put 'put ''ZSIsdmFsdWU6WX19LHMucHJvdG90eXBlLnRlcm09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0Fzc2VydGlvbigpP3RoaXMuYXNzZXJ0aW9uKCk6dGhpcy5hdG9tKCl9LHMucHJvdG90eXBlLmFzc2VydGlvbj1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLnBvcENoYXIoKSl7Y2FzZSJeIjpyZXR1''@;'; put 'put ''cm57dHlwZToiU3RhcnRBbmNob3IifTtjYXNlIiQiOnJldHVybnt0eXBlOiJFbmRBbmNob3IifTtjYXNlIlxcIjpzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UiYiI6cmV0dXJue3R5cGU6IldvcmRCb3VuZGFyeSJ9O2Nhc2UiQiI6cmV0dXJue3R5cGU6Ik5vbldvcmRCb3VuZGFyeSJ9fXRo''@;'; put 'put ''cm93IEVycm9yKCJJbnZhbGlkIEFzc2VydGlvbiBFc2NhcGUiKTtjYXNlIigiOnZhciBZO3N3aXRjaCh0aGlzLmNvbnN1bWVDaGFyKCI/IiksdGhpcy5wb3BDaGFyKCkpe2Nhc2UiPSI6WT0iTG9va2FoZWFkIjticmVhaztjYXNlIiEiOlk9Ik5lZ2F0aXZlTG9va2FoZWFkIn1SKFkpO3ZhciBG''@;'; put 'put ''PXRoaXMuZGlzanVuY3Rpb24oKTtyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigiKSIpLHt0eXBlOlksdmFsdWU6Rn19IWZ1bmN0aW9uIHgoKXt0aHJvdyBFcnJvcigiSW50ZXJuYWwgRXJyb3IgLSBTaG91bGQgbmV2ZXIgZ2V0IGhlcmUhIil9KCl9LHMucHJvdG90eXBlLnF1YW50aWZpZXI9ZnVu''@;'; put 'put ''Y3Rpb24oWSl7dmFyIEY7c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlIioiOkY9e2F0TGVhc3Q6MCxhdE1vc3Q6MS8wfTticmVhaztjYXNlIisiOkY9e2F0TGVhc3Q6MSxhdE1vc3Q6MS8wfTticmVhaztjYXNlIj8iOkY9e2F0TGVhc3Q6MCxhdE1vc3Q6MX07YnJlYWs7Y2FzZSJ7Ijp2YXIg''@;'; put 'put ''Vz10aGlzLmludGVnZXJJbmNsdWRpbmdaZXJvKCk7c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlIn0iOkY9e2F0TGVhc3Q6VyxhdE1vc3Q6V307YnJlYWs7Y2FzZSIsIjpGPXRoaXMuaXNEaWdpdCgpP3thdExlYXN0OlcsYXRNb3N0OnRoaXMuaW50ZWdlckluY2x1ZGluZ1plcm8oKX06e2F0''@;'; put 'put ''TGVhc3Q6VyxhdE1vc3Q6MS8wfSx0aGlzLmNvbnN1bWVDaGFyKCJ9Iil9aWYoITA9PT1ZJiZ2b2lkIDA9PT1GKXJldHVybjtSKEYpfWlmKCEwIT09WXx8dm9pZCAwIT09RilyZXR1cm4gUihGKSwiPyI9PT10aGlzLnBlZWtDaGFyKDApPyh0aGlzLmNvbnN1bWVDaGFyKCI/IiksRi5ncmVlZHk9''@;'; put 'put ''ITEpOkYuZ3JlZWR5PSEwLEYudHlwZT0iUXVhbnRpZmllciIsRn0scy5wcm90b3R5cGUuYXRvbT1mdW5jdGlvbigpe3ZhciBZO3N3aXRjaCh0aGlzLnBlZWtDaGFyKCkpe2Nhc2UiLiI6WT10aGlzLmRvdEFsbCgpO2JyZWFrO2Nhc2UiXFwiOlk9dGhpcy5hdG9tRXNjYXBlKCk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJbIjpZPXRoaXMuY2hhcmFjdGVyQ2xhc3MoKTticmVhaztjYXNlIigiOlk9dGhpcy5ncm91cCgpfXJldHVybiB2b2lkIDA9PT1ZJiZ0aGlzLmlzUGF0dGVybkNoYXJhY3RlcigpJiYoWT10aGlzLnBhdHRlcm5DaGFyYWN0ZXIoKSksUihZKSx0aGlzLmlzUXVhbnRpZmllcigpJiYoWS5xdWFu''@;'; put 'put ''dGlmaWVyPXRoaXMucXVhbnRpZmllcigpKSxZfSxzLnByb3RvdHlwZS5kb3RBbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigiLiIpLHt0eXBlOiJTZXQiLGNvbXBsZW1lbnQ6ITAsdmFsdWU6W3coIlxuIiksdygiXHIiKSx3KCJcdTIwMjgiKSx3KCJcdTIwMjkiKV19fSxz''@;'; put 'put ''LnByb3RvdHlwZS5hdG9tRXNjYXBlPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuY29uc3VtZUNoYXIoIlxcIiksdGhpcy5wZWVrQ2hhcigpKXtjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5IjpyZXR1cm4gdGhpcy5k''@;'; put 'put ''ZWNpbWFsRXNjYXBlQXRvbSgpO2Nhc2UiZCI6Y2FzZSJEIjpjYXNlInMiOmNhc2UiUyI6Y2FzZSJ3IjpjYXNlIlciOnJldHVybiB0aGlzLmNoYXJhY3RlckNsYXNzRXNjYXBlKCk7Y2FzZSJmIjpjYXNlIm4iOmNhc2UiciI6Y2FzZSJ0IjpjYXNlInYiOnJldHVybiB0aGlzLmNvbnRyb2xFc2Nh''@;'; put 'put ''cGVBdG9tKCk7Y2FzZSJjIjpyZXR1cm4gdGhpcy5jb250cm9sTGV0dGVyRXNjYXBlQXRvbSgpO2Nhc2UiMCI6cmV0dXJuIHRoaXMubnVsQ2hhcmFjdGVyQXRvbSgpO2Nhc2UieCI6cmV0dXJuIHRoaXMuaGV4RXNjYXBlU2VxdWVuY2VBdG9tKCk7Y2FzZSJ1IjpyZXR1cm4gdGhpcy5yZWdFeHBV''@;'; put 'put ''bmljb2RlRXNjYXBlU2VxdWVuY2VBdG9tKCk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5pZGVudGl0eUVzY2FwZUF0b20oKX19LHMucHJvdG90eXBlLmRlY2ltYWxFc2NhcGVBdG9tPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6Ikdyb3VwQmFja1JlZmVyZW5jZSIsdmFsdWU6dGhpcy5wb3NpdGl2ZUlu''@;'; put 'put ''dGVnZXIoKX19LHMucHJvdG90eXBlLmNoYXJhY3RlckNsYXNzRXNjYXBlPWZ1bmN0aW9uKCl7dmFyIFksRj0hMTtzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UiZCI6WT1IO2JyZWFrO2Nhc2UiRCI6WT1ILEY9ITA7YnJlYWs7Y2FzZSJzIjpZPU47YnJlYWs7Y2FzZSJTIjpZPU4sRj0hMDti''@;'; put 'put ''cmVhaztjYXNlInciOlk9VjticmVhaztjYXNlIlciOlk9VixGPSEwfXJldHVybiBSKFkpLHt0eXBlOiJTZXQiLHZhbHVlOlksY29tcGxlbWVudDpGfX0scy5wcm90b3R5cGUuY29udHJvbEVzY2FwZUF0b209ZnVuY3Rpb24oKXt2YXIgWTtzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UiZiI6''@;'; put 'put ''WT13KCJcZiIpO2JyZWFrO2Nhc2UibiI6WT13KCJcbiIpO2JyZWFrO2Nhc2UiciI6WT13KCJcciIpO2JyZWFrO2Nhc2UidCI6WT13KCJcdCIpO2JyZWFrO2Nhc2UidiI6WT13KCJcdiIpfXJldHVybiBSKFkpLHt0eXBlOiJDaGFyYWN0ZXIiLHZhbHVlOll9fSxzLnByb3RvdHlwZS5jb250cm9s''@;'; put 'put ''TGV0dGVyRXNjYXBlQXRvbT1mdW5jdGlvbigpe3RoaXMuY29uc3VtZUNoYXIoImMiKTt2YXIgWT10aGlzLnBvcENoYXIoKTtpZighMT09PS9bYS16QS1aXS8udGVzdChZKSl0aHJvdyBFcnJvcigiSW52YWxpZCAiKTtyZXR1cm57dHlwZToiQ2hhcmFjdGVyIix2YWx1ZTpZLnRvVXBwZXJDYXNl''@;'; put 'put ''KCkuY2hhckNvZGVBdCgwKS02NH19LHMucHJvdG90eXBlLm51bENoYXJhY3RlckF0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigiMCIpLHt0eXBlOiJDaGFyYWN0ZXIiLHZhbHVlOncoIlwwIil9fSxzLnByb3RvdHlwZS5oZXhFc2NhcGVTZXF1ZW5jZUF0b209ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigieCIpLHRoaXMucGFyc2VIZXhEaWdpdHMoMil9LHMucHJvdG90eXBlLnJlZ0V4cFVuaWNvZGVFc2NhcGVTZXF1ZW5jZUF0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigidSIpLHRoaXMucGFyc2VIZXhEaWdpdHMoNCl9''@;'; put 'put ''LHMucHJvdG90eXBlLmlkZW50aXR5RXNjYXBlQXRvbT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJDaGFyYWN0ZXIiLHZhbHVlOncodGhpcy5wb3BDaGFyKCkpfX0scy5wcm90b3R5cGUuY2xhc3NQYXR0ZXJuQ2hhcmFjdGVyQXRvbT1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLnBlZWtDaGFyKCkp''@;'; put 'put ''e2Nhc2UiXG4iOmNhc2UiXHIiOmNhc2UiXHUyMDI4IjpjYXNlIlx1MjAyOSI6Y2FzZSJcXCI6Y2FzZSJdIjp0aHJvdyBFcnJvcigiVEJEIik7ZGVmYXVsdDpyZXR1cm57dHlwZToiQ2hhcmFjdGVyIix2YWx1ZTp3KHRoaXMucG9wQ2hhcigpKX19fSxzLnByb3RvdHlwZS5jaGFyYWN0ZXJDbGFz''@;'; put 'put ''cz1mdW5jdGlvbigpe3ZhciBZPVtdLEY9ITE7Zm9yKHRoaXMuY29uc3VtZUNoYXIoIlsiKSwiXiI9PT10aGlzLnBlZWtDaGFyKDApJiYodGhpcy5jb25zdW1lQ2hhcigiXiIpLEY9ITApO3RoaXMuaXNDbGFzc0F0b20oKTspe3ZhciBXPXRoaXMuY2xhc3NBdG9tKCk7aWYoIkNoYXJhY3RlciI9''@;'; put 'put ''PT1XLnR5cGUmJnRoaXMuaXNSYW5nZURhc2goKSl7dGhpcy5jb25zdW1lQ2hhcigiLSIpO3ZhciByZT10aGlzLmNsYXNzQXRvbSgpO2lmKCJDaGFyYWN0ZXIiPT09cmUudHlwZSl7aWYocmUudmFsdWU8Vy52YWx1ZSl0aHJvdyBFcnJvcigiUmFuZ2Ugb3V0IG9mIG9yZGVyIGluIGNoYXJhY3Rl''@;'; put 'put ''ciBjbGFzcyIpO1kucHVzaCh7ZnJvbTpXLnZhbHVlLHRvOnJlLnZhbHVlfSl9ZWxzZSBTKFcudmFsdWUsWSksWS5wdXNoKHcoIi0iKSksUyhyZS52YWx1ZSxZKX1lbHNlIFMoVy52YWx1ZSxZKX1yZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigiXSIpLHt0eXBlOiJTZXQiLGNvbXBsZW1lbnQ6Rix2''@;'; put 'put ''YWx1ZTpZfX0scy5wcm90b3R5cGUuY2xhc3NBdG9tPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMucGVla0NoYXIoKSl7Y2FzZSJdIjpjYXNlIlxuIjpjYXNlIlxyIjpjYXNlIlx1MjAyOCI6Y2FzZSJcdTIwMjkiOnRocm93IEVycm9yKCJUQkQiKTtjYXNlIlxcIjpyZXR1cm4gdGhpcy5jbGFzc0Vz''@;'; put 'put ''Y2FwZSgpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xhc3NQYXR0ZXJuQ2hhcmFjdGVyQXRvbSgpfX0scy5wcm90b3R5cGUuY2xhc3NFc2NhcGU9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5jb25zdW1lQ2hhcigiXFwiKSx0aGlzLnBlZWtDaGFyKCkpe2Nhc2UiYiI6cmV0dXJuIHRoaXMuY29uc3Vt''@;'; put 'put ''ZUNoYXIoImIiKSx7dHlwZToiQ2hhcmFjdGVyIix2YWx1ZTp3KCJcYiIpfTtjYXNlImQiOmNhc2UiRCI6Y2FzZSJzIjpjYXNlIlMiOmNhc2UidyI6Y2FzZSJXIjpyZXR1cm4gdGhpcy5jaGFyYWN0ZXJDbGFzc0VzY2FwZSgpO2Nhc2UiZiI6Y2FzZSJuIjpjYXNlInIiOmNhc2UidCI6Y2FzZSJ2''@;'; put 'put ''IjpyZXR1cm4gdGhpcy5jb250cm9sRXNjYXBlQXRvbSgpO2Nhc2UiYyI6cmV0dXJuIHRoaXMuY29udHJvbExldHRlckVzY2FwZUF0b20oKTtjYXNlIjAiOnJldHVybiB0aGlzLm51bENoYXJhY3RlckF0b20oKTtjYXNlIngiOnJldHVybiB0aGlzLmhleEVzY2FwZVNlcXVlbmNlQXRvbSgpO2Nh''@;'; put 'put ''c2UidSI6cmV0dXJuIHRoaXMucmVnRXhwVW5pY29kZUVzY2FwZVNlcXVlbmNlQXRvbSgpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuaWRlbnRpdHlFc2NhcGVBdG9tKCl9fSxzLnByb3RvdHlwZS5ncm91cD1mdW5jdGlvbigpe3ZhciBZPSEwO3RoaXMuY29uc3VtZUNoYXIoIigiKSwiPyI9PT10aGlz''@;'; put 'put ''LnBlZWtDaGFyKDApPyh0aGlzLmNvbnN1bWVDaGFyKCI/IiksdGhpcy5jb25zdW1lQ2hhcigiOiIpLFk9ITEpOnRoaXMuZ3JvdXBJZHgrKzt2YXIgRj10aGlzLmRpc2p1bmN0aW9uKCk7dGhpcy5jb25zdW1lQ2hhcigiKSIpO3ZhciBXPXt0eXBlOiJHcm91cCIsY2FwdHVyaW5nOlksdmFsdWU6''@;'; put 'put ''Rn07cmV0dXJuIFkmJihXLmlkeD10aGlzLmdyb3VwSWR4KSxXfSxzLnByb3RvdHlwZS5wb3NpdGl2ZUludGVnZXI9ZnVuY3Rpb24oKXt2YXIgWT10aGlzLnBvcENoYXIoKTtpZighMT09PUMudGVzdChZKSl0aHJvdyBFcnJvcigiRXhwZWN0aW5nIGEgcG9zaXRpdmUgaW50ZWdlciIpO2Zvcig7''@;'; put 'put ''di50ZXN0KHRoaXMucGVla0NoYXIoMCkpOylZKz10aGlzLnBvcENoYXIoKTtyZXR1cm4gcGFyc2VJbnQoWSwxMCl9LHMucHJvdG90eXBlLmludGVnZXJJbmNsdWRpbmdaZXJvPWZ1bmN0aW9uKCl7dmFyIFk9dGhpcy5wb3BDaGFyKCk7aWYoITE9PT12LnRlc3QoWSkpdGhyb3cgRXJyb3IoIkV4''@;'; put 'put ''cGVjdGluZyBhbiBpbnRlZ2VyIik7Zm9yKDt2LnRlc3QodGhpcy5wZWVrQ2hhcigwKSk7KVkrPXRoaXMucG9wQ2hhcigpO3JldHVybiBwYXJzZUludChZLDEwKX0scy5wcm90b3R5cGUucGF0dGVybkNoYXJhY3Rlcj1mdW5jdGlvbigpe3ZhciBZPXRoaXMucG9wQ2hhcigpO3N3aXRjaChZKXtj''@;'; put 'put ''YXNlIlxuIjpjYXNlIlxyIjpjYXNlIlx1MjAyOCI6Y2FzZSJcdTIwMjkiOmNhc2UiXiI6Y2FzZSIkIjpjYXNlIlxcIjpjYXNlIi4iOmNhc2UiKiI6Y2FzZSIrIjpjYXNlIj8iOmNhc2UiKCI6Y2FzZSIpIjpjYXNlIlsiOmNhc2UifCI6dGhyb3cgRXJyb3IoIlRCRCIpO2RlZmF1bHQ6cmV0dXJu''@;'; put 'put ''e3R5cGU6IkNoYXJhY3RlciIsdmFsdWU6dyhZKX19fSxzLnByb3RvdHlwZS5pc1JlZ0V4cEZsYWc9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5wZWVrQ2hhcigwKSl7Y2FzZSJnIjpjYXNlImkiOmNhc2UibSI6Y2FzZSJ1IjpjYXNlInkiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxzLnBy''@;'; put 'put ''b3RvdHlwZS5pc1JhbmdlRGFzaD1mdW5jdGlvbigpe3JldHVybiItIj09PXRoaXMucGVla0NoYXIoKSYmdGhpcy5pc0NsYXNzQXRvbSgxKX0scy5wcm90b3R5cGUuaXNEaWdpdD1mdW5jdGlvbigpe3JldHVybiB2LnRlc3QodGhpcy5wZWVrQ2hhcigwKSl9LHMucHJvdG90eXBlLmlzQ2xhc3NB''@;'; put 'put ''dG9tPWZ1bmN0aW9uKFkpe3N3aXRjaCh2b2lkIDA9PT1ZJiYoWT0wKSx0aGlzLnBlZWtDaGFyKFkpKXtjYXNlIl0iOmNhc2UiXG4iOmNhc2UiXHIiOmNhc2UiXHUyMDI4IjpjYXNlIlx1MjAyOSI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19LHMucHJvdG90eXBlLmlzVGVybT1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLmlzQXRvbSgpfHx0aGlzLmlzQXNzZXJ0aW9uKCl9LHMucHJvdG90eXBlLmlzQXRvbT1mdW5jdGlvbigpe2lmKHRoaXMuaXNQYXR0ZXJuQ2hhcmFjdGVyKCkpcmV0dXJuITA7c3dpdGNoKHRoaXMucGVla0NoYXIoMCkpe2Nhc2UiLiI6Y2FzZSJcXCI6Y2FzZSJbIjpj''@;'; put 'put ''YXNlIigiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxzLnByb3RvdHlwZS5pc0Fzc2VydGlvbj1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLnBlZWtDaGFyKDApKXtjYXNlIl4iOmNhc2UiJCI6cmV0dXJuITA7Y2FzZSJcXCI6c3dpdGNoKHRoaXMucGVla0NoYXIoMSkpe2Nhc2UiYiI6Y2Fz''@;'; put 'put ''ZSJCIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfWNhc2UiKCI6cmV0dXJuIj8iPT09dGhpcy5wZWVrQ2hhcigxKSYmKCI9Ij09PXRoaXMucGVla0NoYXIoMil8fCIhIj09PXRoaXMucGVla0NoYXIoMikpO2RlZmF1bHQ6cmV0dXJuITF9fSxzLnByb3RvdHlwZS5pc1F1YW50aWZpZXI9ZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgWT10aGlzLnNhdmVTdGF0ZSgpO3RyeXtyZXR1cm4gdm9pZCAwIT09dGhpcy5xdWFudGlmaWVyKCEwKX1jYXRjaHtyZXR1cm4hMX1maW5hbGx5e3RoaXMucmVzdG9yZVN0YXRlKFkpfX0scy5wcm90b3R5cGUuaXNQYXR0ZXJuQ2hhcmFjdGVyPWZ1bmN0aW9uKCl7c3dpdGNo''@;'; put 'put ''KHRoaXMucGVla0NoYXIoKSl7Y2FzZSJeIjpjYXNlIiQiOmNhc2UiXFwiOmNhc2UiLiI6Y2FzZSIqIjpjYXNlIisiOmNhc2UiPyI6Y2FzZSIoIjpjYXNlIikiOmNhc2UiWyI6Y2FzZSJ8IjpjYXNlIi8iOmNhc2UiXG4iOmNhc2UiXHIiOmNhc2UiXHUyMDI4IjpjYXNlIlx1MjAyOSI6cmV0dXJu''@;'; put 'put ''ITE7ZGVmYXVsdDpyZXR1cm4hMH19LHMucHJvdG90eXBlLnBhcnNlSGV4RGlnaXRzPWZ1bmN0aW9uKFkpe2Zvcih2YXIgRj0iIixXPTA7VzxZO1crKyl7dmFyIHE9dGhpcy5wb3BDaGFyKCk7aWYoITE9PT1BLnRlc3QocSkpdGhyb3cgRXJyb3IoIkV4cGVjdGluZyBhIEhleERlY2ltYWwgZGln''@;'; put 'put ''aXRzIik7Ris9cX1yZXR1cm57dHlwZToiQ2hhcmFjdGVyIix2YWx1ZTpwYXJzZUludChGLDE2KX19LHMucHJvdG90eXBlLnBlZWtDaGFyPWZ1bmN0aW9uKFkpe3JldHVybiB2b2lkIDA9PT1ZJiYoWT0wKSx0aGlzLmlucHV0W3RoaXMuaWR4K1ldfSxzLnByb3RvdHlwZS5wb3BDaGFyPWZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIFk9dGhpcy5wZWVrQ2hhcigwKTtyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigpLFl9LHMucHJvdG90eXBlLmNvbnN1bWVDaGFyPWZ1bmN0aW9uKFkpe2lmKHZvaWQgMCE9PVkmJnRoaXMuaW5wdXRbdGhpcy5pZHhdIT09WSl0aHJvdyBFcnJvcigiRXhwZWN0ZWQ6ICciK1krIicg''@;'; put 'put ''YnV0IGZvdW5kOiAnIit0aGlzLmlucHV0W3RoaXMuaWR4XSsiJyBhdCBvZmZzZXQ6ICIrdGhpcy5pZHgpO2lmKHRoaXMuaWR4Pj10aGlzLmlucHV0Lmxlbmd0aCl0aHJvdyBFcnJvcigiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQiKTt0aGlzLmlkeCsrfTt2YXIgQT0vWzAtOWEtZkEtRl0vLHY9''@;'; put 'put ''L1swLTldLyxDPS9bMS05XS87ZnVuY3Rpb24gdyhZKXtyZXR1cm4gWS5jaGFyQ29kZUF0KDApfWZ1bmN0aW9uIFMoWSxGKXt2b2lkIDAhPT1ZLmxlbmd0aD9ZLmZvckVhY2goZnVuY3Rpb24oVyl7Ri5wdXNoKFcpfSk6Ri5wdXNoKFkpfWZ1bmN0aW9uIEwoWSxGKXtpZighMD09PVlbRl0pdGhy''@;'; put 'put ''b3ciZHVwbGljYXRlIGZsYWcgIitGO1lbRl09ITB9ZnVuY3Rpb24gUihZKXtpZih2b2lkIDA9PT1ZKXRocm93IEVycm9yKCJJbnRlcm5hbCBFcnJvciAtIFNob3VsZCBuZXZlciBnZXQgaGVyZSEiKX12YXIgVSxIPVtdO2ZvcihVPXcoIjAiKTtVPD13KCI5Iik7VSsrKUgucHVzaChVKTt2YXIg''@;'; put 'put ''Vj1bdygiXyIpXS5jb25jYXQoSCk7Zm9yKFU9dygiYSIpO1U8PXcoInoiKTtVKyspVi5wdXNoKFUpO2ZvcihVPXcoIkEiKTtVPD13KCJaIik7VSsrKVYucHVzaChVKTt2YXIgTj1bdygiICIpLHcoIlxmIiksdygiXG4iKSx3KCJcciIpLHcoIlx0IiksdygiXHYiKSx3KCJcdCIpLHcoIlx4YTAi''@;'; put 'put ''KSx3KCJcdTE2ODAiKSx3KCJcdTIwMDAiKSx3KCJcdTIwMDEiKSx3KCJcdTIwMDIiKSx3KCJcdTIwMDMiKSx3KCJcdTIwMDQiKSx3KCJcdTIwMDUiKSx3KCJcdTIwMDYiKSx3KCJcdTIwMDciKSx3KCJcdTIwMDgiKSx3KCJcdTIwMDkiKSx3KCJcdTIwMGEiKSx3KCJcdTIwMjgiKSx3KCJcdTIw''@;'; put 'put ''MjkiKSx3KCJcdTIwMmYiKSx3KCJcdTIwNWYiKSx3KCJcdTMwMDAiKSx3KCJcdWZlZmYiKV07ZnVuY3Rpb24geigpe31yZXR1cm4gei5wcm90b3R5cGUudmlzaXRDaGlsZHJlbj1mdW5jdGlvbihZKXtmb3IodmFyIEYgaW4gWSl7dmFyIFc9WVtGXTtZLmhhc093blByb3BlcnR5KEYpJiYodm9p''@;'; put 'put ''ZCAwIT09Vy50eXBlP3RoaXMudmlzaXQoVyk6QXJyYXkuaXNBcnJheShXKSYmVy5mb3JFYWNoKGZ1bmN0aW9uKHEpe3RoaXMudmlzaXQocSl9LHRoaXMpKX19LHoucHJvdG90eXBlLnZpc2l0PWZ1bmN0aW9uKFkpe3N3aXRjaChZLnR5cGUpe2Nhc2UiUGF0dGVybiI6dGhpcy52aXNpdFBhdHRl''@;'; put 'put ''cm4oWSk7YnJlYWs7Y2FzZSJGbGFncyI6dGhpcy52aXNpdEZsYWdzKFkpO2JyZWFrO2Nhc2UiRGlzanVuY3Rpb24iOnRoaXMudmlzaXREaXNqdW5jdGlvbihZKTticmVhaztjYXNlIkFsdGVybmF0aXZlIjp0aGlzLnZpc2l0QWx0ZXJuYXRpdmUoWSk7YnJlYWs7Y2FzZSJTdGFydEFuY2hvciI6''@;'; put 'put ''dGhpcy52aXNpdFN0YXJ0QW5jaG9yKFkpO2JyZWFrO2Nhc2UiRW5kQW5jaG9yIjp0aGlzLnZpc2l0RW5kQW5jaG9yKFkpO2JyZWFrO2Nhc2UiV29yZEJvdW5kYXJ5Ijp0aGlzLnZpc2l0V29yZEJvdW5kYXJ5KFkpO2JyZWFrO2Nhc2UiTm9uV29yZEJvdW5kYXJ5Ijp0aGlzLnZpc2l0Tm9uV29y''@;'; put 'put ''ZEJvdW5kYXJ5KFkpO2JyZWFrO2Nhc2UiTG9va2FoZWFkIjp0aGlzLnZpc2l0TG9va2FoZWFkKFkpO2JyZWFrO2Nhc2UiTmVnYXRpdmVMb29rYWhlYWQiOnRoaXMudmlzaXROZWdhdGl2ZUxvb2thaGVhZChZKTticmVhaztjYXNlIkNoYXJhY3RlciI6dGhpcy52aXNpdENoYXJhY3RlcihZKTti''@;'; put 'put ''cmVhaztjYXNlIlNldCI6dGhpcy52aXNpdFNldChZKTticmVhaztjYXNlIkdyb3VwIjp0aGlzLnZpc2l0R3JvdXAoWSk7YnJlYWs7Y2FzZSJHcm91cEJhY2tSZWZlcmVuY2UiOnRoaXMudmlzaXRHcm91cEJhY2tSZWZlcmVuY2UoWSk7YnJlYWs7Y2FzZSJRdWFudGlmaWVyIjp0aGlzLnZpc2l0''@;'; put 'put ''UXVhbnRpZmllcihZKX10aGlzLnZpc2l0Q2hpbGRyZW4oWSl9LHoucHJvdG90eXBlLnZpc2l0UGF0dGVybj1mdW5jdGlvbihZKXt9LHoucHJvdG90eXBlLnZpc2l0RmxhZ3M9ZnVuY3Rpb24oWSl7fSx6LnByb3RvdHlwZS52aXNpdERpc2p1bmN0aW9uPWZ1bmN0aW9uKFkpe30sei5wcm90b3R5''@;'; put 'put ''cGUudmlzaXRBbHRlcm5hdGl2ZT1mdW5jdGlvbihZKXt9LHoucHJvdG90eXBlLnZpc2l0U3RhcnRBbmNob3I9ZnVuY3Rpb24oWSl7fSx6LnByb3RvdHlwZS52aXNpdEVuZEFuY2hvcj1mdW5jdGlvbihZKXt9LHoucHJvdG90eXBlLnZpc2l0V29yZEJvdW5kYXJ5PWZ1bmN0aW9uKFkpe30sei5w''@;'; put 'put ''cm90b3R5cGUudmlzaXROb25Xb3JkQm91bmRhcnk9ZnVuY3Rpb24oWSl7fSx6LnByb3RvdHlwZS52aXNpdExvb2thaGVhZD1mdW5jdGlvbihZKXt9LHoucHJvdG90eXBlLnZpc2l0TmVnYXRpdmVMb29rYWhlYWQ9ZnVuY3Rpb24oWSl7fSx6LnByb3RvdHlwZS52aXNpdENoYXJhY3Rlcj1mdW5j''@;'; put 'put ''dGlvbihZKXt9LHoucHJvdG90eXBlLnZpc2l0U2V0PWZ1bmN0aW9uKFkpe30sei5wcm90b3R5cGUudmlzaXRHcm91cD1mdW5jdGlvbihZKXt9LHoucHJvdG90eXBlLnZpc2l0R3JvdXBCYWNrUmVmZXJlbmNlPWZ1bmN0aW9uKFkpe30sei5wcm90b3R5cGUudmlzaXRRdWFudGlmaWVyPWZ1bmN0''@;'; put 'put ''aW9uKFkpe30se1JlZ0V4cFBhcnNlcjpzLEJhc2VSZWdFeHBWaXNpdG9yOnosVkVSU0lPTjoiMC40LjAifX0pP2guYXBwbHkoaixbXSk6aCkmJihmZS5leHBvcnRzPWMpfSwzNjYzNihmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDgzODM4KS5CdWZmZXIsYz1oKDcxOTkzKSxzPWgoMTM2''@;'; put 'put ''ODYpLEE9bmV3IEFycmF5KDE2KSx2PVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1''@;'; put 'put ''LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLEM9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEz''@;'; put 'put ''LDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sdz1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwx''@;'; put 'put ''Myw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sUz1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMs''@;'; put 'put ''MTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV0sTD1bMCwxNTE4''@;'; put 'put ''NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwyODQwODUzODM4XSxSPVsxMzUyODI5OTI2LDE1NDg2MDM2ODQsMTgzNjA3MjY5MSwyMDUzOTk0MjE3LDBdO2Z1bmN0aW9uIHgoRixXKXtyZXR1cm4gRjw8V3xGPj4+MzItV31mdW5jdGlvbiBVKEYsVyxxLHJlLG1lLENlLEllLGtlKXtyZXR1''@;'; put 'put ''cm4geChGKyhXXnFecmUpK0NlK0llfDAsa2UpK21lfDB9ZnVuY3Rpb24gSChGLFcscSxyZSxtZSxDZSxJZSxrZSl7cmV0dXJuIHgoRisoVyZxfH5XJnJlKStDZStJZXwwLGtlKSttZXwwfWZ1bmN0aW9uIFYoRixXLHEscmUsbWUsQ2UsSWUsa2Upe3JldHVybiB4KEYrKChXfH5xKV5yZSkrQ2Ur''@;'; put 'put ''SWV8MCxrZSkrbWV8MH1mdW5jdGlvbiBOKEYsVyxxLHJlLG1lLENlLEllLGtlKXtyZXR1cm4geChGKyhXJnJlfHEmfnJlKStDZStJZXwwLGtlKSttZXwwfWZ1bmN0aW9uIHooRixXLHEscmUsbWUsQ2UsSWUsa2Upe3JldHVybiB4KEYrKFdeKHF8fnJlKSkrQ2UrSWV8MCxrZSkrbWV8MH1mdW5j''@;'; put 'put ''dGlvbiBZKCl7cy5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMH1jKFkscyksWS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIg''@;'; put 'put ''Rj1BLFc9MDtXPDE2OysrVylGW1ddPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqVyk7Zm9yKHZhciBxPTB8dGhpcy5fYSxyZT0wfHRoaXMuX2IsbWU9MHx0aGlzLl9jLENlPTB8dGhpcy5fZCxJZT0wfHRoaXMuX2Usa2U9MHx0aGlzLl9hLHFlPTB8dGhpcy5fYixYPTB8dGhpcy5fYyxmPTB8''@;'; put 'put ''dGhpcy5fZCxiPTB8dGhpcy5fZSxrPTA7azw4MDtrKz0xKXt2YXIgTSxCO2s8MTY/KE09VShxLHJlLG1lLENlLEllLEZbdltrXV0sTFswXSx3W2tdKSxCPXooa2UscWUsWCxmLGIsRltDW2tdXSxSWzBdLFNba10pKTprPDMyPyhNPUgocSxyZSxtZSxDZSxJZSxGW3Zba11dLExbMV0sd1trXSks''@;'; put 'put ''Qj1OKGtlLHFlLFgsZixiLEZbQ1trXV0sUlsxXSxTW2tdKSk6azw0OD8oTT1WKHEscmUsbWUsQ2UsSWUsRlt2W2tdXSxMWzJdLHdba10pLEI9VihrZSxxZSxYLGYsYixGW0Nba11dLFJbMl0sU1trXSkpOms8NjQ/KE09TihxLHJlLG1lLENlLEllLEZbdltrXV0sTFszXSx3W2tdKSxCPUgoa2Us''@;'; put 'put ''cWUsWCxmLGIsRltDW2tdXSxSWzNdLFNba10pKTooTT16KHEscmUsbWUsQ2UsSWUsRlt2W2tdXSxMWzRdLHdba10pLEI9VShrZSxxZSxYLGYsYixGW0Nba11dLFJbNF0sU1trXSkpLHE9SWUsSWU9Q2UsQ2U9eChtZSwxMCksbWU9cmUscmU9TSxrZT1iLGI9ZixmPXgoWCwxMCksWD1xZSxxZT1C''@;'; put 'put ''fXZhciBLPXRoaXMuX2IrbWUrZnwwO3RoaXMuX2I9dGhpcy5fYytDZStifDAsdGhpcy5fYz10aGlzLl9kK0llK2tlfDAsdGhpcy5fZD10aGlzLl9lK3ErcWV8MCx0aGlzLl9lPXRoaXMuX2ErcmUrWHwwLHRoaXMuX2E9S30sWS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Js''@;'; put 'put ''b2NrW3RoaXMuX2Jsb2NrT2Zmc2V0XT0xMjgsdGhpcy5fYmxvY2tPZmZzZXQrPTEsdGhpcy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZpbGwo''@;'; put 'put ''MCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgRj15LmFsbG9jP3kuYWxsb2MoMjApOm5ldyB5KDIw''@;'; put 'put ''KTtyZXR1cm4gRi53cml0ZUludDMyTEUodGhpcy5fYSwwKSxGLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLEYud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksRi53cml0ZUludDMyTEUodGhpcy5fZCwxMiksRi53cml0ZUludDMyTEUodGhpcy5fZSwxNiksRn0sZmUuZXhwb3J0cz1ZfSwyNzA1NChm''@;'; put 'put ''ZSxqLGgpe3ZhciB5PWgoODM4MzgpLGM9eS5CdWZmZXI7ZnVuY3Rpb24gcyh2LEMpe2Zvcih2YXIgdyBpbiB2KUNbd109dlt3XX1mdW5jdGlvbiBBKHYsQyx3KXtyZXR1cm4gYyh2LEMsdyl9Yy5mcm9tJiZjLmFsbG9jJiZjLmFsbG9jVW5zYWZlJiZjLmFsbG9jVW5zYWZlU2xvdz9mZS5leHBv''@;'; put 'put ''cnRzPXk6KHMoeSxqKSxqLkJ1ZmZlcj1BKSxBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMucHJvdG90eXBlKSxzKGMsQSksQS5mcm9tPWZ1bmN0aW9uKHYsQyx3KXtpZigibnVtYmVyIj09dHlwZW9mIHYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1i''@;'; put 'put ''ZXIiKTtyZXR1cm4gYyh2LEMsdyl9LEEuYWxsb2M9ZnVuY3Rpb24odixDLHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIFM9Yyh2KTtyZXR1cm4gdm9pZCAwIT09Qz8ic3RyaW5nIj09dHlwZW9mIHc/''@;'; put 'put ''Uy5maWxsKEMsdyk6Uy5maWxsKEMpOlMuZmlsbCgwKSxTfSxBLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHYpe2lmKCJudW1iZXIiIT10eXBlb2Ygdil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIGModil9LEEuYWxsb2NVbnNhZmVTbG93PWZ1''@;'; put 'put ''bmN0aW9uKHYpe2lmKCJudW1iZXIiIT10eXBlb2Ygdil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIHkuU2xvd0J1ZmZlcih2KX19LDkzODA3KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciBBLHk9aCg4MzgzOCksYz15LkJ1ZmZlcixzPXt9''@;'; put 'put ''O2ZvcihBIGluIHkpeS5oYXNPd25Qcm9wZXJ0eShBKSYmKCJTbG93QnVmZmVyIj09PUF8fCJCdWZmZXIiPT09QXx8KHNbQV09eVtBXSkpO3ZhciB2PXMuQnVmZmVyPXt9O2ZvcihBIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShBKSYmKCJhbGxvY1Vuc2FmZSI9PT1BfHwiYWxsb2NVbnNhZmVTbG93''@;'; put 'put ''Ij09PUF8fCh2W0FdPWNbQV0pKTtpZihzLkJ1ZmZlci5wcm90b3R5cGU9Yy5wcm90b3R5cGUsKCF2LmZyb218fHYuZnJvbT09PVVpbnQ4QXJyYXkuZnJvbSkmJih2LmZyb209ZnVuY3Rpb24oQyx3LFMpe2lmKCJudW1iZXIiPT10eXBlb2YgQyl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZh''@;'; put 'put ''bHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBDKTtpZihDJiZ0eXBlb2YgQy5sZW5ndGg+InUiKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVm''@;'; put 'put ''ZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIEMpO3JldHVybiBjKEMsdyxTKX0pLHYuYWxsb2N8fCh2LmFsbG9jPWZ1bmN0aW9uKEMsdyxTKXtpZigibnVtYmVyIiE9dHlwZW9mIEMpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cignVGhlICJzaXplIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIEMpO2lmKEM8MHx8Qz49MiooMTw8MzApKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrQysnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyk7''@;'; put 'put ''dmFyIEw9YyhDKTtyZXR1cm4gdyYmMCE9PXcubGVuZ3RoPyJzdHJpbmciPT10eXBlb2YgUz9MLmZpbGwodyxTKTpMLmZpbGwodyk6TC5maWxsKDApLEx9KSwhcy5rU3RyaW5nTWF4TGVuZ3RoKXRyeXtzLmtTdHJpbmdNYXhMZW5ndGg9cHJvY2Vzcy5iaW5kaW5nKCJidWZmZXIiKS5rU3RyaW5n''@;'; put 'put ''TWF4TGVuZ3RofWNhdGNoe31zLmNvbnN0YW50c3x8KHMuY29uc3RhbnRzPXtNQVhfTEVOR1RIOnMua01heExlbmd0aH0scy5rU3RyaW5nTWF4TGVuZ3RoJiYocy5jb25zdGFudHMuTUFYX1NUUklOR19MRU5HVEg9cy5rU3RyaW5nTWF4TGVuZ3RoKSksZmUuZXhwb3J0cz1zfSw5ODA4MyhmZSxq''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIHk7IWZ1bmN0aW9uKCl7dmFyIGM9anx8e307dm9pZCAwIT09KHk9ZnVuY3Rpb24oKXtyZXR1cm4gY30uYXBwbHkoaixbXSkpJiYoZmUuZXhwb3J0cz15KSxjLmRlZmF1bHQ9Yzt2YXIgcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLHY9Imh0dHA6''@;'; put 'put ''Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3PS91cmxcKFsiJ10/KC4rPylbIiddP1wpLyxTPXt3b2ZmMjoiZm9udC93b2ZmMiIsd29mZjoiZm9udC93b2ZmIixvdGY6ImFwcGxpY2F0aW9uL3gtZm9udC1vcGVudHlwZSIsdHRmOiJhcHBsaWNhdGlvbi94LWZvbnQtdHRmIixlb3Q6ImFwcGxpY2F0''@;'; put 'put ''aW9uL3ZuZC5tcy1mb250b2JqZWN0IixzZm50OiJhcHBsaWNhdGlvbi9mb250LXNmbnQiLHN2ZzoiaW1hZ2Uvc3ZnK3htbCJ9LEw9ZnVuY3Rpb24oYil7cmV0dXJuIGIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudHx8YiBpbnN0YW5jZW9mIFNWR0VsZW1lbnR9LFI9ZnVuY3Rpb24oYil7aWYoIUwo''@;'; put 'put ''YikpdGhyb3cgbmV3IEVycm9yKCJhbiBIVE1MRWxlbWVudCBvciBTVkdFbGVtZW50IGlzIHJlcXVpcmVkOyBnb3QgIitiKX0seD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oayxNKXtMKGIpP2soYik6TShuZXcgRXJyb3IoImFuIEhUTUxFbGVtZW50IG9yIFNWR0Vs''@;'; put 'put ''ZW1lbnQgaXMgcmVxdWlyZWQ7IGdvdCAiK2IpKX0pfSxIPWZ1bmN0aW9uKGIpe3ZhciBrPU9iamVjdC5rZXlzKFMpLmZpbHRlcihmdW5jdGlvbihNKXtyZXR1cm4gYi5pbmRleE9mKCIuIitNKT4wfSkubWFwKGZ1bmN0aW9uKE0pe3JldHVybiBTW01dfSk7cmV0dXJuIGs/a1swXTooY29uc29s''@;'; put 'put ''ZS5lcnJvcigiVW5rbm93biBmb250IGZvcm1hdCBmb3IgIitiKyIuIEZvbnRzIG1heSBub3QgYmUgd29ya2luZyBjb3JyZWN0bHkuIiksImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpfSxOPWZ1bmN0aW9uKGIsayxNKXt2YXIgQj1iLnZpZXdCb3gmJmIudmlld0JveC5iYXNlVmFsJiZiLnZp''@;'; put 'put ''ZXdCb3guYmFzZVZhbFtNXXx8bnVsbCE9PWsuZ2V0QXR0cmlidXRlKE0pJiYhay5nZXRBdHRyaWJ1dGUoTSkubWF0Y2goLyUkLykmJnBhcnNlSW50KGsuZ2V0QXR0cmlidXRlKE0pKXx8Yi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtNXXx8cGFyc2VJbnQoay5zdHlsZVtNXSl8fHBhcnNlSW50''@;'; put 'put ''KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGIpLmdldFByb3BlcnR5VmFsdWUoTSkpO3JldHVybiB0eXBlb2YgQj4idSJ8fG51bGw9PT1CfHxpc05hTihwYXJzZUZsb2F0KEIpKT8wOkJ9LEY9ZnVuY3Rpb24oYil7Zm9yKHZhciBrPXdpbmRvdy5hdG9iKGIuc3BsaXQoIiwiKVsxXSksTT1iLnNw''@;'; put 'put ''bGl0KCIsIilbMF0uc3BsaXQoIjoiKVsxXS5zcGxpdCgiOyIpWzBdLEI9bmV3IEFycmF5QnVmZmVyKGsubGVuZ3RoKSxLPW5ldyBVaW50OEFycmF5KEIpLEc9MDtHPGsubGVuZ3RoO0crKylLW0ddPWsuY2hhckNvZGVBdChHKTtyZXR1cm4gbmV3IEJsb2IoW0JdLHt0eXBlOk19KX0sbWU9e30s''@;'; put 'put ''SWU9bnVsbCxxZT1mdW5jdGlvbihiLGspe3ZhciBNPWt8fHt9LEI9TS5zZWxlY3RvclJlbWFwLEs9TS5tb2RpZnlTdHlsZSxEPU0uZm9udHMscD1NLmV4Y2x1ZGVVbnVzZWRDc3MsST1NLm1vZGlmeUNzc3x8ZnVuY3Rpb24oUGUsb3Qpe3JldHVybihCP0IoUGUpOlBlKSsieyIrKEs/SyhvdCk6''@;'; put 'put ''b3QpKyJ9XG4ifSx1ZT1bXSxuZT10eXBlb2YgRD4idSIsX2U9RHx8W107cmV0dXJuKEllfHwoSWU9QXJyYXkuZnJvbShkb2N1bWVudC5zdHlsZVNoZWV0cykubWFwKGZ1bmN0aW9uKGIpe3RyeXtyZXR1cm57cnVsZXM6Yi5jc3NSdWxlcyxocmVmOmIuaHJlZn19Y2F0Y2goayl7cmV0dXJuIGNv''@;'; put 'put ''bnNvbGUud2FybigiU3R5bGVzaGVldCBjb3VsZCBub3QgYmUgbG9hZGVkOiAiK2IuaHJlZixrKSx7fX19KSkpLmZvckVhY2goZnVuY3Rpb24oUGUpe3ZhciBvdD1QZS5ydWxlcyxsdD1QZS5ocmVmO290JiZBcnJheS5mcm9tKG90KS5mb3JFYWNoKGZ1bmN0aW9uKGR0KXtpZih0eXBlb2YgZHQu''@;'; put 'put ''c3R5bGU8InUiKWlmKGZ1bmN0aW9uKGIsayl7aWYoayl0cnl7cmV0dXJuIGIucXVlcnlTZWxlY3RvcihrKXx8Yi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUucXVlcnlTZWxlY3RvcihrKX1jYXRjaChNKXtjb25zb2xlLndhcm4oJ0ludmFsaWQgQ1NTIHNlbGVjdG9yICInK2srJyInLE0pfX0o''@;'; put 'put ''YixkdC5zZWxlY3RvclRleHQpKXVlLnB1c2goSShkdC5zZWxlY3RvclRleHQsZHQuc3R5bGUuY3NzVGV4dCkpO2Vsc2UgaWYobmUmJmR0LmNzc1RleHQubWF0Y2goL15AZm9udC1mYWNlLykpe3ZhciBSZT1mdW5jdGlvbihiLGspe3ZhciBNPWIuY3NzVGV4dC5tYXRjaCh3KSxCPU0mJk1bMV18''@;'; put 'put ''fCIiO2lmKEImJiFCLm1hdGNoKC9eZGF0YTovKSYmImFib3V0OmJsYW5rIiE9PUIpe3ZhciBLPUIuc3RhcnRzV2l0aCgiLi4vIik/aysiLy4uLyIrQjpCLnN0YXJ0c1dpdGgoIi4vIik/aysiLy4iK0I6QjtyZXR1cm57dGV4dDpiLmNzc1RleHQsZm9ybWF0OkgoSyksdXJsOkt9fX0oZHQsbHQp''@;'; put 'put ''O1JlJiZfZS5wdXNoKFJlKX1lbHNlIHB8fHVlLnB1c2goZHQuY3NzVGV4dCl9KX0pLGZ1bmN0aW9uKGIpe3JldHVybiBQcm9taXNlLmFsbChiLm1hcChmdW5jdGlvbihrKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oTSxCKXtpZihtZVtrLnVybF0pcmV0dXJuIE0obWVbay51cmxdKTt2''@;'; put 'put ''YXIgSz1uZXcgWE1MSHR0cFJlcXVlc3Q7Sy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixmdW5jdGlvbigpe3ZhciBHPWZ1bmN0aW9uKGIpe2Zvcih2YXIgaz0iIixNPW5ldyBVaW50OEFycmF5KGIpLEI9MDtCPE0uYnl0ZUxlbmd0aDtCKyspays9U3RyaW5nLmZyb21DaGFyQ29kZShNW0JdKTty''@;'; put 'put ''ZXR1cm4gd2luZG93LmJ0b2Eoayl9KEsucmVzcG9uc2UpLEQ9ay50ZXh0LnJlcGxhY2UodywndXJsKCJkYXRhOicray5mb3JtYXQrIjtiYXNlNjQsIitHKyciKScpKyJcbiI7bWVbay51cmxdPUQsTShEKX0pLEsuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGZ1bmN0aW9uKEcpe2NvbnNvbGUu''@;'; put 'put ''d2FybigiRmFpbGVkIHRvIGxvYWQgZm9udCBmcm9tOiAiK2sudXJsLEcpLG1lW2sudXJsXT1udWxsLE0obnVsbCl9KSxLLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixmdW5jdGlvbihHKXtjb25zb2xlLndhcm4oIkFib3J0ZWQgbG9hZGluZyBmb250IGZyb206ICIray51cmwsRyksTShudWxs''@;'; put 'put ''KX0pLEsub3BlbigiR0VUIixrLnVybCksSy5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixLLnNlbmQoKX0pfSkpLnRoZW4oZnVuY3Rpb24oayl7cmV0dXJuIGsuZmlsdGVyKGZ1bmN0aW9uKE0pe3JldHVybiBNfSkuam9pbigiIil9KX0oX2UpLnRoZW4oZnVuY3Rpb24oUGUpe3JldHVybiB1''@;'; put 'put ''ZS5qb2luKCJcbiIpK1BlfSl9LFg9ZnVuY3Rpb24oKXtpZighbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2ImJiEoImRvd25sb2FkImluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSkpcmV0dXJue3BvcHVwOndpbmRvdy5vcGVuKCl9fTtjLnByZXBhcmVTdmc9ZnVuY3Rpb24oZixiLGsp''@;'; put 'put ''e1IoZik7dmFyIE09Ynx8e30sQj1NLmxlZnQsSz12b2lkIDA9PT1CPzA6QixHPU0udG9wLEQ9dm9pZCAwPT09Rz8wOkcscD1NLndpZHRoLEk9TS5oZWlnaHQsdWU9TS5zY2FsZSxuZT12b2lkIDA9PT11ZT8xOnVlLF9lPU0ucmVzcG9uc2l2ZSxQZT12b2lkIDAhPT1fZSYmX2Usb3Q9TS5leGNs''@;'; put 'put ''dWRlQ3NzLGx0PXZvaWQgMCE9PW90JiZvdDtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIFByb21pc2UuYWxsKEFycmF5LmZyb20oYi5xdWVyeVNlbGVjdG9yQWxsKCJpbWFnZSIpKS5tYXAoZnVuY3Rpb24oayl7dmFyIE09ay5nZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMTk5''@;'; put 'put ''OS94bGluayIsImhyZWYiKXx8ay5nZXRBdHRyaWJ1dGUoImhyZWYiKTtyZXR1cm4gTT8oZnVuY3Rpb24oYil7cmV0dXJuIGImJjA9PT1iLmxhc3RJbmRleE9mKCJodHRwIiwwKSYmLTE9PT1iLmxhc3RJbmRleE9mKHdpbmRvdy5sb2NhdGlvbi5ob3N0KX0oTSkmJihNKz0oLTE9PT1NLmluZGV4''@;'; put 'put ''T2YoIj8iKT8iPyI6IiYiKSsidD0iKyhuZXcgRGF0ZSkudmFsdWVPZigpKSxuZXcgUHJvbWlzZShmdW5jdGlvbihCLEspe3ZhciBHPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLEQ9bmV3IEltYWdlO0QuY3Jvc3NPcmlnaW49ImFub255bW91cyIsRC5zcmM9TSxELm9uZXJyb3I9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gSyhuZXcgRXJyb3IoIkNvdWxkIG5vdCBsb2FkICIrTSkpfSxELm9ubG9hZD1mdW5jdGlvbigpe0cud2lkdGg9RC53aWR0aCxHLmhlaWdodD1ELmhlaWdodCxHLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKEQsMCwwKSxrLnNldEF0dHJpYnV0ZU5TKCJodHRw''@;'; put 'put ''Oi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwiaHJlZiIsRy50b0RhdGFVUkwoImltYWdlL3BuZyIpKSxCKCEwKX19KSk6UHJvbWlzZS5yZXNvbHZlKG51bGwpfSkpfShmKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGR0PWYuY2xvbmVOb2RlKCEwKTtkdC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9KGJ8''@;'; put 'put ''fHt9KS5iYWNrZ3JvdW5kQ29sb3J8fGYuc3R5bGUuYmFja2dyb3VuZENvbG9yO3ZhciBSZT1mdW5jdGlvbihiLGssTSxCKXtpZigic3ZnIj09PWIudGFnTmFtZSlyZXR1cm57d2lkdGg6TXx8TihiLGssIndpZHRoIiksaGVpZ2h0OkJ8fE4oYixrLCJoZWlnaHQiKX07aWYoYi5nZXRCQm94KXt2''@;'; put 'put ''YXIgSz1iLmdldEJCb3goKTtyZXR1cm57d2lkdGg6Sy54K0sud2lkdGgsaGVpZ2h0OksueStLLmhlaWdodH19fShmLGR0LHAsSSksYWU9UmUud2lkdGgseGU9UmUuaGVpZ2h0O2lmKCJzdmciIT09Zi50YWdOYW1lKXtpZighZi5nZXRCQm94KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIkF0''@;'; put 'put ''dGVtcHRlZCB0byByZW5kZXIgbm9uLVNWRyBlbGVtZW50IixmKTtudWxsIT1kdC5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpJiZkdC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZHQuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKS5yZXBsYWNlKC90cmFuc2xhdGVcKC4qP1wpLywiIikpO3Zh''@;'; put 'put ''ciBqZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwic3ZnIik7amUuYXBwZW5kQ2hpbGQoZHQpLGR0PWplfWlmKGR0LnNldEF0dHJpYnV0ZSgidmVyc2lvbiIsIjEuMSIpLGR0LnNldEF0dHJpYnV0ZSgidmlld0JveCIsW0ssRCxhZSx4ZV0u''@;'; put 'put ''am9pbigiICIpKSxkdC5nZXRBdHRyaWJ1dGUoInhtbG5zIil8fGR0LnNldEF0dHJpYnV0ZU5TKHMsInhtbG5zIix2KSxkdC5nZXRBdHRyaWJ1dGUoInhtbG5zOnhsaW5rIil8fGR0LnNldEF0dHJpYnV0ZU5TKHMsInhtbG5zOnhsaW5rIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIp''@;'; put 'put ''LFBlPyhkdC5yZW1vdmVBdHRyaWJ1dGUoIndpZHRoIiksZHQucmVtb3ZlQXR0cmlidXRlKCJoZWlnaHQiKSxkdC5zZXRBdHRyaWJ1dGUoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWluWU1pbiBtZWV0IikpOihkdC5zZXRBdHRyaWJ1dGUoIndpZHRoIixhZSpuZSksZHQuc2V0QXR0cmlidXRl''@;'; put 'put ''KCJoZWlnaHQiLHhlKm5lKSksQXJyYXkuZnJvbShkdC5xdWVyeVNlbGVjdG9yQWxsKCJmb3JlaWduT2JqZWN0ID4gKiIpKS5mb3JFYWNoKGZ1bmN0aW9uKEZlKXtGZS5zZXRBdHRyaWJ1dGVOUyhzLCJ4bWxucyIsInN2ZyI9PT1GZS50YWdOYW1lP3Y6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkv''@;'; put 'put ''eGh0bWwiKX0pLCFsdClyZXR1cm4gcWUoZixiKS50aGVuKGZ1bmN0aW9uKEZlKXt2YXIgZ2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtnZS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGdlLmlubmVySFRNTD0iPCFbQ0RBVEFbXG4iK0ZlKyJcbl1dPiI7dmFyIGNl''@;'; put 'put ''PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRlZnMiKTtjZS5hcHBlbmRDaGlsZChnZSksZHQuaW5zZXJ0QmVmb3JlKGNlLGR0LmZpcnN0Q2hpbGQpO3ZhciBoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtoZS5hcHBlbmRDaGlsZChkdCk7dmFyIHdlPWhlLmlubmVySFRNTC5yZXBs''@;'; put 'put ''YWNlKC9OU1xkKzpocmVmL2dpLCd4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZicpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrKXJldHVybntzcmM6d2Usd2lkdGg6YWUsaGVpZ2h0OnhlfTtrKHdlLGFlLHhlKX0pO3ZhciBBZT1kb2N1bWVudC5j''@;'; put 'put ''cmVhdGVFbGVtZW50KCJkaXYiKTtBZS5hcHBlbmRDaGlsZChkdCk7dmFyIERlPUFlLmlubmVySFRNTDtpZigiZnVuY3Rpb24iIT10eXBlb2YgaylyZXR1cm57c3JjOkRlLHdpZHRoOmFlLGhlaWdodDp4ZX07ayhEZSxhZSx4ZSl9KX0sYy5zdmdBc0RhdGFVcmk9ZnVuY3Rpb24oZixiLGspe3Jl''@;'; put 'put ''dHVybiBSKGYpLGMucHJlcGFyZVN2ZyhmLGIpLnRoZW4oZnVuY3Rpb24oTSl7dmFyIEs9TS53aWR0aCxHPU0uaGVpZ2h0LEQ9ImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsIit3aW5kb3cuYnRvYShmdW5jdGlvbihiKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBv''@;'; put 'put ''bmVudChiKS5yZXBsYWNlKC8lKFswLTlBLUZdezJ9KS9nLGZ1bmN0aW9uKGssTSl7dmFyIEI9U3RyaW5nLmZyb21DaGFyQ29kZSgiMHgiK00pO3JldHVybiIlIj09PUI/IiUyNSI6Qn0pKX0oJzw/eG1sIHZlcnNpb249IjEuMCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJ''@;'; put 'put ''QyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiIFs8IUVOVElUWSBuYnNwICImIzE2MDsiPl0+JytNLnNyYykpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBrJiZrKEQsSyxHKSxEfSl9LGMuc3ZnQXNQ''@;'; put 'put ''bmdVcmk9ZnVuY3Rpb24oZixiLGspe1IoZik7dmFyIE09Ynx8e30sQj1NLmVuY29kZXJUeXBlLEs9dm9pZCAwPT09Qj8iaW1hZ2UvcG5nIjpCLEc9TS5lbmNvZGVyT3B0aW9ucyxEPXZvaWQgMD09PUc/Ljg6RyxwPU0uY2FudmcsST1mdW5jdGlvbihuZSl7dmFyIF9lPW5lLnNyYyxQZT1uZS53''@;'; put 'put ''aWR0aCxvdD1uZS5oZWlnaHQsbHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksZHQ9bHQuZ2V0Q29udGV4dCgiMmQiKSxSZT13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtsdC53aWR0aD1QZSpSZSxsdC5oZWlnaHQ9b3QqUmUsbHQuc3R5bGUud2lkdGg9bHQud2lkdGgrInB4''@;'; put 'put ''IixsdC5zdHlsZS5oZWlnaHQ9bHQuaGVpZ2h0KyJweCIsZHQuc2V0VHJhbnNmb3JtKFJlLDAsMCxSZSwwLDApLHA/cChsdCxfZSk6ZHQuZHJhd0ltYWdlKF9lLDAsMCk7dmFyIGFlPXZvaWQgMDt0cnl7YWU9bHQudG9EYXRhVVJMKEssRCl9Y2F0Y2goeGUpe2lmKHR5cGVvZiBTZWN1cml0eUVy''@;'; put 'put ''cm9yPCJ1IiYmeGUgaW5zdGFuY2VvZiBTZWN1cml0eUVycm9yfHwiU2VjdXJpdHlFcnJvciI9PT14ZS5uYW1lKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlJlbmRlcmVkIFNWRyBpbWFnZXMgY2Fubm90IGJlIGRvd25sb2FkZWQgaW4gdGhpcyBicm93c2VyLiIpO3Rocm93IHhlfXJldHVy''@;'; put 'put ''biJmdW5jdGlvbiI9PXR5cGVvZiBrJiZrKGFlLGx0LndpZHRoLGx0LmhlaWdodCksUHJvbWlzZS5yZXNvbHZlKGFlKX07cmV0dXJuIHA/Yy5wcmVwYXJlU3ZnKGYsYikudGhlbihJKTpjLnN2Z0FzRGF0YVVyaShmLGIpLnRoZW4oZnVuY3Rpb24odWUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5j''@;'; put 'put ''dGlvbihuZSxfZSl7dmFyIFBlPW5ldyBJbWFnZTtQZS5vbmxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmUoSSh7c3JjOlBlLHdpZHRoOlBlLndpZHRoLGhlaWdodDpQZS5oZWlnaHR9KSl9LFBlLm9uZXJyb3I9ZnVuY3Rpb24oKXtfZSgiVGhlcmUgd2FzIGFuIGVycm9yIGxvYWRpbmcgdGhlIGRh''@;'; put 'put ''dGEgVVJJIGFzIGFuIGltYWdlIG9uIHRoZSBmb2xsb3dpbmcgU1ZHXG4iK3dpbmRvdy5hdG9iKHVlLnNsaWNlKDI2KSkrIk9wZW4gdGhlIGZvbGxvd2luZyBsaW5rIHRvIHNlZSBicm93c2VyJ3MgZGlhZ25vc2lzXG4iK3VlKX0sUGUuc3JjPXVlfSl9KX0sYy5kb3dubG9hZD1mdW5jdGlvbihm''@;'; put 'put ''LGIsayl7aWYobmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IpbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoRihiKSxmKTtlbHNle3ZhciBNPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtpZigiZG93bmxvYWQiaW4gTSl7TS5kb3dubG9hZD1mLE0uc3R5bGUuZGlzcGxheT0ibm9uZSIs''@;'; put 'put ''ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChNKTt0cnl7dmFyIEI9RihiKSxLPVVSTC5jcmVhdGVPYmplY3RVUkwoQik7TS5ocmVmPUssTS5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3JldHVybiBVUkwucmV2b2tlT2JqZWN0VVJM''@;'; put 'put ''KEspfSl9fWNhdGNoKEcpe2NvbnNvbGUuZXJyb3IoRyksY29uc29sZS53YXJuKCJFcnJvciB3aGlsZSBnZXR0aW5nIG9iamVjdCBVUkwuIEZhbGxpbmcgYmFjayB0byBzdHJpbmcgVVJMLiIpLE0uaHJlZj1ifU0uY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKE0pfWVsc2UgayYm''@;'; put 'put ''ay5wb3B1cCYmKGsucG9wdXAuZG9jdW1lbnQudGl0bGU9ZixrLnBvcHVwLmxvY2F0aW9uLnJlcGxhY2UoYikpfX0sYy5zYXZlU3ZnPWZ1bmN0aW9uKGYsYixrKXt2YXIgTT1YKCk7cmV0dXJuIHgoZikudGhlbihmdW5jdGlvbihCKXtyZXR1cm4gYy5zdmdBc0RhdGFVcmkoQixrfHx7fSl9KS50''@;'; put 'put ''aGVuKGZ1bmN0aW9uKEIpe3JldHVybiBjLmRvd25sb2FkKGIsQixNKX0pfSxjLnNhdmVTdmdBc1BuZz1mdW5jdGlvbihmLGIsayl7dmFyIE09WCgpO3JldHVybiB4KGYpLnRoZW4oZnVuY3Rpb24oQil7cmV0dXJuIGMuc3ZnQXNQbmdVcmkoQixrfHx7fSl9KS50aGVuKGZ1bmN0aW9uKEIpe3Jl''@;'; put 'put ''dHVybiBjLmRvd25sb2FkKGIsQixNKX0pfX0oKX0sMzEzNTgoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg5MDI1OCksYz1oKDkyNzM2KSxzPWgoMzU4NjEpKCksQT1oKDgzNzk4KSx2PWgoNDY3NTgpLEM9eSgiJU1hdGguZmxvb3IlIik7ZmUuZXhwb3J0cz1mdW5jdGlvbihTLEwpe2lm''@;'; put 'put ''KCJmdW5jdGlvbiIhPXR5cGVvZiBTKXRocm93IG5ldyB2KCJgZm5gIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoIm51bWJlciIhPXR5cGVvZiBMfHxMPDB8fEw+NDI5NDk2NzI5NXx8QyhMKSE9PUwpdGhyb3cgbmV3IHYoImBsZW5ndGhgIG11c3QgYmUgYSBwb3NpdGl2ZSAzMi1iaXQgaW50ZWdl''@;'; put 'put ''ciIpO3ZhciBSPWFyZ3VtZW50cy5sZW5ndGg+MiYmISFhcmd1bWVudHNbMl0seD0hMCxVPSEwO2lmKCJsZW5ndGgiaW4gUyYmQSl7dmFyIEg9QShTLCJsZW5ndGgiKTtIJiYhSC5jb25maWd1cmFibGUmJih4PSExKSxIJiYhSC53cml0YWJsZSYmKFU9ITEpfXJldHVybih4fHxVfHwhUikmJihz''@;'; put 'put ''P2MoUywibGVuZ3RoIixMLCEwLCEwKTpjKFMsImxlbmd0aCIsTCkpLFN9fSw3MDQ2MyhmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDI3MDU0KS5CdWZmZXIsYz1oKDQxMDkwKTtmdW5jdGlvbiBzKEEsdil7dGhpcy5fYmxvY2s9eS5hbGxvYyhBKSx0aGlzLl9maW5hbFNpemU9dix0aGlz''@;'; put 'put ''Ll9ibG9ja1NpemU9QSx0aGlzLl9sZW49MH1zLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oQSx2KXtBPWMoQSx2fHwidXRmOCIpO2Zvcih2YXIgQz10aGlzLl9ibG9jayx3PXRoaXMuX2Jsb2NrU2l6ZSxTPUEubGVuZ3RoLEw9dGhpcy5fbGVuLFI9MDtSPFM7KXtmb3IodmFyIHg9TCV3LFU9''@;'; put 'put ''TWF0aC5taW4oUy1SLHcteCksSD0wO0g8VTtIKyspQ1t4K0hdPUFbUitIXTtSKz1VLChMKz1VKSV3PT09MCYmdGhpcy5fdXBkYXRlKEMpfXJldHVybiB0aGlzLl9sZW4rPVMsdGhpc30scy5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKEEpe3ZhciB2PXRoaXMuX2xlbiV0aGlzLl9ibG9ja1Np''@;'; put 'put ''emU7dGhpcy5fYmxvY2tbdl09MTI4LHRoaXMuX2Jsb2NrLmZpbGwoMCx2KzEpLHY+PXRoaXMuX2ZpbmFsU2l6ZSYmKHRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayksdGhpcy5fYmxvY2suZmlsbCgwKSk7dmFyIEM9OCp0aGlzLl9sZW47aWYoQzw9NDI5NDk2NzI5NSl0aGlzLl9ibG9jay53cml0''@;'; put 'put ''ZVVJbnQzMkJFKEMsdGhpcy5fYmxvY2tTaXplLTQpO2Vsc2V7dmFyIHc9KDQyOTQ5NjcyOTUmQyk+Pj4wO3RoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoKEMtdykvNDI5NDk2NzI5Nix0aGlzLl9ibG9ja1NpemUtOCksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRSh3LHRoaXMuX2Jsb2NrU2l6''@;'; put 'put ''ZS00KX10aGlzLl91cGRhdGUodGhpcy5fYmxvY2spO3ZhciBMPXRoaXMuX2hhc2goKTtyZXR1cm4gQT9MLnRvU3RyaW5nKEEpOkx9LHMucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzcyIp''@;'; put 'put ''fSxmZS5leHBvcnRzPXN9LDI1NDQzKGZlLGosaCl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9ZnVuY3Rpb24oYyl7dmFyIHM9Yy50b0xvd2VyQ2FzZSgpLEE9ZmUuZXhwb3J0c1tzXTtpZighQSl0aHJvdyBuZXcgRXJyb3IocysiIGlzIG5vdCBzdXBwb3J0ZWQgKHdlIGFjY2VwdCBwdWxsIHJl''@;'; put 'put ''cXVlc3RzKSIpO3JldHVybiBuZXcgQX0sZmUuZXhwb3J0cy5zaGE9aCg0ODU4NSksZmUuZXhwb3J0cy5zaGExPWgoMjEyNzApLGZlLmV4cG9ydHMuc2hhMjI0PWgoNDI3MDkpLGZlLmV4cG9ydHMuc2hhMjU2PWgoMzIxNDgpLGZlLmV4cG9ydHMuc2hhMzg0PWgoNTE4NTYpLGZlLmV4cG9ydHMu''@;'; put 'put ''c2hhNTEyPWgoMzEyMSl9LDQ4NTg1KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNzE5OTMpLGM9aCg3MDQ2Mykscz1oKDI3MDU0KS5CdWZmZXIsQT1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLHY9bmV3IEFycmF5KDgwKTtmdW5jdGlvbiBDKCl7''@;'; put 'put ''dGhpcy5pbml0KCksdGhpcy5fdz12LGMuY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiB3KFIpe3JldHVybiBSPDw1fFI+Pj4yN31mdW5jdGlvbiBTKFIpe3JldHVybiBSPDwzMHxSPj4+Mn1mdW5jdGlvbiBMKFIseCxVLEgpe3JldHVybiAwPT09Uj94JlV8fngmSDoyPT09Uj94JlV8eCZIfFUm''@;'; put 'put ''SDp4XlVeSH15KEMsYyksQy5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sQy5wcm90b3R5cGUuX3Vw''@;'; put 'put ''ZGF0ZT1mdW5jdGlvbihSKXtmb3IodmFyIHg9dGhpcy5fdyxVPTB8dGhpcy5fYSxIPTB8dGhpcy5fYixWPTB8dGhpcy5fYyxOPTB8dGhpcy5fZCx6PTB8dGhpcy5fZSxZPTA7WTwxNjsrK1kpeFtZXT1SLnJlYWRJbnQzMkJFKDQqWSk7Zm9yKDtZPDgwOysrWSl4W1ldPXhbWS0zXV54W1ktOF1e''@;'; put 'put ''eFtZLTE0XV54W1ktMTZdO2Zvcih2YXIgRj0wO0Y8ODA7KytGKXt2YXIgVz1+fihGLzIwKSxxPXcoVSkrTChXLEgsVixOKSt6K3hbRl0rQVtXXXwwO3o9TixOPVYsVj1TKEgpLEg9VSxVPXF9dGhpcy5fYT1VK3RoaXMuX2F8MCx0aGlzLl9iPUgrdGhpcy5fYnwwLHRoaXMuX2M9Vit0aGlzLl9j''@;'; put 'put ''fDAsdGhpcy5fZD1OK3RoaXMuX2R8MCx0aGlzLl9lPXordGhpcy5fZXwwfSxDLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBSPXMuYWxsb2NVbnNhZmUoMjApO3JldHVybiBSLndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksUi53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLFIud3Jp''@;'; put 'put ''dGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxSLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLFIud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksUn0sZmUuZXhwb3J0cz1DfSwyMTI3MChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDcxOTkzKSxjPWgoNzA0NjMpLHM9aCgyNzA1NCkuQnVm''@;'; put 'put ''ZmVyLEE9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSx2PW5ldyBBcnJheSg4MCk7ZnVuY3Rpb24gQygpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dixjLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gdyh4KXtyZXR1cm4geDw8MXx4Pj4+MzF9ZnVuY3Rpb24g''@;'; put 'put ''Uyh4KXtyZXR1cm4geDw8NXx4Pj4+Mjd9ZnVuY3Rpb24gTCh4KXtyZXR1cm4geDw8MzB8eD4+PjJ9ZnVuY3Rpb24gUih4LFUsSCxWKXtyZXR1cm4gMD09PXg/VSZIfH5VJlY6Mj09PXg/VSZIfFUmVnxIJlY6VV5IXlZ9eShDLGMpLEMucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9LEMucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oeCl7Zm9yKHZhciBVPXRoaXMuX3csSD0wfHRoaXMuX2EsVj0w''@;'; put 'put ''fHRoaXMuX2IsTj0wfHRoaXMuX2Msej0wfHRoaXMuX2QsWT0wfHRoaXMuX2UsRj0wO0Y8MTY7KytGKVVbRl09eC5yZWFkSW50MzJCRSg0KkYpO2Zvcig7Rjw4MDsrK0YpVVtGXT13KFVbRi0zXV5VW0YtOF1eVVtGLTE0XV5VW0YtMTZdKTtmb3IodmFyIFc9MDtXPDgwOysrVyl7dmFyIHE9fn4o''@;'; put 'put ''Vy8yMCkscmU9UyhIKStSKHEsVixOLHopK1krVVtXXStBW3FdfDA7WT16LHo9TixOPUwoViksVj1ILEg9cmV9dGhpcy5fYT1IK3RoaXMuX2F8MCx0aGlzLl9iPVYrdGhpcy5fYnwwLHRoaXMuX2M9Tit0aGlzLl9jfDAsdGhpcy5fZD16K3RoaXMuX2R8MCx0aGlzLl9lPVkrdGhpcy5fZXwwfSxD''@;'; put 'put ''LnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciB4PXMuYWxsb2NVbnNhZmUoMjApO3JldHVybiB4LndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCkseC53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLHgud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSx4LndyaXRlSW50MzJCRSgwfHRoaXMu''@;'; put 'put ''X2QsMTIpLHgud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNikseH0sZmUuZXhwb3J0cz1DfSw0MjcwOShmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDcxOTkzKSxjPWgoMzIxNDgpLHM9aCg3MDQ2MyksQT1oKDI3MDU0KS5CdWZmZXIsdj1uZXcgQXJyYXkoNjQpO2Z1bmN0aW9uIEMoKXt0''@;'; put 'put ''aGlzLmluaXQoKSx0aGlzLl93PXYscy5jYWxsKHRoaXMsNjQsNTYpfXkoQyxjKSxDLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MzIzODM3MTAzMix0aGlzLl9iPTkxNDE1MDY2Myx0aGlzLl9jPTgxMjcwMjk5OSx0aGlzLl9kPTQxNDQ5MTI2OTcsdGhpcy5fZT00''@;'; put 'put ''MjkwNzc1ODU3LHRoaXMuX2Y9MTc1MDYwMzAyNSx0aGlzLl9nPTE2OTQwNzY4MzksdGhpcy5faD0zMjA0MDc1NDI4LHRoaXN9LEMucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIHc9QS5hbGxvY1Vuc2FmZSgyOCk7cmV0dXJuIHcud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksdy53cml0''@;'; put 'put ''ZUludDMyQkUodGhpcy5fYiw0KSx3LndyaXRlSW50MzJCRSh0aGlzLl9jLDgpLHcud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLHcud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLHcud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLHcud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLHd9LGZlLmV4cG9y''@;'; put 'put ''dHM9Q30sMzIxNDgoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg3MTk5MyksYz1oKDcwNDYzKSxzPWgoMjcwNTQpLkJ1ZmZlcixBPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIy''@;'; put 'put ''MSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5''@;'; put 'put ''NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2''@;'; put 'put ''MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1''@;'; put 'put ''MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdLHY9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBDKCl7dGhpcy5pbml0KCksdGhpcy5fdz12LGMuY2Fs''@;'; put 'put ''bCh0aGlzLDY0LDU2KX1mdW5jdGlvbiB3KEgsVixOKXtyZXR1cm4gTl5IJihWXk4pfWZ1bmN0aW9uIFMoSCxWLE4pe3JldHVybiBIJlZ8TiYoSHxWKX1mdW5jdGlvbiBMKEgpe3JldHVybihIPj4+MnxIPDwzMCleKEg+Pj4xM3xIPDwxOSleKEg+Pj4yMnxIPDwxMCl9ZnVuY3Rpb24gUihIKXty''@;'; put 'put ''ZXR1cm4oSD4+PjZ8SDw8MjYpXihIPj4+MTF8SDw8MjEpXihIPj4+MjV8SDw8Nyl9ZnVuY3Rpb24geChIKXtyZXR1cm4oSD4+Pjd8SDw8MjUpXihIPj4+MTh8SDw8MTQpXkg+Pj4zfWZ1bmN0aW9uIFUoSCl7cmV0dXJuKEg+Pj4xN3xIPDwxNSleKEg+Pj4xOXxIPDwxMyleSD4+PjEwfXkoQyxj''@;'; put 'put ''KSxDLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTc3OTAzMzcwMyx0aGlzLl9iPTMxNDQxMzQyNzcsdGhpcy5fYz0xMDEzOTA0MjQyLHRoaXMuX2Q9Mjc3MzQ4MDc2Mix0aGlzLl9lPTEzNTk4OTMxMTksdGhpcy5fZj0yNjAwODIyOTI0LHRoaXMuX2c9NTI4NzM0''@;'; put 'put ''NjM1LHRoaXMuX2g9MTU0MTQ1OTIyNSx0aGlzfSxDLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEgpe2Zvcih2YXIgVj10aGlzLl93LE49MHx0aGlzLl9hLHo9MHx0aGlzLl9iLFk9MHx0aGlzLl9jLEY9MHx0aGlzLl9kLFc9MHx0aGlzLl9lLHE9MHx0aGlzLl9mLHJlPTB8dGhpcy5fZyxt''@;'; put 'put ''ZT0wfHRoaXMuX2gsQ2U9MDtDZTwxNjsrK0NlKVZbQ2VdPUgucmVhZEludDMyQkUoNCpDZSk7Zm9yKDtDZTw2NDsrK0NlKVZbQ2VdPVUoVltDZS0yXSkrVltDZS03XSt4KFZbQ2UtMTVdKStWW0NlLTE2XXwwO2Zvcih2YXIgSWU9MDtJZTw2NDsrK0llKXt2YXIga2U9bWUrUihXKSt3KFcscSxy''@;'; put 'put ''ZSkrQVtJZV0rVltJZV18MCxxZT1MKE4pK1MoTix6LFkpfDA7bWU9cmUscmU9cSxxPVcsVz1GK2tlfDAsRj1ZLFk9eix6PU4sTj1rZStxZXwwfXRoaXMuX2E9Tit0aGlzLl9hfDAsdGhpcy5fYj16K3RoaXMuX2J8MCx0aGlzLl9jPVkrdGhpcy5fY3wwLHRoaXMuX2Q9Rit0aGlzLl9kfDAsdGhp''@;'; put 'put ''cy5fZT1XK3RoaXMuX2V8MCx0aGlzLl9mPXErdGhpcy5fZnwwLHRoaXMuX2c9cmUrdGhpcy5fZ3wwLHRoaXMuX2g9bWUrdGhpcy5faHwwfSxDLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBIPXMuYWxsb2NVbnNhZmUoMzIpO3JldHVybiBILndyaXRlSW50MzJCRSh0aGlzLl9hLDAp''@;'; put 'put ''LEgud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksSC53cml0ZUludDMyQkUodGhpcy5fYyw4KSxILndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxILndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxILndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxILndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxILndy''@;'; put 'put ''aXRlSW50MzJCRSh0aGlzLl9oLDI4KSxIfSxmZS5leHBvcnRzPUN9LDUxODU2KGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNzE5OTMpLGM9aCgzMTIxKSxzPWgoNzA0NjMpLEE9aCgyNzA1NCkuQnVmZmVyLHY9bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gQygpe3RoaXMuaW5pdCgpLHRo''@;'; put 'put ''aXMuX3c9dixzLmNhbGwodGhpcywxMjgsMTEyKX15KEMsYyksQy5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0zNDE4MDcwMzY1LHRoaXMuX2JoPTE2NTQyNzAyNTAsdGhpcy5fY2g9MjQzODUyOTM3MCx0aGlzLl9kaD0zNTU0NjIzNjAsdGhpcy5fZWg9MTczMTQw''@;'; put 'put ''NTQxNSx0aGlzLl9maD0yMzk0MTgwMjMxLHRoaXMuX2doPTM2NzUwMDg1MjUsdGhpcy5faGg9MTIwMzA2MjgxMyx0aGlzLl9hbD0zMjM4MzcxMDMyLHRoaXMuX2JsPTkxNDE1MDY2Myx0aGlzLl9jbD04MTI3MDI5OTksdGhpcy5fZGw9NDE0NDkxMjY5Nyx0aGlzLl9lbD00MjkwNzc1ODU3LHRo''@;'; put 'put ''aXMuX2ZsPTE3NTA2MDMwMjUsdGhpcy5fZ2w9MTY5NDA3NjgzOSx0aGlzLl9obD0zMjA0MDc1NDI4LHRoaXN9LEMucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIHc9QS5hbGxvY1Vuc2FmZSg0OCk7ZnVuY3Rpb24gUyhMLFIseCl7dy53cml0ZUludDMyQkUoTCx4KSx3LndyaXRlSW50''@;'; put 'put ''MzJCRShSLHgrNCl9cmV0dXJuIFModGhpcy5fYWgsdGhpcy5fYWwsMCksUyh0aGlzLl9iaCx0aGlzLl9ibCw4KSxTKHRoaXMuX2NoLHRoaXMuX2NsLDE2KSxTKHRoaXMuX2RoLHRoaXMuX2RsLDI0KSxTKHRoaXMuX2VoLHRoaXMuX2VsLDMyKSxTKHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSx3fSxm''@;'; put 'put ''ZS5leHBvcnRzPUN9LDMxMjEoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg3MTk5MyksYz1oKDcwNDYzKSxzPWgoMjcwNTQpLkJ1ZmZlcixBPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3''@;'; put 'put ''MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4''@;'; put 'put ''MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzcz''@;'; put 'put ''LDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1''@;'; put 'put ''NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3''@;'; put 'put ''MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQy''@;'; put 'put ''NzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEz''@;'; put 'put ''NjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQx''@;'; put 'put ''MDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4Mzgz''@;'; put 'put ''OTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3''@;'; put 'put ''NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV0sdj1uZXcg''@;'; put 'put ''QXJyYXkoMTYwKTtmdW5jdGlvbiBDKCl7dGhpcy5pbml0KCksdGhpcy5fdz12LGMuY2FsbCh0aGlzLDEyOCwxMTIpfWZ1bmN0aW9uIHcoeixZLEYpe3JldHVybiBGXnomKFleRil9ZnVuY3Rpb24gUyh6LFksRil7cmV0dXJuIHomWXxGJih6fFkpfWZ1bmN0aW9uIEwoeixZKXtyZXR1cm4oej4+''@;'; put 'put ''PjI4fFk8PDQpXihZPj4+Mnx6PDwzMCleKFk+Pj43fHo8PDI1KX1mdW5jdGlvbiBSKHosWSl7cmV0dXJuKHo+Pj4xNHxZPDwxOCleKHo+Pj4xOHxZPDwxNCleKFk+Pj45fHo8PDIzKX1mdW5jdGlvbiB4KHosWSl7cmV0dXJuKHo+Pj4xfFk8PDMxKV4oej4+Pjh8WTw8MjQpXno+Pj43fWZ1bmN0''@;'; put 'put ''aW9uIFUoeixZKXtyZXR1cm4oej4+PjF8WTw8MzEpXih6Pj4+OHxZPDwyNCleKHo+Pj43fFk8PDI1KX1mdW5jdGlvbiBIKHosWSl7cmV0dXJuKHo+Pj4xOXxZPDwxMyleKFk+Pj4yOXx6PDwzKV56Pj4+Nn1mdW5jdGlvbiBWKHosWSl7cmV0dXJuKHo+Pj4xOXxZPDwxMyleKFk+Pj4yOXx6PDwz''@;'; put 'put ''KV4oej4+PjZ8WTw8MjYpfWZ1bmN0aW9uIE4oeixZKXtyZXR1cm4gej4+PjA8WT4+PjA/MTowfXkoQyxjKSxDLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTE3NzkwMzM3MDMsdGhpcy5fYmg9MzE0NDEzNDI3Nyx0aGlzLl9jaD0xMDEzOTA0MjQyLHRoaXMuX2Ro''@;'; put 'put ''PTI3NzM0ODA3NjIsdGhpcy5fZWg9MTM1OTg5MzExOSx0aGlzLl9maD0yNjAwODIyOTI0LHRoaXMuX2doPTUyODczNDYzNSx0aGlzLl9oaD0xNTQxNDU5MjI1LHRoaXMuX2FsPTQwODkyMzU3MjAsdGhpcy5fYmw9MjIyNzg3MzU5NSx0aGlzLl9jbD00MjcxMTc1NzIzLHRoaXMuX2RsPTE1OTU3''@;'; put 'put ''NTAxMjksdGhpcy5fZWw9MjkxNzU2NTEzNyx0aGlzLl9mbD03MjU1MTExOTksdGhpcy5fZ2w9NDIxNTM4OTU0Nyx0aGlzLl9obD0zMjcwMzMyMDksdGhpc30sQy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih6KXtmb3IodmFyIFk9dGhpcy5fdyxGPTB8dGhpcy5fYWgsVz0wfHRoaXMuX2Jo''@;'; put 'put ''LHE9MHx0aGlzLl9jaCxyZT0wfHRoaXMuX2RoLG1lPTB8dGhpcy5fZWgsQ2U9MHx0aGlzLl9maCxJZT0wfHRoaXMuX2doLGtlPTB8dGhpcy5faGgscWU9MHx0aGlzLl9hbCxYPTB8dGhpcy5fYmwsZj0wfHRoaXMuX2NsLGI9MHx0aGlzLl9kbCxrPTB8dGhpcy5fZWwsTT0wfHRoaXMuX2ZsLEI9''@;'; put 'put ''MHx0aGlzLl9nbCxLPTB8dGhpcy5faGwsRz0wO0c8MzI7Rys9MilZW0ddPXoucmVhZEludDMyQkUoNCpHKSxZW0crMV09ei5yZWFkSW50MzJCRSg0KkcrNCk7Zm9yKDtHPDE2MDtHKz0yKXt2YXIgRD1ZW0ctMzBdLHA9WVtHLTMwKzFdLEk9eChELHApLHVlPVUocCxEKSxuZT1IKEQ9WVtHLTRd''@;'; put 'put ''LHA9WVtHLTQrMV0pLF9lPVYocCxEKSxsdD1ZW0ctMzJdLGR0PVlbRy0zMisxXSxSZT11ZStZW0ctMTQrMV18MCxhZT1JK1lbRy0xNF0rTihSZSx1ZSl8MDthZT0oYWU9YWUrbmUrTihSZT1SZStfZXwwLF9lKXwwKStsdCtOKFJlPVJlK2R0fDAsZHQpfDAsWVtHXT1hZSxZW0crMV09UmV9Zm9y''@;'; put 'put ''KHZhciB4ZT0wO3hlPDE2MDt4ZSs9Mil7YWU9WVt4ZV0sUmU9WVt4ZSsxXTt2YXIgamU9UyhGLFcscSksQWU9UyhxZSxYLGYpLERlPUwoRixxZSksRmU9TChxZSxGKSxnZT1SKG1lLGspLGNlPVIoayxtZSksaGU9QVt4ZV0sd2U9QVt4ZSsxXSxKZT13KG1lLENlLEllKSx0dD13KGssTSxCKSxL''@;'; put 'put ''ZT1LK2NlfDAsJHQ9a2UrZ2UrTihLZSxLKXwwOyR0PSgkdD0oJHQ9JHQrSmUrTihLZT1LZSt0dHwwLHR0KXwwKStoZStOKEtlPUtlK3dlfDAsd2UpfDApK2FlK04oS2U9S2UrUmV8MCxSZSl8MDt2YXIgUnQ9RmUrQWV8MCxMdD1EZStqZStOKFJ0LEZlKXwwO2tlPUllLEs9QixJZT1DZSxCPU0s''@;'; put 'put ''Q2U9bWUsTT1rLG1lPXJlKyR0K04oaz1iK0tlfDAsYil8MCxyZT1xLGI9ZixxPVcsZj1YLFc9RixYPXFlLEY9JHQrTHQrTihxZT1LZStSdHwwLEtlKXwwfXRoaXMuX2FsPXRoaXMuX2FsK3FlfDAsdGhpcy5fYmw9dGhpcy5fYmwrWHwwLHRoaXMuX2NsPXRoaXMuX2NsK2Z8MCx0aGlzLl9kbD10''@;'; put 'put ''aGlzLl9kbCtifDAsdGhpcy5fZWw9dGhpcy5fZWwra3wwLHRoaXMuX2ZsPXRoaXMuX2ZsK018MCx0aGlzLl9nbD10aGlzLl9nbCtCfDAsdGhpcy5faGw9dGhpcy5faGwrS3wwLHRoaXMuX2FoPXRoaXMuX2FoK0YrTih0aGlzLl9hbCxxZSl8MCx0aGlzLl9iaD10aGlzLl9iaCtXK04odGhpcy5f''@;'; put 'put ''YmwsWCl8MCx0aGlzLl9jaD10aGlzLl9jaCtxK04odGhpcy5fY2wsZil8MCx0aGlzLl9kaD10aGlzLl9kaCtyZStOKHRoaXMuX2RsLGIpfDAsdGhpcy5fZWg9dGhpcy5fZWgrbWUrTih0aGlzLl9lbCxrKXwwLHRoaXMuX2ZoPXRoaXMuX2ZoK0NlK04odGhpcy5fZmwsTSl8MCx0aGlzLl9naD10''@;'; put 'put ''aGlzLl9naCtJZStOKHRoaXMuX2dsLEIpfDAsdGhpcy5faGg9dGhpcy5faGgra2UrTih0aGlzLl9obCxLKXwwfSxDLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciB6PXMuYWxsb2NVbnNhZmUoNjQpO2Z1bmN0aW9uIFkoRixXLHEpe3oud3JpdGVJbnQzMkJFKEYscSksei53cml0ZUlu''@;'; put 'put ''dDMyQkUoVyxxKzQpfXJldHVybiBZKHRoaXMuX2FoLHRoaXMuX2FsLDApLFkodGhpcy5fYmgsdGhpcy5fYmwsOCksWSh0aGlzLl9jaCx0aGlzLl9jbCwxNiksWSh0aGlzLl9kaCx0aGlzLl9kbCwyNCksWSh0aGlzLl9laCx0aGlzLl9lbCwzMiksWSh0aGlzLl9maCx0aGlzLl9mbCw0MCksWSh0''@;'; put 'put ''aGlzLl9naCx0aGlzLl9nbCw0OCksWSh0aGlzLl9oaCx0aGlzLl9obCw1Niksen0sZmUuZXhwb3J0cz1DfSw3MDQ1KGZlLGosaCl7ZmUuZXhwb3J0cz1zO3ZhciB5PWgoNDQzNTYpLkV2ZW50RW1pdHRlcjtmdW5jdGlvbiBzKCl7eS5jYWxsKHRoaXMpfWgoNzE5OTMpKHMseSkscy5SZWFkYWJs''@;'; put 'put ''ZT1oKDE5NjA5KSxzLldyaXRhYmxlPWgoNDc4NDkpLHMuRHVwbGV4PWgoNzQwNzUpLHMuVHJhbnNmb3JtPWgoMjkwOSkscy5QYXNzVGhyb3VnaD1oKDE4ODIzKSxzLmZpbmlzaGVkPWgoMzMxMzkpLHMucGlwZWxpbmU9aCg5NjI0OSkscy5TdHJlYW09cyxzLnByb3RvdHlwZS5waXBlPWZ1bmN0''@;'; put 'put ''aW9uKEEsdil7dmFyIEM9dGhpcztmdW5jdGlvbiB3KFYpe0Eud3JpdGFibGUmJiExPT09QS53cml0ZShWKSYmQy5wYXVzZSYmQy5wYXVzZSgpfWZ1bmN0aW9uIFMoKXtDLnJlYWRhYmxlJiZDLnJlc3VtZSYmQy5yZXN1bWUoKX1DLm9uKCJkYXRhIix3KSxBLm9uKCJkcmFpbiIsUyksIUEuX2lz''@;'; put 'put ''U3RkaW8mJighdnx8ITEhPT12LmVuZCkmJihDLm9uKCJlbmQiLFIpLEMub24oImNsb3NlIix4KSk7dmFyIEw9ITE7ZnVuY3Rpb24gUigpe0x8fChMPSEwLEEuZW5kKCkpfWZ1bmN0aW9uIHgoKXtMfHwoTD0hMCwiZnVuY3Rpb24iPT10eXBlb2YgQS5kZXN0cm95JiZBLmRlc3Ryb3koKSl9ZnVu''@;'; put 'put ''Y3Rpb24gVShWKXtpZihIKCksMD09PXkubGlzdGVuZXJDb3VudCh0aGlzLCJlcnJvciIpKXRocm93IFZ9ZnVuY3Rpb24gSCgpe0MucmVtb3ZlTGlzdGVuZXIoImRhdGEiLHcpLEEucmVtb3ZlTGlzdGVuZXIoImRyYWluIixTKSxDLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFIpLEMucmVtb3ZlTGlz''@;'; put 'put ''dGVuZXIoImNsb3NlIix4KSxDLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsVSksQS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFUpLEMucmVtb3ZlTGlzdGVuZXIoImVuZCIsSCksQy5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLEgpLEEucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixIKX1yZXR1cm4gQy5v''@;'; put 'put ''bigiZXJyb3IiLFUpLEEub24oImVycm9yIixVKSxDLm9uKCJlbmQiLEgpLEMub24oImNsb3NlIixIKSxBLm9uKCJjbG9zZSIsSCksQS5lbWl0KCJwaXBlIixDKSxBfX0sNzg0NTQoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCgyNzA1NCkuQnVmZmVyLGM9eS5pc0VuY29kaW5nfHxmdW5j''@;'; put 'put ''dGlvbihGKXtzd2l0Y2goKEY9IiIrRikmJkYudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6''@;'; put 'put ''Y2FzZSJyYXciOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtmdW5jdGlvbiB2KEYpe3ZhciBXO3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uIEEoRil7dmFyIFc9ZnVuY3Rpb24gcyhGKXtpZighRilyZXR1cm4idXRmOCI7Zm9yKHZhciBXOzspc3dpdGNoKEYpe2Nhc2UidXRmOCI6''@;'; put 'put ''Y2FzZSJ1dGYtOCI6cmV0dXJuInV0ZjgiO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4idXRmMTZsZSI7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4ibGF0aW4xIjtjYXNlImJhc2U2NCI6Y2FzZSJhc2NpaSI6Y2FzZSJo''@;'; put 'put ''ZXgiOnJldHVybiBGO2RlZmF1bHQ6aWYoVylyZXR1cm47Rj0oIiIrRikudG9Mb3dlckNhc2UoKSxXPSEwfX0oRik7aWYoInN0cmluZyIhPXR5cGVvZiBXJiYoeS5pc0VuY29kaW5nPT09Y3x8IWMoRikpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitGKTtyZXR1cm4gV3x8''@;'; put 'put ''Rn0oRiksdGhpcy5lbmNvZGluZyl7Y2FzZSJ1dGYxNmxlIjp0aGlzLnRleHQ9VSx0aGlzLmVuZD1ILFc9NDticmVhaztjYXNlInV0ZjgiOnRoaXMuZmlsbExhc3Q9TCxXPTQ7YnJlYWs7Y2FzZSJiYXNlNjQiOnRoaXMudGV4dD1WLHRoaXMuZW5kPU4sVz0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJu''@;'; put 'put ''IHRoaXMud3JpdGU9eix2b2lkKHRoaXMuZW5kPVkpfXRoaXMubGFzdE5lZWQ9MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9eS5hbGxvY1Vuc2FmZShXKX1mdW5jdGlvbiBDKEYpe3JldHVybiBGPD0xMjc/MDpGPj41PT02PzI6Rj4+ND09MTQ/MzpGPj4zPT0zMD80OkY+PjY9PTI/''@;'; put 'put ''LTE6LTJ9ZnVuY3Rpb24gTChGKXt2YXIgVz10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLHE9ZnVuY3Rpb24gUyhGLFcpe2lmKDEyOCE9KDE5MiZXWzBdKSlyZXR1cm4gRi5sYXN0TmVlZD0wLCJcdWZmZmQiO2lmKEYubGFzdE5lZWQ+MSYmVy5sZW5ndGg+MSl7aWYoMTI4IT0oMTkyJldb''@;'; put 'put ''MV0pKXJldHVybiBGLmxhc3ROZWVkPTEsIlx1ZmZmZCI7aWYoRi5sYXN0TmVlZD4yJiZXLmxlbmd0aD4yJiYxMjghPSgxOTImV1syXSkpcmV0dXJuIEYubGFzdE5lZWQ9MiwiXHVmZmZkIn19KHRoaXMsRik7cmV0dXJuIHZvaWQgMCE9PXE/cTp0aGlzLmxhc3ROZWVkPD1GLmxlbmd0aD8oRi5j''@;'; put 'put ''b3B5KHRoaXMubGFzdENoYXIsVywwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKSk6KEYuY29weSh0aGlzLmxhc3RDaGFyLFcsMCxGLmxlbmd0aCksdm9pZCh0aGlzLmxhc3ROZWVkLT1GLmxlbmd0aCkpfWZ1bmN0''@;'; put 'put ''aW9uIFUoRixXKXtpZigoRi5sZW5ndGgtVyklMj09MCl7dmFyIHE9Ri50b1N0cmluZygidXRmMTZsZSIsVyk7aWYocSl7dmFyIHJlPXEuY2hhckNvZGVBdChxLmxlbmd0aC0xKTtpZihyZT49NTUyOTYmJnJlPD01NjMxOSlyZXR1cm4gdGhpcy5sYXN0TmVlZD0yLHRoaXMubGFzdFRvdGFsPTQs''@;'; put 'put ''dGhpcy5sYXN0Q2hhclswXT1GW0YubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09RltGLmxlbmd0aC0xXSxxLnNsaWNlKDAsLTEpfXJldHVybiBxfXJldHVybiB0aGlzLmxhc3ROZWVkPTEsdGhpcy5sYXN0VG90YWw9Mix0aGlzLmxhc3RDaGFyWzBdPUZbRi5sZW5ndGgtMV0sRi50b1N0cmlu''@;'; put 'put ''ZygidXRmMTZsZSIsVyxGLmxlbmd0aC0xKX1mdW5jdGlvbiBIKEYpe3ZhciBXPUYmJkYubGVuZ3RoP3RoaXMud3JpdGUoRik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/Vyt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJ1dGYxNmxlIiwwLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQpOld9''@;'; put 'put ''ZnVuY3Rpb24gVihGLFcpe3ZhciBxPShGLmxlbmd0aC1XKSUzO3JldHVybiAwPT09cT9GLnRvU3RyaW5nKCJiYXNlNjQiLFcpOih0aGlzLmxhc3ROZWVkPTMtcSx0aGlzLmxhc3RUb3RhbD0zLDE9PT1xP3RoaXMubGFzdENoYXJbMF09RltGLmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT1G''@;'; put 'put ''W0YubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09RltGLmxlbmd0aC0xXSksRi50b1N0cmluZygiYmFzZTY0IixXLEYubGVuZ3RoLXEpKX1mdW5jdGlvbiBOKEYpe3ZhciBXPUYmJkYubGVuZ3RoP3RoaXMud3JpdGUoRik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/Vyt0aGlzLmxhc3RDaGFy''@;'; put 'put ''LnRvU3RyaW5nKCJiYXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTpXfWZ1bmN0aW9uIHooRil7cmV0dXJuIEYudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gWShGKXtyZXR1cm4gRiYmRi5sZW5ndGg/dGhpcy53cml0ZShGKToiIn1qLkk9dix2LnByb3RvdHlwZS53cml0ZT1mdW5j''@;'; put 'put ''dGlvbihGKXtpZigwPT09Ri5sZW5ndGgpcmV0dXJuIiI7dmFyIFcscTtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0oVz10aGlzLmZpbGxMYXN0KEYpKSlyZXR1cm4iIjtxPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2UgcT0wO3JldHVybiBxPEYubGVuZ3RoP1c/Vyt0''@;'; put 'put ''aGlzLnRleHQoRixxKTp0aGlzLnRleHQoRixxKTpXfHwiIn0sdi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uIHgoRil7dmFyIFc9RiYmRi5sZW5ndGg/dGhpcy53cml0ZShGKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9XKyJcdWZmZmQiOld9LHYucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24gUihG''@;'; put 'put ''LFcpe3ZhciBxPWZ1bmN0aW9uIHcoRixXLHEpe3ZhciByZT1XLmxlbmd0aC0xO2lmKHJlPHEpcmV0dXJuIDA7dmFyIG1lPUMoV1tyZV0pO3JldHVybiBtZT49MD8obWU+MCYmKEYubGFzdE5lZWQ9bWUtMSksbWUpOi0tcmU8cXx8LTI9PT1tZT8wOihtZT1DKFdbcmVdKSk+PTA/KG1lPjAmJihG''@;'; put 'put ''Lmxhc3ROZWVkPW1lLTIpLG1lKTotLXJlPHF8fC0yPT09bWU/MDoobWU9QyhXW3JlXSkpPj0wPyhtZT4wJiYoMj09PW1lP21lPTA6Ri5sYXN0TmVlZD1tZS0zKSxtZSk6MH0odGhpcyxGLFcpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVybiBGLnRvU3RyaW5nKCJ1dGY4IixXKTt0aGlzLmxhc3RU''@;'; put 'put ''b3RhbD1xO3ZhciByZT1GLmxlbmd0aC0ocS10aGlzLmxhc3ROZWVkKTtyZXR1cm4gRi5jb3B5KHRoaXMubGFzdENoYXIsMCxyZSksRi50b1N0cmluZygidXRmOCIsVyxyZSl9LHYucHJvdG90eXBlLmZpbGxMYXN0PWZ1bmN0aW9uKEYpe2lmKHRoaXMubGFzdE5lZWQ8PUYubGVuZ3RoKXJldHVy''@;'; put 'put ''biBGLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpO0YuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMu''@;'; put 'put ''bGFzdE5lZWQsMCxGLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09Ri5sZW5ndGh9fSw3ODc1NShmZSxqLGgpe3ZhciB5PWgoNjQzMTgpO2ZlLmV4cG9ydHM9e1RleHRFbmNvZGVyOnkuVGV4dEVuY29kZXIsVGV4dERlY29kZXI6eS5UZXh0RGVjb2Rlcn19LDY3OTUxKGZlKXshZnVuY3Rpb24oail7''@;'; put 'put ''InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHMmJihmZS5leHBvcnRzPWopLGpbImVuY29kaW5nLWluZGV4ZXMiXT17YmlnNTpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTczOTIs''@;'; put 'put ''MTk1MDYsMTc5MjMsMTc4MzAsMTc3ODQsMTYwMzU5LDE5ODMxLDE3ODQzLDE2Mjk5MywxOTY4MiwxNjMwMTMsMTUyNTMsMTgyMzAsMTgyNDQsMTk1MjcsMTk1MjAsMTQ4MTU5LDE0NDkxOSwxNjA1OTQsMTU5MzcxLDE1OTk1NCwxOTU0MywxNzI4ODEsMTgyNTUsMTc4ODIsMTk1ODksMTYyOTI0''@;'; put 'put ''LDE5NzE5LDE5MTA4LDE4MDgxLDE1ODQ5OSwyOTIyMSwxNTQxOTYsMTM3ODI3LDE0Njk1MCwxNDcyOTcsMjYxODksMjIyNjcsbnVsbCwzMjE0OSwyMjgxMywxNjY4NDEsMTU4NjAsMzg3MDgsMTYyNzk5LDIzNTE1LDEzODU5MCwyMzIwNCwxMzg2MSwxNzE2OTYsMjMyNDksMjM0NzksMjM4MDQs''@;'; put 'put ''MjY0NzgsMzQxOTUsMTcwMzA5LDI5NzkzLDI5ODUzLDE0NDUzLDEzODU3OSwxNDUwNTQsMTU1NjgxLDE2MTA4LDE1MzgyMiwxNTA5MywzMTQ4NCw0MDg1NSwxNDc4MDksMTY2MTU3LDE0Mzg1MCwxMzM3NzAsMTQzOTY2LDE3MTYyLDMzOTI0LDQwODU0LDM3OTM1LDE4NzM2LDM0MzIzLDIyNjc4''@;'; put 'put ''LDM4NzMwLDM3NDAwLDMxMTg0LDMxMjgyLDI2MjA4LDI3MTc3LDM0OTczLDI5NzcyLDMxNjg1LDI2NDk4LDMxMjc2LDIxMDcxLDM2OTM0LDEzNTQyLDI5NjM2LDE1NTA2NSwyOTg5NCw0MDkwMywyMjQ1MSwxODczNSwyMTU4MCwxNjY4OSwxNDUwMzgsMjI1NTIsMzEzNDYsMTYyNjYxLDM1NzI3''@;'; put 'put ''LDE4MDk0LDE1OTM2OCwxNjc2OSwxNTUwMzMsMzE2NjIsMTQwNDc2LDQwOTA0LDE0MDQ4MSwxNDA0ODksMTQwNDkyLDQwOTA1LDM0MDUyLDE0NDgyNywxNjU2NCw0MDkwNiwxNzYzMywxNzU2MTUsMjUyODEsMjg3ODIsNDA5MDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMjczNiwxMjczNywxMjczOCwxMjczOSwxMjc0MCwxMzEzNDAsMTI3NDEsMTMx''@;'; put 'put ''MjgxLDEzMTI3NywxMjc0MiwxMjc0MywxMzEyNzUsMTM5MjQwLDEyNzQ0LDEzMTI3NCwxMjc0NSwxMjc0NiwxMjc0NywxMjc0OCwxMzEzNDIsMTI3NDksMTI3NTAsMjU2LDE5Myw0NjEsMTkyLDI3NCwyMDEsMjgyLDIwMCwzMzIsMjExLDQ2NSwyMTAsbnVsbCw3ODcwLG51bGwsNzg3MiwyMDIs''@;'; put 'put ''MjU3LDIyNSw0NjIsMjI0LDU5MywyNzUsMjMzLDI4MywyMzIsMjk5LDIzNyw0NjQsMjM2LDMzMywyNDMsNDY2LDI0MiwzNjMsMjUwLDQ2OCwyNDksNDcwLDQ3Miw0NzQsNDc2LDI1MixudWxsLDc4NzEsbnVsbCw3ODczLDIzNCw2MDksOTE3OCw5MTc5LG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE3Mjk2OSwxMzU0OTMsbnVsbCwyNTg2NixudWxsLG51bGwsMjAwMjksMjgzODEsNDAyNzAsMzczNDMsbnVsbCxudWxsLDE2MTU4OSwyNTc0NSwyMDI1MCwyMDI2NCwyMDM5''@;'; put 'put ''MiwyMDgyMiwyMDg1MiwyMDg5MiwyMDk2NCwyMTE1MywyMTE2MCwyMTMwNywyMTMyNiwyMTQ1NywyMTQ2NCwyMjI0MiwyMjc2OCwyMjc4OCwyMjc5MSwyMjgzNCwyMjgzNiwyMzM5OCwyMzQ1NCwyMzQ1NSwyMzcwNiwyNDE5OCwyNDYzNSwyNTk5MywyNjYyMiwyNjYyOCwyNjcyNSwyNzk4Miwy''@;'; put 'put ''ODg2MCwzMDAwNSwzMjQyMCwzMjQyOCwzMjQ0MiwzMjQ1NSwzMjQ2MywzMjQ3OSwzMjUxOCwzMjU2NywzMzQwMiwzMzQ4NywzMzY0NywzNTI3MCwzNTc3NCwzNTgxMCwzNjcxMCwzNjcxMSwzNjcxOCwyOTcxMywzMTk5NiwzMjIwNSwyNjk1MCwzMTQzMywyMTAzMSxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDM3MjYwLDMwOTA0LDM3MjE0LDMyOTU2LG51bGwsMzYxMDcsMzMwMTQsMTMzNjA3LG51bGwsbnVsbCwzMjkyNyw0MDY0NywxOTY2MSw0MDM5Myw0MDQ2MCwxOTUxOCwxNzE1MTAsMTU5NzU4LDQwNDU4LDE3MjMzOSwxMzc2MSxudWxsLDI4MzE0LDMzMzQyLDI5OTc3LG51bGwsMTg3MDUs''@;'; put 'put ''Mzk1MzIsMzk1NjcsNDA4NTcsMzExMTEsMTY0OTcyLDEzODY5OCwxMzI1NjAsMTQyMDU0LDIwMDA0LDIwMDk3LDIwMDk2LDIwMTAzLDIwMTU5LDIwMjAzLDIwMjc5LDEzMzg4LDIwNDEzLDE1OTQ0LDIwNDgzLDIwNjE2LDEzNDM3LDEzNDU5LDEzNDc3LDIwODcwLDIyNzg5LDIwOTU1LDIwOTg4''@;'; put 'put ''LDIwOTk3LDIwMTA1LDIxMTEzLDIxMTM2LDIxMjg3LDEzNzY3LDIxNDE3LDEzNjQ5LDIxNDI0LDEzNjUxLDIxNDQyLDIxNTM5LDEzNjc3LDEzNjgyLDEzOTUzLDIxNjUxLDIxNjY3LDIxNjg0LDIxNjg5LDIxNzEyLDIxNzQzLDIxNzg0LDIxNzk1LDIxODAwLDEzNzIwLDIxODIzLDEzNzMzLDEz''@;'; put 'put ''NzU5LDIxOTc1LDEzNzY1LDE2MzIwNCwyMTc5NyxudWxsLDEzNDIxMCwxMzQ0MjEsMTUxODUxLDIxOTA0LDE0MjUzNCwxNDgyOCwxMzE5MDUsMzY0MjIsMTUwOTY4LDE2OTE4OSwxNjQ2NywxNjQwMzAsMzA1ODYsMTQyMzkyLDE0OTAwLDE4Mzg5LDE2NDE4OSwxNTgxOTQsMTUxMDE4LDI1ODIx''@;'; put 'put ''LDEzNDUyNCwxMzUwOTIsMTM0MzU3LDEzNTQxMiwyNTc0MSwzNjQ3OCwxMzQ4MDYsMTM0MTU1LDEzNTAxMiwxNDI1MDUsMTY0NDM4LDE0ODY5MSxudWxsLDEzNDQ3MCwxNzA1NzMsMTY0MDczLDE4NDIwLDE1MTIwNywxNDI1MzAsMzk2MDIsMTQ5NTEsMTY5NDYwLDE2MzY1LDEzNTc0LDE1MjI2''@;'; put 'put ''MywxNjk5NDAsMTYxOTkyLDE0MjY2MCw0MDMwMiwzODkzMyxudWxsLDE3MzY5LDE1NTgxMywyNTc4MCwyMTczMSwxNDI2NjgsMTQyMjgyLDEzNTI4NywxNDg0MywxMzUyNzksMTU3NDAyLDE1NzQ2MiwxNjIyMDgsMjU4MzQsMTUxNjM0LDEzNDIxMSwzNjQ1NiwxMzk2ODEsMTY2NzMyLDEzMjkx''@;'; put 'put ''MyxudWxsLDE4NDQzLDEzMTQ5NywxNjM3OCwyMjY0MywxNDI3MzMsbnVsbCwxNDg5MzYsMTMyMzQ4LDE1NTc5OSwxMzQ5ODgsMTM0NTUwLDIxODgxLDE2NTcxLDE3MzM4LG51bGwsMTkxMjQsMTQxOTI2LDEzNTMyNSwzMzE5NCwzOTE1NywxMzQ1NTYsMjU0NjUsMTQ4NDYsMTQxMTczLDM2Mjg4''@;'; put 'put ''LDIyMTc3LDI1NzI0LDE1OTM5LG51bGwsMTczNTY5LDEzNDY2NSwxNDIwMzEsMTQyNTM3LG51bGwsMTM1MzY4LDE0NTg1OCwxNDczOCwxNDg1NCwxNjQ1MDcsMTM2ODgsMTU1MjA5LDEzOTQ2MywyMjA5OCwxMzQ5NjEsMTQyNTE0LDE2OTc2MCwxMzUwMCwyNzcwOSwxNTEwOTksbnVsbCxudWxs''@;'; put 'put ''LDE2MTE0MCwxNDI5ODcsMTM5Nzg0LDE3MzY1OSwxNjcxMTcsMTM0Nzc4LDEzNDE5NiwxNTc3MjQsMzI2NTksMTM1Mzc1LDE0MTMxNSwxNDE2MjUsMTM4MTksMTUyMDM1LDEzNDc5NiwxMzUwNTMsMTM0ODI2LDE2Mjc1LDEzNDk2MCwxMzQ0NzEsMTM1NTAzLDEzNDczMixudWxsLDEzNDgyNywx''@;'; put 'put ''MzQwNTcsMTM0NDcyLDEzNTM2MCwxMzU0ODUsMTYzNzcsMTQwOTUwLDI1NjUwLDEzNTA4NSwxNDQzNzIsMTYxMzM3LDE0MjI4NiwxMzQ1MjYsMTM0NTI3LDE0MjQxNywxNDI0MjEsMTQ4NzIsMTM0ODA4LDEzNTM2NywxMzQ5NTgsMTczNjE4LDE1ODU0NCwxNjcxMjIsMTY3MzIxLDE2NzExNCwz''@;'; put 'put ''ODMxNCwyMTcwOCwzMzQ3NiwyMTk0NSxudWxsLDE3MTcxNSwzOTk3NCwzOTYwNiwxNjE2MzAsMTQyODMwLDI4OTkyLDMzMTMzLDMzMDA0LDIzNTgwLDE1NzA0MiwzMzA3NiwxNDIzMSwyMTM0MywxNjQwMjksMzczMDIsMTM0OTA2LDEzNDY3MSwxMzQ3NzUsMTM0OTA3LDEzNzg5LDE1MTAxOSwx''@;'; put 'put ''MzgzMywxMzQzNTgsMjIxOTEsMTQxMjM3LDEzNTM2OSwxMzQ2NzIsMTM0Nzc2LDEzNTI4OCwxMzU0OTYsMTY0MzU5LDEzNjI3NywxMzQ3NzcsMTUxMTIwLDE0Mjc1NiwyMzEyNCwxMzUxOTcsMTM1MTk4LDEzNTQxMywxMzU0MTQsMjI0MjgsMTM0NjczLDE2MTQyOCwxNjQ1NTcsMTM1MDkzLDEz''@;'; put 'put ''NDc3OSwxNTE5MzQsMTQwODMsMTM1MDk0LDEzNTU1MiwxNTIyODAsMTcyNzMzLDE0OTk3OCwxMzcyNzQsMTQ3ODMxLDE2NDQ3NiwyMjY4MSwyMTA5NiwxMzg1MCwxNTM0MDUsMzE2NjYsMjM0MDAsMTg0MzIsMTkyNDQsNDA3NDMsMTg5MTksMzk5NjcsMzk4MjEsMTU0NDg0LDE0MzY3NywyMjAx''@;'; put 'put ''MSwxMzgxMCwyMjE1MywyMDAwOCwyMjc4NiwxMzgxNzcsMTk0NjgwLDM4NzM3LDEzMTIwNiwyMDA1OSwyMDE1NSwxMzYzMCwyMzU4NywyNDQwMSwyNDUxNiwxNDU4NiwyNTE2NCwyNTkwOSwyNzUxNCwyNzcwMSwyNzcwNiwyODc4MCwyOTIyNywyMDAxMiwyOTM1NywxNDk3MzcsMzI1OTQsMzEw''@;'; put 'put ''MzUsMzE5OTMsMzI1OTUsMTU2MjY2LDEzNTA1LG51bGwsMTU2NDkxLDMyNzcwLDMyODk2LDE1NzIwMiwxNTgwMzMsMjEzNDEsMzQ5MTYsMzUyNjUsMTYxOTcwLDM1NzQ0LDM2MTI1LDM4MDIxLDM4MjY0LDM4MjcxLDM4Mzc2LDE2NzQzOSwzODg4NiwzOTAyOSwzOTExOCwzOTEzNCwzOTI2Nywx''@;'; put 'put ''N2U0LDQwMDYwLDQwNDc5LDQwNjQ0LDI3NTAzLDYzNzUxLDIwMDIzLDEzMTIwNywzODQyOSwyNTE0MywzODA1MCxudWxsLDIwNTM5LDI4MTU4LDE3MTEyMyw0MDg3MCwxNTgxNywzNDk1OSwxNDc3OTAsMjg3OTEsMjM3OTcsMTkyMzIsMTUyMDEzLDEzNjU3LDE1NDkyOCwyNDg2NiwxNjY0NTAs''@;'; put 'put ''MzY3NzUsMzczNjYsMjkwNzMsMjYzOTMsMjk2MjYsMTQ0MDAxLDE3MjI5NSwxNTQ5OSwxMzc2MDAsMTkyMTYsMzA5NDgsMjk2OTgsMjA5MTAsMTY1NjQ3LDE2MzkzLDI3MjM1LDE3MjczMCwxNjkzMSwzNDMxOSwxMzM3NDMsMzEyNzQsMTcwMzExLDE2NjYzNCwzODc0MSwyODc0OSwyMTI4NCwx''@;'; put 'put ''MzkzOTAsMzc4NzYsMzA0MjUsMTY2MzcxLDQwODcxLDMwNjg1LDIwMTMxLDIwNDY0LDIwNjY4LDIwMDE1LDIwMjQ3LDQwODcyLDIxNTU2LDMyMTM5LDIyNjc0LDIyNzM2LDEzODY3OCwyNDIxMCwyNDIxNywyNDUxNCwxNDEwNzQsMjU5OTUsMTQ0Mzc3LDI2OTA1LDI3MjAzLDE0NjUzMSwyNzkw''@;'; put 'put ''MyxudWxsLDI5MTg0LDE0ODc0MSwyOTU4MCwxNjA5MSwxNTAwMzUsMjMzMTcsMjk4ODEsMzU3MTUsMTU0Nzg4LDE1MzIzNywzMTM3OSwzMTcyNCwzMTkzOSwzMjM2NCwzMzUyOCwzNDE5OSw0MDg3MywzNDk2MCw0MDg3NCwzNjUzNyw0MDg3NSwzNjgxNSwzNDE0MywzOTM5MiwzNzQwOSw0MDg3''@;'; put 'put ''NiwxNjczNTMsMTM2MjU1LDE2NDk3LDE3MDU4LDIzMDY2LG51bGwsbnVsbCxudWxsLDM5MDE2LDI2NDc1LDE3MDE0LDIyMzMzLG51bGwsMzQyNjIsMTQ5ODgzLDMzNDcxLDE2MDAxMywxOTU4NSwxNTkwOTIsMjM5MzEsMTU4NDg1LDE1OTY3OCw0MDg3Nyw0MDg3OCwyMzQ0Niw0MDg3OSwyNjM0''@;'; put 'put ''MywzMjM0NywyODI0NywzMTE3OCwxNTc1MiwxNzYwMywxNDM5NTgsMTQxMjA2LDE3MzA2LDE3NzE4LG51bGwsMjM3NjUsMTQ2MjAyLDM1NTc3LDIzNjcyLDE1NjM0LDE0NDcyMSwyMzkyOCw0MDg4MiwyOTAxNSwxNzc1MiwxNDc2OTIsMTM4Nzg3LDE5NTc1LDE0NzEyLDEzMzg2LDEzMTQ5Miwx''@;'; put 'put ''NTg3ODUsMzU1MzIsMjA0MDQsMTMxNjQxLDIyOTc1LDMzMTMyLDM4OTk4LDE3MDIzNCwyNDM3OSwxMzQwNDcsbnVsbCwxMzk3MTMsMTY2MjUzLDE2NjQyLDE4MTA3LDE2ODA1NywxNjEzNSw0MDg4MywxNzI0NjksMTY2MzIsMTQyOTQsMTgxNjcsMTU4NzkwLDE2NzY0LDE2NTU1NCwxNjA3Njcs''@;'; put 'put ''MTc3NzMsMTQ1NDgsMTUyNzMwLDE3NzYxLDE3NjkxLDE5ODQ5LDE5NTc5LDE5ODMwLDE3ODk4LDE2MzI4LDE1MDI4NywxMzkyMSwxNzYzMCwxNzU5NywxNjg3NywyMzg3MCwyMzg4MCwyMzg5NCwxNTg2OCwxNDM1MSwyMzk3MiwyMzk5MywxNDM2OCwxNDM5MiwyNDEzMCwyNDI1MywyNDM1Nywy''@;'; put 'put ''NDQ1MSwxNDYwMCwxNDYxMiwxNDY1NSwxNDY2OSwyNDc5MSwyNDg5MywyMzc4MSwxNDcyOSwyNTAxNSwyNTAxNywyNTAzOSwxNDc3NiwyNTEzMiwyNTIzMiwyNTMxNywyNTM2OCwxNDg0MCwyMjE5MywxNDg1MSwyNTU3MCwyNTU5NSwyNTYwNywyNTY5MCwxNDkyMywyNTc5MiwyMzgyOSwyMjA0''@;'; put 'put ''OSw0MDg2MywxNDk5OSwyNTk5MCwxNTAzNywyNjExMSwyNjE5NSwxNTA5MCwyNjI1OCwxNTEzOCwyNjM5MCwxNTE3MCwyNjUzMiwyNjYyNCwxNTE5MiwyNjY5OCwyNjc1NiwxNTIxOCwxNTIxNywxNTIyNywyNjg4OSwyNjk0NywyOTI3NiwyNjk4MCwyNzAzOSwyNzAxMywxNTI5MiwyNzA5NCwx''@;'; put 'put ''NTMyNSwyNzIzNywyNzI1MiwyNzI0OSwyNzI2NiwxNTM0MCwyNzI4OSwxNTM0NiwyNzMwNywyNzMxNywyNzM0OCwyNzM4MiwyNzUyMSwyNzU4NSwyNzYyNiwyNzc2NSwyNzgxOCwxNTU2MywyNzkwNiwyNzkxMCwyNzk0MiwyODAzMywxNTU5OSwyODA2OCwyODA4MSwyODE4MSwyODE4NCwyODIw''@;'; put 'put ''MSwyODI5NCwxNjYzMzYsMjgzNDcsMjgzODYsMjgzNzgsNDA4MzEsMjgzOTIsMjgzOTMsMjg0NTIsMjg0NjgsMTU2ODYsMTQ3MjY1LDI4NTQ1LDI4NjA2LDE1NzIyLDE1NzMzLDI5MTExLDIzNzA1LDE1NzU0LDI4NzE2LDE1NzYxLDI4NzUyLDI4NzU2LDI4NzgzLDI4Nzk5LDI4ODA5LDEzMTg3''@;'; put 'put ''NywxNzM0NSwxMzgwOSwxMzQ4NzIsMTQ3MTU5LDIyNDYyLDE1OTQ0MywyODk5MCwxNTM1NjgsMTM5MDIsMjcwNDIsMTY2ODg5LDIzNDEyLDMxMzA1LDE1MzgyNSwxNjkxNzcsMzEzMzMsMzEzNTcsMTU0MDI4LDMxNDE5LDMxNDA4LDMxNDI2LDMxNDI3LDI5MTM3LDE1NjgxMywxNjg0MiwzMTQ1''@;'; put 'put ''MCwzMTQ1MywzMTQ2NiwxNjg3OSwyMTY4MiwxNTQ2MjUsMzE0OTksMzE1NzMsMzE1MjksMTUyMzM0LDE1NDg3OCwzMTY1MCwzMTU5OSwzMzY5MiwxNTQ1NDgsMTU4ODQ3LDMxNjk2LDMzODI1LDMxNjM0LDMxNjcyLDE1NDkxMiwxNTc4OSwxNTQ3MjUsMzM5MzgsMzE3MzgsMzE3NTAsMzE3OTcs''@;'; put 'put ''MTU0ODE3LDMxODEyLDMxODc1LDE0OTYzNCwzMTkxMCwyNjIzNywxNDg4NTYsMzE5NDUsMzE5NDMsMzE5NzQsMzE4NjAsMzE5ODcsMzE5ODksMzE5NTAsMzIzNTksMTc2OTMsMTU5MzAwLDMyMDkzLDE1OTQ0NiwyOTgzNywzMjEzNywzMjE3MSwyODk4MSwzMjE3OSwzMjIxMCwxNDc1NDMsMTU1''@;'; put 'put ''Njg5LDMyMjI4LDE1NjM1LDMyMjQ1LDEzNzIwOSwzMjIyOSwxNjQ3MTcsMzIyODUsMTU1OTM3LDE1NTk5NCwzMjM2NiwzMjQwMiwxNzE5NSwzNzk5NiwzMjI5NSwzMjU3NiwzMjU3NywzMjU4MywzMTAzMCwxNTYzNjgsMzkzOTMsMzI2NjMsMTU2NDk3LDMyNjc1LDEzNjgwMSwxMzExNzYsMTc3''@;'; put 'put ''NTYsMTQ1MjU0LDE3NjY3LDE2NDY2NiwzMjc2MiwxNTY4MDksMzI3NzMsMzI3NzYsMzI3OTcsMzI4MDgsMzI4MTUsMTcyMTY3LDE1ODkxNSwzMjgyNywzMjgyOCwzMjg2NSwxNDEwNzYsMTg4MjUsMTU3MjIyLDE0NjkxNSwxNTc0MTYsMjY0MDUsMzI5MzUsMTY2NDcyLDMzMDMxLDMzMDUwLDIy''@;'; put 'put ''NzA0LDE0MTA0NiwyNzc3NSwxNTY4MjQsMTUxNDgwLDI1ODMxLDEzNjMzMCwzMzMwNCwxMzczMTAsMjcyMTksMTUwMTE3LDE1MDE2NSwxNzUzMCwzMzMyMSwxMzM5MDEsMTU4MjkwLDE0NjgxNCwyMDQ3MywxMzY0NDUsMzQwMTgsMzM2MzQsMTU4NDc0LDE0OTkyNywxNDQ2ODgsMTM3MDc1LDE0''@;'; put 'put ''NjkzNiwzMzQ1MCwyNjkwNywxOTQ5NjQsMTY4NTksMzQxMjMsMzM0ODgsMzM1NjIsMTM0Njc4LDEzNzE0MCwxNDAxNywxNDM3NDEsMTQ0NzMwLDMzNDAzLDMzNTA2LDMzNTYwLDE0NzA4MywxNTkxMzksMTU4NDY5LDE1ODYxNSwxNDQ4NDYsMTU4MDcsMzM1NjUsMjE5OTYsMzM2NjksMTc2NzUs''@;'; put 'put ''MTU5MTQxLDMzNzA4LDMzNzI5LDMzNzQ3LDEzNDM4LDE1OTQ0NCwyNzIyMywzNDEzOCwxMzQ2MiwxNTkyOTgsMTQzMDg3LDMzODgwLDE1NDU5NiwzMzkwNSwxNTgyNywxNzYzNiwyNzMwMywzMzg2NiwxNDY2MTMsMzEwNjQsMzM5NjAsMTU4NjE0LDE1OTM1MSwxNTkyOTksMzQwMTQsMzM4MDcs''@;'; put 'put ''MzM2ODEsMTc1NjgsMzM5MzksMzQwMjAsMTU0NzY5LDE2OTYwLDE1NDgxNiwxNzczMSwzNDEwMCwyMzI4MiwxNTkzODUsMTc3MDMsMzQxNjMsMTc2ODYsMjY1NTksMzQzMjYsMTY1NDEzLDE2NTQzNSwzNDI0MSwxNTk4ODAsMzQzMDYsMTM2NTc4LDE1OTk0OSwxOTQ5OTQsMTc3NzAsMzQzNDQs''@;'; put 'put ''MTM4OTYsMTM3Mzc4LDIxNDk1LDE2MDY2NiwzNDQzMCwzNDY3MywxNzIyODAsMzQ3OTgsMTQyMzc1LDM0NzM3LDM0Nzc4LDM0ODMxLDIyMTEzLDM0NDEyLDI2NzEwLDE3OTM1LDM0ODg1LDM0ODg2LDE2MTI0OCwxNDY4NzMsMTYxMjUyLDM0OTEwLDM0OTcyLDE4MDExLDM0OTk2LDM0OTk3LDI1''@;'; put 'put ''NTM3LDM1MDEzLDMwNTgzLDE2MTU1MSwzNTIwNywzNTIxMCwzNTIzOCwzNTI0MSwzNTIzOSwzNTI2MCwxNjY0MzcsMzUzMDMsMTYyMDg0LDE2MjQ5MywzNTQ4NCwzMDYxMSwzNzM3NCwzNTQ3MiwxNjIzOTMsMzE0NjUsMTYyNjE4LDE0NzM0MywxODE5NSwxNjI2MTYsMjkwNTIsMzU1OTYsMzU2''@;'; put 'put ''MTUsMTUyNjI0LDE1MjkzMywzNTY0NywzNTY2MCwzNTY2MSwzNTQ5NywxNTAxMzgsMzU3MjgsMzU3MzksMzU1MDMsMTM2OTI3LDE3OTQxLDM0ODk1LDM1OTk1LDE2MzE1NiwxNjMyMTUsMTk1MDI4LDE0MTE3LDE2MzE1NSwzNjA1NCwxNjMyMjQsMTYzMjYxLDM2MTE0LDM2MDk5LDEzNzQ4OCwz''@;'; put 'put ''NjA1OSwyODc2NCwzNjExMywxNTA3MjksMTYwODAsMzYyMTUsMzYyNjUsMTYzODQyLDEzNTE4OCwxNDk4OTgsMTUyMjgsMTY0Mjg0LDE2MDAxMiwzMTQ2MywzNjUyNSwzNjUzNCwzNjU0NywzNzU4OCwzNjYzMywzNjY1MywxNjQ3MDksMTY0ODgyLDM2NzczLDM3NjM1LDE3MjcwMywxMzM3MTIs''@;'; put 'put ''MzY3ODcsMTg3MzAsMTY2MzY2LDE2NTE4MSwxNDY4NzUsMjQzMTIsMTQzOTcwLDM2ODU3LDE3MjA1MiwxNjU1NjQsMTY1MTIxLDE0MDA2OSwxNDcyMCwxNTk0NDcsMzY5MTksMTY1MTgwLDE2MjQ5NCwzNjk2MSwxNjUyMjgsMTY1Mzg3LDM3MDMyLDE2NTY1MSwzNzA2MCwxNjU2MDYsMzcwMzgs''@;'; put 'put ''MzcxMTcsMzcyMjMsMTUwODgsMzcyODksMzczMTYsMzE5MTYsMTY2MTk1LDEzODg4OSwzNzM5MCwyNzgwNywzNzQ0MSwzNzQ3NCwxNTMwMTcsMzc1NjEsMTY2NTk4LDE0NjU4NywxNjY2NjgsMTUzMDUxLDEzNDQ0OSwzNzY3NiwzNzczOSwxNjY2MjUsMTY2ODkxLDI4ODE1LDIzMjM1LDE2NjYy''@;'; put 'put ''NiwxNjY2MjksMTg3ODksMzc0NDQsMTY2ODkyLDE2Njk2OSwxNjY5MTEsMzc3NDcsMzc5NzksMzY1NDAsMzgyNzcsMzgzMTAsMzc5MjYsMzgzMDQsMjg2NjIsMTcwODEsMTQwOTIyLDE2NTU5MiwxMzU4MDQsMTQ2OTkwLDE4OTExLDI3Njc2LDM4NTIzLDM4NTUwLDE2NzQ4LDM4NTYzLDE1OTQ0''@;'; put 'put ''NSwyNTA1MCwzODU4MiwzMDk2NSwxNjY2MjQsMzg1ODksMjE0NTIsMTg4NDksMTU4OTA0LDEzMTcwMCwxNTY2ODgsMTY4MTExLDE2ODE2NSwxNTAyMjUsMTM3NDkzLDE0NDEzOCwzODcwNSwzNDM3MCwzODcxMCwxODk1OSwxNzcyNSwxNzc5NywxNTAyNDksMjg3ODksMjMzNjEsMzg2ODMsMzg3''@;'; put 'put ''NDgsMTY4NDA1LDM4NzQzLDIzMzcwLDE2ODQyNywzODc1MSwzNzkyNSwyMDY4OCwxNDM1NDMsMTQzNTQ4LDM4NzkzLDM4ODE1LDM4ODMzLDM4ODQ2LDM4ODQ4LDM4ODY2LDM4ODgwLDE1MjY4NCwzODg5NCwyOTcyNCwxNjkwMTEsMzg5MTEsMzg5MDEsMTY4OTg5LDE2MjE3MCwxOTE1MywzODk2''@;'; put 'put ''NCwzODk2MywzODk4NywzOTAxNCwxNTExOCwxNjAxMTcsMTU2OTcsMTMyNjU2LDE0NzgwNCwxNTMzNTAsMzkxMTQsMzkwOTUsMzkxMTIsMzkxMTEsMTkxOTksMTU5MDE1LDEzNjkxNSwyMTkzNiwzOTEzNywzOTE0MiwzOTE0OCwzNzc1MiwzOTIyNSwxNTAwNTcsMTkzMTQsMTcwMDcxLDE3MDI0''@;'; put 'put ''NSwzOTQxMywzOTQzNiwzOTQ4MywzOTQ0MCwzOTUxMiwxNTMzODEsMTQwMjAsMTY4MTEzLDE3MDk2NSwzOTY0OCwzOTY1MCwxNzA3NTcsMzk2NjgsMTk0NzAsMzk3MDAsMzk3MjUsMTY1Mzc2LDIwNTMyLDM5NzMyLDE1ODEyMCwxNDUzMSwxNDM0ODUsMzk3NjAsMzk3NDQsMTcxMzI2LDIzMTA5''@;'; put 'put ''LDEzNzMxNSwzOTgyMiwxNDgwNDMsMzk5MzgsMzk5MzUsMzk5NDgsMTcxNjI0LDQwNDA0LDE3MTk1OSwxNzI0MzQsMTcyNDU5LDE3MjI1NywxNzIzMjMsMTcyNTExLDQwMzE4LDQwMzIzLDE3MjM0MCw0MDQ2MiwyNjc2MCw0MDM4OCwxMzk2MTEsMTcyNDM1LDE3MjU3NiwxMzc1MzEsMTcyNTk1''@;'; put 'put ''LDQwMjQ5LDE3MjIxNywxNzI3MjQsNDA1OTIsNDA1OTcsNDA2MDYsNDA2MTAsMTk3NjQsNDA2MTgsNDA2MjMsMTQ4MzI0LDQwNjQxLDE1MjAwLDE0ODIxLDE1NjQ1LDIwMjc0LDE0MjcwLDE2Njk1NSw0MDcwNiw0MDcxMiwxOTM1MCwzNzkyNCwxNTkxMzgsNDA3MjcsNDA3MjYsNDA3NjEsMjIx''@;'; put 'put ''NzUsMjIxNTQsNDA3NzMsMzkzNTIsMTY4MDc1LDM4ODk4LDMzOTE5LDQwODAyLDQwODA5LDMxNDUyLDQwODQ2LDI5MjA2LDE5MzkwLDE0OTg3NywxNDk5NDcsMjkwNDcsMTUwMDA4LDE0ODI5NiwxNTAwOTcsMjk1OTgsMTY2ODc0LDEzNzQ2NiwzMTEzNSwxNjYyNzAsMTY3NDc4LDM3NzM3LDM3''@;'; put 'put ''ODc1LDE2NjQ2OCwzNzYxMiwzNzc2MSwzNzgzNSwxNjYyNTIsMTQ4NjY1LDI5MjA3LDE2MTA3LDMwNTc4LDMxMjk5LDI4ODgwLDE0ODU5NSwxNDg0NzIsMjkwNTQsMTM3MTk5LDI4ODM1LDEzNzQwNiwxNDQ3OTMsMTYwNzEsMTM3MzQ5LDE1MjYyMywxMzcyMDgsMTQxMTQsMTM2OTU1LDEzNzI3''@;'; put 'put ''MywxNDA0OSwxMzcwNzYsMTM3NDI1LDE1NTQ2NywxNDExNSwxMzY4OTYsMjIzNjMsMTUwMDUzLDEzNjE5MCwxMzU4NDgsMTM2MTM0LDEzNjM3NCwzNDA1MSwxNDUwNjIsMzQwNTEsMzM4NzcsMTQ5OTA4LDE2MDEwMSwxNDY5OTMsMTUyOTI0LDE0NzE5NSwxNTk4MjYsMTc2NTIsMTQ1MTM0LDE3''@;'; put 'put ''MDM5NywxNTk1MjYsMjY2MTcsMTQxMzEsMTUzODEsMTU4NDcsMjI2MzYsMTM3NTA2LDI2NjQwLDE2NDcxLDE0NTIxNSwxNDc2ODEsMTQ3NTk1LDE0NzcyNywxNTg3NTMsMjE3MDcsMjIxNzQsMTU3MzYxLDIyMTYyLDEzNTEzNSwxMzQwNTYsMTM0NjY5LDM3ODMwLDE2NjY3NSwzNzc4OCwyMDIx''@;'; put 'put ''NiwyMDc3OSwxNDM2MSwxNDg1MzQsMjAxNTYsMTMyMTk3LDEzMTk2NywyMDI5OSwyMDM2MiwxNTMxNjksMjMxNDQsMTMxNDk5LDEzMjA0MywxNDc0NSwxMzE4NTAsMTMyMTE2LDEzMzY1LDIwMjY1LDEzMTc3NiwxNjc2MDMsMTMxNzAxLDM1NTQ2LDEzMTU5NiwyMDEyMCwyMDY4NSwyMDc0OSwy''@;'; put 'put ''MDM4NiwyMDIyNywxNTAwMzAsMTQ3MDgyLDIwMjkwLDIwNTI2LDIwNTg4LDIwNjA5LDIwNDI4LDIwNDUzLDIwNTY4LDIwNzMyLDIwODI1LDIwODI3LDIwODI5LDIwODMwLDI4Mjc4LDE0NDc4OSwxNDcwMDEsMTQ3MTM1LDI4MDE4LDEzNzM0OCwxNDcwODEsMjA5MDQsMjA5MzEsMTMyNTc2LDE3''@;'; put 'put ''NjI5LDEzMjI1OSwxMzIyNDIsMTMyMjQxLDM2MjE4LDE2NjU1NiwxMzI4NzgsMjEwODEsMjExNTYsMTMzMjM1LDIxMjE3LDM3NzQyLDE4MDQyLDI5MDY4LDE0ODM2NCwxMzQxNzYsMTQ5OTMyLDEzNTM5NiwyNzA4OSwxMzQ2ODUsMjk4MTcsMTYwOTQsMjk4NDksMjk3MTYsMjk3ODIsMjk1OTIs''@;'; put 'put ''MTkzNDIsMTUwMjA0LDE0NzU5NywyMTQ1NiwxMzcwMCwyOTE5OSwxNDc2NTcsMjE5NDAsMTMxOTA5LDIxNzA5LDEzNDA4NiwyMjMwMSwzNzQ2OSwzODY0NCwzNzczNCwyMjQ5MywyMjQxMywyMjM5OSwxMzg4NiwyMjczMSwyMzE5MywxNjY0NzAsMTM2OTU0LDEzNzA3MSwxMzY5NzYsMjMwODQs''@;'; put 'put ''MjI5NjgsMzc1MTksMjMxNjYsMjMyNDcsMjMwNTgsMTUzOTI2LDEzNzcxNSwxMzczMTMsMTQ4MTE3LDE0MDY5LDI3OTA5LDI5NzYzLDIzMDczLDE1NTI2NywyMzE2OSwxNjY4NzEsMTMyMTE1LDM3ODU2LDI5ODM2LDEzNTkzOSwyODkzMywxODgwMiwzNzg5NiwxNjYzOTUsMzc4MjEsMTQyNDAs''@;'; put 'put ''MjM1ODIsMjM3MTAsMjQxNTgsMjQxMzYsMTM3NjIyLDEzNzU5NiwxNDYxNTgsMjQyNjksMjMzNzUsMTM3NDc1LDEzNzQ3NiwxNDA4MSwxMzczNzYsMTQwNDUsMTM2OTU4LDE0MDM1LDMzMDY2LDE2NjQ3MSwxMzg2ODIsMTQ0NDk4LDE2NjMxMiwyNDMzMiwyNDMzNCwxMzc1MTEsMTM3MTMxLDIz''@;'; put 'put ''MTQ3LDEzNzAxOSwyMzM2NCwzNDMyNCwxNjEyNzcsMzQ5MTIsMjQ3MDIsMTQxNDA4LDE0MDg0MywyNDUzOSwxNjA1NiwxNDA3MTksMTQwNzM0LDE2ODA3MiwxNTk2MDMsMjUwMjQsMTMxMTM0LDEzMTE0MiwxNDA4MjcsMjQ5ODUsMjQ5ODQsMjQ2OTMsMTQyNDkxLDE0MjU5OSwxNDkyMDQsMTY4''@;'; put 'put ''MjY5LDI1NzEzLDE0OTA5MywxNDIxODYsMTQ4ODksMTQyMTE0LDE0NDQ2NCwxNzAyMTgsMTQyOTY4LDI1Mzk5LDE3MzE0NywyNTc4MiwyNTM5MywyNTU1MywxNDk5ODcsMTQyNjk1LDI1MjUyLDE0MjQ5NywyNTY1OSwyNTk2MywyNjk5NCwxNTM0OCwxNDM1MDIsMTQ0MDQ1LDE0OTg5NywxNDQw''@;'; put 'put ''NDMsMjE3NzMsMTQ0MDk2LDEzNzQzMywxNjkwMjMsMjYzMTgsMTQ0MDA5LDE0Mzc5NSwxNTA3MiwxNjc4NCwxNTI5NjQsMTY2NjkwLDE1Mjk3NSwxMzY5NTYsMTUyOTIzLDE1MjYxMywzMDk1OCwxNDM2MTksMTM3MjU4LDE0MzkyNCwxMzQxMiwxNDM4ODcsMTQzNzQ2LDE0ODE2OSwyNjI1NCwx''@;'; put 'put ''NTkwMTIsMjYyMTksMTkzNDcsMjYxNjAsMTYxOTA0LDEzODczMSwyNjIxMSwxNDQwODIsMTQ0MDk3LDI2MTQyLDE1MzcxNCwxNDU0NSwxNDU0NjYsMTQ1MzQwLDE1MjU3LDE0NTMxNCwxNDQzODIsMjk5MDQsMTUyNTQsMjY1MTEsMTQ5MDM0LDI2ODA2LDI2NjU0LDE1MzAwLDI3MzI2LDE0NDM1''@;'; put 'put ''LDE0NTM2NSwxNDg2MTUsMjcxODcsMjcyMTgsMjczMzcsMjczOTcsMTM3NDkwLDI1ODczLDI2Nzc2LDI3MjEyLDE1MzE5LDI3MjU4LDI3NDc5LDE0NzM5MiwxNDY1ODYsMzc3OTIsMzc2MTgsMTY2ODkwLDE2NjYwMywzNzUxMywxNjM4NzAsMTY2MzY0LDM3OTkxLDI4MDY5LDI4NDI3LDE0OTk5''@;'; put 'put ''NiwyODAwNywxNDczMjcsMTU3NTksMjgxNjQsMTQ3NTE2LDIzMTAxLDI4MTcwLDIyNTk5LDI3OTQwLDMwNzg2LDI4OTg3LDE0ODI1MCwxNDgwODYsMjg5MTMsMjkyNjQsMjkzMTksMjkzMzIsMTQ5MzkxLDE0OTI4NSwyMDg1NywxNTAxODAsMTMyNTg3LDI5ODE4LDE0NzE5MiwxNDQ5OTEsMTUw''@;'; put 'put ''MDkwLDE0OTc4MywxNTU2MTcsMTYxMzQsMTYwNDksMTUwMjM5LDE2Njk0NywxNDcyNTMsMjQ3NDMsMTYxMTUsMjk5MDAsMjk3NTYsMzc3NjcsMjk3NTEsMTc1NjcsMTU5MjEwLDE3NzQ1LDMwMDgzLDE2MjI3LDE1MDc0NSwxNTA3OTAsMTYyMTYsMzAwMzcsMzAzMjMsMTczNTEwLDE1MTI5LDI5''@;'; put 'put ''ODAwLDE2NjYwNCwxNDk5MzEsMTQ5OTAyLDE1MDk5LDE1ODIxLDE1MDA5NCwxNjEyNywxNDk5NTcsMTQ5NzQ3LDM3MzcwLDIyMzIyLDM3Njk4LDE2NjYyNywxMzczMTYsMjA3MDMsMTUyMDk3LDE1MjAzOSwzMDU4NCwxNDM5MjIsMzA0NzgsMzA0NzksMzA1ODcsMTQ5MTQzLDE0NTI4MSwxNDk0''@;'; put 'put ''MiwxNDk3NDQsMjk3NTIsMjk4NTEsMTYwNjMsMTUwMjAyLDE1MDIxNSwxNjU4NCwxNTAxNjYsMTU2MDc4LDM3NjM5LDE1Mjk2MSwzMDc1MCwzMDg2MSwzMDg1NiwzMDkzMCwyOTY0OCwzMTA2NSwxNjE2MDEsMTUzMzE1LDE2NjU0LDMxMTMxLDMzOTQyLDMxMTQxLDI3MTgxLDE0NzE5NCwzMTI5''@;'; put 'put ''MCwzMTIyMCwxNjc1MCwxMzY5MzQsMTY2OTAsMzc0MjksMzEyMTcsMTM0NDc2LDE0OTkwMCwxMzE3MzcsMTQ2ODc0LDEzNzA3MCwxMzcxOSwyMTg2NywxMzY4MCwxMzk5NCwxMzE1NDAsMTM0MTU3LDMxNDU4LDIzMTI5LDE0MTA0NSwxNTQyODcsMTU0MjY4LDIzMDUzLDEzMTY3NSwzMDk2MCwy''@;'; put 'put ''MzA4MiwxNTQ1NjYsMzE0ODYsMTY4ODksMzE4MzcsMzE4NTMsMTY5MTMsMTU0NTQ3LDE1NTMyNCwxNTUzMDIsMzE5NDksMTUwMDA5LDEzNzEzNiwzMTg4NiwzMTg2OCwzMTkxOCwyNzMxNCwzMjIyMCwzMjI2MywzMjIxMSwzMjU5MCwxNTYyNTcsMTU1OTk2LDE2MjYzMiwzMjE1MSwxNTUyNjYs''@;'; put 'put ''MTcwMDIsMTU4NTgxLDEzMzM5OCwyNjU4MiwxMzExNTAsMTQ0ODQ3LDIyNDY4LDE1NjY5MCwxNTY2NjQsMTQ5ODU4LDMyNzMzLDMxNTI3LDEzMzE2NCwxNTQzNDUsMTU0OTQ3LDMxNTAwLDE1NTE1MCwzOTM5OCwzNDM3MywzOTUyMywyNzE2NCwxNDQ0NDcsMTQ4MTgsMTUwMDA3LDE1NzEwMSwz''@;'; put 'put ''OTQ1NSwxNTcwODgsMzM5MjAsMTYwMDM5LDE1ODkyOSwxNzY0MiwzMzA3OSwxNzQxMCwzMjk2NiwzMzAzMywzMzA5MCwxNTc2MjAsMzkxMDcsMTU4Mjc0LDMzMzc4LDMzMzgxLDE1ODI4OSwzMzg3NSwxNTkxNDMsMzQzMjAsMTYwMjgzLDIzMTc0LDE2NzY3LDEzNzI4MCwyMzMzOSwxMzczNzcs''@;'; put 'put ''MjMyNjgsMTM3NDMyLDM0NDY0LDE5NTAwNCwxNDY4MzEsMzQ4NjEsMTYwODAyLDIzMDQyLDM0OTI2LDIwMjkzLDM0OTUxLDM1MDA3LDM1MDQ2LDM1MTczLDM1MTQ5LDE1MzIxOSwzNTE1NiwxNjE2NjksMTYxNjY4LDE2NjkwMSwxNjY4NzMsMTY2ODEyLDE2NjM5MywxNjA0NSwzMzk1NSwxODE2''@;'; put 'put ''NSwxODEyNywxNDMyMiwzNTM4OSwzNTM1NiwxNjkwMzIsMjQzOTcsMzc0MTksMTQ4MTAwLDI2MDY4LDI4OTY5LDI4ODY4LDEzNzI4NSw0MDMwMSwzNTk5OSwzNjA3MywxNjMyOTIsMjI5MzgsMzA2NTksMjMwMjQsMTcyNjIsMTQwMzYsMzYzOTQsMzY1MTksMTUwNTM3LDM2NjU2LDM2NjgyLDE3''@;'; put 'put ''MTQwLDI3NzM2LDI4NjAzLDE0MDA2NSwxODU4NywyODUzNywyODI5OSwxMzcxNzgsMzk5MTMsMTQwMDUsMTQ5ODA3LDM3MDUxLDM3MDE1LDIxODczLDE4Njk0LDM3MzA3LDM3ODkyLDE2NjQ3NSwxNjQ4MiwxNjY2NTIsMzc5MjcsMTY2OTQxLDE2Njk3MSwzNDAyMSwzNTM3MSwzODI5NywzODMx''@;'; put 'put ''MSwzODI5NSwzODI5NCwxNjcyMjAsMjk3NjUsMTYwNjYsMTQ5NzU5LDE1MDA4MiwxNDg0NTgsMTYxMDMsMTQzOTA5LDM4NTQzLDE2NzY1NSwxNjc1MjYsMTY3NTI1LDE2MDc2LDE0OTk5NywxNTAxMzYsMTQ3NDM4LDI5NzE0LDI5ODAzLDE2MTI0LDM4NzIxLDE2ODExMiwyNjY5NSwxODk3Mywx''@;'; put 'put ''NjgwODMsMTUzNTY3LDM4NzQ5LDM3NzM2LDE2NjI4MSwxNjY5NTAsMTY2NzAzLDE1NjYwNiwzNzU2MiwyMzMxMywzNTY4OSwxODc0OCwyOTY4OSwxNDc5OTUsMzg4MTEsMzg3NjksMzkyMjQsMTM0OTUwLDI0MDAxLDE2Njg1MywxNTAxOTQsMzg5NDMsMTY5MTc4LDM3NjIyLDE2OTQzMSwzNzM0''@;'; put 'put ''OSwxNzYwMCwxNjY3MzYsMTUwMTE5LDE2Njc1NiwzOTEzMiwxNjY0NjksMTYxMjgsMzc0MTgsMTg3MjUsMzM4MTIsMzkyMjcsMzkyNDUsMTYyNTY2LDE1ODY5LDM5MzIzLDE5MzExLDM5MzM4LDM5NTE2LDE2Njc1NywxNTM4MDAsMjcyNzksMzk0NTcsMjMyOTQsMzk0NzEsMTcwMjI1LDE5MzQ0''@;'; put 'put ''LDE3MDMxMiwzOTM1NiwxOTM4OSwxOTM1MSwzNzc1NywyMjY0MiwxMzU5MzgsMjI1NjIsMTQ5OTQ0LDEzNjQyNCwzMDc4OCwxNDEwODcsMTQ2ODcyLDI2ODIxLDE1NzQxLDM3OTc2LDE0NjMxLDI0OTEyLDE0MTE4NSwxNDE2NzUsMjQ4MzksNDAwMTUsNDAwMTksNDAwNTksMzk5ODksMzk5NTIs''@;'; put 'put ''Mzk4MDcsMzk4ODcsMTcxNTY1LDM5ODM5LDE3MjUzMywxNzIyODYsNDAyMjUsMTk2MzAsMTQ3NzE2LDQwNDcyLDE5NjMyLDQwMjA0LDE3MjQ2OCwxNzIyNjksMTcyMjc1LDE3MDI4Nyw0MDM1NywzMzk4MSwxNTkyNTAsMTU5NzExLDE1ODU5NCwzNDMwMCwxNzcxNSwxNTkxNDAsMTU5MzY0LDE1''@;'; put 'put ''OTIxNiwzMzgyNCwzNDI4NiwxNTkyMzIsMTQ1MzY3LDE1NTc0OCwzMTIwMiwxNDQ3OTYsMTQ0OTYwLDE4NzMzLDE0OTk4MiwxNTcxNCwzNzg1MSwzNzU2NiwzNzcwNCwxMzE3NzUsMzA5MDUsMzc0OTUsMzc5NjUsMjA0NTIsMTMzNzYsMzY5NjQsMTUyOTI1LDMwNzgxLDMwODA0LDMwOTAyLDMw''@;'; put 'put ''Nzk1LDEzNzA0NywxNDM4MTcsMTQ5ODI1LDEzOTc4LDIwMzM4LDI4NjM0LDI4NjMzLDI4NzAyLDI4NzAyLDIxNTI0LDE0Nzg5MywyMjQ1OSwyMjc3MSwyMjQxMCw0MDIxNCwyMjQ4NywyODk4MCwxMzQ4NywxNDc4ODQsMjkxNjMsMTU4Nzg0LDE1MTQ0NywyMzMzNiwxMzcxNDEsMTY2NDczLDI0''@;'; put 'put ''ODQ0LDIzMjQ2LDIzMDUxLDE3MDg0LDE0ODYxNiwxNDEyNCwxOTMyMywxNjYzOTYsMzc4MTksMzc4MTYsMTM3NDMwLDEzNDk0MSwzMzkwNiwxNTg5MTIsMTM2MjExLDE0ODIxOCwxNDIzNzQsMTQ4NDE3LDIyOTMyLDE0Njg3MSwxNTc1MDUsMzIxNjgsMTU1OTk1LDE1NTgxMiwxNDk5NDUsMTQ5''@;'; put 'put ''ODk5LDE2NjM5NCwzNzYwNSwyOTY2NiwxNjEwNSwyOTg3NiwxNjY3NTUsMTM3Mzc1LDE2MDk3LDE1MDE5NSwyNzM1MiwyOTY4MywyOTY5MSwxNjA4NiwxNTAwNzgsMTUwMTY0LDEzNzE3NywxNTAxMTgsMTMyMDA3LDEzNjIyOCwxNDk5ODksMjk3NjgsMTQ5NzgyLDI4ODM3LDE0OTg3OCwzNzUw''@;'; put 'put ''OCwyOTY3MCwzNzcyNywxMzIzNTAsMzc2ODEsMTY2NjA2LDE2NjQyMiwzNzc2NiwxNjY4ODcsMTUzMDQ1LDE4NzQxLDE2NjUzMCwyOTAzNSwxNDk4MjcsMTM0Mzk5LDIyMTgwLDEzMjYzNCwxMzQxMjMsMTM0MzI4LDIxNzYyLDMxMTcyLDEzNzIxMCwzMjI1NCwxMzY4OTgsMTUwMDk2LDEzNzI5''@;'; put 'put ''OCwxNzcxMCwzNzg4OSwxNDA5MCwxNjY1OTIsMTQ5OTMzLDIyOTYwLDEzNzQwNywxMzczNDcsMTYwOTAwLDIzMjAxLDE0MDUwLDE0Njc3OSwxNGUzLDM3NDcxLDIzMTYxLDE2NjUyOSwxMzczMTQsMzc3NDgsMTU1NjUsMTMzODEyLDE5MDk0LDE0NzMwLDIwNzI0LDE1NzIxLDE1NjkyLDEzNjA5''@;'; put 'put ''MiwyOTA0NSwxNzE0NywxNjQzNzYsMjgxNzUsMTY4MTY0LDE3NjQzLDI3OTkxLDE2MzQwNywyODc3NSwyNzgyMywxNTU3NCwxNDc0MzcsMTQ2OTg5LDI4MTYyLDI4NDI4LDE1NzI3LDEzMjA4NSwzMDAzMywxNDAxMiwxMzUxMiwxODA0OCwxNjA5MCwxODU0NSwyMjk4MCwzNzQ4NiwxODc1MCwz''@;'; put 'put ''NjY3MywxNjY5NDAsMTU4NjU2LDIyNTQ2LDIyNDcyLDE0MDM4LDEzNjI3NCwyODkyNiwxNDgzMjIsMTUwMTI5LDE0MzMzMSwxMzU4NTYsMTQwMjIxLDI2ODA5LDI2OTgzLDEzNjA4OCwxNDQ2MTMsMTYyODA0LDE0NTExOSwxNjY1MzEsMTQ1MzY2LDE0NDM3OCwxNTA2ODcsMjcxNjIsMTQ1MDY5''@;'; put 'put ''LDE1ODkwMywzMzg1NCwxNzYzMSwxNzYxNCwxNTkwMTQsMTU5MDU3LDE1ODg1MCwxNTk3MTAsMjg0MzksMTYwMDA5LDMzNTk3LDEzNzAxOCwzMzc3MywxNTg4NDgsMTU5ODI3LDEzNzE3OSwyMjkyMSwyMzE3MCwxMzcxMzksMjMxMzcsMjMxNTMsMTM3NDc3LDE0Nzk2NCwxNDEyNSwyMzAyMywx''@;'; put 'put ''MzcwMjAsMTQwMjMsMjkwNzAsMzc3NzYsMjYyNjYsMTQ4MTMzLDIzMTUwLDIzMDgzLDE0ODExNSwyNzE3OSwxNDcxOTMsMTYxNTkwLDE0ODU3MSwxNDgxNzAsMjg5NTcsMTQ4MDU3LDE2NjM2OSwyMDQwMCwxNTkwMTYsMjM3NDYsMTQ4Njg2LDE2MzQwNSwxNDg0MTMsMjcxNDgsMTQ4MDU0LDEz''@;'; put 'put ''NTk0MCwyODgzOCwyODk3OSwxNDg0NTcsMTU3ODEsMjc4NzEsMTk0NTk3LDE1MDA5NSwzMjM1NywyMzAxOSwyMzg1NSwxNTg1OSwyNDQxMiwxNTAxMDksMTM3MTgzLDMyMTY0LDMzODMwLDIxNjM3LDE0NjE3MCwxNDQxMjgsMTMxNjA0LDIyMzk4LDEzMzMzMywxMzI2MzMsMTYzNTcsMTM5MTY2''@;'; put 'put ''LDE3MjcyNiwyODY3NSwxNjgyODMsMjM5MjAsMjk1ODMsMzE5NTUsMTY2NDg5LDE2ODk5MiwyMDQyNCwzMjc0MywyOTM4OSwyOTQ1NiwxNjI1NDgsMjk0OTYsMjk0OTcsMTUzMzM0LDI5NTA1LDI5NTEyLDE2MDQxLDE2MjU4NCwzNjk3MiwyOTE3MywxNDk3NDYsMjk2NjUsMzMyNzAsMTYwNzQs''@;'; put 'put ''MzA0NzYsMTYwODEsMjc4MTAsMjIyNjksMjk3MjEsMjk3MjYsMjk3MjcsMTYwOTgsMTYxMTIsMTYxMTYsMTYxMjIsMjk5MDcsMTYxNDIsMTYyMTEsMzAwMTgsMzAwNjEsMzAwNjYsMzAwOTMsMTYyNTIsMzAxNTIsMzAxNzIsMTYzMjAsMzAyODUsMTYzNDMsMzAzMjQsMTYzNDgsMzAzMzAsMTUx''@;'; put 'put ''Mzg4LDI5MDY0LDIyMDUxLDM1MjAwLDIyNjMzLDE2NDEzLDMwNTMxLDE2NDQxLDI2NDY1LDE2NDUzLDEzNzg3LDMwNjE2LDE2NDkwLDE2NDk1LDIzNjQ2LDMwNjU0LDMwNjY3LDIyNzcwLDMwNzQ0LDI4ODU3LDMwNzQ4LDE2NTUyLDMwNzc3LDMwNzkxLDMwODAxLDMwODIyLDMzODY0LDE1Mjg4''@;'; put 'put ''NSwzMTAyNywyNjYyNywzMTAyNiwxNjY0MywxNjY0OSwzMTEyMSwzMTEyOSwzNjc5NSwzMTIzOCwzNjc5NiwxNjc0MywzMTM3NywxNjgxOCwzMTQyMCwzMzQwMSwxNjgzNiwzMTQzOSwzMTQ1MSwxNjg0NywyMDAwMSwzMTU4NiwzMTU5NiwzMTYxMSwzMTc2MiwzMTc3MSwxNjk5MiwxNzAxOCwz''@;'; put 'put ''MTg2NywzMTkwMCwxNzAzNiwzMTkyOCwxNzA0NCwzMTk4MSwzNjc1NSwyODg2NCwxMzQzNTEsMzIyMDcsMzIyMTIsMzIyMDgsMzIyNTMsMzI2ODYsMzI2OTIsMjkzNDMsMTczMDMsMzI4MDAsMzI4MDUsMzE1NDUsMzI4MTQsMzI4MTcsMzI4NTIsMTU4MjAsMjI0NTIsMjg4MzIsMzI5NTEsMzMw''@;'; put 'put ''MDEsMTczODksMzMwMzYsMjk0ODIsMzMwMzgsMzMwNDIsMzAwNDgsMzMwNDQsMTc0MDksMTUxNjEsMzMxMTAsMzMxMTMsMzMxMTQsMTc0MjcsMjI1ODYsMzMxNDgsMzMxNTYsMTc0NDUsMzMxNzEsMTc0NTMsMzMxODksMjI1MTEsMzMyMTcsMzMyNTIsMzMzNjQsMTc1NTEsMzM0NDYsMzMzOTgs''@;'; put 'put ''MzM0ODIsMzM0OTYsMzM1MzUsMTc1ODQsMzM2MjMsMzg1MDUsMjcwMTgsMzM3OTcsMjg5MTcsMzM4OTIsMjQ4MDMsMzM5MjgsMTc2NjgsMzM5ODIsMzQwMTcsMzQwNDAsMzQwNjQsMzQxMDQsMzQxMzAsMTc3MjMsMzQxNTksMzQxNjAsMzQyNzIsMTc3ODMsMzQ0MTgsMzQ0NTAsMzQ0ODIsMzQ1''@;'; put 'put ''NDMsMzg0NjksMzQ2OTksMTc5MjYsMTc5NDMsMzQ5OTAsMzUwNzEsMzUxMDgsMzUxNDMsMzUyMTcsMTYyMTUxLDM1MzY5LDM1Mzg0LDM1NDc2LDM1NTA4LDM1OTIxLDM2MDUyLDM2MDgyLDM2MTI0LDE4MzI4LDIyNjIzLDM2MjkxLDE4NDEzLDIwMjA2LDM2NDEwLDIxOTc2LDIyMzU2LDM2NDY1''@;'; put 'put ''LDIyMDA1LDM2NTI4LDE4NDg3LDM2NTU4LDM2NTc4LDM2NTgwLDM2NTg5LDM2NTk0LDM2NzkxLDM2ODAxLDM2ODEwLDM2ODEyLDM2OTE1LDM5MzY0LDE4NjA1LDM5MTM2LDM3Mzk1LDE4NzE4LDM3NDE2LDM3NDY0LDM3NDgzLDM3NTUzLDM3NTUwLDM3NTY3LDM3NjAzLDM3NjExLDM3NjE5LDM3''@;'; put 'put ''NjIwLDM3NjI5LDM3Njk5LDM3NzY0LDM3ODA1LDE4NzU3LDE4NzY5LDQwNjM5LDM3OTExLDIxMjQ5LDM3OTE3LDM3OTMzLDM3OTUwLDE4Nzk0LDM3OTcyLDM4MDA5LDM4MTg5LDM4MzA2LDE4ODU1LDM4Mzg4LDM4NDUxLDE4OTE3LDI2NTI4LDE4OTgwLDM4NzIwLDE4OTk3LDM4ODM0LDM4ODUw''@;'; put 'put ''LDIyMTAwLDE5MTcyLDI0ODA4LDM5MDk3LDE5MjI1LDM5MTUzLDIyNTk2LDM5MTgyLDM5MTkzLDIwOTE2LDM5MTk2LDM5MjIzLDM5MjM0LDM5MjYxLDM5MjY2LDE5MzEyLDM5MzY1LDE5MzU3LDM5NDg0LDM5Njk1LDMxMzYzLDM5Nzg1LDM5ODA5LDM5OTAxLDM5OTIxLDM5OTI0LDE5NTY1LDM5''@;'; put 'put ''OTY4LDE0MTkxLDEzODE3OCw0MDI2NSwzOTk5NCw0MDcwMiwyMjA5Niw0MDMzOSw0MDM4MSw0MDM4NCw0MDQ0NCwzODEzNCwzNjc5MCw0MDU3MSw0MDYyMCw0MDYyNSw0MDYzNyw0MDY0NiwzODEwOCw0MDY3NCw0MDY4OSw0MDY5NiwzMTQzMiw0MDc3MiwxMzEyMjAsMTMxNzY3LDEzMmUzLDI2''@;'; put 'put ''OTA2LDM4MDgzLDIyOTU2LDEzMjMxMSwyMjU5MiwzODA4MSwxNDI2NSwxMzI1NjUsMTMyNjI5LDEzMjcyNiwxMzY4OTAsMjIzNTksMjkwNDMsMTMzODI2LDEzMzgzNywxMzQwNzksMjE2MTAsMTk0NjE5LDEzNDA5MSwyMTY2MiwxMzQxMzksMTM0MjAzLDEzNDIyNywxMzQyNDUsMTM0MjY4LDI0''@;'; put 'put ''ODA3LDEzNDI4NSwyMjEzOCwxMzQzMjUsMTM0MzY1LDEzNDM4MSwxMzQ1MTEsMTM0NTc4LDEzNDYwMCwyNjk2NSwzOTk4MywzNDcyNSwxMzQ2NjAsMTM0NjcwLDEzNDg3MSwxMzUwNTYsMTM0OTU3LDEzNDc3MSwyMzU4NCwxMzUxMDAsMjQwNzUsMTM1MjYwLDEzNTI0NywxMzUyODYsMjYzOTgs''@;'; put 'put ''MTM1MjkxLDEzNTMwNCwxMzUzMTgsMTM4OTUsMTM1MzU5LDEzNTM3OSwxMzU0NzEsMTM1NDgzLDIxMzQ4LDMzOTY1LDEzNTkwNywxMzYwNTMsMTM1OTkwLDM1NzEzLDEzNjU2NywxMzY3MjksMTM3MTU1LDEzNzE1OSwyMDA4OCwyODg1OSwxMzcyNjEsMTM3NTc4LDEzNzc3MywxMzc3OTcsMTM4''@;'; put 'put ''MjgyLDEzODM1MiwxMzg0MTIsMTM4OTUyLDI1MjgzLDEzODk2NSwxMzkwMjksMjkwODAsMjY3MDksMTM5MzMzLDI3MTEzLDE0MDI0LDEzOTkwMCwxNDAyNDcsMTQwMjgyLDE0MTA5OCwxNDE0MjUsMTQxNjQ3LDMzNTMzLDE0MTY3MSwxNDE3MTUsMTQyMDM3LDM1MjM3LDE0MjA1NiwzNjc2OCwx''@;'; put 'put ''NDIwOTQsMzg4NDAsMTQyMTQzLDM4OTgzLDM5NjEzLDE0MjQxMixudWxsLDE0MjQ3MiwxNDI1MTksMTU0NjAwLDE0MjYwMCwxNDI2MTAsMTQyNzc1LDE0Mjc0MSwxNDI5MTQsMTQzMjIwLDE0MzMwOCwxNDM0MTEsMTQzNDYyLDE0NDE1OSwxNDQzNTAsMjQ0OTcsMjYxODQsMjYzMDMsMTYyNDI1''@;'; put 'put ''LDE0NDc0MywxNDQ4ODMsMjkxODUsMTQ5OTQ2LDMwNjc5LDE0NDkyMiwxNDUxNzQsMzIzOTEsMTMxOTEwLDIyNzA5LDI2MzgyLDI2OTA0LDE0NjA4NywxNjEzNjcsMTU1NjE4LDE0Njk2MSwxNDcxMjksMTYxMjc4LDEzOTQxOCwxODY0MCwxOTEyOCwxNDc3MzcsMTY2NTU0LDE0ODIwNiwxNDgy''@;'; put 'put ''MzcsMTQ3NTE1LDE0ODI3NiwxNDgzNzQsMTUwMDg1LDEzMjU1NCwyMDk0NiwxMzI2MjUsMjI5NDMsMTM4OTIwLDE1Mjk0LDE0NjY4NywxNDg0ODQsMTQ4Njk0LDIyNDA4LDE0OTEwOCwxNDc0NywxNDkyOTUsMTY1MzUyLDE3MDQ0MSwxNDE3OCwxMzk3MTUsMzU2NzgsMTY2NzM0LDM5MzgyLDE0''@;'; put 'put ''OTUyMiwxNDk3NTUsMTUwMDM3LDI5MTkzLDE1MDIwOCwxMzQyNjQsMjI4ODUsMTUxMjA1LDE1MTQzMCwxMzI5ODUsMzY1NzAsMTUxNTk2LDIxMTM1LDIyMzM1LDI5MDQxLDE1MjIxNywxNTI2MDEsMTQ3Mjc0LDE1MDE4MywyMTk0OCwxNTI2NDYsMTUyNjg2LDE1ODU0NiwzNzMzMiwxMzQyNywx''@;'; put 'put ''NTI4OTUsMTYxMzMwLDE1MjkyNiwxODIwMCwxNTI5MzAsMTUyOTM0LDE1MzU0MywxNDk4MjMsMTUzNjkzLDIwNTgyLDEzNTYzLDE0NDMzMiwyNDc5OCwxNTM4NTksMTgzMDAsMTY2MjE2LDE1NDI4NiwxNTQ1MDUsMTU0NjMwLDEzODY0MCwyMjQzMywyOTAwOSwyODU5OCwxNTU5MDYsMTYyODM0''@;'; put 'put ''LDM2OTUwLDE1NjA4MiwxNTE0NTAsMzU2ODIsMTU2Njc0LDE1Njc0NiwyMzg5OSwxNTg3MTEsMzY2NjIsMTU2ODA0LDEzNzUwMCwzNTU2MiwxNTAwMDYsMTU2ODA4LDE0NzQzOSwxNTY5NDYsMTkzOTIsMTU3MTE5LDE1NzM2NSwxNDEwODMsMzc5ODksMTUzNTY5LDI0OTgxLDIzMDc5LDE5NDc2''@;'; put 'put ''NSwyMDQxMSwyMjIwMSwxNDg3NjksMTU3NDM2LDIwMDc0LDE0OTgxMiwzODQ4NiwyODA0NywxNTg5MDksMTM4NDgsMzUxOTEsMTU3NTkzLDE1NzgwNiwxNTY2ODksMTU3NzkwLDI5MTUxLDE1Nzg5NSwzMTU1NCwxNjgxMjgsMTMzNjQ5LDE1Nzk5MCwzNzEyNCwxNTgwMDksMzEzMDEsNDA0MzIs''@;'; put 'put ''MTU4MjAyLDM5NDYyLDE1ODI1MywxMzkxOSwxNTY3NzcsMTMxMTA1LDMxMTA3LDE1ODI2MCwxNTg1NTUsMjM4NTIsMTQ0NjY1LDMzNzQzLDE1ODYyMSwxODEyOCwxNTg4ODQsMzAwMTEsMzQ5MTcsMTU5MTUwLDIyNzEwLDE0MTA4LDE0MDY4NSwxNTk4MTksMTYwMjA1LDE1NDQ0LDE2MDM4NCwx''@;'; put 'put ''NjAzODksMzc1MDUsMTM5NjQyLDE2MDM5NSwzNzY4MCwxNjA0ODYsMTQ5OTY4LDI3NzA1LDM4MDQ3LDE2MDg0OCwxMzQ5MDQsMzQ4NTUsMzUwNjEsMTQxNjA2LDE2NDk3OSwxMzcxMzcsMjgzNDQsMTUwMDU4LDEzNzI0OCwxNDc1NiwxNDAwOSwyMzU2OCwzMTIwMywxNzcyNywyNjI5NCwxNzEx''@;'; put 'put ''ODEsMTcwMTQ4LDM1MTM5LDE2MTc0MCwxNjE4ODAsMjIyMzAsMTY2MDcsMTM2NzE0LDE0NzUzLDE0NTE5OSwxNjQwNzIsMTM2MTMzLDI5MTAxLDMzNjM4LDE2MjI2OSwxNjgzNjAsMjMxNDMsMTk2MzksMTU5OTE5LDE2NjMxNSwxNjIzMDEsMTYyMzE0LDE2MjU3MSwxNjMxNzQsMTQ3ODM0LDMx''@;'; put 'put ''NTU1LDMxMTAyLDE2Mzg0OSwyODU5NywxNzI3NjcsMjcxMzksMTY0NjMyLDIxNDEwLDE1OTIzOSwzNzgyMywyNjY3OCwzODc0OSwxNjQyMDcsMTYzODc1LDE1ODEzMywxMzYxNzMsMTQzOTE5LDE2MzkxMiwyMzk0MSwxNjY5NjAsMTYzOTcxLDIyMjkzLDM4OTQ3LDE2NjIxNywyMzk3OSwxNDk4''@;'; put 'put ''OTYsMjYwNDYsMjcwOTMsMjE0NTgsMTUwMTgxLDE0NzMyOSwxNTM3NywyNjQyMiwxNjM5ODQsMTY0MDg0LDE2NDE0MiwxMzkxNjksMTY0MTc1LDE2NDIzMywxNjQyNzEsMTY0Mzc4LDE2NDYxNCwxNjQ2NTUsMTY0NzQ2LDEzNzcwLDE2NDk2OCwxNjU1NDYsMTg2ODIsMjU1NzQsMTY2MjMwLDMw''@;'; put 'put ''NzI4LDM3NDYxLDE2NjMyOCwxNzM5NCwxNjYzNzUsMTczNzUsMTY2Mzc2LDE2NjcyNiwxNjY4NjgsMjMwMzIsMTY2OTIxLDM2NjE5LDE2Nzg3NywxNjgxNzIsMzE1NjksMTY4MjA4LDE2ODI1MiwxNTg2MywxNjgyODYsMTUwMjE4LDM2ODE2LDI5MzI3LDIyMTU1LDE2OTE5MSwxNjk0NDksMTY5''@;'; put 'put ''MzkyLDE2OTQwMCwxNjk3NzgsMTcwMTkzLDE3MDMxMywxNzAzNDYsMTcwNDM1LDE3MDUzNiwxNzA3NjYsMTcxMzU0LDE3MTQxOSwzMjQxNSwxNzE3NjgsMTcxODExLDE5NjIwLDM4MjE1LDE3MjY5MSwyOTA5MCwxNzI3OTksMTk4NTcsMzY4ODIsMTczNTE1LDE5ODY4LDEzNDMwMCwzNjc5OCwy''@;'; put 'put ''MTk1MywzNjc5NCwxNDA0NjQsMzY3OTMsMTUwMTYzLDE3NjczLDMyMzgzLDI4NTAyLDI3MzEzLDIwMjAyLDEzNTQwLDE2NjcwMCwxNjE5NDksMTQxMzgsMzY0ODAsMTM3MjA1LDE2Mzg3NiwxNjY3NjQsMTY2ODA5LDE2MjM2NiwxNTczNTksMTU4NTEsMTYxMzY1LDE0NjYxNSwxNTMxNDEsMTUz''@;'; put 'put ''OTQyLDIwMTIyLDE1NTI2NSwxNTYyNDgsMjIyMDcsMTM0NzY1LDM2MzY2LDIzNDA1LDE0NzA4MCwxNTA2ODYsMjU1NjYsMjUyOTYsMTM3MjA2LDEzNzMzOSwyNTkwNCwyMjA2MSwxNTQ2OTgsMjE1MzAsMTUyMzM3LDE1ODE0LDE3MTQxNiwxOTU4MSwyMjA1MCwyMjA0NiwzMjU4NSwxNTUzNTIs''@;'; put 'put ''MjI5MDEsMTQ2NzUyLDM0NjcyLDE5OTk2LDEzNTE0NiwxMzQ0NzMsMTQ1MDgyLDMzMDQ3LDQwMjg2LDM2MTIwLDMwMjY3LDQwMDA1LDMwMjg2LDMwNjQ5LDM3NzAxLDIxNTU0LDMzMDk2LDMzNTI3LDIyMDUzLDMzMDc0LDMzODE2LDMyOTU3LDIxOTk0LDMxMDc0LDIyMDgzLDIxNTI2LDEzNDgx''@;'; put 'put ''MywxMzc3NCwyMjAyMSwyMjAwMSwyNjM1MywxNjQ1NzgsMTM4NjksMzAwMDQsMjJlMywyMTk0NiwyMTY1NSwyMTg3NCwxMzQyMDksMTM0Mjk0LDI0MjcyLDE1MTg4MCwxMzQ3NzQsMTQyNDM0LDEzNDgxOCw0MDYxOSwzMjA5MCwyMTk4MiwxMzUyODUsMjUyNDUsMzg3NjUsMjE2NTIsMzYwNDUs''@;'; put 'put ''MjkxNzQsMzcyMzgsMjU1OTYsMjU1MjksMjU1OTgsMjE4NjUsMTQyMTQ3LDQwMDUwLDE0MzAyNywyMDg5MCwxMzUzNSwxMzQ1NjcsMjA5MDMsMjE1ODEsMjE3OTAsMjE3NzksMzAzMTAsMzYzOTcsMTU3ODM0LDMwMTI5LDMyOTUwLDM0ODIwLDM0Njk0LDM1MDE1LDMzMjA2LDMzODIwLDEzNTM2''@;'; put 'put ''MSwxNzY0NCwyOTQ0NCwxNDkyNTQsMjM0NDAsMzM1NDcsMTU3ODQzLDIyMTM5LDE0MTA0NCwxNjMxMTksMTQ3ODc1LDE2MzE4NywxNTk0NDAsMTYwNDM4LDM3MjMyLDEzNTY0MSwzNzM4NCwxNDY2ODQsMTczNzM3LDEzNDgyOCwxMzQ5MDUsMjkyODYsMTM4NDAyLDE4MjU0LDE1MTQ5MCwxNjM4''@;'; put 'put ''MzMsMTM1MTQ3LDE2NjM0LDQwMDI5LDI1ODg3LDE0Mjc1MiwxODY3NSwxNDk0NzIsMTcxMzg4LDEzNTE0OCwxMzQ2NjYsMjQ2NzQsMTYxMTg3LDEzNTE0OSxudWxsLDE1NTcyMCwxMzU1NTksMjkwOTEsMzIzOTgsNDAyNzIsMTk5OTQsMTk5NzIsMTM2ODcsMjMzMDksMjc4MjYsMjEzNTEsMTM5''@;'; put 'put ''OTYsMTQ4MTIsMjEzNzMsMTM5ODksMTQ5MDE2LDIyNjgyLDE1MDM4MiwzMzMyNSwyMTU3OSwyMjQ0MiwxNTQyNjEsMTMzNDk3LG51bGwsMTQ5MzAsMTQwMzg5LDI5NTU2LDE3MTY5MiwxOTcyMSwzOTkxNywxNDY2ODYsMTcxODI0LDE5NTQ3LDE1MTQ2NSwxNjkzNzQsMTcxOTk4LDMzODg0LDE0''@;'; put 'put ''Njg3MCwxNjA0MzQsMTU3NjE5LDE0NTE4NCwyNTM5MCwzMjAzNywxNDcxOTEsMTQ2OTg4LDE0ODkwLDM2ODcyLDIxMTk2LDE1OTg4LDEzOTQ2LDE3ODk3LDEzMjIzOCwzMDI3MiwyMzI4MCwxMzQ4MzgsMzA4NDIsMTYzNjMwLDIyNjk1LDE2NTc1LDIyMTQwLDM5ODE5LDIzOTI0LDMwMjkyLDE3''@;'; put 'put ''MzEwOCw0MDU4MSwxOTY4MSwzMDIwMSwxNDMzMSwyNDg1NywxNDM1NzgsMTQ4NDY2LG51bGwsMjIxMDksMTM1ODQ5LDIyNDM5LDE0OTg1OSwxNzE1MjYsMjEwNDQsMTU5OTE4LDEzNzQxLDI3NzIyLDQwMzE2LDMxODMwLDM5NzM3LDIyNDk0LDEzNzA2OCwyMzYzNSwyNTgxMSwxNjkxNjgsMTU2''@;'; put 'put ''NDY5LDE2MDEwMCwzNDQ3NywxMzQ0NDAsMTU5MDEwLDE1MDI0MiwxMzQ1MTMsbnVsbCwyMDk5MCwxMzkwMjMsMjM5NTAsMzg2NTksMTM4NzA1LDQwNTc3LDM2OTQwLDMxNTE5LDM5NjgyLDIzNzYxLDMxNjUxLDI1MTkyLDI1Mzk3LDM5Njc5LDMxNjk1LDM5NzIyLDMxODcwLDM5NzI2LDMxODEw''@;'; put 'put ''LDMxODc4LDM5OTU3LDMxNzQwLDM5Njg5LDQwNzI3LDM5OTYzLDE0OTgyMiw0MDc5NCwyMTg3NSwyMzQ5MSwyMDQ3Nyw0MDYwMCwyMDQ2NiwyMTA4OCwxNTg3OCwyMTIwMSwyMjM3NSwyMDU2NiwyMjk2NywyNDA4MiwzODg1Niw0MDM2MywzNjcwMCwyMTYwOSwzODgzNiwzOTIzMiwzODg0Miwy''@;'; put 'put ''MTI5MiwyNDg4MCwyNjkyNCwyMTQ2NiwzOTk0Niw0MDE5NCwxOTUxNSwzODQ2NSwyNzAwOCwyMDY0NiwzMDAyMiwxMzcwNjksMzkzODYsMjExMDcsbnVsbCwzNzIwOSwzODUyOSwzNzIxMixudWxsLDM3MjAxLDE2NzU3NSwyNTQ3MSwxNTkwMTEsMjczMzgsMjIwMzMsMzcyNjIsMzAwNzQsMjUy''@;'; put 'put ''MjEsMTMyMDkyLDI5NTE5LDMxODU2LDE1NDY1NywxNDY2ODUsbnVsbCwxNDk3ODUsMzA0MjIsMzk4MzcsMjAwMTAsMTM0MzU2LDMzNzI2LDM0ODgyLG51bGwsMjM2MjYsMjcwNzIsMjA3MTcsMjIzOTQsMjEwMjMsMjQwNTMsMjAxNzQsMjc2OTcsMTMxNTcwLDIwMjgxLDIxNjYwLDIxNzIyLDIx''@;'; put 'put ''MTQ2LDM2MjI2LDEzODIyLDI0MzMyLDEzODExLG51bGwsMjc0NzQsMzcyNDQsNDA4NjksMzk4MzEsMzg5NTgsMzkwOTIsMzk2MTAsNDA2MTYsNDA1ODAsMjkwNTAsMzE1MDgsbnVsbCwyNzY0MiwzNDg0MCwzMjYzMixudWxsLDIyMDQ4LDE3MzY0MiwzNjQ3MSw0MDc4NyxudWxsLDM2MzA4LDM2''@;'; put 'put ''NDMxLDQwNDc2LDM2MzUzLDI1MjE4LDE2NDczMywzNjM5MiwzNjQ2OSwzMTQ0MywxNTAxMzUsMzEyOTQsMzA5MzYsMjc4ODIsMzU0MzEsMzAyMTUsMTY2NDkwLDQwNzQyLDI3ODU0LDM0Nzc0LDMwMTQ3LDE3MjcyMiwzMDgwMywxOTQ2MjQsMzYxMDgsMjk0MTAsMjk1NTMsMzU2MjksMjk0NDIs''@;'; put 'put ''Mjk5MzcsMzYwNzUsMTUwMjAzLDM0MzUxLDI0NTA2LDM0OTc2LDE3NTkxLG51bGwsMTM3Mjc1LDE1OTIzNyxudWxsLDM1NDU0LDE0MDU3MSxudWxsLDI0ODI5LDMwMzExLDM5NjM5LDQwMjYwLDM3NzQyLDM5ODIzLDM0ODA1LG51bGwsMzQ4MzEsMzYwODcsMjk0ODQsMzg2ODksMzk4NTYsMTM3''@;'; put 'put ''ODIsMjkzNjIsMTk0NjMsMzE4MjUsMzkyNDIsMTU1OTkzLDI0OTIxLDE5NDYwLDQwNTk4LDI0OTU3LG51bGwsMjIzNjcsMjQ5NDMsMjUyNTQsMjUxNDUsMjUyOTQsMTQ5NDAsMjUwNTgsMjE0MTgsMTQ0MzczLDI1NDQ0LDI2NjI2LDEzNzc4LDIzODk1LDE2Njg1MCwzNjgyNiwxNjc0ODEsbnVs''@;'; put 'put ''bCwyMDY5NywxMzg1NjYsMzA5ODIsMjEyOTgsMzg0NTYsMTM0OTcxLDE2NDg1LG51bGwsMzA3MTgsbnVsbCwzMTkzOCwxNTU0MTgsMzE5NjIsMzEyNzcsMzI4NzAsMzI4NjcsMzIwNzcsMjk5NTcsMjk5MzgsMzUyMjAsMzMzMDYsMjYzODAsMzI4NjYsMTYwOTAyLDMyODU5LDI5OTM2LDMzMDI3''@;'; put 'put ''LDMwNTAwLDM1MjA5LDE1NzY0NCwzMDAzNSwxNTk0NDEsMzQ3MjksMzQ3NjYsMzMyMjQsMzQ3MDAsMzU0MDEsMzYwMTMsMzU2NTEsMzA1MDcsMjk5NDQsMzQwMTAsMTM4NzcsMjcwNTgsMzYyNjIsbnVsbCwzNTI0MSwyOTgwMCwyODA4OSwzNDc1MywxNDc0NzMsMjk5MjcsMTU4MzUsMjkwNDYs''@;'; put 'put ''MjQ3NDAsMjQ5ODgsMTU1NjksMjkwMjYsMjQ2OTUsbnVsbCwzMjYyNSwxNjY3MDEsMjkyNjQsMjQ4MDksMTkzMjYsMjEwMjQsMTUzODQsMTQ2NjMxLDE1NTM1MSwxNjEzNjYsMTUyODgxLDEzNzU0MCwxMzU5MzQsMTcwMjQzLDE1OTE5NiwxNTk5MTcsMjM3NDUsMTU2MDc3LDE2NjQxNSwxNDUw''@;'; put 'put ''MTUsMTMxMzEwLDE1Nzc2NiwxNTEzMTAsMTc3NjIsMjMzMjcsMTU2NDkyLDQwNzg0LDQwNjE0LDE1NjI2NywxMjI4OCw2NTI5MiwxMjI4OSwxMjI5MCw2NTI5NCw4MjMxLDY1MzA3LDY1MzA2LDY1MzExLDY1MjgxLDY1MDcyLDgyMzAsODIyOSw2NTEwNCw2NTEwNSw2NTEwNiwxODMsNjUxMDgs''@;'; put 'put ''NjUxMDksNjUxMTAsNjUxMTEsNjUzNzIsODIxMSw2NTA3Myw4MjEyLDY1MDc1LDk1ODgsNjUwNzYsNjUxMDMsNjUyODgsNjUyODksNjUwNzcsNjUwNzgsNjUzNzEsNjUzNzMsNjUwNzksNjUwODAsMTIzMDgsMTIzMDksNjUwODEsNjUwODIsMTIzMDQsMTIzMDUsNjUwODMsNjUwODQsMTIyOTgs''@;'; put 'put ''MTIyOTksNjUwODUsNjUwODYsMTIyOTYsMTIyOTcsNjUwODcsNjUwODgsMTIzMDAsMTIzMDEsNjUwODksNjUwOTAsMTIzMDIsMTIzMDMsNjUwOTEsNjUwOTIsNjUxMTMsNjUxMTQsNjUxMTUsNjUxMTYsNjUxMTcsNjUxMTgsODIxNiw4MjE3LDgyMjAsODIyMSwxMjMxNywxMjMxOCw4MjQ1LDgy''@;'; put 'put ''NDIsNjUyODMsNjUyODYsNjUyOTAsODI1MSwxNjcsMTIyOTEsOTY3NSw5Njc5LDk2NTEsOTY1MCw5Njc4LDk3MzQsOTczMyw5NjcxLDk2NzAsOTYzMyw5NjMyLDk2NjEsOTY2MCwxMjk2Myw4NDUzLDE3NSw2NTUwNyw2NTM0Myw3MTcsNjUwOTcsNjUwOTgsNjUxMDEsNjUxMDIsNjUwOTksNjUx''@;'; put 'put ''MDAsNjUxMTksNjUxMjAsNjUxMjEsNjUyOTEsNjUyOTMsMjE1LDI0NywxNzcsODczMCw2NTMwOCw2NTMxMCw2NTMwOSw4ODA2LDg4MDcsODgwMCw4NzM0LDg3ODYsODgwMSw2NTEyMiw2NTEyMyw2NTEyNCw2NTEyNSw2NTEyNiw2NTM3NCw4NzQ1LDg3NDYsODg2OSw4NzM2LDg3MzUsODg5NSwx''@;'; put 'put ''MzI2NiwxMzI2NSw4NzQ3LDg3NTAsODc1Nyw4NzU2LDk3OTIsOTc5NCw4ODUzLDg4NTcsODU5Myw4NTk1LDg1OTIsODU5NCw4NTk4LDg1OTksODYwMSw4NjAwLDg3NDEsODczOSw2NTI5NSw2NTM0MCw4NzI1LDY1MTI4LDY1Mjg0LDY1NTA5LDEyMzA2LDY1NTA0LDY1NTA1LDY1Mjg1LDY1MzEy''@;'; put 'put ''LDg0NTEsODQ1Nyw2NTEyOSw2NTEzMCw2NTEzMSwxMzI2OSwxMzIxMiwxMzIxMywxMzIxNCwxMzI2MiwxMzIxNywxMzE5OCwxMzE5OSwxMzI1MiwxNzYsMjA4MjUsMjA4MjcsMjA4MzAsMjA4MjksMjA4MzMsMjA4MzUsMjE5OTEsMjk5MjksMzE5NTAsOTYwMSw5NjAyLDk2MDMsOTYwNCw5NjA1''@;'; put 'put ''LDk2MDYsOTYwNyw5NjA4LDk2MTUsOTYxNCw5NjEzLDk2MTIsOTYxMSw5NjEwLDk2MDksOTUzMiw5NTI0LDk1MTYsOTUwOCw5NTAwLDk2MjAsOTQ3Miw5NDc0LDk2MjEsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTgxLDk1ODIsOTU4NCw5NTgzLDk1NTIsOTU2Niw5NTc4LDk1NjksOTY5OCw5Njk5''@;'; put 'put ''LDk3MDEsOTcwMCw5NTg1LDk1ODYsOTU4Nyw2NTI5Niw2NTI5Nyw2NTI5OCw2NTI5OSw2NTMwMCw2NTMwMSw2NTMwMiw2NTMwMyw2NTMwNCw2NTMwNSw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLDEyMzIxLDEyMzIyLDEyMzIzLDEyMzI0LDEyMzI1''@;'; put 'put ''LDEyMzI2LDEyMzI3LDEyMzI4LDEyMzI5LDIxMzEzLDIxMzE2LDIxMzE3LDY1MzEzLDY1MzE0LDY1MzE1LDY1MzE2LDY1MzE3LDY1MzE4LDY1MzE5LDY1MzIwLDY1MzIxLDY1MzIyLDY1MzIzLDY1MzI0LDY1MzI1LDY1MzI2LDY1MzI3LDY1MzI4LDY1MzI5LDY1MzMwLDY1MzMxLDY1MzMyLDY1''@;'; put 'put ''MzMzLDY1MzM0LDY1MzM1LDY1MzM2LDY1MzM3LDY1MzM4LDY1MzQ1LDY1MzQ2LDY1MzQ3LDY1MzQ4LDY1MzQ5LDY1MzUwLDY1MzUxLDY1MzUyLDY1MzUzLDY1MzU0LDY1MzU1LDY1MzU2LDY1MzU3LDY1MzU4LDY1MzU5LDY1MzYwLDY1MzYxLDY1MzYyLDY1MzYzLDY1MzY0LDY1MzY1LDY1MzY2''@;'; put 'put ''LDY1MzY3LDY1MzY4LDY1MzY5LDY1MzcwLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUs''@;'; put 'put ''OTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDEyNTQ5LDEyNTUwLDEyNTUxLDEyNTUyLDEyNTUzLDEyNTU0LDEyNTU1LDEyNTU2LDEyNTU3LDEyNTU4LDEyNTU5LDEyNTYwLDEyNTYxLDEyNTYyLDEyNTYzLDEyNTY0LDEyNTY1LDEyNTY2LDEyNTY3''@;'; put 'put ''LDEyNTY4LDEyNTY5LDEyNTcwLDEyNTcxLDEyNTcyLDEyNTczLDEyNTc0LDEyNTc1LDEyNTc2LDEyNTc3LDEyNTc4LDEyNTc5LDEyNTgwLDEyNTgxLDEyNTgyLDEyNTgzLDEyNTg0LDEyNTg1LDcyOSw3MTMsNzE0LDcxMSw3MTUsOTIxNiw5MjE3LDkyMTgsOTIxOSw5MjIwLDkyMjEsOTIyMiw5''@;'; put 'put ''MjIzLDkyMjQsOTIyNSw5MjI2LDkyMjcsOTIyOCw5MjI5LDkyMzAsOTIzMSw5MjMyLDkyMzMsOTIzNCw5MjM1LDkyMzYsOTIzNyw5MjM4LDkyMzksOTI0MCw5MjQxLDkyNDIsOTI0Myw5MjQ0LDkyNDUsOTI0Niw5MjQ3LDkyNDksODM2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTk5NjgsMjAwNTcsMTk5NjksMTk5NzEsMjAwMzUsMjAwNjEsMjAxMDIsMjAxMDgsMjAx''@;'; put 'put ''NTQsMjA3OTksMjA4MzcsMjA4NDMsMjA5NjAsMjA5OTIsMjA5OTMsMjExNDcsMjEyNjksMjEzMTMsMjEzNDAsMjE0NDgsMTk5NzcsMTk5NzksMTk5NzYsMTk5NzgsMjAwMTEsMjAwMjQsMjA5NjEsMjAwMzcsMjAwNDAsMjAwNjMsMjAwNjIsMjAxMTAsMjAxMjksMjA4MDAsMjA5OTUsMjEyNDIs''@;'; put 'put ''MjEzMTUsMjE0NDksMjE0NzUsMjIzMDMsMjI3NjMsMjI4MDUsMjI4MjMsMjI4OTksMjMzNzYsMjMzNzcsMjMzNzksMjM1NDQsMjM1NjcsMjM1ODYsMjM2MDgsMjM2NjUsMjQwMjksMjQwMzcsMjQwNDksMjQwNTAsMjQwNTEsMjQwNjIsMjQxNzgsMjQzMTgsMjQzMzEsMjQzMzksMjUxNjUsMTk5''@;'; put 'put ''ODUsMTk5ODQsMTk5ODEsMjAwMTMsMjAwMTYsMjAwMjUsMjAwNDMsMjM2MDksMjAxMDQsMjAxMTMsMjAxMTcsMjAxMTQsMjAxMTYsMjAxMzAsMjAxNjEsMjAxNjAsMjAxNjMsMjAxNjYsMjAxNjcsMjAxNzMsMjAxNzAsMjAxNzEsMjAxNjQsMjA4MDMsMjA4MDEsMjA4MzksMjA4NDUsMjA4NDYs''@;'; put 'put ''MjA4NDQsMjA4ODcsMjA5ODIsMjA5OTgsMjA5OTksMjFlMywyMTI0MywyMTI0NiwyMTI0NywyMTI3MCwyMTMwNSwyMTMyMCwyMTMxOSwyMTMxNywyMTM0MiwyMTM4MCwyMTQ1MSwyMTQ1MCwyMTQ1MywyMjc2NCwyMjgyNSwyMjgyNywyMjgyNiwyMjgyOSwyMzM4MCwyMzU2OSwyMzU4OCwyMzYx''@;'; put 'put ''MCwyMzY2MywyNDA1MiwyNDE4NywyNDMxOSwyNDM0MCwyNDM0MSwyNDUxNSwyNTA5NiwyNTE0MiwyNTE2MywyNTE2NiwyNTkwMywyNTk5MSwyNjAwNywyNjAyMCwyNjA0MSwyNjA4NSwyNjM1MiwyNjM3NiwyNjQwOCwyNzQyNCwyNzQ5MCwyNzUxMywyNzU5NSwyNzYwNCwyNzYxMSwyNzY2Mywy''@;'; put 'put ''NzcwMCwyODc3OSwyOTIyNiwyOTIzOCwyOTI0MywyOTI1NSwyOTI3MywyOTI3NSwyOTM1NiwyOTU3OSwxOTk5MywxOTk5MCwxOTk4OSwxOTk4OCwxOTk5MiwyMDAyNywyMDA0NSwyMDA0NywyMDA0NiwyMDE5NywyMDE4NCwyMDE4MCwyMDE4MSwyMDE4MiwyMDE4MywyMDE5NSwyMDE5NiwyMDE4''@;'; put 'put ''NSwyMDE5MCwyMDgwNSwyMDgwNCwyMDg3MywyMDg3NCwyMDkwOCwyMDk4NSwyMDk4NiwyMDk4NCwyMTAwMiwyMTE1MiwyMTE1MSwyMTI1MywyMTI1NCwyMTI3MSwyMTI3NywyMDE5MSwyMTMyMiwyMTMyMSwyMTM0NSwyMTM0NCwyMTM1OSwyMTM1OCwyMTQzNSwyMTQ4NywyMTQ3NiwyMTQ5MSwy''@;'; put 'put ''MTQ4NCwyMTQ4NiwyMTQ4MSwyMTQ4MCwyMTUwMCwyMTQ5NiwyMTQ5MywyMTQ4MywyMTQ3OCwyMTQ4MiwyMTQ5MCwyMTQ4OSwyMTQ4OCwyMTQ3NywyMTQ4NSwyMTQ5OSwyMjIzNSwyMjIzNCwyMjgwNiwyMjgzMCwyMjgzMywyMjkwMCwyMjkwMiwyMzM4MSwyMzQyNywyMzYxMiwyNDA0MCwyNDAz''@;'; put 'put ''OSwyNDAzOCwyNDA2NiwyNDA2NywyNDE3OSwyNDE4OCwyNDMyMSwyNDM0NCwyNDM0MywyNDUxNywyNTA5OCwyNTE3MSwyNTE3MiwyNTE3MCwyNTE2OSwyNjAyMSwyNjA4NiwyNjQxNCwyNjQxMiwyNjQxMCwyNjQxMSwyNjQxMywyNzQ5MSwyNzU5NywyNzY2NSwyNzY2NCwyNzcwNCwyNzcxMywy''@;'; put 'put ''NzcxMiwyNzcxMCwyOTM1OSwyOTU3MiwyOTU3NywyOTkxNiwyOTkyNiwyOTk3NiwyOTk4MywyOTk5MiwyOTk5MywzZTQsMzAwMDEsMzAwMDIsMzAwMDMsMzAwOTEsMzAzMzMsMzAzODIsMzAzOTksMzA0NDYsMzA2ODMsMzA2OTAsMzA3MDcsMzEwMzQsMzExNjYsMzEzNDgsMzE0MzUsMTk5OTgs''@;'; put 'put ''MTk5OTksMjAwNTAsMjAwNTEsMjAwNzMsMjAxMjEsMjAxMzIsMjAxMzQsMjAxMzMsMjAyMjMsMjAyMzMsMjAyNDksMjAyMzQsMjAyNDUsMjAyMzcsMjAyNDAsMjAyNDEsMjAyMzksMjAyMTAsMjAyMTQsMjAyMTksMjAyMDgsMjAyMTEsMjAyMjEsMjAyMjUsMjAyMzUsMjA4MDksMjA4MDcsMjA4''@;'; put 'put ''MDYsMjA4MDgsMjA4NDAsMjA4NDksMjA4NzcsMjA5MTIsMjEwMTUsMjEwMDksMjEwMTAsMjEwMDYsMjEwMTQsMjExNTUsMjEyNTYsMjEyODEsMjEyODAsMjEzNjAsMjEzNjEsMjE1MTMsMjE1MTksMjE1MTYsMjE1MTQsMjE1MjAsMjE1MDUsMjE1MTUsMjE1MDgsMjE1MjEsMjE1MTcsMjE1MTIs''@;'; put 'put ''MjE1MDcsMjE1MTgsMjE1MTAsMjE1MjIsMjIyNDAsMjIyMzgsMjIyMzcsMjIzMjMsMjIzMjAsMjIzMTIsMjIzMTcsMjIzMTYsMjIzMTksMjIzMTMsMjI4MDksMjI4MTAsMjI4MzksMjI4NDAsMjI5MTYsMjI5MDQsMjI5MTUsMjI5MDksMjI5MDUsMjI5MTQsMjI5MTMsMjMzODMsMjMzODQsMjM0''@;'; put 'put ''MzEsMjM0MzIsMjM0MjksMjM0MzMsMjM1NDYsMjM1NzQsMjM2NzMsMjQwMzAsMjQwNzAsMjQxODIsMjQxODAsMjQzMzUsMjQzNDcsMjQ1MzcsMjQ1MzQsMjUxMDIsMjUxMDAsMjUxMDEsMjUxMDQsMjUxODcsMjUxNzksMjUxNzYsMjU5MTAsMjYwODksMjYwODgsMjYwOTIsMjYwOTMsMjYzNTQs''@;'; put 'put ''MjYzNTUsMjYzNzcsMjY0MjksMjY0MjAsMjY0MTcsMjY0MjEsMjc0MjUsMjc0OTIsMjc1MTUsMjc2NzAsMjc3NDEsMjc3MzUsMjc3MzcsMjc3NDMsMjc3NDQsMjc3MjgsMjc3MzMsMjc3NDUsMjc3MzksMjc3MjUsMjc3MjYsMjg3ODQsMjkyNzksMjkyNzcsMzAzMzQsMzE0ODEsMzE4NTksMzE5''@;'; put 'put ''OTIsMzI1NjYsMzI2NTAsMzI3MDEsMzI3NjksMzI3NzEsMzI3ODAsMzI3ODYsMzI4MTksMzI4OTUsMzI5MDUsMzI5MDcsMzI5MDgsMzMyNTEsMzMyNTgsMzMyNjcsMzMyNzYsMzMyOTIsMzMzMDcsMzMzMTEsMzMzOTAsMzMzOTQsMzM0MDYsMzQ0MTEsMzQ4ODAsMzQ4OTIsMzQ5MTUsMzUxOTks''@;'; put 'put ''Mzg0MzMsMjAwMTgsMjAxMzYsMjAzMDEsMjAzMDMsMjAyOTUsMjAzMTEsMjAzMTgsMjAyNzYsMjAzMTUsMjAzMDksMjAyNzIsMjAzMDQsMjAzMDUsMjAyODUsMjAyODIsMjAyODAsMjAyOTEsMjAzMDgsMjAyODQsMjAyOTQsMjAzMjMsMjAzMTYsMjAzMjAsMjAyNzEsMjAzMDIsMjAyNzgsMjAz''@;'; put 'put ''MTMsMjAzMTcsMjAyOTYsMjAzMTQsMjA4MTIsMjA4MTEsMjA4MTMsMjA4NTMsMjA5MTgsMjA5MTksMjEwMjksMjEwMjgsMjEwMzMsMjEwMzQsMjEwMzIsMjExNjMsMjExNjEsMjExNjIsMjExNjQsMjEyODMsMjEzNjMsMjEzNjUsMjE1MzMsMjE1NDksMjE1MzQsMjE1NjYsMjE1NDIsMjE1ODIs''@;'; put 'put ''MjE1NDMsMjE1NzQsMjE1NzEsMjE1NTUsMjE1NzYsMjE1NzAsMjE1MzEsMjE1NDUsMjE1NzgsMjE1NjEsMjE1NjMsMjE1NjAsMjE1NTAsMjE1NTcsMjE1NTgsMjE1MzYsMjE1NjQsMjE1NjgsMjE1NTMsMjE1NDcsMjE1MzUsMjE1NDgsMjIyNTAsMjIyNTYsMjIyNDQsMjIyNTEsMjIzNDYsMjIz''@;'; put 'put ''NTMsMjIzMzYsMjIzNDksMjIzNDMsMjIzNTAsMjIzMzQsMjIzNTIsMjIzNTEsMjIzMzEsMjI3NjcsMjI4NDYsMjI5NDEsMjI5MzAsMjI5NTIsMjI5NDIsMjI5NDcsMjI5MzcsMjI5MzQsMjI5MjUsMjI5NDgsMjI5MzEsMjI5MjIsMjI5NDksMjMzODksMjMzODgsMjMzODYsMjMzODcsMjM0MzYs''@;'; put 'put ''MjM0MzUsMjM0MzksMjM1OTYsMjM2MTYsMjM2MTcsMjM2MTUsMjM2MTQsMjM2OTYsMjM2OTcsMjM3MDAsMjM2OTIsMjQwNDMsMjQwNzYsMjQyMDcsMjQxOTksMjQyMDIsMjQzMTEsMjQzMjQsMjQzNTEsMjQ0MjAsMjQ0MTgsMjQ0MzksMjQ0NDEsMjQ1MzYsMjQ1MjQsMjQ1MzUsMjQ1MjUsMjQ1''@;'; put 'put ''NjEsMjQ1NTUsMjQ1NjgsMjQ1NTQsMjUxMDYsMjUxMDUsMjUyMjAsMjUyMzksMjUyMzgsMjUyMTYsMjUyMDYsMjUyMjUsMjUxOTcsMjUyMjYsMjUyMTIsMjUyMTQsMjUyMDksMjUyMDMsMjUyMzQsMjUxOTksMjUyNDAsMjUxOTgsMjUyMzcsMjUyMzUsMjUyMzMsMjUyMjIsMjU5MTMsMjU5MTUs''@;'; put 'put ''MjU5MTIsMjYwOTcsMjYzNTYsMjY0NjMsMjY0NDYsMjY0NDcsMjY0NDgsMjY0NDksMjY0NjAsMjY0NTQsMjY0NjIsMjY0NDEsMjY0MzgsMjY0NjQsMjY0NTEsMjY0NTUsMjc0OTMsMjc1OTksMjc3MTQsMjc3NDIsMjc4MDEsMjc3NzcsMjc3ODQsMjc3ODUsMjc3ODEsMjc4MDMsMjc3NTQsMjc3''@;'; put 'put ''NzAsMjc3OTIsMjc3NjAsMjc3ODgsMjc3NTIsMjc3OTgsMjc3OTQsMjc3NzMsMjc3NzksMjc3NjIsMjc3NzQsMjc3NjQsMjc3ODIsMjc3NjYsMjc3ODksMjc3OTYsMjc4MDAsMjc3NzgsMjg3OTAsMjg3OTYsMjg3OTcsMjg3OTIsMjkyODIsMjkyODEsMjkyODAsMjkzODAsMjkzNzgsMjk1OTAs''@;'; put 'put ''Mjk5OTYsMjk5OTUsMzAwMDcsMzAwMDgsMzAzMzgsMzA0NDcsMzA2OTEsMzExNjksMzExNjgsMzExNjcsMzEzNTAsMzE5OTUsMzI1OTcsMzI5MTgsMzI5MTUsMzI5MjUsMzI5MjAsMzI5MjMsMzI5MjIsMzI5NDYsMzMzOTEsMzM0MjYsMzM0MTksMzM0MjEsMzUyMTEsMzUyODIsMzUzMjgsMzU4''@;'; put 'put ''OTUsMzU5MTAsMzU5MjUsMzU5OTcsMzYxOTYsMzYyMDgsMzYyNzUsMzY1MjMsMzY1NTQsMzY3NjMsMzY3ODQsMzY4MDIsMzY4MDYsMzY4MDUsMzY4MDQsMjQwMzMsMzcwMDksMzcwMjYsMzcwMzQsMzcwMzAsMzcwMjcsMzcxOTMsMzczMTgsMzczMjQsMzg0NTAsMzg0NDYsMzg0NDksMzg0NDIs''@;'; put 'put ''Mzg0NDQsMjAwMDYsMjAwNTQsMjAwODMsMjAxMDcsMjAxMjMsMjAxMjYsMjAxMzksMjAxNDAsMjAzMzUsMjAzODEsMjAzNjUsMjAzMzksMjAzNTEsMjAzMzIsMjAzNzksMjAzNjMsMjAzNTgsMjAzNTUsMjAzMzYsMjAzNDEsMjAzNjAsMjAzMjksMjAzNDcsMjAzNzQsMjAzNTAsMjAzNjcsMjAz''@;'; put 'put ''NjksMjAzNDYsMjA4MjAsMjA4MTgsMjA4MjEsMjA4NDEsMjA4NTUsMjA4NTQsMjA4NTYsMjA5MjUsMjA5ODksMjEwNTEsMjEwNDgsMjEwNDcsMjEwNTAsMjEwNDAsMjEwMzgsMjEwNDYsMjEwNTcsMjExODIsMjExNzksMjEzMzAsMjEzMzIsMjEzMzEsMjEzMjksMjEzNTAsMjEzNjcsMjEzNjgs''@;'; put 'put ''MjEzNjksMjE0NjIsMjE0NjAsMjE0NjMsMjE2MTksMjE2MjEsMjE2NTQsMjE2MjQsMjE2NTMsMjE2MzIsMjE2MjcsMjE2MjMsMjE2MzYsMjE2NTAsMjE2MzgsMjE2MjgsMjE2NDgsMjE2MTcsMjE2MjIsMjE2NDQsMjE2NTgsMjE2MDIsMjE2MDgsMjE2NDMsMjE2MjksMjE2NDYsMjIyNjYsMjI0''@;'; put 'put ''MDMsMjIzOTEsMjIzNzgsMjIzNzcsMjIzNjksMjIzNzQsMjIzNzIsMjIzOTYsMjI4MTIsMjI4NTcsMjI4NTUsMjI4NTYsMjI4NTIsMjI4NjgsMjI5NzQsMjI5NzEsMjI5OTYsMjI5NjksMjI5NTgsMjI5OTMsMjI5ODIsMjI5OTIsMjI5ODksMjI5ODcsMjI5OTUsMjI5ODYsMjI5NTksMjI5NjMs''@;'; put 'put ''MjI5OTQsMjI5ODEsMjMzOTEsMjMzOTYsMjMzOTUsMjM0NDcsMjM0NTAsMjM0NDgsMjM0NTIsMjM0NDksMjM0NTEsMjM1NzgsMjM2MjQsMjM2MjEsMjM2MjIsMjM3MzUsMjM3MTMsMjM3MzYsMjM3MjEsMjM3MjMsMjM3MjksMjM3MzEsMjQwODgsMjQwOTAsMjQwODYsMjQwODUsMjQwOTEsMjQw''@;'; put 'put ''ODEsMjQxODQsMjQyMTgsMjQyMTUsMjQyMjAsMjQyMTMsMjQyMTQsMjQzMTAsMjQzNTgsMjQzNTksMjQzNjEsMjQ0NDgsMjQ0NDksMjQ0NDcsMjQ0NDQsMjQ1NDEsMjQ1NDQsMjQ1NzMsMjQ1NjUsMjQ1NzUsMjQ1OTEsMjQ1OTYsMjQ2MjMsMjQ2MjksMjQ1OTgsMjQ2MTgsMjQ1OTcsMjQ2MDks''@;'; put 'put ''MjQ2MTUsMjQ2MTcsMjQ2MTksMjQ2MDMsMjUxMTAsMjUxMDksMjUxNTEsMjUxNTAsMjUxNTIsMjUyMTUsMjUyODksMjUyOTIsMjUyODQsMjUyNzksMjUyODIsMjUyNzMsMjUyOTgsMjUzMDcsMjUyNTksMjUyOTksMjUzMDAsMjUyOTEsMjUyODgsMjUyNTYsMjUyNzcsMjUyNzYsMjUyOTYsMjUz''@;'; put 'put ''MDUsMjUyODcsMjUyOTMsMjUyNjksMjUzMDYsMjUyNjUsMjUzMDQsMjUzMDIsMjUzMDMsMjUyODYsMjUyNjAsMjUyOTQsMjU5MTgsMjYwMjMsMjYwNDQsMjYxMDYsMjYxMzIsMjYxMzEsMjYxMjQsMjYxMTgsMjYxMTQsMjYxMjYsMjYxMTIsMjYxMjcsMjYxMzMsMjYxMjIsMjYxMTksMjYzODEs''@;'; put 'put ''MjYzNzksMjY0NzcsMjY1MDcsMjY1MTcsMjY0ODEsMjY1MjQsMjY0ODMsMjY0ODcsMjY1MDMsMjY1MjUsMjY1MTksMjY0NzksMjY0ODAsMjY0OTUsMjY1MDUsMjY0OTQsMjY1MTIsMjY0ODUsMjY1MjIsMjY1MTUsMjY0OTIsMjY0NzQsMjY0ODIsMjc0MjcsMjc0OTQsMjc0OTUsMjc1MTksMjc2''@;'; put 'put ''NjcsMjc2NzUsMjc4NzUsMjc4ODAsMjc4OTEsMjc4MjUsMjc4NTIsMjc4NzcsMjc4MjcsMjc4MzcsMjc4MzgsMjc4MzYsMjc4NzQsMjc4MTksMjc4NjEsMjc4NTksMjc4MzIsMjc4NDQsMjc4MzMsMjc4NDEsMjc4MjIsMjc4NjMsMjc4NDUsMjc4ODksMjc4MzksMjc4MzUsMjc4NzMsMjc4Njcs''@;'; put 'put ''Mjc4NTAsMjc4MjAsMjc4ODcsMjc4NjgsMjc4NjIsMjc4NzIsMjg4MjEsMjg4MTQsMjg4MTgsMjg4MTAsMjg4MjUsMjkyMjgsMjkyMjksMjkyNDAsMjkyNTYsMjkyODcsMjkyODksMjkzNzYsMjkzOTAsMjk0MDEsMjkzOTksMjkzOTIsMjk2MDksMjk2MDgsMjk1OTksMjk2MTEsMjk2MDUsMzAw''@;'; put 'put ''MTMsMzAxMDksMzAxMDUsMzAxMDYsMzAzNDAsMzA0MDIsMzA0NTAsMzA0NTIsMzA2OTMsMzA3MTcsMzEwMzgsMzEwNDAsMzEwNDEsMzExNzcsMzExNzYsMzEzNTQsMzEzNTMsMzE0ODIsMzE5OTgsMzI1OTYsMzI2NTIsMzI2NTEsMzI3NzMsMzI5NTQsMzI5MzMsMzI5MzAsMzI5NDUsMzI5Mjks''@;'; put 'put ''MzI5MzksMzI5MzcsMzI5NDgsMzI5MzgsMzI5NDMsMzMyNTMsMzMyNzgsMzMyOTMsMzM0NTksMzM0MzcsMzM0MzMsMzM0NTMsMzM0NjksMzM0MzksMzM0NjUsMzM0NTcsMzM0NTIsMzM0NDUsMzM0NTUsMzM0NjQsMzM0NDMsMzM0NTYsMzM0NzAsMzM0NjMsMzQzODIsMzQ0MTcsMjEwMjEsMzQ5''@;'; put 'put ''MjAsMzY1NTUsMzY4MTQsMzY4MjAsMzY4MTcsMzcwNDUsMzcwNDgsMzcwNDEsMzcwNDYsMzczMTksMzczMjksMzgyNjMsMzgyNzIsMzg0MjgsMzg0NjQsMzg0NjMsMzg0NTksMzg0NjgsMzg0NjYsMzg1ODUsMzg2MzIsMzg3MzgsMzg3NTAsMjAxMjcsMjAxNDEsMjAxNDIsMjA0NDksMjA0MDUs''@;'; put 'put ''MjAzOTksMjA0MTUsMjA0NDgsMjA0MzMsMjA0MzEsMjA0NDUsMjA0MTksMjA0MDYsMjA0NDAsMjA0NDcsMjA0MjYsMjA0MzksMjAzOTgsMjA0MzIsMjA0MjAsMjA0MTgsMjA0NDIsMjA0MzAsMjA0NDYsMjA0MDcsMjA4MjMsMjA4ODIsMjA4ODEsMjA4OTYsMjEwNzAsMjEwNTksMjEwNjYsMjEw''@;'; put 'put ''NjksMjEwNjgsMjEwNjcsMjEwNjMsMjExOTEsMjExOTMsMjExODcsMjExODUsMjEyNjEsMjEzMzUsMjEzNzEsMjE0MDIsMjE0NjcsMjE2NzYsMjE2OTYsMjE2NzIsMjE3MTAsMjE3MDUsMjE2ODgsMjE2NzAsMjE2ODMsMjE3MDMsMjE2OTgsMjE2OTMsMjE2NzQsMjE2OTcsMjE3MDAsMjE3MDQs''@;'; put 'put ''MjE2NzksMjE2NzUsMjE2ODEsMjE2OTEsMjE2NzMsMjE2NzEsMjE2OTUsMjIyNzEsMjI0MDIsMjI0MTEsMjI0MzIsMjI0MzUsMjI0MzQsMjI0NzgsMjI0NDYsMjI0MTksMjI4NjksMjI4NjUsMjI4NjMsMjI4NjIsMjI4NjQsMjMwMDQsMjNlMywyMzAzOSwyMzAxMSwyMzAxNiwyMzA0MywyMzAx''@;'; put 'put ''MywyMzAxOCwyMzAwMiwyMzAxNCwyMzA0MSwyMzAzNSwyMzQwMSwyMzQ1OSwyMzQ2MiwyMzQ2MCwyMzQ1OCwyMzQ2MSwyMzU1MywyMzYzMCwyMzYzMSwyMzYyOSwyMzYyNywyMzc2OSwyMzc2MiwyNDA1NSwyNDA5MywyNDEwMSwyNDA5NSwyNDE4OSwyNDIyNCwyNDIzMCwyNDMxNCwyNDMyOCwy''@;'; put 'put ''NDM2NSwyNDQyMSwyNDQ1NiwyNDQ1MywyNDQ1OCwyNDQ1OSwyNDQ1NSwyNDQ2MCwyNDQ1NywyNDU5NCwyNDYwNSwyNDYwOCwyNDYxMywyNDU5MCwyNDYxNiwyNDY1MywyNDY4OCwyNDY4MCwyNDY3NCwyNDY0NiwyNDY0MywyNDY4NCwyNDY4MywyNDY4MiwyNDY3NiwyNTE1MywyNTMwOCwyNTM2''@;'; put 'put ''NiwyNTM1MywyNTM0MCwyNTMyNSwyNTM0NSwyNTMyNiwyNTM0MSwyNTM1MSwyNTMyOSwyNTMzNSwyNTMyNywyNTMyNCwyNTM0MiwyNTMzMiwyNTM2MSwyNTM0NiwyNTkxOSwyNTkyNSwyNjAyNywyNjA0NSwyNjA4MiwyNjE0OSwyNjE1NywyNjE0NCwyNjE1MSwyNjE1OSwyNjE0MywyNjE1Miwy''@;'; put 'put ''NjE2MSwyNjE0OCwyNjM1OSwyNjYyMywyNjU3OSwyNjYwOSwyNjU4MCwyNjU3NiwyNjYwNCwyNjU1MCwyNjU0MywyNjYxMywyNjYwMSwyNjYwNywyNjU2NCwyNjU3NywyNjU0OCwyNjU4NiwyNjU5NywyNjU1MiwyNjU3NSwyNjU5MCwyNjYxMSwyNjU0NCwyNjU4NSwyNjU5NCwyNjU4OSwyNjU3''@;'; put 'put ''OCwyNzQ5OCwyNzUyMywyNzUyNiwyNzU3MywyNzYwMiwyNzYwNywyNzY3OSwyNzg0OSwyNzkxNSwyNzk1NCwyNzk0NiwyNzk2OSwyNzk0MSwyNzkxNiwyNzk1MywyNzkzNCwyNzkyNywyNzk2MywyNzk2NSwyNzk2NiwyNzk1OCwyNzkzMSwyNzg5MywyNzk2MSwyNzk0MywyNzk2MCwyNzk0NSwy''@;'; put 'put ''Nzk1MCwyNzk1NywyNzkxOCwyNzk0NywyODg0MywyODg1OCwyODg1MSwyODg0NCwyODg0NywyODg0NSwyODg1NiwyODg0NiwyODgzNiwyOTIzMiwyOTI5OCwyOTI5NSwyOTMwMCwyOTQxNywyOTQwOCwyOTQwOSwyOTYyMywyOTY0MiwyOTYyNywyOTYxOCwyOTY0NSwyOTYzMiwyOTYxOSwyOTk3''@;'; put 'put ''OCwyOTk5NywzMDAzMSwzMDAyOCwzMDAzMCwzMDAyNywzMDEyMywzMDExNiwzMDExNywzMDExNCwzMDExNSwzMDMyOCwzMDM0MiwzMDM0MywzMDM0NCwzMDQwOCwzMDQwNiwzMDQwMywzMDQwNSwzMDQ2NSwzMDQ1NywzMDQ1NiwzMDQ3MywzMDQ3NSwzMDQ2MiwzMDQ2MCwzMDQ3MSwzMDY4NCwz''@;'; put 'put ''MDcyMiwzMDc0MCwzMDczMiwzMDczMywzMTA0NiwzMTA0OSwzMTA0OCwzMTA0NywzMTE2MSwzMTE2MiwzMTE4NSwzMTE4NiwzMTE3OSwzMTM1OSwzMTM2MSwzMTQ4NywzMTQ4NSwzMTg2OSwzMjAwMiwzMjAwNSwzMmUzLDMyMDA5LDMyMDA3LDMyMDA0LDMyMDA2LDMyNTY4LDMyNjU0LDMyNzAz''@;'; put 'put ''LDMyNzcyLDMyNzg0LDMyNzgxLDMyNzg1LDMyODIyLDMyOTgyLDMyOTk3LDMyOTg2LDMyOTYzLDMyOTY0LDMyOTcyLDMyOTkzLDMyOTg3LDMyOTc0LDMyOTkwLDMyOTk2LDMyOTg5LDMzMjY4LDMzMzE0LDMzNTExLDMzNTM5LDMzNTQxLDMzNTA3LDMzNDk5LDMzNTEwLDMzNTQwLDMzNTA5LDMz''@;'; put 'put ''NTM4LDMzNTQ1LDMzNDkwLDMzNDk1LDMzNTIxLDMzNTM3LDMzNTAwLDMzNDkyLDMzNDg5LDMzNTAyLDMzNDkxLDMzNTAzLDMzNTE5LDMzNTQyLDM0Mzg0LDM0NDI1LDM0NDI3LDM0NDI2LDM0ODkzLDM0OTIzLDM1MjAxLDM1Mjg0LDM1MzM2LDM1MzMwLDM1MzMxLDM1OTk4LDM2ZTMsMzYyMTIs''@;'; put 'put ''MzYyMTEsMzYyNzYsMzY1NTcsMzY1NTYsMzY4NDgsMzY4MzgsMzY4MzQsMzY4NDIsMzY4MzcsMzY4NDUsMzY4NDMsMzY4MzYsMzY4NDAsMzcwNjYsMzcwNzAsMzcwNTcsMzcwNTksMzcxOTUsMzcxOTQsMzczMjUsMzgyNzQsMzg0ODAsMzg0NzUsMzg0NzYsMzg0NzcsMzg3NTQsMzg3NjEsMzg4''@;'; put 'put ''NTksMzg4OTMsMzg4OTksMzg5MTMsMzkwODAsMzkxMzEsMzkxMzUsMzkzMTgsMzkzMjEsMjAwNTYsMjAxNDcsMjA0OTIsMjA0OTMsMjA1MTUsMjA0NjMsMjA1MTgsMjA1MTcsMjA0NzIsMjA1MjEsMjA1MDIsMjA0ODYsMjA1NDAsMjA1MTEsMjA1MDYsMjA0OTgsMjA0OTcsMjA0NzQsMjA0ODAs''@;'; put 'put ''MjA1MDAsMjA1MjAsMjA0NjUsMjA1MTMsMjA0OTEsMjA1MDUsMjA1MDQsMjA0NjcsMjA0NjIsMjA1MjUsMjA1MjIsMjA0NzgsMjA1MjMsMjA0ODksMjA4NjAsMjA5MDAsMjA5MDEsMjA4OTgsMjA5NDEsMjA5NDAsMjA5MzQsMjA5MzksMjEwNzgsMjEwODQsMjEwNzYsMjEwODMsMjEwODUsMjEy''@;'; put 'put ''OTAsMjEzNzUsMjE0MDcsMjE0MDUsMjE0NzEsMjE3MzYsMjE3NzYsMjE3NjEsMjE4MTUsMjE3NTYsMjE3MzMsMjE3NDYsMjE3NjYsMjE3NTQsMjE3ODAsMjE3MzcsMjE3NDEsMjE3MjksMjE3NjksMjE3NDIsMjE3MzgsMjE3MzQsMjE3OTksMjE3NjcsMjE3NTcsMjE3NzUsMjIyNzUsMjIyNzYs''@;'; put 'put ''MjI0NjYsMjI0ODQsMjI0NzUsMjI0NjcsMjI1MzcsMjI3OTksMjI4NzEsMjI4NzIsMjI4NzQsMjMwNTcsMjMwNjQsMjMwNjgsMjMwNzEsMjMwNjcsMjMwNTksMjMwMjAsMjMwNzIsMjMwNzUsMjMwODEsMjMwNzcsMjMwNTIsMjMwNDksMjM0MDMsMjM2NDAsMjM0NzIsMjM0NzUsMjM0NzgsMjM0''@;'; put 'put ''NzYsMjM0NzAsMjM0NzcsMjM0ODEsMjM0ODAsMjM1NTYsMjM2MzMsMjM2MzcsMjM2MzIsMjM3ODksMjM4MDUsMjM4MDMsMjM3ODYsMjM3ODQsMjM3OTIsMjM3OTgsMjM4MDksMjM3OTYsMjQwNDYsMjQxMDksMjQxMDcsMjQyMzUsMjQyMzcsMjQyMzEsMjQzNjksMjQ0NjYsMjQ0NjUsMjQ0NjQs''@;'; put 'put ''MjQ2NjUsMjQ2NzUsMjQ2NzcsMjQ2NTYsMjQ2NjEsMjQ2ODUsMjQ2ODEsMjQ2ODcsMjQ3MDgsMjQ3MzUsMjQ3MzAsMjQ3MTcsMjQ3MjQsMjQ3MTYsMjQ3MDksMjQ3MjYsMjUxNTksMjUzMzEsMjUzNTIsMjUzNDMsMjU0MjIsMjU0MDYsMjUzOTEsMjU0MjksMjU0MTAsMjU0MTQsMjU0MjMsMjU0''@;'; put 'put ''MTcsMjU0MDIsMjU0MjQsMjU0MDUsMjUzODYsMjUzODcsMjUzODQsMjU0MjEsMjU0MjAsMjU5MjgsMjU5MjksMjYwMDksMjYwNDksMjYwNTMsMjYxNzgsMjYxODUsMjYxOTEsMjYxNzksMjYxOTQsMjYxODgsMjYxODEsMjYxNzcsMjYzNjAsMjYzODgsMjYzODksMjYzOTEsMjY2NTcsMjY2ODAs''@;'; put 'put ''MjY2OTYsMjY2OTQsMjY3MDcsMjY2ODEsMjY2OTAsMjY3MDgsMjY2NjUsMjY4MDMsMjY2NDcsMjY3MDAsMjY3MDUsMjY2ODUsMjY2MTIsMjY3MDQsMjY2ODgsMjY2ODQsMjY2OTEsMjY2NjYsMjY2OTMsMjY2NDMsMjY2NDgsMjY2ODksMjc1MzAsMjc1MjksMjc1NzUsMjc2ODMsMjc2ODcsMjc2''@;'; put 'put ''ODgsMjc2ODYsMjc2ODQsMjc4ODgsMjgwMTAsMjgwNTMsMjgwNDAsMjgwMzksMjgwMDYsMjgwMjQsMjgwMjMsMjc5OTMsMjgwNTEsMjgwMTIsMjgwNDEsMjgwMTQsMjc5OTQsMjgwMjAsMjgwMDksMjgwNDQsMjgwNDIsMjgwMjUsMjgwMzcsMjgwMDUsMjgwNTIsMjg4NzQsMjg4ODgsMjg5MDAs''@;'; put 'put ''Mjg4ODksMjg4NzIsMjg4NzksMjkyNDEsMjkzMDUsMjk0MzYsMjk0MzMsMjk0MzcsMjk0MzIsMjk0MzEsMjk1NzQsMjk2NzcsMjk3MDUsMjk2NzgsMjk2NjQsMjk2NzQsMjk2NjIsMzAwMzYsMzAwNDUsMzAwNDQsMzAwNDIsMzAwNDEsMzAxNDIsMzAxNDksMzAxNTEsMzAxMzAsMzAxMzEsMzAx''@;'; put 'put ''NDEsMzAxNDAsMzAxMzcsMzAxNDYsMzAxMzYsMzAzNDcsMzAzODQsMzA0MTAsMzA0MTMsMzA0MTQsMzA1MDUsMzA0OTUsMzA0OTYsMzA1MDQsMzA2OTcsMzA3NjgsMzA3NTksMzA3NzYsMzA3NDksMzA3NzIsMzA3NzUsMzA3NTcsMzA3NjUsMzA3NTIsMzA3NTEsMzA3NzAsMzEwNjEsMzEwNTYs''@;'; put 'put ''MzEwNzIsMzEwNzEsMzEwNjIsMzEwNzAsMzEwNjksMzEwNjMsMzEwNjYsMzEyMDQsMzEyMDMsMzEyMDcsMzExOTksMzEyMDYsMzEyMDksMzExOTIsMzEzNjQsMzEzNjgsMzE0NDksMzE0OTQsMzE1MDUsMzE4ODEsMzIwMzMsMzIwMjMsMzIwMTEsMzIwMTAsMzIwMzIsMzIwMzQsMzIwMjAsMzIw''@;'; put 'put ''MTYsMzIwMjEsMzIwMjYsMzIwMjgsMzIwMTMsMzIwMjUsMzIwMjcsMzI1NzAsMzI2MDcsMzI2NjAsMzI3MDksMzI3MDUsMzI3NzQsMzI3OTIsMzI3ODksMzI3OTMsMzI3OTEsMzI4MjksMzI4MzEsMzMwMDksMzMwMjYsMzMwMDgsMzMwMjksMzMwMDUsMzMwMTIsMzMwMzAsMzMwMTYsMzMwMTEs''@;'; put 'put ''MzMwMzIsMzMwMjEsMzMwMzQsMzMwMjAsMzMwMDcsMzMyNjEsMzMyNjAsMzMyODAsMzMyOTYsMzMzMjIsMzMzMjMsMzMzMjAsMzMzMjQsMzM0NjcsMzM1NzksMzM2MTgsMzM2MjAsMzM2MTAsMzM1OTIsMzM2MTYsMzM2MDksMzM1ODksMzM1ODgsMzM2MTUsMzM1ODYsMzM1OTMsMzM1OTAsMzM1''@;'; put 'put ''NTksMzM2MDAsMzM1ODUsMzM1NzYsMzM2MDMsMzQzODgsMzQ0NDIsMzQ0NzQsMzQ0NTEsMzQ0NjgsMzQ0NzMsMzQ0NDQsMzQ0NjcsMzQ0NjAsMzQ5MjgsMzQ5MzUsMzQ5NDUsMzQ5NDYsMzQ5NDEsMzQ5MzcsMzUzNTIsMzUzNDQsMzUzNDIsMzUzNDAsMzUzNDksMzUzMzgsMzUzNTEsMzUzNDcs''@;'; put 'put ''MzUzNTAsMzUzNDMsMzUzNDUsMzU5MTIsMzU5NjIsMzU5NjEsMzYwMDEsMzYwMDIsMzYyMTUsMzY1MjQsMzY1NjIsMzY1NjQsMzY1NTksMzY3ODUsMzY4NjUsMzY4NzAsMzY4NTUsMzY4NjQsMzY4NTgsMzY4NTIsMzY4NjcsMzY4NjEsMzY4NjksMzY4NTYsMzcwMTMsMzcwODksMzcwODUsMzcw''@;'; put 'put ''OTAsMzcyMDIsMzcxOTcsMzcxOTYsMzczMzYsMzczNDEsMzczMzUsMzczNDAsMzczMzcsMzgyNzUsMzg0OTgsMzg0OTksMzg0OTcsMzg0OTEsMzg0OTMsMzg1MDAsMzg0ODgsMzg0OTQsMzg1ODcsMzkxMzgsMzkzNDAsMzk1OTIsMzk2NDAsMzk3MTcsMzk3MzAsMzk3NDAsMjAwOTQsMjA2MDIs''@;'; put 'put ''MjA2MDUsMjA1NzIsMjA1NTEsMjA1NDcsMjA1NTYsMjA1NzAsMjA1NTMsMjA1ODEsMjA1OTgsMjA1NTgsMjA1NjUsMjA1OTcsMjA1OTYsMjA1OTksMjA1NTksMjA0OTUsMjA1OTEsMjA1ODksMjA4MjgsMjA4ODUsMjA5NzYsMjEwOTgsMjExMDMsMjEyMDIsMjEyMDksMjEyMDgsMjEyMDUsMjEy''@;'; put 'put ''NjQsMjEyNjMsMjEyNzMsMjEzMTEsMjEzMTIsMjEzMTAsMjE0NDMsMjYzNjQsMjE4MzAsMjE4NjYsMjE4NjIsMjE4MjgsMjE4NTQsMjE4NTcsMjE4MjcsMjE4MzQsMjE4MDksMjE4NDYsMjE4MzksMjE4NDUsMjE4MDcsMjE4NjAsMjE4MTYsMjE4MDYsMjE4NTIsMjE4MDQsMjE4NTksMjE4MTEs''@;'; put 'put ''MjE4MjUsMjE4NDcsMjIyODAsMjIyODMsMjIyODEsMjI0OTUsMjI1MzMsMjI1MzgsMjI1MzQsMjI0OTYsMjI1MDAsMjI1MjIsMjI1MzAsMjI1ODEsMjI1MTksMjI1MjEsMjI4MTYsMjI4ODIsMjMwOTQsMjMxMDUsMjMxMTMsMjMxNDIsMjMxNDYsMjMxMDQsMjMxMDAsMjMxMzgsMjMxMzAsMjMx''@;'; put 'put ''MTAsMjMxMTQsMjM0MDgsMjM0OTUsMjM0OTMsMjM0OTIsMjM0OTAsMjM0ODcsMjM0OTQsMjM1NjEsMjM1NjAsMjM1NTksMjM2NDgsMjM2NDQsMjM2NDUsMjM4MTUsMjM4MTQsMjM4MjIsMjM4MzUsMjM4MzAsMjM4NDIsMjM4MjUsMjM4NDksMjM4MjgsMjM4MzMsMjM4NDQsMjM4NDcsMjM4MzEs''@;'; put 'put ''MjQwMzQsMjQxMjAsMjQxMTgsMjQxMTUsMjQxMTksMjQyNDcsMjQyNDgsMjQyNDYsMjQyNDUsMjQyNTQsMjQzNzMsMjQzNzUsMjQ0MDcsMjQ0MjgsMjQ0MjUsMjQ0MjcsMjQ0NzEsMjQ0NzMsMjQ0NzgsMjQ0NzIsMjQ0ODEsMjQ0ODAsMjQ0NzYsMjQ3MDMsMjQ3MzksMjQ3MTMsMjQ3MzYsMjQ3''@;'; put 'put ''NDQsMjQ3NzksMjQ3NTYsMjQ4MDYsMjQ3NjUsMjQ3NzMsMjQ3NjMsMjQ3NTcsMjQ3OTYsMjQ3NjQsMjQ3OTIsMjQ3ODksMjQ3NzQsMjQ3OTksMjQ3NjAsMjQ3OTQsMjQ3NzUsMjUxMTQsMjUxMTUsMjUxNjAsMjU1MDQsMjU1MTEsMjU0NTgsMjU0OTQsMjU1MDYsMjU1MDksMjU0NjMsMjU0NDcs''@;'; put 'put ''MjU0OTYsMjU1MTQsMjU0NTcsMjU1MTMsMjU0ODEsMjU0NzUsMjU0OTksMjU0NTEsMjU1MTIsMjU0NzYsMjU0ODAsMjU0OTcsMjU1MDUsMjU1MTYsMjU0OTAsMjU0ODcsMjU0NzIsMjU0NjcsMjU0NDksMjU0NDgsMjU0NjYsMjU5NDksMjU5NDIsMjU5MzcsMjU5NDUsMjU5NDMsMjE4NTUsMjU5''@;'; put 'put ''MzUsMjU5NDQsMjU5NDEsMjU5NDAsMjYwMTIsMjYwMTEsMjYwMjgsMjYwNjMsMjYwNTksMjYwNjAsMjYwNjIsMjYyMDUsMjYyMDIsMjYyMTIsMjYyMTYsMjYyMTQsMjYyMDYsMjYzNjEsMjEyMDcsMjYzOTUsMjY3NTMsMjY3OTksMjY3ODYsMjY3NzEsMjY4MDUsMjY3NTEsMjY3NDIsMjY4MDEs''@;'; put 'put ''MjY3OTEsMjY3NzUsMjY4MDAsMjY3NTUsMjY4MjAsMjY3OTcsMjY3NTgsMjY3NTcsMjY3NzIsMjY3ODEsMjY3OTIsMjY3ODMsMjY3ODUsMjY3NTQsMjc0NDIsMjc1NzgsMjc2MjcsMjc2MjgsMjc2OTEsMjgwNDYsMjgwOTIsMjgxNDcsMjgxMjEsMjgwODIsMjgxMjksMjgxMDgsMjgxMzIsMjgx''@;'; put 'put ''NTUsMjgxNTQsMjgxNjUsMjgxMDMsMjgxMDcsMjgwNzksMjgxMTMsMjgwNzgsMjgxMjYsMjgxNTMsMjgwODgsMjgxNTEsMjgxNDksMjgxMDEsMjgxMTQsMjgxODYsMjgwODUsMjgxMjIsMjgxMzksMjgxMjAsMjgxMzgsMjgxNDUsMjgxNDIsMjgxMzYsMjgxMDIsMjgxMDAsMjgwNzQsMjgxNDAs''@;'; put 'put ''MjgwOTUsMjgxMzQsMjg5MjEsMjg5MzcsMjg5MzgsMjg5MjUsMjg5MTEsMjkyNDUsMjkzMDksMjkzMTMsMjk0NjgsMjk0NjcsMjk0NjIsMjk0NTksMjk0NjUsMjk1NzUsMjk3MDEsMjk3MDYsMjk2OTksMjk3MDIsMjk2OTQsMjk3MDksMjk5MjAsMjk5NDIsMjk5NDMsMjk5ODAsMjk5ODYsMzAw''@;'; put 'put ''NTMsMzAwNTQsMzAwNTAsMzAwNjQsMzAwOTUsMzAxNjQsMzAxNjUsMzAxMzMsMzAxNTQsMzAxNTcsMzAzNTAsMzA0MjAsMzA0MTgsMzA0MjcsMzA1MTksMzA1MjYsMzA1MjQsMzA1MTgsMzA1MjAsMzA1MjIsMzA4MjcsMzA3ODcsMzA3OTgsMzEwNzcsMzEwODAsMzEwODUsMzEyMjcsMzEzNzgs''@;'; put 'put ''MzEzODEsMzE1MjAsMzE1MjgsMzE1MTUsMzE1MzIsMzE1MjYsMzE1MTMsMzE1MTgsMzE1MzQsMzE4OTAsMzE4OTUsMzE4OTMsMzIwNzAsMzIwNjcsMzIxMTMsMzIwNDYsMzIwNTcsMzIwNjAsMzIwNjQsMzIwNDgsMzIwNTEsMzIwNjgsMzIwNDcsMzIwNjYsMzIwNTAsMzIwNDksMzI1NzMsMzI2''@;'; put 'put ''NzAsMzI2NjYsMzI3MTYsMzI3MTgsMzI3MjIsMzI3OTYsMzI4NDIsMzI4MzgsMzMwNzEsMzMwNDYsMzMwNTksMzMwNjcsMzMwNjUsMzMwNzIsMzMwNjAsMzMyODIsMzMzMzMsMzMzMzUsMzMzMzQsMzMzMzcsMzM2NzgsMzM2OTQsMzM2ODgsMzM2NTYsMzM2OTgsMzM2ODYsMzM3MjUsMzM3MDcs''@;'; put 'put ''MzM2ODIsMzM2NzQsMzM2ODMsMzM2NzMsMzM2OTYsMzM2NTUsMzM2NTksMzM2NjAsMzM2NzAsMzM3MDMsMzQzODksMjQ0MjYsMzQ1MDMsMzQ0OTYsMzQ0ODYsMzQ1MDAsMzQ0ODUsMzQ1MDIsMzQ1MDcsMzQ0ODEsMzQ0NzksMzQ1MDUsMzQ4OTksMzQ5NzQsMzQ5NTIsMzQ5ODcsMzQ5NjIsMzQ5''@;'; put 'put ''NjYsMzQ5NTcsMzQ5NTUsMzUyMTksMzUyMTUsMzUzNzAsMzUzNTcsMzUzNjMsMzUzNjUsMzUzNzcsMzUzNzMsMzUzNTksMzUzNTUsMzUzNjIsMzU5MTMsMzU5MzAsMzYwMDksMzYwMTIsMzYwMTEsMzYwMDgsMzYwMTAsMzYwMDcsMzYxOTksMzYxOTgsMzYyODYsMzYyODIsMzY1NzEsMzY1NzUs''@;'; put 'put ''MzY4ODksMzY4NzcsMzY4OTAsMzY4ODcsMzY4OTksMzY4OTUsMzY4OTMsMzY4ODAsMzY4ODUsMzY4OTQsMzY4OTYsMzY4NzksMzY4OTgsMzY4ODYsMzY4OTEsMzY4ODQsMzcwOTYsMzcxMDEsMzcxMTcsMzcyMDcsMzczMjYsMzczNjUsMzczNTAsMzczNDcsMzczNTEsMzczNTcsMzczNTMsMzgy''@;'; put 'put ''ODEsMzg1MDYsMzg1MTcsMzg1MTUsMzg1MjAsMzg1MTIsMzg1MTYsMzg1MTgsMzg1MTksMzg1MDgsMzg1OTIsMzg2MzQsMzg2MzMsMzE0NTYsMzE0NTUsMzg5MTQsMzg5MTUsMzk3NzAsNDAxNjUsNDA1NjUsNDA1NzUsNDA2MTMsNDA2MzUsMjA2NDIsMjA2MjEsMjA2MTMsMjA2MzMsMjA2MjUs''@;'; put 'put ''MjA2MDgsMjA2MzAsMjA2MzIsMjA2MzQsMjYzNjgsMjA5NzcsMjExMDYsMjExMDgsMjExMDksMjEwOTcsMjEyMTQsMjEyMTMsMjEyMTEsMjEzMzgsMjE0MTMsMjE4ODMsMjE4ODgsMjE5MjcsMjE4ODQsMjE4OTgsMjE5MTcsMjE5MTIsMjE4OTAsMjE5MTYsMjE5MzAsMjE5MDgsMjE4OTUsMjE4''@;'; put 'put ''OTksMjE4OTEsMjE5MzksMjE5MzQsMjE5MTksMjE4MjIsMjE5MzgsMjE5MTQsMjE5NDcsMjE5MzIsMjE5MzcsMjE4ODYsMjE4OTcsMjE5MzEsMjE5MTMsMjIyODUsMjI1NzUsMjI1NzAsMjI1ODAsMjI1NjQsMjI1NzYsMjI1NzcsMjI1NjEsMjI1NTcsMjI1NjAsMjI3NzcsMjI3NzgsMjI4ODAs''@;'; put 'put ''MjMxNTksMjMxOTQsMjMxNjcsMjMxODYsMjMxOTUsMjMyMDcsMjM0MTEsMjM0MDksMjM1MDYsMjM1MDAsMjM1MDcsMjM1MDQsMjM1NjIsMjM1NjMsMjM2MDEsMjM4ODQsMjM4ODgsMjM4NjAsMjM4NzksMjQwNjEsMjQxMzMsMjQxMjUsMjQxMjgsMjQxMzEsMjQxOTAsMjQyNjYsMjQyNTcsMjQy''@;'; put 'put ''NTgsMjQyNjAsMjQzODAsMjQ0MjksMjQ0ODksMjQ0OTAsMjQ0ODgsMjQ3ODUsMjQ4MDEsMjQ3NTQsMjQ3NTgsMjQ4MDAsMjQ4NjAsMjQ4NjcsMjQ4MjYsMjQ4NTMsMjQ4MTYsMjQ4MjcsMjQ4MjAsMjQ5MzYsMjQ4MTcsMjQ4NDYsMjQ4MjIsMjQ4NDEsMjQ4MzIsMjQ4NTAsMjUxMTksMjUxNjEs''@;'; put 'put ''MjU1MDcsMjU0ODQsMjU1NTEsMjU1MzYsMjU1NzcsMjU1NDUsMjU1NDIsMjU1NDksMjU1NTQsMjU1NzEsMjU1NTIsMjU1NjksMjU1NTgsMjU1ODEsMjU1ODIsMjU0NjIsMjU1ODgsMjU1NzgsMjU1NjMsMjU2ODIsMjU1NjIsMjU1OTMsMjU5NTAsMjU5NTgsMjU5NTQsMjU5NTUsMjYwMDEsMjZl''@;'; put 'put ''MywyNjAzMSwyNjIyMiwyNjIyNCwyNjIyOCwyNjIzMCwyNjIyMywyNjI1NywyNjIzNCwyNjIzOCwyNjIzMSwyNjM2NiwyNjM2NywyNjM5OSwyNjM5NywyNjg3NCwyNjgzNywyNjg0OCwyNjg0MCwyNjgzOSwyNjg4NSwyNjg0NywyNjg2OSwyNjg2MiwyNjg1NSwyNjg3MywyNjgzNCwyNjg2Niwy''@;'; put 'put ''Njg1MSwyNjgyNywyNjgyOSwyNjg5MywyNjg5OCwyNjg5NCwyNjgyNSwyNjg0MiwyNjk5MCwyNjg3NSwyNzQ1NCwyNzQ1MCwyNzQ1MywyNzU0NCwyNzU0MiwyNzU4MCwyNzYzMSwyNzY5NCwyNzY5NSwyNzY5MiwyODIwNywyODIxNiwyODI0NCwyODE5MywyODIxMCwyODI2MywyODIzNCwyODE5''@;'; put 'put ''MiwyODE5NywyODE5NSwyODE4NywyODI1MSwyODI0OCwyODE5NiwyODI0NiwyODI3MCwyODIwNSwyODE5OCwyODI3MSwyODIxMiwyODIzNywyODIxOCwyODIwNCwyODIyNywyODE4OSwyODIyMiwyODM2MywyODI5NywyODE4NSwyODIzOCwyODI1OSwyODIyOCwyODI3NCwyODI2NSwyODI1NSwy''@;'; put 'put ''ODk1MywyODk1NCwyODk2NiwyODk3NiwyODk2MSwyODk4MiwyOTAzOCwyODk1NiwyOTI2MCwyOTMxNiwyOTMxMiwyOTQ5NCwyOTQ3NywyOTQ5MiwyOTQ4MSwyOTc1NCwyOTczOCwyOTc0NywyOTczMCwyOTczMywyOTc0OSwyOTc1MCwyOTc0OCwyOTc0MywyOTcyMywyOTczNCwyOTczNiwyOTk4''@;'; put 'put ''OSwyOTk5MCwzMDA1OSwzMDA1OCwzMDE3OCwzMDE3MSwzMDE3OSwzMDE2OSwzMDE2OCwzMDE3NCwzMDE3NiwzMDMzMSwzMDMzMiwzMDM1OCwzMDM1NSwzMDM4OCwzMDQyOCwzMDU0MywzMDcwMSwzMDgxMywzMDgyOCwzMDgzMSwzMTI0NSwzMTI0MCwzMTI0MywzMTIzNywzMTIzMiwzMTM4NCwz''@;'; put 'put ''MTM4MywzMTM4MiwzMTQ2MSwzMTQ1OSwzMTU2MSwzMTU3NCwzMTU1OCwzMTU2OCwzMTU3MCwzMTU3MiwzMTU2NSwzMTU2MywzMTU2NywzMTU2OSwzMTkwMywzMTkwOSwzMjA5NCwzMjA4MCwzMjEwNCwzMjA4NSwzMjA0MywzMjExMCwzMjExNCwzMjA5NywzMjEwMiwzMjA5OCwzMjExMiwzMjEx''@;'; put 'put ''NSwyMTg5MiwzMjcyNCwzMjcyNSwzMjc3OSwzMjg1MCwzMjkwMSwzMzEwOSwzMzEwOCwzMzA5OSwzMzEwNSwzMzEwMiwzMzA4MSwzMzA5NCwzMzA4NiwzMzEwMCwzMzEwNywzMzE0MCwzMzI5OCwzMzMwOCwzMzc2OSwzMzc5NSwzMzc4NCwzMzgwNSwzMzc2MCwzMzczMywzMzgwMywzMzcyOSwz''@;'; put 'put ''Mzc3NSwzMzc3NywzMzc4MCwzMzg3OSwzMzgwMiwzMzc3NiwzMzgwNCwzMzc0MCwzMzc4OSwzMzc3OCwzMzczOCwzMzg0OCwzMzgwNiwzMzc5NiwzMzc1NiwzMzc5OSwzMzc0OCwzMzc1OSwzNDM5NSwzNDUyNywzNDUyMSwzNDU0MSwzNDUxNiwzNDUyMywzNDUzMiwzNDUxMiwzNDUyNiwzNDkw''@;'; put 'put ''MywzNTAwOSwzNTAxMCwzNDk5MywzNTIwMywzNTIyMiwzNTM4NywzNTQyNCwzNTQxMywzNTQyMiwzNTM4OCwzNTM5MywzNTQxMiwzNTQxOSwzNTQwOCwzNTM5OCwzNTM4MCwzNTM4NiwzNTM4MiwzNTQxNCwzNTkzNywzNTk3MCwzNjAxNSwzNjAyOCwzNjAxOSwzNjAyOSwzNjAzMywzNjAyNywz''@;'; put 'put ''NjAzMiwzNjAyMCwzNjAyMywzNjAyMiwzNjAzMSwzNjAyNCwzNjIzNCwzNjIyOSwzNjIyNSwzNjMwMiwzNjMxNywzNjI5OSwzNjMxNCwzNjMwNSwzNjMwMCwzNjMxNSwzNjI5NCwzNjYwMywzNjYwMCwzNjYwNCwzNjc2NCwzNjkxMCwzNjkxNywzNjkxMywzNjkyMCwzNjkxNCwzNjkxOCwzNzEy''@;'; put 'put ''MiwzNzEwOSwzNzEyOSwzNzExOCwzNzIxOSwzNzIyMSwzNzMyNywzNzM5NiwzNzM5NywzNzQxMSwzNzM4NSwzNzQwNiwzNzM4OSwzNzM5MiwzNzM4MywzNzM5MywzODI5MiwzODI4NywzODI4MywzODI4OSwzODI5MSwzODI5MCwzODI4NiwzODUzOCwzODU0MiwzODUzOSwzODUyNSwzODUzMywz''@;'; put 'put ''ODUzNCwzODU0MSwzODUxNCwzODUzMiwzODU5MywzODU5NywzODU5NiwzODU5OCwzODU5OSwzODYzOSwzODY0MiwzODg2MCwzODkxNywzODkxOCwzODkyMCwzOTE0MywzOTE0NiwzOTE1MSwzOTE0NSwzOTE1NCwzOTE0OSwzOTM0MiwzOTM0MSw0MDY0Myw0MDY1Myw0MDY1NywyMDA5OCwyMDY1''@;'; put 'put ''MywyMDY2MSwyMDY1OCwyMDY1OSwyMDY3NywyMDY3MCwyMDY1MiwyMDY2MywyMDY2NywyMDY1NSwyMDY3OSwyMTExOSwyMTExMSwyMTExNywyMTIxNSwyMTIyMiwyMTIyMCwyMTIxOCwyMTIxOSwyMTI5NSwyMTk4MywyMTk5MiwyMTk3MSwyMTk5MCwyMTk2NiwyMTk4MCwyMTk1OSwyMTk2OSwy''@;'; put 'put ''MTk4NywyMTk4OCwyMTk5OSwyMTk3OCwyMTk4NSwyMTk1NywyMTk1OCwyMTk4OSwyMTk2MSwyMjI5MCwyMjI5MSwyMjYyMiwyMjYwOSwyMjYxNiwyMjYxNSwyMjYxOCwyMjYxMiwyMjYzNSwyMjYwNCwyMjYzNywyMjYwMiwyMjYyNiwyMjYxMCwyMjYwMywyMjg4NywyMzIzMywyMzI0MSwyMzI0''@;'; put 'put ''NCwyMzIzMCwyMzIyOSwyMzIyOCwyMzIxOSwyMzIzNCwyMzIxOCwyMzkxMywyMzkxOSwyNDE0MCwyNDE4NSwyNDI2NSwyNDI2NCwyNDMzOCwyNDQwOSwyNDQ5MiwyNDQ5NCwyNDg1OCwyNDg0NywyNDkwNCwyNDg2MywyNDgxOSwyNDg1OSwyNDgyNSwyNDgzMywyNDg0MCwyNDkxMCwyNDkwOCwy''@;'; put 'put ''NDkwMCwyNDkwOSwyNDg5NCwyNDg4NCwyNDg3MSwyNDg0NSwyNDgzOCwyNDg4NywyNTEyMSwyNTEyMiwyNTYxOSwyNTY2MiwyNTYzMCwyNTY0MiwyNTY0NSwyNTY2MSwyNTY0NCwyNTYxNSwyNTYyOCwyNTYyMCwyNTYxMywyNTY1NCwyNTYyMiwyNTYyMywyNTYwNiwyNTk2NCwyNjAxNSwyNjAz''@;'; put 'put ''MiwyNjI2MywyNjI0OSwyNjI0NywyNjI0OCwyNjI2MiwyNjI0NCwyNjI2NCwyNjI1MywyNjM3MSwyNzAyOCwyNjk4OSwyNjk3MCwyNjk5OSwyNjk3NiwyNjk2NCwyNjk5NywyNjkyOCwyNzAxMCwyNjk1NCwyNjk4NCwyNjk4NywyNjk3NCwyNjk2MywyNzAwMSwyNzAxNCwyNjk3MywyNjk3OSwy''@;'; put 'put ''Njk3MSwyNzQ2MywyNzUwNiwyNzU4NCwyNzU4MywyNzYwMywyNzY0NSwyODMyMiwyODMzNSwyODM3MSwyODM0MiwyODM1NCwyODMwNCwyODMxNywyODM1OSwyODM1NywyODMyNSwyODMxMiwyODM0OCwyODM0NiwyODMzMSwyODM2OSwyODMxMCwyODMxNiwyODM1NiwyODM3MiwyODMzMCwyODMy''@;'; put 'put ''NywyODM0MCwyOTAwNiwyOTAxNywyOTAzMywyOTAyOCwyOTAwMSwyOTAzMSwyOTAyMCwyOTAzNiwyOTAzMCwyOTAwNCwyOTAyOSwyOTAyMiwyODk5OCwyOTAzMiwyOTAxNCwyOTI0MiwyOTI2NiwyOTQ5NSwyOTUwOSwyOTUwMywyOTUwMiwyOTgwNywyOTc4NiwyOTc4MSwyOTc5MSwyOTc5MCwy''@;'; put 'put ''OTc2MSwyOTc1OSwyOTc4NSwyOTc4NywyOTc4OCwzMDA3MCwzMDA3MiwzMDIwOCwzMDE5MiwzMDIwOSwzMDE5NCwzMDE5MywzMDIwMiwzMDIwNywzMDE5NiwzMDE5NSwzMDQzMCwzMDQzMSwzMDU1NSwzMDU3MSwzMDU2NiwzMDU1OCwzMDU2MywzMDU4NSwzMDU3MCwzMDU3MiwzMDU1NiwzMDU2''@;'; put 'put ''NSwzMDU2OCwzMDU2MiwzMDcwMiwzMDg2MiwzMDg5NiwzMDg3MSwzMDg3MiwzMDg2MCwzMDg1NywzMDg0NCwzMDg2NSwzMDg2NywzMDg0NywzMTA5OCwzMTEwMywzMTEwNSwzMzgzNiwzMTE2NSwzMTI2MCwzMTI1OCwzMTI2NCwzMTI1MiwzMTI2MywzMTI2MiwzMTM5MSwzMTM5MiwzMTYwNywz''@;'; put 'put ''MTY4MCwzMTU4NCwzMTU5OCwzMTU5MSwzMTkyMSwzMTkyMywzMTkyNSwzMjE0NywzMjEyMSwzMjE0NSwzMjEyOSwzMjE0MywzMjA5MSwzMjYyMiwzMjYxNywzMjYxOCwzMjYyNiwzMjY4MSwzMjY4MCwzMjY3NiwzMjg1NCwzMjg1NiwzMjkwMiwzMjkwMCwzMzEzNywzMzEzNiwzMzE0NCwzMzEy''@;'; put 'put ''NSwzMzEzNCwzMzEzOSwzMzEzMSwzMzE0NSwzMzE0NiwzMzEyNiwzMzI4NSwzMzM1MSwzMzkyMiwzMzkxMSwzMzg1MywzMzg0MSwzMzkwOSwzMzg5NCwzMzg5OSwzMzg2NSwzMzkwMCwzMzg4MywzMzg1MiwzMzg0NSwzMzg4OSwzMzg5MSwzMzg5NywzMzkwMSwzMzg2MiwzNDM5OCwzNDM5Niwz''@;'; put 'put ''NDM5OSwzNDU1MywzNDU3OSwzNDU2OCwzNDU2NywzNDU2MCwzNDU1OCwzNDU1NSwzNDU2MiwzNDU2MywzNDU2NiwzNDU3MCwzNDkwNSwzNTAzOSwzNTAyOCwzNTAzMywzNTAzNiwzNTAzMiwzNTAzNywzNTA0MSwzNTAxOCwzNTAyOSwzNTAyNiwzNTIyOCwzNTI5OSwzNTQzNSwzNTQ0MiwzNTQ0''@;'; put 'put ''MywzNTQzMCwzNTQzMywzNTQ0MCwzNTQ2MywzNTQ1MiwzNTQyNywzNTQ4OCwzNTQ0MSwzNTQ2MSwzNTQzNywzNTQyNiwzNTQzOCwzNTQzNiwzNTQ0OSwzNTQ1MSwzNTM5MCwzNTQzMiwzNTkzOCwzNTk3OCwzNTk3NywzNjA0MiwzNjAzOSwzNjA0MCwzNjAzNiwzNjAxOCwzNjAzNSwzNjAzNCwz''@;'; put 'put ''NjAzNywzNjMyMSwzNjMxOSwzNjMyOCwzNjMzNSwzNjMzOSwzNjM0NiwzNjMzMCwzNjMyNCwzNjMyNiwzNjUzMCwzNjYxMSwzNjYxNywzNjYwNiwzNjYxOCwzNjc2NywzNjc4NiwzNjkzOSwzNjkzOCwzNjk0NywzNjkzMCwzNjk0OCwzNjkyNCwzNjk0OSwzNjk0NCwzNjkzNSwzNjk0MywzNjk0''@;'; put 'put ''MiwzNjk0MSwzNjk0NSwzNjkyNiwzNjkyOSwzNzEzOCwzNzE0MywzNzIyOCwzNzIyNiwzNzIyNSwzNzMyMSwzNzQzMSwzNzQ2MywzNzQzMiwzNzQzNywzNzQ0MCwzNzQzOCwzNzQ2NywzNzQ1MSwzNzQ3NiwzNzQ1NywzNzQyOCwzNzQ0OSwzNzQ1MywzNzQ0NSwzNzQzMywzNzQzOSwzNzQ2Niwz''@;'; put 'put ''ODI5NiwzODU1MiwzODU0OCwzODU0OSwzODYwNSwzODYwMywzODYwMSwzODYwMiwzODY0NywzODY1MSwzODY0OSwzODY0NiwzODc0MiwzODc3MiwzODc3NCwzODkyOCwzODkyOSwzODkzMSwzODkyMiwzODkzMCwzODkyNCwzOTE2NCwzOTE1NiwzOTE2NSwzOTE2NiwzOTM0NywzOTM0NSwzOTM0''@;'; put 'put ''OCwzOTY0OSw0MDE2OSw0MDU3OCw0MDcxOCw0MDcyMyw0MDczNiwyMDcxMSwyMDcxOCwyMDcwOSwyMDY5NCwyMDcxNywyMDY5OCwyMDY5MywyMDY4NywyMDY4OSwyMDcyMSwyMDY4NiwyMDcxMywyMDgzNCwyMDk3OSwyMTEyMywyMTEyMiwyMTI5NywyMTQyMSwyMjAxNCwyMjAxNiwyMjA0Mywy''@;'; put 'put ''MjAzOSwyMjAxMywyMjAzNiwyMjAyMiwyMjAyNSwyMjAyOSwyMjAzMCwyMjAwNywyMjAzOCwyMjA0NywyMjAyNCwyMjAzMiwyMjAwNiwyMjI5NiwyMjI5NCwyMjY0NSwyMjY1NCwyMjY1OSwyMjY3NSwyMjY2NiwyMjY0OSwyMjY2MSwyMjY1MywyMjc4MSwyMjgyMSwyMjgxOCwyMjgyMCwyMjg5''@;'; put 'put ''MCwyMjg4OSwyMzI2NSwyMzI3MCwyMzI3MywyMzI1NSwyMzI1NCwyMzI1NiwyMzI2NywyMzQxMywyMzUxOCwyMzUyNywyMzUyMSwyMzUyNSwyMzUyNiwyMzUyOCwyMzUyMiwyMzUyNCwyMzUxOSwyMzU2NSwyMzY1MCwyMzk0MCwyMzk0MywyNDE1NSwyNDE2MywyNDE0OSwyNDE1MSwyNDE0OCwy''@;'; put 'put ''NDI3NSwyNDI3OCwyNDMzMCwyNDM5MCwyNDQzMiwyNDUwNSwyNDkwMywyNDg5NSwyNDkwNywyNDk1MSwyNDkzMCwyNDkzMSwyNDkyNywyNDkyMiwyNDkyMCwyNDk0OSwyNTEzMCwyNTczNSwyNTY4OCwyNTY4NCwyNTc2NCwyNTcyMCwyNTY5NSwyNTcyMiwyNTY4MSwyNTcwMywyNTY1MiwyNTcw''@;'; put 'put ''OSwyNTcyMywyNTk3MCwyNjAxNywyNjA3MSwyNjA3MCwyNjI3NCwyNjI4MCwyNjI2OSwyNzAzNiwyNzA0OCwyNzAyOSwyNzA3MywyNzA1NCwyNzA5MSwyNzA4MywyNzAzNSwyNzA2MywyNzA2NywyNzA1MSwyNzA2MCwyNzA4OCwyNzA4NSwyNzA1MywyNzA4NCwyNzA0NiwyNzA3NSwyNzA0Mywy''@;'; put 'put ''NzQ2NSwyNzQ2OCwyNzY5OSwyODQ2NywyODQzNiwyODQxNCwyODQzNSwyODQwNCwyODQ1NywyODQ3OCwyODQ0OCwyODQ2MCwyODQzMSwyODQxOCwyODQ1MCwyODQxNSwyODM5OSwyODQyMiwyODQ2NSwyODQ3MiwyODQ2NiwyODQ1MSwyODQzNywyODQ1OSwyODQ2MywyODU1MiwyODQ1OCwyODM5''@;'; put 'put ''NiwyODQxNywyODQwMiwyODM2NCwyODQwNywyOTA3NiwyOTA4MSwyOTA1MywyOTA2NiwyOTA2MCwyOTA3NCwyOTI0NiwyOTMzMCwyOTMzNCwyOTUwOCwyOTUyMCwyOTc5NiwyOTc5NSwyOTgwMiwyOTgwOCwyOTgwNSwyOTk1NiwzMDA5NywzMDI0NywzMDIyMSwzMDIxOSwzMDIxNywzMDIyNywz''@;'; put 'put ''MDQzMywzMDQzNSwzMDU5NiwzMDU4OSwzMDU5MSwzMDU2MSwzMDkxMywzMDg3OSwzMDg4NywzMDg5OSwzMDg4OSwzMDg4MywzMTExOCwzMTExOSwzMTExNywzMTI3OCwzMTI4MSwzMTQwMiwzMTQwMSwzMTQ2OSwzMTQ3MSwzMTY0OSwzMTYzNywzMTYyNywzMTYwNSwzMTYzOSwzMTY0NSwzMTYz''@;'; put 'put ''NiwzMTYzMSwzMTY3MiwzMTYyMywzMTYyMCwzMTkyOSwzMTkzMywzMTkzNCwzMjE4NywzMjE3NiwzMjE1NiwzMjE4OSwzMjE5MCwzMjE2MCwzMjIwMiwzMjE4MCwzMjE3OCwzMjE3NywzMjE4NiwzMjE2MiwzMjE5MSwzMjE4MSwzMjE4NCwzMjE3MywzMjIxMCwzMjE5OSwzMjE3MiwzMjYyNCwz''@;'; put 'put ''MjczNiwzMjczNywzMjczNSwzMjg2MiwzMjg1OCwzMjkwMywzMzEwNCwzMzE1MiwzMzE2NywzMzE2MCwzMzE2MiwzMzE1MSwzMzE1NCwzMzI1NSwzMzI3NCwzMzI4NywzMzMwMCwzMzMxMCwzMzM1NSwzMzk5MywzMzk4MywzMzk5MCwzMzk4OCwzMzk0NSwzMzk1MCwzMzk3MCwzMzk0OCwzMzk5''@;'; put 'put ''NSwzMzk3NiwzMzk4NCwzNDAwMywzMzkzNiwzMzk4MCwzNDAwMSwzMzk5NCwzNDYyMywzNDU4OCwzNDYxOSwzNDU5NCwzNDU5NywzNDYxMiwzNDU4NCwzNDY0NSwzNDYxNSwzNDYwMSwzNTA1OSwzNTA3NCwzNTA2MCwzNTA2NSwzNTA2NCwzNTA2OSwzNTA0OCwzNTA5OCwzNTA1NSwzNTQ5NCwz''@;'; put 'put ''NTQ2OCwzNTQ4NiwzNTQ5MSwzNTQ2OSwzNTQ4OSwzNTQ3NSwzNTQ5MiwzNTQ5OCwzNTQ5MywzNTQ5NiwzNTQ4MCwzNTQ3MywzNTQ4MiwzNTQ5NSwzNTk0NiwzNTk4MSwzNTk4MCwzNjA1MSwzNjA0OSwzNjA1MCwzNjIwMywzNjI0OSwzNjI0NSwzNjM0OCwzNjYyOCwzNjYyNiwzNjYyOSwzNjYy''@;'; put 'put ''NywzNjc3MSwzNjk2MCwzNjk1MiwzNjk1NiwzNjk2MywzNjk1MywzNjk1OCwzNjk2MiwzNjk1NywzNjk1NSwzNzE0NSwzNzE0NCwzNzE1MCwzNzIzNywzNzI0MCwzNzIzOSwzNzIzNiwzNzQ5NiwzNzUwNCwzNzUwOSwzNzUyOCwzNzUyNiwzNzQ5OSwzNzUyMywzNzUzMiwzNzU0NCwzNzUwMCwz''@;'; put 'put ''NzUyMSwzODMwNSwzODMxMiwzODMxMywzODMwNywzODMwOSwzODMwOCwzODU1MywzODU1NiwzODU1NSwzODYwNCwzODYxMCwzODY1NiwzODc4MCwzODc4OSwzODkwMiwzODkzNSwzODkzNiwzOTA4NywzOTA4OSwzOTE3MSwzOTE3MywzOTE4MCwzOTE3NywzOTM2MSwzOTU5OSwzOTYwMCwzOTY1''@;'; put 'put ''NCwzOTc0NSwzOTc0Niw0MDE4MCw0MDE4Miw0MDE3OSw0MDYzNiw0MDc2Myw0MDc3OCwyMDc0MCwyMDczNiwyMDczMSwyMDcyNSwyMDcyOSwyMDczOCwyMDc0NCwyMDc0NSwyMDc0MSwyMDk1NiwyMTEyNywyMTEyOCwyMTEyOSwyMTEzMywyMTEzMCwyMTIzMiwyMTQyNiwyMjA2MiwyMjA3NSwy''@;'; put 'put ''MjA3MywyMjA2NiwyMjA3OSwyMjA2OCwyMjA1NywyMjA5OSwyMjA5NCwyMjEwMywyMjEzMiwyMjA3MCwyMjA2MywyMjA2NCwyMjY1NiwyMjY4NywyMjY4NiwyMjcwNywyMjY4NCwyMjcwMiwyMjY5NywyMjY5NCwyMjg5MywyMzMwNSwyMzI5MSwyMzMwNywyMzI4NSwyMzMwOCwyMzMwNCwyMzUz''@;'; put 'put ''NCwyMzUzMiwyMzUyOSwyMzUzMSwyMzY1MiwyMzY1MywyMzk2NSwyMzk1NiwyNDE2MiwyNDE1OSwyNDE2MSwyNDI5MCwyNDI4MiwyNDI4NywyNDI4NSwyNDI5MSwyNDI4OCwyNDM5MiwyNDQzMywyNDUwMywyNDUwMSwyNDk1MCwyNDkzNSwyNDk0MiwyNDkyNSwyNDkxNywyNDk2MiwyNDk1Niwy''@;'; put 'put ''NDk0NCwyNDkzOSwyNDk1OCwyNDk5OSwyNDk3NiwyNTAwMywyNDk3NCwyNTAwNCwyNDk4NiwyNDk5NiwyNDk4MCwyNTAwNiwyNTEzNCwyNTcwNSwyNTcxMSwyNTcyMSwyNTc1OCwyNTc3OCwyNTczNiwyNTc0NCwyNTc3NiwyNTc2NSwyNTc0NywyNTc0OSwyNTc2OSwyNTc0NiwyNTc3NCwyNTc3''@;'; put 'put ''MywyNTc3MSwyNTc1NCwyNTc3MiwyNTc1MywyNTc2MiwyNTc3OSwyNTk3MywyNTk3NSwyNTk3NiwyNjI4NiwyNjI4MywyNjI5MiwyNjI4OSwyNzE3MSwyNzE2NywyNzExMiwyNzEzNywyNzE2NiwyNzE2MSwyNzEzMywyNzE2OSwyNzE1NSwyNzE0NiwyNzEyMywyNzEzOCwyNzE0MSwyNzExNywy''@;'; put 'put ''NzE1MywyNzQ3MiwyNzQ3MCwyNzU1NiwyNzU4OSwyNzU5MCwyODQ3OSwyODU0MCwyODU0OCwyODQ5NywyODUxOCwyODUwMCwyODU1MCwyODUyNSwyODUwNywyODUzNiwyODUyNiwyODU1OCwyODUzOCwyODUyOCwyODUxNiwyODU2NywyODUwNCwyODM3MywyODUyNywyODUxMiwyODUxMSwyOTA4''@;'; put 'put ''NywyOTEwMCwyOTEwNSwyOTA5NiwyOTI3MCwyOTMzOSwyOTUxOCwyOTUyNywyOTgwMSwyOTgzNSwyOTgyNywyOTgyMiwyOTgyNCwzMDA3OSwzMDI0MCwzMDI0OSwzMDIzOSwzMDI0NCwzMDI0NiwzMDI0MSwzMDI0MiwzMDM2MiwzMDM5NCwzMDQzNiwzMDYwNiwzMDU5OSwzMDYwNCwzMDYwOSwz''@;'; put 'put ''MDYwMywzMDkyMywzMDkxNywzMDkwNiwzMDkyMiwzMDkxMCwzMDkzMywzMDkwOCwzMDkyOCwzMTI5NSwzMTI5MiwzMTI5NiwzMTI5MywzMTI4NywzMTI5MSwzMTQwNywzMTQwNiwzMTY2MSwzMTY2NSwzMTY4NCwzMTY2OCwzMTY4NiwzMTY4NywzMTY4MSwzMTY0OCwzMTY5MiwzMTk0NiwzMjIy''@;'; put 'put ''NCwzMjI0NCwzMjIzOSwzMjI1MSwzMjIxNiwzMjIzNiwzMjIyMSwzMjIzMiwzMjIyNywzMjIxOCwzMjIyMiwzMjIzMywzMjE1OCwzMjIxNywzMjI0MiwzMjI0OSwzMjYyOSwzMjYzMSwzMjY4NywzMjc0NSwzMjgwNiwzMzE3OSwzMzE4MCwzMzE4MSwzMzE4NCwzMzE3OCwzMzE3NiwzNDA3MSwz''@;'; put 'put ''NDEwOSwzNDA3NCwzNDAzMCwzNDA5MiwzNDA5MywzNDA2NywzNDA2NSwzNDA4MywzNDA4MSwzNDA2OCwzNDAyOCwzNDA4NSwzNDA0NywzNDA1NCwzNDY5MCwzNDY3NiwzNDY3OCwzNDY1NiwzNDY2MiwzNDY4MCwzNDY2NCwzNDY0OSwzNDY0NywzNDYzNiwzNDY0MywzNDkwNywzNDkwOSwzNTA4''@;'; put 'put ''OCwzNTA3OSwzNTA5MCwzNTA5MSwzNTA5MywzNTA4MiwzNTUxNiwzNTUzOCwzNTUyNywzNTUyNCwzNTQ3NywzNTUzMSwzNTU3NiwzNTUwNiwzNTUyOSwzNTUyMiwzNTUxOSwzNTUwNCwzNTU0MiwzNTUzMywzNTUxMCwzNTUxMywzNTU0NywzNTkxNiwzNTkxOCwzNTk0OCwzNjA2NCwzNjA2Miwz''@;'; put 'put ''NjA3MCwzNjA2OCwzNjA3NiwzNjA3NywzNjA2NiwzNjA2NywzNjA2MCwzNjA3NCwzNjA2NSwzNjIwNSwzNjI1NSwzNjI1OSwzNjM5NSwzNjM2OCwzNjM4MSwzNjM4NiwzNjM2NywzNjM5MywzNjM4MywzNjM4NSwzNjM4MiwzNjUzOCwzNjYzNywzNjYzNSwzNjYzOSwzNjY0OSwzNjY0NiwzNjY1''@;'; put 'put ''MCwzNjYzNiwzNjYzOCwzNjY0NSwzNjk2OSwzNjk3NCwzNjk2OCwzNjk3MywzNjk4MywzNzE2OCwzNzE2NSwzNzE1OSwzNzE2OSwzNzI1NSwzNzI1NywzNzI1OSwzNzI1MSwzNzU3MywzNzU2MywzNzU1OSwzNzYxMCwzNzU0OCwzNzYwNCwzNzU2OSwzNzU1NSwzNzU2NCwzNzU4NiwzNzU3NSwz''@;'; put 'put ''NzYxNiwzNzU1NCwzODMxNywzODMyMSwzODY2MCwzODY2MiwzODY2MywzODY2NSwzODc1MiwzODc5NywzODc5NSwzODc5OSwzODk0NSwzODk1NSwzODk0MCwzOTA5MSwzOTE3OCwzOTE4NywzOTE4NiwzOTE5MiwzOTM4OSwzOTM3NiwzOTM5MSwzOTM4NywzOTM3NywzOTM4MSwzOTM3OCwzOTM4''@;'; put 'put ''NSwzOTYwNywzOTY2MiwzOTY2MywzOTcxOSwzOTc0OSwzOTc0OCwzOTc5OSwzOTc5MSw0MDE5OCw0MDIwMSw0MDE5NSw0MDYxNyw0MDYzOCw0MDY1NCwyMjY5Niw0MDc4NiwyMDc1NCwyMDc2MCwyMDc1NiwyMDc1MiwyMDc1NywyMDg2NCwyMDkwNiwyMDk1NywyMTEzNywyMTEzOSwyMTIzNSwy''@;'; put 'put ''MjEwNSwyMjEyMywyMjEzNywyMjEyMSwyMjExNiwyMjEzNiwyMjEyMiwyMjEyMCwyMjExNywyMjEyOSwyMjEyNywyMjEyNCwyMjExNCwyMjEzNCwyMjcyMSwyMjcxOCwyMjcyNywyMjcyNSwyMjg5NCwyMzMyNSwyMzM0OCwyMzQxNiwyMzUzNiwyMzU2NiwyNDM5NCwyNTAxMCwyNDk3NywyNTAw''@;'; put 'put ''MSwyNDk3MCwyNTAzNywyNTAxNCwyNTAyMiwyNTAzNCwyNTAzMiwyNTEzNiwyNTc5NywyNTc5MywyNTgwMywyNTc4NywyNTc4OCwyNTgxOCwyNTc5NiwyNTc5OSwyNTc5NCwyNTgwNSwyNTc5MSwyNTgxMCwyNTgxMiwyNTc5MCwyNTk3MiwyNjMxMCwyNjMxMywyNjI5NywyNjMwOCwyNjMxMSwy''@;'; put 'put ''NjI5NiwyNzE5NywyNzE5MiwyNzE5NCwyNzIyNSwyNzI0MywyNzIyNCwyNzE5MywyNzIwNCwyNzIzNCwyNzIzMywyNzIxMSwyNzIwNywyNzE4OSwyNzIzMSwyNzIwOCwyNzQ4MSwyNzUxMSwyNzY1MywyODYxMCwyODU5MywyODU3NywyODYxMSwyODU4MCwyODYwOSwyODU4MywyODU5NSwyODYw''@;'; put 'put ''OCwyODYwMSwyODU5OCwyODU4MiwyODU3NiwyODU5NiwyOTExOCwyOTEyOSwyOTEzNiwyOTEzOCwyOTEyOCwyOTE0MSwyOTExMywyOTEzNCwyOTE0NSwyOTE0OCwyOTEyMywyOTEyNCwyOTU0NCwyOTg1MiwyOTg1OSwyOTg0OCwyOTg1NSwyOTg1NCwyOTkyMiwyOTk2NCwyOTk2NSwzMDI2MCwz''@;'; put 'put ''MDI2NCwzMDI2NiwzMDQzOSwzMDQzNywzMDYyNCwzMDYyMiwzMDYyMywzMDYyOSwzMDk1MiwzMDkzOCwzMDk1NiwzMDk1MSwzMTE0MiwzMTMwOSwzMTMxMCwzMTMwMiwzMTMwOCwzMTMwNywzMTQxOCwzMTcwNSwzMTc2MSwzMTY4OSwzMTcxNiwzMTcwNywzMTcxMywzMTcyMSwzMTcxOCwzMTk1''@;'; put 'put ''NywzMTk1OCwzMjI2NiwzMjI3MywzMjI2NCwzMjI4MywzMjI5MSwzMjI4NiwzMjI4NSwzMjI2NSwzMjI3MiwzMjYzMywzMjY5MCwzMjc1MiwzMjc1MywzMjc1MCwzMjgwOCwzMzIwMywzMzE5MywzMzE5MiwzMzI3NSwzMzI4OCwzMzM2OCwzMzM2OSwzNDEyMiwzNDEzNywzNDEyMCwzNDE1Miwz''@;'; put 'put ''NDE1MywzNDExNSwzNDEyMSwzNDE1NywzNDE1NCwzNDE0MiwzNDY5MSwzNDcxOSwzNDcxOCwzNDcyMiwzNDcwMSwzNDkxMywzNTExNCwzNTEyMiwzNTEwOSwzNTExNSwzNTEwNSwzNTI0MiwzNTIzOCwzNTU1OCwzNTU3OCwzNTU2MywzNTU2OSwzNTU4NCwzNTU0OCwzNTU1OSwzNTU2NiwzNTU4''@;'; put 'put ''MiwzNTU4NSwzNTU4NiwzNTU3NSwzNTU2NSwzNTU3MSwzNTU3NCwzNTU4MCwzNTk0NywzNTk0OSwzNTk4NywzNjA4NCwzNjQyMCwzNjQwMSwzNjQwNCwzNjQxOCwzNjQwOSwzNjQwNSwzNjY2NywzNjY1NSwzNjY2NCwzNjY1OSwzNjc3NiwzNjc3NCwzNjk4MSwzNjk4MCwzNjk4NCwzNjk3OCwz''@;'; put 'put ''Njk4OCwzNjk4NiwzNzE3MiwzNzI2NiwzNzY2NCwzNzY4NiwzNzYyNCwzNzY4MywzNzY3OSwzNzY2NiwzNzYyOCwzNzY3NSwzNzYzNiwzNzY1OCwzNzY0OCwzNzY3MCwzNzY2NSwzNzY1MywzNzY3OCwzNzY1NywzODMzMSwzODU2NywzODU2OCwzODU3MCwzODYxMywzODY3MCwzODY3MywzODY3''@;'; put 'put ''OCwzODY2OSwzODY3NSwzODY3MSwzODc0NywzODc0OCwzODc1OCwzODgwOCwzODk2MCwzODk2OCwzODk3MSwzODk2NywzODk1NywzODk2OSwzODk0OCwzOTE4NCwzOTIwOCwzOTE5OCwzOTE5NSwzOTIwMSwzOTE5NCwzOTQwNSwzOTM5NCwzOTQwOSwzOTYwOCwzOTYxMiwzOTY3NSwzOTY2MSwz''@;'; put 'put ''OTcyMCwzOTgyNSw0MDIxMyw0MDIyNyw0MDIzMCw0MDIzMiw0MDIxMCw0MDIxOSw0MDY2NCw0MDY2MCw0MDg0NSw0MDg2MCwyMDc3OCwyMDc2NywyMDc2OSwyMDc4NiwyMTIzNywyMjE1OCwyMjE0NCwyMjE2MCwyMjE0OSwyMjE1MSwyMjE1OSwyMjc0MSwyMjczOSwyMjczNywyMjczNCwyMzM0''@;'; put 'put ''NCwyMzMzOCwyMzMzMiwyMzQxOCwyMzYwNywyMzY1NiwyMzk5NiwyMzk5NCwyMzk5NywyMzk5MiwyNDE3MSwyNDM5NiwyNDUwOSwyNTAzMywyNTAyNiwyNTAzMSwyNTA2MiwyNTAzNSwyNTEzOCwyNTE0MCwyNTgwNiwyNTgwMiwyNTgxNiwyNTgyNCwyNTg0MCwyNTgzMCwyNTgzNiwyNTg0MSwy''@;'; put 'put ''NTgyNiwyNTgzNywyNTk4NiwyNTk4NywyNjMyOSwyNjMyNiwyNzI2NCwyNzI4NCwyNzI2OCwyNzI5OCwyNzI5MiwyNzM1NSwyNzI5OSwyNzI2MiwyNzI4NywyNzI4MCwyNzI5NiwyNzQ4NCwyNzU2NiwyNzYxMCwyNzY1NiwyODYzMiwyODY1NywyODYzOSwyODY0MCwyODYzNSwyODY0NCwyODY1''@;'; put 'put ''MSwyODY1NSwyODU0NCwyODY1MiwyODY0MSwyODY0OSwyODYyOSwyODY1NCwyODY1NiwyOTE1OSwyOTE1MSwyOTE2NiwyOTE1OCwyOTE1NywyOTE2NSwyOTE2NCwyOTE3MiwyOTE1MiwyOTIzNywyOTI1NCwyOTU1MiwyOTU1NCwyOTg2NSwyOTg3MiwyOTg2MiwyOTg2NCwzMDI3OCwzMDI3NCwz''@;'; put 'put ''MDI4NCwzMDQ0MiwzMDY0MywzMDYzNCwzMDY0MCwzMDYzNiwzMDYzMSwzMDYzNywzMDcwMywzMDk2NywzMDk3MCwzMDk2NCwzMDk1OSwzMDk3NywzMTE0MywzMTE0NiwzMTMxOSwzMTQyMywzMTc1MSwzMTc1NywzMTc0MiwzMTczNSwzMTc1NiwzMTcxMiwzMTk2OCwzMTk2NCwzMTk2NiwzMTk3''@;'; put 'put ''MCwzMTk2NywzMTk2MSwzMTk2NSwzMjMwMiwzMjMxOCwzMjMyNiwzMjMxMSwzMjMwNiwzMjMyMywzMjI5OSwzMjMxNywzMjMwNSwzMjMyNSwzMjMyMSwzMjMwOCwzMjMxMywzMjMyOCwzMjMwOSwzMjMxOSwzMjMwMywzMjU4MCwzMjc1NSwzMjc2NCwzMjg4MSwzMjg4MiwzMjg4MCwzMjg3OSwz''@;'; put 'put ''Mjg4MywzMzIyMiwzMzIxOSwzMzIxMCwzMzIxOCwzMzIxNiwzMzIxNSwzMzIxMywzMzIyNSwzMzIxNCwzMzI1NiwzMzI4OSwzMzM5MywzNDIxOCwzNDE4MCwzNDE3NCwzNDIwNCwzNDE5MywzNDE5NiwzNDIyMywzNDIwMywzNDE4MywzNDIxNiwzNDE4NiwzNDQwNywzNDc1MiwzNDc2OSwzNDcz''@;'; put 'put ''OSwzNDc3MCwzNDc1OCwzNDczMSwzNDc0NywzNDc0NiwzNDc2MCwzNDc2MywzNTEzMSwzNTEyNiwzNTE0MCwzNTEyOCwzNTEzMywzNTI0NCwzNTU5OCwzNTYwNywzNTYwOSwzNTYxMSwzNTU5NCwzNTYxNiwzNTYxMywzNTU4OCwzNTYwMCwzNTkwNSwzNTkwMywzNTk1NSwzNjA5MCwzNjA5Mywz''@;'; put 'put ''NjA5MiwzNjA4OCwzNjA5MSwzNjI2NCwzNjQyNSwzNjQyNywzNjQyNCwzNjQyNiwzNjY3NiwzNjY3MCwzNjY3NCwzNjY3NywzNjY3MSwzNjk5MSwzNjk4OSwzNjk5NiwzNjk5MywzNjk5NCwzNjk5MiwzNzE3NywzNzI4MywzNzI3OCwzNzI3NiwzNzcwOSwzNzc2MiwzNzY3MiwzNzc0OSwzNzcw''@;'; put 'put ''NiwzNzczMywzNzcwNywzNzY1NiwzNzc1OCwzNzc0MCwzNzcyMywzNzc0NCwzNzcyMiwzNzcxNiwzODM0NiwzODM0NywzODM0OCwzODM0NCwzODM0MiwzODU3NywzODU4NCwzODYxNCwzODY4NCwzODY4NiwzODgxNiwzODg2NywzODk4MiwzOTA5NCwzOTIyMSwzOTQyNSwzOTQyMywzOTg1NCwz''@;'; put 'put ''OTg1MSwzOTg1MCwzOTg1Myw0MDI1MSw0MDI1NSw0MDU4Nyw0MDY1NSw0MDY3MCw0MDY2OCw0MDY2OSw0MDY2Nyw0MDc2Niw0MDc3OSwyMTQ3NCwyMjE2NSwyMjE5MCwyMjc0NSwyMjc0NCwyMzM1MiwyNDQxMywyNTA1OSwyNTEzOSwyNTg0NCwyNTg0MiwyNTg1NCwyNTg2MiwyNTg1MCwyNTg1''@;'; put 'put ''MSwyNTg0NywyNjAzOSwyNjMzMiwyNjQwNiwyNzMxNSwyNzMwOCwyNzMzMSwyNzMyMywyNzMyMCwyNzMzMCwyNzMxMCwyNzMxMSwyNzQ4NywyNzUxMiwyNzU2NywyODY4MSwyODY4MywyODY3MCwyODY3OCwyODY2NiwyODY4OSwyODY4NywyOTE3OSwyOTE4MCwyOTE4MiwyOTE3NiwyOTU1OSwy''@;'; put 'put ''OTU1NywyOTg2MywyOTg4NywyOTk3MywzMDI5NCwzMDI5NiwzMDI5MCwzMDY1MywzMDY1NSwzMDY1MSwzMDY1MiwzMDk5MCwzMTE1MCwzMTMyOSwzMTMzMCwzMTMyOCwzMTQyOCwzMTQyOSwzMTc4NywzMTc4MywzMTc4NiwzMTc3NCwzMTc3OSwzMTc3NywzMTk3NSwzMjM0MCwzMjM0MSwzMjM1''@;'; put 'put ''MCwzMjM0NiwzMjM1MywzMjMzOCwzMjM0NSwzMjU4NCwzMjc2MSwzMjc2MywzMjg4NywzMjg4NiwzMzIyOSwzMzIzMSwzMzI5MCwzNDI1NSwzNDIxNywzNDI1MywzNDI1NiwzNDI0OSwzNDIyNCwzNDIzNCwzNDIzMywzNDIxNCwzNDc5OSwzNDc5NiwzNDgwMiwzNDc4NCwzNTIwNiwzNTI1MCwz''@;'; put 'put ''NTMxNiwzNTYyNCwzNTY0MSwzNTYyOCwzNTYyNywzNTkyMCwzNjEwMSwzNjQ0MSwzNjQ1MSwzNjQ1NCwzNjQ1MiwzNjQ0NywzNjQzNywzNjU0NCwzNjY4MSwzNjY4NSwzNjk5OSwzNjk5NSwzN2UzLDM3MjkxLDM3MjkyLDM3MzI4LDM3NzgwLDM3NzcwLDM3NzgyLDM3Nzk0LDM3ODExLDM3ODA2''@;'; put 'put ''LDM3ODA0LDM3ODA4LDM3Nzg0LDM3Nzg2LDM3NzgzLDM4MzU2LDM4MzU4LDM4MzUyLDM4MzU3LDM4NjI2LDM4NjIwLDM4NjE3LDM4NjE5LDM4NjIyLDM4NjkyLDM4ODE5LDM4ODIyLDM4ODI5LDM4OTA1LDM4OTg5LDM4OTkxLDM4OTg4LDM4OTkwLDM4OTk1LDM5MDk4LDM5MjMwLDM5MjMxLDM5''@;'; put 'put ''MjI5LDM5MjE0LDM5MzMzLDM5NDM4LDM5NjE3LDM5NjgzLDM5Njg2LDM5NzU5LDM5NzU4LDM5NzU3LDM5ODgyLDM5ODgxLDM5OTMzLDM5ODgwLDM5ODcyLDQwMjczLDQwMjg1LDQwMjg4LDQwNjcyLDQwNzI1LDQwNzQ4LDIwNzg3LDIyMTgxLDIyNzUwLDIyNzUxLDIyNzU0LDIzNTQxLDQwODQ4''@;'; put 'put ''LDI0MzAwLDI1MDc0LDI1MDc5LDI1MDc4LDI1MDc3LDI1ODU2LDI1ODcxLDI2MzM2LDI2MzMzLDI3MzY1LDI3MzU3LDI3MzU0LDI3MzQ3LDI4Njk5LDI4NzAzLDI4NzEyLDI4Njk4LDI4NzAxLDI4NjkzLDI4Njk2LDI5MTkwLDI5MTk3LDI5MjcyLDI5MzQ2LDI5NTYwLDI5NTYyLDI5ODg1LDI5''@;'; put 'put ''ODk4LDI5OTIzLDMwMDg3LDMwMDg2LDMwMzAzLDMwMzA1LDMwNjYzLDMxMDAxLDMxMTUzLDMxMzM5LDMxMzM3LDMxODA2LDMxODA3LDMxODAwLDMxODA1LDMxNzk5LDMxODA4LDMyMzYzLDMyMzY1LDMyMzc3LDMyMzYxLDMyMzYyLDMyNjQ1LDMyMzcxLDMyNjk0LDMyNjk3LDMyNjk2LDMzMjQw''@;'; put 'put ''LDM0MjgxLDM0MjY5LDM0MjgyLDM0MjYxLDM0Mjc2LDM0Mjc3LDM0Mjk1LDM0ODExLDM0ODIxLDM0ODI5LDM0ODA5LDM0ODE0LDM1MTY4LDM1MTY3LDM1MTU4LDM1MTY2LDM1NjQ5LDM1Njc2LDM1NjcyLDM1NjU3LDM1Njc0LDM1NjYyLDM1NjYzLDM1NjU0LDM1NjczLDM2MTA0LDM2MTA2LDM2''@;'; put 'put ''NDc2LDM2NDY2LDM2NDg3LDM2NDcwLDM2NDYwLDM2NDc0LDM2NDY4LDM2NjkyLDM2Njg2LDM2NzgxLDM3MDAyLDM3MDAzLDM3Mjk3LDM3Mjk0LDM3ODU3LDM3ODQxLDM3ODU1LDM3ODI3LDM3ODMyLDM3ODUyLDM3ODUzLDM3ODQ2LDM3ODU4LDM3ODM3LDM3ODQ4LDM3ODYwLDM3ODQ3LDM3ODY0''@;'; put 'put ''LDM4MzY0LDM4NTgwLDM4NjI3LDM4Njk4LDM4Njk1LDM4NzUzLDM4ODc2LDM4OTA3LDM5MDA2LDM5ZTMsMzkwMDMsMzkxMDAsMzkyMzcsMzkyNDEsMzk0NDYsMzk0NDksMzk2OTMsMzk5MTIsMzk5MTEsMzk4OTQsMzk4OTksNDAzMjksNDAyODksNDAzMDYsNDAyOTgsNDAzMDAsNDA1OTQsNDA1''@;'; put 'put ''OTksNDA1OTUsNDA2MjgsMjEyNDAsMjIxODQsMjIxOTksMjIxOTgsMjIxOTYsMjIyMDQsMjI3NTYsMjMzNjAsMjMzNjMsMjM0MjEsMjM1NDIsMjQwMDksMjUwODAsMjUwODIsMjU4ODAsMjU4NzYsMjU4ODEsMjYzNDIsMjY0MDcsMjczNzIsMjg3MzQsMjg3MjAsMjg3MjIsMjkyMDAsMjk1NjMs''@;'; put 'put ''Mjk5MDMsMzAzMDYsMzAzMDksMzEwMTQsMzEwMTgsMzEwMjAsMzEwMTksMzE0MzEsMzE0NzgsMzE4MjAsMzE4MTEsMzE4MjEsMzE5ODMsMzE5ODQsMzY3ODIsMzIzODEsMzIzODAsMzIzODYsMzI1ODgsMzI3NjgsMzMyNDIsMzMzODIsMzQyOTksMzQyOTcsMzQzMjEsMzQyOTgsMzQzMTAsMzQz''@;'; put 'put ''MTUsMzQzMTEsMzQzMTQsMzQ4MzYsMzQ4MzcsMzUxNzIsMzUyNTgsMzUzMjAsMzU2OTYsMzU2OTIsMzU2ODYsMzU2OTUsMzU2NzksMzU2OTEsMzYxMTEsMzYxMDksMzY0ODksMzY0ODEsMzY0ODUsMzY0ODIsMzczMDAsMzczMjMsMzc5MTIsMzc4OTEsMzc4ODUsMzgzNjksMzg3MDQsMzkxMDgs''@;'; put 'put ''MzkyNTAsMzkyNDksMzkzMzYsMzk0NjcsMzk0NzIsMzk0NzksMzk0NzcsMzk5NTUsMzk5NDksNDA1NjksNDA2MjksNDA2ODAsNDA3NTEsNDA3OTksNDA4MDMsNDA4MDEsMjA3OTEsMjA3OTIsMjIyMDksMjIyMDgsMjIyMTAsMjI4MDQsMjM2NjAsMjQwMTMsMjUwODQsMjUwODYsMjU4ODUsMjU4''@;'; put 'put ''ODQsMjYwMDUsMjYzNDUsMjczODcsMjczOTYsMjczODYsMjc1NzAsMjg3NDgsMjkyMTEsMjkzNTEsMjk5MTAsMjk5MDgsMzAzMTMsMzA2NzUsMzE4MjQsMzIzOTksMzIzOTYsMzI3MDAsMzQzMjcsMzQzNDksMzQzMzAsMzQ4NTEsMzQ4NTAsMzQ4NDksMzQ4NDcsMzUxNzgsMzUxODAsMzUyNjEs''@;'; put 'put ''MzU3MDAsMzU3MDMsMzU3MDksMzYxMTUsMzY0OTAsMzY0OTMsMzY0OTEsMzY3MDMsMzY3ODMsMzczMDYsMzc5MzQsMzc5MzksMzc5NDEsMzc5NDYsMzc5NDQsMzc5MzgsMzc5MzEsMzgzNzAsMzg3MTIsMzg3MTMsMzg3MDYsMzg5MTEsMzkwMTUsMzkwMTMsMzkyNTUsMzk0OTMsMzk0OTEsMzk0''@;'; put 'put ''ODgsMzk0ODYsMzk2MzEsMzk3NjQsMzk3NjEsMzk5ODEsMzk5NzMsNDAzNjcsNDAzNzIsNDAzODYsNDAzNzYsNDA2MDUsNDA2ODcsNDA3MjksNDA3OTYsNDA4MDYsNDA4MDcsMjA3OTYsMjA3OTUsMjIyMTYsMjIyMTgsMjIyMTcsMjM0MjMsMjQwMjAsMjQwMTgsMjQzOTgsMjUwODcsMjU4OTIs''@;'; put 'put ''Mjc0MDIsMjc0ODksMjg3NTMsMjg3NjAsMjk1NjgsMjk5MjQsMzAwOTAsMzAzMTgsMzAzMTYsMzExNTUsMzE4NDAsMzE4MzksMzI4OTQsMzI4OTMsMzMyNDcsMzUxODYsMzUxODMsMzUzMjQsMzU3MTIsMzYxMTgsMzYxMTksMzY0OTcsMzY0OTksMzY3MDUsMzcxOTIsMzc5NTYsMzc5NjksMzc5''@;'; put 'put ''NzAsMzg3MTcsMzg3MTgsMzg4NTEsMzg4NDksMzkwMTksMzkyNTMsMzk1MDksMzk1MDEsMzk2MzQsMzk3MDYsNDAwMDksMzk5ODUsMzk5OTgsMzk5OTUsNDA0MDMsNDA0MDcsNDA3NTYsNDA4MTIsNDA4MTAsNDA4NTIsMjIyMjAsMjQwMjIsMjUwODgsMjU4OTEsMjU4OTksMjU4OTgsMjYzNDgs''@;'; put 'put ''Mjc0MDgsMjk5MTQsMzE0MzQsMzE4NDQsMzE4NDMsMzE4NDUsMzI0MDMsMzI0MDYsMzI0MDQsMzMyNTAsMzQzNjAsMzQzNjcsMzQ4NjUsMzU3MjIsMzcwMDgsMzcwMDcsMzc5ODcsMzc5ODQsMzc5ODgsMzg3NjAsMzkwMjMsMzkyNjAsMzk1MTQsMzk1MTUsMzk1MTEsMzk2MzUsMzk2MzYsMzk2''@;'; put 'put ''MzMsNDAwMjAsNDAwMjMsNDAwMjIsNDA0MjEsNDA2MDcsNDA2OTIsMjIyMjUsMjI3NjEsMjU5MDAsMjg3NjYsMzAzMjEsMzAzMjIsMzA2NzksMzI1OTIsMzI2NDgsMzQ4NzAsMzQ4NzMsMzQ5MTQsMzU3MzEsMzU3MzAsMzU3MzQsMzMzOTksMzYxMjMsMzczMTIsMzc5OTQsMzg3MjIsMzg3Mjgs''@;'; put 'put ''Mzg3MjQsMzg4NTQsMzkwMjQsMzk1MTksMzk3MTQsMzk3NjgsNDAwMzEsNDA0NDEsNDA0NDIsNDA1NzIsNDA1NzMsNDA3MTEsNDA4MjMsNDA4MTgsMjQzMDcsMjc0MTQsMjg3NzEsMzE4NTIsMzE4NTQsMzQ4NzUsMzUyNjQsMzY1MTMsMzczMTMsMzgwMDIsMzhlMywzOTAyNSwzOTI2MiwzOTYz''@;'; put 'put ''OCwzOTcxNSw0MDY1MiwyODc3MiwzMDY4MiwzNTczOCwzODAwNywzODg1NywzOTUyMiwzOTUyNSwzMjQxMiwzNTc0MCwzNjUyMiwzNzMxNywzODAxMywzODAxNCwzODAxMiw0MDA1NSw0MDA1Niw0MDY5NSwzNTkyNCwzODAxNSw0MDQ3NCwyOTIyNCwzOTUzMCwzOTcyOSw0MDQ3NSw0MDQ3OCwz''@;'; put 'put ''MTg1OCw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDkzMzIsOTMzMyw5MzM0LDkzMzUsOTMzNiw5MzM3LDkzMzgsOTMzOSw5MzQwLDkzNDEsODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSwyMDAyMiwyMDAz''@;'; put 'put ''MSwyMDEwMSwyMDEyOCwyMDg2NiwyMDg4NiwyMDkwNywyMTI0MSwyMTMwNCwyMTM1MywyMTQzMCwyMjc5NCwyMzQyNCwyNDAyNywxMjA4MywyNDE5MSwyNDMwOCwyNDQwMCwyNDQxNywyNTkwOCwyNjA4MCwzMDA5OCwzMDMyNiwzNjc4OSwzODU4MiwxNjgsNzEwLDEyNTQxLDEyNTQyLDEyNDQ1''@;'; put 'put ''LDEyNDQ2LDEyMjkxLDIwMTg5LDEyMjkzLDEyMjk0LDEyMjk1LDEyNTQwLDY1MzM5LDY1MzQxLDEwMDQ1LDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEy''@;'; put 'put ''MzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3''@;'; put 'put ''LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEy''@;'; put 'put ''NDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1''@;'; put 'put ''LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEy''@;'; put 'put ''NDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIw''@;'; put 'put ''LDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEyNTM0LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQs''@;'; put 'put ''MTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYs''@;'; put 'put ''MTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDg2NzksODYzMiw4NjMzLDEyNzUxLDEzMTI3NiwyMDA1OCwxMzEyMTAsMjA5OTQsMTc1NTMsNDA4ODAsMjA4NzIsNDA4ODEsMTYxMjg3LG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjU1MDYsNjU1MDgsNjUyODcsNjUyODIsMTI4NDksODQ3MCw4NDgxLDEyNDQzLDEyNDQ0LDExOTA0LDExOTA4LDExOTEwLDExOTExLDExOTEyLDExOTE0LDExOTE2LDExOTE3LDExOTI1LDExOTMyLDExOTMzLDExOTQxLDExOTQzLDEx''@;'; put 'put ''OTQ2LDExOTQ4LDExOTUwLDExOTU4LDExOTY0LDExOTY2LDExOTc0LDExOTc4LDExOTgwLDExOTgxLDExOTgzLDExOTkwLDExOTkxLDExOTk4LDEyMDAzLG51bGwsbnVsbCxudWxsLDY0Myw1OTIsNjAzLDU5Niw2MjksMzM5LDI0OCwzMzEsNjUwLDYxOCwyMDAzNCwyMDA2MCwyMDk4MSwyMTI3''@;'; put 'put ''NCwyMTM3OCwxOTk3NSwxOTk4MCwyMDAzOSwyMDEwOSwyMjIzMSw2NDAxMiwyMzY2MiwyNDQzNSwxOTk4MywyMDg3MSwxOTk4MiwyMDAxNCwyMDExNSwyMDE2MiwyMDE2OSwyMDE2OCwyMDg4OCwyMTI0NCwyMTM1NiwyMTQzMywyMjMwNCwyMjc4NywyMjgyOCwyMzU2OCwyNDA2MywyNjA4MSwy''@;'; put 'put ''NzU3MSwyNzU5NiwyNzY2OCwyOTI0NywyMDAxNywyMDAyOCwyMDIwMCwyMDE4OCwyMDIwMSwyMDE5MywyMDE4OSwyMDE4NiwyMTAwNCwyMTI3NiwyMTMyNCwyMjMwNiwyMjMwNywyMjgwNywyMjgzMSwyMzQyNSwyMzQyOCwyMzU3MCwyMzYxMSwyMzY2OCwyMzY2NywyNDA2OCwyNDE5MiwyNDE5''@;'; put 'put ''NCwyNDUyMSwyNTA5NywyNTE2OCwyNzY2OSwyNzcwMiwyNzcxNSwyNzcxMSwyNzcwNywyOTM1OCwyOTM2MCwyOTU3OCwzMTE2MCwzMjkwNiwzODQzMCwyMDIzOCwyMDI0OCwyMDI2OCwyMDIxMywyMDI0NCwyMDIwOSwyMDIyNCwyMDIxNSwyMDIzMiwyMDI1MywyMDIyNiwyMDIyOSwyMDI1OCwy''@;'; put 'put ''MDI0MywyMDIyOCwyMDIxMiwyMDI0MiwyMDkxMywyMTAxMSwyMTAwMSwyMTAwOCwyMTE1OCwyMTI4MiwyMTI3OSwyMTMyNSwyMTM4NiwyMTUxMSwyMjI0MSwyMjIzOSwyMjMxOCwyMjMxNCwyMjMyNCwyMjg0NCwyMjkxMiwyMjkwOCwyMjkxNywyMjkwNywyMjkxMCwyMjkwMywyMjkxMSwyMzM4''@;'; put 'put ''MiwyMzU3MywyMzU4OSwyMzY3NiwyMzY3NCwyMzY3NSwyMzY3OCwyNDAzMSwyNDE4MSwyNDE5NiwyNDMyMiwyNDM0NiwyNDQzNiwyNDUzMywyNDUzMiwyNDUyNywyNTE4MCwyNTE4MiwyNTE4OCwyNTE4NSwyNTE5MCwyNTE4NiwyNTE3NywyNTE4NCwyNTE3OCwyNTE4OSwyNjA5NSwyNjA5NCwy''@;'; put 'put ''NjQzMCwyNjQyNSwyNjQyNCwyNjQyNywyNjQyNiwyNjQzMSwyNjQyOCwyNjQxOSwyNzY3MiwyNzcxOCwyNzczMCwyNzc0MCwyNzcyNywyNzcyMiwyNzczMiwyNzcyMywyNzcyNCwyODc4NSwyOTI3OCwyOTM2NCwyOTM2NSwyOTU4MiwyOTk5NCwzMDMzNSwzMTM0OSwzMjU5MywzMzQwMCwzMzQw''@;'; put 'put ''NCwzMzQwOCwzMzQwNSwzMzQwNywzNDM4MSwzNTE5OCwzNzAxNywzNzAxNSwzNzAxNiwzNzAxOSwzNzAxMiwzODQzNCwzODQzNiwzODQzMiwzODQzNSwyMDMxMCwyMDI4MywyMDMyMiwyMDI5NywyMDMwNywyMDMyNCwyMDI4NiwyMDMyNywyMDMwNiwyMDMxOSwyMDI4OSwyMDMxMiwyMDI2OSwy''@;'; put 'put ''MDI3NSwyMDI4NywyMDMyMSwyMDg3OSwyMDkyMSwyMTAyMCwyMTAyMiwyMTAyNSwyMTE2NSwyMTE2NiwyMTI1NywyMTM0NywyMTM2MiwyMTM5MCwyMTM5MSwyMTU1MiwyMTU1OSwyMTU0NiwyMTU4OCwyMTU3MywyMTUyOSwyMTUzMiwyMTU0MSwyMTUyOCwyMTU2NSwyMTU4MywyMTU2OSwyMTU0''@;'; put 'put ''NCwyMTU0MCwyMTU3NSwyMjI1NCwyMjI0NywyMjI0NSwyMjMzNywyMjM0MSwyMjM0OCwyMjM0NSwyMjM0NywyMjM1NCwyMjc5MCwyMjg0OCwyMjk1MCwyMjkzNiwyMjk0NCwyMjkzNSwyMjkyNiwyMjk0NiwyMjkyOCwyMjkyNywyMjk1MSwyMjk0NSwyMzQzOCwyMzQ0MiwyMzU5MiwyMzU5NCwy''@;'; put 'put ''MzY5MywyMzY5NSwyMzY4OCwyMzY5MSwyMzY4OSwyMzY5OCwyMzY5MCwyMzY4NiwyMzY5OSwyMzcwMSwyNDAzMiwyNDA3NCwyNDA3OCwyNDIwMywyNDIwMSwyNDIwNCwyNDIwMCwyNDIwNSwyNDMyNSwyNDM0OSwyNDQ0MCwyNDQzOCwyNDUzMCwyNDUyOSwyNDUyOCwyNDU1NywyNDU1MiwyNDU1''@;'; put 'put ''OCwyNDU2MywyNDU0NSwyNDU0OCwyNDU0NywyNDU3MCwyNDU1OSwyNDU2NywyNDU3MSwyNDU3NiwyNDU2NCwyNTE0NiwyNTIxOSwyNTIyOCwyNTIzMCwyNTIzMSwyNTIzNiwyNTIyMywyNTIwMSwyNTIxMSwyNTIxMCwyNTIwMCwyNTIxNywyNTIyNCwyNTIwNywyNTIxMywyNTIwMiwyNTIwNCwy''@;'; put 'put ''NTkxMSwyNjA5NiwyNjEwMCwyNjA5OSwyNjA5OCwyNjEwMSwyNjQzNywyNjQzOSwyNjQ1NywyNjQ1MywyNjQ0NCwyNjQ0MCwyNjQ2MSwyNjQ0NSwyNjQ1OCwyNjQ0MywyNzYwMCwyNzY3MywyNzY3NCwyNzc2OCwyNzc1MSwyNzc1NSwyNzc4MCwyNzc4NywyNzc5MSwyNzc2MSwyNzc1OSwyNzc1''@;'; put 'put ''MywyNzgwMiwyNzc1NywyNzc4MywyNzc5NywyNzgwNCwyNzc1MCwyNzc2MywyNzc0OSwyNzc3MSwyNzc5MCwyODc4OCwyODc5NCwyOTI4MywyOTM3NSwyOTM3MywyOTM3OSwyOTM4MiwyOTM3NywyOTM3MCwyOTM4MSwyOTU4OSwyOTU5MSwyOTU4NywyOTU4OCwyOTU4NiwzMDAxMCwzMDAwOSwz''@;'; put 'put ''MDEwMCwzMDEwMSwzMDMzNywzMTAzNywzMjgyMCwzMjkxNywzMjkyMSwzMjkxMiwzMjkxNCwzMjkyNCwzMzQyNCwzMzQyMywzMzQxMywzMzQyMiwzMzQyNSwzMzQyNywzMzQxOCwzMzQxMSwzMzQxMiwzNTk2MCwzNjgwOSwzNjc5OSwzNzAyMywzNzAyNSwzNzAyOSwzNzAyMiwzNzAzMSwzNzAy''@;'; put 'put ''NCwzODQ0OCwzODQ0MCwzODQ0NywzODQ0NSwyMDAxOSwyMDM3NiwyMDM0OCwyMDM1NywyMDM0OSwyMDM1MiwyMDM1OSwyMDM0MiwyMDM0MCwyMDM2MSwyMDM1NiwyMDM0MywyMDMwMCwyMDM3NSwyMDMzMCwyMDM3OCwyMDM0NSwyMDM1MywyMDM0NCwyMDM2OCwyMDM4MCwyMDM3MiwyMDM4Miwy''@;'; put 'put ''MDM3MCwyMDM1NCwyMDM3MywyMDMzMSwyMDMzNCwyMDg5NCwyMDkyNCwyMDkyNiwyMTA0NSwyMTA0MiwyMTA0MywyMTA2MiwyMTA0MSwyMTE4MCwyMTI1OCwyMTI1OSwyMTMwOCwyMTM5NCwyMTM5NiwyMTYzOSwyMTYzMSwyMTYzMywyMTY0OSwyMTYzNCwyMTY0MCwyMTYxMSwyMTYyNiwyMTYz''@;'; put 'put ''MCwyMTYwNSwyMTYxMiwyMTYyMCwyMTYwNiwyMTY0NSwyMTYxNSwyMTYwMSwyMTYwMCwyMTY1NiwyMTYwMywyMTYwNywyMTYwNCwyMjI2MywyMjI2NSwyMjM4MywyMjM4NiwyMjM4MSwyMjM3OSwyMjM4NSwyMjM4NCwyMjM5MCwyMjQwMCwyMjM4OSwyMjM5NSwyMjM4NywyMjM4OCwyMjM3MCwy''@;'; put 'put ''MjM3NiwyMjM5NywyMjc5NiwyMjg1MywyMjk2NSwyMjk3MCwyMjk5MSwyMjk5MCwyMjk2MiwyMjk4OCwyMjk3NywyMjk2NiwyMjk3MiwyMjk3OSwyMjk5OCwyMjk2MSwyMjk3MywyMjk3NiwyMjk4NCwyMjk2NCwyMjk4MywyMzM5NCwyMzM5NywyMzQ0MywyMzQ0NSwyMzYyMCwyMzYyMywyMzcy''@;'; put 'put ''NiwyMzcxNiwyMzcxMiwyMzczMywyMzcyNywyMzcyMCwyMzcyNCwyMzcxMSwyMzcxNSwyMzcyNSwyMzcxNCwyMzcyMiwyMzcxOSwyMzcwOSwyMzcxNywyMzczNCwyMzcyOCwyMzcxOCwyNDA4NywyNDA4NCwyNDA4OSwyNDM2MCwyNDM1NCwyNDM1NSwyNDM1NiwyNDQwNCwyNDQ1MCwyNDQ0Niwy''@;'; put 'put ''NDQ0NSwyNDU0MiwyNDU0OSwyNDYyMSwyNDYxNCwyNDYwMSwyNDYyNiwyNDU4NywyNDYyOCwyNDU4NiwyNDU5OSwyNDYyNywyNDYwMiwyNDYwNiwyNDYyMCwyNDYxMCwyNDU4OSwyNDU5MiwyNDYyMiwyNDU5NSwyNDU5MywyNDU4OCwyNDU4NSwyNDYwNCwyNTEwOCwyNTE0OSwyNTI2MSwyNTI2''@;'; put 'put ''OCwyNTI5NywyNTI3OCwyNTI1OCwyNTI3MCwyNTI5MCwyNTI2MiwyNTI2NywyNTI2MywyNTI3NSwyNTI1NywyNTI2NCwyNTI3MiwyNTkxNywyNjAyNCwyNjA0MywyNjEyMSwyNjEwOCwyNjExNiwyNjEzMCwyNjEyMCwyNjEwNywyNjExNSwyNjEyMywyNjEyNSwyNjExNywyNjEwOSwyNjEyOSwy''@;'; put 'put ''NjEyOCwyNjM1OCwyNjM3OCwyNjUwMSwyNjQ3NiwyNjUxMCwyNjUxNCwyNjQ4NiwyNjQ5MSwyNjUyMCwyNjUwMiwyNjUwMCwyNjQ4NCwyNjUwOSwyNjUwOCwyNjQ5MCwyNjUyNywyNjUxMywyNjUyMSwyNjQ5OSwyNjQ5MywyNjQ5NywyNjQ4OCwyNjQ4OSwyNjUxNiwyNzQyOSwyNzUyMCwyNzUx''@;'; put 'put ''OCwyNzYxNCwyNzY3NywyNzc5NSwyNzg4NCwyNzg4MywyNzg4NiwyNzg2NSwyNzgzMCwyNzg2MCwyNzgyMSwyNzg3OSwyNzgzMSwyNzg1NiwyNzg0MiwyNzgzNCwyNzg0MywyNzg0NiwyNzg4NSwyNzg5MCwyNzg1OCwyNzg2OSwyNzgyOCwyNzc4NiwyNzgwNSwyNzc3NiwyNzg3MCwyNzg0MCwy''@;'; put 'put ''Nzk1MiwyNzg1MywyNzg0NywyNzgyNCwyNzg5NywyNzg1NSwyNzg4MSwyNzg1NywyODgyMCwyODgyNCwyODgwNSwyODgxOSwyODgwNiwyODgwNCwyODgxNywyODgyMiwyODgwMiwyODgyNiwyODgwMywyOTI5MCwyOTM5OCwyOTM4NywyOTQwMCwyOTM4NSwyOTQwNCwyOTM5NCwyOTM5NiwyOTQw''@;'; put 'put ''MiwyOTM4OCwyOTM5MywyOTYwNCwyOTYwMSwyOTYxMywyOTYwNiwyOTYwMiwyOTYwMCwyOTYxMiwyOTU5NywyOTkxNywyOTkyOCwzMDAxNSwzMDAxNiwzMDAxNCwzMDA5MiwzMDEwNCwzMDM4MywzMDQ1MSwzMDQ0OSwzMDQ0OCwzMDQ1MywzMDcxMiwzMDcxNiwzMDcxMywzMDcxNSwzMDcxNCwz''@;'; put 'put ''MDcxMSwzMTA0MiwzMTAzOSwzMTE3MywzMTM1MiwzMTM1NSwzMTQ4MywzMTg2MSwzMTk5NywzMjgyMSwzMjkxMSwzMjk0MiwzMjkzMSwzMjk1MiwzMjk0OSwzMjk0MSwzMzMxMiwzMzQ0MCwzMzQ3MiwzMzQ1MSwzMzQzNCwzMzQzMiwzMzQzNSwzMzQ2MSwzMzQ0NywzMzQ1NCwzMzQ2OCwzMzQz''@;'; put 'put ''OCwzMzQ2NiwzMzQ2MCwzMzQ0OCwzMzQ0MSwzMzQ0OSwzMzQ3NCwzMzQ0NCwzMzQ3NSwzMzQ2MiwzMzQ0MiwzNDQxNiwzNDQxNSwzNDQxMywzNDQxNCwzNTkyNiwzNjgxOCwzNjgxMSwzNjgxOSwzNjgxMywzNjgyMiwzNjgyMSwzNjgyMywzNzA0MiwzNzA0NCwzNzAzOSwzNzA0MywzNzA0MCwz''@;'; put 'put ''ODQ1NywzODQ2MSwzODQ2MCwzODQ1OCwzODQ2NywyMDQyOSwyMDQyMSwyMDQzNSwyMDQwMiwyMDQyNSwyMDQyNywyMDQxNywyMDQzNiwyMDQ0NCwyMDQ0MSwyMDQxMSwyMDQwMywyMDQ0MywyMDQyMywyMDQzOCwyMDQxMCwyMDQxNiwyMDQwOSwyMDQ2MCwyMTA2MCwyMTA2NSwyMTE4NCwyMTE4''@;'; put 'put ''NiwyMTMwOSwyMTM3MiwyMTM5OSwyMTM5OCwyMTQwMSwyMTQwMCwyMTY5MCwyMTY2NSwyMTY3NywyMTY2OSwyMTcxMSwyMTY5OSwzMzU0OSwyMTY4NywyMTY3OCwyMTcxOCwyMTY4NiwyMTcwMSwyMTcwMiwyMTY2NCwyMTYxNiwyMTY5MiwyMTY2NiwyMTY5NCwyMTYxOCwyMTcyNiwyMTY4MCwy''@;'; put 'put ''MjQ1MywyMjQzMCwyMjQzMSwyMjQzNiwyMjQxMiwyMjQyMywyMjQyOSwyMjQyNywyMjQyMCwyMjQyNCwyMjQxNSwyMjQyNSwyMjQzNywyMjQyNiwyMjQyMSwyMjc3MiwyMjc5NywyMjg2NywyMzAwOSwyMzAwNiwyMzAyMiwyMzA0MCwyMzAyNSwyMzAwNSwyMzAzNCwyMzAzNywyMzAzNiwyMzAz''@;'; put 'put ''MCwyMzAxMiwyMzAyNiwyMzAzMSwyMzAwMywyMzAxNywyMzAyNywyMzAyOSwyMzAwOCwyMzAzOCwyMzAyOCwyMzAyMSwyMzQ2NCwyMzYyOCwyMzc2MCwyMzc2OCwyMzc1NiwyMzc2NywyMzc1NSwyMzc3MSwyMzc3NCwyMzc3MCwyMzc1MywyMzc1MSwyMzc1NCwyMzc2NiwyMzc2MywyMzc2NCwy''@;'; put 'put ''Mzc1OSwyMzc1MiwyMzc1MCwyMzc1OCwyMzc3NSwyMzgwMCwyNDA1NywyNDA5NywyNDA5OCwyNDA5OSwyNDA5NiwyNDEwMCwyNDI0MCwyNDIyOCwyNDIyNiwyNDIxOSwyNDIyNywyNDIyOSwyNDMyNywyNDM2NiwyNDQwNiwyNDQ1NCwyNDYzMSwyNDYzMywyNDY2MCwyNDY5MCwyNDY3MCwyNDY0''@;'; put 'put ''NSwyNDY1OSwyNDY0NywyNDY0OSwyNDY2NywyNDY1MiwyNDY0MCwyNDY0MiwyNDY3MSwyNDYxMiwyNDY0NCwyNDY2NCwyNDY3OCwyNDY4NiwyNTE1NCwyNTE1NSwyNTI5NSwyNTM1NywyNTM1NSwyNTMzMywyNTM1OCwyNTM0NywyNTMyMywyNTMzNywyNTM1OSwyNTM1NiwyNTMzNiwyNTMzNCwy''@;'; put 'put ''NTM0NCwyNTM2MywyNTM2NCwyNTMzOCwyNTM2NSwyNTMzOSwyNTMyOCwyNTkyMSwyNTkyMywyNjAyNiwyNjA0NywyNjE2NiwyNjE0NSwyNjE2MiwyNjE2NSwyNjE0MCwyNjE1MCwyNjE0NiwyNjE2MywyNjE1NSwyNjE3MCwyNjE0MSwyNjE2NCwyNjE2OSwyNjE1OCwyNjM4MywyNjM4NCwyNjU2''@;'; put 'put ''MSwyNjYxMCwyNjU2OCwyNjU1NCwyNjU4OCwyNjU1NSwyNjYxNiwyNjU4NCwyNjU2MCwyNjU1MSwyNjU2NSwyNjYwMywyNjU5NiwyNjU5MSwyNjU0OSwyNjU3MywyNjU0NywyNjYxNSwyNjYxNCwyNjYwNiwyNjU5NSwyNjU2MiwyNjU1MywyNjU3NCwyNjU5OSwyNjYwOCwyNjU0NiwyNjYyMCwy''@;'; put 'put ''NjU2NiwyNjYwNSwyNjU3MiwyNjU0MiwyNjU5OCwyNjU4NywyNjYxOCwyNjU2OSwyNjU3MCwyNjU2MywyNjYwMiwyNjU3MSwyNzQzMiwyNzUyMiwyNzUyNCwyNzU3NCwyNzYwNiwyNzYwOCwyNzYxNiwyNzY4MCwyNzY4MSwyNzk0NCwyNzk1NiwyNzk0OSwyNzkzNSwyNzk2NCwyNzk2NywyNzky''@;'; put 'put ''MiwyNzkxNCwyNzg2NiwyNzk1NSwyNzkwOCwyNzkyOSwyNzk2MiwyNzkzMCwyNzkyMSwyNzkwNCwyNzkzMywyNzk3MCwyNzkwNSwyNzkyOCwyNzk1OSwyNzkwNywyNzkxOSwyNzk2OCwyNzkxMSwyNzkzNiwyNzk0OCwyNzkxMiwyNzkzOCwyNzkxMywyNzkyMCwyODg1NSwyODgzMSwyODg2Miwy''@;'; put 'put ''ODg0OSwyODg0OCwyODgzMywyODg1MiwyODg1MywyODg0MSwyOTI0OSwyOTI1NywyOTI1OCwyOTI5MiwyOTI5NiwyOTI5OSwyOTI5NCwyOTM4NiwyOTQxMiwyOTQxNiwyOTQxOSwyOTQwNywyOTQxOCwyOTQxNCwyOTQxMSwyOTU3MywyOTY0NCwyOTYzNCwyOTY0MCwyOTYzNywyOTYyNSwyOTYy''@;'; put 'put ''MiwyOTYyMSwyOTYyMCwyOTY3NSwyOTYzMSwyOTYzOSwyOTYzMCwyOTYzNSwyOTYzOCwyOTYyNCwyOTY0MywyOTkzMiwyOTkzNCwyOTk5OCwzMDAyMywzMDAyNCwzMDExOSwzMDEyMiwzMDMyOSwzMDQwNCwzMDQ3MiwzMDQ2NywzMDQ2OCwzMDQ2OSwzMDQ3NCwzMDQ1NSwzMDQ1OSwzMDQ1OCwz''@;'; put 'put ''MDY5NSwzMDY5NiwzMDcyNiwzMDczNywzMDczOCwzMDcyNSwzMDczNiwzMDczNSwzMDczNCwzMDcyOSwzMDcyMywzMDczOSwzMTA1MCwzMTA1MiwzMTA1MSwzMTA0NSwzMTA0NCwzMTE4OSwzMTE4MSwzMTE4MywzMTE5MCwzMTE4MiwzMTM2MCwzMTM1OCwzMTQ0MSwzMTQ4OCwzMTQ4OSwzMTg2''@;'; put 'put ''NiwzMTg2NCwzMTg2NSwzMTg3MSwzMTg3MiwzMTg3MywzMjAwMywzMjAwOCwzMjAwMSwzMjYwMCwzMjY1NywzMjY1MywzMjcwMiwzMjc3NSwzMjc4MiwzMjc4MywzMjc4OCwzMjgyMywzMjk4NCwzMjk2NywzMjk5MiwzMjk3NywzMjk2OCwzMjk2MiwzMjk3NiwzMjk2NSwzMjk5NSwzMjk4NSwz''@;'; put 'put ''Mjk4OCwzMjk3MCwzMjk4MSwzMjk2OSwzMjk3NSwzMjk4MywzMjk5OCwzMjk3MywzMzI3OSwzMzMxMywzMzQyOCwzMzQ5NywzMzUzNCwzMzUyOSwzMzU0MywzMzUxMiwzMzUzNiwzMzQ5MywzMzU5NCwzMzUxNSwzMzQ5NCwzMzUyNCwzMzUxNiwzMzUwNSwzMzUyMiwzMzUyNSwzMzU0OCwzMzUz''@;'; put 'put ''MSwzMzUyNiwzMzUyMCwzMzUxNCwzMzUwOCwzMzUwNCwzMzUzMCwzMzUyMywzMzUxNywzNDQyMywzNDQyMCwzNDQyOCwzNDQxOSwzNDg4MSwzNDg5NCwzNDkxOSwzNDkyMiwzNDkyMSwzNTI4MywzNTMzMiwzNTMzNSwzNjIxMCwzNjgzNSwzNjgzMywzNjg0NiwzNjgzMiwzNzEwNSwzNzA1Mywz''@;'; put 'put ''NzA1NSwzNzA3NywzNzA2MSwzNzA1NCwzNzA2MywzNzA2NywzNzA2NCwzNzMzMiwzNzMzMSwzODQ4NCwzODQ3OSwzODQ4MSwzODQ4MywzODQ3NCwzODQ3OCwyMDUxMCwyMDQ4NSwyMDQ4NywyMDQ5OSwyMDUxNCwyMDUyOCwyMDUwNywyMDQ2OSwyMDQ2OCwyMDUzMSwyMDUzNSwyMDUyNCwyMDQ3''@;'; put 'put ''MCwyMDQ3MSwyMDUwMywyMDUwOCwyMDUxMiwyMDUxOSwyMDUzMywyMDUyNywyMDUyOSwyMDQ5NCwyMDgyNiwyMDg4NCwyMDg4MywyMDkzOCwyMDkzMiwyMDkzMywyMDkzNiwyMDk0MiwyMTA4OSwyMTA4MiwyMTA3NCwyMTA4NiwyMTA4NywyMTA3NywyMTA5MCwyMTE5NywyMTI2MiwyMTQwNiwy''@;'; put 'put ''MTc5OCwyMTczMCwyMTc4MywyMTc3OCwyMTczNSwyMTc0NywyMTczMiwyMTc4NiwyMTc1OSwyMTc2NCwyMTc2OCwyMTczOSwyMTc3NywyMTc2NSwyMTc0NSwyMTc3MCwyMTc1NSwyMTc1MSwyMTc1MiwyMTcyOCwyMTc3NCwyMTc2MywyMTc3MSwyMjI3MywyMjI3NCwyMjQ3NiwyMjU3OCwyMjQ4''@;'; put 'put ''NSwyMjQ4MiwyMjQ1OCwyMjQ3MCwyMjQ2MSwyMjQ2MCwyMjQ1NiwyMjQ1NCwyMjQ2MywyMjQ3MSwyMjQ4MCwyMjQ1NywyMjQ2NSwyMjc5OCwyMjg1OCwyMzA2NSwyMzA2MiwyMzA4NSwyMzA4NiwyMzA2MSwyMzA1NSwyMzA2MywyMzA1MCwyMzA3MCwyMzA5MSwyMzQwNCwyMzQ2MywyMzQ2OSwy''@;'; put 'put ''MzQ2OCwyMzU1NSwyMzYzOCwyMzYzNiwyMzc4OCwyMzgwNywyMzc5MCwyMzc5MywyMzc5OSwyMzgwOCwyMzgwMSwyNDEwNSwyNDEwNCwyNDIzMiwyNDIzOCwyNDIzNCwyNDIzNiwyNDM3MSwyNDM2OCwyNDQyMywyNDY2OSwyNDY2NiwyNDY3OSwyNDY0MSwyNDczOCwyNDcxMiwyNDcwNCwyNDcy''@;'; put 'put ''MiwyNDcwNSwyNDczMywyNDcwNywyNDcyNSwyNDczMSwyNDcyNywyNDcxMSwyNDczMiwyNDcxOCwyNTExMywyNTE1OCwyNTMzMCwyNTM2MCwyNTQzMCwyNTM4OCwyNTQxMiwyNTQxMywyNTM5OCwyNTQxMSwyNTU3MiwyNTQwMSwyNTQxOSwyNTQxOCwyNTQwNCwyNTM4NSwyNTQwOSwyNTM5Niwy''@;'; put 'put ''NTQzMiwyNTQyOCwyNTQzMywyNTM4OSwyNTQxNSwyNTM5NSwyNTQzNCwyNTQyNSwyNTQwMCwyNTQzMSwyNTQwOCwyNTQxNiwyNTkzMCwyNTkyNiwyNjA1NCwyNjA1MSwyNjA1MiwyNjA1MCwyNjE4NiwyNjIwNywyNjE4MywyNjE5MywyNjM4NiwyNjM4NywyNjY1NSwyNjY1MCwyNjY5NywyNjY3''@;'; put 'put ''NCwyNjY3NSwyNjY4MywyNjY5OSwyNjcwMywyNjY0NiwyNjY3MywyNjY1MiwyNjY3NywyNjY2NywyNjY2OSwyNjY3MSwyNjcwMiwyNjY5MiwyNjY3NiwyNjY1MywyNjY0MiwyNjY0NCwyNjY2MiwyNjY2NCwyNjY3MCwyNjcwMSwyNjY4MiwyNjY2MSwyNjY1NiwyNzQzNiwyNzQzOSwyNzQzNywy''@;'; put 'put ''NzQ0MSwyNzQ0NCwyNzUwMSwzMjg5OCwyNzUyOCwyNzYyMiwyNzYyMCwyNzYyNCwyNzYxOSwyNzYxOCwyNzYyMywyNzY4NSwyODAyNiwyODAwMywyODAwNCwyODAyMiwyNzkxNywyODAwMSwyODA1MCwyNzk5MiwyODAwMiwyODAxMywyODAxNSwyODA0OSwyODA0NSwyODE0MywyODAzMSwyODAz''@;'; put 'put ''OCwyNzk5OCwyODAwNywyOGUzLDI4MDU1LDI4MDE2LDI4MDI4LDI3OTk5LDI4MDM0LDI4MDU2LDI3OTUxLDI4MDA4LDI4MDQzLDI4MDMwLDI4MDMyLDI4MDM2LDI3OTI2LDI4MDM1LDI4MDI3LDI4MDI5LDI4MDIxLDI4MDQ4LDI4ODkyLDI4ODgzLDI4ODgxLDI4ODkzLDI4ODc1LDMyNTY5LDI4''@;'; put 'put ''ODk4LDI4ODg3LDI4ODgyLDI4ODk0LDI4ODk2LDI4ODg0LDI4ODc3LDI4ODY5LDI4ODcwLDI4ODcxLDI4ODkwLDI4ODc4LDI4ODk3LDI5MjUwLDI5MzA0LDI5MzAzLDI5MzAyLDI5NDQwLDI5NDM0LDI5NDI4LDI5NDM4LDI5NDMwLDI5NDI3LDI5NDM1LDI5NDQxLDI5NjUxLDI5NjU3LDI5NjY5''@;'; put 'put ''LDI5NjU0LDI5NjI4LDI5NjcxLDI5NjY3LDI5NjczLDI5NjYwLDI5NjUwLDI5NjU5LDI5NjUyLDI5NjYxLDI5NjU4LDI5NjU1LDI5NjU2LDI5NjcyLDI5OTE4LDI5OTE5LDI5OTQwLDI5OTQxLDI5OTg1LDMwMDQzLDMwMDQ3LDMwMTI4LDMwMTQ1LDMwMTM5LDMwMTQ4LDMwMTQ0LDMwMTQzLDMw''@;'; put 'put ''MTM0LDMwMTM4LDMwMzQ2LDMwNDA5LDMwNDkzLDMwNDkxLDMwNDgwLDMwNDgzLDMwNDgyLDMwNDk5LDMwNDgxLDMwNDg1LDMwNDg5LDMwNDkwLDMwNDk4LDMwNTAzLDMwNzU1LDMwNzY0LDMwNzU0LDMwNzczLDMwNzY3LDMwNzYwLDMwNzY2LDMwNzYzLDMwNzUzLDMwNzYxLDMwNzcxLDMwNzYy''@;'; put 'put ''LDMwNzY5LDMxMDYwLDMxMDY3LDMxMDU1LDMxMDY4LDMxMDU5LDMxMDU4LDMxMDU3LDMxMjExLDMxMjEyLDMxMjAwLDMxMjE0LDMxMjEzLDMxMjEwLDMxMTk2LDMxMTk4LDMxMTk3LDMxMzY2LDMxMzY5LDMxMzY1LDMxMzcxLDMxMzcyLDMxMzcwLDMxMzY3LDMxNDQ4LDMxNTA0LDMxNDkyLDMx''@;'; put 'put ''NTA3LDMxNDkzLDMxNTAzLDMxNDk2LDMxNDk4LDMxNTAyLDMxNDk3LDMxNTA2LDMxODc2LDMxODg5LDMxODgyLDMxODg0LDMxODgwLDMxODg1LDMxODc3LDMyMDMwLDMyMDI5LDMyMDE3LDMyMDE0LDMyMDI0LDMyMDIyLDMyMDE5LDMyMDMxLDMyMDE4LDMyMDE1LDMyMDEyLDMyNjA0LDMyNjA5''@;'; put 'put ''LDMyNjA2LDMyNjA4LDMyNjA1LDMyNjAzLDMyNjYyLDMyNjU4LDMyNzA3LDMyNzA2LDMyNzA0LDMyNzkwLDMyODMwLDMyODI1LDMzMDE4LDMzMDEwLDMzMDE3LDMzMDEzLDMzMDI1LDMzMDE5LDMzMDI0LDMzMjgxLDMzMzI3LDMzMzE3LDMzNTg3LDMzNTgxLDMzNjA0LDMzNTYxLDMzNjE3LDMz''@;'; put 'put ''NTczLDMzNjIyLDMzNTk5LDMzNjAxLDMzNTc0LDMzNTY0LDMzNTcwLDMzNjAyLDMzNjE0LDMzNTYzLDMzNTc4LDMzNTQ0LDMzNTk2LDMzNjEzLDMzNTU4LDMzNTcyLDMzNTY4LDMzNTkxLDMzNTgzLDMzNTc3LDMzNjA3LDMzNjA1LDMzNjEyLDMzNjE5LDMzNTY2LDMzNTgwLDMzNjExLDMzNTc1''@;'; put 'put ''LDMzNjA4LDM0Mzg3LDM0Mzg2LDM0NDY2LDM0NDcyLDM0NDU0LDM0NDQ1LDM0NDQ5LDM0NDYyLDM0NDM5LDM0NDU1LDM0NDM4LDM0NDQzLDM0NDU4LDM0NDM3LDM0NDY5LDM0NDU3LDM0NDY1LDM0NDcxLDM0NDUzLDM0NDU2LDM0NDQ2LDM0NDYxLDM0NDQ4LDM0NDUyLDM0ODgzLDM0ODg0LDM0''@;'; put 'put ''OTI1LDM0OTMzLDM0OTM0LDM0OTMwLDM0OTQ0LDM0OTI5LDM0OTQzLDM0OTI3LDM0OTQ3LDM0OTQyLDM0OTMyLDM0OTQwLDM1MzQ2LDM1OTExLDM1OTI3LDM1OTYzLDM2MDA0LDM2MDAzLDM2MjE0LDM2MjE2LDM2Mjc3LDM2Mjc5LDM2Mjc4LDM2NTYxLDM2NTYzLDM2ODYyLDM2ODUzLDM2ODY2''@;'; put 'put ''LDM2ODYzLDM2ODU5LDM2ODY4LDM2ODYwLDM2ODU0LDM3MDc4LDM3MDg4LDM3MDgxLDM3MDgyLDM3MDkxLDM3MDg3LDM3MDkzLDM3MDgwLDM3MDgzLDM3MDc5LDM3MDg0LDM3MDkyLDM3MjAwLDM3MTk4LDM3MTk5LDM3MzMzLDM3MzQ2LDM3MzM4LDM4NDkyLDM4NDk1LDM4NTg4LDM5MTM5LDM5''@;'; put 'put ''NjQ3LDM5NzI3LDIwMDk1LDIwNTkyLDIwNTg2LDIwNTc3LDIwNTc0LDIwNTc2LDIwNTYzLDIwNTU1LDIwNTczLDIwNTk0LDIwNTUyLDIwNTU3LDIwNTQ1LDIwNTcxLDIwNTU0LDIwNTc4LDIwNTAxLDIwNTQ5LDIwNTc1LDIwNTg1LDIwNTg3LDIwNTc5LDIwNTgwLDIwNTUwLDIwNTQ0LDIwNTkw''@;'; put 'put ''LDIwNTk1LDIwNTY3LDIwNTYxLDIwOTQ0LDIxMDk5LDIxMTAxLDIxMTAwLDIxMTAyLDIxMjA2LDIxMjAzLDIxMjkzLDIxNDA0LDIxODc3LDIxODc4LDIxODIwLDIxODM3LDIxODQwLDIxODEyLDIxODAyLDIxODQxLDIxODU4LDIxODE0LDIxODEzLDIxODA4LDIxODQyLDIxODI5LDIxNzcyLDIx''@;'; put 'put ''ODEwLDIxODYxLDIxODM4LDIxODE3LDIxODMyLDIxODA1LDIxODE5LDIxODI0LDIxODM1LDIyMjgyLDIyMjc5LDIyNTIzLDIyNTQ4LDIyNDk4LDIyNTE4LDIyNDkyLDIyNTE2LDIyNTI4LDIyNTA5LDIyNTI1LDIyNTM2LDIyNTIwLDIyNTM5LDIyNTE1LDIyNDc5LDIyNTM1LDIyNTEwLDIyNDk5''@;'; put 'put ''LDIyNTE0LDIyNTAxLDIyNTA4LDIyNDk3LDIyNTQyLDIyNTI0LDIyNTQ0LDIyNTAzLDIyNTI5LDIyNTQwLDIyNTEzLDIyNTA1LDIyNTEyLDIyNTQxLDIyNTMyLDIyODc2LDIzMTM2LDIzMTI4LDIzMTI1LDIzMTQzLDIzMTM0LDIzMDk2LDIzMDkzLDIzMTQ5LDIzMTIwLDIzMTM1LDIzMTQxLDIz''@;'; put 'put ''MTQ4LDIzMTIzLDIzMTQwLDIzMTI3LDIzMTA3LDIzMTMzLDIzMTIyLDIzMTA4LDIzMTMxLDIzMTEyLDIzMTgyLDIzMTAyLDIzMTE3LDIzMDk3LDIzMTE2LDIzMTUyLDIzMTQ1LDIzMTExLDIzMTIxLDIzMTI2LDIzMTA2LDIzMTMyLDIzNDEwLDIzNDA2LDIzNDg5LDIzNDg4LDIzNjQxLDIzODM4''@;'; put 'put ''LDIzODE5LDIzODM3LDIzODM0LDIzODQwLDIzODIwLDIzODQ4LDIzODIxLDIzODQ2LDIzODQ1LDIzODIzLDIzODU2LDIzODI2LDIzODQzLDIzODM5LDIzODU0LDI0MTI2LDI0MTE2LDI0MjQxLDI0MjQ0LDI0MjQ5LDI0MjQyLDI0MjQzLDI0Mzc0LDI0Mzc2LDI0NDc1LDI0NDcwLDI0NDc5LDI0''@;'; put 'put ''NzE0LDI0NzIwLDI0NzEwLDI0NzY2LDI0NzUyLDI0NzYyLDI0Nzg3LDI0Nzg4LDI0NzgzLDI0ODA0LDI0NzkzLDI0Nzk3LDI0Nzc2LDI0NzUzLDI0Nzk1LDI0NzU5LDI0Nzc4LDI0NzY3LDI0NzcxLDI0NzgxLDI0NzY4LDI1Mzk0LDI1NDQ1LDI1NDgyLDI1NDc0LDI1NDY5LDI1NTMzLDI1NTAy''@;'; put 'put ''LDI1NTE3LDI1NTAxLDI1NDk1LDI1NTE1LDI1NDg2LDI1NDU1LDI1NDc5LDI1NDg4LDI1NDU0LDI1NTE5LDI1NDYxLDI1NTAwLDI1NDUzLDI1NTE4LDI1NDY4LDI1NTA4LDI1NDAzLDI1NTAzLDI1NDY0LDI1NDc3LDI1NDczLDI1NDg5LDI1NDg1LDI1NDU2LDI1OTM5LDI2MDYxLDI2MjEzLDI2''@;'; put 'put ''MjA5LDI2MjAzLDI2MjAxLDI2MjA0LDI2MjEwLDI2MzkyLDI2NzQ1LDI2NzU5LDI2NzY4LDI2NzgwLDI2NzMzLDI2NzM0LDI2Nzk4LDI2Nzk1LDI2OTY2LDI2NzM1LDI2Nzg3LDI2Nzk2LDI2NzkzLDI2NzQxLDI2NzQwLDI2ODAyLDI2NzY3LDI2NzQzLDI2NzcwLDI2NzQ4LDI2NzMxLDI2NzM4''@;'; put 'put ''LDI2Nzk0LDI2NzUyLDI2NzM3LDI2NzUwLDI2Nzc5LDI2Nzc0LDI2NzYzLDI2Nzg0LDI2NzYxLDI2Nzg4LDI2NzQ0LDI2NzQ3LDI2NzY5LDI2NzY0LDI2NzYyLDI2NzQ5LDI3NDQ2LDI3NDQzLDI3NDQ3LDI3NDQ4LDI3NTM3LDI3NTM1LDI3NTMzLDI3NTM0LDI3NTMyLDI3NjkwLDI4MDk2LDI4''@;'; put 'put ''MDc1LDI4MDg0LDI4MDgzLDI4Mjc2LDI4MDc2LDI4MTM3LDI4MTMwLDI4MDg3LDI4MTUwLDI4MTE2LDI4MTYwLDI4MTA0LDI4MTI4LDI4MTI3LDI4MTE4LDI4MDk0LDI4MTMzLDI4MTI0LDI4MTI1LDI4MTIzLDI4MTQ4LDI4MTA2LDI4MDkzLDI4MTQxLDI4MTQ0LDI4MDkwLDI4MTE3LDI4MDk4''@;'; put 'put ''LDI4MTExLDI4MTA1LDI4MTEyLDI4MTQ2LDI4MTE1LDI4MTU3LDI4MTE5LDI4MTA5LDI4MTMxLDI4MDkxLDI4OTIyLDI4OTQxLDI4OTE5LDI4OTUxLDI4OTE2LDI4OTQwLDI4OTEyLDI4OTMyLDI4OTE1LDI4OTQ0LDI4OTI0LDI4OTI3LDI4OTM0LDI4OTQ3LDI4OTI4LDI4OTIwLDI4OTE4LDI4''@;'; put 'put ''OTM5LDI4OTMwLDI4OTQyLDI5MzEwLDI5MzA3LDI5MzA4LDI5MzExLDI5NDY5LDI5NDYzLDI5NDQ3LDI5NDU3LDI5NDY0LDI5NDUwLDI5NDQ4LDI5NDM5LDI5NDU1LDI5NDcwLDI5NTc2LDI5Njg2LDI5Njg4LDI5Njg1LDI5NzAwLDI5Njk3LDI5NjkzLDI5NzAzLDI5Njk2LDI5NjkwLDI5Njky''@;'; put 'put ''LDI5Njk1LDI5NzA4LDI5NzA3LDI5Njg0LDI5NzA0LDMwMDUyLDMwMDUxLDMwMTU4LDMwMTYyLDMwMTU5LDMwMTU1LDMwMTU2LDMwMTYxLDMwMTYwLDMwMzUxLDMwMzQ1LDMwNDE5LDMwNTIxLDMwNTExLDMwNTA5LDMwNTEzLDMwNTE0LDMwNTE2LDMwNTE1LDMwNTI1LDMwNTAxLDMwNTIzLDMw''@;'; put 'put ''NTE3LDMwNzkyLDMwODAyLDMwNzkzLDMwNzk3LDMwNzk0LDMwNzk2LDMwNzU4LDMwNzg5LDMwODAwLDMxMDc2LDMxMDc5LDMxMDgxLDMxMDgyLDMxMDc1LDMxMDgzLDMxMDczLDMxMTYzLDMxMjI2LDMxMjI0LDMxMjIyLDMxMjIzLDMxMzc1LDMxMzgwLDMxMzc2LDMxNTQxLDMxNTU5LDMxNTQw''@;'; put 'put ''LDMxNTI1LDMxNTM2LDMxNTIyLDMxNTI0LDMxNTM5LDMxNTEyLDMxNTMwLDMxNTE3LDMxNTM3LDMxNTMxLDMxNTMzLDMxNTM1LDMxNTM4LDMxNTQ0LDMxNTE0LDMxNTIzLDMxODkyLDMxODk2LDMxODk0LDMxOTA3LDMyMDUzLDMyMDYxLDMyMDU2LDMyMDU0LDMyMDU4LDMyMDY5LDMyMDQ0LDMy''@;'; put 'put ''MDQxLDMyMDY1LDMyMDcxLDMyMDYyLDMyMDYzLDMyMDc0LDMyMDU5LDMyMDQwLDMyNjExLDMyNjYxLDMyNjY4LDMyNjY5LDMyNjY3LDMyNzE0LDMyNzE1LDMyNzE3LDMyNzIwLDMyNzIxLDMyNzExLDMyNzE5LDMyNzEzLDMyNzk5LDMyNzk4LDMyNzk1LDMyODM5LDMyODM1LDMyODQwLDMzMDQ4''@;'; put 'put ''LDMzMDYxLDMzMDQ5LDMzMDUxLDMzMDY5LDMzMDU1LDMzMDY4LDMzMDU0LDMzMDU3LDMzMDQ1LDMzMDYzLDMzMDUzLDMzMDU4LDMzMjk3LDMzMzM2LDMzMzMxLDMzMzM4LDMzMzMyLDMzMzMwLDMzMzk2LDMzNjgwLDMzNjk5LDMzNzA0LDMzNjc3LDMzNjU4LDMzNjUxLDMzNzAwLDMzNjUyLDMz''@;'; put 'put ''Njc5LDMzNjY1LDMzNjg1LDMzNjg5LDMzNjUzLDMzNjg0LDMzNzA1LDMzNjYxLDMzNjY3LDMzNjc2LDMzNjkzLDMzNjkxLDMzNzA2LDMzNjc1LDMzNjYyLDMzNzAxLDMzNzExLDMzNjcyLDMzNjg3LDMzNzEyLDMzNjYzLDMzNzAyLDMzNjcxLDMzNzEwLDMzNjU0LDMzNjkwLDM0MzkzLDM0Mzkw''@;'; put 'put ''LDM0NDk1LDM0NDg3LDM0NDk4LDM0NDk3LDM0NTAxLDM0NDkwLDM0NDgwLDM0NTA0LDM0NDg5LDM0NDgzLDM0NDg4LDM0NTA4LDM0NDg0LDM0NDkxLDM0NDkyLDM0NDk5LDM0NDkzLDM0NDk0LDM0ODk4LDM0OTUzLDM0OTY1LDM0OTg0LDM0OTc4LDM0OTg2LDM0OTcwLDM0OTYxLDM0OTc3LDM0''@;'; put 'put ''OTc1LDM0OTY4LDM0OTgzLDM0OTY5LDM0OTcxLDM0OTY3LDM0OTgwLDM0OTg4LDM0OTU2LDM0OTYzLDM0OTU4LDM1MjAyLDM1Mjg2LDM1Mjg5LDM1Mjg1LDM1Mzc2LDM1MzY3LDM1MzcyLDM1MzU4LDM1ODk3LDM1ODk5LDM1OTMyLDM1OTMzLDM1OTY1LDM2MDA1LDM2MjIxLDM2MjE5LDM2MjE3''@;'; put 'put ''LDM2Mjg0LDM2MjkwLDM2MjgxLDM2Mjg3LDM2Mjg5LDM2NTY4LDM2NTc0LDM2NTczLDM2NTcyLDM2NTY3LDM2NTc2LDM2NTc3LDM2OTAwLDM2ODc1LDM2ODgxLDM2ODkyLDM2ODc2LDM2ODk3LDM3MTAzLDM3MDk4LDM3MTA0LDM3MTA4LDM3MTA2LDM3MTA3LDM3MDc2LDM3MDk5LDM3MTAwLDM3''@;'; put 'put ''MDk3LDM3MjA2LDM3MjA4LDM3MjEwLDM3MjAzLDM3MjA1LDM3MzU2LDM3MzY0LDM3MzYxLDM3MzYzLDM3MzY4LDM3MzQ4LDM3MzY5LDM3MzU0LDM3MzU1LDM3MzY3LDM3MzUyLDM3MzU4LDM4MjY2LDM4Mjc4LDM4MjgwLDM4NTI0LDM4NTA5LDM4NTA3LDM4NTEzLDM4NTExLDM4NTkxLDM4NzYy''@;'; put 'put ''LDM4OTE2LDM5MTQxLDM5MzE5LDIwNjM1LDIwNjI5LDIwNjI4LDIwNjM4LDIwNjE5LDIwNjQzLDIwNjExLDIwNjIwLDIwNjIyLDIwNjM3LDIwNTg0LDIwNjM2LDIwNjI2LDIwNjEwLDIwNjE1LDIwODMxLDIwOTQ4LDIxMjY2LDIxMjY1LDIxNDEyLDIxNDE1LDIxOTA1LDIxOTI4LDIxOTI1LDIx''@;'; put 'put ''OTMzLDIxODc5LDIyMDg1LDIxOTIyLDIxOTA3LDIxODk2LDIxOTAzLDIxOTQxLDIxODg5LDIxOTIzLDIxOTA2LDIxOTI0LDIxODg1LDIxOTAwLDIxOTI2LDIxODg3LDIxOTA5LDIxOTIxLDIxOTAyLDIyMjg0LDIyNTY5LDIyNTgzLDIyNTUzLDIyNTU4LDIyNTY3LDIyNTYzLDIyNTY4LDIyNTE3''@;'; put 'put ''LDIyNjAwLDIyNTY1LDIyNTU2LDIyNTU1LDIyNTc5LDIyNTkxLDIyNTgyLDIyNTc0LDIyNTg1LDIyNTg0LDIyNTczLDIyNTcyLDIyNTg3LDIyODgxLDIzMjE1LDIzMTg4LDIzMTk5LDIzMTYyLDIzMjAyLDIzMTk4LDIzMTYwLDIzMjA2LDIzMTY0LDIzMjA1LDIzMjEyLDIzMTg5LDIzMjE0LDIz''@;'; put 'put ''MDk1LDIzMTcyLDIzMTc4LDIzMTkxLDIzMTcxLDIzMTc5LDIzMjA5LDIzMTYzLDIzMTY1LDIzMTgwLDIzMTk2LDIzMTgzLDIzMTg3LDIzMTk3LDIzNTMwLDIzNTAxLDIzNDk5LDIzNTA4LDIzNTA1LDIzNDk4LDIzNTAyLDIzNTY0LDIzNjAwLDIzODYzLDIzODc1LDIzOTE1LDIzODczLDIzODgz''@;'; put 'put ''LDIzODcxLDIzODYxLDIzODg5LDIzODg2LDIzODkzLDIzODU5LDIzODY2LDIzODkwLDIzODY5LDIzODU3LDIzODk3LDIzODc0LDIzODY1LDIzODgxLDIzODY0LDIzODY4LDIzODU4LDIzODYyLDIzODcyLDIzODc3LDI0MTMyLDI0MTI5LDI0NDA4LDI0NDg2LDI0NDg1LDI0NDkxLDI0Nzc3LDI0''@;'; put 'put ''NzYxLDI0NzgwLDI0ODAyLDI0NzgyLDI0NzcyLDI0ODUyLDI0ODE4LDI0ODQyLDI0ODU0LDI0ODM3LDI0ODIxLDI0ODUxLDI0ODI0LDI0ODI4LDI0ODMwLDI0NzY5LDI0ODM1LDI0ODU2LDI0ODYxLDI0ODQ4LDI0ODMxLDI0ODM2LDI0ODQzLDI1MTYyLDI1NDkyLDI1NTIxLDI1NTIwLDI1NTUw''@;'; put 'put ''LDI1NTczLDI1NTc2LDI1NTgzLDI1NTM5LDI1NzU3LDI1NTg3LDI1NTQ2LDI1NTY4LDI1NTkwLDI1NTU3LDI1NTg2LDI1NTg5LDI1Njk3LDI1NTY3LDI1NTM0LDI1NTY1LDI1NTY0LDI1NTQwLDI1NTYwLDI1NTU1LDI1NTM4LDI1NTQzLDI1NTQ4LDI1NTQ3LDI1NTQ0LDI1NTg0LDI1NTU5LDI1''@;'; put 'put ''NTYxLDI1OTA2LDI1OTU5LDI1OTYyLDI1OTU2LDI1OTQ4LDI1OTYwLDI1OTU3LDI1OTk2LDI2MDEzLDI2MDE0LDI2MDMwLDI2MDY0LDI2MDY2LDI2MjM2LDI2MjIwLDI2MjM1LDI2MjQwLDI2MjI1LDI2MjMzLDI2MjE4LDI2MjI2LDI2MzY5LDI2ODkyLDI2ODM1LDI2ODg0LDI2ODQ0LDI2OTIy''@;'; put 'put ''LDI2ODYwLDI2ODU4LDI2ODY1LDI2ODk1LDI2ODM4LDI2ODcxLDI2ODU5LDI2ODUyLDI2ODcwLDI2ODk5LDI2ODk2LDI2ODY3LDI2ODQ5LDI2ODg3LDI2ODI4LDI2ODg4LDI2OTkyLDI2ODA0LDI2ODk3LDI2ODYzLDI2ODIyLDI2OTAwLDI2ODcyLDI2ODMyLDI2ODc3LDI2ODc2LDI2ODU2LDI2''@;'; put 'put ''ODkxLDI2ODkwLDI2OTAzLDI2ODMwLDI2ODI0LDI2ODQ1LDI2ODQ2LDI2ODU0LDI2ODY4LDI2ODMzLDI2ODg2LDI2ODM2LDI2ODU3LDI2OTAxLDI2OTE3LDI2ODIzLDI3NDQ5LDI3NDUxLDI3NDU1LDI3NDUyLDI3NTQwLDI3NTQzLDI3NTQ1LDI3NTQxLDI3NTgxLDI3NjMyLDI3NjM0LDI3NjM1''@;'; put 'put ''LDI3Njk2LDI4MTU2LDI4MjMwLDI4MjMxLDI4MTkxLDI4MjMzLDI4Mjk2LDI4MjIwLDI4MjIxLDI4MjI5LDI4MjU4LDI4MjAzLDI4MjIzLDI4MjI1LDI4MjUzLDI4Mjc1LDI4MTg4LDI4MjExLDI4MjM1LDI4MjI0LDI4MjQxLDI4MjE5LDI4MTYzLDI4MjA2LDI4MjU0LDI4MjY0LDI4MjUyLDI4''@;'; put 'put ''MjU3LDI4MjA5LDI4MjAwLDI4MjU2LDI4MjczLDI4MjY3LDI4MjE3LDI4MTk0LDI4MjA4LDI4MjQzLDI4MjYxLDI4MTk5LDI4MjgwLDI4MjYwLDI4Mjc5LDI4MjQ1LDI4MjgxLDI4MjQyLDI4MjYyLDI4MjEzLDI4MjE0LDI4MjUwLDI4OTYwLDI4OTU4LDI4OTc1LDI4OTIzLDI4OTc0LDI4OTc3''@;'; put 'put ''LDI4OTYzLDI4OTY1LDI4OTYyLDI4OTc4LDI4OTU5LDI4OTY4LDI4OTg2LDI4OTU1LDI5MjU5LDI5Mjc0LDI5MzIwLDI5MzIxLDI5MzE4LDI5MzE3LDI5MzIzLDI5NDU4LDI5NDUxLDI5NDg4LDI5NDc0LDI5NDg5LDI5NDkxLDI5NDc5LDI5NDkwLDI5NDg1LDI5NDc4LDI5NDc1LDI5NDkzLDI5''@;'; put 'put ''NDUyLDI5NzQyLDI5NzQwLDI5NzQ0LDI5NzM5LDI5NzE4LDI5NzIyLDI5NzI5LDI5NzQxLDI5NzQ1LDI5NzMyLDI5NzMxLDI5NzI1LDI5NzM3LDI5NzI4LDI5NzQ2LDI5OTQ3LDI5OTk5LDMwMDYzLDMwMDYwLDMwMTgzLDMwMTcwLDMwMTc3LDMwMTgyLDMwMTczLDMwMTc1LDMwMTgwLDMwMTY3''@;'; put 'put ''LDMwMzU3LDMwMzU0LDMwNDI2LDMwNTM0LDMwNTM1LDMwNTMyLDMwNTQxLDMwNTMzLDMwNTM4LDMwNTQyLDMwNTM5LDMwNTQwLDMwNjg2LDMwNzAwLDMwODE2LDMwODIwLDMwODIxLDMwODEyLDMwODI5LDMwODMzLDMwODI2LDMwODMwLDMwODMyLDMwODI1LDMwODI0LDMwODE0LDMwODE4LDMx''@;'; put 'put ''MDkyLDMxMDkxLDMxMDkwLDMxMDg4LDMxMjM0LDMxMjQyLDMxMjM1LDMxMjQ0LDMxMjM2LDMxMzg1LDMxNDYyLDMxNDYwLDMxNTYyLDMxNTQ3LDMxNTU2LDMxNTYwLDMxNTY0LDMxNTY2LDMxNTUyLDMxNTc2LDMxNTU3LDMxOTA2LDMxOTAyLDMxOTEyLDMxOTA1LDMyMDg4LDMyMTExLDMyMDk5''@;'; put 'put ''LDMyMDgzLDMyMDg2LDMyMTAzLDMyMTA2LDMyMDc5LDMyMTA5LDMyMDkyLDMyMTA3LDMyMDgyLDMyMDg0LDMyMTA1LDMyMDgxLDMyMDk1LDMyMDc4LDMyNTc0LDMyNTc1LDMyNjEzLDMyNjE0LDMyNjc0LDMyNjcyLDMyNjczLDMyNzI3LDMyODQ5LDMyODQ3LDMyODQ4LDMzMDIyLDMyOTgwLDMz''@;'; put 'put ''MDkxLDMzMDk4LDMzMTA2LDMzMTAzLDMzMDk1LDMzMDg1LDMzMTAxLDMzMDgyLDMzMjU0LDMzMjYyLDMzMjcxLDMzMjcyLDMzMjczLDMzMjg0LDMzMzQwLDMzMzQxLDMzMzQzLDMzMzk3LDMzNTk1LDMzNzQzLDMzNzg1LDMzODI3LDMzNzI4LDMzNzY4LDMzODEwLDMzNzY3LDMzNzY0LDMzNzg4''@;'; put 'put ''LDMzNzgyLDMzODA4LDMzNzM0LDMzNzM2LDMzNzcxLDMzNzYzLDMzNzI3LDMzNzkzLDMzNzU3LDMzNzY1LDMzNzUyLDMzNzkxLDMzNzYxLDMzNzM5LDMzNzQyLDMzNzUwLDMzNzgxLDMzNzM3LDMzODAxLDMzODA3LDMzNzU4LDMzODA5LDMzNzk4LDMzNzMwLDMzNzc5LDMzNzQ5LDMzNzg2LDMz''@;'; put 'put ''NzM1LDMzNzQ1LDMzNzcwLDMzODExLDMzNzMxLDMzNzcyLDMzNzc0LDMzNzMyLDMzNzg3LDMzNzUxLDMzNzYyLDMzODE5LDMzNzU1LDMzNzkwLDM0NTIwLDM0NTMwLDM0NTM0LDM0NTE1LDM0NTMxLDM0NTIyLDM0NTM4LDM0NTI1LDM0NTM5LDM0NTI0LDM0NTQwLDM0NTM3LDM0NTE5LDM0NTM2''@;'; put 'put ''LDM0NTEzLDM0ODg4LDM0OTAyLDM0OTAxLDM1MDAyLDM1MDMxLDM1MDAxLDM1ZTMsMzUwMDgsMzUwMDYsMzQ5OTgsMzUwMDQsMzQ5OTksMzUwMDUsMzQ5OTQsMzUwNzMsMzUwMTcsMzUyMjEsMzUyMjQsMzUyMjMsMzUyOTMsMzUyOTAsMzUyOTEsMzU0MDYsMzU0MDUsMzUzODUsMzU0MTcsMzUz''@;'; put 'put ''OTIsMzU0MTUsMzU0MTYsMzUzOTYsMzUzOTcsMzU0MTAsMzU0MDAsMzU0MDksMzU0MDIsMzU0MDQsMzU0MDcsMzU5MzUsMzU5NjksMzU5NjgsMzYwMjYsMzYwMzAsMzYwMTYsMzYwMjUsMzYwMjEsMzYyMjgsMzYyMjQsMzYyMzMsMzYzMTIsMzYzMDcsMzYzMDEsMzYyOTUsMzYzMTAsMzYzMTYs''@;'; put 'put ''MzYzMDMsMzYzMDksMzYzMTMsMzYyOTYsMzYzMTEsMzYyOTMsMzY1OTEsMzY1OTksMzY2MDIsMzY2MDEsMzY1ODIsMzY1OTAsMzY1ODEsMzY1OTcsMzY1ODMsMzY1ODQsMzY1OTgsMzY1ODcsMzY1OTMsMzY1ODgsMzY1OTYsMzY1ODUsMzY5MDksMzY5MTYsMzY5MTEsMzcxMjYsMzcxNjQsMzcx''@;'; put 'put ''MjQsMzcxMTksMzcxMTYsMzcxMjgsMzcxMTMsMzcxMTUsMzcxMjEsMzcxMjAsMzcxMjcsMzcxMjUsMzcxMjMsMzcyMTcsMzcyMjAsMzcyMTUsMzcyMTgsMzcyMTYsMzczNzcsMzczODYsMzc0MTMsMzczNzksMzc0MDIsMzc0MTQsMzczOTEsMzczODgsMzczNzYsMzczOTQsMzczNzUsMzczNzMs''@;'; put 'put ''MzczODIsMzczODAsMzc0MTUsMzczNzgsMzc0MDQsMzc0MTIsMzc0MDEsMzczOTksMzczODEsMzczOTgsMzgyNjcsMzgyODUsMzgyODQsMzgyODgsMzg1MzUsMzg1MjYsMzg1MzYsMzg1MzcsMzg1MzEsMzg1MjgsMzg1OTQsMzg2MDAsMzg1OTUsMzg2NDEsMzg2NDAsMzg3NjQsMzg3NjgsMzg3''@;'; put 'put ''NjYsMzg5MTksMzkwODEsMzkxNDcsNDAxNjYsNDA2OTcsMjAwOTksMjAxMDAsMjAxNTAsMjA2NjksMjA2NzEsMjA2NzgsMjA2NTQsMjA2NzYsMjA2ODIsMjA2NjAsMjA2ODAsMjA2NzQsMjA2NTYsMjA2NzMsMjA2NjYsMjA2NTcsMjA2ODMsMjA2ODEsMjA2NjIsMjA2NjQsMjA5NTEsMjExMTQs''@;'; put 'put ''MjExMTIsMjExMTUsMjExMTYsMjE5NTUsMjE5NzksMjE5NjQsMjE5NjgsMjE5NjMsMjE5NjIsMjE5ODEsMjE5NTIsMjE5NzIsMjE5NTYsMjE5OTMsMjE5NTEsMjE5NzAsMjE5MDEsMjE5NjcsMjE5NzMsMjE5ODYsMjE5NzQsMjE5NjAsMjIwMDIsMjE5NjUsMjE5NzcsMjE5NTQsMjIyOTIsMjI2''@;'; put 'put ''MTEsMjI2MzIsMjI2MjgsMjI2MDcsMjI2MDUsMjI2MDEsMjI2MzksMjI2MTMsMjI2MDYsMjI2MjEsMjI2MTcsMjI2MjksMjI2MTksMjI1ODksMjI2MjcsMjI2NDEsMjI3ODAsMjMyMzksMjMyMzYsMjMyNDMsMjMyMjYsMjMyMjQsMjMyMTcsMjMyMjEsMjMyMTYsMjMyMzEsMjMyNDAsMjMyMjcs''@;'; put 'put ''MjMyMzgsMjMyMjMsMjMyMzIsMjMyNDIsMjMyMjAsMjMyMjIsMjMyNDUsMjMyMjUsMjMxODQsMjM1MTAsMjM1MTIsMjM1MTMsMjM1ODMsMjM2MDMsMjM5MjEsMjM5MDcsMjM4ODIsMjM5MDksMjM5MjIsMjM5MTYsMjM5MDIsMjM5MTIsMjM5MTEsMjM5MDYsMjQwNDgsMjQxNDMsMjQxNDIsMjQx''@;'; put 'put ''MzgsMjQxNDEsMjQxMzksMjQyNjEsMjQyNjgsMjQyNjIsMjQyNjcsMjQyNjMsMjQzODQsMjQ0OTUsMjQ0OTMsMjQ4MjMsMjQ5MDUsMjQ5MDYsMjQ4NzUsMjQ5MDEsMjQ4ODYsMjQ4ODIsMjQ4NzgsMjQ5MDIsMjQ4NzksMjQ5MTEsMjQ4NzMsMjQ4OTYsMjUxMjAsMzcyMjQsMjUxMjMsMjUxMjUs''@;'; put 'put ''MjUxMjQsMjU1NDEsMjU1ODUsMjU1NzksMjU2MTYsMjU2MTgsMjU2MDksMjU2MzIsMjU2MzYsMjU2NTEsMjU2NjcsMjU2MzEsMjU2MjEsMjU2MjQsMjU2NTcsMjU2NTUsMjU2MzQsMjU2MzUsMjU2MTIsMjU2MzgsMjU2NDgsMjU2NDAsMjU2NjUsMjU2NTMsMjU2NDcsMjU2MTAsMjU2MjYsMjU2''@;'; put 'put ''NjQsMjU2MzcsMjU2MzksMjU2MTEsMjU1NzUsMjU2MjcsMjU2NDYsMjU2MzMsMjU2MTQsMjU5NjcsMjYwMDIsMjYwNjcsMjYyNDYsMjYyNTIsMjYyNjEsMjYyNTYsMjYyNTEsMjYyNTAsMjYyNjUsMjYyNjAsMjYyMzIsMjY0MDAsMjY5ODIsMjY5NzUsMjY5MzYsMjY5NTgsMjY5NzgsMjY5OTMs''@;'; put 'put ''MjY5NDMsMjY5NDksMjY5ODYsMjY5MzcsMjY5NDYsMjY5NjcsMjY5NjksMjcwMDIsMjY5NTIsMjY5NTMsMjY5MzMsMjY5ODgsMjY5MzEsMjY5NDEsMjY5ODEsMjY4NjQsMjdlMywyNjkzMiwyNjk4NSwyNjk0NCwyNjk5MSwyNjk0OCwyNjk5OCwyNjk2OCwyNjk0NSwyNjk5NiwyNjk1NiwyNjkz''@;'; put 'put ''OSwyNjk1NSwyNjkzNSwyNjk3MiwyNjk1OSwyNjk2MSwyNjkzMCwyNjk2MiwyNjkyNywyNzAwMywyNjk0MCwyNzQ2MiwyNzQ2MSwyNzQ1OSwyNzQ1OCwyNzQ2NCwyNzQ1NywyNzU0Nyw2NDAxMywyNzY0MywyNzY0NCwyNzY0MSwyNzYzOSwyNzY0MCwyODMxNSwyODM3NCwyODM2MCwyODMwMywy''@;'; put 'put ''ODM1MiwyODMxOSwyODMwNywyODMwOCwyODMyMCwyODMzNywyODM0NSwyODM1OCwyODM3MCwyODM0OSwyODM1MywyODMxOCwyODM2MSwyODM0MywyODMzNiwyODM2NSwyODMyNiwyODM2NywyODMzOCwyODM1MCwyODM1NSwyODM4MCwyODM3NiwyODMxMywyODMwNiwyODMwMiwyODMwMSwyODMy''@;'; put 'put ''NCwyODMyMSwyODM1MSwyODMzOSwyODM2OCwyODM2MiwyODMxMSwyODMzNCwyODMyMywyODk5OSwyOTAxMiwyOTAxMCwyOTAyNywyOTAyNCwyODk5MywyOTAyMSwyOTAyNiwyOTA0MiwyOTA0OCwyOTAzNCwyOTAyNSwyODk5NCwyOTAxNiwyODk5NSwyOTAwMywyOTA0MCwyOTAyMywyOTAwOCwy''@;'; put 'put ''OTAxMSwyODk5NiwyOTAwNSwyOTAxOCwyOTI2MywyOTMyNSwyOTMyNCwyOTMyOSwyOTMyOCwyOTMyNiwyOTUwMCwyOTUwNiwyOTQ5OSwyOTQ5OCwyOTUwNCwyOTUxNCwyOTUxMywyOTc2NCwyOTc3MCwyOTc3MSwyOTc3OCwyOTc3NywyOTc4MywyOTc2MCwyOTc3NSwyOTc3NiwyOTc3NCwyOTc2''@;'; put 'put ''MiwyOTc2NiwyOTc3MywyOTc4MCwyOTkyMSwyOTk1MSwyOTk1MCwyOTk0OSwyOTk4MSwzMDA3MywzMDA3MSwyNzAxMSwzMDE5MSwzMDIyMywzMDIxMSwzMDE5OSwzMDIwNiwzMDIwNCwzMDIwMSwzMDIwMCwzMDIyNCwzMDIwMywzMDE5OCwzMDE4OSwzMDE5NywzMDIwNSwzMDM2MSwzMDM4OSwz''@;'; put 'put ''MDQyOSwzMDU0OSwzMDU1OSwzMDU2MCwzMDU0NiwzMDU1MCwzMDU1NCwzMDU2OSwzMDU2NywzMDU0OCwzMDU1MywzMDU3MywzMDY4OCwzMDg1NSwzMDg3NCwzMDg2OCwzMDg2MywzMDg1MiwzMDg2OSwzMDg1MywzMDg1NCwzMDg4MSwzMDg1MSwzMDg0MSwzMDg3MywzMDg0OCwzMDg3MCwzMDg0''@;'; put 'put ''MywzMTEwMCwzMTEwNiwzMTEwMSwzMTA5NywzMTI0OSwzMTI1NiwzMTI1NywzMTI1MCwzMTI1NSwzMTI1MywzMTI2NiwzMTI1MSwzMTI1OSwzMTI0OCwzMTM5NSwzMTM5NCwzMTM5MCwzMTQ2NywzMTU5MCwzMTU4OCwzMTU5NywzMTYwNCwzMTU5MywzMTYwMiwzMTU4OSwzMTYwMywzMTYwMSwz''@;'; put 'put ''MTYwMCwzMTU4NSwzMTYwOCwzMTYwNiwzMTU4NywzMTkyMiwzMTkyNCwzMTkxOSwzMjEzNiwzMjEzNCwzMjEyOCwzMjE0MSwzMjEyNywzMjEzMywzMjEyMiwzMjE0MiwzMjEyMywzMjEzMSwzMjEyNCwzMjE0MCwzMjE0OCwzMjEzMiwzMjEyNSwzMjE0NiwzMjYyMSwzMjYxOSwzMjYxNSwzMjYx''@;'; put 'put ''NiwzMjYyMCwzMjY3OCwzMjY3NywzMjY3OSwzMjczMSwzMjczMiwzMjgwMSwzMzEyNCwzMzEyMCwzMzE0MywzMzExNiwzMzEyOSwzMzExNSwzMzEyMiwzMzEzOCwyNjQwMSwzMzExOCwzMzE0MiwzMzEyNywzMzEzNSwzMzA5MiwzMzEyMSwzMzMwOSwzMzM1MywzMzM0OCwzMzM0NCwzMzM0Niwz''@;'; put 'put ''MzM0OSwzNDAzMywzMzg1NSwzMzg3OCwzMzkxMCwzMzkxMywzMzkzNSwzMzkzMywzMzg5MywzMzg3MywzMzg1NiwzMzkyNiwzMzg5NSwzMzg0MCwzMzg2OSwzMzkxNywzMzg4MiwzMzg4MSwzMzkwOCwzMzkwNywzMzg4NSwzNDA1NSwzMzg4NiwzMzg0NywzMzg1MCwzMzg0NCwzMzkxNCwzMzg1''@;'; put 'put ''OSwzMzkxMiwzMzg0MiwzMzg2MSwzMzgzMywzMzc1MywzMzg2NywzMzgzOSwzMzg1OCwzMzgzNywzMzg4NywzMzkwNCwzMzg0OSwzMzg3MCwzMzg2OCwzMzg3NCwzMzkwMywzMzk4OSwzMzkzNCwzMzg1MSwzMzg2MywzMzg0NiwzMzg0MywzMzg5NiwzMzkxOCwzMzg2MCwzMzgzNSwzMzg4OCwz''@;'; put 'put ''Mzg3NiwzMzkwMiwzMzg3MiwzNDU3MSwzNDU2NCwzNDU1MSwzNDU3MiwzNDU1NCwzNDUxOCwzNDU0OSwzNDYzNywzNDU1MiwzNDU3NCwzNDU2OSwzNDU2MSwzNDU1MCwzNDU3MywzNDU2NSwzNTAzMCwzNTAxOSwzNTAyMSwzNTAyMiwzNTAzOCwzNTAzNSwzNTAzNCwzNTAyMCwzNTAyNCwzNTIw''@;'; put 'put ''NSwzNTIyNywzNTI5NSwzNTMwMSwzNTMwMCwzNTI5NywzNTI5NiwzNTI5OCwzNTI5MiwzNTMwMiwzNTQ0NiwzNTQ2MiwzNTQ1NSwzNTQyNSwzNTM5MSwzNTQ0NywzNTQ1OCwzNTQ2MCwzNTQ0NSwzNTQ1OSwzNTQ1NywzNTQ0NCwzNTQ1MCwzNTkwMCwzNTkxNSwzNTkxNCwzNTk0MSwzNTk0MCwz''@;'; put 'put ''NTk0MiwzNTk3NCwzNTk3MiwzNTk3MywzNjA0NCwzNjIwMCwzNjIwMSwzNjI0MSwzNjIzNiwzNjIzOCwzNjIzOSwzNjIzNywzNjI0MywzNjI0NCwzNjI0MCwzNjI0MiwzNjMzNiwzNjMyMCwzNjMzMiwzNjMzNywzNjMzNCwzNjMwNCwzNjMyOSwzNjMyMywzNjMyMiwzNjMyNywzNjMzOCwzNjMz''@;'; put 'put ''MSwzNjM0MCwzNjYxNCwzNjYwNywzNjYwOSwzNjYwOCwzNjYxMywzNjYxNSwzNjYxNiwzNjYxMCwzNjYxOSwzNjk0NiwzNjkyNywzNjkzMiwzNjkzNywzNjkyNSwzNzEzNiwzNzEzMywzNzEzNSwzNzEzNywzNzE0MiwzNzE0MCwzNzEzMSwzNzEzNCwzNzIzMCwzNzIzMSwzNzQ0OCwzNzQ1OCwz''@;'; put 'put ''NzQyNCwzNzQzNCwzNzQ3OCwzNzQyNywzNzQ3NywzNzQ3MCwzNzUwNywzNzQyMiwzNzQ1MCwzNzQ0NiwzNzQ4NSwzNzQ4NCwzNzQ1NSwzNzQ3MiwzNzQ3OSwzNzQ4NywzNzQzMCwzNzQ3MywzNzQ4OCwzNzQyNSwzNzQ2MCwzNzQ3NSwzNzQ1NiwzNzQ5MCwzNzQ1NCwzNzQ1OSwzNzQ1MiwzNzQ2''@;'; put 'put ''MiwzNzQyNiwzODMwMywzODMwMCwzODMwMiwzODI5OSwzODU0NiwzODU0NywzODU0NSwzODU1MSwzODYwNiwzODY1MCwzODY1MywzODY0OCwzODY0NSwzODc3MSwzODc3NSwzODc3NiwzODc3MCwzODkyNywzODkyNSwzODkyNiwzOTA4NCwzOTE1OCwzOTE2MSwzOTM0MywzOTM0NiwzOTM0NCwz''@;'; put 'put ''OTM0OSwzOTU5NywzOTU5NSwzOTc3MSw0MDE3MCw0MDE3Myw0MDE2Nyw0MDU3Niw0MDcwMSwyMDcxMCwyMDY5MiwyMDY5NSwyMDcxMiwyMDcyMywyMDY5OSwyMDcxNCwyMDcwMSwyMDcwOCwyMDY5MSwyMDcxNiwyMDcyMCwyMDcxOSwyMDcwNywyMDcwNCwyMDk1MiwyMTEyMCwyMTEyMSwyMTIy''@;'; put 'put ''NSwyMTIyNywyMTI5NiwyMTQyMCwyMjA1NSwyMjAzNywyMjAyOCwyMjAzNCwyMjAxMiwyMjAzMSwyMjA0NCwyMjAxNywyMjAzNSwyMjAxOCwyMjAxMCwyMjA0NSwyMjAyMCwyMjAxNSwyMjAwOSwyMjY2NSwyMjY1MiwyMjY3MiwyMjY4MCwyMjY2MiwyMjY1NywyMjY1NSwyMjY0NCwyMjY2Nywy''@;'; put 'put ''MjY1MCwyMjY2MywyMjY3MywyMjY3MCwyMjY0NiwyMjY1OCwyMjY2NCwyMjY1MSwyMjY3NiwyMjY3MSwyMjc4MiwyMjg5MSwyMzI2MCwyMzI3OCwyMzI2OSwyMzI1MywyMzI3NCwyMzI1OCwyMzI3NywyMzI3NSwyMzI4MywyMzI2NiwyMzI2NCwyMzI1OSwyMzI3NiwyMzI2MiwyMzI2MSwyMzI1''@;'; put 'put ''NywyMzI3MiwyMzI2MywyMzQxNSwyMzUyMCwyMzUyMywyMzY1MSwyMzkzOCwyMzkzNiwyMzkzMywyMzk0MiwyMzkzMCwyMzkzNywyMzkyNywyMzk0NiwyMzk0NSwyMzk0NCwyMzkzNCwyMzkzMiwyMzk0OSwyMzkyOSwyMzkzNSwyNDE1MiwyNDE1MywyNDE0NywyNDI4MCwyNDI3MywyNDI3OSwy''@;'; put 'put ''NDI3MCwyNDI4NCwyNDI3NywyNDI4MSwyNDI3NCwyNDI3NiwyNDM4OCwyNDM4NywyNDQzMSwyNDUwMiwyNDg3NiwyNDg3MiwyNDg5NywyNDkyNiwyNDk0NSwyNDk0NywyNDkxNCwyNDkxNSwyNDk0NiwyNDk0MCwyNDk2MCwyNDk0OCwyNDkxNiwyNDk1NCwyNDkyMywyNDkzMywyNDg5MSwyNDkz''@;'; put 'put ''OCwyNDkyOSwyNDkxOCwyNTEyOSwyNTEyNywyNTEzMSwyNTY0MywyNTY3NywyNTY5MSwyNTY5MywyNTcxNiwyNTcxOCwyNTcxNCwyNTcxNSwyNTcyNSwyNTcxNywyNTcwMiwyNTc2NiwyNTY3OCwyNTczMCwyNTY5NCwyNTY5MiwyNTY3NSwyNTY4MywyNTY5NiwyNTY4MCwyNTcyNywyNTY2Mywy''@;'; put 'put ''NTcwOCwyNTcwNywyNTY4OSwyNTcwMSwyNTcxOSwyNTk3MSwyNjAxNiwyNjI3MywyNjI3MiwyNjI3MSwyNjM3MywyNjM3MiwyNjQwMiwyNzA1NywyNzA2MiwyNzA4MSwyNzA0MCwyNzA4NiwyNzAzMCwyNzA1NiwyNzA1MiwyNzA2OCwyNzAyNSwyNzAzMywyNzAyMiwyNzA0NywyNzAyMSwyNzA0''@;'; put 'put ''OSwyNzA3MCwyNzA1NSwyNzA3MSwyNzA3NiwyNzA2OSwyNzA0NCwyNzA5MiwyNzA2NSwyNzA4MiwyNzAzNCwyNzA4NywyNzA1OSwyNzAyNywyNzA1MCwyNzA0MSwyNzAzOCwyNzA5NywyNzAzMSwyNzAyNCwyNzA3NCwyNzA2MSwyNzA0NSwyNzA3OCwyNzQ2NiwyNzQ2OSwyNzQ2NywyNzU1MCwy''@;'; put 'put ''NzU1MSwyNzU1MiwyNzU4NywyNzU4OCwyNzY0NiwyODM2NiwyODQwNSwyODQwMSwyODQxOSwyODQ1MywyODQwOCwyODQ3MSwyODQxMSwyODQ2MiwyODQyNSwyODQ5NCwyODQ0MSwyODQ0MiwyODQ1NSwyODQ0MCwyODQ3NSwyODQzNCwyODM5NywyODQyNiwyODQ3MCwyODUzMSwyODQwOSwyODM5''@;'; put 'put ''OCwyODQ2MSwyODQ4MCwyODQ2NCwyODQ3NiwyODQ2OSwyODM5NSwyODQyMywyODQzMCwyODQ4MywyODQyMSwyODQxMywyODQwNiwyODQ3MywyODQ0NCwyODQxMiwyODQ3NCwyODQ0NywyODQyOSwyODQ0NiwyODQyNCwyODQ0OSwyOTA2MywyOTA3MiwyOTA2NSwyOTA1NiwyOTA2MSwyOTA1OCwy''@;'; put 'put ''OTA3MSwyOTA1MSwyOTA2MiwyOTA1NywyOTA3OSwyOTI1MiwyOTI2NywyOTMzNSwyOTMzMywyOTMzMSwyOTUwNywyOTUxNywyOTUyMSwyOTUxNiwyOTc5NCwyOTgxMSwyOTgwOSwyOTgxMywyOTgxMCwyOTc5OSwyOTgwNiwyOTk1MiwyOTk1NCwyOTk1NSwzMDA3NywzMDA5NiwzMDIzMCwzMDIx''@;'; put 'put ''NiwzMDIyMCwzMDIyOSwzMDIyNSwzMDIxOCwzMDIyOCwzMDM5MiwzMDU5MywzMDU4OCwzMDU5NywzMDU5NCwzMDU3NCwzMDU5MiwzMDU3NSwzMDU5MCwzMDU5NSwzMDg5OCwzMDg5MCwzMDkwMCwzMDg5MywzMDg4OCwzMDg0NiwzMDg5MSwzMDg3OCwzMDg4NSwzMDg4MCwzMDg5MiwzMDg4Miwz''@;'; put 'put ''MDg4NCwzMTEyOCwzMTExNCwzMTExNSwzMTEyNiwzMTEyNSwzMTEyNCwzMTEyMywzMTEyNywzMTExMiwzMTEyMiwzMTEyMCwzMTI3NSwzMTMwNiwzMTI4MCwzMTI3OSwzMTI3MiwzMTI3MCwzMTQwMCwzMTQwMywzMTQwNCwzMTQ3MCwzMTYyNCwzMTY0NCwzMTYyNiwzMTYzMywzMTYzMiwzMTYz''@;'; put 'put ''OCwzMTYyOSwzMTYyOCwzMTY0MywzMTYzMCwzMTYyMSwzMTY0MCwyMTEyNCwzMTY0MSwzMTY1MiwzMTYxOCwzMTkzMSwzMTkzNSwzMTkzMiwzMTkzMCwzMjE2NywzMjE4MywzMjE5NCwzMjE2MywzMjE3MCwzMjE5MywzMjE5MiwzMjE5NywzMjE1NywzMjIwNiwzMjE5NiwzMjE5OCwzMjIwMywz''@;'; put 'put ''MjIwNCwzMjE3NSwzMjE4NSwzMjE1MCwzMjE4OCwzMjE1OSwzMjE2NiwzMjE3NCwzMjE2OSwzMjE2MSwzMjIwMSwzMjYyNywzMjczOCwzMjczOSwzMjc0MSwzMjczNCwzMjgwNCwzMjg2MSwzMjg2MCwzMzE2MSwzMzE1OCwzMzE1NSwzMzE1OSwzMzE2NSwzMzE2NCwzMzE2MywzMzMwMSwzMzk0''@;'; put 'put ''MywzMzk1NiwzMzk1MywzMzk1MSwzMzk3OCwzMzk5OCwzMzk4NiwzMzk2NCwzMzk2NiwzMzk2MywzMzk3NywzMzk3MiwzMzk4NSwzMzk5NywzMzk2MiwzMzk0NiwzMzk2OSwzNGUzLDMzOTQ5LDMzOTU5LDMzOTc5LDMzOTU0LDMzOTQwLDMzOTkxLDMzOTk2LDMzOTQ3LDMzOTYxLDMzOTY3LDMz''@;'; put 'put ''OTYwLDM0MDA2LDMzOTQ0LDMzOTc0LDMzOTk5LDMzOTUyLDM0MDA3LDM0MDA0LDM0MDAyLDM0MDExLDMzOTY4LDMzOTM3LDM0NDAxLDM0NjExLDM0NTk1LDM0NjAwLDM0NjY3LDM0NjI0LDM0NjA2LDM0NTkwLDM0NTkzLDM0NTg1LDM0NTg3LDM0NjI3LDM0NjA0LDM0NjI1LDM0NjIyLDM0NjMw''@;'; put 'put ''LDM0NTkyLDM0NjEwLDM0NjAyLDM0NjA1LDM0NjIwLDM0NTc4LDM0NjE4LDM0NjA5LDM0NjEzLDM0NjI2LDM0NTk4LDM0NTk5LDM0NjE2LDM0NTk2LDM0NTg2LDM0NjA4LDM0NTc3LDM1MDYzLDM1MDQ3LDM1MDU3LDM1MDU4LDM1MDY2LDM1MDcwLDM1MDU0LDM1MDY4LDM1MDYyLDM1MDY3LDM1''@;'; put 'put ''MDU2LDM1MDUyLDM1MDUxLDM1MjI5LDM1MjMzLDM1MjMxLDM1MjMwLDM1MzA1LDM1MzA3LDM1MzA0LDM1NDk5LDM1NDgxLDM1NDY3LDM1NDc0LDM1NDcxLDM1NDc4LDM1OTAxLDM1OTQ0LDM1OTQ1LDM2MDUzLDM2MDQ3LDM2MDU1LDM2MjQ2LDM2MzYxLDM2MzU0LDM2MzUxLDM2MzY1LDM2MzQ5''@;'; put 'put ''LDM2MzYyLDM2MzU1LDM2MzU5LDM2MzU4LDM2MzU3LDM2MzUwLDM2MzUyLDM2MzU2LDM2NjI0LDM2NjI1LDM2NjIyLDM2NjIxLDM3MTU1LDM3MTQ4LDM3MTUyLDM3MTU0LDM3MTUxLDM3MTQ5LDM3MTQ2LDM3MTU2LDM3MTUzLDM3MTQ3LDM3MjQyLDM3MjM0LDM3MjQxLDM3MjM1LDM3NTQxLDM3''@;'; put 'put ''NTQwLDM3NDk0LDM3NTMxLDM3NDk4LDM3NTM2LDM3NTI0LDM3NTQ2LDM3NTE3LDM3NTQyLDM3NTMwLDM3NTQ3LDM3NDk3LDM3NTI3LDM3NTAzLDM3NTM5LDM3NjE0LDM3NTE4LDM3NTA2LDM3NTI1LDM3NTM4LDM3NTAxLDM3NTEyLDM3NTM3LDM3NTE0LDM3NTEwLDM3NTE2LDM3NTI5LDM3NTQz''@;'; put 'put ''LDM3NTAyLDM3NTExLDM3NTQ1LDM3NTMzLDM3NTE1LDM3NDIxLDM4NTU4LDM4NTYxLDM4NjU1LDM4NzQ0LDM4NzgxLDM4Nzc4LDM4NzgyLDM4Nzg3LDM4Nzg0LDM4Nzg2LDM4Nzc5LDM4Nzg4LDM4Nzg1LDM4NzgzLDM4ODYyLDM4ODYxLDM4OTM0LDM5MDg1LDM5MDg2LDM5MTcwLDM5MTY4LDM5''@;'; put 'put ''MTc1LDM5MzI1LDM5MzI0LDM5MzYzLDM5MzUzLDM5MzU1LDM5MzU0LDM5MzYyLDM5MzU3LDM5MzY3LDM5NjAxLDM5NjUxLDM5NjU1LDM5NzQyLDM5NzQzLDM5Nzc2LDM5Nzc3LDM5Nzc1LDQwMTc3LDQwMTc4LDQwMTgxLDQwNjE1LDIwNzM1LDIwNzM5LDIwNzg0LDIwNzI4LDIwNzQyLDIwNzQz''@;'; put 'put ''LDIwNzI2LDIwNzM0LDIwNzQ3LDIwNzQ4LDIwNzMzLDIwNzQ2LDIxMTMxLDIxMTMyLDIxMjMzLDIxMjMxLDIyMDg4LDIyMDgyLDIyMDkyLDIyMDY5LDIyMDgxLDIyMDkwLDIyMDg5LDIyMDg2LDIyMTA0LDIyMTA2LDIyMDgwLDIyMDY3LDIyMDc3LDIyMDYwLDIyMDc4LDIyMDcyLDIyMDU4LDIy''@;'; put 'put ''MDc0LDIyMjk4LDIyNjk5LDIyNjg1LDIyNzA1LDIyNjg4LDIyNjkxLDIyNzAzLDIyNzAwLDIyNjkzLDIyNjg5LDIyNzgzLDIzMjk1LDIzMjg0LDIzMjkzLDIzMjg3LDIzMjg2LDIzMjk5LDIzMjg4LDIzMjk4LDIzMjg5LDIzMjk3LDIzMzAzLDIzMzAxLDIzMzExLDIzNjU1LDIzOTYxLDIzOTU5''@;'; put 'put ''LDIzOTY3LDIzOTU0LDIzOTcwLDIzOTU1LDIzOTU3LDIzOTY4LDIzOTY0LDIzOTY5LDIzOTYyLDIzOTY2LDI0MTY5LDI0MTU3LDI0MTYwLDI0MTU2LDMyMjQzLDI0MjgzLDI0Mjg2LDI0Mjg5LDI0MzkzLDI0NDk4LDI0OTcxLDI0OTYzLDI0OTUzLDI1MDA5LDI1MDA4LDI0OTk0LDI0OTY5LDI0''@;'; put 'put ''OTg3LDI0OTc5LDI1MDA3LDI1MDA1LDI0OTkxLDI0OTc4LDI1MDAyLDI0OTkzLDI0OTczLDI0OTM0LDI1MDExLDI1MTMzLDI1NzEwLDI1NzEyLDI1NzUwLDI1NzYwLDI1NzMzLDI1NzUxLDI1NzU2LDI1NzQzLDI1NzM5LDI1NzM4LDI1NzQwLDI1NzYzLDI1NzU5LDI1NzA0LDI1Nzc3LDI1NzUy''@;'; put 'put ''LDI1OTc0LDI1OTc4LDI1OTc3LDI1OTc5LDI2MDM0LDI2MDM1LDI2MjkzLDI2Mjg4LDI2MjgxLDI2MjkwLDI2Mjk1LDI2MjgyLDI2Mjg3LDI3MTM2LDI3MTQyLDI3MTU5LDI3MTA5LDI3MTI4LDI3MTU3LDI3MTIxLDI3MTA4LDI3MTY4LDI3MTM1LDI3MTE2LDI3MTA2LDI3MTYzLDI3MTY1LDI3''@;'; put 'put ''MTM0LDI3MTc1LDI3MTIyLDI3MTE4LDI3MTU2LDI3MTI3LDI3MTExLDI3MjAwLDI3MTQ0LDI3MTEwLDI3MTMxLDI3MTQ5LDI3MTMyLDI3MTE1LDI3MTQ1LDI3MTQwLDI3MTYwLDI3MTczLDI3MTUxLDI3MTI2LDI3MTc0LDI3MTQzLDI3MTI0LDI3MTU4LDI3NDczLDI3NTU3LDI3NTU1LDI3NTU0''@;'; put 'put ''LDI3NTU4LDI3NjQ5LDI3NjQ4LDI3NjQ3LDI3NjUwLDI4NDgxLDI4NDU0LDI4NTQyLDI4NTUxLDI4NjE0LDI4NTYyLDI4NTU3LDI4NTUzLDI4NTU2LDI4NTE0LDI4NDk1LDI4NTQ5LDI4NTA2LDI4NTY2LDI4NTM0LDI4NTI0LDI4NTQ2LDI4NTAxLDI4NTMwLDI4NDk4LDI4NDk2LDI4NTAzLDI4''@;'; put 'put ''NTY0LDI4NTYzLDI4NTA5LDI4NDE2LDI4NTEzLDI4NTIzLDI4NTQxLDI4NTE5LDI4NTYwLDI4NDk5LDI4NTU1LDI4NTIxLDI4NTQzLDI4NTY1LDI4NTE1LDI4NTM1LDI4NTIyLDI4NTM5LDI5MTA2LDI5MTAzLDI5MDgzLDI5MTA0LDI5MDg4LDI5MDgyLDI5MDk3LDI5MTA5LDI5MDg1LDI5MDkz''@;'; put 'put ''LDI5MDg2LDI5MDkyLDI5MDg5LDI5MDk4LDI5MDg0LDI5MDk1LDI5MTA3LDI5MzM2LDI5MzM4LDI5NTI4LDI5NTIyLDI5NTM0LDI5NTM1LDI5NTM2LDI5NTMzLDI5NTMxLDI5NTM3LDI5NTMwLDI5NTI5LDI5NTM4LDI5ODMxLDI5ODMzLDI5ODM0LDI5ODMwLDI5ODI1LDI5ODIxLDI5ODI5LDI5''@;'; put 'put ''ODMyLDI5ODIwLDI5ODE3LDI5OTYwLDI5OTU5LDMwMDc4LDMwMjQ1LDMwMjM4LDMwMjMzLDMwMjM3LDMwMjM2LDMwMjQzLDMwMjM0LDMwMjQ4LDMwMjM1LDMwMzY0LDMwMzY1LDMwMzY2LDMwMzYzLDMwNjA1LDMwNjA3LDMwNjAxLDMwNjAwLDMwOTI1LDMwOTA3LDMwOTI3LDMwOTI0LDMwOTI5''@;'; put 'put ''LDMwOTI2LDMwOTMyLDMwOTIwLDMwOTE1LDMwOTE2LDMwOTIxLDMxMTMwLDMxMTM3LDMxMTM2LDMxMTMyLDMxMTM4LDMxMTMxLDI3NTEwLDMxMjg5LDMxNDEwLDMxNDEyLDMxNDExLDMxNjcxLDMxNjkxLDMxNjc4LDMxNjYwLDMxNjk0LDMxNjYzLDMxNjczLDMxNjkwLDMxNjY5LDMxOTQxLDMx''@;'; put 'put ''OTQ0LDMxOTQ4LDMxOTQ3LDMyMjQ3LDMyMjE5LDMyMjM0LDMyMjMxLDMyMjE1LDMyMjI1LDMyMjU5LDMyMjUwLDMyMjMwLDMyMjQ2LDMyMjQxLDMyMjQwLDMyMjM4LDMyMjIzLDMyNjMwLDMyNjg0LDMyNjg4LDMyNjg1LDMyNzQ5LDMyNzQ3LDMyNzQ2LDMyNzQ4LDMyNzQyLDMyNzQ0LDMyODY4''@;'; put 'put ''LDMyODcxLDMzMTg3LDMzMTgzLDMzMTgyLDMzMTczLDMzMTg2LDMzMTc3LDMzMTc1LDMzMzAyLDMzMzU5LDMzMzYzLDMzMzYyLDMzMzYwLDMzMzU4LDMzMzYxLDM0MDg0LDM0MTA3LDM0MDYzLDM0MDQ4LDM0MDg5LDM0MDYyLDM0MDU3LDM0MDYxLDM0MDc5LDM0MDU4LDM0MDg3LDM0MDc2LDM0''@;'; put 'put ''MDQzLDM0MDkxLDM0MDQyLDM0MDU2LDM0MDYwLDM0MDM2LDM0MDkwLDM0MDM0LDM0MDY5LDM0MDM5LDM0MDI3LDM0MDM1LDM0MDQ0LDM0MDY2LDM0MDI2LDM0MDI1LDM0MDcwLDM0MDQ2LDM0MDg4LDM0MDc3LDM0MDk0LDM0MDUwLDM0MDQ1LDM0MDc4LDM0MDM4LDM0MDk3LDM0MDg2LDM0MDIz''@;'; put 'put ''LDM0MDI0LDM0MDMyLDM0MDMxLDM0MDQxLDM0MDcyLDM0MDgwLDM0MDk2LDM0MDU5LDM0MDczLDM0MDk1LDM0NDAyLDM0NjQ2LDM0NjU5LDM0NjYwLDM0Njc5LDM0Nzg1LDM0Njc1LDM0NjQ4LDM0NjQ0LDM0NjUxLDM0NjQyLDM0NjU3LDM0NjUwLDM0NjQxLDM0NjU0LDM0NjY5LDM0NjY2LDM0''@;'; put 'put ''NjQwLDM0NjM4LDM0NjU1LDM0NjUzLDM0NjcxLDM0NjY4LDM0NjgyLDM0NjcwLDM0NjUyLDM0NjYxLDM0NjM5LDM0NjgzLDM0Njc3LDM0NjU4LDM0NjYzLDM0NjY1LDM0OTA2LDM1MDc3LDM1MDg0LDM1MDkyLDM1MDgzLDM1MDk1LDM1MDk2LDM1MDk3LDM1MDc4LDM1MDk0LDM1MDg5LDM1MDg2''@;'; put 'put ''LDM1MDgxLDM1MjM0LDM1MjM2LDM1MjM1LDM1MzA5LDM1MzEyLDM1MzA4LDM1NTM1LDM1NTI2LDM1NTEyLDM1NTM5LDM1NTM3LDM1NTQwLDM1NTQxLDM1NTE1LDM1NTQzLDM1NTE4LDM1NTIwLDM1NTI1LDM1NTQ0LDM1NTIzLDM1NTE0LDM1NTE3LDM1NTQ1LDM1OTAyLDM1OTE3LDM1OTgzLDM2''@;'; put 'put ''MDY5LDM2MDYzLDM2MDU3LDM2MDcyLDM2MDU4LDM2MDYxLDM2MDcxLDM2MjU2LDM2MjUyLDM2MjU3LDM2MjUxLDM2Mzg0LDM2Mzg3LDM2Mzg5LDM2Mzg4LDM2Mzk4LDM2MzczLDM2Mzc5LDM2Mzc0LDM2MzY5LDM2Mzc3LDM2MzkwLDM2MzkxLDM2MzcyLDM2MzcwLDM2Mzc2LDM2MzcxLDM2Mzgw''@;'; put 'put ''LDM2Mzc1LDM2Mzc4LDM2NjUyLDM2NjQ0LDM2NjMyLDM2NjM0LDM2NjQwLDM2NjQzLDM2NjMwLDM2NjMxLDM2OTc5LDM2OTc2LDM2OTc1LDM2OTY3LDM2OTcxLDM3MTY3LDM3MTYzLDM3MTYxLDM3MTYyLDM3MTcwLDM3MTU4LDM3MTY2LDM3MjUzLDM3MjU0LDM3MjU4LDM3MjQ5LDM3MjUwLDM3''@;'; put 'put ''MjUyLDM3MjQ4LDM3NTg0LDM3NTcxLDM3NTcyLDM3NTY4LDM3NTkzLDM3NTU4LDM3NTgzLDM3NjE3LDM3NTk5LDM3NTkyLDM3NjA5LDM3NTkxLDM3NTk3LDM3NTgwLDM3NjE1LDM3NTcwLDM3NjA4LDM3NTc4LDM3NTc2LDM3NTgyLDM3NjA2LDM3NTgxLDM3NTg5LDM3NTc3LDM3NjAwLDM3NTk4''@;'; put 'put ''LDM3NjA3LDM3NTg1LDM3NTg3LDM3NTU3LDM3NjAxLDM3NTc0LDM3NTU2LDM4MjY4LDM4MzE2LDM4MzE1LDM4MzE4LDM4MzIwLDM4NTY0LDM4NTYyLDM4NjExLDM4NjYxLDM4NjY0LDM4NjU4LDM4NzQ2LDM4Nzk0LDM4Nzk4LDM4NzkyLDM4ODY0LDM4ODYzLDM4OTQyLDM4OTQxLDM4OTUwLDM4''@;'; put 'put ''OTUzLDM4OTUyLDM4OTQ0LDM4OTM5LDM4OTUxLDM5MDkwLDM5MTc2LDM5MTYyLDM5MTg1LDM5MTg4LDM5MTkwLDM5MTkxLDM5MTg5LDM5Mzg4LDM5MzczLDM5Mzc1LDM5Mzc5LDM5MzgwLDM5Mzc0LDM5MzY5LDM5MzgyLDM5Mzg0LDM5MzcxLDM5MzgzLDM5MzcyLDM5NjAzLDM5NjYwLDM5NjU5''@;'; put 'put ''LDM5NjY3LDM5NjY2LDM5NjY1LDM5NzUwLDM5NzQ3LDM5NzgzLDM5Nzk2LDM5NzkzLDM5NzgyLDM5Nzk4LDM5Nzk3LDM5NzkyLDM5Nzg0LDM5NzgwLDM5Nzg4LDQwMTg4LDQwMTg2LDQwMTg5LDQwMTkxLDQwMTgzLDQwMTk5LDQwMTkyLDQwMTg1LDQwMTg3LDQwMjAwLDQwMTk3LDQwMTk2LDQw''@;'; put 'put ''NTc5LDQwNjU5LDQwNzE5LDQwNzIwLDIwNzY0LDIwNzU1LDIwNzU5LDIwNzYyLDIwNzUzLDIwOTU4LDIxMzAwLDIxNDczLDIyMTI4LDIyMTEyLDIyMTI2LDIyMTMxLDIyMTE4LDIyMTE1LDIyMTI1LDIyMTMwLDIyMTEwLDIyMTM1LDIyMzAwLDIyMjk5LDIyNzI4LDIyNzE3LDIyNzI5LDIyNzE5''@;'; put 'put ''LDIyNzE0LDIyNzIyLDIyNzE2LDIyNzI2LDIzMzE5LDIzMzIxLDIzMzIzLDIzMzI5LDIzMzE2LDIzMzE1LDIzMzEyLDIzMzE4LDIzMzM2LDIzMzIyLDIzMzI4LDIzMzI2LDIzNTM1LDIzOTgwLDIzOTg1LDIzOTc3LDIzOTc1LDIzOTg5LDIzOTg0LDIzOTgyLDIzOTc4LDIzOTc2LDIzOTg2LDIz''@;'; put 'put ''OTgxLDIzOTgzLDIzOTg4LDI0MTY3LDI0MTY4LDI0MTY2LDI0MTc1LDI0Mjk3LDI0Mjk1LDI0Mjk0LDI0Mjk2LDI0MjkzLDI0Mzk1LDI0NTA4LDI0OTg5LDI1ZTMsMjQ5ODIsMjUwMjksMjUwMTIsMjUwMzAsMjUwMjUsMjUwMzYsMjUwMTgsMjUwMjMsMjUwMTYsMjQ5NzIsMjU4MTUsMjU4MTQs''@;'; put 'put ''MjU4MDgsMjU4MDcsMjU4MDEsMjU3ODksMjU3MzcsMjU3OTUsMjU4MTksMjU4NDMsMjU4MTcsMjU5MDcsMjU5ODMsMjU5ODAsMjYwMTgsMjYzMTIsMjYzMDIsMjYzMDQsMjYzMTQsMjYzMTUsMjYzMTksMjYzMDEsMjYyOTksMjYyOTgsMjYzMTYsMjY0MDMsMjcxODgsMjcyMzgsMjcyMDksMjcy''@;'; put 'put ''MzksMjcxODYsMjcyNDAsMjcxOTgsMjcyMjksMjcyNDUsMjcyNTQsMjcyMjcsMjcyMTcsMjcxNzYsMjcyMjYsMjcxOTUsMjcxOTksMjcyMDEsMjcyNDIsMjcyMzYsMjcyMTYsMjcyMTUsMjcyMjAsMjcyNDcsMjcyNDEsMjcyMzIsMjcxOTYsMjcyMzAsMjcyMjIsMjcyMjEsMjcyMTMsMjcyMTQs''@;'; put 'put ''MjcyMDYsMjc0NzcsMjc0NzYsMjc0NzgsMjc1NTksMjc1NjIsMjc1NjMsMjc1OTIsMjc1OTEsMjc2NTIsMjc2NTEsMjc2NTQsMjg1ODksMjg2MTksMjg1NzksMjg2MTUsMjg2MDQsMjg2MjIsMjg2MTYsMjg1MTAsMjg2MTIsMjg2MDUsMjg1NzQsMjg2MTgsMjg1ODQsMjg2NzYsMjg1ODEsMjg1''@;'; put 'put ''OTAsMjg2MDIsMjg1ODgsMjg1ODYsMjg2MjMsMjg2MDcsMjg2MDAsMjg1NzgsMjg2MTcsMjg1ODcsMjg2MjEsMjg1OTEsMjg1OTQsMjg1OTIsMjkxMjUsMjkxMjIsMjkxMTksMjkxMTIsMjkxNDIsMjkxMjAsMjkxMjEsMjkxMzEsMjkxNDAsMjkxMzAsMjkxMjcsMjkxMzUsMjkxMTcsMjkxNDQs''@;'; put 'put ''MjkxMTYsMjkxMjYsMjkxNDYsMjkxNDcsMjkzNDEsMjkzNDIsMjk1NDUsMjk1NDIsMjk1NDMsMjk1NDgsMjk1NDEsMjk1NDcsMjk1NDYsMjk4MjMsMjk4NTAsMjk4NTYsMjk4NDQsMjk4NDIsMjk4NDUsMjk4NTcsMjk5NjMsMzAwODAsMzAyNTUsMzAyNTMsMzAyNTcsMzAyNjksMzAyNTksMzAy''@;'; put 'put ''NjgsMzAyNjEsMzAyNTgsMzAyNTYsMzAzOTUsMzA0MzgsMzA2MTgsMzA2MjEsMzA2MjUsMzA2MjAsMzA2MTksMzA2MjYsMzA2MjcsMzA2MTMsMzA2MTcsMzA2MTUsMzA5NDEsMzA5NTMsMzA5NDksMzA5NTQsMzA5NDIsMzA5NDcsMzA5MzksMzA5NDUsMzA5NDYsMzA5NTcsMzA5NDMsMzA5NDQs''@;'; put 'put ''MzExNDAsMzEzMDAsMzEzMDQsMzEzMDMsMzE0MTQsMzE0MTYsMzE0MTMsMzE0MDksMzE0MTUsMzE3MTAsMzE3MTUsMzE3MTksMzE3MDksMzE3MDEsMzE3MTcsMzE3MDYsMzE3MjAsMzE3MzcsMzE3MDAsMzE3MjIsMzE3MTQsMzE3MDgsMzE3MjMsMzE3MDQsMzE3MTEsMzE5NTQsMzE5NTYsMzE5''@;'; put 'put ''NTksMzE5NTIsMzE5NTMsMzIyNzQsMzIyODksMzIyNzksMzIyNjgsMzIyODcsMzIyODgsMzIyNzUsMzIyNzAsMzIyODQsMzIyNzcsMzIyODIsMzIyOTAsMzIyNjcsMzIyNzEsMzIyNzgsMzIyNjksMzIyNzYsMzIyOTMsMzIyOTIsMzI1NzksMzI2MzUsMzI2MzYsMzI2MzQsMzI2ODksMzI3NTEs''@;'; put 'put ''MzI4MTAsMzI4MDksMzI4NzYsMzMyMDEsMzMxOTAsMzMxOTgsMzMyMDksMzMyMDUsMzMxOTUsMzMyMDAsMzMxOTYsMzMyMDQsMzMyMDIsMzMyMDcsMzMxOTEsMzMyNjYsMzMzNjUsMzMzNjYsMzMzNjcsMzQxMzQsMzQxMTcsMzQxNTUsMzQxMjUsMzQxMzEsMzQxNDUsMzQxMzYsMzQxMTIsMzQx''@;'; put 'put ''MTgsMzQxNDgsMzQxMTMsMzQxNDYsMzQxMTYsMzQxMjksMzQxMTksMzQxNDcsMzQxMTAsMzQxMzksMzQxNjEsMzQxMjYsMzQxNTgsMzQxNjUsMzQxMzMsMzQxNTEsMzQxNDQsMzQxODgsMzQxNTAsMzQxNDEsMzQxMzIsMzQxNDksMzQxNTYsMzQ0MDMsMzQ0MDUsMzQ0MDQsMzQ3MTUsMzQ3MDMs''@;'; put 'put ''MzQ3MTEsMzQ3MDcsMzQ3MDYsMzQ2OTYsMzQ2ODksMzQ3MTAsMzQ3MTIsMzQ2ODEsMzQ2OTUsMzQ3MjMsMzQ2OTMsMzQ3MDQsMzQ3MDUsMzQ3MTcsMzQ2OTIsMzQ3MDgsMzQ3MTYsMzQ3MTQsMzQ2OTcsMzUxMDIsMzUxMTAsMzUxMjAsMzUxMTcsMzUxMTgsMzUxMTEsMzUxMjEsMzUxMDYsMzUx''@;'; put 'put ''MTMsMzUxMDcsMzUxMTksMzUxMTYsMzUxMDMsMzUzMTMsMzU1NTIsMzU1NTQsMzU1NzAsMzU1NzIsMzU1NzMsMzU1NDksMzU2MDQsMzU1NTYsMzU1NTEsMzU1NjgsMzU1MjgsMzU1NTAsMzU1NTMsMzU1NjAsMzU1ODMsMzU1NjcsMzU1NzksMzU5ODUsMzU5ODYsMzU5ODQsMzYwODUsMzYwNzgs''@;'; put 'put ''MzYwODEsMzYwODAsMzYwODMsMzYyMDQsMzYyMDYsMzYyNjEsMzYyNjMsMzY0MDMsMzY0MTQsMzY0MDgsMzY0MTYsMzY0MjEsMzY0MDYsMzY0MTIsMzY0MTMsMzY0MTcsMzY0MDAsMzY0MTUsMzY1NDEsMzY2NjIsMzY2NTQsMzY2NjEsMzY2NTgsMzY2NjUsMzY2NjMsMzY2NjAsMzY5ODIsMzY5''@;'; put 'put ''ODUsMzY5ODcsMzY5OTgsMzcxMTQsMzcxNzEsMzcxNzMsMzcxNzQsMzcyNjcsMzcyNjQsMzcyNjUsMzcyNjEsMzcyNjMsMzc2NzEsMzc2NjIsMzc2NDAsMzc2NjMsMzc2MzgsMzc2NDcsMzc3NTQsMzc2ODgsMzc2OTIsMzc2NTksMzc2NjcsMzc2NTAsMzc2MzMsMzc3MDIsMzc2NzcsMzc2NDYs''@;'; put 'put ''Mzc2NDUsMzc1NzksMzc2NjEsMzc2MjYsMzc2NjksMzc2NTEsMzc2MjUsMzc2MjMsMzc2ODQsMzc2MzQsMzc2NjgsMzc2MzEsMzc2NzMsMzc2ODksMzc2ODUsMzc2NzQsMzc2NTIsMzc2NDQsMzc2NDMsMzc2MzAsMzc2NDEsMzc2MzIsMzc2MjcsMzc2NTQsMzgzMzIsMzgzNDksMzgzMzQsMzgz''@;'; put 'put ''MjksMzgzMzAsMzgzMjYsMzgzMzUsMzgzMjUsMzgzMzMsMzg1NjksMzg2MTIsMzg2NjcsMzg2NzQsMzg2NzIsMzg4MDksMzg4MDcsMzg4MDQsMzg4OTYsMzg5MDQsMzg5NjUsMzg5NTksMzg5NjIsMzkyMDQsMzkxOTksMzkyMDcsMzkyMDksMzkzMjYsMzk0MDYsMzk0MDQsMzkzOTcsMzkzOTYs''@;'; put 'put ''Mzk0MDgsMzkzOTUsMzk0MDIsMzk0MDEsMzkzOTksMzk2MDksMzk2MTUsMzk2MDQsMzk2MTEsMzk2NzAsMzk2NzQsMzk2NzMsMzk2NzEsMzk3MzEsMzk4MDgsMzk4MTMsMzk4MTUsMzk4MDQsMzk4MDYsMzk4MDMsMzk4MTAsMzk4MjcsMzk4MjYsMzk4MjQsMzk4MDIsMzk4MjksMzk4MDUsMzk4''@;'; put 'put ''MTYsNDAyMjksNDAyMTUsNDAyMjQsNDAyMjIsNDAyMTIsNDAyMzMsNDAyMjEsNDAyMTYsNDAyMjYsNDAyMDgsNDAyMTcsNDAyMjMsNDA1ODQsNDA1ODIsNDA1ODMsNDA2MjIsNDA2MjEsNDA2NjEsNDA2NjIsNDA2OTgsNDA3MjIsNDA3NjUsMjA3NzQsMjA3NzMsMjA3NzAsMjA3NzIsMjA3Njgs''@;'; put 'put ''MjA3NzcsMjEyMzYsMjIxNjMsMjIxNTYsMjIxNTcsMjIxNTAsMjIxNDgsMjIxNDcsMjIxNDIsMjIxNDYsMjIxNDMsMjIxNDUsMjI3NDIsMjI3NDAsMjI3MzUsMjI3MzgsMjMzNDEsMjMzMzMsMjMzNDYsMjMzMzEsMjMzNDAsMjMzMzUsMjMzMzQsMjMzNDMsMjMzNDIsMjM0MTksMjM1MzcsMjM1''@;'; put 'put ''MzgsMjM5OTEsMjQxNzIsMjQxNzAsMjQ1MTAsMjQ1MDcsMjUwMjcsMjUwMTMsMjUwMjAsMjUwNjMsMjUwNTYsMjUwNjEsMjUwNjAsMjUwNjQsMjUwNTQsMjU4MzksMjU4MzMsMjU4MjcsMjU4MzUsMjU4MjgsMjU4MzIsMjU5ODUsMjU5ODQsMjYwMzgsMjYwNzQsMjYzMjIsMjcyNzcsMjcyODYs''@;'; put 'put ''MjcyNjUsMjczMDEsMjcyNzMsMjcyOTUsMjcyOTEsMjcyOTcsMjcyOTQsMjcyNzEsMjcyODMsMjcyNzgsMjcyODUsMjcyNjcsMjczMDQsMjczMDAsMjcyODEsMjcyNjMsMjczMDIsMjcyOTAsMjcyNjksMjcyNzYsMjcyODIsMjc0ODMsMjc1NjUsMjc2NTcsMjg2MjAsMjg1ODUsMjg2NjAsMjg2''@;'; put 'put ''MjgsMjg2NDMsMjg2MzYsMjg2NTMsMjg2NDcsMjg2NDYsMjg2MzgsMjg2NTgsMjg2MzcsMjg2NDIsMjg2NDgsMjkxNTMsMjkxNjksMjkxNjAsMjkxNzAsMjkxNTYsMjkxNjgsMjkxNTQsMjk1NTUsMjk1NTAsMjk1NTEsMjk4NDcsMjk4NzQsMjk4NjcsMjk4NDAsMjk4NjYsMjk4NjksMjk4NzMs''@;'; put 'put ''Mjk4NjEsMjk4NzEsMjk5NjgsMjk5NjksMjk5NzAsMjk5NjcsMzAwODQsMzAyNzUsMzAyODAsMzAyODEsMzAyNzksMzAzNzIsMzA0NDEsMzA2NDUsMzA2MzUsMzA2NDIsMzA2NDcsMzA2NDYsMzA2NDQsMzA2NDEsMzA2MzIsMzA3MDQsMzA5NjMsMzA5NzMsMzA5NzgsMzA5NzEsMzA5NzIsMzA5''@;'; put 'put ''NjIsMzA5ODEsMzA5NjksMzA5NzQsMzA5ODAsMzExNDcsMzExNDQsMzEzMjQsMzEzMjMsMzEzMTgsMzEzMjAsMzEzMTYsMzEzMjIsMzE0MjIsMzE0MjQsMzE0MjUsMzE3NDksMzE3NTksMzE3MzAsMzE3NDQsMzE3NDMsMzE3MzksMzE3NTgsMzE3MzIsMzE3NTUsMzE3MzEsMzE3NDYsMzE3NTMs''@;'; put 'put ''MzE3NDcsMzE3NDUsMzE3MzYsMzE3NDEsMzE3NTAsMzE3MjgsMzE3MjksMzE3NjAsMzE3NTQsMzE5NzYsMzIzMDEsMzIzMTYsMzIzMjIsMzIzMDcsMzg5ODQsMzIzMTIsMzIyOTgsMzIzMjksMzIzMjAsMzIzMjcsMzIyOTcsMzIzMzIsMzIzMDQsMzIzMTUsMzIzMTAsMzIzMjQsMzIzMTQsMzI1''@;'; put 'put ''ODEsMzI2MzksMzI2MzgsMzI2MzcsMzI3NTYsMzI3NTQsMzI4MTIsMzMyMTEsMzMyMjAsMzMyMjgsMzMyMjYsMzMyMjEsMzMyMjMsMzMyMTIsMzMyNTcsMzMzNzEsMzMzNzAsMzMzNzIsMzQxNzksMzQxNzYsMzQxOTEsMzQyMTUsMzQxOTcsMzQyMDgsMzQxODcsMzQyMTEsMzQxNzEsMzQyMTIs''@;'; put 'put ''MzQyMDIsMzQyMDYsMzQxNjcsMzQxNzIsMzQxODUsMzQyMDksMzQxNzAsMzQxNjgsMzQxMzUsMzQxOTAsMzQxOTgsMzQxODIsMzQxODksMzQyMDEsMzQyMDUsMzQxNzcsMzQyMTAsMzQxNzgsMzQxODQsMzQxODEsMzQxNjksMzQxNjYsMzQyMDAsMzQxOTIsMzQyMDcsMzQ0MDgsMzQ3NTAsMzQ3''@;'; put 'put ''MzAsMzQ3MzMsMzQ3NTcsMzQ3MzYsMzQ3MzIsMzQ3NDUsMzQ3NDEsMzQ3NDgsMzQ3MzQsMzQ3NjEsMzQ3NTUsMzQ3NTQsMzQ3NjQsMzQ3NDMsMzQ3MzUsMzQ3NTYsMzQ3NjIsMzQ3NDAsMzQ3NDIsMzQ3NTEsMzQ3NDQsMzQ3NDksMzQ3ODIsMzQ3MzgsMzUxMjUsMzUxMjMsMzUxMzIsMzUxMzQs''@;'; put 'put ''MzUxMzcsMzUxNTQsMzUxMjcsMzUxMzgsMzUyNDUsMzUyNDcsMzUyNDYsMzUzMTQsMzUzMTUsMzU2MTQsMzU2MDgsMzU2MDYsMzU2MDEsMzU1ODksMzU1OTUsMzU2MTgsMzU1OTksMzU2MDIsMzU2MDUsMzU1OTEsMzU1OTcsMzU1OTIsMzU1OTAsMzU2MTIsMzU2MDMsMzU2MTAsMzU5MTksMzU5''@;'; put 'put ''NTIsMzU5NTQsMzU5NTMsMzU5NTEsMzU5ODksMzU5ODgsMzYwODksMzYyMDcsMzY0MzAsMzY0MjksMzY0MzUsMzY0MzIsMzY0MjgsMzY0MjMsMzY2NzUsMzY2NzIsMzY5OTcsMzY5OTAsMzcxNzYsMzcyNzQsMzcyODIsMzcyNzUsMzcyNzMsMzcyNzksMzcyODEsMzcyNzcsMzcyODAsMzc3OTMs''@;'; put 'put ''Mzc3NjMsMzc4MDcsMzc3MzIsMzc3MTgsMzc3MDMsMzc3NTYsMzc3MjAsMzc3MjQsMzc3NTAsMzc3MDUsMzc3MTIsMzc3MTMsMzc3MjgsMzc3NDEsMzc3NzUsMzc3MDgsMzc3MzgsMzc3NTMsMzc3MTksMzc3MTcsMzc3MTQsMzc3MTEsMzc3NDUsMzc3NTEsMzc3NTUsMzc3MjksMzc3MjYsMzc3''@;'; put 'put ''MzEsMzc3MzUsMzc3NjAsMzc3MTAsMzc3MjEsMzgzNDMsMzgzMzYsMzgzNDUsMzgzMzksMzgzNDEsMzgzMjcsMzg1NzQsMzg1NzYsMzg1NzIsMzg2ODgsMzg2ODcsMzg2ODAsMzg2ODUsMzg2ODEsMzg4MTAsMzg4MTcsMzg4MTIsMzg4MTQsMzg4MTMsMzg4NjksMzg4NjgsMzg4OTcsMzg5Nzcs''@;'; put 'put ''Mzg5ODAsMzg5ODYsMzg5ODUsMzg5ODEsMzg5NzksMzkyMDUsMzkyMTEsMzkyMTIsMzkyMTAsMzkyMTksMzkyMTgsMzkyMTUsMzkyMTMsMzkyMTcsMzkyMTYsMzkzMjAsMzkzMzEsMzkzMjksMzk0MjYsMzk0MTgsMzk0MTIsMzk0MTUsMzk0MTcsMzk0MTYsMzk0MTQsMzk0MTksMzk0MjEsMzk0''@;'; put 'put ''MjIsMzk0MjAsMzk0MjcsMzk2MTQsMzk2NzgsMzk2NzcsMzk2ODEsMzk2NzYsMzk3NTIsMzk4MzQsMzk4NDgsMzk4MzgsMzk4MzUsMzk4NDYsMzk4NDEsMzk4NDUsMzk4NDQsMzk4MTQsMzk4NDIsMzk4NDAsMzk4NTUsNDAyNDMsNDAyNTcsNDAyOTUsNDAyNDYsNDAyMzgsNDAyMzksNDAyNDEs''@;'; put 'put ''NDAyNDgsNDAyNDAsNDAyNjEsNDAyNTgsNDAyNTksNDAyNTQsNDAyNDcsNDAyNTYsNDAyNTMsMzI3NTcsNDAyMzcsNDA1ODYsNDA1ODUsNDA1ODksNDA2MjQsNDA2NDgsNDA2NjYsNDA2OTksNDA3MDMsNDA3NDAsNDA3MzksNDA3MzgsNDA3ODgsNDA4NjQsMjA3ODUsMjA3ODEsMjA3ODIsMjIx''@;'; put 'put ''NjgsMjIxNzIsMjIxNjcsMjIxNzAsMjIxNzMsMjIxNjksMjI4OTYsMjMzNTYsMjM2NTcsMjM2NTgsMjRlMywyNDE3MywyNDE3NCwyNTA0OCwyNTA1NSwyNTA2OSwyNTA3MCwyNTA3MywyNTA2NiwyNTA3MiwyNTA2NywyNTA0NiwyNTA2NSwyNTg1NSwyNTg2MCwyNTg1MywyNTg0OCwyNTg1Nywy''@;'; put 'put ''NTg1OSwyNTg1MiwyNjAwNCwyNjA3NSwyNjMzMCwyNjMzMSwyNjMyOCwyNzMzMywyNzMyMSwyNzMyNSwyNzM2MSwyNzMzNCwyNzMyMiwyNzMxOCwyNzMxOSwyNzMzNSwyNzMxNiwyNzMwOSwyNzQ4NiwyNzU5MywyNzY1OSwyODY3OSwyODY4NCwyODY4NSwyODY3MywyODY3NywyODY5MiwyODY4''@;'; put 'put ''NiwyODY3MSwyODY3MiwyODY2NywyODcxMCwyODY2OCwyODY2MywyODY4MiwyOTE4NSwyOTE4MywyOTE3NywyOTE4NywyOTE4MSwyOTU1OCwyOTg4MCwyOTg4OCwyOTg3NywyOTg4OSwyOTg4NiwyOTg3OCwyOTg4MywyOTg5MCwyOTk3MiwyOTk3MSwzMDMwMCwzMDMwOCwzMDI5NywzMDI4OCwz''@;'; put 'put ''MDI5MSwzMDI5NSwzMDI5OCwzMDM3NCwzMDM5NywzMDQ0NCwzMDY1OCwzMDY1MCwzMDk3NSwzMDk4OCwzMDk5NSwzMDk5NiwzMDk4NSwzMDk5MiwzMDk5NCwzMDk5MywzMTE0OSwzMTE0OCwzMTMyNywzMTc3MiwzMTc4NSwzMTc2OSwzMTc3NiwzMTc3NSwzMTc4OSwzMTc3MywzMTc4MiwzMTc4''@;'; put 'put ''NCwzMTc3OCwzMTc4MSwzMTc5MiwzMjM0OCwzMjMzNiwzMjM0MiwzMjM1NSwzMjM0NCwzMjM1NCwzMjM1MSwzMjMzNywzMjM1MiwzMjM0MywzMjMzOSwzMjY5MywzMjY5MSwzMjc1OSwzMjc2MCwzMjg4NSwzMzIzMywzMzIzNCwzMzIzMiwzMzM3NSwzMzM3NCwzNDIyOCwzNDI0NiwzNDI0MCwz''@;'; put 'put ''NDI0MywzNDI0MiwzNDIyNywzNDIyOSwzNDIzNywzNDI0NywzNDI0NCwzNDIzOSwzNDI1MSwzNDI1NCwzNDI0OCwzNDI0NSwzNDIyNSwzNDIzMCwzNDI1OCwzNDM0MCwzNDIzMiwzNDIzMSwzNDIzOCwzNDQwOSwzNDc5MSwzNDc5MCwzNDc4NiwzNDc3OSwzNDc5NSwzNDc5NCwzNDc4OSwzNDc4''@;'; put 'put ''MywzNDgwMywzNDc4OCwzNDc3MiwzNDc4MCwzNDc3MSwzNDc5NywzNDc3NiwzNDc4NywzNDcyNCwzNDc3NSwzNDc3NywzNDgxNywzNDgwNCwzNDc5MiwzNDc4MSwzNTE1NSwzNTE0NywzNTE1MSwzNTE0OCwzNTE0MiwzNTE1MiwzNTE1MywzNTE0NSwzNTYyNiwzNTYyMywzNTYxOSwzNTYzNSwz''@;'; put 'put ''NTYzMiwzNTYzNywzNTY1NSwzNTYzMSwzNTY0NCwzNTY0NiwzNTYzMywzNTYyMSwzNTYzOSwzNTYyMiwzNTYzOCwzNTYzMCwzNTYyMCwzNTY0MywzNTY0NSwzNTY0MiwzNTkwNiwzNTk1NywzNTk5MywzNTk5MiwzNTk5MSwzNjA5NCwzNjEwMCwzNjA5OCwzNjA5NiwzNjQ0NCwzNjQ1MCwzNjQ0''@;'; put 'put ''OCwzNjQzOSwzNjQzOCwzNjQ0NiwzNjQ1MywzNjQ1NSwzNjQ0MywzNjQ0MiwzNjQ0OSwzNjQ0NSwzNjQ1NywzNjQzNiwzNjY3OCwzNjY3OSwzNjY4MCwzNjY4MywzNzE2MCwzNzE3OCwzNzE3OSwzNzE4MiwzNzI4OCwzNzI4NSwzNzI4NywzNzI5NSwzNzI5MCwzNzgxMywzNzc3MiwzNzc3OCwz''@;'; put 'put ''NzgxNSwzNzc4NywzNzc4OSwzNzc2OSwzNzc5OSwzNzc3NCwzNzgwMiwzNzc5MCwzNzc5OCwzNzc4MSwzNzc2OCwzNzc4NSwzNzc5MSwzNzc3MywzNzgwOSwzNzc3NywzNzgxMCwzNzc5NiwzNzgwMCwzNzgxMiwzNzc5NSwzNzc5NywzODM1NCwzODM1NSwzODM1MywzODU3OSwzODYxNSwzODYx''@;'; put 'put ''OCwyNDAwMiwzODYyMywzODYxNiwzODYyMSwzODY5MSwzODY5MCwzODY5MywzODgyOCwzODgzMCwzODgyNCwzODgyNywzODgyMCwzODgyNiwzODgxOCwzODgyMSwzODg3MSwzODg3MywzODg3MCwzODg3MiwzODkwNiwzODk5MiwzODk5MywzODk5NCwzOTA5NiwzOTIzMywzOTIyOCwzOTIyNiwz''@;'; put 'put ''OTQzOSwzOTQzNSwzOTQzMywzOTQzNywzOTQyOCwzOTQ0MSwzOTQzNCwzOTQyOSwzOTQzMSwzOTQzMCwzOTYxNiwzOTY0NCwzOTY4OCwzOTY4NCwzOTY4NSwzOTcyMSwzOTczMywzOTc1NCwzOTc1NiwzOTc1NSwzOTg3OSwzOTg3OCwzOTg3NSwzOTg3MSwzOTg3MywzOTg2MSwzOTg2NCwzOTg5''@;'; put 'put ''MSwzOTg2MiwzOTg3NiwzOTg2NSwzOTg2OSw0MDI4NCw0MDI3NSw0MDI3MSw0MDI2Niw0MDI4Myw0MDI2Nyw0MDI4MSw0MDI3OCw0MDI2OCw0MDI3OSw0MDI3NCw0MDI3Niw0MDI4Nyw0MDI4MCw0MDI4Miw0MDU5MCw0MDU4OCw0MDY3MSw0MDcwNSw0MDcwNCw0MDcyNiw0MDc0MSw0MDc0Nyw0''@;'; put 'put ''MDc0Niw0MDc0NSw0MDc0NCw0MDc4MCw0MDc4OSwyMDc4OCwyMDc4OSwyMTE0MiwyMTIzOSwyMTQyOCwyMjE4NywyMjE4OSwyMjE4MiwyMjE4MywyMjE4NiwyMjE4OCwyMjc0NiwyMjc0OSwyMjc0NywyMjgwMiwyMzM1NywyMzM1OCwyMzM1OSwyNDAwMywyNDE3NiwyNDUxMSwyNTA4MywyNTg2''@;'; put 'put ''MywyNTg3MiwyNTg2OSwyNTg2NSwyNTg2OCwyNTg3MCwyNTk4OCwyNjA3OCwyNjA3NywyNjMzNCwyNzM2NywyNzM2MCwyNzM0MCwyNzM0NSwyNzM1MywyNzMzOSwyNzM1OSwyNzM1NiwyNzM0NCwyNzM3MSwyNzM0MywyNzM0MSwyNzM1OCwyNzQ4OCwyNzU2OCwyNzY2MCwyODY5NywyODcxMSwy''@;'; put 'put ''ODcwNCwyODY5NCwyODcxNSwyODcwNSwyODcwNiwyODcwNywyODcxMywyODY5NSwyODcwOCwyODcwMCwyODcxNCwyOTE5NiwyOTE5NCwyOTE5MSwyOTE4NiwyOTE4OSwyOTM0OSwyOTM1MCwyOTM0OCwyOTM0NywyOTM0NSwyOTg5OSwyOTg5MywyOTg3OSwyOTg5MSwyOTk3NCwzMDMwNCwzMDY2''@;'; put 'put ''NSwzMDY2NiwzMDY2MCwzMDcwNSwzMTAwNSwzMTAwMywzMTAwOSwzMTAwNCwzMDk5OSwzMTAwNiwzMTE1MiwzMTMzNSwzMTMzNiwzMTc5NSwzMTgwNCwzMTgwMSwzMTc4OCwzMTgwMywzMTk4MCwzMTk3OCwzMjM3NCwzMjM3MywzMjM3NiwzMjM2OCwzMjM3NSwzMjM2NywzMjM3OCwzMjM3MCwz''@;'; put 'put ''MjM3MiwzMjM2MCwzMjU4NywzMjU4NiwzMjY0MywzMjY0NiwzMjY5NSwzMjc2NSwzMjc2NiwzMjg4OCwzMzIzOSwzMzIzNywzMzM4MCwzMzM3NywzMzM3OSwzNDI4MywzNDI4OSwzNDI4NSwzNDI2NSwzNDI3MywzNDI4MCwzNDI2NiwzNDI2MywzNDI4NCwzNDI5MCwzNDI5NiwzNDI2NCwzNDI3''@;'; put 'put ''MSwzNDI3NSwzNDI2OCwzNDI1NywzNDI4OCwzNDI3OCwzNDI4NywzNDI3MCwzNDI3NCwzNDgxNiwzNDgxMCwzNDgxOSwzNDgwNiwzNDgwNywzNDgyNSwzNDgyOCwzNDgyNywzNDgyMiwzNDgxMiwzNDgyNCwzNDgxNSwzNDgyNiwzNDgxOCwzNTE3MCwzNTE2MiwzNTE2MywzNTE1OSwzNTE2OSwz''@;'; put 'put ''NTE2NCwzNTE2MCwzNTE2NSwzNTE2MSwzNTIwOCwzNTI1NSwzNTI1NCwzNTMxOCwzNTY2NCwzNTY1NiwzNTY1OCwzNTY0OCwzNTY2NywzNTY3MCwzNTY2OCwzNTY1OSwzNTY2OSwzNTY2NSwzNTY1MCwzNTY2NiwzNTY3MSwzNTkwNywzNTk1OSwzNTk1OCwzNTk5NCwzNjEwMiwzNjEwMywzNjEw''@;'; put 'put ''NSwzNjI2OCwzNjI2NiwzNjI2OSwzNjI2NywzNjQ2MSwzNjQ3MiwzNjQ2NywzNjQ1OCwzNjQ2MywzNjQ3NSwzNjU0NiwzNjY5MCwzNjY4OSwzNjY4NywzNjY4OCwzNjY5MSwzNjc4OCwzNzE4NCwzNzE4MywzNzI5NiwzNzI5MywzNzg1NCwzNzgzMSwzNzgzOSwzNzgyNiwzNzg1MCwzNzg0MCwz''@;'; put 'put ''Nzg4MSwzNzg2OCwzNzgzNiwzNzg0OSwzNzgwMSwzNzg2MiwzNzgzNCwzNzg0NCwzNzg3MCwzNzg1OSwzNzg0NSwzNzgyOCwzNzgzOCwzNzgyNCwzNzg0MiwzNzg2MywzODI2OSwzODM2MiwzODM2MywzODYyNSwzODY5NywzODY5OSwzODcwMCwzODY5NiwzODY5NCwzODgzNSwzODgzOSwzODgz''@;'; put 'put ''OCwzODg3NywzODg3OCwzODg3OSwzOTAwNCwzOTAwMSwzOTAwNSwzODk5OSwzOTEwMywzOTEwMSwzOTA5OSwzOTEwMiwzOTI0MCwzOTIzOSwzOTIzNSwzOTMzNCwzOTMzNSwzOTQ1MCwzOTQ0NSwzOTQ2MSwzOTQ1MywzOTQ2MCwzOTQ1MSwzOTQ1OCwzOTQ1NiwzOTQ2MywzOTQ1OSwzOTQ1NCwz''@;'; put 'put ''OTQ1MiwzOTQ0NCwzOTYxOCwzOTY5MSwzOTY5MCwzOTY5NCwzOTY5MiwzOTczNSwzOTkxNCwzOTkxNSwzOTkwNCwzOTkwMiwzOTkwOCwzOTkxMCwzOTkwNiwzOTkyMCwzOTg5MiwzOTg5NSwzOTkxNiwzOTkwMCwzOTg5NywzOTkwOSwzOTg5MywzOTkwNSwzOTg5OCw0MDMxMSw0MDMyMSw0MDMz''@;'; put 'put ''MCw0MDMyNCw0MDMyOCw0MDMwNSw0MDMyMCw0MDMxMiw0MDMyNiw0MDMzMSw0MDMzMiw0MDMxNyw0MDI5OSw0MDMwOCw0MDMwOSw0MDMwNCw0MDI5Nyw0MDMyNSw0MDMwNyw0MDMxNSw0MDMyMiw0MDMwMyw0MDMxMyw0MDMxOSw0MDMyNyw0MDI5Niw0MDU5Niw0MDU5Myw0MDY0MCw0MDcwMCw0''@;'; put 'put ''MDc0OSw0MDc2OCw0MDc2OSw0MDc4MSw0MDc5MCw0MDc5MSw0MDc5MiwyMTMwMywyMjE5NCwyMjE5NywyMjE5NSwyMjc1NSwyMzM2NSwyNDAwNiwyNDAwNywyNDMwMiwyNDMwMywyNDUxMiwyNDUxMywyNTA4MSwyNTg3OSwyNTg3OCwyNTg3NywyNTg3NSwyNjA3OSwyNjM0NCwyNjMzOSwyNjM0''@;'; put 'put ''MCwyNzM3OSwyNzM3NiwyNzM3MCwyNzM2OCwyNzM4NSwyNzM3NywyNzM3NCwyNzM3NSwyODczMiwyODcyNSwyODcxOSwyODcyNywyODcyNCwyODcyMSwyODczOCwyODcyOCwyODczNSwyODczMCwyODcyOSwyODczNiwyODczMSwyODcyMywyODczNywyOTIwMywyOTIwNCwyOTM1MiwyOTU2NSwy''@;'; put 'put ''OTU2NCwyOTg4MiwzMDM3OSwzMDM3OCwzMDM5OCwzMDQ0NSwzMDY2OCwzMDY3MCwzMDY3MSwzMDY2OSwzMDcwNiwzMTAxMywzMTAxMSwzMTAxNSwzMTAxNiwzMTAxMiwzMTAxNywzMTE1NCwzMTM0MiwzMTM0MCwzMTM0MSwzMTQ3OSwzMTgxNywzMTgxNiwzMTgxOCwzMTgxNSwzMTgxMywzMTk4''@;'; put 'put ''MiwzMjM3OSwzMjM4MiwzMjM4NSwzMjM4NCwzMjY5OCwzMjc2NywzMjg4OSwzMzI0MywzMzI0MSwzMzI5MSwzMzM4NCwzMzM4NSwzNDMzOCwzNDMwMywzNDMwNSwzNDMwMiwzNDMzMSwzNDMwNCwzNDI5NCwzNDMwOCwzNDMxMywzNDMwOSwzNDMxNiwzNDMwMSwzNDg0MSwzNDgzMiwzNDgzMywz''@;'; put 'put ''NDgzOSwzNDgzNSwzNDgzOCwzNTE3MSwzNTE3NCwzNTI1NywzNTMxOSwzNTY4MCwzNTY5MCwzNTY3NywzNTY4OCwzNTY4MywzNTY4NSwzNTY4NywzNTY5MywzNjI3MCwzNjQ4NiwzNjQ4OCwzNjQ4NCwzNjY5NywzNjY5NCwzNjY5NSwzNjY5MywzNjY5NiwzNjY5OCwzNzAwNSwzNzE4NywzNzE4''@;'; put 'put ''NSwzNzMwMywzNzMwMSwzNzI5OCwzNzI5OSwzNzg5OSwzNzkwNywzNzg4MywzNzkyMCwzNzkwMywzNzkwOCwzNzg4NiwzNzkwOSwzNzkwNCwzNzkyOCwzNzkxMywzNzkwMSwzNzg3NywzNzg4OCwzNzg3OSwzNzg5NSwzNzkwMiwzNzkxMCwzNzkwNiwzNzg4MiwzNzg5NywzNzg4MCwzNzg5OCwz''@;'; put 'put ''Nzg4NywzNzg4NCwzNzkwMCwzNzg3OCwzNzkwNSwzNzg5NCwzODM2NiwzODM2OCwzODM2NywzODcwMiwzODcwMywzODg0MSwzODg0MywzODkwOSwzODkxMCwzOTAwOCwzOTAxMCwzOTAxMSwzOTAwNywzOTEwNSwzOTEwNiwzOTI0OCwzOTI0NiwzOTI1NywzOTI0NCwzOTI0MywzOTI1MSwzOTQ3''@;'; put 'put ''NCwzOTQ3NiwzOTQ3MywzOTQ2OCwzOTQ2NiwzOTQ3OCwzOTQ2NSwzOTQ3MCwzOTQ4MCwzOTQ2OSwzOTYyMywzOTYyNiwzOTYyMiwzOTY5NiwzOTY5OCwzOTY5NywzOTk0NywzOTk0NCwzOTkyNywzOTk0MSwzOTk1NCwzOTkyOCw0ZTQsMzk5NDMsMzk5NTAsMzk5NDIsMzk5NTksMzk5NTYsMzk5''@;'; put 'put ''NDUsNDAzNTEsNDAzNDUsNDAzNTYsNDAzNDksNDAzMzgsNDAzNDQsNDAzMzYsNDAzNDcsNDAzNTIsNDAzNDAsNDAzNDgsNDAzNjIsNDAzNDMsNDAzNTMsNDAzNDYsNDAzNTQsNDAzNjAsNDAzNTAsNDAzNTUsNDAzODMsNDAzNjEsNDAzNDIsNDAzNTgsNDAzNTksNDA2MDEsNDA2MDMsNDA2MDIs''@;'; put 'put ''NDA2NzcsNDA2NzYsNDA2NzksNDA2NzgsNDA3NTIsNDA3NTAsNDA3OTUsNDA4MDAsNDA3OTgsNDA3OTcsNDA3OTMsNDA4NDksMjA3OTQsMjA3OTMsMjExNDQsMjExNDMsMjIyMTEsMjIyMDUsMjIyMDYsMjMzNjgsMjMzNjcsMjQwMTEsMjQwMTUsMjQzMDUsMjUwODUsMjU4ODMsMjczOTQsMjcz''@;'; put 'put ''ODgsMjczOTUsMjczODQsMjczOTIsMjg3MzksMjg3NDAsMjg3NDYsMjg3NDQsMjg3NDUsMjg3NDEsMjg3NDIsMjkyMTMsMjkyMTAsMjkyMDksMjk1NjYsMjk5NzUsMzAzMTQsMzA2NzIsMzEwMjEsMzEwMjUsMzEwMjMsMzE4MjgsMzE4MjcsMzE5ODYsMzIzOTQsMzIzOTEsMzIzOTIsMzIzOTUs''@;'; put 'put ''MzIzOTAsMzIzOTcsMzI1ODksMzI2OTksMzI4MTYsMzMyNDUsMzQzMjgsMzQzNDYsMzQzNDIsMzQzMzUsMzQzMzksMzQzMzIsMzQzMjksMzQzNDMsMzQzNTAsMzQzMzcsMzQzMzYsMzQzNDUsMzQzMzQsMzQzNDEsMzQ4NTcsMzQ4NDUsMzQ4NDMsMzQ4NDgsMzQ4NTIsMzQ4NDQsMzQ4NTksMzQ4''@;'; put 'put ''OTAsMzUxODEsMzUxNzcsMzUxODIsMzUxNzksMzUzMjIsMzU3MDUsMzU3MDQsMzU2NTMsMzU3MDYsMzU3MDcsMzYxMTIsMzYxMTYsMzYyNzEsMzY0OTQsMzY0OTIsMzY3MDIsMzY2OTksMzY3MDEsMzcxOTAsMzcxODgsMzcxODksMzczMDUsMzc5NTEsMzc5NDcsMzc5NDIsMzc5MjksMzc5NDks''@;'; put 'put ''Mzc5NDgsMzc5MzYsMzc5NDUsMzc5MzAsMzc5NDMsMzc5MzIsMzc5NTIsMzc5MzcsMzgzNzMsMzgzNzIsMzgzNzEsMzg3MDksMzg3MTQsMzg4NDcsMzg4ODEsMzkwMTIsMzkxMTMsMzkxMTAsMzkxMDQsMzkyNTYsMzkyNTQsMzk0ODEsMzk0ODUsMzk0OTQsMzk0OTIsMzk0OTAsMzk0ODksMzk0''@;'; put 'put ''ODIsMzk0ODcsMzk2MjksMzk3MDEsMzk3MDMsMzk3MDQsMzk3MDIsMzk3MzgsMzk3NjIsMzk5NzksMzk5NjUsMzk5NjQsMzk5ODAsMzk5NzEsMzk5NzYsMzk5NzcsMzk5NzIsMzk5NjksNDAzNzUsNDAzNzQsNDAzODAsNDAzODUsNDAzOTEsNDAzOTQsNDAzOTksNDAzODIsNDAzODksNDAzODcs''@;'; put 'put ''NDAzNzksNDAzNzMsNDAzOTgsNDAzNzcsNDAzNzgsNDAzNjQsNDAzOTIsNDAzNjksNDAzNjUsNDAzOTYsNDAzNzEsNDAzOTcsNDAzNzAsNDA1NzAsNDA2MDQsNDA2ODMsNDA2ODYsNDA2ODUsNDA3MzEsNDA3MjgsNDA3MzAsNDA3NTMsNDA3ODIsNDA4MDUsNDA4MDQsNDA4NTAsMjAxNTMsMjIy''@;'; put 'put ''MTQsMjIyMTMsMjIyMTksMjI4OTcsMjMzNzEsMjMzNzIsMjQwMjEsMjQwMTcsMjQzMDYsMjU4ODksMjU4ODgsMjU4OTQsMjU4OTAsMjc0MDMsMjc0MDAsMjc0MDEsMjc2NjEsMjg3NTcsMjg3NTgsMjg3NTksMjg3NTQsMjkyMTQsMjkyMTUsMjkzNTMsMjk1NjcsMjk5MTIsMjk5MDksMjk5MTMs''@;'; put 'put ''Mjk5MTEsMzAzMTcsMzAzODEsMzEwMjksMzExNTYsMzEzNDQsMzEzNDUsMzE4MzEsMzE4MzYsMzE4MzMsMzE4MzUsMzE4MzQsMzE5ODgsMzE5ODUsMzI0MDEsMzI1OTEsMzI2NDcsMzMyNDYsMzMzODcsMzQzNTYsMzQzNTcsMzQzNTUsMzQzNDgsMzQzNTQsMzQzNTgsMzQ4NjAsMzQ4NTYsMzQ4''@;'; put 'put ''NTQsMzQ4NTgsMzQ4NTMsMzUxODUsMzUyNjMsMzUyNjIsMzUzMjMsMzU3MTAsMzU3MTYsMzU3MTQsMzU3MTgsMzU3MTcsMzU3MTEsMzYxMTcsMzY1MDEsMzY1MDAsMzY1MDYsMzY0OTgsMzY0OTYsMzY1MDIsMzY1MDMsMzY3MDQsMzY3MDYsMzcxOTEsMzc5NjQsMzc5NjgsMzc5NjIsMzc5NjMs''@;'; put 'put ''Mzc5NjcsMzc5NTksMzc5NTcsMzc5NjAsMzc5NjEsMzc5NTgsMzg3MTksMzg4ODMsMzkwMTgsMzkwMTcsMzkxMTUsMzkyNTIsMzkyNTksMzk1MDIsMzk1MDcsMzk1MDgsMzk1MDAsMzk1MDMsMzk0OTYsMzk0OTgsMzk0OTcsMzk1MDYsMzk1MDQsMzk2MzIsMzk3MDUsMzk3MjMsMzk3MzksMzk3''@;'; put 'put ''NjYsMzk3NjUsNDAwMDYsNDAwMDgsMzk5OTksNDAwMDQsMzk5OTMsMzk5ODcsNDAwMDEsMzk5OTYsMzk5OTEsMzk5ODgsMzk5ODYsMzk5OTcsMzk5OTAsNDA0MTEsNDA0MDIsNDA0MTQsNDA0MTAsNDAzOTUsNDA0MDAsNDA0MTIsNDA0MDEsNDA0MTUsNDA0MjUsNDA0MDksNDA0MDgsNDA0MDYs''@;'; put 'put ''NDA0MzcsNDA0MDUsNDA0MTMsNDA2MzAsNDA2ODgsNDA3NTcsNDA3NTUsNDA3NTQsNDA3NzAsNDA4MTEsNDA4NTMsNDA4NjYsMjA3OTcsMjExNDUsMjI3NjAsMjI3NTksMjI4OTgsMjMzNzMsMjQwMjQsMzQ4NjMsMjQzOTksMjUwODksMjUwOTEsMjUwOTIsMjU4OTcsMjU4OTMsMjYwMDYsMjYz''@;'; put 'put ''NDcsMjc0MDksMjc0MTAsMjc0MDcsMjc1OTQsMjg3NjMsMjg3NjIsMjkyMTgsMjk1NzAsMjk1NjksMjk1NzEsMzAzMjAsMzA2NzYsMzE4NDcsMzE4NDYsMzI0MDUsMzMzODgsMzQzNjIsMzQzNjgsMzQzNjEsMzQzNjQsMzQzNTMsMzQzNjMsMzQzNjYsMzQ4NjQsMzQ4NjYsMzQ4NjIsMzQ4Njcs''@;'; put 'put ''MzUxOTAsMzUxODgsMzUxODcsMzUzMjYsMzU3MjQsMzU3MjYsMzU3MjMsMzU3MjAsMzU5MDksMzYxMjEsMzY1MDQsMzY3MDgsMzY3MDcsMzczMDgsMzc5ODYsMzc5NzMsMzc5ODEsMzc5NzUsMzc5ODIsMzg4NTIsMzg4NTMsMzg5MTIsMzk1MTAsMzk1MTMsMzk3MTAsMzk3MTEsMzk3MTIsNDAw''@;'; put 'put ''MTgsNDAwMjQsNDAwMTYsNDAwMTAsNDAwMTMsNDAwMTEsNDAwMjEsNDAwMjUsNDAwMTIsNDAwMTQsNDA0NDMsNDA0MzksNDA0MzEsNDA0MTksNDA0MjcsNDA0NDAsNDA0MjAsNDA0MzgsNDA0MTcsNDA0MzAsNDA0MjIsNDA0MzQsNDA0MzIsNDA0MTgsNDA0MjgsNDA0MzYsNDA0MzUsNDA0MjQs''@;'; put 'put ''NDA0MjksNDA2NDIsNDA2NTYsNDA2OTAsNDA2OTEsNDA3MTAsNDA3MzIsNDA3NjAsNDA3NTksNDA3NTgsNDA3NzEsNDA3ODMsNDA4MTcsNDA4MTYsNDA4MTQsNDA4MTUsMjIyMjcsMjIyMjEsMjMzNzQsMjM2NjEsMjU5MDEsMjYzNDksMjYzNTAsMjc0MTEsMjg3NjcsMjg3NjksMjg3NjUsMjg3''@;'; put 'put ''NjgsMjkyMTksMjk5MTUsMjk5MjUsMzA2NzcsMzEwMzIsMzExNTksMzExNTgsMzE4NTAsMzI0MDcsMzI2NDksMzMzODksMzQzNzEsMzQ4NzIsMzQ4NzEsMzQ4NjksMzQ4OTEsMzU3MzIsMzU3MzMsMzY1MTAsMzY1MTEsMzY1MTIsMzY1MDksMzczMTAsMzczMDksMzczMTQsMzc5OTUsMzc5OTIs''@;'; put 'put ''Mzc5OTMsMzg2MjksMzg3MjYsMzg3MjMsMzg3MjcsMzg4NTUsMzg4ODUsMzk1MTgsMzk2MzcsMzk3NjksNDAwMzUsNDAwMzksNDAwMzgsNDAwMzQsNDAwMzAsNDAwMzIsNDA0NTAsNDA0NDYsNDA0NTUsNDA0NTEsNDA0NTQsNDA0NTMsNDA0NDgsNDA0NDksNDA0NTcsNDA0NDcsNDA0NDUsNDA0''@;'; put 'put ''NTIsNDA2MDgsNDA3MzQsNDA3NzQsNDA4MjAsNDA4MjEsNDA4MjIsMjIyMjgsMjU5MDIsMjYwNDAsMjc0MTYsMjc0MTcsMjc0MTUsMjc0MTgsMjg3NzAsMjkyMjIsMjkzNTQsMzA2ODAsMzA2ODEsMzEwMzMsMzE4NDksMzE4NTEsMzE5OTAsMzI0MTAsMzI0MDgsMzI0MTEsMzI0MDksMzMyNDgs''@;'; put 'put ''MzMyNDksMzQzNzQsMzQzNzUsMzQzNzYsMzUxOTMsMzUxOTQsMzUxOTYsMzUxOTUsMzUzMjcsMzU3MzYsMzU3MzcsMzY1MTcsMzY1MTYsMzY1MTUsMzc5OTgsMzc5OTcsMzc5OTksMzgwMDEsMzgwMDMsMzg3MjksMzkwMjYsMzkyNjMsNDAwNDAsNDAwNDYsNDAwNDUsNDA0NTksNDA0NjEsNDA0''@;'; put 'put ''NjQsNDA0NjMsNDA0NjYsNDA0NjUsNDA2MDksNDA2OTMsNDA3MTMsNDA3NzUsNDA4MjQsNDA4MjcsNDA4MjYsNDA4MjUsMjIzMDIsMjg3NzQsMzE4NTUsMzQ4NzYsMzYyNzQsMzY1MTgsMzczMTUsMzgwMDQsMzgwMDgsMzgwMDYsMzgwMDUsMzk1MjAsNDAwNTIsNDAwNTEsNDAwNDksNDAwNTMs''@;'; put 'put ''NDA0NjgsNDA0NjcsNDA2OTQsNDA3MTQsNDA4NjgsMjg3NzYsMjg3NzMsMzE5OTEsMzQ0MTAsMzQ4NzgsMzQ4NzcsMzQ4NzksMzU3NDIsMzU5OTYsMzY1MjEsMzY1NTMsMzg3MzEsMzkwMjcsMzkwMjgsMzkxMTYsMzkyNjUsMzkzMzksMzk1MjQsMzk1MjYsMzk1MjcsMzk3MTYsNDA0NjksNDA0''@;'; put 'put ''NzEsNDA3NzYsMjUwOTUsMjc0MjIsMjkyMjMsMzQzODAsMzY1MjAsMzgwMTgsMzgwMTYsMzgwMTcsMzk1MjksMzk1MjgsMzk3MjYsNDA0NzMsMjkyMjUsMzQzNzksMzU3NDMsMzgwMTksNDAwNTcsNDA2MzEsMzAzMjUsMzk1MzEsNDAwNTgsNDA0NzcsMjg3NzcsMjg3NzgsNDA2MTIsNDA4MzAs''@;'; put 'put ''NDA3NzcsNDA4NTYsMzA4NDksMzc1NjEsMzUwMjMsMjI3MTUsMjQ2NTgsMzE5MTEsMjMyOTAsOTU1Niw5NTc0LDk1NTksOTU2OCw5NTgwLDk1NzEsOTU2Miw5NTc3LDk1NjUsOTU1NCw5NTcyLDk1NTcsOTU2Niw5NTc4LDk1NjksOTU2MCw5NTc1LDk1NjMsOTU1NSw5NTczLDk1NTgsOTU2Nyw5''@;'; put 'put ''NTc5LDk1NzAsOTU2MSw5NTc2LDk1NjQsOTU1Myw5NTUyLDk1ODEsOTU4Miw5NTg0LDk1ODMsNjU1MTcsMTMyNDIzLDM3NTk1LDEzMjU3NSwxNDczOTcsMzQxMjQsMTcwNzcsMjk2NzksMjA5MTcsMTM4OTcsMTQ5ODI2LDE2NjM3MiwzNzcwMCwxMzc2OTEsMzM1MTgsMTQ2NjMyLDMwNzgwLDI2''@;'; put 'put ''NDM2LDI1MzExLDE0OTgxMSwxNjYzMTQsMTMxNzQ0LDE1ODY0MywxMzU5NDEsMjAzOTUsMTQwNTI1LDIwNDg4LDE1OTAxNywxNjI0MzYsMTQ0ODk2LDE1MDE5MywxNDA1NjMsMjA1MjEsMTMxOTY2LDI0NDg0LDEzMTk2OCwxMzE5MTEsMjgzNzksMTMyMTI3LDIwNjA1LDIwNzM3LDEzNDM0LDIw''@;'; put 'put ''NzUwLDM5MDIwLDE0MTQ3LDMzODE0LDE0OTkyNCwxMzIyMzEsMjA4MzIsMTQ0MzA4LDIwODQyLDEzNDE0MywxMzk1MTYsMTMxODEzLDE0MDU5MiwxMzI0OTQsMTQzOTIzLDEzNzYwMywyMzQyNiwzNDY4NSwxMzI1MzEsMTQ2NTg1LDIwOTE0LDIwOTIwLDQwMjQ0LDIwOTM3LDIwOTQzLDIwOTQ1''@;'; put 'put ''LDE1NTgwLDIwOTQ3LDE1MDE4MiwyMDkxNSwyMDk2MiwyMTMxNCwyMDk3MywzMzc0MSwyNjk0MiwxNDUxOTcsMjQ0NDMsMjEwMDMsMjEwMzAsMjEwNTIsMjExNzMsMjEwNzksMjExNDAsMjExNzcsMjExODksMzE3NjUsMzQxMTQsMjEyMTYsMzQzMTcsMTU4NDgzLDIxMjUzLDE2NjYyMiwyMTgz''@;'; put 'put ''MywyODM3NywxNDczMjgsMTMzNDYwLDE0NzQzNiwyMTI5OSwyMTMxNiwxMzQxMTQsMjc4NTEsMTM2OTk4LDI2NjUxLDI5NjUzLDI0NjUwLDE2MDQyLDE0NTQwLDEzNjkzNiwyOTE0OSwxNzU3MCwyMTM1NywyMTM2NCwxNjU1NDcsMjEzNzQsMjEzNzUsMTM2NTk4LDEzNjcyMywzMDY5NCwyMTM5''@;'; put 'put ''NSwxNjY1NTUsMjE0MDgsMjE0MTksMjE0MjIsMjk2MDcsMTUzNDU4LDE2MjE3LDI5NTk2LDIxNDQxLDIxNDQ1LDI3NzIxLDIwMDQxLDIyNTI2LDIxNDY1LDE1MDE5LDEzNDAzMSwyMTQ3MiwxNDc0MzUsMTQyNzU1LDIxNDk0LDEzNDI2MywyMTUyMywyODc5MywyMTgwMywyNjE5OSwyNzk5NSwy''@;'; put 'put ''MTYxMywxNTg1NDcsMTM0NTE2LDIxODUzLDIxNjQ3LDIxNjY4LDE4MzQyLDEzNjk3MywxMzQ4NzcsMTU3OTYsMTM0NDc3LDE2NjMzMiwxNDA5NTIsMjE4MzEsMTk2OTMsMjE1NTEsMjk3MTksMjE4OTQsMjE5MjksMjIwMjEsMTM3NDMxLDE0NzUxNCwxNzc0NiwxNDg1MzMsMjYyOTEsMTM1MzQ4''@;'; put 'put ''LDIyMDcxLDI2MzE3LDE0NDAxMCwyNjI3NiwyNjI4NSwyMjA5MywyMjA5NSwzMDk2MSwyMjI1NywzODc5MSwyMTUwMiwyMjI3MiwyMjI1NSwyMjI1MywxNjY3NTgsMTM4NTksMTM1NzU5LDIyMzQyLDE0Nzg3NywyNzc1OCwyODgxMSwyMjMzOCwxNDAwMSwxNTg4NDYsMjI1MDIsMTM2MjE0LDIy''@;'; put 'put ''NTMxLDEzNjI3NiwxNDgzMjMsMjI1NjYsMTUwNTE3LDIyNjIwLDIyNjk4LDEzNjY1LDIyNzUyLDIyNzQ4LDEzNTc0MCwyMjc3OSwyMzU1MSwyMjMzOSwxNzIzNjgsMTQ4MDg4LDM3ODQzLDEzNzI5LDIyODE1LDI2NzkwLDE0MDE5LDI4MjQ5LDEzNjc2NiwyMzA3NiwyMTg0MywxMzY4NTAsMzQw''@;'; put 'put ''NTMsMjI5ODUsMTM0NDc4LDE1ODg0OSwxNTkwMTgsMTM3MTgwLDIzMDAxLDEzNzIxMSwxMzcxMzgsMTU5MTQyLDI4MDE3LDEzNzI1NiwxMzY5MTcsMjMwMzMsMTU5MzAxLDIzMjExLDIzMTM5LDE0MDU0LDE0OTkyOSwyMzE1OSwxNDA4OCwyMzE5MCwyOTc5NywyMzI1MSwxNTk2NDksMTQwNjI4''@;'; put 'put ''LDE1NzQ5LDEzNzQ4OSwxNDEzMCwxMzY4ODgsMjQxOTUsMjEyMDAsMjM0MTQsMjU5OTIsMjM0MjAsMTYyMzE4LDE2Mzg4LDE4NTI1LDEzMTU4OCwyMzUwOSwyNDkyOCwxMzc3ODAsMTU0MDYwLDEzMjUxNywyMzUzOSwyMzQ1MywxOTcyOCwyMzU1NywxMzgwNTIsMjM1NzEsMjk2NDYsMjM1NzIs''@;'; put 'put ''MTM4NDA1LDE1ODUwNCwyMzYyNSwxODY1MywyMzY4NSwyMzc4NSwyMzc5MSwyMzk0NywxMzg3NDUsMTM4ODA3LDIzODI0LDIzODMyLDIzODc4LDEzODkxNiwyMzczOCwyNDAyMywzMzUzMiwxNDM4MSwxNDk3NjEsMTM5MzM3LDEzOTYzNSwzMzQxNSwxNDM5MCwxNTI5OCwyNDExMCwyNzI3NCwy''@;'; put 'put ''NDE4MSwyNDE4NiwxNDg2NjgsMTM0MzU1LDIxNDE0LDIwMTUxLDI0MjcyLDIxNDE2LDEzNzA3MywyNDA3MywyNDMwOCwxNjQ5OTQsMjQzMTMsMjQzMTUsMTQ0OTYsMjQzMTYsMjY2ODYsMzc5MTUsMjQzMzMsMTMxNTIxLDE5NDcwOCwxNTA3MCwxODYwNiwxMzU5OTQsMjQzNzgsMTU3ODMyLDE0''@;'; put 'put ''MDI0MCwyNDQwOCwxNDA0MDEsMjQ0MTksMzg4NDUsMTU5MzQyLDI0NDM0LDM3Njk2LDE2NjQ1NCwyNDQ4NywyMzk5MCwxNTcxMSwxNTIxNDQsMTM5MTE0LDE1OTk5MiwxNDA5MDQsMzczMzQsMTMxNzQyLDE2NjQ0MSwyNDYyNSwyNjI0NSwxMzczMzUsMTQ2OTEsMTU4MTUsMTM4ODEsMjI0MTYs''@;'; put 'put ''MTQxMjM2LDMxMDg5LDE1OTM2LDI0NzM0LDI0NzQwLDI0NzU1LDE0OTg5MCwxNDk5MDMsMTYyMzg3LDI5ODYwLDIwNzA1LDIzMjAwLDI0OTMyLDMzODI4LDI0ODk4LDE5NDcyNiwxNTk0NDIsMjQ5NjEsMjA5ODAsMTMyNjk0LDI0OTY3LDIzNDY2LDE0NzM4MywxNDE0MDcsMjUwNDMsMTY2ODEz''@;'; put 'put ''LDE3MDMzMywyNTA0MCwxNDY0MiwxNDE2OTYsMTQxNTA1LDI0NjExLDI0OTI0LDI1ODg2LDI1NDgzLDEzMTM1MiwyNTI4NSwxMzcwNzIsMjUzMDEsMTQyODYxLDI1NDUyLDE0OTk4MywxNDg3MSwyNTY1NiwyNTU5MiwxMzYwNzgsMTM3MjEyLDI1NzQ0LDI4NTU0LDE0MjkwMiwzODkzMiwxNDc1''@;'; put 'put ''OTYsMTUzMzczLDI1ODI1LDI1ODI5LDM4MDExLDE0OTUwLDI1NjU4LDE0OTM1LDI1OTMzLDI4NDM4LDE1MDA1NiwxNTAwNTEsMjU5ODksMjU5NjUsMjU5NTEsMTQzNDg2LDI2MDM3LDE0OTgyNCwxOTI1NSwyNjA2NSwxNjYwMCwxMzcyNTcsMjYwODAsMjYwODMsMjQ1NDMsMTQ0Mzg0LDI2MTM2''@;'; put 'put ''LDE0Mzg2MywxNDM4NjQsMjYxODAsMTQzNzgwLDE0Mzc4MSwyNjE4NywxMzQ3NzMsMjYyMTUsMTUyMDM4LDI2MjI3LDI2MjI4LDEzODgxMywxNDM5MjEsMTY1MzY0LDE0MzgxNiwxNTIzMzksMzA2NjEsMTQxNTU5LDM5MzMyLDI2MzcwLDE0ODM4MCwxNTAwNDksMTUxNDcsMjcxMzAsMTQ1MzQ2''@;'; put 'put ''LDI2NDYyLDI2NDcxLDI2NDY2LDE0NzkxNywxNjgxNzMsMjY1ODMsMTc2NDEsMjY2NTgsMjgyNDAsMzc0MzYsMjY2MjUsMTQ0MzU4LDE1OTEzNiwyNjcxNywxNDQ0OTUsMjcxMDUsMjcxNDcsMTY2NjIzLDI2OTk1LDI2ODE5LDE0NDg0NSwyNjg4MSwyNjg4MCwxNTY2NiwxNDg0OSwxNDQ5NTYs''@;'; put 'put ''MTUyMzIsMjY1NDAsMjY5NzcsMTY2NDc0LDE3MTQ4LDI2OTM0LDI3MDMyLDE1MjY1LDEzMjA0MSwzMzYzNSwyMDYyNCwyNzEyOSwxNDQ5ODUsMTM5NTYyLDI3MjA1LDE0NTE1NSwyNzI5MywxNTM0NywyNjU0NSwyNzMzNiwxNjgzNDgsMTUzNzMsMjc0MjEsMTMzNDExLDI0Nzk4LDI3NDQ1LDI3''@;'; put 'put ''NTA4LDE0MTI2MSwyODM0MSwxNDYxMzksMTMyMDIxLDEzNzU2MCwxNDE0NCwyMTUzNywxNDYyNjYsMjc2MTcsMTQ3MTk2LDI3NjEyLDI3NzAzLDE0MDQyNywxNDk3NDUsMTU4NTQ1LDI3NzM4LDMzMzE4LDI3NzY5LDE0Njg3NiwxNzYwNSwxNDY4NzcsMTQ3ODc2LDE0OTc3MiwxNDk3NjAsMTQ2''@;'; put 'put ''NjMzLDE0MDUzLDE1NTk1LDEzNDQ1MCwzOTgxMSwxNDM4NjUsMTQwNDMzLDMyNjU1LDI2Njc5LDE1OTAxMywxNTkxMzcsMTU5MjExLDI4MDU0LDI3OTk2LDI4Mjg0LDI4NDIwLDE0OTg4NywxNDc1ODksMTU5MzQ2LDM0MDk5LDE1OTYwNCwyMDkzNSwyNzgwNCwyODE4OSwzMzgzOCwxNjY2ODks''@;'; put 'put ''MjgyMDcsMTQ2OTkxLDI5Nzc5LDE0NzMzMCwzMTE4MCwyODIzOSwyMzE4NSwxNDM0MzUsMjg2NjQsMTQwOTMsMjg1NzMsMTQ2OTkyLDI4NDEwLDEzNjM0MywxNDc1MTcsMTc3NDksMzc4NzIsMjg0ODQsMjg1MDgsMTU2OTQsMjg1MzIsMTY4MzA0LDE1Njc1LDI4NTc1LDE0Nzc4MCwyODYyNywx''@;'; put 'put ''NDc2MDEsMTQ3Nzk3LDE0NzUxMywxNDc0NDAsMTQ3MzgwLDE0Nzc3NSwyMDk1OSwxNDc3OTgsMTQ3Nzk5LDE0Nzc3NiwxNTYxMjUsMjg3NDcsMjg3OTgsMjg4MzksMjg4MDEsMjg4NzYsMjg4ODUsMjg4ODYsMjg4OTUsMTY2NDQsMTU4NDgsMjkxMDgsMjkwNzgsMTQ4MDg3LDI4OTcxLDI4OTk3''@;'; put 'put ''LDIzMTc2LDI5MDAyLDI5MDM4LDIzNzA4LDE0ODMyNSwyOTAwNywzNzczMCwxNDgxNjEsMjg5NzIsMTQ4NTcwLDE1MDA1NSwxNTAwNTAsMjkxMTQsMTY2ODg4LDI4ODYxLDI5MTk4LDM3OTU0LDI5MjA1LDIyODAxLDM3OTU1LDI5MjIwLDM3Njk3LDE1MzA5MywyOTIzMCwyOTI0OCwxNDk4NzYs''@;'; put 'put ''MjY4MTMsMjkyNjksMjkyNzEsMTU5NTcsMTQzNDI4LDI2NjM3LDI4NDc3LDI5MzE0LDI5NDgyLDI5NDgzLDE0OTUzOSwxNjU5MzEsMTg2NjksMTY1ODkyLDI5NDgwLDI5NDg2LDI5NjQ3LDI5NjEwLDEzNDIwMiwxNTgyNTQsMjk2NDEsMjk3NjksMTQ3OTM4LDEzNjkzNSwxNTAwNTIsMjYxNDcs''@;'; put 'put ''MTQwMjEsMTQ5OTQzLDE0OTkwMSwxNTAwMTEsMjk2ODcsMjk3MTcsMjY4ODMsMTUwMDU0LDI5NzUzLDEzMjU0NywxNjA4NywyOTc4OCwxNDE0ODUsMjk3OTIsMTY3NjAyLDI5NzY3LDI5NjY4LDI5ODE0LDMzNzIxLDI5ODA0LDE0MTI4LDI5ODEyLDM3ODczLDI3MTgwLDI5ODI2LDE4NzcxLDE1''@;'; put 'put ''MDE1NiwxNDc4MDcsMTUwMTM3LDE2Njc5OSwyMzM2NiwxNjY5MTUsMTM3Mzc0LDI5ODk2LDEzNzYwOCwyOTk2NiwyOTkyOSwyOTk4MiwxNjc2NDEsMTM3ODAzLDIzNTExLDE2NzU5NiwzNzc2NSwzMDAyOSwzMDAyNiwzMDA1NSwzMDA2MiwxNTE0MjYsMTYxMzIsMTUwODAzLDMwMDk0LDI5Nzg5''@;'; put 'put ''LDMwMTEwLDMwMTMyLDMwMjEwLDMwMjUyLDMwMjg5LDMwMjg3LDMwMzE5LDMwMzI2LDE1NjY2MSwzMDM1MiwzMzI2MywxNDMyOCwxNTc5NjksMTU3OTY2LDMwMzY5LDMwMzczLDMwMzkxLDMwNDEyLDE1OTY0NywzMzg5MCwxNTE3MDksMTUxOTMzLDEzODc4MCwzMDQ5NCwzMDUwMiwzMDUyOCwy''@;'; put 'put ''NTc3NSwxNTIwOTYsMzA1NTIsMTQ0MDQ0LDMwNjM5LDE2NjI0NCwxNjYyNDgsMTM2ODk3LDMwNzA4LDMwNzI5LDEzNjA1NCwxNTAwMzQsMjY4MjYsMzA4OTUsMzA5MTksMzA5MzEsMzg1NjUsMzEwMjIsMTUzMDU2LDMwOTM1LDMxMDI4LDMwODk3LDE2MTI5MiwzNjc5MiwzNDk0OCwxNjY2OTks''@;'; put 'put ''MTU1Nzc5LDE0MDgyOCwzMTExMCwzNTA3MiwyNjg4MiwzMTEwNCwxNTM2ODcsMzExMzMsMTYyNjE3LDMxMDM2LDMxMTQ1LDI4MjAyLDE2MDAzOCwxNjA0MCwzMTE3NCwxNjgyMDUsMzExODhdLCJldWMta3IiOls0NDAzNCw0NDAzNSw0NDAzNyw0NDAzOCw0NDA0Myw0NDA0NCw0NDA0NSw0NDA0''@;'; put 'put ''Niw0NDA0Nyw0NDA1Niw0NDA2Miw0NDA2Myw0NDA2NSw0NDA2Niw0NDA2Nyw0NDA2OSw0NDA3MCw0NDA3MSw0NDA3Miw0NDA3Myw0NDA3NCw0NDA3NSw0NDA3OCw0NDA4Miw0NDA4Myw0NDA4NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDA4NSw0NDA4Niw0NDA4Nyw0NDA5MCw0''@;'; put 'put ''NDA5MSw0NDA5Myw0NDA5NCw0NDA5NSw0NDA5Nyw0NDA5OCw0NDA5OSw0NDEwMCw0NDEwMSw0NDEwMiw0NDEwMyw0NDEwNCw0NDEwNSw0NDEwNiw0NDEwOCw0NDExMCw0NDExMSw0NDExMiw0NDExMyw0NDExNCw0NDExNSw0NDExNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDEx''@;'; put 'put ''OCw0NDExOSw0NDEyMSw0NDEyMiw0NDEyMyw0NDEyNSw0NDEyNiw0NDEyNyw0NDEyOCw0NDEyOSw0NDEzMCw0NDEzMSw0NDEzMiw0NDEzMyw0NDEzNCw0NDEzNSw0NDEzNiw0NDEzNyw0NDEzOCw0NDEzOSw0NDE0MCw0NDE0MSw0NDE0Miw0NDE0Myw0NDE0Niw0NDE0Nyw0NDE0OSw0NDE1MCw0''@;'; put 'put ''NDE1Myw0NDE1NSw0NDE1Niw0NDE1Nyw0NDE1OCw0NDE1OSw0NDE2Miw0NDE2Nyw0NDE2OCw0NDE3Myw0NDE3NCw0NDE3NSw0NDE3Nyw0NDE3OCw0NDE3OSw0NDE4MSw0NDE4Miw0NDE4Myw0NDE4NCw0NDE4NSw0NDE4Niw0NDE4Nyw0NDE5MCw0NDE5NCw0NDE5NSw0NDE5Niw0NDE5Nyw0NDE5''@;'; put 'put ''OCw0NDE5OSw0NDIwMyw0NDIwNSw0NDIwNiw0NDIwOSw0NDIxMCw0NDIxMSw0NDIxMiw0NDIxMyw0NDIxNCw0NDIxNSw0NDIxOCw0NDIyMiw0NDIyMyw0NDIyNCw0NDIyNiw0NDIyNyw0NDIyOSw0NDIzMCw0NDIzMSw0NDIzMyw0NDIzNCw0NDIzNSw0NDIzNyw0NDIzOCw0NDIzOSw0NDI0MCw0''@;'; put 'put ''NDI0MSw0NDI0Miw0NDI0Myw0NDI0NCw0NDI0Niw0NDI0OCw0NDI0OSw0NDI1MCw0NDI1MSw0NDI1Miw0NDI1Myw0NDI1NCw0NDI1NSw0NDI1OCw0NDI1OSw0NDI2MSw0NDI2Miw0NDI2NSw0NDI2Nyw0NDI2OSw0NDI3MCw0NDI3NCw0NDI3Niw0NDI3OSw0NDI4MCw0NDI4MSw0NDI4Miw0NDI4''@;'; put 'put ''Myw0NDI4Niw0NDI4Nyw0NDI4OSw0NDI5MCw0NDI5MSw0NDI5Myw0NDI5NSw0NDI5Niw0NDI5Nyw0NDI5OCw0NDI5OSw0NDMwMiw0NDMwNCw0NDMwNiw0NDMwNyw0NDMwOCw0NDMwOSw0NDMxMCw0NDMxMSw0NDMxMyw0NDMxNCw0NDMxNSw0NDMxNyw0NDMxOCw0NDMxOSw0NDMyMSw0NDMyMiw0''@;'; put 'put ''NDMyMyw0NDMyNCw0NDMyNSw0NDMyNiw0NDMyNyw0NDMyOCw0NDMzMCw0NDMzMSw0NDMzNCw0NDMzNSw0NDMzNiw0NDMzNyw0NDMzOCw0NDMzOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDM0Miw0NDM0Myw0NDM0NSw0NDM0Niw0NDM0Nyw0NDM0OSw0NDM1MCw0NDM1MSw0NDM1''@;'; put 'put ''Miw0NDM1Myw0NDM1NCw0NDM1NSw0NDM1OCw0NDM2MCw0NDM2Miw0NDM2Myw0NDM2NCw0NDM2NSw0NDM2Niw0NDM2Nyw0NDM2OSw0NDM3MCw0NDM3MSw0NDM3Myw0NDM3NCw0NDM3NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDM3Nyw0NDM3OCw0NDM3OSw0NDM4MCw0NDM4MSw0''@;'; put 'put ''NDM4Miw0NDM4Myw0NDM4NCw0NDM4Niw0NDM4OCw0NDM4OSw0NDM5MCw0NDM5MSw0NDM5Miw0NDM5Myw0NDM5NCw0NDM5NSw0NDM5OCw0NDM5OSw0NDQwMSw0NDQwMiw0NDQwNyw0NDQwOCw0NDQwOSw0NDQxMCw0NDQxNCw0NDQxNiw0NDQxOSw0NDQyMCw0NDQyMSw0NDQyMiw0NDQyMyw0NDQy''@;'; put 'put ''Niw0NDQyNyw0NDQyOSw0NDQzMCw0NDQzMSw0NDQzMyw0NDQzNCw0NDQzNSw0NDQzNiw0NDQzNyw0NDQzOCw0NDQzOSw0NDQ0MCw0NDQ0MSw0NDQ0Miw0NDQ0Myw0NDQ0Niw0NDQ0Nyw0NDQ0OCw0NDQ0OSw0NDQ1MCw0NDQ1MSw0NDQ1Myw0NDQ1NCw0NDQ1NSw0NDQ1Niw0NDQ1Nyw0NDQ1OCw0''@;'; put 'put ''NDQ1OSw0NDQ2MCw0NDQ2MSw0NDQ2Miw0NDQ2Myw0NDQ2NCw0NDQ2NSw0NDQ2Niw0NDQ2Nyw0NDQ2OCw0NDQ2OSw0NDQ3MCw0NDQ3Miw0NDQ3Myw0NDQ3NCw0NDQ3NSw0NDQ3Niw0NDQ3Nyw0NDQ3OCw0NDQ3OSw0NDQ4Miw0NDQ4Myw0NDQ4NSw0NDQ4Niw0NDQ4Nyw0NDQ4OSw0NDQ5MCw0NDQ5''@;'; put 'put ''MSw0NDQ5Miw0NDQ5Myw0NDQ5NCw0NDQ5NSw0NDQ5OCw0NDUwMCw0NDUwMSw0NDUwMiw0NDUwMyw0NDUwNCw0NDUwNSw0NDUwNiw0NDUwNyw0NDUwOSw0NDUxMCw0NDUxMSw0NDUxMyw0NDUxNCw0NDUxNSw0NDUxNyw0NDUxOCw0NDUxOSw0NDUyMCw0NDUyMSw0NDUyMiw0NDUyMyw0NDUyNCw0''@;'; put 'put ''NDUyNSw0NDUyNiw0NDUyNyw0NDUyOCw0NDUyOSw0NDUzMCw0NDUzMSw0NDUzMiw0NDUzMyw0NDUzNCw0NDUzNSw0NDUzOCw0NDUzOSw0NDU0MSw0NDU0Miw0NDU0Niw0NDU0Nyw0NDU0OCw0NDU0OSw0NDU1MCw0NDU1MSw0NDU1NCw0NDU1Niw0NDU1OCw0NDU1OSw0NDU2MCw0NDU2MSw0NDU2''@;'; put 'put ''Miw0NDU2Myw0NDU2NSw0NDU2Niw0NDU2Nyw0NDU2OCw0NDU2OSw0NDU3MCw0NDU3MSw0NDU3MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDU3Myw0NDU3NCw0NDU3NSw0NDU3Niw0NDU3Nyw0NDU3OCw0NDU3OSw0NDU4MCw0NDU4MSw0NDU4Miw0NDU4Myw0NDU4NCw0NDU4NSw0''@;'; put 'put ''NDU4Niw0NDU4Nyw0NDU4OCw0NDU4OSw0NDU5MCw0NDU5MSw0NDU5NCw0NDU5NSw0NDU5Nyw0NDU5OCw0NDYwMSw0NDYwMyw0NDYwNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDYwNSw0NDYwNiw0NDYwNyw0NDYxMCw0NDYxMiw0NDYxNSw0NDYxNiw0NDYxNyw0NDYxOSw0NDYy''@;'; put 'put ''Myw0NDYyNSw0NDYyNiw0NDYyNyw0NDYyOSw0NDYzMSw0NDYzMiw0NDYzMyw0NDYzNCw0NDYzNSw0NDYzOCw0NDY0Miw0NDY0Myw0NDY0NCw0NDY0Niw0NDY0Nyw0NDY1MCw0NDY1MSw0NDY1Myw0NDY1NCw0NDY1NSw0NDY1Nyw0NDY1OCw0NDY1OSw0NDY2MCw0NDY2MSw0NDY2Miw0NDY2Myw0''@;'; put 'put ''NDY2Niw0NDY3MCw0NDY3MSw0NDY3Miw0NDY3Myw0NDY3NCw0NDY3NSw0NDY3OCw0NDY3OSw0NDY4MCw0NDY4MSw0NDY4Miw0NDY4Myw0NDY4NSw0NDY4Niw0NDY4Nyw0NDY4OCw0NDY4OSw0NDY5MCw0NDY5MSw0NDY5Miw0NDY5Myw0NDY5NCw0NDY5NSw0NDY5Niw0NDY5Nyw0NDY5OCw0NDY5''@;'; put 'put ''OSw0NDcwMCw0NDcwMSw0NDcwMiw0NDcwMyw0NDcwNCw0NDcwNSw0NDcwNiw0NDcwNyw0NDcwOCw0NDcwOSw0NDcxMCw0NDcxMSw0NDcxMiw0NDcxMyw0NDcxNCw0NDcxNSw0NDcxNiw0NDcxNyw0NDcxOCw0NDcxOSw0NDcyMCw0NDcyMSw0NDcyMiw0NDcyMyw0NDcyNCw0NDcyNSw0NDcyNiw0''@;'; put 'put ''NDcyNyw0NDcyOCw0NDcyOSw0NDczMCw0NDczMSw0NDczNSw0NDczNyw0NDczOCw0NDczOSw0NDc0MSw0NDc0Miw0NDc0Myw0NDc0NCw0NDc0NSw0NDc0Niw0NDc0Nyw0NDc1MCw0NDc1NCw0NDc1NSw0NDc1Niw0NDc1Nyw0NDc1OCw0NDc1OSw0NDc2Miw0NDc2Myw0NDc2NSw0NDc2Niw0NDc2''@;'; put 'put ''Nyw0NDc2OCw0NDc2OSw0NDc3MCw0NDc3MSw0NDc3Miw0NDc3Myw0NDc3NCw0NDc3NSw0NDc3Nyw0NDc3OCw0NDc4MCw0NDc4Miw0NDc4Myw0NDc4NCw0NDc4NSw0NDc4Niw0NDc4Nyw0NDc4OSw0NDc5MCw0NDc5MSw0NDc5Myw0NDc5NCw0NDc5NSw0NDc5Nyw0NDc5OCw0NDc5OSw0NDgwMCw0''@;'; put 'put ''NDgwMSw0NDgwMiw0NDgwMyw0NDgwNCw0NDgwNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDgwNiw0NDgwOSw0NDgxMCw0NDgxMSw0NDgxMiw0NDgxNCw0NDgxNSw0NDgxNyw0NDgxOCw0NDgxOSw0NDgyMCw0NDgyMSw0NDgyMiw0NDgyMyw0NDgyNCw0NDgyNSw0NDgyNiw0NDgy''@;'; put 'put ''Nyw0NDgyOCw0NDgyOSw0NDgzMCw0NDgzMSw0NDgzMiw0NDgzMyw0NDgzNCw0NDgzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDgzNiw0NDgzNyw0NDgzOCw0NDgzOSw0NDg0MCw0NDg0MSw0NDg0Miw0NDg0Myw0NDg0Niw0NDg0Nyw0NDg0OSw0NDg1MSw0NDg1Myw0NDg1NCw0''@;'; put 'put ''NDg1NSw0NDg1Niw0NDg1Nyw0NDg1OCw0NDg1OSw0NDg2Miw0NDg2NCw0NDg2OCw0NDg2OSw0NDg3MCw0NDg3MSw0NDg3NCw0NDg3NSw0NDg3Niw0NDg3Nyw0NDg3OCw0NDg3OSw0NDg4MSw0NDg4Miw0NDg4Myw0NDg4NCw0NDg4NSw0NDg4Niw0NDg4Nyw0NDg4OCw0NDg4OSw0NDg5MCw0NDg5''@;'; put 'put ''MSw0NDg5NCw0NDg5NSw0NDg5Niw0NDg5Nyw0NDg5OCw0NDg5OSw0NDkwMiw0NDkwMyw0NDkwNCw0NDkwNSw0NDkwNiw0NDkwNyw0NDkwOCw0NDkwOSw0NDkxMCw0NDkxMSw0NDkxMiw0NDkxMyw0NDkxNCw0NDkxNSw0NDkxNiw0NDkxNyw0NDkxOCw0NDkxOSw0NDkyMCw0NDkyMiw0NDkyMyw0''@;'; put 'put ''NDkyNCw0NDkyNSw0NDkyNiw0NDkyNyw0NDkyOSw0NDkzMCw0NDkzMSw0NDkzMyw0NDkzNCw0NDkzNSw0NDkzNyw0NDkzOCw0NDkzOSw0NDk0MCw0NDk0MSw0NDk0Miw0NDk0Myw0NDk0Niw0NDk0Nyw0NDk0OCw0NDk1MCw0NDk1MSw0NDk1Miw0NDk1Myw0NDk1NCw0NDk1NSw0NDk1Nyw0NDk1''@;'; put 'put ''OCw0NDk1OSw0NDk2MCw0NDk2MSw0NDk2Miw0NDk2Myw0NDk2NCw0NDk2NSw0NDk2Niw0NDk2Nyw0NDk2OCw0NDk2OSw0NDk3MCw0NDk3MSw0NDk3Miw0NDk3Myw0NDk3NCw0NDk3NSw0NDk3Niw0NDk3Nyw0NDk3OCw0NDk3OSw0NDk4MCw0NDk4MSw0NDk4Miw0NDk4Myw0NDk4Niw0NDk4Nyw0''@;'; put 'put ''NDk4OSw0NDk5MCw0NDk5MSw0NDk5Myw0NDk5NCw0NDk5NSw0NDk5Niw0NDk5Nyw0NDk5OCw0NTAwMiw0NTAwNCw0NTAwNyw0NTAwOCw0NTAwOSw0NTAxMCw0NTAxMSw0NTAxMyw0NTAxNCw0NTAxNSw0NTAxNiw0NTAxNyw0NTAxOCw0NTAxOSw0NTAyMSw0NTAyMiw0NTAyMyw0NTAyNCw0NTAy''@;'; put 'put ''NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTAyNiw0NTAyNyw0NTAyOCw0NTAyOSw0NTAzMCw0NTAzMSw0NTAzNCw0NTAzNSw0NTAzNiw0NTAzNyw0NTAzOCw0NTAzOSw0NTA0Miw0NTA0Myw0NTA0NSw0NTA0Niw0NTA0Nyw0NTA0OSw0NTA1MCw0NTA1MSw0NTA1Miw0NTA1Myw0''@;'; put 'put ''NTA1NCw0NTA1NSw0NTA1OCw0NTA1OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTA2MSw0NTA2Miw0NTA2Myw0NTA2NCw0NTA2NSw0NTA2Niw0NTA2Nyw0NTA2OSw0NTA3MCw0NTA3MSw0NTA3Myw0NTA3NCw0NTA3NSw0NTA3Nyw0NTA3OCw0NTA3OSw0NTA4MCw0NTA4MSw0NTA4''@;'; put 'put ''Miw0NTA4Myw0NTA4Niw0NTA4Nyw0NTA4OCw0NTA4OSw0NTA5MCw0NTA5MSw0NTA5Miw0NTA5Myw0NTA5NCw0NTA5NSw0NTA5Nyw0NTA5OCw0NTA5OSw0NTEwMCw0NTEwMSw0NTEwMiw0NTEwMyw0NTEwNCw0NTEwNSw0NTEwNiw0NTEwNyw0NTEwOCw0NTEwOSw0NTExMCw0NTExMSw0NTExMiw0''@;'; put 'put ''NTExMyw0NTExNCw0NTExNSw0NTExNiw0NTExNyw0NTExOCw0NTExOSw0NTEyMCw0NTEyMSw0NTEyMiw0NTEyMyw0NTEyNiw0NTEyNyw0NTEyOSw0NTEzMSw0NTEzMyw0NTEzNSw0NTEzNiw0NTEzNyw0NTEzOCw0NTE0Miw0NTE0NCw0NTE0Niw0NTE0Nyw0NTE0OCw0NTE1MCw0NTE1MSw0NTE1''@;'; put 'put ''Miw0NTE1Myw0NTE1NCw0NTE1NSw0NTE1Niw0NTE1Nyw0NTE1OCw0NTE1OSw0NTE2MCw0NTE2MSw0NTE2Miw0NTE2Myw0NTE2NCw0NTE2NSw0NTE2Niw0NTE2Nyw0NTE2OCw0NTE2OSw0NTE3MCw0NTE3MSw0NTE3Miw0NTE3Myw0NTE3NCw0NTE3NSw0NTE3Niw0NTE3Nyw0NTE3OCw0NTE3OSw0''@;'; put 'put ''NTE4Miw0NTE4Myw0NTE4NSw0NTE4Niw0NTE4Nyw0NTE4OSw0NTE5MCw0NTE5MSw0NTE5Miw0NTE5Myw0NTE5NCw0NTE5NSw0NTE5OCw0NTIwMCw0NTIwMiw0NTIwMyw0NTIwNCw0NTIwNSw0NTIwNiw0NTIwNyw0NTIxMSw0NTIxMyw0NTIxNCw0NTIxOSw0NTIyMCw0NTIyMSw0NTIyMiw0NTIy''@;'; put 'put ''Myw0NTIyNiw0NTIzMiw0NTIzNCw0NTIzOCw0NTIzOSw0NTI0MSw0NTI0Miw0NTI0Myw0NTI0NSw0NTI0Niw0NTI0Nyw0NTI0OCw0NTI0OSw0NTI1MCw0NTI1MSw0NTI1NCw0NTI1OCw0NTI1OSw0NTI2MCw0NTI2MSw0NTI2Miw0NTI2Myw0NTI2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCw0NTI2Nyw0NTI2OSw0NTI3MCw0NTI3MSw0NTI3Myw0NTI3NCw0NTI3NSw0NTI3Niw0NTI3Nyw0NTI3OCw0NTI3OSw0NTI4MSw0NTI4Miw0NTI4Myw0NTI4NCw0NTI4Niw0NTI4Nyw0NTI4OCw0NTI4OSw0NTI5MCw0NTI5MSw0NTI5Miw0NTI5Myw0NTI5NCw0NTI5NSw0NTI5NixudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTI5Nyw0NTI5OCw0NTI5OSw0NTMwMCw0NTMwMSw0NTMwMiw0NTMwMyw0NTMwNCw0NTMwNSw0NTMwNiw0NTMwNyw0NTMwOCw0NTMwOSw0NTMxMCw0NTMxMSw0NTMxMiw0NTMxMyw0NTMxNCw0NTMxNSw0NTMxNiw0NTMxNyw0NTMxOCw0NTMxOSw0''@;'; put 'put ''NTMyMiw0NTMyNSw0NTMyNiw0NTMyNyw0NTMyOSw0NTMzMiw0NTMzMyw0NTMzNCw0NTMzNSw0NTMzOCw0NTM0Miw0NTM0Myw0NTM0NCw0NTM0NSw0NTM0Niw0NTM1MCw0NTM1MSw0NTM1Myw0NTM1NCw0NTM1NSw0NTM1Nyw0NTM1OCw0NTM1OSw0NTM2MCw0NTM2MSw0NTM2Miw0NTM2Myw0NTM2''@;'; put 'put ''Niw0NTM3MCw0NTM3MSw0NTM3Miw0NTM3Myw0NTM3NCw0NTM3NSw0NTM3OCw0NTM3OSw0NTM4MSw0NTM4Miw0NTM4Myw0NTM4NSw0NTM4Niw0NTM4Nyw0NTM4OCw0NTM4OSw0NTM5MCw0NTM5MSw0NTM5NCw0NTM5NSw0NTM5OCw0NTM5OSw0NTQwMSw0NTQwMiw0NTQwMyw0NTQwNSw0NTQwNiw0''@;'; put 'put ''NTQwNyw0NTQwOSw0NTQxMCw0NTQxMSw0NTQxMiw0NTQxMyw0NTQxNCw0NTQxNSw0NTQxNiw0NTQxNyw0NTQxOCw0NTQxOSw0NTQyMCw0NTQyMSw0NTQyMiw0NTQyMyw0NTQyNCw0NTQyNSw0NTQyNiw0NTQyNyw0NTQyOCw0NTQyOSw0NTQzMCw0NTQzMSw0NTQzNCw0NTQzNSw0NTQzNyw0NTQz''@;'; put 'put ''OCw0NTQzOSw0NTQ0MSw0NTQ0Myw0NTQ0NCw0NTQ0NSw0NTQ0Niw0NTQ0Nyw0NTQ1MCw0NTQ1Miw0NTQ1NCw0NTQ1NSw0NTQ1Niw0NTQ1Nyw0NTQ2MSw0NTQ2Miw0NTQ2Myw0NTQ2NSw0NTQ2Niw0NTQ2Nyw0NTQ2OSw0NTQ3MCw0NTQ3MSw0NTQ3Miw0NTQ3Myw0NTQ3NCw0NTQ3NSw0NTQ3Niw0''@;'; put 'put ''NTQ3Nyw0NTQ3OCw0NTQ3OSw0NTQ4MSw0NTQ4Miw0NTQ4Myw0NTQ4NCw0NTQ4NSw0NTQ4Niw0NTQ4Nyw0NTQ4OCw0NTQ4OSw0NTQ5MCw0NTQ5MSw0NTQ5Miw0NTQ5Myw0NTQ5NCw0NTQ5NSw0NTQ5NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTQ5Nyw0NTQ5OCw0NTQ5OSw0NTUw''@;'; put 'put ''MCw0NTUwMSw0NTUwMiw0NTUwMyw0NTUwNCw0NTUwNSw0NTUwNiw0NTUwNyw0NTUwOCw0NTUwOSw0NTUxMCw0NTUxMSw0NTUxMiw0NTUxMyw0NTUxNCw0NTUxNSw0NTUxNyw0NTUxOCw0NTUxOSw0NTUyMSw0NTUyMiw0NTUyMyw0NTUyNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0''@;'; put 'put ''NTUyNiw0NTUyNyw0NTUyOCw0NTUyOSw0NTUzMCw0NTUzMSw0NTUzNCw0NTUzNiw0NTUzNyw0NTUzOCw0NTUzOSw0NTU0MCw0NTU0MSw0NTU0Miw0NTU0Myw0NTU0Niw0NTU0Nyw0NTU0OSw0NTU1MCw0NTU1MSw0NTU1Myw0NTU1NCw0NTU1NSw0NTU1Niw0NTU1Nyw0NTU1OCw0NTU1OSw0NTU2''@;'; put 'put ''MCw0NTU2Miw0NTU2NCw0NTU2Niw0NTU2Nyw0NTU2OCw0NTU2OSw0NTU3MCw0NTU3MSw0NTU3NCw0NTU3NSw0NTU3Nyw0NTU3OCw0NTU4MSw0NTU4Miw0NTU4Myw0NTU4NCw0NTU4NSw0NTU4Niw0NTU4Nyw0NTU5MCw0NTU5Miw0NTU5NCw0NTU5NSw0NTU5Niw0NTU5Nyw0NTU5OCw0NTU5OSw0''@;'; put 'put ''NTYwMSw0NTYwMiw0NTYwMyw0NTYwNCw0NTYwNSw0NTYwNiw0NTYwNyw0NTYwOCw0NTYwOSw0NTYxMCw0NTYxMSw0NTYxMiw0NTYxMyw0NTYxNCw0NTYxNSw0NTYxNiw0NTYxNyw0NTYxOCw0NTYxOSw0NTYyMSw0NTYyMiw0NTYyMyw0NTYyNCw0NTYyNSw0NTYyNiw0NTYyNyw0NTYyOSw0NTYz''@;'; put 'put ''MCw0NTYzMSw0NTYzMiw0NTYzMyw0NTYzNCw0NTYzNSw0NTYzNiw0NTYzNyw0NTYzOCw0NTYzOSw0NTY0MCw0NTY0MSw0NTY0Miw0NTY0Myw0NTY0NCw0NTY0NSw0NTY0Niw0NTY0Nyw0NTY0OCw0NTY0OSw0NTY1MCw0NTY1MSw0NTY1Miw0NTY1Myw0NTY1NCw0NTY1NSw0NTY1Nyw0NTY1OCw0''@;'; put 'put ''NTY1OSw0NTY2MSw0NTY2Miw0NTY2Myw0NTY2NSw0NTY2Niw0NTY2Nyw0NTY2OCw0NTY2OSw0NTY3MCw0NTY3MSw0NTY3NCw0NTY3NSw0NTY3Niw0NTY3Nyw0NTY3OCw0NTY3OSw0NTY4MCw0NTY4MSw0NTY4Miw0NTY4Myw0NTY4Niw0NTY4Nyw0NTY4OCw0NTY4OSw0NTY5MCw0NTY5MSw0NTY5''@;'; put 'put ''Myw0NTY5NCw0NTY5NSw0NTY5Niw0NTY5Nyw0NTY5OCw0NTY5OSw0NTcwMiw0NTcwMyw0NTcwNCw0NTcwNiw0NTcwNyw0NTcwOCw0NTcwOSw0NTcxMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTcxMSw0NTcxNCw0NTcxNSw0NTcxNyw0NTcxOCw0NTcxOSw0NTcyMyw0NTcyNCw0''@;'; put 'put ''NTcyNSw0NTcyNiw0NTcyNyw0NTczMCw0NTczMiw0NTczNSw0NTczNiw0NTczNyw0NTczOSw0NTc0MSw0NTc0Miw0NTc0Myw0NTc0NSw0NTc0Niw0NTc0Nyw0NTc0OSw0NTc1MCw0NTc1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTc1Miw0NTc1Myw0NTc1NCw0NTc1NSw0NTc1''@;'; put 'put ''Niw0NTc1Nyw0NTc1OCw0NTc1OSw0NTc2MCw0NTc2MSw0NTc2Miw0NTc2Myw0NTc2NCw0NTc2NSw0NTc2Niw0NTc2Nyw0NTc3MCw0NTc3MSw0NTc3Myw0NTc3NCw0NTc3NSw0NTc3Nyw0NTc3OSw0NTc4MCw0NTc4MSw0NTc4Miw0NTc4Myw0NTc4Niw0NTc4OCw0NTc5MCw0NTc5MSw0NTc5Miw0''@;'; put 'put ''NTc5Myw0NTc5NSw0NTc5OSw0NTgwMSw0NTgwMiw0NTgwOCw0NTgwOSw0NTgxMCw0NTgxNCw0NTgyMCw0NTgyMSw0NTgyMiw0NTgyNiw0NTgyNyw0NTgyOSw0NTgzMCw0NTgzMSw0NTgzMyw0NTgzNCw0NTgzNSw0NTgzNiw0NTgzNyw0NTgzOCw0NTgzOSw0NTg0Miw0NTg0Niw0NTg0Nyw0NTg0''@;'; put 'put ''OCw0NTg0OSw0NTg1MCw0NTg1MSw0NTg1Myw0NTg1NCw0NTg1NSw0NTg1Niw0NTg1Nyw0NTg1OCw0NTg1OSw0NTg2MCw0NTg2MSw0NTg2Miw0NTg2Myw0NTg2NCw0NTg2NSw0NTg2Niw0NTg2Nyw0NTg2OCw0NTg2OSw0NTg3MCw0NTg3MSw0NTg3Miw0NTg3Myw0NTg3NCw0NTg3NSw0NTg3Niw0''@;'; put 'put ''NTg3Nyw0NTg3OCw0NTg3OSw0NTg4MCw0NTg4MSw0NTg4Miw0NTg4Myw0NTg4NCw0NTg4NSw0NTg4Niw0NTg4Nyw0NTg4OCw0NTg4OSw0NTg5MCw0NTg5MSw0NTg5Miw0NTg5Myw0NTg5NCw0NTg5NSw0NTg5Niw0NTg5Nyw0NTg5OCw0NTg5OSw0NTkwMCw0NTkwMSw0NTkwMiw0NTkwMyw0NTkw''@;'; put 'put ''NCw0NTkwNSw0NTkwNiw0NTkwNyw0NTkxMSw0NTkxMyw0NTkxNCw0NTkxNyw0NTkyMCw0NTkyMSw0NTkyMiw0NTkyMyw0NTkyNiw0NTkyOCw0NTkzMCw0NTkzMiw0NTkzMyw0NTkzNSw0NTkzOCw0NTkzOSw0NTk0MSw0NTk0Miw0NTk0Myw0NTk0NSw0NTk0Niw0NTk0Nyw0NTk0OCw0NTk0OSw0''@;'; put 'put ''NTk1MCw0NTk1MSw0NTk1NCw0NTk1OCw0NTk1OSw0NTk2MCw0NTk2MSw0NTk2Miw0NTk2Myw0NTk2NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTk2Niw0NTk2Nyw0NTk2OSw0NTk3MCw0NTk3MSw0NTk3Myw0NTk3NCw0NTk3NSw0NTk3Niw0NTk3Nyw0NTk3OCw0NTk3OSw0NTk4''@;'; put 'put ''MCw0NTk4MSw0NTk4Miw0NTk4Myw0NTk4Niw0NTk4Nyw0NTk4OCw0NTk4OSw0NTk5MCw0NTk5MSw0NTk5Myw0NTk5NCw0NTk5NSw0NTk5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTk5OCw0NTk5OSw0NmUzLDQ2MDAxLDQ2MDAyLDQ2MDAzLDQ2MDA0LDQ2MDA1LDQ2MDA2LDQ2''@;'; put 'put ''MDA3LDQ2MDA4LDQ2MDA5LDQ2MDEwLDQ2MDExLDQ2MDEyLDQ2MDEzLDQ2MDE0LDQ2MDE1LDQ2MDE2LDQ2MDE3LDQ2MDE4LDQ2MDE5LDQ2MDIyLDQ2MDIzLDQ2MDI1LDQ2MDI2LDQ2MDI5LDQ2MDMxLDQ2MDMzLDQ2MDM0LDQ2MDM1LDQ2MDM4LDQ2MDQwLDQ2MDQyLDQ2MDQ0LDQ2MDQ2LDQ2MDQ3''@;'; put 'put ''LDQ2MDQ5LDQ2MDUwLDQ2MDUxLDQ2MDUzLDQ2MDU0LDQ2MDU1LDQ2MDU3LDQ2MDU4LDQ2MDU5LDQ2MDYwLDQ2MDYxLDQ2MDYyLDQ2MDYzLDQ2MDY0LDQ2MDY1LDQ2MDY2LDQ2MDY3LDQ2MDY4LDQ2MDY5LDQ2MDcwLDQ2MDcxLDQ2MDcyLDQ2MDczLDQ2MDc0LDQ2MDc1LDQ2MDc3LDQ2MDc4LDQ2''@;'; put 'put ''MDc5LDQ2MDgwLDQ2MDgxLDQ2MDgyLDQ2MDgzLDQ2MDg0LDQ2MDg1LDQ2MDg2LDQ2MDg3LDQ2MDg4LDQ2MDg5LDQ2MDkwLDQ2MDkxLDQ2MDkyLDQ2MDkzLDQ2MDk0LDQ2MDk1LDQ2MDk3LDQ2MDk4LDQ2MDk5LDQ2MTAwLDQ2MTAxLDQ2MTAyLDQ2MTAzLDQ2MTA1LDQ2MTA2LDQ2MTA3LDQ2MTA5''@;'; put 'put ''LDQ2MTEwLDQ2MTExLDQ2MTEzLDQ2MTE0LDQ2MTE1LDQ2MTE2LDQ2MTE3LDQ2MTE4LDQ2MTE5LDQ2MTIyLDQ2MTI0LDQ2MTI1LDQ2MTI2LDQ2MTI3LDQ2MTI4LDQ2MTI5LDQ2MTMwLDQ2MTMxLDQ2MTMzLDQ2MTM0LDQ2MTM1LDQ2MTM2LDQ2MTM3LDQ2MTM4LDQ2MTM5LDQ2MTQwLDQ2MTQxLDQ2''@;'; put 'put ''MTQyLDQ2MTQzLDQ2MTQ0LDQ2MTQ1LDQ2MTQ2LDQ2MTQ3LDQ2MTQ4LDQ2MTQ5LDQ2MTUwLDQ2MTUxLDQ2MTUyLDQ2MTUzLDQ2MTU0LDQ2MTU1LDQ2MTU2LDQ2MTU3LDQ2MTU4LDQ2MTU5LDQ2MTYyLDQ2MTYzLDQ2MTY1LDQ2MTY2LDQ2MTY3LDQ2MTY5LDQ2MTcwLDQ2MTcxLDQ2MTcyLDQ2MTcz''@;'; put 'put ''LDQ2MTc0LDQ2MTc1LDQ2MTc4LDQ2MTgwLDQ2MTgyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2MTgzLDQ2MTg0LDQ2MTg1LDQ2MTg2LDQ2MTg3LDQ2MTg5LDQ2MTkwLDQ2MTkxLDQ2MTkyLDQ2MTkzLDQ2MTk0LDQ2MTk1LDQ2MTk2LDQ2MTk3LDQ2MTk4LDQ2MTk5LDQ2MjAwLDQ2''@;'; put 'put ''MjAxLDQ2MjAyLDQ2MjAzLDQ2MjA0LDQ2MjA1LDQ2MjA2LDQ2MjA3LDQ2MjA5LDQ2MjEwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2MjExLDQ2MjEyLDQ2MjEzLDQ2MjE0LDQ2MjE1LDQ2MjE3LDQ2MjE4LDQ2MjE5LDQ2MjIwLDQ2MjIxLDQ2MjIyLDQ2MjIzLDQ2MjI0LDQ2MjI1''@;'; put 'put ''LDQ2MjI2LDQ2MjI3LDQ2MjI4LDQ2MjI5LDQ2MjMwLDQ2MjMxLDQ2MjMyLDQ2MjMzLDQ2MjM0LDQ2MjM1LDQ2MjM2LDQ2MjM4LDQ2MjM5LDQ2MjQwLDQ2MjQxLDQ2MjQyLDQ2MjQzLDQ2MjQ1LDQ2MjQ2LDQ2MjQ3LDQ2MjQ5LDQ2MjUwLDQ2MjUxLDQ2MjUzLDQ2MjU0LDQ2MjU1LDQ2MjU2LDQ2''@;'; put 'put ''MjU3LDQ2MjU4LDQ2MjU5LDQ2MjYwLDQ2MjYyLDQ2MjY0LDQ2MjY2LDQ2MjY3LDQ2MjY4LDQ2MjY5LDQ2MjcwLDQ2MjcxLDQ2MjczLDQ2Mjc0LDQ2Mjc1LDQ2Mjc3LDQ2Mjc4LDQ2Mjc5LDQ2MjgxLDQ2MjgyLDQ2MjgzLDQ2Mjg0LDQ2Mjg1LDQ2Mjg2LDQ2Mjg3LDQ2Mjg5LDQ2MjkwLDQ2Mjkx''@;'; put 'put ''LDQ2MjkyLDQ2Mjk0LDQ2Mjk1LDQ2Mjk2LDQ2Mjk3LDQ2Mjk4LDQ2Mjk5LDQ2MzAyLDQ2MzAzLDQ2MzA1LDQ2MzA2LDQ2MzA5LDQ2MzExLDQ2MzEyLDQ2MzEzLDQ2MzE0LDQ2MzE1LDQ2MzE4LDQ2MzIwLDQ2MzIyLDQ2MzIzLDQ2MzI0LDQ2MzI1LDQ2MzI2LDQ2MzI3LDQ2MzI5LDQ2MzMwLDQ2''@;'; put 'put ''MzMxLDQ2MzMyLDQ2MzMzLDQ2MzM0LDQ2MzM1LDQ2MzM2LDQ2MzM3LDQ2MzM4LDQ2MzM5LDQ2MzQwLDQ2MzQxLDQ2MzQyLDQ2MzQzLDQ2MzQ0LDQ2MzQ1LDQ2MzQ2LDQ2MzQ3LDQ2MzQ4LDQ2MzQ5LDQ2MzUwLDQ2MzUxLDQ2MzUyLDQ2MzUzLDQ2MzU0LDQ2MzU1LDQ2MzU4LDQ2MzU5LDQ2MzYx''@;'; put 'put ''LDQ2MzYyLDQ2MzY1LDQ2MzY2LDQ2MzY3LDQ2MzY4LDQ2MzY5LDQ2MzcwLDQ2MzcxLDQ2Mzc0LDQ2Mzc5LDQ2MzgwLDQ2MzgxLDQ2MzgyLDQ2MzgzLDQ2Mzg2LDQ2Mzg3LDQ2Mzg5LDQ2MzkwLDQ2MzkxLDQ2MzkzLDQ2Mzk0LDQ2Mzk1LDQ2Mzk2LDQ2Mzk3LDQ2Mzk4LDQ2Mzk5LDQ2NDAyLDQ2''@;'; put 'put ''NDA2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NDA3LDQ2NDA4LDQ2NDA5LDQ2NDEwLDQ2NDE0LDQ2NDE1LDQ2NDE3LDQ2NDE4LDQ2NDE5LDQ2NDIxLDQ2NDIyLDQ2NDIzLDQ2NDI0LDQ2NDI1LDQ2NDI2LDQ2NDI3LDQ2NDMwLDQ2NDM0LDQ2NDM1LDQ2NDM2LDQ2NDM3LDQ2NDM4''@;'; put 'put ''LDQ2NDM5LDQ2NDQwLDQ2NDQxLDQ2NDQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NDQzLDQ2NDQ0LDQ2NDQ1LDQ2NDQ2LDQ2NDQ3LDQ2NDQ4LDQ2NDQ5LDQ2NDUwLDQ2NDUxLDQ2NDUyLDQ2NDUzLDQ2NDU0LDQ2NDU1LDQ2NDU2LDQ2NDU3LDQ2NDU4LDQ2NDU5LDQ2NDYwLDQ2''@;'; put 'put ''NDYxLDQ2NDYyLDQ2NDYzLDQ2NDY0LDQ2NDY1LDQ2NDY2LDQ2NDY3LDQ2NDY4LDQ2NDY5LDQ2NDcwLDQ2NDcxLDQ2NDcyLDQ2NDczLDQ2NDc0LDQ2NDc1LDQ2NDc2LDQ2NDc3LDQ2NDc4LDQ2NDc5LDQ2NDgwLDQ2NDgxLDQ2NDgyLDQ2NDgzLDQ2NDg0LDQ2NDg1LDQ2NDg2LDQ2NDg3LDQ2NDg4''@;'; put 'put ''LDQ2NDg5LDQ2NDkwLDQ2NDkxLDQ2NDkyLDQ2NDkzLDQ2NDk0LDQ2NDk1LDQ2NDk4LDQ2NDk5LDQ2NTAxLDQ2NTAyLDQ2NTAzLDQ2NTA1LDQ2NTA4LDQ2NTA5LDQ2NTEwLDQ2NTExLDQ2NTE0LDQ2NTE4LDQ2NTE5LDQ2NTIwLDQ2NTIxLDQ2NTIyLDQ2NTI2LDQ2NTI3LDQ2NTI5LDQ2NTMwLDQ2''@;'; put 'put ''NTMxLDQ2NTMzLDQ2NTM0LDQ2NTM1LDQ2NTM2LDQ2NTM3LDQ2NTM4LDQ2NTM5LDQ2NTQyLDQ2NTQ2LDQ2NTQ3LDQ2NTQ4LDQ2NTQ5LDQ2NTUwLDQ2NTUxLDQ2NTUzLDQ2NTU0LDQ2NTU1LDQ2NTU2LDQ2NTU3LDQ2NTU4LDQ2NTU5LDQ2NTYwLDQ2NTYxLDQ2NTYyLDQ2NTYzLDQ2NTY0LDQ2NTY1''@;'; put 'put ''LDQ2NTY2LDQ2NTY3LDQ2NTY4LDQ2NTY5LDQ2NTcwLDQ2NTcxLDQ2NTczLDQ2NTc0LDQ2NTc1LDQ2NTc2LDQ2NTc3LDQ2NTc4LDQ2NTc5LDQ2NTgwLDQ2NTgxLDQ2NTgyLDQ2NTgzLDQ2NTg0LDQ2NTg1LDQ2NTg2LDQ2NTg3LDQ2NTg4LDQ2NTg5LDQ2NTkwLDQ2NTkxLDQ2NTkyLDQ2NTkzLDQ2''@;'; put 'put ''NTk0LDQ2NTk1LDQ2NTk2LDQ2NTk3LDQ2NTk4LDQ2NTk5LDQ2NjAwLDQ2NjAxLDQ2NjAyLDQ2NjAzLDQ2NjA0LDQ2NjA1LDQ2NjA2LDQ2NjA3LDQ2NjEwLDQ2NjExLDQ2NjEzLDQ2NjE0LDQ2NjE1LDQ2NjE3LDQ2NjE4LDQ2NjE5LDQ2NjIwLDQ2NjIxLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLDQ2NjIyLDQ2NjIzLDQ2NjI0LDQ2NjI1LDQ2NjI2LDQ2NjI3LDQ2NjI4LDQ2NjMwLDQ2NjMxLDQ2NjMyLDQ2NjMzLDQ2NjM0LDQ2NjM1LDQ2NjM3LDQ2NjM4LDQ2NjM5LDQ2NjQwLDQ2NjQxLDQ2NjQyLDQ2NjQzLDQ2NjQ1LDQ2NjQ2LDQ2NjQ3LDQ2NjQ4LDQ2NjQ5LDQ2NjUwLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NjUxLDQ2NjUyLDQ2NjUzLDQ2NjU0LDQ2NjU1LDQ2NjU2LDQ2NjU3LDQ2NjU4LDQ2NjU5LDQ2NjYwLDQ2NjYxLDQ2NjYyLDQ2NjYzLDQ2NjY1LDQ2NjY2LDQ2NjY3LDQ2NjY4LDQ2NjY5LDQ2NjcwLDQ2NjcxLDQ2NjcyLDQ2NjczLDQ2Njc0''@;'; put 'put ''LDQ2Njc1LDQ2Njc2LDQ2Njc3LDQ2Njc4LDQ2Njc5LDQ2NjgwLDQ2NjgxLDQ2NjgyLDQ2NjgzLDQ2Njg0LDQ2Njg1LDQ2Njg2LDQ2Njg3LDQ2Njg4LDQ2Njg5LDQ2NjkwLDQ2NjkxLDQ2NjkzLDQ2Njk0LDQ2Njk1LDQ2Njk3LDQ2Njk4LDQ2Njk5LDQ2NzAwLDQ2NzAxLDQ2NzAyLDQ2NzAzLDQ2''@;'; put 'put ''NzA0LDQ2NzA1LDQ2NzA2LDQ2NzA3LDQ2NzA4LDQ2NzA5LDQ2NzEwLDQ2NzExLDQ2NzEyLDQ2NzEzLDQ2NzE0LDQ2NzE1LDQ2NzE2LDQ2NzE3LDQ2NzE4LDQ2NzE5LDQ2NzIwLDQ2NzIxLDQ2NzIyLDQ2NzIzLDQ2NzI0LDQ2NzI1LDQ2NzI2LDQ2NzI3LDQ2NzI4LDQ2NzI5LDQ2NzMwLDQ2NzMx''@;'; put 'put ''LDQ2NzMyLDQ2NzMzLDQ2NzM0LDQ2NzM1LDQ2NzM2LDQ2NzM3LDQ2NzM4LDQ2NzM5LDQ2NzQwLDQ2NzQxLDQ2NzQyLDQ2NzQzLDQ2NzQ0LDQ2NzQ1LDQ2NzQ2LDQ2NzQ3LDQ2NzUwLDQ2NzUxLDQ2NzUzLDQ2NzU0LDQ2NzU1LDQ2NzU3LDQ2NzU4LDQ2NzU5LDQ2NzYwLDQ2NzYxLDQ2NzYyLDQ2''@;'; put 'put ''NzY1LDQ2NzY2LDQ2NzY3LDQ2NzY4LDQ2NzcwLDQ2NzcxLDQ2NzcyLDQ2NzczLDQ2Nzc0LDQ2Nzc1LDQ2Nzc2LDQ2Nzc3LDQ2Nzc4LDQ2Nzc5LDQ2NzgwLDQ2NzgxLDQ2NzgyLDQ2NzgzLDQ2Nzg0LDQ2Nzg1LDQ2Nzg2LDQ2Nzg3LDQ2Nzg4LDQ2Nzg5LDQ2NzkwLDQ2NzkxLDQ2NzkyLDQ2Nzkz''@;'; put 'put ''LDQ2Nzk0LDQ2Nzk1LDQ2Nzk2LDQ2Nzk3LDQ2Nzk4LDQ2Nzk5LDQ2ODAwLDQ2ODAxLDQ2ODAyLDQ2ODAzLDQ2ODA1LDQ2ODA2LDQ2ODA3LDQ2ODA4LDQ2ODA5LDQ2ODEwLDQ2ODExLDQ2ODEyLDQ2ODEzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2ODE0LDQ2ODE1LDQ2ODE2LDQ2''@;'; put 'put ''ODE3LDQ2ODE4LDQ2ODE5LDQ2ODIwLDQ2ODIxLDQ2ODIyLDQ2ODIzLDQ2ODI0LDQ2ODI1LDQ2ODI2LDQ2ODI3LDQ2ODI4LDQ2ODI5LDQ2ODMwLDQ2ODMxLDQ2ODMzLDQ2ODM0LDQ2ODM1LDQ2ODM3LDQ2ODM4LDQ2ODM5LDQ2ODQxLDQ2ODQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LDQ2ODQzLDQ2ODQ0LDQ2ODQ1LDQ2ODQ2LDQ2ODQ3LDQ2ODUwLDQ2ODUxLDQ2ODUyLDQ2ODU0LDQ2ODU1LDQ2ODU2LDQ2ODU3LDQ2ODU4LDQ2ODU5LDQ2ODYwLDQ2ODYxLDQ2ODYyLDQ2ODYzLDQ2ODY0LDQ2ODY1LDQ2ODY2LDQ2ODY3LDQ2ODY4LDQ2ODY5LDQ2ODcwLDQ2ODcxLDQ2ODcyLDQ2''@;'; put 'put ''ODczLDQ2ODc0LDQ2ODc1LDQ2ODc2LDQ2ODc3LDQ2ODc4LDQ2ODc5LDQ2ODgwLDQ2ODgxLDQ2ODgyLDQ2ODgzLDQ2ODg0LDQ2ODg1LDQ2ODg2LDQ2ODg3LDQ2ODkwLDQ2ODkxLDQ2ODkzLDQ2ODk0LDQ2ODk3LDQ2ODk4LDQ2ODk5LDQ2OTAwLDQ2OTAxLDQ2OTAyLDQ2OTAzLDQ2OTA2LDQ2OTA4''@;'; put 'put ''LDQ2OTA5LDQ2OTEwLDQ2OTExLDQ2OTEyLDQ2OTEzLDQ2OTE0LDQ2OTE1LDQ2OTE3LDQ2OTE4LDQ2OTE5LDQ2OTIxLDQ2OTIyLDQ2OTIzLDQ2OTI1LDQ2OTI2LDQ2OTI3LDQ2OTI4LDQ2OTI5LDQ2OTMwLDQ2OTMxLDQ2OTM0LDQ2OTM1LDQ2OTM2LDQ2OTM3LDQ2OTM4LDQ2OTM5LDQ2OTQwLDQ2''@;'; put 'put ''OTQxLDQ2OTQyLDQ2OTQzLDQ2OTQ1LDQ2OTQ2LDQ2OTQ3LDQ2OTQ5LDQ2OTUwLDQ2OTUxLDQ2OTUzLDQ2OTU0LDQ2OTU1LDQ2OTU2LDQ2OTU3LDQ2OTU4LDQ2OTU5LDQ2OTYyLDQ2OTY0LDQ2OTY2LDQ2OTY3LDQ2OTY4LDQ2OTY5LDQ2OTcwLDQ2OTcxLDQ2OTc0LDQ2OTc1LDQ2OTc3LDQ2OTc4''@;'; put 'put ''LDQ2OTc5LDQ2OTgxLDQ2OTgyLDQ2OTgzLDQ2OTg0LDQ2OTg1LDQ2OTg2LDQ2OTg3LDQ2OTkwLDQ2OTk1LDQ2OTk2LDQ2OTk3LDQ3MDAyLDQ3MDAzLDQ3MDA1LDQ3MDA2LDQ3MDA3LDQ3MDA5LDQ3MDEwLDQ3MDExLDQ3MDEyLDQ3MDEzLDQ3MDE0LDQ3MDE1LDQ3MDE4LDQ3MDIyLDQ3MDIzLDQ3''@;'; put 'put ''MDI0LDQ3MDI1LDQ3MDI2LDQ3MDI3LDQ3MDMwLDQ3MDMxLDQ3MDMzLDQ3MDM0LDQ3MDM1LDQ3MDM2LDQ3MDM3LDQ3MDM4LDQ3MDM5LDQ3MDQwLDQ3MDQxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MDQyLDQ3MDQzLDQ3MDQ0LDQ3MDQ1LDQ3MDQ2LDQ3MDQ4LDQ3MDUwLDQ3MDUx''@;'; put 'put ''LDQ3MDUyLDQ3MDUzLDQ3MDU0LDQ3MDU1LDQ3MDU2LDQ3MDU3LDQ3MDU4LDQ3MDU5LDQ3MDYwLDQ3MDYxLDQ3MDYyLDQ3MDYzLDQ3MDY0LDQ3MDY1LDQ3MDY2LDQ3MDY3LDQ3MDY4LDQ3MDY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MDcwLDQ3MDcxLDQ3MDcyLDQ3MDczLDQ3''@;'; put 'put ''MDc0LDQ3MDc1LDQ3MDc2LDQ3MDc3LDQ3MDc4LDQ3MDc5LDQ3MDgwLDQ3MDgxLDQ3MDgyLDQ3MDgzLDQ3MDg2LDQ3MDg3LDQ3MDg5LDQ3MDkwLDQ3MDkxLDQ3MDkzLDQ3MDk0LDQ3MDk1LDQ3MDk2LDQ3MDk3LDQ3MDk4LDQ3MDk5LDQ3MTAyLDQ3MTA2LDQ3MTA3LDQ3MTA4LDQ3MTA5LDQ3MTEw''@;'; put 'put ''LDQ3MTE0LDQ3MTE1LDQ3MTE3LDQ3MTE4LDQ3MTE5LDQ3MTIxLDQ3MTIyLDQ3MTIzLDQ3MTI0LDQ3MTI1LDQ3MTI2LDQ3MTI3LDQ3MTMwLDQ3MTMyLDQ3MTM0LDQ3MTM1LDQ3MTM2LDQ3MTM3LDQ3MTM4LDQ3MTM5LDQ3MTQyLDQ3MTQzLDQ3MTQ1LDQ3MTQ2LDQ3MTQ3LDQ3MTQ5LDQ3MTUwLDQ3''@;'; put 'put ''MTUxLDQ3MTUyLDQ3MTUzLDQ3MTU0LDQ3MTU1LDQ3MTU4LDQ3MTYyLDQ3MTYzLDQ3MTY0LDQ3MTY1LDQ3MTY2LDQ3MTY3LDQ3MTY5LDQ3MTcwLDQ3MTcxLDQ3MTczLDQ3MTc0LDQ3MTc1LDQ3MTc2LDQ3MTc3LDQ3MTc4LDQ3MTc5LDQ3MTgwLDQ3MTgxLDQ3MTgyLDQ3MTgzLDQ3MTg0LDQ3MTg2''@;'; put 'put ''LDQ3MTg4LDQ3MTg5LDQ3MTkwLDQ3MTkxLDQ3MTkyLDQ3MTkzLDQ3MTk0LDQ3MTk1LDQ3MTk4LDQ3MTk5LDQ3MjAxLDQ3MjAyLDQ3MjAzLDQ3MjA1LDQ3MjA2LDQ3MjA3LDQ3MjA4LDQ3MjA5LDQ3MjEwLDQ3MjExLDQ3MjE0LDQ3MjE2LDQ3MjE4LDQ3MjE5LDQ3MjIwLDQ3MjIxLDQ3MjIyLDQ3''@;'; put 'put ''MjIzLDQ3MjI1LDQ3MjI2LDQ3MjI3LDQ3MjI5LDQ3MjMwLDQ3MjMxLDQ3MjMyLDQ3MjMzLDQ3MjM0LDQ3MjM1LDQ3MjM2LDQ3MjM3LDQ3MjM4LDQ3MjM5LDQ3MjQwLDQ3MjQxLDQ3MjQyLDQ3MjQzLDQ3MjQ0LDQ3MjQ2LDQ3MjQ3LDQ3MjQ4LDQ3MjQ5LDQ3MjUwLDQ3MjUxLDQ3MjUyLDQ3MjUz''@;'; put 'put ''LDQ3MjU0LDQ3MjU1LDQ3MjU2LDQ3MjU3LDQ3MjU4LDQ3MjU5LDQ3MjYwLDQ3MjYxLDQ3MjYyLDQ3MjYzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MjY0LDQ3MjY1LDQ3MjY2LDQ3MjY3LDQ3MjY4LDQ3MjY5LDQ3MjcwLDQ3MjcxLDQ3MjczLDQ3Mjc0LDQ3Mjc1LDQ3Mjc2LDQ3''@;'; put 'put ''Mjc3LDQ3Mjc4LDQ3Mjc5LDQ3MjgxLDQ3MjgyLDQ3MjgzLDQ3Mjg1LDQ3Mjg2LDQ3Mjg3LDQ3Mjg5LDQ3MjkwLDQ3MjkxLDQ3MjkyLDQ3MjkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3Mjk0LDQ3Mjk1LDQ3Mjk4LDQ3MzAwLDQ3MzAyLDQ3MzAzLDQ3MzA0LDQ3MzA1LDQ3MzA2''@;'; put 'put ''LDQ3MzA3LDQ3MzA5LDQ3MzEwLDQ3MzExLDQ3MzEzLDQ3MzE0LDQ3MzE1LDQ3MzE3LDQ3MzE4LDQ3MzE5LDQ3MzIwLDQ3MzIxLDQ3MzIyLDQ3MzIzLDQ3MzI0LDQ3MzI2LDQ3MzI4LDQ3MzMwLDQ3MzMxLDQ3MzMyLDQ3MzMzLDQ3MzM0LDQ3MzM1LDQ3MzM4LDQ3MzM5LDQ3MzQxLDQ3MzQyLDQ3''@;'; put 'put ''MzQzLDQ3MzQ1LDQ3MzQ2LDQ3MzQ3LDQ3MzQ4LDQ3MzQ5LDQ3MzUwLDQ3MzUxLDQ3MzU0LDQ3MzU2LDQ3MzU4LDQ3MzU5LDQ3MzYwLDQ3MzYxLDQ3MzYyLDQ3MzYzLDQ3MzY1LDQ3MzY2LDQ3MzY3LDQ3MzY4LDQ3MzY5LDQ3MzcwLDQ3MzcxLDQ3MzcyLDQ3MzczLDQ3Mzc0LDQ3Mzc1LDQ3Mzc2''@;'; put 'put ''LDQ3Mzc3LDQ3Mzc4LDQ3Mzc5LDQ3MzgwLDQ3MzgxLDQ3MzgyLDQ3MzgzLDQ3Mzg1LDQ3Mzg2LDQ3Mzg3LDQ3Mzg4LDQ3Mzg5LDQ3MzkwLDQ3MzkxLDQ3MzkzLDQ3Mzk0LDQ3Mzk1LDQ3Mzk2LDQ3Mzk3LDQ3Mzk4LDQ3Mzk5LDQ3NDAwLDQ3NDAxLDQ3NDAyLDQ3NDAzLDQ3NDA0LDQ3NDA1LDQ3''@;'; put 'put ''NDA2LDQ3NDA3LDQ3NDA4LDQ3NDA5LDQ3NDEwLDQ3NDExLDQ3NDEyLDQ3NDEzLDQ3NDE0LDQ3NDE1LDQ3NDE2LDQ3NDE3LDQ3NDE4LDQ3NDE5LDQ3NDIyLDQ3NDIzLDQ3NDI1LDQ3NDI2LDQ3NDI3LDQ3NDI5LDQ3NDMwLDQ3NDMxLDQ3NDMyLDQ3NDMzLDQ3NDM0LDQ3NDM1LDQ3NDM3LDQ3NDM4''@;'; put 'put ''LDQ3NDQwLDQ3NDQyLDQ3NDQzLDQ3NDQ0LDQ3NDQ1LDQ3NDQ2LDQ3NDQ3LDQ3NDUwLDQ3NDUxLDQ3NDUzLDQ3NDU0LDQ3NDU1LDQ3NDU3LDQ3NDU4LDQ3NDU5LDQ3NDYwLDQ3NDYxLDQ3NDYyLDQ3NDYzLDQ3NDY2LDQ3NDY4LDQ3NDcwLDQ3NDcxLDQ3NDcyLDQ3NDczLDQ3NDc0LDQ3NDc1LDQ3''@;'; put 'put ''NDc4LDQ3NDc5LDQ3NDgxLDQ3NDgyLDQ3NDgzLDQ3NDg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NDg2LDQ3NDg3LDQ3NDg4LDQ3NDg5LDQ3NDkwLDQ3NDkxLDQ3NDk0LDQ3NDk2LDQ3NDk5LDQ3NTAwLDQ3NTAzLDQ3NTA0LDQ3NTA1LDQ3NTA2LDQ3NTA3LDQ3NTA4LDQ3NTA5''@;'; put 'put ''LDQ3NTEwLDQ3NTExLDQ3NTEyLDQ3NTEzLDQ3NTE0LDQ3NTE1LDQ3NTE2LDQ3NTE3LDQ3NTE4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NTE5LDQ3NTIwLDQ3NTIxLDQ3NTIyLDQ3NTIzLDQ3NTI0LDQ3NTI1LDQ3NTI2LDQ3NTI3LDQ3NTI4LDQ3NTI5LDQ3NTMwLDQ3NTMxLDQ3''@;'; put 'put ''NTM0LDQ3NTM1LDQ3NTM3LDQ3NTM4LDQ3NTM5LDQ3NTQxLDQ3NTQyLDQ3NTQzLDQ3NTQ0LDQ3NTQ1LDQ3NTQ2LDQ3NTQ3LDQ3NTUwLDQ3NTUyLDQ3NTU0LDQ3NTU1LDQ3NTU2LDQ3NTU3LDQ3NTU4LDQ3NTU5LDQ3NTYyLDQ3NTYzLDQ3NTY1LDQ3NTcxLDQ3NTcyLDQ3NTczLDQ3NTc0LDQ3NTc1''@;'; put 'put ''LDQ3NTc4LDQ3NTgwLDQ3NTgzLDQ3NTg0LDQ3NTg2LDQ3NTkwLDQ3NTkxLDQ3NTkzLDQ3NTk0LDQ3NTk1LDQ3NTk3LDQ3NTk4LDQ3NTk5LDQ3NjAwLDQ3NjAxLDQ3NjAyLDQ3NjAzLDQ3NjA2LDQ3NjExLDQ3NjEyLDQ3NjEzLDQ3NjE0LDQ3NjE1LDQ3NjE4LDQ3NjE5LDQ3NjIwLDQ3NjIxLDQ3''@;'; put 'put ''NjIyLDQ3NjIzLDQ3NjI1LDQ3NjI2LDQ3NjI3LDQ3NjI4LDQ3NjI5LDQ3NjMwLDQ3NjMxLDQ3NjMyLDQ3NjMzLDQ3NjM0LDQ3NjM1LDQ3NjM2LDQ3NjM4LDQ3NjM5LDQ3NjQwLDQ3NjQxLDQ3NjQyLDQ3NjQzLDQ3NjQ0LDQ3NjQ1LDQ3NjQ2LDQ3NjQ3LDQ3NjQ4LDQ3NjQ5LDQ3NjUwLDQ3NjUx''@;'; put 'put ''LDQ3NjUyLDQ3NjUzLDQ3NjU0LDQ3NjU1LDQ3NjU2LDQ3NjU3LDQ3NjU4LDQ3NjU5LDQ3NjYwLDQ3NjYxLDQ3NjYyLDQ3NjYzLDQ3NjY0LDQ3NjY1LDQ3NjY2LDQ3NjY3LDQ3NjY4LDQ3NjY5LDQ3NjcwLDQ3NjcxLDQ3Njc0LDQ3Njc1LDQ3Njc3LDQ3Njc4LDQ3Njc5LDQ3NjgxLDQ3NjgzLDQ3''@;'; put 'put ''Njg0LDQ3Njg1LDQ3Njg2LDQ3Njg3LDQ3NjkwLDQ3NjkyLDQ3Njk1LDQ3Njk2LDQ3Njk3LDQ3Njk4LDQ3NzAyLDQ3NzAzLDQ3NzA1LDQ3NzA2LDQ3NzA3LDQ3NzA5LDQ3NzEwLDQ3NzExLDQ3NzEyLDQ3NzEzLDQ3NzE0LDQ3NzE1LDQ3NzE4LDQ3NzIyLDQ3NzIzLDQ3NzI0LDQ3NzI1LDQ3NzI2''@;'; put 'put ''LDQ3NzI3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NzMwLDQ3NzMxLDQ3NzMzLDQ3NzM0LDQ3NzM1LDQ3NzM3LDQ3NzM4LDQ3NzM5LDQ3NzQwLDQ3NzQxLDQ3NzQyLDQ3NzQzLDQ3NzQ0LDQ3NzQ1LDQ3NzQ2LDQ3NzUwLDQ3NzUyLDQ3NzUzLDQ3NzU0LDQ3NzU1LDQ3NzU3LDQ3''@;'; put 'put ''NzU4LDQ3NzU5LDQ3NzYwLDQ3NzYxLDQ3NzYyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NzYzLDQ3NzY0LDQ3NzY1LDQ3NzY2LDQ3NzY3LDQ3NzY4LDQ3NzY5LDQ3NzcwLDQ3NzcxLDQ3NzcyLDQ3NzczLDQ3Nzc0LDQ3Nzc1LDQ3Nzc2LDQ3Nzc3LDQ3Nzc4LDQ3Nzc5LDQ3Nzgw''@;'; put 'put ''LDQ3NzgxLDQ3NzgyLDQ3NzgzLDQ3Nzg2LDQ3Nzg5LDQ3NzkwLDQ3NzkxLDQ3NzkzLDQ3Nzk1LDQ3Nzk2LDQ3Nzk3LDQ3Nzk4LDQ3Nzk5LDQ3ODAyLDQ3ODA0LDQ3ODA2LDQ3ODA3LDQ3ODA4LDQ3ODA5LDQ3ODEwLDQ3ODExLDQ3ODEzLDQ3ODE0LDQ3ODE1LDQ3ODE3LDQ3ODE4LDQ3ODE5LDQ3''@;'; put 'put ''ODIwLDQ3ODIxLDQ3ODIyLDQ3ODIzLDQ3ODI0LDQ3ODI1LDQ3ODI2LDQ3ODI3LDQ3ODI4LDQ3ODI5LDQ3ODMwLDQ3ODMxLDQ3ODM0LDQ3ODM1LDQ3ODM2LDQ3ODM3LDQ3ODM4LDQ3ODM5LDQ3ODQwLDQ3ODQxLDQ3ODQyLDQ3ODQzLDQ3ODQ0LDQ3ODQ1LDQ3ODQ2LDQ3ODQ3LDQ3ODQ4LDQ3ODQ5''@;'; put 'put ''LDQ3ODUwLDQ3ODUxLDQ3ODUyLDQ3ODUzLDQ3ODU0LDQ3ODU1LDQ3ODU2LDQ3ODU3LDQ3ODU4LDQ3ODU5LDQ3ODYwLDQ3ODYxLDQ3ODYyLDQ3ODYzLDQ3ODY0LDQ3ODY1LDQ3ODY2LDQ3ODY3LDQ3ODY5LDQ3ODcwLDQ3ODcxLDQ3ODczLDQ3ODc0LDQ3ODc1LDQ3ODc3LDQ3ODc4LDQ3ODc5LDQ3''@;'; put 'put ''ODgwLDQ3ODgxLDQ3ODgyLDQ3ODgzLDQ3ODg0LDQ3ODg2LDQ3ODg4LDQ3ODkwLDQ3ODkxLDQ3ODkyLDQ3ODkzLDQ3ODk0LDQ3ODk1LDQ3ODk3LDQ3ODk4LDQ3ODk5LDQ3OTAxLDQ3OTAyLDQ3OTAzLDQ3OTA1LDQ3OTA2LDQ3OTA3LDQ3OTA4LDQ3OTA5LDQ3OTEwLDQ3OTExLDQ3OTEyLDQ3OTE0''@;'; put 'put ''LDQ3OTE2LDQ3OTE3LDQ3OTE4LDQ3OTE5LDQ3OTIwLDQ3OTIxLDQ3OTIyLDQ3OTIzLDQ3OTI3LDQ3OTI5LDQ3OTMwLDQ3OTM1LDQ3OTM2LDQ3OTM3LDQ3OTM4LDQ3OTM5LDQ3OTQyLDQ3OTQ0LDQ3OTQ2LDQ3OTQ3LDQ3OTQ4LDQ3OTUwLDQ3OTUzLDQ3OTU0LG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLDQ3OTU1LDQ3OTU3LDQ3OTU4LDQ3OTU5LDQ3OTYxLDQ3OTYyLDQ3OTYzLDQ3OTY0LDQ3OTY1LDQ3OTY2LDQ3OTY3LDQ3OTY4LDQ3OTcwLDQ3OTcyLDQ3OTczLDQ3OTc0LDQ3OTc1LDQ3OTc2LDQ3OTc3LDQ3OTc4LDQ3OTc5LDQ3OTgxLDQ3OTgyLDQ3OTgzLDQ3OTg0LDQ3OTg1''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3OTg2LDQ3OTg3LDQ3OTg4LDQ3OTg5LDQ3OTkwLDQ3OTkxLDQ3OTkyLDQ3OTkzLDQ3OTk0LDQ3OTk1LDQ3OTk2LDQ3OTk3LDQ3OTk4LDQ3OTk5LDQ4ZTMsNDgwMDEsNDgwMDIsNDgwMDMsNDgwMDQsNDgwMDUsNDgwMDYsNDgwMDcsNDgw''@;'; put 'put ''MDksNDgwMTAsNDgwMTEsNDgwMTMsNDgwMTQsNDgwMTUsNDgwMTcsNDgwMTgsNDgwMTksNDgwMjAsNDgwMjEsNDgwMjIsNDgwMjMsNDgwMjQsNDgwMjUsNDgwMjYsNDgwMjcsNDgwMjgsNDgwMjksNDgwMzAsNDgwMzEsNDgwMzIsNDgwMzMsNDgwMzQsNDgwMzUsNDgwMzcsNDgwMzgsNDgwMzks''@;'; put 'put ''NDgwNDEsNDgwNDIsNDgwNDMsNDgwNDUsNDgwNDYsNDgwNDcsNDgwNDgsNDgwNDksNDgwNTAsNDgwNTEsNDgwNTMsNDgwNTQsNDgwNTYsNDgwNTcsNDgwNTgsNDgwNTksNDgwNjAsNDgwNjEsNDgwNjIsNDgwNjMsNDgwNjUsNDgwNjYsNDgwNjcsNDgwNjksNDgwNzAsNDgwNzEsNDgwNzMsNDgw''@;'; put 'put ''NzQsNDgwNzUsNDgwNzYsNDgwNzcsNDgwNzgsNDgwNzksNDgwODEsNDgwODIsNDgwODQsNDgwODUsNDgwODYsNDgwODcsNDgwODgsNDgwODksNDgwOTAsNDgwOTEsNDgwOTIsNDgwOTMsNDgwOTQsNDgwOTUsNDgwOTYsNDgwOTcsNDgwOTgsNDgwOTksNDgxMDAsNDgxMDEsNDgxMDIsNDgxMDMs''@;'; put 'put ''NDgxMDQsNDgxMDUsNDgxMDYsNDgxMDcsNDgxMDgsNDgxMDksNDgxMTAsNDgxMTEsNDgxMTIsNDgxMTMsNDgxMTQsNDgxMTUsNDgxMTYsNDgxMTcsNDgxMTgsNDgxMTksNDgxMjIsNDgxMjMsNDgxMjUsNDgxMjYsNDgxMjksNDgxMzEsNDgxMzIsNDgxMzMsNDgxMzQsNDgxMzUsNDgxMzgsNDgx''@;'; put 'put ''NDIsNDgxNDQsNDgxNDYsNDgxNDcsNDgxNTMsNDgxNTQsNDgxNjAsNDgxNjEsNDgxNjIsNDgxNjMsNDgxNjYsNDgxNjgsNDgxNzAsNDgxNzEsNDgxNzIsNDgxNzQsNDgxNzUsNDgxNzgsNDgxNzksNDgxODEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDgxODIsNDgxODMsNDgxODUs''@;'; put 'put ''NDgxODYsNDgxODcsNDgxODgsNDgxODksNDgxOTAsNDgxOTEsNDgxOTQsNDgxOTgsNDgxOTksNDgyMDAsNDgyMDIsNDgyMDMsNDgyMDYsNDgyMDcsNDgyMDksNDgyMTAsNDgyMTEsNDgyMTIsNDgyMTMsNDgyMTQsNDgyMTUsNDgyMTYsNDgyMTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsNDgyMTgsNDgyMTksNDgyMjAsNDgyMjIsNDgyMjMsNDgyMjQsNDgyMjUsNDgyMjYsNDgyMjcsNDgyMjgsNDgyMjksNDgyMzAsNDgyMzEsNDgyMzIsNDgyMzMsNDgyMzQsNDgyMzUsNDgyMzYsNDgyMzcsNDgyMzgsNDgyMzksNDgyNDAsNDgyNDEsNDgyNDIsNDgyNDMsNDgyNDQsNDgyNDUs''@;'; put 'put ''NDgyNDYsNDgyNDcsNDgyNDgsNDgyNDksNDgyNTAsNDgyNTEsNDgyNTIsNDgyNTMsNDgyNTQsNDgyNTUsNDgyNTYsNDgyNTcsNDgyNTgsNDgyNTksNDgyNjIsNDgyNjMsNDgyNjUsNDgyNjYsNDgyNjksNDgyNzEsNDgyNzIsNDgyNzMsNDgyNzQsNDgyNzUsNDgyNzgsNDgyODAsNDgyODMsNDgy''@;'; put 'put ''ODQsNDgyODUsNDgyODYsNDgyODcsNDgyOTAsNDgyOTEsNDgyOTMsNDgyOTQsNDgyOTcsNDgyOTgsNDgyOTksNDgzMDAsNDgzMDEsNDgzMDIsNDgzMDMsNDgzMDYsNDgzMTAsNDgzMTEsNDgzMTIsNDgzMTMsNDgzMTQsNDgzMTUsNDgzMTgsNDgzMTksNDgzMjEsNDgzMjIsNDgzMjMsNDgzMjUs''@;'; put 'put ''NDgzMjYsNDgzMjcsNDgzMjgsNDgzMjksNDgzMzAsNDgzMzEsNDgzMzIsNDgzMzQsNDgzMzgsNDgzMzksNDgzNDAsNDgzNDIsNDgzNDMsNDgzNDUsNDgzNDYsNDgzNDcsNDgzNDksNDgzNTAsNDgzNTEsNDgzNTIsNDgzNTMsNDgzNTQsNDgzNTUsNDgzNTYsNDgzNTcsNDgzNTgsNDgzNTksNDgz''@;'; put 'put ''NjAsNDgzNjEsNDgzNjIsNDgzNjMsNDgzNjQsNDgzNjUsNDgzNjYsNDgzNjcsNDgzNjgsNDgzNjksNDgzNzAsNDgzNzEsNDgzNzUsNDgzNzcsNDgzNzgsNDgzNzksNDgzODEsNDgzODIsNDgzODMsNDgzODQsNDgzODUsNDgzODYsNDgzODcsNDgzOTAsNDgzOTIsNDgzOTQsNDgzOTUsNDgzOTYs''@;'; put 'put ''NDgzOTcsNDgzOTgsNDgzOTksNDg0MDEsNDg0MDIsNDg0MDMsNDg0MDUsNDg0MDYsNDg0MDcsNDg0MDgsNDg0MDksNDg0MTAsNDg0MTEsNDg0MTIsNDg0MTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg0MTQsNDg0MTUsNDg0MTYsNDg0MTcsNDg0MTgsNDg0MTksNDg0MjEsNDg0''@;'; put 'put ''MjIsNDg0MjMsNDg0MjQsNDg0MjUsNDg0MjYsNDg0MjcsNDg0MjksNDg0MzAsNDg0MzEsNDg0MzIsNDg0MzMsNDg0MzQsNDg0MzUsNDg0MzYsNDg0MzcsNDg0MzgsNDg0MzksNDg0NDAsNDg0NDEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg0NDIsNDg0NDMsNDg0NDQsNDg0NDUs''@;'; put 'put ''NDg0NDYsNDg0NDcsNDg0NDksNDg0NTAsNDg0NTEsNDg0NTIsNDg0NTMsNDg0NTQsNDg0NTUsNDg0NTgsNDg0NTksNDg0NjEsNDg0NjIsNDg0NjMsNDg0NjUsNDg0NjYsNDg0NjcsNDg0NjgsNDg0NjksNDg0NzAsNDg0NzEsNDg0NzQsNDg0NzUsNDg0NzYsNDg0NzcsNDg0NzgsNDg0NzksNDg0''@;'; put 'put ''ODAsNDg0ODEsNDg0ODIsNDg0ODMsNDg0ODUsNDg0ODYsNDg0ODcsNDg0ODksNDg0OTAsNDg0OTEsNDg0OTIsNDg0OTMsNDg0OTQsNDg0OTUsNDg0OTYsNDg0OTcsNDg0OTgsNDg0OTksNDg1MDAsNDg1MDEsNDg1MDIsNDg1MDMsNDg1MDQsNDg1MDUsNDg1MDYsNDg1MDcsNDg1MDgsNDg1MDks''@;'; put 'put ''NDg1MTAsNDg1MTEsNDg1MTQsNDg1MTUsNDg1MTcsNDg1MTgsNDg1MjMsNDg1MjQsNDg1MjUsNDg1MjYsNDg1MjcsNDg1MzAsNDg1MzIsNDg1MzQsNDg1MzUsNDg1MzYsNDg1MzksNDg1NDEsNDg1NDIsNDg1NDMsNDg1NDQsNDg1NDUsNDg1NDYsNDg1NDcsNDg1NDksNDg1NTAsNDg1NTEsNDg1''@;'; put 'put ''NTIsNDg1NTMsNDg1NTQsNDg1NTUsNDg1NTYsNDg1NTcsNDg1NTgsNDg1NTksNDg1NjEsNDg1NjIsNDg1NjMsNDg1NjQsNDg1NjUsNDg1NjYsNDg1NjcsNDg1NjksNDg1NzAsNDg1NzEsNDg1NzIsNDg1NzMsNDg1NzQsNDg1NzUsNDg1NzYsNDg1NzcsNDg1NzgsNDg1NzksNDg1ODAsNDg1ODEs''@;'; put 'put ''NDg1ODIsNDg1ODMsNDg1ODQsNDg1ODUsNDg1ODYsNDg1ODcsNDg1ODgsNDg1ODksNDg1OTAsNDg1OTEsNDg1OTIsNDg1OTMsNDg1OTQsNDg1OTUsNDg1OTgsNDg1OTksNDg2MDEsNDg2MDIsNDg2MDMsNDg2MDUsNDg2MDYsNDg2MDcsNDg2MDgsNDg2MDksNDg2MTAsNDg2MTEsNDg2MTIsNDg2''@;'; put 'put ''MTMsNDg2MTQsNDg2MTUsNDg2MTYsNDg2MTgsNDg2MTksNDg2MjAsNDg2MjEsNDg2MjIsNDg2MjMsNDg2MjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg2MjYsNDg2MjcsNDg2MjksNDg2MzAsNDg2MzEsNDg2MzMsNDg2MzQsNDg2MzUsNDg2MzYsNDg2MzcsNDg2MzgsNDg2Mzks''@;'; put 'put ''NDg2NDEsNDg2NDIsNDg2NDQsNDg2NDYsNDg2NDcsNDg2NDgsNDg2NDksNDg2NTAsNDg2NTEsNDg2NTQsNDg2NTUsNDg2NTcsNDg2NTgsNDg2NTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg2NjEsNDg2NjIsNDg2NjMsNDg2NjQsNDg2NjUsNDg2NjYsNDg2NjcsNDg2NzAsNDg2''@;'; put 'put ''NzIsNDg2NzMsNDg2NzQsNDg2NzUsNDg2NzYsNDg2NzcsNDg2NzgsNDg2NzksNDg2ODAsNDg2ODEsNDg2ODIsNDg2ODMsNDg2ODQsNDg2ODUsNDg2ODYsNDg2ODcsNDg2ODgsNDg2ODksNDg2OTAsNDg2OTEsNDg2OTIsNDg2OTMsNDg2OTQsNDg2OTUsNDg2OTYsNDg2OTcsNDg2OTgsNDg2OTks''@;'; put 'put ''NDg3MDAsNDg3MDEsNDg3MDIsNDg3MDMsNDg3MDQsNDg3MDUsNDg3MDYsNDg3MDcsNDg3MTAsNDg3MTEsNDg3MTMsNDg3MTQsNDg3MTUsNDg3MTcsNDg3MTksNDg3MjAsNDg3MjEsNDg3MjIsNDg3MjMsNDg3MjYsNDg3MjgsNDg3MzIsNDg3MzMsNDg3MzQsNDg3MzUsNDg3MzgsNDg3MzksNDg3''@;'; put 'put ''NDEsNDg3NDIsNDg3NDMsNDg3NDUsNDg3NDcsNDg3NDgsNDg3NDksNDg3NTAsNDg3NTEsNDg3NTQsNDg3NTgsNDg3NTksNDg3NjAsNDg3NjEsNDg3NjIsNDg3NjYsNDg3NjcsNDg3NjksNDg3NzAsNDg3NzEsNDg3NzMsNDg3NzQsNDg3NzUsNDg3NzYsNDg3NzcsNDg3NzgsNDg3NzksNDg3ODIs''@;'; put 'put ''NDg3ODYsNDg3ODcsNDg3ODgsNDg3ODksNDg3OTAsNDg3OTEsNDg3OTQsNDg3OTUsNDg3OTYsNDg3OTcsNDg3OTgsNDg3OTksNDg4MDAsNDg4MDEsNDg4MDIsNDg4MDMsNDg4MDQsNDg4MDUsNDg4MDYsNDg4MDcsNDg4MDksNDg4MTAsNDg4MTEsNDg4MTIsNDg4MTMsNDg4MTQsNDg4MTUsNDg4''@;'; put 'put ''MTYsNDg4MTcsNDg4MTgsNDg4MTksNDg4MjAsNDg4MjEsNDg4MjIsNDg4MjMsNDg4MjQsNDg4MjUsNDg4MjYsNDg4MjcsNDg4MjgsNDg4MjksNDg4MzAsNDg4MzEsNDg4MzIsNDg4MzMsNDg4MzQsNDg4MzUsNDg4MzYsNDg4MzcsNDg4MzgsNDg4MzksNDg4NDAsNDg4NDEsNDg4NDIsNDg4NDMs''@;'; put 'put ''NDg4NDQsNDg4NDUsNDg4NDYsNDg4NDcsNDg4NTAsNDg4NTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg4NTMsNDg4NTQsNDg4NTcsNDg4NTgsNDg4NTksNDg4NjAsNDg4NjEsNDg4NjIsNDg4NjMsNDg4NjUsNDg4NjYsNDg4NzAsNDg4NzEsNDg4NzIsNDg4NzMsNDg4NzQsNDg4''@;'; put 'put ''NzUsNDg4NzcsNDg4NzgsNDg4NzksNDg4ODAsNDg4ODEsNDg4ODIsNDg4ODMsNDg4ODQsNDg4ODUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg4ODYsNDg4ODcsNDg4ODgsNDg4ODksNDg4OTAsNDg4OTEsNDg4OTIsNDg4OTMsNDg4OTQsNDg4OTUsNDg4OTYsNDg4OTgsNDg4OTks''@;'; put 'put ''NDg5MDAsNDg5MDEsNDg5MDIsNDg5MDMsNDg5MDYsNDg5MDcsNDg5MDgsNDg5MDksNDg5MTAsNDg5MTEsNDg5MTIsNDg5MTMsNDg5MTQsNDg5MTUsNDg5MTYsNDg5MTcsNDg5MTgsNDg5MTksNDg5MjIsNDg5MjYsNDg5MjcsNDg5MjgsNDg5MjksNDg5MzAsNDg5MzEsNDg5MzIsNDg5MzMsNDg5''@;'; put 'put ''MzQsNDg5MzUsNDg5MzYsNDg5MzcsNDg5MzgsNDg5MzksNDg5NDAsNDg5NDEsNDg5NDIsNDg5NDMsNDg5NDQsNDg5NDUsNDg5NDYsNDg5NDcsNDg5NDgsNDg5NDksNDg5NTAsNDg5NTEsNDg5NTIsNDg5NTMsNDg5NTQsNDg5NTUsNDg5NTYsNDg5NTcsNDg5NTgsNDg5NTksNDg5NjIsNDg5NjMs''@;'; put 'put ''NDg5NjUsNDg5NjYsNDg5NjcsNDg5NjksNDg5NzAsNDg5NzEsNDg5NzIsNDg5NzMsNDg5NzQsNDg5NzUsNDg5NzgsNDg5NzksNDg5ODAsNDg5ODIsNDg5ODMsNDg5ODQsNDg5ODUsNDg5ODYsNDg5ODcsNDg5ODgsNDg5ODksNDg5OTAsNDg5OTEsNDg5OTIsNDg5OTMsNDg5OTQsNDg5OTUsNDg5''@;'; put 'put ''OTYsNDg5OTcsNDg5OTgsNDg5OTksNDllMyw0OTAwMSw0OTAwMiw0OTAwMyw0OTAwNCw0OTAwNSw0OTAwNiw0OTAwNyw0OTAwOCw0OTAwOSw0OTAxMCw0OTAxMSw0OTAxMiw0OTAxMyw0OTAxNCw0OTAxNSw0OTAxNiw0OTAxNyw0OTAxOCw0OTAxOSw0OTAyMCw0OTAyMSw0OTAyMiw0OTAyMyw0''@;'; put 'put ''OTAyNCw0OTAyNSw0OTAyNiw0OTAyNyw0OTAyOCw0OTAyOSw0OTAzMCw0OTAzMSw0OTAzMiw0OTAzMyw0OTAzNCw0OTAzNSw0OTAzNiw0OTAzNyw0OTAzOCw0OTAzOSw0OTA0MCw0OTA0MSw0OTA0Miw0OTA0Myw0OTA0NSw0OTA0Niw0OTA0Nyw0OTA0OCw0OTA0OSw0OTA1MCw0OTA1MSw0OTA1''@;'; put 'put ''Miw0OTA1MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTA1NCw0OTA1NSw0OTA1Niw0OTA1Nyw0OTA1OCw0OTA1OSw0OTA2MCw0OTA2MSw0OTA2Miw0OTA2Myw0OTA2NCw0OTA2NSw0OTA2Niw0OTA2Nyw0OTA2OCw0OTA2OSw0OTA3MCw0OTA3MSw0OTA3Myw0OTA3NCw0OTA3NSw0''@;'; put 'put ''OTA3Niw0OTA3Nyw0OTA3OCw0OTA3OSw0OTA4MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTA4MSw0OTA4Miw0OTA4Myw0OTA4NCw0OTA4NSw0OTA4Niw0OTA4Nyw0OTA4OCw0OTA4OSw0OTA5MCw0OTA5MSw0OTA5Miw0OTA5NCw0OTA5NSw0OTA5Niw0OTA5Nyw0OTA5OCw0OTA5''@;'; put 'put ''OSw0OTEwMiw0OTEwMyw0OTEwNSw0OTEwNiw0OTEwNyw0OTEwOSw0OTExMCw0OTExMSw0OTExMiw0OTExMyw0OTExNCw0OTExNSw0OTExNyw0OTExOCw0OTEyMCw0OTEyMiw0OTEyMyw0OTEyNCw0OTEyNSw0OTEyNiw0OTEyNyw0OTEyOCw0OTEyOSw0OTEzMCw0OTEzMSw0OTEzMiw0OTEzMyw0''@;'; put 'put ''OTEzNCw0OTEzNSw0OTEzNiw0OTEzNyw0OTEzOCw0OTEzOSw0OTE0MCw0OTE0MSw0OTE0Miw0OTE0Myw0OTE0NCw0OTE0NSw0OTE0Niw0OTE0Nyw0OTE0OCw0OTE0OSw0OTE1MCw0OTE1MSw0OTE1Miw0OTE1Myw0OTE1NCw0OTE1NSw0OTE1Niw0OTE1Nyw0OTE1OCw0OTE1OSw0OTE2MCw0OTE2''@;'; put 'put ''MSw0OTE2Miw0OTE2Myw0OTE2NCw0OTE2NSw0OTE2Niw0OTE2Nyw0OTE2OCw0OTE2OSw0OTE3MCw0OTE3MSw0OTE3Miw0OTE3Myw0OTE3NCw0OTE3NSw0OTE3Niw0OTE3Nyw0OTE3OCw0OTE3OSw0OTE4MCw0OTE4MSw0OTE4Miw0OTE4Myw0OTE4NCw0OTE4NSw0OTE4Niw0OTE4Nyw0OTE4OCw0''@;'; put 'put ''OTE4OSw0OTE5MCw0OTE5MSw0OTE5Miw0OTE5Myw0OTE5NCw0OTE5NSw0OTE5Niw0OTE5Nyw0OTE5OCw0OTE5OSw0OTIwMCw0OTIwMSw0OTIwMiw0OTIwMyw0OTIwNCw0OTIwNSw0OTIwNiw0OTIwNyw0OTIwOCw0OTIwOSw0OTIxMCw0OTIxMSw0OTIxMyw0OTIxNCw0OTIxNSw0OTIxNiw0OTIx''@;'; put 'put ''Nyw0OTIxOCw0OTIxOSw0OTIyMCw0OTIyMSw0OTIyMiw0OTIyMyw0OTIyNCw0OTIyNSw0OTIyNiw0OTIyNyw0OTIyOCw0OTIyOSw0OTIzMCw0OTIzMSw0OTIzMiw0OTIzNCw0OTIzNSw0OTIzNiw0OTIzNyw0OTIzOCw0OTIzOSw0OTI0MSw0OTI0Miw0OTI0MyxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCw0OTI0NSw0OTI0Niw0OTI0Nyw0OTI0OSw0OTI1MCw0OTI1MSw0OTI1Miw0OTI1Myw0OTI1NCw0OTI1NSw0OTI1OCw0OTI1OSw0OTI2MCw0OTI2MSw0OTI2Miw0OTI2Myw0OTI2NCw0OTI2NSw0OTI2Niw0OTI2Nyw0OTI2OCw0OTI2OSw0OTI3MCw0OTI3MSw0OTI3Miw0OTI3''@;'; put 'put ''MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTI3NCw0OTI3NSw0OTI3Niw0OTI3Nyw0OTI3OCw0OTI3OSw0OTI4MCw0OTI4MSw0OTI4Miw0OTI4Myw0OTI4NCw0OTI4NSw0OTI4Niw0OTI4Nyw0OTI4OCw0OTI4OSw0OTI5MCw0OTI5MSw0OTI5Miw0OTI5Myw0OTI5NCw0OTI5NSw0''@;'; put 'put ''OTI5OCw0OTI5OSw0OTMwMSw0OTMwMiw0OTMwMyw0OTMwNSw0OTMwNiw0OTMwNyw0OTMwOCw0OTMwOSw0OTMxMCw0OTMxMSw0OTMxNCw0OTMxNiw0OTMxOCw0OTMxOSw0OTMyMCw0OTMyMSw0OTMyMiw0OTMyMyw0OTMyNiw0OTMyOSw0OTMzMCw0OTMzNSw0OTMzNiw0OTMzNyw0OTMzOCw0OTMz''@;'; put 'put ''OSw0OTM0Miw0OTM0Niw0OTM0Nyw0OTM0OCw0OTM1MCw0OTM1MSw0OTM1NCw0OTM1NSw0OTM1Nyw0OTM1OCw0OTM1OSw0OTM2MSw0OTM2Miw0OTM2Myw0OTM2NCw0OTM2NSw0OTM2Niw0OTM2Nyw0OTM3MCw0OTM3NCw0OTM3NSw0OTM3Niw0OTM3Nyw0OTM3OCw0OTM3OSw0OTM4Miw0OTM4Myw0''@;'; put 'put ''OTM4NSw0OTM4Niw0OTM4Nyw0OTM4OSw0OTM5MCw0OTM5MSw0OTM5Miw0OTM5Myw0OTM5NCw0OTM5NSw0OTM5OCw0OTQwMCw0OTQwMiw0OTQwMyw0OTQwNCw0OTQwNSw0OTQwNiw0OTQwNyw0OTQwOSw0OTQxMCw0OTQxMSw0OTQxMyw0OTQxNCw0OTQxNSw0OTQxNyw0OTQxOCw0OTQxOSw0OTQy''@;'; put 'put ''MCw0OTQyMSw0OTQyMiw0OTQyMyw0OTQyNSw0OTQyNiw0OTQyNyw0OTQyOCw0OTQzMCw0OTQzMSw0OTQzMiw0OTQzMyw0OTQzNCw0OTQzNSw0OTQ0MSw0OTQ0Miw0OTQ0NSw0OTQ0OCw0OTQ0OSw0OTQ1MCw0OTQ1MSw0OTQ1NCw0OTQ1OCw0OTQ1OSw0OTQ2MCw0OTQ2MSw0OTQ2Myw0OTQ2Niw0''@;'; put 'put ''OTQ2Nyw0OTQ2OSw0OTQ3MCw0OTQ3MSw0OTQ3Myw0OTQ3NCw0OTQ3NSw0OTQ3Niw0OTQ3Nyw0OTQ3OCw0OTQ3OSw0OTQ4Miw0OTQ4Niw0OTQ4Nyw0OTQ4OCw0OTQ4OSw0OTQ5MCw0OTQ5MSw0OTQ5NCw0OTQ5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTQ5Nyw0OTQ5OCw0OTQ5''@;'; put 'put ''OSw0OTUwMSw0OTUwMiw0OTUwMyw0OTUwNCw0OTUwNSw0OTUwNiw0OTUwNyw0OTUxMCw0OTUxNCw0OTUxNSw0OTUxNiw0OTUxNyw0OTUxOCw0OTUxOSw0OTUyMSw0OTUyMiw0OTUyMyw0OTUyNSw0OTUyNiw0OTUyNyw0OTUyOSw0OTUzMCw0OTUzMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCw0OTUzMiw0OTUzMyw0OTUzNCw0OTUzNSw0OTUzNiw0OTUzNyw0OTUzOCw0OTUzOSw0OTU0MCw0OTU0Miw0OTU0Myw0OTU0NCw0OTU0NSw0OTU0Niw0OTU0Nyw0OTU1MSw0OTU1Myw0OTU1NCw0OTU1NSw0OTU1Nyw0OTU1OSw0OTU2MCw0OTU2MSw0OTU2Miw0OTU2Myw0OTU2Niw0OTU2''@;'; put 'put ''OCw0OTU3MCw0OTU3MSw0OTU3Miw0OTU3NCw0OTU3NSw0OTU3OCw0OTU3OSw0OTU4MSw0OTU4Miw0OTU4Myw0OTU4NSw0OTU4Niw0OTU4Nyw0OTU4OCw0OTU4OSw0OTU5MCw0OTU5MSw0OTU5Miw0OTU5Myw0OTU5NCw0OTU5NSw0OTU5Niw0OTU5OCw0OTU5OSw0OTYwMCw0OTYwMSw0OTYwMiw0''@;'; put 'put ''OTYwMyw0OTYwNSw0OTYwNiw0OTYwNyw0OTYwOSw0OTYxMCw0OTYxMSw0OTYxMyw0OTYxNCw0OTYxNSw0OTYxNiw0OTYxNyw0OTYxOCw0OTYxOSw0OTYyMSw0OTYyMiw0OTYyNSw0OTYyNiw0OTYyNyw0OTYyOCw0OTYyOSw0OTYzMCw0OTYzMSw0OTYzMyw0OTYzNCw0OTYzNSw0OTYzNyw0OTYz''@;'; put 'put ''OCw0OTYzOSw0OTY0MSw0OTY0Miw0OTY0Myw0OTY0NCw0OTY0NSw0OTY0Niw0OTY0Nyw0OTY1MCw0OTY1Miw0OTY1Myw0OTY1NCw0OTY1NSw0OTY1Niw0OTY1Nyw0OTY1OCw0OTY1OSw0OTY2Miw0OTY2Myw0OTY2NSw0OTY2Niw0OTY2Nyw0OTY2OSw0OTY3MCw0OTY3MSw0OTY3Miw0OTY3Myw0''@;'; put 'put ''OTY3NCw0OTY3NSw0OTY3OCw0OTY4MCw0OTY4Miw0OTY4Myw0OTY4NCw0OTY4NSw0OTY4Niw0OTY4Nyw0OTY5MCw0OTY5MSw0OTY5Myw0OTY5NCw0OTY5Nyw0OTY5OCw0OTY5OSw0OTcwMCw0OTcwMSw0OTcwMiw0OTcwMyw0OTcwNiw0OTcwOCw0OTcxMCw0OTcxMiw0OTcxNSw0OTcxNyw0OTcx''@;'; put 'put ''OCw0OTcxOSw0OTcyMCw0OTcyMSw0OTcyMiw0OTcyMyw0OTcyNCw0OTcyNSw0OTcyNiw0OTcyNyw0OTcyOCw0OTcyOSw0OTczMCw0OTczMSw0OTczMiw0OTczMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTczNCw0OTczNSw0OTczNyw0OTczOCw0OTczOSw0OTc0MCw0OTc0MSw0''@;'; put 'put ''OTc0Miw0OTc0Myw0OTc0Niw0OTc0Nyw0OTc0OSw0OTc1MCw0OTc1MSw0OTc1Myw0OTc1NCw0OTc1NSw0OTc1Niw0OTc1Nyw0OTc1OCw0OTc1OSw0OTc2MSw0OTc2Miw0OTc2Myw0OTc2NCw0OTc2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTc2Nyw0OTc2OCw0OTc2OSw0OTc3''@;'; put 'put ''MCw0OTc3MSw0OTc3NCw0OTc3NSw0OTc3Nyw0OTc3OCw0OTc3OSw0OTc4MSw0OTc4Miw0OTc4Myw0OTc4NCw0OTc4NSw0OTc4Niw0OTc4Nyw0OTc5MCw0OTc5Miw0OTc5NCw0OTc5NSw0OTc5Niw0OTc5Nyw0OTc5OCw0OTc5OSw0OTgwMiw0OTgwMyw0OTgwNCw0OTgwNSw0OTgwNiw0OTgwNyw0''@;'; put 'put ''OTgwOSw0OTgxMCw0OTgxMSw0OTgxMiw0OTgxMyw0OTgxNCw0OTgxNSw0OTgxNyw0OTgxOCw0OTgyMCw0OTgyMiw0OTgyMyw0OTgyNCw0OTgyNSw0OTgyNiw0OTgyNyw0OTgzMCw0OTgzMSw0OTgzMyw0OTgzNCw0OTgzNSw0OTgzOCw0OTgzOSw0OTg0MCw0OTg0MSw0OTg0Miw0OTg0Myw0OTg0''@;'; put 'put ''Niw0OTg0OCw0OTg1MCw0OTg1MSw0OTg1Miw0OTg1Myw0OTg1NCw0OTg1NSw0OTg1Niw0OTg1Nyw0OTg1OCw0OTg1OSw0OTg2MCw0OTg2MSw0OTg2Miw0OTg2Myw0OTg2NCw0OTg2NSw0OTg2Niw0OTg2Nyw0OTg2OCw0OTg2OSw0OTg3MCw0OTg3MSw0OTg3Miw0OTg3Myw0OTg3NCw0OTg3NSw0''@;'; put 'put ''OTg3Niw0OTg3Nyw0OTg3OCw0OTg3OSw0OTg4MCw0OTg4MSw0OTg4Miw0OTg4Myw0OTg4Niw0OTg4Nyw0OTg4OSw0OTg5MCw0OTg5Myw0OTg5NCw0OTg5NSw0OTg5Niw0OTg5Nyw0OTg5OCw0OTkwMiw0OTkwNCw0OTkwNiw0OTkwNyw0OTkwOCw0OTkwOSw0OTkxMSw0OTkxNCw0OTkxNyw0OTkx''@;'; put 'put ''OCw0OTkxOSw0OTkyMSw0OTkyMiw0OTkyMyw0OTkyNCw0OTkyNSw0OTkyNiw0OTkyNyw0OTkzMCw0OTkzMSw0OTkzNCw0OTkzNSw0OTkzNiw0OTkzNyw0OTkzOCw0OTk0Miw0OTk0Myw0OTk0NSw0OTk0Niw0OTk0Nyw0OTk0OSw0OTk1MCw0OTk1MSw0OTk1Miw0OTk1Myw0OTk1NCw0OTk1NSw0''@;'; put 'put ''OTk1OCw0OTk1OSw0OTk2Miw0OTk2Myw0OTk2NCw0OTk2NSw0OTk2Niw0OTk2Nyw0OTk2OCw0OTk2OSw0OTk3MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTk3MSw0OTk3Miw0OTk3Myw0OTk3NCw0OTk3NSw0OTk3Niw0OTk3Nyw0OTk3OCw0OTk3OSw0OTk4MCw0OTk4MSw0OTk4''@;'; put 'put ''Miw0OTk4Myw0OTk4NCw0OTk4NSw0OTk4Niw0OTk4Nyw0OTk4OCw0OTk5MCw0OTk5MSw0OTk5Miw0OTk5Myw0OTk5NCw0OTk5NSw0OTk5Niw0OTk5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTk5OCw0OTk5OSw1ZTQsNTAwMDEsNTAwMDIsNTAwMDMsNTAwMDQsNTAwMDUsNTAw''@;'; put 'put ''MDYsNTAwMDcsNTAwMDgsNTAwMDksNTAwMTAsNTAwMTEsNTAwMTIsNTAwMTMsNTAwMTQsNTAwMTUsNTAwMTYsNTAwMTcsNTAwMTgsNTAwMTksNTAwMjAsNTAwMjEsNTAwMjIsNTAwMjMsNTAwMjYsNTAwMjcsNTAwMjksNTAwMzAsNTAwMzEsNTAwMzMsNTAwMzUsNTAwMzYsNTAwMzcsNTAwMzgs''@;'; put 'put ''NTAwMzksNTAwNDIsNTAwNDMsNTAwNDYsNTAwNDcsNTAwNDgsNTAwNDksNTAwNTAsNTAwNTEsNTAwNTMsNTAwNTQsNTAwNTUsNTAwNTcsNTAwNTgsNTAwNTksNTAwNjEsNTAwNjIsNTAwNjMsNTAwNjQsNTAwNjUsNTAwNjYsNTAwNjcsNTAwNjgsNTAwNjksNTAwNzAsNTAwNzEsNTAwNzIsNTAw''@;'; put 'put ''NzMsNTAwNzQsNTAwNzUsNTAwNzYsNTAwNzcsNTAwNzgsNTAwNzksNTAwODAsNTAwODEsNTAwODIsNTAwODMsNTAwODQsNTAwODUsNTAwODYsNTAwODcsNTAwODgsNTAwODksNTAwOTAsNTAwOTEsNTAwOTIsNTAwOTMsNTAwOTQsNTAwOTUsNTAwOTYsNTAwOTcsNTAwOTgsNTAwOTksNTAxMDAs''@;'; put 'put ''NTAxMDEsNTAxMDIsNTAxMDMsNTAxMDQsNTAxMDUsNTAxMDYsNTAxMDcsNTAxMDgsNTAxMDksNTAxMTAsNTAxMTEsNTAxMTMsNTAxMTQsNTAxMTUsNTAxMTYsNTAxMTcsNTAxMTgsNTAxMTksNTAxMjAsNTAxMjEsNTAxMjIsNTAxMjMsNTAxMjQsNTAxMjUsNTAxMjYsNTAxMjcsNTAxMjgsNTAx''@;'; put 'put ''MjksNTAxMzAsNTAxMzEsNTAxMzIsNTAxMzMsNTAxMzQsNTAxMzUsNTAxMzgsNTAxMzksNTAxNDEsNTAxNDIsNTAxNDUsNTAxNDcsNTAxNDgsNTAxNDksNTAxNTAsNTAxNTEsNTAxNTQsNTAxNTUsNTAxNTYsNTAxNTgsNTAxNTksNTAxNjAsNTAxNjEsNTAxNjIsNTAxNjMsNTAxNjYsNTAxNjcs''@;'; put 'put ''NTAxNjksNTAxNzAsNTAxNzEsNTAxNzIsNTAxNzMsNTAxNzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTAxNzUsNTAxNzYsNTAxNzcsNTAxNzgsNTAxNzksNTAxODAsNTAxODEsNTAxODIsNTAxODMsNTAxODUsNTAxODYsNTAxODcsNTAxODgsNTAxODksNTAxOTAsNTAxOTEsNTAx''@;'; put 'put ''OTMsNTAxOTQsNTAxOTUsNTAxOTYsNTAxOTcsNTAxOTgsNTAxOTksNTAyMDAsNTAyMDEsNTAyMDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTAyMDMsNTAyMDQsNTAyMDUsNTAyMDYsNTAyMDcsNTAyMDgsNTAyMDksNTAyMTAsNTAyMTEsNTAyMTMsNTAyMTQsNTAyMTUsNTAyMTYs''@;'; put 'put ''NTAyMTcsNTAyMTgsNTAyMTksNTAyMjEsNTAyMjIsNTAyMjMsNTAyMjUsNTAyMjYsNTAyMjcsNTAyMjksNTAyMzAsNTAyMzEsNTAyMzIsNTAyMzMsNTAyMzQsNTAyMzUsNTAyMzgsNTAyMzksNTAyNDAsNTAyNDEsNTAyNDIsNTAyNDMsNTAyNDQsNTAyNDUsNTAyNDYsNTAyNDcsNTAyNDksNTAy''@;'; put 'put ''NTAsNTAyNTEsNTAyNTIsNTAyNTMsNTAyNTQsNTAyNTUsNTAyNTYsNTAyNTcsNTAyNTgsNTAyNTksNTAyNjAsNTAyNjEsNTAyNjIsNTAyNjMsNTAyNjQsNTAyNjUsNTAyNjYsNTAyNjcsNTAyNjgsNTAyNjksNTAyNzAsNTAyNzEsNTAyNzIsNTAyNzMsNTAyNzQsNTAyNzUsNTAyNzgsNTAyNzks''@;'; put 'put ''NTAyODEsNTAyODIsNTAyODMsNTAyODUsNTAyODYsNTAyODcsNTAyODgsNTAyODksNTAyOTAsNTAyOTEsNTAyOTQsNTAyOTUsNTAyOTYsNTAyOTgsNTAyOTksNTAzMDAsNTAzMDEsNTAzMDIsNTAzMDMsNTAzMDUsNTAzMDYsNTAzMDcsNTAzMDgsNTAzMDksNTAzMTAsNTAzMTEsNTAzMTIsNTAz''@;'; put 'put ''MTMsNTAzMTQsNTAzMTUsNTAzMTYsNTAzMTcsNTAzMTgsNTAzMTksNTAzMjAsNTAzMjEsNTAzMjIsNTAzMjMsNTAzMjUsNTAzMjYsNTAzMjcsNTAzMjgsNTAzMjksNTAzMzAsNTAzMzEsNTAzMzMsNTAzMzQsNTAzMzUsNTAzMzYsNTAzMzcsNTAzMzgsNTAzMzksNTAzNDAsNTAzNDEsNTAzNDIs''@;'; put 'put ''NTAzNDMsNTAzNDQsNTAzNDUsNTAzNDYsNTAzNDcsNTAzNDgsNTAzNDksNTAzNTAsNTAzNTEsNTAzNTIsNTAzNTMsNTAzNTQsNTAzNTUsNTAzNTYsNTAzNTcsNTAzNTgsNTAzNTksNTAzNjEsNTAzNjIsNTAzNjMsNTAzNjUsNTAzNjYsNTAzNjcsNTAzNjgsNTAzNjksNTAzNzAsNTAzNzEsNTAz''@;'; put 'put ''NzIsNTAzNzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTAzNzQsNTAzNzUsNTAzNzYsNTAzNzcsNTAzNzgsNTAzNzksNTAzODAsNTAzODEsNTAzODIsNTAzODMsNTAzODQsNTAzODUsNTAzODYsNTAzODcsNTAzODgsNTAzODksNTAzOTAsNTAzOTEsNTAzOTIsNTAzOTMsNTAzOTQs''@;'; put 'put ''NTAzOTUsNTAzOTYsNTAzOTcsNTAzOTgsNTAzOTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA0MDAsNTA0MDEsNTA0MDIsNTA0MDMsNTA0MDQsNTA0MDUsNTA0MDYsNTA0MDcsNTA0MDgsNTA0MTAsNTA0MTEsNTA0MTIsNTA0MTMsNTA0MTQsNTA0MTUsNTA0MTgsNTA0MTksNTA0''@;'; put 'put ''MjEsNTA0MjIsNTA0MjMsNTA0MjUsNTA0MjcsNTA0MjgsNTA0MjksNTA0MzAsNTA0MzQsNTA0MzUsNTA0MzYsNTA0MzcsNTA0MzgsNTA0MzksNTA0NDAsNTA0NDEsNTA0NDIsNTA0NDMsNTA0NDUsNTA0NDYsNTA0NDcsNTA0NDksNTA0NTAsNTA0NTEsNTA0NTMsNTA0NTQsNTA0NTUsNTA0NTYs''@;'; put 'put ''NTA0NTcsNTA0NTgsNTA0NTksNTA0NjEsNTA0NjIsNTA0NjMsNTA0NjQsNTA0NjUsNTA0NjYsNTA0NjcsNTA0NjgsNTA0NjksNTA0NzAsNTA0NzEsNTA0NzQsNTA0NzUsNTA0NzcsNTA0NzgsNTA0NzksNTA0ODEsNTA0ODIsNTA0ODMsNTA0ODQsNTA0ODUsNTA0ODYsNTA0ODcsNTA0OTAsNTA0''@;'; put 'put ''OTIsNTA0OTQsNTA0OTUsNTA0OTYsNTA0OTcsNTA0OTgsNTA0OTksNTA1MDIsNTA1MDMsNTA1MDcsNTA1MTEsNTA1MTIsNTA1MTMsNTA1MTQsNTA1MTgsNTA1MjIsNTA1MjMsNTA1MjQsNTA1MjcsNTA1MzAsNTA1MzEsNTA1MzMsNTA1MzQsNTA1MzUsNTA1MzcsNTA1MzgsNTA1MzksNTA1NDAs''@;'; put 'put ''NTA1NDEsNTA1NDIsNTA1NDMsNTA1NDYsNTA1NTAsNTA1NTEsNTA1NTIsNTA1NTMsNTA1NTQsNTA1NTUsNTA1NTgsNTA1NTksNTA1NjEsNTA1NjIsNTA1NjMsNTA1NjUsNTA1NjYsNTA1NjgsNTA1NjksNTA1NzAsNTA1NzEsNTA1NzQsNTA1NzYsNTA1NzgsNTA1NzksNTA1ODAsNTA1ODIsNTA1''@;'; put 'put ''ODUsNTA1ODYsNTA1ODcsNTA1ODksNTA1OTAsNTA1OTEsNTA1OTMsNTA1OTQsNTA1OTUsNTA1OTYsNTA1OTcsNTA1OTgsNTA1OTksNTA2MDAsNTA2MDIsNTA2MDMsNTA2MDQsNTA2MDUsNTA2MDYsNTA2MDcsNTA2MDgsNTA2MDksNTA2MTAsNTA2MTEsNTA2MTQsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsNTA2MTUsNTA2MTgsNTA2MjMsNTA2MjQsNTA2MjUsNTA2MjYsNTA2MjcsNTA2MzUsNTA2MzcsNTA2MzksNTA2NDIsNTA2NDMsNTA2NDUsNTA2NDYsNTA2NDcsNTA2NDksNTA2NTAsNTA2NTEsNTA2NTIsNTA2NTMsNTA2NTQsNTA2NTUsNTA2NTgsNTA2NjAsNTA2NjIsNTA2''@;'; put 'put ''NjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA2NjQsNTA2NjUsNTA2NjYsNTA2NjcsNTA2NzEsNTA2NzMsNTA2NzQsNTA2NzUsNTA2NzcsNTA2ODAsNTA2ODEsNTA2ODIsNTA2ODMsNTA2OTAsNTA2OTEsNTA2OTIsNTA2OTcsNTA2OTgsNTA2OTksNTA3MDEsNTA3MDIsNTA3MDMs''@;'; put 'put ''NTA3MDUsNTA3MDYsNTA3MDcsNTA3MDgsNTA3MDksNTA3MTAsNTA3MTEsNTA3MTQsNTA3MTcsNTA3MTgsNTA3MTksNTA3MjAsNTA3MjEsNTA3MjIsNTA3MjMsNTA3MjYsNTA3MjcsNTA3MjksNTA3MzAsNTA3MzEsNTA3MzUsNTA3MzcsNTA3MzgsNTA3NDIsNTA3NDQsNTA3NDYsNTA3NDgsNTA3''@;'; put 'put ''NDksNTA3NTAsNTA3NTEsNTA3NTQsNTA3NTUsNTA3NTcsNTA3NTgsNTA3NTksNTA3NjEsNTA3NjIsNTA3NjMsNTA3NjQsNTA3NjUsNTA3NjYsNTA3NjcsNTA3NzAsNTA3NzQsNTA3NzUsNTA3NzYsNTA3NzcsNTA3NzgsNTA3NzksNTA3ODIsNTA3ODMsNTA3ODUsNTA3ODYsNTA3ODcsNTA3ODgs''@;'; put 'put ''NTA3ODksNTA3OTAsNTA3OTEsNTA3OTIsNTA3OTMsNTA3OTQsNTA3OTUsNTA3OTcsNTA3OTgsNTA4MDAsNTA4MDIsNTA4MDMsNTA4MDQsNTA4MDUsNTA4MDYsNTA4MDcsNTA4MTAsNTA4MTEsNTA4MTMsNTA4MTQsNTA4MTUsNTA4MTcsNTA4MTgsNTA4MTksNTA4MjAsNTA4MjEsNTA4MjIsNTA4''@;'; put 'put ''MjMsNTA4MjYsNTA4MjgsNTA4MzAsNTA4MzEsNTA4MzIsNTA4MzMsNTA4MzQsNTA4MzUsNTA4MzgsNTA4MzksNTA4NDEsNTA4NDIsNTA4NDMsNTA4NDUsNTA4NDYsNTA4NDcsNTA4NDgsNTA4NDksNTA4NTAsNTA4NTEsNTA4NTQsNTA4NTYsNTA4NTgsNTA4NTksNTA4NjAsNTA4NjEsNTA4NjIs''@;'; put 'put ''NTA4NjMsNTA4NjYsNTA4NjcsNTA4NjksNTA4NzAsNTA4NzEsNTA4NzUsNTA4NzYsNTA4NzcsNTA4NzgsNTA4NzksNTA4ODIsNTA4ODQsNTA4ODYsNTA4ODcsNTA4ODgsNTA4ODksNTA4OTAsNTA4OTEsNTA4OTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA4OTUsNTA4OTcsNTA4''@;'; put 'put ''OTgsNTA4OTksNTA5MDEsNTA5MDIsNTA5MDMsNTA5MDQsNTA5MDUsNTA5MDYsNTA5MDcsNTA5MTAsNTA5MTEsNTA5MTQsNTA5MTUsNTA5MTYsNTA5MTcsNTA5MTgsNTA5MTksNTA5MjIsNTA5MjMsNTA5MjUsNTA5MjYsNTA5MjcsNTA5MjksNTA5MzAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsNTA5MzEsNTA5MzIsNTA5MzMsNTA5MzQsNTA5MzUsNTA5MzgsNTA5MzksNTA5NDAsNTA5NDIsNTA5NDMsNTA5NDQsNTA5NDUsNTA5NDYsNTA5NDcsNTA5NTAsNTA5NTEsNTA5NTMsNTA5NTQsNTA5NTUsNTA5NTcsNTA5NTgsNTA5NTksNTA5NjAsNTA5NjEsNTA5NjIsNTA5NjMsNTA5''@;'; put 'put ''NjYsNTA5NjgsNTA5NzAsNTA5NzEsNTA5NzIsNTA5NzMsNTA5NzQsNTA5NzUsNTA5NzgsNTA5NzksNTA5ODEsNTA5ODIsNTA5ODMsNTA5ODUsNTA5ODYsNTA5ODcsNTA5ODgsNTA5ODksNTA5OTAsNTA5OTEsNTA5OTQsNTA5OTYsNTA5OTgsNTFlMyw1MTAwMSw1MTAwMiw1MTAwMyw1MTAwNiw1''@;'; put 'put ''MTAwNyw1MTAwOSw1MTAxMCw1MTAxMSw1MTAxMyw1MTAxNCw1MTAxNSw1MTAxNiw1MTAxNyw1MTAxOSw1MTAyMiw1MTAyNCw1MTAzMyw1MTAzNCw1MTAzNSw1MTAzNyw1MTAzOCw1MTAzOSw1MTA0MSw1MTA0Miw1MTA0Myw1MTA0NCw1MTA0NSw1MTA0Niw1MTA0Nyw1MTA0OSw1MTA1MCw1MTA1''@;'; put 'put ''Miw1MTA1Myw1MTA1NCw1MTA1NSw1MTA1Niw1MTA1Nyw1MTA1OCw1MTA1OSw1MTA2Miw1MTA2Myw1MTA2NSw1MTA2Niw1MTA2Nyw1MTA3MSw1MTA3Miw1MTA3Myw1MTA3NCw1MTA3OCw1MTA4Myw1MTA4NCw1MTA4NSw1MTA4Nyw1MTA5MCw1MTA5MSw1MTA5Myw1MTA5Nyw1MTA5OSw1MTEwMCw1''@;'; put 'put ''MTEwMSw1MTEwMiw1MTEwMyw1MTEwNiw1MTExMSw1MTExMiw1MTExMyw1MTExNCw1MTExNSw1MTExOCw1MTExOSw1MTEyMSw1MTEyMiw1MTEyMyw1MTEyNSw1MTEyNiw1MTEyNyw1MTEyOCw1MTEyOSw1MTEzMCw1MTEzMSw1MTEzNCw1MTEzOCw1MTEzOSw1MTE0MCw1MTE0MSw1MTE0Miw1MTE0''@;'; put 'put ''Myw1MTE0Niw1MTE0Nyw1MTE0OSw1MTE1MSw1MTE1Myw1MTE1NCw1MTE1NSw1MTE1Niw1MTE1Nyw1MTE1OCw1MTE1OSw1MTE2MSw1MTE2Miw1MTE2Myw1MTE2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTE2Niw1MTE2Nyw1MTE2OCw1MTE2OSw1MTE3MCw1MTE3MSw1MTE3Myw1''@;'; put 'put ''MTE3NCw1MTE3NSw1MTE3Nyw1MTE3OCw1MTE3OSw1MTE4MSw1MTE4Miw1MTE4Myw1MTE4NCw1MTE4NSw1MTE4Niw1MTE4Nyw1MTE4OCw1MTE4OSw1MTE5MCw1MTE5MSw1MTE5Miw1MTE5Myw1MTE5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTE5NSw1MTE5Niw1MTE5Nyw1MTE5''@;'; put 'put ''OCw1MTE5OSw1MTIwMiw1MTIwMyw1MTIwNSw1MTIwNiw1MTIwNyw1MTIwOSw1MTIxMSw1MTIxMiw1MTIxMyw1MTIxNCw1MTIxNSw1MTIxOCw1MTIyMCw1MTIyMyw1MTIyNCw1MTIyNSw1MTIyNiw1MTIyNyw1MTIzMCw1MTIzMSw1MTIzMyw1MTIzNCw1MTIzNSw1MTIzNyw1MTIzOCw1MTIzOSw1''@;'; put 'put ''MTI0MCw1MTI0MSw1MTI0Miw1MTI0Myw1MTI0Niw1MTI0OCw1MTI1MCw1MTI1MSw1MTI1Miw1MTI1Myw1MTI1NCw1MTI1NSw1MTI1Nyw1MTI1OCw1MTI1OSw1MTI2MSw1MTI2Miw1MTI2Myw1MTI2NSw1MTI2Niw1MTI2Nyw1MTI2OCw1MTI2OSw1MTI3MCw1MTI3MSw1MTI3NCw1MTI3NSw1MTI3''@;'; put 'put ''OCw1MTI3OSw1MTI4MCw1MTI4MSw1MTI4Miw1MTI4Myw1MTI4NSw1MTI4Niw1MTI4Nyw1MTI4OCw1MTI4OSw1MTI5MCw1MTI5MSw1MTI5Miw1MTI5Myw1MTI5NCw1MTI5NSw1MTI5Niw1MTI5Nyw1MTI5OCw1MTI5OSw1MTMwMCw1MTMwMSw1MTMwMiw1MTMwMyw1MTMwNCw1MTMwNSw1MTMwNiw1''@;'; put 'put ''MTMwNyw1MTMwOCw1MTMwOSw1MTMxMCw1MTMxMSw1MTMxNCw1MTMxNSw1MTMxNyw1MTMxOCw1MTMxOSw1MTMyMSw1MTMyMyw1MTMyNCw1MTMyNSw1MTMyNiw1MTMyNyw1MTMzMCw1MTMzMiw1MTMzNiw1MTMzNyw1MTMzOCw1MTM0Miw1MTM0Myw1MTM0NCw1MTM0NSw1MTM0Niw1MTM0Nyw1MTM0''@;'; put 'put ''OSw1MTM1MCw1MTM1MSw1MTM1Miw1MTM1Myw1MTM1NCw1MTM1NSw1MTM1Niw1MTM1OCw1MTM2MCw1MTM2Miw1MTM2Myw1MTM2NCw1MTM2NSw1MTM2Niw1MTM2Nyw1MTM2OSw1MTM3MCw1MTM3MSw1MTM3Miw1MTM3Myw1MTM3NCw1MTM3NSw1MTM3Niw1MTM3Nyw1MTM3OCw1MTM3OSw1MTM4MCw1''@;'; put 'put ''MTM4MSw1MTM4Miw1MTM4Myw1MTM4NCw1MTM4NSw1MTM4Niw1MTM4Nyw1MTM5MCw1MTM5MSw1MTM5Miw1MTM5MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTM5NCw1MTM5NSw1MTM5Nyw1MTM5OCw1MTM5OSw1MTQwMSw1MTQwMiw1MTQwMyw1MTQwNSw1MTQwNiw1MTQwNyw1MTQw''@;'; put 'put ''OCw1MTQwOSw1MTQxMCw1MTQxMSw1MTQxNCw1MTQxNiw1MTQxOCw1MTQxOSw1MTQyMCw1MTQyMSw1MTQyMiw1MTQyMyw1MTQyNiw1MTQyNyw1MTQyOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTQzMCw1MTQzMSw1MTQzMiw1MTQzMyw1MTQzNCw1MTQzNSw1MTQzNiw1MTQzNyw1''@;'; put 'put ''MTQzOCw1MTQzOSw1MTQ0MCw1MTQ0MSw1MTQ0Miw1MTQ0Myw1MTQ0NCw1MTQ0Niw1MTQ0Nyw1MTQ0OCw1MTQ0OSw1MTQ1MCw1MTQ1MSw1MTQ1NCw1MTQ1NSw1MTQ1Nyw1MTQ1OCw1MTQ1OSw1MTQ2Myw1MTQ2NCw1MTQ2NSw1MTQ2Niw1MTQ2Nyw1MTQ3MCwxMjI4OCwxMjI4OSwxMjI5MCwxODMs''@;'; put 'put ''ODIyOSw4MjMwLDE2OCwxMjI5MSwxNzMsODIxMyw4NzQxLDY1MzQwLDg3NjQsODIxNiw4MjE3LDgyMjAsODIyMSwxMjMwOCwxMjMwOSwxMjI5NiwxMjI5NywxMjI5OCwxMjI5OSwxMjMwMCwxMjMwMSwxMjMwMiwxMjMwMywxMjMwNCwxMjMwNSwxNzcsMjE1LDI0Nyw4ODAwLDg4MDQsODgwNSw4''@;'; put 'put ''NzM0LDg3NTYsMTc2LDgyNDIsODI0Myw4NDUxLDg0OTEsNjU1MDQsNjU1MDUsNjU1MDksOTc5NCw5NzkyLDg3MzYsODg2OSw4OTc4LDg3MDYsODcxMSw4ODAxLDg3ODYsMTY3LDgyNTEsOTczNCw5NzMzLDk2NzUsOTY3OSw5Njc4LDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY1MSw5NjUwLDk2NjEs''@;'; put 'put ''OTY2MCw4NTk0LDg1OTIsODU5Myw4NTk1LDg1OTYsMTIzMDcsODgxMCw4ODExLDg3MzAsODc2NSw4NzMzLDg3NTcsODc0Nyw4NzQ4LDg3MTIsODcxNSw4ODM4LDg4MzksODgzNCw4ODM1LDg3NDYsODc0NSw4NzQzLDg3NDQsNjU1MDYsNTE0NzIsNTE0NzQsNTE0NzUsNTE0NzYsNTE0NzcsNTE0''@;'; put 'put ''NzgsNTE0NzksNTE0ODEsNTE0ODIsNTE0ODMsNTE0ODQsNTE0ODUsNTE0ODYsNTE0ODcsNTE0ODgsNTE0ODksNTE0OTAsNTE0OTEsNTE0OTIsNTE0OTMsNTE0OTQsNTE0OTUsNTE0OTYsNTE0OTcsNTE0OTgsNTE0OTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE1MDEsNTE1MDIs''@;'; put 'put ''NTE1MDMsNTE1MDQsNTE1MDUsNTE1MDYsNTE1MDcsNTE1MDksNTE1MTAsNTE1MTEsNTE1MTIsNTE1MTMsNTE1MTQsNTE1MTUsNTE1MTYsNTE1MTcsNTE1MTgsNTE1MTksNTE1MjAsNTE1MjEsNTE1MjIsNTE1MjMsNTE1MjQsNTE1MjUsNTE1MjYsNTE1MjcsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsNTE1MjgsNTE1MjksNTE1MzAsNTE1MzEsNTE1MzIsNTE1MzMsNTE1MzQsNTE1MzUsNTE1MzgsNTE1MzksNTE1NDEsNTE1NDIsNTE1NDMsNTE1NDUsNTE1NDYsNTE1NDcsNTE1NDgsNTE1NDksNTE1NTAsNTE1NTEsNTE1NTQsNTE1NTYsNTE1NTcsNTE1NTgsNTE1NTksNTE1NjAs''@;'; put 'put ''NTE1NjEsNTE1NjIsNTE1NjMsNTE1NjUsNTE1NjYsNTE1NjcsODY1OCw4NjYwLDg3MDQsODcwNywxODAsNjUzNzQsNzExLDcyOCw3MzMsNzMwLDcyOSwxODQsNzMxLDE2MSwxOTEsNzIwLDg3NTAsODcyMSw4NzE5LDE2NCw4NDU3LDgyNDAsOTY2NSw5NjY0LDk2NTUsOTY1NCw5ODI4LDk4MjQs''@;'; put 'put ''OTgyNSw5ODI5LDk4MzEsOTgyNyw4ODU3LDk2NzIsOTYzNSw5NjgwLDk2ODEsOTYxOCw5NjM2LDk2MzcsOTY0MCw5NjM5LDk2MzgsOTY0MSw5ODMyLDk3NDMsOTc0Miw5NzU2LDk3NTgsMTgyLDgyMjQsODIyNSw4NTk3LDg1OTksODYwMSw4NTk4LDg2MDAsOTgzNyw5ODMzLDk4MzQsOTgzNiwx''@;'; put 'put ''MjkyNywxMjgyOCw4NDcwLDEzMjU1LDg0ODIsMTMyNTAsMTMyNzIsODQ4MSw4MzY0LDE3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsNTE1NjksNTE1NzAsNTE1NzEsNTE1NzMsNTE1NzQsNTE1NzUsNTE1NzYsNTE1NzcsNTE1NzgsNTE1NzksNTE1ODEsNTE1ODIsNTE1ODMsNTE1ODQsNTE1ODUsNTE1ODYsNTE1ODcsNTE1ODgsNTE1ODksNTE1OTAsNTE1OTEsNTE1OTQsNTE1OTUsNTE1OTcsNTE1OTgsNTE1OTksbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE2MDEsNTE2MDIsNTE2MDMsNTE2MDQsNTE2MDUsNTE2MDYsNTE2MDcsNTE2MTAsNTE2MTIsNTE2MTQsNTE2MTUsNTE2MTYsNTE2MTcsNTE2MTgsNTE2MTksNTE2MjAsNTE2MjEsNTE2MjIsNTE2MjMsNTE2MjQsNTE2MjUsNTE2MjYsNTE2MjcsNTE2''@;'; put 'put ''MjgsNTE2MjksNTE2MzAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE2MzEsNTE2MzIsNTE2MzMsNTE2MzQsNTE2MzUsNTE2MzYsNTE2MzcsNTE2MzgsNTE2MzksNTE2NDAsNTE2NDEsNTE2NDIsNTE2NDMsNTE2NDQsNTE2NDUsNTE2NDYsNTE2NDcsNTE2NTAsNTE2NTEsNTE2NTMs''@;'; put 'put ''NTE2NTQsNTE2NTcsNTE2NTksNTE2NjAsNTE2NjEsNTE2NjIsNTE2NjMsNTE2NjYsNTE2NjgsNTE2NzEsNTE2NzIsNTE2NzUsNjUyODEsNjUyODIsNjUyODMsNjUyODQsNjUyODUsNjUyODYsNjUyODcsNjUyODgsNjUyODksNjUyOTAsNjUyOTEsNjUyOTIsNjUyOTMsNjUyOTQsNjUyOTUsNjUy''@;'; put 'put ''OTYsNjUyOTcsNjUyOTgsNjUyOTksNjUzMDAsNjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsNjUzMDYsNjUzMDcsNjUzMDgsNjUzMDksNjUzMTAsNjUzMTEsNjUzMTIsNjUzMTMsNjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMs''@;'; put 'put ''NjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgsNjUzMzksNjU1MTAsNjUzNDEsNjUzNDIsNjUzNDMsNjUzNDQsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUz''@;'; put 'put ''NTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsNjUzNzEsNjUzNzIsNjUzNzMsNjU1MDcsNTE2NzgsNTE2NzksNTE2ODEsNTE2ODMs''@;'; put 'put ''NTE2ODUsNTE2ODYsNTE2ODgsNTE2ODksNTE2OTAsNTE2OTEsNTE2OTQsNTE2OTgsNTE2OTksNTE3MDAsNTE3MDEsNTE3MDIsNTE3MDMsNTE3MDYsNTE3MDcsNTE3MDksNTE3MTAsNTE3MTEsNTE3MTMsNTE3MTQsNTE3MTUsNTE3MTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE3''@;'; put 'put ''MTcsNTE3MTgsNTE3MTksNTE3MjIsNTE3MjYsNTE3MjcsNTE3MjgsNTE3MjksNTE3MzAsNTE3MzEsNTE3MzMsNTE3MzQsNTE3MzUsNTE3MzcsNTE3MzgsNTE3MzksNTE3NDAsNTE3NDEsNTE3NDIsNTE3NDMsNTE3NDQsNTE3NDUsNTE3NDYsNTE3NDcsNTE3NDgsNTE3NDksbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsNTE3NTAsNTE3NTEsNTE3NTIsNTE3NTQsNTE3NTUsNTE3NTYsNTE3NTcsNTE3NTgsNTE3NTksNTE3NjAsNTE3NjEsNTE3NjIsNTE3NjMsNTE3NjQsNTE3NjUsNTE3NjYsNTE3NjcsNTE3NjgsNTE3NjksNTE3NzAsNTE3NzEsNTE3NzIsNTE3NzMsNTE3NzQsNTE3''@;'; put 'put ''NzUsNTE3NzYsNTE3NzcsNTE3NzgsNTE3NzksNTE3ODAsNTE3ODEsNTE3ODIsMTI1OTMsMTI1OTQsMTI1OTUsMTI1OTYsMTI1OTcsMTI1OTgsMTI1OTksMTI2MDAsMTI2MDEsMTI2MDIsMTI2MDMsMTI2MDQsMTI2MDUsMTI2MDYsMTI2MDcsMTI2MDgsMTI2MDksMTI2MTAsMTI2MTEsMTI2MTIs''@;'; put 'put ''MTI2MTMsMTI2MTQsMTI2MTUsMTI2MTYsMTI2MTcsMTI2MTgsMTI2MTksMTI2MjAsMTI2MjEsMTI2MjIsMTI2MjMsMTI2MjQsMTI2MjUsMTI2MjYsMTI2MjcsMTI2MjgsMTI2MjksMTI2MzAsMTI2MzEsMTI2MzIsMTI2MzMsMTI2MzQsMTI2MzUsMTI2MzYsMTI2MzcsMTI2MzgsMTI2MzksMTI2''@;'; put 'put ''NDAsMTI2NDEsMTI2NDIsMTI2NDMsMTI2NDQsMTI2NDUsMTI2NDYsMTI2NDcsMTI2NDgsMTI2NDksMTI2NTAsMTI2NTEsMTI2NTIsMTI2NTMsMTI2NTQsMTI2NTUsMTI2NTYsMTI2NTcsMTI2NTgsMTI2NTksMTI2NjAsMTI2NjEsMTI2NjIsMTI2NjMsMTI2NjQsMTI2NjUsMTI2NjYsMTI2Njcs''@;'; put 'put ''MTI2NjgsMTI2NjksMTI2NzAsMTI2NzEsMTI2NzIsMTI2NzMsMTI2NzQsMTI2NzUsMTI2NzYsMTI2NzcsMTI2NzgsMTI2NzksMTI2ODAsMTI2ODEsMTI2ODIsMTI2ODMsMTI2ODQsMTI2ODUsMTI2ODYsNTE3ODMsNTE3ODQsNTE3ODUsNTE3ODYsNTE3ODcsNTE3OTAsNTE3OTEsNTE3OTMsNTE3''@;'; put 'put ''OTQsNTE3OTUsNTE3OTcsNTE3OTgsNTE3OTksNTE4MDAsNTE4MDEsNTE4MDIsNTE4MDMsNTE4MDYsNTE4MTAsNTE4MTEsNTE4MTIsNTE4MTMsNTE4MTQsNTE4MTUsNTE4MTcsNTE4MTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE4MTksNTE4MjAsNTE4MjEsNTE4MjIsNTE4MjMs''@;'; put 'put ''NTE4MjQsNTE4MjUsNTE4MjYsNTE4MjcsNTE4MjgsNTE4MjksNTE4MzAsNTE4MzEsNTE4MzIsNTE4MzMsNTE4MzQsNTE4MzUsNTE4MzYsNTE4MzgsNTE4MzksNTE4NDAsNTE4NDEsNTE4NDIsNTE4NDMsNTE4NDUsNTE4NDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE4NDcsNTE4''@;'; put 'put ''NDgsNTE4NDksNTE4NTAsNTE4NTEsNTE4NTIsNTE4NTMsNTE4NTQsNTE4NTUsNTE4NTYsNTE4NTcsNTE4NTgsNTE4NTksNTE4NjAsNTE4NjEsNTE4NjIsNTE4NjMsNTE4NjUsNTE4NjYsNTE4NjcsNTE4NjgsNTE4NjksNTE4NzAsNTE4NzEsNTE4NzIsNTE4NzMsNTE4NzQsNTE4NzUsNTE4NzYs''@;'; put 'put ''NTE4NzcsNTE4NzgsNTE4NzksODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1MyxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5NDUsOTQ2LDk0Nyw5NDgs''@;'; put 'put ''OTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTg4MCw1MTg4MSw1MTg4Miw1MTg4Myw1MTg4NCw1MTg4NSw1MTg4Niw1MTg4Nyw1MTg4OCw1''@;'; put 'put ''MTg4OSw1MTg5MCw1MTg5MSw1MTg5Miw1MTg5Myw1MTg5NCw1MTg5NSw1MTg5Niw1MTg5Nyw1MTg5OCw1MTg5OSw1MTkwMiw1MTkwMyw1MTkwNSw1MTkwNiw1MTkwNyw1MTkwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTkxMCw1MTkxMSw1MTkxMiw1MTkxMyw1MTkxNCw1MTkx''@;'; put 'put ''NSw1MTkxOCw1MTkyMCw1MTkyMiw1MTkyNCw1MTkyNSw1MTkyNiw1MTkyNyw1MTkzMCw1MTkzMSw1MTkzMiw1MTkzMyw1MTkzNCw1MTkzNSw1MTkzNyw1MTkzOCw1MTkzOSw1MTk0MCw1MTk0MSw1MTk0Miw1MTk0MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTk0NCw1MTk0NSw1''@;'; put 'put ''MTk0Niw1MTk0Nyw1MTk0OSw1MTk1MCw1MTk1MSw1MTk1Miw1MTk1Myw1MTk1NCw1MTk1NSw1MTk1Nyw1MTk1OCw1MTk1OSw1MTk2MCw1MTk2MSw1MTk2Miw1MTk2Myw1MTk2NCw1MTk2NSw1MTk2Niw1MTk2Nyw1MTk2OCw1MTk2OSw1MTk3MCw1MTk3MSw1MTk3Miw1MTk3Myw1MTk3NCw1MTk3''@;'; put 'put ''NSw1MTk3Nyw1MTk3OCw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTYsOTQ5Miw5NTAwLDk1MTYsOTUwOCw5NTI0LDk1MzIsOTQ3Myw5NDc1LDk0ODcsOTQ5MSw5NDk5LDk0OTUsOTUwNyw5NTIzLDk1MTUsOTUzMSw5NTQ3LDk1MDQsOTUxOSw5NTEyLDk1MjcsOTUzNSw5NTAxLDk1MjAsOTUwOSw5''@;'; put 'put ''NTI4LDk1MzgsOTQ5MCw5NDg5LDk0OTgsOTQ5Nyw5NDk0LDk0OTMsOTQ4Niw5NDg1LDk1MDIsOTUwMyw5NTA1LDk1MDYsOTUxMCw5NTExLDk1MTMsOTUxNCw5NTE3LDk1MTgsOTUyMSw5NTIyLDk1MjUsOTUyNiw5NTI5LDk1MzAsOTUzMyw5NTM0LDk1MzYsOTUzNyw5NTM5LDk1NDAsOTU0MSw5''@;'; put 'put ''NTQyLDk1NDMsOTU0NCw5NTQ1LDk1NDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxOTc5LDUxOTgw''@;'; put 'put ''LDUxOTgxLDUxOTgyLDUxOTgzLDUxOTg1LDUxOTg2LDUxOTg3LDUxOTg5LDUxOTkwLDUxOTkxLDUxOTkzLDUxOTk0LDUxOTk1LDUxOTk2LDUxOTk3LDUxOTk4LDUxOTk5LDUyMDAyLDUyMDAzLDUyMDA0LDUyMDA1LDUyMDA2LDUyMDA3LDUyMDA4LDUyMDA5LG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLDUyMDEwLDUyMDExLDUyMDEyLDUyMDEzLDUyMDE0LDUyMDE1LDUyMDE2LDUyMDE3LDUyMDE4LDUyMDE5LDUyMDIwLDUyMDIxLDUyMDIyLDUyMDIzLDUyMDI0LDUyMDI1LDUyMDI2LDUyMDI3LDUyMDI4LDUyMDI5LDUyMDMwLDUyMDMxLDUyMDMyLDUyMDM0LDUyMDM1LDUyMDM2''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMDM3LDUyMDM4LDUyMDM5LDUyMDQyLDUyMDQzLDUyMDQ1LDUyMDQ2LDUyMDQ3LDUyMDQ5LDUyMDUwLDUyMDUxLDUyMDUyLDUyMDUzLDUyMDU0LDUyMDU1LDUyMDU4LDUyMDU5LDUyMDYwLDUyMDYyLDUyMDYzLDUyMDY0LDUyMDY1LDUy''@;'; put 'put ''MDY2LDUyMDY3LDUyMDY5LDUyMDcwLDUyMDcxLDUyMDcyLDUyMDczLDUyMDc0LDUyMDc1LDUyMDc2LDEzMjA1LDEzMjA2LDEzMjA3LDg0NjcsMTMyMDgsMTMyNTIsMTMyMTksMTMyMjAsMTMyMjEsMTMyMjIsMTMyMDksMTMyMTAsMTMyMTEsMTMyMTIsMTMyMTMsMTMyMTQsMTMyMTUsMTMyMTYs''@;'; put 'put ''MTMyMTcsMTMyMTgsMTMyNTgsMTMxOTcsMTMxOTgsMTMxOTksMTMyNjMsMTMxOTIsMTMxOTMsMTMyNTYsMTMyMjMsMTMyMjQsMTMyMzIsMTMyMzMsMTMyMzQsMTMyMzUsMTMyMzYsMTMyMzcsMTMyMzgsMTMyMzksMTMyNDAsMTMyNDEsMTMxODQsMTMxODUsMTMxODYsMTMxODcsMTMxODgsMTMy''@;'; put 'put ''NDIsMTMyNDMsMTMyNDQsMTMyNDUsMTMyNDYsMTMyNDcsMTMyMDAsMTMyMDEsMTMyMDIsMTMyMDMsMTMyMDQsODQ4NiwxMzI0OCwxMzI0OSwxMzE5NCwxMzE5NSwxMzE5NiwxMzI3MCwxMzI1MywxMzIyOSwxMzIzMCwxMzIzMSwxMzI3NSwxMzIyNSwxMzIyNiwxMzIyNywxMzIyOCwxMzI3Nywx''@;'; put 'put ''MzI2NCwxMzI2NywxMzI1MSwxMzI1NywxMzI3NiwxMzI1NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjA3Nyw1MjA3OCw1MjA3OSw1MjA4MCw1MjA4MSw1MjA4Miw1MjA4Myw1MjA4NCw1MjA4NSw1''@;'; put 'put ''MjA4Niw1MjA4Nyw1MjA5MCw1MjA5MSw1MjA5Miw1MjA5Myw1MjA5NCw1MjA5NSw1MjA5Niw1MjA5Nyw1MjA5OCw1MjA5OSw1MjEwMCw1MjEwMSw1MjEwMiw1MjEwMyw1MjEwNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjEwNSw1MjEwNiw1MjEwNyw1MjEwOCw1MjEwOSw1MjEx''@;'; put 'put ''MCw1MjExMSw1MjExMiw1MjExMyw1MjExNCw1MjExNSw1MjExNiw1MjExNyw1MjExOCw1MjExOSw1MjEyMCw1MjEyMSw1MjEyMiw1MjEyMyw1MjEyNSw1MjEyNiw1MjEyNyw1MjEyOCw1MjEyOSw1MjEzMCw1MjEzMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjEzMiw1MjEzMyw1''@;'; put 'put ''MjEzNCw1MjEzNSw1MjEzNiw1MjEzNyw1MjEzOCw1MjEzOSw1MjE0MCw1MjE0MSw1MjE0Miw1MjE0Myw1MjE0NCw1MjE0NSw1MjE0Niw1MjE0Nyw1MjE0OCw1MjE0OSw1MjE1MCw1MjE1MSw1MjE1Myw1MjE1NCw1MjE1NSw1MjE1Niw1MjE1Nyw1MjE1OCw1MjE1OSw1MjE2MCw1MjE2MSw1MjE2''@;'; put 'put ''Miw1MjE2Myw1MjE2NCwxOTgsMjA4LDE3MCwyOTQsbnVsbCwzMDYsbnVsbCwzMTksMzIxLDIxNiwzMzgsMTg2LDIyMiwzNTgsMzMwLG51bGwsMTI4OTYsMTI4OTcsMTI4OTgsMTI4OTksMTI5MDAsMTI5MDEsMTI5MDIsMTI5MDMsMTI5MDQsMTI5MDUsMTI5MDYsMTI5MDcsMTI5MDgsMTI5MDks''@;'; put 'put ''MTI5MTAsMTI5MTEsMTI5MTIsMTI5MTMsMTI5MTQsMTI5MTUsMTI5MTYsMTI5MTcsMTI5MTgsMTI5MTksMTI5MjAsMTI5MjEsMTI5MjIsMTI5MjMsOTQyNCw5NDI1LDk0MjYsOTQyNyw5NDI4LDk0MjksOTQzMCw5NDMxLDk0MzIsOTQzMyw5NDM0LDk0MzUsOTQzNiw5NDM3LDk0MzgsOTQzOSw5''@;'; put 'put ''NDQwLDk0NDEsOTQ0Miw5NDQzLDk0NDQsOTQ0NSw5NDQ2LDk0NDcsOTQ0OCw5NDQ5LDkzMTIsOTMxMyw5MzE0LDkzMTUsOTMxNiw5MzE3LDkzMTgsOTMxOSw5MzIwLDkzMjEsOTMyMiw5MzIzLDkzMjQsOTMyNSw5MzI2LDE4OSw4NTMxLDg1MzIsMTg4LDE5MCw4NTM5LDg1NDAsODU0MSw4NTQy''@;'; put 'put ''LDUyMTY1LDUyMTY2LDUyMTY3LDUyMTY4LDUyMTY5LDUyMTcwLDUyMTcxLDUyMTcyLDUyMTczLDUyMTc0LDUyMTc1LDUyMTc2LDUyMTc3LDUyMTc4LDUyMTc5LDUyMTgxLDUyMTgyLDUyMTgzLDUyMTg0LDUyMTg1LDUyMTg2LDUyMTg3LDUyMTg4LDUyMTg5LDUyMTkwLDUyMTkxLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLDUyMTkyLDUyMTkzLDUyMTk0LDUyMTk1LDUyMTk3LDUyMTk4LDUyMjAwLDUyMjAyLDUyMjAzLDUyMjA0LDUyMjA1LDUyMjA2LDUyMjA3LDUyMjA4LDUyMjA5LDUyMjEwLDUyMjExLDUyMjEyLDUyMjEzLDUyMjE0LDUyMjE1LDUyMjE2LDUyMjE3LDUyMjE4''@;'; put 'put ''LDUyMjE5LDUyMjIwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMjIxLDUyMjIyLDUyMjIzLDUyMjI0LDUyMjI1LDUyMjI2LDUyMjI3LDUyMjI4LDUyMjI5LDUyMjMwLDUyMjMxLDUyMjMyLDUyMjMzLDUyMjM0LDUyMjM1LDUyMjM4LDUyMjM5LDUyMjQxLDUyMjQyLDUyMjQzLDUy''@;'; put 'put ''MjQ1LDUyMjQ2LDUyMjQ3LDUyMjQ4LDUyMjQ5LDUyMjUwLDUyMjUxLDUyMjU0LDUyMjU1LDUyMjU2LDUyMjU5LDUyMjYwLDIzMCwyNzMsMjQwLDI5NSwzMDUsMzA3LDMxMiwzMjAsMzIyLDI0OCwzMzksMjIzLDI1NCwzNTksMzMxLDMyOSwxMjgwMCwxMjgwMSwxMjgwMiwxMjgwMywxMjgwNCwx''@;'; put 'put ''MjgwNSwxMjgwNiwxMjgwNywxMjgwOCwxMjgwOSwxMjgxMCwxMjgxMSwxMjgxMiwxMjgxMywxMjgxNCwxMjgxNSwxMjgxNiwxMjgxNywxMjgxOCwxMjgxOSwxMjgyMCwxMjgyMSwxMjgyMiwxMjgyMywxMjgyNCwxMjgyNSwxMjgyNiwxMjgyNyw5MzcyLDkzNzMsOTM3NCw5Mzc1LDkzNzYsOTM3''@;'; put 'put ''Nyw5Mzc4LDkzNzksOTM4MCw5MzgxLDkzODIsOTM4Myw5Mzg0LDkzODUsOTM4Niw5Mzg3LDkzODgsOTM4OSw5MzkwLDkzOTEsOTM5Miw5MzkzLDkzOTQsOTM5NSw5Mzk2LDkzOTcsOTMzMiw5MzMzLDkzMzQsOTMzNSw5MzM2LDkzMzcsOTMzOCw5MzM5LDkzNDAsOTM0MSw5MzQyLDkzNDMsOTM0''@;'; put 'put ''NCw5MzQ1LDkzNDYsMTg1LDE3OCwxNzksODMwOCw4MzE5LDgzMjEsODMyMiw4MzIzLDgzMjQsNTIyNjEsNTIyNjIsNTIyNjYsNTIyNjcsNTIyNjksNTIyNzEsNTIyNzMsNTIyNzQsNTIyNzUsNTIyNzYsNTIyNzcsNTIyNzgsNTIyNzksNTIyODIsNTIyODcsNTIyODgsNTIyODksNTIyOTAsNTIy''@;'; put 'put ''OTEsNTIyOTQsNTIyOTUsNTIyOTcsNTIyOTgsNTIyOTksNTIzMDEsNTIzMDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIzMDMsNTIzMDQsNTIzMDUsNTIzMDYsNTIzMDcsNTIzMTAsNTIzMTQsNTIzMTUsNTIzMTYsNTIzMTcsNTIzMTgsNTIzMTksNTIzMjEsNTIzMjIsNTIzMjMs''@;'; put 'put ''NTIzMjUsNTIzMjcsNTIzMjksNTIzMzAsNTIzMzEsNTIzMzIsNTIzMzMsNTIzMzQsNTIzMzUsNTIzMzcsNTIzMzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIzMzksNTIzNDAsNTIzNDIsNTIzNDMsNTIzNDQsNTIzNDUsNTIzNDYsNTIzNDcsNTIzNDgsNTIzNDksNTIzNTAsNTIz''@;'; put 'put ''NTEsNTIzNTIsNTIzNTMsNTIzNTQsNTIzNTUsNTIzNTYsNTIzNTcsNTIzNTgsNTIzNTksNTIzNjAsNTIzNjEsNTIzNjIsNTIzNjMsNTIzNjQsNTIzNjUsNTIzNjYsNTIzNjcsNTIzNjgsNTIzNjksNTIzNzAsNTIzNzEsMTIzNTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcsMTIzNTgsMTIzNTks''@;'; put 'put ''MTIzNjAsMTIzNjEsMTIzNjIsMTIzNjMsMTIzNjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIzNzIsMTIzNzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIzNzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIzODUsMTIzODYsMTIz''@;'; put 'put ''ODcsMTIzODgsMTIzODksMTIzOTAsMTIzOTEsMTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTksMTI0MDAsMTI0MDEsMTI0MDIsMTI0MDMsMTI0MDQsMTI0MDUsMTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQs''@;'; put 'put ''MTI0MTUsMTI0MTYsMTI0MTcsMTI0MTgsMTI0MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0MjcsMTI0MjgsMTI0MjksMTI0MzAsMTI0MzEsMTI0MzIsMTI0MzMsMTI0MzQsMTI0MzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLDUyMzcyLDUyMzczLDUyMzc0LDUyMzc1LDUyMzc4LDUyMzc5LDUyMzgxLDUyMzgyLDUyMzgzLDUyMzg1LDUyMzg2LDUyMzg3LDUyMzg4LDUyMzg5LDUyMzkwLDUyMzkxLDUyMzk0LDUyMzk4LDUyMzk5LDUyNDAwLDUyNDAxLDUyNDAyLDUyNDAzLDUyNDA2LDUyNDA3''@;'; put 'put ''LDUyNDA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNDEwLDUyNDExLDUyNDEzLDUyNDE0LDUyNDE1LDUyNDE2LDUyNDE3LDUyNDE4LDUyNDE5LDUyNDIyLDUyNDI0LDUyNDI2LDUyNDI3LDUyNDI4LDUyNDI5LDUyNDMwLDUyNDMxLDUyNDMzLDUyNDM0LDUyNDM1LDUyNDM3LDUy''@;'; put 'put ''NDM4LDUyNDM5LDUyNDQwLDUyNDQxLDUyNDQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNDQzLDUyNDQ0LDUyNDQ1LDUyNDQ2LDUyNDQ3LDUyNDQ4LDUyNDQ5LDUyNDUwLDUyNDUxLDUyNDUzLDUyNDU0LDUyNDU1LDUyNDU2LDUyNDU3LDUyNDU4LDUyNDU5LDUyNDYxLDUyNDYy''@;'; put 'put ''LDUyNDYzLDUyNDY1LDUyNDY2LDUyNDY3LDUyNDY4LDUyNDY5LDUyNDcwLDUyNDcxLDUyNDcyLDUyNDczLDUyNDc0LDUyNDc1LDUyNDc2LDUyNDc3LDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEy''@;'; put 'put ''NDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5''@;'; put 'put ''LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEy''@;'; put 'put ''NTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEyNTM0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjQ3OCw1MjQ3OSw1MjQ4MCw1''@;'; put 'put ''MjQ4Miw1MjQ4Myw1MjQ4NCw1MjQ4NSw1MjQ4Niw1MjQ4Nyw1MjQ5MCw1MjQ5MSw1MjQ5Myw1MjQ5NCw1MjQ5NSw1MjQ5Nyw1MjQ5OCw1MjQ5OSw1MjUwMCw1MjUwMSw1MjUwMiw1MjUwMyw1MjUwNiw1MjUwOCw1MjUxMCw1MjUxMSw1MjUxMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCw1MjUxMyw1MjUxNCw1MjUxNSw1MjUxNyw1MjUxOCw1MjUxOSw1MjUyMSw1MjUyMiw1MjUyMyw1MjUyNSw1MjUyNiw1MjUyNyw1MjUyOCw1MjUyOSw1MjUzMCw1MjUzMSw1MjUzMiw1MjUzMyw1MjUzNCw1MjUzNSw1MjUzNiw1MjUzOCw1MjUzOSw1MjU0MCw1MjU0MSw1MjU0MixudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjU0Myw1MjU0NCw1MjU0NSw1MjU0Niw1MjU0Nyw1MjU0OCw1MjU0OSw1MjU1MCw1MjU1MSw1MjU1Miw1MjU1Myw1MjU1NCw1MjU1NSw1MjU1Niw1MjU1Nyw1MjU1OCw1MjU1OSw1MjU2MCw1MjU2MSw1MjU2Miw1MjU2Myw1MjU2NCw1MjU2NSw1MjU2''@;'; put 'put ''Niw1MjU2Nyw1MjU2OCw1MjU2OSw1MjU3MCw1MjU3MSw1MjU3Myw1MjU3NCw1MjU3NSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDI1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEs''@;'; put 'put ''MTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMTA1LDEwNzgs''@;'; put 'put ''MTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNTc3LDUyNTc4LDUyNTc5LDUyNTgxLDUyNTgyLDUyNTgzLDUyNTg0LDUyNTg1LDUyNTg2LDUyNTg3LDUyNTkwLDUyNTkyLDUyNTk0LDUyNTk1LDUyNTk2LDUyNTk3LDUyNTk4LDUyNTk5LDUyNjAxLDUyNjAyLDUyNjAzLDUyNjA0LDUyNjA1LDUy''@;'; put 'put ''NjA2LDUyNjA3LDUyNjA4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNjA5LDUyNjEwLDUyNjExLDUyNjEyLDUyNjEzLDUyNjE0LDUyNjE1LDUyNjE3LDUyNjE4LDUyNjE5LDUyNjIwLDUyNjIxLDUyNjIyLDUyNjIzLDUyNjI0LDUyNjI1LDUyNjI2LDUyNjI3LDUyNjMwLDUyNjMx''@;'; put 'put ''LDUyNjMzLDUyNjM0LDUyNjM1LDUyNjM3LDUyNjM4LDUyNjM5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNjQwLDUyNjQxLDUyNjQyLDUyNjQzLDUyNjQ2LDUyNjQ4LDUyNjUwLDUyNjUxLDUyNjUyLDUyNjUzLDUyNjU0LDUyNjU1LDUyNjU3LDUyNjU4LDUyNjU5LDUyNjYwLDUy''@;'; put 'put ''NjYxLDUyNjYyLDUyNjYzLDUyNjY0LDUyNjY1LDUyNjY2LDUyNjY3LDUyNjY4LDUyNjY5LDUyNjcwLDUyNjcxLDUyNjcyLDUyNjczLDUyNjc0LDUyNjc1LDUyNjc3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI2NzgsNTI2NzksNTI2ODAsNTI2ODEsNTI2ODIsNTI2ODMsNTI2ODUsNTI2ODYsNTI2ODcsNTI2ODksNTI2OTAsNTI2OTEsNTI2OTIsNTI2OTMsNTI2OTQsNTI2OTUs''@;'; put 'put ''NTI2OTYsNTI2OTcsNTI2OTgsNTI2OTksNTI3MDAsNTI3MDEsNTI3MDIsNTI3MDMsNTI3MDQsNTI3MDUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI3MDYsNTI3MDcsNTI3MDgsNTI3MDksNTI3MTAsNTI3MTEsNTI3MTMsNTI3MTQsNTI3MTUsNTI3MTcsNTI3MTgsNTI3MTksNTI3''@;'; put 'put ''MjEsNTI3MjIsNTI3MjMsNTI3MjQsNTI3MjUsNTI3MjYsNTI3MjcsNTI3MzAsNTI3MzIsNTI3MzQsNTI3MzUsNTI3MzYsNTI3MzcsNTI3MzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI3MzksNTI3NDEsNTI3NDIsNTI3NDMsNTI3NDUsNTI3NDYsNTI3NDcsNTI3NDksNTI3NTAs''@;'; put 'put ''NTI3NTEsNTI3NTIsNTI3NTMsNTI3NTQsNTI3NTUsNTI3NTcsNTI3NTgsNTI3NTksNTI3NjAsNTI3NjIsNTI3NjMsNTI3NjQsNTI3NjUsNTI3NjYsNTI3NjcsNTI3NzAsNTI3NzEsNTI3NzMsNTI3NzQsNTI3NzUsNTI3NzcsNTI3NzgsNTI3NzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mjc4MCw1Mjc4MSw1Mjc4Miw1Mjc4Myw1Mjc4Niw1Mjc4OCw1Mjc5MCw1Mjc5MSw1Mjc5''@;'; put 'put ''Miw1Mjc5Myw1Mjc5NCw1Mjc5NSw1Mjc5Niw1Mjc5Nyw1Mjc5OCw1Mjc5OSw1MjgwMCw1MjgwMSw1MjgwMiw1MjgwMyw1MjgwNCw1MjgwNSw1MjgwNiw1MjgwNyw1MjgwOCw1MjgwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjgxMCw1MjgxMSw1MjgxMiw1MjgxMyw1MjgxNCw1''@;'; put 'put ''MjgxNSw1MjgxNiw1MjgxNyw1MjgxOCw1MjgxOSw1MjgyMCw1MjgyMSw1MjgyMiw1MjgyMyw1MjgyNiw1MjgyNyw1MjgyOSw1MjgzMCw1MjgzNCw1MjgzNSw1MjgzNiw1MjgzNyw1MjgzOCw1MjgzOSw1Mjg0Miw1Mjg0NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mjg0Niw1Mjg0''@;'; put 'put ''Nyw1Mjg0OCw1Mjg0OSw1Mjg1MCw1Mjg1MSw1Mjg1NCw1Mjg1NSw1Mjg1Nyw1Mjg1OCw1Mjg1OSw1Mjg2MSw1Mjg2Miw1Mjg2Myw1Mjg2NCw1Mjg2NSw1Mjg2Niw1Mjg2Nyw1Mjg3MCw1Mjg3Miw1Mjg3NCw1Mjg3NSw1Mjg3Niw1Mjg3Nyw1Mjg3OCw1Mjg3OSw1Mjg4Miw1Mjg4Myw1Mjg4NSw1''@;'; put 'put ''Mjg4Niw1Mjg4Nyw1Mjg4OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyODkwLDUy''@;'; put 'put ''ODkxLDUyODkyLDUyODkzLDUyODk0LDUyODk1LDUyODk4LDUyOTAyLDUyOTAzLDUyOTA0LDUyOTA1LDUyOTA2LDUyOTA3LDUyOTEwLDUyOTExLDUyOTEyLDUyOTEzLDUyOTE0LDUyOTE1LDUyOTE2LDUyOTE3LDUyOTE4LDUyOTE5LDUyOTIwLDUyOTIxLDUyOTIyLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLDUyOTIzLDUyOTI0LDUyOTI1LDUyOTI2LDUyOTI3LDUyOTI4LDUyOTMwLDUyOTMxLDUyOTMyLDUyOTMzLDUyOTM0LDUyOTM1LDUyOTM2LDUyOTM3LDUyOTM4LDUyOTM5LDUyOTQwLDUyOTQxLDUyOTQyLDUyOTQzLDUyOTQ0LDUyOTQ1LDUyOTQ2LDUyOTQ3LDUyOTQ4LDUy''@;'; put 'put ''OTQ5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyOTUwLDUyOTUxLDUyOTUyLDUyOTUzLDUyOTU0LDUyOTU1LDUyOTU2LDUyOTU3LDUyOTU4LDUyOTU5LDUyOTYwLDUyOTYxLDUyOTYyLDUyOTYzLDUyOTY2LDUyOTY3LDUyOTY5LDUyOTcwLDUyOTczLDUyOTc0LDUyOTc1LDUyOTc2''@;'; put 'put ''LDUyOTc3LDUyOTc4LDUyOTc5LDUyOTgyLDUyOTg2LDUyOTg3LDUyOTg4LDUyOTg5LDUyOTkwLDUyOTkxLDQ0MDMyLDQ0MDMzLDQ0MDM2LDQ0MDM5LDQ0MDQwLDQ0MDQxLDQ0MDQyLDQ0MDQ4LDQ0MDQ5LDQ0MDUwLDQ0MDUxLDQ0MDUyLDQ0MDUzLDQ0MDU0LDQ0MDU1LDQ0MDU3LDQ0MDU4LDQ0''@;'; put 'put ''MDU5LDQ0MDYwLDQ0MDYxLDQ0MDY0LDQ0MDY4LDQ0MDc2LDQ0MDc3LDQ0MDc5LDQ0MDgwLDQ0MDgxLDQ0MDg4LDQ0MDg5LDQ0MDkyLDQ0MDk2LDQ0MTA3LDQ0MTA5LDQ0MTE2LDQ0MTIwLDQ0MTI0LDQ0MTQ0LDQ0MTQ1LDQ0MTQ4LDQ0MTUxLDQ0MTUyLDQ0MTU0LDQ0MTYwLDQ0MTYxLDQ0MTYz''@;'; put 'put ''LDQ0MTY0LDQ0MTY1LDQ0MTY2LDQ0MTY5LDQ0MTcwLDQ0MTcxLDQ0MTcyLDQ0MTc2LDQ0MTgwLDQ0MTg4LDQ0MTg5LDQ0MTkxLDQ0MTkyLDQ0MTkzLDQ0MjAwLDQ0MjAxLDQ0MjAyLDQ0MjA0LDQ0MjA3LDQ0MjA4LDQ0MjE2LDQ0MjE3LDQ0MjE5LDQ0MjIwLDQ0MjIxLDQ0MjI1LDQ0MjI4LDQ0''@;'; put 'put ''MjMyLDQ0MjM2LDQ0MjQ1LDQ0MjQ3LDQ0MjU2LDQ0MjU3LDQ0MjYwLDQ0MjYzLDQ0MjY0LDQ0MjY2LDQ0MjY4LDQ0MjcxLDQ0MjcyLDQ0MjczLDQ0Mjc1LDQ0Mjc3LDQ0Mjc4LDQ0Mjg0LDQ0Mjg1LDQ0Mjg4LDQ0MjkyLDQ0Mjk0LDUyOTk0LDUyOTk1LDUyOTk3LDUyOTk4LDUyOTk5LDUzMDAx''@;'; put 'put ''LDUzMDAyLDUzMDAzLDUzMDA0LDUzMDA1LDUzMDA2LDUzMDA3LDUzMDEwLDUzMDEyLDUzMDE0LDUzMDE1LDUzMDE2LDUzMDE3LDUzMDE4LDUzMDE5LDUzMDIxLDUzMDIyLDUzMDIzLDUzMDI1LDUzMDI2LDUzMDI3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMDI5LDUzMDMwLDUz''@;'; put 'put ''MDMxLDUzMDMyLDUzMDMzLDUzMDM0LDUzMDM1LDUzMDM4LDUzMDQyLDUzMDQzLDUzMDQ0LDUzMDQ1LDUzMDQ2LDUzMDQ3LDUzMDQ5LDUzMDUwLDUzMDUxLDUzMDUyLDUzMDUzLDUzMDU0LDUzMDU1LDUzMDU2LDUzMDU3LDUzMDU4LDUzMDU5LDUzMDYwLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLDUzMDYxLDUzMDYyLDUzMDYzLDUzMDY0LDUzMDY1LDUzMDY2LDUzMDY3LDUzMDY4LDUzMDY5LDUzMDcwLDUzMDcxLDUzMDcyLDUzMDczLDUzMDc0LDUzMDc1LDUzMDc4LDUzMDc5LDUzMDgxLDUzMDgyLDUzMDgzLDUzMDg1LDUzMDg2LDUzMDg3LDUzMDg4LDUzMDg5LDUzMDkwLDUz''@;'; put 'put ''MDkxLDUzMDk0LDUzMDk2LDUzMDk4LDUzMDk5LDUzMTAwLDQ0MzAwLDQ0MzAxLDQ0MzAzLDQ0MzA1LDQ0MzEyLDQ0MzE2LDQ0MzIwLDQ0MzI5LDQ0MzMyLDQ0MzMzLDQ0MzQwLDQ0MzQxLDQ0MzQ0LDQ0MzQ4LDQ0MzU2LDQ0MzU3LDQ0MzU5LDQ0MzYxLDQ0MzY4LDQ0MzcyLDQ0Mzc2LDQ0Mzg1''@;'; put 'put ''LDQ0Mzg3LDQ0Mzk2LDQ0Mzk3LDQ0NDAwLDQ0NDAzLDQ0NDA0LDQ0NDA1LDQ0NDA2LDQ0NDExLDQ0NDEyLDQ0NDEzLDQ0NDE1LDQ0NDE3LDQ0NDE4LDQ0NDI0LDQ0NDI1LDQ0NDI4LDQ0NDMyLDQ0NDQ0LDQ0NDQ1LDQ0NDUyLDQ0NDcxLDQ0NDgwLDQ0NDgxLDQ0NDg0LDQ0NDg4LDQ0NDk2LDQ0''@;'; put 'put ''NDk3LDQ0NDk5LDQ0NTA4LDQ0NTEyLDQ0NTE2LDQ0NTM2LDQ0NTM3LDQ0NTQwLDQ0NTQzLDQ0NTQ0LDQ0NTQ1LDQ0NTUyLDQ0NTUzLDQ0NTU1LDQ0NTU3LDQ0NTY0LDQ0NTkyLDQ0NTkzLDQ0NTk2LDQ0NTk5LDQ0NjAwLDQ0NjAyLDQ0NjA4LDQ0NjA5LDQ0NjExLDQ0NjEzLDQ0NjE0LDQ0NjE4''@;'; put 'put ''LDQ0NjIwLDQ0NjIxLDQ0NjIyLDQ0NjI0LDQ0NjI4LDQ0NjMwLDQ0NjM2LDQ0NjM3LDQ0NjM5LDQ0NjQwLDQ0NjQxLDQ0NjQ1LDQ0NjQ4LDQ0NjQ5LDQ0NjUyLDQ0NjU2LDQ0NjY0LDUzMTAxLDUzMTAyLDUzMTAzLDUzMTA2LDUzMTA3LDUzMTA5LDUzMTEwLDUzMTExLDUzMTEzLDUzMTE0LDUz''@;'; put 'put ''MTE1LDUzMTE2LDUzMTE3LDUzMTE4LDUzMTE5LDUzMTIxLDUzMTIyLDUzMTIzLDUzMTI0LDUzMTI2LDUzMTI3LDUzMTI4LDUzMTI5LDUzMTMwLDUzMTMxLDUzMTMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMTM0LDUzMTM1LDUzMTM2LDUzMTM3LDUzMTM4LDUzMTM5LDUzMTQw''@;'; put 'put ''LDUzMTQxLDUzMTQyLDUzMTQzLDUzMTQ0LDUzMTQ1LDUzMTQ2LDUzMTQ3LDUzMTQ4LDUzMTQ5LDUzMTUwLDUzMTUxLDUzMTUyLDUzMTU0LDUzMTU1LDUzMTU2LDUzMTU3LDUzMTU4LDUzMTU5LDUzMTYxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMTYyLDUzMTYzLDUzMTY0LDUz''@;'; put 'put ''MTY1LDUzMTY2LDUzMTY3LDUzMTY5LDUzMTcwLDUzMTcxLDUzMTcyLDUzMTczLDUzMTc0LDUzMTc1LDUzMTc2LDUzMTc3LDUzMTc4LDUzMTc5LDUzMTgwLDUzMTgxLDUzMTgyLDUzMTgzLDUzMTg0LDUzMTg1LDUzMTg2LDUzMTg3LDUzMTg5LDUzMTkwLDUzMTkxLDUzMTkyLDUzMTkzLDUzMTk0''@;'; put 'put ''LDUzMTk1LDQ0NjY1LDQ0NjY3LDQ0NjY4LDQ0NjY5LDQ0Njc2LDQ0Njc3LDQ0Njg0LDQ0NzMyLDQ0NzMzLDQ0NzM0LDQ0NzM2LDQ0NzQwLDQ0NzQ4LDQ0NzQ5LDQ0NzUxLDQ0NzUyLDQ0NzUzLDQ0NzYwLDQ0NzYxLDQ0NzY0LDQ0Nzc2LDQ0Nzc5LDQ0NzgxLDQ0Nzg4LDQ0NzkyLDQ0Nzk2LDQ0''@;'; put 'put ''ODA3LDQ0ODA4LDQ0ODEzLDQ0ODE2LDQ0ODQ0LDQ0ODQ1LDQ0ODQ4LDQ0ODUwLDQ0ODUyLDQ0ODYwLDQ0ODYxLDQ0ODYzLDQ0ODY1LDQ0ODY2LDQ0ODY3LDQ0ODcyLDQ0ODczLDQ0ODgwLDQ0ODkyLDQ0ODkzLDQ0OTAwLDQ0OTAxLDQ0OTIxLDQ0OTI4LDQ0OTMyLDQ0OTM2LDQ0OTQ0LDQ0OTQ1''@;'; put 'put ''LDQ0OTQ5LDQ0OTU2LDQ0OTg0LDQ0OTg1LDQ0OTg4LDQ0OTkyLDQ0OTk5LDQ1ZTMsNDUwMDEsNDUwMDMsNDUwMDUsNDUwMDYsNDUwMTIsNDUwMjAsNDUwMzIsNDUwMzMsNDUwNDAsNDUwNDEsNDUwNDQsNDUwNDgsNDUwNTYsNDUwNTcsNDUwNjAsNDUwNjgsNDUwNzIsNDUwNzYsNDUwODQsNDUw''@;'; put 'put ''ODUsNDUwOTYsNDUxMjQsNDUxMjUsNDUxMjgsNDUxMzAsNDUxMzIsNDUxMzQsNDUxMzksNDUxNDAsNDUxNDEsNDUxNDMsNDUxNDUsNTMxOTYsNTMxOTcsNTMxOTgsNTMxOTksNTMyMDAsNTMyMDEsNTMyMDIsNTMyMDMsNTMyMDQsNTMyMDUsNTMyMDYsNTMyMDcsNTMyMDgsNTMyMDksNTMyMTAs''@;'; put 'put ''NTMyMTEsNTMyMTIsNTMyMTMsNTMyMTQsNTMyMTUsNTMyMTgsNTMyMTksNTMyMjEsNTMyMjIsNTMyMjMsNTMyMjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMyMjYsNTMyMjcsNTMyMjgsNTMyMjksNTMyMzAsNTMyMzEsNTMyMzQsNTMyMzYsNTMyMzgsNTMyMzksNTMyNDAsNTMy''@;'; put 'put ''NDEsNTMyNDIsNTMyNDMsNTMyNDUsNTMyNDYsNTMyNDcsNTMyNDksNTMyNTAsNTMyNTEsNTMyNTMsNTMyNTQsNTMyNTUsNTMyNTYsNTMyNTcsNTMyNTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMyNTksNTMyNjAsNTMyNjEsNTMyNjIsNTMyNjMsNTMyNjQsNTMyNjYsNTMyNjcs''@;'; put 'put ''NTMyNjgsNTMyNjksNTMyNzAsNTMyNzEsNTMyNzMsNTMyNzQsNTMyNzUsNTMyNzYsNTMyNzcsNTMyNzgsNTMyNzksNTMyODAsNTMyODEsNTMyODIsNTMyODMsNTMyODQsNTMyODUsNTMyODYsNTMyODcsNTMyODgsNTMyODksNTMyOTAsNTMyOTEsNTMyOTIsNDUxNDksNDUxODAsNDUxODEsNDUx''@;'; put 'put ''ODQsNDUxODgsNDUxOTYsNDUxOTcsNDUxOTksNDUyMDEsNDUyMDgsNDUyMDksNDUyMTAsNDUyMTIsNDUyMTUsNDUyMTYsNDUyMTcsNDUyMTgsNDUyMjQsNDUyMjUsNDUyMjcsNDUyMjgsNDUyMjksNDUyMzAsNDUyMzEsNDUyMzMsNDUyMzUsNDUyMzYsNDUyMzcsNDUyNDAsNDUyNDQsNDUyNTIs''@;'; put 'put ''NDUyNTMsNDUyNTUsNDUyNTYsNDUyNTcsNDUyNjQsNDUyNjUsNDUyNjgsNDUyNzIsNDUyODAsNDUyODUsNDUzMjAsNDUzMjEsNDUzMjMsNDUzMjQsNDUzMjgsNDUzMzAsNDUzMzEsNDUzMzYsNDUzMzcsNDUzMzksNDUzNDAsNDUzNDEsNDUzNDcsNDUzNDgsNDUzNDksNDUzNTIsNDUzNTYsNDUz''@;'; put 'put ''NjQsNDUzNjUsNDUzNjcsNDUzNjgsNDUzNjksNDUzNzYsNDUzNzcsNDUzODAsNDUzODQsNDUzOTIsNDUzOTMsNDUzOTYsNDUzOTcsNDU0MDAsNDU0MDQsNDU0MDgsNDU0MzIsNDU0MzMsNDU0MzYsNDU0NDAsNDU0NDIsNDU0NDgsNDU0NDksNDU0NTEsNDU0NTMsNDU0NTgsNDU0NTksNDU0NjAs''@;'; put 'put ''NDU0NjQsNDU0NjgsNDU0ODAsNDU1MTYsNDU1MjAsNDU1MjQsNDU1MzIsNDU1MzMsNTMyOTQsNTMyOTUsNTMyOTYsNTMyOTcsNTMyOTgsNTMyOTksNTMzMDIsNTMzMDMsNTMzMDUsNTMzMDYsNTMzMDcsNTMzMDksNTMzMTAsNTMzMTEsNTMzMTIsNTMzMTMsNTMzMTQsNTMzMTUsNTMzMTgsNTMz''@;'; put 'put ''MjAsNTMzMjIsNTMzMjMsNTMzMjQsNTMzMjUsNTMzMjYsNTMzMjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMzMjksNTMzMzAsNTMzMzEsNTMzMzMsNTMzMzQsNTMzMzUsNTMzMzcsNTMzMzgsNTMzMzksNTMzNDAsNTMzNDEsNTMzNDIsNTMzNDMsNTMzNDUsNTMzNDYsNTMzNDcs''@;'; put 'put ''NTMzNDgsNTMzNDksNTMzNTAsNTMzNTEsNTMzNTIsNTMzNTMsNTMzNTQsNTMzNTUsNTMzNTgsNTMzNTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMzNjEsNTMzNjIsNTMzNjMsNTMzNjUsNTMzNjYsNTMzNjcsNTMzNjgsNTMzNjksNTMzNzAsNTMzNzEsNTMzNzQsNTMzNzUsNTMz''@;'; put 'put ''NzYsNTMzNzgsNTMzNzksNTMzODAsNTMzODEsNTMzODIsNTMzODMsNTMzODQsNTMzODUsNTMzODYsNTMzODcsNTMzODgsNTMzODksNTMzOTAsNTMzOTEsNTMzOTIsNTMzOTMsNTMzOTQsNTMzOTUsNTMzOTYsNDU1MzUsNDU1NDQsNDU1NDUsNDU1NDgsNDU1NTIsNDU1NjEsNDU1NjMsNDU1NjUs''@;'; put 'put ''NDU1NzIsNDU1NzMsNDU1NzYsNDU1NzksNDU1ODAsNDU1ODgsNDU1ODksNDU1OTEsNDU1OTMsNDU2MDAsNDU2MjAsNDU2MjgsNDU2NTYsNDU2NjAsNDU2NjQsNDU2NzIsNDU2NzMsNDU2ODQsNDU2ODUsNDU2OTIsNDU3MDAsNDU3MDEsNDU3MDUsNDU3MTIsNDU3MTMsNDU3MTYsNDU3MjAsNDU3''@;'; put 'put ''MjEsNDU3MjIsNDU3MjgsNDU3MjksNDU3MzEsNDU3MzMsNDU3MzQsNDU3MzgsNDU3NDAsNDU3NDQsNDU3NDgsNDU3NjgsNDU3NjksNDU3NzIsNDU3NzYsNDU3NzgsNDU3ODQsNDU3ODUsNDU3ODcsNDU3ODksNDU3OTQsNDU3OTYsNDU3OTcsNDU3OTgsNDU4MDAsNDU4MDMsNDU4MDQsNDU4MDUs''@;'; put 'put ''NDU4MDYsNDU4MDcsNDU4MTEsNDU4MTIsNDU4MTMsNDU4MTUsNDU4MTYsNDU4MTcsNDU4MTgsNDU4MTksNDU4MjMsNDU4MjQsNDU4MjUsNDU4MjgsNDU4MzIsNDU4NDAsNDU4NDEsNDU4NDMsNDU4NDQsNDU4NDUsNDU4NTIsNDU5MDgsNDU5MDksNDU5MTAsNDU5MTIsNDU5MTUsNDU5MTYsNDU5''@;'; put 'put ''MTgsNDU5MTksNDU5MjQsNDU5MjUsNTMzOTcsNTMzOTgsNTMzOTksNTM0MDAsNTM0MDEsNTM0MDIsNTM0MDMsNTM0MDQsNTM0MDUsNTM0MDYsNTM0MDcsNTM0MDgsNTM0MDksNTM0MTAsNTM0MTEsNTM0MTQsNTM0MTUsNTM0MTcsNTM0MTgsNTM0MTksNTM0MjEsNTM0MjIsNTM0MjMsNTM0MjQs''@;'; put 'put ''NTM0MjUsNTM0MjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM0MjcsNTM0MzAsNTM0MzIsNTM0MzQsNTM0MzUsNTM0MzYsNTM0MzcsNTM0MzgsNTM0MzksNTM0NDIsNTM0NDMsNTM0NDUsNTM0NDYsNTM0NDcsNTM0NTAsNTM0NTEsNTM0NTIsNTM0NTMsNTM0NTQsNTM0NTUsNTM0''@;'; put 'put ''NTgsNTM0NjIsNTM0NjMsNTM0NjQsNTM0NjUsNTM0NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM0NjcsNTM0NzAsNTM0NzEsNTM0NzMsNTM0NzQsNTM0NzUsNTM0NzcsNTM0NzgsNTM0NzksNTM0ODAsNTM0ODEsNTM0ODIsNTM0ODMsNTM0ODYsNTM0OTAsNTM0OTEsNTM0OTIs''@;'; put 'put ''NTM0OTMsNTM0OTQsNTM0OTUsNTM0OTcsNTM0OTgsNTM0OTksNTM1MDAsNTM1MDEsNTM1MDIsNTM1MDMsNTM1MDQsNTM1MDUsNTM1MDYsNTM1MDcsNTM1MDgsNDU5MjcsNDU5MjksNDU5MzEsNDU5MzQsNDU5MzYsNDU5MzcsNDU5NDAsNDU5NDQsNDU5NTIsNDU5NTMsNDU5NTUsNDU5NTYsNDU5''@;'; put 'put ''NTcsNDU5NjQsNDU5NjgsNDU5NzIsNDU5ODQsNDU5ODUsNDU5OTIsNDU5OTYsNDYwMjAsNDYwMjEsNDYwMjQsNDYwMjcsNDYwMjgsNDYwMzAsNDYwMzIsNDYwMzYsNDYwMzcsNDYwMzksNDYwNDEsNDYwNDMsNDYwNDUsNDYwNDgsNDYwNTIsNDYwNTYsNDYwNzYsNDYwOTYsNDYxMDQsNDYxMDgs''@;'; put 'put ''NDYxMTIsNDYxMjAsNDYxMjEsNDYxMjMsNDYxMzIsNDYxNjAsNDYxNjEsNDYxNjQsNDYxNjgsNDYxNzYsNDYxNzcsNDYxNzksNDYxODEsNDYxODgsNDYyMDgsNDYyMTYsNDYyMzcsNDYyNDQsNDYyNDgsNDYyNTIsNDYyNjEsNDYyNjMsNDYyNjUsNDYyNzIsNDYyNzYsNDYyODAsNDYyODgsNDYy''@;'; put 'put ''OTMsNDYzMDAsNDYzMDEsNDYzMDQsNDYzMDcsNDYzMDgsNDYzMTAsNDYzMTYsNDYzMTcsNDYzMTksNDYzMjEsNDYzMjgsNDYzNTYsNDYzNTcsNDYzNjAsNDYzNjMsNDYzNjQsNDYzNzIsNDYzNzMsNDYzNzUsNDYzNzYsNDYzNzcsNDYzNzgsNDYzODQsNDYzODUsNDYzODgsNDYzOTIsNTM1MDks''@;'; put 'put ''NTM1MTAsNTM1MTEsNTM1MTIsNTM1MTMsNTM1MTQsNTM1MTUsNTM1MTYsNTM1MTgsNTM1MTksNTM1MjAsNTM1MjEsNTM1MjIsNTM1MjMsNTM1MjQsNTM1MjUsNTM1MjYsNTM1MjcsNTM1MjgsNTM1MjksNTM1MzAsNTM1MzEsNTM1MzIsNTM1MzMsNTM1MzQsNTM1MzUsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsNTM1MzYsNTM1MzcsNTM1MzgsNTM1MzksNTM1NDAsNTM1NDEsNTM1NDIsNTM1NDMsNTM1NDQsNTM1NDUsNTM1NDYsNTM1NDcsNTM1NDgsNTM1NDksNTM1NTAsNTM1NTEsNTM1NTQsNTM1NTUsNTM1NTcsNTM1NTgsNTM1NTksNTM1NjEsNTM1NjMsNTM1NjQsNTM1NjUs''@;'; put 'put ''NTM1NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM1NjcsNTM1NzAsNTM1NzQsNTM1NzUsNTM1NzYsNTM1NzcsNTM1NzgsNTM1NzksNTM1ODIsNTM1ODMsNTM1ODUsNTM1ODYsNTM1ODcsNTM1ODksNTM1OTAsNTM1OTEsNTM1OTIsNTM1OTMsNTM1OTQsNTM1OTUsNTM1OTgsNTM2''@;'; put 'put ''MDAsNTM2MDIsNTM2MDMsNTM2MDQsNTM2MDUsNTM2MDYsNTM2MDcsNTM2MDksNTM2MTAsNTM2MTEsNTM2MTMsNDY0MDAsNDY0MDEsNDY0MDMsNDY0MDQsNDY0MDUsNDY0MTEsNDY0MTIsNDY0MTMsNDY0MTYsNDY0MjAsNDY0MjgsNDY0MjksNDY0MzEsNDY0MzIsNDY0MzMsNDY0OTYsNDY0OTcs''@;'; put 'put ''NDY1MDAsNDY1MDQsNDY1MDYsNDY1MDcsNDY1MTIsNDY1MTMsNDY1MTUsNDY1MTYsNDY1MTcsNDY1MjMsNDY1MjQsNDY1MjUsNDY1MjgsNDY1MzIsNDY1NDAsNDY1NDEsNDY1NDMsNDY1NDQsNDY1NDUsNDY1NTIsNDY1NzIsNDY2MDgsNDY2MDksNDY2MTIsNDY2MTYsNDY2MjksNDY2MzYsNDY2''@;'; put 'put ''NDQsNDY2NjQsNDY2OTIsNDY2OTYsNDY3NDgsNDY3NDksNDY3NTIsNDY3NTYsNDY3NjMsNDY3NjQsNDY3NjksNDY4MDQsNDY4MzIsNDY4MzYsNDY4NDAsNDY4NDgsNDY4NDksNDY4NTMsNDY4ODgsNDY4ODksNDY4OTIsNDY4OTUsNDY4OTYsNDY5MDQsNDY5MDUsNDY5MDcsNDY5MTYsNDY5MjAs''@;'; put 'put ''NDY5MjQsNDY5MzIsNDY5MzMsNDY5NDQsNDY5NDgsNDY5NTIsNDY5NjAsNDY5NjEsNDY5NjMsNDY5NjUsNDY5NzIsNDY5NzMsNDY5NzYsNDY5ODAsNDY5ODgsNDY5ODksNDY5OTEsNDY5OTIsNDY5OTMsNDY5OTQsNDY5OTgsNDY5OTksNTM2MTQsNTM2MTUsNTM2MTYsNTM2MTcsNTM2MTgsNTM2''@;'; put 'put ''MTksNTM2MjAsNTM2MjEsNTM2MjIsNTM2MjMsNTM2MjQsNTM2MjUsNTM2MjYsNTM2MjcsNTM2MjksNTM2MzAsNTM2MzEsNTM2MzIsNTM2MzMsNTM2MzQsNTM2MzUsNTM2MzcsNTM2MzgsNTM2MzksNTM2NDEsNTM2NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM2NDMsNTM2NDQs''@;'; put 'put ''NTM2NDUsNTM2NDYsNTM2NDcsNTM2NDgsNTM2NDksNTM2NTAsNTM2NTEsNTM2NTIsNTM2NTMsNTM2NTQsNTM2NTUsNTM2NTYsNTM2NTcsNTM2NTgsNTM2NTksNTM2NjAsNTM2NjEsNTM2NjIsNTM2NjMsNTM2NjYsNTM2NjcsNTM2NjksNTM2NzAsNTM2NzEsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsNTM2NzMsNTM2NzQsNTM2NzUsNTM2NzYsNTM2NzcsNTM2NzgsNTM2NzksNTM2ODIsNTM2ODQsNTM2ODYsNTM2ODcsNTM2ODgsNTM2ODksNTM2OTEsNTM2OTMsNTM2OTQsNTM2OTUsNTM2OTcsNTM2OTgsNTM2OTksNTM3MDAsNTM3MDEsNTM3MDIsNTM3MDMsNTM3MDQsNTM3MDUs''@;'; put 'put ''NTM3MDYsNTM3MDcsNTM3MDgsNTM3MDksNTM3MTAsNTM3MTEsNDdlMyw0NzAwMSw0NzAwNCw0NzAwOCw0NzAxNiw0NzAxNyw0NzAxOSw0NzAyMCw0NzAyMSw0NzAyOCw0NzAyOSw0NzAzMiw0NzA0Nyw0NzA0OSw0NzA4NCw0NzA4NSw0NzA4OCw0NzA5Miw0NzEwMCw0NzEwMSw0NzEwMyw0NzEw''@;'; put 'put ''NCw0NzEwNSw0NzExMSw0NzExMiw0NzExMyw0NzExNiw0NzEyMCw0NzEyOCw0NzEyOSw0NzEzMSw0NzEzMyw0NzE0MCw0NzE0MSw0NzE0NCw0NzE0OCw0NzE1Niw0NzE1Nyw0NzE1OSw0NzE2MCw0NzE2MSw0NzE2OCw0NzE3Miw0NzE4NSw0NzE4Nyw0NzE5Niw0NzE5Nyw0NzIwMCw0NzIwNCw0''@;'; put 'put ''NzIxMiw0NzIxMyw0NzIxNSw0NzIxNyw0NzIyNCw0NzIyOCw0NzI0NSw0NzI3Miw0NzI4MCw0NzI4NCw0NzI4OCw0NzI5Niw0NzI5Nyw0NzI5OSw0NzMwMSw0NzMwOCw0NzMxMiw0NzMxNiw0NzMyNSw0NzMyNyw0NzMyOSw0NzMzNiw0NzMzNyw0NzM0MCw0NzM0NCw0NzM1Miw0NzM1Myw0NzM1''@;'; put 'put ''NSw0NzM1Nyw0NzM2NCw0NzM4NCw0NzM5Miw0NzQyMCw0NzQyMSw0NzQyNCw0NzQyOCw0NzQzNiw0NzQzOSw0NzQ0MSw0NzQ0OCw0NzQ0OSw0NzQ1Miw0NzQ1Niw0NzQ2NCw0NzQ2NSw1MzcxMiw1MzcxMyw1MzcxNCw1MzcxNSw1MzcxNiw1MzcxNyw1MzcxOCw1MzcxOSw1MzcyMSw1MzcyMiw1''@;'; put 'put ''MzcyMyw1MzcyNCw1MzcyNSw1MzcyNiw1MzcyNyw1MzcyOCw1MzcyOSw1MzczMCw1MzczMSw1MzczMiw1MzczMyw1MzczNCw1MzczNSw1MzczNiw1MzczNyw1MzczOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzczOSw1Mzc0MCw1Mzc0MSw1Mzc0Miw1Mzc0Myw1Mzc0NCw1Mzc0''@;'; put 'put ''NSw1Mzc0Niw1Mzc0Nyw1Mzc0OSw1Mzc1MCw1Mzc1MSw1Mzc1Myw1Mzc1NCw1Mzc1NSw1Mzc1Niw1Mzc1Nyw1Mzc1OCw1Mzc1OSw1Mzc2MCw1Mzc2MSw1Mzc2Miw1Mzc2Myw1Mzc2NCw1Mzc2NSw1Mzc2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzc2OCw1Mzc3MCw1Mzc3MSw1''@;'; put 'put ''Mzc3Miw1Mzc3Myw1Mzc3NCw1Mzc3NSw1Mzc3Nyw1Mzc3OCw1Mzc3OSw1Mzc4MCw1Mzc4MSw1Mzc4Miw1Mzc4Myw1Mzc4NCw1Mzc4NSw1Mzc4Niw1Mzc4Nyw1Mzc4OCw1Mzc4OSw1Mzc5MCw1Mzc5MSw1Mzc5Miw1Mzc5Myw1Mzc5NCw1Mzc5NSw1Mzc5Niw1Mzc5Nyw1Mzc5OCw1Mzc5OSw1Mzgw''@;'; put 'put ''MCw1MzgwMSw0NzQ2Nyw0NzQ2OSw0NzQ3Niw0NzQ3Nyw0NzQ4MCw0NzQ4NCw0NzQ5Miw0NzQ5Myw0NzQ5NSw0NzQ5Nyw0NzQ5OCw0NzUwMSw0NzUwMiw0NzUzMiw0NzUzMyw0NzUzNiw0NzU0MCw0NzU0OCw0NzU0OSw0NzU1MSw0NzU1Myw0NzU2MCw0NzU2MSw0NzU2NCw0NzU2Niw0NzU2Nyw0''@;'; put 'put ''NzU2OCw0NzU2OSw0NzU3MCw0NzU3Niw0NzU3Nyw0NzU3OSw0NzU4MSw0NzU4Miw0NzU4NSw0NzU4Nyw0NzU4OCw0NzU4OSw0NzU5Miw0NzU5Niw0NzYwNCw0NzYwNSw0NzYwNyw0NzYwOCw0NzYwOSw0NzYxMCw0NzYxNiw0NzYxNyw0NzYyNCw0NzYzNyw0NzY3Miw0NzY3Myw0NzY3Niw0NzY4''@;'; put 'put ''MCw0NzY4Miw0NzY4OCw0NzY4OSw0NzY5MSw0NzY5Myw0NzY5NCw0NzY5OSw0NzcwMCw0NzcwMSw0NzcwNCw0NzcwOCw0NzcxNiw0NzcxNyw0NzcxOSw0NzcyMCw0NzcyMSw0NzcyOCw0NzcyOSw0NzczMiw0NzczNiw0Nzc0Nyw0Nzc0OCw0Nzc0OSw0Nzc1MSw0Nzc1Niw0Nzc4NCw0Nzc4NSw0''@;'; put 'put ''Nzc4Nyw0Nzc4OCw0Nzc5Miw0Nzc5NCw0NzgwMCw0NzgwMSw0NzgwMyw0NzgwNSw0NzgxMiw0NzgxNiw0NzgzMiw0NzgzMyw0Nzg2OCw1MzgwMiw1MzgwMyw1MzgwNiw1MzgwNyw1MzgwOSw1MzgxMCw1MzgxMSw1MzgxMyw1MzgxNCw1MzgxNSw1MzgxNiw1MzgxNyw1MzgxOCw1MzgxOSw1Mzgy''@;'; put 'put ''Miw1MzgyNCw1MzgyNiw1MzgyNyw1MzgyOCw1MzgyOSw1MzgzMCw1MzgzMSw1MzgzMyw1MzgzNCw1MzgzNSw1MzgzNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzgzNyw1MzgzOCw1MzgzOSw1Mzg0MCw1Mzg0MSw1Mzg0Miw1Mzg0Myw1Mzg0NCw1Mzg0NSw1Mzg0Niw1Mzg0Nyw1''@;'; put 'put ''Mzg0OCw1Mzg0OSw1Mzg1MCw1Mzg1MSw1Mzg1Myw1Mzg1NCw1Mzg1NSw1Mzg1Niw1Mzg1Nyw1Mzg1OCw1Mzg1OSw1Mzg2MSw1Mzg2Miw1Mzg2Myw1Mzg2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzg2NSw1Mzg2Niw1Mzg2Nyw1Mzg2OCw1Mzg2OSw1Mzg3MCw1Mzg3MSw1Mzg3''@;'; put 'put ''Miw1Mzg3Myw1Mzg3NCw1Mzg3NSw1Mzg3Niw1Mzg3Nyw1Mzg3OCw1Mzg3OSw1Mzg4MCw1Mzg4MSw1Mzg4Miw1Mzg4Myw1Mzg4NCw1Mzg4NSw1Mzg4Niw1Mzg4Nyw1Mzg5MCw1Mzg5MSw1Mzg5Myw1Mzg5NCw1Mzg5NSw1Mzg5Nyw1Mzg5OCw1Mzg5OSw1MzkwMCw0Nzg3Miw0Nzg3Niw0Nzg4NSw0''@;'; put 'put ''Nzg4Nyw0Nzg4OSw0Nzg5Niw0NzkwMCw0NzkwNCw0NzkxMyw0NzkxNSw0NzkyNCw0NzkyNSw0NzkyNiw0NzkyOCw0NzkzMSw0NzkzMiw0NzkzMyw0NzkzNCw0Nzk0MCw0Nzk0MSw0Nzk0Myw0Nzk0NSw0Nzk0OSw0Nzk1MSw0Nzk1Miw0Nzk1Niw0Nzk2MCw0Nzk2OSw0Nzk3MSw0Nzk4MCw0ODAw''@;'; put 'put ''OCw0ODAxMiw0ODAxNiw0ODAzNiw0ODA0MCw0ODA0NCw0ODA1Miw0ODA1NSw0ODA2NCw0ODA2OCw0ODA3Miw0ODA4MCw0ODA4Myw0ODEyMCw0ODEyMSw0ODEyNCw0ODEyNyw0ODEyOCw0ODEzMCw0ODEzNiw0ODEzNyw0ODEzOSw0ODE0MCw0ODE0MSw0ODE0Myw0ODE0NSw0ODE0OCw0ODE0OSw0''@;'; put 'put ''ODE1MCw0ODE1MSw0ODE1Miw0ODE1NSw0ODE1Niw0ODE1Nyw0ODE1OCw0ODE1OSw0ODE2NCw0ODE2NSw0ODE2Nyw0ODE2OSw0ODE3Myw0ODE3Niw0ODE3Nyw0ODE4MCw0ODE4NCw0ODE5Miw0ODE5Myw0ODE5NSw0ODE5Niw0ODE5Nyw0ODIwMSw0ODIwNCw0ODIwNSw0ODIwOCw0ODIyMSw0ODI2''@;'; put 'put ''MCw0ODI2MSw0ODI2NCw0ODI2Nyw0ODI2OCw0ODI3MCw0ODI3Niw0ODI3Nyw0ODI3OSw1MzkwMSw1MzkwMiw1MzkwMyw1MzkwNiw1MzkwNyw1MzkwOCw1MzkxMCw1MzkxMSw1MzkxMiw1MzkxMyw1MzkxNCw1MzkxNSw1MzkxNyw1MzkxOCw1MzkxOSw1MzkyMSw1MzkyMiw1MzkyMyw1MzkyNSw1''@;'; put 'put ''MzkyNiw1MzkyNyw1MzkyOCw1MzkyOSw1MzkzMCw1MzkzMSw1MzkzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzkzNCw1MzkzNSw1MzkzNiw1MzkzOCw1MzkzOSw1Mzk0MCw1Mzk0MSw1Mzk0Miw1Mzk0Myw1Mzk0Niw1Mzk0Nyw1Mzk0OSw1Mzk1MCw1Mzk1Myw1Mzk1NSw1Mzk1''@;'; put 'put ''Niw1Mzk1Nyw1Mzk1OCw1Mzk1OSw1Mzk2Miw1Mzk2NCw1Mzk2NSw1Mzk2Niw1Mzk2Nyw1Mzk2OCw1Mzk2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzk3MCw1Mzk3MSw1Mzk3Myw1Mzk3NCw1Mzk3NSw1Mzk3Nyw1Mzk3OCw1Mzk3OSw1Mzk4MSw1Mzk4Miw1Mzk4Myw1Mzk4NCw1''@;'; put 'put ''Mzk4NSw1Mzk4Niw1Mzk4Nyw1Mzk5MCw1Mzk5MSw1Mzk5Miw1Mzk5Myw1Mzk5NCw1Mzk5NSw1Mzk5Niw1Mzk5Nyw1Mzk5OCw1Mzk5OSw1NDAwMiw1NDAwMyw1NDAwNSw1NDAwNiw1NDAwNyw1NDAwOSw1NDAxMCw0ODI4MSw0ODI4Miw0ODI4OCw0ODI4OSw0ODI5Miw0ODI5NSw0ODI5Niw0ODMw''@;'; put 'put ''NCw0ODMwNSw0ODMwNyw0ODMwOCw0ODMwOSw0ODMxNiw0ODMxNyw0ODMyMCw0ODMyNCw0ODMzMyw0ODMzNSw0ODMzNiw0ODMzNyw0ODM0MSw0ODM0NCw0ODM0OCw0ODM3Miw0ODM3Myw0ODM3NCw0ODM3Niw0ODM4MCw0ODM4OCw0ODM4OSw0ODM5MSw0ODM5Myw0ODQwMCw0ODQwNCw0ODQyMCw0''@;'; put 'put ''ODQyOCw0ODQ0OCw0ODQ1Niw0ODQ1Nyw0ODQ2MCw0ODQ2NCw0ODQ3Miw0ODQ3Myw0ODQ4NCw0ODQ4OCw0ODUxMiw0ODUxMyw0ODUxNiw0ODUxOSw0ODUyMCw0ODUyMSw0ODUyMiw0ODUyOCw0ODUyOSw0ODUzMSw0ODUzMyw0ODUzNyw0ODUzOCw0ODU0MCw0ODU0OCw0ODU2MCw0ODU2OCw0ODU5''@;'; put 'put ''Niw0ODU5Nyw0ODYwMCw0ODYwNCw0ODYxNyw0ODYyNCw0ODYyOCw0ODYzMiw0ODY0MCw0ODY0Myw0ODY0NSw0ODY1Miw0ODY1Myw0ODY1Niw0ODY2MCw0ODY2OCw0ODY2OSw0ODY3MSw0ODcwOCw0ODcwOSw0ODcxMiw0ODcxNiw0ODcxOCw0ODcyNCw0ODcyNSw0ODcyNyw0ODcyOSw0ODczMCw0''@;'; put 'put ''ODczMSw0ODczNiw0ODczNyw0ODc0MCw1NDAxMSw1NDAxMiw1NDAxMyw1NDAxNCw1NDAxNSw1NDAxOCw1NDAyMCw1NDAyMiw1NDAyMyw1NDAyNCw1NDAyNSw1NDAyNiw1NDAyNyw1NDAzMSw1NDAzMyw1NDAzNCw1NDAzNSw1NDAzNyw1NDAzOSw1NDA0MCw1NDA0MSw1NDA0Miw1NDA0Myw1NDA0''@;'; put 'put ''Niw1NDA1MCw1NDA1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDA1Miw1NDA1NCw1NDA1NSw1NDA1OCw1NDA1OSw1NDA2MSw1NDA2Miw1NDA2Myw1NDA2NSw1NDA2Niw1NDA2Nyw1NDA2OCw1NDA2OSw1NDA3MCw1NDA3MSw1NDA3NCw1NDA3OCw1NDA3OSw1NDA4MCw1NDA4MSw1''@;'; put 'put ''NDA4Miw1NDA4Myw1NDA4Niw1NDA4Nyw1NDA4OCw1NDA4OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDA5MCw1NDA5MSw1NDA5Miw1NDA5Myw1NDA5NCw1NDA5NSw1NDA5Niw1NDA5Nyw1NDA5OCw1NDA5OSw1NDEwMCw1NDEwMSw1NDEwMiw1NDEwMyw1NDEwNCw1NDEwNSw1NDEw''@;'; put 'put ''Niw1NDEwNyw1NDEwOCw1NDEwOSw1NDExMCw1NDExMSw1NDExMiw1NDExMyw1NDExNCw1NDExNSw1NDExNiw1NDExNyw1NDExOCw1NDExOSw1NDEyMCw1NDEyMSw0ODc0NCw0ODc0Niw0ODc1Miw0ODc1Myw0ODc1NSw0ODc1Niw0ODc1Nyw0ODc2Myw0ODc2NCw0ODc2NSw0ODc2OCw0ODc3Miw0''@;'; put 'put ''ODc4MCw0ODc4MSw0ODc4Myw0ODc4NCw0ODc4NSw0ODc5Miw0ODc5Myw0ODgwOCw0ODg0OCw0ODg0OSw0ODg1Miw0ODg1NSw0ODg1Niw0ODg2NCw0ODg2Nyw0ODg2OCw0ODg2OSw0ODg3Niw0ODg5Nyw0ODkwNCw0ODkwNSw0ODkyMCw0ODkyMSw0ODkyMyw0ODkyNCw0ODkyNSw0ODk2MCw0ODk2''@;'; put 'put ''MSw0ODk2NCw0ODk2OCw0ODk3Niw0ODk3Nyw0ODk4MSw0OTA0NCw0OTA3Miw0OTA5Myw0OTEwMCw0OTEwMSw0OTEwNCw0OTEwOCw0OTExNiw0OTExOSw0OTEyMSw0OTIxMiw0OTIzMyw0OTI0MCw0OTI0NCw0OTI0OCw0OTI1Niw0OTI1Nyw0OTI5Niw0OTI5Nyw0OTMwMCw0OTMwNCw0OTMxMiw0''@;'; put 'put ''OTMxMyw0OTMxNSw0OTMxNyw0OTMyNCw0OTMyNSw0OTMyNyw0OTMyOCw0OTMzMSw0OTMzMiw0OTMzMyw0OTMzNCw0OTM0MCw0OTM0MSw0OTM0Myw0OTM0NCw0OTM0NSw0OTM0OSw0OTM1Miw0OTM1Myw0OTM1Niw0OTM2MCw0OTM2OCw0OTM2OSw0OTM3MSw0OTM3Miw0OTM3Myw0OTM4MCw1NDEy''@;'; put 'put ''Miw1NDEyMyw1NDEyNCw1NDEyNSw1NDEyNiw1NDEyNyw1NDEyOCw1NDEyOSw1NDEzMCw1NDEzMSw1NDEzMiw1NDEzMyw1NDEzNCw1NDEzNSw1NDEzNiw1NDEzNyw1NDEzOCw1NDEzOSw1NDE0Miw1NDE0Myw1NDE0NSw1NDE0Niw1NDE0Nyw1NDE0OSw1NDE1MCw1NDE1MSxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCw1NDE1Miw1NDE1Myw1NDE1NCw1NDE1NSw1NDE1OCw1NDE2Miw1NDE2Myw1NDE2NCw1NDE2NSw1NDE2Niw1NDE2Nyw1NDE3MCw1NDE3MSw1NDE3Myw1NDE3NCw1NDE3NSw1NDE3Nyw1NDE3OCw1NDE3OSw1NDE4MCw1NDE4MSw1NDE4Miw1NDE4Myw1NDE4Niw1NDE4''@;'; put 'put ''OCw1NDE5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDE5MSw1NDE5Miw1NDE5Myw1NDE5NCw1NDE5NSw1NDE5Nyw1NDE5OCw1NDE5OSw1NDIwMSw1NDIwMiw1NDIwMyw1NDIwNSw1NDIwNiw1NDIwNyw1NDIwOCw1NDIwOSw1NDIxMCw1NDIxMSw1NDIxNCw1NDIxNSw1NDIxOCw1''@;'; put 'put ''NDIxOSw1NDIyMCw1NDIyMSw1NDIyMiw1NDIyMyw1NDIyNSw1NDIyNiw1NDIyNyw1NDIyOCw1NDIyOSw1NDIzMCw0OTM4MSw0OTM4NCw0OTM4OCw0OTM5Niw0OTM5Nyw0OTM5OSw0OTQwMSw0OTQwOCw0OTQxMiw0OTQxNiw0OTQyNCw0OTQyOSw0OTQzNiw0OTQzNyw0OTQzOCw0OTQzOSw0OTQ0''@;'; put 'put ''MCw0OTQ0Myw0OTQ0NCw0OTQ0Niw0OTQ0Nyw0OTQ1Miw0OTQ1Myw0OTQ1NSw0OTQ1Niw0OTQ1Nyw0OTQ2Miw0OTQ2NCw0OTQ2NSw0OTQ2OCw0OTQ3Miw0OTQ4MCw0OTQ4MSw0OTQ4Myw0OTQ4NCw0OTQ4NSw0OTQ5Miw0OTQ5Myw0OTQ5Niw0OTUwMCw0OTUwOCw0OTUwOSw0OTUxMSw0OTUxMiw0''@;'; put 'put ''OTUxMyw0OTUyMCw0OTUyNCw0OTUyOCw0OTU0MSw0OTU0OCw0OTU0OSw0OTU1MCw0OTU1Miw0OTU1Niw0OTU1OCw0OTU2NCw0OTU2NSw0OTU2Nyw0OTU2OSw0OTU3Myw0OTU3Niw0OTU3Nyw0OTU4MCw0OTU4NCw0OTU5Nyw0OTYwNCw0OTYwOCw0OTYxMiw0OTYyMCw0OTYyMyw0OTYyNCw0OTYz''@;'; put 'put ''Miw0OTYzNiw0OTY0MCw0OTY0OCw0OTY0OSw0OTY1MSw0OTY2MCw0OTY2MSw0OTY2NCw0OTY2OCw0OTY3Niw0OTY3Nyw0OTY3OSw0OTY4MSw0OTY4OCw0OTY4OSw0OTY5Miw0OTY5NSw0OTY5Niw0OTcwNCw0OTcwNSw0OTcwNyw0OTcwOSw1NDIzMSw1NDIzMyw1NDIzNCw1NDIzNSw1NDIzNiw1''@;'; put 'put ''NDIzNyw1NDIzOCw1NDIzOSw1NDI0MCw1NDI0Miw1NDI0NCw1NDI0NSw1NDI0Niw1NDI0Nyw1NDI0OCw1NDI0OSw1NDI1MCw1NDI1MSw1NDI1NCw1NDI1NSw1NDI1Nyw1NDI1OCw1NDI1OSw1NDI2MSw1NDI2Miw1NDI2MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDI2NCw1NDI2''@;'; put 'put ''NSw1NDI2Niw1NDI2Nyw1NDI3MCw1NDI3Miw1NDI3NCw1NDI3NSw1NDI3Niw1NDI3Nyw1NDI3OCw1NDI3OSw1NDI4MSw1NDI4Miw1NDI4Myw1NDI4NCw1NDI4NSw1NDI4Niw1NDI4Nyw1NDI4OCw1NDI4OSw1NDI5MCw1NDI5MSw1NDI5Miw1NDI5Myw1NDI5NCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCw1NDI5NSw1NDI5Niw1NDI5Nyw1NDI5OCw1NDI5OSw1NDMwMCw1NDMwMiw1NDMwMyw1NDMwNCw1NDMwNSw1NDMwNiw1NDMwNyw1NDMwOCw1NDMwOSw1NDMxMCw1NDMxMSw1NDMxMiw1NDMxMyw1NDMxNCw1NDMxNSw1NDMxNiw1NDMxNyw1NDMxOCw1NDMxOSw1NDMyMCw1NDMy''@;'; put 'put ''MSw1NDMyMiw1NDMyMyw1NDMyNCw1NDMyNSw1NDMyNiw1NDMyNyw0OTcxMSw0OTcxMyw0OTcxNCw0OTcxNiw0OTczNiw0OTc0NCw0OTc0NSw0OTc0OCw0OTc1Miw0OTc2MCw0OTc2NSw0OTc3Miw0OTc3Myw0OTc3Niw0OTc4MCw0OTc4OCw0OTc4OSw0OTc5MSw0OTc5Myw0OTgwMCw0OTgwMSw0''@;'; put 'put ''OTgwOCw0OTgxNiw0OTgxOSw0OTgyMSw0OTgyOCw0OTgyOSw0OTgzMiw0OTgzNiw0OTgzNyw0OTg0NCw0OTg0NSw0OTg0Nyw0OTg0OSw0OTg4NCw0OTg4NSw0OTg4OCw0OTg5MSw0OTg5Miw0OTg5OSw0OTkwMCw0OTkwMSw0OTkwMyw0OTkwNSw0OTkxMCw0OTkxMiw0OTkxMyw0OTkxNSw0OTkx''@;'; put 'put ''Niw0OTkyMCw0OTkyOCw0OTkyOSw0OTkzMiw0OTkzMyw0OTkzOSw0OTk0MCw0OTk0MSw0OTk0NCw0OTk0OCw0OTk1Niw0OTk1Nyw0OTk2MCw0OTk2MSw0OTk4OSw1MDAyNCw1MDAyNSw1MDAyOCw1MDAzMiw1MDAzNCw1MDA0MCw1MDA0MSw1MDA0NCw1MDA0NSw1MDA1Miw1MDA1Niw1MDA2MCw1''@;'; put 'put ''MDExMiw1MDEzNiw1MDEzNyw1MDE0MCw1MDE0Myw1MDE0NCw1MDE0Niw1MDE1Miw1MDE1Myw1MDE1Nyw1MDE2NCw1MDE2NSw1MDE2OCw1MDE4NCw1MDE5Miw1MDIxMiw1MDIyMCw1MDIyNCw1NDMyOCw1NDMyOSw1NDMzMCw1NDMzMSw1NDMzMiw1NDMzMyw1NDMzNCw1NDMzNSw1NDMzNyw1NDMz''@;'; put 'put ''OCw1NDMzOSw1NDM0MSw1NDM0Miw1NDM0Myw1NDM0NCw1NDM0NSw1NDM0Niw1NDM0Nyw1NDM0OCw1NDM0OSw1NDM1MCw1NDM1MSw1NDM1Miw1NDM1Myw1NDM1NCw1NDM1NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDM1Niw1NDM1Nyw1NDM1OCw1NDM1OSw1NDM2MCw1NDM2MSw1''@;'; put 'put ''NDM2Miw1NDM2Myw1NDM2NSw1NDM2Niw1NDM2Nyw1NDM2OSw1NDM3MCw1NDM3MSw1NDM3Myw1NDM3NCw1NDM3NSw1NDM3Niw1NDM3Nyw1NDM3OCw1NDM3OSw1NDM4MCw1NDM4Miw1NDM4NCw1NDM4NSw1NDM4NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDM4Nyw1NDM4OCw1NDM4''@;'; put 'put ''OSw1NDM5MCw1NDM5MSw1NDM5NCw1NDM5NSw1NDM5Nyw1NDM5OCw1NDQwMSw1NDQwMyw1NDQwNCw1NDQwNSw1NDQwNiw1NDQwNyw1NDQxMCw1NDQxMiw1NDQxNCw1NDQxNSw1NDQxNiw1NDQxNyw1NDQxOCw1NDQxOSw1NDQyMSw1NDQyMiw1NDQyMyw1NDQyNCw1NDQyNSw1NDQyNiw1NDQyNyw1''@;'; put 'put ''NDQyOCw1NDQyOSw1MDIyOCw1MDIzNiw1MDIzNyw1MDI0OCw1MDI3Niw1MDI3Nyw1MDI4MCw1MDI4NCw1MDI5Miw1MDI5Myw1MDI5Nyw1MDMwNCw1MDMyNCw1MDMzMiw1MDM2MCw1MDM2NCw1MDQwOSw1MDQxNiw1MDQxNyw1MDQyMCw1MDQyNCw1MDQyNiw1MDQzMSw1MDQzMiw1MDQzMyw1MDQ0''@;'; put 'put ''NCw1MDQ0OCw1MDQ1Miw1MDQ2MCw1MDQ3Miw1MDQ3Myw1MDQ3Niw1MDQ4MCw1MDQ4OCw1MDQ4OSw1MDQ5MSw1MDQ5Myw1MDUwMCw1MDUwMSw1MDUwNCw1MDUwNSw1MDUwNiw1MDUwOCw1MDUwOSw1MDUxMCw1MDUxNSw1MDUxNiw1MDUxNyw1MDUxOSw1MDUyMCw1MDUyMSw1MDUyNSw1MDUyNiw1''@;'; put 'put ''MDUyOCw1MDUyOSw1MDUzMiw1MDUzNiw1MDU0NCw1MDU0NSw1MDU0Nyw1MDU0OCw1MDU0OSw1MDU1Niw1MDU1Nyw1MDU2MCw1MDU2NCw1MDU2Nyw1MDU3Miw1MDU3Myw1MDU3NSw1MDU3Nyw1MDU4MSw1MDU4Myw1MDU4NCw1MDU4OCw1MDU5Miw1MDYwMSw1MDYxMiw1MDYxMyw1MDYxNiw1MDYx''@;'; put 'put ''Nyw1MDYxOSw1MDYyMCw1MDYyMSw1MDYyMiw1MDYyOCw1MDYyOSw1MDYzMCw1MDYzMSw1MDYzMiw1MDYzMyw1MDYzNCw1MDYzNiw1MDYzOCw1NDQzMCw1NDQzMSw1NDQzMiw1NDQzMyw1NDQzNCw1NDQzNSw1NDQzNiw1NDQzNyw1NDQzOCw1NDQzOSw1NDQ0MCw1NDQ0Miw1NDQ0Myw1NDQ0NCw1''@;'; put 'put ''NDQ0NSw1NDQ0Niw1NDQ0Nyw1NDQ0OCw1NDQ0OSw1NDQ1MCw1NDQ1MSw1NDQ1Miw1NDQ1Myw1NDQ1NCw1NDQ1NSw1NDQ1NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDQ1Nyw1NDQ1OCw1NDQ1OSw1NDQ2MCw1NDQ2MSw1NDQ2Miw1NDQ2Myw1NDQ2NCw1NDQ2NSw1NDQ2Niw1NDQ2''@;'; put 'put ''Nyw1NDQ2OCw1NDQ2OSw1NDQ3MCw1NDQ3MSw1NDQ3Miw1NDQ3Myw1NDQ3NCw1NDQ3NSw1NDQ3Nyw1NDQ3OCw1NDQ3OSw1NDQ4MSw1NDQ4Miw1NDQ4Myw1NDQ4NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDQ4Niw1NDQ4Nyw1NDQ4OCw1NDQ4OSw1NDQ5MCw1NDQ5MSw1NDQ5Myw1''@;'; put 'put ''NDQ5NCw1NDQ5Niw1NDQ5Nyw1NDQ5OCw1NDQ5OSw1NDUwMCw1NDUwMSw1NDUwMiw1NDUwMyw1NDUwNSw1NDUwNiw1NDUwNyw1NDUwOSw1NDUxMCw1NDUxMSw1NDUxMyw1NDUxNCw1NDUxNSw1NDUxNiw1NDUxNyw1NDUxOCw1NDUxOSw1NDUyMSw1NDUyMiw1NDUyNCw1MDY0MCw1MDY0MSw1MDY0''@;'; put 'put ''NCw1MDY0OCw1MDY1Niw1MDY1Nyw1MDY1OSw1MDY2MSw1MDY2OCw1MDY2OSw1MDY3MCw1MDY3Miw1MDY3Niw1MDY3OCw1MDY3OSw1MDY4NCw1MDY4NSw1MDY4Niw1MDY4Nyw1MDY4OCw1MDY4OSw1MDY5Myw1MDY5NCw1MDY5NSw1MDY5Niw1MDcwMCw1MDcwNCw1MDcxMiw1MDcxMyw1MDcxNSw1''@;'; put 'put ''MDcxNiw1MDcyNCw1MDcyNSw1MDcyOCw1MDczMiw1MDczMyw1MDczNCw1MDczNiw1MDczOSw1MDc0MCw1MDc0MSw1MDc0Myw1MDc0NSw1MDc0Nyw1MDc1Miw1MDc1Myw1MDc1Niw1MDc2MCw1MDc2OCw1MDc2OSw1MDc3MSw1MDc3Miw1MDc3Myw1MDc4MCw1MDc4MSw1MDc4NCw1MDc5Niw1MDc5''@;'; put 'put ''OSw1MDgwMSw1MDgwOCw1MDgwOSw1MDgxMiw1MDgxNiw1MDgyNCw1MDgyNSw1MDgyNyw1MDgyOSw1MDgzNiw1MDgzNyw1MDg0MCw1MDg0NCw1MDg1Miw1MDg1Myw1MDg1NSw1MDg1Nyw1MDg2NCw1MDg2NSw1MDg2OCw1MDg3Miw1MDg3Myw1MDg3NCw1MDg4MCw1MDg4MSw1MDg4Myw1MDg4NSw1''@;'; put 'put ''MDg5Miw1MDg5Myw1MDg5Niw1MDkwMCw1MDkwOCw1MDkwOSw1MDkxMiw1MDkxMyw1MDkyMCw1NDUyNiw1NDUyNyw1NDUyOCw1NDUyOSw1NDUzMCw1NDUzMSw1NDUzMyw1NDUzNCw1NDUzNSw1NDUzNyw1NDUzOCw1NDUzOSw1NDU0MSw1NDU0Miw1NDU0Myw1NDU0NCw1NDU0NSw1NDU0Niw1NDU0''@;'; put 'put ''Nyw1NDU1MCw1NDU1Miw1NDU1Myw1NDU1NCw1NDU1NSw1NDU1Niw1NDU1NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDU1OCw1NDU1OSw1NDU2MCw1NDU2MSw1NDU2Miw1NDU2Myw1NDU2NCw1NDU2NSw1NDU2Niw1NDU2Nyw1NDU2OCw1NDU2OSw1NDU3MCw1NDU3MSw1NDU3Miw1''@;'; put 'put ''NDU3Myw1NDU3NCw1NDU3NSw1NDU3Niw1NDU3Nyw1NDU3OCw1NDU3OSw1NDU4MCw1NDU4MSw1NDU4Miw1NDU4MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDU4NCw1NDU4NSw1NDU4Niw1NDU4Nyw1NDU5MCw1NDU5MSw1NDU5Myw1NDU5NCw1NDU5NSw1NDU5Nyw1NDU5OCw1NDU5''@;'; put 'put ''OSw1NDYwMCw1NDYwMSw1NDYwMiw1NDYwMyw1NDYwNiw1NDYwOCw1NDYxMCw1NDYxMSw1NDYxMiw1NDYxMyw1NDYxNCw1NDYxNSw1NDYxOCw1NDYxOSw1NDYyMSw1NDYyMiw1NDYyMyw1NDYyNSw1NDYyNiw1NDYyNyw1MDkyMSw1MDkyNCw1MDkyOCw1MDkzNiw1MDkzNyw1MDk0MSw1MDk0OCw1''@;'; put 'put ''MDk0OSw1MDk1Miw1MDk1Niw1MDk2NCw1MDk2NSw1MDk2Nyw1MDk2OSw1MDk3Niw1MDk3Nyw1MDk4MCw1MDk4NCw1MDk5Miw1MDk5Myw1MDk5NSw1MDk5Nyw1MDk5OSw1MTAwNCw1MTAwNSw1MTAwOCw1MTAxMiw1MTAxOCw1MTAyMCw1MTAyMSw1MTAyMyw1MTAyNSw1MTAyNiw1MTAyNyw1MTAy''@;'; put 'put ''OCw1MTAyOSw1MTAzMCw1MTAzMSw1MTAzMiw1MTAzNiw1MTA0MCw1MTA0OCw1MTA1MSw1MTA2MCw1MTA2MSw1MTA2NCw1MTA2OCw1MTA2OSw1MTA3MCw1MTA3NSw1MTA3Niw1MTA3Nyw1MTA3OSw1MTA4MCw1MTA4MSw1MTA4Miw1MTA4Niw1MTA4OCw1MTA4OSw1MTA5Miw1MTA5NCw1MTA5NSw1''@;'; put 'put ''MTA5Niw1MTA5OCw1MTEwNCw1MTEwNSw1MTEwNyw1MTEwOCw1MTEwOSw1MTExMCw1MTExNiw1MTExNyw1MTEyMCw1MTEyNCw1MTEzMiw1MTEzMyw1MTEzNSw1MTEzNiw1MTEzNyw1MTE0NCw1MTE0NSw1MTE0OCw1MTE1MCw1MTE1Miw1MTE2MCw1MTE2NSw1MTE3Miw1MTE3Niw1MTE4MCw1MTIw''@;'; put 'put ''MCw1MTIwMSw1MTIwNCw1MTIwOCw1MTIxMCw1NDYyOCw1NDYzMCw1NDYzMSw1NDYzNCw1NDYzNiw1NDYzOCw1NDYzOSw1NDY0MCw1NDY0MSw1NDY0Miw1NDY0Myw1NDY0Niw1NDY0Nyw1NDY0OSw1NDY1MCw1NDY1MSw1NDY1Myw1NDY1NCw1NDY1NSw1NDY1Niw1NDY1Nyw1NDY1OCw1NDY1OSw1''@;'; put 'put ''NDY2Miw1NDY2Niw1NDY2NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDY2OCw1NDY2OSw1NDY3MCw1NDY3MSw1NDY3Myw1NDY3NCw1NDY3NSw1NDY3Niw1NDY3Nyw1NDY3OCw1NDY3OSw1NDY4MCw1NDY4MSw1NDY4Miw1NDY4Myw1NDY4NCw1NDY4NSw1NDY4Niw1NDY4Nyw1NDY4''@;'; put 'put ''OCw1NDY4OSw1NDY5MCw1NDY5MSw1NDY5Miw1NDY5NCw1NDY5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDY5Niw1NDY5Nyw1NDY5OCw1NDY5OSw1NDcwMCw1NDcwMSw1NDcwMiw1NDcwMyw1NDcwNCw1NDcwNSw1NDcwNiw1NDcwNyw1NDcwOCw1NDcwOSw1NDcxMCw1NDcxMSw1''@;'; put 'put ''NDcxMiw1NDcxMyw1NDcxNCw1NDcxNSw1NDcxNiw1NDcxNyw1NDcxOCw1NDcxOSw1NDcyMCw1NDcyMSw1NDcyMiw1NDcyMyw1NDcyNCw1NDcyNSw1NDcyNiw1NDcyNyw1MTIxNiw1MTIxNyw1MTIxOSw1MTIyMSw1MTIyMiw1MTIyOCw1MTIyOSw1MTIzMiw1MTIzNiw1MTI0NCw1MTI0NSw1MTI0''@;'; put 'put ''Nyw1MTI0OSw1MTI1Niw1MTI2MCw1MTI2NCw1MTI3Miw1MTI3Myw1MTI3Niw1MTI3Nyw1MTI4NCw1MTMxMiw1MTMxMyw1MTMxNiw1MTMyMCw1MTMyMiw1MTMyOCw1MTMyOSw1MTMzMSw1MTMzMyw1MTMzNCw1MTMzNSw1MTMzOSw1MTM0MCw1MTM0MSw1MTM0OCw1MTM1Nyw1MTM1OSw1MTM2MSw1''@;'; put 'put ''MTM2OCw1MTM4OCw1MTM4OSw1MTM5Niw1MTQwMCw1MTQwNCw1MTQxMiw1MTQxMyw1MTQxNSw1MTQxNyw1MTQyNCw1MTQyNSw1MTQyOCw1MTQ0NSw1MTQ1Miw1MTQ1Myw1MTQ1Niw1MTQ2MCw1MTQ2MSw1MTQ2Miw1MTQ2OCw1MTQ2OSw1MTQ3MSw1MTQ3Myw1MTQ4MCw1MTUwMCw1MTUwOCw1MTUz''@;'; put 'put ''Niw1MTUzNyw1MTU0MCw1MTU0NCw1MTU1Miw1MTU1Myw1MTU1NSw1MTU2NCw1MTU2OCw1MTU3Miw1MTU4MCw1MTU5Miw1MTU5Myw1MTU5Niw1MTYwMCw1MTYwOCw1MTYwOSw1MTYxMSw1MTYxMyw1MTY0OCw1MTY0OSw1MTY1Miw1MTY1NSw1MTY1Niw1MTY1OCw1MTY2NCw1MTY2NSw1MTY2Nyw1''@;'; put 'put ''NDczMCw1NDczMSw1NDczMyw1NDczNCw1NDczNSw1NDczNyw1NDczOSw1NDc0MCw1NDc0MSw1NDc0Miw1NDc0Myw1NDc0Niw1NDc0OCw1NDc1MCw1NDc1MSw1NDc1Miw1NDc1Myw1NDc1NCw1NDc1NSw1NDc1OCw1NDc1OSw1NDc2MSw1NDc2Miw1NDc2Myw1NDc2NSw1NDc2NixudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCw1NDc2Nyw1NDc2OCw1NDc2OSw1NDc3MCw1NDc3MSw1NDc3NCw1NDc3Niw1NDc3OCw1NDc3OSw1NDc4MCw1NDc4MSw1NDc4Miw1NDc4Myw1NDc4Niw1NDc4Nyw1NDc4OSw1NDc5MCw1NDc5MSw1NDc5Myw1NDc5NCw1NDc5NSw1NDc5Niw1NDc5Nyw1NDc5OCw1''@;'; put 'put ''NDc5OSw1NDgwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDgwNiw1NDgwNyw1NDgwOCw1NDgwOSw1NDgxMCw1NDgxMSw1NDgxMyw1NDgxNCw1NDgxNSw1NDgxNyw1NDgxOCw1NDgxOSw1NDgyMSw1NDgyMiw1NDgyMyw1NDgyNCw1NDgyNSw1NDgyNiw1NDgyNyw1NDgyOCw1NDgz''@;'; put 'put ''MCw1NDgzMSw1NDgzMiw1NDgzMyw1NDgzNCw1NDgzNSw1NDgzNiw1NDgzNyw1NDgzOCw1NDgzOSw1NDg0Miw1NDg0Myw1MTY2OSw1MTY3MCw1MTY3Myw1MTY3NCw1MTY3Niw1MTY3Nyw1MTY4MCw1MTY4Miw1MTY4NCw1MTY4Nyw1MTY5Miw1MTY5Myw1MTY5NSw1MTY5Niw1MTY5Nyw1MTcwNCw1''@;'; put 'put ''MTcwNSw1MTcwOCw1MTcxMiw1MTcyMCw1MTcyMSw1MTcyMyw1MTcyNCw1MTcyNSw1MTczMiw1MTczNiw1MTc1Myw1MTc4OCw1MTc4OSw1MTc5Miw1MTc5Niw1MTgwNCw1MTgwNSw1MTgwNyw1MTgwOCw1MTgwOSw1MTgxNiw1MTgzNyw1MTg0NCw1MTg2NCw1MTkwMCw1MTkwMSw1MTkwNCw1MTkw''@;'; put 'put ''OCw1MTkxNiw1MTkxNyw1MTkxOSw1MTkyMSw1MTkyMyw1MTkyOCw1MTkyOSw1MTkzNiw1MTk0OCw1MTk1Niw1MTk3Niw1MTk4NCw1MTk4OCw1MTk5Miw1MmUzLDUyMDAxLDUyMDMzLDUyMDQwLDUyMDQxLDUyMDQ0LDUyMDQ4LDUyMDU2LDUyMDU3LDUyMDYxLDUyMDY4LDUyMDg4LDUyMDg5LDUy''@;'; put 'put ''MTI0LDUyMTUyLDUyMTgwLDUyMTk2LDUyMTk5LDUyMjAxLDUyMjM2LDUyMjM3LDUyMjQwLDUyMjQ0LDUyMjUyLDUyMjUzLDUyMjU3LDUyMjU4LDUyMjYzLDUyMjY0LDUyMjY1LDUyMjY4LDUyMjcwLDUyMjcyLDUyMjgwLDUyMjgxLDUyMjgzLDU0ODQ1LDU0ODQ2LDU0ODQ3LDU0ODQ5LDU0ODUw''@;'; put 'put ''LDU0ODUxLDU0ODUyLDU0ODU0LDU0ODU1LDU0ODU4LDU0ODYwLDU0ODYyLDU0ODYzLDU0ODY0LDU0ODY2LDU0ODY3LDU0ODcwLDU0ODcxLDU0ODczLDU0ODc0LDU0ODc1LDU0ODc3LDU0ODc4LDU0ODc5LDU0ODgwLDU0ODgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0ODgyLDU0''@;'; put 'put ''ODgzLDU0ODg0LDU0ODg1LDU0ODg2LDU0ODg4LDU0ODkwLDU0ODkxLDU0ODkyLDU0ODkzLDU0ODk0LDU0ODk1LDU0ODk4LDU0ODk5LDU0OTAxLDU0OTAyLDU0OTAzLDU0OTA0LDU0OTA1LDU0OTA2LDU0OTA3LDU0OTA4LDU0OTA5LDU0OTEwLDU0OTExLDU0OTEyLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLDU0OTEzLDU0OTE0LDU0OTE2LDU0OTE4LDU0OTE5LDU0OTIwLDU0OTIxLDU0OTIyLDU0OTIzLDU0OTI2LDU0OTI3LDU0OTI5LDU0OTMwLDU0OTMxLDU0OTMzLDU0OTM0LDU0OTM1LDU0OTM2LDU0OTM3LDU0OTM4LDU0OTM5LDU0OTQwLDU0OTQyLDU0OTQ0LDU0OTQ2LDU0''@;'; put 'put ''OTQ3LDU0OTQ4LDU0OTQ5LDU0OTUwLDU0OTUxLDU0OTUzLDU0OTU0LDUyMjg0LDUyMjg1LDUyMjg2LDUyMjkyLDUyMjkzLDUyMjk2LDUyMzAwLDUyMzA4LDUyMzA5LDUyMzExLDUyMzEyLDUyMzEzLDUyMzIwLDUyMzI0LDUyMzI2LDUyMzI4LDUyMzM2LDUyMzQxLDUyMzc2LDUyMzc3LDUyMzgw''@;'; put 'put ''LDUyMzg0LDUyMzkyLDUyMzkzLDUyMzk1LDUyMzk2LDUyMzk3LDUyNDA0LDUyNDA1LDUyNDA4LDUyNDEyLDUyNDIwLDUyNDIxLDUyNDIzLDUyNDI1LDUyNDMyLDUyNDM2LDUyNDUyLDUyNDYwLDUyNDY0LDUyNDgxLDUyNDg4LDUyNDg5LDUyNDkyLDUyNDk2LDUyNTA0LDUyNTA1LDUyNTA3LDUy''@;'; put 'put ''NTA5LDUyNTE2LDUyNTIwLDUyNTI0LDUyNTM3LDUyNTcyLDUyNTc2LDUyNTgwLDUyNTg4LDUyNTg5LDUyNTkxLDUyNTkzLDUyNjAwLDUyNjE2LDUyNjI4LDUyNjI5LDUyNjMyLDUyNjM2LDUyNjQ0LDUyNjQ1LDUyNjQ3LDUyNjQ5LDUyNjU2LDUyNjc2LDUyNjg0LDUyNjg4LDUyNzEyLDUyNzE2''@;'; put 'put ''LDUyNzIwLDUyNzI4LDUyNzI5LDUyNzMxLDUyNzMzLDUyNzQwLDUyNzQ0LDUyNzQ4LDUyNzU2LDUyNzYxLDUyNzY4LDUyNzY5LDUyNzcyLDUyNzc2LDUyNzg0LDUyNzg1LDUyNzg3LDUyNzg5LDU0OTU1LDU0OTU3LDU0OTU4LDU0OTU5LDU0OTYxLDU0OTYyLDU0OTYzLDU0OTY0LDU0OTY1LDU0''@;'; put 'put ''OTY2LDU0OTY3LDU0OTY4LDU0OTcwLDU0OTcyLDU0OTczLDU0OTc0LDU0OTc1LDU0OTc2LDU0OTc3LDU0OTc4LDU0OTc5LDU0OTgyLDU0OTgzLDU0OTg1LDU0OTg2LDU0OTg3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0OTg5LDU0OTkwLDU0OTkxLDU0OTkyLDU0OTk0LDU0OTk1''@;'; put 'put ''LDU0OTk3LDU0OTk4LDU1ZTMsNTUwMDIsNTUwMDMsNTUwMDQsNTUwMDUsNTUwMDYsNTUwMDcsNTUwMDksNTUwMTAsNTUwMTEsNTUwMTMsNTUwMTQsNTUwMTUsNTUwMTcsNTUwMTgsNTUwMTksNTUwMjAsNTUwMjEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTUwMjIsNTUwMjMsNTUw''@;'; put 'put ''MjUsNTUwMjYsNTUwMjcsNTUwMjgsNTUwMzAsNTUwMzEsNTUwMzIsNTUwMzMsNTUwMzQsNTUwMzUsNTUwMzgsNTUwMzksNTUwNDEsNTUwNDIsNTUwNDMsNTUwNDUsNTUwNDYsNTUwNDcsNTUwNDgsNTUwNDksNTUwNTAsNTUwNTEsNTUwNTIsNTUwNTMsNTUwNTQsNTUwNTUsNTUwNTYsNTUwNTgs''@;'; put 'put ''NTUwNTksNTUwNjAsNTI4MjQsNTI4MjUsNTI4MjgsNTI4MzEsNTI4MzIsNTI4MzMsNTI4NDAsNTI4NDEsNTI4NDMsNTI4NDUsNTI4NTIsNTI4NTMsNTI4NTYsNTI4NjAsNTI4NjgsNTI4NjksNTI4NzEsNTI4NzMsNTI4ODAsNTI4ODEsNTI4ODQsNTI4ODgsNTI4OTYsNTI4OTcsNTI4OTksNTI5''@;'; put 'put ''MDAsNTI5MDEsNTI5MDgsNTI5MDksNTI5MjksNTI5NjQsNTI5NjUsNTI5NjgsNTI5NzEsNTI5NzIsNTI5ODAsNTI5ODEsNTI5ODMsNTI5ODQsNTI5ODUsNTI5OTIsNTI5OTMsNTI5OTYsNTNlMyw1MzAwOCw1MzAwOSw1MzAxMSw1MzAxMyw1MzAyMCw1MzAyNCw1MzAyOCw1MzAzNiw1MzAzNyw1''@;'; put 'put ''MzAzOSw1MzA0MCw1MzA0MSw1MzA0OCw1MzA3Niw1MzA3Nyw1MzA4MCw1MzA4NCw1MzA5Miw1MzA5Myw1MzA5NSw1MzA5Nyw1MzEwNCw1MzEwNSw1MzEwOCw1MzExMiw1MzEyMCw1MzEyNSw1MzEzMiw1MzE1Myw1MzE2MCw1MzE2OCw1MzE4OCw1MzIxNiw1MzIxNyw1MzIyMCw1MzIyNCw1MzIz''@;'; put 'put ''Miw1MzIzMyw1MzIzNSw1MzIzNyw1MzI0NCw1MzI0OCw1MzI1Miw1MzI2NSw1MzI3Miw1MzI5Myw1MzMwMCw1MzMwMSw1MzMwNCw1MzMwOCw1NTA2MSw1NTA2Miw1NTA2Myw1NTA2Niw1NTA2Nyw1NTA2OSw1NTA3MCw1NTA3MSw1NTA3Myw1NTA3NCw1NTA3NSw1NTA3Niw1NTA3Nyw1NTA3OCw1''@;'; put 'put ''NTA3OSw1NTA4Miw1NTA4NCw1NTA4Niw1NTA4Nyw1NTA4OCw1NTA4OSw1NTA5MCw1NTA5MSw1NTA5NCw1NTA5NSw1NTA5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NTA5OCw1NTA5OSw1NTEwMSw1NTEwMiw1NTEwMyw1NTEwNCw1NTEwNSw1NTEwNiw1NTEwNyw1NTEwOSw1NTEx''@;'; put 'put ''MCw1NTExMiw1NTExNCw1NTExNSw1NTExNiw1NTExNyw1NTExOCw1NTExOSw1NTEyMiw1NTEyMyw1NTEyNSw1NTEzMCw1NTEzMSw1NTEzMiw1NTEzMyw1NTEzNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NTEzNSw1NTEzOCw1NTE0MCw1NTE0Miw1NTE0Myw1NTE0NCw1NTE0Niw1''@;'; put 'put ''NTE0Nyw1NTE0OSw1NTE1MCw1NTE1MSw1NTE1Myw1NTE1NCw1NTE1NSw1NTE1Nyw1NTE1OCw1NTE1OSw1NTE2MCw1NTE2MSw1NTE2Miw1NTE2Myw1NTE2Niw1NTE2Nyw1NTE2OCw1NTE3MCw1NTE3MSw1NTE3Miw1NTE3Myw1NTE3NCw1NTE3NSw1NTE3OCw1NTE3OSw1MzMxNiw1MzMxNyw1MzMx''@;'; put 'put ''OSw1MzMyMSw1MzMyOCw1MzMzMiw1MzMzNiw1MzM0NCw1MzM1Niw1MzM1Nyw1MzM2MCw1MzM2NCw1MzM3Miw1MzM3Myw1MzM3Nyw1MzQxMiw1MzQxMyw1MzQxNiw1MzQyMCw1MzQyOCw1MzQyOSw1MzQzMSw1MzQzMyw1MzQ0MCw1MzQ0MSw1MzQ0NCw1MzQ0OCw1MzQ0OSw1MzQ1Niw1MzQ1Nyw1''@;'; put 'put ''MzQ1OSw1MzQ2MCw1MzQ2MSw1MzQ2OCw1MzQ2OSw1MzQ3Miw1MzQ3Niw1MzQ4NCw1MzQ4NSw1MzQ4Nyw1MzQ4OCw1MzQ4OSw1MzQ5Niw1MzUxNyw1MzU1Miw1MzU1Myw1MzU1Niw1MzU2MCw1MzU2Miw1MzU2OCw1MzU2OSw1MzU3MSw1MzU3Miw1MzU3Myw1MzU4MCw1MzU4MSw1MzU4NCw1MzU4''@;'; put 'put ''OCw1MzU5Niw1MzU5Nyw1MzU5OSw1MzYwMSw1MzYwOCw1MzYxMiw1MzYyOCw1MzYzNiw1MzY0MCw1MzY2NCw1MzY2NSw1MzY2OCw1MzY3Miw1MzY4MCw1MzY4MSw1MzY4Myw1MzY4NSw1MzY5MCw1MzY5Miw1MzY5Niw1MzcyMCw1Mzc0OCw1Mzc1Miw1Mzc2Nyw1Mzc2OSw1Mzc3Niw1MzgwNCw1''@;'; put 'put ''MzgwNSw1MzgwOCw1MzgxMiw1MzgyMCw1MzgyMSw1MzgyMyw1MzgyNSw1MzgzMiw1Mzg1Miw1NTE4MSw1NTE4Miw1NTE4Myw1NTE4NSw1NTE4Niw1NTE4Nyw1NTE4OCw1NTE4OSw1NTE5MCw1NTE5MSw1NTE5NCw1NTE5Niw1NTE5OCw1NTE5OSw1NTIwMCw1NTIwMSw1NTIwMiw1NTIwMyxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzg2MCw1Mzg4OCw1Mzg4OSw1Mzg5Miw1Mzg5Niw1MzkwNCw1MzkwNSw1MzkwOSw1MzkxNiw1MzkyMCw1MzkyNCw1MzkzMiw1MzkzNyw1Mzk0NCw1Mzk0NSw1Mzk0OCw1Mzk1MSw1Mzk1Miw1''@;'; put 'put ''Mzk1NCw1Mzk2MCw1Mzk2MSw1Mzk2Myw1Mzk3Miw1Mzk3Niw1Mzk4MCw1Mzk4OCw1Mzk4OSw1NGUzLDU0MDAxLDU0MDA0LDU0MDA4LDU0MDE2LDU0MDE3LDU0MDE5LDU0MDIxLDU0MDI4LDU0MDI5LDU0MDMwLDU0MDMyLDU0MDM2LDU0MDM4LDU0MDQ0LDU0MDQ1LDU0MDQ3LDU0MDQ4LDU0MDQ5''@;'; put 'put ''LDU0MDUzLDU0MDU2LDU0MDU3LDU0MDYwLDU0MDY0LDU0MDcyLDU0MDczLDU0MDc1LDU0MDc2LDU0MDc3LDU0MDg0LDU0MDg1LDU0MTQwLDU0MTQxLDU0MTQ0LDU0MTQ4LDU0MTU2LDU0MTU3LDU0MTU5LDU0MTYwLDU0MTYxLDU0MTY4LDU0MTY5LDU0MTcyLDU0MTc2LDU0MTg0LDU0MTg1LDU0''@;'; put 'put ''MTg3LDU0MTg5LDU0MTk2LDU0MjAwLDU0MjA0LDU0MjEyLDU0MjEzLDU0MjE2LDU0MjE3LDU0MjI0LDU0MjMyLDU0MjQxLDU0MjQzLDU0MjUyLDU0MjUzLDU0MjU2LDU0MjYwLDU0MjY4LDU0MjY5LDU0MjcxLDU0MjczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MjgwLDU0MzAxLDU0MzM2LDU0MzQwLDU0MzY0LDU0MzY4LDU0MzcyLDU0MzgxLDU0MzgzLDU0''@;'; put 'put ''MzkyLDU0MzkzLDU0Mzk2LDU0Mzk5LDU0NDAwLDU0NDAyLDU0NDA4LDU0NDA5LDU0NDExLDU0NDEzLDU0NDIwLDU0NDQxLDU0NDc2LDU0NDgwLDU0NDg0LDU0NDkyLDU0NDk1LDU0NTA0LDU0NTA4LDU0NTEyLDU0NTIwLDU0NTIzLDU0NTI1LDU0NTMyLDU0NTM2LDU0NTQwLDU0NTQ4LDU0NTQ5''@;'; put 'put ''LDU0NTUxLDU0NTg4LDU0NTg5LDU0NTkyLDU0NTk2LDU0NjA0LDU0NjA1LDU0NjA3LDU0NjA5LDU0NjE2LDU0NjE3LDU0NjIwLDU0NjI0LDU0NjI5LDU0NjMyLDU0NjMzLDU0NjM1LDU0NjM3LDU0NjQ0LDU0NjQ1LDU0NjQ4LDU0NjUyLDU0NjYwLDU0NjYxLDU0NjYzLDU0NjY0LDU0NjY1LDU0''@;'; put 'put ''NjcyLDU0NjkzLDU0NzI4LDU0NzI5LDU0NzMyLDU0NzM2LDU0NzM4LDU0NzQ0LDU0NzQ1LDU0NzQ3LDU0NzQ5LDU0NzU2LDU0NzU3LDU0NzYwLDU0NzY0LDU0NzcyLDU0NzczLDU0Nzc1LDU0Nzc3LDU0Nzg0LDU0Nzg1LDU0Nzg4LDU0NzkyLDU0ODAwLDU0ODAxLDU0ODAzLDU0ODA0LDU0ODA1''@;'; put 'put ''LDU0ODEyLDU0ODE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0''@;'; put 'put ''ODIwLDU0ODI5LDU0ODQwLDU0ODQxLDU0ODQ0LDU0ODQ4LDU0ODUzLDU0ODU2LDU0ODU3LDU0ODU5LDU0ODYxLDU0ODY1LDU0ODY4LDU0ODY5LDU0ODcyLDU0ODc2LDU0ODg3LDU0ODg5LDU0ODk2LDU0ODk3LDU0OTAwLDU0OTE1LDU0OTE3LDU0OTI0LDU0OTI1LDU0OTI4LDU0OTMyLDU0OTQx''@;'; put 'put ''LDU0OTQzLDU0OTQ1LDU0OTUyLDU0OTU2LDU0OTYwLDU0OTY5LDU0OTcxLDU0OTgwLDU0OTgxLDU0OTg0LDU0OTg4LDU0OTkzLDU0OTk2LDU0OTk5LDU1MDAxLDU1MDA4LDU1MDEyLDU1MDE2LDU1MDI0LDU1MDI5LDU1MDM2LDU1MDM3LDU1MDQwLDU1MDQ0LDU1MDU3LDU1MDY0LDU1MDY1LDU1''@;'; put 'put ''MDY4LDU1MDcyLDU1MDgwLDU1MDgxLDU1MDgzLDU1MDg1LDU1MDkyLDU1MDkzLDU1MDk2LDU1MTAwLDU1MTA4LDU1MTExLDU1MTEzLDU1MTIwLDU1MTIxLDU1MTI0LDU1MTI2LDU1MTI3LDU1MTI4LDU1MTI5LDU1MTM2LDU1MTM3LDU1MTM5LDU1MTQxLDU1MTQ1LDU1MTQ4LDU1MTUyLDU1MTU2''@;'; put 'put ''LDU1MTY0LDU1MTY1LDU1MTY5LDU1MTc2LDU1MTc3LDU1MTgwLDU1MTg0LDU1MTkyLDU1MTkzLDU1MTk1LDU1MTk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsMjAyODUsMjAzMzksMjA1NTEsMjA3MjksMjExNTIsMjE0ODcsMjE2MjEsMjE3MzMsMjIwMjUsMjMyMzMsMjM0NzgsMjYyNDcsMjY1NTAsMjY1NTEsMjY2MDcsMjc0NjgsMjk2MzQsMzAxNDYsMzEyOTIsMzM0OTksMzM1NDAsMzQ5MDMsMzQ5NTIsMzUzODIsMzYwNDAsMzYz''@;'; put 'put ''MDMsMzY2MDMsMzY4MzgsMzkzODEsMjEwNTEsMjEzNjQsMjE1MDgsMjQ2ODIsMjQ5MzIsMjc1ODAsMjk2NDcsMzMwNTAsMzUyNTgsMzUyODIsMzgzMDcsMjAzNTUsMjEwMDIsMjI3MTgsMjI5MDQsMjMwMTQsMjQxNzgsMjQxODUsMjUwMzEsMjU1MzYsMjY0MzgsMjY2MDQsMjY3NTEsMjg1Njcs''@;'; put 'put ''MzAyODYsMzA0NzUsMzA5NjUsMzEyNDAsMzE0ODcsMzE3NzcsMzI5MjUsMzMzOTAsMzMzOTMsMzU1NjMsMzgyOTEsMjAwNzUsMjE5MTcsMjYzNTksMjgyMTIsMzA4ODMsMzE0NjksMzM4ODMsMzUwODgsMzQ2MzgsMzg4MjQsMjEyMDgsMjIzNTAsMjI1NzAsMjM4ODQsMjQ4NjMsMjUwMjIsMjUx''@;'; put 'put ''MjEsMjU5NTQsMjY1NzcsMjcyMDQsMjgxODcsMjk5NzYsMzAxMzEsMzA0MzUsMzA2NDAsMzIwNTgsMzcwMzksMzc5NjksMzc5NzAsNDA4NTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjEyODMsMjM3MjQsMzAwMDIsMzI5ODcsMzc0NDAsMzgyOTYsMjEwODMsMjI1MzYsMjMwMDQsMjM3MTMsMjM4MzEsMjQyNDcsMjQzNzgsMjQzOTQsMjQ5NTEsMjc3NDMsMzAw''@;'; put 'put ''NzQsMzAwODYsMzE5NjgsMzIxMTUsMzIxNzcsMzI2NTIsMzMxMDgsMzMzMTMsMzQxOTMsMzUxMzcsMzU2MTEsMzc2MjgsMzg0NzcsNDAwMDcsMjAxNzEsMjAyMTUsMjA0OTEsMjA5NzcsMjI2MDcsMjQ4ODcsMjQ4OTQsMjQ5MzYsMjU5MTMsMjcxMTQsMjg0MzMsMzAxMTcsMzAzNDIsMzA0MjIs''@;'; put 'put ''MzE2MjMsMzM0NDUsMzM5OTUsNjM3NDQsMzc3OTksMzgyODMsMjE4ODgsMjM0NTgsMjIzNTMsNjM3NDUsMzE5MjMsMzI2OTcsMzczMDEsMjA1MjAsMjE0MzUsMjM2MjEsMjQwNDAsMjUyOTgsMjU0NTQsMjU4MTgsMjU4MzEsMjgxOTIsMjg4NDQsMzEwNjcsMzYzMTcsMzYzODIsNjM3NDYsMzY5''@;'; put 'put ''ODksMzc0NDUsMzc2MjQsMjAwOTQsMjAyMTQsMjA1ODEsMjQwNjIsMjQzMTQsMjQ4MzgsMjY5NjcsMzMxMzcsMzQzODgsMzY0MjMsMzc3NDksMzk0NjcsMjAwNjIsMjA2MjUsMjY0ODAsMjY2ODgsMjA3NDUsMjExMzMsMjExMzgsMjcyOTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzA2NTIsMzczOTIsNDA2NjAsMjExNjMsMjQ2MjMsMzY4NTAsMjA1NTIsMjUw''@;'; put 'put ''MDEsMjU1ODEsMjU4MDIsMjY2ODQsMjcyNjgsMjg2MDgsMzMxNjAsMzUyMzMsMzg1NDgsMjI1MzMsMjkzMDksMjkzNTYsMjk5NTYsMzIxMjEsMzIzNjUsMzI5MzcsMzUyMTEsMzU3MDAsMzY5NjMsNDAyNzMsMjUyMjUsMjc3NzAsMjg1MDAsMzIwODAsMzI1NzAsMzUzNjMsMjA4NjAsMjQ5MDYs''@;'; put 'put ''MzE2NDUsMzU2MDksMzc0NjMsMzc3NzIsMjAxNDAsMjA0MzUsMjA1MTAsMjA2NzAsMjA3NDIsMjExODUsMjExOTcsMjEzNzUsMjIzODQsMjI2NTksMjQyMTgsMjQ0NjUsMjQ5NTAsMjUwMDQsMjU4MDYsMjU5NjQsMjYyMjMsMjYyOTksMjYzNTYsMjY3NzUsMjgwMzksMjg4MDUsMjg5MTMsMjk4''@;'; put 'put ''NTUsMjk4NjEsMjk4OTgsMzAxNjksMzA4MjgsMzA5NTYsMzE0NTUsMzE0NzgsMzIwNjksMzIxNDcsMzI3ODksMzI4MzEsMzMwNTEsMzM2ODYsMzU2ODYsMzY2MjksMzY4ODUsMzc4NTcsMzg5MTUsMzg5NjgsMzk1MTQsMzk5MTIsMjA0MTgsMjE4NDMsMjI1ODYsMjI4NjUsMjMzOTUsMjM2MjIs''@;'; put 'put ''MjQ3NjAsMjUxMDYsMjY2OTAsMjY4MDAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsMjY4NTYsMjgzMzAsMzAwMjgsMzAzMjgsMzA5MjYsMzEyOTMsMzE5OTUsMzIzNjMsMzIzODAsMzUzMzYsMzU0ODksMzU5MDMsMzg1NDIsNDAzODgsMjE0NzYsMjE0ODEsMjE1NzgsMjE2MTcsMjIyNjYsMjI5OTMsMjMzOTYsMjM2MTEsMjQyMzUsMjUzMzUsMjU5MTEsMjU5MjUs''@;'; put 'put ''MjU5NzAsMjYyNzIsMjY1NDMsMjcwNzMsMjc4MzcsMzAyMDQsMzAzNTIsMzA1OTAsMzEyOTUsMzI2NjAsMzI3NzEsMzI5MjksMzMxNjcsMzM1MTAsMzM1MzMsMzM3NzYsMzQyNDEsMzQ4NjUsMzQ5OTYsMzU0OTMsNjM3NDcsMzY3NjQsMzc2NzgsMzg1OTksMzkwMTUsMzk2NDAsNDA3MjMsMjE3''@;'; put 'put ''NDEsMjYwMTEsMjYzNTQsMjY3NjcsMzEyOTYsMzU4OTUsNDAyODgsMjIyNTYsMjIzNzIsMjM4MjUsMjYxMTgsMjY4MDEsMjY4MjksMjg0MTQsMjk3MzYsMzQ5NzQsMzk5MDgsMjc3NTIsNjM3NDgsMzk1OTIsMjAzNzksMjA4NDQsMjA4NDksMjExNTEsMjMzODAsMjQwMzcsMjQ2NTYsMjQ2ODUs''@;'; put 'put ''MjUzMjksMjU1MTEsMjU5MTUsMjk2NTcsMzEzNTQsMzQ0NjcsMzYwMDIsMzg3OTksMjAwMTgsMjM1MjEsMjUwOTYsMjY1MjQsMjk5MTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzExODUsMzM3NDcsMzU0NjMsMzU1MDYsMzYzMjgsMzY5NDIsMzc3MDcsMzg5ODIsMjQyNzUsMjcxMTIsMzQzMDMsMzcxMDEsNjM3NDksMjA4OTYsMjM0NDgsMjM1MzIsMjQ5MzEs''@;'; put 'put ''MjY4NzQsMjc0NTQsMjg3NDgsMjk3NDMsMjk5MTIsMzE2NDksMzI1OTIsMzM3MzMsMzUyNjQsMzYwMTEsMzgzNjQsMzkyMDgsMjEwMzgsMjQ2NjksMjUzMjQsMzY4NjYsMjAzNjIsMjA4MDksMjEyODEsMjI3NDUsMjQyOTEsMjYzMzYsMjc5NjAsMjg4MjYsMjkzNzgsMjk2NTQsMzE1NjgsMzMw''@;'; put 'put ''MDksMzc5NzksMjEzNTAsMjU0OTksMzI2MTksMjAwNTQsMjA2MDgsMjI2MDIsMjI3NTAsMjQ2MTgsMjQ4NzEsMjUyOTYsMjcwODgsMzk3NDUsMjM0MzksMzIwMjQsMzI5NDUsMzY3MDMsMjAxMzIsMjA2ODksMjE2NzYsMjE5MzIsMjMzMDgsMjM5NjgsMjQwMzksMjU4OTgsMjU5MzQsMjY2NTcs''@;'; put 'put ''MjcyMTEsMjk0MDksMzAzNTAsMzA3MDMsMzIwOTQsMzI3NjEsMzMxODQsMzQxMjYsMzQ1MjcsMzY2MTEsMzY2ODYsMzcwNjYsMzkxNzEsMzk1MDksMzk4NTEsMTk5OTIsMjAwMzcsMjAwNjEsMjAxNjcsMjA0NjUsMjA4NTUsMjEyNDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjEzMTIsMjE0NzUsMjE0NzcsMjE2NDYsMjIwMzYsMjIzODksMjI0MzQsMjM0OTUs''@;'; put 'put ''MjM5NDMsMjQyNzIsMjUwODQsMjUzMDQsMjU5MzcsMjY1NTIsMjY2MDEsMjcwODMsMjc0NzIsMjc1OTAsMjc2MjgsMjc3MTQsMjgzMTcsMjg3OTIsMjkzOTksMjk1OTAsMjk2OTksMzA2NTUsMzA2OTcsMzEzNTAsMzIxMjcsMzI3NzcsMzMyNzYsMzMyODUsMzMyOTAsMzM1MDMsMzQ5MTQsMzU2''@;'; put 'put ''MzUsMzYwOTIsMzY1NDQsMzY4ODEsMzcwNDEsMzc0NzYsMzc1NTgsMzkzNzgsMzk0OTMsNDAxNjksNDA0MDcsNDA4NjAsMjIyODMsMjM2MTYsMzM3MzgsMzg4MTYsMzg4MjcsNDA2MjgsMjE1MzEsMzEzODQsMzI2NzYsMzUwMzMsMzY1NTcsMzcwODksMjI1MjgsMjM2MjQsMjU0OTYsMzEzOTEs''@;'; put 'put ''MjM0NzAsMjQzMzksMzEzNTMsMzE0MDYsMzM0MjIsMzY1MjQsMjA1MTgsMjEwNDgsMjEyNDAsMjEzNjcsMjIyODAsMjUzMzEsMjU0NTgsMjc0MDIsMjgwOTksMzA1MTksMjE0MTMsMjk1MjcsMzQxNTIsMzY0NzAsMzgzNTcsMjY0MjYsMjczMzEsMjg1MjgsMzU0MzcsMzY1NTYsMzkyNDMsNjM3''@;'; put 'put ''NTAsMjYyMzEsMjc1MTIsMzYwMjAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsMzk3NDAsNjM3NTEsMjE0ODMsMjIzMTcsMjI4NjIsMjU1NDIsMjcxMzEsMjk2NzQsMzA3ODksMzE0MTgsMzE0MjksMzE5OTgsMzM5MDksMzUyMTUsMzYyMTEsMzY5MTcsMzgzMTIsMjEyNDMsMjIzNDMsMzAwMjMsMzE1ODQsMzM3NDAsMzc0MDYsNjM3NTIsMjcyMjQsMjA4MTEsMjEw''@;'; put 'put ''NjcsMjExMjcsMjUxMTksMjY4NDAsMjY5OTcsMzg1NTMsMjA2NzcsMjExNTYsMjEyMjAsMjUwMjcsMjYwMjAsMjY2ODEsMjcxMzUsMjk4MjIsMzE1NjMsMzM0NjUsMzM3NzEsMzUyNTAsMzU2NDEsMzY4MTcsMzkyNDEsNjM3NTMsMjAxNzAsMjI5MzUsMjU4MTAsMjYxMjksMjcyNzgsMjk3NDgs''@;'; put 'put ''MzExMDUsMzExNjUsMzM0NDksMzQ5NDIsMzQ5NDMsMzUxNjcsNjM3NTQsMzc2NzAsMjAyMzUsMjE0NTAsMjQ2MTMsMjUyMDEsMjc3NjIsMzIwMjYsMzIxMDIsMjAxMjAsMjA4MzQsMzA2ODQsMzI5NDMsMjAyMjUsMjAyMzgsMjA4NTQsMjA4NjQsMjE5ODAsMjIxMjAsMjIzMzEsMjI1MjIsMjI1''@;'; put 'put ''MjQsMjI4MDQsMjI4NTUsMjI5MzEsMjM0OTIsMjM2OTYsMjM4MjIsMjQwNDksMjQxOTAsMjQ1MjQsMjUyMTYsMjYwNzEsMjYwODMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjYzOTgsMjYzOTksMjY0NjIsMjY4MjcsMjY4MjAsMjcyMzEsMjc0NTAsMjc2ODMsMjc3NzMsMjc3NzgsMjgxMDMsMjk1OTIsMjk3MzQsMjk3MzgsMjk4MjYsMjk4NTksMzAwNzIsMzAw''@;'; put 'put ''NzksMzA4NDksMzA5NTksMzEwNDEsMzEwNDcsMzEwNDgsMzEwOTgsMzE2MzcsMzJlMywzMjE4NiwzMjY0OCwzMjc3NCwzMjgxMywzMjkwOCwzNTM1MiwzNTY2MywzNTkxMiwzNjIxNSwzNzY2NSwzNzY2OCwzOTEzOCwzOTI0OSwzOTQzOCwzOTQzOSwzOTUyNSw0MDU5NCwzMjIwMiwyMDM0Miwy''@;'; put 'put ''MTUxMywyNTMyNiwyNjcwOCwzNzMyOSwyMTkzMSwyMDc5NCw2Mzc1NSw2Mzc1NiwyMzA2OCwyNTA2Miw2Mzc1NywyNTI5NSwyNTM0Myw2Mzc1OCw2Mzc1OSw2Mzc2MCw2Mzc2MSw2Mzc2Miw2Mzc2MywzNzAyNyw2Mzc2NCw2Mzc2NSw2Mzc2Niw2Mzc2Nyw2Mzc2OCwzNTU4Miw2Mzc2OSw2Mzc3''@;'; put 'put ''MCw2Mzc3MSw2Mzc3MiwyNjI2Miw2Mzc3MywyOTAxNCw2Mzc3NCw2Mzc3NSwzODYyNyw2Mzc3NiwyNTQyMywyNTQ2NiwyMTMzNSw2Mzc3NywyNjUxMSwyNjk3NiwyODI3NSw2Mzc3OCwzMDAwNyw2Mzc3OSw2Mzc4MCw2Mzc4MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjAxMyw2Mzc4Miw2Mzc4MywzNDkzMCwyMjIxOCwyMzA2NCw2Mzc4NCw2Mzc4NSw2Mzc4''@;'; put 'put ''Niw2Mzc4Nyw2Mzc4OCwyMDAzNSw2Mzc4OSwyMDgzOSwyMjg1NiwyNjYwOCwzMjc4NCw2Mzc5MCwyMjg5OSwyNDE4MCwyNTc1NCwzMTE3OCwyNDU2NSwyNDY4NCwyNTI4OCwyNTQ2NywyMzUyNywyMzUxMSwyMTE2Miw2Mzc5MSwyMjkwMCwyNDM2MSwyNDU5NCw2Mzc5Miw2Mzc5Myw2Mzc5NCwy''@;'; put 'put ''OTc4NSw2Mzc5NSw2Mzc5Niw2Mzc5Nyw2Mzc5OCw2Mzc5OSw2MzgwMCwzOTM3Nyw2MzgwMSw2MzgwMiw2MzgwMyw2MzgwNCw2MzgwNSw2MzgwNiw2MzgwNyw2MzgwOCw2MzgwOSw2MzgxMCw2MzgxMSwyODYxMSw2MzgxMiw2MzgxMywzMzIxNSwzNjc4NiwyNDgxNyw2MzgxNCw2MzgxNSwzMzEy''@;'; put 'put ''Niw2MzgxNiw2MzgxNywyMzYxNSw2MzgxOCw2MzgxOSw2MzgyMCw2MzgyMSw2MzgyMiw2MzgyMyw2MzgyNCw2MzgyNSwyMzI3MywzNTM2NSwyNjQ5MSwzMjAxNiw2MzgyNiw2MzgyNyw2MzgyOCw2MzgyOSw2MzgzMCw2MzgzMSwzMzAyMSw2MzgzMiw2MzgzMywyMzYxMiwyNzg3NywyMTMxMSwy''@;'; put 'put ''ODM0NiwyMjgxMCwzMzU5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCwyMDAyNSwyMDE1MCwyMDI5NCwyMTkzNCwyMjI5NiwyMjcyNywyNDQwNiwyNjAzOSwyNjA4NiwyNzI2NCwyNzU3MywyODIzNywzMDcwMSwzMTQ3MSwzMTc3NCwzMjIyMiwzNDUwNywzNDk2MiwzNzE3MCwzNzcyMywyNTc4NywyODYwNiwyOTU2MiwzMDEzNiwzNjk0OCwyMTg0NiwyMjM0OSwy''@;'; put 'put ''NTAxOCwyNTgxMiwyNjMxMSwyODEyOSwyODI1MSwyODUyNSwyODYwMSwzMDE5MiwzMjgzNSwzMzIxMywzNDExMywzNTIwMywzNTUyNywzNTY3NCwzNzY2MywyNzc5NSwzMDAzNSwzMTU3MiwzNjM2NywzNjk1NywyMTc3NiwyMjUzMCwyMjYxNiwyNDE2MiwyNTA5NSwyNTc1OCwyNjg0OCwzMDA3''@;'; put 'put ''MCwzMTk1OCwzNDczOSw0MDY4MCwyMDE5NSwyMjQwOCwyMjM4MiwyMjgyMywyMzU2NSwyMzcyOSwyNDExOCwyNDQ1MywyNTE0MCwyNTgyNSwyOTYxOSwzMzI3NCwzNDk1NSwzNjAyNCwzODUzOCw0MDY2NywyMzQyOSwyNDUwMywyNDc1NSwyMDQ5OCwyMDk5MiwyMTA0MCwyMjI5NCwyMjU4MSwy''@;'; put 'put ''MjYxNSwyMzU2NiwyMzY0OCwyMzc5OCwyMzk0NywyNDIzMCwyNDQ2NiwyNDc2NCwyNTM2MSwyNTQ4MSwyNTYyMywyNjY5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg3MywyNzMzMCwyODEyMCwyODE5MywyODM3MiwyODY0NCwyOTE4MiwzMDQyOCwzMDU4NSwzMTE1MywzMTI5MSwzMzc5NiwzNTI0MSwzNjA3NywzNjMzOSwzNjQyNCwzNjg2NywzNjg4NCwz''@;'; put 'put ''Njk0NywzNzExNywzNzcwOSwzODUxOCwzODg3NiwyNzYwMiwyODY3OCwyOTI3MiwyOTM0NiwyOTU0NCwzMDU2MywzMTE2NywzMTcxNiwzMjQxMSwzNTcxMiwyMjY5NywyNDc3NSwyNTk1OCwyNjEwOSwyNjMwMiwyNzc4OCwyODk1OCwyOTEyOSwzNTkzMCwzODkzMSwyMDA3NywzMTM2MSwyMDE4''@;'; put 'put ''OSwyMDkwOCwyMDk0MSwyMTIwNSwyMTUxNiwyNDk5OSwyNjQ4MSwyNjcwNCwyNjg0NywyNzkzNCwyODU0MCwzMDE0MCwzMDY0MywzMTQ2MSwzMzAxMiwzMzg5MSwzNzUwOSwyMDgyOCwyNjAwNywyNjQ2MCwyNjUxNSwzMDE2OCwzMTQzMSwzMzY1MSw2MzgzNCwzNTkxMCwzNjg4NywzODk1Nywy''@;'; put 'put ''MzY2MywzMzIxNiwzMzQzNCwzNjkyOSwzNjk3NSwzNzM4OSwyNDQ3MSwyMzk2NSwyNzIyNSwyOTEyOCwzMDMzMSwzMTU2MSwzNDI3NiwzNTU4OCwzNzE1OSwzOTQ3MiwyMTg5NSwyNTA3OCw2MzgzNSwzMDMxMywzMjY0NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNDM2NywzNDc0NiwzNTA2NCwzNzAwNyw2MzgzNiwyNzkzMSwyODg4OSwyOTY2MiwzMjA5Nywz''@;'; put 'put ''Mzg1Myw2MzgzNywzNzIyNiwzOTQwOSw2MzgzOCwyMDA5OCwyMTM2NSwyNzM5NiwyNzQxMCwyODczNCwyOTIxMSwzNDM0OSw0MDQ3OCwyMTA2OCwzNjc3MSwyMzg4OCwyNTgyOSwyNTkwMCwyNzQxNCwyODY1MSwzMTgxMSwzMjQxMiwzNDI1MywzNTE3MiwzNTI2MSwyNTI4OSwzMzI0MCwzNDg0''@;'; put 'put ''NywyNDI2NiwyNjM5MSwyODAxMCwyOTQzNiwyOTcwMSwyOTgwNywzNDY5MCwzNzA4NiwyMDM1OCwyMzgyMSwyNDQ4MCwzMzgwMiwyMDkxOSwyNTUwNCwzMDA1MywyMDE0MiwyMDQ4NiwyMDg0MSwyMDkzNywyNjc1MywyNzE1MywzMTkxOCwzMTkyMSwzMTk3NSwzMzM5MSwzNTUzOCwzNjYzNSwz''@;'; put 'put ''NzMyNywyMDQwNiwyMDc5MSwyMTIzNywyMTU3MCwyNDMwMCwyNDk0MiwyNTE1MCwyNjA1MywyNzM1NCwyODY3MCwzMTAxOCwzNDI2OCwzNDg1MSwzODMxNywzOTUyMiwzOTUzMCw0MDU5OSw0MDY1NCwyMTE0NywyNjMxMCwyNzUxMSwyODcwMSwzMTAxOSwzNjcwNiwzODcyMiwyNDk3NiwyNTA4''@;'; put 'put ''OCwyNTg5MSwyODQ1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwy''@;'; put 'put ''OTAwMSwyOTgzMywzMjI0NCwzMjg3OSwzNDAzMCwzNjY0NiwzNjg5OSwzNzcwNiwyMDkyNSwyMTAxNSwyMTE1NSwyNzkxNiwyODg3MiwzNTAxMCwyNDI2NSwyNTk4NiwyNzU2NiwyODYxMCwzMTgwNiwyOTU1NywyMDE5NiwyMDI3OCwyMjI2NSw2MzgzOSwyMzczOCwyMzk5NCwyNDYwNCwyOTYx''@;'; put 'put ''OCwzMTUzMywzMjY2NiwzMjcxOCwzMjgzOCwzNjg5NCwzNzQyOCwzODY0NiwzODcyOCwzODkzNiw0MDgwMSwyMDM2MywyODU4MywzMTE1MCwzNzMwMCwzODU4MywyMTIxNCw2Mzg0MCwyNTczNiwyNTc5NiwyNzM0NywyODUxMCwyODY5NiwyOTIwMCwzMDQzOSwzMjc2OSwzNDMxMCwzNDM5Niwz''@;'; put 'put ''NjMzNSwzNjYxMywzODcwNiwzOTc5MSw0MDQ0Miw0MDU2NSwzMDg2MCwzMTEwMywzMjE2MCwzMzczNywzNzYzNiw0MDU3NSw0MDU5NSwzNTU0MiwyMjc1MSwyNDMyNCwyNjQwNywyODcxMSwyOTkwMywzMTg0MCwzMjg5NCwyMDc2OSwyODcxMiwyOTI4MiwzMDkyMiwzNjAzNCwzNjA1OCwzNjA4''@;'; put 'put ''NCwzODY0NywyMDEwMiwyMDY5OCwyMzUzNCwyNDI3OCwyNjAwOSwyOTEzNCwzMDI3NCwzMDYzNywzMjg0MiwzNDA0NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjk4OCwzOTcxOSw0MDg0NSwyMjc0NCwyMzEwNSwyMzY1MCwyNzE1NSwyODEyMiwyODQzMSwzMDI2NywzMjA0NywzMjMxMSwzNDA3OCwzNTEyOCwzNzg2MCwzODQ3NSwyMTEyOSwyNjA2NiwyNjYx''@;'; put 'put ''MSwyNzA2MCwyNzk2OSwyODMxNiwyODY4NywyOTcwNSwyOTc5MiwzMDA0MSwzMDI0NCwzMDgyNywzNTYyOCwzOTAwNiwyMDg0NSwyNTEzNCwzODUyMCwyMDM3NCwyMDUyMywyMzgzMywyODEzOCwzMjE4NCwzNjY1MCwyNDQ1OSwyNDkwMCwyNjY0Nyw2Mzg0MSwzODUzNCwyMTIwMiwzMjkwNywy''@;'; put 'put ''MDk1NiwyMDk0MCwyNjk3NCwzMTI2MCwzMjE5MCwzMzc3NywzODUxNywyMDQ0MiwyMTAzMywyMTQwMCwyMTUxOSwyMTc3NCwyMzY1MywyNDc0MywyNjQ0NiwyNjc5MiwyODAxMiwyOTMxMywyOTQzMiwyOTcwMiwyOTgyNyw2Mzg0MiwzMDE3OCwzMTg1MiwzMjYzMywzMjY5NiwzMzY3MywzNTAy''@;'; put 'put ''MywzNTA0MSwzNzMyNCwzNzMyOCwzODYyNiwzOTg4MSwyMTUzMywyODU0MiwyOTEzNiwyOTg0OCwzNDI5OCwzNjUyMiwzODU2Myw0MDAyMyw0MDYwNywyNjUxOSwyODEwNywyOTc0NywzMzI1NiwzODY3OCwzMDc2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTQzNSwzMTUyMCwzMTg5MCwyNTcwNSwyOTgwMiwzMDE5NCwzMDkwOCwzMDk1MiwzOTM0MCwzOTc2''@;'; put 'put ''NCw0MDYzNSwyMzUxOCwyNDE0OSwyODQ0OCwzMzE4MCwzMzcwNywzN2UzLDE5OTc1LDIxMzI1LDIzMDgxLDI0MDE4LDI0Mzk4LDI0OTMwLDI1NDA1LDI2MjE3LDI2MzY0LDI4NDE1LDI4NDU5LDI4NzcxLDMwNjIyLDMzODM2LDM0MDY3LDM0ODc1LDM2NjI3LDM5MjM3LDM5OTk1LDIxNzg4LDI1''@;'; put 'put ''MjczLDI2NDExLDI3ODE5LDMzNTQ1LDM1MTc4LDM4Nzc4LDIwMTI5LDIyOTE2LDI0NTM2LDI0NTM3LDI2Mzk1LDMyMTc4LDMyNTk2LDMzNDI2LDMzNTc5LDMzNzI1LDM2NjM4LDM3MDE3LDIyNDc1LDIyOTY5LDIzMTg2LDIzNTA0LDI2MTUxLDI2NTIyLDI2NzU3LDI3NTk5LDI5MDI4LDMyNjI5''@;'; put 'put ''LDM2MDIzLDM2MDY3LDM2OTkzLDM5NzQ5LDMzMDMyLDM1OTc4LDM4NDc2LDM5NDg4LDQwNjEzLDIzMzkxLDI3NjY3LDI5NDY3LDMwNDUwLDMwNDMxLDMzODA0LDIwOTA2LDM1MjE5LDIwODEzLDIwODg1LDIxMTkzLDI2ODI1LDI3Nzk2LDMwNDY4LDMwNDk2LDMyMTkxLDMyMjM2LDM4NzU0LDQw''@;'; put 'put ''NjI5LDI4MzU3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM0MDY1''@;'; put 'put ''LDIwOTAxLDIxNTE3LDIxNjI5LDI2MTI2LDI2MjY5LDI2OTE5LDI4MzE5LDMwMzk5LDMwNjA5LDMzNTU5LDMzOTg2LDM0NzE5LDM3MjI1LDM3NTI4LDQwMTgwLDM0OTQ2LDIwMzk4LDIwODgyLDIxMjE1LDIyOTgyLDI0MTI1LDI0OTE3LDI1NzIwLDI1NzIxLDI2Mjg2LDI2NTc2LDI3MTY5LDI3''@;'; put 'put ''NTk3LDI3NjExLDI5Mjc5LDI5MjgxLDI5NzYxLDMwNTIwLDMwNjgzLDMyNzkxLDMzNDY4LDMzNTQxLDM1NTg0LDM1NjI0LDM1OTgwLDI2NDA4LDI3NzkyLDI5Mjg3LDMwNDQ2LDMwNTY2LDMxMzAyLDQwMzYxLDI3NTE5LDI3Nzk0LDIyODE4LDI2NDA2LDMzOTQ1LDIxMzU5LDIyNjc1LDIyOTM3''@;'; put 'put ''LDI0Mjg3LDI1NTUxLDI2MTY0LDI2NDgzLDI4MjE4LDI5NDgzLDMxNDQ3LDMzNDk1LDM3NjcyLDIxMjA5LDI0MDQzLDI1MDA2LDI1MDM1LDI1MDk4LDI1Mjg3LDI1NzcxLDI2MDgwLDI2OTY5LDI3NDk0LDI3NTk1LDI4OTYxLDI5Njg3LDMwMDQ1LDMyMzI2LDMzMzEwLDMzNTM4LDM0MTU0LDM1''@;'; put 'put ''NDkxLDM2MDMxLDM4Njk1LDQwMjg5LDIyNjk2LDQwNjY0LDIwNDk3LDIxMDA2LDIxNTYzLDIxODM5LDI1OTkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI3NzY2LDMyMDEwLDMyMDExLDMyODYyLDM0NDQyLDM4MjcyLDM4NjM5LDIxMjQ3LDI3Nzk3LDI5Mjg5LDIxNjE5LDIzMTk0LDIzNjE0LDIzODgzLDI0Mzk2LDI0NDk0LDI2NDEwLDI2ODA2LDI2OTc5LDI4''@;'; put 'put ''MjIwLDI4MjI4LDMwNDczLDMxODU5LDMyNjU0LDM0MTgzLDM1NTk4LDM2ODU1LDM4NzUzLDQwNjkyLDIzNzM1LDI0NzU4LDI0ODQ1LDI1MDAzLDI1OTM1LDI2MTA3LDI2MTA4LDI3NjY1LDI3ODg3LDI5NTk5LDI5NjQxLDMyMjI1LDM4MjkyLDIzNDk0LDM0NTg4LDM1NjAwLDIxMDg1LDIxMzM4''@;'; put 'put ''LDI1MjkzLDI1NjE1LDI1Nzc4LDI2NDIwLDI3MTkyLDI3ODUwLDI5NjMyLDI5ODU0LDMxNjM2LDMxODkzLDMyMjgzLDMzMTYyLDMzMzM0LDM0MTgwLDM2ODQzLDM4NjQ5LDM5MzYxLDIwMjc2LDIxMzIyLDIxNDUzLDIxNDY3LDI1MjkyLDI1NjQ0LDI1ODU2LDI2MDAxLDI3MDc1LDI3ODg2LDI4''@;'; put 'put ''NTA0LDI5Njc3LDMwMDM2LDMwMjQyLDMwNDM2LDMwNDYwLDMwOTI4LDMwOTcxLDMxMDIwLDMyMDcwLDMzMzI0LDM0Nzg0LDM2ODIwLDM4OTMwLDM5MTUxLDIxMTg3LDI1MzAwLDI1NzY1LDI4MTk2LDI4NDk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMwMzMyLDM2Mjk5LDM3Mjk3LDM3NDc0LDM5NjYyLDM5NzQ3LDIwNTE1LDIwNjIxLDIyMzQ2LDIyOTUyLDIz''@;'; put 'put ''NTkyLDI0MTM1LDI0NDM5LDI1MTUxLDI1OTE4LDI2MDQxLDI2MDQ5LDI2MTIxLDI2NTA3LDI3MDM2LDI4MzU0LDMwOTE3LDMyMDMzLDMyOTM4LDMzMTUyLDMzMzIzLDMzNDU5LDMzOTUzLDM0NDQ0LDM1MzcwLDM1NjA3LDM3MDMwLDM4NDUwLDQwODQ4LDIwNDkzLDIwNDY3LDYzODQzLDIyNTIx''@;'; put 'put ''LDI0NDcyLDI1MzA4LDI1NDkwLDI2NDc5LDI4MjI3LDI4OTUzLDMwNDAzLDMyOTcyLDMyOTg2LDM1MDYwLDM1MDYxLDM1MDk3LDM2MDY0LDM2NjQ5LDM3MTk3LDM4NTA2LDIwMjcxLDIwMzM2LDI0MDkxLDI2NTc1LDI2NjU4LDMwMzMzLDMwMzM0LDM5NzQ4LDI0MTYxLDI3MTQ2LDI5MDMzLDI5''@;'; put 'put ''MTQwLDMwMDU4LDYzODQ0LDMyMzIxLDM0MTE1LDM0MjgxLDM5MTMyLDIwMjQwLDMxNTY3LDMyNjI0LDM4MzA5LDIwOTYxLDI0MDcwLDI2ODA1LDI3NzEwLDI3NzI2LDI3ODY3LDI5MzU5LDMxNjg0LDMzNTM5LDI3ODYxLDI5NzU0LDIwNzMxLDIxMTI4LDIyNzIxLDI1ODE2LDI3Mjg3LDI5ODYz''@;'; put 'put ''LDMwMjk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMwODg3LDM0''@;'; put 'put ''MzI3LDM4MzcwLDM4NzEzLDYzODQ1LDIxMzQyLDI0MzIxLDM1NzIyLDM2Nzc2LDM2NzgzLDM3MDAyLDIxMDI5LDMwNjI5LDQwMDA5LDQwNzEyLDE5OTkzLDIwNDgyLDIwODUzLDIzNjQzLDI0MTgzLDI2MTQyLDI2MTcwLDI2NTY0LDI2ODIxLDI4ODUxLDI5OTUzLDMwMTQ5LDMxMTc3LDMxNDUz''@;'; put 'put ''LDM2NjQ3LDM5MjAwLDM5NDMyLDIwNDQ1LDIyNTYxLDIyNTc3LDIzNTQyLDI2MjIyLDI3NDkzLDI3OTIxLDI4MjgyLDI4NTQxLDI5NjY4LDI5OTk1LDMzNzY5LDM1MDM2LDM1MDkxLDM1Njc2LDM2NjI4LDIwMjM5LDIwNjkzLDIxMjY0LDIxMzQwLDIzNDQzLDI0NDg5LDI2MzgxLDMxMTE5LDMz''@;'; put 'put ''MTQ1LDMzNTgzLDM0MDY4LDM1MDc5LDM1MjA2LDM2NjY1LDM2NjY3LDM5MzMzLDM5OTU0LDI2NDEyLDIwMDg2LDIwNDcyLDIyODU3LDIzNTUzLDIzNzkxLDIzNzkyLDI1NDQ3LDI2ODM0LDI4OTI1LDI5MDkwLDI5NzM5LDMyMjk5LDM0MDI4LDM0NTYyLDM2ODk4LDM3NTg2LDQwMTc5LDE5OTgx''@;'; put 'put ''LDIwMTg0LDIwNDYzLDIwNjEzLDIxMDc4LDIxMTAzLDIxNTQyLDIxNjQ4LDIyNDk2LDIyODI3LDIzMTQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIzMzg2LDIzNDEzLDIzNTAwLDI0MjIwLDYzODQ2LDI1MjA2LDI1OTc1LDI2MDIzLDI4MDE0LDI4MzI1LDI5MjM4LDMxNTI2LDMxODA3LDMyNTY2LDMzMTA0LDMzMTA1LDMzMTc4LDMzMzQ0LDMzNDMzLDMzNzA1''@;'; put 'put ''LDM1MzMxLDM2ZTMsMzYwNzAsMzYwOTEsMzYyMTIsMzYyODIsMzcwOTYsMzczNDAsMzg0MjgsMzg0NjgsMzkzODUsNDAxNjcsMjEyNzEsMjA5OTgsMjE1NDUsMjIxMzIsMjI3MDcsMjI4NjgsMjI4OTQsMjQ1NzUsMjQ5OTYsMjUxOTgsMjYxMjgsMjc3NzQsMjg5NTQsMzA0MDYsMzE4ODEsMzE5''@;'; put 'put ''NjYsMzIwMjcsMzM0NTIsMzYwMzMsMzg2NDAsNjM4NDcsMjAzMTUsMjQzNDMsMjQ0NDcsMjUyODIsMjM4NDksMjYzNzksMjY4NDIsMzA4NDQsMzIzMjMsNDAzMDAsMTk5ODksMjA2MzMsMjEyNjksMjEyOTAsMjEzMjksMjI5MTUsMjMxMzgsMjQxOTksMjQ3NTQsMjQ5NzAsMjUxNjEsMjUyMDks''@;'; put 'put ''MjZlMywyNjUwMywyNzA0NywyNzYwNCwyNzYwNiwyNzYwNywyNzYwOCwyNzgzMiw2Mzg0OCwyOTc0OSwzMDIwMiwzMDczOCwzMDg2NSwzMTE4OSwzMTE5MiwzMTg3NSwzMjIwMywzMjczNywzMjkzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMzA4NiwzMzIxOCwzMzc3OCwzNDU4NiwzNTA0OCwzNTUxMywzNTY5MiwzNjAyNywzNzE0NSwzODc1MCwzOTEzMSw0''@;'; put 'put ''MDc2MywyMjE4OCwyMzMzOCwyNDQyOCwyNTk5NiwyNzMxNSwyNzU2NywyNzk5NiwyODY1NywyODY5MywyOTI3NywyOTYxMywzNjAwNywzNjA1MSwzODk3MSwyNDk3NywyNzcwMywzMjg1NiwzOTQyNSwyMDA0NSwyMDEwNywyMDEyMywyMDE4MSwyMDI4MiwyMDI4NCwyMDM1MSwyMDQ0NywyMDcz''@;'; put 'put ''NSwyMTQ5MCwyMTQ5NiwyMTc2NiwyMTk4NywyMjIzNSwyMjc2MywyMjg4MiwyMzA1NywyMzUzMSwyMzU0NiwyMzU1NiwyNDA1MSwyNDEwNywyNDQ3MywyNDYwNSwyNTQ0OCwyNjAxMiwyNjAzMSwyNjYxNCwyNjYxOSwyNjc5NywyNzUxNSwyNzgwMSwyNzg2MywyODE5NSwyODY4MSwyOTUwOSwz''@;'; put 'put ''MDcyMiwzMTAzOCwzMTA0MCwzMTA3MiwzMTE2OSwzMTcyMSwzMjAyMywzMjExNCwzMjkwMiwzMzI5MywzMzY3OCwzNDAwMSwzNDUwMywzNTAzOSwzNTQwOCwzNTQyMiwzNTYxMywzNjA2MCwzNjE5OCwzNjc4MSwzNzAzNCwzOTE2NCwzOTM5MSw0MDYwNSwyMTA2Niw2Mzg0OSwyNjM4OCw2Mzg1''@;'; put 'put ''MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDYzMiwyMTAzNCwy''@;'; put 'put ''MzY2NSwyNTk1NSwyNzczMywyOTY0MiwyOTk4NywzMDEwOSwzMTYzOSwzMzk0OCwzNzI0MCwzODcwNCwyMDA4NywyNTc0NiwyNzU3OCwyOTAyMiwzNDIxNywxOTk3Nyw2Mzg1MSwyNjQ0MSwyNjg2MiwyODE4MywzMzQzOSwzNDA3MiwzNDkyMywyNTU5MSwyODU0NSwzNzM5NCwzOTA4NywxOTk3''@;'; put 'put ''OCwyMDY2MywyMDY4NywyMDc2NywyMTgzMCwyMTkzMCwyMjAzOSwyMzM2MCwyMzU3NywyMzc3NiwyNDEyMCwyNDIwMiwyNDIyNCwyNDI1OCwyNDgxOSwyNjcwNSwyNzIzMywyODI0OCwyOTI0NSwyOTI0OCwyOTM3NiwzMDQ1NiwzMTA3NywzMTY2NSwzMjcyNCwzNTA1OSwzNTMxNiwzNTQ0Mywz''@;'; put 'put ''NTkzNywzNjA2MiwzODY4NCwyMjYyMiwyOTg4NSwzNjA5MywyMTk1OSw2Mzg1MiwzMTMyOSwzMjAzNCwzMzM5NCwyOTI5OCwyOTk4MywyOTk4OSw2Mzg1MywzMTUxMywyMjY2MSwyMjc3OSwyMzk5NiwyNDIwNywyNDI0NiwyNDQ2NCwyNDY2MSwyNTIzNCwyNTQ3MSwyNTkzMywyNjI1NywyNjMy''@;'; put 'put ''OSwyNjM2MCwyNjY0NiwyNjg2NiwyOTMxMiwyOTc5MCwzMTU5OCwzMjExMCwzMjIxNCwzMjYyNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjk5NywzMzI5OCwzNDIyMywzNTE5OSwzNTQ3NSwzNjg5MywzNzYwNCw0MDY1Myw0MDczNiwyMjgwNSwyMjg5MywyNDEwOSwyNDc5NiwyNjEzMiwyNjIyNywyNjUxMiwyNzcyOCwyODEwMSwyODUxMSwzMDcwNywzMDg4''@;'; put 'put ''OSwzMzk5MCwzNzMyMywzNzY3NSwyMDE4NSwyMDY4MiwyMDgwOCwyMTg5MiwyMzMwNywyMzQ1OSwyNTE1OSwyNTk4MiwyNjA1OSwyODIxMCwyOTA1MywyOTY5NywyOTc2NCwyOTgzMSwyOTg4NywzMDMxNiwzMTE0NiwzMjIxOCwzMjM0MSwzMjY4MCwzMzE0NiwzMzIwMywzMzMzNywzNDMzMCwz''@;'; put 'put ''NDc5NiwzNTQ0NSwzNjMyMywzNjk4NCwzNzUyMSwzNzkyNSwzOTI0NSwzOTg1NCwyMTM1MiwyMzYzMywyNjk2NCwyNzg0NCwyNzk0NSwyODIwMywzMzI5MiwzNDIwMywzNTEzMSwzNTM3MywzNTQ5OCwzODYzNCw0MDgwNywyMTA4OSwyNjI5NywyNzU3MCwzMjQwNiwzNDgxNCwzNjEwOSwzODI3''@;'; put 'put ''NSwzODQ5MywyNTg4NSwyODA0MSwyOTE2Niw2Mzg1NCwyMjQ3OCwyMjk5NSwyMzQ2OCwyNDYxNSwyNDgyNiwyNTEwNCwyNjE0MywyNjIwNywyOTQ4MSwyOTY4OSwzMDQyNywzMDQ2NSwzMTU5NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjg1NCwzMjg4MiwzMzEyNSwzNTQ4OCwzNzI2NiwxOTk5MCwyMTIxOCwyNzUwNiwyNzkyNywzMTIzNywzMTU0NSwzMjA0''@;'; put 'put ''OCw2Mzg1NSwzNjAxNiwyMTQ4NCwyMjA2MywyMjYwOSwyMzQ3NywyMzU2NywyMzU2OSwyNDAzNCwyNTE1MiwyNTQ3NSwyNTYyMCwyNjE1NywyNjgwMywyNzgzNiwyODA0MCwyODMzNSwyODcwMywyODgzNiwyOTEzOCwyOTk5MCwzMDA5NSwzMDA5NCwzMDIzMywzMTUwNSwzMTcxMiwzMTc4Nywz''@;'; put 'put ''MjAzMiwzMjA1NywzNDA5MiwzNDE1NywzNDMxMSwzNTM4MCwzNjg3NywzNjk2MSwzNzA0NSwzNzU1OSwzODkwMiwzOTQ3OSwyMDQzOSwyMzY2MCwyNjQ2MywyODA0OSwzMTkwMywzMjM5NiwzNTYwNiwzNjExOCwzNjg5NSwyMzQwMywyNDA2MSwyNTYxMywzMzk4NCwzNjk1NiwzOTEzNywyOTU3''@;'; put 'put ''NSwyMzQzNSwyNDczMCwyNjQ5NCwyODEyNiwzNTM1OSwzNTQ5NCwzNjg2NSwzODkyNCwyMTA0Nyw2Mzg1NiwyODc1MywzMDg2MiwzNzc4MiwzNDkyOCwzNzMzNSwyMDQ2MiwyMTQ2MywyMjAxMywyMjIzNCwyMjQwMiwyMjc4MSwyMzIzNCwyMzQzMiwyMzcyMywyMzc0NCwyNDEwMSwyNDgzMyxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNTEwMSwyNTE2MywyNTQ4''@;'; put 'put ''MCwyNTYyOCwyNTkxMCwyNTk3NiwyNzE5MywyNzUzMCwyNzcwMCwyNzkyOSwyODQ2NSwyOTE1OSwyOTQxNywyOTU2MCwyOTcwMywyOTg3NCwzMDI0NiwzMDU2MSwzMTE2OCwzMTMxOSwzMTQ2NiwzMTkyOSwzMjE0MywzMjE3MiwzMjM1MywzMjY3MCwzMzA2NSwzMzU4NSwzMzkzNiwzNDAxMCwz''@;'; put 'put ''NDI4MiwzNDk2NiwzNTUwNCwzNTcyOCwzNjY2NCwzNjkzMCwzNjk5NSwzNzIyOCwzNzUyNiwzNzU2MSwzODUzOSwzODU2NywzODU2OCwzODYxNCwzODY1NiwzODkyMCwzOTMxOCwzOTYzNSwzOTcwNiwyMTQ2MCwyMjY1NCwyMjgwOSwyMzQwOCwyMzQ4NywyODExMywyODUwNiwyOTA4NywyOTcy''@;'; put 'put ''OSwyOTg4MSwzMjkwMSwzMzc4OSwyNDAzMywyNDQ1NSwyNDQ5MCwyNDY0MiwyNjA5MiwyNjY0MiwyNjk5MSwyNzIxOSwyNzUyOSwyNzk1NywyODE0NywyOTY2NywzMDQ2MiwzMDYzNiwzMTU2NSwzMjAyMCwzMzA1OSwzMzMwOCwzMzYwMCwzNDAzNiwzNDE0NywzNTQyNiwzNTUyNCwzNzI1NSwz''@;'; put 'put ''NzY2MiwzODkxOCwzOTM0OCwyNTEwMCwzNDg5OSwzNjg0OCwzNzQ3NywyMzgxNSwyMzg0NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMzkxMywyOTc5MSwzMzE4MSwzNDY2NCwyODYyOSwyNTM0MiwzMjcyMiwzNTEyNiwzNTE4NiwxOTk5OCwyMDA1NiwyMDcxMSwyMTIxMywyMTMxOSwyNTIxNSwyNjExOSwzMjM2MSwzNDgyMSwzODQ5NCwyMDM2NSwyMTI3Mywy''@;'; put 'put ''MjA3MCwyMjk4NywyMzIwNCwyMzYwOCwyMzYzMCwyMzYyOSwyNDA2NiwyNDMzNywyNDY0MywyNjA0NSwyNjE1OSwyNjE3OCwyNjU1OCwyNjYxMiwyOTQ2OCwzMDY5MCwzMTAzNCwzMjcwOSwzMzk0MCwzMzk5NywzNTIyMiwzNTQzMCwzNTQzMywzNTU1MywzNTkyNSwzNTk2MiwyMjUxNiwyMzUw''@;'; put 'put ''OCwyNDMzNSwyNDY4NywyNTMyNSwyNjg5MywyNzU0MiwyODI1MiwyOTA2MCwzMTY5OCwzNDY0NSwzNTY3MiwzNjYwNiwzOTEzNSwzOTE2NiwyMDI4MCwyMDM1MywyMDQ0OSwyMTYyNywyMzA3MiwyMzQ4MCwyNDg5MiwyNjAzMiwyNjIxNiwyOTE4MCwzMDAwMywzMTA3MCwzMjA1MSwzMzEwMiwz''@;'; put 'put ''MzI1MSwzMzY4OCwzNDIxOCwzNDI1NCwzNDU2MywzNTMzOCwzNjUyMywzNjc2Myw2Mzg1NywzNjgwNSwyMjgzMywyMzQ2MCwyMzUyNiwyNDcxMywyMzUyOSwyMzU2MywyNDUxNSwyNzc3NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2Mzg1OCwyODE0NSwyODY4MywyOTk3OCwzMzQ1NSwzNTU3NCwyMDE2MCwyMTMxMyw2Mzg1OSwzODYxNywyNzY2MywyMDEyNiwy''@;'; put 'put ''MDQyMCwyMDgxOCwyMTg1NCwyMzA3NywyMzc4NCwyNTEwNSwyOTI3MywzMzQ2OSwzMzcwNiwzNDU1OCwzNDkwNSwzNTM1NywzODQ2MywzODU5NywzOTE4Nyw0MDIwMSw0MDI4NSwyMjUzOCwyMzczMSwyMzk5NywyNDEzMiwyNDgwMSwyNDg1MywyNTU2OSwyNzEzOCwyODE5NywzNzEyMiwzNzcx''@;'; put 'put ''NiwzODk5MCwzOTk1Miw0MDgyMywyMzQzMywyMzczNiwyNTM1MywyNjE5MSwyNjY5NiwzMDUyNCwzODU5MywzODc5NywzODk5NiwzOTgzOSwyNjAxNywzNTU4NSwzNjU1NSwzODMzMiwyMTgxMywyMzcyMSwyNDAyMiwyNDI0NSwyNjI2MywzMDI4NCwzMzc4MCwzODM0MywyMjczOSwyNTI3Niwy''@;'; put 'put ''OTM5MCw0MDIzMiwyMDIwOCwyMjgzMCwyNDU5MSwyNjE3MSwyNzUyMywzMTIwNyw0MDIzMCwyMTM5NSwyMTY5NiwyMjQ2NywyMzgzMCwyNDg1OSwyNjMyNiwyODA3OSwzMDg2MSwzMzQwNiwzODU1MiwzODcyNCwyMTM4MCwyNTIxMiwyNTQ5NCwyODA4MiwzMjI2NiwzMzA5OSwzODk4OSxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNzM4NywzMjU4OCw0MDM2Nyw0''@;'; put 'put ''MDQ3NCwyMDA2MywyMDUzOSwyMDkxOCwyMjgxMiwyNDgyNSwyNTU5MCwyNjkyOCwyOTI0MiwzMjgyMiw2Mzg2MCwzNzMyNiwyNDM2OSw2Mzg2MSw2Mzg2MiwzMjAwNCwzMzUwOSwzMzkwMywzMzk3OSwzNDI3NywzNjQ5Myw2Mzg2MywyMDMzNSw2Mzg2NCw2Mzg2NSwyMjc1NiwyMzM2MywyNDY2''@;'; put 'put ''NSwyNTU2MiwyNTg4MCwyNTk2NSwyNjI2NCw2Mzg2NiwyNjk1NCwyNzE3MSwyNzkxNSwyODY3MywyOTAzNiwzMDE2MiwzMDIyMSwzMTE1NSwzMTM0NCw2Mzg2NywzMjY1MCw2Mzg2OCwzNTE0MCw2Mzg2OSwzNTczMSwzNzMxMiwzODUyNSw2Mzg3MCwzOTE3OCwyMjI3NiwyNDQ4MSwyNjA0NCwy''@;'; put 'put ''ODQxNywzMDIwOCwzMTE0MiwzNTQ4NiwzOTM0MSwzOTc3MCw0MDgxMiwyMDc0MCwyNTAxNCwyNTIzMywyNzI3NywzMzIyMiwyMDU0NywyMjU3NiwyNDQyMiwyODkzNywzNTMyOCwzNTU3OCwyMzQyMCwzNDMyNiwyMDQ3NCwyMDc5NiwyMjE5NiwyMjg1MiwyNTUxMywyODE1MywyMzk3OCwyNjk4''@;'; put 'put ''OSwyMDg3MCwyMDEwNCwyMDMxMyw2Mzg3MSw2Mzg3Miw2Mzg3MywyMjkxNCw2Mzg3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2Mzg3NSwyNzQ4NywyNzc0MSw2Mzg3NiwyOTg3NywzMDk5OCw2Mzg3NywzMzI4NywzMzM0OSwzMzU5MywzNjY3MSwzNjcwMSw2Mzg3OCwzOTE5Miw2Mzg3OSw2Mzg4MCw2Mzg4MSwyMDEzNCw2Mzg4MiwyMjQ5NSwyNDQ0MSwyNjEz''@;'; put 'put ''MSw2Mzg4Myw2Mzg4NCwzMDEyMywzMjM3NywzNTY5NSw2Mzg4NSwzNjg3MCwzOTUxNSwyMjE4MSwyMjU2NywyMzAzMiwyMzA3MSwyMzQ3Niw2Mzg4NiwyNDMxMCw2Mzg4Nyw2Mzg4OCwyNTQyNCwyNTQwMyw2Mzg4OSwyNjk0MSwyNzc4MywyNzgzOSwyODA0NiwyODA1MSwyODE0OSwyODQzNiw2''@;'; put 'put ''Mzg5MCwyODg5NSwyODk4MiwyOTAxNyw2Mzg5MSwyOTEyMywyOTE0MSw2Mzg5MiwzMDc5OSwzMDgzMSw2Mzg5MywzMTYwNSwzMjIyNyw2Mzg5NCwzMjMwMyw2Mzg5NSwzNDg5MywzNjU3NSw2Mzg5Niw2Mzg5Nyw2Mzg5OCwzNzQ2Nyw2Mzg5OSw0MDE4Miw2MzkwMCw2MzkwMSw2MzkwMiwyNDcw''@;'; put 'put ''OSwyODAzNyw2MzkwMywyOTEwNSw2MzkwNCw2MzkwNSwzODMyMSwyMTQyMSw2MzkwNiw2MzkwNyw2MzkwOCwyNjU3OSw2MzkwOSwyODgxNCwyODk3NiwyOTc0NCwzMzM5OCwzMzQ5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2MzkxMCwzODMzMSwzOTY1Myw0MDU3MywyNjMwOCw2MzkxMSwyOTEyMSwzMzg2NSw2MzkxMiw2MzkxMywyMjYwMyw2MzkxNCw2Mzkx''@;'; put 'put ''NSwyMzk5MiwyNDQzMyw2MzkxNiwyNjE0NCwyNjI1NCwyNzAwMSwyNzA1NCwyNzcwNCwyNzg5MSwyODIxNCwyODQ4MSwyODYzNCwyODY5OSwyODcxOSwyOTAwOCwyOTE1MSwyOTU1Miw2MzkxNywyOTc4Nyw2MzkxOCwyOTkwOCwzMDQwOCwzMTMxMCwzMjQwMyw2MzkxOSw2MzkyMCwzMzUyMSwz''@;'; put 'put ''NTQyNCwzNjgxNCw2MzkyMSwzNzcwNCw2MzkyMiwzODY4MSw2MzkyMyw2MzkyNCwyMDAzNCwyMDUyMiw2MzkyNSwyMWUzLDIxNDczLDI2MzU1LDI3NzU3LDI4NjE4LDI5NDUwLDMwNTkxLDMxMzMwLDMzNDU0LDM0MjY5LDM0MzA2LDYzOTI2LDM1MDI4LDM1NDI3LDM1NzA5LDM1OTQ3LDYzOTI3''@;'; put 'put ''LDM3NTU1LDYzOTI4LDM4Njc1LDM4OTI4LDIwMTE2LDIwMjM3LDIwNDI1LDIwNjU4LDIxMzIwLDIxNTY2LDIxNTU1LDIxOTc4LDIyNjI2LDIyNzE0LDIyODg3LDIzMDY3LDIzNTI0LDI0NzM1LDYzOTI5LDI1MDM0LDI1OTQyLDI2MTExLDI2MjEyLDI2NzkxLDI3NzM4LDI4NTk1LG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI4ODc5LDI5MTAwLDI5NTIyLDMxNjEz''@;'; put 'put ''LDM0NTY4LDM1NDkyLDM5OTg2LDQwNzExLDIzNjI3LDI3Nzc5LDI5NTA4LDI5NTc3LDM3NDM0LDI4MzMxLDI5Nzk3LDMwMjM5LDMxMzM3LDMyMjc3LDM0MzE0LDIwODAwLDIyNzI1LDI1NzkzLDI5OTM0LDI5OTczLDMwMzIwLDMyNzA1LDM3MDEzLDM4NjA1LDM5MjUyLDI4MTk4LDI5OTI2LDMx''@;'; put 'put ''NDAxLDMxNDAyLDMzMjUzLDM0NTIxLDM0NjgwLDM1MzU1LDIzMTEzLDIzNDM2LDIzNDUxLDI2Nzg1LDI2ODgwLDI4MDAzLDI5NjA5LDI5NzE1LDI5NzQwLDMwODcxLDMyMjMzLDMyNzQ3LDMzMDQ4LDMzMTA5LDMzNjk0LDM1OTE2LDM4NDQ2LDM4OTI5LDI2MzUyLDI0NDQ4LDI2MTA2LDI2NTA1''@;'; put 'put ''LDI3NzU0LDI5NTc5LDIwNTI1LDIzMDQzLDI3NDk4LDMwNzAyLDIyODA2LDIzOTE2LDI0MDEzLDI5NDc3LDMwMDMxLDYzOTMwLDYzOTMxLDIwNzA5LDIwOTg1LDIyNTc1LDIyODI5LDIyOTM0LDIzMDAyLDIzNTI1LDYzOTMyLDYzOTMzLDIzOTcwLDI1MzAzLDI1NjIyLDI1NzQ3LDI1ODU0LDYz''@;'; put 'put ''OTM0LDI2MzMyLDYzOTM1LDI3MjA4LDYzOTM2LDI5MTgzLDI5Nzk2LDYzOTM3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMxMzY4LDMxNDA3LDMyMzI3LDMyMzUwLDMyNzY4LDMzMTM2LDYzOTM4LDM0Nzk5LDM1MjAxLDM1NjE2LDM2OTUzLDYzOTM5LDM2OTkyLDM5MjUwLDI0OTU4LDI3NDQyLDI4MDIwLDMyMjg3LDM1MTA5LDM2Nzg1LDIwNDMzLDIwNjUzLDIw''@;'; put 'put ''ODg3LDIxMTkxLDIyNDcxLDIyNjY1LDIzNDgxLDI0MjQ4LDI0ODk4LDI3MDI5LDI4MDQ0LDI4MjYzLDI4MzQyLDI5MDc2LDI5Nzk0LDI5OTkyLDI5OTk2LDMyODgzLDMzNTkyLDMzOTkzLDM2MzYyLDM3NzgwLDM3ODU0LDYzOTQwLDIwMTEwLDIwMzA1LDIwNTk4LDIwNzc4LDIxNDQ4LDIxNDUx''@;'; put 'put ''LDIxNDkxLDIzNDMxLDIzNTA3LDIzNTg4LDI0ODU4LDI0OTYyLDI2MTAwLDI5Mjc1LDI5NTkxLDI5NzYwLDMwNDAyLDMxMDU2LDMxMTIxLDMxMTYxLDMyMDA2LDMyNzAxLDMzNDE5LDM0MjYxLDM0Mzk4LDM2ODAyLDM2OTM1LDM3MTA5LDM3MzU0LDM4NTMzLDM4NjMyLDM4NjMzLDIxMjA2LDI0''@;'; put 'put ''NDIzLDI2MDkzLDI2MTYxLDI2NjcxLDI5MDIwLDMxMjg2LDM3MDU3LDM4OTIyLDIwMTEzLDYzOTQxLDI3MjE4LDI3NTUwLDI4NTYwLDI5MDY1LDMyNzkyLDMzNDY0LDM0MTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2OTM5LDM4NTQ5LDM4NjQyLDM4OTA3LDM0MDc0LDM5NzI5LDIwMTEyLDI5MDY2LDM4NTk2LDIwODAzLDIxNDA3LDIxNzI5LDIyMjkxLDIy''@;'; put 'put ''MjkwLDIyNDM1LDIzMTk1LDIzMjM2LDIzNDkxLDI0NjE2LDI0ODk1LDI1NTg4LDI3NzgxLDI3OTYxLDI4Mjc0LDI4MzA0LDI5MjMyLDI5NTAzLDI5NzgzLDMzNDg5LDM0OTQ1LDM2Njc3LDM2OTYwLDYzOTQyLDM4NDk4LDM5ZTMsNDAyMTksMjYzNzYsMzYyMzQsMzc0NzAsMjAzMDEsMjA1NTMs''@;'; put 'put ''MjA3MDIsMjEzNjEsMjIyODUsMjI5OTYsMjMwNDEsMjM1NjEsMjQ5NDQsMjYyNTYsMjgyMDUsMjkyMzQsMjk3NzEsMzIyMzksMzI5NjMsMzM4MDYsMzM4OTQsMzQxMTEsMzQ2NTUsMzQ5MDcsMzUwOTYsMzU1ODYsMzY5NDksMzg4NTksMzk3NTksMjAwODMsMjAzNjksMjA3NTQsMjA4NDIsNjM5''@;'; put 'put ''NDMsMjE4MDcsMjE5MjksMjM0MTgsMjM0NjEsMjQxODgsMjQxODksMjQyNTQsMjQ3MzYsMjQ3OTksMjQ4NDAsMjQ4NDEsMjU1NDAsMjU5MTIsMjYzNzcsNjM5NDQsMjY1ODAsMjY1ODYsNjM5NDUsMjY5NzcsMjY5NzgsMjc4MzMsMjc5NDMsNjM5NDYsMjgyMTYsNjM5NDcsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjg2NDEsMjk0OTQsMjk0OTUsNjM5NDgsMjk3''@;'; put 'put ''ODgsMzAwMDEsNjM5NDksMzAyOTAsNjM5NTAsNjM5NTEsMzIxNzMsMzMyNzgsMzM4NDgsMzUwMjksMzU0ODAsMzU1NDcsMzU1NjUsMzY0MDAsMzY0MTgsMzY5MzgsMzY5MjYsMzY5ODYsMzcxOTMsMzczMjEsMzc3NDIsNjM5NTIsNjM5NTMsMjI1MzcsNjM5NTQsMjc2MDMsMzI5MDUsMzI5NDYs''@;'; put 'put ''NjM5NTUsNjM5NTYsMjA4MDEsMjI4OTEsMjM2MDksNjM5NTcsNjM5NTgsMjg1MTYsMjk2MDcsMzI5OTYsMzYxMDMsNjM5NTksMzczOTksMzgyODcsNjM5NjAsNjM5NjEsNjM5NjIsNjM5NjMsMzI4OTUsMjUxMDIsMjg3MDAsMzIxMDQsMzQ3MDEsNjM5NjQsMjI0MzIsMjQ2ODEsMjQ5MDMsMjc1''@;'; put 'put ''NzUsMzU1MTgsMzc1MDQsMzg1NzcsMjAwNTcsMjE1MzUsMjgxMzksMzQwOTMsMzg1MTIsMzg4OTksMzkxNTAsMjU1NTgsMjc4NzUsMzcwMDksMjA5NTcsMjUwMzMsMzMyMTAsNDA0NDEsMjAzODEsMjA1MDYsMjA3MzYsMjM0NTIsMjQ4NDcsMjUwODcsMjU4MzYsMjY4ODUsMjc1ODksMzAwOTcs''@;'; put 'put ''MzA2OTEsMzI2ODEsMzMzODAsMzQxOTEsMzQ4MTEsMzQ5MTUsMzU1MTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzU2OTYsMzcyOTEsMjAxMDgsMjAxOTcsMjAyMzQsNjM5NjUsNjM5NjYsMjI4MzksMjMwMTYsNjM5NjcsMjQwNTAsMjQzNDcsMjQ0MTEsMjQ2MDksNjM5NjgsNjM5NjksNjM5NzAsNjM5NzEsMjkyNDYsMjk2NjksNjM5NzIsMzAwNjQsMzAxNTcs''@;'; put 'put ''NjM5NzMsMzEyMjcsNjM5NzQsMzI3ODAsMzI4MTksMzI5MDAsMzM1MDUsMzM2MTcsNjM5NzUsNjM5NzYsMzYwMjksMzYwMTksMzY5OTksNjM5NzcsNjM5NzgsMzkxNTYsMzkxODAsNjM5NzksNjM5ODAsMjg3MjcsMzA0MTAsMzI3MTQsMzI3MTYsMzI3NjQsMzU2MTAsMjAxNTQsMjAxNjEsMjA5''@;'; put 'put ''OTUsMjEzNjAsNjM5ODEsMjE2OTMsMjIyNDAsMjMwMzUsMjM0OTMsMjQzNDEsMjQ1MjUsMjgyNzAsNjM5ODIsNjM5ODMsMzIxMDYsMzM1ODksNjM5ODQsMzQ0NTEsMzU0NjksNjM5ODUsMzg3NjUsMzg3NzUsNjM5ODYsNjM5ODcsMTk5NjgsMjAzMTQsMjAzNTAsMjI3NzcsMjYwODUsMjgzMjIs''@;'; put 'put ''MzY5MjAsMzc4MDgsMzkzNTMsMjAyMTksMjI3NjQsMjI5MjIsMjMwMDEsMjQ2NDEsNjM5ODgsNjM5ODksMzEyNTIsNjM5OTAsMzM2MTUsMzYwMzUsMjA4MzcsMjEzMTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjM5OTEsNjM5OTIsNjM5OTMsMjAxNzMsMjEwOTcsMjMzODEsMzM0NzEsMjAxODAsMjEwNTAsMjE2NzIsMjI5ODUsMjMwMzksMjMzNzYsMjMzODMs''@;'; put 'put ''MjMzODgsMjQ2NzUsMjQ5MDQsMjgzNjMsMjg4MjUsMjkwMzgsMjk1NzQsMjk5NDMsMzAxMzMsMzA5MTMsMzIwNDMsMzI3NzMsMzMyNTgsMzM1NzYsMzQwNzEsMzQyNDksMzU1NjYsMzYwMzksMzg2MDQsMjAzMTYsMjEyNDIsMjIyMDQsMjYwMjcsMjYxNTIsMjg3OTYsMjg4NTYsMjkyMzcsMzIx''@;'; put 'put ''ODksMzM0MjEsMzcxOTYsMzg1OTIsNDAzMDYsMjM0MDksMjY4NTUsMjc1NDQsMjg1MzgsMzA0MzAsMjM2OTcsMjYyODMsMjg1MDcsMzE2NjgsMzE3ODYsMzQ4NzAsMzg2MjAsMTk5NzYsMjAxODMsMjEyODAsMjI1ODAsMjI3MTUsMjI3NjcsMjI4OTIsMjM1NTksMjQxMTUsMjQxOTYsMjQzNzMs''@;'; put 'put ''MjU0ODQsMjYyOTAsMjY0NTQsMjcxNjcsMjcyOTksMjc0MDQsMjg0NzksMjkyNTQsNjM5OTQsMjk1MjAsMjk4MzUsMzE0NTYsMzE5MTEsMzMxNDQsMzMyNDcsMzMyNTUsMzM2NzQsMzM5MDAsMzQwODMsMzQxOTYsMzQyNTUsMzUwMzcsMzYxMTUsMzcyOTIsMzgyNjMsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzg1NTYsMjA4NzcsMjE3MDUsMjIzMTIsMjM0NzIs''@;'; put 'put ''MjUxNjUsMjY0NDgsMjY2ODUsMjY3NzEsMjgyMjEsMjgzNzEsMjg3OTcsMzIyODksMzUwMDksMzYwMDEsMzY2MTcsNDA3NzksNDA3ODIsMjkyMjksMzE2MzEsMzU1MzMsMzc2NTgsMjAyOTUsMjAzMDIsMjA3ODYsMjE2MzIsMjI5OTIsMjQyMTMsMjUyNjksMjY0ODUsMjY5OTAsMjcxNTksMjc4''@;'; put 'put ''MjIsMjgxODYsMjk0MDEsMjk0ODIsMzAxNDEsMzE2NzIsMzIwNTMsMzM1MTEsMzM3ODUsMzM4NzksMzQyOTUsMzU0MTksMzYwMTUsMzY0ODcsMzY4ODksMzcwNDgsMzg2MDYsNDA3OTksMjEyMTksMjE1MTQsMjMyNjUsMjM0OTAsMjU2ODgsMjU5NzMsMjg0MDQsMjkzODAsNjM5OTUsMzAzNDAs''@;'; put 'put ''MzEzMDksMzE1MTUsMzE4MjEsMzIzMTgsMzI3MzUsMzM2NTksMzU2MjcsMzYwNDIsMzYxOTYsMzYzMjEsMzY0NDcsMzY4NDIsMzY4NTcsMzY5NjksMzc4NDEsMjAyOTEsMjAzNDYsMjA2NTksMjA4NDAsMjA4NTYsMjEwNjksMjEwOTgsMjI2MjUsMjI2NTIsMjI4ODAsMjM1NjAsMjM2MzcsMjQy''@;'; put 'put ''ODMsMjQ3MzEsMjUxMzYsMjY2NDMsMjc1ODMsMjc2NTYsMjg1OTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjkwMDYsMjk3MjgsM2U0LDMwMDA4LDMwMDMzLDMwMzIyLDMxNTY0LDMxNjI3LDMxNjYxLDMxNjg2LDMyMzk5LDM1NDM4LDM2NjcwLDM2NjgxLDM3NDM5LDM3NTIzLDM3NjY2LDM3OTMxLDM4NjUxLDM5MDAyLDM5MDE5LDM5MTk4LDIwOTk5LDI1MTMw''@;'; put 'put ''LDI1MjQwLDI3OTkzLDMwMzA4LDMxNDM0LDMxNjgwLDMyMTE4LDIxMzQ0LDIzNzQyLDI0MjE1LDI4NDcyLDI4ODU3LDMxODk2LDM4NjczLDM5ODIyLDQwNjcwLDI1NTA5LDI1NzIyLDM0Njc4LDE5OTY5LDIwMTE3LDIwMTQxLDIwNTcyLDIwNTk3LDIxNTc2LDIyOTc5LDIzNDUwLDI0MTI4LDI0''@;'; put 'put ''MjM3LDI0MzExLDI0NDQ5LDI0NzczLDI1NDAyLDI1OTE5LDI1OTcyLDI2MDYwLDI2MjMwLDI2MjMyLDI2NjIyLDI2OTg0LDI3MjczLDI3NDkxLDI3NzEyLDI4MDk2LDI4MTM2LDI4MTkxLDI4MjU0LDI4NzAyLDI4ODMzLDI5NTgyLDI5NjkzLDMwMDEwLDMwNTU1LDMwODU1LDMxMTE4LDMxMjQz''@;'; put 'put ''LDMxMzU3LDMxOTM0LDMyMTQyLDMzMzUxLDM1MzMwLDM1NTYyLDM1OTk4LDM3MTY1LDM3MTk0LDM3MzM2LDM3NDc4LDM3NTgwLDM3NjY0LDM4NjYyLDM4NzQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM4NzQ4LDM4OTE0LDQwNzE4LDIxMDQ2LDIxMTM3LDIxODg0LDIyNTY0LDI0MDkzLDI0MzUxLDI0NzE2LDI1NTUyLDI2Nzk5LDI4NjM5LDMxMDg1LDMxNTMy''@;'; put 'put ''LDMzMjI5LDM0MjM0LDM1MDY5LDM1NTc2LDM2NDIwLDM3MjYxLDM4NTAwLDM4NTU1LDM4NzE3LDM4OTg4LDQwNzc4LDIwNDMwLDIwODA2LDIwOTM5LDIxMTYxLDIyMDY2LDI0MzQwLDI0NDI3LDI1NTE0LDI1ODA1LDI2MDg5LDI2MTc3LDI2MzYyLDI2MzYxLDI2Mzk3LDI2NzgxLDI2ODM5LDI3''@;'; put 'put ''MTMzLDI4NDM3LDI4NTI2LDI5MDMxLDI5MTU3LDI5MjI2LDI5ODY2LDMwNTIyLDMxMDYyLDMxMDY2LDMxMTk5LDMxMjY0LDMxMzgxLDMxODk1LDMxOTY3LDMyMDY4LDMyMzY4LDMyOTAzLDM0Mjk5LDM0NDY4LDM1NDEyLDM1NTE5LDM2MjQ5LDM2NDgxLDM2ODk2LDM2OTczLDM3MzQ3LDM4NDU5''@;'; put 'put ''LDM4NjEzLDQwMTY1LDI2MDYzLDMxNzUxLDM2Mjc1LDM3ODI3LDIzMzg0LDIzNTYyLDIxMzMwLDI1MzA1LDI5NDY5LDIwNTE5LDIzNDQ3LDI0NDc4LDI0NzUyLDI0OTM5LDI2ODM3LDI4MTIxLDI5NzQyLDMxMjc4LDMyMDY2LDMyMTU2LDMyMzA1LDMzMTMxLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2Mzk0LDM2NDA1LDM3NzU4LDM3OTEyLDIwMzA0LDIyMzUy''@;'; put 'put ''LDI0MDM4LDI0MjMxLDI1Mzg3LDMyNjE4LDIwMDI3LDIwMzAzLDIwMzY3LDIwNTcwLDIzMDA1LDMyOTY0LDIxNjEwLDIxNjA4LDIyMDE0LDIyODYzLDIzNDQ5LDI0MDMwLDI0MjgyLDI2MjA1LDI2NDE3LDI2NjA5LDI2NjY2LDI3ODgwLDI3OTU0LDI4MjM0LDI4NTU3LDI4ODU1LDI5NjY0LDMw''@;'; put 'put ''MDg3LDMxODIwLDMyMDAyLDMyMDQ0LDMyMTYyLDMzMzExLDM0NTIzLDM1Mzg3LDM1NDYxLDM2MjA4LDM2NDkwLDM2NjU5LDM2OTEzLDM3MTk4LDM3MjAyLDM3OTU2LDM5Mzc2LDMxNDgxLDMxOTA5LDIwNDI2LDIwNzM3LDIwOTM0LDIyNDcyLDIzNTM1LDIzODAzLDI2MjAxLDI3MTk3LDI3OTk0''@;'; put 'put ''LDI4MzEwLDI4NjUyLDI4OTQwLDMwMDYzLDMxNDU5LDM0ODUwLDM2ODk3LDM2OTgxLDM4NjAzLDM5NDIzLDMzNTM3LDIwMDEzLDIwMjEwLDM0ODg2LDM3MzI1LDIxMzczLDI3MzU1LDI2OTg3LDI3NzEzLDMzOTE0LDIyNjg2LDI0OTc0LDI2MzY2LDI1MzI3LDI4ODkzLDI5OTY5LDMwMTUxLDMy''@;'; put 'put ''MzM4LDMzOTc2LDM1NjU3LDM2MTA0LDIwMDQzLDIxNDgyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDIxNjc1LDIyMzIwLDIyMzM2LDI0NTM1LDI1MzQ1LDI1MzUxLDI1NzExLDI1OTAzLDI2MDg4LDI2MjM0LDI2NTI1LDI2NTQ3LDI3NDkwLDI3NzQ0LDI3ODAyLDI4NDYwLDMwNjkzLDMwNzU3LDMxMDQ5LDMxMDYzLDMyMDI1LDMyOTMwLDMzMDI2LDMzMjY3LDMz''@;'; put 'put ''NDM3LDMzNDYzLDM0NTg0LDM1NDY4LDYzOTk2LDM2MTAwLDM2Mjg2LDM2OTc4LDMwNDUyLDMxMjU3LDMxMjg3LDMyMzQwLDMyODg3LDIxNzY3LDIxOTcyLDIyNjQ1LDI1MzkxLDI1NjM0LDI2MTg1LDI2MTg3LDI2NzMzLDI3MDM1LDI3NTI0LDI3OTQxLDI4MzM3LDI5NjQ1LDI5ODAwLDI5ODU3''@;'; put 'put ''LDMwMDQzLDMwMTM3LDMwNDMzLDMwNDk0LDMwNjAzLDMxMjA2LDMyMjY1LDMyMjg1LDMzMjc1LDM0MDk1LDM0OTY3LDM1Mzg2LDM2MDQ5LDM2NTg3LDM2Nzg0LDM2OTE0LDM3ODA1LDM4NDk5LDM4NTE1LDM4NjYzLDIwMzU2LDIxNDg5LDIzMDE4LDIzMjQxLDI0MDg5LDI2NzAyLDI5ODk0LDMw''@;'; put 'put ''MTQyLDMxMjA5LDMxMzc4LDMzMTg3LDM0NTQxLDM2MDc0LDM2MzAwLDM2ODQ1LDI2MDE1LDI2Mzg5LDYzOTk3LDIyNTE5LDI4NTAzLDMyMjIxLDM2NjU1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM3ODc4LDM4NTk4LDI0NTAxLDI1MDc0LDI4NTQ4LDE5OTg4LDIwMzc2LDIwNTExLDIxNDQ5LDIxOTgzLDIzOTE5LDI0MDQ2LDI3NDI1LDI3NDkyLDMwOTIzLDMx''@;'; put 'put ''NjQyLDYzOTk4LDM2NDI1LDM2NTU0LDM2OTc0LDI1NDE3LDI1NjYyLDMwNTI4LDMxMzY0LDM3Njc5LDM4MDE1LDQwODEwLDI1Nzc2LDI4NTkxLDI5MTU4LDI5ODY0LDI5OTE0LDMxNDI4LDMxNzYyLDMyMzg2LDMxOTIyLDMyNDA4LDM1NzM4LDM2MTA2LDM4MDEzLDM5MTg0LDM5MjQ0LDIxMDQ5''@;'; put 'put ''LDIzNTE5LDI1ODMwLDI2NDEzLDMyMDQ2LDIwNzE3LDIxNDQzLDIyNjQ5LDI0OTIwLDI0OTIxLDI1MDgyLDI2MDI4LDMxNDQ5LDM1NzMwLDM1NzM0LDIwNDg5LDIwNTEzLDIxMTA5LDIxODA5LDIzMTAwLDI0Mjg4LDI0NDMyLDI0ODg0LDI1OTUwLDI2MTI0LDI2MTY2LDI2Mjc0LDI3MDg1LDI4''@;'; put 'put ''MzU2LDI4NDY2LDI5NDYyLDMwMjQxLDMxMzc5LDMzMDgxLDMzMzY5LDMzNzUwLDMzOTgwLDIwNjYxLDIyNTEyLDIzNDg4LDIzNTI4LDI0NDI1LDI1NTA1LDMwNzU4LDMyMTgxLDMzNzU2LDM0MDgxLDM3MzE5LDM3MzY1LDIwODc0LDI2NjEzLDMxNTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2MDEyLDIwOTMyLDIyOTcxLDI0NzY1LDM0Mzg5LDIwNTA4LDYz''@;'; put 'put ''OTk5LDIxMDc2LDIzNjEwLDI0OTU3LDI1MTE0LDI1Mjk5LDI1ODQyLDI2MDIxLDI4MzY0LDMwMjQwLDMzMDM0LDM2NDQ4LDM4NDk1LDM4NTg3LDIwMTkxLDIxMzE1LDIxOTEyLDIyODI1LDI0MDI5LDI1Nzk3LDI3ODQ5LDI4MTU0LDI5NTg4LDMxMzU5LDMzMzA3LDM0MjE0LDM2MDY4LDM2MzY4''@;'; put 'put ''LDM2OTgzLDM3MzUxLDM4MzY5LDM4NDMzLDM4ODU0LDIwOTg0LDIxNzQ2LDIxODk0LDI0NTA1LDI1NzY0LDI4NTUyLDMyMTgwLDM2NjM5LDM2Njg1LDM3OTQxLDIwNjgxLDIzNTc0LDI3ODM4LDI4MTU1LDI5OTc5LDMwNjUxLDMxODA1LDMxODQ0LDM1NDQ5LDM1NTIyLDIyNTU4LDIyOTc0LDI0''@;'; put 'put ''MDg2LDI1NDYzLDI5MjY2LDMwMDkwLDMwNTcxLDM1NTQ4LDM2MDI4LDM2NjI2LDI0MzA3LDI2MjI4LDI4MTUyLDMyODkzLDMzNzI5LDM1NTMxLDM4NzM3LDM5ODk0LDY0ZTMsMjEwNTksMjYzNjcsMjgwNTMsMjgzOTksMzIyMjQsMzU1NTgsMzY5MTAsMzY5NTgsMzk2MzYsMjEwMjEsMjExMTks''@;'; put 'put ''MjE3MzYsMjQ5ODAsMjUyMjAsMjUzMDcsMjY3ODYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsMjY4OTgsMjY5NzAsMjcxODksMjg4MTgsMjg5NjYsMzA4MTMsMzA5NzcsMzA5OTAsMzExODYsMzEyNDUsMzI5MTgsMzM0MDAsMzM0OTMsMzM2MDksMzQxMjEsMzU5NzAsMzYyMjksMzcyMTgsMzcyNTksMzcyOTQsMjA0MTksMjIyMjUsMjkxNjUsMzA2NzksMzQ1NjAs''@;'; put 'put ''MzUzMjAsMjM1NDQsMjQ1MzQsMjY0NDksMzcwMzIsMjE0NzQsMjI2MTgsMjM1NDEsMjQ3NDAsMjQ5NjEsMjU2OTYsMzIzMTcsMzI4ODAsMzQwODUsMzc1MDcsMjU3NzQsMjA2NTIsMjM4MjgsMjYzNjgsMjI2ODQsMjUyNzcsMjU1MTIsMjY4OTQsMjdlMywyNzE2NiwyODI2NywzMDM5NCwzMTE3''@;'; put 'put ''OSwzMzQ2NywzMzgzMywzNTUzNSwzNjI2NCwzNjg2MSwzNzEzOCwzNzE5NSwzNzI3NiwzNzY0OCwzNzY1NiwzNzc4NiwzODYxOSwzOTQ3OCwzOTk0OSwxOTk4NSwzMDA0NCwzMTA2OSwzMTQ4MiwzMTU2OSwzMTY4OSwzMjMwMiwzMzk4OCwzNjQ0MSwzNjQ2OCwzNjYwMCwzNjg4MCwyNjE0OSwy''@;'; put 'put ''Njk0MywyOTc2MywyMDk4NiwyNjQxNCw0MDY2OCwyMDgwNSwyNDU0NCwyNzc5OCwzNDgwMiwzNDkwOSwzNDkzNSwyNDc1NiwzMzIwNSwzMzc5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjEwMSwyMTQ2MiwyMTU2MSwyMjA2OCwyMzA5NCwyMzYwMSwyODgxMCwzMjczNiwzMjg1OCwzMzAzMCwzMzI2MSwzNjI1OSwzNzI1NywzOTUxOSw0MDQzNCwyMDU5Niwy''@;'; put 'put ''MDE2NCwyMTQwOCwyNDgyNywyODIwNCwyMzY1MiwyMDM2MCwyMDUxNiwyMTk4OCwyMzc2OSwyNDE1OSwyNDY3NywyNjc3MiwyNzgzNSwyODEwMCwyOTExOCwzMDE2NCwzMDE5NiwzMDMwNSwzMTI1OCwzMTMwNSwzMjE5OSwzMjI1MSwzMjYyMiwzMzI2OCwzNDQ3MywzNjYzNiwzODYwMSwzOTM0''@;'; put 'put ''Nyw0MDc4NiwyMTA2MywyMTE4OSwzOTE0OSwzNTI0MiwxOTk3MSwyNjU3OCwyODQyMiwyMDQwNSwyMzUyMiwyNjUxNywyNzc4NCwyODAyNCwyOTcyMywzMDc1OSwzNzM0MSwzNzc1NiwzNDc1NiwzMTIwNCwzMTI4MSwyNDU1NSwyMDE4MiwyMTY2OCwyMTgyMiwyMjcwMiwyMjk0OSwyNDgxNiwy''@;'; put 'put ''NTE3MSwyNTMwMiwyNjQyMiwyNjk2NSwzMzMzMywzODQ2NCwzOTM0NSwzOTM4OSwyMDUyNCwyMTMzMSwyMTgyOCwyMjM5Niw2NDAwMSwyNTE3Niw2NDAwMiwyNTgyNiwyNjIxOSwyNjU4OSwyODYwOSwyODY1NSwyOTczMCwyOTc1MiwzNTM1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNzk0NCwyMTU4NSwyMjAyMiwyMjM3NCwyNDM5MiwyNDk4NiwyNzQ3MCwy''@;'; put 'put ''ODc2MCwyODg0NSwzMjE4NywzNTQ3NywyMjg5MCwzMzA2NywyNTUwNiwzMDQ3MiwzMjgyOSwzNjAxMCwyMjYxMiwyNTY0NSwyNzA2NywyMzQ0NSwyNDA4MSwyODI3MSw2NDAwMywzNDE1MywyMDgxMiwyMTQ4OCwyMjgyNiwyNDYwOCwyNDkwNywyNzUyNiwyNzc2MCwyNzg4OCwzMTUxOCwzMjk3''@;'; put 'put ''NCwzMzQ5MiwzNjI5NCwzNzA0MCwzOTA4OSw2NDAwNCwyNTc5OSwyODU4MCwyNTc0NSwyNTg2MCwyMDgxNCwyMTUyMCwyMjMwMywzNTM0MiwyNDkyNywyNjc0Miw2NDAwNSwzMDE3MSwzMTU3MCwzMjExMywzNjg5MCwyMjUzNCwyNzA4NCwzMzE1MSwzNTExNCwzNjg2NCwzODk2OSwyMDYwMCwy''@;'; put 'put ''Mjg3MSwyMjk1NiwyNTIzNywzNjg3OSwzOTcyMiwyNDkyNSwyOTMwNSwzODM1OCwyMjM2OSwyMzExMCwyNDA1MiwyNTIyNiwyNTc3MywyNTg1MCwyNjQ4NywyNzg3NCwyNzk2NiwyOTIyOCwyOTc1MCwzMDc3MiwzMjYzMSwzMzQ1MywzNjMxNSwzODkzNSwyMTAyOCwyMjMzOCwyNjQ5NSwyOTI1''@;'; put 'put ''NiwyOTkyMywzNjAwOSwzNjc3NCwzNzM5MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCwzODQ0MiwyMDg0MywyMTQ4NSwyNTQyMCwyMDMyOSwyMTc2NCwyNDcyNiwyNTk0MywyNzgwMywyODAzMSwyOTI2MCwyOTQzNywzMTI1NSwzNTIwNywzNTk5NywyNDQyOSwyODU1OCwyODkyMSwzMzE5MiwyNDg0NiwyMDQxNSwyMDU1OSwyNTE1MywyOTI1NSwzMTY4NywzMjIz''@;'; put 'put ''MiwzMjc0NSwzNjk0MSwzODgyOSwzOTQ0OSwzNjAyMiwyMjM3OCwyNDE3OSwyNjU0NCwzMzgwNSwzNTQxMywyMTUzNiwyMzMxOCwyNDE2MywyNDI5MCwyNDMzMCwyNTk4NywzMjk1NCwzNDEwOSwzODI4MSwzODQ5MSwyMDI5NiwyMTI1MywyMTI2MSwyMTI2MywyMTYzOCwyMTc1NCwyMjI3NSwy''@;'; put 'put ''NDA2NywyNDU5OCwyNTI0MywyNTI2NSwyNTQyOSw2NDAwNiwyNzg3MywyODAwNiwzMDEyOSwzMDc3MCwzMjk5MCwzMzA3MSwzMzUwMiwzMzg4OSwzMzk3MCwzNDk1NywzNTA5MCwzNjg3NSwzNzYxMCwzOTE2NSwzOTgyNSwyNDEzMywyNjI5MiwyNjMzMywyODY4OSwyOTE5MCw2NDAwNywyMDQ2''@;'; put 'put ''OSwyMTExNywyNDQyNiwyNDkxNSwyNjQ1MSwyNzE2MSwyODQxOCwyOTkyMiwzMTA4MCwzNDkyMCwzNTk2MSwzOTExMSwzOTEwOCwzOTQ5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTY5NywzMTI2MywyNjk2MywzNTU3NSwzNTkxNCwzOTA4MCwzOTM0MiwyNDQ0NCwyNTI1OSwzMDEzMCwzMDM4MiwzNDk4NywzNjk5MSwzODQ2NiwyMTMwNSwyNDM4MCwyNDUx''@;'; put 'put ''NywyNzg1MiwyOTY0NCwzMDA1MCwzMDA5MSwzMTU1OCwzMzUzNCwzOTMyNSwyMDA0NywzNjkyNCwxOTk3OSwyMDMwOSwyMTQxNCwyMjc5OSwyNDI2NCwyNjE2MCwyNzgyNywyOTc4MSwzMzY1NSwzNDY2MiwzNjAzMiwzNjk0NCwzODY4NiwzOTk1NywyMjczNywyMzQxNiwzNDM4NCwzNTYwNCw0''@;'; put 'put ''MDM3MiwyMzUwNiwyNDY4MCwyNDcxNywyNjA5NywyNzczNSwyODQ1MCwyODU3OSwyODY5OCwzMjU5NywzMjc1MiwzODI4OSwzODI5MCwzODQ4MCwzODg2NywyMTEwNiwzNjY3NiwyMDk4OSwyMTU0NywyMTY4OCwyMTg1OSwyMTg5OCwyNzMyMywyODA4NSwzMjIxNiwzMzM4MiwzNzUzMiwzODUx''@;'; put 'put ''OSw0MDU2OSwyMTUxMiwyMTcwNCwzMDQxOCwzNDUzMiwzODMwOCwzODM1NiwzODQ5MiwyMDEzMCwyMDIzMywyMzAyMiwyMzI3MCwyNDA1NSwyNDY1OCwyNTIzOSwyNjQ3NywyNjY4OSwyNzc4MiwyODIwNywzMjU2OCwzMjkyMywzMzMyMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NDAwOCw2NDAwOSwzODkxNywyMDEzMywyMDU2NSwyMTY4MywyMjQxOSwyMjg3''@;'; put 'put ''NCwyMzQwMSwyMzQ3NSwyNTAzMiwyNjk5OSwyODAyMywyODcwNywzNDgwOSwzNTI5OSwzNTQ0MiwzNTU1OSwzNjk5NCwzOTQwNSwzOTYwOCwyMTE4MiwyNjY4MCwyMDUwMiwyNDE4NCwyNjQ0NywzMzYwNywzNDg5MiwyMDEzOSwyMTUyMSwyMjE5MCwyOTY3MCwzNzE0MSwzODkxMSwzOTE3Nywz''@;'; put 'put ''OTI1NSwzOTMyMSwyMjA5OSwyMjY4NywzNDM5NSwzNTM3NywyNTAxMCwyNzM4MiwyOTU2MywzNjU2MiwyNzQ2MywzODU3MCwzOTUxMSwyMjg2OSwyOTE4NCwzNjIwMywzODc2MSwyMDQzNiwyMzc5NiwyNDM1OCwyNTA4MCwyNjIwMywyNzg4MywyODg0MywyOTU3MiwyOTYyNSwyOTY5NCwzMDUw''@;'; put 'put ''NSwzMDU0MSwzMjA2NywzMjA5OCwzMjI5MSwzMzMzNSwzNDg5OCw2NDAxMCwzNjA2NiwzNzQ0OSwzOTAyMywyMzM3NywzMTM0OCwzNDg4MCwzODkxMywyMzI0NCwyMDQ0OCwyMTMzMiwyMjg0NiwyMzgwNSwyNTQwNiwyODAyNSwyOTQzMywzMzAyOSwzMzAzMSwzMzY5OCwzNzU4MywzODk2MCwy''@;'; put 'put ''MDEzNiwyMDgwNCwyMTAwOSwyMjQxMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCwyNDQxOCwyNzg0MiwyODM2NiwyODY3NywyODc1MiwyODg0NywyOTA3NCwyOTY3MywyOTgwMSwzMzYxMCwzNDcyMiwzNDkxMywzNjg3MiwzNzAyNiwzNzc5NSwzOTMzNiwyMDg0NiwyNDQwNywyNDgwMCwyNDkzNSwyNjI5MSwzNDEzNywzNjQyNiwzNzI5NSwzODc5NSwyMDA0Niwy''@;'; put 'put ''MDExNCwyMTYyOCwyMjc0MSwyMjc3OCwyMjkwOSwyMzczMywyNDM1OSwyNTE0MiwyNTE2MCwyNjEyMiwyNjIxNSwyNzYyNywyODAwOSwyODExMSwyODI0NiwyODQwOCwyODU2NCwyODY0MCwyODY0OSwyODc2NSwyOTM5MiwyOTczMywyOTc4NiwyOTkyMCwzMDM1NSwzMTA2OCwzMTk0NiwzMjI4''@;'; put 'put ''NiwzMjk5MywzMzQ0NiwzMzg5OSwzMzk4MywzNDM4MiwzNDM5OSwzNDY3NiwzNTcwMywzNTk0NiwzNzgwNCwzODkxMiwzOTAxMywyNDc4NSwyNTExMCwzNzIzOSwyMzEzMCwyNjEyNywyODE1MSwyODIyMiwyOTc1OSwzOTc0NiwyNDU3MywyNDc5NCwzMTUwMywyMTcwMCwyNDM0NCwyNzc0Miwy''@;'; put 'put ''Nzg1OSwyNzk0NiwyODg4OCwzMjAwNSwzNDQyNSwzNTM0MCw0MDI1MSwyMTI3MCwyMTY0NCwyMzMwMSwyNzE5NCwyODc3OSwzMDA2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTExNywzMTE2NiwzMzQ1NywzMzc3NSwzNTQ0MSwzNTY0OSwzNjAwOCwzODc3Miw2NDAxMSwyNTg0NCwyNTg5OSwzMDkwNiwzMDkwNywzMTMzOSwyMDAyNCwyMTkxNCwyMjg2NCwy''@;'; put 'put ''MzQ2MiwyNDE4NywyNDczOSwyNTU2MywyNzQ4OSwyNjIxMywyNjcwNywyODE4NSwyOTAyOSwyOTg3MiwzMjAwOCwzNjk5NiwzOTUyOSwzOTk3MywyNzk2MywyODM2OSwyOTUwMiwzNTkwNSwzODM0NiwyMDk3NiwyNDE0MCwyNDQ4OCwyNDY1MywyNDgyMiwyNDg4MCwyNDkwOCwyNjE3OSwyNjE4''@;'; put 'put ''MCwyNzA0NSwyNzg0MSwyODI1NSwyODM2MSwyODUxNCwyOTAwNCwyOTg1MiwzMDM0MywzMTY4MSwzMTc4MywzMzYxOCwzNDY0NywzNjk0NSwzODU0MSw0MDY0MywyMTI5NSwyMjIzOCwyNDMxNSwyNDQ1OCwyNDY3NCwyNDcyNCwyNTA3OSwyNjIxNCwyNjM3MSwyNzI5MiwyODE0MiwyODU5MCwy''@;'; put 'put ''ODc4NCwyOTU0NiwzMjM2MiwzMzIxNCwzMzU4OCwzNDUxNiwzNTQ5NiwzNjAzNiwyMTEyMywyOTU1NCwyMzQ0NiwyNzI0MywzNzg5MiwyMTc0MiwyMjE1MCwyMzM4OSwyNTkyOCwyNTk4OSwyNjMxMywyNjc4MywyODA0NSwyODEwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyOTI0MywzMjk0OCwzNzIzNywzOTUwMSwyMDM5OSwyMDUwNSwyMTQwMiwyMTUxOCwy''@;'; put 'put ''MTU2NCwyMTg5NywyMTk1NywyNDEyNywyNDQ2MCwyNjQyOSwyOTAzMCwyOTY2MSwzNjg2OSwyMTIxMSwyMTIzNSwyMjYyOCwyMjczNCwyODkzMiwyOTA3MSwyOTE3OSwzNDIyNCwzNTM0NywyNjI0OCwzNDIxNiwyMTkyNywyNjI0NCwyOTAwMiwzMzg0MSwyMTMyMSwyMTkxMywyNzU4NSwyNDQw''@;'; put 'put ''OSwyNDUwOSwyNTU4MiwyNjI0OSwyODk5OSwzNTU2OSwzNjYzNyw0MDYzOCwyMDI0MSwyNTY1OCwyODg3NSwzMDA1NCwzNDQwNywyNDY3NiwzNTY2Miw0MDQ0MCwyMDgwNywyMDk4MiwyMTI1NiwyNzk1OCwzMzAxNiw0MDY1NywyNjEzMywyNzQyNywyODgyNCwzMDE2NSwyMTUwNywyMzY3Mywz''@;'; put 'put ''MjAwNywzNTM1MCwyNzQyNCwyNzQ1MywyNzQ2MiwyMTU2MCwyNDY4OCwyNzk2NSwzMjcyNSwzMzI4OCwyMDY5NCwyMDk1OCwyMTkxNiwyMjEyMywyMjIyMSwyMzAyMCwyMzMwNSwyNDA3NiwyNDk4NSwyNDk4NCwyNTEzNywyNjIwNiwyNjM0MiwyOTA4MSwyOTExMywyOTExNCwyOTM1MSwzMTE0''@;'; put 'put ''MywzMTIzMiwzMjY5MCwzNTQ0MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxnYjE4MDMwOlsxOTk3MCwxOTk3''@;'; put 'put ''MiwxOTk3MywxOTk3NCwxOTk4MywxOTk4NiwxOTk5MSwxOTk5OSwyZTQsMjAwMDEsMjAwMDMsMjAwMDYsMjAwMDksMjAwMTQsMjAwMTUsMjAwMTcsMjAwMTksMjAwMjEsMjAwMjMsMjAwMjgsMjAwMzIsMjAwMzMsMjAwMzQsMjAwMzYsMjAwMzgsMjAwNDIsMjAwNDksMjAwNTMsMjAwNTUsMjAw''@;'; put 'put ''NTgsMjAwNTksMjAwNjYsMjAwNjcsMjAwNjgsMjAwNjksMjAwNzEsMjAwNzIsMjAwNzQsMjAwNzUsMjAwNzYsMjAwNzcsMjAwNzgsMjAwNzksMjAwODIsMjAwODQsMjAwODUsMjAwODYsMjAwODcsMjAwODgsMjAwODksMjAwOTAsMjAwOTEsMjAwOTIsMjAwOTMsMjAwOTUsMjAwOTYsMjAwOTcs''@;'; put 'put ''MjAwOTgsMjAwOTksMjAxMDAsMjAxMDEsMjAxMDMsMjAxMDYsMjAxMTIsMjAxMTgsMjAxMTksMjAxMjEsMjAxMjQsMjAxMjUsMjAxMjYsMjAxMzEsMjAxMzgsMjAxNDMsMjAxNDQsMjAxNDUsMjAxNDgsMjAxNTAsMjAxNTEsMjAxNTIsMjAxNTMsMjAxNTYsMjAxNTcsMjAxNTgsMjAxNjgsMjAx''@;'; put 'put ''NzIsMjAxNzUsMjAxNzYsMjAxNzgsMjAxODYsMjAxODcsMjAxODgsMjAxOTIsMjAxOTQsMjAxOTgsMjAxOTksMjAyMDEsMjAyMDUsMjAyMDYsMjAyMDcsMjAyMDksMjAyMTIsMjAyMTYsMjAyMTcsMjAyMTgsMjAyMjAsMjAyMjIsMjAyMjQsMjAyMjYsMjAyMjcsMjAyMjgsMjAyMjksMjAyMzAs''@;'; put 'put ''MjAyMzEsMjAyMzIsMjAyMzUsMjAyMzYsMjAyNDIsMjAyNDMsMjAyNDQsMjAyNDUsMjAyNDYsMjAyNTIsMjAyNTMsMjAyNTcsMjAyNTksMjAyNjQsMjAyNjUsMjAyNjgsMjAyNjksMjAyNzAsMjAyNzMsMjAyNzUsMjAyNzcsMjAyNzksMjAyODEsMjAyODMsMjAyODYsMjAyODcsMjAyODgsMjAy''@;'; put 'put ''ODksMjAyOTAsMjAyOTIsMjAyOTMsMjAyOTUsMjAyOTYsMjAyOTcsMjAyOTgsMjAyOTksMjAzMDAsMjAzMDYsMjAzMDgsMjAzMTAsMjAzMjEsMjAzMjIsMjAzMjYsMjAzMjgsMjAzMzAsMjAzMzEsMjAzMzMsMjAzMzQsMjAzMzcsMjAzMzgsMjAzNDEsMjAzNDMsMjAzNDQsMjAzNDUsMjAzNDYs''@;'; put 'put ''MjAzNDksMjAzNTIsMjAzNTMsMjAzNTQsMjAzNTcsMjAzNTgsMjAzNTksMjAzNjIsMjAzNjQsMjAzNjYsMjAzNjgsMjAzNzAsMjAzNzEsMjAzNzMsMjAzNzQsMjAzNzYsMjAzNzcsMjAzNzgsMjAzODAsMjAzODIsMjAzODMsMjAzODUsMjAzODYsMjAzODgsMjAzOTUsMjAzOTcsMjA0MDAsMjA0''@;'; put 'put ''MDEsMjA0MDIsMjA0MDMsMjA0MDQsMjA0MDYsMjA0MDcsMjA0MDgsMjA0MDksMjA0MTAsMjA0MTEsMjA0MTIsMjA0MTMsMjA0MTQsMjA0MTYsMjA0MTcsMjA0MTgsMjA0MjIsMjA0MjMsMjA0MjQsMjA0MjUsMjA0MjcsMjA0MjgsMjA0MjksMjA0MzQsMjA0MzUsMjA0MzYsMjA0MzcsMjA0Mzgs''@;'; put 'put ''MjA0NDEsMjA0NDMsMjA0NDgsMjA0NTAsMjA0NTIsMjA0NTMsMjA0NTUsMjA0NTksMjA0NjAsMjA0NjQsMjA0NjYsMjA0NjgsMjA0NjksMjA0NzAsMjA0NzEsMjA0NzMsMjA0NzUsMjA0NzYsMjA0NzcsMjA0NzksMjA0ODAsMjA0ODEsMjA0ODIsMjA0ODMsMjA0ODQsMjA0ODUsMjA0ODYsMjA0''@;'; put 'put ''ODcsMjA0ODgsMjA0ODksMjA0OTAsMjA0OTEsMjA0OTQsMjA0OTYsMjA0OTcsMjA0OTksMjA1MDEsMjA1MDIsMjA1MDMsMjA1MDcsMjA1MDksMjA1MTAsMjA1MTIsMjA1MTQsMjA1MTUsMjA1MTYsMjA1MTksMjA1MjMsMjA1MjcsMjA1MjgsMjA1MjksMjA1MzAsMjA1MzEsMjA1MzIsMjA1MzMs''@;'; put 'put ''MjA1MzQsMjA1MzUsMjA1MzYsMjA1MzcsMjA1MzksMjA1NDEsMjA1NDMsMjA1NDQsMjA1NDUsMjA1NDYsMjA1NDgsMjA1NDksMjA1NTAsMjA1NTMsMjA1NTQsMjA1NTUsMjA1NTcsMjA1NjAsMjA1NjEsMjA1NjIsMjA1NjMsMjA1NjQsMjA1NjYsMjA1NjcsMjA1NjgsMjA1NjksMjA1NzEsMjA1''@;'; put 'put ''NzMsMjA1NzQsMjA1NzUsMjA1NzYsMjA1NzcsMjA1NzgsMjA1NzksMjA1ODAsMjA1ODIsMjA1ODMsMjA1ODQsMjA1ODUsMjA1ODYsMjA1ODcsMjA1ODksMjA1OTAsMjA1OTEsMjA1OTIsMjA1OTMsMjA1OTQsMjA1OTUsMjA1OTYsMjA1OTcsMjA2MDAsMjA2MDEsMjA2MDIsMjA2MDQsMjA2MDUs''@;'; put 'put ''MjA2MDksMjA2MTAsMjA2MTEsMjA2MTIsMjA2MTQsMjA2MTUsMjA2MTcsMjA2MTgsMjA2MTksMjA2MjAsMjA2MjIsMjA2MjMsMjA2MjQsMjA2MjUsMjA2MjYsMjA2MjcsMjA2MjgsMjA2MjksMjA2MzAsMjA2MzEsMjA2MzIsMjA2MzMsMjA2MzQsMjA2MzUsMjA2MzYsMjA2MzcsMjA2MzgsMjA2''@;'; put 'put ''MzksMjA2NDAsMjA2NDEsMjA2NDIsMjA2NDQsMjA2NDYsMjA2NTAsMjA2NTEsMjA2NTMsMjA2NTQsMjA2NTUsMjA2NTYsMjA2NTcsMjA2NTksMjA2NjAsMjA2NjEsMjA2NjIsMjA2NjMsMjA2NjQsMjA2NjUsMjA2NjgsMjA2NjksMjA2NzAsMjA2NzEsMjA2NzIsMjA2NzMsMjA2NzQsMjA2NzUs''@;'; put 'put ''MjA2NzYsMjA2NzcsMjA2NzgsMjA2NzksMjA2ODAsMjA2ODEsMjA2ODIsMjA2ODMsMjA2ODQsMjA2ODUsMjA2ODYsMjA2ODgsMjA2ODksMjA2OTAsMjA2OTEsMjA2OTIsMjA2OTMsMjA2OTUsMjA2OTYsMjA2OTcsMjA2OTksMjA3MDAsMjA3MDEsMjA3MDIsMjA3MDMsMjA3MDQsMjA3MDUsMjA3''@;'; put 'put ''MDYsMjA3MDcsMjA3MDgsMjA3MDksMjA3MTIsMjA3MTMsMjA3MTQsMjA3MTUsMjA3MTksMjA3MjAsMjA3MjEsMjA3MjIsMjA3MjQsMjA3MjYsMjA3MjcsMjA3MjgsMjA3MjksMjA3MzAsMjA3MzIsMjA3MzMsMjA3MzQsMjA3MzUsMjA3MzYsMjA3MzcsMjA3MzgsMjA3MzksMjA3NDAsMjA3NDEs''@;'; put 'put ''MjA3NDQsMjA3NDUsMjA3NDYsMjA3NDgsMjA3NDksMjA3NTAsMjA3NTEsMjA3NTIsMjA3NTMsMjA3NTUsMjA3NTYsMjA3NTcsMjA3NTgsMjA3NTksMjA3NjAsMjA3NjEsMjA3NjIsMjA3NjMsMjA3NjQsMjA3NjUsMjA3NjYsMjA3NjcsMjA3NjgsMjA3NzAsMjA3NzEsMjA3NzIsMjA3NzMsMjA3''@;'; put 'put ''NzQsMjA3NzUsMjA3NzYsMjA3NzcsMjA3NzgsMjA3NzksMjA3ODAsMjA3ODEsMjA3ODIsMjA3ODMsMjA3ODQsMjA3ODUsMjA3ODYsMjA3ODcsMjA3ODgsMjA3ODksMjA3OTAsMjA3OTEsMjA3OTIsMjA3OTMsMjA3OTQsMjA3OTUsMjA3OTYsMjA3OTcsMjA3OTgsMjA4MDIsMjA4MDcsMjA4MTAs''@;'; put 'put ''MjA4MTIsMjA4MTQsMjA4MTUsMjA4MTYsMjA4MTgsMjA4MTksMjA4MjMsMjA4MjQsMjA4MjUsMjA4MjcsMjA4MjksMjA4MzAsMjA4MzEsMjA4MzIsMjA4MzMsMjA4MzUsMjA4MzYsMjA4MzgsMjA4MzksMjA4NDEsMjA4NDIsMjA4NDcsMjA4NTAsMjA4NTgsMjA4NjIsMjA4NjMsMjA4NjcsMjA4''@;'; put 'put ''NjgsMjA4NzAsMjA4NzEsMjA4NzQsMjA4NzUsMjA4NzgsMjA4NzksMjA4ODAsMjA4ODEsMjA4ODMsMjA4ODQsMjA4ODgsMjA4OTAsMjA4OTMsMjA4OTQsMjA4OTUsMjA4OTcsMjA4OTksMjA5MDIsMjA5MDMsMjA5MDQsMjA5MDUsMjA5MDYsMjA5MDksMjA5MTAsMjA5MTYsMjA5MjAsMjA5MjEs''@;'; put 'put ''MjA5MjIsMjA5MjYsMjA5MjcsMjA5MjksMjA5MzAsMjA5MzEsMjA5MzMsMjA5MzYsMjA5MzgsMjA5NDEsMjA5NDIsMjA5NDQsMjA5NDYsMjA5NDcsMjA5NDgsMjA5NDksMjA5NTAsMjA5NTEsMjA5NTIsMjA5NTMsMjA5NTQsMjA5NTYsMjA5NTgsMjA5NTksMjA5NjIsMjA5NjMsMjA5NjUsMjA5''@;'; put 'put ''NjYsMjA5NjcsMjA5NjgsMjA5NjksMjA5NzAsMjA5NzIsMjA5NzQsMjA5NzcsMjA5NzgsMjA5ODAsMjA5ODMsMjA5OTAsMjA5OTYsMjA5OTcsMjEwMDEsMjEwMDMsMjEwMDQsMjEwMDcsMjEwMDgsMjEwMTEsMjEwMTIsMjEwMTMsMjEwMjAsMjEwMjIsMjEwMjMsMjEwMjUsMjEwMjYsMjEwMjcs''@;'; put 'put ''MjEwMjksMjEwMzAsMjEwMzEsMjEwMzQsMjEwMzYsMjEwMzksMjEwNDEsMjEwNDIsMjEwNDQsMjEwNDUsMjEwNTIsMjEwNTQsMjEwNjAsMjEwNjEsMjEwNjIsMjEwNjMsMjEwNjQsMjEwNjUsMjEwNjcsMjEwNzAsMjEwNzEsMjEwNzQsMjEwNzUsMjEwNzcsMjEwNzksMjEwODAsMjEwODEsMjEw''@;'; put 'put ''ODIsMjEwODMsMjEwODUsMjEwODcsMjEwODgsMjEwOTAsMjEwOTEsMjEwOTIsMjEwOTQsMjEwOTYsMjEwOTksMjExMDAsMjExMDEsMjExMDIsMjExMDQsMjExMDUsMjExMDcsMjExMDgsMjExMDksMjExMTAsMjExMTEsMjExMTIsMjExMTMsMjExMTQsMjExMTUsMjExMTYsMjExMTgsMjExMjAs''@;'; put 'put ''MjExMjMsMjExMjQsMjExMjUsMjExMjYsMjExMjcsMjExMjksMjExMzAsMjExMzEsMjExMzIsMjExMzMsMjExMzQsMjExMzUsMjExMzcsMjExMzgsMjExNDAsMjExNDEsMjExNDIsMjExNDMsMjExNDQsMjExNDUsMjExNDYsMjExNDgsMjExNTYsMjExNTcsMjExNTgsMjExNTksMjExNjYsMjEx''@;'; put 'put ''NjcsMjExNjgsMjExNzIsMjExNzMsMjExNzQsMjExNzUsMjExNzYsMjExNzcsMjExNzgsMjExNzksMjExODAsMjExODEsMjExODQsMjExODUsMjExODYsMjExODgsMjExODksMjExOTAsMjExOTIsMjExOTQsMjExOTYsMjExOTcsMjExOTgsMjExOTksMjEyMDEsMjEyMDMsMjEyMDQsMjEyMDUs''@;'; put 'put ''MjEyMDcsMjEyMDksMjEyMTAsMjEyMTEsMjEyMTIsMjEyMTMsMjEyMTQsMjEyMTYsMjEyMTcsMjEyMTgsMjEyMTksMjEyMjEsMjEyMjIsMjEyMjMsMjEyMjQsMjEyMjUsMjEyMjYsMjEyMjcsMjEyMjgsMjEyMjksMjEyMzAsMjEyMzEsMjEyMzMsMjEyMzQsMjEyMzUsMjEyMzYsMjEyMzcsMjEy''@;'; put 'put ''MzgsMjEyMzksMjEyNDAsMjEyNDMsMjEyNDQsMjEyNDUsMjEyNDksMjEyNTAsMjEyNTEsMjEyNTIsMjEyNTUsMjEyNTcsMjEyNTgsMjEyNTksMjEyNjAsMjEyNjIsMjEyNjUsMjEyNjYsMjEyNjcsMjEyNjgsMjEyNzIsMjEyNzUsMjEyNzYsMjEyNzgsMjEyNzksMjEyODIsMjEyODQsMjEyODUs''@;'; put 'put ''MjEyODcsMjEyODgsMjEyODksMjEyOTEsMjEyOTIsMjEyOTMsMjEyOTUsMjEyOTYsMjEyOTcsMjEyOTgsMjEyOTksMjEzMDAsMjEzMDEsMjEzMDIsMjEzMDMsMjEzMDQsMjEzMDgsMjEzMDksMjEzMTIsMjEzMTQsMjEzMTYsMjEzMTgsMjEzMjMsMjEzMjQsMjEzMjUsMjEzMjgsMjEzMzIsMjEz''@;'; put 'put ''MzYsMjEzMzcsMjEzMzksMjEzNDEsMjEzNDksMjEzNTIsMjEzNTQsMjEzNTYsMjEzNTcsMjEzNjIsMjEzNjYsMjEzNjksMjEzNzEsMjEzNzIsMjEzNzMsMjEzNzQsMjEzNzYsMjEzNzcsMjEzNzksMjEzODMsMjEzODQsMjEzODYsMjEzOTAsMjEzOTEsMjEzOTIsMjEzOTMsMjEzOTQsMjEzOTUs''@;'; put 'put ''MjEzOTYsMjEzOTgsMjEzOTksMjE0MDEsMjE0MDMsMjE0MDQsMjE0MDYsMjE0MDgsMjE0MDksMjE0MTIsMjE0MTUsMjE0MTgsMjE0MTksMjE0MjAsMjE0MjEsMjE0MjMsMjE0MjQsMjE0MjUsMjE0MjYsMjE0MjcsMjE0MjgsMjE0MjksMjE0MzEsMjE0MzIsMjE0MzMsMjE0MzQsMjE0MzYsMjE0''@;'; put 'put ''MzcsMjE0MzgsMjE0NDAsMjE0NDMsMjE0NDQsMjE0NDUsMjE0NDYsMjE0NDcsMjE0NTQsMjE0NTUsMjE0NTYsMjE0NTgsMjE0NTksMjE0NjEsMjE0NjYsMjE0NjgsMjE0NjksMjE0NzAsMjE0NzMsMjE0NzQsMjE0NzksMjE0OTIsMjE0OTgsMjE1MDIsMjE1MDMsMjE1MDQsMjE1MDYsMjE1MDks''@;'; put 'put ''MjE1MTEsMjE1MTUsMjE1MjQsMjE1MjgsMjE1MjksMjE1MzAsMjE1MzIsMjE1MzgsMjE1NDAsMjE1NDEsMjE1NDYsMjE1NTIsMjE1NTUsMjE1NTgsMjE1NTksMjE1NjIsMjE1NjUsMjE1NjcsMjE1NjksMjE1NzAsMjE1NzIsMjE1NzMsMjE1NzUsMjE1NzcsMjE1ODAsMjE1ODEsMjE1ODIsMjE1''@;'; put 'put ''ODMsMjE1ODUsMjE1OTQsMjE1OTcsMjE1OTgsMjE1OTksMjE2MDAsMjE2MDEsMjE2MDMsMjE2MDUsMjE2MDcsMjE2MDksMjE2MTAsMjE2MTEsMjE2MTIsMjE2MTMsMjE2MTQsMjE2MTUsMjE2MTYsMjE2MjAsMjE2MjUsMjE2MjYsMjE2MzAsMjE2MzEsMjE2MzMsMjE2MzUsMjE2MzcsMjE2Mzks''@;'; put 'put ''MjE2NDAsMjE2NDEsMjE2NDIsMjE2NDUsMjE2NDksMjE2NTEsMjE2NTUsMjE2NTYsMjE2NjAsMjE2NjIsMjE2NjMsMjE2NjQsMjE2NjUsMjE2NjYsMjE2NjksMjE2NzgsMjE2ODAsMjE2ODIsMjE2ODUsMjE2ODYsMjE2ODcsMjE2ODksMjE2OTAsMjE2OTIsMjE2OTQsMjE2OTksMjE3MDEsMjE3''@;'; put 'put ''MDYsMjE3MDcsMjE3MTgsMjE3MjAsMjE3MjMsMjE3MjgsMjE3MjksMjE3MzAsMjE3MzEsMjE3MzIsMjE3MzksMjE3NDAsMjE3NDMsMjE3NDQsMjE3NDUsMjE3NDgsMjE3NDksMjE3NTAsMjE3NTEsMjE3NTIsMjE3NTMsMjE3NTUsMjE3NTgsMjE3NjAsMjE3NjIsMjE3NjMsMjE3NjQsMjE3NjUs''@;'; put 'put ''MjE3NjgsMjE3NzAsMjE3NzEsMjE3NzIsMjE3NzMsMjE3NzQsMjE3NzgsMjE3NzksMjE3ODEsMjE3ODIsMjE3ODMsMjE3ODQsMjE3ODUsMjE3ODYsMjE3ODgsMjE3ODksMjE3OTAsMjE3OTEsMjE3OTMsMjE3OTcsMjE3OTgsMjE4MDAsMjE4MDEsMjE4MDMsMjE4MDUsMjE4MTAsMjE4MTIsMjE4''@;'; put 'put ''MTMsMjE4MTQsMjE4MTYsMjE4MTcsMjE4MTgsMjE4MTksMjE4MjEsMjE4MjQsMjE4MjYsMjE4MjksMjE4MzEsMjE4MzIsMjE4MzUsMjE4MzYsMjE4MzcsMjE4MzgsMjE4MzksMjE4NDEsMjE4NDIsMjE4NDMsMjE4NDQsMjE4NDcsMjE4NDgsMjE4NDksMjE4NTAsMjE4NTEsMjE4NTMsMjE4NTQs''@;'; put 'put ''MjE4NTUsMjE4NTYsMjE4NTgsMjE4NTksMjE4NjQsMjE4NjUsMjE4NjcsMjE4NzEsMjE4NzIsMjE4NzMsMjE4NzQsMjE4NzUsMjE4NzYsMjE4ODEsMjE4ODIsMjE4ODUsMjE4ODcsMjE4OTMsMjE4OTQsMjE5MDAsMjE5MDEsMjE5MDIsMjE5MDQsMjE5MDYsMjE5MDcsMjE5MDksMjE5MTAsMjE5''@;'; put 'put ''MTEsMjE5MTQsMjE5MTUsMjE5MTgsMjE5MjAsMjE5MjEsMjE5MjIsMjE5MjMsMjE5MjQsMjE5MjUsMjE5MjYsMjE5MjgsMjE5MjksMjE5MzAsMjE5MzEsMjE5MzIsMjE5MzMsMjE5MzQsMjE5MzUsMjE5MzYsMjE5MzgsMjE5NDAsMjE5NDIsMjE5NDQsMjE5NDYsMjE5NDgsMjE5NTEsMjE5NTIs''@;'; put 'put ''MjE5NTMsMjE5NTQsMjE5NTUsMjE5NTgsMjE5NTksMjE5NjAsMjE5NjIsMjE5NjMsMjE5NjYsMjE5NjcsMjE5NjgsMjE5NzMsMjE5NzUsMjE5NzYsMjE5NzcsMjE5NzgsMjE5NzksMjE5ODIsMjE5ODQsMjE5ODYsMjE5OTEsMjE5OTMsMjE5OTcsMjE5OTgsMjJlMywyMjAwMSwyMjAwNCwyMjAw''@;'; put 'put ''NiwyMjAwOCwyMjAwOSwyMjAxMCwyMjAxMSwyMjAxMiwyMjAxNSwyMjAxOCwyMjAxOSwyMjAyMCwyMjAyMSwyMjAyMiwyMjAyMywyMjAyNiwyMjAyNywyMjAyOSwyMjAzMiwyMjAzMywyMjAzNCwyMjAzNSwyMjAzNiwyMjAzNywyMjAzOCwyMjAzOSwyMjA0MSwyMjA0MiwyMjA0NCwyMjA0NSwy''@;'; put 'put ''MjA0OCwyMjA0OSwyMjA1MCwyMjA1MywyMjA1NCwyMjA1NiwyMjA1NywyMjA1OCwyMjA1OSwyMjA2MiwyMjA2MywyMjA2NCwyMjA2NywyMjA2OSwyMjA3MSwyMjA3MiwyMjA3NCwyMjA3NiwyMjA3NywyMjA3OCwyMjA4MCwyMjA4MSwyMjA4MiwyMjA4MywyMjA4NCwyMjA4NSwyMjA4NiwyMjA4''@;'; put 'put ''NywyMjA4OCwyMjA4OSwyMjA5MCwyMjA5MSwyMjA5NSwyMjA5NiwyMjA5NywyMjA5OCwyMjA5OSwyMjEwMSwyMjEwMiwyMjEwNiwyMjEwNywyMjEwOSwyMjExMCwyMjExMSwyMjExMiwyMjExMywyMjExNSwyMjExNywyMjExOCwyMjExOSwyMjEyNSwyMjEyNiwyMjEyNywyMjEyOCwyMjEzMCwy''@;'; put 'put ''MjEzMSwyMjEzMiwyMjEzMywyMjEzNSwyMjEzNiwyMjEzNywyMjEzOCwyMjE0MSwyMjE0MiwyMjE0MywyMjE0NCwyMjE0NSwyMjE0NiwyMjE0NywyMjE0OCwyMjE1MSwyMjE1MiwyMjE1MywyMjE1NCwyMjE1NSwyMjE1NiwyMjE1NywyMjE2MCwyMjE2MSwyMjE2MiwyMjE2NCwyMjE2NSwyMjE2''@;'; put 'put ''NiwyMjE2NywyMjE2OCwyMjE2OSwyMjE3MCwyMjE3MSwyMjE3MiwyMjE3MywyMjE3NCwyMjE3NSwyMjE3NiwyMjE3NywyMjE3OCwyMjE4MCwyMjE4MSwyMjE4MiwyMjE4MywyMjE4NCwyMjE4NSwyMjE4NiwyMjE4NywyMjE4OCwyMjE4OSwyMjE5MCwyMjE5MiwyMjE5MywyMjE5NCwyMjE5NSwy''@;'; put 'put ''MjE5NiwyMjE5NywyMjE5OCwyMjIwMCwyMjIwMSwyMjIwMiwyMjIwMywyMjIwNSwyMjIwNiwyMjIwNywyMjIwOCwyMjIwOSwyMjIxMCwyMjIxMSwyMjIxMiwyMjIxMywyMjIxNCwyMjIxNSwyMjIxNiwyMjIxNywyMjIxOSwyMjIyMCwyMjIyMSwyMjIyMiwyMjIyMywyMjIyNCwyMjIyNSwyMjIy''@;'; put 'put ''NiwyMjIyNywyMjIyOSwyMjIzMCwyMjIzMiwyMjIzMywyMjIzNiwyMjI0MywyMjI0NSwyMjI0NiwyMjI0NywyMjI0OCwyMjI0OSwyMjI1MCwyMjI1MiwyMjI1NCwyMjI1NSwyMjI1OCwyMjI1OSwyMjI2MiwyMjI2MywyMjI2NCwyMjI2NywyMjI2OCwyMjI3MiwyMjI3MywyMjI3NCwyMjI3Nywy''@;'; put 'put ''MjI3OSwyMjI4MywyMjI4NCwyMjI4NSwyMjI4NiwyMjI4NywyMjI4OCwyMjI4OSwyMjI5MCwyMjI5MSwyMjI5MiwyMjI5MywyMjI5NCwyMjI5NSwyMjI5NiwyMjI5NywyMjI5OCwyMjI5OSwyMjMwMSwyMjMwMiwyMjMwNCwyMjMwNSwyMjMwNiwyMjMwOCwyMjMwOSwyMjMxMCwyMjMxMSwyMjMx''@;'; put 'put ''NSwyMjMyMSwyMjMyMiwyMjMyNCwyMjMyNSwyMjMyNiwyMjMyNywyMjMyOCwyMjMzMiwyMjMzMywyMjMzNSwyMjMzNywyMjMzOSwyMjM0MCwyMjM0MSwyMjM0MiwyMjM0NCwyMjM0NSwyMjM0NywyMjM1NCwyMjM1NSwyMjM1NiwyMjM1NywyMjM1OCwyMjM2MCwyMjM2MSwyMjM3MCwyMjM3MSwy''@;'; put 'put ''MjM3MywyMjM3NSwyMjM4MCwyMjM4MiwyMjM4NCwyMjM4NSwyMjM4NiwyMjM4OCwyMjM4OSwyMjM5MiwyMjM5MywyMjM5NCwyMjM5NywyMjM5OCwyMjM5OSwyMjQwMCwyMjQwMSwyMjQwNywyMjQwOCwyMjQwOSwyMjQxMCwyMjQxMywyMjQxNCwyMjQxNSwyMjQxNiwyMjQxNywyMjQyMCwyMjQy''@;'; put 'put ''MSwyMjQyMiwyMjQyMywyMjQyNCwyMjQyNSwyMjQyNiwyMjQyOCwyMjQyOSwyMjQzMCwyMjQzMSwyMjQzNywyMjQ0MCwyMjQ0MiwyMjQ0NCwyMjQ0NywyMjQ0OCwyMjQ0OSwyMjQ1MSwyMjQ1MywyMjQ1NCwyMjQ1NSwyMjQ1NywyMjQ1OCwyMjQ1OSwyMjQ2MCwyMjQ2MSwyMjQ2MiwyMjQ2Mywy''@;'; put 'put ''MjQ2NCwyMjQ2NSwyMjQ2OCwyMjQ2OSwyMjQ3MCwyMjQ3MSwyMjQ3MiwyMjQ3MywyMjQ3NCwyMjQ3NiwyMjQ3NywyMjQ4MCwyMjQ4MSwyMjQ4MywyMjQ4NiwyMjQ4NywyMjQ5MSwyMjQ5MiwyMjQ5NCwyMjQ5NywyMjQ5OCwyMjQ5OSwyMjUwMSwyMjUwMiwyMjUwMywyMjUwNCwyMjUwNSwyMjUw''@;'; put 'put ''NiwyMjUwNywyMjUwOCwyMjUxMCwyMjUxMiwyMjUxMywyMjUxNCwyMjUxNSwyMjUxNywyMjUxOCwyMjUxOSwyMjUyMywyMjUyNCwyMjUyNiwyMjUyNywyMjUyOSwyMjUzMSwyMjUzMiwyMjUzMywyMjUzNiwyMjUzNywyMjUzOCwyMjU0MCwyMjU0MiwyMjU0MywyMjU0NCwyMjU0NiwyMjU0Nywy''@;'; put 'put ''MjU0OCwyMjU1MCwyMjU1MSwyMjU1MiwyMjU1NCwyMjU1NSwyMjU1NiwyMjU1NywyMjU1OSwyMjU2MiwyMjU2MywyMjU2NSwyMjU2NiwyMjU2NywyMjU2OCwyMjU2OSwyMjU3MSwyMjU3MiwyMjU3MywyMjU3NCwyMjU3NSwyMjU3NywyMjU3OCwyMjU3OSwyMjU4MCwyMjU4MiwyMjU4MywyMjU4''@;'; put 'put ''NCwyMjU4NSwyMjU4NiwyMjU4NywyMjU4OCwyMjU4OSwyMjU5MCwyMjU5MSwyMjU5MiwyMjU5MywyMjU5NCwyMjU5NSwyMjU5NywyMjU5OCwyMjU5OSwyMjYwMCwyMjYwMSwyMjYwMiwyMjYwMywyMjYwNiwyMjYwNywyMjYwOCwyMjYxMCwyMjYxMSwyMjYxMywyMjYxNCwyMjYxNSwyMjYxNywy''@;'; put 'put ''MjYxOCwyMjYxOSwyMjYyMCwyMjYyMSwyMjYyMywyMjYyNCwyMjYyNSwyMjYyNiwyMjYyNywyMjYyOCwyMjYzMCwyMjYzMSwyMjYzMiwyMjYzMywyMjYzNCwyMjYzNywyMjYzOCwyMjYzOSwyMjY0MCwyMjY0MSwyMjY0MiwyMjY0MywyMjY0NCwyMjY0NSwyMjY0NiwyMjY0NywyMjY0OCwyMjY0''@;'; put 'put ''OSwyMjY1MCwyMjY1MSwyMjY1MiwyMjY1MywyMjY1NSwyMjY1OCwyMjY2MCwyMjY2MiwyMjY2MywyMjY2NCwyMjY2NiwyMjY2NywyMjY2OCwyMjY2OSwyMjY3MCwyMjY3MSwyMjY3MiwyMjY3MywyMjY3NiwyMjY3NywyMjY3OCwyMjY3OSwyMjY4MCwyMjY4MywyMjY4NCwyMjY4NSwyMjY4OCwy''@;'; put 'put ''MjY4OSwyMjY5MCwyMjY5MSwyMjY5MiwyMjY5MywyMjY5NCwyMjY5NSwyMjY5OCwyMjY5OSwyMjcwMCwyMjcwMSwyMjcwMiwyMjcwMywyMjcwNCwyMjcwNSwyMjcwNiwyMjcwNywyMjcwOCwyMjcwOSwyMjcxMCwyMjcxMSwyMjcxMiwyMjcxMywyMjcxNCwyMjcxNSwyMjcxNywyMjcxOCwyMjcx''@;'; put 'put ''OSwyMjcyMCwyMjcyMiwyMjcyMywyMjcyNCwyMjcyNiwyMjcyNywyMjcyOCwyMjcyOSwyMjczMCwyMjczMSwyMjczMiwyMjczMywyMjczNCwyMjczNSwyMjczNiwyMjczOCwyMjczOSwyMjc0MCwyMjc0MiwyMjc0MywyMjc0NCwyMjc0NSwyMjc0NiwyMjc0NywyMjc0OCwyMjc0OSwyMjc1MCwy''@;'; put 'put ''Mjc1MSwyMjc1MiwyMjc1MywyMjc1NCwyMjc1NSwyMjc1NywyMjc1OCwyMjc1OSwyMjc2MCwyMjc2MSwyMjc2MiwyMjc2NSwyMjc2NywyMjc2OSwyMjc3MCwyMjc3MiwyMjc3MywyMjc3NSwyMjc3NiwyMjc3OCwyMjc3OSwyMjc4MCwyMjc4MSwyMjc4MiwyMjc4MywyMjc4NCwyMjc4NSwyMjc4''@;'; put 'put ''NywyMjc4OSwyMjc5MCwyMjc5MiwyMjc5MywyMjc5NCwyMjc5NSwyMjc5NiwyMjc5OCwyMjgwMCwyMjgwMSwyMjgwMiwyMjgwMywyMjgwNywyMjgwOCwyMjgxMSwyMjgxMywyMjgxNCwyMjgxNiwyMjgxNywyMjgxOCwyMjgxOSwyMjgyMiwyMjgyNCwyMjgyOCwyMjgzMiwyMjgzNCwyMjgzNSwy''@;'; put 'put ''MjgzNywyMjgzOCwyMjg0MywyMjg0NSwyMjg0NiwyMjg0NywyMjg0OCwyMjg1MSwyMjg1MywyMjg1NCwyMjg1OCwyMjg2MCwyMjg2MSwyMjg2NCwyMjg2NiwyMjg2NywyMjg3MywyMjg3NSwyMjg3NiwyMjg3NywyMjg3OCwyMjg3OSwyMjg4MSwyMjg4MywyMjg4NCwyMjg4NiwyMjg4NywyMjg4''@;'; put 'put ''OCwyMjg4OSwyMjg5MCwyMjg5MSwyMjg5MiwyMjg5MywyMjg5NCwyMjg5NSwyMjg5NiwyMjg5NywyMjg5OCwyMjkwMSwyMjkwMywyMjkwNiwyMjkwNywyMjkwOCwyMjkxMCwyMjkxMSwyMjkxMiwyMjkxNywyMjkyMSwyMjkyMywyMjkyNCwyMjkyNiwyMjkyNywyMjkyOCwyMjkyOSwyMjkzMiwy''@;'; put 'put ''MjkzMywyMjkzNiwyMjkzOCwyMjkzOSwyMjk0MCwyMjk0MSwyMjk0MywyMjk0NCwyMjk0NSwyMjk0NiwyMjk1MCwyMjk1MSwyMjk1NiwyMjk1NywyMjk2MCwyMjk2MSwyMjk2MywyMjk2NCwyMjk2NSwyMjk2NiwyMjk2NywyMjk2OCwyMjk3MCwyMjk3MiwyMjk3MywyMjk3NSwyMjk3NiwyMjk3''@;'; put 'put ''NywyMjk3OCwyMjk3OSwyMjk4MCwyMjk4MSwyMjk4MywyMjk4NCwyMjk4NSwyMjk4OCwyMjk4OSwyMjk5MCwyMjk5MSwyMjk5NywyMjk5OCwyMzAwMSwyMzAwMywyMzAwNiwyMzAwNywyMzAwOCwyMzAwOSwyMzAxMCwyMzAxMiwyMzAxNCwyMzAxNSwyMzAxNywyMzAxOCwyMzAxOSwyMzAyMSwy''@;'; put 'put ''MzAyMiwyMzAyMywyMzAyNCwyMzAyNSwyMzAyNiwyMzAyNywyMzAyOCwyMzAyOSwyMzAzMCwyMzAzMSwyMzAzMiwyMzAzNCwyMzAzNiwyMzAzNywyMzAzOCwyMzA0MCwyMzA0MiwyMzA1MCwyMzA1MSwyMzA1MywyMzA1NCwyMzA1NSwyMzA1NiwyMzA1OCwyMzA2MCwyMzA2MSwyMzA2MiwyMzA2''@;'; put 'put ''MywyMzA2NSwyMzA2NiwyMzA2NywyMzA2OSwyMzA3MCwyMzA3MywyMzA3NCwyMzA3NiwyMzA3OCwyMzA3OSwyMzA4MCwyMzA4MiwyMzA4MywyMzA4NCwyMzA4NSwyMzA4NiwyMzA4NywyMzA4OCwyMzA5MSwyMzA5MywyMzA5NSwyMzA5NiwyMzA5NywyMzA5OCwyMzA5OSwyMzEwMSwyMzEwMiwy''@;'; put 'put ''MzEwMywyMzEwNSwyMzEwNiwyMzEwNywyMzEwOCwyMzEwOSwyMzExMSwyMzExMiwyMzExNSwyMzExNiwyMzExNywyMzExOCwyMzExOSwyMzEyMCwyMzEyMSwyMzEyMiwyMzEyMywyMzEyNCwyMzEyNiwyMzEyNywyMzEyOCwyMzEyOSwyMzEzMSwyMzEzMiwyMzEzMywyMzEzNCwyMzEzNSwyMzEz''@;'; put 'put ''NiwyMzEzNywyMzEzOSwyMzE0MCwyMzE0MSwyMzE0MiwyMzE0NCwyMzE0NSwyMzE0NywyMzE0OCwyMzE0OSwyMzE1MCwyMzE1MSwyMzE1MiwyMzE1MywyMzE1NCwyMzE1NSwyMzE2MCwyMzE2MSwyMzE2MywyMzE2NCwyMzE2NSwyMzE2NiwyMzE2OCwyMzE2OSwyMzE3MCwyMzE3MSwyMzE3Miwy''@;'; put 'put ''MzE3MywyMzE3NCwyMzE3NSwyMzE3NiwyMzE3NywyMzE3OCwyMzE3OSwyMzE4MCwyMzE4MSwyMzE4MiwyMzE4MywyMzE4NCwyMzE4NSwyMzE4NywyMzE4OCwyMzE4OSwyMzE5MCwyMzE5MSwyMzE5MiwyMzE5MywyMzE5NiwyMzE5NywyMzE5OCwyMzE5OSwyMzIwMCwyMzIwMSwyMzIwMiwyMzIw''@;'; put 'put ''MywyMzIwNCwyMzIwNSwyMzIwNiwyMzIwNywyMzIwOCwyMzIwOSwyMzIxMSwyMzIxMiwyMzIxMywyMzIxNCwyMzIxNSwyMzIxNiwyMzIxNywyMzIyMCwyMzIyMiwyMzIyMywyMzIyNSwyMzIyNiwyMzIyNywyMzIyOCwyMzIyOSwyMzIzMSwyMzIzMiwyMzIzNSwyMzIzNiwyMzIzNywyMzIzOCwy''@;'; put 'put ''MzIzOSwyMzI0MCwyMzI0MiwyMzI0MywyMzI0NSwyMzI0NiwyMzI0NywyMzI0OCwyMzI0OSwyMzI1MSwyMzI1MywyMzI1NSwyMzI1NywyMzI1OCwyMzI1OSwyMzI2MSwyMzI2MiwyMzI2MywyMzI2NiwyMzI2OCwyMzI2OSwyMzI3MSwyMzI3MiwyMzI3NCwyMzI3NiwyMzI3NywyMzI3OCwyMzI3''@;'; put 'put ''OSwyMzI4MCwyMzI4MiwyMzI4MywyMzI4NCwyMzI4NSwyMzI4NiwyMzI4NywyMzI4OCwyMzI4OSwyMzI5MCwyMzI5MSwyMzI5MiwyMzI5MywyMzI5NCwyMzI5NSwyMzI5NiwyMzI5NywyMzI5OCwyMzI5OSwyMzMwMCwyMzMwMSwyMzMwMiwyMzMwMywyMzMwNCwyMzMwNiwyMzMwNywyMzMwOCwy''@;'; put 'put ''MzMwOSwyMzMxMCwyMzMxMSwyMzMxMiwyMzMxMywyMzMxNCwyMzMxNSwyMzMxNiwyMzMxNywyMzMyMCwyMzMyMSwyMzMyMiwyMzMyMywyMzMyNCwyMzMyNSwyMzMyNiwyMzMyNywyMzMyOCwyMzMyOSwyMzMzMCwyMzMzMSwyMzMzMiwyMzMzMywyMzMzNCwyMzMzNSwyMzMzNiwyMzMzNywyMzMz''@;'; put 'put ''OCwyMzMzOSwyMzM0MCwyMzM0MSwyMzM0MiwyMzM0MywyMzM0NCwyMzM0NSwyMzM0NywyMzM0OSwyMzM1MCwyMzM1MiwyMzM1MywyMzM1NCwyMzM1NSwyMzM1NiwyMzM1NywyMzM1OCwyMzM1OSwyMzM2MSwyMzM2MiwyMzM2MywyMzM2NCwyMzM2NSwyMzM2NiwyMzM2NywyMzM2OCwyMzM2OSwy''@;'; put 'put ''MzM3MCwyMzM3MSwyMzM3MiwyMzM3MywyMzM3NCwyMzM3NSwyMzM3OCwyMzM4MiwyMzM5MCwyMzM5MiwyMzM5MywyMzM5OSwyMzQwMCwyMzQwMywyMzQwNSwyMzQwNiwyMzQwNywyMzQxMCwyMzQxMiwyMzQxNCwyMzQxNSwyMzQxNiwyMzQxNywyMzQxOSwyMzQyMCwyMzQyMiwyMzQyMywyMzQy''@;'; put 'put ''NiwyMzQzMCwyMzQzNCwyMzQzNywyMzQzOCwyMzQ0MCwyMzQ0MSwyMzQ0MiwyMzQ0NCwyMzQ0NiwyMzQ1NSwyMzQ2MywyMzQ2NCwyMzQ2NSwyMzQ2OCwyMzQ2OSwyMzQ3MCwyMzQ3MSwyMzQ3MywyMzQ3NCwyMzQ3OSwyMzQ4MiwyMzQ4MywyMzQ4NCwyMzQ4OCwyMzQ4OSwyMzQ5MSwyMzQ5Niwy''@;'; put 'put ''MzQ5NywyMzQ5OCwyMzQ5OSwyMzUwMSwyMzUwMiwyMzUwMywyMzUwNSwyMzUwOCwyMzUwOSwyMzUxMCwyMzUxMSwyMzUxMiwyMzUxMywyMzUxNCwyMzUxNSwyMzUxNiwyMzUyMCwyMzUyMiwyMzUyMywyMzUyNiwyMzUyNywyMzUyOSwyMzUzMCwyMzUzMSwyMzUzMiwyMzUzMywyMzUzNSwyMzUz''@;'; put 'put ''NywyMzUzOCwyMzUzOSwyMzU0MCwyMzU0MSwyMzU0MiwyMzU0MywyMzU0OSwyMzU1MCwyMzU1MiwyMzU1NCwyMzU1NSwyMzU1NywyMzU1OSwyMzU2MCwyMzU2MywyMzU2NCwyMzU2NSwyMzU2NiwyMzU2OCwyMzU3MCwyMzU3MSwyMzU3NSwyMzU3NywyMzU3OSwyMzU4MiwyMzU4MywyMzU4NCwy''@;'; put 'put ''MzU4NSwyMzU4NywyMzU5MCwyMzU5MiwyMzU5MywyMzU5NCwyMzU5NSwyMzU5NywyMzU5OCwyMzU5OSwyMzYwMCwyMzYwMiwyMzYwMywyMzYwNSwyMzYwNiwyMzYwNywyMzYxOSwyMzYyMCwyMzYyMiwyMzYyMywyMzYyOCwyMzYyOSwyMzYzNCwyMzYzNSwyMzYzNiwyMzYzOCwyMzYzOSwyMzY0''@;'; put 'put ''MCwyMzY0MiwyMzY0MywyMzY0NCwyMzY0NSwyMzY0NywyMzY1MCwyMzY1MiwyMzY1NSwyMzY1NiwyMzY1NywyMzY1OCwyMzY1OSwyMzY2MCwyMzY2MSwyMzY2NCwyMzY2NiwyMzY2NywyMzY2OCwyMzY2OSwyMzY3MCwyMzY3MSwyMzY3MiwyMzY3NSwyMzY3NiwyMzY3NywyMzY3OCwyMzY4MCwy''@;'; put 'put ''MzY4MywyMzY4NCwyMzY4NSwyMzY4NiwyMzY4NywyMzY4OSwyMzY5MCwyMzY5MSwyMzY5NCwyMzY5NSwyMzY5OCwyMzY5OSwyMzcwMSwyMzcwOSwyMzcxMCwyMzcxMSwyMzcxMiwyMzcxMywyMzcxNiwyMzcxNywyMzcxOCwyMzcxOSwyMzcyMCwyMzcyMiwyMzcyNiwyMzcyNywyMzcyOCwyMzcz''@;'; put 'put ''MCwyMzczMiwyMzczNCwyMzczNywyMzczOCwyMzczOSwyMzc0MCwyMzc0MiwyMzc0NCwyMzc0NiwyMzc0NywyMzc0OSwyMzc1MCwyMzc1MSwyMzc1MiwyMzc1MywyMzc1NCwyMzc1NiwyMzc1NywyMzc1OCwyMzc1OSwyMzc2MCwyMzc2MSwyMzc2MywyMzc2NCwyMzc2NSwyMzc2NiwyMzc2Nywy''@;'; put 'put ''Mzc2OCwyMzc3MCwyMzc3MSwyMzc3MiwyMzc3MywyMzc3NCwyMzc3NSwyMzc3NiwyMzc3OCwyMzc3OSwyMzc4MywyMzc4NSwyMzc4NywyMzc4OCwyMzc5MCwyMzc5MSwyMzc5MywyMzc5NCwyMzc5NSwyMzc5NiwyMzc5NywyMzc5OCwyMzc5OSwyMzgwMCwyMzgwMSwyMzgwMiwyMzgwNCwyMzgw''@;'; put 'put ''NSwyMzgwNiwyMzgwNywyMzgwOCwyMzgwOSwyMzgxMiwyMzgxMywyMzgxNiwyMzgxNywyMzgxOCwyMzgxOSwyMzgyMCwyMzgyMSwyMzgyMywyMzgyNCwyMzgyNSwyMzgyNiwyMzgyNywyMzgyOSwyMzgzMSwyMzgzMiwyMzgzMywyMzgzNCwyMzgzNiwyMzgzNywyMzgzOSwyMzg0MCwyMzg0MSwy''@;'; put 'put ''Mzg0MiwyMzg0MywyMzg0NSwyMzg0OCwyMzg1MCwyMzg1MSwyMzg1MiwyMzg1NSwyMzg1NiwyMzg1NywyMzg1OCwyMzg1OSwyMzg2MSwyMzg2MiwyMzg2MywyMzg2NCwyMzg2NSwyMzg2NiwyMzg2NywyMzg2OCwyMzg3MSwyMzg3MiwyMzg3MywyMzg3NCwyMzg3NSwyMzg3NiwyMzg3NywyMzg3''@;'; put 'put ''OCwyMzg4MCwyMzg4MSwyMzg4NSwyMzg4NiwyMzg4NywyMzg4OCwyMzg4OSwyMzg5MCwyMzg5MSwyMzg5MiwyMzg5MywyMzg5NCwyMzg5NSwyMzg5NywyMzg5OCwyMzkwMCwyMzkwMiwyMzkwMywyMzkwNCwyMzkwNSwyMzkwNiwyMzkwNywyMzkwOCwyMzkwOSwyMzkxMCwyMzkxMSwyMzkxMiwy''@;'; put 'put ''MzkxNCwyMzkxNywyMzkxOCwyMzkyMCwyMzkyMSwyMzkyMiwyMzkyMywyMzkyNSwyMzkyNiwyMzkyNywyMzkyOCwyMzkyOSwyMzkzMCwyMzkzMSwyMzkzMiwyMzkzMywyMzkzNCwyMzkzNSwyMzkzNiwyMzkzNywyMzkzOSwyMzk0MCwyMzk0MSwyMzk0MiwyMzk0MywyMzk0NCwyMzk0NSwyMzk0''@;'; put 'put ''NiwyMzk0NywyMzk0OCwyMzk0OSwyMzk1MCwyMzk1MSwyMzk1MiwyMzk1MywyMzk1NCwyMzk1NSwyMzk1NiwyMzk1NywyMzk1OCwyMzk1OSwyMzk2MCwyMzk2MiwyMzk2MywyMzk2NCwyMzk2NiwyMzk2NywyMzk2OCwyMzk2OSwyMzk3MCwyMzk3MSwyMzk3MiwyMzk3MywyMzk3NCwyMzk3NSwy''@;'; put 'put ''Mzk3NiwyMzk3NywyMzk3OCwyMzk3OSwyMzk4MCwyMzk4MSwyMzk4MiwyMzk4MywyMzk4NCwyMzk4NSwyMzk4NiwyMzk4NywyMzk4OCwyMzk4OSwyMzk5MCwyMzk5MiwyMzk5MywyMzk5NCwyMzk5NSwyMzk5NiwyMzk5NywyMzk5OCwyMzk5OSwyNGUzLDI0MDAxLDI0MDAyLDI0MDAzLDI0MDA0''@;'; put 'put ''LDI0MDA2LDI0MDA3LDI0MDA4LDI0MDA5LDI0MDEwLDI0MDExLDI0MDEyLDI0MDE0LDI0MDE1LDI0MDE2LDI0MDE3LDI0MDE4LDI0MDE5LDI0MDIwLDI0MDIxLDI0MDIyLDI0MDIzLDI0MDI0LDI0MDI1LDI0MDI2LDI0MDI4LDI0MDMxLDI0MDMyLDI0MDM1LDI0MDM2LDI0MDQyLDI0MDQ0LDI0''@;'; put 'put ''MDQ1LDI0MDQ4LDI0MDUzLDI0MDU0LDI0MDU2LDI0MDU3LDI0MDU4LDI0MDU5LDI0MDYwLDI0MDYzLDI0MDY0LDI0MDY4LDI0MDcxLDI0MDczLDI0MDc0LDI0MDc1LDI0MDc3LDI0MDc4LDI0MDgyLDI0MDgzLDI0MDg3LDI0MDk0LDI0MDk1LDI0MDk2LDI0MDk3LDI0MDk4LDI0MDk5LDI0MTAw''@;'; put 'put ''LDI0MTAxLDI0MTA0LDI0MTA1LDI0MTA2LDI0MTA3LDI0MTA4LDI0MTExLDI0MTEyLDI0MTE0LDI0MTE1LDI0MTE2LDI0MTE3LDI0MTE4LDI0MTIxLDI0MTIyLDI0MTI2LDI0MTI3LDI0MTI4LDI0MTI5LDI0MTMxLDI0MTM0LDI0MTM1LDI0MTM2LDI0MTM3LDI0MTM4LDI0MTM5LDI0MTQxLDI0''@;'; put 'put ''MTQyLDI0MTQzLDI0MTQ0LDI0MTQ1LDI0MTQ2LDI0MTQ3LDI0MTUwLDI0MTUxLDI0MTUyLDI0MTUzLDI0MTU0LDI0MTU2LDI0MTU3LDI0MTU5LDI0MTYwLDI0MTYzLDI0MTY0LDI0MTY1LDI0MTY2LDI0MTY3LDI0MTY4LDI0MTY5LDI0MTcwLDI0MTcxLDI0MTcyLDI0MTczLDI0MTc0LDI0MTc1''@;'; put 'put ''LDI0MTc2LDI0MTc3LDI0MTgxLDI0MTgzLDI0MTg1LDI0MTkwLDI0MTkzLDI0MTk0LDI0MTk1LDI0MTk3LDI0MjAwLDI0MjAxLDI0MjA0LDI0MjA1LDI0MjA2LDI0MjEwLDI0MjE2LDI0MjE5LDI0MjIxLDI0MjI1LDI0MjI2LDI0MjI3LDI0MjI4LDI0MjMyLDI0MjMzLDI0MjM0LDI0MjM1LDI0''@;'; put 'put ''MjM2LDI0MjM4LDI0MjM5LDI0MjQwLDI0MjQxLDI0MjQyLDI0MjQ0LDI0MjUwLDI0MjUxLDI0MjUyLDI0MjUzLDI0MjU1LDI0MjU2LDI0MjU3LDI0MjU4LDI0MjU5LDI0MjYwLDI0MjYxLDI0MjYyLDI0MjYzLDI0MjY0LDI0MjY3LDI0MjY4LDI0MjY5LDI0MjcwLDI0MjcxLDI0MjcyLDI0Mjc2''@;'; put 'put ''LDI0Mjc3LDI0Mjc5LDI0MjgwLDI0MjgxLDI0MjgyLDI0Mjg0LDI0Mjg1LDI0Mjg2LDI0Mjg3LDI0Mjg4LDI0Mjg5LDI0MjkwLDI0MjkxLDI0MjkyLDI0MjkzLDI0Mjk0LDI0Mjk1LDI0Mjk3LDI0Mjk5LDI0MzAwLDI0MzAxLDI0MzAyLDI0MzAzLDI0MzA0LDI0MzA1LDI0MzA2LDI0MzA3LDI0''@;'; put 'put ''MzA5LDI0MzEyLDI0MzEzLDI0MzE1LDI0MzE2LDI0MzE3LDI0MzI1LDI0MzI2LDI0MzI3LDI0MzI5LDI0MzMyLDI0MzMzLDI0MzM0LDI0MzM2LDI0MzM4LDI0MzQwLDI0MzQyLDI0MzQ1LDI0MzQ2LDI0MzQ4LDI0MzQ5LDI0MzUwLDI0MzUzLDI0MzU0LDI0MzU1LDI0MzU2LDI0MzYwLDI0MzYz''@;'; put 'put ''LDI0MzY0LDI0MzY2LDI0MzY4LDI0MzcwLDI0MzcxLDI0MzcyLDI0MzczLDI0Mzc0LDI0Mzc1LDI0Mzc2LDI0Mzc5LDI0MzgxLDI0MzgyLDI0MzgzLDI0Mzg1LDI0Mzg2LDI0Mzg3LDI0Mzg4LDI0Mzg5LDI0MzkwLDI0MzkxLDI0MzkyLDI0MzkzLDI0Mzk0LDI0Mzk1LDI0Mzk2LDI0Mzk3LDI0''@;'; put 'put ''Mzk4LDI0Mzk5LDI0NDAxLDI0NDA0LDI0NDA5LDI0NDEwLDI0NDExLDI0NDEyLDI0NDE0LDI0NDE1LDI0NDE2LDI0NDE5LDI0NDIxLDI0NDIzLDI0NDI0LDI0NDI3LDI0NDMwLDI0NDMxLDI0NDM0LDI0NDM2LDI0NDM3LDI0NDM4LDI0NDQwLDI0NDQyLDI0NDQ1LDI0NDQ2LDI0NDQ3LDI0NDUx''@;'; put 'put ''LDI0NDU0LDI0NDYxLDI0NDYyLDI0NDYzLDI0NDY1LDI0NDY3LDI0NDY4LDI0NDcwLDI0NDc0LDI0NDc1LDI0NDc3LDI0NDc4LDI0NDc5LDI0NDgwLDI0NDgyLDI0NDgzLDI0NDg0LDI0NDg1LDI0NDg2LDI0NDg3LDI0NDg5LDI0NDkxLDI0NDkyLDI0NDk1LDI0NDk2LDI0NDk3LDI0NDk4LDI0''@;'; put 'put ''NDk5LDI0NTAwLDI0NTAyLDI0NTA0LDI0NTA1LDI0NTA2LDI0NTA3LDI0NTEwLDI0NTExLDI0NTEyLDI0NTEzLDI0NTE0LDI0NTE5LDI0NTIwLDI0NTIyLDI0NTIzLDI0NTI2LDI0NTMxLDI0NTMyLDI0NTMzLDI0NTM4LDI0NTM5LDI0NTQwLDI0NTQyLDI0NTQzLDI0NTQ2LDI0NTQ3LDI0NTQ5''@;'; put 'put ''LDI0NTUwLDI0NTUyLDI0NTUzLDI0NTU2LDI0NTU5LDI0NTYwLDI0NTYyLDI0NTYzLDI0NTY0LDI0NTY2LDI0NTY3LDI0NTY5LDI0NTcwLDI0NTcyLDI0NTgzLDI0NTg0LDI0NTg1LDI0NTg3LDI0NTg4LDI0NTkyLDI0NTkzLDI0NTk1LDI0NTk5LDI0NjAwLDI0NjAyLDI0NjA2LDI0NjA3LDI0''@;'; put 'put ''NjEwLDI0NjExLDI0NjEyLDI0NjIwLDI0NjIxLDI0NjIyLDI0NjI0LDI0NjI1LDI0NjI2LDI0NjI3LDI0NjI4LDI0NjMwLDI0NjMxLDI0NjMyLDI0NjMzLDI0NjM0LDI0NjM3LDI0NjM4LDI0NjQwLDI0NjQ0LDI0NjQ1LDI0NjQ2LDI0NjQ3LDI0NjQ4LDI0NjQ5LDI0NjUwLDI0NjUyLDI0NjU0''@;'; put 'put ''LDI0NjU1LDI0NjU3LDI0NjU5LDI0NjYwLDI0NjYyLDI0NjYzLDI0NjY0LDI0NjY3LDI0NjY4LDI0NjcwLDI0NjcxLDI0NjcyLDI0NjczLDI0Njc3LDI0Njc4LDI0Njg2LDI0Njg5LDI0NjkwLDI0NjkyLDI0NjkzLDI0Njk1LDI0NzAyLDI0NzA0LDI0NzA1LDI0NzA2LDI0NzA5LDI0NzEwLDI0''@;'; put 'put ''NzExLDI0NzEyLDI0NzE0LDI0NzE1LDI0NzE4LDI0NzE5LDI0NzIwLDI0NzIxLDI0NzIzLDI0NzI1LDI0NzI3LDI0NzI4LDI0NzI5LDI0NzMyLDI0NzM0LDI0NzM3LDI0NzM4LDI0NzQwLDI0NzQxLDI0NzQzLDI0NzQ1LDI0NzQ2LDI0NzUwLDI0NzUyLDI0NzU1LDI0NzU3LDI0NzU4LDI0NzU5''@;'; put 'put ''LDI0NzYxLDI0NzYyLDI0NzY1LDI0NzY2LDI0NzY3LDI0NzY4LDI0NzY5LDI0NzcwLDI0NzcxLDI0NzcyLDI0Nzc1LDI0Nzc2LDI0Nzc3LDI0NzgwLDI0NzgxLDI0NzgyLDI0NzgzLDI0Nzg0LDI0Nzg2LDI0Nzg3LDI0Nzg4LDI0NzkwLDI0NzkxLDI0NzkzLDI0Nzk1LDI0Nzk4LDI0ODAxLDI0''@;'; put 'put ''ODAyLDI0ODAzLDI0ODA0LDI0ODA1LDI0ODEwLDI0ODE3LDI0ODE4LDI0ODIxLDI0ODIzLDI0ODI0LDI0ODI3LDI0ODI4LDI0ODI5LDI0ODMwLDI0ODMxLDI0ODM0LDI0ODM1LDI0ODM2LDI0ODM3LDI0ODM5LDI0ODQyLDI0ODQzLDI0ODQ0LDI0ODQ4LDI0ODQ5LDI0ODUwLDI0ODUxLDI0ODUy''@;'; put 'put ''LDI0ODU0LDI0ODU1LDI0ODU2LDI0ODU3LDI0ODU5LDI0ODYwLDI0ODYxLDI0ODYyLDI0ODY1LDI0ODY2LDI0ODY5LDI0ODcyLDI0ODczLDI0ODc0LDI0ODc2LDI0ODc3LDI0ODc4LDI0ODc5LDI0ODgwLDI0ODgxLDI0ODgyLDI0ODgzLDI0ODg0LDI0ODg1LDI0ODg2LDI0ODg3LDI0ODg4LDI0''@;'; put 'put ''ODg5LDI0ODkwLDI0ODkxLDI0ODkyLDI0ODkzLDI0ODk0LDI0ODk2LDI0ODk3LDI0ODk4LDI0ODk5LDI0OTAwLDI0OTAxLDI0OTAyLDI0OTAzLDI0OTA1LDI0OTA3LDI0OTA5LDI0OTExLDI0OTEyLDI0OTE0LDI0OTE1LDI0OTE2LDI0OTE4LDI0OTE5LDI0OTIwLDI0OTIxLDI0OTIyLDI0OTIz''@;'; put 'put ''LDI0OTI0LDI0OTI2LDI0OTI3LDI0OTI4LDI0OTI5LDI0OTMxLDI0OTMyLDI0OTMzLDI0OTM0LDI0OTM3LDI0OTM4LDI0OTM5LDI0OTQwLDI0OTQxLDI0OTQyLDI0OTQzLDI0OTQ1LDI0OTQ2LDI0OTQ3LDI0OTQ4LDI0OTUwLDI0OTUyLDI0OTUzLDI0OTU0LDI0OTU1LDI0OTU2LDI0OTU3LDI0''@;'; put 'put ''OTU4LDI0OTU5LDI0OTYwLDI0OTYxLDI0OTYyLDI0OTYzLDI0OTY0LDI0OTY1LDI0OTY2LDI0OTY3LDI0OTY4LDI0OTY5LDI0OTcwLDI0OTcyLDI0OTczLDI0OTc1LDI0OTc2LDI0OTc3LDI0OTc4LDI0OTc5LDI0OTgxLDI0OTgyLDI0OTgzLDI0OTg0LDI0OTg1LDI0OTg2LDI0OTg3LDI0OTg4''@;'; put 'put ''LDI0OTkwLDI0OTkxLDI0OTkyLDI0OTkzLDI0OTk0LDI0OTk1LDI0OTk2LDI0OTk3LDI0OTk4LDI1MDAyLDI1MDAzLDI1MDA1LDI1MDA2LDI1MDA3LDI1MDA4LDI1MDA5LDI1MDEwLDI1MDExLDI1MDEyLDI1MDEzLDI1MDE0LDI1MDE2LDI1MDE3LDI1MDE4LDI1MDE5LDI1MDIwLDI1MDIxLDI1''@;'; put 'put ''MDIzLDI1MDI0LDI1MDI1LDI1MDI3LDI1MDI4LDI1MDI5LDI1MDMwLDI1MDMxLDI1MDMzLDI1MDM2LDI1MDM3LDI1MDM4LDI1MDM5LDI1MDQwLDI1MDQzLDI1MDQ1LDI1MDQ2LDI1MDQ3LDI1MDQ4LDI1MDQ5LDI1MDUwLDI1MDUxLDI1MDUyLDI1MDUzLDI1MDU0LDI1MDU1LDI1MDU2LDI1MDU3''@;'; put 'put ''LDI1MDU4LDI1MDU5LDI1MDYwLDI1MDYxLDI1MDYzLDI1MDY0LDI1MDY1LDI1MDY2LDI1MDY3LDI1MDY4LDI1MDY5LDI1MDcwLDI1MDcxLDI1MDcyLDI1MDczLDI1MDc0LDI1MDc1LDI1MDc2LDI1MDc4LDI1MDc5LDI1MDgwLDI1MDgxLDI1MDgyLDI1MDgzLDI1MDg0LDI1MDg1LDI1MDg2LDI1''@;'; put 'put ''MDg4LDI1MDg5LDI1MDkwLDI1MDkxLDI1MDkyLDI1MDkzLDI1MDk1LDI1MDk3LDI1MTA3LDI1MTA4LDI1MTEzLDI1MTE2LDI1MTE3LDI1MTE4LDI1MTIwLDI1MTIzLDI1MTI2LDI1MTI3LDI1MTI4LDI1MTI5LDI1MTMxLDI1MTMzLDI1MTM1LDI1MTM2LDI1MTM3LDI1MTM4LDI1MTQxLDI1MTQy''@;'; put 'put ''LDI1MTQ0LDI1MTQ1LDI1MTQ2LDI1MTQ3LDI1MTQ4LDI1MTU0LDI1MTU2LDI1MTU3LDI1MTU4LDI1MTYyLDI1MTY3LDI1MTY4LDI1MTczLDI1MTc0LDI1MTc1LDI1MTc3LDI1MTc4LDI1MTgwLDI1MTgxLDI1MTgyLDI1MTgzLDI1MTg0LDI1MTg1LDI1MTg2LDI1MTg4LDI1MTg5LDI1MTkyLDI1''@;'; put 'put ''MjAxLDI1MjAyLDI1MjA0LDI1MjA1LDI1MjA3LDI1MjA4LDI1MjEwLDI1MjExLDI1MjEzLDI1MjE3LDI1MjE4LDI1MjE5LDI1MjIxLDI1MjIyLDI1MjIzLDI1MjI0LDI1MjI3LDI1MjI4LDI1MjI5LDI1MjMwLDI1MjMxLDI1MjMyLDI1MjM2LDI1MjQxLDI1MjQ0LDI1MjQ1LDI1MjQ2LDI1MjUx''@;'; put 'put ''LDI1MjU0LDI1MjU1LDI1MjU3LDI1MjU4LDI1MjYxLDI1MjYyLDI1MjYzLDI1MjY0LDI1MjY2LDI1MjY3LDI1MjY4LDI1MjcwLDI1MjcxLDI1MjcyLDI1Mjc0LDI1Mjc4LDI1MjgwLDI1MjgxLDI1MjgzLDI1MjkxLDI1Mjk1LDI1Mjk3LDI1MzAxLDI1MzA5LDI1MzEwLDI1MzEyLDI1MzEzLDI1''@;'; put 'put ''MzE2LDI1MzIyLDI1MzIzLDI1MzI4LDI1MzMwLDI1MzMzLDI1MzM2LDI1MzM3LDI1MzM4LDI1MzM5LDI1MzQ0LDI1MzQ3LDI1MzQ4LDI1MzQ5LDI1MzUwLDI1MzU0LDI1MzU1LDI1MzU2LDI1MzU3LDI1MzU5LDI1MzYwLDI1MzYyLDI1MzYzLDI1MzY0LDI1MzY1LDI1MzY3LDI1MzY4LDI1MzY5''@;'; put 'put ''LDI1MzcyLDI1MzgyLDI1MzgzLDI1Mzg1LDI1Mzg4LDI1Mzg5LDI1MzkwLDI1MzkyLDI1MzkzLDI1Mzk1LDI1Mzk2LDI1Mzk3LDI1Mzk4LDI1Mzk5LDI1NDAwLDI1NDAzLDI1NDA0LDI1NDA2LDI1NDA3LDI1NDA4LDI1NDA5LDI1NDEyLDI1NDE1LDI1NDE2LDI1NDE4LDI1NDI1LDI1NDI2LDI1''@;'; put 'put ''NDI3LDI1NDI4LDI1NDMwLDI1NDMxLDI1NDMyLDI1NDMzLDI1NDM0LDI1NDM1LDI1NDM2LDI1NDM3LDI1NDQwLDI1NDQ0LDI1NDQ1LDI1NDQ2LDI1NDQ4LDI1NDUwLDI1NDUxLDI1NDUyLDI1NDU1LDI1NDU2LDI1NDU4LDI1NDU5LDI1NDYwLDI1NDYxLDI1NDY0LDI1NDY1LDI1NDY4LDI1NDY5''@;'; put 'put ''LDI1NDcwLDI1NDcxLDI1NDczLDI1NDc1LDI1NDc2LDI1NDc3LDI1NDc4LDI1NDgzLDI1NDg1LDI1NDg5LDI1NDkxLDI1NDkyLDI1NDkzLDI1NDk1LDI1NDk3LDI1NDk4LDI1NDk5LDI1NTAwLDI1NTAxLDI1NTAyLDI1NTAzLDI1NTA1LDI1NTA4LDI1NTEwLDI1NTE1LDI1NTE5LDI1NTIxLDI1''@;'; put 'put ''NTIyLDI1NTI1LDI1NTI2LDI1NTI5LDI1NTMxLDI1NTMzLDI1NTM1LDI1NTM2LDI1NTM3LDI1NTM4LDI1NTM5LDI1NTQxLDI1NTQzLDI1NTQ0LDI1NTQ2LDI1NTQ3LDI1NTQ4LDI1NTUzLDI1NTU1LDI1NTU2LDI1NTU3LDI1NTU5LDI1NTYwLDI1NTYxLDI1NTYyLDI1NTYzLDI1NTY0LDI1NTY1''@;'; put 'put ''LDI1NTY3LDI1NTcwLDI1NTcyLDI1NTczLDI1NTc0LDI1NTc1LDI1NTc2LDI1NTc5LDI1NTgwLDI1NTgyLDI1NTgzLDI1NTg0LDI1NTg1LDI1NTg3LDI1NTg5LDI1NTkxLDI1NTkzLDI1NTk0LDI1NTk1LDI1NTk2LDI1NTk4LDI1NjAzLDI1NjA0LDI1NjA2LDI1NjA3LDI1NjA4LDI1NjA5LDI1''@;'; put 'put ''NjEwLDI1NjEzLDI1NjE0LDI1NjE3LDI1NjE4LDI1NjIxLDI1NjIyLDI1NjIzLDI1NjI0LDI1NjI1LDI1NjI2LDI1NjI5LDI1NjMxLDI1NjM0LDI1NjM1LDI1NjM2LDI1NjM3LDI1NjM5LDI1NjQwLDI1NjQxLDI1NjQzLDI1NjQ2LDI1NjQ3LDI1NjQ4LDI1NjQ5LDI1NjUwLDI1NjUxLDI1NjUz''@;'; put 'put ''LDI1NjU0LDI1NjU1LDI1NjU2LDI1NjU3LDI1NjU5LDI1NjYwLDI1NjYyLDI1NjY0LDI1NjY2LDI1NjY3LDI1NjczLDI1Njc1LDI1Njc2LDI1Njc3LDI1Njc4LDI1Njc5LDI1NjgwLDI1NjgxLDI1NjgzLDI1Njg1LDI1Njg2LDI1Njg3LDI1Njg5LDI1NjkwLDI1NjkxLDI1NjkyLDI1NjkzLDI1''@;'; put 'put ''Njk1LDI1Njk2LDI1Njk3LDI1Njk4LDI1Njk5LDI1NzAwLDI1NzAxLDI1NzAyLDI1NzA0LDI1NzA2LDI1NzA3LDI1NzA4LDI1NzEwLDI1NzExLDI1NzEyLDI1NzEzLDI1NzE0LDI1NzE1LDI1NzE2LDI1NzE3LDI1NzE4LDI1NzE5LDI1NzIzLDI1NzI0LDI1NzI1LDI1NzI2LDI1NzI3LDI1NzI4''@;'; put 'put ''LDI1NzI5LDI1NzMxLDI1NzM0LDI1NzM2LDI1NzM3LDI1NzM4LDI1NzM5LDI1NzQwLDI1NzQxLDI1NzQyLDI1NzQzLDI1NzQ0LDI1NzQ3LDI1NzQ4LDI1NzUxLDI1NzUyLDI1NzU0LDI1NzU1LDI1NzU2LDI1NzU3LDI1NzU5LDI1NzYwLDI1NzYxLDI1NzYyLDI1NzYzLDI1NzY1LDI1NzY2LDI1''@;'; put 'put ''NzY3LDI1NzY4LDI1NzcwLDI1NzcxLDI1Nzc1LDI1Nzc3LDI1Nzc4LDI1Nzc5LDI1NzgwLDI1NzgyLDI1Nzg1LDI1Nzg3LDI1Nzg5LDI1NzkwLDI1NzkxLDI1NzkzLDI1Nzk1LDI1Nzk2LDI1Nzk4LDI1Nzk5LDI1ODAwLDI1ODAxLDI1ODAyLDI1ODAzLDI1ODA0LDI1ODA3LDI1ODA5LDI1ODEx''@;'; put 'put ''LDI1ODEyLDI1ODEzLDI1ODE0LDI1ODE3LDI1ODE4LDI1ODE5LDI1ODIwLDI1ODIxLDI1ODIzLDI1ODI0LDI1ODI1LDI1ODI3LDI1ODI5LDI1ODMxLDI1ODMyLDI1ODMzLDI1ODM0LDI1ODM1LDI1ODM2LDI1ODM3LDI1ODM4LDI1ODM5LDI1ODQwLDI1ODQxLDI1ODQyLDI1ODQzLDI1ODQ0LDI1''@;'; put 'put ''ODQ1LDI1ODQ2LDI1ODQ3LDI1ODQ4LDI1ODQ5LDI1ODUwLDI1ODUxLDI1ODUyLDI1ODUzLDI1ODU0LDI1ODU1LDI1ODU3LDI1ODU4LDI1ODU5LDI1ODYwLDI1ODYxLDI1ODYyLDI1ODYzLDI1ODY0LDI1ODY2LDI1ODY3LDI1ODY4LDI1ODY5LDI1ODcwLDI1ODcxLDI1ODcyLDI1ODczLDI1ODc1''@;'; put 'put ''LDI1ODc2LDI1ODc3LDI1ODc4LDI1ODc5LDI1ODgxLDI1ODgyLDI1ODgzLDI1ODg0LDI1ODg1LDI1ODg2LDI1ODg3LDI1ODg4LDI1ODg5LDI1ODkwLDI1ODkxLDI1ODkyLDI1ODk0LDI1ODk1LDI1ODk2LDI1ODk3LDI1ODk4LDI1OTAwLDI1OTAxLDI1OTA0LDI1OTA1LDI1OTA2LDI1OTA3LDI1''@;'; put 'put ''OTExLDI1OTE0LDI1OTE2LDI1OTE3LDI1OTIwLDI1OTIxLDI1OTIyLDI1OTIzLDI1OTI0LDI1OTI2LDI1OTI3LDI1OTMwLDI1OTMxLDI1OTMzLDI1OTM0LDI1OTM2LDI1OTM4LDI1OTM5LDI1OTQwLDI1OTQzLDI1OTQ0LDI1OTQ2LDI1OTQ4LDI1OTUxLDI1OTUyLDI1OTUzLDI1OTU2LDI1OTU3''@;'; put 'put ''LDI1OTU5LDI1OTYwLDI1OTYxLDI1OTYyLDI1OTY1LDI1OTY2LDI1OTY3LDI1OTY5LDI1OTcxLDI1OTczLDI1OTc0LDI1OTc2LDI1OTc3LDI1OTc4LDI1OTc5LDI1OTgwLDI1OTgxLDI1OTgyLDI1OTgzLDI1OTg0LDI1OTg1LDI1OTg2LDI1OTg3LDI1OTg4LDI1OTg5LDI1OTkwLDI1OTkyLDI1''@;'; put 'put ''OTkzLDI1OTk0LDI1OTk3LDI1OTk4LDI1OTk5LDI2MDAyLDI2MDA0LDI2MDA1LDI2MDA2LDI2MDA4LDI2MDEwLDI2MDEzLDI2MDE0LDI2MDE2LDI2MDE4LDI2MDE5LDI2MDIyLDI2MDI0LDI2MDI2LDI2MDI4LDI2MDMwLDI2MDMzLDI2MDM0LDI2MDM1LDI2MDM2LDI2MDM3LDI2MDM4LDI2MDM5''@;'; put 'put ''LDI2MDQwLDI2MDQyLDI2MDQzLDI2MDQ2LDI2MDQ3LDI2MDQ4LDI2MDUwLDI2MDU1LDI2MDU2LDI2MDU3LDI2MDU4LDI2MDYxLDI2MDY0LDI2MDY1LDI2MDY3LDI2MDY4LDI2MDY5LDI2MDcyLDI2MDczLDI2MDc0LDI2MDc1LDI2MDc2LDI2MDc3LDI2MDc4LDI2MDc5LDI2MDgxLDI2MDgzLDI2''@;'; put 'put ''MDg0LDI2MDkwLDI2MDkxLDI2MDk4LDI2MDk5LDI2MTAwLDI2MTAxLDI2MTA0LDI2MTA1LDI2MTA3LDI2MTA4LDI2MTA5LDI2MTEwLDI2MTExLDI2MTEzLDI2MTE2LDI2MTE3LDI2MTE5LDI2MTIwLDI2MTIxLDI2MTIzLDI2MTI1LDI2MTI4LDI2MTI5LDI2MTMwLDI2MTM0LDI2MTM1LDI2MTM2''@;'; put 'put ''LDI2MTM4LDI2MTM5LDI2MTQwLDI2MTQyLDI2MTQ1LDI2MTQ2LDI2MTQ3LDI2MTQ4LDI2MTUwLDI2MTUzLDI2MTU0LDI2MTU1LDI2MTU2LDI2MTU4LDI2MTYwLDI2MTYyLDI2MTYzLDI2MTY3LDI2MTY4LDI2MTY5LDI2MTcwLDI2MTcxLDI2MTczLDI2MTc1LDI2MTc2LDI2MTc4LDI2MTgwLDI2''@;'; put 'put ''MTgxLDI2MTgyLDI2MTgzLDI2MTg0LDI2MTg1LDI2MTg2LDI2MTg5LDI2MTkwLDI2MTkyLDI2MTkzLDI2MjAwLDI2MjAxLDI2MjAzLDI2MjA0LDI2MjA1LDI2MjA2LDI2MjA4LDI2MjEwLDI2MjExLDI2MjEzLDI2MjE1LDI2MjE3LDI2MjE4LDI2MjE5LDI2MjIwLDI2MjIxLDI2MjI1LDI2MjI2''@;'; put 'put ''LDI2MjI3LDI2MjI5LDI2MjMyLDI2MjMzLDI2MjM1LDI2MjM2LDI2MjM3LDI2MjM5LDI2MjQwLDI2MjQxLDI2MjQzLDI2MjQ1LDI2MjQ2LDI2MjQ4LDI2MjQ5LDI2MjUwLDI2MjUxLDI2MjUzLDI2MjU0LDI2MjU1LDI2MjU2LDI2MjU4LDI2MjU5LDI2MjYwLDI2MjYxLDI2MjY0LDI2MjY1LDI2''@;'; put 'put ''MjY2LDI2MjY3LDI2MjY4LDI2MjcwLDI2MjcxLDI2MjcyLDI2MjczLDI2Mjc0LDI2Mjc1LDI2Mjc2LDI2Mjc3LDI2Mjc4LDI2MjgxLDI2MjgyLDI2MjgzLDI2Mjg0LDI2Mjg1LDI2Mjg3LDI2Mjg4LDI2Mjg5LDI2MjkwLDI2MjkxLDI2MjkzLDI2Mjk0LDI2Mjk1LDI2Mjk2LDI2Mjk4LDI2Mjk5''@;'; put 'put ''LDI2MzAwLDI2MzAxLDI2MzAzLDI2MzA0LDI2MzA1LDI2MzA2LDI2MzA3LDI2MzA4LDI2MzA5LDI2MzEwLDI2MzExLDI2MzEyLDI2MzEzLDI2MzE0LDI2MzE1LDI2MzE2LDI2MzE3LDI2MzE4LDI2MzE5LDI2MzIwLDI2MzIxLDI2MzIyLDI2MzIzLDI2MzI0LDI2MzI1LDI2MzI2LDI2MzI3LDI2''@;'; put 'put ''MzI4LDI2MzMwLDI2MzM0LDI2MzM1LDI2MzM2LDI2MzM3LDI2MzM4LDI2MzM5LDI2MzQwLDI2MzQxLDI2MzQzLDI2MzQ0LDI2MzQ2LDI2MzQ3LDI2MzQ4LDI2MzQ5LDI2MzUwLDI2MzUxLDI2MzUzLDI2MzU3LDI2MzU4LDI2MzYwLDI2MzYyLDI2MzYzLDI2MzY1LDI2MzY5LDI2MzcwLDI2Mzcx''@;'; put 'put ''LDI2MzcyLDI2MzczLDI2Mzc0LDI2Mzc1LDI2MzgwLDI2MzgyLDI2MzgzLDI2Mzg1LDI2Mzg2LDI2Mzg3LDI2MzkwLDI2MzkyLDI2MzkzLDI2Mzk0LDI2Mzk2LDI2Mzk4LDI2NDAwLDI2NDAxLDI2NDAyLDI2NDAzLDI2NDA0LDI2NDA1LDI2NDA3LDI2NDA5LDI2NDE0LDI2NDE2LDI2NDE4LDI2''@;'; put 'put ''NDE5LDI2NDIyLDI2NDIzLDI2NDI0LDI2NDI1LDI2NDI3LDI2NDI4LDI2NDMwLDI2NDMxLDI2NDMzLDI2NDM2LDI2NDM3LDI2NDM5LDI2NDQyLDI2NDQzLDI2NDQ1LDI2NDUwLDI2NDUyLDI2NDUzLDI2NDU1LDI2NDU2LDI2NDU3LDI2NDU4LDI2NDU5LDI2NDYxLDI2NDY2LDI2NDY3LDI2NDY4''@;'; put 'put ''LDI2NDcwLDI2NDcxLDI2NDc1LDI2NDc2LDI2NDc4LDI2NDgxLDI2NDg0LDI2NDg2LDI2NDg4LDI2NDg5LDI2NDkwLDI2NDkxLDI2NDkzLDI2NDk2LDI2NDk4LDI2NDk5LDI2NTAxLDI2NTAyLDI2NTA0LDI2NTA2LDI2NTA4LDI2NTA5LDI2NTEwLDI2NTExLDI2NTEzLDI2NTE0LDI2NTE1LDI2''@;'; put 'put ''NTE2LDI2NTE4LDI2NTIxLDI2NTIzLDI2NTI3LDI2NTI4LDI2NTI5LDI2NTMyLDI2NTM0LDI2NTM3LDI2NTQwLDI2NTQyLDI2NTQ1LDI2NTQ2LDI2NTQ4LDI2NTUzLDI2NTU0LDI2NTU1LDI2NTU2LDI2NTU3LDI2NTU4LDI2NTU5LDI2NTYwLDI2NTYyLDI2NTY1LDI2NTY2LDI2NTY3LDI2NTY4''@;'; put 'put ''LDI2NTY5LDI2NTcwLDI2NTcxLDI2NTcyLDI2NTczLDI2NTc0LDI2NTgxLDI2NTgyLDI2NTgzLDI2NTg3LDI2NTkxLDI2NTkzLDI2NTk1LDI2NTk2LDI2NTk4LDI2NTk5LDI2NjAwLDI2NjAyLDI2NjAzLDI2NjA1LDI2NjA2LDI2NjEwLDI2NjEzLDI2NjE0LDI2NjE1LDI2NjE2LDI2NjE3LDI2''@;'; put 'put ''NjE4LDI2NjE5LDI2NjIwLDI2NjIyLDI2NjI1LDI2NjI2LDI2NjI3LDI2NjI4LDI2NjMwLDI2NjM3LDI2NjQwLDI2NjQyLDI2NjQ0LDI2NjQ1LDI2NjQ4LDI2NjQ5LDI2NjUwLDI2NjUxLDI2NjUyLDI2NjU0LDI2NjU1LDI2NjU2LDI2NjU4LDI2NjU5LDI2NjYwLDI2NjYxLDI2NjYyLDI2NjYz''@;'; put 'put ''LDI2NjY0LDI2NjY3LDI2NjY4LDI2NjY5LDI2NjcwLDI2NjcxLDI2NjcyLDI2NjczLDI2Njc2LDI2Njc3LDI2Njc4LDI2NjgyLDI2NjgzLDI2Njg3LDI2Njk1LDI2Njk5LDI2NzAxLDI2NzAzLDI2NzA2LDI2NzEwLDI2NzExLDI2NzEyLDI2NzEzLDI2NzE0LDI2NzE1LDI2NzE2LDI2NzE3LDI2''@;'; put 'put ''NzE4LDI2NzE5LDI2NzMwLDI2NzMyLDI2NzMzLDI2NzM0LDI2NzM1LDI2NzM2LDI2NzM3LDI2NzM4LDI2NzM5LDI2NzQxLDI2NzQ0LDI2NzQ1LDI2NzQ2LDI2NzQ3LDI2NzQ4LDI2NzQ5LDI2NzUwLDI2NzUxLDI2NzUyLDI2NzU0LDI2NzU2LDI2NzU5LDI2NzYwLDI2NzYxLDI2NzYyLDI2NzYz''@;'; put 'put ''LDI2NzY0LDI2NzY1LDI2NzY2LDI2NzY4LDI2NzY5LDI2NzcwLDI2NzcyLDI2NzczLDI2Nzc0LDI2Nzc2LDI2Nzc3LDI2Nzc4LDI2Nzc5LDI2NzgwLDI2NzgxLDI2NzgyLDI2NzgzLDI2Nzg0LDI2Nzg1LDI2Nzg3LDI2Nzg4LDI2Nzg5LDI2NzkzLDI2Nzk0LDI2Nzk1LDI2Nzk2LDI2Nzk4LDI2''@;'; put 'put ''ODAxLDI2ODAyLDI2ODA0LDI2ODA2LDI2ODA3LDI2ODA4LDI2ODA5LDI2ODEwLDI2ODExLDI2ODEyLDI2ODEzLDI2ODE0LDI2ODE1LDI2ODE3LDI2ODE5LDI2ODIwLDI2ODIxLDI2ODIyLDI2ODIzLDI2ODI0LDI2ODI2LDI2ODI4LDI2ODMwLDI2ODMxLDI2ODMyLDI2ODMzLDI2ODM1LDI2ODM2''@;'; put 'put ''LDI2ODM4LDI2ODM5LDI2ODQxLDI2ODQzLDI2ODQ0LDI2ODQ1LDI2ODQ2LDI2ODQ3LDI2ODQ5LDI2ODUwLDI2ODUyLDI2ODUzLDI2ODU0LDI2ODU1LDI2ODU2LDI2ODU3LDI2ODU4LDI2ODU5LDI2ODYwLDI2ODYxLDI2ODYzLDI2ODY2LDI2ODY3LDI2ODY4LDI2ODcwLDI2ODcxLDI2ODcyLDI2''@;'; put 'put ''ODc1LDI2ODc3LDI2ODc4LDI2ODc5LDI2ODgwLDI2ODgyLDI2ODgzLDI2ODg0LDI2ODg2LDI2ODg3LDI2ODg4LDI2ODg5LDI2ODkwLDI2ODkyLDI2ODk1LDI2ODk3LDI2ODk5LDI2OTAwLDI2OTAxLDI2OTAyLDI2OTAzLDI2OTA0LDI2OTA1LDI2OTA2LDI2OTA3LDI2OTA4LDI2OTA5LDI2OTEw''@;'; put 'put ''LDI2OTEzLDI2OTE0LDI2OTE1LDI2OTE3LDI2OTE4LDI2OTE5LDI2OTIwLDI2OTIxLDI2OTIyLDI2OTIzLDI2OTI0LDI2OTI2LDI2OTI3LDI2OTI5LDI2OTMwLDI2OTMxLDI2OTMzLDI2OTM0LDI2OTM1LDI2OTM2LDI2OTM4LDI2OTM5LDI2OTQwLDI2OTQyLDI2OTQ0LDI2OTQ1LDI2OTQ3LDI2''@;'; put 'put ''OTQ4LDI2OTQ5LDI2OTUwLDI2OTUxLDI2OTUyLDI2OTUzLDI2OTU0LDI2OTU1LDI2OTU2LDI2OTU3LDI2OTU4LDI2OTU5LDI2OTYwLDI2OTYxLDI2OTYyLDI2OTYzLDI2OTY1LDI2OTY2LDI2OTY4LDI2OTY5LDI2OTcxLDI2OTcyLDI2OTc1LDI2OTc3LDI2OTc4LDI2OTgwLDI2OTgxLDI2OTgz''@;'; put 'put ''LDI2OTg0LDI2OTg1LDI2OTg2LDI2OTg4LDI2OTg5LDI2OTkxLDI2OTkyLDI2OTk0LDI2OTk1LDI2OTk2LDI2OTk3LDI2OTk4LDI3MDAyLDI3MDAzLDI3MDA1LDI3MDA2LDI3MDA3LDI3MDA5LDI3MDExLDI3MDEzLDI3MDE4LDI3MDE5LDI3MDIwLDI3MDIyLDI3MDIzLDI3MDI0LDI3MDI1LDI3''@;'; put 'put ''MDI2LDI3MDI3LDI3MDMwLDI3MDMxLDI3MDMzLDI3MDM0LDI3MDM3LDI3MDM4LDI3MDM5LDI3MDQwLDI3MDQxLDI3MDQyLDI3MDQzLDI3MDQ0LDI3MDQ1LDI3MDQ2LDI3MDQ5LDI3MDUwLDI3MDUyLDI3MDU0LDI3MDU1LDI3MDU2LDI3MDU4LDI3MDU5LDI3MDYxLDI3MDYyLDI3MDY0LDI3MDY1''@;'; put 'put ''LDI3MDY2LDI3MDY4LDI3MDY5LDI3MDcwLDI3MDcxLDI3MDcyLDI3MDc0LDI3MDc1LDI3MDc2LDI3MDc3LDI3MDc4LDI3MDc5LDI3MDgwLDI3MDgxLDI3MDgzLDI3MDg1LDI3MDg3LDI3MDg5LDI3MDkwLDI3MDkxLDI3MDkzLDI3MDk0LDI3MDk1LDI3MDk2LDI3MDk3LDI3MDk4LDI3MTAwLDI3''@;'; put 'put ''MTAxLDI3MTAyLDI3MTA1LDI3MTA2LDI3MTA3LDI3MTA4LDI3MTA5LDI3MTEwLDI3MTExLDI3MTEyLDI3MTEzLDI3MTE0LDI3MTE1LDI3MTE2LDI3MTE4LDI3MTE5LDI3MTIwLDI3MTIxLDI3MTIzLDI3MTI0LDI3MTI1LDI3MTI2LDI3MTI3LDI3MTI4LDI3MTI5LDI3MTMwLDI3MTMxLDI3MTMy''@;'; put 'put ''LDI3MTM0LDI3MTM2LDI3MTM3LDI3MTM4LDI3MTM5LDI3MTQwLDI3MTQxLDI3MTQyLDI3MTQzLDI3MTQ0LDI3MTQ1LDI3MTQ3LDI3MTQ4LDI3MTQ5LDI3MTUwLDI3MTUxLDI3MTUyLDI3MTUzLDI3MTU0LDI3MTU1LDI3MTU2LDI3MTU3LDI3MTU4LDI3MTYxLDI3MTYyLDI3MTYzLDI3MTY0LDI3''@;'; put 'put ''MTY1LDI3MTY2LDI3MTY4LDI3MTcwLDI3MTcxLDI3MTcyLDI3MTczLDI3MTc0LDI3MTc1LDI3MTc3LDI3MTc5LDI3MTgwLDI3MTgxLDI3MTgyLDI3MTg0LDI3MTg2LDI3MTg3LDI3MTg4LDI3MTkwLDI3MTkxLDI3MTkyLDI3MTkzLDI3MTk0LDI3MTk1LDI3MTk2LDI3MTk5LDI3MjAwLDI3MjAx''@;'; put 'put ''LDI3MjAyLDI3MjAzLDI3MjA1LDI3MjA2LDI3MjA4LDI3MjA5LDI3MjEwLDI3MjExLDI3MjEyLDI3MjEzLDI3MjE0LDI3MjE1LDI3MjE3LDI3MjE4LDI3MjE5LDI3MjIwLDI3MjIxLDI3MjIyLDI3MjIzLDI3MjI2LDI3MjI4LDI3MjI5LDI3MjMwLDI3MjMxLDI3MjMyLDI3MjM0LDI3MjM1LDI3''@;'; put 'put ''MjM2LDI3MjM4LDI3MjM5LDI3MjQwLDI3MjQxLDI3MjQyLDI3MjQzLDI3MjQ0LDI3MjQ1LDI3MjQ2LDI3MjQ3LDI3MjQ4LDI3MjUwLDI3MjUxLDI3MjUyLDI3MjUzLDI3MjU0LDI3MjU1LDI3MjU2LDI3MjU4LDI3MjU5LDI3MjYxLDI3MjYyLDI3MjYzLDI3MjY1LDI3MjY2LDI3MjY3LDI3MjY5''@;'; put 'put ''LDI3MjcwLDI3MjcxLDI3MjcyLDI3MjczLDI3Mjc0LDI3Mjc1LDI3Mjc2LDI3Mjc3LDI3Mjc5LDI3MjgyLDI3MjgzLDI3Mjg0LDI3Mjg1LDI3Mjg2LDI3Mjg4LDI3Mjg5LDI3MjkwLDI3MjkxLDI3MjkyLDI3MjkzLDI3Mjk0LDI3Mjk1LDI3Mjk3LDI3Mjk4LDI3Mjk5LDI3MzAwLDI3MzAxLDI3''@;'; put 'put ''MzAyLDI3MzAzLDI3MzA0LDI3MzA2LDI3MzA5LDI3MzEwLDI3MzExLDI3MzEyLDI3MzEzLDI3MzE0LDI3MzE1LDI3MzE2LDI3MzE3LDI3MzE4LDI3MzE5LDI3MzIwLDI3MzIxLDI3MzIyLDI3MzIzLDI3MzI0LDI3MzI1LDI3MzI2LDI3MzI3LDI3MzI4LDI3MzI5LDI3MzMwLDI3MzMxLDI3MzMy''@;'; put 'put ''LDI3MzMzLDI3MzM0LDI3MzM1LDI3MzM2LDI3MzM3LDI3MzM4LDI3MzM5LDI3MzQwLDI3MzQxLDI3MzQyLDI3MzQzLDI3MzQ0LDI3MzQ1LDI3MzQ2LDI3MzQ3LDI3MzQ4LDI3MzQ5LDI3MzUwLDI3MzUxLDI3MzUyLDI3MzUzLDI3MzU0LDI3MzU1LDI3MzU2LDI3MzU3LDI3MzU4LDI3MzU5LDI3''@;'; put 'put ''MzYwLDI3MzYxLDI3MzYyLDI3MzYzLDI3MzY0LDI3MzY1LDI3MzY2LDI3MzY3LDI3MzY4LDI3MzY5LDI3MzcwLDI3MzcxLDI3MzcyLDI3MzczLDI3Mzc0LDI3Mzc1LDI3Mzc2LDI3Mzc3LDI3Mzc4LDI3Mzc5LDI3MzgwLDI3MzgxLDI3MzgyLDI3MzgzLDI3Mzg0LDI3Mzg1LDI3Mzg2LDI3Mzg3''@;'; put 'put ''LDI3Mzg4LDI3Mzg5LDI3MzkwLDI3MzkxLDI3MzkyLDI3MzkzLDI3Mzk0LDI3Mzk1LDI3Mzk2LDI3Mzk3LDI3Mzk4LDI3Mzk5LDI3NDAwLDI3NDAxLDI3NDAyLDI3NDAzLDI3NDA0LDI3NDA1LDI3NDA2LDI3NDA3LDI3NDA4LDI3NDA5LDI3NDEwLDI3NDExLDI3NDEyLDI3NDEzLDI3NDE0LDI3''@;'; put 'put ''NDE1LDI3NDE2LDI3NDE3LDI3NDE4LDI3NDE5LDI3NDIwLDI3NDIxLDI3NDIyLDI3NDIzLDI3NDI5LDI3NDMwLDI3NDMyLDI3NDMzLDI3NDM0LDI3NDM1LDI3NDM2LDI3NDM3LDI3NDM4LDI3NDM5LDI3NDQwLDI3NDQxLDI3NDQzLDI3NDQ0LDI3NDQ1LDI3NDQ2LDI3NDQ4LDI3NDUxLDI3NDUy''@;'; put 'put ''LDI3NDUzLDI3NDU1LDI3NDU2LDI3NDU3LDI3NDU4LDI3NDYwLDI3NDYxLDI3NDY0LDI3NDY2LDI3NDY3LDI3NDY5LDI3NDcwLDI3NDcxLDI3NDcyLDI3NDczLDI3NDc0LDI3NDc1LDI3NDc2LDI3NDc3LDI3NDc4LDI3NDc5LDI3NDgwLDI3NDgyLDI3NDgzLDI3NDg0LDI3NDg1LDI3NDg2LDI3''@;'; put 'put ''NDg3LDI3NDg4LDI3NDg5LDI3NDk2LDI3NDk3LDI3NDk5LDI3NTAwLDI3NTAxLDI3NTAyLDI3NTAzLDI3NTA0LDI3NTA1LDI3NTA2LDI3NTA3LDI3NTA4LDI3NTA5LDI3NTEwLDI3NTExLDI3NTEyLDI3NTE0LDI3NTE3LDI3NTE4LDI3NTE5LDI3NTIwLDI3NTI1LDI3NTI4LDI3NTMyLDI3NTM0''@;'; put 'put ''LDI3NTM1LDI3NTM2LDI3NTM3LDI3NTQwLDI3NTQxLDI3NTQzLDI3NTQ0LDI3NTQ1LDI3NTQ4LDI3NTQ5LDI3NTUwLDI3NTUxLDI3NTUyLDI3NTU0LDI3NTU1LDI3NTU2LDI3NTU3LDI3NTU4LDI3NTU5LDI3NTYwLDI3NTYxLDI3NTYzLDI3NTY0LDI3NTY1LDI3NTY2LDI3NTY3LDI3NTY4LDI3''@;'; put 'put ''NTY5LDI3NTcwLDI3NTc0LDI3NTc2LDI3NTc3LDI3NTc4LDI3NTc5LDI3NTgwLDI3NTgxLDI3NTgyLDI3NTg0LDI3NTg3LDI3NTg4LDI3NTkwLDI3NTkxLDI3NTkyLDI3NTkzLDI3NTk0LDI3NTk2LDI3NTk4LDI3NjAwLDI3NjAxLDI3NjA4LDI3NjEwLDI3NjEyLDI3NjEzLDI3NjE0LDI3NjE1''@;'; put 'put ''LDI3NjE2LDI3NjE4LDI3NjE5LDI3NjIwLDI3NjIxLDI3NjIyLDI3NjIzLDI3NjI0LDI3NjI1LDI3NjI4LDI3NjI5LDI3NjMwLDI3NjMyLDI3NjMzLDI3NjM0LDI3NjM2LDI3NjM4LDI3NjM5LDI3NjQwLDI3NjQyLDI3NjQzLDI3NjQ0LDI3NjQ2LDI3NjQ3LDI3NjQ4LDI3NjQ5LDI3NjUwLDI3''@;'; put 'put ''NjUxLDI3NjUyLDI3NjU2LDI3NjU3LDI3NjU4LDI3NjU5LDI3NjYwLDI3NjYyLDI3NjY2LDI3NjcxLDI3Njc2LDI3Njc3LDI3Njc4LDI3NjgwLDI3NjgzLDI3Njg1LDI3NjkxLDI3NjkyLDI3NjkzLDI3Njk3LDI3Njk5LDI3NzAyLDI3NzAzLDI3NzA1LDI3NzA2LDI3NzA3LDI3NzA4LDI3NzEw''@;'; put 'put ''LDI3NzExLDI3NzE1LDI3NzE2LDI3NzE3LDI3NzIwLDI3NzIzLDI3NzI0LDI3NzI1LDI3NzI2LDI3NzI3LDI3NzI5LDI3NzMwLDI3NzMxLDI3NzM0LDI3NzM2LDI3NzM3LDI3NzM4LDI3NzQ2LDI3NzQ3LDI3NzQ5LDI3NzUwLDI3NzUxLDI3NzU1LDI3NzU2LDI3NzU3LDI3NzU4LDI3NzU5LDI3''@;'; put 'put ''NzYxLDI3NzYzLDI3NzY1LDI3NzY3LDI3NzY4LDI3NzcwLDI3NzcxLDI3NzcyLDI3Nzc1LDI3Nzc2LDI3NzgwLDI3NzgzLDI3Nzg2LDI3Nzg3LDI3Nzg5LDI3NzkwLDI3NzkzLDI3Nzk0LDI3Nzk3LDI3Nzk4LDI3Nzk5LDI3ODAwLDI3ODAyLDI3ODA0LDI3ODA1LDI3ODA2LDI3ODA4LDI3ODEw''@;'; put 'put ''LDI3ODE2LDI3ODIwLDI3ODIzLDI3ODI0LDI3ODI4LDI3ODI5LDI3ODMwLDI3ODMxLDI3ODM0LDI3ODQwLDI3ODQxLDI3ODQyLDI3ODQzLDI3ODQ2LDI3ODQ3LDI3ODQ4LDI3ODUxLDI3ODUzLDI3ODU0LDI3ODU1LDI3ODU3LDI3ODU4LDI3ODY0LDI3ODY1LDI3ODY2LDI3ODY4LDI3ODY5LDI3''@;'; put 'put ''ODcxLDI3ODc2LDI3ODc4LDI3ODc5LDI3ODgxLDI3ODg0LDI3ODg1LDI3ODkwLDI3ODkyLDI3ODk3LDI3OTAzLDI3OTA0LDI3OTA2LDI3OTA3LDI3OTA5LDI3OTEwLDI3OTEyLDI3OTEzLDI3OTE0LDI3OTE3LDI3OTE5LDI3OTIwLDI3OTIxLDI3OTIzLDI3OTI0LDI3OTI1LDI3OTI2LDI3OTI4''@;'; put 'put ''LDI3OTMyLDI3OTMzLDI3OTM1LDI3OTM2LDI3OTM3LDI3OTM4LDI3OTM5LDI3OTQwLDI3OTQyLDI3OTQ0LDI3OTQ1LDI3OTQ4LDI3OTQ5LDI3OTUxLDI3OTUyLDI3OTU2LDI3OTU4LDI3OTU5LDI3OTYwLDI3OTYyLDI3OTY3LDI3OTY4LDI3OTcwLDI3OTcyLDI3OTc3LDI3OTgwLDI3OTg0LDI3''@;'; put 'put ''OTg5LDI3OTkwLDI3OTkxLDI3OTkyLDI3OTk1LDI3OTk3LDI3OTk5LDI4MDAxLDI4MDAyLDI4MDA0LDI4MDA1LDI4MDA3LDI4MDA4LDI4MDExLDI4MDEyLDI4MDEzLDI4MDE2LDI4MDE3LDI4MDE4LDI4MDE5LDI4MDIxLDI4MDIyLDI4MDI1LDI4MDI2LDI4MDI3LDI4MDI5LDI4MDMwLDI4MDMx''@;'; put 'put ''LDI4MDMyLDI4MDMzLDI4MDM1LDI4MDM2LDI4MDM4LDI4MDM5LDI4MDQyLDI4MDQzLDI4MDQ1LDI4MDQ3LDI4MDQ4LDI4MDUwLDI4MDU0LDI4MDU1LDI4MDU2LDI4MDU3LDI4MDU4LDI4MDYwLDI4MDY2LDI4MDY5LDI4MDc2LDI4MDc3LDI4MDgwLDI4MDgxLDI4MDgzLDI4MDg0LDI4MDg2LDI4''@;'; put 'put ''MDg3LDI4MDg5LDI4MDkwLDI4MDkxLDI4MDkyLDI4MDkzLDI4MDk0LDI4MDk3LDI4MDk4LDI4MDk5LDI4MTA0LDI4MTA1LDI4MTA2LDI4MTA5LDI4MTEwLDI4MTExLDI4MTEyLDI4MTE0LDI4MTE1LDI4MTE2LDI4MTE3LDI4MTE5LDI4MTIyLDI4MTIzLDI4MTI0LDI4MTI3LDI4MTMwLDI4MTMx''@;'; put 'put ''LDI4MTMzLDI4MTM1LDI4MTM2LDI4MTM3LDI4MTM4LDI4MTQxLDI4MTQzLDI4MTQ0LDI4MTQ2LDI4MTQ4LDI4MTQ5LDI4MTUwLDI4MTUyLDI4MTU0LDI4MTU3LDI4MTU4LDI4MTU5LDI4MTYwLDI4MTYxLDI4MTYyLDI4MTYzLDI4MTY0LDI4MTY2LDI4MTY3LDI4MTY4LDI4MTY5LDI4MTcxLDI4''@;'; put 'put ''MTc1LDI4MTc4LDI4MTc5LDI4MTgxLDI4MTg0LDI4MTg1LDI4MTg3LDI4MTg4LDI4MTkwLDI4MTkxLDI4MTk0LDI4MTk4LDI4MTk5LDI4MjAwLDI4MjAyLDI4MjA0LDI4MjA2LDI4MjA4LDI4MjA5LDI4MjExLDI4MjEzLDI4MjE0LDI4MjE1LDI4MjE3LDI4MjE5LDI4MjIwLDI4MjIxLDI4MjIy''@;'; put 'put ''LDI4MjIzLDI4MjI0LDI4MjI1LDI4MjI2LDI4MjI5LDI4MjMwLDI4MjMxLDI4MjMyLDI4MjMzLDI4MjM0LDI4MjM1LDI4MjM2LDI4MjM5LDI4MjQwLDI4MjQxLDI4MjQyLDI4MjQ1LDI4MjQ3LDI4MjQ5LDI4MjUwLDI4MjUyLDI4MjUzLDI4MjU0LDI4MjU2LDI4MjU3LDI4MjU4LDI4MjU5LDI4''@;'; put 'put ''MjYwLDI4MjYxLDI4MjYyLDI4MjYzLDI4MjY0LDI4MjY1LDI4MjY2LDI4MjY4LDI4MjY5LDI4MjcxLDI4MjcyLDI4MjczLDI4Mjc0LDI4Mjc1LDI4Mjc2LDI4Mjc3LDI4Mjc4LDI4Mjc5LDI4MjgwLDI4MjgxLDI4MjgyLDI4MjgzLDI4Mjg0LDI4Mjg1LDI4Mjg4LDI4Mjg5LDI4MjkwLDI4Mjky''@;'; put 'put ''LDI4Mjk1LDI4Mjk2LDI4Mjk4LDI4Mjk5LDI4MzAwLDI4MzAxLDI4MzAyLDI4MzA1LDI4MzA2LDI4MzA3LDI4MzA4LDI4MzA5LDI4MzEwLDI4MzExLDI4MzEzLDI4MzE0LDI4MzE1LDI4MzE3LDI4MzE4LDI4MzIwLDI4MzIxLDI4MzIzLDI4MzI0LDI4MzI2LDI4MzI4LDI4MzI5LDI4MzMxLDI4''@;'; put 'put ''MzMyLDI4MzMzLDI4MzM0LDI4MzM2LDI4MzM5LDI4MzQxLDI4MzQ0LDI4MzQ1LDI4MzQ4LDI4MzUwLDI4MzUxLDI4MzUyLDI4MzU1LDI4MzU2LDI4MzU3LDI4MzU4LDI4MzYwLDI4MzYxLDI4MzYyLDI4MzY0LDI4MzY1LDI4MzY2LDI4MzY4LDI4MzcwLDI4Mzc0LDI4Mzc2LDI4Mzc3LDI4Mzc5''@;'; put 'put ''LDI4MzgwLDI4MzgxLDI4Mzg3LDI4MzkxLDI4Mzk0LDI4Mzk1LDI4Mzk2LDI4Mzk3LDI4Mzk4LDI4Mzk5LDI4NDAwLDI4NDAxLDI4NDAyLDI4NDAzLDI4NDA1LDI4NDA2LDI4NDA3LDI4NDA4LDI4NDEwLDI4NDExLDI4NDEyLDI4NDEzLDI4NDE0LDI4NDE1LDI4NDE2LDI4NDE3LDI4NDE5LDI4''@;'; put 'put ''NDIwLDI4NDIxLDI4NDIzLDI4NDI0LDI4NDI2LDI4NDI3LDI4NDI4LDI4NDI5LDI4NDMwLDI4NDMyLDI4NDMzLDI4NDM0LDI4NDM4LDI4NDM5LDI4NDQwLDI4NDQxLDI4NDQyLDI4NDQzLDI4NDQ0LDI4NDQ1LDI4NDQ2LDI4NDQ3LDI4NDQ5LDI4NDUwLDI4NDUxLDI4NDUzLDI4NDU0LDI4NDU1''@;'; put 'put ''LDI4NDU2LDI4NDYwLDI4NDYyLDI4NDY0LDI4NDY2LDI4NDY4LDI4NDY5LDI4NDcxLDI4NDcyLDI4NDczLDI4NDc0LDI4NDc1LDI4NDc2LDI4NDc3LDI4NDc5LDI4NDgwLDI4NDgxLDI4NDgyLDI4NDgzLDI4NDg0LDI4NDg1LDI4NDg4LDI4NDg5LDI4NDkwLDI4NDkyLDI4NDk0LDI4NDk1LDI4''@;'; put 'put ''NDk2LDI4NDk3LDI4NDk4LDI4NDk5LDI4NTAwLDI4NTAxLDI4NTAyLDI4NTAzLDI4NTA1LDI4NTA2LDI4NTA3LDI4NTA5LDI4NTExLDI4NTEyLDI4NTEzLDI4NTE1LDI4NTE2LDI4NTE3LDI4NTE5LDI4NTIwLDI4NTIxLDI4NTIyLDI4NTIzLDI4NTI0LDI4NTI3LDI4NTI4LDI4NTI5LDI4NTMx''@;'; put 'put ''LDI4NTMzLDI4NTM0LDI4NTM1LDI4NTM3LDI4NTM5LDI4NTQxLDI4NTQyLDI4NTQzLDI4NTQ0LDI4NTQ1LDI4NTQ2LDI4NTQ3LDI4NTQ5LDI4NTUwLDI4NTUxLDI4NTU0LDI4NTU1LDI4NTU5LDI4NTYwLDI4NTYxLDI4NTYyLDI4NTYzLDI4NTY0LDI4NTY1LDI4NTY2LDI4NTY3LDI4NTY4LDI4''@;'; put 'put ''NTY5LDI4NTcwLDI4NTcxLDI4NTczLDI4NTc0LDI4NTc1LDI4NTc2LDI4NTc4LDI4NTc5LDI4NTgwLDI4NTgxLDI4NTgyLDI4NTg0LDI4NTg1LDI4NTg2LDI4NTg3LDI4NTg4LDI4NTg5LDI4NTkwLDI4NTkxLDI4NTkyLDI4NTkzLDI4NTk0LDI4NTk2LDI4NTk3LDI4NTk5LDI4NjAwLDI4NjAy''@;'; put 'put ''LDI4NjAzLDI4NjA0LDI4NjA1LDI4NjA2LDI4NjA3LDI4NjA5LDI4NjExLDI4NjEyLDI4NjEzLDI4NjE0LDI4NjE1LDI4NjE2LDI4NjE4LDI4NjE5LDI4NjIwLDI4NjIxLDI4NjIyLDI4NjIzLDI4NjI0LDI4NjI3LDI4NjI4LDI4NjI5LDI4NjMwLDI4NjMxLDI4NjMyLDI4NjMzLDI4NjM0LDI4''@;'; put 'put ''NjM1LDI4NjM2LDI4NjM3LDI4NjM5LDI4NjQyLDI4NjQzLDI4NjQ0LDI4NjQ1LDI4NjQ2LDI4NjQ3LDI4NjQ4LDI4NjQ5LDI4NjUwLDI4NjUxLDI4NjUyLDI4NjUzLDI4NjU2LDI4NjU3LDI4NjU4LDI4NjU5LDI4NjYwLDI4NjYxLDI4NjYyLDI4NjYzLDI4NjY0LDI4NjY1LDI4NjY2LDI4NjY3''@;'; put 'put ''LDI4NjY4LDI4NjY5LDI4NjcwLDI4NjcxLDI4NjcyLDI4NjczLDI4Njc0LDI4Njc1LDI4Njc2LDI4Njc3LDI4Njc4LDI4Njc5LDI4NjgwLDI4NjgxLDI4NjgyLDI4NjgzLDI4Njg0LDI4Njg1LDI4Njg2LDI4Njg3LDI4Njg4LDI4NjkwLDI4NjkxLDI4NjkyLDI4NjkzLDI4Njk0LDI4Njk1LDI4''@;'; put 'put ''Njk2LDI4Njk3LDI4NzAwLDI4NzAxLDI4NzAyLDI4NzAzLDI4NzA0LDI4NzA1LDI4NzA2LDI4NzA4LDI4NzA5LDI4NzEwLDI4NzExLDI4NzEyLDI4NzEzLDI4NzE0LDI4NzE1LDI4NzE2LDI4NzE3LDI4NzE4LDI4NzE5LDI4NzIwLDI4NzIxLDI4NzIyLDI4NzIzLDI4NzI0LDI4NzI2LDI4NzI3''@;'; put 'put ''LDI4NzI4LDI4NzMwLDI4NzMxLDI4NzMyLDI4NzMzLDI4NzM0LDI4NzM1LDI4NzM2LDI4NzM3LDI4NzM4LDI4NzM5LDI4NzQwLDI4NzQxLDI4NzQyLDI4NzQzLDI4NzQ0LDI4NzQ1LDI4NzQ2LDI4NzQ3LDI4NzQ5LDI4NzUwLDI4NzUyLDI4NzUzLDI4NzU0LDI4NzU1LDI4NzU2LDI4NzU3LDI4''@;'; put 'put ''NzU4LDI4NzU5LDI4NzYwLDI4NzYxLDI4NzYyLDI4NzYzLDI4NzY0LDI4NzY1LDI4NzY3LDI4NzY4LDI4NzY5LDI4NzcwLDI4NzcxLDI4NzcyLDI4NzczLDI4Nzc0LDI4Nzc1LDI4Nzc2LDI4Nzc3LDI4Nzc4LDI4NzgyLDI4Nzg1LDI4Nzg2LDI4Nzg3LDI4Nzg4LDI4NzkxLDI4NzkzLDI4Nzk0''@;'; put 'put ''LDI4Nzk1LDI4Nzk3LDI4ODAxLDI4ODAyLDI4ODAzLDI4ODA0LDI4ODA2LDI4ODA3LDI4ODA4LDI4ODExLDI4ODEyLDI4ODEzLDI4ODE1LDI4ODE2LDI4ODE3LDI4ODE5LDI4ODIzLDI4ODI0LDI4ODI2LDI4ODI3LDI4ODMwLDI4ODMxLDI4ODMyLDI4ODMzLDI4ODM0LDI4ODM1LDI4ODM2LDI4''@;'; put 'put ''ODM3LDI4ODM4LDI4ODM5LDI4ODQwLDI4ODQxLDI4ODQyLDI4ODQ4LDI4ODUwLDI4ODUyLDI4ODUzLDI4ODU0LDI4ODU4LDI4ODYyLDI4ODYzLDI4ODY4LDI4ODY5LDI4ODcwLDI4ODcxLDI4ODczLDI4ODc1LDI4ODc2LDI4ODc3LDI4ODc4LDI4ODc5LDI4ODgwLDI4ODgxLDI4ODgyLDI4ODgz''@;'; put 'put ''LDI4ODg0LDI4ODg1LDI4ODg2LDI4ODg3LDI4ODkwLDI4ODkyLDI4ODkzLDI4ODk0LDI4ODk2LDI4ODk3LDI4ODk4LDI4ODk5LDI4OTAxLDI4OTA2LDI4OTEwLDI4OTEyLDI4OTEzLDI4OTE0LDI4OTE1LDI4OTE2LDI4OTE3LDI4OTE4LDI4OTIwLDI4OTIyLDI4OTIzLDI4OTI0LDI4OTI2LDI4''@;'; put 'put ''OTI3LDI4OTI4LDI4OTI5LDI4OTMwLDI4OTMxLDI4OTMyLDI4OTMzLDI4OTM0LDI4OTM1LDI4OTM2LDI4OTM5LDI4OTQwLDI4OTQxLDI4OTQyLDI4OTQzLDI4OTQ1LDI4OTQ2LDI4OTQ4LDI4OTUxLDI4OTU1LDI4OTU2LDI4OTU3LDI4OTU4LDI4OTU5LDI4OTYwLDI4OTYxLDI4OTYyLDI4OTYz''@;'; put 'put ''LDI4OTY0LDI4OTY1LDI4OTY3LDI4OTY4LDI4OTY5LDI4OTcwLDI4OTcxLDI4OTcyLDI4OTczLDI4OTc0LDI4OTc4LDI4OTc5LDI4OTgwLDI4OTgxLDI4OTgzLDI4OTg0LDI4OTg1LDI4OTg2LDI4OTg3LDI4OTg4LDI4OTg5LDI4OTkwLDI4OTkxLDI4OTkyLDI4OTkzLDI4OTk0LDI4OTk1LDI4''@;'; put 'put ''OTk2LDI4OTk4LDI4OTk5LDI5ZTMsMjkwMDEsMjkwMDMsMjkwMDUsMjkwMDcsMjkwMDgsMjkwMDksMjkwMTAsMjkwMTEsMjkwMTIsMjkwMTMsMjkwMTQsMjkwMTUsMjkwMTYsMjkwMTcsMjkwMTgsMjkwMTksMjkwMjEsMjkwMjMsMjkwMjQsMjkwMjUsMjkwMjYsMjkwMjcsMjkwMjksMjkwMzMs''@;'; put 'put ''MjkwMzQsMjkwMzUsMjkwMzYsMjkwMzcsMjkwMzksMjkwNDAsMjkwNDEsMjkwNDQsMjkwNDUsMjkwNDYsMjkwNDcsMjkwNDksMjkwNTEsMjkwNTIsMjkwNTQsMjkwNTUsMjkwNTYsMjkwNTcsMjkwNTgsMjkwNTksMjkwNjEsMjkwNjIsMjkwNjMsMjkwNjQsMjkwNjUsMjkwNjcsMjkwNjgsMjkw''@;'; put 'put ''NjksMjkwNzAsMjkwNzIsMjkwNzMsMjkwNzQsMjkwNzUsMjkwNzcsMjkwNzgsMjkwNzksMjkwODIsMjkwODMsMjkwODQsMjkwODUsMjkwODYsMjkwODksMjkwOTAsMjkwOTEsMjkwOTIsMjkwOTMsMjkwOTQsMjkwOTUsMjkwOTcsMjkwOTgsMjkwOTksMjkxMDEsMjkxMDIsMjkxMDMsMjkxMDQs''@;'; put 'put ''MjkxMDUsMjkxMDYsMjkxMDgsMjkxMTAsMjkxMTEsMjkxMTIsMjkxMTQsMjkxMTUsMjkxMTYsMjkxMTcsMjkxMTgsMjkxMTksMjkxMjAsMjkxMjEsMjkxMjIsMjkxMjQsMjkxMjUsMjkxMjYsMjkxMjcsMjkxMjgsMjkxMjksMjkxMzAsMjkxMzEsMjkxMzIsMjkxMzMsMjkxMzUsMjkxMzYsMjkx''@;'; put 'put ''MzcsMjkxMzgsMjkxMzksMjkxNDIsMjkxNDMsMjkxNDQsMjkxNDUsMjkxNDYsMjkxNDcsMjkxNDgsMjkxNDksMjkxNTAsMjkxNTEsMjkxNTMsMjkxNTQsMjkxNTUsMjkxNTYsMjkxNTgsMjkxNjAsMjkxNjEsMjkxNjIsMjkxNjMsMjkxNjQsMjkxNjUsMjkxNjcsMjkxNjgsMjkxNjksMjkxNzAs''@;'; put 'put ''MjkxNzEsMjkxNzIsMjkxNzMsMjkxNzQsMjkxNzUsMjkxNzYsMjkxNzgsMjkxNzksMjkxODAsMjkxODEsMjkxODIsMjkxODMsMjkxODQsMjkxODUsMjkxODYsMjkxODcsMjkxODgsMjkxODksMjkxOTEsMjkxOTIsMjkxOTMsMjkxOTQsMjkxOTUsMjkxOTYsMjkxOTcsMjkxOTgsMjkxOTksMjky''@;'; put 'put ''MDAsMjkyMDEsMjkyMDIsMjkyMDMsMjkyMDQsMjkyMDUsMjkyMDYsMjkyMDcsMjkyMDgsMjkyMDksMjkyMTAsMjkyMTEsMjkyMTIsMjkyMTQsMjkyMTUsMjkyMTYsMjkyMTcsMjkyMTgsMjkyMTksMjkyMjAsMjkyMjEsMjkyMjIsMjkyMjMsMjkyMjUsMjkyMjcsMjkyMjksMjkyMzAsMjkyMzEs''@;'; put 'put ''MjkyMzQsMjkyMzUsMjkyMzYsMjkyNDIsMjkyNDQsMjkyNDYsMjkyNDgsMjkyNDksMjkyNTAsMjkyNTEsMjkyNTIsMjkyNTMsMjkyNTQsMjkyNTcsMjkyNTgsMjkyNTksMjkyNjIsMjkyNjMsMjkyNjQsMjkyNjUsMjkyNjcsMjkyNjgsMjkyNjksMjkyNzEsMjkyNzIsMjkyNzQsMjkyNzYsMjky''@;'; put 'put ''NzgsMjkyODAsMjkyODMsMjkyODQsMjkyODUsMjkyODgsMjkyOTAsMjkyOTEsMjkyOTIsMjkyOTMsMjkyOTYsMjkyOTcsMjkyOTksMjkzMDAsMjkzMDIsMjkzMDMsMjkzMDQsMjkzMDcsMjkzMDgsMjkzMDksMjkzMTQsMjkzMTUsMjkzMTcsMjkzMTgsMjkzMTksMjkzMjAsMjkzMjEsMjkzMjQs''@;'; put 'put ''MjkzMjYsMjkzMjgsMjkzMjksMjkzMzEsMjkzMzIsMjkzMzMsMjkzMzQsMjkzMzUsMjkzMzYsMjkzMzcsMjkzMzgsMjkzMzksMjkzNDAsMjkzNDEsMjkzNDIsMjkzNDQsMjkzNDUsMjkzNDYsMjkzNDcsMjkzNDgsMjkzNDksMjkzNTAsMjkzNTEsMjkzNTIsMjkzNTMsMjkzNTQsMjkzNTUsMjkz''@;'; put 'put ''NTgsMjkzNjEsMjkzNjIsMjkzNjMsMjkzNjUsMjkzNzAsMjkzNzEsMjkzNzIsMjkzNzMsMjkzNzQsMjkzNzUsMjkzNzYsMjkzODEsMjkzODIsMjkzODMsMjkzODUsMjkzODYsMjkzODcsMjkzODgsMjkzOTEsMjkzOTMsMjkzOTUsMjkzOTYsMjkzOTcsMjkzOTgsMjk0MDAsMjk0MDIsMjk0MDMs''@;'; put 'put ''NTg1NjYsNTg1NjcsNTg1NjgsNTg1NjksNTg1NzAsNTg1NzEsNTg1NzIsNTg1NzMsNTg1NzQsNTg1NzUsNTg1NzYsNTg1NzcsNTg1NzgsNTg1NzksNTg1ODAsNTg1ODEsNTg1ODIsNTg1ODMsNTg1ODQsNTg1ODUsNTg1ODYsNTg1ODcsNTg1ODgsNTg1ODksNTg1OTAsNTg1OTEsNTg1OTIsNTg1''@;'; put 'put ''OTMsNTg1OTQsNTg1OTUsNTg1OTYsNTg1OTcsNTg1OTgsNTg1OTksNTg2MDAsNTg2MDEsNTg2MDIsNTg2MDMsNTg2MDQsNTg2MDUsNTg2MDYsNTg2MDcsNTg2MDgsNTg2MDksNTg2MTAsNTg2MTEsNTg2MTIsNTg2MTMsNTg2MTQsNTg2MTUsNTg2MTYsNTg2MTcsNTg2MTgsNTg2MTksNTg2MjAs''@;'; put 'put ''NTg2MjEsNTg2MjIsNTg2MjMsNTg2MjQsNTg2MjUsNTg2MjYsNTg2MjcsNTg2MjgsNTg2MjksNTg2MzAsNTg2MzEsNTg2MzIsNTg2MzMsNTg2MzQsNTg2MzUsNTg2MzYsNTg2MzcsNTg2MzgsNTg2MzksNTg2NDAsNTg2NDEsNTg2NDIsNTg2NDMsNTg2NDQsNTg2NDUsNTg2NDYsNTg2NDcsNTg2''@;'; put 'put ''NDgsNTg2NDksNTg2NTAsNTg2NTEsNTg2NTIsNTg2NTMsNTg2NTQsNTg2NTUsNTg2NTYsNTg2NTcsNTg2NTgsNTg2NTksNTg2NjAsNTg2NjEsMTIyODgsMTIyODksMTIyOTAsMTgzLDcxMyw3MTEsMTY4LDEyMjkxLDEyMjkzLDgyMTIsNjUzNzQsODIxNCw4MjMwLDgyMTYsODIxNyw4MjIwLDgy''@;'; put 'put ''MjEsMTIzMDgsMTIzMDksMTIyOTYsMTIyOTcsMTIyOTgsMTIyOTksMTIzMDAsMTIzMDEsMTIzMDIsMTIzMDMsMTIzMTAsMTIzMTEsMTIzMDQsMTIzMDUsMTc3LDIxNSwyNDcsODc1OCw4NzQzLDg3NDQsODcyMSw4NzE5LDg3NDYsODc0NSw4NzEyLDg3NTksODczMCw4ODY5LDg3NDEsODczNiw4''@;'; put 'put ''OTc4LDg4NTcsODc0Nyw4NzUwLDg4MDEsODc4MCw4Nzc2LDg3NjUsODczMyw4ODAwLDg4MTQsODgxNSw4ODA0LDg4MDUsODczNCw4NzU3LDg3NTYsOTc5NCw5NzkyLDE3Niw4MjQyLDgyNDMsODQ1MSw2NTI4NCwxNjQsNjU1MDQsNjU1MDUsODI0MCwxNjcsODQ3MCw5NzM0LDk3MzMsOTY3NSw5''@;'; put 'put ''Njc5LDk2NzgsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjUxLDk2NTAsODI1MSw4NTk0LDg1OTIsODU5Myw4NTk1LDEyMzA3LDU4NjYyLDU4NjYzLDU4NjY0LDU4NjY1LDU4NjY2LDU4NjY3LDU4NjY4LDU4NjY5LDU4NjcwLDU4NjcxLDU4NjcyLDU4NjczLDU4Njc0LDU4Njc1LDU4Njc2LDU4Njc3''@;'; put 'put ''LDU4Njc4LDU4Njc5LDU4NjgwLDU4NjgxLDU4NjgyLDU4NjgzLDU4Njg0LDU4Njg1LDU4Njg2LDU4Njg3LDU4Njg4LDU4Njg5LDU4NjkwLDU4NjkxLDU4NjkyLDU4NjkzLDU4Njk0LDU4Njk1LDU4Njk2LDU4Njk3LDU4Njk4LDU4Njk5LDU4NzAwLDU4NzAxLDU4NzAyLDU4NzAzLDU4NzA0LDU4''@;'; put 'put ''NzA1LDU4NzA2LDU4NzA3LDU4NzA4LDU4NzA5LDU4NzEwLDU4NzExLDU4NzEyLDU4NzEzLDU4NzE0LDU4NzE1LDU4NzE2LDU4NzE3LDU4NzE4LDU4NzE5LDU4NzIwLDU4NzIxLDU4NzIyLDU4NzIzLDU4NzI0LDU4NzI1LDU4NzI2LDU4NzI3LDU4NzI4LDU4NzI5LDU4NzMwLDU4NzMxLDU4NzMy''@;'; put 'put ''LDU4NzMzLDU4NzM0LDU4NzM1LDU4NzM2LDU4NzM3LDU4NzM4LDU4NzM5LDU4NzQwLDU4NzQxLDU4NzQyLDU4NzQzLDU4NzQ0LDU4NzQ1LDU4NzQ2LDU4NzQ3LDU4NzQ4LDU4NzQ5LDU4NzUwLDU4NzUxLDU4NzUyLDU4NzUzLDU4NzU0LDU4NzU1LDU4NzU2LDU4NzU3LDg1NjAsODU2MSw4NTYy''@;'; put 'put ''LDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksNTkyMzgsNTkyMzksNTkyNDAsNTkyNDEsNTkyNDIsNTkyNDMsOTM1Miw5MzUzLDkzNTQsOTM1NSw5MzU2LDkzNTcsOTM1OCw5MzU5LDkzNjAsOTM2MSw5MzYyLDkzNjMsOTM2NCw5MzY1LDkzNjYsOTM2Nyw5MzY4LDkzNjksOTM3''@;'; put 'put ''MCw5MzcxLDkzMzIsOTMzMyw5MzM0LDkzMzUsOTMzNiw5MzM3LDkzMzgsOTMzOSw5MzQwLDkzNDEsOTM0Miw5MzQzLDkzNDQsOTM0NSw5MzQ2LDkzNDcsOTM0OCw5MzQ5LDkzNTAsOTM1MSw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDgzNjQsNTky''@;'; put 'put ''NDUsMTI4MzIsMTI4MzMsMTI4MzQsMTI4MzUsMTI4MzYsMTI4MzcsMTI4MzgsMTI4MzksMTI4NDAsMTI4NDEsNTkyNDYsNTkyNDcsODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1Myw4NTU0LDg1NTUsNTkyNDgsNTkyNDksNTg3NTgsNTg3NTksNTg3NjAs''@;'; put 'put ''NTg3NjEsNTg3NjIsNTg3NjMsNTg3NjQsNTg3NjUsNTg3NjYsNTg3NjcsNTg3NjgsNTg3NjksNTg3NzAsNTg3NzEsNTg3NzIsNTg3NzMsNTg3NzQsNTg3NzUsNTg3NzYsNTg3NzcsNTg3NzgsNTg3NzksNTg3ODAsNTg3ODEsNTg3ODIsNTg3ODMsNTg3ODQsNTg3ODUsNTg3ODYsNTg3ODcsNTg3''@;'; put 'put ''ODgsNTg3ODksNTg3OTAsNTg3OTEsNTg3OTIsNTg3OTMsNTg3OTQsNTg3OTUsNTg3OTYsNTg3OTcsNTg3OTgsNTg3OTksNTg4MDAsNTg4MDEsNTg4MDIsNTg4MDMsNTg4MDQsNTg4MDUsNTg4MDYsNTg4MDcsNTg4MDgsNTg4MDksNTg4MTAsNTg4MTEsNTg4MTIsNTg4MTMsNTg4MTQsNTg4MTUs''@;'; put 'put ''NTg4MTYsNTg4MTcsNTg4MTgsNTg4MTksNTg4MjAsNTg4MjEsNTg4MjIsNTg4MjMsNTg4MjQsNTg4MjUsNTg4MjYsNTg4MjcsNTg4MjgsNTg4MjksNTg4MzAsNTg4MzEsNTg4MzIsNTg4MzMsNTg4MzQsNTg4MzUsNTg4MzYsNTg4MzcsNTg4MzgsNTg4MzksNTg4NDAsNTg4NDEsNTg4NDIsNTg4''@;'; put 'put ''NDMsNTg4NDQsNTg4NDUsNTg4NDYsNTg4NDcsNTg4NDgsNTg4NDksNTg4NTAsNTg4NTEsNTg4NTIsMTIyODgsNjUyODEsNjUyODIsNjUyODMsNjU1MDksNjUyODUsNjUyODYsNjUyODcsNjUyODgsNjUyODksNjUyOTAsNjUyOTEsNjUyOTIsNjUyOTMsNjUyOTQsNjUyOTUsNjUyOTYsNjUyOTcs''@;'; put 'put ''NjUyOTgsNjUyOTksNjUzMDAsNjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsNjUzMDYsNjUzMDcsNjUzMDgsNjUzMDksNjUzMTAsNjUzMTEsNjUzMTIsNjUzMTMsNjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUz''@;'; put 'put ''MjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgsNjUzMzksNjUzNDAsNjUzNDEsNjUzNDIsNjUzNDMsNjUzNDQsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIs''@;'; put 'put ''NjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsNjUzNzEsNjUzNzIsNjUzNzMsNjU1MDcsNTg4NTQsNTg4NTUsNTg4NTYsNTg4NTcsNTg4NTgsNTg4''@;'; put 'put ''NTksNTg4NjAsNTg4NjEsNTg4NjIsNTg4NjMsNTg4NjQsNTg4NjUsNTg4NjYsNTg4NjcsNTg4NjgsNTg4NjksNTg4NzAsNTg4NzEsNTg4NzIsNTg4NzMsNTg4NzQsNTg4NzUsNTg4NzYsNTg4NzcsNTg4NzgsNTg4NzksNTg4ODAsNTg4ODEsNTg4ODIsNTg4ODMsNTg4ODQsNTg4ODUsNTg4ODYs''@;'; put 'put ''NTg4ODcsNTg4ODgsNTg4ODksNTg4OTAsNTg4OTEsNTg4OTIsNTg4OTMsNTg4OTQsNTg4OTUsNTg4OTYsNTg4OTcsNTg4OTgsNTg4OTksNTg5MDAsNTg5MDEsNTg5MDIsNTg5MDMsNTg5MDQsNTg5MDUsNTg5MDYsNTg5MDcsNTg5MDgsNTg5MDksNTg5MTAsNTg5MTEsNTg5MTIsNTg5MTMsNTg5''@;'; put 'put ''MTQsNTg5MTUsNTg5MTYsNTg5MTcsNTg5MTgsNTg5MTksNTg5MjAsNTg5MjEsNTg5MjIsNTg5MjMsNTg5MjQsNTg5MjUsNTg5MjYsNTg5MjcsNTg5MjgsNTg5MjksNTg5MzAsNTg5MzEsNTg5MzIsNTg5MzMsNTg5MzQsNTg5MzUsNTg5MzYsNTg5MzcsNTg5MzgsNTg5MzksNTg5NDAsNTg5NDEs''@;'; put 'put ''NTg5NDIsNTg5NDMsNTg5NDQsNTg5NDUsNTg5NDYsNTg5NDcsNTg5NDgsNTg5NDksMTIzNTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcsMTIzNTgsMTIzNTksMTIzNjAsMTIzNjEsMTIzNjIsMTIzNjMsMTIzNjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIz''@;'; put 'put ''NzIsMTIzNzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIzNzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIzODUsMTIzODYsMTIzODcsMTIzODgsMTIzODksMTIzOTAsMTIzOTEsMTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTks''@;'; put 'put ''MTI0MDAsMTI0MDEsMTI0MDIsMTI0MDMsMTI0MDQsMTI0MDUsMTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQsMTI0MTUsMTI0MTYsMTI0MTcsMTI0MTgsMTI0MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0''@;'; put 'put ''MjcsMTI0MjgsMTI0MjksMTI0MzAsMTI0MzEsMTI0MzIsMTI0MzMsMTI0MzQsMTI0MzUsNTkyNTAsNTkyNTEsNTkyNTIsNTkyNTMsNTkyNTQsNTkyNTUsNTkyNTYsNTkyNTcsNTkyNTgsNTkyNTksNTkyNjAsNTg5NTAsNTg5NTEsNTg5NTIsNTg5NTMsNTg5NTQsNTg5NTUsNTg5NTYsNTg5NTcs''@;'; put 'put ''NTg5NTgsNTg5NTksNTg5NjAsNTg5NjEsNTg5NjIsNTg5NjMsNTg5NjQsNTg5NjUsNTg5NjYsNTg5NjcsNTg5NjgsNTg5NjksNTg5NzAsNTg5NzEsNTg5NzIsNTg5NzMsNTg5NzQsNTg5NzUsNTg5NzYsNTg5NzcsNTg5NzgsNTg5NzksNTg5ODAsNTg5ODEsNTg5ODIsNTg5ODMsNTg5ODQsNTg5''@;'; put 'put ''ODUsNTg5ODYsNTg5ODcsNTg5ODgsNTg5ODksNTg5OTAsNTg5OTEsNTg5OTIsNTg5OTMsNTg5OTQsNTg5OTUsNTg5OTYsNTg5OTcsNTg5OTgsNTg5OTksNTllMyw1OTAwMSw1OTAwMiw1OTAwMyw1OTAwNCw1OTAwNSw1OTAwNiw1OTAwNyw1OTAwOCw1OTAwOSw1OTAxMCw1OTAxMSw1OTAxMiw1''@;'; put 'put ''OTAxMyw1OTAxNCw1OTAxNSw1OTAxNiw1OTAxNyw1OTAxOCw1OTAxOSw1OTAyMCw1OTAyMSw1OTAyMiw1OTAyMyw1OTAyNCw1OTAyNSw1OTAyNiw1OTAyNyw1OTAyOCw1OTAyOSw1OTAzMCw1OTAzMSw1OTAzMiw1OTAzMyw1OTAzNCw1OTAzNSw1OTAzNiw1OTAzNyw1OTAzOCw1OTAzOSw1OTA0''@;'; put 'put ''MCw1OTA0MSw1OTA0Miw1OTA0Myw1OTA0NCw1OTA0NSwxMjQ0OSwxMjQ1MCwxMjQ1MSwxMjQ1MiwxMjQ1MywxMjQ1NCwxMjQ1NSwxMjQ1NiwxMjQ1NywxMjQ1OCwxMjQ1OSwxMjQ2MCwxMjQ2MSwxMjQ2MiwxMjQ2MywxMjQ2NCwxMjQ2NSwxMjQ2NiwxMjQ2NywxMjQ2OCwxMjQ2OSwxMjQ3MCwx''@;'; put 'put ''MjQ3MSwxMjQ3MiwxMjQ3MywxMjQ3NCwxMjQ3NSwxMjQ3NiwxMjQ3NywxMjQ3OCwxMjQ3OSwxMjQ4MCwxMjQ4MSwxMjQ4MiwxMjQ4MywxMjQ4NCwxMjQ4NSwxMjQ4NiwxMjQ4NywxMjQ4OCwxMjQ4OSwxMjQ5MCwxMjQ5MSwxMjQ5MiwxMjQ5MywxMjQ5NCwxMjQ5NSwxMjQ5NiwxMjQ5NywxMjQ5''@;'; put 'put ''OCwxMjQ5OSwxMjUwMCwxMjUwMSwxMjUwMiwxMjUwMywxMjUwNCwxMjUwNSwxMjUwNiwxMjUwNywxMjUwOCwxMjUwOSwxMjUxMCwxMjUxMSwxMjUxMiwxMjUxMywxMjUxNCwxMjUxNSwxMjUxNiwxMjUxNywxMjUxOCwxMjUxOSwxMjUyMCwxMjUyMSwxMjUyMiwxMjUyMywxMjUyNCwxMjUyNSwx''@;'; put 'put ''MjUyNiwxMjUyNywxMjUyOCwxMjUyOSwxMjUzMCwxMjUzMSwxMjUzMiwxMjUzMywxMjUzNCw1OTI2MSw1OTI2Miw1OTI2Myw1OTI2NCw1OTI2NSw1OTI2Niw1OTI2Nyw1OTI2OCw1OTA0Niw1OTA0Nyw1OTA0OCw1OTA0OSw1OTA1MCw1OTA1MSw1OTA1Miw1OTA1Myw1OTA1NCw1OTA1NSw1OTA1''@;'; put 'put ''Niw1OTA1Nyw1OTA1OCw1OTA1OSw1OTA2MCw1OTA2MSw1OTA2Miw1OTA2Myw1OTA2NCw1OTA2NSw1OTA2Niw1OTA2Nyw1OTA2OCw1OTA2OSw1OTA3MCw1OTA3MSw1OTA3Miw1OTA3Myw1OTA3NCw1OTA3NSw1OTA3Niw1OTA3Nyw1OTA3OCw1OTA3OSw1OTA4MCw1OTA4MSw1OTA4Miw1OTA4Myw1''@;'; put 'put ''OTA4NCw1OTA4NSw1OTA4Niw1OTA4Nyw1OTA4OCw1OTA4OSw1OTA5MCw1OTA5MSw1OTA5Miw1OTA5Myw1OTA5NCw1OTA5NSw1OTA5Niw1OTA5Nyw1OTA5OCw1OTA5OSw1OTEwMCw1OTEwMSw1OTEwMiw1OTEwMyw1OTEwNCw1OTEwNSw1OTEwNiw1OTEwNyw1OTEwOCw1OTEwOSw1OTExMCw1OTEx''@;'; put 'put ''MSw1OTExMiw1OTExMyw1OTExNCw1OTExNSw1OTExNiw1OTExNyw1OTExOCw1OTExOSw1OTEyMCw1OTEyMSw1OTEyMiw1OTEyMyw1OTEyNCw1OTEyNSw1OTEyNiw1OTEyNyw1OTEyOCw1OTEyOSw1OTEzMCw1OTEzMSw1OTEzMiw1OTEzMyw1OTEzNCw1OTEzNSw1OTEzNiw1OTEzNyw1OTEzOCw1''@;'; put 'put ''OTEzOSw1OTE0MCw1OTE0MSw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw1OTI2OSw1OTI3MCw1OTI3MSw1OTI3Miw1OTI3Myw1OTI3NCw1OTI3NSw1OTI3Niw5NDUs''@;'; put 'put ''OTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw1OTI3Nyw1OTI3OCw1OTI3OSw1OTI4MCw1OTI4MSw1OTI4Miw1OTI4Myw2NTA3Nyw2NTA3OCw2NTA4MSw2NTA4Miw2NTA4Nyw2''@;'; put 'put ''NTA4OCw2NTA4NSw2NTA4Niw2NTA4OSw2NTA5MCw2NTA5MSw2NTA5Miw1OTI4NCw1OTI4NSw2NTA4Myw2NTA4NCw2NTA3OSw2NTA4MCw2NTA3Myw1OTI4Niw2NTA3NSw2NTA3Niw1OTI4Nyw1OTI4OCw1OTI4OSw1OTI5MCw1OTI5MSw1OTI5Miw1OTI5Myw1OTI5NCw1OTI5NSw1OTE0Miw1OTE0''@;'; put 'put ''Myw1OTE0NCw1OTE0NSw1OTE0Niw1OTE0Nyw1OTE0OCw1OTE0OSw1OTE1MCw1OTE1MSw1OTE1Miw1OTE1Myw1OTE1NCw1OTE1NSw1OTE1Niw1OTE1Nyw1OTE1OCw1OTE1OSw1OTE2MCw1OTE2MSw1OTE2Miw1OTE2Myw1OTE2NCw1OTE2NSw1OTE2Niw1OTE2Nyw1OTE2OCw1OTE2OSw1OTE3MCw1''@;'; put 'put ''OTE3MSw1OTE3Miw1OTE3Myw1OTE3NCw1OTE3NSw1OTE3Niw1OTE3Nyw1OTE3OCw1OTE3OSw1OTE4MCw1OTE4MSw1OTE4Miw1OTE4Myw1OTE4NCw1OTE4NSw1OTE4Niw1OTE4Nyw1OTE4OCw1OTE4OSw1OTE5MCw1OTE5MSw1OTE5Miw1OTE5Myw1OTE5NCw1OTE5NSw1OTE5Niw1OTE5Nyw1OTE5''@;'; put 'put ''OCw1OTE5OSw1OTIwMCw1OTIwMSw1OTIwMiw1OTIwMyw1OTIwNCw1OTIwNSw1OTIwNiw1OTIwNyw1OTIwOCw1OTIwOSw1OTIxMCw1OTIxMSw1OTIxMiw1OTIxMyw1OTIxNCw1OTIxNSw1OTIxNiw1OTIxNyw1OTIxOCw1OTIxOSw1OTIyMCw1OTIyMSw1OTIyMiw1OTIyMyw1OTIyNCw1OTIyNSw1''@;'; put 'put ''OTIyNiw1OTIyNyw1OTIyOCw1OTIyOSw1OTIzMCw1OTIzMSw1OTIzMiw1OTIzMyw1OTIzNCw1OTIzNSw1OTIzNiw1OTIzNywxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDI1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3''@;'; put 'put ''LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSw1OTI5Niw1OTI5Nyw1OTI5OCw1OTI5OSw1OTMwMCw1OTMwMSw1OTMwMiw1OTMwMyw1OTMwNCw1OTMwNSw1OTMwNiw1OTMwNyw1OTMwOCw1OTMwOSw1OTMxMCwxMDcy''@;'; put 'put ''LDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMTA1LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMyw1OTMx''@;'; put 'put ''MSw1OTMxMiw1OTMxMyw1OTMxNCw1OTMxNSw1OTMxNiw1OTMxNyw1OTMxOCw1OTMxOSw1OTMyMCw1OTMyMSw1OTMyMiw1OTMyMyw3MTQsNzE1LDcyOSw4MjExLDgyMTMsODIyOSw4MjQ1LDg0NTMsODQ1Nyw4NTk4LDg1OTksODYwMCw4NjAxLDg3MjUsODczNSw4NzM5LDg3ODYsODgwNiw4ODA3''@;'; put 'put ''LDg4OTUsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk1ODEsOTU4Miw5NTgz''@;'; put 'put ''LDk1ODQsOTU4NSw5NTg2LDk1ODcsOTYwMSw5NjAyLDk2MDMsOTYwNCw5NjA1LDk2MDYsOTYwNyw5NjA4LDk2MDksOTYxMCw5NjExLDk2MTIsOTYxMyw5NjE0LDk2MTUsOTYxOSw5NjIwLDk2MjEsOTY2MCw5NjYxLDk2OTgsOTY5OSw5NzAwLDk3MDEsOTczNyw4ODUzLDEyMzA2LDEyMzE3LDEy''@;'; put 'put ''MzE4LDU5MzI0LDU5MzI1LDU5MzI2LDU5MzI3LDU5MzI4LDU5MzI5LDU5MzMwLDU5MzMxLDU5MzMyLDU5MzMzLDU5MzM0LDI1NywyMjUsNDYyLDIyNCwyNzUsMjMzLDI4MywyMzIsMjk5LDIzNyw0NjQsMjM2LDMzMywyNDMsNDY2LDI0MiwzNjMsMjUwLDQ2OCwyNDksNDcwLDQ3Miw0NzQsNDc2''@;'; put 'put ''LDI1MiwyMzQsNTkzLDc3NDMsMzI0LDMyOCw1MDUsNjA5LDU5MzM3LDU5MzM4LDU5MzM5LDU5MzQwLDEyNTQ5LDEyNTUwLDEyNTUxLDEyNTUyLDEyNTUzLDEyNTU0LDEyNTU1LDEyNTU2LDEyNTU3LDEyNTU4LDEyNTU5LDEyNTYwLDEyNTYxLDEyNTYyLDEyNTYzLDEyNTY0LDEyNTY1LDEyNTY2''@;'; put 'put ''LDEyNTY3LDEyNTY4LDEyNTY5LDEyNTcwLDEyNTcxLDEyNTcyLDEyNTczLDEyNTc0LDEyNTc1LDEyNTc2LDEyNTc3LDEyNTc4LDEyNTc5LDEyNTgwLDEyNTgxLDEyNTgyLDEyNTgzLDEyNTg0LDEyNTg1LDU5MzQxLDU5MzQyLDU5MzQzLDU5MzQ0LDU5MzQ1LDU5MzQ2LDU5MzQ3LDU5MzQ4LDU5''@;'; put 'put ''MzQ5LDU5MzUwLDU5MzUxLDU5MzUyLDU5MzUzLDU5MzU0LDU5MzU1LDU5MzU2LDU5MzU3LDU5MzU4LDU5MzU5LDU5MzYwLDU5MzYxLDEyMzIxLDEyMzIyLDEyMzIzLDEyMzI0LDEyMzI1LDEyMzI2LDEyMzI3LDEyMzI4LDEyMzI5LDEyOTYzLDEzMTk4LDEzMTk5LDEzMjEyLDEzMjEzLDEzMjE0''@;'; put 'put ''LDEzMjE3LDEzMjUyLDEzMjYyLDEzMjY1LDEzMjY2LDEzMjY5LDY1MDcyLDY1NTA2LDY1NTA4LDU5MzYyLDg0ODEsMTI4NDksNTkzNjMsODIwOCw1OTM2NCw1OTM2NSw1OTM2NiwxMjU0MCwxMjQ0MywxMjQ0NCwxMjU0MSwxMjU0MiwxMjI5NCwxMjQ0NSwxMjQ0Niw2NTA5Nyw2NTA5OCw2NTA5''@;'; put 'put ''OSw2NTEwMCw2NTEwMSw2NTEwMiw2NTEwMyw2NTEwNCw2NTEwNSw2NTEwNiw2NTEwOCw2NTEwOSw2NTExMCw2NTExMSw2NTExMyw2NTExNCw2NTExNSw2NTExNiw2NTExNyw2NTExOCw2NTExOSw2NTEyMCw2NTEyMSw2NTEyMiw2NTEyMyw2NTEyNCw2NTEyNSw2NTEyNiw2NTEyOCw2NTEyOSw2''@;'; put 'put ''NTEzMCw2NTEzMSwxMjM1MCwxMjI3MiwxMjI3MywxMjI3NCwxMjI3NSwxMjI3NiwxMjI3NywxMjI3OCwxMjI3OSwxMjI4MCwxMjI4MSwxMjI4MiwxMjI4MywxMjI5NSw1OTM4MCw1OTM4MSw1OTM4Miw1OTM4Myw1OTM4NCw1OTM4NSw1OTM4Niw1OTM4Nyw1OTM4OCw1OTM4OSw1OTM5MCw1OTM5''@;'; put 'put ''MSw1OTM5Miw5NDcyLDk0NzMsOTQ3NCw5NDc1LDk0NzYsOTQ3Nyw5NDc4LDk0NzksOTQ4MCw5NDgxLDk0ODIsOTQ4Myw5NDg0LDk0ODUsOTQ4Niw5NDg3LDk0ODgsOTQ4OSw5NDkwLDk0OTEsOTQ5Miw5NDkzLDk0OTQsOTQ5NSw5NDk2LDk0OTcsOTQ5OCw5NDk5LDk1MDAsOTUwMSw5NTAyLDk1''@;'; put 'put ''MDMsOTUwNCw5NTA1LDk1MDYsOTUwNyw5NTA4LDk1MDksOTUxMCw5NTExLDk1MTIsOTUxMyw5NTE0LDk1MTUsOTUxNiw5NTE3LDk1MTgsOTUxOSw5NTIwLDk1MjEsOTUyMiw5NTIzLDk1MjQsOTUyNSw5NTI2LDk1MjcsOTUyOCw5NTI5LDk1MzAsOTUzMSw5NTMyLDk1MzMsOTUzNCw5NTM1LDk1''@;'; put 'put ''MzYsOTUzNyw5NTM4LDk1MzksOTU0MCw5NTQxLDk1NDIsOTU0Myw5NTQ0LDk1NDUsOTU0Niw5NTQ3LDU5MzkzLDU5Mzk0LDU5Mzk1LDU5Mzk2LDU5Mzk3LDU5Mzk4LDU5Mzk5LDU5NDAwLDU5NDAxLDU5NDAyLDU5NDAzLDU5NDA0LDU5NDA1LDU5NDA2LDU5NDA3LDI5NDA0LDI5NDA1LDI5NDA3''@;'; put 'put ''LDI5NDEwLDI5NDExLDI5NDEyLDI5NDEzLDI5NDE0LDI5NDE1LDI5NDE4LDI5NDE5LDI5NDI5LDI5NDMwLDI5NDMzLDI5NDM3LDI5NDM4LDI5NDM5LDI5NDQwLDI5NDQyLDI5NDQ0LDI5NDQ1LDI5NDQ2LDI5NDQ3LDI5NDQ4LDI5NDQ5LDI5NDUxLDI5NDUyLDI5NDUzLDI5NDU1LDI5NDU2LDI5''@;'; put 'put ''NDU3LDI5NDU4LDI5NDYwLDI5NDY0LDI5NDY1LDI5NDY2LDI5NDcxLDI5NDcyLDI5NDc1LDI5NDc2LDI5NDc4LDI5NDc5LDI5NDgwLDI5NDg1LDI5NDg3LDI5NDg4LDI5NDkwLDI5NDkxLDI5NDkzLDI5NDk0LDI5NDk4LDI5NDk5LDI5NTAwLDI5NTAxLDI5NTA0LDI5NTA1LDI5NTA2LDI5NTA3''@;'; put 'put ''LDI5NTA4LDI5NTA5LDI5NTEwLDI5NTExLDI5NTEyLDI5NTEzLDI5NTE0LDI5NTE1LDI5NTE2LDI5NTE4LDI5NTE5LDI5NTIxLDI5NTIzLDI5NTI0LDI5NTI1LDI5NTI2LDI5NTI4LDI5NTI5LDI5NTMwLDI5NTMxLDI5NTMyLDI5NTMzLDI5NTM0LDI5NTM1LDI5NTM3LDI5NTM4LDI5NTM5LDI5''@;'; put 'put ''NTQwLDI5NTQxLDI5NTQyLDI5NTQzLDI5NTQ0LDI5NTQ1LDI5NTQ2LDI5NTQ3LDI5NTUwLDI5NTUyLDI5NTUzLDU3MzQ0LDU3MzQ1LDU3MzQ2LDU3MzQ3LDU3MzQ4LDU3MzQ5LDU3MzUwLDU3MzUxLDU3MzUyLDU3MzUzLDU3MzU0LDU3MzU1LDU3MzU2LDU3MzU3LDU3MzU4LDU3MzU5LDU3MzYw''@;'; put 'put ''LDU3MzYxLDU3MzYyLDU3MzYzLDU3MzY0LDU3MzY1LDU3MzY2LDU3MzY3LDU3MzY4LDU3MzY5LDU3MzcwLDU3MzcxLDU3MzcyLDU3MzczLDU3Mzc0LDU3Mzc1LDU3Mzc2LDU3Mzc3LDU3Mzc4LDU3Mzc5LDU3MzgwLDU3MzgxLDU3MzgyLDU3MzgzLDU3Mzg0LDU3Mzg1LDU3Mzg2LDU3Mzg3LDU3''@;'; put 'put ''Mzg4LDU3Mzg5LDU3MzkwLDU3MzkxLDU3MzkyLDU3MzkzLDU3Mzk0LDU3Mzk1LDU3Mzk2LDU3Mzk3LDU3Mzk4LDU3Mzk5LDU3NDAwLDU3NDAxLDU3NDAyLDU3NDAzLDU3NDA0LDU3NDA1LDU3NDA2LDU3NDA3LDU3NDA4LDU3NDA5LDU3NDEwLDU3NDExLDU3NDEyLDU3NDEzLDU3NDE0LDU3NDE1''@;'; put 'put ''LDU3NDE2LDU3NDE3LDU3NDE4LDU3NDE5LDU3NDIwLDU3NDIxLDU3NDIyLDU3NDIzLDU3NDI0LDU3NDI1LDU3NDI2LDU3NDI3LDU3NDI4LDU3NDI5LDU3NDMwLDU3NDMxLDU3NDMyLDU3NDMzLDU3NDM0LDU3NDM1LDU3NDM2LDU3NDM3LDI5NTU0LDI5NTU1LDI5NTU2LDI5NTU3LDI5NTU4LDI5''@;'; put 'put ''NTU5LDI5NTYwLDI5NTYxLDI5NTYyLDI5NTYzLDI5NTY0LDI5NTY1LDI5NTY3LDI5NTY4LDI5NTY5LDI5NTcwLDI5NTcxLDI5NTczLDI5NTc0LDI5NTc2LDI5NTc4LDI5NTgwLDI5NTgxLDI5NTgzLDI5NTg0LDI5NTg2LDI5NTg3LDI5NTg4LDI5NTg5LDI5NTkxLDI5NTkyLDI5NTkzLDI5NTk0''@;'; put 'put ''LDI5NTk2LDI5NTk3LDI5NTk4LDI5NjAwLDI5NjAxLDI5NjAzLDI5NjA0LDI5NjA1LDI5NjA2LDI5NjA3LDI5NjA4LDI5NjEwLDI5NjEyLDI5NjEzLDI5NjE3LDI5NjIwLDI5NjIxLDI5NjIyLDI5NjI0LDI5NjI1LDI5NjI4LDI5NjI5LDI5NjMwLDI5NjMxLDI5NjMzLDI5NjM1LDI5NjM2LDI5''@;'; put 'put ''NjM3LDI5NjM4LDI5NjM5LDI5NjQzLDI5NjQ0LDI5NjQ2LDI5NjUwLDI5NjUxLDI5NjUyLDI5NjUzLDI5NjU0LDI5NjU1LDI5NjU2LDI5NjU4LDI5NjU5LDI5NjYwLDI5NjYxLDI5NjYzLDI5NjY1LDI5NjY2LDI5NjY3LDI5NjY4LDI5NjcwLDI5NjcyLDI5Njc0LDI5Njc1LDI5Njc2LDI5Njc4''@;'; put 'put ''LDI5Njc5LDI5NjgwLDI5NjgxLDI5NjgzLDI5Njg0LDI5Njg1LDI5Njg2LDI5Njg3LDU3NDM4LDU3NDM5LDU3NDQwLDU3NDQxLDU3NDQyLDU3NDQzLDU3NDQ0LDU3NDQ1LDU3NDQ2LDU3NDQ3LDU3NDQ4LDU3NDQ5LDU3NDUwLDU3NDUxLDU3NDUyLDU3NDUzLDU3NDU0LDU3NDU1LDU3NDU2LDU3''@;'; put 'put ''NDU3LDU3NDU4LDU3NDU5LDU3NDYwLDU3NDYxLDU3NDYyLDU3NDYzLDU3NDY0LDU3NDY1LDU3NDY2LDU3NDY3LDU3NDY4LDU3NDY5LDU3NDcwLDU3NDcxLDU3NDcyLDU3NDczLDU3NDc0LDU3NDc1LDU3NDc2LDU3NDc3LDU3NDc4LDU3NDc5LDU3NDgwLDU3NDgxLDU3NDgyLDU3NDgzLDU3NDg0''@;'; put 'put ''LDU3NDg1LDU3NDg2LDU3NDg3LDU3NDg4LDU3NDg5LDU3NDkwLDU3NDkxLDU3NDkyLDU3NDkzLDU3NDk0LDU3NDk1LDU3NDk2LDU3NDk3LDU3NDk4LDU3NDk5LDU3NTAwLDU3NTAxLDU3NTAyLDU3NTAzLDU3NTA0LDU3NTA1LDU3NTA2LDU3NTA3LDU3NTA4LDU3NTA5LDU3NTEwLDU3NTExLDU3''@;'; put 'put ''NTEyLDU3NTEzLDU3NTE0LDU3NTE1LDU3NTE2LDU3NTE3LDU3NTE4LDU3NTE5LDU3NTIwLDU3NTIxLDU3NTIyLDU3NTIzLDU3NTI0LDU3NTI1LDU3NTI2LDU3NTI3LDU3NTI4LDU3NTI5LDU3NTMwLDU3NTMxLDI5Njg4LDI5Njg5LDI5NjkwLDI5NjkxLDI5NjkyLDI5NjkzLDI5Njk0LDI5Njk1''@;'; put 'put ''LDI5Njk2LDI5Njk3LDI5Njk4LDI5NzAwLDI5NzAzLDI5NzA0LDI5NzA3LDI5NzA4LDI5NzA5LDI5NzEwLDI5NzEzLDI5NzE0LDI5NzE1LDI5NzE2LDI5NzE3LDI5NzE4LDI5NzE5LDI5NzIwLDI5NzIxLDI5NzI0LDI5NzI1LDI5NzI2LDI5NzI3LDI5NzI4LDI5NzI5LDI5NzMxLDI5NzMyLDI5''@;'; put 'put ''NzM1LDI5NzM3LDI5NzM5LDI5NzQxLDI5NzQzLDI5NzQ1LDI5NzQ2LDI5NzUxLDI5NzUyLDI5NzUzLDI5NzU0LDI5NzU1LDI5NzU3LDI5NzU4LDI5NzU5LDI5NzYwLDI5NzYyLDI5NzYzLDI5NzY0LDI5NzY1LDI5NzY2LDI5NzY3LDI5NzY4LDI5NzY5LDI5NzcwLDI5NzcxLDI5NzcyLDI5Nzcz''@;'; put 'put ''LDI5Nzc0LDI5Nzc1LDI5Nzc2LDI5Nzc3LDI5Nzc4LDI5Nzc5LDI5NzgwLDI5NzgyLDI5Nzg0LDI5Nzg5LDI5NzkyLDI5NzkzLDI5Nzk0LDI5Nzk1LDI5Nzk2LDI5Nzk3LDI5Nzk4LDI5Nzk5LDI5ODAwLDI5ODAxLDI5ODAyLDI5ODAzLDI5ODA0LDI5ODA2LDI5ODA3LDI5ODA5LDI5ODEwLDI5''@;'; put 'put ''ODExLDI5ODEyLDI5ODEzLDI5ODE2LDI5ODE3LDI5ODE4LDU3NTMyLDU3NTMzLDU3NTM0LDU3NTM1LDU3NTM2LDU3NTM3LDU3NTM4LDU3NTM5LDU3NTQwLDU3NTQxLDU3NTQyLDU3NTQzLDU3NTQ0LDU3NTQ1LDU3NTQ2LDU3NTQ3LDU3NTQ4LDU3NTQ5LDU3NTUwLDU3NTUxLDU3NTUyLDU3NTUz''@;'; put 'put ''LDU3NTU0LDU3NTU1LDU3NTU2LDU3NTU3LDU3NTU4LDU3NTU5LDU3NTYwLDU3NTYxLDU3NTYyLDU3NTYzLDU3NTY0LDU3NTY1LDU3NTY2LDU3NTY3LDU3NTY4LDU3NTY5LDU3NTcwLDU3NTcxLDU3NTcyLDU3NTczLDU3NTc0LDU3NTc1LDU3NTc2LDU3NTc3LDU3NTc4LDU3NTc5LDU3NTgwLDU3''@;'; put 'put ''NTgxLDU3NTgyLDU3NTgzLDU3NTg0LDU3NTg1LDU3NTg2LDU3NTg3LDU3NTg4LDU3NTg5LDU3NTkwLDU3NTkxLDU3NTkyLDU3NTkzLDU3NTk0LDU3NTk1LDU3NTk2LDU3NTk3LDU3NTk4LDU3NTk5LDU3NjAwLDU3NjAxLDU3NjAyLDU3NjAzLDU3NjA0LDU3NjA1LDU3NjA2LDU3NjA3LDU3NjA4''@;'; put 'put ''LDU3NjA5LDU3NjEwLDU3NjExLDU3NjEyLDU3NjEzLDU3NjE0LDU3NjE1LDU3NjE2LDU3NjE3LDU3NjE4LDU3NjE5LDU3NjIwLDU3NjIxLDU3NjIyLDU3NjIzLDU3NjI0LDU3NjI1LDI5ODE5LDI5ODIwLDI5ODIxLDI5ODIzLDI5ODI2LDI5ODI4LDI5ODI5LDI5ODMwLDI5ODMyLDI5ODMzLDI5''@;'; put 'put ''ODM0LDI5ODM2LDI5ODM3LDI5ODM5LDI5ODQxLDI5ODQyLDI5ODQzLDI5ODQ0LDI5ODQ1LDI5ODQ2LDI5ODQ3LDI5ODQ4LDI5ODQ5LDI5ODUwLDI5ODUxLDI5ODUzLDI5ODU1LDI5ODU2LDI5ODU3LDI5ODU4LDI5ODU5LDI5ODYwLDI5ODYxLDI5ODYyLDI5ODY2LDI5ODY3LDI5ODY4LDI5ODY5''@;'; put 'put ''LDI5ODcwLDI5ODcxLDI5ODcyLDI5ODczLDI5ODc0LDI5ODc1LDI5ODc2LDI5ODc3LDI5ODc4LDI5ODc5LDI5ODgwLDI5ODgxLDI5ODgzLDI5ODg0LDI5ODg1LDI5ODg2LDI5ODg3LDI5ODg4LDI5ODg5LDI5ODkwLDI5ODkxLDI5ODkyLDI5ODkzLDI5ODk0LDI5ODk1LDI5ODk2LDI5ODk3LDI5''@;'; put 'put ''ODk4LDI5ODk5LDI5OTAwLDI5OTAxLDI5OTAyLDI5OTAzLDI5OTA0LDI5OTA1LDI5OTA3LDI5OTA4LDI5OTA5LDI5OTEwLDI5OTExLDI5OTEyLDI5OTEzLDI5OTE0LDI5OTE1LDI5OTE3LDI5OTE5LDI5OTIxLDI5OTI1LDI5OTI3LDI5OTI4LDI5OTI5LDI5OTMwLDI5OTMxLDI5OTMyLDI5OTMz''@;'; put 'put ''LDI5OTM2LDI5OTM3LDI5OTM4LDU3NjI2LDU3NjI3LDU3NjI4LDU3NjI5LDU3NjMwLDU3NjMxLDU3NjMyLDU3NjMzLDU3NjM0LDU3NjM1LDU3NjM2LDU3NjM3LDU3NjM4LDU3NjM5LDU3NjQwLDU3NjQxLDU3NjQyLDU3NjQzLDU3NjQ0LDU3NjQ1LDU3NjQ2LDU3NjQ3LDU3NjQ4LDU3NjQ5LDU3''@;'; put 'put ''NjUwLDU3NjUxLDU3NjUyLDU3NjUzLDU3NjU0LDU3NjU1LDU3NjU2LDU3NjU3LDU3NjU4LDU3NjU5LDU3NjYwLDU3NjYxLDU3NjYyLDU3NjYzLDU3NjY0LDU3NjY1LDU3NjY2LDU3NjY3LDU3NjY4LDU3NjY5LDU3NjcwLDU3NjcxLDU3NjcyLDU3NjczLDU3Njc0LDU3Njc1LDU3Njc2LDU3Njc3''@;'; put 'put ''LDU3Njc4LDU3Njc5LDU3NjgwLDU3NjgxLDU3NjgyLDU3NjgzLDU3Njg0LDU3Njg1LDU3Njg2LDU3Njg3LDU3Njg4LDU3Njg5LDU3NjkwLDU3NjkxLDU3NjkyLDU3NjkzLDU3Njk0LDU3Njk1LDU3Njk2LDU3Njk3LDU3Njk4LDU3Njk5LDU3NzAwLDU3NzAxLDU3NzAyLDU3NzAzLDU3NzA0LDU3''@;'; put 'put ''NzA1LDU3NzA2LDU3NzA3LDU3NzA4LDU3NzA5LDU3NzEwLDU3NzExLDU3NzEyLDU3NzEzLDU3NzE0LDU3NzE1LDU3NzE2LDU3NzE3LDU3NzE4LDU3NzE5LDI5OTM5LDI5OTQxLDI5OTQ0LDI5OTQ1LDI5OTQ2LDI5OTQ3LDI5OTQ4LDI5OTQ5LDI5OTUwLDI5OTUyLDI5OTUzLDI5OTU0LDI5OTU1''@;'; put 'put ''LDI5OTU3LDI5OTU4LDI5OTU5LDI5OTYwLDI5OTYxLDI5OTYyLDI5OTYzLDI5OTY0LDI5OTY2LDI5OTY4LDI5OTcwLDI5OTcyLDI5OTczLDI5OTc0LDI5OTc1LDI5OTc5LDI5OTgxLDI5OTgyLDI5OTg0LDI5OTg1LDI5OTg2LDI5OTg3LDI5OTg4LDI5OTkwLDI5OTkxLDI5OTk0LDI5OTk4LDMw''@;'; put 'put ''MDA0LDMwMDA2LDMwMDA5LDMwMDEyLDMwMDEzLDMwMDE1LDMwMDE3LDMwMDE4LDMwMDE5LDMwMDIwLDMwMDIyLDMwMDIzLDMwMDI1LDMwMDI2LDMwMDI5LDMwMDMyLDMwMDMzLDMwMDM0LDMwMDM1LDMwMDM3LDMwMDM4LDMwMDM5LDMwMDQwLDMwMDQ1LDMwMDQ2LDMwMDQ3LDMwMDQ4LDMwMDQ5''@;'; put 'put ''LDMwMDUwLDMwMDUxLDMwMDUyLDMwMDU1LDMwMDU2LDMwMDU3LDMwMDU5LDMwMDYwLDMwMDYxLDMwMDYyLDMwMDYzLDMwMDY0LDMwMDY1LDMwMDY3LDMwMDY5LDMwMDcwLDMwMDcxLDMwMDc0LDMwMDc1LDMwMDc2LDMwMDc3LDMwMDc4LDMwMDgwLDMwMDgxLDMwMDgyLDMwMDg0LDMwMDg1LDMw''@;'; put 'put ''MDg3LDU3NzIwLDU3NzIxLDU3NzIyLDU3NzIzLDU3NzI0LDU3NzI1LDU3NzI2LDU3NzI3LDU3NzI4LDU3NzI5LDU3NzMwLDU3NzMxLDU3NzMyLDU3NzMzLDU3NzM0LDU3NzM1LDU3NzM2LDU3NzM3LDU3NzM4LDU3NzM5LDU3NzQwLDU3NzQxLDU3NzQyLDU3NzQzLDU3NzQ0LDU3NzQ1LDU3NzQ2''@;'; put 'put ''LDU3NzQ3LDU3NzQ4LDU3NzQ5LDU3NzUwLDU3NzUxLDU3NzUyLDU3NzUzLDU3NzU0LDU3NzU1LDU3NzU2LDU3NzU3LDU3NzU4LDU3NzU5LDU3NzYwLDU3NzYxLDU3NzYyLDU3NzYzLDU3NzY0LDU3NzY1LDU3NzY2LDU3NzY3LDU3NzY4LDU3NzY5LDU3NzcwLDU3NzcxLDU3NzcyLDU3NzczLDU3''@;'; put 'put ''Nzc0LDU3Nzc1LDU3Nzc2LDU3Nzc3LDU3Nzc4LDU3Nzc5LDU3NzgwLDU3NzgxLDU3NzgyLDU3NzgzLDU3Nzg0LDU3Nzg1LDU3Nzg2LDU3Nzg3LDU3Nzg4LDU3Nzg5LDU3NzkwLDU3NzkxLDU3NzkyLDU3NzkzLDU3Nzk0LDU3Nzk1LDU3Nzk2LDU3Nzk3LDU3Nzk4LDU3Nzk5LDU3ODAwLDU3ODAx''@;'; put 'put ''LDU3ODAyLDU3ODAzLDU3ODA0LDU3ODA1LDU3ODA2LDU3ODA3LDU3ODA4LDU3ODA5LDU3ODEwLDU3ODExLDU3ODEyLDU3ODEzLDMwMDg4LDMwMDg5LDMwMDkwLDMwMDkyLDMwMDkzLDMwMDk0LDMwMDk2LDMwMDk5LDMwMTAxLDMwMTA0LDMwMTA3LDMwMTA4LDMwMTEwLDMwMTE0LDMwMTE4LDMw''@;'; put 'put ''MTE5LDMwMTIwLDMwMTIxLDMwMTIyLDMwMTI1LDMwMTM0LDMwMTM1LDMwMTM4LDMwMTM5LDMwMTQzLDMwMTQ0LDMwMTQ1LDMwMTUwLDMwMTU1LDMwMTU2LDMwMTU4LDMwMTU5LDMwMTYwLDMwMTYxLDMwMTYzLDMwMTY3LDMwMTY5LDMwMTcwLDMwMTcyLDMwMTczLDMwMTc1LDMwMTc2LDMwMTc3''@;'; put 'put ''LDMwMTgxLDMwMTg1LDMwMTg4LDMwMTg5LDMwMTkwLDMwMTkxLDMwMTk0LDMwMTk1LDMwMTk3LDMwMTk4LDMwMTk5LDMwMjAwLDMwMjAyLDMwMjAzLDMwMjA1LDMwMjA2LDMwMjEwLDMwMjEyLDMwMjE0LDMwMjE1LDMwMjE2LDMwMjE3LDMwMjE5LDMwMjIxLDMwMjIyLDMwMjIzLDMwMjI1LDMw''@;'; put 'put ''MjI2LDMwMjI3LDMwMjI4LDMwMjMwLDMwMjM0LDMwMjM2LDMwMjM3LDMwMjM4LDMwMjQxLDMwMjQzLDMwMjQ3LDMwMjQ4LDMwMjUyLDMwMjU0LDMwMjU1LDMwMjU3LDMwMjU4LDMwMjYyLDMwMjYzLDMwMjY1LDMwMjY2LDMwMjY3LDMwMjY5LDMwMjczLDMwMjc0LDMwMjc2LDU3ODE0LDU3ODE1''@;'; put 'put ''LDU3ODE2LDU3ODE3LDU3ODE4LDU3ODE5LDU3ODIwLDU3ODIxLDU3ODIyLDU3ODIzLDU3ODI0LDU3ODI1LDU3ODI2LDU3ODI3LDU3ODI4LDU3ODI5LDU3ODMwLDU3ODMxLDU3ODMyLDU3ODMzLDU3ODM0LDU3ODM1LDU3ODM2LDU3ODM3LDU3ODM4LDU3ODM5LDU3ODQwLDU3ODQxLDU3ODQyLDU3''@;'; put 'put ''ODQzLDU3ODQ0LDU3ODQ1LDU3ODQ2LDU3ODQ3LDU3ODQ4LDU3ODQ5LDU3ODUwLDU3ODUxLDU3ODUyLDU3ODUzLDU3ODU0LDU3ODU1LDU3ODU2LDU3ODU3LDU3ODU4LDU3ODU5LDU3ODYwLDU3ODYxLDU3ODYyLDU3ODYzLDU3ODY0LDU3ODY1LDU3ODY2LDU3ODY3LDU3ODY4LDU3ODY5LDU3ODcw''@;'; put 'put ''LDU3ODcxLDU3ODcyLDU3ODczLDU3ODc0LDU3ODc1LDU3ODc2LDU3ODc3LDU3ODc4LDU3ODc5LDU3ODgwLDU3ODgxLDU3ODgyLDU3ODgzLDU3ODg0LDU3ODg1LDU3ODg2LDU3ODg3LDU3ODg4LDU3ODg5LDU3ODkwLDU3ODkxLDU3ODkyLDU3ODkzLDU3ODk0LDU3ODk1LDU3ODk2LDU3ODk3LDU3''@;'; put 'put ''ODk4LDU3ODk5LDU3OTAwLDU3OTAxLDU3OTAyLDU3OTAzLDU3OTA0LDU3OTA1LDU3OTA2LDU3OTA3LDMwMjc3LDMwMjc4LDMwMjc5LDMwMjgwLDMwMjgxLDMwMjgyLDMwMjgzLDMwMjg2LDMwMjg3LDMwMjg4LDMwMjg5LDMwMjkwLDMwMjkxLDMwMjkzLDMwMjk1LDMwMjk2LDMwMjk3LDMwMjk4''@;'; put 'put ''LDMwMjk5LDMwMzAxLDMwMzAzLDMwMzA0LDMwMzA1LDMwMzA2LDMwMzA4LDMwMzA5LDMwMzEwLDMwMzExLDMwMzEyLDMwMzEzLDMwMzE0LDMwMzE2LDMwMzE3LDMwMzE4LDMwMzIwLDMwMzIxLDMwMzIyLDMwMzIzLDMwMzI0LDMwMzI1LDMwMzI2LDMwMzI3LDMwMzI5LDMwMzMwLDMwMzMyLDMw''@;'; put 'put ''MzM1LDMwMzM2LDMwMzM3LDMwMzM5LDMwMzQxLDMwMzQ1LDMwMzQ2LDMwMzQ4LDMwMzQ5LDMwMzUxLDMwMzUyLDMwMzU0LDMwMzU2LDMwMzU3LDMwMzU5LDMwMzYwLDMwMzYyLDMwMzYzLDMwMzY0LDMwMzY1LDMwMzY2LDMwMzY3LDMwMzY4LDMwMzY5LDMwMzcwLDMwMzcxLDMwMzczLDMwMzc0''@;'; put 'put ''LDMwMzc1LDMwMzc2LDMwMzc3LDMwMzc4LDMwMzc5LDMwMzgwLDMwMzgxLDMwMzgzLDMwMzg0LDMwMzg3LDMwMzg5LDMwMzkwLDMwMzkxLDMwMzkyLDMwMzkzLDMwMzk0LDMwMzk1LDMwMzk2LDMwMzk3LDMwMzk4LDMwNDAwLDMwNDAxLDMwNDAzLDIxODM0LDM4NDYzLDIyNDY3LDI1Mzg0LDIx''@;'; put 'put ''NzEwLDIxNzY5LDIxNjk2LDMwMzUzLDMwMjg0LDM0MTA4LDMwNzAyLDMzNDA2LDMwODYxLDI5MjMzLDM4NTUyLDM4Nzk3LDI3Njg4LDIzNDMzLDIwNDc0LDI1MzUzLDI2MjYzLDIzNzM2LDMzMDE4LDI2Njk2LDMyOTQyLDI2MTE0LDMwNDE0LDIwOTg1LDI1OTQyLDI5MTAwLDMyNzUzLDM0OTQ4''@;'; put 'put ''LDIwNjU4LDIyODg1LDI1MDM0LDI4NTk1LDMzNDUzLDI1NDIwLDI1MTcwLDIxNDg1LDIxNTQzLDMxNDk0LDIwODQzLDMwMTE2LDI0MDUyLDI1MzAwLDM2Mjk5LDM4Nzc0LDI1MjI2LDMyNzkzLDIyMzY1LDM4NzEyLDMyNjEwLDI5MjQwLDMwMzMzLDI2NTc1LDMwMzM0LDI1NjcwLDIwMzM2LDM2''@;'; put 'put ''MTMzLDI1MzA4LDMxMjU1LDI2MDAxLDI5Njc3LDI1NjQ0LDI1MjAzLDMzMzI0LDM5MDQxLDI2NDk1LDI5MjU2LDI1MTk4LDI1MjkyLDIwMjc2LDI5OTIzLDIxMzIyLDIxMTUwLDMyNDU4LDM3MDMwLDI0MTEwLDI2NzU4LDI3MDM2LDMzMTUyLDMyNDY1LDI2ODM0LDMwOTE3LDM0NDQ0LDM4MjI1''@;'; put 'put ''LDIwNjIxLDM1ODc2LDMzNTAyLDMyOTkwLDIxMjUzLDM1MDkwLDIxMDkzLDMwNDA0LDMwNDA3LDMwNDA5LDMwNDExLDMwNDEyLDMwNDE5LDMwNDIxLDMwNDI1LDMwNDI2LDMwNDI4LDMwNDI5LDMwNDMwLDMwNDMyLDMwNDMzLDMwNDM0LDMwNDM1LDMwNDM2LDMwNDM4LDMwNDM5LDMwNDQwLDMw''@;'; put 'put ''NDQxLDMwNDQyLDMwNDQzLDMwNDQ0LDMwNDQ1LDMwNDQ4LDMwNDUxLDMwNDUzLDMwNDU0LDMwNDU1LDMwNDU4LDMwNDU5LDMwNDYxLDMwNDYzLDMwNDY0LDMwNDY2LDMwNDY3LDMwNDY5LDMwNDcwLDMwNDc0LDMwNDc2LDMwNDc4LDMwNDc5LDMwNDgwLDMwNDgxLDMwNDgyLDMwNDgzLDMwNDg0''@;'; put 'put ''LDMwNDg1LDMwNDg2LDMwNDg3LDMwNDg4LDMwNDkxLDMwNDkyLDMwNDkzLDMwNDk0LDMwNDk3LDMwNDk5LDMwNTAwLDMwNTAxLDMwNTAzLDMwNTA2LDMwNTA3LDMwNTA4LDMwNTEwLDMwNTEyLDMwNTEzLDMwNTE0LDMwNTE1LDMwNTE2LDMwNTIxLDMwNTIzLDMwNTI1LDMwNTI2LDMwNTI3LDMw''@;'; put 'put ''NTMwLDMwNTMyLDMwNTMzLDMwNTM0LDMwNTM2LDMwNTM3LDMwNTM4LDMwNTM5LDMwNTQwLDMwNTQxLDMwNTQyLDMwNTQzLDMwNTQ2LDMwNTQ3LDMwNTQ4LDMwNTQ5LDMwNTUwLDMwNTUxLDMwNTUyLDMwNTUzLDMwNTU2LDM0MTgwLDM4NjQ5LDIwNDQ1LDIyNTYxLDM5MjgxLDIzNDUzLDI1MjY1''@;'; put 'put ''LDI1MjUzLDI2MjkyLDM1OTYxLDQwMDc3LDI5MTkwLDI2NDc5LDMwODY1LDI0NzU0LDIxMzI5LDIxMjcxLDM2NzQ0LDMyOTcyLDM2MTI1LDM4MDQ5LDIwNDkzLDI5Mzg0LDIyNzkxLDI0ODExLDI4OTUzLDM0OTg3LDIyODY4LDMzNTE5LDI2NDEyLDMxNTI4LDIzODQ5LDMyNTAzLDI5OTk3LDI3''@;'; put 'put ''ODkzLDM2NDU0LDM2ODU2LDM2OTI0LDQwNzYzLDI3NjA0LDM3MTQ1LDMxNTA4LDI0NDQ0LDMwODg3LDM0MDA2LDM0MTA5LDI3NjA1LDI3NjA5LDI3NjA2LDI0MDY1LDI0MTk5LDMwMjAxLDM4MzgxLDI1OTQ5LDI0MzMwLDI0NTE3LDM2NzY3LDIyNzIxLDMzMjE4LDM2OTkxLDM4NDkxLDM4ODI5''@;'; put 'put ''LDM2NzkzLDMyNTM0LDM2MTQwLDI1MTUzLDIwNDE1LDIxNDY0LDIxMzQyLDM2Nzc2LDM2Nzc3LDM2Nzc5LDM2OTQxLDI2NjMxLDI0NDI2LDMzMTc2LDM0OTIwLDQwMTUwLDI0OTcxLDIxMDM1LDMwMjUwLDI0NDI4LDI1OTk2LDI4NjI2LDI4MzkyLDIzNDg2LDI1NjcyLDIwODUzLDIwOTEyLDI2''@;'; put 'put ''NTY0LDE5OTkzLDMxMTc3LDM5MjkyLDI4ODUxLDMwNTU3LDMwNTU4LDMwNTU5LDMwNTYwLDMwNTY0LDMwNTY3LDMwNTY5LDMwNTcwLDMwNTczLDMwNTc0LDMwNTc1LDMwNTc2LDMwNTc3LDMwNTc4LDMwNTc5LDMwNTgwLDMwNTgxLDMwNTgyLDMwNTgzLDMwNTg0LDMwNTg2LDMwNTg3LDMwNTg4''@;'; put 'put ''LDMwNTkzLDMwNTk0LDMwNTk1LDMwNTk4LDMwNTk5LDMwNjAwLDMwNjAxLDMwNjAyLDMwNjAzLDMwNjA3LDMwNjA4LDMwNjExLDMwNjEyLDMwNjEzLDMwNjE0LDMwNjE1LDMwNjE2LDMwNjE3LDMwNjE4LDMwNjE5LDMwNjIwLDMwNjIxLDMwNjIyLDMwNjI1LDMwNjI3LDMwNjI4LDMwNjMwLDMw''@;'; put 'put ''NjMyLDMwNjM1LDMwNjM3LDMwNjM4LDMwNjM5LDMwNjQxLDMwNjQyLDMwNjQ0LDMwNjQ2LDMwNjQ3LDMwNjQ4LDMwNjQ5LDMwNjUwLDMwNjUyLDMwNjU0LDMwNjU2LDMwNjU3LDMwNjU4LDMwNjU5LDMwNjYwLDMwNjYxLDMwNjYyLDMwNjYzLDMwNjY0LDMwNjY1LDMwNjY2LDMwNjY3LDMwNjY4''@;'; put 'put ''LDMwNjcwLDMwNjcxLDMwNjcyLDMwNjczLDMwNjc0LDMwNjc1LDMwNjc2LDMwNjc3LDMwNjc4LDMwNjgwLDMwNjgxLDMwNjgyLDMwNjg1LDMwNjg2LDMwNjg3LDMwNjg4LDMwNjg5LDMwNjkyLDMwMTQ5LDI0MTgyLDI5NjI3LDMzNzYwLDI1NzczLDI1MzIwLDM4MDY5LDI3ODc0LDIxMzM4LDIx''@;'; put 'put ''MTg3LDI1NjE1LDM4MDgyLDMxNjM2LDIwMjcxLDI0MDkxLDMzMzM0LDMzMDQ2LDMzMTYyLDI4MTk2LDI3ODUwLDM5NTM5LDI1NDI5LDIxMzQwLDIxNzU0LDM0OTE3LDIyNDk2LDE5OTgxLDI0MDY3LDI3NDkzLDMxODA3LDM3MDk2LDI0NTk4LDI1ODMwLDI5NDY4LDM1MDA5LDI2NDQ4LDI1MTY1''@;'; put 'put ''LDM2MTMwLDMwNTcyLDM2MzkzLDM3MzE5LDI0NDI1LDMzNzU2LDM0MDgxLDM5MTg0LDIxNDQyLDM0NDUzLDI3NTMxLDI0ODEzLDI0ODA4LDI4Nzk5LDMzNDg1LDMzMzI5LDIwMTc5LDI3ODE1LDM0MjU1LDI1ODA1LDMxOTYxLDI3MTMzLDI2MzYxLDMzNjA5LDIxMzk3LDMxNTc0LDIwMzkxLDIw''@;'; put 'put ''ODc2LDI3OTc5LDIzNjE4LDM2NDYxLDI1NTU0LDIxNDQ5LDMzNTgwLDMzNTkwLDI2NTk3LDMwOTAwLDI1NjYxLDIzNTE5LDIzNzAwLDI0MDQ2LDM1ODE1LDI1Mjg2LDI2NjEyLDM1OTYyLDI1NjAwLDI1NTMwLDM0NjMzLDM5MzA3LDM1ODYzLDMyNTQ0LDM4MTMwLDIwMTM1LDM4NDE2LDM5MDc2''@;'; put 'put ''LDI2MTI0LDI5NDYyLDMwNjk0LDMwNjk2LDMwNjk4LDMwNzAzLDMwNzA0LDMwNzA1LDMwNzA2LDMwNzA4LDMwNzA5LDMwNzExLDMwNzEzLDMwNzE0LDMwNzE1LDMwNzE2LDMwNzIzLDMwNzI0LDMwNzI1LDMwNzI2LDMwNzI3LDMwNzI4LDMwNzMwLDMwNzMxLDMwNzM0LDMwNzM1LDMwNzM2LDMw''@;'; put 'put ''NzM5LDMwNzQxLDMwNzQ1LDMwNzQ3LDMwNzUwLDMwNzUyLDMwNzUzLDMwNzU0LDMwNzU2LDMwNzYwLDMwNzYyLDMwNzYzLDMwNzY2LDMwNzY3LDMwNzY5LDMwNzcwLDMwNzcxLDMwNzczLDMwNzc0LDMwNzgxLDMwNzgzLDMwNzg1LDMwNzg2LDMwNzg3LDMwNzg4LDMwNzkwLDMwNzkyLDMwNzkz''@;'; put 'put ''LDMwNzk0LDMwNzk1LDMwNzk3LDMwNzk5LDMwODAxLDMwODAzLDMwODA0LDMwODA4LDMwODA5LDMwODEwLDMwODExLDMwODEyLDMwODE0LDMwODE1LDMwODE2LDMwODE3LDMwODE4LDMwODE5LDMwODIwLDMwODIxLDMwODIyLDMwODIzLDMwODI0LDMwODI1LDMwODMxLDMwODMyLDMwODMzLDMw''@;'; put 'put ''ODM0LDMwODM1LDMwODM2LDMwODM3LDMwODM4LDMwODQwLDMwODQxLDMwODQyLDMwODQzLDMwODQ1LDMwODQ2LDMwODQ3LDMwODQ4LDMwODQ5LDMwODUwLDMwODUxLDIyMzMwLDIzNTgxLDI0MTIwLDM4MjcxLDIwNjA3LDMyOTI4LDIxMzc4LDI1OTUwLDMwMDIxLDIxODA5LDIwNTEzLDM2MjI5''@;'; put 'put ''LDI1MjIwLDM4MDQ2LDI2Mzk3LDIyMDY2LDI4NTI2LDI0MDM0LDIxNTU3LDI4ODE4LDM2NzEwLDI1MTk5LDI1NzY0LDI1NTA3LDI0NDQzLDI4NTUyLDM3MTA4LDMzMjUxLDM2Nzg0LDIzNTc2LDI2MjE2LDI0NTYxLDI3Nzg1LDM4NDcyLDM2MjI1LDM0OTI0LDI1NzQ1LDMxMjE2LDIyNDc4LDI3''@;'; put 'put ''MjI1LDI1MTA0LDIxNTc2LDIwMDU2LDMxMjQzLDI0ODA5LDI4NTQ4LDM1ODAyLDI1MjE1LDM2ODk0LDM5NTYzLDMxMjA0LDIxNTA3LDMwMTk2LDI1MzQ1LDIxMjczLDI3NzQ0LDM2ODMxLDI0MzQ3LDM5NTM2LDMyODI3LDQwODMxLDIwMzYwLDIzNjEwLDM2MTk2LDMyNzA5LDI2MDIxLDI4ODYx''@;'; put 'put ''LDIwODA1LDIwOTE0LDM0NDExLDIzODE1LDIzNDU2LDI1Mjc3LDM3MjI4LDMwMDY4LDM2MzY0LDMxMjY0LDI0ODMzLDMxNjA5LDIwMTY3LDMyNTA0LDMwNTk3LDE5OTg1LDMzMjYxLDIxMDIxLDIwOTg2LDI3MjQ5LDIxNDE2LDM2NDg3LDM4MTQ4LDM4NjA3LDI4MzUzLDM4NTAwLDI2OTcwLDMw''@;'; put 'put ''ODUyLDMwODUzLDMwODU0LDMwODU2LDMwODU4LDMwODU5LDMwODYzLDMwODY0LDMwODY2LDMwODY4LDMwODY5LDMwODcwLDMwODczLDMwODc3LDMwODc4LDMwODgwLDMwODgyLDMwODg0LDMwODg2LDMwODg4LDMwODg5LDMwODkwLDMwODkxLDMwODkyLDMwODkzLDMwODk0LDMwODk1LDMwOTAx''@;'; put 'put ''LDMwOTAyLDMwOTAzLDMwOTA0LDMwOTA2LDMwOTA3LDMwOTA4LDMwOTA5LDMwOTExLDMwOTEyLDMwOTE0LDMwOTE1LDMwOTE2LDMwOTE4LDMwOTE5LDMwOTIwLDMwOTI0LDMwOTI1LDMwOTI2LDMwOTI3LDMwOTI5LDMwOTMwLDMwOTMxLDMwOTM0LDMwOTM1LDMwOTM2LDMwOTM4LDMwOTM5LDMw''@;'; put 'put ''OTQwLDMwOTQxLDMwOTQyLDMwOTQzLDMwOTQ0LDMwOTQ1LDMwOTQ2LDMwOTQ3LDMwOTQ4LDMwOTQ5LDMwOTUwLDMwOTUxLDMwOTUzLDMwOTU0LDMwOTU1LDMwOTU3LDMwOTU4LDMwOTU5LDMwOTYwLDMwOTYxLDMwOTYzLDMwOTY1LDMwOTY2LDMwOTY4LDMwOTY5LDMwOTcxLDMwOTcyLDMwOTcz''@;'; put 'put ''LDMwOTc0LDMwOTc1LDMwOTc2LDMwOTc4LDMwOTc5LDMwOTgwLDMwOTgyLDMwOTgzLDMwOTg0LDMwOTg1LDMwOTg2LDMwOTg3LDMwOTg4LDMwNzg0LDIwNjQ4LDMwNjc5LDI1NjE2LDM1MzAyLDIyNzg4LDI1NTcxLDI0MDI5LDMxMzU5LDI2OTQxLDIwMjU2LDMzMzM3LDIxOTEyLDIwMDE4LDMw''@;'; put 'put ''MTI2LDMxMzgzLDI0MTYyLDI0MjAyLDM4MzgzLDIxMDE5LDIxNTYxLDI4ODEwLDI1NDYyLDM4MTgwLDIyNDAyLDI2MTQ5LDI2OTQzLDM3MjU1LDIxNzY3LDI4MTQ3LDMyNDMxLDM0ODUwLDI1MTM5LDMyNDk2LDMwMTMzLDMzNTc2LDMwOTEzLDM4NjA0LDM2NzY2LDI0OTA0LDI5OTQzLDM1Nzg5''@;'; put 'put ''LDI3NDkyLDIxMDUwLDM2MTc2LDI3NDI1LDMyODc0LDMzOTA1LDIyMjU3LDIxMjU0LDIwMTc0LDE5OTk1LDIwOTQ1LDMxODk1LDM3MjU5LDMxNzUxLDIwNDE5LDM2NDc5LDMxNzEzLDMxMzg4LDI1NzAzLDIzODI4LDIwNjUyLDMzMDMwLDMwMjA5LDMxOTI5LDI4MTQwLDMyNzM2LDI2NDQ5LDIz''@;'; put 'put ''Mzg0LDIzNTQ0LDMwOTIzLDI1Nzc0LDI1NjE5LDI1NTE0LDI1Mzg3LDM4MTY5LDI1NjQ1LDM2Nzk4LDMxNTcyLDMwMjQ5LDI1MTcxLDIyODIzLDIxNTc0LDI3NTEzLDIwNjQzLDI1MTQwLDI0MTAyLDI3NTI2LDIwMTk1LDM2MTUxLDM0OTU1LDI0NDUzLDM2OTEwLDMwOTg5LDMwOTkwLDMwOTkx''@;'; put 'put ''LDMwOTkyLDMwOTkzLDMwOTk0LDMwOTk2LDMwOTk3LDMwOTk4LDMwOTk5LDMxZTMsMzEwMDEsMzEwMDIsMzEwMDMsMzEwMDQsMzEwMDUsMzEwMDcsMzEwMDgsMzEwMDksMzEwMTAsMzEwMTEsMzEwMTMsMzEwMTQsMzEwMTUsMzEwMTYsMzEwMTcsMzEwMTgsMzEwMTksMzEwMjAsMzEwMjEsMzEw''@;'; put 'put ''MjIsMzEwMjMsMzEwMjQsMzEwMjUsMzEwMjYsMzEwMjcsMzEwMjksMzEwMzAsMzEwMzEsMzEwMzIsMzEwMzMsMzEwMzcsMzEwMzksMzEwNDIsMzEwNDMsMzEwNDQsMzEwNDUsMzEwNDcsMzEwNTAsMzEwNTEsMzEwNTIsMzEwNTMsMzEwNTQsMzEwNTUsMzEwNTYsMzEwNTcsMzEwNTgsMzEwNjAs''@;'; put 'put ''MzEwNjEsMzEwNjQsMzEwNjUsMzEwNzMsMzEwNzUsMzEwNzYsMzEwNzgsMzEwODEsMzEwODIsMzEwODMsMzEwODQsMzEwODYsMzEwODgsMzEwODksMzEwOTAsMzEwOTEsMzEwOTIsMzEwOTMsMzEwOTQsMzEwOTcsMzEwOTksMzExMDAsMzExMDEsMzExMDIsMzExMDMsMzExMDYsMzExMDcsMzEx''@;'; put 'put ''MTAsMzExMTEsMzExMTIsMzExMTMsMzExMTUsMzExMTYsMzExMTcsMzExMTgsMzExMjAsMzExMjEsMzExMjIsMjQ2MDgsMzI4MjksMjUyODUsMjAwMjUsMjEzMzMsMzcxMTIsMjU1MjgsMzI5NjYsMjYwODYsMjc2OTQsMjAyOTQsMjQ4MTQsMjgxMjksMzU4MDYsMjQzNzcsMzQ1MDcsMjQ0MDMs''@;'; put 'put ''MjUzNzcsMjA4MjYsMzM2MzMsMjY3MjMsMjA5OTIsMjU0NDMsMzY0MjQsMjA0OTgsMjM3MDcsMzEwOTUsMjM1NDgsMjEwNDAsMzEyOTEsMjQ3NjQsMzY5NDcsMzA0MjMsMjQ1MDMsMjQ0NzEsMzAzNDAsMzY0NjAsMjg3ODMsMzAzMzEsMzE1NjEsMzA2MzQsMjA5NzksMzcwMTEsMjI1NjQsMjAz''@;'; put 'put ''MDIsMjg0MDQsMzY4NDIsMjU5MzIsMzE1MTUsMjkzODAsMjgwNjgsMzI3MzUsMjMyNjUsMjUyNjksMjQyMTMsMjIzMjAsMzM5MjIsMzE1MzIsMjQwOTMsMjQzNTEsMzY4ODIsMzI1MzIsMzkwNzIsMjU0NzQsMjgzNTksMzA4NzIsMjg4NTcsMjA4NTYsMzg3NDcsMjI0NDMsMzAwMDUsMjAyOTEs''@;'; put 'put ''MzAwMDgsMjQyMTUsMjQ4MDYsMjI4ODAsMjgwOTYsMjc1ODMsMzA4NTcsMjE1MDAsMzg2MTMsMjA5MzksMjA5OTMsMjU0ODEsMjE1MTQsMzgwMzUsMzU4NDMsMzYzMDAsMjkyNDEsMzA4NzksMzQ2NzgsMzY4NDUsMzU4NTMsMjE0NzIsMzExMjMsMzExMjQsMzExMjUsMzExMjYsMzExMjcsMzEx''@;'; put 'put ''MjgsMzExMjksMzExMzEsMzExMzIsMzExMzMsMzExMzQsMzExMzUsMzExMzYsMzExMzcsMzExMzgsMzExMzksMzExNDAsMzExNDEsMzExNDIsMzExNDQsMzExNDUsMzExNDYsMzExNDcsMzExNDgsMzExNDksMzExNTAsMzExNTEsMzExNTIsMzExNTMsMzExNTQsMzExNTYsMzExNTcsMzExNTgs''@;'; put 'put ''MzExNTksMzExNjAsMzExNjQsMzExNjcsMzExNzAsMzExNzIsMzExNzMsMzExNzUsMzExNzYsMzExNzgsMzExODAsMzExODIsMzExODMsMzExODQsMzExODcsMzExODgsMzExOTAsMzExOTEsMzExOTMsMzExOTQsMzExOTUsMzExOTYsMzExOTcsMzExOTgsMzEyMDAsMzEyMDEsMzEyMDIsMzEy''@;'; put 'put ''MDUsMzEyMDgsMzEyMTAsMzEyMTIsMzEyMTQsMzEyMTcsMzEyMTgsMzEyMTksMzEyMjAsMzEyMjEsMzEyMjIsMzEyMjMsMzEyMjUsMzEyMjYsMzEyMjgsMzEyMzAsMzEyMzEsMzEyMzMsMzEyMzYsMzEyMzcsMzEyMzksMzEyNDAsMzEyNDEsMzEyNDIsMzEyNDQsMzEyNDcsMzEyNDgsMzEyNDks''@;'; put 'put ''MzEyNTAsMzEyNTEsMzEyNTMsMzEyNTQsMzEyNTYsMzEyNTcsMzEyNTksMzEyNjAsMTk5NjksMzA0NDcsMjE0ODYsMzgwMjUsMzkwMzAsNDA3MTgsMzgxODksMjM0NTAsMzU3NDYsMjAwMDIsMTk5OTYsMjA5MDgsMzM4OTEsMjUwMjYsMjExNjAsMjY2MzUsMjAzNzUsMjQ2ODMsMjA5MjMsMjc5''@;'; put 'put ''MzQsMjA4MjgsMjUyMzgsMjYwMDcsMzg0OTcsMzU5MTAsMzY4ODcsMzAxNjgsMzcxMTcsMzA1NjMsMjc2MDIsMjkzMjIsMjk0MjAsMzU4MzUsMjI1ODEsMzA1ODUsMzYxNzIsMjY0NjAsMzgyMDgsMzI5MjIsMjQyMzAsMjgxOTMsMjI5MzAsMzE0NzEsMzA3MDEsMzgyMDMsMjc1NzMsMjYwMjks''@;'; put 'put ''MzI1MjYsMjI1MzQsMjA4MTcsMzg0MzEsMjM1NDUsMjI2OTcsMjE1NDQsMzY0NjYsMjU5NTgsMzkwMzksMjIyNDQsMzgwNDUsMzA0NjIsMzY5MjksMjU0NzksMjE3MDIsMjI4MTAsMjI4NDIsMjI0MjcsMzY1MzAsMjY0MjEsMzYzNDYsMzMzMzMsMjEwNTcsMjQ4MTYsMjI1NDksMzQ1NTgsMjM3''@;'; put 'put ''ODQsNDA1MTcsMjA0MjAsMzkwNjksMzU3NjksMjMwNzcsMjQ2OTQsMjEzODAsMjUyMTIsMzY5NDMsMzcxMjIsMzkyOTUsMjQ2ODEsMzI3ODAsMjA3OTksMzI4MTksMjM1NzIsMzkyODUsMjc5NTMsMjAxMDgsMzEyNjEsMzEyNjMsMzEyNjUsMzEyNjYsMzEyNjgsMzEyNjksMzEyNzAsMzEyNzEs''@;'; put 'put ''MzEyNzIsMzEyNzMsMzEyNzQsMzEyNzUsMzEyNzYsMzEyNzcsMzEyNzgsMzEyNzksMzEyODAsMzEyODEsMzEyODIsMzEyODQsMzEyODUsMzEyODYsMzEyODgsMzEyOTAsMzEyOTQsMzEyOTYsMzEyOTcsMzEyOTgsMzEyOTksMzEzMDAsMzEzMDEsMzEzMDMsMzEzMDQsMzEzMDUsMzEzMDYsMzEz''@;'; put 'put ''MDcsMzEzMDgsMzEzMDksMzEzMTAsMzEzMTEsMzEzMTIsMzEzMTQsMzEzMTUsMzEzMTYsMzEzMTcsMzEzMTgsMzEzMjAsMzEzMjEsMzEzMjIsMzEzMjMsMzEzMjQsMzEzMjUsMzEzMjYsMzEzMjcsMzEzMjgsMzEzMjksMzEzMzAsMzEzMzEsMzEzMzIsMzEzMzMsMzEzMzQsMzEzMzUsMzEzMzYs''@;'; put 'put ''MzEzMzcsMzEzMzgsMzEzMzksMzEzNDAsMzEzNDEsMzEzNDIsMzEzNDMsMzEzNDUsMzEzNDYsMzEzNDcsMzEzNDksMzEzNTUsMzEzNTYsMzEzNTcsMzEzNTgsMzEzNjIsMzEzNjUsMzEzNjcsMzEzNjksMzEzNzAsMzEzNzEsMzEzNzIsMzEzNzQsMzEzNzUsMzEzNzYsMzEzNzksMzEzODAsMzEz''@;'; put 'put ''ODUsMzEzODYsMzEzODcsMzEzOTAsMzEzOTMsMzEzOTQsMzYxNDQsMjE0NTcsMzI2MDIsMzE1NjcsMjAyNDAsMjAwNDcsMzg0MDAsMjc4NjEsMjk2NDgsMzQyODEsMjQwNzAsMzAwNTgsMzI3NjMsMjcxNDYsMzA3MTgsMzgwMzQsMzIzMjEsMjA5NjEsMjg5MDIsMjE0NTMsMzY4MjAsMzM1Mzks''@;'; put 'put ''MzYxMzcsMjkzNTksMzkyNzcsMjc4NjcsMjIzNDYsMzM0NTksMjYwNDEsMzI5MzgsMjUxNTEsMzg0NTAsMjI5NTIsMjAyMjMsMzU3NzUsMzI0NDIsMjU5MTgsMzM3NzgsMzg3NTAsMjE4NTcsMzkxMzQsMzI5MzMsMjEyOTAsMzU4MzcsMjE1MzYsMzI5NTQsMjQyMjMsMjc4MzIsMzYxNTMsMzM0''@;'; put 'put ''NTIsMzcyMTAsMjE1NDUsMjc2NzUsMjA5OTgsMzI0MzksMjIzNjcsMjg5NTQsMjc3NzQsMzE4ODEsMjI4NTksMjAyMjEsMjQ1NzUsMjQ4NjgsMzE5MTQsMjAwMTYsMjM1NTMsMjY1MzksMzQ1NjIsMjM3OTIsMzgxNTUsMzkxMTgsMzAxMjcsMjg5MjUsMzY4OTgsMjA5MTEsMzI1NDEsMzU3NzMs''@;'; put 'put ''MjI4NTcsMjA5NjQsMjAzMTUsMjE1NDIsMjI4MjcsMjU5NzUsMzI5MzIsMjM0MTMsMjUyMDYsMjUyODIsMzY3NTIsMjQxMzMsMjc2NzksMzE1MjYsMjAyMzksMjA0NDAsMjYzODEsMzEzOTUsMzEzOTYsMzEzOTksMzE0MDEsMzE0MDIsMzE0MDMsMzE0MDYsMzE0MDcsMzE0MDgsMzE0MDksMzE0''@;'; put 'put ''MTAsMzE0MTIsMzE0MTMsMzE0MTQsMzE0MTUsMzE0MTYsMzE0MTcsMzE0MTgsMzE0MTksMzE0MjAsMzE0MjEsMzE0MjIsMzE0MjQsMzE0MjUsMzE0MjYsMzE0MjcsMzE0MjgsMzE0MjksMzE0MzAsMzE0MzEsMzE0MzIsMzE0MzMsMzE0MzQsMzE0MzYsMzE0MzcsMzE0MzgsMzE0MzksMzE0NDAs''@;'; put 'put ''MzE0NDEsMzE0NDIsMzE0NDMsMzE0NDQsMzE0NDUsMzE0NDcsMzE0NDgsMzE0NTAsMzE0NTEsMzE0NTIsMzE0NTMsMzE0NTcsMzE0NTgsMzE0NjAsMzE0NjMsMzE0NjQsMzE0NjUsMzE0NjYsMzE0NjcsMzE0NjgsMzE0NzAsMzE0NzIsMzE0NzMsMzE0NzQsMzE0NzUsMzE0NzYsMzE0NzcsMzE0''@;'; put 'put ''NzgsMzE0NzksMzE0ODAsMzE0ODMsMzE0ODQsMzE0ODYsMzE0ODgsMzE0ODksMzE0OTAsMzE0OTMsMzE0OTUsMzE0OTcsMzE1MDAsMzE1MDEsMzE1MDIsMzE1MDQsMzE1MDYsMzE1MDcsMzE1MTAsMzE1MTEsMzE1MTIsMzE1MTQsMzE1MTYsMzE1MTcsMzE1MTksMzE1MjEsMzE1MjIsMzE1MjMs''@;'; put 'put ''MzE1MjcsMzE1MjksMzE1MzMsMjgwMTQsMjgwNzQsMzExMTksMzQ5OTMsMjQzNDMsMjk5OTUsMjUyNDIsMzY3NDEsMjA0NjMsMzczNDAsMjYwMjMsMzMwNzEsMzMxMDUsMjQyMjAsMzMxMDQsMzYyMTIsMjExMDMsMzUyMDYsMzYxNzEsMjI3OTcsMjA2MTMsMjAxODQsMzg0MjgsMjkyMzgsMzMx''@;'; put 'put ''NDUsMzYxMjcsMjM1MDAsMzU3NDcsMzg0NjgsMjI5MTksMzI1MzgsMjE2NDgsMjIxMzQsMjIwMzAsMzU4MTMsMjU5MTMsMjcwMTAsMzgwNDEsMzA0MjIsMjgyOTcsMjQxNzgsMjk5NzYsMjY0MzgsMjY1NzcsMzE0ODcsMzI5MjUsMzYyMTQsMjQ4NjMsMzExNzQsMjU5NTQsMzYxOTUsMjA4NzIs''@;'; put 'put ''MjEwMTgsMzgwNTAsMzI1NjgsMzI5MjMsMzI0MzQsMjM3MDMsMjgyMDcsMjY0NjQsMzE3MDUsMzAzNDcsMzk2NDAsMzMxNjcsMzI2NjAsMzE5NTcsMjU2MzAsMzgyMjQsMzEyOTUsMjE1NzgsMjE3MzMsMjc0NjgsMjU2MDEsMjUwOTYsNDA1MDksMzMwMTEsMzAxMDUsMjExMDYsMzg3NjEsMzM4''@;'; put 'put ''ODMsMjY2ODQsMzQ1MzIsMzg0MDEsMzg1NDgsMzgxMjQsMjAwMTAsMjE1MDgsMzI0NzMsMjY2ODEsMzYzMTksMzI3ODksMjYzNTYsMjQyMTgsMzI2OTcsMzE1MzUsMzE1MzYsMzE1MzgsMzE1NDAsMzE1NDEsMzE1NDIsMzE1NDMsMzE1NDUsMzE1NDcsMzE1NDksMzE1NTEsMzE1NTIsMzE1NTMs''@;'; put 'put ''MzE1NTQsMzE1NTUsMzE1NTYsMzE1NTgsMzE1NjAsMzE1NjIsMzE1NjUsMzE1NjYsMzE1NzEsMzE1NzMsMzE1NzUsMzE1NzcsMzE1ODAsMzE1ODIsMzE1ODMsMzE1ODUsMzE1ODcsMzE1ODgsMzE1ODksMzE1OTAsMzE1OTEsMzE1OTIsMzE1OTMsMzE1OTQsMzE1OTUsMzE1OTYsMzE1OTcsMzE1''@;'; put 'put ''OTksMzE2MDAsMzE2MDMsMzE2MDQsMzE2MDYsMzE2MDgsMzE2MTAsMzE2MTIsMzE2MTMsMzE2MTUsMzE2MTcsMzE2MTgsMzE2MTksMzE2MjAsMzE2MjIsMzE2MjMsMzE2MjQsMzE2MjUsMzE2MjYsMzE2MjcsMzE2MjgsMzE2MzAsMzE2MzEsMzE2MzMsMzE2MzQsMzE2MzUsMzE2MzgsMzE2NDAs''@;'; put 'put ''MzE2NDEsMzE2NDIsMzE2NDMsMzE2NDYsMzE2NDcsMzE2NDgsMzE2NTEsMzE2NTIsMzE2NTMsMzE2NjIsMzE2NjMsMzE2NjQsMzE2NjYsMzE2NjcsMzE2NjksMzE2NzAsMzE2NzEsMzE2NzMsMzE2NzQsMzE2NzUsMzE2NzYsMzE2NzcsMzE2NzgsMzE2NzksMzE2ODAsMzE2ODIsMzE2ODMsMzE2''@;'; put 'put ''ODQsMjI0NjYsMzI4MzEsMjY3NzUsMjQwMzcsMjU5MTUsMjExNTEsMjQ2ODUsNDA4NTgsMjAzNzksMzY1MjQsMjA4NDQsMjM0NjcsMjQzMzksMjQwNDEsMjc3NDIsMjUzMjksMzYxMjksMjA4NDksMzgwNTcsMjEyNDYsMjc4MDcsMzM1MDMsMjkzOTksMjI0MzQsMjY1MDAsMzYxNDEsMjI4MTUs''@;'; put 'put ''MzY3NjQsMzM3MzUsMjE2NTMsMzE2MjksMjAyNzIsMjc4MzcsMjMzOTYsMjI5OTMsNDA3MjMsMjE0NzYsMzQ1MDYsMzk1OTIsMzU4OTUsMzI5MjksMjU5MjUsMzkwMzgsMjIyNjYsMzg1OTksMjEwMzgsMjk5MTYsMjEwNzIsMjM1MjEsMjUzNDYsMzUwNzQsMjAwNTQsMjUyOTYsMjQ2MTgsMjY4''@;'; put 'put ''NzQsMjA4NTEsMjM0NDgsMjA4OTYsMzUyNjYsMzE2NDksMzkzMDIsMzI1OTIsMjQ4MTUsMjg3NDgsMzYxNDMsMjA4MDksMjQxOTEsMzY4OTEsMjk4MDgsMzUyNjgsMjIzMTcsMzA3ODksMjQ0MDIsNDA4NjMsMzgzOTQsMzY3MTIsMzk3NDAsMzU4MDksMzAzMjgsMjY2OTAsMjY1ODgsMzYzMzAs''@;'; put 'put ''MzYxNDksMjEwNTMsMzY3NDYsMjgzNzgsMjY4MjksMzgxNDksMzcxMDEsMjIyNjksMjY1MjQsMzUwNjUsMzY4MDcsMjE3MDQsMzE2ODUsMzE2ODgsMzE2ODksMzE2OTAsMzE2OTEsMzE2OTMsMzE2OTQsMzE2OTUsMzE2OTYsMzE2OTgsMzE3MDAsMzE3MDEsMzE3MDIsMzE3MDMsMzE3MDQsMzE3''@;'; put 'put ''MDcsMzE3MDgsMzE3MTAsMzE3MTEsMzE3MTIsMzE3MTQsMzE3MTUsMzE3MTYsMzE3MTksMzE3MjAsMzE3MjEsMzE3MjMsMzE3MjQsMzE3MjUsMzE3MjcsMzE3MjgsMzE3MzAsMzE3MzEsMzE3MzIsMzE3MzMsMzE3MzQsMzE3MzYsMzE3MzcsMzE3MzgsMzE3MzksMzE3NDEsMzE3NDMsMzE3NDQs''@;'; put 'put ''MzE3NDUsMzE3NDYsMzE3NDcsMzE3NDgsMzE3NDksMzE3NTAsMzE3NTIsMzE3NTMsMzE3NTQsMzE3NTcsMzE3NTgsMzE3NjAsMzE3NjEsMzE3NjIsMzE3NjMsMzE3NjQsMzE3NjUsMzE3NjcsMzE3NjgsMzE3NjksMzE3NzAsMzE3NzEsMzE3NzIsMzE3NzMsMzE3NzQsMzE3NzYsMzE3NzcsMzE3''@;'; put 'put ''NzgsMzE3NzksMzE3ODAsMzE3ODEsMzE3ODQsMzE3ODUsMzE3ODcsMzE3ODgsMzE3ODksMzE3OTAsMzE3OTEsMzE3OTIsMzE3OTMsMzE3OTQsMzE3OTUsMzE3OTYsMzE3OTcsMzE3OTgsMzE3OTksMzE4MDEsMzE4MDIsMzE4MDMsMzE4MDQsMzE4MDUsMzE4MDYsMzE4MTAsMzk2MDgsMjM0MDEs''@;'; put 'put ''MjgwMjMsMjc2ODYsMjAxMzMsMjM0NzUsMzk1NTksMzcyMTksMjVlMywzNzAzOSwzODg4OSwyMTU0NywyODA4NSwyMzUwNiwyMDk4OSwyMTg5OCwzMjU5NywzMjc1MiwyNTc4OCwyNTQyMSwyNjA5NywyNTAyMiwyNDcxNywyODkzOCwyNzczNSwyNzcyMSwyMjgzMSwyNjQ3NywzMzMyMiwyMjc0''@;'; put 'put ''MSwyMjE1OCwzNTk0NiwyNzYyNywzNzA4NSwyMjkwOSwzMjc5MSwyMTQ5NSwyODAwOSwyMTYyMSwyMTkxNywzMzY1NSwzMzc0MywyNjY4MCwzMTE2NiwyMTY0NCwyMDMwOSwyMTUxMiwzMDQxOCwzNTk3NywzODQwMiwyNzgyNywyODA4OCwzNjIwMywzNTA4OCw0MDU0OCwzNjE1NCwyMjA3OSw0''@;'; put 'put ''MDY1NywzMDE2NSwyNDQ1NiwyOTQwOCwyNDY4MCwyMTc1NiwyMDEzNiwyNzE3OCwzNDkxMywyNDY1OCwzNjcyMCwyMTcwMCwyODg4OCwzNDQyNSw0MDUxMSwyNzk0NiwyMzQzOSwyNDM0NCwzMjQxOCwyMTg5NywyMDM5OSwyOTQ5MiwyMTU2NCwyMTQwMiwyMDUwNSwyMTUxOCwyMTYyOCwyMDA0''@;'; put 'put ''NiwyNDU3MywyOTc4NiwyMjc3NCwzMzg5OSwzMjk5MywzNDY3NiwyOTM5MiwzMTk0NiwyODI0NiwzMTgxMSwzMTgxMiwzMTgxMywzMTgxNCwzMTgxNSwzMTgxNiwzMTgxNywzMTgxOCwzMTgxOSwzMTgyMCwzMTgyMiwzMTgyMywzMTgyNCwzMTgyNSwzMTgyNiwzMTgyNywzMTgyOCwzMTgyOSwz''@;'; put 'put ''MTgzMCwzMTgzMSwzMTgzMiwzMTgzMywzMTgzNCwzMTgzNSwzMTgzNiwzMTgzNywzMTgzOCwzMTgzOSwzMTg0MCwzMTg0MSwzMTg0MiwzMTg0MywzMTg0NCwzMTg0NSwzMTg0NiwzMTg0NywzMTg0OCwzMTg0OSwzMTg1MCwzMTg1MSwzMTg1MiwzMTg1MywzMTg1NCwzMTg1NSwzMTg1NiwzMTg1''@;'; put 'put ''NywzMTg1OCwzMTg2MSwzMTg2MiwzMTg2MywzMTg2NCwzMTg2NSwzMTg2NiwzMTg3MCwzMTg3MSwzMTg3MiwzMTg3MywzMTg3NCwzMTg3NSwzMTg3NiwzMTg3NywzMTg3OCwzMTg3OSwzMTg4MCwzMTg4MiwzMTg4MywzMTg4NCwzMTg4NSwzMTg4NiwzMTg4NywzMTg4OCwzMTg5MSwzMTg5Miwz''@;'; put 'put ''MTg5NCwzMTg5NywzMTg5OCwzMTg5OSwzMTkwNCwzMTkwNSwzMTkwNywzMTkxMCwzMTkxMSwzMTkxMiwzMTkxMywzMTkxNSwzMTkxNiwzMTkxNywzMTkxOSwzMTkyMCwzMTkyNCwzMTkyNSwzMTkyNiwzMTkyNywzMTkyOCwzMTkzMCwzMTkzMSwyNDM1OSwzNDM4MiwyMTgwNCwyNTI1MiwyMDEx''@;'; put 'put ''NCwyNzgxOCwyNTE0MywzMzQ1NywyMTcxOSwyMTMyNiwyOTUwMiwyODM2OSwzMDAxMSwyMTAxMCwyMTI3MCwzNTgwNSwyNzA4OCwyNDQ1OCwyNDU3NiwyODE0MiwyMjM1MSwyNzQyNiwyOTYxNSwyNjcwNywzNjgyNCwzMjUzMSwyNTQ0MiwyNDczOSwyMTc5NiwzMDE4NiwzNTkzOCwyODk0OSwy''@;'; put 'put ''ODA2NywyMzQ2MiwyNDE4NywzMzYxOCwyNDkwOCw0MDY0NCwzMDk3MCwzNDY0NywzMTc4MywzMDM0MywyMDk3NiwyNDgyMiwyOTAwNCwyNjE3OSwyNDE0MCwyNDY1MywzNTg1NCwyODc4NCwyNTM4MSwzNjc0NSwyNDUwOSwyNDY3NCwzNDUxNiwyMjIzOCwyNzU4NSwyNDcyNCwyNDkzNSwyMTMy''@;'; put 'put ''MSwyNDgwMCwyNjIxNCwzNjE1OSwzMTIyOSwyMDI1MCwyODkwNSwyNzcxOSwzNTc2MywzNTgyNiwzMjQ3MiwzMzYzNiwyNjEyNywyMzEzMCwzOTc0NiwyNzk4NSwyODE1MSwzNTkwNSwyNzk2MywyMDI0OSwyODc3OSwzMzcxOSwyNTExMCwyNDc4NSwzODY2OSwzNjEzNSwzMTA5NiwyMDk4Nywy''@;'; put 'put ''MjMzNCwyMjUyMiwyNjQyNiwzMDA3MiwzMTI5MywzMTIxNSwzMTYzNywzMTkzNSwzMTkzNiwzMTkzOCwzMTkzOSwzMTk0MCwzMTk0MiwzMTk0NSwzMTk0NywzMTk1MCwzMTk1MSwzMTk1MiwzMTk1MywzMTk1NCwzMTk1NSwzMTk1NiwzMTk2MCwzMTk2MiwzMTk2MywzMTk2NSwzMTk2NiwzMTk2''@;'; put 'put ''OSwzMTk3MCwzMTk3MSwzMTk3MiwzMTk3MywzMTk3NCwzMTk3NSwzMTk3NywzMTk3OCwzMTk3OSwzMTk4MCwzMTk4MSwzMTk4MiwzMTk4NCwzMTk4NSwzMTk4NiwzMTk4NywzMTk4OCwzMTk4OSwzMTk5MCwzMTk5MSwzMTk5MywzMTk5NCwzMTk5NiwzMTk5NywzMTk5OCwzMTk5OSwzMmUzLDMy''@;'; put 'put ''MDAxLDMyMDAyLDMyMDAzLDMyMDA0LDMyMDA1LDMyMDA2LDMyMDA3LDMyMDA4LDMyMDA5LDMyMDExLDMyMDEyLDMyMDEzLDMyMDE0LDMyMDE1LDMyMDE2LDMyMDE3LDMyMDE4LDMyMDE5LDMyMDIwLDMyMDIxLDMyMDIyLDMyMDIzLDMyMDI0LDMyMDI1LDMyMDI2LDMyMDI3LDMyMDI4LDMyMDI5''@;'; put 'put ''LDMyMDMwLDMyMDMxLDMyMDMzLDMyMDM1LDMyMDM2LDMyMDM3LDMyMDM4LDMyMDQwLDMyMDQxLDMyMDQyLDMyMDQ0LDMyMDQ1LDMyMDQ2LDMyMDQ4LDMyMDQ5LDMyMDUwLDMyMDUxLDMyMDUyLDMyMDUzLDMyMDU0LDMyOTA4LDM5MjY5LDM2ODU3LDI4NjA4LDM1NzQ5LDQwNDgxLDIzMDIwLDMy''@;'; put 'put ''NDg5LDMyNTIxLDIxNTEzLDI2NDk3LDI2ODQwLDM2NzUzLDMxODIxLDM4NTk4LDIxNDUwLDI0NjEzLDMwMTQyLDI3NzYyLDIxMzYzLDIzMjQxLDMyNDIzLDI1MzgwLDIwOTYwLDMzMDM0LDI0MDQ5LDM0MDE1LDI1MjE2LDIwODY0LDIzMzk1LDIwMjM4LDMxMDg1LDIxMDU4LDI0NzYwLDI3OTgy''@;'; put 'put ''LDIzNDkyLDIzNDkwLDM1NzQ1LDM1NzYwLDI2MDgyLDI0NTI0LDM4NDY5LDIyOTMxLDMyNDg3LDMyNDI2LDIyMDI1LDI2NTUxLDIyODQxLDIwMzM5LDIzNDc4LDIxMTUyLDMzNjI2LDM5MDUwLDM2MTU4LDMwMDAyLDM4MDc4LDIwNTUxLDMxMjkyLDIwMjE1LDI2NTUwLDM5NTUwLDIzMjMzLDI3''@;'; put 'put ''NTE2LDMwNDE3LDIyMzYyLDIzNTc0LDMxNTQ2LDM4Mzg4LDI5MDA2LDIwODYwLDMyOTM3LDMzMzkyLDIyOTA0LDMyNTE2LDMzNTc1LDI2ODE2LDI2NjA0LDMwODk3LDMwODM5LDI1MzE1LDI1NDQxLDMxNjE2LDIwNDYxLDIxMDk4LDIwOTQzLDMzNjE2LDI3MDk5LDM3NDkyLDM2MzQxLDM2MTQ1''@;'; put 'put ''LDM1MjY1LDM4MTkwLDMxNjYxLDIwMjE0LDMyMDU1LDMyMDU2LDMyMDU3LDMyMDU4LDMyMDU5LDMyMDYwLDMyMDYxLDMyMDYyLDMyMDYzLDMyMDY0LDMyMDY1LDMyMDY2LDMyMDY3LDMyMDY4LDMyMDY5LDMyMDcwLDMyMDcxLDMyMDcyLDMyMDczLDMyMDc0LDMyMDc1LDMyMDc2LDMyMDc3LDMy''@;'; put 'put ''MDc4LDMyMDc5LDMyMDgwLDMyMDgxLDMyMDgyLDMyMDgzLDMyMDg0LDMyMDg1LDMyMDg2LDMyMDg3LDMyMDg4LDMyMDg5LDMyMDkwLDMyMDkxLDMyMDkyLDMyMDkzLDMyMDk0LDMyMDk1LDMyMDk2LDMyMDk3LDMyMDk4LDMyMDk5LDMyMTAwLDMyMTAxLDMyMTAyLDMyMTAzLDMyMTA0LDMyMTA1''@;'; put 'put ''LDMyMTA2LDMyMTA3LDMyMTA4LDMyMTA5LDMyMTExLDMyMTEyLDMyMTEzLDMyMTE0LDMyMTE1LDMyMTE2LDMyMTE3LDMyMTE4LDMyMTIwLDMyMTIxLDMyMTIyLDMyMTIzLDMyMTI0LDMyMTI1LDMyMTI2LDMyMTI3LDMyMTI4LDMyMTI5LDMyMTMwLDMyMTMxLDMyMTMyLDMyMTMzLDMyMTM0LDMy''@;'; put 'put ''MTM1LDMyMTM2LDMyMTM3LDMyMTM4LDMyMTM5LDMyMTQwLDMyMTQxLDMyMTQyLDMyMTQzLDMyMTQ0LDMyMTQ1LDMyMTQ2LDMyMTQ3LDMyMTQ4LDMyMTQ5LDMyMTUwLDMyMTUxLDMyMTUyLDIwNTgxLDMzMzI4LDIxMDczLDM5Mjc5LDI4MTc2LDI4MjkzLDI4MDcxLDI0MzE0LDIwNzI1LDIzMDA0''@;'; put 'put ''LDIzNTU4LDI3OTc0LDI3NzQzLDMwMDg2LDMzOTMxLDI2NzI4LDIyODcwLDM1NzYyLDIxMjgwLDM3MjMzLDM4NDc3LDM0MTIxLDI2ODk4LDMwOTc3LDI4OTY2LDMzMDE0LDIwMTMyLDM3MDY2LDI3OTc1LDM5NTU2LDIzMDQ3LDIyMjA0LDI1NjA1LDM4MTI4LDMwNjk5LDIwMzg5LDMzMDUwLDI5''@;'; put 'put ''NDA5LDM1MjgyLDM5MjkwLDMyNTY0LDMyNDc4LDIxMTE5LDI1OTQ1LDM3MjM3LDM2NzM1LDM2NzM5LDIxNDgzLDMxMzgyLDI1NTgxLDI1NTA5LDMwMzQyLDMxMjI0LDM0OTAzLDM4NDU0LDI1MTMwLDIxMTYzLDMzNDEwLDI2NzA4LDI2NDgwLDI1NDYzLDMwNTcxLDMxNDY5LDI3OTA1LDMyNDY3''@;'; put 'put ''LDM1Mjk5LDIyOTkyLDI1MTA2LDM0MjQ5LDMzNDQ1LDMwMDI4LDIwNTExLDIwMTcxLDMwMTE3LDM1ODE5LDIzNjI2LDI0MDYyLDMxNTYzLDI2MDIwLDM3MzI5LDIwMTcwLDI3OTQxLDM1MTY3LDMyMDM5LDM4MTgyLDIwMTY1LDM1ODgwLDM2ODI3LDM4NzcxLDI2MTg3LDMxMTA1LDM2ODE3LDI4''@;'; put 'put ''OTA4LDI4MDI0LDMyMTUzLDMyMTU0LDMyMTU1LDMyMTU2LDMyMTU3LDMyMTU4LDMyMTU5LDMyMTYwLDMyMTYxLDMyMTYyLDMyMTYzLDMyMTY0LDMyMTY1LDMyMTY3LDMyMTY4LDMyMTY5LDMyMTcwLDMyMTcxLDMyMTcyLDMyMTczLDMyMTc1LDMyMTc2LDMyMTc3LDMyMTc4LDMyMTc5LDMyMTgw''@;'; put 'put ''LDMyMTgxLDMyMTgyLDMyMTgzLDMyMTg0LDMyMTg1LDMyMTg2LDMyMTg3LDMyMTg4LDMyMTg5LDMyMTkwLDMyMTkxLDMyMTkyLDMyMTkzLDMyMTk0LDMyMTk1LDMyMTk2LDMyMTk3LDMyMTk4LDMyMTk5LDMyMjAwLDMyMjAxLDMyMjAyLDMyMjAzLDMyMjA0LDMyMjA1LDMyMjA2LDMyMjA3LDMy''@;'; put 'put ''MjA4LDMyMjA5LDMyMjEwLDMyMjExLDMyMjEyLDMyMjEzLDMyMjE0LDMyMjE1LDMyMjE2LDMyMjE3LDMyMjE4LDMyMjE5LDMyMjIwLDMyMjIxLDMyMjIyLDMyMjIzLDMyMjI0LDMyMjI1LDMyMjI2LDMyMjI3LDMyMjI4LDMyMjI5LDMyMjMwLDMyMjMxLDMyMjMyLDMyMjMzLDMyMjM0LDMyMjM1''@;'; put 'put ''LDMyMjM2LDMyMjM3LDMyMjM4LDMyMjM5LDMyMjQwLDMyMjQxLDMyMjQyLDMyMjQzLDMyMjQ0LDMyMjQ1LDMyMjQ2LDMyMjQ3LDMyMjQ4LDMyMjQ5LDMyMjUwLDIzNjEzLDIxMTcwLDMzNjA2LDIwODM0LDMzNTUwLDMwNTU1LDI2MjMwLDQwMTIwLDIwMTQwLDI0Nzc4LDMxOTM0LDMxOTIzLDMy''@;'; put 'put ''NDYzLDIwMTE3LDM1Njg2LDI2MjIzLDM5MDQ4LDM4NzQ1LDIyNjU5LDI1OTY0LDM4MjM2LDI0NDUyLDMwMTUzLDM4NzQyLDMxNDU1LDMxNDU0LDIwOTI4LDI4ODQ3LDMxMzg0LDI1NTc4LDMxMzUwLDMyNDE2LDI5NTkwLDM4ODkzLDIwMDM3LDI4NzkyLDIwMDYxLDM3MjAyLDIxNDE3LDI1OTM3''@;'; put 'put ''LDI2MDg3LDMzMjc2LDMzMjg1LDIxNjQ2LDIzNjAxLDMwMTA2LDM4ODE2LDI1MzA0LDI5NDAxLDMwMTQxLDIzNjIxLDM5NTQ1LDMzNzM4LDIzNjE2LDIxNjMyLDMwNjk3LDIwMDMwLDI3ODIyLDMyODU4LDI1Mjk4LDI1NDU0LDI0MDQwLDIwODU1LDM2MzE3LDM2MzgyLDM4MTkxLDIwNDY1LDIx''@;'; put 'put ''NDc3LDI0ODA3LDI4ODQ0LDIxMDk1LDI1NDI0LDQwNTE1LDIzMDcxLDIwNTE4LDMwNTE5LDIxMzY3LDMyNDgyLDI1NzMzLDI1ODk5LDI1MjI1LDI1NDk2LDIwNTAwLDI5MjM3LDM1MjczLDIwOTE1LDM1Nzc2LDMyNDc3LDIyMzQzLDMzNzQwLDM4MDU1LDIwODkxLDIxNTMxLDIzODAzLDMyMjUx''@;'; put 'put ''LDMyMjUyLDMyMjUzLDMyMjU0LDMyMjU1LDMyMjU2LDMyMjU3LDMyMjU4LDMyMjU5LDMyMjYwLDMyMjYxLDMyMjYyLDMyMjYzLDMyMjY0LDMyMjY1LDMyMjY2LDMyMjY3LDMyMjY4LDMyMjY5LDMyMjcwLDMyMjcxLDMyMjcyLDMyMjczLDMyMjc0LDMyMjc1LDMyMjc2LDMyMjc3LDMyMjc4LDMy''@;'; put 'put ''Mjc5LDMyMjgwLDMyMjgxLDMyMjgyLDMyMjgzLDMyMjg0LDMyMjg1LDMyMjg2LDMyMjg3LDMyMjg4LDMyMjg5LDMyMjkwLDMyMjkxLDMyMjkyLDMyMjkzLDMyMjk0LDMyMjk1LDMyMjk2LDMyMjk3LDMyMjk4LDMyMjk5LDMyMzAwLDMyMzAxLDMyMzAyLDMyMzAzLDMyMzA0LDMyMzA1LDMyMzA2''@;'; put 'put ''LDMyMzA3LDMyMzA4LDMyMzA5LDMyMzEwLDMyMzExLDMyMzEyLDMyMzEzLDMyMzE0LDMyMzE2LDMyMzE3LDMyMzE4LDMyMzE5LDMyMzIwLDMyMzIyLDMyMzIzLDMyMzI0LDMyMzI1LDMyMzI2LDMyMzI4LDMyMzI5LDMyMzMwLDMyMzMxLDMyMzMyLDMyMzMzLDMyMzM0LDMyMzM1LDMyMzM2LDMy''@;'; put 'put ''MzM3LDMyMzM4LDMyMzM5LDMyMzQwLDMyMzQxLDMyMzQyLDMyMzQzLDMyMzQ0LDMyMzQ1LDMyMzQ2LDMyMzQ3LDMyMzQ4LDMyMzQ5LDIwNDI2LDMxNDU5LDI3OTk0LDM3MDg5LDM5NTY3LDIxODg4LDIxNjU0LDIxMzQ1LDIxNjc5LDI0MzIwLDI1NTc3LDI2OTk5LDIwOTc1LDI0OTM2LDIxMDAy''@;'; put 'put ''LDIyNTcwLDIxMjA4LDIyMzUwLDMwNzMzLDMwNDc1LDI0MjQ3LDI0OTUxLDMxOTY4LDI1MTc5LDI1MjM5LDIwMTMwLDI4ODIxLDMyNzcxLDI1MzM1LDI4OTAwLDM4NzUyLDIyMzkxLDMzNDk5LDI2NjA3LDI2ODY5LDMwOTMzLDM5MDYzLDMxMTg1LDIyNzcxLDIxNjgzLDIxNDg3LDI4MjEyLDIw''@;'; put 'put ''ODExLDIxMDUxLDIzNDU4LDM1ODM4LDMyOTQzLDIxODI3LDIyNDM4LDI0NjkxLDIyMzUzLDIxNTQ5LDMxMzU0LDI0NjU2LDIzMzgwLDI1NTExLDI1MjQ4LDIxNDc1LDI1MTg3LDIzNDk1LDI2NTQzLDIxNzQxLDMxMzkxLDMzNTEwLDM3MjM5LDI0MjExLDM1MDQ0LDIyODQwLDIyNDQ2LDI1MzU4''@;'; put 'put ''LDM2MzI4LDMzMDA3LDIyMzU5LDMxNjA3LDIwMzkzLDI0NTU1LDIzNDg1LDI3NDU0LDIxMjgxLDMxNTY4LDI5Mzc4LDI2Njk0LDMwNzE5LDMwNTE4LDI2MTAzLDIwOTE3LDIwMTExLDMwNDIwLDIzNzQzLDMxMzk3LDMzOTA5LDIyODYyLDM5NzQ1LDIwNjA4LDMyMzUwLDMyMzUxLDMyMzUyLDMy''@;'; put 'put ''MzUzLDMyMzU0LDMyMzU1LDMyMzU2LDMyMzU3LDMyMzU4LDMyMzU5LDMyMzYwLDMyMzYxLDMyMzYyLDMyMzYzLDMyMzY0LDMyMzY1LDMyMzY2LDMyMzY3LDMyMzY4LDMyMzY5LDMyMzcwLDMyMzcxLDMyMzcyLDMyMzczLDMyMzc0LDMyMzc1LDMyMzc2LDMyMzc3LDMyMzc4LDMyMzc5LDMyMzgw''@;'; put 'put ''LDMyMzgxLDMyMzgyLDMyMzgzLDMyMzg0LDMyMzg1LDMyMzg3LDMyMzg4LDMyMzg5LDMyMzkwLDMyMzkxLDMyMzkyLDMyMzkzLDMyMzk0LDMyMzk1LDMyMzk2LDMyMzk3LDMyMzk4LDMyMzk5LDMyNDAwLDMyNDAxLDMyNDAyLDMyNDAzLDMyNDA0LDMyNDA1LDMyNDA2LDMyNDA3LDMyNDA4LDMy''@;'; put 'put ''NDA5LDMyNDEwLDMyNDEyLDMyNDEzLDMyNDE0LDMyNDMwLDMyNDM2LDMyNDQzLDMyNDQ0LDMyNDcwLDMyNDg0LDMyNDkyLDMyNTA1LDMyNTIyLDMyNTI4LDMyNTQyLDMyNTY3LDMyNTY5LDMyNTcxLDMyNTcyLDMyNTczLDMyNTc0LDMyNTc1LDMyNTc2LDMyNTc3LDMyNTc5LDMyNTgyLDMyNTgz''@;'; put 'put ''LDMyNTg0LDMyNTg1LDMyNTg2LDMyNTg3LDMyNTg4LDMyNTg5LDMyNTkwLDMyNTkxLDMyNTk0LDMyNTk1LDM5MzA0LDI0ODcxLDI4MjkxLDIyMzcyLDI2MTE4LDI1NDE0LDIyMjU2LDI1MzI0LDI1MTkzLDI0Mjc1LDM4NDIwLDIyNDAzLDI1Mjg5LDIxODk1LDM0NTkzLDMzMDk4LDM2NzcxLDIx''@;'; put 'put ''ODYyLDMzNzEzLDI2NDY5LDM2MTgyLDM0MDEzLDIzMTQ2LDI2NjM5LDI1MzE4LDMxNzI2LDM4NDE3LDIwODQ4LDI4NTcyLDM1ODg4LDI1NTk3LDM1MjcyLDI1MDQyLDMyNTE4LDI4ODY2LDI4Mzg5LDI5NzAxLDI3MDI4LDI5NDM2LDI0MjY2LDM3MDcwLDI2MzkxLDI4MDEwLDI1NDM4LDIxMTcx''@;'; put 'put ''LDI5MjgyLDMyNzY5LDIwMzMyLDIzMDEzLDM3MjI2LDI4ODg5LDI4MDYxLDIxMjAyLDIwMDQ4LDM4NjQ3LDM4MjUzLDM0MTc0LDMwOTIyLDMyMDQ3LDIwNzY5LDIyNDE4LDI1Nzk0LDMyOTA3LDMxODY3LDI3ODgyLDI2ODY1LDI2OTc0LDIwOTE5LDIxNDAwLDI2NzkyLDI5MzEzLDQwNjU0LDMx''@;'; put 'put ''NzI5LDI5NDMyLDMxMTYzLDI4NDM1LDI5NzAyLDI2NDQ2LDM3MzI0LDQwMTAwLDMxMDM2LDMzNjczLDMzNjIwLDIxNTE5LDI2NjQ3LDIwMDI5LDIxMzg1LDIxMTY5LDMwNzgyLDIxMzgyLDIxMDMzLDIwNjE2LDIwMzYzLDIwNDMyLDMyNTk4LDMyNjAxLDMyNjAzLDMyNjA0LDMyNjA1LDMyNjA2''@;'; put 'put ''LDMyNjA4LDMyNjExLDMyNjEyLDMyNjEzLDMyNjE0LDMyNjE1LDMyNjE5LDMyNjIwLDMyNjIxLDMyNjIzLDMyNjI0LDMyNjI3LDMyNjI5LDMyNjMwLDMyNjMxLDMyNjMyLDMyNjM0LDMyNjM1LDMyNjM2LDMyNjM3LDMyNjM5LDMyNjQwLDMyNjQyLDMyNjQzLDMyNjQ0LDMyNjQ1LDMyNjQ2LDMy''@;'; put 'put ''NjQ3LDMyNjQ4LDMyNjQ5LDMyNjUxLDMyNjUzLDMyNjU1LDMyNjU2LDMyNjU3LDMyNjU4LDMyNjU5LDMyNjYxLDMyNjYyLDMyNjYzLDMyNjY0LDMyNjY1LDMyNjY3LDMyNjY4LDMyNjcyLDMyNjc0LDMyNjc1LDMyNjc3LDMyNjc4LDMyNjgwLDMyNjgxLDMyNjgyLDMyNjgzLDMyNjg0LDMyNjg1''@;'; put 'put ''LDMyNjg2LDMyNjg5LDMyNjkxLDMyNjkyLDMyNjkzLDMyNjk0LDMyNjk1LDMyNjk4LDMyNjk5LDMyNzAyLDMyNzA0LDMyNzA2LDMyNzA3LDMyNzA4LDMyNzEwLDMyNzExLDMyNzEyLDMyNzEzLDMyNzE1LDMyNzE3LDMyNzE5LDMyNzIwLDMyNzIxLDMyNzIyLDMyNzIzLDMyNzI2LDMyNzI3LDMy''@;'; put 'put ''NzI5LDMyNzMwLDMyNzMxLDMyNzMyLDMyNzMzLDMyNzM0LDMyNzM4LDMyNzM5LDMwMTc4LDMxNDM1LDMxODkwLDI3ODEzLDM4NTgyLDIxMTQ3LDI5ODI3LDIxNzM3LDIwNDU3LDMyODUyLDMzNzE0LDM2ODMwLDM4MjU2LDI0MjY1LDI0NjA0LDI4MDYzLDI0MDg4LDI1OTQ3LDMzMDgwLDM4MTQy''@;'; put 'put ''LDI0NjUxLDI4ODYwLDMyNDUxLDMxOTE4LDIwOTM3LDI2NzUzLDMxOTIxLDMzMzkxLDIwMDA0LDM2NzQyLDM3MzI3LDI2MjM4LDIwMTQyLDM1ODQ1LDI1NzY5LDMyODQyLDIwNjk4LDMwMTAzLDI5MTM0LDIzNTI1LDM2Nzk3LDI4NTE4LDIwMTAyLDI1NzMwLDM4MjQzLDI0Mjc4LDI2MDA5LDIx''@;'; put 'put ''MDE1LDM1MDEwLDI4ODcyLDIxMTU1LDI5NDU0LDI5NzQ3LDI2NTE5LDMwOTY3LDM4Njc4LDIwMDIwLDM3MDUxLDQwMTU4LDI4MTA3LDIwOTU1LDM2MTYxLDIxNTMzLDI1Mjk0LDI5NjE4LDMzNzc3LDM4NjQ2LDQwODM2LDM4MDgzLDIwMjc4LDMyNjY2LDIwOTQwLDI4Nzg5LDM4NTE3LDIzNzI1''@;'; put 'put ''LDM5MDQ2LDIxNDc4LDIwMTk2LDI4MzE2LDI5NzA1LDI3MDYwLDMwODI3LDM5MzExLDMwMDQxLDIxMDE2LDMwMjQ0LDI3OTY5LDI2NjExLDIwODQ1LDQwODU3LDMyODQzLDIxNjU3LDMxNTQ4LDMxNDIzLDMyNzQwLDMyNzQzLDMyNzQ0LDMyNzQ2LDMyNzQ3LDMyNzQ4LDMyNzQ5LDMyNzUxLDMy''@;'; put 'put ''NzU0LDMyNzU2LDMyNzU3LDMyNzU4LDMyNzU5LDMyNzYwLDMyNzYxLDMyNzYyLDMyNzY1LDMyNzY2LDMyNzY3LDMyNzcwLDMyNzc1LDMyNzc2LDMyNzc3LDMyNzc4LDMyNzgyLDMyNzgzLDMyNzg1LDMyNzg3LDMyNzk0LDMyNzk1LDMyNzk3LDMyNzk4LDMyNzk5LDMyODAxLDMyODAzLDMyODA0''@;'; put 'put ''LDMyODExLDMyODEyLDMyODEzLDMyODE0LDMyODE1LDMyODE2LDMyODE4LDMyODIwLDMyODI1LDMyODI2LDMyODI4LDMyODMwLDMyODMyLDMyODMzLDMyODM2LDMyODM3LDMyODM5LDMyODQwLDMyODQxLDMyODQ2LDMyODQ3LDMyODQ4LDMyODQ5LDMyODUxLDMyODUzLDMyODU0LDMyODU1LDMy''@;'; put 'put ''ODU3LDMyODU5LDMyODYwLDMyODYxLDMyODYyLDMyODYzLDMyODY0LDMyODY1LDMyODY2LDMyODY3LDMyODY4LDMyODY5LDMyODcwLDMyODcxLDMyODcyLDMyODc1LDMyODc2LDMyODc3LDMyODc4LDMyODc5LDMyODgwLDMyODgyLDMyODgzLDMyODg0LDMyODg1LDMyODg2LDMyODg3LDMyODg4''@;'; put 'put ''LDMyODg5LDMyODkwLDMyODkxLDMyODkyLDMyODkzLDM4NTM0LDIyNDA0LDI1MzE0LDM4NDcxLDI3MDA0LDIzMDQ0LDI1NjAyLDMxNjk5LDI4NDMxLDM4NDc1LDMzNDQ2LDIxMzQ2LDM5MDQ1LDI0MjA4LDI4ODA5LDI1NTIzLDIxMzQ4LDM0MzgzLDQwMDY1LDQwNTk1LDMwODYwLDM4NzA2LDM2''@;'; put 'put ''MzM1LDM2MTYyLDQwNTc1LDI4NTEwLDMxMTA4LDI0NDA1LDM4NDcwLDI1MTM0LDM5NTQwLDIxNTI1LDM4MTA5LDIwMzg3LDI2MDUzLDIzNjUzLDIzNjQ5LDMyNTMzLDM0Mzg1LDI3Njk1LDI0NDU5LDI5NTc1LDI4Mzg4LDMyNTExLDIzNzgyLDI1MzcxLDIzNDAyLDI4MzkwLDIxMzY1LDIwMDgx''@;'; put 'put ''LDI1NTA0LDMwMDUzLDI1MjQ5LDM2NzE4LDIwMjYyLDIwMTc3LDI3ODE0LDMyNDM4LDM1NzcwLDMzODIxLDM0NzQ2LDMyNTk5LDM2OTIzLDM4MTc5LDMxNjU3LDM5NTg1LDM1MDY0LDMzODUzLDI3OTMxLDM5NTU4LDMyNDc2LDIyOTIwLDQwNjM1LDI5NTk1LDMwNzIxLDM0NDM0LDM5NTMyLDM5''@;'; put 'put ''NTU0LDIyMDQzLDIxNTI3LDIyNDc1LDIwMDgwLDQwNjE0LDIxMzM0LDM2ODA4LDMzMDMzLDMwNjEwLDM5MzE0LDM0NTQyLDI4Mzg1LDM0MDY3LDI2MzY0LDI0OTMwLDI4NDU5LDMyODk0LDMyODk3LDMyODk4LDMyOTAxLDMyOTA0LDMyOTA2LDMyOTA5LDMyOTEwLDMyOTExLDMyOTEyLDMyOTEz''@;'; put 'put ''LDMyOTE0LDMyOTE2LDMyOTE3LDMyOTE5LDMyOTIxLDMyOTI2LDMyOTMxLDMyOTM0LDMyOTM1LDMyOTM2LDMyOTQwLDMyOTQ0LDMyOTQ3LDMyOTQ5LDMyOTUwLDMyOTUyLDMyOTUzLDMyOTU1LDMyOTY1LDMyOTY3LDMyOTY4LDMyOTY5LDMyOTcwLDMyOTcxLDMyOTc1LDMyOTc2LDMyOTc3LDMy''@;'; put 'put ''OTc4LDMyOTc5LDMyOTgwLDMyOTgxLDMyOTg0LDMyOTkxLDMyOTkyLDMyOTk0LDMyOTk1LDMyOTk4LDMzMDA2LDMzMDEzLDMzMDE1LDMzMDE3LDMzMDE5LDMzMDIyLDMzMDIzLDMzMDI0LDMzMDI1LDMzMDI3LDMzMDI4LDMzMDI5LDMzMDMxLDMzMDMyLDMzMDM1LDMzMDM2LDMzMDQ1LDMzMDQ3''@;'; put 'put ''LDMzMDQ5LDMzMDUxLDMzMDUyLDMzMDUzLDMzMDU1LDMzMDU2LDMzMDU3LDMzMDU4LDMzMDU5LDMzMDYwLDMzMDYxLDMzMDYyLDMzMDYzLDMzMDY0LDMzMDY1LDMzMDY2LDMzMDY3LDMzMDY5LDMzMDcwLDMzMDcyLDMzMDc1LDMzMDc2LDMzMDc3LDMzMDc5LDMzMDgxLDMzMDgyLDMzMDgzLDMz''@;'; put 'put ''MDg0LDMzMDg1LDMzMDg3LDM1ODgxLDMzNDI2LDMzNTc5LDMwNDUwLDI3NjY3LDI0NTM3LDMzNzI1LDI5NDgzLDMzNTQxLDM4MTcwLDI3NjExLDMwNjgzLDM4MDg2LDIxMzU5LDMzNTM4LDIwODgyLDI0MTI1LDM1OTgwLDM2MTUyLDIwMDQwLDI5NjExLDI2NTIyLDI2NzU3LDM3MjM4LDM4NjY1''@;'; put 'put ''LDI5MDI4LDI3ODA5LDMwNDczLDIzMTg2LDM4MjA5LDI3NTk5LDMyNjU0LDI2MTUxLDIzNTA0LDIyOTY5LDIzMTk0LDM4Mzc2LDM4MzkxLDIwMjA0LDMzODA0LDMzOTQ1LDI3MzA4LDMwNDMxLDM4MTkyLDI5NDY3LDI2NzkwLDIzMzkxLDMwNTExLDM3Mjc0LDM4NzUzLDMxOTY0LDM2ODU1LDM1''@;'; put 'put ''ODY4LDI0MzU3LDMxODU5LDMxMTkyLDM1MjY5LDI3ODUyLDM0NTg4LDIzNDk0LDI0MTMwLDI2ODI1LDMwNDk2LDMyNTAxLDIwODg1LDIwODEzLDIxMTkzLDIzMDgxLDMyNTE3LDM4NzU0LDMzNDk1LDI1NTUxLDMwNTk2LDM0MjU2LDMxMTg2LDI4MjE4LDI0MjE3LDIyOTM3LDM0MDY1LDI4Nzgx''@;'; put 'put ''LDI3NjY1LDI1Mjc5LDMwMzk5LDI1OTM1LDI0NzUxLDM4Mzk3LDI2MTI2LDM0NzE5LDQwNDgzLDM4MTI1LDIxNTE3LDIxNjI5LDM1ODg0LDI1NzIwLDMzMDg4LDMzMDg5LDMzMDkwLDMzMDkxLDMzMDkyLDMzMDkzLDMzMDk1LDMzMDk3LDMzMTAxLDMzMTAyLDMzMTAzLDMzMTA2LDMzMTEwLDMz''@;'; put 'put ''MTExLDMzMTEyLDMzMTE1LDMzMTE2LDMzMTE3LDMzMTE4LDMzMTE5LDMzMTIxLDMzMTIyLDMzMTIzLDMzMTI0LDMzMTI2LDMzMTI4LDMzMTMwLDMzMTMxLDMzMTMyLDMzMTM1LDMzMTM4LDMzMTM5LDMzMTQxLDMzMTQyLDMzMTQzLDMzMTQ0LDMzMTUzLDMzMTU1LDMzMTU2LDMzMTU3LDMzMTU4''@;'; put 'put ''LDMzMTU5LDMzMTYxLDMzMTYzLDMzMTY0LDMzMTY1LDMzMTY2LDMzMTY4LDMzMTcwLDMzMTcxLDMzMTcyLDMzMTczLDMzMTc0LDMzMTc1LDMzMTc3LDMzMTc4LDMzMTgyLDMzMTgzLDMzMTg0LDMzMTg1LDMzMTg2LDMzMTg4LDMzMTg5LDMzMTkxLDMzMTkzLDMzMTk1LDMzMTk2LDMzMTk3LDMz''@;'; put 'put ''MTk4LDMzMTk5LDMzMjAwLDMzMjAxLDMzMjAyLDMzMjA0LDMzMjA1LDMzMjA2LDMzMjA3LDMzMjA4LDMzMjA5LDMzMjEyLDMzMjEzLDMzMjE0LDMzMjE1LDMzMjIwLDMzMjIxLDMzMjIzLDMzMjI0LDMzMjI1LDMzMjI3LDMzMjI5LDMzMjMwLDMzMjMxLDMzMjMyLDMzMjMzLDMzMjM0LDMzMjM1''@;'; put 'put ''LDI1NzIxLDM0MzIxLDI3MTY5LDMzMTgwLDMwOTUyLDI1NzA1LDM5NzY0LDI1MjczLDI2NDExLDMzNzA3LDIyNjk2LDQwNjY0LDI3ODE5LDI4NDQ4LDIzNTE4LDM4NDc2LDM1ODUxLDI5Mjc5LDI2NTc2LDI1Mjg3LDI5MjgxLDIwMTM3LDIyOTgyLDI3NTk3LDIyNjc1LDI2Mjg2LDI0MTQ5LDIx''@;'; put 'put ''MjE1LDI0OTE3LDI2NDA4LDMwNDQ2LDMwNTY2LDI5Mjg3LDMxMzAyLDI1MzQzLDIxNzM4LDIxNTg0LDM4MDQ4LDM3MDI3LDIzMDY4LDMyNDM1LDI3NjcwLDIwMDM1LDIyOTAyLDMyNzg0LDIyODU2LDIxMzM1LDMwMDA3LDM4NTkwLDIyMjE4LDI1Mzc2LDMzMDQxLDI0NzAwLDM4MzkzLDI4MTE4''@;'; put 'put ''LDIxNjAyLDM5Mjk3LDIwODY5LDIzMjczLDMzMDIxLDIyOTU4LDM4Njc1LDIwNTIyLDI3ODc3LDIzNjEyLDI1MzExLDIwMzIwLDIxMzExLDMzMTQ3LDM2ODcwLDI4MzQ2LDM0MDkxLDI1Mjg4LDI0MTgwLDMwOTEwLDI1NzgxLDI1NDY3LDI0NTY1LDIzMDY0LDM3MjQ3LDQwNDc5LDIzNjE1LDI1''@;'; put 'put ''NDIzLDMyODM0LDIzNDIxLDIxODcwLDM4MjE4LDM4MjIxLDI4MDM3LDI0NzQ0LDI2NTkyLDI5NDA2LDIwOTU3LDIzNDI1LDMzMjM2LDMzMjM3LDMzMjM4LDMzMjM5LDMzMjQwLDMzMjQxLDMzMjQyLDMzMjQzLDMzMjQ0LDMzMjQ1LDMzMjQ2LDMzMjQ3LDMzMjQ4LDMzMjQ5LDMzMjUwLDMzMjUy''@;'; put 'put ''LDMzMjUzLDMzMjU0LDMzMjU2LDMzMjU3LDMzMjU5LDMzMjYyLDMzMjYzLDMzMjY0LDMzMjY1LDMzMjY2LDMzMjY5LDMzMjcwLDMzMjcxLDMzMjcyLDMzMjczLDMzMjc0LDMzMjc3LDMzMjc5LDMzMjgzLDMzMjg3LDMzMjg4LDMzMjg5LDMzMjkwLDMzMjkxLDMzMjk0LDMzMjk1LDMzMjk3LDMz''@;'; put 'put ''Mjk5LDMzMzAxLDMzMzAyLDMzMzAzLDMzMzA0LDMzMzA1LDMzMzA2LDMzMzA5LDMzMzEyLDMzMzE2LDMzMzE3LDMzMzE4LDMzMzE5LDMzMzIxLDMzMzI2LDMzMzMwLDMzMzM4LDMzMzQwLDMzMzQxLDMzMzQzLDMzMzQ0LDMzMzQ1LDMzMzQ2LDMzMzQ3LDMzMzQ5LDMzMzUwLDMzMzUyLDMzMzU0''@;'; put 'put ''LDMzMzU2LDMzMzU3LDMzMzU4LDMzMzYwLDMzMzYxLDMzMzYyLDMzMzYzLDMzMzY0LDMzMzY1LDMzMzY2LDMzMzY3LDMzMzY5LDMzMzcxLDMzMzcyLDMzMzczLDMzMzc0LDMzMzc2LDMzMzc3LDMzMzc4LDMzMzc5LDMzMzgwLDMzMzgxLDMzMzgyLDMzMzgzLDMzMzg1LDI1MzE5LDI3ODcwLDI5''@;'; put 'put ''Mjc1LDI1MTk3LDM4MDYyLDMyNDQ1LDMzMDQzLDI3OTg3LDIwODkyLDI0MzI0LDIyOTAwLDIxMTYyLDI0NTk0LDIyODk5LDI2MjYyLDM0Mzg0LDMwMTExLDI1Mzg2LDI1MDYyLDMxOTgzLDM1ODM0LDIxNzM0LDI3NDMxLDQwNDg1LDI3NTcyLDM0MjYxLDIxNTg5LDIwNTk4LDI3ODEyLDIxODY2''@;'; put 'put ''LDM2Mjc2LDI5MjI4LDI0MDg1LDI0NTk3LDI5NzUwLDI1MjkzLDI1NDkwLDI5MjYwLDI0NDcyLDI4MjI3LDI3OTY2LDI1ODU2LDI4NTA0LDMwNDI0LDMwOTI4LDMwNDYwLDMwMDM2LDIxMDI4LDIxNDY3LDIwMDUxLDI0MjIyLDI2MDQ5LDMyODEwLDMyOTgyLDI1MjQzLDIxNjM4LDIxMDMyLDI4''@;'; put 'put ''ODQ2LDM0OTU3LDM2MzA1LDI3ODczLDIxNjI0LDMyOTg2LDIyNTIxLDM1MDYwLDM2MTgwLDM4NTA2LDM3MTk3LDIwMzI5LDI3ODAzLDIxOTQzLDMwNDA2LDMwNzY4LDI1MjU2LDI4OTIxLDI4NTU4LDI0NDI5LDM0MDI4LDI2ODQyLDMwODQ0LDMxNzM1LDMzMTkyLDI2Mzc5LDQwNTI3LDI1NDQ3''@;'; put 'put ''LDMwODk2LDIyMzgzLDMwNzM4LDM4NzEzLDI1MjA5LDI1MjU5LDIxMTI4LDI5NzQ5LDI3NjA3LDMzMzg2LDMzMzg3LDMzMzg4LDMzMzg5LDMzMzkzLDMzMzk3LDMzMzk4LDMzMzk5LDMzNDAwLDMzNDAzLDMzNDA0LDMzNDA4LDMzNDA5LDMzNDExLDMzNDEzLDMzNDE0LDMzNDE1LDMzNDE3LDMz''@;'; put 'put ''NDIwLDMzNDI0LDMzNDI3LDMzNDI4LDMzNDI5LDMzNDMwLDMzNDM0LDMzNDM1LDMzNDM4LDMzNDQwLDMzNDQyLDMzNDQzLDMzNDQ3LDMzNDU4LDMzNDYxLDMzNDYyLDMzNDY2LDMzNDY3LDMzNDY4LDMzNDcxLDMzNDcyLDMzNDc0LDMzNDc1LDMzNDc3LDMzNDc4LDMzNDgxLDMzNDg4LDMzNDk0''@;'; put 'put ''LDMzNDk3LDMzNDk4LDMzNTAxLDMzNTA2LDMzNTExLDMzNTEyLDMzNTEzLDMzNTE0LDMzNTE2LDMzNTE3LDMzNTE4LDMzNTIwLDMzNTIyLDMzNTIzLDMzNTI1LDMzNTI2LDMzNTI4LDMzNTMwLDMzNTMyLDMzNTMzLDMzNTM0LDMzNTM1LDMzNTM2LDMzNTQ2LDMzNTQ3LDMzNTQ5LDMzNTUyLDMz''@;'; put 'put ''NTU0LDMzNTU1LDMzNTU4LDMzNTYwLDMzNTYxLDMzNTY1LDMzNTY2LDMzNTY3LDMzNTY4LDMzNTY5LDMzNTcwLDMzNTcxLDMzNTcyLDMzNTczLDMzNTc0LDMzNTc3LDMzNTc4LDMzNTgyLDMzNTg0LDMzNTg2LDMzNTkxLDMzNTk1LDMzNTk3LDIxODYwLDMzMDg2LDMwMTMwLDMwMzgyLDIxMzA1''@;'; put 'put ''LDMwMTc0LDIwNzMxLDIzNjE3LDM1NjkyLDMxNjg3LDIwNTU5LDI5MjU1LDM5NTc1LDM5MTI4LDI4NDE4LDI5OTIyLDMxMDgwLDI1NzM1LDMwNjI5LDI1MzQwLDM5MDU3LDM2MTM5LDIxNjk3LDMyODU2LDIwMDUwLDIyMzc4LDMzNTI5LDMzODA1LDI0MTc5LDIwOTczLDI5OTQyLDM1NzgwLDIz''@;'; put 'put ''NjMxLDIyMzY5LDI3OTAwLDM5MDQ3LDIzMTEwLDMwNzcyLDM5NzQ4LDM2ODQzLDMxODkzLDIxMDc4LDI1MTY5LDM4MTM4LDIwMTY2LDMzNjcwLDMzODg5LDMzNzY5LDMzOTcwLDIyNDg0LDI2NDIwLDIyMjc1LDI2MjIyLDI4MDA2LDM1ODg5LDI2MzMzLDI4Njg5LDI2Mzk5LDI3NDUwLDI2NjQ2''@;'; put 'put ''LDI1MTE0LDIyOTcxLDE5OTcxLDIwOTMyLDI4NDIyLDI2NTc4LDI3NzkxLDIwODU0LDI2ODI3LDIyODU1LDI3NDk1LDMwMDU0LDIzODIyLDMzMDQwLDQwNzg0LDI2MDcxLDMxMDQ4LDMxMDQxLDM5NTY5LDM2MjE1LDIzNjgyLDIwMDYyLDIwMjI1LDIxNTUxLDIyODY1LDMwNzMyLDIyMTIwLDI3''@;'; put 'put ''NjY4LDM2ODA0LDI0MzIzLDI3NzczLDI3ODc1LDM1NzU1LDI1NDg4LDMzNTk4LDMzNTk5LDMzNjAxLDMzNjAyLDMzNjA0LDMzNjA1LDMzNjA4LDMzNjEwLDMzNjExLDMzNjEyLDMzNjEzLDMzNjE0LDMzNjE5LDMzNjIxLDMzNjIyLDMzNjIzLDMzNjI0LDMzNjI1LDMzNjI5LDMzNjM0LDMzNjQ4''@;'; put 'put ''LDMzNjQ5LDMzNjUwLDMzNjUxLDMzNjUyLDMzNjUzLDMzNjU0LDMzNjU3LDMzNjU4LDMzNjYyLDMzNjYzLDMzNjY0LDMzNjY1LDMzNjY2LDMzNjY3LDMzNjY4LDMzNjcxLDMzNjcyLDMzNjc0LDMzNjc1LDMzNjc2LDMzNjc3LDMzNjc5LDMzNjgwLDMzNjgxLDMzNjg0LDMzNjg1LDMzNjg2LDMz''@;'; put 'put ''Njg3LDMzNjg5LDMzNjkwLDMzNjkzLDMzNjk1LDMzNjk3LDMzNjk4LDMzNjk5LDMzNzAwLDMzNzAxLDMzNzAyLDMzNzAzLDMzNzA4LDMzNzA5LDMzNzEwLDMzNzExLDMzNzE3LDMzNzIzLDMzNzI2LDMzNzI3LDMzNzMwLDMzNzMxLDMzNzMyLDMzNzM0LDMzNzM2LDMzNzM3LDMzNzM5LDMzNzQx''@;'; put 'put ''LDMzNzQyLDMzNzQ0LDMzNzQ1LDMzNzQ2LDMzNzQ3LDMzNzQ5LDMzNzUxLDMzNzUzLDMzNzU0LDMzNzU1LDMzNzU4LDMzNzYyLDMzNzYzLDMzNzY0LDMzNzY2LDMzNzY3LDMzNzY4LDMzNzcxLDMzNzcyLDMzNzczLDI0Njg4LDI3OTY1LDI5MzAxLDI1MTkwLDM4MDMwLDM4MDg1LDIxMzE1LDM2''@;'; put 'put ''ODAxLDMxNjE0LDIwMTkxLDM1ODc4LDIwMDk0LDQwNjYwLDM4MDY1LDM4MDY3LDIxMDY5LDI4NTA4LDM2OTYzLDI3OTczLDM1ODkyLDIyNTQ1LDIzODg0LDI3NDI0LDI3NDY1LDI2NTM4LDIxNTk1LDMzMTA4LDMyNjUyLDIyNjgxLDM0MTAzLDI0Mzc4LDI1MjUwLDI3MjA3LDM4MjAxLDI1OTcw''@;'; put 'put ''LDI0NzA4LDI2NzI1LDMwNjMxLDIwMDUyLDIwMzkyLDI0MDM5LDM4ODA4LDI1NzcyLDMyNzI4LDIzNzg5LDIwNDMxLDMxMzczLDIwOTk5LDMzNTQwLDE5OTg4LDI0NjIzLDMxMzYzLDM4MDU0LDIwNDA1LDIwMTQ2LDMxMjA2LDI5NzQ4LDIxMjIwLDMzNDY1LDI1ODEwLDMxMTY1LDIzNTE3LDI3''@;'; put 'put ''Nzc3LDM4NzM4LDM2NzMxLDI3NjgyLDIwNTQyLDIxMzc1LDI4MTY1LDI1ODA2LDI2MjI4LDI3Njk2LDI0NzczLDM5MDMxLDM1ODMxLDI0MTk4LDI5NzU2LDMxMzUxLDMxMTc5LDE5OTkyLDM3MDQxLDI5Njk5LDI3NzE0LDIyMjM0LDM3MTk1LDI3ODQ1LDM2MjM1LDIxMzA2LDM0NTAyLDI2MzU0''@;'; put 'put ''LDM2NTI3LDIzNjI0LDM5NTM3LDI4MTkyLDMzNzc0LDMzNzc1LDMzNzc5LDMzNzgwLDMzNzgxLDMzNzgyLDMzNzgzLDMzNzg2LDMzNzg3LDMzNzg4LDMzNzkwLDMzNzkxLDMzNzkyLDMzNzk0LDMzNzk3LDMzNzk5LDMzODAwLDMzODAxLDMzODAyLDMzODA4LDMzODEwLDMzODExLDMzODEyLDMz''@;'; put 'put ''ODEzLDMzODE0LDMzODE1LDMzODE3LDMzODE4LDMzODE5LDMzODIyLDMzODIzLDMzODI0LDMzODI1LDMzODI2LDMzODI3LDMzODMzLDMzODM0LDMzODM1LDMzODM2LDMzODM3LDMzODM4LDMzODM5LDMzODQwLDMzODQyLDMzODQzLDMzODQ0LDMzODQ1LDMzODQ2LDMzODQ3LDMzODQ5LDMzODUw''@;'; put 'put ''LDMzODUxLDMzODU0LDMzODU1LDMzODU2LDMzODU3LDMzODU4LDMzODU5LDMzODYwLDMzODYxLDMzODYzLDMzODY0LDMzODY1LDMzODY2LDMzODY3LDMzODY4LDMzODY5LDMzODcwLDMzODcxLDMzODcyLDMzODc0LDMzODc1LDMzODc2LDMzODc3LDMzODc4LDMzODgwLDMzODg1LDMzODg2LDMz''@;'; put 'put ''ODg3LDMzODg4LDMzODkwLDMzODkyLDMzODkzLDMzODk0LDMzODk1LDMzODk2LDMzODk4LDMzOTAyLDMzOTAzLDMzOTA0LDMzOTA2LDMzOTA4LDMzOTExLDMzOTEzLDMzOTE1LDMzOTE2LDIxNDYyLDIzMDk0LDQwODQzLDM2MjU5LDIxNDM1LDIyMjgwLDM5MDc5LDI2NDM1LDM3Mjc1LDI3ODQ5''@;'; put 'put ''LDIwODQwLDMwMTU0LDI1MzMxLDI5MzU2LDIxMDQ4LDIxMTQ5LDMyNTcwLDI4ODIwLDMwMjY0LDIxMzY0LDQwNTIyLDI3MDYzLDMwODMwLDM4NTkyLDM1MDMzLDMyNjc2LDI4OTgyLDI5MTIzLDIwODczLDI2NTc5LDI5OTI0LDIyNzU2LDI1ODgwLDIyMTk5LDM1NzUzLDM5Mjg2LDI1MjAwLDMy''@;'; put 'put ''NDY5LDI0ODI1LDI4OTA5LDIyNzY0LDIwMTYxLDIwMTU0LDI0NTI1LDM4ODg3LDIwMjE5LDM1NzQ4LDIwOTk1LDIyOTIyLDMyNDI3LDI1MTcyLDIwMTczLDI2MDg1LDI1MTAyLDMzNTkyLDMzOTkzLDMzNjM1LDM0NzAxLDI5MDc2LDI4MzQyLDIzNDgxLDMyNDY2LDIwODg3LDI1NTQ1LDI2NTgw''@;'; put 'put ''LDMyOTA1LDMzNTkzLDM0ODM3LDIwNzU0LDIzNDE4LDIyOTE0LDM2Nzg1LDIwMDgzLDI3NzQxLDIwODM3LDM1MTA5LDM2NzE5LDM4NDQ2LDM0MTIyLDI5NzkwLDM4MTYwLDM4Mzg0LDI4MDcwLDMzNTA5LDI0MzY5LDI1NzQ2LDI3OTIyLDMzODMyLDMzMTM0LDQwMTMxLDIyNjIyLDM2MTg3LDE5''@;'; put 'put ''OTc3LDIxNDQxLDMzOTE3LDMzOTE4LDMzOTE5LDMzOTIwLDMzOTIxLDMzOTIzLDMzOTI0LDMzOTI1LDMzOTI2LDMzOTMwLDMzOTMzLDMzOTM1LDMzOTM2LDMzOTM3LDMzOTM4LDMzOTM5LDMzOTQwLDMzOTQxLDMzOTQyLDMzOTQ0LDMzOTQ2LDMzOTQ3LDMzOTQ5LDMzOTUwLDMzOTUxLDMzOTUy''@;'; put 'put ''LDMzOTU0LDMzOTU1LDMzOTU2LDMzOTU3LDMzOTU4LDMzOTU5LDMzOTYwLDMzOTYxLDMzOTYyLDMzOTYzLDMzOTY0LDMzOTY1LDMzOTY2LDMzOTY4LDMzOTY5LDMzOTcxLDMzOTczLDMzOTc0LDMzOTc1LDMzOTc5LDMzOTgwLDMzOTgyLDMzOTg0LDMzOTg2LDMzOTg3LDMzOTg5LDMzOTkwLDMz''@;'; put 'put ''OTkxLDMzOTkyLDMzOTk1LDMzOTk2LDMzOTk4LDMzOTk5LDM0MDAyLDM0MDA0LDM0MDA1LDM0MDA3LDM0MDA4LDM0MDA5LDM0MDEwLDM0MDExLDM0MDEyLDM0MDE0LDM0MDE3LDM0MDE4LDM0MDIwLDM0MDIzLDM0MDI0LDM0MDI1LDM0MDI2LDM0MDI3LDM0MDI5LDM0MDMwLDM0MDMxLDM0MDMz''@;'; put 'put ''LDM0MDM0LDM0MDM1LDM0MDM2LDM0MDM3LDM0MDM4LDM0MDM5LDM0MDQwLDM0MDQxLDM0MDQyLDM0MDQzLDM0MDQ1LDM0MDQ2LDM0MDQ4LDM0MDQ5LDM0MDUwLDIwMjU0LDI1OTU1LDI2NzA1LDIxOTcxLDIwMDA3LDI1NjIwLDM5NTc4LDI1MTk1LDIzMjM0LDI5NzkxLDMzMzk0LDI4MDczLDI2''@;'; put 'put ''ODYyLDIwNzExLDMzNjc4LDMwNzIyLDI2NDMyLDIxMDQ5LDI3ODAxLDMyNDMzLDIwNjY3LDIxODYxLDI5MDIyLDMxNTc5LDI2MTk0LDI5NjQyLDMzNTE1LDI2NDQxLDIzNjY1LDIxMDI0LDI5MDUzLDM0OTIzLDM4Mzc4LDM4NDg1LDI1Nzk3LDM2MTkzLDMzMjAzLDIxODkyLDI3NzMzLDI1MTU5''@;'; put 'put ''LDMyNTU4LDIyNjc0LDIwMjYwLDIxODMwLDM2MTc1LDI2MTg4LDE5OTc4LDIzNTc4LDM1MDU5LDI2Nzg2LDI1NDIyLDMxMjQ1LDI4OTAzLDMzNDIxLDIxMjQyLDM4OTAyLDIzNTY5LDIxNzM2LDM3MDQ1LDMyNDYxLDIyODgyLDM2MTcwLDM0NTAzLDMzMjkyLDMzMjkzLDM2MTk4LDI1NjY4LDIz''@;'; put 'put ''NTU2LDI0OTEzLDI4MDQxLDMxMDM4LDM1Nzc0LDMwNzc1LDMwMDAzLDIxNjI3LDIwMjgwLDM2NTIzLDI4MTQ1LDIzMDcyLDMyNDUzLDMxMDcwLDI3Nzg0LDIzNDU3LDIzMTU4LDI5OTc4LDMyOTU4LDI0OTEwLDI4MTgzLDIyNzY4LDI5OTgzLDI5OTg5LDI5Mjk4LDIxMzE5LDMyNDk5LDM0MDUx''@;'; put 'put ''LDM0MDUyLDM0MDUzLDM0MDU0LDM0MDU1LDM0MDU2LDM0MDU3LDM0MDU4LDM0MDU5LDM0MDYxLDM0MDYyLDM0MDYzLDM0MDY0LDM0MDY2LDM0MDY4LDM0MDY5LDM0MDcwLDM0MDcyLDM0MDczLDM0MDc1LDM0MDc2LDM0MDc3LDM0MDc4LDM0MDgwLDM0MDgyLDM0MDgzLDM0MDg0LDM0MDg1LDM0''@;'; put 'put ''MDg2LDM0MDg3LDM0MDg4LDM0MDg5LDM0MDkwLDM0MDkzLDM0MDk0LDM0MDk1LDM0MDk2LDM0MDk3LDM0MDk4LDM0MDk5LDM0MTAwLDM0MTAxLDM0MTAyLDM0MTEwLDM0MTExLDM0MTEyLDM0MTEzLDM0MTE0LDM0MTE2LDM0MTE3LDM0MTE4LDM0MTE5LDM0MTIzLDM0MTI0LDM0MTI1LDM0MTI2''@;'; put 'put ''LDM0MTI3LDM0MTI4LDM0MTI5LDM0MTMwLDM0MTMxLDM0MTMyLDM0MTMzLDM0MTM1LDM0MTM2LDM0MTM4LDM0MTM5LDM0MTQwLDM0MTQxLDM0MTQzLDM0MTQ0LDM0MTQ1LDM0MTQ2LDM0MTQ3LDM0MTQ5LDM0MTUwLDM0MTUxLDM0MTUzLDM0MTU0LDM0MTU1LDM0MTU2LDM0MTU3LDM0MTU4LDM0''@;'; put 'put ''MTU5LDM0MTYwLDM0MTYxLDM0MTYzLDM0MTY1LDM0MTY2LDM0MTY3LDM0MTY4LDM0MTcyLDM0MTczLDM0MTc1LDM0MTc2LDM0MTc3LDMwNDY1LDMwNDI3LDIxMDk3LDMyOTg4LDIyMzA3LDI0MDcyLDIyODMzLDI5NDIyLDI2MDQ1LDI4Mjg3LDM1Nzk5LDIzNjA4LDM0NDE3LDIxMzEzLDMwNzA3''@;'; put 'put ''LDI1MzQyLDI2MTAyLDIwMTYwLDM5MTM1LDM0NDMyLDIzNDU0LDM1NzgyLDIxNDkwLDMwNjkwLDIwMzUxLDIzNjMwLDM5NTQyLDIyOTg3LDI0MzM1LDMxMDM0LDIyNzYzLDE5OTkwLDI2NjIzLDIwMTA3LDI1MzI1LDM1NDc1LDM2ODkzLDIxMTgzLDI2MTU5LDIxOTgwLDIyMTI0LDM2ODY2LDIw''@;'; put 'put ''MTgxLDIwMzY1LDM3MzIyLDM5MjgwLDI3NjYzLDI0MDY2LDI0NjQzLDIzNDYwLDM1MjcwLDM1Nzk3LDI1OTEwLDI1MTYzLDM5MzE4LDIzNDMyLDIzNTUxLDI1NDgwLDIxODA2LDIxNDYzLDMwMjQ2LDIwODYxLDM0MDkyLDI2NTMwLDI2ODAzLDI3NTMwLDI1MjM0LDM2NzU1LDIxNDYwLDMzMjk4''@;'; put 'put ''LDI4MTEzLDMwMDk1LDIwMDcwLDM2MTc0LDIzNDA4LDI5MDg3LDM0MjIzLDI2MjU3LDI2MzI5LDMyNjI2LDM0NTYwLDQwNjUzLDQwNzM2LDIzNjQ2LDI2NDE1LDM2ODQ4LDI2NjQxLDI2NDYzLDI1MTAxLDMxNDQ2LDIyNjYxLDI0MjQ2LDI1OTY4LDI4NDY1LDM0MTc4LDM0MTc5LDM0MTgyLDM0''@;'; put 'put ''MTg0LDM0MTg1LDM0MTg2LDM0MTg3LDM0MTg4LDM0MTg5LDM0MTkwLDM0MTkyLDM0MTkzLDM0MTk0LDM0MTk1LDM0MTk2LDM0MTk3LDM0MTk4LDM0MTk5LDM0MjAwLDM0MjAxLDM0MjAyLDM0MjA1LDM0MjA2LDM0MjA3LDM0MjA4LDM0MjA5LDM0MjEwLDM0MjExLDM0MjEzLDM0MjE0LDM0MjE1''@;'; put 'put ''LDM0MjE3LDM0MjE5LDM0MjIwLDM0MjIxLDM0MjI1LDM0MjI2LDM0MjI3LDM0MjI4LDM0MjI5LDM0MjMwLDM0MjMyLDM0MjM0LDM0MjM1LDM0MjM2LDM0MjM3LDM0MjM4LDM0MjM5LDM0MjQwLDM0MjQyLDM0MjQzLDM0MjQ0LDM0MjQ1LDM0MjQ2LDM0MjQ3LDM0MjQ4LDM0MjUwLDM0MjUxLDM0''@;'; put 'put ''MjUyLDM0MjUzLDM0MjU0LDM0MjU3LDM0MjU4LDM0MjYwLDM0MjYyLDM0MjYzLDM0MjY0LDM0MjY1LDM0MjY2LDM0MjY3LDM0MjY5LDM0MjcwLDM0MjcxLDM0MjcyLDM0MjczLDM0Mjc0LDM0Mjc1LDM0Mjc3LDM0Mjc4LDM0Mjc5LDM0MjgwLDM0MjgyLDM0MjgzLDM0Mjg0LDM0Mjg1LDM0Mjg2''@;'; put 'put ''LDM0Mjg3LDM0Mjg4LDM0Mjg5LDM0MjkwLDM0MjkxLDM0MjkyLDM0MjkzLDM0Mjk0LDM0Mjk1LDM0Mjk2LDI0NjYxLDIxMDQ3LDMyNzgxLDI1Njg0LDM0OTI4LDI5OTkzLDI0MDY5LDI2NjQzLDI1MzMyLDM4Njg0LDIxNDUyLDI5MjQ1LDM1ODQxLDI3NzAwLDMwNTYxLDMxMjQ2LDIxNTUwLDMw''@;'; put 'put ''NjM2LDM5MDM0LDMzMzA4LDM1ODI4LDMwODA1LDI2Mzg4LDI4ODY1LDI2MDMxLDI1NzQ5LDIyMDcwLDI0NjA1LDMxMTY5LDIxNDk2LDE5OTk3LDI3NTE1LDMyOTAyLDIzNTQ2LDIxOTg3LDIyMjM1LDIwMjgyLDIwMjg0LDM5MjgyLDI0MDUxLDI2NDk0LDMyODI0LDI0NTc4LDM5MDQyLDM2ODY1''@;'; put 'put ''LDIzNDM1LDM1NzcyLDM1ODI5LDI1NjI4LDMzMzY4LDI1ODIyLDIyMDEzLDMzNDg3LDM3MjIxLDIwNDM5LDMyMDMyLDM2ODk1LDMxOTAzLDIwNzIzLDIyNjA5LDI4MzM1LDIzNDg3LDM1Nzg1LDMyODk5LDM3MjQwLDMzOTQ4LDMxNjM5LDM0NDI5LDM4NTM5LDM4NTQzLDMyNDg1LDM5NjM1LDMw''@;'; put 'put ''ODYyLDIzNjgxLDMxMzE5LDM2OTMwLDM4NTY3LDMxMDcxLDIzMzg1LDI1NDM5LDMxNDk5LDM0MDAxLDI2Nzk3LDIxNzY2LDMyNTUzLDI5NzEyLDMyMDM0LDM4MTQ1LDI1MTUyLDIyNjA0LDIwMTgyLDIzNDI3LDIyOTA1LDIyNjEyLDM0Mjk3LDM0Mjk4LDM0MzAwLDM0MzAxLDM0MzAyLDM0MzA0''@;'; put 'put ''LDM0MzA1LDM0MzA2LDM0MzA3LDM0MzA4LDM0MzEwLDM0MzExLDM0MzEyLDM0MzEzLDM0MzE0LDM0MzE1LDM0MzE2LDM0MzE3LDM0MzE4LDM0MzE5LDM0MzIwLDM0MzIyLDM0MzIzLDM0MzI0LDM0MzI1LDM0MzI3LDM0MzI4LDM0MzI5LDM0MzMwLDM0MzMxLDM0MzMyLDM0MzMzLDM0MzM0LDM0''@;'; put 'put ''MzM1LDM0MzM2LDM0MzM3LDM0MzM4LDM0MzM5LDM0MzQwLDM0MzQxLDM0MzQyLDM0MzQ0LDM0MzQ2LDM0MzQ3LDM0MzQ4LDM0MzQ5LDM0MzUwLDM0MzUxLDM0MzUyLDM0MzUzLDM0MzU0LDM0MzU1LDM0MzU2LDM0MzU3LDM0MzU4LDM0MzU5LDM0MzYxLDM0MzYyLDM0MzYzLDM0MzY1LDM0MzY2''@;'; put 'put ''LDM0MzY3LDM0MzY4LDM0MzY5LDM0MzcwLDM0MzcxLDM0MzcyLDM0MzczLDM0Mzc0LDM0Mzc1LDM0Mzc2LDM0Mzc3LDM0Mzc4LDM0Mzc5LDM0MzgwLDM0Mzg2LDM0Mzg3LDM0Mzg5LDM0MzkwLDM0MzkxLDM0MzkyLDM0MzkzLDM0Mzk1LDM0Mzk2LDM0Mzk3LDM0Mzk5LDM0NDAwLDM0NDAxLDM0''@;'; put 'put ''NDAzLDM0NDA0LDM0NDA1LDM0NDA2LDM0NDA3LDM0NDA4LDM0NDA5LDM0NDEwLDI5NTQ5LDI1Mzc0LDM2NDI3LDM2MzY3LDMyOTc0LDMzNDkyLDI1MjYwLDIxNDg4LDI3ODg4LDM3MjE0LDIyODI2LDI0NTc3LDI3NzYwLDIyMzQ5LDI1Njc0LDM2MTM4LDMwMjUxLDI4MzkzLDIyMzYzLDI3MjY0''@;'; put 'put ''LDMwMTkyLDI4NTI1LDM1ODg1LDM1ODQ4LDIyMzc0LDI3NjMxLDM0OTYyLDMwODk5LDI1NTA2LDIxNDk3LDI4ODQ1LDI3NzQ4LDIyNjE2LDI1NjQyLDIyNTMwLDI2ODQ4LDMzMTc5LDIxNzc2LDMxOTU4LDIwNTA0LDM2NTM4LDI4MTA4LDM2MjU1LDI4OTA3LDI1NDg3LDI4MDU5LDI4MzcyLDMy''@;'; put 'put ''NDg2LDMzNzk2LDI2NjkxLDM2ODY3LDI4MTIwLDM4NTE4LDM1NzUyLDIyODcxLDI5MzA1LDM0Mjc2LDMzMTUwLDMwMTQwLDM1NDY2LDI2Nzk5LDIxMDc2LDM2Mzg2LDM4MTYxLDI1NTUyLDM5MDY0LDM2NDIwLDIxODg0LDIwMzA3LDI2MzY3LDIyMTU5LDI0Nzg5LDI4MDUzLDIxMDU5LDIzNjI1''@;'; put 'put ''LDIyODI1LDI4MTU1LDIyNjM1LDNlNCwyOTk4MCwyNDY4NCwzMzMwMCwzMzA5NCwyNTM2MSwyNjQ2NSwzNjgzNCwzMDUyMiwzNjMzOSwzNjE0OCwzODA4MSwyNDA4NiwyMTM4MSwyMTU0OCwyODg2NywzNDQxMywzNDQxNSwzNDQxNiwzNDQxOCwzNDQxOSwzNDQyMCwzNDQyMSwzNDQyMiwzNDQy''@;'; put 'put ''MywzNDQyNCwzNDQzNSwzNDQzNiwzNDQzNywzNDQzOCwzNDQzOSwzNDQ0MCwzNDQ0MSwzNDQ0NiwzNDQ0NywzNDQ0OCwzNDQ0OSwzNDQ1MCwzNDQ1MiwzNDQ1NCwzNDQ1NSwzNDQ1NiwzNDQ1NywzNDQ1OCwzNDQ1OSwzNDQ2MiwzNDQ2MywzNDQ2NCwzNDQ2NSwzNDQ2NiwzNDQ2OSwzNDQ3MCwz''@;'; put 'put ''NDQ3NSwzNDQ3NywzNDQ3OCwzNDQ4MiwzNDQ4MywzNDQ4NywzNDQ4OCwzNDQ4OSwzNDQ5MSwzNDQ5MiwzNDQ5MywzNDQ5NCwzNDQ5NSwzNDQ5NywzNDQ5OCwzNDQ5OSwzNDUwMSwzNDUwNCwzNDUwOCwzNDUwOSwzNDUxNCwzNDUxNSwzNDUxNywzNDUxOCwzNDUxOSwzNDUyMiwzNDUyNCwzNDUy''@;'; put 'put ''NSwzNDUyOCwzNDUyOSwzNDUzMCwzNDUzMSwzNDUzMywzNDUzNCwzNDUzNSwzNDUzNiwzNDUzOCwzNDUzOSwzNDU0MCwzNDU0MywzNDU0OSwzNDU1MCwzNDU1MSwzNDU1NCwzNDU1NSwzNDU1NiwzNDU1NywzNDU1OSwzNDU2MSwzNDU2NCwzNDU2NSwzNDU2NiwzNDU3MSwzNDU3MiwzNDU3NCwz''@;'; put 'put ''NDU3NSwzNDU3NiwzNDU3NywzNDU4MCwzNDU4MiwyNzcxMiwyNDMxMSwyMDU3MiwyMDE0MSwyNDIzNywyNTQwMiwzMzM1MSwzNjg5MCwyNjcwNCwzNzIzMCwzMDY0MywyMTUxNiwzODEwOCwyNDQyMCwzMTQ2MSwyNjc0MiwyNTQxMywzMTU3MCwzMjQ3OSwzMDE3MSwyMDU5OSwyNTIzNywyMjgz''@;'; put 'put ''NiwzNjg3OSwyMDk4NCwzMTE3MSwzMTM2MSwyMjI3MCwyNDQ2NiwzNjg4NCwyODAzNCwyMzY0OCwyMjMwMywyMTUyMCwyMDgyMCwyODIzNywyMjI0MiwyNTUxMiwzOTA1OSwzMzE1MSwzNDU4MSwzNTExNCwzNjg2NCwyMTUzNCwyMzY2MywzMzIxNiwyNTMwMiwyNTE3NiwzMzA3Myw0MDUwMSwz''@;'; put 'put ''ODQ2NCwzOTUzNCwzOTU0OCwyNjkyNSwyMjk0OSwyNTI5OSwyMTgyMiwyNTM2NiwyMTcwMywzNDUyMSwyNzk2NCwyMzA0MywyOTkyNiwzNDk3MiwyNzQ5OCwyMjgwNiwzNTkxNiwyNDM2NywyODI4NiwyOTYwOSwzOTAzNywyMDAyNCwyODkxOSwyMzQzNiwzMDg3MSwyNTQwNSwyNjIwMiwzMDM1''@;'; put 'put ''OCwyNDc3OSwyMzQ1MSwyMzExMywxOTk3NSwzMzEwOSwyNzc1NCwyOTU3OSwyMDEyOSwyNjUwNSwzMjU5MywyNDQ0OCwyNjEwNiwyNjM5NSwyNDUzNiwyMjkxNiwyMzA0MSwzNDU4NSwzNDU4NywzNDU4OSwzNDU5MSwzNDU5MiwzNDU5NiwzNDU5OCwzNDU5OSwzNDYwMCwzNDYwMiwzNDYwMywz''@;'; put 'put ''NDYwNCwzNDYwNSwzNDYwNywzNDYwOCwzNDYxMCwzNDYxMSwzNDYxMywzNDYxNCwzNDYxNiwzNDYxNywzNDYxOCwzNDYyMCwzNDYyMSwzNDYyNCwzNDYyNSwzNDYyNiwzNDYyNywzNDYyOCwzNDYyOSwzNDYzMCwzNDYzNCwzNDYzNSwzNDYzNywzNDYzOSwzNDY0MCwzNDY0MSwzNDY0MiwzNDY0''@;'; put 'put ''NCwzNDY0NSwzNDY0NiwzNDY0OCwzNDY1MCwzNDY1MSwzNDY1MiwzNDY1MywzNDY1NCwzNDY1NSwzNDY1NywzNDY1OCwzNDY2MiwzNDY2MywzNDY2NCwzNDY2NSwzNDY2NiwzNDY2NywzNDY2OCwzNDY2OSwzNDY3MSwzNDY3MywzNDY3NCwzNDY3NSwzNDY3NywzNDY3OSwzNDY4MCwzNDY4MSwz''@;'; put 'put ''NDY4MiwzNDY4NywzNDY4OCwzNDY4OSwzNDY5MiwzNDY5NCwzNDY5NSwzNDY5NywzNDY5OCwzNDcwMCwzNDcwMiwzNDcwMywzNDcwNCwzNDcwNSwzNDcwNiwzNDcwOCwzNDcwOSwzNDcxMCwzNDcxMiwzNDcxMywzNDcxNCwzNDcxNSwzNDcxNiwzNDcxNywzNDcxOCwzNDcyMCwzNDcyMSwzNDcy''@;'; put 'put ''MiwzNDcyMywzNDcyNCwyNDAxMywyNDQ5NCwyMTM2MSwzODg4NiwzNjgyOSwyNjY5MywyMjI2MCwyMTgwNywyNDc5OSwyMDAyNiwyODQ5MywzMjUwMCwzMzQ3OSwzMzgwNiwyMjk5NiwyMDI1NSwyMDI2NiwyMzYxNCwzMjQyOCwyNjQxMCwzNDA3NCwyMTYxOSwzMDAzMSwzMjk2MywyMTg5MCwz''@;'; put 'put ''OTc1OSwyMDMwMSwyODIwNSwzNTg1OSwyMzU2MSwyNDk0NCwyMTM1NSwzMDIzOSwyODIwMSwzNDQ0MiwyNTk5MSwzODM5NSwzMjQ0MSwyMTU2MywzMTI4MywzMjAxMCwzODM4MiwyMTk4NSwzMjcwNSwyOTkzNCwyNTM3MywzNDU4MywyODA2NSwzMTM4OSwyNTEwNSwyNjAxNywyMTM1MSwyNTU2''@;'; put 'put ''OSwyNzc3OSwyNDA0MywyMTU5NiwzODA1NiwyMDA0NCwyNzc0NSwzNTgyMCwyMzYyNywyNjA4MCwzMzQzNiwyNjc5MSwyMTU2NiwyMTU1NiwyNzU5NSwyNzQ5NCwyMDExNiwyNTQxMCwyMTMyMCwzMzMxMCwyMDIzNywyMDM5OCwyMjM2NiwyNTA5OCwzODY1NCwyNjIxMiwyOTI4OSwyMTI0Nywy''@;'; put 'put ''MTE1MywyNDczNSwzNTgyMywyNjEzMiwyOTA4MSwyNjUxMiwzNTE5OSwzMDgwMiwzMDcxNywyNjIyNCwyMjA3NSwyMTU2MCwzODE3NywyOTMwNiwzNDcyNSwzNDcyNiwzNDcyNywzNDcyOSwzNDczMCwzNDczNCwzNDczNiwzNDczNywzNDczOCwzNDc0MCwzNDc0MiwzNDc0MywzNDc0NCwzNDc0''@;'; put 'put ''NSwzNDc0NywzNDc0OCwzNDc1MCwzNDc1MSwzNDc1MywzNDc1NCwzNDc1NSwzNDc1NiwzNDc1NywzNDc1OSwzNDc2MCwzNDc2MSwzNDc2NCwzNDc2NSwzNDc2NiwzNDc2NywzNDc2OCwzNDc3MiwzNDc3MywzNDc3NCwzNDc3NSwzNDc3NiwzNDc3NywzNDc3OCwzNDc4MCwzNDc4MSwzNDc4Miwz''@;'; put 'put ''NDc4MywzNDc4NSwzNDc4NiwzNDc4NywzNDc4OCwzNDc5MCwzNDc5MSwzNDc5MiwzNDc5MywzNDc5NSwzNDc5NiwzNDc5NywzNDc5OSwzNDgwMCwzNDgwMSwzNDgwMiwzNDgwMywzNDgwNCwzNDgwNSwzNDgwNiwzNDgwNywzNDgwOCwzNDgxMCwzNDgxMSwzNDgxMiwzNDgxMywzNDgxNSwzNDgx''@;'; put 'put ''NiwzNDgxNywzNDgxOCwzNDgyMCwzNDgyMSwzNDgyMiwzNDgyMywzNDgyNCwzNDgyNSwzNDgyNywzNDgyOCwzNDgyOSwzNDgzMCwzNDgzMSwzNDgzMiwzNDgzMywzNDgzNCwzNDgzNiwzNDgzOSwzNDg0MCwzNDg0MSwzNDg0MiwzNDg0NCwzNDg0NSwzNDg0NiwzNDg0NywzNDg0OCwzNDg1MSwz''@;'; put 'put ''MTIzMiwyNDY4NywyNDA3NiwyNDcxMywzMzE4MSwyMjgwNSwyNDc5NiwyOTA2MCwyODkxMSwyODMzMCwyNzcyOCwyOTMxMiwyNzI2OCwzNDk4OSwyNDEwOSwyMDA2NCwyMzIxOSwyMTkxNiwzODExNSwyNzkyNywzMTk5NSwzODU1MywyNTEwMywzMjQ1NCwzMDYwNiwzNDQzMCwyMTI4MywzODY4''@;'; put 'put ''NiwzNjc1OCwyNjI0NywyMzc3NywyMDM4NCwyOTQyMSwxOTk3OSwyMTQxNCwyMjc5OSwyMTUyMywyNTQ3MiwzODE4NCwyMDgwOCwyMDE4NSw0MDA5MiwzMjQyMCwyMTY4OCwzNjEzMiwzNDkwMCwzMzMzNSwzODM4NiwyODA0NiwyNDM1OCwyMzI0NCwyNjE3NCwzODUwNSwyOTYxNiwyOTQ4Niwy''@;'; put 'put ''MTQzOSwzMzE0NiwzOTMwMSwzMjY3MywyMzQ2NiwzODUxOSwzODQ4MCwzMjQ0NywzMDQ1NiwyMTQxMCwzODI2MiwzOTMyMSwzMTY2NSwzNTE0MCwyODI0OCwyMDA2NSwzMjcyNCwzMTA3NywzNTgxNCwyNDgxOSwyMTcwOSwyMDEzOSwzOTAzMywyNDA1NSwyNzIzMywyMDY4NywyMTUyMSwzNTkz''@;'; put 'put ''NywzMzgzMSwzMDgxMywzODY2MCwyMTA2NiwyMTc0MiwyMjE3OSwzODE0NCwyODA0MCwyMzQ3NywyODEwMiwyNjE5NSwzNDg1MiwzNDg1MywzNDg1NCwzNDg1NSwzNDg1NiwzNDg1NywzNDg1OCwzNDg1OSwzNDg2MCwzNDg2MSwzNDg2MiwzNDg2MywzNDg2NCwzNDg2NSwzNDg2NywzNDg2OCwz''@;'; put 'put ''NDg2OSwzNDg3MCwzNDg3MSwzNDg3MiwzNDg3NCwzNDg3NSwzNDg3NywzNDg3OCwzNDg3OSwzNDg4MSwzNDg4MiwzNDg4MywzNDg4NiwzNDg4NywzNDg4OCwzNDg4OSwzNDg5MCwzNDg5MSwzNDg5NCwzNDg5NSwzNDg5NiwzNDg5NywzNDg5OCwzNDg5OSwzNDkwMSwzNDkwMiwzNDkwNCwzNDkw''@;'; put 'put ''NiwzNDkwNywzNDkwOCwzNDkwOSwzNDkxMCwzNDkxMSwzNDkxMiwzNDkxOCwzNDkxOSwzNDkyMiwzNDkyNSwzNDkyNywzNDkyOSwzNDkzMSwzNDkzMiwzNDkzMywzNDkzNCwzNDkzNiwzNDkzNywzNDkzOCwzNDkzOSwzNDk0MCwzNDk0NCwzNDk0NywzNDk1MCwzNDk1MSwzNDk1MywzNDk1NCwz''@;'; put 'put ''NDk1NiwzNDk1OCwzNDk1OSwzNDk2MCwzNDk2MSwzNDk2MywzNDk2NCwzNDk2NSwzNDk2NywzNDk2OCwzNDk2OSwzNDk3MCwzNDk3MSwzNDk3MywzNDk3NCwzNDk3NSwzNDk3NiwzNDk3NywzNDk3OSwzNDk4MSwzNDk4MiwzNDk4MywzNDk4NCwzNDk4NSwzNDk4NiwyMzU2NywyMzM4OSwyNjY1''@;'; put 'put ''NywzMjkxOCwyMTg4MCwzMTUwNSwyNTkyOCwyNjk2NCwyMDEyMywyNzQ2MywzNDYzOCwzODc5NSwyMTMyNywyNTM3NSwyNTY1OCwzNzAzNCwyNjAxMiwzMjk2MSwzNTg1NiwyMDg4OSwyNjgwMCwyMTM2OCwzNDgwOSwyNTAzMiwyNzg0NCwyNzg5OSwzNTg3NCwyMzYzMywzNDIxOCwzMzQ1NSwz''@;'; put 'put ''ODE1NiwyNzQyNywzNjc2MywyNjAzMiwyNDU3MSwyNDUxNSwyMDQ0OSwzNDg4NSwyNjE0MywzMzEyNSwyOTQ4MSwyNDgyNiwyMDg1MiwyMTAwOSwyMjQxMSwyNDQxOCwzNzAyNiwzNDg5MiwzNzI2NiwyNDE4NCwyNjQ0NywyNDYxNSwyMjk5NSwyMDgwNCwyMDk4MiwzMzAxNiwyMTI1NiwyNzc2''@;'; put 'put ''OSwzODU5NiwyOTA2NiwyMDI0MSwyMDQ2MiwzMjY3MCwyNjQyOSwyMTk1NywzODE1MiwzMTE2OCwzNDk2NiwzMjQ4MywyMjY4NywyNTEwMCwzODY1NiwzNDM5NCwyMjA0MCwzOTAzNSwyNDQ2NCwzNTc2OCwzMzk4OCwzNzIwNywyMTQ2NSwyNjA5MywyNDIwNywzMDA0NCwyNDY3NiwzMjExMCwy''@;'; put 'put ''MzE2NywzMjQ5MCwzMjQ5MywzNjcxMywyMTkyNywyMzQ1OSwyNDc0OCwyNjA1OSwyOTU3MiwzNDk4OCwzNDk5MCwzNDk5MSwzNDk5MiwzNDk5NCwzNDk5NSwzNDk5NiwzNDk5NywzNDk5OCwzNWUzLDM1MDAxLDM1MDAyLDM1MDAzLDM1MDA1LDM1MDA2LDM1MDA3LDM1MDA4LDM1MDExLDM1MDEy''@;'; put 'put ''LDM1MDE1LDM1MDE2LDM1MDE4LDM1MDE5LDM1MDIwLDM1MDIxLDM1MDIzLDM1MDI0LDM1MDI1LDM1MDI3LDM1MDMwLDM1MDMxLDM1MDM0LDM1MDM1LDM1MDM2LDM1MDM3LDM1MDM4LDM1MDQwLDM1MDQxLDM1MDQ2LDM1MDQ3LDM1MDQ5LDM1MDUwLDM1MDUxLDM1MDUyLDM1MDUzLDM1MDU0LDM1''@;'; put 'put ''MDU1LDM1MDU4LDM1MDYxLDM1MDYyLDM1MDYzLDM1MDY2LDM1MDY3LDM1MDY5LDM1MDcxLDM1MDcyLDM1MDczLDM1MDc1LDM1MDc2LDM1MDc3LDM1MDc4LDM1MDc5LDM1MDgwLDM1MDgxLDM1MDgzLDM1MDg0LDM1MDg1LDM1MDg2LDM1MDg3LDM1MDg5LDM1MDkyLDM1MDkzLDM1MDk0LDM1MDk1''@;'; put 'put ''LDM1MDk2LDM1MTAwLDM1MTAxLDM1MTAyLDM1MTAzLDM1MTA0LDM1MTA2LDM1MTA3LDM1MTA4LDM1MTEwLDM1MTExLDM1MTEyLDM1MTEzLDM1MTE2LDM1MTE3LDM1MTE4LDM1MTE5LDM1MTIxLDM1MTIyLDM1MTIzLDM1MTI1LDM1MTI3LDM2ODczLDMwMzA3LDMwNTA1LDMyNDc0LDM4NzcyLDM0''@;'; put 'put ''MjAzLDIzMzk4LDMxMzQ4LDM4NjM0LDM0ODgwLDIxMTk1LDI5MDcxLDI0NDkwLDI2MDkyLDM1ODEwLDIzNTQ3LDM5NTM1LDI0MDMzLDI3NTI5LDI3NzM5LDM1NzU3LDM1NzU5LDM2ODc0LDM2ODA1LDIxMzg3LDI1Mjc2LDQwNDg2LDQwNDkzLDIxNTY4LDIwMDExLDMzNDY5LDI5MjczLDM0NDYw''@;'; put 'put ''LDIzODMwLDM0OTA1LDI4MDc5LDM4NTk3LDIxNzEzLDIwMTIyLDM1NzY2LDI4OTM3LDIxNjkzLDM4NDA5LDI4ODk1LDI4MTUzLDMwNDE2LDIwMDA1LDMwNzQwLDM0NTc4LDIzNzIxLDI0MzEwLDM1MzI4LDM5MDY4LDM4NDE0LDI4ODE0LDI3ODM5LDIyODUyLDI1NTEzLDMwNTI0LDM0ODkzLDI4''@;'; put 'put ''NDM2LDMzMzk1LDIyNTc2LDI5MTQxLDIxMzg4LDMwNzQ2LDM4NTkzLDIxNzYxLDI0NDIyLDI4OTc2LDIzNDc2LDM1ODY2LDM5NTY0LDI3NTIzLDIyODMwLDQwNDk1LDMxMjA3LDI2NDcyLDI1MTk2LDIwMzM1LDMwMTEzLDMyNjUwLDI3OTE1LDM4NDUxLDI3Njg3LDIwMjA4LDMwMTYyLDIwODU5''@;'; put 'put ''LDI2Njc5LDI4NDc4LDM2OTkyLDMzMTM2LDIyOTM0LDI5ODE0LDM1MTI4LDM1MTI5LDM1MTMwLDM1MTMxLDM1MTMyLDM1MTMzLDM1MTM0LDM1MTM1LDM1MTM2LDM1MTM4LDM1MTM5LDM1MTQxLDM1MTQyLDM1MTQzLDM1MTQ0LDM1MTQ1LDM1MTQ2LDM1MTQ3LDM1MTQ4LDM1MTQ5LDM1MTUwLDM1''@;'; put 'put ''MTUxLDM1MTUyLDM1MTUzLDM1MTU0LDM1MTU1LDM1MTU2LDM1MTU3LDM1MTU4LDM1MTU5LDM1MTYwLDM1MTYxLDM1MTYyLDM1MTYzLDM1MTY0LDM1MTY1LDM1MTY4LDM1MTY5LDM1MTcwLDM1MTcxLDM1MTcyLDM1MTczLDM1MTc1LDM1MTc2LDM1MTc3LDM1MTc4LDM1MTc5LDM1MTgwLDM1MTgx''@;'; put 'put ''LDM1MTgyLDM1MTgzLDM1MTg0LDM1MTg1LDM1MTg2LDM1MTg3LDM1MTg4LDM1MTg5LDM1MTkwLDM1MTkxLDM1MTkyLDM1MTkzLDM1MTk0LDM1MTk2LDM1MTk3LDM1MTk4LDM1MjAwLDM1MjAyLDM1MjA0LDM1MjA1LDM1MjA3LDM1MjA4LDM1MjA5LDM1MjEwLDM1MjExLDM1MjEyLDM1MjEzLDM1''@;'; put 'put ''MjE0LDM1MjE1LDM1MjE2LDM1MjE3LDM1MjE4LDM1MjE5LDM1MjIwLDM1MjIxLDM1MjIyLDM1MjIzLDM1MjI0LDM1MjI1LDM1MjI2LDM1MjI3LDM1MjI4LDM1MjI5LDM1MjMwLDM1MjMxLDM1MjMyLDM1MjMzLDI1NjcxLDIzNTkxLDM2OTY1LDMxMzc3LDM1ODc1LDIzMDAyLDIxNjc2LDMzMjgw''@;'; put 'put ''LDMzNjQ3LDM1MjAxLDMyNzY4LDI2OTI4LDIyMDk0LDMyODIyLDI5MjM5LDM3MzI2LDIwOTE4LDIwMDYzLDM5MDI5LDI1NDk0LDE5OTk0LDIxNDk0LDI2MzU1LDMzMDk5LDIyODEyLDI4MDgyLDE5OTY4LDIyNzc3LDIxMzA3LDI1NTU4LDM4MTI5LDIwMzgxLDIwMjM0LDM0OTE1LDM5MDU2LDIy''@;'; put 'put ''ODM5LDM2OTUxLDMxMjI3LDIwMjAyLDMzMDA4LDMwMDk3LDI3Nzc4LDIzNDUyLDIzMDE2LDI0NDEzLDI2ODg1LDM0NDMzLDIwNTA2LDI0MDUwLDIwMDU3LDMwNjkxLDIwMTk3LDMzNDAyLDI1MjMzLDI2MTMxLDM3MDA5LDIzNjczLDIwMTU5LDI0NDQxLDMzMjIyLDM2OTIwLDMyOTAwLDMwMTIz''@;'; put 'put ''LDIwMTM0LDM1MDI4LDI0ODQ3LDI3NTg5LDI0NTE4LDIwMDQxLDMwNDEwLDI4MzIyLDM1ODExLDM1NzU4LDM1ODUwLDM1NzkzLDI0MzIyLDMyNzY0LDMyNzE2LDMyNDYyLDMzNTg5LDMzNjQzLDIyMjQwLDI3NTc1LDM4ODk5LDM4NDUyLDIzMDM1LDIxNTM1LDM4MTM0LDI4MTM5LDIzNDkzLDM5''@;'; put 'put ''Mjc4LDIzNjA5LDI0MzQxLDM4NTQ0LDM1MjM0LDM1MjM1LDM1MjM2LDM1MjM3LDM1MjM4LDM1MjM5LDM1MjQwLDM1MjQxLDM1MjQyLDM1MjQzLDM1MjQ0LDM1MjQ1LDM1MjQ2LDM1MjQ3LDM1MjQ4LDM1MjQ5LDM1MjUwLDM1MjUxLDM1MjUyLDM1MjUzLDM1MjU0LDM1MjU1LDM1MjU2LDM1MjU3''@;'; put 'put ''LDM1MjU4LDM1MjU5LDM1MjYwLDM1MjYxLDM1MjYyLDM1MjYzLDM1MjY0LDM1MjY3LDM1Mjc3LDM1MjgzLDM1Mjg0LDM1Mjg1LDM1Mjg3LDM1Mjg4LDM1Mjg5LDM1MjkxLDM1MjkzLDM1Mjk1LDM1Mjk2LDM1Mjk3LDM1Mjk4LDM1MzAwLDM1MzAzLDM1MzA0LDM1MzA1LDM1MzA2LDM1MzA4LDM1''@;'; put 'put ''MzA5LDM1MzEwLDM1MzEyLDM1MzEzLDM1MzE0LDM1MzE2LDM1MzE3LDM1MzE4LDM1MzE5LDM1MzIwLDM1MzIxLDM1MzIyLDM1MzIzLDM1MzI0LDM1MzI1LDM1MzI2LDM1MzI3LDM1MzI5LDM1MzMwLDM1MzMxLDM1MzMyLDM1MzMzLDM1MzM0LDM1MzM2LDM1MzM3LDM1MzM4LDM1MzM5LDM1MzQw''@;'; put 'put ''LDM1MzQxLDM1MzQyLDM1MzQzLDM1MzQ0LDM1MzQ1LDM1MzQ2LDM1MzQ3LDM1MzQ4LDM1MzQ5LDM1MzUwLDM1MzUxLDM1MzUyLDM1MzUzLDM1MzU0LDM1MzU1LDM1MzU2LDM1MzU3LDIxMzYwLDMzNTIxLDI3MTg1LDIzMTU2LDQwNTYwLDI0MjEyLDMyNTUyLDMzNzIxLDMzODI4LDMzODI5LDMz''@;'; put 'put ''NjM5LDM0NjMxLDM2ODE0LDM2MTk0LDMwNDA4LDI0NDMzLDM5MDYyLDMwODI4LDI2MTQ0LDIxNzI3LDI1MzE3LDIwMzIzLDMzMjE5LDMwMTUyLDI0MjQ4LDM4NjA1LDM2MzYyLDM0NTUzLDIxNjQ3LDI3ODkxLDI4MDQ0LDI3NzA0LDI0NzAzLDIxMTkxLDI5OTkyLDI0MTg5LDIwMjQ4LDI0NzM2''@;'; put 'put ''LDI0NTUxLDIzNTg4LDMwMDAxLDM3MDM4LDM4MDgwLDI5MzY5LDI3ODMzLDI4MjE2LDM3MTkzLDI2Mzc3LDIxNDUxLDIxNDkxLDIwMzA1LDM3MzIxLDM1ODI1LDIxNDQ4LDI0MTg4LDM2ODAyLDI4MTMyLDIwMTEwLDMwNDAyLDI3MDE0LDM0Mzk4LDI0ODU4LDMzMjg2LDIwMzEzLDIwNDQ2LDM2''@;'; put 'put ''OTI2LDQwMDYwLDI0ODQxLDI4MTg5LDI4MTgwLDM4NTMzLDIwMTA0LDIzMDg5LDM4NjMyLDE5OTgyLDIzNjc5LDMxMTYxLDIzNDMxLDM1ODIxLDMyNzAxLDI5NTc3LDIyNDk1LDMzNDE5LDM3MDU3LDIxNTA1LDM2OTM1LDIxOTQ3LDIzNzg2LDI0NDgxLDI0ODQwLDI3NDQyLDI5NDI1LDMyOTQ2''@;'; put 'put ''LDM1NDY1LDM1MzU4LDM1MzU5LDM1MzYwLDM1MzYxLDM1MzYyLDM1MzYzLDM1MzY0LDM1MzY1LDM1MzY2LDM1MzY3LDM1MzY4LDM1MzY5LDM1MzcwLDM1MzcxLDM1MzcyLDM1MzczLDM1Mzc0LDM1Mzc1LDM1Mzc2LDM1Mzc3LDM1Mzc4LDM1Mzc5LDM1MzgwLDM1MzgxLDM1MzgyLDM1MzgzLDM1''@;'; put 'put ''Mzg0LDM1Mzg1LDM1Mzg2LDM1Mzg3LDM1Mzg4LDM1Mzg5LDM1MzkxLDM1MzkyLDM1MzkzLDM1Mzk0LDM1Mzk1LDM1Mzk2LDM1Mzk3LDM1Mzk4LDM1Mzk5LDM1NDAxLDM1NDAyLDM1NDAzLDM1NDA0LDM1NDA1LDM1NDA2LDM1NDA3LDM1NDA4LDM1NDA5LDM1NDEwLDM1NDExLDM1NDEyLDM1NDEz''@;'; put 'put ''LDM1NDE0LDM1NDE1LDM1NDE2LDM1NDE3LDM1NDE4LDM1NDE5LDM1NDIwLDM1NDIxLDM1NDIyLDM1NDIzLDM1NDI0LDM1NDI1LDM1NDI2LDM1NDI3LDM1NDI4LDM1NDI5LDM1NDMwLDM1NDMxLDM1NDMyLDM1NDMzLDM1NDM0LDM1NDM1LDM1NDM2LDM1NDM3LDM1NDM4LDM1NDM5LDM1NDQwLDM1''@;'; put 'put ''NDQxLDM1NDQyLDM1NDQzLDM1NDQ0LDM1NDQ1LDM1NDQ2LDM1NDQ3LDM1NDQ4LDM1NDUwLDM1NDUxLDM1NDUyLDM1NDUzLDM1NDU0LDM1NDU1LDM1NDU2LDI4MDIwLDIzNTA3LDM1MDI5LDM5MDQ0LDM1OTQ3LDM5NTMzLDQwNDk5LDI4MTcwLDIwOTAwLDIwODAzLDIyNDM1LDM0OTQ1LDIxNDA3''@;'; put 'put ''LDI1NTg4LDM2NzU3LDIyMjUzLDIxNTkyLDIyMjc4LDI5NTAzLDI4MzA0LDMyNTM2LDM2ODI4LDMzNDg5LDI0ODk1LDI0NjE2LDM4NDk4LDI2MzUyLDMyNDIyLDM2MjM0LDM2MjkxLDM4MDUzLDIzNzMxLDMxOTA4LDI2Mzc2LDI0NzQyLDM4NDA1LDMyNzkyLDIwMTEzLDM3MDk1LDIxMjQ4LDM4''@;'; put 'put ''NTA0LDIwODAxLDM2ODE2LDM0MTY0LDM3MjEzLDI2MTk3LDM4OTAxLDIzMzgxLDIxMjc3LDMwNzc2LDI2NDM0LDI2Njg1LDIxNzA1LDI4Nzk4LDIzNDcyLDM2NzMzLDIwODc3LDIyMzEyLDIxNjgxLDI1ODc0LDI2MjQyLDM2MTkwLDM2MTYzLDMzMDM5LDMzOTAwLDM2OTczLDMxOTY3LDIwOTkx''@;'; put 'put ''LDM0Mjk5LDI2NTMxLDI2MDg5LDI4NTc3LDM0NDY4LDM2NDgxLDIyMTIyLDM2ODk2LDMwMzM4LDI4NzkwLDI5MTU3LDM2MTMxLDI1MzIxLDIxMDE3LDI3OTAxLDM2MTU2LDI0NTkwLDIyNjg2LDI0OTc0LDI2MzY2LDM2MTkyLDI1MTY2LDIxOTM5LDI4MTk1LDI2NDEzLDM2NzExLDM1NDU3LDM1''@;'; put 'put ''NDU4LDM1NDU5LDM1NDYwLDM1NDYxLDM1NDYyLDM1NDYzLDM1NDY0LDM1NDY3LDM1NDY4LDM1NDY5LDM1NDcwLDM1NDcxLDM1NDcyLDM1NDczLDM1NDc0LDM1NDc2LDM1NDc3LDM1NDc4LDM1NDc5LDM1NDgwLDM1NDgxLDM1NDgyLDM1NDgzLDM1NDg0LDM1NDg1LDM1NDg2LDM1NDg3LDM1NDg4''@;'; put 'put ''LDM1NDg5LDM1NDkwLDM1NDkxLDM1NDkyLDM1NDkzLDM1NDk0LDM1NDk1LDM1NDk2LDM1NDk3LDM1NDk4LDM1NDk5LDM1NTAwLDM1NTAxLDM1NTAyLDM1NTAzLDM1NTA0LDM1NTA1LDM1NTA2LDM1NTA3LDM1NTA4LDM1NTA5LDM1NTEwLDM1NTExLDM1NTEyLDM1NTEzLDM1NTE0LDM1NTE1LDM1''@;'; put 'put ''NTE2LDM1NTE3LDM1NTE4LDM1NTE5LDM1NTIwLDM1NTIxLDM1NTIyLDM1NTIzLDM1NTI0LDM1NTI1LDM1NTI2LDM1NTI3LDM1NTI4LDM1NTI5LDM1NTMwLDM1NTMxLDM1NTMyLDM1NTMzLDM1NTM0LDM1NTM1LDM1NTM2LDM1NTM3LDM1NTM4LDM1NTM5LDM1NTQwLDM1NTQxLDM1NTQyLDM1NTQz''@;'; put 'put ''LDM1NTQ0LDM1NTQ1LDM1NTQ2LDM1NTQ3LDM1NTQ4LDM1NTQ5LDM1NTUwLDM1NTUxLDM1NTUyLDM1NTUzLDM1NTU0LDM1NTU1LDM4MTEzLDM4MzkyLDMwNTA0LDI2NjI5LDI3MDQ4LDIxNjQzLDIwMDQ1LDI4ODU2LDM1Nzg0LDI1Njg4LDI1OTk1LDIzNDI5LDMxMzY0LDIwNTM4LDIzNTI4LDMw''@;'; put 'put ''NjUxLDI3NjE3LDM1NDQ5LDMxODk2LDI3ODM4LDMwNDE1LDI2MDI1LDM2NzU5LDIzODUzLDIzNjM3LDM0MzYwLDI2NjMyLDIxMzQ0LDI1MTEyLDMxNDQ5LDI4MjUxLDMyNTA5LDI3MTY3LDMxNDU2LDI0NDMyLDI4NDY3LDI0MzUyLDI1NDg0LDI4MDcyLDI2NDU0LDE5OTc2LDI0MDgwLDM2MTM0''@;'; put 'put ''LDIwMTgzLDMyOTYwLDMwMjYwLDM4NTU2LDI1MzA3LDI2MTU3LDI1MjE0LDI3ODM2LDM2MjEzLDI5MDMxLDMyNjE3LDIwODA2LDMyOTAzLDIxNDg0LDM2OTc0LDI1MjQwLDIxNzQ2LDM0NTQ0LDM2NzYxLDMyNzczLDM4MTY3LDM0MDcxLDM2ODI1LDI3OTkzLDI5NjQ1LDI2MDE1LDMwNDk1LDI5''@;'; put 'put ''OTU2LDMwNzU5LDMzMjc1LDM2MTI2LDM4MDI0LDIwMzkwLDI2NTE3LDMwMTM3LDM1Nzg2LDM4NjYzLDI1MzkxLDM4MjE1LDM4NDUzLDMzOTc2LDI1Mzc5LDMwNTI5LDI0NDQ5LDI5NDI0LDIwMTA1LDI0NTk2LDI1OTcyLDI1MzI3LDI3NDkxLDI1OTE5LDM1NTU2LDM1NTU3LDM1NTU4LDM1NTU5''@;'; put 'put ''LDM1NTYwLDM1NTYxLDM1NTYyLDM1NTYzLDM1NTY0LDM1NTY1LDM1NTY2LDM1NTY3LDM1NTY4LDM1NTY5LDM1NTcwLDM1NTcxLDM1NTcyLDM1NTczLDM1NTc0LDM1NTc1LDM1NTc2LDM1NTc3LDM1NTc4LDM1NTc5LDM1NTgwLDM1NTgxLDM1NTgyLDM1NTgzLDM1NTg0LDM1NTg1LDM1NTg2LDM1''@;'; put 'put ''NTg3LDM1NTg4LDM1NTg5LDM1NTkwLDM1NTkyLDM1NTkzLDM1NTk0LDM1NTk1LDM1NTk2LDM1NTk3LDM1NTk4LDM1NTk5LDM1NjAwLDM1NjAxLDM1NjAyLDM1NjAzLDM1NjA0LDM1NjA1LDM1NjA2LDM1NjA3LDM1NjA4LDM1NjA5LDM1NjEwLDM1NjExLDM1NjEyLDM1NjEzLDM1NjE0LDM1NjE1''@;'; put 'put ''LDM1NjE2LDM1NjE3LDM1NjE4LDM1NjE5LDM1NjIwLDM1NjIxLDM1NjIzLDM1NjI0LDM1NjI1LDM1NjI2LDM1NjI3LDM1NjI4LDM1NjI5LDM1NjMwLDM1NjMxLDM1NjMyLDM1NjMzLDM1NjM0LDM1NjM1LDM1NjM2LDM1NjM3LDM1NjM4LDM1NjM5LDM1NjQwLDM1NjQxLDM1NjQyLDM1NjQzLDM1''@;'; put 'put ''NjQ0LDM1NjQ1LDM1NjQ2LDM1NjQ3LDM1NjQ4LDM1NjQ5LDM1NjUwLDM1NjUxLDM1NjUyLDM1NjUzLDI0MTAzLDMwMTUxLDM3MDczLDM1Nzc3LDMzNDM3LDI2NTI1LDI1OTAzLDIxNTUzLDM0NTg0LDMwNjkzLDMyOTMwLDMzMDI2LDI3NzEzLDIwMDQzLDMyNDU1LDMyODQ0LDMwNDUyLDI2ODkz''@;'; put 'put ''LDI3NTQyLDI1MTkxLDIwNTQwLDIwMzU2LDIyMzM2LDI1MzUxLDI3NDkwLDM2Mjg2LDIxNDgyLDI2MDg4LDMyNDQwLDI0NTM1LDI1MzcwLDI1NTI3LDMzMjY3LDMzMjY4LDMyNjIyLDI0MDkyLDIzNzY5LDIxMDQ2LDI2MjM0LDMxMjA5LDMxMjU4LDM2MTM2LDI4ODI1LDMwMTY0LDI4MzgyLDI3''@;'; put 'put ''ODM1LDMxMzc4LDIwMDEzLDMwNDA1LDI0NTQ0LDM4MDQ3LDM0OTM1LDMyNDU2LDMxMTgxLDMyOTU5LDM3MzI1LDIwMjEwLDIwMjQ3LDMzMzExLDIxNjA4LDI0MDMwLDI3OTU0LDM1Nzg4LDMxOTA5LDM2NzI0LDMyOTIwLDI0MDkwLDIxNjUwLDMwMzg1LDIzNDQ5LDI2MTcyLDM5NTg4LDI5NjY0''@;'; put 'put ''LDI2NjY2LDM0NTIzLDI2NDE3LDI5NDgyLDM1ODMyLDM1ODAzLDM2ODgwLDMxNDgxLDI4ODkxLDI5MDM4LDI1Mjg0LDMwNjMzLDIyMDY1LDIwMDI3LDMzODc5LDI2NjA5LDIxMTYxLDM0NDk2LDM2MTQyLDM4MTM2LDMxNTY5LDM1NjU0LDM1NjU1LDM1NjU2LDM1NjU3LDM1NjU4LDM1NjU5LDM1''@;'; put 'put ''NjYwLDM1NjYxLDM1NjYyLDM1NjYzLDM1NjY0LDM1NjY1LDM1NjY2LDM1NjY3LDM1NjY4LDM1NjY5LDM1NjcwLDM1NjcxLDM1NjcyLDM1NjczLDM1Njc0LDM1Njc1LDM1Njc2LDM1Njc3LDM1Njc4LDM1Njc5LDM1NjgwLDM1NjgxLDM1NjgyLDM1NjgzLDM1Njg0LDM1Njg1LDM1Njg3LDM1Njg4''@;'; put 'put ''LDM1Njg5LDM1NjkwLDM1NjkxLDM1NjkzLDM1Njk0LDM1Njk1LDM1Njk2LDM1Njk3LDM1Njk4LDM1Njk5LDM1NzAwLDM1NzAxLDM1NzAyLDM1NzAzLDM1NzA0LDM1NzA1LDM1NzA2LDM1NzA3LDM1NzA4LDM1NzA5LDM1NzEwLDM1NzExLDM1NzEyLDM1NzEzLDM1NzE0LDM1NzE1LDM1NzE2LDM1''@;'; put 'put ''NzE3LDM1NzE4LDM1NzE5LDM1NzIwLDM1NzIxLDM1NzIyLDM1NzIzLDM1NzI0LDM1NzI1LDM1NzI2LDM1NzI3LDM1NzI4LDM1NzI5LDM1NzMwLDM1NzMxLDM1NzMyLDM1NzMzLDM1NzM0LDM1NzM1LDM1NzM2LDM1NzM3LDM1NzM4LDM1NzM5LDM1NzQwLDM1NzQxLDM1NzQyLDM1NzQzLDM1NzU2''@;'; put 'put ''LDM1NzYxLDM1NzcxLDM1NzgzLDM1NzkyLDM1ODE4LDM1ODQ5LDM1ODcwLDIwMzAzLDI3ODgwLDMxMDY5LDM5NTQ3LDI1MjM1LDI5MjI2LDI1MzQxLDE5OTg3LDMwNzQyLDM2NzE2LDI1Nzc2LDM2MTg2LDMxNjg2LDI2NzI5LDI0MTk2LDM1MDEzLDIyOTE4LDI1NzU4LDIyNzY2LDI5MzY2LDI2''@;'; put 'put ''ODk0LDM4MTgxLDM2ODYxLDM2MTg0LDIyMzY4LDMyNTEyLDM1ODQ2LDIwOTM0LDI1NDE3LDI1MzA1LDIxMzMxLDI2NzAwLDI5NzMwLDMzNTM3LDM3MTk2LDIxODI4LDMwNTI4LDI4Nzk2LDI3OTc4LDIwODU3LDIxNjcyLDM2MTY0LDIzMDM5LDI4MzYzLDI4MTAwLDIzMzg4LDMyMDQzLDIwMTgw''@;'; put 'put ''LDMxODY5LDI4MzcxLDIzMzc2LDMzMjU4LDI4MTczLDIzMzgzLDM5NjgzLDI2ODM3LDM2Mzk0LDIzNDQ3LDMyNTA4LDI0NjM1LDMyNDM3LDM3MDQ5LDM2MjA4LDIyODYzLDI1NTQ5LDMxMTk5LDM2Mjc1LDIxMzMwLDI2MDYzLDMxMDYyLDM1NzgxLDM4NDU5LDMyNDUyLDM4MDc1LDMyMzg2LDIy''@;'; put 'put ''MDY4LDM3MjU3LDI2MzY4LDMyNjE4LDIzNTYyLDM2OTgxLDI2MTUyLDI0MDM4LDIwMzA0LDI2NTkwLDIwNTcwLDIwMzE2LDIyMzUyLDI0MjMxLDU5NDA4LDU5NDA5LDU5NDEwLDU5NDExLDU5NDEyLDM1ODk2LDM1ODk3LDM1ODk4LDM1ODk5LDM1OTAwLDM1OTAxLDM1OTAyLDM1OTAzLDM1OTA0''@;'; put 'put ''LDM1OTA2LDM1OTA3LDM1OTA4LDM1OTA5LDM1OTEyLDM1OTE0LDM1OTE1LDM1OTE3LDM1OTE4LDM1OTE5LDM1OTIwLDM1OTIxLDM1OTIyLDM1OTIzLDM1OTI0LDM1OTI2LDM1OTI3LDM1OTI4LDM1OTI5LDM1OTMxLDM1OTMyLDM1OTMzLDM1OTM0LDM1OTM1LDM1OTM2LDM1OTM5LDM1OTQwLDM1''@;'; put 'put ''OTQxLDM1OTQyLDM1OTQzLDM1OTQ0LDM1OTQ1LDM1OTQ4LDM1OTQ5LDM1OTUwLDM1OTUxLDM1OTUyLDM1OTUzLDM1OTU0LDM1OTU2LDM1OTU3LDM1OTU4LDM1OTU5LDM1OTYzLDM1OTY0LDM1OTY1LDM1OTY2LDM1OTY3LDM1OTY4LDM1OTY5LDM1OTcxLDM1OTcyLDM1OTc0LDM1OTc1LDM1OTc2''@;'; put 'put ''LDM1OTc5LDM1OTgxLDM1OTgyLDM1OTgzLDM1OTg0LDM1OTg1LDM1OTg2LDM1OTg3LDM1OTg5LDM1OTkwLDM1OTkxLDM1OTkzLDM1OTk0LDM1OTk1LDM1OTk2LDM1OTk3LDM1OTk4LDM1OTk5LDM2ZTMsMzYwMDEsMzYwMDIsMzYwMDMsMzYwMDQsMzYwMDUsMzYwMDYsMzYwMDcsMzYwMDgsMzYw''@;'; put 'put ''MDksMzYwMTAsMzYwMTEsMzYwMTIsMzYwMTMsMjAxMDksMTk5ODAsMjA4MDAsMTk5ODQsMjQzMTksMjEzMTcsMTk5ODksMjAxMjAsMTk5OTgsMzk3MzAsMjM0MDQsMjIxMjEsMjAwMDgsMzExNjIsMjAwMzEsMjEyNjksMjAwMzksMjI4MjksMjkyNDMsMjEzNTgsMjc2NjQsMjIyMzksMzI5OTYs''@;'; put 'put ''MzkzMTksMjc2MDMsMzA1OTAsNDA3MjcsMjAwMjIsMjAxMjcsNDA3MjAsMjAwNjAsMjAwNzMsMjAxMTUsMzM0MTYsMjMzODcsMjE4NjgsMjIwMzEsMjAxNjQsMjEzODksMjE0MDUsMjE0MTEsMjE0MTMsMjE0MjIsMzg3NTcsMzYxODksMjEyNzQsMjE0OTMsMjEyODYsMjEyOTQsMjEzMTAsMzYx''@;'; put 'put ''ODgsMjEzNTAsMjEzNDcsMjA5OTQsMjFlMywyMTAwNiwyMTAzNywyMTA0MywyMTA1NSwyMTA1NiwyMTA2OCwyMTA4NiwyMTA4OSwyMTA4NCwzMzk2NywyMTExNywyMTEyMiwyMTEyMSwyMTEzNiwyMTEzOSwyMDg2NiwzMjU5NiwyMDE1NSwyMDE2MywyMDE2OSwyMDE2MiwyMDIwMCwyMDE5Mywy''@;'; put 'put ''MDIwMywyMDE5MCwyMDI1MSwyMDIxMSwyMDI1OCwyMDMyNCwyMDIxMywyMDI2MSwyMDI2MywyMDIzMywyMDI2NywyMDMxOCwyMDMyNywyNTkxMiwyMDMxNCwyMDMxNywzNjAxNCwzNjAxNSwzNjAxNiwzNjAxNywzNjAxOCwzNjAxOSwzNjAyMCwzNjAyMSwzNjAyMiwzNjAyMywzNjAyNCwzNjAy''@;'; put 'put ''NSwzNjAyNiwzNjAyNywzNjAyOCwzNjAyOSwzNjAzMCwzNjAzMSwzNjAzMiwzNjAzMywzNjAzNCwzNjAzNSwzNjAzNiwzNjAzNywzNjAzOCwzNjAzOSwzNjA0MCwzNjA0MSwzNjA0MiwzNjA0MywzNjA0NCwzNjA0NSwzNjA0NiwzNjA0NywzNjA0OCwzNjA0OSwzNjA1MCwzNjA1MSwzNjA1Miwz''@;'; put 'put ''NjA1MywzNjA1NCwzNjA1NSwzNjA1NiwzNjA1NywzNjA1OCwzNjA1OSwzNjA2MCwzNjA2MSwzNjA2MiwzNjA2MywzNjA2NCwzNjA2NSwzNjA2NiwzNjA2NywzNjA2OCwzNjA2OSwzNjA3MCwzNjA3MSwzNjA3MiwzNjA3MywzNjA3NCwzNjA3NSwzNjA3NiwzNjA3NywzNjA3OCwzNjA3OSwzNjA4''@;'; put 'put ''MCwzNjA4MSwzNjA4MiwzNjA4MywzNjA4NCwzNjA4NSwzNjA4NiwzNjA4NywzNjA4OCwzNjA4OSwzNjA5MCwzNjA5MSwzNjA5MiwzNjA5MywzNjA5NCwzNjA5NSwzNjA5NiwzNjA5NywzNjA5OCwzNjA5OSwzNjEwMCwzNjEwMSwzNjEwMiwzNjEwMywzNjEwNCwzNjEwNSwzNjEwNiwzNjEwNywz''@;'; put 'put ''NjEwOCwzNjEwOSwyMDMxOSwyMDMxMSwyMDI3NCwyMDI4NSwyMDM0MiwyMDM0MCwyMDM2OSwyMDM2MSwyMDM1NSwyMDM2NywyMDM1MCwyMDM0NywyMDM5NCwyMDM0OCwyMDM5NiwyMDM3MiwyMDQ1NCwyMDQ1NiwyMDQ1OCwyMDQyMSwyMDQ0MiwyMDQ1MSwyMDQ0NCwyMDQzMywyMDQ0NywyMDQ3''@;'; put 'put ''MiwyMDUyMSwyMDU1NiwyMDQ2NywyMDUyNCwyMDQ5NSwyMDUyNiwyMDUyNSwyMDQ3OCwyMDUwOCwyMDQ5MiwyMDUxNywyMDUyMCwyMDYwNiwyMDU0NywyMDU2NSwyMDU1MiwyMDU1OCwyMDU4OCwyMDYwMywyMDY0NSwyMDY0NywyMDY0OSwyMDY2NiwyMDY5NCwyMDc0MiwyMDcxNywyMDcxNiwy''@;'; put 'put ''MDcxMCwyMDcxOCwyMDc0MywyMDc0NywyMDE4OSwyNzcwOSwyMDMxMiwyMDMyNSwyMDQzMCw0MDg2NCwyNzcxOCwzMTg2MCwyMDg0NiwyNDA2MSw0MDY0OSwzOTMyMCwyMDg2NSwyMjgwNCwyMTI0MSwyMTI2MSwzNTMzNSwyMTI2NCwyMDk3MSwyMjgwOSwyMDgyMSwyMDEyOCwyMDgyMiwyMDE0''@;'; put 'put ''NywzNDkyNiwzNDk4MCwyMDE0OSwzMzA0NCwzNTAyNiwzMTEwNCwyMzM0OCwzNDgxOSwzMjY5NiwyMDkwNywyMDkxMywyMDkyNSwyMDkyNCwzNjExMCwzNjExMSwzNjExMiwzNjExMywzNjExNCwzNjExNSwzNjExNiwzNjExNywzNjExOCwzNjExOSwzNjEyMCwzNjEyMSwzNjEyMiwzNjEyMywz''@;'; put 'put ''NjEyNCwzNjEyOCwzNjE3NywzNjE3OCwzNjE4MywzNjE5MSwzNjE5NywzNjIwMCwzNjIwMSwzNjIwMiwzNjIwNCwzNjIwNiwzNjIwNywzNjIwOSwzNjIxMCwzNjIxNiwzNjIxNywzNjIxOCwzNjIxOSwzNjIyMCwzNjIyMSwzNjIyMiwzNjIyMywzNjIyNCwzNjIyNiwzNjIyNywzNjIzMCwzNjIz''@;'; put 'put ''MSwzNjIzMiwzNjIzMywzNjIzNiwzNjIzNywzNjIzOCwzNjIzOSwzNjI0MCwzNjI0MiwzNjI0MywzNjI0NSwzNjI0NiwzNjI0NywzNjI0OCwzNjI0OSwzNjI1MCwzNjI1MSwzNjI1MiwzNjI1MywzNjI1NCwzNjI1NiwzNjI1NywzNjI1OCwzNjI2MCwzNjI2MSwzNjI2MiwzNjI2MywzNjI2NCwz''@;'; put 'put ''NjI2NSwzNjI2NiwzNjI2NywzNjI2OCwzNjI2OSwzNjI3MCwzNjI3MSwzNjI3MiwzNjI3NCwzNjI3OCwzNjI3OSwzNjI4MSwzNjI4MywzNjI4NSwzNjI4OCwzNjI4OSwzNjI5MCwzNjI5MywzNjI5NSwzNjI5NiwzNjI5NywzNjI5OCwzNjMwMSwzNjMwNCwzNjMwNiwzNjMwNywzNjMwOCwyMDkz''@;'; put 'put ''NSwyMDg4NiwyMDg5OCwyMDkwMSwzNTc0NCwzNTc1MCwzNTc1MSwzNTc1NCwzNTc2NCwzNTc2NSwzNTc2NywzNTc3OCwzNTc3OSwzNTc4NywzNTc5MSwzNTc5MCwzNTc5NCwzNTc5NSwzNTc5NiwzNTc5OCwzNTgwMCwzNTgwMSwzNTgwNCwzNTgwNywzNTgwOCwzNTgxMiwzNTgxNiwzNTgxNywz''@;'; put 'put ''NTgyMiwzNTgyNCwzNTgyNywzNTgzMCwzNTgzMywzNTgzNiwzNTgzOSwzNTg0MCwzNTg0MiwzNTg0NCwzNTg0NywzNTg1MiwzNTg1NSwzNTg1NywzNTg1OCwzNTg2MCwzNTg2MSwzNTg2MiwzNTg2NSwzNTg2NywzNTg2NCwzNTg2OSwzNTg3MSwzNTg3MiwzNTg3MywzNTg3NywzNTg3OSwzNTg4''@;'; put 'put ''MiwzNTg4MywzNTg4NiwzNTg4NywzNTg5MCwzNTg5MSwzNTg5MywzNTg5NCwyMTM1MywyMTM3MCwzODQyOSwzODQzNCwzODQzMywzODQ0OSwzODQ0MiwzODQ2MSwzODQ2MCwzODQ2NiwzODQ3MywzODQ4NCwzODQ5NSwzODUwMywzODUwOCwzODUxNCwzODUxNiwzODUzNiwzODU0MSwzODU1MSwz''@;'; put 'put ''ODU3NiwzNzAxNSwzNzAxOSwzNzAyMSwzNzAxNywzNzAzNiwzNzAyNSwzNzA0NCwzNzA0MywzNzA0NiwzNzA1MCwzNjMwOSwzNjMxMiwzNjMxMywzNjMxNiwzNjMyMCwzNjMyMSwzNjMyMiwzNjMyNSwzNjMyNiwzNjMyNywzNjMyOSwzNjMzMywzNjMzNCwzNjMzNiwzNjMzNywzNjMzOCwzNjM0''@;'; put 'put ''MCwzNjM0MiwzNjM0OCwzNjM1MCwzNjM1MSwzNjM1MiwzNjM1MywzNjM1NCwzNjM1NSwzNjM1NiwzNjM1OCwzNjM1OSwzNjM2MCwzNjM2MywzNjM2NSwzNjM2NiwzNjM2OCwzNjM2OSwzNjM3MCwzNjM3MSwzNjM3MywzNjM3NCwzNjM3NSwzNjM3NiwzNjM3NywzNjM3OCwzNjM3OSwzNjM4MCwz''@;'; put 'put ''NjM4NCwzNjM4NSwzNjM4OCwzNjM4OSwzNjM5MCwzNjM5MSwzNjM5MiwzNjM5NSwzNjM5NywzNjQwMCwzNjQwMiwzNjQwMywzNjQwNCwzNjQwNiwzNjQwNywzNjQwOCwzNjQxMSwzNjQxMiwzNjQxNCwzNjQxNSwzNjQxOSwzNjQyMSwzNjQyMiwzNjQyOCwzNjQyOSwzNjQzMCwzNjQzMSwzNjQz''@;'; put 'put ''MiwzNjQzNSwzNjQzNiwzNjQzNywzNjQzOCwzNjQzOSwzNjQ0MCwzNjQ0MiwzNjQ0MywzNjQ0NCwzNjQ0NSwzNjQ0NiwzNjQ0NywzNjQ0OCwzNjQ0OSwzNjQ1MCwzNjQ1MSwzNjQ1MiwzNjQ1MywzNjQ1NSwzNjQ1NiwzNjQ1OCwzNjQ1OSwzNjQ2MiwzNjQ2NSwzNzA0OCwzNzA0MCwzNzA3MSwz''@;'; put 'put ''NzA2MSwzNzA1NCwzNzA3MiwzNzA2MCwzNzA2MywzNzA3NSwzNzA5NCwzNzA5MCwzNzA4NCwzNzA3OSwzNzA4MywzNzA5OSwzNzEwMywzNzExOCwzNzEyNCwzNzE1NCwzNzE1MCwzNzE1NSwzNzE2OSwzNzE2NywzNzE3NywzNzE4NywzNzE5MCwyMTAwNSwyMjg1MCwyMTE1NCwyMTE2NCwyMTE2''@;'; put 'put ''NSwyMTE4MiwyMTc1OSwyMTIwMCwyMTIwNiwyMTIzMiwyMTQ3MSwyOTE2NiwzMDY2OSwyNDMwOCwyMDk4MSwyMDk4OCwzOTcyNywyMTQzMCwyNDMyMSwzMDA0MiwyNDA0NywyMjM0OCwyMjQ0MSwyMjQzMywyMjY1NCwyMjcxNiwyMjcyNSwyMjczNywyMjMxMywyMjMxNiwyMjMxNCwyMjMyMywy''@;'; put 'put ''MjMyOSwyMjMxOCwyMjMxOSwyMjM2NCwyMjMzMSwyMjMzOCwyMjM3NywyMjQwNSwyMjM3OSwyMjQwNiwyMjM5NiwyMjM5NSwyMjM3NiwyMjM4MSwyMjM5MCwyMjM4NywyMjQ0NSwyMjQzNiwyMjQxMiwyMjQ1MCwyMjQ3OSwyMjQzOSwyMjQ1MiwyMjQxOSwyMjQzMiwyMjQ4NSwyMjQ4OCwyMjQ5''@;'; put 'put ''MCwyMjQ4OSwyMjQ4MiwyMjQ1NiwyMjUxNiwyMjUxMSwyMjUyMCwyMjUwMCwyMjQ5MywzNjQ2NywzNjQ2OSwzNjQ3MSwzNjQ3MiwzNjQ3MywzNjQ3NCwzNjQ3NSwzNjQ3NywzNjQ3OCwzNjQ4MCwzNjQ4MiwzNjQ4MywzNjQ4NCwzNjQ4NiwzNjQ4OCwzNjQ4OSwzNjQ5MCwzNjQ5MSwzNjQ5Miwz''@;'; put 'put ''NjQ5MywzNjQ5NCwzNjQ5NywzNjQ5OCwzNjQ5OSwzNjUwMSwzNjUwMiwzNjUwMywzNjUwNCwzNjUwNSwzNjUwNiwzNjUwNywzNjUwOSwzNjUxMSwzNjUxMiwzNjUxMywzNjUxNCwzNjUxNSwzNjUxNiwzNjUxNywzNjUxOCwzNjUxOSwzNjUyMCwzNjUyMSwzNjUyMiwzNjUyNSwzNjUyNiwzNjUy''@;'; put 'put ''OCwzNjUyOSwzNjUzMSwzNjUzMiwzNjUzMywzNjUzNCwzNjUzNSwzNjUzNiwzNjUzNywzNjUzOSwzNjU0MCwzNjU0MSwzNjU0MiwzNjU0MywzNjU0NCwzNjU0NSwzNjU0NiwzNjU0NywzNjU0OCwzNjU0OSwzNjU1MCwzNjU1MSwzNjU1MiwzNjU1MywzNjU1NCwzNjU1NSwzNjU1NiwzNjU1Nywz''@;'; put 'put ''NjU1OSwzNjU2MCwzNjU2MSwzNjU2MiwzNjU2MywzNjU2NCwzNjU2NSwzNjU2NiwzNjU2NywzNjU2OCwzNjU2OSwzNjU3MCwzNjU3MSwzNjU3MiwzNjU3MywzNjU3NCwzNjU3NSwzNjU3NiwzNjU3NywzNjU3OCwzNjU3OSwzNjU4MCwyMjUzOSwyMjU0MSwyMjUyNSwyMjUwOSwyMjUyOCwyMjU1''@;'; put 'put ''OCwyMjU1MywyMjU5NiwyMjU2MCwyMjYyOSwyMjYzNiwyMjY1NywyMjY2NSwyMjY4MiwyMjY1NiwzOTMzNiw0MDcyOSwyNTA4NywzMzQwMSwzMzQwNSwzMzQwNywzMzQyMywzMzQxOCwzMzQ0OCwzMzQxMiwzMzQyMiwzMzQyNSwzMzQzMSwzMzQzMywzMzQ1MSwzMzQ2NCwzMzQ3MCwzMzQ1Niwz''@;'; put 'put ''MzQ4MCwzMzQ4MiwzMzUwNywzMzQzMiwzMzQ2MywzMzQ1NCwzMzQ4MywzMzQ4NCwzMzQ3MywzMzQ0OSwzMzQ2MCwzMzQ0MSwzMzQ1MCwzMzQzOSwzMzQ3NiwzMzQ4NiwzMzQ0NCwzMzUwNSwzMzU0NSwzMzUyNywzMzUwOCwzMzU1MSwzMzU0MywzMzUwMCwzMzUyNCwzMzQ5MCwzMzQ5NiwzMzU0''@;'; put 'put ''OCwzMzUzMSwzMzQ5MSwzMzU1MywzMzU2MiwzMzU0MiwzMzU1NiwzMzU1NywzMzUwNCwzMzQ5MywzMzU2NCwzMzYxNywzMzYyNywzMzYyOCwzMzU0NCwzMzY4MiwzMzU5NiwzMzU4OCwzMzU4NSwzMzY5MSwzMzYzMCwzMzU4MywzMzYxNSwzMzYwNywzMzYwMywzMzYzMSwzMzYwMCwzMzU1OSwz''@;'; put 'put ''MzYzMiwzMzU4MSwzMzU5NCwzMzU4NywzMzYzOCwzMzYzNywzNjU4MSwzNjU4MiwzNjU4MywzNjU4NCwzNjU4NSwzNjU4NiwzNjU4NywzNjU4OCwzNjU4OSwzNjU5MCwzNjU5MSwzNjU5MiwzNjU5MywzNjU5NCwzNjU5NSwzNjU5NiwzNjU5NywzNjU5OCwzNjU5OSwzNjYwMCwzNjYwMSwzNjYw''@;'; put 'put ''MiwzNjYwMywzNjYwNCwzNjYwNSwzNjYwNiwzNjYwNywzNjYwOCwzNjYwOSwzNjYxMCwzNjYxMSwzNjYxMiwzNjYxMywzNjYxNCwzNjYxNSwzNjYxNiwzNjYxNywzNjYxOCwzNjYxOSwzNjYyMCwzNjYyMSwzNjYyMiwzNjYyMywzNjYyNCwzNjYyNSwzNjYyNiwzNjYyNywzNjYyOCwzNjYyOSwz''@;'; put 'put ''NjYzMCwzNjYzMSwzNjYzMiwzNjYzMywzNjYzNCwzNjYzNSwzNjYzNiwzNjYzNywzNjYzOCwzNjYzOSwzNjY0MCwzNjY0MSwzNjY0MiwzNjY0MywzNjY0NCwzNjY0NSwzNjY0NiwzNjY0NywzNjY0OCwzNjY0OSwzNjY1MCwzNjY1MSwzNjY1MiwzNjY1MywzNjY1NCwzNjY1NSwzNjY1NiwzNjY1''@;'; put 'put ''NywzNjY1OCwzNjY1OSwzNjY2MCwzNjY2MSwzNjY2MiwzNjY2MywzNjY2NCwzNjY2NSwzNjY2NiwzNjY2NywzNjY2OCwzNjY2OSwzNjY3MCwzNjY3MSwzNjY3MiwzNjY3MywzNjY3NCwzNjY3NSwzNjY3NiwzMzY0MCwzMzU2MywzMzY0MSwzMzY0NCwzMzY0MiwzMzY0NSwzMzY0NiwzMzcxMiwz''@;'; put 'put ''MzY1NiwzMzcxNSwzMzcxNiwzMzY5NiwzMzcwNiwzMzY4MywzMzY5MiwzMzY2OSwzMzY2MCwzMzcxOCwzMzcwNSwzMzY2MSwzMzcyMCwzMzY1OSwzMzY4OCwzMzY5NCwzMzcwNCwzMzcyMiwzMzcyNCwzMzcyOSwzMzc5MywzMzc2NSwzMzc1MiwyMjUzNSwzMzgxNiwzMzgwMywzMzc1NywzMzc4''@;'; put 'put ''OSwzMzc1MCwzMzgyMCwzMzg0OCwzMzgwOSwzMzc5OCwzMzc0OCwzMzc1OSwzMzgwNywzMzc5NSwzMzc4NCwzMzc4NSwzMzc3MCwzMzczMywzMzcyOCwzMzgzMCwzMzc3NiwzMzc2MSwzMzg4NCwzMzg3MywzMzg4MiwzMzg4MSwzMzkwNywzMzkyNywzMzkyOCwzMzkxNCwzMzkyOSwzMzkxMiwz''@;'; put 'put ''Mzg1MiwzMzg2MiwzMzg5NywzMzkxMCwzMzkzMiwzMzkzNCwzMzg0MSwzMzkwMSwzMzk4NSwzMzk5NywzNGUzLDM0MDIyLDMzOTgxLDM0MDAzLDMzOTk0LDMzOTgzLDMzOTc4LDM0MDE2LDMzOTUzLDMzOTc3LDMzOTcyLDMzOTQzLDM0MDIxLDM0MDE5LDM0MDYwLDI5OTY1LDM0MTA0LDM0MDMy''@;'; put 'put ''LDM0MTA1LDM0MDc5LDM0MTA2LDM2Njc3LDM2Njc4LDM2Njc5LDM2NjgwLDM2NjgxLDM2NjgyLDM2NjgzLDM2Njg0LDM2Njg1LDM2Njg2LDM2Njg3LDM2Njg4LDM2Njg5LDM2NjkwLDM2NjkxLDM2NjkyLDM2NjkzLDM2Njk0LDM2Njk1LDM2Njk2LDM2Njk3LDM2Njk4LDM2Njk5LDM2NzAwLDM2''@;'; put 'put ''NzAxLDM2NzAyLDM2NzAzLDM2NzA0LDM2NzA1LDM2NzA2LDM2NzA3LDM2NzA4LDM2NzA5LDM2NzE0LDM2NzM2LDM2NzQ4LDM2NzU0LDM2NzY1LDM2NzY4LDM2NzY5LDM2NzcwLDM2NzcyLDM2NzczLDM2Nzc0LDM2Nzc1LDM2Nzc4LDM2NzgwLDM2NzgxLDM2NzgyLDM2NzgzLDM2Nzg2LDM2Nzg3''@;'; put 'put ''LDM2Nzg4LDM2Nzg5LDM2NzkxLDM2NzkyLDM2Nzk0LDM2Nzk1LDM2Nzk2LDM2Nzk5LDM2ODAwLDM2ODAzLDM2ODA2LDM2ODA5LDM2ODEwLDM2ODExLDM2ODEyLDM2ODEzLDM2ODE1LDM2ODE4LDM2ODIyLDM2ODIzLDM2ODI2LDM2ODMyLDM2ODMzLDM2ODM1LDM2ODM5LDM2ODQ0LDM2ODQ3LDM2''@;'; put 'put ''ODQ5LDM2ODUwLDM2ODUyLDM2ODUzLDM2ODU0LDM2ODU4LDM2ODU5LDM2ODYwLDM2ODYyLDM2ODYzLDM2ODcxLDM2ODcyLDM2ODc2LDM2ODc4LDM2ODgzLDM2ODg1LDM2ODg4LDM0MTM0LDM0MTA3LDM0MDQ3LDM0MDQ0LDM0MTM3LDM0MTIwLDM0MTUyLDM0MTQ4LDM0MTQyLDM0MTcwLDMwNjI2''@;'; put 'put ''LDM0MTE1LDM0MTYyLDM0MTcxLDM0MjEyLDM0MjE2LDM0MTgzLDM0MTkxLDM0MTY5LDM0MjIyLDM0MjA0LDM0MTgxLDM0MjMzLDM0MjMxLDM0MjI0LDM0MjU5LDM0MjQxLDM0MjY4LDM0MzAzLDM0MzQzLDM0MzA5LDM0MzQ1LDM0MzI2LDM0MzY0LDI0MzE4LDI0MzI4LDIyODQ0LDIyODQ5LDMy''@;'; put 'put ''ODIzLDIyODY5LDIyODc0LDIyODcyLDIxMjYzLDIzNTg2LDIzNTg5LDIzNTk2LDIzNjA0LDI1MTY0LDI1MTk0LDI1MjQ3LDI1Mjc1LDI1MjkwLDI1MzA2LDI1MzAzLDI1MzI2LDI1Mzc4LDI1MzM0LDI1NDAxLDI1NDE5LDI1NDExLDI1NTE3LDI1NTkwLDI1NDU3LDI1NDY2LDI1NDg2LDI1NTI0''@;'; put 'put ''LDI1NDUzLDI1NTE2LDI1NDgyLDI1NDQ5LDI1NTE4LDI1NTMyLDI1NTg2LDI1NTkyLDI1NTY4LDI1NTk5LDI1NTQwLDI1NTY2LDI1NTUwLDI1NjgyLDI1NTQyLDI1NTM0LDI1NjY5LDI1NjY1LDI1NjExLDI1NjI3LDI1NjMyLDI1NjEyLDI1NjM4LDI1NjMzLDI1Njk0LDI1NzMyLDI1NzA5LDI1''@;'; put 'put ''NzUwLDM2ODg5LDM2ODkyLDM2ODk5LDM2OTAwLDM2OTAxLDM2OTAzLDM2OTA0LDM2OTA1LDM2OTA2LDM2OTA3LDM2OTA4LDM2OTEyLDM2OTEzLDM2OTE0LDM2OTE1LDM2OTE2LDM2OTE5LDM2OTIxLDM2OTIyLDM2OTI1LDM2OTI3LDM2OTI4LDM2OTMxLDM2OTMzLDM2OTM0LDM2OTM2LDM2OTM3''@;'; put 'put ''LDM2OTM4LDM2OTM5LDM2OTQwLDM2OTQyLDM2OTQ4LDM2OTQ5LDM2OTUwLDM2OTUzLDM2OTU0LDM2OTU2LDM2OTU3LDM2OTU4LDM2OTU5LDM2OTYwLDM2OTYxLDM2OTY0LDM2OTY2LDM2OTY3LDM2OTY5LDM2OTcwLDM2OTcxLDM2OTcyLDM2OTc1LDM2OTc2LDM2OTc3LDM2OTc4LDM2OTc5LDM2''@;'; put 'put ''OTgyLDM2OTgzLDM2OTg0LDM2OTg1LDM2OTg2LDM2OTg3LDM2OTg4LDM2OTkwLDM2OTkzLDM2OTk2LDM2OTk3LDM2OTk4LDM2OTk5LDM3MDAxLDM3MDAyLDM3MDA0LDM3MDA1LDM3MDA2LDM3MDA3LDM3MDA4LDM3MDEwLDM3MDEyLDM3MDE0LDM3MDE2LDM3MDE4LDM3MDIwLDM3MDIyLDM3MDIz''@;'; put 'put ''LDM3MDI0LDM3MDI4LDM3MDI5LDM3MDMxLDM3MDMyLDM3MDMzLDM3MDM1LDM3MDM3LDM3MDQyLDM3MDQ3LDM3MDUyLDM3MDUzLDM3MDU1LDM3MDU2LDI1NzIyLDI1NzgzLDI1Nzg0LDI1NzUzLDI1Nzg2LDI1NzkyLDI1ODA4LDI1ODE1LDI1ODI4LDI1ODI2LDI1ODY1LDI1ODkzLDI1OTAyLDI0''@;'; put 'put ''MzMxLDI0NTMwLDI5OTc3LDI0MzM3LDIxMzQzLDIxNDg5LDIxNTAxLDIxNDgxLDIxNDgwLDIxNDk5LDIxNTIyLDIxNTI2LDIxNTEwLDIxNTc5LDIxNTg2LDIxNTg3LDIxNTg4LDIxNTkwLDIxNTcxLDIxNTM3LDIxNTkxLDIxNTkzLDIxNTM5LDIxNTU0LDIxNjM0LDIxNjUyLDIxNjIzLDIxNjE3''@;'; put 'put ''LDIxNjA0LDIxNjU4LDIxNjU5LDIxNjM2LDIxNjIyLDIxNjA2LDIxNjYxLDIxNzEyLDIxNjc3LDIxNjk4LDIxNjg0LDIxNzE0LDIxNjcxLDIxNjcwLDIxNzE1LDIxNzE2LDIxNjE4LDIxNjY3LDIxNzE3LDIxNjkxLDIxNjk1LDIxNzA4LDIxNzIxLDIxNzIyLDIxNzI0LDIxNjczLDIxNjc0LDIx''@;'; put 'put ''NjY4LDIxNzI1LDIxNzExLDIxNzI2LDIxNzg3LDIxNzM1LDIxNzkyLDIxNzU3LDIxNzgwLDIxNzQ3LDIxNzk0LDIxNzk1LDIxNzc1LDIxNzc3LDIxNzk5LDIxODAyLDIxODYzLDIxOTAzLDIxOTQxLDIxODMzLDIxODY5LDIxODI1LDIxODQ1LDIxODIzLDIxODQwLDIxODIwLDM3MDU4LDM3MDU5''@;'; put 'put ''LDM3MDYyLDM3MDY0LDM3MDY1LDM3MDY3LDM3MDY4LDM3MDY5LDM3MDc0LDM3MDc2LDM3MDc3LDM3MDc4LDM3MDgwLDM3MDgxLDM3MDgyLDM3MDg2LDM3MDg3LDM3MDg4LDM3MDkxLDM3MDkyLDM3MDkzLDM3MDk3LDM3MDk4LDM3MTAwLDM3MTAyLDM3MTA0LDM3MTA1LDM3MTA2LDM3MTA3LDM3''@;'; put 'put ''MTA5LDM3MTEwLDM3MTExLDM3MTEzLDM3MTE0LDM3MTE1LDM3MTE2LDM3MTE5LDM3MTIwLDM3MTIxLDM3MTIzLDM3MTI1LDM3MTI2LDM3MTI3LDM3MTI4LDM3MTI5LDM3MTMwLDM3MTMxLDM3MTMyLDM3MTMzLDM3MTM0LDM3MTM1LDM3MTM2LDM3MTM3LDM3MTM4LDM3MTM5LDM3MTQwLDM3MTQx''@;'; put 'put ''LDM3MTQyLDM3MTQzLDM3MTQ0LDM3MTQ2LDM3MTQ3LDM3MTQ4LDM3MTQ5LDM3MTUxLDM3MTUyLDM3MTUzLDM3MTU2LDM3MTU3LDM3MTU4LDM3MTU5LDM3MTYwLDM3MTYxLDM3MTYyLDM3MTYzLDM3MTY0LDM3MTY1LDM3MTY2LDM3MTY4LDM3MTcwLDM3MTcxLDM3MTcyLDM3MTczLDM3MTc0LDM3''@;'; put 'put ''MTc1LDM3MTc2LDM3MTc4LDM3MTc5LDM3MTgwLDM3MTgxLDM3MTgyLDM3MTgzLDM3MTg0LDM3MTg1LDM3MTg2LDM3MTg4LDIxODE1LDIxODQ2LDIxODc3LDIxODc4LDIxODc5LDIxODExLDIxODA4LDIxODUyLDIxODk5LDIxOTcwLDIxODkxLDIxOTM3LDIxOTQ1LDIxODk2LDIxODg5LDIxOTE5''@;'; put 'put ''LDIxODg2LDIxOTc0LDIxOTA1LDIxODgzLDIxOTgzLDIxOTQ5LDIxOTUwLDIxOTA4LDIxOTEzLDIxOTk0LDIyMDA3LDIxOTYxLDIyMDQ3LDIxOTY5LDIxOTk1LDIxOTk2LDIxOTcyLDIxOTkwLDIxOTgxLDIxOTU2LDIxOTk5LDIxOTg5LDIyMDAyLDIyMDAzLDIxOTY0LDIxOTY1LDIxOTkyLDIy''@;'; put 'put ''MDA1LDIxOTg4LDM2NzU2LDIyMDQ2LDIyMDI0LDIyMDI4LDIyMDE3LDIyMDUyLDIyMDUxLDIyMDE0LDIyMDE2LDIyMDU1LDIyMDYxLDIyMTA0LDIyMDczLDIyMTAzLDIyMDYwLDIyMDkzLDIyMTE0LDIyMTA1LDIyMTA4LDIyMDkyLDIyMTAwLDIyMTUwLDIyMTE2LDIyMTI5LDIyMTIzLDIyMTM5''@;'; put 'put ''LDIyMTQwLDIyMTQ5LDIyMTYzLDIyMTkxLDIyMjI4LDIyMjMxLDIyMjM3LDIyMjQxLDIyMjYxLDIyMjUxLDIyMjY1LDIyMjcxLDIyMjc2LDIyMjgyLDIyMjgxLDIyMzAwLDI0MDc5LDI0MDg5LDI0MDg0LDI0MDgxLDI0MTEzLDI0MTIzLDI0MTI0LDM3MTg5LDM3MTkxLDM3MTkyLDM3MjAxLDM3''@;'; put 'put ''MjAzLDM3MjA0LDM3MjA1LDM3MjA2LDM3MjA4LDM3MjA5LDM3MjExLDM3MjEyLDM3MjE1LDM3MjE2LDM3MjIyLDM3MjIzLDM3MjI0LDM3MjI3LDM3MjI5LDM3MjM1LDM3MjQyLDM3MjQzLDM3MjQ0LDM3MjQ4LDM3MjQ5LDM3MjUwLDM3MjUxLDM3MjUyLDM3MjU0LDM3MjU2LDM3MjU4LDM3MjYy''@;'; put 'put ''LDM3MjYzLDM3MjY3LDM3MjY4LDM3MjY5LDM3MjcwLDM3MjcxLDM3MjcyLDM3MjczLDM3Mjc2LDM3Mjc3LDM3Mjc4LDM3Mjc5LDM3MjgwLDM3MjgxLDM3Mjg0LDM3Mjg1LDM3Mjg2LDM3Mjg3LDM3Mjg4LDM3Mjg5LDM3MjkxLDM3MjkyLDM3Mjk2LDM3Mjk3LDM3Mjk4LDM3Mjk5LDM3MzAyLDM3''@;'; put 'put ''MzAzLDM3MzA0LDM3MzA1LDM3MzA3LDM3MzA4LDM3MzA5LDM3MzEwLDM3MzExLDM3MzEyLDM3MzEzLDM3MzE0LDM3MzE1LDM3MzE2LDM3MzE3LDM3MzE4LDM3MzIwLDM3MzIzLDM3MzI4LDM3MzMwLDM3MzMxLDM3MzMyLDM3MzMzLDM3MzM0LDM3MzM1LDM3MzM2LDM3MzM3LDM3MzM4LDM3MzM5''@;'; put 'put ''LDM3MzQxLDM3MzQyLDM3MzQzLDM3MzQ0LDM3MzQ1LDM3MzQ2LDM3MzQ3LDM3MzQ4LDM3MzQ5LDI0MTE5LDI0MTMyLDI0MTQ4LDI0MTU1LDI0MTU4LDI0MTYxLDIzNjkyLDIzNjc0LDIzNjkzLDIzNjk2LDIzNzAyLDIzNjg4LDIzNzA0LDIzNzA1LDIzNjk3LDIzNzA2LDIzNzA4LDIzNzMzLDIz''@;'; put 'put ''NzE0LDIzNzQxLDIzNzI0LDIzNzIzLDIzNzI5LDIzNzE1LDIzNzQ1LDIzNzM1LDIzNzQ4LDIzNzYyLDIzNzgwLDIzNzU1LDIzNzgxLDIzODEwLDIzODExLDIzODQ3LDIzODQ2LDIzODU0LDIzODQ0LDIzODM4LDIzODE0LDIzODM1LDIzODk2LDIzODcwLDIzODYwLDIzODY5LDIzOTE2LDIzODk5''@;'; put 'put ''LDIzOTE5LDIzOTAxLDIzOTE1LDIzODgzLDIzODgyLDIzOTEzLDIzOTI0LDIzOTM4LDIzOTYxLDIzOTY1LDM1OTU1LDIzOTkxLDI0MDA1LDI0NDM1LDI0NDM5LDI0NDUwLDI0NDU1LDI0NDU3LDI0NDYwLDI0NDY5LDI0NDczLDI0NDc2LDI0NDg4LDI0NDkzLDI0NTAxLDI0NTA4LDM0OTE0LDI0''@;'; put 'put ''NDE3LDI5MzU3LDI5MzYwLDI5MzY0LDI5MzY3LDI5MzY4LDI5Mzc5LDI5Mzc3LDI5MzkwLDI5Mzg5LDI5Mzk0LDI5NDE2LDI5NDIzLDI5NDE3LDI5NDI2LDI5NDI4LDI5NDMxLDI5NDQxLDI5NDI3LDI5NDQzLDI5NDM0LDM3MzUwLDM3MzUxLDM3MzUyLDM3MzUzLDM3MzU0LDM3MzU1LDM3MzU2''@;'; put 'put ''LDM3MzU3LDM3MzU4LDM3MzU5LDM3MzYwLDM3MzYxLDM3MzYyLDM3MzYzLDM3MzY0LDM3MzY1LDM3MzY2LDM3MzY3LDM3MzY4LDM3MzY5LDM3MzcwLDM3MzcxLDM3MzcyLDM3MzczLDM3Mzc0LDM3Mzc1LDM3Mzc2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3''@;'; put 'put ''Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzg3LDM3Mzg4LDM3Mzg5LDM3MzkwLDM3MzkxLDM3MzkyLDM3MzkzLDM3Mzk0LDM3Mzk1LDM3Mzk2LDM3Mzk3LDM3Mzk4LDM3Mzk5LDM3NDAwLDM3NDAxLDM3NDAyLDM3NDAzLDM3NDA0LDM3NDA1LDM3NDA2LDM3NDA3LDM3NDA4LDM3NDA5LDM3NDEwLDM3NDEx''@;'; put 'put ''LDM3NDEyLDM3NDEzLDM3NDE0LDM3NDE1LDM3NDE2LDM3NDE3LDM3NDE4LDM3NDE5LDM3NDIwLDM3NDIxLDM3NDIyLDM3NDIzLDM3NDI0LDM3NDI1LDM3NDI2LDM3NDI3LDM3NDI4LDM3NDI5LDM3NDMwLDM3NDMxLDM3NDMyLDM3NDMzLDM3NDM0LDM3NDM1LDM3NDM2LDM3NDM3LDM3NDM4LDM3''@;'; put 'put ''NDM5LDM3NDQwLDM3NDQxLDM3NDQyLDM3NDQzLDM3NDQ0LDM3NDQ1LDI5NDM1LDI5NDYzLDI5NDU5LDI5NDczLDI5NDUwLDI5NDcwLDI5NDY5LDI5NDYxLDI5NDc0LDI5NDk3LDI5NDc3LDI5NDg0LDI5NDk2LDI5NDg5LDI5NTIwLDI5NTE3LDI5NTI3LDI5NTM2LDI5NTQ4LDI5NTUxLDI5NTY2''@;'; put 'put ''LDMzMzA3LDIyODIxLDM5MTQzLDIyODIwLDIyNzg2LDM5MjY3LDM5MjcxLDM5MjcyLDM5MjczLDM5Mjc0LDM5Mjc1LDM5Mjc2LDM5Mjg0LDM5Mjg3LDM5MjkzLDM5Mjk2LDM5MzAwLDM5MzAzLDM5MzA2LDM5MzA5LDM5MzEyLDM5MzEzLDM5MzE1LDM5MzE2LDM5MzE3LDI0MTkyLDI0MjA5LDI0''@;'; put 'put ''MjAzLDI0MjE0LDI0MjI5LDI0MjI0LDI0MjQ5LDI0MjQ1LDI0MjU0LDI0MjQzLDM2MTc5LDI0Mjc0LDI0MjczLDI0MjgzLDI0Mjk2LDI0Mjk4LDMzMjEwLDI0NTE2LDI0NTIxLDI0NTM0LDI0NTI3LDI0NTc5LDI0NTU4LDI0NTgwLDI0NTQ1LDI0NTQ4LDI0NTc0LDI0NTgxLDI0NTgyLDI0NTU0''@;'; put 'put ''LDI0NTU3LDI0NTY4LDI0NjAxLDI0NjI5LDI0NjE0LDI0NjAzLDI0NTkxLDI0NTg5LDI0NjE3LDI0NjE5LDI0NTg2LDI0NjM5LDI0NjA5LDI0Njk2LDI0Njk3LDI0Njk5LDI0Njk4LDI0NjQyLDM3NDQ2LDM3NDQ3LDM3NDQ4LDM3NDQ5LDM3NDUwLDM3NDUxLDM3NDUyLDM3NDUzLDM3NDU0LDM3''@;'; put 'put ''NDU1LDM3NDU2LDM3NDU3LDM3NDU4LDM3NDU5LDM3NDYwLDM3NDYxLDM3NDYyLDM3NDYzLDM3NDY0LDM3NDY1LDM3NDY2LDM3NDY3LDM3NDY4LDM3NDY5LDM3NDcwLDM3NDcxLDM3NDcyLDM3NDczLDM3NDc0LDM3NDc1LDM3NDc2LDM3NDc3LDM3NDc4LDM3NDc5LDM3NDgwLDM3NDgxLDM3NDgy''@;'; put 'put ''LDM3NDgzLDM3NDg0LDM3NDg1LDM3NDg2LDM3NDg3LDM3NDg4LDM3NDg5LDM3NDkwLDM3NDkxLDM3NDkzLDM3NDk0LDM3NDk1LDM3NDk2LDM3NDk3LDM3NDk4LDM3NDk5LDM3NTAwLDM3NTAxLDM3NTAyLDM3NTAzLDM3NTA0LDM3NTA1LDM3NTA2LDM3NTA3LDM3NTA4LDM3NTA5LDM3NTEwLDM3''@;'; put 'put ''NTExLDM3NTEyLDM3NTEzLDM3NTE0LDM3NTE1LDM3NTE2LDM3NTE3LDM3NTE5LDM3NTIwLDM3NTIxLDM3NTIyLDM3NTIzLDM3NTI0LDM3NTI1LDM3NTI2LDM3NTI3LDM3NTI4LDM3NTI5LDM3NTMwLDM3NTMxLDM3NTMyLDM3NTMzLDM3NTM0LDM3NTM1LDM3NTM2LDM3NTM3LDM3NTM4LDM3NTM5''@;'; put 'put ''LDM3NTQwLDM3NTQxLDM3NTQyLDM3NTQzLDI0NjgyLDI0NzAxLDI0NzI2LDI0NzMwLDI0NzQ5LDI0NzMzLDI0NzA3LDI0NzIyLDI0NzE2LDI0NzMxLDI0ODEyLDI0NzYzLDI0NzUzLDI0Nzk3LDI0NzkyLDI0Nzc0LDI0Nzk0LDI0NzU2LDI0ODY0LDI0ODcwLDI0ODUzLDI0ODY3LDI0ODIwLDI0''@;'; put 'put ''ODMyLDI0ODQ2LDI0ODc1LDI0OTA2LDI0OTQ5LDI1MDA0LDI0OTgwLDI0OTk5LDI1MDE1LDI1MDQ0LDI1MDc3LDI0NTQxLDM4NTc5LDM4Mzc3LDM4Mzc5LDM4Mzg1LDM4Mzg3LDM4Mzg5LDM4MzkwLDM4Mzk2LDM4Mzk4LDM4NDAzLDM4NDA0LDM4NDA2LDM4NDA4LDM4NDEwLDM4NDExLDM4NDEy''@;'; put 'put ''LDM4NDEzLDM4NDE1LDM4NDE4LDM4NDIxLDM4NDIyLDM4NDIzLDM4NDI1LDM4NDI2LDIwMDEyLDI5MjQ3LDI1MTA5LDI3NzAxLDI3NzMyLDI3NzQwLDI3NzIyLDI3ODExLDI3NzgxLDI3NzkyLDI3Nzk2LDI3Nzg4LDI3NzUyLDI3NzUzLDI3NzY0LDI3NzY2LDI3NzgyLDI3ODE3LDI3ODU2LDI3''@;'; put 'put ''ODYwLDI3ODIxLDI3ODk1LDI3ODk2LDI3ODg5LDI3ODYzLDI3ODI2LDI3ODcyLDI3ODYyLDI3ODk4LDI3ODgzLDI3ODg2LDI3ODI1LDI3ODU5LDI3ODg3LDI3OTAyLDM3NTQ0LDM3NTQ1LDM3NTQ2LDM3NTQ3LDM3NTQ4LDM3NTQ5LDM3NTUxLDM3NTUyLDM3NTUzLDM3NTU0LDM3NTU1LDM3NTU2''@;'; put 'put ''LDM3NTU3LDM3NTU4LDM3NTU5LDM3NTYwLDM3NTYxLDM3NTYyLDM3NTYzLDM3NTY0LDM3NTY1LDM3NTY2LDM3NTY3LDM3NTY4LDM3NTY5LDM3NTcwLDM3NTcxLDM3NTcyLDM3NTczLDM3NTc0LDM3NTc1LDM3NTc3LDM3NTc4LDM3NTc5LDM3NTgwLDM3NTgxLDM3NTgyLDM3NTgzLDM3NTg0LDM3''@;'; put 'put ''NTg1LDM3NTg2LDM3NTg3LDM3NTg4LDM3NTg5LDM3NTkwLDM3NTkxLDM3NTkyLDM3NTkzLDM3NTk0LDM3NTk1LDM3NTk2LDM3NTk3LDM3NTk4LDM3NTk5LDM3NjAwLDM3NjAxLDM3NjAyLDM3NjAzLDM3NjA0LDM3NjA1LDM3NjA2LDM3NjA3LDM3NjA4LDM3NjA5LDM3NjEwLDM3NjExLDM3NjEy''@;'; put 'put ''LDM3NjEzLDM3NjE0LDM3NjE1LDM3NjE2LDM3NjE3LDM3NjE4LDM3NjE5LDM3NjIwLDM3NjIxLDM3NjIyLDM3NjIzLDM3NjI0LDM3NjI1LDM3NjI2LDM3NjI3LDM3NjI4LDM3NjI5LDM3NjMwLDM3NjMxLDM3NjMyLDM3NjMzLDM3NjM0LDM3NjM1LDM3NjM2LDM3NjM3LDM3NjM4LDM3NjM5LDM3''@;'; put 'put ''NjQwLDM3NjQxLDI3OTYxLDI3OTQzLDI3OTE2LDI3OTcxLDI3OTc2LDI3OTExLDI3OTA4LDI3OTI5LDI3OTE4LDI3OTQ3LDI3OTgxLDI3OTUwLDI3OTU3LDI3OTMwLDI3OTgzLDI3OTg2LDI3OTg4LDI3OTU1LDI4MDQ5LDI4MDE1LDI4MDYyLDI4MDY0LDI3OTk4LDI4MDUxLDI4MDUyLDI3OTk2''@;'; put 'put ''LDI4ZTMsMjgwMjgsMjgwMDMsMjgxODYsMjgxMDMsMjgxMDEsMjgxMjYsMjgxNzQsMjgwOTUsMjgxMjgsMjgxNzcsMjgxMzQsMjgxMjUsMjgxMjEsMjgxODIsMjgwNzUsMjgxNzIsMjgwNzgsMjgyMDMsMjgyNzAsMjgyMzgsMjgyNjcsMjgzMzgsMjgyNTUsMjgyOTQsMjgyNDMsMjgyNDQsMjgy''@;'; put 'put ''MTAsMjgxOTcsMjgyMjgsMjgzODMsMjgzMzcsMjgzMTIsMjgzODQsMjg0NjEsMjgzODYsMjgzMjUsMjgzMjcsMjgzNDksMjgzNDcsMjgzNDMsMjgzNzUsMjgzNDAsMjgzNjcsMjgzMDMsMjgzNTQsMjgzMTksMjg1MTQsMjg0ODYsMjg0ODcsMjg0NTIsMjg0MzcsMjg0MDksMjg0NjMsMjg0NzAs''@;'; put 'put ''Mjg0OTEsMjg1MzIsMjg0NTgsMjg0MjUsMjg0NTcsMjg1NTMsMjg1NTcsMjg1NTYsMjg1MzYsMjg1MzAsMjg1NDAsMjg1MzgsMjg2MjUsMzc2NDIsMzc2NDMsMzc2NDQsMzc2NDUsMzc2NDYsMzc2NDcsMzc2NDgsMzc2NDksMzc2NTAsMzc2NTEsMzc2NTIsMzc2NTMsMzc2NTQsMzc2NTUsMzc2''@;'; put 'put ''NTYsMzc2NTcsMzc2NTgsMzc2NTksMzc2NjAsMzc2NjEsMzc2NjIsMzc2NjMsMzc2NjQsMzc2NjUsMzc2NjYsMzc2NjcsMzc2NjgsMzc2NjksMzc2NzAsMzc2NzEsMzc2NzIsMzc2NzMsMzc2NzQsMzc2NzUsMzc2NzYsMzc2NzcsMzc2NzgsMzc2NzksMzc2ODAsMzc2ODEsMzc2ODIsMzc2ODMs''@;'; put 'put ''Mzc2ODQsMzc2ODUsMzc2ODYsMzc2ODcsMzc2ODgsMzc2ODksMzc2OTAsMzc2OTEsMzc2OTIsMzc2OTMsMzc2OTUsMzc2OTYsMzc2OTcsMzc2OTgsMzc2OTksMzc3MDAsMzc3MDEsMzc3MDIsMzc3MDMsMzc3MDQsMzc3MDUsMzc3MDYsMzc3MDcsMzc3MDgsMzc3MDksMzc3MTAsMzc3MTEsMzc3''@;'; put 'put ''MTIsMzc3MTMsMzc3MTQsMzc3MTUsMzc3MTYsMzc3MTcsMzc3MTgsMzc3MTksMzc3MjAsMzc3MjEsMzc3MjIsMzc3MjMsMzc3MjQsMzc3MjUsMzc3MjYsMzc3MjcsMzc3MjgsMzc3MjksMzc3MzAsMzc3MzEsMzc3MzIsMzc3MzMsMzc3MzQsMzc3MzUsMzc3MzYsMzc3MzcsMzc3MzksMjg2MTcs''@;'; put 'put ''Mjg1ODMsMjg2MDEsMjg1OTgsMjg2MTAsMjg2NDEsMjg2NTQsMjg2MzgsMjg2NDAsMjg2NTUsMjg2OTgsMjg3MDcsMjg2OTksMjg3MjksMjg3MjUsMjg3NTEsMjg3NjYsMjM0MjQsMjM0MjgsMjM0NDUsMjM0NDMsMjM0NjEsMjM0ODAsMjk5OTksMzk1ODIsMjU2NTIsMjM1MjQsMjM1MzQsMzUx''@;'; put 'put ''MjAsMjM1MzYsMzY0MjMsMzU1OTEsMzY3OTAsMzY4MTksMzY4MjEsMzY4MzcsMzY4NDYsMzY4MzYsMzY4NDEsMzY4MzgsMzY4NTEsMzY4NDAsMzY4NjksMzY4NjgsMzY4NzUsMzY5MDIsMzY4ODEsMzY4NzcsMzY4ODYsMzY4OTcsMzY5MTcsMzY5MTgsMzY5MDksMzY5MTEsMzY5MzIsMzY5NDUs''@;'; put 'put ''MzY5NDYsMzY5NDQsMzY5NjgsMzY5NTIsMzY5NjIsMzY5NTUsMjYyOTcsMzY5ODAsMzY5ODksMzY5OTQsMzdlMywzNjk5NSwzNzAwMywyNDQwMCwyNDQwNywyNDQwNiwyNDQwOCwyMzYxMSwyMTY3NSwyMzYzMiwyMzY0MSwyMzQwOSwyMzY1MSwyMzY1NCwzMjcwMCwyNDM2MiwyNDM2MSwyNDM2''@;'; put 'put ''NSwzMzM5NiwyNDM4MCwzOTczOSwyMzY2MiwyMjkxMywyMjkxNSwyMjkyNSwyMjk1MywyMjk1NCwyMjk0NywzNzc0MCwzNzc0MSwzNzc0MiwzNzc0MywzNzc0NCwzNzc0NSwzNzc0NiwzNzc0NywzNzc0OCwzNzc0OSwzNzc1MCwzNzc1MSwzNzc1MiwzNzc1MywzNzc1NCwzNzc1NSwzNzc1Niwz''@;'; put 'put ''Nzc1NywzNzc1OCwzNzc1OSwzNzc2MCwzNzc2MSwzNzc2MiwzNzc2MywzNzc2NCwzNzc2NSwzNzc2NiwzNzc2NywzNzc2OCwzNzc2OSwzNzc3MCwzNzc3MSwzNzc3MiwzNzc3MywzNzc3NCwzNzc3NiwzNzc3NywzNzc3OCwzNzc3OSwzNzc4MCwzNzc4MSwzNzc4MiwzNzc4MywzNzc4NCwzNzc4''@;'; put 'put ''NSwzNzc4NiwzNzc4NywzNzc4OCwzNzc4OSwzNzc5MCwzNzc5MSwzNzc5MiwzNzc5MywzNzc5NCwzNzc5NSwzNzc5NiwzNzc5NywzNzc5OCwzNzc5OSwzNzgwMCwzNzgwMSwzNzgwMiwzNzgwMywzNzgwNCwzNzgwNSwzNzgwNiwzNzgwNywzNzgwOCwzNzgwOSwzNzgxMCwzNzgxMSwzNzgxMiwz''@;'; put 'put ''NzgxMywzNzgxNCwzNzgxNSwzNzgxNiwzNzgxNywzNzgxOCwzNzgxOSwzNzgyMCwzNzgyMSwzNzgyMiwzNzgyMywzNzgyNCwzNzgyNSwzNzgyNiwzNzgyNywzNzgyOCwzNzgyOSwzNzgzMCwzNzgzMSwzNzgzMiwzNzgzMywzNzgzNSwzNzgzNiwzNzgzNywyMjkzNSwyMjk4NiwyMjk1NSwyMjk0''@;'; put 'put ''MiwyMjk0OCwyMjk5NCwyMjk2MiwyMjk1OSwyMjk5OSwyMjk3NCwyMzA0NSwyMzA0NiwyMzAwNSwyMzA0OCwyMzAxMSwyM2UzLDIzMDMzLDIzMDUyLDIzMDQ5LDIzMDkwLDIzMDkyLDIzMDU3LDIzMDc1LDIzMDU5LDIzMTA0LDIzMTQzLDIzMTE0LDIzMTI1LDIzMTAwLDIzMTM4LDIzMTU3LDMz''@;'; put 'put ''MDA0LDIzMjEwLDIzMTk1LDIzMTU5LDIzMTYyLDIzMjMwLDIzMjc1LDIzMjE4LDIzMjUwLDIzMjUyLDIzMjI0LDIzMjY0LDIzMjY3LDIzMjgxLDIzMjU0LDIzMjcwLDIzMjU2LDIzMjYwLDIzMzA1LDIzMzE5LDIzMzE4LDIzMzQ2LDIzMzUxLDIzMzYwLDIzNTczLDIzNTgwLDIzMzg2LDIzMzk3''@;'; put 'put ''LDIzNDExLDIzMzc3LDIzMzc5LDIzMzk0LDM5NTQxLDM5NTQzLDM5NTQ0LDM5NTQ2LDM5NTUxLDM5NTQ5LDM5NTUyLDM5NTUzLDM5NTU3LDM5NTYwLDM5NTYyLDM5NTY4LDM5NTcwLDM5NTcxLDM5NTc0LDM5NTc2LDM5NTc5LDM5NTgwLDM5NTgxLDM5NTgzLDM5NTg0LDM5NTg2LDM5NTg3LDM5''@;'; put 'put ''NTg5LDM5NTkxLDMyNDE1LDMyNDE3LDMyNDE5LDMyNDIxLDMyNDI0LDMyNDI1LDM3ODM4LDM3ODM5LDM3ODQwLDM3ODQxLDM3ODQyLDM3ODQzLDM3ODQ0LDM3ODQ1LDM3ODQ3LDM3ODQ4LDM3ODQ5LDM3ODUwLDM3ODUxLDM3ODUyLDM3ODUzLDM3ODU0LDM3ODU1LDM3ODU2LDM3ODU3LDM3ODU4''@;'; put 'put ''LDM3ODU5LDM3ODYwLDM3ODYxLDM3ODYyLDM3ODYzLDM3ODY0LDM3ODY1LDM3ODY2LDM3ODY3LDM3ODY4LDM3ODY5LDM3ODcwLDM3ODcxLDM3ODcyLDM3ODczLDM3ODc0LDM3ODc1LDM3ODc2LDM3ODc3LDM3ODc4LDM3ODc5LDM3ODgwLDM3ODgxLDM3ODgyLDM3ODgzLDM3ODg0LDM3ODg1LDM3''@;'; put 'put ''ODg2LDM3ODg3LDM3ODg4LDM3ODg5LDM3ODkwLDM3ODkxLDM3ODkyLDM3ODkzLDM3ODk0LDM3ODk1LDM3ODk2LDM3ODk3LDM3ODk4LDM3ODk5LDM3OTAwLDM3OTAxLDM3OTAyLDM3OTAzLDM3OTA0LDM3OTA1LDM3OTA2LDM3OTA3LDM3OTA4LDM3OTA5LDM3OTEwLDM3OTExLDM3OTEyLDM3OTEz''@;'; put 'put ''LDM3OTE0LDM3OTE1LDM3OTE2LDM3OTE3LDM3OTE4LDM3OTE5LDM3OTIwLDM3OTIxLDM3OTIyLDM3OTIzLDM3OTI0LDM3OTI1LDM3OTI2LDM3OTI3LDM3OTI4LDM3OTI5LDM3OTMwLDM3OTMxLDM3OTMyLDM3OTMzLDM3OTM0LDMyNDI5LDMyNDMyLDMyNDQ2LDMyNDQ4LDMyNDQ5LDMyNDUwLDMy''@;'; put 'put ''NDU3LDMyNDU5LDMyNDYwLDMyNDY0LDMyNDY4LDMyNDcxLDMyNDc1LDMyNDgwLDMyNDgxLDMyNDg4LDMyNDkxLDMyNDk0LDMyNDk1LDMyNDk3LDMyNDk4LDMyNTI1LDMyNTAyLDMyNTA2LDMyNTA3LDMyNTEwLDMyNTEzLDMyNTE0LDMyNTE1LDMyNTE5LDMyNTIwLDMyNTIzLDMyNTI0LDMyNTI3''@;'; put 'put ''LDMyNTI5LDMyNTMwLDMyNTM1LDMyNTM3LDMyNTQwLDMyNTM5LDMyNTQzLDMyNTQ1LDMyNTQ2LDMyNTQ3LDMyNTQ4LDMyNTQ5LDMyNTUwLDMyNTUxLDMyNTU0LDMyNTU1LDMyNTU2LDMyNTU3LDMyNTU5LDMyNTYwLDMyNTYxLDMyNTYyLDMyNTYzLDMyNTY1LDI0MTg2LDMwMDc5LDI0MDI3LDMw''@;'; put 'put ''MDE0LDM3MDEzLDI5NTgyLDI5NTg1LDI5NjE0LDI5NjAyLDI5NTk5LDI5NjQ3LDI5NjM0LDI5NjQ5LDI5NjIzLDI5NjE5LDI5NjMyLDI5NjQxLDI5NjQwLDI5NjY5LDI5NjU3LDM5MDM2LDI5NzA2LDI5NjczLDI5NjcxLDI5NjYyLDI5NjI2LDI5NjgyLDI5NzExLDI5NzM4LDI5Nzg3LDI5NzM0''@;'; put 'put ''LDI5NzMzLDI5NzM2LDI5NzQ0LDI5NzQyLDI5NzQwLDM3OTM1LDM3OTM2LDM3OTM3LDM3OTM4LDM3OTM5LDM3OTQwLDM3OTQxLDM3OTQyLDM3OTQzLDM3OTQ0LDM3OTQ1LDM3OTQ2LDM3OTQ3LDM3OTQ4LDM3OTQ5LDM3OTUxLDM3OTUyLDM3OTUzLDM3OTU0LDM3OTU1LDM3OTU2LDM3OTU3LDM3''@;'; put 'put ''OTU4LDM3OTU5LDM3OTYwLDM3OTYxLDM3OTYyLDM3OTYzLDM3OTY0LDM3OTY1LDM3OTY2LDM3OTY3LDM3OTY4LDM3OTY5LDM3OTcwLDM3OTcxLDM3OTcyLDM3OTczLDM3OTc0LDM3OTc1LDM3OTc2LDM3OTc3LDM3OTc4LDM3OTc5LDM3OTgwLDM3OTgxLDM3OTgyLDM3OTgzLDM3OTg0LDM3OTg1''@;'; put 'put ''LDM3OTg2LDM3OTg3LDM3OTg4LDM3OTg5LDM3OTkwLDM3OTkxLDM3OTkyLDM3OTkzLDM3OTk0LDM3OTk2LDM3OTk3LDM3OTk4LDM3OTk5LDM4ZTMsMzgwMDEsMzgwMDIsMzgwMDMsMzgwMDQsMzgwMDUsMzgwMDYsMzgwMDcsMzgwMDgsMzgwMDksMzgwMTAsMzgwMTEsMzgwMTIsMzgwMTMsMzgw''@;'; put 'put ''MTQsMzgwMTUsMzgwMTYsMzgwMTcsMzgwMTgsMzgwMTksMzgwMjAsMzgwMzMsMzgwMzgsMzgwNDAsMzgwODcsMzgwOTUsMzgwOTksMzgxMDAsMzgxMDYsMzgxMTgsMzgxMzksMzgxNzIsMzgxNzYsMjk3MjMsMjk3MjIsMjk3NjEsMjk3ODgsMjk3ODMsMjk3ODEsMjk3ODUsMjk4MTUsMjk4MDUs''@;'; put 'put ''Mjk4MjIsMjk4NTIsMjk4MzgsMjk4MjQsMjk4MjUsMjk4MzEsMjk4MzUsMjk4NTQsMjk4NjQsMjk4NjUsMjk4NDAsMjk4NjMsMjk5MDYsMjk4ODIsMzg4OTAsMzg4OTEsMzg4OTIsMjY0NDQsMjY0NTEsMjY0NjIsMjY0NDAsMjY0NzMsMjY1MzMsMjY1MDMsMjY0NzQsMjY0ODMsMjY1MjAsMjY1''@;'; put 'put ''MzUsMjY0ODUsMjY1MzYsMjY1MjYsMjY1NDEsMjY1MDcsMjY0ODcsMjY0OTIsMjY2MDgsMjY2MzMsMjY1ODQsMjY2MzQsMjY2MDEsMjY1NDQsMjY2MzYsMjY1ODUsMjY1NDksMjY1ODYsMjY1NDcsMjY1ODksMjY2MjQsMjY1NjMsMjY1NTIsMjY1OTQsMjY2MzgsMjY1NjEsMjY2MjEsMjY2NzQs''@;'; put 'put ''MjY2NzUsMjY3MjAsMjY3MjEsMjY3MDIsMjY3MjIsMjY2OTIsMjY3MjQsMjY3NTUsMjY2NTMsMjY3MDksMjY3MjYsMjY2ODksMjY3MjcsMjY2ODgsMjY2ODYsMjY2OTgsMjY2OTcsMjY2NjUsMjY4MDUsMjY3NjcsMjY3NDAsMjY3NDMsMjY3NzEsMjY3MzEsMjY4MTgsMjY5OTAsMjY4NzYsMjY5''@;'; put 'put ''MTEsMjY5MTIsMjY4NzMsMzgxODMsMzgxOTUsMzgyMDUsMzgyMTEsMzgyMTYsMzgyMTksMzgyMjksMzgyMzQsMzgyNDAsMzgyNTQsMzgyNjAsMzgyNjEsMzgyNjMsMzgyNjQsMzgyNjUsMzgyNjYsMzgyNjcsMzgyNjgsMzgyNjksMzgyNzAsMzgyNzIsMzgyNzMsMzgyNzQsMzgyNzUsMzgyNzYs''@;'; put 'put ''MzgyNzcsMzgyNzgsMzgyNzksMzgyODAsMzgyODEsMzgyODIsMzgyODMsMzgyODQsMzgyODUsMzgyODYsMzgyODcsMzgyODgsMzgyODksMzgyOTAsMzgyOTEsMzgyOTIsMzgyOTMsMzgyOTQsMzgyOTUsMzgyOTYsMzgyOTcsMzgyOTgsMzgyOTksMzgzMDAsMzgzMDEsMzgzMDIsMzgzMDMsMzgz''@;'; put 'put ''MDQsMzgzMDUsMzgzMDYsMzgzMDcsMzgzMDgsMzgzMDksMzgzMTAsMzgzMTEsMzgzMTIsMzgzMTMsMzgzMTQsMzgzMTUsMzgzMTYsMzgzMTcsMzgzMTgsMzgzMTksMzgzMjAsMzgzMjEsMzgzMjIsMzgzMjMsMzgzMjQsMzgzMjUsMzgzMjYsMzgzMjcsMzgzMjgsMzgzMjksMzgzMzAsMzgzMzEs''@;'; put 'put ''MzgzMzIsMzgzMzMsMzgzMzQsMzgzMzUsMzgzMzYsMzgzMzcsMzgzMzgsMzgzMzksMzgzNDAsMzgzNDEsMzgzNDIsMzgzNDMsMzgzNDQsMzgzNDUsMzgzNDYsMzgzNDcsMjY5MTYsMjY4NjQsMjY4OTEsMjY4ODEsMjY5NjcsMjY4NTEsMjY4OTYsMjY5OTMsMjY5MzcsMjY5NzYsMjY5NDYsMjY5''@;'; put 'put ''NzMsMjcwMTIsMjY5ODcsMjcwMDgsMjcwMzIsMjdlMywyNjkzMiwyNzA4NCwyNzAxNSwyNzAxNiwyNzA4NiwyNzAxNywyNjk4MiwyNjk3OSwyNzAwMSwyNzAzNSwyNzA0NywyNzA2NywyNzA1MSwyNzA1MywyNzA5MiwyNzA1NywyNzA3MywyNzA4MiwyNzEwMywyNzAyOSwyNzEwNCwyNzAyMSwy''@;'; put 'put ''NzEzNSwyNzE4MywyNzExNywyNzE1OSwyNzE2MCwyNzIzNywyNzEyMiwyNzIwNCwyNzE5OCwyNzI5NiwyNzIxNiwyNzIyNywyNzE4OSwyNzI3OCwyNzI1NywyNzE5NywyNzE3NiwyNzIyNCwyNzI2MCwyNzI4MSwyNzI4MCwyNzMwNSwyNzI4NywyNzMwNywyOTQ5NSwyOTUyMiwyNzUyMSwyNzUy''@;'; put 'put ''MiwyNzUyNywyNzUyNCwyNzUzOCwyNzUzOSwyNzUzMywyNzU0NiwyNzU0NywyNzU1MywyNzU2MiwzNjcxNSwzNjcxNywzNjcyMSwzNjcyMiwzNjcyMywzNjcyNSwzNjcyNiwzNjcyOCwzNjcyNywzNjcyOSwzNjczMCwzNjczMiwzNjczNCwzNjczNywzNjczOCwzNjc0MCwzNjc0MywzNjc0Nywz''@;'; put 'put ''ODM0OCwzODM0OSwzODM1MCwzODM1MSwzODM1MiwzODM1MywzODM1NCwzODM1NSwzODM1NiwzODM1NywzODM1OCwzODM1OSwzODM2MCwzODM2MSwzODM2MiwzODM2MywzODM2NCwzODM2NSwzODM2NiwzODM2NywzODM2OCwzODM2OSwzODM3MCwzODM3MSwzODM3MiwzODM3MywzODM3NCwzODM3''@;'; put 'put ''NSwzODM4MCwzODM5OSwzODQwNywzODQxOSwzODQyNCwzODQyNywzODQzMCwzODQzMiwzODQzNSwzODQzNiwzODQzNywzODQzOCwzODQzOSwzODQ0MCwzODQ0MSwzODQ0MywzODQ0NCwzODQ0NSwzODQ0NywzODQ0OCwzODQ1NSwzODQ1NiwzODQ1NywzODQ1OCwzODQ2MiwzODQ2NSwzODQ2Nywz''@;'; put 'put ''ODQ3NCwzODQ3OCwzODQ3OSwzODQ4MSwzODQ4MiwzODQ4MywzODQ4NiwzODQ4NywzODQ4OCwzODQ4OSwzODQ5MCwzODQ5MiwzODQ5MywzODQ5NCwzODQ5NiwzODQ5OSwzODUwMSwzODUwMiwzODUwNywzODUwOSwzODUxMCwzODUxMSwzODUxMiwzODUxMywzODUxNSwzODUyMCwzODUyMSwzODUy''@;'; put 'put ''MiwzODUyMywzODUyNCwzODUyNSwzODUyNiwzODUyNywzODUyOCwzODUyOSwzODUzMCwzODUzMSwzODUzMiwzODUzNSwzODUzNywzODUzOCwzNjc0OSwzNjc1MCwzNjc1MSwzNjc2MCwzNjc2MiwzNjU1OCwyNTA5OSwyNTExMSwyNTExNSwyNTExOSwyNTEyMiwyNTEyMSwyNTEyNSwyNTEyNCwy''@;'; put 'put ''NTEzMiwzMzI1NSwyOTkzNSwyOTk0MCwyOTk1MSwyOTk2NywyOTk2OSwyOTk3MSwyNTkwOCwyNjA5NCwyNjA5NSwyNjA5NiwyNjEyMiwyNjEzNywyNjQ4MiwyNjExNSwyNjEzMywyNjExMiwyODgwNSwyNjM1OSwyNjE0MSwyNjE2NCwyNjE2MSwyNjE2NiwyNjE2NSwzMjc3NCwyNjIwNywyNjE5''@;'; put 'put ''NiwyNjE3NywyNjE5MSwyNjE5OCwyNjIwOSwyNjE5OSwyNjIzMSwyNjI0NCwyNjI1MiwyNjI3OSwyNjI2OSwyNjMwMiwyNjMzMSwyNjMzMiwyNjM0MiwyNjM0NSwzNjE0NiwzNjE0NywzNjE1MCwzNjE1NSwzNjE1NywzNjE2MCwzNjE2NSwzNjE2NiwzNjE2OCwzNjE2OSwzNjE2NywzNjE3Mywz''@;'; put 'put ''NjE4MSwzNjE4NSwzNTI3MSwzNTI3NCwzNTI3NSwzNTI3NiwzNTI3OCwzNTI3OSwzNTI4MCwzNTI4MSwyOTI5NCwyOTM0MywyOTI3NywyOTI4NiwyOTI5NSwyOTMxMCwyOTMxMSwyOTMxNiwyOTMyMywyOTMyNSwyOTMyNywyOTMzMCwyNTM1MiwyNTM5NCwyNTUyMCwzODU0MCwzODU0MiwzODU0''@;'; put 'put ''NSwzODU0NiwzODU0NywzODU0OSwzODU1MCwzODU1NCwzODU1NSwzODU1NywzODU1OCwzODU1OSwzODU2MCwzODU2MSwzODU2MiwzODU2MywzODU2NCwzODU2NSwzODU2NiwzODU2OCwzODU2OSwzODU3MCwzODU3MSwzODU3MiwzODU3MywzODU3NCwzODU3NSwzODU3NywzODU3OCwzODU4MCwz''@;'; put 'put ''ODU4MSwzODU4MywzODU4NCwzODU4NiwzODU4NywzODU5MSwzODU5NCwzODU5NSwzODYwMCwzODYwMiwzODYwMywzODYwOCwzODYwOSwzODYxMSwzODYxMiwzODYxNCwzODYxNSwzODYxNiwzODYxNywzODYxOCwzODYxOSwzODYyMCwzODYyMSwzODYyMiwzODYyMywzODYyNSwzODYyNiwzODYy''@;'; put 'put ''NywzODYyOCwzODYyOSwzODYzMCwzODYzMSwzODYzNSwzODYzNiwzODYzNywzODYzOCwzODY0MCwzODY0MSwzODY0MiwzODY0NCwzODY0NSwzODY0OCwzODY1MCwzODY1MSwzODY1MiwzODY1MywzODY1NSwzODY1OCwzODY1OSwzODY2MSwzODY2NiwzODY2NywzODY2OCwzODY3MiwzODY3Mywz''@;'; put 'put ''ODY3NCwzODY3NiwzODY3NywzODY3OSwzODY4MCwzODY4MSwzODY4MiwzODY4MywzODY4NSwzODY4NywzODY4OCwyNTY2MywyNTgxNiwzMjc3MiwyNzYyNiwyNzYzNSwyNzY0NSwyNzYzNywyNzY0MSwyNzY1MywyNzY1NSwyNzY1NCwyNzY2MSwyNzY2OSwyNzY3MiwyNzY3MywyNzY3NCwyNzY4''@;'; put 'put ''MSwyNzY4OSwyNzY4NCwyNzY5MCwyNzY5OCwyNTkwOSwyNTk0MSwyNTk2MywyOTI2MSwyOTI2NiwyOTI3MCwyOTIzMiwzNDQwMiwyMTAxNCwzMjkyNywzMjkyNCwzMjkxNSwzMjk1NiwyNjM3OCwzMjk1NywzMjk0NSwzMjkzOSwzMjk0MSwzMjk0OCwzMjk1MSwzMjk5OSwzM2UzLDMzMDAxLDMz''@;'; put 'put ''MDAyLDMyOTg3LDMyOTYyLDMyOTY0LDMyOTg1LDMyOTczLDMyOTgzLDI2Mzg0LDMyOTg5LDMzMDAzLDMzMDA5LDMzMDEyLDMzMDA1LDMzMDM3LDMzMDM4LDMzMDEwLDMzMDIwLDI2Mzg5LDMzMDQyLDM1OTMwLDMzMDc4LDMzMDU0LDMzMDY4LDMzMDQ4LDMzMDc0LDMzMDk2LDMzMTAwLDMzMTA3''@;'; put 'put ''LDMzMTQwLDMzMTEzLDMzMTE0LDMzMTM3LDMzMTIwLDMzMTI5LDMzMTQ4LDMzMTQ5LDMzMTMzLDMzMTI3LDIyNjA1LDIzMjIxLDMzMTYwLDMzMTU0LDMzMTY5LDI4MzczLDMzMTg3LDMzMTk0LDMzMjI4LDI2NDA2LDMzMjI2LDMzMjExLDM4Njg5LDM4NjkwLDM4NjkxLDM4NjkyLDM4NjkzLDM4''@;'; put 'put ''Njk0LDM4Njk1LDM4Njk2LDM4Njk3LDM4Njk5LDM4NzAwLDM4NzAyLDM4NzAzLDM4NzA1LDM4NzA3LDM4NzA4LDM4NzA5LDM4NzEwLDM4NzExLDM4NzE0LDM4NzE1LDM4NzE2LDM4NzE3LDM4NzE5LDM4NzIwLDM4NzIxLDM4NzIyLDM4NzIzLDM4NzI0LDM4NzI1LDM4NzI2LDM4NzI3LDM4NzI4''@;'; put 'put ''LDM4NzI5LDM4NzMwLDM4NzMxLDM4NzMyLDM4NzMzLDM4NzM0LDM4NzM1LDM4NzM2LDM4NzM3LDM4NzQwLDM4NzQxLDM4NzQzLDM4NzQ0LDM4NzQ2LDM4NzQ4LDM4NzQ5LDM4NzUxLDM4NzU1LDM4NzU2LDM4NzU4LDM4NzU5LDM4NzYwLDM4NzYyLDM4NzYzLDM4NzY0LDM4NzY1LDM4NzY2LDM4''@;'; put 'put ''NzY3LDM4NzY4LDM4NzY5LDM4NzcwLDM4NzczLDM4Nzc1LDM4Nzc2LDM4Nzc3LDM4Nzc4LDM4Nzc5LDM4NzgxLDM4NzgyLDM4NzgzLDM4Nzg0LDM4Nzg1LDM4Nzg2LDM4Nzg3LDM4Nzg4LDM4NzkwLDM4NzkxLDM4NzkyLDM4NzkzLDM4Nzk0LDM4Nzk2LDM4Nzk4LDM4Nzk5LDM4ODAwLDM4ODAz''@;'; put 'put ''LDM4ODA1LDM4ODA2LDM4ODA3LDM4ODA5LDM4ODEwLDM4ODExLDM4ODEyLDM4ODEzLDMzMjE3LDMzMTkwLDI3NDI4LDI3NDQ3LDI3NDQ5LDI3NDU5LDI3NDYyLDI3NDgxLDM5MTIxLDM5MTIyLDM5MTIzLDM5MTI1LDM5MTI5LDM5MTMwLDI3NTcxLDI0Mzg0LDI3NTg2LDM1MzE1LDI2ZTMsNDA3''@;'; put 'put ''ODUsMjYwMDMsMjYwNDQsMjYwNTQsMjYwNTIsMjYwNTEsMjYwNjAsMjYwNjIsMjYwNjYsMjYwNzAsMjg4MDAsMjg4MjgsMjg4MjIsMjg4MjksMjg4NTksMjg4NjQsMjg4NTUsMjg4NDMsMjg4NDksMjg5MDQsMjg4NzQsMjg5NDQsMjg5NDcsMjg5NTAsMjg5NzUsMjg5NzcsMjkwNDMsMjkwMjAs''@;'; put 'put ''MjkwMzIsMjg5OTcsMjkwNDIsMjkwMDIsMjkwNDgsMjkwNTAsMjkwODAsMjkxMDcsMjkxMDksMjkwOTYsMjkwODgsMjkxNTIsMjkxNDAsMjkxNTksMjkxNzcsMjkyMTMsMjkyMjQsMjg3ODAsMjg5NTIsMjkwMzAsMjkxMTMsMjUxNTAsMjUxNDksMjUxNTUsMjUxNjAsMjUxNjEsMzEwMzUsMzEw''@;'; put 'put ''NDAsMzEwNDYsMzEwNDksMzEwNjcsMzEwNjgsMzEwNTksMzEwNjYsMzEwNzQsMzEwNjMsMzEwNzIsMzEwODcsMzEwNzksMzEwOTgsMzExMDksMzExMTQsMzExMzAsMzExNDMsMzExNTUsMjQ1MjksMjQ1MjgsMzg4MTQsMzg4MTUsMzg4MTcsMzg4MTgsMzg4MjAsMzg4MjEsMzg4MjIsMzg4MjMs''@;'; put 'put ''Mzg4MjQsMzg4MjUsMzg4MjYsMzg4MjgsMzg4MzAsMzg4MzIsMzg4MzMsMzg4MzUsMzg4MzcsMzg4MzgsMzg4MzksMzg4NDAsMzg4NDEsMzg4NDIsMzg4NDMsMzg4NDQsMzg4NDUsMzg4NDYsMzg4NDcsMzg4NDgsMzg4NDksMzg4NTAsMzg4NTEsMzg4NTIsMzg4NTMsMzg4NTQsMzg4NTUsMzg4''@;'; put 'put ''NTYsMzg4NTcsMzg4NTgsMzg4NTksMzg4NjAsMzg4NjEsMzg4NjIsMzg4NjMsMzg4NjQsMzg4NjUsMzg4NjYsMzg4NjcsMzg4NjgsMzg4NjksMzg4NzAsMzg4NzEsMzg4NzIsMzg4NzMsMzg4NzQsMzg4NzUsMzg4NzYsMzg4NzcsMzg4NzgsMzg4NzksMzg4ODAsMzg4ODEsMzg4ODIsMzg4ODMs''@;'; put 'put ''Mzg4ODQsMzg4ODUsMzg4ODgsMzg4OTQsMzg4OTUsMzg4OTYsMzg4OTcsMzg4OTgsMzg5MDAsMzg5MDMsMzg5MDQsMzg5MDUsMzg5MDYsMzg5MDcsMzg5MDgsMzg5MDksMzg5MTAsMzg5MTEsMzg5MTIsMzg5MTMsMzg5MTQsMzg5MTUsMzg5MTYsMzg5MTcsMzg5MTgsMzg5MTksMzg5MjAsMzg5''@;'; put 'put ''MjEsMzg5MjIsMzg5MjMsMzg5MjQsMzg5MjUsMzg5MjYsMjQ2MzYsMjQ2NjksMjQ2NjYsMjQ2NzksMjQ2NDEsMjQ2NjUsMjQ2NzUsMjQ3NDcsMjQ4MzgsMjQ4NDUsMjQ5MjUsMjUwMDEsMjQ5ODksMjUwMzUsMjUwNDEsMjUwOTQsMzI4OTYsMzI4OTUsMjc3OTUsMjc4OTQsMjgxNTYsMzA3MTAs''@;'; put 'put ''MzA3MTIsMzA3MjAsMzA3MjksMzA3NDMsMzA3NDQsMzA3MzcsMjYwMjcsMzA3NjUsMzA3NDgsMzA3NDksMzA3NzcsMzA3NzgsMzA3NzksMzA3NTEsMzA3ODAsMzA3NTcsMzA3NjQsMzA3NTUsMzA3NjEsMzA3OTgsMzA4MjksMzA4MDYsMzA4MDcsMzA3NTgsMzA4MDAsMzA3OTEsMzA3OTYsMzA4''@;'; put 'put ''MjYsMzA4NzUsMzA4NjcsMzA4NzQsMzA4NTUsMzA4NzYsMzA4ODEsMzA4ODMsMzA4OTgsMzA5MDUsMzA4ODUsMzA5MzIsMzA5MzcsMzA5MjEsMzA5NTYsMzA5NjIsMzA5ODEsMzA5NjQsMzA5OTUsMzEwMTIsMzEwMDYsMzEwMjgsNDA4NTksNDA2OTcsNDA2OTksNDA3MDAsMzA0NDksMzA0Njgs''@;'; put 'put ''MzA0NzcsMzA0NTcsMzA0NzEsMzA0NzIsMzA0OTAsMzA0OTgsMzA0ODksMzA1MDksMzA1MDIsMzA1MTcsMzA1MjAsMzA1NDQsMzA1NDUsMzA1MzUsMzA1MzEsMzA1NTQsMzA1NjgsMzg5MjcsMzg5MjgsMzg5MjksMzg5MzAsMzg5MzEsMzg5MzIsMzg5MzMsMzg5MzQsMzg5MzUsMzg5MzYsMzg5''@;'; put 'put ''MzcsMzg5MzgsMzg5MzksMzg5NDAsMzg5NDEsMzg5NDIsMzg5NDMsMzg5NDQsMzg5NDUsMzg5NDYsMzg5NDcsMzg5NDgsMzg5NDksMzg5NTAsMzg5NTEsMzg5NTIsMzg5NTMsMzg5NTQsMzg5NTUsMzg5NTYsMzg5NTcsMzg5NTgsMzg5NTksMzg5NjAsMzg5NjEsMzg5NjIsMzg5NjMsMzg5NjQs''@;'; put 'put ''Mzg5NjUsMzg5NjYsMzg5NjcsMzg5NjgsMzg5NjksMzg5NzAsMzg5NzEsMzg5NzIsMzg5NzMsMzg5NzQsMzg5NzUsMzg5NzYsMzg5NzcsMzg5NzgsMzg5NzksMzg5ODAsMzg5ODEsMzg5ODIsMzg5ODMsMzg5ODQsMzg5ODUsMzg5ODYsMzg5ODcsMzg5ODgsMzg5ODksMzg5OTAsMzg5OTEsMzg5''@;'; put 'put ''OTIsMzg5OTMsMzg5OTQsMzg5OTUsMzg5OTYsMzg5OTcsMzg5OTgsMzg5OTksMzllMywzOTAwMSwzOTAwMiwzOTAwMywzOTAwNCwzOTAwNSwzOTAwNiwzOTAwNywzOTAwOCwzOTAwOSwzOTAxMCwzOTAxMSwzOTAxMiwzOTAxMywzOTAxNCwzOTAxNSwzOTAxNiwzOTAxNywzOTAxOCwzOTAxOSwz''@;'; put 'put ''OTAyMCwzOTAyMSwzOTAyMiwzMDU2MiwzMDU2NSwzMDU5MSwzMDYwNSwzMDU4OSwzMDU5MiwzMDYwNCwzMDYwOSwzMDYyMywzMDYyNCwzMDY0MCwzMDY0NSwzMDY1MywzMDAxMCwzMDAxNiwzMDAzMCwzMDAyNywzMDAyNCwzMDA0MywzMDA2NiwzMDA3MywzMDA4MywzMjYwMCwzMjYwOSwzMjYw''@;'; put 'put ''NywzNTQwMCwzMjYxNiwzMjYyOCwzMjYyNSwzMjYzMywzMjY0MSwzMjYzOCwzMDQxMywzMDQzNywzNDg2NiwzODAyMSwzODAyMiwzODAyMywzODAyNywzODAyNiwzODAyOCwzODAyOSwzODAzMSwzODAzMiwzODAzNiwzODAzOSwzODAzNywzODA0MiwzODA0MywzODA0NCwzODA1MSwzODA1Miwz''@;'; put 'put ''ODA1OSwzODA1OCwzODA2MSwzODA2MCwzODA2MywzODA2NCwzODA2NiwzODA2OCwzODA3MCwzODA3MSwzODA3MiwzODA3MywzODA3NCwzODA3NiwzODA3NywzODA3OSwzODA4NCwzODA4OCwzODA4OSwzODA5MCwzODA5MSwzODA5MiwzODA5MywzODA5NCwzODA5NiwzODA5NywzODA5OCwzODEw''@;'; put 'put ''MSwzODEwMiwzODEwMywzODEwNSwzODEwNCwzODEwNywzODExMCwzODExMSwzODExMiwzODExNCwzODExNiwzODExNywzODExOSwzODEyMCwzODEyMiwzOTAyMywzOTAyNCwzOTAyNSwzOTAyNiwzOTAyNywzOTAyOCwzOTA1MSwzOTA1NCwzOTA1OCwzOTA2MSwzOTA2NSwzOTA3NSwzOTA4MCwz''@;'; put 'put ''OTA4MSwzOTA4MiwzOTA4MywzOTA4NCwzOTA4NSwzOTA4NiwzOTA4NywzOTA4OCwzOTA4OSwzOTA5MCwzOTA5MSwzOTA5MiwzOTA5MywzOTA5NCwzOTA5NSwzOTA5NiwzOTA5NywzOTA5OCwzOTA5OSwzOTEwMCwzOTEwMSwzOTEwMiwzOTEwMywzOTEwNCwzOTEwNSwzOTEwNiwzOTEwNywzOTEw''@;'; put 'put ''OCwzOTEwOSwzOTExMCwzOTExMSwzOTExMiwzOTExMywzOTExNCwzOTExNSwzOTExNiwzOTExNywzOTExOSwzOTEyMCwzOTEyNCwzOTEyNiwzOTEyNywzOTEzMSwzOTEzMiwzOTEzMywzOTEzNiwzOTEzNywzOTEzOCwzOTEzOSwzOTE0MCwzOTE0MSwzOTE0MiwzOTE0NSwzOTE0NiwzOTE0Nywz''@;'; put 'put ''OTE0OCwzOTE0OSwzOTE1MCwzOTE1MSwzOTE1MiwzOTE1MywzOTE1NCwzOTE1NSwzOTE1NiwzOTE1NywzOTE1OCwzOTE1OSwzOTE2MCwzOTE2MSwzOTE2MiwzOTE2MywzOTE2NCwzOTE2NSwzOTE2NiwzOTE2NywzOTE2OCwzOTE2OSwzOTE3MCwzOTE3MSwzOTE3MiwzOTE3MywzOTE3NCwzOTE3''@;'; put 'put ''NSwzODEyMSwzODEyMywzODEyNiwzODEyNywzODEzMSwzODEzMiwzODEzMywzODEzNSwzODEzNywzODE0MCwzODE0MSwzODE0MywzODE0NywzODE0NiwzODE1MCwzODE1MSwzODE1MywzODE1NCwzODE1NywzODE1OCwzODE1OSwzODE2MiwzODE2MywzODE2NCwzODE2NSwzODE2NiwzODE2OCwz''@;'; put 'put ''ODE3MSwzODE3MywzODE3NCwzODE3NSwzODE3OCwzODE4NiwzODE4NywzODE4NSwzODE4OCwzODE5MywzODE5NCwzODE5NiwzODE5OCwzODE5OSwzODIwMCwzODIwNCwzODIwNiwzODIwNywzODIxMCwzODE5NywzODIxMiwzODIxMywzODIxNCwzODIxNywzODIyMCwzODIyMiwzODIyMywzODIy''@;'; put 'put ''NiwzODIyNywzODIyOCwzODIzMCwzODIzMSwzODIzMiwzODIzMywzODIzNSwzODIzOCwzODIzOSwzODIzNywzODI0MSwzODI0MiwzODI0NCwzODI0NSwzODI0NiwzODI0NywzODI0OCwzODI0OSwzODI1MCwzODI1MSwzODI1MiwzODI1NSwzODI1NywzODI1OCwzODI1OSwzODIwMiwzMDY5NSwz''@;'; put 'put ''MDcwMCwzODYwMSwzMTE4OSwzMTIxMywzMTIwMywzMTIxMSwzMTIzOCwyMzg3OSwzMTIzNSwzMTIzNCwzMTI2MiwzMTI1MiwzOTE3NiwzOTE3NywzOTE3OCwzOTE3OSwzOTE4MCwzOTE4MiwzOTE4MywzOTE4NSwzOTE4NiwzOTE4NywzOTE4OCwzOTE4OSwzOTE5MCwzOTE5MSwzOTE5MiwzOTE5''@;'; put 'put ''MywzOTE5NCwzOTE5NSwzOTE5NiwzOTE5NywzOTE5OCwzOTE5OSwzOTIwMCwzOTIwMSwzOTIwMiwzOTIwMywzOTIwNCwzOTIwNSwzOTIwNiwzOTIwNywzOTIwOCwzOTIwOSwzOTIxMCwzOTIxMSwzOTIxMiwzOTIxMywzOTIxNSwzOTIxNiwzOTIxNywzOTIxOCwzOTIxOSwzOTIyMCwzOTIyMSwz''@;'; put 'put ''OTIyMiwzOTIyMywzOTIyNCwzOTIyNSwzOTIyNiwzOTIyNywzOTIyOCwzOTIyOSwzOTIzMCwzOTIzMSwzOTIzMiwzOTIzMywzOTIzNCwzOTIzNSwzOTIzNiwzOTIzNywzOTIzOCwzOTIzOSwzOTI0MCwzOTI0MSwzOTI0MiwzOTI0MywzOTI0NCwzOTI0NSwzOTI0NiwzOTI0NywzOTI0OCwzOTI0''@;'; put 'put ''OSwzOTI1MCwzOTI1MSwzOTI1NCwzOTI1NSwzOTI1NiwzOTI1NywzOTI1OCwzOTI1OSwzOTI2MCwzOTI2MSwzOTI2MiwzOTI2MywzOTI2NCwzOTI2NSwzOTI2NiwzOTI2OCwzOTI3MCwzOTI4MywzOTI4OCwzOTI4OSwzOTI5MSwzOTI5NCwzOTI5OCwzOTI5OSwzOTMwNSwzMTI4OSwzMTI4Nywz''@;'; put 'put ''MTMxMyw0MDY1NSwzOTMzMywzMTM0NCwzMDM0NCwzMDM1MCwzMDM1NSwzMDM2MSwzMDM3MiwyOTkxOCwyOTkyMCwyOTk5Niw0MDQ4MCw0MDQ4Miw0MDQ4OCw0MDQ4OSw0MDQ5MCw0MDQ5MSw0MDQ5Miw0MDQ5OCw0MDQ5Nyw0MDUwMiw0MDUwNCw0MDUwMyw0MDUwNSw0MDUwNiw0MDUxMCw0MDUx''@;'; put 'put ''Myw0MDUxNCw0MDUxNiw0MDUxOCw0MDUxOSw0MDUyMCw0MDUyMSw0MDUyMyw0MDUyNCw0MDUyNiw0MDUyOSw0MDUzMyw0MDUzNSw0MDUzOCw0MDUzOSw0MDU0MCw0MDU0Miw0MDU0Nyw0MDU1MCw0MDU1MSw0MDU1Miw0MDU1Myw0MDU1NCw0MDU1NSw0MDU1Niw0MDU2MSw0MDU1Nyw0MDU2Mywz''@;'; put 'put ''MDA5OCwzMDEwMCwzMDEwMiwzMDExMiwzMDEwOSwzMDEyNCwzMDExNSwzMDEzMSwzMDEzMiwzMDEzNiwzMDE0OCwzMDEyOSwzMDEyOCwzMDE0NywzMDE0NiwzMDE2NiwzMDE1NywzMDE3OSwzMDE4NCwzMDE4MiwzMDE4MCwzMDE4NywzMDE4MywzMDIxMSwzMDE5MywzMDIwNCwzMDIwNywzMDIy''@;'; put 'put ''NCwzMDIwOCwzMDIxMywzMDIyMCwzMDIzMSwzMDIxOCwzMDI0NSwzMDIzMiwzMDIyOSwzMDIzMywzOTMwOCwzOTMxMCwzOTMyMiwzOTMyMywzOTMyNCwzOTMyNSwzOTMyNiwzOTMyNywzOTMyOCwzOTMyOSwzOTMzMCwzOTMzMSwzOTMzMiwzOTMzNCwzOTMzNSwzOTMzNywzOTMzOCwzOTMzOSwz''@;'; put 'put ''OTM0MCwzOTM0MSwzOTM0MiwzOTM0MywzOTM0NCwzOTM0NSwzOTM0NiwzOTM0NywzOTM0OCwzOTM0OSwzOTM1MCwzOTM1MSwzOTM1MiwzOTM1MywzOTM1NCwzOTM1NSwzOTM1NiwzOTM1NywzOTM1OCwzOTM1OSwzOTM2MCwzOTM2MSwzOTM2MiwzOTM2MywzOTM2NCwzOTM2NSwzOTM2NiwzOTM2''@;'; put 'put ''NywzOTM2OCwzOTM2OSwzOTM3MCwzOTM3MSwzOTM3MiwzOTM3MywzOTM3NCwzOTM3NSwzOTM3NiwzOTM3NywzOTM3OCwzOTM3OSwzOTM4MCwzOTM4MSwzOTM4MiwzOTM4MywzOTM4NCwzOTM4NSwzOTM4NiwzOTM4NywzOTM4OCwzOTM4OSwzOTM5MCwzOTM5MSwzOTM5MiwzOTM5MywzOTM5NCwz''@;'; put 'put ''OTM5NSwzOTM5NiwzOTM5NywzOTM5OCwzOTM5OSwzOTQwMCwzOTQwMSwzOTQwMiwzOTQwMywzOTQwNCwzOTQwNSwzOTQwNiwzOTQwNywzOTQwOCwzOTQwOSwzOTQxMCwzOTQxMSwzOTQxMiwzOTQxMywzOTQxNCwzOTQxNSwzOTQxNiwzOTQxNywzMDIzNSwzMDI2OCwzMDI0MiwzMDI0MCwzMDI3''@;'; put 'put ''MiwzMDI1MywzMDI1NiwzMDI3MSwzMDI2MSwzMDI3NSwzMDI3MCwzMDI1OSwzMDI4NSwzMDMwMiwzMDI5MiwzMDMwMCwzMDI5NCwzMDMxNSwzMDMxOSwzMjcxNCwzMTQ2MiwzMTM1MiwzMTM1MywzMTM2MCwzMTM2NiwzMTM2OCwzMTM4MSwzMTM5OCwzMTM5MiwzMTQwNCwzMTQwMCwzMTQwNSwz''@;'; put 'put ''MTQxMSwzNDkxNiwzNDkyMSwzNDkzMCwzNDk0MSwzNDk0MywzNDk0NiwzNDk3OCwzNTAxNCwzNDk5OSwzNTAwNCwzNTAxNywzNTA0MiwzNTAyMiwzNTA0MywzNTA0NSwzNTA1NywzNTA5OCwzNTA2OCwzNTA0OCwzNTA3MCwzNTA1NiwzNTEwNSwzNTA5NywzNTA5MSwzNTA5OSwzNTA4MiwzNTEy''@;'; put 'put ''NCwzNTExNSwzNTEyNiwzNTEzNywzNTE3NCwzNTE5NSwzMDA5MSwzMjk5NywzMDM4NiwzMDM4OCwzMDY4NCwzMjc4NiwzMjc4OCwzMjc5MCwzMjc5NiwzMjgwMCwzMjgwMiwzMjgwNSwzMjgwNiwzMjgwNywzMjgwOSwzMjgwOCwzMjgxNywzMjc3OSwzMjgyMSwzMjgzNSwzMjgzOCwzMjg0NSwz''@;'; put 'put ''Mjg1MCwzMjg3MywzMjg4MSwzNTIwMywzOTAzMiwzOTA0MCwzOTA0MywzOTQxOCwzOTQxOSwzOTQyMCwzOTQyMSwzOTQyMiwzOTQyMywzOTQyNCwzOTQyNSwzOTQyNiwzOTQyNywzOTQyOCwzOTQyOSwzOTQzMCwzOTQzMSwzOTQzMiwzOTQzMywzOTQzNCwzOTQzNSwzOTQzNiwzOTQzNywzOTQz''@;'; put 'put ''OCwzOTQzOSwzOTQ0MCwzOTQ0MSwzOTQ0MiwzOTQ0MywzOTQ0NCwzOTQ0NSwzOTQ0NiwzOTQ0NywzOTQ0OCwzOTQ0OSwzOTQ1MCwzOTQ1MSwzOTQ1MiwzOTQ1MywzOTQ1NCwzOTQ1NSwzOTQ1NiwzOTQ1NywzOTQ1OCwzOTQ1OSwzOTQ2MCwzOTQ2MSwzOTQ2MiwzOTQ2MywzOTQ2NCwzOTQ2NSwz''@;'; put 'put ''OTQ2NiwzOTQ2NywzOTQ2OCwzOTQ2OSwzOTQ3MCwzOTQ3MSwzOTQ3MiwzOTQ3MywzOTQ3NCwzOTQ3NSwzOTQ3NiwzOTQ3NywzOTQ3OCwzOTQ3OSwzOTQ4MCwzOTQ4MSwzOTQ4MiwzOTQ4MywzOTQ4NCwzOTQ4NSwzOTQ4NiwzOTQ4NywzOTQ4OCwzOTQ4OSwzOTQ5MCwzOTQ5MSwzOTQ5MiwzOTQ5''@;'; put 'put ''MywzOTQ5NCwzOTQ5NSwzOTQ5NiwzOTQ5NywzOTQ5OCwzOTQ5OSwzOTUwMCwzOTUwMSwzOTUwMiwzOTUwMywzOTUwNCwzOTUwNSwzOTUwNiwzOTUwNywzOTUwOCwzOTUwOSwzOTUxMCwzOTUxMSwzOTUxMiwzOTUxMywzOTA0OSwzOTA1MiwzOTA1MywzOTA1NSwzOTA2MCwzOTA2NiwzOTA2Nywz''@;'; put 'put ''OTA3MCwzOTA3MSwzOTA3MywzOTA3NCwzOTA3NywzOTA3OCwzNDM4MSwzNDM4OCwzNDQxMiwzNDQxNCwzNDQzMSwzNDQyNiwzNDQyOCwzNDQyNywzNDQ3MiwzNDQ0NSwzNDQ0MywzNDQ3NiwzNDQ2MSwzNDQ3MSwzNDQ2NywzNDQ3NCwzNDQ1MSwzNDQ3MywzNDQ4NiwzNDUwMCwzNDQ4NSwzNDUx''@;'; put 'put ''MCwzNDQ4MCwzNDQ5MCwzNDQ4MSwzNDQ3OSwzNDUwNSwzNDUxMSwzNDQ4NCwzNDUzNywzNDU0NSwzNDU0NiwzNDU0MSwzNDU0NywzNDUxMiwzNDU3OSwzNDUyNiwzNDU0OCwzNDUyNywzNDUyMCwzNDUxMywzNDU2MywzNDU2NywzNDU1MiwzNDU2OCwzNDU3MCwzNDU3MywzNDU2OSwzNDU5NSwz''@;'; put 'put ''NDYxOSwzNDU5MCwzNDU5NywzNDYwNiwzNDU4NiwzNDYyMiwzNDYzMiwzNDYxMiwzNDYwOSwzNDYwMSwzNDYxNSwzNDYyMywzNDY5MCwzNDU5NCwzNDY4NSwzNDY4NiwzNDY4MywzNDY1NiwzNDY3MiwzNDYzNiwzNDY3MCwzNDY5OSwzNDY0MywzNDY1OSwzNDY4NCwzNDY2MCwzNDY0OSwzNDY2''@;'; put 'put ''MSwzNDcwNywzNDczNSwzNDcyOCwzNDc3MCwzOTUxNCwzOTUxNSwzOTUxNiwzOTUxNywzOTUxOCwzOTUxOSwzOTUyMCwzOTUyMSwzOTUyMiwzOTUyMywzOTUyNCwzOTUyNSwzOTUyNiwzOTUyNywzOTUyOCwzOTUyOSwzOTUzMCwzOTUzMSwzOTUzOCwzOTU1NSwzOTU2MSwzOTU2NSwzOTU2Niwz''@;'; put 'put ''OTU3MiwzOTU3MywzOTU3NywzOTU5MCwzOTU5MywzOTU5NCwzOTU5NSwzOTU5NiwzOTU5NywzOTU5OCwzOTU5OSwzOTYwMiwzOTYwMywzOTYwNCwzOTYwNSwzOTYwOSwzOTYxMSwzOTYxMywzOTYxNCwzOTYxNSwzOTYxOSwzOTYyMCwzOTYyMiwzOTYyMywzOTYyNCwzOTYyNSwzOTYyNiwzOTYy''@;'; put 'put ''OSwzOTYzMCwzOTYzMSwzOTYzMiwzOTYzNCwzOTYzNiwzOTYzNywzOTYzOCwzOTYzOSwzOTY0MSwzOTY0MiwzOTY0MywzOTY0NCwzOTY0NSwzOTY0NiwzOTY0OCwzOTY1MCwzOTY1MSwzOTY1MiwzOTY1MywzOTY1NSwzOTY1NiwzOTY1NywzOTY1OCwzOTY2MCwzOTY2MiwzOTY2NCwzOTY2NSwz''@;'; put 'put ''OTY2NiwzOTY2NywzOTY2OCwzOTY2OSwzOTY3MCwzOTY3MSwzOTY3MiwzOTY3NCwzOTY3NiwzOTY3NywzOTY3OCwzOTY3OSwzOTY4MCwzOTY4MSwzOTY4MiwzOTY4NCwzOTY4NSwzOTY4NiwzNDc1OCwzNDY5NiwzNDY5MywzNDczMywzNDcxMSwzNDY5MSwzNDczMSwzNDc4OSwzNDczMiwzNDc0''@;'; put 'put ''MSwzNDczOSwzNDc2MywzNDc3MSwzNDc0OSwzNDc2OSwzNDc1MiwzNDc2MiwzNDc3OSwzNDc5NCwzNDc4NCwzNDc5OCwzNDgzOCwzNDgzNSwzNDgxNCwzNDgyNiwzNDg0MywzNDg0OSwzNDg3MywzNDg3NiwzMjU2NiwzMjU3OCwzMjU4MCwzMjU4MSwzMzI5NiwzMTQ4MiwzMTQ4NSwzMTQ5Niwz''@;'; put 'put ''MTQ5MSwzMTQ5MiwzMTUwOSwzMTQ5OCwzMTUzMSwzMTUwMywzMTU1OSwzMTU0NCwzMTUzMCwzMTUxMywzMTUzNCwzMTUzNywzMTUyMCwzMTUyNSwzMTUyNCwzMTUzOSwzMTU1MCwzMTUxOCwzMTU3NiwzMTU3OCwzMTU1NywzMTYwNSwzMTU2NCwzMTU4MSwzMTU4NCwzMTU5OCwzMTYxMSwzMTU4''@;'; put 'put ''NiwzMTYwMiwzMTYwMSwzMTYzMiwzMTY1NCwzMTY1NSwzMTY3MiwzMTY2MCwzMTY0NSwzMTY1NiwzMTYyMSwzMTY1OCwzMTY0NCwzMTY1MCwzMTY1OSwzMTY2OCwzMTY5NywzMTY4MSwzMTY5MiwzMTcwOSwzMTcwNiwzMTcxNywzMTcxOCwzMTcyMiwzMTc1NiwzMTc0MiwzMTc0MCwzMTc1OSwz''@;'; put 'put ''MTc2NiwzMTc1NSwzOTY4NywzOTY4OSwzOTY5MCwzOTY5MSwzOTY5MiwzOTY5MywzOTY5NCwzOTY5NiwzOTY5NywzOTY5OCwzOTcwMCwzOTcwMSwzOTcwMiwzOTcwMywzOTcwNCwzOTcwNSwzOTcwNiwzOTcwNywzOTcwOCwzOTcwOSwzOTcxMCwzOTcxMiwzOTcxMywzOTcxNCwzOTcxNiwzOTcx''@;'; put 'put ''NywzOTcxOCwzOTcxOSwzOTcyMCwzOTcyMSwzOTcyMiwzOTcyMywzOTcyNCwzOTcyNSwzOTcyNiwzOTcyOCwzOTcyOSwzOTczMSwzOTczMiwzOTczMywzOTczNCwzOTczNSwzOTczNiwzOTczNywzOTczOCwzOTc0MSwzOTc0MiwzOTc0MywzOTc0NCwzOTc1MCwzOTc1NCwzOTc1NSwzOTc1Niwz''@;'; put 'put ''OTc1OCwzOTc2MCwzOTc2MiwzOTc2MywzOTc2NSwzOTc2NiwzOTc2NywzOTc2OCwzOTc2OSwzOTc3MCwzOTc3MSwzOTc3MiwzOTc3MywzOTc3NCwzOTc3NSwzOTc3NiwzOTc3NywzOTc3OCwzOTc3OSwzOTc4MCwzOTc4MSwzOTc4MiwzOTc4MywzOTc4NCwzOTc4NSwzOTc4NiwzOTc4NywzOTc4''@;'; put 'put ''OCwzOTc4OSwzOTc5MCwzOTc5MSwzOTc5MiwzOTc5MywzOTc5NCwzOTc5NSwzOTc5NiwzOTc5NywzOTc5OCwzOTc5OSwzOTgwMCwzOTgwMSwzOTgwMiwzOTgwMywzMTc3NSwzMTc4NiwzMTc4MiwzMTgwMCwzMTgwOSwzMTgwOCwzMzI3OCwzMzI4MSwzMzI4MiwzMzI4NCwzMzI2MCwzNDg4NCwz''@;'; put 'put ''MzMxMywzMzMxNCwzMzMxNSwzMzMyNSwzMzMyNywzMzMyMCwzMzMyMywzMzMzNiwzMzMzOSwzMzMzMSwzMzMzMiwzMzM0MiwzMzM0OCwzMzM1MywzMzM1NSwzMzM1OSwzMzM3MCwzMzM3NSwzMzM4NCwzNDk0MiwzNDk0OSwzNDk1MiwzNTAzMiwzNTAzOSwzNTE2NiwzMjY2OSwzMjY3MSwzMjY3''@;'; put 'put ''OSwzMjY4NywzMjY4OCwzMjY5MCwzMTg2OCwyNTkyOSwzMTg4OSwzMTkwMSwzMTkwMCwzMTkwMiwzMTkwNiwzMTkyMiwzMTkzMiwzMTkzMywzMTkzNywzMTk0MywzMTk0OCwzMTk0OSwzMTk0NCwzMTk0MSwzMTk1OSwzMTk3NiwzMzM5MCwyNjI4MCwzMjcwMywzMjcxOCwzMjcyNSwzMjc0MSwz''@;'; put 'put ''MjczNywzMjc0MiwzMjc0NSwzMjc1MCwzMjc1NSwzMTk5MiwzMjExOSwzMjE2NiwzMjE3NCwzMjMyNywzMjQxMSw0MDYzMiw0MDYyOCwzNjIxMSwzNjIyOCwzNjI0NCwzNjI0MSwzNjI3MywzNjE5OSwzNjIwNSwzNTkxMSwzNTkxMywzNzE5NCwzNzIwMCwzNzE5OCwzNzE5OSwzNzIyMCwzOTgw''@;'; put 'put ''NCwzOTgwNSwzOTgwNiwzOTgwNywzOTgwOCwzOTgwOSwzOTgxMCwzOTgxMSwzOTgxMiwzOTgxMywzOTgxNCwzOTgxNSwzOTgxNiwzOTgxNywzOTgxOCwzOTgxOSwzOTgyMCwzOTgyMSwzOTgyMiwzOTgyMywzOTgyNCwzOTgyNSwzOTgyNiwzOTgyNywzOTgyOCwzOTgyOSwzOTgzMCwzOTgzMSwz''@;'; put 'put ''OTgzMiwzOTgzMywzOTgzNCwzOTgzNSwzOTgzNiwzOTgzNywzOTgzOCwzOTgzOSwzOTg0MCwzOTg0MSwzOTg0MiwzOTg0MywzOTg0NCwzOTg0NSwzOTg0NiwzOTg0NywzOTg0OCwzOTg0OSwzOTg1MCwzOTg1MSwzOTg1MiwzOTg1MywzOTg1NCwzOTg1NSwzOTg1NiwzOTg1NywzOTg1OCwzOTg1''@;'; put 'put ''OSwzOTg2MCwzOTg2MSwzOTg2MiwzOTg2MywzOTg2NCwzOTg2NSwzOTg2NiwzOTg2NywzOTg2OCwzOTg2OSwzOTg3MCwzOTg3MSwzOTg3MiwzOTg3MywzOTg3NCwzOTg3NSwzOTg3NiwzOTg3NywzOTg3OCwzOTg3OSwzOTg4MCwzOTg4MSwzOTg4MiwzOTg4MywzOTg4NCwzOTg4NSwzOTg4Niwz''@;'; put 'put ''OTg4NywzOTg4OCwzOTg4OSwzOTg5MCwzOTg5MSwzOTg5MiwzOTg5MywzOTg5NCwzOTg5NSwzOTg5NiwzOTg5NywzOTg5OCwzOTg5OSwzNzIxOCwzNzIxNywzNzIzMiwzNzIyNSwzNzIzMSwzNzI0NSwzNzI0NiwzNzIzNCwzNzIzNiwzNzI0MSwzNzI2MCwzNzI1MywzNzI2NCwzNzI2MSwzNzI2''@;'; put 'put ''NSwzNzI4MiwzNzI4MywzNzI5MCwzNzI5MywzNzI5NCwzNzI5NSwzNzMwMSwzNzMwMCwzNzMwNiwzNTkyNSw0MDU3NCwzNjI4MCwzNjMzMSwzNjM1NywzNjQ0MSwzNjQ1NywzNjI3NywzNjI4NywzNjI4NCwzNjI4MiwzNjI5MiwzNjMxMCwzNjMxMSwzNjMxNCwzNjMxOCwzNjMwMiwzNjMwMywz''@;'; put 'put ''NjMxNSwzNjI5NCwzNjMzMiwzNjM0MywzNjM0NCwzNjMyMywzNjM0NSwzNjM0NywzNjMyNCwzNjM2MSwzNjM0OSwzNjM3MiwzNjM4MSwzNjM4MywzNjM5NiwzNjM5OCwzNjM4NywzNjM5OSwzNjQxMCwzNjQxNiwzNjQwOSwzNjQwNSwzNjQxMywzNjQwMSwzNjQyNSwzNjQxNywzNjQxOCwzNjQz''@;'; put 'put ''MywzNjQzNCwzNjQyNiwzNjQ2NCwzNjQ3MCwzNjQ3NiwzNjQ2MywzNjQ2OCwzNjQ4NSwzNjQ5NSwzNjUwMCwzNjQ5NiwzNjUwOCwzNjUxMCwzNTk2MCwzNTk3MCwzNTk3OCwzNTk3MywzNTk5MiwzNTk4OCwyNjAxMSwzNTI4NiwzNTI5NCwzNTI5MCwzNTI5MiwzOTkwMCwzOTkwMSwzOTkwMiwz''@;'; put 'put ''OTkwMywzOTkwNCwzOTkwNSwzOTkwNiwzOTkwNywzOTkwOCwzOTkwOSwzOTkxMCwzOTkxMSwzOTkxMiwzOTkxMywzOTkxNCwzOTkxNSwzOTkxNiwzOTkxNywzOTkxOCwzOTkxOSwzOTkyMCwzOTkyMSwzOTkyMiwzOTkyMywzOTkyNCwzOTkyNSwzOTkyNiwzOTkyNywzOTkyOCwzOTkyOSwzOTkz''@;'; put 'put ''MCwzOTkzMSwzOTkzMiwzOTkzMywzOTkzNCwzOTkzNSwzOTkzNiwzOTkzNywzOTkzOCwzOTkzOSwzOTk0MCwzOTk0MSwzOTk0MiwzOTk0MywzOTk0NCwzOTk0NSwzOTk0NiwzOTk0NywzOTk0OCwzOTk0OSwzOTk1MCwzOTk1MSwzOTk1MiwzOTk1MywzOTk1NCwzOTk1NSwzOTk1NiwzOTk1Nywz''@;'; put 'put ''OTk1OCwzOTk1OSwzOTk2MCwzOTk2MSwzOTk2MiwzOTk2MywzOTk2NCwzOTk2NSwzOTk2NiwzOTk2NywzOTk2OCwzOTk2OSwzOTk3MCwzOTk3MSwzOTk3MiwzOTk3MywzOTk3NCwzOTk3NSwzOTk3NiwzOTk3NywzOTk3OCwzOTk3OSwzOTk4MCwzOTk4MSwzOTk4MiwzOTk4MywzOTk4NCwzOTk4''@;'; put 'put ''NSwzOTk4NiwzOTk4NywzOTk4OCwzOTk4OSwzOTk5MCwzOTk5MSwzOTk5MiwzOTk5MywzOTk5NCwzOTk5NSwzNTMwMSwzNTMwNywzNTMxMSwzNTM5MCwzNTYyMiwzODczOSwzODYzMywzODY0MywzODYzOSwzODY2MiwzODY1NywzODY2NCwzODY3MSwzODY3MCwzODY5OCwzODcwMSwzODcwNCwz''@;'; put 'put ''ODcxOCw0MDgzMiw0MDgzNSw0MDgzNyw0MDgzOCw0MDgzOSw0MDg0MCw0MDg0MSw0MDg0Miw0MDg0NCw0MDcwMiw0MDcxNSw0MDcxNywzODU4NSwzODU4OCwzODU4OSwzODYwNiwzODYxMCwzMDY1NSwzODYyNCwzNzUxOCwzNzU1MCwzNzU3NiwzNzY5NCwzNzczOCwzNzgzNCwzNzc3NSwzNzk1''@;'; put 'put ''MCwzNzk5NSw0MDA2Myw0MDA2Niw0MDA2OSw0MDA3MCw0MDA3MSw0MDA3MiwzMTI2Nyw0MDA3NSw0MDA3OCw0MDA4MCw0MDA4MSw0MDA4Miw0MDA4NCw0MDA4NSw0MDA5MCw0MDA5MSw0MDA5NCw0MDA5NSw0MDA5Niw0MDA5Nyw0MDA5OCw0MDA5OSw0MDEwMSw0MDEwMiw0MDEwMyw0MDEwNCw0''@;'; put 'put ''MDEwNSw0MDEwNyw0MDEwOSw0MDExMCw0MDExMiw0MDExMyw0MDExNCw0MDExNSw0MDExNiw0MDExNyw0MDExOCw0MDExOSw0MDEyMiw0MDEyMyw0MDEyNCw0MDEyNSw0MDEzMiw0MDEzMyw0MDEzNCw0MDEzNSw0MDEzOCw0MDEzOSwzOTk5NiwzOTk5NywzOTk5OCwzOTk5OSw0ZTQsNDAwMDEs''@;'; put 'put ''NDAwMDIsNDAwMDMsNDAwMDQsNDAwMDUsNDAwMDYsNDAwMDcsNDAwMDgsNDAwMDksNDAwMTAsNDAwMTEsNDAwMTIsNDAwMTMsNDAwMTQsNDAwMTUsNDAwMTYsNDAwMTcsNDAwMTgsNDAwMTksNDAwMjAsNDAwMjEsNDAwMjIsNDAwMjMsNDAwMjQsNDAwMjUsNDAwMjYsNDAwMjcsNDAwMjgsNDAw''@;'; put 'put ''MjksNDAwMzAsNDAwMzEsNDAwMzIsNDAwMzMsNDAwMzQsNDAwMzUsNDAwMzYsNDAwMzcsNDAwMzgsNDAwMzksNDAwNDAsNDAwNDEsNDAwNDIsNDAwNDMsNDAwNDQsNDAwNDUsNDAwNDYsNDAwNDcsNDAwNDgsNDAwNDksNDAwNTAsNDAwNTEsNDAwNTIsNDAwNTMsNDAwNTQsNDAwNTUsNDAwNTYs''@;'; put 'put ''NDAwNTcsNDAwNTgsNDAwNTksNDAwNjEsNDAwNjIsNDAwNjQsNDAwNjcsNDAwNjgsNDAwNzMsNDAwNzQsNDAwNzYsNDAwNzksNDAwODMsNDAwODYsNDAwODcsNDAwODgsNDAwODksNDAwOTMsNDAxMDYsNDAxMDgsNDAxMTEsNDAxMjEsNDAxMjYsNDAxMjcsNDAxMjgsNDAxMjksNDAxMzAsNDAx''@;'; put 'put ''MzYsNDAxMzcsNDAxNDUsNDAxNDYsNDAxNTQsNDAxNTUsNDAxNjAsNDAxNjEsNDAxNDAsNDAxNDEsNDAxNDIsNDAxNDMsNDAxNDQsNDAxNDcsNDAxNDgsNDAxNDksNDAxNTEsNDAxNTIsNDAxNTMsNDAxNTYsNDAxNTcsNDAxNTksNDAxNjIsMzg3ODAsMzg3ODksMzg4MDEsMzg4MDIsMzg4MDQs''@;'; put 'put ''Mzg4MzEsMzg4MjcsMzg4MTksMzg4MzQsMzg4MzYsMzk2MDEsMzk2MDAsMzk2MDcsNDA1MzYsMzk2MDYsMzk2MTAsMzk2MTIsMzk2MTcsMzk2MTYsMzk2MjEsMzk2MTgsMzk2MjcsMzk2MjgsMzk2MzMsMzk3NDksMzk3NDcsMzk3NTEsMzk3NTMsMzk3NTIsMzk3NTcsMzk3NjEsMzkxNDQsMzkx''@;'; put 'put ''ODEsMzkyMTQsMzkyNTMsMzkyNTIsMzk2NDcsMzk2NDksMzk2NTQsMzk2NjMsMzk2NTksMzk2NzUsMzk2NjEsMzk2NzMsMzk2ODgsMzk2OTUsMzk2OTksMzk3MTEsMzk3MTUsNDA2MzcsNDA2MzgsMzIzMTUsNDA1NzgsNDA1ODMsNDA1ODQsNDA1ODcsNDA1OTQsMzc4NDYsNDA2MDUsNDA2MDcs''@;'; put 'put ''NDA2NjcsNDA2NjgsNDA2NjksNDA2NzIsNDA2NzEsNDA2NzQsNDA2ODEsNDA2NzksNDA2NzcsNDA2ODIsNDA2ODcsNDA3MzgsNDA3NDgsNDA3NTEsNDA3NjEsNDA3NTksNDA3NjUsNDA3NjYsNDA3NzIsNDAxNjMsNDAxNjQsNDAxNjUsNDAxNjYsNDAxNjcsNDAxNjgsNDAxNjksNDAxNzAsNDAx''@;'; put 'put ''NzEsNDAxNzIsNDAxNzMsNDAxNzQsNDAxNzUsNDAxNzYsNDAxNzcsNDAxNzgsNDAxNzksNDAxODAsNDAxODEsNDAxODIsNDAxODMsNDAxODQsNDAxODUsNDAxODYsNDAxODcsNDAxODgsNDAxODksNDAxOTAsNDAxOTEsNDAxOTIsNDAxOTMsNDAxOTQsNDAxOTUsNDAxOTYsNDAxOTcsNDAxOTgs''@;'; put 'put ''NDAxOTksNDAyMDAsNDAyMDEsNDAyMDIsNDAyMDMsNDAyMDQsNDAyMDUsNDAyMDYsNDAyMDcsNDAyMDgsNDAyMDksNDAyMTAsNDAyMTEsNDAyMTIsNDAyMTMsNDAyMTQsNDAyMTUsNDAyMTYsNDAyMTcsNDAyMTgsNDAyMTksNDAyMjAsNDAyMjEsNDAyMjIsNDAyMjMsNDAyMjQsNDAyMjUsNDAy''@;'; put 'put ''MjYsNDAyMjcsNDAyMjgsNDAyMjksNDAyMzAsNDAyMzEsNDAyMzIsNDAyMzMsNDAyMzQsNDAyMzUsNDAyMzYsNDAyMzcsNDAyMzgsNDAyMzksNDAyNDAsNDAyNDEsNDAyNDIsNDAyNDMsNDAyNDQsNDAyNDUsNDAyNDYsNDAyNDcsNDAyNDgsNDAyNDksNDAyNTAsNDAyNTEsNDAyNTIsNDAyNTMs''@;'; put 'put ''NDAyNTQsNDAyNTUsNDAyNTYsNDAyNTcsNDAyNTgsNTc5MDgsNTc5MDksNTc5MTAsNTc5MTEsNTc5MTIsNTc5MTMsNTc5MTQsNTc5MTUsNTc5MTYsNTc5MTcsNTc5MTgsNTc5MTksNTc5MjAsNTc5MjEsNTc5MjIsNTc5MjMsNTc5MjQsNTc5MjUsNTc5MjYsNTc5MjcsNTc5MjgsNTc5MjksNTc5''@;'; put 'put ''MzAsNTc5MzEsNTc5MzIsNTc5MzMsNTc5MzQsNTc5MzUsNTc5MzYsNTc5MzcsNTc5MzgsNTc5MzksNTc5NDAsNTc5NDEsNTc5NDIsNTc5NDMsNTc5NDQsNTc5NDUsNTc5NDYsNTc5NDcsNTc5NDgsNTc5NDksNTc5NTAsNTc5NTEsNTc5NTIsNTc5NTMsNTc5NTQsNTc5NTUsNTc5NTYsNTc5NTcs''@;'; put 'put ''NTc5NTgsNTc5NTksNTc5NjAsNTc5NjEsNTc5NjIsNTc5NjMsNTc5NjQsNTc5NjUsNTc5NjYsNTc5NjcsNTc5NjgsNTc5NjksNTc5NzAsNTc5NzEsNTc5NzIsNTc5NzMsNTc5NzQsNTc5NzUsNTc5NzYsNTc5NzcsNTc5NzgsNTc5NzksNTc5ODAsNTc5ODEsNTc5ODIsNTc5ODMsNTc5ODQsNTc5''@;'; put 'put ''ODUsNTc5ODYsNTc5ODcsNTc5ODgsNTc5ODksNTc5OTAsNTc5OTEsNTc5OTIsNTc5OTMsNTc5OTQsNTc5OTUsNTc5OTYsNTc5OTcsNTc5OTgsNTc5OTksNThlMyw1ODAwMSw0MDI1OSw0MDI2MCw0MDI2MSw0MDI2Miw0MDI2Myw0MDI2NCw0MDI2NSw0MDI2Niw0MDI2Nyw0MDI2OCw0MDI2OSw0''@;'; put 'put ''MDI3MCw0MDI3MSw0MDI3Miw0MDI3Myw0MDI3NCw0MDI3NSw0MDI3Niw0MDI3Nyw0MDI3OCw0MDI3OSw0MDI4MCw0MDI4MSw0MDI4Miw0MDI4Myw0MDI4NCw0MDI4NSw0MDI4Niw0MDI4Nyw0MDI4OCw0MDI4OSw0MDI5MCw0MDI5MSw0MDI5Miw0MDI5Myw0MDI5NCw0MDI5NSw0MDI5Niw0MDI5''@;'; put 'put ''Nyw0MDI5OCw0MDI5OSw0MDMwMCw0MDMwMSw0MDMwMiw0MDMwMyw0MDMwNCw0MDMwNSw0MDMwNiw0MDMwNyw0MDMwOCw0MDMwOSw0MDMxMCw0MDMxMSw0MDMxMiw0MDMxMyw0MDMxNCw0MDMxNSw0MDMxNiw0MDMxNyw0MDMxOCw0MDMxOSw0MDMyMCw0MDMyMSw0MDMyMiw0MDMyMyw0MDMyNCw0''@;'; put 'put ''MDMyNSw0MDMyNiw0MDMyNyw0MDMyOCw0MDMyOSw0MDMzMCw0MDMzMSw0MDMzMiw0MDMzMyw0MDMzNCw0MDMzNSw0MDMzNiw0MDMzNyw0MDMzOCw0MDMzOSw0MDM0MCw0MDM0MSw0MDM0Miw0MDM0Myw0MDM0NCw0MDM0NSw0MDM0Niw0MDM0Nyw0MDM0OCw0MDM0OSw0MDM1MCw0MDM1MSw0MDM1''@;'; put 'put ''Miw0MDM1Myw0MDM1NCw1ODAwMiw1ODAwMyw1ODAwNCw1ODAwNSw1ODAwNiw1ODAwNyw1ODAwOCw1ODAwOSw1ODAxMCw1ODAxMSw1ODAxMiw1ODAxMyw1ODAxNCw1ODAxNSw1ODAxNiw1ODAxNyw1ODAxOCw1ODAxOSw1ODAyMCw1ODAyMSw1ODAyMiw1ODAyMyw1ODAyNCw1ODAyNSw1ODAyNiw1''@;'; put 'put ''ODAyNyw1ODAyOCw1ODAyOSw1ODAzMCw1ODAzMSw1ODAzMiw1ODAzMyw1ODAzNCw1ODAzNSw1ODAzNiw1ODAzNyw1ODAzOCw1ODAzOSw1ODA0MCw1ODA0MSw1ODA0Miw1ODA0Myw1ODA0NCw1ODA0NSw1ODA0Niw1ODA0Nyw1ODA0OCw1ODA0OSw1ODA1MCw1ODA1MSw1ODA1Miw1ODA1Myw1ODA1''@;'; put 'put ''NCw1ODA1NSw1ODA1Niw1ODA1Nyw1ODA1OCw1ODA1OSw1ODA2MCw1ODA2MSw1ODA2Miw1ODA2Myw1ODA2NCw1ODA2NSw1ODA2Niw1ODA2Nyw1ODA2OCw1ODA2OSw1ODA3MCw1ODA3MSw1ODA3Miw1ODA3Myw1ODA3NCw1ODA3NSw1ODA3Niw1ODA3Nyw1ODA3OCw1ODA3OSw1ODA4MCw1ODA4MSw1''@;'; put 'put ''ODA4Miw1ODA4Myw1ODA4NCw1ODA4NSw1ODA4Niw1ODA4Nyw1ODA4OCw1ODA4OSw1ODA5MCw1ODA5MSw1ODA5Miw1ODA5Myw1ODA5NCw1ODA5NSw0MDM1NSw0MDM1Niw0MDM1Nyw0MDM1OCw0MDM1OSw0MDM2MCw0MDM2MSw0MDM2Miw0MDM2Myw0MDM2NCw0MDM2NSw0MDM2Niw0MDM2Nyw0MDM2''@;'; put 'put ''OCw0MDM2OSw0MDM3MCw0MDM3MSw0MDM3Miw0MDM3Myw0MDM3NCw0MDM3NSw0MDM3Niw0MDM3Nyw0MDM3OCw0MDM3OSw0MDM4MCw0MDM4MSw0MDM4Miw0MDM4Myw0MDM4NCw0MDM4NSw0MDM4Niw0MDM4Nyw0MDM4OCw0MDM4OSw0MDM5MCw0MDM5MSw0MDM5Miw0MDM5Myw0MDM5NCw0MDM5NSw0''@;'; put 'put ''MDM5Niw0MDM5Nyw0MDM5OCw0MDM5OSw0MDQwMCw0MDQwMSw0MDQwMiw0MDQwMyw0MDQwNCw0MDQwNSw0MDQwNiw0MDQwNyw0MDQwOCw0MDQwOSw0MDQxMCw0MDQxMSw0MDQxMiw0MDQxMyw0MDQxNCw0MDQxNSw0MDQxNiw0MDQxNyw0MDQxOCw0MDQxOSw0MDQyMCw0MDQyMSw0MDQyMiw0MDQy''@;'; put 'put ''Myw0MDQyNCw0MDQyNSw0MDQyNiw0MDQyNyw0MDQyOCw0MDQyOSw0MDQzMCw0MDQzMSw0MDQzMiw0MDQzMyw0MDQzNCw0MDQzNSw0MDQzNiw0MDQzNyw0MDQzOCw0MDQzOSw0MDQ0MCw0MDQ0MSw0MDQ0Miw0MDQ0Myw0MDQ0NCw0MDQ0NSw0MDQ0Niw0MDQ0Nyw0MDQ0OCw0MDQ0OSw0MDQ1MCw1''@;'; put 'put ''ODA5Niw1ODA5Nyw1ODA5OCw1ODA5OSw1ODEwMCw1ODEwMSw1ODEwMiw1ODEwMyw1ODEwNCw1ODEwNSw1ODEwNiw1ODEwNyw1ODEwOCw1ODEwOSw1ODExMCw1ODExMSw1ODExMiw1ODExMyw1ODExNCw1ODExNSw1ODExNiw1ODExNyw1ODExOCw1ODExOSw1ODEyMCw1ODEyMSw1ODEyMiw1ODEy''@;'; put 'put ''Myw1ODEyNCw1ODEyNSw1ODEyNiw1ODEyNyw1ODEyOCw1ODEyOSw1ODEzMCw1ODEzMSw1ODEzMiw1ODEzMyw1ODEzNCw1ODEzNSw1ODEzNiw1ODEzNyw1ODEzOCw1ODEzOSw1ODE0MCw1ODE0MSw1ODE0Miw1ODE0Myw1ODE0NCw1ODE0NSw1ODE0Niw1ODE0Nyw1ODE0OCw1ODE0OSw1ODE1MCw1''@;'; put 'put ''ODE1MSw1ODE1Miw1ODE1Myw1ODE1NCw1ODE1NSw1ODE1Niw1ODE1Nyw1ODE1OCw1ODE1OSw1ODE2MCw1ODE2MSw1ODE2Miw1ODE2Myw1ODE2NCw1ODE2NSw1ODE2Niw1ODE2Nyw1ODE2OCw1ODE2OSw1ODE3MCw1ODE3MSw1ODE3Miw1ODE3Myw1ODE3NCw1ODE3NSw1ODE3Niw1ODE3Nyw1ODE3''@;'; put 'put ''OCw1ODE3OSw1ODE4MCw1ODE4MSw1ODE4Miw1ODE4Myw1ODE4NCw1ODE4NSw1ODE4Niw1ODE4Nyw1ODE4OCw1ODE4OSw0MDQ1MSw0MDQ1Miw0MDQ1Myw0MDQ1NCw0MDQ1NSw0MDQ1Niw0MDQ1Nyw0MDQ1OCw0MDQ1OSw0MDQ2MCw0MDQ2MSw0MDQ2Miw0MDQ2Myw0MDQ2NCw0MDQ2NSw0MDQ2Niw0''@;'; put 'put ''MDQ2Nyw0MDQ2OCw0MDQ2OSw0MDQ3MCw0MDQ3MSw0MDQ3Miw0MDQ3Myw0MDQ3NCw0MDQ3NSw0MDQ3Niw0MDQ3Nyw0MDQ3OCw0MDQ4NCw0MDQ4Nyw0MDQ5NCw0MDQ5Niw0MDUwMCw0MDUwNyw0MDUwOCw0MDUxMiw0MDUyNSw0MDUyOCw0MDUzMCw0MDUzMSw0MDUzMiw0MDUzNCw0MDUzNyw0MDU0''@;'; put 'put ''MSw0MDU0Myw0MDU0NCw0MDU0NSw0MDU0Niw0MDU0OSw0MDU1OCw0MDU1OSw0MDU2Miw0MDU2NCw0MDU2NSw0MDU2Niw0MDU2Nyw0MDU2OCw0MDU2OSw0MDU3MCw0MDU3MSw0MDU3Miw0MDU3Myw0MDU3Niw0MDU3Nyw0MDU3OSw0MDU4MCw0MDU4MSw0MDU4Miw0MDU4NSw0MDU4Niw0MDU4OCw0''@;'; put 'put ''MDU4OSw0MDU5MCw0MDU5MSw0MDU5Miw0MDU5Myw0MDU5Niw0MDU5Nyw0MDU5OCw0MDU5OSw0MDYwMCw0MDYwMSw0MDYwMiw0MDYwMyw0MDYwNCw0MDYwNiw0MDYwOCw0MDYwOSw0MDYxMCw0MDYxMSw0MDYxMiw0MDYxMyw0MDYxNSw0MDYxNiw0MDYxNyw0MDYxOCw1ODE5MCw1ODE5MSw1ODE5''@;'; put 'put ''Miw1ODE5Myw1ODE5NCw1ODE5NSw1ODE5Niw1ODE5Nyw1ODE5OCw1ODE5OSw1ODIwMCw1ODIwMSw1ODIwMiw1ODIwMyw1ODIwNCw1ODIwNSw1ODIwNiw1ODIwNyw1ODIwOCw1ODIwOSw1ODIxMCw1ODIxMSw1ODIxMiw1ODIxMyw1ODIxNCw1ODIxNSw1ODIxNiw1ODIxNyw1ODIxOCw1ODIxOSw1''@;'; put 'put ''ODIyMCw1ODIyMSw1ODIyMiw1ODIyMyw1ODIyNCw1ODIyNSw1ODIyNiw1ODIyNyw1ODIyOCw1ODIyOSw1ODIzMCw1ODIzMSw1ODIzMiw1ODIzMyw1ODIzNCw1ODIzNSw1ODIzNiw1ODIzNyw1ODIzOCw1ODIzOSw1ODI0MCw1ODI0MSw1ODI0Miw1ODI0Myw1ODI0NCw1ODI0NSw1ODI0Niw1ODI0''@;'; put 'put ''Nyw1ODI0OCw1ODI0OSw1ODI1MCw1ODI1MSw1ODI1Miw1ODI1Myw1ODI1NCw1ODI1NSw1ODI1Niw1ODI1Nyw1ODI1OCw1ODI1OSw1ODI2MCw1ODI2MSw1ODI2Miw1ODI2Myw1ODI2NCw1ODI2NSw1ODI2Niw1ODI2Nyw1ODI2OCw1ODI2OSw1ODI3MCw1ODI3MSw1ODI3Miw1ODI3Myw1ODI3NCw1''@;'; put 'put ''ODI3NSw1ODI3Niw1ODI3Nyw1ODI3OCw1ODI3OSw1ODI4MCw1ODI4MSw1ODI4Miw1ODI4Myw0MDYxOSw0MDYyMCw0MDYyMSw0MDYyMiw0MDYyMyw0MDYyNCw0MDYyNSw0MDYyNiw0MDYyNyw0MDYyOSw0MDYzMCw0MDYzMSw0MDYzMyw0MDYzNCw0MDYzNiw0MDYzOSw0MDY0MCw0MDY0MSw0MDY0''@;'; put 'put ''Miw0MDY0Myw0MDY0NSw0MDY0Niw0MDY0Nyw0MDY0OCw0MDY1MCw0MDY1MSw0MDY1Miw0MDY1Niw0MDY1OCw0MDY1OSw0MDY2MSw0MDY2Miw0MDY2Myw0MDY2NSw0MDY2Niw0MDY3MCw0MDY3Myw0MDY3NSw0MDY3Niw0MDY3OCw0MDY4MCw0MDY4Myw0MDY4NCw0MDY4NSw0MDY4Niw0MDY4OCw0''@;'; put 'put ''MDY4OSw0MDY5MCw0MDY5MSw0MDY5Miw0MDY5Myw0MDY5NCw0MDY5NSw0MDY5Niw0MDY5OCw0MDcwMSw0MDcwMyw0MDcwNCw0MDcwNSw0MDcwNiw0MDcwNyw0MDcwOCw0MDcwOSw0MDcxMCw0MDcxMSw0MDcxMiw0MDcxMyw0MDcxNCw0MDcxNiw0MDcxOSw0MDcyMSw0MDcyMiw0MDcyNCw0MDcy''@;'; put 'put ''NSw0MDcyNiw0MDcyOCw0MDczMCw0MDczMSw0MDczMiw0MDczMyw0MDczNCw0MDczNSw0MDczNyw0MDczOSw0MDc0MCw0MDc0MSw0MDc0Miw0MDc0Myw0MDc0NCw0MDc0NSw0MDc0Niw0MDc0Nyw0MDc0OSw0MDc1MCw0MDc1Miw0MDc1Myw1ODI4NCw1ODI4NSw1ODI4Niw1ODI4Nyw1ODI4OCw1''@;'; put 'put ''ODI4OSw1ODI5MCw1ODI5MSw1ODI5Miw1ODI5Myw1ODI5NCw1ODI5NSw1ODI5Niw1ODI5Nyw1ODI5OCw1ODI5OSw1ODMwMCw1ODMwMSw1ODMwMiw1ODMwMyw1ODMwNCw1ODMwNSw1ODMwNiw1ODMwNyw1ODMwOCw1ODMwOSw1ODMxMCw1ODMxMSw1ODMxMiw1ODMxMyw1ODMxNCw1ODMxNSw1ODMx''@;'; put 'put ''Niw1ODMxNyw1ODMxOCw1ODMxOSw1ODMyMCw1ODMyMSw1ODMyMiw1ODMyMyw1ODMyNCw1ODMyNSw1ODMyNiw1ODMyNyw1ODMyOCw1ODMyOSw1ODMzMCw1ODMzMSw1ODMzMiw1ODMzMyw1ODMzNCw1ODMzNSw1ODMzNiw1ODMzNyw1ODMzOCw1ODMzOSw1ODM0MCw1ODM0MSw1ODM0Miw1ODM0Myw1''@;'; put 'put ''ODM0NCw1ODM0NSw1ODM0Niw1ODM0Nyw1ODM0OCw1ODM0OSw1ODM1MCw1ODM1MSw1ODM1Miw1ODM1Myw1ODM1NCw1ODM1NSw1ODM1Niw1ODM1Nyw1ODM1OCw1ODM1OSw1ODM2MCw1ODM2MSw1ODM2Miw1ODM2Myw1ODM2NCw1ODM2NSw1ODM2Niw1ODM2Nyw1ODM2OCw1ODM2OSw1ODM3MCw1ODM3''@;'; put 'put ''MSw1ODM3Miw1ODM3Myw1ODM3NCw1ODM3NSw1ODM3Niw1ODM3Nyw0MDc1NCw0MDc1NSw0MDc1Niw0MDc1Nyw0MDc1OCw0MDc2MCw0MDc2Miw0MDc2NCw0MDc2Nyw0MDc2OCw0MDc2OSw0MDc3MCw0MDc3MSw0MDc3Myw0MDc3NCw0MDc3NSw0MDc3Niw0MDc3Nyw0MDc3OCw0MDc3OSw0MDc4MCw0''@;'; put 'put ''MDc4MSw0MDc4Miw0MDc4Myw0MDc4Niw0MDc4Nyw0MDc4OCw0MDc4OSw0MDc5MCw0MDc5MSw0MDc5Miw0MDc5Myw0MDc5NCw0MDc5NSw0MDc5Niw0MDc5Nyw0MDc5OCw0MDc5OSw0MDgwMCw0MDgwMSw0MDgwMiw0MDgwMyw0MDgwNCw0MDgwNSw0MDgwNiw0MDgwNyw0MDgwOCw0MDgwOSw0MDgx''@;'; put 'put ''MCw0MDgxMSw0MDgxMiw0MDgxMyw0MDgxNCw0MDgxNSw0MDgxNiw0MDgxNyw0MDgxOCw0MDgxOSw0MDgyMCw0MDgyMSw0MDgyMiw0MDgyMyw0MDgyNCw0MDgyNSw0MDgyNiw0MDgyNyw0MDgyOCw0MDgyOSw0MDgzMCw0MDgzMyw0MDgzNCw0MDg0NSw0MDg0Niw0MDg0Nyw0MDg0OCw0MDg0OSw0''@;'; put 'put ''MDg1MCw0MDg1MSw0MDg1Miw0MDg1Myw0MDg1NCw0MDg1NSw0MDg1Niw0MDg2MCw0MDg2MSw0MDg2Miw0MDg2NSw0MDg2Niw0MDg2Nyw0MDg2OCw0MDg2OSw2Mzc4OCw2Mzg2NSw2Mzg5Myw2Mzk3NSw2Mzk4NSw1ODM3OCw1ODM3OSw1ODM4MCw1ODM4MSw1ODM4Miw1ODM4Myw1ODM4NCw1ODM4''@;'; put 'put ''NSw1ODM4Niw1ODM4Nyw1ODM4OCw1ODM4OSw1ODM5MCw1ODM5MSw1ODM5Miw1ODM5Myw1ODM5NCw1ODM5NSw1ODM5Niw1ODM5Nyw1ODM5OCw1ODM5OSw1ODQwMCw1ODQwMSw1ODQwMiw1ODQwMyw1ODQwNCw1ODQwNSw1ODQwNiw1ODQwNyw1ODQwOCw1ODQwOSw1ODQxMCw1ODQxMSw1ODQxMiw1''@;'; put 'put ''ODQxMyw1ODQxNCw1ODQxNSw1ODQxNiw1ODQxNyw1ODQxOCw1ODQxOSw1ODQyMCw1ODQyMSw1ODQyMiw1ODQyMyw1ODQyNCw1ODQyNSw1ODQyNiw1ODQyNyw1ODQyOCw1ODQyOSw1ODQzMCw1ODQzMSw1ODQzMiw1ODQzMyw1ODQzNCw1ODQzNSw1ODQzNiw1ODQzNyw1ODQzOCw1ODQzOSw1ODQ0''@;'; put 'put ''MCw1ODQ0MSw1ODQ0Miw1ODQ0Myw1ODQ0NCw1ODQ0NSw1ODQ0Niw1ODQ0Nyw1ODQ0OCw1ODQ0OSw1ODQ1MCw1ODQ1MSw1ODQ1Miw1ODQ1Myw1ODQ1NCw1ODQ1NSw1ODQ1Niw1ODQ1Nyw1ODQ1OCw1ODQ1OSw1ODQ2MCw1ODQ2MSw1ODQ2Miw1ODQ2Myw1ODQ2NCw1ODQ2NSw1ODQ2Niw1ODQ2Nyw1''@;'; put 'put ''ODQ2OCw1ODQ2OSw1ODQ3MCw1ODQ3MSw2NDAxMiw2NDAxMyw2NDAxNCw2NDAxNSw2NDAxNyw2NDAxOSw2NDAyMCw2NDAyNCw2NDAzMSw2NDAzMiw2NDAzMyw2NDAzNSw2NDAzNiw2NDAzOSw2NDA0MCw2NDA0MSwxMTkwNSw1OTQxNCw1OTQxNSw1OTQxNiwxMTkwOCwxMzQyNywxMzM4MywxMTkx''@;'; put 'put ''MiwxMTkxNSw1OTQyMiwxMzcyNiwxMzg1MCwxMzgzOCwxMTkxNiwxMTkyNywxNDcwMiwxNDYxNiw1OTQzMCwxNDc5OSwxNDgxNSwxNDk2MywxNDgwMCw1OTQzNSw1OTQzNiwxNTE4MiwxNTQ3MCwxNTU4NCwxMTk0Myw1OTQ0MSw1OTQ0MiwxMTk0NiwxNjQ3MCwxNjczNSwxMTk1MCwxNzIwNywx''@;'; put 'put ''MTk1NSwxMTk1OCwxMTk1OSw1OTQ1MSwxNzMyOSwxNzMyNCwxMTk2MywxNzM3MywxNzYyMiwxODAxNywxNzk5Niw1OTQ1OSwxODIxMSwxODIxNywxODMwMCwxODMxNywxMTk3OCwxODc1OSwxODgxMCwxODgxMywxODgxOCwxODgxOSwxODgyMSwxODgyMiwxODg0NywxODg0MywxODg3MSwxODg3''@;'; put 'put ''MCw1OTQ3Niw1OTQ3NywxOTYxOSwxOTYxNSwxOTYxNiwxOTYxNywxOTU3NSwxOTYxOCwxOTczMSwxOTczMiwxOTczMywxOTczNCwxOTczNSwxOTczNiwxOTczNywxOTg4Niw1OTQ5Miw1ODQ3Miw1ODQ3Myw1ODQ3NCw1ODQ3NSw1ODQ3Niw1ODQ3Nyw1ODQ3OCw1ODQ3OSw1ODQ4MCw1ODQ4MSw1''@;'; put 'put ''ODQ4Miw1ODQ4Myw1ODQ4NCw1ODQ4NSw1ODQ4Niw1ODQ4Nyw1ODQ4OCw1ODQ4OSw1ODQ5MCw1ODQ5MSw1ODQ5Miw1ODQ5Myw1ODQ5NCw1ODQ5NSw1ODQ5Niw1ODQ5Nyw1ODQ5OCw1ODQ5OSw1ODUwMCw1ODUwMSw1ODUwMiw1ODUwMyw1ODUwNCw1ODUwNSw1ODUwNiw1ODUwNyw1ODUwOCw1ODUw''@;'; put 'put ''OSw1ODUxMCw1ODUxMSw1ODUxMiw1ODUxMyw1ODUxNCw1ODUxNSw1ODUxNiw1ODUxNyw1ODUxOCw1ODUxOSw1ODUyMCw1ODUyMSw1ODUyMiw1ODUyMyw1ODUyNCw1ODUyNSw1ODUyNiw1ODUyNyw1ODUyOCw1ODUyOSw1ODUzMCw1ODUzMSw1ODUzMiw1ODUzMyw1ODUzNCw1ODUzNSw1ODUzNiw1''@;'; put 'put ''ODUzNyw1ODUzOCw1ODUzOSw1ODU0MCw1ODU0MSw1ODU0Miw1ODU0Myw1ODU0NCw1ODU0NSw1ODU0Niw1ODU0Nyw1ODU0OCw1ODU0OSw1ODU1MCw1ODU1MSw1ODU1Miw1ODU1Myw1ODU1NCw1ODU1NSw1ODU1Niw1ODU1Nyw1ODU1OCw1ODU1OSw1ODU2MCw1ODU2MSw1ODU2Miw1ODU2Myw1ODU2''@;'; put 'put ''NCw1ODU2NV0sImdiMTgwMzAtcmFuZ2VzIjpbWzAsMTI4XSxbMzYsMTY1XSxbMzgsMTY5XSxbNDUsMTc4XSxbNTAsMTg0XSxbODEsMjE2XSxbODksMjI2XSxbOTUsMjM1XSxbOTYsMjM4XSxbMTAwLDI0NF0sWzEwMywyNDhdLFsxMDQsMjUxXSxbMTA1LDI1M10sWzEwOSwyNThdLFsxMjYsMjc2''@;'; put 'put ''XSxbMTMzLDI4NF0sWzE0OCwzMDBdLFsxNzIsMzI1XSxbMTc1LDMyOV0sWzE3OSwzMzRdLFsyMDgsMzY0XSxbMzA2LDQ2M10sWzMwNyw0NjVdLFszMDgsNDY3XSxbMzA5LDQ2OV0sWzMxMCw0NzFdLFszMTEsNDczXSxbMzEyLDQ3NV0sWzMxMyw0NzddLFszNDEsNTA2XSxbNDI4LDU5NF0sWzQ0''@;'; put 'put ''Myw2MTBdLFs1NDQsNzEyXSxbNTQ1LDcxNl0sWzU1OCw3MzBdLFs3NDEsOTMwXSxbNzQyLDkzOF0sWzc0OSw5NjJdLFs3NTAsOTcwXSxbODA1LDEwMjZdLFs4MTksMTEwNF0sWzgyMCwxMTA2XSxbNzkyMiw4MjA5XSxbNzkyNCw4MjE1XSxbNzkyNSw4MjE4XSxbNzkyNyw4MjIyXSxbNzkzNCw4''@;'; put 'put ''MjMxXSxbNzk0Myw4MjQxXSxbNzk0NCw4MjQ0XSxbNzk0NSw4MjQ2XSxbNzk1MCw4MjUyXSxbODA2Miw4MzY1XSxbODE0OCw4NDUyXSxbODE0OSw4NDU0XSxbODE1Miw4NDU4XSxbODE2NCw4NDcxXSxbODE3NCw4NDgyXSxbODIzNiw4NTU2XSxbODI0MCw4NTcwXSxbODI2Miw4NTk2XSxbODI2''@;'; put 'put ''NCw4NjAyXSxbODM3NCw4NzEzXSxbODM4MCw4NzIwXSxbODM4MSw4NzIyXSxbODM4NCw4NzI2XSxbODM4OCw4NzMxXSxbODM5MCw4NzM3XSxbODM5Miw4NzQwXSxbODM5Myw4NzQyXSxbODM5NCw4NzQ4XSxbODM5Niw4NzUxXSxbODQwMSw4NzYwXSxbODQwNiw4NzY2XSxbODQxNiw4Nzc3XSxb''@;'; put 'put ''ODQxOSw4NzgxXSxbODQyNCw4Nzg3XSxbODQzNyw4ODAyXSxbODQzOSw4ODA4XSxbODQ0NSw4ODE2XSxbODQ4Miw4ODU0XSxbODQ4NSw4ODU4XSxbODQ5Niw4ODcwXSxbODUyMSw4ODk2XSxbODYwMyw4OTc5XSxbODkzNiw5MzIyXSxbODk0Niw5MzcyXSxbOTA0Niw5NTQ4XSxbOTA1MCw5NTg4''@;'; put 'put ''XSxbOTA2Myw5NjE2XSxbOTA2Niw5NjIyXSxbOTA3Niw5NjM0XSxbOTA5Miw5NjUyXSxbOTEwMCw5NjYyXSxbOTEwOCw5NjcyXSxbOTExMSw5Njc2XSxbOTExMyw5NjgwXSxbOTEzMSw5NzAyXSxbOTE2Miw5NzM1XSxbOTE2NCw5NzM4XSxbOTIxOCw5NzkzXSxbOTIxOSw5Nzk1XSxbMTEzMjks''@;'; put 'put ''MTE5MDZdLFsxMTMzMSwxMTkwOV0sWzExMzM0LDExOTEzXSxbMTEzMzYsMTE5MTddLFsxMTM0NiwxMTkyOF0sWzExMzYxLDExOTQ0XSxbMTEzNjMsMTE5NDddLFsxMTM2NiwxMTk1MV0sWzExMzcwLDExOTU2XSxbMTEzNzIsMTE5NjBdLFsxMTM3NSwxMTk2NF0sWzExMzg5LDExOTc5XSxbMTE2''@;'; put 'put ''ODIsMTIyODRdLFsxMTY4NiwxMjI5Ml0sWzExNjg3LDEyMzEyXSxbMTE2OTIsMTIzMTldLFsxMTY5NCwxMjMzMF0sWzExNzE0LDEyMzUxXSxbMTE3MTYsMTI0MzZdLFsxMTcyMywxMjQ0N10sWzExNzI1LDEyNTM1XSxbMTE3MzAsMTI1NDNdLFsxMTczNiwxMjU4Nl0sWzExOTgyLDEyODQyXSxb''@;'; put 'put ''MTE5ODksMTI4NTBdLFsxMjEwMiwxMjk2NF0sWzEyMzM2LDEzMjAwXSxbMTIzNDgsMTMyMTVdLFsxMjM1MCwxMzIxOF0sWzEyMzg0LDEzMjUzXSxbMTIzOTMsMTMyNjNdLFsxMjM5NSwxMzI2N10sWzEyMzk3LDEzMjcwXSxbMTI1MTAsMTMzODRdLFsxMjU1MywxMzQyOF0sWzEyODUxLDEzNzI3''@;'; put 'put ''XSxbMTI5NjIsMTM4MzldLFsxMjk3MywxMzg1MV0sWzEzNzM4LDE0NjE3XSxbMTM4MjMsMTQ3MDNdLFsxMzkxOSwxNDgwMV0sWzEzOTMzLDE0ODE2XSxbMTQwODAsMTQ5NjRdLFsxNDI5OCwxNTE4M10sWzE0NTg1LDE1NDcxXSxbMTQ2OTgsMTU1ODVdLFsxNTU4MywxNjQ3MV0sWzE1ODQ3LDE2''@;'; put 'put ''NzM2XSxbMTYzMTgsMTcyMDhdLFsxNjQzNCwxNzMyNV0sWzE2NDM4LDE3MzMwXSxbMTY0ODEsMTczNzRdLFsxNjcyOSwxNzYyM10sWzE3MTAyLDE3OTk3XSxbMTcxMjIsMTgwMThdLFsxNzMxNSwxODIxMl0sWzE3MzIwLDE4MjE4XSxbMTc0MDIsMTgzMDFdLFsxNzQxOCwxODMxOF0sWzE3ODU5''@;'; put 'put ''LDE4NzYwXSxbMTc5MDksMTg4MTFdLFsxNzkxMSwxODgxNF0sWzE3OTE1LDE4ODIwXSxbMTc5MTYsMTg4MjNdLFsxNzkzNiwxODg0NF0sWzE3OTM5LDE4ODQ4XSxbMTc5NjEsMTg4NzJdLFsxODY2NCwxOTU3Nl0sWzE4NzAzLDE5NjIwXSxbMTg4MTQsMTk3MzhdLFsxODk2MiwxOTg4N10sWzE5''@;'; put 'put ''MDQzLDQwODcwXSxbMzM0NjksNTkyNDRdLFszMzQ3MCw1OTMzNl0sWzMzNDcxLDU5MzY3XSxbMzM0ODQsNTk0MTNdLFszMzQ4NSw1OTQxN10sWzMzNDkwLDU5NDIzXSxbMzM0OTcsNTk0MzFdLFszMzUwMSw1OTQzN10sWzMzNTA1LDU5NDQzXSxbMzM1MTMsNTk0NTJdLFszMzUyMCw1OTQ2MF0s''@;'; put 'put ''WzMzNTM2LDU5NDc4XSxbMzM1NTAsNTk0OTNdLFszNzg0NSw2Mzc4OV0sWzM3OTIxLDYzODY2XSxbMzc5NDgsNjM4OTRdLFszODAyOSw2Mzk3Nl0sWzM4MDM4LDYzOTg2XSxbMzgwNjQsNjQwMTZdLFszODA2NSw2NDAxOF0sWzM4MDY2LDY0MDIxXSxbMzgwNjksNjQwMjVdLFszODA3NSw2NDAz''@;'; put 'put ''NF0sWzM4MDc2LDY0MDM3XSxbMzgwNzgsNjQwNDJdLFszOTEwOCw2NTA3NF0sWzM5MTA5LDY1MDkzXSxbMzkxMTMsNjUxMDddLFszOTExNCw2NTExMl0sWzM5MTE1LDY1MTI3XSxbMzkxMTYsNjUxMzJdLFszOTI2NSw2NTM3NV0sWzM5Mzk0LDY1NTEwXSxbMTg5ZTMsNjU1MzZdXSxqaXMwMjA4''@;'; put 'put ''OlsxMjI4OCwxMjI4OSwxMjI5MCw2NTI5Miw2NTI5NCwxMjUzOSw2NTMwNiw2NTMwNyw2NTMxMSw2NTI4MSwxMjQ0MywxMjQ0NCwxODAsNjUzNDQsMTY4LDY1MzQyLDY1NTA3LDY1MzQzLDEyNTQxLDEyNTQyLDEyNDQ1LDEyNDQ2LDEyMjkxLDIwMTg5LDEyMjkzLDEyMjk0LDEyMjk1LDEyNTQw''@;'; put 'put ''LDgyMTMsODIwOCw2NTI5NSw2NTM0MCw2NTM3NCw4NzQxLDY1MzcyLDgyMzAsODIyOSw4MjE2LDgyMTcsODIyMCw4MjIxLDY1Mjg4LDY1Mjg5LDEyMzA4LDEyMzA5LDY1MzM5LDY1MzQxLDY1MzcxLDY1MzczLDEyMjk2LDEyMjk3LDEyMjk4LDEyMjk5LDEyMzAwLDEyMzAxLDEyMzAyLDEyMzAz''@;'; put 'put ''LDEyMzA0LDEyMzA1LDY1MjkxLDY1MjkzLDE3NywyMTUsMjQ3LDY1MzA5LDg4MDAsNjUzMDgsNjUzMTAsODgwNiw4ODA3LDg3MzQsODc1Niw5Nzk0LDk3OTIsMTc2LDgyNDIsODI0Myw4NDUxLDY1NTA5LDY1Mjg0LDY1NTA0LDY1NTA1LDY1Mjg1LDY1MjgzLDY1Mjg2LDY1MjkwLDY1MzEyLDE2''@;'; put 'put ''Nyw5NzM0LDk3MzMsOTY3NSw5Njc5LDk2NzgsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjUxLDk2NTAsOTY2MSw5NjYwLDgyNTEsMTIzMDYsODU5NCw4NTkyLDg1OTMsODU5NSwxMjMwNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODcxMiw4''@;'; put 'put ''NzE1LDg4MzgsODgzOSw4ODM0LDg4MzUsODc0Niw4NzQ1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NzQzLDg3NDQsNjU1MDYsODY1OCw4NjYwLDg3MDQsODcwNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''ODczNiw4ODY5LDg5NzgsODcwNiw4NzExLDg4MDEsODc4Niw4ODEwLDg4MTEsODczMCw4NzY1LDg3MzMsODc1Nyw4NzQ3LDg3NDgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NDkxLDgyNDAsOTgzOSw5ODM3LDk4MzQsODIyNCw4MjI1LDE4MixudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDk3MTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjUyOTYsNjUyOTcsNjUyOTgsNjUyOTksNjUzMDAsNjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCw2NTMxMyw2NTMxNCw2NTMxNSw2NTMxNiw2NTMxNyw2NTMxOCw2NTMxOSw2NTMyMCw2NTMyMSw2NTMyMiw2NTMyMyw2NTMyNCw2NTMyNSw2NTMyNiw2NTMyNyw2NTMyOCw2NTMyOSw2NTMzMCw2NTMzMSw2NTMzMiw2NTMzMyw2NTMzNCw2NTMzNSw2NTMzNiw2NTMzNyw2''@;'; put 'put ''NTMzOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0OSw2NTM1MCw2NTM1MSw2NTM1Miw2NTM1Myw2NTM1NCw2NTM1NSw2NTM1Niw2NTM1Nyw2NTM1OCw2NTM1OSw2NTM2MCw2NTM2MSw2NTM2Miw2NTM2Myw2NTM2NCw2NTM2NSw2NTM2''@;'; put 'put ''Niw2NTM2Nyw2NTM2OCw2NTM2OSw2NTM3MCxudWxsLG51bGwsbnVsbCxudWxsLDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcy''@;'; put 'put ''LDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEy''@;'; put 'put ''NDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3''@;'; put 'put ''LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMjQ0OSwxMjQ1MCwxMjQ1MSwxMjQ1MiwxMjQ1MywxMjQ1NCwxMjQ1NSwxMjQ1NiwxMjQ1NywxMjQ1OCwx''@;'; put 'put ''MjQ1OSwxMjQ2MCwxMjQ2MSwxMjQ2MiwxMjQ2MywxMjQ2NCwxMjQ2NSwxMjQ2NiwxMjQ2NywxMjQ2OCwxMjQ2OSwxMjQ3MCwxMjQ3MSwxMjQ3MiwxMjQ3MywxMjQ3NCwxMjQ3NSwxMjQ3NiwxMjQ3NywxMjQ3OCwxMjQ3OSwxMjQ4MCwxMjQ4MSwxMjQ4MiwxMjQ4MywxMjQ4NCwxMjQ4NSwxMjQ4''@;'; put 'put ''NiwxMjQ4NywxMjQ4OCwxMjQ4OSwxMjQ5MCwxMjQ5MSwxMjQ5MiwxMjQ5MywxMjQ5NCwxMjQ5NSwxMjQ5NiwxMjQ5NywxMjQ5OCwxMjQ5OSwxMjUwMCwxMjUwMSwxMjUwMiwxMjUwMywxMjUwNCwxMjUwNSwxMjUwNiwxMjUwNywxMjUwOCwxMjUwOSwxMjUxMCwxMjUxMSwxMjUxMiwxMjUxMywx''@;'; put 'put ''MjUxNCwxMjUxNSwxMjUxNiwxMjUxNywxMjUxOCwxMjUxOSwxMjUyMCwxMjUyMSwxMjUyMiwxMjUyMywxMjUyNCwxMjUyNSwxMjUyNiwxMjUyNywxMjUyOCwxMjUyOSwxMjUzMCwxMjUzMSwxMjUzMiwxMjUzMywxMjUzNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''OTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5''@;'; put 'put ''NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDI1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1''@;'; put 'put ''MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMTA1LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEw''@;'; put 'put ''MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Niw5NDkyLDk1MDAsOTUxNiw5NTA4LDk1MjQsOTUzMiw5NDczLDk0NzUsOTQ4Nyw5NDkxLDk0OTksOTQ5NSw5NTA3LDk1MjMsOTUx''@;'; put 'put ''NSw5NTMxLDk1NDcsOTUwNCw5NTE5LDk1MTIsOTUyNyw5NTM1LDk1MDEsOTUyMCw5NTA5LDk1MjgsOTUzOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDkzMjIsOTMy''@;'; put 'put ''Myw5MzI0LDkzMjUsOTMyNiw5MzI3LDkzMjgsOTMyOSw5MzMwLDkzMzEsODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1MyxudWxsLDEzMTI5LDEzMDc2LDEzMDkwLDEzMTMzLDEzMDgwLDEzMDk1LDEzMDU5LDEzMTEwLDEzMTM3LDEzMTQzLDEzMDY5LDEz''@;'; put 'put ''MDk0LDEzMDkxLDEzMDk5LDEzMTMwLDEzMTE1LDEzMjEyLDEzMjEzLDEzMjE0LDEzMTk4LDEzMTk5LDEzMjUyLDEzMjE3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMzE3OSwxMjMxNywxMjMxOSw4NDcwLDEzMjYxLDg0ODEsMTI5NjQsMTI5NjUsMTI5NjYsMTI5''@;'; put 'put ''NjcsMTI5NjgsMTI4NDksMTI4NTAsMTI4NTcsMTMxODIsMTMxODEsMTMxODAsODc4Niw4ODAxLDg3NDcsODc1MCw4NzIxLDg3MzAsODg2OSw4NzM2LDg3MzUsODg5NSw4NzU3LDg3NDUsODc0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwMTI0LDIxNzgyLDIzMDQzLDM4NDYzLDIxNjk2LDI0ODU5LDI1Mzg0LDIzMDMwLDM2ODk4LDMzOTA5LDMzNTY0LDMxMzEyLDI0NzQ2LDI1NTY5LDI4MTk3LDI2MDkz''@;'; put 'put ''LDMzODk0LDMzNDQ2LDM5OTI1LDI2NzcxLDIyMzExLDI2MDE3LDI1MjAxLDIzNDUxLDIyOTkyLDM0NDI3LDM5MTU2LDMyMDk4LDMyMTkwLDM5ODIyLDI1MTEwLDMxOTAzLDM0OTk5LDIzNDMzLDI0MjQ1LDI1MzUzLDI2MjYzLDI2Njk2LDM4MzQzLDM4Nzk3LDI2NDQ3LDIwMTk3LDIwMjM0LDIw''@;'; put 'put ''MzAxLDIwMzgxLDIwNTUzLDIyMjU4LDIyODM5LDIyOTk2LDIzMDQxLDIzNTYxLDI0Nzk5LDI0ODQ3LDI0OTQ0LDI2MTMxLDI2ODg1LDI4ODU4LDMwMDMxLDMwMDY0LDMxMjI3LDMyMTczLDMyMjM5LDMyOTYzLDMzODA2LDM0OTE1LDM1NTg2LDM2OTQ5LDM2OTg2LDIxMzA3LDIwMTE3LDIwMTMz''@;'; put 'put ''LDIyNDk1LDMyOTQ2LDM3MDU3LDMwOTU5LDE5OTY4LDIyNzY5LDI4MzIyLDM2OTIwLDMxMjgyLDMzNTc2LDMzNDE5LDM5OTgzLDIwODAxLDIxMzYwLDIxNjkzLDIxNzI5LDIyMjQwLDIzMDM1LDI0MzQxLDM5MTU0LDI4MTM5LDMyOTk2LDM0MDkzLDM4NDk4LDM4NTEyLDM4NTYwLDM4OTA3LDIx''@;'; put 'put ''NTE1LDIxNDkxLDIzNDMxLDI4ODc5LDMyNzAxLDM2ODAyLDM4NjMyLDIxMzU5LDQwMjg0LDMxNDE4LDE5OTg1LDMwODY3LDMzMjc2LDI4MTk4LDIyMDQwLDIxNzY0LDI3NDIxLDM0MDc0LDM5OTk1LDIzMDEzLDIxNDE3LDI4MDA2LDI5OTE2LDM4Mjg3LDIyMDgyLDIwMTEzLDM2OTM5LDM4NjQy''@;'; put 'put ''LDMzNjE1LDM5MTgwLDIxNDczLDIxOTQyLDIzMzQ0LDI0NDMzLDI2MTQ0LDI2MzU1LDI2NjI4LDI3NzA0LDI3ODkxLDI3OTQ1LDI5Nzg3LDMwNDA4LDMxMzEwLDM4OTY0LDMzNTIxLDM0OTA3LDM1NDI0LDM3NjEzLDI4MDgyLDMwMTIzLDMwNDEwLDM5MzY1LDI0NzQyLDM1NTg1LDM2MjM0LDM4''@;'; put 'put ''MzIyLDI3MDIyLDIxNDIxLDIwODcwLDIyMjkwLDIyNTc2LDIyODUyLDIzNDc2LDI0MzEwLDI0NjE2LDI1NTEzLDI1NTg4LDI3ODM5LDI4NDM2LDI4ODE0LDI4OTQ4LDI5MDE3LDI5MTQxLDI5NTAzLDMyMjU3LDMzMzk4LDMzNDg5LDM0MTk5LDM2OTYwLDM3NDY3LDQwMjE5LDIyNjMzLDI2MDQ0''@;'; put 'put ''LDI3NzM4LDI5OTg5LDIwOTg1LDIyODMwLDIyODg1LDI0NDQ4LDI0NTQwLDI1Mjc2LDI2MTA2LDI3MTc4LDI3NDMxLDI3NTcyLDI5NTc5LDMyNzA1LDM1MTU4LDQwMjM2LDQwMjA2LDQwNjQ0LDIzNzEzLDI3Nzk4LDMzNjU5LDIwNzQwLDIzNjI3LDI1MDE0LDMzMjIyLDI2NzQyLDI5MjgxLDIw''@;'; put 'put ''MDU3LDIwNDc0LDIxMzY4LDI0NjgxLDI4MjAxLDMxMzExLDM4ODk5LDE5OTc5LDIxMjcwLDIwMjA2LDIwMzA5LDIwMjg1LDIwMzg1LDIwMzM5LDIxMTUyLDIxNDg3LDIyMDI1LDIyNzk5LDIzMjMzLDIzNDc4LDIzNTIxLDMxMTg1LDI2MjQ3LDI2NTI0LDI2NTUwLDI3NDY4LDI3ODI3LDI4Nzc5''@;'; put 'put ''LDI5NjM0LDMxMTE3LDMxMTY2LDMxMjkyLDMxNjIzLDMzNDU3LDMzNDk5LDMzNTQwLDMzNjU1LDMzNzc1LDMzNzQ3LDM0NjYyLDM1NTA2LDIyMDU3LDM2MDA4LDM2ODM4LDM2OTQyLDM4Njg2LDM0NDQyLDIwNDIwLDIzNzg0LDI1MTA1LDI5MjczLDMwMDExLDMzMjUzLDMzNDY5LDM0NTU4LDM2''@;'; put 'put ''MDMyLDM4NTk3LDM5MTg3LDM5MzgxLDIwMTcxLDIwMjUwLDM1Mjk5LDIyMjM4LDIyNjAyLDIyNzMwLDI0MzE1LDI0NTU1LDI0NjE4LDI0NzI0LDI0Njc0LDI1MDQwLDI1MTA2LDI1Mjk2LDI1OTEzLDM5NzQ1LDI2MjE0LDI2ODAwLDI4MDIzLDI4Nzg0LDMwMDI4LDMwMzQyLDMyMTE3LDMzNDQ1''@;'; put 'put ''LDM0ODA5LDM4MjgzLDM4NTQyLDM1OTk3LDIwOTc3LDIxMTgyLDIyODA2LDIxNjgzLDIzNDc1LDIzODMwLDI0OTM2LDI3MDEwLDI4MDc5LDMwODYxLDMzOTk1LDM0OTAzLDM1NDQyLDM3Nzk5LDM5NjA4LDI4MDEyLDM5MzM2LDM0NTIxLDIyNDM1LDI2NjIzLDM0NTEwLDM3MzkwLDIxMTIzLDIy''@;'; put 'put ''MTUxLDIxNTA4LDI0Mjc1LDI1MzEzLDI1Nzg1LDI2Njg0LDI2NjgwLDI3NTc5LDI5NTU0LDMwOTA2LDMxMzM5LDM1MjI2LDM1MjgyLDM2MjAzLDM2NjExLDM3MTAxLDM4MzA3LDM4NTQ4LDM4NzYxLDIzMzk4LDIzNzMxLDI3MDA1LDM4OTg5LDM4OTkwLDI1NDk5LDMxNTIwLDI3MTc5LDI3MjYz''@;'; put 'put ''LDI2ODA2LDM5OTQ5LDI4NTExLDIxMTA2LDIxOTE3LDI0Njg4LDI1MzI0LDI3OTYzLDI4MTY3LDI4MzY5LDMzODgzLDM1MDg4LDM2Njc2LDE5OTg4LDM5OTkzLDIxNDk0LDI2OTA3LDI3MTk0LDM4Nzg4LDI2NjY2LDIwODI4LDMxNDI3LDMzOTcwLDM3MzQwLDM3NzcyLDIyMTA3LDQwMjMyLDI2''@;'; put 'put ''NjU4LDMzNTQxLDMzODQxLDMxOTA5LDIxZTMsMzM0NzcsMjk5MjYsMjAwOTQsMjAzNTUsMjA4OTYsMjM1MDYsMjEwMDIsMjEyMDgsMjEyMjMsMjQwNTksMjE5MTQsMjI1NzAsMjMwMTQsMjM0MzYsMjM0NDgsMjM1MTUsMjQxNzgsMjQxODUsMjQ3MzksMjQ4NjMsMjQ5MzEsMjUwMjIsMjU1NjMs''@;'; put 'put ''MjU5NTQsMjY1NzcsMjY3MDcsMjY4NzQsMjc0NTQsMjc0NzUsMjc3MzUsMjg0NTAsMjg1NjcsMjg0ODUsMjk4NzIsMjk5NzYsMzA0MzUsMzA0NzUsMzE0ODcsMzE2NDksMzE3NzcsMzIyMzMsMzI1NjYsMzI3NTIsMzI5MjUsMzMzODIsMzM2OTQsMzUyNTEsMzU1MzIsMzYwMTEsMzY5OTYsMzc5''@;'; put 'put ''NjksMzgyOTEsMzgyODksMzgzMDYsMzg1MDEsMzg4NjcsMzkyMDgsMzMzMDQsMjAwMjQsMjE1NDcsMjM3MzYsMjQwMTIsMjk2MDksMzAyODQsMzA1MjQsMjM3MjEsMzI3NDcsMzYxMDcsMzg1OTMsMzg5MjksMzg5OTYsMzllMywyMDIyNSwyMDIzOCwyMTM2MSwyMTkxNiwyMjEyMCwyMjUyMiwy''@;'; put 'put ''Mjg1NSwyMzMwNSwyMzQ5MiwyMzY5NiwyNDA3NiwyNDE5MCwyNDUyNCwyNTU4MiwyNjQyNiwyNjA3MSwyNjA4MiwyNjM5OSwyNjgyNywyNjgyMCwyNzIzMSwyNDExMiwyNzU4OSwyNzY3MSwyNzc3MywzMDA3OSwzMTA0OCwyMzM5NSwzMTIzMiwzMmUzLDI0NTA5LDM1MjE1LDM1MzUyLDM2MDIw''@;'; put 'put ''LDM2MjE1LDM2NTU2LDM2NjM3LDM5MTM4LDM5NDM4LDM5NzQwLDIwMDk2LDIwNjA1LDIwNzM2LDIyOTMxLDIzNDUyLDI1MTM1LDI1MjE2LDI1ODM2LDI3NDUwLDI5MzQ0LDMwMDk3LDMxMDQ3LDMyNjgxLDM0ODExLDM1NTE2LDM1Njk2LDI1NTE2LDMzNzM4LDM4ODE2LDIxNTEzLDIxNTA3LDIx''@;'; put 'put ''OTMxLDI2NzA4LDI3MjI0LDM1NDQwLDMwNzU5LDI2NDg1LDQwNjUzLDIxMzY0LDIzNDU4LDMzMDUwLDM0Mzg0LDM2ODcwLDE5OTkyLDIwMDM3LDIwMTY3LDIwMjQxLDIxNDUwLDIxNTYwLDIzNDcwLDI0MzM5LDI0NjEzLDI1OTM3LDI2NDI5LDI3NzE0LDI3NzYyLDI3ODc1LDI4NzkyLDI5Njk5''@;'; put 'put ''LDMxMzUwLDMxNDA2LDMxNDk2LDMyMDI2LDMxOTk4LDMyMTAyLDI2MDg3LDI5Mjc1LDIxNDM1LDIzNjIxLDI0MDQwLDI1Mjk4LDI1MzEyLDI1MzY5LDI4MTkyLDM0Mzk0LDM1Mzc3LDM2MzE3LDM3NjI0LDI4NDE3LDMxMTQyLDM5NzcwLDIwMTM2LDIwMTM5LDIwMTQwLDIwMzc5LDIwMzg0LDIw''@;'; put 'put ''Njg5LDIwODA3LDMxNDc4LDIwODQ5LDIwOTgyLDIxMzMyLDIxMjgxLDIxMzc1LDIxNDgzLDIxOTMyLDIyNjU5LDIzNzc3LDI0Mzc1LDI0Mzk0LDI0NjIzLDI0NjU2LDI0Njg1LDI1Mzc1LDI1OTQ1LDI3MjExLDI3ODQxLDI5Mzc4LDI5NDIxLDMwNzAzLDMzMDE2LDMzMDI5LDMzMjg4LDM0MTI2''@;'; put 'put ''LDM3MTExLDM3ODU3LDM4OTExLDM5MjU1LDM5NTE0LDIwMjA4LDIwOTU3LDIzNTk3LDI2MjQxLDI2OTg5LDIzNjE2LDI2MzU0LDI2OTk3LDI5NTc3LDI2NzA0LDMxODczLDIwNjc3LDIxMjIwLDIyMzQzLDI0MDYyLDM3NjcwLDI2MDIwLDI3NDI3LDI3NDUzLDI5NzQ4LDMxMTA1LDMxMTY1LDMx''@;'; put 'put ''NTYzLDMyMjAyLDMzNDY1LDMzNzQwLDM0OTQzLDM1MTY3LDM1NjQxLDM2ODE3LDM3MzI5LDIxNTM1LDM3NTA0LDIwMDYxLDIwNTM0LDIxNDc3LDIxMzA2LDI5Mzk5LDI5NTkwLDMwNjk3LDMzNTEwLDM2NTI3LDM5MzY2LDM5MzY4LDM5Mzc4LDIwODU1LDI0ODU4LDM0Mzk4LDIxOTM2LDMxMzU0''@;'; put 'put ''LDIwNTk4LDIzNTA3LDM2OTM1LDM4NTMzLDIwMDE4LDI3MzU1LDM3MzUxLDIzNjMzLDIzNjI0LDI1NDk2LDMxMzkxLDI3Nzk1LDM4NzcyLDM2NzA1LDMxNDAyLDI5MDY2LDM4NTM2LDMxODc0LDI2NjQ3LDMyMzY4LDI2NzA1LDM3NzQwLDIxMjM0LDIxNTMxLDM0MjE5LDM1MzQ3LDMyNjc2LDM2''@;'; put 'put ''NTU3LDM3MDg5LDIxMzUwLDM0OTUyLDMxMDQxLDIwNDE4LDIwNjcwLDIxMDA5LDIwODA0LDIxODQzLDIyMzE3LDI5Njc0LDIyNDExLDIyODY1LDI0NDE4LDI0NDUyLDI0NjkzLDI0OTUwLDI0OTM1LDI1MDAxLDI1NTIyLDI1NjU4LDI1OTY0LDI2MjIzLDI2NjkwLDI4MTc5LDMwMDU0LDMxMjkz''@;'; put 'put ''LDMxOTk1LDMyMDc2LDMyMTUzLDMyMzMxLDMyNjE5LDMzNTUwLDMzNjEwLDM0NTA5LDM1MzM2LDM1NDI3LDM1Njg2LDM2NjA1LDM4OTM4LDQwMzM1LDMzNDY0LDM2ODE0LDM5OTEyLDIxMTI3LDI1MTE5LDI1NzMxLDI4NjA4LDM4NTUzLDI2Njg5LDIwNjI1LDI3NDI0LDI3NzcwLDI4NTAwLDMx''@;'; put 'put ''MzQ4LDMyMDgwLDM0ODgwLDM1MzYzLDI2Mzc2LDIwMjE0LDIwNTM3LDIwNTE4LDIwNTgxLDIwODYwLDIxMDQ4LDIxMDkxLDIxOTI3LDIyMjg3LDIyNTMzLDIzMjQ0LDI0MzE0LDI1MDEwLDI1MDgwLDI1MzMxLDI1NDU4LDI2OTA4LDI3MTc3LDI5MzA5LDI5MzU2LDI5NDg2LDMwNzQwLDMwODMx''@;'; put 'put ''LDMyMTIxLDMwNDc2LDMyOTM3LDM1MjExLDM1NjA5LDM2MDY2LDM2NTYyLDM2OTYzLDM3NzQ5LDM4NTIyLDM4OTk3LDM5NDQzLDQwNTY4LDIwODAzLDIxNDA3LDIxNDI3LDI0MTg3LDI0MzU4LDI4MTg3LDI4MzA0LDI5NTcyLDI5Njk0LDMyMDY3LDMzMzM1LDM1MzI4LDM1NTc4LDM4NDgwLDIw''@;'; put 'put ''MDQ2LDIwNDkxLDIxNDc2LDIxNjI4LDIyMjY2LDIyOTkzLDIzMzk2LDI0MDQ5LDI0MjM1LDI0MzU5LDI1MTQ0LDI1OTI1LDI2NTQzLDI4MjQ2LDI5MzkyLDMxOTQ2LDM0OTk2LDMyOTI5LDMyOTkzLDMzNzc2LDM0MzgyLDM1NDYzLDM2MzI4LDM3NDMxLDM4NTk5LDM5MDE1LDQwNzIzLDIwMTE2''@;'; put 'put ''LDIwMTE0LDIwMjM3LDIxMzIwLDIxNTc3LDIxNTY2LDIzMDg3LDI0NDYwLDI0NDgxLDI0NzM1LDI2NzkxLDI3Mjc4LDI5Nzg2LDMwODQ5LDM1NDg2LDM1NDkyLDM1NzAzLDM3MjY0LDIwMDYyLDM5ODgxLDIwMTMyLDIwMzQ4LDIwMzk5LDIwNTA1LDIwNTAyLDIwODA5LDIwODQ0LDIxMTUxLDIx''@;'; put 'put ''MTc3LDIxMjQ2LDIxNDAyLDIxNDc1LDIxNTIxLDIxNTE4LDIxODk3LDIyMzUzLDIyNDM0LDIyOTA5LDIzMzgwLDIzMzg5LDIzNDM5LDI0MDM3LDI0MDM5LDI0MDU1LDI0MTg0LDI0MTk1LDI0MjE4LDI0MjQ3LDI0MzQ0LDI0NjU4LDI0OTA4LDI1MjM5LDI1MzA0LDI1NTExLDI1OTE1LDI2MTE0''@;'; put 'put ''LDI2MTc5LDI2MzU2LDI2NDc3LDI2NjU3LDI2Nzc1LDI3MDgzLDI3NzQzLDI3OTQ2LDI4MDA5LDI4MjA3LDI4MzE3LDMwMDAyLDMwMzQzLDMwODI4LDMxMjk1LDMxOTY4LDMyMDA1LDMyMDI0LDMyMDk0LDMyMTc3LDMyNzg5LDMyNzcxLDMyOTQzLDMyOTQ1LDMzMTA4LDMzMTY3LDMzMzIyLDMz''@;'; put 'put ''NjE4LDM0ODkyLDM0OTEzLDM1NjExLDM2MDAyLDM2MDkyLDM3MDY2LDM3MjM3LDM3NDg5LDMwNzgzLDM3NjI4LDM4MzA4LDM4NDc3LDM4OTE3LDM5MzIxLDM5NjQwLDQwMjUxLDIxMDgzLDIxMTYzLDIxNDk1LDIxNTEyLDIyNzQxLDI1MzM1LDI4NjQwLDM1OTQ2LDM2NzAzLDQwNjMzLDIwODEx''@;'; put 'put ''LDIxMDUxLDIxNTc4LDIyMjY5LDMxMjk2LDM3MjM5LDQwMjg4LDQwNjU4LDI5NTA4LDI4NDI1LDMzMTM2LDI5OTY5LDI0NTczLDI0Nzk0LDM5NTkyLDI5NDAzLDM2Nzk2LDI3NDkyLDM4OTE1LDIwMTcwLDIyMjU2LDIyMzcyLDIyNzE4LDIzMTMwLDI0NjgwLDI1MDMxLDI2MTI3LDI2MTE4LDI2''@;'; put 'put ''NjgxLDI2ODAxLDI4MTUxLDMwMTY1LDMyMDU4LDMzMzkwLDM5NzQ2LDIwMTIzLDIwMzA0LDIxNDQ5LDIxNzY2LDIzOTE5LDI0MDM4LDI0MDQ2LDI2NjE5LDI3ODAxLDI5ODExLDMwNzIyLDM1NDA4LDM3NzgyLDM1MDM5LDIyMzUyLDI0MjMxLDI1Mzg3LDIwNjYxLDIwNjUyLDIwODc3LDI2MzY4''@;'; put 'put ''LDIxNzA1LDIyNjIyLDIyOTcxLDIzNDcyLDI0NDI1LDI1MTY1LDI1NTA1LDI2Njg1LDI3NTA3LDI4MTY4LDI4Nzk3LDM3MzE5LDI5MzEyLDMwNzQxLDMwNzU4LDMxMDg1LDI1OTk4LDMyMDQ4LDMzNzU2LDM1MDA5LDM2NjE3LDM4NTU1LDIxMDkyLDIyMzEyLDI2NDQ4LDMyNjE4LDM2MDAxLDIw''@;'; put 'put ''OTE2LDIyMzM4LDM4NDQyLDIyNTg2LDI3MDE4LDMyOTQ4LDIxNjgyLDIzODIyLDIyNTI0LDMwODY5LDQwNDQyLDIwMzE2LDIxMDY2LDIxNjQzLDI1NjYyLDI2MTUyLDI2Mzg4LDI2NjEzLDMxMzY0LDMxNTc0LDMyMDM0LDM3Njc5LDI2NzE2LDM5ODUzLDMxNTQ1LDIxMjczLDIwODc0LDIxMDQ3''@;'; put 'put ''LDIzNTE5LDI1MzM0LDI1Nzc0LDI1ODMwLDI2NDEzLDI3NTc4LDM0MjE3LDM4NjA5LDMwMzUyLDM5ODk0LDI1NDIwLDM3NjM4LDM5ODUxLDMwMzk5LDI2MTk0LDE5OTc3LDIwNjMyLDIxNDQyLDIzNjY1LDI0ODA4LDI1NzQ2LDI1OTU1LDI2NzE5LDI5MTU4LDI5NjQyLDI5OTg3LDMxNjM5LDMy''@;'; put 'put ''Mzg2LDM0NDUzLDM1NzE1LDM2MDU5LDM3MjQwLDM5MTg0LDI2MDI4LDI2MjgzLDI3NTMxLDIwMTgxLDIwMTgwLDIwMjgyLDIwMzUxLDIxMDUwLDIxNDk2LDIxNDkwLDIxOTg3LDIyMjM1LDIyNzYzLDIyOTg3LDIyOTg1LDIzMDM5LDIzMzc2LDIzNjI5LDI0MDY2LDI0MTA3LDI0NTM1LDI0NjA1''@;'; put 'put ''LDI1MzUxLDI1OTAzLDIzMzg4LDI2MDMxLDI2MDQ1LDI2MDg4LDI2NTI1LDI3NDkwLDI3NTE1LDI3NjYzLDI5NTA5LDMxMDQ5LDMxMTY5LDMxOTkyLDMyMDI1LDMyMDQzLDMyOTMwLDMzMDI2LDMzMjY3LDM1MjIyLDM1NDIyLDM1NDMzLDM1NDMwLDM1NDY4LDM1NTY2LDM2MDM5LDM2MDYwLDM4''@;'; put 'put ''NjA0LDM5MTY0LDI3NTAzLDIwMTA3LDIwMjg0LDIwMzY1LDIwODE2LDIzMzgzLDIzNTQ2LDI0OTA0LDI1MzQ1LDI2MTc4LDI3NDI1LDI4MzYzLDI3ODM1LDI5MjQ2LDI5ODg1LDMwMTY0LDMwOTEzLDMxMDM0LDMyNzgwLDMyODE5LDMzMjU4LDMzOTQwLDM2NzY2LDI3NzI4LDQwNTc1LDI0MzM1''@;'; put 'put ''LDM1NjcyLDQwMjM1LDMxNDgyLDM2NjAwLDIzNDM3LDM4NjM1LDE5OTcxLDIxNDg5LDIyNTE5LDIyODMzLDIzMjQxLDIzNDYwLDI0NzEzLDI4Mjg3LDI4NDIyLDMwMTQyLDM2MDc0LDIzNDU1LDM0MDQ4LDMxNzEyLDIwNTk0LDI2NjEyLDMzNDM3LDIzNjQ5LDM0MTIyLDMyMjg2LDMzMjk0LDIw''@;'; put 'put ''ODg5LDIzNTU2LDI1NDQ4LDM2MTk4LDI2MDEyLDI5MDM4LDMxMDM4LDMyMDIzLDMyNzczLDM1NjEzLDM2NTU0LDM2OTc0LDM0NTAzLDM3MDM0LDIwNTExLDIxMjQyLDIzNjEwLDI2NDUxLDI4Nzk2LDI5MjM3LDM3MTk2LDM3MzIwLDM3Njc1LDMzNTA5LDIzNDkwLDI0MzY5LDI0ODI1LDIwMDI3''@;'; put 'put ''LDIxNDYyLDIzNDMyLDI1MTYzLDI2NDE3LDI3NTMwLDI5NDE3LDI5NjY0LDMxMjc4LDMzMTMxLDM2MjU5LDM3MjAyLDM5MzE4LDIwNzU0LDIxNDYzLDIxNjEwLDIzNTUxLDI1NDgwLDI3MTkzLDMyMTcyLDM4NjU2LDIyMjM0LDIxNDU0LDIxNjA4LDIzNDQ3LDIzNjAxLDI0MDMwLDIwNDYyLDI0''@;'; put 'put ''ODMzLDI1MzQyLDI3OTU0LDMxMTY4LDMxMTc5LDMyMDY2LDMyMzMzLDMyNzIyLDMzMjYxLDMzMzExLDMzOTM2LDM0ODg2LDM1MTg2LDM1NzI4LDM2NDY4LDM2NjU1LDM2OTEzLDM3MTk1LDM3MjI4LDM4NTk4LDM3Mjc2LDIwMTYwLDIwMzAzLDIwODA1LDIxMzEzLDI0NDY3LDI1MTAyLDI2NTgw''@;'; put 'put ''LDI3NzEzLDI4MTcxLDI5NTM5LDMyMjk0LDM3MzI1LDM3NTA3LDIxNDYwLDIyODA5LDIzNDg3LDI4MTEzLDMxMDY5LDMyMzAyLDMxODk5LDIyNjU0LDI5MDg3LDIwOTg2LDM0ODk5LDM2ODQ4LDIwNDI2LDIzODAzLDI2MTQ5LDMwNjM2LDMxNDU5LDMzMzA4LDM5NDIzLDIwOTM0LDI0NDkwLDI2''@;'; put 'put ''MDkyLDI2OTkxLDI3NTI5LDI4MTQ3LDI4MzEwLDI4NTE2LDMwNDYyLDMyMDIwLDI0MDMzLDM2OTgxLDM3MjU1LDM4OTE4LDIwOTY2LDIxMDIxLDI1MTUyLDI2MjU3LDI2MzI5LDI4MTg2LDI0MjQ2LDMyMjEwLDMyNjI2LDI2MzYwLDM0MjIzLDM0Mjk1LDM1NTc2LDIxMTYxLDIxNDY1LDIyODk5''@;'; put 'put ''LDI0MjA3LDI0NDY0LDI0NjYxLDM3NjA0LDM4NTAwLDIwNjYzLDIwNzY3LDIxMjEzLDIxMjgwLDIxMzE5LDIxNDg0LDIxNzM2LDIxODMwLDIxODA5LDIyMDM5LDIyODg4LDIyOTc0LDIzMTAwLDIzNDc3LDIzNTU4LDIzNTY3LDIzNTY5LDIzNTc4LDI0MTk2LDI0MjAyLDI0Mjg4LDI0NDMyLDI1''@;'; put 'put ''MjE1LDI1MjIwLDI1MzA3LDI1NDg0LDI1NDYzLDI2MTE5LDI2MTI0LDI2MTU3LDI2MjMwLDI2NDk0LDI2Nzg2LDI3MTY3LDI3MTg5LDI3ODM2LDI4MDQwLDI4MTY5LDI4MjQ4LDI4OTg4LDI4OTY2LDI5MDMxLDMwMTUxLDMwNDY1LDMwODEzLDMwOTc3LDMxMDc3LDMxMjE2LDMxNDU2LDMxNTA1''@;'; put 'put ''LDMxOTExLDMyMDU3LDMyOTE4LDMzNzUwLDMzOTMxLDM0MTIxLDM0OTA5LDM1MDU5LDM1MzU5LDM1Mzg4LDM1NDEyLDM1NDQzLDM1OTM3LDM2MDYyLDM3Mjg0LDM3NDc4LDM3NzU4LDM3OTEyLDM4NTU2LDM4ODA4LDE5OTc4LDE5OTc2LDE5OTk4LDIwMDU1LDIwODg3LDIxMTA0LDIyNDc4LDIy''@;'; put 'put ''NTgwLDIyNzMyLDIzMzMwLDI0MTIwLDI0NzczLDI1ODU0LDI2NDY1LDI2NDU0LDI3OTcyLDI5MzY2LDMwMDY3LDMxMzMxLDMzOTc2LDM1Njk4LDM3MzA0LDM3NjY0LDIyMDY1LDIyNTE2LDM5MTY2LDI1MzI1LDI2ODkzLDI3NTQyLDI5MTY1LDMyMzQwLDMyODg3LDMzMzk0LDM1MzAyLDM5MTM1''@;'; put 'put ''LDM0NjQ1LDM2Nzg1LDIzNjExLDIwMjgwLDIwNDQ5LDIwNDA1LDIxNzY3LDIzMDcyLDIzNTE3LDIzNTI5LDI0NTE1LDI0OTEwLDI1MzkxLDI2MDMyLDI2MTg3LDI2ODYyLDI3MDM1LDI4MDI0LDI4MTQ1LDMwMDAzLDMwMTM3LDMwNDk1LDMxMDcwLDMxMjA2LDMyMDUxLDMzMjUxLDMzNDU1LDM0''@;'; put 'put ''MjE4LDM1MjQyLDM1Mzg2LDM2NTIzLDM2NzYzLDM2OTE0LDM3MzQxLDM4NjYzLDIwMTU0LDIwMTYxLDIwOTk1LDIyNjQ1LDIyNzY0LDIzNTYzLDI5OTc4LDIzNjEzLDMzMTAyLDM1MzM4LDM2ODA1LDM4NDk5LDM4NzY1LDMxNTI1LDM1NTM1LDM4OTIwLDM3MjE4LDIyMjU5LDIxNDE2LDM2ODg3''@;'; put 'put ''LDIxNTYxLDIyNDAyLDI0MTAxLDI1NTEyLDI3NzAwLDI4ODEwLDMwNTYxLDMxODgzLDMyNzM2LDM0OTI4LDM2OTMwLDM3MjA0LDM3NjQ4LDM3NjU2LDM4NTQzLDI5NzkwLDM5NjIwLDIzODE1LDIzOTEzLDI1OTY4LDI2NTMwLDM2MjY0LDM4NjE5LDI1NDU0LDI2NDQxLDI2OTA1LDMzNzMzLDM4''@;'; put 'put ''OTM1LDM4NTkyLDM1MDcwLDI4NTQ4LDI1NzIyLDIzNTQ0LDE5OTkwLDI4NzE2LDMwMDQ1LDI2MTU5LDIwOTMyLDIxMDQ2LDIxMjE4LDIyOTk1LDI0NDQ5LDI0NjE1LDI1MTA0LDI1OTE5LDI1OTcyLDI2MTQzLDI2MjI4LDI2ODY2LDI2NjQ2LDI3NDkxLDI4MTY1LDI5Mjk4LDI5OTgzLDMwNDI3''@;'; put 'put ''LDMxOTM0LDMyODU0LDIyNzY4LDM1MDY5LDM1MTk5LDM1NDg4LDM1NDc1LDM1NTMxLDM2ODkzLDM3MjY2LDM4NzM4LDM4NzQ1LDI1OTkzLDMxMjQ2LDMzMDMwLDM4NTg3LDI0MTA5LDI0Nzk2LDI1MTE0LDI2MDIxLDI2MTMyLDI2NTEyLDMwNzA3LDMxMzA5LDMxODIxLDMyMzE4LDMzMDM0LDM2''@;'; put 'put ''MDEyLDM2MTk2LDM2MzIxLDM2NDQ3LDMwODg5LDIwOTk5LDI1MzA1LDI1NTA5LDI1NjY2LDI1MjQwLDM1MzczLDMxMzYzLDMxNjgwLDM1NTAwLDM4NjM0LDMyMTE4LDMzMjkyLDM0NjMzLDIwMTg1LDIwODA4LDIxMzE1LDIxMzQ0LDIzNDU5LDIzNTU0LDIzNTc0LDI0MDI5LDI1MTI2LDI1MTU5''@;'; put 'put ''LDI1Nzc2LDI2NjQzLDI2Njc2LDI3ODQ5LDI3OTczLDI3OTI3LDI2NTc5LDI4NTA4LDI5MDA2LDI5MDUzLDI2MDU5LDMxMzU5LDMxNjYxLDMyMjE4LDMyMzMwLDMyNjgwLDMzMTQ2LDMzMzA3LDMzMzM3LDM0MjE0LDM1NDM4LDM2MDQ2LDM2MzQxLDM2OTg0LDM2OTgzLDM3NTQ5LDM3NTIxLDM4''@;'; put 'put ''Mjc1LDM5ODU0LDIxMDY5LDIxODkyLDI4NDcyLDI4OTgyLDIwODQwLDMxMTA5LDMyMzQxLDMzMjAzLDMxOTUwLDIyMDkyLDIyNjA5LDIzNzIwLDI1NTE0LDI2MzY2LDI2MzY1LDI2OTcwLDI5NDAxLDMwMDk1LDMwMDk0LDMwOTkwLDMxMDYyLDMxMTk5LDMxODk1LDMyMDMyLDMyMDY4LDM0MzEx''@;'; put 'put ''LDM1MzgwLDM4NDU5LDM2OTYxLDQwNzM2LDIwNzExLDIxMTA5LDIxNDUyLDIxNDc0LDIwNDg5LDIxOTMwLDIyNzY2LDIyODYzLDI5MjQ1LDIzNDM1LDIzNjUyLDIxMjc3LDI0ODAzLDI0ODE5LDI1NDM2LDI1NDc1LDI1NDA3LDI1NTMxLDI1ODA1LDI2MDg5LDI2MzYxLDI0MDM1LDI3MDg1LDI3''@;'; put 'put ''MTMzLDI4NDM3LDI5MTU3LDIwMTA1LDMwMTg1LDMwNDU2LDMxMzc5LDMxOTY3LDMyMjA3LDMyMTU2LDMyODY1LDMzNjA5LDMzNjI0LDMzOTAwLDMzOTgwLDM0Mjk5LDM1MDEzLDM2MjA4LDM2ODY1LDM2OTczLDM3NzgzLDM4Njg0LDM5NDQyLDIwNjg3LDIyNjc5LDI0OTc0LDMzMjM1LDM0MTAx''@;'; put 'put ''LDM2MTA0LDM2ODk2LDIwNDE5LDIwNTk2LDIxMDYzLDIxMzYzLDI0Njg3LDI1NDE3LDI2NDYzLDI4MjA0LDM2Mjc1LDM2ODk1LDIwNDM5LDIzNjQ2LDM2MDQyLDI2MDYzLDMyMTU0LDIxMzMwLDM0OTY2LDIwODU0LDI1NTM5LDIzMzg0LDIzNDAzLDIzNTYyLDI1NjEzLDI2NDQ5LDM2OTU2LDIw''@;'; put 'put ''MTgyLDIyODEwLDIyODI2LDI3NzYwLDM1NDA5LDIxODIyLDIyNTQ5LDIyOTQ5LDI0ODE2LDI1MTcxLDI2NTYxLDMzMzMzLDI2OTY1LDM4NDY0LDM5MzY0LDM5NDY0LDIwMzA3LDIyNTM0LDIzNTUwLDMyNzg0LDIzNzI5LDI0MTExLDI0NDUzLDI0NjA4LDI0OTA3LDI1MTQwLDI2MzY3LDI3ODg4''@;'; put 'put ''LDI4MzgyLDMyOTc0LDMzMTUxLDMzNDkyLDM0OTU1LDM2MDI0LDM2ODY0LDM2OTEwLDM4NTM4LDQwNjY3LDM5ODk5LDIwMTk1LDIxNDg4LDIyODIzLDMxNTMyLDM3MjYxLDM4OTg4LDQwNDQxLDI4MzgxLDI4NzExLDIxMzMxLDIxODI4LDIzNDI5LDI1MTc2LDI1MjQ2LDI1Mjk5LDI3ODEwLDI4''@;'; put 'put ''NjU1LDI5NzMwLDM1MzUxLDM3OTQ0LDI4NjA5LDM1NTgyLDMzNTkyLDIwOTY3LDM0NTUyLDIxNDgyLDIxNDgxLDIwMjk0LDM2OTQ4LDM2Nzg0LDIyODkwLDMzMDczLDI0MDYxLDMxNDY2LDM2Nzk5LDI2ODQyLDM1ODk1LDI5NDMyLDQwMDA4LDI3MTk3LDM1NTA0LDIwMDI1LDIxMzM2LDIyMDIy''@;'; put 'put ''LDIyMzc0LDI1Mjg1LDI1NTA2LDI2MDg2LDI3NDcwLDI4MTI5LDI4MjUxLDI4ODQ1LDMwNzAxLDMxNDcxLDMxNjU4LDMyMTg3LDMyODI5LDMyOTY2LDM0NTA3LDM1NDc3LDM3NzIzLDIyMjQzLDIyNzI3LDI0MzgyLDI2MDI5LDI2MjYyLDI3MjY0LDI3NTczLDMwMDA3LDM1NTI3LDIwNTE2LDMw''@;'; put 'put ''NjkzLDIyMzIwLDI0MzQ3LDI0Njc3LDI2MjM0LDI3NzQ0LDMwMTk2LDMxMjU4LDMyNjIyLDMzMjY4LDM0NTg0LDM2OTMzLDM5MzQ3LDMxNjg5LDMwMDQ0LDMxNDgxLDMxNTY5LDMzOTg4LDM2ODgwLDMxMjA5LDMxMzc4LDMzNTkwLDIzMjY1LDMwNTI4LDIwMDEzLDIwMjEwLDIzNDQ5LDI0NTQ0''@;'; put 'put ''LDI1Mjc3LDI2MTcyLDI2NjA5LDI3ODgwLDM0NDExLDM0OTM1LDM1Mzg3LDM3MTk4LDM3NjE5LDM5Mzc2LDI3MTU5LDI4NzEwLDI5NDgyLDMzNTExLDMzODc5LDM2MDE1LDE5OTY5LDIwODA2LDIwOTM5LDIxODk5LDIzNTQxLDI0MDg2LDI0MTE1LDI0MTkzLDI0MzQwLDI0MzczLDI0NDI3LDI0''@;'; put 'put ''NTAwLDI1MDc0LDI1MzYxLDI2Mjc0LDI2Mzk3LDI4NTI2LDI5MjY2LDMwMDEwLDMwNTIyLDMyODg0LDMzMDgxLDMzMTQ0LDM0Njc4LDM1NTE5LDM1NTQ4LDM2MjI5LDM2MzM5LDM3NTMwLDM4MjYzLDM4OTE0LDQwMTY1LDIxMTg5LDI1NDMxLDMwNDUyLDI2Mzg5LDI3Nzg0LDI5NjQ1LDM2MDM1''@;'; put 'put ''LDM3ODA2LDM4NTE1LDI3OTQxLDIyNjg0LDI2ODk0LDI3MDg0LDM2ODYxLDM3Nzg2LDMwMTcxLDM2ODkwLDIyNjE4LDI2NjI2LDI1NTI0LDI3MTMxLDIwMjkxLDI4NDYwLDI2NTg0LDM2Nzk1LDM0MDg2LDMyMTgwLDM3NzE2LDI2OTQzLDI4NTI4LDIyMzc4LDIyNzc1LDIzMzQwLDMyMDQ0LDI5''@;'; put 'put ''MjI2LDIxNTE0LDM3MzQ3LDQwMzcyLDIwMTQxLDIwMzAyLDIwNTcyLDIwNTk3LDIxMDU5LDM1OTk4LDIxNTc2LDIyNTY0LDIzNDUwLDI0MDkzLDI0MjEzLDI0MjM3LDI0MzExLDI0MzUxLDI0NzE2LDI1MjY5LDI1NDAyLDI1NTUyLDI2Nzk5LDI3NzEyLDMwODU1LDMxMTE4LDMxMjQzLDMyMjI0''@;'; put 'put ''LDMzMzUxLDM1MzMwLDM1NTU4LDM2NDIwLDM2ODgzLDM3MDQ4LDM3MTY1LDM3MzM2LDQwNzE4LDI3ODc3LDI1Njg4LDI1ODI2LDI1OTczLDI4NDA0LDMwMzQwLDMxNTE1LDM2OTY5LDM3ODQxLDI4MzQ2LDIxNzQ2LDI0NTA1LDI1NzY0LDM2Njg1LDM2ODQ1LDM3NDQ0LDIwODU2LDIyNjM1LDIy''@;'; put 'put ''ODI1LDIzNjM3LDI0MjE1LDI4MTU1LDMyMzk5LDI5OTgwLDM2MDI4LDM2NTc4LDM5MDAzLDI4ODU3LDIwMjUzLDI3NTgzLDI4NTkzLDNlNCwzODY1MSwyMDgxNCwyMTUyMCwyMjU4MSwyMjYxNSwyMjk1NiwyMzY0OCwyNDQ2NiwyNjAwNywyNjQ2MCwyODE5MywzMDMzMSwzMzc1OSwzNjA3Nywz''@;'; put 'put ''Njg4NCwzNzExNywzNzcwOSwzMDc1NywzMDc3OCwyMTE2MiwyNDIzMCwyMjMwMywyMjkwMCwyNDU5NCwyMDQ5OCwyMDgyNiwyMDkwOCwyMDk0MSwyMDk5MiwyMTc3NiwyMjYxMiwyMjYxNiwyMjg3MSwyMzQ0NSwyMzc5OCwyMzk0NywyNDc2NCwyNTIzNywyNTY0NSwyNjQ4MSwyNjY5MSwyNjgx''@;'; put 'put ''MiwyNjg0NywzMDQyMywyODEyMCwyODI3MSwyODA1OSwyODc4MywyOTEyOCwyNDQwMywzMDE2OCwzMTA5NSwzMTU2MSwzMTU3MiwzMTU3MCwzMTk1OCwzMjExMywyMTA0MCwzMzg5MSwzNDE1MywzNDI3NiwzNTM0MiwzNTU4OCwzNTkxMCwzNjM2NywzNjg2NywzNjg3OSwzNzkxMywzODUxOCwz''@;'; put 'put ''ODk1NywzOTQ3MiwzODM2MCwyMDY4NSwyMTIwNSwyMTUxNiwyMjUzMCwyMzU2NiwyNDk5OSwyNTc1OCwyNzkzNCwzMDY0MywzMTQ2MSwzMzAxMiwzMzc5NiwzNjk0NywzNzUwOSwyMzc3Niw0MDE5OSwyMTMxMSwyNDQ3MSwyNDQ5OSwyODA2MCwyOTMwNSwzMDU2MywzMTE2NywzMTcxNiwyNzYw''@;'; put 'put ''MiwyOTQyMCwzNTUwMSwyNjYyNywyNzIzMywyMDk4NCwzMTM2MSwyNjkzMiwyMzYyNiw0MDE4MiwzMzUxNSwyMzQ5MywzNzE5MywyODcwMiwyMjEzNiwyMzY2MywyNDc3NSwyNTk1OCwyNzc4OCwzNTkzMCwzNjkyOSwzODkzMSwyMTU4NSwyNjMxMSwzNzM4OSwyMjg1NiwzNzAyNywyMDg2OSwy''@;'; put 'put ''MDA0NSwyMDk3MCwzNDIwMSwzNTU5OCwyODc2MCwyNTQ2NiwzNzcwNywyNjk3OCwzOTM0OCwzMjI2MCwzMDA3MSwyMTMzNSwyNjk3NiwzNjU3NSwzODYyNywyNzc0MSwyMDEwOCwyMzYxMiwyNDMzNiwzNjg0MSwyMTI1MCwzNjA0OSwzMjkwNSwzNDQyNSwyNDMxOSwyNjA4NSwyMDA4MywyMDgz''@;'; put 'put ''NywyMjkxNCwyMzYxNSwzODg5NCwyMDIxOSwyMjkyMiwyNDUyNSwzNTQ2OSwyODY0MSwzMTE1MiwzMTA3NCwyMzUyNywzMzkwNSwyOTQ4MywyOTEwNSwyNDE4MCwyNDU2NSwyNTQ2NywyNTc1NCwyOTEyMywzMTg5NiwyMDAzNSwyNDMxNiwyMDA0MywyMjQ5MiwyMjE3OCwyNDc0NSwyODYxMSwz''@;'; put 'put ''MjAxMywzMzAyMSwzMzA3NSwzMzIxNSwzNjc4NiwzNTIyMywzNDQ2OCwyNDA1MiwyNTIyNiwyNTc3MywzNTIwNywyNjQ4NywyNzg3NCwyNzk2NiwyOTc1MCwzMDc3MiwyMzExMCwzMjYyOSwzMzQ1MywzOTM0MCwyMDQ2NywyNDI1OSwyNTMwOSwyNTQ5MCwyNTk0MywyNjQ3OSwzMDQwMywyOTI2''@;'; put 'put ''MCwzMjk3MiwzMjk1NCwzNjY0OSwzNzE5NywyMDQ5MywyMjUyMSwyMzE4NiwyNjc1NywyNjk5NSwyOTAyOCwyOTQzNywzNjAyMywyMjc3MCwzNjA2NCwzODUwNiwzNjg4OSwzNDY4NywzMTIwNCwzMDY5NSwzMzgzMywyMDI3MSwyMTA5MywyMTMzOCwyNTI5MywyNjU3NSwyNzg1MCwzMDMzMywz''@;'; put 'put ''MTYzNiwzMTg5MywzMzMzNCwzNDE4MCwzNjg0MywyNjMzMywyODQ0OCwyOTE5MCwzMjI4MywzMzcwNywzOTM2MSw0MDYxNCwyMDk4OSwzMTY2NSwzMDgzNCwzMTY3MiwzMjkwMywzMTU2MCwyNzM2OCwyNDE2MSwzMjkwOCwzMDAzMywzMDA0OCwyMDg0MywzNzQ3NCwyODMwMCwzMDMzMCwzNzI3''@;'; put 'put ''MSwzOTY1OCwyMDI0MCwzMjYyNCwyNTI0NCwzMTU2NywzODMwOSw0MDE2OSwyMjEzOCwyMjYxNywzNDUzMiwzODU4OCwyMDI3NiwyMTAyOCwyMTMyMiwyMTQ1MywyMTQ2NywyNDA3MCwyNTY0NCwyNjAwMSwyNjQ5NSwyNzcxMCwyNzcyNiwyOTI1NiwyOTM1OSwyOTY3NywzMDAzNiwzMjMyMSwz''@;'; put 'put ''MzMyNCwzNDI4MSwzNjAwOSwzMTY4NCwzNzMxOCwyOTAzMywzODkzMCwzOTE1MSwyNTQwNSwyNjIxNywzMDA1OCwzMDQzNiwzMDkyOCwzNDExNSwzNDU0MiwyMTI5MCwyMTMyOSwyMTU0MiwyMjkxNSwyNDE5OSwyNDQ0NCwyNDc1NCwyNTE2MSwyNTIwOSwyNTI1OSwyNmUzLDI3NjA0LDI3ODUy''@;'; put 'put ''LDMwMTMwLDMwMzgyLDMwODY1LDMxMTkyLDMyMjAzLDMyNjMxLDMyOTMzLDM0OTg3LDM1NTEzLDM2MDI3LDM2OTkxLDM4NzUwLDM5MTMxLDI3MTQ3LDMxODAwLDIwNjMzLDIzNjE0LDI0NDk0LDI2NTAzLDI3NjA4LDI5NzQ5LDMwNDczLDMyNjU0LDQwNzYzLDI2NTcwLDMxMjU1LDIxMzA1LDMw''@;'; put 'put ''MDkxLDM5NjYxLDI0NDIyLDMzMTgxLDMzNzc3LDMyOTIwLDI0MzgwLDI0NTE3LDMwMDUwLDMxNTU4LDM2OTI0LDI2NzI3LDIzMDE5LDIzMTk1LDMyMDE2LDMwMzM0LDM1NjI4LDIwNDY5LDI0NDI2LDI3MTYxLDI3NzAzLDI4NDE4LDI5OTIyLDMxMDgwLDM0OTIwLDM1NDEzLDM1OTYxLDI0Mjg3''@;'; put 'put ''LDI1NTUxLDMwMTQ5LDMxMTg2LDMzNDk1LDM3NjcyLDM3NjE4LDMzOTQ4LDM0NTQxLDM5OTgxLDIxNjk3LDI0NDI4LDI1OTk2LDI3OTk2LDI4NjkzLDM2MDA3LDM2MDUxLDM4OTcxLDI1OTM1LDI5OTQyLDE5OTgxLDIwMTg0LDIyNDk2LDIyODI3LDIzMTQyLDIzNTAwLDIwOTA0LDI0MDY3LDI0''@;'; put 'put ''MjIwLDI0NTk4LDI1MjA2LDI1OTc1LDI2MDIzLDI2MjIyLDI4MDE0LDI5MjM4LDMxNTI2LDMzMTA0LDMzMTc4LDMzNDMzLDM1Njc2LDM2ZTMsMzYwNzAsMzYyMTIsMzg0MjgsMzg0NjgsMjAzOTgsMjU3NzEsMjc0OTQsMzMzMTAsMzM4ODksMzQxNTQsMzcwOTYsMjM1NTMsMjY5NjMsMzkwODAs''@;'; put 'put ''MzM5MTQsMzQxMzUsMjAyMzksMjExMDMsMjQ0ODksMjQxMzMsMjYzODEsMzExMTksMzMxNDUsMzUwNzksMzUyMDYsMjgxNDksMjQzNDMsMjUxNzMsMjc4MzIsMjAxNzUsMjkyODksMzk4MjYsMjA5OTgsMjE1NjMsMjIxMzIsMjI3MDcsMjQ5OTYsMjUxOTgsMjg5NTQsMjI4OTQsMzE4ODEsMzE5''@;'; put 'put ''NjYsMzIwMjcsMzg2NDAsMjU5OTEsMzI4NjIsMTk5OTMsMjAzNDEsMjA4NTMsMjI1OTIsMjQxNjMsMjQxNzksMjQzMzAsMjY1NjQsMjAwMDYsMzQxMDksMzgyODEsMzg0OTEsMzE4NTksMzg5MTMsMjA3MzEsMjI3MjEsMzAyOTQsMzA4ODcsMjEwMjksMzA2MjksMzQwNjUsMzE2MjIsMjA1NTks''@;'; put 'put ''MjI3OTMsMjkyNTUsMzE2ODcsMzIyMzIsMzY3OTQsMzY4MjAsMzY5NDEsMjA0MTUsMjExOTMsMjMwODEsMjQzMjEsMzg4MjksMjA0NDUsMzMzMDMsMzc2MTAsMjIyNzUsMjU0MjksMjc0OTcsMjk5OTUsMzUwMzYsMzY2MjgsMzEyOTgsMjEyMTUsMjI2NzUsMjQ5MTcsMjUwOTgsMjYyODYsMjc1''@;'; put 'put ''OTcsMzE4MDcsMzM3NjksMjA1MTUsMjA0NzIsMjEyNTMsMjE1NzQsMjI1NzcsMjI4NTcsMjM0NTMsMjM3OTIsMjM3OTEsMjM4NDksMjQyMTQsMjUyNjUsMjU0NDcsMjU5MTgsMjYwNDEsMjYzNzksMjc4NjEsMjc4NzMsMjg5MjEsMzA3NzAsMzIyOTksMzI5OTAsMzM0NTksMzM4MDQsMzQwMjgs''@;'; put 'put ''MzQ1NjIsMzUwOTAsMzUzNzAsMzU5MTQsMzcwMzAsMzc1ODYsMzkxNjUsNDAxNzksNDAzMDAsMjAwNDcsMjAxMjksMjA2MjEsMjEwNzgsMjIzNDYsMjI5NTIsMjQxMjUsMjQ1MzYsMjQ1MzcsMjUxNTEsMjYyOTIsMjYzOTUsMjY1NzYsMjY4MzQsMjA4ODIsMzIwMzMsMzI5MzgsMzMxOTIsMzU1''@;'; put 'put ''ODQsMzU5ODAsMzYwMzEsMzc1MDIsMzg0NTAsMjE1MzYsMzg5NTYsMjEyNzEsMjA2OTMsMjEzNDAsMjI2OTYsMjU3NzgsMjY0MjAsMjkyODcsMzA1NjYsMzEzMDIsMzczNTAsMjExODcsMjc4MDksMjc1MjYsMjI1MjgsMjQxNDAsMjI4NjgsMjY0MTIsMzI3NjMsMjA5NjEsMzA0MDYsMjU3MDUs''@;'; put 'put ''MzA5NTIsMzk3NjQsNDA2MzUsMjI0NzUsMjI5NjksMjYxNTEsMjY1MjIsMjc1OTgsMjE3MzcsMjcwOTcsMjQxNDksMzMxODAsMjY1MTcsMzk4NTAsMjY2MjIsNDAwMTgsMjY3MTcsMjAxMzQsMjA0NTEsMjE0NDgsMjUyNzMsMjY0MTEsMjc4MTksMzY4MDQsMjAzOTcsMzIzNjUsNDA2MzksMTk5''@;'; put 'put ''NzUsMjQ5MzAsMjgyODgsMjg0NTksMzQwNjcsMjE2MTksMjY0MTAsMzk3NDksMjQwNTEsMzE2MzcsMjM3MjQsMjM0OTQsMzQ1ODgsMjgyMzQsMzQwMDEsMzEyNTIsMzMwMzIsMjI5MzcsMzE4ODUsMjc2NjUsMzA0OTYsMjEyMDksMjI4MTgsMjg5NjEsMjkyNzksMzA2ODMsMzg2OTUsNDAyODks''@;'; put 'put ''MjY4OTEsMjMxNjcsMjMwNjQsMjA5MDEsMjE1MTcsMjE2MjksMjYxMjYsMzA0MzEsMzY4NTUsMzc1MjgsNDAxODAsMjMwMTgsMjkyNzcsMjgzNTcsMjA4MTMsMjY4MjUsMzIxOTEsMzIyMzYsMzg3NTQsNDA2MzQsMjU3MjAsMjcxNjksMzM1MzgsMjI5MTYsMjMzOTEsMjc2MTEsMjk0NjcsMzA0''@;'; put 'put ''NTAsMzIxNzgsMzI3OTEsMzM5NDUsMjA3ODYsMjY0MDgsNDA2NjUsMzA0NDYsMjY0NjYsMjEyNDcsMzkxNzMsMjM1ODgsMjUxNDcsMzE4NzAsMzYwMTYsMjE4MzksMjQ3NTgsMzIwMTEsMzgyNzIsMjEyNDksMjAwNjMsMjA5MTgsMjI4MTIsMjkyNDIsMzI4MjIsMzczMjYsMjQzNTcsMzA2OTAs''@;'; put 'put ''MjEzODAsMjQ0NDEsMzIwMDQsMzQyMjAsMzUzNzksMzY0OTMsMzg3NDIsMjY2MTEsMzQyMjIsMzc5NzEsMjQ4NDEsMjQ4NDAsMjc4MzMsMzAyOTAsMzU1NjUsMzY2NjQsMjE4MDcsMjAzMDUsMjA3NzgsMjExOTEsMjE0NTEsMjM0NjEsMjQxODksMjQ3MzYsMjQ5NjIsMjU1NTgsMjYzNzcsMjY1''@;'; put 'put ''ODYsMjgyNjMsMjgwNDQsMjk0OTQsMjk0OTUsMzAwMDEsMzEwNTYsMzUwMjksMzU0ODAsMzY5MzgsMzcwMDksMzcxMDksMzg1OTYsMzQ3MDEsMjI4MDUsMjAxMDQsMjAzMTMsMTk5ODIsMzU0NjUsMzY2NzEsMzg5MjgsMjA2NTMsMjQxODgsMjI5MzQsMjM0ODEsMjQyNDgsMjU1NjIsMjU1OTQs''@;'; put 'put ''MjU3OTMsMjYzMzIsMjY5NTQsMjcwOTYsMjc5MTUsMjgzNDIsMjkwNzYsMjk5OTIsMzE0MDcsMzI2NTAsMzI3NjgsMzM4NjUsMzM5OTMsMzUyMDEsMzU2MTcsMzYzNjIsMzY5NjUsMzg1MjUsMzkxNzgsMjQ5NTgsMjUyMzMsMjc0NDIsMjc3NzksMjgwMjAsMzI3MTYsMzI3NjQsMjgwOTYsMzI2''@;'; put 'put ''NDUsMzQ3NDYsMzUwNjQsMjY0NjksMzM3MTMsMzg5NzIsMzg2NDcsMjc5MzEsMzIwOTcsMzM4NTMsMzcyMjYsMjAwODEsMjEzNjUsMjM4ODgsMjczOTYsMjg2NTEsMzQyNTMsMzQzNDksMzUyMzksMjEwMzMsMjE1MTksMjM2NTMsMjY0NDYsMjY3OTIsMjk3MDIsMjk4MjcsMzAxNzgsMzUwMjMs''@;'; put 'put ''MzUwNDEsMzczMjQsMzg2MjYsMzg1MjAsMjQ0NTksMjk1NzUsMzE0MzUsMzM4NzAsMjU1MDQsMzAwNTMsMjExMjksMjc5NjksMjgzMTYsMjk3MDUsMzAwNDEsMzA4MjcsMzE4OTAsMzg1MzQsMzE0NTIsNDA4NDUsMjA0MDYsMjQ5NDIsMjYwNTMsMzQzOTYsMjAxMDIsMjAxNDIsMjA2OTgsMjAw''@;'; put 'put ''MDEsMjA5NDAsMjM1MzQsMjYwMDksMjY3NTMsMjgwOTIsMjk0NzEsMzAyNzQsMzA2MzcsMzEyNjAsMzE5NzUsMzMzOTEsMzU1MzgsMzY5ODgsMzczMjcsMzg1MTcsMzg5MzYsMjExNDcsMzIyMDksMjA1MjMsMjE0MDAsMjY1MTksMjgxMDcsMjkxMzYsMjk3NDcsMzMyNTYsMzY2NTAsMzg1NjMs''@;'; put 'put ''NDAwMjMsNDA2MDcsMjk3OTIsMjI1OTMsMjgwNTcsMzIwNDcsMzkwMDYsMjAxOTYsMjAyNzgsMjAzNjMsMjA5MTksMjExNjksMjM5OTQsMjQ2MDQsMjk2MTgsMzEwMzYsMzM0OTEsMzc0MjgsMzg1ODMsMzg2NDYsMzg2NjYsNDA1OTksNDA4MDIsMjYyNzgsMjc1MDgsMjEwMTUsMjExNTUsMjg4''@;'; put 'put ''NzIsMzUwMTAsMjQyNjUsMjQ2NTEsMjQ5NzYsMjg0NTEsMjkwMDEsMzE4MDYsMzIyNDQsMzI4NzksMzQwMzAsMzY4OTksMzc2NzYsMjE1NzAsMzk3OTEsMjczNDcsMjg4MDksMzYwMzQsMzYzMzUsMzg3MDYsMjExNzIsMjMxMDUsMjQyNjYsMjQzMjQsMjYzOTEsMjcwMDQsMjcwMjgsMjgwMTAs''@;'; put 'put ''Mjg0MzEsMjkyODIsMjk0MzYsMzE3MjUsMzI3NjksMzI4OTQsMzQ2MzUsMzcwNzAsMjA4NDUsNDA1OTUsMzExMDgsMzI5MDcsMzc2ODIsMzU1NDIsMjA1MjUsMjE2NDQsMzU0NDEsMjc0OTgsMzYwMzYsMzMwMzEsMjQ3ODUsMjY1MjgsNDA0MzQsMjAxMjEsMjAxMjAsMzk5NTIsMzU0MzUsMzQy''@;'; put 'put ''NDEsMzQxNTIsMjY4ODAsMjgyODYsMzA4NzEsMzMxMDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNDMzMiwxOTk4NCwxOTk4OSwyMDAxMCwyMDAxNywyMDAyMiwyMDAyOCwyMDAzMSwyMDAzNCwyMDA1NCwyMDA1NiwyMDA5OCwyMDEwMSwzNTk0''@;'; put 'put ''NywyMDEwNiwzMzI5OCwyNDMzMywyMDExMCwyMDEyNiwyMDEyNywyMDEyOCwyMDEzMCwyMDE0NCwyMDE0NywyMDE1MCwyMDE3NCwyMDE3MywyMDE2NCwyMDE2NiwyMDE2MiwyMDE4MywyMDE5MCwyMDIwNSwyMDE5MSwyMDIxNSwyMDIzMywyMDMxNCwyMDI3MiwyMDMxNSwyMDMxNywyMDMxMSwy''@;'; put 'put ''MDI5NSwyMDM0MiwyMDM2MCwyMDM2NywyMDM3NiwyMDM0NywyMDMyOSwyMDMzNiwyMDM2OSwyMDMzNSwyMDM1OCwyMDM3NCwyMDc2MCwyMDQzNiwyMDQ0NywyMDQzMCwyMDQ0MCwyMDQ0MywyMDQzMywyMDQ0MiwyMDQzMiwyMDQ1MiwyMDQ1MywyMDUwNiwyMDUyMCwyMDUwMCwyMDUyMiwyMDUx''@;'; put 'put ''NywyMDQ4NSwyMDI1MiwyMDQ3MCwyMDUxMywyMDUyMSwyMDUyNCwyMDQ3OCwyMDQ2MywyMDQ5NywyMDQ4NiwyMDU0NywyMDU1MSwyNjM3MSwyMDU2NSwyMDU2MCwyMDU1MiwyMDU3MCwyMDU2NiwyMDU4OCwyMDYwMCwyMDYwOCwyMDYzNCwyMDYxMywyMDY2MCwyMDY1OCwyMDY4MSwyMDY4Miwy''@;'; put 'put ''MDY1OSwyMDY3NCwyMDY5NCwyMDcwMiwyMDcwOSwyMDcxNywyMDcwNywyMDcxOCwyMDcyOSwyMDcyNSwyMDc0NSwyMDczNywyMDczOCwyMDc1OCwyMDc1NywyMDc1NiwyMDc2MiwyMDc2OSwyMDc5NCwyMDc5MSwyMDc5NiwyMDc5NSwyMDc5OSwyMDgwMCwyMDgxOCwyMDgxMiwyMDgyMCwyMDgz''@;'; put 'put ''NCwzMTQ4MCwyMDg0MSwyMDg0MiwyMDg0NiwyMDg2NCwyMDg2NiwyMjIzMiwyMDg3NiwyMDg3MywyMDg3OSwyMDg4MSwyMDg4MywyMDg4NSwyMDg4NiwyMDkwMCwyMDkwMiwyMDg5OCwyMDkwNSwyMDkwNiwyMDkwNywyMDkxNSwyMDkxMywyMDkxNCwyMDkxMiwyMDkxNywyMDkyNSwyMDkzMywy''@;'; put 'put ''MDkzNywyMDk1NSwyMDk2MCwzNDM4OSwyMDk2OSwyMDk3MywyMDk3NiwyMDk4MSwyMDk5MCwyMDk5NiwyMTAwMywyMTAxMiwyMTAwNiwyMTAzMSwyMTAzNCwyMTAzOCwyMTA0MywyMTA0OSwyMTA3MSwyMTA2MCwyMTA2NywyMTA2OCwyMTA4NiwyMTA3NiwyMTA5OCwyMTEwOCwyMTA5NywyMTEw''@;'; put 'put ''NywyMTExOSwyMTExNywyMTEzMywyMTE0MCwyMTEzOCwyMTEwNSwyMTEyOCwyMTEzNywzNjc3NiwzNjc3NSwyMTE2NCwyMTE2NSwyMTE4MCwyMTE3MywyMTE4NSwyMTE5NywyMTIwNywyMTIxNCwyMTIxOSwyMTIyMiwzOTE0OSwyMTIxNiwyMTIzNSwyMTIzNywyMTI0MCwyMTI0MSwyMTI1NCwy''@;'; put 'put ''MTI1NiwzMDAwOCwyMTI2MSwyMTI2NCwyMTI2MywyMTI2OSwyMTI3NCwyMTI4MywyMTI5NSwyMTI5NywyMTI5OSwyMTMwNCwyMTMxMiwyMTMxOCwyMTMxNywxOTk5MSwyMTMyMSwyMTMyNSwyMDk1MCwyMTM0MiwyMTM1MywyMTM1OCwyMjgwOCwyMTM3MSwyMTM2NywyMTM3OCwyMTM5OCwyMTQw''@;'; put 'put ''OCwyMTQxNCwyMTQxMywyMTQyMiwyMTQyNCwyMTQzMCwyMTQ0MywzMTc2MiwzODYxNywyMTQ3MSwyNjM2NCwyOTE2NiwyMTQ4NiwyMTQ4MCwyMTQ4NSwyMTQ5OCwyMTUwNSwyMTU2NSwyMTU2OCwyMTU0OCwyMTU0OSwyMTU2NCwyMTU1MCwyMTU1OCwyMTU0NSwyMTUzMywyMTU4MiwyMTY0Nywy''@;'; put 'put ''MTYyMSwyMTY0NiwyMTU5OSwyMTYxNywyMTYyMywyMTYxNiwyMTY1MCwyMTYyNywyMTYzMiwyMTYyMiwyMTYzNiwyMTY0OCwyMTYzOCwyMTcwMywyMTY2NiwyMTY4OCwyMTY2OSwyMTY3NiwyMTcwMCwyMTcwNCwyMTY3MiwyMTY3NSwyMTY5OCwyMTY2OCwyMTY5NCwyMTY5MiwyMTcyMCwyMTcz''@;'; put 'put ''MywyMTczNCwyMTc3NSwyMTc4MCwyMTc1NywyMTc0MiwyMTc0MSwyMTc1NCwyMTczMCwyMTgxNywyMTgyNCwyMTg1OSwyMTgzNiwyMTgwNiwyMTg1MiwyMTgyOSwyMTg0NiwyMTg0NywyMTgxNiwyMTgxMSwyMTg1MywyMTkxMywyMTg4OCwyMTY3OSwyMTg5OCwyMTkxOSwyMTg4MywyMTg4Niwy''@;'; put 'put ''MTkxMiwyMTkxOCwyMTkzNCwyMTg4NCwyMTg5MSwyMTkyOSwyMTg5NSwyMTkyOCwyMTk3OCwyMTk1NywyMTk4MywyMTk1NiwyMTk4MCwyMTk4OCwyMTk3MiwyMjAzNiwyMjAwNywyMjAzOCwyMjAxNCwyMjAxMywyMjA0MywyMjAwOSwyMjA5NCwyMjA5NiwyOTE1MSwyMjA2OCwyMjA3MCwyMjA2''@;'; put 'put ''NiwyMjA3MiwyMjEyMywyMjExNiwyMjA2MywyMjEyNCwyMjEyMiwyMjE1MCwyMjE0NCwyMjE1NCwyMjE3NiwyMjE2NCwyMjE1OSwyMjE4MSwyMjE5MCwyMjE5OCwyMjE5NiwyMjIxMCwyMjIwNCwyMjIwOSwyMjIxMSwyMjIwOCwyMjIxNiwyMjIyMiwyMjIyNSwyMjIyNywyMjIzMSwyMjI1NCwy''@;'; put 'put ''MjI2NSwyMjI3MiwyMjI3MSwyMjI3NiwyMjI4MSwyMjI4MCwyMjI4MywyMjI4NSwyMjI5MSwyMjI5NiwyMjI5NCwyMTk1OSwyMjMwMCwyMjMxMCwyMjMyNywyMjMyOCwyMjM1MCwyMjMzMSwyMjMzNiwyMjM1MSwyMjM3NywyMjQ2NCwyMjQwOCwyMjM2OSwyMjM5OSwyMjQwOSwyMjQxOSwyMjQz''@;'; put 'put ''MiwyMjQ1MSwyMjQzNiwyMjQ0MiwyMjQ0OCwyMjQ2NywyMjQ3MCwyMjQ4NCwyMjQ4MiwyMjQ4MywyMjUzOCwyMjQ4NiwyMjQ5OSwyMjUzOSwyMjU1MywyMjU1NywyMjY0MiwyMjU2MSwyMjYyNiwyMjYwMywyMjY0MCwyNzU4NCwyMjYxMCwyMjU4OSwyMjY0OSwyMjY2MSwyMjcxMywyMjY4Nywy''@;'; put 'put ''MjY5OSwyMjcxNCwyMjc1MCwyMjcxNSwyMjcxMiwyMjcwMiwyMjcyNSwyMjczOSwyMjczNywyMjc0MywyMjc0NSwyMjc0NCwyMjc1NywyMjc0OCwyMjc1NiwyMjc1MSwyMjc2NywyMjc3OCwyMjc3NywyMjc3OSwyMjc4MCwyMjc4MSwyMjc4NiwyMjc5NCwyMjgwMCwyMjgxMSwyNjc5MCwyMjgy''@;'; put 'put ''MSwyMjgyOCwyMjgyOSwyMjgzNCwyMjg0MCwyMjg0NiwzMTQ0MiwyMjg2OSwyMjg2NCwyMjg2MiwyMjg3NCwyMjg3MiwyMjg4MiwyMjg4MCwyMjg4NywyMjg5MiwyMjg4OSwyMjkwNCwyMjkxMywyMjk0MSwyMDMxOCwyMDM5NSwyMjk0NywyMjk2MiwyMjk4MiwyMzAxNiwyMzAwNCwyMjkyNSwy''@;'; put 'put ''MzAwMSwyMzAwMiwyMzA3NywyMzA3MSwyMzA1NywyMzA2OCwyMzA0OSwyMzA2NiwyMzEwNCwyMzE0OCwyMzExMywyMzA5MywyMzA5NCwyMzEzOCwyMzE0NiwyMzE5NCwyMzIyOCwyMzIzMCwyMzI0MywyMzIzNCwyMzIyOSwyMzI2NywyMzI1NSwyMzI3MCwyMzI3MywyMzI1NCwyMzI5MCwyMzI5''@;'; put 'put ''MSwyMzMwOCwyMzMwNywyMzMxOCwyMzM0NiwyMzI0OCwyMzMzOCwyMzM1MCwyMzM1OCwyMzM2MywyMzM2NSwyMzM2MCwyMzM3NywyMzM4MSwyMzM4NiwyMzM4NywyMzM5NywyMzQwMSwyMzQwOCwyMzQxMSwyMzQxMywyMzQxNiwyNTk5MiwyMzQxOCwyMzQyNCwyMzQyNywyMzQ2MiwyMzQ4MCwy''@;'; put 'put ''MzQ5MSwyMzQ5NSwyMzQ5NywyMzUwOCwyMzUwNCwyMzUyNCwyMzUyNiwyMzUyMiwyMzUxOCwyMzUyNSwyMzUzMSwyMzUzNiwyMzU0MiwyMzUzOSwyMzU1NywyMzU1OSwyMzU2MCwyMzU2NSwyMzU3MSwyMzU4NCwyMzU4NiwyMzU5MiwyMzYwOCwyMzYwOSwyMzYxNywyMzYyMiwyMzYzMCwyMzYz''@;'; put 'put ''NSwyMzYzMiwyMzYzMSwyMzQwOSwyMzY2MCwyMzY2MiwyMDA2NiwyMzY3MCwyMzY3MywyMzY5MiwyMzY5NywyMzcwMCwyMjkzOSwyMzcyMywyMzczOSwyMzczNCwyMzc0MCwyMzczNSwyMzc0OSwyMzc0MiwyMzc1MSwyMzc2OSwyMzc4NSwyMzgwNSwyMzgwMiwyMzc4OSwyMzk0OCwyMzc4Niwy''@;'; put 'put ''MzgxOSwyMzgyOSwyMzgzMSwyMzkwMCwyMzgzOSwyMzgzNSwyMzgyNSwyMzgyOCwyMzg0MiwyMzgzNCwyMzgzMywyMzgzMiwyMzg4NCwyMzg5MCwyMzg4NiwyMzg4MywyMzkxNiwyMzkyMywyMzkyNiwyMzk0MywyMzk0MCwyMzkzOCwyMzk3MCwyMzk2NSwyMzk4MCwyMzk4MiwyMzk5NywyMzk1''@;'; put 'put ''MiwyMzk5MSwyMzk5NiwyNDAwOSwyNDAxMywyNDAxOSwyNDAxOCwyNDAyMiwyNDAyNywyNDA0MywyNDA1MCwyNDA1MywyNDA3NSwyNDA5MCwyNDA4OSwyNDA4MSwyNDA5MSwyNDExOCwyNDExOSwyNDEzMiwyNDEzMSwyNDEyOCwyNDE0MiwyNDE1MSwyNDE0OCwyNDE1OSwyNDE2MiwyNDE2NCwy''@;'; put 'put ''NDEzNSwyNDE4MSwyNDE4MiwyNDE4Niw0MDYzNiwyNDE5MSwyNDIyNCwyNDI1NywyNDI1OCwyNDI2NCwyNDI3MiwyNDI3MSwyNDI3OCwyNDI5MSwyNDI4NSwyNDI4MiwyNDI4MywyNDI5MCwyNDI4OSwyNDI5NiwyNDI5NywyNDMwMCwyNDMwNSwyNDMwNywyNDMwNCwyNDMwOCwyNDMxMiwyNDMx''@;'; put 'put ''OCwyNDMyMywyNDMyOSwyNDQxMywyNDQxMiwyNDMzMSwyNDMzNywyNDM0MiwyNDM2MSwyNDM2NSwyNDM3NiwyNDM4NSwyNDM5MiwyNDM5NiwyNDM5OCwyNDM2NywyNDQwMSwyNDQwNiwyNDQwNywyNDQwOSwyNDQxNywyNDQyOSwyNDQzNSwyNDQzOSwyNDQ1MSwyNDQ1MCwyNDQ0NywyNDQ1OCwy''@;'; put 'put ''NDQ1NiwyNDQ2NSwyNDQ1NSwyNDQ3OCwyNDQ3MywyNDQ3MiwyNDQ4MCwyNDQ4OCwyNDQ5MywyNDUwOCwyNDUzNCwyNDU3MSwyNDU0OCwyNDU2OCwyNDU2MSwyNDU0MSwyNDc1NSwyNDU3NSwyNDYwOSwyNDY3MiwyNDYwMSwyNDU5MiwyNDYxNywyNDU5MCwyNDYyNSwyNDYwMywyNDU5NywyNDYx''@;'; put 'put ''OSwyNDYxNCwyNDU5MSwyNDYzNCwyNDY2NiwyNDY0MSwyNDY4MiwyNDY5NSwyNDY3MSwyNDY1MCwyNDY0NiwyNDY1MywyNDY3NSwyNDY0MywyNDY3NiwyNDY0MiwyNDY4NCwyNDY4MywyNDY2NSwyNDcwNSwyNDcxNywyNDgwNywyNDcwNywyNDczMCwyNDcwOCwyNDczMSwyNDcyNiwyNDcyNywy''@;'; put 'put ''NDcyMiwyNDc0MywyNDcxNSwyNDgwMSwyNDc2MCwyNDgwMCwyNDc4NywyNDc1NiwyNDU2MCwyNDc2NSwyNDc3NCwyNDc1NywyNDc5MiwyNDkwOSwyNDg1MywyNDgzOCwyNDgyMiwyNDgyMywyNDgzMiwyNDgyMCwyNDgyNiwyNDgzNSwyNDg2NSwyNDgyNywyNDgxNywyNDg0NSwyNDg0NiwyNDkw''@;'; put 'put ''MywyNDg5NCwyNDg3MiwyNDg3MSwyNDkwNiwyNDg5NSwyNDg5MiwyNDg3NiwyNDg4NCwyNDg5MywyNDg5OCwyNDkwMCwyNDk0NywyNDk1MSwyNDkyMCwyNDkyMSwyNDkyMiwyNDkzOSwyNDk0OCwyNDk0MywyNDkzMywyNDk0NSwyNDkyNywyNDkyNSwyNDkxNSwyNDk0OSwyNDk4NSwyNDk4Miwy''@;'; put 'put ''NDk2NywyNTAwNCwyNDk4MCwyNDk4NiwyNDk3MCwyNDk3NywyNTAwMywyNTAwNiwyNTAzNiwyNTAzNCwyNTAzMywyNTA3OSwyNTAzMiwyNTAyNywyNTAzMCwyNTAxOCwyNTAzNSwzMjYzMywyNTAzNywyNTA2MiwyNTA1OSwyNTA3OCwyNTA4MiwyNTA3NiwyNTA4NywyNTA4NSwyNTA4NCwyNTA4''@;'; put 'put ''NiwyNTA4OCwyNTA5NiwyNTA5NywyNTEwMSwyNTEwMCwyNTEwOCwyNTExNSwyNTExOCwyNTEyMSwyNTEzMCwyNTEzNCwyNTEzNiwyNTEzOCwyNTEzOSwyNTE1MywyNTE2NiwyNTE4MiwyNTE4NywyNTE3OSwyNTE4NCwyNTE5MiwyNTIxMiwyNTIxOCwyNTIyNSwyNTIxNCwyNTIzNCwyNTIzNSwy''@;'; put 'put ''NTIzOCwyNTMwMCwyNTIxOSwyNTIzNiwyNTMwMywyNTI5NywyNTI3NSwyNTI5NSwyNTM0MywyNTI4NiwyNTgxMiwyNTI4OCwyNTMwOCwyNTI5MiwyNTI5MCwyNTI4MiwyNTI4NywyNTI0MywyNTI4OSwyNTM1NiwyNTMyNiwyNTMyOSwyNTM4MywyNTM0NiwyNTM1MiwyNTMyNywyNTMzMywyNTQy''@;'; put 'put ''NCwyNTQwNiwyNTQyMSwyNTYyOCwyNTQyMywyNTQ5NCwyNTQ4NiwyNTQ3MiwyNTUxNSwyNTQ2MiwyNTUwNywyNTQ4NywyNTQ4MSwyNTUwMywyNTUyNSwyNTQ1MSwyNTQ0OSwyNTUzNCwyNTU3NywyNTUzNiwyNTU0MiwyNTU3MSwyNTU0NSwyNTU1NCwyNTU5MCwyNTU0MCwyNTYyMiwyNTY1Miwy''@;'; put 'put ''NTYwNiwyNTYxOSwyNTYzOCwyNTY1NCwyNTg4NSwyNTYyMywyNTY0MCwyNTYxNSwyNTcwMywyNTcxMSwyNTcxOCwyNTY3OCwyNTg5OCwyNTc0OSwyNTc0NywyNTc2NSwyNTc2OSwyNTczNiwyNTc4OCwyNTgxOCwyNTgxMCwyNTc5NywyNTc5OSwyNTc4NywyNTgxNiwyNTc5NCwyNTg0MSwyNTgz''@;'; put 'put ''MSwzMzI4OSwyNTgyNCwyNTgyNSwyNTI2MCwyNTgyNywyNTgzOSwyNTkwMCwyNTg0NiwyNTg0NCwyNTg0MiwyNTg1MCwyNTg1NiwyNTg1MywyNTg4MCwyNTg4NCwyNTg2MSwyNTg5MiwyNTg5MSwyNTg5OSwyNTkwOCwyNTkwOSwyNTkxMSwyNTkxMCwyNTkxMiwzMDAyNywyNTkyOCwyNTk0Miwy''@;'; put 'put ''NTk0MSwyNTkzMywyNTk0NCwyNTk1MCwyNTk0OSwyNTk3MCwyNTk3NiwyNTk4NiwyNTk4NywzNTcyMiwyNjAxMSwyNjAxNSwyNjAyNywyNjAzOSwyNjA1MSwyNjA1NCwyNjA0OSwyNjA1MiwyNjA2MCwyNjA2NiwyNjA3NSwyNjA3MywyNjA4MCwyNjA4MSwyNjA5NywyNjQ4MiwyNjEyMiwyNjEx''@;'; put 'put ''NSwyNjEwNywyNjQ4MywyNjE2NSwyNjE2NiwyNjE2NCwyNjE0MCwyNjE5MSwyNjE4MCwyNjE4NSwyNjE3NywyNjIwNiwyNjIwNSwyNjIxMiwyNjIxNSwyNjIxNiwyNjIwNywyNjIxMCwyNjIyNCwyNjI0MywyNjI0OCwyNjI1NCwyNjI0OSwyNjI0NCwyNjI2NCwyNjI2OSwyNjMwNSwyNjI5Nywy''@;'; put 'put ''NjMxMywyNjMwMiwyNjMwMCwyNjMwOCwyNjI5NiwyNjMyNiwyNjMzMCwyNjMzNiwyNjE3NSwyNjM0MiwyNjM0NSwyNjM1MiwyNjM1NywyNjM1OSwyNjM4MywyNjM5MCwyNjM5OCwyNjQwNiwyNjQwNywzODcxMiwyNjQxNCwyNjQzMSwyNjQyMiwyNjQzMywyNjQyNCwyNjQyMywyNjQzOCwyNjQ2''@;'; put 'put ''MiwyNjQ2NCwyNjQ1NywyNjQ2NywyNjQ2OCwyNjUwNSwyNjQ4MCwyNjUzNywyNjQ5MiwyNjQ3NCwyNjUwOCwyNjUwNywyNjUzNCwyNjUyOSwyNjUwMSwyNjU1MSwyNjYwNywyNjU0OCwyNjYwNCwyNjU0NywyNjYwMSwyNjU1MiwyNjU5NiwyNjU5MCwyNjU4OSwyNjU5NCwyNjYwNiwyNjU1Mywy''@;'; put 'put ''NjU3NCwyNjU2NiwyNjU5OSwyNzI5MiwyNjY1NCwyNjY5NCwyNjY2NSwyNjY4OCwyNjcwMSwyNjY3NCwyNjcwMiwyNjgwMywyNjY2NywyNjcxMywyNjcyMywyNjc0MywyNjc1MSwyNjc4MywyNjc2NywyNjc5NywyNjc3MiwyNjc4MSwyNjc3OSwyNjc1NSwyNzMxMCwyNjgwOSwyNjc0MCwyNjgw''@;'; put 'put ''NSwyNjc4NCwyNjgxMCwyNjg5NSwyNjc2NSwyNjc1MCwyNjg4MSwyNjgyNiwyNjg4OCwyNjg0MCwyNjkxNCwyNjkxOCwyNjg0OSwyNjg5MiwyNjgyOSwyNjgzNiwyNjg1NSwyNjgzNywyNjkzNCwyNjg5OCwyNjg4NCwyNjgzOSwyNjg1MSwyNjkxNywyNjg3MywyNjg0OCwyNjg2MywyNjkyMCwy''@;'; put 'put ''NjkyMiwyNjkwNiwyNjkxNSwyNjkxMywyNjgyMiwyNzAwMSwyNjk5OSwyNjk3MiwyN2UzLDI2OTg3LDI2OTY0LDI3MDA2LDI2OTkwLDI2OTM3LDI2OTk2LDI2OTQxLDI2OTY5LDI2OTI4LDI2OTc3LDI2OTc0LDI2OTczLDI3MDA5LDI2OTg2LDI3MDU4LDI3MDU0LDI3MDg4LDI3MDcxLDI3MDcz''@;'; put 'put ''LDI3MDkxLDI3MDcwLDI3MDg2LDIzNTI4LDI3MDgyLDI3MTAxLDI3MDY3LDI3MDc1LDI3MDQ3LDI3MTgyLDI3MDI1LDI3MDQwLDI3MDM2LDI3MDI5LDI3MDYwLDI3MTAyLDI3MTEyLDI3MTM4LDI3MTYzLDI3MTM1LDI3NDAyLDI3MTI5LDI3MTIyLDI3MTExLDI3MTQxLDI3MDU3LDI3MTY2LDI3''@;'; put 'put ''MTE3LDI3MTU2LDI3MTE1LDI3MTQ2LDI3MTU0LDI3MzI5LDI3MTcxLDI3MTU1LDI3MjA0LDI3MTQ4LDI3MjUwLDI3MTkwLDI3MjU2LDI3MjA3LDI3MjM0LDI3MjI1LDI3MjM4LDI3MjA4LDI3MTkyLDI3MTcwLDI3MjgwLDI3Mjc3LDI3Mjk2LDI3MjY4LDI3Mjk4LDI3Mjk5LDI3Mjg3LDM0MzI3''@;'; put 'put ''LDI3MzIzLDI3MzMxLDI3MzMwLDI3MzIwLDI3MzE1LDI3MzA4LDI3MzU4LDI3MzQ1LDI3MzU5LDI3MzA2LDI3MzU0LDI3MzcwLDI3Mzg3LDI3Mzk3LDM0MzI2LDI3Mzg2LDI3NDEwLDI3NDE0LDM5NzI5LDI3NDIzLDI3NDQ4LDI3NDQ3LDMwNDI4LDI3NDQ5LDM5MTUwLDI3NDYzLDI3NDU5LDI3''@;'; put 'put ''NDY1LDI3NDcyLDI3NDgxLDI3NDc2LDI3NDgzLDI3NDg3LDI3NDg5LDI3NTEyLDI3NTEzLDI3NTE5LDI3NTIwLDI3NTI0LDI3NTIzLDI3NTMzLDI3NTQ0LDI3NTQxLDI3NTUwLDI3NTU2LDI3NTYyLDI3NTYzLDI3NTY3LDI3NTcwLDI3NTY5LDI3NTcxLDI3NTc1LDI3NTgwLDI3NTkwLDI3NTk1''@;'; put 'put ''LDI3NjAzLDI3NjE1LDI3NjI4LDI3NjI3LDI3NjM1LDI3NjMxLDQwNjM4LDI3NjU2LDI3NjY3LDI3NjY4LDI3Njc1LDI3Njg0LDI3NjgzLDI3NzQyLDI3NzMzLDI3NzQ2LDI3NzU0LDI3Nzc4LDI3Nzg5LDI3ODAyLDI3Nzc3LDI3ODAzLDI3Nzc0LDI3NzUyLDI3NzYzLDI3Nzk0LDI3NzkyLDI3''@;'; put 'put ''ODQ0LDI3ODg5LDI3ODU5LDI3ODM3LDI3ODYzLDI3ODQ1LDI3ODY5LDI3ODIyLDI3ODI1LDI3ODM4LDI3ODM0LDI3ODY3LDI3ODg3LDI3ODY1LDI3ODgyLDI3OTM1LDM0ODkzLDI3OTU4LDI3OTQ3LDI3OTY1LDI3OTYwLDI3OTI5LDI3OTU3LDI3OTU1LDI3OTIyLDI3OTE2LDI4MDAzLDI4MDUx''@;'; put 'put ''LDI4MDA0LDI3OTk0LDI4MDI1LDI3OTkzLDI4MDQ2LDI4MDUzLDI4NjQ0LDI4MDM3LDI4MTUzLDI4MTgxLDI4MTcwLDI4MDg1LDI4MTAzLDI4MTM0LDI4MDg4LDI4MTAyLDI4MTQwLDI4MTI2LDI4MTA4LDI4MTM2LDI4MTE0LDI4MTAxLDI4MTU0LDI4MTIxLDI4MTMyLDI4MTE3LDI4MTM4LDI4''@;'; put 'put ''MTQyLDI4MjA1LDI4MjcwLDI4MjA2LDI4MTg1LDI4Mjc0LDI4MjU1LDI4MjIyLDI4MTk1LDI4MjY3LDI4MjAzLDI4Mjc4LDI4MjM3LDI4MTkxLDI4MjI3LDI4MjE4LDI4MjM4LDI4MTk2LDI4NDE1LDI4MTg5LDI4MjE2LDI4MjkwLDI4MzMwLDI4MzEyLDI4MzYxLDI4MzQzLDI4MzcxLDI4MzQ5''@;'; put 'put ''LDI4MzM1LDI4MzU2LDI4MzM4LDI4MzcyLDI4MzczLDI4MzAzLDI4MzI1LDI4MzU0LDI4MzE5LDI4NDgxLDI4NDMzLDI4NzQ4LDI4Mzk2LDI4NDA4LDI4NDE0LDI4NDc5LDI4NDAyLDI4NDY1LDI4Mzk5LDI4NDY2LDI4MzY0LDI4NDc4LDI4NDM1LDI4NDA3LDI4NTUwLDI4NTM4LDI4NTM2LDI4''@;'; put 'put ''NTQ1LDI4NTQ0LDI4NTI3LDI4NTA3LDI4NjU5LDI4NTI1LDI4NTQ2LDI4NTQwLDI4NTA0LDI4NTU4LDI4NTYxLDI4NjEwLDI4NTE4LDI4NTk1LDI4NTc5LDI4NTc3LDI4NTgwLDI4NjAxLDI4NjE0LDI4NTg2LDI4NjM5LDI4NjI5LDI4NjUyLDI4NjI4LDI4NjMyLDI4NjU3LDI4NjU0LDI4NjM1''@;'; put 'put ''LDI4NjgxLDI4NjgzLDI4NjY2LDI4Njg5LDI4NjczLDI4Njg3LDI4NjcwLDI4Njk5LDI4Njk4LDI4NTMyLDI4NzAxLDI4Njk2LDI4NzAzLDI4NzIwLDI4NzM0LDI4NzIyLDI4NzUzLDI4NzcxLDI4ODI1LDI4ODE4LDI4ODQ3LDI4OTEzLDI4ODQ0LDI4ODU2LDI4ODUxLDI4ODQ2LDI4ODk1LDI4''@;'; put 'put ''ODc1LDI4ODkzLDI4ODg5LDI4OTM3LDI4OTI1LDI4OTU2LDI4OTUzLDI5MDI5LDI5MDEzLDI5MDY0LDI5MDMwLDI5MDI2LDI5MDA0LDI5MDE0LDI5MDM2LDI5MDcxLDI5MTc5LDI5MDYwLDI5MDc3LDI5MDk2LDI5MTAwLDI5MTQzLDI5MTEzLDI5MTE4LDI5MTM4LDI5MTI5LDI5MTQwLDI5MTM0''@;'; put 'put ''LDI5MTUyLDI5MTY0LDI5MTU5LDI5MTczLDI5MTgwLDI5MTc3LDI5MTgzLDI5MTk3LDI5MjAwLDI5MjExLDI5MjI0LDI5MjI5LDI5MjI4LDI5MjMyLDI5MjM0LDI5MjQzLDI5MjQ0LDI5MjQ3LDI5MjQ4LDI5MjU0LDI5MjU5LDI5MjcyLDI5MzAwLDI5MzEwLDI5MzE0LDI5MzEzLDI5MzE5LDI5''@;'; put 'put ''MzMwLDI5MzM0LDI5MzQ2LDI5MzUxLDI5MzY5LDI5MzYyLDI5Mzc5LDI5MzgyLDI5MzgwLDI5MzkwLDI5Mzk0LDI5NDEwLDI5NDA4LDI5NDA5LDI5NDMzLDI5NDMxLDIwNDk1LDI5NDYzLDI5NDUwLDI5NDY4LDI5NDYyLDI5NDY5LDI5NDkyLDI5NDg3LDI5NDgxLDI5NDc3LDI5NTAyLDI5NTE4''@;'; put 'put ''LDI5NTE5LDQwNjY0LDI5NTI3LDI5NTQ2LDI5NTQ0LDI5NTUyLDI5NTYwLDI5NTU3LDI5NTYzLDI5NTYyLDI5NjQwLDI5NjE5LDI5NjQ2LDI5NjI3LDI5NjMyLDI5NjY5LDI5Njc4LDI5NjYyLDI5ODU4LDI5NzAxLDI5ODA3LDI5NzMzLDI5Njg4LDI5NzQ2LDI5NzU0LDI5NzgxLDI5NzU5LDI5''@;'; put 'put ''NzkxLDI5Nzg1LDI5NzYxLDI5Nzg4LDI5ODAxLDI5ODA4LDI5Nzk1LDI5ODAyLDI5ODE0LDI5ODIyLDI5ODM1LDI5ODU0LDI5ODYzLDI5ODk4LDI5OTAzLDI5OTA4LDI5NjgxLDI5OTIwLDI5OTIzLDI5OTI3LDI5OTI5LDI5OTM0LDI5OTM4LDI5OTM2LDI5OTM3LDI5OTQ0LDI5OTQzLDI5OTU2''@;'; put 'put ''LDI5OTU1LDI5OTU3LDI5OTY0LDI5OTY2LDI5OTY1LDI5OTczLDI5OTcxLDI5OTgyLDI5OTkwLDI5OTk2LDMwMDEyLDMwMDIwLDMwMDI5LDMwMDI2LDMwMDI1LDMwMDQzLDMwMDIyLDMwMDQyLDMwMDU3LDMwMDUyLDMwMDU1LDMwMDU5LDMwMDYxLDMwMDcyLDMwMDcwLDMwMDg2LDMwMDg3LDMw''@;'; put 'put ''MDY4LDMwMDkwLDMwMDg5LDMwMDgyLDMwMTAwLDMwMTA2LDMwMTA5LDMwMTE3LDMwMTE1LDMwMTQ2LDMwMTMxLDMwMTQ3LDMwMTMzLDMwMTQxLDMwMTM2LDMwMTQwLDMwMTI5LDMwMTU3LDMwMTU0LDMwMTYyLDMwMTY5LDMwMTc5LDMwMTc0LDMwMjA2LDMwMjA3LDMwMjA0LDMwMjA5LDMwMTky''@;'; put 'put ''LDMwMjAyLDMwMTk0LDMwMTk1LDMwMjE5LDMwMjIxLDMwMjE3LDMwMjM5LDMwMjQ3LDMwMjQwLDMwMjQxLDMwMjQyLDMwMjQ0LDMwMjYwLDMwMjU2LDMwMjY3LDMwMjc5LDMwMjgwLDMwMjc4LDMwMzAwLDMwMjk2LDMwMzA1LDMwMzA2LDMwMzEyLDMwMzEzLDMwMzE0LDMwMzExLDMwMzE2LDMw''@;'; put 'put ''MzIwLDMwMzIyLDMwMzI2LDMwMzI4LDMwMzMyLDMwMzM2LDMwMzM5LDMwMzQ0LDMwMzQ3LDMwMzUwLDMwMzU4LDMwMzU1LDMwMzYxLDMwMzYyLDMwMzg0LDMwMzg4LDMwMzkyLDMwMzkzLDMwMzk0LDMwNDAyLDMwNDEzLDMwNDIyLDMwNDE4LDMwNDMwLDMwNDMzLDMwNDM3LDMwNDM5LDMwNDQy''@;'; put 'put ''LDM0MzUxLDMwNDU5LDMwNDcyLDMwNDcxLDMwNDY4LDMwNTA1LDMwNTAwLDMwNDk0LDMwNTAxLDMwNTAyLDMwNDkxLDMwNTE5LDMwNTIwLDMwNTM1LDMwNTU0LDMwNTY4LDMwNTcxLDMwNTU1LDMwNTY1LDMwNTkxLDMwNTkwLDMwNTg1LDMwNjA2LDMwNjAzLDMwNjA5LDMwNjI0LDMwNjIyLDMw''@;'; put 'put ''NjQwLDMwNjQ2LDMwNjQ5LDMwNjU1LDMwNjUyLDMwNjUzLDMwNjUxLDMwNjYzLDMwNjY5LDMwNjc5LDMwNjgyLDMwNjg0LDMwNjkxLDMwNzAyLDMwNzE2LDMwNzMyLDMwNzM4LDMxMDE0LDMwNzUyLDMxMDE4LDMwNzg5LDMwODYyLDMwODM2LDMwODU0LDMwODQ0LDMwODc0LDMwODYwLDMwODgz''@;'; put 'put ''LDMwOTAxLDMwODkwLDMwODk1LDMwOTI5LDMwOTE4LDMwOTIzLDMwOTMyLDMwOTEwLDMwOTA4LDMwOTE3LDMwOTIyLDMwOTU2LDMwOTUxLDMwOTM4LDMwOTczLDMwOTY0LDMwOTgzLDMwOTk0LDMwOTkzLDMxMDAxLDMxMDIwLDMxMDE5LDMxMDQwLDMxMDcyLDMxMDYzLDMxMDcxLDMxMDY2LDMx''@;'; put 'put ''MDYxLDMxMDU5LDMxMDk4LDMxMTAzLDMxMTE0LDMxMTMzLDMxMTQzLDQwNzc5LDMxMTQ2LDMxMTUwLDMxMTU1LDMxMTYxLDMxMTYyLDMxMTc3LDMxMTg5LDMxMjA3LDMxMjEyLDMxMjAxLDMxMjAzLDMxMjQwLDMxMjQ1LDMxMjU2LDMxMjU3LDMxMjY0LDMxMjYzLDMxMTA0LDMxMjgxLDMxMjkx''@;'; put 'put ''LDMxMjk0LDMxMjg3LDMxMjk5LDMxMzE5LDMxMzA1LDMxMzI5LDMxMzMwLDMxMzM3LDQwODYxLDMxMzQ0LDMxMzUzLDMxMzU3LDMxMzY4LDMxMzgzLDMxMzgxLDMxMzg0LDMxMzgyLDMxNDAxLDMxNDMyLDMxNDA4LDMxNDE0LDMxNDI5LDMxNDI4LDMxNDIzLDM2OTk1LDMxNDMxLDMxNDM0LDMx''@;'; put 'put ''NDM3LDMxNDM5LDMxNDQ1LDMxNDQzLDMxNDQ5LDMxNDUwLDMxNDUzLDMxNDU3LDMxNDU4LDMxNDYyLDMxNDY5LDMxNDcyLDMxNDkwLDMxNTAzLDMxNDk4LDMxNDk0LDMxNTM5LDMxNTEyLDMxNTEzLDMxNTE4LDMxNTQxLDMxNTI4LDMxNTQyLDMxNTY4LDMxNjEwLDMxNDkyLDMxNTY1LDMxNDk5''@;'; put 'put ''LDMxNTY0LDMxNTU3LDMxNjA1LDMxNTg5LDMxNjA0LDMxNTkxLDMxNjAwLDMxNjAxLDMxNTk2LDMxNTk4LDMxNjQ1LDMxNjQwLDMxNjQ3LDMxNjI5LDMxNjQ0LDMxNjQyLDMxNjI3LDMxNjM0LDMxNjMxLDMxNTgxLDMxNjQxLDMxNjkxLDMxNjgxLDMxNjkyLDMxNjk1LDMxNjY4LDMxNjg2LDMx''@;'; put 'put ''NzA5LDMxNzIxLDMxNzYxLDMxNzY0LDMxNzE4LDMxNzE3LDMxODQwLDMxNzQ0LDMxNzUxLDMxNzYzLDMxNzMxLDMxNzM1LDMxNzY3LDMxNzU3LDMxNzM0LDMxNzc5LDMxNzgzLDMxNzg2LDMxNzc1LDMxNzk5LDMxNzg3LDMxODA1LDMxODIwLDMxODExLDMxODI4LDMxODIzLDMxODA4LDMxODI0''@;'; put 'put ''LDMxODMyLDMxODM5LDMxODQ0LDMxODMwLDMxODQ1LDMxODUyLDMxODYxLDMxODc1LDMxODg4LDMxOTA4LDMxOTE3LDMxOTA2LDMxOTE1LDMxOTA1LDMxOTEyLDMxOTIzLDMxOTIyLDMxOTIxLDMxOTE4LDMxOTI5LDMxOTMzLDMxOTM2LDMxOTQxLDMxOTM4LDMxOTYwLDMxOTU0LDMxOTY0LDMx''@;'; put 'put ''OTcwLDM5NzM5LDMxOTgzLDMxOTg2LDMxOTg4LDMxOTkwLDMxOTk0LDMyMDA2LDMyMDAyLDMyMDI4LDMyMDIxLDMyMDEwLDMyMDY5LDMyMDc1LDMyMDQ2LDMyMDUwLDMyMDYzLDMyMDUzLDMyMDcwLDMyMTE1LDMyMDg2LDMyMDc4LDMyMTE0LDMyMTA0LDMyMTEwLDMyMDc5LDMyMDk5LDMyMTQ3''@;'; put 'put ''LDMyMTM3LDMyMDkxLDMyMTQzLDMyMTI1LDMyMTU1LDMyMTg2LDMyMTc0LDMyMTYzLDMyMTgxLDMyMTk5LDMyMTg5LDMyMTcxLDMyMzE3LDMyMTYyLDMyMTc1LDMyMjIwLDMyMTg0LDMyMTU5LDMyMTc2LDMyMjE2LDMyMjIxLDMyMjI4LDMyMjIyLDMyMjUxLDMyMjQyLDMyMjI1LDMyMjYxLDMy''@;'; put 'put ''MjY2LDMyMjkxLDMyMjg5LDMyMjc0LDMyMzA1LDMyMjg3LDMyMjY1LDMyMjY3LDMyMjkwLDMyMzI2LDMyMzU4LDMyMzE1LDMyMzA5LDMyMzEzLDMyMzIzLDMyMzExLDMyMzA2LDMyMzE0LDMyMzU5LDMyMzQ5LDMyMzQyLDMyMzUwLDMyMzQ1LDMyMzQ2LDMyMzc3LDMyMzYyLDMyMzYxLDMyMzgw''@;'; put 'put ''LDMyMzc5LDMyMzg3LDMyMjEzLDMyMzgxLDM2NzgyLDMyMzgzLDMyMzkyLDMyMzkzLDMyMzk2LDMyNDAyLDMyNDAwLDMyNDAzLDMyNDA0LDMyNDA2LDMyMzk4LDMyNDExLDMyNDEyLDMyNTY4LDMyNTcwLDMyNTgxLDMyNTg4LDMyNTg5LDMyNTkwLDMyNTkyLDMyNTkzLDMyNTk3LDMyNTk2LDMy''@;'; put 'put ''NjAwLDMyNjA3LDMyNjA4LDMyNjE2LDMyNjE3LDMyNjE1LDMyNjMyLDMyNjQyLDMyNjQ2LDMyNjQzLDMyNjQ4LDMyNjQ3LDMyNjUyLDMyNjYwLDMyNjcwLDMyNjY5LDMyNjY2LDMyNjc1LDMyNjg3LDMyNjkwLDMyNjk3LDMyNjg2LDMyNjk0LDMyNjk2LDM1Njk3LDMyNzA5LDMyNzEwLDMyNzE0''@;'; put 'put ''LDMyNzI1LDMyNzI0LDMyNzM3LDMyNzQyLDMyNzQ1LDMyNzU1LDMyNzYxLDM5MTMyLDMyNzc0LDMyNzcyLDMyNzc5LDMyNzg2LDMyNzkyLDMyNzkzLDMyNzk2LDMyODAxLDMyODA4LDMyODMxLDMyODI3LDMyODQyLDMyODM4LDMyODUwLDMyODU2LDMyODU4LDMyODYzLDMyODY2LDMyODcyLDMy''@;'; put 'put ''ODgzLDMyODgyLDMyODgwLDMyODg2LDMyODg5LDMyODkzLDMyODk1LDMyOTAwLDMyOTAyLDMyOTAxLDMyOTIzLDMyOTE1LDMyOTIyLDMyOTQxLDIwODgwLDMyOTQwLDMyOTg3LDMyOTk3LDMyOTg1LDMyOTg5LDMyOTY0LDMyOTg2LDMyOTgyLDMzMDMzLDMzMDA3LDMzMDA5LDMzMDUxLDMzMDY1''@;'; put 'put ''LDMzMDU5LDMzMDcxLDMzMDk5LDM4NTM5LDMzMDk0LDMzMDg2LDMzMTA3LDMzMTA1LDMzMDIwLDMzMTM3LDMzMTM0LDMzMTI1LDMzMTI2LDMzMTQwLDMzMTU1LDMzMTYwLDMzMTYyLDMzMTUyLDMzMTU0LDMzMTg0LDMzMTczLDMzMTg4LDMzMTg3LDMzMTE5LDMzMTcxLDMzMTkzLDMzMjAwLDMz''@;'; put 'put ''MjA1LDMzMjE0LDMzMjA4LDMzMjEzLDMzMjE2LDMzMjE4LDMzMjEwLDMzMjI1LDMzMjI5LDMzMjMzLDMzMjQxLDMzMjQwLDMzMjI0LDMzMjQyLDMzMjQ3LDMzMjQ4LDMzMjU1LDMzMjc0LDMzMjc1LDMzMjc4LDMzMjgxLDMzMjgyLDMzMjg1LDMzMjg3LDMzMjkwLDMzMjkzLDMzMjk2LDMzMzAy''@;'; put 'put ''LDMzMzIxLDMzMzIzLDMzMzM2LDMzMzMxLDMzMzQ0LDMzMzY5LDMzMzY4LDMzMzczLDMzMzcwLDMzMzc1LDMzMzgwLDMzMzc4LDMzMzg0LDMzMzg2LDMzMzg3LDMzMzI2LDMzMzkzLDMzMzk5LDMzNDAwLDMzNDA2LDMzNDIxLDMzNDI2LDMzNDUxLDMzNDM5LDMzNDY3LDMzNDUyLDMzNTA1LDMz''@;'; put 'put ''NTA3LDMzNTAzLDMzNDkwLDMzNTI0LDMzNTIzLDMzNTMwLDMzNjgzLDMzNTM5LDMzNTMxLDMzNTI5LDMzNTAyLDMzNTQyLDMzNTAwLDMzNTQ1LDMzNDk3LDMzNTg5LDMzNTg4LDMzNTU4LDMzNTg2LDMzNTg1LDMzNjAwLDMzNTkzLDMzNjE2LDMzNjA1LDMzNTgzLDMzNTc5LDMzNTU5LDMzNTYw''@;'; put 'put ''LDMzNjY5LDMzNjkwLDMzNzA2LDMzNjk1LDMzNjk4LDMzNjg2LDMzNTcxLDMzNjc4LDMzNjcxLDMzNjc0LDMzNjYwLDMzNzE3LDMzNjUxLDMzNjUzLDMzNjk2LDMzNjczLDMzNzA0LDMzNzgwLDMzODExLDMzNzcxLDMzNzQyLDMzNzg5LDMzNzk1LDMzNzUyLDMzODAzLDMzNzI5LDMzNzgzLDMz''@;'; put 'put ''Nzk5LDMzNzYwLDMzNzc4LDMzODA1LDMzODI2LDMzODI0LDMzNzI1LDMzODQ4LDM0MDU0LDMzNzg3LDMzOTAxLDMzODM0LDMzODUyLDM0MTM4LDMzOTI0LDMzOTExLDMzODk5LDMzOTY1LDMzOTAyLDMzOTIyLDMzODk3LDMzODYyLDMzODM2LDMzOTAzLDMzOTEzLDMzODQ1LDMzOTk0LDMzODkw''@;'; put 'put ''LDMzOTc3LDMzOTgzLDMzOTUxLDM0MDA5LDMzOTk3LDMzOTc5LDM0MDEwLDM0ZTMsMzM5ODUsMzM5OTAsMzQwMDYsMzM5NTMsMzQwODEsMzQwNDcsMzQwMzYsMzQwNzEsMzQwNzIsMzQwOTIsMzQwNzksMzQwNjksMzQwNjgsMzQwNDQsMzQxMTIsMzQxNDcsMzQxMzYsMzQxMjAsMzQxMTMsMzQz''@;'; put 'put ''MDYsMzQxMjMsMzQxMzMsMzQxNzYsMzQyMTIsMzQxODQsMzQxOTMsMzQxODYsMzQyMTYsMzQxNTcsMzQxOTYsMzQyMDMsMzQyODIsMzQxODMsMzQyMDQsMzQxNjcsMzQxNzQsMzQxOTIsMzQyNDksMzQyMzQsMzQyNTUsMzQyMzMsMzQyNTYsMzQyNjEsMzQyNjksMzQyNzcsMzQyNjgsMzQyOTcs''@;'; put 'put ''MzQzMTQsMzQzMjMsMzQzMTUsMzQzMDIsMzQyOTgsMzQzMTAsMzQzMzgsMzQzMzAsMzQzNTIsMzQzNjcsMzQzODEsMjAwNTMsMzQzODgsMzQzOTksMzQ0MDcsMzQ0MTcsMzQ0NTEsMzQ0NjcsMzQ0NzMsMzQ0NzQsMzQ0NDMsMzQ0NDQsMzQ0ODYsMzQ0NzksMzQ1MDAsMzQ1MDIsMzQ0ODAsMzQ1''@;'; put 'put ''MDUsMzQ4NTEsMzQ0NzUsMzQ1MTYsMzQ1MjYsMzQ1MzcsMzQ1NDAsMzQ1MjcsMzQ1MjMsMzQ1NDMsMzQ1NzgsMzQ1NjYsMzQ1NjgsMzQ1NjAsMzQ1NjMsMzQ1NTUsMzQ1NzcsMzQ1NjksMzQ1NzMsMzQ1NTMsMzQ1NzAsMzQ2MTIsMzQ2MjMsMzQ2MTUsMzQ2MTksMzQ1OTcsMzQ2MDEsMzQ1ODYs''@;'; put 'put ''MzQ2NTYsMzQ2NTUsMzQ2ODAsMzQ2MzYsMzQ2MzgsMzQ2NzYsMzQ2NDcsMzQ2NjQsMzQ2NzAsMzQ2NDksMzQ2NDMsMzQ2NTksMzQ2NjYsMzQ4MjEsMzQ3MjIsMzQ3MTksMzQ2OTAsMzQ3MzUsMzQ3NjMsMzQ3NDksMzQ3NTIsMzQ3NjgsMzg2MTQsMzQ3MzEsMzQ3NTYsMzQ3MzksMzQ3NTksMzQ3''@;'; put 'put ''NTgsMzQ3NDcsMzQ3OTksMzQ4MDIsMzQ3ODQsMzQ4MzEsMzQ4MjksMzQ4MTQsMzQ4MDYsMzQ4MDcsMzQ4MzAsMzQ3NzAsMzQ4MzMsMzQ4MzgsMzQ4MzcsMzQ4NTAsMzQ4NDksMzQ4NjUsMzQ4NzAsMzQ4NzMsMzQ4NTUsMzQ4NzUsMzQ4ODQsMzQ4ODIsMzQ4OTgsMzQ5MDUsMzQ5MTAsMzQ5MTQs''@;'; put 'put ''MzQ5MjMsMzQ5NDUsMzQ5NDIsMzQ5NzQsMzQ5MzMsMzQ5NDEsMzQ5OTcsMzQ5MzAsMzQ5NDYsMzQ5NjcsMzQ5NjIsMzQ5OTAsMzQ5NjksMzQ5NzgsMzQ5NTcsMzQ5ODAsMzQ5OTIsMzUwMDcsMzQ5OTMsMzUwMTEsMzUwMTIsMzUwMjgsMzUwMzIsMzUwMzMsMzUwMzcsMzUwNjUsMzUwNzQsMzUw''@;'; put 'put ''NjgsMzUwNjAsMzUwNDgsMzUwNTgsMzUwNzYsMzUwODQsMzUwODIsMzUwOTEsMzUxMzksMzUxMDIsMzUxMDksMzUxMTQsMzUxMTUsMzUxMzcsMzUxNDAsMzUxMzEsMzUxMjYsMzUxMjgsMzUxNDgsMzUxMDEsMzUxNjgsMzUxNjYsMzUxNzQsMzUxNzIsMzUxODEsMzUxNzgsMzUxODMsMzUxODgs''@;'; put 'put ''MzUxOTEsMzUxOTgsMzUyMDMsMzUyMDgsMzUyMTAsMzUyMTksMzUyMjQsMzUyMzMsMzUyNDEsMzUyMzgsMzUyNDQsMzUyNDcsMzUyNTAsMzUyNTgsMzUyNjEsMzUyNjMsMzUyNjQsMzUyOTAsMzUyOTIsMzUyOTMsMzUzMDMsMzUzMTYsMzUzMjAsMzUzMzEsMzUzNTAsMzUzNDQsMzUzNDAsMzUz''@;'; put 'put ''NTUsMzUzNTcsMzUzNjUsMzUzODIsMzUzOTMsMzU0MTksMzU0MTAsMzUzOTgsMzU0MDAsMzU0NTIsMzU0MzcsMzU0MzYsMzU0MjYsMzU0NjEsMzU0NTgsMzU0NjAsMzU0OTYsMzU0ODksMzU0NzMsMzU0OTMsMzU0OTQsMzU0ODIsMzU0OTEsMzU1MjQsMzU1MzMsMzU1MjIsMzU1NDYsMzU1NjMs''@;'; put 'put ''MzU1NzEsMzU1NTksMzU1NTYsMzU1NjksMzU2MDQsMzU1NTIsMzU1NTQsMzU1NzUsMzU1NTAsMzU1NDcsMzU1OTYsMzU1OTEsMzU2MTAsMzU1NTMsMzU2MDYsMzU2MDAsMzU2MDcsMzU2MTYsMzU2MzUsMzg4MjcsMzU2MjIsMzU2MjcsMzU2NDYsMzU2MjQsMzU2NDksMzU2NjAsMzU2NjMsMzU2''@;'; put 'put ''NjIsMzU2NTcsMzU2NzAsMzU2NzUsMzU2NzQsMzU2OTEsMzU2NzksMzU2OTIsMzU2OTUsMzU3MDAsMzU3MDksMzU3MTIsMzU3MjQsMzU3MjYsMzU3MzAsMzU3MzEsMzU3MzQsMzU3MzcsMzU3MzgsMzU4OTgsMzU5MDUsMzU5MDMsMzU5MTIsMzU5MTYsMzU5MTgsMzU5MjAsMzU5MjUsMzU5Mzgs''@;'; put 'put ''MzU5NDgsMzU5NjAsMzU5NjIsMzU5NzAsMzU5NzcsMzU5NzMsMzU5NzgsMzU5ODEsMzU5ODIsMzU5ODgsMzU5NjQsMzU5OTIsMjUxMTcsMzYwMTMsMzYwMTAsMzYwMjksMzYwMTgsMzYwMTksMzYwMTQsMzYwMjIsMzYwNDAsMzYwMzMsMzYwNjgsMzYwNjcsMzYwNTgsMzYwOTMsMzYwOTAsMzYw''@;'; put 'put ''OTEsMzYxMDAsMzYxMDEsMzYxMDYsMzYxMDMsMzYxMTEsMzYxMDksMzYxMTIsNDA3ODIsMzYxMTUsMzYwNDUsMzYxMTYsMzYxMTgsMzYxOTksMzYyMDUsMzYyMDksMzYyMTEsMzYyMjUsMzYyNDksMzYyOTAsMzYyODYsMzYyODIsMzYzMDMsMzYzMTQsMzYzMTAsMzYzMDAsMzYzMTUsMzYyOTks''@;'; put 'put ''MzYzMzAsMzYzMzEsMzYzMTksMzYzMjMsMzYzNDgsMzYzNjAsMzYzNjEsMzYzNTEsMzYzODEsMzYzODIsMzYzNjgsMzYzODMsMzY0MTgsMzY0MDUsMzY0MDAsMzY0MDQsMzY0MjYsMzY0MjMsMzY0MjUsMzY0MjgsMzY0MzIsMzY0MjQsMzY0NDEsMzY0NTIsMzY0NDgsMzYzOTQsMzY0NTEsMzY0''@;'; put 'put ''MzcsMzY0NzAsMzY0NjYsMzY0NzYsMzY0ODEsMzY0ODcsMzY0ODUsMzY0ODQsMzY0OTEsMzY0OTAsMzY0OTksMzY0OTcsMzY1MDAsMzY1MDUsMzY1MjIsMzY1MTMsMzY1MjQsMzY1MjgsMzY1NTAsMzY1MjksMzY1NDIsMzY1NDksMzY1NTIsMzY1NTUsMzY1NzEsMzY1NzksMzY2MDQsMzY2MDMs''@;'; put 'put ''MzY1ODcsMzY2MDYsMzY2MTgsMzY2MTMsMzY2MjksMzY2MjYsMzY2MzMsMzY2MjcsMzY2MzYsMzY2MzksMzY2MzUsMzY2MjAsMzY2NDYsMzY2NTksMzY2NjcsMzY2NjUsMzY2NzcsMzY2NzQsMzY2NzAsMzY2ODQsMzY2ODEsMzY2NzgsMzY2ODYsMzY2OTUsMzY3MDAsMzY3MDYsMzY3MDcsMzY3''@;'; put 'put ''MDgsMzY3NjQsMzY3NjcsMzY3NzEsMzY3ODEsMzY3ODMsMzY3OTEsMzY4MjYsMzY4MzcsMzY4MzQsMzY4NDIsMzY4NDcsMzY5OTksMzY4NTIsMzY4NjksMzY4NTcsMzY4NTgsMzY4ODEsMzY4ODUsMzY4OTcsMzY4NzcsMzY4OTQsMzY4ODYsMzY4NzUsMzY5MDMsMzY5MTgsMzY5MTcsMzY5MjEs''@;'; put 'put ''MzY4NTYsMzY5NDMsMzY5NDQsMzY5NDUsMzY5NDYsMzY4NzgsMzY5MzcsMzY5MjYsMzY5NTAsMzY5NTIsMzY5NTgsMzY5NjgsMzY5NzUsMzY5ODIsMzg1NjgsMzY5NzgsMzY5OTQsMzY5ODksMzY5OTMsMzY5OTIsMzcwMDIsMzcwMDEsMzcwMDcsMzcwMzIsMzcwMzksMzcwNDEsMzcwNDUsMzcw''@;'; put 'put ''OTAsMzcwOTIsMjUxNjAsMzcwODMsMzcxMjIsMzcxMzgsMzcxNDUsMzcxNzAsMzcxNjgsMzcxOTQsMzcyMDYsMzcyMDgsMzcyMTksMzcyMjEsMzcyMjUsMzcyMzUsMzcyMzQsMzcyNTksMzcyNTcsMzcyNTAsMzcyODIsMzcyOTEsMzcyOTUsMzcyOTAsMzczMDEsMzczMDAsMzczMDYsMzczMTIs''@;'; put 'put ''MzczMTMsMzczMjEsMzczMjMsMzczMjgsMzczMzQsMzczNDMsMzczNDUsMzczMzksMzczNzIsMzczNjUsMzczNjYsMzc0MDYsMzczNzUsMzczOTYsMzc0MjAsMzczOTcsMzczOTMsMzc0NzAsMzc0NjMsMzc0NDUsMzc0NDksMzc0NzYsMzc0NDgsMzc1MjUsMzc0MzksMzc0NTEsMzc0NTYsMzc1''@;'; put 'put ''MzIsMzc1MjYsMzc1MjMsMzc1MzEsMzc0NjYsMzc1ODMsMzc1NjEsMzc1NTksMzc2MDksMzc2NDcsMzc2MjYsMzc3MDAsMzc2NzgsMzc2NTcsMzc2NjYsMzc2NTgsMzc2NjcsMzc2OTAsMzc2ODUsMzc2OTEsMzc3MjQsMzc3MjgsMzc3NTYsMzc3NDIsMzc3MTgsMzc4MDgsMzc4MDQsMzc4MDUs''@;'; put 'put ''Mzc3ODAsMzc4MTcsMzc4NDYsMzc4NDcsMzc4NjQsMzc4NjEsMzc4NDgsMzc4MjcsMzc4NTMsMzc4NDAsMzc4MzIsMzc4NjAsMzc5MTQsMzc5MDgsMzc5MDcsMzc4OTEsMzc4OTUsMzc5MDQsMzc5NDIsMzc5MzEsMzc5NDEsMzc5MjEsMzc5NDYsMzc5NTMsMzc5NzAsMzc5NTYsMzc5NzksMzc5''@;'; put 'put ''ODQsMzc5ODYsMzc5ODIsMzc5OTQsMzc0MTcsMzhlMywzODAwNSwzODAwNywzODAxMywzNzk3OCwzODAxMiwzODAxNCwzODAxNywzODAxNSwzODI3NCwzODI3OSwzODI4MiwzODI5MiwzODI5NCwzODI5NiwzODI5NywzODMwNCwzODMxMiwzODMxMSwzODMxNywzODMzMiwzODMzMSwzODMyOSwz''@;'; put 'put ''ODMzNCwzODM0NiwyODY2MiwzODMzOSwzODM0OSwzODM0OCwzODM1NywzODM1NiwzODM1OCwzODM2NCwzODM2OSwzODM3MywzODM3MCwzODQzMywzODQ0MCwzODQ0NiwzODQ0NywzODQ2NiwzODQ3NiwzODQ3OSwzODQ3NSwzODUxOSwzODQ5MiwzODQ5NCwzODQ5MywzODQ5NSwzODUwMiwzODUx''@;'; put 'put ''NCwzODUwOCwzODU0MSwzODU1MiwzODU0OSwzODU1MSwzODU3MCwzODU2NywzODU3NywzODU3OCwzODU3NiwzODU4MCwzODU4MiwzODU4NCwzODU4NSwzODYwNiwzODYwMywzODYwMSwzODYwNSwzNTE0OSwzODYyMCwzODY2OSwzODYxMywzODY0OSwzODY2MCwzODY2MiwzODY2NCwzODY3NSwz''@;'; put 'put ''ODY3MCwzODY3MywzODY3MSwzODY3OCwzODY4MSwzODY5MiwzODY5OCwzODcwNCwzODcxMywzODcxNywzODcxOCwzODcyNCwzODcyNiwzODcyOCwzODcyMiwzODcyOSwzODc0OCwzODc1MiwzODc1NiwzODc1OCwzODc2MCwyMTIwMiwzODc2MywzODc2OSwzODc3NywzODc4OSwzODc4MCwzODc4''@;'; put 'put ''NSwzODc3OCwzODc5MCwzODc5NSwzODc5OSwzODgwMCwzODgxMiwzODgyNCwzODgyMiwzODgxOSwzODgzNSwzODgzNiwzODg1MSwzODg1NCwzODg1NiwzODg1OSwzODg3NiwzODg5Myw0MDc4MywzODg5OCwzMTQ1NSwzODkwMiwzODkwMSwzODkyNywzODkyNCwzODk2OCwzODk0OCwzODk0NSwz''@;'; put 'put ''ODk2NywzODk3MywzODk4MiwzODk5MSwzODk4NywzOTAxOSwzOTAyMywzOTAyNCwzOTAyNSwzOTAyOCwzOTAyNywzOTA4MiwzOTA4NywzOTA4OSwzOTA5NCwzOTEwOCwzOTEwNywzOTExMCwzOTE0NSwzOTE0NywzOTE3MSwzOTE3NywzOTE4NiwzOTE4OCwzOTE5MiwzOTIwMSwzOTE5NywzOTE5''@;'; put 'put ''OCwzOTIwNCwzOTIwMCwzOTIxMiwzOTIxNCwzOTIyOSwzOTIzMCwzOTIzNCwzOTI0MSwzOTIzNywzOTI0OCwzOTI0MywzOTI0OSwzOTI1MCwzOTI0NCwzOTI1MywzOTMxOSwzOTMyMCwzOTMzMywzOTM0MSwzOTM0MiwzOTM1NiwzOTM5MSwzOTM4NywzOTM4OSwzOTM4NCwzOTM3NywzOTQwNSwz''@;'; put 'put ''OTQwNiwzOTQwOSwzOTQxMCwzOTQxOSwzOTQxNiwzOTQyNSwzOTQzOSwzOTQyOSwzOTM5NCwzOTQ0OSwzOTQ2NywzOTQ3OSwzOTQ5MywzOTQ5MCwzOTQ4OCwzOTQ5MSwzOTQ4NiwzOTUwOSwzOTUwMSwzOTUxNSwzOTUxMSwzOTUxOSwzOTUyMiwzOTUyNSwzOTUyNCwzOTUyOSwzOTUzMSwzOTUz''@;'; put 'put ''MCwzOTU5NywzOTYwMCwzOTYxMiwzOTYxNiwzOTYzMSwzOTYzMywzOTYzNSwzOTYzNiwzOTY0NiwzOTY0NywzOTY1MCwzOTY1MSwzOTY1NCwzOTY2MywzOTY1OSwzOTY2MiwzOTY2OCwzOTY2NSwzOTY3MSwzOTY3NSwzOTY4NiwzOTcwNCwzOTcwNiwzOTcxMSwzOTcxNCwzOTcxNSwzOTcxNywz''@;'; put 'put ''OTcxOSwzOTcyMCwzOTcyMSwzOTcyMiwzOTcyNiwzOTcyNywzOTczMCwzOTc0OCwzOTc0NywzOTc1OSwzOTc1NywzOTc1OCwzOTc2MSwzOTc2OCwzOTc5NiwzOTgyNywzOTgxMSwzOTgyNSwzOTgzMCwzOTgzMSwzOTgzOSwzOTg0MCwzOTg0OCwzOTg2MCwzOTg3MiwzOTg4MiwzOTg2NSwzOTg3''@;'; put 'put ''OCwzOTg4NywzOTg4OSwzOTg5MCwzOTkwNywzOTkwNiwzOTkwOCwzOTg5MiwzOTkwNSwzOTk5NCwzOTkyMiwzOTkyMSwzOTkyMCwzOTk1NywzOTk1NiwzOTk0NSwzOTk1NSwzOTk0OCwzOTk0MiwzOTk0NCwzOTk1NCwzOTk0NiwzOTk0MCwzOTk4MiwzOTk2MywzOTk3MywzOTk3MiwzOTk2OSwz''@;'; put 'put ''OTk4NCw0MDAwNywzOTk4Niw0MDAwNiwzOTk5OCw0MDAyNiw0MDAzMiw0MDAzOSw0MDA1NCw0MDA1Niw0MDE2Nyw0MDE3Miw0MDE3Niw0MDIwMSw0MDIwMCw0MDE3MSw0MDE5NSw0MDE5OCw0MDIzNCw0MDIzMCw0MDM2Nyw0MDIyNyw0MDIyMyw0MDI2MCw0MDIxMyw0MDIxMCw0MDI1Nyw0MDI1''@;'; put 'put ''NSw0MDI1NCw0MDI2Miw0MDI2NCw0MDI4NSw0MDI4Niw0MDI5Miw0MDI3Myw0MDI3Miw0MDI4MSw0MDMwNiw0MDMyOSw0MDMyNyw0MDM2Myw0MDMwMyw0MDMxNCw0MDM0Niw0MDM1Niw0MDM2MSw0MDM3MCw0MDM4OCw0MDM4NSw0MDM3OSw0MDM3Niw0MDM3OCw0MDM5MCw0MDM5OSw0MDM4Niw0''@;'; put 'put ''MDQwOSw0MDQwMyw0MDQ0MCw0MDQyMiw0MDQyOSw0MDQzMSw0MDQ0NSw0MDQ3NCw0MDQ3NSw0MDQ3OCw0MDU2NSw0MDU2OSw0MDU3Myw0MDU3Nyw0MDU4NCw0MDU4Nyw0MDU4OCw0MDU5NCw0MDU5Nyw0MDU5Myw0MDYwNSw0MDYxMyw0MDYxNyw0MDYzMiw0MDYxOCw0MDYyMSwzODc1Myw0MDY1''@;'; put 'put ''Miw0MDY1NCw0MDY1NSw0MDY1Niw0MDY2MCw0MDY2OCw0MDY3MCw0MDY2OSw0MDY3Miw0MDY3Nyw0MDY4MCw0MDY4Nyw0MDY5Miw0MDY5NCw0MDY5NSw0MDY5Nyw0MDY5OSw0MDcwMCw0MDcwMSw0MDcxMSw0MDcxMiwzMDM5MSw0MDcyNSw0MDczNyw0MDc0OCw0MDc2Niw0MDc3OCw0MDc4Niw0''@;'; put 'put ''MDc4OCw0MDgwMyw0MDc5OSw0MDgwMCw0MDgwMSw0MDgwNiw0MDgwNyw0MDgxMiw0MDgxMCw0MDgyMyw0MDgxOCw0MDgyMiw0MDg1Myw0MDg2MCw0MDg2NCwyMjU3NSwyNzA3OSwzNjk1MywyOTc5NiwyMDk1NiwyOTA4MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzIzOTQsMzUxMDAsMzc3MDQsMzc1MTIsMzQwMTIs''@;'; put 'put ''MjA0MjUsMjg4NTksMjYxNjEsMjY4MjQsMzc2MjUsMjYzNjMsMjQzODksMjAwMDgsMjAxOTMsMjAyMjAsMjAyMjQsMjAyMjcsMjAyODEsMjAzMTAsMjAzNzAsMjAzNjIsMjAzNzgsMjAzNzIsMjA0MjksMjA1NDQsMjA1MTQsMjA0NzksMjA1MTAsMjA1NTAsMjA1OTIsMjA1NDYsMjA2MjgsMjA3''@;'; put 'put ''MjQsMjA2OTYsMjA4MTAsMjA4MzYsMjA4OTMsMjA5MjYsMjA5NzIsMjEwMTMsMjExNDgsMjExNTgsMjExODQsMjEyMTEsMjEyNDgsMjEyNTUsMjEyODQsMjEzNjIsMjEzOTUsMjE0MjYsMjE0NjksNjQwMTQsMjE2NjAsMjE2NDIsMjE2NzMsMjE3NTksMjE4OTQsMjIzNjEsMjIzNzMsMjI0NDQs''@;'; put 'put ''MjI0NzIsMjI0NzEsNjQwMTUsNjQwMTYsMjI2ODYsMjI3MDYsMjI3OTUsMjI4NjcsMjI4NzUsMjI4NzcsMjI4ODMsMjI5NDgsMjI5NzAsMjMzODIsMjM0ODgsMjk5OTksMjM1MTIsMjM1MzIsMjM1ODIsMjM3MTgsMjM3MzgsMjM3OTcsMjM4NDcsMjM4OTEsNjQwMTcsMjM4NzQsMjM5MTcsMjM5''@;'; put 'put ''OTIsMjM5OTMsMjQwMTYsMjQzNTMsMjQzNzIsMjQ0MjMsMjQ1MDMsMjQ1NDIsMjQ2NjksMjQ3MDksMjQ3MTQsMjQ3OTgsMjQ3ODksMjQ4NjQsMjQ4MTgsMjQ4NDksMjQ4ODcsMjQ4ODAsMjQ5ODQsMjUxMDcsMjUyNTQsMjU1ODksMjU2OTYsMjU3NTcsMjU4MDYsMjU5MzQsMjYxMTIsMjYxMzMs''@;'; put 'put ''MjYxNzEsMjYxMjEsMjYxNTgsMjYxNDIsMjYxNDgsMjYyMTMsMjYxOTksMjYyMDEsNjQwMTgsMjYyMjcsMjYyNjUsMjYyNzIsMjYyOTAsMjYzMDMsMjYzNjIsMjYzODIsNjM3ODUsMjY0NzAsMjY1NTUsMjY3MDYsMjY1NjAsMjY2MjUsMjY2OTIsMjY4MzEsNjQwMTksMjY5ODQsNjQwMjAsMjcw''@;'; put 'put ''MzIsMjcxMDYsMjcxODQsMjcyNDMsMjcyMDYsMjcyNTEsMjcyNjIsMjczNjIsMjczNjQsMjc2MDYsMjc3MTEsMjc3NDAsMjc3ODIsMjc3NTksMjc4NjYsMjc5MDgsMjgwMzksMjgwMTUsMjgwNTQsMjgwNzYsMjgxMTEsMjgxNTIsMjgxNDYsMjgxNTYsMjgyMTcsMjgyNTIsMjgxOTksMjgyMjAs''@;'; put 'put ''MjgzNTEsMjg1NTIsMjg1OTcsMjg2NjEsMjg2NzcsMjg2NzksMjg3MTIsMjg4MDUsMjg4NDMsMjg5NDMsMjg5MzIsMjkwMjAsMjg5OTgsMjg5OTksNjQwMjEsMjkxMjEsMjkxODIsMjkzNjEsMjkzNzQsMjk0NzYsNjQwMjIsMjk1NTksMjk2MjksMjk2NDEsMjk2NTQsMjk2NjcsMjk2NTAsMjk3''@;'; put 'put ''MDMsMjk2ODUsMjk3MzQsMjk3MzgsMjk3MzcsMjk3NDIsMjk3OTQsMjk4MzMsMjk4NTUsMjk5NTMsMzAwNjMsMzAzMzgsMzAzNjQsMzAzNjYsMzAzNjMsMzAzNzQsNjQwMjMsMzA1MzQsMjExNjcsMzA3NTMsMzA3OTgsMzA4MjAsMzA4NDIsMzEwMjQsNjQwMjQsNjQwMjUsNjQwMjYsMzExMjQs''@;'; put 'put ''NjQwMjcsMzExMzEsMzE0NDEsMzE0NjMsNjQwMjgsMzE0NjcsMzE2NDYsNjQwMjksMzIwNzIsMzIwOTIsMzIxODMsMzIxNjAsMzIyMTQsMzIzMzgsMzI1ODMsMzI2NzMsNjQwMzAsMzM1MzcsMzM2MzQsMzM2NjMsMzM3MzUsMzM3ODIsMzM4NjQsMzM5NzIsMzQxMzEsMzQxMzcsMzQxNTUsNjQw''@;'; put 'put ''MzEsMzQyMjQsNjQwMzIsNjQwMzMsMzQ4MjMsMzUwNjEsMzUzNDYsMzUzODMsMzU0NDksMzU0OTUsMzU1MTgsMzU1NTEsNjQwMzQsMzU1NzQsMzU2NjcsMzU3MTEsMzYwODAsMzYwODQsMzYxMTQsMzYyMTQsNjQwMzUsMzY1NTksNjQwMzYsNjQwMzcsMzY5NjcsMzcwODYsNjQwMzgsMzcxNDEs''@;'; put 'put ''MzcxNTksMzczMzgsMzczMzUsMzczNDIsMzczNTcsMzczNTgsMzczNDgsMzczNDksMzczODIsMzczOTIsMzczODYsMzc0MzQsMzc0NDAsMzc0MzYsMzc0NTQsMzc0NjUsMzc0NTcsMzc0MzMsMzc0NzksMzc1NDMsMzc0OTUsMzc0OTYsMzc2MDcsMzc1OTEsMzc1OTMsMzc1ODQsNjQwMzksMzc1''@;'; put 'put ''ODksMzc2MDAsMzc1ODcsMzc2NjksMzc2NjUsMzc2MjcsNjQwNDAsMzc2NjIsMzc2MzEsMzc2NjEsMzc2MzQsMzc3NDQsMzc3MTksMzc3OTYsMzc4MzAsMzc4NTQsMzc4ODAsMzc5MzcsMzc5NTcsMzc5NjAsMzgyOTAsNjM5NjQsNjQwNDEsMzg1NTcsMzg1NzUsMzg3MDcsMzg3MTUsMzg3MjMs''@;'; put 'put ''Mzg3MzMsMzg3MzUsMzg3MzcsMzg3NDEsMzg5OTksMzkwMTMsNjQwNDIsNjQwNDMsMzkyMDcsNjQwNDQsMzkzMjYsMzk1MDIsMzk2NDEsMzk2NDQsMzk3OTcsMzk3OTQsMzk4MjMsMzk4NTcsMzk4NjcsMzk5MzYsNDAzMDQsNDAyOTksNjQwNDUsNDA0NzMsNDA2NTcsbnVsbCxudWxsLDg1NjAs''@;'; put 'put ''ODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksNjU1MDYsNjU1MDgsNjUyODcsNjUyODIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsNjU1MDYsNjU1MDgsNjUyODcsNjUyODIsMTI4NDksODQ3MCw4NDgxLDg3NTcsMzIzOTQs''@;'; put 'put ''MzUxMDAsMzc3MDQsMzc1MTIsMzQwMTIsMjA0MjUsMjg4NTksMjYxNjEsMjY4MjQsMzc2MjUsMjYzNjMsMjQzODksMjAwMDgsMjAxOTMsMjAyMjAsMjAyMjQsMjAyMjcsMjAyODEsMjAzMTAsMjAzNzAsMjAzNjIsMjAzNzgsMjAzNzIsMjA0MjksMjA1NDQsMjA1MTQsMjA0NzksMjA1MTAsMjA1''@;'; put 'put ''NTAsMjA1OTIsMjA1NDYsMjA2MjgsMjA3MjQsMjA2OTYsMjA4MTAsMjA4MzYsMjA4OTMsMjA5MjYsMjA5NzIsMjEwMTMsMjExNDgsMjExNTgsMjExODQsMjEyMTEsMjEyNDgsMjEyNTUsMjEyODQsMjEzNjIsMjEzOTUsMjE0MjYsMjE0NjksNjQwMTQsMjE2NjAsMjE2NDIsMjE2NzMsMjE3NTks''@;'; put 'put ''MjE4OTQsMjIzNjEsMjIzNzMsMjI0NDQsMjI0NzIsMjI0NzEsNjQwMTUsNjQwMTYsMjI2ODYsMjI3MDYsMjI3OTUsMjI4NjcsMjI4NzUsMjI4NzcsMjI4ODMsMjI5NDgsMjI5NzAsMjMzODIsMjM0ODgsMjk5OTksMjM1MTIsMjM1MzIsMjM1ODIsMjM3MTgsMjM3MzgsMjM3OTcsMjM4NDcsMjM4''@;'; put 'put ''OTEsNjQwMTcsMjM4NzQsMjM5MTcsMjM5OTIsMjM5OTMsMjQwMTYsMjQzNTMsMjQzNzIsMjQ0MjMsMjQ1MDMsMjQ1NDIsMjQ2NjksMjQ3MDksMjQ3MTQsMjQ3OTgsMjQ3ODksMjQ4NjQsMjQ4MTgsMjQ4NDksMjQ4ODcsMjQ4ODAsMjQ5ODQsMjUxMDcsMjUyNTQsMjU1ODksMjU2OTYsMjU3NTcs''@;'; put 'put ''MjU4MDYsMjU5MzQsMjYxMTIsMjYxMzMsMjYxNzEsMjYxMjEsMjYxNTgsMjYxNDIsMjYxNDgsMjYyMTMsMjYxOTksMjYyMDEsNjQwMTgsMjYyMjcsMjYyNjUsMjYyNzIsMjYyOTAsMjYzMDMsMjYzNjIsMjYzODIsNjM3ODUsMjY0NzAsMjY1NTUsMjY3MDYsMjY1NjAsMjY2MjUsMjY2OTIsMjY4''@;'; put 'put ''MzEsNjQwMTksMjY5ODQsNjQwMjAsMjcwMzIsMjcxMDYsMjcxODQsMjcyNDMsMjcyMDYsMjcyNTEsMjcyNjIsMjczNjIsMjczNjQsMjc2MDYsMjc3MTEsMjc3NDAsMjc3ODIsMjc3NTksMjc4NjYsMjc5MDgsMjgwMzksMjgwMTUsMjgwNTQsMjgwNzYsMjgxMTEsMjgxNTIsMjgxNDYsMjgxNTYs''@;'; put 'put ''MjgyMTcsMjgyNTIsMjgxOTksMjgyMjAsMjgzNTEsMjg1NTIsMjg1OTcsMjg2NjEsMjg2NzcsMjg2NzksMjg3MTIsMjg4MDUsMjg4NDMsMjg5NDMsMjg5MzIsMjkwMjAsMjg5OTgsMjg5OTksNjQwMjEsMjkxMjEsMjkxODIsMjkzNjEsMjkzNzQsMjk0NzYsNjQwMjIsMjk1NTksMjk2MjksMjk2''@;'; put 'put ''NDEsMjk2NTQsMjk2NjcsMjk2NTAsMjk3MDMsMjk2ODUsMjk3MzQsMjk3MzgsMjk3MzcsMjk3NDIsMjk3OTQsMjk4MzMsMjk4NTUsMjk5NTMsMzAwNjMsMzAzMzgsMzAzNjQsMzAzNjYsMzAzNjMsMzAzNzQsNjQwMjMsMzA1MzQsMjExNjcsMzA3NTMsMzA3OTgsMzA4MjAsMzA4NDIsMzEwMjQs''@;'; put 'put ''NjQwMjQsNjQwMjUsNjQwMjYsMzExMjQsNjQwMjcsMzExMzEsMzE0NDEsMzE0NjMsNjQwMjgsMzE0NjcsMzE2NDYsNjQwMjksMzIwNzIsMzIwOTIsMzIxODMsMzIxNjAsMzIyMTQsMzIzMzgsMzI1ODMsMzI2NzMsNjQwMzAsMzM1MzcsMzM2MzQsMzM2NjMsMzM3MzUsMzM3ODIsMzM4NjQsMzM5''@;'; put 'put ''NzIsMzQxMzEsMzQxMzcsMzQxNTUsNjQwMzEsMzQyMjQsNjQwMzIsNjQwMzMsMzQ4MjMsMzUwNjEsMzUzNDYsMzUzODMsMzU0NDksMzU0OTUsMzU1MTgsMzU1NTEsNjQwMzQsMzU1NzQsMzU2NjcsMzU3MTEsMzYwODAsMzYwODQsMzYxMTQsMzYyMTQsNjQwMzUsMzY1NTksNjQwMzYsNjQwMzcs''@;'; put 'put ''MzY5NjcsMzcwODYsNjQwMzgsMzcxNDEsMzcxNTksMzczMzgsMzczMzUsMzczNDIsMzczNTcsMzczNTgsMzczNDgsMzczNDksMzczODIsMzczOTIsMzczODYsMzc0MzQsMzc0NDAsMzc0MzYsMzc0NTQsMzc0NjUsMzc0NTcsMzc0MzMsMzc0NzksMzc1NDMsMzc0OTUsMzc0OTYsMzc2MDcsMzc1''@;'; put 'put ''OTEsMzc1OTMsMzc1ODQsNjQwMzksMzc1ODksMzc2MDAsMzc1ODcsMzc2NjksMzc2NjUsMzc2MjcsNjQwNDAsMzc2NjIsMzc2MzEsMzc2NjEsMzc2MzQsMzc3NDQsMzc3MTksMzc3OTYsMzc4MzAsMzc4NTQsMzc4ODAsMzc5MzcsMzc5NTcsMzc5NjAsMzgyOTAsNjM5NjQsNjQwNDEsMzg1NTcs''@;'; put 'put ''Mzg1NzUsMzg3MDcsMzg3MTUsMzg3MjMsMzg3MzMsMzg3MzUsMzg3MzcsMzg3NDEsMzg5OTksMzkwMTMsNjQwNDIsNjQwNDMsMzkyMDcsNjQwNDQsMzkzMjYsMzk1MDIsMzk2NDEsMzk2NDQsMzk3OTcsMzk3OTQsMzk4MjMsMzk4NTcsMzk4NjcsMzk5MzYsNDAzMDQsNDAyOTksNjQwNDUsNDA0''@;'; put 'put ''NzMsNDA2NTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxqaXMwMjEyOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw3MjgsNzExLDE4NCw3MjksNzMzLDE3NSw3MzEsNzMwLDY1Mzc0LDkwMCw5MDEs''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE2MSwxNjYsMTkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxODYsMTcwLDE2OSwxNzQsODQ4MiwxNjQsODQ3MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTAyLDkwNCw5MDUsOTA2LDkzOCxudWxsLDkwOCxudWxsLDkxMCw5MzksbnVsbCw5MTEsbnVsbCxudWxsLG51bGwsbnVsbCw5NDAsOTQx''@;'; put 'put ''LDk0Miw5NDMsOTcwLDkxMiw5NzIsOTYyLDk3Myw5NzEsOTQ0LDk3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzgsMTAzOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEz''@;'; put 'put ''LDExMTQsMTExNSwxMTE2LDExMTgsMTExOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LDE5OCwyNzIsbnVsbCwyOTQsbnVsbCwzMDYsbnVsbCwzMjEsMzE5LG51bGwsMzMwLDIxNiwzMzgsbnVsbCwzNTgsMjIyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjMwLDI3MywyNDAsMjk1''@;'; put 'put ''LDMwNSwzMDcsMzEyLDMyMiwzMjAsMzI5LDMzMSwyNDgsMzM5LDIyMywzNTksMjU0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTkzLDE5MiwxOTYsMTk0LDI1OCw0NjEsMjU2LDI2MCwxOTcsMTk1LDI2MiwyNjQsMjY4''@;'; put 'put ''LDE5OSwyNjYsMjcwLDIwMSwyMDAsMjAzLDIwMiwyODIsMjc4LDI3NCwyODAsbnVsbCwyODQsMjg2LDI5MCwyODgsMjkyLDIwNSwyMDQsMjA3LDIwNiw0NjMsMzA0LDI5OCwzMDIsMjk2LDMwOCwzMTAsMzEzLDMxNywzMTUsMzIzLDMyNywzMjUsMjA5LDIxMSwyMTAsMjE0LDIxMiw0NjUsMzM2''@;'; put 'put ''LDMzMiwyMTMsMzQwLDM0NCwzNDIsMzQ2LDM0OCwzNTIsMzUwLDM1NiwzNTQsMjE4LDIxNywyMjAsMjE5LDM2NCw0NjcsMzY4LDM2MiwzNzAsMzY2LDM2MCw0NzEsNDc1LDQ3Myw0NjksMzcyLDIyMSwzNzYsMzc0LDM3NywzODEsMzc5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsMjI1LDIyNCwyMjgsMjI2LDI1OSw0NjIsMjU3LDI2MSwyMjksMjI3LDI2MywyNjUsMjY5LDIzMSwyNjcsMjcxLDIzMywyMzIsMjM1LDIzNCwyODMsMjc5LDI3NSwyODEsNTAxLDI4NSwyODcsbnVsbCwyODksMjkzLDIzNywyMzYsMjM5LDIzOCw0NjQsbnVsbCwyOTksMzAzLDI5NywzMDks''@;'; put 'put ''MzExLDMxNCwzMTgsMzE2LDMyNCwzMjgsMzI2LDI0MSwyNDMsMjQyLDI0NiwyNDQsNDY2LDMzNywzMzMsMjQ1LDM0MSwzNDUsMzQzLDM0NywzNDksMzUzLDM1MSwzNTcsMzU1LDI1MCwyNDksMjUyLDI1MSwzNjUsNDY4LDM2OSwzNjMsMzcxLDM2NywzNjEsNDcyLDQ3Niw0NzQsNDcwLDM3Mywy''@;'; put 'put ''NTMsMjU1LDM3NSwzNzgsMzgyLDM4MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTk5NzAsMTk5NzIsMTk5NzMsMTk5ODAsMTk5ODYsMTk5OTksMjAwMDMs''@;'; put 'put ''MjAwMDQsMjAwMDgsMjAwMTEsMjAwMTQsMjAwMTUsMjAwMTYsMjAwMjEsMjAwMzIsMjAwMzMsMjAwMzYsMjAwMzksMjAwNDksMjAwNTgsMjAwNjAsMjAwNjcsMjAwNzIsMjAwNzMsMjAwODQsMjAwODUsMjAwODksMjAwOTUsMjAxMDksMjAxMTgsMjAxMTksMjAxMjUsMjAxNDMsMjAxNTMsMjAx''@;'; put 'put ''NjMsMjAxNzYsMjAxODYsMjAxODcsMjAxOTIsMjAxOTMsMjAxOTQsMjAyMDAsMjAyMDcsMjAyMDksMjAyMTEsMjAyMTMsMjAyMjEsMjAyMjIsMjAyMjMsMjAyMjQsMjAyMjYsMjAyMjcsMjAyMzIsMjAyMzUsMjAyMzYsMjAyNDIsMjAyNDUsMjAyNDYsMjAyNDcsMjAyNDksMjAyNzAsMjAyNzMs''@;'; put 'put ''MjAzMjAsMjAyNzUsMjAyNzcsMjAyNzksMjAyODEsMjAyODMsMjAyODYsMjAyODgsMjAyOTAsMjAyOTYsMjAyOTcsMjAyOTksMjAzMDAsMjAzMDYsMjAzMDgsMjAzMTAsMjAzMTIsMjAzMTksMjAzMjMsMjAzMzAsMjAzMzIsMjAzMzQsMjAzMzcsMjAzNDMsMjAzNDQsMjAzNDUsMjAzNDYsMjAz''@;'; put 'put ''NDksMjAzNTAsMjAzNTMsMjAzNTQsMjAzNTYsMjAzNTcsMjAzNjEsMjAzNjIsMjAzNjQsMjAzNjYsMjAzNjgsMjAzNzAsMjAzNzEsMjAzNzIsMjAzNzUsMjAzNzcsMjAzNzgsMjAzODIsMjAzODMsMjA0MDIsMjA0MDcsMjA0MDksMjA0MTEsMjA0MTIsMjA0MTMsMjA0MTQsMjA0MTYsMjA0MTcs''@;'; put 'put ''MjA0MjEsMjA0MjIsMjA0MjQsMjA0MjUsMjA0MjcsMjA0MjgsMjA0MjksMjA0MzEsMjA0MzQsMjA0NDQsMjA0NDgsMjA0NTAsMjA0NjQsMjA0NjYsMjA0NzYsMjA0NzcsMjA0NzksMjA0ODAsMjA0ODEsMjA0ODQsMjA0ODcsMjA0OTAsMjA0OTIsMjA0OTQsMjA0OTYsMjA0OTksMjA1MDMsMjA1''@;'; put 'put ''MDQsMjA1MDcsMjA1MDgsMjA1MDksMjA1MTAsMjA1MTQsMjA1MTksMjA1MjYsMjA1MjgsMjA1MzAsMjA1MzEsMjA1MzMsMjA1NDQsMjA1NDUsMjA1NDYsMjA1NDksMjA1NTAsMjA1NTQsMjA1NTYsMjA1NTgsMjA1NjEsMjA1NjIsMjA1NjMsMjA1NjcsMjA1NjksMjA1NzUsMjA1NzYsMjA1Nzgs''@;'; put 'put ''MjA1NzksMjA1ODIsMjA1ODMsMjA1ODYsMjA1ODksMjA1OTIsMjA1OTMsMjA1MzksMjA2MDksMjA2MTEsMjA2MTIsMjA2MTQsMjA2MTgsMjA2MjIsMjA2MjMsMjA2MjQsMjA2MjYsMjA2MjcsMjA2MjgsMjA2MzAsMjA2MzUsMjA2MzYsMjA2MzgsMjA2MzksMjA2NDAsMjA2NDEsMjA2NDIsMjA2''@;'; put 'put ''NTAsMjA2NTUsMjA2NTYsMjA2NjUsMjA2NjYsMjA2NjksMjA2NzIsMjA2NzUsMjA2NzYsMjA2NzksMjA2ODQsMjA2ODYsMjA2ODgsMjA2OTEsMjA2OTIsMjA2OTYsMjA3MDAsMjA3MDEsMjA3MDMsMjA3MDYsMjA3MDgsMjA3MTAsMjA3MTIsMjA3MTMsMjA3MTksMjA3MjEsMjA3MjYsMjA3MzAs''@;'; put 'put ''MjA3MzQsMjA3MzksMjA3NDIsMjA3NDMsMjA3NDQsMjA3NDcsMjA3NDgsMjA3NDksMjA3NTAsMjA3MjIsMjA3NTIsMjA3NTksMjA3NjEsMjA3NjMsMjA3NjQsMjA3NjUsMjA3NjYsMjA3NzEsMjA3NzUsMjA3NzYsMjA3ODAsMjA3ODEsMjA3ODMsMjA3ODUsMjA3ODcsMjA3ODgsMjA3ODksMjA3''@;'; put 'put ''OTIsMjA3OTMsMjA4MDIsMjA4MTAsMjA4MTUsMjA4MTksMjA4MjEsMjA4MjMsMjA4MjQsMjA4MzEsMjA4MzYsMjA4MzgsMjA4NjIsMjA4NjcsMjA4NjgsMjA4NzUsMjA4NzgsMjA4ODgsMjA4OTMsMjA4OTcsMjA4OTksMjA5MDksMjA5MjAsMjA5MjIsMjA5MjQsMjA5MjYsMjA5MjcsMjA5MzAs''@;'; put 'put ''MjA5MzYsMjA5NDMsMjA5NDUsMjA5NDYsMjA5NDcsMjA5NDksMjA5NTIsMjA5NTgsMjA5NjIsMjA5NjUsMjA5NzQsMjA5NzgsMjA5NzksMjA5ODAsMjA5ODMsMjA5OTMsMjA5OTQsMjA5OTcsMjEwMTAsMjEwMTEsMjEwMTMsMjEwMTQsMjEwMTYsMjEwMjYsMjEwMzIsMjEwNDEsMjEwNDIsMjEw''@;'; put 'put ''NDUsMjEwNTIsMjEwNjEsMjEwNjUsMjEwNzcsMjEwNzksMjEwODAsMjEwODIsMjEwODQsMjEwODcsMjEwODgsMjEwODksMjEwOTQsMjExMDIsMjExMTEsMjExMTIsMjExMTMsMjExMjAsMjExMjIsMjExMjUsMjExMzAsMjExMzIsMjExMzksMjExNDEsMjExNDIsMjExNDMsMjExNDQsMjExNDYs''@;'; put 'put ''MjExNDgsMjExNTYsMjExNTcsMjExNTgsMjExNTksMjExNjcsMjExNjgsMjExNzQsMjExNzUsMjExNzYsMjExNzgsMjExNzksMjExODEsMjExODQsMjExODgsMjExOTAsMjExOTIsMjExOTYsMjExOTksMjEyMDEsMjEyMDQsMjEyMDYsMjEyMTEsMjEyMTIsMjEyMTcsMjEyMjEsMjEyMjQsMjEy''@;'; put 'put ''MjUsMjEyMjYsMjEyMjgsMjEyMzIsMjEyMzMsMjEyMzYsMjEyMzgsMjEyMzksMjEyNDgsMjEyNTEsMjEyNTgsMjEyNTksMjEyNjAsMjEyNjUsMjEyNjcsMjEyNzIsMjEyNzUsMjEyNzYsMjEyNzgsMjEyNzksMjEyODUsMjEyODcsMjEyODgsMjEyODksMjEyOTEsMjEyOTIsMjEyOTMsMjEyOTYs''@;'; put 'put ''MjEyOTgsMjEzMDEsMjEzMDgsMjEzMDksMjEzMTAsMjEzMTQsMjEzMjQsMjEzMjMsMjEzMzcsMjEzMzksMjEzNDUsMjEzNDcsMjEzNDksMjEzNTYsMjEzNTcsMjEzNjIsMjEzNjksMjEzNzQsMjEzNzksMjEzODMsMjEzODQsMjEzOTAsMjEzOTUsMjEzOTYsMjE0MDEsMjE0MDUsMjE0MDksMjE0''@;'; put 'put ''MTIsMjE0MTgsMjE0MTksMjE0MjMsMjE0MjYsMjE0MjgsMjE0MjksMjE0MzEsMjE0MzIsMjE0MzQsMjE0MzcsMjE0NDAsMjE0NDUsMjE0NTUsMjE0NTgsMjE0NTksMjE0NjEsMjE0NjYsMjE0NjksMjE0NzAsMjE0NzIsMjE0NzgsMjE0NzksMjE0OTMsMjE1MDYsMjE1MjMsMjE1MzAsMjE1Mzcs''@;'; put 'put ''MjE1NDMsMjE1NDQsMjE1NDYsMjE1NTEsMjE1NTMsMjE1NTYsMjE1NTcsMjE1NzEsMjE1NzIsMjE1NzUsMjE1ODEsMjE1ODMsMjE1OTgsMjE2MDIsMjE2MDQsMjE2MDYsMjE2MDcsMjE2MDksMjE2MTEsMjE2MTMsMjE2MTQsMjE2MjAsMjE2MzEsMjE2MzMsMjE2MzUsMjE2MzcsMjE2NDAsMjE2''@;'; put 'put ''NDEsMjE2NDUsMjE2NDksMjE2NTMsMjE2NTQsMjE2NjAsMjE2NjMsMjE2NjUsMjE2NzAsMjE2NzEsMjE2NzMsMjE2NzQsMjE2NzcsMjE2NzgsMjE2ODEsMjE2ODcsMjE2ODksMjE2OTAsMjE2OTEsMjE2OTUsMjE3MDIsMjE3MDYsMjE3MDksMjE3MTAsMjE3MjgsMjE3MzgsMjE3NDAsMjE3NDMs''@;'; put 'put ''MjE3NTAsMjE3NTYsMjE3NTgsMjE3NTksMjE3NjAsMjE3NjEsMjE3NjUsMjE3NjgsMjE3NjksMjE3NzIsMjE3NzMsMjE3NzQsMjE3ODEsMjE4MDIsMjE4MDMsMjE4MTAsMjE4MTMsMjE4MTQsMjE4MTksMjE4MjAsMjE4MjEsMjE4MjUsMjE4MzEsMjE4MzMsMjE4MzQsMjE4MzcsMjE4NDAsMjE4''@;'; put 'put ''NDEsMjE4NDgsMjE4NTAsMjE4NTEsMjE4NTQsMjE4NTYsMjE4NTcsMjE4NjAsMjE4NjIsMjE4ODcsMjE4ODksMjE4OTAsMjE4OTQsMjE4OTYsMjE5MDIsMjE5MDMsMjE5MDUsMjE5MDYsMjE5MDcsMjE5MDgsMjE5MTEsMjE5MjMsMjE5MjQsMjE5MzMsMjE5MzgsMjE5NTEsMjE5NTMsMjE5NTUs''@;'; put 'put ''MjE5NTgsMjE5NjEsMjE5NjMsMjE5NjQsMjE5NjYsMjE5NjksMjE5NzAsMjE5NzEsMjE5NzUsMjE5NzYsMjE5NzksMjE5ODIsMjE5ODYsMjE5OTMsMjIwMDYsMjIwMTUsMjIwMjEsMjIwMjQsMjIwMjYsMjIwMjksMjIwMzAsMjIwMzEsMjIwMzIsMjIwMzMsMjIwMzQsMjIwNDEsMjIwNjAsMjIw''@;'; put 'put ''NjQsMjIwNjcsMjIwNjksMjIwNzEsMjIwNzMsMjIwNzUsMjIwNzYsMjIwNzcsMjIwNzksMjIwODAsMjIwODEsMjIwODMsMjIwODQsMjIwODYsMjIwODksMjIwOTEsMjIwOTMsMjIwOTUsMjIxMDAsMjIxMTAsMjIxMTIsMjIxMTMsMjIxMTQsMjIxMTUsMjIxMTgsMjIxMjEsMjIxMjUsMjIxMjcs''@;'; put 'put ''MjIxMjksMjIxMzAsMjIxMzMsMjIxNDgsMjIxNDksMjIxNTIsMjIxNTUsMjIxNTYsMjIxNjUsMjIxNjksMjIxNzAsMjIxNzMsMjIxNzQsMjIxNzUsMjIxODIsMjIxODMsMjIxODQsMjIxODUsMjIxODcsMjIxODgsMjIxODksMjIxOTMsMjIxOTUsMjIxOTksMjIyMDYsMjIyMTMsMjIyMTcsMjIy''@;'; put 'put ''MTgsMjIyMTksMjIyMjMsMjIyMjQsMjIyMjAsMjIyMjEsMjIyMzMsMjIyMzYsMjIyMzcsMjIyMzksMjIyNDEsMjIyNDQsMjIyNDUsMjIyNDYsMjIyNDcsMjIyNDgsMjIyNTcsMjIyNTEsMjIyNTMsMjIyNjIsMjIyNjMsMjIyNzMsMjIyNzQsMjIyNzksMjIyODIsMjIyODQsMjIyODksMjIyOTMs''@;'; put 'put ''MjIyOTgsMjIyOTksMjIzMDEsMjIzMDQsMjIzMDYsMjIzMDcsMjIzMDgsMjIzMDksMjIzMTMsMjIzMTQsMjIzMTYsMjIzMTgsMjIzMTksMjIzMjMsMjIzMjQsMjIzMzMsMjIzMzQsMjIzMzUsMjIzNDEsMjIzNDIsMjIzNDgsMjIzNDksMjIzNTQsMjIzNzAsMjIzNzMsMjIzNzUsMjIzNzYsMjIz''@;'; put 'put ''NzksMjIzODEsMjIzODIsMjIzODMsMjIzODQsMjIzODUsMjIzODcsMjIzODgsMjIzODksMjIzOTEsMjIzOTMsMjIzOTQsMjIzOTUsMjIzOTYsMjIzOTgsMjI0MDEsMjI0MDMsMjI0MTIsMjI0MjAsMjI0MjMsMjI0MjUsMjI0MjYsMjI0MjgsMjI0MjksMjI0MzAsMjI0MzEsMjI0MzMsMjI0MjEs''@;'; put 'put ''MjI0MzksMjI0NDAsMjI0NDEsMjI0NDQsMjI0NTYsMjI0NjEsMjI0NzEsMjI0NzIsMjI0NzYsMjI0NzksMjI0ODUsMjI0OTMsMjI0OTQsMjI1MDAsMjI1MDIsMjI1MDMsMjI1MDUsMjI1MDksMjI1MTIsMjI1MTcsMjI1MTgsMjI1MjAsMjI1MjUsMjI1MjYsMjI1MjcsMjI1MzEsMjI1MzIsMjI1''@;'; put 'put ''MzYsMjI1MzcsMjI0OTcsMjI1NDAsMjI1NDEsMjI1NTUsMjI1NTgsMjI1NTksMjI1NjAsMjI1NjYsMjI1NjcsMjI1NzMsMjI1NzgsMjI1ODUsMjI1OTEsMjI2MDEsMjI2MDQsMjI2MDUsMjI2MDcsMjI2MDgsMjI2MTMsMjI2MjMsMjI2MjUsMjI2MjgsMjI2MzEsMjI2MzIsMjI2NDgsMjI2NTIs''@;'; put 'put ''MjI2NTUsMjI2NTYsMjI2NTcsMjI2NjMsMjI2NjQsMjI2NjUsMjI2NjYsMjI2NjgsMjI2NjksMjI2NzEsMjI2NzIsMjI2NzYsMjI2NzgsMjI2ODUsMjI2ODgsMjI2ODksMjI2OTAsMjI2OTQsMjI2OTcsMjI3MDUsMjI3MDYsMjI3MjQsMjI3MTYsMjI3MjIsMjI3MjgsMjI3MzMsMjI3MzQsMjI3''@;'; put 'put ''MzYsMjI3MzgsMjI3NDAsMjI3NDIsMjI3NDYsMjI3NDksMjI3NTMsMjI3NTQsMjI3NjEsMjI3NzEsMjI3ODksMjI3OTAsMjI3OTUsMjI3OTYsMjI4MDIsMjI4MDMsMjI4MDQsMzQzNjksMjI4MTMsMjI4MTcsMjI4MTksMjI4MjAsMjI4MjQsMjI4MzEsMjI4MzIsMjI4MzUsMjI4MzcsMjI4Mzgs''@;'; put 'put ''MjI4NDcsMjI4NTEsMjI4NTQsMjI4NjYsMjI4NjcsMjI4NzMsMjI4NzUsMjI4NzcsMjI4NzgsMjI4NzksMjI4ODEsMjI4ODMsMjI4OTEsMjI4OTMsMjI4OTUsMjI4OTgsMjI5MDEsMjI5MDIsMjI5MDUsMjI5MDcsMjI5MDgsMjI5MjMsMjI5MjQsMjI5MjYsMjI5MzAsMjI5MzMsMjI5MzUsMjI5''@;'; put 'put ''NDMsMjI5NDgsMjI5NTEsMjI5NTcsMjI5NTgsMjI5NTksMjI5NjAsMjI5NjMsMjI5NjcsMjI5NzAsMjI5NzIsMjI5NzcsMjI5NzksMjI5ODAsMjI5ODQsMjI5ODYsMjI5ODksMjI5OTQsMjMwMDUsMjMwMDYsMjMwMDcsMjMwMTEsMjMwMTIsMjMwMTUsMjMwMjIsMjMwMjMsMjMwMjUsMjMwMjYs''@;'; put 'put ''MjMwMjgsMjMwMzEsMjMwNDAsMjMwNDQsMjMwNTIsMjMwNTMsMjMwNTQsMjMwNTgsMjMwNTksMjMwNzAsMjMwNzUsMjMwNzYsMjMwNzksMjMwODAsMjMwODIsMjMwODUsMjMwODgsMjMxMDgsMjMxMDksMjMxMTEsMjMxMTIsMjMxMTYsMjMxMjAsMjMxMjUsMjMxMzQsMjMxMzksMjMxNDEsMjMx''@;'; put 'put ''NDMsMjMxNDksMjMxNTksMjMxNjIsMjMxNjMsMjMxNjYsMjMxNzksMjMxODQsMjMxODcsMjMxOTAsMjMxOTMsMjMxOTYsMjMxOTgsMjMxOTksMjMyMDAsMjMyMDIsMjMyMDcsMjMyMTIsMjMyMTcsMjMyMTgsMjMyMTksMjMyMjEsMjMyMjQsMjMyMjYsMjMyMjcsMjMyMzEsMjMyMzYsMjMyMzgs''@;'; put 'put ''MjMyNDAsMjMyNDcsMjMyNTgsMjMyNjAsMjMyNjQsMjMyNjksMjMyNzQsMjMyNzgsMjMyODUsMjMyODYsMjMyOTMsMjMyOTYsMjMyOTcsMjMzMDQsMjMzMTksMjMzNDgsMjMzMjEsMjMzMjMsMjMzMjUsMjMzMjksMjMzMzMsMjMzNDEsMjMzNTIsMjMzNjEsMjMzNzEsMjMzNzIsMjMzNzgsMjMz''@;'; put 'put ''ODIsMjMzOTAsMjM0MDAsMjM0MDYsMjM0MDcsMjM0MjAsMjM0MjEsMjM0MjIsMjM0MjMsMjM0MjUsMjM0MjgsMjM0MzAsMjM0MzQsMjM0MzgsMjM0NDAsMjM0NDEsMjM0NDMsMjM0NDQsMjM0NDYsMjM0NjQsMjM0NjUsMjM0NjgsMjM0NjksMjM0NzEsMjM0NzMsMjM0NzQsMjM0NzksMjM0ODIs''@;'; put 'put ''MjM0ODQsMjM0ODgsMjM0ODksMjM1MDEsMjM1MDMsMjM1MTAsMjM1MTEsMjM1MTIsMjM1MTMsMjM1MTQsMjM1MjAsMjM1MzUsMjM1MzcsMjM1NDAsMjM1NDksMjM1NjQsMjM1NzUsMjM1ODIsMjM1ODMsMjM1ODcsMjM1OTAsMjM1OTMsMjM1OTUsMjM1OTYsMjM1OTgsMjM2MDAsMjM2MDIsMjM2''@;'; put 'put ''MDUsMjM2MDYsMjM2NDEsMjM2NDIsMjM2NDQsMjM2NTAsMjM2NTEsMjM2NTUsMjM2NTYsMjM2NTcsMjM2NjEsMjM2NjQsMjM2NjgsMjM2NjksMjM2NzQsMjM2NzUsMjM2NzYsMjM2NzcsMjM2ODcsMjM2ODgsMjM2OTAsMjM2OTUsMjM2OTgsMjM3MDksMjM3MTEsMjM3MTIsMjM3MTQsMjM3MTUs''@;'; put 'put ''MjM3MTgsMjM3MjIsMjM3MzAsMjM3MzIsMjM3MzMsMjM3MzgsMjM3NTMsMjM3NTUsMjM3NjIsMjM3NzMsMjM3NjcsMjM3OTAsMjM3OTMsMjM3OTQsMjM3OTYsMjM4MDksMjM4MTQsMjM4MjEsMjM4MjYsMjM4NTEsMjM4NDMsMjM4NDQsMjM4NDYsMjM4NDcsMjM4NTcsMjM4NjAsMjM4NjUsMjM4''@;'; put 'put ''NjksMjM4NzEsMjM4NzQsMjM4NzUsMjM4NzgsMjM4ODAsMjM4OTMsMjM4ODksMjM4OTcsMjM4ODIsMjM5MDMsMjM5MDQsMjM5MDUsMjM5MDYsMjM5MDgsMjM5MTQsMjM5MTcsMjM5MjAsMjM5MjksMjM5MzAsMjM5MzQsMjM5MzUsMjM5MzcsMjM5MzksMjM5NDQsMjM5NDYsMjM5NTQsMjM5NTUs''@;'; put 'put ''MjM5NTYsMjM5NTcsMjM5NjEsMjM5NjMsMjM5NjcsMjM5NjgsMjM5NzUsMjM5NzksMjM5ODQsMjM5ODgsMjM5OTIsMjM5OTMsMjQwMDMsMjQwMDcsMjQwMTEsMjQwMTYsMjQwMTQsMjQwMjQsMjQwMjUsMjQwMzIsMjQwMzYsMjQwNDEsMjQwNTYsMjQwNTcsMjQwNjQsMjQwNzEsMjQwNzcsMjQw''@;'; put 'put ''ODIsMjQwODQsMjQwODUsMjQwODgsMjQwOTUsMjQwOTYsMjQxMTAsMjQxMDQsMjQxMTQsMjQxMTcsMjQxMjYsMjQxMzksMjQxNDQsMjQxMzcsMjQxNDUsMjQxNTAsMjQxNTIsMjQxNTUsMjQxNTYsMjQxNTgsMjQxNjgsMjQxNzAsMjQxNzEsMjQxNzIsMjQxNzMsMjQxNzQsMjQxNzYsMjQxOTIs''@;'; put 'put ''MjQyMDMsMjQyMDYsMjQyMjYsMjQyMjgsMjQyMjksMjQyMzIsMjQyMzQsMjQyMzYsMjQyNDEsMjQyNDMsMjQyNTMsMjQyNTQsMjQyNTUsMjQyNjIsMjQyNjgsMjQyNjcsMjQyNzAsMjQyNzMsMjQyNzQsMjQyNzYsMjQyNzcsMjQyODQsMjQyODYsMjQyOTMsMjQyOTksMjQzMjIsMjQzMjYsMjQz''@;'; put 'put ''MjcsMjQzMjgsMjQzMzQsMjQzNDUsMjQzNDgsMjQzNDksMjQzNTMsMjQzNTQsMjQzNTUsMjQzNTYsMjQzNjAsMjQzNjMsMjQzNjQsMjQzNjYsMjQzNjgsMjQzNzIsMjQzNzQsMjQzNzksMjQzODEsMjQzODMsMjQzODQsMjQzODgsMjQzODksMjQzOTEsMjQzOTcsMjQ0MDAsMjQ0MDQsMjQ0MDgs''@;'; put 'put ''MjQ0MTEsMjQ0MTYsMjQ0MTksMjQ0MjAsMjQ0MjMsMjQ0MzEsMjQ0MzQsMjQ0MzYsMjQ0MzcsMjQ0NDAsMjQ0NDIsMjQ0NDUsMjQ0NDYsMjQ0NTcsMjQ0NjEsMjQ0NjMsMjQ0NzAsMjQ0NzYsMjQ0NzcsMjQ0ODIsMjQ0ODcsMjQ0OTEsMjQ0ODQsMjQ0OTIsMjQ0OTUsMjQ0OTYsMjQ0OTcsMjQ1''@;'; put 'put ''MDQsMjQ1MTYsMjQ1MTksMjQ1MjAsMjQ1MjEsMjQ1MjMsMjQ1MjgsMjQ1MjksMjQ1MzAsMjQ1MzEsMjQ1MzIsMjQ1NDIsMjQ1NDUsMjQ1NDYsMjQ1NTIsMjQ1NTMsMjQ1NTQsMjQ1NTYsMjQ1NTcsMjQ1NTgsMjQ1NTksMjQ1NjIsMjQ1NjMsMjQ1NjYsMjQ1NzAsMjQ1NzIsMjQ1ODMsMjQ1ODYs''@;'; put 'put ''MjQ1ODksMjQ1OTUsMjQ1OTYsMjQ1OTksMjQ2MDAsMjQ2MDIsMjQ2MDcsMjQ2MTIsMjQ2MjEsMjQ2MjcsMjQ2MjksMjQ2NDAsMjQ2NDcsMjQ2NDgsMjQ2NDksMjQ2NTIsMjQ2NTcsMjQ2NjAsMjQ2NjIsMjQ2NjMsMjQ2NjksMjQ2NzMsMjQ2NzksMjQ2ODksMjQ3MDIsMjQ3MDMsMjQ3MDYsMjQ3''@;'; put 'put ''MTAsMjQ3MTIsMjQ3MTQsMjQ3MTgsMjQ3MjEsMjQ3MjMsMjQ3MjUsMjQ3MjgsMjQ3MzMsMjQ3MzQsMjQ3MzgsMjQ3NDAsMjQ3NDEsMjQ3NDQsMjQ3NTIsMjQ3NTMsMjQ3NTksMjQ3NjMsMjQ3NjYsMjQ3NzAsMjQ3NzIsMjQ3NzYsMjQ3NzcsMjQ3NzgsMjQ3NzksMjQ3ODIsMjQ3ODMsMjQ3ODgs''@;'; put 'put ''MjQ3ODksMjQ3OTMsMjQ3OTUsMjQ3OTcsMjQ3OTgsMjQ4MDIsMjQ4MDUsMjQ4MTgsMjQ4MjEsMjQ4MjQsMjQ4MjgsMjQ4MjksMjQ4MzQsMjQ4MzksMjQ4NDIsMjQ4NDQsMjQ4NDgsMjQ4NDksMjQ4NTAsMjQ4NTEsMjQ4NTIsMjQ4NTQsMjQ4NTUsMjQ4NTcsMjQ4NjAsMjQ4NjIsMjQ4NjYsMjQ4''@;'; put 'put ''NzQsMjQ4NzUsMjQ4ODAsMjQ4ODEsMjQ4ODUsMjQ4ODYsMjQ4ODcsMjQ4ODksMjQ4OTcsMjQ5MDEsMjQ5MDIsMjQ5MDUsMjQ5MjYsMjQ5MjgsMjQ5NDAsMjQ5NDYsMjQ5NTIsMjQ5NTUsMjQ5NTYsMjQ5NTksMjQ5NjAsMjQ5NjEsMjQ5NjMsMjQ5NjQsMjQ5NzEsMjQ5NzMsMjQ5NzgsMjQ5Nzks''@;'; put 'put ''MjQ5ODMsMjQ5ODQsMjQ5ODgsMjQ5ODksMjQ5OTEsMjQ5OTIsMjQ5OTcsMjVlMywyNTAwMiwyNTAwNSwyNTAxNiwyNTAxNywyNTAyMCwyNTAyNCwyNTAyNSwyNTAyNiwyNTAzOCwyNTAzOSwyNTA0NSwyNTA1MiwyNTA1MywyNTA1NCwyNTA1NSwyNTA1NywyNTA1OCwyNTA2MywyNTA2NSwyNTA2''@;'; put 'put ''MSwyNTA2OCwyNTA2OSwyNTA3MSwyNTA4OSwyNTA5MSwyNTA5MiwyNTA5NSwyNTEwNywyNTEwOSwyNTExNiwyNTEyMCwyNTEyMiwyNTEyMywyNTEyNywyNTEyOSwyNTEzMSwyNTE0NSwyNTE0OSwyNTE1NCwyNTE1NSwyNTE1NiwyNTE1OCwyNTE2NCwyNTE2OCwyNTE2OSwyNTE3MCwyNTE3Miwy''@;'; put 'put ''NTE3NCwyNTE3OCwyNTE4MCwyNTE4OCwyNTE5NywyNTE5OSwyNTIwMywyNTIxMCwyNTIxMywyNTIyOSwyNTIzMCwyNTIzMSwyNTIzMiwyNTI1NCwyNTI1NiwyNTI2NywyNTI3MCwyNTI3MSwyNTI3NCwyNTI3OCwyNTI3OSwyNTI4NCwyNTI5NCwyNTMwMSwyNTMwMiwyNTMwNiwyNTMyMiwyNTMz''@;'; put 'put ''MCwyNTMzMiwyNTM0MCwyNTM0MSwyNTM0NywyNTM0OCwyNTM1NCwyNTM1NSwyNTM1NywyNTM2MCwyNTM2MywyNTM2NiwyNTM2OCwyNTM4NSwyNTM4NiwyNTM4OSwyNTM5NywyNTM5OCwyNTQwMSwyNTQwNCwyNTQwOSwyNTQxMCwyNTQxMSwyNTQxMiwyNTQxNCwyNTQxOCwyNTQxOSwyNTQyMiwy''@;'; put 'put ''NTQyNiwyNTQyNywyNTQyOCwyNTQzMiwyNTQzNSwyNTQ0NSwyNTQ0NiwyNTQ1MiwyNTQ1MywyNTQ1NywyNTQ2MCwyNTQ2MSwyNTQ2NCwyNTQ2OCwyNTQ2OSwyNTQ3MSwyNTQ3NCwyNTQ3NiwyNTQ3OSwyNTQ4MiwyNTQ4OCwyNTQ5MiwyNTQ5MywyNTQ5NywyNTQ5OCwyNTUwMiwyNTUwOCwyNTUx''@;'; put 'put ''MCwyNTUxNywyNTUxOCwyNTUxOSwyNTUzMywyNTUzNywyNTU0MSwyNTU0NCwyNTU1MCwyNTU1MywyNTU1NSwyNTU1NiwyNTU1NywyNTU2NCwyNTU2OCwyNTU3MywyNTU3OCwyNTU4MCwyNTU4NiwyNTU4NywyNTU4OSwyNTU5MiwyNTU5MywyNTYwOSwyNTYxMCwyNTYxNiwyNTYxOCwyNTYyMCwy''@;'; put 'put ''NTYyNCwyNTYzMCwyNTYzMiwyNTYzNCwyNTYzNiwyNTYzNywyNTY0MSwyNTY0MiwyNTY0NywyNTY0OCwyNTY1MywyNTY2MSwyNTY2MywyNTY3NSwyNTY3OSwyNTY4MSwyNTY4MiwyNTY4MywyNTY4NCwyNTY5MCwyNTY5MSwyNTY5MiwyNTY5MywyNTY5NSwyNTY5NiwyNTY5NywyNTY5OSwyNTcw''@;'; put 'put ''OSwyNTcxNSwyNTcxNiwyNTcyMywyNTcyNSwyNTczMywyNTczNSwyNTc0MywyNTc0NCwyNTc0NSwyNTc1MiwyNTc1MywyNTc1NSwyNTc1NywyNTc1OSwyNTc2MSwyNTc2MywyNTc2NiwyNTc2OCwyNTc3MiwyNTc3OSwyNTc4OSwyNTc5MCwyNTc5MSwyNTc5NiwyNTgwMSwyNTgwMiwyNTgwMywy''@;'; put 'put ''NTgwNCwyNTgwNiwyNTgwOCwyNTgwOSwyNTgxMywyNTgxNSwyNTgyOCwyNTgyOSwyNTgzMywyNTgzNCwyNTgzNywyNTg0MCwyNTg0NSwyNTg0NywyNTg1MSwyNTg1NSwyNTg1NywyNTg2MCwyNTg2NCwyNTg2NSwyNTg2NiwyNTg3MSwyNTg3NSwyNTg3NiwyNTg3OCwyNTg4MSwyNTg4MywyNTg4''@;'; put 'put ''NiwyNTg4NywyNTg5MCwyNTg5NCwyNTg5NywyNTkwMiwyNTkwNSwyNTkxNCwyNTkxNiwyNTkxNywyNTkyMywyNTkyNywyNTkyOSwyNTkzNiwyNTkzOCwyNTk0MCwyNTk1MSwyNTk1MiwyNTk1OSwyNTk2MywyNTk3OCwyNTk4MSwyNTk4NSwyNTk4OSwyNTk5NCwyNjAwMiwyNjAwNSwyNjAwOCwy''@;'; put 'put ''NjAxMywyNjAxNiwyNjAxOSwyNjAyMiwyNjAzMCwyNjAzNCwyNjAzNSwyNjAzNiwyNjA0NywyNjA1MCwyNjA1NiwyNjA1NywyNjA2MiwyNjA2NCwyNjA2OCwyNjA3MCwyNjA3MiwyNjA3OSwyNjA5NiwyNjA5OCwyNjEwMCwyNjEwMSwyNjEwNSwyNjExMCwyNjExMSwyNjExMiwyNjExNiwyNjEy''@;'; put 'put ''MCwyNjEyMSwyNjEyNSwyNjEyOSwyNjEzMCwyNjEzMywyNjEzNCwyNjE0MSwyNjE0MiwyNjE0NSwyNjE0NiwyNjE0NywyNjE0OCwyNjE1MCwyNjE1MywyNjE1NCwyNjE1NSwyNjE1NiwyNjE1OCwyNjE2MCwyNjE2MSwyNjE2MywyNjE2OSwyNjE2NywyNjE3NiwyNjE4MSwyNjE4MiwyNjE4Niwy''@;'; put 'put ''NjE4OCwyNjE5MywyNjE5MCwyNjE5OSwyNjIwMCwyNjIwMSwyNjIwMywyNjIwNCwyNjIwOCwyNjIwOSwyNjM2MywyNjIxOCwyNjIxOSwyNjIyMCwyNjIzOCwyNjIyNywyNjIyOSwyNjIzOSwyNjIzMSwyNjIzMiwyNjIzMywyNjIzNSwyNjI0MCwyNjIzNiwyNjI1MSwyNjI1MiwyNjI1MywyNjI1''@;'; put 'put ''NiwyNjI1OCwyNjI2NSwyNjI2NiwyNjI2NywyNjI2OCwyNjI3MSwyNjI3MiwyNjI3NiwyNjI4NSwyNjI4OSwyNjI5MCwyNjI5MywyNjI5OSwyNjMwMywyNjMwNCwyNjMwNiwyNjMwNywyNjMxMiwyNjMxNiwyNjMxOCwyNjMxOSwyNjMyNCwyNjMzMSwyNjMzNSwyNjM0NCwyNjM0NywyNjM0OCwy''@;'; put 'put ''NjM1MCwyNjM2MiwyNjM3MywyNjM3NSwyNjM4MiwyNjM4NywyNjM5MywyNjM5NiwyNjQwMCwyNjQwMiwyNjQxOSwyNjQzMCwyNjQzNywyNjQzOSwyNjQ0MCwyNjQ0NCwyNjQ1MiwyNjQ1MywyNjQ2MSwyNjQ3MCwyNjQ3NiwyNjQ3OCwyNjQ4NCwyNjQ4NiwyNjQ5MSwyNjQ5NywyNjUwMCwyNjUx''@;'; put 'put ''MCwyNjUxMSwyNjUxMywyNjUxNSwyNjUxOCwyNjUyMCwyNjUyMSwyNjUyMywyNjU0NCwyNjU0NSwyNjU0NiwyNjU0OSwyNjU1NSwyNjU1NiwyNjU1NywyNjYxNywyNjU2MCwyNjU2MiwyNjU2MywyNjU2NSwyNjU2OCwyNjU2OSwyNjU3OCwyNjU4MywyNjU4NSwyNjU4OCwyNjU5MywyNjU5OCwy''@;'; put 'put ''NjYwOCwyNjYxMCwyNjYxNCwyNjYxNSwyNjcwNiwyNjY0NCwyNjY0OSwyNjY1MywyNjY1NSwyNjY2NCwyNjY2MywyNjY2OCwyNjY2OSwyNjY3MSwyNjY3MiwyNjY3MywyNjY3NSwyNjY4MywyNjY4NywyNjY5MiwyNjY5MywyNjY5OCwyNjcwMCwyNjcwOSwyNjcxMSwyNjcxMiwyNjcxNSwyNjcz''@;'; put 'put ''MSwyNjczNCwyNjczNSwyNjczNiwyNjczNywyNjczOCwyNjc0MSwyNjc0NSwyNjc0NiwyNjc0NywyNjc0OCwyNjc1NCwyNjc1NiwyNjc1OCwyNjc2MCwyNjc3NCwyNjc3NiwyNjc3OCwyNjc4MCwyNjc4NSwyNjc4NywyNjc4OSwyNjc5MywyNjc5NCwyNjc5OCwyNjgwMiwyNjgxMSwyNjgyMSwy''@;'; put 'put ''NjgyNCwyNjgyOCwyNjgzMSwyNjgzMiwyNjgzMywyNjgzNSwyNjgzOCwyNjg0MSwyNjg0NCwyNjg0NSwyNjg1MywyNjg1NiwyNjg1OCwyNjg1OSwyNjg2MCwyNjg2MSwyNjg2NCwyNjg2NSwyNjg2OSwyNjg3MCwyNjg3NSwyNjg3NiwyNjg3NywyNjg4NiwyNjg4OSwyNjg5MCwyNjg5NiwyNjg5''@;'; put 'put ''NywyNjg5OSwyNjkwMiwyNjkwMywyNjkyOSwyNjkzMSwyNjkzMywyNjkzNiwyNjkzOSwyNjk0NiwyNjk0OSwyNjk1MywyNjk1OCwyNjk2NywyNjk3MSwyNjk3OSwyNjk4MCwyNjk4MSwyNjk4MiwyNjk4NCwyNjk4NSwyNjk4OCwyNjk5MiwyNjk5MywyNjk5NCwyNzAwMiwyNzAwMywyNzAwNywy''@;'; put 'put ''NzAwOCwyNzAyMSwyNzAyNiwyNzAzMCwyNzAzMiwyNzA0MSwyNzA0NSwyNzA0NiwyNzA0OCwyNzA1MSwyNzA1MywyNzA1NSwyNzA2MywyNzA2NCwyNzA2NiwyNzA2OCwyNzA3NywyNzA4MCwyNzA4OSwyNzA5NCwyNzA5NSwyNzEwNiwyNzEwOSwyNzExOCwyNzExOSwyNzEyMSwyNzEyMywyNzEy''@;'; put 'put ''NSwyNzEzNCwyNzEzNiwyNzEzNywyNzEzOSwyNzE1MSwyNzE1MywyNzE1NywyNzE2MiwyNzE2NSwyNzE2OCwyNzE3MiwyNzE3NiwyNzE4NCwyNzE4NiwyNzE4OCwyNzE5MSwyNzE5NSwyNzE5OCwyNzE5OSwyNzIwNSwyNzIwNiwyNzIwOSwyNzIxMCwyNzIxNCwyNzIxNiwyNzIxNywyNzIxOCwy''@;'; put 'put ''NzIyMSwyNzIyMiwyNzIyNywyNzIzNiwyNzIzOSwyNzI0MiwyNzI0OSwyNzI1MSwyNzI2MiwyNzI2NSwyNzI2NywyNzI3MCwyNzI3MSwyNzI3MywyNzI3NSwyNzI4MSwyNzI5MSwyNzI5MywyNzI5NCwyNzI5NSwyNzMwMSwyNzMwNywyNzMxMSwyNzMxMiwyNzMxMywyNzMxNiwyNzMyNSwyNzMy''@;'; put 'put ''NiwyNzMyNywyNzMzNCwyNzMzNywyNzMzNiwyNzM0MCwyNzM0NCwyNzM0OCwyNzM0OSwyNzM1MCwyNzM1NiwyNzM1NywyNzM2NCwyNzM2NywyNzM3MiwyNzM3NiwyNzM3NywyNzM3OCwyNzM4OCwyNzM4OSwyNzM5NCwyNzM5NSwyNzM5OCwyNzM5OSwyNzQwMSwyNzQwNywyNzQwOCwyNzQwOSwy''@;'; put 'put ''NzQxNSwyNzQxOSwyNzQyMiwyNzQyOCwyNzQzMiwyNzQzNSwyNzQzNiwyNzQzOSwyNzQ0NSwyNzQ0NiwyNzQ1MSwyNzQ1NSwyNzQ2MiwyNzQ2NiwyNzQ2OSwyNzQ3NCwyNzQ3OCwyNzQ4MCwyNzQ4NSwyNzQ4OCwyNzQ5NSwyNzQ5OSwyNzUwMiwyNzUwNCwyNzUwOSwyNzUxNywyNzUxOCwyNzUy''@;'; put 'put ''MiwyNzUyNSwyNzU0MywyNzU0NywyNzU1MSwyNzU1MiwyNzU1NCwyNzU1NSwyNzU2MCwyNzU2MSwyNzU2NCwyNzU2NSwyNzU2NiwyNzU2OCwyNzU3NiwyNzU3NywyNzU4MSwyNzU4MiwyNzU4NywyNzU4OCwyNzU5MywyNzU5NiwyNzYwNiwyNzYxMCwyNzYxNywyNzYxOSwyNzYyMiwyNzYyMywy''@;'; put 'put ''NzYzMCwyNzYzMywyNzYzOSwyNzY0MSwyNzY0NywyNzY1MCwyNzY1MiwyNzY1MywyNzY1NywyNzY2MSwyNzY2MiwyNzY2NCwyNzY2NiwyNzY3MywyNzY3OSwyNzY4NiwyNzY4NywyNzY4OCwyNzY5MiwyNzY5NCwyNzY5OSwyNzcwMSwyNzcwMiwyNzcwNiwyNzcwNywyNzcxMSwyNzcyMiwyNzcy''@;'; put 'put ''MywyNzcyNSwyNzcyNywyNzczMCwyNzczMiwyNzczNywyNzczOSwyNzc0MCwyNzc1NSwyNzc1NywyNzc1OSwyNzc2NCwyNzc2NiwyNzc2OCwyNzc2OSwyNzc3MSwyNzc4MSwyNzc4MiwyNzc4MywyNzc4NSwyNzc5NiwyNzc5NywyNzc5OSwyNzgwMCwyNzgwNCwyNzgwNywyNzgyNCwyNzgyNiwy''@;'; put 'put ''NzgyOCwyNzg0MiwyNzg0NiwyNzg1MywyNzg1NSwyNzg1NiwyNzg1NywyNzg1OCwyNzg2MCwyNzg2MiwyNzg2NiwyNzg2OCwyNzg3MiwyNzg3OSwyNzg4MSwyNzg4MywyNzg4NCwyNzg4NiwyNzg5MCwyNzg5MiwyNzkwOCwyNzkxMSwyNzkxNCwyNzkxOCwyNzkxOSwyNzkyMSwyNzkyMywyNzkz''@;'; put 'put ''MCwyNzk0MiwyNzk0MywyNzk0NCwyNzc1MSwyNzk1MCwyNzk1MSwyNzk1MywyNzk2MSwyNzk2NCwyNzk2NywyNzk5MSwyNzk5OCwyNzk5OSwyODAwMSwyODAwNSwyODAwNywyODAxNSwyODAxNiwyODAyOCwyODAzNCwyODAzOSwyODA0OSwyODA1MCwyODA1MiwyODA1NCwyODA1NSwyODA1Niwy''@;'; put 'put ''ODA3NCwyODA3NiwyODA4NCwyODA4NywyODA4OSwyODA5MywyODA5NSwyODEwMCwyODEwNCwyODEwNiwyODExMCwyODExMSwyODExOCwyODEyMywyODEyNSwyODEyNywyODEyOCwyODEzMCwyODEzMywyODEzNywyODE0MywyODE0NCwyODE0OCwyODE1MCwyODE1NiwyODE2MCwyODE2NCwyODE5''@;'; put 'put ''MCwyODE5NCwyODE5OSwyODIxMCwyODIxNCwyODIxNywyODIxOSwyODIyMCwyODIyOCwyODIyOSwyODIzMiwyODIzMywyODIzNSwyODIzOSwyODI0MSwyODI0MiwyODI0MywyODI0NCwyODI0NywyODI1MiwyODI1MywyODI1NCwyODI1OCwyODI1OSwyODI2NCwyODI3NSwyODI4MywyODI4NSwy''@;'; put 'put ''ODMwMSwyODMwNywyODMxMywyODMyMCwyODMyNywyODMzMywyODMzNCwyODMzNywyODMzOSwyODM0NywyODM1MSwyODM1MiwyODM1MywyODM1NSwyODM1OSwyODM2MCwyODM2MiwyODM2NSwyODM2NiwyODM2NywyODM5NSwyODM5NywyODM5OCwyODQwOSwyODQxMSwyODQxMywyODQyMCwyODQy''@;'; put 'put ''NCwyODQyNiwyODQyOCwyODQyOSwyODQzOCwyODQ0MCwyODQ0MiwyODQ0MywyODQ1NCwyODQ1NywyODQ1OCwyODQ2MywyODQ2NCwyODQ2NywyODQ3MCwyODQ3NSwyODQ3NiwyODQ2MSwyODQ5NSwyODQ5NywyODQ5OCwyODQ5OSwyODUwMywyODUwNSwyODUwNiwyODUwOSwyODUxMCwyODUxMywy''@;'; put 'put ''ODUxNCwyODUyMCwyODUyNCwyODU0MSwyODU0MiwyODU0NywyODU1MSwyODU1MiwyODU1NSwyODU1NiwyODU1NywyODU2MCwyODU2MiwyODU2MywyODU2NCwyODU2NiwyODU3MCwyODU3NSwyODU3NiwyODU4MSwyODU4MiwyODU4MywyODU4NCwyODU5MCwyODU5MSwyODU5MiwyODU5NywyODU5''@;'; put 'put ''OCwyODYwNCwyODYxMywyODYxNSwyODYxNiwyODYxOCwyODYzNCwyODYzOCwyODY0OCwyODY0OSwyODY1NiwyODY2MSwyODY2NSwyODY2OCwyODY2OSwyODY3MiwyODY3NywyODY3OCwyODY3OSwyODY4NSwyODY5NSwyODcwNCwyODcwNywyODcxOSwyODcyNCwyODcyNywyODcyOSwyODczMiwy''@;'; put 'put ''ODczOSwyODc0MCwyODc0NCwyODc0NSwyODc0NiwyODc0NywyODc1NiwyODc1NywyODc2NSwyODc2NiwyODc1MCwyODc3MiwyODc3MywyODc4MCwyODc4MiwyODc4OSwyODc5MCwyODc5OCwyODgwMSwyODgwNSwyODgwNiwyODgyMCwyODgyMSwyODgyMiwyODgyMywyODgyNCwyODgyNywyODgz''@;'; put 'put ''NiwyODg0MywyODg0OCwyODg0OSwyODg1MiwyODg1NSwyODg3NCwyODg4MSwyODg4MywyODg4NCwyODg4NSwyODg4NiwyODg4OCwyODg5MiwyODkwMCwyODkyMiwyODkzMSwyODkzMiwyODkzMywyODkzNCwyODkzNSwyODkzOSwyODk0MCwyODk0MywyODk1OCwyODk2MCwyODk3MSwyODk3Mywy''@;'; put 'put ''ODk3NSwyODk3NiwyODk3NywyODk4NCwyODk5MywyODk5NywyODk5OCwyODk5OSwyOTAwMiwyOTAwMywyOTAwOCwyOTAxMCwyOTAxNSwyOTAxOCwyOTAyMCwyOTAyMiwyOTAyNCwyOTAzMiwyOTA0OSwyOTA1NiwyOTA2MSwyOTA2MywyOTA2OCwyOTA3NCwyOTA4MiwyOTA4MywyOTA4OCwyOTA5''@;'; put 'put ''MCwyOTEwMywyOTEwNCwyOTEwNiwyOTEwNywyOTExNCwyOTExOSwyOTEyMCwyOTEyMSwyOTEyNCwyOTEzMSwyOTEzMiwyOTEzOSwyOTE0MiwyOTE0NSwyOTE0NiwyOTE0OCwyOTE3NiwyOTE4MiwyOTE4NCwyOTE5MSwyOTE5MiwyOTE5MywyOTIwMywyOTIwNywyOTIxMCwyOTIxMywyOTIxNSwy''@;'; put 'put ''OTIyMCwyOTIyNywyOTIzMSwyOTIzNiwyOTI0MCwyOTI0MSwyOTI0OSwyOTI1MCwyOTI1MSwyOTI1MywyOTI2MiwyOTI2MywyOTI2NCwyOTI2NywyOTI2OSwyOTI3MCwyOTI3NCwyOTI3NiwyOTI3OCwyOTI4MCwyOTI4MywyOTI4OCwyOTI5MSwyOTI5NCwyOTI5NSwyOTI5NywyOTMwMywyOTMw''@;'; put 'put ''NCwyOTMwNywyOTMwOCwyOTMxMSwyOTMxNiwyOTMyMSwyOTMyNSwyOTMyNiwyOTMzMSwyOTMzOSwyOTM1MiwyOTM1NywyOTM1OCwyOTM2MSwyOTM2NCwyOTM3NCwyOTM3NywyOTM4MywyOTM4NSwyOTM4OCwyOTM5NywyOTM5OCwyOTQwMCwyOTQwNywyOTQxMywyOTQyNywyOTQyOCwyOTQzNCwy''@;'; put 'put ''OTQzNSwyOTQzOCwyOTQ0MiwyOTQ0NCwyOTQ0NSwyOTQ0NywyOTQ1MSwyOTQ1MywyOTQ1OCwyOTQ1OSwyOTQ2NCwyOTQ2NSwyOTQ3MCwyOTQ3NCwyOTQ3NiwyOTQ3OSwyOTQ4MCwyOTQ4NCwyOTQ4OSwyOTQ5MCwyOTQ5MywyOTQ5OCwyOTQ5OSwyOTUwMSwyOTUwNywyOTUxNywyOTUyMCwyOTUy''@;'; put 'put ''MiwyOTUyNiwyOTUyOCwyOTUzMywyOTUzNCwyOTUzNSwyOTUzNiwyOTU0MiwyOTU0MywyOTU0NSwyOTU0NywyOTU0OCwyOTU1MCwyOTU1MSwyOTU1MywyOTU1OSwyOTU2MSwyOTU2NCwyOTU2OCwyOTU2OSwyOTU3MSwyOTU3MywyOTU3NCwyOTU4MiwyOTU4NCwyOTU4NywyOTU4OSwyOTU5MSwy''@;'; put 'put ''OTU5MiwyOTU5NiwyOTU5OCwyOTU5OSwyOTYwMCwyOTYwMiwyOTYwNSwyOTYwNiwyOTYxMCwyOTYxMSwyOTYxMywyOTYyMSwyOTYyMywyOTYyNSwyOTYyOCwyOTYyOSwyOTYzMSwyOTYzNywyOTYzOCwyOTY0MSwyOTY0MywyOTY0NCwyOTY0NywyOTY1MCwyOTY1MSwyOTY1NCwyOTY1NywyOTY2''@;'; put 'put ''MSwyOTY2NSwyOTY2NywyOTY3MCwyOTY3MSwyOTY3MywyOTY4NCwyOTY4NSwyOTY4NywyOTY4OSwyOTY5MCwyOTY5MSwyOTY5MywyOTY5NSwyOTY5NiwyOTY5NywyOTcwMCwyOTcwMywyOTcwNiwyOTcxMywyOTcyMiwyOTcyMywyOTczMiwyOTczNCwyOTczNiwyOTczNywyOTczOCwyOTczOSwy''@;'; put 'put ''OTc0MCwyOTc0MSwyOTc0MiwyOTc0MywyOTc0NCwyOTc0NSwyOTc1MywyOTc2MCwyOTc2MywyOTc2NCwyOTc2NiwyOTc2NywyOTc3MSwyOTc3MywyOTc3NywyOTc3OCwyOTc4MywyOTc4OSwyOTc5NCwyOTc5OCwyOTc5OSwyOTgwMCwyOTgwMywyOTgwNSwyOTgwNiwyOTgwOSwyOTgxMCwyOTgy''@;'; put 'put ''NCwyOTgyNSwyOTgyOSwyOTgzMCwyOTgzMSwyOTgzMywyOTgzOSwyOTg0MCwyOTg0MSwyOTg0MiwyOTg0OCwyOTg0OSwyOTg1MCwyOTg1MiwyOTg1NSwyOTg1NiwyOTg1NywyOTg1OSwyOTg2MiwyOTg2NCwyOTg2NSwyOTg2NiwyOTg2NywyOTg3MCwyOTg3MSwyOTg3MywyOTg3NCwyOTg3Nywy''@;'; put 'put ''OTg4MSwyOTg4MywyOTg4NywyOTg5NiwyOTg5NywyOTkwMCwyOTkwNCwyOTkwNywyOTkxMiwyOTkxNCwyOTkxNSwyOTkxOCwyOTkxOSwyOTkyNCwyOTkyOCwyOTkzMCwyOTkzMSwyOTkzNSwyOTk0MCwyOTk0NiwyOTk0NywyOTk0OCwyOTk1MSwyOTk1OCwyOTk3MCwyOTk3NCwyOTk3NSwyOTk4''@;'; put 'put ''NCwyOTk4NSwyOTk4OCwyOTk5MSwyOTk5MywyOTk5NCwyOTk5OSwzMDAwNiwzMDAwOSwzMDAxMywzMDAxNCwzMDAxNSwzMDAxNiwzMDAxOSwzMDAyMywzMDAyNCwzMDAzMCwzMDAzMiwzMDAzNCwzMDAzOSwzMDA0NiwzMDA0NywzMDA0OSwzMDA2MywzMDA2NSwzMDA3MywzMDA3NCwzMDA3NSwz''@;'; put 'put ''MDA3NiwzMDA3NywzMDA3OCwzMDA4MSwzMDA4NSwzMDA5NiwzMDA5OCwzMDA5OSwzMDEwMSwzMDEwNSwzMDEwOCwzMDExNCwzMDExNiwzMDEzMiwzMDEzOCwzMDE0MywzMDE0NCwzMDE0NSwzMDE0OCwzMDE1MCwzMDE1NiwzMDE1OCwzMDE1OSwzMDE2NywzMDE3MiwzMDE3NSwzMDE3NiwzMDE3''@;'; put 'put ''NywzMDE4MCwzMDE4MywzMDE4OCwzMDE5MCwzMDE5MSwzMDE5MywzMDIwMSwzMDIwOCwzMDIxMCwzMDIxMSwzMDIxMiwzMDIxNSwzMDIxNiwzMDIxOCwzMDIyMCwzMDIyMywzMDIyNiwzMDIyNywzMDIyOSwzMDIzMCwzMDIzMywzMDIzNSwzMDIzNiwzMDIzNywzMDIzOCwzMDI0MywzMDI0NSwz''@;'; put 'put ''MDI0NiwzMDI0OSwzMDI1MywzMDI1OCwzMDI1OSwzMDI2MSwzMDI2NCwzMDI2NSwzMDI2NiwzMDI2OCwzMDI4MiwzMDI3MiwzMDI3MywzMDI3NSwzMDI3NiwzMDI3NywzMDI4MSwzMDI4MywzMDI5MywzMDI5NywzMDMwMywzMDMwOCwzMDMwOSwzMDMxNywzMDMxOCwzMDMxOSwzMDMyMSwzMDMy''@;'; put 'put ''NCwzMDMzNywzMDM0MSwzMDM0OCwzMDM0OSwzMDM1NywzMDM2MywzMDM2NCwzMDM2NSwzMDM2NywzMDM2OCwzMDM3MCwzMDM3MSwzMDM3MiwzMDM3MywzMDM3NCwzMDM3NSwzMDM3NiwzMDM3OCwzMDM4MSwzMDM5NywzMDQwMSwzMDQwNSwzMDQwOSwzMDQxMSwzMDQxMiwzMDQxNCwzMDQyMCwz''@;'; put 'put ''MDQyNSwzMDQzMiwzMDQzOCwzMDQ0MCwzMDQ0NCwzMDQ0OCwzMDQ0OSwzMDQ1NCwzMDQ1NywzMDQ2MCwzMDQ2NCwzMDQ3MCwzMDQ3NCwzMDQ3OCwzMDQ4MiwzMDQ4NCwzMDQ4NSwzMDQ4NywzMDQ4OSwzMDQ5MCwzMDQ5MiwzMDQ5OCwzMDUwNCwzMDUwOSwzMDUxMCwzMDUxMSwzMDUxNiwzMDUx''@;'; put 'put ''NywzMDUxOCwzMDUyMSwzMDUyNSwzMDUyNiwzMDUzMCwzMDUzMywzMDUzNCwzMDUzOCwzMDU0MSwzMDU0MiwzMDU0MywzMDU0NiwzMDU1MCwzMDU1MSwzMDU1NiwzMDU1OCwzMDU1OSwzMDU2MCwzMDU2MiwzMDU2NCwzMDU2NywzMDU3MCwzMDU3MiwzMDU3NiwzMDU3OCwzMDU3OSwzMDU4MCwz''@;'; put 'put ''MDU4NiwzMDU4OSwzMDU5MiwzMDU5NiwzMDYwNCwzMDYwNSwzMDYxMiwzMDYxMywzMDYxNCwzMDYxOCwzMDYyMywzMDYyNiwzMDYzMSwzMDYzNCwzMDYzOCwzMDYzOSwzMDY0MSwzMDY0NSwzMDY1NCwzMDY1OSwzMDY2NSwzMDY3MywzMDY3NCwzMDY3NywzMDY4MSwzMDY4NiwzMDY4NywzMDY4''@;'; put 'put ''OCwzMDY5MiwzMDY5NCwzMDY5OCwzMDcwMCwzMDcwNCwzMDcwNSwzMDcwOCwzMDcxMiwzMDcxNSwzMDcyNSwzMDcyNiwzMDcyOSwzMDczMywzMDczNCwzMDczNywzMDc0OSwzMDc1MywzMDc1NCwzMDc1NSwzMDc2NSwzMDc2NiwzMDc2OCwzMDc3MywzMDc3NSwzMDc4NywzMDc4OCwzMDc5MSwz''@;'; put 'put ''MDc5MiwzMDc5NiwzMDc5OCwzMDgwMiwzMDgxMiwzMDgxNCwzMDgxNiwzMDgxNywzMDgxOSwzMDgyMCwzMDgyNCwzMDgyNiwzMDgzMCwzMDg0MiwzMDg0NiwzMDg1OCwzMDg2MywzMDg2OCwzMDg3MiwzMDg4MSwzMDg3NywzMDg3OCwzMDg3OSwzMDg4NCwzMDg4OCwzMDg5MiwzMDg5MywzMDg5''@;'; put 'put ''NiwzMDg5NywzMDg5OCwzMDg5OSwzMDkwNywzMDkwOSwzMDkxMSwzMDkxOSwzMDkyMCwzMDkyMSwzMDkyNCwzMDkyNiwzMDkzMCwzMDkzMSwzMDkzMywzMDkzNCwzMDk0OCwzMDkzOSwzMDk0MywzMDk0NCwzMDk0NSwzMDk1MCwzMDk1NCwzMDk2MiwzMDk2MywzMDk3NiwzMDk2NiwzMDk2Nywz''@;'; put 'put ''MDk3MCwzMDk3MSwzMDk3NSwzMDk4MiwzMDk4OCwzMDk5MiwzMTAwMiwzMTAwNCwzMTAwNiwzMTAwNywzMTAwOCwzMTAxMywzMTAxNSwzMTAxNywzMTAyMSwzMTAyNSwzMTAyOCwzMTAyOSwzMTAzNSwzMTAzNywzMTAzOSwzMTA0NCwzMTA0NSwzMTA0NiwzMTA1MCwzMTA1MSwzMTA1NSwzMTA1''@;'; put 'put ''NywzMTA2MCwzMTA2NCwzMTA2NywzMTA2OCwzMTA3OSwzMTA4MSwzMTA4MywzMTA5MCwzMTA5NywzMTA5OSwzMTEwMCwzMTEwMiwzMTExNSwzMTExNiwzMTEyMSwzMTEyMywzMTEyNCwzMTEyNSwzMTEyNiwzMTEyOCwzMTEzMSwzMTEzMiwzMTEzNywzMTE0NCwzMTE0NSwzMTE0NywzMTE1MSwz''@;'; put 'put ''MTE1MywzMTE1NiwzMTE2MCwzMTE2MywzMTE3MCwzMTE3MiwzMTE3NSwzMTE3NiwzMTE3OCwzMTE4MywzMTE4OCwzMTE5MCwzMTE5NCwzMTE5NywzMTE5OCwzMTIwMCwzMTIwMiwzMTIwNSwzMTIxMCwzMTIxMSwzMTIxMywzMTIxNywzMTIyNCwzMTIyOCwzMTIzNCwzMTIzNSwzMTIzOSwzMTI0''@;'; put 'put ''MSwzMTI0MiwzMTI0NCwzMTI0OSwzMTI1MywzMTI1OSwzMTI2MiwzMTI2NSwzMTI3MSwzMTI3NSwzMTI3NywzMTI3OSwzMTI4MCwzMTI4NCwzMTI4NSwzMTI4OCwzMTI4OSwzMTI5MCwzMTMwMCwzMTMwMSwzMTMwMywzMTMwNCwzMTMwOCwzMTMxNywzMTMxOCwzMTMyMSwzMTMyNCwzMTMyNSwz''@;'; put 'put ''MTMyNywzMTMyOCwzMTMzMywzMTMzNSwzMTMzOCwzMTM0MSwzMTM0OSwzMTM1MiwzMTM1OCwzMTM2MCwzMTM2MiwzMTM2NSwzMTM2NiwzMTM3MCwzMTM3MSwzMTM3NiwzMTM3NywzMTM4MCwzMTM5MCwzMTM5MiwzMTM5NSwzMTQwNCwzMTQxMSwzMTQxMywzMTQxNywzMTQxOSwzMTQyMCwzMTQz''@;'; put 'put ''MCwzMTQzMywzMTQzNiwzMTQzOCwzMTQ0MSwzMTQ1MSwzMTQ2NCwzMTQ2NSwzMTQ2NywzMTQ2OCwzMTQ3MywzMTQ3NiwzMTQ4MywzMTQ4NSwzMTQ4NiwzMTQ5NSwzMTUwOCwzMTUxOSwzMTUyMywzMTUyNywzMTUyOSwzMTUzMCwzMTUzMSwzMTUzMywzMTUzNCwzMTUzNSwzMTUzNiwzMTUzNywz''@;'; put 'put ''MTU0MCwzMTU0OSwzMTU1MSwzMTU1MiwzMTU1MywzMTU1OSwzMTU2NiwzMTU3MywzMTU4NCwzMTU4OCwzMTU5MCwzMTU5MywzMTU5NCwzMTU5NywzMTU5OSwzMTYwMiwzMTYwMywzMTYwNywzMTYyMCwzMTYyNSwzMTYzMCwzMTYzMiwzMTYzMywzMTYzOCwzMTY0MywzMTY0NiwzMTY0OCwzMTY1''@;'; put 'put ''MywzMTY2MCwzMTY2MywzMTY2NCwzMTY2NiwzMTY2OSwzMTY3MCwzMTY3NCwzMTY3NSwzMTY3NiwzMTY3NywzMTY4MiwzMTY4NSwzMTY4OCwzMTY5MCwzMTcwMCwzMTcwMiwzMTcwMywzMTcwNSwzMTcwNiwzMTcwNywzMTcyMCwzMTcyMiwzMTczMCwzMTczMiwzMTczMywzMTczNiwzMTczNywz''@;'; put 'put ''MTczOCwzMTc0MCwzMTc0MiwzMTc0NSwzMTc0NiwzMTc0NywzMTc0OCwzMTc1MCwzMTc1MywzMTc1NSwzMTc1NiwzMTc1OCwzMTc1OSwzMTc2OSwzMTc3MSwzMTc3NiwzMTc4MSwzMTc4MiwzMTc4NCwzMTc4OCwzMTc5MywzMTc5NSwzMTc5NiwzMTc5OCwzMTgwMSwzMTgwMiwzMTgxNCwzMTgx''@;'; put 'put ''OCwzMTgyOSwzMTgyNSwzMTgyNiwzMTgyNywzMTgzMywzMTgzNCwzMTgzNSwzMTgzNiwzMTgzNywzMTgzOCwzMTg0MSwzMTg0MywzMTg0NywzMTg0OSwzMTg1MywzMTg1NCwzMTg1NiwzMTg1OCwzMTg2NSwzMTg2OCwzMTg2OSwzMTg3OCwzMTg3OSwzMTg4NywzMTg5MiwzMTkwMiwzMTkwNCwz''@;'; put 'put ''MTkxMCwzMTkyMCwzMTkyNiwzMTkyNywzMTkzMCwzMTkzMSwzMTkzMiwzMTkzNSwzMTk0MCwzMTk0MywzMTk0NCwzMTk0NSwzMTk0OSwzMTk1MSwzMTk1NSwzMTk1NiwzMTk1NywzMTk1OSwzMTk2MSwzMTk2MiwzMTk2NSwzMTk3NCwzMTk3NywzMTk3OSwzMTk4OSwzMjAwMywzMjAwNywzMjAw''@;'; put 'put ''OCwzMjAwOSwzMjAxNSwzMjAxNywzMjAxOCwzMjAxOSwzMjAyMiwzMjAyOSwzMjAzMCwzMjAzNSwzMjAzOCwzMjA0MiwzMjA0NSwzMjA0OSwzMjA2MCwzMjA2MSwzMjA2MiwzMjA2NCwzMjA2NSwzMjA3MSwzMjA3MiwzMjA3NywzMjA4MSwzMjA4MywzMjA4NywzMjA4OSwzMjA5MCwzMjA5Miwz''@;'; put 'put ''MjA5MywzMjEwMSwzMjEwMywzMjEwNiwzMjExMiwzMjEyMCwzMjEyMiwzMjEyMywzMjEyNywzMjEyOSwzMjEzMCwzMjEzMSwzMjEzMywzMjEzNCwzMjEzNiwzMjEzOSwzMjE0MCwzMjE0MSwzMjE0NSwzMjE1MCwzMjE1MSwzMjE1NywzMjE1OCwzMjE2NiwzMjE2NywzMjE3MCwzMjE3OSwzMjE4''@;'; put 'put ''MiwzMjE4MywzMjE4NSwzMjE5NCwzMjE5NSwzMjE5NiwzMjE5NywzMjE5OCwzMjIwNCwzMjIwNSwzMjIwNiwzMjIxNSwzMjIxNywzMjI1NiwzMjIyNiwzMjIyOSwzMjIzMCwzMjIzNCwzMjIzNSwzMjIzNywzMjI0MSwzMjI0NSwzMjI0NiwzMjI0OSwzMjI1MCwzMjI2NCwzMjI3MiwzMjI3Mywz''@;'; put 'put ''MjI3NywzMjI3OSwzMjI4NCwzMjI4NSwzMjI4OCwzMjI5NSwzMjI5NiwzMjMwMCwzMjMwMSwzMjMwMywzMjMwNywzMjMxMCwzMjMxOSwzMjMyNCwzMjMyNSwzMjMyNywzMjMzNCwzMjMzNiwzMjMzOCwzMjM0NCwzMjM1MSwzMjM1MywzMjM1NCwzMjM1NywzMjM2MywzMjM2NiwzMjM2NywzMjM3''@;'; put 'put ''MSwzMjM3NiwzMjM4MiwzMjM4NSwzMjM5MCwzMjM5MSwzMjM5NCwzMjM5NywzMjQwMSwzMjQwNSwzMjQwOCwzMjQxMCwzMjQxMywzMjQxNCwzMjU3MiwzMjU3MSwzMjU3MywzMjU3NCwzMjU3NSwzMjU3OSwzMjU4MCwzMjU4MywzMjU5MSwzMjU5NCwzMjU5NSwzMjYwMywzMjYwNCwzMjYwNSwz''@;'; put 'put ''MjYwOSwzMjYxMSwzMjYxMiwzMjYxMywzMjYxNCwzMjYyMSwzMjYyNSwzMjYzNywzMjYzOCwzMjYzOSwzMjY0MCwzMjY1MSwzMjY1MywzMjY1NSwzMjY1NiwzMjY1NywzMjY2MiwzMjY2MywzMjY2OCwzMjY3MywzMjY3NCwzMjY3OCwzMjY4MiwzMjY4NSwzMjY5MiwzMjcwMCwzMjcwMywzMjcw''@;'; put 'put ''NCwzMjcwNywzMjcxMiwzMjcxOCwzMjcxOSwzMjczMSwzMjczNSwzMjczOSwzMjc0MSwzMjc0NCwzMjc0OCwzMjc1MCwzMjc1MSwzMjc1NCwzMjc2MiwzMjc2NSwzMjc2NiwzMjc2NywzMjc3NSwzMjc3NiwzMjc3OCwzMjc4MSwzMjc4MiwzMjc4MywzMjc4NSwzMjc4NywzMjc4OCwzMjc5MCwz''@;'; put 'put ''Mjc5NywzMjc5OCwzMjc5OSwzMjgwMCwzMjgwNCwzMjgwNiwzMjgxMiwzMjgxNCwzMjgxNiwzMjgyMCwzMjgyMSwzMjgyMywzMjgyNSwzMjgyNiwzMjgyOCwzMjgzMCwzMjgzMiwzMjgzNiwzMjg2NCwzMjg2OCwzMjg3MCwzMjg3NywzMjg4MSwzMjg4NSwzMjg5NywzMjkwNCwzMjkxMCwzMjky''@;'; put 'put ''NCwzMjkyNiwzMjkzNCwzMjkzNSwzMjkzOSwzMjk1MiwzMjk1MywzMjk2OCwzMjk3MywzMjk3NSwzMjk3OCwzMjk4MCwzMjk4MSwzMjk4MywzMjk4NCwzMjk5MiwzMzAwNSwzMzAwNiwzMzAwOCwzMzAxMCwzMzAxMSwzMzAxNCwzMzAxNywzMzAxOCwzMzAyMiwzMzAyNywzMzAzNSwzMzA0Niwz''@;'; put 'put ''MzA0NywzMzA0OCwzMzA1MiwzMzA1NCwzMzA1NiwzMzA2MCwzMzA2MywzMzA2OCwzMzA3MiwzMzA3NywzMzA4MiwzMzA4NCwzMzA5MywzMzA5NSwzMzA5OCwzMzEwMCwzMzEwNiwzMzExMSwzMzEyMCwzMzEyMSwzMzEyNywzMzEyOCwzMzEyOSwzMzEzMywzMzEzNSwzMzE0MywzMzE1MywzMzE2''@;'; put 'put ''OCwzMzE1NiwzMzE1NywzMzE1OCwzMzE2MywzMzE2NiwzMzE3NCwzMzE3NiwzMzE3OSwzMzE4MiwzMzE4NiwzMzE5OCwzMzIwMiwzMzIwNCwzMzIxMSwzMzIyNywzMzIxOSwzMzIyMSwzMzIyNiwzMzIzMCwzMzIzMSwzMzIzNywzMzIzOSwzMzI0MywzMzI0NSwzMzI0NiwzMzI0OSwzMzI1Miwz''@;'; put 'put ''MzI1OSwzMzI2MCwzMzI2NCwzMzI2NSwzMzI2NiwzMzI2OSwzMzI3MCwzMzI3MiwzMzI3MywzMzI3NywzMzI3OSwzMzI4MCwzMzI4MywzMzI5NSwzMzI5OSwzMzMwMCwzMzMwNSwzMzMwNiwzMzMwOSwzMzMxMywzMzMxNCwzMzMyMCwzMzMzMCwzMzMzMiwzMzMzOCwzMzM0NywzMzM0OCwzMzM0''@;'; put 'put ''OSwzMzM1MCwzMzM1NSwzMzM1OCwzMzM1OSwzMzM2MSwzMzM2NiwzMzM3MiwzMzM3NiwzMzM3OSwzMzM4MywzMzM4OSwzMzM5NiwzMzQwMywzMzQwNSwzMzQwNywzMzQwOCwzMzQwOSwzMzQxMSwzMzQxMiwzMzQxNSwzMzQxNywzMzQxOCwzMzQyMiwzMzQyNSwzMzQyOCwzMzQzMCwzMzQzMiwz''@;'; put 'put ''MzQzNCwzMzQzNSwzMzQ0MCwzMzQ0MSwzMzQ0MywzMzQ0NCwzMzQ0NywzMzQ0OCwzMzQ0OSwzMzQ1MCwzMzQ1NCwzMzQ1NiwzMzQ1OCwzMzQ2MCwzMzQ2MywzMzQ2NiwzMzQ2OCwzMzQ3MCwzMzQ3MSwzMzQ3OCwzMzQ4OCwzMzQ5MywzMzQ5OCwzMzUwNCwzMzUwNiwzMzUwOCwzMzUxMiwzMzUx''@;'; put 'put ''NCwzMzUxNywzMzUxOSwzMzUyNiwzMzUyNywzMzUzMywzMzUzNCwzMzUzNiwzMzUzNywzMzU0MywzMzU0NCwzMzU0NiwzMzU0NywzMzYyMCwzMzU2MywzMzU2NSwzMzU2NiwzMzU2NywzMzU2OSwzMzU3MCwzMzU4MCwzMzU4MSwzMzU4MiwzMzU4NCwzMzU4NywzMzU5MSwzMzU5NCwzMzU5Niwz''@;'; put 'put ''MzU5NywzMzYwMiwzMzYwMywzMzYwNCwzMzYwNywzMzYxMywzMzYxNCwzMzYxNywzMzYyMSwzMzYyMiwzMzYyMywzMzY0OCwzMzY1NiwzMzY2MSwzMzY2MywzMzY2NCwzMzY2NiwzMzY2OCwzMzY3MCwzMzY3NywzMzY4MiwzMzY4NCwzMzY4NSwzMzY4OCwzMzY4OSwzMzY5MSwzMzY5MiwzMzY5''@;'; put 'put ''MywzMzcwMiwzMzcwMywzMzcwNSwzMzcwOCwzMzcyNiwzMzcyNywzMzcyOCwzMzczNSwzMzczNywzMzc0MywzMzc0NCwzMzc0NSwzMzc0OCwzMzc1NywzMzYxOSwzMzc2OCwzMzc3MCwzMzc4MiwzMzc4NCwzMzc4NSwzMzc4OCwzMzc5MywzMzc5OCwzMzgwMiwzMzgwNywzMzgwOSwzMzgxMywz''@;'; put 'put ''MzgxNywzMzcwOSwzMzgzOSwzMzg0OSwzMzg2MSwzMzg2MywzMzg2NCwzMzg2NiwzMzg2OSwzMzg3MSwzMzg3MywzMzg3NCwzMzg3OCwzMzg4MCwzMzg4MSwzMzg4MiwzMzg4NCwzMzg4OCwzMzg5MiwzMzg5MywzMzg5NSwzMzg5OCwzMzkwNCwzMzkwNywzMzkwOCwzMzkxMCwzMzkxMiwzMzkx''@;'; put 'put ''NiwzMzkxNywzMzkyMSwzMzkyNSwzMzkzOCwzMzkzOSwzMzk0MSwzMzk1MCwzMzk1OCwzMzk2MCwzMzk2MSwzMzk2MiwzMzk2NywzMzk2OSwzMzk3MiwzMzk3OCwzMzk4MSwzMzk4MiwzMzk4NCwzMzk4NiwzMzk5MSwzMzk5MiwzMzk5NiwzMzk5OSwzNDAwMywzNDAxMiwzNDAyMywzNDAyNiwz''@;'; put 'put ''NDAzMSwzNDAzMiwzNDAzMywzNDAzNCwzNDAzOSwzNDA5OCwzNDA0MiwzNDA0MywzNDA0NSwzNDA1MCwzNDA1MSwzNDA1NSwzNDA2MCwzNDA2MiwzNDA2NCwzNDA3NiwzNDA3OCwzNDA4MiwzNDA4MywzNDA4NCwzNDA4NSwzNDA4NywzNDA5MCwzNDA5MSwzNDA5NSwzNDA5OSwzNDEwMCwzNDEw''@;'; put 'put ''MiwzNDExMSwzNDExOCwzNDEyNywzNDEyOCwzNDEyOSwzNDEzMCwzNDEzMSwzNDEzNCwzNDEzNywzNDE0MCwzNDE0MSwzNDE0MiwzNDE0MywzNDE0NCwzNDE0NSwzNDE0NiwzNDE0OCwzNDE1NSwzNDE1OSwzNDE2OSwzNDE3MCwzNDE3MSwzNDE3MywzNDE3NSwzNDE3NywzNDE4MSwzNDE4Miwz''@;'; put 'put ''NDE4NSwzNDE4NywzNDE4OCwzNDE5MSwzNDE5NSwzNDIwMCwzNDIwNSwzNDIwNywzNDIwOCwzNDIxMCwzNDIxMywzNDIxNSwzNDIyOCwzNDIzMCwzNDIzMSwzNDIzMiwzNDIzNiwzNDIzNywzNDIzOCwzNDIzOSwzNDI0MiwzNDI0NywzNDI1MCwzNDI1MSwzNDI1NCwzNDIyMSwzNDI2NCwzNDI2''@;'; put 'put ''NiwzNDI3MSwzNDI3MiwzNDI3OCwzNDI4MCwzNDI4NSwzNDI5MSwzNDI5NCwzNDMwMCwzNDMwMywzNDMwNCwzNDMwOCwzNDMwOSwzNDMxNywzNDMxOCwzNDMyMCwzNDMyMSwzNDMyMiwzNDMyOCwzNDMyOSwzNDMzMSwzNDMzNCwzNDMzNywzNDM0MywzNDM0NSwzNDM1OCwzNDM2MCwzNDM2Miwz''@;'; put 'put ''NDM2NCwzNDM2NSwzNDM2OCwzNDM3MCwzNDM3NCwzNDM4NiwzNDM4NywzNDM5MCwzNDM5MSwzNDM5MiwzNDM5MywzNDM5NywzNDQwMCwzNDQwMSwzNDQwMiwzNDQwMywzNDQwNCwzNDQwOSwzNDQxMiwzNDQxNSwzNDQyMSwzNDQyMiwzNDQyMywzNDQyNiwzNDQ0NSwzNDQ0OSwzNDQ1NCwzNDQ1''@;'; put 'put ''NiwzNDQ1OCwzNDQ2MCwzNDQ2NSwzNDQ3MCwzNDQ3MSwzNDQ3MiwzNDQ3NywzNDQ4MSwzNDQ4MywzNDQ4NCwzNDQ4NSwzNDQ4NywzNDQ4OCwzNDQ4OSwzNDQ5NSwzNDQ5NiwzNDQ5NywzNDQ5OSwzNDUwMSwzNDUxMywzNDUxNCwzNDUxNywzNDUxOSwzNDUyMiwzNDUyNCwzNDUyOCwzNDUzMSwz''@;'; put 'put ''NDUzMywzNDUzNSwzNDQ0MCwzNDU1NCwzNDU1NiwzNDU1NywzNDU2NCwzNDU2NSwzNDU2NywzNDU3MSwzNDU3NCwzNDU3NSwzNDU3NiwzNDU3OSwzNDU4MCwzNDU4NSwzNDU5MCwzNDU5MSwzNDU5MywzNDU5NSwzNDYwMCwzNDYwNiwzNDYwNywzNDYwOSwzNDYxMCwzNDYxNywzNDYxOCwzNDYy''@;'; put 'put ''MCwzNDYyMSwzNDYyMiwzNDYyNCwzNDYyNywzNDYyOSwzNDYzNywzNDY0OCwzNDY1MywzNDY1NywzNDY2MCwzNDY2MSwzNDY3MSwzNDY3MywzNDY3NCwzNDY4MywzNDY5MSwzNDY5MiwzNDY5MywzNDY5NCwzNDY5NSwzNDY5NiwzNDY5NywzNDY5OSwzNDcwMCwzNDcwNCwzNDcwNywzNDcwOSwz''@;'; put 'put ''NDcxMSwzNDcxMiwzNDcxMywzNDcxOCwzNDcyMCwzNDcyMywzNDcyNywzNDczMiwzNDczMywzNDczNCwzNDczNywzNDc0MSwzNDc1MCwzNDc1MSwzNDc1MywzNDc2MCwzNDc2MSwzNDc2MiwzNDc2NiwzNDc3MywzNDc3NCwzNDc3NywzNDc3OCwzNDc4MCwzNDc4MywzNDc4NiwzNDc4NywzNDc4''@;'; put 'put ''OCwzNDc5NCwzNDc5NSwzNDc5NywzNDgwMSwzNDgwMywzNDgwOCwzNDgxMCwzNDgxNSwzNDgxNywzNDgxOSwzNDgyMiwzNDgyNSwzNDgyNiwzNDgyNywzNDgzMiwzNDg0MSwzNDgzNCwzNDgzNSwzNDgzNiwzNDg0MCwzNDg0MiwzNDg0MywzNDg0NCwzNDg0NiwzNDg0NywzNDg1NiwzNDg2MSwz''@;'; put 'put ''NDg2MiwzNDg2NCwzNDg2NiwzNDg2OSwzNDg3NCwzNDg3NiwzNDg4MSwzNDg4MywzNDg4NSwzNDg4OCwzNDg4OSwzNDg5MCwzNDg5MSwzNDg5NCwzNDg5NywzNDkwMSwzNDkwMiwzNDkwNCwzNDkwNiwzNDkwOCwzNDkxMSwzNDkxMiwzNDkxNiwzNDkyMSwzNDkyOSwzNDkzNywzNDkzOSwzNDk0''@;'; put 'put ''NCwzNDk2OCwzNDk3MCwzNDk3MSwzNDk3MiwzNDk3NSwzNDk3NiwzNDk4NCwzNDk4NiwzNTAwMiwzNTAwNSwzNTAwNiwzNTAwOCwzNTAxOCwzNTAxOSwzNTAyMCwzNTAyMSwzNTAyMiwzNTAyNSwzNTAyNiwzNTAyNywzNTAzNSwzNTAzOCwzNTA0NywzNTA1NSwzNTA1NiwzNTA1NywzNTA2MSwz''@;'; put 'put ''NTA2MywzNTA3MywzNTA3OCwzNTA4NSwzNTA4NiwzNTA4NywzNTA5MywzNTA5NCwzNTA5NiwzNTA5NywzNTA5OCwzNTEwMCwzNTEwNCwzNTExMCwzNTExMSwzNTExMiwzNTEyMCwzNTEyMSwzNTEyMiwzNTEyNSwzNTEyOSwzNTEzMCwzNTEzNCwzNTEzNiwzNTEzOCwzNTE0MSwzNTE0MiwzNTE0''@;'; put 'put ''NSwzNTE1MSwzNTE1NCwzNTE1OSwzNTE2MiwzNTE2MywzNTE2NCwzNTE2OSwzNTE3MCwzNTE3MSwzNTE3OSwzNTE4MiwzNTE4NCwzNTE4NywzNTE4OSwzNTE5NCwzNTE5NSwzNTE5NiwzNTE5NywzNTIwOSwzNTIxMywzNTIxNiwzNTIyMCwzNTIyMSwzNTIyNywzNTIyOCwzNTIzMSwzNTIzMiwz''@;'; put 'put ''NTIzNywzNTI0OCwzNTI1MiwzNTI1MywzNTI1NCwzNTI1NSwzNTI2MCwzNTI4NCwzNTI4NSwzNTI4NiwzNTI4NywzNTI4OCwzNTMwMSwzNTMwNSwzNTMwNywzNTMwOSwzNTMxMywzNTMxNSwzNTMxOCwzNTMyMSwzNTMyNSwzNTMyNywzNTMzMiwzNTMzMywzNTMzNSwzNTM0MywzNTM0NSwzNTM0''@;'; put 'put ''NiwzNTM0OCwzNTM0OSwzNTM1OCwzNTM2MCwzNTM2MiwzNTM2NCwzNTM2NiwzNTM3MSwzNTM3MiwzNTM3NSwzNTM4MSwzNTM4MywzNTM4OSwzNTM5MCwzNTM5MiwzNTM5NSwzNTM5NywzNTM5OSwzNTQwMSwzNTQwNSwzNTQwNiwzNTQxMSwzNTQxNCwzNTQxNSwzNTQxNiwzNTQyMCwzNTQyMSwz''@;'; put 'put ''NTQyNSwzNTQyOSwzNTQzMSwzNTQ0NSwzNTQ0NiwzNTQ0NywzNTQ0OSwzNTQ1MCwzNTQ1MSwzNTQ1NCwzNTQ1NSwzNTQ1NiwzNTQ1OSwzNTQ2MiwzNTQ2NywzNTQ3MSwzNTQ3MiwzNTQ3NCwzNTQ3OCwzNTQ3OSwzNTQ4MSwzNTQ4NywzNTQ5NSwzNTQ5NywzNTUwMiwzNTUwMywzNTUwNywzNTUx''@;'; put 'put ''MCwzNTUxMSwzNTUxNSwzNTUxOCwzNTUyMywzNTUyNiwzNTUyOCwzNTUyOSwzNTUzMCwzNTUzNywzNTUzOSwzNTU0MCwzNTU0MSwzNTU0MywzNTU0OSwzNTU1MSwzNTU2NCwzNTU2OCwzNTU3MiwzNTU3MywzNTU3NCwzNTU4MCwzNTU4MywzNTU4OSwzNTU5MCwzNTU5NSwzNTYwMSwzNTYxMiwz''@;'; put 'put ''NTYxNCwzNTYxNSwzNTU5NCwzNTYyOSwzNTYzMiwzNTYzOSwzNTY0NCwzNTY1MCwzNTY1MSwzNTY1MiwzNTY1MywzNTY1NCwzNTY1NiwzNTY2NiwzNTY2NywzNTY2OCwzNTY3MywzNTY2MSwzNTY3OCwzNTY4MywzNTY5MywzNTcwMiwzNTcwNCwzNTcwNSwzNTcwOCwzNTcxMCwzNTcxMywzNTcx''@;'; put 'put ''NiwzNTcxNywzNTcyMywzNTcyNSwzNTcyNywzNTczMiwzNTczMywzNTc0MCwzNTc0MiwzNTc0MywzNTg5NiwzNTg5NywzNTkwMSwzNTkwMiwzNTkwOSwzNTkxMSwzNTkxMywzNTkxNSwzNTkxOSwzNTkyMSwzNTkyMywzNTkyNCwzNTkyNywzNTkyOCwzNTkzMSwzNTkzMywzNTkyOSwzNTkzOSwz''@;'; put 'put ''NTk0MCwzNTk0MiwzNTk0NCwzNTk0NSwzNTk0OSwzNTk1NSwzNTk1NywzNTk1OCwzNTk2MywzNTk2NiwzNTk3NCwzNTk3NSwzNTk3OSwzNTk4NCwzNTk4NiwzNTk4NywzNTk5MywzNTk5NSwzNTk5NiwzNjAwNCwzNjAyNSwzNjAyNiwzNjAzNywzNjAzOCwzNjA0MSwzNjA0MywzNjA0NywzNjA1''@;'; put 'put ''NCwzNjA1MywzNjA1NywzNjA2MSwzNjA2NSwzNjA3MiwzNjA3NiwzNjA3OSwzNjA4MCwzNjA4MiwzNjA4NSwzNjA4NywzNjA4OCwzNjA5NCwzNjA5NSwzNjA5NywzNjA5OSwzNjEwNSwzNjExNCwzNjExOSwzNjEyMywzNjE5NywzNjIwMSwzNjIwNCwzNjIwNiwzNjIyMywzNjIyNiwzNjIyOCwz''@;'; put 'put ''NjIzMiwzNjIzNywzNjI0MCwzNjI0MSwzNjI0NSwzNjI1NCwzNjI1NSwzNjI1NiwzNjI2MiwzNjI2NywzNjI2OCwzNjI3MSwzNjI3NCwzNjI3NywzNjI3OSwzNjI4MSwzNjI4MywzNjI4OCwzNjI5MywzNjI5NCwzNjI5NSwzNjI5NiwzNjI5OCwzNjMwMiwzNjMwNSwzNjMwOCwzNjMwOSwzNjMx''@;'; put 'put ''MSwzNjMxMywzNjMyNCwzNjMyNSwzNjMyNywzNjMzMiwzNjMzNiwzNjI4NCwzNjMzNywzNjMzOCwzNjM0MCwzNjM0OSwzNjM1MywzNjM1NiwzNjM1NywzNjM1OCwzNjM2MywzNjM2OSwzNjM3MiwzNjM3NCwzNjM4NCwzNjM4NSwzNjM4NiwzNjM4NywzNjM5MCwzNjM5MSwzNjQwMSwzNjQwMywz''@;'; put 'put ''NjQwNiwzNjQwNywzNjQwOCwzNjQwOSwzNjQxMywzNjQxNiwzNjQxNywzNjQyNywzNjQyOSwzNjQzMCwzNjQzMSwzNjQzNiwzNjQ0MywzNjQ0NCwzNjQ0NSwzNjQ0NiwzNjQ0OSwzNjQ1MCwzNjQ1NywzNjQ2MCwzNjQ2MSwzNjQ2MywzNjQ2NCwzNjQ2NSwzNjQ3MywzNjQ3NCwzNjQ3NSwzNjQ4''@;'; put 'put ''MiwzNjQ4MywzNjQ4OSwzNjQ5NiwzNjQ5OCwzNjUwMSwzNjUwNiwzNjUwNywzNjUwOSwzNjUxMCwzNjUxNCwzNjUxOSwzNjUyMSwzNjUyNSwzNjUyNiwzNjUzMSwzNjUzMywzNjUzOCwzNjUzOSwzNjU0NCwzNjU0NSwzNjU0NywzNjU0OCwzNjU1MSwzNjU1OSwzNjU2MSwzNjU2NCwzNjU3Miwz''@;'; put 'put ''NjU4NCwzNjU5MCwzNjU5MiwzNjU5MywzNjU5OSwzNjYwMSwzNjYwMiwzNjU4OSwzNjYwOCwzNjYxMCwzNjYxNSwzNjYxNiwzNjYyMywzNjYyNCwzNjYzMCwzNjYzMSwzNjYzMiwzNjYzOCwzNjY0MCwzNjY0MSwzNjY0MywzNjY0NSwzNjY0NywzNjY0OCwzNjY1MiwzNjY1MywzNjY1NCwzNjY2''@;'; put 'put ''MCwzNjY2MSwzNjY2MiwzNjY2MywzNjY2NiwzNjY3MiwzNjY3MywzNjY3NSwzNjY3OSwzNjY4NywzNjY4OSwzNjY5MCwzNjY5MSwzNjY5MiwzNjY5MywzNjY5NiwzNjcwMSwzNjcwMiwzNjcwOSwzNjc2NSwzNjc2OCwzNjc2OSwzNjc3MiwzNjc3MywzNjc3NCwzNjc4OSwzNjc5MCwzNjc5Miwz''@;'; put 'put ''Njc5OCwzNjgwMCwzNjgwMSwzNjgwNiwzNjgxMCwzNjgxMSwzNjgxMywzNjgxNiwzNjgxOCwzNjgxOSwzNjgyMSwzNjgzMiwzNjgzNSwzNjgzNiwzNjg0MCwzNjg0NiwzNjg0OSwzNjg1MywzNjg1NCwzNjg1OSwzNjg2MiwzNjg2NiwzNjg2OCwzNjg3MiwzNjg3NiwzNjg4OCwzNjg5MSwzNjkw''@;'; put 'put ''NCwzNjkwNSwzNjkxMSwzNjkwNiwzNjkwOCwzNjkwOSwzNjkxNSwzNjkxNiwzNjkxOSwzNjkyNywzNjkzMSwzNjkzMiwzNjk0MCwzNjk1NSwzNjk1NywzNjk2MiwzNjk2NiwzNjk2NywzNjk3MiwzNjk3NiwzNjk4MCwzNjk4NSwzNjk5NywzN2UzLDM3MDAzLDM3MDA0LDM3MDA2LDM3MDA4LDM3''@;'; put 'put ''MDEzLDM3MDE1LDM3MDE2LDM3MDE3LDM3MDE5LDM3MDI0LDM3MDI1LDM3MDI2LDM3MDI5LDM3MDQwLDM3MDQyLDM3MDQzLDM3MDQ0LDM3MDQ2LDM3MDUzLDM3MDY4LDM3MDU0LDM3MDU5LDM3MDYwLDM3MDYxLDM3MDYzLDM3MDY0LDM3MDc3LDM3MDc5LDM3MDgwLDM3MDgxLDM3MDg0LDM3MDg1''@;'; put 'put ''LDM3MDg3LDM3MDkzLDM3MDc0LDM3MTEwLDM3MDk5LDM3MTAzLDM3MTA0LDM3MTA4LDM3MTE4LDM3MTE5LDM3MTIwLDM3MTI0LDM3MTI1LDM3MTI2LDM3MTI4LDM3MTMzLDM3MTM2LDM3MTQwLDM3MTQyLDM3MTQzLDM3MTQ0LDM3MTQ2LDM3MTQ4LDM3MTUwLDM3MTUyLDM3MTU3LDM3MTU0LDM3''@;'; put 'put ''MTU1LDM3MTU5LDM3MTYxLDM3MTY2LDM3MTY3LDM3MTY5LDM3MTcyLDM3MTc0LDM3MTc1LDM3MTc3LDM3MTc4LDM3MTgwLDM3MTgxLDM3MTg3LDM3MTkxLDM3MTkyLDM3MTk5LDM3MjAzLDM3MjA3LDM3MjA5LDM3MjEwLDM3MjExLDM3MjE3LDM3MjIwLDM3MjIzLDM3MjI5LDM3MjM2LDM3MjQx''@;'; put 'put ''LDM3MjQyLDM3MjQzLDM3MjQ5LDM3MjUxLDM3MjUzLDM3MjU0LDM3MjU4LDM3MjYyLDM3MjY1LDM3MjY3LDM3MjY4LDM3MjY5LDM3MjcyLDM3Mjc4LDM3MjgxLDM3Mjg2LDM3Mjg4LDM3MjkyLDM3MjkzLDM3Mjk0LDM3Mjk2LDM3Mjk3LDM3Mjk4LDM3Mjk5LDM3MzAyLDM3MzA3LDM3MzA4LDM3''@;'; put 'put ''MzA5LDM3MzExLDM3MzE0LDM3MzE1LDM3MzE3LDM3MzMxLDM3MzMyLDM3MzM1LDM3MzM3LDM3MzM4LDM3MzQyLDM3MzQ4LDM3MzQ5LDM3MzUzLDM3MzU0LDM3MzU2LDM3MzU3LDM3MzU4LDM3MzU5LDM3MzYwLDM3MzYxLDM3MzY3LDM3MzY5LDM3MzcxLDM3MzczLDM3Mzc2LDM3Mzc3LDM3Mzgw''@;'; put 'put ''LDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg1LDM3Mzg2LDM3Mzg4LDM3MzkyLDM3Mzk0LDM3Mzk1LDM3Mzk4LDM3NDAwLDM3NDA0LDM3NDA1LDM3NDExLDM3NDEyLDM3NDEzLDM3NDE0LDM3NDE2LDM3NDIyLDM3NDIzLDM3NDI0LDM3NDI3LDM3NDI5LDM3NDMwLDM3NDMyLDM3NDMzLDM3NDM0LDM3''@;'; put 'put ''NDM2LDM3NDM4LDM3NDQwLDM3NDQyLDM3NDQzLDM3NDQ2LDM3NDQ3LDM3NDUwLDM3NDUzLDM3NDU0LDM3NDU1LDM3NDU3LDM3NDY0LDM3NDY1LDM3NDY4LDM3NDY5LDM3NDcyLDM3NDczLDM3NDc3LDM3NDc5LDM3NDgwLDM3NDgxLDM3NDg2LDM3NDg3LDM3NDg4LDM3NDkzLDM3NDk0LDM3NDk1''@;'; put 'put ''LDM3NDk2LDM3NDk3LDM3NDk5LDM3NTAwLDM3NTAxLDM3NTAzLDM3NTEyLDM3NTEzLDM3NTE0LDM3NTE3LDM3NTE4LDM3NTIyLDM3NTI3LDM3NTI5LDM3NTM1LDM3NTM2LDM3NTQwLDM3NTQxLDM3NTQzLDM3NTQ0LDM3NTQ3LDM3NTUxLDM3NTU0LDM3NTU4LDM3NTYwLDM3NTYyLDM3NTYzLDM3''@;'; put 'put ''NTY0LDM3NTY1LDM3NTY3LDM3NTY4LDM3NTY5LDM3NTcwLDM3NTcxLDM3NTczLDM3NTc0LDM3NTc1LDM3NTc2LDM3NTc5LDM3NTgwLDM3NTgxLDM3NTgyLDM3NTg0LDM3NTg3LDM3NTg5LDM3NTkxLDM3NTkyLDM3NTkzLDM3NTk2LDM3NTk3LDM3NTk5LDM3NjAwLDM3NjAxLDM3NjAzLDM3NjA1''@;'; put 'put ''LDM3NjA3LDM3NjA4LDM3NjEyLDM3NjE0LDM3NjE2LDM3NjI1LDM3NjI3LDM3NjMxLDM3NjMyLDM3NjM0LDM3NjQwLDM3NjQ1LDM3NjQ5LDM3NjUyLDM3NjUzLDM3NjYwLDM3NjYxLDM3NjYyLDM3NjYzLDM3NjY1LDM3NjY4LDM3NjY5LDM3NjcxLDM3NjczLDM3Njc0LDM3NjgzLDM3Njg0LDM3''@;'; put 'put ''Njg2LDM3Njg3LDM3NzAzLDM3NzA0LDM3NzA1LDM3NzEyLDM3NzEzLDM3NzE0LDM3NzE3LDM3NzE5LDM3NzIwLDM3NzIyLDM3NzI2LDM3NzMyLDM3NzMzLDM3NzM1LDM3NzM3LDM3NzM4LDM3NzQxLDM3NzQzLDM3NzQ0LDM3NzQ1LDM3NzQ3LDM3NzQ4LDM3NzUwLDM3NzU0LDM3NzU3LDM3NzU5''@;'; put 'put ''LDM3NzYwLDM3NzYxLDM3NzYyLDM3NzY4LDM3NzcwLDM3NzcxLDM3NzczLDM3Nzc1LDM3Nzc4LDM3NzgxLDM3Nzg0LDM3Nzg3LDM3NzkwLDM3NzkzLDM3Nzk1LDM3Nzk2LDM3Nzk4LDM3ODAwLDM3ODAzLDM3ODEyLDM3ODEzLDM3ODE0LDM3ODE4LDM3ODAxLDM3ODI1LDM3ODI4LDM3ODI5LDM3''@;'; put 'put ''ODMwLDM3ODMxLDM3ODMzLDM3ODM0LDM3ODM1LDM3ODM2LDM3ODM3LDM3ODQzLDM3ODQ5LDM3ODUyLDM3ODU0LDM3ODU1LDM3ODU4LDM3ODYyLDM3ODYzLDM3ODgxLDM3ODc5LDM3ODgwLDM3ODgyLDM3ODgzLDM3ODg1LDM3ODg5LDM3ODkwLDM3ODkyLDM3ODk2LDM3ODk3LDM3OTAxLDM3OTAy''@;'; put 'put ''LDM3OTAzLDM3OTA5LDM3OTEwLDM3OTExLDM3OTE5LDM3OTM0LDM3OTM1LDM3OTM3LDM3OTM4LDM3OTM5LDM3OTQwLDM3OTQ3LDM3OTUxLDM3OTQ5LDM3OTU1LDM3OTU3LDM3OTYwLDM3OTYyLDM3OTY0LDM3OTczLDM3OTc3LDM3OTgwLDM3OTgzLDM3OTg1LDM3OTg3LDM3OTkyLDM3OTk1LDM3''@;'; put 'put ''OTk3LDM3OTk4LDM3OTk5LDM4MDAxLDM4MDAyLDM4MDIwLDM4MDE5LDM4MjY0LDM4MjY1LDM4MjcwLDM4Mjc2LDM4MjgwLDM4Mjg0LDM4Mjg1LDM4Mjg2LDM4MzAxLDM4MzAyLDM4MzAzLDM4MzA1LDM4MzEwLDM4MzEzLDM4MzE1LDM4MzE2LDM4MzI0LDM4MzI2LDM4MzMwLDM4MzMzLDM4MzM1''@;'; put 'put ''LDM4MzQyLDM4MzQ0LDM4MzQ1LDM4MzQ3LDM4MzUyLDM4MzUzLDM4MzU0LDM4MzU1LDM4MzYxLDM4MzYyLDM4MzY1LDM4MzY2LDM4MzY3LDM4MzY4LDM4MzcyLDM4Mzc0LDM4NDI5LDM4NDMwLDM4NDM0LDM4NDM2LDM4NDM3LDM4NDM4LDM4NDQ0LDM4NDQ5LDM4NDUxLDM4NDU1LDM4NDU2LDM4''@;'; put 'put ''NDU3LDM4NDU4LDM4NDYwLDM4NDYxLDM4NDY1LDM4NDgyLDM4NDg0LDM4NDg2LDM4NDg3LDM4NDg4LDM4NDk3LDM4NTEwLDM4NTE2LDM4NTIzLDM4NTI0LDM4NTI2LDM4NTI3LDM4NTI5LDM4NTMwLDM4NTMxLDM4NTMyLDM4NTM3LDM4NTQ1LDM4NTUwLDM4NTU0LDM4NTU3LDM4NTU5LDM4NTY0''@;'; put 'put ''LDM4NTY1LDM4NTY2LDM4NTY5LDM4NTc0LDM4NTc1LDM4NTc5LDM4NTg2LDM4NjAyLDM4NjEwLDIzOTg2LDM4NjE2LDM4NjE4LDM4NjIxLDM4NjIyLDM4NjIzLDM4NjMzLDM4NjM5LDM4NjQxLDM4NjUwLDM4NjU4LDM4NjU5LDM4NjYxLDM4NjY1LDM4NjgyLDM4NjgzLDM4Njg1LDM4Njg5LDM4''@;'; put 'put ''NjkwLDM4NjkxLDM4Njk2LDM4NzA1LDM4NzA3LDM4NzIxLDM4NzIzLDM4NzMwLDM4NzM0LDM4NzM1LDM4NzQxLDM4NzQzLDM4NzQ0LDM4NzQ2LDM4NzQ3LDM4NzU1LDM4NzU5LDM4NzYyLDM4NzY2LDM4NzcxLDM4Nzc0LDM4Nzc1LDM4Nzc2LDM4Nzc5LDM4NzgxLDM4NzgzLDM4Nzg0LDM4Nzkz''@;'; put 'put ''LDM4ODA1LDM4ODA2LDM4ODA3LDM4ODA5LDM4ODEwLDM4ODE0LDM4ODE1LDM4ODE4LDM4ODI4LDM4ODMwLDM4ODMzLDM4ODM0LDM4ODM3LDM4ODM4LDM4ODQwLDM4ODQxLDM4ODQyLDM4ODQ0LDM4ODQ2LDM4ODQ3LDM4ODQ5LDM4ODUyLDM4ODUzLDM4ODU1LDM4ODU3LDM4ODU4LDM4ODYwLDM4''@;'; put 'put ''ODYxLDM4ODYyLDM4ODY0LDM4ODY1LDM4ODY4LDM4ODcxLDM4ODcyLDM4ODczLDM4ODc3LDM4ODc4LDM4ODgwLDM4ODc1LDM4ODgxLDM4ODg0LDM4ODk1LDM4ODk3LDM4OTAwLDM4OTAzLDM4OTA0LDM4OTA2LDM4OTE5LDM4OTIyLDM4OTM3LDM4OTI1LDM4OTI2LDM4OTMyLDM4OTM0LDM4OTQw''@;'; put 'put ''LDM4OTQyLDM4OTQ0LDM4OTQ3LDM4OTUwLDM4OTU1LDM4OTU4LDM4OTU5LDM4OTYwLDM4OTYyLDM4OTYzLDM4OTY1LDM4OTQ5LDM4OTc0LDM4OTgwLDM4OTgzLDM4OTg2LDM4OTkzLDM4OTk0LDM4OTk1LDM4OTk4LDM4OTk5LDM5MDAxLDM5MDAyLDM5MDEwLDM5MDExLDM5MDEzLDM5MDE0LDM5''@;'; put 'put ''MDE4LDM5MDIwLDM5MDgzLDM5MDg1LDM5MDg2LDM5MDg4LDM5MDkyLDM5MDk1LDM5MDk2LDM5MDk4LDM5MDk5LDM5MTAzLDM5MTA2LDM5MTA5LDM5MTEyLDM5MTE2LDM5MTM3LDM5MTM5LDM5MTQxLDM5MTQyLDM5MTQzLDM5MTQ2LDM5MTU1LDM5MTU4LDM5MTcwLDM5MTc1LDM5MTc2LDM5MTg1''@;'; put 'put ''LDM5MTg5LDM5MTkwLDM5MTkxLDM5MTk0LDM5MTk1LDM5MTk2LDM5MTk5LDM5MjAyLDM5MjA2LDM5MjA3LDM5MjExLDM5MjE3LDM5MjE4LDM5MjE5LDM5MjIwLDM5MjIxLDM5MjI1LDM5MjI2LDM5MjI3LDM5MjI4LDM5MjMyLDM5MjMzLDM5MjM4LDM5MjM5LDM5MjQwLDM5MjQ1LDM5MjQ2LDM5''@;'; put 'put ''MjUyLDM5MjU2LDM5MjU3LDM5MjU5LDM5MjYwLDM5MjYyLDM5MjYzLDM5MjY0LDM5MzIzLDM5MzI1LDM5MzI3LDM5MzM0LDM5MzQ0LDM5MzQ1LDM5MzQ2LDM5MzQ5LDM5MzUzLDM5MzU0LDM5MzU3LDM5MzU5LDM5MzYzLDM5MzY5LDM5Mzc5LDM5MzgwLDM5Mzg1LDM5Mzg2LDM5Mzg4LDM5Mzkw''@;'; put 'put ''LDM5Mzk5LDM5NDAyLDM5NDAzLDM5NDA0LDM5NDA4LDM5NDEyLDM5NDEzLDM5NDE3LDM5NDIxLDM5NDIyLDM5NDI2LDM5NDI3LDM5NDI4LDM5NDM1LDM5NDM2LDM5NDQwLDM5NDQxLDM5NDQ2LDM5NDU0LDM5NDU2LDM5NDU4LDM5NDU5LDM5NDYwLDM5NDYzLDM5NDY5LDM5NDcwLDM5NDc1LDM5''@;'; put 'put ''NDc3LDM5NDc4LDM5NDgwLDM5NDk1LDM5NDg5LDM5NDkyLDM5NDk4LDM5NDk5LDM5NTAwLDM5NTAyLDM5NTA1LDM5NTA4LDM5NTEwLDM5NTE3LDM5NTk0LDM5NTk2LDM5NTk4LDM5NTk5LDM5NjAyLDM5NjA0LDM5NjA1LDM5NjA2LDM5NjA5LDM5NjExLDM5NjE0LDM5NjE1LDM5NjE3LDM5NjE5''@;'; put 'put ''LDM5NjIyLDM5NjI0LDM5NjMwLDM5NjMyLDM5NjM0LDM5NjM3LDM5NjM4LDM5NjM5LDM5NjQzLDM5NjQ0LDM5NjQ4LDM5NjUyLDM5NjUzLDM5NjU1LDM5NjU3LDM5NjYwLDM5NjY2LDM5NjY3LDM5NjY5LDM5NjczLDM5Njc0LDM5Njc3LDM5Njc5LDM5NjgwLDM5NjgxLDM5NjgyLDM5NjgzLDM5''@;'; put 'put ''Njg0LDM5Njg1LDM5Njg4LDM5Njg5LDM5NjkxLDM5NjkyLDM5NjkzLDM5Njk0LDM5Njk2LDM5Njk4LDM5NzAyLDM5NzA1LDM5NzA3LDM5NzA4LDM5NzEyLDM5NzE4LDM5NzIzLDM5NzI1LDM5NzMxLDM5NzMyLDM5NzMzLDM5NzM1LDM5NzM3LDM5NzM4LDM5NzQxLDM5NzUyLDM5NzU1LDM5NzU2''@;'; put 'put ''LDM5NzY1LDM5NzY2LDM5NzY3LDM5NzcxLDM5Nzc0LDM5Nzc3LDM5Nzc5LDM5NzgxLDM5NzgyLDM5Nzg0LDM5Nzg2LDM5Nzg3LDM5Nzg4LDM5Nzg5LDM5NzkwLDM5Nzk1LDM5Nzk3LDM5Nzk5LDM5ODAwLDM5ODAxLDM5ODA3LDM5ODA4LDM5ODEyLDM5ODEzLDM5ODE0LDM5ODE1LDM5ODE3LDM5''@;'; put 'put ''ODE4LDM5ODE5LDM5ODIxLDM5ODIzLDM5ODI0LDM5ODI4LDM5ODM0LDM5ODM3LDM5ODM4LDM5ODQ2LDM5ODQ3LDM5ODQ5LDM5ODUyLDM5ODU2LDM5ODU3LDM5ODU4LDM5ODYzLDM5ODY0LDM5ODY3LDM5ODY4LDM5ODcwLDM5ODcxLDM5ODczLDM5ODc5LDM5ODgwLDM5ODg2LDM5ODg4LDM5ODk1''@;'; put 'put ''LDM5ODk2LDM5OTAxLDM5OTAzLDM5OTA5LDM5OTExLDM5OTE0LDM5OTE1LDM5OTE5LDM5OTIzLDM5OTI3LDM5OTI4LDM5OTI5LDM5OTMwLDM5OTMzLDM5OTM1LDM5OTM2LDM5OTM4LDM5OTQ3LDM5OTUxLDM5OTUzLDM5OTU4LDM5OTYwLDM5OTYxLDM5OTYyLDM5OTY0LDM5OTY2LDM5OTcwLDM5''@;'; put 'put ''OTcxLDM5OTc0LDM5OTc1LDM5OTc2LDM5OTc3LDM5OTc4LDM5OTg1LDM5OTg5LDM5OTkwLDM5OTkxLDM5OTk3LDQwMDAxLDQwMDAzLDQwMDA0LDQwMDA1LDQwMDA5LDQwMDEwLDQwMDE0LDQwMDE1LDQwMDE2LDQwMDE5LDQwMDIwLDQwMDIyLDQwMDI0LDQwMDI3LDQwMDI5LDQwMDMwLDQwMDMx''@;'; put 'put ''LDQwMDM1LDQwMDQxLDQwMDQyLDQwMDI4LDQwMDQzLDQwMDQwLDQwMDQ2LDQwMDQ4LDQwMDUwLDQwMDUzLDQwMDU1LDQwMDU5LDQwMTY2LDQwMTc4LDQwMTgzLDQwMTg1LDQwMjAzLDQwMTk0LDQwMjA5LDQwMjE1LDQwMjE2LDQwMjIwLDQwMjIxLDQwMjIyLDQwMjM5LDQwMjQwLDQwMjQyLDQw''@;'; put 'put ''MjQzLDQwMjQ0LDQwMjUwLDQwMjUyLDQwMjYxLDQwMjUzLDQwMjU4LDQwMjU5LDQwMjYzLDQwMjY2LDQwMjc1LDQwMjc2LDQwMjg3LDQwMjkxLDQwMjkwLDQwMjkzLDQwMjk3LDQwMjk4LDQwMjk5LDQwMzA0LDQwMzEwLDQwMzExLDQwMzE1LDQwMzE2LDQwMzE4LDQwMzIzLDQwMzI0LDQwMzI2''@;'; put 'put ''LDQwMzMwLDQwMzMzLDQwMzM0LDQwMzM4LDQwMzM5LDQwMzQxLDQwMzQyLDQwMzQzLDQwMzQ0LDQwMzUzLDQwMzYyLDQwMzY0LDQwMzY2LDQwMzY5LDQwMzczLDQwMzc3LDQwMzgwLDQwMzgzLDQwMzg3LDQwMzkxLDQwMzkzLDQwMzk0LDQwNDA0LDQwNDA1LDQwNDA2LDQwNDA3LDQwNDEwLDQw''@;'; put 'put ''NDE0LDQwNDE1LDQwNDE2LDQwNDIxLDQwNDIzLDQwNDI1LDQwNDI3LDQwNDMwLDQwNDMyLDQwNDM1LDQwNDM2LDQwNDQ2LDQwNDU4LDQwNDUwLDQwNDU1LDQwNDYyLDQwNDY0LDQwNDY1LDQwNDY2LDQwNDY5LDQwNDcwLDQwNDczLDQwNDc2LDQwNDc3LDQwNTcwLDQwNTcxLDQwNTcyLDQwNTc2''@;'; put 'put ''LDQwNTc4LDQwNTc5LDQwNTgwLDQwNTgxLDQwNTgzLDQwNTkwLDQwNTkxLDQwNTk4LDQwNjAwLDQwNjAzLDQwNjA2LDQwNjEyLDQwNjE2LDQwNjIwLDQwNjIyLDQwNjIzLDQwNjI0LDQwNjI3LDQwNjI4LDQwNjI5LDQwNjQ2LDQwNjQ4LDQwNjUxLDQwNjYxLDQwNjcxLDQwNjc2LDQwNjc5LDQw''@;'; put 'put ''Njg0LDQwNjg1LDQwNjg2LDQwNjg4LDQwNjg5LDQwNjkwLDQwNjkzLDQwNjk2LDQwNzAzLDQwNzA2LDQwNzA3LDQwNzEzLDQwNzE5LDQwNzIwLDQwNzIxLDQwNzIyLDQwNzI0LDQwNzI2LDQwNzI3LDQwNzI5LDQwNzMwLDQwNzMxLDQwNzM1LDQwNzM4LDQwNzQyLDQwNzQ2LDQwNzQ3LDQwNzUx''@;'; put 'put ''LDQwNzUzLDQwNzU0LDQwNzU2LDQwNzU5LDQwNzYxLDQwNzYyLDQwNzY0LDQwNzY1LDQwNzY3LDQwNzY5LDQwNzcxLDQwNzcyLDQwNzczLDQwNzc0LDQwNzc1LDQwNzg3LDQwNzg5LDQwNzkwLDQwNzkxLDQwNzkyLDQwNzk0LDQwNzk3LDQwNzk4LDQwODA4LDQwODA5LDQwODEzLDQwODE0LDQw''@;'; put 'put ''ODE1LDQwODE2LDQwODE3LDQwODE5LDQwODIxLDQwODI2LDQwODI5LDQwODQ3LDQwODQ4LDQwODQ5LDQwODUwLDQwODUyLDQwODU0LDQwODU1LDQwODYyLDQwODY1LDQwODY2LDQwODY3LDQwODY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0saWJtODY2OlsxMDQw''@;'; put 'put ''LDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDcz''@;'; put 'put ''LDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4Nyw5NjE3LDk2MTgsOTYxOSw5NDc0LDk1MDgsOTU2OSw5NTcwLDk1NTgsOTU1Nyw5NTcxLDk1NTMsOTU1OSw5NTY1LDk1NjQsOTU2Myw5NDg4LDk0OTIsOTUyNCw5NTE2''@;'; put 'put ''LDk1MDAsOTQ3Miw5NTMyLDk1NjYsOTU2Nyw5NTYyLDk1NTYsOTU3Nyw5NTc0LDk1NjgsOTU1Miw5NTgwLDk1NzUsOTU3Niw5NTcyLDk1NzMsOTU2MSw5NTYwLDk1NTQsOTU1NSw5NTc5LDk1NzgsOTQ5Niw5NDg0LDk2MDgsOTYwNCw5NjEyLDk2MTYsOTYwMCwxMDg4LDEwODksMTA5MCwxMDkx''@;'; put 'put ''LDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDEwMjUsMTEwNSwxMDI4LDExMDgsMTAzMSwxMTExLDEwMzgsMTExOCwxNzYsODcyOSwxODMsODczMCw4NDcwLDE2NCw5NjMyLDE2MF0sImlzby04ODU5LTIiOlsxMjgsMTI5LDEzMCwx''@;'; put 'put ''MzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyNjAsNzI4LDMyMSwxNjQsMzE3LDM0NiwxNjcsMTY4LDM1MiwzNTAsMzU2LDM3''@;'; put 'put ''NywxNzMsMzgxLDM3OSwxNzYsMjYxLDczMSwzMjIsMTgwLDMxOCwzNDcsNzExLDE4NCwzNTMsMzUxLDM1NywzNzgsNzMzLDM4MiwzODAsMzQwLDE5MywxOTQsMjU4LDE5NiwzMTMsMjYyLDE5OSwyNjgsMjAxLDI4MCwyMDMsMjgyLDIwNSwyMDYsMjcwLDI3MiwzMjMsMzI3LDIxMSwyMTIsMzM2''@;'; put 'put ''LDIxNCwyMTUsMzQ0LDM2NiwyMTgsMzY4LDIyMCwyMjEsMzU0LDIyMywzNDEsMjI1LDIyNiwyNTksMjI4LDMxNCwyNjMsMjMxLDI2OSwyMzMsMjgxLDIzNSwyODMsMjM3LDIzOCwyNzEsMjczLDMyNCwzMjgsMjQzLDI0NCwzMzcsMjQ2LDI0NywzNDUsMzY3LDI1MCwzNjksMjUyLDI1MywzNTUs''@;'; put 'put ''NzI5XSwiaXNvLTg4NTktMyI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI5NCw3MjgsMTYzLDE2''@;'; put 'put ''NCxudWxsLDI5MiwxNjcsMTY4LDMwNCwzNTAsMjg2LDMwOCwxNzMsbnVsbCwzNzksMTc2LDI5NSwxNzgsMTc5LDE4MCwxODEsMjkzLDE4MywxODQsMzA1LDM1MSwyODcsMzA5LDE4OSxudWxsLDM4MCwxOTIsMTkzLDE5NCxudWxsLDE5NiwyNjYsMjY0LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0''@;'; put 'put ''LDIwNSwyMDYsMjA3LG51bGwsMjA5LDIxMCwyMTEsMjEyLDI4OCwyMTQsMjE1LDI4NCwyMTcsMjE4LDIxOSwyMjAsMzY0LDM0OCwyMjMsMjI0LDIyNSwyMjYsbnVsbCwyMjgsMjY3LDI2NSwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSxudWxsLDI0MSwyNDIsMjQzLDI0NCwy''@;'; put 'put ''ODksMjQ2LDI0NywyODUsMjQ5LDI1MCwyNTEsMjUyLDM2NSwzNDksNzI5XSwiaXNvLTg4NTktNCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0''@;'; put 'put ''LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2MCwzMTIsMzQyLDE2NCwyOTYsMzE1LDE2NywxNjgsMzUyLDI3NCwyOTAsMzU4LDE3MywzODEsMTc1LDE3NiwyNjEsNzMxLDM0MywxODAsMjk3LDMxNiw3MTEsMTg0LDM1MywyNzUsMjkxLDM1OSwzMzAsMzgyLDMzMSwyNTYsMTkzLDE5NCwxOTUs''@;'; put 'put ''MTk2LDE5NywxOTgsMzAyLDI2OCwyMDEsMjgwLDIwMywyNzgsMjA1LDIwNiwyOTgsMjcyLDMyNSwzMzIsMzEwLDIxMiwyMTMsMjE0LDIxNSwyMTYsMzcwLDIxOCwyMTksMjIwLDM2MCwzNjIsMjIzLDI1NywyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwzMDMsMjY5LDIzMywyODEsMjM1LDI3OSwy''@;'; put 'put ''MzcsMjM4LDI5OSwyNzMsMzI2LDMzMywzMTEsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwzNzEsMjUwLDI1MSwyNTIsMzYxLDM2Myw3MjldLCJpc28tODg1OS01IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2''@;'; put 'put ''LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTczLDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2''@;'; put 'put ''LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5''@;'; put 'put ''LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDg0NzAsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEy''@;'; put 'put ''LDExMTMsMTExNCwxMTE1LDExMTYsMTY3LDExMTgsMTExOV0sImlzby04ODU5LTYiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2''@;'; put 'put ''LDE1NywxNTgsMTU5LDE2MCxudWxsLG51bGwsbnVsbCwxNjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNTQ4LDE3MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE1NjMsbnVsbCxudWxsLG51bGws''@;'; put 'put ''MTU2NyxudWxsLDE1NjksMTU3MCwxNTcxLDE1NzIsMTU3MywxNTc0LDE1NzUsMTU3NiwxNTc3LDE1NzgsMTU3OSwxNTgwLDE1ODEsMTU4MiwxNTgzLDE1ODQsMTU4NSwxNTg2LDE1ODcsMTU4OCwxNTg5LDE1OTAsMTU5MSwxNTkyLDE1OTMsMTU5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''MTYwMCwxNjAxLDE2MDIsMTYwMywxNjA0LDE2MDUsMTYwNiwxNjA3LDE2MDgsMTYwOSwxNjEwLDE2MTEsMTYxMiwxNjEzLDE2MTQsMTYxNSwxNjE2LDE2MTcsMTYxOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSwiaXNv''@;'; put 'put ''LTg4NTktNyI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDgyMTYsODIxNywxNjMsODM2NCw4MzY3''@;'; put 'put ''LDE2NiwxNjcsMTY4LDE2OSw4OTAsMTcxLDE3MiwxNzMsbnVsbCw4MjEzLDE3NiwxNzcsMTc4LDE3OSw5MDAsOTAxLDkwMiwxODMsOTA0LDkwNSw5MDYsMTg3LDkwOCwxODksOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDky''@;'; put 'put ''Niw5MjcsOTI4LDkyOSxudWxsLDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2''@;'; put 'put ''Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsbnVsbF0sImlzby04ODU5LTgiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2''@;'; put 'put ''LDE1NywxNTgsMTU5LDE2MCxudWxsLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMjE1LDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDI0NywxODcsMTg4LDE4OSwxOTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDgyMTUsMTQ4OCwxNDg5LDE0OTAsMTQ5MSwxNDkyLDE0''@;'; put 'put ''OTMsMTQ5NCwxNDk1LDE0OTYsMTQ5NywxNDk4LDE0OTksMTUwMCwxNTAxLDE1MDIsMTUwMywxNTA0LDE1MDUsMTUwNiwxNTA3LDE1MDgsMTUwOSwxNTEwLDE1MTEsMTUxMiwxNTEzLDE1MTQsbnVsbCxudWxsLDgyMDYsODIwNyxudWxsXSwiaXNvLTg4NTktMTAiOlsxMjgsMTI5LDEzMCwxMzEs''@;'; put 'put ''MTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyNjAsMjc0LDI5MCwyOTgsMjk2LDMxMCwxNjcsMzE1LDI3MiwzNTIsMzU4LDM4MSwx''@;'; put 'put ''NzMsMzYyLDMzMCwxNzYsMjYxLDI3NSwyOTEsMjk5LDI5NywzMTEsMTgzLDMxNiwyNzMsMzUzLDM1OSwzODIsODIxMywzNjMsMzMxLDI1NiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwzMDIsMjY4LDIwMSwyODAsMjAzLDI3OCwyMDUsMjA2LDIwNywyMDgsMzI1LDMzMiwyMTEsMjEyLDIxMywy''@;'; put 'put ''MTQsMzYwLDIxNiwzNzAsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjU3LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDMwMywyNjksMjMzLDI4MSwyMzUsMjc5LDIzNywyMzgsMjM5LDI0MCwzMjYsMzMzLDI0MywyNDQsMjQ1LDI0NiwzNjEsMjQ4LDM3MSwyNTAsMjUxLDI1MiwyNTMsMjU0LDMx''@;'; put 'put ''Ml0sImlzby04ODU5LTEzIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsODIyMSwxNjIsMTYzLDE2''@;'; put 'put ''NCw4MjIyLDE2NiwxNjcsMjE2LDE2OSwzNDIsMTcxLDE3MiwxNzMsMTc0LDE5OCwxNzYsMTc3LDE3OCwxNzksODIyMCwxODEsMTgyLDE4MywyNDgsMTg1LDM0MywxODcsMTg4LDE4OSwxOTAsMjMwLDI2MCwzMDIsMjU2LDI2MiwxOTYsMTk3LDI4MCwyNzQsMjY4LDIwMSwzNzcsMjc4LDI5MCwz''@;'; put 'put ''MTAsMjk4LDMxNSwzNTIsMzIzLDMyNSwyMTEsMzMyLDIxMywyMTQsMjE1LDM3MCwzMjEsMzQ2LDM2MiwyMjAsMzc5LDM4MSwyMjMsMjYxLDMwMywyNTcsMjYzLDIyOCwyMjksMjgxLDI3NSwyNjksMjMzLDM3OCwyNzksMjkxLDMxMSwyOTksMzE2LDM1MywzMjQsMzI2LDI0MywzMzMsMjQ1LDI0''@;'; put 'put ''NiwyNDcsMzcxLDMyMiwzNDcsMzYzLDI1MiwzODAsMzgyLDgyMTddLCJpc28tODg1OS0xNCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1''@;'; put 'put ''NSwxNTYsMTU3LDE1OCwxNTksMTYwLDc2ODIsNzY4MywxNjMsMjY2LDI2Nyw3NjkwLDE2Nyw3ODA4LDE2OSw3ODEwLDc2OTEsNzkyMiwxNzMsMTc0LDM3Niw3NzEwLDc3MTEsMjg4LDI4OSw3NzQ0LDc3NDUsMTgyLDc3NjYsNzgwOSw3NzY3LDc4MTEsNzc3Niw3OTIzLDc4MTIsNzgxMyw3Nzc3''@;'; put 'put ''LDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywzNzIsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsNzc4NiwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwzNzQsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMy''@;'; put 'put ''LDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwzNzMsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsNzc4NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywzNzUsMjU1XSwiaXNvLTg4NTktMTUiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQx''@;'; put 'put ''LDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwxNjEsMTYyLDE2Myw4MzY0LDE2NSwzNTIsMTY3LDM1MywxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDM4MSwxODEsMTgy''@;'; put 'put ''LDE4MywzODIsMTg1LDE4NiwxODcsMzM4LDMzOSwzNzYsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMs''@;'; put 'put ''MjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NV0sImlzby04ODU5LTE2IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwx''@;'; put 'put ''MzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjYwLDI2MSwzMjEsODM2NCw4MjIyLDM1MiwxNjcsMzUzLDE2OSw1MzYsMTcxLDM3NywxNzMs''@;'; put 'put ''Mzc4LDM3OSwxNzYsMTc3LDI2OCwzMjIsMzgxLDgyMjEsMTgyLDE4MywzODIsMjY5LDUzNywxODcsMzM4LDMzOSwzNzYsMzgwLDE5MiwxOTMsMTk0LDI1OCwxOTYsMjYyLDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyNzIsMzIzLDIxMCwyMTEsMjEyLDMzNiwyMTQs''@;'; put 'put ''MzQ2LDM2OCwyMTcsMjE4LDIxOSwyMjAsMjgwLDUzOCwyMjMsMjI0LDIyNSwyMjYsMjU5LDIyOCwyNjMsMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI3MywzMjQsMjQyLDI0MywyNDQsMzM3LDI0NiwzNDcsMzY5LDI0OSwyNTAsMjUxLDI1MiwyODEsNTM5LDI1NV0s''@;'; put 'put ''ImtvaTgtciI6Wzk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksODk5Miw5NjMyLDg3MjksODczMCw4Nzc2LDg4MDQsODgwNSwxNjAsODk5MywxNzYsMTc4LDE4MywyNDcs''@;'; put 'put ''OTU1Miw5NTUzLDk1NTQsMTEwNSw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSwxMDI1LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCwxNjksMTEwMiwx''@;'; put 'put ''MDcyLDEwNzMsMTA5NCwxMDc2LDEwNzcsMTA5MiwxMDc1LDEwOTMsMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDExMDMsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDc4LDEwNzQsMTEwMCwxMDk5LDEwNzksMTA5NiwxMTAxLDEwOTcsMTA5NSwxMDk4LDEwNzAsMTA0MCwx''@;'; put 'put ''MDQxLDEwNjIsMTA0NCwxMDQ1LDEwNjAsMTA0MywxMDYxLDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDcxLDEwNTYsMTA1NywxMDU4LDEwNTksMTA0NiwxMDQyLDEwNjgsMTA2NywxMDQ3LDEwNjQsMTA2OSwxMDY1LDEwNjMsMTA2Nl0sImtvaTgtdSI6Wzk0NzIs''@;'; put 'put ''OTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksODk5Miw5NjMyLDg3MjksODczMCw4Nzc2LDg4MDQsODgwNSwxNjAsODk5MywxNzYsMTc4LDE4MywyNDcsOTU1Miw5NTUzLDk1NTQs''@;'; put 'put ''MTEwNSwxMTA4LDk1NTYsMTExMCwxMTExLDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2MywxMTY5LDExMTgsOTU2Niw5NTY3LDk1NjgsOTU2OSwxMDI1LDEwMjgsOTU3MSwxMDMwLDEwMzEsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDExNjgsMTAzOCwxNjksMTEwMiwxMDcyLDEwNzMsMTA5NCwx''@;'; put 'put ''MDc2LDEwNzcsMTA5MiwxMDc1LDEwOTMsMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDExMDMsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDc4LDEwNzQsMTEwMCwxMDk5LDEwNzksMTA5NiwxMTAxLDEwOTcsMTA5NSwxMDk4LDEwNzAsMTA0MCwxMDQxLDEwNjIsMTA0NCwx''@;'; put 'put ''MDQ1LDEwNjAsMTA0MywxMDYxLDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDcxLDEwNTYsMTA1NywxMDU4LDEwNTksMTA0NiwxMDQyLDEwNjgsMTA2NywxMDQ3LDEwNjQsMTA2OSwxMDY1LDEwNjMsMTA2Nl0sbWFjaW50b3NoOlsxOTYsMTk3LDE5OSwyMDEsMjA5''@;'; put 'put ''LDIxNCwyMjAsMjI1LDIyNCwyMjYsMjI4LDIyNywyMjksMjMxLDIzMywyMzIsMjM0LDIzNSwyMzcsMjM2LDIzOCwyMzksMjQxLDI0MywyNDIsMjQ0LDI0NiwyNDUsMjUwLDI0OSwyNTEsMjUyLDgyMjQsMTc2LDE2MiwxNjMsMTY3LDgyMjYsMTgyLDIyMywxNzQsMTY5LDg0ODIsMTgwLDE2OCw4''@;'; put 'put ''ODAwLDE5OCwyMTYsODczNCwxNzcsODgwNCw4ODA1LDE2NSwxODEsODcwNiw4NzIxLDg3MTksOTYwLDg3NDcsMTcwLDE4Niw5MzcsMjMwLDI0OCwxOTEsMTYxLDE3Miw4NzMwLDQwMiw4Nzc2LDg3MTAsMTcxLDE4Nyw4MjMwLDE2MCwxOTIsMTk1LDIxMywzMzgsMzM5LDgyMTEsODIxMiw4MjIw''@;'; put 'put ''LDgyMjEsODIxNiw4MjE3LDI0Nyw5Njc0LDI1NSwzNzYsODI2MCw4MzY0LDgyNDksODI1MCw2NDI1Nyw2NDI1OCw4MjI1LDE4Myw4MjE4LDgyMjIsODI0MCwxOTQsMjAyLDE5MywyMDMsMjAwLDIwNSwyMDYsMjA3LDIwNCwyMTEsMjEyLDYzNzQzLDIxMCwyMTgsMjE5LDIxNywzMDUsNzEwLDcz''@;'; put 'put ''MiwxNzUsNzI4LDcyOSw3MzAsMTg0LDczMyw3MzEsNzExXSwid2luZG93cy04NzQiOls4MzY0LDEyOSwxMzAsMTMxLDEzMiw4MjMwLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsMTUzLDE1''@;'; put 'put ''NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwzNTg1LDM1ODYsMzU4NywzNTg4LDM1ODksMzU5MCwzNTkxLDM1OTIsMzU5MywzNTk0LDM1OTUsMzU5NiwzNTk3LDM1OTgsMzU5OSwzNjAwLDM2MDEsMzYwMiwzNjAzLDM2MDQsMzYwNSwzNjA2LDM2MDcsMzYwOCwzNjA5LDM2MTAsMzYxMSwzNjEy''@;'; put 'put ''LDM2MTMsMzYxNCwzNjE1LDM2MTYsMzYxNywzNjE4LDM2MTksMzYyMCwzNjIxLDM2MjIsMzYyMywzNjI0LDM2MjUsMzYyNiwzNjI3LDM2MjgsMzYyOSwzNjMwLDM2MzEsMzYzMiwzNjMzLDM2MzQsMzYzNSwzNjM2LDM2MzcsMzYzOCwzNjM5LDM2NDAsMzY0MSwzNjQyLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsMzY0NywzNjQ4LDM2NDksMzY1MCwzNjUxLDM2NTIsMzY1MywzNjU0LDM2NTUsMzY1NiwzNjU3LDM2NTgsMzY1OSwzNjYwLDM2NjEsMzY2MiwzNjYzLDM2NjQsMzY2NSwzNjY2LDM2NjcsMzY2OCwzNjY5LDM2NzAsMzY3MSwzNjcyLDM2NzMsMzY3NCwzNjc1LG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGxdLCJ3aW5kb3dzLTEyNTAiOls4MzY0LDEyOSw4MjE4LDEzMSw4MjIyLDgyMzAsODIyNCw4MjI1LDEzNiw4MjQwLDM1Miw4MjQ5LDM0NiwzNTYsMzgxLDM3NywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwzNTMsODI1MCwzNDcsMzU3LDM4Miwz''@;'; put 'put ''NzgsMTYwLDcxMSw3MjgsMzIxLDE2NCwyNjAsMTY2LDE2NywxNjgsMTY5LDM1MCwxNzEsMTcyLDE3MywxNzQsMzc5LDE3NiwxNzcsNzMxLDMyMiwxODAsMTgxLDE4MiwxODMsMTg0LDI2MSwzNTEsMTg3LDMxNyw3MzMsMzE4LDM4MCwzNDAsMTkzLDE5NCwyNTgsMTk2LDMxMywyNjIsMTk5LDI2''@;'; put 'put ''OCwyMDEsMjgwLDIwMywyODIsMjA1LDIwNiwyNzAsMjcyLDMyMywzMjcsMjExLDIxMiwzMzYsMjE0LDIxNSwzNDQsMzY2LDIxOCwzNjgsMjIwLDIyMSwzNTQsMjIzLDM0MSwyMjUsMjI2LDI1OSwyMjgsMzE0LDI2MywyMzEsMjY5LDIzMywyODEsMjM1LDI4MywyMzcsMjM4LDI3MSwyNzMsMzI0''@;'; put 'put ''LDMyOCwyNDMsMjQ0LDMzNywyNDYsMjQ3LDM0NSwzNjcsMjUwLDM2OSwyNTIsMjUzLDM1NSw3MjldLCJ3aW5kb3dzLTEyNTEiOlsxMDI2LDEwMjcsODIxOCwxMTA3LDgyMjIsODIzMCw4MjI0LDgyMjUsODM2NCw4MjQwLDEwMzMsODI0OSwxMDM0LDEwMzYsMTAzNSwxMDM5LDExMDYsODIxNiw4''@;'; put 'put ''MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwxMTEzLDgyNTAsMTExNCwxMTE2LDExMTUsMTExOSwxNjAsMTAzOCwxMTE4LDEwMzIsMTY0LDExNjgsMTY2LDE2NywxMDI1LDE2OSwxMDI4LDE3MSwxNzIsMTczLDE3NCwxMDMxLDE3NiwxNzcsMTAzMCwxMTEwLDExNjksMTgx''@;'; put 'put ''LDE4MiwxODMsMTEwNSw4NDcwLDExMDgsMTg3LDExMTIsMTAyOSwxMTA5LDExMTEsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEw''@;'; put 'put ''NjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEw''@;'; put 'put ''OTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwM10sIndpbmRvd3MtMTI1MiI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMzUyLDgyNDksMzM4LDE0MSwzODEsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEy''@;'; put 'put ''LDczMiw4NDgyLDM1Myw4MjUwLDMzOSwxNTcsMzgyLDM3NiwxNjAsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5''@;'; put 'put ''MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMz''@;'; put 'put ''LDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NV0sIndpbmRvd3MtMTI1MyI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsMTM2LDgyNDAsMTM4LDgyNDksMTQw''@;'; put 'put ''LDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1Miw4NDgyLDE1NCw4MjUwLDE1NiwxNTcsMTU4LDE1OSwxNjAsOTAxLDkwMiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksbnVsbCwxNzEsMTcyLDE3MywxNzQsODIxMywxNzYsMTc3LDE3OCwx''@;'; put 'put ''NzksOTAwLDE4MSwxODIsMTgzLDkwNCw5MDUsOTA2LDE4Nyw5MDgsMTg5LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksbnVsbCw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5''@;'; put 'put ''NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LG51bGxdLCJ3aW5kb3dzLTEyNTQiOls4MzY0''@;'; put 'put ''LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDM1Miw4MjQ5LDMzOCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4MiwzNTMsODI1MCwzMzksMTU3LDE1OCwzNzYsMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUs''@;'; put 'put ''MTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwy''@;'; put 'put ''MDcsMjg2LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDMwNCwzNTAsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyODcsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0''@;'; put 'put ''OCwyNDksMjUwLDI1MSwyNTIsMzA1LDM1MSwyNTVdLCJ3aW5kb3dzLTEyNTUiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDEzOCw4MjQ5LDE0MCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4''@;'; put 'put ''MiwxNTQsODI1MCwxNTYsMTU3LDE1OCwxNTksMTYwLDE2MSwxNjIsMTYzLDgzNjIsMTY1LDE2NiwxNjcsMTY4LDE2OSwyMTUsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMjQ3LDE4NywxODgsMTg5LDE5MCwxOTEsMTQ1NiwxNDU3''@;'; put 'put ''LDE0NTgsMTQ1OSwxNDYwLDE0NjEsMTQ2MiwxNDYzLDE0NjQsMTQ2NSwxNDY2LDE0NjcsMTQ2OCwxNDY5LDE0NzAsMTQ3MSwxNDcyLDE0NzMsMTQ3NCwxNDc1LDE1MjAsMTUyMSwxNTIyLDE1MjMsMTUyNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE0ODgsMTQ4OSwxNDkw''@;'; put 'put ''LDE0OTEsMTQ5MiwxNDkzLDE0OTQsMTQ5NSwxNDk2LDE0OTcsMTQ5OCwxNDk5LDE1MDAsMTUwMSwxNTAyLDE1MDMsMTUwNCwxNTA1LDE1MDYsMTUwNywxNTA4LDE1MDksMTUxMCwxNTExLDE1MTIsMTUxMywxNTE0LG51bGwsbnVsbCw4MjA2LDgyMDcsbnVsbF0sIndpbmRvd3MtMTI1NiI6Wzgz''@;'; put 'put ''NjQsMTY2Miw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDE2NTcsODI0OSwzMzgsMTY3MCwxNjg4LDE2NzIsMTcxMSw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE3MDUsODQ4MiwxNjgxLDgyNTAsMzM5LDgyMDQsODIwNSwxNzIyLDE2MCwxNTQ4LDE2''@;'; put 'put ''MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcyNiwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxNTYzLDE4NywxODgsMTg5LDE5MCwxNTY3LDE3MjksMTU2OSwxNTcwLDE1NzEsMTU3MiwxNTczLDE1NzQsMTU3NSwxNTc2''@;'; put 'put ''LDE1NzcsMTU3OCwxNTc5LDE1ODAsMTU4MSwxNTgyLDE1ODMsMTU4NCwxNTg1LDE1ODYsMTU4NywxNTg4LDE1ODksMTU5MCwyMTUsMTU5MSwxNTkyLDE1OTMsMTU5NCwxNjAwLDE2MDEsMTYwMiwxNjAzLDIyNCwxNjA0LDIyNiwxNjA1LDE2MDYsMTYwNywxNjA4LDIzMSwyMzIsMjMzLDIzNCwy''@;'; put 'put ''MzUsMTYwOSwxNjEwLDIzOCwyMzksMTYxMSwxNjEyLDE2MTMsMTYxNCwyNDQsMTYxNSwxNjE2LDI0NywxNjE3LDI0OSwxNjE4LDI1MSwyNTIsODIwNiw4MjA3LDE3NDZdLCJ3aW5kb3dzLTEyNTciOls4MzY0LDEyOSw4MjE4LDEzMSw4MjIyLDgyMzAsODIyNCw4MjI1LDEzNiw4MjQwLDEzOCw4''@;'; put 'put ''MjQ5LDE0MCwxNjgsNzExLDE4NCwxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwxNTQsODI1MCwxNTYsMTc1LDczMSwxNTksMTYwLG51bGwsMTYyLDE2MywxNjQsbnVsbCwxNjYsMTY3LDIxNiwxNjksMzQyLDE3MSwxNzIsMTczLDE3NCwxOTgsMTc2LDE3''@;'; put 'put ''NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywyNDgsMTg1LDM0MywxODcsMTg4LDE4OSwxOTAsMjMwLDI2MCwzMDIsMjU2LDI2MiwxOTYsMTk3LDI4MCwyNzQsMjY4LDIwMSwzNzcsMjc4LDI5MCwzMTAsMjk4LDMxNSwzNTIsMzIzLDMyNSwyMTEsMzMyLDIxMywyMTQsMjE1LDM3MCwzMjEsMzQ2''@;'; put 'put ''LDM2MiwyMjAsMzc5LDM4MSwyMjMsMjYxLDMwMywyNTcsMjYzLDIyOCwyMjksMjgxLDI3NSwyNjksMjMzLDM3OCwyNzksMjkxLDMxMSwyOTksMzE2LDM1MywzMjQsMzI2LDI0MywzMzMsMjQ1LDI0NiwyNDcsMzcxLDMyMiwzNDcsMzYzLDI1MiwzODAsMzgyLDcyOV0sIndpbmRvd3MtMTI1OCI6''@;'; put 'put ''WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMTM4LDgyNDksMzM4LDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDczMiw4NDgyLDE1NCw4MjUwLDMzOSwxNTcsMTU4LDM3NiwxNjAsMTYxLDE2MiwxNjMsMTY0''@;'; put 'put ''LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDI1OCwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDc2OCwyMDUs''@;'; put 'put ''MjA2LDIwNywyNzIsMjA5LDc3NywyMTEsMjEyLDQxNiwyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsNDMxLDc3MSwyMjMsMjI0LDIyNSwyMjYsMjU5LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsNzY5LDIzNywyMzgsMjM5LDI3MywyNDEsODAzLDI0MywyNDQsNDE3LDI0Niwy''@;'; put 'put ''NDcsMjQ4LDI0OSwyNTAsMjUxLDI1Miw0MzIsODM2MywyNTVdLCJ4LW1hYy1jeXJpbGxpYyI6WzEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEs''@;'; put 'put ''MTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSw4MjI0LDE3NiwxMTY4LDE2MywxNjcsODIyNiwxODIsMTAzMCwxNzQsMTY5LDg0ODIsMTAyNiwxMTA2LDg4MDAsMTAyNywxMTA3LDg3MzQsMTc3LDg4MDQsODgwNSwxMTEwLDE4MSwxMTY5LDEwMzIsMTAy''@;'; put 'put ''OCwxMTA4LDEwMzEsMTExMSwxMDMzLDExMTMsMTAzNCwxMTE0LDExMTIsMTAyOSwxNzIsODczMCw0MDIsODc3Niw4NzEwLDE3MSwxODcsODIzMCwxNjAsMTAzNSwxMTE1LDEwMzYsMTExNiwxMTA5LDgyMTEsODIxMiw4MjIwLDgyMjEsODIxNiw4MjE3LDI0Nyw4MjIyLDEwMzgsMTExOCwxMDM5''@;'; put 'put ''LDExMTksODQ3MCwxMDI1LDExMDUsMTEwMywxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5''@;'; put 'put ''LDExMDAsMTEwMSwxMTAyLDgzNjRdfX0odGhpc3x8e30pfSw2NDMxOChmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyh3ZSxKZSx0dCl7cmV0dXJuIEplPD13ZSYmd2U8PXR0fWZlLmV4cG9ydHMmJiF5WyJlbmNvZGluZy1pbmRleGVzIl0mJih5WyJlbmNvZGlu''@;'; put 'put ''Zy1pbmRleGVzIl09aCg2Nzk1MSlbImVuY29kaW5nLWluZGV4ZXMiXSk7dmFyIEE9TWF0aC5mbG9vcjtmdW5jdGlvbiB2KHdlKXtpZih2b2lkIDA9PT13ZSlyZXR1cm57fTtpZih3ZT09PU9iamVjdCh3ZSkpcmV0dXJuIHdlO3Rocm93IFR5cGVFcnJvcigiQ291bGQgbm90IGNvbnZlcnQgYXJn''@;'; put 'put ''dW1lbnQgdG8gZGljdGlvbmFyeSIpfWZ1bmN0aW9uIFMod2Upe3JldHVybiAwPD13ZSYmd2U8PTEyN312YXIgTD1TLFI9LTE7ZnVuY3Rpb24geCh3ZSl7dGhpcy50b2tlbnM9W10uc2xpY2UuY2FsbCh3ZSksdGhpcy50b2tlbnMucmV2ZXJzZSgpfXgucHJvdG90eXBlPXtlbmRPZlN0cmVhbTpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiF0aGlzLnRva2Vucy5sZW5ndGh9LHJlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbnMubGVuZ3RoP3RoaXMudG9rZW5zLnBvcCgpOlJ9LHByZXBlbmQ6ZnVuY3Rpb24od2Upe2lmKEFycmF5LmlzQXJyYXkod2UpKWZvcih2YXIgSmU9d2U7SmUubGVuZ3Ro''@;'; put 'put ''Oyl0aGlzLnRva2Vucy5wdXNoKEplLnBvcCgpKTtlbHNlIHRoaXMudG9rZW5zLnB1c2god2UpfSxwdXNoOmZ1bmN0aW9uKHdlKXtpZihBcnJheS5pc0FycmF5KHdlKSlmb3IodmFyIEplPXdlO0plLmxlbmd0aDspdGhpcy50b2tlbnMudW5zaGlmdChKZS5zaGlmdCgpKTtlbHNlIHRoaXMudG9r''@;'; put 'put ''ZW5zLnVuc2hpZnQod2UpfX07dmFyIFU9LTE7ZnVuY3Rpb24gSCh3ZSxKZSl7aWYod2UpdGhyb3cgVHlwZUVycm9yKCJEZWNvZGVyIGVycm9yIik7cmV0dXJuIEplfHw2NTUzM31mdW5jdGlvbiBWKHdlKXt0aHJvdyBUeXBlRXJyb3IoIlRoZSBjb2RlIHBvaW50ICIrd2UrIiBjb3VsZCBub3Qg''@;'; put 'put ''YmUgZW5jb2RlZC4iKX1mdW5jdGlvbiBZKHdlKXtyZXR1cm4gd2U9U3RyaW5nKHdlKS50cmltKCkudG9Mb3dlckNhc2UoKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVyx3ZSk/V1t3ZV06bnVsbH12YXIgRj1be2VuY29kaW5nczpbe2xhYmVsczpbInVuaWNvZGUtMS0x''@;'; put 'put ''LXV0Zi04IiwidXRmLTgiLCJ1dGY4Il0sbmFtZToiVVRGLTgifV0saGVhZGluZzoiVGhlIEVuY29kaW5nIn0se2VuY29kaW5nczpbe2xhYmVsczpbIjg2NiIsImNwODY2IiwiY3NpYm04NjYiLCJpYm04NjYiXSxuYW1lOiJJQk04NjYifSx7bGFiZWxzOlsiY3Npc29sYXRpbjIiLCJpc28tODg1''@;'; put 'put ''OS0yIiwiaXNvLWlyLTEwMSIsImlzbzg4NTktMiIsImlzbzg4NTkyIiwiaXNvXzg4NTktMiIsImlzb184ODU5LTI6MTk4NyIsImwyIiwibGF0aW4yIl0sbmFtZToiSVNPLTg4NTktMiJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluMyIsImlzby04ODU5LTMiLCJpc28taXItMTA5IiwiaXNvODg1OS0z''@;'; put 'put ''IiwiaXNvODg1OTMiLCJpc29fODg1OS0zIiwiaXNvXzg4NTktMzoxOTg4IiwibDMiLCJsYXRpbjMiXSxuYW1lOiJJU08tODg1OS0zIn0se2xhYmVsczpbImNzaXNvbGF0aW40IiwiaXNvLTg4NTktNCIsImlzby1pci0xMTAiLCJpc284ODU5LTQiLCJpc284ODU5NCIsImlzb184ODU5LTQiLCJp''@;'; put 'put ''c29fODg1OS00OjE5ODgiLCJsNCIsImxhdGluNCJdLG5hbWU6IklTTy04ODU5LTQifSx7bGFiZWxzOlsiY3Npc29sYXRpbmN5cmlsbGljIiwiY3lyaWxsaWMiLCJpc28tODg1OS01IiwiaXNvLWlyLTE0NCIsImlzbzg4NTktNSIsImlzbzg4NTk1IiwiaXNvXzg4NTktNSIsImlzb184ODU5LTU6''@;'; put 'put ''MTk4OCJdLG5hbWU6IklTTy04ODU5LTUifSx7bGFiZWxzOlsiYXJhYmljIiwiYXNtby03MDgiLCJjc2lzbzg4NTk2ZSIsImNzaXNvODg1OTZpIiwiY3Npc29sYXRpbmFyYWJpYyIsImVjbWEtMTE0IiwiaXNvLTg4NTktNiIsImlzby04ODU5LTYtZSIsImlzby04ODU5LTYtaSIsImlzby1pci0x''@;'; put 'put ''MjciLCJpc284ODU5LTYiLCJpc284ODU5NiIsImlzb184ODU5LTYiLCJpc29fODg1OS02OjE5ODciXSxuYW1lOiJJU08tODg1OS02In0se2xhYmVsczpbImNzaXNvbGF0aW5ncmVlayIsImVjbWEtMTE4IiwiZWxvdF85MjgiLCJncmVlayIsImdyZWVrOCIsImlzby04ODU5LTciLCJpc28taXIt''@;'; put 'put ''MTI2IiwiaXNvODg1OS03IiwiaXNvODg1OTciLCJpc29fODg1OS03IiwiaXNvXzg4NTktNzoxOTg3Iiwic3VuX2V1X2dyZWVrIl0sbmFtZToiSVNPLTg4NTktNyJ9LHtsYWJlbHM6WyJjc2lzbzg4NTk4ZSIsImNzaXNvbGF0aW5oZWJyZXciLCJoZWJyZXciLCJpc28tODg1OS04IiwiaXNvLTg4''@;'; put 'put ''NTktOC1lIiwiaXNvLWlyLTEzOCIsImlzbzg4NTktOCIsImlzbzg4NTk4IiwiaXNvXzg4NTktOCIsImlzb184ODU5LTg6MTk4OCIsInZpc3VhbCJdLG5hbWU6IklTTy04ODU5LTgifSx7bGFiZWxzOlsiY3Npc284ODU5OGkiLCJpc28tODg1OS04LWkiLCJsb2dpY2FsIl0sbmFtZToiSVNPLTg4''@;'; put 'put ''NTktOC1JIn0se2xhYmVsczpbImNzaXNvbGF0aW42IiwiaXNvLTg4NTktMTAiLCJpc28taXItMTU3IiwiaXNvODg1OS0xMCIsImlzbzg4NTkxMCIsImw2IiwibGF0aW42Il0sbmFtZToiSVNPLTg4NTktMTAifSx7bGFiZWxzOlsiaXNvLTg4NTktMTMiLCJpc284ODU5LTEzIiwiaXNvODg1OTEz''@;'; put 'put ''Il0sbmFtZToiSVNPLTg4NTktMTMifSx7bGFiZWxzOlsiaXNvLTg4NTktMTQiLCJpc284ODU5LTE0IiwiaXNvODg1OTE0Il0sbmFtZToiSVNPLTg4NTktMTQifSx7bGFiZWxzOlsiY3Npc29sYXRpbjkiLCJpc28tODg1OS0xNSIsImlzbzg4NTktMTUiLCJpc284ODU5MTUiLCJpc29fODg1OS0x''@;'; put 'put ''NSIsImw5Il0sbmFtZToiSVNPLTg4NTktMTUifSx7bGFiZWxzOlsiaXNvLTg4NTktMTYiXSxuYW1lOiJJU08tODg1OS0xNiJ9LHtsYWJlbHM6WyJjc2tvaThyIiwia29pIiwia29pOCIsImtvaTgtciIsImtvaThfciJdLG5hbWU6IktPSTgtUiJ9LHtsYWJlbHM6WyJrb2k4LXJ1Iiwia29pOC11''@;'; put 'put ''Il0sbmFtZToiS09JOC1VIn0se2xhYmVsczpbImNzbWFjaW50b3NoIiwibWFjIiwibWFjaW50b3NoIiwieC1tYWMtcm9tYW4iXSxuYW1lOiJtYWNpbnRvc2gifSx7bGFiZWxzOlsiZG9zLTg3NCIsImlzby04ODU5LTExIiwiaXNvODg1OS0xMSIsImlzbzg4NTkxMSIsInRpcy02MjAiLCJ3aW5k''@;'; put 'put ''b3dzLTg3NCJdLG5hbWU6IndpbmRvd3MtODc0In0se2xhYmVsczpbImNwMTI1MCIsIndpbmRvd3MtMTI1MCIsIngtY3AxMjUwIl0sbmFtZToid2luZG93cy0xMjUwIn0se2xhYmVsczpbImNwMTI1MSIsIndpbmRvd3MtMTI1MSIsIngtY3AxMjUxIl0sbmFtZToid2luZG93cy0xMjUxIn0se2xh''@;'; put 'put ''YmVsczpbImFuc2lfeDMuNC0xOTY4IiwiYXNjaWkiLCJjcDEyNTIiLCJjcDgxOSIsImNzaXNvbGF0aW4xIiwiaWJtODE5IiwiaXNvLTg4NTktMSIsImlzby1pci0xMDAiLCJpc284ODU5LTEiLCJpc284ODU5MSIsImlzb184ODU5LTEiLCJpc29fODg1OS0xOjE5ODciLCJsMSIsImxhdGluMSIs''@;'; put 'put ''InVzLWFzY2lpIiwid2luZG93cy0xMjUyIiwieC1jcDEyNTIiXSxuYW1lOiJ3aW5kb3dzLTEyNTIifSx7bGFiZWxzOlsiY3AxMjUzIiwid2luZG93cy0xMjUzIiwieC1jcDEyNTMiXSxuYW1lOiJ3aW5kb3dzLTEyNTMifSx7bGFiZWxzOlsiY3AxMjU0IiwiY3Npc29sYXRpbjUiLCJpc28tODg1''@;'; put 'put ''OS05IiwiaXNvLWlyLTE0OCIsImlzbzg4NTktOSIsImlzbzg4NTk5IiwiaXNvXzg4NTktOSIsImlzb184ODU5LTk6MTk4OSIsImw1IiwibGF0aW41Iiwid2luZG93cy0xMjU0IiwieC1jcDEyNTQiXSxuYW1lOiJ3aW5kb3dzLTEyNTQifSx7bGFiZWxzOlsiY3AxMjU1Iiwid2luZG93cy0xMjU1''@;'; put 'put ''IiwieC1jcDEyNTUiXSxuYW1lOiJ3aW5kb3dzLTEyNTUifSx7bGFiZWxzOlsiY3AxMjU2Iiwid2luZG93cy0xMjU2IiwieC1jcDEyNTYiXSxuYW1lOiJ3aW5kb3dzLTEyNTYifSx7bGFiZWxzOlsiY3AxMjU3Iiwid2luZG93cy0xMjU3IiwieC1jcDEyNTciXSxuYW1lOiJ3aW5kb3dzLTEyNTci''@;'; put 'put ''fSx7bGFiZWxzOlsiY3AxMjU4Iiwid2luZG93cy0xMjU4IiwieC1jcDEyNTgiXSxuYW1lOiJ3aW5kb3dzLTEyNTgifSx7bGFiZWxzOlsieC1tYWMtY3lyaWxsaWMiLCJ4LW1hYy11a3JhaW5pYW4iXSxuYW1lOiJ4LW1hYy1jeXJpbGxpYyJ9XSxoZWFkaW5nOiJMZWdhY3kgc2luZ2xlLWJ5dGUg''@;'; put 'put ''ZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImNoaW5lc2UiLCJjc2diMjMxMiIsImNzaXNvNThnYjIzMTI4MCIsImdiMjMxMiIsImdiXzIzMTIiLCJnYl8yMzEyLTgwIiwiZ2JrIiwiaXNvLWlyLTU4IiwieC1nYmsiXSxuYW1lOiJHQksifSx7bGFiZWxzOlsiZ2IxODAzMCJdLG5h''@;'; put 'put ''bWU6ImdiMTgwMzAifV0saGVhZGluZzoiTGVnYWN5IG11bHRpLWJ5dGUgQ2hpbmVzZSAoc2ltcGxpZmllZCkgZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImJpZzUiLCJiaWc1LWhrc2NzIiwiY24tYmlnNSIsImNzYmlnNSIsIngteC1iaWc1Il0sbmFtZToiQmlnNSJ9XSxoZWFk''@;'; put 'put ''aW5nOiJMZWdhY3kgbXVsdGktYnl0ZSBDaGluZXNlICh0cmFkaXRpb25hbCkgZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImNzZXVjcGtkZm10amFwYW5lc2UiLCJldWMtanAiLCJ4LWV1Yy1qcCJdLG5hbWU6IkVVQy1KUCJ9LHtsYWJlbHM6WyJjc2lzbzIwMjJqcCIsImlzby0y''@;'; put 'put ''MDIyLWpwIl0sbmFtZToiSVNPLTIwMjItSlAifSx7bGFiZWxzOlsiY3NzaGlmdGppcyIsIm1zOTMyIiwibXNfa2FuamkiLCJzaGlmdC1qaXMiLCJzaGlmdF9qaXMiLCJzamlzIiwid2luZG93cy0zMWoiLCJ4LXNqaXMiXSxuYW1lOiJTaGlmdF9KSVMifV0saGVhZGluZzoiTGVnYWN5IG11bHRp''@;'; put 'put ''LWJ5dGUgSmFwYW5lc2UgZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImNzZXVja3IiLCJjc2tzYzU2MDExOTg3IiwiZXVjLWtyIiwiaXNvLWlyLTE0OSIsImtvcmVhbiIsImtzX2NfNTYwMS0xOTg3Iiwia3NfY181NjAxLTE5ODkiLCJrc2M1NjAxIiwia3NjXzU2MDEiLCJ3aW5k''@;'; put 'put ''b3dzLTk0OSJdLG5hbWU6IkVVQy1LUiJ9XSxoZWFkaW5nOiJMZWdhY3kgbXVsdGktYnl0ZSBLb3JlYW4gZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImNzaXNvMjAyMmtyIiwiaHotZ2ItMjMxMiIsImlzby0yMDIyLWNuIiwiaXNvLTIwMjItY24tZXh0IiwiaXNvLTIwMjIta3Ii''@;'; put 'put ''XSxuYW1lOiJyZXBsYWNlbWVudCJ9LHtsYWJlbHM6WyJ1dGYtMTZiZSJdLG5hbWU6IlVURi0xNkJFIn0se2xhYmVsczpbInV0Zi0xNiIsInV0Zi0xNmxlIl0sbmFtZToiVVRGLTE2TEUifSx7bGFiZWxzOlsieC11c2VyLWRlZmluZWQiXSxuYW1lOiJ4LXVzZXItZGVmaW5lZCJ9XSxoZWFkaW5n''@;'; put 'put ''OiJMZWdhY3kgbWlzY2VsbGFuZW91cyBlbmNvZGluZ3MifV0sVz17fTtGLmZvckVhY2goZnVuY3Rpb24od2Upe3dlLmVuY29kaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKEplKXtKZS5sYWJlbHMuZm9yRWFjaChmdW5jdGlvbih0dCl7V1t0dF09SmV9KX0pfSk7dmFyIGYscT17fSxyZT17fTtmdW5j''@;'; put 'put ''dGlvbiBtZSh3ZSxKZSl7cmV0dXJuIEplJiZKZVt3ZV18fG51bGx9ZnVuY3Rpb24gQ2Uod2UsSmUpe3ZhciB0dD1KZS5pbmRleE9mKHdlKTtyZXR1cm4tMT09PXR0P251bGw6dHR9ZnVuY3Rpb24gSWUod2Upe2lmKCEoImVuY29kaW5nLWluZGV4ZXMiaW4geSkpdGhyb3cgRXJyb3IoIkluZGV4''@;'; put 'put ''ZXMgbWlzc2luZy4gRGlkIHlvdSBmb3JnZXQgdG8gaW5jbHVkZSBlbmNvZGluZy1pbmRleGVzLmpzIGZpcnN0PyIpO3JldHVybiB5WyJlbmNvZGluZy1pbmRleGVzIl1bd2VdfXZhciBrLE09InV0Zi04IjtmdW5jdGlvbiBCKHdlLEplKXtpZighKHRoaXMgaW5zdGFuY2VvZiBCKSl0aHJvdyBU''@;'; put 'put ''eXBlRXJyb3IoIkNhbGxlZCBhcyBhIGZ1bmN0aW9uLiBEaWQgeW91IGZvcmdldCAnbmV3Jz8iKTt3ZT12b2lkIDAhPT13ZT9TdHJpbmcod2UpOk0sSmU9dihKZSksdGhpcy5fZW5jb2Rpbmc9bnVsbCx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5faWdub3JlQk9NPSExLHRoaXMuX0JPTXNlZW49''@;'; put 'put ''ITEsdGhpcy5fZXJyb3JfbW9kZT0icmVwbGFjZW1lbnQiLHRoaXMuX2RvX25vdF9mbHVzaD0hMTt2YXIgdHQ9WSh3ZSk7aWYobnVsbD09PXR0fHwicmVwbGFjZW1lbnQiPT09dHQubmFtZSl0aHJvdyBSYW5nZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3dlKTtpZighcmVbdHQubmFtZV0p''@;'; put 'put ''dGhyb3cgRXJyb3IoIkRlY29kZXIgbm90IHByZXNlbnQuIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgZW5jb2RpbmctaW5kZXhlcy5qcyBmaXJzdD8iKTt2YXIgS2U9dGhpcztyZXR1cm4gS2UuX2VuY29kaW5nPXR0LEplLmZhdGFsJiYoS2UuX2Vycm9yX21vZGU9ImZhdGFsIiksSmUuaWdu''@;'; put 'put ''b3JlQk9NJiYoS2UuX2lnbm9yZUJPTT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5fHwodGhpcy5lbmNvZGluZz1LZS5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpLHRoaXMuZmF0YWw9ImZhdGFsIj09PUtlLl9lcnJvcl9tb2RlLHRoaXMuaWdub3JlQk9NPUtlLl9pZ25vcmVCT00pLEtl''@;'; put 'put ''fWZ1bmN0aW9uIEsod2UsSmUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEspKXRocm93IFR5cGVFcnJvcigiQ2FsbGVkIGFzIGEgZnVuY3Rpb24uIERpZCB5b3UgZm9yZ2V0ICduZXcnPyIpO2lmKEplPXYoSmUpLHRoaXMuX2VuY29kaW5nPW51bGwsdGhpcy5fZW5jb2Rlcj1udWxsLHRoaXMuX2Rv''@;'; put 'put ''X25vdF9mbHVzaD0hMSx0aGlzLl9mYXRhbD1KZS5mYXRhbD8iZmF0YWwiOiJyZXBsYWNlbWVudCIsSmUuTk9OU1RBTkRBUkRfYWxsb3dMZWdhY3lFbmNvZGluZyl7dmFyIEtlPVkod2U9dm9pZCAwIT09d2U/U3RyaW5nKHdlKTpNKTtpZihudWxsPT09S2V8fCJyZXBsYWNlbWVudCI9PT1LZS5u''@;'; put 'put ''YW1lKXRocm93IFJhbmdlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrd2UpO2lmKCFxW0tlLm5hbWVdKXRocm93IEVycm9yKCJFbmNvZGVyIG5vdCBwcmVzZW50LiBEaWQgeW91IGZvcmdldCB0byBpbmNsdWRlIGVuY29kaW5nLWluZGV4ZXMuanMgZmlyc3Q/Iik7dGhpcy5fZW5jb2Rpbmc9''@;'; put 'put ''S2V9ZWxzZSB0aGlzLl9lbmNvZGluZz1ZKCJ1dGYtOCIpLHZvaWQgMCE9PXdlJiYiY29uc29sZSJpbiB5JiZjb25zb2xlLndhcm4oIlRleHRFbmNvZGVyIGNvbnN0cnVjdG9yIGNhbGxlZCB3aXRoIGVuY29kaW5nIGxhYmVsLCB3aGljaCBpcyBpZ25vcmVkLiIpO3JldHVybiBPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHl8fCh0aGlzLmVuY29kaW5nPXRoaXMuX2VuY29kaW5nLm5hbWUudG9Mb3dlckNhc2UoKSksdGhpc31mdW5jdGlvbiBHKHdlKXt2YXIgSmU9d2UuZmF0YWwsdHQ9MCxLZT0wLCR0PTAsUnQ9MTI4LEx0PTE5MTt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oR3QsZ3Qpe2lmKGd0PT09''@;'; put 'put ''UiYmMCE9PSR0KXJldHVybiAkdD0wLEgoSmUpO2lmKGd0PT09UilyZXR1cm4gVTtpZigwPT09JHQpe2lmKGMoZ3QsMCwxMjcpKXJldHVybiBndDtpZihjKGd0LDE5NCwyMjMpKSR0PTEsdHQ9MzEmZ3Q7ZWxzZSBpZihjKGd0LDIyNCwyMzkpKTIyND09PWd0JiYoUnQ9MTYwKSwyMzc9PT1ndCYm''@;'; put 'put ''KEx0PTE1OSksJHQ9Mix0dD0xNSZndDtlbHNle2lmKCFjKGd0LDI0MCwyNDQpKXJldHVybiBIKEplKTsyNDA9PT1ndCYmKFJ0PTE0NCksMjQ0PT09Z3QmJihMdD0xNDMpLCR0PTMsdHQ9NyZndH1yZXR1cm4gbnVsbH1pZighYyhndCxSdCxMdCkpcmV0dXJuIHR0PSR0PUtlPTAsUnQ9MTI4LEx0''@;'; put 'put ''PTE5MSxHdC5wcmVwZW5kKGd0KSxIKEplKTtpZihSdD0xMjgsTHQ9MTkxLHR0PXR0PDw2fDYzJmd0LChLZSs9MSkhPT0kdClyZXR1cm4gbnVsbDt2YXIgWHQ9dHQ7cmV0dXJuIHR0PSR0PUtlPTAsWHR9fWZ1bmN0aW9uIEQod2Upe3RoaXMuaGFuZGxlcj1mdW5jdGlvbih0dCxLZSl7aWYoS2U9''@;'; put 'put ''PT1SKXJldHVybiBVO2lmKEwoS2UpKXJldHVybiBLZTt2YXIgJHQsUnQ7YyhLZSwxMjgsMjA0Nyk/KCR0PTEsUnQ9MTkyKTpjKEtlLDIwNDgsNjU1MzUpPygkdD0yLFJ0PTIyNCk6YyhLZSw2NTUzNiwxMTE0MTExKSYmKCR0PTMsUnQ9MjQwKTtmb3IodmFyIEx0PVsoS2U+PjYqJHQpK1J0XTsk''@;'; put 'put ''dD4wOylMdC5wdXNoKDEyOHw2MyZLZT4+NiooJHQtMSkpLCR0LT0xO3JldHVybiBMdH19ZnVuY3Rpb24gcCh3ZSxKZSl7dmFyIHR0PUplLmZhdGFsO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihLZSwkdCl7aWYoJHQ9PT1SKXJldHVybiBVO2lmKFMoJHQpKXJldHVybiAkdDt2YXIgUnQ9d2VbJHQt''@;'; put 'put ''MTI4XTtyZXR1cm4gbnVsbD09PVJ0P0godHQpOlJ0fX1mdW5jdGlvbiBJKHdlLEplKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oS2UsJHQpe2lmKCR0PT09UilyZXR1cm4gVTtpZihMKCR0KSlyZXR1cm4gJHQ7dmFyIFJ0PUNlKCR0LHdlKTtyZXR1cm4gbnVsbD09PVJ0JiZWKCR0KSxSdCsxMjh9''@;'; put 'put ''fWZ1bmN0aW9uIHVlKHdlKXt2YXIgSmU9d2UuZmF0YWwsdHQ9MCxLZT0wLCR0PTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFJ0LEx0KXtpZihMdD09PVImJjA9PT10dCYmMD09PUtlJiYwPT09JHQpcmV0dXJuIFU7dmFyIEd0O2lmKEx0PT09UiYmKDAhPT10dHx8MCE9PUtlfHwwIT09JHQpJiYo''@;'; put 'put ''dHQ9MCxLZT0wLCR0PTAsSChKZSkpLDAhPT0kdCl7R3Q9bnVsbCxjKEx0LDQ4LDU3KSYmKEd0PWZ1bmN0aW9uIGtlKHdlKXtpZih3ZT4zOTQxOSYmd2U8MTg5ZTN8fHdlPjEyMzc1NzUpcmV0dXJuIG51bGw7aWYoNzQ1Nz09PXdlKXJldHVybiA1OTMzNTt2YXIgJHQsSmU9MCx0dD0wLEtlPUll''@;'; put 'put ''KCJnYjE4MDMwLXJhbmdlcyIpO2ZvcigkdD0wOyR0PEtlLmxlbmd0aDsrKyR0KXt2YXIgUnQ9S2VbJHRdO2lmKCEoUnRbMF08PXdlKSlicmVhaztKZT1SdFswXSx0dD1SdFsxXX1yZXR1cm4gdHQrd2UtSmV9KDEwKigxMjYqKDEwKih0dC0xMjkpK0tlLTQ4KSskdC0xMjkpK0x0LTQ4KSk7dmFy''@;'; put 'put ''IGd0PVtLZSwkdCxMdF07cmV0dXJuIHR0PTAsS2U9MCwkdD0wLG51bGw9PT1HdD8oUnQucHJlcGVuZChndCksSChKZSkpOkd0fWlmKDAhPT1LZSlyZXR1cm4gYyhMdCwxMjksMjU0KT8oJHQ9THQsbnVsbCk6KFJ0LnByZXBlbmQoW0tlLEx0XSksdHQ9MCxLZT0wLEgoSmUpKTtpZigwIT09dHQp''@;'; put 'put ''e2lmKGMoTHQsNDgsNTcpKXJldHVybiBLZT1MdCxudWxsO3ZhciBYdD10dCxMcj1udWxsO3R0PTA7dmFyIGxuPUx0PDEyNz82NDo2NTtyZXR1cm4oYyhMdCw2NCwxMjYpfHxjKEx0LDEyOCwyNTQpKSYmKExyPTE5MCooWHQtMTI5KSsoTHQtbG4pKSxudWxsPT09KEd0PW51bGw9PT1Mcj9udWxs''@;'; put 'put ''Om1lKExyLEllKCJnYjE4MDMwIikpKSYmUyhMdCkmJlJ0LnByZXBlbmQoTHQpLG51bGw9PT1HdD9IKEplKTpHdH1yZXR1cm4gUyhMdCk/THQ6MTI4PT09THQ/ODM2NDpjKEx0LDEyOSwyNTQpPyh0dD1MdCxudWxsKTpIKEplKX19ZnVuY3Rpb24gbmUod2UsSmUpe3RoaXMuaGFuZGxlcj1mdW5j''@;'; put 'put ''dGlvbihLZSwkdCl7aWYoJHQ9PT1SKXJldHVybiBVO2lmKEwoJHQpKXJldHVybiAkdDtpZig1ODg1Mz09PSR0KXJldHVybiBWKCR0KTtpZihKZSYmODM2ND09PSR0KXJldHVybiAxMjg7dmFyIFJ0PUNlKCR0LEllKCJnYjE4MDMwIikpO2lmKG51bGwhPT1SdCl7dmFyIEd0PVJ0JTE5MDtyZXR1''@;'; put 'put ''cm5bQShSdC8xOTApKzEyOSxHdCsoR3Q8NjM/NjQ6NjUpXX1pZihKZSlyZXR1cm4gVigkdCk7UnQ9ZnVuY3Rpb24gcWUod2Upe2lmKDU5MzM1PT09d2UpcmV0dXJuIDc0NTc7dmFyICR0LEplPTAsdHQ9MCxLZT1JZSgiZ2IxODAzMC1yYW5nZXMiKTtmb3IoJHQ9MDskdDxLZS5sZW5ndGg7Kysk''@;'; put 'put ''dCl7dmFyIFJ0PUtlWyR0XTtpZighKFJ0WzFdPD13ZSkpYnJlYWs7SmU9UnRbMV0sdHQ9UnRbMF19cmV0dXJuIHR0K3dlLUplfSgkdCk7dmFyIFh0PUEoUnQvMTAvMTI2LzEwKSxMcj1BKChSdC09MTAqWHQqMTI2KjEwKS8xMC8xMjYpLGxuPUEoKFJ0LT0xMCpMcioxMjYpLzEwKTtyZXR1cm5b''@;'; put 'put ''WHQrMTI5LExyKzQ4LGxuKzEyOSxSdC0xMCpsbis0OF19fWZ1bmN0aW9uIF9lKHdlKXt2YXIgSmU9d2UuZmF0YWwsdHQ9MDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oS2UsJHQpe2lmKCR0PT09UiYmMCE9PXR0KXJldHVybiB0dD0wLEgoSmUpO2lmKCR0PT09UiYmMD09PXR0KXJldHVybiBVO2lm''@;'; put 'put ''KDAhPT10dCl7dmFyIFJ0PXR0LEx0PW51bGw7dHQ9MDt2YXIgR3Q9JHQ8MTI3PzY0Ojk4O3N3aXRjaCgoYygkdCw2NCwxMjYpfHxjKCR0LDE2MSwyNTQpKSYmKEx0PTE1NyooUnQtMTI5KSsoJHQtR3QpKSxMdCl7Y2FzZSAxMTMzOnJldHVyblsyMDIsNzcyXTtjYXNlIDExMzU6cmV0dXJuWzIw''@;'; put 'put ''Miw3ODBdO2Nhc2UgMTE2NDpyZXR1cm5bMjM0LDc3Ml07Y2FzZSAxMTY2OnJldHVyblsyMzQsNzgwXX12YXIgZ3Q9bnVsbD09PUx0P251bGw6bWUoTHQsSWUoImJpZzUiKSk7cmV0dXJuIG51bGw9PT1ndCYmUygkdCkmJktlLnByZXBlbmQoJHQpLG51bGw9PT1ndD9IKEplKTpndH1yZXR1cm4g''@;'; put 'put ''UygkdCk/JHQ6YygkdCwxMjksMjU0KT8odHQ9JHQsbnVsbCk6SChKZSl9fWZ1bmN0aW9uIFBlKHdlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24odHQsS2Upe2lmKEtlPT09UilyZXR1cm4gVTtpZihMKEtlKSlyZXR1cm4gS2U7dmFyICR0PWZ1bmN0aW9uIGIod2Upe3ZhciBKZT1rPWt8fEllKCJi''@;'; put 'put ''aWc1IikubWFwKGZ1bmN0aW9uKHR0LEtlKXtyZXR1cm4gS2U8NTAyND9udWxsOnR0fSk7cmV0dXJuIDk1NTI9PT13ZXx8OTU2Nj09PXdlfHw5NTY5PT09d2V8fDk1Nzg9PT13ZXx8MjEzMTM9PT13ZXx8MjEzMTc9PT13ZT9KZS5sYXN0SW5kZXhPZih3ZSk6Q2Uod2UsSmUpfShLZSk7aWYobnVs''@;'; put 'put ''bD09PSR0KXJldHVybiBWKEtlKTt2YXIgUnQ9QSgkdC8xNTcpKzEyOTtpZihSdDwxNjEpcmV0dXJuIFYoS2UpO3ZhciBMdD0kdCUxNTc7cmV0dXJuW1J0LEx0KyhMdDw2Mz82NDo5OCldfX1mdW5jdGlvbiBvdCh3ZSl7dmFyIEplPXdlLmZhdGFsLHR0PSExLEtlPTA7dGhpcy5oYW5kbGVyPWZ1''@;'; put 'put ''bmN0aW9uKCR0LFJ0KXtpZihSdD09PVImJjAhPT1LZSlyZXR1cm4gS2U9MCxIKEplKTtpZihSdD09PVImJjA9PT1LZSlyZXR1cm4gVTtpZigxNDI9PT1LZSYmYyhSdCwxNjEsMjIzKSlyZXR1cm4gS2U9MCw2NTIxNitSdDtpZigxNDM9PT1LZSYmYyhSdCwxNjEsMjU0KSlyZXR1cm4gdHQ9ITAs''@;'; put 'put ''S2U9UnQsbnVsbDtpZigwIT09S2Upe3ZhciBMdD1LZTtLZT0wO3ZhciBHdD1udWxsO3JldHVybiBjKEx0LDE2MSwyNTQpJiZjKFJ0LDE2MSwyNTQpJiYoR3Q9bWUoOTQqKEx0LTE2MSkrKFJ0LTE2MSksSWUodHQ/ImppczAyMTIiOiJqaXMwMjA4IikpKSx0dD0hMSxjKFJ0LDE2MSwyNTQpfHwk''@;'; put 'put ''dC5wcmVwZW5kKFJ0KSxudWxsPT09R3Q/SChKZSk6R3R9cmV0dXJuIFMoUnQpP1J0OjE0Mj09PVJ0fHwxNDM9PT1SdHx8YyhSdCwxNjEsMjU0KT8oS2U9UnQsbnVsbCk6SChKZSl9fWZ1bmN0aW9uIGx0KHdlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24odHQsS2Upe2lmKEtlPT09UilyZXR1cm4g''@;'; put 'put ''VTtpZihMKEtlKSlyZXR1cm4gS2U7aWYoMTY1PT09S2UpcmV0dXJuIDkyO2lmKDgyNTQ9PT1LZSlyZXR1cm4gMTI2O2lmKGMoS2UsNjUzNzcsNjU0MzkpKXJldHVyblsxNDIsS2UtNjUzNzcrMTYxXTs4NzIyPT09S2UmJihLZT02NTI5Myk7dmFyICR0PUNlKEtlLEllKCJqaXMwMjA4IikpO3Jl''@;'; put 'put ''dHVybiBudWxsPT09JHQ/VihLZSk6W0EoJHQvOTQpKzE2MSwkdCU5NCsxNjFdfX1mdW5jdGlvbiBkdCh3ZSl7dmFyIEplPXdlLmZhdGFsLEtlPTAsUnQ9MCxMdD0hMTt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oR3QsZ3Qpe3N3aXRjaChLZSl7ZGVmYXVsdDpjYXNlIDA6cmV0dXJuIDI3PT09Z3Q/''@;'; put 'put ''KEtlPTUsbnVsbCk6YyhndCwwLDEyNykmJjE0IT09Z3QmJjE1IT09Z3QmJjI3IT09Z3Q/KEx0PSExLGd0KTpndD09PVI/VTooTHQ9ITEsSChKZSkpO2Nhc2UgMTpyZXR1cm4gMjc9PT1ndD8oS2U9NSxudWxsKTo5Mj09PWd0PyhMdD0hMSwxNjUpOjEyNj09PWd0PyhMdD0hMSw4MjU0KTpjKGd0''@;'; put 'put ''LDAsMTI3KSYmMTQhPT1ndCYmMTUhPT1ndCYmMjchPT1ndCYmOTIhPT1ndCYmMTI2IT09Z3Q/KEx0PSExLGd0KTpndD09PVI/VTooTHQ9ITEsSChKZSkpO2Nhc2UgMjpyZXR1cm4gMjc9PT1ndD8oS2U9NSxudWxsKTpjKGd0LDMzLDk1KT8oTHQ9ITEsNjUzNDQrZ3QpOmd0PT09Uj9VOihMdD0h''@;'; put 'put ''MSxIKEplKSk7Y2FzZSAzOnJldHVybiAyNz09PWd0PyhLZT01LG51bGwpOmMoZ3QsMzMsMTI2KT8oTHQ9ITEsUnQ9Z3QsS2U9NCxudWxsKTpndD09PVI/VTooTHQ9ITEsSChKZSkpO2Nhc2UgNDppZigyNz09PWd0KXJldHVybiBLZT01LEgoSmUpO2lmKGMoZ3QsMzMsMTI2KSl7S2U9Mzt2YXIg''@;'; put 'put ''THI9bWUoOTQqKFJ0LTMzKStndC0zMyxJZSgiamlzMDIwOCIpKTtyZXR1cm4gbnVsbD09PUxyP0goSmUpOkxyfXJldHVybiBndD09PVI/KEtlPTMsR3QucHJlcGVuZChndCksSChKZSkpOihLZT0zLEgoSmUpKTtjYXNlIDU6cmV0dXJuIDM2PT09Z3R8fDQwPT09Z3Q/KFJ0PWd0LEtlPTYsbnVs''@;'; put 'put ''bCk6KEd0LnByZXBlbmQoZ3QpLEx0PSExLEtlPTAsSChKZSkpO2Nhc2UgNjp2YXIgbG49UnQ7UnQ9MDt2YXIgT249bnVsbDtpZig0MD09PWxuJiY2Nj09PWd0JiYoT249MCksNDA9PT1sbiYmNzQ9PT1ndCYmKE9uPTEpLDQwPT09bG4mJjczPT09Z3QmJihPbj0yKSwzNj09PWxuJiYoNjQ9PT1n''@;'; put 'put ''dHx8NjY9PT1ndCkmJihPbj0zKSxudWxsIT09T24pe0tlPUtlPU9uO3ZhciBRcj1MdDtyZXR1cm4gTHQ9ITAsUXI/SChKZSk6bnVsbH1yZXR1cm4gR3QucHJlcGVuZChbbG4sZ3RdKSxMdD0hMSxLZT0wLEgoSmUpfX19ZnVuY3Rpb24gUmUod2Upe3ZhciBLZT0wO3RoaXMuaGFuZGxlcj1mdW5j''@;'; put 'put ''dGlvbigkdCxSdCl7aWYoUnQ9PT1SJiYwIT09S2UpcmV0dXJuICR0LnByZXBlbmQoUnQpLEtlPTAsWzI3LDQwLDY2XTtpZihSdD09PVImJjA9PT1LZSlyZXR1cm4gVTtpZighKDAhPT1LZSYmMSE9PUtlfHwxNCE9PVJ0JiYxNSE9PVJ0JiYyNyE9PVJ0KSlyZXR1cm4gVig2NTUzMyk7aWYoMD09''@;'; put 'put ''PUtlJiZMKFJ0KSlyZXR1cm4gUnQ7aWYoMT09PUtlJiYoTChSdCkmJjkyIT09UnQmJjEyNiE9PVJ0fHwxNjU9PVJ0fHw4MjU0PT1SdCkpe2lmKEwoUnQpKXJldHVybiBSdDtpZigxNjU9PT1SdClyZXR1cm4gOTI7aWYoODI1ND09PVJ0KXJldHVybiAxMjZ9aWYoTChSdCkmJjAhPT1LZSlyZXR1''@;'; put 'put ''cm4gJHQucHJlcGVuZChSdCksS2U9MCxbMjcsNDAsNjZdO2lmKCgxNjU9PT1SdHx8ODI1ND09PVJ0KSYmMSE9PUtlKXJldHVybiAkdC5wcmVwZW5kKFJ0KSxLZT0xLFsyNyw0MCw3NF07ODcyMj09PVJ0JiYoUnQ9NjUyOTMpO3ZhciBMdD1DZShSdCxJZSgiamlzMDIwOCIpKTtyZXR1cm4gbnVs''@;'; put 'put ''bD09PUx0P1YoUnQpOjIhPT1LZT8oJHQucHJlcGVuZChSdCksS2U9MixbMjcsMzYsNjZdKTpbQShMdC85NCkrMzMsTHQlOTQrMzNdfX1mdW5jdGlvbiBhZSh3ZSl7dmFyIEplPXdlLmZhdGFsLHR0PTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKEtlLCR0KXtpZigkdD09PVImJjAhPT10dClyZXR1''@;'; put 'put ''cm4gdHQ9MCxIKEplKTtpZigkdD09PVImJjA9PT10dClyZXR1cm4gVTtpZigwIT09dHQpe3ZhciBSdD10dCxMdD1udWxsO3R0PTA7dmFyIEd0PSR0PDEyNz82NDo2NSxndD1SdDwxNjA/MTI5OjE5MztpZigoYygkdCw2NCwxMjYpfHxjKCR0LDEyOCwyNTIpKSYmKEx0PTE4OCooUnQtZ3QpKyR0''@;'; put 'put ''LUd0KSxjKEx0LDg4MzYsMTA3MTUpKXJldHVybiA0ODUwOCtMdDt2YXIgWHQ9bnVsbD09PUx0P251bGw6bWUoTHQsSWUoImppczAyMDgiKSk7cmV0dXJuIG51bGw9PT1YdCYmUygkdCkmJktlLnByZXBlbmQoJHQpLG51bGw9PT1YdD9IKEplKTpYdH1yZXR1cm4gUygkdCl8fDEyOD09PSR0PyR0''@;'; put 'put ''OmMoJHQsMTYxLDIyMyk/NjUyMTYrJHQ6YygkdCwxMjksMTU5KXx8YygkdCwyMjQsMjUyKT8odHQ9JHQsbnVsbCk6SChKZSl9fWZ1bmN0aW9uIHhlKHdlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24odHQsS2Upe2lmKEtlPT09UilyZXR1cm4gVTtpZihMKEtlKXx8MTI4PT09S2UpcmV0dXJuIEtl''@;'; put 'put ''O2lmKDE2NT09PUtlKXJldHVybiA5MjtpZig4MjU0PT09S2UpcmV0dXJuIDEyNjtpZihjKEtlLDY1Mzc3LDY1NDM5KSlyZXR1cm4gS2UtNjUzNzcrMTYxOzg3MjI9PT1LZSYmKEtlPTY1MjkzKTt2YXIgJHQ9ZnVuY3Rpb24gWCh3ZSl7cmV0dXJuKGY9Znx8SWUoImppczAyMDgiKS5tYXAoZnVu''@;'; put 'put ''Y3Rpb24odHQsS2Upe3JldHVybiBjKEtlLDgyNzIsODgzNSk/bnVsbDp0dH0pKS5pbmRleE9mKHdlKX0oS2UpO2lmKG51bGw9PT0kdClyZXR1cm4gVihLZSk7dmFyIFJ0PUEoJHQvMTg4KSxHdD0kdCUxODg7cmV0dXJuW1J0KyhSdDwzMT8xMjk6MTkzKSxHdCsoR3Q8NjM/NjQ6NjUpXX19ZnVu''@;'; put 'put ''Y3Rpb24gamUod2Upe3ZhciBKZT13ZS5mYXRhbCx0dD0wO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihLZSwkdCl7aWYoJHQ9PT1SJiYwIT09dHQpcmV0dXJuIHR0PTAsSChKZSk7aWYoJHQ9PT1SJiYwPT09dHQpcmV0dXJuIFU7aWYoMCE9PXR0KXt2YXIgUnQ9dHQsTHQ9bnVsbDt0dD0wLGMoJHQs''@;'; put 'put ''NjUsMjU0KSYmKEx0PTE5MCooUnQtMTI5KSsoJHQtNjUpKTt2YXIgR3Q9bnVsbD09PUx0P251bGw6bWUoTHQsSWUoImV1Yy1rciIpKTtyZXR1cm4gbnVsbD09PUx0JiZTKCR0KSYmS2UucHJlcGVuZCgkdCksbnVsbD09PUd0P0goSmUpOkd0fXJldHVybiBTKCR0KT8kdDpjKCR0LDEyOSwyNTQp''@;'; put 'put ''Pyh0dD0kdCxudWxsKTpIKEplKX19ZnVuY3Rpb24gQWUod2Upe3RoaXMuaGFuZGxlcj1mdW5jdGlvbih0dCxLZSl7aWYoS2U9PT1SKXJldHVybiBVO2lmKEwoS2UpKXJldHVybiBLZTt2YXIgJHQ9Q2UoS2UsSWUoImV1Yy1rciIpKTtyZXR1cm4gbnVsbD09PSR0P1YoS2UpOltBKCR0LzE5MCkr''@;'; put 'put ''MTI5LCR0JTE5MCs2NV19fWZ1bmN0aW9uIERlKHdlLEplKXt2YXIgdHQ9d2U+PjgsS2U9MjU1JndlO3JldHVybiBKZT9bdHQsS2VdOltLZSx0dF19ZnVuY3Rpb24gRmUod2UsSmUpe3ZhciB0dD1KZS5mYXRhbCxLZT1udWxsLCR0PW51bGw7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFJ0LEx0KXtp''@;'; put 'put ''ZihMdD09PVImJihudWxsIT09S2V8fG51bGwhPT0kdCkpcmV0dXJuIEgodHQpO2lmKEx0PT09UiYmbnVsbD09PUtlJiZudWxsPT09JHQpcmV0dXJuIFU7aWYobnVsbD09PUtlKXJldHVybiBLZT1MdCxudWxsO3ZhciBHdDtpZihHdD13ZT8oS2U8PDgpK0x0OihMdDw8OCkrS2UsS2U9bnVsbCxu''@;'; put 'put ''dWxsIT09JHQpe3ZhciBndD0kdDtyZXR1cm4gJHQ9bnVsbCxjKEd0LDU2MzIwLDU3MzQzKT82NTUzNisxMDI0KihndC01NTI5NikrKEd0LTU2MzIwKTooUnQucHJlcGVuZChEZShHdCx3ZSkpLEgodHQpKX1yZXR1cm4gYyhHdCw1NTI5Niw1NjMxOSk/KCR0PUd0LG51bGwpOmMoR3QsNTYzMjAs''@;'; put 'put ''NTczNDMpP0godHQpOkd0fX1mdW5jdGlvbiBnZSh3ZSxKZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKEtlLCR0KXtpZigkdD09PVIpcmV0dXJuIFU7aWYoYygkdCwwLDY1NTM1KSlyZXR1cm4gRGUoJHQsd2UpO3ZhciBSdD1EZSg1NTI5NisoJHQtNjU1MzY+PjEwKSx3ZSksTHQ9RGUoNTYzMjAr''@;'; put 'put ''KCR0LTY1NTM2JjEwMjMpLHdlKTtyZXR1cm4gUnQuY29uY2F0KEx0KX19ZnVuY3Rpb24gY2Uod2Upe3RoaXMuaGFuZGxlcj1mdW5jdGlvbih0dCxLZSl7cmV0dXJuIEtlPT09Uj9VOlMoS2UpP0tlOjYzMzYwK0tlLTEyOH19ZnVuY3Rpb24gaGUod2Upe3RoaXMuaGFuZGxlcj1mdW5jdGlvbih0''@;'; put 'put ''dCxLZSl7cmV0dXJuIEtlPT09Uj9VOkwoS2UpP0tlOmMoS2UsNjMzNjAsNjM0ODcpP0tlLTYzMzYwKzEyODpWKEtlKX19T2JqZWN0LmRlZmluZVByb3BlcnR5JiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KEIucHJvdG90eXBlLCJlbmNvZGluZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9lbmNvZGluZy5uYW1lLnRvTG93ZXJDYXNlKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIucHJvdG90eXBlLCJmYXRhbCIse2dldDpmdW5jdGlvbigpe3JldHVybiJmYXRhbCI9PT10aGlzLl9lcnJvcl9tb2RlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwiaWdu''@;'; put 'put ''b3JlQk9NIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lnbm9yZUJPTX19KSksQi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKEplLHR0KXt2YXIgS2U7S2U9Im9iamVjdCI9PXR5cGVvZiBKZSYmSmUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9uZXcgVWludDhBcnJheShKZSk6Im9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBKZSYmImJ1ZmZlciJpbiBKZSYmSmUuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/bmV3IFVpbnQ4QXJyYXkoSmUuYnVmZmVyLEplLmJ5dGVPZmZzZXQsSmUuYnl0ZUxlbmd0aCk6bmV3IFVpbnQ4QXJyYXkoMCksdHQ9dih0dCksdGhpcy5fZG9fbm90X2ZsdXNo''@;'; put 'put ''fHwodGhpcy5fZGVjb2Rlcj1yZVt0aGlzLl9lbmNvZGluZy5uYW1lXSh7ZmF0YWw6ImZhdGFsIj09PXRoaXMuX2Vycm9yX21vZGV9KSx0aGlzLl9CT01zZWVuPSExKSx0aGlzLl9kb19ub3RfZmx1c2g9ISF0dC5zdHJlYW07Zm9yKHZhciBMdCwkdD1uZXcgeChLZSksUnQ9W107Oyl7dmFyIEd0''@;'; put 'put ''PSR0LnJlYWQoKTtpZihHdD09PVJ8fChMdD10aGlzLl9kZWNvZGVyLmhhbmRsZXIoJHQsR3QpKT09PVUpYnJlYWs7bnVsbCE9PUx0JiYoQXJyYXkuaXNBcnJheShMdCk/UnQucHVzaC5hcHBseShSdCxMdCk6UnQucHVzaChMdCkpfWlmKCF0aGlzLl9kb19ub3RfZmx1c2gpe2Rve2lmKChMdD10''@;'; put 'put ''aGlzLl9kZWNvZGVyLmhhbmRsZXIoJHQsJHQucmVhZCgpKSk9PT1VKWJyZWFrO251bGwhPT1MdCYmKEFycmF5LmlzQXJyYXkoTHQpP1J0LnB1c2guYXBwbHkoUnQsTHQpOlJ0LnB1c2goTHQpKX13aGlsZSghJHQuZW5kT2ZTdHJlYW0oKSk7dGhpcy5fZGVjb2Rlcj1udWxsfXJldHVybiBmdW5j''@;'; put 'put ''dGlvbiBndChYdCl7cmV0dXJuIGZ1bmN0aW9uIHMod2UsSmUpe3JldHVybi0xIT09d2UuaW5kZXhPZihKZSl9KFsiVVRGLTgiLCJVVEYtMTZMRSIsIlVURi0xNkJFIl0sdGhpcy5fZW5jb2RpbmcubmFtZSkmJiF0aGlzLl9pZ25vcmVCT00mJiF0aGlzLl9CT01zZWVuJiYoWHQubGVuZ3RoPjAm''@;'; put 'put ''JjY1Mjc5PT09WHRbMF0/KHRoaXMuX0JPTXNlZW49ITAsWHQuc2hpZnQoKSk6WHQubGVuZ3RoPjAmJih0aGlzLl9CT01zZWVuPSEwKSksZnVuY3Rpb24gdyh3ZSl7Zm9yKHZhciBKZT0iIix0dD0wO3R0PHdlLmxlbmd0aDsrK3R0KXt2YXIgS2U9d2VbdHRdO0tlPD02NTUzNT9KZSs9U3RyaW5n''@;'; put 'put ''LmZyb21DaGFyQ29kZShLZSk6KEtlLT02NTUzNixKZSs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisoS2U+PjEwKSw1NjMyMCsoMTAyMyZLZSkpKX1yZXR1cm4gSmV9KFh0KX0uY2FsbCh0aGlzLFJ0KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5JiZPYmplY3QuZGVmaW5lUHJvcGVydHkoSy5w''@;'; put 'put ''cm90b3R5cGUsImVuY29kaW5nIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuY29kaW5nLm5hbWUudG9Mb3dlckNhc2UoKX19KSxLLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oSmUsdHQpe0plPXZvaWQgMD09PUplPyIiOlN0cmluZyhKZSksdHQ9dih0dCksdGhpcy5fZG9fbm90''@;'; put 'put ''X2ZsdXNofHwodGhpcy5fZW5jb2Rlcj1xW3RoaXMuX2VuY29kaW5nLm5hbWVdKHtmYXRhbDoiZmF0YWwiPT09dGhpcy5fZmF0YWx9KSksdGhpcy5fZG9fbm90X2ZsdXNoPSEhdHQuc3RyZWFtO2Zvcih2YXIgUnQsS2U9bmV3IHgoZnVuY3Rpb24gQyh3ZSl7Zm9yKHZhciBKZT1TdHJpbmcod2Up''@;'; put 'put ''LHR0PUplLmxlbmd0aCxLZT0wLCR0PVtdO0tlPHR0Oyl7dmFyIFJ0PUplLmNoYXJDb2RlQXQoS2UpO2lmKFJ0PDU1Mjk2fHxSdD41NzM0MykkdC5wdXNoKFJ0KTtlbHNlIGlmKDU2MzIwPD1SdCYmUnQ8PTU3MzQzKSR0LnB1c2goNjU1MzMpO2Vsc2UgaWYoNTUyOTY8PVJ0JiZSdDw9NTYzMTkp''@;'; put 'put ''aWYoS2U9PT10dC0xKSR0LnB1c2goNjU1MzMpO2Vsc2V7dmFyIEx0PUplLmNoYXJDb2RlQXQoS2UrMSk7NTYzMjA8PUx0JiZMdDw9NTczNDM/KCR0LnB1c2goNjU1MzYrKCgxMDIzJlJ0KTw8MTApKygxMDIzJkx0KSksS2UrPTEpOiR0LnB1c2goNjU1MzMpfUtlKz0xfXJldHVybiAkdH0oSmUp''@;'; put 'put ''KSwkdD1bXTs7KXt2YXIgTHQ9S2UucmVhZCgpO2lmKEx0PT09Unx8KFJ0PXRoaXMuX2VuY29kZXIuaGFuZGxlcihLZSxMdCkpPT09VSlicmVhaztBcnJheS5pc0FycmF5KFJ0KT8kdC5wdXNoLmFwcGx5KCR0LFJ0KTokdC5wdXNoKFJ0KX1pZighdGhpcy5fZG9fbm90X2ZsdXNoKXtmb3IoOyhS''@;'; put 'put ''dD10aGlzLl9lbmNvZGVyLmhhbmRsZXIoS2UsS2UucmVhZCgpKSkhPT1VOylBcnJheS5pc0FycmF5KFJ0KT8kdC5wdXNoLmFwcGx5KCR0LFJ0KTokdC5wdXNoKFJ0KTt0aGlzLl9lbmNvZGVyPW51bGx9cmV0dXJuIG5ldyBVaW50OEFycmF5KCR0KX0scVsiVVRGLTgiXT1mdW5jdGlvbih3ZSl7''@;'; put 'put ''cmV0dXJuIG5ldyBEKHdlKX0scmVbIlVURi04Il09ZnVuY3Rpb24od2Upe3JldHVybiBuZXcgRyh3ZSl9LCJlbmNvZGluZy1pbmRleGVzImluIHkmJkYuZm9yRWFjaChmdW5jdGlvbih3ZSl7IkxlZ2FjeSBzaW5nbGUtYnl0ZSBlbmNvZGluZ3MiPT09d2UuaGVhZGluZyYmd2UuZW5jb2Rpbmdz''@;'; put 'put ''LmZvckVhY2goZnVuY3Rpb24oSmUpe3ZhciB0dD1KZS5uYW1lLEtlPUllKHR0LnRvTG93ZXJDYXNlKCkpO3JlW3R0XT1mdW5jdGlvbigkdCl7cmV0dXJuIG5ldyBwKEtlLCR0KX0scVt0dF09ZnVuY3Rpb24oJHQpe3JldHVybiBuZXcgSShLZSwkdCl9fSl9KSxyZS5HQks9ZnVuY3Rpb24od2Up''@;'; put 'put ''e3JldHVybiBuZXcgdWUod2UpfSxxLkdCSz1mdW5jdGlvbih3ZSl7cmV0dXJuIG5ldyBuZSh3ZSwhMCl9LHEuZ2IxODAzMD1mdW5jdGlvbih3ZSl7cmV0dXJuIG5ldyBuZSh3ZSl9LHJlLmdiMTgwMzA9ZnVuY3Rpb24od2Upe3JldHVybiBuZXcgdWUod2UpfSxxLkJpZzU9ZnVuY3Rpb24od2Up''@;'; put 'put ''e3JldHVybiBuZXcgUGUod2UpfSxyZS5CaWc1PWZ1bmN0aW9uKHdlKXtyZXR1cm4gbmV3IF9lKHdlKX0scVsiRVVDLUpQIl09ZnVuY3Rpb24od2Upe3JldHVybiBuZXcgbHQod2UpfSxyZVsiRVVDLUpQIl09ZnVuY3Rpb24od2Upe3JldHVybiBuZXcgb3Qod2UpfSxxWyJJU08tMjAyMi1KUCJd''@;'; put 'put ''PWZ1bmN0aW9uKHdlKXtyZXR1cm4gbmV3IFJlKHdlKX0scmVbIklTTy0yMDIyLUpQIl09ZnVuY3Rpb24od2Upe3JldHVybiBuZXcgZHQod2UpfSxxLlNoaWZ0X0pJUz1mdW5jdGlvbih3ZSl7cmV0dXJuIG5ldyB4ZSh3ZSl9LHJlLlNoaWZ0X0pJUz1mdW5jdGlvbih3ZSl7cmV0dXJuIG5ldyBh''@;'; put 'put ''ZSh3ZSl9LHFbIkVVQy1LUiJdPWZ1bmN0aW9uKHdlKXtyZXR1cm4gbmV3IEFlKHdlKX0scmVbIkVVQy1LUiJdPWZ1bmN0aW9uKHdlKXtyZXR1cm4gbmV3IGplKHdlKX0scVsiVVRGLTE2QkUiXT1mdW5jdGlvbih3ZSl7cmV0dXJuIG5ldyBnZSghMCx3ZSl9LHJlWyJVVEYtMTZCRSJdPWZ1bmN0''@;'; put 'put ''aW9uKHdlKXtyZXR1cm4gbmV3IEZlKCEwLHdlKX0scVsiVVRGLTE2TEUiXT1mdW5jdGlvbih3ZSl7cmV0dXJuIG5ldyBnZSghMSx3ZSl9LHJlWyJVVEYtMTZMRSJdPWZ1bmN0aW9uKHdlKXtyZXR1cm4gbmV3IEZlKCExLHdlKX0scVsieC11c2VyLWRlZmluZWQiXT1mdW5jdGlvbih3ZSl7cmV0''@;'; put 'put ''dXJuIG5ldyBoZSh3ZSl9LHJlWyJ4LXVzZXItZGVmaW5lZCJdPWZ1bmN0aW9uKHdlKXtyZXR1cm4gbmV3IGNlKHdlKX0seS5UZXh0RW5jb2Rlcnx8KHkuVGV4dEVuY29kZXI9SykseS5UZXh0RGVjb2Rlcnx8KHkuVGV4dERlY29kZXI9QiksZmUuZXhwb3J0cyYmKGZlLmV4cG9ydHM9e1RleHRF''@;'; put 'put ''bmNvZGVyOnkuVGV4dEVuY29kZXIsVGV4dERlY29kZXI6eS5UZXh0RGVjb2RlcixFbmNvZGluZ0luZGV4ZXM6eVsiZW5jb2RpbmctaW5kZXhlcyJdfSl9KHRoaXN8fHt9KX0sNTE0MjUoZmUpe2Z1bmN0aW9uIGooKXt9ai5wcm90b3R5cGU9e29uOmZ1bmN0aW9uKGgseSxjKXt2YXIgcz10aGlz''@;'; put 'put ''LmV8fCh0aGlzLmU9e30pO3JldHVybihzW2hdfHwoc1toXT1bXSkpLnB1c2goe2ZuOnksY3R4OmN9KSx0aGlzfSxvbmNlOmZ1bmN0aW9uKGgseSxjKXt2YXIgcz10aGlzO2Z1bmN0aW9uIEEoKXtzLm9mZihoLEEpLHkuYXBwbHkoYyxhcmd1bWVudHMpfXJldHVybiBBLl89eSx0aGlzLm9uKGgs''@;'; put 'put ''QSxjKX0sZW1pdDpmdW5jdGlvbihoKXtmb3IodmFyIHk9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSksYz0oKHRoaXMuZXx8KHRoaXMuZT17fSkpW2hdfHxbXSkuc2xpY2UoKSxzPTAsQT1jLmxlbmd0aDtzPEE7cysrKWNbc10uZm4uYXBwbHkoY1tzXS5jdHgseSk7cmV0dXJuIHRoaXN9LG9m''@;'; put 'put ''ZjpmdW5jdGlvbihoLHkpe3ZhciBjPXRoaXMuZXx8KHRoaXMuZT17fSkscz1jW2hdLEE9W107aWYocyYmeSlmb3IodmFyIHY9MCxDPXMubGVuZ3RoO3Y8Qzt2Kyspc1t2XS5mbiE9PXkmJnNbdl0uZm4uXyE9PXkmJkEucHVzaChzW3ZdKTtyZXR1cm4gQS5sZW5ndGg/Y1toXT1BOmRlbGV0ZSBj''@;'; put 'put ''W2hdLHRoaXN9fSxmZS5leHBvcnRzPWosZmUuZXhwb3J0cy5UaW55RW1pdHRlcj1qfSw0MTA5MChmZSxqLGgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1oKDI3MDU0KS5CdWZmZXIsYz1oKDIwMDUzKSxzPWgoNTczKSxBPUFycmF5QnVmZmVyLmlzVmlld3x8ZnVuY3Rpb24oTCl7dHJ5e3JldHVybiBz''@;'; put 'put ''KEwpLCEwfWNhdGNoe3JldHVybiExfX0sdj10eXBlb2YgVWludDhBcnJheTwidSIsQz10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSIsdz1DJiYoeS5wcm90b3R5cGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx5LlRZUEVEX0FSUkFZX1NVUFBPUlQpO2ZlLmV4''@;'; put 'put ''cG9ydHM9ZnVuY3Rpb24oTCxSKXtpZih5LmlzQnVmZmVyKEwpKXJldHVybiBMLmNvbnN0cnVjdG9yJiYhKCJpc0J1ZmZlciJpbiBMKT95LmZyb20oTCk6TDtpZigic3RyaW5nIj09dHlwZW9mIEwpcmV0dXJuIHkuZnJvbShMLFIpO2lmKEMmJkEoTCkpe2lmKDA9PT1MLmJ5dGVMZW5ndGgpcmV0''@;'; put 'put ''dXJuIHkuYWxsb2MoMCk7aWYodyl7dmFyIHg9eS5mcm9tKEwuYnVmZmVyLEwuYnl0ZU9mZnNldCxMLmJ5dGVMZW5ndGgpO2lmKHguYnl0ZUxlbmd0aD09PUwuYnl0ZUxlbmd0aClyZXR1cm4geH12YXIgVT1MIGluc3RhbmNlb2YgVWludDhBcnJheT9MOm5ldyBVaW50OEFycmF5KEwuYnVmZmVy''@;'; put 'put ''LEwuYnl0ZU9mZnNldCxMLmJ5dGVMZW5ndGgpLEg9eS5mcm9tKFUpO2lmKEgubGVuZ3RoPT09TC5ieXRlTGVuZ3RoKXJldHVybiBIfWlmKHYmJkwgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiB5LmZyb20oTCk7dmFyIFY9YyhMKTtpZihWKWZvcih2YXIgTj0wO048TC5sZW5ndGg7Tis9''@;'; put 'put ''MSl7dmFyIHo9TFtOXTtpZigibnVtYmVyIiE9dHlwZW9mIHp8fHo8MHx8ej4yNTV8fH5+eiE9PXopdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkFycmF5IGl0ZW1zIG11c3QgYmUgbnVtYmVycyBpbiB0aGUgcmFuZ2UgMC0yNTUuIil9aWYoVnx8eS5pc0J1ZmZlcihMKSYmTC5jb25zdHJ1Y3RvciYm''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIEwuY29uc3RydWN0b3IuaXNCdWZmZXImJkwuY29uc3RydWN0b3IuaXNCdWZmZXIoTCkpcmV0dXJuIHkuZnJvbShMKTt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImRhdGEiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIGFuIEFycmF5LCBhIEJ1ZmZlciwg''@;'; put 'put ''YSBVaW50OEFycmF5LCBvciBhIERhdGFWaWV3LicpfX0sNTczKGZlLGosaCl7InVzZSBzdHJpY3QiO3ZhciB5PWgoNDY3NTgpLHM9aCgxMjc3MykoIlR5cGVkQXJyYXkucHJvdG90eXBlLmJ1ZmZlciIsITApLEE9aCg0NzI5KTtmZS5leHBvcnRzPXN8fGZ1bmN0aW9uKEMpe2lmKCFBKEMpKXRo''@;'; put 'put ''cm93IG5ldyB5KCJOb3QgYSBUeXBlZCBBcnJheSIpO3JldHVybiBDLmJ1ZmZlcn19LDMzOTgoZmUpe2Z1bmN0aW9uIGgoeSl7dHJ5e2lmKCFnbG9iYWwubG9jYWxTdG9yYWdlKXJldHVybiExfWNhdGNoe3JldHVybiExfXZhciBjPWdsb2JhbC5sb2NhbFN0b3JhZ2VbeV07cmV0dXJuIG51bGwh''@;'; put 'put ''PWMmJiJ0cnVlIj09PVN0cmluZyhjKS50b0xvd2VyQ2FzZSgpfWZlLmV4cG9ydHM9ZnVuY3Rpb24gaih5LGMpe2lmKGgoIm5vRGVwcmVjYXRpb24iKSlyZXR1cm4geTt2YXIgcz0hMTtyZXR1cm4gZnVuY3Rpb24gQSgpe2lmKCFzKXtpZihoKCJ0aHJvd0RlcHJlY2F0aW9uIikpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKGMpO2goInRyYWNlRGVwcmVjYXRpb24iKT9jb25zb2xlLnRyYWNlKGMpOmNvbnNvbGUud2FybihjKSxzPSEwfXJldHVybiB5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSwxMjk1NChmZSxqLGgpeyFmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7eS5leHBvcnRzLmlzX3VyaT1zLHku''@;'; put 'put ''ZXhwb3J0cy5pc19odHRwX3VyaT1BLHkuZXhwb3J0cy5pc19odHRwc191cmk9dix5LmV4cG9ydHMuaXNfd2ViX3VyaT1DLHkuZXhwb3J0cy5pc1VyaT1zLHkuZXhwb3J0cy5pc0h0dHBVcmk9QSx5LmV4cG9ydHMuaXNIdHRwc1VyaT12LHkuZXhwb3J0cy5pc1dlYlVyaT1DO3ZhciBjPWZ1bmN0''@;'; put 'put ''aW9uKHcpe3JldHVybiB3Lm1hdGNoKC8oPzooW146XC8/I10rKTopPyg/OlwvXC8oW15cLz8jXSopKT8oW14/I10qKSg/Olw/KFteI10qKSk/KD86IyguKikpPy8pfTtmdW5jdGlvbiBzKHcpe2lmKHcmJiEvW15hLXowLTlcOlwvXD9cI1xbXF1cQFwhXCRcJlwnXChcKVwqXCtcLFw7XD1cLlwt''@;'; put 'put ''XF9cflwlXS9pLnRlc3QodykmJiEvJVteMC05YS1mXS9pLnRlc3QodykmJiEvJVswLTlhLWZdKDo/W14wLTlhLWZdfCQpL2kudGVzdCh3KSl7dmFyIFMsUix4LFUsSCxMPSIiLFY9IiI7aWYoUj0oUz1jKHcpKVsyXSx4PVNbM10sVT1TWzRdLEg9U1s1XSwoTD1TWzFdKSYmTC5sZW5ndGgmJngu''@;'; put 'put ''bGVuZ3RoPj0wKXtpZihSJiZSLmxlbmd0aCl7aWYoMCE9PXgubGVuZ3RoJiYhL15cLy8udGVzdCh4KSlyZXR1cm59ZWxzZSBpZigvXlwvXC8vLnRlc3QoeCkpcmV0dXJuO2lmKC9eW2Etel1bYS16MC05XCtcLVwuXSokLy50ZXN0KEwudG9Mb3dlckNhc2UoKSkpcmV0dXJuIFYrPUwrIjoiLFIm''@;'; put 'put ''JlIubGVuZ3RoJiYoVis9Ii8vIitSKSxWKz14LFUmJlUubGVuZ3RoJiYoVis9Ij8iK1UpLEgmJkgubGVuZ3RoJiYoVis9IiMiK0gpLFZ9fX1mdW5jdGlvbiBBKHcsUyl7aWYocyh3KSl7dmFyIEwsVSxWLE4sUj0iIix4PSIiLEg9IiIsej0iIjtpZih4PShMPWModykpWzJdLFU9TFszXSxWPUxb''@;'; put 'put ''NF0sTj1MWzVdLFI9TFsxXSl7aWYoUyl7aWYoImh0dHBzIiE9Ui50b0xvd2VyQ2FzZSgpKXJldHVybn1lbHNlIGlmKCJodHRwIiE9Ui50b0xvd2VyQ2FzZSgpKXJldHVybjtpZih4KXJldHVybi86KFxkKykkLy50ZXN0KHgpJiYoSD14Lm1hdGNoKC86KFxkKykkLylbMF0seD14LnJlcGxhY2Uo''@;'; put 'put ''LzpcZCskLywiIikpLHorPVIrIjoiLHorPSIvLyIreCxIJiYoeis9SCkseis9VSxWJiZWLmxlbmd0aCYmKHorPSI/IitWKSxOJiZOLmxlbmd0aCYmKHorPSIjIitOKSx6fX19ZnVuY3Rpb24gdih3KXtyZXR1cm4gQSh3LCEwKX1mdW5jdGlvbiBDKHcpe3JldHVybiBBKHcpfHx2KHcpfX0oZmU9''@;'; put 'put ''aC5ubWQoZmUpKX0sNDQwNjgoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg4OTk5OSksYz1oKDk3NTk0KSxzPWgoNDgxMjgpLEE9aCgxMjc3Myksdj1oKDgzNzk4KSxDPWgoOTE2MjcpLHc9QSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLFM9aCg4ODc3OSkoKSxMPXR5cGVvZiBn''@;'; put 'put ''bG9iYWxUaGlzPiJ1Ij9nbG9iYWw6Z2xvYmFsVGhpcyxSPWMoKSx4PUEoIlN0cmluZy5wcm90b3R5cGUuc2xpY2UiKSxVPUEoIkFycmF5LnByb3RvdHlwZS5pbmRleE9mIiwhMCl8fGZ1bmN0aW9uKEYsVyl7Zm9yKHZhciBxPTA7cTxGLmxlbmd0aDtxKz0xKWlmKEZbcV09PT1XKXJldHVybiBx''@;'; put 'put ''O3JldHVybi0xfSxIPXtfX3Byb3RvX186bnVsbH07eShSLFMmJnYmJkM/ZnVuY3Rpb24oWSl7dmFyIEY9bmV3IExbWV07aWYoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEYmJkMpe3ZhciBXPUMoRikscT12KFcsU3ltYm9sLnRvU3RyaW5nVGFnKTtpZighcSYmVyl7dmFyIHJlPUMoVyk7cT12KHJl''@;'; put 'put ''LFN5bWJvbC50b1N0cmluZ1RhZyl9aWYocSYmcS5nZXQpe3ZhciBtZT1zKHEuZ2V0KTtIWyIkIitZXT1tZX19fTpmdW5jdGlvbihZKXt2YXIgRj1uZXcgTFtZXSxXPUYuc2xpY2V8fEYuc2V0O2lmKFcpe3ZhciBxPXMoVyk7SFsiJCIrWV09cX19KSxmZS5leHBvcnRzPWZ1bmN0aW9uKEYpe2lm''@;'; put 'put ''KCFGfHwib2JqZWN0IiE9dHlwZW9mIEYpcmV0dXJuITE7aWYoIVMpe3ZhciBXPXgodyhGKSw4LC0xKTtyZXR1cm4gZnVuY3Rpb24geihZKXtyZXR1cm4gVShSLFkpPi0xfShXKT9XOiJPYmplY3QiPT09VyYmZnVuY3Rpb24gTihZKXt2YXIgRj0hMTtyZXR1cm4geShILGZ1bmN0aW9uKFcscSl7''@;'; put 'put ''aWYoIUYpdHJ5e1coWSksRj14KHEsMSl9Y2F0Y2h7fX0pLEZ9KEYpfXJldHVybiB2P2Z1bmN0aW9uIFYoWSl7dmFyIEY9ITE7cmV0dXJuIHkoSCxmdW5jdGlvbihXLHEpe2lmKCFGKXRyeXsiJCIrVyhZKT09PXEmJihGPXgocSwxKSl9Y2F0Y2h7fX0pLEZ9KEYpOm51bGx9fSwzNTM1OChmZSxq''@;'; put 'put ''LGgpe3ZhciB5PXsiLi9hZiI6MTE1NDQsIi4vYWYuanMiOjExNTQ0LCIuL2FyIjozMzEwOCwiLi9hci1keiI6NTIxNTUsIi4vYXItZHouanMiOjUyMTU1LCIuL2FyLWt3Ijo1MzU4MywiLi9hci1rdy5qcyI6NTM1ODMsIi4vYXItbHkiOjQxNjM4LCIuL2FyLWx5LmpzIjo0MTYzOCwiLi9hci1t''@;'; put 'put ''YSI6ODc4MjMsIi4vYXItbWEuanMiOjg3ODIzLCIuL2FyLXBzIjo3NzEyLCIuL2FyLXBzLmpzIjo3NzEyLCIuL2FyLXNhIjo3ODI2MSwiLi9hci1zYS5qcyI6NzgyNjEsIi4vYXItdG4iOjU2NzAzLCIuL2FyLXRuLmpzIjo1NjcwMywiLi9hci5qcyI6MzMxMDgsIi4vYXoiOjQ2NTA4LCIuL2F6''@;'; put 'put ''LmpzIjo0NjUwOCwiLi9iZSI6MTY3NjYsIi4vYmUuanMiOjE2NzY2LCIuL2JnIjoyODU2NCwiLi9iZy5qcyI6Mjg1NjQsIi4vYm0iOjk3NDYyLCIuL2JtLmpzIjo5NzQ2MiwiLi9ibiI6MTcxMDcsIi4vYm4tYmQiOjQzNDM4LCIuL2JuLWJkLmpzIjo0MzQzOCwiLi9ibi5qcyI6MTcxMDcsIi4v''@;'; put 'put ''Ym8iOjkwMDQsIi4vYm8uanMiOjkwMDQsIi4vYnIiOjUwOTI3LCIuL2JyLmpzIjo1MDkyNywiLi9icyI6ODc3NjgsIi4vYnMuanMiOjg3NzY4LCIuL2NhIjo1NjI5MSwiLi9jYS5qcyI6NTYyOTEsIi4vY3MiOjg1MzAxLCIuL2NzLmpzIjo4NTMwMSwiLi9jdiI6NjY2NjYsIi4vY3YuanMiOjY2''@;'; put 'put ''NjY2LCIuL2N5Ijo1NTE2MywiLi9jeS5qcyI6NTUxNjMsIi4vZGEiOjg3MzYwLCIuL2RhLmpzIjo4NzM2MCwiLi9kZSI6NDU5MzIsIi4vZGUtYXQiOjQzMjQ4LCIuL2RlLWF0LmpzIjo0MzI0OCwiLi9kZS1jaCI6ODMyMjIsIi4vZGUtY2guanMiOjgzMjIyLCIuL2RlLmpzIjo0NTkzMiwiLi9k''@;'; put 'put ''diI6NjQwNSwiLi9kdi5qcyI6NjQwNSwiLi9lbCI6NjA3MTgsIi4vZWwuanMiOjYwNzE4LCIuL2VuLWF1IjozNjMxOSwiLi9lbi1hdS5qcyI6MzYzMTksIi4vZW4tY2EiOjgwNTk3LCIuL2VuLWNhLmpzIjo4MDU5NywiLi9lbi1nYiI6NTE4MDAsIi4vZW4tZ2IuanMiOjUxODAwLCIuL2VuLWll''@;'; put 'put ''Ijo4MDcsIi4vZW4taWUuanMiOjgwNywiLi9lbi1pbCI6OTU5NjAsIi4vZW4taWwuanMiOjk1OTYwLCIuL2VuLWluIjo4NDQxOCwiLi9lbi1pbi5qcyI6ODQ0MTgsIi4vZW4tbnoiOjQ2ODY1LCIuL2VuLW56LmpzIjo0Njg2NSwiLi9lbi1zZyI6MzI2NDcsIi4vZW4tc2cuanMiOjMyNjQ3LCIu''@;'; put 'put ''L2VvIjo2MTkzMSwiLi9lby5qcyI6NjE5MzEsIi4vZXMiOjQ2Njc5LCIuL2VzLWRvIjo0MTgwNSwiLi9lcy1kby5qcyI6NDE4MDUsIi4vZXMtbXgiOjgzNDQ1LCIuL2VzLW14LmpzIjo4MzQ0NSwiLi9lcy11cyI6ODE1MTYsIi4vZXMtdXMuanMiOjgxNTE2LCIuL2VzLmpzIjo0NjY3OSwiLi9l''@;'; put 'put ''dCI6ODgxNTAsIi4vZXQuanMiOjg4MTUwLCIuL2V1Ijo4MDc1NywiLi9ldS5qcyI6ODA3NTcsIi4vZmEiOjY1NzQyLCIuL2ZhLmpzIjo2NTc0MiwiLi9maSI6MzM5NTgsIi4vZmkuanMiOjMzOTU4LCIuL2ZpbCI6NDY3MjAsIi4vZmlsLmpzIjo0NjcyMCwiLi9mbyI6OTgzNTIsIi4vZm8uanMi''@;'; put 'put ''Ojk4MzUyLCIuL2ZyIjo0MDU5LCIuL2ZyLWNhIjo0MjA5NiwiLi9mci1jYS5qcyI6NDIwOTYsIi4vZnItY2giOjk1NzU5LCIuL2ZyLWNoLmpzIjo5NTc1OSwiLi9mci5qcyI6NDA1OSwiLi9meSI6MTU5NTgsIi4vZnkuanMiOjE1OTU4LCIuL2dhIjo5NDE0MywiLi9nYS5qcyI6OTQxNDMsIi4v''@;'; put 'put ''Z2QiOjY3MDI4LCIuL2dkLmpzIjo2NzAyOCwiLi9nbCI6ODA0MjgsIi4vZ2wuanMiOjgwNDI4LCIuL2dvbS1kZXZhIjo3Njg2MSwiLi9nb20tZGV2YS5qcyI6NzY4NjEsIi4vZ29tLWxhdG4iOjU3NzE4LCIuL2dvbS1sYXRuLmpzIjo1NzcxOCwiLi9ndSI6MjY4MjcsIi4vZ3UuanMiOjI2ODI3''@;'; put 'put ''LCIuL2hlIjoyMTkzNiwiLi9oZS5qcyI6MjE5MzYsIi4vaGkiOjMxMzMyLCIuL2hpLmpzIjozMTMzMiwiLi9ociI6OTE5NTcsIi4vaHIuanMiOjkxOTU3LCIuL2h1Ijo0ODkyOCwiLi9odS5qcyI6NDg5MjgsIi4vaHktYW0iOjU2MjE1LCIuL2h5LWFtLmpzIjo1NjIxNSwiLi9pZCI6NTg2LCIu''@;'; put 'put ''L2lkLmpzIjo1ODYsIi4vaXMiOjkwMjExLCIuL2lzLmpzIjo5MDIxMSwiLi9pdCI6NzAxNzAsIi4vaXQtY2giOjIyMzQwLCIuL2l0LWNoLmpzIjoyMjM0MCwiLi9pdC5qcyI6NzAxNzAsIi4vamEiOjM5NzcwLCIuL2phLmpzIjozOTc3MCwiLi9qdiI6NzM4NzUsIi4vanYuanMiOjczODc1LCIu''@;'; put 'put ''L2thIjo3OTQ5OSwiLi9rYS5qcyI6Nzk0OTksIi4va2siOjkzNTczLCIuL2trLmpzIjo5MzU3MywiLi9rbSI6Njg4MDcsIi4va20uanMiOjY4ODA3LCIuL2tuIjo2NTA4MiwiLi9rbi5qcyI6NjUwODIsIi4va28iOjIwMTM3LCIuL2tvLmpzIjoyMDEzNywiLi9rdSI6NzAxMTEsIi4va3Uta21y''@;'; put 'put ''Ijo2Mzc0NCwiLi9rdS1rbXIuanMiOjYzNzQ0LCIuL2t1LmpzIjo3MDExMSwiLi9reSI6OTkxODcsIi4va3kuanMiOjk5MTg3LCIuL2xiIjozNTk2OSwiLi9sYi5qcyI6MzU5NjksIi4vbG8iOjMzNTI2LCIuL2xvLmpzIjozMzUyNiwiLi9sdCI6OTA0MTEsIi4vbHQuanMiOjkwNDExLCIuL2x2''@;'; put 'put ''IjozMjYyMSwiLi9sdi5qcyI6MzI2MjEsIi4vbWUiOjg1ODY5LCIuL21lLmpzIjo4NTg2OSwiLi9taSI6MzU4ODEsIi4vbWkuanMiOjM1ODgxLCIuL21rIjo5MjM5MSwiLi9tay5qcyI6OTIzOTEsIi4vbWwiOjIxMTI2LCIuL21sLmpzIjoyMTEyNiwiLi9tbiI6NDQ4OTIsIi4vbW4uanMiOjQ0''@;'; put 'put ''ODkyLCIuL21yIjo1OTA4MCwiLi9tci5qcyI6NTkwODAsIi4vbXMiOjcwMzk5LCIuL21zLW15IjoyNTk1MCwiLi9tcy1teS5qcyI6MjU5NTAsIi4vbXMuanMiOjcwMzk5LCIuL210Ijo3OTkwMiwiLi9tdC5qcyI6Nzk5MDIsIi4vbXkiOjcyOTg1LCIuL215LmpzIjo3Mjk4NSwiLi9uYiI6Njc4''@;'; put 'put ''NTksIi4vbmIuanMiOjY3ODU5LCIuL25lIjoxMzY0MiwiLi9uZS5qcyI6MTM2NDIsIi4vbmwiOjY1NDQxLCIuL25sLWJlIjo5OTg3NSwiLi9ubC1iZS5qcyI6OTk4NzUsIi4vbmwuanMiOjY1NDQxLCIuL25uIjo4MTMxMSwiLi9ubi5qcyI6ODEzMTEsIi4vb2MtbG5jIjo3MjU2NywiLi9vYy1s''@;'; put 'put ''bmMuanMiOjcyNTY3LCIuL3BhLWluIjo1Njk2MiwiLi9wYS1pbi5qcyI6NTY5NjIsIi4vcGwiOjYxMDYzLCIuL3BsLmpzIjo2MTA2MywiLi9wdCI6Nzg3MTksIi4vcHQtYnIiOjk3NDc2LCIuL3B0LWJyLmpzIjo5NzQ3NiwiLi9wdC5qcyI6Nzg3MTksIi4vcm8iOjUxMDA0LCIuL3JvLmpzIjo1''@;'; put 'put ''MTAwNCwiLi9ydSI6NTEzMjYsIi4vcnUuanMiOjUxMzI2LCIuL3NkIjo3MjYwOCwiLi9zZC5qcyI6NzI2MDgsIi4vc2UiOjEzOTExLCIuL3NlLmpzIjoxMzkxMSwiLi9zaSI6MjUxNDcsIi4vc2kuanMiOjI1MTQ3LCIuL3NrIjoyMzc0MSwiLi9zay5qcyI6MjM3NDEsIi4vc2wiOjkzZTMsIi4v''@;'; put 'put ''c2wuanMiOjkzZTMsIi4vc3EiOjYwNDUxLCIuL3NxLmpzIjo2MDQ1MSwiLi9zciI6NTUwNDYsIi4vc3ItY3lybCI6NDA5MDUsIi4vc3ItY3lybC5qcyI6NDA5MDUsIi4vc3IuanMiOjU1MDQ2LCIuL3NzIjo4NTc2NSwiLi9zcy5qcyI6ODU3NjUsIi4vc3YiOjk5MjkwLCIuL3N2LmpzIjo5OTI5''@;'; put 'put ''MCwiLi9zdyI6NTM0NDksIi4vc3cuanMiOjUzNDQ5LCIuL3RhIjo3MjY4OCwiLi90YS5qcyI6NzI2ODgsIi4vdGUiOjMyMDYwLCIuL3RlLmpzIjozMjA2MCwiLi90ZXQiOjkzMjkwLCIuL3RldC5qcyI6OTMyOTAsIi4vdGciOjgyOTQsIi4vdGcuanMiOjgyOTQsIi4vdGgiOjEyMzEsIi4vdGgu''@;'; put 'put ''anMiOjEyMzEsIi4vdGsiOjM3NDYsIi4vdGsuanMiOjM3NDYsIi4vdGwtcGgiOjQ5MDQwLCIuL3RsLXBoLmpzIjo0OTA0MCwiLi90bGgiOjE3MTg3LCIuL3RsaC5qcyI6MTcxODcsIi4vdHIiOjYwMTUzLCIuL3RyLmpzIjo2MDE1MywiLi90emwiOjg4NTIxLCIuL3R6bC5qcyI6ODg1MjEsIi4v''@;'; put 'put ''dHptIjoxODAxMCwiLi90em0tbGF0biI6MjIyMzQsIi4vdHptLWxhdG4uanMiOjIyMjM0LCIuL3R6bS5qcyI6MTgwMTAsIi4vdWctY24iOjYzMzQ5LCIuL3VnLWNuLmpzIjo2MzM0OSwiLi91ayI6Njg0NzksIi4vdWsuanMiOjY4NDc5LCIuL3VyIjo0MzAyNCwiLi91ci5qcyI6NDMwMjQsIi4v''@;'; put 'put ''dXoiOjE5ODAwLCIuL3V6LWxhdG4iOjcyMzc2LCIuL3V6LWxhdG4uanMiOjcyMzc2LCIuL3V6LmpzIjoxOTgwMCwiLi92aSI6ODkzNjYsIi4vdmkuanMiOjg5MzY2LCIuL3gtcHNldWRvIjo2OTcwMiwiLi94LXBzZXVkby5qcyI6Njk3MDIsIi4veW8iOjcyNjU1LCIuL3lvLmpzIjo3MjY1NSwi''@;'; put 'put ''Li96aC1jbiI6NTc1LCIuL3poLWNuLmpzIjo1NzUsIi4vemgtaGsiOjE4MzUxLCIuL3poLWhrLmpzIjoxODM1MSwiLi96aC1tbyI6NTE2MjYsIi4vemgtbW8uanMiOjUxNjI2LCIuL3poLXR3Ijo4ODg3LCIuL3poLXR3LmpzIjo4ODg3fTtmdW5jdGlvbiBjKEEpe3ZhciB2PXMoQSk7cmV0dXJu''@;'; put 'put ''IGgodil9ZnVuY3Rpb24gcyhBKXtpZighaC5vKHksQSkpe3ZhciB2PW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK0ErIiciKTt0aHJvdyB2LmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLHZ9cmV0dXJuIHlbQV19Yy5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHkp''@;'; put 'put ''fSxjLnJlc29sdmU9cyxmZS5leHBvcnRzPWMsYy5pZD0zNTM1OH0sODMzMzcoKXt9LDg0NjAoKXt9LDkyMzgyKCl7fSwxNTc5MSgpe30sNjEwOTMoKXt9LDE1MzQwKCl7fSw3OTgzOCgpe30sOTc1OTQoZmUsaixoKXsidXNlIHN0cmljdCI7dmFyIHk9aCg1MDE5KSxjPXR5cGVvZiBnbG9iYWxU''@;'; put 'put ''aGlzPiJ1Ij9nbG9iYWw6Z2xvYmFsVGhpcztmZS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBBPVtdLHY9MDt2PHkubGVuZ3RoO3YrKykiZnVuY3Rpb24iPT10eXBlb2YgY1t5W3ZdXSYmKEFbQS5sZW5ndGhdPXlbdl0pO3JldHVybiBBfX0sMjUxNzIoZmUpe2ZlLmV4cG9ydHM9ZnVuY3Rp''@;'; put 'put ''b24gaihoLHkpe3RoaXMudj1oLHRoaXMuaz15fSxmZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsZmUuZXhwb3J0cy5kZWZhdWx0PWZlLmV4cG9ydHN9LDkzNTEzKGZlLGosaCl7dmFyIHk9aCgyNTE3Mik7ZmUuZXhwb3J0cz1mdW5jdGlvbiBjKHMpe3ZhciBBPXt9LHY9ITE7ZnVuY3Rpb24gQyh3''@;'; put 'put ''LFMpe3JldHVybiB2PSEwLFM9bmV3IFByb21pc2UoZnVuY3Rpb24oTCl7TChzW3ddKFMpKX0pLHtkb25lOiExLHZhbHVlOm5ldyB5KFMsMSl9fXJldHVybiBBW3R5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30s''@;'; put 'put ''QS5uZXh0PWZ1bmN0aW9uKHcpe3JldHVybiB2Pyh2PSExLHcpOkMoIm5leHQiLHcpfSwiZnVuY3Rpb24iPT10eXBlb2Ygcy50aHJvdyYmKEEudGhyb3c9ZnVuY3Rpb24odyl7aWYodil0aHJvdyB2PSExLHc7cmV0dXJuIEMoInRocm93Iix3KX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBzLnJldHVy''@;'; put 'put ''biYmKEEucmV0dXJuPWZ1bmN0aW9uKHcpe3JldHVybiB2Pyh2PSExLHcpOkMoInJldHVybiIsdyl9KSxBfSxmZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsZmUuZXhwb3J0cy5kZWZhdWx0PWZlLmV4cG9ydHN9LDgyODgxKGZlKXtmdW5jdGlvbiBoKHkpe2Z1bmN0aW9uIGMocyl7aWYoT2JqZWN0''@;'; put 'put ''KHMpIT09cylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcihzKyIgaXMgbm90IGFuIG9iamVjdC4iKSk7dmFyIEE9cy5kb25lO3JldHVybiBQcm9taXNlLnJlc29sdmUocy52YWx1ZSkudGhlbihmdW5jdGlvbih2KXtyZXR1cm57dmFsdWU6dixkb25lOkF9fSl9cmV0dXJuKGg9''@;'; put 'put ''ZnVuY3Rpb24oQSl7dGhpcy5zPUEsdGhpcy5uPUEubmV4dH0pLnByb3RvdHlwZT17czpudWxsLG46bnVsbCxuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcy5uLmFwcGx5KHRoaXMucyxhcmd1bWVudHMpKX0scmV0dXJuOmZ1bmN0aW9uKEEpe3ZhciB2PXRoaXMucy5yZXR1cm47cmV0dXJu''@;'; put 'put ''IHZvaWQgMD09PXY/UHJvbWlzZS5yZXNvbHZlKHt2YWx1ZTpBLGRvbmU6ITB9KTpjKHYuYXBwbHkodGhpcy5zLGFyZ3VtZW50cykpfSx0aHJvdzpmdW5jdGlvbihBKXt2YXIgdj10aGlzLnMucmV0dXJuO3JldHVybiB2b2lkIDA9PT12P1Byb21pc2UucmVqZWN0KEEpOmModi5hcHBseSh0aGlz''@;'; put 'put ''LnMsYXJndW1lbnRzKSl9fSxuZXcgaCh5KX1mZS5leHBvcnRzPWZ1bmN0aW9uIGooeSl7dmFyIGMscyxBLHY9Mjtmb3IodHlwZW9mIFN5bWJvbDwidSImJihzPVN5bWJvbC5hc3luY0l0ZXJhdG9yLEE9U3ltYm9sLml0ZXJhdG9yKTt2LS07KXtpZihzJiZudWxsIT0oYz15W3NdKSlyZXR1cm4g''@;'; put 'put ''Yy5jYWxsKHkpO2lmKEEmJm51bGwhPShjPXlbQV0pKXJldHVybiBuZXcgaChjLmNhbGwoeSkpO3M9IkBAYXN5bmNJdGVyYXRvciIsQT0iQEBpdGVyYXRvciJ9dGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGlzIG5vdCBhc3luYyBpdGVyYWJsZSIpfSxmZS5leHBvcnRzLl9fZXNNb2R1bGU9''@;'; put 'put ''ITAsZmUuZXhwb3J0cy5kZWZhdWx0PWZlLmV4cG9ydHN9LDI5MjkzKGZlKXtmdW5jdGlvbiBqKHksYyxzLEEsdixDLHcpe3RyeXt2YXIgUz15W0NdKHcpLEw9Uy52YWx1ZX1jYXRjaChSKXtyZXR1cm4gdm9pZCBzKFIpfVMuZG9uZT9jKEwpOlByb21pc2UucmVzb2x2ZShMKS50aGVuKEEsdil9''@;'; put 'put ''ZmUuZXhwb3J0cz1mdW5jdGlvbiBoKHkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBjPXRoaXMscz1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKEEsdil7dmFyIEM9eS5hcHBseShjLHMpO2Z1bmN0aW9uIHcoTCl7aihDLEEsdix3LFMsIm5leHQiLEwpfWZ1bmN0aW9uIFMo''@;'; put 'put ''TCl7aihDLEEsdix3LFMsInRocm93IixMKX13KHZvaWQgMCl9KX19LGZlLmV4cG9ydHMuX19lc01vZHVsZT0hMCxmZS5leHBvcnRzLmRlZmF1bHQ9ZmUuZXhwb3J0c30sNTMzNDQoZmUsaixoKXt2YXIgeT1oKDI1MTcyKTtmZS5leHBvcnRzPWZ1bmN0aW9uIGMocyl7cmV0dXJuIG5ldyB5KHMs''@;'; put 'put ''MCl9LGZlLmV4cG9ydHMuX19lc01vZHVsZT0hMCxmZS5leHBvcnRzLmRlZmF1bHQ9ZmUuZXhwb3J0c30sNDI5NTgoZmUsaixoKXt2YXIgeT1oKDI1MTcyKTtmdW5jdGlvbiBzKEEpe3ZhciB2LEM7ZnVuY3Rpb24gdyhMLFIpe3RyeXt2YXIgeD1BW0xdKFIpLFU9eC52YWx1ZSxIPVUgaW5zdGFu''@;'; put 'put ''Y2VvZiB5O1Byb21pc2UucmVzb2x2ZShIP1UudjpVKS50aGVuKGZ1bmN0aW9uKFYpe2lmKEgpe3ZhciBOPSJyZXR1cm4iPT09TD8icmV0dXJuIjoibmV4dCI7aWYoIVUua3x8Vi5kb25lKXJldHVybiB3KE4sVik7Vj1BW05dKFYpLnZhbHVlfVMoeC5kb25lPyJyZXR1cm4iOiJub3JtYWwiLFYp''@;'; put 'put ''fSxmdW5jdGlvbihWKXt3KCJ0aHJvdyIsVil9KX1jYXRjaChWKXtTKCJ0aHJvdyIsVil9fWZ1bmN0aW9uIFMoTCxSKXtzd2l0Y2goTCl7Y2FzZSJyZXR1cm4iOnYucmVzb2x2ZSh7dmFsdWU6Uixkb25lOiEwfSk7YnJlYWs7Y2FzZSJ0aHJvdyI6di5yZWplY3QoUik7YnJlYWs7ZGVmYXVsdDp2''@;'; put 'put ''LnJlc29sdmUoe3ZhbHVlOlIsZG9uZTohMX0pfSh2PXYubmV4dCk/dyh2LmtleSx2LmFyZyk6Qz1udWxsfXRoaXMuX2ludm9rZT1mdW5jdGlvbihMLFIpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih4LFUpe3ZhciBIPXtrZXk6TCxhcmc6UixyZXNvbHZlOngscmVqZWN0OlUsbmV4dDpu''@;'; put 'put ''dWxsfTtDP0M9Qy5uZXh0PUg6KHY9Qz1ILHcoTCxSKSl9KX0sImZ1bmN0aW9uIiE9dHlwZW9mIEEucmV0dXJuJiYodGhpcy5yZXR1cm49dm9pZCAwKX1zLnByb3RvdHlwZVsiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciJd''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHMucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuX2ludm9rZSgibmV4dCIsQSl9LHMucHJvdG90eXBlLnRocm93PWZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9pbnZva2UoInRocm93IixBKX0scy5wcm90b3R5cGUucmV0dXJu''@;'; put 'put ''PWZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9pbnZva2UoInJldHVybiIsQSl9LGZlLmV4cG9ydHM9ZnVuY3Rpb24gYyhBKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHMoQS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0sZmUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwLGZlLmV4cG9ydHMu''@;'; put 'put ''ZGVmYXVsdD1mZS5leHBvcnRzfSwzMjE5KGZlKXsidXNlIHN0cmljdCI7ZmUuZXhwb3J0cz1KU09OLnBhcnNlKCd7ImFlcy0xMjgtZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTkyLWVjYiI6eyJjaXBoZXIi''@;'; put 'put ''OiJBRVMiLCJrZXkiOjE5MiwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6''@;'; put 'put ''MTI4LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTE5Mi1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMjU2LWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2''@;'; put 'put ''LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczEyOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczE5MiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6''@;'; put 'put ''ImJsb2NrIn0sImFlczI1NiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0x''@;'; put 'put ''OTItY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY2ZiOCI6''@;'; put 'put ''eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjgiOnsiY2lw''@;'; put 'put ''aGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmIxIjp7ImNpcGhlciI6''@;'; put 'put ''IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtb2ZiIjp7ImNpcGhlciI6IkFFUyIs''@;'; put 'put ''ImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2''@;'; put 'put ''LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYs''@;'; put 'put ''Im1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTIsIm1vZGUiOiJH''@;'; put 'put ''Q00iLCJ0eXBlIjoiYXV0aCJ9LCJhZXMtMTkyLWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTI1Ni1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJh''@;'; put 'put ''dXRoIn19Jyl9LDQzMjY3KGZlKXsidXNlIHN0cmljdCI7ZmUuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyI4NzQwIiwiXHU0M2YwXHU0YzMyXHU0NjAzXHU0NWE2XHU0NTc4XHV7MjcyNjd9XHU0ZDc3XHU0NWIzXHV7MjdjYjF9XHU0Y2UyXHV7MjdjYzV9XHUzYjk1XHU0NzM2XHU0NzQ0XHU0YzQ3''@;'; put 'put ''XHU0YzQwXHV7MjQyYmZ9XHV7MjM2MTd9XHV7MjczNTJ9XHV7MjZlOGJ9XHV7MjcwZDJ9XHU0YzU3XHV7MmEzNTF9XHU0NzRmXHU0NWRhXHU0Yzg1XHV7MjdjNmN9XHU0ZDA3XHU0YWE0XHU0NmExXHV7MjZiMjN9XHU3MjI1XHV7MjVhNTR9XHV7MjFhNjN9XHV7MjNlMDZ9XHV7MjNmNjF9XHU2''@;'; put 'put ''NjRkXHU1NmZiIl0sWyI4NzY3IiwiXHU3ZDk1XHU1OTFkXHV7MjhiYjl9XHUzZGY0XHU5NzM0XHV7MjdiZWZ9XHU1YmRiXHV7MjFkNWV9XHU1YWE0XHUzNjI1XHV7MjllYjB9XHU1YWQxXHU1YmI3XHU1Y2ZjXHU2NzZlXHU4NTkzXHV7Mjk5NDV9XHU3NDYxXHU3NDlkXHUzODc1XHV7MjFkNTN9''@;'; put 'put ''XHV7MjM2OWV9XHV7MjYwMjF9XHUzZWVjIl0sWyI4N2ExIiwiXHV7MjU4ZGV9XHUzYWY1XHU3YWZjXHU5Zjk3XHV7MjQxNjF9XHV7Mjg5MGR9XHV7MjMxZWF9XHV7MjBhOGF9XHV7MjMyNWV9XHU0MzBhXHU4NDg0XHU5Zjk2XHU5NDJmXHU0OTMwXHU4NjEzXHU1ODk2XHU5NzRhXHU5MjE4XHU3''@;'; put 'put ''OWQwXHU3YTMyXHU2NjYwXHU2YTI5XHU4ODlkXHU3NDRjXHU3YmM1XHU2NzgyXHU3YTJjXHU1MjRmXHU5MDQ2XHUzNGU2XHU3M2M0XHV7MjVkYjl9XHU3NGM2XHU5ZmM3XHU1N2IzXHU0OTJmXHU1NDRjXHU0MTMxXHV7MjM2OGV9XHU1ODE4XHU3YTcyXHV7MjdiNjV9XHU4YjhmXHU0NmFlXHV7''@;'; put 'put ''MjZlODh9XHU0MTgxXHV7MjVkOTl9XHU3YmFlXHV7MjI0YmN9XHU5ZmM4XHV7MjI0YzF9XHV7MjI0Yzl9XHV7MjI0Y2N9XHU5ZmM5XHU4NTA0XHV7MjM1YmJ9XHU0MGI0XHU5ZmNhXHU0NGUxXHV7MmFkZmZ9XHU2MmMxXHU3MDZlXHU5ZmNiIl0sWyI4ODQwIiwiXHUzMWMwIiw0LCJcdXsyMDEw''@;'; put 'put ''Y31cdTMxYzVcdXsyMDBkMX1cdXsyMDBjZH1cdTMxYzZcdTMxYzdcdXsyMDBjYn1cdXsyMWZlOH1cdTMxYzhcdXsyMDBjYX1cdTMxYzlcdTMxY2FcdTMxY2JcdTMxY2NcdXsyMDEwZX1cdTMxY2RcdTMxY2VcdTAxMDBceGMxXHUwMWNkXHhjMFx1MDExMlx4YzlcdTAxMWFceGM4XHUwMTRjXHhk''@;'; put 'put ''M1x1MDFkMVx4ZDJcdTBmZmZceGNhXHUwMzA0XHUxZWJlXHUwZmZmXHhjYVx1MDMwY1x1MWVjMFx4Y2FcdTAxMDFceGUxXHUwMWNlXHhlMFx1MDI1MVx1MDExM1x4ZTlcdTAxMWJceGU4XHUwMTJiXHhlZFx1MDFkMFx4ZWNcdTAxNGRceGYzXHUwMWQyXHhmMlx1MDE2Ylx4ZmFcdTAxZDRceGY5''@;'; put 'put ''XHUwMWQ2XHUwMWQ4XHUwMWRhIl0sWyI4OGExIiwiXHUwMWRjXHhmY1x1MGZmZlx4ZWFcdTAzMDRcdTFlYmZcdTBmZmZceGVhXHUwMzBjXHUxZWMxXHhlYVx1MDI2MVx1MjNkYVx1MjNkYiJdLFsiODk0MCIsIlx1ezJhM2E5fVx1ezIxMTQ1fSJdLFsiODk0MyIsIlx1NjUwYSJdLFsiODk0NiIs''@;'; put 'put ''Ilx1NGUzZFx1NmVkZFx1OWQ0ZVx1OTFkZiJdLFsiODk0YyIsIlx1ezI3NzM1fVx1NjQ5MVx1NGYxYVx1NGYyOFx1NGZhOFx1NTE1Nlx1NTE3NFx1NTE5Y1x1NTFlNFx1NTJhMVx1NTJhOFx1NTMzYlx1NTM0ZVx1NTNkMVx1NTNkOFx1NTZlMlx1NThmMFx1NTkwNFx1NTkwN1x1NTkzMlx1NTkz''@;'; put 'put ''NFx1NWI2Nlx1NWI5ZVx1NWI5Zlx1NWM5YVx1NWU4Nlx1NjAzYlx1NjU4OVx1NjdmZVx1NjgwNFx1Njg2NVx1NmQ0ZVx1NzBiY1x1NzUzNVx1N2VhNFx1N2VhY1x1N2ViYVx1N2VjN1x1N2VjZlx1N2VkZlx1N2YwNlx1N2YzN1x1ODI3YVx1ODJjZlx1ODM2Zlx1ODljNlx1OGJiZVx1OGJlMlx1''@;'; put 'put ''OGY2Nlx1OGY2N1x1OGY2ZSJdLFsiODlhMSIsIlx1NzQxMVx1N2NmY1x1N2RjZFx1Njk0Nlx1N2FjOVx1NTIyNyJdLFsiODlhYiIsIlx1OTE4Y1x1NzhiOFx1OTE1ZVx1ODBiYyJdLFsiODliMCIsIlx1OGQwYlx1ODBmNlx1ezIwOWU3fSJdLFsiODliNSIsIlx1ODA5Zlx1OWVjN1x1NGNjZFx1''@;'; put 'put ''OWRjOVx1OWUwY1x1NGMzZVx1ezI5ZGY2fVx1ezI3MDBlfVx1OWUwYVx1ezJhMTMzfVx1MzVjMSJdLFsiODljMSIsIlx1NmU5YVx1ODIzZVx1NzUxOSJdLFsiODljNSIsIlx1NDkxMVx1OWE2Y1x1OWE4Zlx1OWY5OVx1Nzk4N1x1ezI4NDZjfVx1ezIxZGNhfVx1ezIwNWQwfVx1ezIyYWU2fVx1''@;'; put 'put ''NGUyNFx1NGU4MVx1NGU4MFx1NGU4N1x1NGViZlx1NGVlYlx1NGYzN1x1MzQ0Y1x1NGZiZFx1M2U0OFx1NTAwM1x1NTA4OFx1MzQ3ZFx1MzQ5M1x1MzRhNVx1NTE4Nlx1NTkwNVx1NTFkYlx1NTFmY1x1NTIwNVx1NGU4OVx1NTI3OVx1NTI5MFx1NTMyN1x1MzVjN1x1NTNhOVx1MzU1MVx1NTNi''@;'; put 'put ''MFx1MzU1M1x1NTNjMlx1NTQyM1x1MzU2ZFx1MzU3Mlx1MzY4MVx1NTQ5M1x1NTRhM1x1NTRiNFx1NTRiOVx1NTRkMFx1NTRlZlx1NTUxOFx1NTUyM1x1NTUyOFx1MzU5OFx1NTUzZlx1MzVhNVx1MzViZlx1NTVkN1x1MzVjNSJdLFsiOGE0MCIsIlx1ezI3ZDg0fVx1NTUyNSJdLFsiOGE0MyIs''@;'; put 'put ''Ilx1ezIwYzQyfVx1ezIwZDE1fVx1ezI1MTJifVx1NTU5MFx1ezIyY2M2fVx1MzllY1x1ezIwMzQxfVx1OGU0Nlx1ezI0ZGI4fVx1ezI5NGU1fVx1NDA1M1x1ezI4MGJlfVx1Nzc3YVx1ezIyYzM4fVx1M2EzNFx1NDdkNVx1ezI4MTVkfVx1ezI2OWYyfVx1ezI0ZGVhfVx1NjRkZFx1ezIwZDdj''@;'; put 'put ''fVx1ezIwZmI0fVx1ezIwY2Q1fVx1ezIxMGY0fVx1NjQ4ZFx1OGU3ZVx1ezIwZTk2fVx1ezIwYzBifVx1ezIwZjY0fVx1ezIyY2E5fVx1ezI4MjU2fVx1ezI0NGQzfSJdLFsiOGE2NCIsIlx1ezIwZDQ2fVx1ezI5YTRkfVx1ezI4MGU5fVx1NDdmNFx1ezI0ZWE3fVx1ezIyY2MyfVx1OWFiMlx1''@;'; put 'put ''M2E2N1x1ezI5NWY0fVx1M2ZlZFx1MzUwNlx1ezI1MmM3fVx1ezI5N2Q0fVx1ezI3OGM4fVx1ezIyZDQ0fVx1OWQ2ZVx1OTgxNSJdLFsiOGE3NiIsIlx1NDNkOVx1ezI2MGE1fVx1NjRiNFx1NTRlM1x1ezIyZDRjfVx1ezIyYmNhfVx1ezIxMDc3fVx1MzlmYlx1ezIxMDZmfSJdLFsiOGFhMSIs''@;'; put 'put ''Ilx1ezI2NmRhfVx1ezI2NzE2fVx1ezI3OWEwfVx1NjRlYVx1ezI1MDUyfVx1ezIwYzQzfVx1OGU2OFx1ezIyMWExfVx1ezI4YjRjfVx1ezIwNzMxfSJdLFsiOGFhYyIsIlx1NDgwYlx1ezIwMWE5fVx1M2ZmYVx1NTg3M1x1ezIyZDhkfSJdLFsiOGFiMiIsIlx1ezI0NWM4fVx1ezIwNGZjfVx1''@;'; put 'put ''ezI2MDk3fVx1ezIwZjRjfVx1ezIwZDk2fVx1NTU3OVx1NDBiYlx1NDNiYSJdLFsiOGFiYiIsIlx1NGFiNFx1ezIyYTY2fVx1ezIxMDlkfVx1ODFhYVx1OThmNVx1ezIwZDljfVx1NjM3OVx1MzlmZVx1ezIyNzc1fVx1OGRjMFx1NTZhMVx1NjQ3Y1x1M2U0MyJdLFsiOGFjOSIsIlx1ezJhNjAx''@;'; put 'put ''fVx1ezIwZTA5fVx1ezIyYWNmfVx1ezIyY2M5fSJdLFsiOGFjZSIsIlx1ezIxMGM4fVx1ezIzOWMyfVx1Mzk5Mlx1M2EwNlx1ezI4MjlifVx1MzU3OFx1ezI1ZTQ5fVx1ezIyMGM3fVx1NTY1Mlx1ezIwZjMxfVx1ezIyY2IyfVx1ezI5NzIwfVx1MzRiY1x1NmMzZFx1ezI0ZTNifSJdLFsiOGFk''@;'; put 'put ''ZiIsIlx1ezI3NTc0fVx1ezIyZThifVx1ezIyMjA4fVx1ezJhNjVifVx1ezI4Y2NkfVx1ezIwZTdhfVx1ezIwYzM0fVx1ezI2ODFjfVx1N2Y5M1x1ezIxMGNmfVx1ezIyODAzfVx1ezIyOTM5fVx1MzVmYlx1ezI1MWUzfVx1ezIwZThjfVx1ezIwZjhkfVx1ezIwZWFhfVx1M2Y5M1x1ezIwZjMw''@;'; put 'put ''fVx1ezIwZDQ3fVx1ezIxMTRmfVx1ezIwZTRjfSJdLFsiOGFmNiIsIlx1ezIwZWFifVx1ezIwYmE5fVx1ezIwZDQ4fVx1ezIxMGMwfVx1ezIxMTNkfVx1M2ZmOVx1ezIyNjk2fVx1NjQzMlx1ezIwZmFkfSJdLFsiOGI0MCIsIlx1ezIzM2Y0fVx1ezI3NjM5fVx1ezIyYmNlfVx1ezIwZDdlfVx1''@;'; put 'put ''ezIwZDdmfVx1ezIyYzUxfVx1ezIyYzU1fVx1M2ExOFx1ezIwZTk4fVx1ezIxMGM3fVx1ezIwZjJlfVx1ezJhNjMyfVx1ezI2YjUwfVx1ezI4Y2QyfVx1ezI4ZDk5fVx1ezI4Y2NhfVx1OTVhYVx1NTRjY1x1ODJjNFx1NTViOSJdLFsiOGI1NSIsIlx1ezI5ZWMzfVx1OWMyNlx1OWFiNlx1ezI3''@;'; put 'put ''NzVlfVx1ezIyZGVlfVx1NzE0MFx1ODE2ZFx1ODBlY1x1NWMxY1x1ezI2NTcyfVx1ODEzNFx1Mzc5N1x1NTM1Zlx1ezI4MGJkfVx1OTFiNlx1ezIwZWZhfVx1ezIwZTBmfVx1ezIwZTc3fVx1ezIwZWZifVx1MzVkZFx1ezI0ZGVifVx1MzYwOVx1ezIwY2Q2fVx1NTZhZlx1ezIyN2I1fVx1ezIx''@;'; put 'put ''MGM5fVx1ezIwZTEwfVx1ezIwZTc4fVx1ezIxMDc4fVx1ezIxMTQ4fVx1ezI4MjA3fVx1ezIxNDU1fVx1ezIwZTc5fVx1ezI0ZTUwfVx1ezIyZGE0fVx1NWE1NFx1ezIxMDFkfVx1ezIxMDFlfVx1ezIxMGY1fVx1ezIxMGY2fVx1NTc5Y1x1ezIwZTExfSJdLFsiOGJhMSIsIlx1ezI3Njk0fVx1''@;'; put 'put ''ezI4MmNkfVx1ezIwZmI1fVx1ezIwZTdifVx1ezI1MTdlfVx1MzcwM1x1ezIwZmI2fVx1ezIxMTgwfVx1ezI1MmQ4fVx1ezJhMmJkfVx1ezI0OWRhfVx1ezIxODNhfVx1ezI0MTc3fVx1ezI4MjdjfVx1NTg5OVx1NTI2OFx1MzYxYVx1ezI1NzNkfVx1N2JiMlx1NWI2OFx1NDgwMFx1NGIyY1x1''@;'; put 'put ''OWYyN1x1NDllN1x1OWMxZlx1OWI4ZFx1ezI1Yjc0fVx1ezIzMTNkfVx1NTVmYlx1MzVmMlx1NTY4OVx1NGUyOFx1NTkwMlx1ezIxYmMxfVx1ezJmODc4fVx1OTc1MVx1ezIwMDg2fVx1NGU1Ylx1NGViYlx1MzUzZVx1NWMyM1x1NWY1MVx1NWZjNFx1MzhmYVx1NjI0Y1x1NjUzNVx1NmI3YVx1''@;'; put 'put ''NmMzNVx1NmMzYVx1NzA2Y1x1NzIyYlx1NGUyY1x1NzJhZFx1ezI0OGU5fVx1N2Y1Mlx1NzkzYlx1N2NmOVx1N2Y1M1x1ezI2MjZhfVx1MzRjMSJdLFsiOGJkZSIsIlx1ezI2MzRifVx1ODAwMlx1ODA4MFx1ezI2NjEyfVx1ezI2OTUxfVx1NTM1ZFx1ODg2NFx1ODljMVx1ezI3OGIyfVx1OGJh''@;'; put 'put ''MFx1OGQxZFx1OTQ4NVx1OTU3OFx1OTU3Zlx1OTVlOFx1ezI4ZTBmfVx1OTdlNlx1OTg3NVx1OThjZVx1OThkZVx1OTk2M1x1ezI5ODEwfVx1OWM3Y1x1OWUxZlx1OWVjNFx1NmI2Zlx1ZjkwN1x1NGUzN1x1ezIwMDg3fVx1OTYxZFx1NjIzN1x1OTRhMiJdLFsiOGM0MCIsIlx1NTAzYlx1NmRm''@;'; put 'put ''ZVx1ezI5YzczfVx1OWZhNlx1M2RjOVx1ODg4Zlx1ezI0MTRlfVx1NzA3N1x1NWNmNVx1NGIyMFx1ezI1MWNkfVx1MzU1OVx1ezI1ZDMwfVx1NjEyMlx1ezI4YTMyfVx1OGZhN1x1OTFmNlx1NzE5MVx1NjcxOVx1NzNiYVx1ezIzMjgxfVx1ezJhMTA3fVx1M2M4Ylx1ezIxOTgwfVx1NGIxMFx1''@;'; put 'put ''NzhlNFx1NzQwMlx1NTFhZVx1ezI4NzBmfVx1NDAwOVx1NmE2M1x1ezJhMmJhfVx1NDIyM1x1ODYwZlx1ezIwYTZmfVx1N2EyYVx1ezI5OTQ3fVx1ezI4YWVhfVx1OTc1NVx1NzA0ZFx1NTMyNFx1ezIyMDdlfVx1OTNmNFx1NzZkOVx1ezI4OWUzfVx1OWZhN1x1NzdkZFx1NGVhM1x1NGZmMFx1''@;'; put 'put ''NTBiY1x1NGUyZlx1NGYxN1x1OWZhOFx1NTQzNFx1N2Q4Ylx1NTg5Mlx1NThkMFx1ezIxZGI2fVx1NWU5Mlx1NWU5OVx1NWZjMlx1ezIyNzEyfVx1NjU4YiJdLFsiOGNhMSIsIlx1ezIzM2Y5fVx1NjkxOVx1NmE0M1x1ezIzYzYzfVx1NmNmZiJdLFsiOGNhNyIsIlx1NzIwMFx1ezI0NTA1fVx1''@;'; put 'put ''NzM4Y1x1M2VkYlx1ezI0YTEzfVx1NWIxNVx1NzRiOVx1OGI4M1x1ezI1Y2E0fVx1ezI1Njk1fVx1N2E5M1x1N2JlY1x1N2NjM1x1N2U2Y1x1ODJmOFx1ODU5N1x1OWZhOVx1ODg5MFx1OWZhYVx1OGViOVx1OWZhYlx1OGZjZlx1ODU1Zlx1OTllMFx1OTIyMVx1OWZhY1x1ezI4ZGI5fVx1ezIx''@;'; put 'put ''NDNmfVx1NDA3MVx1NDJhMlx1NWExYSJdLFsiOGNjOSIsIlx1OTg2OFx1Njc2Ylx1NDI3Nlx1NTczZCJdLFsiOGNjZSIsIlx1ODVkNlx1ezI0OTdifVx1ODJiZlx1ezI3MTBkfVx1NGM4MVx1ezI2ZDc0fVx1NWQ3Ylx1ezI2YjE1fVx1ezI2ZmJlfVx1OWZhZFx1OWZhZVx1NWI5Nlx1OWZhZlx1''@;'; put 'put ''NjZlN1x1N2U1Ylx1NmU1N1x1NzljYVx1M2Q4OFx1NDRjM1x1ezIzMjU2fVx1ezIyNzk2fVx1NDM5YVx1NDUzNiJdLFsiOGNlNiIsIlx1NWNkNVx1ezIzYjFhfVx1OGFmOVx1NWM3OFx1M2QxMlx1ezIzNTUxfVx1NWQ3OFx1OWZiMlx1NzE1N1x1NDU1OFx1ezI0MGVjfVx1ezIxZTIzfVx1NGM3''@;'; put 'put ''N1x1Mzk3OFx1MzQ0YVx1ezIwMWE0fVx1ezI2YzQxfVx1OGFjY1x1NGZiNFx1ezIwMjM5fVx1NTliZlx1ODE2Y1x1OTg1Nlx1ezI5OGZhfVx1NWYzYiJdLFsiOGQ0MCIsIlx1ezIwYjlmfSJdLFsiOGQ0MiIsIlx1ezIyMWMxfVx1ezI4OTZkfVx1NDEwMlx1NDZiYlx1ezI5MDc5fVx1M2YwN1x1''@;'; put 'put ''OWZiM1x1ezJhMWI1fVx1NDBmOFx1MzdkNlx1NDZmN1x1ezI2YzQ2fVx1NDE3Y1x1ezI4NmIyfVx1ezI3M2ZmfVx1NDU2ZFx1MzhkNFx1ezI1NDlhfVx1NDU2MVx1NDUxYlx1NGQ4OVx1NGM3Ylx1NGQ3Nlx1NDVlYVx1M2ZjOFx1ezI0YjBmfVx1MzY2MVx1NDRkZVx1NDRiZFx1NDFlZFx1NWQz''@;'; put 'put ''ZVx1NWQ0OFx1NWQ1Nlx1M2RmY1x1MzgwZlx1NWRhNFx1NWRiOVx1MzgyMFx1MzgzOFx1NWU0Mlx1NWViZFx1NWYyNVx1NWY4M1x1MzkwOFx1MzkxNFx1MzkzZlx1Mzk0ZFx1NjBkN1x1NjEzZFx1NWNlNVx1Mzk4OVx1NjFiN1x1NjFiOVx1NjFjZlx1MzliOFx1NjIyY1x1NjI5MFx1NjJlNVx1''@;'; put 'put ''NjMxOFx1MzlmOFx1NTZiMSJdLFsiOGRhMSIsIlx1M2EwM1x1NjNlMlx1NjNmYlx1NjQwN1x1NjQ1YVx1M2E0Ylx1NjRjMFx1NWQxNVx1NTYyMVx1OWY5Zlx1M2E5N1x1NjU4Nlx1M2FiZFx1NjVmZlx1NjY1M1x1M2FmMlx1NjY5Mlx1M2IyMlx1NjcxNlx1M2I0Mlx1NjdhNFx1NjgwMFx1M2I1''@;'; put 'put ''OFx1Njg0YVx1Njg4NFx1M2I3Mlx1M2I3MVx1M2I3Ylx1NjkwOVx1Njk0M1x1NzI1Y1x1Njk2NFx1Njk5Zlx1Njk4NVx1M2JiY1x1NjlkNlx1M2JkZFx1NmE2NVx1NmE3NFx1NmE3MVx1NmE4Mlx1M2JlY1x1NmE5OVx1M2JmMlx1NmFhYlx1NmFiNVx1NmFkNFx1NmFmNlx1NmI4MVx1NmJjMVx1''@;'; put 'put ''NmJlYVx1NmM3NVx1NmNhYVx1M2NjYlx1NmQwMlx1NmQwNlx1NmQyNlx1NmQ4MVx1M2NlZlx1NmRhNFx1NmRiMVx1NmUxNVx1NmUxOFx1NmUyOVx1NmU4Nlx1ezI4OWMwfVx1NmViYlx1NmVlMlx1NmVkYVx1OWY3Zlx1NmVlOFx1NmVlOVx1NmYyNFx1NmYzNFx1M2Q0Nlx1ezIzZjQxfVx1NmY4''@;'; put 'put ''MVx1NmZiZVx1M2Q2YVx1M2Q3NVx1NzFiN1x1NWM5OVx1M2Q4YVx1NzAyY1x1M2Q5MVx1NzA1MFx1NzA1NFx1NzA2Zlx1NzA3Zlx1NzA4OVx1ezIwMzI1fVx1NDNjMVx1MzVmMVx1ezIwZWQ4fSJdLFsiOGU0MCIsIlx1ezIzZWQ3fVx1NTdiZVx1ezI2ZWQzfVx1NzEzZVx1ezI1N2UwfVx1MzY0''@;'; put 'put ''ZVx1NjlhMlx1ezI4YmU5fVx1NWI3NFx1N2E0OVx1ezI1OGUxfVx1ezI5NGQ5fVx1N2E2NVx1N2E3ZFx1ezI1OWFjfVx1N2FiYlx1N2FiMFx1N2FjMlx1N2FjM1x1NzFkMVx1ezI2NDhkfVx1NDFjYVx1N2FkYVx1N2FkZFx1N2FlYVx1NDFlZlx1NTRiMlx1ezI1YzAxfVx1N2IwYlx1N2I1NVx1''@;'; put 'put ''N2IyOVx1ezI1MzBlfVx1ezI1Y2ZlfVx1N2JhMlx1N2I2Zlx1ODM5Y1x1ezI1YmI0fVx1ezI2YzdmfVx1N2JkMFx1ODQyMVx1N2I5Mlx1N2JiOFx1ezI1ZDIwfVx1M2RhZFx1ezI1YzY1fVx1ODQ5Mlx1N2JmYVx1N2MwNlx1N2MzNVx1ezI1Y2MxfVx1N2M0NFx1N2M4M1x1ezI0ODgyfVx1N2Nh''@;'; put 'put ''Nlx1NjY3ZFx1ezI0NTc4fVx1N2NjOVx1N2NjN1x1N2NlNlx1N2M3NFx1N2NmM1x1N2NmNVx1N2NjZSJdLFsiOGVhMSIsIlx1N2U2N1x1NDUxZFx1ezI2ZTQ0fVx1N2Q1ZFx1ezI2ZWQ2fVx1NzQ4ZFx1N2Q4OVx1N2RhYlx1NzEzNVx1N2RiM1x1N2RkMlx1ezI0MDU3fVx1ezI2MDI5fVx1N2Rl''@;'; put 'put ''NFx1M2QxM1x1N2RmNVx1ezIxN2Y5fVx1N2RlNVx1ezI4MzZkfVx1N2UxZFx1ezI2MTIxfVx1ezI2MTVhfVx1N2U2ZVx1N2U5Mlx1NDMyYlx1OTQ2Y1x1N2UyN1x1N2Y0MFx1N2Y0MVx1N2Y0N1x1NzkzNlx1ezI2MmQwfVx1OTllMVx1N2Y5N1x1ezI2MzUxfVx1N2ZhM1x1ezIxNjYxfVx1ezIw''@;'; put 'put ''MDY4fVx1NDU1Y1x1ezIzNzY2fVx1NDUwM1x1ezI4MzNhfVx1N2ZmYVx1ezI2NDg5fVx1ODAwNVx1ODAwOFx1ODAxZFx1ODAyOFx1ODAyZlx1ezJhMDg3fVx1ezI2Y2MzfVx1ODAzYlx1ODAzY1x1ODA2MVx1ezIyNzE0fVx1NDk4OVx1ezI2NjI2fVx1ezIzZGUzfVx1ezI2NmU4fVx1NjcyNVx1''@;'; put 'put ''ODBhN1x1ezI4YTQ4fVx1ODEwN1x1ODExYVx1NThiMFx1ezIyNmY2fVx1NmM3Zlx1ezI2NDk4fVx1ezI0ZmI4fVx1NjRlN1x1ezIxNDhhfVx1ODIxOFx1ezIxODVlfVx1NmE1M1x1ezI0YTY1fVx1ezI0YTk1fVx1NDQ3YVx1ODIyOVx1ezIwYjBkfVx1ezI2YTUyfVx1ezIzZDdlfVx1NGZmOVx1''@;'; put 'put ''ezIxNGZkfVx1ODRlMlx1ODM2Mlx1ezI2YjBhfVx1ezI0OWE3fVx1ezIzNTMwfVx1ezIxNzczfVx1ezIzZGY4fVx1ODJhYVx1NjkxYlx1ezJmOTk0fVx1NDFkYiJdLFsiOGY0MCIsIlx1ODU0Ylx1ODJkMFx1ODMxYVx1ezIwZTE2fVx1ezIxN2I0fVx1MzZjMVx1ezIzMTdkfVx1ezIzNTVhfVx1''@;'; put 'put ''ODI3Ylx1ODJlMlx1ODMxOFx1ezIzZThifVx1ezI2ZGEzfVx1ezI2YjA1fVx1ezI2Yjk3fVx1ezIzNWNlfVx1M2RiZlx1ODMxZFx1NTVlY1x1ODM4NVx1NDUwYlx1ezI2ZGE1fVx1ODNhY1x1ODNjMVx1ODNkM1x1MzQ3ZVx1ezI2ZWQ0fVx1NmE1N1x1ODU1YVx1MzQ5Nlx1ezI2ZTQyfVx1ezIy''@;'; put 'put ''ZWVmfVx1ODQ1OFx1ezI1YmU0fVx1ODQ3MVx1M2RkM1x1NDRlNFx1NmFhN1x1ODQ0YVx1ezIzY2I1fVx1Nzk1OFx1ODRhOFx1ezI2Yjk2fVx1ezI2ZTc3fVx1ezI2ZTQzfVx1ODRkZVx1ODQwZlx1ODM5MVx1NDRhMFx1ODQ5M1x1ODRlNFx1ezI1YzkxfVx1NDI0MFx1ezI1Y2MwfVx1NDU0M1x1''@;'; put 'put ''ODUzNFx1NWFmMlx1ezI2ZTk5fVx1NDUyN1x1ODU3M1x1NDUxNlx1NjdiZlx1ODYxNiJdLFsiOGZhMSIsIlx1ezI4NjI1fVx1ezI4NjNifVx1ODVjMVx1ezI3MDg4fVx1ODYwMlx1ezIxNTgyfVx1ezI3MGNkfVx1ezJmOWIyfVx1NDU2YVx1ODYyOFx1MzY0OFx1ezIxOGEyfVx1NTNmN1x1ezI3''@;'; put 'put ''MzlhfVx1ODY3ZVx1ODc3MVx1ezJhMGY4fVx1ODdlZVx1ezIyYzI3fVx1ODdiMVx1ODdkYVx1ODgwZlx1NTY2MVx1ODY2Y1x1Njg1Nlx1NDYwZlx1ODg0NVx1ODg0Nlx1ezI3NWUwfVx1ezIzZGI5fVx1ezI3NWU0fVx1ODg1ZVx1ODg5Y1x1NDY1Ylx1ODhiNFx1ODhiNVx1NjNjMVx1ODhjNVx1''@;'; put 'put ''Nzc3N1x1ezI3NzBmfVx1ODk4N1x1ODk4YVx1ODlhNlx1ODlhOVx1ODlhN1x1ODliY1x1ezI4YTI1fVx1ODllN1x1ezI3OTI0fVx1ezI3YWJkfVx1OGE5Y1x1Nzc5M1x1OTFmZVx1OGE5MFx1ezI3YTU5fVx1N2FlOVx1ezI3YjNhfVx1ezIzZjhmfVx1NDcxM1x1ezI3YjM4fVx1NzE3Y1x1OGIw''@;'; put 'put ''Y1x1OGIxZlx1ezI1NDMwfVx1ezI1NTY1fVx1OGIzZlx1OGI0Y1x1OGI0ZFx1OGFhOVx1ezI0YTdhfVx1OGI5MFx1OGI5Ylx1OGFhZlx1ezIxNmRmfVx1NDYxNVx1ODg0Zlx1OGM5Ylx1ezI3ZDU0fVx1ezI3ZDhmfVx1ezJmOWQ0fVx1MzcyNVx1ezI3ZDUzfVx1OGNkNlx1ezI3ZDk4fVx1ezI3''@;'; put 'put ''ZGJkfVx1OGQxMlx1OGQwM1x1ezIxOTEwfVx1OGNkYlx1NzA1Y1x1OGQxMVx1ezI0Y2M5fVx1M2VkMFx1OGQ3NyJdLFsiOTA0MCIsIlx1OGRhOVx1ezI4MDAyfVx1ezIxMDE0fVx1ezI0OThhfVx1M2I3Y1x1ezI4MWJjfVx1ezI3MTBjfVx1N2FlN1x1OGVhZFx1OGViNlx1OGVjM1x1OTJkNFx1''@;'; put 'put ''OGYxOVx1OGYyZFx1ezI4MzY1fVx1ezI4NDEyfVx1OGZhNVx1OTMwM1x1ezJhMjlmfVx1ezIwYTUwfVx1OGZiM1x1NDkyYVx1ezI4OWRlfVx1ezI4NTNkfVx1ezIzZGJifVx1NWVmOFx1ezIzMjYyfVx1OGZmOVx1ezJhMDE0fVx1ezI4NmJjfVx1ezI4NTAxfVx1ezIyMzI1fVx1Mzk4MFx1ezI2''@;'; put 'put ''ZWQ3fVx1OTAzN1x1ezI4NTNjfVx1ezI3YWJlfVx1OTA2MVx1ezI4NTZjfVx1ezI4NjBifVx1OTBhOFx1ezI4NzEzfVx1OTBjNFx1ezI4NmU2fVx1OTBhZVx1OTBmZFx1OTE2N1x1M2FmMFx1OTFhOVx1OTFjNFx1N2NhY1x1ezI4OTMzfVx1ezIxZTg5fVx1OTIwZVx1NmM5Zlx1OTI0MVx1OTI2''@;'; put 'put ''Mlx1ezI1NWI5fVx1OTJiOVx1ezI4YWM2fVx1ezIzYzlifVx1ezI4YjBjfVx1ezI1NWRifSJdLFsiOTBhMSIsIlx1ezIwZDMxfVx1OTMyY1x1OTM2Ylx1ezI4YWUxfVx1ezI4YmVifVx1NzA4Zlx1NWFjM1x1ezI4YWUyfVx1ezI4YWU1fVx1NDk2NVx1OTI0NFx1ezI4YmVjfVx1ezI4YzM5fVx1''@;'; put 'put ''ezI4YmZmfVx1OTM3M1x1OTQ1Ylx1OGViY1x1OTU4NVx1OTVhNlx1OTQyNlx1OTVhMFx1NmZmNlx1NDJiOVx1ezIyNjdhfVx1ezI4NmQ4fVx1ezIxMjdjfVx1ezIzZTJlfVx1NDlkZlx1NmMxY1x1OTY3Ylx1OTY5Nlx1NDE2Y1x1OTZhM1x1ezI2ZWQ1fVx1NjFkYVx1OTZiNlx1NzhmNVx1ezI4''@;'; put 'put ''YWUwfVx1OTZiZFx1NTNjY1x1NDlhMVx1ezI2Y2I4fVx1ezIwMjc0fVx1ezI2NDEwfVx1ezI5MGFmfVx1ezI5MGU1fVx1ezI0YWQxfVx1ezIxOTE1fVx1ezIzMzBhfVx1OTczMVx1ODY0Mlx1OTczNlx1NGEwZlx1NDUzZFx1NDU4NVx1ezI0YWU5fVx1NzA3NVx1NWI0MVx1OTcxYlx1OTc1Y1x1''@;'; put 'put ''ezI5MWQ1fVx1OTc1N1x1NWI0YVx1ezI5MWVifVx1OTc1Zlx1OTQyNVx1NTBkMFx1ezIzMGI3fVx1ezIzMGJjfVx1OTc4OVx1OTc5Zlx1OTdiMVx1OTdiZVx1OTdjMFx1OTdkMlx1OTdlMFx1ezI1NDZjfVx1OTdlZVx1NzQxY1x1ezI5NDMzfVx1OTdmZlx1OTdmNVx1ezI5NDFkfVx1ezI3OTdh''@;'; put 'put ''fVx1NGFkMVx1OTgzNFx1OTgzM1x1OTg0Ylx1OTg2Nlx1M2IwZVx1ezI3MTc1fVx1M2Q1MVx1ezIwNjMwfVx1ezI0MTVjfSJdLFsiOTE0MCIsIlx1ezI1NzA2fVx1OThjYVx1OThiN1x1OThjOFx1OThjN1x1NGFmZlx1ezI2ZDI3fVx1ezIxNmQzfVx1NTViMFx1OThlMVx1OThlNlx1OThlY1x1''@;'; put 'put ''OTM3OFx1OTkzOVx1ezI0YTI5fVx1NGI3Mlx1ezI5ODU3fVx1ezI5OTA1fVx1OTlmNVx1OWEwY1x1OWEzYlx1OWExMFx1OWE1OFx1ezI1NzI1fVx1MzZjNFx1ezI5MGIxfVx1ezI5YmQ1fVx1OWFlMFx1OWFlMlx1ezI5YjA1fVx1OWFmNFx1NGMwZVx1OWIxNFx1OWIyZFx1ezI4NjAwfVx1NTAz''@;'; put 'put ''NFx1OWIzNFx1ezI2OWE4fVx1MzhjM1x1ezIzMDdkfVx1OWI1MFx1OWI0MFx1ezI5ZDNlfVx1NWE0NVx1ezIxODYzfVx1OWI4ZVx1ezI0MjRifVx1OWMwMlx1OWJmZlx1OWMwY1x1ezI5ZTY4fVx1OWRkNFx1ezI5ZmI3fVx1ezJhMTkyfVx1ezJhMWFifVx1ezJhMGUxfVx1ezJhMTIzfVx1ezJh''@;'; put 'put ''MWRmfVx1OWQ3ZVx1OWQ4M1x1ezJhMTM0fVx1OWUwZVx1Njg4OCJdLFsiOTFhMSIsIlx1OWRjNFx1ezIyMTVifVx1ezJhMTkzfVx1ezJhMjIwfVx1ezIxOTNifVx1ezJhMjMzfVx1OWQzOVx1ezJhMGI5fVx1ezJhMmI0fVx1OWU5MFx1OWU5NVx1OWU5ZVx1OWVhMlx1NGQzNFx1OWVhYVx1OWVh''@;'; put 'put ''Zlx1ezI0MzY0fVx1OWVjMVx1M2I2MFx1MzllNVx1M2QxZFx1NGYzMlx1MzdiZVx1ezI4YzJifVx1OWYwMlx1OWYwOFx1NGI5Nlx1OTQyNFx1ezI2ZGEyfVx1OWYxN1x1OWYxNlx1OWYzOVx1NTY5Zlx1NTY4YVx1OWY0NVx1OTliOFx1ezI5MDhifVx1OTdmMlx1ODQ3Zlx1OWY2Mlx1OWY2OVx1''@;'; put 'put ''N2FkY1x1OWY4ZVx1NzIxNlx1NGJiZVx1ezI0OTc1fVx1ezI0OWJifVx1NzE3N1x1ezI0OWY4fVx1ezI0MzQ4fVx1ezI0YTUxfVx1NzM5ZVx1ezI4YmRhfVx1ezIxOGZhfVx1Nzk5Zlx1ezI4OTdlfVx1ezI4ZTM2fVx1OTM2OVx1OTNmM1x1ezI4YTQ0fVx1OTJlY1x1OTM4MVx1OTNjYlx1ezI4''@;'; put 'put ''OTZjfVx1ezI0NGI5fVx1NzIxN1x1M2VlYlx1Nzc3Mlx1N2E0M1x1NzBkMFx1ezI0NDczfVx1ezI0M2Y4fVx1NzE3ZVx1ezIxN2VmfVx1NzBhM1x1ezIxOGJlfVx1ezIzNTk5fVx1M2VjN1x1ezIxODg1fVx1ezI1NDJmfVx1ezIxN2Y4fVx1MzcyMlx1ezIxNmZifVx1ezIxODM5fVx1MzZlMVx1''@;'; put 'put ''ezIxNzc0fVx1ezIxOGQxfVx1ezI1ZjRifVx1MzcyM1x1ezIxNmMwfVx1NTc1Ylx1ezI0YTI1fVx1ezIxM2ZlfVx1ezIxMmE4fSJdLFsiOTI0MCIsIlx1ezIxM2M2fVx1ezIxNGI2fVx1ODUwM1x1ezIzNmE2fVx1ODUwM1x1ODQ1NVx1ezI0OTk0fVx1ezI3MTY1fVx1ezIzZTMxfVx1ezI1NTVj''@;'; put 'put ''fVx1ezIzZWZifVx1ezI3MDUyfVx1NDRmNFx1ezIzNmVlfVx1ezI5OTlkfVx1ezI2ZjI2fVx1NjdmOVx1MzczM1x1M2MxNVx1M2RlN1x1NTg2Y1x1ezIxOTIyfVx1NjgxMFx1NDA1N1x1ezIzNzNmfVx1ezI0MGUxfVx1ezI0MDhifVx1ezI0MTBmfVx1ezI2YzIxfVx1NTRjYlx1NTY5ZVx1ezI2''@;'; put 'put ''NmIxfVx1NTY5Mlx1ezIwZmRmfVx1ezIwYmE4fVx1ezIwZTBkfVx1OTNjNlx1ezI4YjEzfVx1OTM5Y1x1NGVmOFx1NTEyYlx1MzgxOVx1ezI0NDM2fVx1NGViY1x1ezIwNDY1fVx1ezIwMzdmfVx1NGY0Ylx1NGY4YVx1ezI1NjUxfVx1NWE2OFx1ezIwMWFifVx1ezIwM2NifVx1Mzk5OVx1ezIw''@;'; put 'put ''MzBhfVx1ezIwNDE0fVx1MzQzNVx1NGYyOVx1ezIwMmMwfVx1ezI4ZWIzfVx1ezIwMjc1fVx1OGFkYVx1ezIwMjBjfVx1NGU5OCJdLFsiOTJhMSIsIlx1NTBjZFx1NTEwZFx1NGZhMlx1NGYwM1x1ezI0YTBlfVx1ezIzZThhfVx1NGY0Mlx1NTAyZVx1NTA2Y1x1NTA4MVx1NGZjY1x1NGZlNVx1''@;'; put 'put ''NTA1OFx1NTBmY1x1NTE1OVx1NTE1Ylx1NTE1ZFx1NTE1ZVx1NmU3Nlx1ezIzNTk1fVx1ezIzZTM5fVx1ezIzZWJmfVx1NmQ3Mlx1ezIxODg0fVx1ezIzZTg5fVx1NTFhOFx1NTFjM1x1ezIwNWUwfVx1NDRkZFx1ezIwNGEzfVx1ezIwNDkyfVx1ezIwNDkxfVx1OGQ3YVx1ezI4YTljfVx1ezIw''@;'; put 'put ''NzBlfVx1NTI1OVx1NTJhNFx1ezIwODczfVx1NTJlMVx1OTM2ZVx1NDY3YVx1NzE4Y1x1ezI0MzhjfVx1ezIwYzIwfVx1ezI0OWFjfVx1ezIxMGU0fVx1NjlkMVx1ezIwZTFkfVx1NzQ3OVx1M2VkZVx1NzQ5OVx1NzQxNFx1NzQ1Nlx1NzM5OFx1NGI4ZVx1ezI0YWJjfVx1ezI0MDhkfVx1NTNk''@;'; put 'put ''MFx1MzU4NFx1NzIwZlx1ezI0MGM5fVx1NTViNFx1ezIwMzQ1fVx1NTRjZFx1ezIwYmM2fVx1NTcxZFx1OTI1ZFx1OTZmNFx1OTM2Nlx1NTdkZFx1NTc4ZFx1NTc3Zlx1MzYzZVx1NThjYlx1NWE5OVx1ezI4YTQ2fVx1ezIxNmZhfVx1ezIxNzZmfVx1ezIxNzEwfVx1NWEyY1x1NTliOFx1OTI4''@;'; put 'put ''Zlx1NWE3ZVx1NWFjZlx1NWExMlx1ezI1OTQ2fVx1ezIxOWYzfVx1ezIxODYxfVx1ezI0Mjk1fVx1MzZmNVx1NmQwNVx1NzQ0M1x1NWEyMVx1ezI1ZTgzfSJdLFsiOTM0MCIsIlx1NWE4MVx1ezI4YmQ3fVx1ezIwNDEzfVx1OTNlMFx1NzQ4Y1x1ezIxMzAzfVx1NzEwNVx1NDk3Mlx1OTQwOFx1''@;'; put 'put ''ezI4OWZifVx1OTNiZFx1MzdhMFx1NWMxZVx1NWM5ZVx1NWU1ZVx1NWU0OFx1ezIxOTk2fVx1ezIxOTdjfVx1ezIzYWVlfVx1NWVjZFx1NWI0Zlx1ezIxOTAzfVx1ezIxOTA0fVx1MzcwMVx1ezIxOGEwfVx1MzZkZFx1ezIxNmZlfVx1MzZkM1x1ODEyYVx1ezI4YTQ3fVx1ezIxZGJhfVx1ezIz''@;'; put 'put ''NDcyfVx1ezI4OWE4fVx1NWYwY1x1NWYwZVx1ezIxOTI3fVx1ezIxN2FifVx1NWE2Ylx1ezIxNzNifVx1NWI0NFx1ODYxNFx1ezI3NWZkfVx1ODg2MFx1NjA3ZVx1ezIyODYwfVx1ezIyNjJifVx1NWZkYlx1M2ViOFx1ezIyNWFmfVx1ezIyNWJlfVx1ezI5MDg4fVx1ezI2ZjczfVx1NjFjMFx1''@;'; put 'put ''ezIwMDNlfVx1ezIwMDQ2fVx1ezIyNjFifVx1NjE5OVx1NjE5OFx1NjA3NVx1ezIyYzlifVx1ezIyZDA3fVx1ezI0NmQ0fVx1ezI5MTRkfSJdLFsiOTNhMSIsIlx1NjQ3MVx1ezI0NjY1fVx1ezIyYjZhfVx1M2EyOVx1ezIyYjIyfVx1ezIzNDUwfVx1ezI5OGVhfVx1ezIyZTc4fVx1NjMzN1x1''@;'; put 'put ''ezJhNDVifVx1NjRiNlx1NjMzMVx1NjNkMVx1ezI0OWUzfVx1ezIyZDY3fVx1NjJhNFx1ezIyY2ExfVx1NjQzYlx1NjU2Ylx1Njk3Mlx1M2JmNFx1ezIzMDhlfVx1ezIzMmFkfVx1ezI0OTg5fVx1ezIzMmFifVx1NTUwZFx1ezIzMmUwfVx1ezIxOGQ5fVx1ezI5NDNmfVx1NjZjZVx1ezIzMjg5''@;'; put 'put ''fVx1ezIzMWIzfVx1M2FlMFx1NDE5MFx1ezI1NTg0fVx1ezI4YjIyfVx1ezI1NThmfVx1ezIxNmZjfVx1ezI1NTVifVx1ezI1NDI1fVx1NzhlZVx1ezIzMTAzfVx1ezIxODJhfVx1ezIzMjM0fVx1MzQ2NFx1ezIzMjBmfVx1ezIzMTgyfVx1ezI0MmM5fVx1NjY4ZVx1ezI2ZDI0fVx1NjY2Ylx1''@;'; put 'put ''NGI5M1x1NjYzMFx1ezI3ODcwfVx1ezIxZGVifVx1NjY2M1x1ezIzMmQyfVx1ezIzMmUxfVx1NjYxZVx1ezI1ODcyfVx1MzhkMVx1ezIzODNhfVx1ezIzN2JjfVx1M2I5OVx1ezIzN2EyfVx1ezIzM2ZlfVx1NzRkMFx1M2I5Nlx1Njc4Zlx1ezI0NjJhfVx1NjhiNlx1NjgxZVx1M2JjNFx1NmFi''@;'; put 'put ''ZVx1Mzg2M1x1ezIzN2Q1fVx1ezI0NDg3fVx1NmEzM1x1NmE1Mlx1NmFjOVx1NmIwNVx1ezIxOTEyfVx1NjUxMVx1Njg5OFx1NmE0Y1x1M2JkN1x1NmE3YVx1NmI1N1x1ezIzZmMwfVx1ezIzYzlhfVx1OTNhMFx1OTJmMlx1ezI4YmVhfVx1ezI4YWNifSJdLFsiOTQ0MCIsIlx1OTI4OVx1ezI4''@;'; put 'put ''MDFlfVx1ezI4OWRjfVx1OTQ2N1x1NmRhNVx1NmYwYlx1ezI0OWVjfVx1NmQ2N1x1ezIzZjdmfVx1M2Q4Zlx1NmUwNFx1ezI0MDNjfVx1NWEzZFx1NmUwYVx1NTg0N1x1NmQyNFx1Nzg0Mlx1NzEzYlx1ezI0MzFhfVx1ezI0Mjc2fVx1NzBmMVx1NzI1MFx1NzI4N1x1NzI5NFx1ezI0NzhmfVx1''@;'; put 'put ''ezI0NzI1fVx1NTE3OVx1ezI0YWE0fVx1ezIwNWVifVx1NzQ3YVx1ezIzZWY4fVx1ezIzNjVmfVx1ezI0YTRhfVx1ezI0OTE3fVx1ezI1ZmUxfVx1M2YwNlx1M2ViMVx1ezI0YWRmfVx1ezI4YzIzfVx1ezIzZjM1fVx1NjBhN1x1M2VmM1x1NzRjY1x1NzQzY1x1OTM4N1x1NzQzN1x1NDQ5Zlx1''@;'; put 'put ''ezI2ZGVhfVx1NDU1MVx1NzU4M1x1M2Y2M1x1ezI0Y2Q5fVx1ezI0ZDA2fVx1M2Y1OFx1NzU1NVx1NzY3M1x1ezJhNWM2fVx1M2IxOVx1NzQ2OFx1ezI4YWNjfVx1ezI0OWFifVx1ezI0OThlfVx1M2FmYiJdLFsiOTRhMSIsIlx1M2RjZFx1ezI0YTRlfVx1M2VmZlx1ezI0OWM1fVx1ezI0OGYz''@;'; put 'put ''fVx1OTFmYVx1NTczMlx1OTM0Mlx1ezI4YWUzfVx1ezIxODY0fVx1NTBkZlx1ezI1MjIxfVx1ezI1MWU3fVx1Nzc3OFx1ezIzMjMyfVx1NzcwZVx1NzcwZlx1Nzc3Ylx1ezI0Njk3fVx1ezIzNzgxfVx1M2E1ZVx1ezI0OGYwfVx1NzQzOFx1NzQ5Ylx1M2ViZlx1ezI0YWJhfVx1ezI0YWM3fVx1''@;'; put 'put ''NDBjOFx1ezI0YTk2fVx1ezI2MWFlfVx1OTMwN1x1ezI1NTgxfVx1NzgxZVx1Nzg4ZFx1Nzg4OFx1NzhkMlx1NzNkMFx1Nzk1OVx1ezI3NzQxfVx1ezI1NmUzfVx1NDEwZVx1Nzk5Ylx1ODQ5Nlx1NzlhNVx1NmEyZFx1ezIzZWZhfVx1N2EzYVx1NzlmNFx1NDE2ZVx1ezIxNmU2fVx1NDEzMlx1''@;'; put 'put ''OTIzNVx1NzlmMVx1ezIwZDRjfVx1ezI0OThjfVx1ezIwMjk5fVx1ezIzZGJhfVx1ezIxNzZlfVx1MzU5N1x1NTU2Ylx1MzU3MFx1MzZhYVx1ezIwMWQ0fVx1ezIwYzBkfVx1N2FlMlx1NWE1OVx1ezIyNmY1fVx1ezI1YWFmfVx1ezI1YTljfVx1NWEwZFx1ezIwMjVifVx1NzhmMFx1NWEyYVx1''@;'; put 'put ''ezI1YmM2fVx1N2FmZVx1NDFmOVx1N2M1ZFx1N2M2ZFx1NDIxMVx1ezI1YmIzfVx1ezI1ZWJjfVx1ezI1ZWE2fVx1N2NjZFx1ezI0OWY5fVx1ezIxN2IwfVx1N2M4ZVx1N2M3Y1x1N2NhZVx1NmFiMlx1N2RkY1x1N2UwN1x1N2RkM1x1N2Y0ZVx1ezI2MjYxfSJdLFsiOTU0MCIsIlx1ezI2MTVj''@;'; put 'put ''fVx1ezI3YjQ4fVx1N2Q5N1x1ezI1ZTgyfVx1NDI2YVx1ezI2Yjc1fVx1ezIwOTE2fVx1NjdkNlx1ezIwMDRlfVx1ezIzNWNmfVx1NTdjNFx1ezI2NDEyfVx1ezI2M2Y4fVx1ezI0OTYyfVx1N2ZkZFx1N2IyN1x1ezIwODJjfVx1ezI1YWU5fVx1ezI1ZDQzfVx1N2IwY1x1ezI1ZTBlfVx1OTll''@;'; put 'put ''Nlx1ODY0NVx1OWE2M1x1NmExY1x1ezIzNDNmfVx1MzllMlx1ezI0OWY3fVx1ezI2NWFkfVx1OWExZlx1ezI2NWEwfVx1ODQ4MFx1ezI3MTI3fVx1ezI2Y2QxfVx1NDRlYVx1ODEzN1x1NDQwMlx1ODBjNlx1ODEwOVx1ODE0Mlx1ezI2N2I0fVx1OThjM1x1ezI2YTQyfVx1ODI2Mlx1ODI2NVx1''@;'; put 'put ''ezI2YTUxfVx1ODQ1M1x1ezI2ZGE3fVx1ODYxMFx1ezI3MjFifVx1NWE4Nlx1NDE3Zlx1ezIxODQwfVx1NWIyYlx1ezIxOGExfVx1NWFlNFx1ezIxOGQ4fVx1ODZhMFx1ezJmOWJjfVx1ezIzZDhmfVx1ODgyZFx1ezI3NDIyfVx1NWEwMiJdLFsiOTVhMSIsIlx1ODg2ZVx1NGY0NVx1ODg4N1x1''@;'; put 'put ''ODhiZlx1ODhlNlx1ODk2NVx1ODk0ZFx1ezI1NjgzfVx1ODk1NFx1ezI3Nzg1fVx1ezI3Nzg0fVx1ezI4YmY1fVx1ezI4YmQ5fVx1ezI4YjljfVx1ezI4OWY5fVx1M2VhZFx1ODRhM1x1NDZmNVx1NDZjZlx1MzdmMlx1OGEzZFx1OGExY1x1ezI5NDQ4fVx1NWY0ZFx1OTIyYlx1ezI0Mjg0fVx1''@;'; put 'put ''NjVkNFx1NzEyOVx1NzBjNFx1ezIxODQ1fVx1OWQ2ZFx1OGM5Zlx1OGNlOVx1ezI3ZGRjfVx1NTk5YVx1NzdjM1x1NTlmMFx1NDM2ZVx1MzZkNFx1OGUyYVx1OGVhN1x1ezI0YzA5fVx1OGYzMFx1OGY0YVx1NDJmNFx1NmM1OFx1NmZiYlx1ezIyMzIxfVx1NDg5Ylx1NmY3OVx1NmU4Ylx1ezIx''@;'; put 'put ''N2RhfVx1OWJlOVx1MzZiNVx1ezI0OTJmfVx1OTBiYlx1OTA5N1x1NTU3MVx1NDkwNlx1OTFiYlx1OTQwNFx1ezI4YTRifVx1NDA2Mlx1ezI4YWZjfVx1OTQyN1x1ezI4YzFkfVx1ezI4YzNifVx1ODRlNVx1OGEyYlx1OTU5OVx1OTVhN1x1OTU5N1x1OTU5Nlx1ezI4ZDM0fVx1NzQ0NVx1M2Vj''@;'; put 'put ''Mlx1ezI0OGZmfVx1ezI0YTQyfVx1ezI0M2VhfVx1M2VlN1x1ezIzMjI1fVx1OTY4Zlx1ezI4ZWU3fVx1ezI4ZTY2fVx1ezI4ZTY1fVx1M2VjY1x1ezI0OWVkfVx1ezI0YTc4fVx1ezIzZmVlfVx1NzQxMlx1NzQ2Ylx1M2VmY1x1OTc0MVx1ezI5MGIwfSJdLFsiOTY0MCIsIlx1Njg0N1x1NGEx''@;'; put 'put ''ZFx1ezI5MDkzfVx1ezI1N2RmfVx1OTc1ZFx1OTM2OFx1ezI4OTg5fVx1ezI4YzI2fVx1ezI4YjJmfVx1ezI2M2JlfVx1OTJiYVx1NWIxMVx1OGI2OVx1NDkzY1x1NzNmOVx1ezI0MjFifVx1OTc5Ylx1OTc3MVx1OTkzOFx1ezIwZjI2fVx1NWRjMVx1ezI4YmM1fVx1ezI0YWIyfVx1OTgxZlx1''@;'; put 'put ''ezI5NGRhfVx1OTJmNlx1ezI5NWQ3fVx1OTFlNVx1NDRjMFx1ezI4YjUwfVx1ezI0YTY3fVx1ezI4YjY0fVx1OThkY1x1ezI4YTQ1fVx1M2YwMFx1OTIyYVx1NDkyNVx1ODQxNFx1OTkzYlx1OTk0ZFx1ezI3YjA2fVx1M2RmZFx1OTk5Ylx1NGI2Zlx1OTlhYVx1OWE1Y1x1ezI4YjY1fVx1ezI1''@;'; put 'put ''OGM4fVx1NmE4Zlx1OWEyMVx1NWFmZVx1OWEyZlx1ezI5OGYxfVx1NGI5MFx1ezI5OTQ4fVx1OTliY1x1NGJiZFx1NGI5N1x1OTM3ZFx1NTg3Mlx1ezIxMzAyfVx1NTgyMlx1ezI0OWI4fSJdLFsiOTZhMSIsIlx1ezIxNGU4fVx1Nzg0NFx1ezIyNzFmfVx1ezIzZGI4fVx1NjhjNVx1M2Q3ZFx1''@;'; put 'put ''OTQ1OFx1MzkyN1x1NjE1MFx1ezIyNzgxfVx1ezIyOTZifVx1NjEwN1x1OWM0Zlx1OWM1M1x1OWM3Ylx1OWMzNVx1OWMxMFx1OWI3Zlx1OWJjZlx1ezI5ZTJkfVx1OWI5Zlx1ezJhMWY1fVx1ezJhMGZlfVx1OWQyMVx1NGNhZVx1ezI0MTA0fVx1OWUxOFx1NGNiMFx1OWQwY1x1ezJhMWI0fVx1''@;'; put 'put ''ezJhMGVkfVx1ezJhMGYzfVx1ezI5OTJmfVx1OWRhNVx1ODRiZFx1ezI2ZTEyfVx1ezI2ZmRmfVx1ezI2YjgyfVx1ODVmY1x1NDUzM1x1ezI2ZGE0fVx1ezI2ZTg0fVx1ezI2ZGYwfVx1ODQyMFx1ODVlZVx1ezI2ZTAwfVx1ezIzN2Q3fVx1ezI2MDY0fVx1NzllMlx1ezIzNTljfVx1ezIzNjQw''@;'; put 'put ''fVx1NDkyZFx1ezI0OWRlfVx1M2Q2Mlx1OTNkYlx1OTJiZVx1OTM0OFx1ezIwMmJmfVx1NzhiOVx1OTI3N1x1OTQ0ZFx1NGZlNFx1MzQ0MFx1OTA2NFx1ezI1NTVkfVx1NzgzZFx1Nzg1NFx1NzhiNlx1Nzg0Ylx1ezIxNzU3fVx1ezIzMWM5fVx1ezI0OTQxfVx1MzY5YVx1NGY3Mlx1NmZkYVx1''@;'; put 'put ''NmZkOVx1NzAxZVx1NzAxZVx1NTQxNFx1ezI0MWI1fVx1NTdiYlx1NThmM1x1NTc4YVx1OWQxNlx1NTdkN1x1NzEzNFx1MzRhZlx1ezI0MWFjfVx1NzFlYlx1ezI2YzQwfVx1ezI0Zjk3fVx1NWIyOFx1ezIxN2I1fVx1ezI4YTQ5fSJdLFsiOTc0MCIsIlx1NjEwY1x1NWFjZVx1NWEwYlx1NDJi''@;'; put 'put ''Y1x1ezI0NDg4fVx1MzcyY1x1NGI3Ylx1ezI4OWZjfVx1OTNiYlx1OTNiOFx1ezIxOGQ2fVx1ezIwZjFkfVx1ODQ3Mlx1ezI2Y2MwfVx1ezIxNDEzfVx1ezI0MmZhfVx1ezIyYzI2fVx1ezI0M2MxfVx1NTk5NFx1ezIzZGI3fVx1ezI2NzQxfVx1N2RhOFx1ezI2MTVifVx1ezI2MGE0fVx1ezI0''@;'; put 'put ''OWI5fVx1ezI0OThifVx1ezI4OWZhfVx1OTJlNVx1NzNlMlx1M2VlOVx1NzRiNFx1ezI4YjYzfVx1ezIxODlmfVx1M2VlMVx1ezI0YWIzfVx1NmFkOFx1NzNmM1x1NzNmYlx1M2VkNlx1ezI0YTNlfVx1ezI0YTk0fVx1ezIxN2Q5fVx1ezI0YTY2fVx1ezIwM2E3fVx1ezIxNDI0fVx1ezI0OWU1''@;'; put 'put ''fVx1NzQ0OFx1ezI0OTE2fVx1NzBhNVx1ezI0OTc2fVx1OTI4NFx1NzNlNlx1OTM1Zlx1ezIwNGZlfVx1OTMzMVx1ezI4YWNlfVx1ezI4YTE2fVx1OTM4Nlx1ezI4YmU3fVx1ezI1NWQ1fVx1NDkzNVx1ezI4YTgyfVx1NzE2YiJdLFsiOTdhMSIsIlx1ezI0OTQzfVx1ezIwY2ZmfVx1NTZhNFx1''@;'; put 'put ''ezIwNjFhfVx1ezIwYmVifVx1ezIwY2I4fVx1NTUwMlx1NzljNFx1ezIxN2ZhfVx1N2RmZVx1ezIxNmMyfVx1ezI0YTUwfVx1ezIxODUyfVx1NDUyZVx1OTQwMVx1MzcwYVx1ezI4YWMwfVx1ezI0OWFkfVx1NTliMFx1ezIxOGJmfVx1ezIxODgzfVx1ezI3NDg0fVx1NWFhMVx1MzZlMlx1ezIz''@;'; put 'put ''ZDVifVx1MzZiMFx1OTI1Zlx1NWE3OVx1ezI4YTgxfVx1ezIxODYyfVx1OTM3NFx1M2NjZFx1ezIwYWI0fVx1NGE5Nlx1Mzk4YVx1NTBmNFx1M2Q2OVx1M2Q0Y1x1ezIxMzljfVx1NzE3NVx1NDJmYlx1ezI4MjE4fVx1NmUwZlx1ezI5MGU0fVx1NDRlYlx1NmQ1N1x1ezI3ZTRmfVx1NzA2N1x1''@;'; put 'put ''NmNhZlx1M2NkNlx1ezIzZmVkfVx1ezIzZTJkfVx1NmUwMlx1NmYwY1x1M2Q2Zlx1ezIwM2Y1fVx1NzU1MVx1MzZiY1x1MzRjOFx1NDY4MFx1M2VkYVx1NDg3MVx1NTljNFx1OTI2ZVx1NDkzZVx1OGY0MVx1ezI4YzFjfVx1ezI2YmMwfVx1NTgxMlx1NTdjOFx1MzZkNlx1ezIxNDUyfVx1NzBm''@;'; put 'put ''ZVx1ezI0MzYyfVx1ezI0YTcxfVx1ezIyZmUzfVx1ezIxMmIwfVx1ezIyM2JkfVx1NjhiOVx1Njk2N1x1ezIxMzk4fVx1ezIzNGU1fVx1ezI3YmY0fVx1ezIzNmRmfVx1ezI4YTgzfVx1ezIzN2Q2fVx1ezIzM2ZhfVx1ezI0YzlmfVx1NmExYVx1ezIzNmFkfVx1ezI2Y2I3fVx1ODQzZVx1NDRk''@;'; put 'put ''Zlx1NDRjZSJdLFsiOTg0MCIsIlx1ezI2ZDI2fVx1ezI2ZDUxfVx1ezI2YzgyfVx1ezI2ZmRlfVx1NmYxN1x1ezI3MTA5fVx1ODMzZFx1ezIxNzNhfVx1ODNlZFx1ezI2YzgwfVx1ezI3MDUzfVx1ezIxN2RifVx1NTk4OVx1NWE4Mlx1ezIxN2IzfVx1NWE2MVx1NWE3MVx1ezIxOTA1fVx1ezI0''@;'; put 'put ''MWZjfVx1MzcyZFx1NTllZlx1ezIxNzNjfVx1MzZjN1x1NzE4ZVx1OTM5MFx1NjY5YVx1ezI0MmE1fVx1NWE2ZVx1NWEyYlx1ezI0MjkzfVx1NmEyYlx1ezIzZWY5fVx1ezI3NzM2fVx1ezI0NDVifVx1ezI0MmNhfVx1NzExZFx1ezI0MjU5fVx1ezI4OWUxfVx1NGZiMFx1ezI2ZDI4fVx1NWNj''@;'; put 'put ''Mlx1ezI0NGNlfVx1ezI3ZTRkfVx1ezI0M2JkfVx1NmEwY1x1ezI0MjU2fVx1ezIxMzA0fVx1NzBhNlx1NzEzM1x1ezI0M2U5fVx1M2RhNVx1NmNkZlx1ezJmODI1fVx1ezI0YTRmfVx1N2U2NVx1NTllYlx1NWQyZlx1M2RmM1x1NWY1Y1x1ezI0YTVkfVx1ezIxN2RmfVx1N2RhNFx1ODQyNiJd''@;'; put 'put ''LFsiOThhMSIsIlx1NTQ4NVx1ezIzYWZhfVx1ezIzMzAwfVx1ezIwMjE0fVx1NTc3ZVx1ezIwOGQ1fVx1ezIwNjE5fVx1M2ZlNVx1ezIxZjllfVx1ezJhMmI2fVx1NzAwM1x1ezI5MTVifVx1NWQ3MFx1NzM4Zlx1N2NkM1x1ezI4YTU5fVx1ezI5NDIwfVx1NGZjOFx1N2ZlN1x1NzJjZFx1NzMx''@;'; put 'put ''MFx1ezI3YWY0fVx1NzMzOFx1NzMzOVx1ezI1NmY2fVx1NzM0MVx1NzM0OFx1M2VhOVx1ezI3YjE4fVx1OTA2Y1x1NzFmNVx1ezI0OGYyfVx1NzNlMVx1ODFmNlx1M2VjYVx1NzcwY1x1M2VkMVx1NmNhMlx1NTZmZFx1NzQxOVx1NzQxZVx1NzQxZlx1M2VlMlx1M2VmMFx1M2VmNFx1M2VmYVx1''@;'; put 'put ''NzRkM1x1M2YwZVx1M2Y1M1x1NzU0Mlx1NzU2ZFx1NzU3Mlx1NzU4ZFx1M2Y3Y1x1NzVjOFx1NzVkY1x1M2ZjMFx1NzY0ZFx1M2ZkN1x1NzY3NFx1M2ZkY1x1NzY3YVx1ezI0ZjVjfVx1NzE4OFx1NTYyM1x1ODk4MFx1NTg2OVx1NDAxZFx1Nzc0M1x1NDAzOVx1Njc2MVx1NDA0NVx1MzVkYlx1''@;'; put 'put ''Nzc5OFx1NDA2YVx1NDA2Zlx1NWM1ZVx1NzdiZVx1NzdjYlx1NThmMlx1NzgxOFx1NzBiOVx1NzgxY1x1NDBhOFx1NzgzOVx1Nzg0N1x1Nzg1MVx1Nzg2Nlx1ODQ0OFx1ezI1NTM1fVx1NzkzM1x1NjgwM1x1NzkzMlx1NDEwMyJdLFsiOTk0MCIsIlx1NDEwOVx1Nzk5MVx1Nzk5OVx1OGZiYlx1''@;'; put 'put ''N2EwNlx1OGZiY1x1NDE2N1x1N2E5MVx1NDFiMlx1N2FiY1x1ODI3OVx1NDFjNFx1N2FjZlx1N2FkYlx1NDFjZlx1NGUyMVx1N2I2Mlx1N2I2Y1x1N2I3Ylx1N2MxMlx1N2MxYlx1NDI2MFx1NDI3YVx1N2M3Ylx1N2M5Y1x1NDI4Y1x1N2NiOFx1NDI5NFx1N2NlZFx1OGY5M1x1NzBjMFx1ezIw''@;'; put 'put ''Y2NmfVx1N2RjZlx1N2RkNFx1N2RkMFx1N2RmZFx1N2ZhZVx1N2ZiNFx1NzI5Zlx1NDM5N1x1ODAyMFx1ODAyNVx1N2IzOVx1ODAyZVx1ODAzMVx1ODA1NFx1M2RjY1x1NTdiNFx1NzBhMFx1ODBiN1x1ODBlOVx1NDNlZFx1ODEwY1x1NzMyYVx1ODEwZVx1ODExMlx1NzU2MFx1ODExNFx1NDQw''@;'; put 'put ''MVx1M2IzOVx1ODE1Nlx1ODE1OVx1ODE1YSJdLFsiOTlhMSIsIlx1NDQxM1x1NTgzYVx1ODE3Y1x1ODE4NFx1NDQyNVx1ODE5M1x1NDQyZFx1ODFhNVx1NTdlZlx1ODFjMVx1ODFlNFx1ODI1NFx1NDQ4Zlx1ODJhNlx1ODI3Nlx1ODJjYVx1ODJkOFx1ODJmZlx1NDRiMFx1ODM1N1x1OTY2OVx1''@;'; put 'put ''Njk4YVx1ODQwNVx1NzBmNVx1ODQ2NFx1NjBlM1x1ODQ4OFx1NDUwNFx1ODRiZVx1ODRlMVx1ODRmOFx1ODUxMFx1ODUzOFx1ODU1Mlx1NDUzYlx1ODU2Zlx1ODU3MFx1ODVlMFx1NDU3N1x1ODY3Mlx1ODY5Mlx1ODZiMlx1ODZlZlx1OTY0NVx1ODc4Ylx1NDYwNlx1NDYxN1x1ODhhZVx1ODhm''@;'; put 'put ''Zlx1ODkyNFx1ODk0N1x1ODk5MVx1ezI3OTY3fVx1OGEyOVx1OGEzOFx1OGE5NFx1OGFiNFx1OGM1MVx1OGNkNFx1OGNmMlx1OGQxY1x1NDc5OFx1NTg1Zlx1OGRjM1x1NDdlZFx1NGVlZVx1OGUzYVx1NTVkOFx1NTc1NFx1OGU3MVx1NTVmNVx1OGViMFx1NDgzN1x1OGVjZVx1OGVlMlx1OGVl''@;'; put 'put ''NFx1OGVlZFx1OGVmMlx1OGZiN1x1OGZjMVx1OGZjYVx1OGZjY1x1OTAzM1x1OTljNFx1NDhhZFx1OThlMFx1OTIxM1x1NDkxZVx1OTIyOFx1OTI1OFx1OTI2Ylx1OTJiMVx1OTJhZVx1OTJiZiJdLFsiOWE0MCIsIlx1OTJlM1x1OTJlYlx1OTJmM1x1OTJmNFx1OTJmZFx1OTM0M1x1OTM4NFx1''@;'; put 'put ''OTNhZFx1NDk0NVx1NDk1MVx1OWViZlx1OTQxN1x1NTMwMVx1OTQxZFx1OTQyZFx1OTQzZVx1NDk2YVx1OTQ1NFx1OTQ3OVx1OTUyZFx1OTVhMlx1NDlhN1x1OTVmNFx1OTYzM1x1NDllNVx1NjdhMFx1NGEyNFx1OTc0MFx1NGEzNVx1OTdiMlx1OTdjMlx1NTY1NFx1NGFlNFx1NjBlOFx1OThi''@;'; put 'put ''OVx1NGIxOVx1OThmMVx1NTg0NFx1OTkwZVx1OTkxOVx1NTFiNFx1OTkxY1x1OTkzN1x1OTk0Mlx1OTk1ZFx1OTk2Mlx1NGI3MFx1OTljNVx1NGI5ZFx1OWEzY1x1OWIwZlx1N2E4M1x1OWI2OVx1OWI4MVx1OWJkZFx1OWJmMVx1OWJmNFx1NGM2ZFx1OWMyMFx1Mzc2Zlx1ezIxYmMyfVx1OWQ0''@;'; put 'put ''OVx1OWMzYSJdLFsiOWFhMSIsIlx1OWVmZVx1NTY1MFx1OWQ5M1x1OWRiZFx1OWRjMFx1OWRmY1x1OTRmNlx1OGZiNlx1OWU3Ylx1OWVhY1x1OWViMVx1OWViZFx1OWVjNlx1OTRkY1x1OWVlMlx1OWVmMVx1OWVmOFx1N2FjOFx1OWY0NFx1ezIwMDk0fVx1ezIwMmI3fVx1ezIwM2EwfVx1Njkx''@;'; put 'put ''YVx1OTRjM1x1NTlhY1x1ezIwNGQ3fVx1NTg0MFx1OTRjMVx1MzdiOVx1ezIwNWQ1fVx1ezIwNjE1fVx1ezIwNjc2fVx1ezIxNmJhfVx1NTc1N1x1NzE3M1x1ezIwYWMyfVx1ezIwYWNkfVx1ezIwYmJmfVx1NTQ2YVx1ezJmODNifVx1ezIwYmNifVx1NTQ5ZVx1ezIwYmZifVx1ezIwYzNifVx1''@;'; put 'put ''ezIwYzUzfVx1ezIwYzY1fVx1ezIwYzdjfVx1NjBlN1x1ezIwYzhkfVx1NTY3YVx1ezIwY2I1fVx1ezIwY2RkfVx1ezIwY2VkfVx1ezIwZDZmfVx1ezIwZGIyfVx1ezIwZGM4fVx1Njk1NVx1OWMyZlx1ODdhNVx1ezIwZTA0fVx1ezIwZTBlfVx1ezIwZWQ3fVx1ezIwZjkwfVx1ezIwZjJkfVx1''@;'; put 'put ''ezIwZTczfVx1NWMyMFx1ezIwZmJjfVx1NWUwYlx1ezIxMDVjfVx1ezIxMDRmfVx1ezIxMDc2fVx1NjcxZVx1ezIxMDdifVx1ezIxMDg4fVx1ezIxMDk2fVx1MzY0N1x1ezIxMGJmfVx1ezIxMGQzfVx1ezIxMTJmfVx1ezIxMTNifVx1NTM2NFx1ODRhZFx1ezIxMmUzfVx1ezIxMzc1fVx1ezIx''@;'; put 'put ''MzM2fVx1OGI4MVx1ezIxNTc3fVx1ezIxNjE5fVx1ezIxN2MzfVx1ezIxN2M3fVx1NGU3OFx1NzBiYlx1ezIxODJkfVx1ezIxOTZhfSJdLFsiOWI0MCIsIlx1ezIxYTJkfVx1ezIxYTQ1fVx1ezIxYzJhfVx1ezIxYzcwfVx1ezIxY2FjfVx1ezIxZWM4fVx1NjJjM1x1ezIxZWQ1fVx1ezIxZjE1''@;'; put 'put ''fVx1NzE5OFx1Njg1NVx1ezIyMDQ1fVx1NjllOVx1MzZjOFx1ezIyMjdjfVx1ezIyM2Q3fVx1ezIyM2ZhfVx1ezIyNzJhfVx1ezIyODcxfVx1ezIyOTRmfVx1ODJmZFx1ezIyOTY3fVx1ezIyOTkzfVx1ezIyYWQ1fVx1ODlhNVx1ezIyYWU4fVx1OGZhMFx1ezIyYjBlfVx1OTdiOFx1ezIyYjNm''@;'; put 'put ''fVx1OTg0N1x1OWFiZFx1ezIyYzRjfSJdLFsiOWI2MiIsIlx1ezIyYzg4fVx1ezIyY2I3fVx1ezI1YmU4fVx1ezIyZDA4fVx1ezIyZDEyfVx1ezIyZGI3fVx1ezIyZDk1fVx1ezIyZTQyfVx1ezIyZjc0fVx1ezIyZmNjfVx1ezIzMDMzfVx1ezIzMDY2fVx1ezIzMzFmfVx1ezIzM2RlfVx1NWZi''@;'; put 'put ''MVx1NjY0OFx1NjZiZlx1ezI3YTc5fVx1ezIzNTY3fVx1ezIzNWYzfVx1NzIwMVx1ezI0OWJhfVx1NzdkN1x1ezIzNjFhfVx1ezIzNzE2fVx1N2U4N1x1ezIwMzQ2fVx1NThiNVx1NjcwZSJdLFsiOWJhMSIsIlx1NjkxOFx1ezIzYWE3fVx1ezI3NjU3fVx1ezI1ZmUyfVx1ezIzZTExfVx1ezIz''@;'; put 'put ''ZWI5fVx1ezI3NWZlfVx1ezIyMDlhfVx1NDhkMFx1NGFiOFx1ezI0MTE5fVx1ezI4YTlhfVx1ezI0MmVlfVx1ezI0MzBkfVx1ezI0MDNifVx1ezI0MzM0fVx1ezI0Mzk2fVx1ezI0YTQ1fVx1ezIwNWNhfVx1NTFkMlx1ezIwNjExfVx1NTk5Zlx1ezIxZWE4fVx1M2JiZVx1ezIzY2ZmfVx1ezI0''@;'; put 'put ''NDA0fVx1ezI0NGQ2fVx1NTc4OFx1ezI0Njc0fVx1Mzk5Ylx1ezI0NzJmfVx1ezI4NWU4fVx1ezI5OWM5fVx1Mzc2Mlx1ezIyMWMzfVx1OGI1ZVx1ezI4YjRlfVx1OTlkNlx1ezI0ODEyfVx1ezI0OGZifVx1ezI0YTE1fVx1NzIwOVx1ezI0YWMwfVx1ezIwYzc4fVx1NTk2NVx1ezI0ZWE1fVx1''@;'; put 'put ''ezI0Zjg2fVx1ezIwNzc5fVx1OGVkYVx1ezI1MDJjfVx1NTI4Zlx1NTczZlx1NzE3MVx1ezI1Mjk5fVx1ezI1NDE5fVx1ezIzZjRhfVx1ezI0YWE3fVx1NTViY1x1ezI1NDQ2fVx1ezI1NDZlfVx1ezI2YjUyfVx1OTFkNFx1MzQ3M1x1ezI1NTNmfVx1ezI3NjMyfVx1ezI1NTVlfVx1NDcxOFx1''@;'; put 'put ''ezI1NTYyfVx1ezI1NTY2fVx1ezI1N2M3fVx1ezI0OTNmfVx1ezI1ODVkfVx1NTA2Nlx1MzRmYlx1ezIzM2NjfVx1NjBkZVx1ezI1OTAzfVx1NDc3Y1x1ezI4OTQ4fVx1ezI1YWFlfVx1ezI1Yjg5fVx1ezI1YzA2fVx1ezIxZDkwfVx1NTdhMVx1NzE1MVx1NmZiNlx1ezI2MTAyfVx1ezI3YzEy''@;'; put 'put ''fVx1OTA1Nlx1ezI2MWIyfVx1ezI0ZjlhfVx1OGI2Mlx1ezI2NDAyfVx1ezI2NDRhfSJdLFsiOWM0MCIsIlx1NWQ1Ylx1ezI2YmY3fVx1OGYzNlx1ezI2NDg0fVx1ezIxOTFjfVx1OGFlYVx1ezI0OWY2fVx1ezI2NDg4fVx1ezIzZmVmfVx1ezI2NTEyfVx1NGJjMFx1ezI2NWJmfVx1ezI2NmI1''@;'; put 'put ''fVx1ezIyNzFifVx1OTQ2NVx1ezI1N2UxfVx1NjE5NVx1NWEyN1x1ezJmOGNkfVx1NGZiYlx1NTZiOVx1ezI0NTIxfVx1ezI2NmZjfVx1NGU2YVx1ezI0OTM0fVx1OTY1Nlx1NmQ4Zlx1ezI2Y2JkfVx1MzYxOFx1ODk3N1x1ezI2Nzk5fVx1ezI2ODZlfVx1ezI2NDExfVx1ezI2ODVlfVx1NzFk''@;'; put 'put ''Zlx1ezI2OGM3fVx1N2I0Mlx1ezI5MGMwfVx1ezIwYTExfVx1ezI2OTI2fVx1OTEwNFx1ezI2OTM5fVx1N2E0NVx1OWRmMFx1ezI2OWZhfVx1OWEyNlx1ezI2YTJkfVx1MzY1Zlx1ezI2NDY5fVx1ezIwMDIxfVx1Nzk4M1x1ezI2YTM0fVx1ezI2YjVifVx1NWQyY1x1ezIzNTE5fVx1ODNjZlx1''@;'; put 'put ''ezI2YjlkfVx1NDZkMFx1ezI2Y2E0fVx1NzUzYlx1ODg2NVx1ezI2ZGFlfVx1NThiNiJdLFsiOWNhMSIsIlx1MzcxY1x1ezIyNThkfVx1ezI3MDRifVx1ezI3MWNkfVx1M2M1NFx1ezI3MjgwfVx1ezI3Mjg1fVx1OTI4MVx1ezIyMTdhfVx1ezI3MjhifVx1OTMzMFx1ezI3MmU2fVx1ezI0OWQw''@;'; put 'put ''fVx1NmMzOVx1OTQ5Zlx1ezI3NDUwfVx1ezIwZWY4fVx1ODgyN1x1ODhmNVx1ezIyOTI2fVx1ezI4NDczfVx1ezIxN2IxfVx1NmViOFx1ezI0YTJhfVx1ezIxODIwfVx1MzlhNFx1MzZiOVx1NWMxMFx1NzllM1x1NDUzZlx1NjZiNlx1ezI5Y2FkfVx1ezI5OGE0fVx1ODk0M1x1ezI3N2NjfVx1''@;'; put 'put ''ezI3ODU4fVx1NTZkNlx1NDBkZlx1ezIxNjBhfVx1MzlhMVx1ezIzNzJmfVx1ezI4MGU4fVx1ezIxM2M1fVx1NzFhZFx1ODM2Nlx1ezI3OWRkfVx1ezI5MWE4fVx1NWE2N1x1NGNiN1x1ezI3MGFmfVx1ezI4OWFifVx1ezI3OWZkfVx1ezI3YTBhfVx1ezI3YjBifVx1ezI3ZDY2fVx1ezI0MTdh''@;'; put 'put ''fVx1N2I0M1x1Nzk3ZVx1ezI4MDA5fVx1NmZiNVx1ezJhMmRmfVx1NmEwM1x1ezI4MzE4fVx1NTNhMlx1ezI2ZTA3fVx1OTNiZlx1NjgzNlx1OTc1ZFx1ezI4MTZmfVx1ezI4MDIzfVx1ezI2OWI1fVx1ezIxM2VkfVx1ezIzMjJmfVx1ezI4MDQ4fVx1NWQ4NVx1ezI4YzMwfVx1ezI4MDgzfVx1''@;'; put 'put ''NTcxNVx1OTgyM1x1ezI4OTQ5fVx1NWRhYlx1ezI0OTg4fVx1NjViZVx1NjlkNVx1NTNkMlx1ezI0YWE1fVx1ezIzZjgxfVx1M2MxMVx1NjczNlx1ezI4MDkwfVx1ezI4MGY0fVx1ezI4MTJlfVx1ezIxZmExfVx1ezI4MTRmfSJdLFsiOWQ0MCIsIlx1ezI4MTg5fVx1ezI4MWFmfVx1ezI4MjFh''@;'; put 'put ''fVx1ezI4MzA2fVx1ezI4MzJmfVx1ezI4MzhhfVx1MzVjYVx1ezI4NDY4fVx1ezI4NmFhfVx1NDhmYVx1NjNlNlx1ezI4OTU2fVx1NzgwOFx1OTI1NVx1ezI4OWI4fVx1NDNmMlx1ezI4OWU3fVx1NDNkZlx1ezI4OWU4fVx1ezI4YjQ2fVx1ezI4YmQ0fVx1NTlmOFx1ezI4YzA5fVx1OGYwYlx1''@;'; put 'put ''ezI4ZmM1fVx1ezI5MGVjfVx1N2I1MVx1ezI5MTEwfVx1ezI5MTNjfVx1M2RmN1x1ezI5MTVlfVx1ezI0YWNhfVx1OGZkMFx1NzI4Zlx1NTY4Ylx1ezI5NGU3fVx1ezI5NWU5fVx1ezI5NWIwfVx1ezI5NWI4fVx1ezI5NzMyfVx1ezI5OGQxfVx1ezI5OTQ5fVx1ezI5OTZhfVx1ezI5OWMzfVx1''@;'; put 'put ''ezI5YTI4fVx1ezI5YjBlfVx1ezI5ZDVhfVx1ezI5ZDlifVx1N2U5Zlx1ezI5ZWY4fVx1ezI5ZjIzfVx1NGNhNFx1OTU0N1x1ezJhMjkzfVx1NzFhMlx1ezJhMmZmfVx1NGQ5MVx1OTAxMlx1ezJhNWNifVx1NGQ5Y1x1ezIwYzljfVx1OGZiZVx1NTVjMSJdLFsiOWRhMSIsIlx1OGZiYVx1ezIy''@;'; put 'put ''NGIwfVx1OGZiOVx1ezI0YTkzfVx1NDUwOVx1N2U3Zlx1NmY1Nlx1NmFiMVx1NGVlYVx1MzRlNFx1ezI4YjJjfVx1ezI3ODlkfVx1MzczYVx1OGU4MFx1ezIxN2Y1fVx1ezI4MDI0fVx1ezI4YjZjfVx1ezI4Yjk5fVx1ezI3YTNlfVx1ezI2NmFmfVx1M2RlYlx1ezI3NjU1fVx1ezIzY2I3fVx1''@;'; put 'put ''ezI1NjM1fVx1ezI1OTU2fVx1NGU5YVx1ezI1ZTgxfVx1ezI2MjU4fVx1NTZiZlx1ezIwZTZkfVx1OGUwZVx1NWI2ZFx1ezIzZTg4fVx1ezI0YzllfVx1NjNkZVx1NjJkMFx1ezIxN2Y2fVx1ezIxODdifVx1NjUzMFx1NTYyZFx1ezI1YzRhfVx1NTQxYVx1ezI1MzExfVx1M2RjNlx1ezI5ZDk4''@;'; put 'put ''fVx1NGM3ZFx1NTYyMlx1NTYxZVx1N2Y0OVx1ezI1ZWQ4fVx1NTk3NVx1ezIzZDQwfVx1ODc3MFx1NGUxY1x1ezIwZmVhfVx1ezIwZDQ5fVx1ezIzNmJhfVx1ODExN1x1OWQ1ZVx1OGQxOFx1NzYzYlx1OWM0NVx1NzY0ZVx1NzdiOVx1OTM0NVx1NTQzMlx1ODE0OFx1ODJmN1x1NTYyNVx1ODEz''@;'; put 'put ''Mlx1ODQxOFx1ODBiZFx1NTVlYVx1Nzk2Mlx1NTY0M1x1NTQxNlx1ezIwZTlkfVx1MzVjZVx1NTYwNVx1NTVmMVx1NjZmMVx1ezI4MmUyfVx1MzYyZFx1NzUzNFx1NTVmMFx1NTViYVx1NTQ5N1x1NTU3Mlx1ezIwYzQxfVx1ezIwYzk2fVx1NWVkMFx1ezI1MTQ4fVx1ezIwZTc2fVx1ezIyYzYy''@;'; put 'put ''fSJdLFsiOWU0MCIsIlx1ezIwZWEyfVx1OWVhYlx1N2Q1YVx1NTVkZVx1ezIxMDc1fVx1NjI5ZFx1OTc2ZFx1NTQ5NFx1OGNjZFx1NzFmNlx1OTE3Nlx1NjNmY1x1NjNiOVx1NjNmZVx1NTU2OVx1ezIyYjQzfVx1OWM3Mlx1ezIyZWIzfVx1NTE5YVx1MzRkZlx1ezIwZGE3fVx1NTFhN1x1NTQ0''@;'; put 'put ''ZFx1NTUxZVx1NTUxM1x1NzY2Nlx1OGUyZFx1ezI2ODhhfVx1NzViMVx1ODBiNlx1ODgwNFx1ODc4Nlx1ODhjN1x1ODFiNlx1ODQxY1x1ezIxMGMxfVx1NDRlY1x1NzMwNFx1ezI0NzA2fVx1NWI5MFx1ODMwYlx1ezI2ODkzfVx1NTY3Ylx1ezIyNmY0fVx1ezI3ZDJmfVx1ezI0MWEzfVx1ezI3''@;'; put 'put ''ZDczfVx1ezI2ZWQwfVx1ezI3MmI2fVx1OTE3MFx1ezIxMWQ5fVx1OTIwOFx1ezIzY2ZjfVx1ezJhNmE5fVx1ezIwZWFjfVx1ezIwZWY5fVx1NzI2Nlx1ezIxY2EyfVx1NDc0ZVx1ezI0ZmMyfVx1ezI3ZmY5fVx1ezIwZmVifVx1NDBmYSJdLFsiOWVhMSIsIlx1OWM1ZFx1NjUxZlx1ezIyZGEw''@;'; put 'put ''fVx1NDhmM1x1ezI0N2UwfVx1ezI5ZDdjfVx1ezIwZmVjfVx1ezIwZTBhfVx1NjA2Mlx1ezI3NWEzfVx1ezIwZmVkfSJdLFsiOWVhZCIsIlx1ezI2MDQ4fVx1ezIxMTg3fVx1NzFhM1x1N2U4ZVx1OWQ1MFx1NGUxYVx1NGUwNFx1MzU3N1x1NWIwZFx1NmNiMlx1NTM2N1x1MzZhY1x1MzlkY1x1''@;'; put 'put ''NTM3ZFx1MzZhNVx1ezI0NjE4fVx1NTg5YVx1ezI0YjZlfVx1ODIyZFx1NTQ0Ylx1NTdhYVx1ezI1YTk1fVx1ezIwOTc5fSJdLFsiOWVjNSIsIlx1M2E1Mlx1ezIyNDY1fVx1NzM3NFx1ezI5ZWFjfVx1NGQwOVx1OWJlZFx1ezIzY2ZlfVx1ezI5ZjMwfVx1NGM1Ylx1ezI0ZmE5fVx1ezI5NTll''@;'; put 'put ''fVx1ezI5ZmRlfVx1ODQ1Y1x1ezIzZGI2fVx1ezI3MmIyfVx1ezI2N2IzfVx1ezIzNzIwfVx1NjMyZVx1N2QyNVx1ezIzZWY3fVx1ezIzZTJjfVx1M2EyYVx1OTAwOFx1NTJjY1x1M2U3NFx1MzY3YVx1NDVlOVx1ezIwNDhlfVx1NzY0MFx1NWFmMFx1ezIwZWI2fVx1Nzg3YVx1ezI3ZjJlfVx1''@;'; put 'put ''NThhN1x1NDBiZlx1NTY3Y1x1OWI4Ylx1NWQ3NFx1NzY1NFx1ezJhNDM0fVx1OWU4NVx1NGNlMVx1NzVmOVx1MzdmYlx1NjExOVx1ezIzMGRhfVx1ezI0M2YyfSJdLFsiOWVmNSIsIlx1NTY1ZFx1ezIxMmE5fVx1NTdhN1x1ezI0OTYzfVx1ezI5ZTA2fVx1NTIzNFx1ezI3MGFlfVx1MzVhZFx1''@;'; put 'put ''NmM0YVx1OWQ3YyJdLFsiOWY0MCIsIlx1N2M1Nlx1OWIzOVx1NTdkZVx1ezIxNzZjfVx1NWM1M1x1NjRkM1x1ezI5NGQwfVx1ezI2MzM1fVx1ezI3MTY0fVx1ODZhZFx1ezIwZDI4fVx1ezI2ZDIyfVx1ezI0YWUyfVx1ezIwZDcxfSJdLFsiOWY0ZiIsIlx1NTFmZVx1ezIxZjBmfVx1NWQ4ZVx1''@;'; put 'put ''OTcwM1x1ezIxZGQxfVx1OWU4MVx1OTA0Y1x1N2IxZlx1OWIwMlx1NWNkMVx1N2JhM1x1NjI2OFx1NjMzNVx1OWFmZlx1N2JjZlx1OWIyYVx1N2M3ZVx1OWIyZVx1N2M0Mlx1N2M4Nlx1OWMxNVx1N2JmY1x1OWIwOVx1OWYxN1x1OWMxYlx1ezI0OTNlfVx1OWY1YVx1NTU3M1x1NWJjM1x1NGZm''@;'; put 'put ''ZFx1OWU5OFx1NGZmMlx1NTI2MFx1M2UwNlx1NTJkMVx1NTc2N1x1NTA1Nlx1NTliN1x1NWUxMlx1OTdjOFx1OWRhYlx1OGY1Y1x1NTQ2OVx1OTdiNFx1OTk0MFx1OTdiYVx1NTMyY1x1NjEzMCJdLFsiOWZhMSIsIlx1NjkyY1x1NTNkYVx1OWMwYVx1OWQwMlx1NGMzYlx1OTY0MVx1Njk4MFx1''@;'; put 'put ''NTBhNlx1NzU0Nlx1ezIxNzZkfVx1OTlkYVx1NTI3MyJdLFsiOWZhZSIsIlx1OTE1OVx1OTY4MVx1OTE1YyJdLFsiOWZiMiIsIlx1OTE1MVx1ezI4ZTk3fVx1NjM3Zlx1ezI2ZDIzfVx1NmFjYVx1NTYxMVx1OTE4ZVx1NzU3YVx1NjI4NVx1ezIwM2ZjfVx1NzM0Zlx1N2M3MFx1ezI1YzIxfVx1''@;'; put 'put ''ezIzY2ZkfSJdLFsiOWZjMSIsIlx1ezI0OTE5fVx1NzZkNlx1OWI5ZFx1NGUyYVx1ezIwY2Q0fVx1ODNiZVx1ODg0MiJdLFsiOWZjOSIsIlx1NWM0YVx1NjljMFx1NTBlZFx1NTc3YVx1NTIxZlx1NWRmNVx1NGVjZVx1NmMzMVx1ezIwMWYyfVx1NGYzOVx1NTQ5Y1x1NTRkYVx1NTI5YVx1OGQ4''@;'; put 'put ''Mlx1MzVmZVx1NWYwY1x1MzVmMyJdLFsiOWZkYiIsIlx1NmI1Mlx1OTE3Y1x1OWZhNVx1OWI5N1x1OTgyZVx1OThiNFx1OWFiYVx1OWVhOFx1OWU4NFx1NzE3YVx1N2IxNCJdLFsiOWZlNyIsIlx1NmJmYVx1ODgxOFx1N2Y3OCJdLFsiOWZlYiIsIlx1NTYyMFx1ezJhNjRhfVx1OGU3N1x1OWY1''@;'; put 'put ''MyJdLFsiOWZmMCIsIlx1OGRkNFx1OGU0Zlx1OWUxY1x1OGUwMVx1NjI4Mlx1ezI4MzdkfVx1OGUyOFx1OGU3NVx1N2FkM1x1ezI0YTc3fVx1N2EzZVx1NzhkOFx1NmNlYVx1OGE2N1x1NzYwNyJdLFsiYTA0MCIsIlx1ezI4YTVhfVx1OWYyNlx1NmNjZVx1ODdkNlx1NzVjM1x1ezJhMmIyfVx1''@;'; put 'put ''Nzg1M1x1ezJmODQwfVx1OGQwY1x1NzJlMlx1NzM3MVx1OGIyZFx1NzMwMlx1NzRmMVx1OGNlYlx1ezI0YWJifVx1ODYyZlx1NWZiYVx1ODhhMFx1NDRiNyJdLFsiYTA1NSIsIlx1ezIxODNifVx1ezI2ZTA1fSJdLFsiYTA1OCIsIlx1OGE3ZVx1ezIyNTFifSJdLFsiYTA1YiIsIlx1NjBmZFx1''@;'; put 'put ''NzY2N1x1OWFkN1x1OWQ0NFx1OTM2ZVx1OWI4Zlx1ODdmNSJdLFsiYTA2MyIsIlx1ODgwZlx1OGNmN1x1NzMyY1x1OTcyMVx1OWJiMFx1MzVkNlx1NzJiMlx1NGMwN1x1N2M1MVx1OTk0YVx1ezI2MTU5fVx1NjE1OVx1NGMwNFx1OWU5Nlx1NjE3ZCJdLFsiYTA3MyIsIlx1NTc1Zlx1NjE2Zlx1''@;'; put 'put ''NjJhNlx1NjIzOVx1NjJjZVx1M2E1Y1x1NjFlMlx1NTNhYVx1ezIzM2Y1fVx1NjM2NFx1NjgwMlx1MzVkMiJdLFsiYTBhMSIsIlx1NWQ1N1x1ezI4YmMyfVx1OGZkYVx1ezI4ZTM5fSJdLFsiYTBhNiIsIlx1NTBkOVx1ezIxZDQ2fVx1NzkwNlx1NTMzMlx1OTYzOFx1ezIwZjNifVx1NDA2NSJd''@;'; put 'put ''LFsiYTBhZSIsIlx1NzdmZSJdLFsiYTBiMCIsIlx1N2NjMlx1ezI1ZjFhfVx1N2NkYVx1N2EyZFx1ODA2Nlx1ODA2M1x1N2Q0ZFx1NzUwNVx1NzRmMlx1ODk5NFx1ODIxYVx1NjcwY1x1ODA2Mlx1ezI3NDg2fVx1ODA1Ylx1NzRmMFx1ODEwM1x1NzcyNFx1ODk4OVx1ezI2N2NjfVx1NzU1M1x1''@;'; put 'put ''ezI2ZWQxfVx1ODdhOVx1ODdjZVx1ODFjOFx1ODc4Y1x1OGE0OVx1OGNhZFx1OGI0M1x1NzcyYlx1NzRmOFx1ODRkYVx1MzYzNVx1NjliMlx1OGRhNiJdLFsiYTBkNCIsIlx1ODlhOVx1NzQ2OFx1NmRiOVx1ODdjMVx1ezI0MDExfVx1NzRlN1x1M2RkYlx1NzE3Nlx1NjBhNFx1NjE5Y1x1M2Nk''@;'; put 'put ''MVx1NzE2Mlx1NjA3NyJdLFsiYTBlMiIsIlx1N2Y3MVx1ezI4YjJkfVx1NzI1MFx1NjBlOVx1NGI3ZVx1NTIyMFx1M2MxOFx1ezIzY2M3fVx1ezI1ZWQ3fVx1ezI3NjU2fVx1ezI1NTMxfVx1ezIxOTQ0fVx1ezIxMmZlfVx1ezI5OTAzfVx1ezI2ZGRjfVx1ezI3MGFkfVx1NWNjMVx1ezI2MWFk''@;'; put 'put ''fVx1ezI4YTBmfVx1ezIzNjc3fVx1ezIwMGVlfVx1ezI2ODQ2fVx1ezI0ZjBlfVx1NDU2Mlx1NWIxZlx1ezI2MzRjfVx1OWY1MFx1OWVhNlx1ezI2MjZifSJdLFsiYTNjMCIsIlx1MjQwMCIsMzEsIlx1MjQyMSJdLFsiYzZhMSIsIlx1MjQ2MCIsOSwiXHUyNDc0Iiw5LCJcdTIxNzAiLDksIlx1''@;'; put 'put ''NGUzNlx1NGUzZlx1NGU4NVx1NGVhMFx1NTE4Mlx1NTE5Nlx1NTFhYlx1NTJmOVx1NTMzOFx1NTM2OVx1NTNiNlx1NTkwYVx1NWI4MFx1NWRkYlx1MmYzM1x1NWU3Zlx1NWVmNFx1NWY1MFx1NWY2MVx1NjUzNFx1NjVlMFx1NzU5Mlx1NzY3Nlx1OGZiNVx1OTZiNlx4YThcdTAyYzZcdTMwZmRc''@;'; put 'put ''dTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRlZGRcdTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdWZmM2JcdWZmM2RcdTI3M2RcdTMwNDEiLDIzXSxbImM3NDAiLCJcdTMwNTkiLDU4LCJcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTQiXSxbImM3YTEiLCJcdTMwYTUiLDgxLCJcdTA0MTAiLDUsIlx1''@;'; put 'put ''MDQwMVx1MDQxNiIsNF0sWyJjODQwIiwiXHUwNDFiIiwyNiwiXHUwNDUxXHUwNDM2IiwyNSwiXHUyMWU3XHUyMWI4XHUyMWI5XHUzMWNmXHV7MjAwY2N9XHU0ZTVhXHV7MjAwOGF9XHU1MjAyXHU0NDkxIl0sWyJjOGExIiwiXHU5ZmIwXHU1MTg4XHU5ZmIxXHV7Mjc2MDd9Il0sWyJjOGNkIiwi''@;'; put 'put ''XHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyXHUzMjMxXHUyMTE2XHUyMTIxXHUzMDliXHUzMDljXHUyZTgwXHUyZTg0XHUyZTg2XHUyZTg3XHUyZTg4XHUyZThhXHUyZThjXHUyZThkXHUyZTk1XHUyZTljXHUyZTlkXHUyZWE1XHUyZWE3XHUyZWFhXHUyZWFjXHUyZWFlXHUyZWI2XHUyZWJjXHUy''@;'; put 'put ''ZWJlXHUyZWM2XHUyZWNhXHUyZWNjXHUyZWNkXHUyZWNmXHUyZWQ2XHUyZWQ3XHUyZWRlXHUyZWUzIl0sWyJjOGY1IiwiXHUwMjgzXHUwMjUwXHUwMjViXHUwMjU0XHUwMjc1XHUwMTUzXHhmOFx1MDE0Ylx1MDI4YVx1MDI2YSJdLFsiZjlmZSIsIlx1ZmZlZCJdLFsiZmE0MCIsIlx1ezIwNTQ3''@;'; put 'put ''fVx1OTJkYlx1ezIwNWRmfVx1ezIzZmM1fVx1ODU0Y1x1NDJiNVx1NzNlZlx1NTFiNVx1MzY0OVx1ezI0OTQyfVx1ezI4OWU0fVx1OTM0NFx1ezIxOWRifVx1ODJlZVx1ezIzY2M4fVx1NzgzY1x1Njc0NFx1NjJkZlx1ezI0OTMzfVx1ezI4OWFhfVx1ezIwMmEwfVx1ezI2YmIzfVx1ezIxMzA1''@;'; put 'put ''fVx1NGZhYlx1ezIyNGVkfVx1NTAwOFx1ezI2ZDI5fVx1ezI3YTg0fVx1ezIzNjAwfVx1ezI0YWIxfVx1ezIyNTEzfVx1NTAyOVx1ezIwMzdlfVx1NWZhNFx1ezIwMzgwfVx1ezIwMzQ3fVx1NmVkYlx1ezIwNDFmfVx1NTA3ZFx1NTEwMVx1MzQ3YVx1NTEwZVx1OTg2Y1x1Mzc0M1x1ODQxNlx1''@;'; put 'put ''ezI0OWE0fVx1ezIwNDg3fVx1NTE2MFx1ezIzM2I0fVx1NTE2YVx1ezIwYmZmfVx1ezIyMGZjfVx1ezIwMmU1fVx1ezIyNTMwfVx1ezIwNThlfVx1ezIzMjMzfVx1ezIxOTgzfVx1NWI4Mlx1ODc3ZFx1ezIwNWIzfVx1ezIzYzk5fVx1NTFiMlx1NTFiOCJdLFsiZmFhMSIsIlx1OWQzNFx1NTFj''@;'; put 'put ''OVx1NTFjZlx1NTFkMVx1M2NkY1x1NTFkM1x1ezI0YWE2fVx1NTFiM1x1NTFlMlx1NTM0Mlx1NTFlZFx1ODNjZFx1NjkzZVx1ezIzNzJkfVx1NWY3Ylx1NTIwYlx1NTIyNlx1NTIzY1x1NTJiNVx1NTI1N1x1NTI5NFx1NTJiOVx1NTJjNVx1N2MxNVx1ODU0Mlx1NTJlMFx1ODYwZFx1ezI2YjEz''@;'; put 'put ''fVx1NTMwNVx1ezI4YWRlfVx1NTU0OVx1NmVkOVx1ezIzZjgwfVx1ezIwOTU0fVx1ezIzZmVjfVx1NTMzM1x1NTM0NFx1ezIwYmUyfVx1NmNjYlx1ezIxNzI2fVx1NjgxYlx1NzNkNVx1NjA0YVx1M2VhYVx1MzhjY1x1ezIxNmU4fVx1NzFkZFx1NDRhMlx1NTM2ZFx1NTM3NFx1ezI4NmFifVx1''@;'; put 'put ''NTM3ZVx1NTM3Zlx1ezIxNTk2fVx1ezIxNjEzfVx1NzdlNlx1NTM5M1x1ezI4YTlifVx1NTNhMFx1NTNhYlx1NTNhZVx1NzNhN1x1ezI1NzcyfVx1M2Y1OVx1NzM5Y1x1NTNjMVx1NTNjNVx1NmM0OVx1NGU0OVx1NTdmZVx1NTNkOVx1M2FhYlx1ezIwYjhmfVx1NTNlMFx1ezIzZmVifVx1ezIy''@;'; put 'put ''ZGEzfVx1NTNmNlx1ezIwYzc3fVx1NTQxM1x1NzA3OVx1NTUyYlx1NjY1N1x1NmQ1Ylx1NTQ2ZFx1ezI2YjUzfVx1ezIwZDc0fVx1NTU1ZFx1NTQ4Zlx1NTRhNFx1NDdhNlx1ezIxNzBkfVx1ezIwZWRkfVx1M2RiNFx1ezIwZDRkfSJdLFsiZmI0MCIsIlx1ezI4OWJjfVx1ezIyNjk4fVx1NTU0''@;'; put 'put ''N1x1NGNlZFx1NTQyZlx1NzQxN1x1NTU4Nlx1NTVhOVx1NTYwNVx1ezIxOGQ3fVx1ezI0MDNhfVx1NDU1Mlx1ezI0NDM1fVx1NjZiM1x1ezIxMGI0fVx1NTYzN1x1NjZjZFx1ezIzMjhhfVx1NjZhNFx1NjZhZFx1NTY0ZFx1NTY0Zlx1NzhmMVx1NTZmMVx1OTc4N1x1NTNmZVx1NTcwMFx1NTZl''@;'; put 'put ''Zlx1NTZlZFx1ezI4YjY2fVx1MzYyM1x1ezIxMjRmfVx1NTc0Nlx1ezI0MWE1fVx1NmM2ZVx1NzA4Ylx1NTc0Mlx1MzZiMVx1ezI2YzdlfVx1NTdlNlx1ezIxNDE2fVx1NTgwM1x1ezIxNDU0fVx1ezI0MzYzfVx1NTgyNlx1ezI0YmY1fVx1NTg1Y1x1NThhYVx1MzU2MVx1NThlMFx1NThkY1x1''@;'; put 'put ''ezIxMjNjfVx1NThmYlx1NWJmZlx1NTc0M1x1ezJhMTUwfVx1ezI0Mjc4fVx1OTNkM1x1MzVhMVx1NTkxZlx1NjhhNlx1MzZjM1x1NmU1OSJdLFsiZmJhMSIsIlx1ezIxNjNlfVx1NWEyNFx1NTU1M1x1ezIxNjkyfVx1ODUwNVx1NTljOVx1ezIwZDRlfVx1ezI2YzgxfVx1ezI2ZDJhfVx1ezIx''@;'; put 'put ''N2RjfVx1NTlkOVx1ezIxN2ZifVx1ezIxN2IyfVx1ezI2ZGE2fVx1NmQ3MVx1ezIxODI4fVx1ezIxNmQ1fVx1NTlmOVx1ezI2ZTQ1fVx1NWFhYlx1NWE2M1x1MzZlNlx1ezI0OWE5fVx1NWE3N1x1MzcwOFx1NWE5Nlx1NzQ2NVx1NWFkM1x1ezI2ZmExfVx1ezIyNTU0fVx1M2Q4NVx1ezIxOTEx''@;'; put 'put ''fVx1MzczMlx1ezIxNmI4fVx1NWU4M1x1NTJkMFx1NWI3Nlx1NjU4OFx1NWI3Y1x1ezI3YTBlfVx1NDAwNFx1NDg1ZFx1ezIwMjA0fVx1NWJkNVx1NjE2MFx1ezIxYTM0fVx1ezI1OWNjfVx1ezIwNWE1fVx1NWJmM1x1NWI5ZFx1NGQxMFx1NWMwNVx1ezIxYjQ0fVx1NWMxM1x1NzNjZVx1NWMx''@;'; put 'put ''NFx1ezIxY2E1fVx1ezI2YjI4fVx1NWM0OVx1NDhkZFx1NWM4NVx1NWNlOVx1NWNlZlx1NWQ4Ylx1ezIxZGY5fVx1ezIxZTM3fVx1NWQxMFx1NWQxOFx1NWQ0Nlx1ezIxZWE0fVx1NWNiYVx1NWRkN1x1ODJmY1x1MzgyZFx1ezI0OTAxfVx1ezIyMDQ5fVx1ezIyMTczfVx1ODI4N1x1MzgzNlx1''@;'; put 'put ''M2JjMlx1NWUyZVx1NmE4YVx1NWU3NVx1NWU3YVx1ezI0NGJjfVx1ezIwY2QzfVx1NTNhNlx1NGViN1x1NWVkMFx1NTNhOFx1ezIxNzcxfVx1NWUwOVx1NWVmNFx1ezI4NDgyfSJdLFsiZmM0MCIsIlx1NWVmOVx1NWVmYlx1MzhhMFx1NWVmY1x1NjgzZVx1OTQxYlx1NWYwZFx1ezIwMWMxfVx1''@;'; put 'put ''ezJmODk0fVx1M2FkZVx1NDhhZVx1ezIxMzNhfVx1NWYzYVx1ezI2ODg4fVx1ezIyM2QwfVx1NWY1OFx1ezIyNDcxfVx1NWY2M1x1OTdiZFx1ezI2ZTZlfVx1NWY3Mlx1OTM0MFx1ezI4YTM2fVx1NWZhN1x1NWRiNlx1M2Q1Zlx1ezI1MjUwfVx1ezIxZjZhfVx1ezI3MGY4fVx1ezIyNjY4fVx1''@;'; put 'put ''OTFkNlx1ezIwMjllfVx1ezI4YTI5fVx1NjAzMVx1NjY4NVx1ezIxODc3fVx1Mzk2M1x1M2RjN1x1MzYzOVx1NTc5MFx1ezIyN2I0fVx1Nzk3MVx1M2U0MFx1NjA5ZVx1NjBhNFx1NjBiM1x1ezI0OTgyfVx1ezI0OThmfVx1ezI3YTUzfVx1NzRhNFx1NTBlMVx1NWFhMFx1NjE2NFx1ODQyNFx1''@;'; put 'put ''NjE0Mlx1ezJmOGE2fVx1ezI2ZWQyfVx1NjE4MVx1NTFmNFx1ezIwNjU2fVx1NjE4N1x1NWJhYVx1ezIzZmI3fSJdLFsiZmNhMSIsIlx1ezIyODVmfVx1NjFkM1x1ezI4YjlkfVx1ezI5OTVkfVx1NjFkMFx1MzkzMlx1ezIyOTgwfVx1ezIyOGMxfVx1NjAyM1x1NjE1Y1x1NjUxZVx1NjM4Ylx1''@;'; put 'put ''ezIwMTE4fVx1NjJjNVx1ezIxNzcwfVx1NjJkNVx1ezIyZTBkfVx1NjM2Y1x1ezI0OWRmfVx1M2ExN1x1NjQzOFx1NjNmOFx1ezIxMzhlfVx1ezIxN2ZjfVx1NjQ5MFx1NmY4YVx1ezIyZTM2fVx1OTgxNFx1ezI0MDhjfVx1ezI1NzFkfVx1NjRlMVx1NjRlNVx1OTQ3Ylx1M2E2Nlx1NjQzYVx1''@;'; put 'put ''M2E1N1x1NjU0ZFx1NmYxNlx1ezI0YTI4fVx1ezI0YTIzfVx1NjU4NVx1NjU2ZFx1NjU1Zlx1ezIzMDdlfVx1NjViNVx1ezI0OTQwfVx1NGIzN1x1NjVkMVx1NDBkOFx1ezIxODI5fVx1NjVlMFx1NjVlM1x1NWZkZlx1ezIzNDAwfVx1NjYxOFx1ezIzMWY3fVx1ezIzMWY4fVx1NjY0NFx1ezIz''@;'; put 'put ''MWE0fVx1ezIzMWE1fVx1NjY0Ylx1ezIwZTc1fVx1NjY2N1x1ezI1MWU2fVx1NjY3M1x1NjY3NFx1ezIxZTNkfVx1ezIzMjMxfVx1ezI4NWY0fVx1ezIzMWM4fVx1ezI1MzEzfVx1NzdjNVx1ezIyOGY3fVx1OTlhNFx1NjcwMlx1ezI0MzljfVx1ezI0YTIxfVx1M2IyYlx1NjlmYVx1ezIzN2My''@;'; put 'put ''fVx1Njc1ZVx1Njc2N1x1Njc2Mlx1ezI0MWNkfVx1ezI5MGVkfVx1NjdkN1x1NDRlOVx1NjgyMlx1NmU1MFx1OTIzY1x1NjgwMVx1ezIzM2U2fVx1ezI2ZGEwfVx1Njg1ZCJdLFsiZmQ0MCIsIlx1ezIzNDZmfVx1NjllMVx1NmEwYlx1ezI4YWRmfVx1Njk3M1x1NjhjM1x1ezIzNWNkfVx1Njkw''@;'; put 'put ''MVx1NjkwMFx1M2QzMlx1M2EwMVx1ezIzNjNjfVx1M2I4MFx1NjdhY1x1Njk2MVx1ezI4YTRhfVx1NDJmY1x1NjkzNlx1Njk5OFx1M2JhMVx1ezIwM2M5fVx1ODM2M1x1NTA5MFx1NjlmOVx1ezIzNjU5fVx1ezIyMTJhfVx1NmE0NVx1ezIzNzAzfVx1NmE5ZFx1M2JmM1x1NjdiMVx1NmFjOFx1''@;'; put 'put ''ezI5MTljfVx1M2MwZFx1NmIxZFx1ezIwOTIzfVx1NjBkZVx1NmIzNVx1NmI3NFx1ezIyN2NkfVx1NmViNVx1ezIzYWRifVx1ezIwM2I1fVx1ezIxOTU4fVx1Mzc0MFx1NTQyMVx1ezIzYjVhfVx1NmJlMVx1ezIzZWZjfVx1NmJkY1x1NmMzN1x1ezIyNDhifVx1ezI0OGYxfVx1ezI2YjUxfVx1''@;'; put 'put ''NmM1YVx1ODIyNlx1NmM3OVx1ezIzZGJjfVx1NDRjNVx1ezIzZGJkfVx1ezI0MWE0fVx1ezI0OTBjfVx1ezI0OTAwfSJdLFsiZmRhMSIsIlx1ezIzY2M5fVx1MzZlNVx1M2NlYlx1ezIwZDMyfVx1OWI4M1x1ezIzMWY5fVx1ezIyNDkxfVx1N2Y4Zlx1NjgzN1x1ezI2ZDI1fVx1ezI2ZGExfVx1''@;'; put 'put ''ezI2ZGVifVx1NmQ5Nlx1NmQ1Y1x1NmU3Y1x1NmYwNFx1ezI0OTdmfVx1ezI0MDg1fVx1ezI2ZTcyfVx1ODUzM1x1ezI2Zjc0fVx1NTFjN1x1NmM5Y1x1NmUxZFx1ODQyZVx1ezI4YjIxfVx1NmUyZlx1ezIzZTJmfVx1NzQ1M1x1ezIzZjgyfVx1NzljY1x1NmU0Zlx1NWE5MVx1ezIzMDRifVx1''@;'; put 'put ''NmZmOFx1MzcwZFx1NmY5ZFx1ezIzZTMwfVx1NmVmYVx1ezIxNDk3fVx1ezI0MDNkfVx1NDU1NVx1OTNmMFx1NmY0NFx1NmY1Y1x1M2Q0ZVx1NmY3NFx1ezI5MTcwfVx1M2QzYlx1NmY5Zlx1ezI0MTQ0fVx1NmZkM1x1ezI0MDkxfVx1ezI0MTU1fVx1ezI0MDM5fVx1ezIzZmYwfVx1ezIzZmI0''@;'; put 'put ''fVx1ezI0MTNmfVx1NTFkZlx1ezI0MTU2fVx1ezI0MTU3fVx1ezI0MTQwfVx1ezI2MWRkfVx1NzA0Ylx1NzA3ZVx1NzBhN1x1NzA4MVx1NzBjY1x1NzBkNVx1NzBkNlx1NzBkZlx1NDEwNFx1M2RlOFx1NzFiNFx1NzE5Nlx1ezI0Mjc3fVx1NzEyYlx1NzE0NVx1NWE4OFx1NzE0YVx1NzE2ZVx1''@;'; put 'put ''NWM5Y1x1ezI0MzY1fVx1NzE0Zlx1OTM2Mlx1ezI0MmMxfVx1NzEyY1x1ezI0NDVhfVx1ezI0YTI3fVx1ezI0YTIyfVx1NzFiYVx1ezI4YmU4fVx1NzBiZFx1NzIwZSJdLFsiZmU0MCIsIlx1OTQ0Mlx1NzIxNVx1NTkxMVx1OTQ0M1x1NzIyNFx1OTM0MVx1ezI1NjA1fVx1NzIyZVx1NzI0MFx1''@;'; put 'put ''ezI0OTc0fVx1NjhiZFx1NzI1NVx1NzI1N1x1M2U1NVx1ezIzMDQ0fVx1NjgwZFx1NmYzZFx1NzI4Mlx1NzMyYVx1NzMyYlx1ezI0ODIzfVx1ezI4ODJifVx1NDhlZFx1ezI4ODA0fVx1NzMyOFx1NzMyZVx1NzNjZlx1NzNhYVx1ezIwYzNhfVx1ezI2YTJlfVx1NzNjOVx1NzQ0OVx1ezI0MWUy''@;'; put 'put ''fVx1ezIxNmU3fVx1ezI0YTI0fVx1NjYyM1x1MzZjNVx1ezI0OWI3fVx1ezI0OThkfVx1ezI0OWZifVx1NzNmN1x1NzQxNVx1NjkwM1x1ezI0YTI2fVx1NzQzOVx1ezIwNWMzfVx1M2VkN1x1NzQ1Y1x1ezIyOGFkfVx1NzQ2MFx1ezI4ZWIyfVx1NzQ0N1x1NzNlNFx1NzQ3Nlx1ODNiOVx1NzQ2''@;'; put 'put ''Y1x1MzczMFx1NzQ3NFx1OTNmMVx1NmEyY1x1NzQ4Mlx1NDk1M1x1ezI0YThjfSJdLFsiZmVhMSIsIlx1ezI0MTVmfVx1ezI0YTc5fVx1ezI4YjhmfVx1NWI0Nlx1ezI4YzAzfVx1ezIxODllfVx1NzRjOFx1ezIxOTg4fVx1NzUwZVx1NzRlOVx1NzUxZVx1ezI4ZWQ5fVx1ezIxYTRifVx1NWJk''@;'; put 'put ''N1x1ezI4ZWFjfVx1OTM4NVx1NzU0ZFx1NzU0YVx1NzU2N1x1NzU2ZVx1ezI0ZjgyfVx1M2YwNFx1ezI0ZDEzfVx1NzU4ZVx1NzQ1ZFx1NzU5ZVx1NzViNFx1NzYwMlx1NzYyY1x1NzY1MVx1NzY0Zlx1NzY2Zlx1NzY3Nlx1ezI2M2Y1fVx1NzY5MFx1ODFlZlx1MzdmOFx1ezI2OTExfVx1ezI2''@;'; put 'put ''OTBlfVx1NzZhMVx1NzZhNVx1NzZiN1x1NzZjY1x1ezI2ZjlmfVx1ODQ2Mlx1ezI1MDlkfVx1ezI1MTdkfVx1ezIxZTFjfVx1NzcxZVx1NzcyNlx1Nzc0MFx1NjRhZlx1ezI1MjIwfVx1Nzc1OFx1ezIzMmFjfVx1NzdhZlx1ezI4OTY0fVx1ezI4OTY4fVx1ezIxNmMxfVx1NzdmNFx1NzgwOVx1''@;'; put 'put ''ezIxMzc2fVx1ezI0YTEyfVx1NjhjYVx1NzhhZlx1NzhjN1x1NzhkM1x1OTZhNVx1NzkyZVx1ezI1NWUwfVx1NzhkN1x1NzkzNFx1NzhiMVx1ezI3NjBjfVx1OGZiOFx1ODg4NFx1ezI4YjJifVx1ezI2MDgzfVx1ezIyNjFjfVx1Nzk4Nlx1ODkwMFx1NjkwMlx1Nzk4MFx1ezI1ODU3fVx1Nzk5''@;'; put 'put ''ZFx1ezI3YjM5fVx1NzkzY1x1NzlhOVx1NmUyYVx1ezI3MTI2fVx1M2VhOFx1NzljNlx1ezI5MTBkfVx1NzlkNCJdXScpfSw3NDQ4OChmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siMCIsIlxcdTAwMDAiLDEyNywiXHUyMGFjIl0sWyI4MTQwIiwiXHU0ZTAyXHU0''@;'; put 'put ''ZTA0XHU0ZTA1XHU0ZTA2XHU0ZTBmXHU0ZTEyXHU0ZTE3XHU0ZTFmXHU0ZTIwXHU0ZTIxXHU0ZTIzXHU0ZTI2XHU0ZTI5XHU0ZTJlXHU0ZTJmXHU0ZTMxXHU0ZTMzXHU0ZTM1XHU0ZTM3XHU0ZTNjXHU0ZTQwXHU0ZTQxXHU0ZTQyXHU0ZTQ0XHU0ZTQ2XHU0ZTRhXHU0ZTUxXHU0ZTU1XHU0ZTU3''@;'; put 'put ''XHU0ZTVhXHU0ZTViXHU0ZTYyXHU0ZTYzXHU0ZTY0XHU0ZTY1XHU0ZTY3XHU0ZTY4XHU0ZTZhIiw1LCJcdTRlNzJcdTRlNzQiLDksIlx1NGU3ZiIsNiwiXHU0ZTg3XHU0ZThhIl0sWyI4MTgwIiwiXHU0ZTkwXHU0ZTk2XHU0ZTk3XHU0ZTk5XHU0ZTljXHU0ZTlkXHU0ZTllXHU0ZWEzXHU0ZWFh''@;'; put 'put ''XHU0ZWFmXHU0ZWIwXHU0ZWIxXHU0ZWI0XHU0ZWI2XHU0ZWI3XHU0ZWI4XHU0ZWI5XHU0ZWJjXHU0ZWJkXHU0ZWJlXHU0ZWM4XHU0ZWNjXHU0ZWNmXHU0ZWQwXHU0ZWQyXHU0ZWRhXHU0ZWRiXHU0ZWRjXHU0ZWUwXHU0ZWUyXHU0ZWU2XHU0ZWU3XHU0ZWU5XHU0ZWVkXHU0ZWVlXHU0ZWVmXHU0''@;'; put 'put ''ZWYxXHU0ZWY0XHU0ZWY4XHU0ZWY5XHU0ZWZhXHU0ZWZjXHU0ZWZlXHU0ZjAwXHU0ZjAyIiw2LCJcdTRmMGJcdTRmMGNcdTRmMTIiLDQsIlx1NGYxY1x1NGYxZFx1NGYyMVx1NGYyM1x1NGYyOFx1NGYyOVx1NGYyY1x1NGYyZFx1NGYyZVx1NGYzMVx1NGYzM1x1NGYzNVx1NGYzN1x1NGYzOVx1''@;'; put 'put ''NGYzYlx1NGYzZSIsNCwiXHU0ZjQ0XHU0ZjQ1XHU0ZjQ3Iiw1LCJcdTRmNTJcdTRmNTRcdTRmNTZcdTRmNjFcdTRmNjJcdTRmNjZcdTRmNjhcdTRmNmFcdTRmNmJcdTRmNmRcdTRmNmVcdTRmNzFcdTRmNzJcdTRmNzVcdTRmNzdcdTRmNzhcdTRmNzlcdTRmN2FcdTRmN2RcdTRmODBcdTRmODFc''@;'; put 'put ''dTRmODJcdTRmODVcdTRmODZcdTRmODdcdTRmOGFcdTRmOGNcdTRmOGVcdTRmOTBcdTRmOTJcdTRmOTNcdTRmOTVcdTRmOTZcdTRmOThcdTRmOTlcdTRmOWFcdTRmOWNcdTRmOWVcdTRmOWZcdTRmYTFcdTRmYTIiXSxbIjgyNDAiLCJcdTRmYTRcdTRmYWJcdTRmYWRcdTRmYjAiLDQsIlx1NGZi''@;'; put 'put ''NiIsOCwiXHU0ZmMwXHU0ZmMxXHU0ZmMyXHU0ZmM2XHU0ZmM3XHU0ZmM4XHU0ZmM5XHU0ZmNiXHU0ZmNjXHU0ZmNkXHU0ZmQyIiw0LCJcdTRmZDlcdTRmZGJcdTRmZTBcdTRmZTJcdTRmZTRcdTRmZTVcdTRmZTdcdTRmZWJcdTRmZWNcdTRmZjBcdTRmZjJcdTRmZjRcdTRmZjVcdTRmZjZcdTRm''@;'; put 'put ''ZjdcdTRmZjlcdTRmZmJcdTRmZmNcdTRmZmRcdTRmZmYiLDExXSxbIjgyODAiLCJcdTUwMGJcdTUwMGVcdTUwMTBcdTUwMTFcdTUwMTNcdTUwMTVcdTUwMTZcdTUwMTdcdTUwMWJcdTUwMWRcdTUwMWVcdTUwMjBcdTUwMjJcdTUwMjNcdTUwMjRcdTUwMjdcdTUwMmJcdTUwMmYiLDEwLCJcdTUw''@;'; put 'put ''M2JcdTUwM2RcdTUwM2ZcdTUwNDBcdTUwNDFcdTUwNDJcdTUwNDRcdTUwNDVcdTUwNDZcdTUwNDlcdTUwNGFcdTUwNGJcdTUwNGRcdTUwNTAiLDQsIlx1NTA1Nlx1NTA1N1x1NTA1OFx1NTA1OVx1NTA1Ylx1NTA1ZCIsNywiXHU1MDY2Iiw1LCJcdTUwNmQiLDgsIlx1NTA3OFx1NTA3OVx1NTA3''@;'; put 'put ''YVx1NTA3Y1x1NTA3ZFx1NTA4MVx1NTA4Mlx1NTA4M1x1NTA4NFx1NTA4Nlx1NTA4N1x1NTA4OVx1NTA4YVx1NTA4Ylx1NTA4Y1x1NTA4ZSIsMjAsIlx1NTBhNFx1NTBhNlx1NTBhYVx1NTBhYlx1NTBhZCIsNCwiXHU1MGIzIiw2LCJcdTUwYmMiXSxbIjgzNDAiLCJcdTUwYmQiLDE3LCJcdTUw''@;'; put 'put ''ZDAiLDUsIlx1NTBkN1x1NTBkOFx1NTBkOVx1NTBkYiIsMTAsIlx1NTBlOFx1NTBlOVx1NTBlYVx1NTBlYlx1NTBlZlx1NTBmMFx1NTBmMVx1NTBmMlx1NTBmNFx1NTBmNiIsNCwiXHU1MGZjIiw5LCJcdTUxMDgiXSxbIjgzODAiLCJcdTUxMDlcdTUxMGFcdTUxMGMiLDUsIlx1NTExMyIsMTMs''@;'; put 'put ''Ilx1NTEyMiIsMjgsIlx1NTE0Mlx1NTE0N1x1NTE0YVx1NTE0Y1x1NTE0ZVx1NTE0Zlx1NTE1MFx1NTE1Mlx1NTE1M1x1NTE1N1x1NTE1OFx1NTE1OVx1NTE1Ylx1NTE1ZCIsNCwiXHU1MTYzXHU1MTY0XHU1MTY2XHU1MTY3XHU1MTY5XHU1MTZhXHU1MTZmXHU1MTcyXHU1MTdhXHU1MTdlXHU1''@;'; put 'put ''MTdmXHU1MTgzXHU1MTg0XHU1MTg2XHU1MTg3XHU1MThhXHU1MThiXHU1MThlXHU1MThmXHU1MTkwXHU1MTkxXHU1MTkzXHU1MTk0XHU1MTk4XHU1MTlhXHU1MTlkXHU1MTllXHU1MTlmXHU1MWExXHU1MWEzXHU1MWE2Iiw0LCJcdTUxYWRcdTUxYWVcdTUxYjRcdTUxYjhcdTUxYjlcdTUxYmFc''@;'; put 'put ''dTUxYmVcdTUxYmZcdTUxYzFcdTUxYzJcdTUxYzNcdTUxYzVcdTUxYzhcdTUxY2FcdTUxY2RcdTUxY2VcdTUxZDBcdTUxZDIiLDVdLFsiODQ0MCIsIlx1NTFkOFx1NTFkOVx1NTFkYVx1NTFkY1x1NTFkZVx1NTFkZlx1NTFlMlx1NTFlM1x1NTFlNSIsNSwiXHU1MWVjXHU1MWVlXHU1MWYxXHU1''@;'; put 'put ''MWYyXHU1MWY0XHU1MWY3XHU1MWZlXHU1MjA0XHU1MjA1XHU1MjA5XHU1MjBiXHU1MjBjXHU1MjBmXHU1MjEwXHU1MjEzXHU1MjE0XHU1MjE1XHU1MjFjXHU1MjFlXHU1MjFmXHU1MjIxXHU1MjIyXHU1MjIzXHU1MjI1XHU1MjI2XHU1MjI3XHU1MjJhXHU1MjJjXHU1MjJmXHU1MjMxXHU1MjMy''@;'; put 'put ''XHU1MjM0XHU1MjM1XHU1MjNjXHU1MjNlXHU1MjQ0Iiw1LCJcdTUyNGJcdTUyNGVcdTUyNGZcdTUyNTJcdTUyNTNcdTUyNTVcdTUyNTdcdTUyNTgiXSxbIjg0ODAiLCJcdTUyNTlcdTUyNWFcdTUyNWJcdTUyNWRcdTUyNWZcdTUyNjBcdTUyNjJcdTUyNjNcdTUyNjRcdTUyNjZcdTUyNjhcdTUy''@;'; put 'put ''NmJcdTUyNmNcdTUyNmRcdTUyNmVcdTUyNzBcdTUyNzFcdTUyNzMiLDksIlx1NTI3ZVx1NTI4MFx1NTI4MyIsNCwiXHU1Mjg5Iiw2LCJcdTUyOTFcdTUyOTJcdTUyOTQiLDYsIlx1NTI5Y1x1NTJhNFx1NTJhNVx1NTJhNlx1NTJhN1x1NTJhZVx1NTJhZlx1NTJiMFx1NTJiNCIsOSwiXHU1MmMw''@;'; put 'put ''XHU1MmMxXHU1MmMyXHU1MmM0XHU1MmM1XHU1MmM2XHU1MmM4XHU1MmNhXHU1MmNjXHU1MmNkXHU1MmNlXHU1MmNmXHU1MmQxXHU1MmQzXHU1MmQ0XHU1MmQ1XHU1MmQ3XHU1MmQ5Iiw1LCJcdTUyZTBcdTUyZTFcdTUyZTJcdTUyZTNcdTUyZTUiLDEwLCJcdTUyZjEiLDcsIlx1NTJmYlx1NTJm''@;'; put 'put ''Y1x1NTJmZFx1NTMwMVx1NTMwMlx1NTMwM1x1NTMwNFx1NTMwN1x1NTMwOVx1NTMwYVx1NTMwYlx1NTMwY1x1NTMwZSJdLFsiODU0MCIsIlx1NTMxMVx1NTMxMlx1NTMxM1x1NTMxNFx1NTMxOFx1NTMxYlx1NTMxY1x1NTMxZVx1NTMxZlx1NTMyMlx1NTMyNFx1NTMyNVx1NTMyN1x1NTMyOFx1''@;'; put 'put ''NTMyOVx1NTMyYlx1NTMyY1x1NTMyZFx1NTMyZiIsOSwiXHU1MzNjXHU1MzNkXHU1MzQwXHU1MzQyXHU1MzQ0XHU1MzQ2XHU1MzRiXHU1MzRjXHU1MzRkXHU1MzUwXHU1MzU0XHU1MzU4XHU1MzU5XHU1MzViXHU1MzVkXHU1MzY1XHU1MzY4XHU1MzZhXHU1MzZjXHU1MzZkXHU1MzcyXHU1Mzc2''@;'; put 'put ''XHU1Mzc5XHU1MzdiXHU1MzdjXHU1MzdkXHU1MzdlXHU1MzgwXHU1MzgxXHU1MzgzXHU1Mzg3XHU1Mzg4XHU1MzhhXHU1MzhlXHU1MzhmIl0sWyI4NTgwIiwiXHU1MzkwIiw0LCJcdTUzOTZcdTUzOTdcdTUzOTlcdTUzOWJcdTUzOWNcdTUzOWVcdTUzYTBcdTUzYTFcdTUzYTRcdTUzYTdcdTUz''@;'; put 'put ''YWFcdTUzYWJcdTUzYWNcdTUzYWRcdTUzYWYiLDYsIlx1NTNiN1x1NTNiOFx1NTNiOVx1NTNiYVx1NTNiY1x1NTNiZFx1NTNiZVx1NTNjMFx1NTNjMyIsNCwiXHU1M2NlXHU1M2NmXHU1M2QwXHU1M2QyXHU1M2QzXHU1M2Q1XHU1M2RhXHU1M2RjXHU1M2RkXHU1M2RlXHU1M2UxXHU1M2UyXHU1''@;'; put 'put ''M2U3XHU1M2Y0XHU1M2ZhXHU1M2ZlXHU1M2ZmXHU1NDAwXHU1NDAyXHU1NDA1XHU1NDA3XHU1NDBiXHU1NDE0XHU1NDE4XHU1NDE5XHU1NDFhXHU1NDFjXHU1NDIyXHU1NDI0XHU1NDI1XHU1NDJhXHU1NDMwXHU1NDMzXHU1NDM2XHU1NDM3XHU1NDNhXHU1NDNkXHU1NDNmXHU1NDQxXHU1NDQy''@;'; put 'put ''XHU1NDQ0XHU1NDQ1XHU1NDQ3XHU1NDQ5XHU1NDRjXHU1NDRkXHU1NDRlXHU1NDRmXHU1NDUxXHU1NDVhXHU1NDVkIiw0LCJcdTU0NjNcdTU0NjVcdTU0NjdcdTU0NjkiLDcsIlx1NTQ3NFx1NTQ3OVx1NTQ3YVx1NTQ3ZVx1NTQ3Zlx1NTQ4MVx1NTQ4M1x1NTQ4NVx1NTQ4N1x1NTQ4OFx1NTQ4''@;'; put 'put ''OVx1NTQ4YVx1NTQ4ZFx1NTQ5MVx1NTQ5M1x1NTQ5N1x1NTQ5OFx1NTQ5Y1x1NTQ5ZVx1NTQ5Zlx1NTRhMFx1NTRhMSJdLFsiODY0MCIsIlx1NTRhMlx1NTRhNVx1NTRhZVx1NTRiMFx1NTRiMlx1NTRiNVx1NTRiNlx1NTRiN1x1NTRiOVx1NTRiYVx1NTRiY1x1NTRiZVx1NTRjM1x1NTRjNVx1''@;'; put 'put ''NTRjYVx1NTRjYlx1NTRkNlx1NTRkOFx1NTRkYlx1NTRlMCIsNCwiXHU1NGViXHU1NGVjXHU1NGVmXHU1NGYwXHU1NGYxXHU1NGY0Iiw1LCJcdTU0ZmJcdTU0ZmVcdTU1MDBcdTU1MDJcdTU1MDNcdTU1MDRcdTU1MDVcdTU1MDhcdTU1MGEiLDQsIlx1NTUxMlx1NTUxM1x1NTUxNSIsNSwiXHU1''@;'; put 'put ''NTFjXHU1NTFkXHU1NTFlXHU1NTFmXHU1NTIxXHU1NTI1XHU1NTI2Il0sWyI4NjgwIiwiXHU1NTI4XHU1NTI5XHU1NTJiXHU1NTJkXHU1NTMyXHU1NTM0XHU1NTM1XHU1NTM2XHU1NTM4XHU1NTM5XHU1NTNhXHU1NTNiXHU1NTNkXHU1NTQwXHU1NTQyXHU1NTQ1XHU1NTQ3XHU1NTQ4XHU1NTRi''@;'; put 'put ''Iiw0LCJcdTU1NTFcdTU1NTJcdTU1NTNcdTU1NTRcdTU1NTciLDQsIlx1NTU1ZFx1NTU1ZVx1NTU1Zlx1NTU2MFx1NTU2Mlx1NTU2M1x1NTU2OFx1NTU2OVx1NTU2Ylx1NTU2ZiIsNSwiXHU1NTc5XHU1NTdhXHU1NTdkXHU1NTdmXHU1NTg1XHU1NTg2XHU1NThjXHU1NThkXHU1NThlXHU1NTkw''@;'; put 'put ''XHU1NTkyXHU1NTkzXHU1NTk1XHU1NTk2XHU1NTk3XHU1NTlhXHU1NTliXHU1NTllXHU1NWEwIiw2LCJcdTU1YTgiLDgsIlx1NTViMlx1NTViNFx1NTViNlx1NTViOFx1NTViYVx1NTViY1x1NTViZiIsNCwiXHU1NWM2XHU1NWM3XHU1NWM4XHU1NWNhXHU1NWNiXHU1NWNlXHU1NWNmXHU1NWQw''@;'; put 'put ''XHU1NWQ1XHU1NWQ3Iiw0LCJcdTU1ZGVcdTU1ZTBcdTU1ZTJcdTU1ZTdcdTU1ZTlcdTU1ZWRcdTU1ZWVcdTU1ZjBcdTU1ZjFcdTU1ZjRcdTU1ZjZcdTU1ZjgiLDQsIlx1NTVmZlx1NTYwMlx1NTYwM1x1NTYwNFx1NTYwNSJdLFsiODc0MCIsIlx1NTYwNlx1NTYwN1x1NTYwYVx1NTYwYlx1NTYw''@;'; put 'put ''ZFx1NTYxMCIsNywiXHU1NjE5XHU1NjFhXHU1NjFjXHU1NjFkXHU1NjIwXHU1NjIxXHU1NjIyXHU1NjI1XHU1NjI2XHU1NjI4XHU1NjI5XHU1NjJhXHU1NjJiXHU1NjJlXHU1NjJmXHU1NjMwXHU1NjMzXHU1NjM1XHU1NjM3XHU1NjM4XHU1NjNhXHU1NjNjXHU1NjNkXHU1NjNlXHU1NjQwIiwx''@;'; put 'put ''MSwiXHU1NjRmIiw0LCJcdTU2NTVcdTU2NTZcdTU2NWFcdTU2NWJcdTU2NWQiLDRdLFsiODc4MCIsIlx1NTY2M1x1NTY2NVx1NTY2Nlx1NTY2N1x1NTY2ZFx1NTY2ZVx1NTY2Zlx1NTY3MFx1NTY3Mlx1NTY3M1x1NTY3NFx1NTY3NVx1NTY3N1x1NTY3OFx1NTY3OVx1NTY3YVx1NTY3ZCIsNywi''@;'; put 'put ''XHU1Njg3Iiw2LCJcdTU2OTBcdTU2OTFcdTU2OTJcdTU2OTQiLDE0LCJcdTU2YTQiLDEwLCJcdTU2YjAiLDYsIlx1NTZiOFx1NTZiOVx1NTZiYVx1NTZiYlx1NTZiZCIsMTIsIlx1NTZjYiIsOCwiXHU1NmQ1XHU1NmQ2XHU1NmQ4XHU1NmQ5XHU1NmRjXHU1NmUzXHU1NmU1Iiw1LCJcdTU2ZWNc''@;'; put 'put ''dTU2ZWVcdTU2ZWZcdTU2ZjJcdTU2ZjNcdTU2ZjZcdTU2ZjdcdTU2ZjhcdTU2ZmJcdTU2ZmNcdTU3MDBcdTU3MDFcdTU3MDJcdTU3MDVcdTU3MDdcdTU3MGIiLDZdLFsiODg0MCIsIlx1NTcxMiIsOSwiXHU1NzFkXHU1NzFlXHU1NzIwXHU1NzIxXHU1NzIyXHU1NzI0XHU1NzI1XHU1NzI2XHU1''@;'; put 'put ''NzI3XHU1NzJiXHU1NzMxXHU1NzMyXHU1NzM0Iiw0LCJcdTU3M2NcdTU3M2RcdTU3M2ZcdTU3NDFcdTU3NDNcdTU3NDRcdTU3NDVcdTU3NDZcdTU3NDhcdTU3NDlcdTU3NGJcdTU3NTIiLDQsIlx1NTc1OFx1NTc1OVx1NTc2Mlx1NTc2M1x1NTc2NVx1NTc2N1x1NTc2Y1x1NTc2ZVx1NTc3MFx1''@;'; put 'put ''NTc3MVx1NTc3Mlx1NTc3NFx1NTc3NVx1NTc3OFx1NTc3OVx1NTc3YVx1NTc3ZFx1NTc3ZVx1NTc3Zlx1NTc4MCJdLFsiODg4MCIsIlx1NTc4MVx1NTc4N1x1NTc4OFx1NTc4OVx1NTc4YVx1NTc4ZCIsNCwiXHU1Nzk0Iiw2LCJcdTU3OWNcdTU3OWRcdTU3OWVcdTU3OWZcdTU3YTVcdTU3YThc''@;'; put 'put ''dTU3YWFcdTU3YWNcdTU3YWZcdTU3YjBcdTU3YjFcdTU3YjNcdTU3YjVcdTU3YjZcdTU3YjdcdTU3YjkiLDgsIlx1NTdjNCIsNiwiXHU1N2NjXHU1N2NkXHU1N2QwXHU1N2QxXHU1N2QzXHU1N2Q2XHU1N2Q3XHU1N2RiXHU1N2RjXHU1N2RlXHU1N2UxXHU1N2UyXHU1N2UzXHU1N2U1Iiw3LCJc''@;'; put 'put ''dTU3ZWVcdTU3ZjBcdTU3ZjFcdTU3ZjJcdTU3ZjNcdTU3ZjVcdTU3ZjZcdTU3ZjdcdTU3ZmJcdTU3ZmNcdTU3ZmVcdTU3ZmZcdTU4MDFcdTU4MDNcdTU4MDRcdTU4MDVcdTU4MDhcdTU4MDlcdTU4MGFcdTU4MGNcdTU4MGVcdTU4MGZcdTU4MTBcdTU4MTJcdTU4MTNcdTU4MTRcdTU4MTZcdTU4''@;'; put 'put ''MTdcdTU4MThcdTU4MWFcdTU4MWJcdTU4MWNcdTU4MWRcdTU4MWZcdTU4MjJcdTU4MjNcdTU4MjUiLDQsIlx1NTgyYiIsNCwiXHU1ODMxXHU1ODMyXHU1ODMzXHU1ODM0XHU1ODM2Iiw3XSxbIjg5NDAiLCJcdTU4M2UiLDUsIlx1NTg0NSIsNiwiXHU1ODRlXHU1ODRmXHU1ODUwXHU1ODUyXHU1''@;'; put 'put ''ODUzXHU1ODU1XHU1ODU2XHU1ODU3XHU1ODU5Iiw0LCJcdTU4NWYiLDUsIlx1NTg2NiIsNCwiXHU1ODZkIiwxNiwiXHU1ODdmXHU1ODgyXHU1ODg0XHU1ODg2XHU1ODg3XHU1ODg4XHU1ODhhXHU1ODhiXHU1ODhjIl0sWyI4OTgwIiwiXHU1ODhkIiw0LCJcdTU4OTQiLDQsIlx1NTg5Ylx1NTg5''@;'; put 'put ''Y1x1NTg5ZFx1NThhMCIsNywiXHU1OGFhIiwxNywiXHU1OGJkXHU1OGJlXHU1OGJmXHU1OGMwXHU1OGMyXHU1OGMzXHU1OGM0XHU1OGM2IiwxMCwiXHU1OGQyXHU1OGQzXHU1OGQ0XHU1OGQ2IiwxMywiXHU1OGU1Iiw1LCJcdTU4ZWRcdTU4ZWZcdTU4ZjFcdTU4ZjJcdTU4ZjRcdTU4ZjVcdTU4''@;'; put 'put ''ZjdcdTU4ZjhcdTU4ZmEiLDcsIlx1NTkwM1x1NTkwNVx1NTkwNlx1NTkwOCIsNCwiXHU1OTBlXHU1OTEwXHU1OTExXHU1OTEyXHU1OTEzXHU1OTE3XHU1OTE4XHU1OTFiXHU1OTFkXHU1OTFlXHU1OTIwXHU1OTIxXHU1OTIyXHU1OTIzXHU1OTI2XHU1OTI4XHU1OTJjXHU1OTMwXHU1OTMyXHU1''@;'; put 'put ''OTMzXHU1OTM1XHU1OTM2XHU1OTNiIl0sWyI4YTQwIiwiXHU1OTNkXHU1OTNlXHU1OTNmXHU1OTQwXHU1OTQzXHU1OTQ1XHU1OTQ2XHU1OTRhXHU1OTRjXHU1OTRkXHU1OTUwXHU1OTUyXHU1OTUzXHU1OTU5XHU1OTViIiw0LCJcdTU5NjFcdTU5NjNcdTU5NjRcdTU5NjYiLDEyLCJcdTU5NzVc''@;'; put 'put ''dTU5NzdcdTU5N2FcdTU5N2JcdTU5N2NcdTU5N2VcdTU5N2ZcdTU5ODBcdTU5ODVcdTU5ODlcdTU5OGJcdTU5OGNcdTU5OGVcdTU5OGZcdTU5OTBcdTU5OTFcdTU5OTRcdTU5OTVcdTU5OThcdTU5OWFcdTU5OWJcdTU5OWNcdTU5OWRcdTU5OWZcdTU5YTBcdTU5YTFcdTU5YTJcdTU5YTYiXSxb''@;'; put 'put ''IjhhODAiLCJcdTU5YTdcdTU5YWNcdTU5YWRcdTU5YjBcdTU5YjFcdTU5YjMiLDUsIlx1NTliYVx1NTliY1x1NTliZFx1NTliZiIsNiwiXHU1OWM3XHU1OWM4XHU1OWM5XHU1OWNjXHU1OWNkXHU1OWNlXHU1OWNmXHU1OWQ1XHU1OWQ2XHU1OWQ5XHU1OWRiXHU1OWRlIiw0LCJcdTU5ZTRcdTU5''@;'; put 'put ''ZTZcdTU5ZTdcdTU5ZTlcdTU5ZWFcdTU5ZWJcdTU5ZWQiLDExLCJcdTU5ZmFcdTU5ZmNcdTU5ZmRcdTU5ZmVcdTVhMDBcdTVhMDJcdTVhMGFcdTVhMGJcdTVhMGRcdTVhMGVcdTVhMGZcdTVhMTBcdTVhMTJcdTVhMTRcdTVhMTVcdTVhMTZcdTVhMTdcdTVhMTlcdTVhMWFcdTVhMWJcdTVhMWRc''@;'; put 'put ''dTVhMWVcdTVhMjFcdTVhMjJcdTVhMjRcdTVhMjZcdTVhMjdcdTVhMjhcdTVhMmEiLDYsIlx1NWEzM1x1NWEzNVx1NWEzNyIsNCwiXHU1YTNkXHU1YTNlXHU1YTNmXHU1YTQxIiw0LCJcdTVhNDdcdTVhNDhcdTVhNGIiLDksIlx1NWE1Nlx1NWE1N1x1NWE1OFx1NWE1OVx1NWE1YiIsNV0sWyI4''@;'; put 'put ''YjQwIiwiXHU1YTYxXHU1YTYzXHU1YTY0XHU1YTY1XHU1YTY2XHU1YTY4XHU1YTY5XHU1YTZiIiw4LCJcdTVhNzhcdTVhNzlcdTVhN2JcdTVhN2NcdTVhN2RcdTVhN2VcdTVhODAiLDE3LCJcdTVhOTMiLDYsIlx1NWE5YyIsMTMsIlx1NWFhYlx1NWFhYyJdLFsiOGI4MCIsIlx1NWFhZCIsNCwi''@;'; put 'put ''XHU1YWI0XHU1YWI2XHU1YWI3XHU1YWI5Iiw0LCJcdTVhYmZcdTVhYzBcdTVhYzMiLDUsIlx1NWFjYVx1NWFjYlx1NWFjZCIsNCwiXHU1YWQzXHU1YWQ1XHU1YWQ3XHU1YWQ5XHU1YWRhXHU1YWRiXHU1YWRkXHU1YWRlXHU1YWRmXHU1YWUyXHU1YWU0XHU1YWU1XHU1YWU3XHU1YWU4XHU1YWVh''@;'; put 'put ''XHU1YWVjIiw0LCJcdTVhZjIiLDIyLCJcdTViMGEiLDExLCJcdTViMTgiLDI1LCJcdTViMzNcdTViMzVcdTViMzZcdTViMzgiLDcsIlx1NWI0MSIsNl0sWyI4YzQwIiwiXHU1YjQ4Iiw3LCJcdTViNTJcdTViNTZcdTViNWVcdTViNjBcdTViNjFcdTViNjdcdTViNjhcdTViNmJcdTViNmRcdTVi''@;'; put 'put ''NmVcdTViNmZcdTViNzJcdTViNzRcdTViNzZcdTViNzdcdTViNzhcdTViNzlcdTViN2JcdTViN2NcdTViN2VcdTViN2ZcdTViODJcdTViODZcdTViOGFcdTViOGRcdTViOGVcdTViOTBcdTViOTFcdTViOTJcdTViOTRcdTViOTZcdTViOWZcdTViYTdcdTViYThcdTViYTlcdTViYWNcdTViYWRc''@;'; put 'put ''dTViYWVcdTViYWZcdTViYjFcdTViYjJcdTViYjdcdTViYmFcdTViYmJcdTViYmNcdTViYzBcdTViYzFcdTViYzNcdTViYzhcdTViYzlcdTViY2FcdTViY2JcdTViY2RcdTViY2VcdTViY2YiXSxbIjhjODAiLCJcdTViZDFcdTViZDQiLDgsIlx1NWJlMFx1NWJlMlx1NWJlM1x1NWJlNlx1NWJl''@;'; put 'put ''N1x1NWJlOSIsNCwiXHU1YmVmXHU1YmYxIiw2LCJcdTViZmRcdTViZmVcdTVjMDBcdTVjMDJcdTVjMDNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGJcdTVjMGNcdTVjMGRcdTVjMGVcdTVjMTBcdTVjMTJcdTVjMTNcdTVjMTdcdTVjMTlcdTVjMWJcdTVjMWVcdTVjMWZcdTVjMjBcdTVjMjFcdTVj''@;'; put 'put ''MjNcdTVjMjZcdTVjMjhcdTVjMjlcdTVjMmFcdTVjMmJcdTVjMmRcdTVjMmVcdTVjMmZcdTVjMzBcdTVjMzJcdTVjMzNcdTVjMzVcdTVjMzZcdTVjMzdcdTVjNDNcdTVjNDRcdTVjNDZcdTVjNDdcdTVjNGNcdTVjNGRcdTVjNTJcdTVjNTNcdTVjNTRcdTVjNTZcdTVjNTdcdTVjNThcdTVjNWFc''@;'; put 'put ''dTVjNWJcdTVjNWNcdTVjNWRcdTVjNWZcdTVjNjJcdTVjNjRcdTVjNjciLDYsIlx1NWM3MFx1NWM3MiIsNiwiXHU1YzdiXHU1YzdjXHU1YzdkXHU1YzdlXHU1YzgwXHU1YzgzIiw0LCJcdTVjODlcdTVjOGFcdTVjOGJcdTVjOGVcdTVjOGZcdTVjOTJcdTVjOTNcdTVjOTVcdTVjOWQiLDQsIlx1''@;'; put 'put ''NWNhNCIsNF0sWyI4ZDQwIiwiXHU1Y2FhXHU1Y2FlXHU1Y2FmXHU1Y2IwXHU1Y2IyXHU1Y2I0XHU1Y2I2XHU1Y2I5XHU1Y2JhXHU1Y2JiXHU1Y2JjXHU1Y2JlXHU1Y2MwXHU1Y2MyXHU1Y2MzXHU1Y2M1Iiw1LCJcdTVjY2MiLDUsIlx1NWNkMyIsNSwiXHU1Y2RhIiw2LCJcdTVjZTJcdTVjZTNc''@;'; put 'put ''dTVjZTdcdTVjZTlcdTVjZWJcdTVjZWNcdTVjZWVcdTVjZWZcdTVjZjEiLDksIlx1NWNmYyIsNF0sWyI4ZDgwIiwiXHU1ZDAxXHU1ZDA0XHU1ZDA1XHU1ZDA4Iiw1LCJcdTVkMGYiLDQsIlx1NWQxNVx1NWQxN1x1NWQxOFx1NWQxOVx1NWQxYVx1NWQxY1x1NWQxZFx1NWQxZiIsNCwiXHU1ZDI1''@;'; put 'put ''XHU1ZDI4XHU1ZDJhXHU1ZDJiXHU1ZDJjXHU1ZDJmIiw0LCJcdTVkMzUiLDcsIlx1NWQzZiIsNywiXHU1ZDQ4XHU1ZDQ5XHU1ZDRkIiwxMCwiXHU1ZDU5XHU1ZDVhXHU1ZDVjXHU1ZDVlIiwxMCwiXHU1ZDZhXHU1ZDZkXHU1ZDZlXHU1ZDcwXHU1ZDcxXHU1ZDcyXHU1ZDczXHU1ZDc1IiwxMiwi''@;'; put 'put ''XHU1ZDgzIiwyMSwiXHU1ZDlhXHU1ZDliXHU1ZDljXHU1ZDllXHU1ZDlmXHU1ZGEwIl0sWyI4ZTQwIiwiXHU1ZGExIiwyMSwiXHU1ZGI4IiwxMiwiXHU1ZGM2Iiw2LCJcdTVkY2UiLDEyLCJcdTVkZGNcdTVkZGZcdTVkZTBcdTVkZTNcdTVkZTRcdTVkZWFcdTVkZWNcdTVkZWQiXSxbIjhlODAi''@;'; put 'put ''LCJcdTVkZjBcdTVkZjVcdTVkZjZcdTVkZjgiLDQsIlx1NWRmZlx1NWUwMFx1NWUwNFx1NWUwN1x1NWUwOVx1NWUwYVx1NWUwYlx1NWUwZFx1NWUwZVx1NWUxMlx1NWUxM1x1NWUxN1x1NWUxZSIsNywiXHU1ZTI4Iiw0LCJcdTVlMmZcdTVlMzBcdTVlMzIiLDQsIlx1NWUzOVx1NWUzYVx1NWUz''@;'; put 'put ''ZVx1NWUzZlx1NWU0MFx1NWU0MVx1NWU0M1x1NWU0NiIsNSwiXHU1ZTRkIiw2LCJcdTVlNTYiLDQsIlx1NWU1Y1x1NWU1ZFx1NWU1Zlx1NWU2MFx1NWU2MyIsMTQsIlx1NWU3NVx1NWU3N1x1NWU3OVx1NWU3ZVx1NWU4MVx1NWU4Mlx1NWU4M1x1NWU4NVx1NWU4OFx1NWU4OVx1NWU4Y1x1NWU4''@;'; put 'put ''ZFx1NWU4ZVx1NWU5Mlx1NWU5OFx1NWU5Ylx1NWU5ZFx1NWVhMVx1NWVhMlx1NWVhM1x1NWVhNFx1NWVhOCIsNCwiXHU1ZWFlIiw0LCJcdTVlYjRcdTVlYmFcdTVlYmJcdTVlYmNcdTVlYmRcdTVlYmYiLDZdLFsiOGY0MCIsIlx1NWVjNlx1NWVjN1x1NWVjOFx1NWVjYiIsNSwiXHU1ZWQ0XHU1''@;'; put 'put ''ZWQ1XHU1ZWQ3XHU1ZWQ4XHU1ZWQ5XHU1ZWRhXHU1ZWRjIiwxMSwiXHU1ZWU5XHU1ZWViIiw4LCJcdTVlZjVcdTVlZjhcdTVlZjlcdTVlZmJcdTVlZmNcdTVlZmRcdTVmMDVcdTVmMDZcdTVmMDdcdTVmMDlcdTVmMGNcdTVmMGRcdTVmMGVcdTVmMTBcdTVmMTJcdTVmMTRcdTVmMTZcdTVmMTlc''@;'; put 'put ''dTVmMWFcdTVmMWNcdTVmMWRcdTVmMWVcdTVmMjFcdTVmMjJcdTVmMjNcdTVmMjQiXSxbIjhmODAiLCJcdTVmMjhcdTVmMmJcdTVmMmNcdTVmMmVcdTVmMzBcdTVmMzIiLDYsIlx1NWYzYlx1NWYzZFx1NWYzZVx1NWYzZlx1NWY0MSIsMTQsIlx1NWY1MVx1NWY1NFx1NWY1OVx1NWY1YVx1NWY1''@;'; put 'put ''Ylx1NWY1Y1x1NWY1ZVx1NWY1Zlx1NWY2MFx1NWY2M1x1NWY2NVx1NWY2N1x1NWY2OFx1NWY2Ylx1NWY2ZVx1NWY2Zlx1NWY3Mlx1NWY3NFx1NWY3NVx1NWY3Nlx1NWY3OFx1NWY3YVx1NWY3ZFx1NWY3ZVx1NWY3Zlx1NWY4M1x1NWY4Nlx1NWY4ZFx1NWY4ZVx1NWY4Zlx1NWY5MVx1NWY5M1x1''@;'; put 'put ''NWY5NFx1NWY5Nlx1NWY5YVx1NWY5Ylx1NWY5ZFx1NWY5ZVx1NWY5Zlx1NWZhMFx1NWZhMiIsNSwiXHU1ZmE5XHU1ZmFiXHU1ZmFjXHU1ZmFmIiw1LCJcdTVmYjZcdTVmYjhcdTVmYjlcdTVmYmFcdTVmYmJcdTVmYmUiLDQsIlx1NWZjN1x1NWZjOFx1NWZjYVx1NWZjYlx1NWZjZVx1NWZkM1x1''@;'; put 'put ''NWZkNFx1NWZkNVx1NWZkYVx1NWZkYlx1NWZkY1x1NWZkZVx1NWZkZlx1NWZlMlx1NWZlM1x1NWZlNVx1NWZlNlx1NWZlOFx1NWZlOVx1NWZlY1x1NWZlZlx1NWZmMFx1NWZmMlx1NWZmM1x1NWZmNFx1NWZmNlx1NWZmN1x1NWZmOVx1NWZmYVx1NWZmY1x1NjAwNyJdLFsiOTA0MCIsIlx1NjAw''@;'; put 'put ''OFx1NjAwOVx1NjAwYlx1NjAwY1x1NjAxMFx1NjAxMVx1NjAxM1x1NjAxN1x1NjAxOFx1NjAxYVx1NjAxZVx1NjAxZlx1NjAyMlx1NjAyM1x1NjAyNFx1NjAyY1x1NjAyZFx1NjAyZVx1NjAzMCIsNCwiXHU2MDM2Iiw0LCJcdTYwM2RcdTYwM2VcdTYwNDBcdTYwNDQiLDYsIlx1NjA0Y1x1NjA0''@;'; put 'put ''ZVx1NjA0Zlx1NjA1MVx1NjA1M1x1NjA1NFx1NjA1Nlx1NjA1N1x1NjA1OFx1NjA1Ylx1NjA1Y1x1NjA1ZVx1NjA1Zlx1NjA2MFx1NjA2MVx1NjA2NVx1NjA2Nlx1NjA2ZVx1NjA3MVx1NjA3Mlx1NjA3NFx1NjA3NVx1NjA3N1x1NjA3ZVx1NjA4MCJdLFsiOTA4MCIsIlx1NjA4MVx1NjA4Mlx1''@;'; put 'put ''NjA4NVx1NjA4Nlx1NjA4N1x1NjA4OFx1NjA4YVx1NjA4Ylx1NjA4ZVx1NjA4Zlx1NjA5MFx1NjA5MVx1NjA5M1x1NjA5NVx1NjA5N1x1NjA5OFx1NjA5OVx1NjA5Y1x1NjA5ZVx1NjBhMVx1NjBhMlx1NjBhNFx1NjBhNVx1NjBhN1x1NjBhOVx1NjBhYVx1NjBhZVx1NjBiMFx1NjBiM1x1NjBi''@;'; put 'put ''NVx1NjBiNlx1NjBiN1x1NjBiOVx1NjBiYVx1NjBiZCIsNywiXHU2MGM3XHU2MGM4XHU2MGM5XHU2MGNjIiw0LCJcdTYwZDJcdTYwZDNcdTYwZDRcdTYwZDZcdTYwZDdcdTYwZDlcdTYwZGJcdTYwZGVcdTYwZTEiLDQsIlx1NjBlYVx1NjBmMVx1NjBmMlx1NjBmNVx1NjBmN1x1NjBmOFx1NjBm''@;'; put 'put ''YiIsNCwiXHU2MTAyXHU2MTAzXHU2MTA0XHU2MTA1XHU2MTA3XHU2MTBhXHU2MTBiXHU2MTBjXHU2MTEwIiw0LCJcdTYxMTZcdTYxMTdcdTYxMThcdTYxMTlcdTYxMWJcdTYxMWNcdTYxMWRcdTYxMWVcdTYxMjFcdTYxMjJcdTYxMjVcdTYxMjhcdTYxMjlcdTYxMmFcdTYxMmMiLDE4LCJcdTYx''@;'; put 'put ''NDAiLDZdLFsiOTE0MCIsIlx1NjE0N1x1NjE0OVx1NjE0Ylx1NjE0ZFx1NjE0Zlx1NjE1MFx1NjE1Mlx1NjE1M1x1NjE1NFx1NjE1NiIsNiwiXHU2MTVlXHU2MTVmXHU2MTYwXHU2MTYxXHU2MTYzXHU2MTY0XHU2MTY1XHU2MTY2XHU2MTY5Iiw2LCJcdTYxNzFcdTYxNzJcdTYxNzNcdTYxNzRc''@;'; put 'put ''dTYxNzZcdTYxNzgiLDE4LCJcdTYxOGNcdTYxOGRcdTYxOGYiLDQsIlx1NjE5NSJdLFsiOTE4MCIsIlx1NjE5NiIsNiwiXHU2MTllIiw4LCJcdTYxYWFcdTYxYWJcdTYxYWQiLDksIlx1NjFiOCIsNSwiXHU2MWJmXHU2MWMwXHU2MWMxXHU2MWMzIiw0LCJcdTYxYzlcdTYxY2MiLDQsIlx1NjFk''@;'; put 'put ''M1x1NjFkNSIsMTYsIlx1NjFlNyIsMTMsIlx1NjFmNiIsOCwiXHU2MjAwIiw1LCJcdTYyMDdcdTYyMDlcdTYyMTNcdTYyMTRcdTYyMTlcdTYyMWNcdTYyMWRcdTYyMWVcdTYyMjBcdTYyMjNcdTYyMjZcdTYyMjdcdTYyMjhcdTYyMjlcdTYyMmJcdTYyMmRcdTYyMmZcdTYyMzBcdTYyMzFcdTYy''@;'; put 'put ''MzJcdTYyMzVcdTYyMzZcdTYyMzgiLDQsIlx1NjI0Mlx1NjI0NFx1NjI0NVx1NjI0Nlx1NjI0YSJdLFsiOTI0MCIsIlx1NjI0Zlx1NjI1MFx1NjI1NVx1NjI1Nlx1NjI1N1x1NjI1OVx1NjI1YVx1NjI1YyIsNiwiXHU2MjY0XHU2MjY1XHU2MjY4XHU2MjcxXHU2MjcyXHU2Mjc0XHU2Mjc1XHU2''@;'; put 'put ''Mjc3XHU2Mjc4XHU2MjdhXHU2MjdiXHU2MjdkXHU2MjgxXHU2MjgyXHU2MjgzXHU2Mjg1XHU2Mjg2XHU2Mjg3XHU2Mjg4XHU2MjhiIiw1LCJcdTYyOTRcdTYyOTlcdTYyOWNcdTYyOWRcdTYyOWVcdTYyYTNcdTYyYTZcdTYyYTdcdTYyYTlcdTYyYWFcdTYyYWRcdTYyYWVcdTYyYWZcdTYyYjBc''@;'; put 'put ''dTYyYjJcdTYyYjNcdTYyYjRcdTYyYjZcdTYyYjdcdTYyYjhcdTYyYmFcdTYyYmVcdTYyYzBcdTYyYzEiXSxbIjkyODAiLCJcdTYyYzNcdTYyY2JcdTYyY2ZcdTYyZDFcdTYyZDVcdTYyZGRcdTYyZGVcdTYyZTBcdTYyZTFcdTYyZTRcdTYyZWFcdTYyZWJcdTYyZjBcdTYyZjJcdTYyZjVcdTYy''@;'; put 'put ''ZjhcdTYyZjlcdTYyZmFcdTYyZmJcdTYzMDBcdTYzMDNcdTYzMDRcdTYzMDVcdTYzMDZcdTYzMGFcdTYzMGJcdTYzMGNcdTYzMGRcdTYzMGZcdTYzMTBcdTYzMTJcdTYzMTNcdTYzMTRcdTYzMTVcdTYzMTdcdTYzMThcdTYzMTlcdTYzMWNcdTYzMjZcdTYzMjdcdTYzMjlcdTYzMmNcdTYzMmRc''@;'; put 'put ''dTYzMmVcdTYzMzBcdTYzMzFcdTYzMzMiLDUsIlx1NjMzYlx1NjMzY1x1NjMzZVx1NjMzZlx1NjM0MFx1NjM0MVx1NjM0NFx1NjM0N1x1NjM0OFx1NjM0YVx1NjM1MVx1NjM1Mlx1NjM1M1x1NjM1NFx1NjM1NiIsNywiXHU2MzYwXHU2MzY0XHU2MzY1XHU2MzY2XHU2MzY4XHU2MzZhXHU2MzZi''@;'; put 'put ''XHU2MzZjXHU2MzZmXHU2MzcwXHU2MzcyXHU2MzczXHU2Mzc0XHU2Mzc1XHU2Mzc4XHU2Mzc5XHU2MzdjXHU2MzdkXHU2MzdlXHU2MzdmXHU2MzgxXHU2MzgzXHU2Mzg0XHU2Mzg1XHU2Mzg2XHU2MzhiXHU2MzhkXHU2MzkxXHU2MzkzXHU2Mzk0XHU2Mzk1XHU2Mzk3XHU2Mzk5Iiw2LCJcdTYz''@;'; put 'put ''YTFcdTYzYTRcdTYzYTZcdTYzYWJcdTYzYWZcdTYzYjFcdTYzYjJcdTYzYjVcdTYzYjZcdTYzYjlcdTYzYmJcdTYzYmRcdTYzYmZcdTYzYzAiXSxbIjkzNDAiLCJcdTYzYzFcdTYzYzJcdTYzYzNcdTYzYzVcdTYzYzdcdTYzYzhcdTYzY2FcdTYzY2JcdTYzY2NcdTYzZDFcdTYzZDNcdTYzZDRc''@;'; put 'put ''dTYzZDVcdTYzZDciLDYsIlx1NjNkZlx1NjNlMlx1NjNlNCIsNCwiXHU2M2ViXHU2M2VjXHU2M2VlXHU2M2VmXHU2M2YwXHU2M2YxXHU2M2YzXHU2M2Y1XHU2M2Y3XHU2M2Y5XHU2M2ZhXHU2M2ZiXHU2M2ZjXHU2M2ZlXHU2NDAzXHU2NDA0XHU2NDA2Iiw0LCJcdTY0MGRcdTY0MGVcdTY0MTFc''@;'; put 'put ''dTY0MTJcdTY0MTUiLDUsIlx1NjQxZFx1NjQxZlx1NjQyMlx1NjQyM1x1NjQyNCJdLFsiOTM4MCIsIlx1NjQyNVx1NjQyN1x1NjQyOFx1NjQyOVx1NjQyYlx1NjQyZSIsNSwiXHU2NDM1Iiw0LCJcdTY0M2JcdTY0M2NcdTY0M2VcdTY0NDBcdTY0NDJcdTY0NDNcdTY0NDlcdTY0NGIiLDYsIlx1''@;'; put 'put ''NjQ1M1x1NjQ1NVx1NjQ1Nlx1NjQ1N1x1NjQ1OSIsNCwiXHU2NDVmIiw3LCJcdTY0NjhcdTY0NmFcdTY0NmJcdTY0NmNcdTY0NmUiLDksIlx1NjQ3YiIsNiwiXHU2NDgzXHU2NDg2XHU2NDg4Iiw4LCJcdTY0OTNcdTY0OTRcdTY0OTdcdTY0OThcdTY0OWFcdTY0OWJcdTY0OWNcdTY0OWRcdTY0''@;'; put 'put ''OWYiLDQsIlx1NjRhNVx1NjRhNlx1NjRhN1x1NjRhOFx1NjRhYVx1NjRhYlx1NjRhZlx1NjRiMVx1NjRiMlx1NjRiM1x1NjRiNFx1NjRiNlx1NjRiOVx1NjRiYlx1NjRiZFx1NjRiZVx1NjRiZlx1NjRjMVx1NjRjM1x1NjRjNFx1NjRjNiIsNiwiXHU2NGNmXHU2NGQxXHU2NGQzXHU2NGQ0XHU2''@;'; put 'put ''NGQ1XHU2NGQ2XHU2NGQ5XHU2NGRhIl0sWyI5NDQwIiwiXHU2NGRiXHU2NGRjXHU2NGRkXHU2NGRmXHU2NGUwXHU2NGUxXHU2NGUzXHU2NGU1XHU2NGU3IiwyNCwiXHU2NTAxIiw3LCJcdTY1MGEiLDcsIlx1NjUxMyIsNCwiXHU2NTE5Iiw4XSxbIjk0ODAiLCJcdTY1MjJcdTY1MjNcdTY1MjRc''@;'; put 'put ''dTY1MjYiLDQsIlx1NjUyY1x1NjUyZFx1NjUzMFx1NjUzMVx1NjUzMlx1NjUzM1x1NjUzN1x1NjUzYVx1NjUzY1x1NjUzZFx1NjU0MCIsNCwiXHU2NTQ2XHU2NTQ3XHU2NTRhXHU2NTRiXHU2NTRkXHU2NTRlXHU2NTUwXHU2NTUyXHU2NTUzXHU2NTU0XHU2NTU3XHU2NTU4XHU2NTVhXHU2NTVj''@;'; put 'put ''XHU2NTVmXHU2NTYwXHU2NTYxXHU2NTY0XHU2NTY1XHU2NTY3XHU2NTY4XHU2NTY5XHU2NTZhXHU2NTZkXHU2NTZlXHU2NTZmXHU2NTcxXHU2NTczXHU2NTc1XHU2NTc2XHU2NTc4IiwxNCwiXHU2NTg4XHU2NTg5XHU2NThhXHU2NThkXHU2NThlXHU2NThmXHU2NTkyXHU2NTk0XHU2NTk1XHU2''@;'; put 'put ''NTk2XHU2NTk4XHU2NTlhXHU2NTlkXHU2NTllXHU2NWEwXHU2NWEyXHU2NWEzXHU2NWE2XHU2NWE4XHU2NWFhXHU2NWFjXHU2NWFlXHU2NWIxIiw3LCJcdTY1YmFcdTY1YmJcdTY1YmVcdTY1YmZcdTY1YzBcdTY1YzJcdTY1YzdcdTY1YzhcdTY1YzlcdTY1Y2FcdTY1Y2RcdTY1ZDBcdTY1ZDFc''@;'; put 'put ''dTY1ZDNcdTY1ZDRcdTY1ZDVcdTY1ZDgiLDcsIlx1NjVlMVx1NjVlM1x1NjVlNFx1NjVlYVx1NjVlYiJdLFsiOTU0MCIsIlx1NjVmMlx1NjVmM1x1NjVmNFx1NjVmNVx1NjVmOFx1NjVmOVx1NjVmYiIsNCwiXHU2NjAxXHU2NjA0XHU2NjA1XHU2NjA3XHU2NjA4XHU2NjA5XHU2NjBiXHU2NjBk''@;'; put 'put ''XHU2NjEwXHU2NjExXHU2NjEyXHU2NjE2XHU2NjE3XHU2NjE4XHU2NjFhXHU2NjFiXHU2NjFjXHU2NjFlXHU2NjIxXHU2NjIyXHU2NjIzXHU2NjI0XHU2NjI2XHU2NjI5XHU2NjJhXHU2NjJiXHU2NjJjXHU2NjJlXHU2NjMwXHU2NjMyXHU2NjMzXHU2NjM3Iiw0LCJcdTY2M2RcdTY2M2ZcdTY2''@;'; put 'put ''NDBcdTY2NDJcdTY2NDQiLDYsIlx1NjY0ZFx1NjY0ZVx1NjY1MFx1NjY1MVx1NjY1OCJdLFsiOTU4MCIsIlx1NjY1OVx1NjY1Ylx1NjY1Y1x1NjY1ZFx1NjY1ZVx1NjY2MFx1NjY2Mlx1NjY2M1x1NjY2NVx1NjY2N1x1NjY2OSIsNCwiXHU2NjcxXHU2NjcyXHU2NjczXHU2Njc1XHU2Njc4XHU2''@;'; put 'put ''Njc5XHU2NjdiXHU2NjdjXHU2NjdkXHU2NjdmXHU2NjgwXHU2NjgxXHU2NjgzXHU2Njg1XHU2Njg2XHU2Njg4XHU2Njg5XHU2NjhhXHU2NjhiXHU2NjhkXHU2NjhlXHU2NjhmXHU2NjkwXHU2NjkyXHU2NjkzXHU2Njk0XHU2Njk1XHU2Njk4Iiw0LCJcdTY2OWUiLDgsIlx1NjZhOSIsNCwiXHU2''@;'; put 'put ''NmFmIiw0LCJcdTY2YjVcdTY2YjZcdTY2YjdcdTY2YjhcdTY2YmFcdTY2YmJcdTY2YmNcdTY2YmRcdTY2YmYiLDI1LCJcdTY2ZGFcdTY2ZGUiLDcsIlx1NjZlN1x1NjZlOFx1NjZlYSIsNSwiXHU2NmYxXHU2NmY1XHU2NmY2XHU2NmY4XHU2NmZhXHU2NmZiXHU2NmZkXHU2NzAxXHU2NzAyXHU2''@;'; put 'put ''NzAzIl0sWyI5NjQwIiwiXHU2NzA0XHU2NzA1XHU2NzA2XHU2NzA3XHU2NzBjXHU2NzBlXHU2NzBmXHU2NzExXHU2NzEyXHU2NzEzXHU2NzE2XHU2NzE4XHU2NzE5XHU2NzFhXHU2NzFjXHU2NzFlXHU2NzIwIiw1LCJcdTY3MjdcdTY3MjlcdTY3MmVcdTY3MzBcdTY3MzJcdTY3MzNcdTY3MzZc''@;'; put 'put ''dTY3MzdcdTY3MzhcdTY3MzlcdTY3M2JcdTY3M2NcdTY3M2VcdTY3M2ZcdTY3NDFcdTY3NDRcdTY3NDVcdTY3NDdcdTY3NGFcdTY3NGJcdTY3NGRcdTY3NTJcdTY3NTRcdTY3NTVcdTY3NTciLDQsIlx1Njc1ZFx1Njc2Mlx1Njc2M1x1Njc2NFx1Njc2Nlx1Njc2N1x1Njc2Ylx1Njc2Y1x1Njc2''@;'; put 'put ''ZVx1Njc3MVx1Njc3NFx1Njc3NiJdLFsiOTY4MCIsIlx1Njc3OFx1Njc3OVx1Njc3YVx1Njc3Ylx1Njc3ZFx1Njc4MFx1Njc4Mlx1Njc4M1x1Njc4NVx1Njc4Nlx1Njc4OFx1Njc4YVx1Njc4Y1x1Njc4ZFx1Njc4ZVx1Njc4Zlx1Njc5MVx1Njc5Mlx1Njc5M1x1Njc5NFx1Njc5Nlx1Njc5OVx1''@;'; put 'put ''Njc5Ylx1Njc5Zlx1NjdhMFx1NjdhMVx1NjdhNFx1NjdhNlx1NjdhOVx1NjdhY1x1NjdhZVx1NjdiMVx1NjdiMlx1NjdiNFx1NjdiOSIsNywiXHU2N2MyXHU2N2M1Iiw5LCJcdTY3ZDVcdTY3ZDZcdTY3ZDdcdTY3ZGJcdTY3ZGZcdTY3ZTFcdTY3ZTNcdTY3ZTRcdTY3ZTZcdTY3ZTdcdTY3ZThc''@;'; put 'put ''dTY3ZWFcdTY3ZWJcdTY3ZWRcdTY3ZWVcdTY3ZjJcdTY3ZjUiLDcsIlx1NjdmZVx1NjgwMVx1NjgwMlx1NjgwM1x1NjgwNFx1NjgwNlx1NjgwZFx1NjgxMFx1NjgxMlx1NjgxNFx1NjgxNVx1NjgxOCIsNCwiXHU2ODFlXHU2ODFmXHU2ODIwXHU2ODIyIiw2LCJcdTY4MmIiLDYsIlx1NjgzNFx1''@;'; put 'put ''NjgzNVx1NjgzNlx1NjgzYVx1NjgzYlx1NjgzZlx1Njg0N1x1Njg0Ylx1Njg0ZFx1Njg0Zlx1Njg1Mlx1Njg1NiIsNV0sWyI5NzQwIiwiXHU2ODVjXHU2ODVkXHU2ODVlXHU2ODVmXHU2ODZhXHU2ODZjIiw3LCJcdTY4NzVcdTY4NzgiLDgsIlx1Njg4Mlx1Njg4NFx1Njg4NyIsNywiXHU2ODkw''@;'; put 'put ''XHU2ODkxXHU2ODkyXHU2ODk0XHU2ODk1XHU2ODk2XHU2ODk4Iiw5LCJcdTY4YTNcdTY4YTRcdTY4YTVcdTY4YTlcdTY4YWFcdTY4YWJcdTY4YWNcdTY4YWVcdTY4YjFcdTY4YjJcdTY4YjRcdTY4YjZcdTY4YjdcdTY4YjgiXSxbIjk3ODAiLCJcdTY4YjkiLDYsIlx1NjhjMVx1NjhjMyIsNSwi''@;'; put 'put ''XHU2OGNhXHU2OGNjXHU2OGNlXHU2OGNmXHU2OGQwXHU2OGQxXHU2OGQzXHU2OGQ0XHU2OGQ2XHU2OGQ3XHU2OGQ5XHU2OGRiIiw0LCJcdTY4ZTFcdTY4ZTJcdTY4ZTQiLDksIlx1NjhlZlx1NjhmMlx1NjhmM1x1NjhmNFx1NjhmNlx1NjhmN1x1NjhmOFx1NjhmYlx1NjhmZFx1NjhmZVx1Njhm''@;'; put 'put ''Zlx1NjkwMFx1NjkwMlx1NjkwM1x1NjkwNFx1NjkwNiIsNCwiXHU2OTBjXHU2OTBmXHU2OTExXHU2OTEzIiwxMSwiXHU2OTIxXHU2OTIyXHU2OTIzXHU2OTI1Iiw3LCJcdTY5MmVcdTY5MmZcdTY5MzFcdTY5MzJcdTY5MzNcdTY5MzVcdTY5MzZcdTY5MzdcdTY5MzhcdTY5M2FcdTY5M2JcdTY5''@;'; put 'put ''M2NcdTY5M2VcdTY5NDBcdTY5NDFcdTY5NDMiLDE2LCJcdTY5NTVcdTY5NTZcdTY5NThcdTY5NTlcdTY5NWJcdTY5NWNcdTY5NWYiXSxbIjk4NDAiLCJcdTY5NjFcdTY5NjJcdTY5NjRcdTY5NjVcdTY5NjdcdTY5NjhcdTY5NjlcdTY5NmFcdTY5NmNcdTY5NmRcdTY5NmZcdTY5NzBcdTY5NzIi''@;'; put 'put ''LDQsIlx1Njk3YVx1Njk3Ylx1Njk3ZFx1Njk3ZVx1Njk3Zlx1Njk4MVx1Njk4M1x1Njk4NVx1Njk4YVx1Njk4Ylx1Njk4Y1x1Njk4ZSIsNSwiXHU2OTk2XHU2OTk3XHU2OTk5XHU2OTlhXHU2OTlkIiw5LCJcdTY5YTlcdTY5YWFcdTY5YWNcdTY5YWVcdTY5YWZcdTY5YjBcdTY5YjJcdTY5YjNc''@;'; put 'put ''dTY5YjVcdTY5YjZcdTY5YjhcdTY5YjlcdTY5YmFcdTY5YmNcdTY5YmQiXSxbIjk4ODAiLCJcdTY5YmVcdTY5YmZcdTY5YzBcdTY5YzIiLDcsIlx1NjljYlx1NjljZFx1NjljZlx1NjlkMVx1NjlkMlx1NjlkM1x1NjlkNSIsNSwiXHU2OWRjXHU2OWRkXHU2OWRlXHU2OWUxIiwxMSwiXHU2OWVl''@;'; put 'put ''XHU2OWVmXHU2OWYwXHU2OWYxXHU2OWYzIiw5LCJcdTY5ZmVcdTZhMDAiLDksIlx1NmEwYiIsMTEsIlx1NmExOSIsNSwiXHU2YTIwXHU2YTIyIiw1LCJcdTZhMjlcdTZhMmJcdTZhMmNcdTZhMmRcdTZhMmVcdTZhMzBcdTZhMzJcdTZhMzNcdTZhMzRcdTZhMzYiLDYsIlx1NmEzZiIsNCwiXHU2''@;'; put 'put ''YTQ1XHU2YTQ2XHU2YTQ4Iiw3LCJcdTZhNTEiLDYsIlx1NmE1YSJdLFsiOTk0MCIsIlx1NmE1YyIsNCwiXHU2YTYyXHU2YTYzXHU2YTY0XHU2YTY2IiwxMCwiXHU2YTcyIiw2LCJcdTZhN2FcdTZhN2JcdTZhN2RcdTZhN2VcdTZhN2ZcdTZhODFcdTZhODJcdTZhODNcdTZhODUiLDgsIlx1NmE4''@;'; put 'put ''Zlx1NmE5MiIsNCwiXHU2YTk4Iiw3LCJcdTZhYTEiLDVdLFsiOTk4MCIsIlx1NmFhN1x1NmFhOFx1NmFhYVx1NmFhZCIsMTE0LCJcdTZiMjVcdTZiMjZcdTZiMjgiLDZdLFsiOWE0MCIsIlx1NmIyZlx1NmIzMFx1NmIzMVx1NmIzM1x1NmIzNFx1NmIzNVx1NmIzNlx1NmIzOFx1NmIzYlx1NmIz''@;'; put 'put ''Y1x1NmIzZFx1NmIzZlx1NmI0MFx1NmI0MVx1NmI0Mlx1NmI0NFx1NmI0NVx1NmI0OFx1NmI0YVx1NmI0Ylx1NmI0ZCIsMTEsIlx1NmI1YSIsNywiXHU2YjY4XHU2YjY5XHU2YjZiIiwxMywiXHU2YjdhXHU2YjdkXHU2YjdlXHU2YjdmXHU2YjgwXHU2Yjg1XHU2Yjg4Il0sWyI5YTgwIiwiXHU2''@;'; put 'put ''YjhjXHU2YjhlXHU2YjhmXHU2YjkwXHU2YjkxXHU2Yjk0XHU2Yjk1XHU2Yjk3XHU2Yjk4XHU2Yjk5XHU2YjljIiw0LCJcdTZiYTIiLDcsIlx1NmJhYiIsNywiXHU2YmI2XHU2YmI4Iiw2LCJcdTZiYzBcdTZiYzNcdTZiYzRcdTZiYzYiLDQsIlx1NmJjY1x1NmJjZVx1NmJkMFx1NmJkMVx1NmJk''@;'; put 'put ''OFx1NmJkYVx1NmJkYyIsNCwiXHU2YmUyIiw3LCJcdTZiZWNcdTZiZWRcdTZiZWVcdTZiZjBcdTZiZjFcdTZiZjJcdTZiZjRcdTZiZjZcdTZiZjdcdTZiZjhcdTZiZmFcdTZiZmJcdTZiZmNcdTZiZmUiLDYsIlx1NmMwOCIsNCwiXHU2YzBlXHU2YzEyXHU2YzE3XHU2YzFjXHU2YzFkXHU2YzFl''@;'; put 'put ''XHU2YzIwXHU2YzIzXHU2YzI1XHU2YzJiXHU2YzJjXHU2YzJkXHU2YzMxXHU2YzMzXHU2YzM2XHU2YzM3XHU2YzM5XHU2YzNhXHU2YzNiXHU2YzNjXHU2YzNlXHU2YzNmXHU2YzQzXHU2YzQ0XHU2YzQ1XHU2YzQ4XHU2YzRiIiw0LCJcdTZjNTFcdTZjNTJcdTZjNTNcdTZjNTZcdTZjNTgiXSxb''@;'; put 'put ''IjliNDAiLCJcdTZjNTlcdTZjNWFcdTZjNjJcdTZjNjNcdTZjNjVcdTZjNjZcdTZjNjdcdTZjNmIiLDQsIlx1NmM3MVx1NmM3M1x1NmM3NVx1NmM3N1x1NmM3OFx1NmM3YVx1NmM3Ylx1NmM3Y1x1NmM3Zlx1NmM4MFx1NmM4NFx1NmM4N1x1NmM4YVx1NmM4Ylx1NmM4ZFx1NmM4ZVx1NmM5MVx1''@;'; put 'put ''NmM5Mlx1NmM5NVx1NmM5Nlx1NmM5N1x1NmM5OFx1NmM5YVx1NmM5Y1x1NmM5ZFx1NmM5ZVx1NmNhMFx1NmNhMlx1NmNhOFx1NmNhY1x1NmNhZlx1NmNiMFx1NmNiNFx1NmNiNVx1NmNiNlx1NmNiN1x1NmNiYVx1NmNjMFx1NmNjMVx1NmNjMlx1NmNjM1x1NmNjNlx1NmNjN1x1NmNjOFx1NmNj''@;'; put 'put ''Ylx1NmNjZFx1NmNjZVx1NmNjZlx1NmNkMVx1NmNkMlx1NmNkOCJdLFsiOWI4MCIsIlx1NmNkOVx1NmNkYVx1NmNkY1x1NmNkZFx1NmNkZlx1NmNlNFx1NmNlNlx1NmNlN1x1NmNlOVx1NmNlY1x1NmNlZFx1NmNmMlx1NmNmNFx1NmNmOVx1NmNmZlx1NmQwMFx1NmQwMlx1NmQwM1x1NmQwNVx1''@;'; put 'put ''NmQwNlx1NmQwOFx1NmQwOVx1NmQwYVx1NmQwZFx1NmQwZlx1NmQxMFx1NmQxMVx1NmQxM1x1NmQxNFx1NmQxNVx1NmQxNlx1NmQxOFx1NmQxY1x1NmQxZFx1NmQxZiIsNSwiXHU2ZDI2XHU2ZDI4XHU2ZDI5XHU2ZDJjXHU2ZDJkXHU2ZDJmXHU2ZDMwXHU2ZDM0XHU2ZDM2XHU2ZDM3XHU2ZDM4''@;'; put 'put ''XHU2ZDNhXHU2ZDNmXHU2ZDQwXHU2ZDQyXHU2ZDQ0XHU2ZDQ5XHU2ZDRjXHU2ZDUwXHU2ZDU1XHU2ZDU2XHU2ZDU3XHU2ZDU4XHU2ZDViXHU2ZDVkXHU2ZDVmXHU2ZDYxXHU2ZDYyXHU2ZDY0XHU2ZDY1XHU2ZDY3XHU2ZDY4XHU2ZDZiXHU2ZDZjXHU2ZDZkXHU2ZDcwXHU2ZDcxXHU2ZDcyXHU2''@;'; put 'put ''ZDczXHU2ZDc1XHU2ZDc2XHU2ZDc5XHU2ZDdhXHU2ZDdiXHU2ZDdkIiw0LCJcdTZkODNcdTZkODRcdTZkODZcdTZkODdcdTZkOGFcdTZkOGJcdTZkOGRcdTZkOGZcdTZkOTBcdTZkOTJcdTZkOTYiLDQsIlx1NmQ5Y1x1NmRhMlx1NmRhNVx1NmRhY1x1NmRhZFx1NmRiMFx1NmRiMVx1NmRiM1x1''@;'; put 'put ''NmRiNFx1NmRiNlx1NmRiN1x1NmRiOSIsNSwiXHU2ZGMxXHU2ZGMyXHU2ZGMzXHU2ZGM4XHU2ZGM5XHU2ZGNhIl0sWyI5YzQwIiwiXHU2ZGNkXHU2ZGNlXHU2ZGNmXHU2ZGQwXHU2ZGQyXHU2ZGQzXHU2ZGQ0XHU2ZGQ1XHU2ZGQ3XHU2ZGRhXHU2ZGRiXHU2ZGRjXHU2ZGRmXHU2ZGUyXHU2ZGUz''@;'; put 'put ''XHU2ZGU1XHU2ZGU3XHU2ZGU4XHU2ZGU5XHU2ZGVhXHU2ZGVkXHU2ZGVmXHU2ZGYwXHU2ZGYyXHU2ZGY0XHU2ZGY1XHU2ZGY2XHU2ZGY4XHU2ZGZhXHU2ZGZkIiw3LCJcdTZlMDZcdTZlMDdcdTZlMDhcdTZlMDlcdTZlMGJcdTZlMGZcdTZlMTJcdTZlMTNcdTZlMTVcdTZlMThcdTZlMTlcdTZl''@;'; put 'put ''MWJcdTZlMWNcdTZlMWVcdTZlMWZcdTZlMjJcdTZlMjZcdTZlMjdcdTZlMjhcdTZlMmFcdTZlMmNcdTZlMmVcdTZlMzBcdTZlMzFcdTZlMzNcdTZlMzUiXSxbIjljODAiLCJcdTZlMzZcdTZlMzdcdTZlMzlcdTZlM2IiLDcsIlx1NmU0NSIsNywiXHU2ZTRmXHU2ZTUwXHU2ZTUxXHU2ZTUyXHU2''@;'; put 'put ''ZTU1XHU2ZTU3XHU2ZTU5XHU2ZTVhXHU2ZTVjXHU2ZTVkXHU2ZTVlXHU2ZTYwIiwxMCwiXHU2ZTZjXHU2ZTZkXHU2ZTZmIiwxNCwiXHU2ZTgwXHU2ZTgxXHU2ZTgyXHU2ZTg0XHU2ZTg3XHU2ZTg4XHU2ZThhIiw0LCJcdTZlOTEiLDYsIlx1NmU5OVx1NmU5YVx1NmU5Ylx1NmU5ZFx1NmU5ZVx1''@;'; put 'put ''NmVhMFx1NmVhMVx1NmVhM1x1NmVhNFx1NmVhNlx1NmVhOFx1NmVhOVx1NmVhYlx1NmVhY1x1NmVhZFx1NmVhZVx1NmViMFx1NmViM1x1NmViNVx1NmViOFx1NmViOVx1NmViY1x1NmViZVx1NmViZlx1NmVjMFx1NmVjM1x1NmVjNFx1NmVjNVx1NmVjNlx1NmVjOFx1NmVjOVx1NmVjYVx1NmVj''@;'; put 'put ''Y1x1NmVjZFx1NmVjZVx1NmVkMFx1NmVkMlx1NmVkNlx1NmVkOFx1NmVkOVx1NmVkYlx1NmVkY1x1NmVkZFx1NmVlM1x1NmVlN1x1NmVlYSIsNV0sWyI5ZDQwIiwiXHU2ZWYwXHU2ZWYxXHU2ZWYyXHU2ZWYzXHU2ZWY1XHU2ZWY2XHU2ZWY3XHU2ZWY4XHU2ZWZhIiw3LCJcdTZmMDNcdTZmMDRc''@;'; put 'put ''dTZmMDVcdTZmMDdcdTZmMDhcdTZmMGEiLDQsIlx1NmYxMFx1NmYxMVx1NmYxMlx1NmYxNiIsOSwiXHU2ZjIxXHU2ZjIyXHU2ZjIzXHU2ZjI1XHU2ZjI2XHU2ZjI3XHU2ZjI4XHU2ZjJjXHU2ZjJlXHU2ZjMwXHU2ZjMyXHU2ZjM0XHU2ZjM1XHU2ZjM3Iiw2LCJcdTZmM2ZcdTZmNDBcdTZmNDFc''@;'; put 'put ''dTZmNDIiXSxbIjlkODAiLCJcdTZmNDNcdTZmNDRcdTZmNDVcdTZmNDhcdTZmNDlcdTZmNGFcdTZmNGNcdTZmNGUiLDksIlx1NmY1OVx1NmY1YVx1NmY1Ylx1NmY1ZFx1NmY1Zlx1NmY2MFx1NmY2MVx1NmY2M1x1NmY2NFx1NmY2NVx1NmY2NyIsNSwiXHU2ZjZmXHU2ZjcwXHU2ZjcxXHU2Zjcz''@;'; put 'put ''XHU2Zjc1XHU2Zjc2XHU2Zjc3XHU2Zjc5XHU2ZjdiXHU2ZjdkIiw2LCJcdTZmODVcdTZmODZcdTZmODdcdTZmOGFcdTZmOGJcdTZmOGYiLDEyLCJcdTZmOWRcdTZmOWVcdTZmOWZcdTZmYTBcdTZmYTIiLDQsIlx1NmZhOCIsMTAsIlx1NmZiNFx1NmZiNVx1NmZiN1x1NmZiOFx1NmZiYSIsNSwi''@;'; put 'put ''XHU2ZmMxXHU2ZmMzIiw1LCJcdTZmY2EiLDYsIlx1NmZkMyIsMTAsIlx1NmZkZlx1NmZlMlx1NmZlM1x1NmZlNFx1NmZlNSJdLFsiOWU0MCIsIlx1NmZlNiIsNywiXHU2ZmYwIiwzMiwiXHU3MDEyIiw3LCJcdTcwMWMiLDYsIlx1NzAyNCIsNl0sWyI5ZTgwIiwiXHU3MDJiIiw5LCJcdTcwMzZc''@;'; put 'put ''dTcwMzdcdTcwMzhcdTcwM2EiLDE3LCJcdTcwNGRcdTcwNGVcdTcwNTAiLDEzLCJcdTcwNWYiLDExLCJcdTcwNmVcdTcwNzFcdTcwNzJcdTcwNzNcdTcwNzRcdTcwNzdcdTcwNzlcdTcwN2FcdTcwN2JcdTcwN2RcdTcwODFcdTcwODJcdTcwODNcdTcwODRcdTcwODZcdTcwODdcdTcwODhcdTcw''@;'; put 'put ''OGJcdTcwOGNcdTcwOGRcdTcwOGZcdTcwOTBcdTcwOTFcdTcwOTNcdTcwOTdcdTcwOThcdTcwOWFcdTcwOWJcdTcwOWUiLDEyLCJcdTcwYjBcdTcwYjJcdTcwYjRcdTcwYjVcdTcwYjZcdTcwYmFcdTcwYmVcdTcwYmZcdTcwYzRcdTcwYzVcdTcwYzZcdTcwYzdcdTcwYzlcdTcwY2IiLDEyLCJc''@;'; put 'put ''dTcwZGEiXSxbIjlmNDAiLCJcdTcwZGNcdTcwZGRcdTcwZGVcdTcwZTBcdTcwZTFcdTcwZTJcdTcwZTNcdTcwZTVcdTcwZWFcdTcwZWVcdTcwZjAiLDYsIlx1NzBmOFx1NzBmYVx1NzBmYlx1NzBmY1x1NzBmZSIsMTAsIlx1NzEwYiIsNCwiXHU3MTExXHU3MTEyXHU3MTE0XHU3MTE3XHU3MTFi''@;'; put 'put ''IiwxMCwiXHU3MTI3Iiw3LCJcdTcxMzJcdTcxMzNcdTcxMzQiXSxbIjlmODAiLCJcdTcxMzVcdTcxMzciLDEzLCJcdTcxNDZcdTcxNDdcdTcxNDhcdTcxNDlcdTcxNGJcdTcxNGRcdTcxNGYiLDEyLCJcdTcxNWRcdTcxNWYiLDQsIlx1NzE2NVx1NzE2OSIsNCwiXHU3MTZmXHU3MTcwXHU3MTcx''@;'; put 'put ''XHU3MTc0XHU3MTc1XHU3MTc2XHU3MTc3XHU3MTc5XHU3MTdiXHU3MTdjXHU3MTdlIiw1LCJcdTcxODUiLDQsIlx1NzE4Ylx1NzE4Y1x1NzE4ZFx1NzE4ZVx1NzE5MFx1NzE5MVx1NzE5Mlx1NzE5M1x1NzE5NVx1NzE5Nlx1NzE5N1x1NzE5YSIsNCwiXHU3MWExIiw2LCJcdTcxYTlcdTcxYWFc''@;'; put 'put ''dTcxYWJcdTcxYWQiLDUsIlx1NzFiNFx1NzFiNlx1NzFiN1x1NzFiOFx1NzFiYSIsOCwiXHU3MWM0Iiw5LCJcdTcxY2YiLDRdLFsiYTA0MCIsIlx1NzFkNiIsOSwiXHU3MWUxXHU3MWUyXHU3MWUzXHU3MWU0XHU3MWU2XHU3MWU4Iiw1LCJcdTcxZWYiLDksIlx1NzFmYSIsMTEsIlx1NzIwNyIs''@;'; put 'put ''MTldLFsiYTA4MCIsIlx1NzIxYlx1NzIxY1x1NzIxZSIsOSwiXHU3MjI5XHU3MjJiXHU3MjJkXHU3MjJlXHU3MjJmXHU3MjMyXHU3MjMzXHU3MjM0XHU3MjNhXHU3MjNjXHU3MjNlXHU3MjQwIiw2LCJcdTcyNDlcdTcyNGFcdTcyNGJcdTcyNGVcdTcyNGZcdTcyNTBcdTcyNTFcdTcyNTNcdTcy''@;'; put 'put ''NTRcdTcyNTVcdTcyNTdcdTcyNThcdTcyNWFcdTcyNWNcdTcyNWVcdTcyNjBcdTcyNjNcdTcyNjRcdTcyNjVcdTcyNjhcdTcyNmFcdTcyNmJcdTcyNmNcdTcyNmRcdTcyNzBcdTcyNzFcdTcyNzNcdTcyNzRcdTcyNzZcdTcyNzdcdTcyNzhcdTcyN2JcdTcyN2NcdTcyN2RcdTcyODJcdTcyODNc''@;'; put 'put ''dTcyODUiLDQsIlx1NzI4Y1x1NzI4ZVx1NzI5MFx1NzI5MVx1NzI5MyIsMTEsIlx1NzJhMCIsMTEsIlx1NzJhZVx1NzJiMVx1NzJiMlx1NzJiM1x1NzJiNVx1NzJiYSIsNiwiXHU3MmM1XHU3MmM2XHU3MmM3XHU3MmM5XHU3MmNhXHU3MmNiXHU3MmNjXHU3MmNmXHU3MmQxXHU3MmQzXHU3MmQ0''@;'; put 'put ''XHU3MmQ1XHU3MmQ2XHU3MmQ4XHU3MmRhXHU3MmRiIl0sWyJhMWExIiwiXHUzMDAwXHUzMDAxXHUzMDAyXHhiN1x1MDJjOVx1MDJjN1x4YThcdTMwMDNcdTMwMDVcdTIwMTRcdWZmNWVcdTIwMTZcdTIwMjZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDgiLDcsIlx1''@;'; put 'put ''MzAxNlx1MzAxN1x1MzAxMFx1MzAxMVx4YjFceGQ3XHhmN1x1MjIzNlx1MjIyN1x1MjIyOFx1MjIxMVx1MjIwZlx1MjIyYVx1MjIyOVx1MjIwOFx1MjIzN1x1MjIxYVx1MjJhNVx1MjIyNVx1MjIyMFx1MjMxMlx1MjI5OVx1MjIyYlx1MjIyZVx1MjI2MVx1MjI0Y1x1MjI0OFx1MjIzZFx1MjIx''@;'; put 'put ''ZFx1MjI2MFx1MjI2ZVx1MjI2Zlx1MjI2NFx1MjI2NVx1MjIxZVx1MjIzNVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmMDRceGE0XHVmZmUwXHVmZmUxXHUyMDMwXHhhN1x1MjExNlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1''@;'; put 'put ''MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjAzYlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxMyJdLFsiYTJhMSIsIlx1MjE3MCIsOV0sWyJhMmIxIiwiXHUyNDg4IiwxOSwiXHUyNDc0IiwxOSwiXHUyNDYwIiw5XSxbImEyZTUiLCJcdTMyMjAiLDldLFsiYTJmMSIsIlx1MjE2MCIsMTFd''@;'; put 'put ''LFsiYTNhMSIsIlx1ZmYwMVx1ZmYwMlx1ZmYwM1x1ZmZlNVx1ZmYwNSIsODgsIlx1ZmZlMyJdLFsiYTRhMSIsIlx1MzA0MSIsODJdLFsiYTVhMSIsIlx1MzBhMSIsODVdLFsiYTZhMSIsIlx1MDM5MSIsMTYsIlx1MDNhMyIsNl0sWyJhNmMxIiwiXHUwM2IxIiwxNiwiXHUwM2MzIiw2XSxbImE2''@;'; put 'put ''ZTAiLCJcdWZlMzVcdWZlMzZcdWZlMzlcdWZlM2FcdWZlM2ZcdWZlNDBcdWZlM2RcdWZlM2VcdWZlNDFcdWZlNDJcdWZlNDNcdWZlNDQiXSxbImE2ZWUiLCJcdWZlM2JcdWZlM2NcdWZlMzdcdWZlMzhcdWZlMzEiXSxbImE2ZjQiLCJcdWZlMzNcdWZlMzQiXSxbImE3YTEiLCJcdTA0MTAiLDUs''@;'; put 'put ''Ilx1MDQwMVx1MDQxNiIsMjVdLFsiYTdkMSIsIlx1MDQzMCIsNSwiXHUwNDUxXHUwNDM2IiwyNV0sWyJhODQwIiwiXHUwMmNhXHUwMmNiXHUwMmQ5XHUyMDEzXHUyMDE1XHUyMDI1XHUyMDM1XHUyMTA1XHUyMTA5XHUyMTk2XHUyMTk3XHUyMTk4XHUyMTk5XHUyMjE1XHUyMjFmXHUyMjIzXHUy''@;'; put 'put ''MjUyXHUyMjY2XHUyMjY3XHUyMmJmXHUyNTUwIiwzNSwiXHUyNTgxIiw2XSxbImE4ODAiLCJcdTI1ODgiLDcsIlx1MjU5M1x1MjU5NFx1MjU5NVx1MjViY1x1MjViZFx1MjVlMlx1MjVlM1x1MjVlNFx1MjVlNVx1MjYwOVx1MjI5NVx1MzAxMlx1MzAxZFx1MzAxZSJdLFsiYThhMSIsIlx1MDEw''@;'; put 'put ''MVx4ZTFcdTAxY2VceGUwXHUwMTEzXHhlOVx1MDExYlx4ZThcdTAxMmJceGVkXHUwMWQwXHhlY1x1MDE0ZFx4ZjNcdTAxZDJceGYyXHUwMTZiXHhmYVx1MDFkNFx4ZjlcdTAxZDZcdTAxZDhcdTAxZGFcdTAxZGNceGZjXHhlYVx1MDI1MSJdLFsiYThiZCIsIlx1MDE0NFx1MDE0OCJdLFsiYThj''@;'; put 'put ''MCIsIlx1MDI2MSJdLFsiYThjNSIsIlx1MzEwNSIsMzZdLFsiYTk0MCIsIlx1MzAyMSIsOCwiXHUzMmEzXHUzMzhlXHUzMzhmXHUzMzljXHUzMzlkXHUzMzllXHUzM2ExXHUzM2M0XHUzM2NlXHUzM2QxXHUzM2QyXHUzM2Q1XHVmZTMwXHVmZmUyXHVmZmU0Il0sWyJhOTU5IiwiXHUyMTIxXHUz''@;'; put 'put ''MjMxIl0sWyJhOTVjIiwiXHUyMDEwIl0sWyJhOTYwIiwiXHUzMGZjXHUzMDliXHUzMDljXHUzMGZkXHUzMGZlXHUzMDA2XHUzMDlkXHUzMDllXHVmZTQ5Iiw5LCJcdWZlNTRcdWZlNTVcdWZlNTZcdWZlNTdcdWZlNTkiLDhdLFsiYTk4MCIsIlx1ZmU2MiIsNCwiXHVmZTY4XHVmZTY5XHVmZTZh''@;'; put 'put ''XHVmZTZiIl0sWyJhOTk2IiwiXHUzMDA3Il0sWyJhOWE0IiwiXHUyNTAwIiw3NV0sWyJhYTQwIiwiXHU3MmRjXHU3MmRkXHU3MmRmXHU3MmUyIiw1LCJcdTcyZWFcdTcyZWJcdTcyZjVcdTcyZjZcdTcyZjlcdTcyZmRcdTcyZmVcdTcyZmZcdTczMDBcdTczMDJcdTczMDQiLDUsIlx1NzMwYlx1''@;'; put 'put ''NzMwY1x1NzMwZFx1NzMwZlx1NzMxMFx1NzMxMVx1NzMxMlx1NzMxNFx1NzMxOFx1NzMxOVx1NzMxYVx1NzMxZlx1NzMyMFx1NzMyM1x1NzMyNFx1NzMyNlx1NzMyN1x1NzMyOFx1NzMyZFx1NzMyZlx1NzMzMFx1NzMzMlx1NzMzM1x1NzMzNVx1NzMzNlx1NzMzYVx1NzMzYlx1NzMzY1x1NzMz''@;'; put 'put ''ZFx1NzM0MCIsOF0sWyJhYTgwIiwiXHU3MzQ5XHU3MzRhXHU3MzRiXHU3MzRjXHU3MzRlXHU3MzRmXHU3MzUxXHU3MzUzXHU3MzU0XHU3MzU1XHU3MzU2XHU3MzU4Iiw3LCJcdTczNjEiLDEwLCJcdTczNmVcdTczNzBcdTczNzEiXSxbImFiNDAiLCJcdTczNzIiLDExLCJcdTczN2YiLDQsIlx1''@;'; put 'put ''NzM4NVx1NzM4Nlx1NzM4OFx1NzM4YVx1NzM4Y1x1NzM4ZFx1NzM4Zlx1NzM5MFx1NzM5Mlx1NzM5M1x1NzM5NFx1NzM5NVx1NzM5N1x1NzM5OFx1NzM5OVx1NzM5YVx1NzM5Y1x1NzM5ZFx1NzM5ZVx1NzNhMFx1NzNhMVx1NzNhMyIsNSwiXHU3M2FhXHU3M2FjXHU3M2FkXHU3M2IxXHU3M2I0''@;'; put 'put ''XHU3M2I1XHU3M2I2XHU3M2I4XHU3M2I5XHU3M2JjXHU3M2JkXHU3M2JlXHU3M2JmXHU3M2MxXHU3M2MzIiw0XSxbImFiODAiLCJcdTczY2JcdTczY2NcdTczY2VcdTczZDIiLDYsIlx1NzNkYVx1NzNkYlx1NzNkY1x1NzNkZFx1NzNkZlx1NzNlMVx1NzNlMlx1NzNlM1x1NzNlNFx1NzNlNlx1''@;'; put 'put ''NzNlOFx1NzNlYVx1NzNlYlx1NzNlY1x1NzNlZVx1NzNlZlx1NzNmMFx1NzNmMVx1NzNmMyIsNF0sWyJhYzQwIiwiXHU3M2Y4IiwxMCwiXHU3NDA0XHU3NDA3XHU3NDA4XHU3NDBiXHU3NDBjXHU3NDBkXHU3NDBlXHU3NDExIiw4LCJcdTc0MWMiLDUsIlx1NzQyM1x1NzQyNFx1NzQyN1x1NzQy''@;'; put 'put ''OVx1NzQyYlx1NzQyZFx1NzQyZlx1NzQzMVx1NzQzMlx1NzQzNyIsNCwiXHU3NDNkXHU3NDNlXHU3NDNmXHU3NDQwXHU3NDQyIiwxMV0sWyJhYzgwIiwiXHU3NDRlIiw2LCJcdTc0NTZcdTc0NThcdTc0NWRcdTc0NjAiLDEyLCJcdTc0NmVcdTc0NmZcdTc0NzEiLDQsIlx1NzQ3OFx1NzQ3OVx1''@;'; put 'put ''NzQ3YSJdLFsiYWQ0MCIsIlx1NzQ3Ylx1NzQ3Y1x1NzQ3ZFx1NzQ3Zlx1NzQ4Mlx1NzQ4NFx1NzQ4NVx1NzQ4Nlx1NzQ4OFx1NzQ4OVx1NzQ4YVx1NzQ4Y1x1NzQ4ZFx1NzQ4Zlx1NzQ5MSIsMTAsIlx1NzQ5ZFx1NzQ5ZiIsNywiXHU3NGFhIiwxNSwiXHU3NGJiIiwxMl0sWyJhZDgwIiwiXHU3''@;'; put 'put ''NGM4Iiw5LCJcdTc0ZDMiLDgsIlx1NzRkZFx1NzRkZlx1NzRlMVx1NzRlNVx1NzRlNyIsNiwiXHU3NGYwXHU3NGYxXHU3NGYyIl0sWyJhZTQwIiwiXHU3NGYzXHU3NGY1XHU3NGY4Iiw2LCJcdTc1MDBcdTc1MDFcdTc1MDJcdTc1MDNcdTc1MDUiLDcsIlx1NzUwZVx1NzUxMFx1NzUxMlx1NzUx''@;'; put 'put ''NFx1NzUxNVx1NzUxNlx1NzUxN1x1NzUxYlx1NzUxZFx1NzUxZVx1NzUyMCIsNCwiXHU3NTI2XHU3NTI3XHU3NTJhXHU3NTJlXHU3NTM0XHU3NTM2XHU3NTM5XHU3NTNjXHU3NTNkXHU3NTNmXHU3NTQxXHU3NTQyXHU3NTQzXHU3NTQ0XHU3NTQ2XHU3NTQ3XHU3NTQ5XHU3NTRhXHU3NTRkXHU3''@;'; put 'put ''NTUwXHU3NTUxXHU3NTUyXHU3NTUzXHU3NTU1XHU3NTU2XHU3NTU3XHU3NTU4Il0sWyJhZTgwIiwiXHU3NTVkIiw3LCJcdTc1NjdcdTc1NjhcdTc1NjlcdTc1NmIiLDYsIlx1NzU3M1x1NzU3NVx1NzU3Nlx1NzU3N1x1NzU3YSIsNCwiXHU3NTgwXHU3NTgxXHU3NTgyXHU3NTg0XHU3NTg1XHU3''@;'; put 'put ''NTg3Il0sWyJhZjQwIiwiXHU3NTg4XHU3NTg5XHU3NThhXHU3NThjXHU3NThkXHU3NThlXHU3NTkwXHU3NTkzXHU3NTk1XHU3NTk4XHU3NTliXHU3NTljXHU3NTllXHU3NWEyXHU3NWE2Iiw0LCJcdTc1YWRcdTc1YjZcdTc1YjdcdTc1YmFcdTc1YmJcdTc1YmZcdTc1YzBcdTc1YzFcdTc1YzZc''@;'; put 'put ''dTc1Y2JcdTc1Y2NcdTc1Y2VcdTc1Y2ZcdTc1ZDBcdTc1ZDFcdTc1ZDNcdTc1ZDdcdTc1ZDlcdTc1ZGFcdTc1ZGNcdTc1ZGRcdTc1ZGZcdTc1ZTBcdTc1ZTFcdTc1ZTVcdTc1ZTlcdTc1ZWNcdTc1ZWRcdTc1ZWVcdTc1ZWZcdTc1ZjJcdTc1ZjNcdTc1ZjVcdTc1ZjZcdTc1ZjdcdTc1ZjhcdTc1''@;'; put 'put ''ZmFcdTc1ZmJcdTc1ZmRcdTc1ZmVcdTc2MDJcdTc2MDRcdTc2MDZcdTc2MDciXSxbImFmODAiLCJcdTc2MDhcdTc2MDlcdTc2MGJcdTc2MGRcdTc2MGVcdTc2MGZcdTc2MTFcdTc2MTJcdTc2MTNcdTc2MTRcdTc2MTZcdTc2MWFcdTc2MWNcdTc2MWRcdTc2MWVcdTc2MjFcdTc2MjNcdTc2Mjdc''@;'; put 'put ''dTc2MjhcdTc2MmNcdTc2MmVcdTc2MmZcdTc2MzFcdTc2MzJcdTc2MzZcdTc2MzdcdTc2MzlcdTc2M2FcdTc2M2JcdTc2M2RcdTc2NDFcdTc2NDJcdTc2NDQiXSxbImIwNDAiLCJcdTc2NDUiLDYsIlx1NzY0ZSIsNSwiXHU3NjU1XHU3NjU3Iiw0LCJcdTc2NWRcdTc2NWZcdTc2NjBcdTc2NjFc''@;'; put 'put ''dTc2NjJcdTc2NjQiLDYsIlx1NzY2Y1x1NzY2ZFx1NzY2ZVx1NzY3MCIsNywiXHU3Njc5XHU3NjdhXHU3NjdjXHU3NjdmXHU3NjgwXHU3NjgxXHU3NjgzXHU3Njg1XHU3Njg5XHU3NjhhXHU3NjhjXHU3NjhkXHU3NjhmXHU3NjkwXHU3NjkyXHU3Njk0XHU3Njk1XHU3Njk3XHU3Njk4XHU3Njlh''@;'; put 'put ''XHU3NjliIl0sWyJiMDgwIiwiXHU3NjljIiw3LCJcdTc2YTUiLDgsIlx1NzZhZlx1NzZiMFx1NzZiM1x1NzZiNSIsOSwiXHU3NmMwXHU3NmMxXHU3NmMzXHU1NTRhXHU5NjNmXHU1N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNjXHU3N2VlXHU4MjdlXHU3ODhk''@;'; put 'put ''XHU3MjMxXHU5Njk4XHU5NzhkXHU2YzI4XHU1Yjg5XHU0ZmZhXHU2MzA5XHU2Njk3XHU1Y2I4XHU4MGZhXHU2ODQ4XHU4MGFlXHU2NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3MWFjXHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2MzRjXHU2MjUyXHU1M2VkXHU1''@;'; put 'put ''NDI3XHU3YjA2XHU1MTZiXHU3NWE0XHU1ZGY0XHU2MmQ0XHU4ZGNiXHU5Nzc2XHU2MjhhXHU4MDE5XHU1NzVkXHU5NzM4XHU3ZjYyXHU3MjM4XHU3NjdkXHU2N2NmXHU3NjdlXHU2NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJjXHU2MjczXHU4MjJjXHU5ODgx''@;'; put 'put ''XHU2NzdmXHU3MjQ4XHU2MjZlXHU2MmNjXHU0ZjM0XHU3NGUzXHU1MzRhXHU1MjllXHU3ZWNhXHU5MGE2XHU1ZTJlXHU2ODg2XHU2OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3OGM1XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4OTEyXHU1MjY1Il0sWyJiMTQw''@;'; put 'put ''IiwiXHU3NmM0XHU3NmM3XHU3NmM5XHU3NmNiXHU3NmNjXHU3NmQzXHU3NmQ1XHU3NmQ5XHU3NmRhXHU3NmRjXHU3NmRkXHU3NmRlXHU3NmUwIiw0LCJcdTc2ZTYiLDcsIlx1NzZmMFx1NzZmM1x1NzZmNVx1NzZmNlx1NzZmN1x1NzZmYVx1NzZmYlx1NzZmZFx1NzZmZlx1NzcwMFx1NzcwMlx1''@;'; put 'put ''NzcwM1x1NzcwNVx1NzcwNlx1NzcwYVx1NzcwY1x1NzcwZSIsMTAsIlx1NzcxYlx1NzcxY1x1NzcxZFx1NzcxZVx1NzcyMVx1NzcyM1x1NzcyNFx1NzcyNVx1NzcyN1x1NzcyYVx1NzcyYiJdLFsiYjE4MCIsIlx1NzcyY1x1NzcyZVx1NzczMCIsNCwiXHU3NzM5XHU3NzNiXHU3NzNkXHU3NzNl''@;'; put 'put ''XHU3NzNmXHU3NzQyXHU3NzQ0XHU3NzQ1XHU3NzQ2XHU3NzQ4Iiw3LCJcdTc3NTIiLDcsIlx1Nzc1Y1x1ODU4NFx1OTZmOVx1NGZkZFx1NTgyMVx1OTk3MVx1NWI5ZFx1NjJiMVx1NjJhNVx1NjZiNFx1OGM3OVx1OWM4ZFx1NzIwNlx1Njc2Zlx1Nzg5MVx1NjBiMlx1NTM1MVx1NTMxN1x1OGY4''@;'; put 'put ''OFx1ODBjY1x1OGQxZFx1OTRhMVx1NTAwZFx1NzJjOFx1NTkwN1x1NjBlYlx1NzExOVx1ODhhYlx1NTk1NFx1ODJlZlx1NjcyY1x1N2IyOFx1NWQyOVx1N2VmN1x1NzUyZFx1NmNmNVx1OGU2Nlx1OGZmOFx1OTAzY1x1OWYzYlx1NmJkNFx1OTExOVx1N2IxNFx1NWY3Y1x1NzhhN1x1ODRkNlx1''@;'; put 'put ''ODUzZFx1NmJkNVx1NmJkOVx1NmJkNlx1NWUwMVx1NWU4N1x1NzVmOVx1OTVlZFx1NjU1ZFx1NWYwYVx1NWZjNVx1OGY5Zlx1NThjMVx1ODFjMlx1OTA3Zlx1OTY1Ylx1OTdhZFx1OGZiOVx1N2YxNlx1OGQyY1x1NjI0MVx1NGZiZlx1NTNkOFx1NTM1ZVx1OGZhOFx1OGZhOVx1OGZhYlx1OTA0''@;'; put 'put ''ZFx1NjgwN1x1NWY2YVx1ODE5OFx1ODg2OFx1OWNkNlx1NjE4Ylx1NTIyYlx1NzYyYVx1NWY2Y1x1NjU4Y1x1NmZkMlx1NmVlOFx1NWJiZVx1NjQ0OFx1NTE3NVx1NTFiMFx1NjdjNFx1NGUxOVx1NzljOVx1OTk3Y1x1NzBiMyJdLFsiYjI0MCIsIlx1Nzc1ZFx1Nzc1ZVx1Nzc1Zlx1Nzc2MFx1''@;'; put 'put ''Nzc2NFx1Nzc2N1x1Nzc2OVx1Nzc2YVx1Nzc2ZCIsMTEsIlx1Nzc3YVx1Nzc3Ylx1Nzc3Y1x1Nzc4MVx1Nzc4Mlx1Nzc4M1x1Nzc4NiIsNSwiXHU3NzhmXHU3NzkwXHU3NzkzIiwxMSwiXHU3N2ExXHU3N2EzXHU3N2E0XHU3N2E2XHU3N2E4XHU3N2FiXHU3N2FkXHU3N2FlXHU3N2FmXHU3N2Ix''@;'; put 'put ''XHU3N2IyXHU3N2I0XHU3N2I2Iiw0XSxbImIyODAiLCJcdTc3YmNcdTc3YmVcdTc3YzAiLDEyLCJcdTc3Y2UiLDgsIlx1NzdkOFx1NzdkOVx1NzdkYVx1NzdkZCIsNCwiXHU3N2U0XHU3NWM1XHU1ZTc2XHU3M2JiXHU4M2UwXHU2NGFkXHU2MmU4XHU5NGI1XHU2Y2UyXHU1MzVhXHU1MmMzXHU2''@;'; put 'put ''NDBmXHU5NGMyXHU3Yjk0XHU0ZjJmXHU1ZTFiXHU4MjM2XHU4MTE2XHU4MThhXHU2ZTI0XHU2Y2NhXHU5YTczXHU2MzU1XHU1MzVjXHU1NGZhXHU4ODY1XHU1N2UwXHU0ZTBkXHU1ZTAzXHU2YjY1XHU3YzNmXHU5MGU4XHU2MDE2XHU2NGU2XHU3MzFjXHU4OGMxXHU2NzUwXHU2MjRkXHU4ZDIy''@;'; put 'put ''XHU3NzZjXHU4ZTI5XHU5MWM3XHU1ZjY5XHU4M2RjXHU4NTIxXHU5OTEwXHU1M2MyXHU4Njk1XHU2YjhiXHU2MGVkXHU2MGU4XHU3MDdmXHU4MmNkXHU4MjMxXHU0ZWQzXHU2Y2E3XHU4NWNmXHU2NGNkXHU3Y2Q5XHU2OWZkXHU2NmY5XHU4MzQ5XHU1Mzk1XHU3YjU2XHU0ZmE3XHU1MThjXHU2''@;'; put 'put ''ZDRiXHU1YzQyXHU4ZTZkXHU2M2QyXHU1M2M5XHU4MzJjXHU4MzM2XHU2N2U1XHU3OGI0XHU2NDNkXHU1YmRmXHU1Yzk0XHU1ZGVlXHU4YmU3XHU2MmM2XHU2N2Y0XHU4YzdhXHU2NDAwXHU2M2JhXHU4NzQ5XHU5OThiXHU4YzE3XHU3ZjIwXHU5NGYyXHU0ZWE3XHU5NjEwXHU5OGE0XHU2NjBj''@;'; put 'put ''XHU3MzE2Il0sWyJiMzQwIiwiXHU3N2U2XHU3N2U4XHU3N2VhXHU3N2VmXHU3N2YwXHU3N2YxXHU3N2YyXHU3N2Y0XHU3N2Y1XHU3N2Y3XHU3N2Y5XHU3N2ZhXHU3N2ZiXHU3N2ZjXHU3ODAzIiw1LCJcdTc4MGFcdTc4MGJcdTc4MGVcdTc4MGZcdTc4MTBcdTc4MTNcdTc4MTVcdTc4MTlcdTc4''@;'; put 'put ''MWJcdTc4MWVcdTc4MjBcdTc4MjFcdTc4MjJcdTc4MjRcdTc4MjhcdTc4MmFcdTc4MmJcdTc4MmVcdTc4MmZcdTc4MzFcdTc4MzJcdTc4MzNcdTc4MzVcdTc4MzZcdTc4M2RcdTc4M2ZcdTc4NDFcdTc4NDJcdTc4NDNcdTc4NDRcdTc4NDZcdTc4NDhcdTc4NDlcdTc4NGFcdTc4NGJcdTc4NGRc''@;'; put 'put ''dTc4NGZcdTc4NTFcdTc4NTNcdTc4NTRcdTc4NThcdTc4NTlcdTc4NWEiXSxbImIzODAiLCJcdTc4NWJcdTc4NWNcdTc4NWUiLDExLCJcdTc4NmYiLDcsIlx1Nzg3OFx1Nzg3OVx1Nzg3YVx1Nzg3Ylx1Nzg3ZCIsNiwiXHU1NzNhXHU1YzFkXHU1ZTM4XHU5NTdmXHU1MDdmXHU4MGEwXHU1Mzgy''@;'; put 'put ''XHU2NTVlXHU3NTQ1XHU1NTMxXHU1MDIxXHU4ZDg1XHU2Mjg0XHU5NDllXHU2NzFkXHU1NjMyXHU2ZjZlXHU1ZGUyXHU1NDM1XHU3MDkyXHU4ZjY2XHU2MjZmXHU2NGE0XHU2M2EzXHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4XHU1ZmYxXHU2Yzg5XHU5NjQ4XHU4''@;'; put 'put ''ZDgxXHU4ODZjXHU2NDkxXHU3OWYwXHU1N2NlXHU2YTU5XHU2MjEwXHU1NDQ4XHU0ZTU4XHU3YTBiXHU2MGU5XHU2Zjg0XHU4YmRhXHU2MjdmXHU5MDFlXHU5YThiXHU3OWU0XHU1NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5YTcwXHU4MDNiXHU5ZjdmXHU0Zjg4''@;'; put 'put ''XHU1YzNhXHU4ZDY0XHU3ZmM1XHU2NWE1XHU3MGJkXHU1MTQ1XHU1MWIyXHU4NjZiXHU1ZDA3XHU1YmEwXHU2MmJkXHU5MTZjXHU3NTc0XHU4ZTBjXHU3YTIwXHU2MTAxXHU3Yjc5XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZhXHU2YTcxXHU1M2E4XHU4ZTg3XHU5''@;'; put 'put ''NTA0XHU5NmNmXHU2ZWMxXHU5NjY0XHU2OTVhIl0sWyJiNDQwIiwiXHU3ODg0XHU3ODg1XHU3ODg2XHU3ODg4XHU3ODhhXHU3ODhiXHU3ODhmXHU3ODkwXHU3ODkyXHU3ODk0XHU3ODk1XHU3ODk2XHU3ODk5XHU3ODlkXHU3ODllXHU3OGEwXHU3OGEyXHU3OGE0XHU3OGE2XHU3OGE4Iiw3LCJc''@;'; put 'put ''dTc4YjVcdTc4YjZcdTc4YjdcdTc4YjhcdTc4YmFcdTc4YmJcdTc4YmNcdTc4YmRcdTc4YmZcdTc4YzBcdTc4YzJcdTc4YzNcdTc4YzRcdTc4YzZcdTc4YzdcdTc4YzhcdTc4Y2NcdTc4Y2RcdTc4Y2VcdTc4Y2ZcdTc4ZDFcdTc4ZDJcdTc4ZDNcdTc4ZDZcdTc4ZDdcdTc4ZDhcdTc4ZGEiLDld''@;'; put 'put ''LFsiYjQ4MCIsIlx1NzhlNFx1NzhlNVx1NzhlNlx1NzhlN1x1NzhlOVx1NzhlYVx1NzhlYlx1NzhlZCIsNCwiXHU3OGYzXHU3OGY1XHU3OGY2XHU3OGY4XHU3OGY5XHU3OGZiIiw1LCJcdTc5MDJcdTc5MDNcdTc5MDRcdTc5MDYiLDYsIlx1Nzg0MFx1NTBhOFx1NzdkN1x1NjQxMFx1ODllNlx1''@;'; put 'put ''NTkwNFx1NjNlM1x1NWRkZFx1N2E3Zlx1NjkzZFx1NGYyMFx1ODIzOVx1NTU5OFx1NGUzMlx1NzVhZVx1N2E5N1x1NWU2Mlx1NWU4YVx1OTVlZlx1NTIxYlx1NTQzOVx1NzA4YVx1NjM3Nlx1OTUyNFx1NTc4Mlx1NjYyNVx1NjkzZlx1OTE4N1x1NTUwN1x1NmRmM1x1N2VhZlx1ODgyMlx1NjIz''@;'; put 'put ''M1x1N2VmMFx1NzViNVx1ODMyOFx1NzhjMVx1OTZjY1x1OGY5ZVx1NjE0OFx1NzRmN1x1OGJjZFx1NmI2NFx1NTIzYVx1OGQ1MFx1NmIyMVx1ODA2YVx1ODQ3MVx1NTZmMVx1NTMwNlx1NGVjZVx1NGUxYlx1NTFkMVx1N2M5N1x1OTE4Ylx1N2MwN1x1NGZjM1x1OGU3Zlx1N2JlMVx1N2E5Y1x1''@;'; put 'put ''NjQ2N1x1NWQxNFx1NTBhY1x1ODEwNlx1NzYwMVx1N2NiOVx1NmRlY1x1N2ZlMFx1Njc1MVx1NWI1OFx1NWJmOFx1NzhjYlx1NjRhZVx1NjQxM1x1NjNhYVx1NjMyYlx1OTUxOVx1NjQyZFx1OGZiZVx1N2I1NFx1NzYyOVx1NjI1M1x1NTkyN1x1NTQ0Nlx1NmI3OVx1NTBhM1x1NjIzNFx1NWUy''@;'; put 'put ''Nlx1NmI4Nlx1NGVlM1x1OGQzN1x1ODg4Ylx1NWY4NVx1OTAyZSJdLFsiYjU0MCIsIlx1NzkwZCIsNSwiXHU3OTE0Iiw5LCJcdTc5MWYiLDQsIlx1NzkyNSIsMTQsIlx1NzkzNSIsNCwiXHU3OTNkXHU3OTNmXHU3OTQyXHU3OTQzXHU3OTQ0XHU3OTQ1XHU3OTQ3XHU3OTRhIiw4LCJcdTc5NTRc''@;'; put 'put ''dTc5NTVcdTc5NThcdTc5NTlcdTc5NjFcdTc5NjMiXSxbImI1ODAiLCJcdTc5NjRcdTc5NjZcdTc5NjlcdTc5NmFcdTc5NmJcdTc5NmNcdTc5NmVcdTc5NzAiLDYsIlx1Nzk3OVx1Nzk3YiIsNCwiXHU3OTgyXHU3OTgzXHU3OTg2XHU3OTg3XHU3OTg4XHU3OTg5XHU3OThiXHU3OThjXHU3OThk''@;'; put 'put ''XHU3OThlXHU3OTkwXHU3OTkxXHU3OTkyXHU2MDIwXHU4MDNkXHU2MmM1XHU0ZTM5XHU1MzU1XHU5MGY4XHU2M2I4XHU4MGM2XHU2NWU2XHU2YzJlXHU0ZjQ2XHU2MGVlXHU2ZGUxXHU4YmRlXHU1ZjM5XHU4NmNiXHU1ZjUzXHU2MzIxXHU1MTVhXHU4MzYxXHU2ODYzXHU1MjAwXHU2MzYzXHU4''@;'; put 'put ''ZTQ4XHU1MDEyXHU1YzliXHU3OTc3XHU1YmZjXHU1MjMwXHU3YTNiXHU2MGJjXHU5MDUzXHU3NmQ3XHU1ZmI3XHU1Zjk3XHU3Njg0XHU4ZTZjXHU3MDZmXHU3NjdiXHU3YjQ5XHU3N2FhXHU1MWYzXHU5MDkzXHU1ODI0XHU0ZjRlXHU2ZWY0XHU4ZmVhXHU2NTRjXHU3YjFiXHU3MmM0XHU2ZGE0''@;'; put 'put ''XHU3ZmRmXHU1YWUxXHU2MmI1XHU1ZTk1XHU1NzMwXHU4NDgyXHU3YjJjXHU1ZTFkXHU1ZjFmXHU5MDEyXHU3ZjE0XHU5OGEwXHU2MzgyXHU2ZWM3XHU3ODk4XHU3MGI5XHU1MTc4XHU5NzViXHU1N2FiXHU3NTM1XHU0ZjQzXHU3NTM4XHU1ZTk3XHU2MGU2XHU1OTYwXHU2ZGMwXHU2YmJmXHU3''@;'; put 'put ''ODg5XHU1M2ZjXHU5NmQ1XHU1MWNiXHU1MjAxXHU2Mzg5XHU1NDBhXHU5NDkzXHU4YzAzXHU4ZGNjXHU3MjM5XHU3ODlmXHU4Nzc2XHU4ZmVkXHU4YzBkXHU1M2UwIl0sWyJiNjQwIiwiXHU3OTkzIiw2LCJcdTc5OWIiLDExLCJcdTc5YTgiLDEwLCJcdTc5YjQiLDQsIlx1NzliY1x1NzliZlx1''@;'; put 'put ''NzljMlx1NzljNFx1NzljNVx1NzljN1x1NzljOFx1NzljYVx1NzljY1x1NzljZVx1NzljZlx1NzlkMFx1NzlkM1x1NzlkNFx1NzlkNlx1NzlkN1x1NzlkOSIsNSwiXHU3OWUwXHU3OWUxXHU3OWUyXHU3OWU1XHU3OWU4XHU3OWVhIl0sWyJiNjgwIiwiXHU3OWVjXHU3OWVlXHU3OWYxIiw2LCJc''@;'; put 'put ''dTc5ZjlcdTc5ZmFcdTc5ZmNcdTc5ZmVcdTc5ZmZcdTdhMDFcdTdhMDRcdTdhMDVcdTdhMDdcdTdhMDhcdTdhMDlcdTdhMGFcdTdhMGNcdTdhMGYiLDQsIlx1N2ExNVx1N2ExNlx1N2ExOFx1N2ExOVx1N2ExYlx1N2ExY1x1NGUwMVx1NzZlZlx1NTNlZVx1OTQ4OVx1OTg3Nlx1OWYwZVx1OTUy''@;'; put 'put ''ZFx1NWI5YVx1OGJhMlx1NGUyMlx1NGUxY1x1NTFhY1x1ODQ2M1x1NjFjMlx1NTJhOFx1NjgwYlx1NGY5N1x1NjA2Ylx1NTFiYlx1NmQxZVx1NTE1Y1x1NjI5Nlx1NjU5N1x1OTY2MVx1OGM0Nlx1OTAxN1x1NzVkOFx1OTBmZFx1Nzc2M1x1NmJkMlx1NzI4YVx1NzJlY1x1OGJmYlx1NTgzNVx1''@;'; put 'put ''Nzc3OVx1OGQ0Y1x1Njc1Y1x1OTU0MFx1ODA5YVx1NWVhNlx1NmUyMVx1NTk5Mlx1N2FlZlx1NzdlZFx1OTUzYlx1NmJiNVx1NjVhZFx1N2YwZVx1NTgwNlx1NTE1MVx1OTYxZlx1NWJmOVx1NThhOVx1NTQyOFx1OGU3Mlx1NjU2Nlx1OTg3Zlx1NTZlNFx1OTQ5ZFx1NzZmZVx1OTA0MVx1NjM4''@;'; put 'put ''N1x1NTRjNlx1NTkxYVx1NTkzYVx1NTc5Ylx1OGViMlx1NjczNVx1OGRmYVx1ODIzNVx1NTI0MVx1NjBmMFx1NTgxNVx1ODZmZVx1NWNlOFx1OWU0NVx1NGZjNFx1OTg5ZFx1OGJiOVx1NWEyNVx1NjA3Nlx1NTM4NFx1NjI3Y1x1OTA0Zlx1OTEwMlx1OTk3Zlx1NjA2OVx1ODAwY1x1NTEzZlx1''@;'; put 'put ''ODAzM1x1NWMxNFx1OTk3NVx1NmQzMVx1NGU4YyJdLFsiYjc0MCIsIlx1N2ExZFx1N2ExZlx1N2EyMVx1N2EyMlx1N2EyNCIsMTQsIlx1N2EzNFx1N2EzNVx1N2EzNlx1N2EzOFx1N2EzYVx1N2EzZVx1N2E0MCIsNSwiXHU3YTQ3Iiw5LCJcdTdhNTIiLDQsIlx1N2E1OCIsMTZdLFsiYjc4MCIs''@;'; put 'put ''Ilx1N2E2OSIsNiwiXHU3YTcxXHU3YTcyXHU3YTczXHU3YTc1XHU3YTdiXHU3YTdjXHU3YTdkXHU3YTdlXHU3YTgyXHU3YTg1XHU3YTg3XHU3YTg5XHU3YThhXHU3YThiXHU3YThjXHU3YThlXHU3YThmXHU3YTkwXHU3YTkzXHU3YTk0XHU3YTk5XHU3YTlhXHU3YTliXHU3YTllXHU3YWExXHU3''@;'; put 'put ''YWEyXHU4ZDMwXHU1M2QxXHU3ZjVhXHU3YjRmXHU0ZjEwXHU0ZTRmXHU5NjAwXHU2Y2Q1XHU3M2QwXHU4NWU5XHU1ZTA2XHU3NTZhXHU3ZmZiXHU2YTBhXHU3N2ZlXHU5NDkyXHU3ZTQxXHU1MWUxXHU3MGU2XHU1M2NkXHU4ZmQ0XHU4MzAzXHU4ZDI5XHU3MmFmXHU5OTZkXHU2Y2RiXHU1NzRh''@;'; put 'put ''XHU4MmIzXHU2NWI5XHU4MGFhXHU2MjNmXHU5NjMyXHU1OWE4XHU0ZWZmXHU4YmJmXHU3ZWJhXHU2NTNlXHU4M2YyXHU5NzVlXHU1NTYxXHU5OGRlXHU4MGE1XHU1MzJhXHU4YmZkXHU1NDIwXHU4MGJhXHU1ZTlmXHU2Y2I4XHU4ZDM5XHU4MmFjXHU5MTVhXHU1NDI5XHU2YzFiXHU1MjA2XHU3''@;'; put 'put ''ZWI3XHU1NzVmXHU3MTFhXHU2YzdlXHU3Yzg5XHU1OTRiXHU0ZWZkXHU1ZmZmXHU2MTI0XHU3Y2FhXHU0ZTMwXHU1YzAxXHU2N2FiXHU4NzAyXHU1Y2YwXHU5NTBiXHU5OGNlXHU3NWFmXHU3MGZkXHU5MDIyXHU1MWFmXHU3ZjFkXHU4YmJkXHU1OTQ5XHU1MWU0XHU0ZjViXHU1NDI2XHU1OTJi''@;'; put 'put ''XHU2NTc3XHU4MGE0XHU1Yjc1XHU2Mjc2XHU2MmMyXHU4ZjkwXHU1ZTQ1XHU2YzFmXHU3YjI2XHU0ZjBmXHU0ZmQ4XHU2NzBkIl0sWyJiODQwIiwiXHU3YWEzXHU3YWE0XHU3YWE3XHU3YWE5XHU3YWFhXHU3YWFiXHU3YWFlIiw0LCJcdTdhYjQiLDEwLCJcdTdhYzAiLDEwLCJcdTdhY2MiLDks''@;'; put 'put ''Ilx1N2FkN1x1N2FkOFx1N2FkYVx1N2FkYlx1N2FkY1x1N2FkZFx1N2FlMVx1N2FlMlx1N2FlNFx1N2FlNyIsNSwiXHU3YWVlXHU3YWYwXHU3YWYxXHU3YWYyXHU3YWYzIl0sWyJiODgwIiwiXHU3YWY0Iiw0LCJcdTdhZmJcdTdhZmNcdTdhZmVcdTdiMDBcdTdiMDFcdTdiMDJcdTdiMDVcdTdi''@;'; put 'put ''MDdcdTdiMDlcdTdiMGNcdTdiMGRcdTdiMGVcdTdiMTBcdTdiMTJcdTdiMTNcdTdiMTZcdTdiMTdcdTdiMThcdTdiMWFcdTdiMWNcdTdiMWRcdTdiMWZcdTdiMjFcdTdiMjJcdTdiMjNcdTdiMjdcdTdiMjlcdTdiMmRcdTZkNmVcdTZkYWFcdTc5OGZcdTg4YjFcdTVmMTdcdTc1MmJcdTYyOWFc''@;'; put 'put ''dThmODVcdTRmZWZcdTkxZGNcdTY1YTdcdTgxMmZcdTgxNTFcdTVlOWNcdTgxNTBcdThkNzRcdTUyNmZcdTg5ODZcdThkNGJcdTU5MGRcdTUwODVcdTRlZDhcdTk2MWNcdTcyMzZcdTgxNzlcdThkMWZcdTViY2NcdThiYTNcdTk2NDRcdTU5ODdcdTdmMWFcdTU0OTBcdTU2NzZcdTU2MGVcdThi''@;'; put 'put ''ZTVcdTY1MzlcdTY5ODJcdTk0OTlcdTc2ZDZcdTZlODlcdTVlNzJcdTc1MThcdTY3NDZcdTY3ZDFcdTdhZmZcdTgwOWRcdThkNzZcdTYxMWZcdTc5YzZcdTY1NjJcdThkNjNcdTUxODhcdTUyMWFcdTk0YTJcdTdmMzhcdTgwOWJcdTdlYjJcdTVjOTdcdTZlMmZcdTY3NjBcdTdiZDlcdTc2OGJc''@;'; put 'put ''dTlhZDhcdTgxOGZcdTdmOTRcdTdjZDVcdTY0MWVcdTk1NTBcdTdhM2ZcdTU0NGFcdTU0ZTVcdTZiNGNcdTY0MDFcdTYyMDhcdTllM2RcdTgwZjNcdTc1OTlcdTUyNzJcdTk3NjlcdTg0NWJcdTY4M2NcdTg2ZTRcdTk2MDFcdTk2OTRcdTk0ZWNcdTRlMmFcdTU0MDRcdTdlZDlcdTY4MzlcdThk''@;'; put 'put ''ZGZcdTgwMTVcdTY2ZjRcdTVlOWFcdTdmYjkiXSxbImI5NDAiLCJcdTdiMmZcdTdiMzBcdTdiMzJcdTdiMzRcdTdiMzVcdTdiMzZcdTdiMzdcdTdiMzlcdTdiM2JcdTdiM2RcdTdiM2YiLDUsIlx1N2I0Nlx1N2I0OFx1N2I0YVx1N2I0ZFx1N2I0ZVx1N2I1M1x1N2I1NVx1N2I1N1x1N2I1OVx1''@;'; put 'put ''N2I1Y1x1N2I1ZVx1N2I1Zlx1N2I2MVx1N2I2MyIsMTAsIlx1N2I2Zlx1N2I3MFx1N2I3M1x1N2I3NFx1N2I3Nlx1N2I3OFx1N2I3YVx1N2I3Y1x1N2I3ZFx1N2I3Zlx1N2I4MVx1N2I4Mlx1N2I4M1x1N2I4NFx1N2I4NiIsNiwiXHU3YjhlXHU3YjhmIl0sWyJiOTgwIiwiXHU3YjkxXHU3Yjky''@;'; put 'put ''XHU3YjkzXHU3Yjk2XHU3Yjk4XHU3Yjk5XHU3YjlhXHU3YjliXHU3YjllXHU3YjlmXHU3YmEwXHU3YmEzXHU3YmE0XHU3YmE1XHU3YmFlXHU3YmFmXHU3YmIwXHU3YmIyXHU3YmIzXHU3YmI1XHU3YmI2XHU3YmI3XHU3YmI5Iiw3LCJcdTdiYzJcdTdiYzNcdTdiYzRcdTU3YzJcdTgwM2ZcdTY4''@;'; put 'put ''OTdcdTVkZTVcdTY1M2JcdTUyOWZcdTYwNmRcdTlmOWFcdTRmOWJcdThlYWNcdTUxNmNcdTViYWJcdTVmMTNcdTVkZTlcdTZjNWVcdTYyZjFcdThkMjFcdTUxNzFcdTk0YTlcdTUyZmVcdTZjOWZcdTgyZGZcdTcyZDdcdTU3YTJcdTY3ODRcdThkMmRcdTU5MWZcdThmOWNcdTgzYzdcdTU0OTVc''@;'; put 'put ''dTdiOGRcdTRmMzBcdTZjYmRcdTViNjRcdTU5ZDFcdTlmMTNcdTUzZTRcdTg2Y2FcdTlhYThcdThjMzdcdTgwYTFcdTY1NDVcdTk4N2VcdTU2ZmFcdTk2YzdcdTUyMmVcdTc0ZGNcdTUyNTBcdTViZTFcdTYzMDJcdTg5MDJcdTRlNTZcdTYyZDBcdTYwMmFcdTY4ZmFcdTUxNzNcdTViOThcdTUx''@;'; put 'put ''YTBcdTg5YzJcdTdiYTFcdTk5ODZcdTdmNTBcdTYwZWZcdTcwNGNcdThkMmZcdTUxNDlcdTVlN2ZcdTkwMWJcdTc0NzBcdTg5YzRcdTU3MmRcdTc4NDVcdTVmNTJcdTlmOWZcdTk1ZmFcdThmNjhcdTliM2NcdThiZTFcdTc2NzhcdTY4NDJcdTY3ZGNcdThkZWFcdThkMzVcdTUyM2RcdThmOGFc''@;'; put 'put ''dTZlZGFcdTY4Y2RcdTk1MDVcdTkwZWRcdTU2ZmRcdTY3OWNcdTg4ZjlcdThmYzdcdTU0YzgiXSxbImJhNDAiLCJcdTdiYzVcdTdiYzhcdTdiYzlcdTdiY2FcdTdiY2JcdTdiY2RcdTdiY2VcdTdiY2ZcdTdiZDBcdTdiZDJcdTdiZDQiLDQsIlx1N2JkYlx1N2JkY1x1N2JkZVx1N2JkZlx1N2Jl''@;'; put 'put ''MFx1N2JlMlx1N2JlM1x1N2JlNFx1N2JlN1x1N2JlOFx1N2JlOVx1N2JlYlx1N2JlY1x1N2JlZFx1N2JlZlx1N2JmMFx1N2JmMiIsNCwiXHU3YmY4XHU3YmY5XHU3YmZhXHU3YmZiXHU3YmZkXHU3YmZmIiw3LCJcdTdjMDhcdTdjMDlcdTdjMGFcdTdjMGRcdTdjMGVcdTdjMTAiLDUsIlx1N2Mx''@;'; put 'put ''N1x1N2MxOFx1N2MxOSJdLFsiYmE4MCIsIlx1N2MxYSIsNCwiXHU3YzIwIiw1LCJcdTdjMjhcdTdjMjlcdTdjMmIiLDEyLCJcdTdjMzkiLDUsIlx1N2M0Mlx1OWFiOFx1NWI2OVx1NmQ3N1x1NmMyNlx1NGVhNVx1NWJiM1x1OWE4N1x1OTE2M1x1NjFhOFx1OTBhZlx1OTdlOVx1NTQyYlx1NmRi''@;'; put 'put ''NVx1NWJkMlx1NTFmZFx1NTU4YVx1N2Y1NVx1N2ZmMFx1NjRiY1x1NjM0ZFx1NjVmMVx1NjFiZVx1NjA4ZFx1NzEwYVx1NmM1N1x1NmM0OVx1NTkyZlx1Njc2ZFx1ODIyYVx1NThkNVx1NTY4ZVx1OGM2YVx1NmJlYlx1OTBkZFx1NTk3ZFx1ODAxN1x1NTNmN1x1NmQ2OVx1NTQ3NVx1NTU5ZFx1''@;'; put 'put ''ODM3N1x1ODNjZlx1NjgzOFx1NzliZVx1NTQ4Y1x1NGY1NVx1NTQwOFx1NzZkMlx1OGM4OVx1OTYwMlx1NmNiM1x1NmRiOFx1OGQ2Ylx1ODkxMFx1OWU2NFx1OGQzYVx1NTYzZlx1OWVkMVx1NzVkNVx1NWY4OFx1NzJlMFx1NjA2OFx1NTRmY1x1NGVhOFx1NmEyYVx1ODg2MVx1NjA1Mlx1OGY3''@;'; put 'put ''MFx1NTRjNFx1NzBkOFx1ODY3OVx1OWUzZlx1NmQyYVx1NWI4Zlx1NWYxOFx1N2VhMlx1NTU4OVx1NGZhZlx1NzMzNFx1NTQzY1x1NTM5YVx1NTAxOVx1NTQwZVx1NTQ3Y1x1NGU0ZVx1NWZmZFx1NzQ1YVx1NThmNlx1ODQ2Ylx1ODBlMVx1ODc3NFx1NzJkMFx1N2NjYVx1NmU1NiJdLFsiYmI0''@;'; put 'put ''MCIsIlx1N2M0MyIsOSwiXHU3YzRlIiwzNiwiXHU3Yzc1Iiw1LCJcdTdjN2UiLDldLFsiYmI4MCIsIlx1N2M4OFx1N2M4YSIsNiwiXHU3YzkzXHU3Yzk0XHU3Yzk2XHU3Yzk5XHU3YzlhXHU3YzliXHU3Y2EwXHU3Y2ExXHU3Y2EzXHU3Y2E2XHU3Y2E3XHU3Y2E4XHU3Y2E5XHU3Y2FiXHU3Y2Fj''@;'; put 'put ''XHU3Y2FkXHU3Y2FmXHU3Y2IwXHU3Y2I0Iiw0LCJcdTdjYmFcdTdjYmJcdTVmMjdcdTg2NGVcdTU1MmNcdTYyYTRcdTRlOTJcdTZjYWFcdTYyMzdcdTgyYjFcdTU0ZDdcdTUzNGVcdTczM2VcdTZlZDFcdTc1M2JcdTUyMTJcdTUzMTZcdThiZGRcdTY5ZDBcdTVmOGFcdTYwMDBcdTZkZWVcdTU3''@;'; put 'put ''NGZcdTZiMjJcdTczYWZcdTY4NTNcdThmZDhcdTdmMTNcdTYzNjJcdTYwYTNcdTU1MjRcdTc1ZWFcdThjNjJcdTcxMTVcdTZkYTNcdTViYTZcdTVlN2JcdTgzNTJcdTYxNGNcdTllYzRcdTc4ZmFcdTg3NTdcdTdjMjdcdTc2ODdcdTUxZjBcdTYwZjZcdTcxNGNcdTY2NDNcdTVlNGNcdTYwNGRc''@;'; put 'put ''dThjMGVcdTcwNzBcdTYzMjVcdThmODlcdTVmYmRcdTYwNjJcdTg2ZDRcdTU2ZGVcdTZiYzFcdTYwOTRcdTYxNjdcdTUzNDlcdTYwZTBcdTY2NjZcdThkM2ZcdTc5ZmRcdTRmMWFcdTcwZTlcdTZjNDdcdThiYjNcdThiZjJcdTdlZDhcdTgzNjRcdTY2MGZcdTVhNWFcdTliNDJcdTZkNTFcdTZk''@;'; put 'put ''ZjdcdThjNDFcdTZkM2JcdTRmMTlcdTcwNmJcdTgzYjdcdTYyMTZcdTYwZDFcdTk3MGRcdThkMjdcdTc5NzhcdTUxZmJcdTU3M2VcdTU3ZmFcdTY3M2FcdTc1NzhcdTdhM2RcdTc5ZWZcdTdiOTUiXSxbImJjNDAiLCJcdTdjYmZcdTdjYzBcdTdjYzJcdTdjYzNcdTdjYzRcdTdjYzZcdTdjYzlc''@;'; put 'put ''dTdjY2JcdTdjY2UiLDYsIlx1N2NkOFx1N2NkYVx1N2NkYlx1N2NkZFx1N2NkZVx1N2NlMSIsNiwiXHU3Y2U5Iiw1LCJcdTdjZjAiLDcsIlx1N2NmOVx1N2NmYVx1N2NmYyIsMTMsIlx1N2QwYiIsNV0sWyJiYzgwIiwiXHU3ZDExIiwxNCwiXHU3ZDIxXHU3ZDIzXHU3ZDI0XHU3ZDI1XHU3ZDI2''@;'; put 'put ''XHU3ZDI4XHU3ZDI5XHU3ZDJhXHU3ZDJjXHU3ZDJkXHU3ZDJlXHU3ZDMwIiw2LCJcdTgwOGNcdTk5NjVcdThmZjlcdTZmYzBcdThiYTVcdTllMjFcdTU5ZWNcdTdlZTlcdTdmMDlcdTU0MDlcdTY3ODFcdTY4ZDhcdThmOTFcdTdjNGRcdTk2YzZcdTUzY2FcdTYwMjVcdTc1YmVcdTZjNzJcdTUz''@;'; put 'put ''NzNcdTVhYzlcdTdlYTdcdTYzMjRcdTUxZTBcdTgxMGFcdTVkZjFcdTg0ZGZcdTYyODBcdTUxODBcdTViNjNcdTRmMGVcdTc5NmRcdTUyNDJcdTYwYjhcdTZkNGVcdTViYzRcdTViYzJcdThiYTFcdThiYjBcdTY1ZTJcdTVmY2NcdTk2NDVcdTU5OTNcdTdlZTdcdTdlYWFcdTU2MDlcdTY3Yjdc''@;'; put 'put ''dTU5MzlcdTRmNzNcdTViYjZcdTUyYTBcdTgzNWFcdTk4OGFcdThkM2VcdTc1MzJcdTk0YmVcdTUwNDdcdTdhM2NcdTRlZjdcdTY3YjZcdTlhN2VcdTVhYzFcdTZiN2NcdTc2ZDFcdTU3NWFcdTVjMTZcdTdiM2FcdTk1ZjRcdTcxNGVcdTUxN2NcdTgwYTlcdTgyNzBcdTU5NzhcdTdmMDRcdTgz''@;'; put 'put ''MjdcdTY4YzBcdTY3ZWNcdTc4YjFcdTc4NzdcdTYyZTNcdTYzNjFcdTdiODBcdTRmZWRcdTUyNmFcdTUxY2ZcdTgzNTBcdTY5ZGJcdTkyNzRcdThkZjVcdThkMzFcdTg5YzFcdTk1MmVcdTdiYWRcdTRlZjYiXSxbImJkNDAiLCJcdTdkMzciLDU0LCJcdTdkNmYiLDddLFsiYmQ4MCIsIlx1N2Q3''@;'; put 'put ''OCIsMzIsIlx1NTA2NVx1ODIzMFx1NTI1MVx1OTk2Zlx1NmUxMFx1NmU4NVx1NmRhN1x1NWVmYVx1NTBmNVx1NTlkY1x1NWMwNlx1NmQ0Nlx1NmM1Zlx1NzU4Nlx1ODQ4Ylx1Njg2OFx1NTk1Nlx1OGJiMlx1NTMyMFx1OTE3MVx1OTY0ZFx1ODU0OVx1NjkxMlx1NzkwMVx1NzEyNlx1ODBmNlx1''@;'; put 'put ''NGVhNFx1OTBjYVx1NmQ0N1x1OWE4NFx1NWEwN1x1NTZiY1x1NjQwNVx1OTRmMFx1NzdlYlx1NGZhNVx1ODExYVx1NzJlMVx1ODlkMlx1OTk3YVx1N2YzNFx1N2VkZVx1NTI3Zlx1NjU1OVx1OTE3NVx1OGY3Zlx1OGY4M1x1NTNlYlx1N2E5Nlx1NjNlZFx1NjNhNVx1NzY4Nlx1NzlmOFx1ODg1''@;'; put 'put ''N1x1OTYzNlx1NjIyYVx1NTJhYlx1ODI4Mlx1Njg1NFx1Njc3MFx1NjM3N1x1Nzc2Ylx1N2FlZFx1NmQwMVx1N2VkM1x1ODllM1x1NTlkMFx1NjIxMlx1ODVjOVx1ODJhNVx1NzU0Y1x1NTAxZlx1NGVjYlx1NzVhNVx1OGJlYlx1NWM0YVx1NWRmZVx1N2I0Ylx1NjVhNFx1OTFkMVx1NGVjYVx1''@;'; put 'put ''NmQyNVx1ODk1Zlx1N2QyN1x1OTUyNlx1NGVjNVx1OGMyOFx1OGZkYlx1OTc3M1x1NjY0Ylx1Nzk4MVx1OGZkMVx1NzBlY1x1NmQ3OCJdLFsiYmU0MCIsIlx1N2Q5OSIsMTIsIlx1N2RhNyIsNiwiXHU3ZGFmIiw0Ml0sWyJiZTgwIiwiXHU3ZGRhIiwzMiwiXHU1YzNkXHU1MmIyXHU4MzQ2XHU1''@;'; put 'put ''MTYyXHU4MzBlXHU3NzViXHU2Njc2XHU5Y2I4XHU0ZWFjXHU2MGNhXHU3Y2JlXHU3Y2IzXHU3ZWNmXHU0ZTk1XHU4YjY2XHU2NjZmXHU5ODg4XHU5NzU5XHU1ODgzXHU2NTZjXHU5NTVjXHU1Zjg0XHU3NWM5XHU5NzU2XHU3YWRmXHU3YWRlXHU1MWMwXHU3MGFmXHU3YTk4XHU2M2VhXHU3YTc2''@;'; put 'put ''XHU3ZWEwXHU3Mzk2XHU5N2VkXHU0ZTQ1XHU3MDc4XHU0ZTVkXHU5MTUyXHU1M2E5XHU2NTUxXHU2NWU3XHU4MWZjXHU4MjA1XHU1NDhlXHU1YzMxXHU3NTlhXHU5N2EwXHU2MmQ4XHU3MmQ5XHU3NWJkXHU1YzQ1XHU5YTc5XHU4M2NhXHU1YzQwXHU1NDgwXHU3N2U5XHU0ZTNlXHU2Y2FlXHU4''@;'; put 'put ''MDVhXHU2MmQyXHU2MzZlXHU1ZGU4XHU1MTc3XHU4ZGRkXHU4ZTFlXHU5NTJmXHU0ZmYxXHU1M2U1XHU2MGU3XHU3MGFjXHU1MjY3XHU2MzUwXHU5ZTQzXHU1YTFmXHU1MDI2XHU3NzM3XHU1Mzc3XHU3ZWUyXHU2NDg1XHU2NTJiXHU2Mjg5XHU2Mzk4XHU1MDE0XHU3MjM1XHU4OWM5XHU1MWIz''@;'; put 'put ''XHU4YmMwXHU3ZWRkXHU1NzQ3XHU4M2NjXHU5NGE3XHU1MTliXHU1NDFiXHU1Y2ZiIl0sWyJiZjQwIiwiXHU3ZGZiIiw2Ml0sWyJiZjgwIiwiXHU3ZTNhXHU3ZTNjIiw0LCJcdTdlNDIiLDQsIlx1N2U0OCIsMjEsIlx1NGZjYVx1N2FlM1x1NmQ1YVx1OTBlMVx1OWE4Zlx1NTU4MFx1NTQ5Nlx1''@;'; put 'put ''NTM2MVx1NTRhZlx1NWYwMFx1NjNlOVx1Njk3N1x1NTFlZlx1NjE2OFx1NTIwYVx1NTgyYVx1NTJkOFx1NTc0ZVx1NzgwZFx1NzcwYlx1NWViN1x1NjE3N1x1N2NlMFx1NjI1Ylx1NjI5N1x1NGVhMlx1NzA5NVx1ODAwM1x1NjJmN1x1NzBlNFx1OTc2MFx1NTc3N1x1ODJkYlx1NjdlZlx1Njhm''@;'; put 'put ''NVx1NzhkNVx1OTg5N1x1NzlkMVx1NThmM1x1NTRiM1x1NTNlZlx1NmUzNFx1NTE0Ylx1NTIzYlx1NWJhMlx1OGJmZVx1ODBhZlx1NTU0M1x1NTdhNlx1NjA3M1x1NTc1MVx1NTQyZFx1N2E3YVx1NjA1MFx1NWI1NFx1NjNhN1x1NjJhMFx1NTNlM1x1NjI2M1x1NWJjN1x1NjdhZlx1NTRlZFx1''@;'; put 'put ''N2E5Zlx1ODJlNlx1OTE3N1x1NWU5M1x1ODhlNFx1NTkzOFx1NTdhZVx1NjMwZVx1OGRlOFx1ODBlZlx1NTc1N1x1N2I3N1x1NGZhOVx1NWZlYlx1NWJiZFx1NmIzZVx1NTMyMVx1N2I1MFx1NzJjMlx1Njg0Nlx1NzdmZlx1NzczNlx1NjVmN1x1NTFiNVx1NGU4Zlx1NzZkNFx1NWNiZlx1N2Fh''@;'; put 'put ''NVx1ODQ3NVx1NTk0ZVx1OWI0MVx1NTA4MCJdLFsiYzA0MCIsIlx1N2U1ZSIsMzUsIlx1N2U4MyIsMjMsIlx1N2U5Y1x1N2U5ZFx1N2U5ZSJdLFsiYzA4MCIsIlx1N2VhZVx1N2ViNFx1N2ViYlx1N2ViY1x1N2VkNlx1N2VlNFx1N2VlY1x1N2VmOVx1N2YwYVx1N2YxMFx1N2YxZVx1N2YzN1x1''@;'; put 'put ''N2YzOVx1N2YzYiIsNiwiXHU3ZjQzXHU3ZjQ2Iiw5LCJcdTdmNTJcdTdmNTNcdTk5ODhcdTYxMjdcdTZlODNcdTU3NjRcdTY2MDZcdTYzNDZcdTU2ZjBcdTYyZWNcdTYyNjlcdTVlZDNcdTk2MTRcdTU3ODNcdTYyYzlcdTU1ODdcdTg3MjFcdTgxNGFcdThmYTNcdTU1NjZcdTgzYjFcdTY3NjVc''@;'; put 'put ''dThkNTZcdTg0ZGRcdTVhNmFcdTY4MGZcdTYyZTZcdTdiZWVcdTk2MTFcdTUxNzBcdTZmOWNcdThjMzBcdTYzZmRcdTg5YzhcdTYxZDJcdTdmMDZcdTcwYzJcdTZlZTVcdTc0MDVcdTY5OTRcdTcyZmNcdTVlY2FcdTkwY2VcdTY3MTdcdTZkNmFcdTYzNWVcdTUyYjNcdTcyNjJcdTgwMDFcdTRm''@;'; put 'put ''NmNcdTU5ZTVcdTkxNmFcdTcwZDlcdTZkOWRcdTUyZDJcdTRlNTBcdTk2ZjdcdTk1NmRcdTg1N2VcdTc4Y2FcdTdkMmZcdTUxMjFcdTU3OTJcdTY0YzJcdTgwOGJcdTdjN2JcdTZjZWFcdTY4ZjFcdTY5NWVcdTUxYjdcdTUzOThcdTY4YThcdTcyODFcdTllY2VcdTdiZjFcdTcyZjhcdTc5YmJc''@;'; put 'put ''dTZmMTNcdTc0MDZcdTY3NGVcdTkxY2NcdTljYTRcdTc5M2NcdTgzODlcdTgzNTRcdTU0MGZcdTY4MTdcdTRlM2RcdTUzODlcdTUyYjFcdTc4M2VcdTUzODZcdTUyMjlcdTUwODhcdTRmOGJcdTRmZDAiXSxbImMxNDAiLCJcdTdmNTZcdTdmNTlcdTdmNWJcdTdmNWNcdTdmNWRcdTdmNWVcdTdm''@;'; put 'put ''NjBcdTdmNjMiLDQsIlx1N2Y2Ylx1N2Y2Y1x1N2Y2ZFx1N2Y2Zlx1N2Y3MFx1N2Y3M1x1N2Y3NVx1N2Y3Nlx1N2Y3N1x1N2Y3OFx1N2Y3YVx1N2Y3Ylx1N2Y3Y1x1N2Y3ZFx1N2Y3Zlx1N2Y4MFx1N2Y4MiIsNywiXHU3ZjhiXHU3ZjhkXHU3ZjhmIiw0LCJcdTdmOTUiLDQsIlx1N2Y5Ylx1N2Y5''@;'; put 'put ''Y1x1N2ZhMFx1N2ZhMlx1N2ZhM1x1N2ZhNVx1N2ZhNlx1N2ZhOCIsNiwiXHU3ZmIxIl0sWyJjMTgwIiwiXHU3ZmIzIiw0LCJcdTdmYmFcdTdmYmJcdTdmYmVcdTdmYzBcdTdmYzJcdTdmYzNcdTdmYzRcdTdmYzZcdTdmYzdcdTdmYzhcdTdmYzlcdTdmY2JcdTdmY2RcdTdmY2YiLDQsIlx1N2Zk''@;'; put 'put ''Nlx1N2ZkN1x1N2ZkOSIsNSwiXHU3ZmUyXHU3ZmUzXHU3NWUyXHU3YWNiXHU3YzkyXHU2Y2E1XHU5NmI2XHU1MjliXHU3NDgzXHU1NGU5XHU0ZmU5XHU4MDU0XHU4M2IyXHU4ZmRlXHU5NTcwXHU1ZWM5XHU2MDFjXHU2ZDlmXHU1ZTE4XHU2NTViXHU4MTM4XHU5NGZlXHU2MDRiXHU3MGJjXHU3''@;'; put 'put ''ZWMzXHU3Y2FlXHU1MWM5XHU2ODgxXHU3Y2IxXHU4MjZmXHU0ZTI0XHU4Zjg2XHU5MWNmXHU2NjdlXHU0ZWFlXHU4YzA1XHU2NGE5XHU4MDRhXHU1MGRhXHU3NTk3XHU3MWNlXHU1YmU1XHU4ZmJkXHU2ZjY2XHU0ZTg2XHU2NDgyXHU5NTYzXHU1ZWQ2XHU2NTk5XHU1MjE3XHU4OGMyXHU3MGM4''@;'; put 'put ''XHU1MmEzXHU3MzBlXHU3NDMzXHU2Nzk3XHU3OGY3XHU5NzE2XHU0ZTM0XHU5MGJiXHU5Y2RlXHU2ZGNiXHU1MWRiXHU4ZDQxXHU1NDFkXHU2MmNlXHU3M2IyXHU4M2YxXHU5NmY2XHU5Zjg0XHU5NGMzXHU0ZjM2XHU3ZjlhXHU1MWNjXHU3MDc1XHU5Njc1XHU1Y2FkXHU5ODg2XHU1M2U2XHU0''@;'; put 'put ''ZWU0XHU2ZTljXHU3NDA5XHU2OWI0XHU3ODZiXHU5OThmXHU3NTU5XHU1MjE4XHU3NjI0XHU2ZDQxXHU2N2YzXHU1MTZkXHU5Zjk5XHU4MDRiXHU1NDk5XHU3YjNjXHU3YWJmIl0sWyJjMjQwIiwiXHU3ZmU0XHU3ZmU3XHU3ZmU4XHU3ZmVhXHU3ZmViXHU3ZmVjXHU3ZmVkXHU3ZmVmXHU3ZmYy''@;'; put 'put ''XHU3ZmY0Iiw2LCJcdTdmZmRcdTdmZmVcdTdmZmZcdTgwMDJcdTgwMDdcdTgwMDhcdTgwMDlcdTgwMGFcdTgwMGVcdTgwMGZcdTgwMTFcdTgwMTNcdTgwMWFcdTgwMWJcdTgwMWRcdTgwMWVcdTgwMWZcdTgwMjFcdTgwMjNcdTgwMjRcdTgwMmIiLDUsIlx1ODAzMlx1ODAzNFx1ODAzOVx1ODAz''@;'; put 'put ''YVx1ODAzY1x1ODAzZVx1ODA0MFx1ODA0MVx1ODA0NFx1ODA0NVx1ODA0N1x1ODA0OFx1ODA0OVx1ODA0ZVx1ODA0Zlx1ODA1MFx1ODA1MVx1ODA1M1x1ODA1NVx1ODA1Nlx1ODA1NyJdLFsiYzI4MCIsIlx1ODA1OVx1ODA1YiIsMTMsIlx1ODA2YiIsNSwiXHU4MDcyIiwxMSwiXHU5Njg2XHU1''@;'; put 'put ''Nzg0XHU2MmUyXHU5NjQ3XHU2OTdjXHU1YTA0XHU2NDAyXHU3YmQzXHU2ZjBmXHU5NjRiXHU4MmE2XHU1MzYyXHU5ODg1XHU1ZTkwXHU3MDg5XHU2M2IzXHU1MzY0XHU4NjRmXHU5YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVlXHU3OTg0XHU1ZjU1XHU5NjQ2''@;'; put 'put ''XHU2MjJlXHU5YTc0XHU1NDE1XHU5NGRkXHU0ZmEzXHU2NWM1XHU1YzY1XHU1YzYxXHU3ZjE1XHU4NjUxXHU2YzJmXHU1ZjhiXHU3Mzg3XHU2ZWU0XHU3ZWZmXHU1Y2U2XHU2MzFiXHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4ZjZlXHU0ZjI2XHU0ZWQxXHU2''@;'; put 'put ''Y2E2XHU3ZWI2XHU4YmJhXHU4NDFkXHU4N2JhXHU3ZjU3XHU5MDNiXHU5NTIzXHU3YmE5XHU5YWExXHU4OGY4XHU4NDNkXHU2ZDFiXHU5YTg2XHU3ZWRjXHU1OTg4XHU5ZWJiXHU3MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2NiXHU0ZTcwXHU5ZWE2XHU1MzU2''@;'; put 'put ''XHU4ZmM4XHU4MTA5XHU3NzkyXHU5OTkyXHU4NmVlXHU2ZWUxXHU4NTEzXHU2NmZjXHU2MTYyXHU2ZjJiIl0sWyJjMzQwIiwiXHU4MDdlXHU4MDgxXHU4MDgyXHU4MDg1XHU4MDg4XHU4MDhhXHU4MDhkIiw1LCJcdTgwOTRcdTgwOTVcdTgwOTdcdTgwOTlcdTgwOWVcdTgwYTNcdTgwYTZcdTgw''@;'; put 'put ''YTdcdTgwYThcdTgwYWNcdTgwYjBcdTgwYjNcdTgwYjVcdTgwYjZcdTgwYjhcdTgwYjlcdTgwYmJcdTgwYzVcdTgwYzciLDQsIlx1ODBjZiIsNiwiXHU4MGQ4XHU4MGRmXHU4MGUwXHU4MGUyXHU4MGUzXHU4MGU2XHU4MGVlXHU4MGY1XHU4MGY3XHU4MGY5XHU4MGZiXHU4MGZlXHU4MGZmXHU4''@;'; put 'put ''MTAwXHU4MTAxXHU4MTAzXHU4MTA0XHU4MTA1XHU4MTA3XHU4MTA4XHU4MTBiIl0sWyJjMzgwIiwiXHU4MTBjXHU4MTE1XHU4MTE3XHU4MTE5XHU4MTFiXHU4MTFjXHU4MTFkXHU4MTFmIiwxMiwiXHU4MTJkXHU4MTJlXHU4MTMwXHU4MTMzXHU4MTM0XHU4MTM1XHU4MTM3XHU4MTM5Iiw0LCJc''@;'; put 'put ''dTgxM2ZcdThjMjlcdTgyOTJcdTgzMmJcdTc2ZjJcdTZjMTNcdTVmZDlcdTgzYmRcdTczMmJcdTgzMDVcdTk1MWFcdTZiZGJcdTc3ZGJcdTk0YzZcdTUzNmZcdTgzMDJcdTUxOTJcdTVlM2RcdThjOGNcdThkMzhcdTRlNDhcdTczYWJcdTY3OWFcdTY4ODVcdTkxNzZcdTk3MDlcdTcxNjRcdTZj''@;'; put 'put ''YTFcdTc3MDlcdTVhOTJcdTk1NDFcdTZiY2ZcdTdmOGVcdTY2MjdcdTViZDBcdTU5YjlcdTVhOWFcdTk1ZThcdTk1ZjdcdTRlZWNcdTg0MGNcdTg0OTlcdTZhYWNcdTc2ZGZcdTk1MzBcdTczMWJcdTY4YTZcdTViNWZcdTc3MmZcdTkxOWFcdTk3NjFcdTdjZGNcdThmZjdcdThjMWNcdTVmMjVc''@;'; put 'put ''dTdjNzNcdTc5ZDhcdTg5YzVcdTZjY2NcdTg3MWNcdTViYzZcdTVlNDJcdTY4YzlcdTc3MjBcdTdlZjVcdTUxOTVcdTUxNGRcdTUyYzlcdTVhMjlcdTdmMDVcdTk3NjJcdTgyZDdcdTYzY2ZcdTc3ODRcdTg1ZDBcdTc5ZDJcdTZlM2FcdTVlOTlcdTU5OTlcdTg1MTFcdTcwNmRcdTZjMTFcdTYy''@;'; put 'put ''YmZcdTc2YmZcdTY1NGZcdTYwYWZcdTk1ZmRcdTY2MGVcdTg3OWZcdTllMjNcdTk0ZWRcdTU0MGRcdTU0N2RcdThjMmNcdTY0NzgiXSxbImM0NDAiLCJcdTgxNDAiLDUsIlx1ODE0N1x1ODE0OVx1ODE0ZFx1ODE0ZVx1ODE0Zlx1ODE1Mlx1ODE1Nlx1ODE1N1x1ODE1OFx1ODE1YiIsNCwiXHU4''@;'; put 'put ''MTYxXHU4MTYyXHU4MTYzXHU4MTY0XHU4MTY2XHU4MTY4XHU4MTZhXHU4MTZiXHU4MTZjXHU4MTZmXHU4MTcyXHU4MTczXHU4MTc1XHU4MTc2XHU4MTc3XHU4MTc4XHU4MTgxXHU4MTgzIiw0LCJcdTgxODlcdTgxOGJcdTgxOGNcdTgxOGRcdTgxOGVcdTgxOTBcdTgxOTIiLDUsIlx1ODE5OVx1''@;'; put 'put ''ODE5YVx1ODE5ZSIsNCwiXHU4MWE0XHU4MWE1Il0sWyJjNDgwIiwiXHU4MWE3XHU4MWE5XHU4MWFiIiw3LCJcdTgxYjQiLDUsIlx1ODFiY1x1ODFiZFx1ODFiZVx1ODFiZlx1ODFjNFx1ODFjNVx1ODFjN1x1ODFjOFx1ODFjOVx1ODFjYlx1ODFjZCIsNiwiXHU2NDc5XHU4NjExXHU2YTIxXHU4''@;'; put 'put ''MTljXHU3OGU4XHU2NDY5XHU5YjU0XHU2MmI5XHU2NzJiXHU4M2FiXHU1OGE4XHU5ZWQ4XHU2Y2FiXHU2ZjIwXHU1YmRlXHU5NjRjXHU4YzBiXHU3MjVmXHU2N2QwXHU2MmM3XHU3MjYxXHU0ZWE5XHU1OWM2XHU2YmNkXHU1ODkzXHU2NmFlXHU1ZTU1XHU1MmRmXHU2MTU1XHU2NzI4XHU3NmVl''@;'; put 'put ''XHU3NzY2XHU3MjY3XHU3YTQ2XHU2MmZmXHU1NGVhXHU1NDUwXHU5NGEwXHU5MGEzXHU1YTFjXHU3ZWIzXHU2YzE2XHU0ZTQzXHU1OTc2XHU4MDEwXHU1OTQ4XHU1MzU3XHU3NTM3XHU5NmJlXHU1NmNhXHU2MzIwXHU4MTExXHU2MDdjXHU5NWY5XHU2ZGQ2XHU1NDYyXHU5OTgxXHU1MTg1XHU1''@;'; put 'put ''YWU5XHU4MGZkXHU1OWFlXHU5NzEzXHU1MDJhXHU2Y2U1XHU1YzNjXHU2MmRmXHU0ZjYwXHU1MzNmXHU4MTdiXHU5MDA2XHU2ZWJhXHU4NTJiXHU2MmM4XHU1ZTc0XHU3OGJlXHU2NGI1XHU2MzdiXHU1ZmY1XHU1YTE4XHU5MTdmXHU5ZTFmXHU1YzNmXHU2MzRmXHU4MDQyXHU1YjdkXHU1NTZl''@;'; put 'put ''XHU5NTRhXHU5NTRkXHU2ZDg1XHU2MGE4XHU2N2UwXHU3MmRlXHU1MWRkXHU1YjgxIl0sWyJjNTQwIiwiXHU4MWQ0IiwxNCwiXHU4MWU0XHU4MWU1XHU4MWU2XHU4MWU4XHU4MWU5XHU4MWViXHU4MWVlIiw0LCJcdTgxZjUiLDUsIlx1ODFmZFx1ODFmZlx1ODIwM1x1ODIwNyIsNCwiXHU4MjBl''@;'; put 'put ''XHU4MjBmXHU4MjExXHU4MjEzXHU4MjE1Iiw1LCJcdTgyMWRcdTgyMjBcdTgyMjRcdTgyMjVcdTgyMjZcdTgyMjdcdTgyMjlcdTgyMmVcdTgyMzJcdTgyM2FcdTgyM2NcdTgyM2RcdTgyM2YiXSxbImM1ODAiLCJcdTgyNDBcdTgyNDFcdTgyNDJcdTgyNDNcdTgyNDVcdTgyNDZcdTgyNDhcdTgy''@;'; put 'put ''NGFcdTgyNGNcdTgyNGRcdTgyNGVcdTgyNTAiLDcsIlx1ODI1OVx1ODI1Ylx1ODI1Y1x1ODI1ZFx1ODI1ZVx1ODI2MCIsNywiXHU4MjY5XHU2MmU3XHU2Y2RlXHU3MjViXHU2MjZkXHU5NGFlXHU3ZWJkXHU4MTEzXHU2ZDUzXHU1MTljXHU1ZjA0XHU1OTc0XHU1MmFhXHU2MDEyXHU1OTczXHU2''@;'; put 'put ''Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3Y2VmXHU4YmZhXHU1NGU2XHU2YjI3XHU5ZTI1XHU2YmI0XHU4NWQ1XHU1NDU1XHU1MDc2XHU2Y2E0XHU1NTZhXHU4ZGI0XHU3MjJjXHU1ZTE1XHU2MDE1XHU3NDM2XHU2MmNkXHU2MzkyXHU3MjRjXHU1Zjk4XHU2ZTQzXHU2ZDNlXHU2NTAw''@;'; put 'put ''XHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0XHU1MjI0XHU1M2RiXHU0ZTUzXHU1ZTllXHU2NWMxXHU4MDJhXHU4MGQ2XHU2MjliXHU1NDg2XHU1MjI4XHU3MGFlXHU4ODhkXHU4ZGQxXHU2Y2UxXHU1NDc4XHU4MGRhXHU1N2Y5XHU4OGY0XHU4ZDU0XHU5NjZhXHU5MTRkXHU0ZjY5XHU2''@;'; put 'put ''YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3MGY5XHU2ZjhlXHU1ZjZkXHU4NGVjXHU2OGRhXHU3ODdjXHU3YmY3XHU4MWE4XHU2NzBiXHU5ZTRmXHU2MzY3XHU3OGIwXHU1NzZmXHU3ODEyXHU5NzM5XHU2Mjc5XHU2MmFiXHU1Mjg4XHU3NDM1XHU2YmQ3Il0sWyJjNjQwIiwiXHU4MjZh''@;'; put 'put ''XHU4MjZiXHU4MjZjXHU4MjZkXHU4MjcxXHU4Mjc1XHU4Mjc2XHU4Mjc3XHU4Mjc4XHU4MjdiXHU4MjdjXHU4MjgwXHU4MjgxXHU4MjgzXHU4Mjg1XHU4Mjg2XHU4Mjg3XHU4Mjg5XHU4MjhjXHU4MjkwXHU4MjkzXHU4Mjk0XHU4Mjk1XHU4Mjk2XHU4MjlhXHU4MjliXHU4MjllXHU4MmEwXHU4''@;'; put 'put ''MmEyXHU4MmEzXHU4MmE3XHU4MmIyXHU4MmI1XHU4MmI2XHU4MmJhXHU4MmJiXHU4MmJjXHU4MmJmXHU4MmMwXHU4MmMyXHU4MmMzXHU4MmM1XHU4MmM2XHU4MmM5XHU4MmQwXHU4MmQ2XHU4MmQ5XHU4MmRhXHU4MmRkXHU4MmUyXHU4MmU3XHU4MmU4XHU4MmU5XHU4MmVhXHU4MmVjXHU4MmVk''@;'; put 'put ''XHU4MmVlXHU4MmYwXHU4MmYyXHU4MmYzXHU4MmY1XHU4MmY2XHU4MmY4Il0sWyJjNjgwIiwiXHU4MmZhXHU4MmZjIiw0LCJcdTgzMGFcdTgzMGJcdTgzMGRcdTgzMTBcdTgzMTJcdTgzMTNcdTgzMTZcdTgzMThcdTgzMTlcdTgzMWQiLDksIlx1ODMyOVx1ODMyYVx1ODMyZVx1ODMzMFx1ODMz''@;'; put 'put ''Mlx1ODMzN1x1ODMzYlx1ODMzZFx1NTU2NFx1ODEzZVx1NzViMlx1NzZhZVx1NTMzOVx1NzVkZVx1NTBmYlx1NWM0MVx1OGI2Y1x1N2JjN1x1NTA0Zlx1NzI0N1x1OWE5N1x1OThkOFx1NmYwMlx1NzRlMlx1Nzk2OFx1NjQ4N1x1NzdhNVx1NjJmY1x1OTg5MVx1OGQyYlx1NTRjMVx1ODA1OFx1''@;'; put 'put ''NGU1Mlx1NTc2YVx1ODJmOVx1ODQwZFx1NWU3M1x1NTFlZFx1NzRmNlx1OGJjNFx1NWM0Zlx1NTc2MVx1NmNmY1x1OTg4N1x1NWE0Nlx1NzgzNFx1OWI0NFx1OGZlYlx1N2M5NVx1NTI1Nlx1NjI1MVx1OTRmYVx1NGVjNlx1ODM4Nlx1ODQ2MVx1ODNlOVx1ODRiMlx1NTdkNFx1NjczNFx1NTcw''@;'; put 'put ''M1x1NjY2ZVx1NmQ2Nlx1OGMzMVx1NjZkZFx1NzAxMVx1NjcxZlx1NmIzYVx1NjgxNlx1NjIxYVx1NTliYlx1NGUwM1x1NTFjNFx1NmYwNlx1NjdkMlx1NmM4Zlx1NTE3Nlx1NjhjYlx1NTk0N1x1NmI2N1x1NzU2Nlx1NWQwZVx1ODExMFx1OWY1MFx1NjVkN1x1Nzk0OFx1Nzk0MVx1OWE5MVx1''@;'; put 'put ''OGQ3N1x1NWM4Mlx1NGU1ZVx1NGYwMVx1NTQyZlx1NTk1MVx1NzgwY1x1NTY2OFx1NmMxNFx1OGZjNFx1NWYwM1x1NmM3ZFx1NmNlM1x1OGJhYlx1NjM5MCJdLFsiYzc0MCIsIlx1ODMzZVx1ODMzZlx1ODM0MVx1ODM0Mlx1ODM0NFx1ODM0NVx1ODM0OFx1ODM0YSIsNCwiXHU4MzUzXHU4MzU1''@;'; put 'put ''Iiw0LCJcdTgzNWRcdTgzNjJcdTgzNzAiLDYsIlx1ODM3OVx1ODM3YVx1ODM3ZSIsNiwiXHU4Mzg3XHU4Mzg4XHU4MzhhXHU4MzhiXHU4MzhjXHU4MzhkXHU4MzhmXHU4MzkwXHU4MzkxXHU4Mzk0XHU4Mzk1XHU4Mzk2XHU4Mzk3XHU4Mzk5XHU4MzlhXHU4MzlkXHU4MzlmXHU4M2ExIiw2LCJc''@;'; put 'put ''dTgzYWNcdTgzYWRcdTgzYWUiXSxbImM3ODAiLCJcdTgzYWZcdTgzYjVcdTgzYmJcdTgzYmVcdTgzYmZcdTgzYzJcdTgzYzNcdTgzYzRcdTgzYzZcdTgzYzhcdTgzYzlcdTgzY2JcdTgzY2RcdTgzY2VcdTgzZDBcdTgzZDFcdTgzZDJcdTgzZDNcdTgzZDVcdTgzZDdcdTgzZDlcdTgzZGFcdTgz''@;'; put 'put ''ZGJcdTgzZGVcdTgzZTJcdTgzZTNcdTgzZTRcdTgzZTZcdTgzZTdcdTgzZThcdTgzZWJcdTgzZWNcdTgzZWRcdTYwNzBcdTZkM2RcdTcyNzVcdTYyNjZcdTk0OGVcdTk0YzVcdTUzNDNcdThmYzFcdTdiN2VcdTRlZGZcdThjMjZcdTRlN2VcdTllZDRcdTk0YjFcdTk0YjNcdTUyNGRcdTZmNWNc''@;'; put 'put ''dTkwNjNcdTZkNDVcdThjMzRcdTU4MTFcdTVkNGNcdTZiMjBcdTZiNDlcdTY3YWFcdTU0NWJcdTgxNTRcdTdmOGNcdTU4OTlcdTg1MzdcdTVmM2FcdTYyYTJcdTZhNDdcdTk1MzlcdTY1NzJcdTYwODRcdTY4NjVcdTc3YTdcdTRlNTRcdTRmYThcdTVkZTdcdTk3OThcdTY0YWNcdTdmZDhcdTVj''@;'; put 'put ''ZWRcdTRmY2ZcdTdhOGRcdTUyMDdcdTgzMDRcdTRlMTRcdTYwMmZcdTdhODNcdTk0YTZcdTRmYjVcdTRlYjJcdTc5ZTZcdTc0MzRcdTUyZTRcdTgyYjlcdTY0ZDJcdTc5YmRcdTViZGRcdTZjODFcdTk3NTJcdThmN2JcdTZjMjJcdTUwM2VcdTUzN2ZcdTZlMDVcdTY0Y2VcdTY2NzRcdTZjMzBc''@;'; put 'put ''dTYwYzVcdTk4NzdcdThiZjdcdTVlODZcdTc0M2NcdTdhNzdcdTc5Y2JcdTRlMThcdTkwYjFcdTc0MDNcdTZjNDJcdTU2ZGFcdTkxNGJcdTZjYzVcdThkOGJcdTUzM2FcdTg2YzZcdTY2ZjJcdThlYWZcdTVjNDhcdTlhNzFcdTZlMjAiXSxbImM4NDAiLCJcdTgzZWVcdTgzZWZcdTgzZjMiLDQs''@;'; put 'put ''Ilx1ODNmYVx1ODNmYlx1ODNmY1x1ODNmZVx1ODNmZlx1ODQwMFx1ODQwMlx1ODQwNVx1ODQwN1x1ODQwOFx1ODQwOVx1ODQwYVx1ODQxMFx1ODQxMiIsNSwiXHU4NDE5XHU4NDFhXHU4NDFiXHU4NDFlIiw1LCJcdTg0MjkiLDcsIlx1ODQzMiIsNSwiXHU4NDM5XHU4NDNhXHU4NDNiXHU4NDNl''@;'; put 'put ''Iiw3LCJcdTg0NDdcdTg0NDhcdTg0NDkiXSxbImM4ODAiLCJcdTg0NGEiLDYsIlx1ODQ1MiIsNCwiXHU4NDU4XHU4NDVkXHU4NDVlXHU4NDVmXHU4NDYwXHU4NDYyXHU4NDY0Iiw0LCJcdTg0NmFcdTg0NmVcdTg0NmZcdTg0NzBcdTg0NzJcdTg0NzRcdTg0NzdcdTg0NzlcdTg0N2JcdTg0N2Nc''@;'; put 'put ''dTUzZDZcdTVhMzZcdTlmOGJcdThkYTNcdTUzYmJcdTU3MDhcdTk4YTdcdTY3NDNcdTkxOWJcdTZjYzlcdTUxNjhcdTc1Y2FcdTYyZjNcdTcyYWNcdTUyMzhcdTUyOWRcdTdmM2FcdTcwOTRcdTc2MzhcdTUzNzRcdTllNGFcdTY5YjdcdTc4NmVcdTk2YzBcdTg4ZDlcdTdmYTRcdTcxMzZcdTcx''@;'; put 'put ''YzNcdTUxODlcdTY3ZDNcdTc0ZTRcdTU4ZTRcdTY1MThcdTU2YjdcdThiYTlcdTk5NzZcdTYyNzBcdTdlZDVcdTYwZjlcdTcwZWRcdTU4ZWNcdTRlYzFcdTRlYmFcdTVmY2RcdTk3ZTdcdTRlZmJcdThiYTRcdTUyMDNcdTU5OGFcdTdlYWJcdTYyNTRcdTRlY2RcdTY1ZTVcdTYyMGVcdTgzMzhc''@;'; put 'put ''dTg0YzlcdTgzNjNcdTg3OGRcdTcxOTRcdTZlYjZcdTViYjlcdTdlZDJcdTUxOTdcdTYzYzlcdTY3ZDRcdTgwODlcdTgzMzlcdTg4MTVcdTUxMTJcdTViN2FcdTU5ODJcdThmYjFcdTRlNzNcdTZjNWRcdTUxNjVcdTg5MjVcdThmNmZcdTk2MmVcdTg1NGFcdTc0NWVcdTk1MTBcdTk1ZjBcdTZk''@;'; put 'put ''YTZcdTgyZTVcdTVmMzFcdTY0OTJcdTZkMTJcdTg0MjhcdTgxNmVcdTljYzNcdTU4NWVcdThkNWJcdTRlMDlcdTUzYzEiXSxbImM5NDAiLCJcdTg0N2QiLDQsIlx1ODQ4M1x1ODQ4NFx1ODQ4NVx1ODQ4Nlx1ODQ4YVx1ODQ4ZFx1ODQ4ZiIsNywiXHU4NDk4XHU4NDlhXHU4NDliXHU4NDlkXHU4''@;'; put 'put ''NDllXHU4NDlmXHU4NGEwXHU4NGEyIiwxMiwiXHU4NGIwXHU4NGIxXHU4NGIzXHU4NGI1XHU4NGI2XHU4NGI3XHU4NGJiXHU4NGJjXHU4NGJlXHU4NGMwXHU4NGMyXHU4NGMzXHU4NGM1XHU4NGM2XHU4NGM3XHU4NGM4XHU4NGNiXHU4NGNjXHU4NGNlXHU4NGNmXHU4NGQyXHU4NGQ0XHU4NGQ1''@;'; put 'put ''XHU4NGQ3Il0sWyJjOTgwIiwiXHU4NGQ4Iiw0LCJcdTg0ZGVcdTg0ZTFcdTg0ZTJcdTg0ZTRcdTg0ZTciLDQsIlx1ODRlZFx1ODRlZVx1ODRlZlx1ODRmMSIsMTAsIlx1ODRmZFx1ODRmZVx1ODUwMFx1ODUwMVx1ODUwMlx1NGYxZVx1NjU2M1x1Njg1MVx1NTVkM1x1NGUyN1x1NjQxNFx1OWE5''@;'; put 'put ''YVx1NjI2Ylx1NWFjMlx1NzQ1Zlx1ODI3Mlx1NmRhOVx1NjhlZVx1NTBlN1x1ODM4ZVx1NzgwMlx1Njc0MFx1NTIzOVx1NmM5OVx1N2ViMVx1NTBiYlx1NTU2NVx1NzE1ZVx1N2I1Ylx1NjY1Mlx1NzNjYVx1ODJlYlx1Njc0OVx1NWM3MVx1NTIyMFx1NzE3ZFx1ODg2Ylx1OTVlYVx1OTY1NVx1''@;'; put 'put ''NjRjNVx1OGQ2MVx1ODFiM1x1NTU4NFx1NmM1NVx1NjI0N1x1N2YyZVx1NTg5Mlx1NGYyNFx1NTU0Nlx1OGQ0Zlx1NjY0Y1x1NGUwYVx1NWMxYVx1ODhmM1x1NjhhMlx1NjM0ZVx1N2EwZFx1NzBlN1x1ODI4ZFx1NTJmYVx1OTdmNlx1NWMxMVx1NTRlOFx1OTBiNVx1N2VjZFx1NTk2Mlx1OGQ0''@;'; put 'put ''YVx1ODZjN1x1ODIwY1x1ODIwZFx1OGQ2Nlx1NjQ0NFx1NWMwNFx1NjE1MVx1NmQ4OVx1NzkzZVx1OGJiZVx1NzgzN1x1NzUzM1x1NTQ3Ylx1NGYzOFx1OGVhYlx1NmRmMVx1NWEyMFx1N2VjNVx1Nzk1ZVx1NmM4OFx1NWJhMVx1NWE3Nlx1NzUxYVx1ODBiZVx1NjE0ZVx1NmUxN1x1NThmMFx1''@;'; put 'put ''NzUxZlx1NzUyNVx1NzI3Mlx1NTM0N1x1N2VmMyJdLFsiY2E0MCIsIlx1ODUwMyIsOCwiXHU4NTBkXHU4NTBlXHU4NTBmXHU4NTEwXHU4NTEyXHU4NTE0XHU4NTE1XHU4NTE2XHU4NTE4XHU4NTE5XHU4NTFiXHU4NTFjXHU4NTFkXHU4NTFlXHU4NTIwXHU4NTIyIiw4LCJcdTg1MmQiLDksIlx1''@;'; put 'put ''ODUzZSIsNCwiXHU4NTQ0XHU4NTQ1XHU4NTQ2XHU4NTQ3XHU4NTRiIiwxMF0sWyJjYTgwIiwiXHU4NTU3XHU4NTU4XHU4NTVhXHU4NTViXHU4NTVjXHU4NTVkXHU4NTVmIiw0LCJcdTg1NjVcdTg1NjZcdTg1NjdcdTg1NjkiLDgsIlx1ODU3M1x1ODU3NVx1ODU3Nlx1ODU3N1x1ODU3OFx1ODU3''@;'; put 'put ''Y1x1ODU3ZFx1ODU3Zlx1ODU4MFx1ODU4MVx1NzcwMVx1NzZkYlx1NTI2OVx1ODBkY1x1NTcyM1x1NWUwOFx1NTkzMVx1NzJlZVx1NjViZFx1NmU3Zlx1OGJkN1x1NWMzOFx1ODY3MVx1NTM0MVx1NzdmM1x1NjJmZVx1NjVmNlx1NGVjMFx1OThkZlx1ODY4MFx1NWI5ZVx1OGJjNlx1NTNmMlx1''@;'; put 'put ''NzdlMlx1NGY3Zlx1NWM0ZVx1OWE3Nlx1NTljYlx1NWYwZlx1NzkzYVx1NThlYlx1NGUxNlx1NjdmZlx1NGU4Ylx1NjJlZFx1OGE5M1x1OTAxZFx1NTJiZlx1NjYyZlx1NTVkY1x1NTY2Y1x1OTAwMlx1NGVkNVx1NGY4ZFx1OTFjYVx1OTk3MFx1NmMwZlx1NWUwMlx1NjA0M1x1NWJhNFx1ODlj''@;'; put 'put ''Nlx1OGJkNVx1NjUzNlx1NjI0Ylx1OTk5Nlx1NWI4OFx1NWJmZlx1NjM4OFx1NTUyZVx1NTNkN1x1NzYyNlx1NTE3ZFx1ODUyY1x1NjdhMlx1NjhiM1x1NmI4YVx1NjI5Mlx1OGY5M1x1NTNkNFx1ODIxMlx1NmRkMVx1NzU4Zlx1NGU2Nlx1OGQ0ZVx1NWI3MFx1NzE5Zlx1ODVhZlx1NjY5MVx1''@;'; put 'put ''NjZkOVx1N2Y3Mlx1ODcwMFx1OWVjZFx1OWYyMFx1NWM1ZVx1NjcyZlx1OGZmMFx1NjgxMVx1Njc1Zlx1NjIwZFx1N2FkNlx1NTg4NVx1NWViNlx1NjU3MFx1NmYzMSJdLFsiY2I0MCIsIlx1ODU4Mlx1ODU4M1x1ODU4Nlx1ODU4OCIsNiwiXHU4NTkwIiwxMCwiXHU4NTlkIiw2LCJcdTg1YTVc''@;'; put 'put ''dTg1YTZcdTg1YTdcdTg1YTlcdTg1YWJcdTg1YWNcdTg1YWRcdTg1YjEiLDUsIlx1ODViOFx1ODViYSIsNiwiXHU4NWMyIiw2LCJcdTg1Y2EiLDQsIlx1ODVkMVx1ODVkMiJdLFsiY2I4MCIsIlx1ODVkNFx1ODVkNiIsNSwiXHU4NWRkIiw2LCJcdTg1ZTVcdTg1ZTZcdTg1ZTdcdTg1ZThcdTg1''@;'; put 'put ''ZWEiLDE0LCJcdTYwNTVcdTUyMzdcdTgwMGRcdTY0NTRcdTg4NzBcdTc1MjlcdTVlMDVcdTY4MTNcdTYyZjRcdTk3MWNcdTUzY2NcdTcyM2RcdThjMDFcdTZjMzRcdTc3NjFcdTdhMGVcdTU0MmVcdTc3YWNcdTk4N2FcdTgyMWNcdThiZjRcdTc4NTVcdTY3MTRcdTcwYzFcdTY1YWZcdTY0OTVc''@;'; put 'put ''dTU2MzZcdTYwMWRcdTc5YzFcdTUzZjhcdTRlMWRcdTZiN2JcdTgwODZcdTViZmFcdTU1ZTNcdTU2ZGJcdTRmM2FcdTRmM2NcdTk5NzJcdTVkZjNcdTY3N2VcdTgwMzhcdTYwMDJcdTk4ODJcdTkwMDFcdTViOGJcdThiYmNcdThiZjVcdTY0MWNcdTgyNThcdTY0ZGVcdTU1ZmRcdTgyY2ZcdTkx''@;'; put 'put ''NjVcdTRmZDdcdTdkMjBcdTkwMWZcdTdjOWZcdTUwZjNcdTU4NTFcdTZlYWZcdTViYmZcdThiYzlcdTgwODNcdTkxNzhcdTg0OWNcdTdiOTdcdTg2N2RcdTk2OGJcdTk2OGZcdTdlZTVcdTlhZDNcdTc4OGVcdTVjODFcdTdhNTdcdTkwNDJcdTk2YTdcdTc5NWZcdTViNTlcdTYzNWZcdTdiMGJc''@;'; put 'put ''dTg0ZDFcdTY4YWRcdTU1MDZcdTdmMjlcdTc0MTBcdTdkMjJcdTk1MDFcdTYyNDBcdTU4NGNcdTRlZDZcdTViODNcdTU5NzlcdTU4NTQiXSxbImNjNDAiLCJcdTg1ZjlcdTg1ZmFcdTg1ZmNcdTg1ZmRcdTg1ZmVcdTg2MDAiLDQsIlx1ODYwNiIsMTAsIlx1ODYxMlx1ODYxM1x1ODYxNFx1ODYx''@;'; put 'put ''NVx1ODYxNyIsMTUsIlx1ODYyOFx1ODYyYSIsMTMsIlx1ODYzOVx1ODYzYVx1ODYzYlx1ODYzZFx1ODYzZVx1ODYzZlx1ODY0MCJdLFsiY2M4MCIsIlx1ODY0MSIsMTEsIlx1ODY1Mlx1ODY1M1x1ODY1NSIsNCwiXHU4NjViXHU4NjVjXHU4NjVkXHU4NjVmXHU4NjYwXHU4NjYxXHU4NjYzIiw3''@;'; put 'put ''LCJcdTczNmRcdTYzMWVcdThlNGJcdThlMGZcdTgwY2VcdTgyZDRcdTYyYWNcdTUzZjBcdTZjZjBcdTkxNWVcdTU5MmFcdTYwMDFcdTZjNzBcdTU3NGRcdTY0NGFcdThkMmFcdTc2MmJcdTZlZTlcdTU3NWJcdTZhODBcdTc1ZjBcdTZmNmRcdThjMmRcdThjMDhcdTU3NjZcdTZiZWZcdTg4OTJc''@;'; put 'put ''dTc4YjNcdTYzYTJcdTUzZjlcdTcwYWRcdTZjNjRcdTU4NThcdTY0MmFcdTU4MDJcdTY4ZTBcdTgxOWJcdTU1MTBcdTdjZDZcdTUwMThcdThlYmFcdTZkY2NcdThkOWZcdTcwZWJcdTYzOGZcdTZkOWJcdTZlZDRcdTdlZTZcdTg0MDRcdTY4NDNcdTkwMDNcdTZkZDhcdTk2NzZcdThiYThcdTU5''@;'; put 'put ''NTdcdTcyNzlcdTg1ZTRcdTgxN2VcdTc1YmNcdThhOGFcdTY4YWZcdTUyNTRcdThlMjJcdTk1MTFcdTYzZDBcdTk4OThcdThlNDRcdTU1N2NcdTRmNTNcdTY2ZmZcdTU2OGZcdTYwZDVcdTZkOTVcdTUyNDNcdTVjNDlcdTU5MjlcdTZkZmJcdTU4NmJcdTc1MzBcdTc1MWNcdTYwNmNcdTgyMTRc''@;'; put 'put ''dTgxNDZcdTYzMTFcdTY3NjFcdThmZTJcdTc3M2FcdThkZjNcdThkMzRcdTk0YzFcdTVlMTZcdTUzODVcdTU0MmNcdTcwYzMiXSxbImNkNDAiLCJcdTg2NmRcdTg2NmZcdTg2NzBcdTg2NzIiLDYsIlx1ODY4MyIsNiwiXHU4NjhlIiw0LCJcdTg2OTRcdTg2OTYiLDUsIlx1ODY5ZSIsNCwiXHU4''@;'; put 'put ''NmE1XHU4NmE2XHU4NmFiXHU4NmFkXHU4NmFlXHU4NmIyXHU4NmIzXHU4NmI3XHU4NmI4XHU4NmI5XHU4NmJiIiw0LCJcdTg2YzFcdTg2YzJcdTg2YzNcdTg2YzVcdTg2YzhcdTg2Y2NcdTg2Y2RcdTg2ZDJcdTg2ZDNcdTg2ZDVcdTg2ZDZcdTg2ZDdcdTg2ZGFcdTg2ZGMiXSxbImNkODAiLCJc''@;'; put 'put ''dTg2ZGRcdTg2ZTBcdTg2ZTFcdTg2ZTJcdTg2ZTNcdTg2ZTVcdTg2ZTZcdTg2ZTdcdTg2ZThcdTg2ZWFcdTg2ZWJcdTg2ZWNcdTg2ZWZcdTg2ZjVcdTg2ZjZcdTg2ZjdcdTg2ZmFcdTg2ZmJcdTg2ZmNcdTg2ZmRcdTg2ZmZcdTg3MDFcdTg3MDRcdTg3MDVcdTg3MDZcdTg3MGJcdTg3MGNcdTg3''@;'; put 'put ''MGVcdTg3MGZcdTg3MTBcdTg3MTFcdTg3MTRcdTg3MTZcdTZjNDBcdTVlZjdcdTUwNWNcdTRlYWRcdTVlYWRcdTYzM2FcdTgyNDdcdTkwMWFcdTY4NTBcdTkxNmVcdTc3YjNcdTU0MGNcdTk0ZGNcdTVmNjRcdTdhZTVcdTY4NzZcdTYzNDVcdTdiNTJcdTdlZGZcdTc1ZGJcdTUwNzdcdTYyOTVc''@;'; put 'put ''dTU5MzRcdTkwMGZcdTUxZjhcdTc5YzNcdTdhODFcdTU2ZmVcdTVmOTJcdTkwMTRcdTZkODJcdTVjNjBcdTU3MWZcdTU0MTBcdTUxNTRcdTZlNGRcdTU2ZTJcdTYzYThcdTk4OTNcdTgxN2ZcdTg3MTVcdTg5MmFcdTkwMDBcdTU0MWVcdTVjNmZcdTgxYzBcdTYyZDZcdTYyNThcdTgxMzFcdTll''@;'; put 'put ''MzVcdTk2NDBcdTlhNmVcdTlhN2NcdTY5MmRcdTU5YTVcdTYyZDNcdTU1M2VcdTYzMTZcdTU0YzdcdTg2ZDlcdTZkM2NcdTVhMDNcdTc0ZTZcdTg4OWNcdTZiNmFcdTU5MTZcdThjNGNcdTVmMmZcdTZlN2VcdTczYTlcdTk4N2RcdTRlMzhcdTcwZjdcdTViOGNcdTc4OTdcdTYzM2RcdTY2NWFc''@;'; put 'put ''dTc2OTZcdTYwY2JcdTViOWJcdTVhNDlcdTRlMDdcdTgxNTVcdTZjNmFcdTczOGJcdTRlYTFcdTY3ODlcdTdmNTFcdTVmODBcdTY1ZmFcdTY3MWJcdTVmZDhcdTU5ODRcdTVhMDEiXSxbImNlNDAiLCJcdTg3MTlcdTg3MWJcdTg3MWRcdTg3MWZcdTg3MjBcdTg3MjRcdTg3MjZcdTg3MjdcdTg3''@;'; put 'put ''MjhcdTg3MmFcdTg3MmJcdTg3MmNcdTg3MmRcdTg3MmZcdTg3MzBcdTg3MzJcdTg3MzNcdTg3MzVcdTg3MzZcdTg3MzhcdTg3MzlcdTg3M2FcdTg3M2NcdTg3M2RcdTg3NDAiLDYsIlx1ODc0YVx1ODc0Ylx1ODc0ZFx1ODc0Zlx1ODc1MFx1ODc1MVx1ODc1Mlx1ODc1NFx1ODc1NVx1ODc1Nlx1''@;'; put 'put ''ODc1OFx1ODc1YSIsNSwiXHU4NzYxXHU4NzYyXHU4NzY2Iiw3LCJcdTg3NmZcdTg3NzFcdTg3NzJcdTg3NzNcdTg3NzUiXSxbImNlODAiLCJcdTg3NzdcdTg3NzhcdTg3NzlcdTg3N2FcdTg3N2ZcdTg3ODBcdTg3ODFcdTg3ODRcdTg3ODZcdTg3ODdcdTg3ODlcdTg3OGFcdTg3OGNcdTg3OGUi''@;'; put 'put ''LDQsIlx1ODc5NFx1ODc5NVx1ODc5Nlx1ODc5OCIsNiwiXHU4N2EwIiw0LCJcdTVkY2RcdTVmYWVcdTUzNzFcdTk3ZTZcdThmZGRcdTY4NDVcdTU2ZjRcdTU1MmZcdTYwZGZcdTRlM2FcdTZmNGRcdTdlZjRcdTgyYzdcdTg0MGVcdTU5ZDRcdTRmMWZcdTRmMmFcdTVjM2VcdTdlYWNcdTY3MmFc''@;'; put 'put ''dTg1MWFcdTU0NzNcdTc1NGZcdTgwYzNcdTU1ODJcdTliNGZcdTRmNGRcdTZlMmRcdThjMTNcdTVjMDlcdTYxNzBcdTUzNmJcdTc2MWZcdTZlMjlcdTg2OGFcdTY1ODdcdTk1ZmJcdTdlYjlcdTU0M2JcdTdhMzNcdTdkMGFcdTk1ZWVcdTU1ZTFcdTdmYzFcdTc0ZWVcdTYzMWRcdTg3MTdcdTZk''@;'; put 'put ''YTFcdTdhOWRcdTYyMTFcdTY1YTFcdTUzNjdcdTYzZTFcdTZjODNcdTVkZWJcdTU0NWNcdTk0YThcdTRlNGNcdTZjNjFcdThiZWNcdTVjNGJcdTY1ZTBcdTgyOWNcdTY4YTdcdTU0M2VcdTU0MzRcdTZiY2JcdTZiNjZcdTRlOTRcdTYzNDJcdTUzNDhcdTgyMWVcdTRmMGRcdTRmYWVcdTU3NWVc''@;'; put 'put ''dTYyMGFcdTk2ZmVcdTY2NjRcdTcyNjlcdTUyZmZcdTUyYTFcdTYwOWZcdThiZWZcdTY2MTRcdTcxOTlcdTY3OTBcdTg5N2ZcdTc4NTJcdTc3ZmRcdTY2NzBcdTU2M2JcdTU0MzhcdTk1MjFcdTcyN2EiXSxbImNmNDAiLCJcdTg3YTVcdTg3YTZcdTg3YTdcdTg3YTlcdTg3YWFcdTg3YWVcdTg3''@;'; put 'put ''YjBcdTg3YjFcdTg3YjJcdTg3YjRcdTg3YjZcdTg3YjdcdTg3YjhcdTg3YjlcdTg3YmJcdTg3YmNcdTg3YmVcdTg3YmZcdTg3YzEiLDQsIlx1ODdjN1x1ODdjOFx1ODdjOVx1ODdjYyIsNCwiXHU4N2Q0Iiw2LCJcdTg3ZGNcdTg3ZGRcdTg3ZGVcdTg3ZGZcdTg3ZTFcdTg3ZTJcdTg3ZTNcdTg3''@;'; put 'put ''ZTRcdTg3ZTZcdTg3ZTdcdTg3ZThcdTg3ZTlcdTg3ZWJcdTg3ZWNcdTg3ZWRcdTg3ZWYiLDldLFsiY2Y4MCIsIlx1ODdmYVx1ODdmYlx1ODdmY1x1ODdmZFx1ODdmZlx1ODgwMFx1ODgwMVx1ODgwMlx1ODgwNCIsNSwiXHU4ODBiIiw3LCJcdTg4MTRcdTg4MTdcdTg4MThcdTg4MTlcdTg4MWFc''@;'; put 'put ''dTg4MWMiLDQsIlx1ODgyM1x1N2EwMFx1NjA2Zlx1NWUwY1x1NjA4OVx1ODE5ZFx1NTkxNVx1NjBkY1x1NzE4NFx1NzBlZlx1NmVhYVx1NmM1MFx1NzI4MFx1NmE4NFx1ODhhZFx1NWUyZFx1NGU2MFx1NWFiM1x1NTU5Y1x1OTRlM1x1NmQxN1x1N2NmYlx1OTY5OVx1NjIwZlx1N2VjNlx1Nzc4''@;'; put 'put ''ZVx1ODY3ZVx1NTMyM1x1OTcxZVx1OGY5Nlx1NjY4N1x1NWNlMVx1NGZhMFx1NzJlZFx1NGUwYlx1NTNhNlx1NTkwZlx1NTQxM1x1NjM4MFx1OTUyOFx1NTE0OFx1NGVkOVx1OWM5Y1x1N2VhNFx1NTRiOFx1OGQyNFx1ODg1NFx1ODIzN1x1OTVmMlx1NmQ4ZVx1NWYyNlx1NWFjY1x1NjYzZVx1''@;'; put 'put ''OTY2OVx1NzNiMFx1NzMyZVx1NTNiZlx1ODE3YVx1OTk4NVx1N2ZhMVx1NWJhYVx1OTY3N1x1OTY1MFx1N2ViZlx1NzZmOFx1NTNhMlx1OTU3Nlx1OTk5OVx1N2JiMVx1ODk0NFx1NmU1OFx1NGU2MVx1N2ZkNFx1Nzk2NVx1OGJlNlx1NjBmM1x1NTRjZFx1NGVhYlx1OTg3OVx1NWRmN1x1NmE2''@;'; put 'put ''MVx1NTBjZlx1NTQxMVx1OGM2MVx1ODQyN1x1Nzg1ZFx1OTcwNFx1NTI0YVx1NTRlZVx1NTZhM1x1OTUwMFx1NmQ4OFx1NWJiNVx1NmRjNlx1NjY1MyJdLFsiZDA0MCIsIlx1ODgyNCIsMTMsIlx1ODgzMyIsNSwiXHU4ODNhXHU4ODNiXHU4ODNkXHU4ODNlXHU4ODNmXHU4ODQxXHU4ODQyXHU4''@;'; put 'put ''ODQzXHU4ODQ2Iiw1LCJcdTg4NGUiLDUsIlx1ODg1NVx1ODg1Nlx1ODg1OFx1ODg1YSIsNiwiXHU4ODY2XHU4ODY3XHU4ODZhXHU4ODZkXHU4ODZmXHU4ODcxXHU4ODczXHU4ODc0XHU4ODc1XHU4ODc2XHU4ODc4XHU4ODc5XHU4ODdhIl0sWyJkMDgwIiwiXHU4ODdiXHU4ODdjXHU4ODgwXHU4''@;'; put 'put ''ODgzXHU4ODg2XHU4ODg3XHU4ODg5XHU4ODhhXHU4ODhjXHU4ODhlXHU4ODhmXHU4ODkwXHU4ODkxXHU4ODkzXHU4ODk0XHU4ODk1XHU4ODk3Iiw0LCJcdTg4OWQiLDQsIlx1ODhhM1x1ODhhNSIsNSwiXHU1YzBmXHU1YjVkXHU2ODIxXHU4MDk2XHU1NTc4XHU3YjExXHU2NTQ4XHU2OTU0XHU0''@;'; put 'put ''ZTliXHU2YjQ3XHU4NzRlXHU5NzhiXHU1MzRmXHU2MzFmXHU2NDNhXHU5MGFhXHU2NTljXHU4MGMxXHU4YzEwXHU1MTk5XHU2OGIwXHU1Mzc4XHU4N2Y5XHU2MWM4XHU2Y2M0XHU2Y2ZiXHU4YzIyXHU1YzUxXHU4NWFhXHU4MmFmXHU5NTBjXHU2YjIzXHU4ZjliXHU2NWIwXHU1ZmZiXHU1ZmMz''@;'; put 'put ''XHU0ZmUxXHU4ODQ1XHU2NjFmXHU4MTY1XHU3MzI5XHU2MGZhXHU1MTc0XHU1MjExXHU1NzhiXHU1ZjYyXHU5MGEyXHU4ODRjXHU5MTkyXHU1ZTc4XHU2NzRmXHU2MDI3XHU1OWQzXHU1MTQ0XHU1MWY2XHU4MGY4XHU1MzA4XHU2Yzc5XHU5NmM0XHU3MThhXHU0ZjExXHU0ZmVlXHU3ZjllXHU2''@;'; put 'put ''NzNkXHU1NWM1XHU5NTA4XHU3OWMwXHU4ODk2XHU3ZWUzXHU1ODlmXHU2MjBjXHU5NzAwXHU4NjVhXHU1NjE4XHU5ODdiXHU1ZjkwXHU4YmI4XHU4NGM0XHU5MTU3XHU1M2Q5XHU2NWVkXHU1ZThmXHU3NTVjXHU2MDY0XHU3ZDZlXHU1YTdmXHU3ZWVhXHU3ZWVkXHU4ZjY5XHU1NWE3XHU1YmEz''@;'; put 'put ''XHU2MGFjXHU2NWNiXHU3Mzg0Il0sWyJkMTQwIiwiXHU4OGFjXHU4OGFlXHU4OGFmXHU4OGIwXHU4OGIyIiw0LCJcdTg4YjhcdTg4YjlcdTg4YmFcdTg4YmJcdTg4YmRcdTg4YmVcdTg4YmZcdTg4YzBcdTg4YzNcdTg4YzRcdTg4YzdcdTg4YzhcdTg4Y2FcdTg4Y2JcdTg4Y2NcdTg4Y2RcdTg4''@;'; put 'put ''Y2ZcdTg4ZDBcdTg4ZDFcdTg4ZDNcdTg4ZDZcdTg4ZDdcdTg4ZGEiLDQsIlx1ODhlMFx1ODhlMVx1ODhlNlx1ODhlN1x1ODhlOSIsNiwiXHU4OGYyXHU4OGY1XHU4OGY2XHU4OGY3XHU4OGZhXHU4OGZiXHU4OGZkXHU4OGZmXHU4OTAwXHU4OTAxXHU4OTAzIiw1XSxbImQxODAiLCJcdTg5MDlc''@;'; put 'put ''dTg5MGIiLDQsIlx1ODkxMVx1ODkxNCIsNCwiXHU4OTFjIiw0LCJcdTg5MjJcdTg5MjNcdTg5MjRcdTg5MjZcdTg5MjdcdTg5MjhcdTg5MjlcdTg5MmNcdTg5MmRcdTg5MmVcdTg5MmZcdTg5MzFcdTg5MzJcdTg5MzNcdTg5MzVcdTg5MzdcdTkwMDlcdTc2NjNcdTc3MjlcdTdlZGFcdTk3NzRc''@;'; put 'put ''dTg1OWJcdTViNjZcdTdhNzRcdTk2ZWFcdTg4NDBcdTUyY2JcdTcxOGZcdTVmYWFcdTY1ZWNcdThiZTJcdTViZmJcdTlhNmZcdTVkZTFcdTZiODlcdTZjNWJcdThiYWRcdThiYWZcdTkwMGFcdThmYzVcdTUzOGJcdTYyYmNcdTllMjZcdTllMmRcdTU0NDBcdTRlMmJcdTgyYmRcdTcyNTlcdTg2''@;'; put 'put ''OWNcdTVkMTZcdTg4NTlcdTZkYWZcdTk2YzVcdTU0ZDFcdTRlOWFcdThiYjZcdTcxMDlcdTU0YmRcdTk2MDlcdTcwZGZcdTZkZjlcdTc2ZDBcdTRlMjVcdTc4MTRcdTg3MTJcdTVjYTlcdTVlZjZcdThhMDBcdTk4OWNcdTk2MGVcdTcwOGVcdTZjYmZcdTU5NDRcdTYzYTlcdTc3M2NcdTg4NGRc''@;'; put 'put ''dTZmMTRcdTgyNzNcdTU4MzBcdTcxZDVcdTUzOGNcdTc4MWFcdTk2YzFcdTU1MDFcdTVmNjZcdTcxMzBcdTViYjRcdThjMWFcdTlhOGNcdTZiODNcdTU5MmVcdTllMmZcdTc5ZTdcdTY3NjhcdTYyNmNcdTRmNmZcdTc1YTFcdTdmOGFcdTZkMGJcdTk2MzNcdTZjMjdcdTRlZjBcdTc1ZDJcdTUx''@;'; put 'put ''N2JcdTY4MzdcdTZmM2VcdTkwODBcdTgxNzBcdTU5OTZcdTc0NzYiXSxbImQyNDAiLCJcdTg5MzgiLDgsIlx1ODk0Mlx1ODk0M1x1ODk0NSIsMjQsIlx1ODk2MCIsNSwiXHU4OTY3IiwxOSwiXHU4OTdjIl0sWyJkMjgwIiwiXHU4OTdkXHU4OTdlXHU4OTgwXHU4OTgyXHU4OTg0XHU4OTg1XHU4''@;'; put 'put ''OTg3IiwyNiwiXHU2NDQ3XHU1YzI3XHU5MDY1XHU3YTkxXHU4YzIzXHU1OWRhXHU1NGFjXHU4MjAwXHU4MzZmXHU4OTgxXHU4MDAwXHU2OTMwXHU1NjRlXHU4MDM2XHU3MjM3XHU5MWNlXHU1MWI2XHU0ZTVmXHU5ODc1XHU2Mzk2XHU0ZTFhXHU1M2Y2XHU2NmYzXHU4MTRiXHU1OTFjXHU2ZGIy''@;'; put 'put ''XHU0ZTAwXHU1OGY5XHU1MzNiXHU2M2Q2XHU5NGYxXHU0ZjlkXHU0ZjBhXHU4ODYzXHU5ODkwXHU1OTM3XHU5MDU3XHU3OWZiXHU0ZWVhXHU4MGYwXHU3NTkxXHU2YzgyXHU1YjljXHU1OWU4XHU1ZjVkXHU2OTA1XHU4NjgxXHU1MDFhXHU1ZGYyXHU0ZTU5XHU3N2UzXHU0ZWU1XHU4MjdhXHU2''@;'; put 'put ''MjkxXHU2NjEzXHU5MDkxXHU1Yzc5XHU0ZWJmXHU1Zjc5XHU4MWM2XHU5MDM4XHU4MDg0XHU3NWFiXHU0ZWE2XHU4OGQ0XHU2MTBmXHU2YmM1XHU1ZmM2XHU0ZTQ5XHU3NmNhXHU2ZWEyXHU4YmUzXHU4YmFlXHU4YzBhXHU4YmQxXHU1ZjAyXHU3ZmZjXHU3ZmNjXHU3ZWNlXHU4MzM1XHU4MzZi''@;'; put 'put ''XHU1NmUwXHU2YmI3XHU5N2YzXHU5NjM0XHU1OWZiXHU1NDFmXHU5NGY2XHU2ZGViXHU1YmM1XHU5OTZlXHU1YzM5XHU1ZjE1XHU5NjkwIl0sWyJkMzQwIiwiXHU4OWEyIiwzMCwiXHU4OWMzXHU4OWNkXHU4OWQzXHU4OWQ0XHU4OWQ1XHU4OWQ3XHU4OWQ4XHU4OWQ5XHU4OWRiXHU4OWRkXHU4''@;'; put 'put ''OWRmXHU4OWUwXHU4OWUxXHU4OWUyXHU4OWU0XHU4OWU3XHU4OWU4XHU4OWU5XHU4OWVhXHU4OWVjXHU4OWVkXHU4OWVlXHU4OWYwXHU4OWYxXHU4OWYyXHU4OWY0Iiw2XSxbImQzODAiLCJcdTg5ZmIiLDQsIlx1OGEwMSIsNSwiXHU4YTA4IiwyMSwiXHU1MzcwXHU4MmYxXHU2YTMxXHU1YTc0''@;'; put 'put ''XHU5ZTcwXHU1ZTk0XHU3ZjI4XHU4M2I5XHU4NDI0XHU4NDI1XHU4MzY3XHU4NzQ3XHU4ZmNlXHU4ZDYyXHU3NmM4XHU1ZjcxXHU5ODk2XHU3ODZjXHU2NjIwXHU1NGRmXHU2MmU1XHU0ZjYzXHU4MWMzXHU3NWM4XHU1ZWI4XHU5NmNkXHU4ZTBhXHU4NmY5XHU1NDhmXHU2Y2YzXHU2ZDhjXHU2''@;'; put 'put ''YzM4XHU2MDdmXHU1MmM3XHU3NTI4XHU1ZTdkXHU0ZjE4XHU2MGEwXHU1ZmU3XHU1YzI0XHU3NTMxXHU5MGFlXHU5NGMwXHU3MmI5XHU2Y2I5XHU2ZTM4XHU5MTQ5XHU2NzA5XHU1M2NiXHU1M2YzXHU0ZjUxXHU5MWM5XHU4YmYxXHU1M2M4XHU1ZTdjXHU4ZmMyXHU2ZGU0XHU0ZThlXHU3NmMy''@;'; put 'put ''XHU2OTg2XHU4NjVlXHU2MTFhXHU4MjA2XHU0ZjU5XHU0ZmRlXHU5MDNlXHU5YzdjXHU2MTA5XHU2ZTFkXHU2ZTE0XHU5Njg1XHU0ZTg4XHU1YTMxXHU5NmU4XHU0ZTBlXHU1YzdmXHU3OWI5XHU1Yjg3XHU4YmVkXHU3ZmJkXHU3Mzg5XHU1N2RmXHU4MjhiXHU5MGMxXHU1NDAxXHU5MDQ3XHU1''@;'; put 'put ''NWJiXHU1Y2VhXHU1ZmExXHU2MTA4XHU2YjMyXHU3MmYxXHU4MGIyXHU4YTg5Il0sWyJkNDQwIiwiXHU4YTFlIiwzMSwiXHU4YTNmIiw4LCJcdThhNDkiLDIxXSxbImQ0ODAiLCJcdThhNWYiLDI1LCJcdThhN2EiLDYsIlx1NmQ3NFx1NWJkM1x1ODhkNVx1OTg4NFx1OGM2Ylx1OWE2ZFx1OWUz''@;'; put 'put ''M1x1NmUwYVx1NTFhNFx1NTE0M1x1NTdhM1x1ODg4MVx1NTM5Zlx1NjNmNFx1OGY5NVx1NTZlZFx1NTQ1OFx1NTcwNlx1NzMzZlx1NmU5MFx1N2YxOFx1OGZkY1x1ODJkMVx1NjEzZlx1NjAyOFx1OTY2Mlx1NjZmMFx1N2VhNlx1OGQ4YVx1OGRjM1x1OTRhNVx1NWNiM1x1N2NhNFx1NjcwOFx1''@;'; put 'put ''NjBhNlx1OTYwNVx1ODAxOFx1NGU5MVx1OTBlN1x1NTMwMFx1OTY2OFx1NTE0MVx1OGZkMFx1ODU3NFx1OTE1ZFx1NjY1NVx1OTdmNVx1NWI1NVx1NTMxZFx1NzgzOFx1Njc0Mlx1NjgzZFx1NTRjOVx1NzA3ZVx1NWJiMFx1OGY3ZFx1NTE4ZFx1NTcyOFx1NTRiMVx1NjUxMlx1NjY4Mlx1OGQ1''@;'; put 'put ''ZVx1OGQ0M1x1ODEwZlx1ODQ2Y1x1OTA2ZFx1N2NkZlx1NTFmZlx1ODVmYlx1NjdhM1x1NjVlOVx1NmZhMVx1ODZhNFx1OGU4MVx1NTY2YVx1OTAyMFx1NzY4Mlx1NzA3Nlx1NzFlNVx1OGQyM1x1NjJlOVx1NTIxOVx1NmNmZFx1OGQzY1x1NjAwZVx1NTg5ZVx1NjE4ZVx1NjZmZVx1OGQ2MFx1''@;'; put 'put ''NjI0ZVx1NTViM1x1NmUyM1x1NjcyZFx1OGY2NyJdLFsiZDU0MCIsIlx1OGE4MSIsNywiXHU4YThiIiw3LCJcdThhOTQiLDQ2XSxbImQ1ODAiLCJcdThhYzMiLDMyLCJcdTk0ZTFcdTk1ZjhcdTc3MjhcdTY4MDVcdTY5YThcdTU0OGJcdTRlNGRcdTcwYjhcdThiYzhcdTY0NThcdTY1OGJcdTVi''@;'; put 'put ''ODVcdTdhODRcdTUwM2FcdTViZThcdTc3YmJcdTZiZTFcdThhNzlcdTdjOThcdTZjYmVcdTc2Y2ZcdTY1YTlcdThmOTdcdTVkMmRcdTVjNTVcdTg2MzhcdTY4MDhcdTUzNjBcdTYyMThcdTdhZDlcdTZlNWJcdTdlZmRcdTZhMWZcdTdhZTBcdTVmNzBcdTZmMzNcdTVmMjBcdTYzOGNcdTZkYThc''@;'; put 'put ''dTY3NTZcdTRlMDhcdTVlMTBcdThkMjZcdTRlZDdcdTgwYzBcdTc2MzRcdTk2OWNcdTYyZGJcdTY2MmRcdTYyN2VcdTZjYmNcdThkNzVcdTcxNjdcdTdmNjlcdTUxNDZcdTgwODdcdTUzZWNcdTkwNmVcdTYyOThcdTU0ZjJcdTg2ZjBcdThmOTlcdTgwMDVcdTk1MTdcdTg1MTdcdThmZDlcdTZk''@;'; put 'put ''NTlcdTczY2RcdTY1OWZcdTc3MWZcdTc1MDRcdTc4MjdcdTgxZmJcdThkMWVcdTk0ODhcdTRmYTZcdTY3OTVcdTc1YjlcdThiY2FcdTk3MDdcdTYzMmZcdTk1NDdcdTk2MzVcdTg0YjhcdTYzMjNcdTc3NDFcdTVmODFcdTcyZjBcdTRlODlcdTYwMTRcdTY1NzRcdTYyZWZcdTZiNjNcdTY1M2Yi''@;'; put 'put ''XSxbImQ2NDAiLCJcdThhZTQiLDM0LCJcdThiMDgiLDI3XSxbImQ2ODAiLCJcdThiMjRcdThiMjVcdThiMjciLDMwLCJcdTVlMjdcdTc1YzdcdTkwZDFcdThiYzFcdTgyOWRcdTY3OWRcdTY1MmZcdTU0MzFcdTg3MThcdTc3ZTVcdTgwYTJcdTgxMDJcdTZjNDFcdTRlNGJcdTdlYzdcdTgwNGNc''@;'; put 'put ''dTc2ZjRcdTY5MGRcdTZiOTZcdTYyNjdcdTUwM2NcdTRmODRcdTU3NDBcdTYzMDdcdTZiNjJcdThkYmVcdTUzZWFcdTY1ZThcdTdlYjhcdTVmZDdcdTYzMWFcdTYzYjdcdTgxZjNcdTgxZjRcdTdmNmVcdTVlMWNcdTVjZDlcdTUyMzZcdTY2N2FcdTc5ZTlcdTdhMWFcdThkMjhcdTcwOTlcdTc1''@;'; put 'put ''ZDRcdTZlZGVcdTZjYmJcdTdhOTJcdTRlMmRcdTc2YzVcdTVmZTBcdTk0OWZcdTg4NzdcdTdlYzhcdTc5Y2RcdTgwYmZcdTkxY2RcdTRlZjJcdTRmMTdcdTgyMWZcdTU0NjhcdTVkZGVcdTZkMzJcdThiY2NcdTdjYTVcdThmNzRcdTgwOThcdTVlMWFcdTU0OTJcdTc2YjFcdTViOTlcdTY2M2Nc''@;'; put 'put ''dTlhYTRcdTczZTBcdTY4MmFcdTg2ZGJcdTY3MzFcdTczMmFcdThiZjhcdThiZGJcdTkwMTBcdTdhZjlcdTcwZGJcdTcxNmVcdTYyYzRcdTc3YTlcdTU2MzFcdTRlM2JcdTg0NTdcdTY3ZjFcdTUyYTlcdTg2YzBcdThkMmVcdTk0ZjhcdTdiNTEiXSxbImQ3NDAiLCJcdThiNDYiLDMxLCJcdThi''@;'; put 'put ''NjciLDQsIlx1OGI2ZCIsMjVdLFsiZDc4MCIsIlx1OGI4NyIsMjQsIlx1OGJhY1x1OGJiMVx1OGJiYlx1OGJjN1x1OGJkMFx1OGJlYVx1OGMwOVx1OGMxZVx1NGY0Zlx1NmNlOFx1Nzk1ZFx1OWE3Ylx1NjI5M1x1NzIyYVx1NjJmZFx1NGUxM1x1NzgxNlx1OGY2Y1x1NjRiMFx1OGQ1YVx1N2Jj''@;'; put 'put ''Nlx1Njg2OVx1NWU4NFx1ODhjNVx1NTk4Nlx1NjQ5ZVx1NThlZVx1NzJiNlx1NjkwZVx1OTUyNVx1OGZmZFx1OGQ1OFx1NTc2MFx1N2YwMFx1OGMwNlx1NTFjNlx1NjM0OVx1NjJkOVx1NTM1M1x1Njg0Y1x1NzQyMlx1ODMwMVx1OTE0Y1x1NTU0NFx1Nzc0MFx1NzA3Y1x1NmQ0YVx1NTE3OVx1''@;'; put 'put ''NTRhOFx1OGQ0NFx1NTlmZlx1NmVjYlx1NmRjNFx1NWI1Y1x1N2QyYlx1NGVkNFx1N2M3ZFx1NmVkM1x1NWI1MFx1ODFlYVx1NmUwZFx1NWI1N1x1OWIwM1x1NjhkNVx1OGUyYVx1NWI5N1x1N2VmY1x1NjAzYlx1N2ViNVx1OTBiOVx1OGQ3MFx1NTk0Zlx1NjNjZFx1NzlkZlx1OGRiM1x1NTM1''@;'; put 'put ''Mlx1NjVjZlx1Nzk1Nlx1OGJjNVx1OTYzYlx1N2VjNFx1OTRiYlx1N2U4Mlx1NTYzNFx1OTE4OVx1NjcwMFx1N2Y2YVx1NWMwYVx1OTA3NVx1NjYyOFx1NWRlNlx1NGY1MFx1NjdkZVx1NTA1YVx1NGY1Y1x1NTc1MFx1NWVhNyJdLFsiZDg0MCIsIlx1OGMzOCIsOCwiXHU4YzQyXHU4YzQzXHU4''@;'; put 'put ''YzQ0XHU4YzQ1XHU4YzQ4XHU4YzRhXHU4YzRiXHU4YzRkIiw3LCJcdThjNTZcdThjNTdcdThjNThcdThjNTlcdThjNWIiLDUsIlx1OGM2MyIsNiwiXHU4YzZjIiw2LCJcdThjNzRcdThjNzVcdThjNzZcdThjNzdcdThjN2IiLDYsIlx1OGM4M1x1OGM4NFx1OGM4Nlx1OGM4NyJdLFsiZDg4MCIs''@;'; put 'put ''Ilx1OGM4OFx1OGM4Ylx1OGM4ZCIsNiwiXHU4Yzk1XHU4Yzk2XHU4Yzk3XHU4Yzk5IiwyMCwiXHU0ZThkXHU0ZTBjXHU1MTQwXHU0ZTEwXHU1ZWZmXHU1MzQ1XHU0ZTE1XHU0ZTk4XHU0ZTFlXHU5YjMyXHU1YjZjXHU1NjY5XHU0ZTI4XHU3OWJhXHU0ZTNmXHU1MzE1XHU0ZTQ3XHU1OTJkXHU3''@;'; put 'put ''MjNiXHU1MzZlXHU2YzEwXHU1NmRmXHU4MGU0XHU5OTk3XHU2YmQzXHU3NzdlXHU5ZjE3XHU0ZTM2XHU0ZTlmXHU5ZjEwXHU0ZTVjXHU0ZTY5XHU0ZTkzXHU4Mjg4XHU1YjViXHU1NTZjXHU1NjBmXHU0ZWM0XHU1MzhkXHU1MzlkXHU1M2EzXHU1M2E1XHU1M2FlXHU5NzY1XHU4ZDVkXHU1MzFh''@;'; put 'put ''XHU1M2Y1XHU1MzI2XHU1MzJlXHU1MzNlXHU4ZDVjXHU1MzY2XHU1MzYzXHU1MjAyXHU1MjA4XHU1MjBlXHU1MjJkXHU1MjMzXHU1MjNmXHU1MjQwXHU1MjRjXHU1MjVlXHU1MjYxXHU1MjVjXHU4NGFmXHU1MjdkXHU1MjgyXHU1MjgxXHU1MjkwXHU1MjkzXHU1MTgyXHU3ZjU0XHU0ZWJiXHU0''@;'; put 'put ''ZWMzXHU0ZWM5XHU0ZWMyXHU0ZWU4XHU0ZWUxXHU0ZWViXHU0ZWRlXHU0ZjFiXHU0ZWYzXHU0ZjIyXHU0ZjY0XHU0ZWY1XHU0ZjI1XHU0ZjI3XHU0ZjA5XHU0ZjJiXHU0ZjVlXHU0ZjY3XHU2NTM4XHU0ZjVhXHU0ZjVkIl0sWyJkOTQwIiwiXHU4Y2FlIiw2Ml0sWyJkOTgwIiwiXHU4Y2VkIiwz''@;'; put 'put ''MiwiXHU0ZjVmXHU0ZjU3XHU0ZjMyXHU0ZjNkXHU0Zjc2XHU0Zjc0XHU0ZjkxXHU0Zjg5XHU0ZjgzXHU0ZjhmXHU0ZjdlXHU0ZjdiXHU0ZmFhXHU0ZjdjXHU0ZmFjXHU0Zjk0XHU0ZmU2XHU0ZmU4XHU0ZmVhXHU0ZmM1XHU0ZmRhXHU0ZmUzXHU0ZmRjXHU0ZmQxXHU0ZmRmXHU0ZmY4XHU1MDI5''@;'; put 'put ''XHU1MDRjXHU0ZmYzXHU1MDJjXHU1MDBmXHU1MDJlXHU1MDJkXHU0ZmZlXHU1MDFjXHU1MDBjXHU1MDI1XHU1MDI4XHU1MDdlXHU1MDQzXHU1MDU1XHU1MDQ4XHU1MDRlXHU1MDZjXHU1MDdiXHU1MGE1XHU1MGE3XHU1MGE5XHU1MGJhXHU1MGQ2XHU1MTA2XHU1MGVkXHU1MGVjXHU1MGU2XHU1''@;'; put 'put ''MGVlXHU1MTA3XHU1MTBiXHU0ZWRkXHU2YzNkXHU0ZjU4XHU0ZjY1XHU0ZmNlXHU5ZmEwXHU2YzQ2XHU3Yzc0XHU1MTZlXHU1ZGZkXHU5ZWM5XHU5OTk4XHU1MTgxXHU1OTE0XHU1MmY5XHU1MzBkXHU4YTA3XHU1MzEwXHU1MWViXHU1OTE5XHU1MTU1XHU0ZWEwXHU1MTU2XHU0ZWIzXHU4ODZl''@;'; put 'put ''XHU4OGE0XHU0ZWI1XHU4MTE0XHU4OGQyXHU3OTgwXHU1YjM0XHU4ODAzXHU3ZmI4XHU1MWFiXHU1MWIxXHU1MWJkXHU1MWJjIl0sWyJkYTQwIiwiXHU4ZDBlIiwxNCwiXHU4ZDIwXHU4ZDUxXHU4ZDUyXHU4ZDU3XHU4ZDVmXHU4ZDY1XHU4ZDY4XHU4ZDY5XHU4ZDZhXHU4ZDZjXHU4ZDZlXHU4''@;'; put 'put ''ZDZmXHU4ZDcxXHU4ZDcyXHU4ZDc4Iiw4LCJcdThkODJcdThkODNcdThkODZcdThkODdcdThkODhcdThkODlcdThkOGMiLDQsIlx1OGQ5Mlx1OGQ5M1x1OGQ5NSIsOSwiXHU4ZGEwXHU4ZGExIl0sWyJkYTgwIiwiXHU4ZGEyXHU4ZGE0IiwxMiwiXHU4ZGIyXHU4ZGI2XHU4ZGI3XHU4ZGI5XHU4''@;'; put 'put ''ZGJiXHU4ZGJkXHU4ZGMwXHU4ZGMxXHU4ZGMyXHU4ZGM1XHU4ZGM3XHU4ZGM4XHU4ZGM5XHU4ZGNhXHU4ZGNkXHU4ZGQwXHU4ZGQyXHU4ZGQzXHU4ZGQ0XHU1MWM3XHU1MTk2XHU1MWEyXHU1MWE1XHU4YmEwXHU4YmE2XHU4YmE3XHU4YmFhXHU4YmI0XHU4YmI1XHU4YmI3XHU4YmMyXHU4YmMz''@;'; put 'put ''XHU4YmNiXHU4YmNmXHU4YmNlXHU4YmQyXHU4YmQzXHU4YmQ0XHU4YmQ2XHU4YmQ4XHU4YmQ5XHU4YmRjXHU4YmRmXHU4YmUwXHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVlXHU4YmYwXHU4YmYzXHU4YmY2XHU4YmY5XHU4YmZjXHU4YmZmXHU4YzAwXHU4YzAyXHU4YzA0XHU4YzA3XHU4YzBjXHU4''@;'; put 'put ''YzBmXHU4YzExXHU4YzEyXHU4YzE0XHU4YzE1XHU4YzE2XHU4YzE5XHU4YzFiXHU4YzE4XHU4YzFkXHU4YzFmXHU4YzIwXHU4YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4YzJiXHU4YzJlXHU4YzJmXHU4YzMyXHU4YzMzXHU4YzM1XHU4YzM2XHU1MzY5XHU1MzdhXHU5NjFkXHU5NjIyXHU5NjIx''@;'; put 'put ''XHU5NjMxXHU5NjJhXHU5NjNkXHU5NjNjXHU5NjQyXHU5NjQ5XHU5NjU0XHU5NjVmXHU5NjY3XHU5NjZjXHU5NjcyXHU5Njc0XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIwXHU5MDk3XHU5MDliXHU5MDlkXHU5MDk5XHU5MGFjXHU5MGExXHU5MGI0XHU5MGIzXHU5MGI2XHU5MGJhIl0sWyJkYjQw''@;'; put 'put ''IiwiXHU4ZGQ1XHU4ZGQ4XHU4ZGQ5XHU4ZGRjXHU4ZGUwXHU4ZGUxXHU4ZGUyXHU4ZGU1XHU4ZGU2XHU4ZGU3XHU4ZGU5XHU4ZGVkXHU4ZGVlXHU4ZGYwXHU4ZGYxXHU4ZGYyXHU4ZGY0XHU4ZGY2XHU4ZGZjXHU4ZGZlIiw2LCJcdThlMDZcdThlMDdcdThlMDhcdThlMGJcdThlMGRcdThlMGVc''@;'; put 'put ''dThlMTBcdThlMTFcdThlMTJcdThlMTNcdThlMTUiLDcsIlx1OGUyMFx1OGUyMVx1OGUyNCIsNCwiXHU4ZTJiXHU4ZTJkXHU4ZTMwXHU4ZTMyXHU4ZTMzXHU4ZTM0XHU4ZTM2XHU4ZTM3XHU4ZTM4XHU4ZTNiXHU4ZTNjXHU4ZTNlIl0sWyJkYjgwIiwiXHU4ZTNmXHU4ZTQzXHU4ZTQ1XHU4ZTQ2''@;'; put 'put ''XHU4ZTRjIiw0LCJcdThlNTMiLDUsIlx1OGU1YSIsMTEsIlx1OGU2N1x1OGU2OFx1OGU2YVx1OGU2Ylx1OGU2ZVx1OGU3MVx1OTBiOFx1OTBiMFx1OTBjZlx1OTBjNVx1OTBiZVx1OTBkMFx1OTBjNFx1OTBjN1x1OTBkM1x1OTBlNlx1OTBlMlx1OTBkY1x1OTBkN1x1OTBkYlx1OTBlYlx1OTBl''@;'; put 'put ''Zlx1OTBmZVx1OTEwNFx1OTEyMlx1OTExZVx1OTEyM1x1OTEzMVx1OTEyZlx1OTEzOVx1OTE0M1x1OTE0Nlx1NTIwZFx1NTk0Mlx1NTJhMlx1NTJhY1x1NTJhZFx1NTJiZVx1NTRmZlx1NTJkMFx1NTJkNlx1NTJmMFx1NTNkZlx1NzFlZVx1NzdjZFx1NWVmNFx1NTFmNVx1NTFmY1x1OWIyZlx1''@;'; put 'put ''NTNiNlx1NWYwMVx1NzU1YVx1NWRlZlx1NTc0Y1x1NTdhOVx1NTdhMVx1NTg3ZVx1NThiY1x1NThjNVx1NThkMVx1NTcyOVx1NTcyY1x1NTcyYVx1NTczM1x1NTczOVx1NTcyZVx1NTcyZlx1NTc1Y1x1NTczYlx1NTc0Mlx1NTc2OVx1NTc4NVx1NTc2Ylx1NTc4Nlx1NTc3Y1x1NTc3Ylx1NTc2''@;'; put 'put ''OFx1NTc2ZFx1NTc3Nlx1NTc3M1x1NTdhZFx1NTdhNFx1NTc4Y1x1NTdiMlx1NTdjZlx1NTdhN1x1NTdiNFx1NTc5M1x1NTdhMFx1NTdkNVx1NTdkOFx1NTdkYVx1NTdkOVx1NTdkMlx1NTdiOFx1NTdmNFx1NTdlZlx1NTdmOFx1NTdlNFx1NTdkZCJdLFsiZGM0MCIsIlx1OGU3M1x1OGU3NVx1''@;'; put 'put ''OGU3NyIsNCwiXHU4ZTdkXHU4ZTdlXHU4ZTgwXHU4ZTgyXHU4ZTgzXHU4ZTg0XHU4ZTg2XHU4ZTg4Iiw2LCJcdThlOTFcdThlOTJcdThlOTNcdThlOTUiLDYsIlx1OGU5ZFx1OGU5ZiIsMTEsIlx1OGVhZFx1OGVhZVx1OGViMFx1OGViMVx1OGViMyIsNiwiXHU4ZWJiIiw3XSxbImRjODAiLCJc''@;'; put 'put ''dThlYzMiLDEwLCJcdThlY2YiLDIxLCJcdTU4MGJcdTU4MGRcdTU3ZmRcdTU3ZWRcdTU4MDBcdTU4MWVcdTU4MTlcdTU4NDRcdTU4MjBcdTU4NjVcdTU4NmNcdTU4ODFcdTU4ODlcdTU4OWFcdTU4ODBcdTk5YThcdTlmMTlcdTYxZmZcdTgyNzlcdTgyN2RcdTgyN2ZcdTgyOGZcdTgyOGFcdTgy''@;'; put 'put ''YThcdTgyODRcdTgyOGVcdTgyOTFcdTgyOTdcdTgyOTlcdTgyYWJcdTgyYjhcdTgyYmVcdTgyYjBcdTgyYzhcdTgyY2FcdTgyZTNcdTgyOThcdTgyYjdcdTgyYWVcdTgyY2JcdTgyY2NcdTgyYzFcdTgyYTlcdTgyYjRcdTgyYTFcdTgyYWFcdTgyOWZcdTgyYzRcdTgyY2VcdTgyYTRcdTgyZTFc''@;'; put 'put ''dTgzMDlcdTgyZjdcdTgyZTRcdTgzMGZcdTgzMDdcdTgyZGNcdTgyZjRcdTgyZDJcdTgyZDhcdTgzMGNcdTgyZmJcdTgyZDNcdTgzMTFcdTgzMWFcdTgzMDZcdTgzMTRcdTgzMTVcdTgyZTBcdTgyZDVcdTgzMWNcdTgzNTFcdTgzNWJcdTgzNWNcdTgzMDhcdTgzOTJcdTgzM2NcdTgzMzRcdTgz''@;'; put 'put ''MzFcdTgzOWJcdTgzNWVcdTgzMmZcdTgzNGZcdTgzNDdcdTgzNDNcdTgzNWZcdTgzNDBcdTgzMTdcdTgzNjBcdTgzMmRcdTgzM2FcdTgzMzNcdTgzNjZcdTgzNjUiXSxbImRkNDAiLCJcdThlZTUiLDYyXSxbImRkODAiLCJcdThmMjQiLDMyLCJcdTgzNjhcdTgzMWJcdTgzNjlcdTgzNmNcdTgz''@;'; put 'put ''NmFcdTgzNmRcdTgzNmVcdTgzYjBcdTgzNzhcdTgzYjNcdTgzYjRcdTgzYTBcdTgzYWFcdTgzOTNcdTgzOWNcdTgzODVcdTgzN2NcdTgzYjZcdTgzYTlcdTgzN2RcdTgzYjhcdTgzN2JcdTgzOThcdTgzOWVcdTgzYThcdTgzYmFcdTgzYmNcdTgzYzFcdTg0MDFcdTgzZTVcdTgzZDhcdTU4MDdc''@;'; put 'put ''dTg0MThcdTg0MGJcdTgzZGRcdTgzZmRcdTgzZDZcdTg0MWNcdTg0MzhcdTg0MTFcdTg0MDZcdTgzZDRcdTgzZGZcdTg0MGZcdTg0MDNcdTgzZjhcdTgzZjlcdTgzZWFcdTgzYzVcdTgzYzBcdTg0MjZcdTgzZjBcdTgzZTFcdTg0NWNcdTg0NTFcdTg0NWFcdTg0NTlcdTg0NzNcdTg0ODdcdTg0''@;'; put 'put ''ODhcdTg0N2FcdTg0ODlcdTg0NzhcdTg0M2NcdTg0NDZcdTg0NjlcdTg0NzZcdTg0OGNcdTg0OGVcdTg0MzFcdTg0NmRcdTg0YzFcdTg0Y2RcdTg0ZDBcdTg0ZTZcdTg0YmRcdTg0ZDNcdTg0Y2FcdTg0YmZcdTg0YmFcdTg0ZTBcdTg0YTFcdTg0YjlcdTg0YjRcdTg0OTdcdTg0ZTVcdTg0ZTNc''@;'; put 'put ''dTg1MGNcdTc1MGRcdTg1MzhcdTg0ZjBcdTg1MzlcdTg1MWZcdTg1M2EiXSxbImRlNDAiLCJcdThmNDUiLDMyLCJcdThmNmFcdThmODBcdThmOGNcdThmOTJcdThmOWRcdThmYTBcdThmYTFcdThmYTJcdThmYTRcdThmYTVcdThmYTZcdThmYTdcdThmYWFcdThmYWNcdThmYWRcdThmYWVcdThm''@;'; put 'put ''YWZcdThmYjJcdThmYjNcdThmYjRcdThmYjVcdThmYjdcdThmYjhcdThmYmFcdThmYmJcdThmYmNcdThmYmZcdThmYzBcdThmYzNcdThmYzYiXSxbImRlODAiLCJcdThmYzkiLDQsIlx1OGZjZlx1OGZkMlx1OGZkNlx1OGZkN1x1OGZkYVx1OGZlMFx1OGZlMVx1OGZlM1x1OGZlN1x1OGZlY1x1''@;'; put 'put ''OGZlZlx1OGZmMVx1OGZmMlx1OGZmNFx1OGZmNVx1OGZmNlx1OGZmYVx1OGZmYlx1OGZmY1x1OGZmZVx1OGZmZlx1OTAwN1x1OTAwOFx1OTAwY1x1OTAwZVx1OTAxM1x1OTAxNVx1OTAxOFx1ODU1Nlx1ODUzYlx1ODRmZlx1ODRmY1x1ODU1OVx1ODU0OFx1ODU2OFx1ODU2NFx1ODU1ZVx1ODU3''@;'; put 'put ''YVx1NzdhMlx1ODU0M1x1ODU3Mlx1ODU3Ylx1ODVhNFx1ODVhOFx1ODU4N1x1ODU4Zlx1ODU3OVx1ODVhZVx1ODU5Y1x1ODU4NVx1ODViOVx1ODViN1x1ODViMFx1ODVkM1x1ODVjMVx1ODVkY1x1ODVmZlx1ODYyN1x1ODYwNVx1ODYyOVx1ODYxNlx1ODYzY1x1NWVmZVx1NWYwOFx1NTkzY1x1''@;'; put 'put ''NTk0MVx1ODAzN1x1NTk1NVx1NTk1YVx1NTk1OFx1NTMwZlx1NWMyMlx1NWMyNVx1NWMyY1x1NWMzNFx1NjI0Y1x1NjI2YVx1NjI5Zlx1NjJiYlx1NjJjYVx1NjJkYVx1NjJkN1x1NjJlZVx1NjMyMlx1NjJmNlx1NjMzOVx1NjM0Ylx1NjM0M1x1NjNhZFx1NjNmNlx1NjM3MVx1NjM3YVx1NjM4''@;'; put 'put ''ZVx1NjNiNFx1NjM2ZFx1NjNhY1x1NjM4YVx1NjM2OVx1NjNhZVx1NjNiY1x1NjNmMlx1NjNmOFx1NjNlMFx1NjNmZlx1NjNjNFx1NjNkZVx1NjNjZVx1NjQ1Mlx1NjNjNlx1NjNiZVx1NjQ0NVx1NjQ0MVx1NjQwYlx1NjQxYlx1NjQyMFx1NjQwY1x1NjQyNlx1NjQyMVx1NjQ1ZVx1NjQ4NFx1''@;'; put 'put ''NjQ2ZFx1NjQ5NiJdLFsiZGY0MCIsIlx1OTAxOVx1OTAxY1x1OTAyM1x1OTAyNFx1OTAyNVx1OTAyNyIsNSwiXHU5MDMwIiw0LCJcdTkwMzdcdTkwMzlcdTkwM2FcdTkwM2RcdTkwM2ZcdTkwNDBcdTkwNDNcdTkwNDVcdTkwNDZcdTkwNDgiLDQsIlx1OTA0ZVx1OTA1NFx1OTA1NVx1OTA1Nlx1''@;'; put 'put ''OTA1OVx1OTA1YVx1OTA1YyIsNSwiXHU5MDY0XHU5MDY2XHU5MDY3XHU5MDY5XHU5MDZhXHU5MDZiXHU5MDZjXHU5MDZmIiw0LCJcdTkwNzYiLDYsIlx1OTA3ZVx1OTA4MSJdLFsiZGY4MCIsIlx1OTA4NFx1OTA4NVx1OTA4Nlx1OTA4N1x1OTA4OVx1OTA4YVx1OTA4YyIsNCwiXHU5MDkyXHU5''@;'; put 'put ''MDk0XHU5MDk2XHU5MDk4XHU5MDlhXHU5MDljXHU5MDllXHU5MDlmXHU5MGEwXHU5MGE0XHU5MGE1XHU5MGE3XHU5MGE4XHU5MGE5XHU5MGFiXHU5MGFkXHU5MGIyXHU5MGI3XHU5MGJjXHU5MGJkXHU5MGJmXHU5MGMwXHU2NDdhXHU2NGI3XHU2NGI4XHU2NDk5XHU2NGJhXHU2NGMwXHU2NGQw''@;'; put 'put ''XHU2NGQ3XHU2NGU0XHU2NGUyXHU2NTA5XHU2NTI1XHU2NTJlXHU1ZjBiXHU1ZmQyXHU3NTE5XHU1ZjExXHU1MzVmXHU1M2YxXHU1M2ZkXHU1M2U5XHU1M2U4XHU1M2ZiXHU1NDEyXHU1NDE2XHU1NDA2XHU1NDRiXHU1NDUyXHU1NDUzXHU1NDU0XHU1NDU2XHU1NDQzXHU1NDIxXHU1NDU3XHU1''@;'; put 'put ''NDU5XHU1NDIzXHU1NDMyXHU1NDgyXHU1NDk0XHU1NDc3XHU1NDcxXHU1NDY0XHU1NDlhXHU1NDliXHU1NDg0XHU1NDc2XHU1NDY2XHU1NDlkXHU1NGQwXHU1NGFkXHU1NGMyXHU1NGI0XHU1NGQyXHU1NGE3XHU1NGE2XHU1NGQzXHU1NGQ0XHU1NDcyXHU1NGEzXHU1NGQ1XHU1NGJiXHU1NGJm''@;'; put 'put ''XHU1NGNjXHU1NGQ5XHU1NGRhXHU1NGRjXHU1NGE5XHU1NGFhXHU1NGE0XHU1NGRkXHU1NGNmXHU1NGRlXHU1NTFiXHU1NGU3XHU1NTIwXHU1NGZkXHU1NTE0XHU1NGYzXHU1NTIyXHU1NTIzXHU1NTBmXHU1NTExXHU1NTI3XHU1NTJhXHU1NTY3XHU1NThmXHU1NWI1XHU1NTQ5XHU1NTZkXHU1''@;'; put 'put ''NTQxXHU1NTU1XHU1NTNmXHU1NTUwXHU1NTNjIl0sWyJlMDQwIiwiXHU5MGMyXHU5MGMzXHU5MGM2XHU5MGM4XHU5MGM5XHU5MGNiXHU5MGNjXHU5MGNkXHU5MGQyXHU5MGQ0XHU5MGQ1XHU5MGQ2XHU5MGQ4XHU5MGQ5XHU5MGRhXHU5MGRlXHU5MGRmXHU5MGUwXHU5MGUzXHU5MGU0XHU5MGU1''@;'; put 'put ''XHU5MGU5XHU5MGVhXHU5MGVjXHU5MGVlXHU5MGYwXHU5MGYxXHU5MGYyXHU5MGYzXHU5MGY1XHU5MGY2XHU5MGY3XHU5MGY5XHU5MGZhXHU5MGZiXHU5MGZjXHU5MGZmXHU5MTAwXHU5MTAxXHU5MTAzXHU5MTA1IiwxOSwiXHU5MTFhXHU5MTFiXHU5MTFjIl0sWyJlMDgwIiwiXHU5MTFkXHU5''@;'; put 'put ''MTFmXHU5MTIwXHU5MTIxXHU5MTI0IiwxMCwiXHU5MTMwXHU5MTMyIiw2LCJcdTkxM2EiLDgsIlx1OTE0NFx1NTUzN1x1NTU1Nlx1NTU3NVx1NTU3Nlx1NTU3N1x1NTUzM1x1NTUzMFx1NTU1Y1x1NTU4Ylx1NTVkMlx1NTU4M1x1NTViMVx1NTViOVx1NTU4OFx1NTU4MVx1NTU5Zlx1NTU3ZVx1''@;'; put 'put ''NTVkNlx1NTU5MVx1NTU3Ylx1NTVkZlx1NTViZFx1NTViZVx1NTU5NFx1NTU5OVx1NTVlYVx1NTVmN1x1NTVjOVx1NTYxZlx1NTVkMVx1NTVlYlx1NTVlY1x1NTVkNFx1NTVlNlx1NTVkZFx1NTVjNFx1NTVlZlx1NTVlNVx1NTVmMlx1NTVmM1x1NTVjY1x1NTVjZFx1NTVlOFx1NTVmNVx1NTVl''@;'; put 'put ''NFx1OGY5NFx1NTYxZVx1NTYwOFx1NTYwY1x1NTYwMVx1NTYyNFx1NTYyM1x1NTVmZVx1NTYwMFx1NTYyN1x1NTYyZFx1NTY1OFx1NTYzOVx1NTY1N1x1NTYyY1x1NTY0ZFx1NTY2Mlx1NTY1OVx1NTY1Y1x1NTY0Y1x1NTY1NFx1NTY4Nlx1NTY2NFx1NTY3MVx1NTY2Ylx1NTY3Ylx1NTY3Y1x1''@;'; put 'put ''NTY4NVx1NTY5M1x1NTZhZlx1NTZkNFx1NTZkN1x1NTZkZFx1NTZlMVx1NTZmNVx1NTZlYlx1NTZmOVx1NTZmZlx1NTcwNFx1NTcwYVx1NTcwOVx1NTcxY1x1NWUwZlx1NWUxOVx1NWUxNFx1NWUxMVx1NWUzMVx1NWUzYlx1NWUzYyJdLFsiZTE0MCIsIlx1OTE0NVx1OTE0N1x1OTE0OFx1OTE1''@;'; put 'put ''MVx1OTE1M1x1OTE1NFx1OTE1NVx1OTE1Nlx1OTE1OFx1OTE1OVx1OTE1Ylx1OTE1Y1x1OTE1Zlx1OTE2MFx1OTE2Nlx1OTE2N1x1OTE2OFx1OTE2Ylx1OTE2ZFx1OTE3M1x1OTE3YVx1OTE3Ylx1OTE3Y1x1OTE4MCIsNCwiXHU5MTg2XHU5MTg4XHU5MThhXHU5MThlXHU5MThmXHU5MTkzIiw2''@;'; put 'put ''LCJcdTkxOWMiLDUsIlx1OTFhNCIsNSwiXHU5MWFiXHU5MWFjXHU5MWIwXHU5MWIxXHU5MWIyXHU5MWIzXHU5MWI2XHU5MWI3XHU5MWI4XHU5MWI5XHU5MWJiIl0sWyJlMTgwIiwiXHU5MWJjIiwxMCwiXHU5MWM4XHU5MWNiXHU5MWQwXHU5MWQyIiw5LCJcdTkxZGQiLDgsIlx1NWUzN1x1NWU0''@;'; put 'put ''NFx1NWU1NFx1NWU1Ylx1NWU1ZVx1NWU2MVx1NWM4Y1x1NWM3YVx1NWM4ZFx1NWM5MFx1NWM5Nlx1NWM4OFx1NWM5OFx1NWM5OVx1NWM5MVx1NWM5YVx1NWM5Y1x1NWNiNVx1NWNhMlx1NWNiZFx1NWNhY1x1NWNhYlx1NWNiMVx1NWNhM1x1NWNjMVx1NWNiN1x1NWNjNFx1NWNkMlx1NWNlNFx1''@;'; put 'put ''NWNjYlx1NWNlNVx1NWQwMlx1NWQwM1x1NWQyN1x1NWQyNlx1NWQyZVx1NWQyNFx1NWQxZVx1NWQwNlx1NWQxYlx1NWQ1OFx1NWQzZVx1NWQzNFx1NWQzZFx1NWQ2Y1x1NWQ1Ylx1NWQ2Zlx1NWQ1ZFx1NWQ2Ylx1NWQ0Ylx1NWQ0YVx1NWQ2OVx1NWQ3NFx1NWQ4Mlx1NWQ5OVx1NWQ5ZFx1OGM3''@;'; put 'put ''M1x1NWRiN1x1NWRjNVx1NWY3M1x1NWY3N1x1NWY4Mlx1NWY4N1x1NWY4OVx1NWY4Y1x1NWY5NVx1NWY5OVx1NWY5Y1x1NWZhOFx1NWZhZFx1NWZiNVx1NWZiY1x1ODg2Mlx1NWY2MVx1NzJhZFx1NzJiMFx1NzJiNFx1NzJiN1x1NzJiOFx1NzJjM1x1NzJjMVx1NzJjZVx1NzJjZFx1NzJkMlx1''@;'; put 'put ''NzJlOFx1NzJlZlx1NzJlOVx1NzJmMlx1NzJmNFx1NzJmN1x1NzMwMVx1NzJmM1x1NzMwM1x1NzJmYSJdLFsiZTI0MCIsIlx1OTFlNiIsNjJdLFsiZTI4MCIsIlx1OTIyNSIsMzIsIlx1NzJmYlx1NzMxN1x1NzMxM1x1NzMyMVx1NzMwYVx1NzMxZVx1NzMxZFx1NzMxNVx1NzMyMlx1NzMzOVx1''@;'; put 'put ''NzMyNVx1NzMyY1x1NzMzOFx1NzMzMVx1NzM1MFx1NzM0ZFx1NzM1N1x1NzM2MFx1NzM2Y1x1NzM2Zlx1NzM3ZVx1ODIxYlx1NTkyNVx1OThlN1x1NTkyNFx1NTkwMlx1OTk2M1x1OTk2NyIsNSwiXHU5OTc0XHU5OTc3XHU5OTdkXHU5OTgwXHU5OTg0XHU5OTg3XHU5OThhXHU5OThkXHU5OTkw''@;'; put 'put ''XHU5OTkxXHU5OTkzXHU5OTk0XHU5OTk1XHU1ZTgwXHU1ZTkxXHU1ZThiXHU1ZTk2XHU1ZWE1XHU1ZWEwXHU1ZWI5XHU1ZWI1XHU1ZWJlXHU1ZWIzXHU4ZDUzXHU1ZWQyXHU1ZWQxXHU1ZWRiXHU1ZWU4XHU1ZWVhXHU4MWJhXHU1ZmM0XHU1ZmM5XHU1ZmQ2XHU1ZmNmXHU2MDAzXHU1ZmVlXHU2''@;'; put 'put ''MDA0XHU1ZmUxXHU1ZmU0XHU1ZmZlXHU2MDA1XHU2MDA2XHU1ZmVhXHU1ZmVkXHU1ZmY4XHU2MDE5XHU2MDM1XHU2MDI2XHU2MDFiXHU2MDBmXHU2MDBkXHU2MDI5XHU2MDJiXHU2MDBhXHU2MDNmXHU2MDIxXHU2MDc4XHU2MDc5XHU2MDdiXHU2MDdhXHU2MDQyIl0sWyJlMzQwIiwiXHU5MjQ2''@;'; put 'put ''Iiw0NSwiXHU5Mjc1IiwxNl0sWyJlMzgwIiwiXHU5Mjg2Iiw3LCJcdTkyOGYiLDI0LCJcdTYwNmFcdTYwN2RcdTYwOTZcdTYwOWFcdTYwYWRcdTYwOWRcdTYwODNcdTYwOTJcdTYwOGNcdTYwOWJcdTYwZWNcdTYwYmJcdTYwYjFcdTYwZGRcdTYwZDhcdTYwYzZcdTYwZGFcdTYwYjRcdTYxMjBc''@;'; put 'put ''dTYxMjZcdTYxMTVcdTYxMjNcdTYwZjRcdTYxMDBcdTYxMGVcdTYxMmJcdTYxNGFcdTYxNzVcdTYxYWNcdTYxOTRcdTYxYTdcdTYxYjdcdTYxZDRcdTYxZjVcdTVmZGRcdTk2YjNcdTk1ZTlcdTk1ZWJcdTk1ZjFcdTk1ZjNcdTk1ZjVcdTk1ZjZcdTk1ZmNcdTk1ZmVcdTk2MDNcdTk2MDRcdTk2''@;'; put 'put ''MDZcdTk2MDhcdTk2MGFcdTk2MGJcdTk2MGNcdTk2MGRcdTk2MGZcdTk2MTJcdTk2MTVcdTk2MTZcdTk2MTdcdTk2MTlcdTk2MWFcdTRlMmNcdTcyM2ZcdTYyMTVcdTZjMzVcdTZjNTRcdTZjNWNcdTZjNGFcdTZjYTNcdTZjODVcdTZjOTBcdTZjOTRcdTZjOGNcdTZjNjhcdTZjNjlcdTZjNzRc''@;'; put 'put ''dTZjNzZcdTZjODZcdTZjYTlcdTZjZDBcdTZjZDRcdTZjYWRcdTZjZjdcdTZjZjhcdTZjZjFcdTZjZDdcdTZjYjJcdTZjZTBcdTZjZDZcdTZjZmFcdTZjZWJcdTZjZWVcdTZjYjFcdTZjZDNcdTZjZWZcdTZjZmUiXSxbImU0NDAiLCJcdTkyYTgiLDUsIlx1OTJhZiIsMjQsIlx1OTJjOSIsMzFd''@;'; put 'put ''LFsiZTQ4MCIsIlx1OTJlOSIsMzIsIlx1NmQzOVx1NmQyN1x1NmQwY1x1NmQ0M1x1NmQ0OFx1NmQwN1x1NmQwNFx1NmQxOVx1NmQwZVx1NmQyYlx1NmQ0ZFx1NmQyZVx1NmQzNVx1NmQxYVx1NmQ0Zlx1NmQ1Mlx1NmQ1NFx1NmQzM1x1NmQ5MVx1NmQ2Zlx1NmQ5ZVx1NmRhMFx1NmQ1ZVx1NmQ5''@;'; put 'put ''M1x1NmQ5NFx1NmQ1Y1x1NmQ2MFx1NmQ3Y1x1NmQ2M1x1NmUxYVx1NmRjN1x1NmRjNVx1NmRkZVx1NmUwZVx1NmRiZlx1NmRlMFx1NmUxMVx1NmRlNlx1NmRkZFx1NmRkOVx1NmUxNlx1NmRhYlx1NmUwY1x1NmRhZVx1NmUyYlx1NmU2ZVx1NmU0ZVx1NmU2Ylx1NmViMlx1NmU1Zlx1NmU4Nlx1''@;'; put 'put ''NmU1M1x1NmU1NFx1NmUzMlx1NmUyNVx1NmU0NFx1NmVkZlx1NmViMVx1NmU5OFx1NmVlMFx1NmYyZFx1NmVlMlx1NmVhNVx1NmVhN1x1NmViZFx1NmViYlx1NmViN1x1NmVkN1x1NmViNFx1NmVjZlx1NmU4Zlx1NmVjMlx1NmU5Zlx1NmY2Mlx1NmY0Nlx1NmY0N1x1NmYyNFx1NmYxNVx1NmVm''@;'; put 'put ''OVx1NmYyZlx1NmYzNlx1NmY0Ylx1NmY3NFx1NmYyYVx1NmYwOVx1NmYyOVx1NmY4OVx1NmY4ZFx1NmY4Y1x1NmY3OFx1NmY3Mlx1NmY3Y1x1NmY3YVx1NmZkMSJdLFsiZTU0MCIsIlx1OTMwYSIsNTEsIlx1OTMzZiIsMTBdLFsiZTU4MCIsIlx1OTM0YSIsMzEsIlx1OTM2Ylx1NmZjOVx1NmZh''@;'; put 'put ''N1x1NmZiOVx1NmZiNlx1NmZjMlx1NmZlMVx1NmZlZVx1NmZkZVx1NmZlMFx1NmZlZlx1NzAxYVx1NzAyM1x1NzAxYlx1NzAzOVx1NzAzNVx1NzA0Zlx1NzA1ZVx1NWI4MFx1NWI4NFx1NWI5NVx1NWI5M1x1NWJhNVx1NWJiOFx1NzUyZlx1OWE5ZVx1NjQzNFx1NWJlNFx1NWJlZVx1ODkzMFx1''@;'; put 'put ''NWJmMFx1OGU0N1x1OGIwN1x1OGZiNlx1OGZkM1x1OGZkNVx1OGZlNVx1OGZlZVx1OGZlNFx1OGZlOVx1OGZlNlx1OGZmM1x1OGZlOFx1OTAwNVx1OTAwNFx1OTAwYlx1OTAyNlx1OTAxMVx1OTAwZFx1OTAxNlx1OTAyMVx1OTAzNVx1OTAzNlx1OTAyZFx1OTAyZlx1OTA0NFx1OTA1MVx1OTA1''@;'; put 'put ''Mlx1OTA1MFx1OTA2OFx1OTA1OFx1OTA2Mlx1OTA1Ylx1NjZiOVx1OTA3NFx1OTA3ZFx1OTA4Mlx1OTA4OFx1OTA4M1x1OTA4Ylx1NWY1MFx1NWY1N1x1NWY1Nlx1NWY1OFx1NWMzYlx1NTRhYlx1NWM1MFx1NWM1OVx1NWI3MVx1NWM2M1x1NWM2Nlx1N2ZiY1x1NWYyYVx1NWYyOVx1NWYyZFx1''@;'; put 'put ''ODI3NFx1NWYzY1x1OWIzYlx1NWM2ZVx1NTk4MVx1NTk4M1x1NTk4ZFx1NTlhOVx1NTlhYVx1NTlhMyJdLFsiZTY0MCIsIlx1OTM2YyIsMzQsIlx1OTM5MCIsMjddLFsiZTY4MCIsIlx1OTNhYyIsMjksIlx1OTNjYlx1OTNjY1x1OTNjZFx1NTk5N1x1NTljYVx1NTlhYlx1NTk5ZVx1NTlhNFx1''@;'; put 'put ''NTlkMlx1NTliMlx1NTlhZlx1NTlkN1x1NTliZVx1NWEwNVx1NWEwNlx1NTlkZFx1NWEwOFx1NTllM1x1NTlkOFx1NTlmOVx1NWEwY1x1NWEwOVx1NWEzMlx1NWEzNFx1NWExMVx1NWEyM1x1NWExM1x1NWE0MFx1NWE2N1x1NWE0YVx1NWE1NVx1NWEzY1x1NWE2Mlx1NWE3NVx1ODBlY1x1NWFh''@;'; put 'put ''YVx1NWE5Ylx1NWE3N1x1NWE3YVx1NWFiZVx1NWFlYlx1NWFiMlx1NWFkMlx1NWFkNFx1NWFiOFx1NWFlMFx1NWFlM1x1NWFmMVx1NWFkNlx1NWFlNlx1NWFkOFx1NWFkY1x1NWIwOVx1NWIxN1x1NWIxNlx1NWIzMlx1NWIzN1x1NWI0MFx1NWMxNVx1NWMxY1x1NWI1YVx1NWI2NVx1NWI3M1x1''@;'; put 'put ''NWI1MVx1NWI1M1x1NWI2Mlx1OWE3NVx1OWE3N1x1OWE3OFx1OWE3YVx1OWE3Zlx1OWE3ZFx1OWE4MFx1OWE4MVx1OWE4NVx1OWE4OFx1OWE4YVx1OWE5MFx1OWE5Mlx1OWE5M1x1OWE5Nlx1OWE5OFx1OWE5Ylx1OWE5Y1x1OWE5ZFx1OWE5Zlx1OWFhMFx1OWFhMlx1OWFhM1x1OWFhNVx1OWFh''@;'; put 'put ''N1x1N2U5Zlx1N2VhMVx1N2VhM1x1N2VhNVx1N2VhOFx1N2VhOSJdLFsiZTc0MCIsIlx1OTNjZSIsNywiXHU5M2Q3Iiw1NF0sWyJlNzgwIiwiXHU5NDBlIiwzMiwiXHU3ZWFkXHU3ZWIwXHU3ZWJlXHU3ZWMwXHU3ZWMxXHU3ZWMyXHU3ZWM5XHU3ZWNiXHU3ZWNjXHU3ZWQwXHU3ZWQ0XHU3ZWQ3''@;'; put 'put ''XHU3ZWRiXHU3ZWUwXHU3ZWUxXHU3ZWU4XHU3ZWViXHU3ZWVlXHU3ZWVmXHU3ZWYxXHU3ZWYyXHU3ZjBkXHU3ZWY2XHU3ZWZhXHU3ZWZiXHU3ZWZlXHU3ZjAxXHU3ZjAyXHU3ZjAzXHU3ZjA3XHU3ZjA4XHU3ZjBiXHU3ZjBjXHU3ZjBmXHU3ZjExXHU3ZjEyXHU3ZjE3XHU3ZjE5XHU3ZjFjXHU3''@;'; put 'put ''ZjFiXHU3ZjFmXHU3ZjIxIiw2LCJcdTdmMmFcdTdmMmJcdTdmMmNcdTdmMmRcdTdmMmYiLDQsIlx1N2YzNVx1NWU3YVx1NzU3Zlx1NWRkYlx1NzUzZVx1OTA5NVx1NzM4ZVx1NzM5MVx1NzNhZVx1NzNhMlx1NzM5Zlx1NzNjZlx1NzNjMlx1NzNkMVx1NzNiN1x1NzNiM1x1NzNjMFx1NzNjOVx1''@;'; put 'put ''NzNjOFx1NzNlNVx1NzNkOVx1OTg3Y1x1NzQwYVx1NzNlOVx1NzNlN1x1NzNkZVx1NzNiYVx1NzNmMlx1NzQwZlx1NzQyYVx1NzQ1Ylx1NzQyNlx1NzQyNVx1NzQyOFx1NzQzMFx1NzQyZVx1NzQyYyJdLFsiZTg0MCIsIlx1OTQyZiIsMTQsIlx1OTQzZiIsNDMsIlx1OTQ2Y1x1OTQ2ZFx1OTQ2''@;'; put 'put ''ZVx1OTQ2ZiJdLFsiZTg4MCIsIlx1OTQ3MCIsMjAsIlx1OTQ5MVx1OTQ5Nlx1OTQ5OFx1OTRjN1x1OTRjZlx1OTRkM1x1OTRkNFx1OTRkYVx1OTRlNlx1OTRmYlx1OTUxY1x1OTUyMFx1NzQxYlx1NzQxYVx1NzQ0MVx1NzQ1Y1x1NzQ1N1x1NzQ1NVx1NzQ1OVx1NzQ3N1x1NzQ2ZFx1NzQ3ZVx1''@;'; put 'put ''NzQ5Y1x1NzQ4ZVx1NzQ4MFx1NzQ4MVx1NzQ4N1x1NzQ4Ylx1NzQ5ZVx1NzRhOFx1NzRhOVx1NzQ5MFx1NzRhN1x1NzRkMlx1NzRiYVx1OTdlYVx1OTdlYlx1OTdlY1x1Njc0Y1x1Njc1M1x1Njc1ZVx1Njc0OFx1Njc2OVx1NjdhNVx1Njc4N1x1Njc2YVx1Njc3M1x1Njc5OFx1NjdhN1x1Njc3''@;'; put 'put ''NVx1NjdhOFx1Njc5ZVx1NjdhZFx1Njc4Ylx1Njc3N1x1Njc3Y1x1NjdmMFx1NjgwOVx1NjdkOFx1NjgwYVx1NjdlOVx1NjdiMFx1NjgwY1x1NjdkOVx1NjdiNVx1NjdkYVx1NjdiM1x1NjdkZFx1NjgwMFx1NjdjM1x1NjdiOFx1NjdlMlx1NjgwZVx1NjdjMVx1NjdmZFx1NjgzMlx1NjgzM1x1''@;'; put 'put ''Njg2MFx1Njg2MVx1Njg0ZVx1Njg2Mlx1Njg0NFx1Njg2NFx1Njg4M1x1NjgxZFx1Njg1NVx1Njg2Nlx1Njg0MVx1Njg2N1x1Njg0MFx1NjgzZVx1Njg0YVx1Njg0OVx1NjgyOVx1NjhiNVx1Njg4Zlx1Njg3NFx1Njg3N1x1Njg5M1x1Njg2Ylx1NjhjMlx1Njk2ZVx1NjhmY1x1NjkxZlx1Njky''@;'; put 'put ''MFx1NjhmOSJdLFsiZTk0MCIsIlx1OTUyN1x1OTUzM1x1OTUzZFx1OTU0M1x1OTU0OFx1OTU0Ylx1OTU1NVx1OTU1YVx1OTU2MFx1OTU2ZVx1OTU3NFx1OTU3NVx1OTU3NyIsNywiXHU5NTgwIiw0Ml0sWyJlOTgwIiwiXHU5NWFiIiwzMiwiXHU2OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2OTU3''@;'; put 'put ''XHU2OGUzXHU2OTEwXHU2OTcxXHU2OTM5XHU2OTYwXHU2OTQyXHU2OTVkXHU2OTg0XHU2OTZiXHU2OTgwXHU2OTk4XHU2OTc4XHU2OTM0XHU2OWNjXHU2OTg3XHU2OTg4XHU2OWNlXHU2OTg5XHU2OTY2XHU2OTYzXHU2OTc5XHU2OTliXHU2OWE3XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0XHU2''@;'; put 'put ''OWIxXHU2OWMxXHU2OWNhXHU2OWRmXHU2OTk1XHU2OWUwXHU2OThkXHU2OWZmXHU2YTJmXHU2OWVkXHU2YTE3XHU2YTE4XHU2YTY1XHU2OWYyXHU2YTQ0XHU2YTNlXHU2YWEwXHU2YTUwXHU2YTViXHU2YTM1XHU2YThlXHU2YTc5XHU2YTNkXHU2YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2YTkw''@;'; put 'put ''XHU2YWE5XHU2YTk3XHU2YWFiXHU3MzM3XHU3MzUyXHU2YjgxXHU2YjgyXHU2Yjg3XHU2Yjg0XHU2YjkyXHU2YjkzXHU2YjhkXHU2YjlhXHU2YjliXHU2YmExXHU2YmFhXHU4ZjZiXHU4ZjZkXHU4ZjcxXHU4ZjcyXHU4ZjczXHU4Zjc1XHU4Zjc2XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4ZjdhXHU4''@;'; put 'put ''ZjdjXHU4ZjdlXHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4Zjg3XHU4ZjhiIl0sWyJlYTQwIiwiXHU5NWNjIiwyNywiXHU5NWVjXHU5NWZmXHU5NjA3XHU5NjEzXHU5NjE4XHU5NjFiXHU5NjFlXHU5NjIwXHU5NjIzIiw2LCJcdTk2MmJcdTk2MmNcdTk2MmRcdTk2MmZcdTk2MzBcdTk2MzdcdTk2Mzhc''@;'; put 'put ''dTk2MzlcdTk2M2FcdTk2M2VcdTk2NDFcdTk2NDNcdTk2NGFcdTk2NGVcdTk2NGZcdTk2NTFcdTk2NTJcdTk2NTNcdTk2NTZcdTk2NTciXSxbImVhODAiLCJcdTk2NThcdTk2NTlcdTk2NWFcdTk2NWNcdTk2NWRcdTk2NWVcdTk2NjBcdTk2NjNcdTk2NjVcdTk2NjZcdTk2NmJcdTk2NmQiLDQs''@;'; put 'put ''Ilx1OTY3M1x1OTY3OCIsMTIsIlx1OTY4N1x1OTY4OVx1OTY4YVx1OGY4ZFx1OGY4ZVx1OGY4Zlx1OGY5OFx1OGY5YVx1OGVjZVx1NjIwYlx1NjIxN1x1NjIxYlx1NjIxZlx1NjIyMlx1NjIyMVx1NjIyNVx1NjIyNFx1NjIyY1x1ODFlN1x1NzRlZlx1NzRmNFx1NzRmZlx1NzUwZlx1NzUxMVx1''@;'; put 'put ''NzUxM1x1NjUzNFx1NjVlZVx1NjVlZlx1NjVmMFx1NjYwYVx1NjYxOVx1Njc3Mlx1NjYwM1x1NjYxNVx1NjYwMFx1NzA4NVx1NjZmN1x1NjYxZFx1NjYzNFx1NjYzMVx1NjYzNlx1NjYzNVx1ODAwNlx1NjY1Zlx1NjY1NFx1NjY0MVx1NjY0Zlx1NjY1Nlx1NjY2MVx1NjY1N1x1NjY3N1x1NjY4''@;'; put 'put ''NFx1NjY4Y1x1NjZhN1x1NjY5ZFx1NjZiZVx1NjZkYlx1NjZkY1x1NjZlNlx1NjZlOVx1OGQzMlx1OGQzM1x1OGQzNlx1OGQzYlx1OGQzZFx1OGQ0MFx1OGQ0NVx1OGQ0Nlx1OGQ0OFx1OGQ0OVx1OGQ0N1x1OGQ0ZFx1OGQ1NVx1OGQ1OVx1ODljN1x1ODljYVx1ODljYlx1ODljY1x1ODljZVx1''@;'; put 'put ''ODljZlx1ODlkMFx1ODlkMVx1NzI2ZVx1NzI5Zlx1NzI1ZFx1NzI2Nlx1NzI2Zlx1NzI3ZVx1NzI3Zlx1NzI4NFx1NzI4Ylx1NzI4ZFx1NzI4Zlx1NzI5Mlx1NjMwOFx1NjMzMlx1NjNiMCJdLFsiZWI0MCIsIlx1OTY4Y1x1OTY4ZVx1OTY5MVx1OTY5Mlx1OTY5M1x1OTY5NVx1OTY5Nlx1OTY5''@;'; put 'put ''YVx1OTY5Ylx1OTY5ZCIsOSwiXHU5NmE4Iiw3LCJcdTk2YjFcdTk2YjJcdTk2YjRcdTk2YjVcdTk2YjdcdTk2YjhcdTk2YmFcdTk2YmJcdTk2YmZcdTk2YzJcdTk2YzNcdTk2YzhcdTk2Y2FcdTk2Y2JcdTk2ZDBcdTk2ZDFcdTk2ZDNcdTk2ZDRcdTk2ZDYiLDksIlx1OTZlMSIsNiwiXHU5NmVi''@;'; put 'put ''Il0sWyJlYjgwIiwiXHU5NmVjXHU5NmVkXHU5NmVlXHU5NmYwXHU5NmYxXHU5NmYyXHU5NmY0XHU5NmY1XHU5NmY4XHU5NmZhXHU5NmZiXHU5NmZjXHU5NmZkXHU5NmZmXHU5NzAyXHU5NzAzXHU5NzA1XHU5NzBhXHU5NzBiXHU5NzBjXHU5NzEwXHU5NzExXHU5NzEyXHU5NzE0XHU5NzE1XHU5''@;'; put 'put ''NzE3Iiw0LCJcdTk3MWRcdTk3MWZcdTk3MjBcdTY0M2ZcdTY0ZDhcdTgwMDRcdTZiZWFcdTZiZjNcdTZiZmRcdTZiZjVcdTZiZjlcdTZjMDVcdTZjMDdcdTZjMDZcdTZjMGRcdTZjMTVcdTZjMThcdTZjMTlcdTZjMWFcdTZjMjFcdTZjMjlcdTZjMjRcdTZjMmFcdTZjMzJcdTY1MzVcdTY1NTVc''@;'; put 'put ''dTY1NmJcdTcyNGRcdTcyNTJcdTcyNTZcdTcyMzBcdTg2NjJcdTUyMTZcdTgwOWZcdTgwOWNcdTgwOTNcdTgwYmNcdTY3MGFcdTgwYmRcdTgwYjFcdTgwYWJcdTgwYWRcdTgwYjRcdTgwYjdcdTgwZTdcdTgwZThcdTgwZTlcdTgwZWFcdTgwZGJcdTgwYzJcdTgwYzRcdTgwZDlcdTgwY2RcdTgw''@;'; put 'put ''ZDdcdTY3MTBcdTgwZGRcdTgwZWJcdTgwZjFcdTgwZjRcdTgwZWRcdTgxMGRcdTgxMGVcdTgwZjJcdTgwZmNcdTY3MTVcdTgxMTJcdThjNWFcdTgxMzZcdTgxMWVcdTgxMmNcdTgxMThcdTgxMzJcdTgxNDhcdTgxNGNcdTgxNTNcdTgxNzRcdTgxNTlcdTgxNWFcdTgxNzFcdTgxNjBcdTgxNjlc''@;'; put 'put ''dTgxN2NcdTgxN2RcdTgxNmRcdTgxNjdcdTU4NGRcdTVhYjVcdTgxODhcdTgxODJcdTgxOTFcdTZlZDVcdTgxYTNcdTgxYWFcdTgxY2NcdTY3MjZcdTgxY2FcdTgxYmIiXSxbImVjNDAiLCJcdTk3MjEiLDgsIlx1OTcyYlx1OTcyY1x1OTcyZVx1OTcyZlx1OTczMVx1OTczMyIsNCwiXHU5NzNh''@;'; put 'put ''XHU5NzNiXHU5NzNjXHU5NzNkXHU5NzNmIiwxOCwiXHU5NzU0XHU5NzU1XHU5NzU3XHU5NzU4XHU5NzVhXHU5NzVjXHU5NzVkXHU5NzVmXHU5NzYzXHU5NzY0XHU5NzY2XHU5NzY3XHU5NzY4XHU5NzZhIiw3XSxbImVjODAiLCJcdTk3NzJcdTk3NzVcdTk3NzciLDQsIlx1OTc3ZCIsNywiXHU5''@;'; put 'put ''Nzg2Iiw0LCJcdTk3OGNcdTk3OGVcdTk3OGZcdTk3OTBcdTk3OTNcdTk3OTVcdTk3OTZcdTk3OTdcdTk3OTkiLDQsIlx1ODFjMVx1ODFhNlx1NmIyNFx1NmIzN1x1NmIzOVx1NmI0M1x1NmI0Nlx1NmI1OVx1OThkMVx1OThkMlx1OThkM1x1OThkNVx1OThkOVx1OThkYVx1NmJiM1x1NWY0MFx1''@;'; put 'put ''NmJjMlx1ODlmM1x1NjU5MFx1OWY1MVx1NjU5M1x1NjViY1x1NjVjNlx1NjVjNFx1NjVjM1x1NjVjY1x1NjVjZVx1NjVkMlx1NjVkNlx1NzA4MFx1NzA5Y1x1NzA5Nlx1NzA5ZFx1NzBiYlx1NzBjMFx1NzBiN1x1NzBhYlx1NzBiMVx1NzBlOFx1NzBjYVx1NzExMFx1NzExM1x1NzExNlx1NzEy''@;'; put 'put ''Zlx1NzEzMVx1NzE3M1x1NzE1Y1x1NzE2OFx1NzE0NVx1NzE3Mlx1NzE0YVx1NzE3OFx1NzE3YVx1NzE5OFx1NzFiM1x1NzFiNVx1NzFhOFx1NzFhMFx1NzFlMFx1NzFkNFx1NzFlN1x1NzFmOVx1NzIxZFx1NzIyOFx1NzA2Y1x1NzExOFx1NzE2Nlx1NzFiOVx1NjIzZVx1NjIzZFx1NjI0M1x1''@;'; put 'put ''NjI0OFx1NjI0OVx1NzkzYlx1Nzk0MFx1Nzk0Nlx1Nzk0OVx1Nzk1Ylx1Nzk1Y1x1Nzk1M1x1Nzk1YVx1Nzk2Mlx1Nzk1N1x1Nzk2MFx1Nzk2Zlx1Nzk2N1x1Nzk3YVx1Nzk4NVx1Nzk4YVx1Nzk5YVx1NzlhN1x1NzliM1x1NWZkMVx1NWZkMCJdLFsiZWQ0MCIsIlx1OTc5ZVx1OTc5Zlx1OTdh''@;'; put 'put ''MVx1OTdhMlx1OTdhNCIsNiwiXHU5N2FjXHU5N2FlXHU5N2IwXHU5N2IxXHU5N2IzXHU5N2I1Iiw0Nl0sWyJlZDgwIiwiXHU5N2U0XHU5N2U1XHU5N2U4XHU5N2VlIiw0LCJcdTk3ZjRcdTk3ZjciLDIzLCJcdTYwM2NcdTYwNWRcdTYwNWFcdTYwNjdcdTYwNDFcdTYwNTlcdTYwNjNcdTYwYWJc''@;'; put 'put ''dTYxMDZcdTYxMGRcdTYxNWRcdTYxYTlcdTYxOWRcdTYxY2JcdTYxZDFcdTYyMDZcdTgwODBcdTgwN2ZcdTZjOTNcdTZjZjZcdTZkZmNcdTc3ZjZcdTc3ZjhcdTc4MDBcdTc4MDlcdTc4MTdcdTc4MThcdTc4MTFcdTY1YWJcdTc4MmRcdTc4MWNcdTc4MWRcdTc4MzlcdTc4M2FcdTc4M2JcdTc4''@;'; put 'put ''MWZcdTc4M2NcdTc4MjVcdTc4MmNcdTc4MjNcdTc4MjlcdTc4NGVcdTc4NmRcdTc4NTZcdTc4NTdcdTc4MjZcdTc4NTBcdTc4NDdcdTc4NGNcdTc4NmFcdTc4OWJcdTc4OTNcdTc4OWFcdTc4ODdcdTc4OWNcdTc4YTFcdTc4YTNcdTc4YjJcdTc4YjlcdTc4YTVcdTc4ZDRcdTc4ZDlcdTc4Yzlc''@;'; put 'put ''dTc4ZWNcdTc4ZjJcdTc5MDVcdTc4ZjRcdTc5MTNcdTc5MjRcdTc5MWVcdTc5MzRcdTlmOWJcdTllZjlcdTllZmJcdTllZmNcdTc2ZjFcdTc3MDRcdTc3MGRcdTc2ZjlcdTc3MDdcdTc3MDhcdTc3MWFcdTc3MjJcdTc3MTlcdTc3MmRcdTc3MjZcdTc3MzVcdTc3MzhcdTc3NTBcdTc3NTFcdTc3''@;'; put 'put ''NDdcdTc3NDNcdTc3NWFcdTc3NjgiXSxbImVlNDAiLCJcdTk4MGYiLDYyXSxbImVlODAiLCJcdTk4NGUiLDMyLCJcdTc3NjJcdTc3NjVcdTc3N2ZcdTc3OGRcdTc3N2RcdTc3ODBcdTc3OGNcdTc3OTFcdTc3OWZcdTc3YTBcdTc3YjBcdTc3YjVcdTc3YmRcdTc1M2FcdTc1NDBcdTc1NGVcdTc1''@;'; put 'put ''NGJcdTc1NDhcdTc1NWJcdTc1NzJcdTc1NzlcdTc1ODNcdTdmNThcdTdmNjFcdTdmNWZcdThhNDhcdTdmNjhcdTdmNzRcdTdmNzFcdTdmNzlcdTdmODFcdTdmN2VcdTc2Y2RcdTc2ZTVcdTg4MzJcdTk0ODVcdTk0ODZcdTk0ODdcdTk0OGJcdTk0OGFcdTk0OGNcdTk0OGRcdTk0OGZcdTk0OTBc''@;'; put 'put ''dTk0OTRcdTk0OTdcdTk0OTVcdTk0OWFcdTk0OWJcdTk0OWNcdTk0YTNcdTk0YTRcdTk0YWJcdTk0YWFcdTk0YWRcdTk0YWNcdTk0YWZcdTk0YjBcdTk0YjJcdTk0YjRcdTk0YjYiLDQsIlx1OTRiY1x1OTRiZFx1OTRiZlx1OTRjNFx1OTRjOCIsNiwiXHU5NGQwXHU5NGQxXHU5NGQyXHU5NGQ1''@;'; put 'put ''XHU5NGQ2XHU5NGQ3XHU5NGQ5XHU5NGQ4XHU5NGRiXHU5NGRlXHU5NGRmXHU5NGUwXHU5NGUyXHU5NGU0XHU5NGU1XHU5NGU3XHU5NGU4XHU5NGVhIl0sWyJlZjQwIiwiXHU5ODZmIiw1LCJcdTk4OGJcdTk4OGVcdTk4OTJcdTk4OTVcdTk4OTlcdTk4YTNcdTk4YTgiLDM3LCJcdTk4Y2ZcdTk4''@;'; put 'put ''ZDBcdTk4ZDRcdTk4ZDZcdTk4ZDdcdTk4ZGJcdTk4ZGNcdTk4ZGRcdTk4ZTAiLDRdLFsiZWY4MCIsIlx1OThlNVx1OThlNlx1OThlOSIsMzAsIlx1OTRlOVx1OTRlYlx1OTRlZVx1OTRlZlx1OTRmM1x1OTRmNFx1OTRmNVx1OTRmN1x1OTRmOVx1OTRmY1x1OTRmZFx1OTRmZlx1OTUwM1x1OTUw''@;'; put 'put ''Mlx1OTUwNlx1OTUwN1x1OTUwOVx1OTUwYVx1OTUwZFx1OTUwZVx1OTUwZlx1OTUxMiIsNCwiXHU5NTE4XHU5NTFiXHU5NTFkXHU5NTFlXHU5NTFmXHU5NTIyXHU5NTJhXHU5NTJiXHU5NTI5XHU5NTJjXHU5NTMxXHU5NTMyXHU5NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5NTNjXHU5NTNlXHU5''@;'; put 'put ''NTNmXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRjXHU5NTRlXHU5NTRmXHU5NTUyXHU5NTUzXHU5NTU0XHU5NTU2XHU5NTU3XHU5NTU4XHU5NTU5XHU5NTViXHU5NTVlXHU5NTVmXHU5NTVkXHU5NTYxXHU5NTYyXHU5NTY0Iiw4LCJcdTk1NmZcdTk1NzFcdTk1NzJc''@;'; put 'put ''dTk1NzNcdTk1M2FcdTc3ZTdcdTc3ZWNcdTk2YzlcdTc5ZDVcdTc5ZWRcdTc5ZTNcdTc5ZWJcdTdhMDZcdTVkNDdcdTdhMDNcdTdhMDJcdTdhMWVcdTdhMTQiXSxbImYwNDAiLCJcdTk5MDgiLDQsIlx1OTkwZVx1OTkwZlx1OTkxMSIsMjgsIlx1OTkyZiIsMjZdLFsiZjA4MCIsIlx1OTk0YSIs''@;'; put 'put ''OSwiXHU5OTU2IiwxMiwiXHU5OTY0XHU5OTY2XHU5OTczXHU5OTc4XHU5OTc5XHU5OTdiXHU5OTdlXHU5OTgyXHU5OTgzXHU5OTg5XHU3YTM5XHU3YTM3XHU3YTUxXHU5ZWNmXHU5OWE1XHU3YTcwXHU3Njg4XHU3NjhlXHU3NjkzXHU3Njk5XHU3NmE0XHU3NGRlXHU3NGUwXHU3NTJjXHU5ZTIw''@;'; put 'put ''XHU5ZTIyXHU5ZTI4Iiw0LCJcdTllMzJcdTllMzFcdTllMzZcdTllMzhcdTllMzdcdTllMzlcdTllM2FcdTllM2VcdTllNDFcdTllNDJcdTllNDRcdTllNDZcdTllNDdcdTllNDhcdTllNDlcdTllNGJcdTllNGNcdTllNGVcdTllNTFcdTllNTVcdTllNTdcdTllNWFcdTllNWJcdTllNWNcdTll''@;'; put 'put ''NWVcdTllNjNcdTllNjYiLDYsIlx1OWU3MVx1OWU2ZFx1OWU3M1x1NzU5Mlx1NzU5NFx1NzU5Nlx1NzVhMFx1NzU5ZFx1NzVhY1x1NzVhM1x1NzViM1x1NzViNFx1NzViOFx1NzVjNFx1NzViMVx1NzViMFx1NzVjM1x1NzVjMlx1NzVkNlx1NzVjZFx1NzVlM1x1NzVlOFx1NzVlNlx1NzVlNFx1''@;'; put 'put ''NzVlYlx1NzVlN1x1NzYwM1x1NzVmMVx1NzVmY1x1NzVmZlx1NzYxMFx1NzYwMFx1NzYwNVx1NzYwY1x1NzYxN1x1NzYwYVx1NzYyNVx1NzYxOFx1NzYxNVx1NzYxOSJdLFsiZjE0MCIsIlx1OTk4Y1x1OTk4ZVx1OTk5YSIsMTAsIlx1OTlhNlx1OTlhN1x1OTlhOSIsNDddLFsiZjE4MCIsIlx1''@;'; put 'put ''OTlkOSIsMzIsIlx1NzYxYlx1NzYzY1x1NzYyMlx1NzYyMFx1NzY0MFx1NzYyZFx1NzYzMFx1NzYzZlx1NzYzNVx1NzY0M1x1NzYzZVx1NzYzM1x1NzY0ZFx1NzY1ZVx1NzY1NFx1NzY1Y1x1NzY1Nlx1NzY2Ylx1NzY2Zlx1N2ZjYVx1N2FlNlx1N2E3OFx1N2E3OVx1N2E4MFx1N2E4Nlx1N2E4''@;'; put 'put ''OFx1N2E5NVx1N2FhNlx1N2FhMFx1N2FhY1x1N2FhOFx1N2FhZFx1N2FiM1x1ODg2NFx1ODg2OVx1ODg3Mlx1ODg3ZFx1ODg3Zlx1ODg4Mlx1ODhhMlx1ODhjNlx1ODhiN1x1ODhiY1x1ODhjOVx1ODhlMlx1ODhjZVx1ODhlM1x1ODhlNVx1ODhmMVx1ODkxYVx1ODhmY1x1ODhlOFx1ODhmZVx1''@;'; put 'put ''ODhmMFx1ODkyMVx1ODkxOVx1ODkxM1x1ODkxYlx1ODkwYVx1ODkzNFx1ODkyYlx1ODkzNlx1ODk0MVx1ODk2Nlx1ODk3Ylx1NzU4Ylx1ODBlNVx1NzZiMlx1NzZiNFx1NzdkY1x1ODAxMlx1ODAxNFx1ODAxNlx1ODAxY1x1ODAyMFx1ODAyMlx1ODAyNVx1ODAyNlx1ODAyN1x1ODAyOVx1ODAy''@;'; put 'put ''OFx1ODAzMVx1ODAwYlx1ODAzNVx1ODA0M1x1ODA0Nlx1ODA0ZFx1ODA1Mlx1ODA2OVx1ODA3MVx1ODk4M1x1OTg3OFx1OTg4MFx1OTg4MyJdLFsiZjI0MCIsIlx1OTlmYSIsNjJdLFsiZjI4MCIsIlx1OWEzOSIsMzIsIlx1OTg4OVx1OTg4Y1x1OTg4ZFx1OTg4Zlx1OTg5NFx1OTg5YVx1OTg5''@;'; put 'put ''Ylx1OTg5ZVx1OTg5Zlx1OThhMVx1OThhMlx1OThhNVx1OThhNlx1ODY0ZFx1ODY1NFx1ODY2Y1x1ODY2ZVx1ODY3Zlx1ODY3YVx1ODY3Y1x1ODY3Ylx1ODZhOFx1ODY4ZFx1ODY4Ylx1ODZhY1x1ODY5ZFx1ODZhN1x1ODZhM1x1ODZhYVx1ODY5M1x1ODZhOVx1ODZiNlx1ODZjNFx1ODZiNVx1''@;'; put 'put ''ODZjZVx1ODZiMFx1ODZiYVx1ODZiMVx1ODZhZlx1ODZjOVx1ODZjZlx1ODZiNFx1ODZlOVx1ODZmMVx1ODZmMlx1ODZlZFx1ODZmM1x1ODZkMFx1ODcxM1x1ODZkZVx1ODZmNFx1ODZkZlx1ODZkOFx1ODZkMVx1ODcwM1x1ODcwN1x1ODZmOFx1ODcwOFx1ODcwYVx1ODcwZFx1ODcwOVx1ODcy''@;'; put 'put ''M1x1ODczYlx1ODcxZVx1ODcyNVx1ODcyZVx1ODcxYVx1ODczZVx1ODc0OFx1ODczNFx1ODczMVx1ODcyOVx1ODczN1x1ODczZlx1ODc4Mlx1ODcyMlx1ODc3ZFx1ODc3ZVx1ODc3Ylx1ODc2MFx1ODc3MFx1ODc0Y1x1ODc2ZVx1ODc4Ylx1ODc1M1x1ODc2M1x1ODc3Y1x1ODc2NFx1ODc1OVx1''@;'; put 'put ''ODc2NVx1ODc5M1x1ODdhZlx1ODdhOFx1ODdkMiJdLFsiZjM0MCIsIlx1OWE1YSIsMTcsIlx1OWE3Mlx1OWE4M1x1OWE4OVx1OWE4ZFx1OWE4ZVx1OWE5NFx1OWE5NVx1OWE5OVx1OWFhNlx1OWFhOSIsNiwiXHU5YWIyXHU5YWIzXHU5YWI0XHU5YWI1XHU5YWI5XHU5YWJiXHU5YWJkXHU5YWJl''@;'; put 'put ''XHU5YWJmXHU5YWMzXHU5YWM0XHU5YWM2Iiw0LCJcdTlhY2RcdTlhY2VcdTlhY2ZcdTlhZDBcdTlhZDJcdTlhZDRcdTlhZDVcdTlhZDZcdTlhZDdcdTlhZDlcdTlhZGFcdTlhZGJcdTlhZGMiXSxbImYzODAiLCJcdTlhZGRcdTlhZGVcdTlhZTBcdTlhZTJcdTlhZTNcdTlhZTRcdTlhZTVcdTlh''@;'; put 'put ''ZTdcdTlhZThcdTlhZTlcdTlhZWFcdTlhZWNcdTlhZWVcdTlhZjAiLDgsIlx1OWFmYVx1OWFmYyIsNiwiXHU5YjA0XHU5YjA1XHU5YjA2XHU4N2M2XHU4Nzg4XHU4Nzg1XHU4N2FkXHU4Nzk3XHU4NzgzXHU4N2FiXHU4N2U1XHU4N2FjXHU4N2I1XHU4N2IzXHU4N2NiXHU4N2QzXHU4N2JkXHU4''@;'; put 'put ''N2QxXHU4N2MwXHU4N2NhXHU4N2RiXHU4N2VhXHU4N2UwXHU4N2VlXHU4ODE2XHU4ODEzXHU4N2ZlXHU4ODBhXHU4ODFiXHU4ODIxXHU4ODM5XHU4ODNjXHU3ZjM2XHU3ZjQyXHU3ZjQ0XHU3ZjQ1XHU4MjEwXHU3YWZhXHU3YWZkXHU3YjA4XHU3YjAzXHU3YjA0XHU3YjE1XHU3YjBhXHU3YjJi''@;'; put 'put ''XHU3YjBmXHU3YjQ3XHU3YjM4XHU3YjJhXHU3YjE5XHU3YjJlXHU3YjMxXHU3YjIwXHU3YjI1XHU3YjI0XHU3YjMzXHU3YjNlXHU3YjFlXHU3YjU4XHU3YjVhXHU3YjQ1XHU3Yjc1XHU3YjRjXHU3YjVkXHU3YjYwXHU3YjZlXHU3YjdiXHU3YjYyXHU3YjcyXHU3YjcxXHU3YjkwXHU3YmE2XHU3''@;'; put 'put ''YmE3XHU3YmI4XHU3YmFjXHU3YjlkXHU3YmE4XHU3Yjg1XHU3YmFhXHU3YjljXHU3YmEyXHU3YmFiXHU3YmI0XHU3YmQxXHU3YmMxXHU3YmNjXHU3YmRkXHU3YmRhXHU3YmU1XHU3YmU2XHU3YmVhXHU3YzBjXHU3YmZlXHU3YmZjXHU3YzBmXHU3YzE2XHU3YzBiIl0sWyJmNDQwIiwiXHU5YjA3''@;'; put 'put ''XHU5YjA5Iiw1LCJcdTliMTBcdTliMTFcdTliMTJcdTliMTQiLDEwLCJcdTliMjBcdTliMjFcdTliMjJcdTliMjQiLDEwLCJcdTliMzBcdTliMzFcdTliMzMiLDcsIlx1OWIzZFx1OWIzZVx1OWIzZlx1OWI0MFx1OWI0Nlx1OWI0YVx1OWI0Ylx1OWI0Y1x1OWI0ZVx1OWI1MFx1OWI1Mlx1OWI1''@;'; put 'put ''M1x1OWI1NSIsNV0sWyJmNDgwIiwiXHU5YjViIiwzMiwiXHU3YzFmXHU3YzJhXHU3YzI2XHU3YzM4XHU3YzQxXHU3YzQwXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA0XHU4MWVjXHU4ODQ0XHU4MjIxXHU4MjIyXHU4MjIzXHU4MjJkXHU4MjJmXHU4MjI4XHU4MjJiXHU4MjM4XHU4MjNiXHU4MjMz''@;'; put 'put ''XHU4MjM0XHU4MjNlXHU4MjQ0XHU4MjQ5XHU4MjRiXHU4MjRmXHU4MjVhXHU4MjVmXHU4MjY4XHU4ODdlXHU4ODg1XHU4ODg4XHU4OGQ4XHU4OGRmXHU4OTVlXHU3ZjlkXHU3ZjlmXHU3ZmE3XHU3ZmFmXHU3ZmIwXHU3ZmIyXHU3YzdjXHU2NTQ5XHU3YzkxXHU3YzlkXHU3YzljXHU3YzllXHU3''@;'; put 'put ''Y2EyXHU3Y2IyXHU3Y2JjXHU3Y2JkXHU3Y2MxXHU3Y2M3XHU3Y2NjXHU3Y2NkXHU3Y2M4XHU3Y2M1XHU3Y2Q3XHU3Y2U4XHU4MjZlXHU2NmE4XHU3ZmJmXHU3ZmNlXHU3ZmQ1XHU3ZmU1XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmVlXHU3ZmYzXHU3Y2Y4XHU3ZDc3XHU3ZGE2XHU3ZGFlXHU3ZTQ3''@;'; put 'put ''XHU3ZTliXHU5ZWI4XHU5ZWI0XHU4ZDczXHU4ZDg0XHU4ZDk0XHU4ZDkxXHU4ZGIxXHU4ZDY3XHU4ZDZkXHU4YzQ3XHU4YzQ5XHU5MTRhXHU5MTUwXHU5MTRlXHU5MTRmXHU5MTY0Il0sWyJmNTQwIiwiXHU5YjdjIiw2Ml0sWyJmNTgwIiwiXHU5YmJiIiwzMiwiXHU5MTYyXHU5MTYxXHU5MTcw''@;'; put 'put ''XHU5MTY5XHU5MTZmXHU5MTdkXHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThjXHU5MTg1XHU5MTkwXHU5MThkXHU5MTkxXHU5MWEyXHU5MWEzXHU5MWFhXHU5MWFkXHU5MWFlXHU5MWFmXHU5MWI1XHU5MWI0XHU5MWJhXHU4YzU1XHU5ZTdlXHU4ZGI4XHU4ZGViXHU4ZTA1XHU4ZTU5XHU4''@;'; put 'put ''ZTY5XHU4ZGI1XHU4ZGJmXHU4ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4ZGQ3XHU4ZGRhXHU4ZGRlXHU4ZGNlXHU4ZGNmXHU4ZGRiXHU4ZGM2XHU4ZGVjXHU4ZGY3XHU4ZGY4XHU4ZGUzXHU4ZGY5XHU4ZGZiXHU4ZGU0XHU4ZTA5XHU4ZGZkXHU4ZTE0XHU4ZTFkXHU4ZTFmXHU4ZTJjXHU4ZTJl''@;'; put 'put ''XHU4ZTIzXHU4ZTJmXHU4ZTNhXHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNkXHU4ZTMxXHU4ZTQ5XHU4ZTQxXHU4ZTQyXHU4ZTUxXHU4ZTUyXHU4ZTRhXHU4ZTcwXHU4ZTc2XHU4ZTdjXHU4ZTZmXHU4ZTc0XHU4ZTg1XHU4ZThmXHU4ZTk0XHU4ZTkwXHU4ZTljXHU4ZTllXHU4Yzc4XHU4YzgyXHU4''@;'; put 'put ''YzhhXHU4Yzg1XHU4Yzk4XHU4Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4OWRhXHU4OWRjIl0sWyJmNjQwIiwiXHU5YmRjIiw2Ml0sWyJmNjgwIiwiXHU5YzFiIiwzMiwiXHU4OWU1XHU4OWViXHU4OWVmXHU4YTNlXHU4YjI2XHU5NzUzXHU5NmU5XHU5NmYzXHU5NmVmXHU5NzA2XHU5NzAxXHU5''@;'; put 'put ''NzA4XHU5NzBmXHU5NzBlXHU5NzJhXHU5NzJkXHU5NzMwXHU5NzNlXHU5ZjgwXHU5ZjgzXHU5Zjg1Iiw1LCJcdTlmOGNcdTllZmVcdTlmMGJcdTlmMGRcdTk2YjlcdTk2YmNcdTk2YmRcdTk2Y2VcdTk2ZDJcdTc3YmZcdTk2ZTBcdTkyOGVcdTkyYWVcdTkyYzhcdTkzM2VcdTkzNmFcdTkzY2Fc''@;'; put 'put ''dTkzOGZcdTk0M2VcdTk0NmJcdTljN2ZcdTljODJcdTljODVcdTljODZcdTljODdcdTljODhcdTdhMjNcdTljOGJcdTljOGVcdTljOTBcdTljOTFcdTljOTJcdTljOTRcdTljOTVcdTljOWFcdTljOWJcdTljOWUiLDUsIlx1OWNhNSIsNCwiXHU5Y2FiXHU5Y2FkXHU5Y2FlXHU5Y2IwIiw3LCJc''@;'; put 'put ''dTljYmFcdTljYmJcdTljYmNcdTljYmRcdTljYzRcdTljYzVcdTljYzZcdTljYzdcdTljY2FcdTljY2IiXSxbImY3NDAiLCJcdTljM2MiLDYyXSxbImY3ODAiLCJcdTljN2JcdTljN2RcdTljN2VcdTljODBcdTljODNcdTljODRcdTljODlcdTljOGFcdTljOGNcdTljOGZcdTljOTNcdTljOTZc''@;'; put 'put ''dTljOTdcdTljOThcdTljOTlcdTljOWRcdTljYWFcdTljYWNcdTljYWZcdTljYjlcdTljYmUiLDQsIlx1OWNjOFx1OWNjOVx1OWNkMVx1OWNkMlx1OWNkYVx1OWNkYlx1OWNlMFx1OWNlMVx1OWNjYyIsNCwiXHU5Y2QzXHU5Y2Q0XHU5Y2Q1XHU5Y2Q3XHU5Y2Q4XHU5Y2Q5XHU5Y2RjXHU5Y2Rk''@;'; put 'put ''XHU5Y2RmXHU5Y2UyXHU5NzdjXHU5Nzg1XHU5NzkxXHU5NzkyXHU5Nzk0XHU5N2FmXHU5N2FiXHU5N2EzXHU5N2IyXHU5N2I0XHU5YWIxXHU5YWIwXHU5YWI3XHU5ZTU4XHU5YWI2XHU5YWJhXHU5YWJjXHU5YWMxXHU5YWMwXHU5YWM1XHU5YWMyXHU5YWNiXHU5YWNjXHU5YWQxXHU5YjQ1XHU5''@;'; put 'put ''YjQzXHU5YjQ3XHU5YjQ5XHU5YjQ4XHU5YjRkXHU5YjUxXHU5OGU4XHU5OTBkXHU5OTJlXHU5OTU1XHU5OTU0XHU5YWRmXHU5YWUxXHU5YWU2XHU5YWVmXHU5YWViXHU5YWZiXHU5YWVkXHU5YWY5XHU5YjA4XHU5YjBmXHU5YjEzXHU5YjFmXHU5YjIzXHU5ZWJkXHU5ZWJlXHU3ZTNiXHU5ZTgy''@;'; put 'put ''XHU5ZTg3XHU5ZTg4XHU5ZThiXHU5ZTkyXHU5M2Q2XHU5ZTlkXHU5ZTlmXHU5ZWRiXHU5ZWRjXHU5ZWRkXHU5ZWUwXHU5ZWRmXHU5ZWUyXHU5ZWU5XHU5ZWU3XHU5ZWU1XHU5ZWVhXHU5ZWVmXHU5ZjIyXHU5ZjJjXHU5ZjJmXHU5ZjM5XHU5ZjM3XHU5ZjNkXHU5ZjNlXHU5ZjQ0Il0sWyJmODQw''@;'; put 'put ''IiwiXHU5Y2UzIiw2Ml0sWyJmODgwIiwiXHU5ZDIyIiwzMl0sWyJmOTQwIiwiXHU5ZDQzIiw2Ml0sWyJmOTgwIiwiXHU5ZDgyIiwzMl0sWyJmYTQwIiwiXHU5ZGEzIiw2Ml0sWyJmYTgwIiwiXHU5ZGUyIiwzMl0sWyJmYjQwIiwiXHU5ZTAzIiwyNywiXHU5ZTI0XHU5ZTI3XHU5ZTJlXHU5ZTMw''@;'; put 'put ''XHU5ZTM0XHU5ZTNiXHU5ZTNjXHU5ZTQwXHU5ZTRkXHU5ZTUwXHU5ZTUyXHU5ZTUzXHU5ZTU0XHU5ZTU2XHU5ZTU5XHU5ZTVkXHU5ZTVmXHU5ZTYwXHU5ZTYxXHU5ZTYyXHU5ZTY1XHU5ZTZlXHU5ZTZmXHU5ZTcyXHU5ZTc0Iiw5LCJcdTllODAiXSxbImZiODAiLCJcdTllODFcdTllODNcdTll''@;'; put 'put ''ODRcdTllODVcdTllODZcdTllODlcdTllOGFcdTllOGMiLDUsIlx1OWU5NCIsOCwiXHU5ZTllXHU5ZWEwIiw1LCJcdTllYTdcdTllYThcdTllYTlcdTllYWEiXSxbImZjNDAiLCJcdTllYWIiLDgsIlx1OWViNVx1OWViNlx1OWViN1x1OWViOVx1OWViYVx1OWViY1x1OWViZiIsNCwiXHU5ZWM1''@;'; put 'put ''XHU5ZWM2XHU5ZWM3XHU5ZWM4XHU5ZWNhXHU5ZWNiXHU5ZWNjXHU5ZWQwXHU5ZWQyXHU5ZWQzXHU5ZWQ1XHU5ZWQ2XHU5ZWQ3XHU5ZWQ5XHU5ZWRhXHU5ZWRlXHU5ZWUxXHU5ZWUzXHU5ZWU0XHU5ZWU2XHU5ZWU4XHU5ZWViXHU5ZWVjXHU5ZWVkXHU5ZWVlXHU5ZWYwIiw4LCJcdTllZmFcdTll''@;'; put 'put ''ZmRcdTllZmYiLDZdLFsiZmM4MCIsIlx1OWYwNiIsNCwiXHU5ZjBjXHU5ZjBmXHU5ZjExXHU5ZjEyXHU5ZjE0XHU5ZjE1XHU5ZjE2XHU5ZjE4XHU5ZjFhIiw1LCJcdTlmMjFcdTlmMjMiLDgsIlx1OWYyZFx1OWYyZVx1OWYzMFx1OWYzMSJdLFsiZmQ0MCIsIlx1OWYzMiIsNCwiXHU5ZjM4XHU5''@;'; put 'put ''ZjNhXHU5ZjNjXHU5ZjNmIiw0LCJcdTlmNDUiLDEwLCJcdTlmNTIiLDM4XSxbImZkODAiLCJcdTlmNzkiLDUsIlx1OWY4MVx1OWY4Mlx1OWY4ZCIsMTEsIlx1OWY5Y1x1OWY5ZFx1OWY5ZVx1OWZhMSIsNCwiXHVmOTJjXHVmOTc5XHVmOTk1XHVmOWU3XHVmOWYxIl0sWyJmZTQwIiwiXHVmYTBj''@;'; put 'put ''XHVmYTBkXHVmYTBlXHVmYTBmXHVmYTExXHVmYTEzXHVmYTE0XHVmYTE4XHVmYTFmXHVmYTIwXHVmYTIxXHVmYTIzXHVmYTI0XHVmYTI3XHVmYTI4XHVmYTI5Il1dJyl9LDIxMTY2KGZlKXsidXNlIHN0cmljdCI7ZmUuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyIwIiwiXFx1MDAwMCIsMTI3XSxb''@;'; put 'put ''IjgxNDEiLCJcdWFjMDJcdWFjMDNcdWFjMDVcdWFjMDZcdWFjMGIiLDQsIlx1YWMxOFx1YWMxZVx1YWMxZlx1YWMyMVx1YWMyMlx1YWMyM1x1YWMyNSIsNiwiXHVhYzJlXHVhYzMyXHVhYzMzXHVhYzM0Il0sWyI4MTYxIiwiXHVhYzM1XHVhYzM2XHVhYzM3XHVhYzNhXHVhYzNiXHVhYzNkXHVh''@;'; put 'put ''YzNlXHVhYzNmXHVhYzQxIiw5LCJcdWFjNGNcdWFjNGUiLDUsIlx1YWM1NSJdLFsiODE4MSIsIlx1YWM1Nlx1YWM1N1x1YWM1OVx1YWM1YVx1YWM1Ylx1YWM1ZCIsMTgsIlx1YWM3Mlx1YWM3M1x1YWM3NVx1YWM3Nlx1YWM3OVx1YWM3YiIsNCwiXHVhYzgyXHVhYzg3XHVhYzg4XHVhYzhkXHVh''@;'; put 'put ''YzhlXHVhYzhmXHVhYzkxXHVhYzkyXHVhYzkzXHVhYzk1Iiw2LCJcdWFjOWVcdWFjYTIiLDUsIlx1YWNhYlx1YWNhZFx1YWNhZVx1YWNiMSIsNiwiXHVhY2JhXHVhY2JlXHVhY2JmXHVhY2MwXHVhY2MyXHVhY2MzXHVhY2M1XHVhY2M2XHVhY2M3XHVhY2M5XHVhY2NhXHVhY2NiXHVhY2NkIiw3''@;'; put 'put ''LCJcdWFjZDZcdWFjZDgiLDcsIlx1YWNlMlx1YWNlM1x1YWNlNVx1YWNlNlx1YWNlOVx1YWNlYlx1YWNlZFx1YWNlZVx1YWNmMlx1YWNmNFx1YWNmNyIsNCwiXHVhY2ZlXHVhY2ZmXHVhZDAxXHVhZDAyXHVhZDAzXHVhZDA1XHVhZDA3Iiw0LCJcdWFkMGVcdWFkMTBcdWFkMTJcdWFkMTMiXSxb''@;'; put 'put ''IjgyNDEiLCJcdWFkMTRcdWFkMTVcdWFkMTZcdWFkMTdcdWFkMTlcdWFkMWFcdWFkMWJcdWFkMWRcdWFkMWVcdWFkMWZcdWFkMjEiLDcsIlx1YWQyYVx1YWQyYlx1YWQyZSIsNV0sWyI4MjYxIiwiXHVhZDM2XHVhZDM3XHVhZDM5XHVhZDNhXHVhZDNiXHVhZDNkIiw2LCJcdWFkNDZcdWFkNDhc''@;'; put 'put ''dWFkNGEiLDUsIlx1YWQ1MVx1YWQ1Mlx1YWQ1M1x1YWQ1NVx1YWQ1Nlx1YWQ1NyJdLFsiODI4MSIsIlx1YWQ1OSIsNywiXHVhZDYyXHVhZDY0Iiw3LCJcdWFkNmVcdWFkNmZcdWFkNzFcdWFkNzJcdWFkNzdcdWFkNzhcdWFkNzlcdWFkN2FcdWFkN2VcdWFkODBcdWFkODMiLDQsIlx1YWQ4YVx1''@;'; put 'put ''YWQ4Ylx1YWQ4ZFx1YWQ4ZVx1YWQ4Zlx1YWQ5MSIsMTAsIlx1YWQ5ZSIsNSwiXHVhZGE1IiwxNywiXHVhZGI4Iiw3LCJcdWFkYzJcdWFkYzNcdWFkYzVcdWFkYzZcdWFkYzdcdWFkYzkiLDYsIlx1YWRkMlx1YWRkNCIsNywiXHVhZGRkXHVhZGRlXHVhZGRmXHVhZGUxXHVhZGUyXHVhZGUzXHVh''@;'; put 'put ''ZGU1IiwxOF0sWyI4MzQxIiwiXHVhZGZhXHVhZGZiXHVhZGZkXHVhZGZlXHVhZTAyIiw1LCJcdWFlMGFcdWFlMGNcdWFlMGUiLDUsIlx1YWUxNSIsN10sWyI4MzYxIiwiXHVhZTFkIiwxOCwiXHVhZTMyXHVhZTMzXHVhZTM1XHVhZTM2XHVhZTM5XHVhZTNiXHVhZTNjIl0sWyI4MzgxIiwiXHVh''@;'; put 'put ''ZTNkXHVhZTNlXHVhZTNmXHVhZTQyXHVhZTQ0XHVhZTQ3XHVhZTQ4XHVhZTQ5XHVhZTRiXHVhZTRmXHVhZTUxXHVhZTUyXHVhZTUzXHVhZTU1XHVhZTU3Iiw0LCJcdWFlNWVcdWFlNjJcdWFlNjNcdWFlNjRcdWFlNjZcdWFlNjdcdWFlNmFcdWFlNmJcdWFlNmRcdWFlNmVcdWFlNmZcdWFlNzEi''@;'; put 'put ''LDYsIlx1YWU3YVx1YWU3ZSIsNSwiXHVhZTg2Iiw1LCJcdWFlOGQiLDQ2LCJcdWFlYmZcdWFlYzFcdWFlYzJcdWFlYzNcdWFlYzUiLDYsIlx1YWVjZVx1YWVkMiIsNSwiXHVhZWRhXHVhZWRiXHVhZWRkIiw4XSxbIjg0NDEiLCJcdWFlZTZcdWFlZTdcdWFlZTlcdWFlZWFcdWFlZWNcdWFlZWUi''@;'; put 'put ''LDUsIlx1YWVmNVx1YWVmNlx1YWVmN1x1YWVmOVx1YWVmYVx1YWVmYlx1YWVmZCIsOF0sWyI4NDYxIiwiXHVhZjA2XHVhZjA5XHVhZjBhXHVhZjBiXHVhZjBjXHVhZjBlXHVhZjBmXHVhZjExIiwxOF0sWyI4NDgxIiwiXHVhZjI0Iiw3LCJcdWFmMmVcdWFmMmZcdWFmMzFcdWFmMzNcdWFmMzUi''@;'; put 'put ''LDYsIlx1YWYzZVx1YWY0MFx1YWY0NFx1YWY0NVx1YWY0Nlx1YWY0N1x1YWY0YSIsNSwiXHVhZjUxIiwxMCwiXHVhZjVlIiw1LCJcdWFmNjYiLDE4LCJcdWFmN2EiLDUsIlx1YWY4MVx1YWY4Mlx1YWY4M1x1YWY4NVx1YWY4Nlx1YWY4N1x1YWY4OSIsNiwiXHVhZjkyXHVhZjkzXHVhZjk0XHVh''@;'; put 'put ''Zjk2Iiw1LCJcdWFmOWQiLDI2LCJcdWFmYmFcdWFmYmJcdWFmYmRcdWFmYmUiXSxbIjg1NDEiLCJcdWFmYmZcdWFmYzEiLDUsIlx1YWZjYVx1YWZjY1x1YWZjZiIsNCwiXHVhZmQ1Iiw2LCJcdWFmZGQiLDRdLFsiODU2MSIsIlx1YWZlMiIsNSwiXHVhZmVhIiw1LCJcdWFmZjJcdWFmZjNcdWFm''@;'; put 'put ''ZjVcdWFmZjZcdWFmZjdcdWFmZjkiLDYsIlx1YjAwMlx1YjAwMyJdLFsiODU4MSIsIlx1YjAwNSIsNiwiXHViMDBkXHViMDBlXHViMDBmXHViMDExXHViMDEyXHViMDEzXHViMDE1Iiw2LCJcdWIwMWUiLDksIlx1YjAyOSIsMjYsIlx1YjA0Nlx1YjA0N1x1YjA0OVx1YjA0Ylx1YjA0ZFx1YjA0''@;'; put 'put ''Zlx1YjA1MFx1YjA1MVx1YjA1Mlx1YjA1Nlx1YjA1OFx1YjA1YVx1YjA1Ylx1YjA1Y1x1YjA1ZSIsMjksIlx1YjA3ZVx1YjA3Zlx1YjA4MVx1YjA4Mlx1YjA4M1x1YjA4NSIsNiwiXHViMDhlXHViMDkwXHViMDkyIiw1LCJcdWIwOWJcdWIwOWRcdWIwOWVcdWIwYTNcdWIwYTQiXSxbIjg2NDEi''@;'; put 'put ''LCJcdWIwYTVcdWIwYTZcdWIwYTdcdWIwYWFcdWIwYjBcdWIwYjJcdWIwYjZcdWIwYjdcdWIwYjlcdWIwYmFcdWIwYmJcdWIwYmQiLDYsIlx1YjBjNlx1YjBjYSIsNSwiXHViMGQyIl0sWyI4NjYxIiwiXHViMGQzXHViMGQ1XHViMGQ2XHViMGQ3XHViMGQ5Iiw2LCJcdWIwZTFcdWIwZTJcdWIw''@;'; put 'put ''ZTNcdWIwZTRcdWIwZTYiLDEwXSxbIjg2ODEiLCJcdWIwZjEiLDIyLCJcdWIxMGFcdWIxMGRcdWIxMGVcdWIxMGZcdWIxMTFcdWIxMTRcdWIxMTVcdWIxMTZcdWIxMTdcdWIxMWFcdWIxMWUiLDQsIlx1YjEyNlx1YjEyN1x1YjEyOVx1YjEyYVx1YjEyYlx1YjEyZCIsNiwiXHViMTM2XHViMTNh''@;'; put 'put ''Iiw1LCJcdWIxNDJcdWIxNDNcdWIxNDVcdWIxNDZcdWIxNDdcdWIxNDkiLDYsIlx1YjE1Mlx1YjE1M1x1YjE1Nlx1YjE1N1x1YjE1OVx1YjE1YVx1YjE1Ylx1YjE1ZFx1YjE1ZVx1YjE1Zlx1YjE2MSIsMjIsIlx1YjE3YVx1YjE3Ylx1YjE3ZFx1YjE3ZVx1YjE3Zlx1YjE4MVx1YjE4MyIsNCwi''@;'; put 'put ''XHViMThhXHViMThjXHViMThlXHViMThmXHViMTkwXHViMTkxXHViMTk1XHViMTk2XHViMTk3XHViMTk5XHViMTlhXHViMTliXHViMTlkIl0sWyI4NzQxIiwiXHViMTllIiw5LCJcdWIxYTkiLDE1XSxbIjg3NjEiLCJcdWIxYjkiLDE4LCJcdWIxY2RcdWIxY2VcdWIxY2ZcdWIxZDFcdWIxZDJc''@;'; put 'put ''dWIxZDNcdWIxZDUiXSxbIjg3ODEiLCJcdWIxZDYiLDUsIlx1YjFkZVx1YjFlMCIsNywiXHViMWVhXHViMWViXHViMWVkXHViMWVlXHViMWVmXHViMWYxIiw3LCJcdWIxZmFcdWIxZmNcdWIxZmUiLDUsIlx1YjIwNlx1YjIwN1x1YjIwOVx1YjIwYVx1YjIwZCIsNiwiXHViMjE2XHViMjE4XHVi''@;'; put 'put ''MjFhIiw1LCJcdWIyMjEiLDE4LCJcdWIyMzUiLDYsIlx1YjIzZCIsMjYsIlx1YjI1OVx1YjI1YVx1YjI1Ylx1YjI1ZFx1YjI1ZVx1YjI1Zlx1YjI2MSIsNiwiXHViMjZhIiw0XSxbIjg4NDEiLCJcdWIyNmYiLDQsIlx1YjI3NiIsNSwiXHViMjdkIiw2LCJcdWIyODZcdWIyODdcdWIyODhcdWIy''@;'; put 'put ''OGEiLDRdLFsiODg2MSIsIlx1YjI4Zlx1YjI5Mlx1YjI5M1x1YjI5NVx1YjI5Nlx1YjI5N1x1YjI5YiIsNCwiXHViMmEyXHViMmE0XHViMmE3XHViMmE4XHViMmE5XHViMmFiXHViMmFkXHViMmFlXHViMmFmXHViMmIxXHViMmIyXHViMmIzXHViMmI1XHViMmI2XHViMmI3Il0sWyI4ODgxIiwi''@;'; put 'put ''XHViMmI4IiwxNSwiXHViMmNhXHViMmNiXHViMmNkXHViMmNlXHViMmNmXHViMmQxXHViMmQzIiw0LCJcdWIyZGFcdWIyZGNcdWIyZGVcdWIyZGZcdWIyZTBcdWIyZTFcdWIyZTNcdWIyZTdcdWIyZTlcdWIyZWFcdWIyZjBcdWIyZjFcdWIyZjJcdWIyZjZcdWIyZmNcdWIyZmRcdWIyZmVcdWIz''@;'; put 'put ''MDJcdWIzMDNcdWIzMDVcdWIzMDZcdWIzMDdcdWIzMDkiLDYsIlx1YjMxMlx1YjMxNiIsNSwiXHViMzFkIiw1NCwiXHViMzU3XHViMzU5XHViMzVhXHViMzVkXHViMzYwXHViMzYxXHViMzYyXHViMzYzIl0sWyI4OTQxIiwiXHViMzY2XHViMzY4XHViMzZhXHViMzZjXHViMzZkXHViMzZmXHVi''@;'; put 'put ''MzcyXHViMzczXHViMzc1XHViMzc2XHViMzc3XHViMzc5Iiw2LCJcdWIzODJcdWIzODYiLDUsIlx1YjM4ZCJdLFsiODk2MSIsIlx1YjM4ZVx1YjM4Zlx1YjM5MVx1YjM5Mlx1YjM5M1x1YjM5NSIsMTAsIlx1YjNhMiIsNSwiXHViM2E5XHViM2FhXHViM2FiXHViM2FkIl0sWyI4OTgxIiwiXHVi''@;'; put 'put ''M2FlIiwyMSwiXHViM2M2XHViM2M3XHViM2M5XHViM2NhXHViM2NkXHViM2NmXHViM2QxXHViM2QyXHViM2QzXHViM2Q2XHViM2Q4XHViM2RhXHViM2RjXHViM2RlXHViM2RmXHViM2UxXHViM2UyXHViM2UzXHViM2U1XHViM2U2XHViM2U3XHViM2U5IiwxOCwiXHViM2ZkIiwxOCwiXHViNDEx''@;'; put 'put ''Iiw2LCJcdWI0MTlcdWI0MWFcdWI0MWJcdWI0MWRcdWI0MWVcdWI0MWZcdWI0MjEiLDYsIlx1YjQyYVx1YjQyYyIsNywiXHViNDM1IiwxNV0sWyI4YTQxIiwiXHViNDQ1IiwxMCwiXHViNDUyXHViNDUzXHViNDU1XHViNDU2XHViNDU3XHViNDU5Iiw2LCJcdWI0NjJcdWI0NjRcdWI0NjYiXSxb''@;'; put 'put ''IjhhNjEiLCJcdWI0NjciLDQsIlx1YjQ2ZCIsMTgsIlx1YjQ4MVx1YjQ4MiJdLFsiOGE4MSIsIlx1YjQ4MyIsNCwiXHViNDg5IiwxOSwiXHViNDllIiw1LCJcdWI0YTVcdWI0YTZcdWI0YTdcdWI0YTlcdWI0YWFcdWI0YWJcdWI0YWQiLDcsIlx1YjRiNlx1YjRiOFx1YjRiYSIsNSwiXHViNGMx''@;'; put 'put ''XHViNGMyXHViNGMzXHViNGM1XHViNGM2XHViNGM3XHViNGM5Iiw2LCJcdWI0ZDFcdWI0ZDJcdWI0ZDNcdWI0ZDRcdWI0ZDYiLDUsIlx1YjRkZVx1YjRkZlx1YjRlMVx1YjRlMlx1YjRlNVx1YjRlNyIsNCwiXHViNGVlXHViNGYwXHViNGYyIiw1LCJcdWI0ZjkiLDI2LCJcdWI1MTZcdWI1MTdc''@;'; put 'put ''dWI1MTlcdWI1MWFcdWI1MWQiXSxbIjhiNDEiLCJcdWI1MWUiLDUsIlx1YjUyNlx1YjUyYiIsNCwiXHViNTMyXHViNTMzXHViNTM1XHViNTM2XHViNTM3XHViNTM5Iiw2LCJcdWI1NDJcdWI1NDYiXSxbIjhiNjEiLCJcdWI1NDdcdWI1NDhcdWI1NDlcdWI1NGFcdWI1NGVcdWI1NGZcdWI1NTFc''@;'; put 'put ''dWI1NTJcdWI1NTNcdWI1NTUiLDYsIlx1YjU1ZVx1YjU2MiIsOF0sWyI4YjgxIiwiXHViNTZiIiw1MiwiXHViNWEyXHViNWEzXHViNWE1XHViNWE2XHViNWE3XHViNWE5XHViNWFjXHViNWFkXHViNWFlXHViNWFmXHViNWIyXHViNWI2Iiw0LCJcdWI1YmVcdWI1YmZcdWI1YzFcdWI1YzJcdWI1''@;'; put 'put ''YzNcdWI1YzUiLDYsIlx1YjVjZVx1YjVkMiIsNSwiXHViNWQ5IiwxOCwiXHViNWVkIiwxOF0sWyI4YzQxIiwiXHViNjAwIiwxNSwiXHViNjEyXHViNjEzXHViNjE1XHViNjE2XHViNjE3XHViNjE5Iiw0XSxbIjhjNjEiLCJcdWI2MWUiLDYsIlx1YjYyNiIsNSwiXHViNjJkIiw2LCJcdWI2MzUi''@;'; put 'put ''LDVdLFsiOGM4MSIsIlx1YjYzYiIsMTIsIlx1YjY0OSIsMjYsIlx1YjY2NVx1YjY2Nlx1YjY2N1x1YjY2OSIsNTAsIlx1YjY5ZVx1YjY5Zlx1YjZhMVx1YjZhMlx1YjZhM1x1YjZhNSIsNSwiXHViNmFkXHViNmFlXHViNmFmXHViNmIwXHViNmIyIiwxNl0sWyI4ZDQxIiwiXHViNmMzIiwxNiwi''@;'; put 'put ''XHViNmQ1Iiw4XSxbIjhkNjEiLCJcdWI2ZGUiLDE3LCJcdWI2ZjFcdWI2ZjJcdWI2ZjNcdWI2ZjVcdWI2ZjZcdWI2ZjdcdWI2ZjlcdWI2ZmEiXSxbIjhkODEiLCJcdWI2ZmIiLDQsIlx1YjcwMlx1YjcwM1x1YjcwNFx1YjcwNiIsMzMsIlx1YjcyYVx1YjcyYlx1YjcyZFx1YjcyZVx1YjczMSIs''@;'; put 'put ''NiwiXHViNzNhXHViNzNjIiw3LCJcdWI3NDVcdWI3NDZcdWI3NDdcdWI3NDlcdWI3NGFcdWI3NGJcdWI3NGQiLDYsIlx1Yjc1NiIsOSwiXHViNzYxXHViNzYyXHViNzYzXHViNzY1XHViNzY2XHViNzY3XHViNzY5Iiw2LCJcdWI3NzJcdWI3NzRcdWI3NzYiLDUsIlx1Yjc3ZVx1Yjc3Zlx1Yjc4''@;'; put 'put ''MVx1Yjc4Mlx1Yjc4M1x1Yjc4NSIsNiwiXHViNzhlXHViNzkzXHViNzk0XHViNzk1XHViNzlhXHViNzliXHViNzlkXHViNzllIl0sWyI4ZTQxIiwiXHViNzlmXHViN2ExIiw2LCJcdWI3YWFcdWI3YWUiLDUsIlx1YjdiNlx1YjdiN1x1YjdiOSIsOF0sWyI4ZTYxIiwiXHViN2MyIiw0LCJcdWI3''@;'; put 'put ''YzhcdWI3Y2EiLDE5XSxbIjhlODEiLCJcdWI3ZGUiLDEzLCJcdWI3ZWVcdWI3ZWZcdWI3ZjFcdWI3ZjJcdWI3ZjNcdWI3ZjUiLDYsIlx1YjdmZVx1YjgwMiIsNCwiXHViODBhXHViODBiXHViODBkXHViODBlXHViODBmXHViODExIiw2LCJcdWI4MWFcdWI4MWNcdWI4MWUiLDUsIlx1YjgyNlx1''@;'; put 'put ''YjgyN1x1YjgyOVx1YjgyYVx1YjgyYlx1YjgyZCIsNiwiXHViODM2XHViODNhIiw1LCJcdWI4NDFcdWI4NDJcdWI4NDNcdWI4NDUiLDExLCJcdWI4NTJcdWI4NTQiLDcsIlx1Yjg1ZVx1Yjg1Zlx1Yjg2MVx1Yjg2Mlx1Yjg2M1x1Yjg2NSIsNiwiXHViODZlXHViODcwXHViODcyIiw1LCJcdWI4''@;'; put 'put ''NzlcdWI4N2FcdWI4N2JcdWI4N2QiLDddLFsiOGY0MSIsIlx1Yjg4NSIsNywiXHViODhlIiwxN10sWyI4ZjYxIiwiXHViOGEwIiw3LCJcdWI4YTkiLDYsIlx1YjhiMVx1YjhiMlx1YjhiM1x1YjhiNVx1YjhiNlx1YjhiN1x1YjhiOSIsNF0sWyI4ZjgxIiwiXHViOGJlXHViOGJmXHViOGMyXHVi''@;'; put 'put ''OGM0XHViOGM2Iiw1LCJcdWI4Y2RcdWI4Y2VcdWI4Y2ZcdWI4ZDFcdWI4ZDJcdWI4ZDNcdWI4ZDUiLDcsIlx1YjhkZVx1YjhlMFx1YjhlMiIsNSwiXHViOGVhXHViOGViXHViOGVkXHViOGVlXHViOGVmXHViOGYxIiw2LCJcdWI4ZmFcdWI4ZmNcdWI4ZmUiLDUsIlx1YjkwNSIsMTgsIlx1Yjkx''@;'; put 'put ''OSIsNiwiXHViOTIxIiwyNiwiXHViOTNlXHViOTNmXHViOTQxXHViOTQyXHViOTQzXHViOTQ1Iiw2LCJcdWI5NGRcdWI5NGVcdWI5NTBcdWI5NTIiLDVdLFsiOTA0MSIsIlx1Yjk1YVx1Yjk1Ylx1Yjk1ZFx1Yjk1ZVx1Yjk1Zlx1Yjk2MSIsNiwiXHViOTZhXHViOTZjXHViOTZlIiw1LCJcdWI5''@;'; put 'put ''NzZcdWI5NzdcdWI5NzlcdWI5N2FcdWI5N2JcdWI5N2QiXSxbIjkwNjEiLCJcdWI5N2UiLDUsIlx1Yjk4Nlx1Yjk4OFx1Yjk4Ylx1Yjk4Y1x1Yjk4ZiIsMTVdLFsiOTA4MSIsIlx1Yjk5ZiIsMTIsIlx1YjlhZVx1YjlhZlx1YjliMVx1YjliMlx1YjliM1x1YjliNSIsNiwiXHViOWJlXHViOWMw''@;'; put 'put ''XHViOWMyIiw1LCJcdWI5Y2FcdWI5Y2JcdWI5Y2RcdWI5ZDMiLDQsIlx1YjlkYVx1YjlkY1x1YjlkZlx1YjllMFx1YjllMlx1YjllNlx1YjllN1x1YjllOVx1YjllYVx1YjllYlx1YjllZCIsNiwiXHViOWY2XHViOWZiIiw0LCJcdWJhMDIiLDUsIlx1YmEwOSIsMTEsIlx1YmExNiIsMzMsIlx1''@;'; put 'put ''YmEzYVx1YmEzYlx1YmEzZFx1YmEzZVx1YmEzZlx1YmE0MVx1YmE0M1x1YmE0NFx1YmE0NVx1YmE0NiJdLFsiOTE0MSIsIlx1YmE0N1x1YmE0YVx1YmE0Y1x1YmE0Zlx1YmE1MFx1YmE1MVx1YmE1Mlx1YmE1Nlx1YmE1N1x1YmE1OVx1YmE1YVx1YmE1Ylx1YmE1ZCIsNiwiXHViYTY2XHViYTZh''@;'; put 'put ''Iiw1XSxbIjkxNjEiLCJcdWJhNzJcdWJhNzNcdWJhNzVcdWJhNzZcdWJhNzdcdWJhNzkiLDksIlx1YmE4Nlx1YmE4OFx1YmE4OVx1YmE4YVx1YmE4Ylx1YmE4ZCIsNV0sWyI5MTgxIiwiXHViYTkzIiwyMCwiXHViYWFhXHViYWFkXHViYWFlXHViYWFmXHViYWIxXHViYWIzIiw0LCJcdWJhYmFc''@;'; put 'put ''dWJhYmNcdWJhYmUiLDUsIlx1YmFjNVx1YmFjNlx1YmFjN1x1YmFjOSIsMTQsIlx1YmFkYSIsMzMsIlx1YmFmZFx1YmFmZVx1YmFmZlx1YmIwMVx1YmIwMlx1YmIwM1x1YmIwNSIsNywiXHViYjBlXHViYjEwXHViYjEyIiw1LCJcdWJiMTlcdWJiMWFcdWJiMWJcdWJiMWRcdWJiMWVcdWJiMWZc''@;'; put 'put ''dWJiMjEiLDZdLFsiOTI0MSIsIlx1YmIyOFx1YmIyYVx1YmIyYyIsNywiXHViYjM3XHViYjM5XHViYjNhXHViYjNmIiw0LCJcdWJiNDZcdWJiNDhcdWJiNGFcdWJiNGJcdWJiNGNcdWJiNGVcdWJiNTFcdWJiNTIiXSxbIjkyNjEiLCJcdWJiNTNcdWJiNTVcdWJiNTZcdWJiNTdcdWJiNTkiLDcs''@;'; put 'put ''Ilx1YmI2Mlx1YmI2NCIsNywiXHViYjZkIiw0XSxbIjkyODEiLCJcdWJiNzIiLDIxLCJcdWJiODlcdWJiOGFcdWJiOGJcdWJiOGRcdWJiOGVcdWJiOGZcdWJiOTEiLDE4LCJcdWJiYTVcdWJiYTZcdWJiYTdcdWJiYTlcdWJiYWFcdWJiYWJcdWJiYWQiLDYsIlx1YmJiNVx1YmJiNlx1YmJiOCIs''@;'; put 'put ''NywiXHViYmMxXHViYmMyXHViYmMzXHViYmM1XHViYmM2XHViYmM3XHViYmM5Iiw2LCJcdWJiZDFcdWJiZDJcdWJiZDQiLDM1LCJcdWJiZmFcdWJiZmJcdWJiZmRcdWJiZmVcdWJjMDEiXSxbIjkzNDEiLCJcdWJjMDMiLDQsIlx1YmMwYVx1YmMwZVx1YmMxMFx1YmMxMlx1YmMxM1x1YmMxOVx1''@;'; put 'put ''YmMxYVx1YmMyMFx1YmMyMVx1YmMyMlx1YmMyM1x1YmMyNlx1YmMyOFx1YmMyYVx1YmMyYlx1YmMyY1x1YmMyZVx1YmMyZlx1YmMzMlx1YmMzM1x1YmMzNSJdLFsiOTM2MSIsIlx1YmMzNlx1YmMzN1x1YmMzOSIsNiwiXHViYzQyXHViYzQ2XHViYzQ3XHViYzQ4XHViYzRhXHViYzRiXHViYzRl''@;'; put 'put ''XHViYzRmXHViYzUxIiw4XSxbIjkzODEiLCJcdWJjNWFcdWJjNWJcdWJjNWNcdWJjNWUiLDM3LCJcdWJjODZcdWJjODdcdWJjODlcdWJjOGFcdWJjOGRcdWJjOGYiLDQsIlx1YmM5Nlx1YmM5OFx1YmM5YiIsNCwiXHViY2EyXHViY2EzXHViY2E1XHViY2E2XHViY2E5Iiw2LCJcdWJjYjJcdWJj''@;'; put 'put ''YjYiLDUsIlx1YmNiZVx1YmNiZlx1YmNjMVx1YmNjMlx1YmNjM1x1YmNjNSIsNywiXHViY2NlXHViY2QyXHViY2QzXHViY2Q0XHViY2Q2XHViY2Q3XHViY2Q5XHViY2RhXHViY2RiXHViY2RkIiwyMiwiXHViY2Y3XHViY2Y5XHViY2ZhXHViY2ZiXHViY2ZkIl0sWyI5NDQxIiwiXHViY2ZlIiw1''@;'; put 'put ''LCJcdWJkMDZcdWJkMDhcdWJkMGEiLDUsIlx1YmQxMVx1YmQxMlx1YmQxM1x1YmQxNSIsOF0sWyI5NDYxIiwiXHViZDFlIiw1LCJcdWJkMjUiLDYsIlx1YmQyZCIsMTJdLFsiOTQ4MSIsIlx1YmQzYSIsNSwiXHViZDQxIiw2LCJcdWJkNGFcdWJkNGJcdWJkNGRcdWJkNGVcdWJkNGZcdWJkNTEi''@;'; put 'put ''LDYsIlx1YmQ1YSIsOSwiXHViZDY1XHViZDY2XHViZDY3XHViZDY5IiwyMiwiXHViZDgyXHViZDgzXHViZDg1XHViZDg2XHViZDhiIiw0LCJcdWJkOTJcdWJkOTRcdWJkOTZcdWJkOTdcdWJkOThcdWJkOWJcdWJkOWQiLDYsIlx1YmRhNSIsMTAsIlx1YmRiMSIsNiwiXHViZGI5IiwyNF0sWyI5''@;'; put 'put ''NTQxIiwiXHViZGQyXHViZGQzXHViZGQ2XHViZGQ3XHViZGQ5XHViZGRhXHViZGRiXHViZGRkIiwxMSwiXHViZGVhIiw1LCJcdWJkZjEiXSxbIjk1NjEiLCJcdWJkZjJcdWJkZjNcdWJkZjVcdWJkZjZcdWJkZjdcdWJkZjkiLDYsIlx1YmUwMVx1YmUwMlx1YmUwNFx1YmUwNiIsNSwiXHViZTBl''@;'; put 'put ''XHViZTBmXHViZTExXHViZTEyXHViZTEzIl0sWyI5NTgxIiwiXHViZTE1Iiw2LCJcdWJlMWVcdWJlMjAiLDM1LCJcdWJlNDZcdWJlNDdcdWJlNDlcdWJlNGFcdWJlNGJcdWJlNGRcdWJlNGYiLDQsIlx1YmU1Nlx1YmU1OFx1YmU1Y1x1YmU1ZFx1YmU1ZVx1YmU1Zlx1YmU2Mlx1YmU2M1x1YmU2''@;'; put 'put ''NVx1YmU2Nlx1YmU2N1x1YmU2OVx1YmU2YiIsNCwiXHViZTcyXHViZTc2Iiw0LCJcdWJlN2VcdWJlN2ZcdWJlODFcdWJlODJcdWJlODNcdWJlODUiLDYsIlx1YmU4ZVx1YmU5MiIsNSwiXHViZTlhIiwxMywiXHViZWE5IiwxNF0sWyI5NjQxIiwiXHViZWI4IiwyMywiXHViZWQyXHViZWQzIl0s''@;'; put 'put ''WyI5NjYxIiwiXHViZWQ1XHViZWQ2XHViZWQ5Iiw2LCJcdWJlZTFcdWJlZTJcdWJlZTYiLDUsIlx1YmVlZCIsOF0sWyI5NjgxIiwiXHViZWY2IiwxMCwiXHViZjAyIiw1LCJcdWJmMGEiLDEzLCJcdWJmMWFcdWJmMWUiLDMzLCJcdWJmNDJcdWJmNDNcdWJmNDVcdWJmNDZcdWJmNDdcdWJmNDki''@;'; put 'put ''LDYsIlx1YmY1Mlx1YmY1M1x1YmY1NFx1YmY1NiIsNDRdLFsiOTc0MSIsIlx1YmY4MyIsMTYsIlx1YmY5NSIsOF0sWyI5NzYxIiwiXHViZjllIiwxNywiXHViZmIxIiw3XSxbIjk3ODEiLCJcdWJmYjkiLDExLCJcdWJmYzYiLDUsIlx1YmZjZVx1YmZjZlx1YmZkMVx1YmZkMlx1YmZkM1x1YmZk''@;'; put 'put ''NSIsNiwiXHViZmRkXHViZmRlXHViZmUwXHViZmUyIiw4OSwiXHVjMDNkXHVjMDNlXHVjMDNmIl0sWyI5ODQxIiwiXHVjMDQwIiwxNiwiXHVjMDUyIiw1LCJcdWMwNTlcdWMwNWFcdWMwNWIiXSxbIjk4NjEiLCJcdWMwNWRcdWMwNWVcdWMwNWZcdWMwNjEiLDYsIlx1YzA2YSIsMTVdLFsiOTg4''@;'; put 'put ''MSIsIlx1YzA3YSIsMjEsIlx1YzA5Mlx1YzA5M1x1YzA5NVx1YzA5Nlx1YzA5N1x1YzA5OSIsNiwiXHVjMGEyXHVjMGE0XHVjMGE2Iiw1LCJcdWMwYWVcdWMwYjFcdWMwYjJcdWMwYjciLDQsIlx1YzBiZVx1YzBjMlx1YzBjM1x1YzBjNFx1YzBjNlx1YzBjN1x1YzBjYVx1YzBjYlx1YzBjZFx1''@;'; put 'put ''YzBjZVx1YzBjZlx1YzBkMSIsNiwiXHVjMGRhXHVjMGRlIiw1LCJcdWMwZTZcdWMwZTdcdWMwZTlcdWMwZWFcdWMwZWJcdWMwZWQiLDYsIlx1YzBmNlx1YzBmOFx1YzBmYSIsNSwiXHVjMTAxXHVjMTAyXHVjMTAzXHVjMTA1XHVjMTA2XHVjMTA3XHVjMTA5Iiw2LCJcdWMxMTFcdWMxMTJcdWMx''@;'; put 'put ''MTNcdWMxMTRcdWMxMTYiLDUsIlx1YzEyMVx1YzEyMlx1YzEyNVx1YzEyOFx1YzEyOVx1YzEyYVx1YzEyYlx1YzEyZSJdLFsiOTk0MSIsIlx1YzEzMlx1YzEzM1x1YzEzNFx1YzEzNVx1YzEzN1x1YzEzYVx1YzEzYlx1YzEzZFx1YzEzZVx1YzEzZlx1YzE0MSIsNiwiXHVjMTRhXHVjMTRlIiw1''@;'; put 'put ''LCJcdWMxNTZcdWMxNTciXSxbIjk5NjEiLCJcdWMxNTlcdWMxNWFcdWMxNWJcdWMxNWQiLDYsIlx1YzE2Nlx1YzE2YSIsNSwiXHVjMTcxXHVjMTcyXHVjMTczXHVjMTc1XHVjMTc2XHVjMTc3XHVjMTc5XHVjMTdhXHVjMTdiIl0sWyI5OTgxIiwiXHVjMTdjIiw4LCJcdWMxODYiLDUsIlx1YzE4''@;'; put 'put ''Zlx1YzE5MVx1YzE5Mlx1YzE5M1x1YzE5NVx1YzE5NyIsNCwiXHVjMTllXHVjMWEwXHVjMWEyXHVjMWEzXHVjMWE0XHVjMWE2XHVjMWE3XHVjMWFhXHVjMWFiXHVjMWFkXHVjMWFlXHVjMWFmXHVjMWIxIiwxMSwiXHVjMWJlIiw1LCJcdWMxYzVcdWMxYzZcdWMxYzdcdWMxYzlcdWMxY2FcdWMx''@;'; put 'put ''Y2JcdWMxY2QiLDYsIlx1YzFkNVx1YzFkNlx1YzFkOSIsNiwiXHVjMWUxXHVjMWUyXHVjMWUzXHVjMWU1XHVjMWU2XHVjMWU3XHVjMWU5Iiw2LCJcdWMxZjJcdWMxZjQiLDcsIlx1YzFmZVx1YzFmZlx1YzIwMVx1YzIwMlx1YzIwM1x1YzIwNSIsNiwiXHVjMjBlXHVjMjEwXHVjMjEyIiw1LCJc''@;'; put 'put ''dWMyMWFcdWMyMWJcdWMyMWRcdWMyMWVcdWMyMjFcdWMyMjJcdWMyMjMiXSxbIjlhNDEiLCJcdWMyMjRcdWMyMjVcdWMyMjZcdWMyMjdcdWMyMmFcdWMyMmNcdWMyMmVcdWMyMzBcdWMyMzNcdWMyMzUiLDE2XSxbIjlhNjEiLCJcdWMyNDZcdWMyNDdcdWMyNDkiLDYsIlx1YzI1Mlx1YzI1M1x1''@;'; put 'put ''YzI1NVx1YzI1Nlx1YzI1N1x1YzI1OSIsNiwiXHVjMjYxXHVjMjYyXHVjMjYzXHVjMjY0XHVjMjY2Il0sWyI5YTgxIiwiXHVjMjY3Iiw0LCJcdWMyNmVcdWMyNmZcdWMyNzFcdWMyNzJcdWMyNzNcdWMyNzUiLDYsIlx1YzI3ZVx1YzI4MFx1YzI4MiIsNSwiXHVjMjhhIiw1LCJcdWMyOTEiLDYs''@;'; put 'put ''Ilx1YzI5OVx1YzI5YVx1YzI5Y1x1YzI5ZSIsNSwiXHVjMmE2XHVjMmE3XHVjMmE5XHVjMmFhXHVjMmFiXHVjMmFlIiw1LCJcdWMyYjZcdWMyYjhcdWMyYmEiLDMzLCJcdWMyZGVcdWMyZGZcdWMyZTFcdWMyZTJcdWMyZTUiLDUsIlx1YzJlZVx1YzJmMFx1YzJmMlx1YzJmM1x1YzJmNFx1YzJm''@;'; put 'put ''NVx1YzJmN1x1YzJmYVx1YzJmZFx1YzJmZVx1YzJmZlx1YzMwMSIsNiwiXHVjMzBhXHVjMzBiXHVjMzBlXHVjMzBmIl0sWyI5YjQxIiwiXHVjMzEwXHVjMzExXHVjMzEyXHVjMzE2XHVjMzE3XHVjMzE5XHVjMzFhXHVjMzFiXHVjMzFkIiw2LCJcdWMzMjZcdWMzMjdcdWMzMmEiLDhdLFsiOWI2''@;'; put 'put ''MSIsIlx1YzMzMyIsMTcsIlx1YzM0NiIsN10sWyI5YjgxIiwiXHVjMzRlIiwyNSwiXHVjMzZhXHVjMzZiXHVjMzZkXHVjMzZlXHVjMzZmXHVjMzcxXHVjMzczIiw0LCJcdWMzN2FcdWMzN2JcdWMzN2UiLDUsIlx1YzM4NVx1YzM4Nlx1YzM4N1x1YzM4OVx1YzM4YVx1YzM4Ylx1YzM4ZCIsNTAs''@;'; put 'put ''Ilx1YzNjMSIsMjIsIlx1YzNkYSJdLFsiOWM0MSIsIlx1YzNkYlx1YzNkZFx1YzNkZVx1YzNlMVx1YzNlMyIsNCwiXHVjM2VhXHVjM2ViXHVjM2VjXHVjM2VlIiw1LCJcdWMzZjZcdWMzZjdcdWMzZjkiLDVdLFsiOWM2MSIsIlx1YzNmZiIsOCwiXHVjNDA5Iiw2LCJcdWM0MTEiLDldLFsiOWM4''@;'; put 'put ''MSIsIlx1YzQxYiIsOCwiXHVjNDI1Iiw2LCJcdWM0MmRcdWM0MmVcdWM0MmZcdWM0MzFcdWM0MzJcdWM0MzNcdWM0MzUiLDYsIlx1YzQzZSIsOSwiXHVjNDQ5IiwyNiwiXHVjNDY2XHVjNDY3XHVjNDY5XHVjNDZhXHVjNDZiXHVjNDZkIiw2LCJcdWM0NzZcdWM0NzdcdWM0NzhcdWM0N2EiLDUs''@;'; put 'put ''Ilx1YzQ4MSIsMTgsIlx1YzQ5NSIsNiwiXHVjNDlkIiwxMl0sWyI5ZDQxIiwiXHVjNGFhIiwxMywiXHVjNGI5XHVjNGJhXHVjNGJiXHVjNGJkIiw4XSxbIjlkNjEiLCJcdWM0YzYiLDI1XSxbIjlkODEiLCJcdWM0ZTAiLDgsIlx1YzRlYSIsNSwiXHVjNGYyXHVjNGYzXHVjNGY1XHVjNGY2XHVj''@;'; put 'put ''NGY3XHVjNGY5XHVjNGZiXHVjNGZjXHVjNGZkXHVjNGZlXHVjNTAyIiw5LCJcdWM1MGRcdWM1MGVcdWM1MGZcdWM1MTFcdWM1MTJcdWM1MTNcdWM1MTUiLDYsIlx1YzUxZCIsMTAsIlx1YzUyYVx1YzUyYlx1YzUyZFx1YzUyZVx1YzUyZlx1YzUzMSIsNiwiXHVjNTNhXHVjNTNjXHVjNTNlIiw1''@;'; put 'put ''LCJcdWM1NDZcdWM1NDdcdWM1NGJcdWM1NGZcdWM1NTBcdWM1NTFcdWM1NTJcdWM1NTZcdWM1NWFcdWM1NWJcdWM1NWNcdWM1NWZcdWM1NjJcdWM1NjNcdWM1NjVcdWM1NjZcdWM1NjdcdWM1NjkiLDYsIlx1YzU3Mlx1YzU3NiIsNSwiXHVjNTdlXHVjNTdmXHVjNTgxXHVjNTgyXHVjNTgzXHVj''@;'; put 'put ''NTg1XHVjNTg2XHVjNTg4XHVjNTg5XHVjNThhXHVjNThiXHVjNThlXHVjNTkwXHVjNTkyXHVjNTkzXHVjNTk0Il0sWyI5ZTQxIiwiXHVjNTk2XHVjNTk5XHVjNTlhXHVjNTliXHVjNTlkXHVjNTllXHVjNTlmXHVjNWExIiw3LCJcdWM1YWEiLDksIlx1YzViNiJdLFsiOWU2MSIsIlx1YzViN1x1''@;'; put 'put ''YzViYVx1YzViZiIsNCwiXHVjNWNiXHVjNWNkXHVjNWNmXHVjNWQyXHVjNWQzXHVjNWQ1XHVjNWQ2XHVjNWQ3XHVjNWQ5Iiw2LCJcdWM1ZTJcdWM1ZTRcdWM1ZTZcdWM1ZTciXSxbIjllODEiLCJcdWM1ZThcdWM1ZTlcdWM1ZWFcdWM1ZWJcdWM1ZWZcdWM1ZjFcdWM1ZjJcdWM1ZjNcdWM1ZjVc''@;'; put 'put ''dWM1ZjhcdWM1ZjlcdWM1ZmFcdWM1ZmJcdWM2MDJcdWM2MDNcdWM2MDRcdWM2MDlcdWM2MGFcdWM2MGJcdWM2MGRcdWM2MGVcdWM2MGZcdWM2MTEiLDYsIlx1YzYxYVx1YzYxZCIsNiwiXHVjNjI2XHVjNjI3XHVjNjI5XHVjNjJhXHVjNjJiXHVjNjJmXHVjNjMxXHVjNjMyXHVjNjM2XHVjNjM4''@;'; put 'put ''XHVjNjNhXHVjNjNjXHVjNjNkXHVjNjNlXHVjNjNmXHVjNjQyXHVjNjQzXHVjNjQ1XHVjNjQ2XHVjNjQ3XHVjNjQ5Iiw2LCJcdWM2NTJcdWM2NTYiLDUsIlx1YzY1ZVx1YzY1Zlx1YzY2MSIsMTAsIlx1YzY2ZFx1YzY2ZVx1YzY3MFx1YzY3MiIsNSwiXHVjNjdhXHVjNjdiXHVjNjdkXHVjNjdl''@;'; put 'put ''XHVjNjdmXHVjNjgxIiw2LCJcdWM2OGFcdWM2OGNcdWM2OGUiLDUsIlx1YzY5Nlx1YzY5N1x1YzY5OVx1YzY5YVx1YzY5Ylx1YzY5ZCIsNiwiXHVjNmE2Il0sWyI5ZjQxIiwiXHVjNmE4XHVjNmFhIiw1LCJcdWM2YjJcdWM2YjNcdWM2YjVcdWM2YjZcdWM2YjdcdWM2YmIiLDQsIlx1YzZjMlx1''@;'; put 'put ''YzZjNFx1YzZjNiIsNSwiXHVjNmNlIl0sWyI5ZjYxIiwiXHVjNmNmXHVjNmQxXHVjNmQyXHVjNmQzXHVjNmQ1Iiw2LCJcdWM2ZGVcdWM2ZGZcdWM2ZTIiLDUsIlx1YzZlYVx1YzZlYlx1YzZlZFx1YzZlZVx1YzZlZlx1YzZmMVx1YzZmMiJdLFsiOWY4MSIsIlx1YzZmMyIsNCwiXHVjNmZhXHVj''@;'; put 'put ''NmZiXHVjNmZjXHVjNmZlIiw1LCJcdWM3MDZcdWM3MDdcdWM3MDlcdWM3MGFcdWM3MGJcdWM3MGQiLDYsIlx1YzcxNlx1YzcxOFx1YzcxYSIsNSwiXHVjNzIyXHVjNzIzXHVjNzI1XHVjNzI2XHVjNzI3XHVjNzI5Iiw2LCJcdWM3MzJcdWM3MzRcdWM3MzZcdWM3MzhcdWM3MzlcdWM3M2FcdWM3''@;'; put 'put ''M2JcdWM3M2VcdWM3M2ZcdWM3NDFcdWM3NDJcdWM3NDNcdWM3NDUiLDQsIlx1Yzc0Ylx1Yzc0ZVx1Yzc1MFx1Yzc1OVx1Yzc1YVx1Yzc1Ylx1Yzc1ZFx1Yzc1ZVx1Yzc1Zlx1Yzc2MSIsNiwiXHVjNzY5XHVjNzZhXHVjNzZjIiw3LCJcdWM3NzZcdWM3NzdcdWM3NzlcdWM3N2FcdWM3N2JcdWM3''@;'; put 'put ''N2ZcdWM3ODBcdWM3ODFcdWM3ODJcdWM3ODZcdWM3OGJcdWM3OGNcdWM3OGRcdWM3OGZcdWM3OTJcdWM3OTNcdWM3OTVcdWM3OTlcdWM3OWIiLDQsIlx1YzdhMlx1YzdhNyIsNCwiXHVjN2FlXHVjN2FmXHVjN2IxXHVjN2IyXHVjN2IzXHVjN2I1XHVjN2I2XHVjN2I3Il0sWyJhMDQxIiwiXHVj''@;'; put 'put ''N2I4XHVjN2I5XHVjN2JhXHVjN2JiXHVjN2JlXHVjN2MyIiw1LCJcdWM3Y2FcdWM3Y2JcdWM3Y2RcdWM3Y2ZcdWM3ZDEiLDYsIlx1YzdkOVx1YzdkYVx1YzdkYlx1YzdkYyJdLFsiYTA2MSIsIlx1YzdkZSIsNSwiXHVjN2U1XHVjN2U2XHVjN2U3XHVjN2U5XHVjN2VhXHVjN2ViXHVjN2VkIiwx''@;'; put 'put ''M10sWyJhMDgxIiwiXHVjN2ZiIiw0LCJcdWM4MDJcdWM4MDNcdWM4MDVcdWM4MDZcdWM4MDdcdWM4MDlcdWM4MGIiLDQsIlx1YzgxMlx1YzgxNFx1YzgxNyIsNCwiXHVjODFlXHVjODFmXHVjODIxXHVjODIyXHVjODIzXHVjODI1Iiw2LCJcdWM4MmVcdWM4MzBcdWM4MzIiLDUsIlx1YzgzOVx1''@;'; put 'put ''YzgzYVx1YzgzYlx1YzgzZFx1YzgzZVx1YzgzZlx1Yzg0MSIsNiwiXHVjODRhXHVjODRiXHVjODRlIiw1LCJcdWM4NTUiLDI2LCJcdWM4NzJcdWM4NzNcdWM4NzVcdWM4NzZcdWM4NzdcdWM4NzlcdWM4N2IiLDQsIlx1Yzg4Mlx1Yzg4NFx1Yzg4OFx1Yzg4OVx1Yzg4YVx1Yzg4ZSIsNSwiXHVj''@;'; put 'put ''ODk1Iiw3LCJcdWM4OWVcdWM4YTBcdWM4YTJcdWM4YTNcdWM4YTQiXSxbImExNDEiLCJcdWM4YTVcdWM4YTZcdWM4YTdcdWM4YTkiLDE4LCJcdWM4YmVcdWM4YmZcdWM4YzBcdWM4YzEiXSxbImExNjEiLCJcdWM4YzJcdWM4YzNcdWM4YzVcdWM4YzZcdWM4YzdcdWM4YzlcdWM4Y2FcdWM4Y2Jc''@;'; put 'put ''dWM4Y2QiLDYsIlx1YzhkNlx1YzhkOFx1YzhkYSIsNSwiXHVjOGUyXHVjOGUzXHVjOGU1Il0sWyJhMTgxIiwiXHVjOGU2IiwxNCwiXHVjOGY2Iiw1LCJcdWM4ZmVcdWM4ZmZcdWM5MDFcdWM5MDJcdWM5MDNcdWM5MDciLDQsIlx1YzkwZVx1MzAwMFx1MzAwMVx1MzAwMlx4YjdcdTIwMjVcdTIw''@;'; put 'put ''MjZceGE4XHUzMDAzXHhhZFx1MjAxNVx1MjIyNVx1ZmYzY1x1MjIzY1x1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxNFx1MzAxNVx1MzAwOCIsOSwiXHhiMVx4ZDdceGY3XHUyMjYwXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM0XHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1MjEyYlx1ZmZlMFx1''@;'; put 'put ''ZmZlMVx1ZmZlNVx1MjY0Mlx1MjY0MFx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx4YTdcdTIwM2JcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTI1YmRcdTI1YmNcdTIxOTJcdTIxOTBc''@;'; put 'put ''dTIxOTFcdTIxOTNcdTIxOTRcdTMwMTNcdTIyNmFcdTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVcdTIyMmJcdTIyMmNcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIyODJcdTIyODNcdTIyMmFcdTIyMjlcdTIyMjdcdTIyMjhcdWZmZTIiXSxbImEyNDEiLCJcdWM5MTBcdWM5MTIiLDUs''@;'; put 'put ''Ilx1YzkxOSIsMThdLFsiYTI2MSIsIlx1YzkyZCIsNiwiXHVjOTM1IiwxOF0sWyJhMjgxIiwiXHVjOTQ4Iiw3LCJcdWM5NTJcdWM5NTNcdWM5NTVcdWM5NTZcdWM5NTdcdWM5NTkiLDYsIlx1Yzk2Mlx1Yzk2NCIsNywiXHVjOTZkXHVjOTZlXHVjOTZmXHUyMWQyXHUyMWQ0XHUyMjAwXHUyMjAz''@;'; put 'put ''XHhiNFx1ZmY1ZVx1MDJjN1x1MDJkOFx1MDJkZFx1MDJkYVx1MDJkOVx4YjhcdTAyZGJceGExXHhiZlx1MDJkMFx1MjIyZVx1MjIxMVx1MjIwZlx4YTRcdTIxMDlcdTIwMzBcdTI1YzFcdTI1YzBcdTI1YjdcdTI1YjZcdTI2NjRcdTI2NjBcdTI2NjFcdTI2NjVcdTI2NjdcdTI2NjNcdTIyOTlc''@;'; put 'put ''dTI1YzhcdTI1YTNcdTI1ZDBcdTI1ZDFcdTI1OTJcdTI1YTRcdTI1YTVcdTI1YThcdTI1YTdcdTI1YTZcdTI1YTlcdTI2NjhcdTI2MGZcdTI2MGVcdTI2MWNcdTI2MWVceGI2XHUyMDIwXHUyMDIxXHUyMTk1XHUyMTk3XHUyMTk5XHUyMTk2XHUyMTk4XHUyNjZkXHUyNjY5XHUyNjZhXHUyNjZj''@;'; put 'put ''XHUzMjdmXHUzMjFjXHUyMTE2XHUzM2M3XHUyMTIyXHUzM2MyXHUzM2Q4XHUyMTIxXHUyMGFjXHhhZSJdLFsiYTM0MSIsIlx1Yzk3MVx1Yzk3Mlx1Yzk3M1x1Yzk3NSIsNiwiXHVjOTdkIiwxMCwiXHVjOThhXHVjOThiXHVjOThkXHVjOThlXHVjOThmIl0sWyJhMzYxIiwiXHVjOTkxIiw2LCJc''@;'; put 'put ''dWM5OWFcdWM5OWNcdWM5OWUiLDE2XSxbImEzODEiLCJcdWM5YWYiLDE2LCJcdWM5YzJcdWM5YzNcdWM5YzVcdWM5YzZcdWM5YzlcdWM5Y2IiLDQsIlx1YzlkMlx1YzlkNFx1YzlkN1x1YzlkOFx1YzlkYlx1ZmYwMSIsNTgsIlx1ZmZlNlx1ZmYzZCIsMzIsIlx1ZmZlMyJdLFsiYTQ0MSIsIlx1''@;'; put 'put ''YzlkZVx1YzlkZlx1YzllMVx1YzllM1x1YzllNVx1YzllNlx1YzllOFx1YzllOVx1YzllYVx1YzllYlx1YzllZVx1YzlmMiIsNSwiXHVjOWZhXHVjOWZiXHVjOWZkXHVjOWZlXHVjOWZmXHVjYTAxXHVjYTAyXHVjYTAzXHVjYTA0Il0sWyJhNDYxIiwiXHVjYTA1XHVjYTA2XHVjYTA3XHVjYTBh''@;'; put 'put ''XHVjYTBlIiw1LCJcdWNhMTVcdWNhMTZcdWNhMTdcdWNhMTkiLDEyXSxbImE0ODEiLCJcdWNhMjZcdWNhMjdcdWNhMjhcdWNhMmEiLDI4LCJcdTMxMzEiLDkzXSxbImE1NDEiLCJcdWNhNDciLDQsIlx1Y2E0ZVx1Y2E0Zlx1Y2E1MVx1Y2E1Mlx1Y2E1M1x1Y2E1NSIsNiwiXHVjYTVlXHVjYTYy''@;'; put 'put ''Iiw1LCJcdWNhNjlcdWNhNmEiXSxbImE1NjEiLCJcdWNhNmIiLDE3LCJcdWNhN2UiLDUsIlx1Y2E4NVx1Y2E4NiJdLFsiYTU4MSIsIlx1Y2E4NyIsMTYsIlx1Y2E5OSIsMTQsIlx1MjE3MCIsOV0sWyJhNWIwIiwiXHUyMTYwIiw5XSxbImE1YzEiLCJcdTAzOTEiLDE2LCJcdTAzYTMiLDZdLFsi''@;'; put 'put ''YTVlMSIsIlx1MDNiMSIsMTYsIlx1MDNjMyIsNl0sWyJhNjQxIiwiXHVjYWE4IiwxOSwiXHVjYWJlXHVjYWJmXHVjYWMxXHVjYWMyXHVjYWMzXHVjYWM1Il0sWyJhNjYxIiwiXHVjYWM2Iiw1LCJcdWNhY2VcdWNhZDBcdWNhZDJcdWNhZDRcdWNhZDVcdWNhZDZcdWNhZDdcdWNhZGEiLDUsIlx1''@;'; put 'put ''Y2FlMSIsNl0sWyJhNjgxIiwiXHVjYWU4XHVjYWU5XHVjYWVhXHVjYWViXHVjYWVkIiw2LCJcdWNhZjUiLDE4LCJcdWNiMDlcdWNiMGFcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1''@;'; put 'put ''MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdTI1MTJcdTI1MTFcdTI1MWFcdTI1MTlcdTI1MTZcdTI1MTVcdTI1MGVcdTI1MGRcdTI1MWVcdTI1MWZc''@;'; put 'put ''dTI1MjFcdTI1MjJcdTI1MjZcdTI1MjdcdTI1MjlcdTI1MmFcdTI1MmRcdTI1MmVcdTI1MzFcdTI1MzJcdTI1MzVcdTI1MzZcdTI1MzlcdTI1M2FcdTI1M2RcdTI1M2VcdTI1NDBcdTI1NDFcdTI1NDMiLDddLFsiYTc0MSIsIlx1Y2IwYiIsNCwiXHVjYjExXHVjYjEyXHVjYjEzXHVjYjE1XHVj''@;'; put 'put ''YjE2XHVjYjE3XHVjYjE5Iiw2LCJcdWNiMjIiLDddLFsiYTc2MSIsIlx1Y2IyYSIsMjIsIlx1Y2I0Mlx1Y2I0M1x1Y2I0NCJdLFsiYTc4MSIsIlx1Y2I0NVx1Y2I0Nlx1Y2I0N1x1Y2I0YVx1Y2I0Ylx1Y2I0ZFx1Y2I0ZVx1Y2I0Zlx1Y2I1MSIsNiwiXHVjYjVhXHVjYjViXHVjYjVjXHVjYjVl''@;'; put 'put ''Iiw1LCJcdWNiNjUiLDcsIlx1MzM5NVx1MzM5Nlx1MzM5N1x1MjExM1x1MzM5OFx1MzNjNFx1MzNhM1x1MzNhNFx1MzNhNVx1MzNhNlx1MzM5OSIsOSwiXHUzM2NhXHUzMzhkXHUzMzhlXHUzMzhmXHUzM2NmXHUzMzg4XHUzMzg5XHUzM2M4XHUzM2E3XHUzM2E4XHUzM2IwIiw5LCJcdTMzODAi''@;'; put 'put ''LDQsIlx1MzNiYSIsNSwiXHUzMzkwIiw0LCJcdTIxMjZcdTMzYzBcdTMzYzFcdTMzOGFcdTMzOGJcdTMzOGNcdTMzZDZcdTMzYzVcdTMzYWRcdTMzYWVcdTMzYWZcdTMzZGJcdTMzYTlcdTMzYWFcdTMzYWJcdTMzYWNcdTMzZGRcdTMzZDBcdTMzZDNcdTMzYzNcdTMzYzlcdTMzZGNcdTMzYzYi''@;'; put 'put ''XSxbImE4NDEiLCJcdWNiNmQiLDEwLCJcdWNiN2EiLDE0XSxbImE4NjEiLCJcdWNiODkiLDE4LCJcdWNiOWQiLDZdLFsiYTg4MSIsIlx1Y2JhNCIsMTksIlx1Y2JiOSIsMTEsIlx4YzZceGQwXHhhYVx1MDEyNiJdLFsiYThhNiIsIlx1MDEzMiJdLFsiYThhOCIsIlx1MDEzZlx1MDE0MVx4ZDhc''@;'; put 'put ''dTAxNTJceGJhXHhkZVx1MDE2Nlx1MDE0YSJdLFsiYThiMSIsIlx1MzI2MCIsMjcsIlx1MjRkMCIsMjUsIlx1MjQ2MCIsMTQsIlx4YmRcdTIxNTNcdTIxNTRceGJjXHhiZVx1MjE1Ylx1MjE1Y1x1MjE1ZFx1MjE1ZSJdLFsiYTk0MSIsIlx1Y2JjNSIsMTQsIlx1Y2JkNSIsMTBdLFsiYTk2MSIs''@;'; put 'put ''Ilx1Y2JlMFx1Y2JlMVx1Y2JlMlx1Y2JlM1x1Y2JlNVx1Y2JlNlx1Y2JlOFx1Y2JlYSIsMThdLFsiYTk4MSIsIlx1Y2JmZCIsMTQsIlx1Y2MwZVx1Y2MwZlx1Y2MxMVx1Y2MxMlx1Y2MxM1x1Y2MxNSIsNiwiXHVjYzFlXHVjYzFmXHVjYzIwXHVjYzIzXHVjYzI0XHhlNlx1MDExMVx4ZjBcdTAx''@;'; put 'put ''MjdcdTAxMzFcdTAxMzNcdTAxMzhcdTAxNDBcdTAxNDJceGY4XHUwMTUzXHhkZlx4ZmVcdTAxNjdcdTAxNGJcdTAxNDlcdTMyMDAiLDI3LCJcdTI0OWMiLDI1LCJcdTI0NzQiLDE0LCJceGI5XHhiMlx4YjNcdTIwNzRcdTIwN2ZcdTIwODFcdTIwODJcdTIwODNcdTIwODQiXSxbImFhNDEiLCJc''@;'; put 'put ''dWNjMjVcdWNjMjZcdWNjMmFcdWNjMmJcdWNjMmRcdWNjMmZcdWNjMzEiLDYsIlx1Y2MzYVx1Y2MzZiIsNCwiXHVjYzQ2XHVjYzQ3XHVjYzQ5XHVjYzRhXHVjYzRiXHVjYzRkXHVjYzRlIl0sWyJhYTYxIiwiXHVjYzRmIiw0LCJcdWNjNTZcdWNjNWEiLDUsIlx1Y2M2MVx1Y2M2Mlx1Y2M2M1x1''@;'; put 'put ''Y2M2NVx1Y2M2N1x1Y2M2OSIsNiwiXHVjYzcxXHVjYzcyIl0sWyJhYTgxIiwiXHVjYzczXHVjYzc0XHVjYzc2IiwyOSwiXHUzMDQxIiw4Ml0sWyJhYjQxIiwiXHVjYzk0XHVjYzk1XHVjYzk2XHVjYzk3XHVjYzlhXHVjYzliXHVjYzlkXHVjYzllXHVjYzlmXHVjY2ExIiw2LCJcdWNjYWFcdWNj''@;'; put 'put ''YWUiLDUsIlx1Y2NiNlx1Y2NiN1x1Y2NiOSJdLFsiYWI2MSIsIlx1Y2NiYVx1Y2NiYlx1Y2NiZCIsNiwiXHVjY2M2XHVjY2M4XHVjY2NhIiw1LCJcdWNjZDFcdWNjZDJcdWNjZDNcdWNjZDUiLDVdLFsiYWI4MSIsIlx1Y2NkYiIsOCwiXHVjY2U1Iiw2LCJcdWNjZWRcdWNjZWVcdWNjZWZcdWNj''@;'; put 'put ''ZjEiLDEyLCJcdTMwYTEiLDg1XSxbImFjNDEiLCJcdWNjZmVcdWNjZmZcdWNkMDBcdWNkMDIiLDUsIlx1Y2QwYVx1Y2QwYlx1Y2QwZFx1Y2QwZVx1Y2QwZlx1Y2QxMSIsNiwiXHVjZDFhXHVjZDFjXHVjZDFlXHVjZDFmXHVjZDIwIl0sWyJhYzYxIiwiXHVjZDIxXHVjZDIyXHVjZDIzXHVjZDI1''@;'; put 'put ''XHVjZDI2XHVjZDI3XHVjZDI5XHVjZDJhXHVjZDJiXHVjZDJkIiwxMSwiXHVjZDNhIiw0XSxbImFjODEiLCJcdWNkM2YiLDI4LCJcdWNkNWRcdWNkNWVcdWNkNWZcdTA0MTAiLDUsIlx1MDQwMVx1MDQxNiIsMjVdLFsiYWNkMSIsIlx1MDQzMCIsNSwiXHUwNDUxXHUwNDM2IiwyNV0sWyJhZDQx''@;'; put 'put ''IiwiXHVjZDYxXHVjZDYyXHVjZDYzXHVjZDY1Iiw2LCJcdWNkNmVcdWNkNzBcdWNkNzIiLDUsIlx1Y2Q3OSIsN10sWyJhZDYxIiwiXHVjZDgxIiw2LCJcdWNkODkiLDEwLCJcdWNkOTZcdWNkOTdcdWNkOTlcdWNkOWFcdWNkOWJcdWNkOWRcdWNkOWVcdWNkOWYiXSxbImFkODEiLCJcdWNkYTBc''@;'; put 'put ''dWNkYTFcdWNkYTJcdWNkYTNcdWNkYTZcdWNkYThcdWNkYWEiLDUsIlx1Y2RiMSIsMTgsIlx1Y2RjNSJdLFsiYWU0MSIsIlx1Y2RjNiIsNSwiXHVjZGNkXHVjZGNlXHVjZGNmXHVjZGQxIiwxNl0sWyJhZTYxIiwiXHVjZGUyIiw1LCJcdWNkZTlcdWNkZWFcdWNkZWJcdWNkZWRcdWNkZWVcdWNk''@;'; put 'put ''ZWZcdWNkZjEiLDYsIlx1Y2RmYVx1Y2RmY1x1Y2RmZSIsNF0sWyJhZTgxIiwiXHVjZTAzXHVjZTA1XHVjZTA2XHVjZTA3XHVjZTA5XHVjZTBhXHVjZTBiXHVjZTBkIiw2LCJcdWNlMTVcdWNlMTZcdWNlMTdcdWNlMThcdWNlMWEiLDUsIlx1Y2UyMlx1Y2UyM1x1Y2UyNVx1Y2UyNlx1Y2UyN1x1''@;'; put 'put ''Y2UyOVx1Y2UyYVx1Y2UyYiJdLFsiYWY0MSIsIlx1Y2UyY1x1Y2UyZFx1Y2UyZVx1Y2UyZlx1Y2UzMlx1Y2UzNFx1Y2UzNiIsMTldLFsiYWY2MSIsIlx1Y2U0YSIsMTMsIlx1Y2U1YVx1Y2U1Ylx1Y2U1ZFx1Y2U1ZVx1Y2U2MiIsNSwiXHVjZTZhXHVjZTZjIl0sWyJhZjgxIiwiXHVjZTZlIiw1''@;'; put 'put ''LCJcdWNlNzZcdWNlNzdcdWNlNzlcdWNlN2FcdWNlN2JcdWNlN2QiLDYsIlx1Y2U4Nlx1Y2U4OFx1Y2U4YSIsNSwiXHVjZTkyXHVjZTkzXHVjZTk1XHVjZTk2XHVjZTk3XHVjZTk5Il0sWyJiMDQxIiwiXHVjZTlhIiw1LCJcdWNlYTJcdWNlYTYiLDUsIlx1Y2VhZSIsMTJdLFsiYjA2MSIsIlx1''@;'; put 'put ''Y2ViYiIsNSwiXHVjZWMyIiwxOV0sWyJiMDgxIiwiXHVjZWQ2IiwxMywiXHVjZWU2XHVjZWU3XHVjZWU5XHVjZWVhXHVjZWVkIiw2LCJcdWNlZjZcdWNlZmEiLDUsIlx1YWMwMFx1YWMwMVx1YWMwNFx1YWMwN1x1YWMwOFx1YWMwOVx1YWMwYVx1YWMxMCIsNywiXHVhYzE5Iiw0LCJcdWFjMjBc''@;'; put 'put ''dWFjMjRcdWFjMmNcdWFjMmRcdWFjMmZcdWFjMzBcdWFjMzFcdWFjMzhcdWFjMzlcdWFjM2NcdWFjNDBcdWFjNGJcdWFjNGRcdWFjNTRcdWFjNThcdWFjNWNcdWFjNzBcdWFjNzFcdWFjNzRcdWFjNzdcdWFjNzhcdWFjN2FcdWFjODBcdWFjODFcdWFjODNcdWFjODRcdWFjODVcdWFjODZcdWFj''@;'; put 'put ''ODlcdWFjOGFcdWFjOGJcdWFjOGNcdWFjOTBcdWFjOTRcdWFjOWNcdWFjOWRcdWFjOWZcdWFjYTBcdWFjYTFcdWFjYThcdWFjYTlcdWFjYWFcdWFjYWNcdWFjYWZcdWFjYjBcdWFjYjhcdWFjYjlcdWFjYmJcdWFjYmNcdWFjYmRcdWFjYzFcdWFjYzRcdWFjYzhcdWFjY2NcdWFjZDVcdWFjZDdc''@;'; put 'put ''dWFjZTBcdWFjZTFcdWFjZTRcdWFjZTdcdWFjZThcdWFjZWFcdWFjZWNcdWFjZWZcdWFjZjBcdWFjZjFcdWFjZjNcdWFjZjVcdWFjZjZcdWFjZmNcdWFjZmRcdWFkMDBcdWFkMDRcdWFkMDYiXSxbImIxNDEiLCJcdWNmMDJcdWNmMDNcdWNmMDVcdWNmMDZcdWNmMDdcdWNmMDkiLDYsIlx1Y2Yx''@;'; put 'put ''Mlx1Y2YxNFx1Y2YxNiIsNSwiXHVjZjFkXHVjZjFlXHVjZjFmXHVjZjIxXHVjZjIyXHVjZjIzIl0sWyJiMTYxIiwiXHVjZjI1Iiw2LCJcdWNmMmVcdWNmMzIiLDUsIlx1Y2YzOSIsMTFdLFsiYjE4MSIsIlx1Y2Y0NSIsMTQsIlx1Y2Y1Nlx1Y2Y1N1x1Y2Y1OVx1Y2Y1YVx1Y2Y1Ylx1Y2Y1ZCIs''@;'; put 'put ''NiwiXHVjZjY2XHVjZjY4XHVjZjZhXHVjZjZiXHVjZjZjXHVhZDBjXHVhZDBkXHVhZDBmXHVhZDExXHVhZDE4XHVhZDFjXHVhZDIwXHVhZDI5XHVhZDJjXHVhZDJkXHVhZDM0XHVhZDM1XHVhZDM4XHVhZDNjXHVhZDQ0XHVhZDQ1XHVhZDQ3XHVhZDQ5XHVhZDUwXHVhZDU0XHVhZDU4XHVhZDYx''@;'; put 'put ''XHVhZDYzXHVhZDZjXHVhZDZkXHVhZDcwXHVhZDczXHVhZDc0XHVhZDc1XHVhZDc2XHVhZDdiXHVhZDdjXHVhZDdkXHVhZDdmXHVhZDgxXHVhZDgyXHVhZDg4XHVhZDg5XHVhZDhjXHVhZDkwXHVhZDljXHVhZDlkXHVhZGE0XHVhZGI3XHVhZGMwXHVhZGMxXHVhZGM0XHVhZGM4XHVhZGQwXHVh''@;'; put 'put ''ZGQxXHVhZGQzXHVhZGRjXHVhZGUwXHVhZGU0XHVhZGY4XHVhZGY5XHVhZGZjXHVhZGZmXHVhZTAwXHVhZTAxXHVhZTA4XHVhZTA5XHVhZTBiXHVhZTBkXHVhZTE0XHVhZTMwXHVhZTMxXHVhZTM0XHVhZTM3XHVhZTM4XHVhZTNhXHVhZTQwXHVhZTQxXHVhZTQzXHVhZTQ1XHVhZTQ2XHVhZTRh''@;'; put 'put ''XHVhZTRjXHVhZTRkXHVhZTRlXHVhZTUwXHVhZTU0XHVhZTU2XHVhZTVjXHVhZTVkXHVhZTVmXHVhZTYwXHVhZTYxXHVhZTY1XHVhZTY4XHVhZTY5XHVhZTZjXHVhZTcwXHVhZTc4Il0sWyJiMjQxIiwiXHVjZjZkXHVjZjZlXHVjZjZmXHVjZjcyXHVjZjczXHVjZjc1XHVjZjc2XHVjZjc3XHVj''@;'; put 'put ''Zjc5Iiw2LCJcdWNmODFcdWNmODJcdWNmODNcdWNmODRcdWNmODYiLDUsIlx1Y2Y4ZCJdLFsiYjI2MSIsIlx1Y2Y4ZSIsMTgsIlx1Y2ZhMiIsNSwiXHVjZmE5Il0sWyJiMjgxIiwiXHVjZmFhIiw1LCJcdWNmYjEiLDE4LCJcdWNmYzUiLDYsIlx1YWU3OVx1YWU3Ylx1YWU3Y1x1YWU3ZFx1YWU4''@;'; put 'put ''NFx1YWU4NVx1YWU4Y1x1YWViY1x1YWViZFx1YWViZVx1YWVjMFx1YWVjNFx1YWVjY1x1YWVjZFx1YWVjZlx1YWVkMFx1YWVkMVx1YWVkOFx1YWVkOVx1YWVkY1x1YWVlOFx1YWVlYlx1YWVlZFx1YWVmNFx1YWVmOFx1YWVmY1x1YWYwN1x1YWYwOFx1YWYwZFx1YWYxMFx1YWYyY1x1YWYyZFx1''@;'; put 'put ''YWYzMFx1YWYzMlx1YWYzNFx1YWYzY1x1YWYzZFx1YWYzZlx1YWY0MVx1YWY0Mlx1YWY0M1x1YWY0OFx1YWY0OVx1YWY1MFx1YWY1Y1x1YWY1ZFx1YWY2NFx1YWY2NVx1YWY3OVx1YWY4MFx1YWY4NFx1YWY4OFx1YWY5MFx1YWY5MVx1YWY5NVx1YWY5Y1x1YWZiOFx1YWZiOVx1YWZiY1x1YWZj''@;'; put 'put ''MFx1YWZjN1x1YWZjOFx1YWZjOVx1YWZjYlx1YWZjZFx1YWZjZVx1YWZkNFx1YWZkY1x1YWZlOFx1YWZlOVx1YWZmMFx1YWZmMVx1YWZmNFx1YWZmOFx1YjAwMFx1YjAwMVx1YjAwNFx1YjAwY1x1YjAxMFx1YjAxNFx1YjAxY1x1YjAxZFx1YjAyOFx1YjA0NFx1YjA0NVx1YjA0OFx1YjA0YVx1''@;'; put 'put ''YjA0Y1x1YjA0ZVx1YjA1M1x1YjA1NFx1YjA1NVx1YjA1N1x1YjA1OSJdLFsiYjM0MSIsIlx1Y2ZjYyIsMTksIlx1Y2ZlMlx1Y2ZlM1x1Y2ZlNVx1Y2ZlNlx1Y2ZlN1x1Y2ZlOSJdLFsiYjM2MSIsIlx1Y2ZlYSIsNSwiXHVjZmYyXHVjZmY0XHVjZmY2Iiw1LCJcdWNmZmRcdWNmZmVcdWNmZmZc''@;'; put 'put ''dWQwMDFcdWQwMDJcdWQwMDNcdWQwMDUiLDVdLFsiYjM4MSIsIlx1ZDAwYiIsNSwiXHVkMDEyIiw1LCJcdWQwMTkiLDE5LCJcdWIwNWRcdWIwN2NcdWIwN2RcdWIwODBcdWIwODRcdWIwOGNcdWIwOGRcdWIwOGZcdWIwOTFcdWIwOThcdWIwOTlcdWIwOWFcdWIwOWNcdWIwOWZcdWIwYTBcdWIw''@;'; put 'put ''YTFcdWIwYTJcdWIwYThcdWIwYTlcdWIwYWIiLDQsIlx1YjBiMVx1YjBiM1x1YjBiNFx1YjBiNVx1YjBiOFx1YjBiY1x1YjBjNFx1YjBjNVx1YjBjN1x1YjBjOFx1YjBjOVx1YjBkMFx1YjBkMVx1YjBkNFx1YjBkOFx1YjBlMFx1YjBlNVx1YjEwOFx1YjEwOVx1YjEwYlx1YjEwY1x1YjExMFx1''@;'; put 'put ''YjExMlx1YjExM1x1YjExOFx1YjExOVx1YjExYlx1YjExY1x1YjExZFx1YjEyM1x1YjEyNFx1YjEyNVx1YjEyOFx1YjEyY1x1YjEzNFx1YjEzNVx1YjEzN1x1YjEzOFx1YjEzOVx1YjE0MFx1YjE0MVx1YjE0NFx1YjE0OFx1YjE1MFx1YjE1MVx1YjE1NFx1YjE1NVx1YjE1OFx1YjE1Y1x1YjE2''@;'; put 'put ''MFx1YjE3OFx1YjE3OVx1YjE3Y1x1YjE4MFx1YjE4Mlx1YjE4OFx1YjE4OVx1YjE4Ylx1YjE4ZFx1YjE5Mlx1YjE5M1x1YjE5NFx1YjE5OFx1YjE5Y1x1YjFhOFx1YjFjY1x1YjFkMFx1YjFkNFx1YjFkY1x1YjFkZCJdLFsiYjQ0MSIsIlx1ZDAyZSIsNSwiXHVkMDM2XHVkMDM3XHVkMDM5XHVk''@;'; put 'put ''MDNhXHVkMDNiXHVkMDNkIiw2LCJcdWQwNDZcdWQwNDhcdWQwNGEiLDVdLFsiYjQ2MSIsIlx1ZDA1MVx1ZDA1Mlx1ZDA1M1x1ZDA1NVx1ZDA1Nlx1ZDA1N1x1ZDA1OSIsNiwiXHVkMDYxIiwxMCwiXHVkMDZlXHVkMDZmIl0sWyJiNDgxIiwiXHVkMDcxXHVkMDcyXHVkMDczXHVkMDc1Iiw2LCJc''@;'; put 'put ''dWQwN2VcdWQwN2ZcdWQwODBcdWQwODIiLDE4LCJcdWIxZGZcdWIxZThcdWIxZTlcdWIxZWNcdWIxZjBcdWIxZjlcdWIxZmJcdWIxZmRcdWIyMDRcdWIyMDVcdWIyMDhcdWIyMGJcdWIyMGNcdWIyMTRcdWIyMTVcdWIyMTdcdWIyMTlcdWIyMjBcdWIyMzRcdWIyM2NcdWIyNThcdWIyNWNcdWIy''@;'; put 'put ''NjBcdWIyNjhcdWIyNjlcdWIyNzRcdWIyNzVcdWIyN2NcdWIyODRcdWIyODVcdWIyODlcdWIyOTBcdWIyOTFcdWIyOTRcdWIyOThcdWIyOTlcdWIyOWFcdWIyYTBcdWIyYTFcdWIyYTNcdWIyYTVcdWIyYTZcdWIyYWFcdWIyYWNcdWIyYjBcdWIyYjRcdWIyYzhcdWIyYzlcdWIyY2NcdWIyZDBc''@;'; put 'put ''dWIyZDJcdWIyZDhcdWIyZDlcdWIyZGJcdWIyZGRcdWIyZTJcdWIyZTRcdWIyZTVcdWIyZTZcdWIyZThcdWIyZWIiLDQsIlx1YjJmM1x1YjJmNFx1YjJmNVx1YjJmNyIsNCwiXHViMmZmXHViMzAwXHViMzAxXHViMzA0XHViMzA4XHViMzEwXHViMzExXHViMzEzXHViMzE0XHViMzE1XHViMzFj''@;'; put 'put ''XHViMzU0XHViMzU1XHViMzU2XHViMzU4XHViMzViXHViMzVjXHViMzVlXHViMzVmXHViMzY0XHViMzY1Il0sWyJiNTQxIiwiXHVkMDk1IiwxNCwiXHVkMGE2XHVkMGE3XHVkMGE5XHVkMGFhXHVkMGFiXHVkMGFkIiw1XSxbImI1NjEiLCJcdWQwYjNcdWQwYjZcdWQwYjhcdWQwYmEiLDUsIlx1''@;'; put 'put ''ZDBjMlx1ZDBjM1x1ZDBjNVx1ZDBjNlx1ZDBjN1x1ZDBjYSIsNSwiXHVkMGQyXHVkMGQ2Iiw0XSxbImI1ODEiLCJcdWQwZGJcdWQwZGVcdWQwZGZcdWQwZTFcdWQwZTJcdWQwZTNcdWQwZTUiLDYsIlx1ZDBlZVx1ZDBmMiIsNSwiXHVkMGY5IiwxMSwiXHViMzY3XHViMzY5XHViMzZiXHViMzZl''@;'; put 'put ''XHViMzcwXHViMzcxXHViMzc0XHViMzc4XHViMzgwXHViMzgxXHViMzgzXHViMzg0XHViMzg1XHViMzhjXHViMzkwXHViMzk0XHViM2EwXHViM2ExXHViM2E4XHViM2FjXHViM2M0XHViM2M1XHViM2M4XHViM2NiXHViM2NjXHViM2NlXHViM2QwXHViM2Q0XHViM2Q1XHViM2Q3XHViM2Q5XHVi''@;'; put 'put ''M2RiXHViM2RkXHViM2UwXHViM2U0XHViM2U4XHViM2ZjXHViNDEwXHViNDE4XHViNDFjXHViNDIwXHViNDI4XHViNDI5XHViNDJiXHViNDM0XHViNDUwXHViNDUxXHViNDU0XHViNDU4XHViNDYwXHViNDYxXHViNDYzXHViNDY1XHViNDZjXHViNDgwXHViNDg4XHViNDlkXHViNGE0XHViNGE4''@;'; put 'put ''XHViNGFjXHViNGI1XHViNGI3XHViNGI5XHViNGMwXHViNGM0XHViNGM4XHViNGQwXHViNGQ1XHViNGRjXHViNGRkXHViNGUwXHViNGUzXHViNGU0XHViNGU2XHViNGVjXHViNGVkXHViNGVmXHViNGYxXHViNGY4XHViNTE0XHViNTE1XHViNTE4XHViNTFiXHViNTFjXHViNTI0XHViNTI1XHVi''@;'; put 'put ''NTI3XHViNTI4XHViNTI5XHViNTJhXHViNTMwXHViNTMxXHViNTM0XHViNTM4Il0sWyJiNjQxIiwiXHVkMTA1Iiw3LCJcdWQxMGUiLDE3XSxbImI2NjEiLCJcdWQxMjAiLDE1LCJcdWQxMzJcdWQxMzNcdWQxMzVcdWQxMzZcdWQxMzdcdWQxMzlcdWQxM2JcdWQxM2NcdWQxM2RcdWQxM2UiXSxb''@;'; put 'put ''ImI2ODEiLCJcdWQxM2ZcdWQxNDJcdWQxNDYiLDUsIlx1ZDE0ZVx1ZDE0Zlx1ZDE1MVx1ZDE1Mlx1ZDE1M1x1ZDE1NSIsNiwiXHVkMTVlXHVkMTYwXHVkMTYyIiw1LCJcdWQxNjlcdWQxNmFcdWQxNmJcdWQxNmRcdWI1NDBcdWI1NDFcdWI1NDNcdWI1NDRcdWI1NDVcdWI1NGJcdWI1NGNcdWI1''@;'; put 'put ''NGRcdWI1NTBcdWI1NTRcdWI1NWNcdWI1NWRcdWI1NWZcdWI1NjBcdWI1NjFcdWI1YTBcdWI1YTFcdWI1YTRcdWI1YThcdWI1YWFcdWI1YWJcdWI1YjBcdWI1YjFcdWI1YjNcdWI1YjRcdWI1YjVcdWI1YmJcdWI1YmNcdWI1YmRcdWI1YzBcdWI1YzRcdWI1Y2NcdWI1Y2RcdWI1Y2ZcdWI1ZDBc''@;'; put 'put ''dWI1ZDFcdWI1ZDhcdWI1ZWNcdWI2MTBcdWI2MTFcdWI2MTRcdWI2MThcdWI2MjVcdWI2MmNcdWI2MzRcdWI2NDhcdWI2NjRcdWI2NjhcdWI2OWNcdWI2OWRcdWI2YTBcdWI2YTRcdWI2YWJcdWI2YWNcdWI2YjFcdWI2ZDRcdWI2ZjBcdWI2ZjRcdWI2ZjhcdWI3MDBcdWI3MDFcdWI3MDVcdWI3''@;'; put 'put ''MjhcdWI3MjlcdWI3MmNcdWI3MmZcdWI3MzBcdWI3MzhcdWI3MzlcdWI3M2JcdWI3NDRcdWI3NDhcdWI3NGNcdWI3NTRcdWI3NTVcdWI3NjBcdWI3NjRcdWI3NjhcdWI3NzBcdWI3NzFcdWI3NzNcdWI3NzVcdWI3N2NcdWI3N2RcdWI3ODBcdWI3ODRcdWI3OGNcdWI3OGRcdWI3OGZcdWI3OTBc''@;'; put 'put ''dWI3OTFcdWI3OTJcdWI3OTZcdWI3OTciXSxbImI3NDEiLCJcdWQxNmUiLDEzLCJcdWQxN2QiLDYsIlx1ZDE4NVx1ZDE4Nlx1ZDE4N1x1ZDE4OVx1ZDE4YSJdLFsiYjc2MSIsIlx1ZDE4YiIsMjAsIlx1ZDFhMlx1ZDFhM1x1ZDFhNVx1ZDFhNlx1ZDFhNyJdLFsiYjc4MSIsIlx1ZDFhOSIsNiwi''@;'; put 'put ''XHVkMWIyXHVkMWI0XHVkMWI2XHVkMWI3XHVkMWI4XHVkMWI5XHVkMWJiXHVkMWJkXHVkMWJlXHVkMWJmXHVkMWMxIiwxNCwiXHViNzk4XHViNzk5XHViNzljXHViN2EwXHViN2E4XHViN2E5XHViN2FiXHViN2FjXHViN2FkXHViN2I0XHViN2I1XHViN2I4XHViN2M3XHViN2M5XHViN2VjXHVi''@;'; put 'put ''N2VkXHViN2YwXHViN2Y0XHViN2ZjXHViN2ZkXHViN2ZmXHViODAwXHViODAxXHViODA3XHViODA4XHViODA5XHViODBjXHViODEwXHViODE4XHViODE5XHViODFiXHViODFkXHViODI0XHViODI1XHViODI4XHViODJjXHViODM0XHViODM1XHViODM3XHViODM4XHViODM5XHViODQwXHViODQ0''@;'; put 'put ''XHViODUxXHViODUzXHViODVjXHViODVkXHViODYwXHViODY0XHViODZjXHViODZkXHViODZmXHViODcxXHViODc4XHViODdjXHViODhkXHViOGE4XHViOGIwXHViOGI0XHViOGI4XHViOGMwXHViOGMxXHViOGMzXHViOGM1XHViOGNjXHViOGQwXHViOGQ0XHViOGRkXHViOGRmXHViOGUxXHVi''@;'; put 'put ''OGU4XHViOGU5XHViOGVjXHViOGYwXHViOGY4XHViOGY5XHViOGZiXHViOGZkXHViOTA0XHViOTE4XHViOTIwXHViOTNjXHViOTNkXHViOTQwXHViOTQ0XHViOTRjXHViOTRmXHViOTUxXHViOTU4XHViOTU5XHViOTVjXHViOTYwXHViOTY4XHViOTY5Il0sWyJiODQxIiwiXHVkMWQwIiw3LCJc''@;'; put 'put ''dWQxZDkiLDE3XSxbImI4NjEiLCJcdWQxZWIiLDgsIlx1ZDFmNVx1ZDFmNlx1ZDFmN1x1ZDFmOSIsMTNdLFsiYjg4MSIsIlx1ZDIwOFx1ZDIwYSIsNSwiXHVkMjExIiwyNCwiXHViOTZiXHViOTZkXHViOTc0XHViOTc1XHViOTc4XHViOTdjXHViOTg0XHViOTg1XHViOTg3XHViOTg5XHViOThh''@;'; put 'put ''XHViOThkXHViOThlXHViOWFjXHViOWFkXHViOWIwXHViOWI0XHViOWJjXHViOWJkXHViOWJmXHViOWMxXHViOWM4XHViOWM5XHViOWNjXHViOWNlIiw0LCJcdWI5ZDhcdWI5ZDlcdWI5ZGJcdWI5ZGRcdWI5ZGVcdWI5ZTFcdWI5ZTNcdWI5ZTRcdWI5ZTVcdWI5ZThcdWI5ZWNcdWI5ZjRcdWI5''@;'; put 'put ''ZjVcdWI5ZjdcdWI5ZjhcdWI5ZjlcdWI5ZmFcdWJhMDBcdWJhMDFcdWJhMDhcdWJhMTVcdWJhMzhcdWJhMzlcdWJhM2NcdWJhNDBcdWJhNDJcdWJhNDhcdWJhNDlcdWJhNGJcdWJhNGRcdWJhNGVcdWJhNTNcdWJhNTRcdWJhNTVcdWJhNThcdWJhNWNcdWJhNjRcdWJhNjVcdWJhNjdcdWJhNjhc''@;'; put 'put ''dWJhNjlcdWJhNzBcdWJhNzFcdWJhNzRcdWJhNzhcdWJhODNcdWJhODRcdWJhODVcdWJhODdcdWJhOGNcdWJhYThcdWJhYTlcdWJhYWJcdWJhYWNcdWJhYjBcdWJhYjJcdWJhYjhcdWJhYjlcdWJhYmJcdWJhYmRcdWJhYzRcdWJhYzhcdWJhZDhcdWJhZDlcdWJhZmMiXSxbImI5NDEiLCJcdWQy''@;'; put 'put ''MmFcdWQyMmJcdWQyMmVcdWQyMmZcdWQyMzFcdWQyMzJcdWQyMzNcdWQyMzUiLDYsIlx1ZDIzZVx1ZDI0MFx1ZDI0MiIsNSwiXHVkMjQ5XHVkMjRhXHVkMjRiXHVkMjRjIl0sWyJiOTYxIiwiXHVkMjRkIiwxNCwiXHVkMjVkIiw2LCJcdWQyNjVcdWQyNjZcdWQyNjdcdWQyNjgiXSxbImI5ODEi''@;'; put 'put ''LCJcdWQyNjkiLDIyLCJcdWQyODJcdWQyODNcdWQyODVcdWQyODZcdWQyODdcdWQyODlcdWQyOGFcdWQyOGJcdWQyOGNcdWJiMDBcdWJiMDRcdWJiMGRcdWJiMGZcdWJiMTFcdWJiMThcdWJiMWNcdWJiMjBcdWJiMjlcdWJiMmJcdWJiMzRcdWJiMzVcdWJiMzZcdWJiMzhcdWJiM2JcdWJiM2Nc''@;'; put 'put ''dWJiM2RcdWJiM2VcdWJiNDRcdWJiNDVcdWJiNDdcdWJiNDlcdWJiNGRcdWJiNGZcdWJiNTBcdWJiNTRcdWJiNThcdWJiNjFcdWJiNjNcdWJiNmNcdWJiODhcdWJiOGNcdWJiOTBcdWJiYTRcdWJiYThcdWJiYWNcdWJiYjRcdWJiYjdcdWJiYzBcdWJiYzRcdWJiYzhcdWJiZDBcdWJiZDNcdWJi''@;'; put 'put ''ZjhcdWJiZjlcdWJiZmNcdWJiZmZcdWJjMDBcdWJjMDJcdWJjMDhcdWJjMDlcdWJjMGJcdWJjMGNcdWJjMGRcdWJjMGZcdWJjMTFcdWJjMTQiLDQsIlx1YmMxYiIsNCwiXHViYzI0XHViYzI1XHViYzI3XHViYzI5XHViYzJkXHViYzMwXHViYzMxXHViYzM0XHViYzM4XHViYzQwXHViYzQxXHVi''@;'; put 'put ''YzQzXHViYzQ0XHViYzQ1XHViYzQ5XHViYzRjXHViYzRkXHViYzUwXHViYzVkXHViYzg0XHViYzg1XHViYzg4XHViYzhiXHViYzhjXHViYzhlXHViYzk0XHViYzk1XHViYzk3Il0sWyJiYTQxIiwiXHVkMjhkXHVkMjhlXHVkMjhmXHVkMjkyXHVkMjkzXHVkMjk0XHVkMjk2Iiw1LCJcdWQyOWRc''@;'; put 'put ''dWQyOWVcdWQyOWZcdWQyYTFcdWQyYTJcdWQyYTNcdWQyYTUiLDYsIlx1ZDJhZCJdLFsiYmE2MSIsIlx1ZDJhZVx1ZDJhZlx1ZDJiMFx1ZDJiMiIsNSwiXHVkMmJhXHVkMmJiXHVkMmJkXHVkMmJlXHVkMmMxXHVkMmMzIiw0LCJcdWQyY2FcdWQyY2MiLDVdLFsiYmE4MSIsIlx1ZDJkMlx1ZDJk''@;'; put 'put ''M1x1ZDJkNVx1ZDJkNlx1ZDJkN1x1ZDJkOVx1ZDJkYVx1ZDJkYlx1ZDJkZCIsNiwiXHVkMmU2Iiw5LCJcdWQyZjJcdWQyZjNcdWQyZjVcdWQyZjZcdWQyZjdcdWQyZjlcdWQyZmFcdWJjOTlcdWJjOWFcdWJjYTBcdWJjYTFcdWJjYTRcdWJjYTdcdWJjYThcdWJjYjBcdWJjYjFcdWJjYjNcdWJj''@;'; put 'put ''YjRcdWJjYjVcdWJjYmNcdWJjYmRcdWJjYzBcdWJjYzRcdWJjY2RcdWJjY2ZcdWJjZDBcdWJjZDFcdWJjZDVcdWJjZDhcdWJjZGNcdWJjZjRcdWJjZjVcdWJjZjZcdWJjZjhcdWJjZmNcdWJkMDRcdWJkMDVcdWJkMDdcdWJkMDlcdWJkMTBcdWJkMTRcdWJkMjRcdWJkMmNcdWJkNDBcdWJkNDhc''@;'; put 'put ''dWJkNDlcdWJkNGNcdWJkNTBcdWJkNThcdWJkNTlcdWJkNjRcdWJkNjhcdWJkODBcdWJkODFcdWJkODRcdWJkODdcdWJkODhcdWJkODlcdWJkOGFcdWJkOTBcdWJkOTFcdWJkOTNcdWJkOTVcdWJkOTlcdWJkOWFcdWJkOWNcdWJkYTRcdWJkYjBcdWJkYjhcdWJkZDRcdWJkZDVcdWJkZDhcdWJk''@;'; put 'put ''ZGNcdWJkZTlcdWJkZjBcdWJkZjRcdWJkZjhcdWJlMDBcdWJlMDNcdWJlMDVcdWJlMGNcdWJlMGRcdWJlMTBcdWJlMTRcdWJlMWNcdWJlMWRcdWJlMWZcdWJlNDRcdWJlNDVcdWJlNDhcdWJlNGNcdWJlNGVcdWJlNTRcdWJlNTVcdWJlNTdcdWJlNTlcdWJlNWFcdWJlNWJcdWJlNjBcdWJlNjFc''@;'; put 'put ''dWJlNjQiXSxbImJiNDEiLCJcdWQyZmIiLDQsIlx1ZDMwMlx1ZDMwNFx1ZDMwNiIsNSwiXHVkMzBmXHVkMzExXHVkMzEyXHVkMzEzXHVkMzE1XHVkMzE3Iiw0LCJcdWQzMWVcdWQzMjJcdWQzMjMiXSxbImJiNjEiLCJcdWQzMjRcdWQzMjZcdWQzMjdcdWQzMmFcdWQzMmJcdWQzMmRcdWQzMmVc''@;'; put 'put ''dWQzMmZcdWQzMzEiLDYsIlx1ZDMzYVx1ZDMzZSIsNSwiXHVkMzQ2XHVkMzQ3XHVkMzQ4XHVkMzQ5Il0sWyJiYjgxIiwiXHVkMzRhIiwzMSwiXHViZTY4XHViZTZhXHViZTcwXHViZTcxXHViZTczXHViZTc0XHViZTc1XHViZTdiXHViZTdjXHViZTdkXHViZTgwXHViZTg0XHViZThjXHViZThk''@;'; put 'put ''XHViZThmXHViZTkwXHViZTkxXHViZTk4XHViZTk5XHViZWE4XHViZWQwXHViZWQxXHViZWQ0XHViZWQ3XHViZWQ4XHViZWUwXHViZWUzXHViZWU0XHViZWU1XHViZWVjXHViZjAxXHViZjA4XHViZjA5XHViZjE4XHViZjE5XHViZjFiXHViZjFjXHViZjFkXHViZjQwXHViZjQxXHViZjQ0XHVi''@;'; put 'put ''ZjQ4XHViZjUwXHViZjUxXHViZjU1XHViZjk0XHViZmIwXHViZmM1XHViZmNjXHViZmNkXHViZmQwXHViZmQ0XHViZmRjXHViZmRmXHViZmUxXHVjMDNjXHVjMDUxXHVjMDU4XHVjMDVjXHVjMDYwXHVjMDY4XHVjMDY5XHVjMDkwXHVjMDkxXHVjMDk0XHVjMDk4XHVjMGEwXHVjMGExXHVjMGEz''@;'; put 'put ''XHVjMGE1XHVjMGFjXHVjMGFkXHVjMGFmXHVjMGIwXHVjMGIzXHVjMGI0XHVjMGI1XHVjMGI2XHVjMGJjXHVjMGJkXHVjMGJmXHVjMGMwXHVjMGMxXHVjMGM1XHVjMGM4XHVjMGM5XHVjMGNjXHVjMGQwXHVjMGQ4XHVjMGQ5XHVjMGRiXHVjMGRjXHVjMGRkXHVjMGU0Il0sWyJiYzQxIiwiXHVk''@;'; put 'put ''MzZhIiwxNywiXHVkMzdlXHVkMzdmXHVkMzgxXHVkMzgyXHVkMzgzXHVkMzg1XHVkMzg2XHVkMzg3Il0sWyJiYzYxIiwiXHVkMzg4XHVkMzg5XHVkMzhhXHVkMzhiXHVkMzhlXHVkMzkyIiw1LCJcdWQzOWFcdWQzOWJcdWQzOWRcdWQzOWVcdWQzOWZcdWQzYTEiLDYsIlx1ZDNhYVx1ZDNhY1x1''@;'; put 'put ''ZDNhZSJdLFsiYmM4MSIsIlx1ZDNhZiIsNCwiXHVkM2I1XHVkM2I2XHVkM2I3XHVkM2I5XHVkM2JhXHVkM2JiXHVkM2JkIiw2LCJcdWQzYzZcdWQzYzdcdWQzY2EiLDUsIlx1ZDNkMSIsNSwiXHVjMGU1XHVjMGU4XHVjMGVjXHVjMGY0XHVjMGY1XHVjMGY3XHVjMGY5XHVjMTAwXHVjMTA0XHVj''@;'; put 'put ''MTA4XHVjMTEwXHVjMTE1XHVjMTFjIiw0LCJcdWMxMjNcdWMxMjRcdWMxMjZcdWMxMjdcdWMxMmNcdWMxMmRcdWMxMmZcdWMxMzBcdWMxMzFcdWMxMzZcdWMxMzhcdWMxMzlcdWMxM2NcdWMxNDBcdWMxNDhcdWMxNDlcdWMxNGJcdWMxNGNcdWMxNGRcdWMxNTRcdWMxNTVcdWMxNThcdWMxNWNc''@;'; put 'put ''dWMxNjRcdWMxNjVcdWMxNjdcdWMxNjhcdWMxNjlcdWMxNzBcdWMxNzRcdWMxNzhcdWMxODVcdWMxOGNcdWMxOGRcdWMxOGVcdWMxOTBcdWMxOTRcdWMxOTZcdWMxOWNcdWMxOWRcdWMxOWZcdWMxYTFcdWMxYTVcdWMxYThcdWMxYTlcdWMxYWNcdWMxYjBcdWMxYmRcdWMxYzRcdWMxYzhcdWMx''@;'; put 'put ''Y2NcdWMxZDRcdWMxZDdcdWMxZDhcdWMxZTBcdWMxZTRcdWMxZThcdWMxZjBcdWMxZjFcdWMxZjNcdWMxZmNcdWMxZmRcdWMyMDBcdWMyMDRcdWMyMGNcdWMyMGRcdWMyMGZcdWMyMTFcdWMyMThcdWMyMTlcdWMyMWNcdWMyMWZcdWMyMjBcdWMyMjhcdWMyMjlcdWMyMmJcdWMyMmQiXSxbImJk''@;'; put 'put ''NDEiLCJcdWQzZDdcdWQzZDkiLDcsIlx1ZDNlMlx1ZDNlNCIsNywiXHVkM2VlXHVkM2VmXHVkM2YxXHVkM2YyXHVkM2YzXHVkM2Y1XHVkM2Y2XHVkM2Y3Il0sWyJiZDYxIiwiXHVkM2Y4XHVkM2Y5XHVkM2ZhXHVkM2ZiXHVkM2ZlXHVkNDAwXHVkNDAyIiw1LCJcdWQ0MDkiLDEzXSxbImJkODEi''@;'; put 'put ''LCJcdWQ0MTciLDUsIlx1ZDQxZSIsMjUsIlx1YzIyZlx1YzIzMVx1YzIzMlx1YzIzNFx1YzI0OFx1YzI1MFx1YzI1MVx1YzI1NFx1YzI1OFx1YzI2MFx1YzI2NVx1YzI2Y1x1YzI2ZFx1YzI3MFx1YzI3NFx1YzI3Y1x1YzI3ZFx1YzI3Zlx1YzI4MVx1YzI4OFx1YzI4OVx1YzI5MFx1YzI5OFx1''@;'; put 'put ''YzI5Ylx1YzI5ZFx1YzJhNFx1YzJhNVx1YzJhOFx1YzJhY1x1YzJhZFx1YzJiNFx1YzJiNVx1YzJiN1x1YzJiOVx1YzJkY1x1YzJkZFx1YzJlMFx1YzJlM1x1YzJlNFx1YzJlYlx1YzJlY1x1YzJlZFx1YzJlZlx1YzJmMVx1YzJmNlx1YzJmOFx1YzJmOVx1YzJmYlx1YzJmY1x1YzMwMFx1YzMw''@;'; put 'put ''OFx1YzMwOVx1YzMwY1x1YzMwZFx1YzMxM1x1YzMxNFx1YzMxNVx1YzMxOFx1YzMxY1x1YzMyNFx1YzMyNVx1YzMyOFx1YzMyOVx1YzM0NVx1YzM2OFx1YzM2OVx1YzM2Y1x1YzM3MFx1YzM3Mlx1YzM3OFx1YzM3OVx1YzM3Y1x1YzM3ZFx1YzM4NFx1YzM4OFx1YzM4Y1x1YzNjMFx1YzNkOFx1''@;'; put 'put ''YzNkOVx1YzNkY1x1YzNkZlx1YzNlMFx1YzNlMlx1YzNlOFx1YzNlOVx1YzNlZFx1YzNmNFx1YzNmNVx1YzNmOFx1YzQwOFx1YzQxMFx1YzQyNFx1YzQyY1x1YzQzMCJdLFsiYmU0MSIsIlx1ZDQzOCIsNywiXHVkNDQxXHVkNDQyXHVkNDQzXHVkNDQ1IiwxNF0sWyJiZTYxIiwiXHVkNDU0Iiw3''@;'; put 'put ''LCJcdWQ0NWRcdWQ0NWVcdWQ0NWZcdWQ0NjFcdWQ0NjJcdWQ0NjNcdWQ0NjUiLDcsIlx1ZDQ2ZVx1ZDQ3MFx1ZDQ3MVx1ZDQ3MiJdLFsiYmU4MSIsIlx1ZDQ3MyIsNCwiXHVkNDdhXHVkNDdiXHVkNDdkXHVkNDdlXHVkNDgxXHVkNDgzIiw0LCJcdWQ0OGFcdWQ0OGNcdWQ0OGUiLDUsIlx1ZDQ5''@;'; put 'put ''NSIsOCwiXHVjNDM0XHVjNDNjXHVjNDNkXHVjNDQ4XHVjNDY0XHVjNDY1XHVjNDY4XHVjNDZjXHVjNDc0XHVjNDc1XHVjNDc5XHVjNDgwXHVjNDk0XHVjNDljXHVjNGI4XHVjNGJjXHVjNGU5XHVjNGYwXHVjNGYxXHVjNGY0XHVjNGY4XHVjNGZhXHVjNGZmXHVjNTAwXHVjNTAxXHVjNTBjXHVj''@;'; put 'put ''NTEwXHVjNTE0XHVjNTFjXHVjNTI4XHVjNTI5XHVjNTJjXHVjNTMwXHVjNTM4XHVjNTM5XHVjNTNiXHVjNTNkXHVjNTQ0XHVjNTQ1XHVjNTQ4XHVjNTQ5XHVjNTRhXHVjNTRjXHVjNTRkXHVjNTRlXHVjNTUzXHVjNTU0XHVjNTU1XHVjNTU3XHVjNTU4XHVjNTU5XHVjNTVkXHVjNTVlXHVjNTYw''@;'; put 'put ''XHVjNTYxXHVjNTY0XHVjNTY4XHVjNTcwXHVjNTcxXHVjNTczXHVjNTc0XHVjNTc1XHVjNTdjXHVjNTdkXHVjNTgwXHVjNTg0XHVjNTg3XHVjNThjXHVjNThkXHVjNThmXHVjNTkxXHVjNTk1XHVjNTk3XHVjNTk4XHVjNTljXHVjNWEwXHVjNWE5XHVjNWI0XHVjNWI1XHVjNWI4XHVjNWI5XHVj''@;'; put 'put ''NWJiXHVjNWJjXHVjNWJkXHVjNWJlXHVjNWM0Iiw2LCJcdWM1Y2NcdWM1Y2UiXSxbImJmNDEiLCJcdWQ0OWUiLDEwLCJcdWQ0YWEiLDE0XSxbImJmNjEiLCJcdWQ0YjkiLDE4LCJcdWQ0Y2RcdWQ0Y2VcdWQ0Y2ZcdWQ0ZDFcdWQ0ZDJcdWQ0ZDNcdWQ0ZDUiXSxbImJmODEiLCJcdWQ0ZDYiLDUs''@;'; put 'put ''Ilx1ZDRkZFx1ZDRkZVx1ZDRlMCIsNywiXHVkNGU5XHVkNGVhXHVkNGViXHVkNGVkXHVkNGVlXHVkNGVmXHVkNGYxIiw2LCJcdWQ0ZjlcdWQ0ZmFcdWQ0ZmNcdWM1ZDBcdWM1ZDFcdWM1ZDRcdWM1ZDhcdWM1ZTBcdWM1ZTFcdWM1ZTNcdWM1ZTVcdWM1ZWNcdWM1ZWRcdWM1ZWVcdWM1ZjBcdWM1''@;'; put 'put ''ZjRcdWM1ZjZcdWM1ZjdcdWM1ZmMiLDUsIlx1YzYwNVx1YzYwNlx1YzYwN1x1YzYwOFx1YzYwY1x1YzYxMFx1YzYxOFx1YzYxOVx1YzYxYlx1YzYxY1x1YzYyNFx1YzYyNVx1YzYyOFx1YzYyY1x1YzYyZFx1YzYyZVx1YzYzMFx1YzYzM1x1YzYzNFx1YzYzNVx1YzYzN1x1YzYzOVx1YzYzYlx1''@;'; put 'put ''YzY0MFx1YzY0MVx1YzY0NFx1YzY0OFx1YzY1MFx1YzY1MVx1YzY1M1x1YzY1NFx1YzY1NVx1YzY1Y1x1YzY1ZFx1YzY2MFx1YzY2Y1x1YzY2Zlx1YzY3MVx1YzY3OFx1YzY3OVx1YzY3Y1x1YzY4MFx1YzY4OFx1YzY4OVx1YzY4Ylx1YzY4ZFx1YzY5NFx1YzY5NVx1YzY5OFx1YzY5Y1x1YzZh''@;'; put 'put ''NFx1YzZhNVx1YzZhN1x1YzZhOVx1YzZiMFx1YzZiMVx1YzZiNFx1YzZiOFx1YzZiOVx1YzZiYVx1YzZjMFx1YzZjMVx1YzZjM1x1YzZjNVx1YzZjY1x1YzZjZFx1YzZkMFx1YzZkNFx1YzZkY1x1YzZkZFx1YzZlMFx1YzZlMVx1YzZlOCJdLFsiYzA0MSIsIlx1ZDRmZSIsNSwiXHVkNTA1XHVk''@;'; put 'put ''NTA2XHVkNTA3XHVkNTA5XHVkNTBhXHVkNTBiXHVkNTBkIiw2LCJcdWQ1MTZcdWQ1MTgiLDVdLFsiYzA2MSIsIlx1ZDUxZSIsMjVdLFsiYzA4MSIsIlx1ZDUzOFx1ZDUzOVx1ZDUzYVx1ZDUzYlx1ZDUzZVx1ZDUzZlx1ZDU0MVx1ZDU0Mlx1ZDU0M1x1ZDU0NSIsNiwiXHVkNTRlXHVkNTUwXHVk''@;'; put 'put ''NTUyIiw1LCJcdWQ1NWFcdWQ1NWJcdWQ1NWRcdWQ1NWVcdWQ1NWZcdWQ1NjFcdWQ1NjJcdWQ1NjNcdWM2ZTlcdWM2ZWNcdWM2ZjBcdWM2ZjhcdWM2ZjlcdWM2ZmRcdWM3MDRcdWM3MDVcdWM3MDhcdWM3MGNcdWM3MTRcdWM3MTVcdWM3MTdcdWM3MTlcdWM3MjBcdWM3MjFcdWM3MjRcdWM3Mjhc''@;'; put 'put ''dWM3MzBcdWM3MzFcdWM3MzNcdWM3MzVcdWM3MzdcdWM3M2NcdWM3M2RcdWM3NDBcdWM3NDRcdWM3NGFcdWM3NGNcdWM3NGRcdWM3NGZcdWM3NTEiLDcsIlx1Yzc1Y1x1Yzc2MFx1Yzc2OFx1Yzc2Ylx1Yzc3NFx1Yzc3NVx1Yzc3OFx1Yzc3Y1x1Yzc3ZFx1Yzc3ZVx1Yzc4M1x1Yzc4NFx1Yzc4''@;'; put 'put ''NVx1Yzc4N1x1Yzc4OFx1Yzc4OVx1Yzc4YVx1Yzc4ZVx1Yzc5MFx1Yzc5MVx1Yzc5NFx1Yzc5Nlx1Yzc5N1x1Yzc5OFx1Yzc5YVx1YzdhMFx1YzdhMVx1YzdhM1x1YzdhNFx1YzdhNVx1YzdhNlx1YzdhY1x1YzdhZFx1YzdiMFx1YzdiNFx1YzdiY1x1YzdiZFx1YzdiZlx1YzdjMFx1YzdjMVx1''@;'; put 'put ''YzdjOFx1YzdjOVx1YzdjY1x1YzdjZVx1YzdkMFx1YzdkOFx1YzdkZFx1YzdlNFx1YzdlOFx1YzdlY1x1YzgwMFx1YzgwMVx1YzgwNFx1YzgwOFx1YzgwYSJdLFsiYzE0MSIsIlx1ZDU2NFx1ZDU2Nlx1ZDU2N1x1ZDU2YVx1ZDU2Y1x1ZDU2ZSIsNSwiXHVkNTc2XHVkNTc3XHVkNTc5XHVkNTdh''@;'; put 'put ''XHVkNTdiXHVkNTdkIiw2LCJcdWQ1ODZcdWQ1OGFcdWQ1OGIiXSxbImMxNjEiLCJcdWQ1OGNcdWQ1OGRcdWQ1OGVcdWQ1OGZcdWQ1OTEiLDE5LCJcdWQ1YTZcdWQ1YTciXSxbImMxODEiLCJcdWQ1YTgiLDMxLCJcdWM4MTBcdWM4MTFcdWM4MTNcdWM4MTVcdWM4MTZcdWM4MWNcdWM4MWRcdWM4''@;'; put 'put ''MjBcdWM4MjRcdWM4MmNcdWM4MmRcdWM4MmZcdWM4MzFcdWM4MzhcdWM4M2NcdWM4NDBcdWM4NDhcdWM4NDlcdWM4NGNcdWM4NGRcdWM4NTRcdWM4NzBcdWM4NzFcdWM4NzRcdWM4NzhcdWM4N2FcdWM4ODBcdWM4ODFcdWM4ODNcdWM4ODVcdWM4ODZcdWM4ODdcdWM4OGJcdWM4OGNcdWM4OGRc''@;'; put 'put ''dWM4OTRcdWM4OWRcdWM4OWZcdWM4YTFcdWM4YThcdWM4YmNcdWM4YmRcdWM4YzRcdWM4YzhcdWM4Y2NcdWM4ZDRcdWM4ZDVcdWM4ZDdcdWM4ZDlcdWM4ZTBcdWM4ZTFcdWM4ZTRcdWM4ZjVcdWM4ZmNcdWM4ZmRcdWM5MDBcdWM5MDRcdWM5MDVcdWM5MDZcdWM5MGNcdWM5MGRcdWM5MGZcdWM5''@;'; put 'put ''MTFcdWM5MThcdWM5MmNcdWM5MzRcdWM5NTBcdWM5NTFcdWM5NTRcdWM5NThcdWM5NjBcdWM5NjFcdWM5NjNcdWM5NmNcdWM5NzBcdWM5NzRcdWM5N2NcdWM5ODhcdWM5ODlcdWM5OGNcdWM5OTBcdWM5OThcdWM5OTlcdWM5OWJcdWM5OWRcdWM5YzBcdWM5YzFcdWM5YzRcdWM5YzdcdWM5Yzhc''@;'; put 'put ''dWM5Y2FcdWM5ZDBcdWM5ZDFcdWM5ZDMiXSxbImMyNDEiLCJcdWQ1Y2FcdWQ1Y2JcdWQ1Y2RcdWQ1Y2VcdWQ1Y2ZcdWQ1ZDFcdWQ1ZDMiLDQsIlx1ZDVkYVx1ZDVkY1x1ZDVkZSIsNSwiXHVkNWU2XHVkNWU3XHVkNWU5XHVkNWVhXHVkNWViXHVkNWVkXHVkNWVlIl0sWyJjMjYxIiwiXHVkNWVm''@;'; put 'put ''Iiw0LCJcdWQ1ZjZcdWQ1ZjhcdWQ1ZmEiLDUsIlx1ZDYwMlx1ZDYwM1x1ZDYwNVx1ZDYwNlx1ZDYwN1x1ZDYwOSIsNiwiXHVkNjEyIl0sWyJjMjgxIiwiXHVkNjE2Iiw1LCJcdWQ2MWRcdWQ2MWVcdWQ2MWZcdWQ2MjFcdWQ2MjJcdWQ2MjNcdWQ2MjUiLDcsIlx1ZDYyZSIsOSwiXHVkNjNhXHVk''@;'; put 'put ''NjNiXHVjOWQ1XHVjOWQ2XHVjOWQ5XHVjOWRhXHVjOWRjXHVjOWRkXHVjOWUwXHVjOWUyXHVjOWU0XHVjOWU3XHVjOWVjXHVjOWVkXHVjOWVmXHVjOWYwXHVjOWYxXHVjOWY4XHVjOWY5XHVjOWZjXHVjYTAwXHVjYTA4XHVjYTA5XHVjYTBiXHVjYTBjXHVjYTBkXHVjYTE0XHVjYTE4XHVjYTI5''@;'; put 'put ''XHVjYTRjXHVjYTRkXHVjYTUwXHVjYTU0XHVjYTVjXHVjYTVkXHVjYTVmXHVjYTYwXHVjYTYxXHVjYTY4XHVjYTdkXHVjYTg0XHVjYTk4XHVjYWJjXHVjYWJkXHVjYWMwXHVjYWM0XHVjYWNjXHVjYWNkXHVjYWNmXHVjYWQxXHVjYWQzXHVjYWQ4XHVjYWQ5XHVjYWUwXHVjYWVjXHVjYWY0XHVj''@;'; put 'put ''YjA4XHVjYjEwXHVjYjE0XHVjYjE4XHVjYjIwXHVjYjIxXHVjYjQxXHVjYjQ4XHVjYjQ5XHVjYjRjXHVjYjUwXHVjYjU4XHVjYjU5XHVjYjVkXHVjYjY0XHVjYjc4XHVjYjc5XHVjYjljXHVjYmI4XHVjYmQ0XHVjYmU0XHVjYmU3XHVjYmU5XHVjYzBjXHVjYzBkXHVjYzEwXHVjYzE0XHVjYzFj''@;'; put 'put ''XHVjYzFkXHVjYzIxXHVjYzIyXHVjYzI3XHVjYzI4XHVjYzI5XHVjYzJjXHVjYzJlXHVjYzMwXHVjYzM4XHVjYzM5XHVjYzNiIl0sWyJjMzQxIiwiXHVkNjNkXHVkNjNlXHVkNjNmXHVkNjQxXHVkNjQyXHVkNjQzXHVkNjQ0XHVkNjQ2XHVkNjQ3XHVkNjRhXHVkNjRjXHVkNjRlXHVkNjRmXHVk''@;'; put 'put ''NjUwXHVkNjUyXHVkNjUzXHVkNjU2XHVkNjU3XHVkNjU5XHVkNjVhXHVkNjViXHVkNjVkIiw0XSxbImMzNjEiLCJcdWQ2NjIiLDQsIlx1ZDY2OFx1ZDY2YSIsNSwiXHVkNjcyXHVkNjczXHVkNjc1IiwxMV0sWyJjMzgxIiwiXHVkNjgxXHVkNjgyXHVkNjg0XHVkNjg2Iiw1LCJcdWQ2OGVcdWQ2''@;'; put 'put ''OGZcdWQ2OTFcdWQ2OTJcdWQ2OTNcdWQ2OTUiLDcsIlx1ZDY5ZVx1ZDZhMFx1ZDZhMiIsNSwiXHVkNmE5XHVkNmFhXHVjYzNjXHVjYzNkXHVjYzNlXHVjYzQ0XHVjYzQ1XHVjYzQ4XHVjYzRjXHVjYzU0XHVjYzU1XHVjYzU3XHVjYzU4XHVjYzU5XHVjYzYwXHVjYzY0XHVjYzY2XHVjYzY4XHVj''@;'; put 'put ''YzcwXHVjYzc1XHVjYzk4XHVjYzk5XHVjYzljXHVjY2EwXHVjY2E4XHVjY2E5XHVjY2FiXHVjY2FjXHVjY2FkXHVjY2I0XHVjY2I1XHVjY2I4XHVjY2JjXHVjY2M0XHVjY2M1XHVjY2M3XHVjY2M5XHVjY2QwXHVjY2Q0XHVjY2U0XHVjY2VjXHVjY2YwXHVjZDAxXHVjZDA4XHVjZDA5XHVjZDBj''@;'; put 'put ''XHVjZDEwXHVjZDE4XHVjZDE5XHVjZDFiXHVjZDFkXHVjZDI0XHVjZDI4XHVjZDJjXHVjZDM5XHVjZDVjXHVjZDYwXHVjZDY0XHVjZDZjXHVjZDZkXHVjZDZmXHVjZDcxXHVjZDc4XHVjZDg4XHVjZDk0XHVjZDk1XHVjZDk4XHVjZDljXHVjZGE0XHVjZGE1XHVjZGE3XHVjZGE5XHVjZGIwXHVj''@;'; put 'put ''ZGM0XHVjZGNjXHVjZGQwXHVjZGU4XHVjZGVjXHVjZGYwXHVjZGY4XHVjZGY5XHVjZGZiXHVjZGZkXHVjZTA0XHVjZTA4XHVjZTBjXHVjZTE0XHVjZTE5XHVjZTIwXHVjZTIxXHVjZTI0XHVjZTI4XHVjZTMwXHVjZTMxXHVjZTMzXHVjZTM1Il0sWyJjNDQxIiwiXHVkNmFiXHVkNmFkXHVkNmFl''@;'; put 'put ''XHVkNmFmXHVkNmIxIiw3LCJcdWQ2YmFcdWQ2YmMiLDcsIlx1ZDZjNlx1ZDZjN1x1ZDZjOVx1ZDZjYVx1ZDZjYiJdLFsiYzQ2MSIsIlx1ZDZjZFx1ZDZjZVx1ZDZjZlx1ZDZkMFx1ZDZkMlx1ZDZkM1x1ZDZkNVx1ZDZkNlx1ZDZkOFx1ZDZkYSIsNSwiXHVkNmUxXHVkNmUyXHVkNmUzXHVkNmU1''@;'; put 'put ''XHVkNmU2XHVkNmU3XHVkNmU5Iiw0XSxbImM0ODEiLCJcdWQ2ZWVcdWQ2ZWZcdWQ2ZjFcdWQ2ZjJcdWQ2ZjNcdWQ2ZjRcdWQ2ZjYiLDUsIlx1ZDZmZVx1ZDZmZlx1ZDcwMVx1ZDcwMlx1ZDcwM1x1ZDcwNSIsMTEsIlx1ZDcxMlx1ZDcxM1x1ZDcxNFx1Y2U1OFx1Y2U1OVx1Y2U1Y1x1Y2U1Zlx1''@;'; put 'put ''Y2U2MFx1Y2U2MVx1Y2U2OFx1Y2U2OVx1Y2U2Ylx1Y2U2ZFx1Y2U3NFx1Y2U3NVx1Y2U3OFx1Y2U3Y1x1Y2U4NFx1Y2U4NVx1Y2U4N1x1Y2U4OVx1Y2U5MFx1Y2U5MVx1Y2U5NFx1Y2U5OFx1Y2VhMFx1Y2VhMVx1Y2VhM1x1Y2VhNFx1Y2VhNVx1Y2VhY1x1Y2VhZFx1Y2VjMVx1Y2VlNFx1Y2Vl''@;'; put 'put ''NVx1Y2VlOFx1Y2VlYlx1Y2VlY1x1Y2VmNFx1Y2VmNVx1Y2VmN1x1Y2VmOFx1Y2VmOVx1Y2YwMFx1Y2YwMVx1Y2YwNFx1Y2YwOFx1Y2YxMFx1Y2YxMVx1Y2YxM1x1Y2YxNVx1Y2YxY1x1Y2YyMFx1Y2YyNFx1Y2YyY1x1Y2YyZFx1Y2YyZlx1Y2YzMFx1Y2YzMVx1Y2YzOFx1Y2Y1NFx1Y2Y1NVx1''@;'; put 'put ''Y2Y1OFx1Y2Y1Y1x1Y2Y2NFx1Y2Y2NVx1Y2Y2N1x1Y2Y2OVx1Y2Y3MFx1Y2Y3MVx1Y2Y3NFx1Y2Y3OFx1Y2Y4MFx1Y2Y4NVx1Y2Y4Y1x1Y2ZhMVx1Y2ZhOFx1Y2ZiMFx1Y2ZjNFx1Y2ZlMFx1Y2ZlMVx1Y2ZlNFx1Y2ZlOFx1Y2ZmMFx1Y2ZmMVx1Y2ZmM1x1Y2ZmNVx1Y2ZmY1x1ZDAwMFx1ZDAw''@;'; put 'put ''NFx1ZDAxMVx1ZDAxOFx1ZDAyZFx1ZDAzNFx1ZDAzNVx1ZDAzOFx1ZDAzYyJdLFsiYzU0MSIsIlx1ZDcxNVx1ZDcxNlx1ZDcxN1x1ZDcxYVx1ZDcxYlx1ZDcxZFx1ZDcxZVx1ZDcxZlx1ZDcyMSIsNiwiXHVkNzJhXHVkNzJjXHVkNzJlIiw1LCJcdWQ3MzZcdWQ3MzdcdWQ3MzkiXSxbImM1NjEi''@;'; put 'put ''LCJcdWQ3M2FcdWQ3M2JcdWQ3M2QiLDYsIlx1ZDc0NVx1ZDc0Nlx1ZDc0OFx1ZDc0YSIsNSwiXHVkNzUyXHVkNzUzXHVkNzU1XHVkNzVhIiw0XSxbImM1ODEiLCJcdWQ3NWZcdWQ3NjJcdWQ3NjRcdWQ3NjZcdWQ3NjdcdWQ3NjhcdWQ3NmFcdWQ3NmJcdWQ3NmRcdWQ3NmVcdWQ3NmZcdWQ3NzFc''@;'; put 'put ''dWQ3NzJcdWQ3NzNcdWQ3NzUiLDYsIlx1ZDc3ZVx1ZDc3Zlx1ZDc4MFx1ZDc4MiIsNSwiXHVkNzhhXHVkNzhiXHVkMDQ0XHVkMDQ1XHVkMDQ3XHVkMDQ5XHVkMDUwXHVkMDU0XHVkMDU4XHVkMDYwXHVkMDZjXHVkMDZkXHVkMDcwXHVkMDc0XHVkMDdjXHVkMDdkXHVkMDgxXHVkMGE0XHVkMGE1''@;'; put 'put ''XHVkMGE4XHVkMGFjXHVkMGI0XHVkMGI1XHVkMGI3XHVkMGI5XHVkMGMwXHVkMGMxXHVkMGM0XHVkMGM4XHVkMGM5XHVkMGQwXHVkMGQxXHVkMGQzXHVkMGQ0XHVkMGQ1XHVkMGRjXHVkMGRkXHVkMGUwXHVkMGU0XHVkMGVjXHVkMGVkXHVkMGVmXHVkMGYwXHVkMGYxXHVkMGY4XHVkMTBkXHVk''@;'; put 'put ''MTMwXHVkMTMxXHVkMTM0XHVkMTM4XHVkMTNhXHVkMTQwXHVkMTQxXHVkMTQzXHVkMTQ0XHVkMTQ1XHVkMTRjXHVkMTRkXHVkMTUwXHVkMTU0XHVkMTVjXHVkMTVkXHVkMTVmXHVkMTYxXHVkMTY4XHVkMTZjXHVkMTdjXHVkMTg0XHVkMTg4XHVkMWEwXHVkMWExXHVkMWE0XHVkMWE4XHVkMWIw''@;'; put 'put ''XHVkMWIxXHVkMWIzXHVkMWI1XHVkMWJhXHVkMWJjXHVkMWMwXHVkMWQ4XHVkMWY0XHVkMWY4XHVkMjA3XHVkMjA5XHVkMjEwXHVkMjJjXHVkMjJkXHVkMjMwXHVkMjM0XHVkMjNjXHVkMjNkXHVkMjNmXHVkMjQxXHVkMjQ4XHVkMjVjIl0sWyJjNjQxIiwiXHVkNzhkXHVkNzhlXHVkNzhmXHVk''@;'; put 'put ''NzkxIiw2LCJcdWQ3OWFcdWQ3OWNcdWQ3OWUiLDVdLFsiYzZhMSIsIlx1ZDI2NFx1ZDI4MFx1ZDI4MVx1ZDI4NFx1ZDI4OFx1ZDI5MFx1ZDI5MVx1ZDI5NVx1ZDI5Y1x1ZDJhMFx1ZDJhNFx1ZDJhY1x1ZDJiMVx1ZDJiOFx1ZDJiOVx1ZDJiY1x1ZDJiZlx1ZDJjMFx1ZDJjMlx1ZDJjOFx1ZDJj''@;'; put 'put ''OVx1ZDJjYlx1ZDJkNFx1ZDJkOFx1ZDJkY1x1ZDJlNFx1ZDJlNVx1ZDJmMFx1ZDJmMVx1ZDJmNFx1ZDJmOFx1ZDMwMFx1ZDMwMVx1ZDMwM1x1ZDMwNVx1ZDMwY1x1ZDMwZFx1ZDMwZVx1ZDMxMFx1ZDMxNFx1ZDMxNlx1ZDMxY1x1ZDMxZFx1ZDMxZlx1ZDMyMFx1ZDMyMVx1ZDMyNVx1ZDMyOFx1''@;'; put 'put ''ZDMyOVx1ZDMyY1x1ZDMzMFx1ZDMzOFx1ZDMzOVx1ZDMzYlx1ZDMzY1x1ZDMzZFx1ZDM0NFx1ZDM0NVx1ZDM3Y1x1ZDM3ZFx1ZDM4MFx1ZDM4NFx1ZDM4Y1x1ZDM4ZFx1ZDM4Zlx1ZDM5MFx1ZDM5MVx1ZDM5OFx1ZDM5OVx1ZDM5Y1x1ZDNhMFx1ZDNhOFx1ZDNhOVx1ZDNhYlx1ZDNhZFx1ZDNi''@;'; put 'put ''NFx1ZDNiOFx1ZDNiY1x1ZDNjNFx1ZDNjNVx1ZDNjOFx1ZDNjOVx1ZDNkMFx1ZDNkOFx1ZDNlMVx1ZDNlM1x1ZDNlY1x1ZDNlZFx1ZDNmMFx1ZDNmNFx1ZDNmY1x1ZDNmZFx1ZDNmZlx1ZDQwMSJdLFsiYzdhMSIsIlx1ZDQwOFx1ZDQxZFx1ZDQ0MFx1ZDQ0NFx1ZDQ1Y1x1ZDQ2MFx1ZDQ2NFx1''@;'; put 'put ''ZDQ2ZFx1ZDQ2Zlx1ZDQ3OFx1ZDQ3OVx1ZDQ3Y1x1ZDQ3Zlx1ZDQ4MFx1ZDQ4Mlx1ZDQ4OFx1ZDQ4OVx1ZDQ4Ylx1ZDQ4ZFx1ZDQ5NFx1ZDRhOVx1ZDRjY1x1ZDRkMFx1ZDRkNFx1ZDRkY1x1ZDRkZlx1ZDRlOFx1ZDRlY1x1ZDRmMFx1ZDRmOFx1ZDRmYlx1ZDRmZFx1ZDUwNFx1ZDUwOFx1ZDUw''@;'; put 'put ''Y1x1ZDUxNFx1ZDUxNVx1ZDUxN1x1ZDUzY1x1ZDUzZFx1ZDU0MFx1ZDU0NFx1ZDU0Y1x1ZDU0ZFx1ZDU0Zlx1ZDU1MVx1ZDU1OFx1ZDU1OVx1ZDU1Y1x1ZDU2MFx1ZDU2NVx1ZDU2OFx1ZDU2OVx1ZDU2Ylx1ZDU2ZFx1ZDU3NFx1ZDU3NVx1ZDU3OFx1ZDU3Y1x1ZDU4NFx1ZDU4NVx1ZDU4N1x1''@;'; put 'put ''ZDU4OFx1ZDU4OVx1ZDU5MFx1ZDVhNVx1ZDVjOFx1ZDVjOVx1ZDVjY1x1ZDVkMFx1ZDVkMlx1ZDVkOFx1ZDVkOVx1ZDVkYlx1ZDVkZFx1ZDVlNFx1ZDVlNVx1ZDVlOFx1ZDVlY1x1ZDVmNFx1ZDVmNVx1ZDVmN1x1ZDVmOVx1ZDYwMFx1ZDYwMVx1ZDYwNFx1ZDYwOFx1ZDYxMFx1ZDYxMVx1ZDYx''@;'; put 'put ''M1x1ZDYxNFx1ZDYxNVx1ZDYxY1x1ZDYyMCJdLFsiYzhhMSIsIlx1ZDYyNFx1ZDYyZFx1ZDYzOFx1ZDYzOVx1ZDYzY1x1ZDY0MFx1ZDY0NVx1ZDY0OFx1ZDY0OVx1ZDY0Ylx1ZDY0ZFx1ZDY1MVx1ZDY1NFx1ZDY1NVx1ZDY1OFx1ZDY1Y1x1ZDY2N1x1ZDY2OVx1ZDY3MFx1ZDY3MVx1ZDY3NFx1''@;'; put 'put ''ZDY4M1x1ZDY4NVx1ZDY4Y1x1ZDY4ZFx1ZDY5MFx1ZDY5NFx1ZDY5ZFx1ZDY5Zlx1ZDZhMVx1ZDZhOFx1ZDZhY1x1ZDZiMFx1ZDZiOVx1ZDZiYlx1ZDZjNFx1ZDZjNVx1ZDZjOFx1ZDZjY1x1ZDZkMVx1ZDZkNFx1ZDZkN1x1ZDZkOVx1ZDZlMFx1ZDZlNFx1ZDZlOFx1ZDZmMFx1ZDZmNVx1ZDZm''@;'; put 'put ''Y1x1ZDZmZFx1ZDcwMFx1ZDcwNFx1ZDcxMVx1ZDcxOFx1ZDcxOVx1ZDcxY1x1ZDcyMFx1ZDcyOFx1ZDcyOVx1ZDcyYlx1ZDcyZFx1ZDczNFx1ZDczNVx1ZDczOFx1ZDczY1x1ZDc0NFx1ZDc0N1x1ZDc0OVx1ZDc1MFx1ZDc1MVx1ZDc1NFx1ZDc1Nlx1ZDc1N1x1ZDc1OFx1ZDc1OVx1ZDc2MFx1''@;'; put 'put ''ZDc2MVx1ZDc2M1x1ZDc2NVx1ZDc2OVx1ZDc2Y1x1ZDc3MFx1ZDc3NFx1ZDc3Y1x1ZDc3ZFx1ZDc4MVx1ZDc4OFx1ZDc4OVx1ZDc4Y1x1ZDc5MFx1ZDc5OFx1ZDc5OVx1ZDc5Ylx1ZDc5ZCJdLFsiY2FhMSIsIlx1NGYzZFx1NGY3M1x1NTA0N1x1NTBmOVx1NTJhMFx1NTNlZlx1NTQ3NVx1NTRl''@;'; put 'put ''NVx1NTYwOVx1NWFjMVx1NWJiNlx1NjY4N1x1NjdiNlx1NjdiN1x1NjdlZlx1NmI0Y1x1NzNjMlx1NzVjMlx1N2EzY1x1ODJkYlx1ODMwNFx1ODg1N1x1ODg4OFx1OGEzNlx1OGNjOFx1OGRjZlx1OGVmYlx1OGZlNlx1OTlkNVx1NTIzYlx1NTM3NFx1NTQwNFx1NjA2YVx1NjE2NFx1NmJiY1x1''@;'; put 'put ''NzNjZlx1ODExYVx1ODliYVx1ODlkMlx1OTVhM1x1NGY4M1x1NTIwYVx1NThiZVx1NTk3OFx1NTllNlx1NWU3Mlx1NWU3OVx1NjFjN1x1NjNjMFx1Njc0Nlx1NjdlY1x1Njg3Zlx1NmY5N1x1NzY0ZVx1NzcwYlx1NzhmNVx1N2EwOFx1N2FmZlx1N2MyMVx1ODA5ZFx1ODI2ZVx1ODI3MVx1OGFl''@;'; put 'put ''Ylx1OTU5M1x1NGU2Ylx1NTU5ZFx1NjZmN1x1NmUzNFx1NzhhM1x1N2FlZFx1ODQ1Ylx1ODkxMFx1ODc0ZVx1OTdhOFx1NTJkOFx1NTc0ZVx1NTgyYVx1NWQ0Y1x1NjExZlx1NjFiZVx1NjIyMVx1NjU2Mlx1NjdkMVx1NmE0NFx1NmUxYlx1NzUxOFx1NzViM1x1NzZlM1x1NzdiMFx1N2QzYVx1''@;'; put 'put ''OTBhZlx1OTQ1MVx1OTQ1Mlx1OWY5NSJdLFsiY2JhMSIsIlx1NTMyM1x1NWNhY1x1NzUzMlx1ODBkYlx1OTI0MFx1OTU5OFx1NTI1Ylx1NTgwOFx1NTlkY1x1NWNhMVx1NWQxN1x1NWViN1x1NWYzYVx1NWY0YVx1NjE3N1x1NmM1Zlx1NzU3YVx1NzU4Nlx1N2NlMFx1N2Q3M1x1N2RiMVx1N2Y4''@;'; put 'put ''Y1x1ODE1NFx1ODIyMVx1ODU5MVx1ODk0MVx1OGIxYlx1OTJmY1x1OTY0ZFx1OWM0N1x1NGVjYlx1NGVmN1x1NTAwYlx1NTFmMVx1NTg0Zlx1NjEzN1x1NjEzZVx1NjE2OFx1NjUzOVx1NjllYVx1NmYxMVx1NzVhNVx1NzY4Nlx1NzZkNlx1N2I4N1x1ODJhNVx1ODRjYlx1ZjkwMFx1OTNhN1x1''@;'; put 'put ''OTU4Ylx1NTU4MFx1NWJhMlx1NTc1MVx1ZjkwMVx1N2NiM1x1N2ZiOVx1OTFiNVx1NTAyOFx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjM2ZVx1NjRkYVx1NjRlN1x1NmUyMFx1NzBhY1x1Nzk1Ylx1OGRkZFx1OGUxZVx1ZjkwMlx1OTA3ZFx1OTI0NVx1OTJmOFx1NGU3ZVx1NGVmNlx1NTA2''@;'; put 'put ''NVx1NWRmZVx1NWVmYVx1NjEwNlx1Njk1N1x1ODE3MVx1ODY1NFx1OGU0N1x1OTM3NVx1OWEyYlx1NGU1ZVx1NTA5MVx1Njc3MFx1Njg0MFx1NTEwOVx1NTI4ZFx1NTI5Mlx1NmFhMiJdLFsiY2NhMSIsIlx1NzdiY1x1OTIxMFx1OWVkNFx1NTJhYlx1NjAyZlx1OGZmMlx1NTA0OFx1NjFhOVx1''@;'; put 'put ''NjNlZFx1NjRjYVx1NjgzY1x1NmE4NFx1NmZjMFx1ODE4OFx1ODlhMVx1OTY5NFx1NTgwNVx1NzI3ZFx1NzJhY1x1NzUwNFx1N2Q3OVx1N2U2ZFx1ODBhOVx1ODk4Ylx1OGI3NFx1OTA2M1x1OWQ1MVx1NjI4OVx1NmM3YVx1NmY1NFx1N2Q1MFx1N2YzYVx1OGEyM1x1NTE3Y1x1NjE0YVx1N2I5''@;'; put 'put ''ZFx1OGIxOVx1OTI1N1x1OTM4Y1x1NGVhY1x1NGZkM1x1NTAxZVx1NTBiZVx1NTEwNlx1NTJjMVx1NTJjZFx1NTM3Zlx1NTc3MFx1NTg4M1x1NWU5YVx1NWY5MVx1NjE3Nlx1NjFhY1x1NjRjZVx1NjU2Y1x1NjY2Zlx1NjZiYlx1NjZmNFx1Njg5N1x1NmQ4N1x1NzA4NVx1NzBmMVx1NzQ5Zlx1''@;'; put 'put ''NzRhNVx1NzRjYVx1NzVkOVx1Nzg2Y1x1NzhlY1x1N2FkZlx1N2FmNlx1N2Q0NVx1N2Q5M1x1ODAxNVx1ODAzZlx1ODExYlx1ODM5Nlx1OGI2Nlx1OGYxNVx1OTAxNVx1OTNlMVx1OTgwM1x1OTgzOFx1OWE1YVx1OWJlOFx1NGZjMlx1NTU1M1x1NTgzYVx1NTk1MVx1NWI2M1x1NWM0Nlx1NjBi''@;'; put 'put ''OFx1NjIxMlx1Njg0Mlx1NjhiMCJdLFsiY2RhMSIsIlx1NjhlOFx1NmVhYVx1NzU0Y1x1NzY3OFx1NzhjZVx1N2EzZFx1N2NmYlx1N2U2Ylx1N2U3Y1x1OGEwOFx1OGFhMVx1OGMzZlx1OTY4ZVx1OWRjNFx1NTNlNFx1NTNlOVx1NTQ0YVx1NTQ3MVx1NTZmYVx1NTlkMVx1NWI2NFx1NWMzYlx1''@;'; put 'put ''NWVhYlx1NjJmN1x1NjUzN1x1NjU0NVx1NjU3Mlx1NjZhMFx1NjdhZlx1NjljMVx1NmNiZFx1NzVmY1x1NzY5MFx1Nzc3ZVx1N2EzZlx1N2Y5NFx1ODAwM1x1ODBhMVx1ODE4Zlx1ODJlNlx1ODJmZFx1ODNmMFx1ODVjMVx1ODgzMVx1ODhiNFx1OGFhNVx1ZjkwM1x1OGY5Y1x1OTMyZVx1OTZj''@;'; put 'put ''N1x1OTg2N1x1OWFkOFx1OWYxM1x1NTRlZFx1NjU5Ylx1NjZmMlx1Njg4Zlx1N2E0MFx1OGMzN1x1OWQ2MFx1NTZmMFx1NTc2NFx1NWQxMVx1NjYwNlx1NjhiMVx1NjhjZFx1NmVmZVx1NzQyOFx1ODg5ZVx1OWJlNFx1NmM2OFx1ZjkwNFx1OWFhOFx1NGY5Ylx1NTE2Y1x1NTE3MVx1NTI5Zlx1''@;'; put 'put ''NWI1NFx1NWRlNVx1NjA1MFx1NjA2ZFx1NjJmMVx1NjNhN1x1NjUzYlx1NzNkOVx1N2E3YVx1ODZhM1x1OGNhMlx1OTc4Zlx1NGUzMlx1NWJlMVx1NjIwOFx1Njc5Y1x1NzRkYyJdLFsiY2VhMSIsIlx1NzlkMVx1ODNkM1x1OGE4N1x1OGFiMlx1OGRlOFx1OTA0ZVx1OTM0Ylx1OTg0Nlx1NWVk''@;'; put 'put ''M1x1NjllOFx1ODVmZlx1OTBlZFx1ZjkwNVx1NTFhMFx1NWI5OFx1NWJlY1x1NjE2M1x1NjhmYVx1NmIzZVx1NzA0Y1x1NzQyZlx1NzRkOFx1N2JhMVx1N2Y1MFx1ODNjNVx1ODljMFx1OGNhYlx1OTVkY1x1OTkyOFx1NTIyZVx1NjA1ZFx1NjJlY1x1OTAwMlx1NGY4YVx1NTE0OVx1NTMyMVx1''@;'; put 'put ''NThkOVx1NWVlM1x1NjZlMFx1NmQzOFx1NzA5YVx1NzJjMlx1NzNkNlx1N2I1MFx1ODBmMVx1OTQ1Ylx1NTM2Nlx1NjM5Ylx1N2Y2Ylx1NGU1Nlx1NTA4MFx1NTg0YVx1NThkZVx1NjAyYVx1NjEyN1x1NjJkMFx1NjlkMFx1OWI0MVx1NWI4Zlx1N2QxOFx1ODBiMVx1OGY1Zlx1NGVhNFx1NTBk''@;'; put 'put ''MVx1NTRhY1x1NTVhY1x1NWIwY1x1NWRhMFx1NWRlN1x1NjUyYVx1NjU0ZVx1NjgyMVx1NmE0Ylx1NzJlMVx1NzY4ZVx1NzdlZlx1N2Q1ZVx1N2ZmOVx1ODFhMFx1ODU0ZVx1ODZkZlx1OGYwM1x1OGY0ZVx1OTBjYVx1OTkwM1x1OWE1NVx1OWJhYlx1NGUxOFx1NGU0NVx1NGU1ZFx1NGVjN1x1''@;'; put 'put ''NGZmMVx1NTE3N1x1NTJmZSJdLFsiY2ZhMSIsIlx1NTM0MFx1NTNlM1x1NTNlNVx1NTQ4ZVx1NTYxNFx1NTc3NVx1NTdhMlx1NWJjN1x1NWQ4N1x1NWVkMFx1NjFmY1x1NjJkOFx1NjU1MVx1NjdiOFx1NjdlOVx1NjljYlx1NmI1MFx1NmJjNlx1NmJlY1x1NmM0Mlx1NmU5ZFx1NzA3OFx1NzJk''@;'; put 'put ''N1x1NzM5Nlx1NzQwM1x1NzdiZlx1NzdlOVx1N2E3Nlx1N2Q3Zlx1ODAwOVx1ODFmY1x1ODIwNVx1ODIwYVx1ODJkZlx1ODg2Mlx1OGIzM1x1OGNmY1x1OGVjMFx1OTAxMVx1OTBiMVx1OTI2NFx1OTJiNlx1OTlkMlx1OWE0NVx1OWNlOVx1OWRkN1x1OWY5Y1x1NTcwYlx1NWM0MFx1ODNjYVx1''@;'; put 'put ''OTdhMFx1OTdhYlx1OWViNFx1NTQxYlx1N2E5OFx1N2ZhNFx1ODhkOVx1OGVjZFx1OTBlMVx1NTgwMFx1NWM0OFx1NjM5OFx1N2E5Zlx1NWJhZVx1NWYxM1x1N2E3OVx1N2FhZVx1ODI4ZVx1OGVhY1x1NTAyNlx1NTIzOFx1NTJmOFx1NTM3N1x1NTcwOFx1NjJmM1x1NjM3Mlx1NmIwYVx1NmRj''@;'; put 'put ''M1x1NzczN1x1NTNhNVx1NzM1N1x1ODU2OFx1OGU3Nlx1OTVkNVx1NjczYVx1NmFjM1x1NmY3MFx1OGE2ZFx1OGVjY1x1OTk0Ylx1ZjkwNlx1NjY3N1x1NmI3OFx1OGNiNCJdLFsiZDBhMSIsIlx1OWIzY1x1ZjkwN1x1NTNlYlx1NTcyZFx1NTk0ZVx1NjNjNlx1NjlmYlx1NzNlYVx1Nzg0NVx1''@;'; put 'put ''N2FiYVx1N2FjNVx1N2NmZVx1ODQ3NVx1ODk4Zlx1OGQ3M1x1OTAzNVx1OTVhOFx1NTJmYlx1NTc0N1x1NzU0N1x1N2I2MFx1ODNjY1x1OTIxZVx1ZjkwOFx1NmE1OFx1NTE0Ylx1NTI0Ylx1NTI4N1x1NjIxZlx1NjhkOFx1Njk3NVx1OTY5OVx1NTBjNVx1NTJhNFx1NTJlNFx1NjFjM1x1NjVh''@;'; put 'put ''NFx1NjgzOVx1NjlmZlx1NzQ3ZVx1N2I0Ylx1ODJiOVx1ODNlYlx1ODliMlx1OGIzOVx1OGZkMVx1OTk0OVx1ZjkwOVx1NGVjYVx1NTk5N1x1NjRkMlx1NjYxMVx1NmE4ZVx1NzQzNFx1Nzk4MVx1NzliZFx1ODJhOVx1ODg3ZVx1ODg3Zlx1ODk1Zlx1ZjkwYVx1OTMyNlx1NGYwYlx1NTNjYVx1''@;'; put 'put ''NjAyNVx1NjI3MVx1NmM3Mlx1N2QxYVx1N2Q2Nlx1NGU5OFx1NTE2Mlx1NzdkY1x1ODBhZlx1NGYwMVx1NGYwZVx1NTE3Nlx1NTE4MFx1NTVkY1x1NTY2OFx1NTczYlx1NTdmYVx1NTdmY1x1NTkxNFx1NTk0N1x1NTk5M1x1NWJjNFx1NWM5MFx1NWQwZVx1NWRmMVx1NWU3ZVx1NWZjY1x1NjI4''@;'; put 'put ''MFx1NjVkN1x1NjVlMyJdLFsiZDFhMSIsIlx1NjcxZVx1NjcxZlx1Njc1ZVx1NjhjYlx1NjhjNFx1NmE1Zlx1NmIzYVx1NmMyM1x1NmM3ZFx1NmM4Mlx1NmRjN1x1NzM5OFx1NzQyNlx1NzQyYVx1NzQ4Mlx1NzRhM1x1NzU3OFx1NzU3Zlx1Nzg4MVx1NzhlZlx1Nzk0MVx1Nzk0N1x1Nzk0OFx1''@;'; put 'put ''Nzk3YVx1N2I5NVx1N2QwMFx1N2RiYVx1N2Y4OFx1ODAwNlx1ODAyZFx1ODA4Y1x1OGExOFx1OGI0Zlx1OGM0OFx1OGQ3N1x1OTMyMVx1OTMyNFx1OThlMlx1OTk1MVx1OWEwZVx1OWEwZlx1OWE2NVx1OWU5Mlx1N2RjYVx1NGY3Nlx1NTQwOVx1NjJlZVx1Njg1NFx1OTFkMVx1NTVhYlx1NTEz''@;'; put 'put ''YVx1ZjkwYlx1ZjkwY1x1NWExY1x1NjFlNlx1ZjkwZFx1NjJjZlx1NjJmZlx1ZjkwZSIsNSwiXHU5MGEzXHVmOTE0Iiw0LCJcdThhZmVcdWY5MTlcdWY5MWFcdWY5MWJcdWY5MWNcdTY2OTZcdWY5MWRcdTcxNTZcdWY5MWVcdWY5MWZcdTk2ZTNcdWY5MjBcdTYzNGZcdTYzN2FcdTUzNTdcdWY5''@;'; put 'put ''MjFcdTY3OGZcdTY5NjBcdTZlNzNcdWY5MjJcdTc1MzdcdWY5MjNcdWY5MjRcdWY5MjUiXSxbImQyYTEiLCJcdTdkMGRcdWY5MjZcdWY5MjdcdTg4NzJcdTU2Y2FcdTVhMThcdWY5MjgiLDQsIlx1NGU0M1x1ZjkyZFx1NTE2N1x1NTk0OFx1NjdmMFx1ODAxMFx1ZjkyZVx1NTk3M1x1NWU3NFx1''@;'; put 'put ''NjQ5YVx1NzljYVx1NWZmNVx1NjA2Y1x1NjJjOFx1NjM3Ylx1NWJlN1x1NWJkN1x1NTJhYVx1ZjkyZlx1NTk3NFx1NWYyOVx1NjAxMlx1ZjkzMFx1ZjkzMVx1ZjkzMlx1NzQ1OVx1ZjkzMyIsNSwiXHU5OWQxXHVmOTM5IiwxMCwiXHU2ZmMzXHVmOTQ0XHVmOTQ1XHU4MWJmXHU4ZmIyXHU2MGYx''@;'; put 'put ''XHVmOTQ2XHVmOTQ3XHU4MTY2XHVmOTQ4XHVmOTQ5XHU1YzNmXHVmOTRhIiw3LCJcdTVhZTlcdThhMjVcdTY3N2JcdTdkMTBcdWY5NTIiLDUsIlx1ODBmZFx1Zjk1OFx1Zjk1OVx1NWMzY1x1NmNlNVx1NTMzZlx1NmViYVx1NTkxYVx1ODMzNiJdLFsiZDNhMSIsIlx1NGUzOVx1NGViNlx1NGY0''@;'; put 'put ''Nlx1NTVhZVx1NTcxOFx1NThjN1x1NWY1Nlx1NjViN1x1NjVlNlx1NmE4MFx1NmJiNVx1NmU0ZFx1NzdlZFx1N2FlZlx1N2MxZVx1N2RkZVx1ODZjYlx1ODg5Mlx1OTEzMlx1OTM1Ylx1NjRiYlx1NmZiZVx1NzM3YVx1NzViOFx1OTA1NFx1NTU1Nlx1NTc0ZFx1NjFiYVx1NjRkNFx1NjZjN1x1''@;'; put 'put ''NmRlMVx1NmU1Ylx1NmY2ZFx1NmZiOVx1NzVmMFx1ODA0M1x1ODFiZFx1ODU0MVx1ODk4M1x1OGFjN1x1OGI1YVx1OTMxZlx1NmM5M1x1NzU1M1x1N2I1NFx1OGUwZlx1OTA1ZFx1NTUxMFx1NTgwMlx1NTg1OFx1NWU2Mlx1NjIwN1x1NjQ5ZVx1NjhlMFx1NzU3Nlx1N2NkNlx1ODdiM1x1OWVl''@;'; put 'put ''OFx1NGVlM1x1NTc4OFx1NTc2ZVx1NTkyN1x1NWMwZFx1NWNiMVx1NWUzNlx1NWY4NVx1NjIzNFx1NjRlMVx1NzNiM1x1ODFmYVx1ODg4Ylx1OGNiOFx1OTY4YVx1OWVkYlx1NWI4NVx1NWZiN1x1NjBiM1x1NTAxMlx1NTIwMFx1NTIzMFx1NTcxNlx1NTgzNVx1NTg1N1x1NWMwZVx1NWM2MFx1''@;'; put 'put ''NWNmNlx1NWQ4Ylx1NWVhNlx1NWY5Mlx1NjBiY1x1NjMxMVx1NjM4OVx1NjQxN1x1Njg0MyJdLFsiZDRhMSIsIlx1NjhmOVx1NmFjMlx1NmRkOFx1NmUyMVx1NmVkNFx1NmZlNFx1NzFmZVx1NzZkY1x1Nzc3OVx1NzliMVx1N2EzYlx1ODQwNFx1ODlhOVx1OGNlZFx1OGRmM1x1OGU0OFx1OTAw''@;'; put 'put ''M1x1OTAxNFx1OTA1M1x1OTBmZFx1OTM0ZFx1OTY3Nlx1OTdkY1x1NmJkMlx1NzAwNlx1NzI1OFx1NzJhMlx1NzM2OFx1Nzc2M1x1NzliZlx1N2JlNFx1N2U5Ylx1OGI4MFx1NThhOVx1NjBjN1x1NjU2Nlx1NjVmZFx1NjZiZVx1NmM4Y1x1NzExZVx1NzFjOVx1OGM1YVx1OTgxM1x1NGU2ZFx1''@;'; put 'put ''N2E4MVx1NGVkZFx1NTFhY1x1NTFjZFx1NTJkNVx1NTQwY1x1NjFhN1x1Njc3MVx1Njg1MFx1NjhkZlx1NmQxZVx1NmY3Y1x1NzViY1x1NzdiM1x1N2FlNVx1ODBmNFx1ODQ2M1x1OTI4NVx1NTE1Y1x1NjU5N1x1Njc1Y1x1Njc5M1x1NzVkOFx1N2FjN1x1ODM3M1x1Zjk1YVx1OGM0Nlx1OTAx''@;'; put 'put ''N1x1OTgyZFx1NWM2Zlx1ODFjMFx1ODI5YVx1OTA0MVx1OTA2Zlx1OTIwZFx1NWY5N1x1NWQ5ZFx1NmE1OVx1NzFjOFx1NzY3Ylx1N2I0OVx1ODVlNFx1OGIwNFx1OTEyN1x1OWEzMFx1NTU4N1x1NjFmNlx1Zjk1Ylx1NzY2OVx1N2Y4NSJdLFsiZDVhMSIsIlx1ODYzZlx1ODdiYVx1ODhmOFx1''@;'; put 'put ''OTA4Zlx1Zjk1Y1x1NmQxYlx1NzBkOVx1NzNkZVx1N2Q2MVx1ODQzZFx1Zjk1ZFx1OTE2YVx1OTlmMVx1Zjk1ZVx1NGU4Mlx1NTM3NVx1NmIwNFx1NmIxMlx1NzAzZVx1NzIxYlx1ODYyZFx1OWUxZVx1NTI0Y1x1OGZhM1x1NWQ1MFx1NjRlNVx1NjUyY1x1NmIxNlx1NmZlYlx1N2M0M1x1N2U5''@;'; put 'put ''Y1x1ODVjZFx1ODk2NFx1ODliZFx1NjJjOVx1ODFkOFx1ODgxZlx1NWVjYVx1NjcxN1x1NmQ2YVx1NzJmY1x1NzQwNVx1NzQ2Zlx1ODc4Mlx1OTBkZVx1NGY4Nlx1NWQwZFx1NWZhMFx1ODQwYVx1NTFiN1x1NjNhMFx1NzU2NVx1NGVhZVx1NTAwNlx1NTE2OVx1NTFjOVx1Njg4MVx1NmExMVx1''@;'; put 'put ''N2NhZVx1N2NiMVx1N2NlN1x1ODI2Zlx1OGFkMlx1OGYxYlx1OTFjZlx1NGZiNlx1NTEzN1x1NTJmNVx1NTQ0Mlx1NWVlY1x1NjE2ZVx1NjIzZVx1NjVjNVx1NmFkYVx1NmZmZVx1NzkyYVx1ODVkY1x1ODgyM1x1OTVhZFx1OWE2Mlx1OWE2YVx1OWU5N1x1OWVjZVx1NTI5Ylx1NjZjNlx1NmI3''@;'; put 'put ''N1x1NzAxZFx1NzkyYlx1OGY2Mlx1OTc0Mlx1NjE5MFx1NjIwMFx1NjUyM1x1NmYyMyJdLFsiZDZhMSIsIlx1NzE0OVx1NzQ4OVx1N2RmNFx1ODA2Zlx1ODRlZVx1OGYyNlx1OTAyM1x1OTM0YVx1NTFiZFx1NTIxN1x1NTJhM1x1NmQwY1x1NzBjOFx1ODhjMlx1NWVjOVx1NjU4Mlx1NmJhZVx1''@;'; put 'put ''NmZjMlx1N2MzZVx1NzM3NVx1NGVlNFx1NGYzNlx1NTZmOVx1Zjk1Zlx1NWNiYVx1NWRiYVx1NjAxY1x1NzNiMlx1N2IyZFx1N2Y5YVx1N2ZjZVx1ODA0Nlx1OTAxZVx1OTIzNFx1OTZmNlx1OTc0OFx1OTgxOFx1OWY2MVx1NGY4Ylx1NmZhN1x1NzlhZVx1OTFiNFx1OTZiN1x1NTJkZVx1Zjk2''@;'; put 'put ''MFx1NjQ4OFx1NjRjNFx1NmFkM1x1NmY1ZVx1NzAxOFx1NzIxMFx1NzZlN1x1ODAwMVx1ODYwNlx1ODY1Y1x1OGRlZlx1OGYwNVx1OTczMlx1OWI2Zlx1OWRmYVx1OWU3NVx1Nzg4Y1x1Nzk3Zlx1N2RhMFx1ODNjOVx1OTMwNFx1OWU3Zlx1OWU5M1x1OGFkNlx1NThkZlx1NWYwNFx1NjcyN1x1''@;'; put 'put ''NzAyN1x1NzRjZlx1N2M2MFx1ODA3ZVx1NTEyMVx1NzAyOFx1NzI2Mlx1NzhjYVx1OGNjMlx1OGNkYVx1OGNmNFx1OTZmN1x1NGU4Nlx1NTBkYVx1NWJlZVx1NWVkNlx1NjU5OVx1NzFjZVx1NzY0Mlx1NzdhZFx1ODA0YVx1ODRmYyJdLFsiZDdhMSIsIlx1OTA3Y1x1OWIyN1x1OWY4ZFx1NThk''@;'; put 'put ''OFx1NWE0MVx1NWM2Mlx1NmExM1x1NmRkYVx1NmYwZlx1NzYzYlx1N2QyZlx1N2UzN1x1ODUxZVx1ODkzOFx1OTNlNFx1OTY0Ylx1NTI4OVx1NjVkMlx1NjdmM1x1NjliNFx1NmQ0MVx1NmU5Y1x1NzAwZlx1NzQwOVx1NzQ2MFx1NzU1OVx1NzYyNFx1Nzg2Ylx1OGIyY1x1OTg1ZVx1NTE2ZFx1''@;'; put 'put ''NjIyZVx1OTY3OFx1NGY5Nlx1NTAyYlx1NWQxOVx1NmRlYVx1N2RiOFx1OGYyYVx1NWY4Ylx1NjE0NFx1NjgxN1x1Zjk2MVx1OTY4Nlx1NTJkMlx1ODA4Ylx1NTFkY1x1NTFjY1x1Njk1ZVx1N2ExY1x1N2RiZVx1ODNmMVx1OTY3NVx1NGZkYVx1NTIyOVx1NTM5OFx1NTQwZlx1NTUwZVx1NWM2''@;'; put 'put ''NVx1NjBhN1x1Njc0ZVx1NjhhOFx1NmQ2Y1x1NzI4MVx1NzJmOFx1NzQwNlx1NzQ4M1x1Zjk2Mlx1NzVlMlx1N2M2Y1x1N2Y3OVx1N2ZiOFx1ODM4OVx1ODhjZlx1ODhlMVx1OTFjY1x1OTFkMFx1OTZlMlx1OWJjOVx1NTQxZFx1NmY3ZVx1NzFkMFx1NzQ5OFx1ODVmYVx1OGVhYVx1OTZhM1x1''@;'; put 'put ''OWM1N1x1OWU5Zlx1Njc5N1x1NmRjYlx1NzQzM1x1ODFlOFx1OTcxNlx1NzgyYyJdLFsiZDhhMSIsIlx1N2FjYlx1N2IyMFx1N2M5Mlx1NjQ2OVx1NzQ2YVx1NzVmMlx1NzhiY1x1NzhlOFx1OTlhY1x1OWI1NFx1OWViYlx1NWJkZVx1NWU1NVx1NmYyMFx1ODE5Y1x1ODNhYlx1OTA4OFx1NGUw''@;'; put 'put ''N1x1NTM0ZFx1NWEyOVx1NWRkMlx1NWY0ZVx1NjE2Mlx1NjMzZFx1NjY2OVx1NjZmY1x1NmVmZlx1NmYyYlx1NzA2M1x1Nzc5ZVx1ODQyY1x1ODUxM1x1ODgzYlx1OGYxM1x1OTk0NVx1OWMzYlx1NTUxY1x1NjJiOVx1NjcyYlx1NmNhYlx1ODMwOVx1ODk2YVx1OTc3YVx1NGVhMVx1NTk4NFx1''@;'; put 'put ''NWZkOFx1NWZkOVx1NjcxYlx1N2RiMlx1N2Y1NFx1ODI5Mlx1ODMyYlx1ODNiZFx1OGYxZVx1OTA5OVx1NTdjYlx1NTliOVx1NWE5Mlx1NWJkMFx1NjYyN1x1Njc5YVx1Njg4NVx1NmJjZlx1NzE2NFx1N2Y3NVx1OGNiN1x1OGNlM1x1OTA4MVx1OWI0NVx1ODEwOFx1OGM4YVx1OTY0Y1x1OWE0''@;'; put 'put ''MFx1OWVhNVx1NWI1Zlx1NmMxM1x1NzMxYlx1NzZmMlx1NzZkZlx1ODQwY1x1NTFhYVx1ODk5M1x1NTE0ZFx1NTE5NVx1NTJjOVx1NjhjOVx1NmM5NFx1NzcwNFx1NzcyMFx1N2RiZlx1N2RlY1x1OTc2Mlx1OWViNVx1NmVjNSJdLFsiZDlhMSIsIlx1ODUxMVx1NTFhNVx1NTQwZFx1NTQ3ZFx1''@;'; put 'put ''NjYwZVx1NjY5ZFx1NjkyN1x1NmU5Zlx1NzZiZlx1Nzc5MVx1ODMxN1x1ODRjMlx1ODc5Zlx1OTE2OVx1OTI5OFx1OWNmNFx1ODg4Mlx1NGZhZVx1NTE5Mlx1NTJkZlx1NTljNlx1NWUzZFx1NjE1NVx1NjQ3OFx1NjQ3OVx1NjZhZVx1NjdkMFx1NmEyMVx1NmJjZFx1NmJkYlx1NzI1Zlx1NzI2''@;'; put 'put ''MVx1NzQ0MVx1NzczOFx1NzdkYlx1ODAxN1x1ODJiY1x1ODMwNVx1OGIwMFx1OGIyOFx1OGM4Y1x1NjcyOFx1NmM5MFx1NzI2N1x1NzZlZVx1Nzc2Nlx1N2E0Nlx1OWRhOVx1NmI3Zlx1NmM5Mlx1NTkyMlx1NjcyNlx1ODQ5OVx1NTM2Zlx1NTg5M1x1NTk5OVx1NWVkZlx1NjNjZlx1NjYzNFx1''@;'; put 'put ''Njc3M1x1NmUzYVx1NzMyYlx1N2FkN1x1ODJkN1x1OTMyOFx1NTJkOVx1NWRlYlx1NjFhZVx1NjFjYlx1NjIwYVx1NjJjN1x1NjRhYlx1NjVlMFx1Njk1OVx1NmI2Nlx1NmJjYlx1NzEyMVx1NzNmN1x1NzU1ZFx1N2U0Nlx1ODIxZVx1ODMwMlx1ODU2YVx1OGFhM1x1OGNiZlx1OTcyN1x1OWQ2''@;'; put 'put ''MVx1NThhOFx1OWVkOFx1NTAxMVx1NTIwZVx1NTQzYlx1NTU0Zlx1NjU4NyJdLFsiZGFhMSIsIlx1NmM3Nlx1N2QwYVx1N2QwYlx1ODA1ZVx1ODY4YVx1OTU4MFx1OTZlZlx1NTJmZlx1NmM5NVx1NzI2OVx1NTQ3M1x1NWE5YVx1NWMzZVx1NWQ0Ylx1NWY0Y1x1NWZhZVx1NjcyYVx1NjhiNlx1''@;'; put 'put ''Njk2M1x1NmUzY1x1NmU0NFx1NzcwOVx1N2M3M1x1N2Y4ZVx1ODU4N1x1OGIwZVx1OGZmN1x1OTc2MVx1OWVmNFx1NWNiN1x1NjBiNlx1NjEwZFx1NjFhYlx1NjU0Zlx1NjVmYlx1NjVmY1x1NmMxMVx1NmNlZlx1NzM5Zlx1NzNjOVx1N2RlMVx1OTU5NFx1NWJjNlx1ODcxY1x1OGIxMFx1NTI1''@;'; put 'put ''ZFx1NTM1YVx1NjJjZFx1NjQwZlx1NjRiMlx1NjczNFx1NmEzOFx1NmNjYVx1NzNjMFx1NzQ5ZVx1N2I5NFx1N2M5NVx1N2UxYlx1ODE4YVx1ODIzNlx1ODU4NFx1OGZlYlx1OTZmOVx1OTljMVx1NGYzNFx1NTM0YVx1NTNjZFx1NTNkYlx1NjJjY1x1NjQyY1x1NjUwMFx1NjU5MVx1NjljM1x1''@;'; put 'put ''NmNlZVx1NmY1OFx1NzNlZFx1NzU1NFx1NzYyMlx1NzZlNFx1NzZmY1x1NzhkMFx1NzhmYlx1NzkyY1x1N2Q0Nlx1ODIyY1x1ODdlMFx1OGZkNFx1OTgxMlx1OThlZlx1NTJjM1x1NjJkNFx1NjRhNVx1NmUyNFx1NmY1MSJdLFsiZGJhMSIsIlx1NzY3Y1x1OGRjYlx1OTFiMVx1OTI2Mlx1OWFl''@;'; put 'put ''ZVx1OWI0M1x1NTAyM1x1NTA4ZFx1NTc0YVx1NTlhOFx1NWMyOFx1NWU0N1x1NWY3N1x1NjIzZlx1NjUzZVx1NjViOVx1NjVjMVx1NjYwOVx1Njc4Ylx1Njk5Y1x1NmVjMlx1NzhjNVx1N2QyMVx1ODBhYVx1ODE4MFx1ODIyYlx1ODJiM1x1ODRhMVx1ODY4Y1x1OGEyYVx1OGIxN1x1OTBhNlx1''@;'; put 'put ''OTYzMlx1OWY5MFx1NTAwZFx1NGZmM1x1Zjk2M1x1NTdmOVx1NWY5OFx1NjJkY1x1NjM5Mlx1Njc2Zlx1NmU0M1x1NzExOVx1NzZjM1x1ODBjY1x1ODBkYVx1ODhmNFx1ODhmNVx1ODkxOVx1OGNlMFx1OGYyOVx1OTE0ZFx1OTY2YVx1NGYyZlx1NGY3MFx1NWUxYlx1NjdjZlx1NjgyMlx1NzY3''@;'; put 'put ''ZFx1NzY3ZVx1OWI0NFx1NWU2MVx1NmEwYVx1NzE2OVx1NzFkNFx1NzU2YVx1Zjk2NFx1N2U0MVx1ODU0M1x1ODVlOVx1OThkY1x1NGYxMFx1N2I0Zlx1N2Y3MFx1OTVhNVx1NTFlMVx1NWUwNlx1NjhiNVx1NmMzZVx1NmM0ZVx1NmNkYlx1NzJhZlx1N2JjNFx1ODMwM1x1NmNkNVx1NzQzYVx1''@;'; put 'put ''NTBmYlx1NTI4OFx1NThjMVx1NjRkOFx1NmE5N1x1NzRhN1x1NzY1NiJdLFsiZGNhMSIsIlx1NzhhN1x1ODYxN1x1OTVlMlx1OTczOVx1Zjk2NVx1NTM1ZVx1NWYwMVx1OGI4YVx1OGZhOFx1OGZhZlx1OTA4YVx1NTIyNVx1NzdhNVx1OWM0OVx1OWYwOFx1NGUxOVx1NTAwMlx1NTE3NVx1NWM1''@;'; put 'put ''Ylx1NWU3N1x1NjYxZVx1NjYzYVx1NjdjNFx1NjhjNVx1NzBiM1x1NzUwMVx1NzVjNVx1NzljOVx1N2FkZFx1OGYyN1x1OTkyMFx1OWEwOFx1NGZkZFx1NTgyMVx1NTgzMVx1NWJmNlx1NjY2ZVx1NmI2NVx1NmQxMVx1NmU3YVx1NmY3ZFx1NzNlNFx1NzUyYlx1ODNlOVx1ODhkY1x1ODkxM1x1''@;'; put 'put ''OGI1Y1x1OGYxNFx1NGYwZlx1NTBkNVx1NTMxMFx1NTM1Y1x1NWI5M1x1NWZhOVx1NjcwZFx1Nzk4Zlx1ODE3OVx1ODMyZlx1ODUxNFx1ODkwN1x1ODk4Nlx1OGYzOVx1OGYzYlx1OTlhNVx1OWMxMlx1NjcyY1x1NGU3Nlx1NGZmOFx1NTk0OVx1NWMwMVx1NWNlZlx1NWNmMFx1NjM2N1x1Njhk''@;'; put 'put ''Mlx1NzBmZFx1NzFhMlx1NzQyYlx1N2UyYlx1ODRlY1x1ODcwMlx1OTAyMlx1OTJkMlx1OWNmM1x1NGUwZFx1NGVkOFx1NGZlZlx1NTA4NVx1NTI1Nlx1NTI2Zlx1NTQyNlx1NTQ5MFx1NTdlMFx1NTkyYlx1NWE2NiJdLFsiZGRhMSIsIlx1NWI1YVx1NWI3NVx1NWJjY1x1NWU5Y1x1Zjk2Nlx1''@;'; put 'put ''NjI3Nlx1NjU3N1x1NjVhN1x1NmQ2ZVx1NmVhNVx1NzIzNlx1N2IyNlx1N2MzZlx1N2YzNlx1ODE1MFx1ODE1MVx1ODE5YVx1ODI0MFx1ODI5OVx1ODNhOVx1OGEwM1x1OGNhMFx1OGNlNlx1OGNmYlx1OGQ3NFx1OGRiYVx1OTBlOFx1OTFkY1x1OTYxY1x1OTY0NFx1OTlkOVx1OWNlN1x1NTMx''@;'; put 'put ''N1x1NTIwNlx1NTQyOVx1NTY3NFx1NThiM1x1NTk1NFx1NTk2ZVx1NWZmZlx1NjFhNFx1NjI2ZVx1NjYxMFx1NmM3ZVx1NzExYVx1NzZjNlx1N2M4OVx1N2NkZVx1N2QxYlx1ODJhY1x1OGNjMVx1OTZmMFx1Zjk2N1x1NGY1Ylx1NWYxN1x1NWY3Zlx1NjJjMlx1NWQyOVx1NjcwYlx1NjhkYVx1''@;'; put 'put ''Nzg3Y1x1N2U0M1x1OWQ2Y1x1NGUxNVx1NTA5OVx1NTMxNVx1NTMyYVx1NTM1MVx1NTk4M1x1NWE2Mlx1NWU4N1x1NjBiMlx1NjE4YVx1NjI0OVx1NjI3OVx1NjU5MFx1Njc4N1x1NjlhN1x1NmJkNFx1NmJkNlx1NmJkN1x1NmJkOFx1NmNiOFx1Zjk2OFx1NzQzNVx1NzVmYVx1NzgxMlx1Nzg5''@;'; put 'put ''MVx1NzlkNVx1NzlkOFx1N2M4M1x1N2RjYlx1N2ZlMVx1ODBhNSJdLFsiZGVhMSIsIlx1ODEzZVx1ODFjMlx1ODNmMlx1ODcxYVx1ODhlOFx1OGFiOVx1OGI2Y1x1OGNiYlx1OTExOVx1OTc1ZVx1OThkYlx1OWYzYlx1NTZhY1x1NWIyYVx1NWY2Y1x1NjU4Y1x1NmFiM1x1NmJhZlx1NmQ1Y1x1''@;'; put 'put ''NmZmMVx1NzAxNVx1NzI1ZFx1NzNhZFx1OGNhN1x1OGNkM1x1OTgzYlx1NjE5MVx1NmMzN1x1ODA1OFx1OWEwMVx1NGU0ZFx1NGU4Ylx1NGU5Ylx1NGVkNVx1NGYzYVx1NGYzY1x1NGY3Zlx1NGZkZlx1NTBmZlx1NTNmMlx1NTNmOFx1NTUwNlx1NTVlM1x1NTZkYlx1NThlYlx1NTk2Mlx1NWEx''@;'; put 'put ''MVx1NWJlYlx1NWJmYVx1NWMwNFx1NWRmM1x1NWUyYlx1NWY5OVx1NjAxZFx1NjM2OFx1NjU5Y1x1NjVhZlx1NjdmNlx1NjdmYlx1NjhhZFx1NmI3Ylx1NmM5OVx1NmNkN1x1NmUyM1x1NzAwOVx1NzM0NVx1NzgwMlx1NzkzZVx1Nzk0MFx1Nzk2MFx1NzljMVx1N2JlOVx1N2QxN1x1N2Q3Mlx1''@;'; put 'put ''ODA4Nlx1ODIwZFx1ODM4ZVx1ODRkMVx1ODZjN1x1ODhkZlx1OGE1MFx1OGE1ZVx1OGIxZFx1OGNkY1x1OGQ2Nlx1OGZhZFx1OTBhYVx1OThmY1x1OTlkZlx1OWU5ZFx1NTI0YVx1Zjk2OVx1NjcxNFx1Zjk2YSJdLFsiZGZhMSIsIlx1NTA5OFx1NTIyYVx1NWM3MVx1NjU2M1x1NmM1NVx1NzNj''@;'; put 'put ''YVx1NzUyM1x1NzU5ZFx1N2I5N1x1ODQ5Y1x1OTE3OFx1OTczMFx1NGU3N1x1NjQ5Mlx1NmJiYVx1NzE1ZVx1ODVhOVx1NGUwOVx1Zjk2Ylx1Njc0OVx1NjhlZVx1NmUxN1x1ODI5Zlx1ODUxOFx1ODg2Ylx1NjNmN1x1NmY4MVx1OTIxMlx1OThhZlx1NGUwYVx1NTBiN1x1NTBjZlx1NTExZlx1''@;'; put 'put ''NTU0Nlx1NTVhYVx1NTYxN1x1NWI0MFx1NWMxOVx1NWNlMFx1NWUzOFx1NWU4YVx1NWVhMFx1NWVjMlx1NjBmM1x1Njg1MVx1NmE2MVx1NmU1OFx1NzIzZFx1NzI0MFx1NzJjMFx1NzZmOFx1Nzk2NVx1N2JiMVx1N2ZkNFx1ODhmM1x1ODlmNFx1OGE3M1x1OGM2MVx1OGNkZVx1OTcxY1x1NTg1''@;'; put 'put ''ZVx1NzRiZFx1OGNmZFx1NTVjN1x1Zjk2Y1x1N2E2MVx1N2QyMlx1ODI3Mlx1NzI3Mlx1NzUxZlx1NzUyNVx1Zjk2ZFx1N2IxOVx1NTg4NVx1NThmYlx1NWRiY1x1NWU4Zlx1NWViNlx1NWY5MFx1NjA1NVx1NjI5Mlx1NjM3Zlx1NjU0ZFx1NjY5MVx1NjZkOVx1NjZmOFx1NjgxNlx1NjhmMlx1''@;'; put 'put ''NzI4MFx1NzQ1ZVx1N2I2ZVx1N2Q2ZVx1N2RkNlx1N2Y3MiJdLFsiZTBhMSIsIlx1ODBlNVx1ODIxMlx1ODVhZlx1ODk3Zlx1OGE5M1x1OTAxZFx1OTJlNFx1OWVjZFx1OWYyMFx1NTkxNVx1NTk2ZFx1NWUyZFx1NjBkY1x1NjYxNFx1NjY3M1x1Njc5MFx1NmM1MFx1NmRjNVx1NmY1Zlx1Nzdm''@;'; put 'put ''M1x1NzhhOVx1ODRjNlx1OTFjYlx1OTMyYlx1NGVkOVx1NTBjYVx1NTE0OFx1NTU4NFx1NWIwYlx1NWJhM1x1NjI0N1x1NjU3ZVx1NjVjYlx1NmUzMlx1NzE3ZFx1NzQwMVx1NzQ0NFx1NzQ4N1x1NzRiZlx1NzY2Y1x1NzlhYVx1N2RkYVx1N2U1NVx1N2ZhOFx1ODE3YVx1ODFiM1x1ODIzOVx1''@;'; put 'put ''ODYxYVx1ODdlY1x1OGE3NVx1OGRlM1x1OTA3OFx1OTI5MVx1OTQyNVx1OTk0ZFx1OWJhZVx1NTM2OFx1NWM1MVx1Njk1NFx1NmNjNFx1NmQyOVx1NmUyYlx1ODIwY1x1ODU5Ylx1ODkzYlx1OGEyZFx1OGFhYVx1OTZlYVx1OWY2N1x1NTI2MVx1NjZiOVx1NmJiMlx1N2U5Nlx1ODdmZVx1OGQw''@;'; put 'put ''ZFx1OTU4M1x1OTY1ZFx1NjUxZFx1NmQ4OVx1NzFlZVx1Zjk2ZVx1NTdjZVx1NTlkM1x1NWJhY1x1NjAyN1x1NjBmYVx1NjIxMFx1NjYxZlx1NjY1Zlx1NzMyOVx1NzNmOVx1NzZkYlx1NzcwMVx1N2I2YyJdLFsiZTFhMSIsIlx1ODA1Nlx1ODA3Mlx1ODE2NVx1OGFhMFx1OTE5Mlx1NGUxNlx1''@;'; put 'put ''NTJlMlx1NmI3Mlx1NmQxN1x1N2EwNVx1N2IzOVx1N2QzMFx1Zjk2Zlx1OGNiMFx1NTNlY1x1NTYyZlx1NTg1MVx1NWJiNVx1NWMwZlx1NWMxMVx1NWRlMlx1NjI0MFx1NjM4M1x1NjQxNFx1NjYyZFx1NjhiM1x1NmNiY1x1NmQ4OFx1NmVhZlx1NzAxZlx1NzBhNFx1NzFkMlx1NzUyNlx1NzU4''@;'; put 'put ''Zlx1NzU4ZVx1NzYxOVx1N2IxMVx1N2JlMFx1N2MyYlx1N2QyMFx1N2QzOVx1ODUyY1x1ODU2ZFx1ODYwN1x1OGEzNFx1OTAwZFx1OTA2MVx1OTBiNVx1OTJiN1x1OTdmNlx1OWEzN1x1NGZkN1x1NWM2Y1x1Njc1Zlx1NmQ5MVx1N2M5Zlx1N2U4Y1x1OGIxNlx1OGQxNlx1OTAxZlx1NWI2Ylx1''@;'; put 'put ''NWRmZFx1NjQwZFx1ODRjMFx1OTA1Y1x1OThlMVx1NzM4N1x1NWI4Ylx1NjA5YVx1Njc3ZVx1NmRkZVx1OGExZlx1OGFhNlx1OTAwMVx1OTgwY1x1NTIzN1x1Zjk3MFx1NzA1MVx1Nzg4ZVx1OTM5Nlx1ODg3MFx1OTFkN1x1NGZlZVx1NTNkN1x1NTVmZFx1NTZkYVx1NTc4Mlx1NThmZFx1NWFj''@;'; put 'put ''Mlx1NWI4OFx1NWNhYlx1NWNjMFx1NWUyNVx1NjEwMSJdLFsiZTJhMSIsIlx1NjIwZFx1NjI0Ylx1NjM4OFx1NjQxY1x1NjUzNlx1NjU3OFx1NmEzOVx1NmI4YVx1NmMzNFx1NmQxOVx1NmYzMVx1NzFlN1x1NzJlOVx1NzM3OFx1NzQwN1x1NzRiMlx1NzYyNlx1Nzc2MVx1NzljMFx1N2E1N1x1''@;'; put 'put ''N2FlYVx1N2NiOVx1N2Q4Zlx1N2RhY1x1N2U2MVx1N2Y5ZVx1ODEyOVx1ODMzMVx1ODQ5MFx1ODRkYVx1ODVlYVx1ODg5Nlx1OGFiMFx1OGI5MFx1OGYzOFx1OTA0Mlx1OTA4M1x1OTE2Y1x1OTI5Nlx1OTJiOVx1OTY4Ylx1OTZhN1x1OTZhOFx1OTZkNlx1OTcwMFx1OTgwOFx1OTk5Nlx1OWFk''@;'; put 'put ''M1x1OWIxYVx1NTNkNFx1NTg3ZVx1NTkxOVx1NWI3MFx1NWJiZlx1NmRkMVx1NmY1YVx1NzE5Zlx1NzQyMVx1NzRiOVx1ODA4NVx1ODNmZFx1NWRlMVx1NWY4N1x1NWZhYVx1NjA0Mlx1NjVlY1x1NjgxMlx1Njk2Zlx1NmE1M1x1NmI4OVx1NmQzNVx1NmRmM1x1NzNlM1x1NzZmZVx1NzdhY1x1''@;'; put 'put ''N2I0ZFx1N2QxNFx1ODEyM1x1ODIxY1x1ODM0MFx1ODRmNFx1ODU2M1x1OGE2Mlx1OGFjNFx1OTE4N1x1OTMxZVx1OTgwNlx1OTliNFx1NjIwY1x1ODg1M1x1OGZmMFx1OTI2NVx1NWQwN1x1NWQyNyJdLFsiZTNhMSIsIlx1NWQ2OVx1NzQ1Zlx1ODE5ZFx1ODc2OFx1NmZkNVx1NjJmZVx1N2Zk''@;'; put 'put ''Mlx1ODkzNlx1ODk3Mlx1NGUxZVx1NGU1OFx1NTBlN1x1NTJkZFx1NTM0N1x1NjI3Zlx1NjYwN1x1N2U2OVx1ODgwNVx1OTY1ZVx1NGY4ZFx1NTMxOVx1NTYzNlx1NTljYlx1NWFhNFx1NWMzOFx1NWM0ZVx1NWM0ZFx1NWUwMlx1NWYxMVx1NjA0M1x1NjViZFx1NjYyZlx1NjY0Mlx1NjdiZVx1''@;'; put 'put ''NjdmNFx1NzMxY1x1NzdlMlx1NzkzYVx1N2ZjNVx1ODQ5NFx1ODRjZFx1ODk5Nlx1OGE2Nlx1OGE2OVx1OGFlMVx1OGM1NVx1OGM3YVx1NTdmNFx1NWJkNFx1NWYwZlx1NjA2Zlx1NjJlZFx1NjkwZFx1NmI5Nlx1NmU1Y1x1NzE4NFx1N2JkMlx1ODc1NVx1OGI1OFx1OGVmZVx1OThkZlx1OThm''@;'; put 'put ''ZVx1NGYzOFx1NGY4MVx1NGZlMVx1NTQ3Ylx1NWEyMFx1NWJiOFx1NjEzY1x1NjViMFx1NjY2OFx1NzFmY1x1NzUzM1x1Nzk1ZVx1N2QzM1x1ODE0ZVx1ODFlM1x1ODM5OFx1ODVhYVx1ODVjZVx1ODcwM1x1OGEwYVx1OGVhYlx1OGY5Ylx1Zjk3MVx1OGZjNVx1NTkzMVx1NWJhNFx1NWJlNlx1''@;'; put 'put ''NjA4OVx1NWJlOVx1NWMwYlx1NWZjM1x1NmM4MSJdLFsiZTRhMSIsIlx1Zjk3Mlx1NmRmMVx1NzAwYlx1NzUxYVx1ODJhZlx1OGFmNlx1NGVjMFx1NTM0MVx1Zjk3M1x1OTZkOVx1NmMwZlx1NGU5ZVx1NGZjNFx1NTE1Mlx1NTU1ZVx1NWEyNVx1NWNlOFx1NjIxMVx1NzI1OVx1ODJiZFx1ODNh''@;'; put 'put ''YVx1ODZmZVx1ODg1OVx1OGExZFx1OTYzZlx1OTZjNVx1OTkxM1x1OWQwOVx1OWQ1ZFx1NTgwYVx1NWNiM1x1NWRiZFx1NWU0NFx1NjBlMVx1NjExNVx1NjNlMVx1NmEwMlx1NmUyNVx1OTEwMlx1OTM1NFx1OTg0ZVx1OWMxMFx1OWY3N1x1NWI4OVx1NWNiOFx1NjMwOVx1NjY0Zlx1Njg0OFx1''@;'; put 'put ''NzczY1x1OTZjMVx1OTc4ZFx1OTg1NFx1OWI5Zlx1NjVhMVx1OGIwMVx1OGVjYlx1OTViY1x1NTUzNVx1NWNhOVx1NWRkNlx1NWViNVx1NjY5N1x1NzY0Y1x1ODNmNFx1OTVjN1x1NThkM1x1NjJiY1x1NzJjZVx1OWQyOFx1NGVmMFx1NTkyZVx1NjAwZlx1NjYzYlx1NmI4M1x1NzllN1x1OWQy''@;'; put 'put ''Nlx1NTM5M1x1NTRjMFx1NTdjM1x1NWQxNlx1NjExYlx1NjZkNlx1NmRhZlx1Nzg4ZFx1ODI3ZVx1OTY5OFx1OTc0NFx1NTM4NFx1NjI3Y1x1NjM5Nlx1NmRiMlx1N2UwYVx1ODE0Ylx1OTg0ZCJdLFsiZTVhMSIsIlx1NmFmYlx1N2Y0Y1x1OWRhZlx1OWUxYVx1NGU1Zlx1NTAzYlx1NTFiNlx1''@;'; put 'put ''NTkxY1x1NjBmOVx1NjNmNlx1NjkzMFx1NzIzYVx1ODAzNlx1Zjk3NFx1OTFjZVx1NWYzMVx1Zjk3NVx1Zjk3Nlx1N2QwNFx1ODJlNVx1ODQ2Zlx1ODRiYlx1ODVlNVx1OGU4ZFx1Zjk3N1x1NGY2Zlx1Zjk3OFx1Zjk3OVx1NThlNFx1NWI0M1x1NjA1OVx1NjNkYVx1NjUxOFx1NjU2ZFx1NjY5''@;'; put 'put ''OFx1Zjk3YVx1Njk0YVx1NmEyM1x1NmQwYlx1NzAwMVx1NzE2Y1x1NzVkMlx1NzYwZFx1NzliM1x1N2E3MFx1Zjk3Ylx1N2Y4YVx1Zjk3Y1x1ODk0NFx1Zjk3ZFx1OGI5M1x1OTFjMFx1OTY3ZFx1Zjk3ZVx1OTkwYVx1NTcwNFx1NWZhMVx1NjViY1x1NmYwMVx1NzYwMFx1NzlhNlx1OGE5ZVx1''@;'; put 'put ''OTlhZFx1OWI1YVx1OWY2Y1x1NTEwNFx1NjFiNlx1NjI5MVx1NmE4ZFx1ODFjNlx1NTA0M1x1NTgzMFx1NWY2Nlx1NzEwOVx1OGEwMFx1OGFmYVx1NWI3Y1x1ODYxNlx1NGZmYVx1NTEzY1x1NTZiNFx1NTk0NFx1NjNhOVx1NmRmOVx1NWRhYVx1Njk2ZFx1NTE4Nlx1NGU4OFx1NGY1OVx1Zjk3''@;'; put 'put ''Zlx1Zjk4MFx1Zjk4MVx1NTk4Mlx1Zjk4MiJdLFsiZTZhMSIsIlx1Zjk4M1x1NmI1Zlx1NmM1ZFx1Zjk4NFx1NzRiNVx1NzkxNlx1Zjk4NVx1ODIwN1x1ODI0NVx1ODMzOVx1OGYzZlx1OGY1ZFx1Zjk4Nlx1OTkxOFx1Zjk4N1x1Zjk4OFx1Zjk4OVx1NGVhNlx1Zjk4YVx1NTdkZlx1NWY3OVx1''@;'; put 'put ''NjYxM1x1Zjk4Ylx1Zjk4Y1x1NzVhYlx1N2U3OVx1OGI2Zlx1Zjk4ZFx1OTAwNlx1OWE1Ylx1NTZhNVx1NTgyN1x1NTlmOFx1NWExZlx1NWJiNFx1Zjk4ZVx1NWVmNlx1Zjk4Zlx1Zjk5MFx1NjM1MFx1NjMzYlx1Zjk5MVx1NjkzZFx1NmM4N1x1NmNiZlx1NmQ4ZVx1NmQ5M1x1NmRmNVx1NmYx''@;'; put 'put ''NFx1Zjk5Mlx1NzBkZlx1NzEzNlx1NzE1OVx1Zjk5M1x1NzFjM1x1NzFkNVx1Zjk5NFx1Nzg0Zlx1Nzg2Zlx1Zjk5NVx1N2I3NVx1N2RlM1x1Zjk5Nlx1N2UyZlx1Zjk5N1x1ODg0ZFx1OGVkZlx1Zjk5OFx1Zjk5OVx1Zjk5YVx1OTI1Ylx1Zjk5Ylx1OWNmNlx1Zjk5Y1x1Zjk5ZFx1Zjk5ZVx1''@;'; put 'put ''NjA4NVx1NmQ4NVx1Zjk5Zlx1NzFiMVx1ZjlhMFx1ZjlhMVx1OTViMVx1NTNhZFx1ZjlhMlx1ZjlhM1x1ZjlhNFx1NjdkM1x1ZjlhNVx1NzA4ZVx1NzEzMFx1NzQzMFx1ODI3Nlx1ODJkMiJdLFsiZTdhMSIsIlx1ZjlhNlx1OTViYlx1OWFlNVx1OWU3ZFx1NjZjNFx1ZjlhN1x1NzFjMVx1ODQ0''@;'; put 'put ''OVx1ZjlhOFx1ZjlhOVx1NTg0Ylx1ZjlhYVx1ZjlhYlx1NWRiOFx1NWY3MVx1ZjlhY1x1NjYyMFx1NjY4ZVx1Njk3OVx1NjlhZVx1NmMzOFx1NmNmM1x1NmUzNlx1NmY0MVx1NmZkYVx1NzAxYlx1NzAyZlx1NzE1MFx1NzFkZlx1NzM3MFx1ZjlhZFx1NzQ1Ylx1ZjlhZVx1NzRkNFx1NzZjOFx1''@;'; put 'put ''N2E0ZVx1N2U5M1x1ZjlhZlx1ZjliMFx1ODJmMVx1OGE2MFx1OGZjZVx1ZjliMVx1OTM0OFx1ZjliMlx1OTcxOVx1ZjliM1x1ZjliNFx1NGU0Mlx1NTAyYVx1ZjliNVx1NTIwOFx1NTNlMVx1NjZmM1x1NmM2ZFx1NmZjYVx1NzMwYVx1Nzc3Zlx1N2E2Mlx1ODJhZVx1ODVkZFx1ODYwMlx1Zjli''@;'; put 'put ''Nlx1ODhkNFx1OGE2M1x1OGI3ZFx1OGM2Ylx1ZjliN1x1OTJiM1x1ZjliOFx1OTcxM1x1OTgxMFx1NGU5NFx1NGYwZFx1NGZjOVx1NTBiMlx1NTM0OFx1NTQzZVx1NTQzM1x1NTVkYVx1NTg2Mlx1NThiYVx1NTk2N1x1NWExYlx1NWJlNFx1NjA5Zlx1ZjliOVx1NjFjYVx1NjU1Nlx1NjVmZlx1''@;'; put 'put ''NjY2NFx1NjhhN1x1NmM1YVx1NmZiMyJdLFsiZThhMSIsIlx1NzBjZlx1NzFhY1x1NzM1Mlx1N2I3ZFx1ODcwOFx1OGFhNFx1OWMzMlx1OWYwN1x1NWM0Ylx1NmM4M1x1NzM0NFx1NzM4OVx1OTIzYVx1NmVhYlx1NzQ2NVx1NzYxZlx1N2E2OVx1N2UxNVx1ODYwYVx1NTE0MFx1NThjNVx1NjRj''@;'; put 'put ''MVx1NzRlZVx1NzUxNVx1NzY3MFx1N2ZjMVx1OTA5NVx1OTZjZFx1OTk1NFx1NmUyNlx1NzRlNlx1N2FhOVx1N2FhYVx1ODFlNVx1ODZkOVx1ODc3OFx1OGExYlx1NWE0OVx1NWI4Y1x1NWI5Ylx1NjhhMVx1NjkwMFx1NmQ2M1x1NzNhOVx1NzQxM1x1NzQyY1x1Nzg5N1x1N2RlOVx1N2ZlYlx1''@;'; put 'put ''ODExOFx1ODE1NVx1ODM5ZVx1OGM0Y1x1OTYyZVx1OTgxMVx1NjZmMFx1NWY4MFx1NjVmYVx1Njc4OVx1NmM2YVx1NzM4Ylx1NTAyZFx1NWEwM1x1NmI2YVx1NzdlZVx1NTkxNlx1NWQ2Y1x1NWRjZFx1NzMyNVx1NzU0Zlx1ZjliYVx1ZjliYlx1NTBlNVx1NTFmOVx1NTgyZlx1NTkyZFx1NTk5''@;'; put 'put ''Nlx1NTlkYVx1NWJlNVx1ZjliY1x1ZjliZFx1NWRhMlx1NjJkN1x1NjQxNlx1NjQ5M1x1NjRmZVx1ZjliZVx1NjZkY1x1ZjliZlx1NmE0OFx1ZjljMFx1NzFmZlx1NzQ2NFx1ZjljMSJdLFsiZTlhMSIsIlx1N2E4OFx1N2FhZlx1N2U0N1x1N2U1ZVx1ODAwMFx1ODE3MFx1ZjljMlx1ODdlZlx1''@;'; put 'put ''ODk4MVx1OGIyMFx1OTA1OVx1ZjljM1x1OTA4MFx1OTk1Mlx1NjE3ZVx1NmIzMlx1NmQ3NFx1N2UxZlx1ODkyNVx1OGZiMVx1NGZkMVx1NTBhZFx1NTE5N1x1NTJjN1x1NTdjN1x1NTg4OVx1NWJiOVx1NWViOFx1NjE0Mlx1Njk5NVx1NmQ4Y1x1NmU2N1x1NmViNlx1NzE5NFx1NzQ2Mlx1NzUy''@;'; put 'put ''OFx1NzUyY1x1ODA3M1x1ODMzOFx1ODRjOVx1OGUwYVx1OTM5NFx1OTNkZVx1ZjljNFx1NGU4ZVx1NGY1MVx1NTA3Nlx1NTEyYVx1NTNjOFx1NTNjYlx1NTNmM1x1NWI4N1x1NWJkM1x1NWMyNFx1NjExYVx1NjE4Mlx1NjVmNFx1NzI1Ylx1NzM5N1x1NzQ0MFx1NzZjMlx1Nzk1MFx1Nzk5MVx1''@;'; put 'put ''NzliOVx1N2QwNlx1N2ZiZFx1ODI4Ylx1ODVkNVx1ODY1ZVx1OGZjMlx1OTA0N1x1OTBmNVx1OTFlYVx1OTY4NVx1OTZlOFx1OTZlOVx1NTJkNlx1NWY2N1x1NjVlZFx1NjYzMVx1NjgyZlx1NzE1Y1x1N2EzNlx1OTBjMVx1OTgwYVx1NGU5MVx1ZjljNVx1NmE1Mlx1NmI5ZVx1NmY5MFx1NzE4''@;'; put 'put ''OVx1ODAxOFx1ODJiOFx1ODU1MyJdLFsiZWFhMSIsIlx1OTA0Ylx1OTY5NVx1OTZmMlx1OTdmYlx1ODUxYVx1OWIzMVx1NGU5MFx1NzE4YVx1OTZjNFx1NTE0M1x1NTM5Zlx1NTRlMVx1NTcxM1x1NTcxMlx1NTdhM1x1NWE5Ylx1NWFjNFx1NWJjM1x1NjAyOFx1NjEzZlx1NjNmNFx1NmM4NVx1''@;'; put 'put ''NmQzOVx1NmU3Mlx1NmU5MFx1NzIzMFx1NzMzZlx1NzQ1N1x1ODJkMVx1ODg4MVx1OGY0NVx1OTA2MFx1ZjljNlx1OTY2Mlx1OTg1OFx1OWQxYlx1NjcwOFx1OGQ4YVx1OTI1ZVx1NGY0ZFx1NTA0OVx1NTBkZVx1NTM3MVx1NTcwZFx1NTlkNFx1NWEwMVx1NWMwOVx1NjE3MFx1NjY5MFx1NmUy''@;'; put 'put ''ZFx1NzIzMlx1NzQ0Ylx1N2RlZlx1ODBjM1x1ODQwZVx1ODQ2Nlx1ODUzZlx1ODc1Zlx1ODg1Ylx1ODkxOFx1OGIwMlx1OTA1NVx1OTdjYlx1OWI0Zlx1NGU3M1x1NGY5MVx1NTExMlx1NTE2YVx1ZjljN1x1NTUyZlx1NTVhOVx1NWI3YVx1NWJhNVx1NWU3Y1x1NWU3ZFx1NWViZVx1NjBhMFx1''@;'; put 'put ''NjBkZlx1NjEwOFx1NjEwOVx1NjNjNFx1NjUzOFx1NjcwOVx1ZjljOFx1NjdkNFx1NjdkYVx1ZjljOVx1Njk2MVx1Njk2Mlx1NmNiOVx1NmQyN1x1ZjljYVx1NmUzOFx1ZjljYiJdLFsiZWJhMSIsIlx1NmZlMVx1NzMzNlx1NzMzN1x1ZjljY1x1NzQ1Y1x1NzUzMVx1ZjljZFx1NzY1Mlx1Zjlj''@;'; put 'put ''ZVx1ZjljZlx1N2RhZFx1ODFmZVx1ODQzOFx1ODhkNVx1OGE5OFx1OGFkYlx1OGFlZFx1OGUzMFx1OGU0Mlx1OTA0YVx1OTAzZVx1OTA3YVx1OTE0OVx1OTFjOVx1OTM2ZVx1ZjlkMFx1ZjlkMVx1NTgwOVx1ZjlkMlx1NmJkM1x1ODA4OVx1ODBiMlx1ZjlkM1x1ZjlkNFx1NTE0MVx1NTk2Ylx1''@;'; put 'put ''NWMzOVx1ZjlkNVx1ZjlkNlx1NmY2NFx1NzNhN1x1ODBlNFx1OGQwN1x1ZjlkN1x1OTIxN1x1OTU4Zlx1ZjlkOFx1ZjlkOVx1ZjlkYVx1ZjlkYlx1ODA3Zlx1NjIwZVx1NzAxY1x1N2Q2OFx1ODc4ZFx1ZjlkY1x1NTdhMFx1NjA2OVx1NjE0N1x1NmJiN1x1OGFiZVx1OTI4MFx1OTZiMVx1NGU1''@;'; put 'put ''OVx1NTQxZlx1NmRlYlx1ODUyZFx1OTY3MFx1OTdmM1x1OThlZVx1NjNkNlx1NmNlM1x1OTA5MVx1NTFkZFx1NjFjOVx1ODFiYVx1OWRmOVx1NGY5ZFx1NTAxYVx1NTEwMFx1NWI5Y1x1NjEwZlx1NjFmZlx1NjRlY1x1NjkwNVx1NmJjNVx1NzU5MVx1NzdlM1x1N2ZhOVx1ODI2NFx1ODU4Zlx1''@;'; put 'put ''ODdmYlx1ODg2M1x1OGFiYyJdLFsiZWNhMSIsIlx1OGI3MFx1OTFhYlx1NGU4Y1x1NGVlNVx1NGYwYVx1ZjlkZFx1ZjlkZVx1NTkzN1x1NTllOFx1ZjlkZlx1NWRmMlx1NWYxYlx1NWY1Ylx1NjAyMVx1ZjllMFx1ZjllMVx1ZjllMlx1ZjllM1x1NzIzZVx1NzNlNVx1ZjllNFx1NzU3MFx1NzVj''@;'; put 'put ''ZFx1ZjllNVx1NzlmYlx1ZjllNlx1ODAwY1x1ODAzM1x1ODA4NFx1ODJlMVx1ODM1MVx1ZjllN1x1ZjllOFx1OGNiZFx1OGNiM1x1OTA4N1x1ZjllOVx1ZjllYVx1OThmNFx1OTkwY1x1ZjllYlx1ZjllY1x1NzAzN1x1NzZjYVx1N2ZjYVx1N2ZjY1x1N2ZmY1x1OGIxYVx1NGViYVx1NGVjMVx1''@;'; put 'put ''NTIwM1x1NTM3MFx1ZjllZFx1NTRiZFx1NTZlMFx1NTlmYlx1NWJjNVx1NWYxNVx1NWZjZFx1NmU2ZVx1ZjllZVx1ZjllZlx1N2Q2YVx1ODMzNVx1ZjlmMFx1ODY5M1x1OGE4ZFx1ZjlmMVx1OTc2ZFx1OTc3N1x1ZjlmMlx1ZjlmM1x1NGUwMFx1NGY1YVx1NGY3ZVx1NThmOVx1NjVlNVx1NmVh''@;'; put 'put ''Mlx1OTAzOFx1OTNiMFx1OTliOVx1NGVmYlx1NThlY1x1NTk4YVx1NTlkOVx1NjA0MVx1ZjlmNFx1ZjlmNVx1N2ExNFx1ZjlmNlx1ODM0Zlx1OGNjM1x1NTE2NVx1NTM0NCJdLFsiZWRhMSIsIlx1ZjlmN1x1ZjlmOFx1ZjlmOVx1NGVjZFx1NTI2OVx1NWI1NVx1ODJiZlx1NGVkNFx1NTIzYVx1''@;'; put 'put ''NTRhOFx1NTljOVx1NTlmZlx1NWI1MFx1NWI1N1x1NWI1Y1x1NjA2M1x1NjE0OFx1NmVjYlx1NzA5OVx1NzE2ZVx1NzM4Nlx1NzRmN1x1NzViNVx1NzhjMVx1N2QyYlx1ODAwNVx1ODFlYVx1ODMyOFx1ODUxN1x1ODVjOVx1OGFlZVx1OGNjN1x1OTZjY1x1NGY1Y1x1NTJmYVx1NTZiY1x1NjVh''@;'; put 'put ''Ylx1NjYyOFx1NzA3Y1x1NzBiOFx1NzIzNVx1N2RiZFx1ODI4ZFx1OTE0Y1x1OTZjMFx1OWQ3Mlx1NWI3MVx1NjhlN1x1NmI5OFx1NmY3YVx1NzZkZVx1NWM5MVx1NjZhYlx1NmY1Ylx1N2JiNFx1N2MyYVx1ODgzNlx1OTZkY1x1NGUwOFx1NGVkN1x1NTMyMFx1NTgzNFx1NThiYlx1NThlZlx1''@;'; put 'put ''NTk2Y1x1NWMwN1x1NWUzM1x1NWU4NFx1NWYzNVx1NjM4Y1x1NjZiMlx1Njc1Nlx1NmExZlx1NmFhM1x1NmIwY1x1NmYzZlx1NzI0Nlx1ZjlmYVx1NzM1MFx1NzQ4Ylx1N2FlMFx1N2NhN1x1ODE3OFx1ODFkZlx1ODFlN1x1ODM4YVx1ODQ2Y1x1ODUyM1x1ODU5NFx1ODVjZlx1ODhkZFx1OGQx''@;'; put 'put ''M1x1OTFhY1x1OTU3NyJdLFsiZWVhMSIsIlx1OTY5Y1x1NTE4ZFx1NTRjOVx1NTcyOFx1NWJiMFx1NjI0ZFx1Njc1MFx1NjgzZFx1Njg5M1x1NmUzZFx1NmVkM1x1NzA3ZFx1N2UyMVx1ODhjMVx1OGNhMVx1OGYwOVx1OWY0Ylx1OWY0ZVx1NzIyZFx1N2I4Zlx1OGFjZFx1OTMxYVx1NGY0N1x1''@;'; put 'put ''NGY0ZVx1NTEzMlx1NTQ4MFx1NTlkMFx1NWU5NVx1NjJiNVx1Njc3NVx1Njk2ZVx1NmExN1x1NmNhZVx1NmUxYVx1NzJkOVx1NzMyYVx1NzViZFx1N2JiOFx1N2QzNVx1ODJlN1x1ODNmOVx1ODQ1N1x1ODVmN1x1OGE1Ylx1OGNhZlx1OGU4N1x1OTAxOVx1OTBiOFx1OTZjZVx1OWY1Zlx1NTJl''@;'; put 'put ''M1x1NTQwYVx1NWFlMVx1NWJjMlx1NjQ1OFx1NjU3NVx1NmVmNFx1NzJjNFx1ZjlmYlx1NzY4NFx1N2E0ZFx1N2IxYlx1N2M0ZFx1N2UzZVx1N2ZkZlx1ODM3Ylx1OGIyYlx1OGNjYVx1OGQ2NFx1OGRlMVx1OGU1Zlx1OGZlYVx1OGZmOVx1OTA2OVx1OTNkMVx1NGY0M1x1NGY3YVx1NTBiM1x1''@;'; put 'put ''NTE2OFx1NTE3OFx1NTI0ZFx1NTI2YVx1NTg2MVx1NTg3Y1x1NTk2MFx1NWMwOFx1NWM1NVx1NWVkYlx1NjA5Ylx1NjIzMFx1NjgxM1x1NmJiZlx1NmMwOFx1NmZiMSJdLFsiZWZhMSIsIlx1NzE0ZVx1NzQyMFx1NzUzMFx1NzUzOFx1NzU1MVx1NzY3Mlx1N2I0Y1x1N2I4Ylx1N2JhZFx1N2Jj''@;'; put 'put ''Nlx1N2U4Zlx1OGE2ZVx1OGYzZVx1OGY0OVx1OTIzZlx1OTI5M1x1OTMyMlx1OTQyYlx1OTZmYlx1OTg1YVx1OTg2Ylx1OTkxZVx1NTIwN1x1NjIyYVx1NjI5OFx1NmQ1OVx1NzY2NFx1N2FjYVx1N2JjMFx1N2Q3Nlx1NTM2MFx1NWNiZVx1NWU5N1x1NmYzOFx1NzBiOVx1N2M5OFx1OTcxMVx1''@;'; put 'put ''OWI4ZVx1OWVkZVx1NjNhNVx1NjQ3YVx1ODc3Nlx1NGUwMVx1NGU5NVx1NGVhZFx1NTA1Y1x1NTA3NVx1NTQ0OFx1NTljM1x1NWI5YVx1NWU0MFx1NWVhZFx1NWVmN1x1NWY4MVx1NjBjNVx1NjMzYVx1NjUzZlx1NjU3NFx1NjVjY1x1NjY3Nlx1NjY3OFx1NjdmZVx1Njk2OFx1NmE4OVx1NmI2''@;'; put 'put ''M1x1NmM0MFx1NmRjMFx1NmRlOFx1NmUxZlx1NmU1ZVx1NzAxZVx1NzBhMVx1NzM4ZVx1NzNmZFx1NzUzYVx1Nzc1Ylx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2E3ZFx1N2NiZVx1N2Q4ZVx1ODI0N1x1OGEwMlx1OGFlYVx1OGM5ZVx1OTEyZFx1OTE0YVx1OTFkOFx1OTI2Nlx1OTJjY1x1OTMyMFx1''@;'; put 'put ''OTcwNlx1OTc1NiJdLFsiZjBhMSIsIlx1OTc1Y1x1OTgwMlx1OWYwZVx1NTIzNlx1NTI5MVx1NTU3Y1x1NTgyNFx1NWUxZFx1NWYxZlx1NjA4Y1x1NjNkMFx1NjhhZlx1NmZkZlx1Nzk2ZFx1N2IyY1x1ODFjZFx1ODViYVx1ODhmZFx1OGFmOFx1OGU0NFx1OTE4ZFx1OTY2NFx1OTY5Ylx1OTcz''@;'; put 'put ''ZFx1OTg0Y1x1OWY0YVx1NGZjZVx1NTE0Nlx1NTFjYlx1NTJhOVx1NTYzMlx1NWYxNFx1NWY2Ylx1NjNhYVx1NjRjZFx1NjVlOVx1NjY0MVx1NjZmYVx1NjZmOVx1NjcxZFx1Njg5ZFx1NjhkN1x1NjlmZFx1NmYxNVx1NmY2ZVx1NzE2N1x1NzFlNVx1NzIyYVx1NzRhYVx1NzczYVx1Nzk1Nlx1''@;'; put 'put ''Nzk1YVx1NzlkZlx1N2EyMFx1N2E5NVx1N2M5N1x1N2NkZlx1N2Q0NFx1N2U3MFx1ODA4N1x1ODVmYlx1ODZhNFx1OGE1NFx1OGFiZlx1OGQ5OVx1OGU4MVx1OTAyMFx1OTA2ZFx1OTFlM1x1OTYzYlx1OTZkNVx1OWNlNVx1NjVjZlx1N2MwN1x1OGRiM1x1OTNjM1x1NWI1OFx1NWMwYVx1NTM1''@;'; put 'put ''Mlx1NjJkOVx1NzMxZFx1NTAyN1x1NWI5N1x1NWY5ZVx1NjBiMFx1NjE2Ylx1NjhkNVx1NmRkOVx1NzQyZVx1N2EyZVx1N2Q0Mlx1N2Q5Y1x1N2UzMVx1ODE2YiJdLFsiZjFhMSIsIlx1OGUyYVx1OGUzNVx1OTM3ZVx1OTQxOFx1NGY1MFx1NTc1MFx1NWRlNlx1NWVhN1x1NjMyYlx1N2Y2YVx1''@;'; put 'put ''NGUzYlx1NGY0Zlx1NGY4Zlx1NTA1YVx1NTlkZFx1ODBjNFx1NTQ2YVx1NTQ2OFx1NTVmZVx1NTk0Zlx1NWI5OVx1NWRkZVx1NWVkYVx1NjY1ZFx1NjczMVx1NjdmMVx1NjgyYVx1NmNlOFx1NmQzMlx1NmU0YVx1NmY4ZFx1NzBiN1x1NzNlMFx1NzU4N1x1N2M0Y1x1N2QwMlx1N2QyY1x1N2Rh''@;'; put 'put ''Mlx1ODIxZlx1ODZkYlx1OGEzYlx1OGE4NVx1OGQ3MFx1OGU4YVx1OGYzM1x1OTAzMVx1OTE0ZVx1OTE1Mlx1OTQ0NFx1OTlkMFx1N2FmOVx1N2NhNVx1NGZjYVx1NTEwMVx1NTFjNlx1NTdjOFx1NWJlZlx1NWNmYlx1NjY1OVx1NmEzZFx1NmQ1YVx1NmU5Nlx1NmZlY1x1NzEwY1x1NzU2Zlx1''@;'; put 'put ''N2FlM1x1ODgyMlx1OTAyMVx1OTA3NVx1OTZjYlx1OTlmZlx1ODMwMVx1NGUyZFx1NGVmMlx1ODg0Nlx1OTFjZFx1NTM3ZFx1NmFkYlx1Njk2Ylx1NmM0MVx1ODQ3YVx1NTg5ZVx1NjE4ZVx1NjZmZVx1NjJlZlx1NzBkZFx1NzUxMVx1NzVjN1x1N2U1Mlx1ODRiOFx1OGI0OVx1OGQwOFx1NGU0''@;'; put 'put ''Ylx1NTNlYSJdLFsiZjJhMSIsIlx1NTRhYlx1NTczMFx1NTc0MFx1NWZkN1x1NjMwMVx1NjMwN1x1NjQ2Zlx1NjUyZlx1NjVlOFx1NjY3YVx1Njc5ZFx1NjdiM1x1NmI2Mlx1NmM2MFx1NmM5YVx1NmYyY1x1NzdlNVx1NzgyNVx1Nzk0OVx1Nzk1N1x1N2QxOVx1ODBhMlx1ODEwMlx1ODFmM1x1''@;'; put 'put ''ODI5ZFx1ODJiN1x1ODcxOFx1OGE4Y1x1ZjlmY1x1OGQwNFx1OGRiZVx1OTA3Mlx1NzZmNFx1N2ExOVx1N2EzN1x1N2U1NFx1ODA3N1x1NTUwN1x1NTVkNFx1NTg3NVx1NjMyZlx1NjQyMlx1NjY0OVx1NjY0Ylx1Njg2ZFx1Njk5Ylx1NmI4NFx1NmQyNVx1NmViMVx1NzNjZFx1NzQ2OFx1NzRh''@;'; put 'put ''MVx1NzU1Ylx1NzViOVx1NzZlMVx1NzcxZVx1Nzc4Ylx1NzllNlx1N2UwOVx1N2UxZFx1ODFmYlx1ODUyZlx1ODg5N1x1OGEzYVx1OGNkMVx1OGVlYlx1OGZiMFx1OTAzMlx1OTNhZFx1OTY2M1x1OTY3M1x1OTcwN1x1NGY4NFx1NTNmMVx1NTllYVx1NWFjOVx1NWUxOVx1Njg0ZVx1NzRjNlx1''@;'; put 'put ''NzViZVx1NzllOVx1N2E5Mlx1ODFhM1x1ODZlZFx1OGNlYVx1OGRjY1x1OGZlZFx1NjU5Zlx1NjcxNVx1ZjlmZFx1NTdmN1x1NmY1N1x1N2RkZFx1OGYyZiJdLFsiZjNhMSIsIlx1OTNmNlx1OTZjNlx1NWZiNVx1NjFmMlx1NmY4NFx1NGUxNFx1NGY5OFx1NTAxZlx1NTNjOVx1NTVkZlx1NWQ2''@;'; put 'put ''Zlx1NWRlZVx1NmIyMVx1NmI2NFx1NzhjYlx1N2I5YVx1ZjlmZVx1OGU0OVx1OGVjYVx1OTA2ZVx1NjM0OVx1NjQzZVx1Nzc0MFx1N2E4NFx1OTMyZlx1OTQ3Zlx1OWY2YVx1NjRiMFx1NmZhZlx1NzFlNlx1NzRhOFx1NzRkYVx1N2FjNFx1N2MxMlx1N2U4Mlx1N2NiMlx1N2U5OFx1OGI5YVx1''@;'; put 'put ''OGQwYVx1OTQ3ZFx1OTkxMFx1OTk0Y1x1NTIzOVx1NWJkZlx1NjRlNlx1NjcyZFx1N2QyZVx1NTBlZFx1NTNjM1x1NTg3OVx1NjE1OFx1NjE1OVx1NjFmYVx1NjVhY1x1N2FkOVx1OGI5Mlx1OGI5Nlx1NTAwOVx1NTAyMVx1NTI3NVx1NTUzMVx1NWEzY1x1NWVlMFx1NWY3MFx1NjEzNFx1NjU1''@;'; put 'put ''ZVx1NjYwY1x1NjYzNlx1NjZhMlx1NjljZFx1NmVjNFx1NmYzMlx1NzMxNlx1NzYyMVx1N2E5M1x1ODEzOVx1ODI1OVx1ODNkNlx1ODRiY1x1NTBiNVx1NTdmMFx1NWJjMFx1NWJlOFx1NWY2OVx1NjNhMVx1NzgyNlx1N2RiNVx1ODNkY1x1ODUyMVx1OTFjN1x1OTFmNVx1NTE4YVx1NjdmNVx1''@;'; put 'put ''N2I1NiJdLFsiZjRhMSIsIlx1OGNhY1x1NTFjNFx1NTliYlx1NjBiZFx1ODY1NVx1NTAxY1x1ZjlmZlx1NTI1NFx1NWMzYVx1NjE3ZFx1NjIxYVx1NjJkM1x1NjRmMlx1NjVhNVx1NmVjY1x1NzYyMFx1ODEwYVx1OGU2MFx1OTY1Zlx1OTZiYlx1NGVkZlx1NTM0M1x1NTU5OFx1NTkyOVx1NWRk''@;'; put 'put ''ZFx1NjRjNVx1NmNjOVx1NmRmYVx1NzM5NFx1N2E3Zlx1ODIxYlx1ODVhNlx1OGNlNFx1OGUxMFx1OTA3N1x1OTFlN1x1OTVlMVx1OTYyMVx1OTdjNlx1NTFmOFx1NTRmMlx1NTU4Nlx1NWZiOVx1NjRhNFx1NmY4OFx1N2RiNFx1OGYxZlx1OGY0ZFx1OTQzNVx1NTBjOVx1NWMxNlx1NmNiZVx1''@;'; put 'put ''NmRmYlx1NzUxYlx1NzdiYlx1N2MzZFx1N2M2NFx1OGE3OVx1OGFjMlx1NTgxZVx1NTliZVx1NWUxNlx1NjM3N1x1NzI1Mlx1NzU4YVx1Nzc2Ylx1OGFkY1x1OGNiY1x1OGYxMlx1NWVmM1x1NjY3NFx1NmRmOFx1ODA3ZFx1ODNjMVx1OGFjYlx1OTc1MVx1OWJkNlx1ZmEwMFx1NTI0M1x1NjZm''@;'; put 'put ''Zlx1NmQ5NVx1NmVlZlx1N2RlMFx1OGFlNlx1OTAyZVx1OTA1ZVx1OWFkNFx1NTIxZFx1NTI3Zlx1NTRlOFx1NjE5NFx1NjI4NFx1NjJkYlx1NjhhMiJdLFsiZjVhMSIsIlx1NjkxMlx1Njk1YVx1NmEzNVx1NzA5Mlx1NzEyNlx1Nzg1ZFx1NzkwMVx1NzkwZVx1NzlkMlx1N2EwZFx1ODA5Nlx1''@;'; put 'put ''ODI3OFx1ODJkNVx1ODM0OVx1ODU0OVx1OGM4Mlx1OGQ4NVx1OTE2Mlx1OTE4Ylx1OTFhZVx1NGZjM1x1NTZkMVx1NzFlZFx1NzdkN1x1ODcwMFx1ODlmOFx1NWJmOFx1NWZkNlx1Njc1MVx1OTBhOFx1NTNlMlx1NTg1YVx1NWJmNVx1NjBhNFx1NjE4MVx1NjQ2MFx1N2UzZFx1ODA3MFx1ODUy''@;'; put 'put ''NVx1OTI4M1x1NjRhZVx1NTBhY1x1NWQxNFx1NjcwMFx1NTg5Y1x1NjJiZFx1NjNhOFx1NjkwZVx1Njk3OFx1NmExZVx1NmU2Ylx1NzZiYVx1NzljYlx1ODJiYlx1ODQyOVx1OGFjZlx1OGRhOFx1OGZmZFx1OTExMlx1OTE0Ylx1OTE5Y1x1OTMxMFx1OTMxOFx1OTM5YVx1OTZkYlx1OWEzNlx1''@;'; put 'put ''OWMwZFx1NGUxMVx1NzU1Y1x1Nzk1ZFx1N2FmYVx1N2I1MVx1N2JjOVx1N2UyZVx1ODRjNFx1OGU1OVx1OGU3NFx1OGVmOFx1OTAxMFx1NjYyNVx1NjkzZlx1NzQ0M1x1NTFmYVx1NjcyZVx1OWVkY1x1NTE0NVx1NWZlMFx1NmM5Nlx1ODdmMlx1ODg1ZFx1ODg3N1x1NjBiNFx1ODFiNVx1ODQw''@;'; put 'put ''MyJdLFsiZjZhMSIsIlx1OGQwNVx1NTNkNlx1NTQzOVx1NTYzNFx1NWEzNlx1NWMzMVx1NzA4YVx1N2ZlMFx1ODA1YVx1ODEwNlx1ODFlZFx1OGRhM1x1OTE4OVx1OWE1Zlx1OWRmMlx1NTA3NFx1NGVjNFx1NTNhMFx1NjBmYlx1NmUyY1x1NWM2NFx1NGY4OFx1NTAyNFx1NTVlNFx1NWNkOVx1''@;'; put 'put ''NWU1Zlx1NjA2NVx1Njg5NFx1NmNiYlx1NmRjNFx1NzFiZVx1NzVkNFx1NzVmNFx1NzY2MVx1N2ExYVx1N2E0OVx1N2RjN1x1N2RmYlx1N2Y2ZVx1ODFmNFx1ODZhOVx1OGYxY1x1OTZjOVx1OTliM1x1OWY1Mlx1NTI0N1x1NTJjNVx1OThlZFx1ODlhYVx1NGUwM1x1NjdkMlx1NmYwNlx1NGZi''@;'; put 'put ''NVx1NWJlMlx1Njc5NVx1NmM4OFx1NmQ3OFx1NzQxYlx1NzgyN1x1OTFkZFx1OTM3Y1x1ODdjNFx1NzllNFx1N2EzMVx1NWZlYlx1NGVkNlx1NTRhNFx1NTUzZVx1NThhZVx1NTlhNVx1NjBmMFx1NjI1M1x1NjJkNlx1NjczNlx1Njk1NVx1ODIzNVx1OTY0MFx1OTliMVx1OTlkZFx1NTAyY1x1''@;'; put 'put ''NTM1M1x1NTU0NFx1NTc3Y1x1ZmEwMVx1NjI1OFx1ZmEwMlx1NjRlMlx1NjY2Ylx1NjdkZFx1NmZjMVx1NmZlZlx1NzQyMlx1NzQzOFx1OGExNyJdLFsiZjdhMSIsIlx1OTQzOFx1NTQ1MVx1NTYwNlx1NTc2Nlx1NWY0OFx1NjE5YVx1NmI0ZVx1NzA1OFx1NzBhZFx1N2RiYlx1OGE5NVx1NTk2''@;'; put 'put ''YVx1ODEyYlx1NjNhMlx1NzcwOFx1ODAzZFx1OGNhYVx1NTg1NFx1NjQyZFx1NjliYlx1NWI5NVx1NWUxMVx1NmU2Zlx1ZmEwM1x1ODU2OVx1NTE0Y1x1NTNmMFx1NTkyYVx1NjAyMFx1NjE0Ylx1NmI4Nlx1NmM3MFx1NmNmMFx1N2IxZVx1ODBjZVx1ODJkNFx1OGRjNlx1OTBiMFx1OThiMVx1''@;'; put 'put ''ZmEwNFx1NjRjN1x1NmZhNFx1NjQ5MVx1NjUwNFx1NTE0ZVx1NTQxMFx1NTcxZlx1OGEwZVx1NjE1Zlx1Njg3Nlx1ZmEwNVx1NzVkYlx1N2I1Mlx1N2Q3MVx1OTAxYVx1NTgwNlx1NjljY1x1ODE3Zlx1ODkyYVx1OTAwMFx1OTgzOVx1NTA3OFx1NTk1N1x1NTlhY1x1NjI5NVx1OTAwZlx1OWIy''@;'; put 'put ''YVx1NjE1ZFx1NzI3OVx1OTVkNlx1NTc2MVx1NWE0Nlx1NWRmNFx1NjI4YVx1NjRhZFx1NjRmYVx1Njc3N1x1NmNlMlx1NmQzZVx1NzIyY1x1NzQzNlx1NzgzNFx1N2Y3N1x1ODJhZFx1OGRkYlx1OTgxN1x1NTIyNFx1NTc0Mlx1Njc3Zlx1NzI0OFx1NzRlM1x1OGNhOVx1OGZhNlx1OTIxMSJd''@;'; put 'put ''LFsiZjhhMSIsIlx1OTYyYVx1NTE2Ylx1NTNlZFx1NjM0Y1x1NGY2OVx1NTUwNFx1NjA5Nlx1NjU1N1x1NmM5Ylx1NmQ3Zlx1NzI0Y1x1NzJmZFx1N2ExN1x1ODk4N1x1OGM5ZFx1NWY2ZFx1NmY4ZVx1NzBmOVx1ODFhOFx1NjEwZVx1NGZiZlx1NTA0Zlx1NjI0MVx1NzI0N1x1N2JjN1x1N2Rl''@;'; put 'put ''OFx1N2ZlOVx1OTA0ZFx1OTdhZFx1OWExOVx1OGNiNlx1NTc2YVx1NWU3M1x1NjdiMFx1ODQwZFx1OGE1NVx1NTQyMFx1NWIxNlx1NWU2M1x1NWVlMlx1NWYwYVx1NjU4M1x1ODBiYVx1ODUzZFx1OTU4OVx1OTY1Ylx1NGY0OFx1NTMwNVx1NTMwZFx1NTMwZlx1NTQ4Nlx1NTRmYVx1NTcwM1x1''@;'; put 'put ''NWUwM1x1NjAxNlx1NjI5Ylx1NjJiMVx1NjM1NVx1ZmEwNlx1NmNlMVx1NmQ2Nlx1NzViMVx1NzgzMlx1ODBkZVx1ODEyZlx1ODJkZVx1ODQ2MVx1ODRiMlx1ODg4ZFx1ODkxMlx1OTAwYlx1OTJlYVx1OThmZFx1OWI5MVx1NWU0NVx1NjZiNFx1NjZkZFx1NzAxMVx1NzIwNlx1ZmEwN1x1NGZm''@;'; put 'put ''NVx1NTI3ZFx1NWY2YVx1NjE1M1x1Njc1M1x1NmExOVx1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGM3OVx1OThjN1x1OThjNFx1OWE0MyJdLFsiZjlhMSIsIlx1NTRjMVx1N2ExZlx1Njk1M1x1OGFmN1x1OGM0YVx1OThhOFx1OTlhZVx1NWY3Y1x1NjJhYlx1NzViMlx1NzZhZVx1ODhhYlx1''@;'; put 'put ''OTA3Zlx1OTY0Mlx1NTMzOVx1NWYzY1x1NWZjNVx1NmNjY1x1NzNjY1x1NzU2Mlx1NzU4Ylx1N2I0Nlx1ODJmZVx1OTk5ZFx1NGU0Zlx1OTAzY1x1NGUwYlx1NGY1NVx1NTNhNlx1NTkwZlx1NWVjOFx1NjYzMFx1NmNiM1x1NzQ1NVx1ODM3N1x1ODc2Nlx1OGNjMFx1OTA1MFx1OTcxZVx1OWMx''@;'; put 'put ''NVx1NThkMVx1NWI3OFx1ODY1MFx1OGIxNFx1OWRiNFx1NWJkMlx1NjA2OFx1NjA4ZFx1NjVmMVx1NmM1N1x1NmYyMlx1NmZhM1x1NzAxYVx1N2Y1NVx1N2ZmMFx1OTU5MVx1OTU5Mlx1OTY1MFx1OTdkM1x1NTI3Mlx1OGY0NFx1NTFmZFx1NTQyYlx1NTRiOFx1NTU2M1x1NTU4YVx1NmFiYlx1''@;'; put 'put ''NmRiNVx1N2RkOFx1ODI2Nlx1OTI5Y1x1OTY3N1x1OWU3OVx1NTQwOFx1NTRjOFx1NzZkMlx1ODZlNFx1OTVhNFx1OTVkNFx1OTY1Y1x1NGVhMlx1NGYwOVx1NTllZVx1NWFlNlx1NWRmN1x1NjA1Mlx1NjI5N1x1Njc2ZFx1Njg0MVx1NmM4Nlx1NmUyZlx1N2YzOFx1ODA5Ylx1ODIyYSJdLFsi''@;'; put 'put ''ZmFhMSIsIlx1ZmEwOFx1ZmEwOVx1OTgwNVx1NGVhNVx1NTA1NVx1NTRiM1x1NTc5M1x1NTk1YVx1NWI2OVx1NWJiM1x1NjFjOFx1Njk3N1x1NmQ3N1x1NzAyM1x1ODdmOVx1ODllM1x1OGE3Mlx1OGFlN1x1OTA4Mlx1OTllZFx1OWFiOFx1NTJiZVx1NjgzOFx1NTAxNlx1NWU3OFx1Njc0Zlx1''@;'; put 'put ''ODM0N1x1ODg0Y1x1NGVhYlx1NTQxMVx1NTZhZVx1NzNlNlx1OTExNVx1OTdmZlx1OTkwOVx1OTk1N1x1OTk5OVx1NTY1M1x1NTg5Zlx1ODY1Ylx1OGEzMVx1NjFiMlx1NmFmNlx1NzM3Ylx1OGVkMlx1NmI0N1x1OTZhYVx1OWE1N1x1NTk1NVx1NzIwMFx1OGQ2Ylx1OTc2OVx1NGZkNFx1NWNm''@;'; put 'put ''NFx1NWYyNlx1NjFmOFx1NjY1Ylx1NmNlYlx1NzBhYlx1NzM4NFx1NzNiOVx1NzNmZVx1NzcyOVx1Nzc0ZFx1N2Q0M1x1N2Q2Mlx1N2UyM1x1ODIzN1x1ODg1Mlx1ZmEwYVx1OGNlMlx1OTI0OVx1OTg2Zlx1NWI1MVx1N2E3NFx1ODg0MFx1OTgwMVx1NWFjY1x1NGZlMFx1NTM1NFx1NTkzZVx1''@;'; put 'put ''NWNmZFx1NjMzZVx1NmQ3OVx1NzJmOVx1ODEwNVx1ODEwN1x1ODNhMlx1OTJjZlx1OTgzMFx1NGVhOFx1NTE0NFx1NTIxMVx1NTc4YiJdLFsiZmJhMSIsIlx1NWY2Mlx1NmNjMlx1NmVjZVx1NzAwNVx1NzA1MFx1NzBhZlx1NzE5Mlx1NzNlOVx1NzQ2OVx1ODM0YVx1ODdhMlx1ODg2MVx1OTAw''@;'; put 'put ''OFx1OTBhMlx1OTNhM1x1OTlhOFx1NTE2ZVx1NWY1N1x1NjBlMFx1NjE2N1x1NjZiM1x1ODU1OVx1OGU0YVx1OTFhZlx1OTc4Ylx1NGU0ZVx1NGU5Mlx1NTQ3Y1x1NThkNVx1NThmYVx1NTk3ZFx1NWNiNVx1NWYyN1x1NjIzNlx1NjI0OFx1NjYwYVx1NjY2N1x1NmJlYlx1NmQ2OVx1NmRjZlx1''@;'; put 'put ''NmU1Nlx1NmVmOFx1NmY5NFx1NmZlMFx1NmZlOVx1NzA1ZFx1NzJkMFx1NzQyNVx1NzQ1YVx1NzRlMFx1NzY5M1x1Nzk1Y1x1N2NjYVx1N2UxZVx1ODBlMVx1ODJhNlx1ODQ2Ylx1ODRiZlx1ODY0ZVx1ODY1Zlx1ODc3NFx1OGI3N1x1OGM2YVx1OTNhY1x1OTgwMFx1OTg2NVx1NjBkMVx1NjIx''@;'; put 'put ''Nlx1OTE3N1x1NWE1YVx1NjYwZlx1NmRmN1x1NmUzZVx1NzQzZlx1OWI0Mlx1NWZmZFx1NjBkYVx1N2IwZlx1NTRjNFx1NWYxOFx1NmM1ZVx1NmNkM1x1NmQyYVx1NzBkOFx1N2QwNVx1ODY3OVx1OGEwY1x1OWQzYlx1NTMxNlx1NTQ4Y1x1NWIwNVx1NmEzYVx1NzA2Ylx1NzU3NSJdLFsiZmNh''@;'; put 'put ''MSIsIlx1Nzk4ZFx1NzliZVx1ODJiMVx1ODNlZlx1OGE3MVx1OGI0MVx1OGNhOFx1OTc3NFx1ZmEwYlx1NjRmNFx1NjUyYlx1NzhiYVx1NzhiYlx1N2E2Ylx1NGUzOFx1NTU5YVx1NTk1MFx1NWJhNlx1NWU3Ylx1NjBhM1x1NjNkYlx1NmI2MVx1NjY2NVx1Njg1M1x1NmUxOVx1NzE2NVx1NzRi''@;'; put 'put ''MFx1N2QwOFx1OTA4NFx1OWE2OVx1OWMyNVx1NmQzYlx1NmVkMVx1NzMzZVx1OGM0MVx1OTVjYVx1NTFmMFx1NWU0Y1x1NWZhOFx1NjA0ZFx1NjBmNlx1NjEzMFx1NjE0Y1x1NjY0M1x1NjY0NFx1NjlhNVx1NmNjMVx1NmU1Zlx1NmVjOVx1NmY2Mlx1NzE0Y1x1NzQ5Y1x1NzY4N1x1N2JjMVx1''@;'; put 'put ''N2MyN1x1ODM1Mlx1ODc1N1x1OTA1MVx1OTY4ZFx1OWVjM1x1NTMyZlx1NTZkZVx1NWVmYlx1NWY4YVx1NjA2Mlx1NjA5NFx1NjFmN1x1NjY2Nlx1NjcwM1x1NmE5Y1x1NmRlZVx1NmZhZVx1NzA3MFx1NzM2YVx1N2U2YVx1ODFiZVx1ODMzNFx1ODZkNFx1OGFhOFx1OGNjNFx1NTI4M1x1NzM3''@;'; put 'put ''Mlx1NWI5Nlx1NmE2Ylx1OTQwNFx1NTRlZVx1NTY4Nlx1NWI1ZFx1NjU0OFx1NjU4NVx1NjZjOVx1Njg5Zlx1NmQ4ZFx1NmRjNiJdLFsiZmRhMSIsIlx1NzIzYlx1ODBiNFx1OTE3NVx1OWE0ZFx1NGZhZlx1NTAxOVx1NTM5YVx1NTQwZVx1NTQzY1x1NTU4OVx1NTVjNVx1NWUzZlx1NWY4Y1x1''@;'; put 'put ''NjczZFx1NzE2Nlx1NzNkZFx1OTAwNVx1NTJkYlx1NTJmM1x1NTg2NFx1NThjZVx1NzEwNFx1NzE4Zlx1NzFmYlx1ODViMFx1OGExM1x1NjY4OFx1ODVhOFx1NTVhN1x1NjY4NFx1NzE0YVx1ODQzMVx1NTM0OVx1NTU5OVx1NmJjMVx1NWY1OVx1NWZiZFx1NjNlZVx1NjY4OVx1NzE0N1x1OGFm''@;'; put 'put ''MVx1OGYxZFx1OWViZVx1NGYxMVx1NjQzYVx1NzBjYlx1NzU2Nlx1ODY2N1x1NjA2NFx1OGI0ZVx1OWRmOFx1NTE0N1x1NTFmNlx1NTMwOFx1NmQzNlx1ODBmOFx1OWVkMVx1NjYxNVx1NmIyM1x1NzA5OFx1NzVkNVx1NTQwM1x1NWM3OVx1N2QwN1x1OGExNlx1NmIyMFx1NmIzZFx1NmI0Nlx1''@;'; put 'put ''NTQzOFx1NjA3MFx1NmQzZFx1N2ZkNVx1ODIwOFx1NTBkNlx1NTFkZVx1NTU5Y1x1NTY2Ylx1NTZjZFx1NTllY1x1NWIwOVx1NWUwY1x1NjE5OVx1NjE5OFx1NjIzMVx1NjY1ZVx1NjZlNlx1NzE5OVx1NzFiOVx1NzFiYVx1NzJhN1x1NzlhN1x1N2EwMFx1N2ZiMlx1OGE3MCJdXScpfSw3MjMy''@;'; put 'put ''NChmZSl7InVzZSBzdHJpY3QiO2ZlLmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siMCIsIlxcdTAwMDAiLDEyN10sWyJhMTQwIiwiXHUzMDAwXHVmZjBjXHUzMDAxXHUzMDAyXHVmZjBlXHUyMDI3XHVmZjFiXHVmZjFhXHVmZjFmXHVmZjAxXHVmZTMwXHUyMDI2XHUyMDI1XHVmZTUwXHVmZTUxXHVm''@;'; put 'put ''ZTUyXHhiN1x1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1N1x1ZmY1Y1x1MjAxM1x1ZmUzMVx1MjAxNFx1ZmUzM1x1MjU3NFx1ZmUzNFx1ZmU0Zlx1ZmYwOFx1ZmYwOVx1ZmUzNVx1ZmUzNlx1ZmY1Ylx1ZmY1ZFx1ZmUzN1x1ZmUzOFx1MzAxNFx1MzAxNVx1ZmUzOVx1ZmUzYVx1MzAxMFx1MzAxMVx1''@;'; put 'put ''ZmUzYlx1ZmUzY1x1MzAwYVx1MzAwYlx1ZmUzZFx1ZmUzZVx1MzAwOFx1MzAwOVx1ZmUzZlx1ZmU0MFx1MzAwY1x1MzAwZFx1ZmU0MVx1ZmU0Mlx1MzAwZVx1MzAwZlx1ZmU0M1x1ZmU0NFx1ZmU1OVx1ZmU1YSJdLFsiYTFhMSIsIlx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1MjAxOFx1MjAx''@;'; put 'put ''OVx1MjAxY1x1MjAxZFx1MzAxZFx1MzAxZVx1MjAzNVx1MjAzMlx1ZmYwM1x1ZmYwNlx1ZmYwYVx1MjAzYlx4YTdcdTMwMDNcdTI1Y2JcdTI1Y2ZcdTI1YjNcdTI1YjJcdTI1Y2VcdTI2MDZcdTI2MDVcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YmRcdTI1YmNcdTMyYTNcdTIxMDVceGFm''@;'; put 'put ''XHVmZmUzXHVmZjNmXHUwMmNkXHVmZTQ5XHVmZTRhXHVmZTRkXHVmZTRlXHVmZTRiXHVmZTRjXHVmZTVmXHVmZTYwXHVmZTYxXHVmZjBiXHVmZjBkXHhkN1x4ZjdceGIxXHUyMjFhXHVmZjFjXHVmZjFlXHVmZjFkXHUyMjY2XHUyMjY3XHUyMjYwXHUyMjFlXHUyMjUyXHUyMjYxXHVmZTYyIiw0''@;'; put 'put ''LCJcdWZmNWVcdTIyMjlcdTIyMmFcdTIyYTVcdTIyMjBcdTIyMWZcdTIyYmZcdTMzZDJcdTMzZDFcdTIyMmJcdTIyMmVcdTIyMzVcdTIyMzRcdTI2NDBcdTI2NDJcdTIyOTVcdTIyOTlcdTIxOTFcdTIxOTNcdTIxOTBcdTIxOTJcdTIxOTZcdTIxOTdcdTIxOTlcdTIxOThcdTIyMjVcdTIyMjNc''@;'; put 'put ''dWZmMGYiXSxbImEyNDAiLCJcdWZmM2NcdTIyMTVcdWZlNjhcdWZmMDRcdWZmZTVcdTMwMTJcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMjBcdTIxMDNcdTIxMDlcdWZlNjlcdWZlNmFcdWZlNmJcdTMzZDVcdTMzOWNcdTMzOWRcdTMzOWVcdTMzY2VcdTMzYTFcdTMzOGVcdTMzOGZcdTMzYzRceGIw''@;'; put 'put ''XHU1MTU5XHU1MTViXHU1MTVlXHU1MTVkXHU1MTYxXHU1MTYzXHU1NWU3XHU3NGU5XHU3Y2NlXHUyNTgxIiw3LCJcdTI1OGZcdTI1OGVcdTI1OGRcdTI1OGNcdTI1OGJcdTI1OGFcdTI1ODlcdTI1M2NcdTI1MzRcdTI1MmNcdTI1MjRcdTI1MWNcdTI1OTRcdTI1MDBcdTI1MDJcdTI1OTVcdTI1''@;'; put 'put ''MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1NmQiXSxbImEyYTEiLCJcdTI1NmVcdTI1NzBcdTI1NmZcdTI1NTBcdTI1NWVcdTI1NmFcdTI1NjFcdTI1ZTJcdTI1ZTNcdTI1ZTVcdTI1ZTRcdTI1NzFcdTI1NzJcdTI1NzNcdWZmMTAiLDksIlx1MjE2MCIsOSwiXHUzMDIxIiw4LCJcdTUzNDFcdTUz''@;'; put 'put ''NDRcdTUzNDVcdWZmMjEiLDI1LCJcdWZmNDEiLDIxXSxbImEzNDAiLCJcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdTAzOTEiLDE2LCJcdTAzYTMiLDYsIlx1MDNiMSIsMTYsIlx1MDNjMyIsNiwiXHUzMTA1IiwxMF0sWyJhM2ExIiwiXHUzMTEwIiwyNSwiXHUwMmQ5XHUwMmM5XHUwMmNhXHUw''@;'; put 'put ''MmM3XHUwMmNiIl0sWyJhM2UxIiwiXHUyMGFjIl0sWyJhNDQwIiwiXHU0ZTAwXHU0ZTU5XHU0ZTAxXHU0ZTAzXHU0ZTQzXHU0ZTVkXHU0ZTg2XHU0ZThjXHU0ZWJhXHU1MTNmXHU1MTY1XHU1MTZiXHU1MWUwXHU1MjAwXHU1MjAxXHU1MjliXHU1MzE1XHU1MzQxXHU1MzVjXHU1M2M4XHU0ZTA5''@;'; put 'put ''XHU0ZTBiXHU0ZTA4XHU0ZTBhXHU0ZTJiXHU0ZTM4XHU1MWUxXHU0ZTQ1XHU0ZTQ4XHU0ZTVmXHU0ZTVlXHU0ZThlXHU0ZWExXHU1MTQwXHU1MjAzXHU1MmZhXHU1MzQzXHU1M2M5XHU1M2UzXHU1NzFmXHU1OGViXHU1OTE1XHU1OTI3XHU1OTczXHU1YjUwXHU1YjUxXHU1YjUzXHU1YmY4XHU1''@;'; put 'put ''YzBmXHU1YzIyXHU1YzM4XHU1YzcxXHU1ZGRkXHU1ZGU1XHU1ZGYxXHU1ZGYyXHU1ZGYzXHU1ZGZlXHU1ZTcyXHU1ZWZlXHU1ZjBiXHU1ZjEzXHU2MjRkIl0sWyJhNGExIiwiXHU0ZTExXHU0ZTEwXHU0ZTBkXHU0ZTJkXHU0ZTMwXHU0ZTM5XHU0ZTRiXHU1YzM5XHU0ZTg4XHU0ZTkxXHU0ZTk1''@;'; put 'put ''XHU0ZTkyXHU0ZTk0XHU0ZWEyXHU0ZWMxXHU0ZWMwXHU0ZWMzXHU0ZWM2XHU0ZWM3XHU0ZWNkXHU0ZWNhXHU0ZWNiXHU0ZWM0XHU1MTQzXHU1MTQxXHU1MTY3XHU1MTZkXHU1MTZlXHU1MTZjXHU1MTk3XHU1MWY2XHU1MjA2XHU1MjA3XHU1MjA4XHU1MmZiXHU1MmZlXHU1MmZmXHU1MzE2XHU1''@;'; put 'put ''MzM5XHU1MzQ4XHU1MzQ3XHU1MzQ1XHU1MzVlXHU1Mzg0XHU1M2NiXHU1M2NhXHU1M2NkXHU1OGVjXHU1OTI5XHU1OTJiXHU1OTJhXHU1OTJkXHU1YjU0XHU1YzExXHU1YzI0XHU1YzNhXHU1YzZmXHU1ZGY0XHU1ZTdiXHU1ZWZmXHU1ZjE0XHU1ZjE1XHU1ZmMzXHU2MjA4XHU2MjM2XHU2MjRi''@;'; put 'put ''XHU2MjRlXHU2NTJmXHU2NTg3XHU2NTk3XHU2NWE0XHU2NWI5XHU2NWU1XHU2NmYwXHU2NzA4XHU2NzI4XHU2YjIwXHU2YjYyXHU2Yjc5XHU2YmNiXHU2YmQ0XHU2YmRiXHU2YzBmXHU2YzM0XHU3MDZiXHU3MjJhXHU3MjM2XHU3MjNiXHU3MjQ3XHU3MjU5XHU3MjViXHU3MmFjXHU3MzhiXHU0''@;'; put 'put ''ZTE5Il0sWyJhNTQwIiwiXHU0ZTE2XHU0ZTE1XHU0ZTE0XHU0ZTE4XHU0ZTNiXHU0ZTRkXHU0ZTRmXHU0ZTRlXHU0ZWU1XHU0ZWQ4XHU0ZWQ0XHU0ZWQ1XHU0ZWQ2XHU0ZWQ3XHU0ZWUzXHU0ZWU0XHU0ZWQ5XHU0ZWRlXHU1MTQ1XHU1MTQ0XHU1MTg5XHU1MThhXHU1MWFjXHU1MWY5XHU1MWZh''@;'; put 'put ''XHU1MWY4XHU1MjBhXHU1MmEwXHU1MjlmXHU1MzA1XHU1MzA2XHU1MzE3XHU1MzFkXHU0ZWRmXHU1MzRhXHU1MzQ5XHU1MzYxXHU1MzYwXHU1MzZmXHU1MzZlXHU1M2JiXHU1M2VmXHU1M2U0XHU1M2YzXHU1M2VjXHU1M2VlXHU1M2U5XHU1M2U4XHU1M2ZjXHU1M2Y4XHU1M2Y1XHU1M2ViXHU1''@;'; put 'put ''M2U2XHU1M2VhXHU1M2YyXHU1M2YxXHU1M2YwXHU1M2U1XHU1M2VkXHU1M2ZiXHU1NmRiXHU1NmRhXHU1OTE2Il0sWyJhNWExIiwiXHU1OTJlXHU1OTMxXHU1OTc0XHU1OTc2XHU1YjU1XHU1YjgzXHU1YzNjXHU1ZGU4XHU1ZGU3XHU1ZGU2XHU1ZTAyXHU1ZTAzXHU1ZTczXHU1ZTdjXHU1ZjAx''@;'; put 'put ''XHU1ZjE4XHU1ZjE3XHU1ZmM1XHU2MjBhXHU2MjUzXHU2MjU0XHU2MjUyXHU2MjUxXHU2NWE1XHU2NWU2XHU2NzJlXHU2NzJjXHU2NzJhXHU2NzJiXHU2NzJkXHU2YjYzXHU2YmNkXHU2YzExXHU2YzEwXHU2YzM4XHU2YzQxXHU2YzQwXHU2YzNlXHU3MmFmXHU3Mzg0XHU3Mzg5XHU3NGRjXHU3''@;'; put 'put ''NGU2XHU3NTE4XHU3NTFmXHU3NTI4XHU3NTI5XHU3NTMwXHU3NTMxXHU3NTMyXHU3NTMzXHU3NThiXHU3NjdkXHU3NmFlXHU3NmJmXHU3NmVlXHU3N2RiXHU3N2UyXHU3N2YzXHU3OTNhXHU3OWJlXHU3YTc0XHU3YWNiXHU0ZTFlXHU0ZTFmXHU0ZTUyXHU0ZTUzXHU0ZTY5XHU0ZTk5XHU0ZWE0''@;'; put 'put ''XHU0ZWE2XHU0ZWE1XHU0ZWZmXHU0ZjA5XHU0ZjE5XHU0ZjBhXHU0ZjE1XHU0ZjBkXHU0ZjEwXHU0ZjExXHU0ZjBmXHU0ZWYyXHU0ZWY2XHU0ZWZiXHU0ZWYwXHU0ZWYzXHU0ZWZkXHU0ZjAxXHU0ZjBiXHU1MTQ5XHU1MTQ3XHU1MTQ2XHU1MTQ4XHU1MTY4Il0sWyJhNjQwIiwiXHU1MTcxXHU1''@;'; put 'put ''MThkXHU1MWIwXHU1MjE3XHU1MjExXHU1MjEyXHU1MjBlXHU1MjE2XHU1MmEzXHU1MzA4XHU1MzIxXHU1MzIwXHU1MzcwXHU1MzcxXHU1NDA5XHU1NDBmXHU1NDBjXHU1NDBhXHU1NDEwXHU1NDAxXHU1NDBiXHU1NDA0XHU1NDExXHU1NDBkXHU1NDA4XHU1NDAzXHU1NDBlXHU1NDA2XHU1NDEy''@;'; put 'put ''XHU1NmUwXHU1NmRlXHU1NmRkXHU1NzMzXHU1NzMwXHU1NzI4XHU1NzJkXHU1NzJjXHU1NzJmXHU1NzI5XHU1OTE5XHU1OTFhXHU1OTM3XHU1OTM4XHU1OTg0XHU1OTc4XHU1OTgzXHU1OTdkXHU1OTc5XHU1OTgyXHU1OTgxXHU1YjU3XHU1YjU4XHU1Yjg3XHU1Yjg4XHU1Yjg1XHU1Yjg5XHU1''@;'; put 'put ''YmZhXHU1YzE2XHU1Yzc5XHU1ZGRlXHU1ZTA2XHU1ZTc2XHU1ZTc0Il0sWyJhNmExIiwiXHU1ZjBmXHU1ZjFiXHU1ZmQ5XHU1ZmQ2XHU2MjBlXHU2MjBjXHU2MjBkXHU2MjEwXHU2MjYzXHU2MjViXHU2MjU4XHU2NTM2XHU2NWU5XHU2NWU4XHU2NWVjXHU2NWVkXHU2NmYyXHU2NmYzXHU2NzA5''@;'; put 'put ''XHU2NzNkXHU2NzM0XHU2NzMxXHU2NzM1XHU2YjIxXHU2YjY0XHU2YjdiXHU2YzE2XHU2YzVkXHU2YzU3XHU2YzU5XHU2YzVmXHU2YzYwXHU2YzUwXHU2YzU1XHU2YzYxXHU2YzViXHU2YzRkXHU2YzRlXHU3MDcwXHU3MjVmXHU3MjVkXHU3NjdlXHU3YWY5XHU3YzczXHU3Y2Y4XHU3ZjM2XHU3''@;'; put 'put ''ZjhhXHU3ZmJkXHU4MDAxXHU4MDAzXHU4MDBjXHU4MDEyXHU4MDMzXHU4MDdmXHU4MDg5XHU4MDhiXHU4MDhjXHU4MWUzXHU4MWVhXHU4MWYzXHU4MWZjXHU4MjBjXHU4MjFiXHU4MjFmXHU4MjZlXHU4MjcyXHU4MjdlXHU4NjZiXHU4ODQwXHU4ODRjXHU4ODYzXHU4OTdmXHU5NjIxXHU0ZTMy''@;'; put 'put ''XHU0ZWE4XHU0ZjRkXHU0ZjRmXHU0ZjQ3XHU0ZjU3XHU0ZjVlXHU0ZjM0XHU0ZjViXHU0ZjU1XHU0ZjMwXHU0ZjUwXHU0ZjUxXHU0ZjNkXHU0ZjNhXHU0ZjM4XHU0ZjQzXHU0ZjU0XHU0ZjNjXHU0ZjQ2XHU0ZjYzIl0sWyJhNzQwIiwiXHU0ZjVjXHU0ZjYwXHU0ZjJmXHU0ZjRlXHU0ZjM2XHU0''@;'; put 'put ''ZjU5XHU0ZjVkXHU0ZjQ4XHU0ZjVhXHU1MTRjXHU1MTRiXHU1MTRkXHU1MTc1XHU1MWI2XHU1MWI3XHU1MjI1XHU1MjI0XHU1MjI5XHU1MjJhXHU1MjI4XHU1MmFiXHU1MmE5XHU1MmFhXHU1MmFjXHU1MzIzXHU1MzczXHU1Mzc1XHU1NDFkXHU1NDJkXHU1NDFlXHU1NDNlXHU1NDI2XHU1NDRl''@;'; put 'put ''XHU1NDI3XHU1NDQ2XHU1NDQzXHU1NDMzXHU1NDQ4XHU1NDQyXHU1NDFiXHU1NDI5XHU1NDRhXHU1NDM5XHU1NDNiXHU1NDM4XHU1NDJlXHU1NDM1XHU1NDM2XHU1NDIwXHU1NDNjXHU1NDQwXHU1NDMxXHU1NDJiXHU1NDFmXHU1NDJjXHU1NmVhXHU1NmYwXHU1NmU0XHU1NmViXHU1NzRhXHU1''@;'; put 'put ''NzUxXHU1NzQwXHU1NzRkIl0sWyJhN2ExIiwiXHU1NzQ3XHU1NzRlXHU1NzNlXHU1NzUwXHU1NzRmXHU1NzNiXHU1OGVmXHU1OTNlXHU1OTlkXHU1OTkyXHU1OWE4XHU1OTllXHU1OWEzXHU1OTk5XHU1OTk2XHU1OThkXHU1OWE0XHU1OTkzXHU1OThhXHU1OWE1XHU1YjVkXHU1YjVjXHU1YjVh''@;'; put 'put ''XHU1YjViXHU1YjhjXHU1YjhiXHU1YjhmXHU1YzJjXHU1YzQwXHU1YzQxXHU1YzNmXHU1YzNlXHU1YzkwXHU1YzkxXHU1Yzk0XHU1YzhjXHU1ZGViXHU1ZTBjXHU1ZThmXHU1ZTg3XHU1ZThhXHU1ZWY3XHU1ZjA0XHU1ZjFmXHU1ZjY0XHU1ZjYyXHU1Zjc3XHU1Zjc5XHU1ZmQ4XHU1ZmNjXHU1''@;'; put 'put ''ZmQ3XHU1ZmNkXHU1ZmYxXHU1ZmViXHU1ZmY4XHU1ZmVhXHU2MjEyXHU2MjExXHU2Mjg0XHU2Mjk3XHU2Mjk2XHU2MjgwXHU2Mjc2XHU2Mjg5XHU2MjZkXHU2MjhhXHU2MjdjXHU2MjdlXHU2Mjc5XHU2MjczXHU2MjkyXHU2MjZmXHU2Mjk4XHU2MjZlXHU2Mjk1XHU2MjkzXHU2MjkxXHU2Mjg2''@;'; put 'put ''XHU2NTM5XHU2NTNiXHU2NTM4XHU2NWYxXHU2NmY0XHU2NzVmXHU2NzRlXHU2NzRmXHU2NzUwXHU2NzUxXHU2NzVjXHU2NzU2XHU2NzVlXHU2NzQ5XHU2NzQ2XHU2NzYwIl0sWyJhODQwIiwiXHU2NzUzXHU2NzU3XHU2YjY1XHU2YmNmXHU2YzQyXHU2YzVlXHU2Yzk5XHU2YzgxXHU2Yzg4XHU2''@;'; put 'put ''Yzg5XHU2Yzg1XHU2YzliXHU2YzZhXHU2YzdhXHU2YzkwXHU2YzcwXHU2YzhjXHU2YzY4XHU2Yzk2XHU2YzkyXHU2YzdkXHU2YzgzXHU2YzcyXHU2YzdlXHU2Yzc0XHU2Yzg2XHU2Yzc2XHU2YzhkXHU2Yzk0XHU2Yzk4XHU2YzgyXHU3MDc2XHU3MDdjXHU3MDdkXHU3MDc4XHU3MjYyXHU3MjYx''@;'; put 'put ''XHU3MjYwXHU3MmM0XHU3MmMyXHU3Mzk2XHU3NTJjXHU3NTJiXHU3NTM3XHU3NTM4XHU3NjgyXHU3NmVmXHU3N2UzXHU3OWMxXHU3OWMwXHU3OWJmXHU3YTc2XHU3Y2ZiXHU3ZjU1XHU4MDk2XHU4MDkzXHU4MDlkXHU4MDk4XHU4MDliXHU4MDlhXHU4MGIyXHU4MjZmXHU4MjkyIl0sWyJhOGEx''@;'; put 'put ''IiwiXHU4MjhiXHU4MjhkXHU4OThiXHU4OWQyXHU4YTAwXHU4YzM3XHU4YzQ2XHU4YzU1XHU4YzlkXHU4ZDY0XHU4ZDcwXHU4ZGIzXHU4ZWFiXHU4ZWNhXHU4ZjliXHU4ZmIwXHU4ZmMyXHU4ZmM2XHU4ZmM1XHU4ZmM0XHU1ZGUxXHU5MDkxXHU5MGEyXHU5MGFhXHU5MGE2XHU5MGEzXHU5MTQ5''@;'; put 'put ''XHU5MWM2XHU5MWNjXHU5NjMyXHU5NjJlXHU5NjMxXHU5NjJhXHU5NjJjXHU0ZTI2XHU0ZTU2XHU0ZTczXHU0ZThiXHU0ZTliXHU0ZTllXHU0ZWFiXHU0ZWFjXHU0ZjZmXHU0ZjlkXHU0ZjhkXHU0ZjczXHU0ZjdmXHU0ZjZjXHU0ZjliXHU0ZjhiXHU0Zjg2XHU0ZjgzXHU0ZjcwXHU0Zjc1XHU0''@;'; put 'put ''Zjg4XHU0ZjY5XHU0ZjdiXHU0Zjk2XHU0ZjdlXHU0ZjhmXHU0ZjkxXHU0ZjdhXHU1MTU0XHU1MTUyXHU1MTU1XHU1MTY5XHU1MTc3XHU1MTc2XHU1MTc4XHU1MWJkXHU1MWZkXHU1MjNiXHU1MjM4XHU1MjM3XHU1MjNhXHU1MjMwXHU1MjJlXHU1MjM2XHU1MjQxXHU1MmJlXHU1MmJiXHU1MzUy''@;'; put 'put ''XHU1MzU0XHU1MzUzXHU1MzUxXHU1MzY2XHU1Mzc3XHU1Mzc4XHU1Mzc5XHU1M2Q2XHU1M2Q0XHU1M2Q3XHU1NDczXHU1NDc1Il0sWyJhOTQwIiwiXHU1NDk2XHU1NDc4XHU1NDk1XHU1NDgwXHU1NDdiXHU1NDc3XHU1NDg0XHU1NDkyXHU1NDg2XHU1NDdjXHU1NDkwXHU1NDcxXHU1NDc2XHU1''@;'; put 'put ''NDhjXHU1NDlhXHU1NDYyXHU1NDY4XHU1NDhiXHU1NDdkXHU1NDhlXHU1NmZhXHU1NzgzXHU1Nzc3XHU1NzZhXHU1NzY5XHU1NzYxXHU1NzY2XHU1NzY0XHU1NzdjXHU1OTFjXHU1OTQ5XHU1OTQ3XHU1OTQ4XHU1OTQ0XHU1OTU0XHU1OWJlXHU1OWJiXHU1OWQ0XHU1OWI5XHU1OWFlXHU1OWQx''@;'; put 'put ''XHU1OWM2XHU1OWQwXHU1OWNkXHU1OWNiXHU1OWQzXHU1OWNhXHU1OWFmXHU1OWIzXHU1OWQyXHU1OWM1XHU1YjVmXHU1YjY0XHU1YjYzXHU1Yjk3XHU1YjlhXHU1Yjk4XHU1YjljXHU1Yjk5XHU1YjliXHU1YzFhXHU1YzQ4XHU1YzQ1Il0sWyJhOWExIiwiXHU1YzQ2XHU1Y2I3XHU1Y2ExXHU1''@;'; put 'put ''Y2I4XHU1Y2E5XHU1Y2FiXHU1Y2IxXHU1Y2IzXHU1ZTE4XHU1ZTFhXHU1ZTE2XHU1ZTE1XHU1ZTFiXHU1ZTExXHU1ZTc4XHU1ZTlhXHU1ZTk3XHU1ZTljXHU1ZTk1XHU1ZTk2XHU1ZWY2XHU1ZjI2XHU1ZjI3XHU1ZjI5XHU1ZjgwXHU1ZjgxXHU1ZjdmXHU1ZjdjXHU1ZmRkXHU1ZmUwXHU1ZmZk''@;'; put 'put ''XHU1ZmY1XHU1ZmZmXHU2MDBmXHU2MDE0XHU2MDJmXHU2MDM1XHU2MDE2XHU2MDJhXHU2MDE1XHU2MDIxXHU2MDI3XHU2MDI5XHU2MDJiXHU2MDFiXHU2MjE2XHU2MjE1XHU2MjNmXHU2MjNlXHU2MjQwXHU2MjdmXHU2MmM5XHU2MmNjXHU2MmM0XHU2MmJmXHU2MmMyXHU2MmI5XHU2MmQyXHU2''@;'; put 'put ''MmRiXHU2MmFiXHU2MmQzXHU2MmQ0XHU2MmNiXHU2MmM4XHU2MmE4XHU2MmJkXHU2MmJjXHU2MmQwXHU2MmQ5XHU2MmM3XHU2MmNkXHU2MmI1XHU2MmRhXHU2MmIxXHU2MmQ4XHU2MmQ2XHU2MmQ3XHU2MmM2XHU2MmFjXHU2MmNlXHU2NTNlXHU2NWE3XHU2NWJjXHU2NWZhXHU2NjE0XHU2NjEz''@;'; put 'put ''XHU2NjBjXHU2NjA2XHU2NjAyXHU2NjBlXHU2NjAwXHU2NjBmXHU2NjE1XHU2NjBhIl0sWyJhYTQwIiwiXHU2NjA3XHU2NzBkXHU2NzBiXHU2NzZkXHU2NzhiXHU2Nzk1XHU2NzcxXHU2NzljXHU2NzczXHU2Nzc3XHU2Nzg3XHU2NzlkXHU2Nzk3XHU2NzZmXHU2NzcwXHU2NzdmXHU2Nzg5XHU2''@;'; put 'put ''NzdlXHU2NzkwXHU2Nzc1XHU2NzlhXHU2NzkzXHU2NzdjXHU2NzZhXHU2NzcyXHU2YjIzXHU2YjY2XHU2YjY3XHU2YjdmXHU2YzEzXHU2YzFiXHU2Y2UzXHU2Y2U4XHU2Y2YzXHU2Y2IxXHU2Y2NjXHU2Y2U1XHU2Y2IzXHU2Y2JkXHU2Y2JlXHU2Y2JjXHU2Y2UyXHU2Y2FiXHU2Y2Q1XHU2Y2Qz''@;'; put 'put ''XHU2Y2I4XHU2Y2M0XHU2Y2I5XHU2Y2MxXHU2Y2FlXHU2Y2Q3XHU2Y2M1XHU2Y2YxXHU2Y2JmXHU2Y2JiXHU2Y2UxXHU2Y2RiXHU2Y2NhXHU2Y2FjXHU2Y2VmXHU2Y2RjXHU2Y2Q2XHU2Y2UwIl0sWyJhYWExIiwiXHU3MDk1XHU3MDhlXHU3MDkyXHU3MDhhXHU3MDk5XHU3MjJjXHU3MjJkXHU3''@;'; put 'put ''MjM4XHU3MjQ4XHU3MjY3XHU3MjY5XHU3MmMwXHU3MmNlXHU3MmQ5XHU3MmQ3XHU3MmQwXHU3M2E5XHU3M2E4XHU3MzlmXHU3M2FiXHU3M2E1XHU3NTNkXHU3NTlkXHU3NTk5XHU3NTlhXHU3Njg0XHU3NmMyXHU3NmYyXHU3NmY0XHU3N2U1XHU3N2ZkXHU3OTNlXHU3OTQwXHU3OTQxXHU3OWM5''@;'; put 'put ''XHU3OWM4XHU3YTdhXHU3YTc5XHU3YWZhXHU3Y2ZlXHU3ZjU0XHU3ZjhjXHU3ZjhiXHU4MDA1XHU4MGJhXHU4MGE1XHU4MGEyXHU4MGIxXHU4MGExXHU4MGFiXHU4MGE5XHU4MGI0XHU4MGFhXHU4MGFmXHU4MWU1XHU4MWZlXHU4MjBkXHU4MmIzXHU4MjlkXHU4Mjk5XHU4MmFkXHU4MmJkXHU4''@;'; put 'put ''MjlmXHU4MmI5XHU4MmIxXHU4MmFjXHU4MmE1XHU4MmFmXHU4MmI4XHU4MmEzXHU4MmIwXHU4MmJlXHU4MmI3XHU4NjRlXHU4NjcxXHU1MjFkXHU4ODY4XHU4ZWNiXHU4ZmNlXHU4ZmQ0XHU4ZmQxXHU5MGI1XHU5MGI4XHU5MGIxXHU5MGI2XHU5MWM3XHU5MWQxXHU5NTc3XHU5NTgwXHU5NjFj''@;'; put 'put ''XHU5NjQwXHU5NjNmXHU5NjNiXHU5NjQ0Il0sWyJhYjQwIiwiXHU5NjQyXHU5NmI5XHU5NmU4XHU5NzUyXHU5NzVlXHU0ZTlmXHU0ZWFkXHU0ZWFlXHU0ZmUxXHU0ZmI1XHU0ZmFmXHU0ZmJmXHU0ZmUwXHU0ZmQxXHU0ZmNmXHU0ZmRkXHU0ZmMzXHU0ZmI2XHU0ZmQ4XHU0ZmRmXHU0ZmNhXHU0''@;'; put 'put ''ZmQ3XHU0ZmFlXHU0ZmQwXHU0ZmM0XHU0ZmMyXHU0ZmRhXHU0ZmNlXHU0ZmRlXHU0ZmI3XHU1MTU3XHU1MTkyXHU1MTkxXHU1MWEwXHU1MjRlXHU1MjQzXHU1MjRhXHU1MjRkXHU1MjRjXHU1MjRiXHU1MjQ3XHU1MmM3XHU1MmM5XHU1MmMzXHU1MmMxXHU1MzBkXHU1MzU3XHU1MzdiXHU1Mzlh''@;'; put 'put ''XHU1M2RiXHU1NGFjXHU1NGMwXHU1NGE4XHU1NGNlXHU1NGM5XHU1NGI4XHU1NGE2XHU1NGIzXHU1NGM3XHU1NGMyXHU1NGJkXHU1NGFhXHU1NGMxIl0sWyJhYmExIiwiXHU1NGM0XHU1NGM4XHU1NGFmXHU1NGFiXHU1NGIxXHU1NGJiXHU1NGE5XHU1NGE3XHU1NGJmXHU1NmZmXHU1NzgyXHU1''@;'; put 'put ''NzhiXHU1N2EwXHU1N2EzXHU1N2EyXHU1N2NlXHU1N2FlXHU1NzkzXHU1OTU1XHU1OTUxXHU1OTRmXHU1OTRlXHU1OTUwXHU1OWRjXHU1OWQ4XHU1OWZmXHU1OWUzXHU1OWU4XHU1YTAzXHU1OWU1XHU1OWVhXHU1OWRhXHU1OWU2XHU1YTAxXHU1OWZiXHU1YjY5XHU1YmEzXHU1YmE2XHU1YmE0''@;'; put 'put ''XHU1YmEyXHU1YmE1XHU1YzAxXHU1YzRlXHU1YzRmXHU1YzRkXHU1YzRiXHU1Y2Q5XHU1Y2QyXHU1ZGY3XHU1ZTFkXHU1ZTI1XHU1ZTFmXHU1ZTdkXHU1ZWEwXHU1ZWE2XHU1ZWZhXHU1ZjA4XHU1ZjJkXHU1ZjY1XHU1Zjg4XHU1Zjg1XHU1ZjhhXHU1ZjhiXHU1Zjg3XHU1ZjhjXHU1Zjg5XHU2''@;'; put 'put ''MDEyXHU2MDFkXHU2MDIwXHU2MDI1XHU2MDBlXHU2MDI4XHU2MDRkXHU2MDcwXHU2MDY4XHU2MDYyXHU2MDQ2XHU2MDQzXHU2MDZjXHU2MDZiXHU2MDZhXHU2MDY0XHU2MjQxXHU2MmRjXHU2MzE2XHU2MzA5XHU2MmZjXHU2MmVkXHU2MzAxXHU2MmVlXHU2MmZkXHU2MzA3XHU2MmYxXHU2MmY3''@;'; put 'put ''Il0sWyJhYzQwIiwiXHU2MmVmXHU2MmVjXHU2MmZlXHU2MmY0XHU2MzExXHU2MzAyXHU2NTNmXHU2NTQ1XHU2NWFiXHU2NWJkXHU2NWUyXHU2NjI1XHU2NjJkXHU2NjIwXHU2NjI3XHU2NjJmXHU2NjFmXHU2NjI4XHU2NjMxXHU2NjI0XHU2NmY3XHU2N2ZmXHU2N2QzXHU2N2YxXHU2N2Q0XHU2''@;'; put 'put ''N2QwXHU2N2VjXHU2N2I2XHU2N2FmXHU2N2Y1XHU2N2U5XHU2N2VmXHU2N2M0XHU2N2QxXHU2N2I0XHU2N2RhXHU2N2U1XHU2N2I4XHU2N2NmXHU2N2RlXHU2N2YzXHU2N2IwXHU2N2Q5XHU2N2UyXHU2N2RkXHU2N2QyXHU2YjZhXHU2YjgzXHU2Yjg2XHU2YmI1XHU2YmQyXHU2YmQ3XHU2YzFm''@;'; put 'put ''XHU2Y2M5XHU2ZDBiXHU2ZDMyXHU2ZDJhXHU2ZDQxXHU2ZDI1XHU2ZDBjXHU2ZDMxXHU2ZDFlXHU2ZDE3Il0sWyJhY2ExIiwiXHU2ZDNiXHU2ZDNkXHU2ZDNlXHU2ZDM2XHU2ZDFiXHU2Y2Y1XHU2ZDM5XHU2ZDI3XHU2ZDM4XHU2ZDI5XHU2ZDJlXHU2ZDM1XHU2ZDBlXHU2ZDJiXHU3MGFiXHU3''@;'; put 'put ''MGJhXHU3MGIzXHU3MGFjXHU3MGFmXHU3MGFkXHU3MGI4XHU3MGFlXHU3MGE0XHU3MjMwXHU3MjcyXHU3MjZmXHU3Mjc0XHU3MmU5XHU3MmUwXHU3MmUxXHU3M2I3XHU3M2NhXHU3M2JiXHU3M2IyXHU3M2NkXHU3M2MwXHU3M2IzXHU3NTFhXHU3NTJkXHU3NTRmXHU3NTRjXHU3NTRlXHU3NTRi''@;'; put 'put ''XHU3NWFiXHU3NWE0XHU3NWE1XHU3NWEyXHU3NWEzXHU3Njc4XHU3Njg2XHU3Njg3XHU3Njg4XHU3NmM4XHU3NmM2XHU3NmMzXHU3NmM1XHU3NzAxXHU3NmY5XHU3NmY4XHU3NzA5XHU3NzBiXHU3NmZlXHU3NmZjXHU3NzA3XHU3N2RjXHU3ODAyXHU3ODE0XHU3ODBjXHU3ODBkXHU3OTQ2XHU3''@;'; put 'put ''OTQ5XHU3OTQ4XHU3OTQ3XHU3OWI5XHU3OWJhXHU3OWQxXHU3OWQyXHU3OWNiXHU3YTdmXHU3YTgxXHU3YWZmXHU3YWZkXHU3YzdkXHU3ZDAyXHU3ZDA1XHU3ZDAwXHU3ZDA5XHU3ZDA3XHU3ZDA0XHU3ZDA2XHU3ZjM4XHU3ZjhlXHU3ZmJmXHU4MDA0Il0sWyJhZDQwIiwiXHU4MDEwXHU4MDBk''@;'; put 'put ''XHU4MDExXHU4MDM2XHU4MGQ2XHU4MGU1XHU4MGRhXHU4MGMzXHU4MGM0XHU4MGNjXHU4MGUxXHU4MGRiXHU4MGNlXHU4MGRlXHU4MGU0XHU4MGRkXHU4MWY0XHU4MjIyXHU4MmU3XHU4MzAzXHU4MzA1XHU4MmUzXHU4MmRiXHU4MmU2XHU4MzA0XHU4MmU1XHU4MzAyXHU4MzA5XHU4MmQyXHU4''@;'; put 'put ''MmQ3XHU4MmYxXHU4MzAxXHU4MmRjXHU4MmQ0XHU4MmQxXHU4MmRlXHU4MmQzXHU4MmRmXHU4MmVmXHU4MzA2XHU4NjUwXHU4Njc5XHU4NjdiXHU4NjdhXHU4ODRkXHU4ODZiXHU4OTgxXHU4OWQ0XHU4YTA4XHU4YTAyXHU4YTAzXHU4YzllXHU4Y2EwXHU4ZDc0XHU4ZDczXHU4ZGI0XHU4ZWNk''@;'; put 'put ''XHU4ZWNjXHU4ZmYwXHU4ZmU2XHU4ZmUyXHU4ZmVhXHU4ZmU1Il0sWyJhZGExIiwiXHU4ZmVkXHU4ZmViXHU4ZmU0XHU4ZmU4XHU5MGNhXHU5MGNlXHU5MGMxXHU5MGMzXHU5MTRiXHU5MTRhXHU5MWNkXHU5NTgyXHU5NjUwXHU5NjRiXHU5NjRjXHU5NjRkXHU5NzYyXHU5NzY5XHU5N2NiXHU5''@;'; put 'put ''N2VkXHU5N2YzXHU5ODAxXHU5OGE4XHU5OGRiXHU5OGRmXHU5OTk2XHU5OTk5XHU0ZTU4XHU0ZWIzXHU1MDBjXHU1MDBkXHU1MDIzXHU0ZmVmXHU1MDI2XHU1MDI1XHU0ZmY4XHU1MDI5XHU1MDE2XHU1MDA2XHU1MDNjXHU1MDFmXHU1MDFhXHU1MDEyXHU1MDExXHU0ZmZhXHU1MDAwXHU1MDE0''@;'; put 'put ''XHU1MDI4XHU0ZmYxXHU1MDIxXHU1MDBiXHU1MDE5XHU1MDE4XHU0ZmYzXHU0ZmVlXHU1MDJkXHU1MDJhXHU0ZmZlXHU1MDJiXHU1MDA5XHU1MTdjXHU1MWE0XHU1MWE1XHU1MWEyXHU1MWNkXHU1MWNjXHU1MWM2XHU1MWNiXHU1MjU2XHU1MjVjXHU1MjU0XHU1MjViXHU1MjVkXHU1MzJhXHU1''@;'; put 'put ''MzdmXHU1MzlmXHU1MzlkXHU1M2RmXHU1NGU4XHU1NTEwXHU1NTAxXHU1NTM3XHU1NGZjXHU1NGU1XHU1NGYyXHU1NTA2XHU1NGZhXHU1NTE0XHU1NGU5XHU1NGVkXHU1NGUxXHU1NTA5XHU1NGVlXHU1NGVhIl0sWyJhZTQwIiwiXHU1NGU2XHU1NTI3XHU1NTA3XHU1NGZkXHU1NTBmXHU1NzAz''@;'; put 'put ''XHU1NzA0XHU1N2MyXHU1N2Q0XHU1N2NiXHU1N2MzXHU1ODA5XHU1OTBmXHU1OTU3XHU1OTU4XHU1OTVhXHU1YTExXHU1YTE4XHU1YTFjXHU1YTFmXHU1YTFiXHU1YTEzXHU1OWVjXHU1YTIwXHU1YTIzXHU1YTI5XHU1YTI1XHU1YTBjXHU1YTA5XHU1YjZiXHU1YzU4XHU1YmIwXHU1YmIzXHU1''@;'; put 'put ''YmI2XHU1YmI0XHU1YmFlXHU1YmI1XHU1YmI5XHU1YmI4XHU1YzA0XHU1YzUxXHU1YzU1XHU1YzUwXHU1Y2VkXHU1Y2ZkXHU1Y2ZiXHU1Y2VhXHU1Y2U4XHU1Y2YwXHU1Y2Y2XHU1ZDAxXHU1Y2Y0XHU1ZGVlXHU1ZTJkXHU1ZTJiXHU1ZWFiXHU1ZWFkXHU1ZWE3XHU1ZjMxXHU1ZjkyXHU1Zjkx''@;'; put 'put ''XHU1ZjkwXHU2MDU5Il0sWyJhZWExIiwiXHU2MDYzXHU2MDY1XHU2MDUwXHU2MDU1XHU2MDZkXHU2MDY5XHU2MDZmXHU2MDg0XHU2MDlmXHU2MDlhXHU2MDhkXHU2MDk0XHU2MDhjXHU2MDg1XHU2MDk2XHU2MjQ3XHU2MmYzXHU2MzA4XHU2MmZmXHU2MzRlXHU2MzNlXHU2MzJmXHU2MzU1XHU2''@;'; put 'put ''MzQyXHU2MzQ2XHU2MzRmXHU2MzQ5XHU2MzNhXHU2MzUwXHU2MzNkXHU2MzJhXHU2MzJiXHU2MzI4XHU2MzRkXHU2MzRjXHU2NTQ4XHU2NTQ5XHU2NTk5XHU2NWMxXHU2NWM1XHU2NjQyXHU2NjQ5XHU2NjRmXHU2NjQzXHU2NjUyXHU2NjRjXHU2NjQ1XHU2NjQxXHU2NmY4XHU2NzE0XHU2NzE1''@;'; put 'put ''XHU2NzE3XHU2ODIxXHU2ODM4XHU2ODQ4XHU2ODQ2XHU2ODUzXHU2ODM5XHU2ODQyXHU2ODU0XHU2ODI5XHU2OGIzXHU2ODE3XHU2ODRjXHU2ODUxXHU2ODNkXHU2N2Y0XHU2ODUwXHU2ODQwXHU2ODNjXHU2ODQzXHU2ODJhXHU2ODQ1XHU2ODEzXHU2ODE4XHU2ODQxXHU2YjhhXHU2Yjg5XHU2''@;'; put 'put ''YmI3XHU2YzIzXHU2YzI3XHU2YzI4XHU2YzI2XHU2YzI0XHU2Y2YwXHU2ZDZhXHU2ZDk1XHU2ZDg4XHU2ZDg3XHU2ZDY2XHU2ZDc4XHU2ZDc3XHU2ZDU5XHU2ZDkzIl0sWyJhZjQwIiwiXHU2ZDZjXHU2ZDg5XHU2ZDZlXHU2ZDVhXHU2ZDc0XHU2ZDY5XHU2ZDhjXHU2ZDhhXHU2ZDc5XHU2ZDg1''@;'; put 'put ''XHU2ZDY1XHU2ZDk0XHU3MGNhXHU3MGQ4XHU3MGU0XHU3MGQ5XHU3MGM4XHU3MGNmXHU3MjM5XHU3Mjc5XHU3MmZjXHU3MmY5XHU3MmZkXHU3MmY4XHU3MmY3XHU3Mzg2XHU3M2VkXHU3NDA5XHU3M2VlXHU3M2UwXHU3M2VhXHU3M2RlXHU3NTU0XHU3NTVkXHU3NTVjXHU3NTVhXHU3NTU5XHU3''@;'; put 'put ''NWJlXHU3NWM1XHU3NWM3XHU3NWIyXHU3NWIzXHU3NWJkXHU3NWJjXHU3NWI5XHU3NWMyXHU3NWI4XHU3NjhiXHU3NmIwXHU3NmNhXHU3NmNkXHU3NmNlXHU3NzI5XHU3NzFmXHU3NzIwXHU3NzI4XHU3N2U5XHU3ODMwXHU3ODI3XHU3ODM4XHU3ODFkXHU3ODM0XHU3ODM3Il0sWyJhZmExIiwi''@;'; put 'put ''XHU3ODI1XHU3ODJkXHU3ODIwXHU3ODFmXHU3ODMyXHU3OTU1XHU3OTUwXHU3OTYwXHU3OTVmXHU3OTU2XHU3OTVlXHU3OTVkXHU3OTU3XHU3OTVhXHU3OWU0XHU3OWUzXHU3OWU3XHU3OWRmXHU3OWU2XHU3OWU5XHU3OWQ4XHU3YTg0XHU3YTg4XHU3YWQ5XHU3YjA2XHU3YjExXHU3Yzg5XHU3''@;'; put 'put ''ZDIxXHU3ZDE3XHU3ZDBiXHU3ZDBhXHU3ZDIwXHU3ZDIyXHU3ZDE0XHU3ZDEwXHU3ZDE1XHU3ZDFhXHU3ZDFjXHU3ZDBkXHU3ZDE5XHU3ZDFiXHU3ZjNhXHU3ZjVmXHU3Zjk0XHU3ZmM1XHU3ZmMxXHU4MDA2XHU4MDE4XHU4MDE1XHU4MDE5XHU4MDE3XHU4MDNkXHU4MDNmXHU4MGYxXHU4MTAy''@;'; put 'put ''XHU4MGYwXHU4MTA1XHU4MGVkXHU4MGY0XHU4MTA2XHU4MGY4XHU4MGYzXHU4MTA4XHU4MGZkXHU4MTBhXHU4MGZjXHU4MGVmXHU4MWVkXHU4MWVjXHU4MjAwXHU4MjEwXHU4MjJhXHU4MjJiXHU4MjI4XHU4MjJjXHU4MmJiXHU4MzJiXHU4MzUyXHU4MzU0XHU4MzRhXHU4MzM4XHU4MzUwXHU4''@;'; put 'put ''MzQ5XHU4MzM1XHU4MzM0XHU4MzRmXHU4MzMyXHU4MzM5XHU4MzM2XHU4MzE3XHU4MzQwXHU4MzMxXHU4MzI4XHU4MzQzIl0sWyJiMDQwIiwiXHU4NjU0XHU4NjhhXHU4NmFhXHU4NjkzXHU4NmE0XHU4NmE5XHU4NjhjXHU4NmEzXHU4NjljXHU4ODcwXHU4ODc3XHU4ODgxXHU4ODgyXHU4ODdk''@;'; put 'put ''XHU4ODc5XHU4YTE4XHU4YTEwXHU4YTBlXHU4YTBjXHU4YTE1XHU4YTBhXHU4YTE3XHU4YTEzXHU4YTE2XHU4YTBmXHU4YTExXHU4YzQ4XHU4YzdhXHU4Yzc5XHU4Y2ExXHU4Y2EyXHU4ZDc3XHU4ZWFjXHU4ZWQyXHU4ZWQ0XHU4ZWNmXHU4ZmIxXHU5MDAxXHU5MDA2XHU4ZmY3XHU5MDAwXHU4''@;'; put 'put ''ZmZhXHU4ZmY0XHU5MDAzXHU4ZmZkXHU5MDA1XHU4ZmY4XHU5MDk1XHU5MGUxXHU5MGRkXHU5MGUyXHU5MTUyXHU5MTRkXHU5MTRjXHU5MWQ4XHU5MWRkXHU5MWQ3XHU5MWRjXHU5MWQ5XHU5NTgzXHU5NjYyXHU5NjYzXHU5NjYxIl0sWyJiMGExIiwiXHU5NjViXHU5NjVkXHU5NjY0XHU5NjU4''@;'; put 'put ''XHU5NjVlXHU5NmJiXHU5OGUyXHU5OWFjXHU5YWE4XHU5YWQ4XHU5YjI1XHU5YjMyXHU5YjNjXHU0ZTdlXHU1MDdhXHU1MDdkXHU1MDVjXHU1MDQ3XHU1MDQzXHU1MDRjXHU1MDVhXHU1MDQ5XHU1MDY1XHU1MDc2XHU1MDRlXHU1MDU1XHU1MDc1XHU1MDc0XHU1MDc3XHU1MDRmXHU1MDBmXHU1''@;'; put 'put ''MDZmXHU1MDZkXHU1MTVjXHU1MTk1XHU1MWYwXHU1MjZhXHU1MjZmXHU1MmQyXHU1MmQ5XHU1MmQ4XHU1MmQ1XHU1MzEwXHU1MzBmXHU1MzE5XHU1MzNmXHU1MzQwXHU1MzNlXHU1M2MzXHU2NmZjXHU1NTQ2XHU1NTZhXHU1NTY2XHU1NTQ0XHU1NTVlXHU1NTYxXHU1NTQzXHU1NTRhXHU1NTMx''@;'; put 'put ''XHU1NTU2XHU1NTRmXHU1NTU1XHU1NTJmXHU1NTY0XHU1NTM4XHU1NTJlXHU1NTVjXHU1NTJjXHU1NTYzXHU1NTMzXHU1NTQxXHU1NTU3XHU1NzA4XHU1NzBiXHU1NzA5XHU1N2RmXHU1ODA1XHU1ODBhXHU1ODA2XHU1N2UwXHU1N2U0XHU1N2ZhXHU1ODAyXHU1ODM1XHU1N2Y3XHU1N2Y5XHU1''@;'; put 'put ''OTIwXHU1OTYyXHU1YTM2XHU1YTQxXHU1YTQ5XHU1YTY2XHU1YTZhXHU1YTQwIl0sWyJiMTQwIiwiXHU1YTNjXHU1YTYyXHU1YTVhXHU1YTQ2XHU1YTRhXHU1YjcwXHU1YmM3XHU1YmM1XHU1YmM0XHU1YmMyXHU1YmJmXHU1YmM2XHU1YzA5XHU1YzA4XHU1YzA3XHU1YzYwXHU1YzVjXHU1YzVk''@;'; put 'put ''XHU1ZDA3XHU1ZDA2XHU1ZDBlXHU1ZDFiXHU1ZDE2XHU1ZDIyXHU1ZDExXHU1ZDI5XHU1ZDE0XHU1ZDE5XHU1ZDI0XHU1ZDI3XHU1ZDE3XHU1ZGUyXHU1ZTM4XHU1ZTM2XHU1ZTMzXHU1ZTM3XHU1ZWI3XHU1ZWI4XHU1ZWI2XHU1ZWI1XHU1ZWJlXHU1ZjM1XHU1ZjM3XHU1ZjU3XHU1ZjZjXHU1''@;'; put 'put ''ZjY5XHU1ZjZiXHU1Zjk3XHU1Zjk5XHU1ZjllXHU1Zjk4XHU1ZmExXHU1ZmEwXHU1ZjljXHU2MDdmXHU2MGEzXHU2MDg5XHU2MGEwXHU2MGE4XHU2MGNiXHU2MGI0XHU2MGU2XHU2MGJkIl0sWyJiMWExIiwiXHU2MGM1XHU2MGJiXHU2MGI1XHU2MGRjXHU2MGJjXHU2MGQ4XHU2MGQ1XHU2MGM2''@;'; put 'put ''XHU2MGRmXHU2MGI4XHU2MGRhXHU2MGM3XHU2MjFhXHU2MjFiXHU2MjQ4XHU2M2EwXHU2M2E3XHU2MzcyXHU2Mzk2XHU2M2EyXHU2M2E1XHU2Mzc3XHU2MzY3XHU2Mzk4XHU2M2FhXHU2MzcxXHU2M2E5XHU2Mzg5XHU2MzgzXHU2MzliXHU2MzZiXHU2M2E4XHU2Mzg0XHU2Mzg4XHU2Mzk5XHU2''@;'; put 'put ''M2ExXHU2M2FjXHU2MzkyXHU2MzhmXHU2MzgwXHU2MzdiXHU2MzY5XHU2MzY4XHU2MzdhXHU2NTVkXHU2NTU2XHU2NTUxXHU2NTU5XHU2NTU3XHU1NTVmXHU2NTRmXHU2NTU4XHU2NTU1XHU2NTU0XHU2NTljXHU2NTliXHU2NWFjXHU2NWNmXHU2NWNiXHU2NWNjXHU2NWNlXHU2NjVkXHU2NjVh''@;'; put 'put ''XHU2NjY0XHU2NjY4XHU2NjY2XHU2NjVlXHU2NmY5XHU1MmQ3XHU2NzFiXHU2ODgxXHU2OGFmXHU2OGEyXHU2ODkzXHU2OGI1XHU2ODdmXHU2ODc2XHU2OGIxXHU2OGE3XHU2ODk3XHU2OGIwXHU2ODgzXHU2OGM0XHU2OGFkXHU2ODg2XHU2ODg1XHU2ODk0XHU2ODlkXHU2OGE4XHU2ODlmXHU2''@;'; put 'put ''OGExXHU2ODgyXHU2YjMyXHU2YmJhIl0sWyJiMjQwIiwiXHU2YmViXHU2YmVjXHU2YzJiXHU2ZDhlXHU2ZGJjXHU2ZGYzXHU2ZGQ5XHU2ZGIyXHU2ZGUxXHU2ZGNjXHU2ZGU0XHU2ZGZiXHU2ZGZhXHU2ZTA1XHU2ZGM3XHU2ZGNiXHU2ZGFmXHU2ZGQxXHU2ZGFlXHU2ZGRlXHU2ZGY5XHU2ZGI4''@;'; put 'put ''XHU2ZGY3XHU2ZGY1XHU2ZGM1XHU2ZGQyXHU2ZTFhXHU2ZGI1XHU2ZGRhXHU2ZGViXHU2ZGQ4XHU2ZGVhXHU2ZGYxXHU2ZGVlXHU2ZGU4XHU2ZGM2XHU2ZGM0XHU2ZGFhXHU2ZGVjXHU2ZGJmXHU2ZGU2XHU3MGY5XHU3MTA5XHU3MTBhXHU3MGZkXHU3MGVmXHU3MjNkXHU3MjdkXHU3MjgxXHU3''@;'; put 'put ''MzFjXHU3MzFiXHU3MzE2XHU3MzEzXHU3MzE5XHU3Mzg3XHU3NDA1XHU3NDBhXHU3NDAzXHU3NDA2XHU3M2ZlXHU3NDBkXHU3NGUwXHU3NGY2Il0sWyJiMmExIiwiXHU3NGY3XHU3NTFjXHU3NTIyXHU3NTY1XHU3NTY2XHU3NTYyXHU3NTcwXHU3NThmXHU3NWQ0XHU3NWQ1XHU3NWI1XHU3NWNh''@;'; put 'put ''XHU3NWNkXHU3NjhlXHU3NmQ0XHU3NmQyXHU3NmRiXHU3NzM3XHU3NzNlXHU3NzNjXHU3NzM2XHU3NzM4XHU3NzNhXHU3ODZiXHU3ODQzXHU3ODRlXHU3OTY1XHU3OTY4XHU3OTZkXHU3OWZiXHU3YTkyXHU3YTk1XHU3YjIwXHU3YjI4XHU3YjFiXHU3YjJjXHU3YjI2XHU3YjE5XHU3YjFlXHU3''@;'; put 'put ''YjJlXHU3YzkyXHU3Yzk3XHU3Yzk1XHU3ZDQ2XHU3ZDQzXHU3ZDcxXHU3ZDJlXHU3ZDM5XHU3ZDNjXHU3ZDQwXHU3ZDMwXHU3ZDMzXHU3ZDQ0XHU3ZDJmXHU3ZDQyXHU3ZDMyXHU3ZDMxXHU3ZjNkXHU3ZjllXHU3ZjlhXHU3ZmNjXHU3ZmNlXHU3ZmQyXHU4MDFjXHU4MDRhXHU4MDQ2XHU4MTJm''@;'; put 'put ''XHU4MTE2XHU4MTIzXHU4MTJiXHU4MTI5XHU4MTMwXHU4MTI0XHU4MjAyXHU4MjM1XHU4MjM3XHU4MjM2XHU4MjM5XHU4MzhlXHU4MzllXHU4Mzk4XHU4Mzc4XHU4M2EyXHU4Mzk2XHU4M2JkXHU4M2FiXHU4MzkyXHU4MzhhXHU4MzkzXHU4Mzg5XHU4M2EwXHU4Mzc3XHU4MzdiXHU4MzdjIl0s''@;'; put 'put ''WyJiMzQwIiwiXHU4Mzg2XHU4M2E3XHU4NjU1XHU1ZjZhXHU4NmM3XHU4NmMwXHU4NmI2XHU4NmM0XHU4NmI1XHU4NmM2XHU4NmNiXHU4NmIxXHU4NmFmXHU4NmM5XHU4ODUzXHU4ODllXHU4ODg4XHU4OGFiXHU4ODkyXHU4ODk2XHU4ODhkXHU4ODhiXHU4OTkzXHU4OThmXHU4YTJhXHU4YTFk''@;'; put 'put ''XHU4YTIzXHU4YTI1XHU4YTMxXHU4YTJkXHU4YTFmXHU4YTFiXHU4YTIyXHU4YzQ5XHU4YzVhXHU4Y2E5XHU4Y2FjXHU4Y2FiXHU4Y2E4XHU4Y2FhXHU4Y2E3XHU4ZDY3XHU4ZDY2XHU4ZGJlXHU4ZGJhXHU4ZWRiXHU4ZWRmXHU5MDE5XHU5MDBkXHU5MDFhXHU5MDE3XHU5MDIzXHU5MDFmXHU5''@;'; put 'put ''MDFkXHU5MDEwXHU5MDE1XHU5MDFlXHU5MDIwXHU5MDBmXHU5MDIyXHU5MDE2XHU5MDFiXHU5MDE0Il0sWyJiM2ExIiwiXHU5MGU4XHU5MGVkXHU5MGZkXHU5MTU3XHU5MWNlXHU5MWY1XHU5MWU2XHU5MWUzXHU5MWU3XHU5MWVkXHU5MWU5XHU5NTg5XHU5NjZhXHU5Njc1XHU5NjczXHU5Njc4''@;'; put 'put ''XHU5NjcwXHU5Njc0XHU5Njc2XHU5Njc3XHU5NjZjXHU5NmMwXHU5NmVhXHU5NmU5XHU3YWUwXHU3YWRmXHU5ODAyXHU5ODAzXHU5YjVhXHU5Y2U1XHU5ZTc1XHU5ZTdmXHU5ZWE1XHU5ZWJiXHU1MGEyXHU1MDhkXHU1MDg1XHU1MDk5XHU1MDkxXHU1MDgwXHU1MDk2XHU1MDk4XHU1MDlhXHU2''@;'; put 'put ''NzAwXHU1MWYxXHU1MjcyXHU1Mjc0XHU1Mjc1XHU1MjY5XHU1MmRlXHU1MmRkXHU1MmRiXHU1MzVhXHU1M2E1XHU1NTdiXHU1NTgwXHU1NWE3XHU1NTdjXHU1NThhXHU1NTlkXHU1NTk4XHU1NTgyXHU1NTljXHU1NWFhXHU1NTk0XHU1NTg3XHU1NThiXHU1NTgzXHU1NWIzXHU1NWFlXHU1NTlm''@;'; put 'put ''XHU1NTNlXHU1NWIyXHU1NTlhXHU1NWJiXHU1NWFjXHU1NWIxXHU1NTdlXHU1NTg5XHU1NWFiXHU1NTk5XHU1NzBkXHU1ODJmXHU1ODJhXHU1ODM0XHU1ODI0XHU1ODMwXHU1ODMxXHU1ODIxXHU1ODFkXHU1ODIwXHU1OGY5XHU1OGZhXHU1OTYwIl0sWyJiNDQwIiwiXHU1YTc3XHU1YTlhXHU1''@;'; put 'put ''YTdmXHU1YTkyXHU1YTliXHU1YWE3XHU1YjczXHU1YjcxXHU1YmQyXHU1YmNjXHU1YmQzXHU1YmQwXHU1YzBhXHU1YzBiXHU1YzMxXHU1ZDRjXHU1ZDUwXHU1ZDM0XHU1ZDQ3XHU1ZGZkXHU1ZTQ1XHU1ZTNkXHU1ZTQwXHU1ZTQzXHU1ZTdlXHU1ZWNhXHU1ZWMxXHU1ZWMyXHU1ZWM0XHU1ZjNj''@;'; put 'put ''XHU1ZjZkXHU1ZmE5XHU1ZmFhXHU1ZmE4XHU2MGQxXHU2MGUxXHU2MGIyXHU2MGI2XHU2MGUwXHU2MTFjXHU2MTIzXHU2MGZhXHU2MTE1XHU2MGYwXHU2MGZiXHU2MGY0XHU2MTY4XHU2MGYxXHU2MTBlXHU2MGY2XHU2MTA5XHU2MTAwXHU2MTEyXHU2MjFmXHU2MjQ5XHU2M2EzXHU2MzhjXHU2''@;'; put 'put ''M2NmXHU2M2MwXHU2M2U5XHU2M2M5XHU2M2M2XHU2M2NkIl0sWyJiNGExIiwiXHU2M2QyXHU2M2UzXHU2M2QwXHU2M2UxXHU2M2Q2XHU2M2VkXHU2M2VlXHU2Mzc2XHU2M2Y0XHU2M2VhXHU2M2RiXHU2NDUyXHU2M2RhXHU2M2Y5XHU2NTVlXHU2NTY2XHU2NTYyXHU2NTYzXHU2NTkxXHU2NTkw''@;'; put 'put ''XHU2NWFmXHU2NjZlXHU2NjcwXHU2Njc0XHU2Njc2XHU2NjZmXHU2NjkxXHU2NjdhXHU2NjdlXHU2Njc3XHU2NmZlXHU2NmZmXHU2NzFmXHU2NzFkXHU2OGZhXHU2OGQ1XHU2OGUwXHU2OGQ4XHU2OGQ3XHU2OTA1XHU2OGRmXHU2OGY1XHU2OGVlXHU2OGU3XHU2OGY5XHU2OGQyXHU2OGYyXHU2''@;'; put 'put ''OGUzXHU2OGNiXHU2OGNkXHU2OTBkXHU2OTEyXHU2OTBlXHU2OGM5XHU2OGRhXHU2OTZlXHU2OGZiXHU2YjNlXHU2YjNhXHU2YjNkXHU2Yjk4XHU2Yjk2XHU2YmJjXHU2YmVmXHU2YzJlXHU2YzJmXHU2YzJjXHU2ZTJmXHU2ZTM4XHU2ZTU0XHU2ZTIxXHU2ZTMyXHU2ZTY3XHU2ZTRhXHU2ZTIw''@;'; put 'put ''XHU2ZTI1XHU2ZTIzXHU2ZTFiXHU2ZTViXHU2ZTU4XHU2ZTI0XHU2ZTU2XHU2ZTZlXHU2ZTJkXHU2ZTI2XHU2ZTZmXHU2ZTM0XHU2ZTRkXHU2ZTNhXHU2ZTJjXHU2ZTQzXHU2ZTFkXHU2ZTNlXHU2ZWNiIl0sWyJiNTQwIiwiXHU2ZTg5XHU2ZTE5XHU2ZTRlXHU2ZTYzXHU2ZTQ0XHU2ZTcyXHU2''@;'; put 'put ''ZTY5XHU2ZTVmXHU3MTE5XHU3MTFhXHU3MTI2XHU3MTMwXHU3MTIxXHU3MTM2XHU3MTZlXHU3MTFjXHU3MjRjXHU3Mjg0XHU3MjgwXHU3MzM2XHU3MzI1XHU3MzM0XHU3MzI5XHU3NDNhXHU3NDJhXHU3NDMzXHU3NDIyXHU3NDI1XHU3NDM1XHU3NDM2XHU3NDM0XHU3NDJmXHU3NDFiXHU3NDI2''@;'; put 'put ''XHU3NDI4XHU3NTI1XHU3NTI2XHU3NTZiXHU3NTZhXHU3NWUyXHU3NWRiXHU3NWUzXHU3NWQ5XHU3NWQ4XHU3NWRlXHU3NWUwXHU3NjdiXHU3NjdjXHU3Njk2XHU3NjkzXHU3NmI0XHU3NmRjXHU3NzRmXHU3N2VkXHU3ODVkXHU3ODZjXHU3ODZmXHU3YTBkXHU3YTA4XHU3YTBiXHU3YTA1XHU3''@;'; put 'put ''YTAwXHU3YTk4Il0sWyJiNWExIiwiXHU3YTk3XHU3YTk2XHU3YWU1XHU3YWUzXHU3YjQ5XHU3YjU2XHU3YjQ2XHU3YjUwXHU3YjUyXHU3YjU0XHU3YjRkXHU3YjRiXHU3YjRmXHU3YjUxXHU3YzlmXHU3Y2E1XHU3ZDVlXHU3ZDUwXHU3ZDY4XHU3ZDU1XHU3ZDJiXHU3ZDZlXHU3ZDcyXHU3ZDYx''@;'; put 'put ''XHU3ZDY2XHU3ZDYyXHU3ZDcwXHU3ZDczXHU1NTg0XHU3ZmQ0XHU3ZmQ1XHU4MDBiXHU4MDUyXHU4MDg1XHU4MTU1XHU4MTU0XHU4MTRiXHU4MTUxXHU4MTRlXHU4MTM5XHU4MTQ2XHU4MTNlXHU4MTRjXHU4MTUzXHU4MTc0XHU4MjEyXHU4MjFjXHU4M2U5XHU4NDAzXHU4M2Y4XHU4NDBkXHU4''@;'; put 'put ''M2UwXHU4M2M1XHU4NDBiXHU4M2MxXHU4M2VmXHU4M2YxXHU4M2Y0XHU4NDU3XHU4NDBhXHU4M2YwXHU4NDBjXHU4M2NjXHU4M2ZkXHU4M2YyXHU4M2NhXHU4NDM4XHU4NDBlXHU4NDA0XHU4M2RjXHU4NDA3XHU4M2Q0XHU4M2RmXHU4NjViXHU4NmRmXHU4NmQ5XHU4NmVkXHU4NmQ0XHU4NmRi''@;'; put 'put ''XHU4NmU0XHU4NmQwXHU4NmRlXHU4ODU3XHU4OGMxXHU4OGMyXHU4OGIxXHU4OTgzXHU4OTk2XHU4YTNiXHU4YTYwXHU4YTU1XHU4YTVlXHU4YTNjXHU4YTQxIl0sWyJiNjQwIiwiXHU4YTU0XHU4YTViXHU4YTUwXHU4YTQ2XHU4YTM0XHU4YTNhXHU4YTM2XHU4YTU2XHU4YzYxXHU4YzgyXHU4''@;'; put 'put ''Y2FmXHU4Y2JjXHU4Y2IzXHU4Y2JkXHU4Y2MxXHU4Y2JiXHU4Y2MwXHU4Y2I0XHU4Y2I3XHU4Y2I2XHU4Y2JmXHU4Y2I4XHU4ZDhhXHU4ZDg1XHU4ZDgxXHU4ZGNlXHU4ZGRkXHU4ZGNiXHU4ZGRhXHU4ZGQxXHU4ZGNjXHU4ZGRiXHU4ZGM2XHU4ZWZiXHU4ZWY4XHU4ZWZjXHU4ZjljXHU5MDJl''@;'; put 'put ''XHU5MDM1XHU5MDMxXHU5MDM4XHU5MDMyXHU5MDM2XHU5MTAyXHU5MGY1XHU5MTA5XHU5MGZlXHU5MTYzXHU5MTY1XHU5MWNmXHU5MjE0XHU5MjE1XHU5MjIzXHU5MjA5XHU5MjFlXHU5MjBkXHU5MjEwXHU5MjA3XHU5MjExXHU5NTk0XHU5NThmXHU5NThiXHU5NTkxIl0sWyJiNmExIiwiXHU5''@;'; put 'put ''NTkzXHU5NTkyXHU5NThlXHU5NjhhXHU5NjhlXHU5NjhiXHU5NjdkXHU5Njg1XHU5Njg2XHU5NjhkXHU5NjcyXHU5Njg0XHU5NmMxXHU5NmM1XHU5NmM0XHU5NmM2XHU5NmM3XHU5NmVmXHU5NmYyXHU5N2NjXHU5ODA1XHU5ODA2XHU5ODA4XHU5OGU3XHU5OGVhXHU5OGVmXHU5OGU5XHU5OGYy''@;'; put 'put ''XHU5OGVkXHU5OWFlXHU5OWFkXHU5ZWMzXHU5ZWNkXHU5ZWQxXHU0ZTgyXHU1MGFkXHU1MGI1XHU1MGIyXHU1MGIzXHU1MGM1XHU1MGJlXHU1MGFjXHU1MGI3XHU1MGJiXHU1MGFmXHU1MGM3XHU1MjdmXHU1Mjc3XHU1MjdkXHU1MmRmXHU1MmU2XHU1MmU0XHU1MmUyXHU1MmUzXHU1MzJmXHU1''@;'; put 'put ''NWRmXHU1NWU4XHU1NWQzXHU1NWU2XHU1NWNlXHU1NWRjXHU1NWM3XHU1NWQxXHU1NWUzXHU1NWU0XHU1NWVmXHU1NWRhXHU1NWUxXHU1NWM1XHU1NWM2XHU1NWU1XHU1NWM5XHU1NzEyXHU1NzEzXHU1ODVlXHU1ODUxXHU1ODU4XHU1ODU3XHU1ODVhXHU1ODU0XHU1ODZiXHU1ODRjXHU1ODZk''@;'; put 'put ''XHU1ODRhXHU1ODYyXHU1ODUyXHU1ODRiXHU1OTY3XHU1YWMxXHU1YWM5XHU1YWNjXHU1YWJlXHU1YWJkXHU1YWJjIl0sWyJiNzQwIiwiXHU1YWIzXHU1YWMyXHU1YWIyXHU1ZDY5XHU1ZDZmXHU1ZTRjXHU1ZTc5XHU1ZWM5XHU1ZWM4XHU1ZjEyXHU1ZjU5XHU1ZmFjXHU1ZmFlXHU2MTFhXHU2''@;'; put 'put ''MTBmXHU2MTQ4XHU2MTFmXHU2MGYzXHU2MTFiXHU2MGY5XHU2MTAxXHU2MTA4XHU2MTRlXHU2MTRjXHU2MTQ0XHU2MTRkXHU2MTNlXHU2MTM0XHU2MTI3XHU2MTBkXHU2MTA2XHU2MTM3XHU2MjIxXHU2MjIyXHU2NDEzXHU2NDNlXHU2NDFlXHU2NDJhXHU2NDJkXHU2NDNkXHU2NDJjXHU2NDBm''@;'; put 'put ''XHU2NDFjXHU2NDE0XHU2NDBkXHU2NDM2XHU2NDE2XHU2NDE3XHU2NDA2XHU2NTZjXHU2NTlmXHU2NWIwXHU2Njk3XHU2Njg5XHU2Njg3XHU2Njg4XHU2Njk2XHU2Njg0XHU2Njk4XHU2NjhkXHU2NzAzXHU2OTk0XHU2OTZkIl0sWyJiN2ExIiwiXHU2OTVhXHU2OTc3XHU2OTYwXHU2OTU0XHU2''@;'; put 'put ''OTc1XHU2OTMwXHU2OTgyXHU2OTRhXHU2OTY4XHU2OTZiXHU2OTVlXHU2OTUzXHU2OTc5XHU2OTg2XHU2OTVkXHU2OTYzXHU2OTViXHU2YjQ3XHU2YjcyXHU2YmMwXHU2YmJmXHU2YmQzXHU2YmZkXHU2ZWEyXHU2ZWFmXHU2ZWQzXHU2ZWI2XHU2ZWMyXHU2ZTkwXHU2ZTlkXHU2ZWM3XHU2ZWM1''@;'; put 'put ''XHU2ZWE1XHU2ZTk4XHU2ZWJjXHU2ZWJhXHU2ZWFiXHU2ZWQxXHU2ZTk2XHU2ZTljXHU2ZWM0XHU2ZWQ0XHU2ZWFhXHU2ZWE3XHU2ZWI0XHU3MTRlXHU3MTU5XHU3MTY5XHU3MTY0XHU3MTQ5XHU3MTY3XHU3MTVjXHU3MTZjXHU3MTY2XHU3MTRjXHU3MTY1XHU3MTVlXHU3MTQ2XHU3MTY4XHU3''@;'; put 'put ''MTU2XHU3MjNhXHU3MjUyXHU3MzM3XHU3MzQ1XHU3MzNmXHU3MzNlXHU3NDZmXHU3NDVhXHU3NDU1XHU3NDVmXHU3NDVlXHU3NDQxXHU3NDNmXHU3NDU5XHU3NDViXHU3NDVjXHU3NTc2XHU3NTc4XHU3NjAwXHU3NWYwXHU3NjAxXHU3NWYyXHU3NWYxXHU3NWZhXHU3NWZmXHU3NWY0XHU3NWYz''@;'; put 'put ''XHU3NmRlXHU3NmRmXHU3NzViXHU3NzZiXHU3NzY2XHU3NzVlXHU3NzYzIl0sWyJiODQwIiwiXHU3Nzc5XHU3NzZhXHU3NzZjXHU3NzVjXHU3NzY1XHU3NzY4XHU3NzYyXHU3N2VlXHU3ODhlXHU3OGIwXHU3ODk3XHU3ODk4XHU3ODhjXHU3ODg5XHU3ODdjXHU3ODkxXHU3ODkzXHU3ODdmXHU3''@;'; put 'put ''OTdhXHU3OTdmXHU3OTgxXHU4NDJjXHU3OWJkXHU3YTFjXHU3YTFhXHU3YTIwXHU3YTE0XHU3YTFmXHU3YTFlXHU3YTlmXHU3YWEwXHU3Yjc3XHU3YmMwXHU3YjYwXHU3YjZlXHU3YjY3XHU3Y2IxXHU3Y2IzXHU3Y2I1XHU3ZDkzXHU3ZDc5XHU3ZDkxXHU3ZDgxXHU3ZDhmXHU3ZDViXHU3ZjZl''@;'; put 'put ''XHU3ZjY5XHU3ZjZhXHU3ZjcyXHU3ZmE5XHU3ZmE4XHU3ZmE0XHU4MDU2XHU4MDU4XHU4MDg2XHU4MDg0XHU4MTcxXHU4MTcwXHU4MTc4XHU4MTY1XHU4MTZlXHU4MTczXHU4MTZiIl0sWyJiOGExIiwiXHU4MTc5XHU4MTdhXHU4MTY2XHU4MjA1XHU4MjQ3XHU4NDgyXHU4NDc3XHU4NDNkXHU4''@;'; put 'put ''NDMxXHU4NDc1XHU4NDY2XHU4NDZiXHU4NDQ5XHU4NDZjXHU4NDViXHU4NDNjXHU4NDM1XHU4NDYxXHU4NDYzXHU4NDY5XHU4NDZkXHU4NDQ2XHU4NjVlXHU4NjVjXHU4NjVmXHU4NmY5XHU4NzEzXHU4NzA4XHU4NzA3XHU4NzAwXHU4NmZlXHU4NmZiXHU4NzAyXHU4NzAzXHU4NzA2XHU4NzBh''@;'; put 'put ''XHU4ODU5XHU4OGRmXHU4OGQ0XHU4OGQ5XHU4OGRjXHU4OGQ4XHU4OGRkXHU4OGUxXHU4OGNhXHU4OGQ1XHU4OGQyXHU4OTljXHU4OWUzXHU4YTZiXHU4YTcyXHU4YTczXHU4YTY2XHU4YTY5XHU4YTcwXHU4YTg3XHU4YTdjXHU4YTYzXHU4YWEwXHU4YTcxXHU4YTg1XHU4YTZkXHU4YTYyXHU4''@;'; put 'put ''YTZlXHU4YTZjXHU4YTc5XHU4YTdiXHU4YTNlXHU4YTY4XHU4YzYyXHU4YzhhXHU4Yzg5XHU4Y2NhXHU4Y2M3XHU4Y2M4XHU4Y2M0XHU4Y2IyXHU4Y2MzXHU4Y2MyXHU4Y2M1XHU4ZGUxXHU4ZGRmXHU4ZGU4XHU4ZGVmXHU4ZGYzXHU4ZGZhXHU4ZGVhXHU4ZGU0XHU4ZGU2XHU4ZWIyXHU4ZjAz''@;'; put 'put ''XHU4ZjA5XHU4ZWZlXHU4ZjBhIl0sWyJiOTQwIiwiXHU4ZjlmXHU4ZmIyXHU5MDRiXHU5MDRhXHU5MDUzXHU5MDQyXHU5MDU0XHU5MDNjXHU5MDU1XHU5MDUwXHU5MDQ3XHU5MDRmXHU5MDRlXHU5MDRkXHU5MDUxXHU5MDNlXHU5MDQxXHU5MTEyXHU5MTE3XHU5MTZjXHU5MTZhXHU5MTY5XHU5''@;'; put 'put ''MWM5XHU5MjM3XHU5MjU3XHU5MjM4XHU5MjNkXHU5MjQwXHU5MjNlXHU5MjViXHU5MjRiXHU5MjY0XHU5MjUxXHU5MjM0XHU5MjQ5XHU5MjRkXHU5MjQ1XHU5MjM5XHU5MjNmXHU5MjVhXHU5NTk4XHU5Njk4XHU5Njk0XHU5Njk1XHU5NmNkXHU5NmNiXHU5NmM5XHU5NmNhXHU5NmY3XHU5NmZi''@;'; put 'put ''XHU5NmY5XHU5NmY2XHU5NzU2XHU5Nzc0XHU5Nzc2XHU5ODEwXHU5ODExXHU5ODEzXHU5ODBhXHU5ODEyXHU5ODBjXHU5OGZjXHU5OGY0Il0sWyJiOWExIiwiXHU5OGZkXHU5OGZlXHU5OWIzXHU5OWIxXHU5OWI0XHU5YWUxXHU5Y2U5XHU5ZTgyXHU5ZjBlXHU5ZjEzXHU5ZjIwXHU1MGU3XHU1''@;'; put 'put ''MGVlXHU1MGU1XHU1MGQ2XHU1MGVkXHU1MGRhXHU1MGQ1XHU1MGNmXHU1MGQxXHU1MGYxXHU1MGNlXHU1MGU5XHU1MTYyXHU1MWYzXHU1MjgzXHU1MjgyXHU1MzMxXHU1M2FkXHU1NWZlXHU1NjAwXHU1NjFiXHU1NjE3XHU1NWZkXHU1NjE0XHU1NjA2XHU1NjA5XHU1NjBkXHU1NjBlXHU1NWY3''@;'; put 'put ''XHU1NjE2XHU1NjFmXHU1NjA4XHU1NjEwXHU1NWY2XHU1NzE4XHU1NzE2XHU1ODc1XHU1ODdlXHU1ODgzXHU1ODkzXHU1ODhhXHU1ODc5XHU1ODg1XHU1ODdkXHU1OGZkXHU1OTI1XHU1OTIyXHU1OTI0XHU1OTZhXHU1OTY5XHU1YWUxXHU1YWU2XHU1YWU5XHU1YWQ3XHU1YWQ2XHU1YWQ4XHU1''@;'; put 'put ''YWUzXHU1Yjc1XHU1YmRlXHU1YmU3XHU1YmUxXHU1YmU1XHU1YmU2XHU1YmU4XHU1YmUyXHU1YmU0XHU1YmRmXHU1YzBkXHU1YzYyXHU1ZDg0XHU1ZDg3XHU1ZTViXHU1ZTYzXHU1ZTU1XHU1ZTU3XHU1ZTU0XHU1ZWQzXHU1ZWQ2XHU1ZjBhXHU1ZjQ2XHU1ZjcwXHU1ZmI5XHU2MTQ3Il0sWyJi''@;'; put 'put ''YTQwIiwiXHU2MTNmXHU2MTRiXHU2MTc3XHU2MTYyXHU2MTYzXHU2MTVmXHU2MTVhXHU2MTU4XHU2MTc1XHU2MjJhXHU2NDg3XHU2NDU4XHU2NDU0XHU2NGE0XHU2NDc4XHU2NDVmXHU2NDdhXHU2NDUxXHU2NDY3XHU2NDM0XHU2NDZkXHU2NDdiXHU2NTcyXHU2NWExXHU2NWQ3XHU2NWQ2XHU2''@;'; put 'put ''NmEyXHU2NmE4XHU2NjlkXHU2OTljXHU2OWE4XHU2OTk1XHU2OWMxXHU2OWFlXHU2OWQzXHU2OWNiXHU2OTliXHU2OWI3XHU2OWJiXHU2OWFiXHU2OWI0XHU2OWQwXHU2OWNkXHU2OWFkXHU2OWNjXHU2OWE2XHU2OWMzXHU2OWEzXHU2YjQ5XHU2YjRjXHU2YzMzXHU2ZjMzXHU2ZjE0XHU2ZWZl''@;'; put 'put ''XHU2ZjEzXHU2ZWY0XHU2ZjI5XHU2ZjNlXHU2ZjIwXHU2ZjJjXHU2ZjBmXHU2ZjAyXHU2ZjIyIl0sWyJiYWExIiwiXHU2ZWZmXHU2ZWVmXHU2ZjA2XHU2ZjMxXHU2ZjM4XHU2ZjMyXHU2ZjIzXHU2ZjE1XHU2ZjJiXHU2ZjJmXHU2Zjg4XHU2ZjJhXHU2ZWVjXHU2ZjAxXHU2ZWYyXHU2ZWNjXHU2''@;'; put 'put ''ZWY3XHU3MTk0XHU3MTk5XHU3MTdkXHU3MThhXHU3MTg0XHU3MTkyXHU3MjNlXHU3MjkyXHU3Mjk2XHU3MzQ0XHU3MzUwXHU3NDY0XHU3NDYzXHU3NDZhXHU3NDcwXHU3NDZkXHU3NTA0XHU3NTkxXHU3NjI3XHU3NjBkXHU3NjBiXHU3NjA5XHU3NjEzXHU3NmUxXHU3NmUzXHU3Nzg0XHU3Nzdk''@;'; put 'put ''XHU3NzdmXHU3NzYxXHU3OGMxXHU3ODlmXHU3OGE3XHU3OGIzXHU3OGE5XHU3OGEzXHU3OThlXHU3OThmXHU3OThkXHU3YTJlXHU3YTMxXHU3YWFhXHU3YWE5XHU3YWVkXHU3YWVmXHU3YmExXHU3Yjk1XHU3YjhiXHU3Yjc1XHU3Yjk3XHU3YjlkXHU3Yjk0XHU3YjhmXHU3YmI4XHU3Yjg3XHU3''@;'; put 'put ''Yjg0XHU3Y2I5XHU3Y2JkXHU3Y2JlXHU3ZGJiXHU3ZGIwXHU3ZDljXHU3ZGJkXHU3ZGJlXHU3ZGEwXHU3ZGNhXHU3ZGI0XHU3ZGIyXHU3ZGIxXHU3ZGJhXHU3ZGEyXHU3ZGJmXHU3ZGI1XHU3ZGI4XHU3ZGFkXHU3ZGQyXHU3ZGM3XHU3ZGFjIl0sWyJiYjQwIiwiXHU3ZjcwXHU3ZmUwXHU3ZmUx''@;'; put 'put ''XHU3ZmRmXHU4MDVlXHU4MDVhXHU4MDg3XHU4MTUwXHU4MTgwXHU4MThmXHU4MTg4XHU4MThhXHU4MTdmXHU4MTgyXHU4MWU3XHU4MWZhXHU4MjA3XHU4MjE0XHU4MjFlXHU4MjRiXHU4NGM5XHU4NGJmXHU4NGM2XHU4NGM0XHU4NDk5XHU4NDllXHU4NGIyXHU4NDljXHU4NGNiXHU4NGI4XHU4''@;'; put 'put ''NGMwXHU4NGQzXHU4NDkwXHU4NGJjXHU4NGQxXHU4NGNhXHU4NzNmXHU4NzFjXHU4NzNiXHU4NzIyXHU4NzI1XHU4NzM0XHU4NzE4XHU4NzU1XHU4NzM3XHU4NzI5XHU4OGYzXHU4OTAyXHU4OGY0XHU4OGY5XHU4OGY4XHU4OGZkXHU4OGU4XHU4OTFhXHU4OGVmXHU4YWE2XHU4YThjXHU4YTll''@;'; put 'put ''XHU4YWEzXHU4YThkXHU4YWExXHU4YTkzXHU4YWE0Il0sWyJiYmExIiwiXHU4YWFhXHU4YWE1XHU4YWE4XHU4YTk4XHU4YTkxXHU4YTlhXHU4YWE3XHU4YzZhXHU4YzhkXHU4YzhjXHU4Y2QzXHU4Y2QxXHU4Y2QyXHU4ZDZiXHU4ZDk5XHU4ZDk1XHU4ZGZjXHU4ZjE0XHU4ZjEyXHU4ZjE1XHU4''@;'; put 'put ''ZjEzXHU4ZmEzXHU5MDYwXHU5MDU4XHU5MDVjXHU5MDYzXHU5MDU5XHU5MDVlXHU5MDYyXHU5MDVkXHU5MDViXHU5MTE5XHU5MTE4XHU5MTFlXHU5MTc1XHU5MTc4XHU5MTc3XHU5MTc0XHU5Mjc4XHU5MjgwXHU5Mjg1XHU5Mjk4XHU5Mjk2XHU5MjdiXHU5MjkzXHU5MjljXHU5MmE4XHU5Mjdj''@;'; put 'put ''XHU5MjkxXHU5NWExXHU5NWE4XHU5NWE5XHU5NWEzXHU5NWE1XHU5NWE0XHU5Njk5XHU5NjljXHU5NjliXHU5NmNjXHU5NmQyXHU5NzAwXHU5NzdjXHU5Nzg1XHU5N2Y2XHU5ODE3XHU5ODE4XHU5OGFmXHU5OGIxXHU5OTAzXHU5OTA1XHU5OTBjXHU5OTA5XHU5OWMxXHU5YWFmXHU5YWIwXHU5''@;'; put 'put ''YWU2XHU5YjQxXHU5YjQyXHU5Y2Y0XHU5Y2Y2XHU5Y2YzXHU5ZWJjXHU5ZjNiXHU5ZjRhXHU1MTA0XHU1MTAwXHU1MGZiXHU1MGY1XHU1MGY5XHU1MTAyXHU1MTA4XHU1MTA5XHU1MTA1XHU1MWRjIl0sWyJiYzQwIiwiXHU1Mjg3XHU1Mjg4XHU1Mjg5XHU1MjhkXHU1MjhhXHU1MmYwXHU1M2Iy''@;'; put 'put ''XHU1NjJlXHU1NjNiXHU1NjM5XHU1NjMyXHU1NjNmXHU1NjM0XHU1NjI5XHU1NjUzXHU1NjRlXHU1NjU3XHU1Njc0XHU1NjM2XHU1NjJmXHU1NjMwXHU1ODgwXHU1ODlmXHU1ODllXHU1OGIzXHU1ODljXHU1OGFlXHU1OGE5XHU1OGE2XHU1OTZkXHU1YjA5XHU1YWZiXHU1YjBiXHU1YWY1XHU1''@;'; put 'put ''YjBjXHU1YjA4XHU1YmVlXHU1YmVjXHU1YmU5XHU1YmViXHU1YzY0XHU1YzY1XHU1ZDlkXHU1ZDk0XHU1ZTYyXHU1ZTVmXHU1ZTYxXHU1ZWUyXHU1ZWRhXHU1ZWRmXHU1ZWRkXHU1ZWUzXHU1ZWUwXHU1ZjQ4XHU1ZjcxXHU1ZmI3XHU1ZmI1XHU2MTc2XHU2MTY3XHU2MTZlXHU2MTVkXHU2MTU1''@;'; put 'put ''XHU2MTgyIl0sWyJiY2ExIiwiXHU2MTdjXHU2MTcwXHU2MTZiXHU2MTdlXHU2MWE3XHU2MTkwXHU2MWFiXHU2MThlXHU2MWFjXHU2MTlhXHU2MWE0XHU2MTk0XHU2MWFlXHU2MjJlXHU2NDY5XHU2NDZmXHU2NDc5XHU2NDllXHU2NGIyXHU2NDg4XHU2NDkwXHU2NGIwXHU2NGE1XHU2NDkzXHU2''@;'; put 'put ''NDk1XHU2NGE5XHU2NDkyXHU2NGFlXHU2NGFkXHU2NGFiXHU2NDlhXHU2NGFjXHU2NDk5XHU2NGEyXHU2NGIzXHU2NTc1XHU2NTc3XHU2NTc4XHU2NmFlXHU2NmFiXHU2NmI0XHU2NmIxXHU2YTIzXHU2YTFmXHU2OWU4XHU2YTAxXHU2YTFlXHU2YTE5XHU2OWZkXHU2YTIxXHU2YTEzXHU2YTBh''@;'; put 'put ''XHU2OWYzXHU2YTAyXHU2YTA1XHU2OWVkXHU2YTExXHU2YjUwXHU2YjRlXHU2YmE0XHU2YmM1XHU2YmM2XHU2ZjNmXHU2ZjdjXHU2Zjg0XHU2ZjUxXHU2ZjY2XHU2ZjU0XHU2Zjg2XHU2ZjZkXHU2ZjViXHU2Zjc4XHU2ZjZlXHU2ZjhlXHU2ZjdhXHU2ZjcwXHU2ZjY0XHU2Zjk3XHU2ZjU4XHU2''@;'; put 'put ''ZWQ1XHU2ZjZmXHU2ZjYwXHU2ZjVmXHU3MTlmXHU3MWFjXHU3MWIxXHU3MWE4XHU3MjU2XHU3MjliXHU3MzRlXHU3MzU3XHU3NDY5XHU3NDhiXHU3NDgzIl0sWyJiZDQwIiwiXHU3NDdlXHU3NDgwXHU3NTdmXHU3NjIwXHU3NjI5XHU3NjFmXHU3NjI0XHU3NjI2XHU3NjIxXHU3NjIyXHU3Njlh''@;'; put 'put ''XHU3NmJhXHU3NmU0XHU3NzhlXHU3Nzg3XHU3NzhjXHU3NzkxXHU3NzhiXHU3OGNiXHU3OGM1XHU3OGJhXHU3OGNhXHU3OGJlXHU3OGQ1XHU3OGJjXHU3OGQwXHU3YTNmXHU3YTNjXHU3YTQwXHU3YTNkXHU3YTM3XHU3YTNiXHU3YWFmXHU3YWFlXHU3YmFkXHU3YmIxXHU3YmM0XHU3YmI0XHU3''@;'; put 'put ''YmM2XHU3YmM3XHU3YmMxXHU3YmEwXHU3YmNjXHU3Y2NhXHU3ZGUwXHU3ZGY0XHU3ZGVmXHU3ZGZiXHU3ZGQ4XHU3ZGVjXHU3ZGRkXHU3ZGU4XHU3ZGUzXHU3ZGRhXHU3ZGRlXHU3ZGU5XHU3ZDllXHU3ZGQ5XHU3ZGYyXHU3ZGY5XHU3Zjc1XHU3Zjc3XHU3ZmFmIl0sWyJiZGExIiwiXHU3ZmU5''@;'; put 'put ''XHU4MDI2XHU4MTliXHU4MTljXHU4MTlkXHU4MWEwXHU4MTlhXHU4MTk4XHU4NTE3XHU4NTNkXHU4NTFhXHU4NGVlXHU4NTJjXHU4NTJkXHU4NTEzXHU4NTExXHU4NTIzXHU4NTIxXHU4NTE0XHU4NGVjXHU4NTI1XHU4NGZmXHU4NTA2XHU4NzgyXHU4Nzc0XHU4Nzc2XHU4NzYwXHU4NzY2XHU4''@;'; put 'put ''Nzc4XHU4NzY4XHU4NzU5XHU4NzU3XHU4NzRjXHU4NzUzXHU4ODViXHU4ODVkXHU4OTEwXHU4OTA3XHU4OTEyXHU4OTEzXHU4OTE1XHU4OTBhXHU4YWJjXHU4YWQyXHU4YWM3XHU4YWM0XHU4YTk1XHU4YWNiXHU4YWY4XHU4YWIyXHU4YWM5XHU4YWMyXHU4YWJmXHU4YWIwXHU4YWQ2XHU4YWNk''@;'; put 'put ''XHU4YWI2XHU4YWI5XHU4YWRiXHU4YzRjXHU4YzRlXHU4YzZjXHU4Y2UwXHU4Y2RlXHU4Y2U2XHU4Y2U0XHU4Y2VjXHU4Y2VkXHU4Y2UyXHU4Y2UzXHU4Y2RjXHU4Y2VhXHU4Y2UxXHU4ZDZkXHU4ZDlmXHU4ZGEzXHU4ZTJiXHU4ZTEwXHU4ZTFkXHU4ZTIyXHU4ZTBmXHU4ZTI5XHU4ZTFmXHU4''@;'; put 'put ''ZTIxXHU4ZTFlXHU4ZWJhXHU4ZjFkXHU4ZjFiXHU4ZjFmXHU4ZjI5XHU4ZjI2XHU4ZjJhXHU4ZjFjXHU4ZjFlIl0sWyJiZTQwIiwiXHU4ZjI1XHU5MDY5XHU5MDZlXHU5MDY4XHU5MDZkXHU5MDc3XHU5MTMwXHU5MTJkXHU5MTI3XHU5MTMxXHU5MTg3XHU5MTg5XHU5MThiXHU5MTgzXHU5MmM1''@;'; put 'put ''XHU5MmJiXHU5MmI3XHU5MmVhXHU5MmFjXHU5MmU0XHU5MmMxXHU5MmIzXHU5MmJjXHU5MmQyXHU5MmM3XHU5MmYwXHU5MmIyXHU5NWFkXHU5NWIxXHU5NzA0XHU5NzA2XHU5NzA3XHU5NzA5XHU5NzYwXHU5NzhkXHU5NzhiXHU5NzhmXHU5ODIxXHU5ODJiXHU5ODFjXHU5OGIzXHU5OTBhXHU5''@;'; put 'put ''OTEzXHU5OTEyXHU5OTE4XHU5OWRkXHU5OWQwXHU5OWRmXHU5OWRiXHU5OWQxXHU5OWQ1XHU5OWQyXHU5OWQ5XHU5YWI3XHU5YWVlXHU5YWVmXHU5YjI3XHU5YjQ1XHU5YjQ0XHU5Yjc3XHU5YjZmXHU5ZDA2XHU5ZDA5Il0sWyJiZWExIiwiXHU5ZDAzXHU5ZWE5XHU5ZWJlXHU5ZWNlXHU1OGE4''@;'; put 'put ''XHU5ZjUyXHU1MTEyXHU1MTE4XHU1MTE0XHU1MTEwXHU1MTE1XHU1MTgwXHU1MWFhXHU1MWRkXHU1MjkxXHU1MjkzXHU1MmYzXHU1NjU5XHU1NjZiXHU1Njc5XHU1NjY5XHU1NjY0XHU1Njc4XHU1NjZhXHU1NjY4XHU1NjY1XHU1NjcxXHU1NjZmXHU1NjZjXHU1NjYyXHU1Njc2XHU1OGMxXHU1''@;'; put 'put ''OGJlXHU1OGM3XHU1OGM1XHU1OTZlXHU1YjFkXHU1YjM0XHU1Yjc4XHU1YmYwXHU1YzBlXHU1ZjRhXHU2MWIyXHU2MTkxXHU2MWE5XHU2MThhXHU2MWNkXHU2MWI2XHU2MWJlXHU2MWNhXHU2MWM4XHU2MjMwXHU2NGM1XHU2NGMxXHU2NGNiXHU2NGJiXHU2NGJjXHU2NGRhXHU2NGM0XHU2NGM3''@;'; put 'put ''XHU2NGMyXHU2NGNkXHU2NGJmXHU2NGQyXHU2NGQ0XHU2NGJlXHU2NTc0XHU2NmM2XHU2NmM5XHU2NmI5XHU2NmM0XHU2NmM3XHU2NmI4XHU2YTNkXHU2YTM4XHU2YTNhXHU2YTU5XHU2YTZiXHU2YTU4XHU2YTM5XHU2YTQ0XHU2YTYyXHU2YTYxXHU2YTRiXHU2YTQ3XHU2YTM1XHU2YTVmXHU2''@;'; put 'put ''YTQ4XHU2YjU5XHU2Yjc3XHU2YzA1XHU2ZmMyXHU2ZmIxXHU2ZmExIl0sWyJiZjQwIiwiXHU2ZmMzXHU2ZmE0XHU2ZmMxXHU2ZmE3XHU2ZmIzXHU2ZmMwXHU2ZmI5XHU2ZmI2XHU2ZmE2XHU2ZmEwXHU2ZmI0XHU3MWJlXHU3MWM5XHU3MWQwXHU3MWQyXHU3MWM4XHU3MWQ1XHU3MWI5XHU3MWNl''@;'; put 'put ''XHU3MWQ5XHU3MWRjXHU3MWMzXHU3MWM0XHU3MzY4XHU3NDljXHU3NGEzXHU3NDk4XHU3NDlmXHU3NDllXHU3NGUyXHU3NTBjXHU3NTBkXHU3NjM0XHU3NjM4XHU3NjNhXHU3NmU3XHU3NmU1XHU3N2EwXHU3NzllXHU3NzlmXHU3N2E1XHU3OGU4XHU3OGRhXHU3OGVjXHU3OGU3XHU3OWE2XHU3''@;'; put 'put ''YTRkXHU3YTRlXHU3YTQ2XHU3YTRjXHU3YTRiXHU3YWJhXHU3YmQ5XHU3YzExXHU3YmM5XHU3YmU0XHU3YmRiXHU3YmUxXHU3YmU5XHU3YmU2XHU3Y2Q1XHU3Y2Q2XHU3ZTBhIl0sWyJiZmExIiwiXHU3ZTExXHU3ZTA4XHU3ZTFiXHU3ZTIzXHU3ZTFlXHU3ZTFkXHU3ZTA5XHU3ZTEwXHU3Zjc5''@;'; put 'put ''XHU3ZmIyXHU3ZmYwXHU3ZmYxXHU3ZmVlXHU4MDI4XHU4MWIzXHU4MWE5XHU4MWE4XHU4MWZiXHU4MjA4XHU4MjU4XHU4MjU5XHU4NTRhXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY5XHU4NTQzXHU4NTQ5XHU4NTZkXHU4NTZhXHU4NTVlXHU4NzgzXHU4NzlmXHU4NzllXHU4N2EyXHU4NzhkXHU4''@;'; put 'put ''ODYxXHU4OTJhXHU4OTMyXHU4OTI1XHU4OTJiXHU4OTIxXHU4OWFhXHU4OWE2XHU4YWU2XHU4YWZhXHU4YWViXHU4YWYxXHU4YjAwXHU4YWRjXHU4YWU3XHU4YWVlXHU4YWZlXHU4YjAxXHU4YjAyXHU4YWY3XHU4YWVkXHU4YWYzXHU4YWY2XHU4YWZjXHU4YzZiXHU4YzZkXHU4YzkzXHU4Y2Y0''@;'; put 'put ''XHU4ZTQ0XHU4ZTMxXHU4ZTM0XHU4ZTQyXHU4ZTM5XHU4ZTM1XHU4ZjNiXHU4ZjJmXHU4ZjM4XHU4ZjMzXHU4ZmE4XHU4ZmE2XHU5MDc1XHU5MDc0XHU5MDc4XHU5MDcyXHU5MDdjXHU5MDdhXHU5MTM0XHU5MTkyXHU5MzIwXHU5MzM2XHU5MmY4XHU5MzMzXHU5MzJmXHU5MzIyXHU5MmZjXHU5''@;'; put 'put ''MzJiXHU5MzA0XHU5MzFhIl0sWyJjMDQwIiwiXHU5MzEwXHU5MzI2XHU5MzIxXHU5MzE1XHU5MzJlXHU5MzE5XHU5NWJiXHU5NmE3XHU5NmE4XHU5NmFhXHU5NmQ1XHU5NzBlXHU5NzExXHU5NzE2XHU5NzBkXHU5NzEzXHU5NzBmXHU5NzViXHU5NzVjXHU5NzY2XHU5Nzk4XHU5ODMwXHU5ODM4''@;'; put 'put ''XHU5ODNiXHU5ODM3XHU5ODJkXHU5ODM5XHU5ODI0XHU5OTEwXHU5OTI4XHU5OTFlXHU5OTFiXHU5OTIxXHU5OTFhXHU5OWVkXHU5OWUyXHU5OWYxXHU5YWI4XHU5YWJjXHU5YWZiXHU5YWVkXHU5YjI4XHU5YjkxXHU5ZDE1XHU5ZDIzXHU5ZDI2XHU5ZDI4XHU5ZDEyXHU5ZDFiXHU5ZWQ4XHU5''@;'; put 'put ''ZWQ0XHU5ZjhkXHU5ZjljXHU1MTJhXHU1MTFmXHU1MTIxXHU1MTMyXHU1MmY1XHU1NjhlXHU1NjgwXHU1NjkwXHU1Njg1XHU1Njg3Il0sWyJjMGExIiwiXHU1NjhmXHU1OGQ1XHU1OGQzXHU1OGQxXHU1OGNlXHU1YjMwXHU1YjJhXHU1YjI0XHU1YjdhXHU1YzM3XHU1YzY4XHU1ZGJjXHU1ZGJh''@;'; put 'put ''XHU1ZGJkXHU1ZGI4XHU1ZTZiXHU1ZjRjXHU1ZmJkXHU2MWM5XHU2MWMyXHU2MWM3XHU2MWU2XHU2MWNiXHU2MjMyXHU2MjM0XHU2NGNlXHU2NGNhXHU2NGQ4XHU2NGUwXHU2NGYwXHU2NGU2XHU2NGVjXHU2NGYxXHU2NGUyXHU2NGVkXHU2NTgyXHU2NTgzXHU2NmQ5XHU2NmQ2XHU2YTgwXHU2''@;'; put 'put ''YTk0XHU2YTg0XHU2YWEyXHU2YTljXHU2YWRiXHU2YWEzXHU2YTdlXHU2YTk3XHU2YTkwXHU2YWEwXHU2YjVjXHU2YmFlXHU2YmRhXHU2YzA4XHU2ZmQ4XHU2ZmYxXHU2ZmRmXHU2ZmUwXHU2ZmRiXHU2ZmU0XHU2ZmViXHU2ZmVmXHU2ZjgwXHU2ZmVjXHU2ZmUxXHU2ZmU5XHU2ZmQ1XHU2ZmVl''@;'; put 'put ''XHU2ZmYwXHU3MWU3XHU3MWRmXHU3MWVlXHU3MWU2XHU3MWU1XHU3MWVkXHU3MWVjXHU3MWY0XHU3MWUwXHU3MjM1XHU3MjQ2XHU3MzcwXHU3MzcyXHU3NGE5XHU3NGIwXHU3NGE2XHU3NGE4XHU3NjQ2XHU3NjQyXHU3NjRjXHU3NmVhXHU3N2IzXHU3N2FhXHU3N2IwXHU3N2FjIl0sWyJjMTQw''@;'; put 'put ''IiwiXHU3N2E3XHU3N2FkXHU3N2VmXHU3OGY3XHU3OGZhXHU3OGY0XHU3OGVmXHU3OTAxXHU3OWE3XHU3OWFhXHU3YTU3XHU3YWJmXHU3YzA3XHU3YzBkXHU3YmZlXHU3YmY3XHU3YzBjXHU3YmUwXHU3Y2UwXHU3Y2RjXHU3Y2RlXHU3Y2UyXHU3Y2RmXHU3Y2Q5XHU3Y2RkXHU3ZTJlXHU3ZTNl''@;'; put 'put ''XHU3ZTQ2XHU3ZTM3XHU3ZTMyXHU3ZTQzXHU3ZTJiXHU3ZTNkXHU3ZTMxXHU3ZTQ1XHU3ZTQxXHU3ZTM0XHU3ZTM5XHU3ZTQ4XHU3ZTM1XHU3ZTNmXHU3ZTJmXHU3ZjQ0XHU3ZmYzXHU3ZmZjXHU4MDcxXHU4MDcyXHU4MDcwXHU4MDZmXHU4MDczXHU4MWM2XHU4MWMzXHU4MWJhXHU4MWMyXHU4''@;'; put 'put ''MWMwXHU4MWJmXHU4MWJkXHU4MWM5XHU4MWJlXHU4MWU4XHU4MjA5XHU4MjcxXHU4NWFhIl0sWyJjMWExIiwiXHU4NTg0XHU4NTdlXHU4NTljXHU4NTkxXHU4NTk0XHU4NWFmXHU4NTliXHU4NTg3XHU4NWE4XHU4NThhXHU4NjY3XHU4N2MwXHU4N2QxXHU4N2IzXHU4N2QyXHU4N2M2XHU4N2Fi''@;'; put 'put ''XHU4N2JiXHU4N2JhXHU4N2M4XHU4N2NiXHU4OTNiXHU4OTM2XHU4OTQ0XHU4OTM4XHU4OTNkXHU4OWFjXHU4YjBlXHU4YjE3XHU4YjE5XHU4YjFiXHU4YjBhXHU4YjIwXHU4YjFkXHU4YjA0XHU4YjEwXHU4YzQxXHU4YzNmXHU4YzczXHU4Y2ZhXHU4Y2ZkXHU4Y2ZjXHU4Y2Y4XHU4Y2ZiXHU4''@;'; put 'put ''ZGE4XHU4ZTQ5XHU4ZTRiXHU4ZTQ4XHU4ZTRhXHU4ZjQ0XHU4ZjNlXHU4ZjQyXHU4ZjQ1XHU4ZjNmXHU5MDdmXHU5MDdkXHU5MDg0XHU5MDgxXHU5MDgyXHU5MDgwXHU5MTM5XHU5MWEzXHU5MTllXHU5MTljXHU5MzRkXHU5MzgyXHU5MzI4XHU5Mzc1XHU5MzRhXHU5MzY1XHU5MzRiXHU5MzE4''@;'; put 'put ''XHU5MzdlXHU5MzZjXHU5MzViXHU5MzcwXHU5MzVhXHU5MzU0XHU5NWNhXHU5NWNiXHU5NWNjXHU5NWM4XHU5NWM2XHU5NmIxXHU5NmI4XHU5NmQ2XHU5NzFjXHU5NzFlXHU5N2EwXHU5N2QzXHU5ODQ2XHU5OGI2XHU5OTM1XHU5YTAxIl0sWyJjMjQwIiwiXHU5OWZmXHU5YmFlXHU5YmFiXHU5''@;'; put 'put ''YmFhXHU5YmFkXHU5ZDNiXHU5ZDNmXHU5ZThiXHU5ZWNmXHU5ZWRlXHU5ZWRjXHU5ZWRkXHU5ZWRiXHU5ZjNlXHU5ZjRiXHU1M2UyXHU1Njk1XHU1NmFlXHU1OGQ5XHU1OGQ4XHU1YjM4XHU1ZjVkXHU2MWUzXHU2MjMzXHU2NGY0XHU2NGYyXHU2NGZlXHU2NTA2XHU2NGZhXHU2NGZiXHU2NGY3''@;'; put 'put ''XHU2NWI3XHU2NmRjXHU2NzI2XHU2YWIzXHU2YWFjXHU2YWMzXHU2YWJiXHU2YWI4XHU2YWMyXHU2YWFlXHU2YWFmXHU2YjVmXHU2Yjc4XHU2YmFmXHU3MDA5XHU3MDBiXHU2ZmZlXHU3MDA2XHU2ZmZhXHU3MDExXHU3MDBmXHU3MWZiXHU3MWZjXHU3MWZlXHU3MWY4XHU3Mzc3XHU3Mzc1XHU3''@;'; put 'put ''NGE3XHU3NGJmXHU3NTE1XHU3NjU2XHU3NjU4Il0sWyJjMmExIiwiXHU3NjUyXHU3N2JkXHU3N2JmXHU3N2JiXHU3N2JjXHU3OTBlXHU3OWFlXHU3YTYxXHU3YTYyXHU3YTYwXHU3YWM0XHU3YWM1XHU3YzJiXHU3YzI3XHU3YzJhXHU3YzFlXHU3YzIzXHU3YzIxXHU3Y2U3XHU3ZTU0XHU3ZTU1''@;'; put 'put ''XHU3ZTVlXHU3ZTVhXHU3ZTYxXHU3ZTUyXHU3ZTU5XHU3ZjQ4XHU3ZmY5XHU3ZmZiXHU4MDc3XHU4MDc2XHU4MWNkXHU4MWNmXHU4MjBhXHU4NWNmXHU4NWE5XHU4NWNkXHU4NWQwXHU4NWM5XHU4NWIwXHU4NWJhXHU4NWI5XHU4NWE2XHU4N2VmXHU4N2VjXHU4N2YyXHU4N2UwXHU4OTg2XHU4''@;'; put 'put ''OWIyXHU4OWY0XHU4YjI4XHU4YjM5XHU4YjJjXHU4YjJiXHU4YzUwXHU4ZDA1XHU4ZTU5XHU4ZTYzXHU4ZTY2XHU4ZTY0XHU4ZTVmXHU4ZTU1XHU4ZWMwXHU4ZjQ5XHU4ZjRkXHU5MDg3XHU5MDgzXHU5MDg4XHU5MWFiXHU5MWFjXHU5MWQwXHU5Mzk0XHU5MzhhXHU5Mzk2XHU5M2EyXHU5M2Iz''@;'; put 'put ''XHU5M2FlXHU5M2FjXHU5M2IwXHU5Mzk4XHU5MzlhXHU5Mzk3XHU5NWQ0XHU5NWQ2XHU5NWQwXHU5NWQ1XHU5NmUyXHU5NmRjXHU5NmQ5XHU5NmRiXHU5NmRlXHU5NzI0XHU5N2EzXHU5N2E2Il0sWyJjMzQwIiwiXHU5N2FkXHU5N2Y5XHU5ODRkXHU5ODRmXHU5ODRjXHU5ODRlXHU5ODUzXHU5''@;'; put 'put ''OGJhXHU5OTNlXHU5OTNmXHU5OTNkXHU5OTJlXHU5OWE1XHU5YTBlXHU5YWMxXHU5YjAzXHU5YjA2XHU5YjRmXHU5YjRlXHU5YjRkXHU5YmNhXHU5YmM5XHU5YmZkXHU5YmM4XHU5YmMwXHU5ZDUxXHU5ZDVkXHU5ZDYwXHU5ZWUwXHU5ZjE1XHU5ZjJjXHU1MTMzXHU1NmE1XHU1OGRlXHU1OGRm''@;'; put 'put ''XHU1OGUyXHU1YmY1XHU5ZjkwXHU1ZWVjXHU2MWYyXHU2MWY3XHU2MWY2XHU2MWY1XHU2NTAwXHU2NTBmXHU2NmUwXHU2NmRkXHU2YWU1XHU2YWRkXHU2YWRhXHU2YWQzXHU3MDFiXHU3MDFmXHU3MDI4XHU3MDFhXHU3MDFkXHU3MDE1XHU3MDE4XHU3MjA2XHU3MjBkXHU3MjU4XHU3MmEyXHU3''@;'; put 'put ''Mzc4Il0sWyJjM2ExIiwiXHU3MzdhXHU3NGJkXHU3NGNhXHU3NGUzXHU3NTg3XHU3NTg2XHU3NjVmXHU3NjYxXHU3N2M3XHU3OTE5XHU3OWIxXHU3YTZiXHU3YTY5XHU3YzNlXHU3YzNmXHU3YzM4XHU3YzNkXHU3YzM3XHU3YzQwXHU3ZTZiXHU3ZTZkXHU3ZTc5XHU3ZTY5XHU3ZTZhXHU3Zjg1''@;'; put 'put ''XHU3ZTczXHU3ZmI2XHU3ZmI5XHU3ZmI4XHU4MWQ4XHU4NWU5XHU4NWRkXHU4NWVhXHU4NWQ1XHU4NWU0XHU4NWU1XHU4NWY3XHU4N2ZiXHU4ODA1XHU4ODBkXHU4N2Y5XHU4N2ZlXHU4OTYwXHU4OTVmXHU4OTU2XHU4OTVlXHU4YjQxXHU4YjVjXHU4YjU4XHU4YjQ5XHU4YjVhXHU4YjRlXHU4''@;'; put 'put ''YjRmXHU4YjQ2XHU4YjU5XHU4ZDA4XHU4ZDBhXHU4ZTdjXHU4ZTcyXHU4ZTg3XHU4ZTc2XHU4ZTZjXHU4ZTdhXHU4ZTc0XHU4ZjU0XHU4ZjRlXHU4ZmFkXHU5MDhhXHU5MDhiXHU5MWIxXHU5MWFlXHU5M2UxXHU5M2QxXHU5M2RmXHU5M2MzXHU5M2M4XHU5M2RjXHU5M2RkXHU5M2Q2XHU5M2Uy''@;'; put 'put ''XHU5M2NkXHU5M2Q4XHU5M2U0XHU5M2Q3XHU5M2U4XHU5NWRjXHU5NmI0XHU5NmUzXHU5NzJhXHU5NzI3XHU5NzYxXHU5N2RjXHU5N2ZiXHU5ODVlIl0sWyJjNDQwIiwiXHU5ODU4XHU5ODViXHU5OGJjXHU5OTQ1XHU5OTQ5XHU5YTE2XHU5YTE5XHU5YjBkXHU5YmU4XHU5YmU3XHU5YmQ2XHU5''@;'; put 'put ''YmRiXHU5ZDg5XHU5ZDYxXHU5ZDcyXHU5ZDZhXHU5ZDZjXHU5ZTkyXHU5ZTk3XHU5ZTkzXHU5ZWI0XHU1MmY4XHU1NmE4XHU1NmI3XHU1NmI2XHU1NmI0XHU1NmJjXHU1OGU0XHU1YjQwXHU1YjQzXHU1YjdkXHU1YmY2XHU1ZGM5XHU2MWY4XHU2MWZhXHU2NTE4XHU2NTE0XHU2NTE5XHU2NmU2''@;'; put 'put ''XHU2NzI3XHU2YWVjXHU3MDNlXHU3MDMwXHU3MDMyXHU3MjEwXHU3MzdiXHU3NGNmXHU3NjYyXHU3NjY1XHU3OTI2XHU3OTJhXHU3OTJjXHU3OTJiXHU3YWM3XHU3YWY2XHU3YzRjXHU3YzQzXHU3YzRkXHU3Y2VmXHU3Y2YwXHU4ZmFlXHU3ZTdkXHU3ZTdjIl0sWyJjNGExIiwiXHU3ZTgyXHU3''@;'; put 'put ''ZjRjXHU4MDAwXHU4MWRhXHU4MjY2XHU4NWZiXHU4NWY5XHU4NjExXHU4NWZhXHU4NjA2XHU4NjBiXHU4NjA3XHU4NjBhXHU4ODE0XHU4ODE1XHU4OTY0XHU4OWJhXHU4OWY4XHU4YjcwXHU4YjZjXHU4YjY2XHU4YjZmXHU4YjVmXHU4YjZiXHU4ZDBmXHU4ZDBkXHU4ZTg5XHU4ZTgxXHU4ZTg1''@;'; put 'put ''XHU4ZTgyXHU5MWI0XHU5MWNiXHU5NDE4XHU5NDAzXHU5M2ZkXHU5NWUxXHU5NzMwXHU5OGM0XHU5OTUyXHU5OTUxXHU5OWE4XHU5YTJiXHU5YTMwXHU5YTM3XHU5YTM1XHU5YzEzXHU5YzBkXHU5ZTc5XHU5ZWI1XHU5ZWU4XHU5ZjJmXHU5ZjVmXHU5ZjYzXHU5ZjYxXHU1MTM3XHU1MTM4XHU1''@;'; put 'put ''NmMxXHU1NmMwXHU1NmMyXHU1OTE0XHU1YzZjXHU1ZGNkXHU2MWZjXHU2MWZlXHU2NTFkXHU2NTFjXHU2NTk1XHU2NmU5XHU2YWZiXHU2YjA0XHU2YWZhXHU2YmIyXHU3MDRjXHU3MjFiXHU3MmE3XHU3NGQ2XHU3NGQ0XHU3NjY5XHU3N2QzXHU3YzUwXHU3ZThmXHU3ZThjXHU3ZmJjXHU4NjE3''@;'; put 'put ''XHU4NjJkXHU4NjFhXHU4ODIzXHU4ODIyXHU4ODIxXHU4ODFmXHU4OTZhXHU4OTZjXHU4OWJkXHU4Yjc0Il0sWyJjNTQwIiwiXHU4Yjc3XHU4YjdkXHU4ZDEzXHU4ZThhXHU4ZThkXHU4ZThiXHU4ZjVmXHU4ZmFmXHU5MWJhXHU5NDJlXHU5NDMzXHU5NDM1XHU5NDNhXHU5NDM4XHU5NDMyXHU5''@;'; put 'put ''NDJiXHU5NWUyXHU5NzM4XHU5NzM5XHU5NzMyXHU5N2ZmXHU5ODY3XHU5ODY1XHU5OTU3XHU5YTQ1XHU5YTQzXHU5YTQwXHU5YTNlXHU5YWNmXHU5YjU0XHU5YjUxXHU5YzJkXHU5YzI1XHU5ZGFmXHU5ZGI0XHU5ZGMyXHU5ZGI4XHU5ZTlkXHU5ZWVmXHU5ZjE5XHU5ZjVjXHU5ZjY2XHU5ZjY3''@;'; put 'put ''XHU1MTNjXHU1MTNiXHU1NmM4XHU1NmNhXHU1NmM5XHU1YjdmXHU1ZGQ0XHU1ZGQyXHU1ZjRlXHU2MWZmXHU2NTI0XHU2YjBhXHU2YjYxXHU3MDUxXHU3MDU4XHU3MzgwXHU3NGU0XHU3NThhXHU3NjZlXHU3NjZjIl0sWyJjNWExIiwiXHU3OWIzXHU3YzYwXHU3YzVmXHU4MDdlXHU4MDdkXHU4''@;'; put 'put ''MWRmXHU4OTcyXHU4OTZmXHU4OWZjXHU4YjgwXHU4ZDE2XHU4ZDE3XHU4ZTkxXHU4ZTkzXHU4ZjYxXHU5MTQ4XHU5NDQ0XHU5NDUxXHU5NDUyXHU5NzNkXHU5NzNlXHU5N2MzXHU5N2MxXHU5ODZiXHU5OTU1XHU5YTU1XHU5YTRkXHU5YWQyXHU5YjFhXHU5YzQ5XHU5YzMxXHU5YzNlXHU5YzNi''@;'; put 'put ''XHU5ZGQzXHU5ZGQ3XHU5ZjM0XHU5ZjZjXHU5ZjZhXHU5Zjk0XHU1NmNjXHU1ZGQ2XHU2MjAwXHU2NTIzXHU2NTJiXHU2NTJhXHU2NmVjXHU2YjEwXHU3NGRhXHU3YWNhXHU3YzY0XHU3YzYzXHU3YzY1XHU3ZTkzXHU3ZTk2XHU3ZTk0XHU4MWUyXHU4NjM4XHU4NjNmXHU4ODMxXHU4YjhhXHU5''@;'; put 'put ''MDkwXHU5MDhmXHU5NDYzXHU5NDYwXHU5NDY0XHU5NzY4XHU5ODZmXHU5OTVjXHU5YTVhXHU5YTViXHU5YTU3XHU5YWQzXHU5YWQ0XHU5YWQxXHU5YzU0XHU5YzU3XHU5YzU2XHU5ZGU1XHU5ZTlmXHU5ZWY0XHU1NmQxXHU1OGU5XHU2NTJjXHU3MDVlXHU3NjcxXHU3NjcyXHU3N2Q3XHU3ZjUw''@;'; put 'put ''XHU3Zjg4XHU4ODM2XHU4ODM5XHU4ODYyXHU4YjkzXHU4YjkyIl0sWyJjNjQwIiwiXHU4Yjk2XHU4Mjc3XHU4ZDFiXHU5MWMwXHU5NDZhXHU5NzQyXHU5NzQ4XHU5NzQ0XHU5N2M2XHU5ODcwXHU5YTVmXHU5YjIyXHU5YjU4XHU5YzVmXHU5ZGY5XHU5ZGZhXHU5ZTdjXHU5ZTdkXHU5ZjA3XHU5''@;'; put 'put ''Zjc3XHU5ZjcyXHU1ZWYzXHU2YjE2XHU3MDYzXHU3YzZjXHU3YzZlXHU4ODNiXHU4OWMwXHU4ZWExXHU5MWMxXHU5NDcyXHU5NDcwXHU5ODcxXHU5OTVlXHU5YWQ2XHU5YjIzXHU5ZWNjXHU3MDY0XHU3N2RhXHU4YjlhXHU5NDc3XHU5N2M5XHU5YTYyXHU5YTY1XHU3ZTljXHU4YjljXHU4ZWFh''@;'; put 'put ''XHU5MWM1XHU5NDdkXHU5NDdlXHU5NDdjXHU5Yzc3XHU5Yzc4XHU5ZWY3XHU4YzU0XHU5NDdmXHU5ZTFhXHU3MjI4XHU5YTZhXHU5YjMxXHU5ZTFiXHU5ZTFlXHU3YzcyIl0sWyJjOTQwIiwiXHU0ZTQyXHU0ZTVjXHU1MWY1XHU1MzFhXHU1MzgyXHU0ZTA3XHU0ZTBjXHU0ZTQ3XHU0ZThkXHU1''@;'; put 'put ''NmQ3XHVmYTBjXHU1YzZlXHU1ZjczXHU0ZTBmXHU1MTg3XHU0ZTBlXHU0ZTJlXHU0ZTkzXHU0ZWMyXHU0ZWM5XHU0ZWM4XHU1MTk4XHU1MmZjXHU1MzZjXHU1M2I5XHU1NzIwXHU1OTAzXHU1OTJjXHU1YzEwXHU1ZGZmXHU2NWUxXHU2YmIzXHU2YmNjXHU2YzE0XHU3MjNmXHU0ZTMxXHU0ZTNj''@;'; put 'put ''XHU0ZWU4XHU0ZWRjXHU0ZWU5XHU0ZWUxXHU0ZWRkXHU0ZWRhXHU1MjBjXHU1MzFjXHU1MzRjXHU1NzIyXHU1NzIzXHU1OTE3XHU1OTJmXHU1YjgxXHU1Yjg0XHU1YzEyXHU1YzNiXHU1Yzc0XHU1YzczXHU1ZTA0XHU1ZTgwXHU1ZTgyXHU1ZmM5XHU2MjA5XHU2MjUwXHU2YzE1Il0sWyJjOWEx''@;'; put 'put ''IiwiXHU2YzM2XHU2YzQzXHU2YzNmXHU2YzNiXHU3MmFlXHU3MmIwXHU3MzhhXHU3OWI4XHU4MDhhXHU5NjFlXHU0ZjBlXHU0ZjE4XHU0ZjJjXHU0ZWY1XHU0ZjE0XHU0ZWYxXHU0ZjAwXHU0ZWY3XHU0ZjA4XHU0ZjFkXHU0ZjAyXHU0ZjA1XHU0ZjIyXHU0ZjEzXHU0ZjA0XHU0ZWY0XHU0ZjEy''@;'; put 'put ''XHU1MWIxXHU1MjEzXHU1MjA5XHU1MjEwXHU1MmE2XHU1MzIyXHU1MzFmXHU1MzRkXHU1MzhhXHU1NDA3XHU1NmUxXHU1NmRmXHU1NzJlXHU1NzJhXHU1NzM0XHU1OTNjXHU1OTgwXHU1OTdjXHU1OTg1XHU1OTdiXHU1OTdlXHU1OTc3XHU1OTdmXHU1YjU2XHU1YzE1XHU1YzI1XHU1YzdjXHU1''@;'; put 'put ''YzdhXHU1YzdiXHU1YzdlXHU1ZGRmXHU1ZTc1XHU1ZTg0XHU1ZjAyXHU1ZjFhXHU1Zjc0XHU1ZmQ1XHU1ZmQ0XHU1ZmNmXHU2MjVjXHU2MjVlXHU2MjY0XHU2MjYxXHU2MjY2XHU2MjYyXHU2MjU5XHU2MjYwXHU2MjVhXHU2MjY1XHU2NWVmXHU2NWVlXHU2NzNlXHU2NzM5XHU2NzM4XHU2NzNi''@;'; put 'put ''XHU2NzNhXHU2NzNmXHU2NzNjXHU2NzMzXHU2YzE4XHU2YzQ2XHU2YzUyXHU2YzVjXHU2YzRmXHU2YzRhXHU2YzU0XHU2YzRiIl0sWyJjYTQwIiwiXHU2YzRjXHU3MDcxXHU3MjVlXHU3MmI0XHU3MmI1XHU3MzhlXHU3NTJhXHU3NjdmXHU3YTc1XHU3ZjUxXHU4Mjc4XHU4MjdjXHU4MjgwXHU4''@;'; put 'put ''MjdkXHU4MjdmXHU4NjRkXHU4OTdlXHU5MDk5XHU5MDk3XHU5MDk4XHU5MDliXHU5MDk0XHU5NjIyXHU5NjI0XHU5NjIwXHU5NjIzXHU0ZjU2XHU0ZjNiXHU0ZjYyXHU0ZjQ5XHU0ZjUzXHU0ZjY0XHU0ZjNlXHU0ZjY3XHU0ZjUyXHU0ZjVmXHU0ZjQxXHU0ZjU4XHU0ZjJkXHU0ZjMzXHU0ZjNm''@;'; put 'put ''XHU0ZjYxXHU1MThmXHU1MWI5XHU1MjFjXHU1MjFlXHU1MjIxXHU1MmFkXHU1MmFlXHU1MzA5XHU1MzYzXHU1MzcyXHU1MzhlXHU1MzhmXHU1NDMwXHU1NDM3XHU1NDJhXHU1NDU0XHU1NDQ1XHU1NDE5XHU1NDFjXHU1NDI1XHU1NDE4Il0sWyJjYWExIiwiXHU1NDNkXHU1NDRmXHU1NDQxXHU1''@;'; put 'put ''NDI4XHU1NDI0XHU1NDQ3XHU1NmVlXHU1NmU3XHU1NmU1XHU1NzQxXHU1NzQ1XHU1NzRjXHU1NzQ5XHU1NzRiXHU1NzUyXHU1OTA2XHU1OTQwXHU1OWE2XHU1OTk4XHU1OWEwXHU1OTk3XHU1OThlXHU1OWEyXHU1OTkwXHU1OThmXHU1OWE3XHU1OWExXHU1YjhlXHU1YjkyXHU1YzI4XHU1YzJh''@;'; put 'put ''XHU1YzhkXHU1YzhmXHU1Yzg4XHU1YzhiXHU1Yzg5XHU1YzkyXHU1YzhhXHU1Yzg2XHU1YzkzXHU1Yzk1XHU1ZGUwXHU1ZTBhXHU1ZTBlXHU1ZThiXHU1ZTg5XHU1ZThjXHU1ZTg4XHU1ZThkXHU1ZjA1XHU1ZjFkXHU1Zjc4XHU1Zjc2XHU1ZmQyXHU1ZmQxXHU1ZmQwXHU1ZmVkXHU1ZmU4XHU1''@;'; put 'put ''ZmVlXHU1ZmYzXHU1ZmUxXHU1ZmU0XHU1ZmUzXHU1ZmZhXHU1ZmVmXHU1ZmY3XHU1ZmZiXHU2MDAwXHU1ZmY0XHU2MjNhXHU2MjgzXHU2MjhjXHU2MjhlXHU2MjhmXHU2Mjk0XHU2Mjg3XHU2MjcxXHU2MjdiXHU2MjdhXHU2MjcwXHU2MjgxXHU2Mjg4XHU2Mjc3XHU2MjdkXHU2MjcyXHU2Mjc0''@;'; put 'put ''XHU2NTM3XHU2NWYwXHU2NWY0XHU2NWYzXHU2NWYyXHU2NWY1XHU2NzQ1XHU2NzQ3Il0sWyJjYjQwIiwiXHU2NzU5XHU2NzU1XHU2NzRjXHU2NzQ4XHU2NzVkXHU2NzRkXHU2NzVhXHU2NzRiXHU2YmQwXHU2YzE5XHU2YzFhXHU2Yzc4XHU2YzY3XHU2YzZiXHU2Yzg0XHU2YzhiXHU2YzhmXHU2''@;'; put 'put ''YzcxXHU2YzZmXHU2YzY5XHU2YzlhXHU2YzZkXHU2Yzg3XHU2Yzk1XHU2YzljXHU2YzY2XHU2YzczXHU2YzY1XHU2YzdiXHU2YzhlXHU3MDc0XHU3MDdhXHU3MjYzXHU3MmJmXHU3MmJkXHU3MmMzXHU3MmM2XHU3MmMxXHU3MmJhXHU3MmM1XHU3Mzk1XHU3Mzk3XHU3MzkzXHU3Mzk0XHU3Mzky''@;'; put 'put ''XHU3NTNhXHU3NTM5XHU3NTk0XHU3NTk1XHU3NjgxXHU3OTNkXHU4MDM0XHU4MDk1XHU4MDk5XHU4MDkwXHU4MDkyXHU4MDljXHU4MjkwXHU4MjhmXHU4Mjg1XHU4MjhlXHU4MjkxXHU4MjkzIl0sWyJjYmExIiwiXHU4MjhhXHU4MjgzXHU4Mjg0XHU4Yzc4XHU4ZmM5XHU4ZmJmXHU5MDlmXHU5''@;'; put 'put ''MGExXHU5MGE1XHU5MDllXHU5MGE3XHU5MGEwXHU5NjMwXHU5NjI4XHU5NjJmXHU5NjJkXHU0ZTMzXHU0Zjk4XHU0ZjdjXHU0Zjg1XHU0ZjdkXHU0ZjgwXHU0Zjg3XHU0Zjc2XHU0Zjc0XHU0Zjg5XHU0Zjg0XHU0Zjc3XHU0ZjRjXHU0Zjk3XHU0ZjZhXHU0ZjlhXHU0Zjc5XHU0ZjgxXHU0Zjc4''@;'; put 'put ''XHU0ZjkwXHU0ZjljXHU0Zjk0XHU0ZjllXHU0ZjkyXHU0ZjgyXHU0Zjk1XHU0ZjZiXHU0ZjZlXHU1MTllXHU1MWJjXHU1MWJlXHU1MjM1XHU1MjMyXHU1MjMzXHU1MjQ2XHU1MjMxXHU1MmJjXHU1MzBhXHU1MzBiXHU1MzNjXHU1MzkyXHU1Mzk0XHU1NDg3XHU1NDdmXHU1NDgxXHU1NDkxXHU1''@;'; put 'put ''NDgyXHU1NDg4XHU1NDZiXHU1NDdhXHU1NDdlXHU1NDY1XHU1NDZjXHU1NDc0XHU1NDY2XHU1NDhkXHU1NDZmXHU1NDYxXHU1NDYwXHU1NDk4XHU1NDYzXHU1NDY3XHU1NDY0XHU1NmY3XHU1NmY5XHU1NzZmXHU1NzcyXHU1NzZkXHU1NzZiXHU1NzcxXHU1NzcwXHU1Nzc2XHU1NzgwXHU1Nzc1''@;'; put 'put ''XHU1NzdiXHU1NzczXHU1Nzc0XHU1NzYyIl0sWyJjYzQwIiwiXHU1NzY4XHU1NzdkXHU1OTBjXHU1OTQ1XHU1OWI1XHU1OWJhXHU1OWNmXHU1OWNlXHU1OWIyXHU1OWNjXHU1OWMxXHU1OWI2XHU1OWJjXHU1OWMzXHU1OWQ2XHU1OWIxXHU1OWJkXHU1OWMwXHU1OWM4XHU1OWI0XHU1OWM3XHU1''@;'; put 'put ''YjYyXHU1YjY1XHU1YjkzXHU1Yjk1XHU1YzQ0XHU1YzQ3XHU1Y2FlXHU1Y2E0XHU1Y2EwXHU1Y2I1XHU1Y2FmXHU1Y2E4XHU1Y2FjXHU1YzlmXHU1Y2EzXHU1Y2FkXHU1Y2EyXHU1Y2FhXHU1Y2E3XHU1YzlkXHU1Y2E1XHU1Y2I2XHU1Y2IwXHU1Y2E2XHU1ZTE3XHU1ZTE0XHU1ZTE5XHU1ZjI4''@;'; put 'put ''XHU1ZjIyXHU1ZjIzXHU1ZjI0XHU1ZjU0XHU1ZjgyXHU1ZjdlXHU1ZjdkXHU1ZmRlXHU1ZmU1XHU2MDJkXHU2MDI2XHU2MDE5XHU2MDMyXHU2MDBiIl0sWyJjY2ExIiwiXHU2MDM0XHU2MDBhXHU2MDE3XHU2MDMzXHU2MDFhXHU2MDFlXHU2MDJjXHU2MDIyXHU2MDBkXHU2MDEwXHU2MDJlXHU2''@;'; put 'put ''MDEzXHU2MDExXHU2MDBjXHU2MDA5XHU2MDFjXHU2MjE0XHU2MjNkXHU2MmFkXHU2MmI0XHU2MmQxXHU2MmJlXHU2MmFhXHU2MmI2XHU2MmNhXHU2MmFlXHU2MmIzXHU2MmFmXHU2MmJiXHU2MmE5XHU2MmIwXHU2MmI4XHU2NTNkXHU2NWE4XHU2NWJiXHU2NjA5XHU2NWZjXHU2NjA0XHU2NjEy''@;'; put 'put ''XHU2NjA4XHU2NWZiXHU2NjAzXHU2NjBiXHU2NjBkXHU2NjA1XHU2NWZkXHU2NjExXHU2NjEwXHU2NmY2XHU2NzBhXHU2Nzg1XHU2NzZjXHU2NzhlXHU2NzkyXHU2Nzc2XHU2NzdiXHU2Nzk4XHU2Nzg2XHU2Nzg0XHU2Nzc0XHU2NzhkXHU2NzhjXHU2NzdhXHU2NzlmXHU2NzkxXHU2Nzk5XHU2''@;'; put 'put ''NzgzXHU2NzdkXHU2NzgxXHU2Nzc4XHU2Nzc5XHU2Nzk0XHU2YjI1XHU2YjgwXHU2YjdlXHU2YmRlXHU2YzFkXHU2YzkzXHU2Y2VjXHU2Y2ViXHU2Y2VlXHU2Y2Q5XHU2Y2I2XHU2Y2Q0XHU2Y2FkXHU2Y2U3XHU2Y2I3XHU2Y2QwXHU2Y2MyXHU2Y2JhXHU2Y2MzXHU2Y2M2XHU2Y2VkXHU2Y2Yy''@;'; put 'put ''Il0sWyJjZDQwIiwiXHU2Y2QyXHU2Y2RkXHU2Y2I0XHU2YzhhXHU2YzlkXHU2YzgwXHU2Y2RlXHU2Y2MwXHU2ZDMwXHU2Y2NkXHU2Y2M3XHU2Y2IwXHU2Y2Y5XHU2Y2NmXHU2Y2U5XHU2Y2QxXHU3MDk0XHU3MDk4XHU3MDg1XHU3MDkzXHU3MDg2XHU3MDg0XHU3MDkxXHU3MDk2XHU3MDgyXHU3''@;'; put 'put ''MDlhXHU3MDgzXHU3MjZhXHU3MmQ2XHU3MmNiXHU3MmQ4XHU3MmM5XHU3MmRjXHU3MmQyXHU3MmQ0XHU3MmRhXHU3MmNjXHU3MmQxXHU3M2E0XHU3M2ExXHU3M2FkXHU3M2E2XHU3M2EyXHU3M2EwXHU3M2FjXHU3MzlkXHU3NGRkXHU3NGU4XHU3NTNmXHU3NTQwXHU3NTNlXHU3NThjXHU3NTk4''@;'; put 'put ''XHU3NmFmXHU3NmYzXHU3NmYxXHU3NmYwXHU3NmY1XHU3N2Y4XHU3N2ZjXHU3N2Y5XHU3N2ZiXHU3N2ZhIl0sWyJjZGExIiwiXHU3N2Y3XHU3OTQyXHU3OTNmXHU3OWM1XHU3YTc4XHU3YTdiXHU3YWZiXHU3Yzc1XHU3Y2ZkXHU4MDM1XHU4MDhmXHU4MGFlXHU4MGEzXHU4MGI4XHU4MGI1XHU4''@;'; put 'put ''MGFkXHU4MjIwXHU4MmEwXHU4MmMwXHU4MmFiXHU4MjlhXHU4Mjk4XHU4MjliXHU4MmI1XHU4MmE3XHU4MmFlXHU4MmJjXHU4MjllXHU4MmJhXHU4MmI0XHU4MmE4XHU4MmExXHU4MmE5XHU4MmMyXHU4MmE0XHU4MmMzXHU4MmI2XHU4MmEyXHU4NjcwXHU4NjZmXHU4NjZkXHU4NjZlXHU4YzU2''@;'; put 'put ''XHU4ZmQyXHU4ZmNiXHU4ZmQzXHU4ZmNkXHU4ZmQ2XHU4ZmQ1XHU4ZmQ3XHU5MGIyXHU5MGI0XHU5MGFmXHU5MGIzXHU5MGIwXHU5NjM5XHU5NjNkXHU5NjNjXHU5NjNhXHU5NjQzXHU0ZmNkXHU0ZmM1XHU0ZmQzXHU0ZmIyXHU0ZmM5XHU0ZmNiXHU0ZmMxXHU0ZmQ0XHU0ZmRjXHU0ZmQ5XHU0''@;'; put 'put ''ZmJiXHU0ZmIzXHU0ZmRiXHU0ZmM3XHU0ZmQ2XHU0ZmJhXHU0ZmMwXHU0ZmI5XHU0ZmVjXHU1MjQ0XHU1MjQ5XHU1MmMwXHU1MmMyXHU1MzNkXHU1MzdjXHU1Mzk3XHU1Mzk2XHU1Mzk5XHU1Mzk4XHU1NGJhXHU1NGExXHU1NGFkXHU1NGE1XHU1NGNmIl0sWyJjZTQwIiwiXHU1NGMzXHU4MzBk''@;'; put 'put ''XHU1NGI3XHU1NGFlXHU1NGQ2XHU1NGI2XHU1NGM1XHU1NGM2XHU1NGEwXHU1NDcwXHU1NGJjXHU1NGEyXHU1NGJlXHU1NDcyXHU1NGRlXHU1NGIwXHU1N2I1XHU1NzllXHU1NzlmXHU1N2E0XHU1NzhjXHU1Nzk3XHU1NzlkXHU1NzliXHU1Nzk0XHU1Nzk4XHU1NzhmXHU1Nzk5XHU1N2E1XHU1''@;'; put 'put ''NzlhXHU1Nzk1XHU1OGY0XHU1OTBkXHU1OTUzXHU1OWUxXHU1OWRlXHU1OWVlXHU1YTAwXHU1OWYxXHU1OWRkXHU1OWZhXHU1OWZkXHU1OWZjXHU1OWY2XHU1OWU0XHU1OWYyXHU1OWY3XHU1OWRiXHU1OWU5XHU1OWYzXHU1OWY1XHU1OWUwXHU1OWZlXHU1OWY0XHU1OWVkXHU1YmE4XHU1YzRj''@;'; put 'put ''XHU1Y2QwXHU1Y2Q4XHU1Y2NjXHU1Y2Q3XHU1Y2NiXHU1Y2RiIl0sWyJjZWExIiwiXHU1Y2RlXHU1Y2RhXHU1Y2M5XHU1Y2M3XHU1Y2NhXHU1Y2Q2XHU1Y2QzXHU1Y2Q0XHU1Y2NmXHU1Y2M4XHU1Y2M2XHU1Y2NlXHU1Y2RmXHU1Y2Y4XHU1ZGY5XHU1ZTIxXHU1ZTIyXHU1ZTIzXHU1ZTIwXHU1''@;'; put 'put ''ZTI0XHU1ZWIwXHU1ZWE0XHU1ZWEyXHU1ZTliXHU1ZWEzXHU1ZWE1XHU1ZjA3XHU1ZjJlXHU1ZjU2XHU1Zjg2XHU2MDM3XHU2MDM5XHU2MDU0XHU2MDcyXHU2MDVlXHU2MDQ1XHU2MDUzXHU2MDQ3XHU2MDQ5XHU2MDViXHU2MDRjXHU2MDQwXHU2MDQyXHU2MDVmXHU2MDI0XHU2MDQ0XHU2MDU4''@;'; put 'put ''XHU2MDY2XHU2MDZlXHU2MjQyXHU2MjQzXHU2MmNmXHU2MzBkXHU2MzBiXHU2MmY1XHU2MzBlXHU2MzAzXHU2MmViXHU2MmY5XHU2MzBmXHU2MzBjXHU2MmY4XHU2MmY2XHU2MzAwXHU2MzEzXHU2MzE0XHU2MmZhXHU2MzE1XHU2MmZiXHU2MmYwXHU2NTQxXHU2NTQzXHU2NWFhXHU2NWJmXHU2''@;'; put 'put ''NjM2XHU2NjIxXHU2NjMyXHU2NjM1XHU2NjFjXHU2NjI2XHU2NjIyXHU2NjMzXHU2NjJiXHU2NjNhXHU2NjFkXHU2NjM0XHU2NjM5XHU2NjJlXHU2NzBmXHU2NzEwXHU2N2MxXHU2N2YyXHU2N2M4XHU2N2JhIl0sWyJjZjQwIiwiXHU2N2RjXHU2N2JiXHU2N2Y4XHU2N2Q4XHU2N2MwXHU2N2I3''@;'; put 'put ''XHU2N2M1XHU2N2ViXHU2N2U0XHU2N2RmXHU2N2I1XHU2N2NkXHU2N2IzXHU2N2Y3XHU2N2Y2XHU2N2VlXHU2N2UzXHU2N2MyXHU2N2I5XHU2N2NlXHU2N2U3XHU2N2YwXHU2N2IyXHU2N2ZjXHU2N2M2XHU2N2VkXHU2N2NjXHU2N2FlXHU2N2U2XHU2N2RiXHU2N2ZhXHU2N2M5XHU2N2NhXHU2''@;'; put 'put ''N2MzXHU2N2VhXHU2N2NiXHU2YjI4XHU2YjgyXHU2Yjg0XHU2YmI2XHU2YmQ2XHU2YmQ4XHU2YmUwXHU2YzIwXHU2YzIxXHU2ZDI4XHU2ZDM0XHU2ZDJkXHU2ZDFmXHU2ZDNjXHU2ZDNmXHU2ZDEyXHU2ZDBhXHU2Y2RhXHU2ZDMzXHU2ZDA0XHU2ZDE5XHU2ZDNhXHU2ZDFhXHU2ZDExXHU2ZDAw''@;'; put 'put ''XHU2ZDFkXHU2ZDQyIl0sWyJjZmExIiwiXHU2ZDAxXHU2ZDE4XHU2ZDM3XHU2ZDAzXHU2ZDBmXHU2ZDQwXHU2ZDA3XHU2ZDIwXHU2ZDJjXHU2ZDA4XHU2ZDIyXHU2ZDA5XHU2ZDEwXHU3MGI3XHU3MDlmXHU3MGJlXHU3MGIxXHU3MGIwXHU3MGExXHU3MGI0XHU3MGI1XHU3MGE5XHU3MjQxXHU3''@;'; put 'put ''MjQ5XHU3MjRhXHU3MjZjXHU3MjcwXHU3MjczXHU3MjZlXHU3MmNhXHU3MmU0XHU3MmU4XHU3MmViXHU3MmRmXHU3MmVhXHU3MmU2XHU3MmUzXHU3Mzg1XHU3M2NjXHU3M2MyXHU3M2M4XHU3M2M1XHU3M2I5XHU3M2I2XHU3M2I1XHU3M2I0XHU3M2ViXHU3M2JmXHU3M2M3XHU3M2JlXHU3M2Mz''@;'; put 'put ''XHU3M2M2XHU3M2I4XHU3M2NiXHU3NGVjXHU3NGVlXHU3NTJlXHU3NTQ3XHU3NTQ4XHU3NWE3XHU3NWFhXHU3Njc5XHU3NmM0XHU3NzA4XHU3NzAzXHU3NzA0XHU3NzA1XHU3NzBhXHU3NmY3XHU3NmZiXHU3NmZhXHU3N2U3XHU3N2U4XHU3ODA2XHU3ODExXHU3ODEyXHU3ODA1XHU3ODEwXHU3''@;'; put 'put ''ODBmXHU3ODBlXHU3ODA5XHU3ODAzXHU3ODEzXHU3OTRhXHU3OTRjXHU3OTRiXHU3OTQ1XHU3OTQ0XHU3OWQ1XHU3OWNkXHU3OWNmXHU3OWQ2XHU3OWNlXHU3YTgwIl0sWyJkMDQwIiwiXHU3YTdlXHU3YWQxXHU3YjAwXHU3YjAxXHU3YzdhXHU3Yzc4XHU3Yzc5XHU3YzdmXHU3YzgwXHU3Yzgx''@;'; put 'put ''XHU3ZDAzXHU3ZDA4XHU3ZDAxXHU3ZjU4XHU3ZjkxXHU3ZjhkXHU3ZmJlXHU4MDA3XHU4MDBlXHU4MDBmXHU4MDE0XHU4MDM3XHU4MGQ4XHU4MGM3XHU4MGUwXHU4MGQxXHU4MGM4XHU4MGMyXHU4MGQwXHU4MGM1XHU4MGUzXHU4MGQ5XHU4MGRjXHU4MGNhXHU4MGQ1XHU4MGM5XHU4MGNmXHU4''@;'; put 'put ''MGQ3XHU4MGU2XHU4MGNkXHU4MWZmXHU4MjIxXHU4Mjk0XHU4MmQ5XHU4MmZlXHU4MmY5XHU4MzA3XHU4MmU4XHU4MzAwXHU4MmQ1XHU4MzNhXHU4MmViXHU4MmQ2XHU4MmY0XHU4MmVjXHU4MmUxXHU4MmYyXHU4MmY1XHU4MzBjXHU4MmZiXHU4MmY2XHU4MmYwXHU4MmVhIl0sWyJkMGExIiwi''@;'; put 'put ''XHU4MmU0XHU4MmUwXHU4MmZhXHU4MmYzXHU4MmVkXHU4Njc3XHU4Njc0XHU4NjdjXHU4NjczXHU4ODQxXHU4ODRlXHU4ODY3XHU4ODZhXHU4ODY5XHU4OWQzXHU4YTA0XHU4YTA3XHU4ZDcyXHU4ZmUzXHU4ZmUxXHU4ZmVlXHU4ZmUwXHU5MGYxXHU5MGJkXHU5MGJmXHU5MGQ1XHU5MGM1XHU5''@;'; put 'put ''MGJlXHU5MGM3XHU5MGNiXHU5MGM4XHU5MWQ0XHU5MWQzXHU5NjU0XHU5NjRmXHU5NjUxXHU5NjUzXHU5NjRhXHU5NjRlXHU1MDFlXHU1MDA1XHU1MDA3XHU1MDEzXHU1MDIyXHU1MDMwXHU1MDFiXHU0ZmY1XHU0ZmY0XHU1MDMzXHU1MDM3XHU1MDJjXHU0ZmY2XHU0ZmY3XHU1MDE3XHU1MDFj''@;'; put 'put ''XHU1MDIwXHU1MDI3XHU1MDM1XHU1MDJmXHU1MDMxXHU1MDBlXHU1MTVhXHU1MTk0XHU1MTkzXHU1MWNhXHU1MWM0XHU1MWM1XHU1MWM4XHU1MWNlXHU1MjYxXHU1MjVhXHU1MjUyXHU1MjVlXHU1MjVmXHU1MjU1XHU1MjYyXHU1MmNkXHU1MzBlXHU1MzllXHU1NTI2XHU1NGUyXHU1NTE3XHU1''@;'; put 'put ''NTEyXHU1NGU3XHU1NGYzXHU1NGU0XHU1NTFhXHU1NGZmXHU1NTA0XHU1NTA4XHU1NGViXHU1NTExXHU1NTA1XHU1NGYxIl0sWyJkMTQwIiwiXHU1NTBhXHU1NGZiXHU1NGY3XHU1NGY4XHU1NGUwXHU1NTBlXHU1NTAzXHU1NTBiXHU1NzAxXHU1NzAyXHU1N2NjXHU1ODMyXHU1N2Q1XHU1N2Qy''@;'; put 'put ''XHU1N2JhXHU1N2M2XHU1N2JkXHU1N2JjXHU1N2I4XHU1N2I2XHU1N2JmXHU1N2M3XHU1N2QwXHU1N2I5XHU1N2MxXHU1OTBlXHU1OTRhXHU1YTE5XHU1YTE2XHU1YTJkXHU1YTJlXHU1YTE1XHU1YTBmXHU1YTE3XHU1YTBhXHU1YTFlXHU1YTMzXHU1YjZjXHU1YmE3XHU1YmFkXHU1YmFjXHU1''@;'; put 'put ''YzAzXHU1YzU2XHU1YzU0XHU1Y2VjXHU1Y2ZmXHU1Y2VlXHU1Y2YxXHU1Y2Y3XHU1ZDAwXHU1Y2Y5XHU1ZTI5XHU1ZTI4XHU1ZWE4XHU1ZWFlXHU1ZWFhXHU1ZWFjXHU1ZjMzXHU1ZjMwXHU1ZjY3XHU2MDVkXHU2MDVhXHU2MDY3Il0sWyJkMWExIiwiXHU2MDQxXHU2MGEyXHU2MDg4XHU2MDgw''@;'; put 'put ''XHU2MDkyXHU2MDgxXHU2MDlkXHU2MDgzXHU2MDk1XHU2MDliXHU2MDk3XHU2MDg3XHU2MDljXHU2MDhlXHU2MjE5XHU2MjQ2XHU2MmYyXHU2MzEwXHU2MzU2XHU2MzJjXHU2MzQ0XHU2MzQ1XHU2MzM2XHU2MzQzXHU2M2U0XHU2MzM5XHU2MzRiXHU2MzRhXHU2MzNjXHU2MzI5XHU2MzQxXHU2''@;'; put 'put ''MzM0XHU2MzU4XHU2MzU0XHU2MzU5XHU2MzJkXHU2MzQ3XHU2MzMzXHU2MzVhXHU2MzUxXHU2MzM4XHU2MzU3XHU2MzQwXHU2MzQ4XHU2NTRhXHU2NTQ2XHU2NWM2XHU2NWMzXHU2NWM0XHU2NWMyXHU2NjRhXHU2NjVmXHU2NjQ3XHU2NjUxXHU2NzEyXHU2NzEzXHU2ODFmXHU2ODFhXHU2ODQ5''@;'; put 'put ''XHU2ODMyXHU2ODMzXHU2ODNiXHU2ODRiXHU2ODRmXHU2ODE2XHU2ODMxXHU2ODFjXHU2ODM1XHU2ODJiXHU2ODJkXHU2ODJmXHU2ODRlXHU2ODQ0XHU2ODM0XHU2ODFkXHU2ODEyXHU2ODE0XHU2ODI2XHU2ODI4XHU2ODJlXHU2ODRkXHU2ODNhXHU2ODI1XHU2ODIwXHU2YjJjXHU2YjJmXHU2''@;'; put 'put ''YjJkXHU2YjMxXHU2YjM0XHU2YjZkXHU4MDgyXHU2Yjg4XHU2YmU2XHU2YmU0Il0sWyJkMjQwIiwiXHU2YmU4XHU2YmUzXHU2YmUyXHU2YmU3XHU2YzI1XHU2ZDdhXHU2ZDYzXHU2ZDY0XHU2ZDc2XHU2ZDBkXHU2ZDYxXHU2ZDkyXHU2ZDU4XHU2ZDYyXHU2ZDZkXHU2ZDZmXHU2ZDkxXHU2ZDhk''@;'; put 'put ''XHU2ZGVmXHU2ZDdmXHU2ZDg2XHU2ZDVlXHU2ZDY3XHU2ZDYwXHU2ZDk3XHU2ZDcwXHU2ZDdjXHU2ZDVmXHU2ZDgyXHU2ZDk4XHU2ZDJmXHU2ZDY4XHU2ZDhiXHU2ZDdlXHU2ZDgwXHU2ZDg0XHU2ZDE2XHU2ZDgzXHU2ZDdiXHU2ZDdkXHU2ZDc1XHU2ZDkwXHU3MGRjXHU3MGQzXHU3MGQxXHU3''@;'; put 'put ''MGRkXHU3MGNiXHU3ZjM5XHU3MGUyXHU3MGQ3XHU3MGQyXHU3MGRlXHU3MGUwXHU3MGQ0XHU3MGNkXHU3MGM1XHU3MGM2XHU3MGM3XHU3MGRhXHU3MGNlXHU3MGUxXHU3MjQyXHU3Mjc4Il0sWyJkMmExIiwiXHU3Mjc3XHU3Mjc2XHU3MzAwXHU3MmZhXHU3MmY0XHU3MmZlXHU3MmY2XHU3MmYz''@;'; put 'put ''XHU3MmZiXHU3MzAxXHU3M2QzXHU3M2Q5XHU3M2U1XHU3M2Q2XHU3M2JjXHU3M2U3XHU3M2UzXHU3M2U5XHU3M2RjXHU3M2QyXHU3M2RiXHU3M2Q0XHU3M2RkXHU3M2RhXHU3M2Q3XHU3M2Q4XHU3M2U4XHU3NGRlXHU3NGRmXHU3NGY0XHU3NGY1XHU3NTIxXHU3NTViXHU3NTVmXHU3NWIwXHU3''@;'; put 'put ''NWMxXHU3NWJiXHU3NWM0XHU3NWMwXHU3NWJmXHU3NWI2XHU3NWJhXHU3NjhhXHU3NmM5XHU3NzFkXHU3NzFiXHU3NzEwXHU3NzEzXHU3NzEyXHU3NzIzXHU3NzExXHU3NzE1XHU3NzE5XHU3NzFhXHU3NzIyXHU3NzI3XHU3ODIzXHU3ODJjXHU3ODIyXHU3ODM1XHU3ODJmXHU3ODI4XHU3ODJl''@;'; put 'put ''XHU3ODJiXHU3ODIxXHU3ODI5XHU3ODMzXHU3ODJhXHU3ODMxXHU3OTU0XHU3OTViXHU3OTRmXHU3OTVjXHU3OTUzXHU3OTUyXHU3OTUxXHU3OWViXHU3OWVjXHU3OWUwXHU3OWVlXHU3OWVkXHU3OWVhXHU3OWRjXHU3OWRlXHU3OWRkXHU3YTg2XHU3YTg5XHU3YTg1XHU3YThiXHU3YThjXHU3''@;'; put 'put ''YThhXHU3YTg3XHU3YWQ4XHU3YjEwIl0sWyJkMzQwIiwiXHU3YjA0XHU3YjEzXHU3YjA1XHU3YjBmXHU3YjA4XHU3YjBhXHU3YjBlXHU3YjA5XHU3YjEyXHU3Yzg0XHU3YzkxXHU3YzhhXHU3YzhjXHU3Yzg4XHU3YzhkXHU3Yzg1XHU3ZDFlXHU3ZDFkXHU3ZDExXHU3ZDBlXHU3ZDE4XHU3ZDE2''@;'; put 'put ''XHU3ZDEzXHU3ZDFmXHU3ZDEyXHU3ZDBmXHU3ZDBjXHU3ZjVjXHU3ZjYxXHU3ZjVlXHU3ZjYwXHU3ZjVkXHU3ZjViXHU3Zjk2XHU3ZjkyXHU3ZmMzXHU3ZmMyXHU3ZmMwXHU4MDE2XHU4MDNlXHU4MDM5XHU4MGZhXHU4MGYyXHU4MGY5XHU4MGY1XHU4MTAxXHU4MGZiXHU4MTAwXHU4MjAxXHU4''@;'; put 'put ''MjJmXHU4MjI1XHU4MzMzXHU4MzJkXHU4MzQ0XHU4MzE5XHU4MzUxXHU4MzI1XHU4MzU2XHU4MzNmXHU4MzQxXHU4MzI2XHU4MzFjXHU4MzIyIl0sWyJkM2ExIiwiXHU4MzQyXHU4MzRlXHU4MzFiXHU4MzJhXHU4MzA4XHU4MzNjXHU4MzRkXHU4MzE2XHU4MzI0XHU4MzIwXHU4MzM3XHU4MzJm''@;'; put 'put ''XHU4MzI5XHU4MzQ3XHU4MzQ1XHU4MzRjXHU4MzUzXHU4MzFlXHU4MzJjXHU4MzRiXHU4MzI3XHU4MzQ4XHU4NjUzXHU4NjUyXHU4NmEyXHU4NmE4XHU4Njk2XHU4NjhkXHU4NjkxXHU4NjllXHU4Njg3XHU4Njk3XHU4Njg2XHU4NjhiXHU4NjlhXHU4Njg1XHU4NmE1XHU4Njk5XHU4NmExXHU4''@;'; put 'put ''NmE3XHU4Njk1XHU4Njk4XHU4NjhlXHU4NjlkXHU4NjkwXHU4Njk0XHU4ODQzXHU4ODQ0XHU4ODZkXHU4ODc1XHU4ODc2XHU4ODcyXHU4ODgwXHU4ODcxXHU4ODdmXHU4ODZmXHU4ODgzXHU4ODdlXHU4ODc0XHU4ODdjXHU4YTEyXHU4YzQ3XHU4YzU3XHU4YzdiXHU4Y2E0XHU4Y2EzXHU4ZDc2''@;'; put 'put ''XHU4ZDc4XHU4ZGI1XHU4ZGI3XHU4ZGI2XHU4ZWQxXHU4ZWQzXHU4ZmZlXHU4ZmY1XHU5MDAyXHU4ZmZmXHU4ZmZiXHU5MDA0XHU4ZmZjXHU4ZmY2XHU5MGQ2XHU5MGUwXHU5MGQ5XHU5MGRhXHU5MGUzXHU5MGRmXHU5MGU1XHU5MGQ4XHU5MGRiXHU5MGQ3XHU5MGRjXHU5MGU0XHU5MTUwIl0s''@;'; put 'put ''WyJkNDQwIiwiXHU5MTRlXHU5MTRmXHU5MWQ1XHU5MWUyXHU5MWRhXHU5NjVjXHU5NjVmXHU5NmJjXHU5OGUzXHU5YWRmXHU5YjJmXHU0ZTdmXHU1MDcwXHU1MDZhXHU1MDYxXHU1MDVlXHU1MDYwXHU1MDUzXHU1MDRiXHU1MDVkXHU1MDcyXHU1MDQ4XHU1MDRkXHU1MDQxXHU1MDViXHU1MDRh''@;'; put 'put ''XHU1MDYyXHU1MDE1XHU1MDQ1XHU1MDVmXHU1MDY5XHU1MDZiXHU1MDYzXHU1MDY0XHU1MDQ2XHU1MDQwXHU1MDZlXHU1MDczXHU1MDU3XHU1MDUxXHU1MWQwXHU1MjZiXHU1MjZkXHU1MjZjXHU1MjZlXHU1MmQ2XHU1MmQzXHU1MzJkXHU1MzljXHU1NTc1XHU1NTc2XHU1NTNjXHU1NTRkXHU1''@;'; put 'put ''NTUwXHU1NTM0XHU1NTJhXHU1NTUxXHU1NTYyXHU1NTM2XHU1NTM1XHU1NTMwXHU1NTUyXHU1NTQ1Il0sWyJkNGExIiwiXHU1NTBjXHU1NTMyXHU1NTY1XHU1NTRlXHU1NTM5XHU1NTQ4XHU1NTJkXHU1NTNiXHU1NTQwXHU1NTRiXHU1NzBhXHU1NzA3XHU1N2ZiXHU1ODE0XHU1N2UyXHU1N2Y2''@;'; put 'put ''XHU1N2RjXHU1N2Y0XHU1ODAwXHU1N2VkXHU1N2ZkXHU1ODA4XHU1N2Y4XHU1ODBiXHU1N2YzXHU1N2NmXHU1ODA3XHU1N2VlXHU1N2UzXHU1N2YyXHU1N2U1XHU1N2VjXHU1N2UxXHU1ODBlXHU1N2ZjXHU1ODEwXHU1N2U3XHU1ODAxXHU1ODBjXHU1N2YxXHU1N2U5XHU1N2YwXHU1ODBkXHU1''@;'; put 'put ''ODA0XHU1OTVjXHU1YTYwXHU1YTU4XHU1YTU1XHU1YTY3XHU1YTVlXHU1YTM4XHU1YTM1XHU1YTZkXHU1YTUwXHU1YTVmXHU1YTY1XHU1YTZjXHU1YTUzXHU1YTY0XHU1YTU3XHU1YTQzXHU1YTVkXHU1YTUyXHU1YTQ0XHU1YTViXHU1YTQ4XHU1YThlXHU1YTNlXHU1YTRkXHU1YTM5XHU1YTRj''@;'; put 'put ''XHU1YTcwXHU1YTY5XHU1YTQ3XHU1YTUxXHU1YTU2XHU1YTQyXHU1YTVjXHU1YjcyXHU1YjZlXHU1YmMxXHU1YmMwXHU1YzU5XHU1ZDFlXHU1ZDBiXHU1ZDFkXHU1ZDFhXHU1ZDIwXHU1ZDBjXHU1ZDI4XHU1ZDBkXHU1ZDI2XHU1ZDI1XHU1ZDBmIl0sWyJkNTQwIiwiXHU1ZDMwXHU1ZDEyXHU1''@;'; put 'put ''ZDIzXHU1ZDFmXHU1ZDJlXHU1ZTNlXHU1ZTM0XHU1ZWIxXHU1ZWI0XHU1ZWI5XHU1ZWIyXHU1ZWIzXHU1ZjM2XHU1ZjM4XHU1ZjliXHU1Zjk2XHU1ZjlmXHU2MDhhXHU2MDkwXHU2MDg2XHU2MGJlXHU2MGIwXHU2MGJhXHU2MGQzXHU2MGQ0XHU2MGNmXHU2MGU0XHU2MGQ5XHU2MGRkXHU2MGM4''@;'; put 'put ''XHU2MGIxXHU2MGRiXHU2MGI3XHU2MGNhXHU2MGJmXHU2MGMzXHU2MGNkXHU2MGMwXHU2MzMyXHU2MzY1XHU2MzhhXHU2MzgyXHU2MzdkXHU2M2JkXHU2MzllXHU2M2FkXHU2MzlkXHU2Mzk3XHU2M2FiXHU2MzhlXHU2MzZmXHU2Mzg3XHU2MzkwXHU2MzZlXHU2M2FmXHU2Mzc1XHU2MzljXHU2''@;'; put 'put ''MzZkXHU2M2FlXHU2MzdjXHU2M2E0XHU2MzNiXHU2MzlmIl0sWyJkNWExIiwiXHU2Mzc4XHU2Mzg1XHU2MzgxXHU2MzkxXHU2MzhkXHU2MzcwXHU2NTUzXHU2NWNkXHU2NjY1XHU2NjYxXHU2NjViXHU2NjU5XHU2NjVjXHU2NjYyXHU2NzE4XHU2ODc5XHU2ODg3XHU2ODkwXHU2ODljXHU2ODZk''@;'; put 'put ''XHU2ODZlXHU2OGFlXHU2OGFiXHU2OTU2XHU2ODZmXHU2OGEzXHU2OGFjXHU2OGE5XHU2ODc1XHU2ODc0XHU2OGIyXHU2ODhmXHU2ODc3XHU2ODkyXHU2ODdjXHU2ODZiXHU2ODcyXHU2OGFhXHU2ODgwXHU2ODcxXHU2ODdlXHU2ODliXHU2ODk2XHU2ODhiXHU2OGEwXHU2ODg5XHU2OGE0XHU2''@;'; put 'put ''ODc4XHU2ODdiXHU2ODkxXHU2ODhjXHU2ODhhXHU2ODdkXHU2YjM2XHU2YjMzXHU2YjM3XHU2YjM4XHU2YjkxXHU2YjhmXHU2YjhkXHU2YjhlXHU2YjhjXHU2YzJhXHU2ZGMwXHU2ZGFiXHU2ZGI0XHU2ZGIzXHU2ZTc0XHU2ZGFjXHU2ZGU5XHU2ZGUyXHU2ZGI3XHU2ZGY2XHU2ZGQ0XHU2ZTAw''@;'; put 'put ''XHU2ZGM4XHU2ZGUwXHU2ZGRmXHU2ZGQ2XHU2ZGJlXHU2ZGU1XHU2ZGRjXHU2ZGRkXHU2ZGRiXHU2ZGY0XHU2ZGNhXHU2ZGJkXHU2ZGVkXHU2ZGYwXHU2ZGJhXHU2ZGQ1XHU2ZGMyXHU2ZGNmXHU2ZGM5Il0sWyJkNjQwIiwiXHU2ZGQwXHU2ZGYyXHU2ZGQzXHU2ZGZkXHU2ZGQ3XHU2ZGNkXHU2''@;'; put 'put ''ZGUzXHU2ZGJiXHU3MGZhXHU3MTBkXHU3MGY3XHU3MTE3XHU3MGY0XHU3MTBjXHU3MGYwXHU3MTA0XHU3MGYzXHU3MTEwXHU3MGZjXHU3MGZmXHU3MTA2XHU3MTEzXHU3MTAwXHU3MGY4XHU3MGY2XHU3MTBiXHU3MTAyXHU3MTBlXHU3MjdlXHU3MjdiXHU3MjdjXHU3MjdmXHU3MzFkXHU3MzE3''@;'; put 'put ''XHU3MzA3XHU3MzExXHU3MzE4XHU3MzBhXHU3MzA4XHU3MmZmXHU3MzBmXHU3MzFlXHU3Mzg4XHU3M2Y2XHU3M2Y4XHU3M2Y1XHU3NDA0XHU3NDAxXHU3M2ZkXHU3NDA3XHU3NDAwXHU3M2ZhXHU3M2ZjXHU3M2ZmXHU3NDBjXHU3NDBiXHU3M2Y0XHU3NDA4XHU3NTY0XHU3NTYzXHU3NWNlXHU3''@;'; put 'put ''NWQyXHU3NWNmIl0sWyJkNmExIiwiXHU3NWNiXHU3NWNjXHU3NWQxXHU3NWQwXHU3NjhmXHU3Njg5XHU3NmQzXHU3NzM5XHU3NzJmXHU3NzJkXHU3NzMxXHU3NzMyXHU3NzM0XHU3NzMzXHU3NzNkXHU3NzI1XHU3NzNiXHU3NzM1XHU3ODQ4XHU3ODUyXHU3ODQ5XHU3ODRkXHU3ODRhXHU3ODRj''@;'; put 'put ''XHU3ODI2XHU3ODQ1XHU3ODUwXHU3OTY0XHU3OTY3XHU3OTY5XHU3OTZhXHU3OTYzXHU3OTZiXHU3OTYxXHU3OWJiXHU3OWZhXHU3OWY4XHU3OWY2XHU3OWY3XHU3YThmXHU3YTk0XHU3YTkwXHU3YjM1XHU3YjQ3XHU3YjM0XHU3YjI1XHU3YjMwXHU3YjIyXHU3YjI0XHU3YjMzXHU3YjE4XHU3''@;'; put 'put ''YjJhXHU3YjFkXHU3YjMxXHU3YjJiXHU3YjJkXHU3YjJmXHU3YjMyXHU3YjM4XHU3YjFhXHU3YjIzXHU3Yzk0XHU3Yzk4XHU3Yzk2XHU3Y2EzXHU3ZDM1XHU3ZDNkXHU3ZDM4XHU3ZDM2XHU3ZDNhXHU3ZDQ1XHU3ZDJjXHU3ZDI5XHU3ZDQxXHU3ZDQ3XHU3ZDNlXHU3ZDNmXHU3ZDRhXHU3ZDNi''@;'; put 'put ''XHU3ZDI4XHU3ZjYzXHU3Zjk1XHU3ZjljXHU3ZjlkXHU3ZjliXHU3ZmNhXHU3ZmNiXHU3ZmNkXHU3ZmQwXHU3ZmQxXHU3ZmM3XHU3ZmNmXHU3ZmM5XHU4MDFmIl0sWyJkNzQwIiwiXHU4MDFlXHU4MDFiXHU4MDQ3XHU4MDQzXHU4MDQ4XHU4MTE4XHU4MTI1XHU4MTE5XHU4MTFiXHU4MTJkXHU4''@;'; put 'put ''MTFmXHU4MTJjXHU4MTFlXHU4MTIxXHU4MTE1XHU4MTI3XHU4MTFkXHU4MTIyXHU4MjExXHU4MjM4XHU4MjMzXHU4MjNhXHU4MjM0XHU4MjMyXHU4Mjc0XHU4MzkwXHU4M2EzXHU4M2E4XHU4MzhkXHU4MzdhXHU4MzczXHU4M2E0XHU4Mzc0XHU4MzhmXHU4MzgxXHU4Mzk1XHU4Mzk5XHU4Mzc1''@;'; put 'put ''XHU4Mzk0XHU4M2E5XHU4MzdkXHU4MzgzXHU4MzhjXHU4MzlkXHU4MzliXHU4M2FhXHU4MzhiXHU4MzdlXHU4M2E1XHU4M2FmXHU4Mzg4XHU4Mzk3XHU4M2IwXHU4MzdmXHU4M2E2XHU4Mzg3XHU4M2FlXHU4Mzc2XHU4MzlhXHU4NjU5XHU4NjU2XHU4NmJmXHU4NmI3Il0sWyJkN2ExIiwiXHU4''@;'; put 'put ''NmMyXHU4NmMxXHU4NmM1XHU4NmJhXHU4NmIwXHU4NmM4XHU4NmI5XHU4NmIzXHU4NmI4XHU4NmNjXHU4NmI0XHU4NmJiXHU4NmJjXHU4NmMzXHU4NmJkXHU4NmJlXHU4ODUyXHU4ODg5XHU4ODk1XHU4OGE4XHU4OGEyXHU4OGFhXHU4ODlhXHU4ODkxXHU4OGExXHU4ODlmXHU4ODk4XHU4OGE3''@;'; put 'put ''XHU4ODk5XHU4ODliXHU4ODk3XHU4OGE0XHU4OGFjXHU4ODhjXHU4ODkzXHU4ODhlXHU4OTgyXHU4OWQ2XHU4OWQ5XHU4OWQ1XHU4YTMwXHU4YTI3XHU4YTJjXHU4YTFlXHU4YzM5XHU4YzNiXHU4YzVjXHU4YzVkXHU4YzdkXHU4Y2E1XHU4ZDdkXHU4ZDdiXHU4ZDc5XHU4ZGJjXHU4ZGMyXHU4''@;'; put 'put ''ZGI5XHU4ZGJmXHU4ZGMxXHU4ZWQ4XHU4ZWRlXHU4ZWRkXHU4ZWRjXHU4ZWQ3XHU4ZWUwXHU4ZWUxXHU5MDI0XHU5MDBiXHU5MDExXHU5MDFjXHU5MDBjXHU5MDIxXHU5MGVmXHU5MGVhXHU5MGYwXHU5MGY0XHU5MGYyXHU5MGYzXHU5MGQ0XHU5MGViXHU5MGVjXHU5MGU5XHU5MTU2XHU5MTU4''@;'; put 'put ''XHU5MTVhXHU5MTUzXHU5MTU1XHU5MWVjXHU5MWY0XHU5MWYxXHU5MWYzXHU5MWY4XHU5MWU0XHU5MWY5XHU5MWVhIl0sWyJkODQwIiwiXHU5MWViXHU5MWY3XHU5MWU4XHU5MWVlXHU5NTdhXHU5NTg2XHU5NTg4XHU5NjdjXHU5NjZkXHU5NjZiXHU5NjcxXHU5NjZmXHU5NmJmXHU5NzZhXHU5''@;'; put 'put ''ODA0XHU5OGU1XHU5OTk3XHU1MDliXHU1MDk1XHU1MDk0XHU1MDllXHU1MDhiXHU1MGEzXHU1MDgzXHU1MDhjXHU1MDhlXHU1MDlkXHU1MDY4XHU1MDljXHU1MDkyXHU1MDgyXHU1MDg3XHU1MTVmXHU1MWQ0XHU1MzEyXHU1MzExXHU1M2E0XHU1M2E3XHU1NTkxXHU1NWE4XHU1NWE1XHU1NWFk''@;'; put 'put ''XHU1NTc3XHU1NjQ1XHU1NWEyXHU1NTkzXHU1NTg4XHU1NThmXHU1NWI1XHU1NTgxXHU1NWEzXHU1NTkyXHU1NWE0XHU1NTdkXHU1NThjXHU1NWE2XHU1NTdmXHU1NTk1XHU1NWExXHU1NThlXHU1NzBjXHU1ODI5XHU1ODM3Il0sWyJkOGExIiwiXHU1ODE5XHU1ODFlXHU1ODI3XHU1ODIzXHU1''@;'; put 'put ''ODI4XHU1N2Y1XHU1ODQ4XHU1ODI1XHU1ODFjXHU1ODFiXHU1ODMzXHU1ODNmXHU1ODM2XHU1ODJlXHU1ODM5XHU1ODM4XHU1ODJkXHU1ODJjXHU1ODNiXHU1OTYxXHU1YWFmXHU1YTk0XHU1YTlmXHU1YTdhXHU1YWEyXHU1YTllXHU1YTc4XHU1YWE2XHU1YTdjXHU1YWE1XHU1YWFjXHU1YTk1''@;'; put 'put ''XHU1YWFlXHU1YTM3XHU1YTg0XHU1YThhXHU1YTk3XHU1YTgzXHU1YThiXHU1YWE5XHU1YTdiXHU1YTdkXHU1YThjXHU1YTljXHU1YThmXHU1YTkzXHU1YTlkXHU1YmVhXHU1YmNkXHU1YmNiXHU1YmQ0XHU1YmQxXHU1YmNhXHU1YmNlXHU1YzBjXHU1YzMwXHU1ZDM3XHU1ZDQzXHU1ZDZiXHU1''@;'; put 'put ''ZDQxXHU1ZDRiXHU1ZDNmXHU1ZDM1XHU1ZDUxXHU1ZDRlXHU1ZDU1XHU1ZDMzXHU1ZDNhXHU1ZDUyXHU1ZDNkXHU1ZDMxXHU1ZDU5XHU1ZDQyXHU1ZDM5XHU1ZDQ5XHU1ZDM4XHU1ZDNjXHU1ZDMyXHU1ZDM2XHU1ZDQwXHU1ZDQ1XHU1ZTQ0XHU1ZTQxXHU1ZjU4XHU1ZmE2XHU1ZmE1XHU1ZmFi''@;'; put 'put ''XHU2MGM5XHU2MGI5XHU2MGNjXHU2MGUyXHU2MGNlXHU2MGM0XHU2MTE0Il0sWyJkOTQwIiwiXHU2MGYyXHU2MTBhXHU2MTE2XHU2MTA1XHU2MGY1XHU2MTEzXHU2MGY4XHU2MGZjXHU2MGZlXHU2MGMxXHU2MTAzXHU2MTE4XHU2MTFkXHU2MTEwXHU2MGZmXHU2MTA0XHU2MTBiXHU2MjRhXHU2''@;'; put 'put ''Mzk0XHU2M2IxXHU2M2IwXHU2M2NlXHU2M2U1XHU2M2U4XHU2M2VmXHU2M2MzXHU2NDlkXHU2M2YzXHU2M2NhXHU2M2UwXHU2M2Y2XHU2M2Q1XHU2M2YyXHU2M2Y1XHU2NDYxXHU2M2RmXHU2M2JlXHU2M2RkXHU2M2RjXHU2M2M0XHU2M2Q4XHU2M2QzXHU2M2MyXHU2M2M3XHU2M2NjXHU2M2Ni''@;'; put 'put ''XHU2M2M4XHU2M2YwXHU2M2Q3XHU2M2Q5XHU2NTMyXHU2NTY3XHU2NTZhXHU2NTY0XHU2NTVjXHU2NTY4XHU2NTY1XHU2NThjXHU2NTlkXHU2NTllXHU2NWFlXHU2NWQwXHU2NWQyIl0sWyJkOWExIiwiXHU2NjdjXHU2NjZjXHU2NjdiXHU2NjgwXHU2NjcxXHU2Njc5XHU2NjZhXHU2NjcyXHU2''@;'; put 'put ''NzAxXHU2OTBjXHU2OGQzXHU2OTA0XHU2OGRjXHU2OTJhXHU2OGVjXHU2OGVhXHU2OGYxXHU2OTBmXHU2OGQ2XHU2OGY3XHU2OGViXHU2OGU0XHU2OGY2XHU2OTEzXHU2OTEwXHU2OGYzXHU2OGUxXHU2OTA3XHU2OGNjXHU2OTA4XHU2OTcwXHU2OGI0XHU2OTExXHU2OGVmXHU2OGM2XHU2OTE0''@;'; put 'put ''XHU2OGY4XHU2OGQwXHU2OGZkXHU2OGZjXHU2OGU4XHU2OTBiXHU2OTBhXHU2OTE3XHU2OGNlXHU2OGM4XHU2OGRkXHU2OGRlXHU2OGU2XHU2OGY0XHU2OGQxXHU2OTA2XHU2OGQ0XHU2OGU5XHU2OTE1XHU2OTI1XHU2OGM3XHU2YjM5XHU2YjNiXHU2YjNmXHU2YjNjXHU2Yjk0XHU2Yjk3XHU2''@;'; put 'put ''Yjk5XHU2Yjk1XHU2YmJkXHU2YmYwXHU2YmYyXHU2YmYzXHU2YzMwXHU2ZGZjXHU2ZTQ2XHU2ZTQ3XHU2ZTFmXHU2ZTQ5XHU2ZTg4XHU2ZTNjXHU2ZTNkXHU2ZTQ1XHU2ZTYyXHU2ZTJiXHU2ZTNmXHU2ZTQxXHU2ZTVkXHU2ZTczXHU2ZTFjXHU2ZTMzXHU2ZTRiXHU2ZTQwXHU2ZTUxXHU2ZTNi''@;'; put 'put ''XHU2ZTAzXHU2ZTJlXHU2ZTVlIl0sWyJkYTQwIiwiXHU2ZTY4XHU2ZTVjXHU2ZTYxXHU2ZTMxXHU2ZTI4XHU2ZTYwXHU2ZTcxXHU2ZTZiXHU2ZTM5XHU2ZTIyXHU2ZTMwXHU2ZTUzXHU2ZTY1XHU2ZTI3XHU2ZTc4XHU2ZTY0XHU2ZTc3XHU2ZTU1XHU2ZTc5XHU2ZTUyXHU2ZTY2XHU2ZTM1XHU2''@;'; put 'put ''ZTM2XHU2ZTVhXHU3MTIwXHU3MTFlXHU3MTJmXHU3MGZiXHU3MTJlXHU3MTMxXHU3MTIzXHU3MTI1XHU3MTIyXHU3MTMyXHU3MTFmXHU3MTI4XHU3MTNhXHU3MTFiXHU3MjRiXHU3MjVhXHU3Mjg4XHU3Mjg5XHU3Mjg2XHU3Mjg1XHU3MjhiXHU3MzEyXHU3MzBiXHU3MzMwXHU3MzIyXHU3MzMx''@;'; put 'put ''XHU3MzMzXHU3MzI3XHU3MzMyXHU3MzJkXHU3MzI2XHU3MzIzXHU3MzM1XHU3MzBjXHU3NDJlXHU3NDJjXHU3NDMwXHU3NDJiXHU3NDE2Il0sWyJkYWExIiwiXHU3NDFhXHU3NDIxXHU3NDJkXHU3NDMxXHU3NDI0XHU3NDIzXHU3NDFkXHU3NDI5XHU3NDIwXHU3NDMyXHU3NGZiXHU3NTJmXHU3''@;'; put 'put ''NTZmXHU3NTZjXHU3NWU3XHU3NWRhXHU3NWUxXHU3NWU2XHU3NWRkXHU3NWRmXHU3NWU0XHU3NWQ3XHU3Njk1XHU3NjkyXHU3NmRhXHU3NzQ2XHU3NzQ3XHU3NzQ0XHU3NzRkXHU3NzQ1XHU3NzRhXHU3NzRlXHU3NzRiXHU3NzRjXHU3N2RlXHU3N2VjXHU3ODYwXHU3ODY0XHU3ODY1XHU3ODVj''@;'; put 'put ''XHU3ODZkXHU3ODcxXHU3ODZhXHU3ODZlXHU3ODcwXHU3ODY5XHU3ODY4XHU3ODVlXHU3ODYyXHU3OTc0XHU3OTczXHU3OTcyXHU3OTcwXHU3YTAyXHU3YTBhXHU3YTAzXHU3YTBjXHU3YTA0XHU3YTk5XHU3YWU2XHU3YWU0XHU3YjRhXHU3YjNiXHU3YjQ0XHU3YjQ4XHU3YjRjXHU3YjRlXHU3''@;'; put 'put ''YjQwXHU3YjU4XHU3YjQ1XHU3Y2EyXHU3YzllXHU3Y2E4XHU3Y2ExXHU3ZDU4XHU3ZDZmXHU3ZDYzXHU3ZDUzXHU3ZDU2XHU3ZDY3XHU3ZDZhXHU3ZDRmXHU3ZDZkXHU3ZDVjXHU3ZDZiXHU3ZDUyXHU3ZDU0XHU3ZDY5XHU3ZDUxXHU3ZDVmXHU3ZDRlXHU3ZjNlXHU3ZjNmXHU3ZjY1Il0sWyJk''@;'; put 'put ''YjQwIiwiXHU3ZjY2XHU3ZmEyXHU3ZmEwXHU3ZmExXHU3ZmQ3XHU4MDUxXHU4MDRmXHU4MDUwXHU4MGZlXHU4MGQ0XHU4MTQzXHU4MTRhXHU4MTUyXHU4MTRmXHU4MTQ3XHU4MTNkXHU4MTRkXHU4MTNhXHU4MWU2XHU4MWVlXHU4MWY3XHU4MWY4XHU4MWY5XHU4MjA0XHU4MjNjXHU4MjNkXHU4''@;'; put 'put ''MjNmXHU4Mjc1XHU4MzNiXHU4M2NmXHU4M2Y5XHU4NDIzXHU4M2MwXHU4M2U4XHU4NDEyXHU4M2U3XHU4M2U0XHU4M2ZjXHU4M2Y2XHU4NDEwXHU4M2M2XHU4M2M4XHU4M2ViXHU4M2UzXHU4M2JmXHU4NDAxXHU4M2RkXHU4M2U1XHU4M2Q4XHU4M2ZmXHU4M2UxXHU4M2NiXHU4M2NlXHU4M2Q2''@;'; put 'put ''XHU4M2Y1XHU4M2M5XHU4NDA5XHU4NDBmXHU4M2RlXHU4NDExXHU4NDA2XHU4M2MyXHU4M2YzIl0sWyJkYmExIiwiXHU4M2Q1XHU4M2ZhXHU4M2M3XHU4M2QxXHU4M2VhXHU4NDEzXHU4M2MzXHU4M2VjXHU4M2VlXHU4M2M0XHU4M2ZiXHU4M2Q3XHU4M2UyXHU4NDFiXHU4M2RiXHU4M2ZlXHU4''@;'; put 'put ''NmQ4XHU4NmUyXHU4NmU2XHU4NmQzXHU4NmUzXHU4NmRhXHU4NmVhXHU4NmRkXHU4NmViXHU4NmRjXHU4NmVjXHU4NmU5XHU4NmQ3XHU4NmU4XHU4NmQxXHU4ODQ4XHU4ODU2XHU4ODU1XHU4OGJhXHU4OGQ3XHU4OGI5XHU4OGI4XHU4OGMwXHU4OGJlXHU4OGI2XHU4OGJjXHU4OGI3XHU4OGJk''@;'; put 'put ''XHU4OGIyXHU4OTAxXHU4OGM5XHU4OTk1XHU4OTk4XHU4OTk3XHU4OWRkXHU4OWRhXHU4OWRiXHU4YTRlXHU4YTRkXHU4YTM5XHU4YTU5XHU4YTQwXHU4YTU3XHU4YTU4XHU4YTQ0XHU4YTQ1XHU4YTUyXHU4YTQ4XHU4YTUxXHU4YTRhXHU4YTRjXHU4YTRmXHU4YzVmXHU4YzgxXHU4YzgwXHU4''@;'; put 'put ''Y2JhXHU4Y2JlXHU4Y2IwXHU4Y2I5XHU4Y2I1XHU4ZDg0XHU4ZDgwXHU4ZDg5XHU4ZGQ4XHU4ZGQzXHU4ZGNkXHU4ZGM3XHU4ZGQ2XHU4ZGRjXHU4ZGNmXHU4ZGQ1XHU4ZGQ5XHU4ZGM4XHU4ZGQ3XHU4ZGM1XHU4ZWVmXHU4ZWY3XHU4ZWZhIl0sWyJkYzQwIiwiXHU4ZWY5XHU4ZWU2XHU4ZWVl''@;'; put 'put ''XHU4ZWU1XHU4ZWY1XHU4ZWU3XHU4ZWU4XHU4ZWY2XHU4ZWViXHU4ZWYxXHU4ZWVjXHU4ZWY0XHU4ZWU5XHU5MDJkXHU5MDM0XHU5MDJmXHU5MTA2XHU5MTJjXHU5MTA0XHU5MGZmXHU5MGZjXHU5MTA4XHU5MGY5XHU5MGZiXHU5MTAxXHU5MTAwXHU5MTA3XHU5MTA1XHU5MTAzXHU5MTYxXHU5''@;'; put 'put ''MTY0XHU5MTVmXHU5MTYyXHU5MTYwXHU5MjAxXHU5MjBhXHU5MjI1XHU5MjAzXHU5MjFhXHU5MjI2XHU5MjBmXHU5MjBjXHU5MjAwXHU5MjEyXHU5MWZmXHU5MWZkXHU5MjA2XHU5MjA0XHU5MjI3XHU5MjAyXHU5MjFjXHU5MjI0XHU5MjE5XHU5MjE3XHU5MjA1XHU5MjE2XHU5NTdiXHU5NThk''@;'; put 'put ''XHU5NThjXHU5NTkwXHU5Njg3XHU5NjdlXHU5Njg4Il0sWyJkY2ExIiwiXHU5Njg5XHU5NjgzXHU5NjgwXHU5NmMyXHU5NmM4XHU5NmMzXHU5NmYxXHU5NmYwXHU5NzZjXHU5NzcwXHU5NzZlXHU5ODA3XHU5OGE5XHU5OGViXHU5Y2U2XHU5ZWY5XHU0ZTgzXHU0ZTg0XHU0ZWI2XHU1MGJkXHU1''@;'; put 'put ''MGJmXHU1MGM2XHU1MGFlXHU1MGM0XHU1MGNhXHU1MGI0XHU1MGM4XHU1MGMyXHU1MGIwXHU1MGMxXHU1MGJhXHU1MGIxXHU1MGNiXHU1MGM5XHU1MGI2XHU1MGI4XHU1MWQ3XHU1MjdhXHU1Mjc4XHU1MjdiXHU1MjdjXHU1NWMzXHU1NWRiXHU1NWNjXHU1NWQwXHU1NWNiXHU1NWNhXHU1NWRk''@;'; put 'put ''XHU1NWMwXHU1NWQ0XHU1NWM0XHU1NWU5XHU1NWJmXHU1NWQyXHU1NThkXHU1NWNmXHU1NWQ1XHU1NWUyXHU1NWQ2XHU1NWM4XHU1NWYyXHU1NWNkXHU1NWQ5XHU1NWMyXHU1NzE0XHU1ODUzXHU1ODY4XHU1ODY0XHU1ODRmXHU1ODRkXHU1ODQ5XHU1ODZmXHU1ODU1XHU1ODRlXHU1ODVkXHU1''@;'; put 'put ''ODU5XHU1ODY1XHU1ODViXHU1ODNkXHU1ODYzXHU1ODcxXHU1OGZjXHU1YWM3XHU1YWM0XHU1YWNiXHU1YWJhXHU1YWI4XHU1YWIxXHU1YWI1XHU1YWIwXHU1YWJmXHU1YWM4XHU1YWJiXHU1YWM2Il0sWyJkZDQwIiwiXHU1YWI3XHU1YWMwXHU1YWNhXHU1YWI0XHU1YWI2XHU1YWNkXHU1YWI5''@;'; put 'put ''XHU1YTkwXHU1YmQ2XHU1YmQ4XHU1YmQ5XHU1YzFmXHU1YzMzXHU1ZDcxXHU1ZDYzXHU1ZDRhXHU1ZDY1XHU1ZDcyXHU1ZDZjXHU1ZDVlXHU1ZDY4XHU1ZDY3XHU1ZDYyXHU1ZGYwXHU1ZTRmXHU1ZTRlXHU1ZTRhXHU1ZTRkXHU1ZTRiXHU1ZWM1XHU1ZWNjXHU1ZWM2XHU1ZWNiXHU1ZWM3XHU1''@;'; put 'put ''ZjQwXHU1ZmFmXHU1ZmFkXHU2MGY3XHU2MTQ5XHU2MTRhXHU2MTJiXHU2MTQ1XHU2MTM2XHU2MTMyXHU2MTJlXHU2MTQ2XHU2MTJmXHU2MTRmXHU2MTI5XHU2MTQwXHU2MjIwXHU5MTY4XHU2MjIzXHU2MjI1XHU2MjI0XHU2M2M1XHU2M2YxXHU2M2ViXHU2NDEwXHU2NDEyXHU2NDA5XHU2NDIw''@;'; put 'put ''XHU2NDI0Il0sWyJkZGExIiwiXHU2NDMzXHU2NDQzXHU2NDFmXHU2NDE1XHU2NDE4XHU2NDM5XHU2NDM3XHU2NDIyXHU2NDIzXHU2NDBjXHU2NDI2XHU2NDMwXHU2NDI4XHU2NDQxXHU2NDM1XHU2NDJmXHU2NDBhXHU2NDFhXHU2NDQwXHU2NDI1XHU2NDI3XHU2NDBiXHU2M2U3XHU2NDFiXHU2''@;'; put 'put ''NDJlXHU2NDIxXHU2NDBlXHU2NTZmXHU2NTkyXHU2NWQzXHU2Njg2XHU2NjhjXHU2Njk1XHU2NjkwXHU2NjhiXHU2NjhhXHU2Njk5XHU2Njk0XHU2Njc4XHU2NzIwXHU2OTY2XHU2OTVmXHU2OTM4XHU2OTRlXHU2OTYyXHU2OTcxXHU2OTNmXHU2OTQ1XHU2OTZhXHU2OTM5XHU2OTQyXHU2OTU3''@;'; put 'put ''XHU2OTU5XHU2OTdhXHU2OTQ4XHU2OTQ5XHU2OTM1XHU2OTZjXHU2OTMzXHU2OTNkXHU2OTY1XHU2OGYwXHU2OTc4XHU2OTM0XHU2OTY5XHU2OTQwXHU2OTZmXHU2OTQ0XHU2OTc2XHU2OTU4XHU2OTQxXHU2OTc0XHU2OTRjXHU2OTNiXHU2OTRiXHU2OTM3XHU2OTVjXHU2OTRmXHU2OTUxXHU2''@;'; put 'put ''OTMyXHU2OTUyXHU2OTJmXHU2OTdiXHU2OTNjXHU2YjQ2XHU2YjQ1XHU2YjQzXHU2YjQyXHU2YjQ4XHU2YjQxXHU2YjliXHVmYTBkXHU2YmZiXHU2YmZjIl0sWyJkZTQwIiwiXHU2YmY5XHU2YmY3XHU2YmY4XHU2ZTliXHU2ZWQ2XHU2ZWM4XHU2ZThmXHU2ZWMwXHU2ZTlmXHU2ZTkzXHU2ZTk0''@;'; put 'put ''XHU2ZWEwXHU2ZWIxXHU2ZWI5XHU2ZWM2XHU2ZWQyXHU2ZWJkXHU2ZWMxXHU2ZTllXHU2ZWM5XHU2ZWI3XHU2ZWIwXHU2ZWNkXHU2ZWE2XHU2ZWNmXHU2ZWIyXHU2ZWJlXHU2ZWMzXHU2ZWRjXHU2ZWQ4XHU2ZTk5XHU2ZTkyXHU2ZThlXHU2ZThkXHU2ZWE0XHU2ZWExXHU2ZWJmXHU2ZWIzXHU2''@;'; put 'put ''ZWQwXHU2ZWNhXHU2ZTk3XHU2ZWFlXHU2ZWEzXHU3MTQ3XHU3MTU0XHU3MTUyXHU3MTYzXHU3MTYwXHU3MTQxXHU3MTVkXHU3MTYyXHU3MTcyXHU3MTc4XHU3MTZhXHU3MTYxXHU3MTQyXHU3MTU4XHU3MTQzXHU3MTRiXHU3MTcwXHU3MTVmXHU3MTUwXHU3MTUzIl0sWyJkZWExIiwiXHU3MTQ0''@;'; put 'put ''XHU3MTRkXHU3MTVhXHU3MjRmXHU3MjhkXHU3MjhjXHU3MjkxXHU3MjkwXHU3MjhlXHU3MzNjXHU3MzQyXHU3MzNiXHU3MzNhXHU3MzQwXHU3MzRhXHU3MzQ5XHU3NDQ0XHU3NDRhXHU3NDRiXHU3NDUyXHU3NDUxXHU3NDU3XHU3NDQwXHU3NDRmXHU3NDUwXHU3NDRlXHU3NDQyXHU3NDQ2XHU3''@;'; put 'put ''NDRkXHU3NDU0XHU3NGUxXHU3NGZmXHU3NGZlXHU3NGZkXHU3NTFkXHU3NTc5XHU3NTc3XHU2OTgzXHU3NWVmXHU3NjBmXHU3NjAzXHU3NWY3XHU3NWZlXHU3NWZjXHU3NWY5XHU3NWY4XHU3NjEwXHU3NWZiXHU3NWY2XHU3NWVkXHU3NWY1XHU3NWZkXHU3Njk5XHU3NmI1XHU3NmRkXHU3NzU1''@;'; put 'put ''XHU3NzVmXHU3NzYwXHU3NzUyXHU3NzU2XHU3NzVhXHU3NzY5XHU3NzY3XHU3NzU0XHU3NzU5XHU3NzZkXHU3N2UwXHU3ODg3XHU3ODlhXHU3ODk0XHU3ODhmXHU3ODg0XHU3ODk1XHU3ODg1XHU3ODg2XHU3OGExXHU3ODgzXHU3ODc5XHU3ODk5XHU3ODgwXHU3ODk2XHU3ODdiXHU3OTdjXHU3''@;'; put 'put ''OTgyXHU3OTdkXHU3OTc5XHU3YTExXHU3YTE4XHU3YTE5XHU3YTEyXHU3YTE3XHU3YTE1XHU3YTIyXHU3YTEzIl0sWyJkZjQwIiwiXHU3YTFiXHU3YTEwXHU3YWEzXHU3YWEyXHU3YTllXHU3YWViXHU3YjY2XHU3YjY0XHU3YjZkXHU3Yjc0XHU3YjY5XHU3YjcyXHU3YjY1XHU3YjczXHU3Yjcx''@;'; put 'put ''XHU3YjcwXHU3YjYxXHU3Yjc4XHU3Yjc2XHU3YjYzXHU3Y2IyXHU3Y2I0XHU3Y2FmXHU3ZDg4XHU3ZDg2XHU3ZDgwXHU3ZDhkXHU3ZDdmXHU3ZDg1XHU3ZDdhXHU3ZDhlXHU3ZDdiXHU3ZDgzXHU3ZDdjXHU3ZDhjXHU3ZDk0XHU3ZDg0XHU3ZDdkXHU3ZDkyXHU3ZjZkXHU3ZjZiXHU3ZjY3XHU3''@;'; put 'put ''ZjY4XHU3ZjZjXHU3ZmE2XHU3ZmE1XHU3ZmE3XHU3ZmRiXHU3ZmRjXHU4MDIxXHU4MTY0XHU4MTYwXHU4MTc3XHU4MTVjXHU4MTY5XHU4MTViXHU4MTYyXHU4MTcyXHU2NzIxXHU4MTVlXHU4MTc2XHU4MTY3XHU4MTZmIl0sWyJkZmExIiwiXHU4MTQ0XHU4MTYxXHU4MjFkXHU4MjQ5XHU4MjQ0''@;'; put 'put ''XHU4MjQwXHU4MjQyXHU4MjQ1XHU4NGYxXHU4NDNmXHU4NDU2XHU4NDc2XHU4NDc5XHU4NDhmXHU4NDhkXHU4NDY1XHU4NDUxXHU4NDQwXHU4NDg2XHU4NDY3XHU4NDMwXHU4NDRkXHU4NDdkXHU4NDVhXHU4NDU5XHU4NDc0XHU4NDczXHU4NDVkXHU4NTA3XHU4NDVlXHU4NDM3XHU4NDNhXHU4''@;'; put 'put ''NDM0XHU4NDdhXHU4NDQzXHU4NDc4XHU4NDMyXHU4NDQ1XHU4NDI5XHU4M2Q5XHU4NDRiXHU4NDJmXHU4NDQyXHU4NDJkXHU4NDVmXHU4NDcwXHU4NDM5XHU4NDRlXHU4NDRjXHU4NDUyXHU4NDZmXHU4NGM1XHU4NDhlXHU4NDNiXHU4NDQ3XHU4NDM2XHU4NDMzXHU4NDY4XHU4NDdlXHU4NDQ0''@;'; put 'put ''XHU4NDJiXHU4NDYwXHU4NDU0XHU4NDZlXHU4NDUwXHU4NzBiXHU4NzA0XHU4NmY3XHU4NzBjXHU4NmZhXHU4NmQ2XHU4NmY1XHU4NzRkXHU4NmY4XHU4NzBlXHU4NzA5XHU4NzAxXHU4NmY2XHU4NzBkXHU4NzA1XHU4OGQ2XHU4OGNiXHU4OGNkXHU4OGNlXHU4OGRlXHU4OGRiXHU4OGRhXHU4''@;'; put 'put ''OGNjXHU4OGQwXHU4OTg1XHU4OTliXHU4OWRmXHU4OWU1XHU4OWU0Il0sWyJlMDQwIiwiXHU4OWUxXHU4OWUwXHU4OWUyXHU4OWRjXHU4OWU2XHU4YTc2XHU4YTg2XHU4YTdmXHU4YTYxXHU4YTNmXHU4YTc3XHU4YTgyXHU4YTg0XHU4YTc1XHU4YTgzXHU4YTgxXHU4YTc0XHU4YTdhXHU4YzNj''@;'; put 'put ''XHU4YzRiXHU4YzRhXHU4YzY1XHU4YzY0XHU4YzY2XHU4Yzg2XHU4Yzg0XHU4Yzg1XHU4Y2NjXHU4ZDY4XHU4ZDY5XHU4ZDkxXHU4ZDhjXHU4ZDhlXHU4ZDhmXHU4ZDhkXHU4ZDkzXHU4ZDk0XHU4ZDkwXHU4ZDkyXHU4ZGYwXHU4ZGUwXHU4ZGVjXHU4ZGYxXHU4ZGVlXHU4ZGQwXHU4ZGU5XHU4''@;'; put 'put ''ZGUzXHU4ZGUyXHU4ZGU3XHU4ZGYyXHU4ZGViXHU4ZGY0XHU4ZjA2XHU4ZWZmXHU4ZjAxXHU4ZjAwXHU4ZjA1XHU4ZjA3XHU4ZjA4XHU4ZjAyXHU4ZjBiXHU5MDUyXHU5MDNmIl0sWyJlMGExIiwiXHU5MDQ0XHU5MDQ5XHU5MDNkXHU5MTEwXHU5MTBkXHU5MTBmXHU5MTExXHU5MTE2XHU5MTE0''@;'; put 'put ''XHU5MTBiXHU5MTBlXHU5MTZlXHU5MTZmXHU5MjQ4XHU5MjUyXHU5MjMwXHU5MjNhXHU5MjY2XHU5MjMzXHU5MjY1XHU5MjVlXHU5MjgzXHU5MjJlXHU5MjRhXHU5MjQ2XHU5MjZkXHU5MjZjXHU5MjRmXHU5MjYwXHU5MjY3XHU5MjZmXHU5MjM2XHU5MjYxXHU5MjcwXHU5MjMxXHU5MjU0XHU5''@;'; put 'put ''MjYzXHU5MjUwXHU5MjcyXHU5MjRlXHU5MjUzXHU5MjRjXHU5MjU2XHU5MjMyXHU5NTlmXHU5NTljXHU5NTllXHU5NTliXHU5NjkyXHU5NjkzXHU5NjkxXHU5Njk3XHU5NmNlXHU5NmZhXHU5NmZkXHU5NmY4XHU5NmY1XHU5NzczXHU5Nzc3XHU5Nzc4XHU5NzcyXHU5ODBmXHU5ODBkXHU5ODBl''@;'; put 'put ''XHU5OGFjXHU5OGY2XHU5OGY5XHU5OWFmXHU5OWIyXHU5OWIwXHU5OWI1XHU5YWFkXHU5YWFiXHU5YjViXHU5Y2VhXHU5Y2VkXHU5Y2U3XHU5ZTgwXHU5ZWZkXHU1MGU2XHU1MGQ0XHU1MGQ3XHU1MGU4XHU1MGYzXHU1MGRiXHU1MGVhXHU1MGRkXHU1MGU0XHU1MGQzXHU1MGVjXHU1MGYwXHU1''@;'; put 'put ''MGVmXHU1MGUzXHU1MGUwIl0sWyJlMTQwIiwiXHU1MWQ4XHU1MjgwXHU1MjgxXHU1MmU5XHU1MmViXHU1MzMwXHU1M2FjXHU1NjI3XHU1NjE1XHU1NjBjXHU1NjEyXHU1NWZjXHU1NjBmXHU1NjFjXHU1NjAxXHU1NjEzXHU1NjAyXHU1NWZhXHU1NjFkXHU1NjA0XHU1NWZmXHU1NWY5XHU1ODg5''@;'; put 'put ''XHU1ODdjXHU1ODkwXHU1ODk4XHU1ODg2XHU1ODgxXHU1ODdmXHU1ODc0XHU1ODhiXHU1ODdhXHU1ODg3XHU1ODkxXHU1ODhlXHU1ODc2XHU1ODgyXHU1ODg4XHU1ODdiXHU1ODk0XHU1ODhmXHU1OGZlXHU1OTZiXHU1YWRjXHU1YWVlXHU1YWU1XHU1YWQ1XHU1YWVhXHU1YWRhXHU1YWVkXHU1''@;'; put 'put ''YWViXHU1YWYzXHU1YWUyXHU1YWUwXHU1YWRiXHU1YWVjXHU1YWRlXHU1YWRkXHU1YWQ5XHU1YWU4XHU1YWRmXHU1Yjc3XHU1YmUwIl0sWyJlMWExIiwiXHU1YmUzXHU1YzYzXHU1ZDgyXHU1ZDgwXHU1ZDdkXHU1ZDg2XHU1ZDdhXHU1ZDgxXHU1ZDc3XHU1ZDhhXHU1ZDg5XHU1ZDg4XHU1ZDdl''@;'; put 'put ''XHU1ZDdjXHU1ZDhkXHU1ZDc5XHU1ZDdmXHU1ZTU4XHU1ZTU5XHU1ZTUzXHU1ZWQ4XHU1ZWQxXHU1ZWQ3XHU1ZWNlXHU1ZWRjXHU1ZWQ1XHU1ZWQ5XHU1ZWQyXHU1ZWQ0XHU1ZjQ0XHU1ZjQzXHU1ZjZmXHU1ZmI2XHU2MTJjXHU2MTI4XHU2MTQxXHU2MTVlXHU2MTcxXHU2MTczXHU2MTUyXHU2''@;'; put 'put ''MTUzXHU2MTcyXHU2MTZjXHU2MTgwXHU2MTc0XHU2MTU0XHU2MTdhXHU2MTViXHU2MTY1XHU2MTNiXHU2MTZhXHU2MTYxXHU2MTU2XHU2MjI5XHU2MjI3XHU2MjJiXHU2NDJiXHU2NDRkXHU2NDViXHU2NDVkXHU2NDc0XHU2NDc2XHU2NDcyXHU2NDczXHU2NDdkXHU2NDc1XHU2NDY2XHU2NGE2''@;'; put 'put ''XHU2NDRlXHU2NDgyXHU2NDVlXHU2NDVjXHU2NDRiXHU2NDUzXHU2NDYwXHU2NDUwXHU2NDdmXHU2NDNmXHU2NDZjXHU2NDZiXHU2NDU5XHU2NDY1XHU2NDc3XHU2NTczXHU2NWEwXHU2NmExXHU2NmEwXHU2NjlmXHU2NzA1XHU2NzA0XHU2NzIyXHU2OWIxXHU2OWI2XHU2OWM5Il0sWyJlMjQw''@;'; put 'put ''IiwiXHU2OWEwXHU2OWNlXHU2OTk2XHU2OWIwXHU2OWFjXHU2OWJjXHU2OTkxXHU2OTk5XHU2OThlXHU2OWE3XHU2OThkXHU2OWE5XHU2OWJlXHU2OWFmXHU2OWJmXHU2OWM0XHU2OWJkXHU2OWE0XHU2OWQ0XHU2OWI5XHU2OWNhXHU2OTlhXHU2OWNmXHU2OWIzXHU2OTkzXHU2OWFhXHU2OWEx''@;'; put 'put ''XHU2OTllXHU2OWQ5XHU2OTk3XHU2OTkwXHU2OWMyXHU2OWI1XHU2OWE1XHU2OWM2XHU2YjRhXHU2YjRkXHU2YjRiXHU2YjllXHU2YjlmXHU2YmEwXHU2YmMzXHU2YmM0XHU2YmZlXHU2ZWNlXHU2ZWY1XHU2ZWYxXHU2ZjAzXHU2ZjI1XHU2ZWY4XHU2ZjM3XHU2ZWZiXHU2ZjJlXHU2ZjA5XHU2''@;'; put 'put ''ZjRlXHU2ZjE5XHU2ZjFhXHU2ZjI3XHU2ZjE4XHU2ZjNiXHU2ZjEyXHU2ZWVkXHU2ZjBhIl0sWyJlMmExIiwiXHU2ZjM2XHU2ZjczXHU2ZWY5XHU2ZWVlXHU2ZjJkXHU2ZjQwXHU2ZjMwXHU2ZjNjXHU2ZjM1XHU2ZWViXHU2ZjA3XHU2ZjBlXHU2ZjQzXHU2ZjA1XHU2ZWZkXHU2ZWY2XHU2ZjM5''@;'; put 'put ''XHU2ZjFjXHU2ZWZjXHU2ZjNhXHU2ZjFmXHU2ZjBkXHU2ZjFlXHU2ZjA4XHU2ZjIxXHU3MTg3XHU3MTkwXHU3MTg5XHU3MTgwXHU3MTg1XHU3MTgyXHU3MThmXHU3MTdiXHU3MTg2XHU3MTgxXHU3MTk3XHU3MjQ0XHU3MjUzXHU3Mjk3XHU3Mjk1XHU3MjkzXHU3MzQzXHU3MzRkXHU3MzUxXHU3''@;'; put 'put ''MzRjXHU3NDYyXHU3NDczXHU3NDcxXHU3NDc1XHU3NDcyXHU3NDY3XHU3NDZlXHU3NTAwXHU3NTAyXHU3NTAzXHU3NTdkXHU3NTkwXHU3NjE2XHU3NjA4XHU3NjBjXHU3NjE1XHU3NjExXHU3NjBhXHU3NjE0XHU3NmI4XHU3NzgxXHU3NzdjXHU3Nzg1XHU3NzgyXHU3NzZlXHU3NzgwXHU3NzZm''@;'; put 'put ''XHU3NzdlXHU3NzgzXHU3OGIyXHU3OGFhXHU3OGI0XHU3OGFkXHU3OGE4XHU3ODdlXHU3OGFiXHU3ODllXHU3OGE1XHU3OGEwXHU3OGFjXHU3OGEyXHU3OGE0XHU3OTk4XHU3OThhXHU3OThiXHU3OTk2XHU3OTk1XHU3OTk0XHU3OTkzIl0sWyJlMzQwIiwiXHU3OTk3XHU3OTg4XHU3OTkyXHU3''@;'; put 'put ''OTkwXHU3YTJiXHU3YTRhXHU3YTMwXHU3YTJmXHU3YTI4XHU3YTI2XHU3YWE4XHU3YWFiXHU3YWFjXHU3YWVlXHU3Yjg4XHU3YjljXHU3YjhhXHU3YjkxXHU3YjkwXHU3Yjk2XHU3YjhkXHU3YjhjXHU3YjliXHU3YjhlXHU3Yjg1XHU3Yjk4XHU1Mjg0XHU3Yjk5XHU3YmE0XHU3YjgyXHU3Y2Ji''@;'; put 'put ''XHU3Y2JmXHU3Y2JjXHU3Y2JhXHU3ZGE3XHU3ZGI3XHU3ZGMyXHU3ZGEzXHU3ZGFhXHU3ZGMxXHU3ZGMwXHU3ZGM1XHU3ZDlkXHU3ZGNlXHU3ZGM0XHU3ZGM2XHU3ZGNiXHU3ZGNjXHU3ZGFmXHU3ZGI5XHU3ZDk2XHU3ZGJjXHU3ZDlmXHU3ZGE2XHU3ZGFlXHU3ZGE5XHU3ZGExXHU3ZGM5XHU3''@;'; put 'put ''ZjczXHU3ZmUyXHU3ZmUzXHU3ZmU1XHU3ZmRlIl0sWyJlM2ExIiwiXHU4MDI0XHU4MDVkXHU4MDVjXHU4MTg5XHU4MTg2XHU4MTgzXHU4MTg3XHU4MThkXHU4MThjXHU4MThiXHU4MjE1XHU4NDk3XHU4NGE0XHU4NGExXHU4NDlmXHU4NGJhXHU4NGNlXHU4NGMyXHU4NGFjXHU4NGFlXHU4NGFi''@;'; put 'put ''XHU4NGI5XHU4NGI0XHU4NGMxXHU4NGNkXHU4NGFhXHU4NDlhXHU4NGIxXHU4NGQwXHU4NDlkXHU4NGE3XHU4NGJiXHU4NGEyXHU4NDk0XHU4NGM3XHU4NGNjXHU4NDliXHU4NGE5XHU4NGFmXHU4NGE4XHU4NGQ2XHU4NDk4XHU4NGI2XHU4NGNmXHU4NGEwXHU4NGQ3XHU4NGQ0XHU4NGQyXHU4''@;'; put 'put ''NGRiXHU4NGIwXHU4NDkxXHU4NjYxXHU4NzMzXHU4NzIzXHU4NzI4XHU4NzZiXHU4NzQwXHU4NzJlXHU4NzFlXHU4NzIxXHU4NzE5XHU4NzFiXHU4NzQzXHU4NzJjXHU4NzQxXHU4NzNlXHU4NzQ2XHU4NzIwXHU4NzMyXHU4NzJhXHU4NzJkXHU4NzNjXHU4NzEyXHU4NzNhXHU4NzMxXHU4NzM1''@;'; put 'put ''XHU4NzQyXHU4NzI2XHU4NzI3XHU4NzM4XHU4NzI0XHU4NzFhXHU4NzMwXHU4NzExXHU4OGY3XHU4OGU3XHU4OGYxXHU4OGYyXHU4OGZhXHU4OGZlXHU4OGVlXHU4OGZjXHU4OGY2XHU4OGZiIl0sWyJlNDQwIiwiXHU4OGYwXHU4OGVjXHU4OGViXHU4OTlkXHU4OWExXHU4OTlmXHU4OTllXHU4''@;'; put 'put ''OWU5XHU4OWViXHU4OWU4XHU4YWFiXHU4YTk5XHU4YThiXHU4YTkyXHU4YThmXHU4YTk2XHU4YzNkXHU4YzY4XHU4YzY5XHU4Y2Q1XHU4Y2NmXHU4Y2Q3XHU4ZDk2XHU4ZTA5XHU4ZTAyXHU4ZGZmXHU4ZTBkXHU4ZGZkXHU4ZTBhXHU4ZTAzXHU4ZTA3XHU4ZTA2XHU4ZTA1XHU4ZGZlXHU4ZTAw''@;'; put 'put ''XHU4ZTA0XHU4ZjEwXHU4ZjExXHU4ZjBlXHU4ZjBkXHU5MTIzXHU5MTFjXHU5MTIwXHU5MTIyXHU5MTFmXHU5MTFkXHU5MTFhXHU5MTI0XHU5MTIxXHU5MTFiXHU5MTdhXHU5MTcyXHU5MTc5XHU5MTczXHU5MmE1XHU5MmE0XHU5Mjc2XHU5MjliXHU5MjdhXHU5MmEwXHU5Mjk0XHU5MmFhXHU5''@;'; put 'put ''MjhkIl0sWyJlNGExIiwiXHU5MmE2XHU5MjlhXHU5MmFiXHU5Mjc5XHU5Mjk3XHU5MjdmXHU5MmEzXHU5MmVlXHU5MjhlXHU5MjgyXHU5Mjk1XHU5MmEyXHU5MjdkXHU5Mjg4XHU5MmExXHU5MjhhXHU5Mjg2XHU5MjhjXHU5Mjk5XHU5MmE3XHU5MjdlXHU5Mjg3XHU5MmE5XHU5MjlkXHU5Mjhi''@;'; put 'put ''XHU5MjJkXHU5NjllXHU5NmExXHU5NmZmXHU5NzU4XHU5NzdkXHU5NzdhXHU5NzdlXHU5NzgzXHU5NzgwXHU5NzgyXHU5NzdiXHU5Nzg0XHU5NzgxXHU5NzdmXHU5N2NlXHU5N2NkXHU5ODE2XHU5OGFkXHU5OGFlXHU5OTAyXHU5OTAwXHU5OTA3XHU5OTlkXHU5OTljXHU5OWMzXHU5OWI5XHU5''@;'; put 'put ''OWJiXHU5OWJhXHU5OWMyXHU5OWJkXHU5OWM3XHU5YWIxXHU5YWUzXHU5YWU3XHU5YjNlXHU5YjNmXHU5YjYwXHU5YjYxXHU5YjVmXHU5Y2YxXHU5Y2YyXHU5Y2Y1XHU5ZWE3XHU1MGZmXHU1MTAzXHU1MTMwXHU1MGY4XHU1MTA2XHU1MTA3XHU1MGY2XHU1MGZlXHU1MTBiXHU1MTBjXHU1MGZk''@;'; put 'put ''XHU1MTBhXHU1MjhiXHU1MjhjXHU1MmYxXHU1MmVmXHU1NjQ4XHU1NjQyXHU1NjRjXHU1NjM1XHU1NjQxXHU1NjRhXHU1NjQ5XHU1NjQ2XHU1NjU4Il0sWyJlNTQwIiwiXHU1NjVhXHU1NjQwXHU1NjMzXHU1NjNkXHU1NjJjXHU1NjNlXHU1NjM4XHU1NjJhXHU1NjNhXHU1NzFhXHU1OGFiXHU1''@;'; put 'put ''ODlkXHU1OGIxXHU1OGEwXHU1OGEzXHU1OGFmXHU1OGFjXHU1OGE1XHU1OGExXHU1OGZmXHU1YWZmXHU1YWY0XHU1YWZkXHU1YWY3XHU1YWY2XHU1YjAzXHU1YWY4XHU1YjAyXHU1YWY5XHU1YjAxXHU1YjA3XHU1YjA1XHU1YjBmXHU1YzY3XHU1ZDk5XHU1ZDk3XHU1ZDlmXHU1ZDkyXHU1ZGEy''@;'; put 'put ''XHU1ZDkzXHU1ZDk1XHU1ZGEwXHU1ZDljXHU1ZGExXHU1ZDlhXHU1ZDllXHU1ZTY5XHU1ZTVkXHU1ZTYwXHU1ZTVjXHU3ZGYzXHU1ZWRiXHU1ZWRlXHU1ZWUxXHU1ZjQ5XHU1ZmIyXHU2MThiXHU2MTgzXHU2MTc5XHU2MWIxXHU2MWIwXHU2MWEyXHU2MTg5Il0sWyJlNWExIiwiXHU2MTliXHU2''@;'; put 'put ''MTkzXHU2MWFmXHU2MWFkXHU2MTlmXHU2MTkyXHU2MWFhXHU2MWExXHU2MThkXHU2MTY2XHU2MWIzXHU2MjJkXHU2NDZlXHU2NDcwXHU2NDk2XHU2NGEwXHU2NDg1XHU2NDk3XHU2NDljXHU2NDhmXHU2NDhiXHU2NDhhXHU2NDhjXHU2NGEzXHU2NDlmXHU2NDY4XHU2NGIxXHU2NDk4XHU2NTc2''@;'; put 'put ''XHU2NTdhXHU2NTc5XHU2NTdiXHU2NWIyXHU2NWIzXHU2NmI1XHU2NmIwXHU2NmE5XHU2NmIyXHU2NmI3XHU2NmFhXHU2NmFmXHU2YTAwXHU2YTA2XHU2YTE3XHU2OWU1XHU2OWY4XHU2YTE1XHU2OWYxXHU2OWU0XHU2YTIwXHU2OWZmXHU2OWVjXHU2OWUyXHU2YTFiXHU2YTFkXHU2OWZlXHU2''@;'; put 'put ''YTI3XHU2OWYyXHU2OWVlXHU2YTE0XHU2OWY3XHU2OWU3XHU2YTQwXHU2YTA4XHU2OWU2XHU2OWZiXHU2YTBkXHU2OWZjXHU2OWViXHU2YTA5XHU2YTA0XHU2YTE4XHU2YTI1XHU2YTBmXHU2OWY2XHU2YTI2XHU2YTA3XHU2OWY0XHU2YTE2XHU2YjUxXHU2YmE1XHU2YmEzXHU2YmEyXHU2YmE2''@;'; put 'put ''XHU2YzAxXHU2YzAwXHU2YmZmXHU2YzAyXHU2ZjQxXHU2ZjI2XHU2ZjdlXHU2Zjg3XHU2ZmM2XHU2ZjkyIl0sWyJlNjQwIiwiXHU2ZjhkXHU2Zjg5XHU2ZjhjXHU2ZjYyXHU2ZjRmXHU2Zjg1XHU2ZjVhXHU2Zjk2XHU2Zjc2XHU2ZjZjXHU2ZjgyXHU2ZjU1XHU2ZjcyXHU2ZjUyXHU2ZjUwXHU2''@;'; put 'put ''ZjU3XHU2Zjk0XHU2ZjkzXHU2ZjVkXHU2ZjAwXHU2ZjYxXHU2ZjZiXHU2ZjdkXHU2ZjY3XHU2ZjkwXHU2ZjUzXHU2ZjhiXHU2ZjY5XHU2ZjdmXHU2Zjk1XHU2ZjYzXHU2Zjc3XHU2ZjZhXHU2ZjdiXHU3MWIyXHU3MWFmXHU3MTliXHU3MWIwXHU3MWEwXHU3MTlhXHU3MWE5XHU3MWI1XHU3MTlk''@;'; put 'put ''XHU3MWE1XHU3MTllXHU3MWE0XHU3MWExXHU3MWFhXHU3MTljXHU3MWE3XHU3MWIzXHU3Mjk4XHU3MjlhXHU3MzU4XHU3MzUyXHU3MzVlXHU3MzVmXHU3MzYwXHU3MzVkXHU3MzViXHU3MzYxXHU3MzVhXHU3MzU5Il0sWyJlNmExIiwiXHU3MzYyXHU3NDg3XHU3NDg5XHU3NDhhXHU3NDg2XHU3''@;'; put 'put ''NDgxXHU3NDdkXHU3NDg1XHU3NDg4XHU3NDdjXHU3NDc5XHU3NTA4XHU3NTA3XHU3NTdlXHU3NjI1XHU3NjFlXHU3NjE5XHU3NjFkXHU3NjFjXHU3NjIzXHU3NjFhXHU3NjI4XHU3NjFiXHU3NjljXHU3NjlkXHU3NjllXHU3NjliXHU3NzhkXHU3NzhmXHU3Nzg5XHU3Nzg4XHU3OGNkXHU3OGJi''@;'; put 'put ''XHU3OGNmXHU3OGNjXHU3OGQxXHU3OGNlXHU3OGQ0XHU3OGM4XHU3OGMzXHU3OGM0XHU3OGM5XHU3OTlhXHU3OWExXHU3OWEwXHU3OTljXHU3OWEyXHU3OTliXHU2Yjc2XHU3YTM5XHU3YWIyXHU3YWI0XHU3YWIzXHU3YmI3XHU3YmNiXHU3YmJlXHU3YmFjXHU3YmNlXHU3YmFmXHU3YmI5XHU3''@;'; put 'put ''YmNhXHU3YmI1XHU3Y2M1XHU3Y2M4XHU3Y2NjXHU3Y2NiXHU3ZGY3XHU3ZGRiXHU3ZGVhXHU3ZGU3XHU3ZGQ3XHU3ZGUxXHU3ZTAzXHU3ZGZhXHU3ZGU2XHU3ZGY2XHU3ZGYxXHU3ZGYwXHU3ZGVlXHU3ZGRmXHU3Zjc2XHU3ZmFjXHU3ZmIwXHU3ZmFkXHU3ZmVkXHU3ZmViXHU3ZmVhXHU3ZmVj''@;'; put 'put ''XHU3ZmU2XHU3ZmU4XHU4MDY0XHU4MDY3XHU4MWEzXHU4MTlmIl0sWyJlNzQwIiwiXHU4MTllXHU4MTk1XHU4MWEyXHU4MTk5XHU4MTk3XHU4MjE2XHU4MjRmXHU4MjUzXHU4MjUyXHU4MjUwXHU4MjRlXHU4MjUxXHU4NTI0XHU4NTNiXHU4NTBmXHU4NTAwXHU4NTI5XHU4NTBlXHU4NTA5XHU4''@;'; put 'put ''NTBkXHU4NTFmXHU4NTBhXHU4NTI3XHU4NTFjXHU4NGZiXHU4NTJiXHU4NGZhXHU4NTA4XHU4NTBjXHU4NGY0XHU4NTJhXHU4NGYyXHU4NTE1XHU4NGY3XHU4NGViXHU4NGYzXHU4NGZjXHU4NTEyXHU4NGVhXHU4NGU5XHU4NTE2XHU4NGZlXHU4NTI4XHU4NTFkXHU4NTJlXHU4NTAyXHU4NGZk''@;'; put 'put ''XHU4NTFlXHU4NGY2XHU4NTMxXHU4NTI2XHU4NGU3XHU4NGU4XHU4NGYwXHU4NGVmXHU4NGY5XHU4NTE4XHU4NTIwXHU4NTMwXHU4NTBiXHU4NTE5XHU4NTJmXHU4NjYyIl0sWyJlN2ExIiwiXHU4NzU2XHU4NzYzXHU4NzY0XHU4Nzc3XHU4N2UxXHU4NzczXHU4NzU4XHU4NzU0XHU4NzViXHU4''@;'; put 'put ''NzUyXHU4NzYxXHU4NzVhXHU4NzUxXHU4NzVlXHU4NzZkXHU4NzZhXHU4NzUwXHU4NzRlXHU4NzVmXHU4NzVkXHU4NzZmXHU4NzZjXHU4NzdhXHU4NzZlXHU4NzVjXHU4NzY1XHU4NzRmXHU4NzdiXHU4Nzc1XHU4NzYyXHU4NzY3XHU4NzY5XHU4ODVhXHU4OTA1XHU4OTBjXHU4OTE0XHU4OTBi''@;'; put 'put ''XHU4OTE3XHU4OTE4XHU4OTE5XHU4OTA2XHU4OTE2XHU4OTExXHU4OTBlXHU4OTA5XHU4OWEyXHU4OWE0XHU4OWEzXHU4OWVkXHU4OWYwXHU4OWVjXHU4YWNmXHU4YWM2XHU4YWI4XHU4YWQzXHU4YWQxXHU4YWQ0XHU4YWQ1XHU4YWJiXHU4YWQ3XHU4YWJlXHU4YWMwXHU4YWM1XHU4YWQ4XHU4''@;'; put 'put ''YWMzXHU4YWJhXHU4YWJkXHU4YWQ5XHU4YzNlXHU4YzRkXHU4YzhmXHU4Y2U1XHU4Y2RmXHU4Y2Q5XHU4Y2U4XHU4Y2RhXHU4Y2RkXHU4Y2U3XHU4ZGEwXHU4ZDljXHU4ZGExXHU4ZDliXHU4ZTIwXHU4ZTIzXHU4ZTI1XHU4ZTI0XHU4ZTJlXHU4ZTE1XHU4ZTFiXHU4ZTE2XHU4ZTExXHU4ZTE5''@;'; put 'put ''XHU4ZTI2XHU4ZTI3Il0sWyJlODQwIiwiXHU4ZTE0XHU4ZTEyXHU4ZTE4XHU4ZTEzXHU4ZTFjXHU4ZTE3XHU4ZTFhXHU4ZjJjXHU4ZjI0XHU4ZjE4XHU4ZjFhXHU4ZjIwXHU4ZjIzXHU4ZjE2XHU4ZjE3XHU5MDczXHU5MDcwXHU5MDZmXHU5MDY3XHU5MDZiXHU5MTJmXHU5MTJiXHU5MTI5XHU5''@;'; put 'put ''MTJhXHU5MTMyXHU5MTI2XHU5MTJlXHU5MTg1XHU5MTg2XHU5MThhXHU5MTgxXHU5MTgyXHU5MTg0XHU5MTgwXHU5MmQwXHU5MmMzXHU5MmM0XHU5MmMwXHU5MmQ5XHU5MmI2XHU5MmNmXHU5MmYxXHU5MmRmXHU5MmQ4XHU5MmU5XHU5MmQ3XHU5MmRkXHU5MmNjXHU5MmVmXHU5MmMyXHU5MmU4''@;'; put 'put ''XHU5MmNhXHU5MmM4XHU5MmNlXHU5MmU2XHU5MmNkXHU5MmQ1XHU5MmM5XHU5MmUwXHU5MmRlXHU5MmU3XHU5MmQxXHU5MmQzIl0sWyJlOGExIiwiXHU5MmI1XHU5MmUxXHU5MmM2XHU5MmI0XHU5NTdjXHU5NWFjXHU5NWFiXHU5NWFlXHU5NWIwXHU5NmE0XHU5NmEyXHU5NmQzXHU5NzA1XHU5''@;'; put 'put ''NzA4XHU5NzAyXHU5NzVhXHU5NzhhXHU5NzhlXHU5Nzg4XHU5N2QwXHU5N2NmXHU5ODFlXHU5ODFkXHU5ODI2XHU5ODI5XHU5ODI4XHU5ODIwXHU5ODFiXHU5ODI3XHU5OGIyXHU5OTA4XHU5OGZhXHU5OTExXHU5OTE0XHU5OTE2XHU5OTE3XHU5OTE1XHU5OWRjXHU5OWNkXHU5OWNmXHU5OWQz''@;'; put 'put ''XHU5OWQ0XHU5OWNlXHU5OWM5XHU5OWQ2XHU5OWQ4XHU5OWNiXHU5OWQ3XHU5OWNjXHU5YWIzXHU5YWVjXHU5YWViXHU5YWYzXHU5YWYyXHU5YWYxXHU5YjQ2XHU5YjQzXHU5YjY3XHU5Yjc0XHU5YjcxXHU5YjY2XHU5Yjc2XHU5Yjc1XHU5YjcwXHU5YjY4XHU5YjY0XHU5YjZjXHU5Y2ZjXHU5''@;'; put 'put ''Y2ZhXHU5Y2ZkXHU5Y2ZmXHU5Y2Y3XHU5ZDA3XHU5ZDAwXHU5Y2Y5XHU5Y2ZiXHU5ZDA4XHU5ZDA1XHU5ZDA0XHU5ZTgzXHU5ZWQzXHU5ZjBmXHU5ZjEwXHU1MTFjXHU1MTEzXHU1MTE3XHU1MTFhXHU1MTExXHU1MWRlXHU1MzM0XHU1M2UxXHU1NjcwXHU1NjYwXHU1NjZlIl0sWyJlOTQwIiwi''@;'; put 'put ''XHU1NjczXHU1NjY2XHU1NjYzXHU1NjZkXHU1NjcyXHU1NjVlXHU1Njc3XHU1NzFjXHU1NzFiXHU1OGM4XHU1OGJkXHU1OGM5XHU1OGJmXHU1OGJhXHU1OGMyXHU1OGJjXHU1OGM2XHU1YjE3XHU1YjE5XHU1YjFiXHU1YjIxXHU1YjE0XHU1YjEzXHU1YjEwXHU1YjE2XHU1YjI4XHU1YjFhXHU1''@;'; put 'put ''YjIwXHU1YjFlXHU1YmVmXHU1ZGFjXHU1ZGIxXHU1ZGE5XHU1ZGE3XHU1ZGI1XHU1ZGIwXHU1ZGFlXHU1ZGFhXHU1ZGE4XHU1ZGIyXHU1ZGFkXHU1ZGFmXHU1ZGI0XHU1ZTY3XHU1ZTY4XHU1ZTY2XHU1ZTZmXHU1ZWU5XHU1ZWU3XHU1ZWU2XHU1ZWU4XHU1ZWU1XHU1ZjRiXHU1ZmJjXHU2MTlk''@;'; put 'put ''XHU2MWE4XHU2MTk2XHU2MWM1XHU2MWI0XHU2MWM2XHU2MWMxXHU2MWNjXHU2MWJhIl0sWyJlOWExIiwiXHU2MWJmXHU2MWI4XHU2MThjXHU2NGQ3XHU2NGQ2XHU2NGQwXHU2NGNmXHU2NGM5XHU2NGJkXHU2NDg5XHU2NGMzXHU2NGRiXHU2NGYzXHU2NGQ5XHU2NTMzXHU2NTdmXHU2NTdjXHU2''@;'; put 'put ''NWEyXHU2NmM4XHU2NmJlXHU2NmMwXHU2NmNhXHU2NmNiXHU2NmNmXHU2NmJkXHU2NmJiXHU2NmJhXHU2NmNjXHU2NzIzXHU2YTM0XHU2YTY2XHU2YTQ5XHU2YTY3XHU2YTMyXHU2YTY4XHU2YTNlXHU2YTVkXHU2YTZkXHU2YTc2XHU2YTViXHU2YTUxXHU2YTI4XHU2YTVhXHU2YTNiXHU2YTNm''@;'; put 'put ''XHU2YTQxXHU2YTZhXHU2YTY0XHU2YTUwXHU2YTRmXHU2YTU0XHU2YTZmXHU2YTY5XHU2YTYwXHU2YTNjXHU2YTVlXHU2YTU2XHU2YTU1XHU2YTRkXHU2YTRlXHU2YTQ2XHU2YjU1XHU2YjU0XHU2YjU2XHU2YmE3XHU2YmFhXHU2YmFiXHU2YmM4XHU2YmM3XHU2YzA0XHU2YzAzXHU2YzA2XHU2''@;'; put 'put ''ZmFkXHU2ZmNiXHU2ZmEzXHU2ZmM3XHU2ZmJjXHU2ZmNlXHU2ZmM4XHU2ZjVlXHU2ZmM0XHU2ZmJkXHU2ZjllXHU2ZmNhXHU2ZmE4XHU3MDA0XHU2ZmE1XHU2ZmFlXHU2ZmJhXHU2ZmFjXHU2ZmFhXHU2ZmNmXHU2ZmJmXHU2ZmI4Il0sWyJlYTQwIiwiXHU2ZmEyXHU2ZmM5XHU2ZmFiXHU2ZmNk''@;'; put 'put ''XHU2ZmFmXHU2ZmIyXHU2ZmIwXHU3MWM1XHU3MWMyXHU3MWJmXHU3MWI4XHU3MWQ2XHU3MWMwXHU3MWMxXHU3MWNiXHU3MWQ0XHU3MWNhXHU3MWM3XHU3MWNmXHU3MWJkXHU3MWQ4XHU3MWJjXHU3MWM2XHU3MWRhXHU3MWRiXHU3MjlkXHU3MjllXHU3MzY5XHU3MzY2XHU3MzY3XHU3MzZjXHU3''@;'; put 'put ''MzY1XHU3MzZiXHU3MzZhXHU3NDdmXHU3NDlhXHU3NGEwXHU3NDk0XHU3NDkyXHU3NDk1XHU3NGExXHU3NTBiXHU3NTgwXHU3NjJmXHU3NjJkXHU3NjMxXHU3NjNkXHU3NjMzXHU3NjNjXHU3NjM1XHU3NjMyXHU3NjMwXHU3NmJiXHU3NmU2XHU3NzlhXHU3NzlkXHU3N2ExXHU3NzljXHU3Nzli''@;'; put 'put ''XHU3N2EyXHU3N2EzXHU3Nzk1XHU3Nzk5Il0sWyJlYWExIiwiXHU3Nzk3XHU3OGRkXHU3OGU5XHU3OGU1XHU3OGVhXHU3OGRlXHU3OGUzXHU3OGRiXHU3OGUxXHU3OGUyXHU3OGVkXHU3OGRmXHU3OGUwXHU3OWE0XHU3YTQ0XHU3YTQ4XHU3YTQ3XHU3YWI2XHU3YWI4XHU3YWI1XHU3YWIxXHU3''@;'; put 'put ''YWI3XHU3YmRlXHU3YmUzXHU3YmU3XHU3YmRkXHU3YmQ1XHU3YmU1XHU3YmRhXHU3YmU4XHU3YmY5XHU3YmQ0XHU3YmVhXHU3YmUyXHU3YmRjXHU3YmViXHU3YmQ4XHU3YmRmXHU3Y2QyXHU3Y2Q0XHU3Y2Q3XHU3Y2QwXHU3Y2QxXHU3ZTEyXHU3ZTIxXHU3ZTE3XHU3ZTBjXHU3ZTFmXHU3ZTIw''@;'; put 'put ''XHU3ZTEzXHU3ZTBlXHU3ZTFjXHU3ZTE1XHU3ZTFhXHU3ZTIyXHU3ZTBiXHU3ZTBmXHU3ZTE2XHU3ZTBkXHU3ZTE0XHU3ZTI1XHU3ZTI0XHU3ZjQzXHU3ZjdiXHU3ZjdjXHU3ZjdhXHU3ZmIxXHU3ZmVmXHU4MDJhXHU4MDI5XHU4MDZjXHU4MWIxXHU4MWE2XHU4MWFlXHU4MWI5XHU4MWI1XHU4''@;'; put 'put ''MWFiXHU4MWIwXHU4MWFjXHU4MWI0XHU4MWIyXHU4MWI3XHU4MWE3XHU4MWYyXHU4MjU1XHU4MjU2XHU4MjU3XHU4NTU2XHU4NTQ1XHU4NTZiXHU4NTRkXHU4NTUzXHU4NTYxXHU4NTU4Il0sWyJlYjQwIiwiXHU4NTQwXHU4NTQ2XHU4NTY0XHU4NTQxXHU4NTYyXHU4NTQ0XHU4NTUxXHU4NTQ3''@;'; put 'put ''XHU4NTYzXHU4NTNlXHU4NTViXHU4NTcxXHU4NTRlXHU4NTZlXHU4NTc1XHU4NTU1XHU4NTY3XHU4NTYwXHU4NThjXHU4NTY2XHU4NTVkXHU4NTU0XHU4NTY1XHU4NTZjXHU4NjYzXHU4NjY1XHU4NjY0XHU4NzliXHU4NzhmXHU4Nzk3XHU4NzkzXHU4NzkyXHU4Nzg4XHU4NzgxXHU4Nzk2XHU4''@;'; put 'put ''Nzk4XHU4Nzc5XHU4Nzg3XHU4N2EzXHU4Nzg1XHU4NzkwXHU4NzkxXHU4NzlkXHU4Nzg0XHU4Nzk0XHU4NzljXHU4NzlhXHU4Nzg5XHU4OTFlXHU4OTI2XHU4OTMwXHU4OTJkXHU4OTJlXHU4OTI3XHU4OTMxXHU4OTIyXHU4OTI5XHU4OTIzXHU4OTJmXHU4OTJjXHU4OTFmXHU4OWYxXHU4YWUw''@;'; put 'put ''Il0sWyJlYmExIiwiXHU4YWUyXHU4YWYyXHU4YWY0XHU4YWY1XHU4YWRkXHU4YjE0XHU4YWU0XHU4YWRmXHU4YWYwXHU4YWM4XHU4YWRlXHU4YWUxXHU4YWU4XHU4YWZmXHU4YWVmXHU4YWZiXHU4YzkxXHU4YzkyXHU4YzkwXHU4Y2Y1XHU4Y2VlXHU4Y2YxXHU4Y2YwXHU4Y2YzXHU4ZDZjXHU4''@;'; put 'put ''ZDZlXHU4ZGE1XHU4ZGE3XHU4ZTMzXHU4ZTNlXHU4ZTM4XHU4ZTQwXHU4ZTQ1XHU4ZTM2XHU4ZTNjXHU4ZTNkXHU4ZTQxXHU4ZTMwXHU4ZTNmXHU4ZWJkXHU4ZjM2XHU4ZjJlXHU4ZjM1XHU4ZjMyXHU4ZjM5XHU4ZjM3XHU4ZjM0XHU5MDc2XHU5MDc5XHU5MDdiXHU5MDg2XHU5MGZhXHU5MTMz''@;'; put 'put ''XHU5MTM1XHU5MTM2XHU5MTkzXHU5MTkwXHU5MTkxXHU5MThkXHU5MThmXHU5MzI3XHU5MzFlXHU5MzA4XHU5MzFmXHU5MzA2XHU5MzBmXHU5MzdhXHU5MzM4XHU5MzNjXHU5MzFiXHU5MzIzXHU5MzEyXHU5MzAxXHU5MzQ2XHU5MzJkXHU5MzBlXHU5MzBkXHU5MmNiXHU5MzFkXHU5MmZhXHU5''@;'; put 'put ''MzI1XHU5MzEzXHU5MmY5XHU5MmY3XHU5MzM0XHU5MzAyXHU5MzI0XHU5MmZmXHU5MzI5XHU5MzM5XHU5MzM1XHU5MzJhXHU5MzE0XHU5MzBjIl0sWyJlYzQwIiwiXHU5MzBiXHU5MmZlXHU5MzA5XHU5MzAwXHU5MmZiXHU5MzE2XHU5NWJjXHU5NWNkXHU5NWJlXHU5NWI5XHU5NWJhXHU5NWI2''@;'; put 'put ''XHU5NWJmXHU5NWI1XHU5NWJkXHU5NmE5XHU5NmQ0XHU5NzBiXHU5NzEyXHU5NzEwXHU5Nzk5XHU5Nzk3XHU5Nzk0XHU5N2YwXHU5N2Y4XHU5ODM1XHU5ODJmXHU5ODMyXHU5OTI0XHU5OTFmXHU5OTI3XHU5OTI5XHU5OTllXHU5OWVlXHU5OWVjXHU5OWU1XHU5OWU0XHU5OWYwXHU5OWUzXHU5''@;'; put 'put ''OWVhXHU5OWU5XHU5OWU3XHU5YWI5XHU5YWJmXHU5YWI0XHU5YWJiXHU5YWY2XHU5YWZhXHU5YWY5XHU5YWY3XHU5YjMzXHU5YjgwXHU5Yjg1XHU5Yjg3XHU5YjdjXHU5YjdlXHU5YjdiXHU5YjgyXHU5YjkzXHU5YjkyXHU5YjkwXHU5YjdhXHU5Yjk1Il0sWyJlY2ExIiwiXHU5YjdkXHU5Yjg4''@;'; put 'put ''XHU5ZDI1XHU5ZDE3XHU5ZDIwXHU5ZDFlXHU5ZDE0XHU5ZDI5XHU5ZDFkXHU5ZDE4XHU5ZDIyXHU5ZDEwXHU5ZDE5XHU5ZDFmXHU5ZTg4XHU5ZTg2XHU5ZTg3XHU5ZWFlXHU5ZWFkXHU5ZWQ1XHU5ZWQ2XHU5ZWZhXHU5ZjEyXHU5ZjNkXHU1MTI2XHU1MTI1XHU1MTIyXHU1MTI0XHU1MTIwXHU1''@;'; put 'put ''MTI5XHU1MmY0XHU1NjkzXHU1NjhjXHU1NjhkXHU1Njg2XHU1Njg0XHU1NjgzXHU1NjdlXHU1NjgyXHU1NjdmXHU1NjgxXHU1OGQ2XHU1OGQ0XHU1OGNmXHU1OGQyXHU1YjJkXHU1YjI1XHU1YjMyXHU1YjIzXHU1YjJjXHU1YjI3XHU1YjI2XHU1YjJmXHU1YjJlXHU1YjdiXHU1YmYxXHU1YmYy''@;'; put 'put ''XHU1ZGI3XHU1ZTZjXHU1ZTZhXHU1ZmJlXHU1ZmJiXHU2MWMzXHU2MWI1XHU2MWJjXHU2MWU3XHU2MWUwXHU2MWU1XHU2MWU0XHU2MWU4XHU2MWRlXHU2NGVmXHU2NGU5XHU2NGUzXHU2NGViXHU2NGU0XHU2NGU4XHU2NTgxXHU2NTgwXHU2NWI2XHU2NWRhXHU2NmQyXHU2YThkXHU2YTk2XHU2''@;'; put 'put ''YTgxXHU2YWE1XHU2YTg5XHU2YTlmXHU2YTliXHU2YWExXHU2YTllXHU2YTg3XHU2YTkzXHU2YThlIl0sWyJlZDQwIiwiXHU2YTk1XHU2YTgzXHU2YWE4XHU2YWE0XHU2YTkxXHU2YTdmXHU2YWE2XHU2YTlhXHU2YTg1XHU2YThjXHU2YTkyXHU2YjViXHU2YmFkXHU2YzA5XHU2ZmNjXHU2ZmE5''@;'; put 'put ''XHU2ZmY0XHU2ZmQ0XHU2ZmUzXHU2ZmRjXHU2ZmVkXHU2ZmU3XHU2ZmU2XHU2ZmRlXHU2ZmYyXHU2ZmRkXHU2ZmUyXHU2ZmU4XHU3MWUxXHU3MWYxXHU3MWU4XHU3MWYyXHU3MWU0XHU3MWYwXHU3MWUyXHU3MzczXHU3MzZlXHU3MzZmXHU3NDk3XHU3NGIyXHU3NGFiXHU3NDkwXHU3NGFhXHU3''@;'; put 'put ''NGFkXHU3NGIxXHU3NGE1XHU3NGFmXHU3NTEwXHU3NTExXHU3NTEyXHU3NTBmXHU3NTg0XHU3NjQzXHU3NjQ4XHU3NjQ5XHU3NjQ3XHU3NmE0XHU3NmU5XHU3N2I1XHU3N2FiXHU3N2IyXHU3N2I3XHU3N2I2Il0sWyJlZGExIiwiXHU3N2I0XHU3N2IxXHU3N2E4XHU3N2YwXHU3OGYzXHU3OGZk''@;'; put 'put ''XHU3OTAyXHU3OGZiXHU3OGZjXHU3OGYyXHU3OTA1XHU3OGY5XHU3OGZlXHU3OTA0XHU3OWFiXHU3OWE4XHU3YTVjXHU3YTViXHU3YTU2XHU3YTU4XHU3YTU0XHU3YTVhXHU3YWJlXHU3YWMwXHU3YWMxXHU3YzA1XHU3YzBmXHU3YmYyXHU3YzAwXHU3YmZmXHU3YmZiXHU3YzBlXHU3YmY0XHU3''@;'; put 'put ''YzBiXHU3YmYzXHU3YzAyXHU3YzA5XHU3YzAzXHU3YzAxXHU3YmY4XHU3YmZkXHU3YzA2XHU3YmYwXHU3YmYxXHU3YzEwXHU3YzBhXHU3Y2U4XHU3ZTJkXHU3ZTNjXHU3ZTQyXHU3ZTMzXHU5ODQ4XHU3ZTM4XHU3ZTJhXHU3ZTQ5XHU3ZTQwXHU3ZTQ3XHU3ZTI5XHU3ZTRjXHU3ZTMwXHU3ZTNi''@;'; put 'put ''XHU3ZTM2XHU3ZTQ0XHU3ZTNhXHU3ZjQ1XHU3ZjdmXHU3ZjdlXHU3ZjdkXHU3ZmY0XHU3ZmYyXHU4MDJjXHU4MWJiXHU4MWM0XHU4MWNjXHU4MWNhXHU4MWM1XHU4MWM3XHU4MWJjXHU4MWU5XHU4MjViXHU4MjVhXHU4MjVjXHU4NTgzXHU4NTgwXHU4NThmXHU4NWE3XHU4NTk1XHU4NWEwXHU4''@;'; put 'put ''NThiXHU4NWEzXHU4NTdiXHU4NWE0XHU4NTlhXHU4NTllIl0sWyJlZTQwIiwiXHU4NTc3XHU4NTdjXHU4NTg5XHU4NWExXHU4NTdhXHU4NTc4XHU4NTU3XHU4NThlXHU4NTk2XHU4NTg2XHU4NThkXHU4NTk5XHU4NTlkXHU4NTgxXHU4NWEyXHU4NTgyXHU4NTg4XHU4NTg1XHU4NTc5XHU4NTc2''@;'; put 'put ''XHU4NTk4XHU4NTkwXHU4NTlmXHU4NjY4XHU4N2JlXHU4N2FhXHU4N2FkXHU4N2M1XHU4N2IwXHU4N2FjXHU4N2I5XHU4N2I1XHU4N2JjXHU4N2FlXHU4N2M5XHU4N2MzXHU4N2MyXHU4N2NjXHU4N2I3XHU4N2FmXHU4N2M0XHU4N2NhXHU4N2I0XHU4N2I2XHU4N2JmXHU4N2I4XHU4N2JkXHU4''@;'; put 'put ''N2RlXHU4N2IyXHU4OTM1XHU4OTMzXHU4OTNjXHU4OTNlXHU4OTQxXHU4OTUyXHU4OTM3XHU4OTQyXHU4OWFkXHU4OWFmXHU4OWFlXHU4OWYyXHU4OWYzXHU4YjFlIl0sWyJlZWExIiwiXHU4YjE4XHU4YjE2XHU4YjExXHU4YjA1XHU4YjBiXHU4YjIyXHU4YjBmXHU4YjEyXHU4YjE1XHU4YjA3''@;'; put 'put ''XHU4YjBkXHU4YjA4XHU4YjA2XHU4YjFjXHU4YjEzXHU4YjFhXHU4YzRmXHU4YzcwXHU4YzcyXHU4YzcxXHU4YzZmXHU4Yzk1XHU4Yzk0XHU4Y2Y5XHU4ZDZmXHU4ZTRlXHU4ZTRkXHU4ZTUzXHU4ZTUwXHU4ZTRjXHU4ZTQ3XHU4ZjQzXHU4ZjQwXHU5MDg1XHU5MDdlXHU5MTM4XHU5MTlhXHU5''@;'; put 'put ''MWEyXHU5MTliXHU5MTk5XHU5MTlmXHU5MWExXHU5MTlkXHU5MWEwXHU5M2ExXHU5MzgzXHU5M2FmXHU5MzY0XHU5MzU2XHU5MzQ3XHU5MzdjXHU5MzU4XHU5MzVjXHU5Mzc2XHU5MzQ5XHU5MzUwXHU5MzUxXHU5MzYwXHU5MzZkXHU5MzhmXHU5MzRjXHU5MzZhXHU5Mzc5XHU5MzU3XHU5MzU1''@;'; put 'put ''XHU5MzUyXHU5MzRmXHU5MzcxXHU5Mzc3XHU5MzdiXHU5MzYxXHU5MzVlXHU5MzYzXHU5MzY3XHU5MzgwXHU5MzRlXHU5MzU5XHU5NWM3XHU5NWMwXHU5NWM5XHU5NWMzXHU5NWM1XHU5NWI3XHU5NmFlXHU5NmIwXHU5NmFjXHU5NzIwXHU5NzFmXHU5NzE4XHU5NzFkXHU5NzE5XHU5NzlhXHU5''@;'; put 'put ''N2ExXHU5NzljIl0sWyJlZjQwIiwiXHU5NzllXHU5NzlkXHU5N2Q1XHU5N2Q0XHU5N2YxXHU5ODQxXHU5ODQ0XHU5ODRhXHU5ODQ5XHU5ODQ1XHU5ODQzXHU5OTI1XHU5OTJiXHU5OTJjXHU5OTJhXHU5OTMzXHU5OTMyXHU5OTJmXHU5OTJkXHU5OTMxXHU5OTMwXHU5OTk4XHU5OWEzXHU5OWEx''@;'; put 'put ''XHU5YTAyXHU5OWZhXHU5OWY0XHU5OWY3XHU5OWY5XHU5OWY4XHU5OWY2XHU5OWZiXHU5OWZkXHU5OWZlXHU5OWZjXHU5YTAzXHU5YWJlXHU5YWZlXHU5YWZkXHU5YjAxXHU5YWZjXHU5YjQ4XHU5YjlhXHU5YmE4XHU5YjllXHU5YjliXHU5YmE2XHU5YmExXHU5YmE1XHU5YmE0XHU5Yjg2XHU5''@;'; put 'put ''YmEyXHU5YmEwXHU5YmFmXHU5ZDMzXHU5ZDQxXHU5ZDY3XHU5ZDM2XHU5ZDJlXHU5ZDJmXHU5ZDMxXHU5ZDM4XHU5ZDMwIl0sWyJlZmExIiwiXHU5ZDQ1XHU5ZDQyXHU5ZDQzXHU5ZDNlXHU5ZDM3XHU5ZDQwXHU5ZDNkXHU3ZmY1XHU5ZDJkXHU5ZThhXHU5ZTg5XHU5ZThkXHU5ZWIwXHU5ZWM4''@;'; put 'put ''XHU5ZWRhXHU5ZWZiXHU5ZWZmXHU5ZjI0XHU5ZjIzXHU5ZjIyXHU5ZjU0XHU5ZmEwXHU1MTMxXHU1MTJkXHU1MTJlXHU1Njk4XHU1NjljXHU1Njk3XHU1NjlhXHU1NjlkXHU1Njk5XHU1OTcwXHU1YjNjXHU1YzY5XHU1YzZhXHU1ZGMwXHU1ZTZkXHU1ZTZlXHU2MWQ4XHU2MWRmXHU2MWVkXHU2''@;'; put 'put ''MWVlXHU2MWYxXHU2MWVhXHU2MWYwXHU2MWViXHU2MWQ2XHU2MWU5XHU2NGZmXHU2NTA0XHU2NGZkXHU2NGY4XHU2NTAxXHU2NTAzXHU2NGZjXHU2NTk0XHU2NWRiXHU2NmRhXHU2NmRiXHU2NmQ4XHU2YWM1XHU2YWI5XHU2YWJkXHU2YWUxXHU2YWM2XHU2YWJhXHU2YWI2XHU2YWI3XHU2YWM3''@;'; put 'put ''XHU2YWI0XHU2YWFkXHU2YjVlXHU2YmM5XHU2YzBiXHU3MDA3XHU3MDBjXHU3MDBkXHU3MDAxXHU3MDA1XHU3MDE0XHU3MDBlXHU2ZmZmXHU3MDAwXHU2ZmZiXHU3MDI2XHU2ZmZjXHU2ZmY3XHU3MDBhXHU3MjAxXHU3MWZmXHU3MWY5XHU3MjAzXHU3MWZkXHU3Mzc2Il0sWyJmMDQwIiwiXHU3''@;'; put 'put ''NGI4XHU3NGMwXHU3NGI1XHU3NGMxXHU3NGJlXHU3NGI2XHU3NGJiXHU3NGMyXHU3NTE0XHU3NTEzXHU3NjVjXHU3NjY0XHU3NjU5XHU3NjUwXHU3NjUzXHU3NjU3XHU3NjVhXHU3NmE2XHU3NmJkXHU3NmVjXHU3N2MyXHU3N2JhXHU3OGZmXHU3OTBjXHU3OTEzXHU3OTE0XHU3OTA5XHU3OTEw''@;'; put 'put ''XHU3OTEyXHU3OTExXHU3OWFkXHU3OWFjXHU3YTVmXHU3YzFjXHU3YzI5XHU3YzE5XHU3YzIwXHU3YzFmXHU3YzJkXHU3YzFkXHU3YzI2XHU3YzI4XHU3YzIyXHU3YzI1XHU3YzMwXHU3ZTVjXHU3ZTUwXHU3ZTU2XHU3ZTYzXHU3ZTU4XHU3ZTYyXHU3ZTVmXHU3ZTUxXHU3ZTYwXHU3ZTU3XHU3''@;'; put 'put ''ZTUzXHU3ZmI1XHU3ZmIzXHU3ZmY3XHU3ZmY4XHU4MDc1XHU4MWQxXHU4MWQyIl0sWyJmMGExIiwiXHU4MWQwXHU4MjVmXHU4MjVlXHU4NWI0XHU4NWM2XHU4NWMwXHU4NWMzXHU4NWMyXHU4NWIzXHU4NWI1XHU4NWJkXHU4NWM3XHU4NWM0XHU4NWJmXHU4NWNiXHU4NWNlXHU4NWM4XHU4NWM1''@;'; put 'put ''XHU4NWIxXHU4NWI2XHU4NWQyXHU4NjI0XHU4NWI4XHU4NWI3XHU4NWJlXHU4NjY5XHU4N2U3XHU4N2U2XHU4N2UyXHU4N2RiXHU4N2ViXHU4N2VhXHU4N2U1XHU4N2RmXHU4N2YzXHU4N2U0XHU4N2Q0XHU4N2RjXHU4N2QzXHU4N2VkXHU4N2Q4XHU4N2UzXHU4N2E0XHU4N2Q3XHU4N2Q5XHU4''@;'; put 'put ''ODAxXHU4N2Y0XHU4N2U4XHU4N2RkXHU4OTUzXHU4OTRiXHU4OTRmXHU4OTRjXHU4OTQ2XHU4OTUwXHU4OTUxXHU4OTQ5XHU4YjJhXHU4YjI3XHU4YjIzXHU4YjMzXHU4YjMwXHU4YjM1XHU4YjQ3XHU4YjJmXHU4YjNjXHU4YjNlXHU4YjMxXHU4YjI1XHU4YjM3XHU4YjI2XHU4YjM2XHU4YjJl''@;'; put 'put ''XHU4YjI0XHU4YjNiXHU4YjNkXHU4YjNhXHU4YzQyXHU4Yzc1XHU4Yzk5XHU4Yzk4XHU4Yzk3XHU4Y2ZlXHU4ZDA0XHU4ZDAyXHU4ZDAwXHU4ZTVjXHU4ZTYyXHU4ZTYwXHU4ZTU3XHU4ZTU2XHU4ZTVlXHU4ZTY1XHU4ZTY3Il0sWyJmMTQwIiwiXHU4ZTViXHU4ZTVhXHU4ZTYxXHU4ZTVkXHU4''@;'; put 'put ''ZTY5XHU4ZTU0XHU4ZjQ2XHU4ZjQ3XHU4ZjQ4XHU4ZjRiXHU5MTI4XHU5MTNhXHU5MTNiXHU5MTNlXHU5MWE4XHU5MWE1XHU5MWE3XHU5MWFmXHU5MWFhXHU5M2I1XHU5MzhjXHU5MzkyXHU5M2I3XHU5MzliXHU5MzlkXHU5Mzg5XHU5M2E3XHU5MzhlXHU5M2FhXHU5MzllXHU5M2E2XHU5Mzk1''@;'; put 'put ''XHU5Mzg4XHU5Mzk5XHU5MzlmXHU5MzhkXHU5M2IxXHU5MzkxXHU5M2IyXHU5M2E0XHU5M2E4XHU5M2I0XHU5M2EzXHU5M2E1XHU5NWQyXHU5NWQzXHU5NWQxXHU5NmIzXHU5NmQ3XHU5NmRhXHU1ZGMyXHU5NmRmXHU5NmQ4XHU5NmRkXHU5NzIzXHU5NzIyXHU5NzI1XHU5N2FjXHU5N2FlXHU5''@;'; put 'put ''N2E4XHU5N2FiXHU5N2E0XHU5N2FhIl0sWyJmMWExIiwiXHU5N2EyXHU5N2E1XHU5N2Q3XHU5N2Q5XHU5N2Q2XHU5N2Q4XHU5N2ZhXHU5ODUwXHU5ODUxXHU5ODUyXHU5OGI4XHU5OTQxXHU5OTNjXHU5OTNhXHU5YTBmXHU5YTBiXHU5YTA5XHU5YTBkXHU5YTA0XHU5YTExXHU5YTBhXHU5YTA1''@;'; put 'put ''XHU5YTA3XHU5YTA2XHU5YWMwXHU5YWRjXHU5YjA4XHU5YjA0XHU5YjA1XHU5YjI5XHU5YjM1XHU5YjRhXHU5YjRjXHU5YjRiXHU5YmM3XHU5YmM2XHU5YmMzXHU5YmJmXHU5YmMxXHU5YmI1XHU5YmI4XHU5YmQzXHU5YmI2XHU5YmM0XHU5YmI5XHU5YmJkXHU5ZDVjXHU5ZDUzXHU5ZDRmXHU5''@;'; put 'put ''ZDRhXHU5ZDViXHU5ZDRiXHU5ZDU5XHU5ZDU2XHU5ZDRjXHU5ZDU3XHU5ZDUyXHU5ZDU0XHU5ZDVmXHU5ZDU4XHU5ZDVhXHU5ZThlXHU5ZThjXHU5ZWRmXHU5ZjAxXHU5ZjAwXHU5ZjE2XHU5ZjI1XHU5ZjJiXHU5ZjJhXHU5ZjI5XHU5ZjI4XHU5ZjRjXHU5ZjU1XHU1MTM0XHU1MTM1XHU1Mjk2''@;'; put 'put ''XHU1MmY3XHU1M2I0XHU1NmFiXHU1NmFkXHU1NmE2XHU1NmE3XHU1NmFhXHU1NmFjXHU1OGRhXHU1OGRkXHU1OGRiXHU1OTEyXHU1YjNkXHU1YjNlXHU1YjNmXHU1ZGMzXHU1ZTcwIl0sWyJmMjQwIiwiXHU1ZmJmXHU2MWZiXHU2NTA3XHU2NTEwXHU2NTBkXHU2NTA5XHU2NTBjXHU2NTBlXHU2''@;'; put 'put ''NTg0XHU2NWRlXHU2NWRkXHU2NmRlXHU2YWU3XHU2YWUwXHU2YWNjXHU2YWQxXHU2YWQ5XHU2YWNiXHU2YWRmXHU2YWRjXHU2YWQwXHU2YWViXHU2YWNmXHU2YWNkXHU2YWRlXHU2YjYwXHU2YmIwXHU2YzBjXHU3MDE5XHU3MDI3XHU3MDIwXHU3MDE2XHU3MDJiXHU3MDIxXHU3MDIyXHU3MDIz''@;'; put 'put ''XHU3MDI5XHU3MDE3XHU3MDI0XHU3MDFjXHU3MDJhXHU3MjBjXHU3MjBhXHU3MjA3XHU3MjAyXHU3MjA1XHU3MmE1XHU3MmE2XHU3MmE0XHU3MmEzXHU3MmExXHU3NGNiXHU3NGM1XHU3NGI3XHU3NGMzXHU3NTE2XHU3NjYwXHU3N2M5XHU3N2NhXHU3N2M0XHU3N2YxXHU3OTFkXHU3OTFiIl0s''@;'; put 'put ''WyJmMmExIiwiXHU3OTIxXHU3OTFjXHU3OTE3XHU3OTFlXHU3OWIwXHU3YTY3XHU3YTY4XHU3YzMzXHU3YzNjXHU3YzM5XHU3YzJjXHU3YzNiXHU3Y2VjXHU3Y2VhXHU3ZTc2XHU3ZTc1XHU3ZTc4XHU3ZTcwXHU3ZTc3XHU3ZTZmXHU3ZTdhXHU3ZTcyXHU3ZTc0XHU3ZTY4XHU3ZjRiXHU3ZjRh''@;'; put 'put ''XHU3ZjgzXHU3Zjg2XHU3ZmI3XHU3ZmZkXHU3ZmZlXHU4MDc4XHU4MWQ3XHU4MWQ1XHU4MjY0XHU4MjYxXHU4MjYzXHU4NWViXHU4NWYxXHU4NWVkXHU4NWQ5XHU4NWUxXHU4NWU4XHU4NWRhXHU4NWQ3XHU4NWVjXHU4NWYyXHU4NWY4XHU4NWQ4XHU4NWRmXHU4NWUzXHU4NWRjXHU4NWQxXHU4''@;'; put 'put ''NWYwXHU4NWU2XHU4NWVmXHU4NWRlXHU4NWUyXHU4ODAwXHU4N2ZhXHU4ODAzXHU4N2Y2XHU4N2Y3XHU4ODA5XHU4ODBjXHU4ODBiXHU4ODA2XHU4N2ZjXHU4ODA4XHU4N2ZmXHU4ODBhXHU4ODAyXHU4OTYyXHU4OTVhXHU4OTViXHU4OTU3XHU4OTYxXHU4OTVjXHU4OTU4XHU4OTVkXHU4OTU5''@;'; put 'put ''XHU4OTg4XHU4OWI3XHU4OWI2XHU4OWY2XHU4YjUwXHU4YjQ4XHU4YjRhXHU4YjQwXHU4YjUzXHU4YjU2XHU4YjU0XHU4YjRiXHU4YjU1Il0sWyJmMzQwIiwiXHU4YjUxXHU4YjQyXHU4YjUyXHU4YjU3XHU4YzQzXHU4Yzc3XHU4Yzc2XHU4YzlhXHU4ZDA2XHU4ZDA3XHU4ZDA5XHU4ZGFjXHU4''@;'; put 'put ''ZGFhXHU4ZGFkXHU4ZGFiXHU4ZTZkXHU4ZTc4XHU4ZTczXHU4ZTZhXHU4ZTZmXHU4ZTdiXHU4ZWMyXHU4ZjUyXHU4ZjUxXHU4ZjRmXHU4ZjUwXHU4ZjUzXHU4ZmI0XHU5MTQwXHU5MTNmXHU5MWIwXHU5MWFkXHU5M2RlXHU5M2M3XHU5M2NmXHU5M2MyXHU5M2RhXHU5M2QwXHU5M2Y5XHU5M2Vj''@;'; put 'put ''XHU5M2NjXHU5M2Q5XHU5M2E5XHU5M2U2XHU5M2NhXHU5M2Q0XHU5M2VlXHU5M2UzXHU5M2Q1XHU5M2M0XHU5M2NlXHU5M2MwXHU5M2QyXHU5M2U3XHU5NTdkXHU5NWRhXHU5NWRiXHU5NmUxXHU5NzI5XHU5NzJiXHU5NzJjXHU5NzI4XHU5NzI2Il0sWyJmM2ExIiwiXHU5N2IzXHU5N2I3XHU5''@;'; put 'put ''N2I2XHU5N2RkXHU5N2RlXHU5N2RmXHU5ODVjXHU5ODU5XHU5ODVkXHU5ODU3XHU5OGJmXHU5OGJkXHU5OGJiXHU5OGJlXHU5OTQ4XHU5OTQ3XHU5OTQzXHU5OWE2XHU5OWE3XHU5YTFhXHU5YTE1XHU5YTI1XHU5YTFkXHU5YTI0XHU5YTFiXHU5YTIyXHU5YTIwXHU5YTI3XHU5YTIzXHU5YTFl''@;'; put 'put ''XHU5YTFjXHU5YTE0XHU5YWMyXHU5YjBiXHU5YjBhXHU5YjBlXHU5YjBjXHU5YjM3XHU5YmVhXHU5YmViXHU5YmUwXHU5YmRlXHU5YmU0XHU5YmU2XHU5YmUyXHU5YmYwXHU5YmQ0XHU5YmQ3XHU5YmVjXHU5YmRjXHU5YmQ5XHU5YmU1XHU5YmQ1XHU5YmUxXHU5YmRhXHU5ZDc3XHU5ZDgxXHU5''@;'; put 'put ''ZDhhXHU5ZDg0XHU5ZDg4XHU5ZDcxXHU5ZDgwXHU5ZDc4XHU5ZDg2XHU5ZDhiXHU5ZDhjXHU5ZDdkXHU5ZDZiXHU5ZDc0XHU5ZDc1XHU5ZDcwXHU5ZDY5XHU5ZDg1XHU5ZDczXHU5ZDdiXHU5ZDgyXHU5ZDZmXHU5ZDc5XHU5ZDdmXHU5ZDg3XHU5ZDY4XHU5ZTk0XHU5ZTkxXHU5ZWMwXHU5ZWZj''@;'; put 'put ''XHU5ZjJkXHU5ZjQwXHU5ZjQxXHU5ZjRkXHU5ZjU2XHU5ZjU3XHU5ZjU4XHU1MzM3XHU1NmIyIl0sWyJmNDQwIiwiXHU1NmI1XHU1NmIzXHU1OGUzXHU1YjQ1XHU1ZGM2XHU1ZGM3XHU1ZWVlXHU1ZWVmXHU1ZmMwXHU1ZmMxXHU2MWY5XHU2NTE3XHU2NTE2XHU2NTE1XHU2NTEzXHU2NWRmXHU2''@;'; put 'put ''NmU4XHU2NmUzXHU2NmU0XHU2YWYzXHU2YWYwXHU2YWVhXHU2YWU4XHU2YWY5XHU2YWYxXHU2YWVlXHU2YWVmXHU3MDNjXHU3MDM1XHU3MDJmXHU3MDM3XHU3MDM0XHU3MDMxXHU3MDQyXHU3MDM4XHU3MDNmXHU3MDNhXHU3MDM5XHU3MDQwXHU3MDNiXHU3MDMzXHU3MDQxXHU3MjEzXHU3MjE0''@;'; put 'put ''XHU3MmE4XHU3MzdkXHU3MzdjXHU3NGJhXHU3NmFiXHU3NmFhXHU3NmJlXHU3NmVkXHU3N2NjXHU3N2NlXHU3N2NmXHU3N2NkXHU3N2YyXHU3OTI1XHU3OTIzXHU3OTI3XHU3OTI4XHU3OTI0XHU3OTI5Il0sWyJmNGExIiwiXHU3OWIyXHU3YTZlXHU3YTZjXHU3YTZkXHU3YWY3XHU3YzQ5XHU3''@;'; put 'put ''YzQ4XHU3YzRhXHU3YzQ3XHU3YzQ1XHU3Y2VlXHU3ZTdiXHU3ZTdlXHU3ZTgxXHU3ZTgwXHU3ZmJhXHU3ZmZmXHU4MDc5XHU4MWRiXHU4MWQ5XHU4MjBiXHU4MjY4XHU4MjY5XHU4NjIyXHU4NWZmXHU4NjAxXHU4NWZlXHU4NjFiXHU4NjAwXHU4NWY2XHU4NjA0XHU4NjA5XHU4NjA1XHU4NjBj''@;'; put 'put ''XHU4NWZkXHU4ODE5XHU4ODEwXHU4ODExXHU4ODE3XHU4ODEzXHU4ODE2XHU4OTYzXHU4OTY2XHU4OWI5XHU4OWY3XHU4YjYwXHU4YjZhXHU4YjVkXHU4YjY4XHU4YjYzXHU4YjY1XHU4YjY3XHU4YjZkXHU4ZGFlXHU4ZTg2XHU4ZTg4XHU4ZTg0XHU4ZjU5XHU4ZjU2XHU4ZjU3XHU4ZjU1XHU4''@;'; put 'put ''ZjU4XHU4ZjVhXHU5MDhkXHU5MTQzXHU5MTQxXHU5MWI3XHU5MWI1XHU5MWIyXHU5MWIzXHU5NDBiXHU5NDEzXHU5M2ZiXHU5NDIwXHU5NDBmXHU5NDE0XHU5M2ZlXHU5NDE1XHU5NDEwXHU5NDI4XHU5NDE5XHU5NDBkXHU5M2Y1XHU5NDAwXHU5M2Y3XHU5NDA3XHU5NDBlXHU5NDE2XHU5NDEy''@;'; put 'put ''XHU5M2ZhXHU5NDA5XHU5M2Y4XHU5NDBhXHU5M2ZmIl0sWyJmNTQwIiwiXHU5M2ZjXHU5NDBjXHU5M2Y2XHU5NDExXHU5NDA2XHU5NWRlXHU5NWUwXHU5NWRmXHU5NzJlXHU5NzJmXHU5N2I5XHU5N2JiXHU5N2ZkXHU5N2ZlXHU5ODYwXHU5ODYyXHU5ODYzXHU5ODVmXHU5OGMxXHU5OGMyXHU5''@;'; put 'put ''OTUwXHU5OTRlXHU5OTU5XHU5OTRjXHU5OTRiXHU5OTUzXHU5YTMyXHU5YTM0XHU5YTMxXHU5YTJjXHU5YTJhXHU5YTM2XHU5YTI5XHU5YTJlXHU5YTM4XHU5YTJkXHU5YWM3XHU5YWNhXHU5YWM2XHU5YjEwXHU5YjEyXHU5YjExXHU5YzBiXHU5YzA4XHU5YmY3XHU5YzA1XHU5YzEyXHU5YmY4''@;'; put 'put ''XHU5YzQwXHU5YzA3XHU5YzBlXHU5YzA2XHU5YzE3XHU5YzE0XHU5YzA5XHU5ZDlmXHU5ZDk5XHU5ZGE0XHU5ZDlkXHU5ZDkyXHU5ZDk4XHU5ZDkwXHU5ZDliIl0sWyJmNWExIiwiXHU5ZGEwXHU5ZDk0XHU5ZDljXHU5ZGFhXHU5ZDk3XHU5ZGExXHU5ZDlhXHU5ZGEyXHU5ZGE4XHU5ZDllXHU5''@;'; put 'put ''ZGEzXHU5ZGJmXHU5ZGE5XHU5ZDk2XHU5ZGE2XHU5ZGE3XHU5ZTk5XHU5ZTliXHU5ZTlhXHU5ZWU1XHU5ZWU0XHU5ZWU3XHU5ZWU2XHU5ZjMwXHU5ZjJlXHU5ZjViXHU5ZjYwXHU5ZjVlXHU5ZjVkXHU5ZjU5XHU5ZjkxXHU1MTNhXHU1MTM5XHU1Mjk4XHU1Mjk3XHU1NmMzXHU1NmJkXHU1NmJl''@;'; put 'put ''XHU1YjQ4XHU1YjQ3XHU1ZGNiXHU1ZGNmXHU1ZWYxXHU2MWZkXHU2NTFiXHU2YjAyXHU2YWZjXHU2YjAzXHU2YWY4XHU2YjAwXHU3MDQzXHU3MDQ0XHU3MDRhXHU3MDQ4XHU3MDQ5XHU3MDQ1XHU3MDQ2XHU3MjFkXHU3MjFhXHU3MjE5XHU3MzdlXHU3NTE3XHU3NjZhXHU3N2QwXHU3OTJkXHU3''@;'; put 'put ''OTMxXHU3OTJmXHU3YzU0XHU3YzUzXHU3Y2YyXHU3ZThhXHU3ZTg3XHU3ZTg4XHU3ZThiXHU3ZTg2XHU3ZThkXHU3ZjRkXHU3ZmJiXHU4MDMwXHU4MWRkXHU4NjE4XHU4NjJhXHU4NjI2XHU4NjFmXHU4NjIzXHU4NjFjXHU4NjE5XHU4NjI3XHU4NjJlXHU4NjIxXHU4NjIwXHU4NjI5XHU4NjFl''@;'; put 'put ''XHU4NjI1Il0sWyJmNjQwIiwiXHU4ODI5XHU4ODFkXHU4ODFiXHU4ODIwXHU4ODI0XHU4ODFjXHU4ODJiXHU4ODRhXHU4OTZkXHU4OTY5XHU4OTZlXHU4OTZiXHU4OWZhXHU4Yjc5XHU4Yjc4XHU4YjQ1XHU4YjdhXHU4YjdiXHU4ZDEwXHU4ZDE0XHU4ZGFmXHU4ZThlXHU4ZThjXHU4ZjVlXHU4''@;'; put 'put ''ZjViXHU4ZjVkXHU5MTQ2XHU5MTQ0XHU5MTQ1XHU5MWI5XHU5NDNmXHU5NDNiXHU5NDM2XHU5NDI5XHU5NDNkXHU5NDNjXHU5NDMwXHU5NDM5XHU5NDJhXHU5NDM3XHU5NDJjXHU5NDQwXHU5NDMxXHU5NWU1XHU5NWU0XHU5NWUzXHU5NzM1XHU5NzNhXHU5N2JmXHU5N2UxXHU5ODY0XHU5OGM5''@;'; put 'put ''XHU5OGM2XHU5OGMwXHU5OTU4XHU5OTU2XHU5YTM5XHU5YTNkXHU5YTQ2XHU5YTQ0XHU5YTQyXHU5YTQxXHU5YTNhIl0sWyJmNmExIiwiXHU5YTNmXHU5YWNkXHU5YjE1XHU5YjE3XHU5YjE4XHU5YjE2XHU5YjNhXHU5YjUyXHU5YzJiXHU5YzFkXHU5YzFjXHU5YzJjXHU5YzIzXHU5YzI4XHU5''@;'; put 'put ''YzI5XHU5YzI0XHU5YzIxXHU5ZGI3XHU5ZGI2XHU5ZGJjXHU5ZGMxXHU5ZGM3XHU5ZGNhXHU5ZGNmXHU5ZGJlXHU5ZGM1XHU5ZGMzXHU5ZGJiXHU5ZGI1XHU5ZGNlXHU5ZGI5XHU5ZGJhXHU5ZGFjXHU5ZGM4XHU5ZGIxXHU5ZGFkXHU5ZGNjXHU5ZGIzXHU5ZGNkXHU5ZGIyXHU5ZTdhXHU5ZTlj''@;'; put 'put ''XHU5ZWViXHU5ZWVlXHU5ZWVkXHU5ZjFiXHU5ZjE4XHU5ZjFhXHU5ZjMxXHU5ZjRlXHU5ZjY1XHU5ZjY0XHU5ZjkyXHU0ZWI5XHU1NmM2XHU1NmM1XHU1NmNiXHU1OTcxXHU1YjRiXHU1YjRjXHU1ZGQ1XHU1ZGQxXHU1ZWYyXHU2NTIxXHU2NTIwXHU2NTI2XHU2NTIyXHU2YjBiXHU2YjA4XHU2''@;'; put 'put ''YjA5XHU2YzBkXHU3MDU1XHU3MDU2XHU3MDU3XHU3MDUyXHU3MjFlXHU3MjFmXHU3MmE5XHU3MzdmXHU3NGQ4XHU3NGQ1XHU3NGQ5XHU3NGQ3XHU3NjZkXHU3NmFkXHU3OTM1XHU3OWI0XHU3YTcwXHU3YTcxXHU3YzU3XHU3YzVjXHU3YzU5XHU3YzViXHU3YzVhIl0sWyJmNzQwIiwiXHU3Y2Y0''@;'; put 'put ''XHU3Y2YxXHU3ZTkxXHU3ZjRmXHU3Zjg3XHU4MWRlXHU4MjZiXHU4NjM0XHU4NjM1XHU4NjMzXHU4NjJjXHU4NjMyXHU4NjM2XHU4ODJjXHU4ODI4XHU4ODI2XHU4ODJhXHU4ODI1XHU4OTcxXHU4OWJmXHU4OWJlXHU4OWZiXHU4YjdlXHU4Yjg0XHU4YjgyXHU4Yjg2XHU4Yjg1XHU4YjdmXHU4''@;'; put 'put ''ZDE1XHU4ZTk1XHU4ZTk0XHU4ZTlhXHU4ZTkyXHU4ZTkwXHU4ZTk2XHU4ZTk3XHU4ZjYwXHU4ZjYyXHU5MTQ3XHU5NDRjXHU5NDUwXHU5NDRhXHU5NDRiXHU5NDRmXHU5NDQ3XHU5NDQ1XHU5NDQ4XHU5NDQ5XHU5NDQ2XHU5NzNmXHU5N2UzXHU5ODZhXHU5ODY5XHU5OGNiXHU5OTU0XHU5OTVi''@;'; put 'put ''XHU5YTRlXHU5YTUzXHU5YTU0XHU5YTRjXHU5YTRmXHU5YTQ4XHU5YTRhIl0sWyJmN2ExIiwiXHU5YTQ5XHU5YTUyXHU5YTUwXHU5YWQwXHU5YjE5XHU5YjJiXHU5YjNiXHU5YjU2XHU5YjU1XHU5YzQ2XHU5YzQ4XHU5YzNmXHU5YzQ0XHU5YzM5XHU5YzMzXHU5YzQxXHU5YzNjXHU5YzM3XHU5''@;'; put 'put ''YzM0XHU5YzMyXHU5YzNkXHU5YzM2XHU5ZGRiXHU5ZGQyXHU5ZGRlXHU5ZGRhXHU5ZGNiXHU5ZGQwXHU5ZGRjXHU5ZGQxXHU5ZGRmXHU5ZGU5XHU5ZGQ5XHU5ZGQ4XHU5ZGQ2XHU5ZGY1XHU5ZGQ1XHU5ZGRkXHU5ZWI2XHU5ZWYwXHU5ZjM1XHU5ZjMzXHU5ZjMyXHU5ZjQyXHU5ZjZiXHU5Zjk1''@;'; put 'put ''XHU5ZmEyXHU1MTNkXHU1Mjk5XHU1OGU4XHU1OGU3XHU1OTcyXHU1YjRkXHU1ZGQ4XHU4ODJmXHU1ZjRmXHU2MjAxXHU2MjAzXHU2MjA0XHU2NTI5XHU2NTI1XHU2NTk2XHU2NmViXHU2YjExXHU2YjEyXHU2YjBmXHU2YmNhXHU3MDViXHU3MDVhXHU3MjIyXHU3MzgyXHU3MzgxXHU3MzgzXHU3''@;'; put 'put ''NjcwXHU3N2Q0XHU3YzY3XHU3YzY2XHU3ZTk1XHU4MjZjXHU4NjNhXHU4NjQwXHU4NjM5XHU4NjNjXHU4NjMxXHU4NjNiXHU4NjNlXHU4ODMwXHU4ODMyXHU4ODJlXHU4ODMzXHU4OTc2XHU4OTc0XHU4OTczXHU4OWZlIl0sWyJmODQwIiwiXHU4YjhjXHU4YjhlXHU4YjhiXHU4Yjg4XHU4YzQ1''@;'; put 'put ''XHU4ZDE5XHU4ZTk4XHU4ZjY0XHU4ZjYzXHU5MWJjXHU5NDYyXHU5NDU1XHU5NDVkXHU5NDU3XHU5NDVlXHU5N2M0XHU5N2M1XHU5ODAwXHU5YTU2XHU5YTU5XHU5YjFlXHU5YjFmXHU5YjIwXHU5YzUyXHU5YzU4XHU5YzUwXHU5YzRhXHU5YzRkXHU5YzRiXHU5YzU1XHU5YzU5XHU5YzRjXHU5''@;'; put 'put ''YzRlXHU5ZGZiXHU5ZGY3XHU5ZGVmXHU5ZGUzXHU5ZGViXHU5ZGY4XHU5ZGU0XHU5ZGY2XHU5ZGUxXHU5ZGVlXHU5ZGU2XHU5ZGYyXHU5ZGYwXHU5ZGUyXHU5ZGVjXHU5ZGY0XHU5ZGYzXHU5ZGU4XHU5ZGVkXHU5ZWMyXHU5ZWQwXHU5ZWYyXHU5ZWYzXHU5ZjA2XHU5ZjFjXHU5ZjM4XHU5ZjM3''@;'; put 'put ''XHU5ZjM2XHU5ZjQzXHU5ZjRmIl0sWyJmOGExIiwiXHU5ZjcxXHU5ZjcwXHU5ZjZlXHU5ZjZmXHU1NmQzXHU1NmNkXHU1YjRlXHU1YzZkXHU2NTJkXHU2NmVkXHU2NmVlXHU2YjEzXHU3MDVmXHU3MDYxXHU3MDVkXHU3MDYwXHU3MjIzXHU3NGRiXHU3NGU1XHU3N2Q1XHU3OTM4XHU3OWI3XHU3''@;'; put 'put ''OWI2XHU3YzZhXHU3ZTk3XHU3Zjg5XHU4MjZkXHU4NjQzXHU4ODM4XHU4ODM3XHU4ODM1XHU4ODRiXHU4Yjk0XHU4Yjk1XHU4ZTllXHU4ZTlmXHU4ZWEwXHU4ZTlkXHU5MWJlXHU5MWJkXHU5MWMyXHU5NDZiXHU5NDY4XHU5NDY5XHU5NmU1XHU5NzQ2XHU5NzQzXHU5NzQ3XHU5N2M3XHU5N2U1''@;'; put 'put ''XHU5YTVlXHU5YWQ1XHU5YjU5XHU5YzYzXHU5YzY3XHU5YzY2XHU5YzYyXHU5YzVlXHU5YzYwXHU5ZTAyXHU5ZGZlXHU5ZTA3XHU5ZTAzXHU5ZTA2XHU5ZTA1XHU5ZTAwXHU5ZTAxXHU5ZTA5XHU5ZGZmXHU5ZGZkXHU5ZTA0XHU5ZWEwXHU5ZjFlXHU5ZjQ2XHU5Zjc0XHU5Zjc1XHU5Zjc2XHU1''@;'; put 'put ''NmQ0XHU2NTJlXHU2NWI4XHU2YjE4XHU2YjE5XHU2YjE3XHU2YjFhXHU3MDYyXHU3MjI2XHU3MmFhXHU3N2Q4XHU3N2Q5XHU3OTM5XHU3YzY5XHU3YzZiXHU3Y2Y2XHU3ZTlhIl0sWyJmOTQwIiwiXHU3ZTk4XHU3ZTliXHU3ZTk5XHU4MWUwXHU4MWUxXHU4NjQ2XHU4NjQ3XHU4NjQ4XHU4OTc5''@;'; put 'put ''XHU4OTdhXHU4OTdjXHU4OTdiXHU4OWZmXHU4Yjk4XHU4Yjk5XHU4ZWE1XHU4ZWE0XHU4ZWEzXHU5NDZlXHU5NDZkXHU5NDZmXHU5NDcxXHU5NDczXHU5NzQ5XHU5ODcyXHU5OTVmXHU5YzY4XHU5YzZlXHU5YzZkXHU5ZTBiXHU5ZTBkXHU5ZTEwXHU5ZTBmXHU5ZTEyXHU5ZTExXHU5ZWExXHU5''@;'; put 'put ''ZWY1XHU5ZjA5XHU5ZjQ3XHU5Zjc4XHU5ZjdiXHU5ZjdhXHU5Zjc5XHU1NzFlXHU3MDY2XHU3YzZmXHU4ODNjXHU4ZGIyXHU4ZWE2XHU5MWMzXHU5NDc0XHU5NDc4XHU5NDc2XHU5NDc1XHU5YTYwXHU5Yzc0XHU5YzczXHU5YzcxXHU5Yzc1XHU5ZTE0XHU5ZTEzXHU5ZWY2XHU5ZjBhIl0sWyJm''@;'; put 'put ''OWExIiwiXHU5ZmE0XHU3MDY4XHU3MDY1XHU3Y2Y3XHU4NjZhXHU4ODNlXHU4ODNkXHU4ODNmXHU4YjllXHU4YzljXHU4ZWE5XHU4ZWM5XHU5NzRiXHU5ODczXHU5ODc0XHU5OGNjXHU5OTYxXHU5OWFiXHU5YTY0XHU5YTY2XHU5YTY3XHU5YjI0XHU5ZTE1XHU5ZTE3XHU5ZjQ4XHU2MjA3XHU2''@;'; put 'put ''YjFlXHU3MjI3XHU4NjRjXHU4ZWE4XHU5NDgyXHU5NDgwXHU5NDgxXHU5YTY5XHU5YTY4XHU5YjJlXHU5ZTE5XHU3MjI5XHU4NjRiXHU4YjlmXHU5NDgzXHU5Yzc5XHU5ZWI3XHU3Njc1XHU5YTZiXHU5YzdhXHU5ZTFkXHU3MDY5XHU3MDZhXHU5ZWE0XHU5ZjdlXHU5ZjQ5XHU5Zjk4XHU3ODgx''@;'; put 'put ''XHU5MmI5XHU4OGNmXHU1OGJiXHU2MDUyXHU3Y2E3XHU1YWZhXHUyNTU0XHUyNTY2XHUyNTU3XHUyNTYwXHUyNTZjXHUyNTYzXHUyNTVhXHUyNTY5XHUyNTVkXHUyNTUyXHUyNTY0XHUyNTU1XHUyNTVlXHUyNTZhXHUyNTYxXHUyNTU4XHUyNTY3XHUyNTViXHUyNTUzXHUyNTY1XHUyNTU2XHUy''@;'; put 'put ''NTVmXHUyNTZiXHUyNTYyXHUyNTU5XHUyNTY4XHUyNTVjXHUyNTUxXHUyNTUwXHUyNTZkXHUyNTZlXHUyNTcwXHUyNTZmXHUyNTkzIl1dJyl9LDU2NDA2KGZlKXsidXNlIHN0cmljdCI7ZmUuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyIwIiwiXFx1MDAwMCIsMTI3XSxbIjhlYTEiLCJcdWZmNjEi''@;'; put 'put ''LDYyXSxbImExYTEiLCJcdTMwMDBcdTMwMDFcdTMwMDJcdWZmMGNcdWZmMGVcdTMwZmJcdWZmMWFcdWZmMWJcdWZmMWZcdWZmMDFcdTMwOWJcdTMwOWNceGI0XHVmZjQwXHhhOFx1ZmYzZVx1ZmZlM1x1ZmYzZlx1MzBmZFx1MzBmZVx1MzA5ZFx1MzA5ZVx1MzAwM1x1NGVkZFx1MzAwNVx1MzAw''@;'; put 'put ''Nlx1MzAwN1x1MzBmY1x1MjAxNVx1MjAxMFx1ZmYwZlx1ZmYzY1x1ZmY1ZVx1MjIyNVx1ZmY1Y1x1MjAyNlx1MjAyNVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1ZmYwOFx1ZmYwOVx1MzAxNFx1MzAxNVx1ZmYzYlx1ZmYzZFx1ZmY1Ylx1ZmY1ZFx1MzAwOCIsOSwiXHVmZjBiXHVmZjBkXHhi''@;'; put 'put ''MVx4ZDdceGY3XHVmZjFkXHUyMjYwXHVmZjFjXHVmZjFlXHUyMjY2XHUyMjY3XHUyMjFlXHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmZlNVx1ZmYwNFx1ZmZlMFx1ZmZlMVx1ZmYwNVx1ZmYwM1x1ZmYwNlx1ZmYwYVx1ZmYyMFx4YTdcdTI2MDZcdTI2MDVcdTI1''@;'; put 'put ''Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzciXSxbImEyYTEiLCJcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTI1YmRcdTI1YmNcdTIwM2JcdTMwMTJcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTMiXSxbImEyYmEiLCJcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIyODJcdTIyODNc''@;'; put 'put ''dTIyMmFcdTIyMjkiXSxbImEyY2EiLCJcdTIyMjdcdTIyMjhcdWZmZTJcdTIxZDJcdTIxZDRcdTIyMDBcdTIyMDMiXSxbImEyZGMiLCJcdTIyMjBcdTIyYTVcdTIzMTJcdTIyMDJcdTIyMDdcdTIyNjFcdTIyNTJcdTIyNmFcdTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVcdTIyMmJcdTIy''@;'; put 'put ''MmMiXSxbImEyZjIiLCJcdTIxMmJcdTIwMzBcdTI2NmZcdTI2NmRcdTI2NmFcdTIwMjBcdTIwMjFceGI2Il0sWyJhMmZlIiwiXHUyNWVmIl0sWyJhM2IwIiwiXHVmZjEwIiw5XSxbImEzYzEiLCJcdWZmMjEiLDI1XSxbImEzZTEiLCJcdWZmNDEiLDI1XSxbImE0YTEiLCJcdTMwNDEiLDgyXSxb''@;'; put 'put ''ImE1YTEiLCJcdTMwYTEiLDg1XSxbImE2YTEiLCJcdTAzOTEiLDE2LCJcdTAzYTMiLDZdLFsiYTZjMSIsIlx1MDNiMSIsMTYsIlx1MDNjMyIsNl0sWyJhN2ExIiwiXHUwNDEwIiw1LCJcdTA0MDFcdTA0MTYiLDI1XSxbImE3ZDEiLCJcdTA0MzAiLDUsIlx1MDQ1MVx1MDQzNiIsMjVdLFsiYThh''@;'; put 'put ''MSIsIlx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUyY1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUwMVx1MjUwM1x1MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1MjUyM1x1MjUzM1x1MjUyYlx1MjUzYlx1MjU0Ylx1MjUyMFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUz''@;'; put 'put ''Zlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0MiJdLFsiYWRhMSIsIlx1MjQ2MCIsMTksIlx1MjE2MCIsOV0sWyJhZGMwIiwiXHUzMzQ5XHUzMzE0XHUzMzIyXHUzMzRkXHUzMzE4XHUzMzI3XHUzMzAzXHUzMzM2XHUzMzUxXHUzMzU3XHUzMzBkXHUzMzI2XHUzMzIzXHUzMzJiXHUzMzRh''@;'; put 'put ''XHUzMzNiXHUzMzljXHUzMzlkXHUzMzllXHUzMzhlXHUzMzhmXHUzM2M0XHUzM2ExIl0sWyJhZGRmIiwiXHUzMzdiXHUzMDFkXHUzMDFmXHUyMTE2XHUzM2NkXHUyMTIxXHUzMmE0Iiw0LCJcdTMyMzFcdTMyMzJcdTMyMzlcdTMzN2VcdTMzN2RcdTMzN2NcdTIyNTJcdTIyNjFcdTIyMmJcdTIy''@;'; put 'put ''MmVcdTIyMTFcdTIyMWFcdTIyYTVcdTIyMjBcdTIyMWZcdTIyYmZcdTIyMzVcdTIyMjlcdTIyMmEiXSxbImIwYTEiLCJcdTRlOWNcdTU1MTZcdTVhMDNcdTk2M2ZcdTU0YzBcdTYxMWJcdTYzMjhcdTU5ZjZcdTkwMjJcdTg0NzVcdTgzMWNcdTdhNTBcdTYwYWFcdTYzZTFcdTZlMjVcdTY1ZWRc''@;'; put 'put ''dTg0NjZcdTgyYTZcdTliZjVcdTY4OTNcdTU3MjdcdTY1YTFcdTYyNzFcdTViOWJcdTU5ZDBcdTg2N2JcdTk4ZjRcdTdkNjJcdTdkYmVcdTliOGVcdTYyMTZcdTdjOWZcdTg4YjdcdTViODlcdTVlYjVcdTYzMDlcdTY2OTdcdTY4NDhcdTk1YzdcdTk3OGRcdTY3NGZcdTRlZTVcdTRmMGFcdTRm''@;'; put 'put ''NGRcdTRmOWRcdTUwNDlcdTU2ZjJcdTU5MzdcdTU5ZDRcdTVhMDFcdTVjMDlcdTYwZGZcdTYxMGZcdTYxNzBcdTY2MTNcdTY5MDVcdTcwYmFcdTc1NGZcdTc1NzBcdTc5ZmJcdTdkYWRcdTdkZWZcdTgwYzNcdTg0MGVcdTg4NjNcdThiMDJcdTkwNTVcdTkwN2FcdTUzM2JcdTRlOTVcdTRlYTVc''@;'; put 'put ''dTU3ZGZcdTgwYjJcdTkwYzFcdTc4ZWZcdTRlMDBcdTU4ZjFcdTZlYTJcdTkwMzhcdTdhMzJcdTgzMjhcdTgyOGJcdTljMmZcdTUxNDFcdTUzNzBcdTU0YmRcdTU0ZTFcdTU2ZTBcdTU5ZmJcdTVmMTVcdTk4ZjJcdTZkZWJcdTgwZTRcdTg1MmQiXSxbImIxYTEiLCJcdTk2NjJcdTk2NzBcdTk2''@;'; put 'put ''YTBcdTk3ZmJcdTU0MGJcdTUzZjNcdTViODdcdTcwY2ZcdTdmYmRcdThmYzJcdTk2ZThcdTUzNmZcdTlkNWNcdTdhYmFcdTRlMTFcdTc4OTNcdTgxZmNcdTZlMjZcdTU2MThcdTU1MDRcdTZiMWRcdTg1MWFcdTljM2JcdTU5ZTVcdTUzYTlcdTZkNjZcdTc0ZGNcdTk1OGZcdTU2NDJcdTRlOTFc''@;'; put 'put ''dTkwNGJcdTk2ZjJcdTgzNGZcdTk5MGNcdTUzZTFcdTU1YjZcdTViMzBcdTVmNzFcdTY2MjBcdTY2ZjNcdTY4MDRcdTZjMzhcdTZjZjNcdTZkMjlcdTc0NWJcdTc2YzhcdTdhNGVcdTk4MzRcdTgyZjFcdTg4NWJcdThhNjBcdTkyZWRcdTZkYjJcdTc1YWJcdTc2Y2FcdTk5YzVcdTYwYTZcdThi''@;'; put 'put ''MDFcdThkOGFcdTk1YjJcdTY5OGVcdTUzYWRcdTUxODZcdTU3MTJcdTU4MzBcdTU5NDRcdTViYjRcdTVlZjZcdTYwMjhcdTYzYTlcdTYzZjRcdTZjYmZcdTZmMTRcdTcwOGVcdTcxMTRcdTcxNTlcdTcxZDVcdTczM2ZcdTdlMDFcdTgyNzZcdTgyZDFcdTg1OTdcdTkwNjBcdTkyNWJcdTlkMWJc''@;'; put 'put ''dTU4NjlcdTY1YmNcdTZjNWFcdTc1MjVcdTUxZjlcdTU5MmVcdTU5NjVcdTVmODBcdTVmZGMiXSxbImIyYTEiLCJcdTYyYmNcdTY1ZmFcdTZhMmFcdTZiMjdcdTZiYjRcdTczOGJcdTdmYzFcdTg5NTZcdTlkMmNcdTlkMGVcdTllYzRcdTVjYTFcdTZjOTZcdTgzN2JcdTUxMDRcdTVjNGJcdTYx''@;'; put 'put ''YjZcdTgxYzZcdTY4NzZcdTcyNjFcdTRlNTlcdTRmZmFcdTUzNzhcdTYwNjlcdTZlMjlcdTdhNGZcdTk3ZjNcdTRlMGJcdTUzMTZcdTRlZWVcdTRmNTVcdTRmM2RcdTRmYTFcdTRmNzNcdTUyYTBcdTUzZWZcdTU2MDlcdTU5MGZcdTVhYzFcdTViYjZcdTViZTFcdTc5ZDFcdTY2ODdcdTY3OWNc''@;'; put 'put ''dTY3YjZcdTZiNGNcdTZjYjNcdTcwNmJcdTczYzJcdTc5OGRcdTc5YmVcdTdhM2NcdTdiODdcdTgyYjFcdTgyZGJcdTgzMDRcdTgzNzdcdTgzZWZcdTgzZDNcdTg3NjZcdThhYjJcdTU2MjlcdThjYThcdThmZTZcdTkwNGVcdTk3MWVcdTg2OGFcdTRmYzRcdTVjZThcdTYyMTFcdTcyNTlcdTc1''@;'; put 'put ''M2JcdTgxZTVcdTgyYmRcdTg2ZmVcdThjYzBcdTk2YzVcdTk5MTNcdTk5ZDVcdTRlY2JcdTRmMWFcdTg5ZTNcdTU2ZGVcdTU4NGFcdTU4Y2FcdTVlZmJcdTVmZWJcdTYwMmFcdTYwOTRcdTYwNjJcdTYxZDBcdTYyMTJcdTYyZDBcdTY1MzkiXSxbImIzYTEiLCJcdTliNDFcdTY2NjZcdTY4YjBc''@;'; put 'put ''dTZkNzdcdTcwNzBcdTc1NGNcdTc2ODZcdTdkNzVcdTgyYTVcdTg3ZjlcdTk1OGJcdTk2OGVcdThjOWRcdTUxZjFcdTUyYmVcdTU5MTZcdTU0YjNcdTViYjNcdTVkMTZcdTYxNjhcdTY5ODJcdTZkYWZcdTc4OGRcdTg0Y2JcdTg4NTdcdThhNzJcdTkzYTdcdTlhYjhcdTZkNmNcdTk5YThcdTg2''@;'; put 'put ''ZDlcdTU3YTNcdTY3ZmZcdTg2Y2VcdTkyMGVcdTUyODNcdTU2ODdcdTU0MDRcdTVlZDNcdTYyZTFcdTY0YjlcdTY4M2NcdTY4MzhcdTZiYmJcdTczNzJcdTc4YmFcdTdhNmJcdTg5OWFcdTg5ZDJcdThkNmJcdThmMDNcdTkwZWRcdTk1YTNcdTk2OTRcdTk3NjlcdTViNjZcdTVjYjNcdTY5N2Rc''@;'; put 'put ''dTk4NGRcdTk4NGVcdTYzOWJcdTdiMjBcdTZhMmJcdTZhN2ZcdTY4YjZcdTljMGRcdTZmNWZcdTUyNzJcdTU1OWRcdTYwNzBcdTYyZWNcdTZkM2JcdTZlMDdcdTZlZDFcdTg0NWJcdTg5MTBcdThmNDRcdTRlMTRcdTljMzlcdTUzZjZcdTY5MWJcdTZhM2FcdTk3ODRcdTY4MmFcdTUxNWNcdTdh''@;'; put 'put ''YzNcdTg0YjJcdTkxZGNcdTkzOGNcdTU2NWJcdTlkMjhcdTY4MjJcdTgzMDVcdTg0MzEiXSxbImI0YTEiLCJcdTdjYTVcdTUyMDhcdTgyYzVcdTc0ZTZcdTRlN2VcdTRmODNcdTUxYTBcdTViZDJcdTUyMGFcdTUyZDhcdTUyZTdcdTVkZmJcdTU1OWFcdTU4MmFcdTU5ZTZcdTViOGNcdTViOThc''@;'; put 'put ''dTViZGJcdTVlNzJcdTVlNzlcdTYwYTNcdTYxMWZcdTYxNjNcdTYxYmVcdTYzZGJcdTY1NjJcdTY3ZDFcdTY4NTNcdTY4ZmFcdTZiM2VcdTZiNTNcdTZjNTdcdTZmMjJcdTZmOTdcdTZmNDVcdTc0YjBcdTc1MThcdTc2ZTNcdTc3MGJcdTdhZmZcdTdiYTFcdTdjMjFcdTdkZTlcdTdmMzZcdTdm''@;'; put 'put ''ZjBcdTgwOWRcdTgyNjZcdTgzOWVcdTg5YjNcdThhY2NcdThjYWJcdTkwODRcdTk0NTFcdTk1OTNcdTk1OTFcdTk1YTJcdTk2NjVcdTk3ZDNcdTk5MjhcdTgyMThcdTRlMzhcdTU0MmJcdTVjYjhcdTVkY2NcdTczYTlcdTc2NGNcdTc3M2NcdTVjYTlcdTdmZWJcdThkMGJcdTk2YzFcdTk4MTFc''@;'; put 'put ''dTk4NTRcdTk4NThcdTRmMDFcdTRmMGVcdTUzNzFcdTU1OWNcdTU2NjhcdTU3ZmFcdTU5NDdcdTViMDlcdTViYzRcdTVjOTBcdTVlMGNcdTVlN2VcdTVmY2NcdTYzZWVcdTY3M2FcdTY1ZDdcdTY1ZTJcdTY3MWZcdTY4Y2JcdTY4YzQiXSxbImI1YTEiLCJcdTZhNWZcdTVlMzBcdTZiYzVcdTZj''@;'; put 'put ''MTdcdTZjN2RcdTc1N2ZcdTc5NDhcdTViNjNcdTdhMDBcdTdkMDBcdTVmYmRcdTg5OGZcdThhMThcdThjYjRcdThkNzdcdThlY2NcdThmMWRcdTk4ZTJcdTlhMGVcdTliM2NcdTRlODBcdTUwN2RcdTUxMDBcdTU5OTNcdTViOWNcdTYyMmZcdTYyODBcdTY0ZWNcdTZiM2FcdTcyYTBcdTc1OTFc''@;'; put 'put ''dTc5NDdcdTdmYTlcdTg3ZmJcdThhYmNcdThiNzBcdTYzYWNcdTgzY2FcdTk3YTBcdTU0MDlcdTU0MDNcdTU1YWJcdTY4NTRcdTZhNThcdThhNzBcdTc4MjdcdTY3NzVcdTllY2RcdTUzNzRcdTViYTJcdTgxMWFcdTg2NTBcdTkwMDZcdTRlMThcdTRlNDVcdTRlYzdcdTRmMTFcdTUzY2FcdTU0''@;'; put 'put ''MzhcdTViYWVcdTVmMTNcdTYwMjVcdTY1NTFcdTY3M2RcdTZjNDJcdTZjNzJcdTZjZTNcdTcwNzhcdTc0MDNcdTdhNzZcdTdhYWVcdTdiMDhcdTdkMWFcdTdjZmVcdTdkNjZcdTY1ZTdcdTcyNWJcdTUzYmJcdTVjNDVcdTVkZThcdTYyZDJcdTYyZTBcdTYzMTlcdTZlMjBcdTg2NWFcdThhMzFc''@;'; put 'put ''dThkZGRcdTkyZjhcdTZmMDFcdTc5YTZcdTliNWFcdTRlYThcdTRlYWJcdTRlYWMiXSxbImI2YTEiLCJcdTRmOWJcdTRmYTBcdTUwZDFcdTUxNDdcdTdhZjZcdTUxNzFcdTUxZjZcdTUzNTRcdTUzMjFcdTUzN2ZcdTUzZWJcdTU1YWNcdTU4ODNcdTVjZTFcdTVmMzdcdTVmNGFcdTYwMmZcdTYw''@;'; put 'put ''NTBcdTYwNmRcdTYzMWZcdTY1NTlcdTZhNGJcdTZjYzFcdTcyYzJcdTcyZWRcdTc3ZWZcdTgwZjhcdTgxMDVcdTgyMDhcdTg1NGVcdTkwZjdcdTkzZTFcdTk3ZmZcdTk5NTdcdTlhNWFcdTRlZjBcdTUxZGRcdTVjMmRcdTY2ODFcdTY5NmRcdTVjNDBcdTY2ZjJcdTY5NzVcdTczODlcdTY4NTBc''@;'; put 'put ''dTdjODFcdTUwYzVcdTUyZTRcdTU3NDdcdTVkZmVcdTkzMjZcdTY1YTRcdTZiMjNcdTZiM2RcdTc0MzRcdTc5ODFcdTc5YmRcdTdiNGJcdTdkY2FcdTgyYjlcdTgzY2NcdTg4N2ZcdTg5NWZcdThiMzlcdThmZDFcdTkxZDFcdTU0MWZcdTkyODBcdTRlNWRcdTUwMzZcdTUzZTVcdTUzM2FcdTcy''@;'; put 'put ''ZDdcdTczOTZcdTc3ZTlcdTgyZTZcdThlYWZcdTk5YzZcdTk5YzhcdTk5ZDJcdTUxNzdcdTYxMWFcdTg2NWVcdTU1YjBcdTdhN2FcdTUwNzZcdTViZDNcdTkwNDdcdTk2ODVcdTRlMzJcdTZhZGJcdTkxZTdcdTVjNTFcdTVjNDgiXSxbImI3YTEiLCJcdTYzOThcdTdhOWZcdTZjOTNcdTk3NzRc''@;'; put 'put ''dThmNjFcdTdhYWFcdTcxOGFcdTk2ODhcdTdjODJcdTY4MTdcdTdlNzBcdTY4NTFcdTkzNmNcdTUyZjJcdTU0MWJcdTg1YWJcdThhMTNcdTdmYTRcdThlY2RcdTkwZTFcdTUzNjZcdTg4ODhcdTc5NDFcdTRmYzJcdTUwYmVcdTUyMTFcdTUxNDRcdTU1NTNcdTU3MmRcdTczZWFcdTU3OGJcdTU5''@;'; put 'put ''NTFcdTVmNjJcdTVmODRcdTYwNzVcdTYxNzZcdTYxNjdcdTYxYTlcdTYzYjJcdTY0M2FcdTY1NmNcdTY2NmZcdTY4NDJcdTZlMTNcdTc1NjZcdTdhM2RcdTdjZmJcdTdkNGNcdTdkOTlcdTdlNGJcdTdmNmJcdTgzMGVcdTgzNGFcdTg2Y2RcdThhMDhcdThhNjNcdThiNjZcdThlZmRcdTk4MWFc''@;'; put 'put ''dTlkOGZcdTgyYjhcdThmY2VcdTliZThcdTUyODdcdTYyMWZcdTY0ODNcdTZmYzBcdTk2OTlcdTY4NDFcdTUwOTFcdTZiMjBcdTZjN2FcdTZmNTRcdTdhNzRcdTdkNTBcdTg4NDBcdThhMjNcdTY3MDhcdTRlZjZcdTUwMzlcdTUwMjZcdTUwNjVcdTUxN2NcdTUyMzhcdTUyNjNcdTU1YTdcdTU3''@;'; put 'put ''MGZcdTU4MDVcdTVhY2NcdTVlZmFcdTYxYjJcdTYxZjhcdTYyZjNcdTYzNzIiXSxbImI4YTEiLCJcdTY5MWNcdTZhMjlcdTcyN2RcdTcyYWNcdTczMmVcdTc4MTRcdTc4NmZcdTdkNzlcdTc3MGNcdTgwYTlcdTg5OGJcdThiMTlcdThjZTJcdThlZDJcdTkwNjNcdTkzNzVcdTk2N2FcdTk4NTVc''@;'; put 'put ''dTlhMTNcdTllNzhcdTUxNDNcdTUzOWZcdTUzYjNcdTVlN2JcdTVmMjZcdTZlMWJcdTZlOTBcdTczODRcdTczZmVcdTdkNDNcdTgyMzdcdThhMDBcdThhZmFcdTk2NTBcdTRlNGVcdTUwMGJcdTUzZTRcdTU0N2NcdTU2ZmFcdTU5ZDFcdTViNjRcdTVkZjFcdTVlYWJcdTVmMjdcdTYyMzhcdTY1''@;'; put 'put ''NDVcdTY3YWZcdTZlNTZcdTcyZDBcdTdjY2FcdTg4YjRcdTgwYTFcdTgwZTFcdTgzZjBcdTg2NGVcdThhODdcdThkZThcdTkyMzdcdTk2YzdcdTk4NjdcdTlmMTNcdTRlOTRcdTRlOTJcdTRmMGRcdTUzNDhcdTU0NDlcdTU0M2VcdTVhMmZcdTVmOGNcdTVmYTFcdTYwOWZcdTY4YTdcdTZhOGVc''@;'; put 'put ''dTc0NWFcdTc4ODFcdThhOWVcdThhYTRcdThiNzdcdTkxOTBcdTRlNWVcdTliYzlcdTRlYTRcdTRmN2NcdTRmYWZcdTUwMTlcdTUwMTZcdTUxNDlcdTUxNmNcdTUyOWZcdTUyYjlcdTUyZmVcdTUzOWFcdTUzZTNcdTU0MTEiXSxbImI5YTEiLCJcdTU0MGVcdTU1ODlcdTU3NTFcdTU3YTJcdTU5''@;'; put 'put ''N2RcdTViNTRcdTViNWRcdTViOGZcdTVkZTVcdTVkZTdcdTVkZjdcdTVlNzhcdTVlODNcdTVlOWFcdTVlYjdcdTVmMThcdTYwNTJcdTYxNGNcdTYyOTdcdTYyZDhcdTYzYTdcdTY1M2JcdTY2MDJcdTY2NDNcdTY2ZjRcdTY3NmRcdTY4MjFcdTY4OTdcdTY5Y2JcdTZjNWZcdTZkMmFcdTZkNjlc''@;'; put 'put ''dTZlMmZcdTZlOWRcdTc1MzJcdTc2ODdcdTc4NmNcdTdhM2ZcdTdjZTBcdTdkMDVcdTdkMThcdTdkNWVcdTdkYjFcdTgwMTVcdTgwMDNcdTgwYWZcdTgwYjFcdTgxNTRcdTgxOGZcdTgyMmFcdTgzNTJcdTg4NGNcdTg4NjFcdThiMWJcdThjYTJcdThjZmNcdTkwY2FcdTkxNzVcdTkyNzFcdTc4''@;'; put 'put ''M2ZcdTkyZmNcdTk1YTRcdTk2NGRcdTk4MDVcdTk5OTlcdTlhZDhcdTlkM2JcdTUyNWJcdTUyYWJcdTUzZjdcdTU0MDhcdTU4ZDVcdTYyZjdcdTZmZTBcdThjNmFcdThmNWZcdTllYjlcdTUxNGJcdTUyM2JcdTU0NGFcdTU2ZmRcdTdhNDBcdTkxNzdcdTlkNjBcdTllZDJcdTczNDRcdTZmMDlc''@;'; put 'put ''dTgxNzBcdTc1MTFcdTVmZmRcdTYwZGFcdTlhYThcdTcyZGJcdThmYmMiXSxbImJhYTEiLCJcdTZiNjRcdTk4MDNcdTRlY2FcdTU2ZjBcdTU3NjRcdTU4YmVcdTVhNWFcdTYwNjhcdTYxYzdcdTY2MGZcdTY2MDZcdTY4MzlcdTY4YjFcdTZkZjdcdTc1ZDVcdTdkM2FcdTgyNmVcdTliNDJcdTRl''@;'; put 'put ''OWJcdTRmNTBcdTUzYzlcdTU1MDZcdTVkNmZcdTVkZTZcdTVkZWVcdTY3ZmJcdTZjOTlcdTc0NzNcdTc4MDJcdThhNTBcdTkzOTZcdTg4ZGZcdTU3NTBcdTVlYTdcdTYzMmJcdTUwYjVcdTUwYWNcdTUxOGRcdTY3MDBcdTU0YzlcdTU4NWVcdTU5YmJcdTViYjBcdTVmNjlcdTYyNGRcdTYzYTFc''@;'; put 'put ''dTY4M2RcdTZiNzNcdTZlMDhcdTcwN2RcdTkxYzdcdTcyODBcdTc4MTVcdTc4MjZcdTc5NmRcdTY1OGVcdTdkMzBcdTgzZGNcdTg4YzFcdThmMDlcdTk2OWJcdTUyNjRcdTU3MjhcdTY3NTBcdTdmNmFcdThjYTFcdTUxYjRcdTU3NDJcdTk2MmFcdTU4M2FcdTY5OGFcdTgwYjRcdTU0YjJcdTVk''@;'; put 'put ''MGVcdTU3ZmNcdTc4OTVcdTlkZmFcdTRmNWNcdTUyNGFcdTU0OGJcdTY0M2VcdTY2MjhcdTY3MTRcdTY3ZjVcdTdhODRcdTdiNTZcdTdkMjJcdTkzMmZcdTY4NWNcdTliYWRcdTdiMzlcdTUzMTlcdTUxOGFcdTUyMzciXSxbImJiYTEiLCJcdTViZGZcdTYyZjZcdTY0YWVcdTY0ZTZcdTY3MmRc''@;'; put 'put ''dTZiYmFcdTg1YTlcdTk2ZDFcdTc2OTBcdTliZDZcdTYzNGNcdTkzMDZcdTliYWJcdTc2YmZcdTY2NTJcdTRlMDlcdTUwOThcdTUzYzJcdTVjNzFcdTYwZThcdTY0OTJcdTY1NjNcdTY4NWZcdTcxZTZcdTczY2FcdTc1MjNcdTdiOTdcdTdlODJcdTg2OTVcdThiODNcdThjZGJcdTkxNzhcdTk5''@;'; put 'put ''MTBcdTY1YWNcdTY2YWJcdTZiOGJcdTRlZDVcdTRlZDRcdTRmM2FcdTRmN2ZcdTUyM2FcdTUzZjhcdTUzZjJcdTU1ZTNcdTU2ZGJcdTU4ZWJcdTU5Y2JcdTU5YzlcdTU5ZmZcdTViNTBcdTVjNGRcdTVlMDJcdTVlMmJcdTVmZDdcdTYwMWRcdTYzMDdcdTY1MmZcdTViNWNcdTY1YWZcdTY1YmRc''@;'; put 'put ''dTY1ZThcdTY3OWRcdTZiNjJcdTZiN2JcdTZjMGZcdTczNDVcdTc5NDlcdTc5YzFcdTdjZjhcdTdkMTlcdTdkMmJcdTgwYTJcdTgxMDJcdTgxZjNcdTg5OTZcdThhNWVcdThhNjlcdThhNjZcdThhOGNcdThhZWVcdThjYzdcdThjZGNcdTk2Y2NcdTk4ZmNcdTZiNmZcdTRlOGJcdTRmM2NcdTRm''@;'; put 'put ''OGRcdTUxNTBcdTViNTdcdTViZmFcdTYxNDhcdTYzMDFcdTY2NDIiXSxbImJjYTEiLCJcdTZiMjFcdTZlY2JcdTZjYmJcdTcyM2VcdTc0YmRcdTc1ZDRcdTc4YzFcdTc5M2FcdTgwMGNcdTgwMzNcdTgxZWFcdTg0OTRcdThmOWVcdTZjNTBcdTllN2ZcdTVmMGZcdThiNThcdTlkMmJcdTdhZmFc''@;'; put 'put ''dThlZjhcdTViOGRcdTk2ZWJcdTRlMDNcdTUzZjFcdTU3ZjdcdTU5MzFcdTVhYzlcdTViYTRcdTYwODlcdTZlN2ZcdTZmMDZcdTc1YmVcdThjZWFcdTViOWZcdTg1MDBcdTdiZTBcdTUwNzJcdTY3ZjRcdTgyOWRcdTVjNjFcdTg1NGFcdTdlMWVcdTgyMGVcdTUxOTlcdTVjMDRcdTYzNjhcdThk''@;'; put 'put ''NjZcdTY1OWNcdTcxNmVcdTc5M2VcdTdkMTdcdTgwMDVcdThiMWRcdThlY2FcdTkwNmVcdTg2YzdcdTkwYWFcdTUwMWZcdTUyZmFcdTVjM2FcdTY3NTNcdTcwN2NcdTcyMzVcdTkxNGNcdTkxYzhcdTkzMmJcdTgyZTVcdTViYzJcdTVmMzFcdTYwZjlcdTRlM2JcdTUzZDZcdTViODhcdTYyNGJc''@;'; put 'put ''dTY3MzFcdTZiOGFcdTcyZTlcdTczZTBcdTdhMmVcdTgxNmJcdThkYTNcdTkxNTJcdTk5OTZcdTUxMTJcdTUzZDdcdTU0NmFcdTViZmZcdTYzODhcdTZhMzlcdTdkYWNcdTk3MDBcdTU2ZGFcdTUzY2VcdTU0NjgiXSxbImJkYTEiLCJcdTViOTdcdTVjMzFcdTVkZGVcdTRmZWVcdTYxMDFcdTYy''@;'; put 'put ''ZmVcdTZkMzJcdTc5YzBcdTc5Y2JcdTdkNDJcdTdlNGRcdTdmZDJcdTgxZWRcdTgyMWZcdTg0OTBcdTg4NDZcdTg5NzJcdThiOTBcdThlNzRcdThmMmZcdTkwMzFcdTkxNGJcdTkxNmNcdTk2YzZcdTkxOWNcdTRlYzBcdTRmNGZcdTUxNDVcdTUzNDFcdTVmOTNcdTYyMGVcdTY3ZDRcdTZjNDFc''@;'; put 'put ''dTZlMGJcdTczNjNcdTdlMjZcdTkxY2RcdTkyODNcdTUzZDRcdTU5MTlcdTViYmZcdTZkZDFcdTc5NWRcdTdlMmVcdTdjOWJcdTU4N2VcdTcxOWZcdTUxZmFcdTg4NTNcdThmZjBcdTRmY2FcdTVjZmJcdTY2MjVcdTc3YWNcdTdhZTNcdTgyMWNcdTk5ZmZcdTUxYzZcdTVmYWFcdTY1ZWNcdTY5''@;'; put 'put ''NmZcdTZiODlcdTZkZjNcdTZlOTZcdTZmNjRcdTc2ZmVcdTdkMTRcdTVkZTFcdTkwNzVcdTkxODdcdTk4MDZcdTUxZTZcdTUyMWRcdTYyNDBcdTY2OTFcdTY2ZDlcdTZlMWFcdTVlYjZcdTdkZDJcdTdmNzJcdTY2ZjhcdTg1YWZcdTg1ZjdcdThhZjhcdTUyYTlcdTUzZDlcdTU5NzNcdTVlOGZc''@;'; put 'put ''dTVmOTBcdTYwNTVcdTkyZTRcdTk2NjRcdTUwYjdcdTUxMWYiXSxbImJlYTEiLCJcdTUyZGRcdTUzMjBcdTUzNDdcdTUzZWNcdTU0ZThcdTU1NDZcdTU1MzFcdTU2MTdcdTU5NjhcdTU5YmVcdTVhM2NcdTViYjVcdTVjMDZcdTVjMGZcdTVjMTFcdTVjMWFcdTVlODRcdTVlOGFcdTVlZTBcdTVm''@;'; put 'put ''NzBcdTYyN2ZcdTYyODRcdTYyZGJcdTYzOGNcdTYzNzdcdTY2MDdcdTY2MGNcdTY2MmRcdTY2NzZcdTY3N2VcdTY4YTJcdTZhMWZcdTZhMzVcdTZjYmNcdTZkODhcdTZlMDlcdTZlNThcdTcxM2NcdTcxMjZcdTcxNjdcdTc1YzdcdTc3MDFcdTc4NWRcdTc5MDFcdTc5NjVcdTc5ZjBcdTdhZTBc''@;'; put 'put ''dTdiMTFcdTdjYTdcdTdkMzlcdTgwOTZcdTgzZDZcdTg0OGJcdTg1NDlcdTg4NWRcdTg4ZjNcdThhMWZcdThhM2NcdThhNTRcdThhNzNcdThjNjFcdThjZGVcdTkxYTRcdTkyNjZcdTkzN2VcdTk0MThcdTk2OWNcdTk3OThcdTRlMGFcdTRlMDhcdTRlMWVcdTRlNTdcdTUxOTdcdTUyNzBcdTU3''@;'; put 'put ''Y2VcdTU4MzRcdTU4Y2NcdTViMjJcdTVlMzhcdTYwYzVcdTY0ZmVcdTY3NjFcdTY3NTZcdTZkNDRcdTcyYjZcdTc1NzNcdTdhNjNcdTg0YjhcdThiNzJcdTkxYjhcdTkzMjBcdTU2MzFcdTU3ZjRcdTk4ZmUiXSxbImJmYTEiLCJcdTYyZWRcdTY5MGRcdTZiOTZcdTcxZWRcdTdlNTRcdTgwNzdc''@;'; put 'put ''dTgyNzJcdTg5ZTZcdTk4ZGZcdTg3NTVcdThmYjFcdTVjM2JcdTRmMzhcdTRmZTFcdTRmYjVcdTU1MDdcdTVhMjBcdTViZGRcdTViZTlcdTVmYzNcdTYxNGVcdTYzMmZcdTY1YjBcdTY2NGJcdTY4ZWVcdTY5OWJcdTZkNzhcdTZkZjFcdTc1MzNcdTc1YjlcdTc3MWZcdTc5NWVcdTc5ZTZcdTdk''@;'; put 'put ''MzNcdTgxZTNcdTgyYWZcdTg1YWFcdTg5YWFcdThhM2FcdThlYWJcdThmOWJcdTkwMzJcdTkxZGRcdTk3MDdcdTRlYmFcdTRlYzFcdTUyMDNcdTU4NzVcdTU4ZWNcdTVjMGJcdTc1MWFcdTVjM2RcdTgxNGVcdThhMGFcdThmYzVcdTk2NjNcdTk3NmRcdTdiMjVcdThhY2ZcdTk4MDhcdTkxNjJc''@;'; put 'put ''dTU2ZjNcdTUzYThcdTkwMTdcdTU0MzlcdTU3ODJcdTVlMjVcdTYzYThcdTZjMzRcdTcwOGFcdTc3NjFcdTdjOGJcdTdmZTBcdTg4NzBcdTkwNDJcdTkxNTRcdTkzMTBcdTkzMThcdTk2OGZcdTc0NWVcdTlhYzRcdTVkMDdcdTVkNjlcdTY1NzBcdTY3YTJcdThkYThcdTk2ZGJcdTYzNmVcdTY3''@;'; put 'put ''NDlcdTY5MTlcdTgzYzVcdTk4MTdcdTk2YzBcdTg4ZmUiXSxbImMwYTEiLCJcdTZmODRcdTY0N2FcdTViZjhcdTRlMTZcdTcwMmNcdTc1NWRcdTY2MmZcdTUxYzRcdTUyMzZcdTUyZTJcdTU5ZDNcdTVmODFcdTYwMjdcdTYyMTBcdTY1M2ZcdTY1NzRcdTY2MWZcdTY2NzRcdTY4ZjJcdTY4MTZc''@;'; put 'put ''dTZiNjNcdTZlMDVcdTcyNzJcdTc1MWZcdTc2ZGJcdTdjYmVcdTgwNTZcdTU4ZjBcdTg4ZmRcdTg5N2ZcdThhYTBcdThhOTNcdThhY2JcdTkwMWRcdTkxOTJcdTk3NTJcdTk3NTlcdTY1ODlcdTdhMGVcdTgxMDZcdTk2YmJcdTVlMmRcdTYwZGNcdTYyMWFcdTY1YTVcdTY2MTRcdTY3OTBcdTc3''@;'; put 'put ''ZjNcdTdhNGRcdTdjNGRcdTdlM2VcdTgxMGFcdThjYWNcdThkNjRcdThkZTFcdThlNWZcdTc4YTlcdTUyMDdcdTYyZDlcdTYzYTVcdTY0NDJcdTYyOThcdThhMmRcdTdhODNcdTdiYzBcdThhYWNcdTk2ZWFcdTdkNzZcdTgyMGNcdTg3NDlcdTRlZDlcdTUxNDhcdTUzNDNcdTUzNjBcdTViYTNc''@;'; put 'put ''dTVjMDJcdTVjMTZcdTVkZGRcdTYyMjZcdTYyNDdcdTY0YjBcdTY4MTNcdTY4MzRcdTZjYzlcdTZkNDVcdTZkMTdcdTY3ZDNcdTZmNWNcdTcxNGVcdTcxN2RcdTY1Y2JcdTdhN2ZcdTdiYWRcdTdkZGEiXSxbImMxYTEiLCJcdTdlNGFcdTdmYThcdTgxN2FcdTgyMWJcdTgyMzlcdTg1YTZcdThh''@;'; put 'put ''NmVcdThjY2VcdThkZjVcdTkwNzhcdTkwNzdcdTkyYWRcdTkyOTFcdTk1ODNcdTliYWVcdTUyNGRcdTU1ODRcdTZmMzhcdTcxMzZcdTUxNjhcdTc5ODVcdTdlNTVcdTgxYjNcdTdjY2VcdTU2NGNcdTU4NTFcdTVjYThcdTYzYWFcdTY2ZmVcdTY2ZmRcdTY5NWFcdTcyZDlcdTc1OGZcdTc1OGVc''@;'; put 'put ''dTc5MGVcdTc5NTZcdTc5ZGZcdTdjOTdcdTdkMjBcdTdkNDRcdTg2MDdcdThhMzRcdTk2M2JcdTkwNjFcdTlmMjBcdTUwZTdcdTUyNzVcdTUzY2NcdTUzZTJcdTUwMDlcdTU1YWFcdTU4ZWVcdTU5NGZcdTcyM2RcdTViOGJcdTVjNjRcdTUzMWRcdTYwZTNcdTYwZjNcdTYzNWNcdTYzODNcdTYz''@;'; put 'put ''M2ZcdTYzYmJcdTY0Y2RcdTY1ZTlcdTY2ZjlcdTVkZTNcdTY5Y2RcdTY5ZmRcdTZmMTVcdTcxZTVcdTRlODlcdTc1ZTlcdTc2ZjhcdTdhOTNcdTdjZGZcdTdkY2ZcdTdkOWNcdTgwNjFcdTgzNDlcdTgzNThcdTg0NmNcdTg0YmNcdTg1ZmJcdTg4YzVcdThkNzBcdTkwMDFcdTkwNmRcdTkzOTdc''@;'; put 'put ''dTk3MWNcdTlhMTJcdTUwY2ZcdTU4OTdcdTYxOGUiXSxbImMyYTEiLCJcdTgxZDNcdTg1MzVcdThkMDhcdTkwMjBcdTRmYzNcdTUwNzRcdTUyNDdcdTUzNzNcdTYwNmZcdTYzNDlcdTY3NWZcdTZlMmNcdThkYjNcdTkwMWZcdTRmZDdcdTVjNWVcdThjY2FcdTY1Y2ZcdTdkOWFcdTUzNTJcdTg4''@;'; put 'put ''OTZcdTUxNzZcdTYzYzNcdTViNThcdTViNmJcdTVjMGFcdTY0MGRcdTY3NTFcdTkwNWNcdTRlZDZcdTU5MWFcdTU5MmFcdTZjNzBcdThhNTFcdTU1M2VcdTU4MTVcdTU5YTVcdTYwZjBcdTYyNTNcdTY3YzFcdTgyMzVcdTY5NTVcdTk2NDBcdTk5YzRcdTlhMjhcdTRmNTNcdTU4MDZcdTViZmVc''@;'; put 'put ''dTgwMTBcdTVjYjFcdTVlMmZcdTVmODVcdTYwMjBcdTYxNGJcdTYyMzRcdTY2ZmZcdTZjZjBcdTZlZGVcdTgwY2VcdTgxN2ZcdTgyZDRcdTg4OGJcdThjYjhcdTkwMDBcdTkwMmVcdTk2OGFcdTllZGJcdTliZGJcdTRlZTNcdTUzZjBcdTU5MjdcdTdiMmNcdTkxOGRcdTk4NGNcdTlkZjlcdTZl''@;'; put 'put ''ZGRcdTcwMjdcdTUzNTNcdTU1NDRcdTViODVcdTYyNThcdTYyOWVcdTYyZDNcdTZjYTJcdTZmZWZcdTc0MjJcdThhMTdcdTk0MzhcdTZmYzFcdThhZmVcdTgzMzhcdTUxZTdcdTg2ZjhcdTUzZWEiXSxbImMzYTEiLCJcdTUzZTlcdTRmNDZcdTkwNTRcdThmYjBcdTU5NmFcdTgxMzFcdTVkZmRc''@;'; put 'put ''dTdhZWFcdThmYmZcdTY4ZGFcdThjMzdcdTcyZjhcdTljNDhcdTZhM2RcdThhYjBcdTRlMzlcdTUzNThcdTU2MDZcdTU3NjZcdTYyYzVcdTYzYTJcdTY1ZTZcdTZiNGVcdTZkZTFcdTZlNWJcdTcwYWRcdTc3ZWRcdTdhZWZcdTdiYWFcdTdkYmJcdTgwM2RcdTgwYzZcdTg2Y2JcdThhOTVcdTkz''@;'; put 'put ''NWJcdTU2ZTNcdTU4YzdcdTVmM2VcdTY1YWRcdTY2OTZcdTZhODBcdTZiYjVcdTc1MzdcdThhYzdcdTUwMjRcdTc3ZTVcdTU3MzBcdTVmMWJcdTYwNjVcdTY2N2FcdTZjNjBcdTc1ZjRcdTdhMWFcdTdmNmVcdTgxZjRcdTg3MThcdTkwNDVcdTk5YjNcdTdiYzlcdTc1NWNcdTdhZjlcdTdiNTFc''@;'; put 'put ''dTg0YzRcdTkwMTBcdTc5ZTlcdTdhOTJcdTgzMzZcdTVhZTFcdTc3NDBcdTRlMmRcdTRlZjJcdTViOTlcdTVmZTBcdTYyYmRcdTY2M2NcdTY3ZjFcdTZjZThcdTg2NmJcdTg4NzdcdThhM2JcdTkxNGVcdTkyZjNcdTk5ZDBcdTZhMTdcdTcwMjZcdTczMmFcdTgyZTdcdTg0NTdcdThjYWZcdTRl''@;'; put 'put ''MDFcdTUxNDZcdTUxY2JcdTU1OGJcdTViZjUiXSxbImM0YTEiLCJcdTVlMTZcdTVlMzNcdTVlODFcdTVmMTRcdTVmMzVcdTVmNmJcdTVmYjRcdTYxZjJcdTYzMTFcdTY2YTJcdTY3MWRcdTZmNmVcdTcyNTJcdTc1M2FcdTc3M2FcdTgwNzRcdTgxMzlcdTgxNzhcdTg3NzZcdThhYmZcdThhZGNc''@;'; put 'put ''dThkODVcdThkZjNcdTkyOWFcdTk1NzdcdTk4MDJcdTljZTVcdTUyYzVcdTYzNTdcdTc2ZjRcdTY3MTVcdTZjODhcdTczY2RcdThjYzNcdTkzYWVcdTk2NzNcdTZkMjVcdTU4OWNcdTY5MGVcdTY5Y2NcdThmZmRcdTkzOWFcdTc1ZGJcdTkwMWFcdTU4NWFcdTY4MDJcdTYzYjRcdTY5ZmJcdTRm''@;'; put 'put ''NDNcdTZmMmNcdTY3ZDhcdThmYmJcdTg1MjZcdTdkYjRcdTkzNTRcdTY5M2ZcdTZmNzBcdTU3NmFcdTU4ZjdcdTViMmNcdTdkMmNcdTcyMmFcdTU0MGFcdTkxZTNcdTlkYjRcdTRlYWRcdTRmNGVcdTUwNWNcdTUwNzVcdTUyNDNcdThjOWVcdTU0NDhcdTU4MjRcdTViOWFcdTVlMWRcdTVlOTVc''@;'; put 'put ''dTVlYWRcdTVlZjdcdTVmMWZcdTYwOGNcdTYyYjVcdTYzM2FcdTYzZDBcdTY4YWZcdTZjNDBcdTc4ODdcdTc5OGVcdTdhMGJcdTdkZTBcdTgyNDdcdThhMDJcdThhZTZcdThlNDRcdTkwMTMiXSxbImM1YTEiLCJcdTkwYjhcdTkxMmRcdTkxZDhcdTlmMGVcdTZjZTVcdTY0NThcdTY0ZTJcdTY1''@;'; put 'put ''NzVcdTZlZjRcdTc2ODRcdTdiMWJcdTkwNjlcdTkzZDFcdTZlYmFcdTU0ZjJcdTVmYjlcdTY0YTRcdThmNGRcdThmZWRcdTkyNDRcdTUxNzhcdTU4NmJcdTU5MjlcdTVjNTVcdTVlOTdcdTZkZmJcdTdlOGZcdTc1MWNcdThjYmNcdThlZTJcdTk4NWJcdTcwYjlcdTRmMWRcdTZiYmZcdTZmYjFc''@;'; put 'put ''dTc1MzBcdTk2ZmJcdTUxNGVcdTU0MTBcdTU4MzVcdTU4NTdcdTU5YWNcdTVjNjBcdTVmOTJcdTY1OTdcdTY3NWNcdTZlMjFcdTc2N2JcdTgzZGZcdThjZWRcdTkwMTRcdTkwZmRcdTkzNGRcdTc4MjVcdTc4M2FcdTUyYWFcdTVlYTZcdTU3MWZcdTU5NzRcdTYwMTJcdTUwMTJcdTUxNWFcdTUx''@;'; put 'put ''YWNcdTUxY2RcdTUyMDBcdTU1MTBcdTU4NTRcdTU4NThcdTU5NTdcdTViOTVcdTVjZjZcdTVkOGJcdTYwYmNcdTYyOTVcdTY0MmRcdTY3NzFcdTY4NDNcdTY4YmNcdTY4ZGZcdTc2ZDdcdTZkZDhcdTZlNmZcdTZkOWJcdTcwNmZcdTcxYzhcdTVmNTNcdTc1ZDhcdTc5NzdcdTdiNDlcdTdiNTRc''@;'; put 'put ''dTdiNTJcdTdjZDZcdTdkNzFcdTUyMzAiXSxbImM2YTEiLCJcdTg0NjNcdTg1NjlcdTg1ZTRcdThhMGVcdThiMDRcdThjNDZcdThlMGZcdTkwMDNcdTkwMGZcdTk0MTlcdTk2NzZcdTk4MmRcdTlhMzBcdTk1ZDhcdTUwY2RcdTUyZDVcdTU0MGNcdTU4MDJcdTVjMGVcdTYxYTdcdTY0OWVcdTZk''@;'; put 'put ''MWVcdTc3YjNcdTdhZTVcdTgwZjRcdTg0MDRcdTkwNTNcdTkyODVcdTVjZTBcdTlkMDdcdTUzM2ZcdTVmOTdcdTVmYjNcdTZkOWNcdTcyNzlcdTc3NjNcdTc5YmZcdTdiZTRcdTZiZDJcdTcyZWNcdThhYWRcdTY4MDNcdTZhNjFcdTUxZjhcdTdhODFcdTY5MzRcdTVjNGFcdTljZjZcdTgyZWJc''@;'; put 'put ''dTViYzVcdTkxNDlcdTcwMWVcdTU2NzhcdTVjNmZcdTYwYzdcdTY1NjZcdTZjOGNcdThjNWFcdTkwNDFcdTk4MTNcdTU0NTFcdTY2YzdcdTkyMGRcdTU5NDhcdTkwYTNcdTUxODVcdTRlNGRcdTUxZWFcdTg1OTlcdThiMGVcdTcwNThcdTYzN2FcdTkzNGJcdTY5NjJcdTk5YjRcdTdlMDRcdTc1''@;'; put 'put ''NzdcdTUzNTdcdTY5NjBcdThlZGZcdTk2ZTNcdTZjNWRcdTRlOGNcdTVjM2NcdTVmMTBcdThmZTlcdTUzMDJcdThjZDFcdTgwODlcdTg2NzlcdTVlZmZcdTY1ZTVcdTRlNzNcdTUxNjUiXSxbImM3YTEiLCJcdTU5ODJcdTVjM2ZcdTk3ZWVcdTRlZmJcdTU5OGFcdTVmY2RcdThhOGRcdTZmZTFc''@;'; put 'put ''dTc5YjBcdTc5NjJcdTViZTdcdTg0NzFcdTczMmJcdTcxYjFcdTVlNzRcdTVmZjVcdTYzN2JcdTY0OWFcdTcxYzNcdTdjOThcdTRlNDNcdTVlZmNcdTRlNGJcdTU3ZGNcdTU2YTJcdTYwYTlcdTZmYzNcdTdkMGRcdTgwZmRcdTgxMzNcdTgxYmZcdThmYjJcdTg5OTdcdTg2YTRcdTVkZjRcdTYy''@;'; put 'put ''OGFcdTY0YWRcdTg5ODdcdTY3NzdcdTZjZTJcdTZkM2VcdTc0MzZcdTc4MzRcdTVhNDZcdTdmNzVcdTgyYWRcdTk5YWNcdTRmZjNcdTVlYzNcdTYyZGRcdTYzOTJcdTY1NTdcdTY3NmZcdTc2YzNcdTcyNGNcdTgwY2NcdTgwYmFcdThmMjlcdTkxNGRcdTUwMGRcdTU3ZjlcdTVhOTJcdTY4ODVc''@;'; put 'put ''dTY5NzNcdTcxNjRcdTcyZmRcdThjYjdcdTU4ZjJcdThjZTBcdTk2NmFcdTkwMTlcdTg3N2ZcdTc5ZTRcdTc3ZTdcdTg0MjlcdTRmMmZcdTUyNjVcdTUzNWFcdTYyY2RcdTY3Y2ZcdTZjY2FcdTc2N2RcdTdiOTRcdTdjOTVcdTgyMzZcdTg1ODRcdThmZWJcdTY2ZGRcdTZmMjBcdTcyMDZcdTdl''@;'; put 'put ''MWJcdTgzYWJcdTk5YzFcdTllYTYiXSxbImM4YTEiLCJcdTUxZmRcdTdiYjFcdTc4NzJcdTdiYjhcdTgwODdcdTdiNDhcdTZhZThcdTVlNjFcdTgwOGNcdTc1NTFcdTc1NjBcdTUxNmJcdTkyNjJcdTZlOGNcdTc2N2FcdTkxOTdcdTlhZWFcdTRmMTBcdTdmNzBcdTYyOWNcdTdiNGZcdTk1YTVc''@;'; put 'put ''dTljZTlcdTU2N2FcdTU4NTlcdTg2ZTRcdTk2YmNcdTRmMzRcdTUyMjRcdTUzNGFcdTUzY2RcdTUzZGJcdTVlMDZcdTY0MmNcdTY1OTFcdTY3N2ZcdTZjM2VcdTZjNGVcdTcyNDhcdTcyYWZcdTczZWRcdTc1NTRcdTdlNDFcdTgyMmNcdTg1ZTlcdThjYTlcdTdiYzRcdTkxYzZcdTcxNjlcdTk4''@;'; put 'put ''MTJcdTk4ZWZcdTYzM2RcdTY2NjlcdTc1NmFcdTc2ZTRcdTc4ZDBcdTg1NDNcdTg2ZWVcdTUzMmFcdTUzNTFcdTU0MjZcdTU5ODNcdTVlODdcdTVmN2NcdTYwYjJcdTYyNDlcdTYyNzlcdTYyYWJcdTY1OTBcdTZiZDRcdTZjY2NcdTc1YjJcdTc2YWVcdTc4OTFcdTc5ZDhcdTdkY2JcdTdmNzdc''@;'; put 'put ''dTgwYTVcdTg4YWJcdThhYjlcdThjYmJcdTkwN2ZcdTk3NWVcdTk4ZGJcdTZhMGJcdTdjMzhcdTUwOTlcdTVjM2VcdTVmYWVcdTY3ODdcdTZiZDhcdTc0MzVcdTc3MDlcdTdmOGUiXSxbImM5YTEiLCJcdTlmM2JcdTY3Y2FcdTdhMTdcdTUzMzlcdTc1OGJcdTlhZWRcdTVmNjZcdTgxOWRcdTgz''@;'; put 'put ''ZjFcdTgwOThcdTVmM2NcdTVmYzVcdTc1NjJcdTdiNDZcdTkwM2NcdTY4NjdcdTU5ZWJcdTVhOWJcdTdkMTBcdTc2N2VcdThiMmNcdTRmZjVcdTVmNmFcdTZhMTlcdTZjMzdcdTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThhNTVcdThjNzlcdTVlZGZcdTYzY2ZcdTc1YzVcdTc5ZDJcdTgyZDdc''@;'; put 'put ''dTkzMjhcdTkyZjJcdTg0OWNcdTg2ZWRcdTljMmRcdTU0YzFcdTVmNmNcdTY1OGNcdTZkNWNcdTcwMTVcdThjYTdcdThjZDNcdTk4M2JcdTY1NGZcdTc0ZjZcdTRlMGRcdTRlZDhcdTU3ZTBcdTU5MmJcdTVhNjZcdTViY2NcdTUxYThcdTVlMDNcdTVlOWNcdTYwMTZcdTYyNzZcdTY1NzdcdTY1''@;'; put 'put ''YTdcdTY2NmVcdTZkNmVcdTcyMzZcdTdiMjZcdTgxNTBcdTgxOWFcdTgyOTlcdThiNWNcdThjYTBcdThjZTZcdThkNzRcdTk2MWNcdTk2NDRcdTRmYWVcdTY0YWJcdTZiNjZcdTgyMWVcdTg0NjFcdTg1NmFcdTkwZThcdTVjMDFcdTY5NTNcdTk4YThcdTg0N2FcdTg1NTdcdTRmMGZcdTUyNmZc''@;'; put 'put ''dTVmYTlcdTVlNDVcdTY3MGQiXSxbImNhYTEiLCJcdTc5OGZcdTgxNzlcdTg5MDdcdTg5ODZcdTZkZjVcdTVmMTdcdTYyNTVcdTZjYjhcdTRlY2ZcdTcyNjlcdTliOTJcdTUyMDZcdTU0M2JcdTU2NzRcdTU4YjNcdTYxYTRcdTYyNmVcdTcxMWFcdTU5NmVcdTdjODlcdTdjZGVcdTdkMWJcdTk2''@;'; put 'put ''ZjBcdTY1ODdcdTgwNWVcdTRlMTlcdTRmNzVcdTUxNzVcdTU4NDBcdTVlNjNcdTVlNzNcdTVmMGFcdTY3YzRcdTRlMjZcdTg1M2RcdTk1ODlcdTk2NWJcdTdjNzNcdTk4MDFcdTUwZmJcdTU4YzFcdTc2NTZcdTc4YTdcdTUyMjVcdTc3YTVcdTg1MTFcdTdiODZcdTUwNGZcdTU5MDlcdTcyNDdc''@;'; put 'put ''dTdiYzdcdTdkZThcdThmYmFcdThmZDRcdTkwNGRcdTRmYmZcdTUyYzlcdTVhMjlcdTVmMDFcdTk3YWRcdTRmZGRcdTgyMTdcdTkyZWFcdTU3MDNcdTYzNTVcdTZiNjlcdTc1MmJcdTg4ZGNcdThmMTRcdTdhNDJcdTUyZGZcdTU4OTNcdTYxNTVcdTYyMGFcdTY2YWVcdTZiY2RcdTdjM2ZcdTgz''@;'; put 'put ''ZTlcdTUwMjNcdTRmZjhcdTUzMDVcdTU0NDZcdTU4MzFcdTU5NDlcdTViOWRcdTVjZjBcdTVjZWZcdTVkMjlcdTVlOTZcdTYyYjFcdTYzNjdcdTY1M2VcdTY1YjlcdTY3MGIiXSxbImNiYTEiLCJcdTZjZDVcdTZjZTFcdTcwZjlcdTc4MzJcdTdlMmJcdTgwZGVcdTgyYjNcdTg0MGNcdTg0ZWNc''@;'; put 'put ''dTg3MDJcdTg5MTJcdThhMmFcdThjNGFcdTkwYTZcdTkyZDJcdTk4ZmRcdTljZjNcdTlkNmNcdTRlNGZcdTRlYTFcdTUwOGRcdTUyNTZcdTU3NGFcdTU5YThcdTVlM2RcdTVmZDhcdTVmZDlcdTYyM2ZcdTY2YjRcdTY3MWJcdTY3ZDBcdTY4ZDJcdTUxOTJcdTdkMjFcdTgwYWFcdTgxYThcdThi''@;'; put 'put ''MDBcdThjOGNcdThjYmZcdTkyN2VcdTk2MzJcdTU0MjBcdTk4MmNcdTUzMTdcdTUwZDVcdTUzNWNcdTU4YThcdTY0YjJcdTY3MzRcdTcyNjdcdTc3NjZcdTdhNDZcdTkxZTZcdTUyYzNcdTZjYTFcdTZiODZcdTU4MDBcdTVlNGNcdTU5NTRcdTY3MmNcdTdmZmJcdTUxZTFcdTc2YzZcdTY0Njlc''@;'; put 'put ''dTc4ZThcdTliNTRcdTllYmJcdTU3Y2JcdTU5YjlcdTY2MjdcdTY3OWFcdTZiY2VcdTU0ZTlcdTY5ZDlcdTVlNTVcdTgxOWNcdTY3OTVcdTliYWFcdTY3ZmVcdTljNTJcdTY4NWRcdTRlYTZcdTRmZTNcdTUzYzhcdTYyYjlcdTY3MmJcdTZjYWJcdThmYzRcdTRmYWRcdTdlNmRcdTllYmZcdTRl''@;'; put 'put ''MDdcdTYxNjJcdTZlODAiXSxbImNjYTEiLCJcdTZmMmJcdTg1MTNcdTU0NzNcdTY3MmFcdTliNDVcdTVkZjNcdTdiOTVcdTVjYWNcdTViYzZcdTg3MWNcdTZlNGFcdTg0ZDFcdTdhMTRcdTgxMDhcdTU5OTlcdTdjOGRcdTZjMTFcdTc3MjBcdTUyZDlcdTU5MjJcdTcxMjFcdTcyNWZcdTc3ZGJc''@;'; put 'put ''dTk3MjdcdTlkNjFcdTY5MGJcdTVhN2ZcdTVhMThcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTc2ZGZcdThmZjdcdTkyOThcdTljZjRcdTU5ZWFcdTcyNWRcdTZlYzVcdTUxNGRcdTY4YzlcdTdkYmZcdTdkZWNcdTk3NjJcdTllYmFcdTY0NzhcdTZhMjFcdTgzMDJcdTU5ODRcdTViNWZcdTZi''@;'; put 'put ''ZGJcdTczMWJcdTc2ZjJcdTdkYjJcdTgwMTdcdTg0OTlcdTUxMzJcdTY3MjhcdTllZDlcdTc2ZWVcdTY3NjJcdTUyZmZcdTk5MDVcdTVjMjRcdTYyM2JcdTdjN2VcdThjYjBcdTU1NGZcdTYwYjZcdTdkMGJcdTk1ODBcdTUzMDFcdTRlNWZcdTUxYjZcdTU5MWNcdTcyM2FcdTgwMzZcdTkxY2Vc''@;'; put 'put ''dTVmMjVcdTc3ZTJcdTUzODRcdTVmNzlcdTdkMDRcdTg1YWNcdThhMzNcdThlOGRcdTk3NTZcdTY3ZjNcdTg1YWVcdTk0NTNcdTYxMDlcdTYxMDhcdTZjYjlcdTc2NTIiXSxbImNkYTEiLCJcdThhZWRcdThmMzhcdTU1MmZcdTRmNTFcdTUxMmFcdTUyYzdcdTUzY2JcdTViYTVcdTVlN2RcdTYw''@;'; put 'put ''YTBcdTYxODJcdTYzZDZcdTY3MDlcdTY3ZGFcdTZlNjdcdTZkOGNcdTczMzZcdTczMzdcdTc1MzFcdTc5NTBcdTg4ZDVcdThhOThcdTkwNGFcdTkwOTFcdTkwZjVcdTk2YzRcdTg3OGRcdTU5MTVcdTRlODhcdTRmNTlcdTRlMGVcdThhODlcdThmM2ZcdTk4MTBcdTUwYWRcdTVlN2NcdTU5OTZc''@;'; put 'put ''dTViYjlcdTVlYjhcdTYzZGFcdTYzZmFcdTY0YzFcdTY2ZGNcdTY5NGFcdTY5ZDhcdTZkMGJcdTZlYjZcdTcxOTRcdTc1MjhcdTdhYWZcdTdmOGFcdTgwMDBcdTg0NDlcdTg0YzlcdTg5ODFcdThiMjFcdThlMGFcdTkwNjVcdTk2N2RcdTk5MGFcdTYxN2VcdTYyOTFcdTZiMzJcdTZjODNcdTZk''@;'; put 'put ''NzRcdTdmY2NcdTdmZmNcdTZkYzBcdTdmODVcdTg3YmFcdTg4ZjhcdTY3NjVcdTgzYjFcdTk4M2NcdTk2ZjdcdTZkMWJcdTdkNjFcdTg0M2RcdTkxNmFcdTRlNzFcdTUzNzVcdTVkNTBcdTZiMDRcdTZmZWJcdTg1Y2RcdTg2MmRcdTg5YTdcdTUyMjlcdTU0MGZcdTVjNjVcdTY3NGVcdTY4YThc''@;'; put 'put ''dTc0MDZcdTc0ODMiXSxbImNlYTEiLCJcdTc1ZTJcdTg4Y2ZcdTg4ZTFcdTkxY2NcdTk2ZTJcdTk2NzhcdTVmOGJcdTczODdcdTdhY2JcdTg0NGVcdTYzYTBcdTc1NjVcdTUyODlcdTZkNDFcdTZlOWNcdTc0MDlcdTc1NTlcdTc4NmJcdTdjOTJcdTk2ODZcdTdhZGNcdTlmOGRcdTRmYjZcdTYx''@;'; put 'put ''NmVcdTY1YzVcdTg2NWNcdTRlODZcdTRlYWVcdTUwZGFcdTRlMjFcdTUxY2NcdTViZWVcdTY1OTlcdTY4ODFcdTZkYmNcdTczMWZcdTc2NDJcdTc3YWRcdTdhMWNcdTdjZTdcdTgyNmZcdThhZDJcdTkwN2NcdTkxY2ZcdTk2NzVcdTk4MThcdTUyOWJcdTdkZDFcdTUwMmJcdTUzOThcdTY3OTdc''@;'; put 'put ''dTZkY2JcdTcxZDBcdTc0MzNcdTgxZThcdThmMmFcdTk2YTNcdTljNTdcdTllOWZcdTc0NjBcdTU4NDFcdTZkOTlcdTdkMmZcdTk4NWVcdTRlZTRcdTRmMzZcdTRmOGJcdTUxYjdcdTUyYjFcdTVkYmFcdTYwMWNcdTczYjJcdTc5M2NcdTgyZDNcdTkyMzRcdTk2YjdcdTk2ZjZcdTk3MGFcdTll''@;'; put 'put ''OTdcdTlmNjJcdTY2YTZcdTZiNzRcdTUyMTdcdTUyYTNcdTcwYzhcdTg4YzJcdTVlYzlcdTYwNGJcdTYxOTBcdTZmMjNcdTcxNDlcdTdjM2VcdTdkZjRcdTgwNmYiXSxbImNmYTEiLCJcdTg0ZWVcdTkwMjNcdTkzMmNcdTU0NDJcdTliNmZcdTZhZDNcdTcwODlcdThjYzJcdThkZWZcdTk3MzJc''@;'; put 'put ''dTUyYjRcdTVhNDFcdTVlY2FcdTVmMDRcdTY3MTdcdTY5N2NcdTY5OTRcdTZkNmFcdTZmMGZcdTcyNjJcdTcyZmNcdTdiZWRcdTgwMDFcdTgwN2VcdTg3NGJcdTkwY2VcdTUxNmRcdTllOTNcdTc5ODRcdTgwOGJcdTkzMzJcdThhZDZcdTUwMmRcdTU0OGNcdThhNzFcdTZiNmFcdThjYzRcdTgx''@;'; put 'put ''MDdcdTYwZDFcdTY3YTBcdTlkZjJcdTRlOTlcdTRlOThcdTljMTBcdThhNmJcdTg1YzFcdTg1NjhcdTY5MDBcdTZlN2VcdTc4OTdcdTgxNTUiXSxbImQwYTEiLCJcdTVmMGNcdTRlMTBcdTRlMTVcdTRlMmFcdTRlMzFcdTRlMzZcdTRlM2NcdTRlM2ZcdTRlNDJcdTRlNTZcdTRlNThcdTRlODJc''@;'; put 'put ''dTRlODVcdThjNmJcdTRlOGFcdTgyMTJcdTVmMGRcdTRlOGVcdTRlOWVcdTRlOWZcdTRlYTBcdTRlYTJcdTRlYjBcdTRlYjNcdTRlYjZcdTRlY2VcdTRlY2RcdTRlYzRcdTRlYzZcdTRlYzJcdTRlZDdcdTRlZGVcdTRlZWRcdTRlZGZcdTRlZjdcdTRmMDlcdTRmNWFcdTRmMzBcdTRmNWJcdTRm''@;'; put 'put ''NWRcdTRmNTdcdTRmNDdcdTRmNzZcdTRmODhcdTRmOGZcdTRmOThcdTRmN2JcdTRmNjlcdTRmNzBcdTRmOTFcdTRmNmZcdTRmODZcdTRmOTZcdTUxMThcdTRmZDRcdTRmZGZcdTRmY2VcdTRmZDhcdTRmZGJcdTRmZDFcdTRmZGFcdTRmZDBcdTRmZTRcdTRmZTVcdTUwMWFcdTUwMjhcdTUwMTRc''@;'; put 'put ''dTUwMmFcdTUwMjVcdTUwMDVcdTRmMWNcdTRmZjZcdTUwMjFcdTUwMjlcdTUwMmNcdTRmZmVcdTRmZWZcdTUwMTFcdTUwMDZcdTUwNDNcdTUwNDdcdTY3MDNcdTUwNTVcdTUwNTBcdTUwNDhcdTUwNWFcdTUwNTZcdTUwNmNcdTUwNzhcdTUwODBcdTUwOWFcdTUwODVcdTUwYjRcdTUwYjIiXSxb''@;'; put 'put ''ImQxYTEiLCJcdTUwYzlcdTUwY2FcdTUwYjNcdTUwYzJcdTUwZDZcdTUwZGVcdTUwZTVcdTUwZWRcdTUwZTNcdTUwZWVcdTUwZjlcdTUwZjVcdTUxMDlcdTUxMDFcdTUxMDJcdTUxMTZcdTUxMTVcdTUxMTRcdTUxMWFcdTUxMjFcdTUxM2FcdTUxMzdcdTUxM2NcdTUxM2JcdTUxM2ZcdTUxNDBc''@;'; put 'put ''dTUxNTJcdTUxNGNcdTUxNTRcdTUxNjJcdTdhZjhcdTUxNjlcdTUxNmFcdTUxNmVcdTUxODBcdTUxODJcdTU2ZDhcdTUxOGNcdTUxODlcdTUxOGZcdTUxOTFcdTUxOTNcdTUxOTVcdTUxOTZcdTUxYTRcdTUxYTZcdTUxYTJcdTUxYTlcdTUxYWFcdTUxYWJcdTUxYjNcdTUxYjFcdTUxYjJcdTUx''@;'; put 'put ''YjBcdTUxYjVcdTUxYmRcdTUxYzVcdTUxYzlcdTUxZGJcdTUxZTBcdTg2NTVcdTUxZTlcdTUxZWRcdTUxZjBcdTUxZjVcdTUxZmVcdTUyMDRcdTUyMGJcdTUyMTRcdTUyMGVcdTUyMjdcdTUyMmFcdTUyMmVcdTUyMzNcdTUyMzlcdTUyNGZcdTUyNDRcdTUyNGJcdTUyNGNcdTUyNWVcdTUyNTRc''@;'; put 'put ''dTUyNmFcdTUyNzRcdTUyNjlcdTUyNzNcdTUyN2ZcdTUyN2RcdTUyOGRcdTUyOTRcdTUyOTJcdTUyNzFcdTUyODhcdTUyOTFcdThmYTgiXSxbImQyYTEiLCJcdThmYTdcdTUyYWNcdTUyYWRcdTUyYmNcdTUyYjVcdTUyYzFcdTUyY2RcdTUyZDdcdTUyZGVcdTUyZTNcdTUyZTZcdTk4ZWRcdTUy''@;'; put 'put ''ZTBcdTUyZjNcdTUyZjVcdTUyZjhcdTUyZjlcdTUzMDZcdTUzMDhcdTc1MzhcdTUzMGRcdTUzMTBcdTUzMGZcdTUzMTVcdTUzMWFcdTUzMjNcdTUzMmZcdTUzMzFcdTUzMzNcdTUzMzhcdTUzNDBcdTUzNDZcdTUzNDVcdTRlMTdcdTUzNDlcdTUzNGRcdTUxZDZcdTUzNWVcdTUzNjlcdTUzNmVc''@;'; put 'put ''dTU5MThcdTUzN2JcdTUzNzdcdTUzODJcdTUzOTZcdTUzYTBcdTUzYTZcdTUzYTVcdTUzYWVcdTUzYjBcdTUzYjZcdTUzYzNcdTdjMTJcdTk2ZDlcdTUzZGZcdTY2ZmNcdTcxZWVcdTUzZWVcdTUzZThcdTUzZWRcdTUzZmFcdTU0MDFcdTU0M2RcdTU0NDBcdTU0MmNcdTU0MmRcdTU0M2NcdTU0''@;'; put 'put ''MmVcdTU0MzZcdTU0MjlcdTU0MWRcdTU0NGVcdTU0OGZcdTU0NzVcdTU0OGVcdTU0NWZcdTU0NzFcdTU0NzdcdTU0NzBcdTU0OTJcdTU0N2JcdTU0ODBcdTU0NzZcdTU0ODRcdTU0OTBcdTU0ODZcdTU0YzdcdTU0YTJcdTU0YjhcdTU0YTVcdTU0YWNcdTU0YzRcdTU0YzhcdTU0YTgiXSxbImQz''@;'; put 'put ''YTEiLCJcdTU0YWJcdTU0YzJcdTU0YTRcdTU0YmVcdTU0YmNcdTU0ZDhcdTU0ZTVcdTU0ZTZcdTU1MGZcdTU1MTRcdTU0ZmRcdTU0ZWVcdTU0ZWRcdTU0ZmFcdTU0ZTJcdTU1MzlcdTU1NDBcdTU1NjNcdTU1NGNcdTU1MmVcdTU1NWNcdTU1NDVcdTU1NTZcdTU1NTdcdTU1MzhcdTU1MzNcdTU1''@;'; put 'put ''NWRcdTU1OTlcdTU1ODBcdTU0YWZcdTU1OGFcdTU1OWZcdTU1N2JcdTU1N2VcdTU1OThcdTU1OWVcdTU1YWVcdTU1N2NcdTU1ODNcdTU1YTlcdTU1ODdcdTU1YThcdTU1ZGFcdTU1YzVcdTU1ZGZcdTU1YzRcdTU1ZGNcdTU1ZTRcdTU1ZDRcdTU2MTRcdTU1ZjdcdTU2MTZcdTU1ZmVcdTU1ZmRc''@;'; put 'put ''dTU2MWJcdTU1ZjlcdTU2NGVcdTU2NTBcdTcxZGZcdTU2MzRcdTU2MzZcdTU2MzJcdTU2MzhcdTU2NmJcdTU2NjRcdTU2MmZcdTU2NmNcdTU2NmFcdTU2ODZcdTU2ODBcdTU2OGFcdTU2YTBcdTU2OTRcdTU2OGZcdTU2YTVcdTU2YWVcdTU2YjZcdTU2YjRcdTU2YzJcdTU2YmNcdTU2YzFcdTU2''@;'; put 'put ''YzNcdTU2YzBcdTU2YzhcdTU2Y2VcdTU2ZDFcdTU2ZDNcdTU2ZDdcdTU2ZWVcdTU2ZjlcdTU3MDBcdTU2ZmZcdTU3MDRcdTU3MDkiXSxbImQ0YTEiLCJcdTU3MDhcdTU3MGJcdTU3MGRcdTU3MTNcdTU3MThcdTU3MTZcdTU1YzdcdTU3MWNcdTU3MjZcdTU3MzdcdTU3MzhcdTU3NGVcdTU3M2Jc''@;'; put 'put ''dTU3NDBcdTU3NGZcdTU3NjlcdTU3YzBcdTU3ODhcdTU3NjFcdTU3N2ZcdTU3ODlcdTU3OTNcdTU3YTBcdTU3YjNcdTU3YTRcdTU3YWFcdTU3YjBcdTU3YzNcdTU3YzZcdTU3ZDRcdTU3ZDJcdTU3ZDNcdTU4MGFcdTU3ZDZcdTU3ZTNcdTU4MGJcdTU4MTlcdTU4MWRcdTU4NzJcdTU4MjFcdTU4''@;'; put 'put ''NjJcdTU4NGJcdTU4NzBcdTZiYzBcdTU4NTJcdTU4M2RcdTU4NzlcdTU4ODVcdTU4YjlcdTU4OWZcdTU4YWJcdTU4YmFcdTU4ZGVcdTU4YmJcdTU4YjhcdTU4YWVcdTU4YzVcdTU4ZDNcdTU4ZDFcdTU4ZDdcdTU4ZDlcdTU4ZDhcdTU4ZTVcdTU4ZGNcdTU4ZTRcdTU4ZGZcdTU4ZWZcdTU4ZmFc''@;'; put 'put ''dTU4ZjlcdTU4ZmJcdTU4ZmNcdTU4ZmRcdTU5MDJcdTU5MGFcdTU5MTBcdTU5MWJcdTY4YTZcdTU5MjVcdTU5MmNcdTU5MmRcdTU5MzJcdTU5MzhcdTU5M2VcdTdhZDJcdTU5NTVcdTU5NTBcdTU5NGVcdTU5NWFcdTU5NThcdTU5NjJcdTU5NjBcdTU5NjdcdTU5NmNcdTU5NjkiXSxbImQ1YTEi''@;'; put 'put ''LCJcdTU5NzhcdTU5ODFcdTU5OWRcdTRmNWVcdTRmYWJcdTU5YTNcdTU5YjJcdTU5YzZcdTU5ZThcdTU5ZGNcdTU5OGRcdTU5ZDlcdTU5ZGFcdTVhMjVcdTVhMWZcdTVhMTFcdTVhMWNcdTVhMDlcdTVhMWFcdTVhNDBcdTVhNmNcdTVhNDlcdTVhMzVcdTVhMzZcdTVhNjJcdTVhNmFcdTVhOWFc''@;'; put 'put ''dTVhYmNcdTVhYmVcdTVhY2JcdTVhYzJcdTVhYmRcdTVhZTNcdTVhZDdcdTVhZTZcdTVhZTlcdTVhZDZcdTVhZmFcdTVhZmJcdTViMGNcdTViMGJcdTViMTZcdTViMzJcdTVhZDBcdTViMmFcdTViMzZcdTViM2VcdTViNDNcdTViNDVcdTViNDBcdTViNTFcdTViNTVcdTViNWFcdTViNWJcdTVi''@;'; put 'put ''NjVcdTViNjlcdTViNzBcdTViNzNcdTViNzVcdTViNzhcdTY1ODhcdTViN2FcdTViODBcdTViODNcdTViYTZcdTViYjhcdTViYzNcdTViYzdcdTViYzlcdTViZDRcdTViZDBcdTViZTRcdTViZTZcdTViZTJcdTViZGVcdTViZTVcdTViZWJcdTViZjBcdTViZjZcdTViZjNcdTVjMDVcdTVjMDdc''@;'; put 'put ''dTVjMDhcdTVjMGRcdTVjMTNcdTVjMjBcdTVjMjJcdTVjMjhcdTVjMzhcdTVjMzlcdTVjNDFcdTVjNDZcdTVjNGVcdTVjNTMiXSxbImQ2YTEiLCJcdTVjNTBcdTVjNGZcdTViNzFcdTVjNmNcdTVjNmVcdTRlNjJcdTVjNzZcdTVjNzlcdTVjOGNcdTVjOTFcdTVjOTRcdTU5OWJcdTVjYWJcdTVj''@;'; put 'put ''YmJcdTVjYjZcdTVjYmNcdTVjYjdcdTVjYzVcdTVjYmVcdTVjYzdcdTVjZDlcdTVjZTlcdTVjZmRcdTVjZmFcdTVjZWRcdTVkOGNcdTVjZWFcdTVkMGJcdTVkMTVcdTVkMTdcdTVkNWNcdTVkMWZcdTVkMWJcdTVkMTFcdTVkMTRcdTVkMjJcdTVkMWFcdTVkMTlcdTVkMThcdTVkNGNcdTVkNTJc''@;'; put 'put ''dTVkNGVcdTVkNGJcdTVkNmNcdTVkNzNcdTVkNzZcdTVkODdcdTVkODRcdTVkODJcdTVkYTJcdTVkOWRcdTVkYWNcdTVkYWVcdTVkYmRcdTVkOTBcdTVkYjdcdTVkYmNcdTVkYzlcdTVkY2RcdTVkZDNcdTVkZDJcdTVkZDZcdTVkZGJcdTVkZWJcdTVkZjJcdTVkZjVcdTVlMGJcdTVlMWFcdTVl''@;'; put 'put ''MTlcdTVlMTFcdTVlMWJcdTVlMzZcdTVlMzdcdTVlNDRcdTVlNDNcdTVlNDBcdTVlNGVcdTVlNTdcdTVlNTRcdTVlNWZcdTVlNjJcdTVlNjRcdTVlNDdcdTVlNzVcdTVlNzZcdTVlN2FcdTllYmNcdTVlN2ZcdTVlYTBcdTVlYzFcdTVlYzJcdTVlYzhcdTVlZDBcdTVlY2YiXSxbImQ3YTEiLCJc''@;'; put 'put ''dTVlZDZcdTVlZTNcdTVlZGRcdTVlZGFcdTVlZGJcdTVlZTJcdTVlZTFcdTVlZThcdTVlZTlcdTVlZWNcdTVlZjFcdTVlZjNcdTVlZjBcdTVlZjRcdTVlZjhcdTVlZmVcdTVmMDNcdTVmMDlcdTVmNWRcdTVmNWNcdTVmMGJcdTVmMTFcdTVmMTZcdTVmMjlcdTVmMmRcdTVmMzhcdTVmNDFcdTVm''@;'; put 'put ''NDhcdTVmNGNcdTVmNGVcdTVmMmZcdTVmNTFcdTVmNTZcdTVmNTdcdTVmNTlcdTVmNjFcdTVmNmRcdTVmNzNcdTVmNzdcdTVmODNcdTVmODJcdTVmN2ZcdTVmOGFcdTVmODhcdTVmOTFcdTVmODdcdTVmOWVcdTVmOTlcdTVmOThcdTVmYTBcdTVmYThcdTVmYWRcdTVmYmNcdTVmZDZcdTVmZmJc''@;'; put 'put ''dTVmZTRcdTVmZjhcdTVmZjFcdTVmZGRcdTYwYjNcdTVmZmZcdTYwMjFcdTYwNjBcdTYwMTlcdTYwMTBcdTYwMjlcdTYwMGVcdTYwMzFcdTYwMWJcdTYwMTVcdTYwMmJcdTYwMjZcdTYwMGZcdTYwM2FcdTYwNWFcdTYwNDFcdTYwNmFcdTYwNzdcdTYwNWZcdTYwNGFcdTYwNDZcdTYwNGRcdTYw''@;'; put 'put ''NjNcdTYwNDNcdTYwNjRcdTYwNDJcdTYwNmNcdTYwNmJcdTYwNTlcdTYwODFcdTYwOGRcdTYwZTdcdTYwODNcdTYwOWEiXSxbImQ4YTEiLCJcdTYwODRcdTYwOWJcdTYwOTZcdTYwOTdcdTYwOTJcdTYwYTdcdTYwOGJcdTYwZTFcdTYwYjhcdTYwZTBcdTYwZDNcdTYwYjRcdTVmZjBcdTYwYmRc''@;'; put 'put ''dTYwYzZcdTYwYjVcdTYwZDhcdTYxNGRcdTYxMTVcdTYxMDZcdTYwZjZcdTYwZjdcdTYxMDBcdTYwZjRcdTYwZmFcdTYxMDNcdTYxMjFcdTYwZmJcdTYwZjFcdTYxMGRcdTYxMGVcdTYxNDdcdTYxM2VcdTYxMjhcdTYxMjdcdTYxNGFcdTYxM2ZcdTYxM2NcdTYxMmNcdTYxMzRcdTYxM2RcdTYx''@;'; put 'put ''NDJcdTYxNDRcdTYxNzNcdTYxNzdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNmJcdTYxNzRcdTYxNmZcdTYxNjVcdTYxNzFcdTYxNWZcdTYxNWRcdTYxNTNcdTYxNzVcdTYxOTlcdTYxOTZcdTYxODdcdTYxYWNcdTYxOTRcdTYxOWFcdTYxOGFcdTYxOTFcdTYxYWJcdTYxYWVcdTYxY2NcdTYxY2Fc''@;'; put 'put ''dTYxYzlcdTYxZjdcdTYxYzhcdTYxYzNcdTYxYzZcdTYxYmFcdTYxY2JcdTdmNzlcdTYxY2RcdTYxZTZcdTYxZTNcdTYxZjZcdTYxZmFcdTYxZjRcdTYxZmZcdTYxZmRcdTYxZmNcdTYxZmVcdTYyMDBcdTYyMDhcdTYyMDlcdTYyMGRcdTYyMGNcdTYyMTRcdTYyMWIiXSxbImQ5YTEiLCJcdTYy''@;'; put 'put ''MWVcdTYyMjFcdTYyMmFcdTYyMmVcdTYyMzBcdTYyMzJcdTYyMzNcdTYyNDFcdTYyNGVcdTYyNWVcdTYyNjNcdTYyNWJcdTYyNjBcdTYyNjhcdTYyN2NcdTYyODJcdTYyODlcdTYyN2VcdTYyOTJcdTYyOTNcdTYyOTZcdTYyZDRcdTYyODNcdTYyOTRcdTYyZDdcdTYyZDFcdTYyYmJcdTYyY2Zc''@;'; put 'put ''dTYyZmZcdTYyYzZcdTY0ZDRcdTYyYzhcdTYyZGNcdTYyY2NcdTYyY2FcdTYyYzJcdTYyYzdcdTYyOWJcdTYyYzlcdTYzMGNcdTYyZWVcdTYyZjFcdTYzMjdcdTYzMDJcdTYzMDhcdTYyZWZcdTYyZjVcdTYzNTBcdTYzM2VcdTYzNGRcdTY0MWNcdTYzNGZcdTYzOTZcdTYzOGVcdTYzODBcdTYz''@;'; put 'put ''YWJcdTYzNzZcdTYzYTNcdTYzOGZcdTYzODlcdTYzOWZcdTYzYjVcdTYzNmJcdTYzNjlcdTYzYmVcdTYzZTlcdTYzYzBcdTYzYzZcdTYzZTNcdTYzYzlcdTYzZDJcdTYzZjZcdTYzYzRcdTY0MTZcdTY0MzRcdTY0MDZcdTY0MTNcdTY0MjZcdTY0MzZcdTY1MWRcdTY0MTdcdTY0MjhcdTY0MGZc''@;'; put 'put ''dTY0NjdcdTY0NmZcdTY0NzZcdTY0NGVcdTY1MmFcdTY0OTVcdTY0OTNcdTY0YTVcdTY0YTlcdTY0ODhcdTY0YmMiXSxbImRhYTEiLCJcdTY0ZGFcdTY0ZDJcdTY0YzVcdTY0YzdcdTY0YmJcdTY0ZDhcdTY0YzJcdTY0ZjFcdTY0ZTdcdTgyMDlcdTY0ZTBcdTY0ZTFcdTYyYWNcdTY0ZTNcdTY0''@;'; put 'put ''ZWZcdTY1MmNcdTY0ZjZcdTY0ZjRcdTY0ZjJcdTY0ZmFcdTY1MDBcdTY0ZmRcdTY1MThcdTY1MWNcdTY1MDVcdTY1MjRcdTY1MjNcdTY1MmJcdTY1MzRcdTY1MzVcdTY1MzdcdTY1MzZcdTY1MzhcdTc1NGJcdTY1NDhcdTY1NTZcdTY1NTVcdTY1NGRcdTY1NThcdTY1NWVcdTY1NWRcdTY1NzJc''@;'; put 'put ''dTY1NzhcdTY1ODJcdTY1ODNcdThiOGFcdTY1OWJcdTY1OWZcdTY1YWJcdTY1YjdcdTY1YzNcdTY1YzZcdTY1YzFcdTY1YzRcdTY1Y2NcdTY1ZDJcdTY1ZGJcdTY1ZDlcdTY1ZTBcdTY1ZTFcdTY1ZjFcdTY3NzJcdTY2MGFcdTY2MDNcdTY1ZmJcdTY3NzNcdTY2MzVcdTY2MzZcdTY2MzRcdTY2''@;'; put 'put ''MWNcdTY2NGZcdTY2NDRcdTY2NDlcdTY2NDFcdTY2NWVcdTY2NWRcdTY2NjRcdTY2NjdcdTY2NjhcdTY2NWZcdTY2NjJcdTY2NzBcdTY2ODNcdTY2ODhcdTY2OGVcdTY2ODlcdTY2ODRcdTY2OThcdTY2OWRcdTY2YzFcdTY2YjlcdTY2YzlcdTY2YmVcdTY2YmMiXSxbImRiYTEiLCJcdTY2YzRc''@;'; put 'put ''dTY2YjhcdTY2ZDZcdTY2ZGFcdTY2ZTBcdTY2M2ZcdTY2ZTZcdTY2ZTlcdTY2ZjBcdTY2ZjVcdTY2ZjdcdTY3MGZcdTY3MTZcdTY3MWVcdTY3MjZcdTY3MjdcdTk3MzhcdTY3MmVcdTY3M2ZcdTY3MzZcdTY3NDFcdTY3MzhcdTY3MzdcdTY3NDZcdTY3NWVcdTY3NjBcdTY3NTlcdTY3NjNcdTY3''@;'; put 'put ''NjRcdTY3ODlcdTY3NzBcdTY3YTlcdTY3N2NcdTY3NmFcdTY3OGNcdTY3OGJcdTY3YTZcdTY3YTFcdTY3ODVcdTY3YjdcdTY3ZWZcdTY3YjRcdTY3ZWNcdTY3YjNcdTY3ZTlcdTY3YjhcdTY3ZTRcdTY3ZGVcdTY3ZGRcdTY3ZTJcdTY3ZWVcdTY3YjlcdTY3Y2VcdTY3YzZcdTY3ZTdcdTZhOWNc''@;'; put 'put ''dTY4MWVcdTY4NDZcdTY4MjlcdTY4NDBcdTY4NGRcdTY4MzJcdTY4NGVcdTY4YjNcdTY4MmJcdTY4NTlcdTY4NjNcdTY4NzdcdTY4N2ZcdTY4OWZcdTY4OGZcdTY4YWRcdTY4OTRcdTY4OWRcdTY4OWJcdTY4ODNcdTZhYWVcdTY4YjlcdTY4NzRcdTY4YjVcdTY4YTBcdTY4YmFcdTY5MGZcdTY4''@;'; put 'put ''OGRcdTY4N2VcdTY5MDFcdTY4Y2FcdTY5MDhcdTY4ZDhcdTY5MjJcdTY5MjZcdTY4ZTFcdTY5MGNcdTY4Y2QiXSxbImRjYTEiLCJcdTY4ZDRcdTY4ZTdcdTY4ZDVcdTY5MzZcdTY5MTJcdTY5MDRcdTY4ZDdcdTY4ZTNcdTY5MjVcdTY4ZjlcdTY4ZTBcdTY4ZWZcdTY5MjhcdTY5MmFcdTY5MWFc''@;'; put 'put ''dTY5MjNcdTY5MjFcdTY4YzZcdTY5NzlcdTY5NzdcdTY5NWNcdTY5NzhcdTY5NmJcdTY5NTRcdTY5N2VcdTY5NmVcdTY5MzlcdTY5NzRcdTY5M2RcdTY5NTlcdTY5MzBcdTY5NjFcdTY5NWVcdTY5NWRcdTY5ODFcdTY5NmFcdTY5YjJcdTY5YWVcdTY5ZDBcdTY5YmZcdTY5YzFcdTY5ZDNcdTY5''@;'; put 'put ''YmVcdTY5Y2VcdTViZThcdTY5Y2FcdTY5ZGRcdTY5YmJcdTY5YzNcdTY5YTdcdTZhMmVcdTY5OTFcdTY5YTBcdTY5OWNcdTY5OTVcdTY5YjRcdTY5ZGVcdTY5ZThcdTZhMDJcdTZhMWJcdTY5ZmZcdTZiMGFcdTY5ZjlcdTY5ZjJcdTY5ZTdcdTZhMDVcdTY5YjFcdTZhMWVcdTY5ZWRcdTZhMTRc''@;'; put 'put ''dTY5ZWJcdTZhMGFcdTZhMTJcdTZhYzFcdTZhMjNcdTZhMTNcdTZhNDRcdTZhMGNcdTZhNzJcdTZhMzZcdTZhNzhcdTZhNDdcdTZhNjJcdTZhNTlcdTZhNjZcdTZhNDhcdTZhMzhcdTZhMjJcdTZhOTBcdTZhOGRcdTZhYTBcdTZhODRcdTZhYTJcdTZhYTMiXSxbImRkYTEiLCJcdTZhOTdcdTg2''@;'; put 'put ''MTdcdTZhYmJcdTZhYzNcdTZhYzJcdTZhYjhcdTZhYjNcdTZhYWNcdTZhZGVcdTZhZDFcdTZhZGZcdTZhYWFcdTZhZGFcdTZhZWFcdTZhZmJcdTZiMDVcdTg2MTZcdTZhZmFcdTZiMTJcdTZiMTZcdTliMzFcdTZiMWZcdTZiMzhcdTZiMzdcdTc2ZGNcdTZiMzlcdTk4ZWVcdTZiNDdcdTZiNDNc''@;'; put 'put ''dTZiNDlcdTZiNTBcdTZiNTlcdTZiNTRcdTZiNWJcdTZiNWZcdTZiNjFcdTZiNzhcdTZiNzlcdTZiN2ZcdTZiODBcdTZiODRcdTZiODNcdTZiOGRcdTZiOThcdTZiOTVcdTZiOWVcdTZiYTRcdTZiYWFcdTZiYWJcdTZiYWZcdTZiYjJcdTZiYjFcdTZiYjNcdTZiYjdcdTZiYmNcdTZiYzZcdTZi''@;'; put 'put ''Y2JcdTZiZDNcdTZiZGZcdTZiZWNcdTZiZWJcdTZiZjNcdTZiZWZcdTllYmVcdTZjMDhcdTZjMTNcdTZjMTRcdTZjMWJcdTZjMjRcdTZjMjNcdTZjNWVcdTZjNTVcdTZjNjJcdTZjNmFcdTZjODJcdTZjOGRcdTZjOWFcdTZjODFcdTZjOWJcdTZjN2VcdTZjNjhcdTZjNzNcdTZjOTJcdTZjOTBc''@;'; put 'put ''dTZjYzRcdTZjZjFcdTZjZDNcdTZjYmRcdTZjZDdcdTZjYzVcdTZjZGRcdTZjYWVcdTZjYjFcdTZjYmUiXSxbImRlYTEiLCJcdTZjYmFcdTZjZGJcdTZjZWZcdTZjZDlcdTZjZWFcdTZkMWZcdTg4NGRcdTZkMzZcdTZkMmJcdTZkM2RcdTZkMzhcdTZkMTlcdTZkMzVcdTZkMzNcdTZkMTJcdTZk''@;'; put 'put ''MGNcdTZkNjNcdTZkOTNcdTZkNjRcdTZkNWFcdTZkNzlcdTZkNTlcdTZkOGVcdTZkOTVcdTZmZTRcdTZkODVcdTZkZjlcdTZlMTVcdTZlMGFcdTZkYjVcdTZkYzdcdTZkZTZcdTZkYjhcdTZkYzZcdTZkZWNcdTZkZGVcdTZkY2NcdTZkZThcdTZkZDJcdTZkYzVcdTZkZmFcdTZkZDlcdTZkZTRc''@;'; put 'put ''dTZkZDVcdTZkZWFcdTZkZWVcdTZlMmRcdTZlNmVcdTZlMmVcdTZlMTlcdTZlNzJcdTZlNWZcdTZlM2VcdTZlMjNcdTZlNmJcdTZlMmJcdTZlNzZcdTZlNGRcdTZlMWZcdTZlNDNcdTZlM2FcdTZlNGVcdTZlMjRcdTZlZmZcdTZlMWRcdTZlMzhcdTZlODJcdTZlYWFcdTZlOThcdTZlYzlcdTZl''@;'; put 'put ''YjdcdTZlZDNcdTZlYmRcdTZlYWZcdTZlYzRcdTZlYjJcdTZlZDRcdTZlZDVcdTZlOGZcdTZlYTVcdTZlYzJcdTZlOWZcdTZmNDFcdTZmMTFcdTcwNGNcdTZlZWNcdTZlZjhcdTZlZmVcdTZmM2ZcdTZlZjJcdTZmMzFcdTZlZWZcdTZmMzJcdTZlY2MiXSxbImRmYTEiLCJcdTZmM2VcdTZmMTNc''@;'; put 'put ''dTZlZjdcdTZmODZcdTZmN2FcdTZmNzhcdTZmODFcdTZmODBcdTZmNmZcdTZmNWJcdTZmZjNcdTZmNmRcdTZmODJcdTZmN2NcdTZmNThcdTZmOGVcdTZmOTFcdTZmYzJcdTZmNjZcdTZmYjNcdTZmYTNcdTZmYTFcdTZmYTRcdTZmYjlcdTZmYzZcdTZmYWFcdTZmZGZcdTZmZDVcdTZmZWNcdTZm''@;'; put 'put ''ZDRcdTZmZDhcdTZmZjFcdTZmZWVcdTZmZGJcdTcwMDlcdTcwMGJcdTZmZmFcdTcwMTFcdTcwMDFcdTcwMGZcdTZmZmVcdTcwMWJcdTcwMWFcdTZmNzRcdTcwMWRcdTcwMThcdTcwMWZcdTcwMzBcdTcwM2VcdTcwMzJcdTcwNTFcdTcwNjNcdTcwOTlcdTcwOTJcdTcwYWZcdTcwZjFcdTcwYWNc''@;'; put 'put ''dTcwYjhcdTcwYjNcdTcwYWVcdTcwZGZcdTcwY2JcdTcwZGRcdTcwZDlcdTcxMDlcdTcwZmRcdTcxMWNcdTcxMTlcdTcxNjVcdTcxNTVcdTcxODhcdTcxNjZcdTcxNjJcdTcxNGNcdTcxNTZcdTcxNmNcdTcxOGZcdTcxZmJcdTcxODRcdTcxOTVcdTcxYThcdTcxYWNcdTcxZDdcdTcxYjlcdTcx''@;'; put 'put ''YmVcdTcxZDJcdTcxYzlcdTcxZDRcdTcxY2VcdTcxZTBcdTcxZWNcdTcxZTdcdTcxZjVcdTcxZmMiXSxbImUwYTEiLCJcdTcxZjlcdTcxZmZcdTcyMGRcdTcyMTBcdTcyMWJcdTcyMjhcdTcyMmRcdTcyMmNcdTcyMzBcdTcyMzJcdTcyM2JcdTcyM2NcdTcyM2ZcdTcyNDBcdTcyNDZcdTcyNGJc''@;'; put 'put ''dTcyNThcdTcyNzRcdTcyN2VcdTcyODJcdTcyODFcdTcyODdcdTcyOTJcdTcyOTZcdTcyYTJcdTcyYTdcdTcyYjlcdTcyYjJcdTcyYzNcdTcyYzZcdTcyYzRcdTcyY2VcdTcyZDJcdTcyZTJcdTcyZTBcdTcyZTFcdTcyZjlcdTcyZjdcdTUwMGZcdTczMTdcdTczMGFcdTczMWNcdTczMTZcdTcz''@;'; put 'put ''MWRcdTczMzRcdTczMmZcdTczMjlcdTczMjVcdTczM2VcdTczNGVcdTczNGZcdTllZDhcdTczNTdcdTczNmFcdTczNjhcdTczNzBcdTczNzhcdTczNzVcdTczN2JcdTczN2FcdTczYzhcdTczYjNcdTczY2VcdTczYmJcdTczYzBcdTczZTVcdTczZWVcdTczZGVcdTc0YTJcdTc0MDVcdTc0NmZc''@;'; put 'put ''dTc0MjVcdTczZjhcdTc0MzJcdTc0M2FcdTc0NTVcdTc0M2ZcdTc0NWZcdTc0NTlcdTc0NDFcdTc0NWNcdTc0NjlcdTc0NzBcdTc0NjNcdTc0NmFcdTc0NzZcdTc0N2VcdTc0OGJcdTc0OWVcdTc0YTdcdTc0Y2FcdTc0Y2ZcdTc0ZDRcdTczZjEiXSxbImUxYTEiLCJcdTc0ZTBcdTc0ZTNcdTc0''@;'; put 'put ''ZTdcdTc0ZTlcdTc0ZWVcdTc0ZjJcdTc0ZjBcdTc0ZjFcdTc0ZjhcdTc0ZjdcdTc1MDRcdTc1MDNcdTc1MDVcdTc1MGNcdTc1MGVcdTc1MGRcdTc1MTVcdTc1MTNcdTc1MWVcdTc1MjZcdTc1MmNcdTc1M2NcdTc1NDRcdTc1NGRcdTc1NGFcdTc1NDlcdTc1NWJcdTc1NDZcdTc1NWFcdTc1Njlc''@;'; put 'put ''dTc1NjRcdTc1NjdcdTc1NmJcdTc1NmRcdTc1NzhcdTc1NzZcdTc1ODZcdTc1ODdcdTc1NzRcdTc1OGFcdTc1ODlcdTc1ODJcdTc1OTRcdTc1OWFcdTc1OWRcdTc1YTVcdTc1YTNcdTc1YzJcdTc1YjNcdTc1YzNcdTc1YjVcdTc1YmRcdTc1YjhcdTc1YmNcdTc1YjFcdTc1Y2RcdTc1Y2FcdTc1''@;'; put 'put ''ZDJcdTc1ZDlcdTc1ZTNcdTc1ZGVcdTc1ZmVcdTc1ZmZcdTc1ZmNcdTc2MDFcdTc1ZjBcdTc1ZmFcdTc1ZjJcdTc1ZjNcdTc2MGJcdTc2MGRcdTc2MDlcdTc2MWZcdTc2MjdcdTc2MjBcdTc2MjFcdTc2MjJcdTc2MjRcdTc2MzRcdTc2MzBcdTc2M2JcdTc2NDdcdTc2NDhcdTc2NDZcdTc2NWNc''@;'; put 'put ''dTc2NThcdTc2NjFcdTc2NjJcdTc2NjhcdTc2NjlcdTc2NmFcdTc2NjdcdTc2NmNcdTc2NzAiXSxbImUyYTEiLCJcdTc2NzJcdTc2NzZcdTc2NzhcdTc2N2NcdTc2ODBcdTc2ODNcdTc2ODhcdTc2OGJcdTc2OGVcdTc2OTZcdTc2OTNcdTc2OTlcdTc2OWFcdTc2YjBcdTc2YjRcdTc2YjhcdTc2''@;'; put 'put ''YjlcdTc2YmFcdTc2YzJcdTc2Y2RcdTc2ZDZcdTc2ZDJcdTc2ZGVcdTc2ZTFcdTc2ZTVcdTc2ZTdcdTc2ZWFcdTg2MmZcdTc2ZmJcdTc3MDhcdTc3MDdcdTc3MDRcdTc3MjlcdTc3MjRcdTc3MWVcdTc3MjVcdTc3MjZcdTc3MWJcdTc3MzdcdTc3MzhcdTc3NDdcdTc3NWFcdTc3NjhcdTc3NmJc''@;'; put 'put ''dTc3NWJcdTc3NjVcdTc3N2ZcdTc3N2VcdTc3NzlcdTc3OGVcdTc3OGJcdTc3OTFcdTc3YTBcdTc3OWVcdTc3YjBcdTc3YjZcdTc3YjlcdTc3YmZcdTc3YmNcdTc3YmRcdTc3YmJcdTc3YzdcdTc3Y2RcdTc3ZDdcdTc3ZGFcdTc3ZGNcdTc3ZTNcdTc3ZWVcdTc3ZmNcdTc4MGNcdTc4MTJcdTc5''@;'; put 'put ''MjZcdTc4MjBcdTc5MmFcdTc4NDVcdTc4OGVcdTc4NzRcdTc4ODZcdTc4N2NcdTc4OWFcdTc4OGNcdTc4YTNcdTc4YjVcdTc4YWFcdTc4YWZcdTc4ZDFcdTc4YzZcdTc4Y2JcdTc4ZDRcdTc4YmVcdTc4YmNcdTc4YzVcdTc4Y2FcdTc4ZWMiXSxbImUzYTEiLCJcdTc4ZTdcdTc4ZGFcdTc4ZmRc''@;'; put 'put ''dTc4ZjRcdTc5MDdcdTc5MTJcdTc5MTFcdTc5MTlcdTc5MmNcdTc5MmJcdTc5NDBcdTc5NjBcdTc5NTdcdTc5NWZcdTc5NWFcdTc5NTVcdTc5NTNcdTc5N2FcdTc5N2ZcdTc5OGFcdTc5OWRcdTc5YTdcdTlmNGJcdTc5YWFcdTc5YWVcdTc5YjNcdTc5YjlcdTc5YmFcdTc5YzlcdTc5ZDVcdTc5''@;'; put 'put ''ZTdcdTc5ZWNcdTc5ZTFcdTc5ZTNcdTdhMDhcdTdhMGRcdTdhMThcdTdhMTlcdTdhMjBcdTdhMWZcdTc5ODBcdTdhMzFcdTdhM2JcdTdhM2VcdTdhMzdcdTdhNDNcdTdhNTdcdTdhNDlcdTdhNjFcdTdhNjJcdTdhNjlcdTlmOWRcdTdhNzBcdTdhNzlcdTdhN2RcdTdhODhcdTdhOTdcdTdhOTVc''@;'; put 'put ''dTdhOThcdTdhOTZcdTdhYTlcdTdhYzhcdTdhYjBcdTdhYjZcdTdhYzVcdTdhYzRcdTdhYmZcdTkwODNcdTdhYzdcdTdhY2FcdTdhY2RcdTdhY2ZcdTdhZDVcdTdhZDNcdTdhZDlcdTdhZGFcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTZcdTdhZWRcdTdhZjBcdTdiMDJcdTdiMGZcdTdiMGFcdTdi''@;'; put 'put ''MDZcdTdiMzNcdTdiMThcdTdiMTlcdTdiMWVcdTdiMzVcdTdiMjhcdTdiMzZcdTdiNTAiXSxbImU0YTEiLCJcdTdiN2FcdTdiMDRcdTdiNGRcdTdiMGJcdTdiNGNcdTdiNDVcdTdiNzVcdTdiNjVcdTdiNzRcdTdiNjdcdTdiNzBcdTdiNzFcdTdiNmNcdTdiNmVcdTdiOWRcdTdiOThcdTdiOWZc''@;'; put 'put ''dTdiOGRcdTdiOWNcdTdiOWFcdTdiOGJcdTdiOTJcdTdiOGZcdTdiNWRcdTdiOTlcdTdiY2JcdTdiYzFcdTdiY2NcdTdiY2ZcdTdiYjRcdTdiYzZcdTdiZGRcdTdiZTlcdTdjMTFcdTdjMTRcdTdiZTZcdTdiZTVcdTdjNjBcdTdjMDBcdTdjMDdcdTdjMTNcdTdiZjNcdTdiZjdcdTdjMTdcdTdj''@;'; put 'put ''MGRcdTdiZjZcdTdjMjNcdTdjMjdcdTdjMmFcdTdjMWZcdTdjMzdcdTdjMmJcdTdjM2RcdTdjNGNcdTdjNDNcdTdjNTRcdTdjNGZcdTdjNDBcdTdjNTBcdTdjNThcdTdjNWZcdTdjNjRcdTdjNTZcdTdjNjVcdTdjNmNcdTdjNzVcdTdjODNcdTdjOTBcdTdjYTRcdTdjYWRcdTdjYTJcdTdjYWJc''@;'; put 'put ''dTdjYTFcdTdjYThcdTdjYjNcdTdjYjJcdTdjYjFcdTdjYWVcdTdjYjlcdTdjYmRcdTdjYzBcdTdjYzVcdTdjYzJcdTdjZDhcdTdjZDJcdTdjZGNcdTdjZTJcdTliM2JcdTdjZWZcdTdjZjJcdTdjZjRcdTdjZjZcdTdjZmFcdTdkMDYiXSxbImU1YTEiLCJcdTdkMDJcdTdkMWNcdTdkMTVcdTdk''@;'; put 'put ''MGFcdTdkNDVcdTdkNGJcdTdkMmVcdTdkMzJcdTdkM2ZcdTdkMzVcdTdkNDZcdTdkNzNcdTdkNTZcdTdkNGVcdTdkNzJcdTdkNjhcdTdkNmVcdTdkNGZcdTdkNjNcdTdkOTNcdTdkODlcdTdkNWJcdTdkOGZcdTdkN2RcdTdkOWJcdTdkYmFcdTdkYWVcdTdkYTNcdTdkYjVcdTdkYzdcdTdkYmRc''@;'; put 'put ''dTdkYWJcdTdlM2RcdTdkYTJcdTdkYWZcdTdkZGNcdTdkYjhcdTdkOWZcdTdkYjBcdTdkZDhcdTdkZGRcdTdkZTRcdTdkZGVcdTdkZmJcdTdkZjJcdTdkZTFcdTdlMDVcdTdlMGFcdTdlMjNcdTdlMjFcdTdlMTJcdTdlMzFcdTdlMWZcdTdlMDlcdTdlMGJcdTdlMjJcdTdlNDZcdTdlNjZcdTdl''@;'; put 'put ''M2JcdTdlMzVcdTdlMzlcdTdlNDNcdTdlMzdcdTdlMzJcdTdlM2FcdTdlNjdcdTdlNWRcdTdlNTZcdTdlNWVcdTdlNTlcdTdlNWFcdTdlNzlcdTdlNmFcdTdlNjlcdTdlN2NcdTdlN2JcdTdlODNcdTdkZDVcdTdlN2RcdThmYWVcdTdlN2ZcdTdlODhcdTdlODlcdTdlOGNcdTdlOTJcdTdlOTBc''@;'; put 'put ''dTdlOTNcdTdlOTRcdTdlOTZcdTdlOGVcdTdlOWJcdTdlOWNcdTdmMzhcdTdmM2EiXSxbImU2YTEiLCJcdTdmNDVcdTdmNGNcdTdmNGRcdTdmNGVcdTdmNTBcdTdmNTFcdTdmNTVcdTdmNTRcdTdmNThcdTdmNWZcdTdmNjBcdTdmNjhcdTdmNjlcdTdmNjdcdTdmNzhcdTdmODJcdTdmODZcdTdm''@;'; put 'put ''ODNcdTdmODhcdTdmODdcdTdmOGNcdTdmOTRcdTdmOWVcdTdmOWRcdTdmOWFcdTdmYTNcdTdmYWZcdTdmYjJcdTdmYjlcdTdmYWVcdTdmYjZcdTdmYjhcdThiNzFcdTdmYzVcdTdmYzZcdTdmY2FcdTdmZDVcdTdmZDRcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZjNcdTdmZjlcdTk4ZGNcdTgwMDZc''@;'; put 'put ''dTgwMDRcdTgwMGJcdTgwMTJcdTgwMThcdTgwMTlcdTgwMWNcdTgwMjFcdTgwMjhcdTgwM2ZcdTgwM2JcdTgwNGFcdTgwNDZcdTgwNTJcdTgwNThcdTgwNWFcdTgwNWZcdTgwNjJcdTgwNjhcdTgwNzNcdTgwNzJcdTgwNzBcdTgwNzZcdTgwNzlcdTgwN2RcdTgwN2ZcdTgwODRcdTgwODZcdTgw''@;'; put 'put ''ODVcdTgwOWJcdTgwOTNcdTgwOWFcdTgwYWRcdTUxOTBcdTgwYWNcdTgwZGJcdTgwZTVcdTgwZDlcdTgwZGRcdTgwYzRcdTgwZGFcdTgwZDZcdTgxMDlcdTgwZWZcdTgwZjFcdTgxMWJcdTgxMjlcdTgxMjNcdTgxMmZcdTgxNGIiXSxbImU3YTEiLCJcdTk2OGJcdTgxNDZcdTgxM2VcdTgxNTNc''@;'; put 'put ''dTgxNTFcdTgwZmNcdTgxNzFcdTgxNmVcdTgxNjVcdTgxNjZcdTgxNzRcdTgxODNcdTgxODhcdTgxOGFcdTgxODBcdTgxODJcdTgxYTBcdTgxOTVcdTgxYTRcdTgxYTNcdTgxNWZcdTgxOTNcdTgxYTlcdTgxYjBcdTgxYjVcdTgxYmVcdTgxYjhcdTgxYmRcdTgxYzBcdTgxYzJcdTgxYmFcdTgx''@;'; put 'put ''YzlcdTgxY2RcdTgxZDFcdTgxZDlcdTgxZDhcdTgxYzhcdTgxZGFcdTgxZGZcdTgxZTBcdTgxZTdcdTgxZmFcdTgxZmJcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDVcdTgyMDdcdTgyMGFcdTgyMGRcdTgyMTBcdTgyMTZcdTgyMjlcdTgyMmJcdTgyMzhcdTgyMzNcdTgyNDBcdTgyNTlcdTgyNThc''@;'; put 'put ''dTgyNWRcdTgyNWFcdTgyNWZcdTgyNjRcdTgyNjJcdTgyNjhcdTgyNmFcdTgyNmJcdTgyMmVcdTgyNzFcdTgyNzdcdTgyNzhcdTgyN2VcdTgyOGRcdTgyOTJcdTgyYWJcdTgyOWZcdTgyYmJcdTgyYWNcdTgyZTFcdTgyZTNcdTgyZGZcdTgyZDJcdTgyZjRcdTgyZjNcdTgyZmFcdTgzOTNcdTgz''@;'; put 'put ''MDNcdTgyZmJcdTgyZjlcdTgyZGVcdTgzMDZcdTgyZGNcdTgzMDlcdTgyZDkiXSxbImU4YTEiLCJcdTgzMzVcdTgzMzRcdTgzMTZcdTgzMzJcdTgzMzFcdTgzNDBcdTgzMzlcdTgzNTBcdTgzNDVcdTgzMmZcdTgzMmJcdTgzMTdcdTgzMThcdTgzODVcdTgzOWFcdTgzYWFcdTgzOWZcdTgzYTJc''@;'; put 'put ''dTgzOTZcdTgzMjNcdTgzOGVcdTgzODdcdTgzOGFcdTgzN2NcdTgzYjVcdTgzNzNcdTgzNzVcdTgzYTBcdTgzODlcdTgzYThcdTgzZjRcdTg0MTNcdTgzZWJcdTgzY2VcdTgzZmRcdTg0MDNcdTgzZDhcdTg0MGJcdTgzYzFcdTgzZjdcdTg0MDdcdTgzZTBcdTgzZjJcdTg0MGRcdTg0MjJcdTg0''@;'; put 'put ''MjBcdTgzYmRcdTg0MzhcdTg1MDZcdTgzZmJcdTg0NmRcdTg0MmFcdTg0M2NcdTg1NWFcdTg0ODRcdTg0NzdcdTg0NmJcdTg0YWRcdTg0NmVcdTg0ODJcdTg0NjlcdTg0NDZcdTg0MmNcdTg0NmZcdTg0NzlcdTg0MzVcdTg0Y2FcdTg0NjJcdTg0YjlcdTg0YmZcdTg0OWZcdTg0ZDlcdTg0Y2Rc''@;'; put 'put ''dTg0YmJcdTg0ZGFcdTg0ZDBcdTg0YzFcdTg0YzZcdTg0ZDZcdTg0YTFcdTg1MjFcdTg0ZmZcdTg0ZjRcdTg1MTdcdTg1MThcdTg1MmNcdTg1MWZcdTg1MTVcdTg1MTRcdTg0ZmNcdTg1NDBcdTg1NjNcdTg1NThcdTg1NDgiXSxbImU5YTEiLCJcdTg1NDFcdTg2MDJcdTg1NGJcdTg1NTVcdTg1''@;'; put 'put ''ODBcdTg1YTRcdTg1ODhcdTg1OTFcdTg1OGFcdTg1YThcdTg1NmRcdTg1OTRcdTg1OWJcdTg1ZWFcdTg1ODdcdTg1OWNcdTg1NzdcdTg1N2VcdTg1OTBcdTg1YzlcdTg1YmFcdTg1Y2ZcdTg1YjlcdTg1ZDBcdTg1ZDVcdTg1ZGRcdTg1ZTVcdTg1ZGNcdTg1ZjlcdTg2MGFcdTg2MTNcdTg2MGJc''@;'; put 'put ''dTg1ZmVcdTg1ZmFcdTg2MDZcdTg2MjJcdTg2MWFcdTg2MzBcdTg2M2ZcdTg2NGRcdTRlNTVcdTg2NTRcdTg2NWZcdTg2NjdcdTg2NzFcdTg2OTNcdTg2YTNcdTg2YTlcdTg2YWFcdTg2OGJcdTg2OGNcdTg2YjZcdTg2YWZcdTg2YzRcdTg2YzZcdTg2YjBcdTg2YzlcdTg4MjNcdTg2YWJcdTg2''@;'; put 'put ''ZDRcdTg2ZGVcdTg2ZTlcdTg2ZWNcdTg2ZGZcdTg2ZGJcdTg2ZWZcdTg3MTJcdTg3MDZcdTg3MDhcdTg3MDBcdTg3MDNcdTg2ZmJcdTg3MTFcdTg3MDlcdTg3MGRcdTg2ZjlcdTg3MGFcdTg3MzRcdTg3M2ZcdTg3MzdcdTg3M2JcdTg3MjVcdTg3MjlcdTg3MWFcdTg3NjBcdTg3NWZcdTg3Nzhc''@;'; put 'put ''dTg3NGNcdTg3NGVcdTg3NzRcdTg3NTdcdTg3NjhcdTg3NmVcdTg3NTkiXSxbImVhYTEiLCJcdTg3NTNcdTg3NjNcdTg3NmFcdTg4MDVcdTg3YTJcdTg3OWZcdTg3ODJcdTg3YWZcdTg3Y2JcdTg3YmRcdTg3YzBcdTg3ZDBcdTk2ZDZcdTg3YWJcdTg3YzRcdTg3YjNcdTg3YzdcdTg3YzZcdTg3''@;'; put 'put ''YmJcdTg3ZWZcdTg3ZjJcdTg3ZTBcdTg4MGZcdTg4MGRcdTg3ZmVcdTg3ZjZcdTg3ZjdcdTg4MGVcdTg3ZDJcdTg4MTFcdTg4MTZcdTg4MTVcdTg4MjJcdTg4MjFcdTg4MzFcdTg4MzZcdTg4MzlcdTg4MjdcdTg4M2JcdTg4NDRcdTg4NDJcdTg4NTJcdTg4NTlcdTg4NWVcdTg4NjJcdTg4NmJc''@;'; put 'put ''dTg4ODFcdTg4N2VcdTg4OWVcdTg4NzVcdTg4N2RcdTg4YjVcdTg4NzJcdTg4ODJcdTg4OTdcdTg4OTJcdTg4YWVcdTg4OTlcdTg4YTJcdTg4OGRcdTg4YTRcdTg4YjBcdTg4YmZcdTg4YjFcdTg4YzNcdTg4YzRcdTg4ZDRcdTg4ZDhcdTg4ZDlcdTg4ZGRcdTg4ZjlcdTg5MDJcdTg4ZmNcdTg4''@;'; put 'put ''ZjRcdTg4ZThcdTg4ZjJcdTg5MDRcdTg5MGNcdTg5MGFcdTg5MTNcdTg5NDNcdTg5MWVcdTg5MjVcdTg5MmFcdTg5MmJcdTg5NDFcdTg5NDRcdTg5M2JcdTg5MzZcdTg5MzhcdTg5NGNcdTg5MWRcdTg5NjBcdTg5NWUiXSxbImViYTEiLCJcdTg5NjZcdTg5NjRcdTg5NmRcdTg5NmFcdTg5NmZc''@;'; put 'put ''dTg5NzRcdTg5NzdcdTg5N2VcdTg5ODNcdTg5ODhcdTg5OGFcdTg5OTNcdTg5OThcdTg5YTFcdTg5YTlcdTg5YTZcdTg5YWNcdTg5YWZcdTg5YjJcdTg5YmFcdTg5YmRcdTg5YmZcdTg5YzBcdTg5ZGFcdTg5ZGNcdTg5ZGRcdTg5ZTdcdTg5ZjRcdTg5ZjhcdThhMDNcdThhMTZcdThhMTBcdThh''@;'; put 'put ''MGNcdThhMWJcdThhMWRcdThhMjVcdThhMzZcdThhNDFcdThhNWJcdThhNTJcdThhNDZcdThhNDhcdThhN2NcdThhNmRcdThhNmNcdThhNjJcdThhODVcdThhODJcdThhODRcdThhYThcdThhYTFcdThhOTFcdThhYTVcdThhYTZcdThhOWFcdThhYTNcdThhYzRcdThhY2RcdThhYzJcdThhZGFc''@;'; put 'put ''dThhZWJcdThhZjNcdThhZTdcdThhZTRcdThhZjFcdThiMTRcdThhZTBcdThhZTJcdThhZjdcdThhZGVcdThhZGJcdThiMGNcdThiMDdcdThiMWFcdThhZTFcdThiMTZcdThiMTBcdThiMTdcdThiMjBcdThiMzNcdTk3YWJcdThiMjZcdThiMmJcdThiM2VcdThiMjhcdThiNDFcdThiNGNcdThi''@;'; put 'put ''NGZcdThiNGVcdThiNDlcdThiNTZcdThiNWJcdThiNWFcdThiNmIiXSxbImVjYTEiLCJcdThiNWZcdThiNmNcdThiNmZcdThiNzRcdThiN2RcdThiODBcdThiOGNcdThiOGVcdThiOTJcdThiOTNcdThiOTZcdThiOTlcdThiOWFcdThjM2FcdThjNDFcdThjM2ZcdThjNDhcdThjNGNcdThjNGVc''@;'; put 'put ''dThjNTBcdThjNTVcdThjNjJcdThjNmNcdThjNzhcdThjN2FcdThjODJcdThjODlcdThjODVcdThjOGFcdThjOGRcdThjOGVcdThjOTRcdThjN2NcdThjOThcdTYyMWRcdThjYWRcdThjYWFcdThjYmRcdThjYjJcdThjYjNcdThjYWVcdThjYjZcdThjYzhcdThjYzFcdThjZTRcdThjZTNcdThj''@;'; put 'put ''ZGFcdThjZmRcdThjZmFcdThjZmJcdThkMDRcdThkMDVcdThkMGFcdThkMDdcdThkMGZcdThkMGRcdThkMTBcdTlmNGVcdThkMTNcdThjY2RcdThkMTRcdThkMTZcdThkNjdcdThkNmRcdThkNzFcdThkNzNcdThkODFcdThkOTlcdThkYzJcdThkYmVcdThkYmFcdThkY2ZcdThkZGFcdThkZDZc''@;'; put 'put ''dThkY2NcdThkZGJcdThkY2JcdThkZWFcdThkZWJcdThkZGZcdThkZTNcdThkZmNcdThlMDhcdThlMDlcdThkZmZcdThlMWRcdThlMWVcdThlMTBcdThlMWZcdThlNDJcdThlMzVcdThlMzBcdThlMzRcdThlNGEiXSxbImVkYTEiLCJcdThlNDdcdThlNDlcdThlNGNcdThlNTBcdThlNDhcdThl''@;'; put 'put ''NTlcdThlNjRcdThlNjBcdThlMmFcdThlNjNcdThlNTVcdThlNzZcdThlNzJcdThlN2NcdThlODFcdThlODdcdThlODVcdThlODRcdThlOGJcdThlOGFcdThlOTNcdThlOTFcdThlOTRcdThlOTlcdThlYWFcdThlYTFcdThlYWNcdThlYjBcdThlYzZcdThlYjFcdThlYmVcdThlYzVcdThlYzhc''@;'; put 'put ''dThlY2JcdThlZGJcdThlZTNcdThlZmNcdThlZmJcdThlZWJcdThlZmVcdThmMGFcdThmMDVcdThmMTVcdThmMTJcdThmMTlcdThmMTNcdThmMWNcdThmMWZcdThmMWJcdThmMGNcdThmMjZcdThmMzNcdThmM2JcdThmMzlcdThmNDVcdThmNDJcdThmM2VcdThmNGNcdThmNDlcdThmNDZcdThm''@;'; put 'put ''NGVcdThmNTdcdThmNWNcdThmNjJcdThmNjNcdThmNjRcdThmOWNcdThmOWZcdThmYTNcdThmYWRcdThmYWZcdThmYjdcdThmZGFcdThmZTVcdThmZTJcdThmZWFcdThmZWZcdTkwODdcdThmZjRcdTkwMDVcdThmZjlcdThmZmFcdTkwMTFcdTkwMTVcdTkwMjFcdTkwMGRcdTkwMWVcdTkwMTZc''@;'; put 'put ''dTkwMGJcdTkwMjdcdTkwMzZcdTkwMzVcdTkwMzlcdThmZjgiXSxbImVlYTEiLCJcdTkwNGZcdTkwNTBcdTkwNTFcdTkwNTJcdTkwMGVcdTkwNDlcdTkwM2VcdTkwNTZcdTkwNThcdTkwNWVcdTkwNjhcdTkwNmZcdTkwNzZcdTk2YThcdTkwNzJcdTkwODJcdTkwN2RcdTkwODFcdTkwODBcdTkw''@;'; put 'put ''OGFcdTkwODlcdTkwOGZcdTkwYThcdTkwYWZcdTkwYjFcdTkwYjVcdTkwZTJcdTkwZTRcdTYyNDhcdTkwZGJcdTkxMDJcdTkxMTJcdTkxMTlcdTkxMzJcdTkxMzBcdTkxNGFcdTkxNTZcdTkxNThcdTkxNjNcdTkxNjVcdTkxNjlcdTkxNzNcdTkxNzJcdTkxOGJcdTkxODlcdTkxODJcdTkxYTJc''@;'; put 'put ''dTkxYWJcdTkxYWZcdTkxYWFcdTkxYjVcdTkxYjRcdTkxYmFcdTkxYzBcdTkxYzFcdTkxYzlcdTkxY2JcdTkxZDBcdTkxZDZcdTkxZGZcdTkxZTFcdTkxZGJcdTkxZmNcdTkxZjVcdTkxZjZcdTkyMWVcdTkxZmZcdTkyMTRcdTkyMmNcdTkyMTVcdTkyMTFcdTkyNWVcdTkyNTdcdTkyNDVcdTky''@;'; put 'put ''NDlcdTkyNjRcdTkyNDhcdTkyOTVcdTkyM2ZcdTkyNGJcdTkyNTBcdTkyOWNcdTkyOTZcdTkyOTNcdTkyOWJcdTkyNWFcdTkyY2ZcdTkyYjlcdTkyYjdcdTkyZTlcdTkzMGZcdTkyZmFcdTkzNDRcdTkzMmUiXSxbImVmYTEiLCJcdTkzMTlcdTkzMjJcdTkzMWFcdTkzMjNcdTkzM2FcdTkzMzVc''@;'; put 'put ''dTkzM2JcdTkzNWNcdTkzNjBcdTkzN2NcdTkzNmVcdTkzNTZcdTkzYjBcdTkzYWNcdTkzYWRcdTkzOTRcdTkzYjlcdTkzZDZcdTkzZDdcdTkzZThcdTkzZTVcdTkzZDhcdTkzYzNcdTkzZGRcdTkzZDBcdTkzYzhcdTkzZTRcdTk0MWFcdTk0MTRcdTk0MTNcdTk0MDNcdTk0MDdcdTk0MTBcdTk0''@;'; put 'put ''MzZcdTk0MmJcdTk0MzVcdTk0MjFcdTk0M2FcdTk0NDFcdTk0NTJcdTk0NDRcdTk0NWJcdTk0NjBcdTk0NjJcdTk0NWVcdTk0NmFcdTkyMjlcdTk0NzBcdTk0NzVcdTk0NzdcdTk0N2RcdTk0NWFcdTk0N2NcdTk0N2VcdTk0ODFcdTk0N2ZcdTk1ODJcdTk1ODdcdTk1OGFcdTk1OTRcdTk1OTZc''@;'; put 'put ''dTk1OThcdTk1OTlcdTk1YTBcdTk1YThcdTk1YTdcdTk1YWRcdTk1YmNcdTk1YmJcdTk1YjlcdTk1YmVcdTk1Y2FcdTZmZjZcdTk1YzNcdTk1Y2RcdTk1Y2NcdTk1ZDVcdTk1ZDRcdTk1ZDZcdTk1ZGNcdTk1ZTFcdTk1ZTVcdTk1ZTJcdTk2MjFcdTk2MjhcdTk2MmVcdTk2MmZcdTk2NDJcdTk2''@;'; put 'put ''NGNcdTk2NGZcdTk2NGJcdTk2NzdcdTk2NWNcdTk2NWUiXSxbImYwYTEiLCJcdTk2NWRcdTk2NWZcdTk2NjZcdTk2NzJcdTk2NmNcdTk2OGRcdTk2OThcdTk2OTVcdTk2OTdcdTk2YWFcdTk2YTdcdTk2YjFcdTk2YjJcdTk2YjBcdTk2YjRcdTk2YjZcdTk2YjhcdTk2YjlcdTk2Y2VcdTk2Y2Jc''@;'; put 'put ''dTk2YzlcdTk2Y2RcdTg5NGRcdTk2ZGNcdTk3MGRcdTk2ZDVcdTk2ZjlcdTk3MDRcdTk3MDZcdTk3MDhcdTk3MTNcdTk3MGVcdTk3MTFcdTk3MGZcdTk3MTZcdTk3MTlcdTk3MjRcdTk3MmFcdTk3MzBcdTk3MzlcdTk3M2RcdTk3M2VcdTk3NDRcdTk3NDZcdTk3NDhcdTk3NDJcdTk3NDlcdTk3''@;'; put 'put ''NWNcdTk3NjBcdTk3NjRcdTk3NjZcdTk3NjhcdTUyZDJcdTk3NmJcdTk3NzFcdTk3NzlcdTk3ODVcdTk3N2NcdTk3ODFcdTk3N2FcdTk3ODZcdTk3OGJcdTk3OGZcdTk3OTBcdTk3OWNcdTk3YThcdTk3YTZcdTk3YTNcdTk3YjNcdTk3YjRcdTk3YzNcdTk3YzZcdTk3YzhcdTk3Y2JcdTk3ZGNc''@;'; put 'put ''dTk3ZWRcdTlmNGZcdTk3ZjJcdTdhZGZcdTk3ZjZcdTk3ZjVcdTk4MGZcdTk4MGNcdTk4MzhcdTk4MjRcdTk4MjFcdTk4MzdcdTk4M2RcdTk4NDZcdTk4NGZcdTk4NGJcdTk4NmJcdTk4NmZcdTk4NzAiXSxbImYxYTEiLCJcdTk4NzFcdTk4NzRcdTk4NzNcdTk4YWFcdTk4YWZcdTk4YjFcdTk4''@;'; put 'put ''YjZcdTk4YzRcdTk4YzNcdTk4YzZcdTk4ZTlcdTk4ZWJcdTk5MDNcdTk5MDlcdTk5MTJcdTk5MTRcdTk5MThcdTk5MjFcdTk5MWRcdTk5MWVcdTk5MjRcdTk5MjBcdTk5MmNcdTk5MmVcdTk5M2RcdTk5M2VcdTk5NDJcdTk5NDlcdTk5NDVcdTk5NTBcdTk5NGJcdTk5NTFcdTk5NTJcdTk5NGNc''@;'; put 'put ''dTk5NTVcdTk5OTdcdTk5OThcdTk5YTVcdTk5YWRcdTk5YWVcdTk5YmNcdTk5ZGZcdTk5ZGJcdTk5ZGRcdTk5ZDhcdTk5ZDFcdTk5ZWRcdTk5ZWVcdTk5ZjFcdTk5ZjJcdTk5ZmJcdTk5ZjhcdTlhMDFcdTlhMGZcdTlhMDVcdTk5ZTJcdTlhMTlcdTlhMmJcdTlhMzdcdTlhNDVcdTlhNDJcdTlh''@;'; put 'put ''NDBcdTlhNDNcdTlhM2VcdTlhNTVcdTlhNGRcdTlhNWJcdTlhNTdcdTlhNWZcdTlhNjJcdTlhNjVcdTlhNjRcdTlhNjlcdTlhNmJcdTlhNmFcdTlhYWRcdTlhYjBcdTlhYmNcdTlhYzBcdTlhY2ZcdTlhZDFcdTlhZDNcdTlhZDRcdTlhZGVcdTlhZGZcdTlhZTJcdTlhZTNcdTlhZTZcdTlhZWZc''@;'; put 'put ''dTlhZWJcdTlhZWVcdTlhZjRcdTlhZjFcdTlhZjciXSxbImYyYTEiLCJcdTlhZmJcdTliMDZcdTliMThcdTliMWFcdTliMWZcdTliMjJcdTliMjNcdTliMjVcdTliMjdcdTliMjhcdTliMjlcdTliMmFcdTliMmVcdTliMmZcdTliMzJcdTliNDRcdTliNDNcdTliNGZcdTliNGRcdTliNGVcdTli''@;'; put 'put ''NTFcdTliNThcdTliNzRcdTliOTNcdTliODNcdTliOTFcdTliOTZcdTliOTdcdTliOWZcdTliYTBcdTliYThcdTliYjRcdTliYzBcdTliY2FcdTliYjlcdTliYzZcdTliY2ZcdTliZDFcdTliZDJcdTliZTNcdTliZTJcdTliZTRcdTliZDRcdTliZTFcdTljM2FcdTliZjJcdTliZjFcdTliZjBc''@;'; put 'put ''dTljMTVcdTljMTRcdTljMDlcdTljMTNcdTljMGNcdTljMDZcdTljMDhcdTljMTJcdTljMGFcdTljMDRcdTljMmVcdTljMWJcdTljMjVcdTljMjRcdTljMjFcdTljMzBcdTljNDdcdTljMzJcdTljNDZcdTljM2VcdTljNWFcdTljNjBcdTljNjdcdTljNzZcdTljNzhcdTljZTdcdTljZWNcdTlj''@;'; put 'put ''ZjBcdTlkMDlcdTlkMDhcdTljZWJcdTlkMDNcdTlkMDZcdTlkMmFcdTlkMjZcdTlkYWZcdTlkMjNcdTlkMWZcdTlkNDRcdTlkMTVcdTlkMTJcdTlkNDFcdTlkM2ZcdTlkM2VcdTlkNDZcdTlkNDgiXSxbImYzYTEiLCJcdTlkNWRcdTlkNWVcdTlkNjRcdTlkNTFcdTlkNTBcdTlkNTlcdTlkNzJc''@;'; put 'put ''dTlkODlcdTlkODdcdTlkYWJcdTlkNmZcdTlkN2FcdTlkOWFcdTlkYTRcdTlkYTlcdTlkYjJcdTlkYzRcdTlkYzFcdTlkYmJcdTlkYjhcdTlkYmFcdTlkYzZcdTlkY2ZcdTlkYzJcdTlkZDlcdTlkZDNcdTlkZjhcdTlkZTZcdTlkZWRcdTlkZWZcdTlkZmRcdTllMWFcdTllMWJcdTllMWVcdTll''@;'; put 'put ''NzVcdTllNzlcdTllN2RcdTllODFcdTllODhcdTllOGJcdTllOGNcdTllOTJcdTllOTVcdTllOTFcdTllOWRcdTllYTVcdTllYTlcdTllYjhcdTllYWFcdTllYWRcdTk3NjFcdTllY2NcdTllY2VcdTllY2ZcdTllZDBcdTllZDRcdTllZGNcdTllZGVcdTllZGRcdTllZTBcdTllZTVcdTllZThc''@;'; put 'put ''dTllZWZcdTllZjRcdTllZjZcdTllZjdcdTllZjlcdTllZmJcdTllZmNcdTllZmRcdTlmMDdcdTlmMDhcdTc2YjdcdTlmMTVcdTlmMjFcdTlmMmNcdTlmM2VcdTlmNGFcdTlmNTJcdTlmNTRcdTlmNjNcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjZcdTlmNjdcdTlmNmNcdTlmNmFcdTlmNzdcdTlm''@;'; put 'put ''NzJcdTlmNzZcdTlmOTVcdTlmOWNcdTlmYTAiXSxbImY0YTEiLCJcdTU4MmZcdTY5YzdcdTkwNTlcdTc0NjRcdTUxZGNcdTcxOTkiXSxbImY5YTEiLCJcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhc''@;'; put 'put ''dTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUy''@;'; put 'put ''OWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNc''@;'; put 'put ''dTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjciXSxbImZhYTEi''@;'; put 'put ''LCJcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVc''@;'; put 'put ''dTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZh''@;'; put 'put ''N2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdc''@;'; put 'put ''dTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjEiXSxbImZiYTEiLCJcdTcyYmVcdTczMjRcdWZhMTZcdTczNzdcdTczYmRcdTczYzlcdTczZDZcdTczZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0''@;'; put 'put ''MjlcdTc0MmVcdTc0NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTlcdWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdhZTdc''@;'; put 'put ''dWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdcdTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTlcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZhMjFcdTg4''@;'; put 'put ''MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThkNzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGEiXSxbImZjYTEiLCJc''@;'; put 'put ''dTkxZDdcdTkxZGVcdTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFcdTkyM2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdcdTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTky''@;'; put 'put ''ZDNcdTkzMjVcdTkzMjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZc''@;'; put 'put ''dTk3NTFcdTk3NTVcdTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVcdTlhNGVcdTlhZDlcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDEiXSxbImZjZjEiLCJcdTIxNzAiLDksIlx1ZmZl''@;'; put 'put ''Mlx1ZmZlNFx1ZmYwN1x1ZmYwMiJdLFsiOGZhMmFmIiwiXHUwMmQ4XHUwMmM3XHhiOFx1MDJkOVx1MDJkZFx4YWZcdTAyZGJcdTAyZGFcdWZmNWVcdTAzODRcdTAzODUiXSxbIjhmYTJjMiIsIlx4YTFceGE2XHhiZiJdLFsiOGZhMmViIiwiXHhiYVx4YWFceGE5XHhhZVx1MjEyMlx4YTRcdTIx''@;'; put 'put ''MTYiXSxbIjhmYTZlMSIsIlx1MDM4Nlx1MDM4OFx1MDM4OVx1MDM4YVx1MDNhYSJdLFsiOGZhNmU3IiwiXHUwMzhjIl0sWyI4ZmE2ZTkiLCJcdTAzOGVcdTAzYWIiXSxbIjhmYTZlYyIsIlx1MDM4ZiJdLFsiOGZhNmYxIiwiXHUwM2FjXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2NhXHUwMzkwXHUw''@;'; put 'put ''M2NjXHUwM2MyXHUwM2NkXHUwM2NiXHUwM2IwXHUwM2NlIl0sWyI4ZmE3YzIiLCJcdTA0MDIiLDEwLCJcdTA0MGVcdTA0MGYiXSxbIjhmYTdmMiIsIlx1MDQ1MiIsMTAsIlx1MDQ1ZVx1MDQ1ZiJdLFsiOGZhOWExIiwiXHhjNlx1MDExMCJdLFsiOGZhOWE0IiwiXHUwMTI2Il0sWyI4ZmE5YTYi''@;'; put 'put ''LCJcdTAxMzIiXSxbIjhmYTlhOCIsIlx1MDE0MVx1MDEzZiJdLFsiOGZhOWFiIiwiXHUwMTRhXHhkOFx1MDE1MiJdLFsiOGZhOWFmIiwiXHUwMTY2XHhkZSJdLFsiOGZhOWMxIiwiXHhlNlx1MDExMVx4ZjBcdTAxMjdcdTAxMzFcdTAxMzNcdTAxMzhcdTAxNDJcdTAxNDBcdTAxNDlcdTAxNGJc''@;'; put 'put ''eGY4XHUwMTUzXHhkZlx1MDE2N1x4ZmUiXSxbIjhmYWFhMSIsIlx4YzFceGMwXHhjNFx4YzJcdTAxMDJcdTAxY2RcdTAxMDBcdTAxMDRceGM1XHhjM1x1MDEwNlx1MDEwOFx1MDEwY1x4YzdcdTAxMGFcdTAxMGVceGM5XHhjOFx4Y2JceGNhXHUwMTFhXHUwMTE2XHUwMTEyXHUwMTE4Il0sWyI4''@;'; put 'put ''ZmFhYmEiLCJcdTAxMWNcdTAxMWVcdTAxMjJcdTAxMjBcdTAxMjRceGNkXHhjY1x4Y2ZceGNlXHUwMWNmXHUwMTMwXHUwMTJhXHUwMTJlXHUwMTI4XHUwMTM0XHUwMTM2XHUwMTM5XHUwMTNkXHUwMTNiXHUwMTQzXHUwMTQ3XHUwMTQ1XHhkMVx4ZDNceGQyXHhkNlx4ZDRcdTAxZDFcdTAxNTBc''@;'; put 'put ''dTAxNGNceGQ1XHUwMTU0XHUwMTU4XHUwMTU2XHUwMTVhXHUwMTVjXHUwMTYwXHUwMTVlXHUwMTY0XHUwMTYyXHhkYVx4ZDlceGRjXHhkYlx1MDE2Y1x1MDFkM1x1MDE3MFx1MDE2YVx1MDE3Mlx1MDE2ZVx1MDE2OFx1MDFkN1x1MDFkYlx1MDFkOVx1MDFkNVx1MDE3NFx4ZGRcdTAxNzhcdTAx''@;'; put 'put ''NzZcdTAxNzlcdTAxN2RcdTAxN2IiXSxbIjhmYWJhMSIsIlx4ZTFceGUwXHhlNFx4ZTJcdTAxMDNcdTAxY2VcdTAxMDFcdTAxMDVceGU1XHhlM1x1MDEwN1x1MDEwOVx1MDEwZFx4ZTdcdTAxMGJcdTAxMGZceGU5XHhlOFx4ZWJceGVhXHUwMTFiXHUwMTE3XHUwMTEzXHUwMTE5XHUwMWY1XHUw''@;'; put 'put ''MTFkXHUwMTFmIl0sWyI4ZmFiYmQiLCJcdTAxMjFcdTAxMjVceGVkXHhlY1x4ZWZceGVlXHUwMWQwIl0sWyI4ZmFiYzUiLCJcdTAxMmJcdTAxMmZcdTAxMjlcdTAxMzVcdTAxMzdcdTAxM2FcdTAxM2VcdTAxM2NcdTAxNDRcdTAxNDhcdTAxNDZceGYxXHhmM1x4ZjJceGY2XHhmNFx1MDFkMlx1''@;'; put 'put ''MDE1MVx1MDE0ZFx4ZjVcdTAxNTVcdTAxNTlcdTAxNTdcdTAxNWJcdTAxNWRcdTAxNjFcdTAxNWZcdTAxNjVcdTAxNjNceGZhXHhmOVx4ZmNceGZiXHUwMTZkXHUwMWQ0XHUwMTcxXHUwMTZiXHUwMTczXHUwMTZmXHUwMTY5XHUwMWQ4XHUwMWRjXHUwMWRhXHUwMWQ2XHUwMTc1XHhmZFx4ZmZc''@;'; put 'put ''dTAxNzdcdTAxN2FcdTAxN2VcdTAxN2MiXSxbIjhmYjBhMSIsIlx1NGUwMlx1NGUwNFx1NGUwNVx1NGUwY1x1NGUxMlx1NGUxZlx1NGUyM1x1NGUyNFx1NGUyOFx1NGUyYlx1NGUyZVx1NGUyZlx1NGUzMFx1NGUzNVx1NGU0MFx1NGU0MVx1NGU0NFx1NGU0N1x1NGU1MVx1NGU1YVx1NGU1Y1x1''@;'; put 'put ''NGU2M1x1NGU2OFx1NGU2OVx1NGU3NFx1NGU3NVx1NGU3OVx1NGU3Zlx1NGU4ZFx1NGU5Nlx1NGU5N1x1NGU5ZFx1NGVhZlx1NGViOVx1NGVjM1x1NGVkMFx1NGVkYVx1NGVkYlx1NGVlMFx1NGVlMVx1NGVlMlx1NGVlOFx1NGVlZlx1NGVmMVx1NGVmM1x1NGVmNVx1NGVmZFx1NGVmZVx1NGVm''@;'; put 'put ''Zlx1NGYwMFx1NGYwMlx1NGYwM1x1NGYwOFx1NGYwYlx1NGYwY1x1NGYxMlx1NGYxNVx1NGYxNlx1NGYxN1x1NGYxOVx1NGYyZVx1NGYzMVx1NGY2MFx1NGYzM1x1NGYzNVx1NGYzN1x1NGYzOVx1NGYzYlx1NGYzZVx1NGY0MFx1NGY0Mlx1NGY0OFx1NGY0OVx1NGY0Ylx1NGY0Y1x1NGY1Mlx1''@;'; put 'put ''NGY1NFx1NGY1Nlx1NGY1OFx1NGY1Zlx1NGY2M1x1NGY2YVx1NGY2Y1x1NGY2ZVx1NGY3MVx1NGY3N1x1NGY3OFx1NGY3OVx1NGY3YVx1NGY3ZFx1NGY3ZVx1NGY4MVx1NGY4Mlx1NGY4NCJdLFsiOGZiMWExIiwiXHU0Zjg1XHU0Zjg5XHU0ZjhhXHU0ZjhjXHU0ZjhlXHU0ZjkwXHU0ZjkyXHU0''@;'; put 'put ''ZjkzXHU0Zjk0XHU0Zjk3XHU0Zjk5XHU0ZjlhXHU0ZjllXHU0ZjlmXHU0ZmIyXHU0ZmI3XHU0ZmI5XHU0ZmJiXHU0ZmJjXHU0ZmJkXHU0ZmJlXHU0ZmMwXHU0ZmMxXHU0ZmM1XHU0ZmM2XHU0ZmM4XHU0ZmM5XHU0ZmNiXHU0ZmNjXHU0ZmNkXHU0ZmNmXHU0ZmQyXHU0ZmRjXHU0ZmUwXHU0ZmUy''@;'; put 'put ''XHU0ZmYwXHU0ZmYyXHU0ZmZjXHU0ZmZkXHU0ZmZmXHU1MDAwXHU1MDAxXHU1MDA0XHU1MDA3XHU1MDBhXHU1MDBjXHU1MDBlXHU1MDEwXHU1MDEzXHU1MDE3XHU1MDE4XHU1MDFiXHU1MDFjXHU1MDFkXHU1MDFlXHU1MDIyXHU1MDI3XHU1MDJlXHU1MDMwXHU1MDMyXHU1MDMzXHU1MDM1XHU1''@;'; put 'put ''MDQwXHU1MDQxXHU1MDQyXHU1MDQ1XHU1MDQ2XHU1MDRhXHU1MDRjXHU1MDRlXHU1MDUxXHU1MDUyXHU1MDUzXHU1MDU3XHU1MDU5XHU1MDVmXHU1MDYwXHU1MDYyXHU1MDYzXHU1MDY2XHU1MDY3XHU1MDZhXHU1MDZkXHU1MDcwXHU1MDcxXHU1MDNiXHU1MDgxXHU1MDgzXHU1MDg0XHU1MDg2''@;'; put 'put ''XHU1MDhhXHU1MDhlXHU1MDhmXHU1MDkwIl0sWyI4ZmIyYTEiLCJcdTUwOTJcdTUwOTNcdTUwOTRcdTUwOTZcdTUwOWJcdTUwOWNcdTUwOWUiLDQsIlx1NTBhYVx1NTBhZlx1NTBiMFx1NTBiOVx1NTBiYVx1NTBiZFx1NTBjMFx1NTBjM1x1NTBjNFx1NTBjN1x1NTBjY1x1NTBjZVx1NTBkMFx1''@;'; put 'put ''NTBkM1x1NTBkNFx1NTBkOFx1NTBkY1x1NTBkZFx1NTBkZlx1NTBlMlx1NTBlNFx1NTBlNlx1NTBlOFx1NTBlOVx1NTBlZlx1NTBmMVx1NTBmNlx1NTBmYVx1NTBmZVx1NTEwM1x1NTEwNlx1NTEwN1x1NTEwOFx1NTEwYlx1NTEwY1x1NTEwZFx1NTEwZVx1NTBmMlx1NTExMFx1NTExN1x1NTEx''@;'; put 'put ''OVx1NTExYlx1NTExY1x1NTExZFx1NTExZVx1NTEyM1x1NTEyN1x1NTEyOFx1NTEyY1x1NTEyZFx1NTEyZlx1NTEzMVx1NTEzM1x1NTEzNFx1NTEzNVx1NTEzOFx1NTEzOVx1NTE0Mlx1NTE0YVx1NTE0Zlx1NTE1M1x1NTE1NVx1NTE1N1x1NTE1OFx1NTE1Zlx1NTE2NFx1NTE2Nlx1NTE3ZVx1''@;'; put 'put ''NTE4M1x1NTE4NFx1NTE4Ylx1NTE4ZVx1NTE5OFx1NTE5ZFx1NTFhMVx1NTFhM1x1NTFhZFx1NTFiOFx1NTFiYVx1NTFiY1x1NTFiZVx1NTFiZlx1NTFjMiJdLFsiOGZiM2ExIiwiXHU1MWM4XHU1MWNmXHU1MWQxXHU1MWQyXHU1MWQzXHU1MWQ1XHU1MWQ4XHU1MWRlXHU1MWUyXHU1MWU1XHU1''@;'; put 'put ''MWVlXHU1MWYyXHU1MWYzXHU1MWY0XHU1MWY3XHU1MjAxXHU1MjAyXHU1MjA1XHU1MjEyXHU1MjEzXHU1MjE1XHU1MjE2XHU1MjE4XHU1MjIyXHU1MjI4XHU1MjMxXHU1MjMyXHU1MjM1XHU1MjNjXHU1MjQ1XHU1MjQ5XHU1MjU1XHU1MjU3XHU1MjU4XHU1MjVhXHU1MjVjXHU1MjVmXHU1MjYw''@;'; put 'put ''XHU1MjYxXHU1MjY2XHU1MjZlXHU1Mjc3XHU1Mjc4XHU1Mjc5XHU1MjgwXHU1MjgyXHU1Mjg1XHU1MjhhXHU1MjhjXHU1MjkzXHU1Mjk1XHU1Mjk2XHU1Mjk3XHU1Mjk4XHU1MjlhXHU1MjljXHU1MmE0XHU1MmE1XHU1MmE2XHU1MmE3XHU1MmFmXHU1MmIwXHU1MmI2XHU1MmI3XHU1MmI4XHU1''@;'; put 'put ''MmJhXHU1MmJiXHU1MmJkXHU1MmMwXHU1MmM0XHU1MmM2XHU1MmM4XHU1MmNjXHU1MmNmXHU1MmQxXHU1MmQ0XHU1MmQ2XHU1MmRiXHU1MmRjXHU1MmUxXHU1MmU1XHU1MmU4XHU1MmU5XHU1MmVhXHU1MmVjXHU1MmYwXHU1MmYxXHU1MmY0XHU1MmY2XHU1MmY3XHU1MzAwXHU1MzAzXHU1MzBh''@;'; put 'put ''XHU1MzBiIl0sWyI4ZmI0YTEiLCJcdTUzMGNcdTUzMTFcdTUzMTNcdTUzMThcdTUzMWJcdTUzMWNcdTUzMWVcdTUzMWZcdTUzMjVcdTUzMjdcdTUzMjhcdTUzMjlcdTUzMmJcdTUzMmNcdTUzMmRcdTUzMzBcdTUzMzJcdTUzMzVcdTUzM2NcdTUzM2RcdTUzM2VcdTUzNDJcdTUzNGNcdTUzNGJc''@;'; put 'put ''dTUzNTlcdTUzNWJcdTUzNjFcdTUzNjNcdTUzNjVcdTUzNmNcdTUzNmRcdTUzNzJcdTUzNzlcdTUzN2VcdTUzODNcdTUzODdcdTUzODhcdTUzOGVcdTUzOTNcdTUzOTRcdTUzOTlcdTUzOWRcdTUzYTFcdTUzYTRcdTUzYWFcdTUzYWJcdTUzYWZcdTUzYjJcdTUzYjRcdTUzYjVcdTUzYjdcdTUz''@;'; put 'put ''YjhcdTUzYmFcdTUzYmRcdTUzYzBcdTUzYzVcdTUzY2ZcdTUzZDJcdTUzZDNcdTUzZDVcdTUzZGFcdTUzZGRcdTUzZGVcdTUzZTBcdTUzZTZcdTUzZTdcdTUzZjVcdTU0MDJcdTU0MTNcdTU0MWFcdTU0MjFcdTU0MjdcdTU0MjhcdTU0MmFcdTU0MmZcdTU0MzFcdTU0MzRcdTU0MzVcdTU0NDNc''@;'; put 'put ''dTU0NDRcdTU0NDdcdTU0NGRcdTU0NGZcdTU0NWVcdTU0NjJcdTU0NjRcdTU0NjZcdTU0NjdcdTU0NjlcdTU0NmJcdTU0NmRcdTU0NmVcdTU0NzRcdTU0N2YiXSxbIjhmYjVhMSIsIlx1NTQ4MVx1NTQ4M1x1NTQ4NVx1NTQ4OFx1NTQ4OVx1NTQ4ZFx1NTQ5MVx1NTQ5NVx1NTQ5Nlx1NTQ5Y1x1''@;'; put 'put ''NTQ5Zlx1NTRhMVx1NTRhNlx1NTRhN1x1NTRhOVx1NTRhYVx1NTRhZFx1NTRhZVx1NTRiMVx1NTRiN1x1NTRiOVx1NTRiYVx1NTRiYlx1NTRiZlx1NTRjNlx1NTRjYVx1NTRjZFx1NTRjZVx1NTRlMFx1NTRlYVx1NTRlY1x1NTRlZlx1NTRmNlx1NTRmY1x1NTRmZVx1NTRmZlx1NTUwMFx1NTUw''@;'; put 'put ''MVx1NTUwNVx1NTUwOFx1NTUwOVx1NTUwY1x1NTUwZFx1NTUwZVx1NTUxNVx1NTUyYVx1NTUyYlx1NTUzMlx1NTUzNVx1NTUzNlx1NTUzYlx1NTUzY1x1NTUzZFx1NTU0MVx1NTU0N1x1NTU0OVx1NTU0YVx1NTU0ZFx1NTU1MFx1NTU1MVx1NTU1OFx1NTU1YVx1NTU1Ylx1NTU1ZVx1NTU2MFx1''@;'; put 'put ''NTU2MVx1NTU2NFx1NTU2Nlx1NTU3Zlx1NTU4MVx1NTU4Mlx1NTU4Nlx1NTU4OFx1NTU4ZVx1NTU4Zlx1NTU5MVx1NTU5Mlx1NTU5M1x1NTU5NFx1NTU5N1x1NTVhM1x1NTVhNFx1NTVhZFx1NTViMlx1NTViZlx1NTVjMVx1NTVjM1x1NTVjNlx1NTVjOVx1NTVjYlx1NTVjY1x1NTVjZVx1NTVk''@;'; put 'put ''MVx1NTVkMiJdLFsiOGZiNmExIiwiXHU1NWQzXHU1NWQ3XHU1NWQ4XHU1NWRiXHU1NWRlXHU1NWUyXHU1NWU5XHU1NWY2XHU1NWZmXHU1NjA1XHU1NjA4XHU1NjBhXHU1NjBkIiw1LCJcdTU2MTlcdTU2MmNcdTU2MzBcdTU2MzNcdTU2MzVcdTU2MzdcdTU2MzlcdTU2M2JcdTU2M2NcdTU2M2Rc''@;'; put 'put ''dTU2M2ZcdTU2NDBcdTU2NDFcdTU2NDNcdTU2NDRcdTU2NDZcdTU2NDlcdTU2NGJcdTU2NGRcdTU2NGZcdTU2NTRcdTU2NWVcdTU2NjBcdTU2NjFcdTU2NjJcdTU2NjNcdTU2NjZcdTU2NjlcdTU2NmRcdTU2NmZcdTU2NzFcdTU2NzJcdTU2NzVcdTU2ODRcdTU2ODVcdTU2ODhcdTU2OGJcdTU2''@;'; put 'put ''OGNcdTU2OTVcdTU2OTlcdTU2OWFcdTU2OWRcdTU2OWVcdTU2OWZcdTU2YTZcdTU2YTdcdTU2YThcdTU2YTlcdTU2YWJcdTU2YWNcdTU2YWRcdTU2YjFcdTU2YjNcdTU2YjdcdTU2YmVcdTU2YzVcdTU2YzlcdTU2Y2FcdTU2Y2JcdTU2Y2ZcdTU2ZDBcdTU2Y2NcdTU2Y2RcdTU2ZDlcdTU2ZGNc''@;'; put 'put ''dTU2ZGRcdTU2ZGZcdTU2ZTFcdTU2ZTQiLDQsIlx1NTZmMVx1NTZlYlx1NTZlZCJdLFsiOGZiN2ExIiwiXHU1NmY2XHU1NmY3XHU1NzAxXHU1NzAyXHU1NzA3XHU1NzBhXHU1NzBjXHU1NzExXHU1NzE1XHU1NzFhXHU1NzFiXHU1NzFkXHU1NzIwXHU1NzIyXHU1NzIzXHU1NzI0XHU1NzI1XHU1''@;'; put 'put ''NzI5XHU1NzJhXHU1NzJjXHU1NzJlXHU1NzJmXHU1NzMzXHU1NzM0XHU1NzNkXHU1NzNlXHU1NzNmXHU1NzQ1XHU1NzQ2XHU1NzRjXHU1NzRkXHU1NzUyXHU1NzYyXHU1NzY1XHU1NzY3XHU1NzY4XHU1NzZiXHU1NzZkIiw0LCJcdTU3NzNcdTU3NzRcdTU3NzVcdTU3NzdcdTU3NzlcdTU3N2Fc''@;'; put 'put ''dTU3N2JcdTU3N2NcdTU3N2VcdTU3ODFcdTU3ODNcdTU3OGNcdTU3OTRcdTU3OTdcdTU3OTlcdTU3OWFcdTU3OWNcdTU3OWRcdTU3OWVcdTU3OWZcdTU3YTFcdTU3OTVcdTU3YTdcdTU3YThcdTU3YTlcdTU3YWNcdTU3YjhcdTU3YmRcdTU3YzdcdTU3YzhcdTU3Y2NcdTU3Y2ZcdTU3ZDVcdTU3''@;'; put 'put ''ZGRcdTU3ZGVcdTU3ZTRcdTU3ZTZcdTU3ZTdcdTU3ZTlcdTU3ZWRcdTU3ZjBcdTU3ZjVcdTU3ZjZcdTU3ZjhcdTU3ZmRcdTU3ZmVcdTU3ZmZcdTU4MDNcdTU4MDRcdTU4MDhcdTU4MDlcdTU3ZTEiXSxbIjhmYjhhMSIsIlx1NTgwY1x1NTgwZFx1NTgxYlx1NTgxZVx1NTgxZlx1NTgyMFx1NTgy''@;'; put 'put ''Nlx1NTgyN1x1NTgyZFx1NTgzMlx1NTgzOVx1NTgzZlx1NTg0OVx1NTg0Y1x1NTg0ZFx1NTg0Zlx1NTg1MFx1NTg1NVx1NTg1Zlx1NTg2MVx1NTg2NFx1NTg2N1x1NTg2OFx1NTg3OFx1NTg3Y1x1NTg3Zlx1NTg4MFx1NTg4MVx1NTg4N1x1NTg4OFx1NTg4OVx1NTg4YVx1NTg4Y1x1NTg4ZFx1''@;'; put 'put ''NTg4Zlx1NTg5MFx1NTg5NFx1NTg5Nlx1NTg5ZFx1NThhMFx1NThhMVx1NThhMlx1NThhNlx1NThhOVx1NThiMVx1NThiMlx1NThjNFx1NThiY1x1NThjMlx1NThjOFx1NThjZFx1NThjZVx1NThkMFx1NThkMlx1NThkNFx1NThkNlx1NThkYVx1NThkZFx1NThlMVx1NThlMlx1NThlOVx1NThm''@;'; put 'put ''M1x1NTkwNVx1NTkwNlx1NTkwYlx1NTkwY1x1NTkxMlx1NTkxM1x1NTkxNFx1ODY0MVx1NTkxZFx1NTkyMVx1NTkyM1x1NTkyNFx1NTkyOFx1NTkyZlx1NTkzMFx1NTkzM1x1NTkzNVx1NTkzNlx1NTkzZlx1NTk0M1x1NTk0Nlx1NTk1Mlx1NTk1M1x1NTk1OVx1NTk1Ylx1NTk1ZFx1NTk1ZVx1''@;'; put 'put ''NTk1Zlx1NTk2MVx1NTk2M1x1NTk2Ylx1NTk2ZCJdLFsiOGZiOWExIiwiXHU1OTZmXHU1OTcyXHU1OTc1XHU1OTc2XHU1OTc5XHU1OTdiXHU1OTdjXHU1OThiXHU1OThjXHU1OThlXHU1OTkyXHU1OTk1XHU1OTk3XHU1OTlmXHU1OWE0XHU1OWE3XHU1OWFkXHU1OWFlXHU1OWFmXHU1OWIwXHU1''@;'; put 'put ''OWIzXHU1OWI3XHU1OWJhXHU1OWJjXHU1OWMxXHU1OWMzXHU1OWM0XHU1OWM4XHU1OWNhXHU1OWNkXHU1OWQyXHU1OWRkXHU1OWRlXHU1OWRmXHU1OWUzXHU1OWU0XHU1OWU3XHU1OWVlXHU1OWVmXHU1OWYxXHU1OWYyXHU1OWY0XHU1OWY3XHU1YTAwXHU1YTA0XHU1YTBjXHU1YTBkXHU1YTBl''@;'; put 'put ''XHU1YTEyXHU1YTEzXHU1YTFlXHU1YTIzXHU1YTI0XHU1YTI3XHU1YTI4XHU1YTJhXHU1YTJkXHU1YTMwXHU1YTQ0XHU1YTQ1XHU1YTQ3XHU1YTQ4XHU1YTRjXHU1YTUwXHU1YTU1XHU1YTVlXHU1YTYzXHU1YTY1XHU1YTY3XHU1YTZkXHU1YTc3XHU1YTdhXHU1YTdiXHU1YTdlXHU1YThiXHU1''@;'; put 'put ''YTkwXHU1YTkzXHU1YTk2XHU1YTk5XHU1YTljXHU1YTllXHU1YTlmXHU1YWEwXHU1YWEyXHU1YWE3XHU1YWFjXHU1YWIxXHU1YWIyXHU1YWIzXHU1YWI1XHU1YWI4XHU1YWJhXHU1YWJiXHU1YWJmIl0sWyI4ZmJhYTEiLCJcdTVhYzRcdTVhYzZcdTVhYzhcdTVhY2ZcdTVhZGFcdTVhZGNcdTVh''@;'; put 'put ''ZTBcdTVhZTVcdTVhZWFcdTVhZWVcdTVhZjVcdTVhZjZcdTVhZmRcdTViMDBcdTViMDFcdTViMDhcdTViMTdcdTViMzRcdTViMTlcdTViMWJcdTViMWRcdTViMjFcdTViMjVcdTViMmRcdTViMzhcdTViNDFcdTViNGJcdTViNGNcdTViNTJcdTViNTZcdTViNWVcdTViNjhcdTViNmVcdTViNmZc''@;'; put 'put ''dTViN2NcdTViN2RcdTViN2VcdTViN2ZcdTViODFcdTViODRcdTViODZcdTViOGFcdTViOGVcdTViOTBcdTViOTFcdTViOTNcdTViOTRcdTViOTZcdTViYThcdTViYTlcdTViYWNcdTViYWRcdTViYWZcdTViYjFcdTViYjJcdTViYjdcdTViYmFcdTViYmNcdTViYzBcdTViYzFcdTViY2RcdTVi''@;'; put 'put ''Y2ZcdTViZDYiLDQsIlx1NWJlMFx1NWJlZlx1NWJmMVx1NWJmNFx1NWJmZFx1NWMwY1x1NWMxN1x1NWMxZVx1NWMxZlx1NWMyM1x1NWMyNlx1NWMyOVx1NWMyYlx1NWMyY1x1NWMyZVx1NWMzMFx1NWMzMlx1NWMzNVx1NWMzNlx1NWM1OVx1NWM1YVx1NWM1Y1x1NWM2Mlx1NWM2M1x1NWM2N1x1''@;'; put 'put ''NWM2OFx1NWM2OSJdLFsiOGZiYmExIiwiXHU1YzZkXHU1YzcwXHU1Yzc0XHU1Yzc1XHU1YzdhXHU1YzdiXHU1YzdjXHU1YzdkXHU1Yzg3XHU1Yzg4XHU1YzhhXHU1YzhmXHU1YzkyXHU1YzlkXHU1YzlmXHU1Y2EwXHU1Y2EyXHU1Y2EzXHU1Y2E2XHU1Y2FhXHU1Y2IyXHU1Y2I0XHU1Y2I1XHU1''@;'; put 'put ''Y2JhXHU1Y2M5XHU1Y2NiXHU1Y2QyXHU1Y2RkXHU1Y2Q3XHU1Y2VlXHU1Y2YxXHU1Y2YyXHU1Y2Y0XHU1ZDAxXHU1ZDA2XHU1ZDBkXHU1ZDEyXHU1ZDJiXHU1ZDIzXHU1ZDI0XHU1ZDI2XHU1ZDI3XHU1ZDMxXHU1ZDM0XHU1ZDM5XHU1ZDNkXHU1ZDNmXHU1ZDQyXHU1ZDQzXHU1ZDQ2XHU1ZDQ4''@;'; put 'put ''XHU1ZDU1XHU1ZDUxXHU1ZDU5XHU1ZDRhXHU1ZDVmXHU1ZDYwXHU1ZDYxXHU1ZDYyXHU1ZDY0XHU1ZDZhXHU1ZDZkXHU1ZDcwXHU1ZDc5XHU1ZDdhXHU1ZDdlXHU1ZDdmXHU1ZDgxXHU1ZDgzXHU1ZDg4XHU1ZDhhXHU1ZDkyXHU1ZDkzXHU1ZDk0XHU1ZDk1XHU1ZDk5XHU1ZDliXHU1ZDlmXHU1''@;'; put 'put ''ZGEwXHU1ZGE3XHU1ZGFiXHU1ZGIwXHU1ZGI0XHU1ZGI4XHU1ZGI5XHU1ZGMzXHU1ZGM3XHU1ZGNiXHU1ZGQwXHU1ZGNlXHU1ZGQ4XHU1ZGQ5XHU1ZGUwXHU1ZGU0Il0sWyI4ZmJjYTEiLCJcdTVkZTlcdTVkZjhcdTVkZjlcdTVlMDBcdTVlMDdcdTVlMGRcdTVlMTJcdTVlMTRcdTVlMTVcdTVl''@;'; put 'put ''MThcdTVlMWZcdTVlMjBcdTVlMmVcdTVlMjhcdTVlMzJcdTVlMzVcdTVlM2VcdTVlNGJcdTVlNTBcdTVlNDlcdTVlNTFcdTVlNTZcdTVlNThcdTVlNWJcdTVlNWNcdTVlNWVcdTVlNjhcdTVlNmEiLDQsIlx1NWU3MFx1NWU4MFx1NWU4Ylx1NWU4ZVx1NWVhMlx1NWVhNFx1NWVhNVx1NWVhOFx1''@;'; put 'put ''NWVhYVx1NWVhY1x1NWViMVx1NWViM1x1NWViZFx1NWViZVx1NWViZlx1NWVjNlx1NWVjY1x1NWVjYlx1NWVjZVx1NWVkMVx1NWVkMlx1NWVkNFx1NWVkNVx1NWVkY1x1NWVkZVx1NWVlNVx1NWVlYlx1NWYwMlx1NWYwNlx1NWYwN1x1NWYwOFx1NWYwZVx1NWYxOVx1NWYxY1x1NWYxZFx1NWYy''@;'; put 'put ''MVx1NWYyMlx1NWYyM1x1NWYyNFx1NWYyOFx1NWYyYlx1NWYyY1x1NWYyZVx1NWYzMFx1NWYzNFx1NWYzNlx1NWYzYlx1NWYzZFx1NWYzZlx1NWY0MFx1NWY0NFx1NWY0NVx1NWY0N1x1NWY0ZFx1NWY1MFx1NWY1NFx1NWY1OFx1NWY1Ylx1NWY2MFx1NWY2M1x1NWY2NFx1NWY2NyJdLFsiOGZi''@;'; put 'put ''ZGExIiwiXHU1ZjZmXHU1ZjcyXHU1Zjc0XHU1Zjc1XHU1Zjc4XHU1ZjdhXHU1ZjdkXHU1ZjdlXHU1Zjg5XHU1ZjhkXHU1ZjhmXHU1Zjk2XHU1ZjljXHU1ZjlkXHU1ZmEyXHU1ZmE3XHU1ZmFiXHU1ZmE0XHU1ZmFjXHU1ZmFmXHU1ZmIwXHU1ZmIxXHU1ZmI4XHU1ZmM0XHU1ZmM3XHU1ZmM4XHU1''@;'; put 'put ''ZmM5XHU1ZmNiXHU1ZmQwIiw0LCJcdTVmZGVcdTVmZTFcdTVmZTJcdTVmZThcdTVmZTlcdTVmZWFcdTVmZWNcdTVmZWRcdTVmZWVcdTVmZWZcdTVmZjJcdTVmZjNcdTVmZjZcdTVmZmFcdTVmZmNcdTYwMDdcdTYwMGFcdTYwMGRcdTYwMTNcdTYwMTRcdTYwMTdcdTYwMThcdTYwMWFcdTYwMWZc''@;'; put 'put ''dTYwMjRcdTYwMmRcdTYwMzNcdTYwMzVcdTYwNDBcdTYwNDdcdTYwNDhcdTYwNDlcdTYwNGNcdTYwNTFcdTYwNTRcdTYwNTZcdTYwNTdcdTYwNWRcdTYwNjFcdTYwNjdcdTYwNzFcdTYwN2VcdTYwN2ZcdTYwODJcdTYwODZcdTYwODhcdTYwOGFcdTYwOGVcdTYwOTFcdTYwOTNcdTYwOTVcdTYw''@;'; put 'put ''OThcdTYwOWRcdTYwOWVcdTYwYTJcdTYwYTRcdTYwYTVcdTYwYThcdTYwYjBcdTYwYjFcdTYwYjciXSxbIjhmYmVhMSIsIlx1NjBiYlx1NjBiZVx1NjBjMlx1NjBjNFx1NjBjOFx1NjBjOVx1NjBjYVx1NjBjYlx1NjBjZVx1NjBjZlx1NjBkNFx1NjBkNVx1NjBkOVx1NjBkYlx1NjBkZFx1NjBk''@;'; put 'put ''ZVx1NjBlMlx1NjBlNVx1NjBmMlx1NjBmNVx1NjBmOFx1NjBmY1x1NjBmZFx1NjEwMlx1NjEwN1x1NjEwYVx1NjEwY1x1NjExMCIsNCwiXHU2MTE2XHU2MTE3XHU2MTE5XHU2MTFjXHU2MTFlXHU2MTIyXHU2MTJhXHU2MTJiXHU2MTMwXHU2MTMxXHU2MTM1XHU2MTM2XHU2MTM3XHU2MTM5XHU2''@;'; put 'put ''MTQxXHU2MTQ1XHU2MTQ2XHU2MTQ5XHU2MTVlXHU2MTYwXHU2MTZjXHU2MTcyXHU2MTc4XHU2MTdiXHU2MTdjXHU2MTdmXHU2MTgwXHU2MTgxXHU2MTgzXHU2MTg0XHU2MThiXHU2MThkXHU2MTkyXHU2MTkzXHU2MTk3XHU2MTk4XHU2MTljXHU2MTlkXHU2MTlmXHU2MWEwXHU2MWE1XHU2MWE4''@;'; put 'put ''XHU2MWFhXHU2MWFkXHU2MWI4XHU2MWI5XHU2MWJjXHU2MWMwXHU2MWMxXHU2MWMyXHU2MWNlXHU2MWNmXHU2MWQ1XHU2MWRjXHU2MWRkXHU2MWRlXHU2MWRmXHU2MWUxXHU2MWUyXHU2MWU3XHU2MWU5XHU2MWU1Il0sWyI4ZmJmYTEiLCJcdTYxZWNcdTYxZWRcdTYxZWZcdTYyMDFcdTYyMDNc''@;'; put 'put ''dTYyMDRcdTYyMDdcdTYyMTNcdTYyMTVcdTYyMWNcdTYyMjBcdTYyMjJcdTYyMjNcdTYyMjdcdTYyMjlcdTYyMmJcdTYyMzlcdTYyM2RcdTYyNDJcdTYyNDNcdTYyNDRcdTYyNDZcdTYyNGNcdTYyNTBcdTYyNTFcdTYyNTJcdTYyNTRcdTYyNTZcdTYyNWFcdTYyNWNcdTYyNjRcdTYyNmRcdTYy''@;'; put 'put ''NmZcdTYyNzNcdTYyN2FcdTYyN2RcdTYyOGRcdTYyOGVcdTYyOGZcdTYyOTBcdTYyYTZcdTYyYThcdTYyYjNcdTYyYjZcdTYyYjdcdTYyYmFcdTYyYmVcdTYyYmZcdTYyYzRcdTYyY2VcdTYyZDVcdTYyZDZcdTYyZGFcdTYyZWFcdTYyZjJcdTYyZjRcdTYyZmNcdTYyZmRcdTYzMDNcdTYzMDRc''@;'; put 'put ''dTYzMGFcdTYzMGJcdTYzMGRcdTYzMTBcdTYzMTNcdTYzMTZcdTYzMThcdTYzMjlcdTYzMmFcdTYzMmRcdTYzMzVcdTYzMzZcdTYzMzlcdTYzM2NcdTYzNDFcdTYzNDJcdTYzNDNcdTYzNDRcdTYzNDZcdTYzNGFcdTYzNGJcdTYzNGVcdTYzNTJcdTYzNTNcdTYzNTRcdTYzNThcdTYzNWJcdTYz''@;'; put 'put ''NjVcdTYzNjZcdTYzNmNcdTYzNmRcdTYzNzFcdTYzNzRcdTYzNzUiXSxbIjhmYzBhMSIsIlx1NjM3OFx1NjM3Y1x1NjM3ZFx1NjM3Zlx1NjM4Mlx1NjM4NFx1NjM4N1x1NjM4YVx1NjM5MFx1NjM5NFx1NjM5NVx1NjM5OVx1NjM5YVx1NjM5ZVx1NjNhNFx1NjNhNlx1NjNhZFx1NjNhZVx1NjNh''@;'; put 'put ''Zlx1NjNiZFx1NjNjMVx1NjNjNVx1NjNjOFx1NjNjZVx1NjNkMVx1NjNkM1x1NjNkNFx1NjNkNVx1NjNkY1x1NjNlMFx1NjNlNVx1NjNlYVx1NjNlY1x1NjNmMlx1NjNmM1x1NjNmNVx1NjNmOFx1NjNmOVx1NjQwOVx1NjQwYVx1NjQxMFx1NjQxMlx1NjQxNFx1NjQxOFx1NjQxZVx1NjQyMFx1''@;'; put 'put ''NjQyMlx1NjQyNFx1NjQyNVx1NjQyOVx1NjQyYVx1NjQyZlx1NjQzMFx1NjQzNVx1NjQzZFx1NjQzZlx1NjQ0Ylx1NjQ0Zlx1NjQ1MVx1NjQ1Mlx1NjQ1M1x1NjQ1NFx1NjQ1YVx1NjQ1Ylx1NjQ1Y1x1NjQ1ZFx1NjQ1Zlx1NjQ2MFx1NjQ2MVx1NjQ2M1x1NjQ2ZFx1NjQ3M1x1NjQ3NFx1NjQ3''@;'; put 'put ''Ylx1NjQ3ZFx1NjQ4NVx1NjQ4N1x1NjQ4Zlx1NjQ5MFx1NjQ5MVx1NjQ5OFx1NjQ5OVx1NjQ5Ylx1NjQ5ZFx1NjQ5Zlx1NjRhMVx1NjRhM1x1NjRhNlx1NjRhOFx1NjRhY1x1NjRiM1x1NjRiZFx1NjRiZVx1NjRiZiJdLFsiOGZjMWExIiwiXHU2NGM0XHU2NGM5XHU2NGNhXHU2NGNiXHU2NGNj''@;'; put 'put ''XHU2NGNlXHU2NGQwXHU2NGQxXHU2NGQ1XHU2NGQ3XHU2NGU0XHU2NGU1XHU2NGU5XHU2NGVhXHU2NGVkXHU2NGYwXHU2NGY1XHU2NGY3XHU2NGZiXHU2NGZmXHU2NTAxXHU2NTA0XHU2NTA4XHU2NTA5XHU2NTBhXHU2NTBmXHU2NTEzXHU2NTE0XHU2NTE2XHU2NTE5XHU2NTFiXHU2NTFlXHU2''@;'; put 'put ''NTFmXHU2NTIyXHU2NTI2XHU2NTI5XHU2NTJlXHU2NTMxXHU2NTNhXHU2NTNjXHU2NTNkXHU2NTQzXHU2NTQ3XHU2NTQ5XHU2NTUwXHU2NTUyXHU2NTU0XHU2NTVmXHU2NTYwXHU2NTY3XHU2NTZiXHU2NTdhXHU2NTdkXHU2NTgxXHU2NTg1XHU2NThhXHU2NTkyXHU2NTk1XHU2NTk4XHU2NTlk''@;'; put 'put ''XHU2NWEwXHU2NWEzXHU2NWE2XHU2NWFlXHU2NWIyXHU2NWIzXHU2NWI0XHU2NWJmXHU2NWMyXHU2NWM4XHU2NWM5XHU2NWNlXHU2NWQwXHU2NWQ0XHU2NWQ2XHU2NWQ4XHU2NWRmXHU2NWYwXHU2NWYyXHU2NWY0XHU2NWY1XHU2NWY5XHU2NWZlXHU2NWZmXHU2NjAwXHU2NjA0XHU2NjA4XHU2''@;'; put 'put ''NjA5XHU2NjBkXHU2NjExXHU2NjEyXHU2NjE1XHU2NjE2XHU2NjFkIl0sWyI4ZmMyYTEiLCJcdTY2MWVcdTY2MjFcdTY2MjJcdTY2MjNcdTY2MjRcdTY2MjZcdTY2MjlcdTY2MmFcdTY2MmJcdTY2MmNcdTY2MmVcdTY2MzBcdTY2MzFcdTY2MzNcdTY2MzlcdTY2MzdcdTY2NDBcdTY2NDVcdTY2''@;'; put 'put ''NDZcdTY2NGFcdTY2NGNcdTY2NTFcdTY2NGVcdTY2NTdcdTY2NThcdTY2NTlcdTY2NWJcdTY2NWNcdTY2NjBcdTY2NjFcdTY2ZmJcdTY2NmFcdTY2NmJcdTY2NmNcdTY2N2VcdTY2NzNcdTY2NzVcdTY2N2ZcdTY2NzdcdTY2NzhcdTY2NzlcdTY2N2JcdTY2ODBcdTY2N2NcdTY2OGJcdTY2OGNc''@;'; put 'put ''dTY2OGRcdTY2OTBcdTY2OTJcdTY2OTlcdTY2OWFcdTY2OWJcdTY2OWNcdTY2OWZcdTY2YTBcdTY2YTRcdTY2YWRcdTY2YjFcdTY2YjJcdTY2YjVcdTY2YmJcdTY2YmZcdTY2YzBcdTY2YzJcdTY2YzNcdTY2YzhcdTY2Y2NcdTY2Y2VcdTY2Y2ZcdTY2ZDRcdTY2ZGJcdTY2ZGZcdTY2ZThcdTY2''@;'; put 'put ''ZWJcdTY2ZWNcdTY2ZWVcdTY2ZmFcdTY3MDVcdTY3MDdcdTY3MGVcdTY3MTNcdTY3MTlcdTY3MWNcdTY3MjBcdTY3MjJcdTY3MzNcdTY3M2VcdTY3NDVcdTY3NDdcdTY3NDhcdTY3NGNcdTY3NTRcdTY3NTVcdTY3NWQiXSxbIjhmYzNhMSIsIlx1Njc2Nlx1Njc2Y1x1Njc2ZVx1Njc3NFx1Njc3''@;'; put 'put ''Nlx1Njc3Ylx1Njc4MVx1Njc4NFx1Njc4ZVx1Njc4Zlx1Njc5MVx1Njc5M1x1Njc5Nlx1Njc5OFx1Njc5OVx1Njc5Ylx1NjdiMFx1NjdiMVx1NjdiMlx1NjdiNVx1NjdiYlx1NjdiY1x1NjdiZFx1NjdmOVx1NjdjMFx1NjdjMlx1NjdjM1x1NjdjNVx1NjdjOFx1NjdjOVx1NjdkMlx1NjdkN1x1''@;'; put 'put ''NjdkOVx1NjdkY1x1NjdlMVx1NjdlNlx1NjdmMFx1NjdmMlx1NjdmNlx1NjdmN1x1Njg1Mlx1NjgxNFx1NjgxOVx1NjgxZFx1NjgxZlx1NjgyOFx1NjgyN1x1NjgyY1x1NjgyZFx1NjgyZlx1NjgzMFx1NjgzMVx1NjgzM1x1NjgzYlx1NjgzZlx1Njg0NFx1Njg0NVx1Njg0YVx1Njg0Y1x1Njg1''@;'; put 'put ''NVx1Njg1N1x1Njg1OFx1Njg1Ylx1Njg2Ylx1Njg2ZSIsNCwiXHU2ODc1XHU2ODc5XHU2ODdhXHU2ODdiXHU2ODdjXHU2ODgyXHU2ODg0XHU2ODg2XHU2ODg4XHU2ODk2XHU2ODk4XHU2ODlhXHU2ODljXHU2OGExXHU2OGEzXHU2OGE1XHU2OGE5XHU2OGFhXHU2OGFlXHU2OGIyXHU2OGJiXHU2''@;'; put 'put ''OGM1XHU2OGM4XHU2OGNjXHU2OGNmIl0sWyI4ZmM0YTEiLCJcdTY4ZDBcdTY4ZDFcdTY4ZDNcdTY4ZDZcdTY4ZDlcdTY4ZGNcdTY4ZGRcdTY4ZTVcdTY4ZThcdTY4ZWFcdTY4ZWJcdTY4ZWNcdTY4ZWRcdTY4ZjBcdTY4ZjFcdTY4ZjVcdTY4ZjZcdTY4ZmJcdTY4ZmNcdTY4ZmRcdTY5MDZcdTY5''@;'; put 'put ''MDlcdTY5MGFcdTY5MTBcdTY5MTFcdTY5MTNcdTY5MTZcdTY5MTdcdTY5MzFcdTY5MzNcdTY5MzVcdTY5MzhcdTY5M2JcdTY5NDJcdTY5NDVcdTY5NDlcdTY5NGVcdTY5NTdcdTY5NWJcdTY5NjNcdTY5NjRcdTY5NjVcdTY5NjZcdTY5NjhcdTY5NjlcdTY5NmNcdTY5NzBcdTY5NzFcdTY5NzJc''@;'; put 'put ''dTY5N2FcdTY5N2JcdTY5N2ZcdTY5ODBcdTY5OGRcdTY5OTJcdTY5OTZcdTY5OThcdTY5YTFcdTY5YTVcdTY5YTZcdTY5YThcdTY5YWJcdTY5YWRcdTY5YWZcdTY5YjdcdTY5YjhcdTY5YmFcdTY5YmNcdTY5YzVcdTY5YzhcdTY5ZDFcdTY5ZDZcdTY5ZDdcdTY5ZTJcdTY5ZTVcdTY5ZWVcdTY5''@;'; put 'put ''ZWZcdTY5ZjFcdTY5ZjNcdTY5ZjVcdTY5ZmVcdTZhMDBcdTZhMDFcdTZhMDNcdTZhMGZcdTZhMTFcdTZhMTVcdTZhMWFcdTZhMWRcdTZhMjBcdTZhMjRcdTZhMjhcdTZhMzBcdTZhMzIiXSxbIjhmYzVhMSIsIlx1NmEzNFx1NmEzN1x1NmEzYlx1NmEzZVx1NmEzZlx1NmE0NVx1NmE0Nlx1NmE0''@;'; put 'put ''OVx1NmE0YVx1NmE0ZVx1NmE1MFx1NmE1MVx1NmE1Mlx1NmE1NVx1NmE1Nlx1NmE1Ylx1NmE2NFx1NmE2N1x1NmE2YVx1NmE3MVx1NmE3M1x1NmE3ZVx1NmE4MVx1NmE4M1x1NmE4Nlx1NmE4N1x1NmE4OVx1NmE4Ylx1NmE5MVx1NmE5Ylx1NmE5ZFx1NmE5ZVx1NmE5Zlx1NmFhNVx1NmFhYlx1''@;'; put 'put ''NmFhZlx1NmFiMFx1NmFiMVx1NmFiNFx1NmFiZFx1NmFiZVx1NmFiZlx1NmFjNlx1NmFjOVx1NmFjOFx1NmFjY1x1NmFkMFx1NmFkNFx1NmFkNVx1NmFkNlx1NmFkY1x1NmFkZFx1NmFlNFx1NmFlN1x1NmFlY1x1NmFmMFx1NmFmMVx1NmFmMlx1NmFmY1x1NmFmZFx1NmIwMlx1NmIwM1x1NmIw''@;'; put 'put ''Nlx1NmIwN1x1NmIwOVx1NmIwZlx1NmIxMFx1NmIxMVx1NmIxN1x1NmIxYlx1NmIxZVx1NmIyNFx1NmIyOFx1NmIyYlx1NmIyY1x1NmIyZlx1NmIzNVx1NmIzNlx1NmIzYlx1NmIzZlx1NmI0Nlx1NmI0YVx1NmI0ZFx1NmI1Mlx1NmI1Nlx1NmI1OFx1NmI1ZFx1NmI2MFx1NmI2N1x1NmI2Ylx1''@;'; put 'put ''NmI2ZVx1NmI3MFx1NmI3NVx1NmI3ZCJdLFsiOGZjNmExIiwiXHU2YjdlXHU2YjgyXHU2Yjg1XHU2Yjk3XHU2YjliXHU2YjlmXHU2YmEwXHU2YmEyXHU2YmEzXHU2YmE4XHU2YmE5XHU2YmFjXHU2YmFkXHU2YmFlXHU2YmIwXHU2YmI4XHU2YmI5XHU2YmJkXHU2YmJlXHU2YmMzXHU2YmM0XHU2''@;'; put 'put ''YmM5XHU2YmNjXHU2YmQ2XHU2YmRhXHU2YmUxXHU2YmUzXHU2YmU2XHU2YmU3XHU2YmVlXHU2YmYxXHU2YmY3XHU2YmY5XHU2YmZmXHU2YzAyXHU2YzA0XHU2YzA1XHU2YzA5XHU2YzBkXHU2YzBlXHU2YzEwXHU2YzEyXHU2YzE5XHU2YzFmXHU2YzI2XHU2YzI3XHU2YzI4XHU2YzJjXHU2YzJl''@;'; put 'put ''XHU2YzMzXHU2YzM1XHU2YzM2XHU2YzNhXHU2YzNiXHU2YzNmXHU2YzRhXHU2YzRiXHU2YzRkXHU2YzRmXHU2YzUyXHU2YzU0XHU2YzU5XHU2YzViXHU2YzVjXHU2YzZiXHU2YzZkXHU2YzZmXHU2Yzc0XHU2Yzc2XHU2Yzc4XHU2Yzc5XHU2YzdiXHU2Yzg1XHU2Yzg2XHU2Yzg3XHU2Yzg5XHU2''@;'; put 'put ''Yzk0XHU2Yzk1XHU2Yzk3XHU2Yzk4XHU2YzljXHU2YzlmXHU2Y2IwXHU2Y2IyXHU2Y2I0XHU2Y2MyXHU2Y2M2XHU2Y2NkXHU2Y2NmXHU2Y2QwXHU2Y2QxXHU2Y2QyXHU2Y2Q0XHU2Y2Q2Il0sWyI4ZmM3YTEiLCJcdTZjZGFcdTZjZGNcdTZjZTBcdTZjZTdcdTZjZTlcdTZjZWJcdTZjZWNcdTZj''@;'; put 'put ''ZWVcdTZjZjJcdTZjZjRcdTZkMDRcdTZkMDdcdTZkMGFcdTZkMGVcdTZkMGZcdTZkMTFcdTZkMTNcdTZkMWFcdTZkMjZcdTZkMjdcdTZkMjhcdTZjNjdcdTZkMmVcdTZkMmZcdTZkMzFcdTZkMzlcdTZkM2NcdTZkM2ZcdTZkNTdcdTZkNWVcdTZkNWZcdTZkNjFcdTZkNjVcdTZkNjdcdTZkNmZc''@;'; put 'put ''dTZkNzBcdTZkN2NcdTZkODJcdTZkODdcdTZkOTFcdTZkOTJcdTZkOTRcdTZkOTZcdTZkOTdcdTZkOThcdTZkYWFcdTZkYWNcdTZkYjRcdTZkYjdcdTZkYjlcdTZkYmRcdTZkYmZcdTZkYzRcdTZkYzhcdTZkY2FcdTZkY2VcdTZkY2ZcdTZkZDZcdTZkZGJcdTZkZGRcdTZkZGZcdTZkZTBcdTZk''@;'; put 'put ''ZTJcdTZkZTVcdTZkZTlcdTZkZWZcdTZkZjBcdTZkZjRcdTZkZjZcdTZkZmNcdTZlMDBcdTZlMDRcdTZlMWVcdTZlMjJcdTZlMjdcdTZlMzJcdTZlMzZcdTZlMzlcdTZlM2JcdTZlM2NcdTZlNDRcdTZlNDVcdTZlNDhcdTZlNDlcdTZlNGJcdTZlNGZcdTZlNTFcdTZlNTJcdTZlNTNcdTZlNTRc''@;'; put 'put ''dTZlNTdcdTZlNWNcdTZlNWRcdTZlNWUiXSxbIjhmYzhhMSIsIlx1NmU2Mlx1NmU2M1x1NmU2OFx1NmU3M1x1NmU3Ylx1NmU3ZFx1NmU4ZFx1NmU5M1x1NmU5OVx1NmVhMFx1NmVhN1x1NmVhZFx1NmVhZVx1NmViMVx1NmViM1x1NmViYlx1NmViZlx1NmVjMFx1NmVjMVx1NmVjM1x1NmVjN1x1''@;'; put 'put ''NmVjOFx1NmVjYVx1NmVjZFx1NmVjZVx1NmVjZlx1NmVlYlx1NmVlZFx1NmVlZVx1NmVmOVx1NmVmYlx1NmVmZFx1NmYwNFx1NmYwOFx1NmYwYVx1NmYwY1x1NmYwZFx1NmYxNlx1NmYxOFx1NmYxYVx1NmYxYlx1NmYyNlx1NmYyOVx1NmYyYVx1NmYyZlx1NmYzMFx1NmYzM1x1NmYzNlx1NmYz''@;'; put 'put ''Ylx1NmYzY1x1NmYyZFx1NmY0Zlx1NmY1MVx1NmY1Mlx1NmY1M1x1NmY1N1x1NmY1OVx1NmY1YVx1NmY1ZFx1NmY1ZVx1NmY2MVx1NmY2Mlx1NmY2OFx1NmY2Y1x1NmY3ZFx1NmY3ZVx1NmY4M1x1NmY4N1x1NmY4OFx1NmY4Ylx1NmY4Y1x1NmY4ZFx1NmY5MFx1NmY5Mlx1NmY5M1x1NmY5NFx1''@;'; put 'put ''NmY5Nlx1NmY5YVx1NmY5Zlx1NmZhMFx1NmZhNVx1NmZhNlx1NmZhN1x1NmZhOFx1NmZhZVx1NmZhZlx1NmZiMFx1NmZiNVx1NmZiNlx1NmZiY1x1NmZjNVx1NmZjN1x1NmZjOFx1NmZjYSJdLFsiOGZjOWExIiwiXHU2ZmRhXHU2ZmRlXHU2ZmU4XHU2ZmU5XHU2ZmYwXHU2ZmY1XHU2ZmY5XHU2''@;'; put 'put ''ZmZjXHU2ZmZkXHU3MDAwXHU3MDA1XHU3MDA2XHU3MDA3XHU3MDBkXHU3MDE3XHU3MDIwXHU3MDIzXHU3MDJmXHU3MDM0XHU3MDM3XHU3MDM5XHU3MDNjXHU3MDQzXHU3MDQ0XHU3MDQ4XHU3MDQ5XHU3MDRhXHU3MDRiXHU3MDU0XHU3MDU1XHU3MDVkXHU3MDVlXHU3MDRlXHU3MDY0XHU3MDY1''@;'; put 'put ''XHU3MDZjXHU3MDZlXHU3MDc1XHU3MDc2XHU3MDdlXHU3MDgxXHU3MDg1XHU3MDg2XHU3MDk0Iiw0LCJcdTcwOWJcdTcwYTRcdTcwYWJcdTcwYjBcdTcwYjFcdTcwYjRcdTcwYjdcdTcwY2FcdTcwZDFcdTcwZDNcdTcwZDRcdTcwZDVcdTcwZDZcdTcwZDhcdTcwZGNcdTcwZTRcdTcwZmFcdTcx''@;'; put 'put ''MDMiLDQsIlx1NzEwYlx1NzEwY1x1NzEwZlx1NzExZVx1NzEyMFx1NzEyYlx1NzEyZFx1NzEyZlx1NzEzMFx1NzEzMVx1NzEzOFx1NzE0MVx1NzE0NVx1NzE0Nlx1NzE0N1x1NzE0YVx1NzE0Ylx1NzE1MFx1NzE1Mlx1NzE1N1x1NzE1YVx1NzE1Y1x1NzE1ZVx1NzE2MCJdLFsiOGZjYWExIiwi''@;'; put 'put ''XHU3MTY4XHU3MTc5XHU3MTgwXHU3MTg1XHU3MTg3XHU3MThjXHU3MTkyXHU3MTlhXHU3MTliXHU3MWEwXHU3MWEyXHU3MWFmXHU3MWIwXHU3MWIyXHU3MWIzXHU3MWJhXHU3MWJmXHU3MWMwXHU3MWMxXHU3MWM0XHU3MWNiXHU3MWNjXHU3MWQzXHU3MWQ2XHU3MWQ5XHU3MWRhXHU3MWRjXHU3''@;'; put 'put ''MWY4XHU3MWZlXHU3MjAwXHU3MjA3XHU3MjA4XHU3MjA5XHU3MjEzXHU3MjE3XHU3MjFhXHU3MjFkXHU3MjFmXHU3MjI0XHU3MjJiXHU3MjJmXHU3MjM0XHU3MjM4XHU3MjM5XHU3MjQxXHU3MjQyXHU3MjQzXHU3MjQ1XHU3MjRlXHU3MjRmXHU3MjUwXHU3MjUzXHU3MjU1XHU3MjU2XHU3MjVh''@;'; put 'put ''XHU3MjVjXHU3MjVlXHU3MjYwXHU3MjYzXHU3MjY4XHU3MjZiXHU3MjZlXHU3MjZmXHU3MjcxXHU3Mjc3XHU3Mjc4XHU3MjdiXHU3MjdjXHU3MjdmXHU3Mjg0XHU3Mjg5XHU3MjhkXHU3MjhlXHU3MjkzXHU3MjliXHU3MmE4XHU3MmFkXHU3MmFlXHU3MmIxXHU3MmI0XHU3MmJlXHU3MmMxXHU3''@;'; put 'put ''MmM3XHU3MmM5XHU3MmNjXHU3MmQ1XHU3MmQ2XHU3MmQ4XHU3MmRmXHU3MmU1XHU3MmYzXHU3MmY0XHU3MmZhXHU3MmZiIl0sWyI4ZmNiYTEiLCJcdTcyZmVcdTczMDJcdTczMDRcdTczMDVcdTczMDdcdTczMGJcdTczMGRcdTczMTJcdTczMTNcdTczMThcdTczMTlcdTczMWVcdTczMjJcdTcz''@;'; put 'put ''MjRcdTczMjdcdTczMjhcdTczMmNcdTczMzFcdTczMzJcdTczMzVcdTczM2FcdTczM2JcdTczM2RcdTczNDNcdTczNGRcdTczNTBcdTczNTJcdTczNTZcdTczNThcdTczNWRcdTczNWVcdTczNWZcdTczNjBcdTczNjZcdTczNjdcdTczNjlcdTczNmJcdTczNmNcdTczNmVcdTczNmZcdTczNzFc''@;'; put 'put ''dTczNzdcdTczNzlcdTczN2NcdTczODBcdTczODFcdTczODNcdTczODVcdTczODZcdTczOGVcdTczOTBcdTczOTNcdTczOTVcdTczOTdcdTczOThcdTczOWNcdTczOWVcdTczOWZcdTczYTBcdTczYTJcdTczYTVcdTczYTZcdTczYWFcdTczYWJcdTczYWRcdTczYjVcdTczYjdcdTczYjlcdTcz''@;'; put 'put ''YmNcdTczYmRcdTczYmZcdTczYzVcdTczYzZcdTczYzlcdTczY2JcdTczY2NcdTczY2ZcdTczZDJcdTczZDNcdTczZDZcdTczZDlcdTczZGRcdTczZTFcdTczZTNcdTczZTZcdTczZTdcdTczZTlcdTczZjRcdTczZjVcdTczZjdcdTczZjlcdTczZmFcdTczZmJcdTczZmQiXSxbIjhmY2NhMSIs''@;'; put 'put ''Ilx1NzNmZlx1NzQwMFx1NzQwMVx1NzQwNFx1NzQwN1x1NzQwYVx1NzQxMVx1NzQxYVx1NzQxYlx1NzQyNFx1NzQyNlx1NzQyOCIsOSwiXHU3NDM5XHU3NDQwXHU3NDQzXHU3NDQ0XHU3NDQ2XHU3NDQ3XHU3NDRiXHU3NDRkXHU3NDUxXHU3NDUyXHU3NDU3XHU3NDVkXHU3NDYyXHU3NDY2XHU3''@;'; put 'put ''NDY3XHU3NDY4XHU3NDZiXHU3NDZkXHU3NDZlXHU3NDcxXHU3NDcyXHU3NDgwXHU3NDgxXHU3NDg1XHU3NDg2XHU3NDg3XHU3NDg5XHU3NDhmXHU3NDkwXHU3NDkxXHU3NDkyXHU3NDk4XHU3NDk5XHU3NDlhXHU3NDljXHU3NDlmXHU3NGEwXHU3NGExXHU3NGEzXHU3NGE2XHU3NGE4XHU3NGE5''@;'; put 'put ''XHU3NGFhXHU3NGFiXHU3NGFlXHU3NGFmXHU3NGIxXHU3NGIyXHU3NGI1XHU3NGI5XHU3NGJiXHU3NGJmXHU3NGM4XHU3NGM5XHU3NGNjXHU3NGQwXHU3NGQzXHU3NGQ4XHU3NGRhXHU3NGRiXHU3NGRlXHU3NGRmXHU3NGU0XHU3NGU4XHU3NGVhXHU3NGViXHU3NGVmXHU3NGY0XHU3NGZhXHU3''@;'; put 'put ''NGZiXHU3NGZjXHU3NGZmXHU3NTA2Il0sWyI4ZmNkYTEiLCJcdTc1MTJcdTc1MTZcdTc1MTdcdTc1MjBcdTc1MjFcdTc1MjRcdTc1MjdcdTc1MjlcdTc1MmFcdTc1MmZcdTc1MzZcdTc1MzlcdTc1M2RcdTc1M2VcdTc1M2ZcdTc1NDBcdTc1NDNcdTc1NDdcdTc1NDhcdTc1NGVcdTc1NTBcdTc1''@;'; put 'put ''NTJcdTc1NTdcdTc1NWVcdTc1NWZcdTc1NjFcdTc1NmZcdTc1NzFcdTc1NzkiLDUsIlx1NzU4MVx1NzU4NVx1NzU5MFx1NzU5Mlx1NzU5M1x1NzU5NVx1NzU5OVx1NzU5Y1x1NzVhMlx1NzVhNFx1NzViNFx1NzViYVx1NzViZlx1NzVjMFx1NzVjMVx1NzVjNFx1NzVjNlx1NzVjY1x1NzVjZVx1''@;'; put 'put ''NzVjZlx1NzVkN1x1NzVkY1x1NzVkZlx1NzVlMFx1NzVlMVx1NzVlNFx1NzVlN1x1NzVlY1x1NzVlZVx1NzVlZlx1NzVmMVx1NzVmOVx1NzYwMFx1NzYwMlx1NzYwM1x1NzYwNFx1NzYwN1x1NzYwOFx1NzYwYVx1NzYwY1x1NzYwZlx1NzYxMlx1NzYxM1x1NzYxNVx1NzYxNlx1NzYxOVx1NzYx''@;'; put 'put ''Ylx1NzYxY1x1NzYxZFx1NzYxZVx1NzYyM1x1NzYyNVx1NzYyNlx1NzYyOVx1NzYyZFx1NzYzMlx1NzYzM1x1NzYzNVx1NzYzOFx1NzYzOSJdLFsiOGZjZWExIiwiXHU3NjNhXHU3NjNjXHU3NjRhXHU3NjQwXHU3NjQxXHU3NjQzXHU3NjQ0XHU3NjQ1XHU3NjQ5XHU3NjRiXHU3NjU1XHU3NjU5''@;'; put 'put ''XHU3NjVmXHU3NjY0XHU3NjY1XHU3NjZkXHU3NjZlXHU3NjZmXHU3NjcxXHU3Njc0XHU3NjgxXHU3Njg1XHU3NjhjXHU3NjhkXHU3Njk1XHU3NjliXHU3NjljXHU3NjlkXHU3NjlmXHU3NmEwXHU3NmEyIiw2LCJcdTc2YWFcdTc2YWRcdTc2YmRcdTc2YzFcdTc2YzVcdTc2YzlcdTc2Y2JcdTc2''@;'; put 'put ''Y2NcdTc2Y2VcdTc2ZDRcdTc2ZDlcdTc2ZTBcdTc2ZTZcdTc2ZThcdTc2ZWNcdTc2ZjBcdTc2ZjFcdTc2ZjZcdTc2ZjlcdTc2ZmNcdTc3MDBcdTc3MDZcdTc3MGFcdTc3MGVcdTc3MTJcdTc3MTRcdTc3MTVcdTc3MTdcdTc3MTlcdTc3MWFcdTc3MWNcdTc3MjJcdTc3MjhcdTc3MmRcdTc3MmVc''@;'; put 'put ''dTc3MmZcdTc3MzRcdTc3MzVcdTc3MzZcdTc3MzlcdTc3M2RcdTc3M2VcdTc3NDJcdTc3NDVcdTc3NDZcdTc3NGFcdTc3NGRcdTc3NGVcdTc3NGZcdTc3NTJcdTc3NTZcdTc3NTdcdTc3NWNcdTc3NWVcdTc3NWZcdTc3NjBcdTc3NjIiXSxbIjhmY2ZhMSIsIlx1Nzc2NFx1Nzc2N1x1Nzc2YVx1''@;'; put 'put ''Nzc2Y1x1Nzc3MFx1Nzc3Mlx1Nzc3M1x1Nzc3NFx1Nzc3YVx1Nzc3ZFx1Nzc4MFx1Nzc4NFx1Nzc4Y1x1Nzc4ZFx1Nzc5NFx1Nzc5NVx1Nzc5Nlx1Nzc5YVx1Nzc5Zlx1NzdhMlx1NzdhN1x1NzdhYVx1NzdhZVx1NzdhZlx1NzdiMVx1NzdiNVx1NzdiZVx1NzdjM1x1NzdjOVx1NzdkMVx1Nzdk''@;'; put 'put ''Mlx1NzdkNVx1NzdkOVx1NzdkZVx1NzdkZlx1NzdlMFx1NzdlNFx1NzdlNlx1NzdlYVx1NzdlY1x1NzdmMFx1NzdmMVx1NzdmNFx1NzdmOFx1NzdmYlx1NzgwNVx1NzgwNlx1NzgwOVx1NzgwZFx1NzgwZVx1NzgxMVx1NzgxZFx1NzgyMVx1NzgyMlx1NzgyM1x1NzgyZFx1NzgyZVx1NzgzMFx1''@;'; put 'put ''NzgzNVx1NzgzN1x1Nzg0M1x1Nzg0NFx1Nzg0N1x1Nzg0OFx1Nzg0Y1x1Nzg0ZVx1Nzg1Mlx1Nzg1Y1x1Nzg1ZVx1Nzg2MFx1Nzg2MVx1Nzg2M1x1Nzg2NFx1Nzg2OFx1Nzg2YVx1Nzg2ZVx1Nzg3YVx1Nzg3ZVx1Nzg4YVx1Nzg4Zlx1Nzg5NFx1Nzg5OFx1NzhhMVx1Nzg5ZFx1Nzg5ZVx1Nzg5''@;'; put 'put ''Zlx1NzhhNFx1NzhhOFx1NzhhY1x1NzhhZFx1NzhiMFx1NzhiMVx1NzhiMlx1NzhiMyJdLFsiOGZkMGExIiwiXHU3OGJiXHU3OGJkXHU3OGJmXHU3OGM3XHU3OGM4XHU3OGM5XHU3OGNjXHU3OGNlXHU3OGQyXHU3OGQzXHU3OGQ1XHU3OGQ2XHU3OGU0XHU3OGRiXHU3OGRmXHU3OGUwXHU3OGUx''@;'; put 'put ''XHU3OGU2XHU3OGVhXHU3OGYyXHU3OGYzXHU3OTAwXHU3OGY2XHU3OGY3XHU3OGZhXHU3OGZiXHU3OGZmXHU3OTA2XHU3OTBjXHU3OTEwXHU3OTFhXHU3OTFjXHU3OTFlXHU3OTFmXHU3OTIwXHU3OTI1XHU3OTI3XHU3OTI5XHU3OTJkXHU3OTMxXHU3OTM0XHU3OTM1XHU3OTNiXHU3OTNkXHU3''@;'; put 'put ''OTNmXHU3OTQ0XHU3OTQ1XHU3OTQ2XHU3OTRhXHU3OTRiXHU3OTRmXHU3OTUxXHU3OTU0XHU3OTU4XHU3OTViXHU3OTVjXHU3OTY3XHU3OTY5XHU3OTZiXHU3OTcyXHU3OTc5XHU3OTdiXHU3OTdjXHU3OTdlXHU3OThiXHU3OThjXHU3OTkxXHU3OTkzXHU3OTk0XHU3OTk1XHU3OTk2XHU3OTk4''@;'; put 'put ''XHU3OTliXHU3OTljXHU3OWExXHU3OWE4XHU3OWE5XHU3OWFiXHU3OWFmXHU3OWIxXHU3OWI0XHU3OWI4XHU3OWJiXHU3OWMyXHU3OWM0XHU3OWM3XHU3OWM4XHU3OWNhXHU3OWNmXHU3OWQ0XHU3OWQ2XHU3OWRhXHU3OWRkXHU3OWRlIl0sWyI4ZmQxYTEiLCJcdTc5ZTBcdTc5ZTJcdTc5ZTVc''@;'; put 'put ''dTc5ZWFcdTc5ZWJcdTc5ZWRcdTc5ZjFcdTc5ZjhcdTc5ZmNcdTdhMDJcdTdhMDNcdTdhMDdcdTdhMDlcdTdhMGFcdTdhMGNcdTdhMTFcdTdhMTVcdTdhMWJcdTdhMWVcdTdhMjFcdTdhMjdcdTdhMmJcdTdhMmRcdTdhMmZcdTdhMzBcdTdhMzRcdTdhMzVcdTdhMzhcdTdhMzlcdTdhM2FcdTdh''@;'; put 'put ''NDRcdTdhNDVcdTdhNDdcdTdhNDhcdTdhNGNcdTdhNTVcdTdhNTZcdTdhNTlcdTdhNWNcdTdhNWRcdTdhNWZcdTdhNjBcdTdhNjVcdTdhNjdcdTdhNmFcdTdhNmRcdTdhNzVcdTdhNzhcdTdhN2VcdTdhODBcdTdhODJcdTdhODVcdTdhODZcdTdhOGFcdTdhOGJcdTdhOTBcdTdhOTFcdTdhOTRc''@;'; put 'put ''dTdhOWVcdTdhYTBcdTdhYTNcdTdhYWNcdTdhYjNcdTdhYjVcdTdhYjlcdTdhYmJcdTdhYmNcdTdhYzZcdTdhYzlcdTdhY2NcdTdhY2VcdTdhZDFcdTdhZGJcdTdhZThcdTdhZTlcdTdhZWJcdTdhZWNcdTdhZjFcdTdhZjRcdTdhZmJcdTdhZmRcdTdhZmVcdTdiMDdcdTdiMTRcdTdiMWZcdTdi''@;'; put 'put ''MjNcdTdiMjdcdTdiMjlcdTdiMmFcdTdiMmJcdTdiMmRcdTdiMmVcdTdiMmZcdTdiMzAiXSxbIjhmZDJhMSIsIlx1N2IzMVx1N2IzNFx1N2IzZFx1N2IzZlx1N2I0MFx1N2I0MVx1N2I0N1x1N2I0ZVx1N2I1NVx1N2I2MFx1N2I2NFx1N2I2Nlx1N2I2OVx1N2I2YVx1N2I2ZFx1N2I2Zlx1N2I3''@;'; put 'put ''Mlx1N2I3M1x1N2I3N1x1N2I4NFx1N2I4OVx1N2I4ZVx1N2I5MFx1N2I5MVx1N2I5Nlx1N2I5Ylx1N2I5ZVx1N2JhMFx1N2JhNVx1N2JhY1x1N2JhZlx1N2JiMFx1N2JiMlx1N2JiNVx1N2JiNlx1N2JiYVx1N2JiYlx1N2JiY1x1N2JiZFx1N2JjMlx1N2JjNVx1N2JjOFx1N2JjYVx1N2JkNFx1''@;'; put 'put ''N2JkNlx1N2JkN1x1N2JkOVx1N2JkYVx1N2JkYlx1N2JlOFx1N2JlYVx1N2JmMlx1N2JmNFx1N2JmNVx1N2JmOFx1N2JmOVx1N2JmYVx1N2JmY1x1N2JmZVx1N2MwMVx1N2MwMlx1N2MwM1x1N2MwNFx1N2MwNlx1N2MwOVx1N2MwYlx1N2MwY1x1N2MwZVx1N2MwZlx1N2MxOVx1N2MxYlx1N2My''@;'; put 'put ''MFx1N2MyNVx1N2MyNlx1N2MyOFx1N2MyY1x1N2MzMVx1N2MzM1x1N2MzNFx1N2MzNlx1N2MzOVx1N2MzYVx1N2M0Nlx1N2M0YVx1N2M1NVx1N2M1MVx1N2M1Mlx1N2M1M1x1N2M1OSIsNV0sWyI4ZmQzYTEiLCJcdTdjNjFcdTdjNjNcdTdjNjdcdTdjNjlcdTdjNmRcdTdjNmVcdTdjNzBcdTdj''@;'; put 'put ''NzJcdTdjNzlcdTdjN2NcdTdjN2RcdTdjODZcdTdjODdcdTdjOGZcdTdjOTRcdTdjOWVcdTdjYTBcdTdjYTZcdTdjYjBcdTdjYjZcdTdjYjdcdTdjYmFcdTdjYmJcdTdjYmNcdTdjYmZcdTdjYzRcdTdjYzdcdTdjYzhcdTdjYzlcdTdjY2RcdTdjY2ZcdTdjZDNcdTdjZDRcdTdjZDVcdTdjZDdc''@;'; put 'put ''dTdjZDlcdTdjZGFcdTdjZGRcdTdjZTZcdTdjZTlcdTdjZWJcdTdjZjVcdTdkMDNcdTdkMDdcdTdkMDhcdTdkMDlcdTdkMGZcdTdkMTFcdTdkMTJcdTdkMTNcdTdkMTZcdTdkMWRcdTdkMWVcdTdkMjNcdTdkMjZcdTdkMmFcdTdkMmRcdTdkMzFcdTdkM2NcdTdkM2RcdTdkM2VcdTdkNDBcdTdk''@;'; put 'put ''NDFcdTdkNDdcdTdkNDhcdTdkNGRcdTdkNTFcdTdkNTNcdTdkNTdcdTdkNTlcdTdkNWFcdTdkNWNcdTdkNWRcdTdkNjVcdTdkNjdcdTdkNmFcdTdkNzBcdTdkNzhcdTdkN2FcdTdkN2JcdTdkN2ZcdTdkODFcdTdkODJcdTdkODNcdTdkODVcdTdkODZcdTdkODhcdTdkOGJcdTdkOGNcdTdkOGRc''@;'; put 'put ''dTdkOTFcdTdkOTZcdTdkOTdcdTdkOWQiXSxbIjhmZDRhMSIsIlx1N2Q5ZVx1N2RhNlx1N2RhN1x1N2RhYVx1N2RiM1x1N2RiNlx1N2RiN1x1N2RiOVx1N2RjMiIsNCwiXHU3ZGNjXHU3ZGNkXHU3ZGNlXHU3ZGQ3XHU3ZGQ5XHU3ZTAwXHU3ZGUyXHU3ZGU1XHU3ZGU2XHU3ZGVhXHU3ZGViXHU3''@;'; put 'put ''ZGVkXHU3ZGYxXHU3ZGY1XHU3ZGY2XHU3ZGY5XHU3ZGZhXHU3ZTA4XHU3ZTEwXHU3ZTExXHU3ZTE1XHU3ZTE3XHU3ZTFjXHU3ZTFkXHU3ZTIwXHU3ZTI3XHU3ZTI4XHU3ZTJjXHU3ZTJkXHU3ZTJmXHU3ZTMzXHU3ZTM2XHU3ZTNmXHU3ZTQ0XHU3ZTQ1XHU3ZTQ3XHU3ZTRlXHU3ZTUwXHU3ZTUy''@;'; put 'put ''XHU3ZTU4XHU3ZTVmXHU3ZTYxXHU3ZTYyXHU3ZTY1XHU3ZTZiXHU3ZTZlXHU3ZTZmXHU3ZTczXHU3ZTc4XHU3ZTdlXHU3ZTgxXHU3ZTg2XHU3ZTg3XHU3ZThhXHU3ZThkXHU3ZTkxXHU3ZTk1XHU3ZTk4XHU3ZTlhXHU3ZTlkXHU3ZTllXHU3ZjNjXHU3ZjNiXHU3ZjNkXHU3ZjNlXHU3ZjNmXHU3''@;'; put 'put ''ZjQzXHU3ZjQ0XHU3ZjQ3XHU3ZjRmXHU3ZjUyXHU3ZjUzXHU3ZjViXHU3ZjVjXHU3ZjVkXHU3ZjYxXHU3ZjYzXHU3ZjY0XHU3ZjY1XHU3ZjY2XHU3ZjZkIl0sWyI4ZmQ1YTEiLCJcdTdmNzFcdTdmN2RcdTdmN2VcdTdmN2ZcdTdmODBcdTdmOGJcdTdmOGRcdTdmOGZcdTdmOTBcdTdmOTFcdTdm''@;'; put 'put ''OTZcdTdmOTdcdTdmOWNcdTdmYTFcdTdmYTJcdTdmYTZcdTdmYWFcdTdmYWRcdTdmYjRcdTdmYmNcdTdmYmZcdTdmYzBcdTdmYzNcdTdmYzhcdTdmY2VcdTdmY2ZcdTdmZGJcdTdmZGZcdTdmZTNcdTdmZTVcdTdmZThcdTdmZWNcdTdmZWVcdTdmZWZcdTdmZjJcdTdmZmFcdTdmZmRcdTdmZmVc''@;'; put 'put ''dTdmZmZcdTgwMDdcdTgwMDhcdTgwMGFcdTgwMGRcdTgwMGVcdTgwMGZcdTgwMTFcdTgwMTNcdTgwMTRcdTgwMTZcdTgwMWRcdTgwMWVcdTgwMWZcdTgwMjBcdTgwMjRcdTgwMjZcdTgwMmNcdTgwMmVcdTgwMzBcdTgwMzRcdTgwMzVcdTgwMzdcdTgwMzlcdTgwM2FcdTgwM2NcdTgwM2VcdTgw''@;'; put 'put ''NDBcdTgwNDRcdTgwNjBcdTgwNjRcdTgwNjZcdTgwNmRcdTgwNzFcdTgwNzVcdTgwODFcdTgwODhcdTgwOGVcdTgwOWNcdTgwOWVcdTgwYTZcdTgwYTdcdTgwYWJcdTgwYjhcdTgwYjlcdTgwYzhcdTgwY2RcdTgwY2ZcdTgwZDJcdTgwZDRcdTgwZDVcdTgwZDdcdTgwZDhcdTgwZTBcdTgwZWRc''@;'; put 'put ''dTgwZWUiXSxbIjhmZDZhMSIsIlx1ODBmMFx1ODBmMlx1ODBmM1x1ODBmNlx1ODBmOVx1ODBmYVx1ODBmZVx1ODEwM1x1ODEwYlx1ODExNlx1ODExN1x1ODExOFx1ODExY1x1ODExZVx1ODEyMFx1ODEyNFx1ODEyN1x1ODEyY1x1ODEzMFx1ODEzNVx1ODEzYVx1ODEzY1x1ODE0NVx1ODE0N1x1''@;'; put 'put ''ODE0YVx1ODE0Y1x1ODE1Mlx1ODE1N1x1ODE2MFx1ODE2MVx1ODE2N1x1ODE2OFx1ODE2OVx1ODE2ZFx1ODE2Zlx1ODE3N1x1ODE4MVx1ODE5MFx1ODE4NFx1ODE4NVx1ODE4Nlx1ODE4Ylx1ODE4ZVx1ODE5Nlx1ODE5OFx1ODE5Ylx1ODE5ZVx1ODFhMlx1ODFhZVx1ODFiMlx1ODFiNFx1ODFi''@;'; put 'put ''Ylx1ODFjYlx1ODFjM1x1ODFjNVx1ODFjYVx1ODFjZVx1ODFjZlx1ODFkNVx1ODFkN1x1ODFkYlx1ODFkZFx1ODFkZVx1ODFlMVx1ODFlNFx1ODFlYlx1ODFlY1x1ODFmMFx1ODFmMVx1ODFmMlx1ODFmNVx1ODFmNlx1ODFmOFx1ODFmOVx1ODFmZFx1ODFmZlx1ODIwMFx1ODIwM1x1ODIwZlx1''@;'; put 'put ''ODIxM1x1ODIxNFx1ODIxOVx1ODIxYVx1ODIxZFx1ODIyMVx1ODIyMlx1ODIyOFx1ODIzMlx1ODIzNFx1ODIzYVx1ODI0M1x1ODI0NFx1ODI0NVx1ODI0NiJdLFsiOGZkN2ExIiwiXHU4MjRiXHU4MjRlXHU4MjRmXHU4MjUxXHU4MjU2XHU4MjVjXHU4MjYwXHU4MjYzXHU4MjY3XHU4MjZkXHU4''@;'; put 'put ''Mjc0XHU4MjdiXHU4MjdkXHU4MjdmXHU4MjgwXHU4MjgxXHU4MjgzXHU4Mjg0XHU4Mjg3XHU4Mjg5XHU4MjhhXHU4MjhlXHU4MjkxXHU4Mjk0XHU4Mjk2XHU4Mjk4XHU4MjlhXHU4MjliXHU4MmEwXHU4MmExXHU4MmEzXHU4MmE0XHU4MmE3XHU4MmE4XHU4MmE5XHU4MmFhXHU4MmFlXHU4MmIw''@;'; put 'put ''XHU4MmIyXHU4MmI0XHU4MmI3XHU4MmJhXHU4MmJjXHU4MmJlXHU4MmJmXHU4MmM2XHU4MmQwXHU4MmQ1XHU4MmRhXHU4MmUwXHU4MmUyXHU4MmU0XHU4MmU4XHU4MmVhXHU4MmVkXHU4MmVmXHU4MmY2XHU4MmY3XHU4MmZkXHU4MmZlXHU4MzAwXHU4MzAxXHU4MzA3XHU4MzA4XHU4MzBhXHU4''@;'; put 'put ''MzBiXHU4MzU0XHU4MzFiXHU4MzFkXHU4MzFlXHU4MzFmXHU4MzIxXHU4MzIyXHU4MzJjXHU4MzJkXHU4MzJlXHU4MzMwXHU4MzMzXHU4MzM3XHU4MzNhXHU4MzNjXHU4MzNkXHU4MzQyXHU4MzQzXHU4MzQ0XHU4MzQ3XHU4MzRkXHU4MzRlXHU4MzUxXHU4MzU1XHU4MzU2XHU4MzU3XHU4Mzcw''@;'; put 'put ''XHU4Mzc4Il0sWyI4ZmQ4YTEiLCJcdTgzN2RcdTgzN2ZcdTgzODBcdTgzODJcdTgzODRcdTgzODZcdTgzOGRcdTgzOTJcdTgzOTRcdTgzOTVcdTgzOThcdTgzOTlcdTgzOWJcdTgzOWNcdTgzOWRcdTgzYTZcdTgzYTdcdTgzYTlcdTgzYWNcdTgzYmVcdTgzYmZcdTgzYzBcdTgzYzdcdTgzYzlc''@;'; put 'put ''dTgzY2ZcdTgzZDBcdTgzZDFcdTgzZDRcdTgzZGRcdTgzNTNcdTgzZThcdTgzZWFcdTgzZjZcdTgzZjhcdTgzZjlcdTgzZmNcdTg0MDFcdTg0MDZcdTg0MGFcdTg0MGZcdTg0MTFcdTg0MTVcdTg0MTlcdTgzYWRcdTg0MmZcdTg0MzlcdTg0NDVcdTg0NDdcdTg0NDhcdTg0NGFcdTg0NGRcdTg0''@;'; put 'put ''NGZcdTg0NTFcdTg0NTJcdTg0NTZcdTg0NThcdTg0NTlcdTg0NWFcdTg0NWNcdTg0NjBcdTg0NjRcdTg0NjVcdTg0NjdcdTg0NmFcdTg0NzBcdTg0NzNcdTg0NzRcdTg0NzZcdTg0NzhcdTg0N2NcdTg0N2RcdTg0ODFcdTg0ODVcdTg0OTJcdTg0OTNcdTg0OTVcdTg0OWVcdTg0YTZcdTg0YThc''@;'; put 'put ''dTg0YTlcdTg0YWFcdTg0YWZcdTg0YjFcdTg0YjRcdTg0YmFcdTg0YmRcdTg0YmVcdTg0YzBcdTg0YzJcdTg0YzdcdTg0YzhcdTg0Y2NcdTg0Y2ZcdTg0ZDMiXSxbIjhmZDlhMSIsIlx1ODRkY1x1ODRlN1x1ODRlYVx1ODRlZlx1ODRmMFx1ODRmMVx1ODRmMlx1ODRmN1x1ODUzMlx1ODRmYVx1''@;'; put 'put ''ODRmYlx1ODRmZFx1ODUwMlx1ODUwM1x1ODUwN1x1ODUwY1x1ODUwZVx1ODUxMFx1ODUxY1x1ODUxZVx1ODUyMlx1ODUyM1x1ODUyNFx1ODUyNVx1ODUyN1x1ODUyYVx1ODUyYlx1ODUyZlx1ODUzM1x1ODUzNFx1ODUzNlx1ODUzZlx1ODU0Nlx1ODU0ZiIsNCwiXHU4NTU2XHU4NTU5XHU4NTVj''@;'; put 'put ''Iiw2LCJcdTg1NjRcdTg1NmJcdTg1NmZcdTg1NzlcdTg1N2FcdTg1N2JcdTg1N2RcdTg1N2ZcdTg1ODFcdTg1ODVcdTg1ODZcdTg1ODlcdTg1OGJcdTg1OGNcdTg1OGZcdTg1OTNcdTg1OThcdTg1OWRcdTg1OWZcdTg1YTBcdTg1YTJcdTg1YTVcdTg1YTdcdTg1YjRcdTg1YjZcdTg1YjdcdTg1''@;'; put 'put ''YjhcdTg1YmNcdTg1YmRcdTg1YmVcdTg1YmZcdTg1YzJcdTg1YzdcdTg1Y2FcdTg1Y2JcdTg1Y2VcdTg1YWRcdTg1ZDhcdTg1ZGFcdTg1ZGZcdTg1ZTBcdTg1ZTZcdTg1ZThcdTg1ZWRcdTg1ZjNcdTg1ZjZcdTg1ZmMiXSxbIjhmZGFhMSIsIlx1ODVmZlx1ODYwMFx1ODYwNFx1ODYwNVx1ODYw''@;'; put 'put ''ZFx1ODYwZVx1ODYxMFx1ODYxMVx1ODYxMlx1ODYxOFx1ODYxOVx1ODYxYlx1ODYxZVx1ODYyMVx1ODYyN1x1ODYyOVx1ODYzNlx1ODYzOFx1ODYzYVx1ODYzY1x1ODYzZFx1ODY0MFx1ODY0Mlx1ODY0Nlx1ODY1Mlx1ODY1M1x1ODY1Nlx1ODY1N1x1ODY1OFx1ODY1OVx1ODY1ZFx1ODY2MCIs''@;'; put 'put ''NCwiXHU4NjY5XHU4NjZjXHU4NjZmXHU4Njc1XHU4Njc2XHU4Njc3XHU4NjdhXHU4NjhkXHU4NjkxXHU4Njk2XHU4Njk4XHU4NjlhXHU4NjljXHU4NmExXHU4NmE2XHU4NmE3XHU4NmE4XHU4NmFkXHU4NmIxXHU4NmIzXHU4NmI0XHU4NmI1XHU4NmI3XHU4NmI4XHU4NmI5XHU4NmJmXHU4NmMw''@;'; put 'put ''XHU4NmMxXHU4NmMzXHU4NmM1XHU4NmQxXHU4NmQyXHU4NmQ1XHU4NmQ3XHU4NmRhXHU4NmRjXHU4NmUwXHU4NmUzXHU4NmU1XHU4NmU3XHU4Njg4XHU4NmZhXHU4NmZjXHU4NmZkXHU4NzA0XHU4NzA1XHU4NzA3XHU4NzBiXHU4NzBlXHU4NzBmXHU4NzEwXHU4NzEzXHU4NzE0XHU4NzE5XHU4''@;'; put 'put ''NzFlXHU4NzFmXHU4NzIxXHU4NzIzIl0sWyI4ZmRiYTEiLCJcdTg3MjhcdTg3MmVcdTg3MmZcdTg3MzFcdTg3MzJcdTg3MzlcdTg3M2FcdTg3M2NcdTg3M2RcdTg3M2VcdTg3NDBcdTg3NDNcdTg3NDVcdTg3NGRcdTg3NThcdTg3NWRcdTg3NjFcdTg3NjRcdTg3NjVcdTg3NmZcdTg3NzFcdTg3''@;'; put 'put ''NzJcdTg3N2JcdTg3ODMiLDYsIlx1ODc4Ylx1ODc4Y1x1ODc5MFx1ODc5M1x1ODc5NVx1ODc5N1x1ODc5OFx1ODc5OVx1ODc5ZVx1ODdhMFx1ODdhM1x1ODdhN1x1ODdhY1x1ODdhZFx1ODdhZVx1ODdiMVx1ODdiNVx1ODdiZVx1ODdiZlx1ODdjMVx1ODdjOFx1ODdjOVx1ODdjYVx1ODdjZVx1''@;'; put 'put ''ODdkNVx1ODdkNlx1ODdkOVx1ODdkYVx1ODdkY1x1ODdkZlx1ODdlMlx1ODdlM1x1ODdlNFx1ODdlYVx1ODdlYlx1ODdlZFx1ODdmMVx1ODdmM1x1ODdmOFx1ODdmYVx1ODdmZlx1ODgwMVx1ODgwM1x1ODgwNlx1ODgwOVx1ODgwYVx1ODgwYlx1ODgxMFx1ODgxOVx1ODgxMlx1ODgxM1x1ODgx''@;'; put 'put ''NFx1ODgxOFx1ODgxYVx1ODgxYlx1ODgxY1x1ODgxZVx1ODgxZlx1ODgyOFx1ODgyZFx1ODgyZVx1ODgzMFx1ODgzMlx1ODgzNSJdLFsiOGZkY2ExIiwiXHU4ODNhXHU4ODNjXHU4ODQxXHU4ODQzXHU4ODQ1XHU4ODQ4XHU4ODQ5XHU4ODRhXHU4ODRiXHU4ODRlXHU4ODUxXHU4ODU1XHU4ODU2''@;'; put 'put ''XHU4ODU4XHU4ODVhXHU4ODVjXHU4ODVmXHU4ODYwXHU4ODY0XHU4ODY5XHU4ODcxXHU4ODc5XHU4ODdiXHU4ODgwXHU4ODk4XHU4ODlhXHU4ODliXHU4ODljXHU4ODlmXHU4OGEwXHU4OGE4XHU4OGFhXHU4OGJhXHU4OGJkXHU4OGJlXHU4OGMwXHU4OGNhIiw0LCJcdTg4ZDFcdTg4ZDJcdTg4''@;'; put 'put ''ZDNcdTg4ZGJcdTg4ZGVcdTg4ZTdcdTg4ZWZcdTg4ZjBcdTg4ZjFcdTg4ZjVcdTg4ZjdcdTg5MDFcdTg5MDZcdTg5MGRcdTg5MGVcdTg5MGZcdTg5MTVcdTg5MTZcdTg5MThcdTg5MTlcdTg5MWFcdTg5MWNcdTg5MjBcdTg5MjZcdTg5MjdcdTg5MjhcdTg5MzBcdTg5MzFcdTg5MzJcdTg5MzVc''@;'; put 'put ''dTg5MzlcdTg5M2FcdTg5M2VcdTg5NDBcdTg5NDJcdTg5NDVcdTg5NDZcdTg5NDlcdTg5NGZcdTg5NTJcdTg5NTdcdTg5NWFcdTg5NWJcdTg5NWNcdTg5NjFcdTg5NjJcdTg5NjNcdTg5NmJcdTg5NmVcdTg5NzBcdTg5NzNcdTg5NzVcdTg5N2EiXSxbIjhmZGRhMSIsIlx1ODk3Ylx1ODk3Y1x1''@;'; put 'put ''ODk3ZFx1ODk4OVx1ODk4ZFx1ODk5MFx1ODk5NFx1ODk5NVx1ODk5Ylx1ODk5Y1x1ODk5Zlx1ODlhMFx1ODlhNVx1ODliMFx1ODliNFx1ODliNVx1ODliNlx1ODliN1x1ODliY1x1ODlkNCIsNCwiXHU4OWU1XHU4OWU5XHU4OWViXHU4OWVkXHU4OWYxXHU4OWYzXHU4OWY2XHU4OWY5XHU4OWZk''@;'; put 'put ''XHU4OWZmXHU4YTA0XHU4YTA1XHU4YTA3XHU4YTBmXHU4YTExXHU4YTEyXHU4YTE0XHU4YTE1XHU4YTFlXHU4YTIwXHU4YTIyXHU4YTI0XHU4YTI2XHU4YTJiXHU4YTJjXHU4YTJmXHU4YTM1XHU4YTM3XHU4YTNkXHU4YTNlXHU4YTQwXHU4YTQzXHU4YTQ1XHU4YTQ3XHU4YTQ5XHU4YTRkXHU4''@;'; put 'put ''YTRlXHU4YTUzXHU4YTU2XHU4YTU3XHU4YTU4XHU4YTVjXHU4YTVkXHU4YTYxXHU4YTY1XHU4YTY3XHU4YTc1XHU4YTc2XHU4YTc3XHU4YTc5XHU4YTdhXHU4YTdiXHU4YTdlXHU4YTdmXHU4YTgwXHU4YTgzXHU4YTg2XHU4YThiXHU4YThmXHU4YTkwXHU4YTkyXHU4YTk2XHU4YTk3XHU4YTk5''@;'; put 'put ''XHU4YTlmXHU4YWE3XHU4YWE5XHU4YWFlXHU4YWFmXHU4YWIzIl0sWyI4ZmRlYTEiLCJcdThhYjZcdThhYjdcdThhYmJcdThhYmVcdThhYzNcdThhYzZcdThhYzhcdThhYzlcdThhY2FcdThhZDFcdThhZDNcdThhZDRcdThhZDVcdThhZDdcdThhZGRcdThhZGZcdThhZWNcdThhZjBcdThhZjRc''@;'; put 'put ''dThhZjVcdThhZjZcdThhZmNcdThhZmZcdThiMDVcdThiMDZcdThiMGJcdThiMTFcdThiMWNcdThiMWVcdThiMWZcdThiMGFcdThiMmRcdThiMzBcdThiMzdcdThiM2NcdThiNDIiLDQsIlx1OGI0OFx1OGI1Mlx1OGI1M1x1OGI1NFx1OGI1OVx1OGI0ZFx1OGI1ZVx1OGI2M1x1OGI2ZFx1OGI3''@;'; put 'put ''Nlx1OGI3OFx1OGI3OVx1OGI3Y1x1OGI3ZVx1OGI4MVx1OGI4NFx1OGI4NVx1OGI4Ylx1OGI4ZFx1OGI4Zlx1OGI5NFx1OGI5NVx1OGI5Y1x1OGI5ZVx1OGI5Zlx1OGMzOFx1OGMzOVx1OGMzZFx1OGMzZVx1OGM0NVx1OGM0N1x1OGM0OVx1OGM0Ylx1OGM0Zlx1OGM1MVx1OGM1M1x1OGM1NFx1''@;'; put 'put ''OGM1N1x1OGM1OFx1OGM1Ylx1OGM1ZFx1OGM1OVx1OGM2M1x1OGM2NFx1OGM2Nlx1OGM2OFx1OGM2OVx1OGM2ZFx1OGM3M1x1OGM3NVx1OGM3Nlx1OGM3Ylx1OGM3ZVx1OGM4NiJdLFsiOGZkZmExIiwiXHU4Yzg3XHU4YzhiXHU4YzkwXHU4YzkyXHU4YzkzXHU4Yzk5XHU4YzliXHU4YzljXHU4''@;'; put 'put ''Y2E0XHU4Y2I5XHU4Y2JhXHU4Y2M1XHU4Y2M2XHU4Y2M5XHU4Y2NiXHU4Y2NmXHU4Y2Q2XHU4Y2Q1XHU4Y2Q5XHU4Y2RkXHU4Y2UxXHU4Y2U4XHU4Y2VjXHU4Y2VmXHU4Y2YwXHU4Y2YyXHU4Y2Y1XHU4Y2Y3XHU4Y2Y4XHU4Y2ZlXHU4Y2ZmXHU4ZDAxXHU4ZDAzXHU4ZDA5XHU4ZDEyXHU4ZDE3''@;'; put 'put ''XHU4ZDFiXHU4ZDY1XHU4ZDY5XHU4ZDZjXHU4ZDZlXHU4ZDdmXHU4ZDgyXHU4ZDg0XHU4ZDg4XHU4ZDhkXHU4ZDkwXHU4ZDkxXHU4ZDk1XHU4ZDllXHU4ZDlmXHU4ZGEwXHU4ZGE2XHU4ZGFiXHU4ZGFjXHU4ZGFmXHU4ZGIyXHU4ZGI1XHU4ZGI3XHU4ZGI5XHU4ZGJiXHU4ZGMwXHU4ZGM1XHU4''@;'; put 'put ''ZGM2XHU4ZGM3XHU4ZGM4XHU4ZGNhXHU4ZGNlXHU4ZGQxXHU4ZGQ0XHU4ZGQ1XHU4ZGQ3XHU4ZGQ5XHU4ZGU0XHU4ZGU1XHU4ZGU3XHU4ZGVjXHU4ZGYwXHU4ZGJjXHU4ZGYxXHU4ZGYyXHU4ZGY0XHU4ZGZkXHU4ZTAxXHU4ZTA0XHU4ZTA1XHU4ZTA2XHU4ZTBiXHU4ZTExXHU4ZTE0XHU4ZTE2''@;'; put 'put ''XHU4ZTIwXHU4ZTIxXHU4ZTIyIl0sWyI4ZmUwYTEiLCJcdThlMjNcdThlMjZcdThlMjdcdThlMzFcdThlMzNcdThlMzZcdThlMzdcdThlMzhcdThlMzlcdThlM2RcdThlNDBcdThlNDFcdThlNGJcdThlNGRcdThlNGVcdThlNGZcdThlNTRcdThlNWJcdThlNWNcdThlNWRcdThlNWVcdThlNjFc''@;'; put 'put ''dThlNjJcdThlNjlcdThlNmNcdThlNmRcdThlNmZcdThlNzBcdThlNzFcdThlNzlcdThlN2FcdThlN2JcdThlODJcdThlODNcdThlODlcdThlOTBcdThlOTJcdThlOTVcdThlOWFcdThlOWJcdThlOWRcdThlOWVcdThlYTJcdThlYTdcdThlYTlcdThlYWRcdThlYWVcdThlYjNcdThlYjVcdThl''@;'; put 'put ''YmFcdThlYmJcdThlYzBcdThlYzFcdThlYzNcdThlYzRcdThlYzdcdThlY2ZcdThlZDFcdThlZDRcdThlZGNcdThlZThcdThlZWVcdThlZjBcdThlZjFcdThlZjdcdThlZjlcdThlZmFcdThlZWRcdThmMDBcdThmMDJcdThmMDdcdThmMDhcdThmMGZcdThmMTBcdThmMTZcdThmMTdcdThmMThc''@;'; put 'put ''dThmMWVcdThmMjBcdThmMjFcdThmMjNcdThmMjVcdThmMjdcdThmMjhcdThmMmNcdThmMmRcdThmMmVcdThmMzRcdThmMzVcdThmMzZcdThmMzdcdThmM2FcdThmNDBcdThmNDEiXSxbIjhmZTFhMSIsIlx1OGY0M1x1OGY0N1x1OGY0Zlx1OGY1MSIsNCwiXHU4ZjU4XHU4ZjVkXHU4ZjVlXHU4''@;'; put 'put ''ZjY1XHU4ZjlkXHU4ZmEwXHU4ZmExXHU4ZmE0XHU4ZmE1XHU4ZmE2XHU4ZmI1XHU4ZmI2XHU4ZmI4XHU4ZmJlXHU4ZmMwXHU4ZmMxXHU4ZmM2XHU4ZmNhXHU4ZmNiXHU4ZmNkXHU4ZmQwXHU4ZmQyXHU4ZmQzXHU4ZmQ1XHU4ZmUwXHU4ZmUzXHU4ZmU0XHU4ZmU4XHU4ZmVlXHU4ZmYxXHU4ZmY1''@;'; put 'put ''XHU4ZmY2XHU4ZmZiXHU4ZmZlXHU5MDAyXHU5MDA0XHU5MDA4XHU5MDBjXHU5MDE4XHU5MDFiXHU5MDI4XHU5MDI5XHU5MDJmXHU5MDJhXHU5MDJjXHU5MDJkXHU5MDMzXHU5MDM0XHU5MDM3XHU5MDNmXHU5MDQzXHU5MDQ0XHU5MDRjXHU5MDViXHU5MDVkXHU5MDYyXHU5MDY2XHU5MDY3XHU5''@;'; put 'put ''MDZjXHU5MDcwXHU5MDc0XHU5MDc5XHU5MDg1XHU5MDg4XHU5MDhiXHU5MDhjXHU5MDhlXHU5MDkwXHU5MDk1XHU5MDk3XHU5MDk4XHU5MDk5XHU5MDliXHU5MGEwXHU5MGExXHU5MGEyXHU5MGE1XHU5MGIwXHU5MGIyXHU5MGIzXHU5MGI0XHU5MGI2XHU5MGJkXHU5MGNjXHU5MGJlXHU5MGMz''@;'; put 'put ''Il0sWyI4ZmUyYTEiLCJcdTkwYzRcdTkwYzVcdTkwYzdcdTkwYzhcdTkwZDVcdTkwZDdcdTkwZDhcdTkwZDlcdTkwZGNcdTkwZGRcdTkwZGZcdTkwZTVcdTkwZDJcdTkwZjZcdTkwZWJcdTkwZWZcdTkwZjBcdTkwZjRcdTkwZmVcdTkwZmZcdTkxMDBcdTkxMDRcdTkxMDVcdTkxMDZcdTkxMDhc''@;'; put 'put ''dTkxMGRcdTkxMTBcdTkxMTRcdTkxMTZcdTkxMTdcdTkxMThcdTkxMWFcdTkxMWNcdTkxMWVcdTkxMjBcdTkxMjVcdTkxMjJcdTkxMjNcdTkxMjdcdTkxMjlcdTkxMmVcdTkxMmZcdTkxMzFcdTkxMzRcdTkxMzZcdTkxMzdcdTkxMzlcdTkxM2FcdTkxM2NcdTkxM2RcdTkxNDNcdTkxNDdcdTkx''@;'; put 'put ''NDhcdTkxNGZcdTkxNTNcdTkxNTdcdTkxNTlcdTkxNWFcdTkxNWJcdTkxNjFcdTkxNjRcdTkxNjdcdTkxNmRcdTkxNzRcdTkxNzlcdTkxN2FcdTkxN2JcdTkxODFcdTkxODNcdTkxODVcdTkxODZcdTkxOGFcdTkxOGVcdTkxOTFcdTkxOTNcdTkxOTRcdTkxOTVcdTkxOThcdTkxOWVcdTkxYTFc''@;'; put 'put ''dTkxYTZcdTkxYThcdTkxYWNcdTkxYWRcdTkxYWVcdTkxYjBcdTkxYjFcdTkxYjJcdTkxYjNcdTkxYjZcdTkxYmJcdTkxYmNcdTkxYmRcdTkxYmYiXSxbIjhmZTNhMSIsIlx1OTFjMlx1OTFjM1x1OTFjNVx1OTFkM1x1OTFkNFx1OTFkN1x1OTFkOVx1OTFkYVx1OTFkZVx1OTFlNFx1OTFlNVx1''@;'; put 'put ''OTFlOVx1OTFlYVx1OTFlYyIsNSwiXHU5MWY3XHU5MWY5XHU5MWZiXHU5MWZkXHU5MjAwXHU5MjAxXHU5MjA0XHU5MjA1XHU5MjA2XHU5MjA3XHU5MjA5XHU5MjBhXHU5MjBjXHU5MjEwXHU5MjEyXHU5MjEzXHU5MjE2XHU5MjE4XHU5MjFjXHU5MjFkXHU5MjIzXHU5MjI0XHU5MjI1XHU5MjI2''@;'; put 'put ''XHU5MjI4XHU5MjJlXHU5MjJmXHU5MjMwXHU5MjMzXHU5MjM1XHU5MjM2XHU5MjM4XHU5MjM5XHU5MjNhXHU5MjNjXHU5MjNlXHU5MjQwXHU5MjQyXHU5MjQzXHU5MjQ2XHU5MjQ3XHU5MjRhXHU5MjRkXHU5MjRlXHU5MjRmXHU5MjUxXHU5MjU4XHU5MjU5XHU5MjVjXHU5MjVkXHU5MjYwXHU5''@;'; put 'put ''MjYxXHU5MjY1XHU5MjY3XHU5MjY4XHU5MjY5XHU5MjZlXHU5MjZmXHU5MjcwXHU5Mjc1Iiw0LCJcdTkyN2JcdTkyN2NcdTkyN2RcdTkyN2ZcdTkyODhcdTkyODlcdTkyOGFcdTkyOGRcdTkyOGVcdTkyOTJcdTkyOTciXSxbIjhmZTRhMSIsIlx1OTI5OVx1OTI5Zlx1OTJhMFx1OTJhNFx1OTJh''@;'; put 'put ''NVx1OTJhN1x1OTJhOFx1OTJhYlx1OTJhZlx1OTJiMlx1OTJiNlx1OTJiOFx1OTJiYVx1OTJiYlx1OTJiY1x1OTJiZFx1OTJiZiIsNCwiXHU5MmM1XHU5MmM2XHU5MmM3XHU5MmM4XHU5MmNiXHU5MmNjXHU5MmNkXHU5MmNlXHU5MmQwXHU5MmQzXHU5MmQ1XHU5MmQ3XHU5MmQ4XHU5MmQ5XHU5''@;'; put 'put ''MmRjXHU5MmRkXHU5MmRmXHU5MmUwXHU5MmUxXHU5MmUzXHU5MmU1XHU5MmU3XHU5MmU4XHU5MmVjXHU5MmVlXHU5MmYwXHU5MmY5XHU5MmZiXHU5MmZmXHU5MzAwXHU5MzAyXHU5MzA4XHU5MzBkXHU5MzExXHU5MzE0XHU5MzE1XHU5MzFjXHU5MzFkXHU5MzFlXHU5MzFmXHU5MzIxXHU5MzI0''@;'; put 'put ''XHU5MzI1XHU5MzI3XHU5MzI5XHU5MzJhXHU5MzMzXHU5MzM0XHU5MzM2XHU5MzM3XHU5MzQ3XHU5MzQ4XHU5MzQ5XHU5MzUwXHU5MzUxXHU5MzUyXHU5MzU1XHU5MzU3XHU5MzU4XHU5MzVhXHU5MzVlXHU5MzY0XHU5MzY1XHU5MzY3XHU5MzY5XHU5MzZhXHU5MzZkXHU5MzZmXHU5MzcwXHU5''@;'; put 'put ''MzcxXHU5MzczXHU5Mzc0XHU5Mzc2Il0sWyI4ZmU1YTEiLCJcdTkzN2FcdTkzN2RcdTkzN2ZcdTkzODBcdTkzODFcdTkzODJcdTkzODhcdTkzOGFcdTkzOGJcdTkzOGRcdTkzOGZcdTkzOTJcdTkzOTVcdTkzOThcdTkzOWJcdTkzOWVcdTkzYTFcdTkzYTNcdTkzYTRcdTkzYTZcdTkzYThcdTkz''@;'; put 'put ''YWJcdTkzYjRcdTkzYjVcdTkzYjZcdTkzYmFcdTkzYTlcdTkzYzFcdTkzYzRcdTkzYzVcdTkzYzZcdTkzYzdcdTkzYzkiLDQsIlx1OTNkM1x1OTNkOVx1OTNkY1x1OTNkZVx1OTNkZlx1OTNlMlx1OTNlNlx1OTNlN1x1OTNmOVx1OTNmN1x1OTNmOFx1OTNmYVx1OTNmYlx1OTNmZFx1OTQwMVx1''@;'; put 'put ''OTQwMlx1OTQwNFx1OTQwOFx1OTQwOVx1OTQwZFx1OTQwZVx1OTQwZlx1OTQxNVx1OTQxNlx1OTQxN1x1OTQxZlx1OTQyZVx1OTQyZlx1OTQzMVx1OTQzMlx1OTQzM1x1OTQzNFx1OTQzYlx1OTQzZlx1OTQzZFx1OTQ0M1x1OTQ0NVx1OTQ0OFx1OTQ0YVx1OTQ0Y1x1OTQ1NVx1OTQ1OVx1OTQ1''@;'; put 'put ''Y1x1OTQ1Zlx1OTQ2MVx1OTQ2M1x1OTQ2OFx1OTQ2Ylx1OTQ2ZFx1OTQ2ZVx1OTQ2Zlx1OTQ3MVx1OTQ3Mlx1OTQ4NFx1OTQ4M1x1OTU3OFx1OTU3OSJdLFsiOGZlNmExIiwiXHU5NTdlXHU5NTg0XHU5NTg4XHU5NThjXHU5NThkXHU5NThlXHU5NTlkXHU5NTllXHU5NTlmXHU5NWExXHU5NWE2''@;'; put 'put ''XHU5NWE5XHU5NWFiXHU5NWFjXHU5NWI0XHU5NWI2XHU5NWJhXHU5NWJkXHU5NWJmXHU5NWM2XHU5NWM4XHU5NWM5XHU5NWNiXHU5NWQwXHU5NWQxXHU5NWQyXHU5NWQzXHU5NWQ5XHU5NWRhXHU5NWRkXHU5NWRlXHU5NWRmXHU5NWUwXHU5NWU0XHU5NWU2XHU5NjFkXHU5NjFlXHU5NjIyXHU5''@;'; put 'put ''NjI0XHU5NjI1XHU5NjI2XHU5NjJjXHU5NjMxXHU5NjMzXHU5NjM3XHU5NjM4XHU5NjM5XHU5NjNhXHU5NjNjXHU5NjNkXHU5NjQxXHU5NjUyXHU5NjU0XHU5NjU2XHU5NjU3XHU5NjU4XHU5NjYxXHU5NjZlXHU5Njc0XHU5NjdiXHU5NjdjXHU5NjdlXHU5NjdmXHU5NjgxXHU5NjgyXHU5Njgz''@;'; put 'put ''XHU5Njg0XHU5Njg5XHU5NjkxXHU5Njk2XHU5NjlhXHU5NjlkXHU5NjlmXHU5NmE0XHU5NmE1XHU5NmE2XHU5NmE5XHU5NmFlXHU5NmFmXHU5NmIzXHU5NmJhXHU5NmNhXHU5NmQyXHU1ZGIyXHU5NmQ4XHU5NmRhXHU5NmRkXHU5NmRlXHU5NmRmXHU5NmU5XHU5NmVmXHU5NmYxXHU5NmZhXHU5''@;'; put 'put ''NzAyIl0sWyI4ZmU3YTEiLCJcdTk3MDNcdTk3MDVcdTk3MDlcdTk3MWFcdTk3MWJcdTk3MWRcdTk3MjFcdTk3MjJcdTk3MjNcdTk3MjhcdTk3MzFcdTk3MzNcdTk3NDFcdTk3NDNcdTk3NGFcdTk3NGVcdTk3NGZcdTk3NTVcdTk3NTdcdTk3NThcdTk3NWFcdTk3NWJcdTk3NjNcdTk3NjdcdTk3''@;'; put 'put ''NmFcdTk3NmVcdTk3NzNcdTk3NzZcdTk3NzdcdTk3NzhcdTk3N2JcdTk3N2RcdTk3N2ZcdTk3ODBcdTk3ODlcdTk3OTVcdTk3OTZcdTk3OTdcdTk3OTlcdTk3OWFcdTk3OWVcdTk3OWZcdTk3YTJcdTk3YWNcdTk3YWVcdTk3YjFcdTk3YjJcdTk3YjVcdTk3YjZcdTk3YjhcdTk3YjlcdTk3YmFc''@;'; put 'put ''dTk3YmNcdTk3YmVcdTk3YmZcdTk3YzFcdTk3YzRcdTk3YzVcdTk3YzdcdTk3YzlcdTk3Y2FcdTk3Y2NcdTk3Y2RcdTk3Y2VcdTk3ZDBcdTk3ZDFcdTk3ZDRcdTk3ZDdcdTk3ZDhcdTk3ZDlcdTk3ZGRcdTk3ZGVcdTk3ZTBcdTk3ZGJcdTk3ZTFcdTk3ZTRcdTk3ZWZcdTk3ZjFcdTk3ZjRcdTk3''@;'; put 'put ''ZjdcdTk3ZjhcdTk3ZmFcdTk4MDdcdTk4MGFcdTk4MTlcdTk4MGRcdTk4MGVcdTk4MTRcdTk4MTZcdTk4MWNcdTk4MWVcdTk4MjBcdTk4MjNcdTk4MjYiXSxbIjhmZThhMSIsIlx1OTgyYlx1OTgyZVx1OTgyZlx1OTgzMFx1OTgzMlx1OTgzM1x1OTgzNVx1OTgyNVx1OTgzZVx1OTg0NFx1OTg0''@;'; put 'put ''N1x1OTg0YVx1OTg1MVx1OTg1Mlx1OTg1M1x1OTg1Nlx1OTg1N1x1OTg1OVx1OTg1YVx1OTg2Mlx1OTg2M1x1OTg2NVx1OTg2Nlx1OTg2YVx1OTg2Y1x1OThhYlx1OThhZFx1OThhZVx1OThiMFx1OThiNFx1OThiN1x1OThiOFx1OThiYVx1OThiYlx1OThiZlx1OThjMlx1OThjNVx1OThjOFx1''@;'; put 'put ''OThjY1x1OThlMVx1OThlM1x1OThlNVx1OThlNlx1OThlN1x1OThlYVx1OThmM1x1OThmNlx1OTkwMlx1OTkwN1x1OTkwOFx1OTkxMVx1OTkxNVx1OTkxNlx1OTkxN1x1OTkxYVx1OTkxYlx1OTkxY1x1OTkxZlx1OTkyMlx1OTkyNlx1OTkyN1x1OTkyYlx1OTkzMSIsNCwiXHU5OTM5XHU5OTNh''@;'; put 'put ''XHU5OTNiXHU5OTNjXHU5OTQwXHU5OTQxXHU5OTQ2XHU5OTQ3XHU5OTQ4XHU5OTRkXHU5OTRlXHU5OTU0XHU5OTU4XHU5OTU5XHU5OTViXHU5OTVjXHU5OTVlXHU5OTVmXHU5OTYwXHU5OTliXHU5OTlkXHU5OTlmXHU5OWE2XHU5OWIwXHU5OWIxXHU5OWIyXHU5OWI1Il0sWyI4ZmU5YTEiLCJc''@;'; put 'put ''dTk5YjlcdTk5YmFcdTk5YmRcdTk5YmZcdTk5YzNcdTk5YzlcdTk5ZDNcdTk5ZDRcdTk5ZDlcdTk5ZGFcdTk5ZGNcdTk5ZGVcdTk5ZTdcdTk5ZWFcdTk5ZWJcdTk5ZWNcdTk5ZjBcdTk5ZjRcdTk5ZjVcdTk5ZjlcdTk5ZmRcdTk5ZmVcdTlhMDJcdTlhMDNcdTlhMDRcdTlhMGJcdTlhMGNcdTlh''@;'; put 'put ''MTBcdTlhMTFcdTlhMTZcdTlhMWVcdTlhMjBcdTlhMjJcdTlhMjNcdTlhMjRcdTlhMjdcdTlhMmRcdTlhMmVcdTlhMzNcdTlhMzVcdTlhMzZcdTlhMzhcdTlhNDdcdTlhNDFcdTlhNDRcdTlhNGFcdTlhNGJcdTlhNGNcdTlhNGVcdTlhNTFcdTlhNTRcdTlhNTZcdTlhNWRcdTlhYWFcdTlhYWNc''@;'; put 'put ''dTlhYWVcdTlhYWZcdTlhYjJcdTlhYjRcdTlhYjVcdTlhYjZcdTlhYjlcdTlhYmJcdTlhYmVcdTlhYmZcdTlhYzFcdTlhYzNcdTlhYzZcdTlhYzhcdTlhY2VcdTlhZDBcdTlhZDJcdTlhZDVcdTlhZDZcdTlhZDdcdTlhZGJcdTlhZGNcdTlhZTBcdTlhZTRcdTlhZTVcdTlhZTdcdTlhZTlcdTlh''@;'; put 'put ''ZWNcdTlhZjJcdTlhZjNcdTlhZjVcdTlhZjlcdTlhZmFcdTlhZmRcdTlhZmYiLDRdLFsiOGZlYWExIiwiXHU5YjA0XHU5YjA1XHU5YjA4XHU5YjA5XHU5YjBiXHU5YjBjXHU5YjBkXHU5YjBlXHU5YjEwXHU5YjEyXHU5YjE2XHU5YjE5XHU5YjFiXHU5YjFjXHU5YjIwXHU5YjI2XHU5YjJiXHU5''@;'; put 'put ''YjJkXHU5YjMzXHU5YjM0XHU5YjM1XHU5YjM3XHU5YjM5XHU5YjNhXHU5YjNkXHU5YjQ4XHU5YjRiXHU5YjRjXHU5YjU1XHU5YjU2XHU5YjU3XHU5YjViXHU5YjVlXHU5YjYxXHU5YjYzXHU5YjY1XHU5YjY2XHU5YjY4XHU5YjZhIiw0LCJcdTliNzNcdTliNzVcdTliNzdcdTliNzhcdTliNzlc''@;'; put 'put ''dTliN2ZcdTliODBcdTliODRcdTliODVcdTliODZcdTliODdcdTliODlcdTliOGFcdTliOGJcdTliOGRcdTliOGZcdTliOTBcdTliOTRcdTliOWFcdTliOWRcdTliOWVcdTliYTZcdTliYTdcdTliYTlcdTliYWNcdTliYjBcdTliYjFcdTliYjJcdTliYjdcdTliYjhcdTliYmJcdTliYmNcdTli''@;'; put 'put ''YmVcdTliYmZcdTliYzFcdTliYzdcdTliYzhcdTliY2VcdTliZDBcdTliZDdcdTliZDhcdTliZGRcdTliZGZcdTliZTVcdTliZTdcdTliZWFcdTliZWJcdTliZWZcdTliZjNcdTliZjdcdTliZjgiXSxbIjhmZWJhMSIsIlx1OWJmOVx1OWJmYVx1OWJmZFx1OWJmZlx1OWMwMFx1OWMwMlx1OWMw''@;'; put 'put ''Ylx1OWMwZlx1OWMxMVx1OWMxNlx1OWMxOFx1OWMxOVx1OWMxYVx1OWMxY1x1OWMxZVx1OWMyMlx1OWMyM1x1OWMyNiIsNCwiXHU5YzMxXHU5YzM1XHU5YzM2XHU5YzM3XHU5YzNkXHU5YzQxXHU5YzQzXHU5YzQ0XHU5YzQ1XHU5YzQ5XHU5YzRhXHU5YzRlXHU5YzRmXHU5YzUwXHU5YzUzXHU5''@;'; put 'put ''YzU0XHU5YzU2XHU5YzU4XHU5YzViXHU5YzVkXHU5YzVlXHU5YzVmXHU5YzYzXHU5YzY5XHU5YzZhXHU5YzVjXHU5YzZiXHU5YzY4XHU5YzZlXHU5YzcwXHU5YzcyXHU5Yzc1XHU5Yzc3XHU5YzdiXHU5Y2U2XHU5Y2YyXHU5Y2Y3XHU5Y2Y5XHU5ZDBiXHU5ZDAyXHU5ZDExXHU5ZDE3XHU5ZDE4''@;'; put 'put ''XHU5ZDFjXHU5ZDFkXHU5ZDFlXHU5ZDJmXHU5ZDMwXHU5ZDMyXHU5ZDMzXHU5ZDM0XHU5ZDNhXHU5ZDNjXHU5ZDQ1XHU5ZDNkXHU5ZDQyXHU5ZDQzXHU5ZDQ3XHU5ZDRhXHU5ZDUzXHU5ZDU0XHU5ZDVmXHU5ZDYzXHU5ZDYyXHU5ZDY1XHU5ZDY5XHU5ZDZhXHU5ZDZiXHU5ZDcwXHU5ZDc2XHU5''@;'; put 'put ''ZDc3XHU5ZDdiIl0sWyI4ZmVjYTEiLCJcdTlkN2NcdTlkN2VcdTlkODNcdTlkODRcdTlkODZcdTlkOGFcdTlkOGRcdTlkOGVcdTlkOTJcdTlkOTNcdTlkOTVcdTlkOTZcdTlkOTdcdTlkOThcdTlkYTFcdTlkYWFcdTlkYWNcdTlkYWVcdTlkYjFcdTlkYjVcdTlkYjlcdTlkYmNcdTlkYmZcdTlk''@;'; put 'put ''YzNcdTlkYzdcdTlkYzlcdTlkY2FcdTlkZDRcdTlkZDVcdTlkZDZcdTlkZDdcdTlkZGFcdTlkZGVcdTlkZGZcdTlkZTBcdTlkZTVcdTlkZTdcdTlkZTlcdTlkZWJcdTlkZWVcdTlkZjBcdTlkZjNcdTlkZjRcdTlkZmVcdTllMGFcdTllMDJcdTllMDdcdTllMGVcdTllMTBcdTllMTFcdTllMTJc''@;'; put 'put ''dTllMTVcdTllMTZcdTllMTlcdTllMWNcdTllMWRcdTllN2FcdTllN2JcdTllN2NcdTllODBcdTllODJcdTllODNcdTllODRcdTllODVcdTllODdcdTllOGVcdTllOGZcdTllOTZcdTllOThcdTllOWJcdTllOWVcdTllYTRcdTllYThcdTllYWNcdTllYWVcdTllYWZcdTllYjBcdTllYjNcdTll''@;'; put 'put ''YjRcdTllYjVcdTllYzZcdTllYzhcdTllY2JcdTllZDVcdTllZGZcdTllZTRcdTllZTdcdTllZWNcdTllZWRcdTllZWVcdTllZjBcdTllZjFcdTllZjJcdTllZjUiXSxbIjhmZWRhMSIsIlx1OWVmOFx1OWVmZlx1OWYwMlx1OWYwM1x1OWYwOVx1OWYwZlx1OWYxMFx1OWYxMVx1OWYxMlx1OWYx''@;'; put 'put ''NFx1OWYxNlx1OWYxN1x1OWYxOVx1OWYxYVx1OWYxYlx1OWYxZlx1OWYyMlx1OWYyNlx1OWYyYVx1OWYyYlx1OWYyZlx1OWYzMVx1OWYzMlx1OWYzNFx1OWYzN1x1OWYzOVx1OWYzYVx1OWYzY1x1OWYzZFx1OWYzZlx1OWY0MVx1OWY0MyIsNCwiXHU5ZjUzXHU5ZjU1XHU5ZjU2XHU5ZjU3XHU5''@;'; put 'put ''ZjU4XHU5ZjVhXHU5ZjVkXHU5ZjVlXHU5ZjY4XHU5ZjY5XHU5ZjZkIiw0LCJcdTlmNzNcdTlmNzVcdTlmN2FcdTlmN2RcdTlmOGZcdTlmOTBcdTlmOTFcdTlmOTJcdTlmOTRcdTlmOTZcdTlmOTdcdTlmOWVcdTlmYTFcdTlmYTJcdTlmYTNcdTlmYTUiXV0nKX0sOTkxMjkoZmUpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtmZS5leHBvcnRzPUpTT04ucGFyc2UoJ3sidUNoYXJzIjpbMTI4LDE2NSwxNjksMTc4LDE4NCwyMTYsMjI2LDIzNSwyMzgsMjQ0LDI0OCwyNTEsMjUzLDI1OCwyNzYsMjg0LDMwMCwzMjUsMzI5LDMzNCwzNjQsNDYzLDQ2NSw0NjcsNDY5LDQ3MSw0NzMsNDc1LDQ3Nyw1MDYsNTk0LDYx''@;'; put 'put ''MCw3MTIsNzE2LDczMCw5MzAsOTM4LDk2Miw5NzAsMTAyNiwxMTA0LDExMDYsODIwOSw4MjE1LDgyMTgsODIyMiw4MjMxLDgyNDEsODI0NCw4MjQ2LDgyNTIsODM2NSw4NDUyLDg0NTQsODQ1OCw4NDcxLDg0ODIsODU1Niw4NTcwLDg1OTYsODYwMiw4NzEzLDg3MjAsODcyMiw4NzI2LDg3MzEs''@;'; put 'put ''ODczNyw4NzQwLDg3NDIsODc0OCw4NzUxLDg3NjAsODc2Niw4Nzc3LDg3ODEsODc4Nyw4ODAyLDg4MDgsODgxNiw4ODU0LDg4NTgsODg3MCw4ODk2LDg5NzksOTMyMiw5MzcyLDk1NDgsOTU4OCw5NjE2LDk2MjIsOTYzNCw5NjUyLDk2NjIsOTY3Miw5Njc2LDk2ODAsOTcwMiw5NzM1LDk3Mzgs''@;'; put 'put ''OTc5Myw5Nzk1LDExOTA2LDExOTA5LDExOTEzLDExOTE3LDExOTI4LDExOTQ0LDExOTQ3LDExOTUxLDExOTU2LDExOTYwLDExOTY0LDExOTc5LDEyMjg0LDEyMjkyLDEyMzEyLDEyMzE5LDEyMzMwLDEyMzUxLDEyNDM2LDEyNDQ3LDEyNTM1LDEyNTQzLDEyNTg2LDEyODQyLDEyODUwLDEyOTY0''@;'; put 'put ''LDEzMjAwLDEzMjE1LDEzMjE4LDEzMjUzLDEzMjYzLDEzMjY3LDEzMjcwLDEzMzg0LDEzNDI4LDEzNzI3LDEzODM5LDEzODUxLDE0NjE3LDE0NzAzLDE0ODAxLDE0ODE2LDE0OTY0LDE1MTgzLDE1NDcxLDE1NTg1LDE2NDcxLDE2NzM2LDE3MjA4LDE3MzI1LDE3MzMwLDE3Mzc0LDE3NjIzLDE3''@;'; put 'put ''OTk3LDE4MDE4LDE4MjEyLDE4MjE4LDE4MzAxLDE4MzE4LDE4NzYwLDE4ODExLDE4ODE0LDE4ODIwLDE4ODIzLDE4ODQ0LDE4ODQ4LDE4ODcyLDE5NTc2LDE5NjIwLDE5NzM4LDE5ODg3LDQwODcwLDU5MjQ0LDU5MzM2LDU5MzY3LDU5NDEzLDU5NDE3LDU5NDIzLDU5NDMxLDU5NDM3LDU5NDQz''@;'; put 'put ''LDU5NDUyLDU5NDYwLDU5NDc4LDU5NDkzLDYzNzg5LDYzODY2LDYzODk0LDYzOTc2LDYzOTg2LDY0MDE2LDY0MDE4LDY0MDIxLDY0MDI1LDY0MDM0LDY0MDM3LDY0MDQyLDY1MDc0LDY1MDkzLDY1MTA3LDY1MTEyLDY1MTI3LDY1MTMyLDY1Mzc1LDY1NTEwLDY1NTM2XSwiZ2JDaGFycyI6WzAs''@;'; put 'put ''MzYsMzgsNDUsNTAsODEsODksOTUsOTYsMTAwLDEwMywxMDQsMTA1LDEwOSwxMjYsMTMzLDE0OCwxNzIsMTc1LDE3OSwyMDgsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzNDEsNDI4LDQ0Myw1NDQsNTQ1LDU1OCw3NDEsNzQyLDc0OSw3NTAsODA1LDgxOSw4MjAsNzkyMiw3OTI0''@;'; put 'put ''LDc5MjUsNzkyNyw3OTM0LDc5NDMsNzk0NCw3OTQ1LDc5NTAsODA2Miw4MTQ4LDgxNDksODE1Miw4MTY0LDgxNzQsODIzNiw4MjQwLDgyNjIsODI2NCw4Mzc0LDgzODAsODM4MSw4Mzg0LDgzODgsODM5MCw4MzkyLDgzOTMsODM5NCw4Mzk2LDg0MDEsODQwNiw4NDE2LDg0MTksODQyNCw4NDM3''@;'; put 'put ''LDg0MzksODQ0NSw4NDgyLDg0ODUsODQ5Niw4NTIxLDg2MDMsODkzNiw4OTQ2LDkwNDYsOTA1MCw5MDYzLDkwNjYsOTA3Niw5MDkyLDkxMDAsOTEwOCw5MTExLDkxMTMsOTEzMSw5MTYyLDkxNjQsOTIxOCw5MjE5LDExMzI5LDExMzMxLDExMzM0LDExMzM2LDExMzQ2LDExMzYxLDExMzYzLDEx''@;'; put 'put ''MzY2LDExMzcwLDExMzcyLDExMzc1LDExMzg5LDExNjgyLDExNjg2LDExNjg3LDExNjkyLDExNjk0LDExNzE0LDExNzE2LDExNzIzLDExNzI1LDExNzMwLDExNzM2LDExOTgyLDExOTg5LDEyMTAyLDEyMzM2LDEyMzQ4LDEyMzUwLDEyMzg0LDEyMzkzLDEyMzk1LDEyMzk3LDEyNTEwLDEyNTUz''@;'; put 'put ''LDEyODUxLDEyOTYyLDEyOTczLDEzNzM4LDEzODIzLDEzOTE5LDEzOTMzLDE0MDgwLDE0Mjk4LDE0NTg1LDE0Njk4LDE1NTgzLDE1ODQ3LDE2MzE4LDE2NDM0LDE2NDM4LDE2NDgxLDE2NzI5LDE3MTAyLDE3MTIyLDE3MzE1LDE3MzIwLDE3NDAyLDE3NDE4LDE3ODU5LDE3OTA5LDE3OTExLDE3''@;'; put 'put ''OTE1LDE3OTE2LDE3OTM2LDE3OTM5LDE3OTYxLDE4NjY0LDE4NzAzLDE4ODE0LDE4OTYyLDE5MDQzLDMzNDY5LDMzNDcwLDMzNDcxLDMzNDg0LDMzNDg1LDMzNDkwLDMzNDk3LDMzNTAxLDMzNTA1LDMzNTEzLDMzNTIwLDMzNTM2LDMzNTUwLDM3ODQ1LDM3OTIxLDM3OTQ4LDM4MDI5LDM4MDM4''@;'; put 'put ''LDM4MDY0LDM4MDY1LDM4MDY2LDM4MDY5LDM4MDc1LDM4MDc2LDM4MDc4LDM5MTA4LDM5MTA5LDM5MTEzLDM5MTE0LDM5MTE1LDM5MTE2LDM5MjY1LDM5Mzk0LDE4OTAwMF19Jyl9LDU1OTE0KGZlKXsidXNlIHN0cmljdCI7ZmUuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyJhMTQwIiwiXHVlNGM2''@;'; put 'put ''Iiw2Ml0sWyJhMTgwIiwiXHVlNTA1IiwzMl0sWyJhMjQwIiwiXHVlNTI2Iiw2Ml0sWyJhMjgwIiwiXHVlNTY1IiwzMl0sWyJhMmFiIiwiXHVlNzY2Iiw1XSxbImEyZTMiLCJcdTIwYWNcdWU3NmQiXSxbImEyZWYiLCJcdWU3NmVcdWU3NmYiXSxbImEyZmQiLCJcdWU3NzBcdWU3NzEiXSxbImEz''@;'; put 'put ''NDAiLCJcdWU1ODYiLDYyXSxbImEzODAiLCJcdWU1YzUiLDMxLCJcdTMwMDAiXSxbImE0NDAiLCJcdWU1ZTYiLDYyXSxbImE0ODAiLCJcdWU2MjUiLDMyXSxbImE0ZjQiLCJcdWU3NzIiLDEwXSxbImE1NDAiLCJcdWU2NDYiLDYyXSxbImE1ODAiLCJcdWU2ODUiLDMyXSxbImE1ZjciLCJcdWU3''@;'; put 'put ''N2QiLDddLFsiYTY0MCIsIlx1ZTZhNiIsNjJdLFsiYTY4MCIsIlx1ZTZlNSIsMzJdLFsiYTZiOSIsIlx1ZTc4NSIsN10sWyJhNmQ5IiwiXHVlNzhkIiw2XSxbImE2ZWMiLCJcdWU3OTRcdWU3OTUiXSxbImE2ZjMiLCJcdWU3OTYiXSxbImE2ZjYiLCJcdWU3OTciLDhdLFsiYTc0MCIsIlx1ZTcw''@;'; put 'put ''NiIsNjJdLFsiYTc4MCIsIlx1ZTc0NSIsMzJdLFsiYTdjMiIsIlx1ZTdhMCIsMTRdLFsiYTdmMiIsIlx1ZTdhZiIsMTJdLFsiYTg5NiIsIlx1ZTdiYyIsMTBdLFsiYThiYyIsIlx1ZTdjNyJdLFsiYThiZiIsIlx1MDFmOSJdLFsiYThjMSIsIlx1ZTdjOVx1ZTdjYVx1ZTdjYlx1ZTdjYyJdLFsi''@;'; put 'put ''YThlYSIsIlx1ZTdjZCIsMjBdLFsiYTk1OCIsIlx1ZTdlMiJdLFsiYTk1YiIsIlx1ZTdlMyJdLFsiYTk1ZCIsIlx1ZTdlNFx1ZTdlNVx1ZTdlNiJdLFsiYTk4OSIsIlx1MzAzZVx1MmZmMCIsMTFdLFsiYTk5NyIsIlx1ZTdmNCIsMTJdLFsiYTlmMCIsIlx1ZTgwMSIsMTRdLFsiYWFhMSIsIlx1''@;'; put 'put ''ZTAwMCIsOTNdLFsiYWJhMSIsIlx1ZTA1ZSIsOTNdLFsiYWNhMSIsIlx1ZTBiYyIsOTNdLFsiYWRhMSIsIlx1ZTExYSIsOTNdLFsiYWVhMSIsIlx1ZTE3OCIsOTNdLFsiYWZhMSIsIlx1ZTFkNiIsOTNdLFsiZDdmYSIsIlx1ZTgxMCIsNF0sWyJmOGExIiwiXHVlMjM0Iiw5M10sWyJmOWExIiwi''@;'; put 'put ''XHVlMjkyIiw5M10sWyJmYWExIiwiXHVlMmYwIiw5M10sWyJmYmExIiwiXHVlMzRlIiw5M10sWyJmY2ExIiwiXHVlM2FjIiw5M10sWyJmZGExIiwiXHVlNDBhIiw5M10sWyJmZTUwIiwiXHUyZTgxXHVlODE2XHVlODE3XHVlODE4XHUyZTg0XHUzNDczXHUzNDQ3XHUyZTg4XHUyZThiXHVlODFl''@;'; put 'put ''XHUzNTllXHUzNjFhXHUzNjBlXHUyZThjXHUyZTk3XHUzOTZlXHUzOTE4XHVlODI2XHUzOWNmXHUzOWRmXHUzYTczXHUzOWQwXHVlODJiXHVlODJjXHUzYjRlXHUzYzZlXHUzY2UwXHUyZWE3XHVlODMxXHVlODMyXHUyZWFhXHU0MDU2XHU0MTVmXHUyZWFlXHU0MzM3XHUyZWIzXHUyZWI2XHUy''@;'; put 'put ''ZWI3XHVlODNiXHU0M2IxXHU0M2FjXHUyZWJiXHU0M2RkXHU0NGQ2XHU0NjYxXHU0NjRjXHVlODQzIl0sWyJmZTgwIiwiXHU0NzIzXHU0NzI5XHU0NzdjXHU0NzhkXHUyZWNhXHU0OTQ3XHU0OTdhXHU0OTdkXHU0OTgyXHU0OTgzXHU0OTg1XHU0OTg2XHU0OTlmXHU0OTliXHU0OWI3XHU0OWI2''@;'; put 'put ''XHVlODU0XHVlODU1XHU0Y2EzXHU0YzlmXHU0Y2EwXHU0Y2ExXHU0Yzc3XHU0Y2EyXHU0ZDEzIiw2LCJcdTRkYWVcdWU4NjRcdWU0NjgiLDkzXV0nKX0sNDA2NzkoZmUpeyJ1c2Ugc3RyaWN0IjtmZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjAiLCJcXHUwMDAwIiwxMjhdLFsiYTEiLCJcdWZm''@;'; put 'put ''NjEiLDYyXSxbIjgxNDAiLCJcdTMwMDBcdTMwMDFcdTMwMDJcdWZmMGNcdWZmMGVcdTMwZmJcdWZmMWFcdWZmMWJcdWZmMWZcdWZmMDFcdTMwOWJcdTMwOWNceGI0XHVmZjQwXHhhOFx1ZmYzZVx1ZmZlM1x1ZmYzZlx1MzBmZFx1MzBmZVx1MzA5ZFx1MzA5ZVx1MzAwM1x1NGVkZFx1MzAwNVx1''@;'; put 'put ''MzAwNlx1MzAwN1x1MzBmY1x1MjAxNVx1MjAxMFx1ZmYwZlx1ZmYzY1x1ZmY1ZVx1MjIyNVx1ZmY1Y1x1MjAyNlx1MjAyNVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1ZmYwOFx1ZmYwOVx1MzAxNFx1MzAxNVx1ZmYzYlx1ZmYzZFx1ZmY1Ylx1ZmY1ZFx1MzAwOCIsOSwiXHVmZjBiXHVmZjBk''@;'; put 'put ''XHhiMVx4ZDciXSxbIjgxODAiLCJceGY3XHVmZjFkXHUyMjYwXHVmZjFjXHVmZjFlXHUyMjY2XHUyMjY3XHUyMjFlXHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmZlNVx1ZmYwNFx1ZmZlMFx1ZmZlMVx1ZmYwNVx1ZmYwM1x1ZmYwNlx1ZmYwYVx1ZmYyMFx4YTdc''@;'; put 'put ''dTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTI1YmRcdTI1YmNcdTIwM2JcdTMwMTJcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTMiXSxbIjgxYjgiLCJcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIyODJcdTIy''@;'; put 'put ''ODNcdTIyMmFcdTIyMjkiXSxbIjgxYzgiLCJcdTIyMjdcdTIyMjhcdWZmZTJcdTIxZDJcdTIxZDRcdTIyMDBcdTIyMDMiXSxbIjgxZGEiLCJcdTIyMjBcdTIyYTVcdTIzMTJcdTIyMDJcdTIyMDdcdTIyNjFcdTIyNTJcdTIyNmFcdTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVcdTIyMmJc''@;'; put 'put ''dTIyMmMiXSxbIjgxZjAiLCJcdTIxMmJcdTIwMzBcdTI2NmZcdTI2NmRcdTI2NmFcdTIwMjBcdTIwMjFceGI2Il0sWyI4MWZjIiwiXHUyNWVmIl0sWyI4MjRmIiwiXHVmZjEwIiw5XSxbIjgyNjAiLCJcdWZmMjEiLDI1XSxbIjgyODEiLCJcdWZmNDEiLDI1XSxbIjgyOWYiLCJcdTMwNDEiLDgy''@;'; put 'put ''XSxbIjgzNDAiLCJcdTMwYTEiLDYyXSxbIjgzODAiLCJcdTMwZTAiLDIyXSxbIjgzOWYiLCJcdTAzOTEiLDE2LCJcdTAzYTMiLDZdLFsiODNiZiIsIlx1MDNiMSIsMTYsIlx1MDNjMyIsNl0sWyI4NDQwIiwiXHUwNDEwIiw1LCJcdTA0MDFcdTA0MTYiLDI1XSxbIjg0NzAiLCJcdTA0MzAiLDUs''@;'; put 'put ''Ilx1MDQ1MVx1MDQzNiIsN10sWyI4NDgwIiwiXHUwNDNlIiwxN10sWyI4NDlmIiwiXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE4XHUyNTE0XHUyNTFjXHUyNTJjXHUyNTI0XHUyNTM0XHUyNTNjXHUyNTAxXHUyNTAzXHUyNTBmXHUyNTEzXHUyNTFiXHUyNTE3XHUyNTIzXHUyNTMzXHUy''@;'; put 'put ''NTJiXHUyNTNiXHUyNTRiXHUyNTIwXHUyNTJmXHUyNTI4XHUyNTM3XHUyNTNmXHUyNTFkXHUyNTMwXHUyNTI1XHUyNTM4XHUyNTQyIl0sWyI4NzQwIiwiXHUyNDYwIiwxOSwiXHUyMTYwIiw5XSxbIjg3NWYiLCJcdTMzNDlcdTMzMTRcdTMzMjJcdTMzNGRcdTMzMThcdTMzMjdcdTMzMDNcdTMz''@;'; put 'put ''MzZcdTMzNTFcdTMzNTdcdTMzMGRcdTMzMjZcdTMzMjNcdTMzMmJcdTMzNGFcdTMzM2JcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOGVcdTMzOGZcdTMzYzRcdTMzYTEiXSxbIjg3N2UiLCJcdTMzN2IiXSxbIjg3ODAiLCJcdTMwMWRcdTMwMWZcdTIxMTZcdTMzY2RcdTIxMjFcdTMyYTQiLDQsIlx1''@;'; put 'put ''MzIzMVx1MzIzMlx1MzIzOVx1MzM3ZVx1MzM3ZFx1MzM3Y1x1MjI1Mlx1MjI2MVx1MjIyYlx1MjIyZVx1MjIxMVx1MjIxYVx1MjJhNVx1MjIyMFx1MjIxZlx1MjJiZlx1MjIzNVx1MjIyOVx1MjIyYSJdLFsiODg5ZiIsIlx1NGU5Y1x1NTUxNlx1NWEwM1x1OTYzZlx1NTRjMFx1NjExYlx1NjMy''@;'; put 'put ''OFx1NTlmNlx1OTAyMlx1ODQ3NVx1ODMxY1x1N2E1MFx1NjBhYVx1NjNlMVx1NmUyNVx1NjVlZFx1ODQ2Nlx1ODJhNlx1OWJmNVx1Njg5M1x1NTcyN1x1NjVhMVx1NjI3MVx1NWI5Ylx1NTlkMFx1ODY3Ylx1OThmNFx1N2Q2Mlx1N2RiZVx1OWI4ZVx1NjIxNlx1N2M5Zlx1ODhiN1x1NWI4OVx1''@;'; put 'put ''NWViNVx1NjMwOVx1NjY5N1x1Njg0OFx1OTVjN1x1OTc4ZFx1Njc0Zlx1NGVlNVx1NGYwYVx1NGY0ZFx1NGY5ZFx1NTA0OVx1NTZmMlx1NTkzN1x1NTlkNFx1NWEwMVx1NWMwOVx1NjBkZlx1NjEwZlx1NjE3MFx1NjYxM1x1NjkwNVx1NzBiYVx1NzU0Zlx1NzU3MFx1NzlmYlx1N2RhZFx1N2Rl''@;'; put 'put ''Zlx1ODBjM1x1ODQwZVx1ODg2M1x1OGIwMlx1OTA1NVx1OTA3YVx1NTMzYlx1NGU5NVx1NGVhNVx1NTdkZlx1ODBiMlx1OTBjMVx1NzhlZlx1NGUwMFx1NThmMVx1NmVhMlx1OTAzOFx1N2EzMlx1ODMyOFx1ODI4Ylx1OWMyZlx1NTE0MVx1NTM3MFx1NTRiZFx1NTRlMVx1NTZlMFx1NTlmYlx1''@;'; put 'put ''NWYxNVx1OThmMlx1NmRlYlx1ODBlNFx1ODUyZCJdLFsiODk0MCIsIlx1OTY2Mlx1OTY3MFx1OTZhMFx1OTdmYlx1NTQwYlx1NTNmM1x1NWI4N1x1NzBjZlx1N2ZiZFx1OGZjMlx1OTZlOFx1NTM2Zlx1OWQ1Y1x1N2FiYVx1NGUxMVx1Nzg5M1x1ODFmY1x1NmUyNlx1NTYxOFx1NTUwNFx1NmIx''@;'; put 'put ''ZFx1ODUxYVx1OWMzYlx1NTllNVx1NTNhOVx1NmQ2Nlx1NzRkY1x1OTU4Zlx1NTY0Mlx1NGU5MVx1OTA0Ylx1OTZmMlx1ODM0Zlx1OTkwY1x1NTNlMVx1NTViNlx1NWIzMFx1NWY3MVx1NjYyMFx1NjZmM1x1NjgwNFx1NmMzOFx1NmNmM1x1NmQyOVx1NzQ1Ylx1NzZjOFx1N2E0ZVx1OTgzNFx1''@;'; put 'put ''ODJmMVx1ODg1Ylx1OGE2MFx1OTJlZFx1NmRiMlx1NzVhYlx1NzZjYVx1OTljNVx1NjBhNlx1OGIwMVx1OGQ4YVx1OTViMlx1Njk4ZVx1NTNhZFx1NTE4NiJdLFsiODk4MCIsIlx1NTcxMlx1NTgzMFx1NTk0NFx1NWJiNFx1NWVmNlx1NjAyOFx1NjNhOVx1NjNmNFx1NmNiZlx1NmYxNFx1NzA4''@;'; put 'put ''ZVx1NzExNFx1NzE1OVx1NzFkNVx1NzMzZlx1N2UwMVx1ODI3Nlx1ODJkMVx1ODU5N1x1OTA2MFx1OTI1Ylx1OWQxYlx1NTg2OVx1NjViY1x1NmM1YVx1NzUyNVx1NTFmOVx1NTkyZVx1NTk2NVx1NWY4MFx1NWZkY1x1NjJiY1x1NjVmYVx1NmEyYVx1NmIyN1x1NmJiNFx1NzM4Ylx1N2ZjMVx1''@;'; put 'put ''ODk1Nlx1OWQyY1x1OWQwZVx1OWVjNFx1NWNhMVx1NmM5Nlx1ODM3Ylx1NTEwNFx1NWM0Ylx1NjFiNlx1ODFjNlx1Njg3Nlx1NzI2MVx1NGU1OVx1NGZmYVx1NTM3OFx1NjA2OVx1NmUyOVx1N2E0Zlx1OTdmM1x1NGUwYlx1NTMxNlx1NGVlZVx1NGY1NVx1NGYzZFx1NGZhMVx1NGY3M1x1NTJh''@;'; put 'put ''MFx1NTNlZlx1NTYwOVx1NTkwZlx1NWFjMVx1NWJiNlx1NWJlMVx1NzlkMVx1NjY4N1x1Njc5Y1x1NjdiNlx1NmI0Y1x1NmNiM1x1NzA2Ylx1NzNjMlx1Nzk4ZFx1NzliZVx1N2EzY1x1N2I4N1x1ODJiMVx1ODJkYlx1ODMwNFx1ODM3N1x1ODNlZlx1ODNkM1x1ODc2Nlx1OGFiMlx1NTYyOVx1''@;'; put 'put ''OGNhOFx1OGZlNlx1OTA0ZVx1OTcxZVx1ODY4YVx1NGZjNFx1NWNlOFx1NjIxMVx1NzI1OVx1NzUzYlx1ODFlNVx1ODJiZFx1ODZmZVx1OGNjMFx1OTZjNVx1OTkxM1x1OTlkNVx1NGVjYlx1NGYxYVx1ODllM1x1NTZkZVx1NTg0YVx1NThjYVx1NWVmYlx1NWZlYlx1NjAyYVx1NjA5NFx1NjA2''@;'; put 'put ''Mlx1NjFkMFx1NjIxMlx1NjJkMFx1NjUzOSJdLFsiOGE0MCIsIlx1OWI0MVx1NjY2Nlx1NjhiMFx1NmQ3N1x1NzA3MFx1NzU0Y1x1NzY4Nlx1N2Q3NVx1ODJhNVx1ODdmOVx1OTU4Ylx1OTY4ZVx1OGM5ZFx1NTFmMVx1NTJiZVx1NTkxNlx1NTRiM1x1NWJiM1x1NWQxNlx1NjE2OFx1Njk4Mlx1''@;'; put 'put ''NmRhZlx1Nzg4ZFx1ODRjYlx1ODg1N1x1OGE3Mlx1OTNhN1x1OWFiOFx1NmQ2Y1x1OTlhOFx1ODZkOVx1NTdhM1x1NjdmZlx1ODZjZVx1OTIwZVx1NTI4M1x1NTY4N1x1NTQwNFx1NWVkM1x1NjJlMVx1NjRiOVx1NjgzY1x1NjgzOFx1NmJiYlx1NzM3Mlx1NzhiYVx1N2E2Ylx1ODk5YVx1ODlk''@;'; put 'put ''Mlx1OGQ2Ylx1OGYwM1x1OTBlZFx1OTVhM1x1OTY5NFx1OTc2OVx1NWI2Nlx1NWNiM1x1Njk3ZFx1OTg0ZFx1OTg0ZVx1NjM5Ylx1N2IyMFx1NmEyYiJdLFsiOGE4MCIsIlx1NmE3Zlx1NjhiNlx1OWMwZFx1NmY1Zlx1NTI3Mlx1NTU5ZFx1NjA3MFx1NjJlY1x1NmQzYlx1NmUwN1x1NmVkMVx1''@;'; put 'put ''ODQ1Ylx1ODkxMFx1OGY0NFx1NGUxNFx1OWMzOVx1NTNmNlx1NjkxYlx1NmEzYVx1OTc4NFx1NjgyYVx1NTE1Y1x1N2FjM1x1ODRiMlx1OTFkY1x1OTM4Y1x1NTY1Ylx1OWQyOFx1NjgyMlx1ODMwNVx1ODQzMVx1N2NhNVx1NTIwOFx1ODJjNVx1NzRlNlx1NGU3ZVx1NGY4M1x1NTFhMFx1NWJk''@;'; put 'put ''Mlx1NTIwYVx1NTJkOFx1NTJlN1x1NWRmYlx1NTU5YVx1NTgyYVx1NTllNlx1NWI4Y1x1NWI5OFx1NWJkYlx1NWU3Mlx1NWU3OVx1NjBhM1x1NjExZlx1NjE2M1x1NjFiZVx1NjNkYlx1NjU2Mlx1NjdkMVx1Njg1M1x1NjhmYVx1NmIzZVx1NmI1M1x1NmM1N1x1NmYyMlx1NmY5N1x1NmY0NVx1''@;'; put 'put ''NzRiMFx1NzUxOFx1NzZlM1x1NzcwYlx1N2FmZlx1N2JhMVx1N2MyMVx1N2RlOVx1N2YzNlx1N2ZmMFx1ODA5ZFx1ODI2Nlx1ODM5ZVx1ODliM1x1OGFjY1x1OGNhYlx1OTA4NFx1OTQ1MVx1OTU5M1x1OTU5MVx1OTVhMlx1OTY2NVx1OTdkM1x1OTkyOFx1ODIxOFx1NGUzOFx1NTQyYlx1NWNi''@;'; put 'put ''OFx1NWRjY1x1NzNhOVx1NzY0Y1x1NzczY1x1NWNhOVx1N2ZlYlx1OGQwYlx1OTZjMVx1OTgxMVx1OTg1NFx1OTg1OFx1NGYwMVx1NGYwZVx1NTM3MVx1NTU5Y1x1NTY2OFx1NTdmYVx1NTk0N1x1NWIwOVx1NWJjNFx1NWM5MFx1NWUwY1x1NWU3ZVx1NWZjY1x1NjNlZVx1NjczYVx1NjVkN1x1''@;'; put 'put ''NjVlMlx1NjcxZlx1NjhjYlx1NjhjNCJdLFsiOGI0MCIsIlx1NmE1Zlx1NWUzMFx1NmJjNVx1NmMxN1x1NmM3ZFx1NzU3Zlx1Nzk0OFx1NWI2M1x1N2EwMFx1N2QwMFx1NWZiZFx1ODk4Zlx1OGExOFx1OGNiNFx1OGQ3N1x1OGVjY1x1OGYxZFx1OThlMlx1OWEwZVx1OWIzY1x1NGU4MFx1NTA3''@;'; put 'put ''ZFx1NTEwMFx1NTk5M1x1NWI5Y1x1NjIyZlx1NjI4MFx1NjRlY1x1NmIzYVx1NzJhMFx1NzU5MVx1Nzk0N1x1N2ZhOVx1ODdmYlx1OGFiY1x1OGI3MFx1NjNhY1x1ODNjYVx1OTdhMFx1NTQwOVx1NTQwM1x1NTVhYlx1Njg1NFx1NmE1OFx1OGE3MFx1NzgyN1x1Njc3NVx1OWVjZFx1NTM3NFx1''@;'; put 'put ''NWJhMlx1ODExYVx1ODY1MFx1OTAwNlx1NGUxOFx1NGU0NVx1NGVjN1x1NGYxMVx1NTNjYVx1NTQzOFx1NWJhZVx1NWYxM1x1NjAyNVx1NjU1MSJdLFsiOGI4MCIsIlx1NjczZFx1NmM0Mlx1NmM3Mlx1NmNlM1x1NzA3OFx1NzQwM1x1N2E3Nlx1N2FhZVx1N2IwOFx1N2QxYVx1N2NmZVx1N2Q2''@;'; put 'put ''Nlx1NjVlN1x1NzI1Ylx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjJlMFx1NjMxOVx1NmUyMFx1ODY1YVx1OGEzMVx1OGRkZFx1OTJmOFx1NmYwMVx1NzlhNlx1OWI1YVx1NGVhOFx1NGVhYlx1NGVhY1x1NGY5Ylx1NGZhMFx1NTBkMVx1NTE0N1x1N2FmNlx1NTE3MVx1NTFmNlx1NTM1NFx1''@;'; put 'put ''NTMyMVx1NTM3Zlx1NTNlYlx1NTVhY1x1NTg4M1x1NWNlMVx1NWYzN1x1NWY0YVx1NjAyZlx1NjA1MFx1NjA2ZFx1NjMxZlx1NjU1OVx1NmE0Ylx1NmNjMVx1NzJjMlx1NzJlZFx1NzdlZlx1ODBmOFx1ODEwNVx1ODIwOFx1ODU0ZVx1OTBmN1x1OTNlMVx1OTdmZlx1OTk1N1x1OWE1YVx1NGVm''@;'; put 'put ''MFx1NTFkZFx1NWMyZFx1NjY4MVx1Njk2ZFx1NWM0MFx1NjZmMlx1Njk3NVx1NzM4OVx1Njg1MFx1N2M4MVx1NTBjNVx1NTJlNFx1NTc0N1x1NWRmZVx1OTMyNlx1NjVhNFx1NmIyM1x1NmIzZFx1NzQzNFx1Nzk4MVx1NzliZFx1N2I0Ylx1N2RjYVx1ODJiOVx1ODNjY1x1ODg3Zlx1ODk1Zlx1''@;'; put 'put ''OGIzOVx1OGZkMVx1OTFkMVx1NTQxZlx1OTI4MFx1NGU1ZFx1NTAzNlx1NTNlNVx1NTMzYVx1NzJkN1x1NzM5Nlx1NzdlOVx1ODJlNlx1OGVhZlx1OTljNlx1OTljOFx1OTlkMlx1NTE3N1x1NjExYVx1ODY1ZVx1NTViMFx1N2E3YVx1NTA3Nlx1NWJkM1x1OTA0N1x1OTY4NVx1NGUzMlx1NmFk''@;'; put 'put ''Ylx1OTFlN1x1NWM1MVx1NWM0OCJdLFsiOGM0MCIsIlx1NjM5OFx1N2E5Zlx1NmM5M1x1OTc3NFx1OGY2MVx1N2FhYVx1NzE4YVx1OTY4OFx1N2M4Mlx1NjgxN1x1N2U3MFx1Njg1MVx1OTM2Y1x1NTJmMlx1NTQxYlx1ODVhYlx1OGExM1x1N2ZhNFx1OGVjZFx1OTBlMVx1NTM2Nlx1ODg4OFx1''@;'; put 'put ''Nzk0MVx1NGZjMlx1NTBiZVx1NTIxMVx1NTE0NFx1NTU1M1x1NTcyZFx1NzNlYVx1NTc4Ylx1NTk1MVx1NWY2Mlx1NWY4NFx1NjA3NVx1NjE3Nlx1NjE2N1x1NjFhOVx1NjNiMlx1NjQzYVx1NjU2Y1x1NjY2Zlx1Njg0Mlx1NmUxM1x1NzU2Nlx1N2EzZFx1N2NmYlx1N2Q0Y1x1N2Q5OVx1N2U0''@;'; put 'put ''Ylx1N2Y2Ylx1ODMwZVx1ODM0YVx1ODZjZFx1OGEwOFx1OGE2M1x1OGI2Nlx1OGVmZFx1OTgxYVx1OWQ4Zlx1ODJiOFx1OGZjZVx1OWJlOCJdLFsiOGM4MCIsIlx1NTI4N1x1NjIxZlx1NjQ4M1x1NmZjMFx1OTY5OVx1Njg0MVx1NTA5MVx1NmIyMFx1NmM3YVx1NmY1NFx1N2E3NFx1N2Q1MFx1''@;'; put 'put ''ODg0MFx1OGEyM1x1NjcwOFx1NGVmNlx1NTAzOVx1NTAyNlx1NTA2NVx1NTE3Y1x1NTIzOFx1NTI2M1x1NTVhN1x1NTcwZlx1NTgwNVx1NWFjY1x1NWVmYVx1NjFiMlx1NjFmOFx1NjJmM1x1NjM3Mlx1NjkxY1x1NmEyOVx1NzI3ZFx1NzJhY1x1NzMyZVx1NzgxNFx1Nzg2Zlx1N2Q3OVx1Nzcw''@;'; put 'put ''Y1x1ODBhOVx1ODk4Ylx1OGIxOVx1OGNlMlx1OGVkMlx1OTA2M1x1OTM3NVx1OTY3YVx1OTg1NVx1OWExM1x1OWU3OFx1NTE0M1x1NTM5Zlx1NTNiM1x1NWU3Ylx1NWYyNlx1NmUxYlx1NmU5MFx1NzM4NFx1NzNmZVx1N2Q0M1x1ODIzN1x1OGEwMFx1OGFmYVx1OTY1MFx1NGU0ZVx1NTAwYlx1''@;'; put 'put ''NTNlNFx1NTQ3Y1x1NTZmYVx1NTlkMVx1NWI2NFx1NWRmMVx1NWVhYlx1NWYyN1x1NjIzOFx1NjU0NVx1NjdhZlx1NmU1Nlx1NzJkMFx1N2NjYVx1ODhiNFx1ODBhMVx1ODBlMVx1ODNmMFx1ODY0ZVx1OGE4N1x1OGRlOFx1OTIzN1x1OTZjN1x1OTg2N1x1OWYxM1x1NGU5NFx1NGU5Mlx1NGYw''@;'; put 'put ''ZFx1NTM0OFx1NTQ0OVx1NTQzZVx1NWEyZlx1NWY4Y1x1NWZhMVx1NjA5Zlx1NjhhN1x1NmE4ZVx1NzQ1YVx1Nzg4MVx1OGE5ZVx1OGFhNFx1OGI3N1x1OTE5MFx1NGU1ZVx1OWJjOVx1NGVhNFx1NGY3Y1x1NGZhZlx1NTAxOVx1NTAxNlx1NTE0OVx1NTE2Y1x1NTI5Zlx1NTJiOVx1NTJmZVx1''@;'; put 'put ''NTM5YVx1NTNlM1x1NTQxMSJdLFsiOGQ0MCIsIlx1NTQwZVx1NTU4OVx1NTc1MVx1NTdhMlx1NTk3ZFx1NWI1NFx1NWI1ZFx1NWI4Zlx1NWRlNVx1NWRlN1x1NWRmN1x1NWU3OFx1NWU4M1x1NWU5YVx1NWViN1x1NWYxOFx1NjA1Mlx1NjE0Y1x1NjI5N1x1NjJkOFx1NjNhN1x1NjUzYlx1NjYw''@;'; put 'put ''Mlx1NjY0M1x1NjZmNFx1Njc2ZFx1NjgyMVx1Njg5N1x1NjljYlx1NmM1Zlx1NmQyYVx1NmQ2OVx1NmUyZlx1NmU5ZFx1NzUzMlx1NzY4N1x1Nzg2Y1x1N2EzZlx1N2NlMFx1N2QwNVx1N2QxOFx1N2Q1ZVx1N2RiMVx1ODAxNVx1ODAwM1x1ODBhZlx1ODBiMVx1ODE1NFx1ODE4Zlx1ODIyYVx1''@;'; put 'put ''ODM1Mlx1ODg0Y1x1ODg2MVx1OGIxYlx1OGNhMlx1OGNmY1x1OTBjYVx1OTE3NVx1OTI3MVx1NzgzZlx1OTJmY1x1OTVhNFx1OTY0ZCJdLFsiOGQ4MCIsIlx1OTgwNVx1OTk5OVx1OWFkOFx1OWQzYlx1NTI1Ylx1NTJhYlx1NTNmN1x1NTQwOFx1NThkNVx1NjJmN1x1NmZlMFx1OGM2YVx1OGY1''@;'; put 'put ''Zlx1OWViOVx1NTE0Ylx1NTIzYlx1NTQ0YVx1NTZmZFx1N2E0MFx1OTE3N1x1OWQ2MFx1OWVkMlx1NzM0NFx1NmYwOVx1ODE3MFx1NzUxMVx1NWZmZFx1NjBkYVx1OWFhOFx1NzJkYlx1OGZiY1x1NmI2NFx1OTgwM1x1NGVjYVx1NTZmMFx1NTc2NFx1NThiZVx1NWE1YVx1NjA2OFx1NjFjN1x1''@;'; put 'put ''NjYwZlx1NjYwNlx1NjgzOVx1NjhiMVx1NmRmN1x1NzVkNVx1N2QzYVx1ODI2ZVx1OWI0Mlx1NGU5Ylx1NGY1MFx1NTNjOVx1NTUwNlx1NWQ2Zlx1NWRlNlx1NWRlZVx1NjdmYlx1NmM5OVx1NzQ3M1x1NzgwMlx1OGE1MFx1OTM5Nlx1ODhkZlx1NTc1MFx1NWVhN1x1NjMyYlx1NTBiNVx1NTBh''@;'; put 'put ''Y1x1NTE4ZFx1NjcwMFx1NTRjOVx1NTg1ZVx1NTliYlx1NWJiMFx1NWY2OVx1NjI0ZFx1NjNhMVx1NjgzZFx1NmI3M1x1NmUwOFx1NzA3ZFx1OTFjN1x1NzI4MFx1NzgxNVx1NzgyNlx1Nzk2ZFx1NjU4ZVx1N2QzMFx1ODNkY1x1ODhjMVx1OGYwOVx1OTY5Ylx1NTI2NFx1NTcyOFx1Njc1MFx1''@;'; put 'put ''N2Y2YVx1OGNhMVx1NTFiNFx1NTc0Mlx1OTYyYVx1NTgzYVx1Njk4YVx1ODBiNFx1NTRiMlx1NWQwZVx1NTdmY1x1Nzg5NVx1OWRmYVx1NGY1Y1x1NTI0YVx1NTQ4Ylx1NjQzZVx1NjYyOFx1NjcxNFx1NjdmNVx1N2E4NFx1N2I1Nlx1N2QyMlx1OTMyZlx1Njg1Y1x1OWJhZFx1N2IzOVx1NTMx''@;'; put 'put ''OVx1NTE4YVx1NTIzNyJdLFsiOGU0MCIsIlx1NWJkZlx1NjJmNlx1NjRhZVx1NjRlNlx1NjcyZFx1NmJiYVx1ODVhOVx1OTZkMVx1NzY5MFx1OWJkNlx1NjM0Y1x1OTMwNlx1OWJhYlx1NzZiZlx1NjY1Mlx1NGUwOVx1NTA5OFx1NTNjMlx1NWM3MVx1NjBlOFx1NjQ5Mlx1NjU2M1x1Njg1Zlx1''@;'; put 'put ''NzFlNlx1NzNjYVx1NzUyM1x1N2I5N1x1N2U4Mlx1ODY5NVx1OGI4M1x1OGNkYlx1OTE3OFx1OTkxMFx1NjVhY1x1NjZhYlx1NmI4Ylx1NGVkNVx1NGVkNFx1NGYzYVx1NGY3Zlx1NTIzYVx1NTNmOFx1NTNmMlx1NTVlM1x1NTZkYlx1NThlYlx1NTljYlx1NTljOVx1NTlmZlx1NWI1MFx1NWM0''@;'; put 'put ''ZFx1NWUwMlx1NWUyYlx1NWZkN1x1NjAxZFx1NjMwN1x1NjUyZlx1NWI1Y1x1NjVhZlx1NjViZFx1NjVlOFx1Njc5ZFx1NmI2MiJdLFsiOGU4MCIsIlx1NmI3Ylx1NmMwZlx1NzM0NVx1Nzk0OVx1NzljMVx1N2NmOFx1N2QxOVx1N2QyYlx1ODBhMlx1ODEwMlx1ODFmM1x1ODk5Nlx1OGE1ZVx1''@;'; put 'put ''OGE2OVx1OGE2Nlx1OGE4Y1x1OGFlZVx1OGNjN1x1OGNkY1x1OTZjY1x1OThmY1x1NmI2Zlx1NGU4Ylx1NGYzY1x1NGY4ZFx1NTE1MFx1NWI1N1x1NWJmYVx1NjE0OFx1NjMwMVx1NjY0Mlx1NmIyMVx1NmVjYlx1NmNiYlx1NzIzZVx1NzRiZFx1NzVkNFx1NzhjMVx1NzkzYVx1ODAwY1x1ODAz''@;'; put 'put ''M1x1ODFlYVx1ODQ5NFx1OGY5ZVx1NmM1MFx1OWU3Zlx1NWYwZlx1OGI1OFx1OWQyYlx1N2FmYVx1OGVmOFx1NWI4ZFx1OTZlYlx1NGUwM1x1NTNmMVx1NTdmN1x1NTkzMVx1NWFjOVx1NWJhNFx1NjA4OVx1NmU3Zlx1NmYwNlx1NzViZVx1OGNlYVx1NWI5Zlx1ODUwMFx1N2JlMFx1NTA3Mlx1''@;'; put 'put ''NjdmNFx1ODI5ZFx1NWM2MVx1ODU0YVx1N2UxZVx1ODIwZVx1NTE5OVx1NWMwNFx1NjM2OFx1OGQ2Nlx1NjU5Y1x1NzE2ZVx1NzkzZVx1N2QxN1x1ODAwNVx1OGIxZFx1OGVjYVx1OTA2ZVx1ODZjN1x1OTBhYVx1NTAxZlx1NTJmYVx1NWMzYVx1Njc1M1x1NzA3Y1x1NzIzNVx1OTE0Y1x1OTFj''@;'; put 'put ''OFx1OTMyYlx1ODJlNVx1NWJjMlx1NWYzMVx1NjBmOVx1NGUzYlx1NTNkNlx1NWI4OFx1NjI0Ylx1NjczMVx1NmI4YVx1NzJlOVx1NzNlMFx1N2EyZVx1ODE2Ylx1OGRhM1x1OTE1Mlx1OTk5Nlx1NTExMlx1NTNkN1x1NTQ2YVx1NWJmZlx1NjM4OFx1NmEzOVx1N2RhY1x1OTcwMFx1NTZkYVx1''@;'; put 'put ''NTNjZVx1NTQ2OCJdLFsiOGY0MCIsIlx1NWI5N1x1NWMzMVx1NWRkZVx1NGZlZVx1NjEwMVx1NjJmZVx1NmQzMlx1NzljMFx1NzljYlx1N2Q0Mlx1N2U0ZFx1N2ZkMlx1ODFlZFx1ODIxZlx1ODQ5MFx1ODg0Nlx1ODk3Mlx1OGI5MFx1OGU3NFx1OGYyZlx1OTAzMVx1OTE0Ylx1OTE2Y1x1OTZj''@;'; put 'put ''Nlx1OTE5Y1x1NGVjMFx1NGY0Zlx1NTE0NVx1NTM0MVx1NWY5M1x1NjIwZVx1NjdkNFx1NmM0MVx1NmUwYlx1NzM2M1x1N2UyNlx1OTFjZFx1OTI4M1x1NTNkNFx1NTkxOVx1NWJiZlx1NmRkMVx1Nzk1ZFx1N2UyZVx1N2M5Ylx1NTg3ZVx1NzE5Zlx1NTFmYVx1ODg1M1x1OGZmMFx1NGZjYVx1''@;'; put 'put ''NWNmYlx1NjYyNVx1NzdhY1x1N2FlM1x1ODIxY1x1OTlmZlx1NTFjNlx1NWZhYVx1NjVlY1x1Njk2Zlx1NmI4OVx1NmRmMyJdLFsiOGY4MCIsIlx1NmU5Nlx1NmY2NFx1NzZmZVx1N2QxNFx1NWRlMVx1OTA3NVx1OTE4N1x1OTgwNlx1NTFlNlx1NTIxZFx1NjI0MFx1NjY5MVx1NjZkOVx1NmUx''@;'; put 'put ''YVx1NWViNlx1N2RkMlx1N2Y3Mlx1NjZmOFx1ODVhZlx1ODVmN1x1OGFmOFx1NTJhOVx1NTNkOVx1NTk3M1x1NWU4Zlx1NWY5MFx1NjA1NVx1OTJlNFx1OTY2NFx1NTBiN1x1NTExZlx1NTJkZFx1NTMyMFx1NTM0N1x1NTNlY1x1NTRlOFx1NTU0Nlx1NTUzMVx1NTYxN1x1NTk2OFx1NTliZVx1''@;'; put 'put ''NWEzY1x1NWJiNVx1NWMwNlx1NWMwZlx1NWMxMVx1NWMxYVx1NWU4NFx1NWU4YVx1NWVlMFx1NWY3MFx1NjI3Zlx1NjI4NFx1NjJkYlx1NjM4Y1x1NjM3N1x1NjYwN1x1NjYwY1x1NjYyZFx1NjY3Nlx1Njc3ZVx1NjhhMlx1NmExZlx1NmEzNVx1NmNiY1x1NmQ4OFx1NmUwOVx1NmU1OFx1NzEz''@;'; put 'put ''Y1x1NzEyNlx1NzE2N1x1NzVjN1x1NzcwMVx1Nzg1ZFx1NzkwMVx1Nzk2NVx1NzlmMFx1N2FlMFx1N2IxMVx1N2NhN1x1N2QzOVx1ODA5Nlx1ODNkNlx1ODQ4Ylx1ODU0OVx1ODg1ZFx1ODhmM1x1OGExZlx1OGEzY1x1OGE1NFx1OGE3M1x1OGM2MVx1OGNkZVx1OTFhNFx1OTI2Nlx1OTM3ZVx1''@;'; put 'put ''OTQxOFx1OTY5Y1x1OTc5OFx1NGUwYVx1NGUwOFx1NGUxZVx1NGU1N1x1NTE5N1x1NTI3MFx1NTdjZVx1NTgzNFx1NThjY1x1NWIyMlx1NWUzOFx1NjBjNVx1NjRmZVx1Njc2MVx1Njc1Nlx1NmQ0NFx1NzJiNlx1NzU3M1x1N2E2M1x1ODRiOFx1OGI3Mlx1OTFiOFx1OTMyMFx1NTYzMVx1NTdm''@;'; put 'put ''NFx1OThmZSJdLFsiOTA0MCIsIlx1NjJlZFx1NjkwZFx1NmI5Nlx1NzFlZFx1N2U1NFx1ODA3N1x1ODI3Mlx1ODllNlx1OThkZlx1ODc1NVx1OGZiMVx1NWMzYlx1NGYzOFx1NGZlMVx1NGZiNVx1NTUwN1x1NWEyMFx1NWJkZFx1NWJlOVx1NWZjM1x1NjE0ZVx1NjMyZlx1NjViMFx1NjY0Ylx1''@;'; put 'put ''NjhlZVx1Njk5Ylx1NmQ3OFx1NmRmMVx1NzUzM1x1NzViOVx1NzcxZlx1Nzk1ZVx1NzllNlx1N2QzM1x1ODFlM1x1ODJhZlx1ODVhYVx1ODlhYVx1OGEzYVx1OGVhYlx1OGY5Ylx1OTAzMlx1OTFkZFx1OTcwN1x1NGViYVx1NGVjMVx1NTIwM1x1NTg3NVx1NThlY1x1NWMwYlx1NzUxYVx1NWMz''@;'; put 'put ''ZFx1ODE0ZVx1OGEwYVx1OGZjNVx1OTY2M1x1OTc2ZFx1N2IyNVx1OGFjZlx1OTgwOFx1OTE2Mlx1NTZmM1x1NTNhOCJdLFsiOTA4MCIsIlx1OTAxN1x1NTQzOVx1NTc4Mlx1NWUyNVx1NjNhOFx1NmMzNFx1NzA4YVx1Nzc2MVx1N2M4Ylx1N2ZlMFx1ODg3MFx1OTA0Mlx1OTE1NFx1OTMxMFx1''@;'; put 'put ''OTMxOFx1OTY4Zlx1NzQ1ZVx1OWFjNFx1NWQwN1x1NWQ2OVx1NjU3MFx1NjdhMlx1OGRhOFx1OTZkYlx1NjM2ZVx1Njc0OVx1NjkxOVx1ODNjNVx1OTgxN1x1OTZjMFx1ODhmZVx1NmY4NFx1NjQ3YVx1NWJmOFx1NGUxNlx1NzAyY1x1NzU1ZFx1NjYyZlx1NTFjNFx1NTIzNlx1NTJlMlx1NTlk''@;'; put 'put ''M1x1NWY4MVx1NjAyN1x1NjIxMFx1NjUzZlx1NjU3NFx1NjYxZlx1NjY3NFx1NjhmMlx1NjgxNlx1NmI2M1x1NmUwNVx1NzI3Mlx1NzUxZlx1NzZkYlx1N2NiZVx1ODA1Nlx1NThmMFx1ODhmZFx1ODk3Zlx1OGFhMFx1OGE5M1x1OGFjYlx1OTAxZFx1OTE5Mlx1OTc1Mlx1OTc1OVx1NjU4OVx1''@;'; put 'put ''N2EwZVx1ODEwNlx1OTZiYlx1NWUyZFx1NjBkY1x1NjIxYVx1NjVhNVx1NjYxNFx1Njc5MFx1NzdmM1x1N2E0ZFx1N2M0ZFx1N2UzZVx1ODEwYVx1OGNhY1x1OGQ2NFx1OGRlMVx1OGU1Zlx1NzhhOVx1NTIwN1x1NjJkOVx1NjNhNVx1NjQ0Mlx1NjI5OFx1OGEyZFx1N2E4M1x1N2JjMFx1OGFh''@;'; put 'put ''Y1x1OTZlYVx1N2Q3Nlx1ODIwY1x1ODc0OVx1NGVkOVx1NTE0OFx1NTM0M1x1NTM2MFx1NWJhM1x1NWMwMlx1NWMxNlx1NWRkZFx1NjIyNlx1NjI0N1x1NjRiMFx1NjgxM1x1NjgzNFx1NmNjOVx1NmQ0NVx1NmQxN1x1NjdkM1x1NmY1Y1x1NzE0ZVx1NzE3ZFx1NjVjYlx1N2E3Zlx1N2JhZFx1''@;'; put 'put ''N2RkYSJdLFsiOTE0MCIsIlx1N2U0YVx1N2ZhOFx1ODE3YVx1ODIxYlx1ODIzOVx1ODVhNlx1OGE2ZVx1OGNjZVx1OGRmNVx1OTA3OFx1OTA3N1x1OTJhZFx1OTI5MVx1OTU4M1x1OWJhZVx1NTI0ZFx1NTU4NFx1NmYzOFx1NzEzNlx1NTE2OFx1Nzk4NVx1N2U1NVx1ODFiM1x1N2NjZVx1NTY0''@;'; put 'put ''Y1x1NTg1MVx1NWNhOFx1NjNhYVx1NjZmZVx1NjZmZFx1Njk1YVx1NzJkOVx1NzU4Zlx1NzU4ZVx1NzkwZVx1Nzk1Nlx1NzlkZlx1N2M5N1x1N2QyMFx1N2Q0NFx1ODYwN1x1OGEzNFx1OTYzYlx1OTA2MVx1OWYyMFx1NTBlN1x1NTI3NVx1NTNjY1x1NTNlMlx1NTAwOVx1NTVhYVx1NThlZVx1''@;'; put 'put ''NTk0Zlx1NzIzZFx1NWI4Ylx1NWM2NFx1NTMxZFx1NjBlM1x1NjBmM1x1NjM1Y1x1NjM4M1x1NjMzZlx1NjNiYiJdLFsiOTE4MCIsIlx1NjRjZFx1NjVlOVx1NjZmOVx1NWRlM1x1NjljZFx1NjlmZFx1NmYxNVx1NzFlNVx1NGU4OVx1NzVlOVx1NzZmOFx1N2E5M1x1N2NkZlx1N2RjZlx1N2Q5''@;'; put 'put ''Y1x1ODA2MVx1ODM0OVx1ODM1OFx1ODQ2Y1x1ODRiY1x1ODVmYlx1ODhjNVx1OGQ3MFx1OTAwMVx1OTA2ZFx1OTM5N1x1OTcxY1x1OWExMlx1NTBjZlx1NTg5N1x1NjE4ZVx1ODFkM1x1ODUzNVx1OGQwOFx1OTAyMFx1NGZjM1x1NTA3NFx1NTI0N1x1NTM3M1x1NjA2Zlx1NjM0OVx1Njc1Zlx1''@;'; put 'put ''NmUyY1x1OGRiM1x1OTAxZlx1NGZkN1x1NWM1ZVx1OGNjYVx1NjVjZlx1N2Q5YVx1NTM1Mlx1ODg5Nlx1NTE3Nlx1NjNjM1x1NWI1OFx1NWI2Ylx1NWMwYVx1NjQwZFx1Njc1MVx1OTA1Y1x1NGVkNlx1NTkxYVx1NTkyYVx1NmM3MFx1OGE1MVx1NTUzZVx1NTgxNVx1NTlhNVx1NjBmMFx1NjI1''@;'; put 'put ''M1x1NjdjMVx1ODIzNVx1Njk1NVx1OTY0MFx1OTljNFx1OWEyOFx1NGY1M1x1NTgwNlx1NWJmZVx1ODAxMFx1NWNiMVx1NWUyZlx1NWY4NVx1NjAyMFx1NjE0Ylx1NjIzNFx1NjZmZlx1NmNmMFx1NmVkZVx1ODBjZVx1ODE3Zlx1ODJkNFx1ODg4Ylx1OGNiOFx1OTAwMFx1OTAyZVx1OTY4YVx1''@;'; put 'put ''OWVkYlx1OWJkYlx1NGVlM1x1NTNmMFx1NTkyN1x1N2IyY1x1OTE4ZFx1OTg0Y1x1OWRmOVx1NmVkZFx1NzAyN1x1NTM1M1x1NTU0NFx1NWI4NVx1NjI1OFx1NjI5ZVx1NjJkM1x1NmNhMlx1NmZlZlx1NzQyMlx1OGExN1x1OTQzOFx1NmZjMVx1OGFmZVx1ODMzOFx1NTFlN1x1ODZmOFx1NTNl''@;'; put 'put ''YSJdLFsiOTI0MCIsIlx1NTNlOVx1NGY0Nlx1OTA1NFx1OGZiMFx1NTk2YVx1ODEzMVx1NWRmZFx1N2FlYVx1OGZiZlx1NjhkYVx1OGMzN1x1NzJmOFx1OWM0OFx1NmEzZFx1OGFiMFx1NGUzOVx1NTM1OFx1NTYwNlx1NTc2Nlx1NjJjNVx1NjNhMlx1NjVlNlx1NmI0ZVx1NmRlMVx1NmU1Ylx1''@;'; put 'put ''NzBhZFx1NzdlZFx1N2FlZlx1N2JhYVx1N2RiYlx1ODAzZFx1ODBjNlx1ODZjYlx1OGE5NVx1OTM1Ylx1NTZlM1x1NThjN1x1NWYzZVx1NjVhZFx1NjY5Nlx1NmE4MFx1NmJiNVx1NzUzN1x1OGFjN1x1NTAyNFx1NzdlNVx1NTczMFx1NWYxYlx1NjA2NVx1NjY3YVx1NmM2MFx1NzVmNFx1N2Ex''@;'; put 'put ''YVx1N2Y2ZVx1ODFmNFx1ODcxOFx1OTA0NVx1OTliM1x1N2JjOVx1NzU1Y1x1N2FmOVx1N2I1MVx1ODRjNCJdLFsiOTI4MCIsIlx1OTAxMFx1NzllOVx1N2E5Mlx1ODMzNlx1NWFlMVx1Nzc0MFx1NGUyZFx1NGVmMlx1NWI5OVx1NWZlMFx1NjJiZFx1NjYzY1x1NjdmMVx1NmNlOFx1ODY2Ylx1''@;'; put 'put ''ODg3N1x1OGEzYlx1OTE0ZVx1OTJmM1x1OTlkMFx1NmExN1x1NzAyNlx1NzMyYVx1ODJlN1x1ODQ1N1x1OGNhZlx1NGUwMVx1NTE0Nlx1NTFjYlx1NTU4Ylx1NWJmNVx1NWUxNlx1NWUzM1x1NWU4MVx1NWYxNFx1NWYzNVx1NWY2Ylx1NWZiNFx1NjFmMlx1NjMxMVx1NjZhMlx1NjcxZFx1NmY2''@;'; put 'put ''ZVx1NzI1Mlx1NzUzYVx1NzczYVx1ODA3NFx1ODEzOVx1ODE3OFx1ODc3Nlx1OGFiZlx1OGFkY1x1OGQ4NVx1OGRmM1x1OTI5YVx1OTU3N1x1OTgwMlx1OWNlNVx1NTJjNVx1NjM1N1x1NzZmNFx1NjcxNVx1NmM4OFx1NzNjZFx1OGNjM1x1OTNhZVx1OTY3M1x1NmQyNVx1NTg5Y1x1NjkwZVx1''@;'; put 'put ''NjljY1x1OGZmZFx1OTM5YVx1NzVkYlx1OTAxYVx1NTg1YVx1NjgwMlx1NjNiNFx1NjlmYlx1NGY0M1x1NmYyY1x1NjdkOFx1OGZiYlx1ODUyNlx1N2RiNFx1OTM1NFx1NjkzZlx1NmY3MFx1NTc2YVx1NThmN1x1NWIyY1x1N2QyY1x1NzIyYVx1NTQwYVx1OTFlM1x1OWRiNFx1NGVhZFx1NGY0''@;'; put 'put ''ZVx1NTA1Y1x1NTA3NVx1NTI0M1x1OGM5ZVx1NTQ0OFx1NTgyNFx1NWI5YVx1NWUxZFx1NWU5NVx1NWVhZFx1NWVmN1x1NWYxZlx1NjA4Y1x1NjJiNVx1NjMzYVx1NjNkMFx1NjhhZlx1NmM0MFx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2RlMFx1ODI0N1x1OGEwMlx1OGFlNlx1OGU0NFx1OTAxMyJd''@;'; put 'put ''LFsiOTM0MCIsIlx1OTBiOFx1OTEyZFx1OTFkOFx1OWYwZVx1NmNlNVx1NjQ1OFx1NjRlMlx1NjU3NVx1NmVmNFx1NzY4NFx1N2IxYlx1OTA2OVx1OTNkMVx1NmViYVx1NTRmMlx1NWZiOVx1NjRhNFx1OGY0ZFx1OGZlZFx1OTI0NFx1NTE3OFx1NTg2Ylx1NTkyOVx1NWM1NVx1NWU5N1x1NmRm''@;'; put 'put ''Ylx1N2U4Zlx1NzUxY1x1OGNiY1x1OGVlMlx1OTg1Ylx1NzBiOVx1NGYxZFx1NmJiZlx1NmZiMVx1NzUzMFx1OTZmYlx1NTE0ZVx1NTQxMFx1NTgzNVx1NTg1N1x1NTlhY1x1NWM2MFx1NWY5Mlx1NjU5N1x1Njc1Y1x1NmUyMVx1NzY3Ylx1ODNkZlx1OGNlZFx1OTAxNFx1OTBmZFx1OTM0ZFx1''@;'; put 'put ''NzgyNVx1NzgzYVx1NTJhYVx1NWVhNlx1NTcxZlx1NTk3NFx1NjAxMlx1NTAxMlx1NTE1YVx1NTFhYyJdLFsiOTM4MCIsIlx1NTFjZFx1NTIwMFx1NTUxMFx1NTg1NFx1NTg1OFx1NTk1N1x1NWI5NVx1NWNmNlx1NWQ4Ylx1NjBiY1x1NjI5NVx1NjQyZFx1Njc3MVx1Njg0M1x1NjhiY1x1Njhk''@;'; put 'put ''Zlx1NzZkN1x1NmRkOFx1NmU2Zlx1NmQ5Ylx1NzA2Zlx1NzFjOFx1NWY1M1x1NzVkOFx1Nzk3N1x1N2I0OVx1N2I1NFx1N2I1Mlx1N2NkNlx1N2Q3MVx1NTIzMFx1ODQ2M1x1ODU2OVx1ODVlNFx1OGEwZVx1OGIwNFx1OGM0Nlx1OGUwZlx1OTAwM1x1OTAwZlx1OTQxOVx1OTY3Nlx1OTgyZFx1''@;'; put 'put ''OWEzMFx1OTVkOFx1NTBjZFx1NTJkNVx1NTQwY1x1NTgwMlx1NWMwZVx1NjFhN1x1NjQ5ZVx1NmQxZVx1NzdiM1x1N2FlNVx1ODBmNFx1ODQwNFx1OTA1M1x1OTI4NVx1NWNlMFx1OWQwN1x1NTMzZlx1NWY5N1x1NWZiM1x1NmQ5Y1x1NzI3OVx1Nzc2M1x1NzliZlx1N2JlNFx1NmJkMlx1NzJl''@;'; put 'put ''Y1x1OGFhZFx1NjgwM1x1NmE2MVx1NTFmOFx1N2E4MVx1NjkzNFx1NWM0YVx1OWNmNlx1ODJlYlx1NWJjNVx1OTE0OVx1NzAxZVx1NTY3OFx1NWM2Zlx1NjBjN1x1NjU2Nlx1NmM4Y1x1OGM1YVx1OTA0MVx1OTgxM1x1NTQ1MVx1NjZjN1x1OTIwZFx1NTk0OFx1OTBhM1x1NTE4NVx1NGU0ZFx1''@;'; put 'put ''NTFlYVx1ODU5OVx1OGIwZVx1NzA1OFx1NjM3YVx1OTM0Ylx1Njk2Mlx1OTliNFx1N2UwNFx1NzU3N1x1NTM1N1x1Njk2MFx1OGVkZlx1OTZlM1x1NmM1ZFx1NGU4Y1x1NWMzY1x1NWYxMFx1OGZlOVx1NTMwMlx1OGNkMVx1ODA4OVx1ODY3OVx1NWVmZlx1NjVlNVx1NGU3M1x1NTE2NSJdLFsi''@;'; put 'put ''OTQ0MCIsIlx1NTk4Mlx1NWMzZlx1OTdlZVx1NGVmYlx1NTk4YVx1NWZjZFx1OGE4ZFx1NmZlMVx1NzliMFx1Nzk2Mlx1NWJlN1x1ODQ3MVx1NzMyYlx1NzFiMVx1NWU3NFx1NWZmNVx1NjM3Ylx1NjQ5YVx1NzFjM1x1N2M5OFx1NGU0M1x1NWVmY1x1NGU0Ylx1NTdkY1x1NTZhMlx1NjBhOVx1''@;'; put 'put ''NmZjM1x1N2QwZFx1ODBmZFx1ODEzM1x1ODFiZlx1OGZiMlx1ODk5N1x1ODZhNFx1NWRmNFx1NjI4YVx1NjRhZFx1ODk4N1x1Njc3N1x1NmNlMlx1NmQzZVx1NzQzNlx1NzgzNFx1NWE0Nlx1N2Y3NVx1ODJhZFx1OTlhY1x1NGZmM1x1NWVjM1x1NjJkZFx1NjM5Mlx1NjU1N1x1Njc2Zlx1NzZj''@;'; put 'put ''M1x1NzI0Y1x1ODBjY1x1ODBiYVx1OGYyOVx1OTE0ZFx1NTAwZFx1NTdmOVx1NWE5Mlx1Njg4NSJdLFsiOTQ4MCIsIlx1Njk3M1x1NzE2NFx1NzJmZFx1OGNiN1x1NThmMlx1OGNlMFx1OTY2YVx1OTAxOVx1ODc3Zlx1NzllNFx1NzdlN1x1ODQyOVx1NGYyZlx1NTI2NVx1NTM1YVx1NjJjZFx1''@;'; put 'put ''NjdjZlx1NmNjYVx1NzY3ZFx1N2I5NFx1N2M5NVx1ODIzNlx1ODU4NFx1OGZlYlx1NjZkZFx1NmYyMFx1NzIwNlx1N2UxYlx1ODNhYlx1OTljMVx1OWVhNlx1NTFmZFx1N2JiMVx1Nzg3Mlx1N2JiOFx1ODA4N1x1N2I0OFx1NmFlOFx1NWU2MVx1ODA4Y1x1NzU1MVx1NzU2MFx1NTE2Ylx1OTI2''@;'; put 'put ''Mlx1NmU4Y1x1NzY3YVx1OTE5N1x1OWFlYVx1NGYxMFx1N2Y3MFx1NjI5Y1x1N2I0Zlx1OTVhNVx1OWNlOVx1NTY3YVx1NTg1OVx1ODZlNFx1OTZiY1x1NGYzNFx1NTIyNFx1NTM0YVx1NTNjZFx1NTNkYlx1NWUwNlx1NjQyY1x1NjU5MVx1Njc3Zlx1NmMzZVx1NmM0ZVx1NzI0OFx1NzJhZlx1''@;'; put 'put ''NzNlZFx1NzU1NFx1N2U0MVx1ODIyY1x1ODVlOVx1OGNhOVx1N2JjNFx1OTFjNlx1NzE2OVx1OTgxMlx1OThlZlx1NjMzZFx1NjY2OVx1NzU2YVx1NzZlNFx1NzhkMFx1ODU0M1x1ODZlZVx1NTMyYVx1NTM1MVx1NTQyNlx1NTk4M1x1NWU4N1x1NWY3Y1x1NjBiMlx1NjI0OVx1NjI3OVx1NjJh''@;'; put 'put ''Ylx1NjU5MFx1NmJkNFx1NmNjY1x1NzViMlx1NzZhZVx1Nzg5MVx1NzlkOFx1N2RjYlx1N2Y3N1x1ODBhNVx1ODhhYlx1OGFiOVx1OGNiYlx1OTA3Zlx1OTc1ZVx1OThkYlx1NmEwYlx1N2MzOFx1NTA5OVx1NWMzZVx1NWZhZVx1Njc4N1x1NmJkOFx1NzQzNVx1NzcwOVx1N2Y4ZSJdLFsiOTU0''@;'; put 'put ''MCIsIlx1OWYzYlx1NjdjYVx1N2ExN1x1NTMzOVx1NzU4Ylx1OWFlZFx1NWY2Nlx1ODE5ZFx1ODNmMVx1ODA5OFx1NWYzY1x1NWZjNVx1NzU2Mlx1N2I0Nlx1OTAzY1x1Njg2N1x1NTllYlx1NWE5Ylx1N2QxMFx1NzY3ZVx1OGIyY1x1NGZmNVx1NWY2YVx1NmExOVx1NmMzN1x1NmYwMlx1NzRl''@;'; put 'put ''Mlx1Nzk2OFx1ODg2OFx1OGE1NVx1OGM3OVx1NWVkZlx1NjNjZlx1NzVjNVx1NzlkMlx1ODJkN1x1OTMyOFx1OTJmMlx1ODQ5Y1x1ODZlZFx1OWMyZFx1NTRjMVx1NWY2Y1x1NjU4Y1x1NmQ1Y1x1NzAxNVx1OGNhN1x1OGNkM1x1OTgzYlx1NjU0Zlx1NzRmNlx1NGUwZFx1NGVkOFx1NTdlMFx1''@;'; put 'put ''NTkyYlx1NWE2Nlx1NWJjY1x1NTFhOFx1NWUwM1x1NWU5Y1x1NjAxNlx1NjI3Nlx1NjU3NyJdLFsiOTU4MCIsIlx1NjVhN1x1NjY2ZVx1NmQ2ZVx1NzIzNlx1N2IyNlx1ODE1MFx1ODE5YVx1ODI5OVx1OGI1Y1x1OGNhMFx1OGNlNlx1OGQ3NFx1OTYxY1x1OTY0NFx1NGZhZVx1NjRhYlx1NmI2''@;'; put 'put ''Nlx1ODIxZVx1ODQ2MVx1ODU2YVx1OTBlOFx1NWMwMVx1Njk1M1x1OThhOFx1ODQ3YVx1ODU1N1x1NGYwZlx1NTI2Zlx1NWZhOVx1NWU0NVx1NjcwZFx1Nzk4Zlx1ODE3OVx1ODkwN1x1ODk4Nlx1NmRmNVx1NWYxN1x1NjI1NVx1NmNiOFx1NGVjZlx1NzI2OVx1OWI5Mlx1NTIwNlx1NTQzYlx1''@;'; put 'put ''NTY3NFx1NThiM1x1NjFhNFx1NjI2ZVx1NzExYVx1NTk2ZVx1N2M4OVx1N2NkZVx1N2QxYlx1OTZmMFx1NjU4N1x1ODA1ZVx1NGUxOVx1NGY3NVx1NTE3NVx1NTg0MFx1NWU2M1x1NWU3M1x1NWYwYVx1NjdjNFx1NGUyNlx1ODUzZFx1OTU4OVx1OTY1Ylx1N2M3M1x1OTgwMVx1NTBmYlx1NThj''@;'; put 'put ''MVx1NzY1Nlx1NzhhN1x1NTIyNVx1NzdhNVx1ODUxMVx1N2I4Nlx1NTA0Zlx1NTkwOVx1NzI0N1x1N2JjN1x1N2RlOFx1OGZiYVx1OGZkNFx1OTA0ZFx1NGZiZlx1NTJjOVx1NWEyOVx1NWYwMVx1OTdhZFx1NGZkZFx1ODIxN1x1OTJlYVx1NTcwM1x1NjM1NVx1NmI2OVx1NzUyYlx1ODhkY1x1''@;'; put 'put ''OGYxNFx1N2E0Mlx1NTJkZlx1NTg5M1x1NjE1NVx1NjIwYVx1NjZhZVx1NmJjZFx1N2MzZlx1ODNlOVx1NTAyM1x1NGZmOFx1NTMwNVx1NTQ0Nlx1NTgzMVx1NTk0OVx1NWI5ZFx1NWNmMFx1NWNlZlx1NWQyOVx1NWU5Nlx1NjJiMVx1NjM2N1x1NjUzZVx1NjViOVx1NjcwYiJdLFsiOTY0MCIs''@;'; put 'put ''Ilx1NmNkNVx1NmNlMVx1NzBmOVx1NzgzMlx1N2UyYlx1ODBkZVx1ODJiM1x1ODQwY1x1ODRlY1x1ODcwMlx1ODkxMlx1OGEyYVx1OGM0YVx1OTBhNlx1OTJkMlx1OThmZFx1OWNmM1x1OWQ2Y1x1NGU0Zlx1NGVhMVx1NTA4ZFx1NTI1Nlx1NTc0YVx1NTlhOFx1NWUzZFx1NWZkOFx1NWZkOVx1''@;'; put 'put ''NjIzZlx1NjZiNFx1NjcxYlx1NjdkMFx1NjhkMlx1NTE5Mlx1N2QyMVx1ODBhYVx1ODFhOFx1OGIwMFx1OGM4Y1x1OGNiZlx1OTI3ZVx1OTYzMlx1NTQyMFx1OTgyY1x1NTMxN1x1NTBkNVx1NTM1Y1x1NThhOFx1NjRiMlx1NjczNFx1NzI2N1x1Nzc2Nlx1N2E0Nlx1OTFlNlx1NTJjM1x1NmNh''@;'; put 'put ''MVx1NmI4Nlx1NTgwMFx1NWU0Y1x1NTk1NFx1NjcyY1x1N2ZmYlx1NTFlMVx1NzZjNiJdLFsiOTY4MCIsIlx1NjQ2OVx1NzhlOFx1OWI1NFx1OWViYlx1NTdjYlx1NTliOVx1NjYyN1x1Njc5YVx1NmJjZVx1NTRlOVx1NjlkOVx1NWU1NVx1ODE5Y1x1Njc5NVx1OWJhYVx1NjdmZVx1OWM1Mlx1''@;'; put 'put ''Njg1ZFx1NGVhNlx1NGZlM1x1NTNjOFx1NjJiOVx1NjcyYlx1NmNhYlx1OGZjNFx1NGZhZFx1N2U2ZFx1OWViZlx1NGUwN1x1NjE2Mlx1NmU4MFx1NmYyYlx1ODUxM1x1NTQ3M1x1NjcyYVx1OWI0NVx1NWRmM1x1N2I5NVx1NWNhY1x1NWJjNlx1ODcxY1x1NmU0YVx1ODRkMVx1N2ExNFx1ODEw''@;'; put 'put ''OFx1NTk5OVx1N2M4ZFx1NmMxMVx1NzcyMFx1NTJkOVx1NTkyMlx1NzEyMVx1NzI1Zlx1NzdkYlx1OTcyN1x1OWQ2MVx1NjkwYlx1NWE3Zlx1NWExOFx1NTFhNVx1NTQwZFx1NTQ3ZFx1NjYwZVx1NzZkZlx1OGZmN1x1OTI5OFx1OWNmNFx1NTllYVx1NzI1ZFx1NmVjNVx1NTE0ZFx1NjhjOVx1''@;'; put 'put ''N2RiZlx1N2RlY1x1OTc2Mlx1OWViYVx1NjQ3OFx1NmEyMVx1ODMwMlx1NTk4NFx1NWI1Zlx1NmJkYlx1NzMxYlx1NzZmMlx1N2RiMlx1ODAxN1x1ODQ5OVx1NTEzMlx1NjcyOFx1OWVkOVx1NzZlZVx1Njc2Mlx1NTJmZlx1OTkwNVx1NWMyNFx1NjIzYlx1N2M3ZVx1OGNiMFx1NTU0Zlx1NjBi''@;'; put 'put ''Nlx1N2QwYlx1OTU4MFx1NTMwMVx1NGU1Zlx1NTFiNlx1NTkxY1x1NzIzYVx1ODAzNlx1OTFjZVx1NWYyNVx1NzdlMlx1NTM4NFx1NWY3OVx1N2QwNFx1ODVhY1x1OGEzM1x1OGU4ZFx1OTc1Nlx1NjdmM1x1ODVhZVx1OTQ1M1x1NjEwOVx1NjEwOFx1NmNiOVx1NzY1MiJdLFsiOTc0MCIsIlx1''@;'; put 'put ''OGFlZFx1OGYzOFx1NTUyZlx1NGY1MVx1NTEyYVx1NTJjN1x1NTNjYlx1NWJhNVx1NWU3ZFx1NjBhMFx1NjE4Mlx1NjNkNlx1NjcwOVx1NjdkYVx1NmU2N1x1NmQ4Y1x1NzMzNlx1NzMzN1x1NzUzMVx1Nzk1MFx1ODhkNVx1OGE5OFx1OTA0YVx1OTA5MVx1OTBmNVx1OTZjNFx1ODc4ZFx1NTkx''@;'; put 'put ''NVx1NGU4OFx1NGY1OVx1NGUwZVx1OGE4OVx1OGYzZlx1OTgxMFx1NTBhZFx1NWU3Y1x1NTk5Nlx1NWJiOVx1NWViOFx1NjNkYVx1NjNmYVx1NjRjMVx1NjZkY1x1Njk0YVx1NjlkOFx1NmQwYlx1NmViNlx1NzE5NFx1NzUyOFx1N2FhZlx1N2Y4YVx1ODAwMFx1ODQ0OVx1ODRjOVx1ODk4MVx1''@;'; put 'put ''OGIyMVx1OGUwYVx1OTA2NVx1OTY3ZFx1OTkwYVx1NjE3ZVx1NjI5MVx1NmIzMiJdLFsiOTc4MCIsIlx1NmM4M1x1NmQ3NFx1N2ZjY1x1N2ZmY1x1NmRjMFx1N2Y4NVx1ODdiYVx1ODhmOFx1Njc2NVx1ODNiMVx1OTgzY1x1OTZmN1x1NmQxYlx1N2Q2MVx1ODQzZFx1OTE2YVx1NGU3MVx1NTM3''@;'; put 'put ''NVx1NWQ1MFx1NmIwNFx1NmZlYlx1ODVjZFx1ODYyZFx1ODlhN1x1NTIyOVx1NTQwZlx1NWM2NVx1Njc0ZVx1NjhhOFx1NzQwNlx1NzQ4M1x1NzVlMlx1ODhjZlx1ODhlMVx1OTFjY1x1OTZlMlx1OTY3OFx1NWY4Ylx1NzM4N1x1N2FjYlx1ODQ0ZVx1NjNhMFx1NzU2NVx1NTI4OVx1NmQ0MVx1''@;'; put 'put ''NmU5Y1x1NzQwOVx1NzU1OVx1Nzg2Ylx1N2M5Mlx1OTY4Nlx1N2FkY1x1OWY4ZFx1NGZiNlx1NjE2ZVx1NjVjNVx1ODY1Y1x1NGU4Nlx1NGVhZVx1NTBkYVx1NGUyMVx1NTFjY1x1NWJlZVx1NjU5OVx1Njg4MVx1NmRiY1x1NzMxZlx1NzY0Mlx1NzdhZFx1N2ExY1x1N2NlN1x1ODI2Zlx1OGFk''@;'; put 'put ''Mlx1OTA3Y1x1OTFjZlx1OTY3NVx1OTgxOFx1NTI5Ylx1N2RkMVx1NTAyYlx1NTM5OFx1Njc5N1x1NmRjYlx1NzFkMFx1NzQzM1x1ODFlOFx1OGYyYVx1OTZhM1x1OWM1N1x1OWU5Zlx1NzQ2MFx1NTg0MVx1NmQ5OVx1N2QyZlx1OTg1ZVx1NGVlNFx1NGYzNlx1NGY4Ylx1NTFiN1x1NTJiMVx1''@;'; put 'put ''NWRiYVx1NjAxY1x1NzNiMlx1NzkzY1x1ODJkM1x1OTIzNFx1OTZiN1x1OTZmNlx1OTcwYVx1OWU5N1x1OWY2Mlx1NjZhNlx1NmI3NFx1NTIxN1x1NTJhM1x1NzBjOFx1ODhjMlx1NWVjOVx1NjA0Ylx1NjE5MFx1NmYyM1x1NzE0OVx1N2MzZVx1N2RmNFx1ODA2ZiJdLFsiOTg0MCIsIlx1ODRl''@;'; put 'put ''ZVx1OTAyM1x1OTMyY1x1NTQ0Mlx1OWI2Zlx1NmFkM1x1NzA4OVx1OGNjMlx1OGRlZlx1OTczMlx1NTJiNFx1NWE0MVx1NWVjYVx1NWYwNFx1NjcxN1x1Njk3Y1x1Njk5NFx1NmQ2YVx1NmYwZlx1NzI2Mlx1NzJmY1x1N2JlZFx1ODAwMVx1ODA3ZVx1ODc0Ylx1OTBjZVx1NTE2ZFx1OWU5M1x1''@;'; put 'put ''Nzk4NFx1ODA4Ylx1OTMzMlx1OGFkNlx1NTAyZFx1NTQ4Y1x1OGE3MVx1NmI2YVx1OGNjNFx1ODEwN1x1NjBkMVx1NjdhMFx1OWRmMlx1NGU5OVx1NGU5OFx1OWMxMFx1OGE2Ylx1ODVjMVx1ODU2OFx1NjkwMFx1NmU3ZVx1Nzg5N1x1ODE1NSJdLFsiOTg5ZiIsIlx1NWYwY1x1NGUxMFx1NGUx''@;'; put 'put ''NVx1NGUyYVx1NGUzMVx1NGUzNlx1NGUzY1x1NGUzZlx1NGU0Mlx1NGU1Nlx1NGU1OFx1NGU4Mlx1NGU4NVx1OGM2Ylx1NGU4YVx1ODIxMlx1NWYwZFx1NGU4ZVx1NGU5ZVx1NGU5Zlx1NGVhMFx1NGVhMlx1NGViMFx1NGViM1x1NGViNlx1NGVjZVx1NGVjZFx1NGVjNFx1NGVjNlx1NGVjMlx1''@;'; put 'put ''NGVkN1x1NGVkZVx1NGVlZFx1NGVkZlx1NGVmN1x1NGYwOVx1NGY1YVx1NGYzMFx1NGY1Ylx1NGY1ZFx1NGY1N1x1NGY0N1x1NGY3Nlx1NGY4OFx1NGY4Zlx1NGY5OFx1NGY3Ylx1NGY2OVx1NGY3MFx1NGY5MVx1NGY2Zlx1NGY4Nlx1NGY5Nlx1NTExOFx1NGZkNFx1NGZkZlx1NGZjZVx1NGZk''@;'; put 'put ''OFx1NGZkYlx1NGZkMVx1NGZkYVx1NGZkMFx1NGZlNFx1NGZlNVx1NTAxYVx1NTAyOFx1NTAxNFx1NTAyYVx1NTAyNVx1NTAwNVx1NGYxY1x1NGZmNlx1NTAyMVx1NTAyOVx1NTAyY1x1NGZmZVx1NGZlZlx1NTAxMVx1NTAwNlx1NTA0M1x1NTA0N1x1NjcwM1x1NTA1NVx1NTA1MFx1NTA0OFx1''@;'; put 'put ''NTA1YVx1NTA1Nlx1NTA2Y1x1NTA3OFx1NTA4MFx1NTA5YVx1NTA4NVx1NTBiNFx1NTBiMiJdLFsiOTk0MCIsIlx1NTBjOVx1NTBjYVx1NTBiM1x1NTBjMlx1NTBkNlx1NTBkZVx1NTBlNVx1NTBlZFx1NTBlM1x1NTBlZVx1NTBmOVx1NTBmNVx1NTEwOVx1NTEwMVx1NTEwMlx1NTExNlx1NTEx''@;'; put 'put ''NVx1NTExNFx1NTExYVx1NTEyMVx1NTEzYVx1NTEzN1x1NTEzY1x1NTEzYlx1NTEzZlx1NTE0MFx1NTE1Mlx1NTE0Y1x1NTE1NFx1NTE2Mlx1N2FmOFx1NTE2OVx1NTE2YVx1NTE2ZVx1NTE4MFx1NTE4Mlx1NTZkOFx1NTE4Y1x1NTE4OVx1NTE4Zlx1NTE5MVx1NTE5M1x1NTE5NVx1NTE5Nlx1''@;'; put 'put ''NTFhNFx1NTFhNlx1NTFhMlx1NTFhOVx1NTFhYVx1NTFhYlx1NTFiM1x1NTFiMVx1NTFiMlx1NTFiMFx1NTFiNVx1NTFiZFx1NTFjNVx1NTFjOVx1NTFkYlx1NTFlMFx1ODY1NVx1NTFlOVx1NTFlZCJdLFsiOTk4MCIsIlx1NTFmMFx1NTFmNVx1NTFmZVx1NTIwNFx1NTIwYlx1NTIxNFx1NTIw''@;'; put 'put ''ZVx1NTIyN1x1NTIyYVx1NTIyZVx1NTIzM1x1NTIzOVx1NTI0Zlx1NTI0NFx1NTI0Ylx1NTI0Y1x1NTI1ZVx1NTI1NFx1NTI2YVx1NTI3NFx1NTI2OVx1NTI3M1x1NTI3Zlx1NTI3ZFx1NTI4ZFx1NTI5NFx1NTI5Mlx1NTI3MVx1NTI4OFx1NTI5MVx1OGZhOFx1OGZhN1x1NTJhY1x1NTJhZFx1''@;'; put 'put ''NTJiY1x1NTJiNVx1NTJjMVx1NTJjZFx1NTJkN1x1NTJkZVx1NTJlM1x1NTJlNlx1OThlZFx1NTJlMFx1NTJmM1x1NTJmNVx1NTJmOFx1NTJmOVx1NTMwNlx1NTMwOFx1NzUzOFx1NTMwZFx1NTMxMFx1NTMwZlx1NTMxNVx1NTMxYVx1NTMyM1x1NTMyZlx1NTMzMVx1NTMzM1x1NTMzOFx1NTM0''@;'; put 'put ''MFx1NTM0Nlx1NTM0NVx1NGUxN1x1NTM0OVx1NTM0ZFx1NTFkNlx1NTM1ZVx1NTM2OVx1NTM2ZVx1NTkxOFx1NTM3Ylx1NTM3N1x1NTM4Mlx1NTM5Nlx1NTNhMFx1NTNhNlx1NTNhNVx1NTNhZVx1NTNiMFx1NTNiNlx1NTNjM1x1N2MxMlx1OTZkOVx1NTNkZlx1NjZmY1x1NzFlZVx1NTNlZVx1''@;'; put 'put ''NTNlOFx1NTNlZFx1NTNmYVx1NTQwMVx1NTQzZFx1NTQ0MFx1NTQyY1x1NTQyZFx1NTQzY1x1NTQyZVx1NTQzNlx1NTQyOVx1NTQxZFx1NTQ0ZVx1NTQ4Zlx1NTQ3NVx1NTQ4ZVx1NTQ1Zlx1NTQ3MVx1NTQ3N1x1NTQ3MFx1NTQ5Mlx1NTQ3Ylx1NTQ4MFx1NTQ3Nlx1NTQ4NFx1NTQ5MFx1NTQ4''@;'; put 'put ''Nlx1NTRjN1x1NTRhMlx1NTRiOFx1NTRhNVx1NTRhY1x1NTRjNFx1NTRjOFx1NTRhOCJdLFsiOWE0MCIsIlx1NTRhYlx1NTRjMlx1NTRhNFx1NTRiZVx1NTRiY1x1NTRkOFx1NTRlNVx1NTRlNlx1NTUwZlx1NTUxNFx1NTRmZFx1NTRlZVx1NTRlZFx1NTRmYVx1NTRlMlx1NTUzOVx1NTU0MFx1''@;'; put 'put ''NTU2M1x1NTU0Y1x1NTUyZVx1NTU1Y1x1NTU0NVx1NTU1Nlx1NTU1N1x1NTUzOFx1NTUzM1x1NTU1ZFx1NTU5OVx1NTU4MFx1NTRhZlx1NTU4YVx1NTU5Zlx1NTU3Ylx1NTU3ZVx1NTU5OFx1NTU5ZVx1NTVhZVx1NTU3Y1x1NTU4M1x1NTVhOVx1NTU4N1x1NTVhOFx1NTVkYVx1NTVjNVx1NTVk''@;'; put 'put ''Zlx1NTVjNFx1NTVkY1x1NTVlNFx1NTVkNFx1NTYxNFx1NTVmN1x1NTYxNlx1NTVmZVx1NTVmZFx1NTYxYlx1NTVmOVx1NTY0ZVx1NTY1MFx1NzFkZlx1NTYzNFx1NTYzNlx1NTYzMlx1NTYzOCJdLFsiOWE4MCIsIlx1NTY2Ylx1NTY2NFx1NTYyZlx1NTY2Y1x1NTY2YVx1NTY4Nlx1NTY4MFx1''@;'; put 'put ''NTY4YVx1NTZhMFx1NTY5NFx1NTY4Zlx1NTZhNVx1NTZhZVx1NTZiNlx1NTZiNFx1NTZjMlx1NTZiY1x1NTZjMVx1NTZjM1x1NTZjMFx1NTZjOFx1NTZjZVx1NTZkMVx1NTZkM1x1NTZkN1x1NTZlZVx1NTZmOVx1NTcwMFx1NTZmZlx1NTcwNFx1NTcwOVx1NTcwOFx1NTcwYlx1NTcwZFx1NTcx''@;'; put 'put ''M1x1NTcxOFx1NTcxNlx1NTVjN1x1NTcxY1x1NTcyNlx1NTczN1x1NTczOFx1NTc0ZVx1NTczYlx1NTc0MFx1NTc0Zlx1NTc2OVx1NTdjMFx1NTc4OFx1NTc2MVx1NTc3Zlx1NTc4OVx1NTc5M1x1NTdhMFx1NTdiM1x1NTdhNFx1NTdhYVx1NTdiMFx1NTdjM1x1NTdjNlx1NTdkNFx1NTdkMlx1''@;'; put 'put ''NTdkM1x1NTgwYVx1NTdkNlx1NTdlM1x1NTgwYlx1NTgxOVx1NTgxZFx1NTg3Mlx1NTgyMVx1NTg2Mlx1NTg0Ylx1NTg3MFx1NmJjMFx1NTg1Mlx1NTgzZFx1NTg3OVx1NTg4NVx1NThiOVx1NTg5Zlx1NThhYlx1NThiYVx1NThkZVx1NThiYlx1NThiOFx1NThhZVx1NThjNVx1NThkM1x1NThk''@;'; put 'put ''MVx1NThkN1x1NThkOVx1NThkOFx1NThlNVx1NThkY1x1NThlNFx1NThkZlx1NThlZlx1NThmYVx1NThmOVx1NThmYlx1NThmY1x1NThmZFx1NTkwMlx1NTkwYVx1NTkxMFx1NTkxYlx1NjhhNlx1NTkyNVx1NTkyY1x1NTkyZFx1NTkzMlx1NTkzOFx1NTkzZVx1N2FkMlx1NTk1NVx1NTk1MFx1''@;'; put 'put ''NTk0ZVx1NTk1YVx1NTk1OFx1NTk2Mlx1NTk2MFx1NTk2N1x1NTk2Y1x1NTk2OSJdLFsiOWI0MCIsIlx1NTk3OFx1NTk4MVx1NTk5ZFx1NGY1ZVx1NGZhYlx1NTlhM1x1NTliMlx1NTljNlx1NTllOFx1NTlkY1x1NTk4ZFx1NTlkOVx1NTlkYVx1NWEyNVx1NWExZlx1NWExMVx1NWExY1x1NWEw''@;'; put 'put ''OVx1NWExYVx1NWE0MFx1NWE2Y1x1NWE0OVx1NWEzNVx1NWEzNlx1NWE2Mlx1NWE2YVx1NWE5YVx1NWFiY1x1NWFiZVx1NWFjYlx1NWFjMlx1NWFiZFx1NWFlM1x1NWFkN1x1NWFlNlx1NWFlOVx1NWFkNlx1NWFmYVx1NWFmYlx1NWIwY1x1NWIwYlx1NWIxNlx1NWIzMlx1NWFkMFx1NWIyYVx1''@;'; put 'put ''NWIzNlx1NWIzZVx1NWI0M1x1NWI0NVx1NWI0MFx1NWI1MVx1NWI1NVx1NWI1YVx1NWI1Ylx1NWI2NVx1NWI2OVx1NWI3MFx1NWI3M1x1NWI3NVx1NWI3OFx1NjU4OFx1NWI3YVx1NWI4MCJdLFsiOWI4MCIsIlx1NWI4M1x1NWJhNlx1NWJiOFx1NWJjM1x1NWJjN1x1NWJjOVx1NWJkNFx1NWJk''@;'; put 'put ''MFx1NWJlNFx1NWJlNlx1NWJlMlx1NWJkZVx1NWJlNVx1NWJlYlx1NWJmMFx1NWJmNlx1NWJmM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwZFx1NWMxM1x1NWMyMFx1NWMyMlx1NWMyOFx1NWMzOFx1NWMzOVx1NWM0MVx1NWM0Nlx1NWM0ZVx1NWM1M1x1NWM1MFx1NWM0Zlx1NWI3MVx1NWM2Y1x1''@;'; put 'put ''NWM2ZVx1NGU2Mlx1NWM3Nlx1NWM3OVx1NWM4Y1x1NWM5MVx1NWM5NFx1NTk5Ylx1NWNhYlx1NWNiYlx1NWNiNlx1NWNiY1x1NWNiN1x1NWNjNVx1NWNiZVx1NWNjN1x1NWNkOVx1NWNlOVx1NWNmZFx1NWNmYVx1NWNlZFx1NWQ4Y1x1NWNlYVx1NWQwYlx1NWQxNVx1NWQxN1x1NWQ1Y1x1NWQx''@;'; put 'put ''Zlx1NWQxYlx1NWQxMVx1NWQxNFx1NWQyMlx1NWQxYVx1NWQxOVx1NWQxOFx1NWQ0Y1x1NWQ1Mlx1NWQ0ZVx1NWQ0Ylx1NWQ2Y1x1NWQ3M1x1NWQ3Nlx1NWQ4N1x1NWQ4NFx1NWQ4Mlx1NWRhMlx1NWQ5ZFx1NWRhY1x1NWRhZVx1NWRiZFx1NWQ5MFx1NWRiN1x1NWRiY1x1NWRjOVx1NWRjZFx1''@;'; put 'put ''NWRkM1x1NWRkMlx1NWRkNlx1NWRkYlx1NWRlYlx1NWRmMlx1NWRmNVx1NWUwYlx1NWUxYVx1NWUxOVx1NWUxMVx1NWUxYlx1NWUzNlx1NWUzN1x1NWU0NFx1NWU0M1x1NWU0MFx1NWU0ZVx1NWU1N1x1NWU1NFx1NWU1Zlx1NWU2Mlx1NWU2NFx1NWU0N1x1NWU3NVx1NWU3Nlx1NWU3YVx1OWVi''@;'; put 'put ''Y1x1NWU3Zlx1NWVhMFx1NWVjMVx1NWVjMlx1NWVjOFx1NWVkMFx1NWVjZiJdLFsiOWM0MCIsIlx1NWVkNlx1NWVlM1x1NWVkZFx1NWVkYVx1NWVkYlx1NWVlMlx1NWVlMVx1NWVlOFx1NWVlOVx1NWVlY1x1NWVmMVx1NWVmM1x1NWVmMFx1NWVmNFx1NWVmOFx1NWVmZVx1NWYwM1x1NWYwOVx1''@;'; put 'put ''NWY1ZFx1NWY1Y1x1NWYwYlx1NWYxMVx1NWYxNlx1NWYyOVx1NWYyZFx1NWYzOFx1NWY0MVx1NWY0OFx1NWY0Y1x1NWY0ZVx1NWYyZlx1NWY1MVx1NWY1Nlx1NWY1N1x1NWY1OVx1NWY2MVx1NWY2ZFx1NWY3M1x1NWY3N1x1NWY4M1x1NWY4Mlx1NWY3Zlx1NWY4YVx1NWY4OFx1NWY5MVx1NWY4''@;'; put 'put ''N1x1NWY5ZVx1NWY5OVx1NWY5OFx1NWZhMFx1NWZhOFx1NWZhZFx1NWZiY1x1NWZkNlx1NWZmYlx1NWZlNFx1NWZmOFx1NWZmMVx1NWZkZFx1NjBiM1x1NWZmZlx1NjAyMVx1NjA2MCJdLFsiOWM4MCIsIlx1NjAxOVx1NjAxMFx1NjAyOVx1NjAwZVx1NjAzMVx1NjAxYlx1NjAxNVx1NjAyYlx1''@;'; put 'put ''NjAyNlx1NjAwZlx1NjAzYVx1NjA1YVx1NjA0MVx1NjA2YVx1NjA3N1x1NjA1Zlx1NjA0YVx1NjA0Nlx1NjA0ZFx1NjA2M1x1NjA0M1x1NjA2NFx1NjA0Mlx1NjA2Y1x1NjA2Ylx1NjA1OVx1NjA4MVx1NjA4ZFx1NjBlN1x1NjA4M1x1NjA5YVx1NjA4NFx1NjA5Ylx1NjA5Nlx1NjA5N1x1NjA5''@;'; put 'put ''Mlx1NjBhN1x1NjA4Ylx1NjBlMVx1NjBiOFx1NjBlMFx1NjBkM1x1NjBiNFx1NWZmMFx1NjBiZFx1NjBjNlx1NjBiNVx1NjBkOFx1NjE0ZFx1NjExNVx1NjEwNlx1NjBmNlx1NjBmN1x1NjEwMFx1NjBmNFx1NjBmYVx1NjEwM1x1NjEyMVx1NjBmYlx1NjBmMVx1NjEwZFx1NjEwZVx1NjE0N1x1''@;'; put 'put ''NjEzZVx1NjEyOFx1NjEyN1x1NjE0YVx1NjEzZlx1NjEzY1x1NjEyY1x1NjEzNFx1NjEzZFx1NjE0Mlx1NjE0NFx1NjE3M1x1NjE3N1x1NjE1OFx1NjE1OVx1NjE1YVx1NjE2Ylx1NjE3NFx1NjE2Zlx1NjE2NVx1NjE3MVx1NjE1Zlx1NjE1ZFx1NjE1M1x1NjE3NVx1NjE5OVx1NjE5Nlx1NjE4''@;'; put 'put ''N1x1NjFhY1x1NjE5NFx1NjE5YVx1NjE4YVx1NjE5MVx1NjFhYlx1NjFhZVx1NjFjY1x1NjFjYVx1NjFjOVx1NjFmN1x1NjFjOFx1NjFjM1x1NjFjNlx1NjFiYVx1NjFjYlx1N2Y3OVx1NjFjZFx1NjFlNlx1NjFlM1x1NjFmNlx1NjFmYVx1NjFmNFx1NjFmZlx1NjFmZFx1NjFmY1x1NjFmZVx1''@;'; put 'put ''NjIwMFx1NjIwOFx1NjIwOVx1NjIwZFx1NjIwY1x1NjIxNFx1NjIxYiJdLFsiOWQ0MCIsIlx1NjIxZVx1NjIyMVx1NjIyYVx1NjIyZVx1NjIzMFx1NjIzMlx1NjIzM1x1NjI0MVx1NjI0ZVx1NjI1ZVx1NjI2M1x1NjI1Ylx1NjI2MFx1NjI2OFx1NjI3Y1x1NjI4Mlx1NjI4OVx1NjI3ZVx1NjI5''@;'; put 'put ''Mlx1NjI5M1x1NjI5Nlx1NjJkNFx1NjI4M1x1NjI5NFx1NjJkN1x1NjJkMVx1NjJiYlx1NjJjZlx1NjJmZlx1NjJjNlx1NjRkNFx1NjJjOFx1NjJkY1x1NjJjY1x1NjJjYVx1NjJjMlx1NjJjN1x1NjI5Ylx1NjJjOVx1NjMwY1x1NjJlZVx1NjJmMVx1NjMyN1x1NjMwMlx1NjMwOFx1NjJlZlx1''@;'; put 'put ''NjJmNVx1NjM1MFx1NjMzZVx1NjM0ZFx1NjQxY1x1NjM0Zlx1NjM5Nlx1NjM4ZVx1NjM4MFx1NjNhYlx1NjM3Nlx1NjNhM1x1NjM4Zlx1NjM4OVx1NjM5Zlx1NjNiNVx1NjM2YiJdLFsiOWQ4MCIsIlx1NjM2OVx1NjNiZVx1NjNlOVx1NjNjMFx1NjNjNlx1NjNlM1x1NjNjOVx1NjNkMlx1NjNm''@;'; put 'put ''Nlx1NjNjNFx1NjQxNlx1NjQzNFx1NjQwNlx1NjQxM1x1NjQyNlx1NjQzNlx1NjUxZFx1NjQxN1x1NjQyOFx1NjQwZlx1NjQ2N1x1NjQ2Zlx1NjQ3Nlx1NjQ0ZVx1NjUyYVx1NjQ5NVx1NjQ5M1x1NjRhNVx1NjRhOVx1NjQ4OFx1NjRiY1x1NjRkYVx1NjRkMlx1NjRjNVx1NjRjN1x1NjRiYlx1''@;'; put 'put ''NjRkOFx1NjRjMlx1NjRmMVx1NjRlN1x1ODIwOVx1NjRlMFx1NjRlMVx1NjJhY1x1NjRlM1x1NjRlZlx1NjUyY1x1NjRmNlx1NjRmNFx1NjRmMlx1NjRmYVx1NjUwMFx1NjRmZFx1NjUxOFx1NjUxY1x1NjUwNVx1NjUyNFx1NjUyM1x1NjUyYlx1NjUzNFx1NjUzNVx1NjUzN1x1NjUzNlx1NjUz''@;'; put 'put ''OFx1NzU0Ylx1NjU0OFx1NjU1Nlx1NjU1NVx1NjU0ZFx1NjU1OFx1NjU1ZVx1NjU1ZFx1NjU3Mlx1NjU3OFx1NjU4Mlx1NjU4M1x1OGI4YVx1NjU5Ylx1NjU5Zlx1NjVhYlx1NjViN1x1NjVjM1x1NjVjNlx1NjVjMVx1NjVjNFx1NjVjY1x1NjVkMlx1NjVkYlx1NjVkOVx1NjVlMFx1NjVlMVx1''@;'; put 'put ''NjVmMVx1Njc3Mlx1NjYwYVx1NjYwM1x1NjVmYlx1Njc3M1x1NjYzNVx1NjYzNlx1NjYzNFx1NjYxY1x1NjY0Zlx1NjY0NFx1NjY0OVx1NjY0MVx1NjY1ZVx1NjY1ZFx1NjY2NFx1NjY2N1x1NjY2OFx1NjY1Zlx1NjY2Mlx1NjY3MFx1NjY4M1x1NjY4OFx1NjY4ZVx1NjY4OVx1NjY4NFx1NjY5''@;'; put 'put ''OFx1NjY5ZFx1NjZjMVx1NjZiOVx1NjZjOVx1NjZiZVx1NjZiYyJdLFsiOWU0MCIsIlx1NjZjNFx1NjZiOFx1NjZkNlx1NjZkYVx1NjZlMFx1NjYzZlx1NjZlNlx1NjZlOVx1NjZmMFx1NjZmNVx1NjZmN1x1NjcwZlx1NjcxNlx1NjcxZVx1NjcyNlx1NjcyN1x1OTczOFx1NjcyZVx1NjczZlx1''@;'; put 'put ''NjczNlx1Njc0MVx1NjczOFx1NjczN1x1Njc0Nlx1Njc1ZVx1Njc2MFx1Njc1OVx1Njc2M1x1Njc2NFx1Njc4OVx1Njc3MFx1NjdhOVx1Njc3Y1x1Njc2YVx1Njc4Y1x1Njc4Ylx1NjdhNlx1NjdhMVx1Njc4NVx1NjdiN1x1NjdlZlx1NjdiNFx1NjdlY1x1NjdiM1x1NjdlOVx1NjdiOFx1Njdl''@;'; put 'put ''NFx1NjdkZVx1NjdkZFx1NjdlMlx1NjdlZVx1NjdiOVx1NjdjZVx1NjdjNlx1NjdlN1x1NmE5Y1x1NjgxZVx1Njg0Nlx1NjgyOVx1Njg0MFx1Njg0ZFx1NjgzMlx1Njg0ZSJdLFsiOWU4MCIsIlx1NjhiM1x1NjgyYlx1Njg1OVx1Njg2M1x1Njg3N1x1Njg3Zlx1Njg5Zlx1Njg4Zlx1NjhhZFx1''@;'; put 'put ''Njg5NFx1Njg5ZFx1Njg5Ylx1Njg4M1x1NmFhZVx1NjhiOVx1Njg3NFx1NjhiNVx1NjhhMFx1NjhiYVx1NjkwZlx1Njg4ZFx1Njg3ZVx1NjkwMVx1NjhjYVx1NjkwOFx1NjhkOFx1NjkyMlx1NjkyNlx1NjhlMVx1NjkwY1x1NjhjZFx1NjhkNFx1NjhlN1x1NjhkNVx1NjkzNlx1NjkxMlx1Njkw''@;'; put 'put ''NFx1NjhkN1x1NjhlM1x1NjkyNVx1NjhmOVx1NjhlMFx1NjhlZlx1NjkyOFx1NjkyYVx1NjkxYVx1NjkyM1x1NjkyMVx1NjhjNlx1Njk3OVx1Njk3N1x1Njk1Y1x1Njk3OFx1Njk2Ylx1Njk1NFx1Njk3ZVx1Njk2ZVx1NjkzOVx1Njk3NFx1NjkzZFx1Njk1OVx1NjkzMFx1Njk2MVx1Njk1ZVx1''@;'; put 'put ''Njk1ZFx1Njk4MVx1Njk2YVx1NjliMlx1NjlhZVx1NjlkMFx1NjliZlx1NjljMVx1NjlkM1x1NjliZVx1NjljZVx1NWJlOFx1NjljYVx1NjlkZFx1NjliYlx1NjljM1x1NjlhN1x1NmEyZVx1Njk5MVx1NjlhMFx1Njk5Y1x1Njk5NVx1NjliNFx1NjlkZVx1NjllOFx1NmEwMlx1NmExYlx1Njlm''@;'; put 'put ''Zlx1NmIwYVx1NjlmOVx1NjlmMlx1NjllN1x1NmEwNVx1NjliMVx1NmExZVx1NjllZFx1NmExNFx1NjllYlx1NmEwYVx1NmExMlx1NmFjMVx1NmEyM1x1NmExM1x1NmE0NFx1NmEwY1x1NmE3Mlx1NmEzNlx1NmE3OFx1NmE0N1x1NmE2Mlx1NmE1OVx1NmE2Nlx1NmE0OFx1NmEzOFx1NmEyMlx1''@;'; put 'put ''NmE5MFx1NmE4ZFx1NmFhMFx1NmE4NFx1NmFhMlx1NmFhMyJdLFsiOWY0MCIsIlx1NmE5N1x1ODYxN1x1NmFiYlx1NmFjM1x1NmFjMlx1NmFiOFx1NmFiM1x1NmFhY1x1NmFkZVx1NmFkMVx1NmFkZlx1NmFhYVx1NmFkYVx1NmFlYVx1NmFmYlx1NmIwNVx1ODYxNlx1NmFmYVx1NmIxMlx1NmIx''@;'; put 'put ''Nlx1OWIzMVx1NmIxZlx1NmIzOFx1NmIzN1x1NzZkY1x1NmIzOVx1OThlZVx1NmI0N1x1NmI0M1x1NmI0OVx1NmI1MFx1NmI1OVx1NmI1NFx1NmI1Ylx1NmI1Zlx1NmI2MVx1NmI3OFx1NmI3OVx1NmI3Zlx1NmI4MFx1NmI4NFx1NmI4M1x1NmI4ZFx1NmI5OFx1NmI5NVx1NmI5ZVx1NmJhNFx1''@;'; put 'put ''NmJhYVx1NmJhYlx1NmJhZlx1NmJiMlx1NmJiMVx1NmJiM1x1NmJiN1x1NmJiY1x1NmJjNlx1NmJjYlx1NmJkM1x1NmJkZlx1NmJlY1x1NmJlYlx1NmJmM1x1NmJlZiJdLFsiOWY4MCIsIlx1OWViZVx1NmMwOFx1NmMxM1x1NmMxNFx1NmMxYlx1NmMyNFx1NmMyM1x1NmM1ZVx1NmM1NVx1NmM2''@;'; put 'put ''Mlx1NmM2YVx1NmM4Mlx1NmM4ZFx1NmM5YVx1NmM4MVx1NmM5Ylx1NmM3ZVx1NmM2OFx1NmM3M1x1NmM5Mlx1NmM5MFx1NmNjNFx1NmNmMVx1NmNkM1x1NmNiZFx1NmNkN1x1NmNjNVx1NmNkZFx1NmNhZVx1NmNiMVx1NmNiZVx1NmNiYVx1NmNkYlx1NmNlZlx1NmNkOVx1NmNlYVx1NmQxZlx1''@;'; put 'put ''ODg0ZFx1NmQzNlx1NmQyYlx1NmQzZFx1NmQzOFx1NmQxOVx1NmQzNVx1NmQzM1x1NmQxMlx1NmQwY1x1NmQ2M1x1NmQ5M1x1NmQ2NFx1NmQ1YVx1NmQ3OVx1NmQ1OVx1NmQ4ZVx1NmQ5NVx1NmZlNFx1NmQ4NVx1NmRmOVx1NmUxNVx1NmUwYVx1NmRiNVx1NmRjN1x1NmRlNlx1NmRiOFx1NmRj''@;'; put 'put ''Nlx1NmRlY1x1NmRkZVx1NmRjY1x1NmRlOFx1NmRkMlx1NmRjNVx1NmRmYVx1NmRkOVx1NmRlNFx1NmRkNVx1NmRlYVx1NmRlZVx1NmUyZFx1NmU2ZVx1NmUyZVx1NmUxOVx1NmU3Mlx1NmU1Zlx1NmUzZVx1NmUyM1x1NmU2Ylx1NmUyYlx1NmU3Nlx1NmU0ZFx1NmUxZlx1NmU0M1x1NmUzYVx1''@;'; put 'put ''NmU0ZVx1NmUyNFx1NmVmZlx1NmUxZFx1NmUzOFx1NmU4Mlx1NmVhYVx1NmU5OFx1NmVjOVx1NmViN1x1NmVkM1x1NmViZFx1NmVhZlx1NmVjNFx1NmViMlx1NmVkNFx1NmVkNVx1NmU4Zlx1NmVhNVx1NmVjMlx1NmU5Zlx1NmY0MVx1NmYxMVx1NzA0Y1x1NmVlY1x1NmVmOFx1NmVmZVx1NmYz''@;'; put 'put ''Zlx1NmVmMlx1NmYzMVx1NmVlZlx1NmYzMlx1NmVjYyJdLFsiZTA0MCIsIlx1NmYzZVx1NmYxM1x1NmVmN1x1NmY4Nlx1NmY3YVx1NmY3OFx1NmY4MVx1NmY4MFx1NmY2Zlx1NmY1Ylx1NmZmM1x1NmY2ZFx1NmY4Mlx1NmY3Y1x1NmY1OFx1NmY4ZVx1NmY5MVx1NmZjMlx1NmY2Nlx1NmZiM1x1''@;'; put 'put ''NmZhM1x1NmZhMVx1NmZhNFx1NmZiOVx1NmZjNlx1NmZhYVx1NmZkZlx1NmZkNVx1NmZlY1x1NmZkNFx1NmZkOFx1NmZmMVx1NmZlZVx1NmZkYlx1NzAwOVx1NzAwYlx1NmZmYVx1NzAxMVx1NzAwMVx1NzAwZlx1NmZmZVx1NzAxYlx1NzAxYVx1NmY3NFx1NzAxZFx1NzAxOFx1NzAxZlx1NzAz''@;'; put 'put ''MFx1NzAzZVx1NzAzMlx1NzA1MVx1NzA2M1x1NzA5OVx1NzA5Mlx1NzBhZlx1NzBmMVx1NzBhY1x1NzBiOFx1NzBiM1x1NzBhZVx1NzBkZlx1NzBjYlx1NzBkZCJdLFsiZTA4MCIsIlx1NzBkOVx1NzEwOVx1NzBmZFx1NzExY1x1NzExOVx1NzE2NVx1NzE1NVx1NzE4OFx1NzE2Nlx1NzE2Mlx1''@;'; put 'put ''NzE0Y1x1NzE1Nlx1NzE2Y1x1NzE4Zlx1NzFmYlx1NzE4NFx1NzE5NVx1NzFhOFx1NzFhY1x1NzFkN1x1NzFiOVx1NzFiZVx1NzFkMlx1NzFjOVx1NzFkNFx1NzFjZVx1NzFlMFx1NzFlY1x1NzFlN1x1NzFmNVx1NzFmY1x1NzFmOVx1NzFmZlx1NzIwZFx1NzIxMFx1NzIxYlx1NzIyOFx1NzIy''@;'; put 'put ''ZFx1NzIyY1x1NzIzMFx1NzIzMlx1NzIzYlx1NzIzY1x1NzIzZlx1NzI0MFx1NzI0Nlx1NzI0Ylx1NzI1OFx1NzI3NFx1NzI3ZVx1NzI4Mlx1NzI4MVx1NzI4N1x1NzI5Mlx1NzI5Nlx1NzJhMlx1NzJhN1x1NzJiOVx1NzJiMlx1NzJjM1x1NzJjNlx1NzJjNFx1NzJjZVx1NzJkMlx1NzJlMlx1''@;'; put 'put ''NzJlMFx1NzJlMVx1NzJmOVx1NzJmN1x1NTAwZlx1NzMxN1x1NzMwYVx1NzMxY1x1NzMxNlx1NzMxZFx1NzMzNFx1NzMyZlx1NzMyOVx1NzMyNVx1NzMzZVx1NzM0ZVx1NzM0Zlx1OWVkOFx1NzM1N1x1NzM2YVx1NzM2OFx1NzM3MFx1NzM3OFx1NzM3NVx1NzM3Ylx1NzM3YVx1NzNjOFx1NzNi''@;'; put 'put ''M1x1NzNjZVx1NzNiYlx1NzNjMFx1NzNlNVx1NzNlZVx1NzNkZVx1NzRhMlx1NzQwNVx1NzQ2Zlx1NzQyNVx1NzNmOFx1NzQzMlx1NzQzYVx1NzQ1NVx1NzQzZlx1NzQ1Zlx1NzQ1OVx1NzQ0MVx1NzQ1Y1x1NzQ2OVx1NzQ3MFx1NzQ2M1x1NzQ2YVx1NzQ3Nlx1NzQ3ZVx1NzQ4Ylx1NzQ5ZVx1''@;'; put 'put ''NzRhN1x1NzRjYVx1NzRjZlx1NzRkNFx1NzNmMSJdLFsiZTE0MCIsIlx1NzRlMFx1NzRlM1x1NzRlN1x1NzRlOVx1NzRlZVx1NzRmMlx1NzRmMFx1NzRmMVx1NzRmOFx1NzRmN1x1NzUwNFx1NzUwM1x1NzUwNVx1NzUwY1x1NzUwZVx1NzUwZFx1NzUxNVx1NzUxM1x1NzUxZVx1NzUyNlx1NzUy''@;'; put 'put ''Y1x1NzUzY1x1NzU0NFx1NzU0ZFx1NzU0YVx1NzU0OVx1NzU1Ylx1NzU0Nlx1NzU1YVx1NzU2OVx1NzU2NFx1NzU2N1x1NzU2Ylx1NzU2ZFx1NzU3OFx1NzU3Nlx1NzU4Nlx1NzU4N1x1NzU3NFx1NzU4YVx1NzU4OVx1NzU4Mlx1NzU5NFx1NzU5YVx1NzU5ZFx1NzVhNVx1NzVhM1x1NzVjMlx1''@;'; put 'put ''NzViM1x1NzVjM1x1NzViNVx1NzViZFx1NzViOFx1NzViY1x1NzViMVx1NzVjZFx1NzVjYVx1NzVkMlx1NzVkOVx1NzVlM1x1NzVkZVx1NzVmZVx1NzVmZiJdLFsiZTE4MCIsIlx1NzVmY1x1NzYwMVx1NzVmMFx1NzVmYVx1NzVmMlx1NzVmM1x1NzYwYlx1NzYwZFx1NzYwOVx1NzYxZlx1NzYy''@;'; put 'put ''N1x1NzYyMFx1NzYyMVx1NzYyMlx1NzYyNFx1NzYzNFx1NzYzMFx1NzYzYlx1NzY0N1x1NzY0OFx1NzY0Nlx1NzY1Y1x1NzY1OFx1NzY2MVx1NzY2Mlx1NzY2OFx1NzY2OVx1NzY2YVx1NzY2N1x1NzY2Y1x1NzY3MFx1NzY3Mlx1NzY3Nlx1NzY3OFx1NzY3Y1x1NzY4MFx1NzY4M1x1NzY4OFx1''@;'; put 'put ''NzY4Ylx1NzY4ZVx1NzY5Nlx1NzY5M1x1NzY5OVx1NzY5YVx1NzZiMFx1NzZiNFx1NzZiOFx1NzZiOVx1NzZiYVx1NzZjMlx1NzZjZFx1NzZkNlx1NzZkMlx1NzZkZVx1NzZlMVx1NzZlNVx1NzZlN1x1NzZlYVx1ODYyZlx1NzZmYlx1NzcwOFx1NzcwN1x1NzcwNFx1NzcyOVx1NzcyNFx1Nzcx''@;'; put 'put ''ZVx1NzcyNVx1NzcyNlx1NzcxYlx1NzczN1x1NzczOFx1Nzc0N1x1Nzc1YVx1Nzc2OFx1Nzc2Ylx1Nzc1Ylx1Nzc2NVx1Nzc3Zlx1Nzc3ZVx1Nzc3OVx1Nzc4ZVx1Nzc4Ylx1Nzc5MVx1NzdhMFx1Nzc5ZVx1NzdiMFx1NzdiNlx1NzdiOVx1NzdiZlx1NzdiY1x1NzdiZFx1NzdiYlx1NzdjN1x1''@;'; put 'put ''NzdjZFx1NzdkN1x1NzdkYVx1NzdkY1x1NzdlM1x1NzdlZVx1NzdmY1x1NzgwY1x1NzgxMlx1NzkyNlx1NzgyMFx1NzkyYVx1Nzg0NVx1Nzg4ZVx1Nzg3NFx1Nzg4Nlx1Nzg3Y1x1Nzg5YVx1Nzg4Y1x1NzhhM1x1NzhiNVx1NzhhYVx1NzhhZlx1NzhkMVx1NzhjNlx1NzhjYlx1NzhkNFx1Nzhi''@;'; put 'put ''ZVx1NzhiY1x1NzhjNVx1NzhjYVx1NzhlYyJdLFsiZTI0MCIsIlx1NzhlN1x1NzhkYVx1NzhmZFx1NzhmNFx1NzkwN1x1NzkxMlx1NzkxMVx1NzkxOVx1NzkyY1x1NzkyYlx1Nzk0MFx1Nzk2MFx1Nzk1N1x1Nzk1Zlx1Nzk1YVx1Nzk1NVx1Nzk1M1x1Nzk3YVx1Nzk3Zlx1Nzk4YVx1Nzk5ZFx1''@;'; put 'put ''NzlhN1x1OWY0Ylx1NzlhYVx1NzlhZVx1NzliM1x1NzliOVx1NzliYVx1NzljOVx1NzlkNVx1NzllN1x1NzllY1x1NzllMVx1NzllM1x1N2EwOFx1N2EwZFx1N2ExOFx1N2ExOVx1N2EyMFx1N2ExZlx1Nzk4MFx1N2EzMVx1N2EzYlx1N2EzZVx1N2EzN1x1N2E0M1x1N2E1N1x1N2E0OVx1N2E2''@;'; put 'put ''MVx1N2E2Mlx1N2E2OVx1OWY5ZFx1N2E3MFx1N2E3OVx1N2E3ZFx1N2E4OFx1N2E5N1x1N2E5NVx1N2E5OFx1N2E5Nlx1N2FhOVx1N2FjOFx1N2FiMCJdLFsiZTI4MCIsIlx1N2FiNlx1N2FjNVx1N2FjNFx1N2FiZlx1OTA4M1x1N2FjN1x1N2FjYVx1N2FjZFx1N2FjZlx1N2FkNVx1N2FkM1x1''@;'; put 'put ''N2FkOVx1N2FkYVx1N2FkZFx1N2FlMVx1N2FlMlx1N2FlNlx1N2FlZFx1N2FmMFx1N2IwMlx1N2IwZlx1N2IwYVx1N2IwNlx1N2IzM1x1N2IxOFx1N2IxOVx1N2IxZVx1N2IzNVx1N2IyOFx1N2IzNlx1N2I1MFx1N2I3YVx1N2IwNFx1N2I0ZFx1N2IwYlx1N2I0Y1x1N2I0NVx1N2I3NVx1N2I2''@;'; put 'put ''NVx1N2I3NFx1N2I2N1x1N2I3MFx1N2I3MVx1N2I2Y1x1N2I2ZVx1N2I5ZFx1N2I5OFx1N2I5Zlx1N2I4ZFx1N2I5Y1x1N2I5YVx1N2I4Ylx1N2I5Mlx1N2I4Zlx1N2I1ZFx1N2I5OVx1N2JjYlx1N2JjMVx1N2JjY1x1N2JjZlx1N2JiNFx1N2JjNlx1N2JkZFx1N2JlOVx1N2MxMVx1N2MxNFx1''@;'; put 'put ''N2JlNlx1N2JlNVx1N2M2MFx1N2MwMFx1N2MwN1x1N2MxM1x1N2JmM1x1N2JmN1x1N2MxN1x1N2MwZFx1N2JmNlx1N2MyM1x1N2MyN1x1N2MyYVx1N2MxZlx1N2MzN1x1N2MyYlx1N2MzZFx1N2M0Y1x1N2M0M1x1N2M1NFx1N2M0Zlx1N2M0MFx1N2M1MFx1N2M1OFx1N2M1Zlx1N2M2NFx1N2M1''@;'; put 'put ''Nlx1N2M2NVx1N2M2Y1x1N2M3NVx1N2M4M1x1N2M5MFx1N2NhNFx1N2NhZFx1N2NhMlx1N2NhYlx1N2NhMVx1N2NhOFx1N2NiM1x1N2NiMlx1N2NiMVx1N2NhZVx1N2NiOVx1N2NiZFx1N2NjMFx1N2NjNVx1N2NjMlx1N2NkOFx1N2NkMlx1N2NkY1x1N2NlMlx1OWIzYlx1N2NlZlx1N2NmMlx1''@;'; put 'put ''N2NmNFx1N2NmNlx1N2NmYVx1N2QwNiJdLFsiZTM0MCIsIlx1N2QwMlx1N2QxY1x1N2QxNVx1N2QwYVx1N2Q0NVx1N2Q0Ylx1N2QyZVx1N2QzMlx1N2QzZlx1N2QzNVx1N2Q0Nlx1N2Q3M1x1N2Q1Nlx1N2Q0ZVx1N2Q3Mlx1N2Q2OFx1N2Q2ZVx1N2Q0Zlx1N2Q2M1x1N2Q5M1x1N2Q4OVx1N2Q1''@;'; put 'put ''Ylx1N2Q4Zlx1N2Q3ZFx1N2Q5Ylx1N2RiYVx1N2RhZVx1N2RhM1x1N2RiNVx1N2RjN1x1N2RiZFx1N2RhYlx1N2UzZFx1N2RhMlx1N2RhZlx1N2RkY1x1N2RiOFx1N2Q5Zlx1N2RiMFx1N2RkOFx1N2RkZFx1N2RlNFx1N2RkZVx1N2RmYlx1N2RmMlx1N2RlMVx1N2UwNVx1N2UwYVx1N2UyM1x1''@;'; put 'put ''N2UyMVx1N2UxMlx1N2UzMVx1N2UxZlx1N2UwOVx1N2UwYlx1N2UyMlx1N2U0Nlx1N2U2Nlx1N2UzYlx1N2UzNVx1N2UzOVx1N2U0M1x1N2UzNyJdLFsiZTM4MCIsIlx1N2UzMlx1N2UzYVx1N2U2N1x1N2U1ZFx1N2U1Nlx1N2U1ZVx1N2U1OVx1N2U1YVx1N2U3OVx1N2U2YVx1N2U2OVx1N2U3''@;'; put 'put ''Y1x1N2U3Ylx1N2U4M1x1N2RkNVx1N2U3ZFx1OGZhZVx1N2U3Zlx1N2U4OFx1N2U4OVx1N2U4Y1x1N2U5Mlx1N2U5MFx1N2U5M1x1N2U5NFx1N2U5Nlx1N2U4ZVx1N2U5Ylx1N2U5Y1x1N2YzOFx1N2YzYVx1N2Y0NVx1N2Y0Y1x1N2Y0ZFx1N2Y0ZVx1N2Y1MFx1N2Y1MVx1N2Y1NVx1N2Y1NFx1''@;'; put 'put ''N2Y1OFx1N2Y1Zlx1N2Y2MFx1N2Y2OFx1N2Y2OVx1N2Y2N1x1N2Y3OFx1N2Y4Mlx1N2Y4Nlx1N2Y4M1x1N2Y4OFx1N2Y4N1x1N2Y4Y1x1N2Y5NFx1N2Y5ZVx1N2Y5ZFx1N2Y5YVx1N2ZhM1x1N2ZhZlx1N2ZiMlx1N2ZiOVx1N2ZhZVx1N2ZiNlx1N2ZiOFx1OGI3MVx1N2ZjNVx1N2ZjNlx1N2Zj''@;'; put 'put ''YVx1N2ZkNVx1N2ZkNFx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZmM1x1N2ZmOVx1OThkY1x1ODAwNlx1ODAwNFx1ODAwYlx1ODAxMlx1ODAxOFx1ODAxOVx1ODAxY1x1ODAyMVx1ODAyOFx1ODAzZlx1ODAzYlx1ODA0YVx1ODA0Nlx1ODA1Mlx1ODA1OFx1ODA1YVx1ODA1Zlx1ODA2Mlx1ODA2OFx1''@;'; put 'put ''ODA3M1x1ODA3Mlx1ODA3MFx1ODA3Nlx1ODA3OVx1ODA3ZFx1ODA3Zlx1ODA4NFx1ODA4Nlx1ODA4NVx1ODA5Ylx1ODA5M1x1ODA5YVx1ODBhZFx1NTE5MFx1ODBhY1x1ODBkYlx1ODBlNVx1ODBkOVx1ODBkZFx1ODBjNFx1ODBkYVx1ODBkNlx1ODEwOVx1ODBlZlx1ODBmMVx1ODExYlx1ODEy''@;'; put 'put ''OVx1ODEyM1x1ODEyZlx1ODE0YiJdLFsiZTQ0MCIsIlx1OTY4Ylx1ODE0Nlx1ODEzZVx1ODE1M1x1ODE1MVx1ODBmY1x1ODE3MVx1ODE2ZVx1ODE2NVx1ODE2Nlx1ODE3NFx1ODE4M1x1ODE4OFx1ODE4YVx1ODE4MFx1ODE4Mlx1ODFhMFx1ODE5NVx1ODFhNFx1ODFhM1x1ODE1Zlx1ODE5M1x1''@;'; put 'put ''ODFhOVx1ODFiMFx1ODFiNVx1ODFiZVx1ODFiOFx1ODFiZFx1ODFjMFx1ODFjMlx1ODFiYVx1ODFjOVx1ODFjZFx1ODFkMVx1ODFkOVx1ODFkOFx1ODFjOFx1ODFkYVx1ODFkZlx1ODFlMFx1ODFlN1x1ODFmYVx1ODFmYlx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNVx1ODIwN1x1ODIwYVx1ODIw''@;'; put 'put ''ZFx1ODIxMFx1ODIxNlx1ODIyOVx1ODIyYlx1ODIzOFx1ODIzM1x1ODI0MFx1ODI1OVx1ODI1OFx1ODI1ZFx1ODI1YVx1ODI1Zlx1ODI2NCJdLFsiZTQ4MCIsIlx1ODI2Mlx1ODI2OFx1ODI2YVx1ODI2Ylx1ODIyZVx1ODI3MVx1ODI3N1x1ODI3OFx1ODI3ZVx1ODI4ZFx1ODI5Mlx1ODJhYlx1''@;'; put 'put ''ODI5Zlx1ODJiYlx1ODJhY1x1ODJlMVx1ODJlM1x1ODJkZlx1ODJkMlx1ODJmNFx1ODJmM1x1ODJmYVx1ODM5M1x1ODMwM1x1ODJmYlx1ODJmOVx1ODJkZVx1ODMwNlx1ODJkY1x1ODMwOVx1ODJkOVx1ODMzNVx1ODMzNFx1ODMxNlx1ODMzMlx1ODMzMVx1ODM0MFx1ODMzOVx1ODM1MFx1ODM0''@;'; put 'put ''NVx1ODMyZlx1ODMyYlx1ODMxN1x1ODMxOFx1ODM4NVx1ODM5YVx1ODNhYVx1ODM5Zlx1ODNhMlx1ODM5Nlx1ODMyM1x1ODM4ZVx1ODM4N1x1ODM4YVx1ODM3Y1x1ODNiNVx1ODM3M1x1ODM3NVx1ODNhMFx1ODM4OVx1ODNhOFx1ODNmNFx1ODQxM1x1ODNlYlx1ODNjZVx1ODNmZFx1ODQwM1x1''@;'; put 'put ''ODNkOFx1ODQwYlx1ODNjMVx1ODNmN1x1ODQwN1x1ODNlMFx1ODNmMlx1ODQwZFx1ODQyMlx1ODQyMFx1ODNiZFx1ODQzOFx1ODUwNlx1ODNmYlx1ODQ2ZFx1ODQyYVx1ODQzY1x1ODU1YVx1ODQ4NFx1ODQ3N1x1ODQ2Ylx1ODRhZFx1ODQ2ZVx1ODQ4Mlx1ODQ2OVx1ODQ0Nlx1ODQyY1x1ODQ2''@;'; put 'put ''Zlx1ODQ3OVx1ODQzNVx1ODRjYVx1ODQ2Mlx1ODRiOVx1ODRiZlx1ODQ5Zlx1ODRkOVx1ODRjZFx1ODRiYlx1ODRkYVx1ODRkMFx1ODRjMVx1ODRjNlx1ODRkNlx1ODRhMVx1ODUyMVx1ODRmZlx1ODRmNFx1ODUxN1x1ODUxOFx1ODUyY1x1ODUxZlx1ODUxNVx1ODUxNFx1ODRmY1x1ODU0MFx1''@;'; put 'put ''ODU2M1x1ODU1OFx1ODU0OCJdLFsiZTU0MCIsIlx1ODU0MVx1ODYwMlx1ODU0Ylx1ODU1NVx1ODU4MFx1ODVhNFx1ODU4OFx1ODU5MVx1ODU4YVx1ODVhOFx1ODU2ZFx1ODU5NFx1ODU5Ylx1ODVlYVx1ODU4N1x1ODU5Y1x1ODU3N1x1ODU3ZVx1ODU5MFx1ODVjOVx1ODViYVx1ODVjZlx1ODVi''@;'; put 'put ''OVx1ODVkMFx1ODVkNVx1ODVkZFx1ODVlNVx1ODVkY1x1ODVmOVx1ODYwYVx1ODYxM1x1ODYwYlx1ODVmZVx1ODVmYVx1ODYwNlx1ODYyMlx1ODYxYVx1ODYzMFx1ODYzZlx1ODY0ZFx1NGU1NVx1ODY1NFx1ODY1Zlx1ODY2N1x1ODY3MVx1ODY5M1x1ODZhM1x1ODZhOVx1ODZhYVx1ODY4Ylx1''@;'; put 'put ''ODY4Y1x1ODZiNlx1ODZhZlx1ODZjNFx1ODZjNlx1ODZiMFx1ODZjOVx1ODgyM1x1ODZhYlx1ODZkNFx1ODZkZVx1ODZlOVx1ODZlYyJdLFsiZTU4MCIsIlx1ODZkZlx1ODZkYlx1ODZlZlx1ODcxMlx1ODcwNlx1ODcwOFx1ODcwMFx1ODcwM1x1ODZmYlx1ODcxMVx1ODcwOVx1ODcwZFx1ODZm''@;'; put 'put ''OVx1ODcwYVx1ODczNFx1ODczZlx1ODczN1x1ODczYlx1ODcyNVx1ODcyOVx1ODcxYVx1ODc2MFx1ODc1Zlx1ODc3OFx1ODc0Y1x1ODc0ZVx1ODc3NFx1ODc1N1x1ODc2OFx1ODc2ZVx1ODc1OVx1ODc1M1x1ODc2M1x1ODc2YVx1ODgwNVx1ODdhMlx1ODc5Zlx1ODc4Mlx1ODdhZlx1ODdjYlx1''@;'; put 'put ''ODdiZFx1ODdjMFx1ODdkMFx1OTZkNlx1ODdhYlx1ODdjNFx1ODdiM1x1ODdjN1x1ODdjNlx1ODdiYlx1ODdlZlx1ODdmMlx1ODdlMFx1ODgwZlx1ODgwZFx1ODdmZVx1ODdmNlx1ODdmN1x1ODgwZVx1ODdkMlx1ODgxMVx1ODgxNlx1ODgxNVx1ODgyMlx1ODgyMVx1ODgzMVx1ODgzNlx1ODgz''@;'; put 'put ''OVx1ODgyN1x1ODgzYlx1ODg0NFx1ODg0Mlx1ODg1Mlx1ODg1OVx1ODg1ZVx1ODg2Mlx1ODg2Ylx1ODg4MVx1ODg3ZVx1ODg5ZVx1ODg3NVx1ODg3ZFx1ODhiNVx1ODg3Mlx1ODg4Mlx1ODg5N1x1ODg5Mlx1ODhhZVx1ODg5OVx1ODhhMlx1ODg4ZFx1ODhhNFx1ODhiMFx1ODhiZlx1ODhiMVx1''@;'; put 'put ''ODhjM1x1ODhjNFx1ODhkNFx1ODhkOFx1ODhkOVx1ODhkZFx1ODhmOVx1ODkwMlx1ODhmY1x1ODhmNFx1ODhlOFx1ODhmMlx1ODkwNFx1ODkwY1x1ODkwYVx1ODkxM1x1ODk0M1x1ODkxZVx1ODkyNVx1ODkyYVx1ODkyYlx1ODk0MVx1ODk0NFx1ODkzYlx1ODkzNlx1ODkzOFx1ODk0Y1x1ODkx''@;'; put 'put ''ZFx1ODk2MFx1ODk1ZSJdLFsiZTY0MCIsIlx1ODk2Nlx1ODk2NFx1ODk2ZFx1ODk2YVx1ODk2Zlx1ODk3NFx1ODk3N1x1ODk3ZVx1ODk4M1x1ODk4OFx1ODk4YVx1ODk5M1x1ODk5OFx1ODlhMVx1ODlhOVx1ODlhNlx1ODlhY1x1ODlhZlx1ODliMlx1ODliYVx1ODliZFx1ODliZlx1ODljMFx1''@;'; put 'put ''ODlkYVx1ODlkY1x1ODlkZFx1ODllN1x1ODlmNFx1ODlmOFx1OGEwM1x1OGExNlx1OGExMFx1OGEwY1x1OGExYlx1OGExZFx1OGEyNVx1OGEzNlx1OGE0MVx1OGE1Ylx1OGE1Mlx1OGE0Nlx1OGE0OFx1OGE3Y1x1OGE2ZFx1OGE2Y1x1OGE2Mlx1OGE4NVx1OGE4Mlx1OGE4NFx1OGFhOFx1OGFh''@;'; put 'put ''MVx1OGE5MVx1OGFhNVx1OGFhNlx1OGE5YVx1OGFhM1x1OGFjNFx1OGFjZFx1OGFjMlx1OGFkYVx1OGFlYlx1OGFmM1x1OGFlNyJdLFsiZTY4MCIsIlx1OGFlNFx1OGFmMVx1OGIxNFx1OGFlMFx1OGFlMlx1OGFmN1x1OGFkZVx1OGFkYlx1OGIwY1x1OGIwN1x1OGIxYVx1OGFlMVx1OGIxNlx1''@;'; put 'put ''OGIxMFx1OGIxN1x1OGIyMFx1OGIzM1x1OTdhYlx1OGIyNlx1OGIyYlx1OGIzZVx1OGIyOFx1OGI0MVx1OGI0Y1x1OGI0Zlx1OGI0ZVx1OGI0OVx1OGI1Nlx1OGI1Ylx1OGI1YVx1OGI2Ylx1OGI1Zlx1OGI2Y1x1OGI2Zlx1OGI3NFx1OGI3ZFx1OGI4MFx1OGI4Y1x1OGI4ZVx1OGI5Mlx1OGI5''@;'; put 'put ''M1x1OGI5Nlx1OGI5OVx1OGI5YVx1OGMzYVx1OGM0MVx1OGMzZlx1OGM0OFx1OGM0Y1x1OGM0ZVx1OGM1MFx1OGM1NVx1OGM2Mlx1OGM2Y1x1OGM3OFx1OGM3YVx1OGM4Mlx1OGM4OVx1OGM4NVx1OGM4YVx1OGM4ZFx1OGM4ZVx1OGM5NFx1OGM3Y1x1OGM5OFx1NjIxZFx1OGNhZFx1OGNhYVx1''@;'; put 'put ''OGNiZFx1OGNiMlx1OGNiM1x1OGNhZVx1OGNiNlx1OGNjOFx1OGNjMVx1OGNlNFx1OGNlM1x1OGNkYVx1OGNmZFx1OGNmYVx1OGNmYlx1OGQwNFx1OGQwNVx1OGQwYVx1OGQwN1x1OGQwZlx1OGQwZFx1OGQxMFx1OWY0ZVx1OGQxM1x1OGNjZFx1OGQxNFx1OGQxNlx1OGQ2N1x1OGQ2ZFx1OGQ3''@;'; put 'put ''MVx1OGQ3M1x1OGQ4MVx1OGQ5OVx1OGRjMlx1OGRiZVx1OGRiYVx1OGRjZlx1OGRkYVx1OGRkNlx1OGRjY1x1OGRkYlx1OGRjYlx1OGRlYVx1OGRlYlx1OGRkZlx1OGRlM1x1OGRmY1x1OGUwOFx1OGUwOVx1OGRmZlx1OGUxZFx1OGUxZVx1OGUxMFx1OGUxZlx1OGU0Mlx1OGUzNVx1OGUzMFx1''@;'; put 'put ''OGUzNFx1OGU0YSJdLFsiZTc0MCIsIlx1OGU0N1x1OGU0OVx1OGU0Y1x1OGU1MFx1OGU0OFx1OGU1OVx1OGU2NFx1OGU2MFx1OGUyYVx1OGU2M1x1OGU1NVx1OGU3Nlx1OGU3Mlx1OGU3Y1x1OGU4MVx1OGU4N1x1OGU4NVx1OGU4NFx1OGU4Ylx1OGU4YVx1OGU5M1x1OGU5MVx1OGU5NFx1OGU5''@;'; put 'put ''OVx1OGVhYVx1OGVhMVx1OGVhY1x1OGViMFx1OGVjNlx1OGViMVx1OGViZVx1OGVjNVx1OGVjOFx1OGVjYlx1OGVkYlx1OGVlM1x1OGVmY1x1OGVmYlx1OGVlYlx1OGVmZVx1OGYwYVx1OGYwNVx1OGYxNVx1OGYxMlx1OGYxOVx1OGYxM1x1OGYxY1x1OGYxZlx1OGYxYlx1OGYwY1x1OGYyNlx1''@;'; put 'put ''OGYzM1x1OGYzYlx1OGYzOVx1OGY0NVx1OGY0Mlx1OGYzZVx1OGY0Y1x1OGY0OVx1OGY0Nlx1OGY0ZVx1OGY1N1x1OGY1YyJdLFsiZTc4MCIsIlx1OGY2Mlx1OGY2M1x1OGY2NFx1OGY5Y1x1OGY5Zlx1OGZhM1x1OGZhZFx1OGZhZlx1OGZiN1x1OGZkYVx1OGZlNVx1OGZlMlx1OGZlYVx1OGZl''@;'; put 'put ''Zlx1OTA4N1x1OGZmNFx1OTAwNVx1OGZmOVx1OGZmYVx1OTAxMVx1OTAxNVx1OTAyMVx1OTAwZFx1OTAxZVx1OTAxNlx1OTAwYlx1OTAyN1x1OTAzNlx1OTAzNVx1OTAzOVx1OGZmOFx1OTA0Zlx1OTA1MFx1OTA1MVx1OTA1Mlx1OTAwZVx1OTA0OVx1OTAzZVx1OTA1Nlx1OTA1OFx1OTA1ZVx1''@;'; put 'put ''OTA2OFx1OTA2Zlx1OTA3Nlx1OTZhOFx1OTA3Mlx1OTA4Mlx1OTA3ZFx1OTA4MVx1OTA4MFx1OTA4YVx1OTA4OVx1OTA4Zlx1OTBhOFx1OTBhZlx1OTBiMVx1OTBiNVx1OTBlMlx1OTBlNFx1NjI0OFx1OTBkYlx1OTEwMlx1OTExMlx1OTExOVx1OTEzMlx1OTEzMFx1OTE0YVx1OTE1Nlx1OTE1''@;'; put 'put ''OFx1OTE2M1x1OTE2NVx1OTE2OVx1OTE3M1x1OTE3Mlx1OTE4Ylx1OTE4OVx1OTE4Mlx1OTFhMlx1OTFhYlx1OTFhZlx1OTFhYVx1OTFiNVx1OTFiNFx1OTFiYVx1OTFjMFx1OTFjMVx1OTFjOVx1OTFjYlx1OTFkMFx1OTFkNlx1OTFkZlx1OTFlMVx1OTFkYlx1OTFmY1x1OTFmNVx1OTFmNlx1''@;'; put 'put ''OTIxZVx1OTFmZlx1OTIxNFx1OTIyY1x1OTIxNVx1OTIxMVx1OTI1ZVx1OTI1N1x1OTI0NVx1OTI0OVx1OTI2NFx1OTI0OFx1OTI5NVx1OTIzZlx1OTI0Ylx1OTI1MFx1OTI5Y1x1OTI5Nlx1OTI5M1x1OTI5Ylx1OTI1YVx1OTJjZlx1OTJiOVx1OTJiN1x1OTJlOVx1OTMwZlx1OTJmYVx1OTM0''@;'; put 'put ''NFx1OTMyZSJdLFsiZTg0MCIsIlx1OTMxOVx1OTMyMlx1OTMxYVx1OTMyM1x1OTMzYVx1OTMzNVx1OTMzYlx1OTM1Y1x1OTM2MFx1OTM3Y1x1OTM2ZVx1OTM1Nlx1OTNiMFx1OTNhY1x1OTNhZFx1OTM5NFx1OTNiOVx1OTNkNlx1OTNkN1x1OTNlOFx1OTNlNVx1OTNkOFx1OTNjM1x1OTNkZFx1''@;'; put 'put ''OTNkMFx1OTNjOFx1OTNlNFx1OTQxYVx1OTQxNFx1OTQxM1x1OTQwM1x1OTQwN1x1OTQxMFx1OTQzNlx1OTQyYlx1OTQzNVx1OTQyMVx1OTQzYVx1OTQ0MVx1OTQ1Mlx1OTQ0NFx1OTQ1Ylx1OTQ2MFx1OTQ2Mlx1OTQ1ZVx1OTQ2YVx1OTIyOVx1OTQ3MFx1OTQ3NVx1OTQ3N1x1OTQ3ZFx1OTQ1''@;'; put 'put ''YVx1OTQ3Y1x1OTQ3ZVx1OTQ4MVx1OTQ3Zlx1OTU4Mlx1OTU4N1x1OTU4YVx1OTU5NFx1OTU5Nlx1OTU5OFx1OTU5OSJdLFsiZTg4MCIsIlx1OTVhMFx1OTVhOFx1OTVhN1x1OTVhZFx1OTViY1x1OTViYlx1OTViOVx1OTViZVx1OTVjYVx1NmZmNlx1OTVjM1x1OTVjZFx1OTVjY1x1OTVkNVx1''@;'; put 'put ''OTVkNFx1OTVkNlx1OTVkY1x1OTVlMVx1OTVlNVx1OTVlMlx1OTYyMVx1OTYyOFx1OTYyZVx1OTYyZlx1OTY0Mlx1OTY0Y1x1OTY0Zlx1OTY0Ylx1OTY3N1x1OTY1Y1x1OTY1ZVx1OTY1ZFx1OTY1Zlx1OTY2Nlx1OTY3Mlx1OTY2Y1x1OTY4ZFx1OTY5OFx1OTY5NVx1OTY5N1x1OTZhYVx1OTZh''@;'; put 'put ''N1x1OTZiMVx1OTZiMlx1OTZiMFx1OTZiNFx1OTZiNlx1OTZiOFx1OTZiOVx1OTZjZVx1OTZjYlx1OTZjOVx1OTZjZFx1ODk0ZFx1OTZkY1x1OTcwZFx1OTZkNVx1OTZmOVx1OTcwNFx1OTcwNlx1OTcwOFx1OTcxM1x1OTcwZVx1OTcxMVx1OTcwZlx1OTcxNlx1OTcxOVx1OTcyNFx1OTcyYVx1''@;'; put 'put ''OTczMFx1OTczOVx1OTczZFx1OTczZVx1OTc0NFx1OTc0Nlx1OTc0OFx1OTc0Mlx1OTc0OVx1OTc1Y1x1OTc2MFx1OTc2NFx1OTc2Nlx1OTc2OFx1NTJkMlx1OTc2Ylx1OTc3MVx1OTc3OVx1OTc4NVx1OTc3Y1x1OTc4MVx1OTc3YVx1OTc4Nlx1OTc4Ylx1OTc4Zlx1OTc5MFx1OTc5Y1x1OTdh''@;'; put 'put ''OFx1OTdhNlx1OTdhM1x1OTdiM1x1OTdiNFx1OTdjM1x1OTdjNlx1OTdjOFx1OTdjYlx1OTdkY1x1OTdlZFx1OWY0Zlx1OTdmMlx1N2FkZlx1OTdmNlx1OTdmNVx1OTgwZlx1OTgwY1x1OTgzOFx1OTgyNFx1OTgyMVx1OTgzN1x1OTgzZFx1OTg0Nlx1OTg0Zlx1OTg0Ylx1OTg2Ylx1OTg2Zlx1''@;'; put 'put ''OTg3MCJdLFsiZTk0MCIsIlx1OTg3MVx1OTg3NFx1OTg3M1x1OThhYVx1OThhZlx1OThiMVx1OThiNlx1OThjNFx1OThjM1x1OThjNlx1OThlOVx1OThlYlx1OTkwM1x1OTkwOVx1OTkxMlx1OTkxNFx1OTkxOFx1OTkyMVx1OTkxZFx1OTkxZVx1OTkyNFx1OTkyMFx1OTkyY1x1OTkyZVx1OTkz''@;'; put 'put ''ZFx1OTkzZVx1OTk0Mlx1OTk0OVx1OTk0NVx1OTk1MFx1OTk0Ylx1OTk1MVx1OTk1Mlx1OTk0Y1x1OTk1NVx1OTk5N1x1OTk5OFx1OTlhNVx1OTlhZFx1OTlhZVx1OTliY1x1OTlkZlx1OTlkYlx1OTlkZFx1OTlkOFx1OTlkMVx1OTllZFx1OTllZVx1OTlmMVx1OTlmMlx1OTlmYlx1OTlmOFx1''@;'; put 'put ''OWEwMVx1OWEwZlx1OWEwNVx1OTllMlx1OWExOVx1OWEyYlx1OWEzN1x1OWE0NVx1OWE0Mlx1OWE0MFx1OWE0MyJdLFsiZTk4MCIsIlx1OWEzZVx1OWE1NVx1OWE0ZFx1OWE1Ylx1OWE1N1x1OWE1Zlx1OWE2Mlx1OWE2NVx1OWE2NFx1OWE2OVx1OWE2Ylx1OWE2YVx1OWFhZFx1OWFiMFx1OWFi''@;'; put 'put ''Y1x1OWFjMFx1OWFjZlx1OWFkMVx1OWFkM1x1OWFkNFx1OWFkZVx1OWFkZlx1OWFlMlx1OWFlM1x1OWFlNlx1OWFlZlx1OWFlYlx1OWFlZVx1OWFmNFx1OWFmMVx1OWFmN1x1OWFmYlx1OWIwNlx1OWIxOFx1OWIxYVx1OWIxZlx1OWIyMlx1OWIyM1x1OWIyNVx1OWIyN1x1OWIyOFx1OWIyOVx1''@;'; put 'put ''OWIyYVx1OWIyZVx1OWIyZlx1OWIzMlx1OWI0NFx1OWI0M1x1OWI0Zlx1OWI0ZFx1OWI0ZVx1OWI1MVx1OWI1OFx1OWI3NFx1OWI5M1x1OWI4M1x1OWI5MVx1OWI5Nlx1OWI5N1x1OWI5Zlx1OWJhMFx1OWJhOFx1OWJiNFx1OWJjMFx1OWJjYVx1OWJiOVx1OWJjNlx1OWJjZlx1OWJkMVx1OWJk''@;'; put 'put ''Mlx1OWJlM1x1OWJlMlx1OWJlNFx1OWJkNFx1OWJlMVx1OWMzYVx1OWJmMlx1OWJmMVx1OWJmMFx1OWMxNVx1OWMxNFx1OWMwOVx1OWMxM1x1OWMwY1x1OWMwNlx1OWMwOFx1OWMxMlx1OWMwYVx1OWMwNFx1OWMyZVx1OWMxYlx1OWMyNVx1OWMyNFx1OWMyMVx1OWMzMFx1OWM0N1x1OWMzMlx1''@;'; put 'put ''OWM0Nlx1OWMzZVx1OWM1YVx1OWM2MFx1OWM2N1x1OWM3Nlx1OWM3OFx1OWNlN1x1OWNlY1x1OWNmMFx1OWQwOVx1OWQwOFx1OWNlYlx1OWQwM1x1OWQwNlx1OWQyYVx1OWQyNlx1OWRhZlx1OWQyM1x1OWQxZlx1OWQ0NFx1OWQxNVx1OWQxMlx1OWQ0MVx1OWQzZlx1OWQzZVx1OWQ0Nlx1OWQ0''@;'; put 'put ''OCJdLFsiZWE0MCIsIlx1OWQ1ZFx1OWQ1ZVx1OWQ2NFx1OWQ1MVx1OWQ1MFx1OWQ1OVx1OWQ3Mlx1OWQ4OVx1OWQ4N1x1OWRhYlx1OWQ2Zlx1OWQ3YVx1OWQ5YVx1OWRhNFx1OWRhOVx1OWRiMlx1OWRjNFx1OWRjMVx1OWRiYlx1OWRiOFx1OWRiYVx1OWRjNlx1OWRjZlx1OWRjMlx1OWRkOVx1''@;'; put 'put ''OWRkM1x1OWRmOFx1OWRlNlx1OWRlZFx1OWRlZlx1OWRmZFx1OWUxYVx1OWUxYlx1OWUxZVx1OWU3NVx1OWU3OVx1OWU3ZFx1OWU4MVx1OWU4OFx1OWU4Ylx1OWU4Y1x1OWU5Mlx1OWU5NVx1OWU5MVx1OWU5ZFx1OWVhNVx1OWVhOVx1OWViOFx1OWVhYVx1OWVhZFx1OTc2MVx1OWVjY1x1OWVj''@;'; put 'put ''ZVx1OWVjZlx1OWVkMFx1OWVkNFx1OWVkY1x1OWVkZVx1OWVkZFx1OWVlMFx1OWVlNVx1OWVlOFx1OWVlZiJdLFsiZWE4MCIsIlx1OWVmNFx1OWVmNlx1OWVmN1x1OWVmOVx1OWVmYlx1OWVmY1x1OWVmZFx1OWYwN1x1OWYwOFx1NzZiN1x1OWYxNVx1OWYyMVx1OWYyY1x1OWYzZVx1OWY0YVx1''@;'; put 'put ''OWY1Mlx1OWY1NFx1OWY2M1x1OWY1Zlx1OWY2MFx1OWY2MVx1OWY2Nlx1OWY2N1x1OWY2Y1x1OWY2YVx1OWY3N1x1OWY3Mlx1OWY3Nlx1OWY5NVx1OWY5Y1x1OWZhMFx1NTgyZlx1NjljN1x1OTA1OVx1NzQ2NFx1NTFkY1x1NzE5OSJdLFsiZWQ0MCIsIlx1N2U4YVx1ODkxY1x1OTM0OFx1OTI4''@;'; put 'put ''OFx1ODRkY1x1NGZjOVx1NzBiYlx1NjYzMVx1NjhjOFx1OTJmOVx1NjZmYlx1NWY0NVx1NGUyOFx1NGVlMVx1NGVmY1x1NGYwMFx1NGYwM1x1NGYzOVx1NGY1Nlx1NGY5Mlx1NGY4YVx1NGY5YVx1NGY5NFx1NGZjZFx1NTA0MFx1NTAyMlx1NGZmZlx1NTAxZVx1NTA0Nlx1NTA3MFx1NTA0Mlx1''@;'; put 'put ''NTA5NFx1NTBmNFx1NTBkOFx1NTE0YVx1NTE2NFx1NTE5ZFx1NTFiZVx1NTFlY1x1NTIxNVx1NTI5Y1x1NTJhNlx1NTJjMFx1NTJkYlx1NTMwMFx1NTMwN1x1NTMyNFx1NTM3Mlx1NTM5M1x1NTNiMlx1NTNkZFx1ZmEwZVx1NTQ5Y1x1NTQ4YVx1NTRhOVx1NTRmZlx1NTU4Nlx1NTc1OVx1NTc2''@;'; put 'put ''NVx1NTdhY1x1NTdjOFx1NTdjN1x1ZmEwZiJdLFsiZWQ4MCIsIlx1ZmExMFx1NTg5ZVx1NThiMlx1NTkwYlx1NTk1M1x1NTk1Ylx1NTk1ZFx1NTk2M1x1NTlhNFx1NTliYVx1NWI1Nlx1NWJjMFx1NzUyZlx1NWJkOFx1NWJlY1x1NWMxZVx1NWNhNlx1NWNiYVx1NWNmNVx1NWQyN1x1NWQ1M1x1''@;'; put 'put ''ZmExMVx1NWQ0Mlx1NWQ2ZFx1NWRiOFx1NWRiOVx1NWRkMFx1NWYyMVx1NWYzNFx1NWY2N1x1NWZiN1x1NWZkZVx1NjA1ZFx1NjA4NVx1NjA4YVx1NjBkZVx1NjBkNVx1NjEyMFx1NjBmMlx1NjExMVx1NjEzN1x1NjEzMFx1NjE5OFx1NjIxM1x1NjJhNlx1NjNmNVx1NjQ2MFx1NjQ5ZFx1NjRj''@;'; put 'put ''ZVx1NjU0ZVx1NjYwMFx1NjYxNVx1NjYzYlx1NjYwOVx1NjYyZVx1NjYxZVx1NjYyNFx1NjY2NVx1NjY1N1x1NjY1OVx1ZmExMlx1NjY3M1x1NjY5OVx1NjZhMFx1NjZiMlx1NjZiZlx1NjZmYVx1NjcwZVx1ZjkyOVx1Njc2Nlx1NjdiYlx1Njg1Mlx1NjdjMFx1NjgwMVx1Njg0NFx1NjhjZlx1''@;'; put 'put ''ZmExM1x1Njk2OFx1ZmExNFx1Njk5OFx1NjllMlx1NmEzMFx1NmE2Ylx1NmE0Nlx1NmE3M1x1NmE3ZVx1NmFlMlx1NmFlNFx1NmJkNlx1NmMzZlx1NmM1Y1x1NmM4Nlx1NmM2Zlx1NmNkYVx1NmQwNFx1NmQ4N1x1NmQ2Zlx1NmQ5Nlx1NmRhY1x1NmRjZlx1NmRmOFx1NmRmMlx1NmRmY1x1NmUz''@;'; put 'put ''OVx1NmU1Y1x1NmUyN1x1NmUzY1x1NmViZlx1NmY4OFx1NmZiNVx1NmZmNVx1NzAwNVx1NzAwN1x1NzAyOFx1NzA4NVx1NzBhYlx1NzEwZlx1NzEwNFx1NzE1Y1x1NzE0Nlx1NzE0N1x1ZmExNVx1NzFjMVx1NzFmZVx1NzJiMSJdLFsiZWU0MCIsIlx1NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1''@;'; put 'put ''NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQyYVx1NzQyOVx1NzQyZVx1NzQ2Mlx1NzQ4OVx1NzQ5Zlx1NzUwMVx1NzU2Zlx1NzY4Mlx1NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1Nzc0Nlx1NTJhZlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3''@;'; put 'put ''YVx1NzkzMFx1ZmExOFx1ZmExOVx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1N2FlN1x1ZmExY1x1N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0OFx1N2Q1Y1x1N2RiN1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1ZmExZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1''@;'; put 'put ''ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OSJdLFsiZWU4MCIsIlx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1ZmEyMVx1ODgwN1x1ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1OGFhN1x1OGFiZVx1OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1OGNmMFx1OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEy''@;'; put 'put ''M1x1OGVjZlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYVx1OTFkN1x1OTFkZVx1OTFlZFx1OTFlZVx1OTFlNFx1OTFlNVx1OTIwNlx1OTIxMFx1OTIwYVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJhN1x1''@;'; put 'put ''OTI3N1x1OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJlMFx1OTJkM1x1OTMyNVx1OTMyMVx1OTJmYlx1ZmEyOFx1OTMxZVx1OTJmZlx1OTMxZFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1OTNmOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5''@;'; put 'put ''Mlx1ZjlkY1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1OTc0Zlx1OTc1MVx1OTc1NVx1OTg1N1x1OTg2NVx1ZmEyYVx1ZmEyYlx1OTkyN1x1ZmEyY1x1OTk5ZVx1OWE0ZVx1OWFkOVx1OWFkY1x1OWI3NVx1OWI3Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1''@;'; put 'put ''OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMSJdLFsiZWVlZiIsIlx1MjE3MCIsOSwiXHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyIl0sWyJmMDQwIiwiXHVlMDAwIiw2Ml0sWyJmMDgwIiwiXHVlMDNmIiwxMjRdLFsiZjE0MCIsIlx1ZTBiYyIsNjJdLFsiZjE4MCIsIlx1ZTBmYiIsMTI0XSxb''@;'; put 'put ''ImYyNDAiLCJcdWUxNzgiLDYyXSxbImYyODAiLCJcdWUxYjciLDEyNF0sWyJmMzQwIiwiXHVlMjM0Iiw2Ml0sWyJmMzgwIiwiXHVlMjczIiwxMjRdLFsiZjQ0MCIsIlx1ZTJmMCIsNjJdLFsiZjQ4MCIsIlx1ZTMyZiIsMTI0XSxbImY1NDAiLCJcdWUzYWMiLDYyXSxbImY1ODAiLCJcdWUzZWIi''@;'; put 'put ''LDEyNF0sWyJmNjQwIiwiXHVlNDY4Iiw2Ml0sWyJmNjgwIiwiXHVlNGE3IiwxMjRdLFsiZjc0MCIsIlx1ZTUyNCIsNjJdLFsiZjc4MCIsIlx1ZTU2MyIsMTI0XSxbImY4NDAiLCJcdWU1ZTAiLDYyXSxbImY4ODAiLCJcdWU2MWYiLDEyNF0sWyJmOTQwIiwiXHVlNjljIl0sWyJmYTQwIiwiXHUy''@;'; put 'put ''MTcwIiw5LCJcdTIxNjAiLDksIlx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMlx1MzIzMVx1MjExNlx1MjEyMVx1MjIzNVx1N2U4YVx1ODkxY1x1OTM0OFx1OTI4OFx1ODRkY1x1NGZjOVx1NzBiYlx1NjYzMVx1NjhjOFx1OTJmOVx1NjZmYlx1NWY0NVx1NGUyOFx1NGVlMVx1NGVmY1x1NGYwMFx1''@;'; put 'put ''NGYwM1x1NGYzOVx1NGY1Nlx1NGY5Mlx1NGY4YVx1NGY5YVx1NGY5NFx1NGZjZFx1NTA0MFx1NTAyMlx1NGZmZlx1NTAxZVx1NTA0Nlx1NTA3MFx1NTA0Mlx1NTA5NFx1NTBmNFx1NTBkOFx1NTE0YSJdLFsiZmE4MCIsIlx1NTE2NFx1NTE5ZFx1NTFiZVx1NTFlY1x1NTIxNVx1NTI5Y1x1NTJh''@;'; put 'put ''Nlx1NTJjMFx1NTJkYlx1NTMwMFx1NTMwN1x1NTMyNFx1NTM3Mlx1NTM5M1x1NTNiMlx1NTNkZFx1ZmEwZVx1NTQ5Y1x1NTQ4YVx1NTRhOVx1NTRmZlx1NTU4Nlx1NTc1OVx1NTc2NVx1NTdhY1x1NTdjOFx1NTdjN1x1ZmEwZlx1ZmExMFx1NTg5ZVx1NThiMlx1NTkwYlx1NTk1M1x1NTk1Ylx1''@;'; put 'put ''NTk1ZFx1NTk2M1x1NTlhNFx1NTliYVx1NWI1Nlx1NWJjMFx1NzUyZlx1NWJkOFx1NWJlY1x1NWMxZVx1NWNhNlx1NWNiYVx1NWNmNVx1NWQyN1x1NWQ1M1x1ZmExMVx1NWQ0Mlx1NWQ2ZFx1NWRiOFx1NWRiOVx1NWRkMFx1NWYyMVx1NWYzNFx1NWY2N1x1NWZiN1x1NWZkZVx1NjA1ZFx1NjA4''@;'; put 'put ''NVx1NjA4YVx1NjBkZVx1NjBkNVx1NjEyMFx1NjBmMlx1NjExMVx1NjEzN1x1NjEzMFx1NjE5OFx1NjIxM1x1NjJhNlx1NjNmNVx1NjQ2MFx1NjQ5ZFx1NjRjZVx1NjU0ZVx1NjYwMFx1NjYxNVx1NjYzYlx1NjYwOVx1NjYyZVx1NjYxZVx1NjYyNFx1NjY2NVx1NjY1N1x1NjY1OVx1ZmExMlx1''@;'; put 'put ''NjY3M1x1NjY5OVx1NjZhMFx1NjZiMlx1NjZiZlx1NjZmYVx1NjcwZVx1ZjkyOVx1Njc2Nlx1NjdiYlx1Njg1Mlx1NjdjMFx1NjgwMVx1Njg0NFx1NjhjZlx1ZmExM1x1Njk2OFx1ZmExNFx1Njk5OFx1NjllMlx1NmEzMFx1NmE2Ylx1NmE0Nlx1NmE3M1x1NmE3ZVx1NmFlMlx1NmFlNFx1NmJk''@;'; put 'put ''Nlx1NmMzZlx1NmM1Y1x1NmM4Nlx1NmM2Zlx1NmNkYVx1NmQwNFx1NmQ4N1x1NmQ2ZiJdLFsiZmI0MCIsIlx1NmQ5Nlx1NmRhY1x1NmRjZlx1NmRmOFx1NmRmMlx1NmRmY1x1NmUzOVx1NmU1Y1x1NmUyN1x1NmUzY1x1NmViZlx1NmY4OFx1NmZiNVx1NmZmNVx1NzAwNVx1NzAwN1x1NzAyOFx1''@;'; put 'put ''NzA4NVx1NzBhYlx1NzEwZlx1NzEwNFx1NzE1Y1x1NzE0Nlx1NzE0N1x1ZmExNVx1NzFjMVx1NzFmZVx1NzJiMVx1NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQyYVx1NzQyOVx1NzQyZVx1NzQ2Mlx1NzQ4''@;'; put 'put ''OVx1NzQ5Zlx1NzUwMVx1NzU2Zlx1NzY4Mlx1NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1Nzc0Nlx1NTJhZlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3YVx1NzkzMFx1ZmExOFx1ZmExOSJdLFsiZmI4MCIsIlx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1N2FlN1x1ZmExY1x1''@;'; put 'put ''N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0OFx1N2Q1Y1x1N2RiN1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1ZmExZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OVx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1ZmEyMVx1ODgwN1x1ODhm''@;'; put 'put ''NVx1OGExMlx1OGEzN1x1OGE3OVx1OGFhN1x1OGFiZVx1OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1OGNmMFx1OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEyM1x1OGVjZlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYVx1OTFkN1x1OTFkZVx1OTFlZFx1''@;'; put 'put ''OTFlZVx1OTFlNFx1OTFlNVx1OTIwNlx1OTIxMFx1OTIwYVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJhN1x1OTI3N1x1OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJlMFx1OTJkM1x1OTMyNVx1OTMyMVx1OTJm''@;'; put 'put ''Ylx1ZmEyOFx1OTMxZVx1OTJmZlx1OTMxZFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1OTNmOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1ZjlkY1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1OTc0Zlx1OTc1MVx1OTc1NVx1OTg1N1x1''@;'; put 'put ''OTg2NVx1ZmEyYVx1ZmEyYlx1OTkyN1x1ZmEyY1x1OTk5ZVx1OWE0ZVx1OWFkOSJdLFsiZmM0MCIsIlx1OWFkY1x1OWI3NVx1OWI3Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMSJdXScpfX0sZmU9PntmZShmZS5zPTc1MDI4KX1dKTs='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=polyfills.2b960f1ecaf17f8a-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s0NjFdLHsyNDA1MChjLGYsdCl7InVzZSBzdHJpY3QiO3QoMTg4ODMpLHQoNTQ5NDApLHQoMzkyNzEpLHQoNTI0NDQpLHQoMjYyMDMpLHQoMTU2MjYpLHQo''@;'; put 'put ''ODgwMjUpLHQoNTY0NDIpLHQoMzI4OTkpLHQoNjYzNzQpLHQoNDI0NiksdCgyMjkxMyksdCgxMDc0MyksdCg2NTg0NiksdCg5MzUzKSx0KDk2OTM1KSx0KDkyNTY4KTt2YXIgZHQ9dCg4MzgzOCk7d2luZG93Lmdsb2JhbD13aW5kb3csd2luZG93Lmdsb2JhbC5CdWZmZXI9d2luZG93Lmdsb2Jh''@;'; put 'put ''bC5CdWZmZXJ8fGR0LkJ1ZmZlcix3aW5kb3cucHJvY2Vzcz17dmVyc2lvbjoiIn19LDEzOTgxKGMsZil7InVzZSBzdHJpY3QiO2YuYnl0ZUxlbmd0aD1mdW5jdGlvbiBpKGcpe3ZhciBEPWwoZykseD1EWzFdO3JldHVybiAzKihEWzBdK3gpLzQteH0sZi50b0J5dGVBcnJheT1mdW5jdGlvbiBw''@;'; put 'put ''KGcpe3ZhciBELFQsRj1sKGcpLHg9RlswXSxBPUZbMV0saz1uZXcgZShmdW5jdGlvbiB2KGcsRCxGKXtyZXR1cm4gMyooRCtGKS80LUZ9KDAseCxBKSksUD0wLE09QT4wP3gtNDp4O2ZvcihUPTA7VDxNO1QrPTQpRD1uW2cuY2hhckNvZGVBdChUKV08PDE4fG5bZy5jaGFyQ29kZUF0KFQrMSld''@;'; put 'put ''PDwxMnxuW2cuY2hhckNvZGVBdChUKzIpXTw8NnxuW2cuY2hhckNvZGVBdChUKzMpXSxrW1ArK109RD4+MTYmMjU1LGtbUCsrXT1EPj44JjI1NSxrW1ArK109MjU1JkQ7cmV0dXJuIDI9PT1BJiYoRD1uW2cuY2hhckNvZGVBdChUKV08PDJ8bltnLmNoYXJDb2RlQXQoVCsxKV0+PjQsa1tQKytd''@;'; put 'put ''PTI1NSZEKSwxPT09QSYmKEQ9bltnLmNoYXJDb2RlQXQoVCldPDwxMHxuW2cuY2hhckNvZGVBdChUKzEpXTw8NHxuW2cuY2hhckNvZGVBdChUKzIpXT4+MixrW1ArK109RD4+OCYyNTUsa1tQKytdPTI1NSZEKSxrfSxmLmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24gRShnKXtmb3IodmFyIEQsRj1n''@;'; put 'put ''Lmxlbmd0aCx4PUYlMyxBPVtdLGs9MTYzODMsUD0wLE09Ri14O1A8TTtQKz1rKUEucHVzaCh5KGcsUCxQK2s+TT9NOlAraykpO3JldHVybiAxPT09eD9BLnB1c2godFsoRD1nW0YtMV0pPj4yXSt0W0Q8PDQmNjNdKyI9PSIpOjI9PT14JiZBLnB1c2godFsoRD0oZ1tGLTJdPDw4KStnW0YtMV0p''@;'; put 'put ''Pj4xMF0rdFtEPj40JjYzXSt0W0Q8PDImNjNdKyI9IiksQS5qb2luKCIiKX07Zm9yKHZhciB0PVtdLG49W10sZT10eXBlb2YgVWludDhBcnJheTwidSI/VWludDhBcnJheTpBcnJheSxzPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1''@;'; put 'put ''Njc4OSsvIixvPTA7bzw2NDsrK28pdFtvXT1zW29dLG5bcy5jaGFyQ29kZUF0KG8pXT1vO2Z1bmN0aW9uIGwoZyl7dmFyIEQ9Zy5sZW5ndGg7aWYoRCU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIEY9Zy5p''@;'; put 'put ''bmRleE9mKCI9Iik7cmV0dXJuLTE9PT1GJiYoRj1EKSxbRixGPT09RD8wOjQtRiU0XX1mdW5jdGlvbiBkKGcpe3JldHVybiB0W2c+PjE4JjYzXSt0W2c+PjEyJjYzXSt0W2c+PjYmNjNdK3RbNjMmZ119ZnVuY3Rpb24geShnLEQsRil7Zm9yKHZhciBBPVtdLGs9RDtrPEY7ays9MylBLnB1c2go''@;'; put 'put ''ZCgoZ1trXTw8MTYmMTY3MTE2ODApKyhnW2srMV08PDgmNjUyODApKygyNTUmZ1trKzJdKSkpO3JldHVybiBBLmpvaW4oIiIpfW5bNDVdPTYyLG5bOTVdPTYzfSw4MzgzOChjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoMTM5ODEpLGU9dCgyMjAyMCkscz0iZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''U3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj9TeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpOm51bGw7Zi5CdWZmZXI9aSxmLlNsb3dCdWZmZXI9ZnVuY3Rpb24gayhoKXtyZXR1cm4raCE9aCYmKGg9MCksaS5hbGxvYygraCl9LGYuSU5TUEVDVF9N''@;'; put 'put ''QVhfQllURVM9NTA7dmFyIG89MjE0NzQ4MzY0NztmdW5jdGlvbiBsKGgpe2lmKGg+byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK2grJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciByPW5ldyBVaW50OEFycmF5KGgpO3JldHVybiBPYmplY3Quc2V0UHJv''@;'; put 'put ''dG90eXBlT2YocixpLnByb3RvdHlwZSkscn1mdW5jdGlvbiBpKGgscixhKXtpZigibnVtYmVyIj09dHlwZW9mIGgpe2lmKCJzdHJpbmciPT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQg''@;'; put 'put ''dHlwZSBudW1iZXInKTtyZXR1cm4geShoKX1yZXR1cm4gdihoLHIsYSl9ZnVuY3Rpb24gdihoLHIsYSl7aWYoInN0cmluZyI9PXR5cGVvZiBoKXJldHVybiBmdW5jdGlvbiBFKGgscil7aWYoKCJzdHJpbmciIT10eXBlb2Ygcnx8IiI9PT1yKSYmKHI9InV0ZjgiKSwhaS5pc0VuY29kaW5nKHIp''@;'; put 'put ''KXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcik7dmFyIGE9MHxQKGgsciksbT1sKGEpLHc9bS53cml0ZShoLHIpO3JldHVybiB3IT09YSYmKG09bS5zbGljZSgwLHcpKSxtfShoLHIpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhoKSlyZXR1cm4gZnVuY3Rpb24gRCho''@;'; put 'put ''KXtpZihubihoLFVpbnQ4QXJyYXkpKXt2YXIgcj1uZXcgVWludDhBcnJheShoKTtyZXR1cm4gRihyLmJ1ZmZlcixyLmJ5dGVPZmZzZXQsci5ieXRlTGVuZ3RoKX1yZXR1cm4gZyhoKX0oaCk7aWYobnVsbD09aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBi''@;'; put 'put ''ZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBoKTtpZihubihoLEFycmF5QnVmZmVyKXx8aCYmbm4oaC5idWZmZXIsQXJyYXlCdWZmZXIpfHx0eXBlb2YgU2hhcmVkQXJy''@;'; put 'put ''YXlCdWZmZXI8InUiJiYobm4oaCxTaGFyZWRBcnJheUJ1ZmZlcil8fGgmJm5uKGguYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIEYoaCxyLGEpO2lmKCJudW1iZXIiPT10eXBlb2YgaCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBi''@;'; put 'put ''ZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTt2YXIgbT1oLnZhbHVlT2YmJmgudmFsdWVPZigpO2lmKG51bGwhPW0mJm0hPT1oKXJldHVybiBpLmZyb20obSxyLGEpO3ZhciB3PWZ1bmN0aW9uIHgoaCl7aWYoaS5pc0J1ZmZlcihoKSl7dmFyIHI9MHxBKGgubGVuZ3Ro''@;'; put 'put ''KSxhPWwocik7cmV0dXJuIDA9PT1hLmxlbmd0aHx8aC5jb3B5KGEsMCwwLHIpLGF9cmV0dXJuIHZvaWQgMCE9PWgubGVuZ3RoPyJudW1iZXIiIT10eXBlb2YgaC5sZW5ndGh8fHluKGgubGVuZ3RoKT9sKDApOmcoaCk6IkJ1ZmZlciI9PT1oLnR5cGUmJkFycmF5LmlzQXJyYXkoaC5kYXRhKT9n''@;'; put 'put ''KGguZGF0YSk6dm9pZCAwfShoKTtpZih3KXJldHVybiB3O2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBoW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIGkuZnJvbShoW1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmlu''@;'; put 'put ''ZyIpLHIsYSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgaCl9ZnVuY3Rpb24gcCho''@;'; put 'put ''KXtpZigibnVtYmVyIiE9dHlwZW9mIGgpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZihoPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytoKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1m''@;'; put 'put ''dW5jdGlvbiB5KGgpe3JldHVybiBwKGgpLGwoaDwwPzA6MHxBKGgpKX1mdW5jdGlvbiBnKGgpe2Zvcih2YXIgcj1oLmxlbmd0aDwwPzA6MHxBKGgubGVuZ3RoKSxhPWwociksbT0wO208cjttKz0xKWFbbV09MjU1JmhbbV07cmV0dXJuIGF9ZnVuY3Rpb24gRihoLHIsYSl7aWYocjwwfHxoLmJ5''@;'; put 'put ''dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoaC5ieXRlTGVuZ3RoPHIrKGF8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTt2YXIgbTty''@;'; put 'put ''ZXR1cm4gbT12b2lkIDA9PT1yJiZ2b2lkIDA9PT1hP25ldyBVaW50OEFycmF5KGgpOnZvaWQgMD09PWE/bmV3IFVpbnQ4QXJyYXkoaCxyKTpuZXcgVWludDhBcnJheShoLHIsYSksT2JqZWN0LnNldFByb3RvdHlwZU9mKG0saS5wcm90b3R5cGUpLG19ZnVuY3Rpb24gQShoKXtpZihoPj1vKXRo''@;'; put 'put ''cm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitvLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8aH1mdW5jdGlvbiBQKGgscil7aWYoaS5pc0J1ZmZlcihoKSlyZXR1cm4gaC5sZW5ndGg7aWYo''@;'; put 'put ''QXJyYXlCdWZmZXIuaXNWaWV3KGgpfHxubihoLEFycmF5QnVmZmVyKSlyZXR1cm4gaC5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgaCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3Ig''@;'; put 'put ''QXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgaCk7dmFyIGE9aC5sZW5ndGgsbT1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFtJiYwPT09YSlyZXR1cm4gMDtmb3IodmFyIHc9ITE7Oylzd2l0Y2gocil7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEi''@;'; put 'put ''OmNhc2UiYmluYXJ5IjpyZXR1cm4gYTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBZdChoKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKmE7Y2FzZSJoZXgiOnJldHVybiBhPj4+MTtjYXNlImJhc2U2NCI6''@;'; put 'put ''cmV0dXJuIGhuKGgpLmxlbmd0aDtkZWZhdWx0OmlmKHcpcmV0dXJuIG0/LTE6WXQoaCkubGVuZ3RoO3I9KCIiK3IpLnRvTG93ZXJDYXNlKCksdz0hMH19ZnVuY3Rpb24gTShoLHIsYSl7dmFyIG09ITE7aWYoKHZvaWQgMD09PXJ8fHI8MCkmJihyPTApLHI+dGhpcy5sZW5ndGh8fCgodm9pZCAw''@;'; put 'put ''PT09YXx8YT50aGlzLmxlbmd0aCkmJihhPXRoaXMubGVuZ3RoKSxhPD0wKXx8KGE+Pj49MCk8PShyPj4+PTApKXJldHVybiIiO2ZvcihofHwoaD0idXRmOCIpOzspc3dpdGNoKGgpe2Nhc2UiaGV4IjpyZXR1cm4gZHQodGhpcyxyLGEpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHEo''@;'; put 'put ''dGhpcyxyLGEpO2Nhc2UiYXNjaWkiOnJldHVybiBWKHRoaXMscixhKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBsdCh0aGlzLHIsYSk7Y2FzZSJiYXNlNjQiOnJldHVybiBtdCh0aGlzLHIsYSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRm''@;'; put 'put ''LTE2bGUiOnJldHVybiBDdCh0aGlzLHIsYSk7ZGVmYXVsdDppZihtKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIraCk7aD0oaCsiIikudG9Mb3dlckNhc2UoKSxtPSEwfX1mdW5jdGlvbiBUKGgscixhKXt2YXIgbT1oW3JdO2hbcl09aFthXSxoW2FdPW19ZnVuY3Rp''@;'; put 'put ''b24gYihoLHIsYSxtLHcpe2lmKDA9PT1oLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIGE/KG09YSxhPTApOmE+MjE0NzQ4MzY0Nz9hPTIxNDc0ODM2NDc6YTwtMjE0NzQ4MzY0OCYmKGE9LTIxNDc0ODM2NDgpLHluKGE9K2EpJiYoYT13PzA6aC5sZW5ndGgtMSksYTwwJiYo''@;'; put 'put ''YT1oLmxlbmd0aCthKSxhPj1oLmxlbmd0aCl7aWYodylyZXR1cm4tMTthPWgubGVuZ3RoLTF9ZWxzZSBpZihhPDApe2lmKCF3KXJldHVybi0xO2E9MH1pZigic3RyaW5nIj09dHlwZW9mIHImJihyPWkuZnJvbShyLG0pKSxpLmlzQnVmZmVyKHIpKXJldHVybiAwPT09ci5sZW5ndGg/LTE6Qiho''@;'; put 'put ''LHIsYSxtLHcpO2lmKCJudW1iZXIiPT10eXBlb2YgcilyZXR1cm4gciY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP3c/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGgscixhKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5k''@;'; put 'put ''ZXhPZi5jYWxsKGgscixhKTpCKGgsW3JdLGEsbSx3KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBCKGgscixhLG0sdyl7dmFyIEgsSz0xLCQ9aC5sZW5ndGgsRHQ9ci5sZW5ndGg7aWYodm9pZCAwIT09bSYmKCJ1''@;'; put 'put ''Y3MyIj09PShtPVN0cmluZyhtKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PW18fCJ1dGYxNmxlIj09PW18fCJ1dGYtMTZsZSI9PT1tKSl7aWYoaC5sZW5ndGg8Mnx8ci5sZW5ndGg8MilyZXR1cm4tMTtLPTIsJC89MixEdC89MixhLz0yfWZ1bmN0aW9uIF8ocXQscm4pe3JldHVybiAxPT09''@;'; put 'put ''Sz9xdFtybl06cXQucmVhZFVJbnQxNkJFKHJuKkspfWlmKHcpe3ZhciBRPS0xO2ZvcihIPWE7SDwkO0grKylpZihfKGgsSCk9PT1fKHIsLTE9PT1RPzA6SC1RKSl7aWYoLTE9PT1RJiYoUT1IKSxILVErMT09PUR0KXJldHVybiBRKkt9ZWxzZS0xIT09USYmKEgtPUgtUSksUT0tMX1lbHNlIGZv''@;'; put 'put ''cihhK0R0PiQmJihhPSQtRHQpLEg9YTtIPj0wO0gtLSl7Zm9yKHZhciBpdD0hMCx6dD0wO3p0PER0O3p0KyspaWYoXyhoLEgrenQpIT09XyhyLHp0KSl7aXQ9ITE7YnJlYWt9aWYoaXQpcmV0dXJuIEh9cmV0dXJuLTF9ZnVuY3Rpb24gVShoLHIsYSxtKXthPU51bWJlcihhKXx8MDt2YXIgdz1o''@;'; put 'put ''Lmxlbmd0aC1hO20/KG09TnVtYmVyKG0pKT53JiYobT13KTptPXc7dmFyIEs9ci5sZW5ndGg7bT5LLzImJihtPUsvMik7Zm9yKHZhciAkPTA7JDxtOysrJCl7dmFyIER0PXBhcnNlSW50KHIuc3Vic3RyKDIqJCwyKSwxNik7aWYoeW4oRHQpKXJldHVybiAkO2hbYSskXT1EdH1yZXR1cm4gJH1m''@;'; put 'put ''dW5jdGlvbiBaKGgscixhLG0pe3JldHVybiBvbihZdChyLGgubGVuZ3RoLWEpLGgsYSxtKX1mdW5jdGlvbiBudChoLHIsYSxtKXtyZXR1cm4gb24oZnVuY3Rpb24gcG4oaCl7Zm9yKHZhciByPVtdLGE9MDthPGgubGVuZ3RoOysrYSlyLnB1c2goMjU1JmguY2hhckNvZGVBdChhKSk7cmV0dXJu''@;'; put 'put ''IHJ9KHIpLGgsYSxtKX1mdW5jdGlvbiB0dChoLHIsYSxtKXtyZXR1cm4gb24oaG4ociksaCxhLG0pfWZ1bmN0aW9uIHl0KGgscixhLG0pe3JldHVybiBvbihmdW5jdGlvbiB4bihoLHIpe2Zvcih2YXIgYSxtLEs9W10sJD0wOyQ8aC5sZW5ndGgmJiEoKHItPTIpPDApOysrJCltPShhPWguY2hh''@;'; put 'put ''ckNvZGVBdCgkKSk+PjgsSy5wdXNoKGElMjU2KSxLLnB1c2gobSk7cmV0dXJuIEt9KHIsaC5sZW5ndGgtYSksaCxhLG0pfWZ1bmN0aW9uIG10KGgscixhKXtyZXR1cm4gbi5mcm9tQnl0ZUFycmF5KDA9PT1yJiZhPT09aC5sZW5ndGg/aDpoLnNsaWNlKHIsYSkpfWZ1bmN0aW9uIHEoaCxyLGEp''@;'; put 'put ''e2E9TWF0aC5taW4oaC5sZW5ndGgsYSk7Zm9yKHZhciBtPVtdLHc9cjt3PGE7KXt2YXIgXyxILFEsaXQsSz1oW3ddLCQ9bnVsbCxEdD1LPjIzOT80Oks+MjIzPzM6Sz4xOTE/MjoxO2lmKHcrRHQ8PWEpc3dpdGNoKER0KXtjYXNlIDE6SzwxMjgmJigkPUspO2JyZWFrO2Nhc2UgMjoxMjg9PSgx''@;'; put 'put ''OTImKF89aFt3KzFdKSkmJihpdD0oMzEmSyk8PDZ8NjMmXyk+MTI3JiYoJD1pdCk7YnJlYWs7Y2FzZSAzOkg9aFt3KzJdLDEyOD09KDE5MiYoXz1oW3crMV0pKSYmMTI4PT0oMTkyJkgpJiYoaXQ9KDE1JkspPDwxMnwoNjMmXyk8PDZ8NjMmSCk+MjA0NyYmKGl0PDU1Mjk2fHxpdD41NzM0Mykm''@;'; put 'put ''JigkPWl0KTticmVhaztjYXNlIDQ6SD1oW3crMl0sUT1oW3crM10sMTI4PT0oMTkyJihfPWhbdysxXSkpJiYxMjg9PSgxOTImSCkmJjEyOD09KDE5MiZRKSYmKGl0PSgxNSZLKTw8MTh8KDYzJl8pPDwxMnwoNjMmSCk8PDZ8NjMmUSk+NjU1MzUmJml0PDExMTQxMTImJigkPWl0KX1udWxsPT09''@;'; put 'put ''JD8oJD02NTUzMyxEdD0xKTokPjY1NTM1JiYobS5wdXNoKCgkLT02NTUzNik+Pj4xMCYxMDIzfDU1Mjk2KSwkPTU2MzIwfDEwMjMmJCksbS5wdXNoKCQpLHcrPUR0fXJldHVybiBmdW5jdGlvbiBldChoKXt2YXIgcj1oLmxlbmd0aDtpZihyPD1YKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2Rl''@;'; put 'put ''LmFwcGx5KFN0cmluZyxoKTtmb3IodmFyIGE9IiIsbT0wO208cjspYSs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsaC5zbGljZShtLG0rPVgpKTtyZXR1cm4gYX0obSl9Zi5rTWF4TGVuZ3RoPW8sIShpLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24gdSgpe3RyeXt2YXIg''@;'; put 'put ''aD1uZXcgVWludDhBcnJheSgxKSxyPXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHIsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihoLHIpLDQyPT09aC5mb28oKX1jYXRjaHtyZXR1cm4hMX19KCkpJiZ0''@;'; put 'put ''eXBlb2YgY29uc29sZTwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBjb25zb2xlLmVycm9yJiZjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZm''@;'; put 'put ''ZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsInBhcmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoaS5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KGkucHJvdG90eXBlLCJvZmZzZXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKGkuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSxpLnBvb2xTaXplPTgxOTIsaS5mcm9tPWZ1bmN0aW9uKGgscixhKXtyZXR1cm4gdiho''@;'; put 'put ''LHIsYSl9LE9iamVjdC5zZXRQcm90b3R5cGVPZihpLnByb3RvdHlwZSxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKGksVWludDhBcnJheSksaS5hbGxvYz1mdW5jdGlvbihoLHIsYSl7cmV0dXJuIGZ1bmN0aW9uIGQoaCxyLGEpe3JldHVybiBwKGgpLGg8PTA/''@;'; put 'put ''bChoKTp2b2lkIDAhPT1yPyJzdHJpbmciPT10eXBlb2YgYT9sKGgpLmZpbGwocixhKTpsKGgpLmZpbGwocik6bChoKX0oaCxyLGEpfSxpLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGgpe3JldHVybiB5KGgpfSxpLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihoKXtyZXR1cm4geShoKX0saS5pc0J1''@;'; put 'put ''ZmZlcj1mdW5jdGlvbihyKXtyZXR1cm4gbnVsbCE9ciYmITA9PT1yLl9pc0J1ZmZlciYmciE9PWkucHJvdG90eXBlfSxpLmNvbXBhcmU9ZnVuY3Rpb24ocixhKXtpZihubihyLFVpbnQ4QXJyYXkpJiYocj1pLmZyb20ocixyLm9mZnNldCxyLmJ5dGVMZW5ndGgpKSxubihhLFVpbnQ4QXJyYXkp''@;'; put 'put ''JiYoYT1pLmZyb20oYSxhLm9mZnNldCxhLmJ5dGVMZW5ndGgpKSwhaS5pc0J1ZmZlcihyKXx8IWkuaXNCdWZmZXIoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYo''@;'; put 'put ''cj09PWEpcmV0dXJuIDA7Zm9yKHZhciBtPXIubGVuZ3RoLHc9YS5sZW5ndGgsSz0wLCQ9TWF0aC5taW4obSx3KTtLPCQ7KytLKWlmKHJbS10hPT1hW0tdKXttPXJbS10sdz1hW0tdO2JyZWFrfXJldHVybiBtPHc/LTE6dzxtPzE6MH0saS5pc0VuY29kaW5nPWZ1bmN0aW9uKHIpe3N3aXRjaChT''@;'; put 'put ''dHJpbmcocikudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVy''@;'; put 'put ''biEwO2RlZmF1bHQ6cmV0dXJuITF9fSxpLmNvbmNhdD1mdW5jdGlvbihyLGEpe2lmKCFBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ci5sZW5ndGgpcmV0dXJuIGkuYWxsb2Mo''@;'; put 'put ''MCk7dmFyIG07aWYodm9pZCAwPT09YSlmb3IoYT0wLG09MDttPHIubGVuZ3RoOysrbSlhKz1yW21dLmxlbmd0aDt2YXIgdz1pLmFsbG9jVW5zYWZlKGEpLEs9MDtmb3IobT0wO208ci5sZW5ndGg7KyttKXt2YXIgJD1yW21dO2lmKG5uKCQsVWludDhBcnJheSkpSyskLmxlbmd0aD53Lmxlbmd0''@;'; put 'put ''aD9pLmZyb20oJCkuY29weSh3LEspOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKHcsJCxLKTtlbHNle2lmKCFpLmlzQnVmZmVyKCQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTskLmNvcHkodyxLKX1LKz0k''@;'; put 'put ''Lmxlbmd0aH1yZXR1cm4gd30saS5ieXRlTGVuZ3RoPVAsaS5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLGkucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciByPXRoaXMubGVuZ3RoO2lmKHIlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRp''@;'; put 'put ''cGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIGE9MDthPHI7YSs9MilUKHRoaXMsYSxhKzEpO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmxlbmd0aDtpZihyJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUg''@;'; put 'put ''YSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciBhPTA7YTxyO2ErPTQpVCh0aGlzLGEsYSszKSxUKHRoaXMsYSsxLGErMik7cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciByPXRoaXMubGVuZ3RoO2lmKHIlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJv''@;'; put 'put ''cigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIGE9MDthPHI7YSs9OClUKHRoaXMsYSxhKzcpLFQodGhpcyxhKzEsYSs2KSxUKHRoaXMsYSsyLGErNSksVCh0aGlzLGErMyxhKzQpO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS50b1N0cmluZz1m''@;'; put 'put ''dW5jdGlvbigpe3ZhciByPXRoaXMubGVuZ3RoO3JldHVybiAwPT09cj8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9xKHRoaXMsMCxyKTpNLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saS5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9aS5wcm90b3R5cGUudG9TdHJpbmcsaS5wcm90b3R5cGUuZXF1''@;'; put 'put ''YWxzPWZ1bmN0aW9uKHIpe2lmKCFpLmlzQnVmZmVyKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PXJ8fDA9PT1pLmNvbXBhcmUodGhpcyxyKX0saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciByPSIiLGE9''@;'; put 'put ''Zi5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gcj10aGlzLnRvU3RyaW5nKCJoZXgiLDAsYSkucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5hJiYocis9IiAuLi4gIiksIjxCdWZmZXIgIityKyI+In0scyYmKGkucHJvdG90eXBlW3NdPWkucHJvdG90eXBlLmlu''@;'; put 'put ''c3BlY3QpLGkucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24ocixhLG0sdyxLKXtpZihubihyLFVpbnQ4QXJyYXkpJiYocj1pLmZyb20ocixyLm9mZnNldCxyLmJ5dGVMZW5ndGgpKSwhaS5pc0J1ZmZlcihyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVz''@;'; put 'put ''dCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiByKTtpZih2b2lkIDA9PT1hJiYoYT0wKSx2b2lkIDA9PT1tJiYobT1yP3IubGVuZ3RoOjApLHZvaWQgMD09PXcmJih3PTApLHZvaWQgMD09PUsmJihLPXRoaXMubGVuZ3RoKSxhPDB8''@;'; put 'put ''fG0+ci5sZW5ndGh8fHc8MHx8Sz50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYodz49SyYmYT49bSlyZXR1cm4gMDtpZih3Pj1LKXJldHVybi0xO2lmKGE+PW0pcmV0dXJuIDE7aWYodGhpcz09PXIpcmV0dXJuIDA7Zm9yKHZhciAkPShL''@;'; put 'put ''Pj4+PTApLSh3Pj4+PTApLER0PShtPj4+PTApLShhPj4+PTApLF89TWF0aC5taW4oJCxEdCksSD10aGlzLnNsaWNlKHcsSyksUT1yLnNsaWNlKGEsbSksaXQ9MDtpdDxfOysraXQpaWYoSFtpdF0hPT1RW2l0XSl7JD1IW2l0XSxEdD1RW2l0XTticmVha31yZXR1cm4gJDxEdD8tMTpEdDwkPzE6''@;'; put 'put ''MH0saS5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24ocixhLG0pe3JldHVybi0xIT09dGhpcy5pbmRleE9mKHIsYSxtKX0saS5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihyLGEsbSl7cmV0dXJuIGIodGhpcyxyLGEsbSwhMCl9LGkucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9u''@;'; put 'put ''KHIsYSxtKXtyZXR1cm4gYih0aGlzLHIsYSxtLCExKX0saS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24ocixhLG0sdyl7aWYodm9pZCAwPT09YSl3PSJ1dGY4IixtPXRoaXMubGVuZ3RoLGE9MDtlbHNlIGlmKHZvaWQgMD09PW0mJiJzdHJpbmciPT10eXBlb2YgYSl3PWEsbT10aGlzLmxlbmd0''@;'; put 'put ''aCxhPTA7ZWxzZXtpZighaXNGaW5pdGUoYSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO2E+Pj49MCxpc0Zpbml0ZShtKT8obT4+Pj0wLHZvaWQgMD09PXcmJih3PSJ1dGY4''@;'; put 'put ''IikpOih3PW0sbT12b2lkIDApfXZhciBLPXRoaXMubGVuZ3RoLWE7aWYoKHZvaWQgMD09PW18fG0+SykmJihtPUspLHIubGVuZ3RoPjAmJihtPDB8fGE8MCl8fGE+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRz''@;'; put 'put ''Iik7d3x8KHc9InV0ZjgiKTtmb3IodmFyICQ9ITE7Oylzd2l0Y2godyl7Y2FzZSJoZXgiOnJldHVybiBVKHRoaXMscixhLG0pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFoodGhpcyxyLGEsbSk7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gbnQo''@;'; put 'put ''dGhpcyxyLGEsbSk7Y2FzZSJiYXNlNjQiOnJldHVybiB0dCh0aGlzLHIsYSxtKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHl0KHRoaXMscixhLG0pO2RlZmF1bHQ6aWYoJCl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVu''@;'; put 'put ''Y29kaW5nOiAiK3cpO3c9KCIiK3cpLnRvTG93ZXJDYXNlKCksJD0hMH19LGkucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIFg9NDA5NjtmdW5jdGlv''@;'; put 'put ''biBWKGgscixhKXt2YXIgbT0iIjthPU1hdGgubWluKGgubGVuZ3RoLGEpO2Zvcih2YXIgdz1yO3c8YTsrK3cpbSs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmaFt3XSk7cmV0dXJuIG19ZnVuY3Rpb24gbHQoaCxyLGEpe3ZhciBtPSIiO2E9TWF0aC5taW4oaC5sZW5ndGgsYSk7Zm9yKHZhciB3''@;'; put 'put ''PXI7dzxhOysrdyltKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGhbd10pO3JldHVybiBtfWZ1bmN0aW9uIGR0KGgscixhKXt2YXIgbT1oLmxlbmd0aDsoIXJ8fHI8MCkmJihyPTApLCghYXx8YTwwfHxhPm0pJiYoYT1tKTtmb3IodmFyIHc9IiIsSz1yO0s8YTsrK0spdys9VG5baFtLXV07cmV0dXJu''@;'; put 'put ''IHd9ZnVuY3Rpb24gQ3QoaCxyLGEpe2Zvcih2YXIgbT1oLnNsaWNlKHIsYSksdz0iIixLPTA7SzxtLmxlbmd0aC0xO0srPTIpdys9U3RyaW5nLmZyb21DaGFyQ29kZShtW0tdKzI1NiptW0srMV0pO3JldHVybiB3fWZ1bmN0aW9uIE90KGgscixhKXtpZihoJTEhPTB8fGg8MCl0aHJvdyBuZXcg''@;'; put 'put ''UmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoaCtyPmEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBOdChoLHIsYSxtLHcsSyl7aWYoIWkuaXNCdWZmZXIoaCkpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHI+d3x8cjxLKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihhK20+aC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91''@;'; put 'put ''dCBvZiByYW5nZSIpfWZ1bmN0aW9uIFF0KGgscixhLG0sdyxLKXtpZihhK20+aC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKGE8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gYW4oaCxyLGEs''@;'; put 'put ''bSx3KXtyZXR1cm4gcj0rcixhPj4+PTAsd3x8UXQoaCwwLGEsNCksZS53cml0ZShoLHIsYSxtLDIzLDQpLGErNH1mdW5jdGlvbiBHdChoLHIsYSxtLHcpe3JldHVybiByPStyLGE+Pj49MCx3fHxRdChoLDAsYSw4KSxlLndyaXRlKGgscixhLG0sNTIsOCksYSs4fWkucHJvdG90eXBlLnNsaWNl''@;'; put 'put ''PWZ1bmN0aW9uKHIsYSl7dmFyIG09dGhpcy5sZW5ndGg7KHI9fn5yKTwwPyhyKz1tKTwwJiYocj0wKTpyPm0mJihyPW0pLChhPXZvaWQgMD09PWE/bTp+fmEpPDA/KGErPW0pPDAmJihhPTApOmE+bSYmKGE9bSksYTxyJiYoYT1yKTt2YXIgdz10aGlzLnN1YmFycmF5KHIsYSk7cmV0dXJuIE9i''@;'; put 'put ''amVjdC5zZXRQcm90b3R5cGVPZih3LGkucHJvdG90eXBlKSx3fSxpLnByb3RvdHlwZS5yZWFkVWludExFPWkucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24ocixhLG0pe3I+Pj49MCxhPj4+PTAsbXx8T3QocixhLHRoaXMubGVuZ3RoKTtmb3IodmFyIHc9dGhpc1tyXSxLPTEsJD0wOysr''@;'; put 'put ''JDxhJiYoSyo9MjU2KTspdys9dGhpc1tyKyRdKks7cmV0dXJuIHd9LGkucHJvdG90eXBlLnJlYWRVaW50QkU9aS5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihyLGEsbSl7cj4+Pj0wLGE+Pj49MCxtfHxPdChyLGEsdGhpcy5sZW5ndGgpO2Zvcih2YXIgdz10aGlzW3IrLS1hXSxLPTE7''@;'; put 'put ''YT4wJiYoSyo9MjU2KTspdys9dGhpc1tyKy0tYV0qSztyZXR1cm4gd30saS5wcm90b3R5cGUucmVhZFVpbnQ4PWkucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8T3QociwxLHRoaXMubGVuZ3RoKSx0aGlzW3JdfSxpLnByb3RvdHlwZS5yZWFkVWlu''@;'; put 'put ''dDE2TEU9aS5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDIsdGhpcy5sZW5ndGgpLHRoaXNbcl18dGhpc1tyKzFdPDw4fSxpLnByb3RvdHlwZS5yZWFkVWludDE2QkU9aS5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKHIs''@;'; put 'put ''YSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDIsdGhpcy5sZW5ndGgpLHRoaXNbcl08PDh8dGhpc1tyKzFdfSxpLnByb3RvdHlwZS5yZWFkVWludDMyTEU9aS5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDQsdGhpcy5sZW5ndGgpLCh0''@;'; put 'put ''aGlzW3JdfHRoaXNbcisxXTw8OHx0aGlzW3IrMl08PDE2KSsxNjc3NzIxNip0aGlzW3IrM119LGkucHJvdG90eXBlLnJlYWRVaW50MzJCRT1pLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24ocixhKXtyZXR1cm4gcj4+Pj0wLGF8fE90KHIsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYq''@;'; put 'put ''dGhpc1tyXSsodGhpc1tyKzFdPDwxNnx0aGlzW3IrMl08PDh8dGhpc1tyKzNdKX0saS5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKHIsYSxtKXtyPj4+PTAsYT4+Pj0wLG18fE90KHIsYSx0aGlzLmxlbmd0aCk7Zm9yKHZhciB3PXRoaXNbcl0sSz0xLCQ9MDsrKyQ8YSYmKEsqPTI1Nik7''@;'; put 'put ''KXcrPXRoaXNbciskXSpLO3JldHVybiB3Pj0oSyo9MTI4KSYmKHctPU1hdGgucG93KDIsOCphKSksd30saS5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHIsYSxtKXtyPj4+PTAsYT4+Pj0wLG18fE90KHIsYSx0aGlzLmxlbmd0aCk7Zm9yKHZhciB3PWEsSz0xLCQ9dGhpc1tyKy0td107''@;'; put 'put ''dz4wJiYoSyo9MjU2KTspJCs9dGhpc1tyKy0td10qSztyZXR1cm4gJD49KEsqPTEyOCkmJigkLT1NYXRoLnBvdygyLDgqYSkpLCR9LGkucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW3JdPy0xKigy''@;'; put 'put ''NTUtdGhpc1tyXSsxKTp0aGlzW3JdfSxpLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihyLGEpe3I+Pj49MCxhfHxPdChyLDIsdGhpcy5sZW5ndGgpO3ZhciBtPXRoaXNbcl18dGhpc1tyKzFdPDw4O3JldHVybiAzMjc2OCZtPzQyOTQ5MDE3NjB8bTptfSxpLnByb3RvdHlwZS5yZWFk''@;'; put 'put ''SW50MTZCRT1mdW5jdGlvbihyLGEpe3I+Pj49MCxhfHxPdChyLDIsdGhpcy5sZW5ndGgpO3ZhciBtPXRoaXNbcisxXXx0aGlzW3JdPDw4O3JldHVybiAzMjc2OCZtPzQyOTQ5MDE3NjB8bTptfSxpLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8''@;'; put 'put ''T3Qociw0LHRoaXMubGVuZ3RoKSx0aGlzW3JdfHRoaXNbcisxXTw8OHx0aGlzW3IrMl08PDE2fHRoaXNbciszXTw8MjR9LGkucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDQsdGhpcy5sZW5ndGgpLHRoaXNbcl08PDI0fHRoaXNbcisx''@;'; put 'put ''XTw8MTZ8dGhpc1tyKzJdPDw4fHRoaXNbciszXX0saS5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24ocixhKXtyZXR1cm4gcj4+Pj0wLGF8fE90KHIsNCx0aGlzLmxlbmd0aCksZS5yZWFkKHRoaXMsciwhMCwyMyw0KX0saS5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24ocixh''@;'; put 'put ''KXtyZXR1cm4gcj4+Pj0wLGF8fE90KHIsNCx0aGlzLmxlbmd0aCksZS5yZWFkKHRoaXMsciwhMSwyMyw0KX0saS5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDgsdGhpcy5sZW5ndGgpLGUucmVhZCh0aGlzLHIsITAsNTIsOCl9LGku''@;'; put 'put ''cHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8T3Qociw4LHRoaXMubGVuZ3RoKSxlLnJlYWQodGhpcyxyLCExLDUyLDgpfSxpLnByb3RvdHlwZS53cml0ZVVpbnRMRT1pLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihyLGEsbSx3KXty''@;'; put 'put ''PStyLGE+Pj49MCxtPj4+PTAsd3x8TnQodGhpcyxyLGEsbSxNYXRoLnBvdygyLDgqbSktMSwwKTt2YXIgJD0xLER0PTA7Zm9yKHRoaXNbYV09MjU1JnI7KytEdDxtJiYoJCo9MjU2KTspdGhpc1thK0R0XT1yLyQmMjU1O3JldHVybiBhK219LGkucHJvdG90eXBlLndyaXRlVWludEJFPWkucHJv''@;'; put 'put ''dG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKHIsYSxtLHcpe3I9K3IsYT4+Pj0wLG0+Pj49MCx3fHxOdCh0aGlzLHIsYSxtLE1hdGgucG93KDIsOCptKS0xLDApO3ZhciAkPW0tMSxEdD0xO2Zvcih0aGlzW2ErJF09MjU1JnI7LS0kPj0wJiYoRHQqPTI1Nik7KXRoaXNbYSskXT1yL0R0JjI1''@;'; put 'put ''NTtyZXR1cm4gYSttfSxpLnByb3RvdHlwZS53cml0ZVVpbnQ4PWkucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24ocixhLG0pe3JldHVybiByPStyLGE+Pj49MCxtfHxOdCh0aGlzLHIsYSwxLDI1NSwwKSx0aGlzW2FdPTI1NSZyLGErMX0saS5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1p''@;'; put 'put ''LnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8TnQodGhpcyxyLGEsMiw2NTUzNSwwKSx0aGlzW2FdPTI1NSZyLHRoaXNbYSsxXT1yPj4+OCxhKzJ9LGkucHJvdG90eXBlLndyaXRlVWludDE2QkU9aS5wcm90b3R5cGUud3JpdGVV''@;'; put 'put ''SW50MTZCRT1mdW5jdGlvbihyLGEsbSl7cmV0dXJuIHI9K3IsYT4+Pj0wLG18fE50KHRoaXMscixhLDIsNjU1MzUsMCksdGhpc1thXT1yPj4+OCx0aGlzW2ErMV09MjU1JnIsYSsyfSxpLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFPWkucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24o''@;'; put 'put ''cixhLG0pe3JldHVybiByPStyLGE+Pj49MCxtfHxOdCh0aGlzLHIsYSw0LDQyOTQ5NjcyOTUsMCksdGhpc1thKzNdPXI+Pj4yNCx0aGlzW2ErMl09cj4+PjE2LHRoaXNbYSsxXT1yPj4+OCx0aGlzW2FdPTI1NSZyLGErNH0saS5wcm90b3R5cGUud3JpdGVVaW50MzJCRT1pLnByb3RvdHlwZS53''@;'; put 'put ''cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8TnQodGhpcyxyLGEsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbYV09cj4+PjI0LHRoaXNbYSsxXT1yPj4+MTYsdGhpc1thKzJdPXI+Pj44LHRoaXNbYSszXT0yNTUmcixhKzR9LGkucHJvdG90eXBlLndyaXRl''@;'; put 'put ''SW50TEU9ZnVuY3Rpb24ocixhLG0sdyl7aWYocj0rcixhPj4+PTAsIXcpe3ZhciBLPU1hdGgucG93KDIsOCptLTEpO050KHRoaXMscixhLG0sSy0xLC1LKX12YXIgJD0wLER0PTEsXz0wO2Zvcih0aGlzW2FdPTI1NSZyOysrJDxtJiYoRHQqPTI1Nik7KXI8MCYmMD09PV8mJjAhPT10aGlzW2Er''@;'; put 'put ''JC0xXSYmKF89MSksdGhpc1thKyRdPShyL0R0fDApLV8mMjU1O3JldHVybiBhK219LGkucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24ocixhLG0sdyl7aWYocj0rcixhPj4+PTAsIXcpe3ZhciBLPU1hdGgucG93KDIsOCptLTEpO050KHRoaXMscixhLG0sSy0xLC1LKX12YXIgJD1tLTEs''@;'; put 'put ''RHQ9MSxfPTA7Zm9yKHRoaXNbYSskXT0yNTUmcjstLSQ+PTAmJihEdCo9MjU2KTspcjwwJiYwPT09XyYmMCE9PXRoaXNbYSskKzFdJiYoXz0xKSx0aGlzW2ErJF09KHIvRHR8MCktXyYyNTU7cmV0dXJuIGErbX0saS5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4g''@;'; put 'put ''cj0rcixhPj4+PTAsbXx8TnQodGhpcyxyLGEsMSwxMjcsLTEyOCkscjwwJiYocj0yNTUrcisxKSx0aGlzW2FdPTI1NSZyLGErMX0saS5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8TnQodGhpcyxyLGEsMiwzMjc2NywtMzI3Njgp''@;'; put 'put ''LHRoaXNbYV09MjU1JnIsdGhpc1thKzFdPXI+Pj44LGErMn0saS5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8TnQodGhpcyxyLGEsMiwzMjc2NywtMzI3NjgpLHRoaXNbYV09cj4+PjgsdGhpc1thKzFdPTI1NSZyLGErMn0saS5w''@;'; put 'put ''cm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8TnQodGhpcyxyLGEsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW2FdPTI1NSZyLHRoaXNbYSsxXT1yPj4+OCx0aGlzW2ErMl09cj4+PjE2LHRoaXNbYSszXT1yPj4+MjQsYSs0''@;'; put 'put ''fSxpLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24ocixhLG0pe3JldHVybiByPStyLGE+Pj49MCxtfHxOdCh0aGlzLHIsYSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHI8MCYmKHI9NDI5NDk2NzI5NStyKzEpLHRoaXNbYV09cj4+PjI0LHRoaXNbYSsxXT1yPj4+MTYsdGhpc1th''@;'; put 'put ''KzJdPXI+Pj44LHRoaXNbYSszXT0yNTUmcixhKzR9LGkucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihyLGEsbSl7cmV0dXJuIGFuKHRoaXMscixhLCEwLG0pfSxpLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24ocixhLG0pe3JldHVybiBhbih0aGlzLHIsYSwhMSxtKX0s''@;'; put 'put ''aS5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihyLGEsbSl7cmV0dXJuIEd0KHRoaXMscixhLCEwLG0pfSxpLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gR3QodGhpcyxyLGEsITEsbSl9LGkucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocixh''@;'; put 'put ''LG0sdyl7aWYoIWkuaXNCdWZmZXIocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYobXx8KG09MCksIXcmJjAhPT13JiYodz10aGlzLmxlbmd0aCksYT49ci5sZW5ndGgmJihhPXIubGVuZ3RoKSxhfHwoYT0wKSx3PjAmJnc8bSYmKHc9bSks''@;'; put 'put ''dz09PW18fDA9PT1yLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKGE8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG08MHx8bT49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5n''@;'; put 'put ''ZSIpO2lmKHc8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTt3PnRoaXMubGVuZ3RoJiYodz10aGlzLmxlbmd0aCksci5sZW5ndGgtYTx3LW0mJih3PXIubGVuZ3RoLWErbSk7dmFyIEs9dy1tO3JldHVybiB0aGlzPT09ciYmImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4/dGhpcy5jb3B5V2l0aGluKGEsbSx3KTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChyLHRoaXMuc3ViYXJyYXkobSx3KSxhKSxLfSxpLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHIsYSxtLHcpe2lmKCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2Ygcil7aWYoInN0cmluZyI9PXR5cGVvZiBhPyh3PWEsYT0wLG09dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgbSYmKHc9bSxtPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT13JiYic3RyaW5nIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBh''@;'; put 'put ''IHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgdyYmIWkuaXNFbmNvZGluZyh3KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3cpO2lmKDE9PT1yLmxlbmd0aCl7dmFyIEs9ci5jaGFyQ29kZUF0KDApOygidXRmOCI9PT13JiZLPDEyOHx8ImxhdGluMSI9PT13''@;'; put 'put ''KSYmKHI9Syl9fWVsc2UibnVtYmVyIj09dHlwZW9mIHI/ciY9MjU1OiJib29sZWFuIj09dHlwZW9mIHImJihyPU51bWJlcihyKSk7aWYoYTwwfHx0aGlzLmxlbmd0aDxhfHx0aGlzLmxlbmd0aDxtKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihtPD1hKXJl''@;'; put 'put ''dHVybiB0aGlzO3ZhciAkO2lmKGE+Pj49MCxtPXZvaWQgMD09PW0/dGhpcy5sZW5ndGg6bT4+PjAscnx8KHI9MCksIm51bWJlciI9PXR5cGVvZiByKWZvcigkPWE7JDxtOysrJCl0aGlzWyRdPXI7ZWxzZXt2YXIgRHQ9aS5pc0J1ZmZlcihyKT9yOmkuZnJvbShyLHcpLF89RHQubGVuZ3RoO2lm''@;'; put 'put ''KDA9PT1fKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSAiJytyKyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3IoJD0wOyQ8bS1hOysrJCl0aGlzWyQrYV09RHRbJCVfXX1yZXR1cm4gdGhpc307dmFyIHNuPS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24g''@;'; put 'put ''WXQoaCxyKXtyPXJ8fDEvMDtmb3IodmFyIGEsbT1oLmxlbmd0aCx3PW51bGwsSz1bXSwkPTA7JDxtOysrJCl7aWYoKGE9aC5jaGFyQ29kZUF0KCQpKT41NTI5NSYmYTw1NzM0NCl7aWYoIXcpe2lmKGE+NTYzMTkpeyhyLT0zKT4tMSYmSy5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZigk''@;'; put 'put ''KzE9PT1tKXsoci09Myk+LTEmJksucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9dz1hO2NvbnRpbnVlfWlmKGE8NTYzMjApeyhyLT0zKT4tMSYmSy5wdXNoKDIzOSwxOTEsMTg5KSx3PWE7Y29udGludWV9YT02NTUzNisody01NTI5Njw8MTB8YS01NjMyMCl9ZWxzZSB3JiYoci09Myk+LTEm''@;'; put 'put ''JksucHVzaCgyMzksMTkxLDE4OSk7aWYodz1udWxsLGE8MTI4KXtpZigoci09MSk8MClicmVhaztLLnB1c2goYSl9ZWxzZSBpZihhPDIwNDgpe2lmKChyLT0yKTwwKWJyZWFrO0sucHVzaChhPj42fDE5Miw2MyZhfDEyOCl9ZWxzZSBpZihhPDY1NTM2KXtpZigoci09Myk8MClicmVhaztLLnB1''@;'; put 'put ''c2goYT4+MTJ8MjI0LGE+PjYmNjN8MTI4LDYzJmF8MTI4KX1lbHNle2lmKCEoYTwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChyLT00KTwwKWJyZWFrO0sucHVzaChhPj4xOHwyNDAsYT4+MTImNjN8MTI4LGE+PjYmNjN8MTI4LDYzJmF8MTI4KX19''@;'; put 'put ''cmV0dXJuIEt9ZnVuY3Rpb24gaG4oaCl7cmV0dXJuIG4udG9CeXRlQXJyYXkoZnVuY3Rpb24gRW4oaCl7aWYoKGg9KGg9aC5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShzbiwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7aC5sZW5ndGglNCE9MDspaCs9Ij0iO3JldHVybiBofSho''@;'; put 'put ''KSl9ZnVuY3Rpb24gb24oaCxyLGEsbSl7Zm9yKHZhciB3PTA7dzxtJiYhKHcrYT49ci5sZW5ndGh8fHc+PWgubGVuZ3RoKTsrK3cpclt3K2FdPWhbd107cmV0dXJuIHd9ZnVuY3Rpb24gbm4oaCxyKXtyZXR1cm4gaCBpbnN0YW5jZW9mIHJ8fG51bGwhPWgmJm51bGwhPWguY29uc3RydWN0b3Im''@;'; put 'put ''Jm51bGwhPWguY29uc3RydWN0b3IubmFtZSYmaC5jb25zdHJ1Y3Rvci5uYW1lPT09ci5uYW1lfWZ1bmN0aW9uIHluKGgpe3JldHVybiBoIT1ofXZhciBUbj1mdW5jdGlvbigpe2Zvcih2YXIgaD0iMDEyMzQ1Njc4OWFiY2RlZiIscj1uZXcgQXJyYXkoMjU2KSxhPTA7YTwxNjsrK2EpZm9yKHZh''@;'; put 'put ''ciBtPTE2KmEsdz0wO3c8MTY7Kyt3KXJbbSt3XT1oW2FdK2hbd107cmV0dXJuIHJ9KCl9LDIyMDIwKGMsZil7Zi5yZWFkPWZ1bmN0aW9uKHQsbixlLHMsbyl7dmFyIHUsbCxpPTgqby1zLTEsdj0oMTw8aSktMSxwPXY+PjEsZD0tNyx5PWU/by0xOjAsRT1lPy0xOjEsZz10W24reV07Zm9yKHkr''@;'; put 'put ''PUUsdT1nJigxPDwtZCktMSxnPj49LWQsZCs9aTtkPjA7dT0yNTYqdSt0W24reV0seSs9RSxkLT04KTtmb3IobD11JigxPDwtZCktMSx1Pj49LWQsZCs9cztkPjA7bD0yNTYqbCt0W24reV0seSs9RSxkLT04KTtpZigwPT09dSl1PTEtcDtlbHNle2lmKHU9PT12KXJldHVybiBsP05hTjoxLzAq''@;'; put 'put ''KGc/LTE6MSk7bCs9TWF0aC5wb3coMixzKSx1LT1wfXJldHVybihnPy0xOjEpKmwqTWF0aC5wb3coMix1LXMpfSxmLndyaXRlPWZ1bmN0aW9uKHQsbixlLHMsbyx1KXt2YXIgbCxpLHYscD04KnUtby0xLGQ9KDE8PHApLTEseT1kPj4xLEU9MjM9PT1vP01hdGgucG93KDIsLTI0KS1NYXRoLnBv''@;'; put 'put ''dygyLC03Nyk6MCxnPXM/MDp1LTEsRD1zPzE6LTEsRj1uPDB8fDA9PT1uJiYxL248MD8xOjA7Zm9yKG49TWF0aC5hYnMobiksaXNOYU4obil8fG49PT0xLzA/KGk9aXNOYU4obik/MTowLGw9ZCk6KGw9TWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMiksbioodj1NYXRoLnBvdygyLC1s''@;'; put 'put ''KSk8MSYmKGwtLSx2Kj0yKSwobis9bCt5Pj0xP0UvdjpFKk1hdGgucG93KDIsMS15KSkqdj49MiYmKGwrKyx2Lz0yKSxsK3k+PWQ/KGk9MCxsPWQpOmwreT49MT8oaT0obip2LTEpKk1hdGgucG93KDIsbyksbCs9eSk6KGk9bipNYXRoLnBvdygyLHktMSkqTWF0aC5wb3coMixvKSxsPTApKTtv''@;'; put 'put ''Pj04O3RbZStnXT0yNTUmaSxnKz1ELGkvPTI1NixvLT04KTtmb3IobD1sPDxvfGkscCs9bztwPjA7dFtlK2ddPTI1NSZsLGcrPUQsbC89MjU2LHAtPTgpO3RbZStnLURdfD0xMjgqRn19LDk2OTM1KCl7InVzZSBzdHJpY3QiO2NvbnN0IGM9Z2xvYmFsVGhpcztmdW5jdGlvbiBmKFMpe3JldHVy''@;'; put 'put ''bihjLl9fWm9uZV9zeW1ib2xfcHJlZml4fHwiX196b25lX3N5bWJvbF9fIikrU31jb25zdCBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iscz1PYmplY3QuZGVmaW5lUHJvcGVydHksbz1PYmplY3QuZ2V0UHJvdG90eXBlT2YsdT1PYmplY3QuY3JlYXRlLGw9QXJyYXkucHJvdG90''@;'; put 'put ''eXBlLnNsaWNlLGk9ImFkZEV2ZW50TGlzdGVuZXIiLHY9InJlbW92ZUV2ZW50TGlzdGVuZXIiLHA9ZihpKSxkPWYodikseT0idHJ1ZSIsRT0iZmFsc2UiLGc9ZigiIik7ZnVuY3Rpb24gRChTLFIpe3JldHVybiBab25lLmN1cnJlbnQud3JhcChTLFIpfWZ1bmN0aW9uIEYoUyxSLEwsTyxOKXty''@;'; put 'put ''ZXR1cm4gWm9uZS5jdXJyZW50LnNjaGVkdWxlTWFjcm9UYXNrKFMsUixMLE8sTil9Y29uc3QgeD1mLEE9dHlwZW9mIHdpbmRvdzwidSIsaz1BP3dpbmRvdzp2b2lkIDAsUD1BJiZrfHxnbG9iYWxUaGlzO2Z1bmN0aW9uIFQoUyxSKXtmb3IobGV0IEw9Uy5sZW5ndGgtMTtMPj0wO0wtLSkiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgU1tMXSYmKFNbTF09RChTW0xdLFIrIl8iK0wpKTtyZXR1cm4gU31mdW5jdGlvbiBCKFMpe3JldHVybiFTfHwhMSE9PVMud3JpdGFibGUmJiEoImZ1bmN0aW9uIj09dHlwZW9mIFMuZ2V0JiZ0eXBlb2YgUy5zZXQ+InUiKX1jb25zdCBVPXR5cGVvZiBXb3JrZXJHbG9i''@;'; put 'put ''YWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSxaPSEoIm53ImluIFApJiZ0eXBlb2YgUC5wcm9jZXNzPCJ1IiYmIltvYmplY3QgcHJvY2Vzc10iPT09UC5wcm9jZXNzLnRvU3RyaW5nKCksbnQ9IVomJiFVJiYhKCFBfHwhay5IVE1MRWxlbWVudCksdHQ9dHlw''@;'; put 'put ''ZW9mIFAucHJvY2VzczwidSImJiJbb2JqZWN0IHByb2Nlc3NdIj09PVAucHJvY2Vzcy50b1N0cmluZygpJiYhVSYmISghQXx8IWsuSFRNTEVsZW1lbnQpLHl0PXt9LG10PXgoImVuYWJsZV9iZWZvcmV1bmxvYWQiKSxxPWZ1bmN0aW9uKFMpe2lmKCEoUz1TfHxQLmV2ZW50KSlyZXR1cm47bGV0''@;'; put 'put ''IFI9eXRbUy50eXBlXTtSfHwoUj15dFtTLnR5cGVdPXgoIk9OX1BST1BFUlRZIitTLnR5cGUpKTtjb25zdCBMPXRoaXN8fFMudGFyZ2V0fHxQLE89TFtSXTtsZXQgTjtyZXR1cm4gbnQmJkw9PT1rJiYiZXJyb3IiPT09Uy50eXBlPyhOPU8mJk8uY2FsbCh0aGlzLFMubWVzc2FnZSxTLmZpbGVu''@;'; put 'put ''YW1lLFMubGluZW5vLFMuY29sbm8sUy5lcnJvciksITA9PT1OJiZTLnByZXZlbnREZWZhdWx0KCkpOihOPU8mJk8uYXBwbHkodGhpcyxhcmd1bWVudHMpLCJiZWZvcmV1bmxvYWQiPT09Uy50eXBlJiZQW210XSYmInN0cmluZyI9PXR5cGVvZiBOP1MucmV0dXJuVmFsdWU9TjpudWxsIT1OJiYh''@;'; put 'put ''TiYmUy5wcmV2ZW50RGVmYXVsdCgpKSxOfTtmdW5jdGlvbiBYKFMsUixMKXtsZXQgTz1lKFMsUik7aWYoIU8mJkwmJmUoTCxSKSYmKE89e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksIU98fCFPLmNvbmZpZ3VyYWJsZSlyZXR1cm47Y29uc3QgTj14KCJvbiIrUisicGF0Y2hlZCIp''@;'; put 'put ''O2lmKFMuaGFzT3duUHJvcGVydHkoTikmJlNbTl0pcmV0dXJuO2RlbGV0ZSBPLndyaXRhYmxlLGRlbGV0ZSBPLnZhbHVlO2NvbnN0IEo9Ty5nZXQsc3Q9Ty5zZXQsb3Q9Ui5zbGljZSgyKTtsZXQgZnQ9eXRbb3RdO2Z0fHwoZnQ9eXRbb3RdPXgoIk9OX1BST1BFUlRZIitvdCkpLE8uc2V0PWZ1''@;'; put 'put ''bmN0aW9uKFN0KXtsZXQgcnQ9dGhpczshcnQmJlM9PT1QJiYocnQ9UCkscnQmJigiZnVuY3Rpb24iPT10eXBlb2YgcnRbZnRdJiZydC5yZW1vdmVFdmVudExpc3RlbmVyKG90LHEpLHN0Py5jYWxsKHJ0LG51bGwpLHJ0W2Z0XT1TdCwiZnVuY3Rpb24iPT10eXBlb2YgU3QmJnJ0LmFkZEV2ZW50''@;'; put 'put ''TGlzdGVuZXIob3QscSwhMSkpfSxPLmdldD1mdW5jdGlvbigpe2xldCBTdD10aGlzO2lmKCFTdCYmUz09PVAmJihTdD1QKSwhU3QpcmV0dXJuIG51bGw7Y29uc3QgcnQ9U3RbZnRdO2lmKHJ0KXJldHVybiBydDtpZihKKXtsZXQgeHQ9Si5jYWxsKHRoaXMpO2lmKHh0KXJldHVybiBPLnNldC5j''@;'; put 'put ''YWxsKHRoaXMseHQpLCJmdW5jdGlvbiI9PXR5cGVvZiBTdC5yZW1vdmVBdHRyaWJ1dGUmJlN0LnJlbW92ZUF0dHJpYnV0ZShSKSx4dH1yZXR1cm4gbnVsbH0scyhTLFIsTyksU1tOXT0hMH1mdW5jdGlvbiBldChTLFIsTCl7aWYoUilmb3IobGV0IE89MDtPPFIubGVuZ3RoO08rKylYKFMsIm9u''@;'; put 'put ''IitSW09dLEwpO2Vsc2V7Y29uc3QgTz1bXTtmb3IoY29uc3QgTiBpbiBTKSJvbiI9PU4uc2xpY2UoMCwyKSYmTy5wdXNoKE4pO2ZvcihsZXQgTj0wO048Ty5sZW5ndGg7TisrKVgoUyxPW05dLEwpfX1jb25zdCBWPXgoIm9yaWdpbmFsSW5zdGFuY2UiKTtmdW5jdGlvbiBsdChTKXtjb25zdCBS''@;'; put 'put ''PVBbU107aWYoIVIpcmV0dXJuO1BbeChTKV09UixQW1NdPWZ1bmN0aW9uKCl7Y29uc3QgTj1UKGFyZ3VtZW50cyxTKTtzd2l0Y2goTi5sZW5ndGgpe2Nhc2UgMDp0aGlzW1ZdPW5ldyBSO2JyZWFrO2Nhc2UgMTp0aGlzW1ZdPW5ldyBSKE5bMF0pO2JyZWFrO2Nhc2UgMjp0aGlzW1ZdPW5ldyBS''@;'; put 'put ''KE5bMF0sTlsxXSk7YnJlYWs7Y2FzZSAzOnRoaXNbVl09bmV3IFIoTlswXSxOWzFdLE5bMl0pO2JyZWFrO2Nhc2UgNDp0aGlzW1ZdPW5ldyBSKE5bMF0sTlsxXSxOWzJdLE5bM10pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJBcmcgbGlzdCB0b28gbG9uZy4iKX19LE90KFBbU10s''@;'; put 'put ''Uik7Y29uc3QgTD1uZXcgUihmdW5jdGlvbigpe30pO2xldCBPO2ZvcihPIGluIEwpIlhNTEh0dHBSZXF1ZXN0Ij09PVMmJiJyZXNwb25zZUJsb2IiPT09T3x8ZnVuY3Rpb24oTil7ImZ1bmN0aW9uIj09dHlwZW9mIExbTl0/UFtTXS5wcm90b3R5cGVbTl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhp''@;'; put 'put ''c1tWXVtOXS5hcHBseSh0aGlzW1ZdLGFyZ3VtZW50cyl9OnMoUFtTXS5wcm90b3R5cGUsTix7c2V0OmZ1bmN0aW9uKEopeyJmdW5jdGlvbiI9PXR5cGVvZiBKPyh0aGlzW1ZdW05dPUQoSixTKyIuIitOKSxPdCh0aGlzW1ZdW05dLEopKTp0aGlzW1ZdW05dPUp9LGdldDpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzW1ZdW05dfX0pfShPKTtmb3IoTyBpbiBSKSJwcm90b3R5cGUiIT09TyYmUi5oYXNPd25Qcm9wZXJ0eShPKSYmKFBbU11bT109UltPXSl9ZnVuY3Rpb24gZHQoUyxSLEwpe2xldCBPPVM7Zm9yKDtPJiYhTy5oYXNPd25Qcm9wZXJ0eShSKTspTz1vKE8pOyFPJiZTW1JdJiYoTz1T''@;'; put 'put ''KTtjb25zdCBOPXgoUik7bGV0IEo9bnVsbDtpZihPJiYoIShKPU9bTl0pfHwhTy5oYXNPd25Qcm9wZXJ0eShOKSkmJihKPU9bTl09T1tSXSxCKE8mJmUoTyxSKSkpKXtjb25zdCBvdD1MKEosTixSKTtPW1JdPWZ1bmN0aW9uKCl7cmV0dXJuIG90KHRoaXMsYXJndW1lbnRzKX0sT3QoT1tSXSxK''@;'; put 'put ''KX1yZXR1cm4gSn1mdW5jdGlvbiBDdChTLFIsTCl7bGV0IE89bnVsbDtmdW5jdGlvbiBOKEope2NvbnN0IHN0PUouZGF0YTtyZXR1cm4gc3QuYXJnc1tzdC5jYklkeF09ZnVuY3Rpb24oKXtKLmludm9rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LE8uYXBwbHkoc3QudGFyZ2V0LHN0LmFyZ3Mp''@;'; put 'put ''LEp9Tz1kdChTLFIsSj0+ZnVuY3Rpb24oc3Qsb3Qpe2NvbnN0IGZ0PUwoc3Qsb3QpO3JldHVybiBmdC5jYklkeD49MCYmImZ1bmN0aW9uIj09dHlwZW9mIG90W2Z0LmNiSWR4XT9GKGZ0Lm5hbWUsb3RbZnQuY2JJZHhdLGZ0LE4pOkouYXBwbHkoc3Qsb3QpfSl9ZnVuY3Rpb24gT3QoUyxSKXtT''@;'; put 'put ''W3goIk9yaWdpbmFsRGVsZWdhdGUiKV09Un1sZXQgTnQ9ITEsUXQ9ITE7ZnVuY3Rpb24gYW4oKXtpZihOdClyZXR1cm4gUXQ7TnQ9ITA7dHJ5e2NvbnN0IFM9ay5uYXZpZ2F0b3IudXNlckFnZW50OygtMSE9PVMuaW5kZXhPZigiTVNJRSAiKXx8LTEhPT1TLmluZGV4T2YoIlRyaWRlbnQvIil8''@;'; put 'put ''fC0xIT09Uy5pbmRleE9mKCJFZGdlLyIpKSYmKFF0PSEwKX1jYXRjaHt9cmV0dXJuIFF0fWZ1bmN0aW9uIEd0KFMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBTfWZ1bmN0aW9uIHNuKFMpe3JldHVybiJudW1iZXIiPT10eXBlb2YgU31jb25zdCBFbj17dXNlRzohMH0sWXQ9e30scG49e30s''@;'; put 'put ''eG49bmV3IFJlZ0V4cCgiXiIrZysiKFxcdyspKHRydWV8ZmFsc2UpJCIpLGhuPXgoInByb3BhZ2F0aW9uU3RvcHBlZCIpO2Z1bmN0aW9uIG9uKFMsUil7Y29uc3QgTD0oUj9SKFMpOlMpK0UsTz0oUj9SKFMpOlMpK3ksTj1nK0wsSj1nK087WXRbU109e30sWXRbU11bRV09TixZdFtTXVt5XT1K''@;'; put 'put ''fWZ1bmN0aW9uIG5uKFMsUixMLE8pe2NvbnN0IE49TyYmTy5hZGR8fGksSj1PJiZPLnJtfHx2LHN0PU8mJk8ubGlzdGVuZXJzfHwiZXZlbnRMaXN0ZW5lcnMiLG90PU8mJk8ucm1BbGx8fCJyZW1vdmVBbGxMaXN0ZW5lcnMiLGZ0PXgoTiksU3Q9Ii4iK04rIjoiLHJ0PSJwcmVwZW5kTGlzdGVu''@;'; put 'put ''ZXIiLHh0PSIuIitydCsiOiIsYnQ9ZnVuY3Rpb24odnQsWSxqdCl7aWYodnQuaXNSZW1vdmVkKXJldHVybjtjb25zdCBMdD12dC5jYWxsYmFjaztsZXQgWHQ7Im9iamVjdCI9PXR5cGVvZiBMdCYmTHQuaGFuZGxlRXZlbnQmJih2dC5jYWxsYmFjaz11dD0+THQuaGFuZGxlRXZlbnQodXQpLHZ0''@;'; put 'put ''Lm9yaWdpbmFsRGVsZWdhdGU9THQpO3RyeXt2dC5pbnZva2UodnQsWSxbanRdKX1jYXRjaCh1dCl7WHQ9dXR9Y29uc3QgS3Q9dnQub3B0aW9ucztyZXR1cm4gS3QmJiJvYmplY3QiPT10eXBlb2YgS3QmJkt0Lm9uY2UmJllbSl0uY2FsbChZLGp0LnR5cGUsdnQub3JpZ2luYWxEZWxlZ2F0ZT92''@;'; put 'put ''dC5vcmlnaW5hbERlbGVnYXRlOnZ0LmNhbGxiYWNrLEt0KSxYdH07ZnVuY3Rpb24gQnQodnQsWSxqdCl7aWYoIShZPVl8fFMuZXZlbnQpKXJldHVybjtjb25zdCBMdD12dHx8WS50YXJnZXR8fFMsWHQ9THRbWXRbWS50eXBlXVtqdD95OkVdXTtpZihYdCl7Y29uc3QgS3Q9W107aWYoMT09PVh0''@;'; put 'put ''Lmxlbmd0aCl7Y29uc3QgdXQ9YnQoWHRbMF0sTHQsWSk7dXQmJkt0LnB1c2godXQpfWVsc2V7Y29uc3QgdXQ9WHQuc2xpY2UoKTtmb3IobGV0IFd0PTA7V3Q8dXQubGVuZ3RoJiYoIVl8fCEwIT09WVtobl0pO1d0Kyspe2NvbnN0IEl0PWJ0KHV0W1d0XSxMdCxZKTtJdCYmS3QucHVzaChJdCl9''@;'; put 'put ''fWlmKDE9PT1LdC5sZW5ndGgpdGhyb3cgS3RbMF07Zm9yKGxldCB1dD0wO3V0PEt0Lmxlbmd0aDt1dCsrKXtjb25zdCBXdD1LdFt1dF07Ui5uYXRpdmVTY2hlZHVsZU1pY3JvVGFzaygoKT0+e3Rocm93IFd0fSl9fX1jb25zdCBIdD1mdW5jdGlvbih2dCl7cmV0dXJuIEJ0KHRoaXMsdnQsITEp''@;'; put 'put ''fSxfdD1mdW5jdGlvbih2dCl7cmV0dXJuIEJ0KHRoaXMsdnQsITApfTtmdW5jdGlvbiB0bih2dCxZKXtpZighdnQpcmV0dXJuITE7bGV0IGp0PSEwO1kmJnZvaWQgMCE9PVkudXNlRyYmKGp0PVkudXNlRyk7Y29uc3QgTHQ9WSYmWS52aDtsZXQgWHQ9ITA7WSYmdm9pZCAwIT09WS5jaGtEdXAm''@;'; put 'put ''JihYdD1ZLmNoa0R1cCk7bGV0IEt0PSExO1kmJnZvaWQgMCE9PVkucnQmJihLdD1ZLnJ0KTtsZXQgdXQ9dnQ7Zm9yKDt1dCYmIXV0Lmhhc093blByb3BlcnR5KE4pOyl1dD1vKHV0KTtpZighdXQmJnZ0W05dJiYodXQ9dnQpLCF1dHx8dXRbZnRdKXJldHVybiExO2NvbnN0IFd0PVkmJlkuZXZl''@;'; put 'put ''bnROYW1lVG9TdHJpbmcsSXQ9e30sVHQ9dXRbZnRdPXV0W05dLGd0PXV0W3goSildPXV0W0pdLFB0PXV0W3goc3QpXT11dFtzdF0sZW49dXRbeChvdCldPXV0W290XTtsZXQgSnQ7WSYmWS5wcmVwZW5kJiYoSnQ9dXRbeChZLnByZXBlbmQpXT11dFtZLnByZXBlbmRdKTtjb25zdCBadD1qdD9m''@;'; put 'put ''dW5jdGlvbihqKXtpZighSXQuaXNFeGlzdGluZylyZXR1cm4gVHQuY2FsbChJdC50YXJnZXQsSXQuZXZlbnROYW1lLEl0LmNhcHR1cmU/X3Q6SHQsSXQub3B0aW9ucyl9OmZ1bmN0aW9uKGope3JldHVybiBUdC5jYWxsKEl0LnRhcmdldCxJdC5ldmVudE5hbWUsai5pbnZva2UsSXQub3B0aW9u''@;'; put 'put ''cyl9LGt0PWp0P2Z1bmN0aW9uKGope2lmKCFqLmlzUmVtb3ZlZCl7Y29uc3QgRz1ZdFtqLmV2ZW50TmFtZV07bGV0IHB0O0cmJihwdD1HW2ouY2FwdHVyZT95OkVdKTtjb25zdCBNdD1wdCYmai50YXJnZXRbcHRdO2lmKE10KWZvcihsZXQgY3Q9MDtjdDxNdC5sZW5ndGg7Y3QrKylpZihNdFtj''@;'; put 'put ''dF09PT1qKXtNdC5zcGxpY2UoY3QsMSksai5pc1JlbW92ZWQ9ITAsai5yZW1vdmVBYm9ydExpc3RlbmVyJiYoai5yZW1vdmVBYm9ydExpc3RlbmVyKCksai5yZW1vdmVBYm9ydExpc3RlbmVyPW51bGwpLDA9PT1NdC5sZW5ndGgmJihqLmFsbFJlbW92ZWQ9ITAsai50YXJnZXRbcHRdPW51bGwp''@;'; put 'put ''O2JyZWFrfX1pZihqLmFsbFJlbW92ZWQpcmV0dXJuIGd0LmNhbGwoai50YXJnZXQsai5ldmVudE5hbWUsai5jYXB0dXJlP190Okh0LGoub3B0aW9ucyl9OmZ1bmN0aW9uKGope3JldHVybiBndC5jYWxsKGoudGFyZ2V0LGouZXZlbnROYW1lLGouaW52b2tlLGoub3B0aW9ucyl9LGRuPVk/LmRp''@;'; put 'put ''ZmZ8fGZ1bmN0aW9uKGosRyl7Y29uc3QgcHQ9dHlwZW9mIEc7cmV0dXJuImZ1bmN0aW9uIj09PXB0JiZqLmNhbGxiYWNrPT09R3x8Im9iamVjdCI9PT1wdCYmai5vcmlnaW5hbERlbGVnYXRlPT09R30sdm49Wm9uZVt4KCJVTlBBVENIRURfRVZFTlRTIildLHVuPVNbeCgiUEFTU0lWRV9FVkVO''@;'; put 'put ''VFMiKV0sVz1mdW5jdGlvbihqLEcscHQsTXQsY3Q9ITEsd3Q9ITEpe3JldHVybiBmdW5jdGlvbigpe2NvbnN0IFJ0PXRoaXN8fFM7bGV0IEZ0PWFyZ3VtZW50c1swXTtZJiZZLnRyYW5zZmVyRXZlbnROYW1lJiYoRnQ9WS50cmFuc2ZlckV2ZW50TmFtZShGdCkpO2xldCAkdD1hcmd1bWVudHNb''@;'; put 'put ''MV07aWYoISR0KXJldHVybiBqLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihaJiYidW5jYXVnaHRFeGNlcHRpb24iPT09RnQpcmV0dXJuIGouYXBwbHkodGhpcyxhcmd1bWVudHMpO2xldCBVdD0hMTtpZigiZnVuY3Rpb24iIT10eXBlb2YgJHQpe2lmKCEkdC5oYW5kbGVFdmVudClyZXR1cm4g''@;'; put 'put ''ai5hcHBseSh0aGlzLGFyZ3VtZW50cyk7VXQ9ITB9aWYoTHQmJiFMdChqLCR0LFJ0LGFyZ3VtZW50cykpcmV0dXJuO2NvbnN0IGduPSEhdW4mJi0xIT09dW4uaW5kZXhPZihGdCksbG49ZnVuY3Rpb24geihqKXtpZigib2JqZWN0Ij09dHlwZW9mIGomJm51bGwhPT1qKXtjb25zdCBHPXsuLi5q''@;'; put 'put ''fTtyZXR1cm4gai5zaWduYWwmJihHLnNpZ25hbD1qLnNpZ25hbCksR31yZXR1cm4gan0oZnVuY3Rpb24gQXQoaixHKXtyZXR1cm4gRz8iYm9vbGVhbiI9PXR5cGVvZiBqP3tjYXB0dXJlOmoscGFzc2l2ZTohMH06aj8ib2JqZWN0Ij09dHlwZW9mIGomJiExIT09ai5wYXNzaXZlP3suLi5qLHBh''@;'; put 'put ''c3NpdmU6ITB9Omo6e3Bhc3NpdmU6ITB9Omp9KGFyZ3VtZW50c1syXSxnbikpLFNuPWxuPy5zaWduYWw7aWYoU24/LmFib3J0ZWQpcmV0dXJuO2lmKHZuKWZvcihsZXQgZm49MDtmbjx2bi5sZW5ndGg7Zm4rKylpZihGdD09PXZuW2ZuXSlyZXR1cm4gZ24/ai5jYWxsKFJ0LEZ0LCR0LGxuKTpq''@;'; put 'put ''LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtjb25zdCBBbj0hIWxuJiYoImJvb2xlYW4iPT10eXBlb2YgbG58fGxuLmNhcHR1cmUpLEZuPSEoIWxufHwib2JqZWN0IiE9dHlwZW9mIGxuKSYmbG4ub25jZSxqbj1ab25lLmN1cnJlbnQ7bGV0IHduPVl0W0Z0XTt3bnx8KG9uKEZ0LFd0KSx3bj1ZdFtG''@;'; put 'put ''dF0pO2NvbnN0IERuPXduW0FuP3k6RV07bGV0IEluLE9uPVJ0W0RuXSxibj0hMTtpZihPbil7aWYoYm49ITAsWHQpZm9yKGxldCBmbj0wO2ZuPE9uLmxlbmd0aDtmbisrKWlmKGRuKE9uW2ZuXSwkdCkpcmV0dXJufWVsc2UgT249UnRbRG5dPVtdO2NvbnN0IENuPVJ0LmNvbnN0cnVjdG9yLm5h''@;'; put 'put ''bWUsa249cG5bQ25dO2tuJiYoSW49a25bRnRdKSxJbnx8KEluPUNuK0crKFd0P1d0KEZ0KTpGdCkpLEl0Lm9wdGlvbnM9bG4sRm4mJihJdC5vcHRpb25zLm9uY2U9ITEpLEl0LnRhcmdldD1SdCxJdC5jYXB0dXJlPUFuLEl0LmV2ZW50TmFtZT1GdCxJdC5pc0V4aXN0aW5nPWJuO2NvbnN0IFBu''@;'; put 'put ''PWp0P0VuOnZvaWQgMDtQbiYmKFBuLnRhc2tEYXRhPUl0KSxTbiYmKEl0Lm9wdGlvbnMuc2lnbmFsPXZvaWQgMCk7Y29uc3QgY249am4uc2NoZWR1bGVFdmVudFRhc2soSW4sJHQsUG4scHQsTXQpO2lmKFNuKXtJdC5vcHRpb25zLnNpZ25hbD1Tbjtjb25zdCBmbj0oKT0+Y24uem9uZS5jYW5j''@;'; put 'put ''ZWxUYXNrKGNuKTtqLmNhbGwoU24sImFib3J0Iixmbix7b25jZTohMH0pLGNuLnJlbW92ZUFib3J0TGlzdGVuZXI9KCk9PlNuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0Iixmbil9cmV0dXJuIEl0LnRhcmdldD1udWxsLFBuJiYoUG4udGFza0RhdGE9bnVsbCksRm4mJihJdC5vcHRpb25z''@;'; put 'put ''Lm9uY2U9ITApLCJib29sZWFuIiE9dHlwZW9mIGNuLm9wdGlvbnMmJihjbi5vcHRpb25zPWxuKSxjbi50YXJnZXQ9UnQsY24uY2FwdHVyZT1Bbixjbi5ldmVudE5hbWU9RnQsVXQmJihjbi5vcmlnaW5hbERlbGVnYXRlPSR0KSx3dD9Pbi51bnNoaWZ0KGNuKTpPbi5wdXNoKGNuKSxjdD9SdDp2''@;'; put 'put ''b2lkIDB9fTtyZXR1cm4gdXRbTl09VyhUdCxTdCxadCxrdCxLdCksSnQmJih1dFtydF09VyhKdCx4dCxmdW5jdGlvbihqKXtyZXR1cm4gSnQuY2FsbChJdC50YXJnZXQsSXQuZXZlbnROYW1lLGouaW52b2tlLEl0Lm9wdGlvbnMpfSxrdCxLdCwhMCkpLHV0W0pdPWZ1bmN0aW9uKCl7Y29uc3Qg''@;'; put 'put ''aj10aGlzfHxTO2xldCBHPWFyZ3VtZW50c1swXTtZJiZZLnRyYW5zZmVyRXZlbnROYW1lJiYoRz1ZLnRyYW5zZmVyRXZlbnROYW1lKEcpKTtjb25zdCBwdD1hcmd1bWVudHNbMl0sTXQ9ISFwdCYmKCJib29sZWFuIj09dHlwZW9mIHB0fHxwdC5jYXB0dXJlKSxjdD1hcmd1bWVudHNbMV07aWYo''@;'; put 'put ''IWN0KXJldHVybiBndC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoTHQmJiFMdChndCxjdCxqLGFyZ3VtZW50cykpcmV0dXJuO2NvbnN0IHd0PVl0W0ddO2xldCBSdDt3dCYmKFJ0PXd0W010P3k6RV0pO2NvbnN0IEZ0PVJ0JiZqW1J0XTtpZihGdClmb3IobGV0ICR0PTA7JHQ8RnQubGVuZ3Ro''@;'; put 'put ''OyR0Kyspe2NvbnN0IFV0PUZ0WyR0XTtpZihkbihVdCxjdCkpcmV0dXJuIEZ0LnNwbGljZSgkdCwxKSxVdC5pc1JlbW92ZWQ9ITAsMCE9PUZ0Lmxlbmd0aHx8KFV0LmFsbFJlbW92ZWQ9ITAsaltSdF09bnVsbCxNdHx8InN0cmluZyIhPXR5cGVvZiBHKXx8KGpbZysiT05fUFJPUEVSVFkiK0dd''@;'; put 'put ''PW51bGwpLFV0LnpvbmUuY2FuY2VsVGFzayhVdCksS3Q/ajp2b2lkIDB9cmV0dXJuIGd0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdXRbc3RdPWZ1bmN0aW9uKCl7Y29uc3Qgaj10aGlzfHxTO2xldCBHPWFyZ3VtZW50c1swXTtZJiZZLnRyYW5zZmVyRXZlbnROYW1lJiYoRz1ZLnRyYW5zZmVy''@;'; put 'put ''RXZlbnROYW1lKEcpKTtjb25zdCBwdD1bXSxNdD15bihqLFd0P1d0KEcpOkcpO2ZvcihsZXQgY3Q9MDtjdDxNdC5sZW5ndGg7Y3QrKyl7Y29uc3Qgd3Q9TXRbY3RdO3B0LnB1c2god3Qub3JpZ2luYWxEZWxlZ2F0ZT93dC5vcmlnaW5hbERlbGVnYXRlOnd0LmNhbGxiYWNrKX1yZXR1cm4gcHR9''@;'; put 'put ''LHV0W290XT1mdW5jdGlvbigpe2NvbnN0IGo9dGhpc3x8UztsZXQgRz1hcmd1bWVudHNbMF07aWYoRyl7WSYmWS50cmFuc2ZlckV2ZW50TmFtZSYmKEc9WS50cmFuc2ZlckV2ZW50TmFtZShHKSk7Y29uc3QgcHQ9WXRbR107aWYocHQpe2NvbnN0IHd0PWpbcHRbRV1dLFJ0PWpbcHRbeV1dO2lm''@;'; put 'put ''KHd0KXtjb25zdCBGdD13dC5zbGljZSgpO2ZvcihsZXQgJHQ9MDskdDxGdC5sZW5ndGg7JHQrKyl7Y29uc3QgVXQ9RnRbJHRdO3RoaXNbSl0uY2FsbCh0aGlzLEcsVXQub3JpZ2luYWxEZWxlZ2F0ZT9VdC5vcmlnaW5hbERlbGVnYXRlOlV0LmNhbGxiYWNrLFV0Lm9wdGlvbnMpfX1pZihSdCl7''@;'; put 'put ''Y29uc3QgRnQ9UnQuc2xpY2UoKTtmb3IobGV0ICR0PTA7JHQ8RnQubGVuZ3RoOyR0Kyspe2NvbnN0IFV0PUZ0WyR0XTt0aGlzW0pdLmNhbGwodGhpcyxHLFV0Lm9yaWdpbmFsRGVsZWdhdGU/VXQub3JpZ2luYWxEZWxlZ2F0ZTpVdC5jYWxsYmFjayxVdC5vcHRpb25zKX19fX1lbHNle2NvbnN0''@;'; put 'put ''IHB0PU9iamVjdC5rZXlzKGopO2ZvcihsZXQgTXQ9MDtNdDxwdC5sZW5ndGg7TXQrKyl7Y29uc3Qgd3Q9eG4uZXhlYyhwdFtNdF0pO2xldCBSdD13dCYmd3RbMV07UnQmJiJyZW1vdmVMaXN0ZW5lciIhPT1SdCYmdGhpc1tvdF0uY2FsbCh0aGlzLFJ0KX10aGlzW290XS5jYWxsKHRoaXMsInJl''@;'; put 'put ''bW92ZUxpc3RlbmVyIil9aWYoS3QpcmV0dXJuIHRoaXN9LE90KHV0W05dLFR0KSxPdCh1dFtKXSxndCksZW4mJk90KHV0W290XSxlbiksUHQmJk90KHV0W3N0XSxQdCksITB9bGV0IFZ0PVtdO2ZvcihsZXQgdnQ9MDt2dDxMLmxlbmd0aDt2dCsrKVZ0W3Z0XT10bihMW3Z0XSxPKTtyZXR1cm4g''@;'; put 'put ''VnR9ZnVuY3Rpb24geW4oUyxSKXtpZighUil7Y29uc3QgSj1bXTtmb3IobGV0IHN0IGluIFMpe2NvbnN0IG90PXhuLmV4ZWMoc3QpO2xldCBmdD1vdCYmb3RbMV07aWYoZnQmJighUnx8ZnQ9PT1SKSl7Y29uc3QgU3Q9U1tzdF07aWYoU3QpZm9yKGxldCBydD0wO3J0PFN0Lmxlbmd0aDtydCsr''@;'; put 'put ''KUoucHVzaChTdFtydF0pfX1yZXR1cm4gSn1sZXQgTD1ZdFtSXTtMfHwob24oUiksTD1ZdFtSXSk7Y29uc3QgTz1TW0xbRV1dLE49U1tMW3ldXTtyZXR1cm4gTz9OP08uY29uY2F0KE4pOk8uc2xpY2UoKTpOP04uc2xpY2UoKTpbXX1mdW5jdGlvbiBUbihTLFIpe2NvbnN0IEw9Uy5FdmVudDtM''@;'; put 'put ''JiZMLnByb3RvdHlwZSYmUi5wYXRjaE1ldGhvZChMLnByb3RvdHlwZSwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIixPPT5mdW5jdGlvbihOLEope05baG5dPSEwLE8mJk8uYXBwbHkoTixKKX0pfWNvbnN0IHI9eCgiem9uZVRhc2siKTtmdW5jdGlvbiBhKFMsUixMLE8pe2xldCBOPW51bGws''@;'; put 'put ''Sj1udWxsO0wrPU87Y29uc3Qgc3Q9e307ZnVuY3Rpb24gb3QoU3Qpe2NvbnN0IHJ0PVN0LmRhdGE7cnQuYXJnc1swXT1mdW5jdGlvbigpe3JldHVybiBTdC5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjb25zdCB4dD1OLmFwcGx5KFMscnQuYXJncyk7cmV0dXJuIHNuKHh0KT9ydC5o''@;'; put 'put ''YW5kbGVJZD14dDoocnQuaGFuZGxlPXh0LHJ0LmlzUmVmcmVzaGFibGU9R3QoeHQucmVmcmVzaCkpLFN0fWZ1bmN0aW9uIGZ0KFN0KXtjb25zdHtoYW5kbGU6cnQsaGFuZGxlSWQ6eHR9PVN0LmRhdGE7cmV0dXJuIEouY2FsbChTLHJ0Pz94dCl9Tj1kdChTLFIrPU8sU3Q9PmZ1bmN0aW9uKHJ0''@;'; put 'put ''LHh0KXtpZihHdCh4dFswXSkpe2NvbnN0IGJ0PXtpc1JlZnJlc2hhYmxlOiExLGlzUGVyaW9kaWM6IkludGVydmFsIj09PU8sZGVsYXk6IlRpbWVvdXQiPT09T3x8IkludGVydmFsIj09PU8/eHRbMV18fDA6dm9pZCAwLGFyZ3M6eHR9LEJ0PXh0WzBdO3h0WzBdPWZ1bmN0aW9uKCl7dHJ5e3Jl''@;'; put 'put ''dHVybiBCdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtjb25zdHtoYW5kbGU6anQsaGFuZGxlSWQ6THQsaXNQZXJpb2RpYzpYdCxpc1JlZnJlc2hhYmxlOkt0fT1idDshWHQmJiFLdCYmKEx0P2RlbGV0ZSBzdFtMdF06anQmJihqdFtyXT1udWxsKSl9fTtjb25zdCBIdD1GKFIseHRb''@;'; put 'put ''MF0sYnQsb3QsZnQpO2lmKCFIdClyZXR1cm4gSHQ7Y29uc3R7aGFuZGxlSWQ6X3QsaGFuZGxlOnRuLGlzUmVmcmVzaGFibGU6VnQsaXNQZXJpb2RpYzp2dH09SHQuZGF0YTtpZihfdClzdFtfdF09SHQ7ZWxzZSBpZih0biYmKHRuW3JdPUh0LFZ0JiYhdnQpKXtjb25zdCBZPXRuLnJlZnJlc2g7''@;'; put 'put ''dG4ucmVmcmVzaD1mdW5jdGlvbigpe2NvbnN0e3pvbmU6anQsc3RhdGU6THR9PUh0O3JldHVybiJub3RTY2hlZHVsZWQiPT09THQ/KEh0Ll9zdGF0ZT0ic2NoZWR1bGVkIixqdC5fdXBkYXRlVGFza0NvdW50KEh0LDEpKToicnVubmluZyI9PT1MdCYmKEh0Ll9zdGF0ZT0ic2NoZWR1bGluZyIp''@;'; put 'put ''LFkuY2FsbCh0aGlzKX19cmV0dXJuIHRuPz9fdD8/SHR9cmV0dXJuIFN0LmFwcGx5KFMseHQpfSksSj1kdChTLEwsU3Q9PmZ1bmN0aW9uKHJ0LHh0KXtjb25zdCBidD14dFswXTtsZXQgQnQ7c24oYnQpPyhCdD1zdFtidF0sZGVsZXRlIHN0W2J0XSk6KEJ0PWJ0Py5bcl0sQnQ/YnRbcl09bnVs''@;'; put 'put ''bDpCdD1idCksQnQ/LnR5cGU/QnQuY2FuY2VsRm4mJkJ0LnpvbmUuY2FuY2VsVGFzayhCdCk6U3QuYXBwbHkoUyx4dCl9KX1mdW5jdGlvbiAkKFMsUixMKXtpZighTHx8MD09PUwubGVuZ3RoKXJldHVybiBSO2NvbnN0IE89TC5maWx0ZXIoSj0+Si50YXJnZXQ9PT1TKTtpZigwPT09Ty5sZW5n''@;'; put 'put ''dGgpcmV0dXJuIFI7Y29uc3QgTj1PWzBdLmlnbm9yZVByb3BlcnRpZXM7cmV0dXJuIFIuZmlsdGVyKEo9Pi0xPT09Ti5pbmRleE9mKEopKX1mdW5jdGlvbiBEdChTLFIsTCxPKXtTJiZldChTLCQoUyxSLEwpLE8pfWZ1bmN0aW9uIF8oUyl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5h''@;'; put 'put ''bWVzKFMpLmZpbHRlcihSPT5SLnN0YXJ0c1dpdGgoIm9uIikmJlIubGVuZ3RoPjIpLm1hcChSPT5SLnN1YnN0cmluZygyKSl9ZnVuY3Rpb24gcXQoUyxSLEwsTyxOKXtjb25zdCBKPVpvbmUuX19zeW1ib2xfXyhPKTtpZihSW0pdKXJldHVybjtjb25zdCBzdD1SW0pdPVJbT107UltPXT1mdW5j''@;'; put 'put ''dGlvbihvdCxmdCxTdCl7cmV0dXJuIGZ0JiZmdC5wcm90b3R5cGUmJk4uZm9yRWFjaChmdW5jdGlvbihydCl7Y29uc3QgeHQ9YCR7TH0uJHtPfTo6YCtydCxidD1mdC5wcm90b3R5cGU7dHJ5e2lmKGJ0Lmhhc093blByb3BlcnR5KHJ0KSl7Y29uc3QgQnQ9Uy5PYmplY3RHZXRPd25Qcm9wZXJ0''@;'; put 'put ''eURlc2NyaXB0b3IoYnQscnQpO0J0JiZCdC52YWx1ZT8oQnQudmFsdWU9Uy53cmFwV2l0aEN1cnJlbnRab25lKEJ0LnZhbHVlLHh0KSxTLl9yZWRlZmluZVByb3BlcnR5KGZ0LnByb3RvdHlwZSxydCxCdCkpOmJ0W3J0XSYmKGJ0W3J0XT1TLndyYXBXaXRoQ3VycmVudFpvbmUoYnRbcnRdLHh0''@;'; put 'put ''KSl9ZWxzZSBidFtydF0mJihidFtydF09Uy53cmFwV2l0aEN1cnJlbnRab25lKGJ0W3J0XSx4dCkpfWNhdGNoe319KSxzdC5jYWxsKFIsb3QsZnQsU3QpfSxTLmF0dGFjaE9yaWdpblRvUGF0Y2hlZChSW09dLHN0KX1jb25zdCBSbj1mdW5jdGlvbiBuKCl7Y29uc3QgUz1nbG9iYWxUaGlzLFI9''@;'; put 'put ''ITA9PT1TW2YoImZvcmNlRHVwbGljYXRlWm9uZUNoZWNrIildO2lmKFMuWm9uZSYmKFJ8fCJmdW5jdGlvbiIhPXR5cGVvZiBTLlpvbmUuX19zeW1ib2xfXykpdGhyb3cgbmV3IEVycm9yKCJab25lIGFscmVhZHkgbG9hZGVkLiIpO3JldHVybiBTLlpvbmU/Pz1mdW5jdGlvbiB0KCl7Y29uc3Qg''@;'; put 'put ''Uz1jLnBlcmZvcm1hbmNlO2Z1bmN0aW9uIFIoQXQpe1MmJlMubWFyayYmUy5tYXJrKEF0KX1mdW5jdGlvbiBMKEF0LGF0KXtTJiZTLm1lYXN1cmUmJlMubWVhc3VyZShBdCxhdCl9UigiWm9uZSIpO2xldCBPPSgoKT0+e2NsYXNzIEF0e3N0YXRpYyBfX3N5bWJvbF9fPWY7c3RhdGljIGFzc2Vy''@;'; put 'put ''dFpvbmVQYXRjaGVkKCl7aWYoYy5Qcm9taXNlIT09SXQuWm9uZUF3YXJlUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmUuanMgaGFzIGRldGVjdGVkIHRoYXQgWm9uZUF3YXJlUHJvbWlzZSBgKHdpbmRvd3xnbG9iYWwpLlByb21pc2VgIGhhcyBiZWVuIG92ZXJ3cml0dGVuLlxuTW9zdCBs''@;'; put 'put ''aWtlbHkgY2F1c2UgaXMgdGhhdCBhIFByb21pc2UgcG9seWZpbGwgaGFzIGJlZW4gbG9hZGVkIGFmdGVyIFpvbmUuanMgKFBvbHlmaWxsaW5nIFByb21pc2UgYXBpIGlzIG5vdCBuZWNlc3Nhcnkgd2hlbiB6b25lLmpzIGlzIGxvYWRlZC4gSWYgeW91IG11c3QgbG9hZCBvbmUsIGRvIHNvIGJl''@;'; put 'put ''Zm9yZSBsb2FkaW5nIHpvbmUuanMuKSIpfXN0YXRpYyBnZXQgcm9vdCgpe2xldCBJPUF0LmN1cnJlbnQ7Zm9yKDtJLnBhcmVudDspST1JLnBhcmVudDtyZXR1cm4gSX1zdGF0aWMgZ2V0IGN1cnJlbnQoKXtyZXR1cm4gZ3Quem9uZX1zdGF0aWMgZ2V0IGN1cnJlbnRUYXNrKCl7cmV0dXJuIFB0''@;'; put 'put ''fXN0YXRpYyBfX2xvYWRfcGF0Y2goSSxDLGh0PSExKXtpZihJdC5oYXNPd25Qcm9wZXJ0eShJKSl7Y29uc3QgRXQ9ITA9PT1jW2YoImZvcmNlRHVwbGljYXRlWm9uZUNoZWNrIildO2lmKCFodCYmRXQpdGhyb3cgRXJyb3IoIkFscmVhZHkgbG9hZGVkIHBhdGNoOiAiK0kpfWVsc2UgaWYoIWNb''@;'; put 'put ''Il9fWm9uZV9kaXNhYmxlXyIrSV0pe2NvbnN0IEV0PSJab25lOiIrSTtSKEV0KSxJdFtJXT1DKGMsQXQsVHQpLEwoRXQsRXQpfX1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudH1nZXQgbmFtZSgpe3JldHVybiB0aGlzLl9uYW1lfV9wYXJlbnQ7X25hbWU7X3Byb3BlcnRpZXM7X3pv''@;'; put 'put ''bmVEZWxlZ2F0ZTtjb25zdHJ1Y3RvcihJLEMpe3RoaXMuX3BhcmVudD1JLHRoaXMuX25hbWU9Qz9DLm5hbWV8fCJ1bm5hbWVkIjoiPHJvb3Q+Iix0aGlzLl9wcm9wZXJ0aWVzPUMmJkMucHJvcGVydGllc3x8e30sdGhpcy5fem9uZURlbGVnYXRlPW5ldyBKKHRoaXMsdGhpcy5fcGFyZW50JiZ0''@;'; put 'put ''aGlzLl9wYXJlbnQuX3pvbmVEZWxlZ2F0ZSxDKX1nZXQoSSl7Y29uc3QgQz10aGlzLmdldFpvbmVXaXRoKEkpO2lmKEMpcmV0dXJuIEMuX3Byb3BlcnRpZXNbSV19Z2V0Wm9uZVdpdGgoSSl7bGV0IEM9dGhpcztmb3IoO0M7KXtpZihDLl9wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KEkpKXJl''@;'; put 'put ''dHVybiBDO0M9Qy5fcGFyZW50fXJldHVybiBudWxsfWZvcmsoSSl7aWYoIUkpdGhyb3cgbmV3IEVycm9yKCJab25lU3BlYyByZXF1aXJlZCEiKTtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmZvcmsodGhpcyxJKX13cmFwKEksQyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEkpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJFeHBlY3RpbmcgZnVuY3Rpb24gZ290OiAiK0kpO2NvbnN0IGh0PXRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnRlcmNlcHQodGhpcyxJLEMpLEV0PXRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEV0LnJ1bkd1YXJkZWQoaHQsdGhpcyxhcmd1bWVudHMsQyl9fXJ1bihJLEMsaHQs''@;'; put 'put ''RXQpe2d0PXtwYXJlbnQ6Z3Qsem9uZTp0aGlzfTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2UodGhpcyxJLEMsaHQsRXQpfWZpbmFsbHl7Z3Q9Z3QucGFyZW50fX1ydW5HdWFyZGVkKEksQz1udWxsLGh0LEV0KXtndD17cGFyZW50Omd0LHpvbmU6dGhpc307dHJ5e3RyeXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLEksQyxodCxFdCl9Y2F0Y2goWnQpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLFp0KSl0aHJvdyBadH19ZmluYWxseXtndD1ndC5wYXJlbnR9fXJ1blRhc2soSSxDLGh0KXtpZihJLnpvbmUhPXRoaXMp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgcnVuIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKEkuem9uZXx8dG4pLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2NvbnN0IEV0PUkse3R5cGU6WnQsZGF0YTp7aXNQZXJpb2RpYzpr''@;'; put 'put ''dD0hMSxpc1JlZnJlc2hhYmxlOm1uPSExfT17fX09STtpZihJLnN0YXRlPT09VnQmJihadD09PVd0fHxadD09PXV0KSlyZXR1cm47Y29uc3QgZG49SS5zdGF0ZSE9anQ7ZG4mJkV0Ll90cmFuc2l0aW9uVG8oanQsWSk7Y29uc3Qgdm49UHQ7UHQ9RXQsZ3Q9e3BhcmVudDpndCx6b25lOnRoaXN9''@;'; put 'put ''O3RyeXtadD09dXQmJkkuZGF0YSYmIWt0JiYhbW4mJihJLmNhbmNlbEZuPXZvaWQgMCk7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlVGFzayh0aGlzLEV0LEMsaHQpfWNhdGNoKHVuKXtpZih0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyx1bikpdGhyb3cg''@;'; put 'put ''dW59fWZpbmFsbHl7Y29uc3QgdW49SS5zdGF0ZTtpZih1biE9PVZ0JiZ1biE9PVh0KWlmKFp0PT1XdHx8a3R8fG1uJiZ1bj09PXZ0KWRuJiZFdC5fdHJhbnNpdGlvblRvKFksanQsdnQpO2Vsc2V7Y29uc3Qgej1FdC5fem9uZURlbGVnYXRlczt0aGlzLl91cGRhdGVUYXNrQ291bnQoRXQsLTEp''@;'; put 'put ''LGRuJiZFdC5fdHJhbnNpdGlvblRvKFZ0LGp0LFZ0KSxtbiYmKEV0Ll96b25lRGVsZWdhdGVzPXopfWd0PWd0LnBhcmVudCxQdD12bn19c2NoZWR1bGVUYXNrKEkpe2lmKEkuem9uZSYmSS56b25lIT09dGhpcyl7bGV0IGh0PXRoaXM7Zm9yKDtodDspe2lmKGh0PT09SS56b25lKXRocm93IEVy''@;'; put 'put ''cm9yKGBjYW4gbm90IHJlc2NoZWR1bGUgdGFzayB0byAke3RoaXMubmFtZX0gd2hpY2ggaXMgZGVzY2VuZGFudHMgb2YgdGhlIG9yaWdpbmFsIHpvbmUgJHtJLnpvbmUubmFtZX1gKTtodD1odC5wYXJlbnR9fUkuX3RyYW5zaXRpb25Ubyh2dCxWdCk7Y29uc3QgQz1bXTtJLl96b25lRGVsZWdh''@;'; put 'put ''dGVzPUMsSS5fem9uZT10aGlzO3RyeXtJPXRoaXMuX3pvbmVEZWxlZ2F0ZS5zY2hlZHVsZVRhc2sodGhpcyxJKX1jYXRjaChodCl7dGhyb3cgSS5fdHJhbnNpdGlvblRvKFh0LHZ0LFZ0KSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxodCksaHR9cmV0dXJuIEkuX3pvbmVE''@;'; put 'put ''ZWxlZ2F0ZXM9PT1DJiZ0aGlzLl91cGRhdGVUYXNrQ291bnQoSSwxKSxJLnN0YXRlPT12dCYmSS5fdHJhbnNpdGlvblRvKFksdnQpLEl9c2NoZWR1bGVNaWNyb1Rhc2soSSxDLGh0LEV0KXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHN0KEt0LEksQyxodCxFdCx2b2lkIDApKX1zY2hl''@;'; put 'put ''ZHVsZU1hY3JvVGFzayhJLEMsaHQsRXQsWnQpe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgc3QodXQsSSxDLGh0LEV0LFp0KSl9c2NoZWR1bGVFdmVudFRhc2soSSxDLGh0LEV0LFp0KXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHN0KFd0LEksQyxodCxFdCxadCkpfWNhbmNl''@;'; put 'put ''bFRhc2soSSl7aWYoSS56b25lIT10aGlzKXRocm93IG5ldyBFcnJvcigiQSB0YXNrIGNhbiBvbmx5IGJlIGNhbmNlbGxlZCBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiAiKyhJLnpvbmV8fHRuKS5uYW1lKyI7IEV4ZWN1dGlvbjogIit0aGlzLm5hbWUrIikiKTtpZihJLnN0''@;'; put 'put ''YXRlPT09WXx8SS5zdGF0ZT09PWp0KXtJLl90cmFuc2l0aW9uVG8oTHQsWSxqdCk7dHJ5e3RoaXMuX3pvbmVEZWxlZ2F0ZS5jYW5jZWxUYXNrKHRoaXMsSSl9Y2F0Y2goQyl7dGhyb3cgSS5fdHJhbnNpdGlvblRvKFh0LEx0KSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxD''@;'; put 'put ''KSxDfXJldHVybiB0aGlzLl91cGRhdGVUYXNrQ291bnQoSSwtMSksSS5fdHJhbnNpdGlvblRvKFZ0LEx0KSxJLnJ1bkNvdW50PS0xLEl9fV91cGRhdGVUYXNrQ291bnQoSSxDKXtjb25zdCBodD1JLl96b25lRGVsZWdhdGVzOy0xPT1DJiYoSS5fem9uZURlbGVnYXRlcz1udWxsKTtmb3IobGV0''@;'; put 'put ''IEV0PTA7RXQ8aHQubGVuZ3RoO0V0KyspaHRbRXRdLl91cGRhdGVUYXNrQ291bnQoSS50eXBlLEMpfX1yZXR1cm4gQXR9KSgpO2NvbnN0IE49e25hbWU6IiIsb25IYXNUYXNrOihBdCxhdCxJLEMpPT5BdC5oYXNUYXNrKEksQyksb25TY2hlZHVsZVRhc2s6KEF0LGF0LEksQyk9PkF0LnNjaGVk''@;'; put 'put ''dWxlVGFzayhJLEMpLG9uSW52b2tlVGFzazooQXQsYXQsSSxDLGh0LEV0KT0+QXQuaW52b2tlVGFzayhJLEMsaHQsRXQpLG9uQ2FuY2VsVGFzazooQXQsYXQsSSxDKT0+QXQuY2FuY2VsVGFzayhJLEMpfTtjbGFzcyBKe2dldCB6b25lKCl7cmV0dXJuIHRoaXMuX3pvbmV9X3pvbmU7X3Rhc2tD''@;'; put 'put ''b3VudHM9e21pY3JvVGFzazowLG1hY3JvVGFzazowLGV2ZW50VGFzazowfTtfcGFyZW50RGVsZWdhdGU7X2ZvcmtEbGd0O19mb3JrWlM7X2ZvcmtDdXJyWm9uZTtfaW50ZXJjZXB0RGxndDtfaW50ZXJjZXB0WlM7X2ludGVyY2VwdEN1cnJab25lO19pbnZva2VEbGd0O19pbnZva2VaUztfaW52''@;'; put 'put ''b2tlQ3VyclpvbmU7X2hhbmRsZUVycm9yRGxndDtfaGFuZGxlRXJyb3JaUztfaGFuZGxlRXJyb3JDdXJyWm9uZTtfc2NoZWR1bGVUYXNrRGxndDtfc2NoZWR1bGVUYXNrWlM7X3NjaGVkdWxlVGFza0N1cnJab25lO19pbnZva2VUYXNrRGxndDtfaW52b2tlVGFza1pTO19pbnZva2VUYXNrQ3Vy''@;'; put 'put ''clpvbmU7X2NhbmNlbFRhc2tEbGd0O19jYW5jZWxUYXNrWlM7X2NhbmNlbFRhc2tDdXJyWm9uZTtfaGFzVGFza0RsZ3Q7X2hhc1Rhc2tEbGd0T3duZXI7X2hhc1Rhc2taUztfaGFzVGFza0N1cnJab25lO2NvbnN0cnVjdG9yKGF0LEksQyl7dGhpcy5fem9uZT1hdCx0aGlzLl9wYXJlbnREZWxl''@;'; put 'put ''Z2F0ZT1JLHRoaXMuX2ZvcmtaUz1DJiYoQyYmQy5vbkZvcms/QzpJLl9mb3JrWlMpLHRoaXMuX2ZvcmtEbGd0PUMmJihDLm9uRm9yaz9JOkkuX2ZvcmtEbGd0KSx0aGlzLl9mb3JrQ3VyclpvbmU9QyYmKEMub25Gb3JrP3RoaXMuX3pvbmU6SS5fZm9ya0N1cnJab25lKSx0aGlzLl9pbnRlcmNl''@;'; put 'put ''cHRaUz1DJiYoQy5vbkludGVyY2VwdD9DOkkuX2ludGVyY2VwdFpTKSx0aGlzLl9pbnRlcmNlcHREbGd0PUMmJihDLm9uSW50ZXJjZXB0P0k6SS5faW50ZXJjZXB0RGxndCksdGhpcy5faW50ZXJjZXB0Q3VyclpvbmU9QyYmKEMub25JbnRlcmNlcHQ/dGhpcy5fem9uZTpJLl9pbnRlcmNlcHRD''@;'; put 'put ''dXJyWm9uZSksdGhpcy5faW52b2tlWlM9QyYmKEMub25JbnZva2U/QzpJLl9pbnZva2VaUyksdGhpcy5faW52b2tlRGxndD1DJiYoQy5vbkludm9rZT9JOkkuX2ludm9rZURsZ3QpLHRoaXMuX2ludm9rZUN1cnJab25lPUMmJihDLm9uSW52b2tlP3RoaXMuX3pvbmU6SS5faW52b2tlQ3Vyclpv''@;'; put 'put ''bmUpLHRoaXMuX2hhbmRsZUVycm9yWlM9QyYmKEMub25IYW5kbGVFcnJvcj9DOkkuX2hhbmRsZUVycm9yWlMpLHRoaXMuX2hhbmRsZUVycm9yRGxndD1DJiYoQy5vbkhhbmRsZUVycm9yP0k6SS5faGFuZGxlRXJyb3JEbGd0KSx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lPUMmJihDLm9uSGFu''@;'; put 'put ''ZGxlRXJyb3I/dGhpcy5fem9uZTpJLl9oYW5kbGVFcnJvckN1cnJab25lKSx0aGlzLl9zY2hlZHVsZVRhc2taUz1DJiYoQy5vblNjaGVkdWxlVGFzaz9DOkkuX3NjaGVkdWxlVGFza1pTKSx0aGlzLl9zY2hlZHVsZVRhc2tEbGd0PUMmJihDLm9uU2NoZWR1bGVUYXNrP0k6SS5fc2NoZWR1bGVU''@;'; put 'put ''YXNrRGxndCksdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmU9QyYmKEMub25TY2hlZHVsZVRhc2s/dGhpcy5fem9uZTpJLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSksdGhpcy5faW52b2tlVGFza1pTPUMmJihDLm9uSW52b2tlVGFzaz9DOkkuX2ludm9rZVRhc2taUyksdGhpcy5faW52b2tlVGFz''@;'; put 'put ''a0RsZ3Q9QyYmKEMub25JbnZva2VUYXNrP0k6SS5faW52b2tlVGFza0RsZ3QpLHRoaXMuX2ludm9rZVRhc2tDdXJyWm9uZT1DJiYoQy5vbkludm9rZVRhc2s/dGhpcy5fem9uZTpJLl9pbnZva2VUYXNrQ3VyclpvbmUpLHRoaXMuX2NhbmNlbFRhc2taUz1DJiYoQy5vbkNhbmNlbFRhc2s/QzpJ''@;'; put 'put ''Ll9jYW5jZWxUYXNrWlMpLHRoaXMuX2NhbmNlbFRhc2tEbGd0PUMmJihDLm9uQ2FuY2VsVGFzaz9JOkkuX2NhbmNlbFRhc2tEbGd0KSx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmU9QyYmKEMub25DYW5jZWxUYXNrP3RoaXMuX3pvbmU6SS5fY2FuY2VsVGFza0N1cnJab25lKSx0aGlzLl9oYXNU''@;'; put 'put ''YXNrWlM9bnVsbCx0aGlzLl9oYXNUYXNrRGxndD1udWxsLHRoaXMuX2hhc1Rhc2tEbGd0T3duZXI9bnVsbCx0aGlzLl9oYXNUYXNrQ3VyclpvbmU9bnVsbDtjb25zdCBodD1DJiZDLm9uSGFzVGFzazsoaHR8fEkmJkkuX2hhc1Rhc2taUykmJih0aGlzLl9oYXNUYXNrWlM9aHQ/QzpOLHRoaXMu''@;'; put 'put ''X2hhc1Rhc2tEbGd0PUksdGhpcy5faGFzVGFza0RsZ3RPd25lcj10aGlzLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT10aGlzLl96b25lLEMub25TY2hlZHVsZVRhc2t8fCh0aGlzLl9zY2hlZHVsZVRhc2taUz1OLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9SSx0aGlzLl9zY2hlZHVsZVRhc2tDdXJy''@;'; put 'put ''Wm9uZT10aGlzLl96b25lKSxDLm9uSW52b2tlVGFza3x8KHRoaXMuX2ludm9rZVRhc2taUz1OLHRoaXMuX2ludm9rZVRhc2tEbGd0PUksdGhpcy5faW52b2tlVGFza0N1cnJab25lPXRoaXMuX3pvbmUpLEMub25DYW5jZWxUYXNrfHwodGhpcy5fY2FuY2VsVGFza1pTPU4sdGhpcy5fY2FuY2Vs''@;'; put 'put ''VGFza0RsZ3Q9SSx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmU9dGhpcy5fem9uZSkpfWZvcmsoYXQsSSl7cmV0dXJuIHRoaXMuX2ZvcmtaUz90aGlzLl9mb3JrWlMub25Gb3JrKHRoaXMuX2ZvcmtEbGd0LHRoaXMuem9uZSxhdCxJKTpuZXcgTyhhdCxJKX1pbnRlcmNlcHQoYXQsSSxDKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5faW50ZXJjZXB0WlM/dGhpcy5faW50ZXJjZXB0WlMub25JbnRlcmNlcHQodGhpcy5faW50ZXJjZXB0RGxndCx0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZSxhdCxJLEMpOkl9aW52b2tlKGF0LEksQyxodCxFdCl7cmV0dXJuIHRoaXMuX2ludm9rZVpTP3RoaXMuX2ludm9rZVpTLm9u''@;'; put 'put ''SW52b2tlKHRoaXMuX2ludm9rZURsZ3QsdGhpcy5faW52b2tlQ3VyclpvbmUsYXQsSSxDLGh0LEV0KTpJLmFwcGx5KEMsaHQpfWhhbmRsZUVycm9yKGF0LEkpe3JldHVybiF0aGlzLl9oYW5kbGVFcnJvclpTfHx0aGlzLl9oYW5kbGVFcnJvclpTLm9uSGFuZGxlRXJyb3IodGhpcy5faGFuZGxl''@;'; put 'put ''RXJyb3JEbGd0LHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmUsYXQsSSl9c2NoZWR1bGVUYXNrKGF0LEkpe2xldCBDPUk7aWYodGhpcy5fc2NoZWR1bGVUYXNrWlMpdGhpcy5faGFzVGFza1pTJiZDLl96b25lRGVsZWdhdGVzLnB1c2godGhpcy5faGFzVGFza0RsZ3RPd25lciksQz10aGlzLl9z''@;'; put 'put ''Y2hlZHVsZVRhc2taUy5vblNjaGVkdWxlVGFzayh0aGlzLl9zY2hlZHVsZVRhc2tEbGd0LHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lLGF0LEkpLEN8fChDPUkpO2Vsc2UgaWYoSS5zY2hlZHVsZUZuKUkuc2NoZWR1bGVGbihJKTtlbHNle2lmKEkudHlwZSE9S3QpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJUYXNrIGlzIG1pc3Npbmcgc2NoZWR1bGVGbi4iKTtIdChJKX1yZXR1cm4gQ31pbnZva2VUYXNrKGF0LEksQyxodCl7cmV0dXJuIHRoaXMuX2ludm9rZVRhc2taUz90aGlzLl9pbnZva2VUYXNrWlMub25JbnZva2VUYXNrKHRoaXMuX2ludm9rZVRhc2tEbGd0LHRoaXMuX2ludm9rZVRhc2tD''@;'; put 'put ''dXJyWm9uZSxhdCxJLEMsaHQpOkkuY2FsbGJhY2suYXBwbHkoQyxodCl9Y2FuY2VsVGFzayhhdCxJKXtsZXQgQztpZih0aGlzLl9jYW5jZWxUYXNrWlMpQz10aGlzLl9jYW5jZWxUYXNrWlMub25DYW5jZWxUYXNrKHRoaXMuX2NhbmNlbFRhc2tEbGd0LHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9u''@;'; put 'put ''ZSxhdCxJKTtlbHNle2lmKCFJLmNhbmNlbEZuKXRocm93IEVycm9yKCJUYXNrIGlzIG5vdCBjYW5jZWxhYmxlIik7Qz1JLmNhbmNlbEZuKEkpfXJldHVybiBDfWhhc1Rhc2soYXQsSSl7dHJ5e3RoaXMuX2hhc1Rhc2taUyYmdGhpcy5faGFzVGFza1pTLm9uSGFzVGFzayh0aGlzLl9oYXNUYXNr''@;'; put 'put ''RGxndCx0aGlzLl9oYXNUYXNrQ3VyclpvbmUsYXQsSSl9Y2F0Y2goQyl7dGhpcy5oYW5kbGVFcnJvcihhdCxDKX19X3VwZGF0ZVRhc2tDb3VudChhdCxJKXtjb25zdCBDPXRoaXMuX3Rhc2tDb3VudHMsaHQ9Q1thdF0sRXQ9Q1thdF09aHQrSTtpZihFdDwwKXRocm93IG5ldyBFcnJvcigiTW9y''@;'; put 'put ''ZSB0YXNrcyBleGVjdXRlZCB0aGVuIHdlcmUgc2NoZWR1bGVkLiIpOzAhPWh0JiYwIT1FdHx8dGhpcy5oYXNUYXNrKHRoaXMuX3pvbmUse21pY3JvVGFzazpDLm1pY3JvVGFzaz4wLG1hY3JvVGFzazpDLm1hY3JvVGFzaz4wLGV2ZW50VGFzazpDLmV2ZW50VGFzaz4wLGNoYW5nZTphdH0pfX1j''@;'; put 'put ''bGFzcyBzdHt0eXBlO3NvdXJjZTtpbnZva2U7Y2FsbGJhY2s7ZGF0YTtzY2hlZHVsZUZuO2NhbmNlbEZuO196b25lPW51bGw7cnVuQ291bnQ9MDtfem9uZURlbGVnYXRlcz1udWxsO19zdGF0ZT0ibm90U2NoZWR1bGVkIjtjb25zdHJ1Y3RvcihhdCxJLEMsaHQsRXQsWnQpe2lmKHRoaXMudHlw''@;'; put 'put ''ZT1hdCx0aGlzLnNvdXJjZT1JLHRoaXMuZGF0YT1odCx0aGlzLnNjaGVkdWxlRm49RXQsdGhpcy5jYW5jZWxGbj1adCwhQyl0aHJvdyBuZXcgRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBkZWZpbmVkIik7dGhpcy5jYWxsYmFjaz1DO2NvbnN0IGt0PXRoaXM7dGhpcy5pbnZva2U9YXQ9PT1XdCYm''@;'; put 'put ''aHQmJmh0LnVzZUc/c3QuaW52b2tlVGFzazpmdW5jdGlvbigpe3JldHVybiBzdC5pbnZva2VUYXNrLmNhbGwoYyxrdCx0aGlzLGFyZ3VtZW50cyl9fXN0YXRpYyBpbnZva2VUYXNrKGF0LEksQyl7YXR8fChhdD10aGlzKSxlbisrO3RyeXtyZXR1cm4gYXQucnVuQ291bnQrKyxhdC56b25lLnJ1''@;'; put 'put ''blRhc2soYXQsSSxDKX1maW5hbGx5ezE9PWVuJiZfdCgpLGVuLS19fWdldCB6b25lKCl7cmV0dXJuIHRoaXMuX3pvbmV9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuX3N0YXRlfWNhbmNlbFNjaGVkdWxlUmVxdWVzdCgpe3RoaXMuX3RyYW5zaXRpb25UbyhWdCx2dCl9X3RyYW5zaXRpb25Ubyhh''@;'; put 'put ''dCxJLEMpe2lmKHRoaXMuX3N0YXRlIT09SSYmdGhpcy5fc3RhdGUhPT1DKXRocm93IG5ldyBFcnJvcihgJHt0aGlzLnR5cGV9ICcke3RoaXMuc291cmNlfSc6IGNhbiBub3QgdHJhbnNpdGlvbiB0byAnJHthdH0nLCBleHBlY3Rpbmcgc3RhdGUgJyR7SX0nJHtDPyIgb3IgJyIrQysiJyI6IiJ9''@;'; put 'put ''LCB3YXMgJyR7dGhpcy5fc3RhdGV9Jy5gKTt0aGlzLl9zdGF0ZT1hdCxhdD09VnQmJih0aGlzLl96b25lRGVsZWdhdGVzPW51bGwpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuZGF0YSYmdHlwZW9mIHRoaXMuZGF0YS5oYW5kbGVJZDwidSI/dGhpcy5kYXRhLmhhbmRsZUlkLnRvU3RyaW5nKCk6''@;'; put 'put ''T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMpfXRvSlNPTigpe3JldHVybnt0eXBlOnRoaXMudHlwZSxzdGF0ZTp0aGlzLnN0YXRlLHNvdXJjZTp0aGlzLnNvdXJjZSx6b25lOnRoaXMuem9uZS5uYW1lLHJ1bkNvdW50OnRoaXMucnVuQ291bnR9fX1jb25zdCBvdD1mKCJzZXRU''@;'; put 'put ''aW1lb3V0IiksZnQ9ZigiUHJvbWlzZSIpLFN0PWYoInRoZW4iKTtsZXQgYnQscnQ9W10seHQ9ITE7ZnVuY3Rpb24gQnQoQXQpe2lmKGJ0fHxjW2Z0XSYmKGJ0PWNbZnRdLnJlc29sdmUoMCkpLGJ0KXtsZXQgYXQ9YnRbU3RdO2F0fHwoYXQ9YnQudGhlbiksYXQuY2FsbChidCxBdCl9ZWxzZSBj''@;'; put 'put ''W290XShBdCwwKX1mdW5jdGlvbiBIdChBdCl7MD09PWVuJiYwPT09cnQubGVuZ3RoJiZCdChfdCksQXQmJnJ0LnB1c2goQXQpfWZ1bmN0aW9uIF90KCl7aWYoIXh0KXtmb3IoeHQ9ITA7cnQubGVuZ3RoOyl7Y29uc3QgQXQ9cnQ7cnQ9W107Zm9yKGxldCBhdD0wO2F0PEF0Lmxlbmd0aDthdCsr''@;'; put 'put ''KXtjb25zdCBJPUF0W2F0XTt0cnl7SS56b25lLnJ1blRhc2soSSxudWxsLG51bGwpfWNhdGNoKEMpe1R0Lm9uVW5oYW5kbGVkRXJyb3IoQyl9fX1UdC5taWNyb3Rhc2tEcmFpbkRvbmUoKSx4dD0hMX19Y29uc3QgdG49e25hbWU6Ik5PIFpPTkUifSxWdD0ibm90U2NoZWR1bGVkIix2dD0ic2No''@;'; put 'put ''ZWR1bGluZyIsWT0ic2NoZWR1bGVkIixqdD0icnVubmluZyIsTHQ9ImNhbmNlbGluZyIsWHQ9InVua25vd24iLEt0PSJtaWNyb1Rhc2siLHV0PSJtYWNyb1Rhc2siLFd0PSJldmVudFRhc2siLEl0PXt9LFR0PXtzeW1ib2w6ZixjdXJyZW50Wm9uZUZyYW1lOigpPT5ndCxvblVuaGFuZGxlZEVy''@;'; put 'put ''cm9yOkp0LG1pY3JvdGFza0RyYWluRG9uZTpKdCxzY2hlZHVsZU1pY3JvVGFzazpIdCxzaG93VW5jYXVnaHRFcnJvcjooKT0+IU9bZigiaWdub3JlQ29uc29sZUVycm9yVW5jYXVnaHRFcnJvciIpXSxwYXRjaEV2ZW50VGFyZ2V0OigpPT5bXSxwYXRjaE9uUHJvcGVydGllczpKdCxwYXRjaE1l''@;'; put 'put ''dGhvZDooKT0+SnQsYmluZEFyZ3VtZW50czooKT0+W10scGF0Y2hUaGVuOigpPT5KdCxwYXRjaE1hY3JvVGFzazooKT0+SnQscGF0Y2hFdmVudFByb3RvdHlwZTooKT0+SnQsaXNJRU9yRWRnZTooKT0+ITEsZ2V0R2xvYmFsT2JqZWN0czooKT0+e30sT2JqZWN0RGVmaW5lUHJvcGVydHk6KCk9''@;'; put 'put ''Pkp0LE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcjooKT0+e30sT2JqZWN0Q3JlYXRlOigpPT57fSxBcnJheVNsaWNlOigpPT5bXSxwYXRjaENsYXNzOigpPT5KdCx3cmFwV2l0aEN1cnJlbnRab25lOigpPT5KdCxmaWx0ZXJQcm9wZXJ0aWVzOigpPT5bXSxhdHRhY2hPcmlnaW5Ub1Bh''@;'; put 'put ''dGNoZWQ6KCk9Pkp0LF9yZWRlZmluZVByb3BlcnR5OigpPT5KdCxwYXRjaENhbGxiYWNrczooKT0+SnQsbmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2s6QnR9O2xldCBndD17cGFyZW50Om51bGwsem9uZTpuZXcgTyhudWxsLG51bGwpfSxQdD1udWxsLGVuPTA7ZnVuY3Rpb24gSnQoKXt9cmV0dXJu''@;'; put 'put ''IEwoIlpvbmUiLCJab25lIiksT30oKSxTLlpvbmV9KCk7KGZ1bmN0aW9uIE1uKFMpeyhmdW5jdGlvbiBpdChTKXtTLl9fbG9hZF9wYXRjaCgiWm9uZUF3YXJlUHJvbWlzZSIsKFIsTCxPKT0+e2NvbnN0IE49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixKPU9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eSxvdD1PLnN5bWJvbCxmdD1bXSxTdD0hMSE9PVJbb3QoIkRJU0FCTEVfV1JBUFBJTkdfVU5DQVVHSFRfUFJPTUlTRV9SRUpFQ1RJT04iKV0scnQ9b3QoIlByb21pc2UiKSx4dD1vdCgidGhlbiIpO08ub25VbmhhbmRsZWRFcnJvcj16PT57aWYoTy5zaG93VW5jYXVnaHRFcnJvcigp''@;'; put 'put ''KXtjb25zdCBXPXomJnoucmVqZWN0aW9uO1c/Y29uc29sZS5lcnJvcigiVW5oYW5kbGVkIFByb21pc2UgcmVqZWN0aW9uOiIsVyBpbnN0YW5jZW9mIEVycm9yP1cubWVzc2FnZTpXLCI7IFpvbmU6Iix6LnpvbmUubmFtZSwiOyBUYXNrOiIsei50YXNrJiZ6LnRhc2suc291cmNlLCI7IFZhbHVl''@;'; put 'put ''OiIsVyxXIGluc3RhbmNlb2YgRXJyb3I/Vy5zdGFjazp2b2lkIDApOmNvbnNvbGUuZXJyb3Ioeil9fSxPLm1pY3JvdGFza0RyYWluRG9uZT0oKT0+e2Zvcig7ZnQubGVuZ3RoOyl7Y29uc3Qgej1mdC5zaGlmdCgpO3RyeXt6LnpvbmUucnVuR3VhcmRlZCgoKT0+e3Rocm93IHoudGhyb3dPcmln''@;'; put 'put ''aW5hbD96LnJlamVjdGlvbjp6fSl9Y2F0Y2goVyl7SHQoVyl9fX07Y29uc3QgQnQ9b3QoInVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25IYW5kbGVyIik7ZnVuY3Rpb24gSHQoeil7Ty5vblVuaGFuZGxlZEVycm9yKHopO3RyeXtjb25zdCBXPUxbQnRdOyJmdW5jdGlvbiI9PXR5cGVvZiBXJiZX''@;'; put 'put ''LmNhbGwodGhpcyx6KX1jYXRjaHt9fWZ1bmN0aW9uIF90KHope3JldHVybiB6JiYiZnVuY3Rpb24iPT10eXBlb2Ygei50aGVufWZ1bmN0aW9uIHRuKHope3JldHVybiB6fWZ1bmN0aW9uIFZ0KHope3JldHVybiBrdC5yZWplY3Qoeil9Y29uc3QgdnQ9b3QoInN0YXRlIiksWT1vdCgidmFsdWUi''@;'; put 'put ''KSxqdD1vdCgiZmluYWxseSIpLEx0PW90KCJwYXJlbnRQcm9taXNlVmFsdWUiKSxYdD1vdCgicGFyZW50UHJvbWlzZVN0YXRlIiksdXQ9bnVsbCxJdD0hMTtmdW5jdGlvbiBndCh6LFcpe3JldHVybiBqPT57dHJ5e0F0KHosVyxqKX1jYXRjaChHKXtBdCh6LCExLEcpfX19Y29uc3QgUHQ9ZnVu''@;'; put 'put ''Y3Rpb24oKXtsZXQgej0hMTtyZXR1cm4gZnVuY3Rpb24oail7cmV0dXJuIGZ1bmN0aW9uKCl7enx8KHo9ITAsai5hcHBseShudWxsLGFyZ3VtZW50cykpfX19LGVuPSJQcm9taXNlIHJlc29sdmVkIHdpdGggaXRzZWxmIixKdD1vdCgiY3VycmVudFRhc2tUcmFjZSIpO2Z1bmN0aW9uIEF0KHos''@;'; put 'put ''VyxqKXtjb25zdCBHPVB0KCk7aWYoej09PWopdGhyb3cgbmV3IFR5cGVFcnJvcihlbik7aWYoelt2dF09PT11dCl7bGV0IHB0PW51bGw7dHJ5eygib2JqZWN0Ij09dHlwZW9mIGp8fCJmdW5jdGlvbiI9PXR5cGVvZiBqKSYmKHB0PWomJmoudGhlbil9Y2F0Y2goTXQpe3JldHVybiBHKCgpPT57''@;'; put 'put ''QXQoeiwhMSxNdCl9KSgpLHp9aWYoVyE9PUl0JiZqIGluc3RhbmNlb2Yga3QmJmouaGFzT3duUHJvcGVydHkodnQpJiZqLmhhc093blByb3BlcnR5KFkpJiZqW3Z0XSE9PXV0KUkoaiksQXQoeixqW3Z0XSxqW1ldKTtlbHNlIGlmKFchPT1JdCYmImZ1bmN0aW9uIj09dHlwZW9mIHB0KXRyeXtw''@;'; put 'put ''dC5jYWxsKGosRyhndCh6LFcpKSxHKGd0KHosITEpKSl9Y2F0Y2goTXQpe0coKCk9PntBdCh6LCExLE10KX0pKCl9ZWxzZXt6W3Z0XT1XO2NvbnN0IE10PXpbWV07aWYoeltZXT1qLHpbanRdPT09anQmJiEwPT09VyYmKHpbdnRdPXpbWHRdLHpbWV09eltMdF0pLFc9PT1JdCYmaiBpbnN0YW5j''@;'; put 'put ''ZW9mIEVycm9yKXtjb25zdCBjdD1MLmN1cnJlbnRUYXNrJiZMLmN1cnJlbnRUYXNrLmRhdGEmJkwuY3VycmVudFRhc2suZGF0YS5fX2NyZWF0aW9uVHJhY2VfXztjdCYmSihqLEp0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTpjdH0pfWZvcihsZXQg''@;'; put 'put ''Y3Q9MDtjdDxNdC5sZW5ndGg7KUMoeixNdFtjdCsrXSxNdFtjdCsrXSxNdFtjdCsrXSxNdFtjdCsrXSk7aWYoMD09TXQubGVuZ3RoJiZXPT1JdCl7elt2dF09MDtsZXQgY3Q9ajt0cnl7dGhyb3cgbmV3IEVycm9yKCJVbmNhdWdodCAoaW4gcHJvbWlzZSk6ICIrZnVuY3Rpb24gc3Qoeil7cmV0''@;'; put 'put ''dXJuIHomJnoudG9TdHJpbmc9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nPyh6LmNvbnN0cnVjdG9yJiZ6LmNvbnN0cnVjdG9yLm5hbWV8fCIiKSsiOiAiK0pTT04uc3RyaW5naWZ5KHopOno/ei50b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh6KX0oaikrKGom''@;'; put 'put ''Jmouc3RhY2s/IlxuIitqLnN0YWNrOiIiKSl9Y2F0Y2god3Qpe2N0PXd0fVN0JiYoY3QudGhyb3dPcmlnaW5hbD0hMCksY3QucmVqZWN0aW9uPWosY3QucHJvbWlzZT16LGN0LnpvbmU9TC5jdXJyZW50LGN0LnRhc2s9TC5jdXJyZW50VGFzayxmdC5wdXNoKGN0KSxPLnNjaGVkdWxlTWljcm9U''@;'; put 'put ''YXNrKCl9fX1yZXR1cm4gen1jb25zdCBhdD1vdCgicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKTtmdW5jdGlvbiBJKHope2lmKDA9PT16W3Z0XSl7dHJ5e2NvbnN0IFc9TFthdF07VyYmImZ1bmN0aW9uIj09dHlwZW9mIFcmJlcuY2FsbCh0aGlzLHtyZWplY3Rpb246eltZXSxwcm9taXNlOnp9''@;'; put 'put ''KX1jYXRjaHt9elt2dF09SXQ7Zm9yKGxldCBXPTA7VzxmdC5sZW5ndGg7VysrKXo9PT1mdFtXXS5wcm9taXNlJiZmdC5zcGxpY2UoVywxKX19ZnVuY3Rpb24gQyh6LFcsaixHLHB0KXtJKHopO2NvbnN0IE10PXpbdnRdLGN0PU10PyJmdW5jdGlvbiI9PXR5cGVvZiBHP0c6dG46ImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIHB0P3B0OlZ0O1cuc2NoZWR1bGVNaWNyb1Rhc2soIlByb21pc2UudGhlbiIsKCk9Pnt0cnl7Y29uc3Qgd3Q9eltZXSxSdD0hIWomJmp0PT09altqdF07UnQmJihqW0x0XT13dCxqW1h0XT1NdCk7Y29uc3QgRnQ9Vy5ydW4oY3Qsdm9pZCAwLFJ0JiZjdCE9PVZ0JiZjdCE9PXRu''@;'; put 'put ''P1tdOlt3dF0pO0F0KGosITAsRnQpfWNhdGNoKHd0KXtBdChqLCExLHd0KX19LGopfWNvbnN0IEV0PWZ1bmN0aW9uKCl7fSxadD1SLkFnZ3JlZ2F0ZUVycm9yO2NsYXNzIGt0e3N0YXRpYyB0b1N0cmluZygpe3JldHVybiJmdW5jdGlvbiBab25lQXdhcmVQcm9taXNlKCkgeyBbbmF0aXZlIGNv''@;'; put 'put ''ZGVdIH0ifXN0YXRpYyByZXNvbHZlKFcpe3JldHVybiBXIGluc3RhbmNlb2Yga3Q/VzpBdChuZXcgdGhpcyhudWxsKSwhMCxXKX1zdGF0aWMgcmVqZWN0KFcpe3JldHVybiBBdChuZXcgdGhpcyhudWxsKSxJdCxXKX1zdGF0aWMgd2l0aFJlc29sdmVycygpe2NvbnN0IFc9e307cmV0dXJuIFcu''@;'; put 'put ''cHJvbWlzZT1uZXcga3QoKGosRyk9PntXLnJlc29sdmU9aixXLnJlamVjdD1HfSksV31zdGF0aWMgYW55KFcpe2lmKCFXfHwiZnVuY3Rpb24iIT10eXBlb2YgV1tTeW1ib2wuaXRlcmF0b3JdKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgWnQoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVj''@;'; put 'put ''dGVkIikpO2NvbnN0IGo9W107bGV0IEc9MDt0cnl7Zm9yKGxldCBjdCBvZiBXKUcrKyxqLnB1c2goa3QucmVzb2x2ZShjdCkpfWNhdGNoe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgWnQoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpfWlmKDA9PT1HKXJldHVybiBQcm9taXNl''@;'; put 'put ''LnJlamVjdChuZXcgWnQoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpO2xldCBwdD0hMTtjb25zdCBNdD1bXTtyZXR1cm4gbmV3IGt0KChjdCx3dCk9Pntmb3IobGV0IFJ0PTA7UnQ8ai5sZW5ndGg7UnQrKylqW1J0XS50aGVuKEZ0PT57cHR8fChwdD0hMCxjdChGdCkpfSxGdD0+''@;'; put 'put ''e010LnB1c2goRnQpLEctLSwwPT09RyYmKHB0PSEwLHd0KG5ldyBadChNdCwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSkpfSl9KX1zdGF0aWMgcmFjZShXKXtsZXQgaixHLHB0PW5ldyB0aGlzKCh3dCxSdCk9PntqPXd0LEc9UnR9KTtmdW5jdGlvbiBNdCh3dCl7aih3dCl9ZnVuY3Rp''@;'; put 'put ''b24gY3Qod3Qpe0cod3QpfWZvcihsZXQgd3Qgb2YgVylfdCh3dCl8fCh3dD10aGlzLnJlc29sdmUod3QpKSx3dC50aGVuKE10LGN0KTtyZXR1cm4gcHR9c3RhdGljIGFsbChXKXtyZXR1cm4ga3QuYWxsV2l0aENhbGxiYWNrKFcpfXN0YXRpYyBhbGxTZXR0bGVkKFcpe3JldHVybih0aGlzJiZ0''@;'; put 'put ''aGlzLnByb3RvdHlwZSBpbnN0YW5jZW9mIGt0P3RoaXM6a3QpLmFsbFdpdGhDYWxsYmFjayhXLHt0aGVuQ2FsbGJhY2s6Rz0+KHtzdGF0dXM6ImZ1bGZpbGxlZCIsdmFsdWU6R30pLGVycm9yQ2FsbGJhY2s6Rz0+KHtzdGF0dXM6InJlamVjdGVkIixyZWFzb246R30pfSl9c3RhdGljIGFsbFdp''@;'; put 'put ''dGhDYWxsYmFjayhXLGope2xldCBHLHB0LE10PW5ldyB0aGlzKChGdCwkdCk9PntHPUZ0LHB0PSR0fSksY3Q9Mix3dD0wO2NvbnN0IFJ0PVtdO2ZvcihsZXQgRnQgb2YgVyl7X3QoRnQpfHwoRnQ9dGhpcy5yZXNvbHZlKEZ0KSk7Y29uc3QgJHQ9d3Q7dHJ5e0Z0LnRoZW4oVXQ9PntSdFskdF09''@;'; put 'put ''aj9qLnRoZW5DYWxsYmFjayhVdCk6VXQsY3QtLSwwPT09Y3QmJkcoUnQpfSxVdD0+e2o/KFJ0WyR0XT1qLmVycm9yQ2FsbGJhY2soVXQpLGN0LS0sMD09PWN0JiZHKFJ0KSk6cHQoVXQpfSl9Y2F0Y2goVXQpe3B0KFV0KX1jdCsrLHd0Kyt9cmV0dXJuIGN0LT0yLDA9PT1jdCYmRyhSdCksTXR9''@;'; put 'put ''Y29uc3RydWN0b3IoVyl7Y29uc3Qgaj10aGlzO2lmKCEoaiBpbnN0YW5jZW9mIGt0KSl0aHJvdyBuZXcgRXJyb3IoIk11c3QgYmUgYW4gaW5zdGFuY2VvZiBQcm9taXNlLiIpO2pbdnRdPXV0LGpbWV09W107dHJ5e2NvbnN0IEc9UHQoKTtXJiZXKEcoZ3QoaiwhMCkpLEcoZ3QoaixJdCkpKX1j''@;'; put 'put ''YXRjaChHKXtBdChqLCExLEcpfX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJQcm9taXNlIn1nZXRbU3ltYm9sLnNwZWNpZXNdKCl7cmV0dXJuIGt0fXRoZW4oVyxqKXtsZXQgRz10aGlzLmNvbnN0cnVjdG9yPy5bU3ltYm9sLnNwZWNpZXNdOyghR3x8ImZ1bmN0aW9uIiE9dHlw''@;'; put 'put ''ZW9mIEcpJiYoRz10aGlzLmNvbnN0cnVjdG9yfHxrdCk7Y29uc3QgcHQ9bmV3IEcoRXQpLE10PUwuY3VycmVudDtyZXR1cm4gdGhpc1t2dF09PXV0P3RoaXNbWV0ucHVzaChNdCxwdCxXLGopOkModGhpcyxNdCxwdCxXLGopLHB0fWNhdGNoKFcpe3JldHVybiB0aGlzLnRoZW4obnVsbCxXKX1m''@;'; put 'put ''aW5hbGx5KFcpe2xldCBqPXRoaXMuY29uc3RydWN0b3I/LltTeW1ib2wuc3BlY2llc107KCFqfHwiZnVuY3Rpb24iIT10eXBlb2YgaikmJihqPWt0KTtjb25zdCBHPW5ldyBqKEV0KTtHW2p0XT1qdDtjb25zdCBwdD1MLmN1cnJlbnQ7cmV0dXJuIHRoaXNbdnRdPT11dD90aGlzW1ldLnB1c2go''@;'; put 'put ''cHQsRyxXLFcpOkModGhpcyxwdCxHLFcsVyksR319a3QucmVzb2x2ZT1rdC5yZXNvbHZlLGt0LnJlamVjdD1rdC5yZWplY3Qsa3QucmFjZT1rdC5yYWNlLGt0LmFsbD1rdC5hbGw7Y29uc3QgbW49UltydF09Ui5Qcm9taXNlO1IuUHJvbWlzZT1rdDtjb25zdCBkbj1vdCgidGhlblBhdGNoZWQi''@;'; put 'put ''KTtmdW5jdGlvbiB2bih6KXtjb25zdCBXPXoucHJvdG90eXBlLGo9TihXLCJ0aGVuIik7aWYoaiYmKCExPT09ai53cml0YWJsZXx8IWouY29uZmlndXJhYmxlKSlyZXR1cm47Y29uc3QgRz1XLnRoZW47V1t4dF09Ryx6LnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKHB0LE10KXtyZXR1cm4gbmV3''@;'; put 'put ''IGt0KCh3dCxSdCk9PntHLmNhbGwodGhpcyx3dCxSdCl9KS50aGVuKHB0LE10KX0seltkbl09ITB9cmV0dXJuIE8ucGF0Y2hUaGVuPXZuLG1uJiYodm4obW4pLGR0KFIsImZldGNoIix6PT5mdW5jdGlvbiB1bih6KXtyZXR1cm4gZnVuY3Rpb24oVyxqKXtsZXQgRz16LmFwcGx5KFcsaik7aWYo''@;'; put 'put ''RyBpbnN0YW5jZW9mIGt0KXJldHVybiBHO2xldCBwdD1HLmNvbnN0cnVjdG9yO3JldHVybiBwdFtkbl18fHZuKHB0KSxHfX0oeikpKSxQcm9taXNlW0wuX19zeW1ib2xfXygidW5jYXVnaHRQcm9taXNlRXJyb3JzIildPWZ0LGt0fSl9KShTKSxmdW5jdGlvbiB6dChTKXtTLl9fbG9hZF9wYXRj''@;'; put 'put ''aCgidG9TdHJpbmciLFI9Pntjb25zdCBMPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyxPPXgoIk9yaWdpbmFsRGVsZWdhdGUiKSxOPXgoIlByb21pc2UiKSxKPXgoIkVycm9yIiksc3Q9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcyl7Y29uc3QgcnQ9dGhpc1tPXTtp''@;'; put 'put ''ZihydClyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgcnQ/TC5jYWxsKHJ0KTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocnQpO2lmKHRoaXM9PT1Qcm9taXNlKXtjb25zdCB4dD1SW05dO2lmKHh0KXJldHVybiBMLmNhbGwoeHQpfWlmKHRoaXM9PT1FcnJvcil7Y29uc3QgeHQ9UltK''@;'; put 'put ''XTtpZih4dClyZXR1cm4gTC5jYWxsKHh0KX19cmV0dXJuIEwuY2FsbCh0aGlzKX07c3RbT109TCxGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9c3Q7Y29uc3Qgb3Q9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIFByb21pc2UmJnRoaXMgaW5zdGFuY2VvZiBQcm9taXNlPyJbb2JqZWN0IFByb21pc2VdIjpvdC5jYWxsKHRoaXMpfX0pfShTKSxmdW5jdGlvbiBybihTKXtTLl9fbG9hZF9wYXRjaCgidXRpbCIsKFIsTCxPKT0+e2NvbnN0IE49XyhSKTtPLnBhdGNoT25Qcm9w''@;'; put 'put ''ZXJ0aWVzPWV0LE8ucGF0Y2hNZXRob2Q9ZHQsTy5iaW5kQXJndW1lbnRzPVQsTy5wYXRjaE1hY3JvVGFzaz1DdDtjb25zdCBKPUwuX19zeW1ib2xfXygiQkxBQ0tfTElTVEVEX0VWRU5UUyIpLHN0PUwuX19zeW1ib2xfXygiVU5QQVRDSEVEX0VWRU5UUyIpO1Jbc3RdJiYoUltKXT1SW3N0XSks''@;'; put 'put ''UltKXSYmKExbSl09TFtzdF09UltKXSksTy5wYXRjaEV2ZW50UHJvdG90eXBlPVRuLE8ucGF0Y2hFdmVudFRhcmdldD1ubixPLmlzSUVPckVkZ2U9YW4sTy5PYmplY3REZWZpbmVQcm9wZXJ0eT1zLE8uT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPWUsTy5PYmplY3RDcmVhdGU9dSxP''@;'; put 'put ''LkFycmF5U2xpY2U9bCxPLnBhdGNoQ2xhc3M9bHQsTy53cmFwV2l0aEN1cnJlbnRab25lPUQsTy5maWx0ZXJQcm9wZXJ0aWVzPSQsTy5hdHRhY2hPcmlnaW5Ub1BhdGNoZWQ9T3QsTy5fcmVkZWZpbmVQcm9wZXJ0eT1PYmplY3QuZGVmaW5lUHJvcGVydHksTy5wYXRjaENhbGxiYWNrcz1xdCxP''@;'; put 'put ''LmdldEdsb2JhbE9iamVjdHM9KCk9Pih7Z2xvYmFsU291cmNlczpwbix6b25lU3ltYm9sRXZlbnROYW1lczpZdCxldmVudE5hbWVzOk4saXNCcm93c2VyOm50LGlzTWl4OnR0LGlzTm9kZTpaLFRSVUVfU1RSOnksRkFMU0VfU1RSOkUsWk9ORV9TWU1CT0xfUFJFRklYOmcsQUREX0VWRU5UX0xJ''@;'; put 'put ''U1RFTkVSX1NUUjppLFJFTU9WRV9FVkVOVF9MSVNURU5FUl9TVFI6dn0pfSl9KFMpfSkoUm4pLGZ1bmN0aW9uIFEoUyl7Uy5fX2xvYWRfcGF0Y2goImxlZ2FjeSIsUj0+e2NvbnN0IEw9UltTLl9fc3ltYm9sX18oImxlZ2FjeVBhdGNoIildO0wmJkwoKX0pLFMuX19sb2FkX3BhdGNoKCJ0aW1l''@;'; put 'put ''cnMiLFI9Pntjb25zdCBPPSJjbGVhciI7YShSLCJzZXQiLE8sIlRpbWVvdXQiKSxhKFIsInNldCIsTywiSW50ZXJ2YWwiKSxhKFIsInNldCIsTywiSW1tZWRpYXRlIil9KSxTLl9fbG9hZF9wYXRjaCgicmVxdWVzdEFuaW1hdGlvbkZyYW1lIixSPT57YShSLCJyZXF1ZXN0IiwiY2FuY2VsIiwi''@;'; put 'put ''QW5pbWF0aW9uRnJhbWUiKSxhKFIsIm1velJlcXVlc3QiLCJtb3pDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLGEoUiwid2Via2l0UmVxdWVzdCIsIndlYmtpdENhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIil9KSxTLl9fbG9hZF9wYXRjaCgiYmxvY2tpbmciLChSLEwpPT57Y29uc3QgTz1bImFs''@;'; put 'put ''ZXJ0IiwicHJvbXB0IiwiY29uZmlybSJdO2ZvcihsZXQgTj0wO048Ty5sZW5ndGg7TisrKWR0KFIsT1tOXSwoc3Qsb3QsZnQpPT5mdW5jdGlvbihTdCxydCl7cmV0dXJuIEwuY3VycmVudC5ydW4oc3QsUixydCxmdCl9KX0pLFMuX19sb2FkX3BhdGNoKCJFdmVudFRhcmdldCIsKFIsTCxPKT0+''@;'; put 'put ''eyhmdW5jdGlvbiBLKFMsUil7Ui5wYXRjaEV2ZW50UHJvdG90eXBlKFMsUil9KShSLE8pLGZ1bmN0aW9uIHcoUyxSKXtpZihab25lW1Iuc3ltYm9sKCJwYXRjaEV2ZW50VGFyZ2V0IildKXJldHVybjtjb25zdHtldmVudE5hbWVzOkwsem9uZVN5bWJvbEV2ZW50TmFtZXM6TyxUUlVFX1NUUjpO''@;'; put 'put ''LEZBTFNFX1NUUjpKLFpPTkVfU1lNQk9MX1BSRUZJWDpzdH09Ui5nZXRHbG9iYWxPYmplY3RzKCk7Zm9yKGxldCBmdD0wO2Z0PEwubGVuZ3RoO2Z0Kyspe2NvbnN0IFN0PUxbZnRdLGJ0PXN0KyhTdCtKKSxCdD1zdCsoU3QrTik7T1tTdF09e30sT1tTdF1bSl09YnQsT1tTdF1bTl09QnR9Y29u''@;'; put 'put ''c3Qgb3Q9Uy5FdmVudFRhcmdldDtvdCYmb3QucHJvdG90eXBlJiZSLnBhdGNoRXZlbnRUYXJnZXQoUyxSLFtvdCYmb3QucHJvdG90eXBlXSl9KFIsTyk7Y29uc3QgTj1SLlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7TiYmTi5wcm90b3R5cGUmJk8ucGF0Y2hFdmVudFRhcmdldChSLE8sW04u''@;'; put 'put ''cHJvdG90eXBlXSl9KSxTLl9fbG9hZF9wYXRjaCgiTXV0YXRpb25PYnNlcnZlciIsKFIsTCxPKT0+e2x0KCJNdXRhdGlvbk9ic2VydmVyIiksbHQoIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiKX0pLFMuX19sb2FkX3BhdGNoKCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsKFIsTCxPKT0+e2x0KCJJ''@;'; put 'put ''bnRlcnNlY3Rpb25PYnNlcnZlciIpfSksUy5fX2xvYWRfcGF0Y2goIkZpbGVSZWFkZXIiLChSLEwsTyk9PntsdCgiRmlsZVJlYWRlciIpfSksUy5fX2xvYWRfcGF0Y2goIm9uX3Byb3BlcnR5IiwoUixMLE8pPT57IWZ1bmN0aW9uIEgoUyxSKXtpZihaJiYhdHR8fFpvbmVbUy5zeW1ib2woInBh''@;'; put 'put ''dGNoRXZlbnRzIildKXJldHVybjtjb25zdCBMPVIuX19ab25lX2lnbm9yZV9vbl9wcm9wZXJ0aWVzO2xldCBPPVtdO2lmKG50KXtjb25zdCBOPXdpbmRvdztPPU8uY29uY2F0KFsiRG9jdW1lbnQiLCJTVkdFbGVtZW50IiwiRWxlbWVudCIsIkhUTUxFbGVtZW50IiwiSFRNTEJvZHlFbGVtZW50''@;'; put 'put ''IiwiSFRNTE1lZGlhRWxlbWVudCIsIkhUTUxGcmFtZVNldEVsZW1lbnQiLCJIVE1MRnJhbWVFbGVtZW50IiwiSFRNTElGcmFtZUVsZW1lbnQiLCJIVE1MTWFycXVlZUVsZW1lbnQiLCJXb3JrZXIiXSk7Y29uc3QgSj1bXTtEdChOLF8oTiksTCYmTC5jb25jYXQoSiksbyhOKSl9Tz1PLmNvbmNh''@;'; put 'put ''dChbIlhNTEh0dHBSZXF1ZXN0IiwiWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCIsIklEQkluZGV4IiwiSURCUmVxdWVzdCIsIklEQk9wZW5EQlJlcXVlc3QiLCJJREJEYXRhYmFzZSIsIklEQlRyYW5zYWN0aW9uIiwiSURCQ3Vyc29yIiwiV2ViU29ja2V0Il0pO2ZvcihsZXQgTj0wO048Ty5s''@;'; put 'put ''ZW5ndGg7TisrKXtjb25zdCBKPVJbT1tOXV07Sj8ucHJvdG90eXBlJiZEdChKLnByb3RvdHlwZSxfKEoucHJvdG90eXBlKSxMKX19KE8sUil9KSxTLl9fbG9hZF9wYXRjaCgiY3VzdG9tRWxlbWVudHMiLChSLEwsTyk9PnshZnVuY3Rpb24gbShTLFIpe2NvbnN0e2lzQnJvd3NlcjpMLGlzTWl4''@;'; put 'put ''Ok99PVIuZ2V0R2xvYmFsT2JqZWN0cygpOyhMfHxPKSYmUy5jdXN0b21FbGVtZW50cyYmImN1c3RvbUVsZW1lbnRzImluIFMmJlIucGF0Y2hDYWxsYmFja3MoUixTLmN1c3RvbUVsZW1lbnRzLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSIsWyJjb25uZWN0ZWRDYWxsYmFjayIsImRpc2Nvbm5l''@;'; put 'put ''Y3RlZENhbGxiYWNrIiwiYWRvcHRlZENhbGxiYWNrIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIiwiZm9ybUFzc29jaWF0ZWRDYWxsYmFjayIsImZvcm1EaXNhYmxlZENhbGxiYWNrIiwiZm9ybVJlc2V0Q2FsbGJhY2siLCJmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2siXSl9KFIsTyl9KSxT''@;'; put 'put ''Ll9fbG9hZF9wYXRjaCgiWEhSIiwoUixMKT0+eyFmdW5jdGlvbiBTdChydCl7Y29uc3QgeHQ9cnQuWE1MSHR0cFJlcXVlc3Q7aWYoIXh0KXJldHVybjtjb25zdCBidD14dC5wcm90b3R5cGU7bGV0IEh0PWJ0W3BdLF90PWJ0W2RdO2lmKCFIdCl7Y29uc3QgVHQ9cnQuWE1MSHR0cFJlcXVlc3RF''@;'; put 'put ''dmVudFRhcmdldDtpZihUdCl7Y29uc3QgZ3Q9VHQucHJvdG90eXBlO0h0PWd0W3BdLF90PWd0W2RdfX1jb25zdCB0bj0icmVhZHlzdGF0ZWNoYW5nZSIsVnQ9InNjaGVkdWxlZCI7ZnVuY3Rpb24gdnQoVHQpe2NvbnN0IGd0PVR0LmRhdGEsUHQ9Z3QudGFyZ2V0O1B0W3N0XT0hMSxQdFtmdF09''@;'; put 'put ''ITE7Y29uc3QgZW49UHRbSl07SHR8fChIdD1QdFtwXSxfdD1QdFtkXSksZW4mJl90LmNhbGwoUHQsdG4sZW4pO2NvbnN0IEp0PVB0W0pdPSgpPT57aWYoUHQucmVhZHlTdGF0ZT09PVB0LkRPTkUpaWYoIWd0LmFib3J0ZWQmJlB0W3N0XSYmVHQuc3RhdGU9PT1WdCl7Y29uc3QgYXQ9UHRbTC5f''@;'; put 'put ''X3N5bWJvbF9fKCJsb2FkZmFsc2UiKV07aWYoMCE9PVB0LnN0YXR1cyYmYXQmJmF0Lmxlbmd0aD4wKXtjb25zdCBJPVR0Lmludm9rZTtUdC5pbnZva2U9ZnVuY3Rpb24oKXtjb25zdCBDPVB0W0wuX19zeW1ib2xfXygibG9hZGZhbHNlIildO2ZvcihsZXQgaHQ9MDtodDxDLmxlbmd0aDtodCsr''@;'; put 'put ''KUNbaHRdPT09VHQmJkMuc3BsaWNlKGh0LDEpOyFndC5hYm9ydGVkJiZUdC5zdGF0ZT09PVZ0JiZJLmNhbGwoVHQpfSxhdC5wdXNoKFR0KX1lbHNlIFR0Lmludm9rZSgpfWVsc2UhZ3QuYWJvcnRlZCYmITE9PT1QdFtzdF0mJihQdFtmdF09ITApfTtyZXR1cm4gSHQuY2FsbChQdCx0bixKdCks''@;'; put 'put ''UHRbT118fChQdFtPXT1UdCksV3QuYXBwbHkoUHQsZ3QuYXJncyksUHRbc3RdPSEwLFR0fWZ1bmN0aW9uIFkoKXt9ZnVuY3Rpb24ganQoVHQpe2NvbnN0IGd0PVR0LmRhdGE7cmV0dXJuIGd0LmFib3J0ZWQ9ITAsSXQuYXBwbHkoZ3QudGFyZ2V0LGd0LmFyZ3MpfWNvbnN0IEx0PWR0KGJ0LCJv''@;'; put 'put ''cGVuIiwoKT0+ZnVuY3Rpb24oVHQsZ3Qpe3JldHVybiBUdFtOXT0wPT1ndFsyXSxUdFtvdF09Z3RbMV0sTHQuYXBwbHkoVHQsZ3QpfSksS3Q9eCgiZmV0Y2hUYXNrQWJvcnRpbmciKSx1dD14KCJmZXRjaFRhc2tTY2hlZHVsaW5nIiksV3Q9ZHQoYnQsInNlbmQiLCgpPT5mdW5jdGlvbihUdCxn''@;'; put 'put ''dCl7aWYoITA9PT1MLmN1cnJlbnRbdXRdfHxUdFtOXSlyZXR1cm4gV3QuYXBwbHkoVHQsZ3QpO3tjb25zdCBQdD17dGFyZ2V0OlR0LHVybDpUdFtvdF0saXNQZXJpb2RpYzohMSxhcmdzOmd0LGFib3J0ZWQ6ITF9LGVuPUYoIlhNTEh0dHBSZXF1ZXN0LnNlbmQiLFksUHQsdnQsanQpO1R0JiYh''@;'; put 'put ''MD09PVR0W2Z0XSYmIVB0LmFib3J0ZWQmJmVuLnN0YXRlPT09VnQmJmVuLmludm9rZSgpfX0pLEl0PWR0KGJ0LCJhYm9ydCIsKCk9PmZ1bmN0aW9uKFR0LGd0KXtjb25zdCBQdD1mdW5jdGlvbiBCdChUdCl7cmV0dXJuIFR0W09dfShUdCk7aWYoUHQmJiJzdHJpbmciPT10eXBlb2YgUHQudHlw''@;'; put 'put ''ZSl7aWYobnVsbD09UHQuY2FuY2VsRm58fFB0LmRhdGEmJlB0LmRhdGEuYWJvcnRlZClyZXR1cm47UHQuem9uZS5jYW5jZWxUYXNrKFB0KX1lbHNlIGlmKCEwPT09TC5jdXJyZW50W0t0XSlyZXR1cm4gSXQuYXBwbHkoVHQsZ3QpfSl9KFIpO2NvbnN0IE89eCgieGhyVGFzayIpLE49eCgieGhy''@;'; put 'put ''U3luYyIpLEo9eCgieGhyTGlzdGVuZXIiKSxzdD14KCJ4aHJTY2hlZHVsZWQiKSxvdD14KCJ4aHJVUkwiKSxmdD14KCJ4aHJFcnJvckJlZm9yZVNjaGVkdWxlZCIpfSksUy5fX2xvYWRfcGF0Y2goImdlb2xvY2F0aW9uIixSPT57Ui5uYXZpZ2F0b3ImJlIubmF2aWdhdG9yLmdlb2xvY2F0aW9u''@;'; put 'put ''JiZmdW5jdGlvbiBiKFMsUil7Y29uc3QgTD1TLmNvbnN0cnVjdG9yLm5hbWU7Zm9yKGxldCBPPTA7TzxSLmxlbmd0aDtPKyspe2NvbnN0IE49UltPXSxKPVNbTl07aWYoSil7aWYoIUIoZShTLE4pKSljb250aW51ZTtTW05dPShvdD0+e2NvbnN0IGZ0PWZ1bmN0aW9uKCl7cmV0dXJuIG90LmFw''@;'; put 'put ''cGx5KHRoaXMsVChhcmd1bWVudHMsTCsiLiIrTikpfTtyZXR1cm4gT3QoZnQsb3QpLGZ0fSkoSil9fX0oUi5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24sWyJnZXRDdXJyZW50UG9zaXRpb24iLCJ3YXRjaFBvc2l0aW9uIl0pfSksUy5fX2xvYWRfcGF0Y2goIlByb21pc2VSZWplY3Rpb25FdmVudCIs''@;'; put 'put ''KFIsTCk9PntmdW5jdGlvbiBPKE4pe3JldHVybiBmdW5jdGlvbihKKXt5bihSLE4pLmZvckVhY2gob3Q9Pntjb25zdCBmdD1SLlByb21pc2VSZWplY3Rpb25FdmVudDtpZihmdCl7Y29uc3QgU3Q9bmV3IGZ0KE4se3Byb21pc2U6Si5wcm9taXNlLHJlYXNvbjpKLnJlamVjdGlvbn0pO290Lmlu''@;'; put 'put ''dm9rZShTdCl9fSl9fVIuUHJvbWlzZVJlamVjdGlvbkV2ZW50JiYoTFt4KCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpXT1PKCJ1bmhhbmRsZWRyZWplY3Rpb24iKSxMW3goInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIildPU8oInJlamVjdGlvbmhhbmRsZWQiKSl9KSxTLl9f''@;'; put 'put ''bG9hZF9wYXRjaCgicXVldWVNaWNyb3Rhc2siLChSLEwsTyk9PnshZnVuY3Rpb24gaChTLFIpe1IucGF0Y2hNZXRob2QoUywicXVldWVNaWNyb3Rhc2siLEw9PmZ1bmN0aW9uKE8sTil7Wm9uZS5jdXJyZW50LnNjaGVkdWxlTWljcm9UYXNrKCJxdWV1ZU1pY3JvdGFzayIsTlswXSl9KX0oUixP''@;'; put 'put ''KX0pfShSbil9LDkyNTY4KGMsZix0KXsidXNlIHN0cmljdCI7Y29uc3Qgbj10KDgyNTc0KTtJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5mb3JtYXRUb1BhcnRzPWZ1bmN0aW9uKFApe2xldCBNPXRoaXMucmVzb2x2ZWRPcHRpb25zKCksVD1mdW5jdGlvbiBrKFApe3ZhciBaLG50LHR0''@;'; put 'put ''LHl0LG10LE09UC5hdmFpbGFibGVGb3JtYXRzLFQ9UC50aW1lRm9ybWF0cyxiPVAuZGF0ZUZvcm1hdHMsQj1QLm1lZGl1bSxVPVtdLHE9W10sWD1bXTtmdW5jdGlvbiBldChWLGx0KXt2YXIgZHQ9bmV3IEFycmF5KChWLm1hdGNoKC9NL2cpfHxbXSkubGVuZ3RoKzEpLEN0PW5ldyBBcnJheSgo''@;'; put 'put ''Vi5tYXRjaCgvRS9nKXx8W10pLmxlbmd0aCsxKTtyZXR1cm4gZHQubGVuZ3RoPjImJihsdD1sdC5yZXBsYWNlKC8oTXxMKSsvLGR0LmpvaW4oIiQxIikpKSxDdC5sZW5ndGg+MiYmKGx0PWx0LnJlcGxhY2UoLyhbRWVjXSkrLyxDdC5qb2luKCIkMSIpKSksbHR9Zm9yKFogaW4gTSlNLmhhc093''@;'; put 'put ''blByb3BlcnR5KFopJiYoKHR0PUEobnQ9ZXQoWixNW1pdKSkpJiYoVS5wdXNoKHR0KSxGKHR0KT9YLnB1c2gobnQpOngodHQpJiZxLnB1c2gobnQpKSk7Zm9yKHl0PTA7eXQ8cS5sZW5ndGg7eXQrPTEpZm9yKG10PTA7bXQ8WC5sZW5ndGg7bXQrPTEpKHR0PUEobnQ9Qi5yZXBsYWNlKCJ7MH0i''@;'; put 'put ''LHFbeXRdKS5yZXBsYWNlKCJ7MX0iLFhbbXRdKS5yZXBsYWNlKC9eWyxcc10rfFssXHNdKyQvZ2ksIiIpKSkmJlUucHVzaCh0dCk7Zm9yKFogaW4gVClULmhhc093blByb3BlcnR5KFopJiYoKHR0PUEobnQ9ZXQoWixUW1pdKSkpJiZVLnB1c2godHQpKTtmb3IoWiBpbiBiKWIuaGFzT3duUHJv''@;'; put 'put ''cGVydHkoWikmJigodHQ9QShudD1ldChaLGJbWl0pKSkmJlUucHVzaCh0dCkpO3JldHVybiBVfShuLmRhdGUuZm9ybWF0cyksYj17fTtmb3IodmFyIEIgaW4gbClzLmNhbGwobCxCKSYmKGJbIltbIitCKyJdXSJdPU1bQl0pO2xldCBaPWZ1bmN0aW9uIGkoUCxNLFQpe2Zvcih2YXIgcSxtdD0t''@;'; put 'put ''MS8wLFg9MCxldD1NLmxlbmd0aDtYPGV0Oyl7dmFyIFY9TVtYXSxsdD0wO2Zvcih2YXIgZHQgaW4gbClpZihzLmNhbGwobCxkdCkpe3ZhciBDdD1QWyJbWyIrZHQrIl1dIl0sT3Q9cy5jYWxsKFYsZHQpP1ZbZHRdOnZvaWQgMDtpZih2b2lkIDA9PT1DdCYmdm9pZCAwIT09T3QpbHQtPTIwO2Vs''@;'; put 'put ''c2UgaWYodm9pZCAwIT09Q3QmJnZvaWQgMD09PU90KWx0LT0xMjA7ZWxzZXt2YXIgTnQ9WyIyLWRpZ2l0IiwibnVtZXJpYyIsIm5hcnJvdyIsInNob3J0IiwibG9uZyJdLFF0PW8uY2FsbChOdCxDdCksYW49by5jYWxsKE50LE90KSxHdD1NYXRoLm1heChNYXRoLm1pbihhbi1RdCwyKSwtMik7''@;'; put 'put ''VCYmKCgibnVtZXJpYyI9PT1DdHx8IjItZGlnaXQiPT09Q3QpJiYibnVtZXJpYyIhPT1PdCYmIjItZGlnaXQiIT09T3R8fCJudW1lcmljIiE9PUN0JiYiMi1kaWdpdCIhPT1DdCYmKCIyLWRpZ2l0Ij09PU90fHwibnVtZXJpYyI9PT1PdCkpJiYobHQtPTgpLDI9PT1HdD9sdC09NjoxPT09R3Q/''@;'; put 'put ''bHQtPTM6LTE9PT1HdD9sdC09NjotMj09PUd0JiYobHQtPTgpfX1sdD5tdCYmKG10PWx0LHE9ViksWCsrfXJldHVybiBxfShiLFQpO3JldHVybiBmdW5jdGlvbiBlKFAsTSl7aWYoIWlzRmluaXRlKE0pKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHZhbGlkIGRhdGUgcGFzc2VkIHRv''@;'; put 'put ''IGZvcm1hdFRvUGFydHMiKTtmb3IodmFyIHEsVD0iZW4tVVMiLGI9UC5wYXR0ZXJuLFo9KG5ldyBJbnRsLk51bWJlckZvcm1hdChbVF0se3VzZUdyb3VwaW5nOiExfSksbmV3IEludGwuTnVtYmVyRm9ybWF0KFtUXSx7bWluaW11bUludGVnZXJEaWdpdHM6Mix1c2VHcm91cGluZzohMX0pLGZ1''@;'; put 'put ''bmN0aW9uIHYoUCxNLFQpe3ZhciBiPW5ldyBEYXRlKFApLEI9ImdldCIrKFR8fCIiKTtyZXR1cm57Iltbd2Vla2RheV1dIjpiW0IrIkRheSJdKCksIltbZXJhXV0iOisoYltCKyJGdWxsWWVhciJdKCk+PTApLCJbW3llYXJdXSI6YltCKyJGdWxsWWVhciJdKCksIltbbW9udGhdXSI6YltCKyJN''@;'; put 'put ''b250aCJdKCksIltbZGF5XV0iOmJbQisiRGF0ZSJdKCksIltbaG91cl1dIjpiW0IrIkhvdXJzIl0oKSwiW1ttaW51dGVdXSI6YltCKyJNaW51dGVzIl0oKSwiW1tzZWNvbmRdXSI6YltCKyJTZWNvbmRzIl0oKSwiW1tpbkRTVF1dIjohMX19KE0pKSxudD0iZ3JlZ29yeSIsdHQ9bi5kYXRlLmNh''@;'; put 'put ''bGVuZGFycyx5dD1bXSxtdD0veyhbXn1dKyl9L2csWD0wO251bGwhPT0ocT1tdC5leGVjKGIpKTspe1g8cS5pbmRleCYmeXQucHVzaCh7dHlwZToic2VwYXJhdG9yIix2YWx1ZTpiLnN1YnN0cihYLHEuaW5kZXgtWCl9KTt2YXIgZXQ9cVsxXSxWPW51bGw7aWYocy5jYWxsKFAsZXQpKXt2YXIg''@;'; put 'put ''bHQsZHQ9UFtldF0sQ3Q9WlsiW1siK2V0KyJdXSJdO2lmKCJ5ZWFyIj09PWV0JiZDdDw9MD9DdD0xLUN0OiJtb250aCI9PT1ldD9DdCsrOiJob3VyIj09PWV0JiYhMD09PVBbIltbaG91cjEyXV0iXSYmKGx0PShDdCU9MTIpIT09WlsiW1siK2V0KyJdXSJdLDA9PT1DdCYmITA9PT1QWyJbW2hv''@;'; put 'put ''dXJObzBdXSJdJiYoQ3Q9MTIpKSwibnVtZXJpYyI9PT1kdClWPUN0O2Vsc2UgaWYoIjItZGlnaXQiPT09ZHQpKFY9Q3QpLmxlbmd0aD4yJiYoVj1WLnNsaWNlKC0yKSk7ZWxzZSBpZihkdCBpbiB1KXN3aXRjaChldCl7Y2FzZSJtb250aCI6Vj1wKHR0LG50LCJtb250aHMiLGR0LFpbIltbIitl''@;'; put 'put ''dCsiXV0iXSk7YnJlYWs7Y2FzZSJ3ZWVrZGF5Ijp0cnl7Vj1wKHR0LG50LCJkYXlzIixkdCxaWyJbWyIrZXQrIl1dIl0pfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgd2Vla2RheSBkYXRhIGZvciBsb2NhbGUgIitUKX1icmVhaztjYXNlInRpbWVab25lTmFtZSI6Vj0i''@;'; put 'put ''IjticmVhaztkZWZhdWx0OlY9WlsiW1siK2V0KyJdXSJdfX1lbHNlImFtcG0iPT09ZXQmJihWPXAodHQsbnQsImRheVBlcmlvZHMiLGx0PyJwbSI6ImFtIikpO251bGwhPT1WJiYoeXQucHVzaCh7dHlwZTpxWzFdLHZhbHVlOlZ9KSxYPXEuaW5kZXgrcVswXS5sZW5ndGgpfXJldHVybiBYPGIu''@;'; put 'put ''bGVuZ3RoJiZ5dC5wdXNoKHt0eXBlOiJzZXBhcmF0b3IiLHZhbHVlOmIuc3Vic3RyKFgpfSkseXR9KFosUCl9O3ZhciBzPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbz1BcnJheS5wcm90b3R5cGUuaW5kZXhPZix1PU9iamVjdC5jcmVhdGUobnVsbCx7bmFycm93Ont9LHNob3J0''@;'; put 'put ''Ont9LGxvbmc6e319KSxsPXt3ZWVrZGF5OlsibmFycm93Iiwic2hvcnQiLCJsb25nIl0sZXJhOlsibmFycm93Iiwic2hvcnQiLCJsb25nIl0seWVhcjpbIjItZGlnaXQiLCJudW1lcmljIl0sbW9udGg6WyIyLWRpZ2l0IiwibnVtZXJpYyIsIm5hcnJvdyIsInNob3J0IiwibG9uZyJdLGRheTpb''@;'; put 'put ''IjItZGlnaXQiLCJudW1lcmljIl0saG91cjpbIjItZGlnaXQiLCJudW1lcmljIl0sbWludXRlOlsiMi1kaWdpdCIsIm51bWVyaWMiXSxzZWNvbmQ6WyIyLWRpZ2l0IiwibnVtZXJpYyJdLHRpbWVab25lTmFtZTpbInNob3J0IiwibG9uZyJdfTtmdW5jdGlvbiBwKFAsTSxULGIsQil7dmFyIFU9''@;'; put 'put ''UFtNXSYmUFtNXVtUXT9QW01dW1RdOlAuZ3JlZ29yeVtUXSxaPXtuYXJyb3c6WyJzaG9ydCIsImxvbmciXSxzaG9ydDpbImxvbmciLCJuYXJyb3ciXSxsb25nOlsic2hvcnQiLCJuYXJyb3ciXX0sbnQ9cy5jYWxsKFUsYik/VVtiXTpzLmNhbGwoVSxaW2JdWzBdKT9VW1pbYl1bMF1dOlVbWlti''@;'; put 'put ''XVsxXV07cmV0dXJuIG51bGwhPUI/bnRbQl06bnR9dmFyIGQ9Lyg/OltFZWNdezEsNn18R3sxLDV9fCg/Olt5WXVdK3xVezEsNX0pfFtNTF17MSw1fXxkezEsMn18YXxbaGtIS117MSwyfXxtezEsMn18c3sxLDJ9fHp7MSw0fSkoPz0oW14nXSonW14nXSonKSpbXiddKiQpL2cseT0vW1F4WFZP''@;'; put 'put ''dlpBU2pnRkR3V0lRcUhdLyxFPXttb250aDpbIm51bWVyaWMiLCIyLWRpZ2l0Iiwic2hvcnQiLCJsb25nIiwibmFycm93Il0sd2Vla2RheTpbInNob3J0Iiwic2hvcnQiLCJzaG9ydCIsImxvbmciLCJuYXJyb3ciXSxlcmE6WyJzaG9ydCIsInNob3J0Iiwic2hvcnQiLCJsb25nIiwibmFycm93''@;'; put 'put ''Il19LGc9WyJ3ZWVrZGF5IiwiZXJhIiwieWVhciIsIm1vbnRoIiwiZGF5Il0sRD1bImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJ0aW1lWm9uZU5hbWUiXTtmdW5jdGlvbiBGKFApe2Zvcih2YXIgTT0wO008RC5sZW5ndGg7TSs9MSlpZihQLmhhc093blByb3BlcnR5KERbTV0pKXJldHVybiEx''@;'; put 'put ''O3JldHVybiEwfWZ1bmN0aW9uIHgoUCl7Zm9yKHZhciBNPTA7TTxnLmxlbmd0aDtNKz0xKWlmKFAuaGFzT3duUHJvcGVydHkoZ1tNXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQShQKXtpZigheS50ZXN0KFApKXt2YXIgTT17fTtyZXR1cm4gTS5wYXR0ZXJuPVAucmVwbGFjZShkLGZ1''@;'; put 'put ''bmN0aW9uKFQpe3N3aXRjaChULmNoYXJBdCgwKSl7Y2FzZSJFIjpjYXNlImUiOmNhc2UiYyI6cmV0dXJuIE0ud2Vla2RheT1FLndlZWtkYXlbVC5sZW5ndGgtMV0sInt3ZWVrZGF5fSI7Y2FzZSJHIjpyZXR1cm4gTS5lcmE9RS5lcmFbVC5sZW5ndGgtMV0sIntlcmF9IjtjYXNlInkiOmNhc2Ui''@;'; put 'put ''WSI6Y2FzZSJ1IjpjYXNlIlUiOnJldHVybiBNLnllYXI9Mj09PVQubGVuZ3RoPyIyLWRpZ2l0IjoibnVtZXJpYyIsInt5ZWFyfSI7Y2FzZSJNIjpjYXNlIkwiOnJldHVybiBNLm1vbnRoPUUubW9udGhbVC5sZW5ndGgtMV0sInttb250aH0iO2Nhc2UiZCI6cmV0dXJuIE0uZGF5PTI9PT1ULmxl''@;'; put 'put ''bmd0aD8iMi1kaWdpdCI6Im51bWVyaWMiLCJ7ZGF5fSI7Y2FzZSJhIjpyZXR1cm4ie2FtcG19IjtjYXNlImgiOmNhc2UiSCI6Y2FzZSJrIjpjYXNlIksiOnJldHVybiBNLmhvdXI9Mj09PVQubGVuZ3RoPyIyLWRpZ2l0IjoibnVtZXJpYyIsIntob3VyfSI7Y2FzZSJtIjpyZXR1cm4gTS5taW51''@;'; put 'put ''dGU9Mj09PVQubGVuZ3RoPyIyLWRpZ2l0IjoibnVtZXJpYyIsInttaW51dGV9IjtjYXNlInMiOnJldHVybiBNLnNlY29uZD0yPT09VC5sZW5ndGg/IjItZGlnaXQiOiJudW1lcmljIiwie3NlY29uZH0iO2Nhc2UieiI6cmV0dXJuIE0udGltZVpvbmVOYW1lPVQubGVuZ3RoPDQ/InNob3J0Ijoi''@;'; put 'put ''bG9uZyIsInt0aW1lWm9uZU5hbWV9In19KSxNLnBhdHRlcm49TS5wYXR0ZXJuLnJlcGxhY2UoLycoW14nXSopJy9nLGZ1bmN0aW9uKFQsYil7cmV0dXJuIGJ8fCInIn0pLE0ucGF0dGVybi5pbmRleE9mKCJ7YW1wbX0iKT4tMSYmKE0uaG91cjEyPSEwLE0ucGF0dGVybjEyPU0ucGF0dGVybixN''@;'; put 'put ''LnBhdHRlcm49TS5wYXR0ZXJuLnJlcGxhY2UoInthbXBtfSIsIiIpLnJlcGxhY2UoL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKSksTX19fSw2NjM3NChjLGYsdCl7dCg4Mjk3NSksdCg0Nzg5OSksdCg5Mzg2MyksdCg4MjE4OSksdCg5NjUxMSksdCg5NTg1MyksdCg5''@;'; put 'put ''NzA3NSksdCgzNTA0KSx0KDU0OTEzKSx0KDM5ODEzKSx0KDg2NTExKSx0KDU4ODg4KSx0KDgxNDQ5KSx0KDQ3ODc0KSx0KDM0NjA5KSx0KDMzNzA2KSx0KDE5NjIwKSx0KDU3NzYyKSx0KDE1MTQ0KSx0KDc1MzY5KSx0KDc2MjA5KSx0KDk1MTY1KSx0KDU2MDk0KX0sMzI4OTkoYyxmLHQpe3Qo''@;'; put 'put ''MTMyOTIpLHQoNTIzNDYpLHQoOTQyOSksdCg3ODQ5KSx0KDQ4OTUxKSxjLmV4cG9ydHM9RGF0ZX0sMzkyNzEoYyxmLHQpe3QoNjUwNDkpLHQoNzA0ODkpLHQoOTU1MDIpLHQoNTYwOTQpfSwyMjkxMyhjLGYsdCl7dCgxNzQ4MiksdCg4Mjk3NSksdCgzNTg5MCksdCg5MzM4NiksdCg1NjA5NCl9''@;'; put 'put ''LDg4MDI1KGMsZix0KXt0KDc2NjQ4KSx0KDU1NzcxKSx0KDgyMzkyKSx0KDcyMzM1KSx0KDc0ODk2KSx0KDk0NTIxKSx0KDI5MTQ3KSx0KDQxMzE4KSx0KDg0MzUyKSx0KDE1MzI3KSx0KDU3NTA5KSx0KDE1OTA5KSx0KDc5NTg0KSx0KDQwMzQ1KSx0KDk5MTM0KSx0KDY3OTAxKSx0KDQ2NTky''@;'; put 'put ''KSx0KDU2MDk0KX0sMTU2MjYoYyxmLHQpe3QoNjQ1MDkpLHQoMzc3MjcpLHQoNjcwMSksdCgzNDQxOSksdCg5MTkzMyksdCg1NTUzOCksdCgzOTQ5NyksdCg0MTA0KSx0KDYwMjEwKSx0KDU2NTc2KSx0KDg0NDM3KSx0KDg4MDUwKSx0KDU2MDk0KX0sNTQ5NDAoYyxmLHQpe3QoOTk2NTApLHQo''@;'; put 'put ''OTM1KSx0KDY2MDY0KSx0KDg5NDQ4KSx0KDIyNjQyKSx0KDUzZTMpLHQoODg2NDcpLHQoODE4OTUpLHQoNDgyMzYpLHQoNzM4MjIpLHQoMTU1NzIpLHQoNjkzMTgpLHQoNjUwMzIpLHQoNzkwNzMpLHQoMTE0MzApLHQoMzg0NTEpLHQoMTgxMzIpLHQoMTc0ODIpLHQoNTYwOTQpfSwyNjIwMyhj''@;'; put 'put ''LGYsdCl7dCg5NjEwOCksdCg1NjA5NCl9LDUyNDQ0KGMsZix0KXt0KDkwNTcxKSx0KDU2MDk0KX0sNjU4NDYoYyxmLHQpe3QoNzEwMyksdCg4MjU4NiksdCg5MjU1MiksdCg0Mzc2KSx0KDc1MTUzKSx0KDExODc5KSx0KDUyNjUwKSx0KDMxMTA0KSx0KDIxODgzKSx0KDM1NDMzKSx0KDU1ZTMp''@;'; put 'put ''LHQoMTU5MzIpLHQoNTQ0MyksdCgyNjMxNiksdCg1NjA5NCl9LDQyNDYoYyxmLHQpe3QoODMwMSksdCg5NDExNiksdCg3ODYwNCksdCgzOTYzOCksdCg0MDQwKSx0KDY4MzA1KSx0KDc0NzAxKSx0KDIwMzQxKSx0KDU2MDk0KX0sMTA3NDMoYyxmLHQpe3QoMTc0ODIpLHQoODI5NzUpLHQoMzU4''@;'; put 'put ''OTApLHQoNzE2MzIpLHQoNTYwOTQpfSw1NjQ0MihjLGYsdCl7dCgxMjIyMCksdCgyMzQ4MyksdCgyMDk1NyksdCg4Mjk3NSksdCgzMjQwNSksdCgxNzIyNCksdCgyODg3MiksdCg0NDg5NCksdCgxMDE3NyksdCg2NDk3OSksdCg4OTAxMSksdCg1NDU5MSksdCg0NzMzNCksdCg3MDgzKSx0KDY5''@;'; put 'put ''MjEzKSx0KDM4NDM3KSx0KDYyMjIwKSx0KDc2NTQ5KSx0KDQyODE4KSx0KDI4NTQzKSx0KDM1NTkpLHQoODQxNTMpLHQoNDA0MCksdCg2ODMwNSksdCg3NDcwMSksdCgyMDM0MSksdCg1NjA5NCl9LDE4ODgzKGMsZix0KXt0KDk5NjUwKSx0KDE3NDgyKSx0KDU2MDk0KX0sOTM1MyhjLGYsdCl7''@;'; put 'put ''dCg3NzQ5MSksdCg3NDkwNyksdCg3OTEwMCksdCgxOTI2OSksdCg5MTMxOSksdCg3OTczMiksdCgxMTc2KSx0KDMxMDcpLHQoNjE2OTEpLHQoNTYwOTQpfSw2MzM4NyhjKXtjLmV4cG9ydHM9ZnVuY3Rpb24oZil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGYpdGhyb3cgVHlwZUVycm9yKGYrIiBp''@;'; put 'put ''cyBub3QgYSBmdW5jdGlvbiEiKTtyZXR1cm4gZn19LDE1MTIyKGMsZix0KXt2YXIgbj10KDU1MDg5KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzKXtpZigibnVtYmVyIiE9dHlwZW9mIGUmJiJOdW1iZXIiIT1uKGUpKXRocm93IFR5cGVFcnJvcihzKTtyZXR1cm4rZX19LDg4MTg0KGMsZix0KXt2''@;'; put 'put ''YXIgbj10KDY3NTc0KSgidW5zY29wYWJsZXMiKSxlPUFycmF5LnByb3RvdHlwZTtudWxsPT1lW25dJiZ0KDMzMzQxKShlLG4se30pLGMuZXhwb3J0cz1mdW5jdGlvbihzKXtlW25dW3NdPSEwfX0sMjg4MjgoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkxMjEyKSghMCk7Yy5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uKGUscyxvKXtyZXR1cm4gcysobz9uKGUscykubGVuZ3RoOjEpfX0sMTY0NDAoYyl7Yy5leHBvcnRzPWZ1bmN0aW9uKGYsdCxuLGUpe2lmKCEoZiBpbnN0YW5jZW9mIHQpfHx2b2lkIDAhPT1lJiZlIGluIGYpdGhyb3cgVHlwZUVycm9yKG4rIjogaW5jb3JyZWN0IGludm9jYXRp''@;'; put 'put ''b24hIik7cmV0dXJuIGZ9fSw0MjI4KGMsZix0KXt2YXIgbj10KDQzMzA1KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIW4oZSkpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYW4gb2JqZWN0ISIpO3JldHVybiBlfX0sODQ0MzgoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDE4Mjcw''@;'; put 'put ''KSxlPXQoNzAxNTcpLHM9dCg4MTQ4NSk7Yy5leHBvcnRzPVtdLmNvcHlXaXRoaW58fGZ1bmN0aW9uKHUsbCl7dmFyIGk9bih0aGlzKSx2PXMoaS5sZW5ndGgpLHA9ZSh1LHYpLGQ9ZShsLHYpLHk9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsRT1NYXRoLm1pbigodm9p''@;'; put 'put ''ZCAwPT09eT92OmUoeSx2KSktZCx2LXApLGc9MTtmb3IoZDxwJiZwPGQrRSYmKGc9LTEsZCs9RS0xLHArPUUtMSk7RS0tID4wOylkIGluIGk/aVtwXT1pW2RdOmRlbGV0ZSBpW3BdLHArPWcsZCs9ZztyZXR1cm4gaX19LDM1NTY0KGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCgxODI3MCks''@;'; put 'put ''ZT10KDcwMTU3KSxzPXQoODE0ODUpO2MuZXhwb3J0cz1mdW5jdGlvbih1KXtmb3IodmFyIGw9bih0aGlzKSxpPXMobC5sZW5ndGgpLHY9YXJndW1lbnRzLmxlbmd0aCxwPWUodj4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsaSksZD12PjI/YXJndW1lbnRzWzJdOnZvaWQgMCx5PXZvaWQgMD09PWQ/''@;'; put 'put ''aTplKGQsaSk7eT5wOylsW3ArK109dTtyZXR1cm4gbH19LDgwOTU2KGMsZix0KXt2YXIgbj10KDQ4NzkwKTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzKXt2YXIgbz1bXTtyZXR1cm4gbihlLCExLG8ucHVzaCxvLHMpLG99fSw2MTQ2NChjLGYsdCl7dmFyIG49dCg1NzIyMSksZT10KDgxNDg1KSxz''@;'; put 'put ''PXQoNzAxNTcpO2MuZXhwb3J0cz1mdW5jdGlvbihvKXtyZXR1cm4gZnVuY3Rpb24odSxsLGkpe3ZhciB5LHY9bih1KSxwPWUodi5sZW5ndGgpLGQ9cyhpLHApO2lmKG8mJmwhPWwpe2Zvcig7cD5kOylpZigoeT12W2QrK10pIT15KXJldHVybiEwfWVsc2UgZm9yKDtwPmQ7ZCsrKWlmKChvfHxk''@;'; put 'put ''IGluIHYpJiZ2W2RdPT09bClyZXR1cm4gb3x8ZHx8MDtyZXR1cm4hbyYmLTF9fX0sNjYxNzkoYyxmLHQpe3ZhciBuPXQoMzUwNTIpLGU9dCg2MTI0OSkscz10KDE4MjcwKSxvPXQoODE0ODUpLHU9dCg5MzE5MSk7Yy5leHBvcnRzPWZ1bmN0aW9uKGwsaSl7dmFyIHY9MT09bCxwPTI9PWwsZD0z''@;'; put 'put ''PT1sLHk9ND09bCxFPTY9PWwsZz01PT1sfHxFLEQ9aXx8dTtyZXR1cm4gZnVuY3Rpb24oRix4LEEpe2Zvcih2YXIgVSxaLGs9cyhGKSxQPWUoayksTT1uKHgsQSwzKSxUPW8oUC5sZW5ndGgpLGI9MCxCPXY/RChGLFQpOnA/RChGLDApOnZvaWQgMDtUPmI7YisrKWlmKChnfHxiIGluIFApJiYo''@;'; put 'put ''Wj1NKFU9UFtiXSxiLGspLGwpKWlmKHYpQltiXT1aO2Vsc2UgaWYoWilzd2l0Y2gobCl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gVTtjYXNlIDY6cmV0dXJuIGI7Y2FzZSAyOkIucHVzaChVKX1lbHNlIGlmKHkpcmV0dXJuITE7cmV0dXJuIEU/LTE6ZHx8eT95OkJ9fX0sNjU0Myhj''@;'; put 'put ''LGYsdCl7dmFyIG49dCg2MzM4NyksZT10KDE4MjcwKSxzPXQoNjEyNDkpLG89dCg4MTQ4NSk7Yy5leHBvcnRzPWZ1bmN0aW9uKHUsbCxpLHYscCl7bihsKTt2YXIgZD1lKHUpLHk9cyhkKSxFPW8oZC5sZW5ndGgpLGc9cD9FLTE6MCxEPXA/LTE6MTtpZihpPDIpZm9yKDs7KXtpZihnIGluIHkp''@;'; put 'put ''e3Y9eVtnXSxnKz1EO2JyZWFrfWlmKGcrPUQscD9nPDA6RTw9Zyl0aHJvdyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKX1mb3IoO3A/Zz49MDpFPmc7Zys9RClnIGluIHkmJih2PWwodix5W2ddLGcsZCkpO3JldHVybiB2fX0sNjM2MDYo''@;'; put 'put ''YyxmLHQpe3ZhciBuPXQoNDMzMDUpLGU9dCg3Nzk4MSkscz10KDY3NTc0KSgic3BlY2llcyIpO2MuZXhwb3J0cz1mdW5jdGlvbihvKXt2YXIgdTtyZXR1cm4gZShvKSYmKCJmdW5jdGlvbiI9PXR5cGVvZih1PW8uY29uc3RydWN0b3IpJiYodT09PUFycmF5fHxlKHUucHJvdG90eXBlKSkmJih1''@;'; put 'put ''PXZvaWQgMCksbih1KSYmbnVsbD09PSh1PXVbc10pJiYodT12b2lkIDApKSx2b2lkIDA9PT11P0FycmF5OnV9fSw5MzE5MShjLGYsdCl7dmFyIG49dCg2MzYwNik7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyl7cmV0dXJuIG5ldyhuKGUpKShzKX19LDE1NTM4KGMsZix0KXsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIG49dCg2MzM4NyksZT10KDQzMzA1KSxzPXQoMjQ4NzcpLG89W10uc2xpY2UsdT17fTtjLmV4cG9ydHM9RnVuY3Rpb24uYmluZHx8ZnVuY3Rpb24odil7dmFyIHA9bih0aGlzKSxkPW8uY2FsbChhcmd1bWVudHMsMSkseT1mdW5jdGlvbigpe3ZhciBFPWQuY29uY2F0KG8uY2FsbChhcmd1''@;'; put 'put ''bWVudHMpKTtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHk/ZnVuY3Rpb24oaSx2LHApe2lmKCEodiBpbiB1KSl7Zm9yKHZhciBkPVtdLHk9MDt5PHY7eSsrKWRbeV09ImFbIit5KyJdIjt1W3ZdPUZ1bmN0aW9uKCJGLGEiLCJyZXR1cm4gbmV3IEYoIitkLmpvaW4oIiwiKSsiKSIpfXJldHVybiB1''@;'; put 'put ''W3ZdKGkscCl9KHAsRS5sZW5ndGgsRSk6cyhwLEUsdil9O3JldHVybiBlKHAucHJvdG90eXBlKSYmKHkucHJvdG90eXBlPXAucHJvdG90eXBlKSx5fX0sMzQ4NDgoYyxmLHQpe3ZhciBuPXQoNTUwODkpLGU9dCg2NzU3NCkoInRvU3RyaW5nVGFnIikscz0iQXJndW1lbnRzIj09bihmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBhcmd1bWVudHN9KCkpO2MuZXhwb3J0cz1mdW5jdGlvbih1KXt2YXIgbCxpLHY7cmV0dXJuIHZvaWQgMD09PXU/IlVuZGVmaW5lZCI6bnVsbD09PXU/Ik51bGwiOiJzdHJpbmciPT10eXBlb2YoaT1mdW5jdGlvbih1LGwpe3RyeXtyZXR1cm4gdVtsXX1jYXRjaHt9fShsPU9i''@;'; put 'put ''amVjdCh1KSxlKSk/aTpzP24obCk6Ik9iamVjdCI9PSh2PW4obCkpJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5jYWxsZWU/IkFyZ3VtZW50cyI6dn19LDU1MDg5KGMpe3ZhciBmPXt9LnRvU3RyaW5nO2MuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZi5jYWxsKHQpLnNsaWNlKDgsLTEpfX0s''@;'; put 'put ''MzYxOTcoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQ3OTY3KS5mLGU9dCg4NDcxOSkscz10KDk2MDY1KSxvPXQoMzUwNTIpLHU9dCgxNjQ0MCksbD10KDQ4NzkwKSxpPXQoOTgxNzUpLHY9dCg3NDk3MCkscD10KDU1NzYyKSxkPXQoMTc2MykseT10KDEyOTg4KS5mYXN0S2V5LEU9dCgx''@;'; put 'put ''Mjg4OCksZz1kPyJfcyI6InNpemUiLEQ9ZnVuY3Rpb24oRix4KXt2YXIgayxBPXkoeCk7aWYoIkYiIT09QSlyZXR1cm4gRi5faVtBXTtmb3Ioaz1GLl9mO2s7az1rLm4paWYoay5rPT14KXJldHVybiBrfTtjLmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKEYseCxBLGspe3ZhciBQ''@;'; put 'put ''PUYoZnVuY3Rpb24oTSxUKXt1KE0sUCx4LCJfaSIpLE0uX3Q9eCxNLl9pPWUobnVsbCksTS5fZj12b2lkIDAsTS5fbD12b2lkIDAsTVtnXT0wLG51bGwhPVQmJmwoVCxBLE1ba10sTSl9KTtyZXR1cm4gcyhQLnByb3RvdHlwZSx7Y2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIFQ9RSh0aGlzLHgp''@;'; put 'put ''LGI9VC5faSxCPVQuX2Y7QjtCPUIubilCLnI9ITAsQi5wJiYoQi5wPUIucC5uPXZvaWQgMCksZGVsZXRlIGJbQi5pXTtULl9mPVQuX2w9dm9pZCAwLFRbZ109MH0sZGVsZXRlOmZ1bmN0aW9uKE0pe3ZhciBUPUUodGhpcyx4KSxiPUQoVCxNKTtpZihiKXt2YXIgQj1iLm4sVT1iLnA7ZGVsZXRl''@;'; put 'put ''IFQuX2lbYi5pXSxiLnI9ITAsVSYmKFUubj1CKSxCJiYoQi5wPVUpLFQuX2Y9PWImJihULl9mPUIpLFQuX2w9PWImJihULl9sPVUpLFRbZ10tLX1yZXR1cm4hIWJ9LGZvckVhY2g6ZnVuY3Rpb24oVCl7RSh0aGlzLHgpO2Zvcih2YXIgQixiPW8oVCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1l''@;'; put 'put ''bnRzWzFdOnZvaWQgMCwzKTtCPUI/Qi5uOnRoaXMuX2Y7KWZvcihiKEIudixCLmssdGhpcyk7QiYmQi5yOylCPUIucH0saGFzOmZ1bmN0aW9uKFQpe3JldHVybiEhRChFKHRoaXMseCksVCl9fSksZCYmbihQLnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiBFKHRoaXMs''@;'; put 'put ''eClbZ119fSksUH0sZGVmOmZ1bmN0aW9uKEYseCxBKXt2YXIgUCxNLGs9RChGLHgpO3JldHVybiBrP2sudj1BOihGLl9sPWs9e2k6TT15KHgsITApLGs6eCx2OkEscDpQPUYuX2wsbjp2b2lkIDAscjohMX0sRi5fZnx8KEYuX2Y9ayksUCYmKFAubj1rKSxGW2ddKyssIkYiIT09TSYmKEYuX2lb''@;'; put 'put ''TV09aykpLEZ9LGdldEVudHJ5OkQsc2V0U3Ryb25nOmZ1bmN0aW9uKEYseCxBKXtpKEYseCxmdW5jdGlvbihrLFApe3RoaXMuX3Q9RShrLHgpLHRoaXMuX2s9UCx0aGlzLl9sPXZvaWQgMH0sZnVuY3Rpb24oKXtmb3IodmFyIGs9dGhpcyxQPWsuX2ssTT1rLl9sO00mJk0ucjspTT1NLnA7cmV0''@;'; put 'put ''dXJuIGsuX3QmJihrLl9sPU09TT9NLm46ay5fdC5fZik/digwLCJrZXlzIj09UD9NLms6InZhbHVlcyI9PVA/TS52OltNLmssTS52XSk6KGsuX3Q9dm9pZCAwLHYoMSkpfSxBPyJlbnRyaWVzIjoidmFsdWVzIiwhQSwhMCkscCh4KX19fSw5OTg4MihjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBu''@;'; put 'put ''PXQoOTYwNjUpLGU9dCgxMjk4OCkuZ2V0V2VhayxzPXQoNDIyOCksbz10KDQzMzA1KSx1PXQoMTY0NDApLGw9dCg0ODc5MCksaT10KDY2MTc5KSx2PXQoNTc5MTcpLHA9dCgxMjg4OCksZD1pKDUpLHk9aSg2KSxFPTAsZz1mdW5jdGlvbih4KXtyZXR1cm4geC5fbHx8KHguX2w9bmV3IEQpfSxE''@;'; put 'put ''PWZ1bmN0aW9uKCl7dGhpcy5hPVtdfSxGPWZ1bmN0aW9uKHgsQSl7cmV0dXJuIGQoeC5hLGZ1bmN0aW9uKGspe3JldHVybiBrWzBdPT09QX0pfTtELnByb3RvdHlwZT17Z2V0OmZ1bmN0aW9uKHgpe3ZhciBBPUYodGhpcyx4KTtpZihBKXJldHVybiBBWzFdfSxoYXM6ZnVuY3Rpb24oeCl7cmV0''@;'; put 'put ''dXJuISFGKHRoaXMseCl9LHNldDpmdW5jdGlvbih4LEEpe3ZhciBrPUYodGhpcyx4KTtrP2tbMV09QTp0aGlzLmEucHVzaChbeCxBXSl9LGRlbGV0ZTpmdW5jdGlvbih4KXt2YXIgQT15KHRoaXMuYSxmdW5jdGlvbihrKXtyZXR1cm4ga1swXT09PXh9KTtyZXR1cm5+QSYmdGhpcy5hLnNwbGlj''@;'; put 'put ''ZShBLDEpLCEhfkF9fSxjLmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKHgsQSxrLFApe3ZhciBNPXgoZnVuY3Rpb24oVCxiKXt1KFQsTSxBLCJfaSIpLFQuX3Q9QSxULl9pPUUrKyxULl9sPXZvaWQgMCxudWxsIT1iJiZsKGIsayxUW1BdLFQpfSk7cmV0dXJuIG4oTS5wcm90b3R5''@;'; put 'put ''cGUse2RlbGV0ZTpmdW5jdGlvbihUKXtpZighbyhUKSlyZXR1cm4hMTt2YXIgYj1lKFQpO3JldHVybiEwPT09Yj9nKHAodGhpcyxBKSkuZGVsZXRlKFQpOmImJnYoYix0aGlzLl9pKSYmZGVsZXRlIGJbdGhpcy5faV19LGhhczpmdW5jdGlvbihiKXtpZighbyhiKSlyZXR1cm4hMTt2YXIgQj1l''@;'; put 'put ''KGIpO3JldHVybiEwPT09Qj9nKHAodGhpcyxBKSkuaGFzKGIpOkImJnYoQix0aGlzLl9pKX19KSxNfSxkZWY6ZnVuY3Rpb24oeCxBLGspe3ZhciBQPWUocyhBKSwhMCk7cmV0dXJuITA9PT1QP2coeCkuc2V0KEEsayk6UFt4Ll9pXT1rLHh9LHVmc3RvcmU6Z319LDU4OTMzKGMsZix0KXsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIG49dCg2NzUyNiksZT10KDkyMTI3KSxzPXQoMjg4NTkpLG89dCg5NjA2NSksdT10KDEyOTg4KSxsPXQoNDg3OTApLGk9dCgxNjQ0MCksdj10KDQzMzA1KSxwPXQoNzk0NDgpLGQ9dCg5ODkzMSkseT10KDM4NDQpLEU9dCg5ODg4MCk7Yy5leHBvcnRzPWZ1bmN0aW9uKGcs''@;'; put 'put ''RCxGLHgsQSxrKXt2YXIgUD1uW2ddLE09UCxUPUE/InNldCI6ImFkZCIsYj1NJiZNLnByb3RvdHlwZSxCPXt9LFU9ZnVuY3Rpb24ocSl7dmFyIFg9YltxXTtzKGIscSwiZGVsZXRlIj09cT9mdW5jdGlvbihldCl7cmV0dXJuIShrJiYhdihldCkpJiZYLmNhbGwodGhpcywwPT09ZXQ/MDpldCl9''@;'; put 'put ''OiJoYXMiPT1xP2Z1bmN0aW9uKFYpe3JldHVybiEoayYmIXYoVikpJiZYLmNhbGwodGhpcywwPT09Vj8wOlYpfToiZ2V0Ij09cT9mdW5jdGlvbihWKXtyZXR1cm4gayYmIXYoVik/dm9pZCAwOlguY2FsbCh0aGlzLDA9PT1WPzA6Vil9OiJhZGQiPT1xP2Z1bmN0aW9uKFYpe3JldHVybiBYLmNh''@;'; put 'put ''bGwodGhpcywwPT09Vj8wOlYpLHRoaXN9OmZ1bmN0aW9uKFYsbHQpe3JldHVybiBYLmNhbGwodGhpcywwPT09Vj8wOlYsbHQpLHRoaXN9KX07aWYoImZ1bmN0aW9uIj09dHlwZW9mIE0mJihrfHxiLmZvckVhY2gmJiFwKGZ1bmN0aW9uKCl7KG5ldyBNKS5lbnRyaWVzKCkubmV4dCgpfSkpKXt2''@;'; put 'put ''YXIgWj1uZXcgTSxudD1aW1RdKGs/e306LTAsMSkhPVosdHQ9cChmdW5jdGlvbigpe1ouaGFzKDEpfSkseXQ9ZChmdW5jdGlvbihxKXtuZXcgTShxKX0pLG10PSFrJiZwKGZ1bmN0aW9uKCl7Zm9yKHZhciBxPW5ldyBNLFg9NTtYLS07KXFbVF0oWCxYKTtyZXR1cm4hcS5oYXMoLTApfSk7eXR8''@;'; put 'put ''fCgoTT1EKGZ1bmN0aW9uKHEsWCl7aShxLE0sZyk7dmFyIGV0PUUobmV3IFAscSxNKTtyZXR1cm4gbnVsbCE9WCYmbChYLEEsZXRbVF0sZXQpLGV0fSkpLnByb3RvdHlwZT1iLGIuY29uc3RydWN0b3I9TSksKHR0fHxtdCkmJihVKCJkZWxldGUiKSxVKCJoYXMiKSxBJiZVKCJnZXQiKSksKG10''@;'; put 'put ''fHxudCkmJlUoVCksayYmYi5jbGVhciYmZGVsZXRlIGIuY2xlYXJ9ZWxzZSBNPXguZ2V0Q29uc3RydWN0b3IoRCxnLEEsVCksbyhNLnByb3RvdHlwZSxGKSx1Lk5FRUQ9ITA7cmV0dXJuIHkoTSxnKSxCW2ddPU0sZShlLkcrZS5XK2UuRiooTSE9UCksQiksa3x8eC5zZXRTdHJvbmcoTSxnLEEp''@;'; put 'put ''LE19fSw1NjA5NChjKXt2YXIgZj1jLmV4cG9ydHM9e3ZlcnNpb246IjIuNi4xMiJ9OyJudW1iZXIiPT10eXBlb2YgX19lJiYoX19lPWYpfSw2NzIyNyhjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoNDc5NjcpLGU9dCgxMTk5Nik7Yy5leHBvcnRzPWZ1bmN0aW9uKHMsbyx1KXtvIGluIHM/''@;'; put 'put ''bi5mKHMsbyxlKDAsdSkpOnNbb109dX19LDM1MDUyKGMsZix0KXt2YXIgbj10KDYzMzg3KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzLG8pe2lmKG4oZSksdm9pZCAwPT09cylyZXR1cm4gZTtzd2l0Y2gobyl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gZS5jYWxsKHMsdSl9O2Nh''@;'; put 'put ''c2UgMjpyZXR1cm4gZnVuY3Rpb24odSxsKXtyZXR1cm4gZS5jYWxsKHMsdSxsKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbih1LGwsaSl7cmV0dXJuIGUuY2FsbChzLHUsbCxpKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkocyxhcmd1bWVudHMpfX19LDU1Mzg1KGMsZix0KXsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIG49dCg3OTQ0OCksZT1EYXRlLnByb3RvdHlwZS5nZXRUaW1lLHM9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcsbz1mdW5jdGlvbih1KXtyZXR1cm4gdT45P3U6IjAiK3V9O2MuZXhwb3J0cz1uKGZ1bmN0aW9uKCl7cmV0dXJuIjAzODUtMDctMjVUMDc6MDY6Mzku''@;'; put 'put ''OTk5WiIhPXMuY2FsbChuZXcgRGF0ZSgtNTAwMDAwMDAwMDAwMDEpKX0pfHwhbihmdW5jdGlvbigpe3MuY2FsbChuZXcgRGF0ZShOYU4pKX0pP2Z1bmN0aW9uKCl7aWYoIWlzRmluaXRlKGUuY2FsbCh0aGlzKSkpdGhyb3cgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7dmFyIGw9''@;'; put 'put ''dGhpcyxpPWwuZ2V0VVRDRnVsbFllYXIoKSx2PWwuZ2V0VVRDTWlsbGlzZWNvbmRzKCkscD1pPDA/Ii0iOmk+OTk5OT8iKyI6IiI7cmV0dXJuIHArKCIwMDAwMCIrTWF0aC5hYnMoaSkpLnNsaWNlKHA/LTY6LTQpKyItIitvKGwuZ2V0VVRDTW9udGgoKSsxKSsiLSIrbyhsLmdldFVUQ0RhdGUo''@;'; put 'put ''KSkrIlQiK28obC5nZXRVVENIb3VycygpKSsiOiIrbyhsLmdldFVUQ01pbnV0ZXMoKSkrIjoiK28obC5nZXRVVENTZWNvbmRzKCkpKyIuIisodj45OT92OiIwIitvKHYpKSsiWiJ9OnN9LDIwMTA3KGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCg0MjI4KSxlPXQoODMwNDgpLHM9Im51bWJl''@;'; put 'put ''ciI7Yy5leHBvcnRzPWZ1bmN0aW9uKG8pe2lmKCJzdHJpbmciIT09byYmbyE9PXMmJiJkZWZhdWx0IiE9PW8pdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgaGludCIpO3JldHVybiBlKG4odGhpcyksbyE9cyl9fSwzMzQ0KGMpe2MuZXhwb3J0cz1mdW5jdGlvbihmKXtpZihudWxsPT1mKXRo''@;'; put 'put ''cm93IFR5cGVFcnJvcigiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gICIrZik7cmV0dXJuIGZ9fSwxNzYzKGMsZix0KXtjLmV4cG9ydHM9IXQoNzk0NDgpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9''@;'; put 'put ''KX0sNDYwMzQoYyxmLHQpe3ZhciBuPXQoNDMzMDUpLGU9dCg2NzUyNikuZG9jdW1lbnQscz1uKGUpJiZuKGUuY3JlYXRlRWxlbWVudCk7Yy5leHBvcnRzPWZ1bmN0aW9uKG8pe3JldHVybiBzP2UuY3JlYXRlRWxlbWVudChvKTp7fX19LDg2MTQwKGMpe2MuZXhwb3J0cz0iY29uc3RydWN0b3Is''@;'; put 'put ''aGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mIi5zcGxpdCgiLCIpfSwxNTk2OShjLGYsdCl7dmFyIG49dCg1MTMxMSksZT10KDEwNjApLHM9dCg4NDQ5KTtjLmV4cG9ydHM9ZnVuY3Rpb24obyl7''@;'; put 'put ''dmFyIHU9bihvKSxsPWUuZjtpZihsKWZvcih2YXIgZCxpPWwobyksdj1zLmYscD0wO2kubGVuZ3RoPnA7KXYuY2FsbChvLGQ9aVtwKytdKSYmdS5wdXNoKGQpO3JldHVybiB1fX0sOTIxMjcoYyxmLHQpe3ZhciBuPXQoNjc1MjYpLGU9dCg1NjA5NCkscz10KDMzMzQxKSxvPXQoMjg4NTkpLHU9''@;'; put 'put ''dCgzNTA1MiksbD0icHJvdG90eXBlIixpPWZ1bmN0aW9uKHYscCxkKXt2YXIgUCxNLFQsYix5PXYmaS5GLEU9diZpLkcsRD12JmkuUCxGPXYmaS5CLHg9RT9uOnYmaS5TP25bcF18fChuW3BdPXt9KToobltwXXx8e30pW2xdLEE9RT9lOmVbcF18fChlW3BdPXt9KSxrPUFbbF18fChBW2xdPXt9''@;'; put 'put ''KTtmb3IoUCBpbiBFJiYoZD1wKSxkKVQ9KChNPSF5JiZ4JiZ2b2lkIDAhPT14W1BdKT94OmQpW1BdLGI9RiYmTT91KFQsbik6RCYmImZ1bmN0aW9uIj09dHlwZW9mIFQ/dShGdW5jdGlvbi5jYWxsLFQpOlQseCYmbyh4LFAsVCx2JmkuVSksQVtQXSE9VCYmcyhBLFAsYiksRCYma1tQXSE9VCYm''@;'; put 'put ''KGtbUF09VCl9O24uY29yZT1lLGkuRj0xLGkuRz0yLGkuUz00LGkuUD04LGkuQj0xNixpLlc9MzIsaS5VPTY0LGkuUj0xMjgsYy5leHBvcnRzPWl9LDI1MjAzKGMsZix0KXt2YXIgbj10KDY3NTc0KSgibWF0Y2giKTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHM9Ly4vO3RyeXsiLy4vIltl''@;'; put 'put ''XShzKX1jYXRjaHt0cnl7cmV0dXJuIHNbbl09ITEsISIvLi8iW2VdKHMpfWNhdGNoe319cmV0dXJuITB9fSw3OTQ0OChjKXtjLmV4cG9ydHM9ZnVuY3Rpb24oZil7dHJ5e3JldHVybiEhZigpfWNhdGNoe3JldHVybiEwfX19LDY5MjI4KGMsZix0KXsidXNlIHN0cmljdCI7dCg5NDExNik7dmFy''@;'; put 'put ''IG49dCgyODg1OSksZT10KDMzMzQxKSxzPXQoNzk0NDgpLG89dCgzMzQ0KSx1PXQoNjc1NzQpLGw9dCg2OTYwMCksaT11KCJzcGVjaWVzIiksdj0hcyhmdW5jdGlvbigpe3ZhciBkPS8uLztyZXR1cm4gZC5leGVjPWZ1bmN0aW9uKCl7dmFyIHk9W107cmV0dXJuIHkuZ3JvdXBzPXthOiI3In0s''@;'; put 'put ''eX0sIjciIT09IiIucmVwbGFjZShkLCIkPGE+Iil9KSxwPWZ1bmN0aW9uKCl7dmFyIGQ9Lyg/OikvLHk9ZC5leGVjO2QuZXhlYz1mdW5jdGlvbigpe3JldHVybiB5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIEU9ImFiIi5zcGxpdChkKTtyZXR1cm4gMj09PUUubGVuZ3RoJiYiYSI9PT1F''@;'; put 'put ''WzBdJiYiYiI9PT1FWzFdfSgpO2MuZXhwb3J0cz1mdW5jdGlvbihkLHksRSl7dmFyIGc9dShkKSxEPSFzKGZ1bmN0aW9uKCl7dmFyIE09e307cmV0dXJuIE1bZ109ZnVuY3Rpb24oKXtyZXR1cm4gN30sNyE9IiJbZF0oTSl9KSxGPUQ/IXMoZnVuY3Rpb24oKXt2YXIgTT0hMSxUPS9hLztyZXR1''@;'; put 'put ''cm4gVC5leGVjPWZ1bmN0aW9uKCl7cmV0dXJuIE09ITAsbnVsbH0sInNwbGl0Ij09PWQmJihULmNvbnN0cnVjdG9yPXt9LFQuY29uc3RydWN0b3JbaV09ZnVuY3Rpb24oKXtyZXR1cm4gVH0pLFRbZ10oIiIpLCFNfSk6dm9pZCAwO2lmKCFEfHwhRnx8InJlcGxhY2UiPT09ZCYmIXZ8fCJzcGxp''@;'; put 'put ''dCI9PT1kJiYhcCl7dmFyIHg9Ly4vW2ddLEE9RShvLGcsIiJbZF0sZnVuY3Rpb24oVCxiLEIsVSxaKXtyZXR1cm4gYi5leGVjPT09bD9EJiYhWj97ZG9uZTohMCx2YWx1ZTp4LmNhbGwoYixCLFUpfTp7ZG9uZTohMCx2YWx1ZTpULmNhbGwoQixiLFUpfTp7ZG9uZTohMX19KSxQPUFbMV07bihT''@;'; put 'put ''dHJpbmcucHJvdG90eXBlLGQsQVswXSksZShSZWdFeHAucHJvdG90eXBlLGcsMj09eT9mdW5jdGlvbihNLFQpe3JldHVybiBQLmNhbGwoTSx0aGlzLFQpfTpmdW5jdGlvbihNKXtyZXR1cm4gUC5jYWxsKE0sdGhpcyl9KX19fSwxMTU4KGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCg0MjI4''@;'; put 'put ''KTtjLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZT1uKHRoaXMpLHM9IiI7cmV0dXJuIGUuZ2xvYmFsJiYocys9ImciKSxlLmlnbm9yZUNhc2UmJihzKz0iaSIpLGUubXVsdGlsaW5lJiYocys9Im0iKSxlLnVuaWNvZGUmJihzKz0idSIpLGUuc3RpY2t5JiYocys9InkiKSxzfX0sNDg3OTAoYyxm''@;'; put 'put ''LHQpe3ZhciBuPXQoMzUwNTIpLGU9dCg5NzM2OCkscz10KDE1MDgpLG89dCg0MjI4KSx1PXQoODE0ODUpLGw9dCgyMDc2MiksaT17fSx2PXt9LHA9Yy5leHBvcnRzPWZ1bmN0aW9uKGQseSxFLGcsRCl7dmFyIGssUCxNLFQsRj1EP2Z1bmN0aW9uKCl7cmV0dXJuIGR9OmwoZCkseD1uKEUsZyx5''@;'; put 'put ''PzI6MSksQT0wO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBGKXRocm93IFR5cGVFcnJvcihkKyIgaXMgbm90IGl0ZXJhYmxlISIpO2lmKHMoRikpe2ZvcihrPXUoZC5sZW5ndGgpO2s+QTtBKyspaWYoKFQ9eT94KG8oUD1kW0FdKVswXSxQWzFdKTp4KGRbQV0pKT09PWl8fFQ9PT12KXJldHVybiBU''@;'; put 'put ''fWVsc2UgZm9yKE09Ri5jYWxsKGQpOyEoUD1NLm5leHQoKSkuZG9uZTspaWYoKFQ9ZShNLHgsUC52YWx1ZSx5KSk9PT1pfHxUPT09dilyZXR1cm4gVH07cC5CUkVBSz1pLHAuUkVUVVJOPXZ9LDQ5NDYxKGMsZix0KXtjLmV4cG9ydHM9dCg0NDU1NikoIm5hdGl2ZS1mdW5jdGlvbi10by1zdHJp''@;'; put 'put ''bmciLEZ1bmN0aW9uLnRvU3RyaW5nKX0sNjc1MjYoYyl7dmFyIGY9Yy5leHBvcnRzPXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6dHlwZW9mIHNlbGY8InUiJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOyJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgX19nJiYoX19nPWYpfSw1NzkxNyhjKXt2YXIgZj17fS5oYXNPd25Qcm9wZXJ0eTtjLmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZi5jYWxsKHQsbil9fSwzMzM0MShjLGYsdCl7dmFyIG49dCg0Nzk2NyksZT10KDExOTk2KTtjLmV4cG9ydHM9dCgxNzYzKT9mdW5jdGlv''@;'; put 'put ''bihzLG8sdSl7cmV0dXJuIG4uZihzLG8sZSgxLHUpKX06ZnVuY3Rpb24ocyxvLHUpe3JldHVybiBzW29dPXUsc319LDYxMzA4KGMsZix0KXt2YXIgbj10KDY3NTI2KS5kb2N1bWVudDtjLmV4cG9ydHM9biYmbi5kb2N1bWVudEVsZW1lbnR9LDIyOTU2KGMsZix0KXtjLmV4cG9ydHM9IXQoMTc2''@;'; put 'put ''MykmJiF0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkodCg0NjAzNCkoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSw5ODg4MChjLGYsdCl7dmFyIG49dCg0MzMwNSksZT10KDI1MTcwKS5zZXQ7Yy5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uKHMsbyx1KXt2YXIgaSxsPW8uY29uc3RydWN0b3I7cmV0dXJuIGwhPT11JiYiZnVuY3Rpb24iPT10eXBlb2YgbCYmKGk9bC5wcm90b3R5cGUpIT09dS5wcm90b3R5cGUmJm4oaSkmJmUmJmUocyxpKSxzfX0sMjQ4NzcoYyl7Yy5leHBvcnRzPWZ1bmN0aW9uKGYsdCxuKXt2YXIgZT12''@;'; put 'put ''b2lkIDA9PT1uO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlP2YoKTpmLmNhbGwobik7Y2FzZSAxOnJldHVybiBlP2YodFswXSk6Zi5jYWxsKG4sdFswXSk7Y2FzZSAyOnJldHVybiBlP2YodFswXSx0WzFdKTpmLmNhbGwobix0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4gZT9mKHRb''@;'; put 'put ''MF0sdFsxXSx0WzJdKTpmLmNhbGwobix0WzBdLHRbMV0sdFsyXSk7Y2FzZSA0OnJldHVybiBlP2YodFswXSx0WzFdLHRbMl0sdFszXSk6Zi5jYWxsKG4sdFswXSx0WzFdLHRbMl0sdFszXSl9cmV0dXJuIGYuYXBwbHkobix0KX19LDYxMjQ5KGMsZix0KXt2YXIgbj10KDU1MDg5KTtjLmV4cG9y''@;'; put 'put ''dHM9T2JqZWN0KCJ6IikucHJvcGVydHlJc0VudW1lcmFibGUoMCk/T2JqZWN0OmZ1bmN0aW9uKGUpe3JldHVybiJTdHJpbmciPT1uKGUpP2Uuc3BsaXQoIiIpOk9iamVjdChlKX19LDE1MDgoYyxmLHQpe3ZhciBuPXQoNjA5MDYpLGU9dCg2NzU3NCkoIml0ZXJhdG9yIikscz1BcnJheS5wcm90''@;'; put 'put ''b3R5cGU7Yy5leHBvcnRzPWZ1bmN0aW9uKG8pe3JldHVybiB2b2lkIDAhPT1vJiYobi5BcnJheT09PW98fHNbZV09PT1vKX19LDc3OTgxKGMsZix0KXt2YXIgbj10KDU1MDg5KTtjLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24ocyl7cmV0dXJuIkFycmF5Ij09bihzKX19LDMzODQy''@;'; put 'put ''KGMsZix0KXt2YXIgbj10KDQzMzA1KSxlPU1hdGguZmxvb3I7Yy5leHBvcnRzPWZ1bmN0aW9uKG8pe3JldHVybiFuKG8pJiZpc0Zpbml0ZShvKSYmZShvKT09PW99fSw0MzMwNShjKXtjLmV4cG9ydHM9ZnVuY3Rpb24oZil7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBmP251bGwhPT1mOiJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBmfX0sOTU0MTEoYyxmLHQpe3ZhciBuPXQoNDMzMDUpLGU9dCg1NTA4OSkscz10KDY3NTc0KSgibWF0Y2giKTtjLmV4cG9ydHM9ZnVuY3Rpb24obyl7dmFyIHU7cmV0dXJuIG4obykmJih2b2lkIDAhPT0odT1vW3NdKT8hIXU6IlJlZ0V4cCI9PWUobykpfX0sOTczNjgo''@;'; put 'put ''YyxmLHQpe3ZhciBuPXQoNDIyOCk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyxvLHUpe3RyeXtyZXR1cm4gdT9zKG4obylbMF0sb1sxXSk6cyhvKX1jYXRjaChpKXt2YXIgbD1lLnJldHVybjt0aHJvdyB2b2lkIDAhPT1sJiZuKGwuY2FsbChlKSksaX19fSw2MDMyKGMsZix0KXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIG49dCg4NDcxOSksZT10KDExOTk2KSxzPXQoMzg0NCksbz17fTt0KDMzMzQxKShvLHQoNjc1NzQpKCJpdGVyYXRvciIpLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxjLmV4cG9ydHM9ZnVuY3Rpb24odSxsLGkpe3UucHJvdG90eXBlPW4obyx7bmV4dDplKDEsaSl9KSxzKHUsbCsi''@;'; put 'put ''IEl0ZXJhdG9yIil9fSw5ODE3NShjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoMjI3NTApLGU9dCg5MjEyNykscz10KDI4ODU5KSxvPXQoMzMzNDEpLHU9dCg2MDkwNiksbD10KDYwMzIpLGk9dCgzODQ0KSx2PXQoNDA2MjcpLHA9dCg2NzU3NCkoIml0ZXJhdG9yIiksZD0hKFtdLmtleXMm''@;'; put 'put ''JiJuZXh0ImluW10ua2V5cygpKSxFPSJrZXlzIixnPSJ2YWx1ZXMiLEQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307Yy5leHBvcnRzPWZ1bmN0aW9uKEYseCxBLGssUCxNLFQpe2woQSx4LGspO3ZhciBYLGV0LFYsYj1mdW5jdGlvbihsdCl7aWYoIWQmJmx0IGluIG50KXJldHVybiBudFtsdF07''@;'; put 'put ''c3dpdGNoKGx0KXtjYXNlIEU6Y2FzZSBnOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgQSh0aGlzLGx0KX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBKHRoaXMsbHQpfX0sQj14KyIgSXRlcmF0b3IiLFU9UD09ZyxaPSExLG50PUYucHJvdG90eXBlLHR0PW50W3BdfHxudFsi''@;'; put 'put ''QEBpdGVyYXRvciJdfHxQJiZudFtQXSx5dD10dHx8YihQKSxtdD1QP1U/YigiZW50cmllcyIpOnl0OnZvaWQgMCxxPSJBcnJheSI9PXgmJm50LmVudHJpZXN8fHR0O2lmKHEmJihWPXYocS5jYWxsKG5ldyBGKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmVi5uZXh0JiYoaShWLEIsITApLCFuJiYi''@;'; put 'put ''ZnVuY3Rpb24iIT10eXBlb2YgVltwXSYmbyhWLHAsRCkpLFUmJnR0JiZ0dC5uYW1lIT09ZyYmKFo9ITAseXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdHQuY2FsbCh0aGlzKX0pLCghbnx8VCkmJihkfHxafHwhbnRbcF0pJiZvKG50LHAseXQpLHVbeF09eXQsdVtCXT1ELFApaWYoWD17dmFsdWVzOlU/''@;'; put 'put ''eXQ6YihnKSxrZXlzOk0/eXQ6YihFKSxlbnRyaWVzOm10fSxUKWZvcihldCBpbiBYKWV0IGluIG50fHxzKG50LGV0LFhbZXRdKTtlbHNlIGUoZS5QK2UuRiooZHx8WikseCxYKTtyZXR1cm4gWH19LDk4OTMxKGMsZix0KXt2YXIgbj10KDY3NTc0KSgiaXRlcmF0b3IiKSxlPSExO3RyeXt2YXIg''@;'; put 'put ''cz1bN11bbl0oKTtzLnJldHVybj1mdW5jdGlvbigpe2U9ITB9LEFycmF5LmZyb20ocyxmdW5jdGlvbigpe3Rocm93IDJ9KX1jYXRjaHt9Yy5leHBvcnRzPWZ1bmN0aW9uKG8sdSl7aWYoIXUmJiFlKXJldHVybiExO3ZhciBsPSExO3RyeXt2YXIgaT1bN10sdj1pW25dKCk7di5uZXh0PWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJue2RvbmU6bD0hMH19LGlbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdn0sbyhpKX1jYXRjaHt9cmV0dXJuIGx9fSw3NDk3MChjKXtjLmV4cG9ydHM9ZnVuY3Rpb24oZix0KXtyZXR1cm57dmFsdWU6dCxkb25lOiEhZn19fSw2MDkwNihjKXtjLmV4cG9ydHM9e319LDIyNzUwKGMp''@;'; put 'put ''e2MuZXhwb3J0cz0hMX0sNzU1NTEoYyl7dmFyIGY9TWF0aC5leHBtMTtjLmV4cG9ydHM9IWZ8fGYoMTApPjIyMDI1LjQ2NTc5NDgwNjcxOHx8ZigxMCk8MjIwMjUuNDY1Nzk0ODA2NzE4fHwtMmUtMTchPWYoLTJlLTE3KT9mdW5jdGlvbihuKXtyZXR1cm4gMD09KG49K24pP246bj4tMWUtNiYm''@;'; put 'put ''bjwxZS02P24rbipuLzI6TWF0aC5leHAobiktMX06Zn0sNzIxMjIoYyxmLHQpe3ZhciBuPXQoMzczMyksZT1NYXRoLnBvdyxzPWUoMiwtNTIpLG89ZSgyLC0yMyksdT1lKDIsMTI3KSooMi1vKSxsPWUoMiwtMTI2KTtjLmV4cG9ydHM9TWF0aC5mcm91bmR8fGZ1bmN0aW9uKHApe3ZhciBFLGcs''@;'; put 'put ''ZD1NYXRoLmFicyhwKSx5PW4ocCk7cmV0dXJuIGQ8bD95KihkL2wvbysxL3MtMS9zKSpsKm86KGc9KEU9KDErby9zKSpkKS0oRS1kKSk+dXx8ZyE9Zz95KigxLzApOnkqZ319LDcxNDczKGMpe2MuZXhwb3J0cz1NYXRoLmxvZzFwfHxmdW5jdGlvbih0KXtyZXR1cm4odD0rdCk+LTFlLTgmJnQ8''@;'; put 'put ''MWUtOD90LXQqdC8yOk1hdGgubG9nKDErdCl9fSwzNzMzKGMpe2MuZXhwb3J0cz1NYXRoLnNpZ258fGZ1bmN0aW9uKHQpe3JldHVybiAwPT0odD0rdCl8fHQhPXQ/dDp0PDA/LTE6MX19LDEyOTg4KGMsZix0KXt2YXIgbj10KDQ0MTUpKCJtZXRhIiksZT10KDQzMzA1KSxzPXQoNTc5MTcpLG89''@;'; put 'put ''dCg0Nzk2NykuZix1PTAsbD1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSxpPSF0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybiBsKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpfSksdj1mdW5jdGlvbihnKXtvKGcsbix7dmFsdWU6e2k6Ik8iKyArK3Usdzp7''@;'; put 'put ''fX19KX0sRT1jLmV4cG9ydHM9e0tFWTpuLE5FRUQ6ITEsZmFzdEtleTpmdW5jdGlvbihnLEQpe2lmKCFlKGcpKXJldHVybiJzeW1ib2wiPT10eXBlb2YgZz9nOigic3RyaW5nIj09dHlwZW9mIGc/IlMiOiJQIikrZztpZighcyhnLG4pKXtpZighbChnKSlyZXR1cm4iRiI7aWYoIUQpcmV0dXJu''@;'; put 'put ''IkUiO3YoZyl9cmV0dXJuIGdbbl0uaX0sZ2V0V2VhazpmdW5jdGlvbihnLEQpe2lmKCFzKGcsbikpe2lmKCFsKGcpKXJldHVybiEwO2lmKCFEKXJldHVybiExO3YoZyl9cmV0dXJuIGdbbl0ud30sb25GcmVlemU6ZnVuY3Rpb24oZyl7cmV0dXJuIGkmJkUuTkVFRCYmbChnKSYmIXMoZyxuKSYm''@;'; put 'put ''dihnKSxnfX19LDk3MzgwKGMsZix0KXt2YXIgbj10KDkzMzg2KSxlPXQoOTIxMjcpLHM9dCg0NDU1NikoIm1ldGFkYXRhIiksbz1zLnN0b3JlfHwocy5zdG9yZT1uZXcodCg3OTM5NykpKSx1PWZ1bmN0aW9uKEUsZyxEKXt2YXIgRj1vLmdldChFKTtpZighRil7aWYoIUQpcmV0dXJuO28uc2V0''@;'; put 'put ''KEUsRj1uZXcgbil9dmFyIHg9Ri5nZXQoZyk7aWYoIXgpe2lmKCFEKXJldHVybjtGLnNldChnLHg9bmV3IG4pfXJldHVybiB4fTtjLmV4cG9ydHM9e3N0b3JlOm8sbWFwOnUsaGFzOmZ1bmN0aW9uKEUsZyxEKXt2YXIgRj11KGcsRCwhMSk7cmV0dXJuIHZvaWQgMCE9PUYmJkYuaGFzKEUpfSxn''@;'; put 'put ''ZXQ6ZnVuY3Rpb24oRSxnLEQpe3ZhciBGPXUoZyxELCExKTtyZXR1cm4gdm9pZCAwPT09Rj92b2lkIDA6Ri5nZXQoRSl9LHNldDpmdW5jdGlvbihFLGcsRCxGKXt1KEQsRiwhMCkuc2V0KEUsZyl9LGtleXM6ZnVuY3Rpb24oRSxnKXt2YXIgRD11KEUsZywhMSksRj1bXTtyZXR1cm4gRCYmRC5m''@;'; put 'put ''b3JFYWNoKGZ1bmN0aW9uKHgsQSl7Ri5wdXNoKEEpfSksRn0sa2V5OmZ1bmN0aW9uKEUpe3JldHVybiB2b2lkIDA9PT1FfHwic3ltYm9sIj09dHlwZW9mIEU/RTpTdHJpbmcoRSl9LGV4cDpmdW5jdGlvbihFKXtlKGUuUywiUmVmbGVjdCIsRSl9fX0sMjgyMDYoYyxmLHQpeyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgbj10KDE3NjMpLGU9dCg1MTMxMSkscz10KDEwNjApLG89dCg4NDQ5KSx1PXQoMTgyNzApLGw9dCg2MTI0OSksaT1PYmplY3QuYXNzaWduO2MuZXhwb3J0cz0haXx8dCg3OTQ0OCkoZnVuY3Rpb24oKXt2YXIgdj17fSxwPXt9LGQ9U3ltYm9sKCkseT0iYWJjZGVmZ2hpamtsbW5vcHFy''@;'; put 'put ''c3QiO3JldHVybiB2W2RdPTcseS5zcGxpdCgiIikuZm9yRWFjaChmdW5jdGlvbihFKXtwW0VdPUV9KSw3IT1pKHt9LHYpW2RdfHxPYmplY3Qua2V5cyhpKHt9LHApKS5qb2luKCIiKSE9eX0pP2Z1bmN0aW9uKHAsZCl7Zm9yKHZhciB5PXUocCksRT1hcmd1bWVudHMubGVuZ3RoLGc9MSxEPXMu''@;'; put 'put ''ZixGPW8uZjtFPmc7KWZvcih2YXIgTSx4PWwoYXJndW1lbnRzW2crK10pLEE9RD9lKHgpLmNvbmNhdChEKHgpKTplKHgpLGs9QS5sZW5ndGgsUD0wO2s+UDspTT1BW1ArK10sKCFufHxGLmNhbGwoeCxNKSkmJih5W01dPXhbTV0pO3JldHVybiB5fTppfSw4NDcxOShjLGYsdCl7dmFyIG49dCg0''@;'; put 'put ''MjI4KSxlPXQoMjE2MjYpLHM9dCg4NjE0MCksbz10KDQwNzY2KSgiSUVfUFJPVE8iKSx1PWZ1bmN0aW9uKCl7fSxsPSJwcm90b3R5cGUiLGk9ZnVuY3Rpb24oKXt2YXIgRSx2PXQoNDYwMzQpKCJpZnJhbWUiKSxwPXMubGVuZ3RoO2Zvcih2LnN0eWxlLmRpc3BsYXk9Im5vbmUiLHQoNjEzMDgp''@;'; put 'put ''LmFwcGVuZENoaWxkKHYpLHYuc3JjPSJqYXZhc2NyaXB0OiIsKEU9di5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksRS53cml0ZSgiPHNjcmlwdD5kb2N1bWVudC5GPU9iamVjdDxcL3NjcmlwdD4iKSxFLmNsb3NlKCksaT1FLkY7cC0tOylkZWxldGUgaVtsXVtzW3BdXTtyZXR1cm4g''@;'; put 'put ''aSgpfTtjLmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24ocCxkKXt2YXIgeTtyZXR1cm4gbnVsbCE9PXA/KHVbbF09bihwKSx5PW5ldyB1LHVbbF09bnVsbCx5W29dPXApOnk9aSgpLHZvaWQgMD09PWQ/eTplKHksZCl9fSw0Nzk2NyhjLGYsdCl7dmFyIG49dCg0MjI4KSxlPXQoMjI5''@;'; put 'put ''NTYpLHM9dCg4MzA0OCksbz1PYmplY3QuZGVmaW5lUHJvcGVydHk7Zi5mPXQoMTc2Myk/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGwsaSx2KXtpZihuKGwpLGk9cyhpLCEwKSxuKHYpLGUpdHJ5e3JldHVybiBvKGwsaSx2KX1jYXRjaHt9aWYoImdldCJpbiB2fHwic2V0ImluIHYp''@;'; put 'put ''dGhyb3cgVHlwZUVycm9yKCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEiKTtyZXR1cm4idmFsdWUiaW4gdiYmKGxbaV09di52YWx1ZSksbH19LDIxNjI2KGMsZix0KXt2YXIgbj10KDQ3OTY3KSxlPXQoNDIyOCkscz10KDUxMzExKTtjLmV4cG9ydHM9dCgxNzYzKT9PYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydGllczpmdW5jdGlvbih1LGwpe2UodSk7Zm9yKHZhciBkLGk9cyhsKSx2PWkubGVuZ3RoLHA9MDt2PnA7KW4uZih1LGQ9aVtwKytdLGxbZF0pO3JldHVybiB1fX0sNjg2NDEoYyxmLHQpe3ZhciBuPXQoODQ0OSksZT10KDExOTk2KSxzPXQoNTcyMjEpLG89dCg4MzA0OCksdT10KDU3OTE3''@;'; put 'put ''KSxsPXQoMjI5NTYpLGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtmLmY9dCgxNzYzKT9pOmZ1bmN0aW9uKHAsZCl7aWYocD1zKHApLGQ9byhkLCEwKSxsKXRyeXtyZXR1cm4gaShwLGQpfWNhdGNoe31pZih1KHAsZCkpcmV0dXJuIGUoIW4uZi5jYWxsKHAsZCkscFtkXSl9fSw0''@;'; put 'put ''NzY1KGMsZix0KXt2YXIgbj10KDU3MjIxKSxlPXQoNTk0MTUpLmYscz17fS50b1N0cmluZyxvPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6W107Yy5leHBvcnRzLmY9''@;'; put 'put ''ZnVuY3Rpb24oaSl7cmV0dXJuIG8mJiJbb2JqZWN0IFdpbmRvd10iPT1zLmNhbGwoaSk/ZnVuY3Rpb24obCl7dHJ5e3JldHVybiBlKGwpfWNhdGNoe3JldHVybiBvLnNsaWNlKCl9fShpKTplKG4oaSkpfX0sNTk0MTUoYyxmLHQpe3ZhciBuPXQoMzQ1NjEpLGU9dCg4NjE0MCkuY29uY2F0KCJs''@;'; put 'put ''ZW5ndGgiLCJwcm90b3R5cGUiKTtmLmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKG8pe3JldHVybiBuKG8sZSl9fSwxMDYwKGMsZil7Zi5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LDQwNjI3KGMsZix0KXt2YXIgbj10KDU3OTE3KSxlPXQoMTgyNzApLHM9''@;'; put 'put ''dCg0MDc2NikoIklFX1BST1RPIiksbz1PYmplY3QucHJvdG90eXBlO2MuZXhwb3J0cz1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKHUpe3JldHVybiB1PWUodSksbih1LHMpP3Vbc106ImZ1bmN0aW9uIj09dHlwZW9mIHUuY29uc3RydWN0b3ImJnUgaW5zdGFuY2VvZiB1LmNvbnN0''@;'; put 'put ''cnVjdG9yP3UuY29uc3RydWN0b3IucHJvdG90eXBlOnUgaW5zdGFuY2VvZiBPYmplY3Q/bzpudWxsfX0sMzQ1NjEoYyxmLHQpe3ZhciBuPXQoNTc5MTcpLGU9dCg1NzIyMSkscz10KDYxNDY0KSghMSksbz10KDQwNzY2KSgiSUVfUFJPVE8iKTtjLmV4cG9ydHM9ZnVuY3Rpb24odSxsKXt2YXIg''@;'; put 'put ''ZCxpPWUodSksdj0wLHA9W107Zm9yKGQgaW4gaSlkIT1vJiZuKGksZCkmJnAucHVzaChkKTtmb3IoO2wubGVuZ3RoPnY7KW4oaSxkPWxbdisrXSkmJih+cyhwLGQpfHxwLnB1c2goZCkpO3JldHVybiBwfX0sNTEzMTEoYyxmLHQpe3ZhciBuPXQoMzQ1NjEpLGU9dCg4NjE0MCk7Yy5leHBvcnRz''@;'; put 'put ''PU9iamVjdC5rZXlzfHxmdW5jdGlvbihvKXtyZXR1cm4gbihvLGUpfX0sODQ0OShjLGYpe2YuZj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZX0sODA5MjMoYyxmLHQpe3ZhciBuPXQoOTIxMjcpLGU9dCg1NjA5NCkscz10KDc5NDQ4KTtjLmV4cG9ydHM9ZnVuY3Rpb24obyx1KXt2YXIgbD0oZS5P''@;'; put 'put ''YmplY3R8fHt9KVtvXXx8T2JqZWN0W29dLGk9e307aVtvXT11KGwpLG4obi5TK24uRipzKGZ1bmN0aW9uKCl7bCgxKX0pLCJPYmplY3QiLGkpfX0sOTYyMjIoYyxmLHQpe3ZhciBuPXQoNTk0MTUpLGU9dCgxMDYwKSxzPXQoNDIyOCksbz10KDY3NTI2KS5SZWZsZWN0O2MuZXhwb3J0cz1vJiZv''@;'; put 'put ''Lm93bktleXN8fGZ1bmN0aW9uKGwpe3ZhciBpPW4uZihzKGwpKSx2PWUuZjtyZXR1cm4gdj9pLmNvbmNhdCh2KGwpKTppfX0sMzM1ODkoYyxmLHQpe3ZhciBuPXQoNjc1MjYpLnBhcnNlRmxvYXQsZT10KDQwNjI5KS50cmltO2MuZXhwb3J0cz0xL24odCg3ODQ1MSkrIi0wIikhPS0xLzA/ZnVu''@;'; put 'put ''Y3Rpb24obyl7dmFyIHU9ZShTdHJpbmcobyksMyksbD1uKHUpO3JldHVybiAwPT09bCYmIi0iPT11LmNoYXJBdCgwKT8tMDpsfTpufSw4MjczOChjLGYsdCl7dmFyIG49dCg2NzUyNikucGFyc2VJbnQsZT10KDQwNjI5KS50cmltLHM9dCg3ODQ1MSksbz0vXlstK10/MFt4WF0vO2MuZXhwb3J0''@;'; put 'put ''cz04IT09bihzKyIwOCIpfHwyMiE9PW4ocysiMHgxNiIpP2Z1bmN0aW9uKGwsaSl7dmFyIHY9ZShTdHJpbmcobCksMyk7cmV0dXJuIG4odixpPj4+MHx8KG8udGVzdCh2KT8xNjoxMCkpfTpufSwxMTk5NihjKXtjLmV4cG9ydHM9ZnVuY3Rpb24oZix0KXtyZXR1cm57ZW51bWVyYWJsZTohKDEm''@;'; put 'put ''ZiksY29uZmlndXJhYmxlOiEoMiZmKSx3cml0YWJsZTohKDQmZiksdmFsdWU6dH19fSw5NjA2NShjLGYsdCl7dmFyIG49dCgyODg1OSk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyxvKXtmb3IodmFyIHUgaW4gcyluKGUsdSxzW3VdLG8pO3JldHVybiBlfX0sMjg4NTkoYyxmLHQpe3ZhciBuPXQo''@;'; put 'put ''Njc1MjYpLGU9dCgzMzM0MSkscz10KDU3OTE3KSxvPXQoNDQxNSkoInNyYyIpLHU9dCg0OTQ2MSksbD0idG9TdHJpbmciLGk9KCIiK3UpLnNwbGl0KGwpO3QoNTYwOTQpLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odil7cmV0dXJuIHUuY2FsbCh2KX0sKGMuZXhwb3J0cz1mdW5jdGlvbih2LHAs''@;'; put 'put ''ZCx5KXt2YXIgRT0iZnVuY3Rpb24iPT10eXBlb2YgZDtFJiYocyhkLCJuYW1lIil8fGUoZCwibmFtZSIscCkpLHZbcF0hPT1kJiYoRSYmKHMoZCxvKXx8ZShkLG8sdltwXT8iIit2W3BdOmkuam9pbihTdHJpbmcocCkpKSksdj09PW4/dltwXT1kOnk/dltwXT92W3BdPWQ6ZSh2LHAsZCk6KGRl''@;'; put 'put ''bGV0ZSB2W3BdLGUodixwLGQpKSl9KShGdW5jdGlvbi5wcm90b3R5cGUsbCxmdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzJiZ0aGlzW29dfHx1LmNhbGwodGhpcyl9KX0sNTI1MzUoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDM0ODQ4KSxlPVJlZ0V4cC5wcm90''@;'; put 'put ''b3R5cGUuZXhlYztjLmV4cG9ydHM9ZnVuY3Rpb24ocyxvKXt2YXIgdT1zLmV4ZWM7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHUpe3ZhciBsPXUuY2FsbChzLG8pO2lmKCJvYmplY3QiIT10eXBlb2YgbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29t''@;'; put 'put ''ZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwiKTtyZXR1cm4gbH1pZigiUmVnRXhwIiE9PW4ocykpdGhyb3cgbmV3IFR5cGVFcnJvcigiUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlciIpO3JldHVybiBlLmNhbGwocyxvKX19LDY5NjAwKGMsZix0''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIHAsZCxuPXQoMTE1OCksZT1SZWdFeHAucHJvdG90eXBlLmV4ZWMscz1TdHJpbmcucHJvdG90eXBlLnJlcGxhY2Usbz1lLHU9Imxhc3RJbmRleCIsbD0oZD0vYiovZyxlLmNhbGwocD0vYS8sImEiKSxlLmNhbGwoZCwiYSIpLDAhPT1wW3VdfHwwIT09ZFt1XSks''@;'; put 'put ''aT12b2lkIDAhPT0vKCk/Py8uZXhlYygiIilbMV07KGx8fGkpJiYobz1mdW5jdGlvbihkKXt2YXIgRSxnLEQsRix5PXRoaXM7cmV0dXJuIGkmJihnPW5ldyBSZWdFeHAoIl4iK3kuc291cmNlKyIkKD8hXFxzKSIsbi5jYWxsKHkpKSksbCYmKEU9eVt1XSksRD1lLmNhbGwoeSxkKSxsJiZEJiYo''@;'; put 'put ''eVt1XT15Lmdsb2JhbD9ELmluZGV4K0RbMF0ubGVuZ3RoOkUpLGkmJkQmJkQubGVuZ3RoPjEmJnMuY2FsbChEWzBdLGcsZnVuY3Rpb24oKXtmb3IoRj0xO0Y8YXJndW1lbnRzLmxlbmd0aC0yO0YrKyl2b2lkIDA9PT1hcmd1bWVudHNbRl0mJihEW0ZdPXZvaWQgMCl9KSxEfSksYy5leHBvcnRz''@;'; put 'put ''PW99LDczNTkoYyl7Yy5leHBvcnRzPU9iamVjdC5pc3x8ZnVuY3Rpb24odCxuKXtyZXR1cm4gdD09PW4/MCE9PXR8fDEvdD09MS9uOnQhPXQmJm4hPW59fSwyNTE3MChjLGYsdCl7dmFyIG49dCg0MzMwNSksZT10KDQyMjgpLHM9ZnVuY3Rpb24obyx1KXtpZihlKG8pLCFuKHUpJiZudWxsIT09''@;'; put 'put ''dSl0aHJvdyBUeXBlRXJyb3IodSsiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlISIpfTtjLmV4cG9ydHM9e3NldDpPYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlue30/ZnVuY3Rpb24obyx1LGwpe3RyeXsobD10KDM1MDUyKShGdW5jdGlvbi5jYWxsLHQoNjg2NDEpLmYoT2Jq''@;'; put 'put ''ZWN0LnByb3RvdHlwZSwiX19wcm90b19fIikuc2V0LDIpKShvLFtdKSx1PSEobyBpbnN0YW5jZW9mIEFycmF5KX1jYXRjaHt1PSEwfXJldHVybiBmdW5jdGlvbih2LHApe3JldHVybiBzKHYscCksdT92Ll9fcHJvdG9fXz1wOmwodixwKSx2fX0oe30sITEpOnZvaWQgMCksY2hlY2s6c319LDU1''@;'; put 'put ''NzYyKGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCg2NzUyNiksZT10KDQ3OTY3KSxzPXQoMTc2Myksbz10KDY3NTc0KSgic3BlY2llcyIpO2MuZXhwb3J0cz1mdW5jdGlvbih1KXt2YXIgbD1uW3VdO3MmJmwmJiFsW29dJiZlLmYobCxvLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHRoaXN9fSl9fSwzODQ0KGMsZix0KXt2YXIgbj10KDQ3OTY3KS5mLGU9dCg1NzkxNykscz10KDY3NTc0KSgidG9TdHJpbmdUYWciKTtjLmV4cG9ydHM9ZnVuY3Rpb24obyx1LGwpe28mJiFlKG89bD9vOm8ucHJvdG90eXBlLHMpJiZuKG8scyx7Y29uZmlndXJhYmxlOiEwLHZh''@;'; put 'put ''bHVlOnV9KX19LDQwNzY2KGMsZix0KXt2YXIgbj10KDQ0NTU2KSgia2V5cyIpLGU9dCg0NDE1KTtjLmV4cG9ydHM9ZnVuY3Rpb24ocyl7cmV0dXJuIG5bc118fChuW3NdPWUocykpfX0sNDQ1NTYoYyxmLHQpe3ZhciBuPXQoNTYwOTQpLGU9dCg2NzUyNikscz0iX19jb3JlLWpzX3NoYXJlZF9f''@;'; put 'put ''IixvPWVbc118fChlW3NdPXt9KTsoYy5leHBvcnRzPWZ1bmN0aW9uKHUsbCl7cmV0dXJuIG9bdV18fChvW3VdPXZvaWQgMCE9PWw/bDp7fSl9KSgidmVyc2lvbnMiLFtdKS5wdXNoKHt2ZXJzaW9uOm4udmVyc2lvbixtb2RlOnQoMjI3NTApPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6Ilx4''@;'; put 'put ''YTkgMjAyMCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSJ9KX0sMTkxOTAoYyxmLHQpe3ZhciBuPXQoNDIyOCksZT10KDYzMzg3KSxzPXQoNjc1NzQpKCJzcGVjaWVzIik7Yy5leHBvcnRzPWZ1bmN0aW9uKG8sdSl7dmFyIGksbD1uKG8pLmNvbnN0cnVjdG9yO3JldHVybiB2b2lkIDA9''@;'; put 'put ''PT1sfHxudWxsPT0oaT1uKGwpW3NdKT91OmUoaSl9fSw4Njg4NChjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoNzk0NDgpO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMpe3JldHVybiEhZSYmbihmdW5jdGlvbigpe3M/ZS5jYWxsKG51bGwsZnVuY3Rpb24oKXt9LDEpOmUuY2FsbChudWxsKX0p''@;'; put 'put ''fX0sOTEyMTIoYyxmLHQpe3ZhciBuPXQoMjcwODcpLGU9dCgzMzQ0KTtjLmV4cG9ydHM9ZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKG8sdSl7dmFyIHAsZCxsPVN0cmluZyhlKG8pKSxpPW4odSksdj1sLmxlbmd0aDtyZXR1cm4gaTwwfHxpPj12P3M/IiI6dm9pZCAwOihwPWwuY2hhckNv''@;'; put 'put ''ZGVBdChpKSk8NTUyOTZ8fHA+NTYzMTl8fGkrMT09PXZ8fChkPWwuY2hhckNvZGVBdChpKzEpKTw1NjMyMHx8ZD41NzM0Mz9zP2wuY2hhckF0KGkpOnA6cz9sLnNsaWNlKGksaSsyKTpkLTU2MzIwKyhwLTU1Mjk2PDwxMCkrNjU1MzZ9fX0sNzg5NDIoYyxmLHQpe3ZhciBuPXQoOTU0MTEpLGU9''@;'; put 'put ''dCgzMzQ0KTtjLmV4cG9ydHM9ZnVuY3Rpb24ocyxvLHUpe2lmKG4obykpdGhyb3cgVHlwZUVycm9yKCJTdHJpbmcjIit1KyIgZG9lc24ndCBhY2NlcHQgcmVnZXghIik7cmV0dXJuIFN0cmluZyhlKHMpKX19LDUyNDY4KGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPXQoNzk0NDgpLHM9dCgzMzQ0''@;'; put 'put ''KSxvPS8iL2csdT1mdW5jdGlvbihsLGksdixwKXt2YXIgZD1TdHJpbmcocyhsKSkseT0iPCIraTtyZXR1cm4iIiE9PXYmJih5Kz0iICIrdisnPSInK1N0cmluZyhwKS5yZXBsYWNlKG8sIiZxdW90OyIpKyciJykseSsiPiIrZCsiPC8iK2krIj4ifTtjLmV4cG9ydHM9ZnVuY3Rpb24obCxpKXt2''@;'; put 'put ''YXIgdj17fTt2W2xdPWkodSksbihuLlArbi5GKmUoZnVuY3Rpb24oKXt2YXIgcD0iIltsXSgnIicpO3JldHVybiBwIT09cC50b0xvd2VyQ2FzZSgpfHxwLnNwbGl0KCciJykubGVuZ3RoPjN9KSwiU3RyaW5nIix2KX19LDI3OTI2KGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCgyNzA4Nyks''@;'; put 'put ''ZT10KDMzNDQpO2MuZXhwb3J0cz1mdW5jdGlvbihvKXt2YXIgdT1TdHJpbmcoZSh0aGlzKSksbD0iIixpPW4obyk7aWYoaTwwfHxpPT0xLzApdGhyb3cgUmFuZ2VFcnJvcigiQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmUiKTtmb3IoO2k+MDsoaT4+Pj0xKSYmKHUrPXUpKTEmaSYmKGwrPXUpO3Jl''@;'; put 'put ''dHVybiBsfX0sNDA2MjkoYyxmLHQpe3ZhciBuPXQoOTIxMjcpLGU9dCgzMzQ0KSxzPXQoNzk0NDgpLG89dCg3ODQ1MSksdT0iWyIrbysiXSIsaT1SZWdFeHAoIl4iK3UrdSsiKiIpLHY9UmVnRXhwKHUrdSsiKiQiKSxwPWZ1bmN0aW9uKHksRSxnKXt2YXIgRD17fSxGPXMoZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4hIW9beV0oKXx8Ilx1MjAwYlx4ODUiIT0iXHUyMDBiXHg4NSJbeV0oKX0pLHg9RFt5XT1GP0UoZCk6b1t5XTtnJiYoRFtnXT14KSxuKG4uUCtuLkYqRiwiU3RyaW5nIixEKX0sZD1wLnRyaW09ZnVuY3Rpb24oeSxFKXtyZXR1cm4geT1TdHJpbmcoZSh5KSksMSZFJiYoeT15LnJlcGxh''@;'; put 'put ''Y2UoaSwiIikpLDImRSYmKHk9eS5yZXBsYWNlKHYsIiIpKSx5fTtjLmV4cG9ydHM9cH0sNzg0NTEoYyl7Yy5leHBvcnRzPSJcdFxuXHZcZlxyIFx4YTBcdTE2ODBcdTE4MGVcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDNcdTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMGFc''@;'; put 'put ''dTIwMmZcdTIwNWZcdTMwMDBcdTIwMjhcdTIwMjlcdWZlZmYifSw3MDE1NyhjLGYsdCl7dmFyIG49dCgyNzA4NyksZT1NYXRoLm1heCxzPU1hdGgubWluO2MuZXhwb3J0cz1mdW5jdGlvbihvLHUpe3JldHVybihvPW4obykpPDA/ZShvK3UsMCk6cyhvLHUpfX0sMjcwODcoYyl7dmFyIGY9TWF0''@;'; put 'put ''aC5jZWlsLHQ9TWF0aC5mbG9vcjtjLmV4cG9ydHM9ZnVuY3Rpb24obil7cmV0dXJuIGlzTmFOKG49K24pPzA6KG4+MD90OmYpKG4pfX0sNTcyMjEoYyxmLHQpe3ZhciBuPXQoNjEyNDkpLGU9dCgzMzQ0KTtjLmV4cG9ydHM9ZnVuY3Rpb24ocyl7cmV0dXJuIG4oZShzKSl9fSw4MTQ4NShjLGYs''@;'; put 'put ''dCl7dmFyIG49dCgyNzA4NyksZT1NYXRoLm1pbjtjLmV4cG9ydHM9ZnVuY3Rpb24ocyl7cmV0dXJuIHM+MD9lKG4ocyksOTAwNzE5OTI1NDc0MDk5MSk6MH19LDE4MjcwKGMsZix0KXt2YXIgbj10KDMzNDQpO2MuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KG4oZSkpfX0sODMw''@;'; put 'put ''NDgoYyxmLHQpe3ZhciBuPXQoNDMzMDUpO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMpe2lmKCFuKGUpKXJldHVybiBlO3ZhciBvLHU7aWYocyYmImZ1bmN0aW9uIj09dHlwZW9mKG89ZS50b1N0cmluZykmJiFuKHU9by5jYWxsKGUpKXx8ImZ1bmN0aW9uIj09dHlwZW9mKG89ZS52YWx1ZU9mKSYm''@;'; put 'put ''IW4odT1vLmNhbGwoZSkpfHwhcyYmImZ1bmN0aW9uIj09dHlwZW9mKG89ZS50b1N0cmluZykmJiFuKHU9by5jYWxsKGUpKSlyZXR1cm4gdTt0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sNDQxNShjKXt2YXIgZj0wLHQ9TWF0aC5y''@;'; put 'put ''YW5kb20oKTtjLmV4cG9ydHM9ZnVuY3Rpb24obil7cmV0dXJuIlN5bWJvbCgiLmNvbmNhdCh2b2lkIDA9PT1uPyIiOm4sIilfIiwoKytmK3QpLnRvU3RyaW5nKDM2KSl9fSwxMjg4OChjLGYsdCl7dmFyIG49dCg0MzMwNSk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyl7aWYoIW4oZSl8fGUuX3Qh''@;'; put 'put ''PT1zKXRocm93IFR5cGVFcnJvcigiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAiK3MrIiByZXF1aXJlZCEiKTtyZXR1cm4gZX19LDQ1MzkyKGMsZix0KXt2YXIgbj10KDY3NTI2KSxlPXQoNTYwOTQpLHM9dCgyMjc1MCksbz10KDQ3OTYwKSx1PXQoNDc5NjcpLmY7Yy5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''KGwpe3ZhciBpPWUuU3ltYm9sfHwoZS5TeW1ib2w9cz97fTpuLlN5bWJvbHx8e30pOyJfIiE9bC5jaGFyQXQoMCkmJiEobCBpbiBpKSYmdShpLGwse3ZhbHVlOm8uZihsKX0pfX0sNDc5NjAoYyxmLHQpe2YuZj10KDY3NTc0KX0sNjc1NzQoYyxmLHQpe3ZhciBuPXQoNDQ1NTYpKCJ3a3MiKSxl''@;'; put 'put ''PXQoNDQxNSkscz10KDY3NTI2KS5TeW1ib2wsbz0iZnVuY3Rpb24iPT10eXBlb2YgczsoYy5leHBvcnRzPWZ1bmN0aW9uKGwpe3JldHVybiBuW2xdfHwobltsXT1vJiZzW2xdfHwobz9zOmUpKCJTeW1ib2wuIitsKSl9KS5zdG9yZT1ufSwyMDc2MihjLGYsdCl7dmFyIG49dCgzNDg0OCksZT10''@;'; put 'put ''KDY3NTc0KSgiaXRlcmF0b3IiKSxzPXQoNjA5MDYpO2MuZXhwb3J0cz10KDU2MDk0KS5nZXRJdGVyYXRvck1ldGhvZD1mdW5jdGlvbihvKXtpZihudWxsIT1vKXJldHVybiBvW2VdfHxvWyJAQGl0ZXJhdG9yIl18fHNbbihvKV19fSwxOTYyMChjLGYsdCl7dmFyIG49dCg5MjEyNyk7bihuLlAs''@;'; put 'put ''IkFycmF5Iix7Y29weVdpdGhpbjp0KDg0NDM4KX0pLHQoODgxODQpKCJjb3B5V2l0aGluIil9LDU4ODg4KGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY2MTc5KSg0KTtuKG4uUCtuLkYqIXQoODY4ODQpKFtdLmV2ZXJ5LCEwKSwiQXJyYXkiLHtldmVyeTpmdW5jdGlv''@;'; put 'put ''bihvKXtyZXR1cm4gZSh0aGlzLG8sYXJndW1lbnRzWzFdKX19KX0sNTc3NjIoYyxmLHQpe3ZhciBuPXQoOTIxMjcpO24obi5QLCJBcnJheSIse2ZpbGw6dCgzNTU2NCl9KSx0KDg4MTg0KSgiZmlsbCIpfSwzOTgxMyhjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NjE3''@;'; put 'put ''OSkoMik7bihuLlArbi5GKiF0KDg2ODg0KShbXS5maWx0ZXIsITApLCJBcnJheSIse2ZpbHRlcjpmdW5jdGlvbihvKXtyZXR1cm4gZSh0aGlzLG8sYXJndW1lbnRzWzFdKX19KX0sNzUzNjkoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjYxNzkpKDYpLHM9ImZpbmRJ''@;'; put 'put ''bmRleCIsbz0hMDtzIGluW10mJkFycmF5KDEpW3NdKGZ1bmN0aW9uKCl7bz0hMX0pLG4obi5QK24uRipvLCJBcnJheSIse2ZpbmRJbmRleDpmdW5jdGlvbihsKXtyZXR1cm4gZSh0aGlzLGwsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLHQoODgxODQpKHMpfSwx''@;'; put 'put ''NTE0NChjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NjE3OSkoNSkscz0iZmluZCIsbz0hMDtzIGluW10mJkFycmF5KDEpW3NdKGZ1bmN0aW9uKCl7bz0hMX0pLG4obi5QK24uRipvLCJBcnJheSIse2ZpbmQ6ZnVuY3Rpb24obCl7cmV0dXJuIGUodGhpcyxsLGFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSx0KDg4MTg0KShzKX0sMzUwNChjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NjE3OSkoMCkscz10KDg2ODg0KShbXS5mb3JFYWNoLCEwKTtuKG4uUCtuLkYqIXMsIkFycmF5Iix7Zm9yRWFjaDpmdW5j''@;'; put 'put ''dGlvbih1KXtyZXR1cm4gZSh0aGlzLHUsYXJndW1lbnRzWzFdKX19KX0sOTM4NjMoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDM1MDUyKSxlPXQoOTIxMjcpLHM9dCgxODI3MCksbz10KDk3MzY4KSx1PXQoMTUwOCksbD10KDgxNDg1KSxpPXQoNjcyMjcpLHY9dCgyMDc2Mik7ZShlLlMr''@;'; put 'put ''ZS5GKiF0KDk4OTMxKShmdW5jdGlvbihwKXtBcnJheS5mcm9tKHApfSksIkFycmF5Iix7ZnJvbTpmdW5jdGlvbihkKXt2YXIgayxQLE0sVCx5PXMoZCksRT0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOkFycmF5LGc9YXJndW1lbnRzLmxlbmd0aCxEPWc+MT9hcmd1bWVudHNbMV06dm9p''@;'; put 'put ''ZCAwLEY9dm9pZCAwIT09RCx4PTAsQT12KHkpO2lmKEYmJihEPW4oRCxnPjI/YXJndW1lbnRzWzJdOnZvaWQgMCwyKSksbnVsbD09QXx8RT09QXJyYXkmJnUoQSkpZm9yKFA9bmV3IEUoaz1sKHkubGVuZ3RoKSk7az54O3grKylpKFAseCxGP0QoeVt4XSx4KTp5W3hdKTtlbHNlIGZvcihUPUEu''@;'; put 'put ''Y2FsbCh5KSxQPW5ldyBFOyEoTT1ULm5leHQoKSkuZG9uZTt4KyspaShQLHgsRj9vKFQsRCxbTS52YWx1ZSx4XSwhMCk6TS52YWx1ZSk7cmV0dXJuIFAubGVuZ3RoPXgsUH19KX0sMzQ2MDkoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjE0NjQpKCExKSxzPVtdLmlu''@;'; put 'put ''ZGV4T2Ysbz0hIXMmJjEvWzFdLmluZGV4T2YoMSwtMCk8MDtuKG4uUCtuLkYqKG98fCF0KDg2ODg0KShzKSksIkFycmF5Iix7aW5kZXhPZjpmdW5jdGlvbihsKXtyZXR1cm4gbz9zLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MDplKHRoaXMsbCxhcmd1bWVudHNbMV0pfX0pfSw0Nzg5OShjLGYs''@;'; put 'put ''dCl7dmFyIG49dCg5MjEyNyk7bihuLlMsIkFycmF5Iix7aXNBcnJheTp0KDc3OTgxKX0pfSw5NTE2NShjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoODgxODQpLGU9dCg3NDk3MCkscz10KDYwOTA2KSxvPXQoNTcyMjEpO2MuZXhwb3J0cz10KDk4MTc1KShBcnJheSwiQXJyYXkiLGZ1bmN0''@;'; put 'put ''aW9uKHUsbCl7dGhpcy5fdD1vKHUpLHRoaXMuX2k9MCx0aGlzLl9rPWx9LGZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5fdCxsPXRoaXMuX2ssaT10aGlzLl9pKys7cmV0dXJuIXV8fGk+PXUubGVuZ3RoPyh0aGlzLl90PXZvaWQgMCxlKDEpKTplKDAsImtleXMiPT1sP2k6InZhbHVlcyI9PWw/dVtp''@;'; put 'put ''XTpbaSx1W2ldXSl9LCJ2YWx1ZXMiKSxzLkFyZ3VtZW50cz1zLkFycmF5LG4oImtleXMiKSxuKCJ2YWx1ZXMiKSxuKCJlbnRyaWVzIil9LDk2NTExKGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDU3MjIxKSxzPVtdLmpvaW47bihuLlArbi5GKih0KDYxMjQ5KSE9T2Jq''@;'; put 'put ''ZWN0fHwhdCg4Njg4NCkocykpLCJBcnJheSIse2pvaW46ZnVuY3Rpb24odSl7cmV0dXJuIHMuY2FsbChlKHRoaXMpLHZvaWQgMD09PXU/IiwiOnUpfX0pfSwzMzcwNihjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg1NzIyMSkscz10KDI3MDg3KSxvPXQoODE0ODUpLHU9''@;'; put 'put ''W10ubGFzdEluZGV4T2YsbD0hIXUmJjEvWzFdLmxhc3RJbmRleE9mKDEsLTApPDA7bihuLlArbi5GKihsfHwhdCg4Njg4NCkodSkpLCJBcnJheSIse2xhc3RJbmRleE9mOmZ1bmN0aW9uKHYpe2lmKGwpcmV0dXJuIHUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwO3ZhciBwPWUodGhpcyksZD1v''@;'; put 'put ''KHAubGVuZ3RoKSx5PWQtMTtmb3IoYXJndW1lbnRzLmxlbmd0aD4xJiYoeT1NYXRoLm1pbih5LHMoYXJndW1lbnRzWzFdKSkpLHk8MCYmKHk9ZCt5KTt5Pj0wO3ktLSlpZih5IGluIHAmJnBbeV09PT12KXJldHVybiB5fHwwO3JldHVybi0xfX0pfSw1NDkxMyhjLGYsdCl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBuPXQoOTIxMjcpLGU9dCg2NjE3OSkoMSk7bihuLlArbi5GKiF0KDg2ODg0KShbXS5tYXAsITApLCJBcnJheSIse21hcDpmdW5jdGlvbihvKXtyZXR1cm4gZSh0aGlzLG8sYXJndW1lbnRzWzFdKX19KX0sODIxODkoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQo''@;'; put 'put ''NjcyMjcpO24obi5TK24uRip0KDc5NDQ4KShmdW5jdGlvbigpe2Z1bmN0aW9uIHMoKXt9cmV0dXJuIShBcnJheS5vZi5jYWxsKHMpaW5zdGFuY2VvZiBzKX0pLCJBcnJheSIse29mOmZ1bmN0aW9uKCl7Zm9yKHZhciBvPTAsdT1hcmd1bWVudHMubGVuZ3RoLGw9bmV3KCJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiB0aGlzP3RoaXM6QXJyYXkpKHUpO3U+bzspZShsLG8sYXJndW1lbnRzW28rK10pO3JldHVybiBsLmxlbmd0aD11LGx9fSl9LDQ3ODc0KGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY1NDMpO24obi5QK24uRiohdCg4Njg4NCkoW10ucmVkdWNlUmlnaHQsITAp''@;'; put 'put ''LCJBcnJheSIse3JlZHVjZVJpZ2h0OmZ1bmN0aW9uKG8pe3JldHVybiBlKHRoaXMsbyxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50c1sxXSwhMCl9fSl9LDgxNDQ5KGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY1NDMpO24obi5QK24uRiohdCg4Njg4NCkoW10ucmVk''@;'; put 'put ''dWNlLCEwKSwiQXJyYXkiLHtyZWR1Y2U6ZnVuY3Rpb24obyl7cmV0dXJuIGUodGhpcyxvLGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzWzFdLCExKX19KX0sOTU4NTMoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjEzMDgpLHM9dCg1NTA4OSksbz10KDcwMTU3KSx1''@;'; put 'put ''PXQoODE0ODUpLGw9W10uc2xpY2U7bihuLlArbi5GKnQoNzk0NDgpKGZ1bmN0aW9uKCl7ZSYmbC5jYWxsKGUpfSksIkFycmF5Iix7c2xpY2U6ZnVuY3Rpb24odixwKXt2YXIgZD11KHRoaXMubGVuZ3RoKSx5PXModGhpcyk7aWYocD12b2lkIDA9PT1wP2Q6cCwiQXJyYXkiPT15KXJldHVybiBs''@;'; put 'put ''LmNhbGwodGhpcyx2LHApO2Zvcih2YXIgRT1vKHYsZCksZz1vKHAsZCksRD11KGctRSksRj1uZXcgQXJyYXkoRCkseD0wO3g8RDt4KyspRlt4XT0iU3RyaW5nIj09eT90aGlzLmNoYXJBdChFK3gpOnRoaXNbRSt4XTtyZXR1cm4gRn19KX0sODY1MTEoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''bj10KDkyMTI3KSxlPXQoNjYxNzkpKDMpO24obi5QK24uRiohdCg4Njg4NCkoW10uc29tZSwhMCksIkFycmF5Iix7c29tZTpmdW5jdGlvbihvKXtyZXR1cm4gZSh0aGlzLG8sYXJndW1lbnRzWzFdKX19KX0sOTcwNzUoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjMz''@;'; put 'put ''ODcpLHM9dCgxODI3MCksbz10KDc5NDQ4KSx1PVtdLnNvcnQsbD1bMSwyLDNdO24obi5QK24uRioobyhmdW5jdGlvbigpe2wuc29ydCh2b2lkIDApfSl8fCFvKGZ1bmN0aW9uKCl7bC5zb3J0KG51bGwpfSl8fCF0KDg2ODg0KSh1KSksIkFycmF5Iix7c29ydDpmdW5jdGlvbih2KXtyZXR1cm4g''@;'; put 'put ''dm9pZCAwPT09dj91LmNhbGwocyh0aGlzKSk6dS5jYWxsKHModGhpcyksZSh2KSl9fSl9LDc2MjA5KGMsZix0KXt0KDU1NzYyKSgiQXJyYXkiKX0sMTMyOTIoYyxmLHQpe3ZhciBuPXQoOTIxMjcpO24obi5TLCJEYXRlIix7bm93OmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1l''@;'; put 'put ''KCl9fSl9LDk0MjkoYyxmLHQpe3ZhciBuPXQoOTIxMjcpLGU9dCg1NTM4NSk7bihuLlArbi5GKihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyE9PWUpLCJEYXRlIix7dG9JU09TdHJpbmc6ZX0pfSw1MjM0NihjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCgxODI3MCks''@;'; put 'put ''cz10KDgzMDQ4KTtuKG4uUCtuLkYqdCg3OTQ0OCkoZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PW5ldyBEYXRlKE5hTikudG9KU09OKCl8fDEhPT1EYXRlLnByb3RvdHlwZS50b0pTT04uY2FsbCh7dG9JU09TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMX19KX0pLCJEYXRlIix7dG9KU09OOmZ1''@;'; put 'put ''bmN0aW9uKHUpe3ZhciBsPWUodGhpcyksaT1zKGwpO3JldHVybiJudW1iZXIiIT10eXBlb2YgaXx8aXNGaW5pdGUoaSk/bC50b0lTT1N0cmluZygpOm51bGx9fSl9LDQ4OTUxKGMsZix0KXt2YXIgbj10KDY3NTc0KSgidG9QcmltaXRpdmUiKSxlPURhdGUucHJvdG90eXBlO24gaW4gZXx8dCgz''@;'; put 'put ''MzM0MSkoZSxuLHQoMjAxMDcpKX0sNzg0OShjLGYsdCl7dmFyIG49RGF0ZS5wcm90b3R5cGUsZT0iSW52YWxpZCBEYXRlIixzPSJ0b1N0cmluZyIsbz1uW3NdLHU9bi5nZXRUaW1lO25ldyBEYXRlKE5hTikrIiIhPWUmJnQoMjg4NTkpKG4scyxmdW5jdGlvbigpe3ZhciBpPXUuY2FsbCh0aGlz''@;'; put 'put ''KTtyZXR1cm4gaT09aT9vLmNhbGwodGhpcyk6ZX0pfSw2NTA0OShjLGYsdCl7dmFyIG49dCg5MjEyNyk7bihuLlAsIkZ1bmN0aW9uIix7YmluZDp0KDE1NTM4KX0pfSw5NTUwMihjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoNDMzMDUpLGU9dCg0MDYyNykscz10KDY3NTc0KSgiaGFzSW5z''@;'; put 'put ''dGFuY2UiKSxvPUZ1bmN0aW9uLnByb3RvdHlwZTtzIGluIG98fHQoNDc5NjcpLmYobyxzLHt2YWx1ZTpmdW5jdGlvbih1KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdGhpc3x8IW4odSkpcmV0dXJuITE7aWYoIW4odGhpcy5wcm90b3R5cGUpKXJldHVybiB1IGluc3RhbmNlb2YgdGhpcztmb3Io''@;'; put 'put ''O3U9ZSh1KTspaWYodGhpcy5wcm90b3R5cGU9PT11KXJldHVybiEwO3JldHVybiExfX0pfSw3MDQ4OShjLGYsdCl7dmFyIG49dCg0Nzk2NykuZixlPUZ1bmN0aW9uLnByb3RvdHlwZSxzPS9eXHMqZnVuY3Rpb24gKFteIChdKikvLG89Im5hbWUiO28gaW4gZXx8dCgxNzYzKSYmbihlLG8se2Nv''@;'; put 'put ''bmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt0cnl7cmV0dXJuKCIiK3RoaXMpLm1hdGNoKHMpWzFdfWNhdGNoe3JldHVybiIifX19KX0sOTMzODYoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDM2MTk3KSxlPXQoMTI4ODgpLHM9Ik1hcCI7Yy5leHBvcnRzPXQoNTg5MzMpKHMsZnVu''@;'; put 'put ''Y3Rpb24obyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx7Z2V0OmZ1bmN0aW9uKHUpe3ZhciBsPW4uZ2V0RW50cnkoZSh0aGlzLHMpLHUpO3JldHVybiBsJiZsLnZ9LHNldDpmdW5jdGlvbih1LGwpe3Jl''@;'; put 'put ''dHVybiBuLmRlZihlKHRoaXMscyksMD09PXU/MDp1LGwpfX0sbiwhMCl9LDc2NjQ4KGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPXQoNzE0NzMpLHM9TWF0aC5zcXJ0LG89TWF0aC5hY29zaDtuKG4uUytuLkYqIShvJiY3MTA9PU1hdGguZmxvb3IobyhOdW1iZXIuTUFYX1ZBTFVFKSkmJm8oMS8w''@;'; put 'put ''KT09MS8wKSwiTWF0aCIse2Fjb3NoOmZ1bmN0aW9uKGwpe3JldHVybihsPStsKTwxP05hTjpsPjk0OTA2MjY1LjYyNDI1MTU2P01hdGgubG9nKGwpK01hdGguTE4yOmUobC0xK3MobC0xKSpzKGwrMSkpfX0pfSw1NTc3MShjLGYsdCl7dmFyIG49dCg5MjEyNyksZT1NYXRoLmFzaW5oO24obi5T''@;'; put 'put ''K24uRiohKGUmJjEvZSgwKT4wKSwiTWF0aCIse2FzaW5oOmZ1bmN0aW9uIHMobyl7cmV0dXJuIGlzRmluaXRlKG89K28pJiYwIT1vP288MD8tcygtbyk6TWF0aC5sb2cobytNYXRoLnNxcnQobypvKzEpKTpvfX0pfSw4MjM5MihjLGYsdCl7dmFyIG49dCg5MjEyNyksZT1NYXRoLmF0YW5oO24o''@;'; put 'put ''bi5TK24uRiohKGUmJjEvZSgtMCk8MCksIk1hdGgiLHthdGFuaDpmdW5jdGlvbihvKXtyZXR1cm4gMD09KG89K28pP286TWF0aC5sb2coKDErbykvKDEtbykpLzJ9fSl9LDcyMzM1KGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPXQoMzczMyk7bihuLlMsIk1hdGgiLHtjYnJ0OmZ1bmN0aW9uKG8p''@;'; put 'put ''e3JldHVybiBlKG89K28pKk1hdGgucG93KE1hdGguYWJzKG8pLDEvMyl9fSl9LDc0ODk2KGMsZix0KXt2YXIgbj10KDkyMTI3KTtuKG4uUywiTWF0aCIse2NsejMyOmZ1bmN0aW9uKHMpe3JldHVybihzPj4+PTApPzMxLU1hdGguZmxvb3IoTWF0aC5sb2cocysuNSkqTWF0aC5MT0cyRSk6MzJ9''@;'; put 'put ''fSl9LDk0NTIxKGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPU1hdGguZXhwO24obi5TLCJNYXRoIix7Y29zaDpmdW5jdGlvbihvKXtyZXR1cm4oZShvPStvKStlKC1vKSkvMn19KX0sMjkxNDcoYyxmLHQpe3ZhciBuPXQoOTIxMjcpLGU9dCg3NTU1MSk7bihuLlMrbi5GKihlIT1NYXRoLmV4cG0x''@;'; put 'put ''KSwiTWF0aCIse2V4cG0xOmV9KX0sNDEzMTgoYyxmLHQpe3ZhciBuPXQoOTIxMjcpO24obi5TLCJNYXRoIix7ZnJvdW5kOnQoNzIxMjIpfSl9LDg0MzUyKGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPU1hdGguYWJzO24obi5TLCJNYXRoIix7aHlwb3Q6ZnVuY3Rpb24obyx1KXtmb3IodmFyIGQs''@;'; put 'put ''eSxsPTAsaT0wLHY9YXJndW1lbnRzLmxlbmd0aCxwPTA7aTx2OylwPChkPWUoYXJndW1lbnRzW2krK10pKT8obD1sKih5PXAvZCkqeSsxLHA9ZCk6bCs9ZD4wPyh5PWQvcCkqeTpkO3JldHVybiBwPT09MS8wPzEvMDpwKk1hdGguc3FydChsKX19KX0sMTUzMjcoYyxmLHQpe3ZhciBuPXQoOTIx''@;'; put 'put ''MjcpLGU9TWF0aC5pbXVsO24obi5TK24uRip0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybi01IT1lKDQyOTQ5NjcyOTUsNSl8fDIhPWUubGVuZ3RofSksIk1hdGgiLHtpbXVsOmZ1bmN0aW9uKG8sdSl7dmFyIGw9NjU1MzUsaT0rbyx2PSt1LHA9bCZpLGQ9bCZ2O3JldHVybiAwfHAqZCsoKGwm''@;'; put 'put ''aT4+PjE2KSpkK3AqKGwmdj4+PjE2KTw8MTY+Pj4wKX19KX0sNTc1MDkoYyxmLHQpe3ZhciBuPXQoOTIxMjcpO24obi5TLCJNYXRoIix7bG9nMTA6ZnVuY3Rpb24ocyl7cmV0dXJuIE1hdGgubG9nKHMpKk1hdGguTE9HMTBFfX0pfSwxNTkwOShjLGYsdCl7dmFyIG49dCg5MjEyNyk7bihuLlMs''@;'; put 'put ''Ik1hdGgiLHtsb2cxcDp0KDcxNDczKX0pfSw3OTU4NChjLGYsdCl7dmFyIG49dCg5MjEyNyk7bihuLlMsIk1hdGgiLHtsb2cyOmZ1bmN0aW9uKHMpe3JldHVybiBNYXRoLmxvZyhzKS9NYXRoLkxOMn19KX0sNDAzNDUoYyxmLHQpe3ZhciBuPXQoOTIxMjcpO24obi5TLCJNYXRoIix7c2lnbjp0''@;'; put 'put ''KDM3MzMpfSl9LDk5MTM0KGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPXQoNzU1NTEpLHM9TWF0aC5leHA7bihuLlMrbi5GKnQoNzk0NDgpKGZ1bmN0aW9uKCl7cmV0dXJuLTJlLTE3IT0hTWF0aC5zaW5oKC0yZS0xNyl9KSwiTWF0aCIse3Npbmg6ZnVuY3Rpb24odSl7cmV0dXJuIE1hdGguYWJz''@;'; put 'put ''KHU9K3UpPDE/KGUodSktZSgtdSkpLzI6KHModS0xKS1zKC11LTEpKSooTWF0aC5FLzIpfX0pfSw2NzkwMShjLGYsdCl7dmFyIG49dCg5MjEyNyksZT10KDc1NTUxKSxzPU1hdGguZXhwO24obi5TLCJNYXRoIix7dGFuaDpmdW5jdGlvbih1KXt2YXIgbD1lKHU9K3UpLGk9ZSgtdSk7cmV0dXJu''@;'; put 'put ''IGw9PTEvMD8xOmk9PTEvMD8tMToobC1pKS8ocyh1KStzKC11KSl9fSl9LDQ2NTkyKGMsZix0KXt2YXIgbj10KDkyMTI3KTtuKG4uUywiTWF0aCIse3RydW5jOmZ1bmN0aW9uKHMpe3JldHVybihzPjA/TWF0aC5mbG9vcjpNYXRoLmNlaWwpKHMpfX0pfSw2NDUwOShjLGYsdCl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBuPXQoNjc1MjYpLGU9dCg1NzkxNykscz10KDU1MDg5KSxvPXQoOTg4ODApLHU9dCg4MzA0OCksbD10KDc5NDQ4KSxpPXQoNTk0MTUpLmYsdj10KDY4NjQxKS5mLHA9dCg0Nzk2NykuZixkPXQoNDA2MjkpLnRyaW0seT0iTnVtYmVyIixFPW5beV0sZz1FLEQ9RS5wcm90b3R5cGUs''@;'; put 'put ''Rj1zKHQoODQ3MTkpKEQpKT09eSx4PSJ0cmltImluIFN0cmluZy5wcm90b3R5cGUsQT1mdW5jdGlvbihUKXt2YXIgYj11KFQsITEpO2lmKCJzdHJpbmciPT10eXBlb2YgYiYmYi5sZW5ndGg+Mil7dmFyIFUsWixudCxCPShiPXg/Yi50cmltKCk6ZChiLDMpKS5jaGFyQ29kZUF0KDApO2lmKDQz''@;'; put 'put ''PT09Qnx8NDU9PT1CKXtpZig4OD09PShVPWIuY2hhckNvZGVBdCgyKSl8fDEyMD09PVUpcmV0dXJuIE5hTn1lbHNlIGlmKDQ4PT09Qil7c3dpdGNoKGIuY2hhckNvZGVBdCgxKSl7Y2FzZSA2NjpjYXNlIDk4Olo9MixudD00OTticmVhaztjYXNlIDc5OmNhc2UgMTExOlo9OCxudD01NTticmVh''@;'; put 'put ''aztkZWZhdWx0OnJldHVybitifWZvcih2YXIgcSx0dD1iLnNsaWNlKDIpLHl0PTAsbXQ9dHQubGVuZ3RoO3l0PG10O3l0KyspaWYoKHE9dHQuY2hhckNvZGVBdCh5dCkpPDQ4fHxxPm50KXJldHVybiBOYU47cmV0dXJuIHBhcnNlSW50KHR0LFopfX1yZXR1cm4rYn07aWYoIUUoIiAwbzEiKXx8''@;'; put 'put ''IUUoIjBiMSIpfHxFKCIrMHgxIikpe0U9ZnVuY3Rpb24oYil7dmFyIEI9YXJndW1lbnRzLmxlbmd0aDwxPzA6YixVPXRoaXM7cmV0dXJuIFUgaW5zdGFuY2VvZiBFJiYoRj9sKGZ1bmN0aW9uKCl7RC52YWx1ZU9mLmNhbGwoVSl9KTpzKFUpIT15KT9vKG5ldyBnKEEoQikpLFUsRSk6QShCKX07''@;'; put 'put ''Zm9yKHZhciBNLGs9dCgxNzYzKT9pKGcpOiJNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElWRV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSxFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsTUlOX1NBRkVfSU5URUdF''@;'; put 'put ''UixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlciIuc3BsaXQoIiwiKSxQPTA7ay5sZW5ndGg+UDtQKyspZShnLE09a1tQXSkmJiFlKEUsTSkmJnAoRSxNLHYoZyxNKSk7RS5wcm90b3R5cGU9RCxELmNvbnN0cnVjdG9yPUUsdCgyODg1OSkobix5LEUpfX0sMzQ0MTkoYyxmLHQpe3ZhciBu''@;'; put 'put ''PXQoOTIxMjcpO24obi5TLCJOdW1iZXIiLHtFUFNJTE9OOk1hdGgucG93KDIsLTUyKX0pfSw5MTkzMyhjLGYsdCl7dmFyIG49dCg5MjEyNyksZT10KDY3NTI2KS5pc0Zpbml0ZTtuKG4uUywiTnVtYmVyIix7aXNGaW5pdGU6ZnVuY3Rpb24obyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBvJiZl''@;'; put 'put ''KG8pfX0pfSw1NTUzOChjLGYsdCl7dmFyIG49dCg5MjEyNyk7bihuLlMsIk51bWJlciIse2lzSW50ZWdlcjp0KDMzODQyKX0pfSwzOTQ5NyhjLGYsdCl7dmFyIG49dCg5MjEyNyk7bihuLlMsIk51bWJlciIse2lzTmFOOmZ1bmN0aW9uKHMpe3JldHVybiBzIT1zfX0pfSw0MTA0KGMsZix0KXt2''@;'; put 'put ''YXIgbj10KDkyMTI3KSxlPXQoMzM4NDIpLHM9TWF0aC5hYnM7bihuLlMsIk51bWJlciIse2lzU2FmZUludGVnZXI6ZnVuY3Rpb24odSl7cmV0dXJuIGUodSkmJnModSk8PTkwMDcxOTkyNTQ3NDA5OTF9fSl9LDYwMjEwKGMsZix0KXt2YXIgbj10KDkyMTI3KTtuKG4uUywiTnVtYmVyIix7TUFY''@;'; put 'put ''X1NBRkVfSU5URUdFUjo5MDA3MTk5MjU0NzQwOTkxfSl9LDU2NTc2KGMsZix0KXt2YXIgbj10KDkyMTI3KTtuKG4uUywiTnVtYmVyIix7TUlOX1NBRkVfSU5URUdFUjotOTAwNzE5OTI1NDc0MDk5MX0pfSw4NDQzNyhjLGYsdCl7dmFyIG49dCg5MjEyNyksZT10KDMzNTg5KTtuKG4uUytuLkYq''@;'; put 'put ''KE51bWJlci5wYXJzZUZsb2F0IT1lKSwiTnVtYmVyIix7cGFyc2VGbG9hdDplfSl9LDg4MDUwKGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPXQoODI3MzgpO24obi5TK24uRiooTnVtYmVyLnBhcnNlSW50IT1lKSwiTnVtYmVyIix7cGFyc2VJbnQ6ZX0pfSwzNzcyNyhjLGYsdCl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBuPXQoOTIxMjcpLGU9dCgyNzA4Nykscz10KDE1MTIyKSxvPXQoMjc5MjYpLHU9MS4udG9GaXhlZCxsPU1hdGguZmxvb3IsaT1bMCwwLDAsMCwwLDBdLHY9Ik51bWJlci50b0ZpeGVkOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEiLHA9IjAiLGQ9ZnVuY3Rpb24oRix4KXtmb3IodmFy''@;'; put 'put ''IEE9LTEsaz14OysrQTw2OylpW0FdPShrKz1GKmlbQV0pJTFlNyxrPWwoay8xZTcpfSx5PWZ1bmN0aW9uKEYpe2Zvcih2YXIgeD02LEE9MDstLXg+PTA7KWlbeF09bCgoQSs9aVt4XSkvRiksQT1BJUYqMWU3fSxFPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPTYseD0iIjstLUY+PTA7KWlmKCIiIT09''@;'; put 'put ''eHx8MD09PUZ8fDAhPT1pW0ZdKXt2YXIgQT1TdHJpbmcoaVtGXSk7eD0iIj09PXg/QTp4K28uY2FsbChwLDctQS5sZW5ndGgpK0F9cmV0dXJuIHh9LGc9ZnVuY3Rpb24oRix4LEEpe3JldHVybiAwPT09eD9BOnglMj09MT9nKEYseC0xLEEqRik6ZyhGKkYseC8yLEEpfTtuKG4uUCtuLkYqKCEh''@;'; put 'put ''dSYmKCIwLjAwMCIhPT04ZS01LnRvRml4ZWQoMyl8fCIxIiE9PS45LnRvRml4ZWQoMCl8fCIxLjI1IiE9PTEuMjU1LnRvRml4ZWQoMil8fCIxMDAwMDAwMDAwMDAwMDAwMTI4IiE9PSgweGRlMGI2YjNhNzY0MDA4MCkudG9GaXhlZCgwKSl8fCF0KDc5NDQ4KShmdW5jdGlvbigpe3UuY2FsbCh7''@;'; put 'put ''fSl9KSksIk51bWJlciIse3RvRml4ZWQ6ZnVuY3Rpb24oeCl7dmFyIFQsYixCLFUsQT1zKHRoaXMsdiksaz1lKHgpLFA9IiIsTT1wO2lmKGs8MHx8az4yMCl0aHJvdyBSYW5nZUVycm9yKHYpO2lmKEEhPUEpcmV0dXJuIk5hTiI7aWYoQTw9LTFlMjF8fEE+PTFlMjEpcmV0dXJuIFN0cmluZyhB''@;'; put 'put ''KTtpZihBPDAmJihQPSItIixBPS1BKSxBPjFlLTIxKWlmKFQ9ZnVuY3Rpb24oRil7Zm9yKHZhciB4PTAsQT1GO0E+PTQwOTY7KXgrPTEyLEEvPTQwOTY7Zm9yKDtBPj0yOyl4Kz0xLEEvPTI7cmV0dXJuIHh9KEEqZygyLDY5LDEpKS02OSxiPVQ8MD9BKmcoMiwtVCwxKTpBL2coMixULDEpLGIq''@;'; put 'put ''PTQ1MDM1OTk2MjczNzA0OTYsKFQ9NTItVCk+MCl7Zm9yKGQoMCxiKSxCPWs7Qj49NzspZCgxZTcsMCksQi09Nztmb3IoZChnKDEwLEIsMSksMCksQj1ULTE7Qj49MjM7KXkoMTw8MjMpLEItPTIzO3koMTw8QiksZCgxLDEpLHkoMiksTT1FKCl9ZWxzZSBkKDAsYiksZCgxPDwtVCwwKSxNPUUo''@;'; put 'put ''KStvLmNhbGwocCxrKTtyZXR1cm4gTT1rPjA/UCsoKFU9TS5sZW5ndGgpPD1rPyIwLiIrby5jYWxsKHAsay1VKStNOk0uc2xpY2UoMCxVLWspKyIuIitNLnNsaWNlKFUtaykpOlArTX19KX0sNjcwMShjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg3OTQ0OCkscz10KDE1''@;'; put 'put ''MTIyKSxvPTEuLnRvUHJlY2lzaW9uO24obi5QK24uRiooZShmdW5jdGlvbigpe3JldHVybiIxIiE9PW8uY2FsbCgxLHZvaWQgMCl9KXx8IWUoZnVuY3Rpb24oKXtvLmNhbGwoe30pfSkpLCJOdW1iZXIiLHt0b1ByZWNpc2lvbjpmdW5jdGlvbihsKXt2YXIgaT1zKHRoaXMsIk51bWJlciN0b1By''@;'; put 'put ''ZWNpc2lvbjogaW5jb3JyZWN0IGludm9jYXRpb24hIik7cmV0dXJuIHZvaWQgMD09PWw/by5jYWxsKGkpOm8uY2FsbChpLGwpfX0pfSwxMTQzMChjLGYsdCl7dmFyIG49dCg5MjEyNyk7bihuLlMrbi5GLCJPYmplY3QiLHthc3NpZ246dCgyODIwNil9KX0sOTM1KGMsZix0KXt2YXIgbj10KDky''@;'; put 'put ''MTI3KTtuKG4uUywiT2JqZWN0Iix7Y3JlYXRlOnQoODQ3MTkpfSl9LDg5NDQ4KGMsZix0KXt2YXIgbj10KDkyMTI3KTtuKG4uUytuLkYqIXQoMTc2MyksIk9iamVjdCIse2RlZmluZVByb3BlcnRpZXM6dCgyMTYyNil9KX0sNjYwNjQoYyxmLHQpe3ZhciBuPXQoOTIxMjcpO24obi5TK24uRioh''@;'; put 'put ''dCgxNzYzKSwiT2JqZWN0Iix7ZGVmaW5lUHJvcGVydHk6dCg0Nzk2NykuZn0pfSw0ODIzNihjLGYsdCl7dmFyIG49dCg0MzMwNSksZT10KDEyOTg4KS5vbkZyZWV6ZTt0KDgwOTIzKSgiZnJlZXplIixmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIHMmJm4odSk/cyhlKHUp''@;'; put 'put ''KTp1fX0pfSwyMjY0MihjLGYsdCl7dmFyIG49dCg1NzIyMSksZT10KDY4NjQxKS5mO3QoODA5MjMpKCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG8sdSl7cmV0dXJuIGUobihvKSx1KX19KX0sODE4OTUoYyxmLHQpe3QoODA5MjMpKCJnZXRP''@;'; put 'put ''d25Qcm9wZXJ0eU5hbWVzIixmdW5jdGlvbigpe3JldHVybiB0KDQ3NjUpLmZ9KX0sNTNlMyhjLGYsdCl7dmFyIG49dCgxODI3MCksZT10KDQwNjI3KTt0KDgwOTIzKSgiZ2V0UHJvdG90eXBlT2YiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG8pe3JldHVybiBlKG4obykpfX0pfSw3OTA3''@;'; put 'put ''MyhjLGYsdCl7dmFyIG49dCg0MzMwNSk7dCg4MDkyMykoImlzRXh0ZW5zaWJsZSIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKG8pe3JldHVybiEhbihvKSYmKCFlfHxlKG8pKX19KX0sNjkzMTgoYyxmLHQpe3ZhciBuPXQoNDMzMDUpO3QoODA5MjMpKCJpc0Zyb3plbiIsZnVuY3Rpb24o''@;'; put 'put ''ZSl7cmV0dXJuIGZ1bmN0aW9uKG8pe3JldHVybiFuKG8pfHwhIWUmJmUobyl9fSl9LDY1MDMyKGMsZix0KXt2YXIgbj10KDQzMzA1KTt0KDgwOTIzKSgiaXNTZWFsZWQiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihvKXtyZXR1cm4hbihvKXx8ISFlJiZlKG8pfX0pfSwzODQ1MShjLGYs''@;'; put 'put ''dCl7dmFyIG49dCg5MjEyNyk7bihuLlMsIk9iamVjdCIse2lzOnQoNzM1OSl9KX0sODg2NDcoYyxmLHQpe3ZhciBuPXQoMTgyNzApLGU9dCg1MTMxMSk7dCg4MDkyMykoImtleXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG8pe3JldHVybiBlKG4obykpfX0pfSwxNTU3MihjLGYsdCl7''@;'; put 'put ''dmFyIG49dCg0MzMwNSksZT10KDEyOTg4KS5vbkZyZWV6ZTt0KDgwOTIzKSgicHJldmVudEV4dGVuc2lvbnMiLGZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gcyYmbih1KT9zKGUodSkpOnV9fSl9LDczODIyKGMsZix0KXt2YXIgbj10KDQzMzA1KSxlPXQoMTI5ODgpLm9u''@;'; put 'put ''RnJlZXplO3QoODA5MjMpKCJzZWFsIixmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIHMmJm4odSk/cyhlKHUpKTp1fX0pfSwxODEzMihjLGYsdCl7dmFyIG49dCg5MjEyNyk7bihuLlMsIk9iamVjdCIse3NldFByb3RvdHlwZU9mOnQoMjUxNzApLnNldH0pfSwxNzQ4Mihj''@;'; put 'put ''LGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoMzQ4NDgpLGU9e307ZVt0KDY3NTc0KSgidG9TdHJpbmdUYWciKV09InoiLGUrIiIhPSJbb2JqZWN0IHpdIiYmdCgyODg1OSkoT2JqZWN0LnByb3RvdHlwZSwidG9TdHJpbmciLGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgIituKHRoaXMpKyJd''@;'; put 'put ''In0sITApfSw5NjEwOChjLGYsdCl7dmFyIG49dCg5MjEyNyksZT10KDMzNTg5KTtuKG4uRytuLkYqKHBhcnNlRmxvYXQhPWUpLHtwYXJzZUZsb2F0OmV9KX0sOTA1NzEoYyxmLHQpe3ZhciBuPXQoOTIxMjcpLGU9dCg4MjczOCk7bihuLkcrbi5GKihwYXJzZUludCE9ZSkse3BhcnNlSW50OmV9''@;'; put 'put ''KX0sNzEwMyhjLGYsdCl7dmFyIG49dCg5MjEyNyksZT10KDYzMzg3KSxzPXQoNDIyOCksbz0odCg2NzUyNikuUmVmbGVjdHx8e30pLmFwcGx5LHU9RnVuY3Rpb24uYXBwbHk7bihuLlMrbi5GKiF0KDc5NDQ4KShmdW5jdGlvbigpe28oZnVuY3Rpb24oKXt9KX0pLCJSZWZsZWN0Iix7YXBwbHk6''@;'; put 'put ''ZnVuY3Rpb24oaSx2LHApe3ZhciBkPWUoaSkseT1zKHApO3JldHVybiBvP28oZCx2LHkpOnUuY2FsbChkLHYseSl9fSl9LDgyNTg2KGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPXQoODQ3MTkpLHM9dCg2MzM4Nyksbz10KDQyMjgpLHU9dCg0MzMwNSksbD10KDc5NDQ4KSxpPXQoMTU1MzgpLHY9''@;'; put 'put ''KHQoNjc1MjYpLlJlZmxlY3R8fHt9KS5jb25zdHJ1Y3QscD1sKGZ1bmN0aW9uKCl7ZnVuY3Rpb24geSgpe31yZXR1cm4hKHYoZnVuY3Rpb24oKXt9LFtdLHkpaW5zdGFuY2VvZiB5KX0pLGQ9IWwoZnVuY3Rpb24oKXt2KGZ1bmN0aW9uKCl7fSl9KTtuKG4uUytuLkYqKHB8fGQpLCJSZWZsZWN0''@;'; put 'put ''Iix7Y29uc3RydWN0OmZ1bmN0aW9uKEUsZyl7cyhFKSxvKGcpO3ZhciBEPWFyZ3VtZW50cy5sZW5ndGg8Mz9FOnMoYXJndW1lbnRzWzJdKTtpZihkJiYhcClyZXR1cm4gdihFLGcsRCk7aWYoRT09RCl7c3dpdGNoKGcubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBFO2Nhc2UgMTpyZXR1cm4g''@;'; put 'put ''bmV3IEUoZ1swXSk7Y2FzZSAyOnJldHVybiBuZXcgRShnWzBdLGdbMV0pO2Nhc2UgMzpyZXR1cm4gbmV3IEUoZ1swXSxnWzFdLGdbMl0pO2Nhc2UgNDpyZXR1cm4gbmV3IEUoZ1swXSxnWzFdLGdbMl0sZ1szXSl9dmFyIEY9W251bGxdO3JldHVybiBGLnB1c2guYXBwbHkoRixnKSxuZXcoaS5h''@;'; put 'put ''cHBseShFLEYpKX12YXIgeD1ELnByb3RvdHlwZSxBPWUodSh4KT94Ok9iamVjdC5wcm90b3R5cGUpLGs9RnVuY3Rpb24uYXBwbHkuY2FsbChFLEEsZyk7cmV0dXJuIHUoayk/azpBfX0pfSw5MjU1MihjLGYsdCl7dmFyIG49dCg0Nzk2NyksZT10KDkyMTI3KSxzPXQoNDIyOCksbz10KDgzMDQ4''@;'; put 'put ''KTtlKGUuUytlLkYqdCg3OTQ0OCkoZnVuY3Rpb24oKXtSZWZsZWN0LmRlZmluZVByb3BlcnR5KG4uZih7fSwxLHt2YWx1ZToxfSksMSx7dmFsdWU6Mn0pfSksIlJlZmxlY3QiLHtkZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihsLGksdil7cyhsKSxpPW8oaSwhMCkscyh2KTt0cnl7cmV0dXJuIG4u''@;'; put 'put ''ZihsLGksdiksITB9Y2F0Y2h7cmV0dXJuITF9fX0pfSw0Mzc2KGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPXQoNjg2NDEpLmYscz10KDQyMjgpO24obi5TLCJSZWZsZWN0Iix7ZGVsZXRlUHJvcGVydHk6ZnVuY3Rpb24odSxsKXt2YXIgaT1lKHModSksbCk7cmV0dXJuIShpJiYhaS5jb25maWd1''@;'; put 'put ''cmFibGUpJiZkZWxldGUgdVtsXX19KX0sNzUxNTMoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNDIyOCkscz1mdW5jdGlvbihvKXt0aGlzLl90PWUobyksdGhpcy5faT0wO3ZhciBsLHU9dGhpcy5faz1bXTtmb3IobCBpbiBvKXUucHVzaChsKX07dCg2MDMyKShzLCJP''@;'; put 'put ''YmplY3QiLGZ1bmN0aW9uKCl7dmFyIGwsbz10aGlzLHU9by5faztkb3tpZihvLl9pPj11Lmxlbmd0aClyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXdoaWxlKCEoKGw9dVtvLl9pKytdKWluIG8uX3QpKTtyZXR1cm57dmFsdWU6bCxkb25lOiExfX0pLG4obi5TLCJSZWZsZWN0Iix7ZW51''@;'; put 'put ''bWVyYXRlOmZ1bmN0aW9uKHUpe3JldHVybiBuZXcgcyh1KX19KX0sNTI2NTAoYyxmLHQpe3ZhciBuPXQoNjg2NDEpLGU9dCg5MjEyNykscz10KDQyMjgpO2UoZS5TLCJSZWZsZWN0Iix7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKHUsbCl7cmV0dXJuIG4uZihzKHUpLGwpfX0p''@;'; put 'put ''fSwzMTEwNChjLGYsdCl7dmFyIG49dCg5MjEyNyksZT10KDQwNjI3KSxzPXQoNDIyOCk7bihuLlMsIlJlZmxlY3QiLHtnZXRQcm90b3R5cGVPZjpmdW5jdGlvbih1KXtyZXR1cm4gZShzKHUpKX19KX0sMTE4NzkoYyxmLHQpe3ZhciBuPXQoNjg2NDEpLGU9dCg0MDYyNykscz10KDU3OTE3KSxv''@;'; put 'put ''PXQoOTIxMjcpLHU9dCg0MzMwNSksbD10KDQyMjgpO28oby5TLCJSZWZsZWN0Iix7Z2V0OmZ1bmN0aW9uIGkodixwKXt2YXIgeSxFLGQ9YXJndW1lbnRzLmxlbmd0aDwzP3Y6YXJndW1lbnRzWzJdO3JldHVybiBsKHYpPT09ZD92W3BdOih5PW4uZih2LHApKT9zKHksInZhbHVlIik/eS52YWx1''@;'; put 'put ''ZTp2b2lkIDAhPT15LmdldD95LmdldC5jYWxsKGQpOnZvaWQgMDp1KEU9ZSh2KSk/aShFLHAsZCk6dm9pZCAwfX0pfSwyMTg4MyhjLGYsdCl7dmFyIG49dCg5MjEyNyk7bihuLlMsIlJlZmxlY3QiLHtoYXM6ZnVuY3Rpb24ocyxvKXtyZXR1cm4gbyBpbiBzfX0pfSwzNTQzMyhjLGYsdCl7dmFy''@;'; put 'put ''IG49dCg5MjEyNyksZT10KDQyMjgpLHM9T2JqZWN0LmlzRXh0ZW5zaWJsZTtuKG4uUywiUmVmbGVjdCIse2lzRXh0ZW5zaWJsZTpmdW5jdGlvbih1KXtyZXR1cm4gZSh1KSwhc3x8cyh1KX19KX0sNTVlMyhjLGYsdCl7dmFyIG49dCg5MjEyNyk7bihuLlMsIlJlZmxlY3QiLHtvd25LZXlzOnQo''@;'; put 'put ''OTYyMjIpfSl9LDE1OTMyKGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPXQoNDIyOCkscz1PYmplY3QucHJldmVudEV4dGVuc2lvbnM7bihuLlMsIlJlZmxlY3QiLHtwcmV2ZW50RXh0ZW5zaW9uczpmdW5jdGlvbih1KXtlKHUpO3RyeXtyZXR1cm4gcyYmcyh1KSwhMH1jYXRjaHtyZXR1cm4hMX19''@;'; put 'put ''fSl9LDI2MzE2KGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPXQoMjUxNzApO2UmJm4obi5TLCJSZWZsZWN0Iix7c2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24obyx1KXtlLmNoZWNrKG8sdSk7dHJ5e3JldHVybiBlLnNldChvLHUpLCEwfWNhdGNoe3JldHVybiExfX19KX0sNTQ0MyhjLGYsdCl7dmFy''@;'; put 'put ''IG49dCg0Nzk2NyksZT10KDY4NjQxKSxzPXQoNDA2MjcpLG89dCg1NzkxNyksdT10KDkyMTI3KSxsPXQoMTE5OTYpLGk9dCg0MjI4KSx2PXQoNDMzMDUpO3UodS5TLCJSZWZsZWN0Iix7c2V0OmZ1bmN0aW9uIHAoZCx5LEUpe3ZhciBGLHgsZz1hcmd1bWVudHMubGVuZ3RoPDQ/ZDphcmd1bWVu''@;'; put 'put ''dHNbM10sRD1lLmYoaShkKSx5KTtpZighRCl7aWYodih4PXMoZCkpKXJldHVybiBwKHgseSxFLGcpO0Q9bCgwKX1pZihvKEQsInZhbHVlIikpe2lmKCExPT09RC53cml0YWJsZXx8IXYoZykpcmV0dXJuITE7aWYoRj1lLmYoZyx5KSl7aWYoRi5nZXR8fEYuc2V0fHwhMT09PUYud3JpdGFibGUp''@;'; put 'put ''cmV0dXJuITE7Ri52YWx1ZT1FLG4uZihnLHksRil9ZWxzZSBuLmYoZyx5LGwoMCxFKSk7cmV0dXJuITB9cmV0dXJuIHZvaWQgMCE9PUQuc2V0JiYoRC5zZXQuY2FsbChnLEUpLCEwKX19KX0sODMwMShjLGYsdCl7dmFyIG49dCg2NzUyNiksZT10KDk4ODgwKSxzPXQoNDc5NjcpLmYsbz10KDU5''@;'; put 'put ''NDE1KS5mLHU9dCg5NTQxMSksbD10KDExNTgpLGk9bi5SZWdFeHAsdj1pLHA9aS5wcm90b3R5cGUsZD0vYS9nLHk9L2EvZyxFPW5ldyBpKGQpIT09ZDtpZih0KDE3NjMpJiYoIUV8fHQoNzk0NDgpKGZ1bmN0aW9uKCl7cmV0dXJuIHlbdCg2NzU3NCkoIm1hdGNoIildPSExLGkoZCkhPWR8fGko''@;'; put 'put ''eSk9PXl8fCIvYS9pIiE9aShkLCJpIil9KSkpe2k9ZnVuY3Rpb24oQSxrKXt2YXIgUD10aGlzIGluc3RhbmNlb2YgaSxNPXUoQSksVD12b2lkIDA9PT1rO3JldHVybiFQJiZNJiZBLmNvbnN0cnVjdG9yPT09aSYmVD9BOmUoRT9uZXcgdihNJiYhVD9BLnNvdXJjZTpBLGspOnYoKE09QSBpbnN0''@;'; put 'put ''YW5jZW9mIGkpP0Euc291cmNlOkEsTSYmVD9sLmNhbGwoQSk6ayksUD90aGlzOnAsaSl9O2Zvcih2YXIgZz1mdW5jdGlvbih4KXt4IGluIGl8fHMoaSx4LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZbeF19LHNldDpmdW5jdGlvbihBKXt2W3hdPUF9fSl9LEQ9byh2''@;'; put 'put ''KSxGPTA7RC5sZW5ndGg+RjspZyhEW0YrK10pO3AuY29uc3RydWN0b3I9aSxpLnByb3RvdHlwZT1wLHQoMjg4NTkpKG4sIlJlZ0V4cCIsaSl9dCg1NTc2MikoIlJlZ0V4cCIpfSw5NDExNihjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoNjk2MDApO3QoOTIxMjcpKHt0YXJnZXQ6IlJlZ0V4''@;'; put 'put ''cCIscHJvdG86ITAsZm9yY2VkOm4hPT0vLi8uZXhlY30se2V4ZWM6bn0pfSwzOTYzOChjLGYsdCl7dCgxNzYzKSYmImciIT0vLi9nLmZsYWdzJiZ0KDQ3OTY3KS5mKFJlZ0V4cC5wcm90b3R5cGUsImZsYWdzIix7Y29uZmlndXJhYmxlOiEwLGdldDp0KDExNTgpfSl9LDQwNDAoYyxmLHQpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgbj10KDQyMjgpLGU9dCg4MTQ4NSkscz10KDI4ODI4KSxvPXQoNTI1MzUpO3QoNjkyMjgpKCJtYXRjaCIsMSxmdW5jdGlvbih1LGwsaSx2KXtyZXR1cm5bZnVuY3Rpb24oZCl7dmFyIHk9dSh0aGlzKSxFPWQ/LltsXTtyZXR1cm4gdm9pZCAwIT09RT9FLmNhbGwoZCx5''@;'; put 'put ''KTpuZXcgUmVnRXhwKGQpW2xdKFN0cmluZyh5KSl9LGZ1bmN0aW9uKHApe3ZhciBkPXYoaSxwLHRoaXMpO2lmKGQuZG9uZSlyZXR1cm4gZC52YWx1ZTt2YXIgeT1uKHApLEU9U3RyaW5nKHRoaXMpO2lmKCF5Lmdsb2JhbClyZXR1cm4gbyh5LEUpO3ZhciBnPXkudW5pY29kZTt5Lmxhc3RJbmRl''@;'; put 'put ''eD0wO2Zvcih2YXIgeCxEPVtdLEY9MDtudWxsIT09KHg9byh5LEUpKTspe3ZhciBBPVN0cmluZyh4WzBdKTtEW0ZdPUEsIiI9PT1BJiYoeS5sYXN0SW5kZXg9cyhFLGUoeS5sYXN0SW5kZXgpLGcpKSxGKyt9cmV0dXJuIDA9PT1GP251bGw6RH1dfSl9LDY4MzA1KGMsZix0KXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIG49dCg0MjI4KSxlPXQoMTgyNzApLHM9dCg4MTQ4NSksbz10KDI3MDg3KSx1PXQoMjg4MjgpLGw9dCg1MjUzNSksaT1NYXRoLm1heCx2PU1hdGgubWluLHA9TWF0aC5mbG9vcixkPS9cJChbJCZgJ118XGRcZD98PFtePl0qPikvZyx5PS9cJChbJCZgJ118XGRcZD8pL2csRT1mdW5j''@;'; put 'put ''dGlvbihnKXtyZXR1cm4gdm9pZCAwPT09Zz9nOlN0cmluZyhnKX07dCg2OTIyOCkoInJlcGxhY2UiLDIsZnVuY3Rpb24oZyxELEYseCl7cmV0dXJuW2Z1bmN0aW9uKFAsTSl7dmFyIFQ9Zyh0aGlzKSxiPVA/LltEXTtyZXR1cm4gdm9pZCAwIT09Yj9iLmNhbGwoUCxULE0pOkYuY2FsbChTdHJp''@;'; put 'put ''bmcoVCksUCxNKX0sZnVuY3Rpb24oayxQKXt2YXIgTT14KEYsayx0aGlzLFApO2lmKE0uZG9uZSlyZXR1cm4gTS52YWx1ZTt2YXIgVD1uKGspLGI9U3RyaW5nKHRoaXMpLEI9ImZ1bmN0aW9uIj09dHlwZW9mIFA7Qnx8KFA9U3RyaW5nKFApKTt2YXIgVT1ULmdsb2JhbDtpZihVKXt2YXIgWj1U''@;'; put 'put ''LnVuaWNvZGU7VC5sYXN0SW5kZXg9MH1mb3IodmFyIG50PVtdOzspe3ZhciB0dD1sKFQsYik7aWYobnVsbD09PXR0fHwobnQucHVzaCh0dCksIVUpKWJyZWFrOyIiPT09U3RyaW5nKHR0WzBdKSYmKFQubGFzdEluZGV4PXUoYixzKFQubGFzdEluZGV4KSxaKSl9Zm9yKHZhciBtdD0iIixxPTAs''@;'; put 'put ''WD0wO1g8bnQubGVuZ3RoO1grKyl7dHQ9bnRbWF07Zm9yKHZhciBldD1TdHJpbmcodHRbMF0pLFY9aSh2KG8odHQuaW5kZXgpLGIubGVuZ3RoKSwwKSxsdD1bXSxkdD0xO2R0PHR0Lmxlbmd0aDtkdCsrKWx0LnB1c2goRSh0dFtkdF0pKTt2YXIgQ3Q9dHQuZ3JvdXBzO2lmKEIpe3ZhciBPdD1b''@;'; put 'put ''ZXRdLmNvbmNhdChsdCxWLGIpO3ZvaWQgMCE9PUN0JiZPdC5wdXNoKEN0KTt2YXIgTnQ9U3RyaW5nKFAuYXBwbHkodm9pZCAwLE90KSl9ZWxzZSBOdD1BKGV0LGIsVixsdCxDdCxQKTtWPj1xJiYobXQrPWIuc2xpY2UocSxWKStOdCxxPVYrZXQubGVuZ3RoKX1yZXR1cm4gbXQrYi5zbGljZShx''@;'; put 'put ''KX1dO2Z1bmN0aW9uIEEoayxQLE0sVCxiLEIpe3ZhciBVPU0ray5sZW5ndGgsWj1ULmxlbmd0aCxudD15O3JldHVybiB2b2lkIDAhPT1iJiYoYj1lKGIpLG50PWQpLEYuY2FsbChCLG50LGZ1bmN0aW9uKHR0LHl0KXt2YXIgbXQ7c3dpdGNoKHl0LmNoYXJBdCgwKSl7Y2FzZSIkIjpyZXR1cm4i''@;'; put 'put ''JCI7Y2FzZSImIjpyZXR1cm4gaztjYXNlImAiOnJldHVybiBQLnNsaWNlKDAsTSk7Y2FzZSInIjpyZXR1cm4gUC5zbGljZShVKTtjYXNlIjwiOm10PWJbeXQuc2xpY2UoMSwtMSldO2JyZWFrO2RlZmF1bHQ6dmFyIHE9K3l0O2lmKDA9PT1xKXJldHVybiB0dDtpZihxPlope3ZhciBYPXAocS8x''@;'; put 'put ''MCk7cmV0dXJuIDA9PT1YP3R0Olg8PVo/dm9pZCAwPT09VFtYLTFdP3l0LmNoYXJBdCgxKTpUW1gtMV0reXQuY2hhckF0KDEpOnR0fW10PVRbcS0xXX1yZXR1cm4gdm9pZCAwPT09bXQ/IiI6bXR9KX19KX0sNzQ3MDEoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyMjgpLGU9dCg3MzU5''@;'; put 'put ''KSxzPXQoNTI1MzUpO3QoNjkyMjgpKCJzZWFyY2giLDEsZnVuY3Rpb24obyx1LGwsaSl7cmV0dXJuW2Z1bmN0aW9uKHApe3ZhciBkPW8odGhpcykseT1wPy5bdV07cmV0dXJuIHZvaWQgMCE9PXk/eS5jYWxsKHAsZCk6bmV3IFJlZ0V4cChwKVt1XShTdHJpbmcoZCkpfSxmdW5jdGlvbih2KXt2''@;'; put 'put ''YXIgcD1pKGwsdix0aGlzKTtpZihwLmRvbmUpcmV0dXJuIHAudmFsdWU7dmFyIGQ9bih2KSx5PVN0cmluZyh0aGlzKSxFPWQubGFzdEluZGV4O2UoRSwwKXx8KGQubGFzdEluZGV4PTApO3ZhciBnPXMoZCx5KTtyZXR1cm4gZShkLmxhc3RJbmRleCxFKXx8KGQubGFzdEluZGV4PUUpLG51bGw9''@;'; put 'put ''PT1nPy0xOmcuaW5kZXh9XX0pfSwyMDM0MShjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoOTU0MTEpLGU9dCg0MjI4KSxzPXQoMTkxOTApLG89dCgyODgyOCksdT10KDgxNDg1KSxsPXQoNTI1MzUpLGk9dCg2OTYwMCksdj10KDc5NDQ4KSxwPU1hdGgubWluLGQ9W10ucHVzaCx5PSJzcGxp''@;'; put 'put ''dCIsRT0ibGVuZ3RoIixnPSJsYXN0SW5kZXgiLEQ9NDI5NDk2NzI5NSxGPSF2KGZ1bmN0aW9uKCl7UmVnRXhwKEQsInkiKX0pO3QoNjkyMjgpKCJzcGxpdCIsMixmdW5jdGlvbih4LEEsayxQKXt2YXIgTTtyZXR1cm4gTT0iYyI9PSJhYmJjIlt5XSgvKGIpKi8pWzFdfHw0IT0idGVzdCJbeV0o''@;'; put 'put ''Lyg/OikvLC0xKVtFXXx8MiE9ImFiIlt5XSgvKD86YWIpKi8pW0VdfHw0IT0iLiJbeV0oLyguPykoLj8pLylbRV18fCIuIlt5XSgvKCkoKS8pW0VdPjF8fCIiW3ldKC8uPy8pW0VdP2Z1bmN0aW9uKFQsYil7dmFyIEI9U3RyaW5nKHRoaXMpO2lmKHZvaWQgMD09PVQmJjA9PT1iKXJldHVybltd''@;'; put 'put ''O2lmKCFuKFQpKXJldHVybiBrLmNhbGwoQixULGIpO2Zvcih2YXIgbXQscSxYLFU9W10sbnQ9MCx0dD12b2lkIDA9PT1iP0Q6Yj4+PjAseXQ9bmV3IFJlZ0V4cChULnNvdXJjZSwoVC5pZ25vcmVDYXNlPyJpIjoiIikrKFQubXVsdGlsaW5lPyJtIjoiIikrKFQudW5pY29kZT8idSI6IiIpKyhU''@;'; put 'put ''LnN0aWNreT8ieSI6IiIpKyJnIik7KG10PWkuY2FsbCh5dCxCKSkmJiEoKHE9eXRbZ10pPm50JiYoVS5wdXNoKEIuc2xpY2UobnQsbXQuaW5kZXgpKSxtdFtFXT4xJiZtdC5pbmRleDxCW0VdJiZkLmFwcGx5KFUsbXQuc2xpY2UoMSkpLFg9bXRbMF1bRV0sbnQ9cSxVW0VdPj10dCkpOyl5dFtn''@;'; put 'put ''XT09PW10LmluZGV4JiZ5dFtnXSsrO3JldHVybiBudD09PUJbRV0/KFh8fCF5dC50ZXN0KCIiKSkmJlUucHVzaCgiIik6VS5wdXNoKEIuc2xpY2UobnQpKSxVW0VdPnR0P1Uuc2xpY2UoMCx0dCk6VX06IjAiW3ldKHZvaWQgMCwwKVtFXT9mdW5jdGlvbihULGIpe3JldHVybiB2b2lkIDA9PT1U''@;'; put 'put ''JiYwPT09Yj9bXTprLmNhbGwodGhpcyxULGIpfTprLFtmdW5jdGlvbihiLEIpe3ZhciBVPXgodGhpcyksWj1iPy5bQV07cmV0dXJuIHZvaWQgMCE9PVo/Wi5jYWxsKGIsVSxCKTpNLmNhbGwoU3RyaW5nKFUpLGIsQil9LGZ1bmN0aW9uKFQsYil7dmFyIEI9UChNLFQsdGhpcyxiLE0hPT1rKTtp''@;'; put 'put ''ZihCLmRvbmUpcmV0dXJuIEIudmFsdWU7dmFyIFU9ZShUKSxaPVN0cmluZyh0aGlzKSxudD1zKFUsUmVnRXhwKSx0dD1VLnVuaWNvZGUsbXQ9bmV3IG50KEY/VToiXig/OiIrVS5zb3VyY2UrIikiLChVLmlnbm9yZUNhc2U/ImkiOiIiKSsoVS5tdWx0aWxpbmU/Im0iOiIiKSsoVS51bmljb2Rl''@;'; put 'put ''PyJ1IjoiIikrKEY/InkiOiJnIikpLHE9dm9pZCAwPT09Yj9EOmI+Pj4wO2lmKDA9PT1xKXJldHVybltdO2lmKDA9PT1aLmxlbmd0aClyZXR1cm4gbnVsbD09PWwobXQsWik/W1pdOltdO2Zvcih2YXIgWD0wLGV0PTAsVj1bXTtldDxaLmxlbmd0aDspe210Lmxhc3RJbmRleD1GP2V0OjA7dmFy''@;'; put 'put ''IGR0LGx0PWwobXQsRj9aOlouc2xpY2UoZXQpKTtpZihudWxsPT09bHR8fChkdD1wKHUobXQubGFzdEluZGV4KyhGPzA6ZXQpKSxaLmxlbmd0aCkpPT09WClldD1vKFosZXQsdHQpO2Vsc2V7aWYoVi5wdXNoKFouc2xpY2UoWCxldCkpLFYubGVuZ3RoPT09cSlyZXR1cm4gVjtmb3IodmFyIEN0''@;'; put 'put ''PTE7Q3Q8PWx0Lmxlbmd0aC0xO0N0KyspaWYoVi5wdXNoKGx0W0N0XSksVi5sZW5ndGg9PT1xKXJldHVybiBWO2V0PVg9ZHR9fXJldHVybiBWLnB1c2goWi5zbGljZShYKSksVn1dfSl9LDc4NjA0KGMsZix0KXsidXNlIHN0cmljdCI7dCgzOTYzOCk7dmFyIG49dCg0MjI4KSxlPXQoMTE1OCks''@;'; put 'put ''cz10KDE3NjMpLG89InRvU3RyaW5nIix1PS8uL1tvXSxsPWZ1bmN0aW9uKGkpe3QoMjg4NTkpKFJlZ0V4cC5wcm90b3R5cGUsbyxpLCEwKX07dCg3OTQ0OCkoZnVuY3Rpb24oKXtyZXR1cm4iL2EvYiIhPXUuY2FsbCh7c291cmNlOiJhIixmbGFnczoiYiJ9KX0pP2woZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''dj1uKHRoaXMpO3JldHVybiIvIi5jb25jYXQodi5zb3VyY2UsIi8iLCJmbGFncyJpbiB2P3YuZmxhZ3M6IXMmJnYgaW5zdGFuY2VvZiBSZWdFeHA/ZS5jYWxsKHYpOnZvaWQgMCl9KTp1Lm5hbWUhPW8mJmwoZnVuY3Rpb24oKXtyZXR1cm4gdS5jYWxsKHRoaXMpfSl9LDcxNjMyKGMsZix0KXsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIG49dCgzNjE5NyksZT10KDEyODg4KTtjLmV4cG9ydHM9dCg1ODkzMykoIlNldCIsZnVuY3Rpb24obyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx7YWRkOmZ1bmN0aW9uKHUp''@;'; put 'put ''e3JldHVybiBuLmRlZihlKHRoaXMsIlNldCIpLHU9MD09PXU/MDp1LHUpfX0sbil9LDY0OTc5KGMsZix0KXsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImFuY2hvciIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBuKHRoaXMsImEiLCJuYW1lIixzKX19KX0sODkwMTEoYyxm''@;'; put 'put ''LHQpeyJ1c2Ugc3RyaWN0Ijt0KDUyNDY4KSgiYmlnIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJiaWciLCIiLCIiKX19KX0sNTQ1OTEoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt0KDUyNDY4KSgiYmxpbmsiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBuKHRoaXMsImJsaW5rIiwiIiwiIil9fSl9LDQ3MzM0KGMsZix0KXsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImJvbGQiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsImIiLCIiLCIiKX19KX0sMzI0MDUoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''bj10KDkyMTI3KSxlPXQoOTEyMTIpKCExKTtuKG4uUCwiU3RyaW5nIix7Y29kZVBvaW50QXQ6ZnVuY3Rpb24obyl7cmV0dXJuIGUodGhpcyxvKX19KX0sMTcyMjQoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoODE0ODUpLHM9dCg3ODk0Miksbz0iZW5kc1dpdGgiLHU9''@;'; put 'put ''IiJbb107bihuLlArbi5GKnQoMjUyMDMpKG8pLCJTdHJpbmciLHtlbmRzV2l0aDpmdW5jdGlvbihpKXt2YXIgdj1zKHRoaXMsaSxvKSxwPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGQ9ZSh2Lmxlbmd0aCkseT12b2lkIDA9PT1wP2Q6TWF0aC5taW4oZShwKSxkKSxF''@;'; put 'put ''PVN0cmluZyhpKTtyZXR1cm4gdT91LmNhbGwodixFLHkpOnYuc2xpY2UoeS1FLmxlbmd0aCx5KT09PUV9fSl9LDcwODMoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt0KDUyNDY4KSgiZml4ZWQiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsInR0IiwiIiwiIil9fSl9''@;'; put 'put ''LDY5MjEzKGMsZix0KXsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImZvbnRjb2xvciIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBuKHRoaXMsImZvbnQiLCJjb2xvciIscyl9fSl9LDM4NDM3KGMsZix0KXsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImZvbnRzaXplIixmdW5j''@;'; put 'put ''dGlvbihuKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIG4odGhpcywiZm9udCIsInNpemUiLHMpfX0pfSwxMjIyMChjLGYsdCl7dmFyIG49dCg5MjEyNyksZT10KDcwMTU3KSxzPVN0cmluZy5mcm9tQ2hhckNvZGUsbz1TdHJpbmcuZnJvbUNvZGVQb2ludDtuKG4uUytuLkYqKCEhbyYmMSE9''@;'; put 'put ''by5sZW5ndGgpLCJTdHJpbmciLHtmcm9tQ29kZVBvaW50OmZ1bmN0aW9uKGwpe2Zvcih2YXIgZCxpPVtdLHY9YXJndW1lbnRzLmxlbmd0aCxwPTA7dj5wOyl7aWYoZD0rYXJndW1lbnRzW3ArK10sZShkLDExMTQxMTEpIT09ZCl0aHJvdyBSYW5nZUVycm9yKGQrIiBpcyBub3QgYSB2YWxpZCBj''@;'; put 'put ''b2RlIHBvaW50Iik7aS5wdXNoKGQ8NjU1MzY/cyhkKTpzKDU1Mjk2KygoZC09NjU1MzYpPj4xMCksZCUxMDI0KzU2MzIwKSl9cmV0dXJuIGkuam9pbigiIil9fSl9LDI4ODcyKGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDc4OTQyKSxzPSJpbmNsdWRlcyI7bihuLlAr''@;'; put 'put ''bi5GKnQoMjUyMDMpKHMpLCJTdHJpbmciLHtpbmNsdWRlczpmdW5jdGlvbih1KXtyZXR1cm4hIX5lKHRoaXMsdSxzKS5pbmRleE9mKHUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw2MjIyMChjLGYsdCl7InVzZSBzdHJpY3QiO3QoNTI0NjgpKCJpdGFsaWNz''@;'; put 'put ''IixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJpIiwiIiwiIil9fSl9LDgyOTc1KGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCg5MTIxMikoITApO3QoOTgxNzUpKFN0cmluZywiU3RyaW5nIixmdW5jdGlvbihlKXt0aGlzLl90PVN0cmluZyhlKSx0aGlz''@;'; put 'put ''Ll9pPTB9LGZ1bmN0aW9uKCl7dmFyIG8sZT10aGlzLl90LHM9dGhpcy5faTtyZXR1cm4gcz49ZS5sZW5ndGg/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfToobz1uKGUscyksdGhpcy5faSs9by5sZW5ndGgse3ZhbHVlOm8sZG9uZTohMX0pfSl9LDc2NTQ5KGMsZix0KXsidXNlIHN0cmljdCI7dCg1''@;'; put 'put ''MjQ2OCkoImxpbmsiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gbih0aGlzLCJhIiwiaHJlZiIscyl9fSl9LDIzNDgzKGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPXQoNTcyMjEpLHM9dCg4MTQ4NSk7bihuLlMsIlN0cmluZyIse3JhdzpmdW5jdGlvbih1KXtmb3IodmFy''@;'; put 'put ''IGw9ZSh1LnJhdyksaT1zKGwubGVuZ3RoKSx2PWFyZ3VtZW50cy5sZW5ndGgscD1bXSxkPTA7aT5kOylwLnB1c2goU3RyaW5nKGxbZCsrXSkpLGQ8diYmcC5wdXNoKFN0cmluZyhhcmd1bWVudHNbZF0pKTtyZXR1cm4gcC5qb2luKCIiKX19KX0sNDQ4OTQoYyxmLHQpe3ZhciBuPXQoOTIxMjcp''@;'; put 'put ''O24obi5QLCJTdHJpbmciLHtyZXBlYXQ6dCgyNzkyNil9KX0sNDI4MTgoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt0KDUyNDY4KSgic21hbGwiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsInNtYWxsIiwiIiwiIil9fSl9LDEwMTc3KGMsZix0KXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIG49dCg5MjEyNyksZT10KDgxNDg1KSxzPXQoNzg5NDIpLG89InN0YXJ0c1dpdGgiLHU9IiJbb107bihuLlArbi5GKnQoMjUyMDMpKG8pLCJTdHJpbmciLHtzdGFydHNXaXRoOmZ1bmN0aW9uKGkpe3ZhciB2PXModGhpcyxpLG8pLHA9ZShNYXRoLm1pbihhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjE/YXJndW1lbnRzWzFdOnZvaWQgMCx2Lmxlbmd0aCkpLGQ9U3RyaW5nKGkpO3JldHVybiB1P3UuY2FsbCh2LGQscCk6di5zbGljZShwLHArZC5sZW5ndGgpPT09ZH19KX0sMjg1NDMoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt0KDUyNDY4KSgic3RyaWtlIixmdW5jdGlvbihuKXtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gbih0aGlzLCJzdHJpa2UiLCIiLCIiKX19KX0sMzU1OShjLGYsdCl7InVzZSBzdHJpY3QiO3QoNTI0NjgpKCJzdWIiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsInN1YiIsIiIsIiIpfX0pfSw4NDE1MyhjLGYsdCl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3QoNTI0NjgpKCJzdXAiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsInN1cCIsIiIsIiIpfX0pfSwyMDk1NyhjLGYsdCl7InVzZSBzdHJpY3QiO3QoNDA2MjkpKCJ0cmltIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlz''@;'; put 'put ''LDMpfX0pfSw5OTY1MChjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoNjc1MjYpLGU9dCg1NzkxNykscz10KDE3NjMpLG89dCg5MjEyNyksdT10KDI4ODU5KSxsPXQoMTI5ODgpLktFWSxpPXQoNzk0NDgpLHY9dCg0NDU1NikscD10KDM4NDQpLGQ9dCg0NDE1KSx5PXQoNjc1NzQpLEU9dCg0''@;'; put 'put ''Nzk2MCksZz10KDQ1MzkyKSxEPXQoMTU5NjkpLEY9dCg3Nzk4MSkseD10KDQyMjgpLEE9dCg0MzMwNSksaz10KDE4MjcwKSxQPXQoNTcyMjEpLE09dCg4MzA0OCksVD10KDExOTk2KSxiPXQoODQ3MTkpLEI9dCg0NzY1KSxVPXQoNjg2NDEpLFo9dCgxMDYwKSxudD10KDQ3OTY3KSx0dD10KDUx''@;'; put 'put ''MzExKSx5dD1VLmYsbXQ9bnQuZixxPUIuZixYPW4uU3ltYm9sLGV0PW4uSlNPTixWPWV0JiZldC5zdHJpbmdpZnksbHQ9InByb3RvdHlwZSIsZHQ9eSgiX2hpZGRlbiIpLEN0PXkoInRvUHJpbWl0aXZlIiksT3Q9e30ucHJvcGVydHlJc0VudW1lcmFibGUsTnQ9digic3ltYm9sLXJlZ2lzdHJ5''@;'; put 'put ''IiksUXQ9digic3ltYm9scyIpLGFuPXYoIm9wLXN5bWJvbHMiKSxHdD1PYmplY3RbbHRdLHNuPSJmdW5jdGlvbiI9PXR5cGVvZiBYJiYhIVouZixFbj1uLlFPYmplY3QsWXQ9IUVufHwhRW5bbHRdfHwhRW5bbHRdLmZpbmRDaGlsZCxwbj1zJiZpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPWIobXQo''@;'; put 'put ''e30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbXQodGhpcywiYSIse3ZhbHVlOjd9KS5hfX0pKS5hfSk/ZnVuY3Rpb24oXyxILFEpe3ZhciBpdD15dChHdCxIKTtpdCYmZGVsZXRlIEd0W0hdLG10KF8sSCxRKSxpdCYmXyE9PUd0JiZtdChHdCxILGl0KX06bXQseG49ZnVuY3Rpb24oXyl7''@;'; put 'put ''dmFyIEg9UXRbX109YihYW2x0XSk7cmV0dXJuIEguX2s9XyxIfSxobj1zbiYmInN5bWJvbCI9PXR5cGVvZiBYLml0ZXJhdG9yP2Z1bmN0aW9uKF8pe3JldHVybiJzeW1ib2wiPT10eXBlb2YgX306ZnVuY3Rpb24oXyl7cmV0dXJuIF8gaW5zdGFuY2VvZiBYfSxvbj1mdW5jdGlvbihILFEsaXQp''@;'; put 'put ''e3JldHVybiBIPT09R3QmJm9uKGFuLFEsaXQpLHgoSCksUT1NKFEsITApLHgoaXQpLGUoUXQsUSk/KGl0LmVudW1lcmFibGU/KGUoSCxkdCkmJkhbZHRdW1FdJiYoSFtkdF1bUV09ITEpLGl0PWIoaXQse2VudW1lcmFibGU6VCgwLCExKX0pKTooZShILGR0KXx8bXQoSCxkdCxUKDEse30pKSxI''@;'; put 'put ''W2R0XVtRXT0hMCkscG4oSCxRLGl0KSk6bXQoSCxRLGl0KX0sbm49ZnVuY3Rpb24oSCxRKXt4KEgpO2Zvcih2YXIgcm4saXQ9RChRPVAoUSkpLHp0PTAscXQ9aXQubGVuZ3RoO3F0Pnp0OylvbihILHJuPWl0W3p0KytdLFFbcm5dKTtyZXR1cm4gSH0sVG49ZnVuY3Rpb24oSCl7dmFyIFE9T3Qu''@;'; put 'put ''Y2FsbCh0aGlzLEg9TShILCEwKSk7cmV0dXJuISh0aGlzPT09R3QmJmUoUXQsSCkmJiFlKGFuLEgpKSYmKCEoUXx8IWUodGhpcyxIKXx8IWUoUXQsSCl8fGUodGhpcyxkdCkmJnRoaXNbZHRdW0hdKXx8USl9LGg9ZnVuY3Rpb24oSCxRKXtpZihIPVAoSCksUT1NKFEsITApLEghPT1HdHx8IWUo''@;'; put 'put ''UXQsUSl8fGUoYW4sUSkpe3ZhciBpdD15dChILFEpO3JldHVybiBpdCYmZShRdCxRKSYmIShlKEgsZHQpJiZIW2R0XVtRXSkmJihpdC5lbnVtZXJhYmxlPSEwKSxpdH19LHI9ZnVuY3Rpb24oSCl7Zm9yKHZhciBxdCxRPXEoUChIKSksaXQ9W10senQ9MDtRLmxlbmd0aD56dDspIWUoUXQscXQ9''@;'; put 'put ''UVt6dCsrXSkmJnF0IT1kdCYmcXQhPWwmJml0LnB1c2gocXQpO3JldHVybiBpdH0sYT1mdW5jdGlvbihIKXtmb3IodmFyIHJuLFE9SD09PUd0LGl0PXEoUT9hbjpQKEgpKSx6dD1bXSxxdD0wO2l0Lmxlbmd0aD5xdDspZShRdCxybj1pdFtxdCsrXSkmJighUXx8ZShHdCxybikpJiZ6dC5wdXNo''@;'; put 'put ''KFF0W3JuXSk7cmV0dXJuIHp0fTtzbnx8KFg9ZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgWCl0aHJvdyBUeXBlRXJyb3IoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciEiKTt2YXIgSD1kKGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKSxRPWZ1bmN0aW9u''@;'; put 'put ''KGl0KXt0aGlzPT09R3QmJlEuY2FsbChhbixpdCksZSh0aGlzLGR0KSYmZSh0aGlzW2R0XSxIKSYmKHRoaXNbZHRdW0hdPSExKSxwbih0aGlzLEgsVCgxLGl0KSl9O3JldHVybiBzJiZZdCYmcG4oR3QsSCx7Y29uZmlndXJhYmxlOiEwLHNldDpRfSkseG4oSCl9LHUoWFtsdF0sInRvU3RyaW5n''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9rfSksVS5mPWgsbnQuZj1vbix0KDU5NDE1KS5mPUIuZj1yLHQoODQ0OSkuZj1UbixaLmY9YSxzJiYhdCgyMjc1MCkmJnUoR3QsInByb3BlcnR5SXNFbnVtZXJhYmxlIixUbiwhMCksRS5mPWZ1bmN0aW9uKF8pe3JldHVybiB4bih5KF8pKX0pLG8o''@;'; put 'put ''by5HK28uVytvLkYqIXNuLHtTeW1ib2w6WH0pO2Zvcih2YXIgbT0iaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMiLnNwbGl0KCIsIiksdz0w''@;'; put 'put ''O20ubGVuZ3RoPnc7KXkobVt3KytdKTtmb3IodmFyIEs9dHQoeS5zdG9yZSksJD0wO0subGVuZ3RoPiQ7KWcoS1skKytdKTtvKG8uUytvLkYqIXNuLCJTeW1ib2wiLHtmb3I6ZnVuY3Rpb24oXyl7cmV0dXJuIGUoTnQsXys9IiIpP050W19dOk50W19dPVgoXyl9LGtleUZvcjpmdW5jdGlvbihI''@;'; put 'put ''KXtpZighaG4oSCkpdGhyb3cgVHlwZUVycm9yKEgrIiBpcyBub3QgYSBzeW1ib2whIik7Zm9yKHZhciBRIGluIE50KWlmKE50W1FdPT09SClyZXR1cm4gUX0sdXNlU2V0dGVyOmZ1bmN0aW9uKCl7WXQ9ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe1l0PSExfX0pLG8oby5TK28uRiohc24sIk9i''@;'; put 'put ''amVjdCIse2NyZWF0ZTpmdW5jdGlvbihILFEpe3JldHVybiB2b2lkIDA9PT1RP2IoSCk6bm4oYihIKSxRKX0sZGVmaW5lUHJvcGVydHk6b24sZGVmaW5lUHJvcGVydGllczpubixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6aCxnZXRPd25Qcm9wZXJ0eU5hbWVzOnIsZ2V0T3duUHJvcGVydHlT''@;'; put 'put ''eW1ib2xzOmF9KTt2YXIgRHQ9aShmdW5jdGlvbigpe1ouZigxKX0pO28oby5TK28uRipEdCwiT2JqZWN0Iix7Z2V0T3duUHJvcGVydHlTeW1ib2xzOmZ1bmN0aW9uKEgpe3JldHVybiBaLmYoayhIKSl9fSksZXQmJm8oby5TK28uRiooIXNufHxpKGZ1bmN0aW9uKCl7dmFyIF89WCgpO3JldHVy''@;'; put 'put ''biJbbnVsbF0iIT1WKFtfXSl8fCJ7fSIhPVYoe2E6X30pfHwie30iIT1WKE9iamVjdChfKSl9KSksIkpTT04iLHtzdHJpbmdpZnk6ZnVuY3Rpb24oSCl7Zm9yKHZhciB6dCxxdCxRPVtIXSxpdD0xO2FyZ3VtZW50cy5sZW5ndGg+aXQ7KVEucHVzaChhcmd1bWVudHNbaXQrK10pO2lmKHF0PXp0''@;'; put 'put ''PVFbMV0sKEEoenQpfHx2b2lkIDAhPT1IKSYmIWhuKEgpKXJldHVybiBGKHp0KXx8KHp0PWZ1bmN0aW9uKHJuLE1uKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgcXQmJihNbj1xdC5jYWxsKHRoaXMscm4sTW4pKSwhaG4oTW4pKXJldHVybiBNbn0pLFFbMV09enQsVi5hcHBseShldCxRKX19KSxY''@;'; put 'put ''W2x0XVtDdF18fHQoMzMzNDEpKFhbbHRdLEN0LFhbbHRdLnZhbHVlT2YpLHAoWCwiU3ltYm9sIikscChNYXRoLCJNYXRoIiwhMCkscChuLkpTT04sIkpTT04iLCEwKX0sNzkzOTcoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgRixuPXQoNjc1MjYpLGU9dCg2NjE3OSkoMCkscz10KDI4ODU5KSxv''@;'; put 'put ''PXQoMTI5ODgpLHU9dCgyODIwNiksbD10KDk5ODgyKSxpPXQoNDMzMDUpLHY9dCgxMjg4OCkscD10KDEyODg4KSxkPSFuLkFjdGl2ZVhPYmplY3QmJiJBY3RpdmVYT2JqZWN0ImluIG4seT0iV2Vha01hcCIsRT1vLmdldFdlYWssZz1PYmplY3QuaXNFeHRlbnNpYmxlLEQ9bC51ZnN0b3JlLHg9''@;'; put 'put ''ZnVuY3Rpb24oUCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFAodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSxBPXtnZXQ6ZnVuY3Rpb24oTSl7aWYoaShNKSl7dmFyIFQ9RShNKTtyZXR1cm4hMD09PVQ/RCh2KHRoaXMseSkpLmdldChNKTpUP1RbdGhp''@;'; put 'put ''cy5faV06dm9pZCAwfX0sc2V0OmZ1bmN0aW9uKE0sVCl7cmV0dXJuIGwuZGVmKHYodGhpcyx5KSxNLFQpfX0saz1jLmV4cG9ydHM9dCg1ODkzMykoeSx4LEEsbCwhMCwhMCk7cCYmZCYmKHUoKEY9bC5nZXRDb25zdHJ1Y3Rvcih4LHkpKS5wcm90b3R5cGUsQSksby5ORUVEPSEwLGUoWyJkZWxl''@;'; put 'put ''dGUiLCJoYXMiLCJnZXQiLCJzZXQiXSxmdW5jdGlvbihQKXt2YXIgTT1rLnByb3RvdHlwZSxUPU1bUF07cyhNLFAsZnVuY3Rpb24oYixCKXtpZihpKGIpJiYhZyhiKSl7dGhpcy5fZnx8KHRoaXMuX2Y9bmV3IEYpO3ZhciBVPXRoaXMuX2ZbUF0oYixCKTtyZXR1cm4ic2V0Ij09UD90aGlzOlV9''@;'; put 'put ''cmV0dXJuIFQuY2FsbCh0aGlzLGIsQil9KX0pKX0sNzc0OTEoYyxmLHQpe3ZhciBuPXQoOTczODApLGU9dCg0MjI4KSxzPW4ua2V5LG89bi5zZXQ7bi5leHAoe2RlZmluZU1ldGFkYXRhOmZ1bmN0aW9uKGwsaSx2LHApe28obCxpLGUodikscyhwKSl9fSl9LDc0OTA3KGMsZix0KXt2YXIgbj10''@;'; put 'put ''KDk3MzgwKSxlPXQoNDIyOCkscz1uLmtleSxvPW4ubWFwLHU9bi5zdG9yZTtuLmV4cCh7ZGVsZXRlTWV0YWRhdGE6ZnVuY3Rpb24oaSx2KXt2YXIgcD1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOnMoYXJndW1lbnRzWzJdKSxkPW8oZSh2KSxwLCExKTtpZih2b2lkIDA9PT1kfHwhZC5kZWxl''@;'; put 'put ''dGUoaSkpcmV0dXJuITE7aWYoZC5zaXplKXJldHVybiEwO3ZhciB5PXUuZ2V0KHYpO3JldHVybiB5LmRlbGV0ZShwKSwhIXkuc2l6ZXx8dS5kZWxldGUodil9fSl9LDE5MjY5KGMsZix0KXt2YXIgbj10KDcxNjMyKSxlPXQoODA5NTYpLHM9dCg5NzM4MCksbz10KDQyMjgpLHU9dCg0MDYyNyks''@;'; put 'put ''bD1zLmtleXMsaT1zLmtleSx2PWZ1bmN0aW9uKHAsZCl7dmFyIHk9bChwLGQpLEU9dShwKTtpZihudWxsPT09RSlyZXR1cm4geTt2YXIgZz12KEUsZCk7cmV0dXJuIGcubGVuZ3RoP3kubGVuZ3RoP2UobmV3IG4oeS5jb25jYXQoZykpKTpnOnl9O3MuZXhwKHtnZXRNZXRhZGF0YUtleXM6ZnVu''@;'; put 'put ''Y3Rpb24oZCl7cmV0dXJuIHYobyhkKSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOmkoYXJndW1lbnRzWzFdKSl9fSl9LDc5MTAwKGMsZix0KXt2YXIgbj10KDk3MzgwKSxlPXQoNDIyOCkscz10KDQwNjI3KSxvPW4uaGFzLHU9bi5nZXQsbD1uLmtleSxpPWZ1bmN0aW9uKHYscCxkKXtpZihv''@;'; put 'put ''KHYscCxkKSlyZXR1cm4gdSh2LHAsZCk7dmFyIEU9cyhwKTtyZXR1cm4gbnVsbCE9PUU/aSh2LEUsZCk6dm9pZCAwfTtuLmV4cCh7Z2V0TWV0YWRhdGE6ZnVuY3Rpb24ocCxkKXtyZXR1cm4gaShwLGUoZCksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpsKGFyZ3VtZW50c1syXSkpfX0pfSw3''@;'; put 'put ''OTczMihjLGYsdCl7dmFyIG49dCg5NzM4MCksZT10KDQyMjgpLHM9bi5rZXlzLG89bi5rZXk7bi5leHAoe2dldE93bk1ldGFkYXRhS2V5czpmdW5jdGlvbihsKXtyZXR1cm4gcyhlKGwpLGFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6byhhcmd1bWVudHNbMV0pKX19KX0sOTEzMTkoYyxmLHQp''@;'; put 'put ''e3ZhciBuPXQoOTczODApLGU9dCg0MjI4KSxzPW4uZ2V0LG89bi5rZXk7bi5leHAoe2dldE93bk1ldGFkYXRhOmZ1bmN0aW9uKGwsaSl7cmV0dXJuIHMobCxlKGkpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6byhhcmd1bWVudHNbMl0pKX19KX0sMTE3NihjLGYsdCl7dmFyIG49dCg5NzM4''@;'; put 'put ''MCksZT10KDQyMjgpLHM9dCg0MDYyNyksbz1uLmhhcyx1PW4ua2V5LGw9ZnVuY3Rpb24oaSx2LHApe2lmKG8oaSx2LHApKXJldHVybiEwO3ZhciB5PXModik7cmV0dXJuIG51bGwhPT15JiZsKGkseSxwKX07bi5leHAoe2hhc01ldGFkYXRhOmZ1bmN0aW9uKHYscCl7cmV0dXJuIGwodixlKHAp''@;'; put 'put ''LGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6dShhcmd1bWVudHNbMl0pKX19KX0sMzEwNyhjLGYsdCl7dmFyIG49dCg5NzM4MCksZT10KDQyMjgpLHM9bi5oYXMsbz1uLmtleTtuLmV4cCh7aGFzT3duTWV0YWRhdGE6ZnVuY3Rpb24obCxpKXtyZXR1cm4gcyhsLGUoaSksYXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aDwzP3ZvaWQgMDpvKGFyZ3VtZW50c1syXSkpfX0pfSw2MTY5MShjLGYsdCl7dmFyIG49dCg5NzM4MCksZT10KDQyMjgpLHM9dCg2MzM4Nyksbz1uLmtleSx1PW4uc2V0O24uZXhwKHttZXRhZGF0YTpmdW5jdGlvbihpLHYpe3JldHVybiBmdW5jdGlvbihkLHkpe3UoaSx2LCh2b2lkIDAh''@;'; put 'put ''PT15P2U6cykoZCksbyh5KSl9fX0pfSwzNTg5MChjLGYsdCl7Zm9yKHZhciBuPXQoOTUxNjUpLGU9dCg1MTMxMSkscz10KDI4ODU5KSxvPXQoNjc1MjYpLHU9dCgzMzM0MSksbD10KDYwOTA2KSxpPXQoNjc1NzQpLHY9aSgiaXRlcmF0b3IiKSxwPWkoInRvU3RyaW5nVGFnIiksZD1sLkFycmF5''@;'; put 'put ''LHk9e0NTU1J1bGVMaXN0OiEwLENTU1N0eWxlRGVjbGFyYXRpb246ITEsQ1NTVmFsdWVMaXN0OiExLENsaWVudFJlY3RMaXN0OiExLERPTVJlY3RMaXN0OiExLERPTVN0cmluZ0xpc3Q6ITEsRE9NVG9rZW5MaXN0OiEwLERhdGFUcmFuc2Zlckl0ZW1MaXN0OiExLEZpbGVMaXN0OiExLEhUTUxB''@;'; put 'put ''bGxDb2xsZWN0aW9uOiExLEhUTUxDb2xsZWN0aW9uOiExLEhUTUxGb3JtRWxlbWVudDohMSxIVE1MU2VsZWN0RWxlbWVudDohMSxNZWRpYUxpc3Q6ITAsTWltZVR5cGVBcnJheTohMSxOYW1lZE5vZGVNYXA6ITEsTm9kZUxpc3Q6ITAsUGFpbnRSZXF1ZXN0TGlzdDohMSxQbHVnaW46ITEsUGx1''@;'; put 'put ''Z2luQXJyYXk6ITEsU1ZHTGVuZ3RoTGlzdDohMSxTVkdOdW1iZXJMaXN0OiExLFNWR1BhdGhTZWdMaXN0OiExLFNWR1BvaW50TGlzdDohMSxTVkdTdHJpbmdMaXN0OiExLFNWR1RyYW5zZm9ybUxpc3Q6ITEsU291cmNlQnVmZmVyTGlzdDohMSxTdHlsZVNoZWV0TGlzdDohMCxUZXh0VHJhY2tD''@;'; put 'put ''dWVMaXN0OiExLFRleHRUcmFja0xpc3Q6ITEsVG91Y2hMaXN0OiExfSxFPWUoeSksZz0wO2c8RS5sZW5ndGg7ZysrKXt2YXIgayxEPUVbZ10sRj15W0RdLHg9b1tEXSxBPXgmJngucHJvdG90eXBlO2lmKEEmJihBW3ZdfHx1KEEsdixkKSxBW3BdfHx1KEEscCxEKSxsW0RdPWQsRikpZm9yKGsg''@;'; put 'put ''aW4gbilBW2tdfHxzKEEsayxuW2tdLCEwKX19LDgyNTc0KGMpeyJ1c2Ugc3RyaWN0IjtjLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJsb2NhbGUiOiJlbiIsImRhdGUiOnsiY2EiOlsiZ3JlZ29yeSIsImJ1ZGRoaXN0IiwiY2hpbmVzZSIsImNvcHRpYyIsImRhbmdpIiwiZXRoaW9hYSIsImV0aGlv''@;'; put 'put ''cGljIiwiZ2VuZXJpYyIsImhlYnJldyIsImluZGlhbiIsImlzbGFtaWMiLCJpc2xhbWljYyIsImphcGFuZXNlIiwicGVyc2lhbiIsInJvYyJdLCJob3VyTm8wIjp0cnVlLCJob3VyMTIiOnRydWUsImZvcm1hdHMiOnsic2hvcnQiOiJ7MX0sIHswfSIsIm1lZGl1bSI6InsxfSwgezB9IiwiZnVs''@;'; put 'put ''bCI6InsxfSBcJ2F0XCcgezB9IiwibG9uZyI6InsxfSBcJ2F0XCcgezB9IiwiYXZhaWxhYmxlRm9ybWF0cyI6eyJkIjoiZCIsIkUiOiJjY2MiLCJFZCI6ImQgRSIsIkVobSI6IkUgaDptbSBhIiwiRUhtIjoiRSBISDptbSIsIkVobXMiOiJFIGg6bW06c3MgYSIsIkVIbXMiOiJFIEhIOm1tOnNz''@;'; put 'put ''IiwiR3kiOiJ5IEciLCJHeU1NTSI6Ik1NTSB5IEciLCJHeU1NTWQiOiJNTU0gZCwgeSBHIiwiR3lNTU1FZCI6IkUsIE1NTSBkLCB5IEciLCJoIjoiaCBhIiwiSCI6IkhIIiwiaG0iOiJoOm1tIGEiLCJIbSI6IkhIOm1tIiwiaG1zIjoiaDptbTpzcyBhIiwiSG1zIjoiSEg6bW06c3MiLCJobXN2''@;'; put 'put ''IjoiaDptbTpzcyBhIHYiLCJIbXN2IjoiSEg6bW06c3MgdiIsImhtdiI6Img6bW0gYSB2IiwiSG12IjoiSEg6bW0gdiIsIk0iOiJMIiwiTWQiOiJNL2QiLCJNRWQiOiJFLCBNL2QiLCJNTU0iOiJMTEwiLCJNTU1kIjoiTU1NIGQiLCJNTU1FZCI6IkUsIE1NTSBkIiwiTU1NTWQiOiJNTU1NIGQi''@;'; put 'put ''LCJtcyI6Im1tOnNzIiwieSI6InkiLCJ5TSI6Ik0veSIsInlNZCI6Ik0vZC95IiwieU1FZCI6IkUsIE0vZC95IiwieU1NTSI6Ik1NTSB5IiwieU1NTWQiOiJNTU0gZCwgeSIsInlNTU1FZCI6IkUsIE1NTSBkLCB5IiwieU1NTU0iOiJNTU1NIHkiLCJ5UVFRIjoiUVFRIHkiLCJ5UVFRUSI6IlFR''@;'; put 'put ''UVEgeSJ9LCJkYXRlRm9ybWF0cyI6eyJ5TU1NTUVFRUVkIjoiRUVFRSwgTU1NTSBkLCB5IiwieU1NTU1kIjoiTU1NTSBkLCB5IiwieU1NTWQiOiJNTU0gZCwgeSIsInlNZCI6Ik0vZC95eSJ9LCJ0aW1lRm9ybWF0cyI6eyJobW1zc3p6enoiOiJoOm1tOnNzIGEgenp6eiIsImhtc3oiOiJoOm1t''@;'; put 'put ''OnNzIGEgeiIsImhtcyI6Img6bW06c3MgYSIsImhtIjoiaDptbSBhIn19LCJjYWxlbmRhcnMiOnsiYnVkZGhpc3QiOnsibW9udGhzIjp7Im5hcnJvdyI6WyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSwic2hvcnQiOlsiSmFuIiwiRmViIiwiTWFyIiwi''@;'; put 'put ''QXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sImxvbmciOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVj''@;'; put 'put ''ZW1iZXIiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5''@;'; put 'put ''IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkJFIl0sInNob3J0IjpbIkJFIl0sImxvbmciOlsiQkUiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImNoaW5lc2UiOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMiLCI0IiwiNSIs''@;'; put 'put ''IjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiXSwic2hvcnQiOlsiTW8xIiwiTW8yIiwiTW8zIiwiTW80IiwiTW81IiwiTW82IiwiTW83IiwiTW84IiwiTW85IiwiTW8xMCIsIk1vMTEiLCJNbzEyIl0sImxvbmciOlsiTW9udGgxIiwiTW9udGgyIiwiTW9udGgzIiwiTW9udGg0IiwiTW9u''@;'; put 'put ''dGg1IiwiTW9udGg2IiwiTW9udGg3IiwiTW9udGg4IiwiTW9udGg5IiwiTW9udGgxMCIsIk1vbnRoMTEiLCJNb250aDEyIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIs''@;'; put 'put ''IlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJjb3B0aWMiOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMi''@;'; put 'put ''LCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyJdLCJzaG9ydCI6WyJUb3V0IiwiQmFiYSIsIkhhdG9yIiwiS2lhaGsiLCJUb2JhIiwiQW1zaGlyIiwiQmFyYW1oYXQiLCJCYXJhbW91ZGEiLCJCYXNoYW5zIiwiUGFvbmEiLCJFcGVwIiwiTWVzcmEiLCJOYXNpZSJd''@;'; put 'put ''LCJsb25nIjpbIlRvdXQiLCJCYWJhIiwiSGF0b3IiLCJLaWFoayIsIlRvYmEiLCJBbXNoaXIiLCJCYXJhbWhhdCIsIkJhcmFtb3VkYSIsIkJhc2hhbnMiLCJQYW9uYSIsIkVwZXAiLCJNZXNyYSIsIk5hc2llIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJT''@;'; put 'put ''Il0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJFUkEwIiwiRVJB''@;'; put 'put ''MSJdLCJzaG9ydCI6WyJFUkEwIiwiRVJBMSJdLCJsb25nIjpbIkVSQTAiLCJFUkExIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJkYW5naSI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIx''@;'; put 'put ''MiJdLCJzaG9ydCI6WyJNbzEiLCJNbzIiLCJNbzMiLCJNbzQiLCJNbzUiLCJNbzYiLCJNbzciLCJNbzgiLCJNbzkiLCJNbzEwIiwiTW8xMSIsIk1vMTIiXSwibG9uZyI6WyJNb250aDEiLCJNb250aDIiLCJNb250aDMiLCJNb250aDQiLCJNb250aDUiLCJNb250aDYiLCJNb250aDciLCJNb250''@;'; put 'put ''aDgiLCJNb250aDkiLCJNb250aDEwIiwiTW9udGgxMSIsIk1vbnRoMTIiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9u''@;'; put 'put ''ZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImV0aGlvcGljIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5Iiwi''@;'; put 'put ''MTAiLCIxMSIsIjEyIiwiMTMiXSwic2hvcnQiOlsiTWVza2VyZW0iLCJUZWtlbXQiLCJIZWRhciIsIlRhaHNhcyIsIlRlciIsIllla2F0aXQiLCJNZWdhYml0IiwiTWlhemlhIiwiR2VuYm90IiwiU2VuZSIsIkhhbWxlIiwiTmVoYXNzZSIsIlBhZ3VtZW4iXSwibG9uZyI6WyJNZXNrZXJlbSIs''@;'; put 'put ''IlRla2VtdCIsIkhlZGFyIiwiVGFoc2FzIiwiVGVyIiwiWWVrYXRpdCIsIk1lZ2FiaXQiLCJNaWF6aWEiLCJHZW5ib3QiLCJTZW5lIiwiSGFtbGUiLCJOZWhhc3NlIiwiUGFndW1lbiJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJT''@;'; put 'put ''dW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiRVJBMCIsIkVSQTEiXSwic2hvcnQiOlsi''@;'; put 'put ''RVJBMCIsIkVSQTEiXSwibG9uZyI6WyJFUkEwIiwiRVJBMSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiZXRoaW9hYSI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIl0sInNo''@;'; put 'put ''b3J0IjpbIk1lc2tlcmVtIiwiVGVrZW10IiwiSGVkYXIiLCJUYWhzYXMiLCJUZXIiLCJZZWthdGl0IiwiTWVnYWJpdCIsIk1pYXppYSIsIkdlbmJvdCIsIlNlbmUiLCJIYW1sZSIsIk5laGFzc2UiLCJQYWd1bWVuIl0sImxvbmciOlsiTWVza2VyZW0iLCJUZWtlbXQiLCJIZWRhciIsIlRhaHNh''@;'; put 'put ''cyIsIlRlciIsIllla2F0aXQiLCJNZWdhYml0IiwiTWlhemlhIiwiR2VuYm90IiwiU2VuZSIsIkhhbWxlIiwiTmVoYXNzZSIsIlBhZ3VtZW4iXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwi''@;'; put 'put ''VGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkVSQTAiXSwic2hvcnQiOlsiRVJBMCJdLCJsb25nIjpbIkVSQTAiXX0sImRheVBl''@;'; put 'put ''cmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImdlbmVyaWMiOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiXSwic2hvcnQiOlsiTTAxIiwiTTAyIiwiTTAzIiwiTTA0IiwiTTA1IiwiTTA2IiwiTTA3Iiwi''@;'; put 'put ''TTA4IiwiTTA5IiwiTTEwIiwiTTExIiwiTTEyIl0sImxvbmciOlsiTTAxIiwiTTAyIiwiTTAzIiwiTTA0IiwiTTA1IiwiTTA2IiwiTTA3IiwiTTA4IiwiTTA5IiwiTTEwIiwiTTExIiwiTTEyIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0''@;'; put 'put ''IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJFUkEwIiwiRVJBMSJdLCJzaG9y''@;'; put 'put ''dCI6WyJFUkEwIiwiRVJBMSJdLCJsb25nIjpbIkVSQTAiLCJFUkExIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJncmVnb3J5Ijp7Im1vbnRocyI6eyJuYXJyb3ciOlsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sInNob3J0''@;'; put 'put ''IjpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLCJsb25nIjpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9j''@;'; put 'put ''dG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXki''@;'; put 'put ''LCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJCIiwiQSIsIkJDRSIsIkNFIl0sInNob3J0IjpbIkJDIiwiQUQiLCJCQ0UiLCJDRSJdLCJsb25nIjpbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSIsIkJlZm9yZSBDb21t''@;'; put 'put ''b24gRXJhIiwiQ29tbW9uIEVyYSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiaGVicmV3Ijp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCI3Il0sInNob3J0IjpbIlRpc2hy''@;'; put 'put ''aSIsIkhlc2h2YW4iLCJLaXNsZXYiLCJUZXZldCIsIlNoZXZhdCIsIkFkYXIgSSIsIkFkYXIiLCJOaXNhbiIsIkl5YXIiLCJTaXZhbiIsIlRhbXV6IiwiQXYiLCJFbHVsIiwiQWRhciBJSSJdLCJsb25nIjpbIlRpc2hyaSIsIkhlc2h2YW4iLCJLaXNsZXYiLCJUZXZldCIsIlNoZXZhdCIsIkFk''@;'; put 'put ''YXIgSSIsIkFkYXIiLCJOaXNhbiIsIkl5YXIiLCJTaXZhbiIsIlRhbXV6IiwiQXYiLCJFbHVsIiwiQWRhciBJSSJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQi''@;'; put 'put ''XSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiQU0iXSwic2hvcnQiOlsiQU0iXSwibG9uZyI6WyJBTSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0i''@;'; put 'put ''OiJQTSJ9fSwiaW5kaWFuIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIkNoYWl0cmEiLCJWYWlzYWtoYSIsIkp5YWlzdGhhIiwiQXNhZGhhIiwiU3JhdmFuYSIsIkJoYWRyYSIsIkFzdmlu''@;'; put 'put ''YSIsIkthcnRpa2EiLCJBZ3JhaGF5YW5hIiwiUGF1c2EiLCJNYWdoYSIsIlBoYWxndW5hIl0sImxvbmciOlsiQ2hhaXRyYSIsIlZhaXNha2hhIiwiSnlhaXN0aGEiLCJBc2FkaGEiLCJTcmF2YW5hIiwiQmhhZHJhIiwiQXN2aW5hIiwiS2FydGlrYSIsIkFncmFoYXlhbmEiLCJQYXVzYSIsIk1h''@;'; put 'put ''Z2hhIiwiUGhhbGd1bmEiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIs''@;'; put 'put ''IlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIlNha2EiXSwic2hvcnQiOlsiU2FrYSJdLCJsb25nIjpbIlNha2EiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImlzbGFtaWMiOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwi''@;'; put 'put ''MiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiXSwic2hvcnQiOlsiTXVoLiIsIlNhZi4iLCJSYWIuIEkiLCJSYWIuIElJIiwiSnVtLiBJIiwiSnVtLiBJSSIsIlJhai4iLCJTaGEuIiwiUmFtLiIsIlNoYXcuIiwiRGh1XHUwMmJibC1RLiIsIkRodVx1MDJiYmwt''@;'; put 'put ''SC4iXSwibG9uZyI6WyJNdWhhcnJhbSIsIlNhZmFyIiwiUmFiaVx1MDJiYiBJIiwiUmFiaVx1MDJiYiBJSSIsIkp1bWFkYSBJIiwiSnVtYWRhIElJIiwiUmFqYWIiLCJTaGFcdTAyYmJiYW4iLCJSYW1hZGFuIiwiU2hhd3dhbCIsIkRodVx1MDJiYmwtUWlcdTAyYmJkYWgiLCJEaHVcdTAyYmJs''@;'; put 'put ''LUhpamphaCJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNk''@;'; put 'put ''YXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiQUgiXSwic2hvcnQiOlsiQUgiXSwibG9uZyI6WyJBSCJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiaXNsYW1pY2MiOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMiLCI0Iiwi''@;'; put 'put ''NSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiXSwic2hvcnQiOlsiTXVoLiIsIlNhZi4iLCJSYWIuIEkiLCJSYWIuIElJIiwiSnVtLiBJIiwiSnVtLiBJSSIsIlJhai4iLCJTaGEuIiwiUmFtLiIsIlNoYXcuIiwiRGh1XHUwMmJibC1RLiIsIkRodVx1MDJiYmwtSC4iXSwibG9uZyI6''@;'; put 'put ''WyJNdWhhcnJhbSIsIlNhZmFyIiwiUmFiaVx1MDJiYiBJIiwiUmFiaVx1MDJiYiBJSSIsIkp1bWFkYSBJIiwiSnVtYWRhIElJIiwiUmFqYWIiLCJTaGFcdTAyYmJiYW4iLCJSYW1hZGFuIiwiU2hhd3dhbCIsIkRodVx1MDJiYmwtUWlcdTAyYmJkYWgiLCJEaHVcdTAyYmJsLUhpamphaCJdfSwi''@;'; put 'put ''ZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXki''@;'; put 'put ''LCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiQUgiXSwic2hvcnQiOlsiQUgiXSwibG9uZyI6WyJBSCJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiamFwYW5lc2UiOnsibW9udGhzIjp7Im5hcnJvdyI6WyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwi''@;'; put 'put ''QSIsIlMiLCJPIiwiTiIsIkQiXSwic2hvcnQiOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sImxvbmciOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5''@;'; put 'put ''IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsi''@;'; put 'put ''U3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIlRhaWthICg2NDVcdTIwMTM2NTApIiwiSGFrdWNoaSAoNjUwXHUyMDEzNjcxKSIsIkhha3VoXHUwMTRkICg2NzJcdTIwMTM2ODYp''@;'; put 'put ''IiwiU2h1Y2hcdTAxNGQgKDY4Nlx1MjAxMzcwMSkiLCJUYWloXHUwMTRkICg3MDFcdTIwMTM3MDQpIiwiS2VpdW4gKDcwNFx1MjAxMzcwOCkiLCJXYWRcdTAxNGQgKDcwOFx1MjAxMzcxNSkiLCJSZWlraSAoNzE1XHUyMDEzNzE3KSIsIllcdTAxNGRyXHUwMTRkICg3MTdcdTIwMTM3MjQpIiwi''@;'; put 'put ''Smlua2kgKDcyNFx1MjAxMzcyOSkiLCJUZW5weVx1MDE0ZCAoNzI5XHUyMDEzNzQ5KSIsIlRlbnB5XHUwMTRkLWthbXBcdTAxNGQgKDc0OS03NDkpIiwiVGVucHlcdTAxNGQtc2hcdTAxNGRoXHUwMTRkICg3NDktNzU3KSIsIlRlbnB5XHUwMTRkLWhcdTAxNGRqaSAoNzU3LTc2NSkiLCJUZW5w''@;'; put 'put ''eVx1MDE0ZC1qaW5nbyAoNzY1LTc2NykiLCJKaW5nby1rZWl1biAoNzY3LTc3MCkiLCJIXHUwMTRka2kgKDc3MFx1MjAxMzc4MCkiLCJUZW4tXHUwMTRkICg3ODEtNzgyKSIsIkVucnlha3UgKDc4Mlx1MjAxMzgwNikiLCJEYWlkXHUwMTRkICg4MDZcdTIwMTM4MTApIiwiS1x1MDE0ZG5pbiAo''@;'; put 'put ''ODEwXHUyMDEzODI0KSIsIlRlbmNoXHUwMTRkICg4MjRcdTIwMTM4MzQpIiwiSlx1MDE0ZHdhICg4MzRcdTIwMTM4NDgpIiwiS2FqXHUwMTRkICg4NDhcdTIwMTM4NTEpIiwiTmluanUgKDg1MVx1MjAxMzg1NCkiLCJTYWlrXHUwMTRkICg4NTRcdTIwMTM4NTcpIiwiVGVuLWFuICg4NTctODU5''@;'; put 'put ''KSIsIkpcdTAxNGRnYW4gKDg1OVx1MjAxMzg3NykiLCJHYW5neVx1MDE0ZCAoODc3XHUyMDEzODg1KSIsIk5pbm5hICg4ODVcdTIwMTM4ODkpIiwiS2FucHlcdTAxNGQgKDg4OVx1MjAxMzg5OCkiLCJTaFx1MDE0ZHRhaSAoODk4XHUyMDEzOTAxKSIsIkVuZ2kgKDkwMVx1MjAxMzkyMykiLCJF''@;'; put 'put ''bmNoXHUwMTRkICg5MjNcdTIwMTM5MzEpIiwiSlx1MDE0ZGhlaSAoOTMxXHUyMDEzOTM4KSIsIlRlbmd5XHUwMTRkICg5MzhcdTIwMTM5NDcpIiwiVGVucnlha3UgKDk0N1x1MjAxMzk1NykiLCJUZW50b2t1ICg5NTdcdTIwMTM5NjEpIiwiXHUwMTRjd2EgKDk2MVx1MjAxMzk2NCkiLCJLXHUw''@;'; put 'put ''MTRkaFx1MDE0ZCAoOTY0XHUyMDEzOTY4KSIsIkFubmEgKDk2OFx1MjAxMzk3MCkiLCJUZW5yb2t1ICg5NzBcdTIwMTM5NzMpIiwiVGVuXHUyMDE5ZW4gKDk3M1x1MjAxMzk3NikiLCJKXHUwMTRkZ2VuICg5NzZcdTIwMTM5NzgpIiwiVGVuZ2VuICg5NzhcdTIwMTM5ODMpIiwiRWlrYW4gKDk4''@;'; put 'put ''M1x1MjAxMzk4NSkiLCJLYW5uYSAoOTg1XHUyMDEzOTg3KSIsIkVpZW4gKDk4N1x1MjAxMzk4OSkiLCJFaXNvICg5ODlcdTIwMTM5OTApIiwiU2hcdTAxNGRyeWFrdSAoOTkwXHUyMDEzOTk1KSIsIkNoXHUwMTRkdG9rdSAoOTk1XHUyMDEzOTk5KSIsIkNoXHUwMTRkaFx1MDE0ZCAoOTk5XHUy''@;'; put 'put ''MDEzMTAwNCkiLCJLYW5rXHUwMTRkICgxMDA0XHUyMDEzMTAxMikiLCJDaFx1MDE0ZHdhICgxMDEyXHUyMDEzMTAxNykiLCJLYW5uaW4gKDEwMTdcdTIwMTMxMDIxKSIsIkppYW4gKDEwMjFcdTIwMTMxMDI0KSIsIk1hbmp1ICgxMDI0XHUyMDEzMTAyOCkiLCJDaFx1MDE0ZGdlbiAoMTAyOFx1''@;'; put 'put ''MjAxMzEwMzcpIiwiQ2hcdTAxNGRyeWFrdSAoMTAzN1x1MjAxMzEwNDApIiwiQ2hcdTAxNGRreVx1MDE2YiAoMTA0MFx1MjAxMzEwNDQpIiwiS2FudG9rdSAoMTA0NFx1MjAxMzEwNDYpIiwiRWlzaFx1MDE0ZCAoMTA0Nlx1MjAxMzEwNTMpIiwiVGVuZ2kgKDEwNTNcdTIwMTMxMDU4KSIsIktc''@;'; put 'put ''dTAxNGRoZWkgKDEwNThcdTIwMTMxMDY1KSIsIkppcnlha3UgKDEwNjVcdTIwMTMxMDY5KSIsIkVua3lcdTAxNmIgKDEwNjlcdTIwMTMxMDc0KSIsIlNoXHUwMTRkaG8gKDEwNzRcdTIwMTMxMDc3KSIsIlNoXHUwMTRkcnlha3UgKDEwNzdcdTIwMTMxMDgxKSIsIkVpaFx1MDE0ZCAoMTA4MVx1''@;'; put 'put ''MjAxMzEwODQpIiwiXHUwMTRjdG9rdSAoMTA4NFx1MjAxMzEwODcpIiwiS2FuamkgKDEwODdcdTIwMTMxMDk0KSIsIkthaFx1MDE0ZCAoMTA5NFx1MjAxMzEwOTYpIiwiRWljaFx1MDE0ZCAoMTA5Nlx1MjAxMzEwOTcpIiwiSlx1MDE0ZHRva3UgKDEwOTdcdTIwMTMxMDk5KSIsIktcdTAxNGR3''@;'; put 'put ''YSAoMTA5OVx1MjAxMzExMDQpIiwiQ2hcdTAxNGRqaSAoMTEwNFx1MjAxMzExMDYpIiwiS2FzaFx1MDE0ZCAoMTEwNlx1MjAxMzExMDgpIiwiVGVubmluICgxMTA4XHUyMDEzMTExMCkiLCJUZW4tZWkgKDExMTAtMTExMykiLCJFaWt5XHUwMTZiICgxMTEzXHUyMDEzMTExOCkiLCJHZW5cdTIw''@;'; put 'put ''MTllaSAoMTExOFx1MjAxMzExMjApIiwiSFx1MDE0ZGFuICgxMTIwXHUyMDEzMTEyNCkiLCJUZW5qaSAoMTEyNFx1MjAxMzExMjYpIiwiRGFpamkgKDExMjZcdTIwMTMxMTMxKSIsIlRlbnNoXHUwMTRkICgxMTMxXHUyMDEzMTEzMikiLCJDaFx1MDE0ZHNoXHUwMTRkICgxMTMyXHUyMDEzMTEz''@;'; put 'put ''NSkiLCJIXHUwMTRkZW4gKDExMzVcdTIwMTMxMTQxKSIsIkVpamkgKDExNDFcdTIwMTMxMTQyKSIsIktcdTAxNGRqaSAoMTE0Mlx1MjAxMzExNDQpIiwiVGVuXHUyMDE5eVx1MDE0ZCAoMTE0NFx1MjAxMzExNDUpIiwiS3lcdTAxNmJhbiAoMTE0NVx1MjAxMzExNTEpIiwiTmlucGVpICgxMTUx''@;'; put 'put ''XHUyMDEzMTE1NCkiLCJLeVx1MDE2Ymp1ICgxMTU0XHUyMDEzMTE1NikiLCJIXHUwMTRkZ2VuICgxMTU2XHUyMDEzMTE1OSkiLCJIZWlqaSAoMTE1OVx1MjAxMzExNjApIiwiRWlyeWFrdSAoMTE2MFx1MjAxMzExNjEpIiwiXHUwMTRjaG8gKDExNjFcdTIwMTMxMTYzKSIsIkNoXHUwMTRka2Fu''@;'; put 'put ''ICgxMTYzXHUyMDEzMTE2NSkiLCJFaW1hbiAoMTE2NVx1MjAxMzExNjYpIiwiTmluXHUyMDE5YW4gKDExNjZcdTIwMTMxMTY5KSIsIkthXHUwMTRkICgxMTY5XHUyMDEzMTE3MSkiLCJTaFx1MDE0ZGFuICgxMTcxXHUyMDEzMTE3NSkiLCJBbmdlbiAoMTE3NVx1MjAxMzExNzcpIiwiSmlzaFx1''@;'; put 'put ''MDE0ZCAoMTE3N1x1MjAxMzExODEpIiwiWVx1MDE0ZHdhICgxMTgxXHUyMDEzMTE4MikiLCJKdWVpICgxMTgyXHUyMDEzMTE4NCkiLCJHZW5yeWFrdSAoMTE4NFx1MjAxMzExODUpIiwiQnVuamkgKDExODVcdTIwMTMxMTkwKSIsIktlbmt5XHUwMTZiICgxMTkwXHUyMDEzMTE5OSkiLCJTaFx1''@;'; put 'put ''MDE0ZGppICgxMTk5XHUyMDEzMTIwMSkiLCJLZW5uaW4gKDEyMDFcdTIwMTMxMjA0KSIsIkdlbmt5XHUwMTZiICgxMjA0XHUyMDEzMTIwNikiLCJLZW5cdTIwMTllaSAoMTIwNlx1MjAxMzEyMDcpIiwiSlx1MDE0ZGdlbiAoMTIwN1x1MjAxMzEyMTEpIiwiS2Vucnlha3UgKDEyMTFcdTIwMTMx''@;'; put 'put ''MjEzKSIsIktlbnBcdTAxNGQgKDEyMTNcdTIwMTMxMjE5KSIsIkpcdTAxNGRreVx1MDE2YiAoMTIxOVx1MjAxMzEyMjIpIiwiSlx1MDE0ZFx1MDE0ZCAoMTIyMlx1MjAxMzEyMjQpIiwiR2VubmluICgxMjI0XHUyMDEzMTIyNSkiLCJLYXJva3UgKDEyMjVcdTIwMTMxMjI3KSIsIkFudGVpICgx''@;'; put 'put ''MjI3XHUyMDEzMTIyOSkiLCJLYW5raSAoMTIyOVx1MjAxMzEyMzIpIiwiSlx1MDE0ZGVpICgxMjMyXHUyMDEzMTIzMykiLCJUZW5wdWt1ICgxMjMzXHUyMDEzMTIzNCkiLCJCdW5yeWFrdSAoMTIzNFx1MjAxMzEyMzUpIiwiS2F0ZWkgKDEyMzVcdTIwMTMxMjM4KSIsIlJ5YWt1bmluICgxMjM4''@;'; put 'put ''XHUyMDEzMTIzOSkiLCJFblx1MjAxOVx1MDE0ZCAoMTIzOVx1MjAxMzEyNDApIiwiTmluamkgKDEyNDBcdTIwMTMxMjQzKSIsIkthbmdlbiAoMTI0M1x1MjAxMzEyNDcpIiwiSFx1MDE0ZGppICgxMjQ3XHUyMDEzMTI0OSkiLCJLZW5jaFx1MDE0ZCAoMTI0OVx1MjAxMzEyNTYpIiwiS1x1MDE0''@;'; put 'put ''ZGdlbiAoMTI1Nlx1MjAxMzEyNTcpIiwiU2hcdTAxNGRrYSAoMTI1N1x1MjAxMzEyNTkpIiwiU2hcdTAxNGRnZW4gKDEyNTlcdTIwMTMxMjYwKSIsIkJ1blx1MjAxOVx1MDE0ZCAoMTI2MFx1MjAxMzEyNjEpIiwiS1x1MDE0ZGNoXHUwMTRkICgxMjYxXHUyMDEzMTI2NCkiLCJCdW5cdTIwMTll''@;'; put 'put ''aSAoMTI2NFx1MjAxMzEyNzUpIiwiS2VuamkgKDEyNzVcdTIwMTMxMjc4KSIsIktcdTAxNGRhbiAoMTI3OFx1MjAxMzEyODgpIiwiU2hcdTAxNGRcdTAxNGQgKDEyODhcdTIwMTMxMjkzKSIsIkVpbmluICgxMjkzXHUyMDEzMTI5OSkiLCJTaFx1MDE0ZGFuICgxMjk5XHUyMDEzMTMwMikiLCJL''@;'; put 'put ''ZW5nZW4gKDEzMDJcdTIwMTMxMzAzKSIsIkthZ2VuICgxMzAzXHUyMDEzMTMwNikiLCJUb2t1amkgKDEzMDZcdTIwMTMxMzA4KSIsIkVua3lcdTAxNGQgKDEzMDhcdTIwMTMxMzExKSIsIlx1MDE0Y2NoXHUwMTRkICgxMzExXHUyMDEzMTMxMikiLCJTaFx1MDE0ZHdhICgxMzEyXHUyMDEzMTMx''@;'; put 'put ''NykiLCJCdW5wXHUwMTRkICgxMzE3XHUyMDEzMTMxOSkiLCJHZW5cdTAxNGQgKDEzMTlcdTIwMTMxMzIxKSIsIkdlbmtcdTAxNGQgKDEzMjFcdTIwMTMxMzI0KSIsIlNoXHUwMTRkY2hcdTAxNmIgKDEzMjRcdTIwMTMxMzI2KSIsIkthcnlha3UgKDEzMjZcdTIwMTMxMzI5KSIsIkdlbnRva3Ug''@;'; put 'put ''KDEzMjlcdTIwMTMxMzMxKSIsIkdlbmtcdTAxNGQgKDEzMzFcdTIwMTMxMzM0KSIsIktlbm11ICgxMzM0XHUyMDEzMTMzNikiLCJFbmdlbiAoMTMzNlx1MjAxMzEzNDApIiwiS1x1MDE0ZGtva3UgKDEzNDBcdTIwMTMxMzQ2KSIsIlNoXHUwMTRkaGVpICgxMzQ2XHUyMDEzMTM3MCkiLCJLZW50''@;'; put 'put ''b2t1ICgxMzcwXHUyMDEzMTM3MikiLCJCdW5jaFx1MDE2YiAoMTM3Mlx1MjAxMzEzNzUpIiwiVGVuanUgKDEzNzVcdTIwMTMxMzc5KSIsIktcdTAxNGRyeWFrdSAoMTM3OVx1MjAxMzEzODEpIiwiS1x1MDE0ZHdhICgxMzgxXHUyMDEzMTM4NCkiLCJHZW5jaFx1MDE2YiAoMTM4NFx1MjAxMzEz''@;'; put 'put ''OTIpIiwiTWVpdG9rdSAoMTM4NFx1MjAxMzEzODcpIiwiS2FrZWkgKDEzODdcdTIwMTMxMzg5KSIsIktcdTAxNGRcdTAxNGQgKDEzODlcdTIwMTMxMzkwKSIsIk1laXRva3UgKDEzOTBcdTIwMTMxMzk0KSIsIlx1MDE0Y2VpICgxMzk0XHUyMDEzMTQyOCkiLCJTaFx1MDE0ZGNoXHUwMTRkICgx''@;'; put 'put ''NDI4XHUyMDEzMTQyOSkiLCJFaWt5XHUwMTRkICgxNDI5XHUyMDEzMTQ0MSkiLCJLYWtpdHN1ICgxNDQxXHUyMDEzMTQ0NCkiLCJCdW5cdTIwMTlhbiAoMTQ0NFx1MjAxMzE0NDkpIiwiSFx1MDE0ZHRva3UgKDE0NDlcdTIwMTMxNDUyKSIsIkt5XHUwMTRkdG9rdSAoMTQ1Mlx1MjAxMzE0NTUp''@;'; put 'put ''IiwiS1x1MDE0ZHNoXHUwMTRkICgxNDU1XHUyMDEzMTQ1NykiLCJDaFx1MDE0ZHJva3UgKDE0NTdcdTIwMTMxNDYwKSIsIkthbnNoXHUwMTRkICgxNDYwXHUyMDEzMTQ2NikiLCJCdW5zaFx1MDE0ZCAoMTQ2Nlx1MjAxMzE0NjcpIiwiXHUwMTRjbmluICgxNDY3XHUyMDEzMTQ2OSkiLCJCdW5t''@;'; put 'put ''ZWkgKDE0NjlcdTIwMTMxNDg3KSIsIkNoXHUwMTRka3lcdTAxNGQgKDE0ODdcdTIwMTMxNDg5KSIsIkVudG9rdSAoMTQ4OVx1MjAxMzE0OTIpIiwiTWVpXHUwMTRkICgxNDkyXHUyMDEzMTUwMSkiLCJCdW5raSAoMTUwMVx1MjAxMzE1MDQpIiwiRWlzaFx1MDE0ZCAoMTUwNFx1MjAxMzE1MjEp''@;'; put 'put ''IiwiVGFpZWkgKDE1MjFcdTIwMTMxNTI4KSIsIkt5XHUwMTRkcm9rdSAoMTUyOFx1MjAxMzE1MzIpIiwiVGVuYnVuICgxNTMyXHUyMDEzMTU1NSkiLCJLXHUwMTRkamkgKDE1NTVcdTIwMTMxNTU4KSIsIkVpcm9rdSAoMTU1OFx1MjAxMzE1NzApIiwiR2Vua2kgKDE1NzBcdTIwMTMxNTczKSIs''@;'; put 'put ''IlRlbnNoXHUwMTRkICgxNTczXHUyMDEzMTU5MikiLCJCdW5yb2t1ICgxNTkyXHUyMDEzMTU5NikiLCJLZWljaFx1MDE0ZCAoMTU5Nlx1MjAxMzE2MTUpIiwiR2VubmEgKDE2MTVcdTIwMTMxNjI0KSIsIkthblx1MjAxOWVpICgxNjI0XHUyMDEzMTY0NCkiLCJTaFx1MDE0ZGhvICgxNjQ0XHUy''@;'; put 'put ''MDEzMTY0OCkiLCJLZWlhbiAoMTY0OFx1MjAxMzE2NTIpIiwiSlx1MDE0ZFx1MDE0ZCAoMTY1Mlx1MjAxMzE2NTUpIiwiTWVpcmVraSAoMTY1NVx1MjAxMzE2NTgpIiwiTWFuamkgKDE2NThcdTIwMTMxNjYxKSIsIkthbmJ1biAoMTY2MVx1MjAxMzE2NzMpIiwiRW5wXHUwMTRkICgxNjczXHUy''@;'; put 'put ''MDEzMTY4MSkiLCJUZW5uYSAoMTY4MVx1MjAxMzE2ODQpIiwiSlx1MDE0ZGt5XHUwMTRkICgxNjg0XHUyMDEzMTY4OCkiLCJHZW5yb2t1ICgxNjg4XHUyMDEzMTcwNCkiLCJIXHUwMTRkZWkgKDE3MDRcdTIwMTMxNzExKSIsIlNoXHUwMTRkdG9rdSAoMTcxMVx1MjAxMzE3MTYpIiwiS3lcdTAx''@;'; put 'put ''NGRoXHUwMTRkICgxNzE2XHUyMDEzMTczNikiLCJHZW5idW4gKDE3MzZcdTIwMTMxNzQxKSIsIkthbnBcdTAxNGQgKDE3NDFcdTIwMTMxNzQ0KSIsIkVua3lcdTAxNGQgKDE3NDRcdTIwMTMxNzQ4KSIsIkthblx1MjAxOWVuICgxNzQ4XHUyMDEzMTc1MSkiLCJIXHUwMTRkcmVraSAoMTc1MVx1''@;'; put 'put ''MjAxMzE3NjQpIiwiTWVpd2EgKDE3NjRcdTIwMTMxNzcyKSIsIkFuXHUyMDE5ZWkgKDE3NzJcdTIwMTMxNzgxKSIsIlRlbm1laSAoMTc4MVx1MjAxMzE3ODkpIiwiS2Fuc2VpICgxNzg5XHUyMDEzMTgwMSkiLCJLeVx1MDE0ZHdhICgxODAxXHUyMDEzMTgwNCkiLCJCdW5rYSAoMTgwNFx1MjAx''@;'; put 'put ''MzE4MTgpIiwiQnVuc2VpICgxODE4XHUyMDEzMTgzMCkiLCJUZW5wXHUwMTRkICgxODMwXHUyMDEzMTg0NCkiLCJLXHUwMTRka2EgKDE4NDRcdTIwMTMxODQ4KSIsIkthZWkgKDE4NDhcdTIwMTMxODU0KSIsIkFuc2VpICgxODU0XHUyMDEzMTg2MCkiLCJNYW5cdTIwMTllbiAoMTg2MFx1MjAx''@;'; put 'put ''MzE4NjEpIiwiQnVua3lcdTAxNmIgKDE4NjFcdTIwMTMxODY0KSIsIkdlbmppICgxODY0XHUyMDEzMTg2NSkiLCJLZWlcdTAxNGQgKDE4NjVcdTIwMTMxODY4KSIsIk0iLCJUIiwiUyIsIkgiXSwic2hvcnQiOlsiVGFpa2EgKDY0NVx1MjAxMzY1MCkiLCJIYWt1Y2hpICg2NTBcdTIwMTM2NzEp''@;'; put 'put ''IiwiSGFrdWhcdTAxNGQgKDY3Mlx1MjAxMzY4NikiLCJTaHVjaFx1MDE0ZCAoNjg2XHUyMDEzNzAxKSIsIlRhaWhcdTAxNGQgKDcwMVx1MjAxMzcwNCkiLCJLZWl1biAoNzA0XHUyMDEzNzA4KSIsIldhZFx1MDE0ZCAoNzA4XHUyMDEzNzE1KSIsIlJlaWtpICg3MTVcdTIwMTM3MTcpIiwiWVx1''@;'; put 'put ''MDE0ZHJcdTAxNGQgKDcxN1x1MjAxMzcyNCkiLCJKaW5raSAoNzI0XHUyMDEzNzI5KSIsIlRlbnB5XHUwMTRkICg3MjlcdTIwMTM3NDkpIiwiVGVucHlcdTAxNGQta2FtcFx1MDE0ZCAoNzQ5LTc0OSkiLCJUZW5weVx1MDE0ZC1zaFx1MDE0ZGhcdTAxNGQgKDc0OS03NTcpIiwiVGVucHlcdTAx''@;'; put 'put ''NGQtaFx1MDE0ZGppICg3NTctNzY1KSIsIlRlbnB5XHUwMTRkLWppbmdvICg3NjUtNzY3KSIsIkppbmdvLWtlaXVuICg3NjctNzcwKSIsIkhcdTAxNGRraSAoNzcwXHUyMDEzNzgwKSIsIlRlbi1cdTAxNGQgKDc4MS03ODIpIiwiRW5yeWFrdSAoNzgyXHUyMDEzODA2KSIsIkRhaWRcdTAxNGQg''@;'; put 'put ''KDgwNlx1MjAxMzgxMCkiLCJLXHUwMTRkbmluICg4MTBcdTIwMTM4MjQpIiwiVGVuY2hcdTAxNGQgKDgyNFx1MjAxMzgzNCkiLCJKXHUwMTRkd2EgKDgzNFx1MjAxMzg0OCkiLCJLYWpcdTAxNGQgKDg0OFx1MjAxMzg1MSkiLCJOaW5qdSAoODUxXHUyMDEzODU0KSIsIlNhaWtcdTAxNGQgKDg1''@;'; put 'put ''NFx1MjAxMzg1NykiLCJUZW4tYW4gKDg1Ny04NTkpIiwiSlx1MDE0ZGdhbiAoODU5XHUyMDEzODc3KSIsIkdhbmd5XHUwMTRkICg4NzdcdTIwMTM4ODUpIiwiTmlubmEgKDg4NVx1MjAxMzg4OSkiLCJLYW5weVx1MDE0ZCAoODg5XHUyMDEzODk4KSIsIlNoXHUwMTRkdGFpICg4OThcdTIwMTM5''@;'; put 'put ''MDEpIiwiRW5naSAoOTAxXHUyMDEzOTIzKSIsIkVuY2hcdTAxNGQgKDkyM1x1MjAxMzkzMSkiLCJKXHUwMTRkaGVpICg5MzFcdTIwMTM5MzgpIiwiVGVuZ3lcdTAxNGQgKDkzOFx1MjAxMzk0NykiLCJUZW5yeWFrdSAoOTQ3XHUyMDEzOTU3KSIsIlRlbnRva3UgKDk1N1x1MjAxMzk2MSkiLCJc''@;'; put 'put ''dTAxNGN3YSAoOTYxXHUyMDEzOTY0KSIsIktcdTAxNGRoXHUwMTRkICg5NjRcdTIwMTM5NjgpIiwiQW5uYSAoOTY4XHUyMDEzOTcwKSIsIlRlbnJva3UgKDk3MFx1MjAxMzk3MykiLCJUZW5cdTIwMTllbiAoOTczXHUyMDEzOTc2KSIsIkpcdTAxNGRnZW4gKDk3Nlx1MjAxMzk3OCkiLCJUZW5n''@;'; put 'put ''ZW4gKDk3OFx1MjAxMzk4MykiLCJFaWthbiAoOTgzXHUyMDEzOTg1KSIsIkthbm5hICg5ODVcdTIwMTM5ODcpIiwiRWllbiAoOTg3XHUyMDEzOTg5KSIsIkVpc28gKDk4OVx1MjAxMzk5MCkiLCJTaFx1MDE0ZHJ5YWt1ICg5OTBcdTIwMTM5OTUpIiwiQ2hcdTAxNGR0b2t1ICg5OTVcdTIwMTM5''@;'; put 'put ''OTkpIiwiQ2hcdTAxNGRoXHUwMTRkICg5OTlcdTIwMTMxMDA0KSIsIkthbmtcdTAxNGQgKDEwMDRcdTIwMTMxMDEyKSIsIkNoXHUwMTRkd2EgKDEwMTJcdTIwMTMxMDE3KSIsIkthbm5pbiAoMTAxN1x1MjAxMzEwMjEpIiwiSmlhbiAoMTAyMVx1MjAxMzEwMjQpIiwiTWFuanUgKDEwMjRcdTIw''@;'; put 'put ''MTMxMDI4KSIsIkNoXHUwMTRkZ2VuICgxMDI4XHUyMDEzMTAzNykiLCJDaFx1MDE0ZHJ5YWt1ICgxMDM3XHUyMDEzMTA0MCkiLCJDaFx1MDE0ZGt5XHUwMTZiICgxMDQwXHUyMDEzMTA0NCkiLCJLYW50b2t1ICgxMDQ0XHUyMDEzMTA0NikiLCJFaXNoXHUwMTRkICgxMDQ2XHUyMDEzMTA1Myki''@;'; put 'put ''LCJUZW5naSAoMTA1M1x1MjAxMzEwNTgpIiwiS1x1MDE0ZGhlaSAoMTA1OFx1MjAxMzEwNjUpIiwiSmlyeWFrdSAoMTA2NVx1MjAxMzEwNjkpIiwiRW5reVx1MDE2YiAoMTA2OVx1MjAxMzEwNzQpIiwiU2hcdTAxNGRobyAoMTA3NFx1MjAxMzEwNzcpIiwiU2hcdTAxNGRyeWFrdSAoMTA3N1x1''@;'; put 'put ''MjAxMzEwODEpIiwiRWloXHUwMTRkICgxMDgxXHUyMDEzMTA4NCkiLCJcdTAxNGN0b2t1ICgxMDg0XHUyMDEzMTA4NykiLCJLYW5qaSAoMTA4N1x1MjAxMzEwOTQpIiwiS2FoXHUwMTRkICgxMDk0XHUyMDEzMTA5NikiLCJFaWNoXHUwMTRkICgxMDk2XHUyMDEzMTA5NykiLCJKXHUwMTRkdG9r''@;'; put 'put ''dSAoMTA5N1x1MjAxMzEwOTkpIiwiS1x1MDE0ZHdhICgxMDk5XHUyMDEzMTEwNCkiLCJDaFx1MDE0ZGppICgxMTA0XHUyMDEzMTEwNikiLCJLYXNoXHUwMTRkICgxMTA2XHUyMDEzMTEwOCkiLCJUZW5uaW4gKDExMDhcdTIwMTMxMTEwKSIsIlRlbi1laSAoMTExMC0xMTEzKSIsIkVpa3lcdTAx''@;'; put 'put ''NmIgKDExMTNcdTIwMTMxMTE4KSIsIkdlblx1MjAxOWVpICgxMTE4XHUyMDEzMTEyMCkiLCJIXHUwMTRkYW4gKDExMjBcdTIwMTMxMTI0KSIsIlRlbmppICgxMTI0XHUyMDEzMTEyNikiLCJEYWlqaSAoMTEyNlx1MjAxMzExMzEpIiwiVGVuc2hcdTAxNGQgKDExMzFcdTIwMTMxMTMyKSIsIkNo''@;'; put 'put ''XHUwMTRkc2hcdTAxNGQgKDExMzJcdTIwMTMxMTM1KSIsIkhcdTAxNGRlbiAoMTEzNVx1MjAxMzExNDEpIiwiRWlqaSAoMTE0MVx1MjAxMzExNDIpIiwiS1x1MDE0ZGppICgxMTQyXHUyMDEzMTE0NCkiLCJUZW5cdTIwMTl5XHUwMTRkICgxMTQ0XHUyMDEzMTE0NSkiLCJLeVx1MDE2YmFuICgx''@;'; put 'put ''MTQ1XHUyMDEzMTE1MSkiLCJOaW5wZWkgKDExNTFcdTIwMTMxMTU0KSIsIkt5XHUwMTZianUgKDExNTRcdTIwMTMxMTU2KSIsIkhcdTAxNGRnZW4gKDExNTZcdTIwMTMxMTU5KSIsIkhlaWppICgxMTU5XHUyMDEzMTE2MCkiLCJFaXJ5YWt1ICgxMTYwXHUyMDEzMTE2MSkiLCJcdTAxNGNobyAo''@;'; put 'put ''MTE2MVx1MjAxMzExNjMpIiwiQ2hcdTAxNGRrYW4gKDExNjNcdTIwMTMxMTY1KSIsIkVpbWFuICgxMTY1XHUyMDEzMTE2NikiLCJOaW5cdTIwMTlhbiAoMTE2Nlx1MjAxMzExNjkpIiwiS2FcdTAxNGQgKDExNjlcdTIwMTMxMTcxKSIsIlNoXHUwMTRkYW4gKDExNzFcdTIwMTMxMTc1KSIsIkFu''@;'; put 'put ''Z2VuICgxMTc1XHUyMDEzMTE3NykiLCJKaXNoXHUwMTRkICgxMTc3XHUyMDEzMTE4MSkiLCJZXHUwMTRkd2EgKDExODFcdTIwMTMxMTgyKSIsIkp1ZWkgKDExODJcdTIwMTMxMTg0KSIsIkdlbnJ5YWt1ICgxMTg0XHUyMDEzMTE4NSkiLCJCdW5qaSAoMTE4NVx1MjAxMzExOTApIiwiS2Vua3lc''@;'; put 'put ''dTAxNmIgKDExOTBcdTIwMTMxMTk5KSIsIlNoXHUwMTRkamkgKDExOTlcdTIwMTMxMjAxKSIsIktlbm5pbiAoMTIwMVx1MjAxMzEyMDQpIiwiR2Vua3lcdTAxNmIgKDEyMDRcdTIwMTMxMjA2KSIsIktlblx1MjAxOWVpICgxMjA2XHUyMDEzMTIwNykiLCJKXHUwMTRkZ2VuICgxMjA3XHUyMDEz''@;'; put 'put ''MTIxMSkiLCJLZW5yeWFrdSAoMTIxMVx1MjAxMzEyMTMpIiwiS2VucFx1MDE0ZCAoMTIxM1x1MjAxMzEyMTkpIiwiSlx1MDE0ZGt5XHUwMTZiICgxMjE5XHUyMDEzMTIyMikiLCJKXHUwMTRkXHUwMTRkICgxMjIyXHUyMDEzMTIyNCkiLCJHZW5uaW4gKDEyMjRcdTIwMTMxMjI1KSIsIkthcm9r''@;'; put 'put ''dSAoMTIyNVx1MjAxMzEyMjcpIiwiQW50ZWkgKDEyMjdcdTIwMTMxMjI5KSIsIkthbmtpICgxMjI5XHUyMDEzMTIzMikiLCJKXHUwMTRkZWkgKDEyMzJcdTIwMTMxMjMzKSIsIlRlbnB1a3UgKDEyMzNcdTIwMTMxMjM0KSIsIkJ1bnJ5YWt1ICgxMjM0XHUyMDEzMTIzNSkiLCJLYXRlaSAoMTIz''@;'; put 'put ''NVx1MjAxMzEyMzgpIiwiUnlha3VuaW4gKDEyMzhcdTIwMTMxMjM5KSIsIkVuXHUyMDE5XHUwMTRkICgxMjM5XHUyMDEzMTI0MCkiLCJOaW5qaSAoMTI0MFx1MjAxMzEyNDMpIiwiS2FuZ2VuICgxMjQzXHUyMDEzMTI0NykiLCJIXHUwMTRkamkgKDEyNDdcdTIwMTMxMjQ5KSIsIktlbmNoXHUw''@;'; put 'put ''MTRkICgxMjQ5XHUyMDEzMTI1NikiLCJLXHUwMTRkZ2VuICgxMjU2XHUyMDEzMTI1NykiLCJTaFx1MDE0ZGthICgxMjU3XHUyMDEzMTI1OSkiLCJTaFx1MDE0ZGdlbiAoMTI1OVx1MjAxMzEyNjApIiwiQnVuXHUyMDE5XHUwMTRkICgxMjYwXHUyMDEzMTI2MSkiLCJLXHUwMTRkY2hcdTAxNGQg''@;'; put 'put ''KDEyNjFcdTIwMTMxMjY0KSIsIkJ1blx1MjAxOWVpICgxMjY0XHUyMDEzMTI3NSkiLCJLZW5qaSAoMTI3NVx1MjAxMzEyNzgpIiwiS1x1MDE0ZGFuICgxMjc4XHUyMDEzMTI4OCkiLCJTaFx1MDE0ZFx1MDE0ZCAoMTI4OFx1MjAxMzEyOTMpIiwiRWluaW4gKDEyOTNcdTIwMTMxMjk5KSIsIlNo''@;'; put 'put ''XHUwMTRkYW4gKDEyOTlcdTIwMTMxMzAyKSIsIktlbmdlbiAoMTMwMlx1MjAxMzEzMDMpIiwiS2FnZW4gKDEzMDNcdTIwMTMxMzA2KSIsIlRva3VqaSAoMTMwNlx1MjAxMzEzMDgpIiwiRW5reVx1MDE0ZCAoMTMwOFx1MjAxMzEzMTEpIiwiXHUwMTRjY2hcdTAxNGQgKDEzMTFcdTIwMTMxMzEy''@;'; put 'put ''KSIsIlNoXHUwMTRkd2EgKDEzMTJcdTIwMTMxMzE3KSIsIkJ1bnBcdTAxNGQgKDEzMTdcdTIwMTMxMzE5KSIsIkdlblx1MDE0ZCAoMTMxOVx1MjAxMzEzMjEpIiwiR2Vua1x1MDE0ZCAoMTMyMVx1MjAxMzEzMjQpIiwiU2hcdTAxNGRjaFx1MDE2YiAoMTMyNFx1MjAxMzEzMjYpIiwiS2FyeWFr''@;'; put 'put ''dSAoMTMyNlx1MjAxMzEzMjkpIiwiR2VudG9rdSAoMTMyOVx1MjAxMzEzMzEpIiwiR2Vua1x1MDE0ZCAoMTMzMVx1MjAxMzEzMzQpIiwiS2VubXUgKDEzMzRcdTIwMTMxMzM2KSIsIkVuZ2VuICgxMzM2XHUyMDEzMTM0MCkiLCJLXHUwMTRka29rdSAoMTM0MFx1MjAxMzEzNDYpIiwiU2hcdTAx''@;'; put 'put ''NGRoZWkgKDEzNDZcdTIwMTMxMzcwKSIsIktlbnRva3UgKDEzNzBcdTIwMTMxMzcyKSIsIkJ1bmNoXHUwMTZiICgxMzcyXHUyMDEzMTM3NSkiLCJUZW5qdSAoMTM3NVx1MjAxMzEzNzkpIiwiS1x1MDE0ZHJ5YWt1ICgxMzc5XHUyMDEzMTM4MSkiLCJLXHUwMTRkd2EgKDEzODFcdTIwMTMxMzg0''@;'; put 'put ''KSIsIkdlbmNoXHUwMTZiICgxMzg0XHUyMDEzMTM5MikiLCJNZWl0b2t1ICgxMzg0XHUyMDEzMTM4NykiLCJLYWtlaSAoMTM4N1x1MjAxMzEzODkpIiwiS1x1MDE0ZFx1MDE0ZCAoMTM4OVx1MjAxMzEzOTApIiwiTWVpdG9rdSAoMTM5MFx1MjAxMzEzOTQpIiwiXHUwMTRjZWkgKDEzOTRcdTIw''@;'; put 'put ''MTMxNDI4KSIsIlNoXHUwMTRkY2hcdTAxNGQgKDE0MjhcdTIwMTMxNDI5KSIsIkVpa3lcdTAxNGQgKDE0MjlcdTIwMTMxNDQxKSIsIktha2l0c3UgKDE0NDFcdTIwMTMxNDQ0KSIsIkJ1blx1MjAxOWFuICgxNDQ0XHUyMDEzMTQ0OSkiLCJIXHUwMTRkdG9rdSAoMTQ0OVx1MjAxMzE0NTIpIiwi''@;'; put 'put ''S3lcdTAxNGR0b2t1ICgxNDUyXHUyMDEzMTQ1NSkiLCJLXHUwMTRkc2hcdTAxNGQgKDE0NTVcdTIwMTMxNDU3KSIsIkNoXHUwMTRkcm9rdSAoMTQ1N1x1MjAxMzE0NjApIiwiS2Fuc2hcdTAxNGQgKDE0NjBcdTIwMTMxNDY2KSIsIkJ1bnNoXHUwMTRkICgxNDY2XHUyMDEzMTQ2NykiLCJcdTAx''@;'; put 'put ''NGNuaW4gKDE0NjdcdTIwMTMxNDY5KSIsIkJ1bm1laSAoMTQ2OVx1MjAxMzE0ODcpIiwiQ2hcdTAxNGRreVx1MDE0ZCAoMTQ4N1x1MjAxMzE0ODkpIiwiRW50b2t1ICgxNDg5XHUyMDEzMTQ5MikiLCJNZWlcdTAxNGQgKDE0OTJcdTIwMTMxNTAxKSIsIkJ1bmtpICgxNTAxXHUyMDEzMTUwNCki''@;'; put 'put ''LCJFaXNoXHUwMTRkICgxNTA0XHUyMDEzMTUyMSkiLCJUYWllaSAoMTUyMVx1MjAxMzE1MjgpIiwiS3lcdTAxNGRyb2t1ICgxNTI4XHUyMDEzMTUzMikiLCJUZW5idW4gKDE1MzJcdTIwMTMxNTU1KSIsIktcdTAxNGRqaSAoMTU1NVx1MjAxMzE1NTgpIiwiRWlyb2t1ICgxNTU4XHUyMDEzMTU3''@;'; put 'put ''MCkiLCJHZW5raSAoMTU3MFx1MjAxMzE1NzMpIiwiVGVuc2hcdTAxNGQgKDE1NzNcdTIwMTMxNTkyKSIsIkJ1bnJva3UgKDE1OTJcdTIwMTMxNTk2KSIsIktlaWNoXHUwMTRkICgxNTk2XHUyMDEzMTYxNSkiLCJHZW5uYSAoMTYxNVx1MjAxMzE2MjQpIiwiS2FuXHUyMDE5ZWkgKDE2MjRcdTIw''@;'; put 'put ''MTMxNjQ0KSIsIlNoXHUwMTRkaG8gKDE2NDRcdTIwMTMxNjQ4KSIsIktlaWFuICgxNjQ4XHUyMDEzMTY1MikiLCJKXHUwMTRkXHUwMTRkICgxNjUyXHUyMDEzMTY1NSkiLCJNZWlyZWtpICgxNjU1XHUyMDEzMTY1OCkiLCJNYW5qaSAoMTY1OFx1MjAxMzE2NjEpIiwiS2FuYnVuICgxNjYxXHUy''@;'; put 'put ''MDEzMTY3MykiLCJFbnBcdTAxNGQgKDE2NzNcdTIwMTMxNjgxKSIsIlRlbm5hICgxNjgxXHUyMDEzMTY4NCkiLCJKXHUwMTRka3lcdTAxNGQgKDE2ODRcdTIwMTMxNjg4KSIsIkdlbnJva3UgKDE2ODhcdTIwMTMxNzA0KSIsIkhcdTAxNGRlaSAoMTcwNFx1MjAxMzE3MTEpIiwiU2hcdTAxNGR0''@;'; put 'put ''b2t1ICgxNzExXHUyMDEzMTcxNikiLCJLeVx1MDE0ZGhcdTAxNGQgKDE3MTZcdTIwMTMxNzM2KSIsIkdlbmJ1biAoMTczNlx1MjAxMzE3NDEpIiwiS2FucFx1MDE0ZCAoMTc0MVx1MjAxMzE3NDQpIiwiRW5reVx1MDE0ZCAoMTc0NFx1MjAxMzE3NDgpIiwiS2FuXHUyMDE5ZW4gKDE3NDhcdTIw''@;'; put 'put ''MTMxNzUxKSIsIkhcdTAxNGRyZWtpICgxNzUxXHUyMDEzMTc2NCkiLCJNZWl3YSAoMTc2NFx1MjAxMzE3NzIpIiwiQW5cdTIwMTllaSAoMTc3Mlx1MjAxMzE3ODEpIiwiVGVubWVpICgxNzgxXHUyMDEzMTc4OSkiLCJLYW5zZWkgKDE3ODlcdTIwMTMxODAxKSIsIkt5XHUwMTRkd2EgKDE4MDFc''@;'; put 'put ''dTIwMTMxODA0KSIsIkJ1bmthICgxODA0XHUyMDEzMTgxOCkiLCJCdW5zZWkgKDE4MThcdTIwMTMxODMwKSIsIlRlbnBcdTAxNGQgKDE4MzBcdTIwMTMxODQ0KSIsIktcdTAxNGRrYSAoMTg0NFx1MjAxMzE4NDgpIiwiS2FlaSAoMTg0OFx1MjAxMzE4NTQpIiwiQW5zZWkgKDE4NTRcdTIwMTMx''@;'; put 'put ''ODYwKSIsIk1hblx1MjAxOWVuICgxODYwXHUyMDEzMTg2MSkiLCJCdW5reVx1MDE2YiAoMTg2MVx1MjAxMzE4NjQpIiwiR2VuamkgKDE4NjRcdTIwMTMxODY1KSIsIktlaVx1MDE0ZCAoMTg2NVx1MjAxMzE4NjgpIiwiTWVpamkiLCJUYWlzaFx1MDE0ZCIsIlNoXHUwMTRkd2EiLCJIZWlzZWki''@;'; put 'put ''XSwibG9uZyI6WyJUYWlrYSAoNjQ1XHUyMDEzNjUwKSIsIkhha3VjaGkgKDY1MFx1MjAxMzY3MSkiLCJIYWt1aFx1MDE0ZCAoNjcyXHUyMDEzNjg2KSIsIlNodWNoXHUwMTRkICg2ODZcdTIwMTM3MDEpIiwiVGFpaFx1MDE0ZCAoNzAxXHUyMDEzNzA0KSIsIktlaXVuICg3MDRcdTIwMTM3MDgp''@;'; put 'put ''IiwiV2FkXHUwMTRkICg3MDhcdTIwMTM3MTUpIiwiUmVpa2kgKDcxNVx1MjAxMzcxNykiLCJZXHUwMTRkclx1MDE0ZCAoNzE3XHUyMDEzNzI0KSIsIkppbmtpICg3MjRcdTIwMTM3MjkpIiwiVGVucHlcdTAxNGQgKDcyOVx1MjAxMzc0OSkiLCJUZW5weVx1MDE0ZC1rYW1wXHUwMTRkICg3NDkt''@;'; put 'put ''NzQ5KSIsIlRlbnB5XHUwMTRkLXNoXHUwMTRkaFx1MDE0ZCAoNzQ5LTc1NykiLCJUZW5weVx1MDE0ZC1oXHUwMTRkamkgKDc1Ny03NjUpIiwiVGVucHlcdTAxNGQtamluZ28gKDc2NS03NjcpIiwiSmluZ28ta2VpdW4gKDc2Ny03NzApIiwiSFx1MDE0ZGtpICg3NzBcdTIwMTM3ODApIiwiVGVu''@;'; put 'put ''LVx1MDE0ZCAoNzgxLTc4MikiLCJFbnJ5YWt1ICg3ODJcdTIwMTM4MDYpIiwiRGFpZFx1MDE0ZCAoODA2XHUyMDEzODEwKSIsIktcdTAxNGRuaW4gKDgxMFx1MjAxMzgyNCkiLCJUZW5jaFx1MDE0ZCAoODI0XHUyMDEzODM0KSIsIkpcdTAxNGR3YSAoODM0XHUyMDEzODQ4KSIsIkthalx1MDE0''@;'; put 'put ''ZCAoODQ4XHUyMDEzODUxKSIsIk5pbmp1ICg4NTFcdTIwMTM4NTQpIiwiU2Fpa1x1MDE0ZCAoODU0XHUyMDEzODU3KSIsIlRlbi1hbiAoODU3LTg1OSkiLCJKXHUwMTRkZ2FuICg4NTlcdTIwMTM4NzcpIiwiR2FuZ3lcdTAxNGQgKDg3N1x1MjAxMzg4NSkiLCJOaW5uYSAoODg1XHUyMDEzODg5''@;'; put 'put ''KSIsIkthbnB5XHUwMTRkICg4ODlcdTIwMTM4OTgpIiwiU2hcdTAxNGR0YWkgKDg5OFx1MjAxMzkwMSkiLCJFbmdpICg5MDFcdTIwMTM5MjMpIiwiRW5jaFx1MDE0ZCAoOTIzXHUyMDEzOTMxKSIsIkpcdTAxNGRoZWkgKDkzMVx1MjAxMzkzOCkiLCJUZW5neVx1MDE0ZCAoOTM4XHUyMDEzOTQ3''@;'; put 'put ''KSIsIlRlbnJ5YWt1ICg5NDdcdTIwMTM5NTcpIiwiVGVudG9rdSAoOTU3XHUyMDEzOTYxKSIsIlx1MDE0Y3dhICg5NjFcdTIwMTM5NjQpIiwiS1x1MDE0ZGhcdTAxNGQgKDk2NFx1MjAxMzk2OCkiLCJBbm5hICg5NjhcdTIwMTM5NzApIiwiVGVucm9rdSAoOTcwXHUyMDEzOTczKSIsIlRlblx1''@;'; put 'put ''MjAxOWVuICg5NzNcdTIwMTM5NzYpIiwiSlx1MDE0ZGdlbiAoOTc2XHUyMDEzOTc4KSIsIlRlbmdlbiAoOTc4XHUyMDEzOTgzKSIsIkVpa2FuICg5ODNcdTIwMTM5ODUpIiwiS2FubmEgKDk4NVx1MjAxMzk4NykiLCJFaWVuICg5ODdcdTIwMTM5ODkpIiwiRWlzbyAoOTg5XHUyMDEzOTkwKSIs''@;'; put 'put ''IlNoXHUwMTRkcnlha3UgKDk5MFx1MjAxMzk5NSkiLCJDaFx1MDE0ZHRva3UgKDk5NVx1MjAxMzk5OSkiLCJDaFx1MDE0ZGhcdTAxNGQgKDk5OVx1MjAxMzEwMDQpIiwiS2Fua1x1MDE0ZCAoMTAwNFx1MjAxMzEwMTIpIiwiQ2hcdTAxNGR3YSAoMTAxMlx1MjAxMzEwMTcpIiwiS2FubmluICgx''@;'; put 'put ''MDE3XHUyMDEzMTAyMSkiLCJKaWFuICgxMDIxXHUyMDEzMTAyNCkiLCJNYW5qdSAoMTAyNFx1MjAxMzEwMjgpIiwiQ2hcdTAxNGRnZW4gKDEwMjhcdTIwMTMxMDM3KSIsIkNoXHUwMTRkcnlha3UgKDEwMzdcdTIwMTMxMDQwKSIsIkNoXHUwMTRka3lcdTAxNmIgKDEwNDBcdTIwMTMxMDQ0KSIs''@;'; put 'put ''IkthbnRva3UgKDEwNDRcdTIwMTMxMDQ2KSIsIkVpc2hcdTAxNGQgKDEwNDZcdTIwMTMxMDUzKSIsIlRlbmdpICgxMDUzXHUyMDEzMTA1OCkiLCJLXHUwMTRkaGVpICgxMDU4XHUyMDEzMTA2NSkiLCJKaXJ5YWt1ICgxMDY1XHUyMDEzMTA2OSkiLCJFbmt5XHUwMTZiICgxMDY5XHUyMDEzMTA3''@;'; put 'put ''NCkiLCJTaFx1MDE0ZGhvICgxMDc0XHUyMDEzMTA3NykiLCJTaFx1MDE0ZHJ5YWt1ICgxMDc3XHUyMDEzMTA4MSkiLCJFaWhcdTAxNGQgKDEwODFcdTIwMTMxMDg0KSIsIlx1MDE0Y3Rva3UgKDEwODRcdTIwMTMxMDg3KSIsIkthbmppICgxMDg3XHUyMDEzMTA5NCkiLCJLYWhcdTAxNGQgKDEw''@;'; put 'put ''OTRcdTIwMTMxMDk2KSIsIkVpY2hcdTAxNGQgKDEwOTZcdTIwMTMxMDk3KSIsIkpcdTAxNGR0b2t1ICgxMDk3XHUyMDEzMTA5OSkiLCJLXHUwMTRkd2EgKDEwOTlcdTIwMTMxMTA0KSIsIkNoXHUwMTRkamkgKDExMDRcdTIwMTMxMTA2KSIsIkthc2hcdTAxNGQgKDExMDZcdTIwMTMxMTA4KSIs''@;'; put 'put ''IlRlbm5pbiAoMTEwOFx1MjAxMzExMTApIiwiVGVuLWVpICgxMTEwLTExMTMpIiwiRWlreVx1MDE2YiAoMTExM1x1MjAxMzExMTgpIiwiR2VuXHUyMDE5ZWkgKDExMThcdTIwMTMxMTIwKSIsIkhcdTAxNGRhbiAoMTEyMFx1MjAxMzExMjQpIiwiVGVuamkgKDExMjRcdTIwMTMxMTI2KSIsIkRh''@;'; put 'put ''aWppICgxMTI2XHUyMDEzMTEzMSkiLCJUZW5zaFx1MDE0ZCAoMTEzMVx1MjAxMzExMzIpIiwiQ2hcdTAxNGRzaFx1MDE0ZCAoMTEzMlx1MjAxMzExMzUpIiwiSFx1MDE0ZGVuICgxMTM1XHUyMDEzMTE0MSkiLCJFaWppICgxMTQxXHUyMDEzMTE0MikiLCJLXHUwMTRkamkgKDExNDJcdTIwMTMx''@;'; put 'put ''MTQ0KSIsIlRlblx1MjAxOXlcdTAxNGQgKDExNDRcdTIwMTMxMTQ1KSIsIkt5XHUwMTZiYW4gKDExNDVcdTIwMTMxMTUxKSIsIk5pbnBlaSAoMTE1MVx1MjAxMzExNTQpIiwiS3lcdTAxNmJqdSAoMTE1NFx1MjAxMzExNTYpIiwiSFx1MDE0ZGdlbiAoMTE1Nlx1MjAxMzExNTkpIiwiSGVpamkg''@;'; put 'put ''KDExNTlcdTIwMTMxMTYwKSIsIkVpcnlha3UgKDExNjBcdTIwMTMxMTYxKSIsIlx1MDE0Y2hvICgxMTYxXHUyMDEzMTE2MykiLCJDaFx1MDE0ZGthbiAoMTE2M1x1MjAxMzExNjUpIiwiRWltYW4gKDExNjVcdTIwMTMxMTY2KSIsIk5pblx1MjAxOWFuICgxMTY2XHUyMDEzMTE2OSkiLCJLYVx1''@;'; put 'put ''MDE0ZCAoMTE2OVx1MjAxMzExNzEpIiwiU2hcdTAxNGRhbiAoMTE3MVx1MjAxMzExNzUpIiwiQW5nZW4gKDExNzVcdTIwMTMxMTc3KSIsIkppc2hcdTAxNGQgKDExNzdcdTIwMTMxMTgxKSIsIllcdTAxNGR3YSAoMTE4MVx1MjAxMzExODIpIiwiSnVlaSAoMTE4Mlx1MjAxMzExODQpIiwiR2Vu''@;'; put 'put ''cnlha3UgKDExODRcdTIwMTMxMTg1KSIsIkJ1bmppICgxMTg1XHUyMDEzMTE5MCkiLCJLZW5reVx1MDE2YiAoMTE5MFx1MjAxMzExOTkpIiwiU2hcdTAxNGRqaSAoMTE5OVx1MjAxMzEyMDEpIiwiS2VubmluICgxMjAxXHUyMDEzMTIwNCkiLCJHZW5reVx1MDE2YiAoMTIwNFx1MjAxMzEyMDYp''@;'; put 'put ''IiwiS2VuXHUyMDE5ZWkgKDEyMDZcdTIwMTMxMjA3KSIsIkpcdTAxNGRnZW4gKDEyMDdcdTIwMTMxMjExKSIsIktlbnJ5YWt1ICgxMjExXHUyMDEzMTIxMykiLCJLZW5wXHUwMTRkICgxMjEzXHUyMDEzMTIxOSkiLCJKXHUwMTRka3lcdTAxNmIgKDEyMTlcdTIwMTMxMjIyKSIsIkpcdTAxNGRc''@;'; put 'put ''dTAxNGQgKDEyMjJcdTIwMTMxMjI0KSIsIkdlbm5pbiAoMTIyNFx1MjAxMzEyMjUpIiwiS2Fyb2t1ICgxMjI1XHUyMDEzMTIyNykiLCJBbnRlaSAoMTIyN1x1MjAxMzEyMjkpIiwiS2Fua2kgKDEyMjlcdTIwMTMxMjMyKSIsIkpcdTAxNGRlaSAoMTIzMlx1MjAxMzEyMzMpIiwiVGVucHVrdSAo''@;'; put 'put ''MTIzM1x1MjAxMzEyMzQpIiwiQnVucnlha3UgKDEyMzRcdTIwMTMxMjM1KSIsIkthdGVpICgxMjM1XHUyMDEzMTIzOCkiLCJSeWFrdW5pbiAoMTIzOFx1MjAxMzEyMzkpIiwiRW5cdTIwMTlcdTAxNGQgKDEyMzlcdTIwMTMxMjQwKSIsIk5pbmppICgxMjQwXHUyMDEzMTI0MykiLCJLYW5nZW4g''@;'; put 'put ''KDEyNDNcdTIwMTMxMjQ3KSIsIkhcdTAxNGRqaSAoMTI0N1x1MjAxMzEyNDkpIiwiS2VuY2hcdTAxNGQgKDEyNDlcdTIwMTMxMjU2KSIsIktcdTAxNGRnZW4gKDEyNTZcdTIwMTMxMjU3KSIsIlNoXHUwMTRka2EgKDEyNTdcdTIwMTMxMjU5KSIsIlNoXHUwMTRkZ2VuICgxMjU5XHUyMDEzMTI2''@;'; put 'put ''MCkiLCJCdW5cdTIwMTlcdTAxNGQgKDEyNjBcdTIwMTMxMjYxKSIsIktcdTAxNGRjaFx1MDE0ZCAoMTI2MVx1MjAxMzEyNjQpIiwiQnVuXHUyMDE5ZWkgKDEyNjRcdTIwMTMxMjc1KSIsIktlbmppICgxMjc1XHUyMDEzMTI3OCkiLCJLXHUwMTRkYW4gKDEyNzhcdTIwMTMxMjg4KSIsIlNoXHUw''@;'; put 'put ''MTRkXHUwMTRkICgxMjg4XHUyMDEzMTI5MykiLCJFaW5pbiAoMTI5M1x1MjAxMzEyOTkpIiwiU2hcdTAxNGRhbiAoMTI5OVx1MjAxMzEzMDIpIiwiS2VuZ2VuICgxMzAyXHUyMDEzMTMwMykiLCJLYWdlbiAoMTMwM1x1MjAxMzEzMDYpIiwiVG9rdWppICgxMzA2XHUyMDEzMTMwOCkiLCJFbmt5''@;'; put 'put ''XHUwMTRkICgxMzA4XHUyMDEzMTMxMSkiLCJcdTAxNGNjaFx1MDE0ZCAoMTMxMVx1MjAxMzEzMTIpIiwiU2hcdTAxNGR3YSAoMTMxMlx1MjAxMzEzMTcpIiwiQnVucFx1MDE0ZCAoMTMxN1x1MjAxMzEzMTkpIiwiR2VuXHUwMTRkICgxMzE5XHUyMDEzMTMyMSkiLCJHZW5rXHUwMTRkICgxMzIx''@;'; put 'put ''XHUyMDEzMTMyNCkiLCJTaFx1MDE0ZGNoXHUwMTZiICgxMzI0XHUyMDEzMTMyNikiLCJLYXJ5YWt1ICgxMzI2XHUyMDEzMTMyOSkiLCJHZW50b2t1ICgxMzI5XHUyMDEzMTMzMSkiLCJHZW5rXHUwMTRkICgxMzMxXHUyMDEzMTMzNCkiLCJLZW5tdSAoMTMzNFx1MjAxMzEzMzYpIiwiRW5nZW4g''@;'; put 'put ''KDEzMzZcdTIwMTMxMzQwKSIsIktcdTAxNGRrb2t1ICgxMzQwXHUyMDEzMTM0NikiLCJTaFx1MDE0ZGhlaSAoMTM0Nlx1MjAxMzEzNzApIiwiS2VudG9rdSAoMTM3MFx1MjAxMzEzNzIpIiwiQnVuY2hcdTAxNmIgKDEzNzJcdTIwMTMxMzc1KSIsIlRlbmp1ICgxMzc1XHUyMDEzMTM3OSkiLCJL''@;'; put 'put ''XHUwMTRkcnlha3UgKDEzNzlcdTIwMTMxMzgxKSIsIktcdTAxNGR3YSAoMTM4MVx1MjAxMzEzODQpIiwiR2VuY2hcdTAxNmIgKDEzODRcdTIwMTMxMzkyKSIsIk1laXRva3UgKDEzODRcdTIwMTMxMzg3KSIsIktha2VpICgxMzg3XHUyMDEzMTM4OSkiLCJLXHUwMTRkXHUwMTRkICgxMzg5XHUy''@;'; put 'put ''MDEzMTM5MCkiLCJNZWl0b2t1ICgxMzkwXHUyMDEzMTM5NCkiLCJcdTAxNGNlaSAoMTM5NFx1MjAxMzE0MjgpIiwiU2hcdTAxNGRjaFx1MDE0ZCAoMTQyOFx1MjAxMzE0MjkpIiwiRWlreVx1MDE0ZCAoMTQyOVx1MjAxMzE0NDEpIiwiS2FraXRzdSAoMTQ0MVx1MjAxMzE0NDQpIiwiQnVuXHUy''@;'; put 'put ''MDE5YW4gKDE0NDRcdTIwMTMxNDQ5KSIsIkhcdTAxNGR0b2t1ICgxNDQ5XHUyMDEzMTQ1MikiLCJLeVx1MDE0ZHRva3UgKDE0NTJcdTIwMTMxNDU1KSIsIktcdTAxNGRzaFx1MDE0ZCAoMTQ1NVx1MjAxMzE0NTcpIiwiQ2hcdTAxNGRyb2t1ICgxNDU3XHUyMDEzMTQ2MCkiLCJLYW5zaFx1MDE0''@;'; put 'put ''ZCAoMTQ2MFx1MjAxMzE0NjYpIiwiQnVuc2hcdTAxNGQgKDE0NjZcdTIwMTMxNDY3KSIsIlx1MDE0Y25pbiAoMTQ2N1x1MjAxMzE0NjkpIiwiQnVubWVpICgxNDY5XHUyMDEzMTQ4NykiLCJDaFx1MDE0ZGt5XHUwMTRkICgxNDg3XHUyMDEzMTQ4OSkiLCJFbnRva3UgKDE0ODlcdTIwMTMxNDky''@;'; put 'put ''KSIsIk1laVx1MDE0ZCAoMTQ5Mlx1MjAxMzE1MDEpIiwiQnVua2kgKDE1MDFcdTIwMTMxNTA0KSIsIkVpc2hcdTAxNGQgKDE1MDRcdTIwMTMxNTIxKSIsIlRhaWVpICgxNTIxXHUyMDEzMTUyOCkiLCJLeVx1MDE0ZHJva3UgKDE1MjhcdTIwMTMxNTMyKSIsIlRlbmJ1biAoMTUzMlx1MjAxMzE1''@;'; put 'put ''NTUpIiwiS1x1MDE0ZGppICgxNTU1XHUyMDEzMTU1OCkiLCJFaXJva3UgKDE1NThcdTIwMTMxNTcwKSIsIkdlbmtpICgxNTcwXHUyMDEzMTU3MykiLCJUZW5zaFx1MDE0ZCAoMTU3M1x1MjAxMzE1OTIpIiwiQnVucm9rdSAoMTU5Mlx1MjAxMzE1OTYpIiwiS2VpY2hcdTAxNGQgKDE1OTZcdTIw''@;'; put 'put ''MTMxNjE1KSIsIkdlbm5hICgxNjE1XHUyMDEzMTYyNCkiLCJLYW5cdTIwMTllaSAoMTYyNFx1MjAxMzE2NDQpIiwiU2hcdTAxNGRobyAoMTY0NFx1MjAxMzE2NDgpIiwiS2VpYW4gKDE2NDhcdTIwMTMxNjUyKSIsIkpcdTAxNGRcdTAxNGQgKDE2NTJcdTIwMTMxNjU1KSIsIk1laXJla2kgKDE2''@;'; put 'put ''NTVcdTIwMTMxNjU4KSIsIk1hbmppICgxNjU4XHUyMDEzMTY2MSkiLCJLYW5idW4gKDE2NjFcdTIwMTMxNjczKSIsIkVucFx1MDE0ZCAoMTY3M1x1MjAxMzE2ODEpIiwiVGVubmEgKDE2ODFcdTIwMTMxNjg0KSIsIkpcdTAxNGRreVx1MDE0ZCAoMTY4NFx1MjAxMzE2ODgpIiwiR2Vucm9rdSAo''@;'; put 'put ''MTY4OFx1MjAxMzE3MDQpIiwiSFx1MDE0ZGVpICgxNzA0XHUyMDEzMTcxMSkiLCJTaFx1MDE0ZHRva3UgKDE3MTFcdTIwMTMxNzE2KSIsIkt5XHUwMTRkaFx1MDE0ZCAoMTcxNlx1MjAxMzE3MzYpIiwiR2VuYnVuICgxNzM2XHUyMDEzMTc0MSkiLCJLYW5wXHUwMTRkICgxNzQxXHUyMDEzMTc0''@;'; put 'put ''NCkiLCJFbmt5XHUwMTRkICgxNzQ0XHUyMDEzMTc0OCkiLCJLYW5cdTIwMTllbiAoMTc0OFx1MjAxMzE3NTEpIiwiSFx1MDE0ZHJla2kgKDE3NTFcdTIwMTMxNzY0KSIsIk1laXdhICgxNzY0XHUyMDEzMTc3MikiLCJBblx1MjAxOWVpICgxNzcyXHUyMDEzMTc4MSkiLCJUZW5tZWkgKDE3ODFc''@;'; put 'put ''dTIwMTMxNzg5KSIsIkthbnNlaSAoMTc4OVx1MjAxMzE4MDEpIiwiS3lcdTAxNGR3YSAoMTgwMVx1MjAxMzE4MDQpIiwiQnVua2EgKDE4MDRcdTIwMTMxODE4KSIsIkJ1bnNlaSAoMTgxOFx1MjAxMzE4MzApIiwiVGVucFx1MDE0ZCAoMTgzMFx1MjAxMzE4NDQpIiwiS1x1MDE0ZGthICgxODQ0''@;'; put 'put ''XHUyMDEzMTg0OCkiLCJLYWVpICgxODQ4XHUyMDEzMTg1NCkiLCJBbnNlaSAoMTg1NFx1MjAxMzE4NjApIiwiTWFuXHUyMDE5ZW4gKDE4NjBcdTIwMTMxODYxKSIsIkJ1bmt5XHUwMTZiICgxODYxXHUyMDEzMTg2NCkiLCJHZW5qaSAoMTg2NFx1MjAxMzE4NjUpIiwiS2VpXHUwMTRkICgxODY1''@;'; put 'put ''XHUyMDEzMTg2OCkiLCJNZWlqaSIsIlRhaXNoXHUwMTRkIiwiU2hcdTAxNGR3YSIsIkhlaXNlaSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwicGVyc2lhbiI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEw''@;'; put 'put ''IiwiMTEiLCIxMiJdLCJzaG9ydCI6WyJGYXJ2YXJkaW4iLCJPcmRpYmVoZXNodCIsIktob3JkYWQiLCJUaXIiLCJNb3JkYWQiLCJTaGFocml2YXIiLCJNZWhyIiwiQWJhbiIsIkF6YXIiLCJEZXkiLCJCYWhtYW4iLCJFc2ZhbmQiXSwibG9uZyI6WyJGYXJ2YXJkaW4iLCJPcmRpYmVoZXNodCIs''@;'; put 'put ''Iktob3JkYWQiLCJUaXIiLCJNb3JkYWQiLCJTaGFocml2YXIiLCJNZWhyIiwiQWJhbiIsIkF6YXIiLCJEZXkiLCJCYWhtYW4iLCJFc2ZhbmQiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwi''@;'; put 'put ''VGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkFQIl0sInNob3J0IjpbIkFQIl0sImxvbmciOlsiQVAiXX0sImRheVBlcmlvZHMi''@;'; put 'put ''OnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sInJvYyI6eyJtb250aHMiOnsibmFycm93IjpbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLCJzaG9ydCI6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJP''@;'; put 'put ''Y3QiLCJOb3YiLCJEZWMiXSwibG9uZyI6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJU''@;'; put 'put ''IiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJy''@;'; put 'put ''b3ciOlsiQmVmb3JlIFIuTy5DLiIsIk1pbmd1byJdLCJzaG9ydCI6WyJCZWZvcmUgUi5PLkMuIiwiTWluZ3VvIl0sImxvbmciOlsiQmVmb3JlIFIuTy5DLiIsIk1pbmd1byJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fX19LCJudW1iZXIiOnsibnUiOlsibGF0biJdLCJw''@;'; put 'put ''YXR0ZXJucyI6eyJkZWNpbWFsIjp7InBvc2l0aXZlUGF0dGVybiI6IntudW1iZXJ9IiwibmVnYXRpdmVQYXR0ZXJuIjoie21pbnVzU2lnbn17bnVtYmVyfSJ9LCJjdXJyZW5jeSI6eyJwb3NpdGl2ZVBhdHRlcm4iOiJ7Y3VycmVuY3l9e251bWJlcn0iLCJuZWdhdGl2ZVBhdHRlcm4iOiJ7bWlu''@;'; put 'put ''dXNTaWdufXtjdXJyZW5jeX17bnVtYmVyfSJ9LCJwZXJjZW50Ijp7InBvc2l0aXZlUGF0dGVybiI6IntudW1iZXJ9e3BlcmNlbnRTaWdufSIsIm5lZ2F0aXZlUGF0dGVybiI6InttaW51c1NpZ259e251bWJlcn17cGVyY2VudFNpZ259In19LCJzeW1ib2xzIjp7ImxhdG4iOnsiZGVjaW1hbCI6''@;'; put 'put ''Ii4iLCJncm91cCI6IiwiLCJuYW4iOiJOYU4iLCJwbHVzU2lnbiI6IisiLCJtaW51c1NpZ24iOiItIiwicGVyY2VudFNpZ24iOiIlIiwiaW5maW5pdHkiOiJcdTIyMWUifX0sImN1cnJlbmNpZXMiOnsiQVVEIjoiQSQiLCJCUkwiOiJSJCIsIkNBRCI6IkNBJCIsIkNOWSI6IkNOXHhhNSIsIkVV''@;'; put 'put ''UiI6Ilx1MjBhYyIsIkdCUCI6Ilx4YTMiLCJIS0QiOiJISyQiLCJJTFMiOiJcdTIwYWEiLCJJTlIiOiJcdTIwYjkiLCJKUFkiOiJceGE1IiwiS1JXIjoiXHUyMGE5IiwiTVhOIjoiTVgkIiwiTlpEIjoiTlokIiwiVFdEIjoiTlQkIiwiVVNEIjoiJCIsIlZORCI6Ilx1MjBhYiIsIlhBRiI6IkZD''@;'; put 'put ''RkEiLCJYQ0QiOiJFQyQiLCJYT0YiOiJDRkEiLCJYUEYiOiJDRlBGIn19fScpfX0sYz0+e3ZhciBmPW49PmMoYy5zPW4pO2YoMjQwNTApLGYoOTY5MzUpfV0pOw=='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=radio.6061cf04fec6a117-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz48Y2lyY2xlIGN4PSc4JyBjeT0nOCcgcj0nNCcgZmlsbD0nY3VycmVudENvbG9yJy8+PC9zdmc+Cg=='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=runtime.a88824217f6db7cd-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KCgpPT57InVzZSBzdHJpY3QiO3ZhciBlLHY9e30sZz17fTtmdW5jdGlvbiByKGUpe3ZhciBuPWdbZV07aWYodm9pZCAwIT09bilyZXR1cm4gbi5leHBvcnRzO3ZhciB0PWdbZV09e2lkOmUsbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiB2W2VdLmNhbGwodC5leHBvcnRzLHQsdC5leHBv''@;'; put 'put ''cnRzLHIpLHQubG9hZGVkPSEwLHQuZXhwb3J0c31yLm09dixlPVtdLHIuTz0obix0LG8saSk9PntpZighdCl7dmFyIGE9MS8wO2ZvcihmPTA7ZjxlLmxlbmd0aDtmKyspe2Zvcih2YXJbdCxvLGldPWVbZl0scz0hMCxsPTA7bDx0Lmxlbmd0aDtsKyspKCExJml8fGE+PWkpJiZPYmplY3Qua2V5''@;'; put 'put ''cyhyLk8pLmV2ZXJ5KGI9PnIuT1tiXSh0W2xdKSk/dC5zcGxpY2UobC0tLDEpOihzPSExLGk8YSYmKGE9aSkpO2lmKHMpe2Uuc3BsaWNlKGYtLSwxKTt2YXIgYz1vKCk7dm9pZCAwIT09YyYmKG49Yyl9fXJldHVybiBufWk9aXx8MDtmb3IodmFyIGY9ZS5sZW5ndGg7Zj4wJiZlW2YtMV1bMl0+''@;'; put 'put ''aTtmLS0pZVtmXT1lW2YtMV07ZVtmXT1bdCxvLGldfSxyLm49ZT0+e3ZhciBuPWUmJmUuX19lc01vZHVsZT8oKT0+ZS5kZWZhdWx0OigpPT5lO3JldHVybiByLmQobix7YTpufSksbn0sKCgpPT57dmFyIG4sZT1PYmplY3QuZ2V0UHJvdG90eXBlT2Y/dD0+T2JqZWN0LmdldFByb3RvdHlwZU9m''@;'; put 'put ''KHQpOnQ9PnQuX19wcm90b19fO3IudD1mdW5jdGlvbih0LG8pe2lmKDEmbyYmKHQ9dGhpcyh0KSksOCZvfHwib2JqZWN0Ij09dHlwZW9mIHQmJnQmJig0Jm8mJnQuX19lc01vZHVsZXx8MTYmbyYmImZ1bmN0aW9uIj09dHlwZW9mIHQudGhlbikpcmV0dXJuIHQ7dmFyIGk9T2JqZWN0LmNyZWF0''@;'; put 'put ''ZShudWxsKTtyLnIoaSk7dmFyIGY9e307bj1ufHxbbnVsbCxlKHt9KSxlKFtdKSxlKGUpXTtmb3IodmFyIGE9MiZvJiZ0Oygib2JqZWN0Ij09dHlwZW9mIGF8fCJmdW5jdGlvbiI9PXR5cGVvZiBhKSYmIX5uLmluZGV4T2YoYSk7YT1lKGEpKU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEp''@;'; put 'put ''LmZvckVhY2gocz0+ZltzXT0oKT0+dFtzXSk7cmV0dXJuIGYuZGVmYXVsdD0oKT0+dCxyLmQoaSxmKSxpfX0pKCksci5kPShlLG4pPT57Zm9yKHZhciB0IGluIG4pci5vKG4sdCkmJiFyLm8oZSx0KSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7ZW51bWVyYWJsZTohMCxnZXQ6blt0XX0p''@;'; put 'put ''fSxyLmY9e30sci5lPWU9PlByb21pc2UuYWxsKE9iamVjdC5rZXlzKHIuZikucmVkdWNlKChuLHQpPT4oci5mW3RdKGUsbiksbiksW10pKSxyLnU9ZT0+ZSsiLmY5MTJkYWJmNjFmNWI5ZmUuanMiLHIubWluaUNzc0Y9ZT0+e30sci5vPShlLG4pPT5PYmplY3QucHJvdG90eXBlLmhhc093blBy''@;'; put 'put ''b3BlcnR5LmNhbGwoZSxuKSwoKCk9Pnt2YXIgZT17fSxuPSJkYXRhY29udHJvbGxlcjoiO3IubD0odCxvLGksZik9PntpZihlW3RdKWVbdF0ucHVzaChvKTtlbHNle3ZhciBhLHM7aWYodm9pZCAwIT09aSlmb3IodmFyIGw9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIp''@;'; put 'put ''LGM9MDtjPGwubGVuZ3RoO2MrKyl7dmFyIGQ9bFtjXTtpZihkLmdldEF0dHJpYnV0ZSgic3JjIik9PXR8fGQuZ2V0QXR0cmlidXRlKCJkYXRhLXdlYnBhY2siKT09bitpKXthPWQ7YnJlYWt9fWF8fChzPSEwLChhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpKS50eXBlPSJtb2R1''@;'; put 'put ''bGUiLGEuY2hhcnNldD0idXRmLTgiLHIubmMmJmEuc2V0QXR0cmlidXRlKCJub25jZSIsci5uYyksYS5zZXRBdHRyaWJ1dGUoImRhdGEtd2VicGFjayIsbitpKSxhLnNyYz1yLnR1KHQpKSxlW3RdPVtvXTt2YXIgdT0oaCxiKT0+e2Eub25lcnJvcj1hLm9ubG9hZD1udWxsLGNsZWFyVGltZW91''@;'; put 'put ''dChwKTt2YXIgXz1lW3RdO2lmKGRlbGV0ZSBlW3RdLGEucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpLF8mJl8uZm9yRWFjaCh5PT55KGIpKSxoKXJldHVybiBoKGIpfSxwPXNldFRpbWVvdXQodS5iaW5kKG51bGwsdm9pZCAwLHt0eXBlOiJ0aW1lb3V0Iix0YXJnZXQ6''@;'; put 'put ''YX0pLDEyZTQpO2Eub25lcnJvcj11LmJpbmQobnVsbCxhLm9uZXJyb3IpLGEub25sb2FkPXUuYmluZChudWxsLGEub25sb2FkKSxzJiZkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGEpfX19KSgpLHIucj1lPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sci5ubWQ9ZT0+KGUucGF0aHM9W10sZS5jaGlsZHJlbnx8KGUuY2hpbGRyZW49W10pLGUpLCgoKT0+e3Zh''@;'; put 'put ''ciBlO3IudHQ9KCk9Pih2b2lkIDA9PT1lJiYoZT17Y3JlYXRlU2NyaXB0VVJMOm49Pm59LHR5cGVvZiB0cnVzdGVkVHlwZXM8InUiJiZ0cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5JiYoZT10cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyI2J1bmRsZXIiLGUpKSksZSl9KSgpLHIu''@;'; put 'put ''dHU9ZT0+ci50dCgpLmNyZWF0ZVNjcmlwdFVSTChlKSxyLnA9IiIsKCgpPT57dmFyIGU9ezEyMTowfTtyLmYuaj0obyxpKT0+e3ZhciBmPXIubyhlLG8pP2Vbb106dm9pZCAwO2lmKDAhPT1mKWlmKGYpaS5wdXNoKGZbMl0pO2Vsc2UgaWYoMTIxIT1vKXt2YXIgYT1uZXcgUHJvbWlzZSgoZCx1''@;'; put 'put ''KT0+Zj1lW29dPVtkLHVdKTtpLnB1c2goZlsyXT1hKTt2YXIgcz1yLnArci51KG8pLGw9bmV3IEVycm9yO3IubChzLGQ9PntpZihyLm8oZSxvKSYmKDAhPT0oZj1lW29dKSYmKGVbb109dm9pZCAwKSxmKSl7dmFyIHU9ZCYmKCJsb2FkIj09PWQudHlwZT8ibWlzc2luZyI6ZC50eXBlKSxwPWQm''@;'; put 'put ''JmQudGFyZ2V0JiZkLnRhcmdldC5zcmM7bC5tZXNzYWdlPSJMb2FkaW5nIGNodW5rICIrbysiIGZhaWxlZC5cbigiK3UrIjogIitwKyIpIixsLm5hbWU9IkNodW5rTG9hZEVycm9yIixsLnR5cGU9dSxsLnJlcXVlc3Q9cCxmWzFdKGwpfX0sImNodW5rLSIrbyxvKX1lbHNlIGVbb109MH0sci5P''@;'; put 'put ''Lmo9bz0+MD09PWVbb107dmFyIG49KG8saSk9Pnt2YXIgbCxjLFtmLGEsc109aSxkPTA7aWYoZi5zb21lKHA9PjAhPT1lW3BdKSl7Zm9yKGwgaW4gYSlyLm8oYSxsKSYmKHIubVtsXT1hW2xdKTtpZihzKXZhciB1PXMocil9Zm9yKG8mJm8oaSk7ZDxmLmxlbmd0aDtkKyspci5vKGUsYz1mW2Rd''@;'; put 'put ''KSYmZVtjXSYmZVtjXVswXSgpLGVbY109MDtyZXR1cm4gci5PKHUpfSx0PXNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W107dC5mb3JFYWNoKG4uYmluZChudWxsLDApKSx0LnB1c2g9bi5iaW5kKG51bGwsdC5wdXNoLmJp''@;'; put 'put ''bmQodCkpfSkoKX0pKCk7'';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=scripts.80b33f91f6f02bd4-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''IWZ1bmN0aW9uKEMsUCl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZ0eXBlb2YgbW9kdWxlPCJ1Ij9QKGV4cG9ydHMpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyJdLFApOlAoKEM9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRo''@;'; put 'put ''aXM6Q3x8c2VsZikubWFya2VkPXt9KX0odGhpcyxmdW5jdGlvbihDKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gUChhLGkpe2Zvcih2YXIgdD0wO3Q8aS5sZW5ndGg7dCsrKXt2YXIgdT1pW3RdO3UuZW51bWVyYWJsZT11LmVudW1lcmFibGV8fCExLHUuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJp''@;'; put 'put ''biB1JiYodS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsZnVuY3Rpb24oZSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZihlPWZ1bmN0aW9uKHIpe2lmKCJvYmplY3QiIT10eXBlb2Ygcnx8bnVsbD09PXIpcmV0dXJuIHI7dmFyIHM9cltTeW1ib2wudG9QcmltaXRpdmVdO2lm''@;'; put 'put ''KHZvaWQgMD09PXMpcmV0dXJuIFN0cmluZyhyKTtpZigib2JqZWN0IiE9dHlwZW9mKHM9cy5jYWxsKHIsInN0cmluZyIpKSlyZXR1cm4gczt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfShlKSk/ZTpTdHJpbmcoZSl9''@;'; put 'put ''KHUua2V5KSx1KX19ZnVuY3Rpb24gdigpe3JldHVybih2PU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIHQsdT1hcmd1bWVudHNbaV07Zm9yKHQgaW4gdSlPYmplY3QucHJvdG90eXBl''@;'; put 'put ''Lmhhc093blByb3BlcnR5LmNhbGwodSx0KSYmKGFbdF09dVt0XSl9cmV0dXJuIGF9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gSihhLGkpeyhudWxsPT1pfHxpPmEubGVuZ3RoKSYmKGk9YS5sZW5ndGgpO2Zvcih2YXIgdD0wLHU9bmV3IEFycmF5KGkpO3Q8aTt0KyspdVt0XT1h''@;'; put 'put ''W3RdO3JldHVybiB1fWZ1bmN0aW9uIFUoYSxpKXt2YXIgdCx1PXR5cGVvZiBTeW1ib2w8InUiJiZhW1N5bWJvbC5pdGVyYXRvcl18fGFbIkBAaXRlcmF0b3IiXTtpZih1KXJldHVybih1PXUuY2FsbChhKSkubmV4dC5iaW5kKHUpO2lmKEFycmF5LmlzQXJyYXkoYSl8fCh1PWZ1bmN0aW9uKGUs''@;'; put 'put ''cil7dmFyIG47aWYoZSlyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/SihlLHIpOiJNYXAiPT09KG49Ik9iamVjdCI9PT0obj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSkpJiZlLmNvbnN0cnVjdG9yP2UuY29uc3RydWN0b3IubmFtZTpuKXx8IlNldCI9PT1u''@;'; put 'put ''P0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9KKGUscik6dm9pZCAwfShhKSl8fGkmJmEmJiJudW1iZXIiPT10eXBlb2YgYS5sZW5ndGgpcmV0dXJuIHUmJihhPXUpLHQ9MCxmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB0Pj1hLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6YVt0KytdfX07dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmpl''@;'; put 'put ''Y3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBvZT0wO2Z1bmN0aW9uIEsoYSl7cmV0dXJuIl9fcHJpdmF0ZV8iK29lKysrIl8iK2F9ZnVuY3Rpb24gRyhhLGkpe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGkpKXJldHVy''@;'; put 'put ''biBhO3Rocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byB1c2UgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKX1mdW5jdGlvbiBRKCl7cmV0dXJue2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVh''@;'; put 'put ''ZGVyUHJlZml4OiIiLGhpZ2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGws''@;'; put 'put ''d2Fsa1Rva2VuczpudWxsLHhodG1sOiExfX1mdW5jdGlvbiBXKGEpe0MuZGVmYXVsdHM9YX1mdW5jdGlvbiBZKGEpe3JldHVybiBjZVthXX1DLmRlZmF1bHRzPXthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRl''@;'; put 'put ''clByZWZpeDoiIixoaWdobGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdh''@;'; put 'put ''bGtUb2tlbnM6bnVsbCx4aHRtbDohMX07dmFyIGVlPS9bJjw+IiddLyxsZT1uZXcgUmVnRXhwKGVlLnNvdXJjZSwiZyIpLHRlPS9bPD4iJ118Jig/ISgjXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XHcrKTspLyxEZT1uZXcgUmVnRXhwKHRlLnNvdXJjZSwiZyIpLGNlPXsiJiI6IiZh''@;'; put 'put ''bXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifTtmdW5jdGlvbiB5KGEsaSl7aWYoaSl7aWYoZWUudGVzdChhKSlyZXR1cm4gYS5yZXBsYWNlKGxlLFkpfWVsc2UgaWYodGUudGVzdChhKSlyZXR1cm4gYS5yZXBsYWNlKERlLFkpO3JldHVybiBhfXZh''@;'; put 'put ''ciBwZT0vJigjKD86XGQrKXwoPzojeFswLTlBLUZhLWZdKyl8KD86XHcrKSk7Py9naTtmdW5jdGlvbiB1ZShhKXtyZXR1cm4gYS5yZXBsYWNlKHBlLGZ1bmN0aW9uKGksdCl7cmV0dXJuImNvbG9uIj09PSh0PXQudG9Mb3dlckNhc2UoKSk/IjoiOiIjIj09PXQuY2hhckF0KDApPyJ4Ij09PXQu''@;'; put 'put ''Y2hhckF0KDEpP1N0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQodC5zdWJzdHJpbmcoMiksMTYpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKCt0LnN1YnN0cmluZygxKSk6IiJ9KX12YXIgaGU9LyhefFteXFtdKVxeL2c7ZnVuY3Rpb24gRShhLGkpe2E9InN0cmluZyI9PXR5cGVvZiBhP2E6YS5z''@;'; put 'put ''b3VyY2UsaT1pfHwiIjt2YXIgdD17cmVwbGFjZTpmdW5jdGlvbih1LGUpe3JldHVybiBlPShlPWUuc291cmNlfHxlKS5yZXBsYWNlKGhlLCIkMSIpLGE9YS5yZXBsYWNlKHUsZSksdH0sZ2V0UmVnZXg6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFJlZ0V4cChhLGkpfX07cmV0dXJuIHR9dmFyIGdl''@;'; put 'put ''PS9bXlx3Ol0vZyxmZT0vXiR8XlthLXpdW2EtejAtOSsuLV0qOnxeWz8jXS9pO2Z1bmN0aW9uIG5lKGEsaSx0KXtpZihhKXt0cnl7dT1kZWNvZGVVUklDb21wb25lbnQodWUodCkpLnJlcGxhY2UoZ2UsIiIpLnRvTG93ZXJDYXNlKCl9Y2F0Y2h7cmV0dXJuIG51bGx9aWYoMD09PXUuaW5kZXhP''@;'; put 'put ''ZigiamF2YXNjcmlwdDoiKXx8MD09PXUuaW5kZXhPZigidmJzY3JpcHQ6Iil8fDA9PT11LmluZGV4T2YoImRhdGE6IikpcmV0dXJuIG51bGx9dmFyIHU7aSYmIWZlLnRlc3QodCkmJihhPXQsTVsiICIrKHU9aSldfHwoTVsiICIrdV09RmUudGVzdCh1KT91KyIvIjpIKHUsIi8iLCEwKSksaT0t''@;'; put 'put ''MT09PSh1PU1bIiAiK3VdKS5pbmRleE9mKCI6IiksdD0iLy8iPT09YS5zdWJzdHJpbmcoMCwyKT9pP2E6dS5yZXBsYWNlKGRlLCIkMSIpK2E6Ii8iPT09YS5jaGFyQXQoMCk/aT9hOnUucmVwbGFjZShBZSwiJDEiKSthOnUrYSk7dHJ5e3Q9ZW5jb2RlVVJJKHQpLnJlcGxhY2UoLyUyNS9nLCIl''@;'; put 'put ''Iil9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0dXJuIHR9dmFyIE09e30sRmU9L15bXjpdKzpcLypbXi9dKiQvLGRlPS9eKFteOl0rOilbXHNcU10qJC8sQWU9L14oW146XSs6XC8qW14vXSopW1xzXFNdKiQvLEk9e2V4ZWM6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiByZShhLGkpe3ZhciB0PWEucmVw''@;'; put 'put ''bGFjZSgvXHwvZyxmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBzPSExLHA9cjswPD0tLXAmJiJcXCI9PT1uW3BdOylzPSFzO3JldHVybiBzPyJ8IjoiIHwifSkuc3BsaXQoLyBcfC8pLHU9MDtpZih0WzBdLnRyaW0oKXx8dC5zaGlmdCgpLDA8dC5sZW5ndGgmJiF0W3QubGVuZ3RoLTFdLnRyaW0o''@;'; put 'put ''KSYmdC5wb3AoKSx0Lmxlbmd0aD5pKXQuc3BsaWNlKGkpO2Vsc2UgZm9yKDt0Lmxlbmd0aDxpOyl0LnB1c2goIiIpO2Zvcig7dTx0Lmxlbmd0aDt1KyspdFt1XT10W3VdLnRyaW0oKS5yZXBsYWNlKC9cXFx8L2csInwiKTtyZXR1cm4gdH1mdW5jdGlvbiBIKGEsaSx0KXt2YXIgdT1hLmxlbmd0''@;'; put 'put ''aDtpZigwPT09dSlyZXR1cm4iIjtmb3IodmFyIGU9MDtlPHU7KXt2YXIgcj1hLmNoYXJBdCh1LWUtMSk7aWYoKHIhPT1pfHx0KSYmKHI9PT1pfHwhdCkpYnJlYWs7ZSsrfXJldHVybiBhLnNsaWNlKDAsdS1lKX1mdW5jdGlvbiBpZShhLHIsdCx1KXt2YXIgZT1yLmhyZWYsbj0ocj1yLnRpdGxl''@;'; put 'put ''P3koci50aXRsZSk6bnVsbCxhWzFdLnJlcGxhY2UoL1xcKFtcW1xdXSkvZywiJDEiKSk7cmV0dXJuIiEiIT09YVswXS5jaGFyQXQoMCk/KHUuc3RhdGUuaW5MaW5rPSEwLGE9e3R5cGU6ImxpbmsiLHJhdzp0LGhyZWY6ZSx0aXRsZTpyLHRleHQ6bix0b2tlbnM6dS5pbmxpbmVUb2tlbnMobil9''@;'; put 'put ''LHUuc3RhdGUuaW5MaW5rPSExLGEpOnt0eXBlOiJpbWFnZSIscmF3OnQsaHJlZjplLHRpdGxlOnIsdGV4dDp5KG4pfX12YXIgaj1mdW5jdGlvbigpe2Z1bmN0aW9uIGEodCl7dGhpcy5vcHRpb25zPXR8fEMuZGVmYXVsdHN9dmFyIGk9YS5wcm90b3R5cGU7cmV0dXJuIGkuc3BhY2U9ZnVuY3Rp''@;'; put 'put ''b24odCl7aWYoKHQ9dGhpcy5ydWxlcy5ibG9jay5uZXdsaW5lLmV4ZWModCkpJiYwPHRbMF0ubGVuZ3RoKXJldHVybnt0eXBlOiJzcGFjZSIscmF3OnRbMF19fSxpLmNvZGU9ZnVuY3Rpb24oZSl7dmFyIHU7aWYoZT10aGlzLnJ1bGVzLmJsb2NrLmNvZGUuZXhlYyhlKSlyZXR1cm4gdT1lWzBd''@;'; put 'put ''LnJlcGxhY2UoL14gezEsNH0vZ20sIiIpLHt0eXBlOiJjb2RlIixyYXc6ZVswXSxjb2RlQmxvY2tTdHlsZToiaW5kZW50ZWQiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP3U6SCh1LCJcbiIpfX0saS5mZW5jZXM9ZnVuY3Rpb24ocyl7dmFyIHUsZSxyLG47aWYocz10aGlzLnJ1bGVzLmJs''@;'; put 'put ''b2NrLmZlbmNlcy5leGVjKHMpKXJldHVybiBlPXU9c1swXSxyPXNbM118fCIiLGU9bnVsbD09PShlPXUubWF0Y2goL14oXHMrKSg/OmBgYCkvKSk/cjoobj1lWzFdLHIuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKHApe3ZhciBnPXAubWF0Y2goL15ccysvKTtyZXR1cm4gbnVsbCE9PWcmJmdb''@;'; put 'put ''MF0ubGVuZ3RoPj1uLmxlbmd0aD9wLnNsaWNlKG4ubGVuZ3RoKTpwfSkuam9pbigiXG4iKSkse3R5cGU6ImNvZGUiLHJhdzp1LGxhbmc6c1syXSYmc1syXS50cmltKCkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKSx0ZXh0OmV9fSxpLmhlYWRpbmc9ZnVuY3Rpb24o''@;'; put 'put ''cil7dmFyIHUsZTtpZihyPXRoaXMucnVsZXMuYmxvY2suaGVhZGluZy5leGVjKHIpKXJldHVybiB1PXJbMl0udHJpbSgpLC8jJC8udGVzdCh1KSYmKGU9SCh1LCIjIiksIXRoaXMub3B0aW9ucy5wZWRhbnRpYyYmZSYmIS8gJC8udGVzdChlKXx8KHU9ZS50cmltKCkpKSx7dHlwZToiaGVhZGlu''@;'; put 'put ''ZyIscmF3OnJbMF0sZGVwdGg6clsxXS5sZW5ndGgsdGV4dDp1LHRva2Vuczp0aGlzLmxleGVyLmlubGluZSh1KX19LGkuaHI9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmJsb2NrLmhyLmV4ZWModCkpcmV0dXJue3R5cGU6ImhyIixyYXc6dFswXX19LGkuYmxvY2txdW90ZT1mdW5jdGlv''@;'; put 'put ''bihuKXt2YXIgdSxlLHI7aWYobj10aGlzLnJ1bGVzLmJsb2NrLmJsb2NrcXVvdGUuZXhlYyhuKSlyZXR1cm4gdT1uWzBdLnJlcGxhY2UoL14gKj5bIFx0XT8vZ20sIiIpLGU9dGhpcy5sZXhlci5zdGF0ZS50b3AsdGhpcy5sZXhlci5zdGF0ZS50b3A9ITAscj10aGlzLmxleGVyLmJsb2NrVG9r''@;'; put 'put ''ZW5zKHUpLHRoaXMubGV4ZXIuc3RhdGUudG9wPWUse3R5cGU6ImJsb2NrcXVvdGUiLHJhdzpuWzBdLHRva2VuczpyLHRleHQ6dX19LGkubGlzdD1mdW5jdGlvbih0KXt2YXIgdT10aGlzLnJ1bGVzLmJsb2NrLmxpc3QuZXhlYyh0KTtpZih1KXt2YXIgZSxyLG4scyxwLGcsRCxvLEYsZCx4LGg9''@;'; put 'put ''MTwoaz11WzFdLnRyaW0oKSkubGVuZ3RoLGw9e3R5cGU6Imxpc3QiLHJhdzoiIixvcmRlcmVkOmgsc3RhcnQ6aD8ray5zbGljZSgwLC0xKToiIixsb29zZTohMSxpdGVtczpbXX0saz1oPyJcXGR7MSw5fVxcIitrLnNsaWNlKC0xKToiXFwiK2s7dGhpcy5vcHRpb25zLnBlZGFudGljJiYoaz1o''@;'; put 'put ''P2s6IlsqKy1dIik7Zm9yKHZhciBiPW5ldyBSZWdFeHAoIl4oIHswLDN9IitrKyIpKCg/OltcdCBdW15cXG5dKik/KD86XFxufCQpKSIpO3QmJih4PSExLHU9Yi5leGVjKHQpKSYmIXRoaXMucnVsZXMuYmxvY2suaHIudGVzdCh0KTspe2lmKHQ9dC5zdWJzdHJpbmcoKGU9dVswXSkubGVuZ3Ro''@;'; put 'put ''KSxEPXVbMl0uc3BsaXQoIlxuIiwxKVswXS5yZXBsYWNlKC9eXHQrLyxmdW5jdGlvbihMKXtyZXR1cm4iICIucmVwZWF0KDMqTC5sZW5ndGgpfSksbz10LnNwbGl0KCJcbiIsMSlbMF0sdGhpcy5vcHRpb25zLnBlZGFudGljPyhzPTIsZD1ELnRyaW1MZWZ0KCkpOihzPXVbMl0uc2VhcmNoKC9b''@;'; put 'put ''XiBdLyksZD1ELnNsaWNlKHM9NDxzPzE6cykscys9dVsxXS5sZW5ndGgpLHA9ITEsIUQmJi9eICokLy50ZXN0KG8pJiYoZSs9bysiXG4iLHQ9dC5zdWJzdHJpbmcoby5sZW5ndGgrMSkseD0hMCksIXgpZm9yKHZhciB3PW5ldyBSZWdFeHAoIl4gezAsIitNYXRoLm1pbigzLHMtMSkrIn0oPzpb''@;'; put 'put ''KistXXxcXGR7MSw5fVsuKV0pKCg/OlsgXHRdW15cXG5dKik/KD86XFxufCQpKSIpLEE9bmV3IFJlZ0V4cCgiXiB7MCwiK01hdGgubWluKDMscy0xKSsifSgoPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JCkiKSxCPW5ldyBSZWdFeHAoIl4gezAsIitNYXRo''@;'; put 'put ''Lm1pbigzLHMtMSkrIn0oPzpgYGB8fn5+KSIpLF89bmV3IFJlZ0V4cCgiXiB7MCwiK01hdGgubWluKDMscy0xKSsifSMiKTt0JiYobz1GPXQuc3BsaXQoIlxuIiwxKVswXSx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihvPW8ucmVwbGFjZSgvXiB7MSw0fSg/PSggezR9KSpbXiBdKS9nLCIgICIp''@;'; put 'put ''KSwhQi50ZXN0KG8pKSYmIV8udGVzdChvKSYmIXcudGVzdChvKSYmIUEudGVzdCh0KTspe2lmKG8uc2VhcmNoKC9bXiBdLyk+PXN8fCFvLnRyaW0oKSlkKz0iXG4iK28uc2xpY2Uocyk7ZWxzZXtpZihwfHw0PD1ELnNlYXJjaCgvW14gXS8pfHxCLnRlc3QoRCl8fF8udGVzdChEKXx8QS50ZXN0''@;'; put 'put ''KEQpKWJyZWFrO2QrPSJcbiIrb31wfHxvLnRyaW0oKXx8KHA9ITApLGUrPUYrIlxuIix0PXQuc3Vic3RyaW5nKEYubGVuZ3RoKzEpLEQ9by5zbGljZShzKX1sLmxvb3NlfHwoZz9sLmxvb3NlPSEwOi9cbiAqXG4gKiQvLnRlc3QoZSkmJihnPSEwKSksdGhpcy5vcHRpb25zLmdmbSYmKHI9L15c''@;'; put 'put ''W1sgeFhdXF0gLy5leGVjKGQpKSYmKG49IlsgXSAiIT09clswXSxkPWQucmVwbGFjZSgvXlxbWyB4WF1cXSArLywiIikpLGwuaXRlbXMucHVzaCh7dHlwZToibGlzdF9pdGVtIixyYXc6ZSx0YXNrOiEhcixjaGVja2VkOm4sbG9vc2U6ITEsdGV4dDpkfSksbC5yYXcrPWV9bC5pdGVtc1tsLml0''@;'; put 'put ''ZW1zLmxlbmd0aC0xXS5yYXc9ZS50cmltUmlnaHQoKSxsLml0ZW1zW2wuaXRlbXMubGVuZ3RoLTFdLnRleHQ9ZC50cmltUmlnaHQoKSxsLnJhdz1sLnJhdy50cmltUmlnaHQoKTtmb3IodmFyIHosYWU9bC5pdGVtcy5sZW5ndGgsJD0wOyQ8YWU7JCsrKXRoaXMubGV4ZXIuc3RhdGUudG9wPSEx''@;'; put 'put ''LGwuaXRlbXNbJF0udG9rZW5zPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMobC5pdGVtc1skXS50ZXh0LFtdKSxsLmxvb3NlfHwoej0wPCh6PWwuaXRlbXNbJF0udG9rZW5zLmZpbHRlcihmdW5jdGlvbihMKXtyZXR1cm4ic3BhY2UiPT09TC50eXBlfSkpLmxlbmd0aCYmei5zb21lKGZ1bmN0aW9u''@;'; put 'put ''KEwpe3JldHVybi9cbi4qXG4vLnRlc3QoTC5yYXcpfSksbC5sb29zZT16KTtpZihsLmxvb3NlKWZvcigkPTA7JDxhZTskKyspbC5pdGVtc1skXS5sb29zZT0hMDtyZXR1cm4gbH19LGkuaHRtbD1mdW5jdGlvbihlKXt2YXIgdTtpZihlPXRoaXMucnVsZXMuYmxvY2suaHRtbC5leGVjKGUpKXJl''@;'; put 'put ''dHVybiB1PXt0eXBlOiJodG1sIixibG9jazohMCxyYXc6ZVswXSxwcmU6IXRoaXMub3B0aW9ucy5zYW5pdGl6ZXImJigicHJlIj09PWVbMV18fCJzY3JpcHQiPT09ZVsxXXx8InN0eWxlIj09PWVbMV0pLHRleHQ6ZVswXX0sdGhpcy5vcHRpb25zLnNhbml0aXplJiYoZT10aGlzLm9wdGlvbnMu''@;'; put 'put ''c2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIoZVswXSk6eShlWzBdKSx1LnR5cGU9InBhcmFncmFwaCIsdS50ZXh0PWUsdS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoZSkpLHV9LGkuZGVmPWZ1bmN0aW9uKG4pe3ZhciB1LGUscjtpZihuPXRoaXMucnVsZXMuYmxvY2suZGVmLmV4''@;'; put 'put ''ZWMobikpcmV0dXJuIHU9blsxXS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xzKy9nLCIgIiksZT1uWzJdP25bMl0ucmVwbGFjZSgvXjwoLiopPiQvLCIkMSIpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6IiIscj1uWzNdJiZuWzNdLnN1YnN0cmluZygxLG5bM10u''@;'; put 'put ''bGVuZ3RoLTEpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIikse3R5cGU6ImRlZiIsdGFnOnUscmF3Om5bMF0saHJlZjplLHRpdGxlOnJ9fSxpLnRhYmxlPWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5ydWxlcy5ibG9jay50YWJsZS5leGVjKHQpKXt2YXIgdT17dHlwZToi''@;'; put 'put ''dGFibGUiLGhlYWRlcjpyZSh0WzFdKS5tYXAoZnVuY3Rpb24oZyl7cmV0dXJue3RleHQ6Z319KSxhbGlnbjp0WzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLykscm93czp0WzNdJiZ0WzNdLnRyaW0oKT90WzNdLnJlcGxhY2UoL1xuWyBcdF0qJC8sIiIpLnNwbGl0''@;'; put 'put ''KCJcbiIpOltdfTtpZih1LmhlYWRlci5sZW5ndGg9PT11LmFsaWduLmxlbmd0aCl7dS5yYXc9dFswXTtmb3IodmFyIGUscixuLHM9dS5hbGlnbi5sZW5ndGgscD0wO3A8cztwKyspdS5hbGlnbltwXT0vXiAqLSs6ICokLy50ZXN0KHUuYWxpZ25bcF0pPyJyaWdodCI6L14gKjotKzogKiQvLnRl''@;'; put 'put ''c3QodS5hbGlnbltwXSk/ImNlbnRlciI6L14gKjotKyAqJC8udGVzdCh1LmFsaWduW3BdKT8ibGVmdCI6bnVsbDtmb3Iocz11LnJvd3MubGVuZ3RoLHA9MDtwPHM7cCsrKXUucm93c1twXT1yZSh1LnJvd3NbcF0sdS5oZWFkZXIubGVuZ3RoKS5tYXAoZnVuY3Rpb24oZyl7cmV0dXJue3RleHQ6''@;'; put 'put ''Z319KTtmb3Iocz11LmhlYWRlci5sZW5ndGgsZT0wO2U8cztlKyspdS5oZWFkZXJbZV0udG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKHUuaGVhZGVyW2VdLnRleHQpO2ZvcihzPXUucm93cy5sZW5ndGgsZT0wO2U8cztlKyspZm9yKG49dS5yb3dzW2VdLHI9MDtyPG4ubGVuZ3RoO3IrKyluW3Jd''@;'; put 'put ''LnRva2Vucz10aGlzLmxleGVyLmlubGluZShuW3JdLnRleHQpO3JldHVybiB1fX19LGkubGhlYWRpbmc9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmJsb2NrLmxoZWFkaW5nLmV4ZWModCkpcmV0dXJue3R5cGU6ImhlYWRpbmciLHJhdzp0WzBdLGRlcHRoOiI9Ij09PXRbMl0uY2hhckF0''@;'; put 'put ''KDApPzE6Mix0ZXh0OnRbMV0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHRbMV0pfX0saS5wYXJhZ3JhcGg9ZnVuY3Rpb24oZSl7dmFyIHU7aWYoZT10aGlzLnJ1bGVzLmJsb2NrLnBhcmFncmFwaC5leGVjKGUpKXJldHVybiB1PSJcbiI9PT1lWzFdLmNoYXJBdChlWzFdLmxlbmd0aC0xKT9l''@;'; put 'put ''WzFdLnNsaWNlKDAsLTEpOmVbMV0se3R5cGU6InBhcmFncmFwaCIscmF3OmVbMF0sdGV4dDp1LHRva2Vuczp0aGlzLmxleGVyLmlubGluZSh1KX19LGkudGV4dD1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuYmxvY2sudGV4dC5leGVjKHQpKXJldHVybnt0eXBlOiJ0ZXh0IixyYXc6dFsw''@;'; put 'put ''XSx0ZXh0OnRbMF0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHRbMF0pfX0saS5lc2NhcGU9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmlubGluZS5lc2NhcGUuZXhlYyh0KSlyZXR1cm57dHlwZToiZXNjYXBlIixyYXc6dFswXSx0ZXh0OnkodFsxXSl9fSxpLnRhZz1mdW5jdGlvbih0''@;'; put 'put ''KXtpZih0PXRoaXMucnVsZXMuaW5saW5lLnRhZy5leGVjKHQpKXJldHVybiF0aGlzLmxleGVyLnN0YXRlLmluTGluayYmL148YSAvaS50ZXN0KHRbMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5MaW5rPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxcL2E+L2kudGVzdCh0WzBdKSYmKHRo''@;'; put 'put ''aXMubGV4ZXIuc3RhdGUuaW5MaW5rPSExKSwhdGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjwocHJlfGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KHRbMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePFwv''@;'; put 'put ''KHByZXxjb2RlfGtiZHxzY3JpcHQpKFxzfD4pL2kudGVzdCh0WzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMSkse3R5cGU6dGhpcy5vcHRpb25zLnNhbml0aXplPyJ0ZXh0IjoiaHRtbCIscmF3OnRbMF0saW5MaW5rOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rLGluUmF3Qmxv''@;'; put 'put ''Y2s6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrLGJsb2NrOiExLHRleHQ6dGhpcy5vcHRpb25zLnNhbml0aXplP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhpcy5vcHRpb25zLnNhbml0aXplcih0WzBdKTp5KHRbMF0pOnRbMF19fSxpLmxpbms9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1''@;'; put 'put ''bGVzLmlubGluZS5saW5rLmV4ZWModCkpe3ZhciB1PXRbMl0udHJpbSgpO2lmKCF0aGlzLm9wdGlvbnMucGVkYW50aWMmJi9ePC8udGVzdCh1KSl7aWYoIS8+JC8udGVzdCh1KSlyZXR1cm47dmFyIHI9SCh1LnNsaWNlKDAsLTEpLCJcXCIpO2lmKCh1Lmxlbmd0aC1yLmxlbmd0aCklMj09MCly''@;'; put 'put ''ZXR1cm59ZWxzZS0xPChyPWZ1bmN0aW9uKHMscCl7aWYoLTEhPT1zLmluZGV4T2YocFsxXSkpZm9yKHZhciBnPXMubGVuZ3RoLEQ9MCxvPTA7bzxnO28rKylpZigiXFwiPT09c1tvXSlvKys7ZWxzZSBpZihzW29dPT09cFswXSlEKys7ZWxzZSBpZihzW29dPT09cFsxXSYmLS1EPDApcmV0dXJu''@;'; put 'put ''IG87cmV0dXJuLTF9KHRbMl0sIigpIikpJiYobj0oMD09PXRbMF0uaW5kZXhPZigiISIpPzU6NCkrdFsxXS5sZW5ndGgrcix0WzJdPXRbMl0uc3Vic3RyaW5nKDAsciksdFswXT10WzBdLnN1YnN0cmluZygwLG4pLnRyaW0oKSx0WzNdPSIiKTtyPXRbMl07dmFyIGUsbj0iIjtyZXR1cm4gdGhp''@;'; put 'put ''cy5vcHRpb25zLnBlZGFudGljPyhlPS9eKFteJyJdKlteXHNdKVxzKyhbJyJdKSguKilcMi8uZXhlYyhyKSkmJihyPWVbMV0sbj1lWzNdKTpuPXRbM10/dFszXS5zbGljZSgxLC0xKToiIixyPXIudHJpbSgpLGllKHQse2hyZWY6KHI9L148Ly50ZXN0KHIpP3RoaXMub3B0aW9ucy5wZWRhbnRp''@;'; put 'put ''YyYmIS8+JC8udGVzdCh1KT9yLnNsaWNlKDEpOnIuc2xpY2UoMSwtMSk6cikmJnIucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKSx0aXRsZTpuJiZuLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIil9LHRbMF0sdGhpcy5sZXhlcil9fSxpLnJl''@;'; put 'put ''Zmxpbms9ZnVuY3Rpb24odCx1KXt2YXIgZTtpZihlPShlPXRoaXMucnVsZXMuaW5saW5lLnJlZmxpbmsuZXhlYyh0KSl8fHRoaXMucnVsZXMuaW5saW5lLm5vbGluay5leGVjKHQpKXJldHVybih0PXVbKHQ9KGVbMl18fGVbMV0pLnJlcGxhY2UoL1xzKy9nLCIgIikpLnRvTG93ZXJDYXNlKCld''@;'; put 'put ''KT9pZShlLHQsZVswXSx0aGlzLmxleGVyKTp7dHlwZToidGV4dCIscmF3OnU9ZVswXS5jaGFyQXQoMCksdGV4dDp1fX0saS5lbVN0cm9uZz1mdW5jdGlvbih0LHUsZSl7dm9pZCAwPT09ZSYmKGU9IiIpO3ZhciByPXRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLmxEZWxpbS5leGVjKHQpO2lm''@;'; put 'put ''KHImJighclszXXx8IWUubWF0Y2goLyg/OlswLTlBLVphLXpceEFBXHhCMlx4QjNceEI1XHhCOVx4QkFceEJDLVx4QkVceEMwLVx4RDZceEQ4LVx4RjZceEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N1x1MDM3''@;'; put 'put ''QS1cdTAzN0RcdTAzN0ZcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyRlx1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjAtXHUwNTg4XHUwNUQwLVx1MDVFQVx1MDVFRi1cdTA1RjJcdTA2MjAtXHUwNjRBXHUw''@;'; put 'put ''NjYwLVx1MDY2OVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUUtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3QzAtXHUwN0VBXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgy''@;'; put 'put ''NFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4NjAtXHUwODZBXHUwODcwLVx1MDg4N1x1MDg4OS1cdTA4OEVcdTA4QTAtXHUwOEM5XHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NjYtXHUwOTZGXHUwOTcxLVx1MDk4MFx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5''@;'; put 'put ''OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMlx1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUU2LVx1MDlGMVx1MDlGNC1cdTA5RjlcdTA5RkNcdTBBMDUtXHUwQTBBXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBB''@;'; put 'put ''MzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzlcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTY2LVx1MEE2Rlx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFE''@;'; put 'put ''MFx1MEFFMFx1MEFFMVx1MEFFNi1cdTBBRUZcdTBBRjlcdTBCMDUtXHUwQjBDXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI2Ni1cdTBCNkZcdTBCNzEtXHUwQjc3''@;'; put 'put ''XHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBcdTBCRTYtXHUwQkYyXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTIt''@;'; put 'put ''XHUwQzI4XHUwQzJBLVx1MEMzOVx1MEMzRFx1MEM1OC1cdTBDNUFcdTBDNURcdTBDNjBcdTBDNjFcdTBDNjYtXHUwQzZGXHUwQzc4LVx1MEM3RVx1MEM4MFx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RE''@;'; put 'put ''XHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0U2LVx1MENFRlx1MENGMVx1MENGMlx1MEQwNC1cdTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ1NC1cdTBENTZcdTBENTgtXHUwRDYxXHUwRDY2LVx1MEQ3OFx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlB''@;'; put 'put ''LVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwREU2LVx1MERFRlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTUwLVx1MEU1OVx1MEU4MVx1MEU4Mlx1MEU4NFx1MEU4Ni1cdTBFOEFcdTBFOEMtXHUwRUEzXHUwRUE1XHUwRUE3LVx1MEVC''@;'; put 'put ''MFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZcdTBFRDAtXHUwRUQ5XHUwRURDLVx1MEVERlx1MEYwMFx1MEYyMC1cdTBGMzNcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXHUxMDNGLVx1MTA0OVx1MTA1MC1cdTEwNTVcdTEw''@;'; put 'put ''NUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFcdTEwOEVcdTEwOTAtXHUxMDk5XHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RFx1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUx''@;'; put 'put ''MjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM2OS1cdTEzN0NcdTEzODAtXHUxMzhG''@;'; put 'put ''XHUxM0EwLVx1MTNGNVx1MTNGOC1cdTEzRkRcdTE0MDEtXHUxNjZDXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNkVFLVx1MTZGOFx1MTcwMC1cdTE3MTFcdTE3MUYtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1''@;'; put 'put ''MTdCM1x1MTdEN1x1MTdEQ1x1MTdFMC1cdTE3RTlcdTE3RjAtXHUxN0Y5XHUxODEwLVx1MTgxOVx1MTgyMC1cdTE4NzhcdTE4ODAtXHUxODg0XHUxODg3LVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFFXHUxOTQ2LVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFC''@;'; put 'put ''XHUxOUIwLVx1MTlDOVx1MTlEMC1cdTE5REFcdTFBMDAtXHUxQTE2XHUxQTIwLVx1MUE1NFx1MUE4MC1cdTFBODlcdTFBOTAtXHUxQTk5XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNENcdTFCNTAtXHUxQjU5XHUxQjgzLVx1MUJBMFx1MUJBRS1cdTFCRTVcdTFDMDAtXHUxQzIzXHUx''@;'; put 'put ''QzQwLVx1MUM0OVx1MUM0RC1cdTFDN0RcdTFDODAtXHUxQzg4XHUxQzkwLVx1MUNCQVx1MUNCRC1cdTFDQkZcdTFDRTktXHUxQ0VDXHUxQ0VFLVx1MUNGM1x1MUNGNVx1MUNGNlx1MUNGQVx1MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUxRjE4LVx1MUYxRFx1MUYyMC1cdTFGNDVcdTFGNDgt''@;'; put 'put ''XHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZG''@;'; put 'put ''Ni1cdTFGRkNcdTIwNzBcdTIwNzFcdTIwNzQtXHUyMDc5XHUyMDdGLVx1MjA4OVx1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0''@;'; put 'put ''NS1cdTIxNDlcdTIxNEVcdTIxNTAtXHUyMTg5XHUyNDYwLVx1MjQ5Qlx1MjRFQS1cdTI0RkZcdTI3NzYtXHUyNzkzXHUyQzAwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNcdTJDRkRcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJE''@;'; put 'put ''OTZcdTJEQTAtXHUyREE2XHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNS1cdTMwMDdcdTMwMjEtXHUzMDI5XHUzMDMxLVx1MzAzNVx1MzAzOC1cdTMwM0Nc''@;'; put 'put ''dTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRlx1MzEzMS1cdTMxOEVcdTMxOTItXHUzMTk1XHUzMUEwLVx1MzFCRlx1MzFGMC1cdTMxRkZcdTMyMjAtXHUzMjI5XHUzMjQ4LVx1MzI0Rlx1MzI1MS1cdTMyNUZcdTMyODAtXHUz''@;'; put 'put ''Mjg5XHUzMkIxLVx1MzJCRlx1MzQwMC1cdTREQkZcdTRFMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjJCXHVBNjQwLVx1QTY2RVx1QTY3Ri1cdUE2OURcdUE2QTAtXHVBNkVGXHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhcdUE3OEItXHVBN0NBXHVBN0Qw''@;'; put 'put ''XHVBN0QxXHVBN0QzXHVBN0Q1LVx1QTdEOVx1QTdGMi1cdUE4MDFcdUE4MDMtXHVBODA1XHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4MzAtXHVBODM1XHVBODQwLVx1QTg3M1x1QTg4Mi1cdUE4QjNcdUE4RDAtXHVBOEQ5XHVBOEYyLVx1QThGN1x1QThGQlx1QThGRFx1QThGRVx1QTkw''@;'; put 'put ''MC1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0YtXHVBOUQ5XHVBOUUwLVx1QTlFNFx1QTlFNi1cdUE5RkVcdUFBMDAtXHVBQTI4XHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNTAtXHVBQTU5XHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE3RS1c''@;'; put 'put ''dUFBQUZcdUFBQjFcdUFBQjVcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVcdUFCMzAtXHVBQjVB''@;'; put 'put ''XHVBQjVDLVx1QUI2OVx1QUI3MC1cdUFCRTJcdUFCRjAtXHVBQkY5XHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XHVG''@;'; put 'put ''QjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNcdUZGMTAtXHVGRjE5XHVGRjIxLVx1RkYzQVx1RkY0MS1c''@;'; put 'put ''dUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ118XHVEODAwW1x1REMwMC1cdURDMEJcdURDMEQtXHVEQzI2XHVEQzI4LVx1REMzQVx1REMzQ1x1REMzRFx1REMzRi1cdURDNERcdURDNTAtXHVEQzVEXHVEQzgwLVx1''@;'; put 'put ''RENGQVx1REQwNy1cdUREMzNcdURENDAtXHVERDc4XHVERDhBXHVERDhCXHVERTgwLVx1REU5Q1x1REVBMC1cdURFRDBcdURFRTEtXHVERUZCXHVERjAwLVx1REYyM1x1REYyRC1cdURGNEFcdURGNTAtXHVERjc1XHVERjgwLVx1REY5RFx1REZBMC1cdURGQzNcdURGQzgtXHVERkNGXHVERkQx''@;'; put 'put ''LVx1REZENV18XHVEODAxW1x1REMwMC1cdURDOURcdURDQTAtXHVEQ0E5XHVEQ0IwLVx1RENEM1x1RENEOC1cdURDRkJcdUREMDAtXHVERDI3XHVERDMwLVx1REQ2M1x1REQ3MC1cdUREN0FcdUREN0MtXHVERDhBXHVERDhDLVx1REQ5Mlx1REQ5NFx1REQ5NVx1REQ5Ny1cdUREQTFcdUREQTMt''@;'; put 'put ''XHVEREIxXHVEREIzLVx1RERCOVx1RERCQlx1RERCQ1x1REUwMC1cdURGMzZcdURGNDAtXHVERjU1XHVERjYwLVx1REY2N1x1REY4MC1cdURGODVcdURGODctXHVERkIwXHVERkIyLVx1REZCQV18XHVEODAyW1x1REMwMC1cdURDMDVcdURDMDhcdURDMEEtXHVEQzM1XHVEQzM3XHVEQzM4XHVE''@;'; put 'put ''QzNDXHVEQzNGLVx1REM1NVx1REM1OC1cdURDNzZcdURDNzktXHVEQzlFXHVEQ0E3LVx1RENBRlx1RENFMC1cdURDRjJcdURDRjRcdURDRjVcdURDRkItXHVERDFCXHVERDIwLVx1REQzOVx1REQ4MC1cdUREQjdcdUREQkMtXHVERENGXHVEREQyLVx1REUwMFx1REUxMC1cdURFMTNcdURFMTUt''@;'; put 'put ''XHVERTE3XHVERTE5LVx1REUzNVx1REU0MC1cdURFNDhcdURFNjAtXHVERTdFXHVERTgwLVx1REU5Rlx1REVDMC1cdURFQzdcdURFQzktXHVERUU0XHVERUVCLVx1REVFRlx1REYwMC1cdURGMzVcdURGNDAtXHVERjU1XHVERjU4LVx1REY3Mlx1REY3OC1cdURGOTFcdURGQTktXHVERkFGXXxc''@;'; put 'put ''dUQ4MDNbXHVEQzAwLVx1REM0OFx1REM4MC1cdURDQjJcdURDQzAtXHVEQ0YyXHVEQ0ZBLVx1REQyM1x1REQzMC1cdUREMzlcdURFNjAtXHVERTdFXHVERTgwLVx1REVBOVx1REVCMFx1REVCMVx1REYwMC1cdURGMjdcdURGMzAtXHVERjQ1XHVERjUxLVx1REY1NFx1REY3MC1cdURGODFcdURG''@;'; put 'put ''QjAtXHVERkNCXHVERkUwLVx1REZGNl18XHVEODA0W1x1REMwMy1cdURDMzdcdURDNTItXHVEQzZGXHVEQzcxXHVEQzcyXHVEQzc1XHVEQzgzLVx1RENBRlx1RENEMC1cdURDRThcdURDRjAtXHVEQ0Y5XHVERDAzLVx1REQyNlx1REQzNi1cdUREM0ZcdURENDRcdURENDdcdURENTAtXHVERDcy''@;'; put 'put ''XHVERDc2XHVERDgzLVx1RERCMlx1RERDMS1cdUREQzRcdURERDAtXHVERERBXHVERERDXHVEREUxLVx1RERGNFx1REUwMC1cdURFMTFcdURFMTMtXHVERTJCXHVERTNGXHVERTQwXHVERTgwLVx1REU4Nlx1REU4OFx1REU4QS1cdURFOERcdURFOEYtXHVERTlEXHVERTlGLVx1REVBOFx1REVC''@;'; put 'put ''MC1cdURFREVcdURFRjAtXHVERUY5XHVERjA1LVx1REYwQ1x1REYwRlx1REYxMFx1REYxMy1cdURGMjhcdURGMkEtXHVERjMwXHVERjMyXHVERjMzXHVERjM1LVx1REYzOVx1REYzRFx1REY1MFx1REY1RC1cdURGNjFdfFx1RDgwNVtcdURDMDAtXHVEQzM0XHVEQzQ3LVx1REM0QVx1REM1MC1c''@;'; put 'put ''dURDNTlcdURDNUYtXHVEQzYxXHVEQzgwLVx1RENBRlx1RENDNFx1RENDNVx1RENDN1x1RENEMC1cdURDRDlcdUREODAtXHVEREFFXHVEREQ4LVx1REREQlx1REUwMC1cdURFMkZcdURFNDRcdURFNTAtXHVERTU5XHVERTgwLVx1REVBQVx1REVCOFx1REVDMC1cdURFQzlcdURGMDAtXHVERjFB''@;'; put 'put ''XHVERjMwLVx1REYzQlx1REY0MC1cdURGNDZdfFx1RDgwNltcdURDMDAtXHVEQzJCXHVEQ0EwLVx1RENGMlx1RENGRi1cdUREMDZcdUREMDlcdUREMEMtXHVERDEzXHVERDE1XHVERDE2XHVERDE4LVx1REQyRlx1REQzRlx1REQ0MVx1REQ1MC1cdURENTlcdUREQTAtXHVEREE3XHVEREFBLVx1''@;'; put 'put ''REREMFx1RERFMVx1RERFM1x1REUwMFx1REUwQi1cdURFMzJcdURFM0FcdURFNTBcdURFNUMtXHVERTg5XHVERTlEXHVERUIwLVx1REVGOF18XHVEODA3W1x1REMwMC1cdURDMDhcdURDMEEtXHVEQzJFXHVEQzQwXHVEQzUwLVx1REM2Q1x1REM3Mi1cdURDOEZcdUREMDAtXHVERDA2XHVERDA4''@;'; put 'put ''XHVERDA5XHVERDBCLVx1REQzMFx1REQ0Nlx1REQ1MC1cdURENTlcdURENjAtXHVERDY1XHVERDY3XHVERDY4XHVERDZBLVx1REQ4OVx1REQ5OFx1RERBMC1cdUREQTlcdURFRTAtXHVERUYyXHVERjAyXHVERjA0LVx1REYxMFx1REYxMi1cdURGMzNcdURGNTAtXHVERjU5XHVERkIwXHVERkMw''@;'; put 'put ''LVx1REZENF18XHVEODA4W1x1REMwMC1cdURGOTldfFx1RDgwOVtcdURDMDAtXHVEQzZFXHVEQzgwLVx1REQ0M118XHVEODBCW1x1REY5MC1cdURGRjBdfFtcdUQ4MENcdUQ4MUMtXHVEODIwXHVEODIyXHVEODQwLVx1RDg2OFx1RDg2QS1cdUQ4NkNcdUQ4NkYtXHVEODcyXHVEODc0LVx1RDg3''@;'; put 'put ''OVx1RDg4MC1cdUQ4ODNcdUQ4ODUtXHVEODg3XVtcdURDMDAtXHVERkZGXXxcdUQ4MERbXHVEQzAwLVx1REMyRlx1REM0MS1cdURDNDZdfFx1RDgxMVtcdURDMDAtXHVERTQ2XXxcdUQ4MUFbXHVEQzAwLVx1REUzOFx1REU0MC1cdURFNUVcdURFNjAtXHVERTY5XHVERTcwLVx1REVCRVx1REVD''@;'; put 'put ''MC1cdURFQzlcdURFRDAtXHVERUVEXHVERjAwLVx1REYyRlx1REY0MC1cdURGNDNcdURGNTAtXHVERjU5XHVERjVCLVx1REY2MVx1REY2My1cdURGNzdcdURGN0QtXHVERjhGXXxcdUQ4MUJbXHVERTQwLVx1REU5Nlx1REYwMC1cdURGNEFcdURGNTBcdURGOTMtXHVERjlGXHVERkUwXHVERkUx''@;'; put 'put ''XHVERkUzXXxcdUQ4MjFbXHVEQzAwLVx1REZGN118XHVEODIzW1x1REMwMC1cdURDRDVcdUREMDAtXHVERDA4XXxcdUQ4MkJbXHVERkYwLVx1REZGM1x1REZGNS1cdURGRkJcdURGRkRcdURGRkVdfFx1RDgyQ1tcdURDMDAtXHVERDIyXHVERDMyXHVERDUwLVx1REQ1Mlx1REQ1NVx1REQ2NC1c''@;'; put 'put ''dURENjdcdURENzAtXHVERUZCXXxcdUQ4MkZbXHVEQzAwLVx1REM2QVx1REM3MC1cdURDN0NcdURDODAtXHVEQzg4XHVEQzkwLVx1REM5OV18XHVEODM0W1x1REVDMC1cdURFRDNcdURFRTAtXHVERUYzXHVERjYwLVx1REY3OF18XHVEODM1W1x1REMwMC1cdURDNTRcdURDNTYtXHVEQzlDXHVE''@;'; put 'put ''QzlFXHVEQzlGXHVEQ0EyXHVEQ0E1XHVEQ0E2XHVEQ0E5LVx1RENBQ1x1RENBRS1cdURDQjlcdURDQkJcdURDQkQtXHVEQ0MzXHVEQ0M1LVx1REQwNVx1REQwNy1cdUREMEFcdUREMEQtXHVERDE0XHVERDE2LVx1REQxQ1x1REQxRS1cdUREMzlcdUREM0ItXHVERDNFXHVERDQwLVx1REQ0NFx1''@;'; put 'put ''REQ0Nlx1REQ0QS1cdURENTBcdURENTItXHVERUE1XHVERUE4LVx1REVDMFx1REVDMi1cdURFREFcdURFREMtXHVERUZBXHVERUZDLVx1REYxNFx1REYxNi1cdURGMzRcdURGMzYtXHVERjRFXHVERjUwLVx1REY2RVx1REY3MC1cdURGODhcdURGOEEtXHVERkE4XHVERkFBLVx1REZDMlx1REZD''@;'; put 'put ''NC1cdURGQ0JcdURGQ0UtXHVERkZGXXxcdUQ4MzdbXHVERjAwLVx1REYxRVx1REYyNS1cdURGMkFdfFx1RDgzOFtcdURDMzAtXHVEQzZEXHVERDAwLVx1REQyQ1x1REQzNy1cdUREM0RcdURENDAtXHVERDQ5XHVERDRFXHVERTkwLVx1REVBRFx1REVDMC1cdURFRUJcdURFRjAtXHVERUY5XXxc''@;'; put 'put ''dUQ4MzlbXHVEQ0QwLVx1RENFQlx1RENGMC1cdURDRjlcdURGRTAtXHVERkU2XHVERkU4LVx1REZFQlx1REZFRFx1REZFRVx1REZGMC1cdURGRkVdfFx1RDgzQVtcdURDMDAtXHVEQ0M0XHVEQ0M3LVx1RENDRlx1REQwMC1cdURENDNcdURENEJcdURENTAtXHVERDU5XXxcdUQ4M0JbXHVEQzcx''@;'; put 'put ''LVx1RENBQlx1RENBRC1cdURDQUZcdURDQjEtXHVEQ0I0XHVERDAxLVx1REQyRFx1REQyRi1cdUREM0RcdURFMDAtXHVERTAzXHVERTA1LVx1REUxRlx1REUyMVx1REUyMlx1REUyNFx1REUyN1x1REUyOS1cdURFMzJcdURFMzQtXHVERTM3XHVERTM5XHVERTNCXHVERTQyXHVERTQ3XHVERTQ5''@;'; put 'put ''XHVERTRCXHVERTRELVx1REU0Rlx1REU1MVx1REU1Mlx1REU1NFx1REU1N1x1REU1OVx1REU1Qlx1REU1RFx1REU1Rlx1REU2MVx1REU2Mlx1REU2NFx1REU2Ny1cdURFNkFcdURFNkMtXHVERTcyXHVERTc0LVx1REU3N1x1REU3OS1cdURFN0NcdURFN0VcdURFODAtXHVERTg5XHVERThCLVx1''@;'; put 'put ''REU5Qlx1REVBMS1cdURFQTNcdURFQTUtXHVERUE5XHVERUFCLVx1REVCQl18XHVEODNDW1x1REQwMC1cdUREMENdfFx1RDgzRVtcdURGRjAtXHVERkY5XXxcdUQ4NjlbXHVEQzAwLVx1REVERlx1REYwMC1cdURGRkZdfFx1RDg2RFtcdURDMDAtXHVERjM5XHVERjQwLVx1REZGRl18XHVEODZF''@;'; put 'put ''W1x1REMwMC1cdURDMURcdURDMjAtXHVERkZGXXxcdUQ4NzNbXHVEQzAwLVx1REVBMVx1REVCMC1cdURGRkZdfFx1RDg3QVtcdURDMDAtXHVERkUwXXxcdUQ4N0VbXHVEQzAwLVx1REUxRF18XHVEODg0W1x1REMwMC1cdURGNEFcdURGNTAtXHVERkZGXXxcdUQ4ODhbXHVEQzAwLVx1REZBRl0p''@;'; put 'put ''LykpJiYoIXJbMV0mJiFyWzJdfHwhZXx8dGhpcy5ydWxlcy5pbmxpbmUucHVuY3R1YXRpb24uZXhlYyhlKSkpe3ZhciBuPXJbMF0ubGVuZ3RoLTEscz1uLHA9MCxnPSIqIj09PXJbMF1bMF0/dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGltQXN0OnRoaXMucnVsZXMuaW5saW5lLmVt''@;'; put 'put ''U3Ryb25nLnJEZWxpbVVuZDtmb3IoZy5sYXN0SW5kZXg9MCx1PXUuc2xpY2UoLTEqdC5sZW5ndGgrbik7bnVsbCE9KHI9Zy5leGVjKHUpKTspe3ZhciBELG89clsxXXx8clsyXXx8clszXXx8cls0XXx8cls1XXx8cls2XTtpZihvKWlmKG89by5sZW5ndGgsclszXXx8cls0XSlzKz1vO2Vsc2Ug''@;'; put 'put ''aWYoKHJbNV18fHJbNl0pJiZuJTMmJiEoKG4rbyklMykpcCs9bztlbHNlIGlmKCEoMDwocy09bykpKXJldHVybiBvPU1hdGgubWluKG8sbytzK3ApLEQ9dC5zbGljZSgwLG4rci5pbmRleCtvKzEpLE1hdGgubWluKG4sbyklMj8obz1ELnNsaWNlKDEsLTEpLHt0eXBlOiJlbSIscmF3OkQsdGV4''@;'; put 'put ''dDpvLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhvKX0pOihvPUQuc2xpY2UoMiwtMikse3R5cGU6InN0cm9uZyIscmF3OkQsdGV4dDpvLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhvKX0pfX19LGkuY29kZXNwYW49ZnVuY3Rpb24obil7dmFyIHUsZSxyO2lmKG49dGhp''@;'; put 'put ''cy5ydWxlcy5pbmxpbmUuY29kZS5leGVjKG4pKXJldHVybiByPW5bMl0ucmVwbGFjZSgvXG4vZywiICIpLHU9L1teIF0vLnRlc3QociksZT0vXiAvLnRlc3QocikmJi8gJC8udGVzdChyKSxyPXkocj11JiZlP3Iuc3Vic3RyaW5nKDEsci5sZW5ndGgtMSk6ciwhMCkse3R5cGU6ImNvZGVzcGFu''@;'; put 'put ''IixyYXc6blswXSx0ZXh0OnJ9fSxpLmJyPWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5ydWxlcy5pbmxpbmUuYnIuZXhlYyh0KSlyZXR1cm57dHlwZToiYnIiLHJhdzp0WzBdfX0saS5kZWw9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmlubGluZS5kZWwuZXhlYyh0KSlyZXR1cm57dHlwZToi''@;'; put 'put ''ZGVsIixyYXc6dFswXSx0ZXh0OnRbMl0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKHRbMl0pfX0saS5hdXRvbGluaz1mdW5jdGlvbihyLHUpe3ZhciBlO2lmKHI9dGhpcy5ydWxlcy5pbmxpbmUuYXV0b2xpbmsuZXhlYyhyKSlyZXR1cm4gdT0iQCI9PT1yWzJdPyJtYWlsdG86Iiso''@;'; put 'put ''ZT15KHRoaXMub3B0aW9ucy5tYW5nbGU/dShyWzFdKTpyWzFdKSk6ZT15KHJbMV0pLHt0eXBlOiJsaW5rIixyYXc6clswXSx0ZXh0OmUsaHJlZjp1LHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzplLHRleHQ6ZX1dfX0saS51cmw9ZnVuY3Rpb24odCx1KXt2YXIgZSxyLG4scztpZihlPXRoaXMu''@;'; put 'put ''cnVsZXMuaW5saW5lLnVybC5leGVjKHQpKXtpZigiQCI9PT1lWzJdKW49Im1haWx0bzoiKyhyPXkodGhpcy5vcHRpb25zLm1hbmdsZT91KGVbMF0pOmVbMF0pKTtlbHNle2Zvcig7cz1lWzBdLGVbMF09dGhpcy5ydWxlcy5pbmxpbmUuX2JhY2twZWRhbC5leGVjKGVbMF0pWzBdLHMhPT1lWzBd''@;'; put 'put ''Oyk7cj15KGVbMF0pLG49Ind3dy4iPT09ZVsxXT8iaHR0cDovLyIrZVswXTplWzBdfXJldHVybnt0eXBlOiJsaW5rIixyYXc6ZVswXSx0ZXh0OnIsaHJlZjpuLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpyLHRleHQ6cn1dfX19LGkuaW5saW5lVGV4dD1mdW5jdGlvbih0LHUpe2lmKHQ9dGhp''@;'; put 'put ''cy5ydWxlcy5pbmxpbmUudGV4dC5leGVjKHQpKXJldHVybiB1PXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz90aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKHRbMF0pOnkodFswXSk6dFswXTp5KHRoaXMub3B0aW9u''@;'; put 'put ''cy5zbWFydHlwYW50cz91KHRbMF0pOnRbMF0pLHt0eXBlOiJ0ZXh0IixyYXc6dFswXSx0ZXh0OnV9fSxhfSgpLGY9e25ld2xpbmU6L14oPzogKig/OlxufCQpKSsvLGNvZGU6L14oIHs0fVteXG5dKyg/OlxuKD86ICooPzpcbnwkKSkqKT8pKy8sZmVuY2VzOi9eIHswLDN9KGB7Myx9KD89W15g''@;'; put 'put ''XG5dKig/OlxufCQpKXx+ezMsfSkoW15cbl0qKSg/OlxufCQpKD86fChbXHNcU10qPykoPzpcbnwkKSkoPzogezAsM31cMVt+YF0qICooPz1cbnwkKXwkKS8saHI6L14gezAsM30oKD86LVtcdCBdKil7Myx9fCg/Ol9bIFx0XSopezMsfXwoPzpcKlsgXHRdKil7Myx9KSg/OlxuK3wkKS8saGVh''@;'; put 'put ''ZGluZzovXiB7MCwzfSgjezEsNn0pKD89XHN8JCkoLiopKD86XG4rfCQpLyxibG9ja3F1b3RlOi9eKCB7MCwzfT4gPyhwYXJhZ3JhcGh8W15cbl0qKSg/OlxufCQpKSsvLGxpc3Q6L14oIHswLDN9YnVsbCkoWyBcdF1bXlxuXSs/KT8oPzpcbnwkKS8saHRtbDoiXiB7MCwzfSg/Ojwoc2NyaXB0''@;'; put 'put ''fHByZXxzdHlsZXx0ZXh0YXJlYSlbXFxzPl1bXFxzXFxTXSo/KD86PC9cXDE+W15cXG5dKlxcbit8JCl8Y29tbWVudFteXFxuXSooXFxuK3wkKXw8XFw/W1xcc1xcU10qPyg/OlxcPz5cXG4qfCQpfDwhW0EtWl1bXFxzXFxTXSo/KD86Plxcbip8JCl8PCFcXFtDREFUQVxcW1tcXHNcXFNdKj8o''@;'; put 'put ''PzpcXF1cXF0+XFxuKnwkKXw8Lz8odGFnKSg/OiArfFxcbnwvPz4pW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCl8PCg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpKFthLXpdW1xcdy1dKikoPzphdHRyaWJ1dGUpKj8gKi8/Pig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/''@;'; put 'put ''Oig/OlxcbiAqKStcXG58JCl8PC8oPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVthLXpdW1xcdy1dKlxccyo+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKSkiLGRlZjovXiB7MCwzfVxbKGxhYmVsKVxdOiAqKD86XG4gKik/KFtePFxzXVteXHNd''@;'; put 'put ''Knw8Lio/PikoPzooPzogKyg/OlxuICopP3wgKlxuICopKHRpdGxlKSk/ICooPzpcbit8JCkvLHRhYmxlOkksbGhlYWRpbmc6L14oKD86KD8hXmJ1bGwgKS58XG4oPyFcbnxidWxsICkpKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLF9wYXJhZ3JhcGg6L14oW15cbl0rKD86XG4oPyFo''@;'; put 'put ''cnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8ZmVuY2VzfGxpc3R8aHRtbHx0YWJsZXwgK1xuKVteXG5dKykqKS8sdGV4dDovXlteXG5dKy8sX2xhYmVsOi8oPyFccypcXSkoPzpcXC58W15cW1xdXFxdKSsvLF90aXRsZTovKD86Iig/OlxcIj98W14iXFxdKSoifCdbXidcbl0qKD86XG5b''@;'; put 'put ''Xidcbl0rKSpcbj8nfFwoW14oKV0qXCkpL30sYz0oZi5kZWY9RShmLmRlZikucmVwbGFjZSgibGFiZWwiLGYuX2xhYmVsKS5yZXBsYWNlKCJ0aXRsZSIsZi5fdGl0bGUpLmdldFJlZ2V4KCksZi5idWxsZXQ9Lyg/OlsqKy1dfFxkezEsOX1bLildKS8sZi5saXN0SXRlbVN0YXJ0PUUoL14oICop''@;'; put 'put ''KGJ1bGwpICovKS5yZXBsYWNlKCJidWxsIixmLmJ1bGxldCkuZ2V0UmVnZXgoKSxmLmxpc3Q9RShmLmxpc3QpLnJlcGxhY2UoL2J1bGwvZyxmLmJ1bGxldCkucmVwbGFjZSgiaHIiLCJcXG4rKD89XFwxPyg/Oig/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wk''@;'; put 'put ''KSkiKS5yZXBsYWNlKCJkZWYiLCJcXG4rKD89IitmLmRlZi5zb3VyY2UrIikiKS5nZXRSZWdleCgpLGYuX3RhZz0iYWRkcmVzc3xhcnRpY2xlfGFzaWRlfGJhc2V8YmFzZWZvbnR8YmxvY2txdW90ZXxib2R5fGNhcHRpb258Y2VudGVyfGNvbHxjb2xncm91cHxkZHxkZXRhaWxzfGRpYWxvZ3xk''@;'; put 'put ''aXJ8ZGl2fGRsfGR0fGZpZWxkc2V0fGZpZ2NhcHRpb258ZmlndXJlfGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGhbMS02XXxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bWV0YXxuYXZ8bm9mcmFtZXN8b2x8b3B0Z3JvdXB8''@;'; put 'put ''b3B0aW9ufHB8cGFyYW18c2VjdGlvbnxzb3VyY2V8c3VtbWFyeXx0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0aGVhZHx0aXRsZXx0cnx0cmFja3x1bCIsZi5fY29tbWVudD0vPCEtLSg/IS0/PilbXHNcU10qPyg/Oi0tPnwkKS8sZi5odG1sPUUoZi5odG1sLCJpIikucmVwbGFjZSgiY29tbWVu''@;'; put 'put ''dCIsZi5fY29tbWVudCkucmVwbGFjZSgidGFnIixmLl90YWcpLnJlcGxhY2UoImF0dHJpYnV0ZSIsLyArW2EtekEtWjpfXVtcdy46LV0qKD86ICo9ICoiW14iXG5dKiJ8ICo9IConW14nXG5dKid8ICo9ICpbXlxzIic9PD5gXSspPy8pLmdldFJlZ2V4KCksZi5saGVhZGluZz1FKGYubGhlYWRp''@;'; put 'put ''bmcpLnJlcGxhY2UoL2J1bGwvZyxmLmJ1bGxldCkuZ2V0UmVnZXgoKSxmLnBhcmFncmFwaD1FKGYuX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLGYuaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgifHRhYmxlIiwi''@;'; put 'put ''IikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86''@;'; put 'put ''dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLGYuX3RhZykuZ2V0UmVnZXgoKSxmLmJsb2NrcXVvdGU9RShmLmJsb2NrcXVvdGUpLnJlcGxhY2UoInBhcmFncmFwaCIsZi5wYXJhZ3JhcGgpLmdldFJlZ2V4KCksZi5u''@;'; put 'put ''b3JtYWw9dih7fSxmKSxmLmdmbT12KHt9LGYubm9ybWFsLHt0YWJsZToiXiAqKFteXFxuIF0uKlxcfC4qKVxcbiB7MCwzfSg/OlxcfCAqKT8oOj8tKzo/ICooPzpcXHwgKjo/LSs6PyAqKSopKD86XFx8ICopPyg/OlxcbigoPzooPyEgKlxcbnxocnxoZWFkaW5nfGJsb2NrcXVvdGV8Y29kZXxm''@;'; put 'put ''ZW5jZXN8bGlzdHxodG1sKS4qKD86XFxufCQpKSopXFxuKnwkKSJ9KSxmLmdmbS50YWJsZT1FKGYuZ2ZtLnRhYmxlKS5yZXBsYWNlKCJociIsZi5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImNv''@;'; put 'put ''ZGUiLCIgezR9W15cXG5dIikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+''@;'; put 'put ''KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixmLl90YWcpLmdldFJlZ2V4KCksZi5nZm0ucGFyYWdyYXBoPUUoZi5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsZi5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNl''@;'; put 'put ''KCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ0YWJsZSIsZi5nZm0udGFibGUpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAs''@;'; put 'put ''M30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixmLl90YWcpLmdldFJlZ2V4KCksZi5wZWRhbnRpYz12KHt9LGYubm9ybWFsLHtodG1sOkUo''@;'; put 'put ''Il4gKig/OmNvbW1lbnQgKig/OlxcbnxcXHMqJCl8PCh0YWcpW1xcc1xcU10rPzwvXFwxPiAqKD86XFxuezIsfXxcXHMqJCl8PHRhZyg/OlwiW15cIl0qXCJ8J1teJ10qJ3xcXHNbXidcIi8+XFxzXSopKj8vPz4gKig/OlxcbnsyLH18XFxzKiQpKSIpLnJlcGxhY2UoImNvbW1lbnQiLGYuX2Nv''@;'; put 'put ''bW1lbnQpLnJlcGxhY2UoL3RhZy9nLCIoPyEoPzphfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3VifHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkb3xzcGFufGJyfHdicnxpbnN8ZGVsfGltZylcXGIpXFx3Kyg/''@;'; put 'put ''ITp8W15cXHdcXHNAXSpAKVxcYiIpLmdldFJlZ2V4KCksZGVmOi9eICpcWyhbXlxdXSspXF06ICo8PyhbXlxzPl0rKT4/KD86ICsoWyIoXVteXG5dK1siKV0pKT8gKig/OlxuK3wkKS8saGVhZGluZzovXigjezEsNn0pKC4qKSg/OlxuK3wkKS8sZmVuY2VzOkksbGhlYWRpbmc6L14oLis/KVxu''@;'; put 'put ''IHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6RShmLm5vcm1hbC5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsZi5ocikucmVwbGFjZSgiaGVhZGluZyIsIiAqI3sxLDZ9ICpbXlxuXSIpLnJlcGxhY2UoImxoZWFkaW5nIixmLmxoZWFkaW5nKS5yZXBsYWNlKCJibG9ja3F1b3Rl''@;'; put 'put ''IiwiIHswLDN9PiIpLnJlcGxhY2UoInxmZW5jZXMiLCIiKS5yZXBsYWNlKCJ8bGlzdCIsIiIpLnJlcGxhY2UoInxodG1sIiwiIikuZ2V0UmVnZXgoKX0pLHtlc2NhcGU6L15cXChbISIjJCUmJygpKissXC0uLzo7PD0+P0BcW1xdXFxeX2B7fH1+XSkvLGF1dG9saW5rOi9ePChzY2hlbWU6W15c''@;'; put 'put ''c1x4MDAtXHgxZjw+XSp8ZW1haWwpPi8sdXJsOkksdGFnOiJeY29tbWVudHxePC9bYS16QS1aXVtcXHc6LV0qXFxzKj58XjxbYS16QS1aXVtcXHctXSooPzphdHRyaWJ1dGUpKj9cXHMqLz8+fF48XFw/W1xcc1xcU10qP1xcPz58XjwhW2EtekEtWl0rXFxzW1xcc1xcU10qPz58XjwhXFxbQ0RB''@;'; put 'put ''VEFcXFtbXFxzXFxTXSo/XFxdXFxdPiIsbGluazovXiE/XFsobGFiZWwpXF1cKFxzKihocmVmKSg/OlxzKyh0aXRsZSkpP1xzKlwpLyxyZWZsaW5rOi9eIT9cWyhsYWJlbClcXVxbKHJlZilcXS8sbm9saW5rOi9eIT9cWyhyZWYpXF0oPzpcW1xdKT8vLHJlZmxpbmtTZWFyY2g6InJlZmxpbmt8''@;'; put 'put ''bm9saW5rKD8hXFwoKSIsZW1TdHJvbmc6e2xEZWxpbTovXig/OlwqKyg/OigoPyFcKilbcHVuY3RdKXxbXlxzKl0pKXxeXysoPzooKD8hXylbcHVuY3RdKXwoW15cc19dKSkvLHJEZWxpbUFzdDovXlteXypdKj9fX1teXypdKj9cKlteXypdKj8oPz1fXyl8W14qXSsoPz1bXipdKXwoPyFcKilb''@;'; put 'put ''cHVuY3RdKFwqKykoPz1bXHNdfCQpfFtecHVuY3Rcc10oXCorKSg/IVwqKSg/PVtwdW5jdFxzXXwkKXwoPyFcKilbcHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pfFtcc10oXCorKSg/IVwqKSg/PVtwdW5jdF0pfCg/IVwqKVtwdW5jdF0oXCorKSg/IVwqKSg/PVtwdW5jdF0pfFtecHVuY3Rc''@;'; put 'put ''c10oXCorKSg/PVtecHVuY3Rcc10pLyxyRGVsaW1VbmQ6L15bXl8qXSo/XCpcKlteXypdKj9fW15fKl0qPyg/PVwqXCopfFteX10rKD89W15fXSl8KD8hXylbcHVuY3RdKF8rKSg/PVtcc118JCl8W15wdW5jdFxzXShfKykoPyFfKSg/PVtwdW5jdFxzXXwkKXwoPyFfKVtwdW5jdFxzXShfKyko''@;'; put 'put ''Pz1bXnB1bmN0XHNdKXxbXHNdKF8rKSg/IV8pKD89W3B1bmN0XSl8KD8hXylbcHVuY3RdKF8rKSg/IV8pKD89W3B1bmN0XSkvfSxjb2RlOi9eKGArKShbXmBdfFteYF1bXHNcU10qP1teYF0pXDEoPyFgKS8sYnI6L14oIHsyLH18XFwpXG4oPyFccyokKS8sZGVsOkksdGV4dDovXihgK3xbXmBd''@;'; put 'put ''KSg/Oig/PSB7Mix9XG4pfFtcc1xTXSo/KD86KD89W1xcPCFcW2AqX118XGJffCQpfFteIF0oPz0gezIsfVxuKSkpLyxwdW5jdHVhdGlvbjovXigoPyFbKl9dKVtcc3B1bmN0dWF0aW9uXSkvfSk7ZnVuY3Rpb24ga2UoYSl7cmV0dXJuIGEucmVwbGFjZSgvLS0tL2csIlx1MjAxNCIpLnJlcGxh''@;'; put 'put ''Y2UoLy0tL2csIlx1MjAxMyIpLnJlcGxhY2UoLyhefFstXHUyMDE0LyhcW3siXHNdKScvZywiJDFcdTIwMTgiKS5yZXBsYWNlKC8nL2csIlx1MjAxOSIpLnJlcGxhY2UoLyhefFstXHUyMDE0LyhcW3tcdTIwMThcc10pIi9nLCIkMVx1MjAxYyIpLnJlcGxhY2UoLyIvZywiXHUyMDFkIikucmVw''@;'; put 'put ''bGFjZSgvXC57M30vZywiXHUyMDI2Iil9ZnVuY3Rpb24gc2UoYSl7Zm9yKHZhciBpLHQ9IiIsdT1hLmxlbmd0aCxlPTA7ZTx1O2UrKylpPWEuY2hhckNvZGVBdChlKSx0Kz0iJiMiKyhpPS41PE1hdGgucmFuZG9tKCk/IngiK2kudG9TdHJpbmcoMTYpOmkpKyI7IjtyZXR1cm4gdH1jLl9wdW5j''@;'; put 'put ''dHVhdGlvbj0iXFxwe1B9JCs8PT5gXnx+IixjLnB1bmN0dWF0aW9uPUUoYy5wdW5jdHVhdGlvbiwidSIpLnJlcGxhY2UoL3B1bmN0dWF0aW9uL2csYy5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksYy5ibG9ja1NraXA9L1xbW15bXF1dKj9cXVwoW15cKFwpXSo/XCl8YFteYF0qP2B8PFtePD5d''@;'; put 'put ''Kj8+L2csYy5hbnlQdW5jdHVhdGlvbj0vXFxbcHVuY3RdL2csYy5fZXNjYXBlcz0vXFwoW3B1bmN0XSkvZyxjLl9jb21tZW50PUUoZi5fY29tbWVudCkucmVwbGFjZSgiKD86LS1ceDNlfCQpIiwiLS1ceDNlIikuZ2V0UmVnZXgoKSxjLmVtU3Ryb25nLmxEZWxpbT1FKGMuZW1TdHJvbmcubERl''@;'; put 'put ''bGltLCJ1IikucmVwbGFjZSgvcHVuY3QvZyxjLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxjLmVtU3Ryb25nLnJEZWxpbUFzdD1FKGMuZW1TdHJvbmcuckRlbGltQXN0LCJndSIpLnJlcGxhY2UoL3B1bmN0L2csYy5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksYy5lbVN0cm9uZy5yRGVsaW1V''@;'; put 'put ''bmQ9RShjLmVtU3Ryb25nLnJEZWxpbVVuZCwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLGMuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLGMuYW55UHVuY3R1YXRpb249RShjLmFueVB1bmN0dWF0aW9uLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csYy5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksYy5f''@;'; put 'put ''ZXNjYXBlcz1FKGMuX2VzY2FwZXMsImd1IikucmVwbGFjZSgvcHVuY3QvZyxjLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxjLl9zY2hlbWU9L1thLXpBLVpdW2EtekEtWjAtOSsuLV17MSwzMX0vLGMuX2VtYWlsPS9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVow''@;'; put 'put ''LTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8sYy5hdXRvbGluaz1FKGMuYXV0b2xpbmspLnJlcGxhY2UoInNjaGVtZSIsYy5fc2NoZW1lKS5yZXBsYWNlKCJlbWFp''@;'; put 'put ''bCIsYy5fZW1haWwpLmdldFJlZ2V4KCksYy5fYXR0cmlidXRlPS9ccytbYS16QS1aOl9dW1x3LjotXSooPzpccyo9XHMqIlteIl0qInxccyo9XHMqJ1teJ10qJ3xccyo9XHMqW15ccyInPTw+YF0rKT8vLGMudGFnPUUoYy50YWcpLnJlcGxhY2UoImNvbW1lbnQiLGMuX2NvbW1lbnQpLnJlcGxh''@;'; put 'put ''Y2UoImF0dHJpYnV0ZSIsYy5fYXR0cmlidXRlKS5nZXRSZWdleCgpLGMuX2xhYmVsPS8oPzpcWyg/OlxcLnxbXlxbXF1cXF0pKlxdfFxcLnxgW15gXSpgfFteXFtcXVxcYF0pKj8vLGMuX2hyZWY9LzwoPzpcXC58W15cbjw+XFxdKSs+fFteXHNceDAwLVx4MWZdKi8sYy5fdGl0bGU9LyIoPzpc''@;'; put 'put ''XCI/fFteIlxcXSkqInwnKD86XFwnP3xbXidcXF0pKid8XCgoPzpcXFwpP3xbXilcXF0pKlwpLyxjLmxpbms9RShjLmxpbmspLnJlcGxhY2UoImxhYmVsIixjLl9sYWJlbCkucmVwbGFjZSgiaHJlZiIsYy5faHJlZikucmVwbGFjZSgidGl0bGUiLGMuX3RpdGxlKS5nZXRSZWdleCgpLGMucmVm''@;'; put 'put ''bGluaz1FKGMucmVmbGluaykucmVwbGFjZSgibGFiZWwiLGMuX2xhYmVsKS5yZXBsYWNlKCJyZWYiLGYuX2xhYmVsKS5nZXRSZWdleCgpLGMubm9saW5rPUUoYy5ub2xpbmspLnJlcGxhY2UoInJlZiIsZi5fbGFiZWwpLmdldFJlZ2V4KCksYy5yZWZsaW5rU2VhcmNoPUUoYy5yZWZsaW5rU2Vh''@;'; put 'put ''cmNoLCJnIikucmVwbGFjZSgicmVmbGluayIsYy5yZWZsaW5rKS5yZXBsYWNlKCJub2xpbmsiLGMubm9saW5rKS5nZXRSZWdleCgpLGMubm9ybWFsPXYoe30sYyksYy5wZWRhbnRpYz12KHt9LGMubm9ybWFsLHtzdHJvbmc6e3N0YXJ0Oi9eX198XCpcKi8sbWlkZGxlOi9eX18oPz1cUykoW1xz''@;'; put 'put ''XFNdKj9cUylfXyg/IV8pfF5cKlwqKD89XFMpKFtcc1xTXSo/XFMpXCpcKig/IVwqKS8sZW5kQXN0Oi9cKlwqKD8hXCopL2csZW5kVW5kOi9fXyg/IV8pL2d9LGVtOntzdGFydDovXl98XCovLG1pZGRsZTovXigpXCooPz1cUykoW1xzXFNdKj9cUylcKig/IVwqKXxeXyg/PVxTKShbXHNcU10q''@;'; put 'put ''P1xTKV8oPyFfKS8sZW5kQXN0Oi9cKig/IVwqKS9nLGVuZFVuZDovXyg/IV8pL2d9LGxpbms6RSgvXiE/XFsobGFiZWwpXF1cKCguKj8pXCkvKS5yZXBsYWNlKCJsYWJlbCIsYy5fbGFiZWwpLmdldFJlZ2V4KCkscmVmbGluazpFKC9eIT9cWyhsYWJlbClcXVxzKlxbKFteXF1dKilcXS8pLnJl''@;'; put 'put ''cGxhY2UoImxhYmVsIixjLl9sYWJlbCkuZ2V0UmVnZXgoKX0pLGMuZ2ZtPXYoe30sYy5ub3JtYWwse2VzY2FwZTpFKGMuZXNjYXBlKS5yZXBsYWNlKCJdKSIsIn58XSkiKS5nZXRSZWdleCgpLF9leHRlbmRlZF9lbWFpbDovW0EtWmEtejAtOS5fKy1dKyhAKVthLXpBLVowLTktX10rKD86XC5b''@;'; put 'put ''YS16QS1aMC05LV9dKlthLXpBLVowLTldKSsoPyFbLV9dKS8sdXJsOi9eKCg/OmZ0cHxodHRwcz8pOlwvXC98d3d3XC4pKD86W2EtekEtWjAtOVwtXStcLj8pK1teXHM8XSp8XmVtYWlsLyxfYmFja3BlZGFsOi8oPzpbXj8hLiw6OypfJyJ+KCkmXSt8XChbXildKlwpfCYoPyFbYS16QS1aMC05''@;'; put 'put ''XSs7JCl8Wz8hLiw6OypfJyJ+KV0rKD8hJCkpKy8sZGVsOi9eKH5+PykoPz1bXlxzfl0pKFtcc1xTXSo/W15cc35dKVwxKD89W15+XXwkKS8sdGV4dDovXihbYH5dK3xbXmB+XSkoPzooPz0gezIsfVxuKXwoPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKXxbXHNcU10qPyg/''@;'; put 'put ''Oig/PVtcXDwhXFtgKn5fXXxcYl98aHR0cHM/OlwvXC98ZnRwOlwvXC98d3d3XC58JCl8W14gXSg/PSB7Mix9XG4pfFteYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXSg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApKSkvfSksYy5nZm0udXJsPUUoYy5nZm0udXJs''@;'; put 'put ''LCJpIikucmVwbGFjZSgiZW1haWwiLGMuZ2ZtLl9leHRlbmRlZF9lbWFpbCkuZ2V0UmVnZXgoKSxjLmJyZWFrcz12KHt9LGMuZ2ZtLHticjpFKGMuYnIpLnJlcGxhY2UoInsyLH0iLCIqIikuZ2V0UmVnZXgoKSx0ZXh0OkUoYy5nZm0udGV4dCkucmVwbGFjZSgiXFxiXyIsIlxcYl98IHsyLH1c''@;'; put 'put ''XG4iKS5yZXBsYWNlKC9cezIsXH0vZywiKiIpLmdldFJlZ2V4KCl9KTt2YXIgUz1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoZSl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnM9ZXx8Qy5kZWZhdWx0cyx0aGlzLm9wdGlvbnMu''@;'; put 'put ''dG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXJ8fG5ldyBqLHRoaXMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXIsdGhpcy50b2tlbml6ZXIub3B0aW9ucz10aGlzLm9wdGlvbnMsKHRoaXMudG9rZW5pemVyLmxleGVyPXRoaXMpLmlubGluZVF1ZXVlPVtdLHRoaXMuc3Rh''@;'; put 'put ''dGU9e2luTGluazohMSxpblJhd0Jsb2NrOiExLHRvcDohMH0sZT17YmxvY2s6Zi5ub3JtYWwsaW5saW5lOmMubm9ybWFsfSx0aGlzLm9wdGlvbnMucGVkYW50aWM/KGUuYmxvY2s9Zi5wZWRhbnRpYyxlLmlubGluZT1jLnBlZGFudGljKTp0aGlzLm9wdGlvbnMuZ2ZtJiYoZS5ibG9jaz1mLmdm''@;'; put 'put ''bSxlLmlubGluZT10aGlzLm9wdGlvbnMuYnJlYWtzP2MuYnJlYWtzOmMuZ2ZtKSx0aGlzLnRva2VuaXplci5ydWxlcz1lfWEubGV4PWZ1bmN0aW9uKGUscil7cmV0dXJuIG5ldyBhKHIpLmxleChlKX0sYS5sZXhJbmxpbmU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbmV3IGEocikuaW5saW5lVG9r''@;'; put 'put ''ZW5zKGUpfTt2YXIgdCx1PWEucHJvdG90eXBlO3JldHVybiB1LmxleD1mdW5jdGlvbihlKXt2YXIgcjtmb3IoZT1lLnJlcGxhY2UoL1xyXG58XHIvZywiXG4iKSx0aGlzLmJsb2NrVG9rZW5zKGUsdGhpcy50b2tlbnMpO3I9dGhpcy5pbmxpbmVRdWV1ZS5zaGlmdCgpOyl0aGlzLmlubGluZVRv''@;'; put 'put ''a2VucyhyLnNyYyxyLnRva2Vucyk7cmV0dXJuIHRoaXMudG9rZW5zfSx1LmJsb2NrVG9rZW5zPWZ1bmN0aW9uKGUscil7dmFyIG4scyxwLGcsRD10aGlzO2Zvcih2b2lkIDA9PT1yJiYocj1bXSksZT10aGlzLm9wdGlvbnMucGVkYW50aWM/ZS5yZXBsYWNlKC9cdC9nLCIgICAgIikucmVwbGFj''@;'; put 'put ''ZSgvXiArJC9nbSwiIik6ZS5yZXBsYWNlKC9eKCAqKShcdCspL2dtLGZ1bmN0aW9uKEYsZCx4KXtyZXR1cm4gZCsiICAgICIucmVwZWF0KHgubGVuZ3RoKX0pO2U7KXt2YXIgbz1mdW5jdGlvbigpe2lmKEQub3B0aW9ucy5leHRlbnNpb25zJiZELm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jayYm''@;'; put 'put ''RC5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2suc29tZShmdW5jdGlvbihsKXtyZXR1cm4hIShuPWwuY2FsbCh7bGV4ZXI6RH0sZSxyKSkmJihlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pLCEwKX0pKXJldHVybiJjb250aW51ZSI7aWYobj1ELnRva2VuaXplci5zcGFjZShl''@;'; put 'put ''KSlyZXR1cm4gZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLDE9PT1uLnJhdy5sZW5ndGgmJjA8ci5sZW5ndGg/cltyLmxlbmd0aC0xXS5yYXcrPSJcbiI6ci5wdXNoKG4pLCJjb250aW51ZSI7aWYobj1ELnRva2VuaXplci5jb2RlKGUpKXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxl''@;'; put 'put ''bmd0aCksIShzPXJbci5sZW5ndGgtMV0pfHwicGFyYWdyYXBoIiE9PXMudHlwZSYmInRleHQiIT09cy50eXBlP3IucHVzaChuKToocy5yYXcrPSJcbiIrbi5yYXcscy50ZXh0Kz0iXG4iK24udGV4dCxELmlubGluZVF1ZXVlW0QuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1zLnRleHQpLCJj''@;'; put 'put ''b250aW51ZSI7aWYoKG49RC50b2tlbml6ZXIuZmVuY2VzKGUpKXx8KG49RC50b2tlbml6ZXIuaGVhZGluZyhlKSl8fChuPUQudG9rZW5pemVyLmhyKGUpKXx8KG49RC50b2tlbml6ZXIuYmxvY2txdW90ZShlKSl8fChuPUQudG9rZW5pemVyLmxpc3QoZSkpfHwobj1ELnRva2VuaXplci5odG1s''@;'; put 'put ''KGUpKSlyZXR1cm4gZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLHIucHVzaChuKSwiY29udGludWUiO2lmKG49RC50b2tlbml6ZXIuZGVmKGUpKXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksIShzPXJbci5sZW5ndGgtMV0pfHwicGFyYWdyYXBoIiE9PXMudHlwZSYmInRl''@;'; put 'put ''eHQiIT09cy50eXBlP0QudG9rZW5zLmxpbmtzW24udGFnXXx8KEQudG9rZW5zLmxpbmtzW24udGFnXT17aHJlZjpuLmhyZWYsdGl0bGU6bi50aXRsZX0pOihzLnJhdys9IlxuIituLnJhdyxzLnRleHQrPSJcbiIrbi5yYXcsRC5pbmxpbmVRdWV1ZVtELmlubGluZVF1ZXVlLmxlbmd0aC0xXS5z''@;'; put 'put ''cmM9cy50ZXh0KSwiY29udGludWUiO2lmKChuPUQudG9rZW5pemVyLnRhYmxlKGUpKXx8KG49RC50b2tlbml6ZXIubGhlYWRpbmcoZSkpKXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pLCJjb250aW51ZSI7dmFyIEYsZCx4O2lmKHA9ZSxELm9wdGlvbnMuZXh0''@;'; put 'put ''ZW5zaW9ucyYmRC5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jayYmKEY9MS8wLGQ9ZS5zbGljZSgxKSxELm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrLmZvckVhY2goZnVuY3Rpb24obCl7Im51bWJlciI9PXR5cGVvZih4PWwuY2FsbCh7bGV4ZXI6dGhpc30sZCkpJiYwPD14JiYo''@;'; put 'put ''Rj1NYXRoLm1pbihGLHgpKX0pLEY8MS8wKSYmMDw9RiYmKHA9ZS5zdWJzdHJpbmcoMCxGKzEpKSxELnN0YXRlLnRvcCYmKG49RC50b2tlbml6ZXIucGFyYWdyYXBoKHApKSlyZXR1cm4gcz1yW3IubGVuZ3RoLTFdLGcmJiJwYXJhZ3JhcGgiPT09cy50eXBlPyhzLnJhdys9IlxuIituLnJhdyxz''@;'; put 'put ''LnRleHQrPSJcbiIrbi50ZXh0LEQuaW5saW5lUXVldWUucG9wKCksRC5pbmxpbmVRdWV1ZVtELmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9cy50ZXh0KTpyLnB1c2gobiksZz1wLmxlbmd0aCE9PWUubGVuZ3RoLGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSwiY29udGludWUiO2lmKG49''@;'; put 'put ''RC50b2tlbml6ZXIudGV4dChlKSlyZXR1cm4gZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLChzPXJbci5sZW5ndGgtMV0pJiYidGV4dCI9PT1zLnR5cGU/KHMucmF3Kz0iXG4iK24ucmF3LHMudGV4dCs9IlxuIituLnRleHQsRC5pbmxpbmVRdWV1ZS5wb3AoKSxELmlubGluZVF1ZXVlW0Qu''@;'; put 'put ''aW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1zLnRleHQpOnIucHVzaChuKSwiY29udGludWUiO2lmKGUpe3ZhciBoPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApO2lmKEQub3B0aW9ucy5zaWxlbnQpcmV0dXJuIGNvbnNvbGUuZXJyb3IoaCksImJyZWFrIjt0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoaCl9fSgpO2lmKCJjb250aW51ZSIhPT1vJiYiYnJlYWsiPT09bylicmVha31yZXR1cm4gdGhpcy5zdGF0ZS50b3A9ITAscn0sdS5pbmxpbmU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5pbmxpbmVRdWV1ZS5wdXNoKHtzcmM6ZSx0b2tlbnM6cj12b2lkIDA9PT1yP1td''@;'; put 'put ''OnJ9KSxyfSx1LmlubGluZVRva2Vucz1mdW5jdGlvbihlLHIpe3ZhciBuLHMscCxnLEQsbyxGPXRoaXMsZD0odm9pZCAwPT09ciYmKHI9W10pLGUpO2lmKHRoaXMudG9rZW5zLmxpbmtzKXt2YXIgeD1PYmplY3Qua2V5cyh0aGlzLnRva2Vucy5saW5rcyk7aWYoMDx4Lmxlbmd0aClmb3IoO251''@;'; put 'put ''bGwhPShnPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmV4ZWMoZCkpOyl4LmluY2x1ZGVzKGdbMF0uc2xpY2UoZ1swXS5sYXN0SW5kZXhPZigiWyIpKzEsLTEpKSYmKGQ9ZC5zbGljZSgwLGcuaW5kZXgpKyJbIisiYSIucmVwZWF0KGdbMF0ubGVuZ3RoLTIpKyJd''@;'; put 'put ''IitkLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmxhc3RJbmRleCkpfWZvcig7bnVsbCE9KGc9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5leGVjKGQpKTspZD1kLnNsaWNlKDAsZy5pbmRleCkrIlsiKyJhIi5yZXBlYXQoZ1sw''@;'; put 'put ''XS5sZW5ndGgtMikrIl0iK2Quc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5sYXN0SW5kZXgpO2Zvcig7bnVsbCE9KGc9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmV4ZWMoZCkpOylkPWQuc2xpY2UoMCxnLmluZGV4KSsiKysi''@;'; put 'put ''K2Quc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmxhc3RJbmRleCk7Zm9yKDtlOyl7dmFyIGg9ZnVuY3Rpb24oKXtpZihEfHwobz0iIiksRD0hMSxGLm9wdGlvbnMuZXh0ZW5zaW9ucyYmRi5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lJiZGLm9wdGlv''@;'; put 'put ''bnMuZXh0ZW5zaW9ucy5pbmxpbmUuc29tZShmdW5jdGlvbihBKXtyZXR1cm4hIShuPUEuY2FsbCh7bGV4ZXI6Rn0sZSxyKSkmJihlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pLCEwKX0pKXJldHVybiJjb250aW51ZSI7aWYobj1GLnRva2VuaXplci5lc2NhcGUoZSkpcmV0''@;'; put 'put ''dXJuIGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobiksImNvbnRpbnVlIjtpZihuPUYudG9rZW5pemVyLnRhZyhlKSlyZXR1cm4gZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLChzPXJbci5sZW5ndGgtMV0pJiYidGV4dCI9PT1uLnR5cGUmJiJ0ZXh0Ij09PXMudHlwZT8o''@;'; put 'put ''cy5yYXcrPW4ucmF3LHMudGV4dCs9bi50ZXh0KTpyLnB1c2gobiksImNvbnRpbnVlIjtpZihuPUYudG9rZW5pemVyLmxpbmsoZSkpcmV0dXJuIGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobiksImNvbnRpbnVlIjtpZihuPUYudG9rZW5pemVyLnJlZmxpbmsoZSxGLnRva2Vu''@;'; put 'put ''cy5saW5rcykpcmV0dXJuIGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSwocz1yW3IubGVuZ3RoLTFdKSYmInRleHQiPT09bi50eXBlJiYidGV4dCI9PT1zLnR5cGU/KHMucmF3Kz1uLnJhdyxzLnRleHQrPW4udGV4dCk6ci5wdXNoKG4pLCJjb250aW51ZSI7aWYoKG49Ri50b2tlbml6ZXIu''@;'; put 'put ''ZW1TdHJvbmcoZSxkLG8pKXx8KG49Ri50b2tlbml6ZXIuY29kZXNwYW4oZSkpfHwobj1GLnRva2VuaXplci5icihlKSl8fChuPUYudG9rZW5pemVyLmRlbChlKSl8fChuPUYudG9rZW5pemVyLmF1dG9saW5rKGUsc2UpKXx8IUYuc3RhdGUuaW5MaW5rJiYobj1GLnRva2VuaXplci51cmwoZSxz''@;'; put 'put ''ZSkpKXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pLCJjb250aW51ZSI7dmFyIGwsayxiO2lmKHA9ZSxGLm9wdGlvbnMuZXh0ZW5zaW9ucyYmRi5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJbmxpbmUmJihsPTEvMCxrPWUuc2xpY2UoMSksRi5vcHRpb25zLmV4''@;'; put 'put ''dGVuc2lvbnMuc3RhcnRJbmxpbmUuZm9yRWFjaChmdW5jdGlvbihBKXsibnVtYmVyIj09dHlwZW9mKGI9QS5jYWxsKHtsZXhlcjp0aGlzfSxrKSkmJjA8PWImJihsPU1hdGgubWluKGwsYikpfSksbDwxLzApJiYwPD1sJiYocD1lLnN1YnN0cmluZygwLGwrMSkpLG49Ri50b2tlbml6ZXIuaW5s''@;'; put 'put ''aW5lVGV4dChwLGtlKSlyZXR1cm4gZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLCJfIiE9PW4ucmF3LnNsaWNlKC0xKSYmKG89bi5yYXcuc2xpY2UoLTEpKSxEPSEwLChzPXJbci5sZW5ndGgtMV0pJiYidGV4dCI9PT1zLnR5cGU/KHMucmF3Kz1uLnJhdyxzLnRleHQrPW4udGV4dCk6ci5w''@;'; put 'put ''dXNoKG4pLCJjb250aW51ZSI7aWYoZSl7dmFyIHc9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCk7aWYoRi5vcHRpb25zLnNpbGVudClyZXR1cm4gY29uc29sZS5lcnJvcih3KSwiYnJlYWsiO3Rocm93IG5ldyBFcnJvcih3KX19KCk7aWYoImNvbnRpbnVlIiE9PWgm''@;'; put 'put ''JiJicmVhayI9PT1oKWJyZWFrfXJldHVybiByfSx1PWEsKHQ9W3trZXk6InJ1bGVzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57YmxvY2s6ZixpbmxpbmU6Y319fV0pJiZQKHUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYX0oKSxaPWZ1bmN0''@;'; put 'put ''aW9uKCl7ZnVuY3Rpb24gYSh0KXt0aGlzLm9wdGlvbnM9dHx8Qy5kZWZhdWx0c312YXIgaT1hLnByb3RvdHlwZTtyZXR1cm4gaS5jb2RlPWZ1bmN0aW9uKHQsbixlKXt2YXIgcjtyZXR1cm4gbj0obnx8IiIpLm1hdGNoKC9cUyovKVswXSx0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0JiZudWxsIT0o''@;'; put 'put ''cj10aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KHQsbikpJiZyIT09dCYmKGU9ITAsdD1yKSx0PXQucmVwbGFjZSgvXG4kLywiIikrIlxuIixuPyc8cHJlPjxjb2RlIGNsYXNzPSInK3RoaXMub3B0aW9ucy5sYW5nUHJlZml4K3kobikrJyI+JysoZT90OnkodCwhMCkpKyI8L2NvZGU+PC9wcmU+XG4i''@;'; put 'put ''OiI8cHJlPjxjb2RlPiIrKGU/dDp5KHQsITApKSsiPC9jb2RlPjwvcHJlPlxuIn0saS5ibG9ja3F1b3RlPWZ1bmN0aW9uKHQpe3JldHVybiI8YmxvY2txdW90ZT5cbiIrdCsiPC9ibG9ja3F1b3RlPlxuIn0saS5odG1sPWZ1bmN0aW9uKHQsdSl7cmV0dXJuIHR9LGkuaGVhZGluZz1mdW5jdGlv''@;'; put 'put ''bih0LHUsZSxyKXtyZXR1cm4gdGhpcy5vcHRpb25zLmhlYWRlcklkcz8iPGgiK3UrJyBpZD0iJysodGhpcy5vcHRpb25zLmhlYWRlclByZWZpeCtyLnNsdWcoZSkpKyciPicrdCsiPC9oIit1KyI+XG4iOiI8aCIrdSsiPiIrdCsiPC9oIit1KyI+XG4ifSxpLmhyPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMub3B0aW9ucy54aHRtbD8iPGhyLz5cbiI6Ijxocj5cbiJ9LGkubGlzdD1mdW5jdGlvbih0LHUsZSl7dmFyIHI9dT8ib2wiOiJ1bCI7cmV0dXJuIjwiK3IrKHUmJjEhPT1lPycgc3RhcnQ9IicrZSsnIic6IiIpKyI+XG4iK3QrIjwvIityKyI+XG4ifSxpLmxpc3RpdGVtPWZ1bmN0aW9u''@;'; put 'put ''KHQpe3JldHVybiI8bGk+Iit0KyI8L2xpPlxuIn0saS5jaGVja2JveD1mdW5jdGlvbih0KXtyZXR1cm4iPGlucHV0ICIrKHQ/J2NoZWNrZWQ9IiIgJzoiIikrJ2Rpc2FibGVkPSIiIHR5cGU9ImNoZWNrYm94IicrKHRoaXMub3B0aW9ucy54aHRtbD8iIC8iOiIiKSsiPiAifSxpLnBhcmFncmFw''@;'; put 'put ''aD1mdW5jdGlvbih0KXtyZXR1cm4iPHA+Iit0KyI8L3A+XG4ifSxpLnRhYmxlPWZ1bmN0aW9uKHQsdSl7cmV0dXJuIjx0YWJsZT5cbjx0aGVhZD5cbiIrdCsiPC90aGVhZD5cbiIrKHU9dSYmIjx0Ym9keT4iK3UrIjwvdGJvZHk+IikrIjwvdGFibGU+XG4ifSxpLnRhYmxlcm93PWZ1bmN0aW9u''@;'; put 'put ''KHQpe3JldHVybiI8dHI+XG4iK3QrIjwvdHI+XG4ifSxpLnRhYmxlY2VsbD1mdW5jdGlvbih0LHUpe3ZhciBlPXUuaGVhZGVyPyJ0aCI6InRkIjtyZXR1cm4odS5hbGlnbj8iPCIrZSsnIGFsaWduPSInK3UuYWxpZ24rJyI+JzoiPCIrZSsiPiIpK3QrIjwvIitlKyI+XG4ifSxpLnN0cm9uZz1m''@;'; put 'put ''dW5jdGlvbih0KXtyZXR1cm4iPHN0cm9uZz4iK3QrIjwvc3Ryb25nPiJ9LGkuZW09ZnVuY3Rpb24odCl7cmV0dXJuIjxlbT4iK3QrIjwvZW0+In0saS5jb2Rlc3Bhbj1mdW5jdGlvbih0KXtyZXR1cm4iPGNvZGU+Iit0KyI8L2NvZGU+In0saS5icj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9w''@;'; put 'put ''dGlvbnMueGh0bWw/Ijxici8+IjoiPGJyPiJ9LGkuZGVsPWZ1bmN0aW9uKHQpe3JldHVybiI8ZGVsPiIrdCsiPC9kZWw+In0saS5saW5rPWZ1bmN0aW9uKHQsdSxlKXtyZXR1cm4gbnVsbD09PSh0PW5lKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCx0KSk/ZToo''@;'; put 'put ''dD0nPGEgaHJlZj0iJyt0KyciJyx1JiYodCs9JyB0aXRsZT0iJyt1KyciJyksdCsiPiIrZSsiPC9hPiIpfSxpLmltYWdlPWZ1bmN0aW9uKHQsdSxlKXtyZXR1cm4gbnVsbD09PSh0PW5lKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCx0KSk/ZToodD0nPGltZyBz''@;'; put 'put ''cmM9IicrdCsnIiBhbHQ9IicrZSsnIicsdSYmKHQrPScgdGl0bGU9IicrdSsnIicpLHQrKHRoaXMub3B0aW9ucy54aHRtbD8iLz4iOiI+IikpfSxpLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGF9KCksTj1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXt9dmFyIGk9YS5wcm90b3R5cGU7cmV0''@;'; put 'put ''dXJuIGkuc3Ryb25nPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxpLmVtPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxpLmNvZGVzcGFuPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxpLmRlbD1mdW5jdGlvbih0KXtyZXR1cm4gdH0saS5odG1sPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxpLnRleHQ9ZnVuY3Rp''@;'; put 'put ''b24odCl7cmV0dXJuIHR9LGkubGluaz1mdW5jdGlvbih0LHUsZSl7cmV0dXJuIiIrZX0saS5pbWFnZT1mdW5jdGlvbih0LHUsZSl7cmV0dXJuIiIrZX0saS5icj1mdW5jdGlvbigpe3JldHVybiIifSxhfSgpLFg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7dGhpcy5zZWVuPXt9fXZhciBpPWEu''@;'; put 'put ''cHJvdG90eXBlO3JldHVybiBpLnNlcmlhbGl6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpLnRyaW0oKS5yZXBsYWNlKC88WyFcL2Etel0uKj8+L2dpLCIiKS5yZXBsYWNlKC9bXHUyMDAwLVx1MjA2Rlx1MkUwMC1cdTJFN0ZcXCchIiMkJSYoKSorLC4vOjs8PT4/QFtcXV5g''@;'; put 'put ''e3x9fl0vZywiIikucmVwbGFjZSgvXHMvZywiLSIpfSxpLmdldE5leHRTYWZlU2x1Zz1mdW5jdGlvbih0LHUpe3ZhciBlPXQscj0wO2lmKHRoaXMuc2Vlbi5oYXNPd25Qcm9wZXJ0eShlKSlmb3Iocj10aGlzLnNlZW5bdF07ZT10KyItIisgKytyLHRoaXMuc2Vlbi5oYXNPd25Qcm9wZXJ0eShl''@;'; put 'put ''KTspO3JldHVybiB1fHwodGhpcy5zZWVuW3RdPXIsdGhpcy5zZWVuW2VdPTApLGV9LGkuc2x1Zz1mdW5jdGlvbih0LHUpe3JldHVybiB2b2lkIDA9PT11JiYodT17fSksdD10aGlzLnNlcmlhbGl6ZSh0KSx0aGlzLmdldE5leHRTYWZlU2x1Zyh0LHUuZHJ5cnVuKX0sYX0oKSxUPWZ1bmN0aW9u''@;'; put 'put ''KCl7ZnVuY3Rpb24gYSh0KXt0aGlzLm9wdGlvbnM9dHx8Qy5kZWZhdWx0cyx0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgWix0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25z''@;'; put 'put ''LHRoaXMudGV4dFJlbmRlcmVyPW5ldyBOLHRoaXMuc2x1Z2dlcj1uZXcgWH1hLnBhcnNlPWZ1bmN0aW9uKHQsdSl7cmV0dXJuIG5ldyBhKHUpLnBhcnNlKHQpfSxhLnBhcnNlSW5saW5lPWZ1bmN0aW9uKHQsdSl7cmV0dXJuIG5ldyBhKHUpLnBhcnNlSW5saW5lKHQpfTt2YXIgaT1hLnByb3Rv''@;'; put 'put ''dHlwZTtyZXR1cm4gaS5wYXJzZT1mdW5jdGlvbih0LHUpe3ZvaWQgMD09PXUmJih1PSEwKTtmb3IodmFyIGUscixuLHMscCxnLEQsbyxGLGQseCxoLGwsayxiLHcsQT0iIixCPXQubGVuZ3RoLF89MDtfPEI7XysrKWlmKG89dFtfXSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRp''@;'; put 'put ''b25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbby50eXBlXSYmKCExIT09KHc9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW28udHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LG8pKXx8IVsic3BhY2UiLCJociIsImhlYWRp''@;'; put 'put ''bmciLCJjb2RlIiwidGFibGUiLCJibG9ja3F1b3RlIiwibGlzdCIsImh0bWwiLCJwYXJhZ3JhcGgiLCJ0ZXh0Il0uaW5jbHVkZXMoby50eXBlKSkpQSs9d3x8IiI7ZWxzZSBzd2l0Y2goby50eXBlKXtjYXNlInNwYWNlIjpjb250aW51ZTtjYXNlImhyIjpBKz10aGlzLnJlbmRlcmVyLmhyKCk7''@;'; put 'put ''Y29udGludWU7Y2FzZSJoZWFkaW5nIjpBKz10aGlzLnJlbmRlcmVyLmhlYWRpbmcodGhpcy5wYXJzZUlubGluZShvLnRva2Vucyksby5kZXB0aCx1ZSh0aGlzLnBhcnNlSW5saW5lKG8udG9rZW5zLHRoaXMudGV4dFJlbmRlcmVyKSksdGhpcy5zbHVnZ2VyKTtjb250aW51ZTtjYXNlImNvZGUi''@;'; put 'put ''OkErPXRoaXMucmVuZGVyZXIuY29kZShvLnRleHQsby5sYW5nLG8uZXNjYXBlZCk7Y29udGludWU7Y2FzZSJ0YWJsZSI6Zm9yKGc9Rj0iIixuPW8uaGVhZGVyLmxlbmd0aCxlPTA7ZTxuO2UrKylnKz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0aGlzLnBhcnNlSW5saW5lKG8uaGVhZGVyW2Vd''@;'; put 'put ''LnRva2Vucykse2hlYWRlcjohMCxhbGlnbjpvLmFsaWduW2VdfSk7Zm9yKEYrPXRoaXMucmVuZGVyZXIudGFibGVyb3coZyksRD0iIixuPW8ucm93cy5sZW5ndGgsZT0wO2U8bjtlKyspe2ZvcihnPSIiLHM9KHA9by5yb3dzW2VdKS5sZW5ndGgscj0wO3I8cztyKyspZys9dGhpcy5yZW5kZXJl''@;'; put 'put ''ci50YWJsZWNlbGwodGhpcy5wYXJzZUlubGluZShwW3JdLnRva2Vucykse2hlYWRlcjohMSxhbGlnbjpvLmFsaWduW3JdfSk7RCs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhnKX1BKz10aGlzLnJlbmRlcmVyLnRhYmxlKEYsRCk7Y29udGludWU7Y2FzZSJibG9ja3F1b3RlIjpEPXRoaXMucGFy''@;'; put 'put ''c2Uoby50b2tlbnMpLEErPXRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShEKTtjb250aW51ZTtjYXNlImxpc3QiOmZvcihGPW8ub3JkZXJlZCx6PW8uc3RhcnQsZD1vLmxvb3NlLG49by5pdGVtcy5sZW5ndGgsRD0iIixlPTA7ZTxuO2UrKylsPShoPW8uaXRlbXNbZV0pLmNoZWNrZWQsaz1oLnRh''@;'; put 'put ''c2sseD0iIixoLnRhc2smJihiPXRoaXMucmVuZGVyZXIuY2hlY2tib3gobCksZD8wPGgudG9rZW5zLmxlbmd0aCYmInBhcmFncmFwaCI9PT1oLnRva2Vuc1swXS50eXBlPyhoLnRva2Vuc1swXS50ZXh0PWIrIiAiK2gudG9rZW5zWzBdLnRleHQsaC50b2tlbnNbMF0udG9rZW5zJiYwPGgudG9r''@;'; put 'put ''ZW5zWzBdLnRva2Vucy5sZW5ndGgmJiJ0ZXh0Ij09PWgudG9rZW5zWzBdLnRva2Vuc1swXS50eXBlJiYoaC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQ9YisiICIraC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQpKTpoLnRva2Vucy51bnNoaWZ0KHt0eXBlOiJ0ZXh0Iix0ZXh0OmJ9KTp4Kz1i''@;'; put 'put ''KSx4Kz10aGlzLnBhcnNlKGgudG9rZW5zLGQpLEQrPXRoaXMucmVuZGVyZXIubGlzdGl0ZW0oeCxrLGwpO0ErPXRoaXMucmVuZGVyZXIubGlzdChELEYseik7Y29udGludWU7Y2FzZSJodG1sIjpBKz10aGlzLnJlbmRlcmVyLmh0bWwoby50ZXh0LG8uYmxvY2spO2NvbnRpbnVlO2Nhc2UicGFy''@;'; put 'put ''YWdyYXBoIjpBKz10aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLnBhcnNlSW5saW5lKG8udG9rZW5zKSk7Y29udGludWU7Y2FzZSJ0ZXh0Ijpmb3IoRD1vLnRva2Vucz90aGlzLnBhcnNlSW5saW5lKG8udG9rZW5zKTpvLnRleHQ7XysxPEImJiJ0ZXh0Ij09PXRbXysxXS50eXBlOylEKz0i''@;'; put 'put ''XG4iKygobz10WysrX10pLnRva2Vucz90aGlzLnBhcnNlSW5saW5lKG8udG9rZW5zKTpvLnRleHQpO0ErPXU/dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgoRCk6RDtjb250aW51ZTtkZWZhdWx0OnZhciB6PSdUb2tlbiB3aXRoICInK28udHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0''@;'; put 'put ''aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3Ioeik7dGhyb3cgbmV3IEVycm9yKHopfXJldHVybiBBfSxpLnBhcnNlSW5saW5lPWZ1bmN0aW9uKHQsdSl7dT11fHx0aGlzLnJlbmRlcmVyO2Zvcih2YXIgZSxyLG49IiIscz10Lmxlbmd0aCxwPTA7cDxzO3ArKylp''@;'; put 'put ''ZihlPXRbcF0sdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2UudHlwZV0mJighMSE9PShyPXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tlLnR5cGVdLmNh''@;'; put 'put ''bGwoe3BhcnNlcjp0aGlzfSxlKSl8fCFbImVzY2FwZSIsImh0bWwiLCJsaW5rIiwiaW1hZ2UiLCJzdHJvbmciLCJlbSIsImNvZGVzcGFuIiwiYnIiLCJkZWwiLCJ0ZXh0Il0uaW5jbHVkZXMoZS50eXBlKSkpbis9cnx8IiI7ZWxzZSBzd2l0Y2goZS50eXBlKXtjYXNlImVzY2FwZSI6Y2FzZSJ0''@;'; put 'put ''ZXh0IjpuKz11LnRleHQoZS50ZXh0KTticmVhaztjYXNlImh0bWwiOm4rPXUuaHRtbChlLnRleHQpO2JyZWFrO2Nhc2UibGluayI6bis9dS5saW5rKGUuaHJlZixlLnRpdGxlLHRoaXMucGFyc2VJbmxpbmUoZS50b2tlbnMsdSkpO2JyZWFrO2Nhc2UiaW1hZ2UiOm4rPXUuaW1hZ2UoZS5ocmVm''@;'; put 'put ''LGUudGl0bGUsZS50ZXh0KTticmVhaztjYXNlInN0cm9uZyI6bis9dS5zdHJvbmcodGhpcy5wYXJzZUlubGluZShlLnRva2Vucyx1KSk7YnJlYWs7Y2FzZSJlbSI6bis9dS5lbSh0aGlzLnBhcnNlSW5saW5lKGUudG9rZW5zLHUpKTticmVhaztjYXNlImNvZGVzcGFuIjpuKz11LmNvZGVzcGFu''@;'; put 'put ''KGUudGV4dCk7YnJlYWs7Y2FzZSJiciI6bis9dS5icigpO2JyZWFrO2Nhc2UiZGVsIjpuKz11LmRlbCh0aGlzLnBhcnNlSW5saW5lKGUudG9rZW5zLHUpKTticmVhaztkZWZhdWx0OnZhciBnPSdUb2tlbiB3aXRoICInK2UudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9w''@;'; put 'put ''dGlvbnMuc2lsZW50KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoZyk7dGhyb3cgbmV3IEVycm9yKGcpfXJldHVybiBufSxhfSgpLE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKHQpe3RoaXMub3B0aW9ucz10fHxDLmRlZmF1bHRzfXZhciBpPWEucHJvdG90eXBlO3JldHVybiBpLnByZXByb2Nl''@;'; put 'put ''c3M9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGkucG9zdHByb2Nlc3M9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGF9KCkscT0oTy5wYXNzVGhyb3VnaEhvb2tzPW5ldyBTZXQoWyJwcmVwcm9jZXNzIiwicG9zdHByb2Nlc3MiXSksSygicGFyc2VNYXJrZG93biIpKSxWPUsoIm9uRXJyb3IiKTtmdW5j''@;'; put 'put ''dGlvbiBDZShhLGkpe3ZhciB0PXRoaXM7cmV0dXJuIGZ1bmN0aW9uKHUsZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgZSYmKHI9ZSxlPW51bGwpO3ZhciBuLHM9dih7fSxlKSxwPShlPXYoe30sdC5kZWZhdWx0cyxzKSxHKHQsVilbVl0oZS5zaWxlbnQsZS5hc3luYyxyKSk7aWYobnVsbD09dSly''@;'; put 'put ''ZXR1cm4gcChuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwiKSk7aWYoInN0cmluZyIhPXR5cGVvZiB1KXJldHVybiBwKG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyBvZiB0eXBlICIrT2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS50b1N0cmluZy5jYWxsKHUpKyIsIHN0cmluZyBleHBlY3RlZCIpKTtpZihzPXIsKG49ZSkmJiFuLnNpbGVudCYmKHMmJmNvbnNvbGUud2FybigibWFya2VkKCk6IGNhbGxiYWNrIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxs''@;'; put 'put ''IGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gUmVhZCBtb3JlIGhlcmU6IGh0dHBzOi8vbWFya2VkLmpzLm9yZy91c2luZ19wcm8jYXN5bmMiKSwobi5zYW5pdGl6ZXx8bi5zYW5pdGl6ZXIpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBzYW5pdGl6ZSBhbmQgc2FuaXRpemVyIHBhcmFtZXRl''@;'; put 'put ''cnMgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAwLjcuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gUmVhZCBtb3JlIGhlcmU6IGh0dHBzOi8vbWFya2VkLmpzLm9yZy8jL1VTSU5HX0FEVkFOQ0VELm1kI29wdGlvbnMiKSwhbi5o''@;'; put 'put ''aWdobGlnaHQmJiJsYW5ndWFnZS0iPT09bi5sYW5nUHJlZml4fHxjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBoaWdobGlnaHQgYW5kIGxhbmdQcmVmaXggcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUg''@;'; put 'put ''cmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtaGlnaGxpZ2h0LiIpLG4ubWFuZ2xlJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBtYW5nbGUgcGFyYW1ldGVyIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGlz''@;'; put 'put ''IGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0aGlzIHdhcm5pbmcsIGluc3RhbGwgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLW1hbmdsZSwgb3IgZGlzYWJsZSBieSBzZXR0aW5n''@;'; put 'put ''IGB7bWFuZ2xlOiBmYWxzZX1gLiIpLG4uYmFzZVVybCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogYmFzZVVybCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJ''@;'; put 'put ''bnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtYmFzZS11cmwuIiksbi5zbWFydHlwYW50cyYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogc21hcnR5cGFudHMgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5v''@;'; put 'put ''dCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXNtYXJ0eXBhbnRzLiIpLG4ueGh0bWwmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHhodG1sIHBhcmFtZXRlciBpcyBkZXBy''@;'; put 'put ''ZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC14aHRtbC4iKSxuLmhlYWRlcklkc3x8bi5oZWFkZXJQcmVm''@;'; put 'put ''aXgpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBoZWFkZXJJZHMgYW5kIGhlYWRlclByZWZpeCBwYXJhbWV0ZXJzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gVG8g''@;'; put 'put ''Y2xlYXIgdGhpcyB3YXJuaW5nLCBpbnN0YWxsICBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtZ2ZtLWhlYWRpbmctaWQsIG9yIGRpc2FibGUgYnkgc2V0dGluZyBge2hlYWRlcklkczogZmFsc2V9YC4iKSxlLmhvb2tzJiYoZS5ob29rcy5vcHRpb25zPWUpLHIpe3ZhciBn''@;'; put 'put ''LEQ9ZS5oaWdobGlnaHQ7dHJ5e2UuaG9va3MmJih1PWUuaG9va3MucHJlcHJvY2Vzcyh1KSksZz1hKHUsZSl9Y2F0Y2goaCl7cmV0dXJuIHAoaCl9dmFyIG8sRj1mdW5jdGlvbihoKXt2YXIgbDtpZighaCl0cnl7ZS53YWxrVG9rZW5zJiZ0LndhbGtUb2tlbnMoZyxlLndhbGtUb2tlbnMpLGw9''@;'; put 'put ''aShnLGUpLGUuaG9va3MmJihsPWUuaG9va3MucG9zdHByb2Nlc3MobCkpfWNhdGNoKGspe2g9a31yZXR1cm4gZS5oaWdobGlnaHQ9RCxoP3AoaCk6cihudWxsLGwpfTtyZXR1cm4hRHx8RC5sZW5ndGg8Mz9GKCk6KGRlbGV0ZSBlLmhpZ2hsaWdodCxnLmxlbmd0aD8obz0wLHQud2Fsa1Rva2Vu''@;'; put 'put ''cyhnLGZ1bmN0aW9uKGgpeyJjb2RlIj09PWgudHlwZSYmKG8rKyxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7RChoLnRleHQsaC5sYW5nLGZ1bmN0aW9uKGwsayl7aWYobClyZXR1cm4gRihsKTtudWxsIT1rJiZrIT09aC50ZXh0JiYoaC50ZXh0PWssaC5lc2NhcGVkPSEwKSwwPT09LS1vJiZGKCl9''@;'; put 'put ''KX0sMCkpfSksdm9pZCgwPT09byYmRigpKSk6RigpKX1pZihlLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoZS5ob29rcz9lLmhvb2tzLnByZXByb2Nlc3ModSk6dSkudGhlbihmdW5jdGlvbihoKXtyZXR1cm4gYShoLGUpfSkudGhlbihmdW5jdGlvbihoKXtyZXR1cm4gZS53YWxrVG9r''@;'; put 'put ''ZW5zP1Byb21pc2UuYWxsKHQud2Fsa1Rva2VucyhoLGUud2Fsa1Rva2VucykpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gaH0pOmh9KS50aGVuKGZ1bmN0aW9uKGgpe3JldHVybiBpKGgsZSl9KS50aGVuKGZ1bmN0aW9uKGgpe3JldHVybiBlLmhvb2tzP2UuaG9va3MucG9zdHByb2Nlc3MoaCk6''@;'; put 'put ''aH0pLmNhdGNoKHApO3RyeXtlLmhvb2tzJiYodT1lLmhvb2tzLnByZXByb2Nlc3ModSkpO3ZhciBkPWEodSxlKSx4PShlLndhbGtUb2tlbnMmJnQud2Fsa1Rva2VucyhkLGUud2Fsa1Rva2VucyksaShkLGUpKTtyZXR1cm4gZS5ob29rcz9lLmhvb2tzLnBvc3Rwcm9jZXNzKHgpOnh9Y2F0Y2go''@;'; put 'put ''aCl7cmV0dXJuIHAoaCl9fX1mdW5jdGlvbiBFZShhLGksdCl7cmV0dXJuIGZ1bmN0aW9uKHUpe3ZhciBlO2lmKHUubWVzc2FnZSs9IlxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZWRqcy9tYXJrZWQuIixhKXJldHVybiBlPSI8cD5BbiBlcnJvciBvY2N1''@;'; put 'put ''cnJlZDo8L3A+PHByZT4iK3kodS5tZXNzYWdlKyIiLCEwKSsiPC9wcmU+IixpP1Byb21pc2UucmVzb2x2ZShlKTp0P3ZvaWQgdChudWxsLGUpOmU7aWYoaSlyZXR1cm4gUHJvbWlzZS5yZWplY3QodSk7aWYoIXQpdGhyb3cgdTt0KHUpfX1JPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFYse3ZhbHVlOkVlfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMscSx7dmFsdWU6Q2V9KSx0aGlzLmRlZmF1bHRzPXthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRl''@;'; put 'put ''clByZWZpeDoiIixoaWdobGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdh''@;'; put 'put ''bGtUb2tlbnM6bnVsbCx4aHRtbDohMX0sdGhpcy5vcHRpb25zPXRoaXMuc2V0T3B0aW9ucyx0aGlzLnBhcnNlPUcodGhpcyxxKVtxXShTLmxleCxULnBhcnNlKSx0aGlzLnBhcnNlSW5saW5lPUcodGhpcyxxKVtxXShTLmxleElubGluZSxULnBhcnNlSW5saW5lKSx0aGlzLlBhcnNlcj1ULHRo''@;'; put 'put ''aXMucGFyc2VyPVQucGFyc2UsdGhpcy5SZW5kZXJlcj1aLHRoaXMuVGV4dFJlbmRlcmVyPU4sdGhpcy5MZXhlcj1TLHRoaXMubGV4ZXI9Uy5sZXgsdGhpcy5Ub2tlbml6ZXI9aix0aGlzLlNsdWdnZXI9WCx0aGlzLkhvb2tzPU8sdGhpcy51c2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBp''@;'; put 'put ''PWEucHJvdG90eXBlO3JldHVybiBpLndhbGtUb2tlbnM9ZnVuY3Rpb24odCx1KXtmb3IodmFyIGUscj10aGlzLG49W10scz1VKHQpOyEoZT1zKCkpLmRvbmU7KShmdW5jdGlvbigpe3ZhciBwPWUudmFsdWU7c3dpdGNoKG49bi5jb25jYXQodS5jYWxsKHIscCkpLHAudHlwZSl7Y2FzZSJ0YWJs''@;'; put 'put ''ZSI6Zm9yKHZhciBnPVUocC5oZWFkZXIpOyEoRD1nKCkpLmRvbmU7KXt2YXIgRD1ELnZhbHVlO249bi5jb25jYXQoci53YWxrVG9rZW5zKEQudG9rZW5zLHUpKX1mb3IodmFyIG8sRj1VKHAucm93cyk7IShvPUYoKSkuZG9uZTspZm9yKHZhciBkPVUoby52YWx1ZSk7ISh4PWQoKSkuZG9uZTsp''@;'; put 'put ''e3ZhciB4PXgudmFsdWU7bj1uLmNvbmNhdChyLndhbGtUb2tlbnMoeC50b2tlbnMsdSkpfWJyZWFrO2Nhc2UibGlzdCI6bj1uLmNvbmNhdChyLndhbGtUb2tlbnMocC5pdGVtcyx1KSk7YnJlYWs7ZGVmYXVsdDpyLmRlZmF1bHRzLmV4dGVuc2lvbnMmJnIuZGVmYXVsdHMuZXh0ZW5zaW9ucy5j''@;'; put 'put ''aGlsZFRva2VucyYmci5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zW3AudHlwZV0/ci5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zW3AudHlwZV0uZm9yRWFjaChmdW5jdGlvbihoKXtuPW4uY29uY2F0KHIud2Fsa1Rva2VucyhwW2hdLHUpKX0pOnAudG9rZW5zJiYobj1u''@;'; put 'put ''LmNvbmNhdChyLndhbGtUb2tlbnMocC50b2tlbnMsdSkpKX19KSgpO3JldHVybiBufSxpLnVzZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLHU9dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zfHx7cmVuZGVyZXJzOnt9LGNoaWxkVG9rZW5zOnt9fSxlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcg''@;'; put 'put ''QXJyYXkoZSksbj0wO248ZTtuKyspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgcCxnPXYoe30scyk7aWYoZy5hc3luYz10LmRlZmF1bHRzLmFzeW5jfHxnLmFzeW5jfHwhMSxzLmV4dGVuc2lvbnMmJihzLmV4dGVuc2lvbnMuZm9yRWFjaChmdW5j''@;'; put 'put ''dGlvbihsKXtpZighbC5uYW1lKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIG5hbWUgcmVxdWlyZWQiKTt2YXIgaztpZihsLnJlbmRlcmVyJiYodS5yZW5kZXJlcnNbbC5uYW1lXT0oaz11LnJlbmRlcmVyc1tsLm5hbWVdKT9mdW5jdGlvbigpe2Zvcih2YXIgYj1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''LHc9bmV3IEFycmF5KGIpLEE9MDtBPGI7QSsrKXdbQV09YXJndW1lbnRzW0FdO3ZhciBCPWwucmVuZGVyZXIuYXBwbHkodGhpcyx3KTtyZXR1cm4hMT09PUI/ay5hcHBseSh0aGlzLHcpOkJ9OmwucmVuZGVyZXIpLGwudG9rZW5pemVyKXtpZighbC5sZXZlbHx8ImJsb2NrIiE9PWwubGV2ZWwm''@;'; put 'put ''JiJpbmxpbmUiIT09bC5sZXZlbCl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBsZXZlbCBtdXN0IGJlICdibG9jaycgb3IgJ2lubGluZSciKTt1W2wubGV2ZWxdP3VbbC5sZXZlbF0udW5zaGlmdChsLnRva2VuaXplcik6dVtsLmxldmVsXT1bbC50b2tlbml6ZXJdLGwuc3RhcnQmJigiYmxv''@;'; put 'put ''Y2siPT09bC5sZXZlbD91LnN0YXJ0QmxvY2s/dS5zdGFydEJsb2NrLnB1c2gobC5zdGFydCk6dS5zdGFydEJsb2NrPVtsLnN0YXJ0XToiaW5saW5lIj09PWwubGV2ZWwmJih1LnN0YXJ0SW5saW5lP3Uuc3RhcnRJbmxpbmUucHVzaChsLnN0YXJ0KTp1LnN0YXJ0SW5saW5lPVtsLnN0YXJ0XSkp''@;'; put 'put ''fWwuY2hpbGRUb2tlbnMmJih1LmNoaWxkVG9rZW5zW2wubmFtZV09bC5jaGlsZFRva2Vucyl9KSxnLmV4dGVuc2lvbnM9dSkscy5yZW5kZXJlcil7dmFyIEQsbz10LmRlZmF1bHRzLnJlbmRlcmVyfHxuZXcgWih0LmRlZmF1bHRzKTtmb3IoRCBpbiBzLnJlbmRlcmVyKShmdW5jdGlvbihsKXt2''@;'; put 'put ''YXIgaz1vW2xdO29bbF09ZnVuY3Rpb24oKXtmb3IodmFyIGI9YXJndW1lbnRzLmxlbmd0aCx3PW5ldyBBcnJheShiKSxBPTA7QTxiO0ErKyl3W0FdPWFyZ3VtZW50c1tBXTt2YXIgQj1zLnJlbmRlcmVyW2xdLmFwcGx5KG8sdyk7cmV0dXJuITE9PT1CP2suYXBwbHkobyx3KTpCfX0pKEQpO2cu''@;'; put 'put ''cmVuZGVyZXI9b31pZihzLnRva2VuaXplcil7dmFyIEYsZD10LmRlZmF1bHRzLnRva2VuaXplcnx8bmV3IGoodC5kZWZhdWx0cyk7Zm9yKEYgaW4gcy50b2tlbml6ZXIpKGZ1bmN0aW9uKGwpe3ZhciBrPWRbbF07ZFtsXT1mdW5jdGlvbigpe2Zvcih2YXIgYj1hcmd1bWVudHMubGVuZ3RoLHc9''@;'; put 'put ''bmV3IEFycmF5KGIpLEE9MDtBPGI7QSsrKXdbQV09YXJndW1lbnRzW0FdO3ZhciBCPXMudG9rZW5pemVyW2xdLmFwcGx5KGQsdyk7cmV0dXJuITE9PT1CP2suYXBwbHkoZCx3KTpCfX0pKEYpO2cudG9rZW5pemVyPWR9aWYocy5ob29rcyl7dmFyIHgsaD10LmRlZmF1bHRzLmhvb2tzfHxuZXcg''@;'; put 'put ''Tztmb3IoeCBpbiBzLmhvb2tzKShmdW5jdGlvbihsKXt2YXIgaz1oW2xdO2hbbF09Ty5wYXNzVGhyb3VnaEhvb2tzLmhhcyhsKT9mdW5jdGlvbihiKXtyZXR1cm4gdC5kZWZhdWx0cy5hc3luYz9Qcm9taXNlLnJlc29sdmUocy5ob29rc1tsXS5jYWxsKGgsYikpLnRoZW4oZnVuY3Rpb24odyl7''@;'; put 'put ''cmV0dXJuIGsuY2FsbChoLHcpfSk6KGI9cy5ob29rc1tsXS5jYWxsKGgsYiksay5jYWxsKGgsYikpfTpmdW5jdGlvbigpe2Zvcih2YXIgYj1hcmd1bWVudHMubGVuZ3RoLHc9bmV3IEFycmF5KGIpLEE9MDtBPGI7QSsrKXdbQV09YXJndW1lbnRzW0FdO3ZhciBCPXMuaG9va3NbbF0uYXBwbHko''@;'; put 'put ''aCx3KTtyZXR1cm4hMT09PUI/ay5hcHBseShoLHcpOkJ9fSkoeCk7Zy5ob29rcz1ofXMud2Fsa1Rva2VucyYmKHA9dC5kZWZhdWx0cy53YWxrVG9rZW5zLGcud2Fsa1Rva2Vucz1mdW5jdGlvbihsKXt2YXIgaz1bXTtyZXR1cm4gay5wdXNoKHMud2Fsa1Rva2Vucy5jYWxsKHRoaXMsbCkpLHA/''@;'; put 'put ''ay5jb25jYXQocC5jYWxsKHRoaXMsbCkpOmt9KSx0LmRlZmF1bHRzPXYoe30sdC5kZWZhdWx0cyxnKX0pLHRoaXN9LGkuc2V0T3B0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWZhdWx0cz12KHt9LHRoaXMuZGVmYXVsdHMsdCksdGhpc30sYX0oKTt2YXIgUj1uZXcgSShDLmRlZmF1''@;'; put 'put ''bHRzKTtmdW5jdGlvbiBtKGEsaSx0KXtyZXR1cm4gUi5wYXJzZShhLGksdCl9bS5vcHRpb25zPW0uc2V0T3B0aW9ucz1mdW5jdGlvbihhKXtyZXR1cm4gUi5zZXRPcHRpb25zKGEpLFcobS5kZWZhdWx0cz1SLmRlZmF1bHRzKSxtfSxtLmdldERlZmF1bHRzPVEsbS5kZWZhdWx0cz1DLmRlZmF1''@;'; put 'put ''bHRzLG0udXNlPWZ1bmN0aW9uKCl7cmV0dXJuIFIudXNlLmFwcGx5KFIsYXJndW1lbnRzKSxXKG0uZGVmYXVsdHM9Ui5kZWZhdWx0cyksbX0sbS53YWxrVG9rZW5zPWZ1bmN0aW9uKGEsaSl7cmV0dXJuIFIud2Fsa1Rva2VucyhhLGkpfSxtLnBhcnNlSW5saW5lPVIucGFyc2VJbmxpbmUsbS5Q''@;'; put 'put ''YXJzZXI9VCxtLnBhcnNlcj1ULnBhcnNlLG0uUmVuZGVyZXI9WixtLlRleHRSZW5kZXJlcj1OLG0uTGV4ZXI9UyxtLmxleGVyPVMubGV4LG0uVG9rZW5pemVyPWosbS5TbHVnZ2VyPVgsbS5Ib29rcz1PO3ZhciBtZT0obS5wYXJzZT1tKS5vcHRpb25zLHhlPW0uc2V0T3B0aW9ucyxiZT1tLnVz''@;'; put 'put ''ZSx3ZT1tLndhbGtUb2tlbnMsQmU9bS5wYXJzZUlubGluZSx5ZT1tLHZlPVQucGFyc2UsX2U9Uy5sZXg7Qy5Ib29rcz1PLEMuTGV4ZXI9UyxDLk1hcmtlZD1JLEMuUGFyc2VyPVQsQy5SZW5kZXJlcj1aLEMuU2x1Z2dlcj1YLEMuVGV4dFJlbmRlcmVyPU4sQy5Ub2tlbml6ZXI9aixDLmdldERl''@;'; put 'put ''ZmF1bHRzPVEsQy5sZXhlcj1fZSxDLm1hcmtlZD1tLEMub3B0aW9ucz1tZSxDLnBhcnNlPXllLEMucGFyc2VJbmxpbmU9QmUsQy5wYXJzZXI9dmUsQy5zZXRPcHRpb25zPXhlLEMudXNlPWJlLEMud2Fsa1Rva2Vucz13ZX0pOw=='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=search.e57d45a95a5066e7-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczMicgaGVpZ2h0PSczMicgdmlld0JveD0nMCAwIDMyIDMyJyBmaWxsPSdub25lJz48ZyBvcGFjaXR5PScwLjUnPjxwYXRoIGQ9J00yOCAyOEwyMCAyME00IDEzLjMzMzNDNCAxNC41NTkgNC4yNDE0MSAxNS43''@;'; put 'put ''NzI3IDQuNzEwNDYgMTYuOTA1QzUuMTc5NSAxOC4wMzc0IDUuODY2OTkgMTkuMDY2MyA2LjczMzY3IDE5LjkzM0M3LjYwMDM1IDIwLjc5OTcgOC42MjkyNSAyMS40ODcyIDkuNzYxNjIgMjEuOTU2MkMxMC44OTQgMjIuNDI1MyAxMi4xMDc3IDIyLjY2NjcgMTMuMzMzMyAyMi42NjY3QzE0LjU1''@;'; put 'put ''OSAyMi42NjY3IDE1Ljc3MjcgMjIuNDI1MyAxNi45MDUgMjEuOTU2MkMxOC4wMzc0IDIxLjQ4NzIgMTkuMDY2MyAyMC43OTk3IDE5LjkzMyAxOS45MzNDMjAuNzk5NyAxOS4wNjYzIDIxLjQ4NzIgMTguMDM3NCAyMS45NTYyIDE2LjkwNUMyMi40MjUzIDE1Ljc3MjcgMjIuNjY2NyAxNC41NTkg''@;'; put 'put ''MjIuNjY2NyAxMy4zMzMzQzIyLjY2NjcgMTIuMTA3NyAyMi40MjUzIDEwLjg5NCAyMS45NTYyIDkuNzYxNjJDMjEuNDg3MiA4LjYyOTI1IDIwLjc5OTcgNy42MDAzNSAxOS45MzMgNi43MzM2N0MxOS4wNjYzIDUuODY2OTkgMTguMDM3NCA1LjE3OTUgMTYuOTA1IDQuNzEwNDZDMTUuNzcyNyA0''@;'; put 'put ''LjI0MTQxIDE0LjU1OSA0IDEzLjMzMzMgNEMxMi4xMDc3IDQgMTAuODk0IDQuMjQxNDEgOS43NjE2MiA0LjcxMDQ2QzguNjI5MjUgNS4xNzk1IDcuNjAwMzUgNS44NjY5OSA2LjczMzY3IDYuNzMzNjdDNS44NjY5OSA3LjYwMDM1IDUuMTc5NSA4LjYyOTI1IDQuNzEwNDYgOS43NjE2MkM0LjI0''@;'; put 'put ''MTQxIDEwLjg5NCA0IDEyLjEwNzcgNCAxMy4zMzMzWicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLz48L2c+PC9zdmc+'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=select-arrow.55c1ced6c8b25b12-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz48cGF0aCBkPSdNMTEuMDAwMiA2LjY2NjYzQzExLjQyNjIgNi42NjY2MyAxMS42NDg3IDcuMTU5NjMgMTEuMzkxNyA3LjQ3''@;'; put 'put ''ODEzTDExLjM1MzcgNy41MjAxM0w4LjM1MzcyIDEwLjUyMDFDOC4yNjc2MiAxMC42MDYyIDguMTUzMDcgMTAuNjU3OSA4LjAzMTU2IDEwLjY2NTZDNy45MTAwNSAxMC42NzMyIDcuNzg5OTIgMTAuNjM2MyA3LjY5MzcyIDEwLjU2MTZMNy42NDY3MiAxMC41MjAxTDQuNjQ2NzIgNy41MjAxM0w0''@;'; put 'put ''LjYwNTIyIDcuNDczMTNMNC41NzgyMiA3LjQzNDYzTDQuNTUxMjIgNy4zODY2M0w0LjU0MjcyIDcuMzY4NjNMNC41MjkyMiA3LjMzNTEzTDQuNTEzMjIgNy4yODExM0w0LjUwODIyIDcuMjU0NjNMNC41MDMyMiA3LjIyNDYzTDQuNTAxMjIgNy4xOTYxM1Y3LjEzNzEzTDQuNTAzNzIgNy4xMDgx''@;'; put 'put ''M0w0LjUwODIyIDcuMDc4MTNMNC41MTMyMiA3LjA1MjEzTDQuNTI5MjIgNi45OTgxM0w0LjU0MjcyIDYuOTY0NjNMNC41Nzc3MiA2Ljg5ODYzTDQuNjEwMjIgNi44NTM2M0w0LjY0NjcyIDYuODEzMTNMNC42OTM3MiA2Ljc3MTYzTDQuNzMyMjIgNi43NDQ2M0w0Ljc4MDIyIDYuNzE3NjNMNC43''@;'; put 'put ''OTgyMiA2LjcwOTEzTDQuODMxNzIgNi42OTU2M0w0Ljg4NTcyIDYuNjc5NjNMNC45MTIyMiA2LjY3NDYzTDQuOTQyMjIgNi42Njk2M0w0Ljk3MDcyIDYuNjY3NjNMMTEuMDAwMiA2LjY2NjYzWicgZmlsbD0nY3VycmVudENvbG9yJy8+PC9zdmc+Cg=='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=spinner.16f763cebc6b64df-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3MiA3MiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgIC5jbHMtMSwKICAgICAgICAgICAgLmNscy0yIHsKICAg''@;'; put 'put ''ICAgICAgICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgICAgICAgICBzdHJva2UtbWl0ZXJsaW1pdDogMTA7CiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg6IDVweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAuY2xzLTEgewogICAgICAgICAgICAgICAgc3Ryb2tlOiAjMDAwMDAw''@;'; put 'put ''OwogICAgICAgICAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmNscy0yIHsKICAgICAgICAgICAgICAgIHN0cm9rZTogIzAwNzJhMzsKICAgICAgICAgICAgfQogICAgICAgIDwvc3R5bGU+CiAgICA8L2RlZnM+CiAgICA8dGl0bGU+UHJl''@;'; put 'put ''bG9hZGVyXzcyeDI8L3RpdGxlPgogICAgPGNpcmNsZSBjbGFzcz0iY2xzLTEiIGN4PSIzNiIgY3k9IjM2IiByPSIzMyIvPgogICAgPHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMTQuMyw2MC45QTMzLDMzLDAsMCwxLDM2LDMiPgogICAgPC9wYXRoPgo8L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=styles.2b5586ec5279f11a-css; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''LyohCiAqIENvcHlyaWdodCAoYykgSEFORFNPTkNPREUgc3AuIHogby4gby4KICoKICogSEFORFNPTlRBQkxFIGlzIGEgc29mdHdhcmUgZGlzdHJpYnV0ZWQgYnkgSEFORFNPTkNPREUgc3AuIHogby4gby4sIGEgUG9saXNoIGNvcnBvcmF0aW9uIGJhc2VkIGluCiAqIEdkeW5pYSwgUG9sYW5k''@;'; put 'put ''LCBhdCBBbGVqYSBad3ljaWVzdHdhIDk2LTk4LCByZWdpc3RlcmVkIGJ5IHRoZSBEaXN0cmljdCBDb3VydCBpbiBHZGFuc2sgdW5kZXIgbnVtYmVyCiAqIDUzODY1MSwgRVUgdGF4IElEIG51bWJlcjogUEw1ODYyMjk0MDAyLCBzaGFyZSBjYXBpdGFsOiBQTE4gNjIsODAwLjAwLgogKgogKiBU''@;'; put 'put ''aGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXdzLCBpbmNsdWRpbmcgaW50ZXJuYXRpb25hbCB0cmVhdGllcywgYW5kIGR1YWwtCiAqIGxpY2Vuc2VkIC0gZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91ciB1c2UgZm9yIGNvbW1lcmNpYWwgcHVycG9z''@;'; put 'put ''ZXMsIG1lYW5pbmcgaW50ZW5kZWQgZm9yIG9yCiAqIHJlc3VsdGluZyBpbiBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBtb25ldGFyeSBjb21wZW5zYXRpb24sIG9yIG5vdC4KICoKICogSWYgeW91ciB1c2UgaXMgc3RyaWN0bHkgcGVyc29uYWwgb3Igc29sZWx5IGZvciBldmFsdWF0aW9uIHB1''@;'; put 'put ''cnBvc2VzLCBtZWFuaW5nIGZvciB0aGUgcHVycG9zZXMgb2YgdGVzdGluZwogKiB0aGUgc3VpdGFiaWxpdHksIHBlcmZvcm1hbmNlLCBhbmQgdXNlZnVsbmVzcyBvZiB0aGlzIHNvZnR3YXJlIG91dHNpZGUgdGhlIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsCiAqIHlvdSBhZ3JlZSB0byBiZSBi''@;'; put 'put ''b3VuZCBieSB0aGUgdGVybXMgaW5jbHVkZWQgaW4gdGhlICJoYW5kc29udGFibGUtbm9uLWNvbW1lcmNpYWwtbGljZW5zZS5wZGYiIGZpbGUuCiAqCiAqIFlvdXIgdXNlIG9mIHRoaXMgc29mdHdhcmUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgaW5j''@;'; put 'put ''bHVkZWQgaW4gYW4gYXBwbGljYWJsZQogKiBsaWNlbnNlIGFncmVlbWVudC4KICoKICogSW4gYW55IGNhc2UsIHlvdSBtdXN0IG5vdCBtYWtlIGFueSBzdWNoIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGFzIHRvIGRldmVsb3Agc29mdHdhcmUgd2hpY2ggbWF5IGJlCiAqIGNvbnNpZGVyZWQgY29t''@;'; put 'put ''cGV0aXRpdmUgd2l0aCB0aGlzIHNvZnR3YXJlLgogKgogKiBVTkxFU1MgRVhQUkVTU0xZIEFHUkVFRCBPVEhFUldJU0UsIEhBTkRTT05DT0RFIFBST1ZJREVTIFRISVMgU09GVFdBUkUgT04gQU4gIkFTIElTIgogKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0Yg''@;'; put 'put ''QU5ZIEtJTkQsIEFORCBJTiBOTyBFVkVOVCBBTkQgVU5ERVIgTk8KICogTEVHQUwgVEhFT1JZLCBTSEFMTCBIQU5EU09OQ09ERSBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIERJUkVDVCwKICogSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENP''@;'; put 'put ''TlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIEFSSVNJTkcgRlJPTQogKiBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSElTIFNPRlRXQVJFLgogKgogKiBWZXJzaW9uOiAxOC4wLjAKICogUmVsZWFzZSBkYXRlOiAzMC8wNi8yMDI2IChidWlsdCBhdCAzMC8wNi8yMDI2IDA4''@;'; put 'put ''OjQ1OjMxKQogKi8uaHQtcm9vdC13cmFwcGVye2ZvbnQtZmFtaWx5OnZhcigtLWh0LWZvbnQtZmFtaWx5KSwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwiU2Vnb2UgVUkiLHNhbnMtc2VyaWY7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtw''@;'; put 'put ''b3NpdGlvbjpyZWxhdGl2ZX06aXMoLmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LWJvdHRvbT4uaHQtc2xvdC1lbGVtZW50KSAuaHQtd3JhcHBlcjpub3QoLmh0SG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KSAuaHRfbWFzdGVyIC53dEhvbGRlciwuaHQtcm9vdC13cmFwcGVy''@;'; put 'put ''Omhhcyg+Lmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQpIC5odC13cmFwcGVyOm5vdCguaHRWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KSAuaHRfbWFzdGVyIC53dEhvbGRlciwuaHQtcm9vdC13cmFwcGVyOmhhcyg+Lmh0LXNsb3QtdG9wPi5odC1zbG90LWVsZW1lbnQpIC5o''@;'; put 'put ''dC13cmFwcGVyOm5vdCguaHRIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3cpIC5odF9tYXN0ZXIgLnd0SG9sZGVyLC5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC10b3A+Lmh0LXNsb3QtZWxlbWVudCkgLmh0LXdyYXBwZXI6bm90KC5odFZlcnRpY2FsbHlTY3JvbGxhYmxlQnlX''@;'; put 'put ''aW5kb3cpIC5odF9tYXN0ZXIgLnd0SG9sZGVyKXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWJhY2tncm91bmQtY29sb3IpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHZhcigtLWh0LWJvcmRlci1jb2xvcil9Lmh0Rm9jdXNDYXRjaGVye29wYWNpdHk6MDt6LWluZGV4Oi0xO2JvcmRl''@;'; put 'put ''cjowO291dGxpbmU6MDt3aWR0aDowO2hlaWdodDowO21hcmdpbjowO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uaHQtZ3JpZHtmbGV4OmF1dG87bWluLWhlaWdodDowO3Bvc2l0aW9uOnJlbGF0aXZlfS5odC1ncmlkLWNvbnRlbnR7aGVpZ2h0''@;'; put 'put ''OjEwMCV9Lmh0LXNsb3QtdG9wLC5odC1zbG90LWJvdHRvbXtmbGV4Om5vbmV9Lmh0LXNsb3QtZWxlbWVudHtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1odC1ib3JkZXItY29sb3IpO3dpZHRoOjEwMCV9Lmh0LXNsb3QtdG9wPi5odC1zbG90LWVsZW1lbnQ6''@;'; put 'put ''bm90KDpmaXJzdC1vZi10eXBlKXtib3JkZXItdG9wLXdpZHRoOjB9Lmh0LXNsb3QtdG9wPi5odC1zbG90LWVsZW1lbnQ6bGFzdC1vZi10eXBlLC5odC1zbG90LWJvdHRvbT4uaHQtc2xvdC1lbGVtZW50Om5vdCg6bGFzdC1vZi10eXBlKXtib3JkZXItYm90dG9tLXdpZHRoOjB9Lmh0LXNsb3Qt''@;'; put 'put ''Ym90dG9tPi5odC1zbG90LWVsZW1lbnQ6Zmlyc3Qtb2YtdHlwZXtib3JkZXItdG9wLXdpZHRoOjB9Lmh0U2Nyb2xsYmFyVGVzdHtzY3JvbGxiYXItd2lkdGg6YXV0bztzY3JvbGxiYXItY29sb3I6dmFyKC0taHQtc2Nyb2xsYmFyLXRodW1iLWNvbG9yKXZhcigtLWh0LXNjcm9sbGJhci10cmFj''@;'; put 'put ''ay1jb2xvcil9Lmh0U2Nyb2xsYmFyU2FmYXJpVGVzdDo6LXdlYmtpdC1zY3JvbGxiYXJ7d2lkdGg6OXB4O2hlaWdodDo5cHh9LmhhbmRzb250YWJsZXtmb250LWZhbWlseTp2YXIoLS1odC1mb250LWZhbWlseSksLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsIlNlZ29lIFVJIixz''@;'; put 'put ''YW5zLXNlcmlmO2ZvbnQtc2l6ZTp2YXIoLS1odC1mb250LXNpemUpO2xpbmUtaGVpZ2h0OnZhcigtLWh0LWxpbmUtaGVpZ2h0KTtmb250LXdlaWdodDp2YXIoLS1odC1mb250LXdlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0taHQtbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWh0LWZv''@;'; put 'put ''cmVncm91bmQtY29sb3IpO3RvdWNoLWFjdGlvbjptYW5pcHVsYXRpb247cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZSAud3RIb2xkZXJ7c2Nyb2xsYmFyLXdpZHRoOmF1dG87c2Nyb2xsYmFyLWNvbG9yOnZhcigtLWh0LXNjcm9sbGJhci10aHVtYi1jb2xvcil2YXIoLS1odC1zY3Jv''@;'; put 'put ''bGxiYXItdHJhY2stY29sb3IpfS5oYW5kc29udGFibGUgLnd0SG9sZGVyOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo5cHg7aGVpZ2h0OjlweH0uaGFuZHNvbnRhYmxlIC53dEhvbGRlcjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2t7YmFja2dyb3VuZDp2YXIoLS1odC1zY3JvbGxiYXItdHJh''@;'; put 'put ''Y2stY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0taHQtc2Nyb2xsYmFyLWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUgLnd0SG9sZGVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LXNjcm9sbGJhci10aHVtYi1jb2xvcik7Ym9yZGVyLXJh''@;'; put 'put ''ZGl1czp2YXIoLS1odC1zY3JvbGxiYXItYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZSAud3RIb2xkZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lcntiYWNrZ3JvdW5kOnZhcigtLWh0LXNjcm9sbGJhci10cmFjay1jb2xvcil9LmhhbmRzb250YWJsZSAud3RIb2xkZXI6bm90KDpsYW5n''@;'; put 'put ''KGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDps''@;'; put 'put ''YW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKTo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVye2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWh0LXNjcm9sbGJhci1ib3JkZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlIC53dEhvbGRlcjppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDps''@;'; put 'put ''YW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIp''@;'; put 'put ''LDpsYW5nKHlpKSk6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lcntib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWh0LXNjcm9sbGJhci1ib3JkZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXJ7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0uaGFuZHNvbnRhYmxlLmh0LXdy''@;'; put 'put ''YXBwZXI6bm90KC5odEZpcnN0RGF0YXNldENvbHVtbk5vdFJlbmRlcmVkKSB0ZDpmaXJzdC1vZi10eXBle2JvcmRlci1pbmxpbmUtc3RhcnQtd2lkdGg6MXB4fS5oYW5kc29udGFibGUuaHRHaG9zdFRhYmxlLmh0TmVzdGVkSGVhZGVycyB0YWJsZXtib3JkZXItc3BhY2luZzowO2JvcmRlci1j''@;'; put 'put ''b2xsYXBzZTpjb2xsYXBzZX0uaGFuZHNvbnRhYmxlLmh0R2hvc3RUYWJsZSB0YWJsZSB0aGVhZCB0aHtib3JkZXItYm90dG9tLXdpZHRoOjB9LmhhbmRzb250YWJsZS5odEdob3N0VGFibGUgdGFibGUgdGJvZHkgdHI6Zmlyc3Qtb2YtdHlwZSB0aDpmaXJzdC1jaGlsZCwuaGFuZHNvbnRhYmxl''@;'; put 'put ''Lmh0R2hvc3RUYWJsZSB0YWJsZSB0Ym9keSB0cjpmaXJzdC1vZi10eXBlIHRkOmZpcnN0LWNoaWxke2hlaWdodDpjYWxjKHZhcigtLWh0LWNlbGwtdmVydGljYWwtcGFkZGluZykqMiArIHZhcigtLWh0LWxpbmUtaGVpZ2h0KSArIDFweCl9LmhhbmRzb250YWJsZS5odEdob3N0VGFibGUgdGFi''@;'; put 'put ''bGUgdGJvZHkgdHIgdGgsLmhhbmRzb250YWJsZS5odEdob3N0VGFibGUgdGFibGUgdGJvZHkgdHIgdGR7aGVpZ2h0OmNhbGModmFyKC0taHQtY2VsbC12ZXJ0aWNhbC1wYWRkaW5nKSoyICsgdmFyKC0taHQtbGluZS1oZWlnaHQpICsgMXB4KTtib3JkZXItdG9wLXdpZHRoOjB9LmhhbmRzb250''@;'; put 'put ''YWJsZTpub3QoLmh0SG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KS5odEhhc1Njcm9sbFggLmh0X21hc3RlciAud3RIb2xkZXIsLmhhbmRzb250YWJsZTpub3QoLmh0SG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KS5odEhhc1Njcm9sbFkgLmh0X21hc3RlciAud3RIb2xkZXIs''@;'; put 'put ''LmhhbmRzb250YWJsZTpub3QoLmh0VmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdykuaHRIYXNTY3JvbGxYIC5odF9tYXN0ZXIgLnd0SG9sZGVyLC5oYW5kc29udGFibGU6bm90KC5odFZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3cpLmh0SGFzU2Nyb2xsWSAuaHRfbWFzdGVyIC53dEhv''@;'; put 'put ''bGRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWJhY2tncm91bmQtY29sb3IpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHZhcigtLWh0LWJvcmRlci1jb2xvcil9LmhhbmRzb250YWJsZSB0ci5odF9fcm93X2V2ZW4gdGh7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1yb3ctaGVh''@;'; put 'put ''ZGVyLWV2ZW4tYmFja2dyb3VuZC1jb2xvcil9LmhhbmRzb250YWJsZSB0ci5odF9fcm93X2V2ZW4gdGR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1yb3ctY2VsbC1ldmVuLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgdHIuaHRfX3Jvd19vZGQgdGh7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1odC1yb3ctaGVhZGVyLW9kZC1iYWNrZ3JvdW5kLWNvbG9yKX0uaGFuZHNvbnRhYmxlIHRyLmh0X19yb3dfb2RkIHRke2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtcm93LWNlbGwtb2RkLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgdGgsLmhhbmRzb250YWJsZSB0''@;'; put 'put ''ZHtoZWlnaHQ6Y2FsYyh2YXIoLS1odC1jZWxsLXZlcnRpY2FsLXBhZGRpbmcpKjIgKyB2YXIoLS1odC1saW5lLWhlaWdodCkgKyAxcHgpO3BhZGRpbmc6dmFyKC0taHQtY2VsbC12ZXJ0aWNhbC1wYWRkaW5nKXZhcigtLWh0LWNlbGwtaG9yaXpvbnRhbC1wYWRkaW5nKTt2ZXJ0aWNhbC1hbGln''@;'; put 'put ''bjp0b3A7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1pbmxpbmUtd2lkdGg6MCAxcHg7Zm9udC1zaXplOnZhcigtLWh0LWZvbnQtc2l6ZSk7bGluZS1oZWlnaHQ6dmFyKC0taHQtbGluZS1oZWlnaHQpO3doaXRlLXNwYWNlOnByZS13cmFwO2VtcHR5LWNlbGxzOnNob3c7Ym94LXNpemluZzpi''@;'; put 'put ''b3JkZXItYm94O2NvbG9yOnZhcigtLWh0LWZvcmVncm91bmQtY29sb3IpO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLXdpZHRoOjFweDtib3JkZXItdG9wLWNvbG9yOnZhcigtLWh0LWNlbGwtdmVydGljYWwtYm9yZGVyLWNvbG9yKTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigt''@;'; put 'put ''LWh0LWNlbGwtdmVydGljYWwtYm9yZGVyLWNvbG9yKTtib3JkZXItaW5saW5lLXN0YXJ0LWNvbG9yOnZhcigtLWh0LWNlbGwtaG9yaXpvbnRhbC1ib3JkZXItY29sb3IpO2JvcmRlci1pbmxpbmUtZW5kLWNvbG9yOnZhcigtLWh0LWNlbGwtaG9yaXpvbnRhbC1ib3JkZXItY29sb3IpO291dGxp''@;'; put 'put ''bmU6MDtvdmVyZmxvdzpoaWRkZW59LmhhbmRzb250YWJsZSB0aC5pbnZpc2libGVTZWxlY3Rpb24sLmhhbmRzb250YWJsZSB0ZC5pbnZpc2libGVTZWxlY3Rpb257b3V0bGluZTpub25lfS5oYW5kc29udGFibGUgdGguaW52aXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb24sLmhhbmRzb250YWJs''@;'; put 'put ''ZSB0ZC5pbnZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbntiYWNrZ3JvdW5kOjAgMH0uaGFuZHNvbnRhYmxlIHRoe3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtd2VpZ2h0OnZhcigtLWh0LWhlYWRlci1mb250LXdlaWdodCk7d2hpdGUtc3BhY2U6bm93cmFwO2NvbG9yOnZhcigtLWh0LWhlYWRl''@;'; put 'put ''ci1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yKTtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzp2aXNpYmxlfS5oYW5kc29udGFibGUgdGg6bGFzdC1jaGlsZHtib3JkZXItaW5saW5lLXdpZHRoOjAgMXB4O2JvcmRl''@;'; put 'put ''ci1ib3R0b20td2lkdGg6MXB4O2JvcmRlci1pbmxpbmUtZW5kLWNvbG9yOnZhcigtLWh0LWJvcmRlci1jb2xvcil9LmhhbmRzb250YWJsZSB0aDpsYXN0LWNoaWxkLmh0X19hY3RpdmVfaGlnaGxpZ2h0e2JvcmRlci1pbmxpbmUtZW5kLWNvbG9yOnZhcigtLWh0LWhlYWRlci1hY3RpdmUtYm9y''@;'; put 'put ''ZGVyLWNvbG9yKX0uaGFuZHNvbnRhYmxlIHRoOmZpcnN0LWNoaWxke2JvcmRlci1pbmxpbmUtc3RhcnQtY29sb3I6dmFyKC0taHQtYm9yZGVyLWNvbG9yKX0uaGFuZHNvbnRhYmxlIHRoOmZpcnN0LWNoaWxkLmh0X19hY3RpdmVfaGlnaGxpZ2h0e2JvcmRlci1pbmxpbmUtc3RhcnQtY29sb3I6''@;'; put 'put ''dmFyKC0taHQtaGVhZGVyLWFjdGl2ZS1ib3JkZXItY29sb3IpfS5oYW5kc29udGFibGUgdGg6Zmlyc3QtY2hpbGQsLmhhbmRzb250YWJsZSB0aDpudGgtY2hpbGQoMil7Ym9yZGVyLWlubGluZS1zdGFydC13aWR0aDoxcHh9LmhhbmRzb250YWJsZSB0aC5jdXJyZW50e2JveC1zaGFkb3c6aW5z''@;'; put 'put ''ZXQgMCAwIDAgMXB4IHZhcigtLWh0LWNlbGwtc2VsZWN0aW9uLWJvcmRlci1jb2xvcil9LmhhbmRzb250YWJsZSB0aC5hY3RpdmV7Y29sb3I6dmFyKC0taHQtaGVhZGVyLWFjdGl2ZS1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWhlYWRlci1hY3RpdmUtYmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcil9LmhhbmRzb250YWJsZSB0aC5odF9faGlnaGxpZ2h0e2NvbG9yOnZhcigtLWh0LWhlYWRlci1oaWdobGlnaHRlZC1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWhlYWRlci1oaWdobGlnaHRlZC1iYWNrZ3JvdW5kLWNvbG9yKX0uaGFu''@;'; put 'put ''ZHNvbnRhYmxlIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0e2JvcmRlci1jb2xvcjp2YXIoLS1odC1oZWFkZXItYWN0aXZlLWJvcmRlci1jb2xvcik7Y29sb3I6dmFyKC0taHQtaGVhZGVyLWFjdGl2ZS1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWhlYWRlci1h''@;'; put 'put ''Y3RpdmUtYmFja2dyb3VuZC1jb2xvcil9LmhhbmRzb250YWJsZSB0Ym9keSB0ci5odF9fcm93X29kZCB0aC5odF9faGlnaGxpZ2h0LC5oYW5kc29udGFibGUgdGJvZHkgdHIuaHRfX3Jvd19ldmVuIHRoLmh0X19oaWdobGlnaHR7Y29sb3I6dmFyKC0taHQtaGVhZGVyLXJvdy1oaWdobGlnaHRl''@;'; put 'put ''ZC1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWhlYWRlci1yb3ctaGlnaGxpZ2h0ZWQtYmFja2dyb3VuZC1jb2xvcil9LmhhbmRzb250YWJsZSB0Ym9keSB0ci5odF9fcm93X29kZCB0aC5odF9fYWN0aXZlX2hpZ2hsaWdodCwuaGFuZHNvbnRhYmxlIHRib2R5''@;'; put 'put ''IHRyLmh0X19yb3dfZXZlbiB0aC5odF9fYWN0aXZlX2hpZ2hsaWdodHtjb2xvcjp2YXIoLS1odC1oZWFkZXItcm93LWFjdGl2ZS1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWhlYWRlci1yb3ctYWN0aXZlLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFi''@;'; put 'put ''bGUgdGJvZHkgdHI6Zmlyc3Qtb2YtdHlwZSB0aDpmaXJzdC1jaGlsZDplbXB0eTphZnRlciwuaGFuZHNvbnRhYmxlIHRib2R5IHRyOmZpcnN0LW9mLXR5cGUgdGQ6Zmlyc3QtY2hpbGQ6ZW1wdHk6YWZ0ZXJ7Y29udGVudDoiIjttaW4taGVpZ2h0OnZhcigtLWh0LWxpbmUtaGVpZ2h0KTtkaXNw''@;'; put 'put ''bGF5OmJsb2NrfS5oYW5kc29udGFibGUgdGJvZHkgdHIgdGh7Y29sb3I6dmFyKC0taHQtaGVhZGVyLXJvdy1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWhlYWRlci1yb3ctYmFja2dyb3VuZC1jb2xvcik7cGFkZGluZzowfS5oYW5kc29udGFibGUgdGJvZHkg''@;'; put 'put ''dHIgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHR7Ym94LXNoYWRvdzowIC0xcHggMCAwIHZhcigtLWh0LWhlYWRlci1hY3RpdmUtYm9yZGVyLWNvbG9yKX0uaGFuZHNvbnRhYmxlIHRib2R5IHRyIHRoIC5yZWxhdGl2ZXtwYWRkaW5nOnZhcigtLWh0LWNlbGwtdmVydGljYWwtcGFkZGluZyl2YXIo''@;'; put 'put ''LS1odC1jZWxsLWhvcml6b250YWwtcGFkZGluZyk7bWluLWhlaWdodDoxMDAlfS5oYW5kc29udGFibGUgdGJvZHkgdHIgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLWlubGluZS1zdGFydC1jb2xvcjp2YXIoLS1odC1ib3JkZXItY29sb3IpfS5oYW5kc29udGFibGUgdGJvZHkgdHIgdGQ6bGFzdC1j''@;'; put 'put ''aGlsZHtib3JkZXItaW5saW5lLWVuZC1jb2xvcjp2YXIoLS1odC1ib3JkZXItY29sb3IpfS5oYW5kc29udGFibGUgdGhlYWQgdHIgdGh7cGFkZGluZzowfS5oYW5kc29udGFibGUgdGhlYWQgdHIgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHR7Ym94LXNoYWRvdzotMXB4IDAgMCAwIHZhcigtLWh0''@;'; put 'put ''LWhlYWRlci1hY3RpdmUtYm9yZGVyLWNvbG9yKX0uaGFuZHNvbnRhYmxlIHRoZWFkIHRyIHRoIC5yZWxhdGl2ZXtwYWRkaW5nOnZhcigtLWh0LWNlbGwtdmVydGljYWwtcGFkZGluZyl2YXIoLS1odC1jZWxsLWhvcml6b250YWwtcGFkZGluZyk7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0''@;'; put 'put ''ZW1zOmNlbnRlcjtnYXA6MnB4O2Rpc3BsYXk6ZmxleH0uaGFuZHNvbnRhYmxlIHRoZWFkIHRyIHRoIC5yZWxhdGl2ZSAuY29sSGVhZGVye3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7dmVydGljYWwtYWxpZ246dG9wO2ZsZXg6YXV0bzttaW4td2lkdGg6MDtvdmVyZmxvdzpoaWRkZW59LmhhbmRz''@;'; put 'put ''b250YWJsZSB0cjpmaXJzdC1jaGlsZCB0aCwuaGFuZHNvbnRhYmxlIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3AtY29sb3I6dmFyKC0taHQtYm9yZGVyLWNvbG9yKTtib3JkZXItdG9wLXdpZHRoOjFweH0uaGFuZHNvbnRhYmxlIHRyOmZpcnN0LWNoaWxkIHRoLmh0X19hY3RpdmVfaGln''@;'; put 'put ''aGxpZ2h0LC5oYW5kc29udGFibGUgdHI6Zmlyc3QtY2hpbGQgdGQuaHRfX2FjdGl2ZV9oaWdobGlnaHR7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1odC1oZWFkZXItYWN0aXZlLWJvcmRlci1jb2xvcil9LmhhbmRzb250YWJsZSB0cjpsYXN0LWNoaWxkIHRoLC5oYW5kc29udGFibGUgdHI6bGFz''@;'; put 'put ''dC1jaGlsZCB0ZHtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWh0LWJvcmRlci1jb2xvcil9LmhhbmRzb250YWJsZSB0cjpsYXN0LWNoaWxkIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0LC5oYW5kc29udGFibGUgdHI6bGFzdC1jaGlsZCB0ZC5odF9fYWN0aXZlX2hpZ2hsaWdodHtib3JkZXIt''@;'; put 'put ''Ym90dG9tLWNvbG9yOnZhcigtLWh0LWhlYWRlci1hY3RpdmUtYm9yZGVyLWNvbG9yKX0uaGFuZHNvbnRhYmxlIGRpdltjbGFzc149aHRfY2xvbmVdIHRoZWFkIC5odF9faGlnaGxpZ2h0IC5yZWxhdGl2ZTphZnRlcntjb250ZW50OiIiO2hlaWdodDp2YXIoLS1odC1oZWFkZXItaGlnaGxpZ2h0''@;'; put 'put ''ZWQtc2hhZG93LXNpemUpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtYWNjZW50LWNvbG9yKTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTotMXB4O2xlZnQ6LTFweDtyaWdodDotMXB4fS5oYW5kc29udGFibGUgZGl2W2NsYXNzXj1odF9jbG9uZV0gdGhlYWQgdHI6''@;'; put 'put ''b25seS1vZi10eXBlIC5odF9faGlnaGxpZ2h0IC5yZWxhdGl2ZTphZnRlcntib3R0b206MH0uaGFuZHNvbnRhYmxlIGRpdltjbGFzc149aHRfY2xvbmVdIHRib2R5IC5odF9faGlnaGxpZ2h0IC5yZWxhdGl2ZTphZnRlcntjb250ZW50OiIiO3dpZHRoOnZhcigtLWh0LWhlYWRlci1oaWdobGln''@;'; put 'put ''aHRlZC1zaGFkb3ctc2l6ZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1hY2NlbnQtY29sb3IpO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOi0xcHg7Ym90dG9tOi0xcHg7cmlnaHQ6LTFweH0uaGFuZHNvbnRhYmxlIGRpdltjbGFzc149aHRfY2xvbmVdIHRkOmZpcnN0''@;'; put 'put ''LW9mLXR5cGV7Ym9yZGVyLWlubGluZS1zdGFydC13aWR0aDoxcHh9LmhhbmRzb250YWJsZSB0aGVhZCB0cjpub3QoOmxhc3QtY2hpbGQpIHRoe292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlIC5oaWRle2Rpc3BsYXk6bm9uZX0uaGFuZHNvbnRhYmxlIC5yZWxhdGl2ZXtib3gtc2l6aW5n''@;'; put 'put ''OmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZSAud3RIaWRlcnt3aWR0aDowfS5oYW5kc29udGFibGUgLnd0U3ByZWFkZXJ7d2lkdGg6MDtoZWlnaHQ6YXV0bztwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIC5odEF1dG9TaXple3Zpc2liaWxpdHk6aGlk''@;'; put 'put ''ZGVuO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotOTkwMDBweDtsZWZ0Oi05OTAwMHB4fS5oYW5kc29udGFibGUgLmh0VGV4dEVsbGlwc2lze3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlIHRhYmxlLC5oYW5kc29u''@;'; put 'put ''dGFibGUgdGJvZHksLmhhbmRzb250YWJsZSB0aGVhZCwuaGFuZHNvbnRhYmxlIGlucHV0LC5oYW5kc29udGFibGUgdGV4dGFyZWEsLmhhbmRzb250YWJsZSBkaXZ7Ym94LXNpemluZzpjb250ZW50LWJveH0uaGFuZHNvbnRhYmxlIGlucHV0LC5oYW5kc29udGFibGUgdGV4dGFyZWF7bWluLWhl''@;'; put 'put ''aWdodDppbml0aWFsfS5oYW5kc29udGFibGUgLmh0Q29yZXtib3JkZXItc3BhY2luZzowO2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTt0YWJsZS1sYXlvdXQ6Zml4ZWQ7Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItd2lk''@;'; put 'put ''dGg6MDtvdXRsaW5lLXdpZHRoOjA7d2lkdGg6MDttYXJnaW46MH0uaGFuZHNvbnRhYmxlIGNvbCwuaGFuZHNvbnRhYmxlIGNvbC5yb3dIZWFkZXJ7d2lkdGg6NjRweH0uaGFuZHNvbnRhYmxlIGNvbC5oaWRkZW57d2lkdGg6MCFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRl''@;'; put 'put ''ciwuaGFuZHNvbnRhYmxlIHNwYW4ucm93SGVhZGVye2ZvbnQtc2l6ZTp2YXIoLS1odC1mb250LXNpemUpO2xpbmUtaGVpZ2h0OnZhcigtLWh0LWxpbmUtaGVpZ2h0KTtkaXNwbGF5OmlubGluZS1ibG9ja30uaGFuZHNvbnRhYmxlIHRyLmhpZGRlbiwuaGFuZHNvbnRhYmxlIHRyLmhpZGRlbiB0''@;'; put 'put ''ZCwuaGFuZHNvbnRhYmxlIHRyLmhpZGRlbiB0aHtkaXNwbGF5Om5vbmV9LmhhbmRzb250YWJsZSBhe2NvbG9yOnZhcigtLWh0LWxpbmstY29sb3IpfS5oYW5kc29udGFibGUgYTpob3Zlcntjb2xvcjp2YXIoLS1odC1saW5rLWhvdmVyLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odF9jbG9uZV90''@;'; put 'put ''b3AgdGg6bnRoLWNoaWxkKDIpLC5oYW5kc29udGFibGUgLmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyIHRoOm50aC1jaGlsZCgyKXtib3JkZXItaW5saW5lLXdpZHRoOjAgMXB4fS5oYW5kc29udGFibGUuaHRSb3dIZWFkZXJzIHRoZWFkIHRyIHRoOm50aC1jaGlsZCgyKXtib3Jk''@;'; put 'put ''ZXItaW5saW5lLXN0YXJ0LXdpZHRoOjFweH0uaGFuZHNvbnRhYmxlIC5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlcklubGluZVN0YXJ0KTpub3QoLmVtcHR5Q29sdW1ucykgdGJvZHkgdHIgdGgsLmhhbmRzb250YWJsZSAuaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6''@;'; put 'put ''bm90KC5lbXB0eUNvbHVtbnMpIHRoZWFkIHRyIHRoOmZpcnN0LWNoaWxkLC5oYW5kc29udGFibGUgLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVySW5saW5lU3RhcnQpOm5vdCguZW1wdHlDb2x1bW5zKX4uaGFuZHNvbnRhYmxlOm5vdCguaHRHaG9zdFRhYmxlKSB0Ym9keSB0ciB0aCwuaGFu''@;'; put 'put ''ZHNvbnRhYmxlIC5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlcklubGluZVN0YXJ0KTpub3QoLmVtcHR5Q29sdW1ucyl+LmhhbmRzb250YWJsZTpub3QoLmh0X2Nsb25lX3RvcCk6bm90KC5odEdob3N0VGFibGUpIHRoZWFkIHRyIHRoOmZpcnN0LWNoaWxke2JvcmRlci1pbmxpbmUtd2lkdGg6''@;'; put 'put ''MXB4IDB9LmhhbmRzb250YWJsZSAuaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJUb3ApOm5vdCguaW5uZXJCb3JkZXJCb3R0b20pIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGgsLmhhbmRzb250YWJsZSAuaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJUb3ApOm5vdCguaW5uZXJCb3JkZXJCb3R0''@;'; put 'put ''b20pfi5oYW5kc29udGFibGUgdGhlYWQgdHI6bGFzdC1jaGlsZCB0aCwuaGFuZHNvbnRhYmxlIC5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlclRvcCk6bm90KC5pbm5lckJvcmRlckJvdHRvbSkgdGhlYWQgdHIubGFzdENoaWxkIHRoLC5oYW5kc29udGFibGUgLmh0X21hc3Rlcjpub3QoLmlu''@;'; put 'put ''bmVyQm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKX4uaGFuZHNvbnRhYmxlIHRoZWFkIHRyLmxhc3RDaGlsZCB0aHtib3JkZXItYm90dG9tLXdpZHRoOjB9LmhhbmRzb250YWJsZS5odEF1dG9Sb3dTaXplIC5odF9tYXN0ZXIuaW5uZXJCb3JkZXJUb3AgdGJvZHkgdHI6Zmlyc3Qt''@;'; put 'put ''Y2hpbGQgdGgsLmhhbmRzb250YWJsZS5odEF1dG9Sb3dTaXplIC5odF9tYXN0ZXIuaW5uZXJCb3JkZXJUb3AgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQsLmhhbmRzb250YWJsZS5odEF1dG9Sb3dTaXplIC5odF9tYXN0ZXIuaW5uZXJCb3JkZXJUb3B+Lmh0X2Nsb25lX2lubGluZV9zdGFydCB0''@;'; put 'put ''Ym9keSB0cjpmaXJzdC1jaGlsZCB0aCwuaGFuZHNvbnRhYmxlLmh0QXV0b1Jvd1NpemUgLmh0X21hc3Rlci5pbm5lckJvcmRlclRvcH4uaHRfY2xvbmVfaW5saW5lX3N0YXJ0IHRib2R5IHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3Atd2lkdGg6MH0uaGFuZHNvbnRhYmxlIC5odF9tYXN0''@;'; put 'put ''ZXIgdGFibGUuaHRDb3JlPnRoZWFkLC5oYW5kc29udGFibGUgLmh0X21hc3RlciB0YWJsZS5odENvcmU+dGJvZHk+dHI+dGgsLmhhbmRzb250YWJsZSAuaHRfY2xvbmVfaW5saW5lX3N0YXJ0IHRhYmxlLmh0Q29yZT50aGVhZHt2aXNpYmlsaXR5OmhpZGRlbn0uaHRfbWFzdGVyLC5odF9jbG9u''@;'; put 'put ''ZV9pbmxpbmVfc3RhcnQsLmh0X2Nsb25lX3RvcCwuaHRfY2xvbmVfYm90dG9tLC5odF9tYXN0ZXIgLnd0SG9sZGVyLC5odF9jbG9uZV9pbmxpbmVfc3RhcnQgLnd0SG9sZGVyLC5odF9jbG9uZV90b3AgLnd0SG9sZGVyLC5odF9jbG9uZV9ib3R0b20gLnd0SG9sZGVye292ZXJmbG93OmhpZGRl''@;'; put 'put ''bn0uaHRfbWFzdGVyIC53dEhvbGRlcntvdmVyZmxvdzphdXRvfVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGRbZGlyPWx0cl17Ym9yZGVyLWlubGluZS13aWR0aDoxcHggMH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRib2R5IHRyIHRkW2Rpcj1sdHJdOmxhc3QtY2hpbGR7Ym9yZGVyLWlubGlu''@;'; put 'put ''ZS1zdGFydC1jb2xvcjp2YXIoLS1odC1ib3JkZXItY29sb3IpfVtkaXI9cnRsXS5oYW5kc29udGFibGUgZGl2W2NsYXNzXj1odF9jbG9uZV0gdGJvZHkgLmh0X19oaWdobGlnaHQgLnJlbGF0aXZlOmFmdGVye2xlZnQ6LTFweDtyaWdodDphdXRvfS5oYW5kc29udGFibGUuaHQtd3JhcHBlcnti''@;'; put 'put ''b3JkZXItcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlcjpub3QoLmh0Q29sdW1uSGVhZGVycykgLmh0X21hc3RlciAuaHRDb3JlIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDps''@;'; put 'put ''YW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIp''@;'; put 'put ''LDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXI6bm90KC5odENvbHVtbkhlYWRlcnMpIC5odF9tYXN0ZXIgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZDppcyg6''@;'; put 'put ''bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNk''@;'; put 'put ''KSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyOm5vdCguaHRDb2x1bW5IZWFkZXJzKSAuaHRfbWFzdGVyIC5odENvcmUgdGJvZHkgdHI6Zmlyc3QtY2hp''@;'; put 'put ''bGQgdGQ6bGFzdC1jaGlsZDpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhw''@;'; put 'put ''bmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlcjpub3QoLmh0Q29sdW1uSGVhZGVycykgLmh0X21hc3RlciAuaHRD''@;'; put 'put ''b3JlIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hpbGQ6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16''@;'; put 'put ''biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyOm5vdCguaHRDb2x1bW5IZWFk''@;'; put 'put ''ZXJzKSAuaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZDpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFu''@;'; put 'put ''ZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1''@;'; put 'put ''cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyOm5vdCguaHRDb2x1bW5IZWFkZXJzKSAuaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZDppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxh''@;'; put 'put ''bmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7''@;'; put 'put ''Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyOm5vdCguaHRDb2x1bW5IZWFkZXJzKSAuaHRfY2xvbmVfdG9wIC5odENvcmUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQ6bm90KDpsYW5nKGFl''@;'; put 'put ''KSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5n''@;'; put 'put ''KHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlcjpub3QoLmh0Q29sdW1uSGVhZGVycykgLmh0X2Nsb25lX3RvcCAuaHRDb3JlIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRk''@;'; put 'put ''OmZpcnN0LWNoaWxkOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6''@;'; put 'put ''bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXI6bm90KC5odENvbHVtbkhlYWRlcnMpIC5odF9jbG9uZV90b3AgLmh0Q29y''@;'; put 'put ''ZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpu''@;'; put 'put ''KSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyOm5vdCguaHRDb2x1bW5IZWFk''@;'; put 'put ''ZXJzKSAuaHRfY2xvbmVfdG9wIC5odENvcmUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZDppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5n''@;'; put 'put ''KGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX06aXMoLmhhbmRzb250YWJsZS5o''@;'; put 'put ''dC13cmFwcGVyOm5vdCguaHRDb2x1bW5IZWFkZXJzKSAuaHRfY2xvbmVfaW5saW5lX3N0YXJ0IC5odENvcmUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQ6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2ti''@;'; put 'put ''KSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKSwuaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXI6bm90''@;'; put 'put ''KC5odENvbHVtbkhlYWRlcnMpIC5odF9jbG9uZV9pbmxpbmVfc3RhcnQgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZDpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6''@;'; put 'put ''bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1y''@;'; put 'put ''YWRpdXMpfTppcyguaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXI6bm90KC5odENvbHVtbkhlYWRlcnMpIC5odF9jbG9uZV9pbmxpbmVfc3RhcnQgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZDppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmco''@;'; put 'put ''YmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSksLmhh''@;'; put 'put ''bmRzb250YWJsZS5odC13cmFwcGVyOm5vdCguaHRDb2x1bW5IZWFkZXJzKSAuaHRfY2xvbmVfaW5saW5lX3N0YXJ0IC5odENvcmUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQ6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFp''@;'; put 'put ''KSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpKXtib3JkZXItdG9wLXJpZ2h0''@;'; put 'put ''LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X21hc3RlciAud3RIb2xkZXIsLmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9tYXN0ZXIgLmh0Q29yZXtib3JkZXItcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5k''@;'; put 'put ''c29udGFibGUuaHQtd3JhcHBlciAuaHRfbWFzdGVyIC5odENvcmUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQ6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDps''@;'; put 'put ''YW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5k''@;'; put 'put ''c29udGFibGUuaHQtd3JhcHBlciAuaHRfbWFzdGVyIC5odENvcmUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQ6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxh''@;'; put 'put ''bmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5k''@;'; put 'put ''c29udGFibGUuaHQtd3JhcHBlciAuaHRfbWFzdGVyIC5odENvcmUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6bm90KC5oaWRkZW5IZWFkZXIpOm5vdCg6aGFzKH50aDpub3QoLmhpZGRlbkhlYWRlcikpKTpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxh''@;'; put 'put ''bmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3At''@;'; put 'put ''cmlnaHQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfbWFzdGVyIC5odENvcmUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6bm90KC5oaWRkZW5IZWFkZXIpOm5vdCg6aGFzKH50aDpub3QoLmhpZGRlbkhlYWRlcikpKTppcyg6bGFu''@;'; put 'put ''ZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6''@;'; put 'put ''bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X21hc3RlciAuaHRDb3JlIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQ6bm90KDpsYW5n''@;'; put 'put ''KGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDps''@;'; put 'put ''YW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfbWFzdGVyIC5odENvcmUgdGhlYWQgdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZDppcyg6bGFu''@;'; put 'put ''ZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6''@;'; put 'put ''bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9tYXN0ZXIgLmh0Q29yZSB0aGVhZCB0cjpsYXN0LWNoaWxkIHRoOm5vdCguaGlkZGVuSGVhZGVy''@;'; put 'put ''KTpub3QoOmhhcyh+dGg6bm90KC5oaWRkZW5IZWFkZXIpKSk6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4p''@;'; put 'put ''LDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X21hc3RlciAuaHRD''@;'; put 'put ''b3JlIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGg6bm90KC5oaWRkZW5IZWFkZXIpOm5vdCg6aGFzKH50aDpub3QoLmhpZGRlbkhlYWRlcikpKTppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZh''@;'; put 'put ''KSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVz''@;'; put 'put ''KX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X21hc3RlciAuaHRDb3JlIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQ6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmco''@;'; put 'put ''ZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRp''@;'; put 'put ''dXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfbWFzdGVyIC5odENvcmUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZDppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5n''@;'; put 'put ''KGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJh''@;'; put 'put ''ZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9tYXN0ZXIgLmh0Q29yZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQ6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxh''@;'; put 'put ''bmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1odC1ib3JkZXIt''@;'; put 'put ''cmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X21hc3RlciAuaHRDb3JlIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZDppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDps''@;'; put 'put ''YW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1odC1ib3JkZXIt''@;'; put 'put ''cmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyIC5odENvcmU6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDps''@;'; put 'put ''YW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5k''@;'; put 'put ''c29udGFibGUuaHQtd3JhcHBlciAuaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIgLmh0Q29yZTppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5n''@;'; put 'put ''KGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13''@;'; put 'put ''cmFwcGVyIC5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciAuaHRDb3JlIHRoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDps''@;'; put 'put ''YW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFk''@;'; put 'put ''aXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyIC5odENvcmUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQ6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6''@;'; put 'put ''bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtcmlnaHQtcmFk''@;'; put 'put ''aXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfY2xvbmVfdG9wIC5odENvcmU6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDps''@;'; put 'put ''YW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpO2JvcmRl''@;'; put 'put ''ci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfY2xvbmVfdG9wIC5odENvcmU6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2''@;'; put 'put ''KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWh0LWJvcmRl''@;'; put 'put ''ci1yYWRpdXMpO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV90b3AgLmh0Q29yZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZDpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6''@;'; put 'put ''bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVy''@;'; put 'put ''KSw6bGFuZyh5aSkpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV90b3AgLmh0Q29yZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZDppcyg6bGFuZyhhZSksOmxhbmcoYXIp''@;'; put 'put ''LDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmco''@;'; put 'put ''dXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV90b3AgLmh0Q29yZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpub3QoLmhpZGRlbkhlYWRlcik6bm90KDpoYXMofnRo''@;'; put 'put ''Om5vdCguaGlkZGVuSGVhZGVyKSkpOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDps''@;'; put 'put ''YW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV90b3AgLmh0Q29yZSB0aGVhZCB0cjpm''@;'; put 'put ''aXJzdC1jaGlsZCB0aDpub3QoLmhpZGRlbkhlYWRlcik6bm90KDpoYXMofnRoOm5vdCguaGlkZGVuSGVhZGVyKSkpOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayks''@;'; put 'put ''OmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUu''@;'; put 'put ''aHQtd3JhcHBlciAuaHRfY2xvbmVfaW5saW5lX3N0YXJ0IC5odENvcmU6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFu''@;'; put 'put ''Zyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0taHQtYm9y''@;'; put 'put ''ZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV9pbmxpbmVfc3RhcnQgLmh0Q29yZTppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGsp''@;'; put 'put ''LDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLWJvdHRv''@;'; put 'put ''bS1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV9pbmxpbmVfc3RhcnQgLmh0Q29yZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZDpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMp''@;'; put 'put ''LDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5''@;'; put 'put ''aSkpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV9pbmxpbmVfc3RhcnQgLmh0Q29yZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZDppcyg6bGFuZyhhZSksOmxhbmcoYXIp''@;'; put 'put ''LDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmco''@;'; put 'put ''dXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyl9OmlzKC5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfY2xvbmVfaW5saW5lX3N0YXJ0IC5odENvcmUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZDpub3QoOmxh''@;'; put 'put ''bmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCks''@;'; put 'put ''OmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpLC5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfY2xvbmVfaW5saW5lX3N0YXJ0IC5odENvcmUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZDpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJj''@;'; put 'put ''YyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpKXtib3Jk''@;'; put 'put ''ZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfTppcyguaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X2Nsb25lX2lubGluZV9zdGFydCAuaHRDb3JlIHRib2R5IHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQ6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6''@;'; put 'put ''bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVy''@;'; put 'put ''KSw6bGFuZyh5aSkpLC5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfY2xvbmVfaW5saW5lX3N0YXJ0IC5odENvcmUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZDppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5n''@;'; put 'put ''KGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSkpe2JvcmRlci1ib3R0b20tcmlnaHQtcmFk''@;'; put 'put ''aXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIgLmh0Q29yZTpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2Ip''@;'; put 'put ''LDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFy''@;'; put 'put ''KC0taHQtYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciAuaHRDb3JlOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhk''@;'; put 'put ''diksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1odC1i''@;'; put 'put ''b3JkZXItcmFkaXVzKX06aXMoLmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciAuaHRDb3JlIHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQ6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDps''@;'; put 'put ''YW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKSwuaGFuZHNvbnRh''@;'; put 'put ''YmxlLmh0LXdyYXBwZXIgLmh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIC5odENvcmUgdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZDpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2''@;'; put 'put ''KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpKXtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJv''@;'; put 'put ''cmRlci1yYWRpdXMpfTppcyguaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIC5odENvcmUgdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZDppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFu''@;'; put 'put ''ZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSksLmhhbmRzb250YWJs''@;'; put 'put ''ZS5odC13cmFwcGVyIC5odF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciAuaHRDb3JlIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQ6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6''@;'; put 'put ''bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1odC1ib3Jk''@;'; put 'put ''ZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X2Nsb25lX2JvdHRvbSAuaHRDb3JlOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5n''@;'; put 'put ''KGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLWJvdHRvbS1s''@;'; put 'put ''ZWZ0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X2Nsb25lX2JvdHRvbSAuaHRDb3JlOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxh''@;'; put 'put ''bmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1y''@;'; put 'put ''YWRpdXMpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfTppcyguaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X2Nsb25lX2JvdHRvbSAuaHRDb3JlIHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQ6bm90KDpsYW5nKGFlKSw6bGFuZyhhciks''@;'; put 'put ''OmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1''@;'; put 'put ''ciksOmxhbmcoeWkpKSwuaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X2Nsb25lX2JvdHRvbSAuaHRDb3JlIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQ6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFu''@;'; put 'put ''ZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKSl7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1o''@;'; put 'put ''dC1ib3JkZXItcmFkaXVzKX06aXMoLmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV9ib3R0b20gLmh0Q29yZSB0cjpsYXN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2ti''@;'; put 'put ''KSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKSwuaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0''@;'; put 'put ''X2Nsb25lX2JvdHRvbSAuaHRDb3JlIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQ6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmco''@;'; put 'put ''a3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX06aXMoLmhhbmRzb250YWJsZS5odC13cmFw''@;'; put 'put ''cGVyIC5odF9jbG9uZV9ib3R0b20gLmh0Q29yZSB0cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQ6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUp''@;'; put 'put ''LDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKSwuaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIgLmh0X2Nsb25lX2JvdHRvbSAuaHRDb3JlIHRyOmxhc3QtY2hpbGQgdGQ6bGFz''@;'; put 'put ''dC1jaGlsZDpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5n''@;'; put 'put ''KHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX06aXMoLmhhbmRzb250YWJsZS5odC13cmFwcGVyIC5odF9jbG9uZV9ib3R0b20gLmh0Q29yZSB0cjpsYXN0LWNoaWxk''@;'; put 'put ''IHRoOmxhc3QtY2hpbGQ6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIp''@;'; put 'put ''LDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpLC5oYW5kc29udGFibGUuaHQtd3JhcHBlciAuaHRfY2xvbmVfYm90dG9tIC5odENvcmUgdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6''@;'; put 'put ''bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkp''@;'; put 'put ''KSl7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKX0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIuaHRIYXNTY3JvbGxYOm5vdCguaHRIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3cpIC5odENvcmU6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxh''@;'; put 'put ''bmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciks''@;'; put 'put ''OmxhbmcoeWkpKSwuaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIuaHRIYXNTY3JvbGxYOm5vdCguaHRIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3cpIC5odENvcmU6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDps''@;'; put 'put ''YW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9y''@;'; put 'put ''ZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfTppcyguaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIuaHRIYXNTY3JvbGxYOm5vdCguaHRIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3cpIC5odENvcmUgdGhlYWQgdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZDpub3QoOmxhbmcoYWUpLDps''@;'; put 'put ''YW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcp''@;'; put 'put ''LDpsYW5nKHVyKSw6bGFuZyh5aSkpLC5oYW5kc29udGFibGUuaHQtd3JhcHBlci5odEhhc1Njcm9sbFg6bm90KC5odEhvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29yZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIp''@;'; put 'put ''LDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmco''@;'; put 'put ''dXIpLDpsYW5nKHlpKSksLmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWDpub3QoLmh0SG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KSAuaHRDb3JlIHRib2R5IHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQ6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmco''@;'; put 'put ''YXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxh''@;'; put 'put ''bmcoeWkpKSl7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfTppcyguaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIuaHRIYXNTY3JvbGxYOm5vdCguaHRIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3cpIC5odENvcmUgdGhlYWQgdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZDppcyg6''@;'; put 'put ''bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNk''@;'; put 'put ''KSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSksLmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWDpub3QoLmh0SG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KSAuaHRDb3JlIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQ6aXMoOmxhbmcoYWUp''@;'; put 'put ''LDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmco''@;'; put 'put ''dWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpLC5oYW5kc29udGFibGUuaHQtd3JhcHBlci5odEhhc1Njcm9sbFg6bm90KC5odEhvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29yZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkOmlzKDpsYW5nKGFlKSw6bGFuZyhh''@;'; put 'put ''ciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFu''@;'; put 'put ''Zyh1ciksOmxhbmcoeWkpKSl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH06aXMoLmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWDpub3QoLmh0SG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KSAuaHRDb3JlIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGg6bm90KC5o''@;'; put 'put ''aWRkZW5IZWFkZXIpOm5vdCg6aGFzKH50aDpub3QoLmhpZGRlbkhlYWRlcikpKSwuaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIuaHRIYXNTY3JvbGxYOm5vdCguaHRIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3cpIC5odENvcmUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxk''@;'; put 'put ''LC5oYW5kc29udGFibGUuaHQtd3JhcHBlci5odEhhc1Njcm9sbFg6bm90KC5odEhvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29yZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQpOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNj''@;'; put 'put ''KSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVy''@;'; put 'put ''LWJvdHRvbS1yaWdodC1yYWRpdXM6MH06aXMoLmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWDpub3QoLmh0SG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KSAuaHRDb3JlIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGg6bm90KC5oaWRkZW5IZWFkZXIpOm5vdCg6aGFzKH50''@;'; put 'put ''aDpub3QoLmhpZGRlbkhlYWRlcikpKSwuaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIuaHRIYXNTY3JvbGxYOm5vdCguaHRIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3cpIC5odENvcmUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLC5oYW5kc29udGFibGUuaHQtd3JhcHBl''@;'; put 'put ''ci5odEhhc1Njcm9sbFg6bm90KC5odEhvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29yZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQpOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6''@;'; put 'put ''bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9Lmhh''@;'; put 'put ''bmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWTpub3QoLmh0VmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29yZTpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhm''@;'; put 'put ''YSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1y''@;'; put 'put ''YWRpdXM6MH0uaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIuaHRIYXNTY3JvbGxZOm5vdCguaHRWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KSAuaHRDb3JlOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhk''@;'; put 'put ''diksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRv''@;'; put 'put ''bS1sZWZ0LXJhZGl1czowfTppcyguaGFuZHNvbnRhYmxlLmh0LXdyYXBwZXIuaHRIYXNTY3JvbGxZOm5vdCguaHRWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KSAuaHRDb3JlIHRoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOm5vdCguaGlkZGVuSGVhZGVyKTpub3QoOmhhcyh+dGg6bm90KC5o''@;'; put 'put ''aWRkZW5IZWFkZXIpKSksLmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWTpub3QoLmh0VmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLC5oYW5kc29udGFibGUuaHQtd3JhcHBlci5odEhhc1Nj''@;'; put 'put ''cm9sbFk6bm90KC5odFZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3cpIC5odENvcmUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCk6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiks''@;'; put 'put ''OmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowfTppcyguaGFuZHNvbnRh''@;'; put 'put ''YmxlLmh0LXdyYXBwZXIuaHRIYXNTY3JvbGxZOm5vdCguaHRWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KSAuaHRDb3JlIHRoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOm5vdCguaGlkZGVuSGVhZGVyKTpub3QoOmhhcyh+dGg6bm90KC5oaWRkZW5IZWFkZXIpKSksLmhhbmRzb250YWJsZS5o''@;'; put 'put ''dC13cmFwcGVyLmh0SGFzU2Nyb2xsWTpub3QoLmh0VmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLC5oYW5kc29udGFibGUuaHQtd3JhcHBlci5odEhhc1Njcm9sbFk6bm90KC5odFZlcnRpY2FsbHlTY3JvbGxh''@;'; put 'put ''YmxlQnlXaW5kb3cpIC5odENvcmUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCk6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSks''@;'; put 'put ''Omxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MH06aXMoLmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWTpub3Qo''@;'; put 'put ''Lmh0VmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29yZSB0aGVhZCB0cjpsYXN0LWNoaWxkIHRoOm5vdCguaGlkZGVuSGVhZGVyKTpub3QoOmhhcyh+dGg6bm90KC5oaWRkZW5IZWFkZXIpKSksLmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWTpub3QoLmh0VmVy''@;'; put 'put ''dGljYWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29yZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsLmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWTpub3QoLmh0VmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29yZSB0Ym9keSB0cjpsYXN0''@;'; put 'put ''LWNoaWxkIHRoOmxhc3QtY2hpbGQpOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDps''@;'; put 'put ''YW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH06aXMoLmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWTpub3QoLmh0VmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRv''@;'; put 'put ''dykgLmh0Q29yZSB0aGVhZCB0cjpsYXN0LWNoaWxkIHRoOm5vdCguaGlkZGVuSGVhZGVyKTpub3QoOmhhcyh+dGg6bm90KC5oaWRkZW5IZWFkZXIpKSksLmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWTpub3QoLmh0VmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0''@;'; put 'put ''Q29yZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsLmhhbmRzb250YWJsZS5odC13cmFwcGVyLmh0SGFzU2Nyb2xsWTpub3QoLmh0VmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdykgLmh0Q29yZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQpOmlzKDpsYW5n''@;'; put 'put ''KGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDps''@;'; put 'put ''YW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9Lmh0LXJvb3Qtd3JhcHBlcntib3JkZXItcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC1ib3R0b20+Lmh0LXNsb3QtZWxlbWVu''@;'; put 'put ''dCkgLmh0LXdyYXBwZXI6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5i''@;'; put 'put ''KSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uaHQtcm9vdC13cmFwcGVyOmhhcyg+Lmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQp''@;'; put 'put ''IC5odC13cmFwcGVyOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6''@;'; put 'put ''bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uaHQtcm9vdC13cmFwcGVyOmhhcyg+Lmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQpIC5o''@;'; put 'put ''dF9tYXN0ZXIgLnd0SG9sZGVyOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5n''@;'; put 'put ''KHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9Lmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LWJvdHRvbT4uaHQtc2xvdC1lbGVt''@;'; put 'put ''ZW50KSAuaHRfbWFzdGVyIC53dEhvbGRlcjppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8p''@;'; put 'put ''LDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9Lmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LWJvdHRvbT4uaHQtc2xv''@;'; put 'put ''dC1lbGVtZW50KSAuaHRDb3JlOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5n''@;'; put 'put ''KHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9Lmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LWJvdHRvbT4uaHQtc2xvdC1lbGVt''@;'; put 'put ''ZW50KSAuaHRDb3JlOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6''@;'; put 'put ''bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH06aXMoLmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LWJvdHRvbT4uaHQtc2xvdC1lbGVtZW50''@;'; put 'put ''KSAuaHRDb3JlIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsLmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LWJvdHRvbT4uaHQtc2xvdC1lbGVtZW50KSAuaHRDb3JlIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsLmh0LXJvb3Qtd3JhcHBlcjpoYXMo''@;'; put 'put ''Pi5odC1zbG90LWJvdHRvbT4uaHQtc2xvdC1lbGVtZW50KSAuaHRDb3JlIHRib2R5IHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZh''@;'; put 'put ''KSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfTppcyguaHQtcm9vdC13cmFwcGVy''@;'; put 'put ''Omhhcyg+Lmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQpIC5odENvcmUgdGhlYWQgdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwuaHQtcm9vdC13cmFwcGVyOmhhcyg+Lmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQpIC5odENvcmUgdGJvZHkgdHI6bGFzdC1jaGls''@;'; put 'put ''ZCB0ZDpmaXJzdC1jaGlsZCwuaHQtcm9vdC13cmFwcGVyOmhhcyg+Lmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQpIC5odENvcmUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCk6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxh''@;'; put 'put ''bmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci1ib3R0''@;'; put 'put ''b20tcmlnaHQtcmFkaXVzOjB9OmlzKC5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC1ib3R0b20+Lmh0LXNsb3QtZWxlbWVudCkgLmh0Q29yZSB0aGVhZCB0cjpsYXN0LWNoaWxkIHRoOm5vdCguaGlkZGVuSGVhZGVyKTpub3QoOmhhcyh+dGg6bm90KC5oaWRkZW5IZWFkZXIpKSksLmh0''@;'; put 'put ''LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LWJvdHRvbT4uaHQtc2xvdC1lbGVtZW50KSAuaHRDb3JlIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwuaHQtcm9vdC13cmFwcGVyOmhhcyg+Lmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQpIC5odENvcmUgdGJvZHkg''@;'; put 'put ''dHI6bGFzdC1jaGlsZCB0aDpsYXN0LWNoaWxkKTpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmco''@;'; put 'put ''bnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9OmlzKC5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC1ib3R0b20+Lmh0LXNsb3QtZWxlbWVudCkgLmh0Q29yZSB0''@;'; put 'put ''aGVhZCB0cjpsYXN0LWNoaWxkIHRoOm5vdCguaGlkZGVuSGVhZGVyKTpub3QoOmhhcyh+dGg6bm90KC5oaWRkZW5IZWFkZXIpKSksLmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LWJvdHRvbT4uaHQtc2xvdC1lbGVtZW50KSAuaHRDb3JlIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQ6bGFz''@;'; put 'put ''dC1jaGlsZCwuaHQtcm9vdC13cmFwcGVyOmhhcyg+Lmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQpIC5odENvcmUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0aDpsYXN0LWNoaWxkKTppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDps''@;'; put 'put ''YW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJh''@;'; put 'put ''ZGl1czowfS5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC10b3A+Lmh0LXNsb3QtZWxlbWVudCkgLmh0LXdyYXBwZXI6bm90KDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5n''@;'; put 'put ''KGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0uaHQt''@;'; put 'put ''cm9vdC13cmFwcGVyOmhhcyg+Lmh0LXNsb3QtdG9wPi5odC1zbG90LWVsZW1lbnQpIC5odC13cmFwcGVyOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmco''@;'; put 'put ''aGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0uaHQtcm9vdC13cmFwcGVy''@;'; put 'put ''Omhhcyg+Lmh0LXNsb3QtdG9wPi5odC1zbG90LWVsZW1lbnQpIC5odF9tYXN0ZXIgLnd0SG9sZGVyOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhl''@;'; put 'put ''KSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9Lmh0LXJvb3Qtd3JhcHBlcjpo''@;'; put 'put ''YXMoPi5odC1zbG90LXRvcD4uaHQtc2xvdC1lbGVtZW50KSAuaHRfbWFzdGVyIC53dEhvbGRlcjppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6''@;'; put 'put ''bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9Lmh0LXJvb3Qtd3JhcHBlcjpoYXMo''@;'; put 'put ''Pi5odC1zbG90LXRvcD4uaHQtc2xvdC1lbGVtZW50KSAuaHRDb3JlOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmco''@;'; put 'put ''bXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9Lmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LXRvcD4u''@;'; put 'put ''aHQtc2xvdC1lbGVtZW50KSAuaHRDb3JlOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyks''@;'; put 'put ''OmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH06aXMoLmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LXRvcD4uaHQtc2xvdC1lbGVt''@;'; put 'put ''ZW50KSAuaHRDb3JlIHRoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC10b3A+Lmh0LXNsb3QtZWxlbWVudCkgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwuaHQtcm9vdC13cmFwcGVyOmhh''@;'; put 'put ''cyg+Lmh0LXNsb3QtdG9wPi5odC1zbG90LWVsZW1lbnQpIC5odENvcmUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZh''@;'; put 'put ''KSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowfTppcyguaHQtcm9vdC13cmFwcGVyOmhh''@;'; put 'put ''cyg+Lmh0LXNsb3QtdG9wPi5odC1zbG90LWVsZW1lbnQpIC5odENvcmUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsLmh0LXJvb3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LXRvcD4uaHQtc2xvdC1lbGVtZW50KSAuaHRDb3JlIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkOmZp''@;'; put 'put ''cnN0LWNoaWxkLC5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC10b3A+Lmh0LXNsb3QtZWxlbWVudCkgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCk6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6''@;'; put 'put ''bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtcmlnaHQtcmFk''@;'; put 'put ''aXVzOjB9OmlzKC5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC10b3A+Lmh0LXNsb3QtZWxlbWVudCkgLmh0Q29yZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpub3QoLmhpZGRlbkhlYWRlcik6bm90KDpoYXMofnRoOm5vdCguaGlkZGVuSGVhZGVyKSkpLC5odC1yb290LXdyYXBwZXI6''@;'; put 'put ''aGFzKD4uaHQtc2xvdC10b3A+Lmh0LXNsb3QtZWxlbWVudCkgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLC5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC10b3A+Lmh0LXNsb3QtZWxlbWVudCkgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0aDps''@;'; put 'put ''YXN0LWNoaWxkKTpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDps''@;'; put 'put ''YW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9OmlzKC5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC10b3A+Lmh0LXNsb3QtZWxlbWVudCkgLmh0Q29yZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpu''@;'; put 'put ''b3QoLmhpZGRlbkhlYWRlcik6bm90KDpoYXMofnRoOm5vdCguaGlkZGVuSGVhZGVyKSkpLC5odC1yb290LXdyYXBwZXI6aGFzKD4uaHQtc2xvdC10b3A+Lmh0LXNsb3QtZWxlbWVudCkgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLC5odC1yb290LXdyYXBwZXI6''@;'; put 'put ''aGFzKD4uaHQtc2xvdC10b3A+Lmh0LXNsb3QtZWxlbWVudCkgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkKTppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZh''@;'; put 'put ''KSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowfS5odC1yb290LXdyYXBwZXIgLmh0LXNs''@;'; put 'put ''b3QtZWxlbWVudHtib3JkZXItcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5odC1yb290LXdyYXBwZXIgLmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQ6bm90KDpsYXN0LW9mLXR5cGUpe2JvcmRlci1yYWRpdXM6MH0uaHQtcm9vdC13cmFwcGVyIC5odC1zbG90LWJvdHRv''@;'; put 'put ''bT4uaHQtc2xvdC1lbGVtZW50Omxhc3Qtb2YtdHlwZTpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxh''@;'; put 'put ''bmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpLC5odC1yb290LXdyYXBwZXIgLmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQ6bGFzdC1vZi10eXBlOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJj''@;'; put 'put ''KSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmco''@;'; put 'put ''eWkpKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0uaHQtcm9vdC13cmFwcGVyIC5odC1zbG90LXRvcD4uaHQtc2xvdC1lbGVtZW50Om5vdCg6Zmlyc3Qtb2YtdHlwZSl7Ym9yZGVyLXJhZGl1czowfS5odC1yb290LXdyYXBwZXIgLmh0LXNsb3Qt''@;'; put 'put ''dG9wPi5odC1zbG90LWVsZW1lbnQ6Zmlyc3Qtb2YtdHlwZTpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biks''@;'; put 'put ''OmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpLC5odC1yb290LXdyYXBwZXIgLmh0LXNsb3QtdG9wPi5odC1zbG90LWVsZW1lbnQ6Zmlyc3Qtb2YtdHlwZTppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFy''@;'; put 'put ''YyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5n''@;'; put 'put ''KHlpKSl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmhhbmRzb250YWJsZS5tb2JpbGUsLmhhbmRzb250YWJsZS5tb2JpbGUgLnd0SG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lOy13ZWJraXQt''@;'; put 'put ''dGFwLWhpZ2hsaWdodC1jb2xvcjojMDAwMDstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0uaGFuZHNvbnRhYmxlLm1vYmlsZSAuaGFuZHNvbnRhYmxlSW5wdXQ6Zm9jdXN7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAycHggdmFyKC0taHQtYWNjZW50LWNvbG9yKTstd2Via2l0LWFw''@;'; put 'put ''cGVhcmFuY2U6bm9uZX0uaGFuZHNvbnRhYmxlIC50b3BTZWxlY3Rpb25IYW5kbGUsLmhhbmRzb250YWJsZSAudG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEsLmhhbmRzb250YWJsZSAuYm90dG9tU2VsZWN0aW9uSGFuZGxlLC5oYW5kc29udGFibGUgLmJvdHRvbVNlbGVjdGlvbkhhbmRsZS1I''@;'; put 'put ''aXRBcmVhe2luc2V0LWlubGluZS1zdGFydDotMTAwMDBweDtpbnNldC1pbmxpbmUtZW5kOnVuc2V0O3otaW5kZXg6OTk5OTt0b3A6LTEwMDAwcHh9LmhhbmRzb250YWJsZS5oaWRlLXR3ZWVue2FuaW1hdGlvbjouMnMgZm9yd2FyZHMgb3BhY2l0eS1oaWRlfS5oYW5kc29udGFibGUuc2hvdy10''@;'; put 'put ''d2VlbnthbmltYXRpb246LjNzIGZvcndhcmRzIG9wYWNpdHktc2hvd30uaHRfY2xvbmVfbWFzdGVye3otaW5kZXg6MTAwfS5odF9jbG9uZV9pbmxpbmVfc3RhcnR7ei1pbmRleDoxMjB9Lmh0X2Nsb25lX2JvdHRvbXt6LWluZGV4OjEzMH0uaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9j''@;'; put 'put ''b3JuZXJ7ei1pbmRleDoxNTB9Lmh0X2Nsb25lX3RvcHt6LWluZGV4OjE2MH0uaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXJ7ei1pbmRleDoxODB9Lmh0X2VkaXRvcl9oaWRkZW57ei1pbmRleDotMX0uaHRfZWRpdG9yX3Zpc2libGV7ei1pbmRleDoyMDB9LmhhbmRzb250YWJsZSB0''@;'; put 'put ''ZC5hcmVhe3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgdGQuYXJlYTpiZWZvcmV7Y29udGVudDoiIjtiYWNrZ3JvdW5kOnZhcigtLWh0LWNlbGwtc2VsZWN0aW9uLWJhY2tncm91bmQtY29sb3IsIzFhNDJlOCk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MH0uaGFuZHNvbnRhYmxl''@;'; put 'put ''IHRkLmFyZWEtMXtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtMTpiZWZvcmV7Y29udGVudDoiIjtiYWNrZ3JvdW5kOnZhcigtLWh0LWNlbGwtc2VsZWN0aW9uLWJhY2tncm91bmQtY29sb3IsIzFhNDJlOCk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MH0uaGFuZHNv''@;'; put 'put ''bnRhYmxlIHRkLmFyZWEtMntwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtMjpiZWZvcmV7Y29udGVudDoiIjtiYWNrZ3JvdW5kOnZhcigtLWh0LWNlbGwtc2VsZWN0aW9uLWJhY2tncm91bmQtY29sb3IsIzFhNDJlOCk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MH0u''@;'; put 'put ''aGFuZHNvbnRhYmxlIHRkLmFyZWEtM3twb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtMzpiZWZvcmV7Y29udGVudDoiIjtiYWNrZ3JvdW5kOnZhcigtLWh0LWNlbGwtc2VsZWN0aW9uLWJhY2tncm91bmQtY29sb3IsIzFhNDJlOCk7cG9zaXRpb246YWJzb2x1dGU7aW5z''@;'; put 'put ''ZXQ6MH0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNHtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNDpiZWZvcmV7Y29udGVudDoiIjtiYWNrZ3JvdW5kOnZhcigtLWh0LWNlbGwtc2VsZWN0aW9uLWJhY2tncm91bmQtY29sb3IsIzFhNDJlOCk7cG9zaXRpb246YWJzb2x1''@;'; put 'put ''dGU7aW5zZXQ6MH0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNXtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNTpiZWZvcmV7Y29udGVudDoiIjtiYWNrZ3JvdW5kOnZhcigtLWh0LWNlbGwtc2VsZWN0aW9uLWJhY2tncm91bmQtY29sb3IsIzFhNDJlOCk7cG9zaXRpb246''@;'; put 'put ''YWJzb2x1dGU7aW5zZXQ6MH0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNntwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNjpiZWZvcmV7Y29udGVudDoiIjtiYWNrZ3JvdW5kOnZhcigtLWh0LWNlbGwtc2VsZWN0aW9uLWJhY2tncm91bmQtY29sb3IsIzFhNDJlOCk7cG9z''@;'; put 'put ''aXRpb246YWJzb2x1dGU7aW5zZXQ6MH0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtN3twb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNzpiZWZvcmV7Y29udGVudDoiIjtiYWNrZ3JvdW5kOnZhcigtLWh0LWNlbGwtc2VsZWN0aW9uLWJhY2tncm91bmQtY29sb3IsIzFhNDJl''@;'; put 'put ''OCk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MH0uaGFuZHNvbnRhYmxlIHRkLmFyZWE6YmVmb3Jle29wYWNpdHk6LjE0fS5oYW5kc29udGFibGUgdGQuYXJlYS0xOmJlZm9yZXtvcGFjaXR5Oi4yMX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtMjpiZWZvcmV7b3BhY2l0eTouMjh9LmhhbmRzb250''@;'; put 'put ''YWJsZSB0ZC5hcmVhLTM6YmVmb3Jle29wYWNpdHk6LjM1fS5oYW5kc29udGFibGUgdGQuYXJlYS00OmJlZm9yZXtvcGFjaXR5Oi40Mn0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNTpiZWZvcmV7b3BhY2l0eTouNDl9LmhhbmRzb250YWJsZSB0ZC5hcmVhLTY6YmVmb3Jle29wYWNpdHk6LjU2fS5o''@;'; put 'put ''YW5kc29udGFibGUgdGQuYXJlYS03OmJlZm9yZXtvcGFjaXR5Oi42M30uaGFuZHNvbnRhYmxlIHRkLmFyZWF7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWh0LWJvcmRlci1jb2xvciksdmFyKC0taHQtZm9yZWdyb3VuZC1jb2xvcikxMCUpfS5oYW5kc29udGFibGUgLnd0''@;'; put 'put ''Qm9yZGVye2ZvbnQtc2l6ZTowO3Bvc2l0aW9uOmFic29sdXRlfS5oYW5kc29udGFibGUgLnd0Qm9yZGVyOmZpcnN0LWNoaWxkLC5oYW5kc29udGFibGUgLnd0Qm9yZGVyOm50aC1jaGlsZCgzKXt6LWluZGV4OjJ9LmhhbmRzb250YWJsZSAud3RCb3JkZXI6bnRoLWNoaWxkKDIpLC5oYW5kc29u''@;'; put 'put ''dGFibGUgLnd0Qm9yZGVyOm50aC1jaGlsZCg0KXt6LWluZGV4OjF9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuaGlkZGVue2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuY3VycmVudHt6LWluZGV4OjEwO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtY2Vs''@;'; put 'put ''bC1zZWxlY3Rpb24tYm9yZGVyLWNvbG9yKSFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuYXJlYXt6LWluZGV4Ojg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1jZWxsLXNlbGVjdGlvbi1ib3JkZXItY29sb3IpIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIC53dEJvcmRlci5m''@;'; put 'put ''aWxse3otaW5kZXg6NjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWNlbGwtYXV0b2ZpbGwtZmlsbC1ib3JkZXItY29sb3IsIzY4Njk2YykhaW1wb3J0YW50fS5oYW5kc29udGFibGUgLnd0Qm9yZGVyLmNvcm5lcntjdXJzb3I6Y3Jvc3NoYWlyO3otaW5kZXg6MTA7Zm9udC1zaXplOjA7Ym9y''@;'; put 'put ''ZGVyLXJhZGl1czp2YXIoLS1odC1jZWxsLWF1dG9maWxsLWJvcmRlci1yYWRpdXMpIWltcG9ydGFudDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWNlbGwtYXV0b2ZpbGwtYmFja2dyb3VuZC1jb2xvciwjMWE0MmU4KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOnZhcigtLWh0LWNlbGwtYXV0''@;'; put 'put ''b2ZpbGwtYm9yZGVyLWNvbG9yKSFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuY29ybmVyOmFmdGVye2NvbnRlbnQ6IiI7Ym9yZGVyLXJhZGl1czp2YXIoLS1odC1jZWxsLWF1dG9maWxsLWJvcmRlci1yYWRpdXMpO2luc2V0Om1pbigwcHgsKHZhcigtLWh0LWNlbGwtYXV0b2Zp''@;'; put 'put ''bGwtc2l6ZSkgLSB2YXIoLS1odC1jZWxsLWF1dG9maWxsLWhpdC1hcmVhLXNpemUpKS8yKTtiYWNrZ3JvdW5kOjAgMDtwb3NpdGlvbjphYnNvbHV0ZX0uaGFuZHNvbnRhYmxlIC53dEJvcmRlci5jb3JuZXIud3RDb3JuZXJJbmxpbmVFbmRFZGdlOmFmdGVye2luc2V0LWlubGluZS1lbmQ6MH0u''@;'; put 'put ''aGFuZHNvbnRhYmxlIC53dEJvcmRlci5jb3JuZXIud3RDb3JuZXJCbG9ja0VuZEVkZ2U6YWZ0ZXJ7aW5zZXQtYmxvY2stZW5kOjB9LmhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mb3tmb250LWZhbWlseTp2YXIoLS1odC1mb250LWZhbWlseSksLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZv''@;'; put 'put ''bnQsIlNlZ29lIFVJIixzYW5zLXNlcmlmO3BhZGRpbmc6dmFyKC0taHQtbGljZW5zZS12ZXJ0aWNhbC1wYWRkaW5nLDE2cHgpdmFyKC0taHQtbGljZW5zZS1ob3Jpem9udGFsLXBhZGRpbmcsMTZweCk7Zm9udC1zaXplOnZhcigtLWh0LWZvbnQtc2l6ZS1zbWFsbCk7bGluZS1oZWlnaHQ6dmFy''@;'; put 'put ''KC0taHQtbGluZS1oZWlnaHQtc21hbGwpO2NvbG9yOnZhcigtLWh0LWxpY2Vuc2UtZm9yZWdyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1saWNlbnNlLWJhY2tncm91bmQtY29sb3IsI2Y3ZjdmOSk7dGV4dC1hbGlnbjpsZWZ0fS5ob3QtZGlzcGxheS1saWNlbnNlLWlu''@;'; put 'put ''Zm8gYXtmb250LXNpemU6dmFyKC0taHQtbGljZW5zZS1mb250LXNpemUpO2NvbG9yOnZhcigtLWh0LWxpbmstY29sb3IpfS5ob3QtZGlzcGxheS1saWNlbnNlLWluZm8gYTpob3Zlcntjb2xvcjp2YXIoLS1odC1saW5rLWhvdmVyLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odEF1dG9jb21wbGV0''@;'; put 'put ''ZUFycm93e2N1cnNvcjpkZWZhdWx0O3dpZHRoOnZhcigtLWh0LWljb24tc2l6ZSk7aGVpZ2h0OnZhcigtLWh0LWljb24tc2l6ZSk7ZmxvYXQ6cmlnaHQ7dG9wOmNhbGMoKHZhcigtLWh0LWxpbmUtaGVpZ2h0KSAtIHZhcigtLWh0LWljb24tc2l6ZSkpLzIpO21hcmdpbi1pbmxpbmUtc3RhcnQ6''@;'; put 'put ''Y2FsYyh2YXIoLS1odC1nYXAtc2l6ZSkqMik7bWFyZ2luLWlubGluZS1lbmQ6MXB4O2ZvbnQtc2l6ZTowO3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgLmh0QXV0b2NvbXBsZXRlQXJyb3c6YWZ0ZXJ7Y29udGVudDoiIjtvcGFjaXR5Oi42O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246''@;'; put 'put ''YWJzb2x1dGU7dG9wOjA7bGVmdDowfVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0QXV0b2NvbXBsZXRlQXJyb3d7ZmxvYXQ6bGVmdH0uaGFuZHNvbnRhYmxlIC5odENoZWNrYm94UmVuZGVyZXJJbnB1dHt3aWR0aDp2YXIoLS1odC1jaGVja2JveC1zaXplKTtoZWlnaHQ6dmFyKC0taHQtY2hl''@;'; put 'put ''Y2tib3gtc2l6ZSk7dmVydGljYWwtYWxpZ246bWlkZGxlO2N1cnNvcjpwb2ludGVyO21hcmdpbjotMnB4IDAgMDtvdXRsaW5lOm5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXQ6Zmlyc3QtY2hp''@;'; put 'put ''bGR7bWFyZ2luLWlubGluZS1lbmQ6dmFyKC0taHQtZ2FwLXNpemUpfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0Omxhc3QtY2hpbGR7bWFyZ2luLWlubGluZS1zdGFydDp2YXIoLS1odC1nYXAtc2l6ZSl9LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5w''@;'; put 'put ''dXQ6YmVmb3Jle2NvbnRlbnQ6IiI7d2lkdGg6dmFyKC0taHQtY2hlY2tib3gtc2l6ZSk7aGVpZ2h0OnZhcigtLWh0LWNoZWNrYm94LXNpemUpO2JvcmRlci1yYWRpdXM6dmFyKC0taHQtY2hlY2tib3gtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1odC1jaGVja2JveC1i''@;'; put 'put ''b3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtY2hlY2tib3gtYmFja2dyb3VuZC1jb2xvcik7Ym94LXNpemluZzpib3JkZXItYm94O3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjphbGwgdmFyKC0taHQtdGFibGUtdHJhbnNpdGlvbillYXNlLWluLW91dDtkaXNw''@;'; put 'put ''bGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXQ6YWZ0ZXJ7Y29udGVudDoiIjtjb2xvcjp2YXIoLS1odC1jaGVja2JveC1pY29uLWNvbG9yKTtwb2ludGVyLWV2ZW50czpub25lO2Rpc3Bs''@;'; put 'put ''YXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3dpZHRoOnZhcigtLWh0LWNoZWNrYm94LXNpemUpIWltcG9ydGFudDtoZWlnaHQ6dmFyKC0taHQtY2hlY2tib3gtc2l6ZSkhaW1wb3J0YW50fS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0OmNoZWNr''@;'; put 'put ''ZWQ6YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1odC1jaGVja2JveC1jaGVja2VkLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1jaGVja2JveC1jaGVja2VkLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0OmNo''@;'; put 'put ''ZWNrZWQ6YWZ0ZXJ7Y29sb3I6dmFyKC0taHQtY2hlY2tib3gtY2hlY2tlZC1pY29uLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odENoZWNrYm94UmVuZGVyZXJJbnB1dDpjaGVja2VkOmRpc2FibGVkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0taHQtY2hlY2tib3gtY2hlY2tlZC1kaXNhYmxl''@;'; put 'put ''ZC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtY2hlY2tib3gtY2hlY2tlZC1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odENoZWNrYm94UmVuZGVyZXJJbnB1dDpjaGVja2VkOmRpc2FibGVkOmFmdGVye2NvbG9yOnZhcigtLWh0LWNo''@;'; put 'put ''ZWNrYm94LWNoZWNrZWQtZGlzYWJsZWQtaWNvbi1jb2xvcil9LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXQ6Y2hlY2tlZDpmb2N1czpiZWZvcmV7Ym9yZGVyLWNvbG9yOnZhcigtLWh0LWNoZWNrYm94LWNoZWNrZWQtZm9jdXMtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWh0LWNoZWNrYm94LWNoZWNrZWQtZm9jdXMtYmFja2dyb3VuZC1jb2xvcil9LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXQ6Y2hlY2tlZDpmb2N1czphZnRlcntjb2xvcjp2YXIoLS1odC1jaGVja2JveC1jaGVja2VkLWZvY3VzLWljb24tY29sb3Ip''@;'; put 'put ''fS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0OmZvY3VzOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0taHQtY2hlY2tib3gtZm9jdXMtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWNoZWNrYm94LWZvY3VzLWJhY2tncm91bmQtY29sb3IpO291''@;'; put 'put ''dGxpbmU6MXB4IHNvbGlkIHZhcigtLWh0LWNoZWNrYm94LWZvY3VzLXJpbmctY29sb3IpfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0OmZvY3VzOmFmdGVye2NvbG9yOnZhcigtLWh0LWNoZWNrYm94LWZvY3VzLWljb24tY29sb3IpfS5oYW5kc29udGFibGUgLmh0Q2hl''@;'; put 'put ''Y2tib3hSZW5kZXJlcklucHV0OmRpc2FibGVke2N1cnNvcjppbml0aWFsfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0OmRpc2FibGVkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0taHQtY2hlY2tib3gtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWh0LWNoZWNrYm94LWRpc2FibGVkLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0OmRpc2FibGVkOmFmdGVye2NvbG9yOnZhcigtLWh0LWNoZWNrYm94LWRpc2FibGVkLWljb24tY29sb3IpfS5oYW5kc29udGFibGUgLmh0''@;'; put 'put ''Q2hlY2tib3hSZW5kZXJlcklucHV0OmluZGV0ZXJtaW5hdGU6YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1odC1jaGVja2JveC1pbmRldGVybWluYXRlLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1jaGVja2JveC1pbmRldGVybWluYXRlLWJhY2tncm91bmQtY29s''@;'; put 'put ''b3IpfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0OmluZGV0ZXJtaW5hdGU6YWZ0ZXJ7Y29sb3I6dmFyKC0taHQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1pY29uLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odENoZWNrYm94UmVuZGVyZXJJbnB1dDppbmRldGVybWluYXRl''@;'; put 'put ''OmRpc2FibGVkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0taHQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1kaXNhYmxlZC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKX0uaGFu''@;'; put 'put ''ZHNvbnRhYmxlIC5odENoZWNrYm94UmVuZGVyZXJJbnB1dDppbmRldGVybWluYXRlOmRpc2FibGVkOmFmdGVye2NvbG9yOnZhcigtLWh0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtZGlzYWJsZWQtaWNvbi1jb2xvcil9LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXQ6aW5k''@;'; put 'put ''ZXRlcm1pbmF0ZTpmb2N1czpiZWZvcmV7Ym9yZGVyLWNvbG9yOnZhcigtLWh0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtZm9jdXMtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtZm9jdXMtYmFja2dyb3VuZC1jb2xvcil9Lmhh''@;'; put 'put ''bmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXQ6aW5kZXRlcm1pbmF0ZTpmb2N1czphZnRlcntjb2xvcjp2YXIoLS1odC1jaGVja2JveC1pbmRldGVybWluYXRlLWZvY3VzLWljb24tY29sb3IpfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0Lm5vVmFsdWV7''@;'; put 'put ''b3BhY2l0eTouNX0uaGFuZHNvbnRhYmxlIC5odENoZWNrYm94UmVuZGVyZXJMYWJlbHtmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0O2N1cnNvcjpwb2ludGVyO2NvbG9yOmluaGVyaXQ7bWFyZ2luOjA7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmV9''@;'; put 'put ''LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVyTGFiZWwuZnVsbFdpZHRoe3dpZHRoOjEwMCV9LmhhbmRzb250YWJsZSAuaHRQbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1odC1wbGFjZWhvbGRlci1jb2xvcil9LmhhbmRzb250YWJsZSAuaHREaW1tZWR7Y29sb3I6dmFyKC0taHQtcmVh''@;'; put 'put ''ZC1vbmx5LWNvbG9yKSFpbXBvcnRhbnQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1jZWxsLXJlYWQtb25seS1iYWNrZ3JvdW5kLWNvbG9yKSFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAuaHRMZWZ0e3RleHQtYWxpZ246bGVmdH0uaGFuZHNvbnRhYmxlIC5odENlbnRlcnt0ZXh0LWFsaWdu''@;'; put 'put ''OmNlbnRlcn0uaGFuZHNvbnRhYmxlIC5odFJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LmhhbmRzb250YWJsZSAuaHRKdXN0aWZ5e3RleHQtYWxpZ246anVzdGlmeX0uaGFuZHNvbnRhYmxlIC5odFRvcHt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmhhbmRzb250YWJsZSAuaHRNaWRkbGV7dmVydGljYWwt''@;'; put 'put ''YWxpZ246bWlkZGxlfS5oYW5kc29udGFibGUgLmh0Qm90dG9te3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0uaGFuZHNvbnRhYmxlIC5odEludmFsaWR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1jZWxsLWVycm9yLWJhY2tncm91bmQtY29sb3IpIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIC5o''@;'; put 'put ''dE5vV3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LmhhbmRzb250YWJsZSAuaHRTZWFyY2hSZXN1bHR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1jZWxsLXN1Y2Nlc3MtYmFja2dyb3VuZC1jb2xvcikhaW1wb3J0YW50fS5oYW5kc29udGFibGUgLmh0LW11bHRpLXNlbGVjdC1yZW5kZXJlcntw''@;'; put 'put ''YWRkaW5nOnZhcigtLWh0LWNlbGwtdmVydGljYWwtcGFkZGluZyl2YXIoLS1odC1jZWxsLWhvcml6b250YWwtcGFkZGluZyk7b3ZlcmZsb3c6aGlkZGVufS5oYW5kc29udGFibGUgLmh0LW11bHRpLXNlbGVjdC1jaGlwcy1jb250YWluZXJ7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDp2YXIoLS1o''@;'; put 'put ''dC1nYXAtc2l6ZSk7ZmxleC13cmFwOm5vd3JhcDttYXgtd2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVufS5oYW5kc29udGFibGUgLmh0LW11bHRpLXNlbGVjdC1jaGlwe2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6dmFyKC0taHQtZ2FwLXNpemUpO3BhZGRpbmc6dmFyKC0t''@;'; put 'put ''aHQtY2hpcC12ZXJ0aWNhbC1wYWRkaW5nKWNhbGMoKHZhcigtLWh0LWxpbmUtaGVpZ2h0KSAtIHZhcigtLWh0LWljb24tc2l6ZSkpLzIpdmFyKC0taHQtY2hpcC12ZXJ0aWNhbC1wYWRkaW5nKXZhcigtLWh0LWNoaXAtaG9yaXpvbnRhbC1wYWRkaW5nKTtib3JkZXItcmFkaXVzOnZhcigtLWh0''@;'; put 'put ''LWNoaXAtYm9yZGVyLXJhZGl1cyk7YmFja2dyb3VuZDp2YXIoLS1odC1jaGlwLWJhY2tncm91bmQpO3doaXRlLXNwYWNlOm5vd3JhcDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZmxleC1zaHJpbms6MDttYXgtd2lkdGg6MTAwcHg7ZGlzcGxheTppbmxpbmUtZmxleH0uaGFuZHNvbnRhYmxlIC5o''@;'; put 'put ''dC1tdWx0aS1zZWxlY3QtY2hpcC1sYWJlbHt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2NvbG9yOnZhcigtLWh0LWZvcmVncm91bmQtY29sb3IpO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OnZhcigtLWh0LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1odC1saW5lLWhlaWdo''@;'; put 'put ''dCw0MHB4KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1odC1sZXR0ZXItc3BhY2luZywwKTtwYWRkaW5nOjAgdmFyKC0taHQtY2hpcC1nYXApO292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlIC5odC1tdWx0aS1zZWxlY3QtY2hpcC1yZW1vdmV7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6dmFyKC0t''@;'; put 'put ''aHQtaWNvbi1idXR0b24taWNvbi1jb2xvcik7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO2ZsZXgtc2hyaW5rOjA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGlu''@;'; put 'put ''ZzowO2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDp2YXIoLS1odC1pY29uLXNpemUpIWltcG9ydGFudDtoZWlnaHQ6dmFyKC0taHQtaWNvbi1zaXplKSFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAuaHQtbXVsdGktc2VsZWN0LWNoaXAtcmVtb3ZlOmJlZm9yZXtjb250ZW50''@;'; put 'put ''OiIiO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowfS5oYW5kc29udGFibGUgLmh0LW11bHRpLXNlbGVjdC1jaGlwLXJlbW92ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWljb24tYnV0dG9uLWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5oYW5k''@;'; put 'put ''c29udGFibGUgLmh0LW11bHRpLXNlbGVjdC1vdmVyZmxvd3twYWRkaW5nOnZhcigtLWh0LWNoaXAtdmVydGljYWwtcGFkZGluZyl2YXIoLS1odC1jaGlwLWhvcml6b250YWwtcGFkZGluZyk7YmFja2dyb3VuZDp2YXIoLS1odC1jaGlwLWJhY2tncm91bmQpO2JvcmRlci1yYWRpdXM6dmFyKC0t''@;'; put 'put ''aHQtY2hpcC1ib3JkZXItcmFkaXVzKTtjb2xvcjp2YXIoLS1odC1mb3JlZ3JvdW5kLWNvbG9yKTt3aGl0ZS1zcGFjZTpub3dyYXA7ZmxleC1zaHJpbms6MDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4fS5oYW5kc29udGFibGVJ''@;'; put 'put ''bnB1dEhvbGRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9LmhhbmRzb250YWJsZUlucHV0SG9sZGVyIC5oYW5kc29udGFibGVJbnB1dHtwYWRkaW5nOmNhbGModmFyKC0taHQtY2VsbC12ZXJ0aWNhbC1wYWRkaW5nLDRweCkgKyAxcHgpY2FsYyh2YXIoLS1odC1jZWxsLWhvcml6''@;'; put 'put ''b250YWwtcGFkZGluZyw4cHgpICsgMXB4KTtjb2xvcjp2YXIoLS1odC1jZWxsLWVkaXRvci1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWNlbGwtZWRpdG9yLWJhY2tncm91bmQtY29sb3IsI2ZmZik7Ym94LXNoYWRvdzppbnNldCAwIDAgMCB2YXIoLS1odC1j''@;'; put 'put ''ZWxsLWVkaXRvci1ib3JkZXItd2lkdGgsMnB4KSB2YXIoLS1odC1jZWxsLWVkaXRvci1ib3JkZXItY29sb3IsIzFhNDJlOCksMCAwIHZhcigtLWh0LWNlbGwtZWRpdG9yLXNoYWRvdy1ibHVyLXJhZGl1cywwKSAwIHZhcigtLWh0LWNlbGwtZWRpdG9yLXNoYWRvdy1jb2xvcix0cmFuc3BhcmVu''@;'; put 'put ''dCk7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6MDtvdXRsaW5lLXdpZHRoOjA7bWFyZ2luOjA7ZGlzcGxheTpibG9jaztmb250LWZhbWlseTppbmhlcml0IWltcG9ydGFudDtmb250LXNpemU6aW5oZXJpdCFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6aW5o''@;'; put 'put ''ZXJpdCFpbXBvcnRhbnQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmUhaW1wb3J0YW50fS5oYW5kc29udGFibGVJbnB1dEhvbGRlciAuaGFuZHNvbnRhYmxlSW5wdXQ6Zm9jdXN7b3V0bGluZTpub25lfS5odFNlbGVjdEVkaXRvcntwb3NpdGlvbjphYnNvbHV0ZX0uaHRTZWxlY3RFZGl0b3Igc2Vs''@;'; put 'put ''ZWN0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cGFkZGluZzpjYWxjKHZhcigtLWh0LWNlbGwtdmVydGljYWwtcGFkZGluZyw0cHgpICsgMXB4KWNhbGModmFyKC0taHQtY2VsbC1ob3Jpem9udGFsLXBhZGRpbmcsOHB4KSArIDFweCk7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6''@;'; put 'put ''ZWxsaXBzaXM7Y29sb3I6dmFyKC0taHQtY2VsbC1lZGl0b3ItZm9yZWdyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1jZWxsLWVkaXRvci1iYWNrZ3JvdW5kLWNvbG9yLCNmZmYpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgdmFyKC0taHQtY2VsbC1lZGl0b3ItYm9yZGVy''@;'; put 'put ''LXdpZHRoLDJweCkgdmFyKC0taHQtY2VsbC1lZGl0b3ItYm9yZGVyLWNvbG9yLCMxYTQyZTgpLDAgMCB2YXIoLS1odC1jZWxsLWVkaXRvci1zaGFkb3ctYmx1ci1yYWRpdXMsMCkgMCB2YXIoLS1odC1jZWxsLWVkaXRvci1zaGFkb3ctY29sb3IsdHJhbnNwYXJlbnQpO2JveC1zaXppbmc6Ym9y''@;'; put 'put ''ZGVyLWJveDtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjA7bWFyZ2luOjA7cGFkZGluZy1pbmxpbmUtZW5kOjI2cHg7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDtvdmVyZmxvdzpoaWRkZW47Zm9udC1mYW1pbHk6aW5oZXJpdCFpbXBvcnRhbnQ7Zm9udC1zaXplOmluaGVyaXQhaW1wb3J0''@;'; put 'put ''YW50O2xpbmUtaGVpZ2h0OmluaGVyaXQhaW1wb3J0YW50Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudH0uaHRTZWxlY3RFZGl0b3Igc2VsZWN0OmZvY3Vze291dGxpbmU6bm9uZX0uaHRTZWxlY3RFZGl0b3IgLmh0QXV0b2NvbXBsZXRlQXJyb3d7ei1pbmRleDoxO3BvaW50ZXIt''@;'; put 'put ''ZXZlbnRzOm5vbmU7bWFyZ2luLWlubGluZS1lbmQ6NHB4O3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9LmhhbmRzb250YWJsZS5saXN0Ym94e2JveC1zaGFkb3c6dmFyKC0taHQtbWVudS1zaGFkb3cteCwwKSB2YXIoLS1odC1tZW51LXNoYWRvdy15LDApIHZhcigtLWh0LW1l''@;'; put 'put ''bnUtc2hhZG93LWJsdXIsOHB4KSBjb2xvci1taXgoaW4gc3JnYix2YXIoLS1odC1tZW51LXNoYWRvdy1jb2xvciwjMDAwKXZhcigtLWh0LW1lbnUtc2hhZG93LW9wYWNpdHksMTAwJSksdHJhbnNwYXJlbnQpO2JvcmRlcjp2YXIoLS1odC1tZW51LWJvcmRlci13aWR0aCwxcHgpc29saWQgdmFy''@;'; put 'put ''KC0taHQtbWVudS1ib3JkZXItY29sb3IsI2U1ZTVlOSk7bWFyZ2luOjB9LmhhbmRzb250YWJsZS5saXN0Ym94IC5odF9tYXN0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1iYWNrZ3JvdW5kLWNvbG9yKTtvdmVyZmxvdzpoaWRkZW59LmhhbmRzb250YWJsZS5saXN0Ym94IC53dEhvbGRl''@;'; put 'put ''cntvdmVyZmxvdzphdXRvO2JvcmRlci1yYWRpdXM6MCFpbXBvcnRhbnR9LmhhbmRzb250YWJsZS5saXN0Ym94IC53dEhpZGVyLC5oYW5kc29udGFibGUubGlzdGJveCAuaHRDb3Jle2JvcmRlci1yYWRpdXM6MCFpbXBvcnRhbnR9LmhhbmRzb250YWJsZS5saXN0Ym94IHRhYmxle292ZXJmbG93''@;'; put 'put ''OmhpZGRlbn0uaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGFibGUgdGgsLmhhbmRzb250YWJsZS5saXN0Ym94IHRhYmxlIHRyOmZpcnN0LWNoaWxkIHRoLC5oYW5kc29udGFibGUubGlzdGJveCB0YWJsZSB0cjpsYXN0LWNoaWxkIHRoLC5oYW5kc29udGFibGUubGlzdGJveCB0YWJsZSB0cjpmaXJz''@;'; put 'put ''dC1jaGlsZCB0ZCwuaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGFibGUgdGR7Ym9yZGVyLWNvbG9yOiMwMDAwIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGFibGUgdGgsLmhhbmRzb250YWJsZS5saXN0Ym94IHRhYmxlIHRke3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93''@;'; put 'put ''OmVsbGlwc2lzO2JvcmRlci1yYWRpdXM6MCFpbXBvcnRhbnR9LmhhbmRzb250YWJsZS5saXN0Ym94IHRhYmxlIC53dEJvcmRlcnt2aXNpYmlsaXR5OmhpZGRlbn0uaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGFibGUgc3Ryb25ne2NvbG9yOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NzAwfS5oYW5kc29u''@;'; put 'put ''dGFibGUubGlzdGJveCB0YWJsZSB0ciB0ZDpob3ZlciB0ZHtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWh0LW1lbnUtaXRlbS1ob3Zlci1jb2xvcil2YXIoLS1odC1tZW51LWl0ZW0taG92ZXItY29sb3Itb3BhY2l0eSwxMDAlKSx0cmFuc3BhcmVu''@;'; put 'put ''dCkhaW1wb3J0YW50O2JveC1zaGFkb3c6bm9uZSFpbXBvcnRhbnR9LmhhbmRzb250YWJsZS5saXN0Ym94IHRhYmxlIHRke3RyYW5zaXRpb246dmFyKC0taHQtdGFibGUtdHJhbnNpdGlvbiliYWNrZ3JvdW5kIGVhc2UtaW4tb3V0fS5oYW5kc29udGFibGUubGlzdGJveCB0YWJsZSB0ZDpob3Zl''@;'; put 'put ''cntjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWh0LW1lbnUtaXRlbS1ob3Zlci1jb2xvcil2YXIoLS1odC1tZW51LWl0ZW0taG92ZXItY29sb3Itb3BhY2l0eSwxMDAlKSx0cmFuc3BhcmVudCkhaW1wb3J0YW50fS5oYW5kc29udGFibGUu''@;'; put 'put ''bGlzdGJveCB0YWJsZSB0ZC5jdXJyZW50Om5vdChbYXJpYS1leHBhbmRlZD10cnVlXSl7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggdmFyKC0taHQtYWNjZW50LWNvbG9yKX0uaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGFibGUgdGQuaHREaW1tZWR7Y3Vyc29yOmRlZmF1bHQ7Zm9udC1zdHls''@;'; put 'put ''ZTppbmhlcml0O2NvbG9yOmluaGVyaXQhaW1wb3J0YW50fS5oYW5kc29udGFibGUubGlzdGJveCB0YWJsZSB0ZC5odERpbW1lZDpub3QoLmhhbmRzb250YWJsZS5saXN0Ym94IHRhYmxlIHRkOmhvdmVyKXtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQhaW1wb3J0YW50fS5oYW5kc29udGFibGUu''@;'; put 'put ''bGlzdGJveCB0YWJsZSB0aGVhZCB0aHt0ZXh0LWFsaWduOmxlZnQ7aGVpZ2h0OmF1dG8haW1wb3J0YW50fS5oYW5kc29udGFibGUubGlzdGJveCB0YWJsZSB0aGVhZCB0aCAucmVsYXRpdmV7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1odC1jZWxsLXZlcnRpY2FsLXBhZGRpbmcpICsgdmFyKC0t''@;'; put 'put ''aHQtZ2FwLXNpemUpKTtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLWh0LWNlbGwtdmVydGljYWwtcGFkZGluZykgKyB2YXIoLS1odC1nYXAtc2l6ZSkpfS5oYW5kc29udGFibGUubGlzdGJveCAuaHRfY2xvbmVfdG9wIC53dEhpZGVye292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlLmxp''@;'; put 'put ''c3Rib3ggLmh0X2Nsb25lX3RvcCB0YWJsZXtib3JkZXItcmFkaXVzOjB9LmhhbmRzb250YWJsZS5saXN0Ym94IC5odEJvcmRlcnMgZGl2e2JhY2tncm91bmQ6MCAwIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlLmF1dG9jb21wbGV0ZUVkaXRvciB0ci5odF9fcm93X2V2ZW4gdGgsLmhhbmRzb250''@;'; put 'put ''YWJsZS5hdXRvY29tcGxldGVFZGl0b3IgdHIuaHRfX3Jvd19ldmVuIHRkLC5oYW5kc29udGFibGUuYXV0b2NvbXBsZXRlRWRpdG9yIHRyLmh0X19yb3dfb2RkIHRoLC5oYW5kc29udGFibGUuYXV0b2NvbXBsZXRlRWRpdG9yIHRyLmh0X19yb3dfb2RkIHRke2JhY2tncm91bmQtY29sb3I6dmFy''@;'; put 'put ''KC0taHQtYmFja2dyb3VuZC1jb2xvciwjZmZmKX1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGFibGUgdGhlYWQgdGh7dGV4dC1hbGlnbjpyaWdodH0uaGFuZHNvbnRhYmxlRWRpdG9ye3Bvc2l0aW9uOmFic29sdXRlfS5oYW5kc29udGFibGVFZGl0b3IgLmh0LW11bHRpLXNlbGVj''@;'; put 'put ''dC1lZGl0b3J7Ym94LXNoYWRvdzp2YXIoLS1odC1tZW51LXNoYWRvdy14LDApIHZhcigtLWh0LW1lbnUtc2hhZG93LXksMCkgdmFyKC0taHQtbWVudS1zaGFkb3ctYmx1ciw4cHgpIGNvbG9yLW1peChpbiBzcmdiLHZhcigtLWh0LW1lbnUtc2hhZG93LWNvbG9yLCMwMDApdmFyKC0taHQtbWVu''@;'; put 'put ''dS1zaGFkb3ctb3BhY2l0eSwxMDAlKSx0cmFuc3BhcmVudCk7c2Nyb2xsYmFyLXdpZHRoOmF1dG87c2Nyb2xsYmFyLWNvbG9yOnZhcigtLWh0LXNjcm9sbGJhci10aHVtYi1jb2xvcil2YXIoLS1odC1zY3JvbGxiYXItdHJhY2stY29sb3IpO2JvcmRlci1yYWRpdXM6MCAwIHZhcigtLWh0LW1l''@;'; put 'put ''bnUtYm9yZGVyLXJhZGl1cyl2YXIoLS1odC1tZW51LWJvcmRlci1yYWRpdXMpO2JvcmRlcjp2YXIoLS1odC1tZW51LWJvcmRlci13aWR0aClzb2xpZCB2YXIoLS1odC1tZW51LWJvcmRlci1jb2xvcik7YmFja2dyb3VuZDp2YXIoLS1odC1iYWNrZ3JvdW5kLWNvbG9yKTt3aWR0aDptYXgtY29u''@;'; put 'put ''dGVudDttaW4td2lkdGg6MTIwcHg7cGFkZGluZzp2YXIoLS1odC1tZW51LXZlcnRpY2FsLXBhZGRpbmcpdmFyKC0taHQtbWVudS1ob3Jpem9udGFsLXBhZGRpbmcpO292ZXJmbG93LXk6YXV0b30uaGFuZHNvbnRhYmxlRWRpdG9yIC5odC1tdWx0aS1zZWxlY3QtZWRpdG9yIC5odC1tdWx0aS1z''@;'; put 'put ''ZWxlY3QtZWRpdG9yLXNlYXJjaC1pbnB1dC13cmFwcGVye3BhZGRpbmc6dmFyKC0taHQtbWVudS1pdGVtLXZlcnRpY2FsLXBhZGRpbmcpdmFyKC0taHQtbWVudS1pdGVtLWhvcml6b250YWwtcGFkZGluZyk7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDp2YXIoLS1odC1nYXAtc2l6ZSk7YWxpZ24t''@;'; put 'put ''c2VsZjpzdHJldGNoO2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlRWRpdG9yIC5odC1tdWx0aS1zZWxlY3QtZWRpdG9yIC5odC1tdWx0aS1zZWxlY3QtZWRpdG9yLXNlYXJjaC1pY29ue2xlZnQ6Y2FsYyh2YXIoLS1odC1tZW51LWl0ZW0taG9yaXpvbnRhbC1w''@;'; put 'put ''YWRkaW5nKSArIDEwcHgpO29wYWNpdHk6LjU7cG9pbnRlci1ldmVudHM6bm9uZTt6LWluZGV4OjE7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7cG9zaXRpb246''@;'; put 'put ''YWJzb2x1dGU7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0uaGFuZHNvbnRhYmxlRWRpdG9yIC5odC1tdWx0aS1zZWxlY3QtZWRpdG9yIGlucHV0Lmh0LW11bHRpLXNlbGVjdC1lZGl0b3Itc2VhcmNoLWlucHV0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVz''@;'; put 'put ''OnZhcigtLWh0LWlucHV0LWJvcmRlci1yYWRpdXMpO3dpZHRoOjEwMCU7Y29sb3I6dmFyKC0taHQtaW5wdXQtZm9yZWdyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWh0LWlucHV0LWJv''@;'; put 'put ''cmRlci1jb2xvcik7dHJhbnNpdGlvbjp2YXIoLS1odC10YWJsZS10cmFuc2l0aW9uKWFsbCBlYXNlLWluLW91dDtsaW5lLWhlaWdodDp2YXIoLS1odC1saW5lLWhlaWdodCk7Zm9udC1zaXplOnZhcigtLWh0LWZvbnQtc2l6ZSk7cGFkZGluZzp2YXIoLS1odC1pbnB1dC12ZXJ0aWNhbC1wYWRk''@;'; put 'put ''aW5nKXZhcigtLWh0LW1lbnUtaXRlbS1ob3Jpem9udGFsLXBhZGRpbmcpdmFyKC0taHQtaW5wdXQtdmVydGljYWwtcGFkZGluZykzMnB4fS5oYW5kc29udGFibGVFZGl0b3IgLmh0LW11bHRpLXNlbGVjdC1lZGl0b3IgaW5wdXQuaHQtbXVsdGktc2VsZWN0LWVkaXRvci1zZWFyY2gtaW5wdXQ6''@;'; put 'put ''aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWh0LWlucHV0LWhvdmVyLWJvcmRlci1jb2xvcik7Y29sb3I6dmFyKC0taHQtaW5wdXQtaG92ZXItZm9yZWdyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1pbnB1dC1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yKX0uaGFuZHNvbnRh''@;'; put 'put ''YmxlRWRpdG9yIC5odC1tdWx0aS1zZWxlY3QtZWRpdG9yIGlucHV0Lmh0LW11bHRpLXNlbGVjdC1lZGl0b3Itc2VhcmNoLWlucHV0OmRpc2FibGVke2JvcmRlci1jb2xvcjp2YXIoLS1odC1pbnB1dC1kaXNhYmxlZC1ib3JkZXItY29sb3IpO2NvbG9yOnZhcigtLWh0LWlucHV0LWRpc2FibGVk''@;'; put 'put ''LWZvcmVncm91bmQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtaW5wdXQtZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcil9LmhhbmRzb250YWJsZUVkaXRvciAuaHQtbXVsdGktc2VsZWN0LWVkaXRvciBpbnB1dC5odC1tdWx0aS1zZWxlY3QtZWRpdG9yLXNlYXJjaC1pbnB1dDpm''@;'; put 'put ''b2N1c3tib3JkZXItY29sb3I6dmFyKC0taHQtaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yKTtjb2xvcjp2YXIoLS1odC1pbnB1dC1mb2N1cy1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWlucHV0LWZvY3VzLWJhY2tncm91bmQtY29sb3IpO291dGxpbmUtb2Zm''@;'; put 'put ''c2V0OjA7Ym94LXNoYWRvdzpub25lO291dGxpbmU6bm9uZX0uaGFuZHNvbnRhYmxlRWRpdG9yIC5odC1tdWx0aS1zZWxlY3QtZWRpdG9yIGlucHV0Lmh0LW11bHRpLXNlbGVjdC1lZGl0b3Itc2VhcmNoLWlucHV0OjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1odC1mb3JlZ3JvdW5kLWNvbG9y''@;'; put 'put ''KTtvcGFjaXR5Oi42fS5oYW5kc29udGFibGVFZGl0b3IgLmh0LW11bHRpLXNlbGVjdC1lZGl0b3IgLmh0LW11bHRpLXNlbGVjdC1lZGl0b3Itc2VwYXJhdG9ye2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtbWVudS1ib3JkZXItY29sb3IpO3dpZHRoOjEwMCU7aGVpZ2h0OjFweDttYXJnaW46''@;'; put 'put ''dmFyKC0taHQtbWVudS12ZXJ0aWNhbC1wYWRkaW5nKTAgdmFyKC0taHQtbWVudS12ZXJ0aWNhbC1wYWRkaW5nKTA7cGFkZGluZzowfS5oYW5kc29udGFibGVFZGl0b3IgLmh0LW11bHRpLXNlbGVjdC1lZGl0b3IgdWx7d2lkdGg6MTAwJTtwYWRkaW5nOnZhcigtLWh0LWdhcC1zaXplKXZhcigt''@;'; put 'put ''LWh0LW1lbnUtaG9yaXpvbnRhbC1wYWRkaW5nKTtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydDttYXJnaW46MDtsaXN0LXN0eWxlOm5vbmU7ZGlzcGxheTpmbGV4fS5oYW5kc29udGFibGVFZGl0b3IgLmh0LW11bHRpLXNlbGVjdC1lZGl0b3IgdWwgbGl7YmFj''@;'; put 'put ''a2dyb3VuZDp2YXIoLS1odC1iYWNrZ3JvdW5kLWNvbG9yKTtwYWRkaW5nOnZhcigtLWh0LW1lbnUtaXRlbS12ZXJ0aWNhbC1wYWRkaW5nKXZhcigtLWh0LW1lbnUtaXRlbS1ob3Jpem9udGFsLXBhZGRpbmcpOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNv''@;'; put 'put ''cjpwb2ludGVyO2FsaWduLXNlbGY6c3RyZXRjaDthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4fS5oYW5kc29udGFibGVFZGl0b3IgLmh0LW11bHRpLXNlbGVjdC1lZGl0b3IgdWwgbGkgKntjdXJzb3I6cG9pbnRlcn0uaGFuZHNvbnRhYmxlRWRpdG9yIC5odC1tdWx0aS1zZWxlY3Qt''@;'; put 'put ''ZWRpdG9yIHVsIGxpLmh0LW11bHRpLXNlbGVjdC1lZGl0b3ItaXRlbS1zZWxlY3RlZHtiYWNrZ3JvdW5kOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWh0LW1lbnUtaXRlbS1hY3RpdmUtY29sb3IpdmFyKC0taHQtbWVudS1pdGVtLWFjdGl2ZS1jb2xvci1vcGFjaXR5LDEwMCUpLHRyYW5zcGFy''@;'; put 'put ''ZW50KX0uaGFuZHNvbnRhYmxlRWRpdG9yIC5odC1tdWx0aS1zZWxlY3QtZWRpdG9yIHVsIGxpIGRpdntmbGV4OjEgMCAwO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9LmhhbmRzb250YWJsZUVkaXRvciAuaHQtbXVsdGktc2VsZWN0LWVkaXRvciB1bCBsaSBkaXYgaW5wdXR7YXBw''@;'; put 'put ''ZWFyYW5jZTpub25lO3dpZHRoOnZhcigtLWh0LWNoZWNrYm94LXNpemUpO2hlaWdodDp2YXIoLS1odC1jaGVja2JveC1zaXplKTttYXJnaW46MDtwYWRkaW5nOjA7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGVFZGl0b3IgLmh0LW11bHRpLXNlbGVjdC1lZGl0''@;'; put 'put ''b3IgdWwgbGkgZGl2IGlucHV0OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9LmhhbmRzb250YWJsZUVkaXRvciAuaHQtbXVsdGktc2VsZWN0LWVkaXRvciB1bCBsaSBkaXYgaW5wdXQ6YmVmb3Jle2NvbnRlbnQ6IiI7Ym94LXNp''@;'; put 'put ''emluZzpib3JkZXItYm94O3dpZHRoOnZhcigtLWh0LWNoZWNrYm94LXNpemUpO2hlaWdodDp2YXIoLS1odC1jaGVja2JveC1zaXplKTtib3JkZXItcmFkaXVzOnZhcigtLWh0LWNoZWNrYm94LWJvcmRlci1yYWRpdXMpO2JvcmRlcjoxcHggc29saWQgdmFyKC0taHQtY2hlY2tib3gtYm9yZGVy''@;'; put 'put ''LWNvbG9yKTtiYWNrZ3JvdW5kOnZhcigtLWh0LWNoZWNrYm94LWJhY2tncm91bmQtY29sb3IpO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MH0uaGFuZHNvbnRhYmxl''@;'; put 'put ''RWRpdG9yIC5odC1tdWx0aS1zZWxlY3QtZWRpdG9yIHVsIGxpIGRpdiBpbnB1dDpjaGVja2VkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0taHQtY2hlY2tib3gtY2hlY2tlZC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQ6dmFyKC0taHQtY2hlY2tib3gtY2hlY2tlZC1iYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yKX0uaGFuZHNvbnRhYmxlRWRpdG9yIC5odC1tdWx0aS1zZWxlY3QtZWRpdG9yIHVsIGxpIGRpdiBpbnB1dDpjaGVja2VkOmFmdGVye2NvbG9yOnZhcigtLWh0LWNoZWNrYm94LWNoZWNrZWQtaWNvbi1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9LmhhbmRzb250YWJs''@;'; put 'put ''ZUVkaXRvciAuaHQtbXVsdGktc2VsZWN0LWVkaXRvciB1bCBsaSBkaXYgaW5wdXQ6Zm9jdXN7b3V0bGluZTpub25lfS5oYW5kc29udGFibGVFZGl0b3IgLmh0LW11bHRpLXNlbGVjdC1lZGl0b3IgdWwgbGkgZGl2IGxhYmVse2NvbG9yOnZhcigtLWh0LWZvcmVncm91bmQtY29sb3IpO3RleHQt''@;'; put 'put ''b3ZlcmZsb3c6ZWxsaXBzaXM7Zm9udC1zaXplOnZhcigtLWh0LWZvbnQtc2l6ZSk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OnZhcigtLWh0LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1odC1sZXR0ZXItc3BhY2luZyk7d2lkdGg6MTAw''@;'; put 'put ''JTtwYWRkaW5nOjAgMCAwIGNhbGModmFyKC0taHQtZ2FwLXNpemUpKjIpO292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlRWRpdG9yIC5odC1tdWx0aS1zZWxlY3QtZWRpdG9yIHVsIGxpOmhvdmVye2JhY2tncm91bmQ6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0taHQtbWVudS1pdGVtLWhv''@;'; put 'put ''dmVyLWNvbG9yKXZhcigtLWh0LW1lbnUtaXRlbS1ob3Zlci1jb2xvci1vcGFjaXR5LDEwMCUpLHRyYW5zcGFyZW50KX0uaGFuZHNvbnRhYmxlRWRpdG9yIC5odC1tdWx0aS1zZWxlY3QtZWRpdG9yIHVsIGxpOmhhcyhpbnB1dDpmb2N1cyl7YmFja2dyb3VuZDpjb2xvci1taXgoaW4gc3JnYix2''@;'; put 'put ''YXIoLS1odC1tZW51LWl0ZW0taG92ZXItY29sb3IpdmFyKC0taHQtbWVudS1pdGVtLWhvdmVyLWNvbG9yLW9wYWNpdHksMTAwJSksdHJhbnNwYXJlbnQpfS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RDYXB0aW9ue3dpZHRoOjEwMCU7cGFkZGluZzp2YXIoLS1odC1pbnB1dC12ZXJ0aWNhbC1w''@;'; put 'put ''YWRkaW5nKXZhcigtLWh0LWlucHV0LWhvcml6b250YWwtcGFkZGluZyk7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6dmFyKC0taHQtZm9udC1zaXplKTtsaW5lLWhlaWdodDp2YXIoLS1odC1saW5lLWhlaWdodCk7Zm9udC13ZWlnaHQ6dmFyKC0taHQtZm9udC13ZWlnaHQpO2JvcmRl''@;'; put 'put ''ci1yYWRpdXM6dmFyKC0taHQtaW5wdXQtYm9yZGVyLXJhZGl1cyk7Ym94LXNpemluZzpib3JkZXItYm94O2N1cnNvcjpwb2ludGVyO2JvcmRlcjp2YXIoLS1odC1pbnB1dC1ib3JkZXItd2lkdGgpc29saWQgdmFyKC0taHQtaW5wdXQtYm9yZGVyLWNvbG9yKTtjb2xvcjp2YXIoLS1odC1pbnB1''@;'; put 'put ''dC1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWlucHV0LWJhY2tncm91bmQtY29sb3IpO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO3RyYW5zaXRpb246dmFyKC0taHQtdGFibGUtdHJhbnNpdGlvbilhbGwgZWFzZS1pbi1vdXQ7''@;'; put 'put ''bWFyZ2luOjA7cGFkZGluZy1pbmxpbmUtZW5kOmNhbGModmFyKC0taHQtaW5wdXQtaG9yaXpvbnRhbC1wYWRkaW5nKSArIHZhcigtLWh0LWljb24tc2l6ZSkpO292ZXJmbG93OmhpZGRlbjtvdXRsaW5lOm5vbmUhaW1wb3J0YW50fS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RDYXB0aW9uOmFm''@;'; put 'put ''dGVye2NvbnRlbnQ6IiI7cmlnaHQ6Y2FsYyh2YXIoLS1odC1pbnB1dC1ob3Jpem9udGFsLXBhZGRpbmcpIC0gdmFyKC0taHQtaWNvbi1zaXplKS80KTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9LmhhbmRzb250YWJs''@;'; put 'put ''ZSAuaHRVSVNlbGVjdENhcHRpb246aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWh0LWlucHV0LWhvdmVyLWJvcmRlci1jb2xvcik7Y29sb3I6dmFyKC0taHQtaW5wdXQtaG92ZXItZm9yZWdyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1pbnB1dC1ob3Zlci1iYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0Q2FwdGlvbjpkaXNhYmxlZHtib3JkZXItY29sb3I6dmFyKC0taHQtaW5wdXQtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKTtjb2xvcjp2YXIoLS1odC1pbnB1dC1kaXNhYmxlZC1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWh0LWlucHV0LWRpc2FibGVkLWJhY2tncm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RDYXB0aW9uOmZvY3Vze2JvcmRlci1jb2xvcjp2YXIoLS1odC1pbnB1dC1mb2N1cy1ib3JkZXItY29sb3IpO2NvbG9yOnZhcigtLWh0LWlucHV0LWZvY3VzLWZvcmVn''@;'; put 'put ''cm91bmQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtaW5wdXQtZm9jdXMtYmFja2dyb3VuZC1jb2xvcil9LmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdHtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTtvdXRsaW5lOm5vbmUhaW1wb3J0YW50fS5oYW5kc29udGFibGUg''@;'; put 'put ''Lmh0VUlTZWxlY3Q6Zm9jdXMgLmh0VUlTZWxlY3RDYXB0aW9ue2JvcmRlci1jb2xvcjp2YXIoLS1odC1pbnB1dC1mb2N1cy1ib3JkZXItY29sb3IpO2NvbG9yOnZhcigtLWh0LWlucHV0LWZvY3VzLWZvcmVncm91bmQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtaW5wdXQtZm9j''@;'; put 'put ''dXMtYmFja2dyb3VuZC1jb2xvcil9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdENhcHRpb246YWZ0ZXJ7cmlnaHQ6YXV0bztsZWZ0OmNhbGModmFyKC0taHQtaW5wdXQtaG9yaXpvbnRhbC1wYWRkaW5nKSAtIHZhcigtLWh0LWljb24tc2l6ZSkvNCl9LmhhbmRzb250YWJsZSAu''@;'; put 'put ''aHRGaWx0ZXJzTWVudUNvbmRpdGlvbiAuaHRVSUlucHV0IGlucHV0LC5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVWYWx1ZSAuaHRVSU11bHRpcGxlU2VsZWN0U2VhcmNoIGlucHV0e3dpZHRoOjEwMCU7cGFkZGluZzp2YXIoLS1odC1pbnB1dC12ZXJ0aWNhbC1wYWRkaW5nKXZhcigtLWh0''@;'; put 'put ''LWlucHV0LWhvcml6b250YWwtcGFkZGluZyk7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6dmFyKC0taHQtZm9udC1zaXplKTtsaW5lLWhlaWdodDp2YXIoLS1odC1saW5lLWhlaWdodCk7Zm9udC13ZWlnaHQ6dmFyKC0taHQtZm9udC13ZWlnaHQpO2JvcmRlci1yYWRpdXM6dmFyKC0t''@;'; put 'put ''aHQtaW5wdXQtYm9yZGVyLXJhZGl1cyk7Ym94LXNpemluZzpib3JkZXItYm94O2N1cnNvcjpwb2ludGVyO2JvcmRlcjp2YXIoLS1odC1pbnB1dC1ib3JkZXItd2lkdGgpc29saWQgdmFyKC0taHQtaW5wdXQtYm9yZGVyLWNvbG9yKTtjb2xvcjp2YXIoLS1odC1pbnB1dC1mb3JlZ3JvdW5kLWNv''@;'; put 'put ''bG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWlucHV0LWJhY2tncm91bmQtY29sb3IpO3RyYW5zaXRpb246dmFyKC0taHQtdGFibGUtdHJhbnNpdGlvbilhbGwgZWFzZS1pbi1vdXQ7b3V0bGluZTpub25lIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51Q29uZGl0''@;'; put 'put ''aW9uIC5odFVJSW5wdXQgaW5wdXQ6aG92ZXIsLmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudVZhbHVlIC5odFVJTXVsdGlwbGVTZWxlY3RTZWFyY2ggaW5wdXQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWh0LWlucHV0LWhvdmVyLWJvcmRlci1jb2xvcik7Y29sb3I6dmFyKC0taHQtaW5w''@;'; put 'put ''dXQtaG92ZXItZm9yZWdyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1pbnB1dC1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51Q29uZGl0aW9uIC5odFVJSW5wdXQgaW5wdXQ6ZGlzYWJsZWQsLmhhbmRzb250YWJsZSAuaHRG''@;'; put 'put ''aWx0ZXJzTWVudVZhbHVlIC5odFVJTXVsdGlwbGVTZWxlY3RTZWFyY2ggaW5wdXQ6ZGlzYWJsZWR7Ym9yZGVyLWNvbG9yOnZhcigtLWh0LWlucHV0LWRpc2FibGVkLWJvcmRlci1jb2xvcik7Y29sb3I6dmFyKC0taHQtaW5wdXQtZGlzYWJsZWQtZm9yZWdyb3VuZC1jb2xvcik7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1odC1pbnB1dC1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51Q29uZGl0aW9uIC5odFVJSW5wdXQgaW5wdXQ6Zm9jdXMsLmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudVZhbHVlIC5odFVJTXVsdGlwbGVTZWxlY3RT''@;'; put 'put ''ZWFyY2ggaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOnZhcigtLWh0LWlucHV0LWZvY3VzLWJvcmRlci1jb2xvcik7Y29sb3I6dmFyKC0taHQtaW5wdXQtZm9jdXMtZm9yZWdyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1pbnB1dC1mb2N1cy1iYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''KX0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXR7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzowO3Bvc2l0aW9uOnJlbGF0aXZlO291dGxpbmU6bm9uZSFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0SWNvbntwb3NpdGlvbjphYnNvbHV0ZX0uaGFuZHNvbnRhYmxlIC5odFVJSW5w''@;'; put 'put ''dXQuaHRVSUJ1dHRvbiBpbnB1dCwuaGFuZHNvbnRhYmxlIC5odC1idXR0b257bWluLXdpZHRoOjY0cHg7cGFkZGluZzp2YXIoLS1odC1idXR0b24tdmVydGljYWwtcGFkZGluZyl2YXIoLS1odC1idXR0b24taG9yaXpvbnRhbC1wYWRkaW5nKTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6''@;'; put 'put ''ZTp2YXIoLS1odC1mb250LXNpemUpO2xpbmUtaGVpZ2h0OnZhcigtLWh0LWxpbmUtaGVpZ2h0KTtmb250LXdlaWdodDp2YXIoLS1odC1mb250LXdlaWdodCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1odC1idXR0b24tYm9yZGVyLXJhZGl1cyk7Ym94LXNpemluZzpib3JkZXItYm94O2N1cnNvcjpw''@;'; put 'put ''b2ludGVyO3RyYW5zaXRpb246dmFyKC0taHQtdGFibGUtdHJhbnNpdGlvbilhbGwgZWFzZS1pbi1vdXQ7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoxcHg7b3V0bGluZTpub25lIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbkNhbmNlbCBpbnB1''@;'; put 'put ''dCwuaGFuZHNvbnRhYmxlIC5odC1idXR0b24tLXNlY29uZGFyeXtib3JkZXItY29sb3I6dmFyKC0taHQtc2Vjb25kYXJ5LWJ1dHRvbi1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtc2Vjb25kYXJ5LWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1o''@;'; put 'put ''dC1zZWNvbmRhcnktYnV0dG9uLWZvcmVncm91bmQtY29sb3IpfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uQ2FuY2VsIGlucHV0OmhvdmVyLC5oYW5kc29udGFibGUgLmh0LWJ1dHRvbi0tc2Vjb25kYXJ5OmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1odC1zZWNvbmRhcnkt''@;'; put 'put ''YnV0dG9uLWhvdmVyLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1zZWNvbmRhcnktYnV0dG9uLWhvdmVyLWJhY2tncm91bmQtY29sb3IpO2NvbG9yOnZhcigtLWh0LXNlY29uZGFyeS1idXR0b24taG92ZXItZm9yZWdyb3VuZC1jb2xvcil9LmhhbmRzb250YWJsZSAu''@;'; put 'put ''aHRVSUlucHV0Lmh0VUlCdXR0b25DYW5jZWwgaW5wdXQ6ZGlzYWJsZWQsLmhhbmRzb250YWJsZSAuaHQtYnV0dG9uLS1zZWNvbmRhcnk6ZGlzYWJsZWR7Ym9yZGVyLWNvbG9yOnZhcigtLWh0LXNlY29uZGFyeS1idXR0b24tZGlzYWJsZWQtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWh0LXNlY29uZGFyeS1idXR0b24tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0taHQtc2Vjb25kYXJ5LWJ1dHRvbi1kaXNhYmxlZC1mb3JlZ3JvdW5kLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbkNhbmNlbCBpbnB1dDpmb2N1''@;'; put 'put ''cywuaGFuZHNvbnRhYmxlIC5odC1idXR0b24tLXNlY29uZGFyeTpmb2N1c3tib3JkZXItY29sb3I6dmFyKC0taHQtc2Vjb25kYXJ5LWJ1dHRvbi1mb2N1cy1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtc2Vjb25kYXJ5LWJ1dHRvbi1mb2N1cy1iYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yKTtjb2xvcjp2YXIoLS1odC1zZWNvbmRhcnktYnV0dG9uLWZvY3VzLWZvcmVncm91bmQtY29sb3IpO2JveC1zaGFkb3c6MCAwIDAgMXB4IHZhcigtLWh0LWFjY2VudC1jb2xvcil9Lmh0VUlJbnB1dC5odFVJQnV0dG9uT0sgaW5wdXQsLmh0LWJ1dHRvbi0tcHJpbWFyeXtib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0taHQtcHJpbWFyeS1idXR0b24tYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LXByaW1hcnktYnV0dG9uLWJhY2tncm91bmQtY29sb3IpO2NvbG9yOnZhcigtLWh0LXByaW1hcnktYnV0dG9uLWZvcmVncm91bmQtY29sb3IpfS5odFVJSW5wdXQuaHRVSUJ1''@;'; put 'put ''dHRvbk9LIGlucHV0OmhvdmVyLC5odC1idXR0b24tLXByaW1hcnk6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWh0LXByaW1hcnktYnV0dG9uLWhvdmVyLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1wcmltYXJ5LWJ1dHRvbi1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''KTtjb2xvcjp2YXIoLS1odC1wcmltYXJ5LWJ1dHRvbi1ob3Zlci1mb3JlZ3JvdW5kLWNvbG9yKX0uaHRVSUlucHV0Lmh0VUlCdXR0b25PSyBpbnB1dDpkaXNhYmxlZCwuaHQtYnV0dG9uLS1wcmltYXJ5OmRpc2FibGVke2JvcmRlci1jb2xvcjp2YXIoLS1odC1wcmltYXJ5LWJ1dHRvbi1kaXNh''@;'; put 'put ''YmxlZC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtcHJpbWFyeS1idXR0b24tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0taHQtcHJpbWFyeS1idXR0b24tZGlzYWJsZWQtZm9yZWdyb3VuZC1jb2xvcil9Lmh0VUlJbnB1dC5odFVJQnV0dG9u''@;'; put 'put ''T0sgaW5wdXQ6Zm9jdXMsLmh0LWJ1dHRvbi0tcHJpbWFyeTpmb2N1c3tib3JkZXItY29sb3I6dmFyKC0taHQtcHJpbWFyeS1idXR0b24tZm9jdXMtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LXByaW1hcnktYnV0dG9uLWZvY3VzLWJhY2tncm91bmQtY29sb3IpO2Nv''@;'; put 'put ''bG9yOnZhcigtLWh0LXByaW1hcnktYnV0dG9uLWZvY3VzLWZvcmVncm91bmQtY29sb3IpO2JveC1zaGFkb3c6MCAwIDAgMXB4IHZhcigtLWh0LWFjY2VudC1jb2xvcil9LmhhbmRzb250YWJsZSAuaHRVSVJhZGlve3BhZGRpbmc6dmFyKC0taHQtZ2FwLXNpemUpY2FsYygyKnZhcigtLWh0LWdh''@;'; put 'put ''cC1zaXplKSk7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDp2YXIoLS1odC1nYXAtc2l6ZSk7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luOjA7cGFkZGluZy1ib3R0b206MDtkaXNwbGF5OmlubGluZS1mbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgLmh0VUlSYWRpbzpmaXJzdC1jaGls''@;'; put 'put ''ZHtwYWRkaW5nLWlubGluZS1zdGFydDowfS5oYW5kc29udGFibGUgLmh0VUlSYWRpbz5pbnB1dFt0eXBlPXJhZGlvXXt3aWR0aDp2YXIoLS1odC1yYWRpby1zaXplKTtoZWlnaHQ6dmFyKC0taHQtcmFkaW8tc2l6ZSk7YXBwZWFyYW5jZTpub25lO2N1cnNvcjpwb2ludGVyO2JvcmRlci1yYWRp''@;'; put 'put ''dXM6Y2FsYyguNSp2YXIoLS1odC1yYWRpby1zaXplKSk7b3V0bGluZTpub25lO21hcmdpbjowO3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgLmh0VUlSYWRpbz5pbnB1dFt0eXBlPXJhZGlvXTpiZWZvcmV7Y29udGVudDoiIjtib3JkZXItcmFkaXVzOmNhbGMoLjUqdmFyKC0taHQt''@;'; put 'put ''cmFkaW8tc2l6ZSkpO2JvcmRlcjoxcHggc29saWQgdmFyKC0taHQtcmFkaW8tYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LXJhZGlvLWJhY2tncm91bmQtY29sb3IpO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MH0uaGFuZHNvbnRhYmxlIC5o''@;'; put 'put ''dFVJUmFkaW8+aW5wdXRbdHlwZT1yYWRpb106YWZ0ZXJ7Y29udGVudDoiIjtjb2xvcjp2YXIoLS1odC1yYWRpby1pY29uLWNvbG9yKTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlfS5oYW5kc29udGFibGUgLmh0VUlSYWRpbz5pbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmJlZm9y''@;'; put 'put ''ZXtib3JkZXItY29sb3I6dmFyKC0taHQtcmFkaW8tY2hlY2tlZC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtcmFkaW8tY2hlY2tlZC1iYWNrZ3JvdW5kLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odFVJUmFkaW8+aW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphZnRl''@;'; put 'put ''cntjb2xvcjp2YXIoLS1odC1yYWRpby1jaGVja2VkLWljb24tY29sb3IpfS5oYW5kc29udGFibGUgLmh0VUlSYWRpbz5pbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmRpc2FibGVke2N1cnNvcjppbml0aWFsfS5oYW5kc29udGFibGUgLmh0VUlSYWRpbz5pbnB1dFt0eXBlPXJhZGlvXTpjaGVj''@;'; put 'put ''a2VkOmRpc2FibGVkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0taHQtcmFkaW8tY2hlY2tlZC1kaXNhYmxlZC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtcmFkaW8tY2hlY2tlZC1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odFVJ''@;'; put 'put ''UmFkaW8+aW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpkaXNhYmxlZDphZnRlcntjb2xvcjp2YXIoLS1odC1yYWRpby1jaGVja2VkLWRpc2FibGVkLWljb24tY29sb3IpfS5oYW5kc29udGFibGUgLmh0VUlSYWRpbz5pbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmZvY3VzOmJlZm9yZXtib3Jk''@;'; put 'put ''ZXItY29sb3I6dmFyKC0taHQtcmFkaW8tY2hlY2tlZC1mb2N1cy1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtcmFkaW8tY2hlY2tlZC1mb2N1cy1iYWNrZ3JvdW5kLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odFVJUmFkaW8+aW5wdXRbdHlwZT1yYWRpb106Y2hlY2tl''@;'; put 'put ''ZDpmb2N1czphZnRlcntjb2xvcjp2YXIoLS1odC1yYWRpby1jaGVja2VkLWZvY3VzLWljb24tY29sb3IpfS5oYW5kc29udGFibGUgLmh0VUlSYWRpbz5pbnB1dFt0eXBlPXJhZGlvXTpkaXNhYmxlZHtjdXJzb3I6aW5pdGlhbH0uaGFuZHNvbnRhYmxlIC5odFVJUmFkaW8+aW5wdXRbdHlwZT1y''@;'; put 'put ''YWRpb106ZGlzYWJsZWQ6YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1odC1yYWRpby1kaXNhYmxlZC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtcmFkaW8tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcil9LmhhbmRzb250YWJsZSAuaHRVSVJhZGlvPmlucHV0W3R5''@;'; put 'put ''cGU9cmFkaW9dOmRpc2FibGVkOmFmdGVye2NvbG9yOnZhcigtLWh0LXJhZGlvLWRpc2FibGVkLWljb24tY29sb3IpfS5oYW5kc29udGFibGUgLmh0VUlSYWRpbz5pbnB1dFt0eXBlPXJhZGlvXTpmb2N1czpiZWZvcmV7Ym9yZGVyLWNvbG9yOnZhcigtLWh0LXJhZGlvLWZvY3VzLWJvcmRlci1j''@;'; put 'put ''b2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1yYWRpby1mb2N1cy1iYWNrZ3JvdW5kLWNvbG9yKTtvdXRsaW5lOjFweCBzb2xpZCB2YXIoLS1odC1yYWRpby1mb2N1cy1yaW5nLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odFVJUmFkaW8+aW5wdXRbdHlwZT1yYWRpb106Zm9jdXM6YWZ0''@;'; put 'put ''ZXJ7Y29sb3I6dmFyKC0taHQtcmFkaW8tZm9jdXMtaWNvbi1jb2xvcil9LmhhbmRzb250YWJsZSAuaHRVSVJhZGlvIGxhYmVse3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtjdXJzb3I6cG9pbnRlcjtjb2xvcjppbmhlcml0fS5oYW5kc29udGFibGUgLmh0VUlSYWRpbyBsYWJlbDpiZWZvcmV7Y29u''@;'; put 'put ''dGVudDoiIjtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjB9LmhhbmRzb250YWJsZSAuY29sbGFwc2libGVJbmRpY2F0b3IsLmhhbmRzb250YWJsZSAuaHRfbmVzdGluZ0J1dHRvbnt3aWR0aDp2YXIoLS1odC1pY29uLWJ1dHRvbi1oaXQtYXJlYS1zaXplKTtoZWlnaHQ6''@;'; put 'put ''dmFyKC0taHQtaWNvbi1idXR0b24taGl0LWFyZWEtc2l6ZSk7bWFyZ2luOmNhbGMoLTEqKHZhcigtLWh0LWljb24tYnV0dG9uLWhpdC1hcmVhLXNpemUpIC0gdmFyKC0taHQtaWNvbi1zaXplKSkvMiArIDFweCk7Ym94LXNpemluZzpib3JkZXItYm94O2N1cnNvcjpwb2ludGVyO3RleHQtaW5k''@;'; put 'put ''ZW50Oi0xMDBweDtmbGV4LXNocmluazowO2ZvbnQtc2l6ZTowO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OnZpc2libGV9LmhhbmRzb250YWJsZSAuY29sbGFwc2libGVJbmRpY2F0b3I6YmVmb3JlLC5oYW5kc29udGFibGUgLmh0X25lc3RpbmdCdXR0b246YmVmb3Jle2NvbnRlbnQ6IiI7''@;'; put 'put ''d2lkdGg6dmFyKC0taHQtaWNvbi1zaXplKTtoZWlnaHQ6dmFyKC0taHQtaWNvbi1zaXplKTttYXJnaW4tdG9wOmNhbGMoLS41KnZhcigtLWh0LWljb24tc2l6ZSkpO21hcmdpbi1sZWZ0OmNhbGMoLS41KnZhcigtLWh0LWljb24tc2l6ZSkpO2JvcmRlci1yYWRpdXM6dmFyKC0taHQtY29sbGFw''@;'; put 'put ''c2UtYnV0dG9uLWJvcmRlci1yYWRpdXMpO3RyYW5zaXRpb246dmFyKC0taHQtdGFibGUtdHJhbnNpdGlvbilhbGwgZWFzZS1pbi1vdXQ7ei1pbmRleDoxO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJX0uaGFuZHNvbnRhYmxlIC5jb2xsYXBzaWJsZUlu''@;'; put 'put ''ZGljYXRvcjphZnRlciwuaGFuZHNvbnRhYmxlIC5odF9uZXN0aW5nQnV0dG9uOmFmdGVye2NvbnRlbnQ6IiI7d2lkdGg6dmFyKC0taHQtaWNvbi1zaXplKTtoZWlnaHQ6dmFyKC0taHQtaWNvbi1zaXplKTttYXJnaW4tdG9wOmNhbGMoLS41KnZhcigtLWh0LWljb24tc2l6ZSkpO21hcmdpbi1s''@;'; put 'put ''ZWZ0OmNhbGMoLS41KnZhcigtLWh0LWljb24tc2l6ZSkpO2JvcmRlci1yYWRpdXM6dmFyKC0taHQtY29sbGFwc2UtYnV0dG9uLWJvcmRlci1yYWRpdXMpO3RyYW5zaXRpb246dmFyKC0taHQtdGFibGUtdHJhbnNpdGlvbilhbGwgZWFzZS1pbi1vdXQ7ei1pbmRleDowO2Rpc3BsYXk6YmxvY2s7''@;'; put 'put ''cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJX0uaGFuZHNvbnRhYmxlIC5jb2xsYXBzaWJsZUluZGljYXRvci5leHBhbmRlZDpiZWZvcmUsLmhhbmRzb250YWJsZSAuY29sbGFwc2libGVJbmRpY2F0b3IuaHRfbmVzdGluZ0NvbGxhcHNlOmJlZm9yZSwuaGFuZHNvbnRhYmxlIC5o''@;'; put 'put ''dF9uZXN0aW5nQnV0dG9uLmV4cGFuZGVkOmJlZm9yZSwuaGFuZHNvbnRhYmxlIC5odF9uZXN0aW5nQnV0dG9uLmh0X25lc3RpbmdDb2xsYXBzZTpiZWZvcmV7Y29sb3I6dmFyKC0taHQtY29sbGFwc2UtYnV0dG9uLW9wZW4taWNvbi1jb2xvcil9LmhhbmRzb250YWJsZSAuY29sbGFwc2libGVJ''@;'; put 'put ''bmRpY2F0b3IuZXhwYW5kZWQ6YWZ0ZXIsLmhhbmRzb250YWJsZSAuY29sbGFwc2libGVJbmRpY2F0b3IuaHRfbmVzdGluZ0NvbGxhcHNlOmFmdGVyLC5oYW5kc29udGFibGUgLmh0X25lc3RpbmdCdXR0b24uZXhwYW5kZWQ6YWZ0ZXIsLmhhbmRzb250YWJsZSAuaHRfbmVzdGluZ0J1dHRvbi5o''@;'; put 'put ''dF9uZXN0aW5nQ29sbGFwc2U6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1jb2xsYXBzZS1idXR0b24tb3Blbi1iYWNrZ3JvdW5kLWNvbG9yKTtib3gtc2hhZG93OjAgMCAwIDFweCB2YXIoLS1odC1jb2xsYXBzZS1idXR0b24tb3Blbi1ib3JkZXItY29sb3IpfS5oYW5kc29udGFi''@;'; put 'put ''bGUgLmNvbGxhcHNpYmxlSW5kaWNhdG9yLmV4cGFuZGVkOmhvdmVyOmJlZm9yZSwuaGFuZHNvbnRhYmxlIC5jb2xsYXBzaWJsZUluZGljYXRvci5odF9uZXN0aW5nQ29sbGFwc2U6aG92ZXI6YmVmb3JlLC5oYW5kc29udGFibGUgLmh0X25lc3RpbmdCdXR0b24uZXhwYW5kZWQ6aG92ZXI6YmVm''@;'; put 'put ''b3JlLC5oYW5kc29udGFibGUgLmh0X25lc3RpbmdCdXR0b24uaHRfbmVzdGluZ0NvbGxhcHNlOmhvdmVyOmJlZm9yZXtjb2xvcjp2YXIoLS1odC1jb2xsYXBzZS1idXR0b24tb3Blbi1ob3Zlci1pY29uLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5jb2xsYXBzaWJsZUluZGljYXRvci5leHBhbmRl''@;'; put 'put ''ZDpob3ZlcjphZnRlciwuaGFuZHNvbnRhYmxlIC5jb2xsYXBzaWJsZUluZGljYXRvci5odF9uZXN0aW5nQ29sbGFwc2U6aG92ZXI6YWZ0ZXIsLmhhbmRzb250YWJsZSAuaHRfbmVzdGluZ0J1dHRvbi5leHBhbmRlZDpob3ZlcjphZnRlciwuaGFuZHNvbnRhYmxlIC5odF9uZXN0aW5nQnV0dG9u''@;'; put 'put ''Lmh0X25lc3RpbmdDb2xsYXBzZTpob3ZlcjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWNvbGxhcHNlLWJ1dHRvbi1vcGVuLWhvdmVyLWJhY2tncm91bmQtY29sb3IpO2JveC1zaGFkb3c6MCAwIDAgMXB4IHZhcigtLWh0LWNvbGxhcHNlLWJ1dHRvbi1vcGVuLWhvdmVyLWJvcmRl''@;'; put 'put ''ci1jb2xvcil9LmhhbmRzb250YWJsZSAuY29sbGFwc2libGVJbmRpY2F0b3IuY29sbGFwc2VkOmJlZm9yZSwuaGFuZHNvbnRhYmxlIC5jb2xsYXBzaWJsZUluZGljYXRvci5odF9uZXN0aW5nRXhwYW5kOmJlZm9yZSwuaGFuZHNvbnRhYmxlIC5odF9uZXN0aW5nQnV0dG9uLmNvbGxhcHNlZDpi''@;'; put 'put ''ZWZvcmUsLmhhbmRzb250YWJsZSAuaHRfbmVzdGluZ0J1dHRvbi5odF9uZXN0aW5nRXhwYW5kOmJlZm9yZXtjb2xvcjp2YXIoLS1odC1jb2xsYXBzZS1idXR0b24tY2xvc2UtaWNvbi1jb2xvcil9LmhhbmRzb250YWJsZSAuY29sbGFwc2libGVJbmRpY2F0b3IuY29sbGFwc2VkOmFmdGVyLC5o''@;'; put 'put ''YW5kc29udGFibGUgLmNvbGxhcHNpYmxlSW5kaWNhdG9yLmh0X25lc3RpbmdFeHBhbmQ6YWZ0ZXIsLmhhbmRzb250YWJsZSAuaHRfbmVzdGluZ0J1dHRvbi5jb2xsYXBzZWQ6YWZ0ZXIsLmhhbmRzb250YWJsZSAuaHRfbmVzdGluZ0J1dHRvbi5odF9uZXN0aW5nRXhwYW5kOmFmdGVye2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6dmFyKC0taHQtY29sbGFwc2UtYnV0dG9uLWNsb3NlLWJhY2tncm91bmQtY29sb3IpO2JveC1zaGFkb3c6MCAwIDAgMXB4IHZhcigtLWh0LWNvbGxhcHNlLWJ1dHRvbi1jbG9zZS1ib3JkZXItY29sb3IpfS5oYW5kc29udGFibGUgLmNvbGxhcHNpYmxlSW5kaWNhdG9yLmNv''@;'; put 'put ''bGxhcHNlZDpob3ZlcjpiZWZvcmUsLmhhbmRzb250YWJsZSAuY29sbGFwc2libGVJbmRpY2F0b3IuaHRfbmVzdGluZ0V4cGFuZDpob3ZlcjpiZWZvcmUsLmhhbmRzb250YWJsZSAuaHRfbmVzdGluZ0J1dHRvbi5jb2xsYXBzZWQ6aG92ZXI6YmVmb3JlLC5oYW5kc29udGFibGUgLmh0X25lc3Rp''@;'; put 'put ''bmdCdXR0b24uaHRfbmVzdGluZ0V4cGFuZDpob3ZlcjpiZWZvcmV7Y29sb3I6dmFyKC0taHQtY29sbGFwc2UtYnV0dG9uLWNsb3NlLWhvdmVyLWljb24tY29sb3IpfS5oYW5kc29udGFibGUgLmNvbGxhcHNpYmxlSW5kaWNhdG9yLmNvbGxhcHNlZDpob3ZlcjphZnRlciwuaGFuZHNvbnRhYmxl''@;'; put 'put ''IC5jb2xsYXBzaWJsZUluZGljYXRvci5odF9uZXN0aW5nRXhwYW5kOmhvdmVyOmFmdGVyLC5oYW5kc29udGFibGUgLmh0X25lc3RpbmdCdXR0b24uY29sbGFwc2VkOmhvdmVyOmFmdGVyLC5oYW5kc29udGFibGUgLmh0X25lc3RpbmdCdXR0b24uaHRfbmVzdGluZ0V4cGFuZDpob3ZlcjphZnRl''@;'; put 'put ''cntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWNvbGxhcHNlLWJ1dHRvbi1jbG9zZS1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yKTtib3gtc2hhZG93OjAgMCAwIDFweCB2YXIoLS1odC1jb2xsYXBzZS1idXR0b24tY2xvc2UtaG92ZXItYm9yZGVyLWNvbG9yKX0uaGFuZHNvbnRhYmxlIHRoLmh0''@;'; put 'put ''X19hY3RpdmVfaGlnaGxpZ2h0IC5jb2xsYXBzaWJsZUluZGljYXRvci5jb2xsYXBzZWQ6YmVmb3JlLC5oYW5kc29udGFibGUgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHQgLmNvbGxhcHNpYmxlSW5kaWNhdG9yLmh0X25lc3RpbmdFeHBhbmQ6YmVmb3JlLC5oYW5kc29udGFibGUgdGguaHRfX2Fj''@;'; put 'put ''dGl2ZV9oaWdobGlnaHQgLmh0X25lc3RpbmdCdXR0b24uY29sbGFwc2VkOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0IC5odF9uZXN0aW5nQnV0dG9uLmh0X25lc3RpbmdFeHBhbmQ6YmVmb3Jle2NvbG9yOnZhcigtLWh0LWNvbGxhcHNlLWJ1dHRvbi1jbG9z''@;'; put 'put ''ZS1pY29uLWFjdGl2ZS1jb2xvcil9LmhhbmRzb250YWJsZSB0aC5odF9fYWN0aXZlX2hpZ2hsaWdodCAuY29sbGFwc2libGVJbmRpY2F0b3IuY29sbGFwc2VkOmhvdmVyOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0IC5jb2xsYXBzaWJsZUluZGljYXRvci5o''@;'; put 'put ''dF9uZXN0aW5nRXhwYW5kOmhvdmVyOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0IC5odF9uZXN0aW5nQnV0dG9uLmNvbGxhcHNlZDpob3ZlcjpiZWZvcmUsLmhhbmRzb250YWJsZSB0aC5odF9fYWN0aXZlX2hpZ2hsaWdodCAuaHRfbmVzdGluZ0J1dHRvbi5o''@;'; put 'put ''dF9uZXN0aW5nRXhwYW5kOmhvdmVyOmJlZm9yZXtjb2xvcjp2YXIoLS1odC1jb2xsYXBzZS1idXR0b24tY2xvc2UtaG92ZXItaWNvbi1hY3RpdmUtY29sb3IpfS5oYW5kc29udGFibGUgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHQgLmNvbGxhcHNpYmxlSW5kaWNhdG9yLmV4cGFuZGVkOmJlZm9y''@;'; put 'put ''ZSwuaGFuZHNvbnRhYmxlIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0IC5jb2xsYXBzaWJsZUluZGljYXRvci5odF9uZXN0aW5nQ29sbGFwc2U6YmVmb3JlLC5oYW5kc29udGFibGUgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHQgLmh0X25lc3RpbmdCdXR0b24uZXhwYW5kZWQ6YmVmb3JlLC5oYW5k''@;'; put 'put ''c29udGFibGUgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHQgLmh0X25lc3RpbmdCdXR0b24uaHRfbmVzdGluZ0NvbGxhcHNlOmJlZm9yZXtjb2xvcjp2YXIoLS1odC1jb2xsYXBzZS1idXR0b24tb3Blbi1pY29uLWFjdGl2ZS1jb2xvcil9LmhhbmRzb250YWJsZSB0aC5odF9fYWN0aXZlX2hpZ2hs''@;'; put 'put ''aWdodCAuY29sbGFwc2libGVJbmRpY2F0b3IuZXhwYW5kZWQ6aG92ZXI6YmVmb3JlLC5oYW5kc29udGFibGUgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHQgLmNvbGxhcHNpYmxlSW5kaWNhdG9yLmh0X25lc3RpbmdDb2xsYXBzZTpob3ZlcjpiZWZvcmUsLmhhbmRzb250YWJsZSB0aC5odF9fYWN0''@;'; put 'put ''aXZlX2hpZ2hsaWdodCAuaHRfbmVzdGluZ0J1dHRvbi5leHBhbmRlZDpob3ZlcjpiZWZvcmUsLmhhbmRzb250YWJsZSB0aC5odF9fYWN0aXZlX2hpZ2hsaWdodCAuaHRfbmVzdGluZ0J1dHRvbi5odF9uZXN0aW5nQ29sbGFwc2U6aG92ZXI6YmVmb3Jle2NvbG9yOnZhcigtLWh0LWNvbGxhcHNl''@;'; put 'put ''LWJ1dHRvbi1vcGVuLWhvdmVyLWljb24tYWN0aXZlLWNvbG9yKX0uaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmh0Um93c3BhbkhlYWRlcit0aHtib3JkZXItaW5saW5lLXN0YXJ0LXdpZHRoOjB9LmhhbmRzb250YWJsZSB0aGVhZCB0aC5odFJvd3NwYW5IZWFkZXJ7dmVydGljYWwtYWxpZ246Ym90''@;'; put 'put ''dG9tO2hlaWdodDphdXRvO292ZXJmbG93OnZpc2libGV9LmhhbmRzb250YWJsZSB0aGVhZCB0aC5odFJvd3NwYW5IZWFkZXIuaHRfX2FjdGl2ZV9oaWdobGlnaHR7Ym9yZGVyLWlubGluZS1zdGFydC1jb2xvcjp2YXIoLS1odC1oZWFkZXItYWN0aXZlLWJvcmRlci1jb2xvcik7ei1pbmRleDox''@;'; put 'put ''fS5oYW5kc29udGFibGUuaHRSb3dIZWFkZXJzLmh0SGFzUm93c3BhbkhlYWRlcnMgdGhlYWQgdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZDpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFu''@;'; put 'put ''ZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uaGFuZHNvbnRhYmxlLmh0''@;'; put 'put ''Um93SGVhZGVycy5odEhhc1Jvd3NwYW5IZWFkZXJzIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQ6aXMoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6''@;'; put 'put ''bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmhhbmRzb250YWJsZS5odEhhc1Jvd3NwYW5IZWFkZXJz''@;'; put 'put ''IC5odF9jbG9uZV9pbmxpbmVfc3RhcnQgLmh0Q29yZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZDpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhhcmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xr''@;'; put 'put ''KSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFuZyh5aSkpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MH0uaGFuZHNvbnRhYmxlLmh0SGFzUm93c3BhbkhlYWRlcnMg''@;'; put 'put ''Lmh0X2Nsb25lX2lubGluZV9zdGFydCAuaHRDb3JlIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayks''@;'; put 'put ''OmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowfS5oYW5kc29udGFibGUgLmh0X21hc3Rlcjpub3QoLmlubmVy''@;'; put 'put ''Qm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKSB0aGVhZCB0aC5odFJvd3NwYW5Cb3R0b21MZXZlbCwuaGFuZHNvbnRhYmxlIC5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlclRvcCk6bm90KC5pbm5lckJvcmRlckJvdHRvbSl+LmhhbmRzb250YWJsZSB0aGVhZCB0aC5odFJvd3Nw''@;'; put 'put ''YW5Cb3R0b21MZXZlbHtib3JkZXItYm90dG9tLXdpZHRoOjB9LmhhbmRzb250YWJsZSB0aGVhZCB0aC5oaWRkZW5IZWFkZXI6bm90KDpmaXJzdC1vZi10eXBlKXtkaXNwbGF5Om5vbmV9LmhhbmRzb250YWJsZSB0aGVhZCB0aC5oaWRkZW5IZWFkZXJUZXh0IC5jb2xIZWFkZXJ7b3BhY2l0eTow''@;'; put 'put ''fS5oYW5kc29udGFibGUgdGguaHRfbmVzdGluZ0xldmVscz4ucmVsYXRpdmV7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo1cHg7ZGlzcGxheTpmbGV4fS5oYW5kc29udGFibGUgdGguaHRfbmVzdGluZ0xldmVscyBzcGFuOmxhc3QtY2hpbGR7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0taHQtaWNv''@;'; put 'put ''bi1zaXplKSArIDVweCl9LmhhbmRzb250YWJsZSB0aC5odF9uZXN0aW5nTGV2ZWxzIHNwYW4uaHRfbmVzdGluZ0xldmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5oYW5kc29udGFibGUgdGguaHRfbmVzdGluZ0xldmVscyBzcGFuLmh0X25lc3RpbmdMZXZlbF9lbXB0eXtvcmRlcjotMjt3aWR0''@;'; put 'put ''aDo1cHg7aGVpZ2h0OjFweDtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRoLmh0X25lc3RpbmdMZXZlbHMgLmh0X25lc3RpbmdCdXR0b257Y3Vyc29yOnBvaW50ZXI7b3JkZXI6LTE7cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZSB0''@;'; put 'put ''aC5iZWZvcmVIaWRkZW5Db2x1bW4sLmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlbkNvbHVtbntwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlbkNvbHVtbjpiZWZvcmUsLmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Db2x1bW46YWZ0ZXIsLmhhbmRz''@;'; put 'put ''b250YWJsZSB0aC5hZnRlckhpZGRlbkNvbHVtbjpiZWZvcmUsLmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlbkNvbHVtbjphZnRlcntjb2xvcjp2YXIoLS1odC1oaWRkZW4taW5kaWNhdG9yLWNvbG9yKTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01''@;'; put 'put ''MCUpO3dpZHRoOjEwcHghaW1wb3J0YW50O2hlaWdodDoxMHB4IWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlbkNvbHVtbjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7cmlnaHQ6LTJweH0uaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuQ29sdW1uOmJlZm9y''@;'; put 'put ''ZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7bGVmdDotMnB4fS5oYW5kc29udGFibGUgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHQuYmVmb3JlSGlkZGVuQ29sdW1uOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0LmJlZm9yZUhpZGRlbkNvbHVtbjphZnRlciwu''@;'; put 'put ''aGFuZHNvbnRhYmxlIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0LmFmdGVySGlkZGVuQ29sdW1uOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0LmFmdGVySGlkZGVuQ29sdW1uOmFmdGVye2NvbG9yOnZhcigtLWh0LWljb24tYnV0dG9uLWFjdGl2ZS1pY29uLWNv''@;'; put 'put ''bG9yLHZhcigtLWh0LWljb24tYWN0aXZlLWJ1dHRvbi1pY29uLWNvbG9yKSl9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Db2x1bW46YWZ0ZXJ7cmlnaHQ6aW5pdGlhbDtsZWZ0Oi0ycHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSlyb3RhdGUoMTgwZGVnKX1bZGly''@;'; put 'put ''PXJ0bF0uaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuQ29sdW1uOmJlZm9yZXtyaWdodDotMnB4O2xlZnQ6aW5pdGlhbDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKXJvdGF0ZSgxODBkZWcpfS5oYW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuUm93LC5oYW5kc29udGFibGUgdGguYWZ0''@;'; put 'put ''ZXJIaWRkZW5Sb3d7cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Sb3c6YmVmb3JlLC5oYW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuUm93OmFmdGVyLC5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Sb3c6YmVmb3JlLC5oYW5kc29udGFibGUgdGgu''@;'; put 'put ''YWZ0ZXJIaWRkZW5Sb3c6YWZ0ZXJ7Y29sb3I6dmFyKC0taHQtaGlkZGVuLWluZGljYXRvci1jb2xvcik7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlKTt3aWR0aDoxMHB4IWltcG9ydGFudDtoZWlnaHQ6MTBweCFpbXBvcnRhbnR9LmhhbmRzb250''@;'; put 'put ''YWJsZSB0aC5iZWZvcmVIaWRkZW5Sb3c6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2JvdHRvbTotMnB4fS5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Sb3c6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jazt0b3A6LTJweH0uaGFuZHNvbnRhYmxlIHRoLmh0X19hY3Rp''@;'; put 'put ''dmVfaGlnaGxpZ2h0LmJlZm9yZUhpZGRlblJvdzpiZWZvcmUsLmhhbmRzb250YWJsZSB0aC5odF9fYWN0aXZlX2hpZ2hsaWdodC5iZWZvcmVIaWRkZW5Sb3c6YWZ0ZXIsLmhhbmRzb250YWJsZSB0aC5odF9fYWN0aXZlX2hpZ2hsaWdodC5hZnRlckhpZGRlblJvdzpiZWZvcmUsLmhhbmRzb250''@;'; put 'put ''YWJsZSB0aC5odF9fYWN0aXZlX2hpZ2hsaWdodC5hZnRlckhpZGRlblJvdzphZnRlcntjb2xvcjp2YXIoLS1odC1pY29uLWJ1dHRvbi1hY3RpdmUtaWNvbi1jb2xvcix2YXIoLS1odC1pY29uLWFjdGl2ZS1idXR0b24taWNvbi1jb2xvcikpfS5oYW5kc29udGFibGUgLmNoYW5nZVR5cGV7Ym94''@;'; put 'put ''LXNpemluZzpib3JkZXItYm94O3dpZHRoOnZhcigtLWh0LWljb24tYnV0dG9uLWhpdC1hcmVhLXNpemUpO2hlaWdodDp2YXIoLS1odC1pY29uLWJ1dHRvbi1oaXQtYXJlYS1zaXplKTttYXJnaW46Y2FsYygtMSoodmFyKC0taHQtaWNvbi1idXR0b24taGl0LWFyZWEtc2l6ZSkgLSB2YXIoLS1o''@;'; put 'put ''dC1pY29uLXNpemUpKS8yICsgMXB4KTtib3gtc2hhZG93Om5vbmU7Y29sb3I6aW5oZXJpdDt6LWluZGV4OjE7YmFja2dyb3VuZDowIDA7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO2ZsZXgtc2hyaW5rOjA7cGFkZGluZzowO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OnZpc2libGV9Lmhh''@;'; put 'put ''bmRzb250YWJsZSAuY2hhbmdlVHlwZTpiZWZvcmV7Y29udGVudDoiIjt3aWR0aDp2YXIoLS1odC1pY29uLXNpemUpO2hlaWdodDp2YXIoLS1odC1pY29uLXNpemUpO21hcmdpbi10b3A6Y2FsYygtLjUqdmFyKC0taHQtaWNvbi1zaXplKSk7bWFyZ2luLWxlZnQ6Y2FsYygtLjUqdmFyKC0taHQt''@;'; put 'put ''aWNvbi1zaXplKSk7Y29sb3I6dmFyKC0taHQtaWNvbi1idXR0b24taWNvbi1jb2xvcik7ei1pbmRleDoxO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJX0uaGFuZHNvbnRhYmxlIC5jaGFuZ2VUeXBlOmFmdGVye2NvbnRlbnQ6IiI7d2lkdGg6dmFyKC0t''@;'; put 'put ''aHQtaWNvbi1zaXplKTtoZWlnaHQ6dmFyKC0taHQtaWNvbi1zaXplKTttYXJnaW4tdG9wOmNhbGMoLS41KnZhcigtLWh0LWljb24tc2l6ZSkpO21hcmdpbi1sZWZ0OmNhbGMoLS41KnZhcigtLWh0LWljb24tc2l6ZSkpO2JvcmRlci1yYWRpdXM6dmFyKC0taHQtaWNvbi1idXR0b24tYm9yZGVy''@;'; put 'put ''LXJhZGl1cyk7Ym94LXNoYWRvdzowIDAgMCAxcHggdmFyKC0taHQtaWNvbi1idXR0b24tYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWljb24tYnV0dG9uLWJhY2tncm91bmQtY29sb3IpO3otaW5kZXg6MDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3Rv''@;'; put 'put ''cDo1MCU7bGVmdDo1MCV9LmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZTpob3ZlcntjdXJzb3I6cG9pbnRlcn0uaGFuZHNvbnRhYmxlIC5jaGFuZ2VUeXBlOmhvdmVyOmJlZm9yZXtjb2xvcjp2YXIoLS1odC1pY29uLWJ1dHRvbi1ob3Zlci1pY29uLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5jaGFu''@;'; put 'put ''Z2VUeXBlOmhvdmVyOmFmdGVye2JveC1zaGFkb3c6MCAwIDAgMXB4IHZhcigtLWh0LWljb24tYnV0dG9uLWhvdmVyLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1pY29uLWJ1dHRvbi1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5odF9fYWN0''@;'; put 'put ''aXZlX2hpZ2hsaWdodCAuY2hhbmdlVHlwZTpiZWZvcmV7Y29sb3I6dmFyKC0taHQtaWNvbi1idXR0b24tYWN0aXZlLWljb24tY29sb3IsdmFyKC0taHQtaWNvbi1hY3RpdmUtYnV0dG9uLWljb24tY29sb3IpKX0uaGFuZHNvbnRhYmxlIC5odF9fYWN0aXZlX2hpZ2hsaWdodCAuY2hhbmdlVHlw''@;'; put 'put ''ZTphZnRlcntib3gtc2hhZG93OjAgMCAwIDFweCB2YXIoLS1odC1pY29uLWJ1dHRvbi1hY3RpdmUtYm9yZGVyLWNvbG9yLHZhcigtLWh0LWljb24tYWN0aXZlLWJ1dHRvbi1ib3JkZXItY29sb3IpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWljb24tYnV0dG9uLWFjdGl2ZS1iYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yLHZhcigtLWh0LWljb24tYWN0aXZlLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yKSl9LmhhbmRzb250YWJsZSAuaHRfX2FjdGl2ZV9oaWdobGlnaHQgLmNoYW5nZVR5cGU6aG92ZXI6YmVmb3Jle2NvbG9yOnZhcigtLWh0LWljb24tYnV0dG9uLWFjdGl2ZS1ob3Zlci1pY29uLWNv''@;'; put 'put ''bG9yLHZhcigtLWh0LWljb24tYWN0aXZlLWJ1dHRvbi1ob3Zlci1pY29uLWNvbG9yKSl9LmhhbmRzb250YWJsZSAuaHRfX2FjdGl2ZV9oaWdobGlnaHQgLmNoYW5nZVR5cGU6aG92ZXI6YWZ0ZXJ7Ym94LXNoYWRvdzowIDAgMCAxcHggdmFyKC0taHQtaWNvbi1idXR0b24tYWN0aXZlLWhvdmVy''@;'; put 'put ''LWJvcmRlci1jb2xvcix2YXIoLS1odC1pY29uLWFjdGl2ZS1idXR0b24taG92ZXItYm9yZGVyLWNvbG9yKSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1pY29uLWJ1dHRvbi1hY3RpdmUtaG92ZXItYmFja2dyb3VuZC1jb2xvcix2YXIoLS1odC1pY29uLWFjdGl2ZS1idXR0b24taG92ZXIt''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcikpfS5oYW5kc29udGFibGUgdGguaHRGaWx0ZXJzQWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtaGVhZGVyLWZpbHRlci1iYWNrZ3JvdW5kLWNvbG9yKX0uaGFuZHNvbnRhYmxlIHRoLmh0RmlsdGVyc0FjdGl2ZS5odF9fYWN0aXZlX2hpZ2hsaWdodHti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWh0LWhlYWRlci1hY3RpdmUtYmFja2dyb3VuZC1jb2xvciksdmFyKC0taHQtaGVhZGVyLWZpbHRlci1iYWNrZ3JvdW5kLWNvbG9yKTIwJSl9LmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudT4uaHRfbWFzdGVyLC5oYW5k''@;'; put 'put ''c29udGFibGUuaHRDb250ZXh0TWVudT4uaHRfbWFzdGVyLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnU+Lmh0X21hc3Rlcntib3gtc2hhZG93OnZhcigtLWh0LW1lbnUtc2hhZG93LXgsMCkgdmFyKC0taHQtbWVudS1zaGFkb3cteSwwKSB2YXIoLS1odC1tZW51LXNoYWRv''@;'; put 'put ''dy1ibHVyLDhweCkgY29sb3ItbWl4KGluIHNyZ2IsdmFyKC0taHQtbWVudS1zaGFkb3ctY29sb3IsIzAwMCl2YXIoLS1odC1tZW51LXNoYWRvdy1vcGFjaXR5LDEwMCUpLHRyYW5zcGFyZW50KTtib3JkZXI6dmFyKC0taHQtbWVudS1ib3JkZXItd2lkdGgsMXB4KXNvbGlkIHZhcigtLWh0LW1l''@;'; put 'put ''bnUtYm9yZGVyLWNvbG9yLCNlNWU1ZTkpO2JvcmRlci1yYWRpdXM6dmFyKC0taHQtbWVudS1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOnZhcigtLWh0LW1lbnUtdmVydGljYWwtcGFkZGluZyw4cHgpdmFyKC0taHQtbWVudS1ob3Jpem9udGFsLXBhZGRpbmcsMCk7YmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1odC1iYWNrZ3JvdW5kLWNvbG9yLCNmZmYpO292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51Om5vdCguaHRHaG9zdFRhYmxlKSwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnU6bm90KC5odEdob3N0VGFibGUpLC5oYW5kc29udGFibGUuaHRGaWx0ZXJz''@;'; put 'put ''Q29uZGl0aW9uc01lbnU6bm90KC5odEdob3N0VGFibGUpe3otaW5kZXg6MTA2MDtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGV9LmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSAuaHRfY2xvbmVfdG9wLC5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgLmh0X2Nsb25lX2JvdHRv''@;'; put 'put ''bSwuaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV9pbmxpbmVfc3RhcnQsLmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSAuaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIsLmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSAuaHRfY2xvbmVfYm90dG9tX2lu''@;'; put 'put ''bGluZV9zdGFydF9jb3JuZXIsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IC5odF9jbG9uZV90b3AsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IC5odF9jbG9uZV9ib3R0b20sLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IC5odF9jbG9uZV9pbmxpbmVfc3RhcnQsLmhhbmRzb250''@;'; put 'put ''YWJsZS5odENvbnRleHRNZW51IC5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgLmh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLmh0X2Nsb25l''@;'; put 'put ''X3RvcCwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IC5odF9jbG9uZV9ib3R0b20sLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSAuaHRfY2xvbmVfaW5saW5lX3N0YXJ0LC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLmh0X2Ns''@;'; put 'put ''b25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLmh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVye2Rpc3BsYXk6bm9uZX0uaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IHRhYmxlLmh0Q29yZSwuaGFuZHNv''@;'; put 'put ''bnRhYmxlLmh0Q29udGV4dE1lbnUgdGFibGUuaHRDb3JlLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUuaHRDb3Jle292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IC5odEN1c3RvbU1lbnVSZW5kZXJlciAudGFibGUuaHRDb3Jl''@;'; put 'put ''LC5oYW5kc29udGFibGUuaHRDb250ZXh0TWVudSAuaHRDdXN0b21NZW51UmVuZGVyZXIgLnRhYmxlLmh0Q29yZSwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IC5odEN1c3RvbU1lbnVSZW5kZXJlciAudGFibGUuaHRDb3Jle2JveC1zaGFkb3c6bm9uZX0uaGFuZHNvbnRh''@;'; put 'put ''YmxlLmh0RHJvcGRvd25NZW51LmhhbmRzb250YWJsZTpmb2N1cywuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUuaGFuZHNvbnRhYmxlOmZvY3VzLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUuaGFuZHNvbnRhYmxlOmZvY3Vze291dGxpbmU6bm9uZX0uaGFuZHNvbnRh''@;'; put 'put ''YmxlLmh0RHJvcGRvd25NZW51IC53dEJvcmRlciwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgLnd0Qm9yZGVyLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLnd0Qm9yZGVye3Zpc2liaWxpdHk6aGlkZGVufS5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGJv''@;'; put 'put ''ZHkgdHI6Zmlyc3Qtb2YtdHlwZSB0ZDpmaXJzdC1jaGlsZCwuaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IHRib2R5IHRyOmZpcnN0LW9mLXR5cGUgdGg6Zmlyc3QtY2hpbGQsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRib2R5IHRyOmZpcnN0LW9mLXR5cGUgdGQ6Zmlyc3QtY2hp''@;'; put 'put ''bGQsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRib2R5IHRyOmZpcnN0LW9mLXR5cGUgdGg6Zmlyc3QtY2hpbGQsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0Ym9keSB0cjpmaXJzdC1vZi10eXBlIHRkOmZpcnN0LWNoaWxkLC5oYW5kc29udGFibGUuaHRGaWx0''@;'; put 'put ''ZXJzQ29uZGl0aW9uc01lbnUgdGJvZHkgdHI6Zmlyc3Qtb2YtdHlwZSB0aDpmaXJzdC1jaGlsZHtoZWlnaHQ6Y2FsYyh2YXIoLS1odC1jZWxsLXZlcnRpY2FsLXBhZGRpbmcpKjIgKyB2YXIoLS1odC1saW5lLWhlaWdodCkgKyAxcHgpfS5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFi''@;'; put 'put ''bGUgdGJvZHkgdHIgdGQsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGR7cGFkZGluZzp2YXIoLS1odC1tZW51LWl0ZW0tdmVydGljYWwtcGFkZGluZyw0cHgp''@;'; put 'put ''dmFyKC0taHQtbWVudS1pdGVtLWhvcml6b250YWwtcGFkZGluZyw4cHgpO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2JhY2tncm91bmQ6dmFyKC0taHQtYmFja2dyb3VuZC1jb2xvciwjZmZmKTtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOnZhcigtLWh0LXRh''@;'; put 'put ''YmxlLXRyYW5zaXRpb24pYmFja2dyb3VuZCBlYXNlLWluLW91dDtib3JkZXItd2lkdGg6MDtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59LmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpmaXJzdC1jaGlsZCwuaGFuZHNvbnRhYmxlLmh0Q29u''@;'; put 'put ''dGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQ6Zmlyc3QtY2hpbGQsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpmaXJzdC1jaGlsZHtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWlubGluZS1lbmQtd2lkdGg6MDtib3JkZXItYm90dG9t''@;'; put 'put ''LXdpZHRoOjA7Ym9yZGVyLWlubGluZS1zdGFydC13aWR0aDowfS5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaW1tZWQsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGltbWVkLC5oYW5kc29udGFibGUuaHRG''@;'; put 'put ''aWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaW1tZWR7Zm9udC1zdHlsZTpub3JtYWw7Y29sb3I6aW5oZXJpdCFpbXBvcnRhbnQ7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0IWltcG9ydGFudH0uaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5''@;'; put 'put ''IHRyIHRkOm5vdCguaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0Q3VzdG9tTWVudVJlbmRlcmVyLC5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZCwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUg''@;'; put 'put ''dGFibGUgdGJvZHkgdHIgdGQuaHRDdXN0b21NZW51UmVuZGVyZXIsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odEN1c3RvbU1lbnVS''@;'; put 'put ''ZW5kZXJlciwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQpOmhvdmVyLC5oYW5kc29udGFibGUuaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpub3QoLmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSB0YWJs''@;'; put 'put ''ZSB0Ym9keSB0ciB0ZC5odEN1c3RvbU1lbnVSZW5kZXJlciwuaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0Q3VzdG9tTWVudVJlbmRlcmVyLC5oYW5k''@;'; put 'put ''c29udGFibGUuaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVkLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRDdXN0b21NZW51UmVuZGVyZXIsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVu''@;'; put 'put ''dSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVkKTpob3ZlciwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkOm5vdCguaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0Q3VzdG9tTWVudVJlbmRlcmVy''@;'; put 'put ''LC5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZCwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRDdXN0b21NZW51UmVuZGVyZXIsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5''@;'; put 'put ''IHRyIHRkLmh0RGlzYWJsZWQsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odEN1c3RvbU1lbnVSZW5kZXJlciwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQpOmhv''@;'; put 'put ''dmVye2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0taHQtbWVudS1pdGVtLWhvdmVyLWNvbG9yKXZhcigtLWh0LW1lbnUtaXRlbS1ob3Zlci1jb2xvci1vcGFjaXR5LDEwMCUpLHRyYW5zcGFyZW50KSFpbXBvcnRhbnR9LmhhbmRzb250YWJsZS5odERy''@;'; put 'put ''b3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpub3QoLmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odEN1c3RvbU1lbnVSZW5kZXJlciwuaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQsLmhhbmRz''@;'; put 'put ''b250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0Q3VzdG9tTWVudVJlbmRlcmVyLC5oYW5kc29udGFibGUuaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVkLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJv''@;'; put 'put ''ZHkgdHIgdGQuaHRDdXN0b21NZW51UmVuZGVyZXIsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVkKS5jdXJyZW50Om5vdChbYXJpYS1leHBhbmRlZD10cnVlXSksLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxl''@;'; put 'put ''IHRib2R5IHRyIHRkOm5vdCguaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0Q3VzdG9tTWVudVJlbmRlcmVyLC5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZCwuaGFuZHNvbnRhYmxlLmh0Q29udGV4''@;'; put 'put ''dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRDdXN0b21NZW51UmVuZGVyZXIsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odEN1c3Rv''@;'; put 'put ''bU1lbnVSZW5kZXJlciwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQpLmN1cnJlbnQ6bm90KFthcmlhLWV4cGFuZGVkPXRydWVdKSwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5''@;'; put 'put ''IHRyIHRkOm5vdCguaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0Q3VzdG9tTWVudVJlbmRlcmVyLC5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZCwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUg''@;'; put 'put ''dGFibGUgdGJvZHkgdHIgdGQuaHRDdXN0b21NZW51UmVuZGVyZXIsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odEN1c3RvbU1lbnVS''@;'; put 'put ''ZW5kZXJlciwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQpLmN1cnJlbnQ6bm90KFthcmlhLWV4cGFuZGVkPXRydWVdKXtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCB2YXIoLS1odC1hY2NlbnQtY29sb3IpfS5oYW5k''@;'; put 'put ''c29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRTdWJtZW51IC5odEl0ZW1XcmFwcGVyLC5oYW5kc29udGFibGUuaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFN1Ym1lbnUgLmh0SXRlbVdyYXBwZXIsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25k''@;'; put 'put ''aXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFN1Ym1lbnUgLmh0SXRlbVdyYXBwZXJ7bWFyZ2luLWlubGluZS1lbmQ6Y2FsYygyKnZhcigtLWh0LWdhcC1zaXplLDRweCkgKyB2YXIoLS1odC1pY29uLXNpemUpKX0uaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5''@;'; put 'put ''IHRyIHRkLmh0U3VibWVudSAuaHRJdGVtV3JhcHBlcjphZnRlciwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRTdWJtZW51IC5odEl0ZW1XcmFwcGVyOmFmdGVyLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkg''@;'; put 'put ''dHIgdGQuaHRTdWJtZW51IC5odEl0ZW1XcmFwcGVyOmFmdGVye2NvbnRlbnQ6IiI7dG9wOjUwJTtyaWdodDpjYWxjKHZhcigtLWh0LW1lbnUtaXRlbS1ob3Jpem9udGFsLXBhZGRpbmcpICsgdmFyKC0taHQtZ2FwLXNpemUpKjIpO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dHJh''@;'; put 'put ''bnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9LmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFNlcGFyYXRvciwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRTZXBhcmF0b3IsLmhhbmRzb250YWJsZS5odEZpbHRlcnND''@;'; put 'put ''b25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFNlcGFyYXRvcntib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1odC1ib3JkZXItY29sb3IpO2N1cnNvcjpkZWZhdWx0O2hlaWdodDowO3BhZGRpbmc6MH0uaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRy''@;'; put 'put ''IHRkLmh0RGlzYWJsZWQsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVke2NvbG9yOnZhcigtLWh0LWRpc2FibGVkLWNv''@;'; put 'put ''bG9yKTtjdXJzb3I6ZGVmYXVsdH0uaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQ6aG92ZXIsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQ6aG92ZXIsLmhhbmRzb250YWJsZS5odEZp''@;'; put 'put ''bHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6dmFyKC0taHQtYmFja2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0taHQtZGlzYWJsZWQtY29sb3IpfS5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkg''@;'; put 'put ''dHIgdGQuaHRIaWRkZW4sLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0SGlkZGVuLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRIaWRkZW57ZGlzcGxheTpub25lfTppcyguaGFuZHNvbnRhYmxl''@;'; put 'put ''Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkOmhhcyguaHRJdGVtV3JhcHBlciAuc2VsZWN0ZWQpLC5oYW5kc29udGFibGUuaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpoYXMoLmh0SXRlbVdyYXBwZXIgLnNlbGVjdGVkKSwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0Nv''@;'; put 'put ''bmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkOmhhcyguaHRJdGVtV3JhcHBlciAuc2VsZWN0ZWQpKXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWh0LW1lbnUtaXRlbS1hY3RpdmUtY29sb3IpdmFyKC0taHQtbWVudS1pdGVtLWFjdGl2ZS1jb2xvci1vcGFj''@;'; put 'put ''aXR5LDEwMCUpLHRyYW5zcGFyZW50KX0uaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVyLC5oYW5kc29udGFibGUuaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZCAuaHRJdGVtV3JhcHBlciwuaGFuZHNvbnRhYmxlLmh0Rmls''@;'; put 'put ''dGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVye21hcmdpbi1pbmxpbmU6Y2FsYygyKnZhcigtLWh0LWdhcC1zaXplLDRweCkpfS5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXI6YmVmb3Jl''@;'; put 'put ''LC5oYW5kc29udGFibGUuaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZCAuaHRJdGVtV3JhcHBlcjpiZWZvcmUsLmhhbmRzb250YWJsZS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCAuaHRJdGVtV3JhcHBlcjpiZWZvcmV7dmVydGljYWwtYWxpZ246dGV4''@;'; put 'put ''dC1ib3R0b207bWFyZ2luLXJpZ2h0OjEycHh9LmhhbmRzb250YWJsZS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCAuaHRJdGVtV3JhcHBlciBzcGFuLnNlbGVjdGVkLC5oYW5kc29udGFibGUuaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZCAuaHRJdGVtV3JhcHBlciBz''@;'; put 'put ''cGFuLnNlbGVjdGVkLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXIgc3Bhbi5zZWxlY3RlZHtmb250LXNpemU6MDtpbnNldDowfS5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQg''@;'; put 'put ''Lmh0SXRlbVdyYXBwZXIgc3Bhbi5zZWxlY3RlZDphZnRlciwuaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXIgc3Bhbi5zZWxlY3RlZDphZnRlciwuaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5''@;'; put 'put ''IHRyIHRkIC5odEl0ZW1XcmFwcGVyIHNwYW4uc2VsZWN0ZWQ6YWZ0ZXJ7Y29udGVudDoiIjt0b3A6NTAlO3JpZ2h0OmNhbGModmFyKC0taHQtbWVudS1pdGVtLWhvcml6b250YWwtcGFkZGluZykgKyB2YXIoLS1odC1nYXAtc2l6ZSkqMik7Y29sb3I6dmFyKC0taHQtYWNjZW50LWNvbG9yKTtk''@;'; put 'put ''aXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfS5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQgZGl2IHNwYW4uc2VsZWN0ZWQsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRy''@;'; put 'put ''IHRkIGRpdiBzcGFuLnNlbGVjdGVkLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQgZGl2IHNwYW4uc2VsZWN0ZWR7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQtaW5saW5lLWVuZDowfS5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFi''@;'; put 'put ''bGUgdGJvZHkgdHIgdGQgLmh0VUlCdXR0b24sLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odFVJQnV0dG9uLC5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0VUlCdXR0b257d2lkdGg6Y2FsYyg1''@;'; put 'put ''MCUgLSB2YXIoLS1odC1nYXAtc2l6ZSkpfS5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0VUlCdXR0b24gaW5wdXQsLmhhbmRzb250YWJsZS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odFVJQnV0dG9uIGlucHV0LC5oYW5kc29udGFi''@;'; put 'put ''bGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0VUlCdXR0b24gaW5wdXR7d2lkdGg6MTAwJX0uaGFuZHNvbnRhYmxlIC5odFVJQ2xlYXJBbGwgYSwuaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0QWxsIGF7cGFkZGluZzp2YXIoLS1odC1nYXAtc2l6ZSk7dGV4''@;'; put 'put ''dC1kZWNvcmF0aW9uOm5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmhhbmRzb250YWJsZSAuaHRVSU11bHRpcGxlU2VsZWN0IC5odF9tYXN0ZXIgLnd0SG9sZGVye2JhY2tncm91bmQ6MCAwO2JvcmRlci1yYWRpdXM6MCFpbXBvcnRhbnQ7b3ZlcmZsb3cteTpzY3JvbGwhaW1wb3J0YW50fS5o''@;'; put 'put ''YW5kc29udGFibGUgLmh0VUlNdWx0aXBsZVNlbGVjdCAuaHRfbWFzdGVyIC53dEhvbGRlciAuaHRDb3Jle2JveC1zaGFkb3c6bm9uZX1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0U3VibWVudSAuaHRJdGVtV3JhcHBlcjphZnRlcixb''@;'; put 'put ''ZGlyPXJ0bF0uaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRTdWJtZW51IC5odEl0ZW1XcmFwcGVyOmFmdGVyLFtkaXI9cnRsXS5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRTdWJtZW51IC5odEl0''@;'; put 'put ''ZW1XcmFwcGVyOmFmdGVye2xlZnQ6Y2FsYyg0KnZhcigtLWh0LWdhcC1zaXplKSk7cmlnaHQ6YXV0bzt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKXJvdGF0ZSgxODBkZWcpfVtkaXI9cnRsXS5oYW5kc29udGFibGUuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdy''@;'; put 'put ''YXBwZXIgc3Bhbi5zZWxlY3RlZDphZnRlcixbZGlyPXJ0bF0uaGFuZHNvbnRhYmxlLmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXIgc3Bhbi5zZWxlY3RlZDphZnRlcixbZGlyPXJ0bF0uaGFuZHNvbnRhYmxlLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRh''@;'; put 'put ''YmxlIHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVyIHNwYW4uc2VsZWN0ZWQ6YWZ0ZXJ7bGVmdDpjYWxjKDQqdmFyKC0taHQtZ2FwLXNpemUpKTtyaWdodDphdXRvfS5oYW5kc29udGFibGUuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnU6bm90KC5odEdob3N0VGFibGUpe3otaW5kZXg6MTA3MH0u''@;'; put 'put ''aGFuZHNvbnRhYmxlIC5odF9tYXN0ZXIgdGFibGUgdGQuaHRDdXN0b21NZW51UmVuZGVyZXJ7Y3Vyc29yOmF1dG99LmhhbmRzb250YWJsZSAuaHRfbWFzdGVyIHRhYmxlIHRkLmh0Q3VzdG9tTWVudVJlbmRlcmVyLmh0RmlsdGVyc01lbnVBY3Rpb25CYXJ7cGFkZGluZy10b3A6Y2FsYyh2YXIo''@;'; put 'put ''LS1odC1tZW51LWl0ZW0tdmVydGljYWwtcGFkZGluZyw0cHgpKjIpfS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVMYWJlbHtmb250LXNpemU6dmFyKC0taHQtZm9udC1zaXplLXNtYWxsKTtsaW5lLWhlaWdodDp2YXIoLS1odC1saW5lLWhlaWdodC1zbWFsbCk7Zm9udC13ZWlnaHQ6dmFy''@;'; put 'put ''KC0taHQtZm9udC13ZWlnaHQpO21hcmdpbi1ib3R0b206Y2FsYyh2YXIoLS1odC1nYXAtc2l6ZSwycHgpKjIpfS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVMYWJlbDplbXB0eXtkaXNwbGF5Om5vbmV9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudUNvbmRpdGlvbntwYWRkaW5nLXRv''@;'; put 'put ''cDpjYWxjKHZhcigtLWh0LWdhcC1zaXplLDJweCkqMykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVDb25kaXRpb24gLmJvcmRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1odC1ib3JkZXItY29sb3IpIWlt''@;'; put 'put ''cG9ydGFudH0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51Q29uZGl0aW9uIC5odFVJSW5wdXR7bWFyZ2luLXRvcDpjYWxjKHZhcigtLWh0LWdhcC1zaXplLDJweCkqMil9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudVZhbHVle3BhZGRpbmctdG9wOmNhbGModmFyKC0taHQtZ2FwLXNp''@;'; put 'put ''emUsMnB4KSozKSFpbXBvcnRhbnQ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0taHQtYm9yZGVyLWNvbG9yKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudU9wZXJhdG9yc3twYWRkaW5nLXRvcDpjYWxjKHZhcigt''@;'; put 'put ''LWh0LWdhcC1zaXplLDJweCkqMikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3Rpb25Db250cm9sc3ttYXJnaW46MCBjYWxjKHZhcigtLWh0LWdhcC1zaXplLDJweCkqLTEpO3BhZGRpbmctdG9wOmNhbGModmFyKC0taHQtZ2Fw''@;'; put 'put ''LXNpemUsMnB4KSoyKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0taHQtZ2FwLXNpemUsMnB4KSFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAuaHRVSU11bHRpcGxlU2VsZWN0SG90ey0taHQtY2VsbC1ob3Jpem9udGFsLXBhZGRpbmc6Y2FsYyh2YXIoLS1odC1tZW51LWl0ZW0taG9y''@;'; put 'put ''aXpvbnRhbC1wYWRkaW5nLDJweCkgKyB2YXIoLS1odC1nYXAtc2l6ZSwycHgpKjIpO3dpZHRoOmNhbGMoMTAwJSArIHZhcigtLWh0LW1lbnUtaXRlbS1ob3Jpem9udGFsLXBhZGRpbmcsMnB4KSoyICsgdmFyKC0taHQtZ2FwLXNpemUsMnB4KSo0KTttYXJnaW46MCBjYWxjKCh2YXIoLS1odC1t''@;'; put 'put ''ZW51LWl0ZW0taG9yaXpvbnRhbC1wYWRkaW5nLDJweCkgKyB2YXIoLS1odC1nYXAtc2l6ZSwycHgpKjIpKi0xKTtvdmVyZmxvdzppbml0aWFsIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIC5odFVJTXVsdGlwbGVTZWxlY3RIb3Q6YmVmb3Jle2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1odC1ib3JkZXItY29sb3IpO3dpZHRoOjEwMCU7aGVpZ2h0OjFweDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMXB4O2xlZnQ6MH0uaGFuZHNvbnRhYmxlIC5odFVJTXVsdGlwbGVTZWxlY3RIb3QgLnd0SG9sZGVye2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRk''@;'; put 'put ''aW5nOjA7b3ZlcmZsb3cteDpoaWRkZW59LmhhbmRzb250YWJsZSAuaHRVSU11bHRpcGxlU2VsZWN0SG90IC53dEhvbGRlciAud3RTcHJlYWRlcntwYWRkaW5nOmNhbGModmFyKC0taHQtZ2FwLXNpemUpKjIpMH0uaGFuZHNvbnRhYmxlIC5odFVJTXVsdGlwbGVTZWxlY3RIb3QgLnd0SG9sZGVy''@;'; put 'put ''IHRke3BhZGRpbmc6NHB4IHZhcigtLWh0LWNlbGwtaG9yaXpvbnRhbC1wYWRkaW5nKTtoZWlnaHQ6YXV0byFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAuaHRVSUNsZWFyQWxsLC5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RBbGx7bWFyZ2luLXJpZ2h0OnZhcigtLWh0LWdhcC1zaXplLDRweCk7''@;'; put 'put ''bWFyZ2luLWJvdHRvbTp2YXIoLS1odC1nYXAtc2l6ZSw0cHgpO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5oYW5kc29udGFibGUgLmh0VUlDbGVhckFsbCBhLC5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RBbGwgYXtmb250LXNpemU6dmFyKC0taHQtZm9udC1zaXplKTtsaW5lLWhlaWdodDp2YXIo''@;'; put 'put ''LS1odC1saW5lLWhlaWdodCk7Y29sb3I6dmFyKC0taHQtbGluay1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1odC1idXR0b24tYm9yZGVyLXJhZGl1cyl9LmhhbmRzb250YWJsZSAuaHRVSUNsZWFyQWxsIGE6aG92ZXIsLmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdEFsbCBhOmhvdmVye2Nv''@;'; put 'put ''bG9yOnZhcigtLWh0LWxpbmstaG92ZXItY29sb3IpfS5oYW5kc29udGFibGUgLmh0VUlDbGVhckFsbCBhOmZvY3VzLC5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RBbGwgYTpmb2N1c3tvdXRsaW5lOjFweCBzb2xpZCB2YXIoLS1odC1saW5rLWhvdmVyLWNvbG9yKX0uaGFuZHNvbnRhYmxlIC5o''@;'; put 'put ''dFVJTXVsdGlwbGVTZWxlY3QgLmh0X21hc3RlciAud3RIb2xkZXJ7b3ZlcmZsb3c6YXV0b30uaGFuZHNvbnRhYmxlIC5odFVJTXVsdGlwbGVTZWxlY3QgLmh0X21hc3RlciAud3RIb2xkZXIgLnd0SGlkZXIsLmhhbmRzb250YWJsZSAuaHRVSU11bHRpcGxlU2VsZWN0IC5odF9tYXN0ZXIgLnd0''@;'; put 'put ''SG9sZGVyIC5odENvcmUsLmhhbmRzb250YWJsZSAuaHRVSU11bHRpcGxlU2VsZWN0IC5odF9tYXN0ZXIgLnd0SG9sZGVyIHRyLC5oYW5kc29udGFibGUgLmh0VUlNdWx0aXBsZVNlbGVjdCAuaHRfbWFzdGVyIC53dEhvbGRlciB0ZHtiYWNrZ3JvdW5kOjAgMH0uaGFuZHNvbnRhYmxlIC5odFVJ''@;'; put 'put ''SW5wdXQuaHRVSUJ1dHRvbntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9ja30uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbk9Le21hcmdpbi1pbmxpbmUtc3RhcnQ6MDttYXJnaW4taW5saW5lLWVuZDpjYWxjKDIqdmFyKC0taHQtZ2FwLXNpemUsMnB4KSl9Lmhh''@;'; put 'put ''bmRzb250YWJsZSAuaHRDb21tZW50Q2VsbHtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIC5odENvbW1lbnRDZWxsOmFmdGVye2NvbnRlbnQ6IiI7dG9wOjA7Ym9yZGVyLWlubGluZS1zdGFydDp2YXIoLS1odC1jb21tZW50cy1pbmRpY2F0b3Itc2l6ZSw0cHgpc29saWQgIzAwMDA7''@;'; put 'put ''Ym9yZGVyLWlubGluZS1lbmQ6bm9uZTtib3JkZXItdG9wOnZhcigtLWh0LWNvbW1lbnRzLWluZGljYXRvci1zaXplLDRweClzb2xpZCB2YXIoLS1odC1jb21tZW50cy1pbmRpY2F0b3ItY29sb3IsIzFhNDJlOCk7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtpbnNldC1pbmxpbmUt''@;'; put 'put ''c3RhcnQ6dW5zZXQ7aW5zZXQtaW5saW5lLWVuZDowfS5odENvbW1lbnRzQ29udGFpbmVyIC5odENvbW1lbnRze3otaW5kZXg6MTA1OTtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGV9Lmh0Q29tbWVudHNDb250YWluZXIgLmh0Q29tbWVudFRleHRBcmVhe2ZvbnQtZmFtaWx5OnZhcigt''@;'; put 'put ''LWh0LWZvbnQtZmFtaWx5KSwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwiU2Vnb2UgVUkiLHNhbnMtc2VyaWY7Ym94LXNoYWRvdzp2YXIoLS1odC1tZW51LXNoYWRvdy14LDApIHZhcigtLWh0LW1lbnUtc2hhZG93LXksMCkgdmFyKC0taHQtbWVudS1zaGFkb3ctYmx1ciw4cHgp''@;'; put 'put ''IGNvbG9yLW1peChpbiBzcmdiLHZhcigtLWh0LW1lbnUtc2hhZG93LWNvbG9yLCMwMDApdmFyKC0taHQtbWVudS1zaGFkb3ctb3BhY2l0eSwxMDAlKSx0cmFuc3BhcmVudCk7d2lkdGg6MjQwcHg7aGVpZ2h0Ojg4cHg7Zm9udC1zaXplOnZhcigtLWh0LWZvbnQtc2l6ZSk7bGluZS1oZWlnaHQ6''@;'; put 'put ''dmFyKC0taHQtbGluZS1oZWlnaHQpO2ZvbnQtd2VpZ2h0OnZhcigtLWh0LWZvbnQtd2VpZ2h0KTtwYWRkaW5nOnZhcigtLWh0LWNvbW1lbnRzLXRleHRhcmVhLXZlcnRpY2FsLXBhZGRpbmcpdmFyKC0taHQtY29tbWVudHMtdGV4dGFyZWEtaG9yaXpvbnRhbC1wYWRkaW5nKTtib3JkZXI6dmFy''@;'; put 'put ''KC0taHQtY29tbWVudHMtdGV4dGFyZWEtYm9yZGVyLXdpZHRoLDFweClzb2xpZCB2YXIoLS1odC1jb21tZW50cy10ZXh0YXJlYS1ib3JkZXItY29sb3IsdHJhbnNwYXJlbnQpO2JvcmRlci1pbmxpbmUtc3RhcnQ6dmFyKC0taHQtY29tbWVudHMtdGV4dGFyZWEtYm9yZGVyLXdpZHRoLDFweClz''@;'; put 'put ''b2xpZCB2YXIoLS1odC1jb21tZW50cy10ZXh0YXJlYS1ib3JkZXItY29sb3IsIzFhNDJlOCk7Y29sb3I6dmFyKC0taHQtY29tbWVudHMtdGV4dGFyZWEtZm9yZWdyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1jb21tZW50cy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''LCNmZmYpO2JveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MCAtMXB4O291dGxpbmU6MCFpbXBvcnRhbnR9Lmh0Q29tbWVudHNDb250YWluZXIgLmh0Q29tbWVudFRleHRBcmVhOmZvY3Vze2JvcmRlcjp2YXIoLS1odC1jb21tZW50cy10ZXh0YXJl''@;'; put 'put ''YS1mb2N1cy1ib3JkZXItd2lkdGgsMXB4KXNvbGlkIHZhcigtLWh0LWNvbW1lbnRzLXRleHRhcmVhLWZvY3VzLWJvcmRlci1jb2xvciwjMWE0MmU4KTtjb2xvcjp2YXIoLS1odC1jb21tZW50cy10ZXh0YXJlYS1mb2N1cy1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigt''@;'; put 'put ''LWh0LWNvbW1lbnRzLXRleHRhcmVhLWZvY3VzLWJhY2tncm91bmQtY29sb3IsI2ZmZil9Lmh0Qm9yZGVycyAud3RCb3JkZXIuaHQtYm9yZGVyLXN0eWxlLWRhc2hlZC12ZXJ0aWNhbHtiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHZhcigtLWh0''@;'; put 'put ''LWN1c3RvbS1ib3JkZXItY29sb3IpMCA1cHgsdHJhbnNwYXJlbnQgMCAxMHB4KX0uaHRCb3JkZXJzIC53dEJvcmRlci5odC1ib3JkZXItc3R5bGUtZGFzaGVkLWhvcml6b250YWx7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLWh0LWN1''@;'; put 'put ''c3RvbS1ib3JkZXItY29sb3IpMCA1cHgsdHJhbnNwYXJlbnQgMCAxMHB4KX0uaHRCb3JkZXJzIC53dEJvcmRlci5odC1ib3JkZXItc3R5bGUtZG90dGVkLWhvcml6b250YWx7YmFja2dyb3VuZC1pbWFnZTpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlLHZhcigtLWh0LWN1c3RvbS1ib3JkZXItY29s''@;'; put 'put ''b3IpY2FsYyh2YXIoLS1odC1jdXN0b20tYm9yZGVyLXNpemUpLzIpLHRyYW5zcGFyZW50IDApO2JhY2tncm91bmQtc2l6ZTpjYWxjKHZhcigtLWh0LWN1c3RvbS1ib3JkZXItc2l6ZSkqMil2YXIoLS1odC1jdXN0b20tYm9yZGVyLXNpemUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5o''@;'; put 'put ''dEJvcmRlcnMgLnd0Qm9yZGVyLmh0LWJvcmRlci1zdHlsZS1kb3R0ZWQtdmVydGljYWx7YmFja2dyb3VuZC1pbWFnZTpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlLHZhcigtLWh0LWN1c3RvbS1ib3JkZXItY29sb3IpY2FsYyh2YXIoLS1odC1jdXN0b20tYm9yZGVyLXNpemUpLzIpLHRyYW5zcGFy''@;'; put 'put ''ZW50IDApO2JhY2tncm91bmQtc2l6ZTp2YXIoLS1odC1jdXN0b20tYm9yZGVyLXNpemUpY2FsYyh2YXIoLS1odC1jdXN0b20tYm9yZGVyLXNpemUpKjIpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC15fS5oYW5kc29udGFibGUgLmNvbHVtblNvcnRpbmc6bm90KC5pbmRpY2F0b3JEaXNhYmxl''@;'; put 'put ''ZCl7cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZSAuY29sdW1uU29ydGluZzpub3QoLmluZGljYXRvckRpc2FibGVkKS5zb3J0QWN0aW9uLmFzY2VuZGluZywuaGFuZHNvbnRhYmxlIC5jb2x1bW5Tb3J0aW5nOm5vdCguaW5kaWNhdG9yRGlzYWJsZWQpLnNvcnRBY3Rpb24uZGVzY2Vu''@;'; put 'put ''ZGluZ3twYWRkaW5nLWlubGluZS1lbmQ6Y2FsYyh2YXIoLS1odC1pY29uLXNpemUsMTZweCkgKyAycHgpfS5oYW5kc29udGFibGUgLmNvbHVtblNvcnRpbmc6bm90KC5pbmRpY2F0b3JEaXNhYmxlZCkuc29ydEFjdGlvbjpob3ZlcntjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246bm9u''@;'; put 'put ''ZX0uaGFuZHNvbnRhYmxlIC5jb2x1bW5Tb3J0aW5nOm5vdCguaW5kaWNhdG9yRGlzYWJsZWQpLnNvcnRBY3Rpb246YmVmb3Jle2NvbnRlbnQ6IiI7d2lkdGg6dmFyKC0taHQtaWNvbi1zaXplLDE2cHgpO3RleHQtYWxpZ246cmlnaHQ7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0''@;'; put 'put ''b3A6NTAlO3JpZ2h0OjJweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0uaGFuZHNvbnRhYmxlIC5odFJpZ2h0IC5jb2x1bW5Tb3J0aW5nLnNvcnRBY3Rpb24uYXNjZW5kaW5nLC5oYW5kc29udGFibGUgLmh0UmlnaHQgLmNvbHVtblNvcnRpbmcuc29ydEFjdGlvbi5kZXNjZW5kaW5ne3Bh''@;'; put 'put ''ZGRpbmctaW5saW5lLXN0YXJ0OmNhbGModmFyKC0taHQtaWNvbi1zaXplLDE2cHgpICsgMnB4KTtwYWRkaW5nLWlubGluZS1lbmQ6MH0uaGFuZHNvbnRhYmxlIC5odFJpZ2h0IC5jb2x1bW5Tb3J0aW5nLnNvcnRBY3Rpb246YmVmb3JlLFtkaXI9cnRsXSAuaGFuZHNvbnRhYmxlIC5jb2x1bW5T''@;'; put 'put ''b3J0aW5nLnNvcnRBY3Rpb246YmVmb3Jle3RleHQtYWxpZ246bGVmdDtsZWZ0OjJweDtyaWdodDphdXRvfVtkaXI9cnRsXSAuaGFuZHNvbnRhYmxlIC5odFJpZ2h0IC5jb2x1bW5Tb3J0aW5nLnNvcnRBY3Rpb24uYXNjZW5kaW5nLFtkaXI9cnRsXSAuaGFuZHNvbnRhYmxlIC5odFJpZ2h0IC5j''@;'; put 'put ''b2x1bW5Tb3J0aW5nLnNvcnRBY3Rpb24uZGVzY2VuZGluZ3twYWRkaW5nLWlubGluZS1zdGFydDowO3BhZGRpbmctaW5saW5lLWVuZDpjYWxjKHZhcigtLWh0LWljb24tc2l6ZSwxNnB4KSArIDJweCl9W2Rpcj1ydGxdIC5oYW5kc29udGFibGUgLmh0TGVmdCAuY29sdW1uU29ydGluZy5zb3J0''@;'; put 'put ''QWN0aW9uLmFzY2VuZGluZyxbZGlyPXJ0bF0gLmhhbmRzb250YWJsZSAuaHRMZWZ0IC5jb2x1bW5Tb3J0aW5nLnNvcnRBY3Rpb24uZGVzY2VuZGluZ3twYWRkaW5nLWlubGluZS1zdGFydDpjYWxjKHZhcigtLWh0LWljb24tc2l6ZSwxNnB4KSArIDJweCk7cGFkZGluZy1pbmxpbmUtZW5kOjB9''@;'; put 'put ''W2Rpcj1ydGxdIC5oYW5kc29udGFibGUgLmh0TGVmdCAuY29sdW1uU29ydGluZy5zb3J0QWN0aW9uOmJlZm9yZXt0ZXh0LWFsaWduOnJpZ2h0O2xlZnQ6YXV0bztyaWdodDoycHh9Lmh0R2hvc3RUYWJsZSAuaHRDb3JlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmc6bm90KC5pbmRpY2F0''@;'; put 'put ''b3JEaXNhYmxlZCk6YmVmb3Jle2NvbnRlbnQ6IioiO3BhZGRpbmctaW5saW5lLWVuZDpjYWxjKHZhcigtLWh0LWljb24tc2l6ZSwxNnB4KSArIDJweCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZSAuY29sSGVhZGVyLmNvbHVtblNvcnRpbmc6''@;'; put 'put ''YWZ0ZXJ7Y29udGVudDoiIjt0ZXh0LWFsaWduOnJpZ2h0O3dpZHRoOjhweDttYXJnaW4tdG9wOjRweDtmb250LXNpemU6OHB4O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfS5oYW5kc29udGFibGUgLmNv''@;'; put 'put ''bEhlYWRlci5jb2x1bW5Tb3J0aW5nW2NsYXNzXj1zb3J0LV06YWZ0ZXIsLmhhbmRzb250YWJsZSAuY29sSGVhZGVyLmNvbHVtblNvcnRpbmdbY2xhc3MqPSIgc29ydC0iXTphZnRlcntjb250ZW50OiIrIn0uaGFuZHNvbnRhYmxlIC5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTE6YWZ0''@;'; put 'put ''ZXJ7Y29udGVudDoiMSJ9LmhhbmRzb250YWJsZSAuY29sSGVhZGVyLmNvbHVtblNvcnRpbmcuc29ydC0yOmFmdGVye2NvbnRlbnQ6IjIifS5oYW5kc29udGFibGUgLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtMzphZnRlcntjb250ZW50OiIzIn0uaGFuZHNvbnRhYmxlIC5jb2xIZWFk''@;'; put 'put ''ZXIuY29sdW1uU29ydGluZy5zb3J0LTQ6YWZ0ZXJ7Y29udGVudDoiNCJ9LmhhbmRzb250YWJsZSAuY29sSGVhZGVyLmNvbHVtblNvcnRpbmcuc29ydC01OmFmdGVye2NvbnRlbnQ6IjUifS5oYW5kc29udGFibGUgLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtNjphZnRlcntjb250ZW50''@;'; put 'put ''OiI2In0uaGFuZHNvbnRhYmxlIC5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTc6YWZ0ZXJ7Y29udGVudDoiNyJ9LmhhbmRzb250YWJsZSAuaHRSaWdodCAuY29sSGVhZGVyLmNvbHVtblNvcnRpbmc6YWZ0ZXIsW2Rpcj1ydGxdIC5oYW5kc29udGFibGUgLmNvbEhlYWRlci5jb2x1bW5T''@;'; put 'put ''b3J0aW5nOmFmdGVye3RleHQtYWxpZ246bGVmdDtsZWZ0OjA7cmlnaHQ6YXV0b31bZGlyPXJ0bF0gLmhhbmRzb250YWJsZSAuaHRMZWZ0IC5jb2xIZWFkZXIuY29sdW1uU29ydGluZzphZnRlcnt0ZXh0LWFsaWduOnJpZ2h0O2xlZnQ6YXV0bztyaWdodDowfS5odEdob3N0VGFibGUgdGggZGl2''@;'; put 'put ''OmhhcyguY2hhbmdlVHlwZSkgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZzpub3QoLmluZGljYXRvckRpc2FibGVkKXtwYWRkaW5nLWlubGluZS1lbmQ6dmFyKC0taHQtZ2FwLXNpemUpfS5oYW5kc29udGFibGUgLmh0Um93SGVhZGVycyAuaHRfbWFzdGVyLmlubmVyQm9yZGVySW5saW5l''@;'; put 'put ''U3RhcnR+Lmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyIHRoOm50aC1jaGlsZCgyKSwuaGFuZHNvbnRhYmxlIC5odFJvd0hlYWRlcnMgLmh0X21hc3Rlci5pbm5lckJvcmRlcklubGluZVN0YXJ0fi5odF9jbG9uZV9pbmxpbmVfc3RhcnQgdGQ6Zmlyc3Qtb2YtdHlwZXtib3JkZXIt''@;'; put 'put ''bGVmdDowfS5oYW5kc29udGFibGUgLmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0e2JveC1zaGFkb3c6bm9uZX0uaGFuZHNvbnRhYmxlIC5tYW51YWxDb2x1bW5SZXNpemVye2N1cnNvcjpjb2wtcmVzaXplO29wYWNpdHk6MDt6LWluZGV4''@;'; put 'put ''OjIxMDtiYWNrZ3JvdW5kOjAgMDt3aWR0aDoxMHB4O21hcmdpbjowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowfS5oYW5kc29udGFibGUgLm1hbnVhbENvbHVtblJlc2l6ZXI6YmVmb3JlLC5oYW5kc29udGFibGUgLm1hbnVhbENvbHVtblJlc2l6ZXI6YWZ0ZXJ7Y29udGVudDoiIjtiYWNrZ3Jv''@;'; put 'put ''dW5kOnZhcigtLWh0LXJlc2l6ZS1pbmRpY2F0b3ItY29sb3IpO2JvcmRlci1yYWRpdXM6MnB4O3dpZHRoOjJweDtoZWlnaHQ6Y2FsYygxMDAlIC0gMTJweCk7bWF4LWhlaWdodDoxNnB4O21hcmdpbi10b3A6LjVweDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVm''@;'; put 'put ''dDoxcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9LmhhbmRzb250YWJsZSAubWFudWFsQ29sdW1uUmVzaXplcjphZnRlcntsZWZ0OmF1dG87cmlnaHQ6MH0uaGFuZHNvbnRhYmxlIC5tYW51YWxDb2x1bW5SZXNpemVyOmhvdmVyLC5oYW5kc29udGFibGUgLm1hbnVhbENvbHVtblJlc2l6''@;'; put 'put ''ZXIuYWN0aXZle29wYWNpdHk6MX0uaGFuZHNvbnRhYmxlIC5tYW51YWxDb2x1bW5SZXNpemVyR3VpZGV7aW5zZXQtaW5saW5lLWVuZDp1bnNldDt3aWR0aDowO2JvcmRlci1pbmxpbmUtZW5kOjFweCBzb2xpZCB2YXIoLS1odC1hY2NlbnQtY29sb3IpO2JvcmRlci1pbmxpbmUtc3RhcnQ6bm9u''@;'; put 'put ''ZTttYXJnaW4taW5saW5lLXN0YXJ0OjVweDttYXJnaW4taW5saW5lLWVuZDp1bnNldDtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjB9LmhhbmRzb250YWJsZSAubWFudWFsQ29sdW1uUmVzaXplckd1aWRlLmFjdGl2ZXt6LWluZGV4OjIwOTtkaXNwbGF5OmJsb2NrfS5oYW5k''@;'; put 'put ''c29udGFibGUgLm1hbnVhbFJvd1Jlc2l6ZXJ7ei1pbmRleDoyMTA7Y3Vyc29yOnJvdy1yZXNpemU7b3BhY2l0eTowO2JhY2tncm91bmQ6MCAwO2hlaWdodDoxMHB4O21hcmdpbjowO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MH0uaGFuZHNvbnRhYmxlIC5tYW51YWxSb3dSZXNpemVyOmJlZm9y''@;'; put 'put ''ZSwuaGFuZHNvbnRhYmxlIC5tYW51YWxSb3dSZXNpemVyOmFmdGVye2NvbnRlbnQ6IiI7YmFja2dyb3VuZDp2YXIoLS1odC1yZXNpemUtaW5kaWNhdG9yLWNvbG9yKTtib3JkZXItcmFkaXVzOjJweDt3aWR0aDpjYWxjKDEwMCUgLSAxMnB4KTttYXgtd2lkdGg6MTZweDtoZWlnaHQ6MnB4O2Rp''@;'; put 'put ''c3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjFweDtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUpfS5oYW5kc29udGFibGUgLm1hbnVhbFJvd1Jlc2l6ZXI6YWZ0ZXJ7dG9wOmF1dG87Ym90dG9tOjB9LmhhbmRzb250YWJsZSAubWFudWFsUm93UmVzaXplcjpob3Zl''@;'; put 'put ''ciwuaGFuZHNvbnRhYmxlIC5tYW51YWxSb3dSZXNpemVyLmFjdGl2ZXtvcGFjaXR5OjF9LmhhbmRzb250YWJsZSAubWFudWFsUm93UmVzaXplckd1aWRle2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWh0LWFjY2VudC1jb2xvcik7Ym9yZGVyLXRvcDpub25lO2hlaWdodDowO21hcmdp''@;'; put 'put ''bi10b3A6NXB4O2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjB9LmhhbmRzb250YWJsZSAubWFudWFsUm93UmVzaXplckd1aWRlLmFjdGl2ZXt6LWluZGV4OjIwOTtkaXNwbGF5OmJsb2NrfS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3Mq''@;'; put 'put ''PWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdOm5vdChbY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsXSk6YmVmb3Jle29wYWNpdHk6MH0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1l''@;'; put 'put ''cmdlZENlbGwtbXVsdGlwbGVdOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtMF06YmVmb3Jle29wYWNpdHk6LjE0fS5oYW5kc29udGFibGUgdGJvZHkgdGRb''@;'; put 'put ''cm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC0xXTpiZWZvcmV7b3BhY2l0eTouMjF9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1''@;'; put 'put ''bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTJdOmJlZm9yZXtvcGFjaXR5Oi4yOH0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtM106YmVmb3Jle29wYWNpdHk6LjM1fS5oYW5k''@;'; put 'put ''c29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC00XTpiZWZvcmV7b3BhY2l0eTouNDJ9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhp''@;'; put 'put ''Z2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTVdOmJlZm9yZXtvcGFjaXR5Oi40OX0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtNl06YmVmb3Jl''@;'; put 'put ''e29wYWNpdHk6LjU2fS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC03XTpiZWZvcmV7b3BhY2l0eTouNjN9LmhhbmRzb250YWJsZSAuaHRfX21hbnVhbENvbHVtbk1vdmUu''@;'; put 'put ''YWZ0ZXItc2VsZWN0aW9uLS1jb2x1bW5zIHRoZWFkIHRoLmh0X19oaWdobGlnaHQsLmhhbmRzb250YWJsZS5odF9fbWFudWFsQ29sdW1uTW92ZS5hZnRlci1zZWxlY3Rpb24tLWNvbHVtbnMgdGhlYWQgdGguaHRfX2hpZ2hsaWdodHtjdXJzb3I6bW92ZTtjdXJzb3I6Z3JhYn0uaGFuZHNvbnRh''@;'; put 'put ''YmxlIC5odF9fbWFudWFsQ29sdW1uTW92ZS5vbi1tb3ZpbmctLWNvbHVtbnMgKiwuaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsQ29sdW1uTW92ZS5vbi1tb3ZpbmctLWNvbHVtbnMgdGhlYWQgdGguaHRfX2hpZ2hsaWdodCwuaGFuZHNvbnRhYmxlLmh0X19tYW51YWxDb2x1bW5Nb3ZlLm9uLW1v''@;'; put 'put ''dmluZy0tY29sdW1ucyAqLC5oYW5kc29udGFibGUuaHRfX21hbnVhbENvbHVtbk1vdmUub24tbW92aW5nLS1jb2x1bW5zIHRoZWFkIHRoLmh0X19oaWdobGlnaHR7Y3Vyc29yOm1vdmU7Y3Vyc29yOmdyYWJiaW5nfS5oYW5kc29udGFibGUgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLm9uLW1vdmlu''@;'; put 'put ''Zy0tY29sdW1ucyAubWFudWFsQ29sdW1uUmVzaXplciwuaGFuZHNvbnRhYmxlLmh0X19tYW51YWxDb2x1bW5Nb3ZlLm9uLW1vdmluZy0tY29sdW1ucyAubWFudWFsQ29sdW1uUmVzaXplcntkaXNwbGF5Om5vbmV9LmhhbmRzb250YWJsZSAuaHRfX21hbnVhbENvbHVtbk1vdmUtLWd1aWRlbGlu''@;'; put 'put ''ZSwuaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsQ29sdW1uTW92ZS0tYmFja2xpZ2h0LC5oYW5kc29udGFibGUuaHRfX21hbnVhbENvbHVtbk1vdmUtLWd1aWRlbGluZSwuaGFuZHNvbnRhYmxlLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1iYWNrbGlnaHR7aGVpZ2h0OjEwMCU7ZGlzcGxheTpub25l''@;'; put 'put ''O3Bvc2l0aW9uOmFic29sdXRlfS5oYW5kc29udGFibGUgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1ndWlkZWxpbmUsLmhhbmRzb250YWJsZS5odF9fbWFudWFsQ29sdW1uTW92ZS0tZ3VpZGVsaW5le3otaW5kZXg6MjA1O2JhY2tncm91bmQ6dmFyKC0taHQtbW92ZS1pbmRpY2F0b3ItY29sb3Is''@;'; put 'put ''IzFhNDJlOCk7d2lkdGg6MXB4O21hcmdpbi1pbmxpbmU6LS41cHggMDt0b3A6MH0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsQ29sdW1uTW92ZS0tYmFja2xpZ2h0LC5oYW5kc29udGFibGUuaHRfX21hbnVhbENvbHVtbk1vdmUtLWJhY2tsaWdodHt6LWluZGV4OjIwNTtwb2ludGVyLWV2ZW50''@;'; put 'put ''czpub25lO2JhY2tncm91bmQ6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0taHQtbW92ZS1iYWNrbGlnaHQtY29sb3IpdmFyKC0taHQtbW92ZS1iYWNrbGlnaHQtb3BhY2l0eSwxMDAlKSx0cmFuc3BhcmVudCk7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLm9uLW1vdmluZy0tY29sdW1ucy5z''@;'; put 'put ''aG93LXVpIC5odF9fbWFudWFsQ29sdW1uTW92ZS0tZ3VpZGVsaW5lLC5oYW5kc29udGFibGUgLm9uLW1vdmluZy0tY29sdW1ucyAuaHRfX21hbnVhbENvbHVtbk1vdmUtLWJhY2tsaWdodCwuaGFuZHNvbnRhYmxlLm9uLW1vdmluZy0tY29sdW1ucy5zaG93LXVpIC5odF9fbWFudWFsQ29sdW1u''@;'; put 'put ''TW92ZS0tZ3VpZGVsaW5lLC5oYW5kc29udGFibGUub24tbW92aW5nLS1jb2x1bW5zIC5odF9fbWFudWFsQ29sdW1uTW92ZS0tYmFja2xpZ2h0e2Rpc3BsYXk6YmxvY2t9LmhhbmRzb250YWJsZSAud3RIaWRlcntwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsUm93''@;'; put 'put ''TW92ZS5hZnRlci1zZWxlY3Rpb24tLXJvd3MgdGJvZHkgdGguaHRfX2hpZ2hsaWdodCwuaGFuZHNvbnRhYmxlLmh0X19tYW51YWxSb3dNb3ZlLmFmdGVyLXNlbGVjdGlvbi0tcm93cyB0Ym9keSB0aC5odF9faGlnaGxpZ2h0e2N1cnNvcjptb3ZlO2N1cnNvcjpncmFifS5oYW5kc29udGFibGUg''@;'; put 'put ''Lmh0X19tYW51YWxSb3dNb3ZlLm9uLW1vdmluZy0tcm93cyAqLC5oYW5kc29udGFibGUgLmh0X19tYW51YWxSb3dNb3ZlLm9uLW1vdmluZy0tcm93cyB0Ym9keSB0aC5odF9faGlnaGxpZ2h0LC5oYW5kc29udGFibGUuaHRfX21hbnVhbFJvd01vdmUub24tbW92aW5nLS1yb3dzICosLmhhbmRz''@;'; put 'put ''b250YWJsZS5odF9fbWFudWFsUm93TW92ZS5vbi1tb3ZpbmctLXJvd3MgdGJvZHkgdGguaHRfX2hpZ2hsaWdodHtjdXJzb3I6bW92ZTtjdXJzb3I6Z3JhYmJpbmd9LmhhbmRzb250YWJsZSAuaHRfX21hbnVhbFJvd01vdmUub24tbW92aW5nLS1yb3dzIC5tYW51YWxSb3dSZXNpemVyLC5oYW5k''@;'; put 'put ''c29udGFibGUuaHRfX21hbnVhbFJvd01vdmUub24tbW92aW5nLS1yb3dzIC5tYW51YWxSb3dSZXNpemVye2Rpc3BsYXk6bm9uZX0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5lLC5oYW5kc29udGFibGUgLmh0X19tYW51YWxSb3dNb3ZlLS1iYWNrbGlnaHQsLmhh''@;'; put 'put ''bmRzb250YWJsZS5odF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5lLC5oYW5kc29udGFibGUuaHRfX21hbnVhbFJvd01vdmUtLWJhY2tsaWdodHt3aWR0aDoxMDAlO2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZX0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsUm93TW92ZS0tZ3VpZGVs''@;'; put 'put ''aW5lLC5oYW5kc29udGFibGUuaHRfX21hbnVhbFJvd01vdmUtLWd1aWRlbGluZXtib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1odC1tb3ZlLWluZGljYXRvci1jb2xvcik7ei1pbmRleDoyMDU7bGVmdDowfS5oYW5kc29udGFibGUgLmh0X19tYW51YWxSb3dNb3ZlLS1iYWNrbGlnaHQsLmhh''@;'; put 'put ''bmRzb250YWJsZS5odF9fbWFudWFsUm93TW92ZS0tYmFja2xpZ2h0e3otaW5kZXg6MjA1O3BvaW50ZXItZXZlbnRzOm5vbmU7YmFja2dyb3VuZDpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1odC1tb3ZlLWJhY2tsaWdodC1jb2xvcil2YXIoLS1odC1tb3ZlLWJhY2tsaWdodC1vcGFjaXR5LDEw''@;'; put 'put ''MCUpLHRyYW5zcGFyZW50KTtkaXNwbGF5Om5vbmV9LmhhbmRzb250YWJsZSAub24tbW92aW5nLS1yb3dzLnNob3ctdWkgLmh0X19tYW51YWxSb3dNb3ZlLS1ndWlkZWxpbmUsLmhhbmRzb250YWJsZSAub24tbW92aW5nLS1yb3dzIC5odF9fbWFudWFsUm93TW92ZS0tYmFja2xpZ2h0LC5oYW5k''@;'; put 'put ''c29udGFibGUub24tbW92aW5nLS1yb3dzLnNob3ctdWkgLmh0X19tYW51YWxSb3dNb3ZlLS1ndWlkZWxpbmUsLmhhbmRzb250YWJsZS5vbi1tb3ZpbmctLXJvd3MgLmh0X19tYW51YWxSb3dNb3ZlLS1iYWNrbGlnaHR7ZGlzcGxheTpibG9ja30uaHQtZGlhbG9ne3Njcm9sbGJhci13aWR0aDph''@;'; put 'put ''dXRvO3Njcm9sbGJhci1jb2xvcjp2YXIoLS1odC1zY3JvbGxiYXItdGh1bWItY29sb3IpdmFyKC0taHQtc2Nyb2xsYmFyLXRyYWNrLWNvbG9yKTtmb250LXNpemU6dmFyKC0taHQtZm9udC1zaXplKTtsaW5lLWhlaWdodDp2YXIoLS1odC1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFy''@;'; put 'put ''KC0taHQtbGV0dGVyLXNwYWNpbmcpO3otaW5kZXg6MTA2MDtvcGFjaXR5OjA7Ym9yZGVyLXJhZGl1czp2YXIoLS1odC1ib3JkZXItcmFkaXVzKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWh0LWJvcmRlci1jb2xvcik7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5Om5vbmU7cG9zaXRp''@;'; put 'put ''b246YWJzb2x1dGU7dG9wOjA7bGVmdDowO292ZXJmbG93LXk6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50fS5odC1kaWFsb2dbZGlyPXJ0bF17bGVmdDphdXRvO3JpZ2h0OjB9Lmh0LWRpYWxvZzpmb2N1c3tib3JkZXI6MXB4IHNvbGlkIHZhcigtLWh0LWFjY2VudC1jb2xv''@;'; put 'put ''cik7b3V0bGluZTpub25lfS5odC1kaWFsb2c6aGFzKC5odEZvY3VzQ2F0Y2hlcjpmb2N1cyl7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1odC1hY2NlbnQtY29sb3IpO291dGxpbmU6bm9uZX0uaHQtZGlhbG9nICp7Ym94LXNpemluZzpib3JkZXItYm94IWltcG9ydGFudH0uaHQtZGlhbG9nLS1i''@;'; put 'put ''YWNrZ3JvdW5kLXNvbGlke2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtZGlhbG9nLXNvbGlkLWJhY2tncm91bmQtY29sb3IpfS5odC1kaWFsb2ctLWJhY2tncm91bmQtc2VtaS10cmFuc3BhcmVudHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWh0LWRpYWxvZy1z''@;'; put 'put ''ZW1pLXRyYW5zcGFyZW50LWJhY2tncm91bmQtY29sb3IpdmFyKC0taHQtZGlhbG9nLXNlbWktdHJhbnNwYXJlbnQtYmFja2dyb3VuZC1vcGFjaXR5LDEwMCUpLHRyYW5zcGFyZW50KX0uaHQtZGlhbG9nLS1hbmltYXRpb257dHJhbnNpdGlvbjpvcGFjaXR5IHZhcigtLWh0LXRhYmxlLXRyYW5z''@;'; put 'put ''aXRpb24pZWFzZS1pbi1vdXR9Lmh0LWRpYWxvZy0tc2hvd3tvcGFjaXR5OjF9Lmh0LWRpYWxvZ19fY29udGVudC13cmFwcGVye3dpZHRoOjEwMCU7bWluLWhlaWdodDoxMDAlO3BhZGRpbmc6Y2FsYyh2YXIoLS1odC1nYXAtc2l6ZSkqNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1odC1ib3JkZXIt''@;'; put 'put ''cmFkaXVzKTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9Lmh0LWRpYWxvZ19fY29udGVudHtwYWRkaW5nOnZhcigtLWh0LWRpYWxvZy1jb250ZW50LXBhZGRpbmctaG9yaXpvbnRhbCl2YXIoLS1odC1kaWFsb2ctY29udGVudC1wYWRkaW5n''@;'; put 'put ''LXZlcnRpY2FsKTttYXgtd2lkdGg6NDgwcHg7Y29sb3I6dmFyKC0taHQtZm9yZWdyb3VuZC1jb2xvcik7cG9zaXRpb246cmVsYXRpdmV9Lmh0LWRpYWxvZ19fY29udGVudC0tYmFja2dyb3VuZHtib3gtc2hhZG93OnZhcigtLWh0LXNoYWRvdy14LDApIHZhcigtLWh0LXNoYWRvdy15LDApIHZh''@;'; put 'put ''cigtLWh0LXNoYWRvdy1ibHVyLDhweCkgY29sb3ItbWl4KGluIHNyZ2IsdmFyKC0taHQtc2hhZG93LWNvbG9yLCMwMDApdmFyKC0taHQtc2hhZG93LW9wYWNpdHksMTAwJSksdHJhbnNwYXJlbnQpO2JvcmRlci1yYWRpdXM6dmFyKC0taHQtZGlhbG9nLWNvbnRlbnQtYm9yZGVyLXJhZGl1cyk7''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1kaWFsb2ctY29udGVudC1iYWNrZ3JvdW5kLWNvbG9yKX0uaHQtZGlhbG9nLS1jb25maXJtIC5odC1kaWFsb2dfX2NvbnRlbnQtd3JhcHBlcnt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOmNhbGModmFyKC0taHQtZ2FwLXNpemUpKjIpfS5odC1k''@;'; put 'put ''aWFsb2ctLWNvbmZpcm0gLmh0LWRpYWxvZ19fY29udGVudC13cmFwcGVyLWlubmVye21heC13aWR0aDo0ODBweDtwYWRkaW5nOmNhbGModmFyKC0taHQtZ2FwLXNpemUpKjIpO2JvcmRlci1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyk7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2p1c3Rp''@;'; put 'put ''ZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0uaHQtZGlhbG9nLS1jb25maXJtIC5odC1kaWFsb2dfX2NvbnRlbnQtd3JhcHBlci1pbm5lci0tYmFja2dyb3VuZHtib3gtc2hhZG93OnZhcigtLWh0LXNoYWRvdy14LDApIHZhcigtLWh0LXNoYWRvdy15''@;'; put 'put ''LDApIHZhcigtLWh0LXNoYWRvdy1ibHVyLDhweCkgY29sb3ItbWl4KGluIHNyZ2IsdmFyKC0taHQtc2hhZG93LWNvbG9yLCMwMDApdmFyKC0taHQtc2hhZG93LW9wYWNpdHksMTAwJSksdHJhbnNwYXJlbnQpO2JvcmRlci1yYWRpdXM6dmFyKC0taHQtZGlhbG9nLWNvbnRlbnQtYm9yZGVyLXJh''@;'; put 'put ''ZGl1cyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1kaWFsb2ctY29udGVudC1iYWNrZ3JvdW5kLWNvbG9yKX0uaHQtZGlhbG9nLS1jb25maXJtIC5odC1kaWFsb2dfX2NvbnRlbnQtd3JhcHBlci1pbm5lcjpmb2N1c3tib3gtc2hhZG93OjAgMCAwIDFweCB2YXIoLS1odC1hY2NlbnQtY29s''@;'; put 'put ''b3IpO291dGxpbmU6bm9uZX0uaHQtZGlhbG9nLS1jb25maXJtIC5odC1kaWFsb2dfX2NvbnRlbnR7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOnZhcigtLWh0LWdhcC1zaXplKTtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZGlzcGxheTpmbGV4fS5odC1kaWFs''@;'; put 'put ''b2ctLWNvbmZpcm0gLmh0LWRpYWxvZ19fY29udGVudDpoYXMoLmh0LWRpYWxvZ19fYnV0dG9ucyl7Z2FwOmNhbGModmFyKC0taHQtZ2FwLXNpemUpKjIpfS5odC1kaWFsb2ctLWNvbmZpcm0gLmh0LWRpYWxvZ19fdGl0bGV7Zm9udC1zaXplOnZhcigtLWh0LWZvbnQtc2l6ZSk7Zm9udC13ZWln''@;'; put 'put ''aHQ6dmFyKC0taHQtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWh0LWxpbmUtaGVpZ2h0KTttYXJnaW46MH0uaHQtZGlhbG9nLS1jb25maXJtIC5odC1kaWFsb2dfX2Rlc2NyaXB0aW9ue2NvbG9yOnZhcigtLWh0LWZvcmVncm91bmQtc2Vjb25kYXJ5LWNvbG9yKTtmb250LXNpemU6''@;'; put 'put ''dmFyKC0taHQtZm9udC1zaXplLXNtYWxsKTtsaW5lLWhlaWdodDp2YXIoLS1odC1saW5lLWhlaWdodC1zbWFsbCk7Zm9udC13ZWlnaHQ6dmFyKC0taHQtZm9udC13ZWlnaHQpO21hcmdpbjowfS5odC1kaWFsb2ctLWNvbmZpcm0gLmh0LWRpYWxvZ19fYnV0dG9uc3tqdXN0aWZ5LWNvbnRlbnQ6''@;'; put 'put ''Y2VudGVyO2dhcDpjYWxjKHZhcigtLWh0LWdhcC1zaXplKSoyKTtmbGV4LWZsb3c6d3JhcDtkaXNwbGF5OmZsZXh9Lmh0LW5vdGlmaWNhdGlvbnt6LWluZGV4OjEwNzA7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO292ZXJmbG93OnZpc2libGV9Lmh0LW5v''@;'; put 'put ''dGlmaWNhdGlvbl9fc3RhY2t7b3ZlcnNjcm9sbC1iZWhhdmlvcjpjb250YWluO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7c2Nyb2xsYmFyLXdpZHRoOmF1dG87c2Nyb2xsYmFyLWNvbG9yOnZhcigtLWh0LXNjcm9sbGJhci10aHVtYi1jb2xv''@;'; put 'put ''cil2YXIoLS1odC1zY3JvbGxiYXItdHJhY2stY29sb3IpO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTBweDttYXgtd2lkdGg6bWluKDQyMHB4LDEwMCUgLSA0MHB4KTttaW4taGVpZ2h0OjA7cGFkZGluZzoxMHB4O2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpo''@;'; put 'put ''aWRkZW4gYXV0b30uaHQtbm90aWZpY2F0aW9uX19zdGFjay0tdG9wLXN0YXJ0e3RvcDoxMHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWF4LWhlaWdodDpjYWxjKDEwMCUgLSA0MHB4KTtpbnNldC1pbmxpbmUtc3RhcnQ6MTBweH0uaHQtbm90aWZpY2F0aW9uX19zdGFjay0tdG9wLWVuZHt0''@;'; put 'put ''b3A6MTBweDthbGlnbi1pdGVtczpmbGV4LWVuZDttYXgtaGVpZ2h0OmNhbGMoMTAwJSAtIDQwcHgpO2luc2V0LWlubGluZS1lbmQ6MTBweH0uaHQtbm90aWZpY2F0aW9uX19zdGFjay0tYm90dG9tLXN0YXJ0e2JvdHRvbToxMHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWF4LWhlaWdodDpj''@;'; put 'put ''YWxjKDEwMCUgLSA0MHB4KTtpbnNldC1pbmxpbmUtc3RhcnQ6MTBweH0uaHQtbm90aWZpY2F0aW9uX19zdGFjay0tYm90dG9tLWVuZHtib3R0b206MTBweDthbGlnbi1pdGVtczpmbGV4LWVuZDttYXgtaGVpZ2h0OmNhbGMoMTAwJSAtIDQwcHgpO2luc2V0LWlubGluZS1lbmQ6MTBweH0uaHQt''@;'; put 'put ''bm90aWZpY2F0aW9uX190b2FzdHtib3gtc2hhZG93OnZhcigtLWh0LXNoYWRvdy14LDApIHZhcigtLWh0LXNoYWRvdy15LDApIHZhcigtLWh0LXNoYWRvdy1ibHVyLDhweCkgY29sb3ItbWl4KGluIHNyZ2IsdmFyKC0taHQtc2hhZG93LWNvbG9yLCMwMDApdmFyKC0taHQtc2hhZG93LW9wYWNp''@;'; put 'put ''dHksMTAwJSksdHJhbnNwYXJlbnQpO3BvaW50ZXItZXZlbnRzOmF1dG87bWF4LXdpZHRoOjEwMCU7Y29sb3I6dmFyKC0taHQtbm90aWZpY2F0aW9uLWZvcmVncm91bmQtY29sb3IsdmFyKC0taHQtZm9yZWdyb3VuZC1jb2xvcikpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtbm90aWZpY2F0''@;'; put 'put ''aW9uLWJhY2tncm91bmQtY29sb3IsdmFyKC0taHQtYmFja2dyb3VuZC1jb2xvcikpO2JvcmRlcjoxcHggc29saWQgdmFyKC0taHQtbm90aWZpY2F0aW9uLWJvcmRlci1jb2xvcix2YXIoLS1odC1ib3JkZXItY29sb3IpKTtib3JkZXItcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMsNHB4''@;'; put 'put ''KTtmb250LXNpemU6dmFyKC0taHQtZm9udC1zaXplKTtsaW5lLWhlaWdodDp2YXIoLS1odC1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0taHQtbGV0dGVyLXNwYWNpbmcpO291dGxpbmU6bm9uZTtmbGV4LXNocmluazowO2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZX0u''@;'; put 'put ''aHQtbm90aWZpY2F0aW9uX190b2FzdDpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCAwIDAgMXB4IHZhcigtLWh0LWFjY2VudC1jb2xvcil9Lmh0LW5vdGlmaWNhdGlvbl9fdG9hc3QtLWFuaW1hdGV7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSB2YXIoLS1odC10YWJsZS10cmFuc2l0''@;'; put 'put ''aW9uLC4xNXMpZWFzZS1vdXQsdHJhbnNmb3JtIHZhcigtLWh0LXRhYmxlLXRyYW5zaXRpb24sLjE1cyllYXNlLW91dH0uaHQtbm90aWZpY2F0aW9uX190b2FzdC0tYW5pbWF0ZS5odC1ub3RpZmljYXRpb25fX3RvYXN0LS1zdGFjay10b3A6bm90KC5odC1ub3RpZmljYXRpb25fX3RvYXN0LS12''@;'; put 'put ''aXNpYmxlKXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNnB4KX0uaHQtbm90aWZpY2F0aW9uX190b2FzdC0tYW5pbWF0ZS5odC1ub3RpZmljYXRpb25fX3RvYXN0LS1zdGFjay1ib3R0b206bm90KC5odC1ub3RpZmljYXRpb25fX3RvYXN0LS12aXNpYmxlKXt0cmFuc2Zvcm06dHJhbnNsYXRlWSg2''@;'; put 'put ''cHgpfS5odC1ub3RpZmljYXRpb25fX3RvYXN0LS12aXNpYmxle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKX0uaHQtbm90aWZpY2F0aW9uX190b2FzdC0taW5mbyAuaHQtbm90aWZpY2F0aW9uX19hY2NlbnR7ZGlzcGxheTpub25lfS5odC1ub3RpZmljYXRpb25fX3RvYXN0LS1z''@;'; put 'put ''dWNjZXNzIC5odC1ub3RpZmljYXRpb25fX2FjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LW5vdGlmaWNhdGlvbi1zdWNjZXNzLWFjY2VudCwjMzdiYzZjKX0uaHQtbm90aWZpY2F0aW9uX190b2FzdC0td2FybmluZyAuaHQtbm90aWZpY2F0aW9uX19hY2NlbnR7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1odC1ub3RpZmljYXRpb24td2FybmluZy1hY2NlbnQsI2ZiZTk1Mil9Lmh0LW5vdGlmaWNhdGlvbl9fdG9hc3QtLWVycm9yIC5odC1ub3RpZmljYXRpb25fX2FjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LW5vdGlmaWNhdGlvbi1lcnJvci1hY2NlbnQsI2ZhNGQz''@;'; put 'put ''Mil9Lmh0LW5vdGlmaWNhdGlvbl9fdG9hc3QtaW5uZXJ7d2lkdGg6MTAwJTttaW4td2lkdGg6MDtkaXJlY3Rpb246aW5oZXJpdDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6c3RyZXRjaDtnYXA6MDtwYWRkaW5nOjEwcHg7ZGlzcGxheTpmbGV4fS5odC1ub3RpZmljYXRpb25fX2Fj''@;'; put 'put ''Y2VudHtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXJhZGl1czo0cHg7ZmxleDowIDAgNHB4O2FsaWduLXNlbGY6c3RyZXRjaDttYXJnaW4taW5saW5lLWVuZDoxMHB4fS5odC1ub3RpZmljYXRpb25fX2JvZHl7ZmxleDphdXRvO21pbi13aWR0aDowfS5odC1ub3RpZmljYXRpb25fX3Rp''@;'; put 'put ''dGxle21hcmdpbjowIDAgdmFyKC0taHQtZ2FwLXNpemUpO2ZvbnQtc2l6ZTp2YXIoLS1odC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWh0LWZvbnQtd2VpZ2h0LDYwMCl9Lmh0LW5vdGlmaWNhdGlvbl9fbWVzc2FnZXtmb250LXNpemU6dmFyKC0taHQtZm9udC1zaXplLXNtYWxsKTt3''@;'; put 'put ''b3JkLWJyZWFrOmJyZWFrLXdvcmQ7bWFyZ2luOjB9Lmh0LW5vdGlmaWNhdGlvbl9fYWN0aW9uc3tnYXA6dmFyKC0taHQtZ2FwLXNpemUpO21hcmdpbi10b3A6dmFyKC0taHQtZ2FwLXNpemUpO2ZsZXgtd3JhcDp3cmFwO2Rpc3BsYXk6ZmxleH0uaHQtbm90aWZpY2F0aW9uX19jbG9zZXtib3gt''@;'; put 'put ''c2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6dmFyKC0taHQtaWNvbi1idXR0b24taGl0LWFyZWEtc2l6ZSk7aGVpZ2h0OnZhcigtLWh0LWljb24tYnV0dG9uLWhpdC1hcmVhLXNpemUpO2NvbG9yOnZhcigtLWh0LWljb24tYnV0dG9uLWljb24tY29sb3IsaW5oZXJpdCk7Y3Vyc29yOnBvaW50ZXI7''@;'; put 'put ''Ym9yZGVyLXJhZGl1czp2YXIoLS1odC1pY29uLWJ1dHRvbi1ib3JkZXItcmFkaXVzLHZhcigtLWh0LWJvcmRlci1yYWRpdXMsNHB4KSk7YmFja2dyb3VuZDowIDA7Ym9yZGVyOm5vbmU7ZmxleDpub25lO2FsaWduLXNlbGY6ZmxleC1zdGFydDttYXJnaW4taW5saW5lLXN0YXJ0OjRweDtwYWRk''@;'; put 'put ''aW5nOjA7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6dmlzaWJsZX0uaHQtbm90aWZpY2F0aW9uX19jbG9zZTpiZWZvcmV7Y29udGVudDoiIjt0b3A6NTAlO21hcmdpbi10b3A6Y2FsYygtLjUqdmFyKC0taHQtaWNvbi1zaXplKSk7bWFyZ2luLWlubGluZS1zdGFydDpjYWxjKC0uNSp2YXIo''@;'; put 'put ''LS1odC1pY29uLXNpemUpKTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0LWlubGluZS1zdGFydDo1MCV9Lmh0LW5vdGlmaWNhdGlvbl9fY2xvc2U6aG92ZXJ7Y29sb3I6dmFyKC0taHQtaWNvbi1idXR0b24taG92ZXItaWNvbi1jb2xvcixpbmhlcml0KTtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWh0LWljb24tYnV0dG9uLWhvdmVyLWJhY2tncm91bmQtY29sb3IsY29sb3ItbWl4KGluIHNyZ2IsdmFyKC0taHQtZm9yZWdyb3VuZC1jb2xvcik4JSx0cmFuc3BhcmVudCkpfS5odC1ub3RpZmljYXRpb25fX2Nsb3NlOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29s''@;'; put 'put ''aWQgdmFyKC0taHQtYWNjZW50LWNvbG9yKTtvdXRsaW5lLW9mZnNldDoycHh9LmhhbmRzb250YWJsZS5odC1wYWdpbmF0aW9ue3dpZHRoOjEwMCU7Y29sb3I6dmFyKC0taHQtcGFnaW5hdGlvbi1iYXItZm9yZWdyb3VuZC1jb2xvcik7YmFja2dyb3VuZDp2YXIoLS1odC1wYWdpbmF0aW9uLWJh''@;'; put 'put ''ci1iYWNrZ3JvdW5kLWNvbG9yKTtmb250LXNpemU6dmFyKC0taHQtZm9udC1zaXplKTtsaW5lLWhlaWdodDp2YXIoLS1odC1saW5lLWhlaWdodCk7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93LXg6YXV0b30uaGFuZHNvbnRhYmxlLmh0LXBhZ2luYXRpb246bm90KC5odC1zbG90LWVs''@;'; put 'put ''ZW1lbnQpe2JvcmRlcjoxcHggc29saWQgdmFyKC0taHQtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpfS5oYW5kc29udGFibGUuaHQtcGFnaW5hdGlvbiAuaHQtcGFnaW5hdGlvbl9faW5uZXJ7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47''@;'; put 'put ''YWxpZ24taXRlbXM6Y2VudGVyO2dhcDpjYWxjKHZhcigtLWh0LWdhcC1zaXplKSo0KTtwYWRkaW5nLWlubGluZTp2YXIoLS1odC1wYWdpbmF0aW9uLWJhci1ob3Jpem9udGFsLXBhZGRpbmcpO3BhZGRpbmctYmxvY2s6dmFyKC0taHQtcGFnaW5hdGlvbi1iYXItdmVydGljYWwtcGFkZGluZyk7''@;'; put 'put ''ZmxleC13cmFwOndyYXA7bWluLXdpZHRoOjIzMHB4O2Rpc3BsYXk6ZmxleH0uaGFuZHNvbnRhYmxlLmh0LXBhZ2luYXRpb24gLmh0LXBhZ2Utc2l6ZS1zZWN0aW9ue2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6Y2FsYyh2YXIoLS1odC1nYXAtc2l6ZSkqMik7ZGlzcGxheTpmbGV4fS5oYW5kc29u''@;'; put 'put ''dGFibGUuaHQtcGFnaW5hdGlvbiAuaHQtcGFnZS1zaXplLXNlY3Rpb25fX2xhYmVse3doaXRlLXNwYWNlOm5vd3JhcH0uaGFuZHNvbnRhYmxlLmh0LXBhZ2luYXRpb24gLmh0LXBhZ2Utc2l6ZS1zZWN0aW9uX19zZWxlY3Qtd3JhcHBlcntib3JkZXItcmFkaXVzOnZhcigtLWh0LWlucHV0LWJv''@;'; put 'put ''cmRlci1yYWRpdXMpO3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUuaHQtcGFnaW5hdGlvbiAuaHQtcGFnZS1zaXplLXNlY3Rpb25fX3NlbGVjdC13cmFwcGVyIHNlbGVjdHtwYWRkaW5nLWlubGluZS1zdGFydDp2YXIoLS1odC1nYXAtc2l6ZSk7cGFkZGluZy1pbmxpbmUtZW5kOmNh''@;'; put 'put ''bGModmFyKC0taHQtZ2FwLXNpemUpICsgdmFyKC0taHQtaWNvbi1zaXplKSk7cGFkZGluZy10b3A6dmFyKC0taHQtZ2FwLXNpemUpO3BhZGRpbmctYm90dG9tOnZhcigtLWh0LWdhcC1zaXplKTtib3JkZXItcmFkaXVzOnZhcigtLWh0LWlucHV0LWJvcmRlci1yYWRpdXMpO2NvbG9yOnZhcigt''@;'; put 'put ''LWh0LWlucHV0LWZvcmVncm91bmQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtaW5wdXQtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1odC1pbnB1dC1ib3JkZXItY29sb3IpO2xpbmUtaGVpZ2h0OmNhbGModmFyKC0taHQtbGluZS1oZWlnaHQpIC0g''@;'; put 'put ''NHB4KTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtmb250LXNpemU6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcn0uaGFuZHNvbnRhYmxlLmh0LXBhZ2luYXRpb24gLmh0LXBhZ2Utc2l6ZS1zZWN0aW9uX19zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6ZGlzYWJsZWR7b3BhY2l0eTouNDtjdXJzb3I6ZGVm''@;'; put 'put ''YXVsdDtjb2xvcjp2YXIoLS1odC1pbnB1dC1kaXNhYmxlZC1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWlucHV0LWRpc2FibGVkLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1odC1pbnB1dC1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5o''@;'; put 'put ''YW5kc29udGFibGUuaHQtcGFnaW5hdGlvbiAuaHQtcGFnZS1zaXplLXNlY3Rpb25fX3NlbGVjdC13cmFwcGVyIHNlbGVjdDpob3Zlcjpub3QoOmRpc2FibGVkKXtjb2xvcjp2YXIoLS1odC1pbnB1dC1ob3Zlci1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWlu''@;'; put 'put ''cHV0LWhvdmVyLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1odC1pbnB1dC1ob3Zlci1ib3JkZXItY29sb3IpfS5oYW5kc29udGFibGUuaHQtcGFnaW5hdGlvbiAuaHQtcGFnZS1zaXplLXNlY3Rpb25fX3NlbGVjdC13cmFwcGVyIHNlbGVjdDpmb2N1c3tjb2xvcjp2YXIo''@;'; put 'put ''LS1odC1pbnB1dC1mb2N1cy1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWlucHV0LWZvY3VzLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1odC1pbnB1dC1mb2N1cy1ib3JkZXItY29sb3IpO291dGxpbmU6bm9uZX0uaGFuZHNvbnRhYmxl''@;'; put 'put ''Lmh0LXBhZ2luYXRpb24gLmh0LXBhZ2Utc2l6ZS1zZWN0aW9uX19zZWxlY3Qtd3JhcHBlcjphZnRlcntjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6dmFyKC0taHQtZm9yZWdyb3VuZC1jb2xvcik7cG9pbnRlci1ldmVudHM6bm9uZTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRl''@;'; put 'put ''O2luc2V0LWJsb2NrLWVuZDo1MCU7aW5zZXQtaW5saW5lLWVuZDp2YXIoLS1odC1nYXAtc2l6ZSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoNTAlKX0uaGFuZHNvbnRhYmxlLmh0LXBhZ2luYXRpb24gLmh0LXBhZ2UtY291bnRlci1zZWN0aW9ue21hcmdpbi1pbmxpbmUtZW5kOmF1dG99LmhhbmRz''@;'; put 'put ''b250YWJsZS5odC1wYWdpbmF0aW9uIC5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbnthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjFweDtkaXNwbGF5OmZsZXh9LmhhbmRzb250YWJsZS5odC1wYWdpbmF0aW9uIC5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbl9fYnV0dG9ue2ZvbnQtc2l6ZTpp''@;'; put 'put ''bmhlcml0O2JvcmRlcjoxcHggc29saWQgdmFyKC0taHQtcGFnaW5hdGlvbi1idXR0b24tYm9yZGVyLWNvbG9yKTtjb2xvcjp2YXIoLS1odC1wYWdpbmF0aW9uLWJ1dHRvbi1mb3JlZ3JvdW5kLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LXBhZ2luYXRpb24tYnV0dG9uLWJhY2tn''@;'; put 'put ''cm91bmQtY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0taHQtaWNvbi1idXR0b24tbGFyZ2UtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1odC1pY29uLWJ1dHRvbi1sYXJnZS1wYWRkaW5nKTtjdXJzb3I6cG9pbnRlcn0uaGFuZHNvbnRhYmxlLmh0LXBhZ2luYXRpb24gLmh0LXBhZ2Ut''@;'; put 'put ''bmF2aWdhdGlvbi1zZWN0aW9uX19idXR0b246YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9ja30uaGFuZHNvbnRhYmxlLmh0LXBhZ2luYXRpb24gLmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uX19idXR0b24tLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0O3BvaW50ZXItZXZlbnRzOm5v''@;'; put 'put ''bmU7Y29sb3I6dmFyKC0taHQtcGFnaW5hdGlvbi1idXR0b24tZGlzYWJsZWQtZm9yZWdyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1wYWdpbmF0aW9uLWJ1dHRvbi1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0taHQtcGFnaW5hdGlv''@;'; put 'put ''bi1idXR0b24tZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uaGFuZHNvbnRhYmxlLmh0LXBhZ2luYXRpb24gLmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uX19idXR0b246aG92ZXI6bm90KDpkaXNhYmxlZCl7Ym9yZGVyLWNvbG9yOnZhcigtLWh0LXBhZ2luYXRpb24tYnV0dG9uLWhvdmVyLWJv''@;'; put 'put ''cmRlci1jb2xvcik7Y29sb3I6dmFyKC0taHQtcGFnaW5hdGlvbi1idXR0b24taG92ZXItZm9yZWdyb3VuZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1wYWdpbmF0aW9uLWJ1dHRvbi1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yKX0uaGFuZHNvbnRhYmxlLmh0LXBhZ2luYXRpb24g''@;'; put 'put ''Lmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uX19idXR0b246Zm9jdXN7Ym9yZGVyLWNvbG9yOnZhcigtLWh0LXBhZ2luYXRpb24tYnV0dG9uLWZvY3VzLWJvcmRlci1jb2xvcik7Y29sb3I6dmFyKC0taHQtcGFnaW5hdGlvbi1idXR0b24tZm9jdXMtZm9yZWdyb3VuZC1jb2xvcik7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1odC1wYWdpbmF0aW9uLWJ1dHRvbi1mb2N1cy1iYWNrZ3JvdW5kLWNvbG9yKTtvdXRsaW5lOm5vbmV9LmhhbmRzb250YWJsZS5odC1wYWdpbmF0aW9uIC5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbl9fbGFiZWx7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtYWxp''@;'; put 'put ''Z246Y2VudGVyO21pbi13aWR0aDoxMDBweH0uaHQtbG9hZGluZ19faWNvbi1zdmd7d2lkdGg6dmFyKC0taHQtaWNvbi1zaXplKTtoZWlnaHQ6dmFyKC0taHQtaWNvbi1zaXplKTtjb2xvcjp2YXIoLS1odC1hY2NlbnQtY29sb3IpO3RyYW5zZm9ybS1vcmlnaW46NTAlO2FuaW1hdGlvbjoxcyBs''@;'; put 'put ''aW5lYXIgaW5maW5pdGUgaHQtbG9hZGluZy1zcGluO2Rpc3BsYXk6YmxvY2t9Lmh0LWxvYWRpbmdfX2NvbnRlbnR7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDpjYWxjKHZhcigtLWh0LWdhcC1zaXplKSoyKTtkaXNwbGF5OmZsZXh9Lmh0LWxvYWRpbmdfX3RpdGxle2ZvbnQtc2l6ZTp2YXIoLS1o''@;'; put 'put ''dC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWh0LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1odC1saW5lLWhlaWdodCk7bWFyZ2luOjB9Lmh0LWxvYWRpbmdfX2Rlc2NyaXB0aW9ue2NvbG9yOnZhcigtLWh0LWZvcmVncm91bmQtc2Vjb25kYXJ5LWNvbG9yKTtmb250LXNp''@;'; put 'put ''emU6dmFyKC0taHQtZm9udC1zaXplLXNtYWxsKTtsaW5lLWhlaWdodDp2YXIoLS1odC1saW5lLWhlaWdodC1zbWFsbCk7Zm9udC13ZWlnaHQ6dmFyKC0taHQtZm9udC13ZWlnaHQpO21hcmdpbjowfUBrZXlmcmFtZXMgaHQtbG9hZGluZy1zcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVn''@;'; put 'put ''KX19Lmh0LWVtcHR5LWRhdGEtc3RhdGV7c2Nyb2xsYmFyLXdpZHRoOmF1dG87c2Nyb2xsYmFyLWNvbG9yOnZhcigtLWh0LXNjcm9sbGJhci10aHVtYi1jb2xvcil2YXIoLS1odC1zY3JvbGxiYXItdHJhY2stY29sb3IpO3otaW5kZXg6OTk5O2JvcmRlcjoxcHggc29saWQgdmFyKC0taHQtYm9y''@;'; put 'put ''ZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWJhY2tncm91bmQtY29sb3IpO3dpZHRoOjEwMCU7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtv''@;'; put 'put ''dmVyZmxvdy15OmF1dG99Lmh0LWVtcHR5LWRhdGEtc3RhdGUgKntib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50fS5odC1lbXB0eS1kYXRhLXN0YXRlX19jb250ZW50LXdyYXBwZXJ7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjEwMCU7cGFkZGluZzpjYWxj''@;'; put 'put ''KHZhcigtLWh0LWdhcC1zaXplKSoyKTtib3JkZXItcmFkaXVzOnZhcigtLWh0LWJvcmRlci1yYWRpdXMpO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0uaHQtZW1wdHktZGF0YS1zdGF0ZV9fY29udGVudC13cmFwcGVyLWlubmVye21heC13''@;'; put 'put ''aWR0aDo0ODBweDtwYWRkaW5nOmNhbGModmFyKC0taHQtZ2FwLXNpemUpKjIpO2JvcmRlci1yYWRpdXM6dmFyKC0taHQtYm9yZGVyLXJhZGl1cyk7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0uaHQt''@;'; put 'put ''ZW1wdHktZGF0YS1zdGF0ZV9fY29udGVudC13cmFwcGVyLWlubmVyOmZvY3Vze2JveC1zaGFkb3c6MCAwIDAgMXB4IHZhcigtLWh0LWFjY2VudC1jb2xvcik7b3V0bGluZTpub25lfS5odC1lbXB0eS1kYXRhLXN0YXRlX19jb250ZW50e2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRl''@;'; put 'put ''bXM6Y2VudGVyO2dhcDp2YXIoLS1odC1nYXAtc2l6ZSk7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2Rpc3BsYXk6ZmxleH0uaHQtZW1wdHktZGF0YS1zdGF0ZV9fdGl0bGV7Zm9udC1zaXplOnZhcigtLWh0LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0taHQtZm9udC13ZWlnaHQpO2xpbmUt''@;'; put 'put ''aGVpZ2h0OnZhcigtLWh0LWxpbmUtaGVpZ2h0KTttYXJnaW46MH0uaHQtZW1wdHktZGF0YS1zdGF0ZV9fZGVzY3JpcHRpb257Y29sb3I6dmFyKC0taHQtZm9yZWdyb3VuZC1zZWNvbmRhcnktY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1odC1mb250LXNpemUtc21hbGwpO2xpbmUtaGVpZ2h0OnZh''@;'; put 'put ''cigtLWh0LWxpbmUtaGVpZ2h0LXNtYWxsKTtmb250LXdlaWdodDp2YXIoLS1odC1mb250LXdlaWdodCk7bWFyZ2luOjB9Lmh0LWVtcHR5LWRhdGEtc3RhdGVfX2J1dHRvbnN7anVzdGlmeS1jb250ZW50OmNlbnRlcjtnYXA6Y2FsYyh2YXIoLS1odC1nYXAtc2l6ZSkqMik7ZmxleC1mbG93Ondy''@;'; put 'put ''YXA7ZGlzcGxheTpmbGV4fS5odC1lbXB0eS1kYXRhLXN0YXRlX19idXR0b25zLS1oYXMtYnV0dG9uc3ttYXJnaW4tdG9wOmNhbGModmFyKC0taHQtZ2FwLXNpemUpKjIpfS5odC1lbXB0eS1kYXRhLXN0YXRlX19zcGlubmVye3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7bWFyZ2luLWJvdHRvbTpj''@;'; put 'put ''YWxjKHZhcigtLWh0LWdhcC1zaXplKSoyKTtib3JkZXI6MnB4IHNvbGlkIHZhcigtLWh0LWJvcmRlci1jb2xvcik7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1odC1hY2NlbnQtY29sb3IpO2JvcmRlci1yYWRpdXM6NTAlO2ZsZXgtc2hyaW5rOjA7YW5pbWF0aW9uOi43NXMgbGluZWFyIGluZmlu''@;'; put 'put ''aXRlIGh0LWVtcHR5LWRhdGEtc3RhdGUtc3Bpbn1AbWVkaWEocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5odC1lbXB0eS1kYXRhLXN0YXRlX19zcGlubmVye2JvcmRlci10b3AtY29sb3I6dmFyKC0taHQtYm9yZGVyLWNvbG9yKTthbmltYXRpb246bm9uZX19Lmh0LWVtcHR5LWRh''@;'; put 'put ''dGEtc3RhdGUtLWxvYWRpbmcgLmh0LWVtcHR5LWRhdGEtc3RhdGVfX2NvbnRlbnR7Z2FwOmNhbGModmFyKC0taHQtZ2FwLXNpemUpKi41KX0uaHQtZW1wdHktZGF0YS1zdGF0ZS0tZGlzYWJsZS10b3AtYm9yZGVye2JvcmRlci10b3Atd2lkdGg6MH0uaHQtZW1wdHktZGF0YS1zdGF0ZS0tZGlz''@;'; put 'put ''YWJsZS10b3AtYm9yZGVyOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBu''@;'; put 'put ''YiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSksLmh0LWVtcHR5LWRhdGEtc3RhdGUtLWRpc2FibGUtdG9wLWJvcmRlcjppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxh''@;'; put 'put ''bmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci10''@;'; put 'put ''b3AtcmlnaHQtcmFkaXVzOjB9Lmh0LWVtcHR5LWRhdGEtc3RhdGUtLWRpc2FibGUtaW5saW5lLWJvcmRlcntib3JkZXItaW5saW5lLXN0YXJ0LXdpZHRoOjB9Lmh0LWVtcHR5LWRhdGEtc3RhdGUtLWRpc2FibGUtaW5saW5lLWJvcmRlcjpub3QoOmxhbmcoYWUpLDpsYW5nKGFyKSw6bGFuZyhh''@;'; put 'put ''cmMpLDpsYW5nKGJjYyksOmxhbmcoYnFpKSw6bGFuZyhja2IpLDpsYW5nKGR2KSw6bGFuZyhmYSksOmxhbmcoZ2xrKSw6bGFuZyhoZSksOmxhbmcoa3UpLDpsYW5nKG16biksOmxhbmcobnFvKSw6bGFuZyhwbmIpLDpsYW5nKHBzKSw6bGFuZyhzZCksOmxhbmcodWcpLDpsYW5nKHVyKSw6bGFu''@;'; put 'put ''Zyh5aSkpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9Lmh0LWVtcHR5LWRhdGEtc3RhdGUtLWRpc2FibGUtaW5saW5lLWJvcmRlcjppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5n''@;'; put 'put ''KGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6''@;'; put 'put ''MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5odC1lbXB0eS1kYXRhLXN0YXRlLS1kaXNhYmxlLWJvdHRvbS1ib3JkZXJ7Ym9yZGVyLWJvdHRvbS13aWR0aDowfS5odC1lbXB0eS1kYXRhLXN0YXRlLS1kaXNhYmxlLWJvdHRvbS1ib3JkZXI6bm90KDpsYW5nKGFlKSw6bGFuZyhhciks''@;'; put 'put ''OmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUpLDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1''@;'; put 'put ''ciksOmxhbmcoeWkpKSwuaHQtZW1wdHktZGF0YS1zdGF0ZS0tZGlzYWJsZS1ib3R0b20tYm9yZGVyOmlzKDpsYW5nKGFlKSw6bGFuZyhhciksOmxhbmcoYXJjKSw6bGFuZyhiY2MpLDpsYW5nKGJxaSksOmxhbmcoY2tiKSw6bGFuZyhkdiksOmxhbmcoZmEpLDpsYW5nKGdsayksOmxhbmcoaGUp''@;'; put 'put ''LDpsYW5nKGt1KSw6bGFuZyhtem4pLDpsYW5nKG5xbyksOmxhbmcocG5iKSw6bGFuZyhwcyksOmxhbmcoc2QpLDpsYW5nKHVnKSw6bGFuZyh1ciksOmxhbmcoeWkpKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uaHQtcm9vdC13cmFw''@;'; put 'put ''cGVyOmhhcyg+Lmh0LXNsb3QtYm90dG9tPi5odC1zbG90LWVsZW1lbnQpIC5odC1lbXB0eS1kYXRhLXN0YXRlOm5vdCg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhnbGspLDps''@;'; put 'put ''YW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9Lmh0LXJv''@;'; put 'put ''b3Qtd3JhcHBlcjpoYXMoPi5odC1zbG90LWJvdHRvbT4uaHQtc2xvdC1lbGVtZW50KSAuaHQtZW1wdHktZGF0YS1zdGF0ZTppcyg6bGFuZyhhZSksOmxhbmcoYXIpLDpsYW5nKGFyYyksOmxhbmcoYmNjKSw6bGFuZyhicWkpLDpsYW5nKGNrYiksOmxhbmcoZHYpLDpsYW5nKGZhKSw6bGFuZyhn''@;'; put 'put ''bGspLDpsYW5nKGhlKSw6bGFuZyhrdSksOmxhbmcobXpuKSw6bGFuZyhucW8pLDpsYW5nKHBuYiksOmxhbmcocHMpLDpsYW5nKHNkKSw6bGFuZyh1ZyksOmxhbmcodXIpLDpsYW5nKHlpKSl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9''@;'; put 'put ''QGtleWZyYW1lcyBodC1lbXB0eS1kYXRhLXN0YXRlLXNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX0vKiEKICogQ29weXJpZ2h0IChjKSBIQU5EU09OQ09ERSBzcC4geiBvLiBvLgogKgogKiBIQU5EU09OVEFCTEUgaXMgYSBzb2Z0d2FyZSBkaXN0cmlidXRlZCBieSBIQU5EU09O''@;'; put 'put ''Q09ERSBzcC4geiBvLiBvLiwgYSBQb2xpc2ggY29ycG9yYXRpb24gYmFzZWQgaW4KICogR2R5bmlhLCBQb2xhbmQsIGF0IEFsZWphIFp3eWNpZXN0d2EgOTYtOTgsIHJlZ2lzdGVyZWQgYnkgdGhlIERpc3RyaWN0IENvdXJ0IGluIEdkYW5zayB1bmRlciBudW1iZXIKICogNTM4NjUxLCBFVSB0''@;'; put 'put ''YXggSUQgbnVtYmVyOiBQTDU4NjIyOTQwMDIsIHNoYXJlIGNhcGl0YWw6IFBMTiA2Miw4MDAuMDAuCiAqCiAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IGFwcGxpY2FibGUgY29weXJpZ2h0IGxhd3MsIGluY2x1ZGluZyBpbnRlcm5hdGlvbmFsIHRyZWF0aWVzLCBhbmQgZHVhbC0K''@;'; put 'put ''ICogbGljZW5zZWQgLSBkZXBlbmRpbmcgb24gd2hldGhlciB5b3VyIHVzZSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcywgbWVhbmluZyBpbnRlbmRlZCBmb3Igb3IKICogcmVzdWx0aW5nIGluIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgb3Igbm90Lgog''@;'; put 'put ''KgogKiBJZiB5b3VyIHVzZSBpcyBzdHJpY3RseSBwZXJzb25hbCBvciBzb2xlbHkgZm9yIGV2YWx1YXRpb24gcHVycG9zZXMsIG1lYW5pbmcgZm9yIHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nCiAqIHRoZSBzdWl0YWJpbGl0eSwgcGVyZm9ybWFuY2UsIGFuZCB1c2VmdWxuZXNzIG9mIHRoaXMg''@;'; put 'put ''c29mdHdhcmUgb3V0c2lkZSB0aGUgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwKICogeW91IGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiB0aGUgImhhbmRzb250YWJsZS1ub24tY29tbWVyY2lhbC1saWNlbnNlLnBkZiIgZmlsZS4KICoKICogWW91ciB1c2Ugb2Yg''@;'; put 'put ''dGhpcyBzb2Z0d2FyZSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcyBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiBhbiBhcHBsaWNhYmxlCiAqIGxpY2Vuc2UgYWdyZWVtZW50LgogKgogKiBJbiBhbnkgY2FzZSwgeW91IG11c3Qgbm90IG1ha2UgYW55IHN1Y2ggdXNlIG9mIHRo''@;'; put 'put ''aXMgc29mdHdhcmUgYXMgdG8gZGV2ZWxvcCBzb2Z0d2FyZSB3aGljaCBtYXkgYmUKICogY29uc2lkZXJlZCBjb21wZXRpdGl2ZSB3aXRoIHRoaXMgc29mdHdhcmUuCiAqCiAqIFVOTEVTUyBFWFBSRVNTTFkgQUdSRUVEIE9USEVSV0lTRSwgSEFORFNPTkNPREUgUFJPVklERVMgVEhJUyBTT0ZU''@;'; put 'put ''V0FSRSBPTiBBTiAiQVMgSVMiCiAqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgQU5EIElOIE5PIEVWRU5UIEFORCBVTkRFUiBOTwogKiBMRUdBTCBUSEVPUlksIFNIQUxMIEhBTkRTT05DT0RFIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFH''@;'; put 'put ''RVMsIElOQ0xVRElORyBBTlkgRElSRUNULAogKiBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgQVJJU0lORyBGUk9NCiAqIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRISVMgU09GVFdBUkUuCiAqCiAqIFZl''@;'; put 'put ''cnNpb246IDE4LjAuMAogKiBSZWxlYXNlIGRhdGU6IDMwLzA2LzIwMjYgKGJ1aWx0IGF0IDMwLzA2LzIwMjYgMDg6NDU6MjgpCiAqLy5odC10aGVtZS1jbGFzc2ljLC5odC10aGVtZS1jbGFzc2ljLWRhcmssLmh0LXRoZW1lLWNsYXNzaWMtZGFyay1hdXRvey0taHQtc2l6aW5nLXNpemUtMDow''@;'; put 'put ''cHg7LS1odC1zaXppbmctc2l6ZS0wLTU6MnB4Oy0taHQtc2l6aW5nLXNpemUtMTo0cHg7LS1odC1zaXppbmctc2l6ZS0yOjhweDstLWh0LXNpemluZy1zaXplLTEtNTo2cHg7LS1odC1zaXppbmctc2l6ZS0zOjEycHg7LS1odC1zaXppbmctc2l6ZS00OjE2cHg7LS1odC1zaXppbmctc2l6ZS01''@;'; put 'put ''OjIwcHg7LS1odC1zaXppbmctc2l6ZS02OjI0cHg7LS1odC1zaXppbmctc2l6ZS03OjI4cHg7LS1odC1zaXppbmctc2l6ZS04OjMycHg7LS1odC1zaXppbmctc2l6ZS05OjM2cHg7LS1odC1zaXppbmctc2l6ZS0xMDo0MHB4Oy0taHQtc2l6aW5nLXNpemUtMC0yNToxcHg7LS1odC1kZW5zaXR5''@;'; put 'put ''LWNlbGwtdmVydGljYWw6dmFyKC0taHQtc2l6aW5nLXNpemUtMC01KTstLWh0LWRlbnNpdHktY2VsbC1ob3Jpem9udGFsOnZhcigtLWh0LXNpemluZy1zaXplLTEtNSk7LS1odC1kZW5zaXR5LWJhcnMtaG9yaXpvbnRhbDp2YXIoLS1odC1zaXppbmctc2l6ZS0yKTstLWh0LWRlbnNpdHktYmFy''@;'; put 'put ''cy12ZXJ0aWNhbDp2YXIoLS1odC1zaXppbmctc2l6ZS0xKTstLWh0LWRlbnNpdHktZ2FwOnZhcigtLWh0LXNpemluZy1zaXplLTAtNSk7LS1odC1kZW5zaXR5LWJ1dHRvbi1ob3Jpem9udGFsOnZhcigtLWh0LXNpemluZy1zaXplLTIpOy0taHQtZGVuc2l0eS1idXR0b24tdmVydGljYWw6dmFy''@;'; put 'put ''KC0taHQtc2l6aW5nLXNpemUtMC01KTstLWh0LWRlbnNpdHktZGlhbG9nLWhvcml6b250YWw6dmFyKC0taHQtc2l6aW5nLXNpemUtMS01KTstLWh0LWRlbnNpdHktZGlhbG9nLXZlcnRpY2FsOnZhcigtLWh0LXNpemluZy1zaXplLTEtNSk7LS1odC1kZW5zaXR5LWlucHV0LWhvcml6b250YWw6''@;'; put 'put ''dmFyKC0taHQtc2l6aW5nLXNpemUtMik7LS1odC1kZW5zaXR5LWlucHV0LXZlcnRpY2FsOnZhcigtLWh0LXNpemluZy1zaXplLTAtNSk7LS1odC1kZW5zaXR5LW1lbnUtdmVydGljYWw6dmFyKC0taHQtc2l6aW5nLXNpemUtMik7LS1odC1kZW5zaXR5LW1lbnUtaG9yaXpvbnRhbDp2YXIoLS1o''@;'; put 'put ''dC1zaXppbmctc2l6ZS0wKTstLWh0LWRlbnNpdHktbWVudS1pdGVtLXZlcnRpY2FsOnZhcigtLWh0LXNpemluZy1zaXplLTAtNSk7LS1odC1kZW5zaXR5LW1lbnUtaXRlbS1ob3Jpem9udGFsOnZhcigtLWh0LXNpemluZy1zaXplLTIpOy0taHQtY29sb3JzLXByaW1hcnktMTAwOiM3YWFkZmY7''@;'; put 'put ''LS1odC1jb2xvcnMtcHJpbWFyeS0yMDA6IzZhOWJmZjstLWh0LWNvbG9ycy1wcmltYXJ5LTMwMDojNjk4NWI5Oy0taHQtY29sb3JzLXByaW1hcnktNDAwOiM4ZWIwZTc7LS1odC1jb2xvcnMtcHJpbWFyeS01MDA6IzUyOTJmNzstLWh0LWNvbG9ycy1wcmltYXJ5LTYwMDojM2U3ZWUzOy0taHQt''@;'; put 'put ''Y29sb3JzLXBhbGV0dGUtNTA6I2YwZjBmMDstLWh0LWNvbG9ycy1wYWxldHRlLTEwMDojZGNkY2RjOy0taHQtY29sb3JzLXBhbGV0dGUtMjAwOiNjY2M7LS1odC1jb2xvcnMtcGFsZXR0ZS0zMDA6I2M2YzZjNjstLWh0LWNvbG9ycy1wYWxldHRlLTQwMDojOTk5Oy0taHQtY29sb3JzLXBhbGV0''@;'; put 'put ''dGUtNTAwOiM3Nzc7LS1odC1jb2xvcnMtcGFsZXR0ZS02MDA6IzVjNWM1YzstLWh0LWNvbG9ycy1wYWxldHRlLTcwMDojNDA0MDQwOy0taHQtY29sb3JzLXBhbGV0dGUtODAwOiMzMTMxMzE7LS1odC1jb2xvcnMtcGFsZXR0ZS05MDA6IzIyMjstLWh0LWNvbG9ycy1wYWxldHRlLTk1MDojMGYw''@;'; put 'put ''ZjEwOy0taHQtY29sb3JzLXdoaXRlOiNmZmY7LS1odC1jb2xvcnMtYmxhY2s6IzAwMDstLWh0LWNvbG9ycy10cmFuc3BhcmVudDojZmZmMDstLWh0LWZvbnQtZmFtaWx5OkludGVyOy0taHQtZm9udC1zaXplOjEzcHg7LS1odC1mb250LXNpemUtc21hbGw6MTFweDstLWh0LWxpbmUtaGVpZ2h0''@;'; put 'put ''OjIxcHg7LS1odC1saW5lLWhlaWdodC1zbWFsbDoxNnB4Oy0taHQtZm9udC13ZWlnaHQ6NDAwOy0taHQtbGV0dGVyLXNwYWNpbmc6MHB4Oy0taHQtYm9yZGVyLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS0yMDApKXZhcigtLWxpZ2h0bmlu''@;'; put 'put ''Z2Nzcy1kYXJrLHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTcwMCkpOy0taHQtYWNjZW50LWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcHJpbWFyeS01MDApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0LWNvbG9ycy1wcmltYXJ5LTEwMCkp''@;'; put 'put ''Oy0taHQtZm9yZWdyb3VuZC1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtODAwKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS0zMDApKTstLWh0LWZvcmVncm91bmQtc2Vjb25kYXJ5LWNvbG9yOnZh''@;'; put 'put ''cigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS01MDApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTQwMCkpOy0taHQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29s''@;'; put 'put ''b3JzLXdoaXRlKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS05NTApKTstLWh0LWJhY2tncm91bmQtc2Vjb25kYXJ5LWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS01MCkpdmFyKC0tbGlnaHRuaW5n''@;'; put 'put ''Y3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtOTAwKSk7LS1odC1wbGFjZWhvbGRlci1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNDAwKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS01''@;'; put 'put ''MDApKTstLWh0LXJlYWQtb25seS1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNTAwKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS00MDApKTstLWh0LWRpc2FibGVkLWNvbG9yOnZhcigtLWxpZ2h0''@;'; put 'put ''bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS00MDApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTUwMCkpOy0taHQtZ2FwLXNpemU6dmFyKC0taHQtZGVuc2l0eS1nYXApOy0taHQtaWNvbi1zaXplOnZhcigtLWh0LXNpemluZy1z''@;'; put 'put ''aXplLTMpOy0taHQtdGFibGUtdHJhbnNpdGlvbjowczstLWh0LWJvcmRlci1yYWRpdXM6dmFyKC0taHQtc2l6aW5nLXNpemUtMCk7LS1odC1iYXItZm9yZWdyb3VuZC1jb2xvcjp2YXIoLS1odC1mb3JlZ3JvdW5kLWNvbG9yKTstLWh0LWJhci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWJh''@;'; put 'put ''Y2tncm91bmQtc2Vjb25kYXJ5LWNvbG9yKTstLWh0LWJhci1ob3Jpem9udGFsLXBhZGRpbmc6dmFyKC0taHQtZGVuc2l0eS1iYXJzLWhvcml6b250YWwpOy0taHQtYmFyLXZlcnRpY2FsLXBhZGRpbmc6dmFyKC0taHQtZGVuc2l0eS1iYXJzLXZlcnRpY2FsKTstLWh0LXNoYWRvdy1jb2xvcjp2''@;'; put 'put ''YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtODAwKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS0zMDApKTstLWh0LXNoYWRvdy14OnZhcigtLWh0LXNpemluZy1zaXplLTAtMjUpOy0taHQtc2hhZG93LXk6dmFy''@;'; put 'put ''KC0taHQtc2l6aW5nLXNpemUtMC0yNSk7LS1odC1zaGFkb3ctYmx1cjp2YXIoLS1odC1zaXppbmctc2l6ZS0wKTstLWh0LXNoYWRvdy1vcGFjaXR5OjglOy0taHQtY2VsbC1ob3Jpem9udGFsLXBhZGRpbmc6dmFyKC0taHQtZGVuc2l0eS1jZWxsLWhvcml6b250YWwpOy0taHQtY2VsbC12ZXJ0''@;'; put 'put ''aWNhbC1wYWRkaW5nOnZhcigtLWh0LWRlbnNpdHktY2VsbC12ZXJ0aWNhbCk7LS1odC1jZWxsLWhvcml6b250YWwtYm9yZGVyLWNvbG9yOnZhcigtLWh0LWJvcmRlci1jb2xvcik7LS1odC1jZWxsLXZlcnRpY2FsLWJvcmRlci1jb2xvcjp2YXIoLS1odC1ib3JkZXItY29sb3IpOy0taHQtY2Vs''@;'; put 'put ''bC1zZWxlY3Rpb24tYm9yZGVyLWNvbG9yOnZhcigtLWh0LWFjY2VudC1jb2xvcik7LS1odC1jZWxsLXNlbGVjdGlvbi1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWFjY2VudC1jb2xvcik7LS1odC1jZWxsLXN1Y2Nlc3MtYmFja2dyb3VuZC1jb2xvcjojMzdiYzZjMzM7LS1odC1jZWxsLWVy''@;'; put 'put ''cm9yLWJhY2tncm91bmQtY29sb3I6I2ZhNGQzMjMzOy0taHQtY2VsbC1yZWFkLW9ubHktYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1jb2xvcnMtdHJhbnNwYXJlbnQpOy0taHQtY2VsbC1hdXRvZmlsbC1zaXplOnZhcigtLWh0LXNpemluZy1zaXplLTEtNSk7LS1odC1jZWxsLWF1dG9maWxs''@;'; put 'put ''LWhpdC1hcmVhLXNpemU6dmFyKC0taHQtc2l6aW5nLXNpemUtMyk7LS1odC1jZWxsLWF1dG9maWxsLWJvcmRlci13aWR0aDp2YXIoLS1odC1zaXppbmctc2l6ZS0wLTI1KTstLWh0LWNlbGwtYXV0b2ZpbGwtYm9yZGVyLXJhZGl1czp2YXIoLS1odC1zaXppbmctc2l6ZS0wKTstLWh0LWNlbGwt''@;'; put 'put ''YXV0b2ZpbGwtYm9yZGVyLWNvbG9yOnZhcigtLWh0LWJhY2tncm91bmQtY29sb3IpOy0taHQtY2VsbC1hdXRvZmlsbC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWFjY2VudC1jb2xvcik7LS1odC1jZWxsLWF1dG9maWxsLWZpbGwtYm9yZGVyLWNvbG9yOnZhcigtLWh0LWZvcmVncm91bmQt''@;'; put 'put ''Y29sb3IpOy0taHQtY2VsbC1lZGl0b3ItYm9yZGVyLXdpZHRoOjJweDstLWh0LWNlbGwtZWRpdG9yLWJvcmRlci1jb2xvcjp2YXIoLS1odC1hY2NlbnQtY29sb3IpOy0taHQtY2VsbC1lZGl0b3ItZm9yZWdyb3VuZC1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29s''@;'; put 'put ''b3JzLXBhbGV0dGUtOTUwKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMtd2hpdGUpKTstLWh0LWNlbGwtZWRpdG9yLWJhY2tncm91bmQtY29sb3I6dmFyKC0taHQtYmFja2dyb3VuZC1jb2xvcik7LS1odC1jZWxsLWVkaXRvci1zaGFkb3ctYmx1ci1yYWRpdXM6MHB4''@;'; put 'put ''Oy0taHQtY2VsbC1lZGl0b3Itc2hhZG93LWNvbG9yOnZhcigtLWh0LWFjY2VudC1jb2xvcik7LS1odC1jZWxsLW1vYmlsZS1oYW5kbGUtc2l6ZTp2YXIoLS1odC1zaXppbmctc2l6ZS0zKTstLWh0LWNlbGwtbW9iaWxlLWhhbmRsZS1ib3JkZXItd2lkdGg6dmFyKC0taHQtc2l6aW5nLXNpemUt''@;'; put 'put ''MC0yNSk7LS1odC1jZWxsLW1vYmlsZS1oYW5kbGUtYm9yZGVyLXJhZGl1czp2YXIoLS1odC1zaXppbmctc2l6ZS0zKTstLWh0LWNlbGwtbW9iaWxlLWhhbmRsZS1ib3JkZXItY29sb3I6dmFyKC0taHQtYWNjZW50LWNvbG9yKTstLWh0LWNlbGwtbW9iaWxlLWhhbmRsZS1iYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWh0LWFjY2VudC1jb2xvcik7LS1odC1jZWxsLW1vYmlsZS1oYW5kbGUtYmFja2dyb3VuZC1vcGFjaXR5OjQwJTstLWh0LWhlYWRlci1mb250LXdlaWdodDp2YXIoLS1odC1mb250LXdlaWdodCk7LS1odC1oZWFkZXItZm9yZWdyb3VuZC1jb2xvcjp2YXIoLS1odC1mb3JlZ3Jv''@;'; put 'put ''dW5kLWNvbG9yKTstLWh0LWhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWJhY2tncm91bmQtc2Vjb25kYXJ5LWNvbG9yKTstLWh0LWhlYWRlci1oaWdobGlnaHRlZC1zaGFkb3ctc2l6ZTowcHg7LS1odC1oZWFkZXItaGlnaGxpZ2h0ZWQtZm9yZWdyb3VuZC1jb2xvcjp2YXIoLS1o''@;'; put 'put ''dC1mb3JlZ3JvdW5kLWNvbG9yKTstLWh0LWhlYWRlci1oaWdobGlnaHRlZC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS0xMDApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTgw''@;'; put 'put ''MCkpOy0taHQtaGVhZGVyLWFjdGl2ZS1ib3JkZXItY29sb3I6dmFyKC0taHQtYm9yZGVyLWNvbG9yKTstLWh0LWhlYWRlci1hY3RpdmUtZm9yZWdyb3VuZC1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtOTUwKSl2YXIoLS1saWdodG5pbmdj''@;'; put 'put ''c3MtZGFyayx2YXIoLS1odC1jb2xvcnMtd2hpdGUpKTstLWh0LWhlYWRlci1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXByaW1hcnktNDAwKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMtcHJp''@;'; put 'put ''bWFyeS0zMDApKTstLWh0LWhlYWRlci1maWx0ZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1jZWxsLXN1Y2Nlc3MtYmFja2dyb3VuZC1jb2xvcik7LS1odC1oZWFkZXItcm93LWZvcmVncm91bmQtY29sb3I6dmFyKC0taHQtZm9yZWdyb3VuZC1jb2xvcik7LS1odC1oZWFkZXItcm93LWJh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0taHQtYmFja2dyb3VuZC1zZWNvbmRhcnktY29sb3IpOy0taHQtaGVhZGVyLXJvdy1oaWdobGlnaHRlZC1mb3JlZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWZvcmVncm91bmQtY29sb3IpOy0taHQtaGVhZGVyLXJvdy1oaWdobGlnaHRlZC1iYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS0xMDApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTgwMCkpOy0taHQtaGVhZGVyLXJvdy1hY3RpdmUtZm9yZWdyb3VuZC1jb2xvcjp2YXIoLS1saWdodG5p''@;'; put 'put ''bmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtOTUwKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMtd2hpdGUpKTstLWh0LWhlYWRlci1yb3ctYWN0aXZlLWJhY2tncm91bmQtY29sb3I6dmFyKC0tbGlnaHRuaW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNv''@;'; put 'put ''bG9ycy1wcmltYXJ5LTQwMCkpdmFyKC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXByaW1hcnktMzAwKSk7LS1odC1yb3ctaGVhZGVyLW9kZC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWhlYWRlci1yb3ctYmFja2dyb3VuZC1jb2xvcik7LS1odC1yb3ctaGVhZGVyLWV2''@;'; put 'put ''ZW4tYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1oZWFkZXItcm93LWJhY2tncm91bmQtY29sb3IpOy0taHQtcm93LWNlbGwtb2RkLWJhY2tncm91bmQtY29sb3I6dmFyKC0taHQtYmFja2dyb3VuZC1jb2xvcik7LS1odC1yb3ctY2VsbC1ldmVuLWJhY2tncm91bmQtY29sb3I6dmFyKC0taHQt''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcik7LS1odC1idXR0b24tYm9yZGVyLXJhZGl1czp2YXIoLS1odC1zaXppbmctc2l6ZS0wLTUpOy0taHQtYnV0dG9uLWhvcml6b250YWwtcGFkZGluZzp2YXIoLS1odC1kZW5zaXR5LWJ1dHRvbi1ob3Jpem9udGFsKTstLWh0LWJ1dHRvbi12ZXJ0aWNhbC1wYWRkaW5n''@;'; put 'put ''OnZhcigtLWh0LWRlbnNpdHktYnV0dG9uLXZlcnRpY2FsKTstLWh0LXByaW1hcnktYnV0dG9uLWJvcmRlci1jb2xvcjp2YXIoLS1odC1jb2xvcnMtdHJhbnNwYXJlbnQpOy0taHQtcHJpbWFyeS1idXR0b24tZm9yZWdyb3VuZC1jb2xvcjp2YXIoLS1odC1iYWNrZ3JvdW5kLWNvbG9yKTstLWh0''@;'; put 'put ''LXByaW1hcnktYnV0dG9uLWJhY2tncm91bmQtY29sb3I6dmFyKC0taHQtYWNjZW50LWNvbG9yKTstLWh0LXByaW1hcnktYnV0dG9uLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1odC1jb2xvcnMtdHJhbnNwYXJlbnQpOy0taHQtcHJpbWFyeS1idXR0b24tZGlzYWJsZWQtZm9yZWdyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1odC1kaXNhYmxlZC1jb2xvcik7LS1odC1wcmltYXJ5LWJ1dHRvbi1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS0xMDApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0''@;'; put 'put ''LWNvbG9ycy1wYWxldHRlLTgwMCkpOy0taHQtcHJpbWFyeS1idXR0b24taG92ZXItYm9yZGVyLWNvbG9yOnZhcigtLWh0LWNvbG9ycy10cmFuc3BhcmVudCk7LS1odC1wcmltYXJ5LWJ1dHRvbi1ob3Zlci1mb3JlZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWJhY2tncm91bmQtY29sb3IpOy0taHQt''@;'; put 'put ''cHJpbWFyeS1idXR0b24taG92ZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXByaW1hcnktNjAwKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMtcHJpbWFyeS0yMDApKTstLWh0LXByaW1hcnktYnV0dG9u''@;'; put 'put ''LWZvY3VzLWJvcmRlci1jb2xvcjp2YXIoLS1odC1iYWNrZ3JvdW5kLWNvbG9yKTstLWh0LXByaW1hcnktYnV0dG9uLWZvY3VzLWZvcmVncm91bmQtY29sb3I6dmFyKC0taHQtYmFja2dyb3VuZC1jb2xvcik7LS1odC1wcmltYXJ5LWJ1dHRvbi1mb2N1cy1iYWNrZ3JvdW5kLWNvbG9yOnZhcigt''@;'; put 'put ''LWh0LWFjY2VudC1jb2xvcik7LS1odC1zZWNvbmRhcnktYnV0dG9uLWJvcmRlci1jb2xvcjp2YXIoLS1odC1ib3JkZXItY29sb3IpOy0taHQtc2Vjb25kYXJ5LWJ1dHRvbi1mb3JlZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWZvcmVncm91bmQtY29sb3IpOy0taHQtc2Vjb25kYXJ5LWJ1dHRvbi1i''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWJhY2tncm91bmQtY29sb3IpOy0taHQtc2Vjb25kYXJ5LWJ1dHRvbi1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0taHQtYm9yZGVyLWNvbG9yKTstLWh0LXNlY29uZGFyeS1idXR0b24tZGlzYWJsZWQtZm9yZWdyb3VuZC1jb2xvcjp2YXIoLS1o''@;'; put 'put ''dC1kaXNhYmxlZC1jb2xvcik7LS1odC1zZWNvbmRhcnktYnV0dG9uLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tbGlnaHRuaW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTEwMCkpdmFyKC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXBhbGV0''@;'; put 'put ''dGUtODAwKSk7LS1odC1zZWNvbmRhcnktYnV0dG9uLWhvdmVyLWJvcmRlci1jb2xvcjp2YXIoLS1odC1ib3JkZXItY29sb3IpOy0taHQtc2Vjb25kYXJ5LWJ1dHRvbi1ob3Zlci1mb3JlZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWZvcmVncm91bmQtY29sb3IpOy0taHQtc2Vjb25kYXJ5LWJ1dHRv''@;'; put 'put ''bi1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS01MCkpdmFyKC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtOTAwKSk7LS1odC1zZWNvbmRhcnktYnV0dG9uLWZvY3VzLWJvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1odC1ib3JkZXItY29sb3IpOy0taHQtc2Vjb25kYXJ5LWJ1dHRvbi1mb2N1cy1mb3JlZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWZvcmVncm91bmQtY29sb3IpOy0taHQtc2Vjb25kYXJ5LWJ1dHRvbi1mb2N1cy1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWJhY2tncm91''@;'; put 'put ''bmQtc2Vjb25kYXJ5LWNvbG9yKTstLWh0LWljb24tYnV0dG9uLWJvcmRlci1yYWRpdXM6dmFyKC0taHQtc2l6aW5nLXNpemUtMC01KTstLWh0LWljb24tYnV0dG9uLWxhcmdlLWJvcmRlci1yYWRpdXM6dmFyKC0taHQtc2l6aW5nLXNpemUtMC01KTstLWh0LWljb24tYnV0dG9uLWxhcmdlLXBh''@;'; put 'put ''ZGRpbmc6dmFyKC0taHQtc2l6aW5nLXNpemUtMSk7LS1odC1pY29uLWJ1dHRvbi1ib3JkZXItY29sb3I6dmFyKC0tbGlnaHRuaW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTMwMCkpdmFyKC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNjAw''@;'; put 'put ''KSk7LS1odC1pY29uLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWJhY2tncm91bmQtc2Vjb25kYXJ5LWNvbG9yKTstLWh0LWljb24tYnV0dG9uLWljb24tY29sb3I6dmFyKC0tbGlnaHRuaW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTQwMCkpdmFyKC0tbGln''@;'; put 'put ''aHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNTAwKSk7LS1odC1pY29uLWJ1dHRvbi1oaXQtYXJlYS1zaXplOnZhcigtLWh0LXNpemluZy1zaXplLTYpOy0taHQtaWNvbi1idXR0b24taG92ZXItYm9yZGVyLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIo''@;'; put 'put ''LS1odC1jb2xvcnMtcGFsZXR0ZS00MDApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTUwMCkpOy0taHQtaWNvbi1idXR0b24taG92ZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXBhbGV0''@;'; put 'put ''dGUtNTApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTkwMCkpOy0taHQtaWNvbi1idXR0b24taG92ZXItaWNvbi1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNDAwKSl2YXIoLS1saWdodG5pbmdj''@;'; put 'put ''c3MtZGFyayx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS01MDApKTstLWh0LWljb24tYnV0dG9uLWFjdGl2ZS1ib3JkZXItY29sb3I6dmFyKC0tbGlnaHRuaW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTMwMCkpdmFyKC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29s''@;'; put 'put ''b3JzLXBhbGV0dGUtNjAwKSk7LS1odC1pY29uLWJ1dHRvbi1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1iYWNrZ3JvdW5kLXNlY29uZGFyeS1jb2xvcik7LS1odC1pY29uLWJ1dHRvbi1hY3RpdmUtaWNvbi1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQt''@;'; put 'put ''Y29sb3JzLXBhbGV0dGUtNDAwKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS01MDApKTstLWh0LWljb24tYnV0dG9uLWFjdGl2ZS1ob3Zlci1ib3JkZXItY29sb3I6dmFyKC0tbGlnaHRuaW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9ycy1wYWxldHRl''@;'; put 'put ''LTQwMCkpdmFyKC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNTAwKSk7LS1odC1pY29uLWJ1dHRvbi1hY3RpdmUtaG92ZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1iYWNrZ3JvdW5kLXNlY29uZGFyeS1jb2xvcik7LS1odC1pY29uLWJ1dHRvbi1hY3Rp''@;'; put 'put ''dmUtaG92ZXItaWNvbi1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNDAwKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS01MDApKTstLWh0LWNvbGxhcHNlLWJ1dHRvbi1ib3JkZXItcmFkaXVzOnZh''@;'; put 'put ''cigtLWh0LXNpemluZy1zaXplLTQpOy0taHQtY29sbGFwc2UtYnV0dG9uLW9wZW4tYm9yZGVyLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS0zMDApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTYw''@;'; put 'put ''MCkpOy0taHQtY29sbGFwc2UtYnV0dG9uLW9wZW4tYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXdoaXRlKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS05NTApKTstLWh0LWNvbGxhcHNlLWJ1''@;'; put 'put ''dHRvbi1vcGVuLWljb24tY29sb3I6dmFyKC0tbGlnaHRuaW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTQwMCkpdmFyKC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNTAwKSk7LS1odC1jb2xsYXBzZS1idXR0b24tb3Blbi1pY29uLWFjdGl2''@;'; put 'put ''ZS1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNDAwKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS01MDApKTstLWh0LWNvbGxhcHNlLWJ1dHRvbi1vcGVuLWhvdmVyLWJvcmRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtMzAwKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS02MDApKTstLWh0LWNvbGxhcHNlLWJ1dHRvbi1vcGVuLWhvdmVyLWJhY2tncm91bmQtY29sb3I6dmFyKC0tbGlnaHRu''@;'; put 'put ''aW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9ycy13aGl0ZSkpdmFyKC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtOTUwKSk7LS1odC1jb2xsYXBzZS1idXR0b24tb3Blbi1ob3Zlci1pY29uLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1o''@;'; put 'put ''dC1jb2xvcnMtcGFsZXR0ZS00MDApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTUwMCkpOy0taHQtY29sbGFwc2UtYnV0dG9uLW9wZW4taG92ZXItaWNvbi1hY3RpdmUtY29sb3I6dmFyKC0tbGlnaHRuaW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9y''@;'; put 'put ''cy1wYWxldHRlLTQwMCkpdmFyKC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNTAwKSk7LS1odC1jb2xsYXBzZS1idXR0b24tY2xvc2UtYm9yZGVyLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS0zMDApKXZh''@;'; put 'put ''cigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTYwMCkpOy0taHQtY29sbGFwc2UtYnV0dG9uLWNsb3NlLWJhY2tncm91bmQtY29sb3I6dmFyKC0tbGlnaHRuaW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTUwKSl2YXIoLS1saWdodG5pbmdj''@;'; put 'put ''c3MtZGFyayx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS05MDApKTstLWh0LWNvbGxhcHNlLWJ1dHRvbi1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS00MDApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0LWNv''@;'; put 'put ''bG9ycy1wYWxldHRlLTUwMCkpOy0taHQtY29sbGFwc2UtYnV0dG9uLWNsb3NlLWljb24tYWN0aXZlLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS00MDApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0LWNvbG9ycy1wYWxldHRl''@;'; put 'put ''LTUwMCkpOy0taHQtY29sbGFwc2UtYnV0dG9uLWNsb3NlLWhvdmVyLWJvcmRlci1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtMzAwKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS02MDApKTstLWh0''@;'; put 'put ''LWNvbGxhcHNlLWJ1dHRvbi1jbG9zZS1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS01MCkpdmFyKC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtOTAwKSk7LS1odC1jb2xsYXBz''@;'; put 'put ''ZS1idXR0b24tY2xvc2UtaG92ZXItaWNvbi1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNDAwKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS01MDApKTstLWh0LWNvbGxhcHNlLWJ1dHRvbi1jbG9z''@;'; put 'put ''ZS1ob3Zlci1pY29uLWFjdGl2ZS1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNDAwKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS01MDApKTstLWh0LWxpbmstY29sb3I6dmFyKC0tbGlnaHRuaW5n''@;'; put 'put ''Y3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9ycy1wcmltYXJ5LTYwMCkpdmFyKC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXByaW1hcnktMjAwKSk7LS1odC1saW5rLWhvdmVyLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcHJpbWFyeS02''@;'; put 'put ''MDApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0LWNvbG9ycy1wcmltYXJ5LTIwMCkpOy0taHQtaW5wdXQtYm9yZGVyLXdpZHRoOjFweDstLWh0LWlucHV0LWJvcmRlci1yYWRpdXM6dmFyKC0taHQtc2l6aW5nLXNpemUtMSk7LS1odC1pbnB1dC1ob3Jpem9udGFsLXBhZGRpbmc6''@;'; put 'put ''dmFyKC0taHQtZGVuc2l0eS1pbnB1dC1ob3Jpem9udGFsKTstLWh0LWlucHV0LXZlcnRpY2FsLXBhZGRpbmc6dmFyKC0taHQtZGVuc2l0eS1pbnB1dC12ZXJ0aWNhbCk7LS1odC1pbnB1dC1ib3JkZXItY29sb3I6dmFyKC0taHQtYm9yZGVyLWNvbG9yKTstLWh0LWlucHV0LWZvcmVncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0taHQtZm9yZWdyb3VuZC1jb2xvcik7LS1odC1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWJhY2tncm91bmQtc2Vjb25kYXJ5LWNvbG9yKTstLWh0LWlucHV0LWhvdmVyLWJvcmRlci1jb2xvcjp2YXIoLS1odC1ib3JkZXItY29sb3IpOy0taHQtaW5wdXQtaG92''@;'; put 'put ''ZXItZm9yZWdyb3VuZC1jb2xvcjp2YXIoLS1odC1mb3JlZ3JvdW5kLWNvbG9yKTstLWh0LWlucHV0LWhvdmVyLWJhY2tncm91bmQtY29sb3I6dmFyKC0taHQtYmFja2dyb3VuZC1zZWNvbmRhcnktY29sb3IpOy0taHQtaW5wdXQtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWh0LWJvcmRl''@;'; put 'put ''ci1jb2xvcik7LS1odC1pbnB1dC1kaXNhYmxlZC1mb3JlZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWRpc2FibGVkLWNvbG9yKTstLWh0LWlucHV0LWRpc2FibGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tbGlnaHRuaW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTMwMCkpdmFy''@;'; put 'put ''KC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNjAwKSk7LS1odC1pbnB1dC1mb2N1cy1ib3JkZXItY29sb3I6dmFyKC0taHQtYWNjZW50LWNvbG9yKTstLWh0LWlucHV0LWZvY3VzLWZvcmVncm91bmQtY29sb3I6dmFyKC0taHQtZm9yZWdyb3VuZC1jb2xvcik7''@;'; put 'put ''LS1odC1pbnB1dC1mb2N1cy1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWJhY2tncm91bmQtc2Vjb25kYXJ5LWNvbG9yKTstLWh0LWNoZWNrYm94LXNpemU6dmFyKC0taHQtaWNvbi1zaXplKTstLWh0LWNoZWNrYm94LWJvcmRlci1yYWRpdXM6dmFyKC0taHQtc2l6aW5nLXNpemUtMC01KTst''@;'; put 'put ''LWh0LWNoZWNrYm94LWJvcmRlci1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNDAwKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS01MDApKTstLWh0LWNoZWNrYm94LWJhY2tncm91bmQtY29sb3I6''@;'; put 'put ''dmFyKC0taHQtYmFja2dyb3VuZC1jb2xvcik7LS1odC1jaGVja2JveC1pY29uLWNvbG9yOnZhcigtLWh0LWNvbG9ycy10cmFuc3BhcmVudCk7LS1odC1jaGVja2JveC1mb2N1cy1ib3JkZXItY29sb3I6dmFyKC0tbGlnaHRuaW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTQw''@;'; put 'put ''MCkpdmFyKC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNTAwKSk7LS1odC1jaGVja2JveC1mb2N1cy1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWJhY2tncm91bmQtY29sb3IpOy0taHQtY2hlY2tib3gtZm9jdXMtaWNvbi1jb2xvcjp2YXIoLS1odC1jb2xv''@;'; put 'put ''cnMtdHJhbnNwYXJlbnQpOy0taHQtY2hlY2tib3gtZm9jdXMtcmluZy1jb2xvcjp2YXIoLS1odC1hY2NlbnQtY29sb3IpOy0taHQtY2hlY2tib3gtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS0zMDApKXZhcigt''@;'; put 'put ''LWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTYwMCkpOy0taHQtY2hlY2tib3gtZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtMTAwKSl2YXIoLS1saWdodG5pbmdjc3MtZGFy''@;'; put 'put ''ayx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS04MDApKTstLWh0LWNoZWNrYm94LWRpc2FibGVkLWljb24tY29sb3I6dmFyKC0taHQtY29sb3JzLXRyYW5zcGFyZW50KTstLWh0LWNoZWNrYm94LWNoZWNrZWQtYm9yZGVyLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1j''@;'; put 'put ''b2xvcnMtcHJpbWFyeS02MDApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0LWNvbG9ycy1wcmltYXJ5LTIwMCkpOy0taHQtY2hlY2tib3gtY2hlY2tlZC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWFjY2VudC1jb2xvcik7LS1odC1jaGVja2JveC1jaGVja2VkLWljb24tY29s''@;'; put 'put ''b3I6dmFyKC0taHQtYmFja2dyb3VuZC1jb2xvcik7LS1odC1jaGVja2JveC1jaGVja2VkLWZvY3VzLWJvcmRlci1jb2xvcjp2YXIoLS1odC1iYWNrZ3JvdW5kLWNvbG9yKTstLWh0LWNoZWNrYm94LWNoZWNrZWQtZm9jdXMtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1hY2NlbnQtY29sb3Ip''@;'; put 'put ''Oy0taHQtY2hlY2tib3gtY2hlY2tlZC1mb2N1cy1pY29uLWNvbG9yOnZhcigtLWh0LWJhY2tncm91bmQtY29sb3IpOy0taHQtY2hlY2tib3gtY2hlY2tlZC1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tbGlnaHRuaW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTMwMCkp''@;'; put 'put ''dmFyKC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNjAwKSk7LS1odC1jaGVja2JveC1jaGVja2VkLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tbGlnaHRuaW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTEwMCkpdmFyKC0tbGln''@;'; put 'put ''aHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtODAwKSk7LS1odC1jaGVja2JveC1jaGVja2VkLWRpc2FibGVkLWljb24tY29sb3I6dmFyKC0tbGlnaHRuaW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTMwMCkpdmFyKC0tbGlnaHRuaW5nY3NzLWRhcmss''@;'; put 'put ''dmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNjAwKSk7LS1odC1jaGVja2JveC1pbmRldGVybWluYXRlLWJvcmRlci1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXByaW1hcnktNjAwKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMt''@;'; put 'put ''cHJpbWFyeS0yMDApKTstLWh0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1hY2NlbnQtY29sb3IpOy0taHQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1pY29uLWNvbG9yOnZhcigtLWh0LWJhY2tncm91bmQtY29sb3IpOy0taHQtY2hlY2tib3gtaW5k''@;'; put 'put ''ZXRlcm1pbmF0ZS1mb2N1cy1ib3JkZXItY29sb3I6dmFyKC0taHQtYmFja2dyb3VuZC1jb2xvcik7LS1odC1jaGVja2JveC1pbmRldGVybWluYXRlLWZvY3VzLWJhY2tncm91bmQtY29sb3I6dmFyKC0taHQtYWNjZW50LWNvbG9yKTstLWh0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtZm9jdXMt''@;'; put 'put ''aWNvbi1jb2xvcjp2YXIoLS1odC1iYWNrZ3JvdW5kLWNvbG9yKTstLWh0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS0zMDApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJr''@;'; put 'put ''LHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTYwMCkpOy0taHQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS0xMDApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZh''@;'; put 'put ''cigtLWh0LWNvbG9ycy1wYWxldHRlLTgwMCkpOy0taHQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1kaXNhYmxlZC1pY29uLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS0zMDApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0LWNv''@;'; put 'put ''bG9ycy1wYWxldHRlLTYwMCkpOy0taHQtcmFkaW8tc2l6ZTp2YXIoLS1odC1pY29uLXNpemUpOy0taHQtcmFkaW8tYm9yZGVyLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS00MDApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0''@;'; put 'put ''LWNvbG9ycy1wYWxldHRlLTUwMCkpOy0taHQtcmFkaW8tYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1iYWNrZ3JvdW5kLWNvbG9yKTstLWh0LXJhZGlvLWljb24tY29sb3I6dmFyKC0taHQtY29sb3JzLXRyYW5zcGFyZW50KTstLWh0LXJhZGlvLWZvY3VzLWJvcmRlci1jb2xvcjp2YXIoLS1s''@;'; put 'put ''aWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNDAwKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS01MDApKTstLWh0LXJhZGlvLWZvY3VzLWJhY2tncm91bmQtY29sb3I6dmFyKC0taHQtYmFja2dyb3VuZC1jb2xvcik7LS1o''@;'; put 'put ''dC1yYWRpby1mb2N1cy1pY29uLWNvbG9yOnZhcigtLWh0LWNvbG9ycy10cmFuc3BhcmVudCk7LS1odC1yYWRpby1mb2N1cy1yaW5nLWNvbG9yOnZhcigtLWh0LWFjY2VudC1jb2xvcik7LS1odC1yYWRpby1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tbGlnaHRuaW5nY3NzLWxpZ2h0LHZh''@;'; put 'put ''cigtLWh0LWNvbG9ycy1wYWxldHRlLTMwMCkpdmFyKC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNjAwKSk7LS1odC1yYWRpby1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0''@;'; put 'put ''ZS0xMDApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTgwMCkpOy0taHQtcmFkaW8tZGlzYWJsZWQtaWNvbi1jb2xvcjp2YXIoLS1odC1jb2xvcnMtdHJhbnNwYXJlbnQpOy0taHQtcmFkaW8tY2hlY2tlZC1ib3JkZXItY29sb3I6dmFyKC0taHQtYWNj''@;'; put 'put ''ZW50LWNvbG9yKTstLWh0LXJhZGlvLWNoZWNrZWQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1iYWNrZ3JvdW5kLWNvbG9yKTstLWh0LXJhZGlvLWNoZWNrZWQtaWNvbi1jb2xvcjp2YXIoLS1odC1hY2NlbnQtY29sb3IpOy0taHQtcmFkaW8tY2hlY2tlZC1mb2N1cy1ib3JkZXItY29sb3I6''@;'; put 'put ''dmFyKC0tbGlnaHRuaW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9ycy1wcmltYXJ5LTYwMCkpdmFyKC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXByaW1hcnktMjAwKSk7LS1odC1yYWRpby1jaGVja2VkLWZvY3VzLWJhY2tncm91bmQtY29sb3I6dmFyKC0taHQtYmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcik7LS1odC1yYWRpby1jaGVja2VkLWZvY3VzLWljb24tY29sb3I6dmFyKC0taHQtYWNjZW50LWNvbG9yKTstLWh0LXJhZGlvLWNoZWNrZWQtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS0zMDAp''@;'; put 'put ''KXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTYwMCkpOy0taHQtcmFkaW8tY2hlY2tlZC1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS0xMDApKXZhcigtLWxpZ2h0''@;'; put 'put ''bmluZ2Nzcy1kYXJrLHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTgwMCkpOy0taHQtcmFkaW8tY2hlY2tlZC1kaXNhYmxlZC1pY29uLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS0zMDApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigt''@;'; put 'put ''LWh0LWNvbG9ycy1wYWxldHRlLTYwMCkpOy0taHQtbW92ZS1iYWNrbGlnaHQtY29sb3I6dmFyKC0tbGlnaHRuaW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTgwMCkpdmFyKC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtMzAwKSk7LS1odC1t''@;'; put 'put ''b3ZlLWJhY2tsaWdodC1vcGFjaXR5OjE2JTstLWh0LW1vdmUtaW5kaWNhdG9yLWNvbG9yOnZhcigtLWxpZ2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS00MDApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTUwMCkpOy0taHQt''@;'; put 'put ''cmVzaXplLWluZGljYXRvci1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNDAwKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS01MDApKTstLWh0LWhpZGRlbi1pbmRpY2F0b3ItY29sb3I6dmFyKC0t''@;'; put 'put ''bGlnaHRuaW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTQwMCkpdmFyKC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNTAwKSk7LS1odC1tZW51LWJvcmRlci13aWR0aDoxcHg7LS1odC1tZW51LWJvcmRlci1yYWRpdXM6MHB4Oy0taHQtbWVu''@;'; put 'put ''dS1ob3Jpem9udGFsLXBhZGRpbmc6dmFyKC0taHQtZGVuc2l0eS1tZW51LWhvcml6b250YWwpOy0taHQtbWVudS12ZXJ0aWNhbC1wYWRkaW5nOnZhcigtLWh0LWRlbnNpdHktbWVudS12ZXJ0aWNhbCk7LS1odC1tZW51LWl0ZW0taG9yaXpvbnRhbC1wYWRkaW5nOnZhcigtLWh0LWRlbnNpdHkt''@;'; put 'put ''bWVudS1pdGVtLWhvcml6b250YWwpOy0taHQtbWVudS1pdGVtLXZlcnRpY2FsLXBhZGRpbmc6dmFyKC0taHQtZGVuc2l0eS1tZW51LWl0ZW0tdmVydGljYWwpOy0taHQtbWVudS1ib3JkZXItY29sb3I6dmFyKC0taHQtYm9yZGVyLWNvbG9yKTstLWh0LW1lbnUtc2hhZG93LXg6dmFyKC0taHQt''@;'; put 'put ''c2hhZG93LXgpOy0taHQtbWVudS1zaGFkb3cteTp2YXIoLS1odC1zaGFkb3cteSk7LS1odC1tZW51LXNoYWRvdy1ibHVyOnZhcigtLWh0LXNoYWRvdy1ibHVyKTstLWh0LW1lbnUtc2hhZG93LWNvbG9yOnZhcigtLWh0LWJvcmRlci1jb2xvcik7LS1odC1tZW51LXNoYWRvdy1vcGFjaXR5OjEw''@;'; put 'put ''MCU7LS1odC1tZW51LWl0ZW0taG92ZXItY29sb3I6dmFyKC0tbGlnaHRuaW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTgwMCkpdmFyKC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtMzAwKSk7LS1odC1tZW51LWl0ZW0taG92ZXItY29sb3It''@;'; put 'put ''b3BhY2l0eTo4JTstLWh0LW1lbnUtaXRlbS1hY3RpdmUtY29sb3I6dmFyKC0tbGlnaHRuaW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTgwMCkpdmFyKC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtMzAwKSk7LS1odC1tZW51LWl0ZW0tYWN0''@;'; put 'put ''aXZlLWNvbG9yLW9wYWNpdHk6MTIlOy0taHQtY29tbWVudHMtdGV4dGFyZWEtaG9yaXpvbnRhbC1wYWRkaW5nOnZhcigtLWh0LWRlbnNpdHktY2VsbC1ob3Jpem9udGFsKTstLWh0LWNvbW1lbnRzLXRleHRhcmVhLXZlcnRpY2FsLXBhZGRpbmc6dmFyKC0taHQtZGVuc2l0eS1jZWxsLXZlcnRp''@;'; put 'put ''Y2FsKTstLWh0LWNvbW1lbnRzLXRleHRhcmVhLWJvcmRlci13aWR0aDoxcHg7LS1odC1jb21tZW50cy10ZXh0YXJlYS1ib3JkZXItY29sb3I6dmFyKC0taHQtYm9yZGVyLWNvbG9yKTstLWh0LWNvbW1lbnRzLXRleHRhcmVhLWZvcmVncm91bmQtY29sb3I6dmFyKC0taHQtZm9yZWdyb3VuZC1j''@;'; put 'put ''b2xvcik7LS1odC1jb21tZW50cy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWJhY2tncm91bmQtc2Vjb25kYXJ5LWNvbG9yKTstLWh0LWNvbW1lbnRzLXRleHRhcmVhLWZvY3VzLWJvcmRlci13aWR0aDoxcHg7LS1odC1jb21tZW50cy10ZXh0YXJlYS1mb2N1cy1ib3JkZXIt''@;'; put 'put ''Y29sb3I6dmFyKC0taHQtYWNjZW50LWNvbG9yKTstLWh0LWNvbW1lbnRzLXRleHRhcmVhLWZvY3VzLWZvcmVncm91bmQtY29sb3I6dmFyKC0taHQtZm9yZWdyb3VuZC1jb2xvcik7LS1odC1jb21tZW50cy10ZXh0YXJlYS1mb2N1cy1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWJhY2tncm91''@;'; put 'put ''bmQtY29sb3IpOy0taHQtY29tbWVudHMtaW5kaWNhdG9yLXNpemU6dmFyKC0taHQtc2l6aW5nLXNpemUtMS01KTstLWh0LWNvbW1lbnRzLWluZGljYXRvci1jb2xvcjp2YXIoLS1odC1hY2NlbnQtY29sb3IpOy0taHQtbGljZW5zZS1ob3Jpem9udGFsLXBhZGRpbmc6dmFyKC0taHQtYmFyLWhv''@;'; put 'put ''cml6b250YWwtcGFkZGluZyk7LS1odC1saWNlbnNlLXZlcnRpY2FsLXBhZGRpbmc6dmFyKC0taHQtYmFyLXZlcnRpY2FsLXBhZGRpbmcpOy0taHQtbGljZW5zZS1mb3JlZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWJhci1mb3JlZ3JvdW5kLWNvbG9yKTstLWh0LWxpY2Vuc2UtYmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1odC1iYXItYmFja2dyb3VuZC1jb2xvcik7LS1odC1wYWdpbmF0aW9uLWJhci1mb3JlZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWJhci1mb3JlZ3JvdW5kLWNvbG9yKTstLWh0LXBhZ2luYXRpb24tYmFyLWJhY2tncm91bmQtY29sb3I6dmFyKC0taHQtYmFyLWJhY2tncm91bmQt''@;'; put 'put ''Y29sb3IpOy0taHQtcGFnaW5hdGlvbi1iYXItaG9yaXpvbnRhbC1wYWRkaW5nOnZhcigtLWh0LWJhci1ob3Jpem9udGFsLXBhZGRpbmcpOy0taHQtcGFnaW5hdGlvbi1iYXItdmVydGljYWwtcGFkZGluZzp2YXIoLS1odC1iYXItdmVydGljYWwtcGFkZGluZyk7LS1odC1wYWdpbmF0aW9uLWJ1''@;'; put 'put ''dHRvbi1ib3JkZXItY29sb3I6dmFyKC0taHQtcGFnaW5hdGlvbi1iYXItYmFja2dyb3VuZC1jb2xvcik7LS1odC1wYWdpbmF0aW9uLWJ1dHRvbi1mb3JlZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWZvcmVncm91bmQtc2Vjb25kYXJ5LWNvbG9yKTstLWh0LXBhZ2luYXRpb24tYnV0dG9uLWJhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6dmFyKC0taHQtcGFnaW5hdGlvbi1iYXItYmFja2dyb3VuZC1jb2xvcik7LS1odC1wYWdpbmF0aW9uLWJ1dHRvbi1ob3Zlci1ib3JkZXItY29sb3I6dmFyKC0tbGlnaHRuaW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTUwKSl2YXIoLS1saWdodG5pbmdj''@;'; put 'put ''c3MtZGFyayx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS05MDApKTstLWh0LXBhZ2luYXRpb24tYnV0dG9uLWhvdmVyLWZvcmVncm91bmQtY29sb3I6dmFyKC0taHQtZm9yZWdyb3VuZC1jb2xvcik7LS1odC1wYWdpbmF0aW9uLWJ1dHRvbi1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWxp''@;'; put 'put ''Z2h0bmluZ2Nzcy1saWdodCx2YXIoLS1odC1jb2xvcnMtcGFsZXR0ZS0xMDApKXZhcigtLWxpZ2h0bmluZ2Nzcy1kYXJrLHZhcigtLWh0LWNvbG9ycy1wYWxldHRlLTgwMCkpOy0taHQtcGFnaW5hdGlvbi1idXR0b24tZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWh0LXBhZ2luYXRpb24t''@;'; put 'put ''YmFyLWJhY2tncm91bmQtY29sb3IpOy0taHQtcGFnaW5hdGlvbi1idXR0b24tZGlzYWJsZWQtZm9yZWdyb3VuZC1jb2xvcjp2YXIoLS1odC1kaXNhYmxlZC1jb2xvcik7LS1odC1wYWdpbmF0aW9uLWJ1dHRvbi1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWh0LXBhZ2luYXRpb24t''@;'; put 'put ''YmFyLWJhY2tncm91bmQtY29sb3IpOy0taHQtcGFnaW5hdGlvbi1idXR0b24tZm9jdXMtYm9yZGVyLWNvbG9yOnZhcigtLWh0LWFjY2VudC1jb2xvcik7LS1odC1wYWdpbmF0aW9uLWJ1dHRvbi1mb2N1cy1mb3JlZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWZvcmVncm91bmQtY29sb3IpOy0taHQt''@;'; put 'put ''cGFnaW5hdGlvbi1idXR0b24tZm9jdXMtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1odC1wYWdpbmF0aW9uLWJhci1iYWNrZ3JvdW5kLWNvbG9yKTstLWh0LWRpYWxvZy1zZW1pLXRyYW5zcGFyZW50LWJhY2tncm91bmQtY29sb3I6dmFyKC0tbGlnaHRuaW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNv''@;'; put 'put ''bG9ycy13aGl0ZSkpdmFyKC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtOTUwKSk7LS1odC1kaWFsb2ctc2VtaS10cmFuc3BhcmVudC1iYWNrZ3JvdW5kLW9wYWNpdHk6ODAlOy0taHQtZGlhbG9nLXNvbGlkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tbGlnaHRu''@;'; put 'put ''aW5nY3NzLWxpZ2h0LHZhcigtLWh0LWNvbG9ycy13aGl0ZSkpdmFyKC0tbGlnaHRuaW5nY3NzLWRhcmssdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtOTUwKSk7LS1odC1kaWFsb2ctY29udGVudC1wYWRkaW5nLWhvcml6b250YWw6dmFyKC0taHQtZGVuc2l0eS1kaWFsb2ctaG9yaXpvbnRhbCk7''@;'; put 'put ''LS1odC1kaWFsb2ctY29udGVudC1wYWRkaW5nLXZlcnRpY2FsOnZhcigtLWh0LWRlbnNpdHktZGlhbG9nLXZlcnRpY2FsKTstLWh0LWRpYWxvZy1jb250ZW50LWJvcmRlci1yYWRpdXM6dmFyKC0taHQtc2l6aW5nLXNpemUtMik7LS1odC1kaWFsb2ctY29udGVudC1iYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWh0LWJhY2tncm91bmQtc2Vjb25kYXJ5LWNvbG9yKTstLWh0LW5vdGlmaWNhdGlvbi1mb3JlZ3JvdW5kLWNvbG9yOnZhcigtLWh0LWZvcmVncm91bmQtY29sb3IpOy0taHQtbm90aWZpY2F0aW9uLWJhY2tncm91bmQtY29sb3I6dmFyKC0taHQtYmFja2dyb3VuZC1jb2xvcik7LS1o''@;'; put 'put ''dC1ub3RpZmljYXRpb24tYm9yZGVyLWNvbG9yOnZhcigtLWh0LWJvcmRlci1jb2xvcik7LS1odC1ub3RpZmljYXRpb24tc3VjY2Vzcy1hY2NlbnQ6IzM3YmM2YzstLWh0LW5vdGlmaWNhdGlvbi13YXJuaW5nLWFjY2VudDojZmJlOTUyOy0taHQtbm90aWZpY2F0aW9uLWVycm9yLWFjY2VudDoj''@;'; put 'put ''ZmE0ZDMyOy0taHQtY2hpcC1iYWNrZ3JvdW5kOnZhcigtLWh0LWJhY2tncm91bmQtc2Vjb25kYXJ5LWNvbG9yKTstLWh0LWNoaXAtYm9yZGVyLXJhZGl1czp2YXIoLS1odC1zaXppbmctc2l6ZS0wLTUpOy0taHQtY2hpcC12ZXJ0aWNhbC1wYWRkaW5nOnZhcigtLWh0LXNpemluZy1zaXplLTAp''@;'; put 'put ''Oy0taHQtY2hpcC1ob3Jpem9udGFsLXBhZGRpbmc6dmFyKC0taHQtc2l6aW5nLXNpemUtMSk7LS1odC1jaGlwLWdhcDp2YXIoLS1odC1zaXppbmctc2l6ZS0xKTstLWh0LXNjcm9sbGJhci1ib3JkZXItcmFkaXVzOnZhcigtLWh0LXNpemluZy1zaXplLTIpOy0taHQtc2Nyb2xsYmFyLXRyYWNr''@;'; put 'put ''LWNvbG9yOnZhcigtLWh0LWJhY2tncm91bmQtc2Vjb25kYXJ5LWNvbG9yKTstLWh0LXNjcm9sbGJhci10aHVtYi1jb2xvcjp2YXIoLS1saWdodG5pbmdjc3MtbGlnaHQsdmFyKC0taHQtY29sb3JzLXBhbGV0dGUtNDAwKSl2YXIoLS1saWdodG5pbmdjc3MtZGFyayx2YXIoLS1odC1jb2xvcnMt''@;'; put 'put ''cGFsZXR0ZS01MDApKX0uaHQtdGhlbWUtY2xhc3NpY3stLWxpZ2h0bmluZ2Nzcy1saWdodDppbml0aWFsOy0tbGlnaHRuaW5nY3NzLWRhcms6IDtjb2xvci1zY2hlbWU6bGlnaHR9Lmh0LXRoZW1lLWNsYXNzaWMtZGFya3stLWxpZ2h0bmluZ2Nzcy1saWdodDogOy0tbGlnaHRuaW5nY3NzLWRh''@;'; put 'put ''cms6aW5pdGlhbDtjb2xvci1zY2hlbWU6ZGFya30uaHQtdGhlbWUtY2xhc3NpYy1kYXJrLWF1dG97LS1saWdodG5pbmdjc3MtbGlnaHQ6aW5pdGlhbDstLWxpZ2h0bmluZ2Nzcy1kYXJrOiA7Y29sb3Itc2NoZW1lOmxpZ2h0IGRhcmt9QG1lZGlhKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmsp''@;'; put 'put ''ey5odC10aGVtZS1jbGFzc2ljLWRhcmstYXV0b3stLWxpZ2h0bmluZ2Nzcy1saWdodDogOy0tbGlnaHRuaW5nY3NzLWRhcms6aW5pdGlhbH19Y2xyLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjA7aGVpZ2h0OjE2cHg7d2lkdGg6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7''@;'; put 'put ''ZmlsbDpjdXJyZW50Q29sb3J9Y2xyLWljb24gLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTpjdXJyZW50Q29sb3J9Y2xyLWljb24uaXMtZ3JlZW4sY2xyLWljb24uaXMtc3VjY2Vzc3tmaWxsOiMyZTg1MDB9Y2xyLWljb24uaXMtZ3JlZW4gLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tl''@;'; put 'put ''LGNsci1pY29uLmlzLXN1Y2Nlc3MgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojMmU4NTAwfWNsci1pY29uLmlzLXJlZCxjbHItaWNvbi5pcy1kYW5nZXIsY2xyLWljb24uaXMtZXJyb3J7ZmlsbDojZTAyMjAwfWNsci1pY29uLmlzLXJlZCAudHJhbnNwYXJlbnQtZmlsbC1zdHJv''@;'; put 'put ''a2UsY2xyLWljb24uaXMtZGFuZ2VyIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZSxjbHItaWNvbi5pcy1lcnJvciAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiNlMDIyMDB9Y2xyLWljb24uaXMtd2FybmluZ3tmaWxsOiNjMjdiMDB9Y2xyLWljb24uaXMtd2FybmluZyAudHJhbnNw''@;'; put 'put ''YXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiNjMjdiMDB9Y2xyLWljb24uaXMtYmx1ZSxjbHItaWNvbi5pcy1pbmZve2ZpbGw6IzAwNzdiOH1jbHItaWNvbi5pcy1ibHVlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZSxjbHItaWNvbi5pcy1pbmZvIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtz''@;'; put 'put ''dHJva2U6IzAwNzdiOH1jbHItaWNvbi5pcy13aGl0ZSxjbHItaWNvbi5pcy1pbnZlcnNle2ZpbGw6I2ZmZn1jbHItaWNvbi5pcy13aGl0ZSAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2UsY2xyLWljb24uaXMtaW52ZXJzZSAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiNmZmZ9Y2xy''@;'; put 'put ''LWljb24uaXMtaGlnaGxpZ2h0e2ZpbGw6IzAwNzdiOH1jbHItaWNvbi5pcy1oaWdobGlnaHQgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojMDA3N2I4fWNsci1pY29uW3NoYXBlJD0iIHVwIl0gc3ZnLGNsci1pY29uW2Rpcj11cF0gc3Zne3RyYW5zZm9ybTpyb3RhdGUoMCl9Y2xy''@;'; put 'put ''LWljb25bc2hhcGUkPSIgZG93biJdIHN2ZyxjbHItaWNvbltkaXI9ZG93bl0gc3Zne3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX1jbHItaWNvbltzaGFwZSQ9IiByaWdodCJdIHN2ZyxjbHItaWNvbltkaXI9cmlnaHRdIHN2Z3t0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX1jbHItaWNvbltzaGFw''@;'; put 'put ''ZSQ9IiBsZWZ0Il0gc3ZnLGNsci1pY29uW2Rpcj1sZWZ0XSBzdmd7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfWNsci1pY29uW2ZsaXA9aG9yaXpvbnRhbF0gc3Zne3RyYW5zZm9ybTpzY2FsZSgtMSkgcm90YXRlWCgxODBkZWcpfWNsci1pY29uW2ZsaXA9dmVydGljYWxdIHN2Z3t0cmFuc2Zv''@;'; put 'put ''cm06c2NhbGUoLTEpIHJvdGF0ZVkoMTgwZGVnKX1jbHItaWNvbiAuY2xyLWktYmFkZ2V7ZmlsbDojZTAyMjAwfWNsci1pY29uIC5jbHItaS1iYWRnZSAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiNlMDIyMDB9Y2xyLWljb24+KntoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2Rpc3Bs''@;'; put 'put ''YXk6YmxvY2s7cG9pbnRlci1ldmVudHM6bm9uZX1jbHItaWNvbj5zdmd7dHJhbnNpdGlvbjppbmhlcml0fWNsci1pY29uPnN2ZyB0aXRsZXtkaXNwbGF5Om5vbmV9Y2xyLWljb24gLmNsci1pLXNvbGlkLGNsci1pY29uIC5jbHItaS1zb2xpZC0tYmFkZ2VkLGNsci1pY29uIC5jbHItaS1zb2xp''@;'; put 'put ''ZC0tYWxlcnRlZHtkaXNwbGF5Om5vbmV9Y2xyLWljb24gLmNsci1pLW91dGxpbmUtLWFsZXJ0ZWQ6bm90KC5jbHItaS1vdXRsaW5lKSxjbHItaWNvbiAuY2xyLWktb3V0bGluZS0tYmFkZ2VkOm5vdCguY2xyLWktb3V0bGluZSl7ZGlzcGxheTpub25lfWNsci1pY29uW2NsYXNzKj1oYXMtYWxl''@;'; put 'put ''cnRdIC5jYW4tYWxlcnQgLmNsci1pLW91dGxpbmUtLWFsZXJ0ZWR7ZGlzcGxheTpibG9ja31jbHItaWNvbltjbGFzcyo9aGFzLWFsZXJ0XSAuY2FuLWFsZXJ0IC5jbHItaS1vdXRsaW5lOm5vdCguY2xyLWktb3V0bGluZS0tYWxlcnRlZCl7ZGlzcGxheTpub25lfWNsci1pY29uW2NsYXNzKj1o''@;'; put 'put ''YXMtYmFkZ2VdIC5jYW4tYmFkZ2UgLmNsci1pLW91dGxpbmUtLWJhZGdlZHtkaXNwbGF5OmJsb2NrfWNsci1pY29uW2NsYXNzKj1oYXMtYmFkZ2VdIC5jYW4tYmFkZ2UgLmNsci1pLW91dGxpbmU6bm90KC5jbHItaS1vdXRsaW5lLS1iYWRnZWQpe2Rpc3BsYXk6bm9uZX1jbHItaWNvbi5pcy1z''@;'; put 'put ''b2xpZCAuaGFzLXNvbGlkIC5jbHItaS1zb2xpZHtkaXNwbGF5OmJsb2NrfWNsci1pY29uLmlzLXNvbGlkIC5oYXMtc29saWQgLmNsci1pLW91dGxpbmUsY2xyLWljb24uaXMtc29saWQgLmhhcy1zb2xpZCAuY2xyLWktb3V0bGluZS0tYmFkZ2Vke2Rpc3BsYXk6bm9uZX1jbHItaWNvbi5pcy1z''@;'; put 'put ''b2xpZCAuaGFzLXNvbGlkIC5jbHItaS1zb2xpZC0tYWxlcnRlZDpub3QoLmNsci1pLXNvbGlkKSxjbHItaWNvbi5pcy1zb2xpZCAuaGFzLXNvbGlkIC5jbHItaS1zb2xpZC0tYmFkZ2VkOm5vdCguY2xyLWktc29saWQpe2Rpc3BsYXk6bm9uZX1jbHItaWNvbi5pcy1zb2xpZFtjbGFzcyo9aGFz''@;'; put 'put ''LWJhZGdlXSAuY2FuLWJhZGdlLmhhcy1zb2xpZCAuY2xyLWktc29saWQtLWJhZGdlZHtkaXNwbGF5OmJsb2NrfWNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYmFkZ2VdIC5jYW4tYmFkZ2UuaGFzLXNvbGlkIC5jbHItaS1vdXRsaW5lLGNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMt''@;'; put 'put ''YmFkZ2VdIC5jYW4tYmFkZ2UuaGFzLXNvbGlkIC5jbHItaS1vdXRsaW5lLS1iYWRnZWQsY2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZS5oYXMtc29saWQgLmNsci1pLXNvbGlkOm5vdCguY2xyLWktc29saWQtLWJhZGdlZCl7ZGlzcGxheTpub25lfWNsci1p''@;'; put 'put ''Y29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQuaGFzLXNvbGlkIC5jbHItaS1zb2xpZC0tYWxlcnRlZHtkaXNwbGF5OmJsb2NrfWNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQuaGFzLXNvbGlkIC5jbHItaS1vdXRsaW5lLGNsci1p''@;'; put 'put ''Y29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQuaGFzLXNvbGlkIC5jbHItaS1vdXRsaW5lLS1hbGVydGVkLGNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQuaGFzLXNvbGlkIC5jbHItaS1zb2xpZDpub3QoLmNsci1pLXNvbGlkLS1h''@;'; put 'put ''bGVydGVkKXtkaXNwbGF5Om5vbmV9Y2xyLWljb24uaGFzLWJhZGdlLS1zdWNjZXNzIC5jbHItaS1iYWRnZXtmaWxsOiMyZTg1MDB9Y2xyLWljb24uaGFzLWJhZGdlLS1zdWNjZXNzIC5jbHItaS1iYWRnZSAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiMyZTg1MDB9Y2xyLWljb24u''@;'; put 'put ''aGFzLWJhZGdlLS1lcnJvciAuY2xyLWktYmFkZ2V7ZmlsbDojZTAyMjAwfWNsci1pY29uLmhhcy1iYWRnZS0tZXJyb3IgLmNsci1pLWJhZGdlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2UwMjIwMH1jbHItaWNvbi5oYXMtYmFkZ2UtLWluZm8gLmNsci1pLWJhZGdle2ZpbGw6''@;'; put 'put ''IzAwNzdiOH1jbHItaWNvbi5oYXMtYmFkZ2UtLWluZm8gLmNsci1pLWJhZGdlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6IzAwNzdiOH1jbHItaWNvbi5oYXMtYWxlcnQgLmNsci1pLWFsZXJ0e2ZpbGw6I2MyN2IwMH1jbHItaWNvbi5oYXMtYWxlcnQgLmNsci1pLWFsZXJ0IC50''@;'; put 'put ''cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2MyN2IwMH1jbHItaWNvbiAuaXMtb2ZmLXNjcmVlbntwb3NpdGlvbjpmaXhlZCFpbXBvcnRhbnQ7Ym9yZGVyOjAhaW1wb3J0YW50O2hlaWdodDoxcHghaW1wb3J0YW50O3dpZHRoOjFweCFpbXBvcnRhbnQ7bGVmdDowIWltcG9ydGFudDt0''@;'; put 'put ''b3A6LTFweCFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0YW50O21hcmdpbjowIDAgLTFweCFpbXBvcnRhbnR9OndoZXJlKDpyb290LDpob3N0KXstLWNkcy1nbG9iYWwtYmFzZToyMDstLWNkcy1nbG9iYWwtc2NhbGUtc3BhY2U6MTstLWNkcy1n''@;'; put 'put ''bG9iYWwtc2NhbGUtbGF5b3V0LXNwYWNlOjE7LS1jZHMtZ2xvYmFsLXNjYWxlLXR5cG9ncmFwaHk6MTstLWNkcy1nbG9iYWwtbGF5b3V0LWdyaWQtY29sczoxMjstLWNkcy1nbG9iYWwtbGF5b3V0LXdpZHRoLXhzOjU3NnB4Oy0tY2RzLWdsb2JhbC1sYXlvdXQtd2lkdGgtc206NzY4cHg7LS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWxheW91dC13aWR0aC1tZDo5OTJweDstLWNkcy1nbG9iYWwtbGF5b3V0LXdpZHRoLWxnOjEyMDBweDstLWNkcy1nbG9iYWwtbGF5b3V0LXdpZHRoLXhsOjE0NDBweDstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXh4eHM6Y2FsYygyICogdmFyKC0tY2RzLWludGVybmFsLXNj''@;'; put 'put ''YWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXh4czpjYWxjKDQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMSkpOy0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteHM6Y2FsYyg4ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNw''@;'; put 'put ''YWNlLXNtOmNhbGMoMTIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMSkpOy0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbWQ6Y2FsYygxNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1sZzpjYWxjKDI0ICogdmFyKC0tY2RzLWlu''@;'; put 'put ''dGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhsOmNhbGMoMzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMSkpOy0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteHhsOmNhbGMoNDggKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMSkpOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC1sYXlvdXQtc3BhY2UteHh4bDpjYWxjKDY0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtc3BhY2UtMDpjYWxjKDAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS0xOmNhbGMoMSAqIHZhcigtLWNkcy1pbnRlcm5h''@;'; put 'put ''bC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTI6Y2FsYygyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMzpjYWxjKDQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS00OmNhbGMoNiAqIHZhcigt''@;'; put 'put ''LWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTU6Y2FsYyg4ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtNjpjYWxjKDEyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtNzpj''@;'; put 'put ''YWxjKDE2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtODpjYWxjKDE4ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtOTpjYWxjKDI0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMTA6Y2FsYygzMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTExOmNhbGMoMzYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS0xMjpjYWxjKDQ4ICogdmFyKC0tY2RzLWludGVybmFs''@;'; put 'put ''LXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMTM6Y2FsYyg2NCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTE0OmNhbGMoNzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS0xNTpjYWxjKDk2ICog''@;'; put 'put ''dmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtY29sb3ItYmxhY2s6aHNsKDAsIDAlLCAwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlOmhzbCgwLCAwJSwgMTAwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwOmhzbCg5MywgODAlLCA5NCUpOy0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1ncmVlbi0xMDA6aHNsKDkzLCA4MCUsIDgzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTIwMDpoc2woOTMsIDgwJSwgNzAlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMzAwOmhzbCg5MywgODAlLCA1NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDA6aHNs''@;'; put 'put ''KDkzLCA4MCUsIDQ4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwMDpoc2woOTMsIDgwJSwgNDQlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwOmhzbCg5MywgODAlLCAzNyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDA6aHNsKDkzLCA4MCUsIDI4JSk7LS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWdyZWVuLTgwMDpoc2woOTMsIDgwJSwgMjMlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tOTAwOmhzbCg5MywgODAlLCAxNyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0xMDAwOmhzbCg5MywgODAlLCAxMiUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTI1OmhzbCgx''@;'; put 'put ''OTgsIDEwMCUsIDk2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTA6aHNsKDE5OCwgMTAwJSwgOTUlKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03NTpoc2woMTk4LCAxMDAlLCA5NCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDpoc2woMTk4LCAxMDAlLCA4NyUpOy0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1ibHVlLTIwMDpoc2woMTk4LCAxMDAlLCA3OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMDpoc2woMTk4LCAxMDAlLCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTQwMDpoc2woMTk4LCAxMDAlLCA1OSUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMDpo''@;'; put 'put ''c2woMTk4LCAxMDAlLCA0OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTYwMDpoc2woMTk4LCAxMDAlLCA0MyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMDpoc2woMTk4LCAxMDAlLCAzNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMDpoc2woMTk4LCAxMDAlLCAyNyUpOy0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1ibHVlLTkwMDpoc2woMTk4LCAxMDAlLCAyMSUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDA6aHNsKDE5OCwgMTAwJSwgMTUlKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwOmhzbCgyODIsIDEwMCUsIDk3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZp''@;'; put 'put ''b2xldC0xMDA6aHNsKDI4MiwgODAlLCA5MSUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMjAwOmhzbCgyODIsIDczJSwgODMlKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTMwMDpoc2woMjgyLCA2NiUsIDc0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC00MDA6aHNsKDI4Miwg''@;'; put 'put ''NjAlLCA2NSUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTAwOmhzbCgyODIsIDYwJSwgNTclKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTYwMDpoc2woMjgyLCA2MCUsIDQ5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC03MDA6aHNsKDI4MywgODAlLCAzNiUpOy0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci12aW9sZXQtODAwOmhzbCgyODIsIDEwMCUsIDI2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC05MDA6aHNsKDI4MiwgMTAwJSwgMTklKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMDA6aHNsKDI4MiwgMTAwJSwgMTQlKTstLWNkcy1nbG9iYWwtY29sb3ItcmVk''@;'; put 'put ''LTUwOmhzbCg5LCAxMDAlLCA5NyUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMTAwOmhzbCg5LCAxMDAlLCA5NCUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMjAwOmhzbCg5LCAxMDAlLCA4OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMzAwOmhzbCg5LCAxMDAlLCA3OSUpOy0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1yZWQtNDAwOmhzbCg5LCAxMDAlLCA3MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTAwOmhzbCg5LCAxMDAlLCA2NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwOmhzbCg5LCAxMDAlLCA1OSUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwOmhzbCg5LCAxMDAl''@;'; put 'put ''LCA0NCUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwOmhzbCg5LCAxMDAlLCAzOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwOmhzbCg5LCAxMDAlLCAyOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMTAwMDpoc2woOSwgMTAwJSwgMjIlKTstLWNkcy1nbG9iYWwtY29sb3Itb2No''@;'; put 'put ''cmUtNTA6aHNsKDQxLCAxMDAlLCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0xMDA6aHNsKDQxLCAxMDAlLCA5MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0yMDA6aHNsKDQxLCAxMDAlLCA4NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0zMDA6aHNsKDQxLCAxMDAlLCA3''@;'; put 'put ''OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS00MDA6aHNsKDQxLCAxMDAlLCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS01MDA6aHNsKDQwLCAxMDAlLCA1OSUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02MDA6aHNsKDM5LCAxMDAlLCA1MCUpOy0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1vY2hyZS03MDA6aHNsKDM4LCAxMDAlLCA0MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDA6aHNsKDM3LCAxMDAlLCAzMiUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDA6aHNsKDM2LCAxMDAlLCAyNyUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0xMDAwOmhzbCgzNSwg''@;'; put 'put ''MTAwJSwgMTklKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNTA6aHNsKDIzOCwgMTAwJSwgOTYlKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItMTAwOmhzbCgyMzgsIDU4JSwgODglKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItMjAwOmhzbCgyMzgsIDUzJSwgNzklKTst''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItMzAwOmhzbCgyMzgsIDUyJSwgNzAlKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNDAwOmhzbCgyMzgsIDU4JSwgNjQlKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNTAwOmhzbCgyMzgsIDU5JSwgNTglKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItbGF2ZW5kZXItNjAwOmhzbCgyMzgsIDYwJSwgNTIlKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNzAwOmhzbCgyMzgsIDY5JSwgNDUlKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItODAwOmhzbCgyMzgsIDEwMCUsIDMyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVu''@;'; put 'put ''ZGVyLTkwMDpoc2woMjM4LCAxMDAlLCAyMiUpOy0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci0xMDAwOmhzbCgyMzgsIDEwMCUsIDE0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTUwOmhzbCgyMTEsIDEwMCUsIDk1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTEwMDpoc2woMjEx''@;'; put 'put ''LCAxMDAlLCA4OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS0yMDA6aHNsKDIxMSwgMTAwJSwgODElKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMzAwOmhzbCgyMTEsIDEwMCUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTQwMDpoc2woMjExLCAxMDAlLCA2MiUpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1henVyZS01MDA6aHNsKDIxMSwgMTAwJSwgNTQlKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtNjAwOmhzbCgyMTEsIDEwMCUsIDQ2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTcwMDpoc2woMjExLCAxMDAlLCAzNyUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVy''@;'; put 'put ''ZS04MDA6aHNsKDIxMSwgMTAwJSwgMjYlKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtOTAwOmhzbCgyMTEsIDEwMCUsIDE4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTEwMDA6aHNsKDIxMSwgMTAwJSwgMTQlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MDpoc2woMTg0LCAxMDAl''@;'; put 'put ''LCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMDpoc2woMTg0LCAxMDAlLCA4NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTIwMDpoc2woMTg0LCAxMDAlLCA3NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTMwMDpoc2woMTg0LCAxMDAlLCA2MiUpOy0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1hcXVhLTQwMDpoc2woMTg0LCAxMDAlLCA0OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTUwMDpoc2woMTg0LCAxMDAlLCA0MyUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTYwMDpoc2woMTg0LCAxMDAlLCAzNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTcwMDpoc2woMTg0''@;'; put 'put ''LCAxMDAlLCAyNSUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTgwMDpoc2woMTg0LCAxMDAlLCAxOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTkwMDpoc2woMTg0LCAxMDAlLCAxMyUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMDA6aHNsKDE4NCwgMTAwJSwgMTAlKTstLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItamFkZS01MDpoc2woMTYwLCA4MyUsIDk1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtMTAwOmhzbCgxNjAsIDgyJSwgODglKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS0yMDA6aHNsKDE2MCwgNzglLCA3OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTMwMDpoc2wo''@;'; put 'put ''MTYwLCA2OSUsIDY1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNDAwOmhzbCgxNjAsIDY5JSwgNTMlKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS01MDA6aHNsKDE2MCwgNjQlLCA0NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTYwMDpoc2woMTYwLCA2OSUsIDM2JSk7LS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWphZGUtNzAwOmhzbCgxNjAsIDY0JSwgMzAlKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS04MDA6aHNsKDE2MCwgMTAwJSwgMjElKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS05MDA6aHNsKDE2MCwgNzAlLCAxOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTEwMDA6aHNs''@;'; put 'put ''KDE2MCwgNjklLCAxNCUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNTA6aHNsKDUwLCAxMDAlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMTAwOmhzbCg1MCwgMTAwJSwgODQlKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTIwMDpoc2woNTAsIDEwMCUsIDczJSk7LS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy0zMDA6aHNsKDUwLCAxMDAlLCA1NyUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNDAwOmhzbCg0NiwgMTAwJSwgNTIlKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTUwMDpoc2woNDQsIDEwMCUsIDQ3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXll''@;'; put 'put ''bGxvdy02MDA6aHNsKDQyLCAxMDAlLCA0MiUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNzAwOmhzbCg0MCwgMTAwJSwgMzclKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTgwMDpoc2woNDAsIDEwMCUsIDI2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy05MDA6aHNsKDQwLCAx''@;'; put 'put ''MDAlLCAxOCUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMTAwMDpoc2woNDAsIDEwMCUsIDEzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtNTA6aHNsKDY2LCAxMDAlLCA5NCUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTEwMDpoc2woNjYsIDk1JSwgODMlKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItbGltZS0yMDA6aHNsKDY2LCA4NSUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtMzAwOmhzbCg2NiwgODAlLCA1OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTQwMDpoc2woNjYsIDgwJSwgNDglKTstLWNkcy1nbG9iYWwtY29sb3ItbGltZS01MDA6aHNsKDY2LCA5MCUs''@;'; put 'put ''IDQxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtNjAwOmhzbCg2NiwgOTAlLCAzNiUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTcwMDpoc2woNjYsIDEwMCUsIDI4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtODAwOmhzbCg2NiwgMTAwJSwgMjIlKTstLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''bGltZS05MDA6aHNsKDY2LCAxMDAlLCAxMiUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTEwMDA6aHNsKDY2LCAxMDAlLCA3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS01MDpoc2woMjUsIDEwMCUsIDk1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS0xMDA6aHNsKDI1''@;'; put 'put ''LCAxMDAlLCA4OCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtMjAwOmhzbCgyNSwgOTQlLCA3OCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtMzAwOmhzbCgyNSwgMTAwJSwgNzIlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTQwMDpoc2woMjUsIDEwMCUsIDYy''@;'; put 'put ''JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS01MDA6aHNsKDI1LCAxMDAlLCA0OCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNjAwOmhzbCgyNSwgMTAwJSwgNDElKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTcwMDpoc2woMjUsIDEwMCUsIDM0JSk7LS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLXRhbmdlcmluZS04MDA6aHNsKDI1LCAxMDAlLCAyNSUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtOTAwOmhzbCgyNSwgMTAwJSwgMTklKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTEwMDA6aHNsKDI1LCAxMDAlLCAxNSUpOy0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1tYWdlbnRhLTUwOmhzbCgzNDUsIDEwMCUsIDk1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtMTAwOmhzbCgzNDUsIDEwMCUsIDg3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtMjAwOmhzbCgzNDUsIDEwMCUsIDc5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEt''@;'; put 'put ''MzAwOmhzbCgzNDUsIDEwMCUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtNDAwOmhzbCgzNDUsIDEwMCUsIDYxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtNTAwOmhzbCgzNDUsIDgxJSwgNTAlKTstLWNkcy1nbG9iYWwtY29sb3ItbWFnZW50YS02MDA6aHNsKDM0NSwg''@;'; put 'put ''ODMlLCA0MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTcwMDpoc2woMzQ1LCA5MSUsIDMxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtODAwOmhzbCgzNDUsIDEwMCUsIDI0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtOTAwOmhzbCgzNDUsIDEwMCUsIDE5JSk7LS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtMTAwMDpoc2woMzQ1LCAxMDAlLCAxNSUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTUwOmhzbCgzMjQsIDEwMCUsIDk3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstMTAwOmhzbCgzMjQsIDk1JSwgOTElKTstLWNkcy1nbG9iYWwtY29sb3ItcGlu''@;'; put 'put ''ay0yMDA6aHNsKDMyNCwgODQlLCA4MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTMwMDpoc2woMzI0LCA3OCUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstNDAwOmhzbCgzMjQsIDc4JSwgNjIlKTstLWNkcy1nbG9iYWwtY29sb3ItcGluay01MDA6aHNsKDMyNCwgNjQlLCA1MSUp''@;'; put 'put ''Oy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTYwMDpoc2woMzI0LCA4MCUsIDM5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstNzAwOmhzbCgzMjQsIDEwMCUsIDMwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstODAwOmhzbCgzMjQsIDEwMCUsIDI0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBp''@;'; put 'put ''bmstOTAwOmhzbCgzMjQsIDEwMCUsIDE4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstMTAwMDpoc2woMzI0LCAxMDAlLCAxNSUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktNTA6aHNsKDI4MiwgMyUsIDk3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS0xMDA6aHNsKDI4''@;'; put 'put ''MiwgMyUsIDkyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS0yMDA6aHNsKDI4MiwgMyUsIDg0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS0zMDA6aHNsKDI4MiwgMyUsIDc0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS00MDA6aHNsKDI4MiwgMyUsIDYzJSk7''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS01MDA6aHNsKDI4MiwgMyUsIDU0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS02MDA6aHNsKDI4MiwgMyUsIDQzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS03MDA6aHNsKDI4MiwgMyUsIDM1JSk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLXdhcm0tZ3JheS04MDA6aHNsKDI4MiwgMyUsIDI4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS05MDA6aHNsKDI4MiwgMyUsIDIwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS0xMDAwOmhzbCgyODIsIDMlLCAxNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0''@;'; put 'put ''ZS01MDpoc2woMjM4LCAyMCUsIDk2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTEwMDpoc2woMjM4LCAyMCUsIDkxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTIwMDpoc2woMjM4LCAyMCUsIDgyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTMwMDpoc2woMjM4LCAyMCUsIDcz''@;'; put 'put ''JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTQwMDpoc2woMjM4LCAyMCUsIDYzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTUwMDpoc2woMjM4LCAyMyUsIDU2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTYwMDpoc2woMjM4LCAyNCUsIDQ5JSk7LS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LXNsYXRlLTcwMDpoc2woMjM4LCAyOCUsIDM4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTgwMDpoc2woMjM4LCAyOCUsIDI5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTkwMDpoc2woMjM4LCAyOCUsIDIyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTEwMDA6aHNsKDIzOCwg''@;'; put 'put ''MjglLCAxNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtNTA6aHNsKDIxMSwgMTAwJSwgOTclKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTEwMDpoc2woMjExLCA1OCUsIDkwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS0yMDA6aHNsKDIxMSwgNTMlLCA4MSUpOy0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1pY2UtMzAwOmhzbCgyMTEsIDQ5JSwgNzAlKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTQwMDpoc2woMjExLCA0NyUsIDYyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS01MDA6aHNsKDIxMSwgNDclLCA1MyUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtNjAwOmhzbCgyMTEsIDU2JSwgNDQl''@;'; put 'put ''KTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTcwMDpoc2woMjExLCA2OSUsIDM0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS04MDA6aHNsKDIxMSwgNjklLCAyNyUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtOTAwOmhzbCgyMTEsIDEwMCUsIDIwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS0x''@;'; put 'put ''MDAwOmhzbCgyMTEsIDEwMCUsIDE0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS01MDpoc2woMjExLCAyMCUsIDk2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS0xMDA6aHNsKDIxMSwgMjAlLCA5MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktMjAwOmhzbCgy''@;'; put 'put ''MTEsIDIwJSwgODElKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTMwMDpoc2woMjExLCAyMCUsIDcyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS00MDA6aHNsKDIxMSwgMjAlLCA2MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktNTAwOmhzbCgyMTEsIDIwJSwg''@;'; put 'put ''NTMlKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTYwMDpoc2woMjExLCAyMCUsIDQ0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS03MDA6aHNsKDIxMSwgMjMlLCAzNiUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktODAwOmhzbCgyMTEsIDMwJSwgMjglKTstLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTkwMDpoc2woMjExLCA0MCUsIDIyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS0xMDAwOmhzbCgyMTEsIDYzJSwgMTQlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTUwOmhzbCg0MSwgMjMlLCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xvci10''@;'; put 'put ''YW4tMTAwOmhzbCg0MSwgMjIlLCA5MSUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tMjAwOmhzbCg0MSwgMjclLCA4MiUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tMzAwOmhzbCg0MSwgMjMlLCA2OCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tNDAwOmhzbCg0MSwgMjMlLCA1OCUpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci10YW4tNTAwOmhzbCg0MSwgMjAlLCA0NyUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tNjAwOmhzbCg0MSwgMjAlLCA0MCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tNzAwOmhzbCg0MSwgMjAlLCAzMiUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tODAwOmhzbCg0MSwg''@;'; put 'put ''MjMlLCAyNiUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tOTAwOmhzbCg0MSwgMjMlLCAyMSUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tMTAwMDpoc2woNDEsIDIyJSwgMTYlKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTI1OmhzbCgxOTgsIDMzJSwgOTklKTstLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItY29uc3RydWN0aW9uLTUwOmhzbCgxOTgsIDM2JSwgOTYlKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDpoc2woMTk4LCAyMCUsIDkxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDA6aHNsKDE5OCwgMTQlLCA4MiUpOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwOmhzbCgxOTgsIDEwJSwgNzElKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTQwMDpoc2woMTk4LCA5JSwgNTYlKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMDpoc2woMTk4LCAxMCUsIDQ2JSk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWNvbnN0cnVjdGlvbi02MDA6aHNsKDE5OCwgMTQlLCAzNiUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwOmhzbCgxOTgsIDE5JSwgMjglKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMDpoc2woMTk4LCAyMyUsIDIzJSk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWNvbnN0cnVjdGlvbi05MDA6aHNsKDE5OCwgMjglLCAxOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMDpoc2woMTk4LCAzMCUsIDE1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMTAwOmhzbCgyMDAsIDMxJSwgMTMlKTstLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItZ3JheS0wOmhzbCgwLCAwJSwgMTAwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktNTA6aHNsKDAsIDAlLCA5OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTEwMDpoc2woMCwgMCUsIDk1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktMjAwOmhzbCgwLCAwJSwgOTElKTst''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItZ3JheS0zMDA6aHNsKDAsIDAlLCA4NyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTQwMDpoc2woMCwgMCUsIDgwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktNTAwOmhzbCgwLCAwJSwgNzAlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS02MDA6aHNsKDAs''@;'; put 'put ''IDAlLCA1NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTcwMDpoc2woMCwgMCUsIDQwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktODAwOmhzbCgwLCAwJSwgMjclKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS05MDA6aHNsKDAsIDAlLCAyMCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5''@;'; put 'put ''LTEwMDA6aHNsKDAsIDAlLCAwJSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi05MDApOy0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LWNvbG9yLTQ1MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbGlnaHQ6MzAw''@;'; put 'put ''Oy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXJlZ3VsYXI6NDAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bTo1MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQ6NjAwOy0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LWZvbnQtd2VpZ2h0LWJvbGQ6NjAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWV4dHJhYm9sZDo2MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTA6Y2FsYygxMCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktZm9udC1zaXplLTE6Y2FsYygxMSAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTI6Y2FsYygxMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1z''@;'; put 'put ''aXplLTM6Y2FsYygxMyAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTQ6Y2FsYygxNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTU6Y2FsYygxNiAq''@;'; put 'put ''IHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTY6Y2FsYygyMCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTc6Y2FsYygyNCAqIHZhcigtLWNkcy1pbnRl''@;'; put 'put ''cm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTg6Y2FsYygzMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTk6Y2FsYyg0MCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHk6IkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWY7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGVyLWZvbnQtZmFtaWx5OiJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmOy0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1vbm9zcGFjZS1mb250LWZhbWlseTp1aS1tb25vc3BhY2UsIENvbnNvbGFzLCBNZW5sbywgTW9uYWNvLCBtb25vc3BhY2U7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQ6LjE0NzVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1h''@;'; put 'put ''c2NlbmRlci1oZWlnaHQ6LjE3MDNlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodDouNTE3ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9y''@;'; put 'put ''LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItdmlvbGV0LTcwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstb24tY29sb3JiZzp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWJsYWNrKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZTpjYWxjKDE0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0OjEuNDI4NTcxNGVtOy0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmc6LS4wMDcxNDI4NmVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQ6NDAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplOmNhbGMoNDAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykp''@;'; put 'put ''Oy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQ6MS4xZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1nbG9i''@;'; put 'put ''YWwtdHlwb2dyYXBoeS1oZWFkaW5nLWZvbnQtc2l6ZTpjYWxjKDMyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWxpbmUtaGVpZ2h0OjEuMTI1ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGluZy1sZXR0ZXItc3Bh''@;'; put 'put ''Y2luZzotLjAxMjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkbGluZS1mb250LXNpemU6Y2FsYygzMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHktaGVhZGxpbmUtbGluZS1oZWlnaHQ6MS4xMjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkbGluZS1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkbGluZS1mb250LXdlaWdodDo1MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0''@;'; put 'put ''bGUtZm9udC1zaXplOmNhbGMoMjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWxpbmUtaGVpZ2h0OjEuMzMzMzMzZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGV0dGVyLXNwYWNpbmc6LS4wMDgzMzMzM2VtOy0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZTpjYWxjKDIwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVp''@;'; put 'put ''Z2h0OjEuMmVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmc6LS4wMWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC1zaXplOmNhbGMoMTYg''@;'; put 'put ''KiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQ6MS41ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBo''@;'; put 'put ''eS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtc2l6ZTpjYWxjKDE2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0OjEuNWVtOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXdlaWdodDpjYWxjKDQwMCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNl''@;'; put 'put ''Y29uZGFyeS1mb250LXNpemU6Y2FsYygxMyAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0OjEuMjMwNzdlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmc6LS4w''@;'; put 'put ''MDc2OTJlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQ6NDAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplOmNhbGMoMTEgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNh''@;'; put 'put ''cHRpb24tbGluZS1oZWlnaHQ6MS40NTQ1NDVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nOi4wMTgxODJlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0OjQwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNh''@;'; put 'put ''cHRpb24tZm9udC1zaXplOmNhbGMoMTAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1saW5lLWhlaWdodDoxLjJlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGV0dGVyLXNwYWNpbmc6LjA1''@;'; put 'put ''ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1pbmZvLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1Y2Nlc3MtaG92ZXI6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXdhcm5pbmctaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRhbmdlci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJl''@;'; put 'put ''ZC04MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW5ldXRyYWwtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC10eXBvZ3JhcGh5LWRpc2FibGVkLWJ1dHRvbjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24taW5zdGFudDowczstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXF1aWNrZXN0Oi4xczst''@;'; put 'put ''LWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXF1aWNrZXI6LjE1czstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXF1aWNrOi4yczstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXNlY29uZGFyeTouM3M7LS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1kdXJhdGlvbi1w''@;'; put 'put ''cmltYXJ5Oi40czstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXNsb3c6LjVzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24tc2xvd2VyOi43czstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXNsb3dlc3Q6LjhzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZWFz''@;'; put 'put ''aW5nLXByaW1hcnk6Y3ViaWMtYmV6aWVyKDAsLjk5LDAsLjk5KTstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWVhc2luZy1zZWNvbmRhcnk6Y3ViaWMtYmV6aWVyKDAsIDEuNSwgLjUsIDEpOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZWFzaW5nLWxvb3A6Y3ViaWMtYmV6aWVyKC4xNywgLjQsIC44''@;'; put 'put ''LCAuNzkpOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMDpjYWxjKDQgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0yMDA6Y2FsYygxMiAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTMwMDo1MCU7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDA6Y2FsYygxICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDA6Y2FsYygyICog''@;'; put 'put ''KDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDA6Y2FsYygzICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC00MDA6Y2FsYyg0ICogKDFyZW0gLyB2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3ItdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVj''@;'; put 'put ''dGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3Itc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTEwMDowIGNhbGMoKDEgLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkgKiAxcmVt''@;'; put 'put ''KSBjYWxjKCgzIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpICogMXJlbSkgMCBoc2xhKDE5OCwgMzAlLCAxNSUsIC41KTstLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTIwMDowIGNhbGMoKDEgLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkgKiAxcmVtKSBjYWxjKCgzIC8gdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpICogMXJlbSkgMCBoc2xhKDE5OCwgMzAlLCAxNSUsIC4zKTstLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTMwMDowIGNhbGMoKDEgLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkgKiAxcmVtKSBjYWxjKCgzIC8gdmFyKC0tY2RzLWdsb2JhbC1i''@;'; put 'put ''YXNlLCAyMCkpICogMXJlbSkgMCBoc2xhKDE5OCwgMzAlLCAxNSUsIC4yKTstLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wOmhzbGEoMCwgMCUsIDAlLCAwKTstLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0xMDA6aHNsYSgwLCAwJSwgMCUsIC4yKTstLWNkcy1hbGlhcy1vYmplY3Qtb3Bh''@;'; put 'put ''Y2l0eS0yMDA6aHNsYSgwLCAwJSwgMCUsIC40KTstLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0zMDA6aHNsYSgwLCAwJSwgMCUsIC42KTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZTpIaWdobGlnaHQgc29saWQgMnB4Oy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFj''@;'; put 'put ''dGlvbi1vdXRsaW5lLXdlYmtpdDo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0OjFweDstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tdG91Y2gtdGFyZ2V0OmNhbGMoMzYgKiAoMXJlbSAv''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZTp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03NSk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQt''@;'; put 'put ''aG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24tYmFja2dyb3VuZC1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktNTApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03NSk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13''@;'; put 'put ''aGl0ZSk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxlY3Rl''@;'; put 'put ''ZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3It''@;'; put 'put ''aG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24t''@;'; put 'put ''Y29sb3Itc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24taW5mby1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1h''@;'; put 'put ''Y3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2Vjb25kYXJ5LWhv''@;'; put 'put ''dmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1Y2Nlc3MtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWNsaWNrOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLXNlY29uZGFyeS1ob3Zlcjp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24td2FybmluZy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctY2xpY2s6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1ncmVlbi05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctc2Vjb25kYXJ5LWhvdmVyOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1kYW5nZXItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLXNlY29uZGFyeS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLXJlZC01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLXNlY29uZGFyeS1ob3Zlcjp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1jbGlj''@;'; put 'put ''azp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbnZlcnNlLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1hcHAtYmFja2dyb3VuZDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yNSk7LS1jZHMtYWxpYXMtb2JqZWN0LW92ZXJsYXktYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1hbGlhcy1vYmplY3Qtb3ZlcmxheS1iYWNrZHJvcC1iYWNrZ3JvdW5kOmhzbGEoMCwgMCUs''@;'; put 'put ''IDAlLCAuNik7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTst''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtZGFyazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS01''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2U6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2Utc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tkcm9wLWJhY2tncm91bmQ6''@;'; put 'put ''aHNsYSgwLCAwJSwgMTAwJSwgLjYpOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWluZm86dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtc3RhdHVzLWluZm8tdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTApOy0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tODAwKTstLWNkcy1hbGlhcy1zdGF0''@;'; put 'put ''dXMtd2FybmluZzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTEwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1vY2hyZS02MDApOy0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcms6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXRp''@;'; put 'put ''bnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTApOy0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLWRhcms6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNk''@;'; put 'put ''cy1hbGlhcy1zdGF0dXMtbmV1dHJhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLXNo''@;'; put 'put ''YWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlhcy1zdGF0dXMtYWx0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTcwMCk7LS1jZHMtYWxp''@;'; put 'put ''YXMtc3RhdHVzLWFsdC10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWFsdC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC05MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXktc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNk''@;'; put 'put ''cy1hbGlhcy11dGlsaXR5LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ibHVlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwKTstLWNkcy1hbGlhcy11dGlsaXR5LWJsdWUtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1saWdodC1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktbGlnaHQtYmx1ZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MCk7LS1jZHMtYWxpYXMtdXRpbGl0''@;'; put 'put ''eS1saWdodC1ibHVlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZGFyay1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtODAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1ZS10aW50OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItYXp1cmUtNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktZGFyay1ibHVlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCk7LS1jZHMtYWxpYXMtdXRp''@;'; put 'put ''bGl0eS1ncmVlbi10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JlZW4tc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93OnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''b2NocmUtNTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdy1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTcwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1y''@;'; put 'put ''ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXJlZC10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwKTstLWNkcy1hbGlhcy11dGlsaXR5LXJlZC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC04MDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLXV0aWxpdHktdGFuZ2VyaW5lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTQwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS01MCk7LS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUtc2hh''@;'; put 'put ''ZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXZpb2xldDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0LXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQt''@;'; put 'put ''NTApOy0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0LXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTgwMCk7LS1jZHMtYWxpYXMtdml6LWJvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMTAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEtYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTcwMCk7LS1jZHMtYWxp''@;'; put 'put ''YXMtdml6LWdlbmVyYWwtMi12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0zOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS04MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTMtYXF1YTp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWFxdWEtODAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC00OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNDAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC00LWxpbWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTcwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVy''@;'; put 'put ''YWwtNTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstNTAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC01LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtNzAwKTstLWNk''@;'; put 'put ''cy1hbGlhcy12aXotZ2VuZXJhbC02LWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTc6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci03MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTctdmlvbGV0OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItdmlvbGV0LTgwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtODp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC04LWxpbWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTkwMCk7LS1jZHMtYWxpYXMtdml6''@;'; put 'put ''LWdlbmVyYWwtOTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtODAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC05LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQt''@;'; put 'put ''NjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMC1saW1lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS0xMDAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMS1hcXVhOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS02MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtODAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMi12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwMCk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtdml6LWdlbmVyYWwtMTM6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMy12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xNDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWdyZWVuLTcwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTQtYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMTAwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTcwMCk7LS1jZHMtYWxpYXMtdml6''@;'; put 'put ''LWdlbmVyYWwtMTUtYXF1YTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xNjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTYwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTYtbGltZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWxpbWUtODAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktbmV1dHJhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1zdWNjZXNzOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy12''@;'; put 'put ''aXotc2V2ZXJpdHktd2FybmluZzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy03MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS13YXJuaW5nLWxpZ2h0OnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTQwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LWltbWVkaWF0ZTp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1jcml0aWNhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1mcmVlLXNwYWNlLWZpbGw6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktZnJlZS1zcGFjZS1ib3JkZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1''@;'; put 'put ''ZS01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVl''@;'; put 'put ''bnRpYWwtYmx1ZS0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS01MDA6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTYwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTkwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0x''@;'; put 'put ''MDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC0xMDA6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci12aW9sZXQtMTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0zMDApOy0t''@;'; put 'put ''Y2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVl''@;'; put 'put ''bnRpYWwtdmlvbGV0LTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtODAwOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItdmlvbGV0LTEwMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTEwMCk7LS1jZHMtYWxp''@;'; put 'put ''YXMtdml6LXNlcXVlbnRpYWwtb2NocmUtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJl''@;'; put 'put ''LTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS02MDA6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1vY2hyZS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtODAwKTstLWNkcy1h''@;'; put 'put ''bGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTEwMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1h''@;'; put 'put ''cXVhLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1hcXVhLTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTQwMCk7LS1jZHMtYWxpYXMtdml6''@;'; put 'put ''LXNlcXVlbnRpYWwtYXF1YS01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTYwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS03MDA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1hcXVhLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTkwMCk7''@;'; put 'put ''LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi01MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlh''@;'; put 'put ''bC1ncmVlbi0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tMzAwOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItZ3JlZW4tMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwMCk7''@;'; put 'put ''LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50''@;'; put 'put ''aWFsLWdyZWVuLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tOTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi0xMDAwOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNDAwOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwKTst''@;'; put 'put ''LWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC05''@;'; put 'put ''MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0xMDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLXYtMjAwOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItdmlvbGV0LTIwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS12LTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0zMDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtdi00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12''@;'; put 'put ''aW9sZXQtNDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLXYtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS12LTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02''@;'; put 'put ''MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtdi03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLW5ldXRyYWw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTApOy0t''@;'; put 'put ''Y2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtYS00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTQwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS1hLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNTAwKTstLWNkcy1hbGlhcy12''@;'; put 'put ''aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLWEtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS02MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtYS03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTcwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2lu''@;'; put 'put ''Zy12aW9sZXQtYXF1YS1hLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtODAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLWEtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS05MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRl''@;'; put 'put ''LWItMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItNTAwOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Ymx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLW5ldXRyYWw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwKTstLWNk''@;'; put 'put ''cy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtMzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNDAwKTstLWNkcy1hbGlhcy12aXotZGl2''@;'; put 'put ''ZXJnaW5nLWJsdWUtamFkZS1qLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNjAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFk''@;'; put 'put ''ZS1qLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtODAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tYi0zMDA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1iLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tYi02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTYwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWItNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1iLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tbmV1dHJhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1nLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTMwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWctNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJn''@;'; put 'put ''aW5nLWJsdWUtZ3JlZW4tZy01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1nLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTYwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdy''@;'; put 'put ''ZWVuLWctNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tZy04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1n''@;'; put 'put ''LTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTIwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLWctMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWdyZWVuLXllbGxvdy1yZWQt''@;'; put 'put ''Zy00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1nLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVk''@;'; put 'put ''LWctNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWdyZWVuLXllbGxvdy1yZWQtZy03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJl''@;'; put 'put ''ZC1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTIwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ct''@;'; put 'put ''cmVkLXItNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTYwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVk''@;'; put 'put ''LXItNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTgwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXIt''@;'; put 'put ''OTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rp''@;'; put 'put ''b24tNjAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkwMCk7LS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1jb2xvci00NTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1s''@;'; put 'put ''aWdodDozMDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1yZWd1bGFyOjQwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bTo1MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZDo2MDA7LS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1mb250LXdlaWdodC1ib2xkOjYwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWV4dHJhYm9sZDo2MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMDpjYWxjKDEwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWZvbnQtc2l6ZS0xOmNhbGMoMTEgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTI6Y2FsYygxMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNp''@;'; put 'put ''emUtMzpjYWxjKDEzICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS00OmNhbGMoMTQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTU6Y2FsYygxNiAqIHZh''@;'; put 'put ''cigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtNjpjYWxjKDIwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS03OmNhbGMoMjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwt''@;'; put 'put ''c2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTg6Y2FsYygzMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtOTpjYWxjKDQwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5OiJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGVyLWZvbnQtZmFtaWx5OiJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmOy0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktbW9ub3NwYWNlLWZvbnQtZmFtaWx5OnVpLW1vbm9zcGFjZSwgQ29uc29sYXMsIE1lbmxvLCBNb25hY28sIG1vbm9zcGFjZTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0Oi4xNDc1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWln''@;'; put 'put ''aHQ6LjE3MDNlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXgtaGVpZ2h0Oi41MTdlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWhvdmVyOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZp''@;'; put 'put ''b2xldC03MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1vbi1jb2xvcmJnOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemU6Y2FsYygxNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0OjEuNDI4NTcxNGVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3Bh''@;'; put 'put ''Y2luZzotLjAwNzE0Mjg2ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0OjQwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplOmNhbGMoNDAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''ZGlzcGxheS1saW5lLWhlaWdodDoxLjFlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRpbmctZm9udC1z''@;'; put 'put ''aXplOmNhbGMoMzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGluZy1saW5lLWhlaWdodDoxLjEyNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGluZy1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWhlYWRpbmctZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGxpbmUtZm9udC1zaXplOmNhbGMoMzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGxpbmUtbGluZS1oZWlnaHQ6MS4xMjVlbTst''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRsaW5lLWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGxpbmUtZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtZm9udC1zaXplOmNhbGMoMjQgKiB2YXIoLS1jZHMtaW50''@;'; put 'put ''ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQ6MS4zMzMzMzNlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRpdGxlLWxldHRlci1zcGFjaW5nOi0uMDA4MzMzMzNlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtd2VpZ2h0''@;'; put 'put ''OjUwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplOmNhbGMoMjAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodDoxLjJlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24t''@;'; put 'put ''bGV0dGVyLXNwYWNpbmc6LS4wMWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodDo1MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZTpjYWxjKDE2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQ6MS41ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdlaWdodDo1MDA7LS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1tZXNzYWdlLWZvbnQtc2l6ZTpjYWxjKDE2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW1lc3NhZ2UtbGluZS1oZWlnaHQ6MS41ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWxldHRlci1zcGFjaW5nOi0uMDEyNWVt''@;'; put 'put ''Oy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXdlaWdodDpjYWxjKDQwMCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZTpjYWxjKDEzICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxl''@;'; put 'put ''LTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodDoxLjIzMDc3ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmc6LS4wMDc2OTJlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodDo0''@;'; put 'put ''MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZTpjYWxjKDExICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQ6MS40NTQ1NDVlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRp''@;'; put 'put ''b24tbGV0dGVyLXNwYWNpbmc6LjAxODE4MmVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodDo0MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplOmNhbGMoMTAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0OjEuMmVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxldHRlci1zcGFjaW5nOi4wNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LWluZm8taG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWNjZXNzLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tODAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXdhcm5pbmctaG92''@;'; put 'put ''ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGFuZ2VyLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTgwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1uZXV0cmFsLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Y29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9u''@;'; put 'put ''LTUwMCk7LS1jZHMtaW50ZXJuYWwtc2NhbGUtMTpjYWxjKCgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkgKiB2YXIoLS1jZHMtZ2xvYmFsLXNjYWxlLWxheW91dC1zcGFjZSkpOy0tY2RzLWludGVybmFsLXNjYWxlLTI6Y2FsYygoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkp''@;'; put 'put ''ICogdmFyKC0tY2RzLWdsb2JhbC1zY2FsZS1zcGFjZSkpOy0tY2RzLWludGVybmFsLXNjYWxlLTM6Y2FsYygoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpICogdmFyKC0tY2RzLWdsb2JhbC1zY2FsZS10eXBvZ3JhcGh5KSl9aHRtbHtmb250LXNpemU6Y2FsYygodmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1iYXNlKS8xNikqMTAwJSk7Ym94LXNpemluZzpib3JkZXItYm94IWltcG9ydGFudH0qLDphZnRlciw6YmVmb3Jle2JveC1zaXppbmc6aW5oZXJpdCFpbXBvcnRhbnR9W2Nkcy1iYXNlLWZvbnQ9IjE2Il17LS1jZHMtZ2xvYmFsLWJhc2U6MTZ9W2Nkcy10aGVtZV17YmFja2dyb3VuZDp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWFwcC1iYWNrZ3JvdW5kKTtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwKX1bY2RzLWNvbnRyb2xdIDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3It''@;'; put 'put ''MjAwKX1bY2RzLWNvbnRyb2xdIDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMjAwKX1bY2RzLWNvbnRyb2xdW19kaXNhYmxlZF17LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMjAwOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMt''@;'; put 'put ''ZGlzYWJsZWQpfWh0bWxbY2RzLWZvY3VzLXRyYXBde292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnQ7d2lkdGg6MTAwdnc7aGVpZ2h0OjEwMHZofVtjZHMtdGV4dF17Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5KTttYXJnaW4tdG9wOjA7bWFyZ2lu''@;'; put 'put ''LWJvdHRvbTowfVtjZHMtdGV4dF1bY2RzLWxheW91dH49Z3JpZF06YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ncmlkXTpiZWZvcmUsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXTphZnRlcixbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdOmJlZm9yZSxb''@;'; put 'put ''Y2RzLXRleHRdW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXTphZnRlcixbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXTpiZWZvcmV7ZGlzcGxheTpub25lfVtjZHMtdGV4dCo9ZGlzcGxheV0sW2Nkcy10ZXh0Kj1oZWFkaW5nXSxbY2RzLXRleHQqPWhlYWRsaW5lXSxbY2RzLXRleHQqPXNl''@;'; put 'put ''Y3Rpb25dLFtjZHMtdGV4dCo9c3Vic2VjdGlvbl0sW2Nkcy10ZXh0Kj10aXRsZV17Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZhbWlseSk7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMCl9W2Nkcy10ZXh0Kj1i''@;'; put 'put ''b2R5XSxbY2RzLXRleHQqPWNhcHRpb25dLFtjZHMtdGV4dCo9bWVzc2FnZV0sW2Nkcy10ZXh0Kj1zZWNvbmRhcnldLFtjZHMtdGV4dCo9c21hbGxjYXB0aW9uXXtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwKX1bY2RzLXRleHQqPWlubGluZV17d2lkdGg6YXV0''@;'; put 'put ''byFpbXBvcnRhbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fVtjZHMtdGV4dCo9ZGlzcGxheV17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3Bs''@;'; put 'put ''YXktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0Kj1kaXNwbGF5XTpi''@;'; put 'put ''ZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVp''@;'; put 'put ''Z2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1kaXNwbGF5XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0''@;'; put 'put ''KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAu''@;'; put 'put ''MDQ0ZW0pfVtjZHMtdGV4dCo9aGVhZGluZ10sW2Nkcy10ZXh0Kj1oZWFkbGluZV17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctZm9udC13ZWlnaHQp''@;'; put 'put ''O2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGluZy1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0Kj1oZWFkaW5nXTpiZWZvcmUsW2Nkcy10ZXh0''@;'; put 'put ''Kj1oZWFkbGluZV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVh''@;'; put 'put ''ZGluZy1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aGVhZGluZ106YWZ0ZXIsW2Nkcy10ZXh0Kj1oZWFkbGluZV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LWhlYWRpbmctbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXRpdGxlXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxl''@;'; put 'put ''LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0Kj10aXRsZV06YmVmb3Jle2Nv''@;'; put 'put ''bnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQpIC0gMWVt''@;'; put 'put ''KS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXRpdGxlXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRl''@;'; put 'put ''eHQqPXNlY3Rpb25de2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9n''@;'; put 'put ''cmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dCo9c2VjdGlvbl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21h''@;'; put 'put ''cmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl06''@;'; put 'put ''YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAt''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXN1YnNlY3Rpb25de2ZvbnQtc2l6ZTp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdo''@;'; put 'put ''dCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygo''@;'; put 'put ''KHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl06YWZ0ZXJ7Y29udGVu''@;'; put 'put ''dDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWJvZHlde2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpfVtjZHMtdGV4dCo9Ym9keV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkg''@;'; put 'put ''KyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMWVtKX1bY2RzLXRleHQqPWJvZHldOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0g''@;'; put 'put ''LSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS1ib2R5LWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9Ym9keVtjZHMtdGV4dCo9Ym9keV06YWZ0ZXIsYm9keVtjZHMtdGV4dCo9Ym9keV06YmVmb3Jle2NvbnRlbnQ6bm9uZX1bY2RzLXRleHQqPW1lc3NhZ2Vde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktbWVzc2FnZS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dCo9bWVzc2FnZV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9bWVzc2FnZV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dp''@;'; put 'put ''ZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsg''@;'; put 'put ''Y2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXNlY29uZGFyeV17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250''@;'; put 'put ''LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''c2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX1bY2RzLXRleHQqPXNlY29uZGFyeV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBj''@;'; put 'put ''YWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2Fs''@;'; put 'put ''YygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWNhcHRpb25de2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpfVtj''@;'; put 'put ''ZHMtdGV4dCo9Y2FwdGlvbl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHktY2FwdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9Y2FwdGlvbl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQp''@;'; put 'put ''IC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXNtYWxsY2FwdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9u''@;'; put 'put ''LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxldHRlci1zcGFjaW5nKX1bY2RzLXRleHQqPXNt''@;'; put 'put ''YWxsY2FwdGlvbl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21h''@;'; put 'put ''bGxjYXB0aW9uLWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zbWFsbGNhcHRpb25dOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGlu''@;'; put 'put ''ZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHR+PWxpbmtde2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yKSFpbXBvcnRhbnQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6aW5oZXJpdCFp''@;'; put 'put ''bXBvcnRhbnQ7Zm9udC1zaXplOmluaGVyaXQhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106Zm9jdXN7b3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0''@;'; put 'put ''bGluZS1vZmZzZXQpfVtjZHMtdGV4dH49bGlua106aG92ZXJ7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItaG92ZXIpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOnZpc2l0ZWQ6bm90KFtjZHMtdGV4dH49c3RhdGljXSksW2Nkcy10ZXh0fj1saW5rXVtj''@;'; put 'put ''ZHMtdGV4dH49dmlzaXRlZF17Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZCkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106dmlzaXRlZDpub3QoW2Nkcy10ZXh0fj1zdGF0aWNdKTpob3ZlcixbY2RzLXRleHR+PWxpbmtdW2Nkcy10ZXh0fj12''@;'; put 'put ''aXNpdGVkXTpob3Zlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyKSFpbXBvcnRhbnR9QG1lZGlhKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKXtbY2RzLXRleHQ9bGlua106Zm9jdXN7b3V0bGluZTp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtd2Via2l0KX19W2Nkcy10ZXh0fj1jb2RlXXtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7Zm9udC1mYW1pbHk6bW9ub3NwYWNlfVtjZHMtZGl2aWRlcl17ZGlzcGxheTpibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtvdmVyZmxvdzpoaWRkZW47Ym94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcikgMCAwIDAgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBpbnNldH1bY2RzLXRleHR+PWV4dHJhYm9s''@;'; put 'put ''ZF17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWV4dHJhYm9sZCkhaW1wb3J0YW50fVtjZHMtdGV4dH49Ym9sZF17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWJvbGQpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LXRleHR+PXNlbWlib2xkXXtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpIWltcG9ydGFudH1bY2RzLXRleHR+PW1lZGl1bV17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1''@;'; put 'put ''bSkhaW1wb3J0YW50fVtjZHMtdGV4dH49cmVndWxhcl17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXJlZ3VsYXIpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpZ2h0XXtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9u''@;'; put 'put ''dC13ZWlnaHQtbGlnaHQpIWltcG9ydGFudH1bY2RzLXRleHR+PWNhcGl0YWxpemVde3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemUhaW1wb3J0YW50fVtjZHMtdGV4dH49dXBwZXJjYXNlXXt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2UhaW1wb3J0YW50fVtjZHMtdGV4dH49bG93ZXJjYXNlXXt0''@;'; put 'put ''ZXh0LXRyYW5zZm9ybTpsb3dlcmNhc2UhaW1wb3J0YW50fVtjZHMtdGV4dH49dHJ1bmNhdGVde292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnQ7dGV4dC1vdmVyZmxvdzplbGxpcHNpcyFpbXBvcnRhbnQ7d2hpdGUtc3BhY2U6bm93cmFwIWltcG9ydGFudH1bY2RzLXRleHR+PXRydW5jYXRlXTph''@;'; put 'put ''ZnRlcixbY2RzLXRleHR+PXRydW5jYXRlXTpiZWZvcmV7Y29udGVudDpub25lfVtjZHMtdGV4dH49anVzdGlmeV17dGV4dC1hbGlnbjpqdXN0aWZ5IWltcG9ydGFudH1bY2RzLXRleHR+PWxlZnRde3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1yaWdodF17dGV4dC1hbGln''@;'; put 'put ''bjpyaWdodCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1jZW50ZXJde3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH1bY2RzLXRleHR+PW1vbm9zcGFjZV17Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1vbm9zcGFjZS1mb250LWZhbWlseSl9W2Nkcy10ZXh0fj1saGVd''@;'; put 'put ''e3BhZGRpbmc6LjA1cHggMH1bY2RzLXRleHR+PWxoZV06YmVmb3Jle2NvbnRlbnQ6IiI7bWFyZ2luLXRvcDotLjEyNGVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy10ZXh0fj1saGVdOmFmdGVye2NvbnRlbnQ6IiI7bWFyZ2luLWJvdHRvbTotLjIyMWVtO2Rpc3BsYXk6YmxvY2s7aGVp''@;'; put 'put ''Z2h0OjB9W2Nkcy1sYXlvdXR+PWRpc2FibGUtbGhlXTphZnRlcixbY2RzLWxheW91dH49ZGlzYWJsZS1saGVdOmJlZm9yZSxbY2RzLXRleHR+PWRpc2FibGUtbGhlXTphZnRlcixbY2RzLXRleHR+PWRpc2FibGUtbGhlXTpiZWZvcmV7Y29udGVudDpub25lfVtjZHMtdGV4dCo9aDBdLFtjZHMt''@;'; put 'put ''dGV4dCo9aDFdLFtjZHMtdGV4dCo9aDJdLFtjZHMtdGV4dCo9aDNdLFtjZHMtdGV4dCo9aDRdLFtjZHMtdGV4dCo9aDVdLFtjZHMtdGV4dCo9aDZde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZl''@;'; put 'put ''bmlyIE5leHQiLCBzYW5zLXNlcmlmKTtmb250LXNpemU6MnJlbTtmb250LXdlaWdodDoyMDA7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7bGluZS1oZWlnaHQ6MS4yZW07bGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW19W2Nkcy10ZXh0Kj1oMF06YmVmb3Jle2Nv''@;'; put 'put ''bnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjJlbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oMF06YWZ0ZXJ7''@;'; put 'put ''Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4yZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDFdLFtjZHMtdGV4dCo9aDJdLFtjZHMtdGV4dCo9aDNdLFtjZHMtdGV4dCo9aDRdLFtjZHMtdGV4dCo9aDVdLFtjZHMtdGV4dCo9aDZde2Zv''@;'; put 'put ''bnQtc2l6ZToxLjZyZW07bGluZS1oZWlnaHQ6MS41ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTU2ZW19W2Nkcy10ZXh0Kj1oMV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS10b3AtZ2FwLWhlaWdodCkgKyAuMjVlbSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgxXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1n''@;'; put 'put ''YXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyAuMjVlbSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWgyXSxbY2RzLXRleHQqPWgzXSxbY2RzLXRleHQqPWg0''@;'; put 'put ''XSxbY2RzLXRleHQqPWg1XSxbY2RzLXRleHQqPWg2XXtmb250LXNpemU6MS40cmVtO2xpbmUtaGVpZ2h0OjEuNzE0M2VtO2xldHRlci1zcGFjaW5nOi0uMDE3ODU3ZW19W2Nkcy10ZXh0Kj1oMl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdp''@;'; put 'put ''bi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjcxNDNlbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oMl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7''@;'; put 'put ''bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygo''@;'; put 'put ''MS43MTQzZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDNdLFtjZHMtdGV4dCo9aDRdLFtjZHMtdGV4dCo9aDVdLFtjZHMtdGV4dCo9aDZde2ZvbnQtc2l6ZToxLjFyZW07bGluZS1oZWlnaHQ6MS4wOTA5ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTM2MzZlbX1bY2RzLXRl''@;'; put 'put ''eHQqPWgzXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKDEuMDkwOWVtIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1b''@;'; put 'put ''Y2RzLXRleHQqPWgzXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2Nl''@;'; put 'put ''bmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCgxLjA5MDllbSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1oNF0sW2Nkcy10ZXh0Kj1oNV0sW2Nkcy10ZXh0Kj1oNl17Zm9udC1zaXplOi45cmVtO2xpbmUtaGVp''@;'; put 'put ''Z2h0OjEuMzMzMzMzZW07bGV0dGVyLXNwYWNpbmc6LS4wMTExMTFlbX1bY2RzLXRleHQqPWg0XTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVp''@;'; put 'put ''Z2h0KSArIGNhbGMoKDEuMzMzMzMzZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aDRdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''dG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuMzMzMzMzZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDVdLFtj''@;'; put 'put ''ZHMtdGV4dCo9aDZde2ZvbnQtc2l6ZTouOHJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS41ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW19W2Nkcy10ZXh0Kj1oNV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206''@;'; put 'put ''Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyAuMjVlbSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWg1XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyAuMjVlbSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWg2''@;'; put 'put ''XXtmb250LXNpemU6LjdyZW07Zm9udC13ZWlnaHQ6NTAwO2xldHRlci1zcGFjaW5nOi0uMDMxMjVlbX1bY2RzLXRleHQqPWg2XTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIC4yNWVtKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aDZdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9w''@;'; put 'put ''LWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIC4yNWVtKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9cDBdLFtjZHMtdGV4dCo9cDFde2ZvbnQtc2l6ZTox''@;'; put 'put ''LjJyZW07Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01MDApO2xpbmUtaGVpZ2h0OjEuMTY2NjdlbTtsZXR0ZXItc3BhY2luZzotLjAwODMzM2VtfVtjZHMtdGV4dCo9cDBdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVp''@;'; put 'put ''Z2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygoMS4xNjY2N2VtIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXAwXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6Ymxv''@;'; put 'put ''Y2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LXgtaGVpZ2h0KSkgKyBjYWxjKCgxLjE2NjY3ZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9cDFde2ZvbnQtc2l6ZTouN3JlbTtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwKTtsaW5lLWhlaWdodDoxLjcxNDI5ZW07bGV0dGVyLXNwYWNp''@;'; put 'put ''bmc6LS4wMTQyODZlbX1bY2RzLXRleHQqPXAxXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKDEuNzE0MjllbSAtIDFl''@;'; put 'put ''bSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1wMV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS43MTQyOWVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXAyXSxbY2RzLXRleHQqPXAzXSxbY2RzLXRleHQqPXA0XSxb''@;'; put 'put ''Y2RzLXRleHQqPXA1XXtmb250LXNpemU6LjY1cmVtO2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwKTtsaW5lLWhlaWdodDoxLjg0NjE1ZW07bGV0dGVyLXNwYWNpbmc6LS4wMDc2OTJlbX1bY2RzLXRleHQqPXAyXTpiZWZvcmV7Y29u''@;'; put 'put ''dGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKDEuODQ2MTVlbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1wMl06YWZ0''@;'; put 'put ''ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS44NDYxNWVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXAzXSxbY2RzLXRleHQqPXA0XSxbY2RzLXRleHQqPXA1XXtmb250LXdlaWdodDo0MDB9W2Nkcy10ZXh0Kj1wM106YmVmb3Jle2Nv''@;'; put 'put ''bnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjg0NjE1ZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9cDNdOmFm''@;'; put 'put ''dGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuODQ2MTVlbSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wNF0sW2Nkcy10ZXh0Kj1wNV17Zm9udC1zaXplOi42cmVtO2ZvbnQtd2VpZ2h0OjYwMDtsaW5lLWhlaWdodDoyZW07bGV0dGVy''@;'; put 'put ''LXNwYWNpbmc6LS4wMDgzMzNlbX1bY2RzLXRleHQqPXA0XTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIC41ZW0pKi0xKSArIC4w''@;'; put 'put ''MzdlbSl9W2Nkcy10ZXh0Kj1wNF06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgLjVlbSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXA1XXtmb250LXdlaWdodDo0MDB9W2Nkcy10ZXh0Kj1wNV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWln''@;'; put 'put ''aHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyAuNWVtKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9cDVdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21h''@;'; put 'put ''cmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIC41ZW0pKi0x''@;'; put 'put ''KSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wNl0sW2Nkcy10ZXh0Kj1wN10sW2Nkcy10ZXh0Kj1wOF17Zm9udC1zaXplOi41NXJlbTtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7bGluZS1oZWlnaHQ6MS4wOTA5MDllbTtsZXR0ZXIt''@;'; put 'put ''c3BhY2luZzouMDE4MTgyZW19W2Nkcy10ZXh0Kj1wNl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjA5MDkwOWVt''@;'; put 'put ''IC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXA2XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCgxLjA5MDkwOWVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXA3XSxbY2RzLXRleHQqPXA4XXtmb250LXdlaWdo''@;'; put 'put ''dDo0MDB9W2Nkcy10ZXh0Kj1wN106YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjA5MDkwOWVtIC0gMWVtKS8yKSkq''@;'; put 'put ''LTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXA3XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCgxLjA5MDkwOWVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXA4XXtmb250LXNpemU6LjVyZW07bGluZS1oZWlnaHQ6MS4yZW07bGV0''@;'; put 'put ''dGVyLXNwYWNpbmc6LjAyZW19W2Nkcy10ZXh0Kj1wOF06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjJlbSAtIDFl''@;'; put 'put ''bSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1wOF06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4yZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfTpob3N0LDpyb290ey0tXDNiNCAxOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNl''@;'; put 'put ''LXh4eHMpOy0tXDNiNCAyOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXh4cyk7LS1cM2I0IDM6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteHMpOy0tXDNiNCA0OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXNtKTstLVwzYjQgNTp2YXIoLS1jZHMtZ2xvYmFsLWxh''@;'; put 'put ''eW91dC1zcGFjZS1tZCk7LS1cM2I0IDY6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbGcpOy0tXDNiNCA3OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhsKTstLVwzYjQgODp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eGwpOy0tXDNiNCA5OnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtbGF5b3V0LXNwYWNlLXh4eGwpfVtjZHMtbGF5b3V0Kj0iYWxpZ246ZmlsbCJdPip7ZmxleC1ncm93OjEhaW1wb3J0YW50O2ZsZXgtYmFzaXM6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJ3cmFwOm5vbmUiXXtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduOnN0cmV0Y2giXXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbjpzaHJpbmsiXXtmbGV4LXNocmluazoxIWltcG9ydGFudDtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9QG1lZGlhKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpmaWxs''@;'; put 'put ''Il0+KntmbGV4LWdyb3c6MSFpbXBvcnRhbnQ7ZmxleC1iYXNpczowIWltcG9ydGFudH1bY2RzLWxheW91dH49IndyYXBAeHM6bm9uZSJde2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dCo9ImFsaWduQHhzOnNocmluayJde2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50O2ZsZXgtZ3JvdzowIWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpmaWxsIl0+KntmbGV4LWdyb3c6MSFpbXBvcnRhbnQ7ZmxleC1iYXNpczow''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49IndyYXBAc206bm9uZSJde2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduQHNtOnNocmluayJde2ZsZXgtc2hyaW5r''@;'; put 'put ''OjEhaW1wb3J0YW50O2ZsZXgtZ3JvdzowIWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpmaWxsIl0+KntmbGV4LWdyb3c6MSFpbXBvcnRhbnQ7ZmxleC1iYXNpczowIWltcG9ydGFudH1bY2RzLWxheW91dH49IndyYXBAbWQ6bm9uZSJd''@;'; put 'put ''e2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduQG1kOnNocmluayJde2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50O2ZsZXgtZ3JvdzowIWltcG9ydGFudH19QG1l''@;'; put 'put ''ZGlhKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6ZmlsbCJdPip7ZmxleC1ncm93OjEhaW1wb3J0YW50O2ZsZXgtYmFzaXM6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJ3cmFwQGxnOm5vbmUiXXtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduQGxnOnN0cmV0Y2giXXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpzaHJpbmsiXXtmbGV4LXNocmluazoxIWltcG9ydGFudDtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dCo9ImFs''@;'; put 'put ''aWduQHhsOmZpbGwiXT4qe2ZsZXgtZ3JvdzoxIWltcG9ydGFudDtmbGV4LWJhc2lzOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0id3JhcEB4bDpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpzdHJldGNoIl17ZmxleC1ncm93OjEhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1ncm93OjAhaW1wb3J0YW50fX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5''@;'; put 'put ''LWl0ZW1zOmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6ZmxleC1zdGFydDt3aWR0aDoxMDAlO21hcmdpbjowO21pbi1oZWlnaHQ6MH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49dmVy''@;'; put 'put ''dGljYWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLXRleHRde3dpZHRoOmluaXRpYWwhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduOmJvdHRvbSJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ246cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxd''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1j''@;'; put 'put ''b250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVyOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1p''@;'; put 'put ''dGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jp''@;'; put 'put ''em9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdy''@;'; put 'put ''b3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17bWFy''@;'; put 'put ''Z2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJh''@;'; put 'put ''bGlnbjpib3R0b20iXXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJd''@;'; put 'put ''e21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1AbWVkaWEobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnRvcCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJhbGlnbkB4czpib3R0b20iXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''QHhzOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFs''@;'; put 'put ''XVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1''@;'; put 'put ''c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlckB4czpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1zdHJl''@;'; put 'put ''dGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1b''@;'; put 'put ''Y2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1j''@;'; put 'put ''b250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSxbY2RzLWxheW91''@;'; put 'put ''dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJhbGlnbkB4czpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl17YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dG9wIl17YWxpZ24taXRl''@;'; put 'put ''bXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206bGVmdCJde2p1c3RpZnktY29udGVudDpmbGV4''@;'; put 'put ''LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpj''@;'; put 'put ''ZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpj''@;'; put 'put ''ZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVyQHNtOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX1bY2RzLWxheW91''@;'; put 'put ''dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250''@;'; put 'put ''YWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduQHNtOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jp''@;'; put 'put ''em9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFs''@;'; put 'put ''aWduQHNtOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtY2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5b''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJde2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpib3R0b20iXXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduQHNtOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206bGVmdCJde21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXR+''@;'; put 'put ''PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxd''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpsZWZ0Il17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2Rz''@;'; put 'put ''LWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRl''@;'; put 'put ''cn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0ib3JkZXJA''@;'; put 'put ''bWQ6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMt''@;'; put 'put ''bGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLXN0cmV0Y2gi''@;'; put 'put ''XT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ25AbWQ6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtY2VudGVyIl17YWxpZ24tc2Vs''@;'; put 'put ''ZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJn''@;'; put 'put ''aW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dG9wIl17YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOmJvdHRvbSJde2FsaWduLXNl''@;'; put 'put ''bGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1''@;'; put 'put ''dG8haW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90''@;'; put 'put ''dG9tIl17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpyaWdodCJde2p1''@;'; put 'put ''c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6''@;'; put 'put ''Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAbGc6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0''@;'; put 'put ''ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhv''@;'; put 'put ''cml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNo''@;'; put 'put ''O2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxd''@;'; put 'put ''PltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6''@;'; put 'put ''aG9yaXpvbnRhbC1jZW50ZXIiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl17YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1o''@;'; put 'put ''b3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJde2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpv''@;'; put 'put ''bnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0''@;'; put 'put ''fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpsZWZ0Il17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpyaWdodCJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1j''@;'; put 'put ''b250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJde2FsaWdu''@;'; put 'put ''LWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAeGw6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFs''@;'; put 'put ''XVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1zdHJldGNoIl17''@;'; put 'put ''anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6''@;'; put 'put ''c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMt''@;'; put 'put ''bGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVy''@;'; put 'put ''Il0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ25AeGw6dG9wIl17YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmJvdHRvbSJde2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6cmln''@;'; put 'put ''aHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1bY2RzLWxheW91dH49dmVydGljYWxde3dpZHRoOjEwMCU7ZGlzcGxheTpmbGV4O2Zs''@;'; put 'put ''ZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ246Ym90dG9tIl17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''OnJpZ2h0Il17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFs''@;'; put 'put ''LWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlcjpy''@;'; put 'put ''ZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''OnZlcnRpY2FsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRj''@;'; put 'put ''aCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJd''@;'; put 'put ''LFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVy''@;'; put 'put ''dGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxd''@;'; put 'put ''PltjZHMtbGF5b3V0Kj0iYWxpZ246Ym90dG9tIl17bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99QG1lZGlhKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dG9wIl17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ25AeHM6Ym90dG9tIl17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnJp''@;'; put 'put ''Z2h0Il17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9u''@;'; put 'put ''dGFsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJv''@;'; put 'put ''cmRlckB4czpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25AeHM6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2Rz''@;'; put 'put ''LWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJh''@;'; put 'put ''bGlnbkB4czpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dG9wIl17bWFyZ2luLWJvdHRv''@;'; put 'put ''bTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl17bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXXttYXJnaW4tbGVmdDph''@;'; put 'put ''dXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYShtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJde2p1c3RpZnktY29udGVu''@;'; put 'put ''dDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFy''@;'; put 'put ''dH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29u''@;'; put 'put ''dGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAc206cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLXN0cmV0Y2giXXtqdXN0''@;'; put 'put ''aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLXN0cmV0Y2giXXth''@;'; put 'put ''bGlnbi1pdGVtczpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnN0''@;'; put 'put ''cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl17bWFyZ2luLXRvcDphdXRvO21hcmdpbi1i''@;'; put 'put ''b3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZl''@;'; put 'put ''cnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJde21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJde21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRp''@;'; put 'put ''Y2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206bGVmdCJde21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49dmVy''@;'; put 'put ''dGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpib3R0b20iXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6bGVmdCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bkBtZDp2ZXJ0aWNhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduQG1kOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9Im9yZGVyQG1kOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZX1bY2RzLWxheW91dH49dmVydGlj''@;'; put 'put ''YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRp''@;'; put 'put ''Y2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRj''@;'; put 'put ''aH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFs''@;'; put 'put ''aWduQG1kOnZlcnRpY2FsLWNlbnRlciJde21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jp''@;'; put 'put ''em9udGFsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpib3R0''@;'; put 'put ''b20iXXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOmxlZnQiXXttYXJnaW4tcmln''@;'; put 'put ''aHQ6YXV0b319QG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJd''@;'; put 'put ''e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpyaWdodCJde2FsaWduLWl0ZW1z''@;'; put 'put ''OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGln''@;'; put 'put ''bi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAbGc6cmV2ZXJzZSJd''@;'; put 'put ''e2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2''@;'; put 'put ''ZXJ0aWNhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnN0''@;'; put 'put ''cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBs''@;'; put 'put ''ZzpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtY2VudGVyIl17bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0s''@;'; put 'put ''W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOnRvcCJde21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJde21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49''@;'; put 'put ''dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJde21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12''@;'; put 'put ''ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGlj''@;'; put 'put ''YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2Rz''@;'; put 'put ''LWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlckB4bDpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJl''@;'; put 'put ''dGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0''@;'; put 'put ''Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6c3RyZXRjaCJdPip7ZmxleC1n''@;'; put 'put ''cm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMt''@;'; put 'put ''bGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25AeGw6dG9wIl17bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl17bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25AeGw6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99fVtjZHMtbGF5b3V0fj1ncmlkXXtkaXNwbGF5OmdyaWQ7YWxpZ24taXRlbXM6c3RhcnQ7YWxpZ24t''@;'; put 'put ''Y29udGVudDpzdGFydDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KHZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LWdyaWQtY29scyksMWZyKTt3aWR0aDoxMDAlfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj1yb3dzXXtncmlkLXRlbXBsYXRlLXJvd3M6cmVwZWF0KDEyLGF1dG8p''@;'; put 'put ''fVtjZHMtbGF5b3V0fj1ncmlkXT5bY2RzLWxheW91dCo9cm93XXthbGlnbi1zZWxmOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJjb2xzOmF1dG8iXXtncmlkLWF1dG8tZmxvdzpjb2x1bW47Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmluaXRpYWx9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2xzQCJdPip7Z3JpZC1jb2x1bW46c3BhbiB2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1ncmlkLWNvbHMpfVtjZHMtbGF5b3V0Kj0iY29sQCJde2dyaWQtY29sdW1uOnNwYW4gMTJ9W2Nkcy1sYXlvdXQqPSJjb2xzOjEiXT4qe2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJyb3dzOjEiXT4qe2dyaWQtcm93OnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlvdXQqPSJjb2xzOjIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJyb3dzOjIiXT4qe2dyaWQtcm93OnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJjb2xzOjMiXT4qe2dy''@;'; put 'put ''aWQtY29sdW1uOnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQqPSJyb3dzOjMiXT4qe2dyaWQtcm93OnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQqPSJjb2xzOjQiXT4qe2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDR9W2Nkcy1sYXlvdXQqPSJyb3dzOjQiXT4qe2dyaWQtcm93OnNwYW4gNC9z''@;'; put 'put ''cGFuIDR9W2Nkcy1sYXlvdXQqPSJjb2xzOjUiXT4qe2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJyb3dzOjUiXT4qe2dyaWQtcm93OnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJjb2xzOjYiXT4qe2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJyb3dzOjYiXT4qe2dyaWQtcm93OnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQqPSJjb2xzOjciXT4qe2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJyb3dzOjciXT4qe2dyaWQtcm93OnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJjb2xzOjgiXT4qe2dy''@;'; put 'put ''aWQtY29sdW1uOnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJyb3dzOjgiXT4qe2dyaWQtcm93OnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJjb2xzOjkiXT4qe2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJyb3dzOjkiXT4qe2dyaWQtcm93OnNwYW4gOS9z''@;'; put 'put ''cGFuIDl9W2Nkcy1sYXlvdXQqPSJjb2xzOjEwIl0+KntncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJyb3dzOjEwIl0+KntncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJjb2xzOjExIl0+KntncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTF9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJyb3dzOjExIl0+KntncmlkLXJvdzpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJjb2xzOjEyIl0+KntncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTJ9W2Nkcy1sYXlvdXQqPSJyb3dzOjEyIl0+KntncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTJ9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJjb2w6MSJde2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjEiXXtncmlkLXJvdzpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDoyIl17Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJyb3c6MiJde2dyaWQtcm93OnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjMiXXtncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzozIl17Z3JpZC1yb3c6c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJjb2w6NCJde2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjQiXXtncmlkLXJvdzpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDo1Il17Z3JpZC1jb2x1bW46c3BhbiA1L3NwYW4gNSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6NSJde2dyaWQtcm93OnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjYiXXtncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzo2Il17Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNiFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6NyJde2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjciXXtncmlkLXJvdzpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDo4Il17Z3JpZC1jb2x1bW46c3BhbiA4L3Nw''@;'; put 'put ''YW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6OCJde2dyaWQtcm93OnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjkiXXtncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzo5Il17Z3JpZC1yb3c6c3BhbiA5''@;'; put 'put ''L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6MTAiXXtncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjEwIl17Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDoxMSJde2dyaWQt''@;'; put 'put ''Y29sdW1uOnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6MTEiXXtncmlkLXJvdzpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjEyIl17Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9''@;'; put 'put ''InJvdzoxMiJde2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtMSJde2dyaWQtY29sdW1uLXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC0xIl17Z3JpZC1jb2x1bW4tZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0icm93OnN0YXJ0LTEiXXtncmlkLXJvdy1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtMSJde2dyaWQtcm93LWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC0yIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJjb2w6ZW5kLTIiXXtncmlkLWNvbHVtbi1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtMiJde2dyaWQtcm93LXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC0yIl17Z3JpZC1yb3ctZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''Y29sOnN0YXJ0LTMiXXtncmlkLWNvbHVtbi1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtMyJde2dyaWQtY29sdW1uLWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC0zIl17Z3JpZC1yb3ctc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3c6ZW5kLTMiXXtncmlkLXJvdy1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtNCJde2dyaWQtY29sdW1uLXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC00Il17Z3JpZC1jb2x1bW4tZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''cm93OnN0YXJ0LTQiXXtncmlkLXJvdy1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtNCJde2dyaWQtcm93LWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC01Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJj''@;'; put 'put ''b2w6ZW5kLTUiXXtncmlkLWNvbHVtbi1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtNSJde2dyaWQtcm93LXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC01Il17Z3JpZC1yb3ctZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0''@;'; put 'put ''YXJ0LTYiXXtncmlkLWNvbHVtbi1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtNiJde2dyaWQtY29sdW1uLWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC02Il17Z3JpZC1yb3ctc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6''@;'; put 'put ''ZW5kLTYiXXtncmlkLXJvdy1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtNyJde2dyaWQtY29sdW1uLXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC03Il17Z3JpZC1jb2x1bW4tZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0''@;'; put 'put ''YXJ0LTciXXtncmlkLXJvdy1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtNyJde2dyaWQtcm93LWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC04Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5k''@;'; put 'put ''LTgiXXtncmlkLWNvbHVtbi1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtOCJde2dyaWQtcm93LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC04Il17Z3JpZC1yb3ctZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTki''@;'; put 'put ''XXtncmlkLWNvbHVtbi1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtOSJde2dyaWQtY29sdW1uLWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC05Il17Z3JpZC1yb3ctc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTki''@;'; put 'put ''XXtncmlkLXJvdy1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtMTAiXXtncmlkLWNvbHVtbi1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTEwIl17Z3JpZC1jb2x1bW4tZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFy''@;'; put 'put ''dC0xMCJde2dyaWQtcm93LXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtMTAiXXtncmlkLXJvdy1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTExIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29s''@;'; put 'put ''OmVuZC0xMSJde2dyaWQtY29sdW1uLWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtMTEiXXtncmlkLXJvdy1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTExIl17Z3JpZC1yb3ctZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNv''@;'; put 'put ''bDpzdGFydC0xMiJde2dyaWQtY29sdW1uLXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtMTIiXXtncmlkLWNvbHVtbi1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0LTEyIl17Z3JpZC1yb3ctc3RhcnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0icm93OmVuZC0xMiJde2dyaWQtcm93LWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtMTMiXXtncmlkLWNvbHVtbi1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTEzIl17Z3JpZC1jb2x1bW4tZW5kOjEzIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dCo9InJvdzpzdGFydC0xMyJde2dyaWQtcm93LXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtMTMiXXtncmlkLXJvdy1lbmQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24tY29udGVudDpz''@;'; put 'put ''dGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmJvdHRvbSJde2FsaWduLWNvbnRlbnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ246bGVmdCJde2p1c3RpZnktY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRj''@;'; put 'put ''aDtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50''@;'; put 'put ''ZXI7anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1AbWVkaWEobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dCo9ImNvbHNAeHM6MSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9InJvd3NAeHM6MSJdPip7Z3JpZC1yb3c6c3Bh''@;'; put 'put ''biAxL3NwYW4gMX1bY2RzLWxheW91dCo9ImNvbHNAeHM6MiJdPip7Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9InJvd3NAeHM6MiJdPip7Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9ImNvbHNAeHM6MyJdPip7Z3JpZC1jb2x1bW46c3BhbiAzL3Nw''@;'; put 'put ''YW4gM31bY2RzLWxheW91dCo9InJvd3NAeHM6MyJdPip7Z3JpZC1yb3c6c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9ImNvbHNAeHM6NCJdPip7Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9InJvd3NAeHM6NCJdPip7Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNH1bY2Rz''@;'; put 'put ''LWxheW91dCo9ImNvbHNAeHM6NSJdPip7Z3JpZC1jb2x1bW46c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9InJvd3NAeHM6NSJdPip7Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9ImNvbHNAeHM6NiJdPip7Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91''@;'; put 'put ''dCo9InJvd3NAeHM6NiJdPip7Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9ImNvbHNAeHM6NyJdPip7Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9InJvd3NAeHM6NyJdPip7Z3JpZC1yb3c6c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9ImNvbHNA''@;'; put 'put ''eHM6OCJdPip7Z3JpZC1jb2x1bW46c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9InJvd3NAeHM6OCJdPip7Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9ImNvbHNAeHM6OSJdPip7Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9InJvd3NAeHM6OSJd''@;'; put 'put ''Pip7Z3JpZC1yb3c6c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9ImNvbHNAeHM6MTAiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9InJvd3NAeHM6MTAiXT4qe2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9ImNvbHNAeHM6MTEiXT4q''@;'; put 'put ''e2dyaWQtY29sdW1uOnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9InJvd3NAeHM6MTEiXT4qe2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9ImNvbHNAeHM6MTIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMn1bY2RzLWxheW91dCo9InJvd3NAeHM6MTIi''@;'; put 'put ''XT4qe2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMn19QG1lZGlhKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjEiXT4qe2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjEiXT4qe2dyaWQtcm93OnNwYW4gMS9zcGFuIDF9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJjb2xzQHNtOjIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjIiXT4qe2dyaWQtcm93OnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjMiXT4qe2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dzQHNtOjMiXT4qe2dyaWQtcm93OnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjQiXT4qe2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDR9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjQiXT4qe2dyaWQtcm93OnNwYW4gNC9zcGFuIDR9W2Nkcy1sYXlvdXQqPSJjb2xzQHNt''@;'; put 'put ''OjUiXT4qe2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjUiXT4qe2dyaWQtcm93OnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjYiXT4qe2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjYiXT4q''@;'; put 'put ''e2dyaWQtcm93OnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjciXT4qe2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjciXT4qe2dyaWQtcm93OnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjgiXT4qe2dyaWQtY29s''@;'; put 'put ''dW1uOnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjgiXT4qe2dyaWQtcm93OnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjkiXT4qe2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjkiXT4qe2dyaWQtcm93OnNwYW4g''@;'; put 'put ''OS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjEwIl0+KntncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjEwIl0+KntncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjExIl0+KntncmlkLWNvbHVtbjpzcGFu''@;'; put 'put ''IDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjExIl0+KntncmlkLXJvdzpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjEyIl0+KntncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTJ9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjEyIl0+KntncmlkLXJvdzpzcGFu''@;'; put 'put ''IDEyL3NwYW4gMTJ9fUBtZWRpYShtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0Kj0iY29sc0BtZDoxIl0+KntncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0icm93c0BtZDoxIl0+KntncmlkLXJvdzpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0iY29sc0BtZDoy''@;'; put 'put ''Il0+KntncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0icm93c0BtZDoyIl0+KntncmlkLXJvdzpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0iY29sc0BtZDozIl0+KntncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0icm93c0BtZDozIl0+Kntn''@;'; put 'put ''cmlkLXJvdzpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0iY29sc0BtZDo0Il0+KntncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0icm93c0BtZDo0Il0+KntncmlkLXJvdzpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0iY29sc0BtZDo1Il0+KntncmlkLWNvbHVt''@;'; put 'put ''bjpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0icm93c0BtZDo1Il0+KntncmlkLXJvdzpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0iY29sc0BtZDo2Il0+KntncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0icm93c0BtZDo2Il0+KntncmlkLXJvdzpzcGFuIDYv''@;'; put 'put ''c3BhbiA2fVtjZHMtbGF5b3V0Kj0iY29sc0BtZDo3Il0+KntncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0icm93c0BtZDo3Il0+KntncmlkLXJvdzpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0iY29sc0BtZDo4Il0+KntncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93c0BtZDo4Il0+KntncmlkLXJvdzpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0iY29sc0BtZDo5Il0+KntncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0icm93c0BtZDo5Il0+KntncmlkLXJvdzpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sc0BtZDoxMCJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0icm93c0BtZDoxMCJdPip7Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0iY29sc0BtZDoxMSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExfVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0icm93c0BtZDoxMSJdPip7Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0iY29sc0BtZDoxMiJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyfVtjZHMtbGF5b3V0Kj0icm93c0BtZDoxMiJdPip7Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyfX1AbWVk''@;'; put 'put ''aWEobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXQqPSJjb2xzQGxnOjEiXT4qe2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlvdXQqPSJyb3dzQGxnOjEiXT4qe2dyaWQtcm93OnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlvdXQqPSJjb2xzQGxnOjIiXT4qe2dyaWQtY29sdW1u''@;'; put 'put ''OnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJyb3dzQGxnOjIiXT4qe2dyaWQtcm93OnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJjb2xzQGxnOjMiXT4qe2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQqPSJyb3dzQGxnOjMiXT4qe2dyaWQtcm93OnNwYW4gMy9z''@;'; put 'put ''cGFuIDN9W2Nkcy1sYXlvdXQqPSJjb2xzQGxnOjQiXT4qe2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDR9W2Nkcy1sYXlvdXQqPSJyb3dzQGxnOjQiXT4qe2dyaWQtcm93OnNwYW4gNC9zcGFuIDR9W2Nkcy1sYXlvdXQqPSJjb2xzQGxnOjUiXT4qe2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDV9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJyb3dzQGxnOjUiXT4qe2dyaWQtcm93OnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJjb2xzQGxnOjYiXT4qe2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQqPSJyb3dzQGxnOjYiXT4qe2dyaWQtcm93OnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJjb2xzQGxnOjciXT4qe2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJyb3dzQGxnOjciXT4qe2dyaWQtcm93OnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJjb2xzQGxnOjgiXT4qe2dyaWQtY29sdW1uOnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJy''@;'; put 'put ''b3dzQGxnOjgiXT4qe2dyaWQtcm93OnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJjb2xzQGxnOjkiXT4qe2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJyb3dzQGxnOjkiXT4qe2dyaWQtcm93OnNwYW4gOS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJjb2xzQGxnOjEw''@;'; put 'put ''Il0+KntncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJyb3dzQGxnOjEwIl0+KntncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJjb2xzQGxnOjExIl0+KntncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJyb3dzQGxn''@;'; put 'put ''OjExIl0+KntncmlkLXJvdzpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJjb2xzQGxnOjEyIl0+KntncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTJ9W2Nkcy1sYXlvdXQqPSJyb3dzQGxnOjEyIl0+KntncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTJ9fUBtZWRpYShtaW4td2lkdGg6MTQ0''@;'; put 'put ''MHB4KXtbY2RzLWxheW91dCo9ImNvbHNAeGw6MSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9InJvd3NAeGw6MSJdPip7Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9ImNvbHNAeGw6MiJdPip7Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMn1b''@;'; put 'put ''Y2RzLWxheW91dCo9InJvd3NAeGw6MiJdPip7Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9ImNvbHNAeGw6MyJdPip7Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9InJvd3NAeGw6MyJdPip7Z3JpZC1yb3c6c3BhbiAzL3NwYW4gM31bY2RzLWxheW91''@;'; put 'put ''dCo9ImNvbHNAeGw6NCJdPip7Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9InJvd3NAeGw6NCJdPip7Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9ImNvbHNAeGw6NSJdPip7Z3JpZC1jb2x1bW46c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9InJv''@;'; put 'put ''d3NAeGw6NSJdPip7Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9ImNvbHNAeGw6NiJdPip7Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9InJvd3NAeGw6NiJdPip7Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9ImNvbHNAeGw6NyJd''@;'; put 'put ''Pip7Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9InJvd3NAeGw6NyJdPip7Z3JpZC1yb3c6c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9ImNvbHNAeGw6OCJdPip7Z3JpZC1jb2x1bW46c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9InJvd3NAeGw6OCJdPip7Z3Jp''@;'; put 'put ''ZC1yb3c6c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9ImNvbHNAeGw6OSJdPip7Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9InJvd3NAeGw6OSJdPip7Z3JpZC1yb3c6c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9ImNvbHNAeGw6MTAiXT4qe2dyaWQtY29sdW1u''@;'; put 'put ''OnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9InJvd3NAeGw6MTAiXT4qe2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9ImNvbHNAeGw6MTEiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9InJvd3NAeGw6MTEiXT4qe2dyaWQtcm93''@;'; put 'put ''OnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9ImNvbHNAeGw6MTIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMn1bY2RzLWxheW91dCo9InJvd3NAeGw6MTIiXT4qe2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMn19QG1lZGlhKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2xAeHM6MSJde2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjEiXXtncmlkLXJvdzpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czoyIl17Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMiFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6MiJde2dyaWQtcm93OnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjMiXXtncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czozIl17Z3JpZC1yb3c6c3BhbiAzL3Nw''@;'; put 'put ''YW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6NCJde2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjQiXXtncmlkLXJvdzpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czo1Il17Z3JpZC1j''@;'; put 'put ''b2x1bW46c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6NSJde2dyaWQtcm93OnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjYiXXtncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJv''@;'; put 'put ''d0B4czo2Il17Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6NyJde2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjciXXtncmlkLXJvdzpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dCo9ImNvbEB4czo4Il17Z3JpZC1jb2x1bW46c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6OCJde2dyaWQtcm93OnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjkiXXtncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czo5Il17Z3JpZC1yb3c6c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6MTAiXXtncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjEwIl17Z3JpZC1y''@;'; put 'put ''b3c6c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czoxMSJde2dyaWQtY29sdW1uOnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6MTEiXXtncmlkLXJvdzpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iY29sQHhzOjEyIl17Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czoxMiJde2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0Kj0iY29sQHNtOjEiXXtn''@;'; put 'put ''cmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbToxIl17Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206MiJde2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0icm93QHNtOjIiXXtncmlkLXJvdzpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTozIl17Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206MyJde2dyaWQtcm93OnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjQiXXtncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTo0Il17Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206NSJde2dyaWQtY29sdW1uOnNwYW4gNS9z''@;'; put 'put ''cGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjUiXXtncmlkLXJvdzpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTo2Il17Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206NiJde2dyaWQt''@;'; put 'put ''cm93OnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjciXXtncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTo3Il17Z3JpZC1yb3c6c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xA''@;'; put 'put ''c206OCJde2dyaWQtY29sdW1uOnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjgiXXtncmlkLXJvdzpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTo5Il17Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJyb3dAc206OSJde2dyaWQtcm93OnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjEwIl17Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbToxMCJde2dyaWQtcm93OnNwYW4gMTAvc3Bh''@;'; put 'put ''biAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206MTEiXXtncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjExIl17Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbToxMiJd''@;'; put 'put ''e2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206MTIiXXtncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dCo9ImNvbEBtZDoxIl17Z3JpZC1jb2x1bW46c3Bh''@;'; put 'put ''biAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6MSJde2dyaWQtcm93OnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjIiXXtncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDoyIl17''@;'; put 'put ''Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6MyJde2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjMiXXtncmlkLXJvdzpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9''@;'; put 'put ''ImNvbEBtZDo0Il17Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6NCJde2dyaWQtcm93OnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjUiXXtncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1IWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dCo9InJvd0BtZDo1Il17Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6NiJde2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjYiXXtncmlkLXJvdzpzcGFuIDYvc3Bh''@;'; put 'put ''biA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDo3Il17Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6NyJde2dyaWQtcm93OnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjgiXXtncmlkLWNv''@;'; put 'put ''bHVtbjpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDo4Il17Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6OSJde2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''QG1kOjkiXXtncmlkLXJvdzpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDoxMCJde2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6MTAiXXtncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjExIl17Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDoxMSJde2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6MTIiXXtncmlkLWNvbHVtbjpz''@;'; put 'put ''cGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjEyIl17Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0Kj0iY29sQGxnOjEiXXtncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzoxIl17Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6MiJde2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjIiXXtncmlkLXJvdzpzcGFu''@;'; put 'put ''IDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzozIl17Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6MyJde2dyaWQtcm93OnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOjQiXXtn''@;'; put 'put ''cmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzo0Il17Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6NSJde2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0icm93QGxnOjUiXXtncmlkLXJvdzpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzo2Il17Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6NiJde2dyaWQtcm93OnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0iY29sQGxnOjciXXtncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzo3Il17Z3JpZC1yb3c6c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6OCJde2dyaWQtY29sdW1uOnNwYW4gOC9z''@;'; put 'put ''cGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjgiXXtncmlkLXJvdzpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzo5Il17Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6OSJde2dyaWQt''@;'; put 'put ''cm93OnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOjEwIl17Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzoxMCJde2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2xAbGc6MTEiXXtncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjExIl17Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzoxMiJde2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAx''@;'; put 'put ''MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6MTIiXXtncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXQqPSJjb2xAeGw6MSJde2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0icm93QHhsOjEiXXtncmlkLXJvdzpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDoyIl17Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6MiJde2dyaWQtcm93OnNwYW4gMi9zcGFuIDIhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjMiXXtncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDozIl17Z3JpZC1yb3c6c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6NCJde2dyaWQtY29sdW1uOnNw''@;'; put 'put ''YW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjQiXXtncmlkLXJvdzpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDo1Il17Z3JpZC1jb2x1bW46c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6NSJd''@;'; put 'put ''e2dyaWQtcm93OnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjYiXXtncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDo2Il17Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2xAeGw6NyJde2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjciXXtncmlkLXJvdzpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDo4Il17Z3JpZC1jb2x1bW46c3BhbiA4L3NwYW4gOCFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6OCJde2dyaWQtcm93OnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjkiXXtncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDo5Il17Z3JpZC1yb3c6c3BhbiA5L3Nw''@;'; put 'put ''YW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6MTAiXXtncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjEwIl17Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDoxMSJd''@;'; put 'put ''e2dyaWQtY29sdW1uOnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6MTEiXXtncmlkLXJvdzpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjEyIl17Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9InJvd0B4bDoxMiJde2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTEiXXtncmlkLWNvbHVtbi1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4''@;'; put 'put ''czplbmQtMSJde2dyaWQtY29sdW1uLWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC0xIl17Z3JpZC1yb3ctc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTEiXXtncmlkLXJvdy1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJj''@;'; put 'put ''b2xAeHM6c3RhcnQtMiJde2dyaWQtY29sdW1uLXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC0yIl17Z3JpZC1jb2x1bW4tZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTIiXXtncmlkLXJvdy1zdGFydDoyIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dCo9InJvd0B4czplbmQtMiJde2dyaWQtcm93LWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC0zIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTMiXXtncmlkLWNvbHVtbi1lbmQ6MyFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtMyJde2dyaWQtcm93LXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC0zIl17Z3JpZC1yb3ctZW5kOjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTQiXXtncmlkLWNvbHVtbi1zdGFydDo0''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtNCJde2dyaWQtY29sdW1uLWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC00Il17Z3JpZC1yb3ctc3RhcnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTQiXXtncmlkLXJvdy1l''@;'; put 'put ''bmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtNSJde2dyaWQtY29sdW1uLXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC01Il17Z3JpZC1jb2x1bW4tZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTUiXXtn''@;'; put 'put ''cmlkLXJvdy1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtNSJde2dyaWQtcm93LWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC02Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5k''@;'; put 'put ''LTYiXXtncmlkLWNvbHVtbi1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtNiJde2dyaWQtcm93LXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC02Il17Z3JpZC1yb3ctZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhz''@;'; put 'put ''OnN0YXJ0LTciXXtncmlkLWNvbHVtbi1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtNyJde2dyaWQtY29sdW1uLWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC03Il17Z3JpZC1yb3ctc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJyb3dAeHM6ZW5kLTciXXtncmlkLXJvdy1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtOCJde2dyaWQtY29sdW1uLXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC04Il17Z3JpZC1jb2x1bW4tZW5kOjghaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTgiXXtncmlkLXJvdy1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtOCJde2dyaWQtcm93LWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC05Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTkiXXtncmlkLWNvbHVtbi1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtOSJde2dyaWQtcm93LXN0YXJ0OjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC05Il17Z3JpZC1yb3ctZW5kOjkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTEwIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC0xMCJde2dyaWQtY29sdW1uLWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtMTAiXXtn''@;'; put 'put ''cmlkLXJvdy1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTEwIl17Z3JpZC1yb3ctZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC0xMSJde2dyaWQtY29sdW1uLXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4''@;'; put 'put ''czplbmQtMTEiXXtncmlkLWNvbHVtbi1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTExIl17Z3JpZC1yb3ctc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC0xMSJde2dyaWQtcm93LWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJjb2xAeHM6c3RhcnQtMTIiXXtncmlkLWNvbHVtbi1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTEyIl17Z3JpZC1jb2x1bW4tZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC0xMiJde2dyaWQtcm93LXN0YXJ0OjEyIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtMTIiXXtncmlkLXJvdy1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTEzIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC0xMyJde2dyaWQtY29s''@;'; put 'put ''dW1uLWVuZDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtMTMiXXtncmlkLXJvdy1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTEzIl17Z3JpZC1yb3ctZW5kOjEzIWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDo3NjhweCl7W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJjb2xAc206c3RhcnQtMSJde2dyaWQtY29sdW1uLXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC0xIl17Z3JpZC1jb2x1bW4tZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTEiXXtncmlkLXJvdy1zdGFydDoxIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtMSJde2dyaWQtcm93LWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC0yIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTIiXXtncmlkLWNvbHVtbi1l''@;'; put 'put ''bmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtMiJde2dyaWQtcm93LXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC0yIl17Z3JpZC1yb3ctZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTMiXXtncmlkLWNv''@;'; put 'put ''bHVtbi1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtMyJde2dyaWQtY29sdW1uLWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC0zIl17Z3JpZC1yb3ctc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTMi''@;'; put 'put ''XXtncmlkLXJvdy1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtNCJde2dyaWQtY29sdW1uLXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC00Il17Z3JpZC1jb2x1bW4tZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNt''@;'; put 'put ''OnN0YXJ0LTQiXXtncmlkLXJvdy1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtNCJde2dyaWQtcm93LWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC01Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2xAc206ZW5kLTUiXXtncmlkLWNvbHVtbi1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtNSJde2dyaWQtcm93LXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC01Il17Z3JpZC1yb3ctZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sQHNtOnN0YXJ0LTYiXXtncmlkLWNvbHVtbi1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtNiJde2dyaWQtY29sdW1uLWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC02Il17Z3JpZC1yb3ctc3RhcnQ6NiFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTYiXXtncmlkLXJvdy1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtNyJde2dyaWQtY29sdW1uLXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC03Il17Z3JpZC1jb2x1bW4tZW5kOjch''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTciXXtncmlkLXJvdy1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtNyJde2dyaWQtcm93LWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC04Il17Z3JpZC1jb2x1bW4t''@;'; put 'put ''c3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTgiXXtncmlkLWNvbHVtbi1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtOCJde2dyaWQtcm93LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC04Il17Z3Jp''@;'; put 'put ''ZC1yb3ctZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTkiXXtncmlkLWNvbHVtbi1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtOSJde2dyaWQtY29sdW1uLWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFy''@;'; put 'put ''dC05Il17Z3JpZC1yb3ctc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTkiXXtncmlkLXJvdy1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtMTAiXXtncmlkLWNvbHVtbi1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJj''@;'; put 'put ''b2xAc206ZW5kLTEwIl17Z3JpZC1jb2x1bW4tZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC0xMCJde2dyaWQtcm93LXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtMTAiXXtncmlkLXJvdy1lbmQ6MTAhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTExIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC0xMSJde2dyaWQtY29sdW1uLWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtMTEiXXtncmlkLXJvdy1zdGFydDox''@;'; put 'put ''MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTExIl17Z3JpZC1yb3ctZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC0xMiJde2dyaWQtY29sdW1uLXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtMTIiXXtncmlk''@;'; put 'put ''LWNvbHVtbi1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTEyIl17Z3JpZC1yb3ctc3RhcnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC0xMiJde2dyaWQtcm93LWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3Rh''@;'; put 'put ''cnQtMTMiXXtncmlkLWNvbHVtbi1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTEzIl17Z3JpZC1jb2x1bW4tZW5kOjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC0xMyJde2dyaWQtcm93LXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9InJvd0BzbTplbmQtMTMiXXtncmlkLXJvdy1lbmQ6MTMhaW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC0xIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTEiXXtn''@;'; put 'put ''cmlkLWNvbHVtbi1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtMSJde2dyaWQtcm93LXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC0xIl17Z3JpZC1yb3ctZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0''@;'; put 'put ''LTIiXXtncmlkLWNvbHVtbi1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtMiJde2dyaWQtY29sdW1uLWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC0yIl17Z3JpZC1yb3ctc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJy''@;'; put 'put ''b3dAbWQ6ZW5kLTIiXXtncmlkLXJvdy1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtMyJde2dyaWQtY29sdW1uLXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC0zIl17Z3JpZC1jb2x1bW4tZW5kOjMhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0icm93QG1kOnN0YXJ0LTMiXXtncmlkLXJvdy1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtMyJde2dyaWQtcm93LWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC00Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NCFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTQiXXtncmlkLWNvbHVtbi1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtNCJde2dyaWQtcm93LXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC00Il17Z3JpZC1yb3ctZW5kOjQhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTUiXXtncmlkLWNvbHVtbi1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtNSJde2dyaWQtY29sdW1uLWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC01Il17Z3JpZC1yb3ctc3Rh''@;'; put 'put ''cnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTUiXXtncmlkLXJvdy1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtNiJde2dyaWQtY29sdW1uLXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC02Il17Z3JpZC1j''@;'; put 'put ''b2x1bW4tZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTYiXXtncmlkLXJvdy1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtNiJde2dyaWQtcm93LWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC03Il17''@;'; put 'put ''Z3JpZC1jb2x1bW4tc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTciXXtncmlkLWNvbHVtbi1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtNyJde2dyaWQtcm93LXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1k''@;'; put 'put ''OmVuZC03Il17Z3JpZC1yb3ctZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTgiXXtncmlkLWNvbHVtbi1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtOCJde2dyaWQtY29sdW1uLWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd0BtZDpzdGFydC04Il17Z3JpZC1yb3ctc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTgiXXtncmlkLXJvdy1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtOSJde2dyaWQtY29sdW1uLXN0YXJ0OjkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iY29sQG1kOmVuZC05Il17Z3JpZC1jb2x1bW4tZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTkiXXtncmlkLXJvdy1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtOSJde2dyaWQtcm93LWVuZDo5IWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC0xMCJde2dyaWQtY29sdW1uLXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtMTAiXXtncmlkLWNvbHVtbi1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTEwIl17Z3JpZC1yb3ctc3Rh''@;'; put 'put ''cnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC0xMCJde2dyaWQtcm93LWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtMTEiXXtncmlkLWNvbHVtbi1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTExIl17''@;'; put 'put ''Z3JpZC1jb2x1bW4tZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC0xMSJde2dyaWQtcm93LXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtMTEiXXtncmlkLXJvdy1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1k''@;'; put 'put ''OnN0YXJ0LTEyIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC0xMiJde2dyaWQtY29sdW1uLWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtMTIiXXtncmlkLXJvdy1zdGFydDoxMiFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTEyIl17Z3JpZC1yb3ctZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC0xMyJde2dyaWQtY29sdW1uLXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtMTMiXXtncmlkLWNvbHVtbi1lbmQ6MTMh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTEzIl17Z3JpZC1yb3ctc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC0xMyJde2dyaWQtcm93LWVuZDoxMyFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dCo9''@;'; put 'put ''ImNvbEBsZzpzdGFydC0xIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTEiXXtncmlkLWNvbHVtbi1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtMSJde2dyaWQtcm93LXN0YXJ0OjEhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0icm93QGxnOmVuZC0xIl17Z3JpZC1yb3ctZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTIiXXtncmlkLWNvbHVtbi1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtMiJde2dyaWQtY29sdW1uLWVuZDoyIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC0yIl17Z3JpZC1yb3ctc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTIiXXtncmlkLXJvdy1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtMyJde2dyaWQtY29sdW1uLXN0YXJ0''@;'; put 'put ''OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC0zIl17Z3JpZC1jb2x1bW4tZW5kOjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTMiXXtncmlkLXJvdy1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtMyJde2dyaWQtcm93''@;'; put 'put ''LWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC00Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTQiXXtncmlkLWNvbHVtbi1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtNCJd''@;'; put 'put ''e2dyaWQtcm93LXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC00Il17Z3JpZC1yb3ctZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTUiXXtncmlkLWNvbHVtbi1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpl''@;'; put 'put ''bmQtNSJde2dyaWQtY29sdW1uLWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC01Il17Z3JpZC1yb3ctc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTUiXXtncmlkLXJvdy1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xA''@;'; put 'put ''bGc6c3RhcnQtNiJde2dyaWQtY29sdW1uLXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC02Il17Z3JpZC1jb2x1bW4tZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTYiXXtncmlkLXJvdy1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9InJvd0BsZzplbmQtNiJde2dyaWQtcm93LWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC03Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTciXXtncmlkLWNvbHVtbi1lbmQ6NyFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtNyJde2dyaWQtcm93LXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC03Il17Z3JpZC1yb3ctZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTgiXXtncmlkLWNvbHVtbi1zdGFydDo4IWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtOCJde2dyaWQtY29sdW1uLWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC04Il17Z3JpZC1yb3ctc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTgiXXtncmlkLXJvdy1lbmQ6''@;'; put 'put ''OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtOSJde2dyaWQtY29sdW1uLXN0YXJ0OjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC05Il17Z3JpZC1jb2x1bW4tZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTkiXXtncmlk''@;'; put 'put ''LXJvdy1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtOSJde2dyaWQtcm93LWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC0xMCJde2dyaWQtY29sdW1uLXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQt''@;'; put 'put ''MTAiXXtncmlkLWNvbHVtbi1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTEwIl17Z3JpZC1yb3ctc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC0xMCJde2dyaWQtcm93LWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJj''@;'; put 'put ''b2xAbGc6c3RhcnQtMTEiXXtncmlkLWNvbHVtbi1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTExIl17Z3JpZC1jb2x1bW4tZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC0xMSJde2dyaWQtcm93LXN0YXJ0OjExIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtMTEiXXtncmlkLXJvdy1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTEyIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC0xMiJde2dyaWQtY29sdW1uLWVu''@;'; put 'put ''ZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtMTIiXXtncmlkLXJvdy1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTEyIl17Z3JpZC1yb3ctZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC0xMyJde2dy''@;'; put 'put ''aWQtY29sdW1uLXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtMTMiXXtncmlkLWNvbHVtbi1lbmQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTEzIl17Z3JpZC1yb3ctc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''QGxnOmVuZC0xMyJde2dyaWQtcm93LWVuZDoxMyFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC0xIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTEiXXtncmlkLWNvbHVt''@;'; put 'put ''bi1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtMSJde2dyaWQtcm93LXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC0xIl17Z3JpZC1yb3ctZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTIiXXtncmlk''@;'; put 'put ''LWNvbHVtbi1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtMiJde2dyaWQtY29sdW1uLWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC0yIl17Z3JpZC1yb3ctc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5k''@;'; put 'put ''LTIiXXtncmlkLXJvdy1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtMyJde2dyaWQtY29sdW1uLXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC0zIl17Z3JpZC1jb2x1bW4tZW5kOjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''QHhsOnN0YXJ0LTMiXXtncmlkLXJvdy1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtMyJde2dyaWQtcm93LWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC00Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJjb2xAeGw6ZW5kLTQiXXtncmlkLWNvbHVtbi1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtNCJde2dyaWQtcm93LXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC00Il17Z3JpZC1yb3ctZW5kOjQhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTUiXXtncmlkLWNvbHVtbi1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtNSJde2dyaWQtY29sdW1uLWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC01Il17Z3JpZC1yb3ctc3RhcnQ6NSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTUiXXtncmlkLXJvdy1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtNiJde2dyaWQtY29sdW1uLXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC02Il17Z3JpZC1jb2x1bW4tZW5k''@;'; put 'put ''OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTYiXXtncmlkLXJvdy1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtNiJde2dyaWQtcm93LWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC03Il17Z3JpZC1jb2x1''@;'; put 'put ''bW4tc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTciXXtncmlkLWNvbHVtbi1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtNyJde2dyaWQtcm93LXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC03Il17''@;'; put 'put ''Z3JpZC1yb3ctZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTgiXXtncmlkLWNvbHVtbi1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtOCJde2dyaWQtY29sdW1uLWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpz''@;'; put 'put ''dGFydC04Il17Z3JpZC1yb3ctc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTgiXXtncmlkLXJvdy1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtOSJde2dyaWQtY29sdW1uLXN0YXJ0OjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''Y29sQHhsOmVuZC05Il17Z3JpZC1jb2x1bW4tZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTkiXXtncmlkLXJvdy1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtOSJde2dyaWQtcm93LWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dCo9ImNvbEB4bDpzdGFydC0xMCJde2dyaWQtY29sdW1uLXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtMTAiXXtncmlkLWNvbHVtbi1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTEwIl17Z3JpZC1yb3ctc3RhcnQ6MTAhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC0xMCJde2dyaWQtcm93LWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtMTEiXXtncmlkLWNvbHVtbi1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTExIl17Z3JpZC1jb2x1''@;'; put 'put ''bW4tZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC0xMSJde2dyaWQtcm93LXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtMTEiXXtncmlkLXJvdy1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTEy''@;'; put 'put ''Il17Z3JpZC1jb2x1bW4tc3RhcnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC0xMiJde2dyaWQtY29sdW1uLWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtMTIiXXtncmlkLXJvdy1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dAeGw6ZW5kLTEyIl17Z3JpZC1yb3ctZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC0xMyJde2dyaWQtY29sdW1uLXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtMTMiXXtncmlkLWNvbHVtbi1lbmQ6MTMhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTEzIl17Z3JpZC1yb3ctc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC0xMyJde2dyaWQtcm93LWVuZDoxMyFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0fj1ncmlkXVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iYWxpZ25AeHM6dG9wIl17YWxpZ24tY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmJvdHRvbSJde2Fs''@;'; put 'put ''aWduLWNvbnRlbnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6bGVmdCJde2p1c3RpZnktY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNo''@;'; put 'put ''O2FsaWduLWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFs''@;'; put 'put ''aWduQHhzOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1jZW50ZXIiXXth''@;'; put 'put ''bGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn19QG1lZGlhKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJhbGlnbkBzbTp0b3AiXXthbGlnbi1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl17YWxpZ24t''@;'; put 'put ''Y29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxp''@;'; put 'put ''Z24tY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25A''@;'; put 'put ''c206c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJde2FsaWdu''@;'; put 'put ''LWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduQHNtOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfX1AbWVkaWEobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduQG1kOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpib3R0b20iXXthbGlnbi1jb250''@;'; put 'put ''ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1j''@;'; put 'put ''b250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpz''@;'; put 'put ''dHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRl''@;'; put 'put ''bXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25AbWQ6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9fUBtZWRpYShtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFs''@;'; put 'put ''aWduQGxnOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpib3R0b20iXXthbGlnbi1jb250ZW50''@;'; put 'put ''OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250''@;'; put 'put ''ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpzdHJl''@;'; put 'put ''dGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6''@;'; put 'put ''Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ25AbGc6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9fUBtZWRpYShtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''QHhsOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpib3R0b20iXXthbGlnbi1jb250ZW50OmVu''@;'; put 'put ''ZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50''@;'; put 'put ''OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpzdHJldGNo''@;'; put 'put ''Il17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2Vu''@;'; put 'put ''dGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxp''@;'; put 'put ''Z25AeGw6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9fVtjZHMtbGF5b3V0fj0iZGlzcGxheTpub25lIl17ZGlzcGxheTpub25lIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''ImRpc3BsYXk6ZmxleCJde2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5OmNvbnRlbnRzIl17ZGlzcGxheTpjb250ZW50cyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5OmJsb2NrIl17ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJkaXNwbGF5OmlubGluZSJde2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH1AbWVkaWEobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49ImRpc3BsYXlAc206bm9uZSJde2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QHNtOmZsZXgiXXtkaXNwbGF5OmZs''@;'; put 'put ''ZXghaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBzbTpibG9jayJde2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBzbTppbmxpbmUiXXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0''@;'; put 'put ''fj0iZGlzcGxheUBtZDpub25lIl17ZGlzcGxheTpub25lIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAbWQ6ZmxleCJde2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QG1kOmJsb2NrIl17ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJkaXNwbGF5QG1kOmlubGluZSJde2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0fj0iZGlzcGxheUBsZzpub25lIl17ZGlzcGxheTpub25lIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAbGc6ZmxleCJde2Rp''@;'; put 'put ''c3BsYXk6ZmxleCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QGxnOmJsb2NrIl17ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QGxnOmlubGluZSJde2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDoxNDQwcHgpe1tj''@;'; put 'put ''ZHMtbGF5b3V0fj0iZGlzcGxheUB4bDpub25lIl17ZGlzcGxheTpub25lIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAeGw6ZmxleCJde2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QHhsOmJsb2NrIl17ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QHhsOmlubGluZSJde2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH19OjpzbG90dGVkKFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXSksW2Nkcy1sYXlvdXR+PSJkaXNwbGF5OnNjcmVlbi1yZWFkZXItb25seSJde3Bvc2l0aW9u''@;'; put 'put ''OmFic29sdXRlIWltcG9ydGFudDtjbGlwOnJlY3QoMXB4LDFweCwxcHgsMXB4KTtjbGlwLXBhdGg6aW5zZXQoNTAlKTtwYWRkaW5nOjA7Ym9yZGVyOjA7aGVpZ2h0OjFweDt3aWR0aDoxcHg7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0b3A6MDtsZWZ0OjA7ZGlzcGxheTpi''@;'; put 'put ''bG9jayFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJnYXA6bm9uZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwOnh4eHMiXXtnYXA6dmFyKC0tXDNiNCAxKX1bY2RzLWxheW91dCo9ImdhcDp4eHMiXXtnYXA6dmFyKC0tXDNiNCAyKX1bY2RzLWxheW91dCo9ImdhcDp4cyJde2dhcDp2YXIoLS1c''@;'; put 'put ''M2I0IDMpfVtjZHMtbGF5b3V0Kj0iZ2FwOnNtIl17Z2FwOnZhcigtLVwzYjQgNCl9W2Nkcy1sYXlvdXQqPSJnYXA6bWQiXXtnYXA6dmFyKC0tXDNiNCA1KX1bY2RzLWxheW91dCo9ImdhcDpsZyJde2dhcDp2YXIoLS1cM2I0IDYpfVtjZHMtbGF5b3V0Kj0iZ2FwOnhsIl17Z2FwOnZhcigtLVwz''@;'; put 'put ''YjQgNyl9W2Nkcy1sYXlvdXQqPSJnYXA6eHhsIl17Z2FwOnZhcigtLVwzYjQgOCl9W2Nkcy1sYXlvdXQqPSJnYXA6eHh4bCJde2dhcDp2YXIoLS1cM2I0IDkpfVtjZHMtbGF5b3V0fj0icDpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06bm9uZSJde21hcmdpbjow''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtOnh4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAyKSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtOnh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTp4cyJde21hcmdpbjp2YXIoLS1cM2I0IDMpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InA6c20iXXtwYWRkaW5nOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTpzbSJde21hcmdpbjp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bWQiXXtwYWRkaW5nOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibTptZCJde21hcmdpbjp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bGciXXtwYWRkaW5nOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTpsZyJde21hcmdpbjp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InA6eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTp4bCJde21hcmdpbjp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06eHhs''@;'; put 'put ''Il17bWFyZ2luOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDp4eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06eHh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDpub25l''@;'; put 'put ''Il17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14Onh4eHMiXXtwYWRkaW5nLWxl''@;'; put 'put ''ZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwLXg6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGlu''@;'; put 'put ''Zy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTp4cyJde3BhZGRpbmctdG9w''@;'; put 'put ''OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14OnNtIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLXk6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLXJp''@;'; put 'put ''Z2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15Om1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6bGciXXtwYWRkaW5nLWxlZnQ6dmFy''@;'; put 'put ''KC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC14OnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2''@;'; put 'put ''YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1c''@;'; put 'put ''M2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJwLXk6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14Om5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJtLXk6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0ibS15Onh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7''@;'; put 'put ''bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15Onh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDp4cyJde21hcmdpbi1s''@;'; put 'put ''ZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49Im0teDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2''@;'; put 'put ''YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1''@;'; put 'put ''KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTps''@;'; put 'put ''ZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im0teTp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtt''@;'; put 'put ''YXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14Onh4eGwiXXttYXJnaW4t''@;'; put 'put ''bGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAtdDpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6bm9uZSJde3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWI6bm9uZSJde3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC1sOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOnh4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0icC1iOnh4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10Onh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwz''@;'; put 'put ''YjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOnh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWI6eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWw6eHhzIl17''@;'; put 'put ''cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10OnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC1iOnhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWw6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49InAtcjpzbSJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWI6c20iXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDpzbSJde3BhZGRpbmctbGVm''@;'; put 'put ''dDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOm1kIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYjpt''@;'; put 'put ''ZCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10OmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLXI6bGciXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOmxnIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWw6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNi''@;'; put 'put ''NCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtcjp4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWI6eGwiXXtwYWRkaW5n''@;'; put 'put ''LWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDp4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InAtcjp4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49InAtdDp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6eHh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWI6eHh4bCJde3BhZGRpbmct''@;'; put 'put ''Ym90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6bm9uZSJd''@;'; put 'put ''e21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjpub25lIl17bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6eHh4cyJde21hcmdpbi10b3A6dmFy''@;'; put 'put ''KC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6eHh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjp4eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDp4''@;'; put 'put ''eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tcjp4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtLWI6eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdDp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAz''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sOnhzIl17bWFyZ2luLWxl''@;'; put 'put ''ZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOnNtIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iOnNt''@;'; put 'put ''Il17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10Om1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im0tcjptZCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjptZCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im0tdDpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6bGciXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6bGciXXttYXJnaW4tYm90dG9tOnZh''@;'; put 'put ''cigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOnhsIl17bWFy''@;'; put 'put ''Z2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iOnhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS10Onh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iOnh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6eHh4bCJde21hcmdpbi1yaWdodDp2''@;'; put 'put ''YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjp4eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9QG1lZGlhKG1pbi13aWR0aDo1''@;'; put 'put ''NzZweCl7W2Nkcy1sYXlvdXQqPSJnYXBAeHM6bm9uZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwQHhzOnh4eHMiXXtnYXA6dmFyKC0tXDNiNCAxKX1bY2RzLWxheW91dCo9ImdhcEB4czp4eHMiXXtnYXA6dmFyKC0tXDNiNCAyKX1bY2RzLWxheW91dCo9ImdhcEB4czp4cyJde2dhcDp2YXIo''@;'; put 'put ''LS1cM2I0IDMpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhzOnNtIl17Z2FwOnZhcigtLVwzYjQgNCl9W2Nkcy1sYXlvdXQqPSJnYXBAeHM6bWQiXXtnYXA6dmFyKC0tXDNiNCA1KX1bY2RzLWxheW91dCo9ImdhcEB4czpsZyJde2dhcDp2YXIoLS1cM2I0IDYpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhzOnhs''@;'; put 'put ''Il17Z2FwOnZhcigtLVwzYjQgNyl9W2Nkcy1sYXlvdXQqPSJnYXBAeHM6eHhsIl17Z2FwOnZhcigtLVwzYjQgOCl9W2Nkcy1sYXlvdXQqPSJnYXBAeHM6eHh4bCJde2dhcDp2YXIoLS1cM2I0IDkpfVtjZHMtbGF5b3V0fj0icEB4czpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im1AeHM6bm9uZSJde21hcmdpbjowIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeHM6eHh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOnh4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJwQHhzOnh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOnh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeHM6eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0ibUB4czp4cyJde21hcmdpbjp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeHM6c20iXXtwYWRkaW5nOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4czpzbSJde21hcmdpbjp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49InBAeHM6bWQiXXtwYWRkaW5nOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4czptZCJde21hcmdpbjp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeHM6bGciXXtwYWRkaW5nOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibUB4czpsZyJde21hcmdpbjp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeHM6eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4czp4bCJde21hcmdpbjp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InBAeHM6eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czp4eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDkpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im1AeHM6eHh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4czpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6bm9uZSJd''@;'; put 'put ''e3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49InAteUB4czp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmct''@;'; put 'put ''cmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6eHMiXXtwYWRkaW5n''@;'; put 'put ''LWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4czp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOnNtIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFu''@;'; put 'put ''dDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4czptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOm1k''@;'; put 'put ''Il17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0''@;'; put 'put ''IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4czpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQg''@;'; put 'put ''NykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InAteEB4czp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4czp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRv''@;'; put 'put ''bTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4czp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6eHh4bCJde3BhZGRpbmct''@;'; put 'put ''dG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhzOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6''@;'; put 'put ''bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4czp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0ibS15QHhzOnh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLXJp''@;'; put 'put ''Z2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhzOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4czp4cyJde21hcmdpbi1sZWZ0''@;'; put 'put ''OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4czp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49Im0teEB4czpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4czpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLWJv''@;'; put 'put ''dHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4czptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4czptZCJde21hcmdpbi10b3A6''@;'; put 'put ''dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4czpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49Im0teUB4czpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4czp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1y''@;'; put 'put ''aWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4czp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4czp4eGwiXXttYXJnaW4tbGVm''@;'; put 'put ''dDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0ibS14QHhzOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFy''@;'; put 'put ''Z2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4czpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6bm9uZSJde3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeHM6bm9u''@;'; put 'put ''ZSJde3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhzOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1y''@;'; put 'put ''QHhzOnh4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhzOnh4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwz''@;'; put 'put ''YjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOnh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOnh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeHM6''@;'; put 'put ''eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhzOnhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6eHMiXXtwYWRk''@;'; put 'put ''aW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czpzbSJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJwLWJAeHM6c20iXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4czptZCJde3BhZGRpbmctdG9wOnZhcigt''@;'; put 'put ''LVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOm1kIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czptZCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1s''@;'; put 'put ''QHhzOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6bGciXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhzOmxnIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6eGwiXXtwYWRk''@;'; put 'put ''aW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czp4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeHM6eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAtbEB4czp4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4czp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czp4eGwiXXtwYWRkaW5nLXJpZ2h0OnZh''@;'; put 'put ''cigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhzOnh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhzOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InAtdEB4czp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6eHh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeHM6eHh4bCJde3BhZGRpbmctYm90dG9tOnZhcigt''@;'; put 'put ''LVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhzOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeHM6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeHM6bm9uZSJde21h''@;'; put 'put ''cmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czpub25lIl17bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4czpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeHM6eHh4cyJde21hcmdpbi10''@;'; put 'put ''b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeHM6eHh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czp4eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im0tbEB4czp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeHM6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czp4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4czp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4''@;'; put 'put ''czp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeHM6eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhzOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeHM6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOnNtIl17bWFyZ2luLXJpZ2h0''@;'; put 'put ''OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOnNtIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4czpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''bS10QHhzOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czptZCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czptZCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeHM6bGciXXttYXJnaW4t''@;'; put 'put ''cmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6bGciXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhzOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJtLXRAeHM6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOnhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOnhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0''@;'; put 'put ''IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4czp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeHM6eHhsIl17''@;'; put 'put ''bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOnh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJtLXRAeHM6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeHM6eHh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czp4eHhsIl17bWFyZ2luLWJv''@;'; put 'put ''dHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4czp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0Kj0iZ2FwQHNtOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9''@;'; put 'put ''ImdhcEBzbTp4eHhzIl17Z2FwOnZhcigtLVwzYjQgMSl9W2Nkcy1sYXlvdXQqPSJnYXBAc206eHhzIl17Z2FwOnZhcigtLVwzYjQgMil9W2Nkcy1sYXlvdXQqPSJnYXBAc206eHMiXXtnYXA6dmFyKC0tXDNiNCAzKX1bY2RzLWxheW91dCo9ImdhcEBzbTpzbSJde2dhcDp2YXIoLS1cM2I0IDQp''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0iZ2FwQHNtOm1kIl17Z2FwOnZhcigtLVwzYjQgNSl9W2Nkcy1sYXlvdXQqPSJnYXBAc206bGciXXtnYXA6dmFyKC0tXDNiNCA2KX1bY2RzLWxheW91dCo9ImdhcEBzbTp4bCJde2dhcDp2YXIoLS1cM2I0IDcpfVtjZHMtbGF5b3V0Kj0iZ2FwQHNtOnh4bCJde2dhcDp2''@;'; put 'put ''YXIoLS1cM2I0IDgpfVtjZHMtbGF5b3V0Kj0iZ2FwQHNtOnh4eGwiXXtnYXA6dmFyKC0tXDNiNCA5KX1bY2RzLWxheW91dH49InBAc206bm9uZSJde3BhZGRpbmc6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHNtOm5vbmUiXXttYXJnaW46MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJw''@;'; put 'put ''QHNtOnh4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTp4eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBzbTp4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0ibUBzbTp4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOnhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206eHMiXXttYXJnaW46dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJwQHNtOnNtIl17cGFkZGluZzp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206c20iXXttYXJnaW46dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOm1kIl17cGFkZGluZzp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49Im1Ac206bWQiXXttYXJnaW46dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOmxnIl17cGFkZGluZzp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206bGciXXttYXJnaW46dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwQHNtOnhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206eGwiXXttYXJnaW46dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOnh4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJtQHNtOnh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206eHh4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHNtOnh4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA5KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNtOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAteEBzbTp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50''@;'; put 'put ''O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNtOnh4''@;'; put 'put ''cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNi''@;'; put 'put ''NCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0''@;'; put 'put ''IDQpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNtOnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJwLXhAc206bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBzbTptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9t''@;'; put 'put ''OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206bGciXXtwYWRkaW5nLXRvcDp2''@;'; put 'put ''YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTp4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0icC15QHNtOnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3Bh''@;'; put 'put ''ZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206eHh4bCJd''@;'; put 'put ''e3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNtOnh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0''@;'; put 'put ''IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHNtOm5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206MCFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBzbTp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFu''@;'; put 'put ''dDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHNtOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBzbTp4eHMi''@;'; put 'put ''XXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9y''@;'; put 'put ''dGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206bWQi''@;'; put 'put ''XXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0''@;'; put 'put ''YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206eGwi''@;'; put 'put ''XXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHNtOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFp''@;'; put 'put ''bXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHNtOnh4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRA''@;'; put 'put ''c206bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOm5vbmUiXXtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOm5vbmUiXXtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTpu''@;'; put 'put ''b25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHNtOnh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBzbTp4eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAtYkBzbTp4eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206eHh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTp4eHMiXXtwYWRkaW5nLXRv''@;'; put 'put ''cDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBzbTp4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOnh4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC1sQHNtOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOnhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1c''@;'; put 'put ''M2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBzbTp4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHNtOnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHNt''@;'; put 'put ''OnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206c20iXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOnNtIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBzbTptZCJde3BhZGRpbmct''@;'; put 'put ''cmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206bWQiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49InAtdEBzbTpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOmxnIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBzbTpsZyJde3BhZGRpbmctYm90dG9tOnZhcigt''@;'; put 'put ''LVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHNtOmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHNtOnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206''@;'; put 'put ''eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOnhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206eHhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBzbTp4eGwiXXtwYWRk''@;'; put 'put ''aW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0icC1yQHNtOnh4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOnh4eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTp4eHhsIl17cGFkZGlu''@;'; put 'put ''Zy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOm5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOm5vbmUiXXttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAc206bm9uZSJde21h''@;'; put 'put ''cmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206bm9uZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOnh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOnh4eHMi''@;'; put 'put ''XXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAc206eHh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206eHhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHNtOnh4cyJde21hcmdpbi1i''@;'; put 'put ''b3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS1yQHNtOnhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHNtOnhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQg''@;'; put 'put ''MykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBzbTpzbSJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTpzbSJde21h''@;'; put 'put ''cmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBzbTptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJtLXJAc206bWQiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAc206bWQiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHNtOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0t''@;'; put 'put ''XDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOmxnIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHNtOmxn''@;'; put 'put ''Il17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0tckBzbTp4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTp4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206eGwiXXttYXJnaW4tbGVmdDp2''@;'; put 'put ''YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBzbTp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOnh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0t''@;'; put 'put ''YkBzbTp4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHNtOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOnh4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOSkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOnh4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAc206eHh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206eHh4''@;'; put 'put ''bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dCo9ImdhcEBtZDpub25lIl17Z2FwOjB9W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6eHh4cyJde2dhcDp2YXIoLS1cM2I0IDEpfVtjZHMtbGF5b3V0Kj0iZ2FwQG1k''@;'; put 'put ''Onh4cyJde2dhcDp2YXIoLS1cM2I0IDIpfVtjZHMtbGF5b3V0Kj0iZ2FwQG1kOnhzIl17Z2FwOnZhcigtLVwzYjQgMyl9W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6c20iXXtnYXA6dmFyKC0tXDNiNCA0KX1bY2RzLWxheW91dCo9ImdhcEBtZDptZCJde2dhcDp2YXIoLS1cM2I0IDUpfVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iZ2FwQG1kOmxnIl17Z2FwOnZhcigtLVwzYjQgNil9W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6eGwiXXtnYXA6dmFyKC0tXDNiNCA3KX1bY2RzLWxheW91dCo9ImdhcEBtZDp4eGwiXXtnYXA6dmFyKC0tXDNiNCA4KX1bY2RzLWxheW91dCo9ImdhcEBtZDp4eHhsIl17Z2FwOnZhcigtLVwz''@;'; put 'put ''YjQgOSl9W2Nkcy1sYXlvdXR+PSJwQG1kOm5vbmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDpub25lIl17bWFyZ2luOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDp4eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im1AbWQ6eHh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbWQ6eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0icEBtZDp4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnhzIl17bWFyZ2luOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDpzbSJde3BhZGRpbmc6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtQG1kOnNtIl17bWFyZ2luOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDptZCJde3BhZGRpbmc6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOm1kIl17bWFyZ2luOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0icEBtZDpsZyJde3BhZGRpbmc6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOmxnIl17bWFyZ2luOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDp4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJtQG1kOnhsIl17bWFyZ2luOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDp4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDp4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA4KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwQG1kOnh4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDp4eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBv''@;'; put 'put ''cnRhbnQ7cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6eHh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDEp''@;'; put 'put ''IWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QG1kOnh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InAteEBtZDp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRv''@;'; put 'put ''bTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBtZDp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QG1kOnhzIl17cGFkZGluZy10b3A6''@;'; put 'put ''dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAteUBtZDpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3Bh''@;'; put 'put ''ZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbWQ6bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBtZDpsZyJde3Bh''@;'; put 'put ''ZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QG1kOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNykhaW1w''@;'; put 'put ''b3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15''@;'; put 'put ''QG1kOnh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2''@;'; put 'put ''YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbWQ6bm9uZSJde21hcmdpbi1sZWZ0''@;'; put 'put ''OjAhaW1wb3J0YW50O21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0''@;'; put 'put ''IDEpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbWQ6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''Im0teEBtZDp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbWQ6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZh''@;'; put 'put ''cigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1kOnhzIl17bWFyZ2luLXRvcDp2YXIoLS1c''@;'; put 'put ''M2I0IDMpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS15QG1kOnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZh''@;'; put 'put ''cigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1kOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0t''@;'; put 'put ''XDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1kOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS14QG1kOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1kOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZh''@;'; put 'put ''cigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDp4eGwiXXttYXJnaW4tdG9wOnZhcigt''@;'; put 'put ''LVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbWQ6eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im0teUBtZDp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBt''@;'; put 'put ''ZDpub25lIl17cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDpub25lIl17cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBtZDp4''@;'; put 'put ''eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6eHh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6eHh4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbWQ6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6eHhzIl17''@;'; put 'put ''cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDp4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBtZDp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwLXRAbWQ6eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBtZDp4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6eHMiXXtwYWRkaW5nLWJv''@;'; put 'put ''dHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBtZDp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBtZDpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC1yQG1kOnNtIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDpzbSJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOnNtIl17cGFkZGluZy1sZWZ0OnZhcigtLVwz''@;'; put 'put ''YjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6bWQiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQG1kOm1k''@;'; put 'put ''Il17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbWQ6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InAtckBtZDpsZyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6bGciXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBtZDpsZyJde3BhZGRpbmct''@;'; put 'put ''bGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBtZDp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQG1kOnhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49InAtYkBtZDp4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOnh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwz''@;'; put 'put ''YjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQG1kOnh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxA''@;'; put 'put ''bWQ6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOnh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBtZDp4eHhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDkp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDp4eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDpu''@;'; put 'put ''b25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDpub25lIl17bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOm5vbmUiXXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOm5vbmUiXXtt''@;'; put 'put ''YXJnaW4tbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDp4eHhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''bS1iQG1kOnh4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQg''@;'; put 'put ''MikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQG1kOnh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDp4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnh4''@;'; put 'put ''cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QG1kOnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDp4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0tYkBtZDp4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbWQ6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDpzbSJde21hcmdpbi10b3A6dmFy''@;'; put 'put ''KC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6c20iXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbWQ6c20iXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1s''@;'; put 'put ''QG1kOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQG1kOm1kIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOm1kIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QG1kOmxnIl17bWFyZ2luLXRv''@;'; put 'put ''cDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDpsZyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDpsZyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJtLWxAbWQ6bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbWQ6eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6eHhsIl17bWFy''@;'; put 'put ''Z2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDp4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbWQ6eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49Im0tbEBtZDp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDp4eHhsIl17bWFyZ2luLXJpZ2h0OnZh''@;'; put 'put ''cigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOnh4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH19QG1lZGlhKG1pbi13''@;'; put 'put ''aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0Kj0iZ2FwQGxnOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9ImdhcEBsZzp4eHhzIl17Z2FwOnZhcigtLVwzYjQgMSl9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6eHhzIl17Z2FwOnZhcigtLVwzYjQgMil9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6eHMiXXtn''@;'; put 'put ''YXA6dmFyKC0tXDNiNCAzKX1bY2RzLWxheW91dCo9ImdhcEBsZzpzbSJde2dhcDp2YXIoLS1cM2I0IDQpfVtjZHMtbGF5b3V0Kj0iZ2FwQGxnOm1kIl17Z2FwOnZhcigtLVwzYjQgNSl9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6bGciXXtnYXA6dmFyKC0tXDNiNCA2KX1bY2RzLWxheW91dCo9Imdh''@;'; put 'put ''cEBsZzp4bCJde2dhcDp2YXIoLS1cM2I0IDcpfVtjZHMtbGF5b3V0Kj0iZ2FwQGxnOnh4bCJde2dhcDp2YXIoLS1cM2I0IDgpfVtjZHMtbGF5b3V0Kj0iZ2FwQGxnOnh4eGwiXXtnYXA6dmFyKC0tXDNiNCA5KX1bY2RzLWxheW91dH49InBAbGc6bm9uZSJde3BhZGRpbmc6MCFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJtQGxnOm5vbmUiXXttYXJnaW46MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQGxnOnh4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzp4eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0icEBsZzp4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzp4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQGxnOnhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im1AbGc6eHMiXXttYXJnaW46dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQGxnOnNtIl17cGFkZGluZzp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbGc6c20iXXttYXJnaW46dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwQGxnOm1kIl17cGFkZGluZzp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbGc6bWQiXXttYXJnaW46dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQGxnOmxnIl17cGFkZGluZzp2YXIoLS1cM2I0IDYpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im1AbGc6bGciXXttYXJnaW46dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQGxnOnhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbGc6eGwiXXttYXJnaW46dmFyKC0tXDNiNCA3KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwQGxnOnh4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOnh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6eHh4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA5KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOnh4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbGc6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxn''@;'; put 'put ''Om5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLXlAbGc6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDtw''@;'; put 'put ''YWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOnh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOnhzIl17''@;'; put 'put ''cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbGc6eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA0KSFp''@;'; put 'put ''bXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbGc6bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAt''@;'; put 'put ''eUBsZzptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFy''@;'; put 'put ''KC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbGc6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzp4bCJde3BhZGRpbmctbGVmdDp2YXIo''@;'; put 'put ''LS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJwLXhAbGc6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbGc6eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGlu''@;'; put 'put ''Zy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbGc6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOnh4eGwiXXtw''@;'; put 'put ''YWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''bS15QGxnOm5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbGc6eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0teUBsZzp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21h''@;'; put 'put ''cmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbGc6eHMiXXttYXJn''@;'; put 'put ''aW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJtLXhAbGc6c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21h''@;'; put 'put ''cmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbGc6bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6bWQiXXttYXJn''@;'; put 'put ''aW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbGc6bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbGc6eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtt''@;'; put 'put ''YXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbGc6eHhsIl17bWFy''@;'; put 'put ''Z2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49Im0teEBsZzp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOnh4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0''@;'; put 'put ''YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQGxnOm5vbmUiXXtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1i''@;'; put 'put ''QGxnOm5vbmUiXXtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBsZzpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOnh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49InAtckBsZzp4eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBsZzp4eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6eHh4cyJde3BhZGRpbmctbGVmdDp2''@;'; put 'put ''YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzp4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC1iQGxnOnh4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQg''@;'; put 'put ''MykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQGxnOnhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBsZzp4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOnhz''@;'; put 'put ''Il17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6c20iXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC1iQGxnOnNtIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6bWQiXXtwYWRkaW5nLXRv''@;'; put 'put ''cDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzptZCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6bWQiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49InAtbEBsZzptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQGxnOmxnIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0''@;'; put 'put ''IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBsZzpsZyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOnhs''@;'; put 'put ''Il17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQGxnOnhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6eHhsIl17cGFkZGluZy1y''@;'; put 'put ''aWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBsZzp4eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBsZzp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJwLXRAbGc6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQGxnOnh4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQGxnOnh4eGwiXXtwYWRkaW5nLWJvdHRv''@;'; put 'put ''bTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBsZzp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QGxnOm5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQGxnOm5v''@;'; put 'put ''bmUiXXttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6bm9uZSJde21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbGc6bm9uZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QGxnOnh4eHMiXXtt''@;'; put 'put ''YXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQGxnOnh4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6eHh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJtLWxAbGc6eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QGxnOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6eHhzIl17bWFyZ2luLXJpZ2h0''@;'; put 'put ''OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOnh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbGc6eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJtLXRAbGc6eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQGxnOnhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOnhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDMp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBsZzp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QGxnOnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzpzbSJde21hcmdp''@;'; put 'put ''bi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzpzbSJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbGc6c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im0tdEBsZzptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6bWQiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6bWQiXXttYXJnaW4tYm90dG9tOnZhcigtLVwz''@;'; put 'put ''YjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQGxnOmxnIl17''@;'; put 'put ''bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOmxnIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBsZzpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0ibS10QGxnOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzp4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzp4bCJde21hcmdpbi1ib3R0b206dmFy''@;'; put 'put ''KC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbGc6eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQGxn''@;'; put 'put ''Onh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzp4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QGxnOnh4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQGxnOnh4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6eHh4bCJde21h''@;'; put 'put ''cmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbGc6eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXQqPSJnYXBAeGw6bm9uZSJde2dhcDowfVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iZ2FwQHhsOnh4eHMiXXtnYXA6dmFyKC0tXDNiNCAxKX1bY2RzLWxheW91dCo9ImdhcEB4bDp4eHMiXXtnYXA6dmFyKC0tXDNiNCAyKX1bY2RzLWxheW91dCo9ImdhcEB4bDp4cyJde2dhcDp2YXIoLS1cM2I0IDMpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOnNtIl17Z2FwOnZhcigt''@;'; put 'put ''LVwzYjQgNCl9W2Nkcy1sYXlvdXQqPSJnYXBAeGw6bWQiXXtnYXA6dmFyKC0tXDNiNCA1KX1bY2RzLWxheW91dCo9ImdhcEB4bDpsZyJde2dhcDp2YXIoLS1cM2I0IDYpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOnhsIl17Z2FwOnZhcigtLVwzYjQgNyl9W2Nkcy1sYXlvdXQqPSJnYXBAeGw6eHhs''@;'; put 'put ''Il17Z2FwOnZhcigtLVwzYjQgOCl9W2Nkcy1sYXlvdXQqPSJnYXBAeGw6eHh4bCJde2dhcDp2YXIoLS1cM2I0IDkpfVtjZHMtbGF5b3V0fj0icEB4bDpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeGw6bm9uZSJde21hcmdpbjowIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49InBAeGw6eHh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOnh4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhsOnh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJtQHhsOnh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDp4cyJde21hcmdpbjp2YXIoLS1cM2I0IDMpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InBAeGw6c20iXXtwYWRkaW5nOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDpzbSJde21hcmdpbjp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6bWQiXXtwYWRkaW5nOnZhcigtLVwzYjQgNSkhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0ibUB4bDptZCJde21hcmdpbjp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6bGciXXtwYWRkaW5nOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDpsZyJde21hcmdpbjp2YXIoLS1cM2I0IDYpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InBAeGw6eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDp4bCJde21hcmdpbjp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDgpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im1AeGw6eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDp4eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeGw6eHh4bCJde21hcmdpbjp2YXIoLS1cM2I0''@;'; put 'put ''IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjAhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFp''@;'; put 'put ''bXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeGw6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJw''@;'; put 'put ''LXlAeGw6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeGw6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2''@;'; put 'put ''YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOnNtIl17cGFkZGluZy1sZWZ0OnZh''@;'; put 'put ''cigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAteEB4bDptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhsOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGlu''@;'; put 'put ''Zy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeGw6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDpsZyJde3BhZGRp''@;'; put 'put ''bmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBv''@;'; put 'put ''cnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4''@;'; put 'put ''bDp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZh''@;'; put 'put ''cigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTow''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOnh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkh''@;'; put 'put ''aW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeGw6eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15''@;'; put 'put ''QHhsOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1c''@;'; put 'put ''M2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQg''@;'; put 'put ''NCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0t''@;'; put 'put ''eEB4bDptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1c''@;'; put 'put ''M2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2''@;'; put 'put ''KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0t''@;'; put 'put ''eUB4bDp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1c''@;'; put 'put ''M2I0IDkpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49InAtdEB4bDpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6bm9uZSJde3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6bm9uZSJde3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC1sQHhsOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeGw6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOnh4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0icC1iQHhsOnh4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOnh4cyJde3Bh''@;'; put 'put ''ZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOnh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwLWxAeGw6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6eHMiXXtwYWRkaW5nLXJpZ2h0''@;'; put 'put ''OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhsOnhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeGw6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJwLXRAeGw6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4bDpzbSJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6c20iXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0''@;'; put 'put ''IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOm1kIl17''@;'; put 'put ''cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDptZCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC10QHhsOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6bGciXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhsOmxnIl17cGFkZGluZy1ib3R0''@;'; put 'put ''b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeGw6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeGw6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InAtckB4bDp4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDp4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0''@;'; put 'put ''IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4bDp4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhsOnh4''@;'; put 'put ''bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6eHh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6eHh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOnh4eGwi''@;'; put 'put ''XXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6bm9uZSJde21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDpu''@;'; put 'put ''b25lIl17bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJA''@;'; put 'put ''eGw6eHh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDp4eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAx''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDp4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6eHhzIl17''@;'; put 'put ''bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtLXJAeGw6eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOnhzIl17bWFyZ2luLWxlZnQ6dmFy''@;'; put 'put ''KC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhsOnNtIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhs''@;'; put 'put ''OnNtIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhsOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0tckB4bDptZCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDptZCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeGw6bWQiXXttYXJnaW4tbGVm''@;'; put 'put ''dDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6bGciXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LWJAeGw6bGciXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhsOnhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOnhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDp4bCJde21hcmdp''@;'; put 'put ''bi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhsOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0ibS1iQHhsOnh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeGw6eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6eHh4bCJde21hcmdpbi10b3A6dmFyKC0t''@;'; put 'put ''XDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6eHh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDp4eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0t''@;'; put 'put ''bEB4bDp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9fVtjZHMtbGF5b3V0PW5vLXNjcm9sbGluZ117b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudH1bY2RzLWxheW91dH49ImNvbnRhaW5lcjpmaWxsIl0sW2Nkcy1sYXlvdXR+PWZpbGxde3dpZHRoOjEwMCUhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0iY29udGFpbmVyOmNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OmF1dG99W2Nkcy1sYXlvdXR+PSJjb250YWluZXI6eHMiXXt3aWR0aDoxMDAlO21heC13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC14cyl9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJjb250YWluZXI6c20iXXt3aWR0aDoxMDAlO21heC13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC1zbSl9W2Nkcy1sYXlvdXR+PSJjb250YWluZXI6bWQiXXt3aWR0aDoxMDAlO21heC13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC1tZCl9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJjb250YWluZXI6bGciXXt3aWR0aDoxMDAlO21heC13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC1sZyl9W2Nkcy1sYXlvdXR+PSJjb250YWluZXI6eGwiXXt3aWR0aDoxMDAlO21heC13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC14bCl9''@;'; put 'put ''Kiw6YWZ0ZXIsOmJlZm9yZSw6aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3h9W2Nkcy10aGVtZX49ZGFya117LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LWxpbmstY29sb3ItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItMzAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBo''@;'; put 'put ''eS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci0yMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQ1MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlz''@;'; put 'put ''YWJsZWQtYnV0dG9uOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1pbmZvLWhvdmVyOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1Y2Nlc3MtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXdhcm5pbmctaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15''@;'; put 'put ''ZWxsb3ctNjAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kYW5nZXItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNDAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1uZXV0cmFsLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMt''@;'; put 'put ''Z2xvYmFsLXR5cG9ncmFwaHktbGluay1vbi1jb2xvcmJnOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29s''@;'; put 'put ''b3ItMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRl''@;'; put 'put ''KTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkLWJ1dHRvbjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi05MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LWluZm8taG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWNjZXNzLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNDAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXdhcm5pbmctaG92ZXI6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNjAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRhbmdlci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC00MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbmV1dHJhbC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNv''@;'; put 'put ''bnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1vbi1jb2xvcmJnOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNDAwKTst''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMzAwKTstLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0yMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtYXBwLWJh''@;'; put 'put ''Y2tncm91bmQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZHJvcC1iYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXIt''@;'; put 'put ''YmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWlu''@;'; put 'put ''ZXItYmFja2dyb3VuZC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1kYXJrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTExMDApOy0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1jb250YWluZXItYmFja2dyb3VuZC1pbnZlcnNlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2UtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1pbnZlcnNlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFj''@;'; put 'put ''ayk7LS1jZHMtYWxpYXMtb2JqZWN0LW92ZXJsYXktYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtYm9yZGVyLWNvbG9yLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LXNoYWRvdy0xMDA6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikgMCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMzAwKTstLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTIwMDowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS0yKSAwIHZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMzAwOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIDAgdmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1vcGFjaXR5LTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29u''@;'; put 'put ''c3RydWN0aW9uLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmU6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3Vu''@;'; put 'put ''ZC1zZWxlY3RlZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00''@;'; put 'put ''MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTExMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hh''@;'; put 'put ''ZGUtc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1j''@;'; put 'put ''b25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2Vjb25kYXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTQwMCk7LS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWludGVyYWN0aW9uLXN1Y2Nlc3MtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTYwMCk7LS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWludGVyYWN0aW9uLXN1Y2Nlc3Mtc2Vjb25kYXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMzAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtaW50ZXJhY3Rpb24td2FybmluZy1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24td2FybmluZy1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy01MDApOy0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLXNlY29uZGFyeS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy0xMDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVy''@;'; put 'put ''YWN0aW9uLWRhbmdlci1zZWNvbmRhcnktaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLXNlY29uZGFyeS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbnZlcnNlLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0''@;'; put 'put ''aW9uLTcwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1j''@;'; put 'put ''b25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1zdGF0dXMtdGludDp0cmFuc3BhcmVudDstLWNkcy1hbGlhcy1zdGF0dXMtaW5mbzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNDAwKTstLWNkcy1hbGlhcy1zdGF0dXMtaW5mby10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1''@;'; put 'put ''ZS04MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcy10aW50OnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tODAwKTstLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcy1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmc6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS00MDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXN0YXR1cy13YXJuaW5nLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtc3Rh''@;'; put 'put ''dHVzLWRhbmdlci1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC02MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItZGFyazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC05MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29u''@;'; put 'put ''c3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTQwMCk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJs''@;'; put 'put ''ZWQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXk6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXktdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLWNvbnN0cnVjdGlvbi0xMDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXktc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMt''@;'; put 'put ''dXRpbGl0eS1ibHVlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWxpZ2h0LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1saWdodC1ibHVlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktbGlnaHQtYmx1ZS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy11dGlsaXR5LWRhcmstYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTIwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1kYXJrLWJsdWUtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZGFyay1ibHVlLXNoYWRlOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JlZW46dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JlZW4tdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTEwMDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXV0aWxpdHktZ3JlZW4tc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0yMDApOy0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdy10aW50OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3Itb2NocmUtOTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdy1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTMwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1yZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXJlZC10''@;'; put 'put ''aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktcmVkLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTIwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNjAw''@;'; put 'put ''KTstLWNkcy1hbGlhcy11dGlsaXR5LXRhbmdlcmluZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdGFuZ2VyaW5lLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTQwMCk7LS1jZHMtYWxpYXMtdXRp''@;'; put 'put ''bGl0eS12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXZpb2xldC10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0LXNoYWRlOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItdmlvbGV0LTIwMCk7LS1jZHMtYWxpYXMtdml6LWJvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS01MCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNDAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xLWJs''@;'; put 'put ''dWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTItdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTQwMCk7''@;'; put 'put ''LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtMjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0zLWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTIwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWxhdmVuZGVyLTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNC1saW1lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS0zMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVy''@;'; put 'put ''YWwtNS1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTY6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNi1hcXVhOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MCk7''@;'; put 'put ''LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTMwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNy12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC04OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItYXF1YS00MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTgtbGltZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtMTAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC05OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS0yMDApOy0tY2RzLWFsaWFzLXZpei1n''@;'; put 'put ''ZW5lcmFsLTktYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0zMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEwLWxpbWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1s''@;'; put 'put ''aW1lLTUwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNDAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMS1hcXVhOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS00MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEyOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMTAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMi12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEzOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTQwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdml6LWdlbmVyYWwtMTMtdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTMwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0yMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTE0LWJsdWU6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1ibHVlLTUwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xNTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstMzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xNS1hcXVhOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0zMDApOy0tY2RzLWFsaWFzLXZpei1n''@;'; put 'put ''ZW5lcmFsLTE2OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xNi1saW1lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Y29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LXN1Y2Nlc3M6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS13YXJuaW5nOnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTMwMCk7LS1jZHMtYWxpYXMt''@;'; put 'put ''dml6LXNldmVyaXR5LXdhcm5pbmctbGlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMzAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktaW1tZWRpYXRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LWNyaXRp''@;'; put 'put ''Y2FsOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LWZyZWUtc3BhY2UtZmlsbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNTA6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1ibHVlLTEwMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUt''@;'; put 'put ''NTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Ymx1ZS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDApOy0tY2RzLWFsaWFzLXZpei1z''@;'; put 'put ''ZXF1ZW50aWFsLWJsdWUtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC01MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMTAwOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTkwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci12aW9sZXQtNzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTYwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRp''@;'; put 'put ''YWwtdmlvbGV0LTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMTAwMDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hy''@;'; put 'put ''ZS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNzAwKTstLWNkcy1hbGlhcy12aXot''@;'; put 'put ''c2VxdWVudGlhbC1vY2hyZS00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNjAwOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9j''@;'; put 'put ''aHJlLTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTApOy0tY2RzLWFsaWFzLXZp''@;'; put 'put ''ei1zZXF1ZW50aWFsLWFxdWEtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMjAwOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItYXF1YS04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS02MDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFs''@;'; put 'put ''LWFxdWEtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtOTAwOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItYXF1YS0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMCk7LS1jZHMtYWxp''@;'; put 'put ''YXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tOTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVu''@;'; put 'put ''LTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi01MDA6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1ncmVlbi01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMzAwKTstLWNkcy1h''@;'; put 'put ''bGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3Jl''@;'; put 'put ''ZW4tMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LXJlZC05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVl''@;'; put 'put ''bnRpYWwtcmVkLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNjAwOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMjAwKTstLWNkcy1hbGlhcy12aXot''@;'; put 'put ''c2VxdWVudGlhbC1yZWQtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTEwMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTApfTpyb290ey0tY2RzLWdsb2JhbC1iYXNlOjIwfWh0bWx7Zm9udC1mYW1pbHk6c2Fu''@;'; put 'put ''cy1zZXJpZjtsaW5lLWhlaWdodDoxLjE1Oy1tcy10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCV9Ym9keXttYXJnaW46MH1hcnRpY2xlLGFzaWRlLGRldGFpbHMsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGhlYWRlcixtYWluLG1lbnUsbmF2LHNl''@;'; put 'put ''Y3Rpb24sc3VtbWFyeXtkaXNwbGF5OmJsb2NrfWF1ZGlvLGNhbnZhcyxwcm9ncmVzcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9ja31hdWRpbzpub3QoW2NvbnRyb2xzXSl7ZGlzcGxheTpub25lO2hlaWdodDowfXByb2dyZXNze3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXRlbXBsYXRlLFto''@;'; put 'put ''aWRkZW5de2Rpc3BsYXk6bm9uZX1he2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcDpvYmplY3RzfWE6YWN0aXZlLGE6aG92ZXJ7b3V0bGluZS13aWR0aDowfWFiYnJbdGl0bGVde2JvcmRlci1ib3R0b206bm9uZTt0ZXh0LWRlY29yYXRp''@;'; put 'put ''b246dW5kZXJsaW5lOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9ZGZue2ZvbnQtc3R5bGU6aXRhbGlj''@;'; put 'put ''fWgxe2ZvbnQtc2l6ZToyZW07bWFyZ2luOi42N2VtIDB9bWFya3tiYWNrZ3JvdW5kLWNvbG9yOiNmZjA7Y29sb3I6IzAwMH1zbWFsbHtmb250LXNpemU6ODAlfXN1YixzdXB7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2Vs''@;'; put 'put ''aW5lfXN1Yntib3R0b206LS4yNWVtfXN1cHt0b3A6LS41ZW19aW1ne2JvcmRlci1zdHlsZTpub25lfXN2Zzpub3QoOnJvb3Qpe292ZXJmbG93OmhpZGRlbn1jb2RlLGtiZCxwcmUsc2FtcHtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOjFlbX1maWd1cmV7bWFyZ2luOjFlbSA0MHB4''@;'; put 'put ''fWhye2JveC1zaXppbmc6Y29udGVudC1ib3g7aGVpZ2h0OjA7b3ZlcmZsb3c6dmlzaWJsZX1idXR0b24saW5wdXQsb3B0Z3JvdXAsc2VsZWN0LHRleHRhcmVhe2ZvbnQ6aW5oZXJpdDttYXJnaW46MH10ZXh0YXJlYXtsaW5lLWhlaWdodDoxLjE1fW9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OjcwMH1i''@;'; put 'put ''dXR0b24saW5wdXR7b3ZlcmZsb3c6dmlzaWJsZX1idXR0b24sc2VsZWN0e3RleHQtdHJhbnNmb3JtOm5vbmV9YnV0dG9uLGh0bWwgW3R5cGU9YnV0dG9uXSxbdHlwZT1yZXNldF0sW3R5cGU9c3VibWl0XXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9ufWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5l''@;'; put 'put ''cixbdHlwZT1idXR0b25dOjotbW96LWZvY3VzLWlubmVyLFt0eXBlPXJlc2V0XTo6LW1vei1mb2N1cy1pbm5lcixbdHlwZT1zdWJtaXRdOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH1maWVsZHNldHtib3JkZXI6MXB4IHNvbGlkIHNpbHZlcjttYXJnaW46''@;'; put 'put ''MCAycHg7cGFkZGluZzouMzVlbSAuNjI1ZW0gLjc1ZW19bGVnZW5ke2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O2Rpc3BsYXk6dGFibGU7bWF4LXdpZHRoOjEwMCU7cGFkZGluZzowO3doaXRlLXNwYWNlOm5vcm1hbH10ZXh0YXJlYXtvdmVyZmxvdzphdXRvfVt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XSxbdHlwZT1yYWRpb117Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MH1bdHlwZT1udW1iZXJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFt0eXBlPW51bWJlcl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W3R5cGU9c2VhcmNoXXstd2Vi''@;'; put 'put ''a2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9W3R5cGU9c2VhcmNoXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixbdHlwZT1zZWFyY2hdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1m''@;'; put 'put ''aWxlLXVwbG9hZC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9OnJvb3R7LS1jbHItY29sb3ItbmV1dHJhbC0wOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1uZXV0cmFsLTUwOmhzbCgxOTgsIDAlLCA5OCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwt''@;'; put 'put ''MTAwOmhzbCgxOTgsIDAlLCA5NSUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtMjAwOmhzbCgxOTgsIDAlLCA5MSUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtMzAwOmhzbCgxOTgsIDAlLCA4NyUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwOmhzbCgxOTgsIDAlLCA4MCUpOy0tY2xyLWNvbG9yLW5ldXRy''@;'; put 'put ''YWwtNTAwOmhzbCgxOTgsIDAlLCA3MCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNjAwOmhzbCgxOTgsIDAlLCA1NSUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwOmhzbCgxOTgsIDAlLCA0MCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtODAwOmhzbCgxOTgsIDAlLCAyNyUpOy0tY2xyLWNvbG9yLW5l''@;'; put 'put ''dXRyYWwtOTAwOmhzbCgxOTgsIDAlLCAyMCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtNTA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xv''@;'; put 'put ''ci1vbi1uZXV0cmFsLTEwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtMjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tbmV1dHJhbC0zMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTQwMDpoc2woMTk4LCAwJSwgMCUp''@;'; put 'put ''Oy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtNTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tbmV1dHJhbC02MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtNzAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTgwMDpo''@;'; put 'put ''c2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tbmV1dHJhbC05MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtMTAwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3ItYWN0aW9uLTUwOmhzbCgxOTgsIDgzJSwgOTQlKTstLWNsci1jb2xvci1h''@;'; put 'put ''Y3Rpb24tMTAwOmhzbCgxOTgsIDgxJSwgODglKTstLWNsci1jb2xvci1hY3Rpb24tMjAwOmhzbCgxOTgsIDc4JSwgNzglKTstLWNsci1jb2xvci1hY3Rpb24tMzAwOmhzbCgxOTgsIDY5JSwgNjklKTstLWNsci1jb2xvci1hY3Rpb24tNDAwOmhzbCgxOTgsIDY2JSwgNTclKTstLWNsci1jb2xv''@;'; put 'put ''ci1hY3Rpb24tNTAwOmhzbCgxOTgsIDgwJSwgNDYlKTstLWNsci1jb2xvci1hY3Rpb24tNjAwOmhzbCgxOTgsIDEwMCUsIDMyJSk7LS1jbHItY29sb3ItYWN0aW9uLTcwMDpoc2woMTk4LCAxMDAlLCAyOCUpOy0tY2xyLWNvbG9yLWFjdGlvbi04MDA6aHNsKDE5OCwgMTAwJSwgMjQlKTstLWNs''@;'; put 'put ''ci1jb2xvci1hY3Rpb24tOTAwOmhzbCgxOTgsIDEwMCUsIDIxJSk7LS1jbHItY29sb3ItYWN0aW9uLTEwMDA6aHNsKDE5OCwgMTAwJSwgMTUlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tNTA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tMTAwOmhzbCgxOTgsIDAlLCAw''@;'; put 'put ''JSk7LS1jbHItY29sb3Itb24tYWN0aW9uLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi0zMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tNDAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tYWN0aW9uLTUwMDpoc2woMTk4''@;'; put 'put ''LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi02MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi03MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi04MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlv''@;'; put 'put ''bi05MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi0xMDAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTUwOmhzbCgyODIsIDEwMCUsIDk1JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi0xMDA6aHNsKDI4Miwg''@;'; put 'put ''NTklLCA4NyUpOy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tMjAwOmhzbCgyODIsIDUxJSwgNzglKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTMwMDpoc2woMjgyLCA0NSUsIDcwJSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi00MDA6aHNsKDI4MiwgNDQlLCA2MiUp''@;'; put 'put ''Oy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tNTAwOmhzbCgyODIsIDQzJSwgNTQlKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTYwMDpoc2woMjgyLCA1MCUsIDQ1JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi03MDA6aHNsKDI4MiwgNjklLCAzNyUpOy0tY2xyLWNv''@;'; put 'put ''bG9yLXNlY29uZGFyeS1hY3Rpb24tODAwOmhzbCgyODIsIDEwMCUsIDI5JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi05MDA6aHNsKDI4MiwgMTAwJSwgMjIlKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTEwMDA6aHNsKDI4MiwgMTAwJSwgMTQlKTstLWNsci1jb2xvci1v''@;'; put 'put ''bi1zZWNvbmRhcnktYWN0aW9uLTUwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi0xMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29u''@;'; put 'put ''ZGFyeS1hY3Rpb24tMzAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi00MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTUwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5''@;'; put 'put ''LWFjdGlvbi02MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tNzAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTgwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5''@;'; put 'put ''LWFjdGlvbi05MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tMTAwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3ItZGFuZ2VyLTUwOmhzbCg5LCAxMDAlLCA5NyUpOy0tY2xyLWNvbG9yLWRhbmdlci0xMDA6aHNsKDksIDk1JSwgOTIl''@;'; put 'put ''KTstLWNsci1jb2xvci1kYW5nZXItMjAwOmhzbCg5LCA5MSUsIDg2JSk7LS1jbHItY29sb3ItZGFuZ2VyLTMwMDpoc2woOSwgODMlLCA3NiUpOy0tY2xyLWNvbG9yLWRhbmdlci00MDA6aHNsKDksIDg1JSwgNjclKTstLWNsci1jb2xvci1kYW5nZXItNTAwOmhzbCg5LCA4OCUsIDYxJSk7LS1j''@;'; put 'put ''bHItY29sb3ItZGFuZ2VyLTYwMDpoc2woOSwgOTIlLCA1MCUpOy0tY2xyLWNvbG9yLWRhbmdlci03MDA6aHNsKDksIDEwMCUsIDQzJSk7LS1jbHItY29sb3ItZGFuZ2VyLTgwMDpoc2woOSwgMTAwJSwgMzglKTstLWNsci1jb2xvci1kYW5nZXItOTAwOmhzbCg5LCAxMDAlLCAzMCUpOy0tY2xy''@;'; put 'put ''LWNvbG9yLWRhbmdlci0xMDAwOmhzbCg5LCAxMDAlLCAyMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci01MDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci0xMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItMjAwOmhzbCgxOTgsIDAlLCAwJSk7''@;'; put 'put ''LS1jbHItY29sb3Itb24tZGFuZ2VyLTMwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci00MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItNTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tZGFuZ2VyLTYwMDpoc2woMTk4LCAw''@;'; put 'put ''JSwgMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci03MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci04MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci05MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci0x''@;'; put 'put ''MDAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci13YXJuaW5nLTUwOmhzbCg0OCwgMTAwJSwgOTUlKTstLWNsci1jb2xvci13YXJuaW5nLTEwMDpoc2woNDgsIDEwMCUsIDg5JSk7LS1jbHItY29sb3Itd2FybmluZy0yMDA6aHNsKDQ4LCAxMDAlLCA4MyUpOy0tY2xyLWNvbG9yLXdh''@;'; put 'put ''cm5pbmctMzAwOmhzbCg0OCwgOTglLCA3MiUpOy0tY2xyLWNvbG9yLXdhcm5pbmctNDAwOmhzbCg0OCwgOTQlLCA1NyUpOy0tY2xyLWNvbG9yLXdhcm5pbmctNTAwOmhzbCg0OCwgOTUlLCA0OCUpOy0tY2xyLWNvbG9yLXdhcm5pbmctNjAwOmhzbCg0NiwgMTAwJSwgNDUlKTstLWNsci1jb2xv''@;'; put 'put ''ci13YXJuaW5nLTcwMDpoc2woNDMsIDEwMCUsIDQyJSk7LS1jbHItY29sb3Itd2FybmluZy04MDA6aHNsKDQxLCAxMDAlLCAzNCUpOy0tY2xyLWNvbG9yLXdhcm5pbmctOTAwOmhzbCgzOCwgMTAwJSwgMjglKTstLWNsci1jb2xvci13YXJuaW5nLTEwMDA6aHNsKDMxLCAxMDAlLCAxOSUpOy0t''@;'; put 'put ''Y2xyLWNvbG9yLW9uLXdhcm5pbmctNTA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTEwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctMjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy0zMDA6aHNsKDE5OCwg''@;'; put 'put ''MCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTQwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctNTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy02MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTcw''@;'; put 'put ''MDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctODAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy05MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTEwMDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9y''@;'; put 'put ''LXN1Y2Nlc3MtNTA6aHNsKDkzLCA1MiUsIDg4JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0xMDA6aHNsKDkzLCA1OCUsIDc1JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0yMDA6aHNsKDkzLCA3NiUsIDQ5JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0zMDA6aHNsKDkzLCA3NyUsIDQ0JSk7LS1jbHItY29s''@;'; put 'put ''b3Itc3VjY2Vzcy00MDA6aHNsKDkzLCA3OSUsIDQwJSk7LS1jbHItY29sb3Itc3VjY2Vzcy01MDA6aHNsKDkzLCA2NyUsIDM4JSk7LS1jbHItY29sb3Itc3VjY2Vzcy02MDA6aHNsKDkzLCA4NSUsIDMyJSk7LS1jbHItY29sb3Itc3VjY2Vzcy03MDA6aHNsKDkzLCAxMDAlLCAyNiUpOy0tY2xy''@;'; put 'put ''LWNvbG9yLXN1Y2Nlc3MtODAwOmhzbCg5MywgMTAwJSwgMjElKTstLWNsci1jb2xvci1zdWNjZXNzLTkwMDpoc2woOTMsIDEwMCUsIDE2JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0xMDAwOmhzbCg5MywgMTAwJSwgMTMlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTUwOmhzbCgxOTgsIDAlLCAw''@;'; put 'put ''JSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy0xMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXN1Y2Nlc3MtMzAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy00MDA6aHNs''@;'; put 'put ''KDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTUwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXN1Y2Nlc3MtNjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy03MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXN1''@;'; put 'put ''Y2Nlc3MtODAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTkwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy0xMDAwOmhzbCgxOTgsIDAlLCAxMDAlKX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1ncmlkLWd1dHRlci13aWR0aDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLWdyaWQtY29udGFpbmVyLXBhZGRpbmc6Y2FsYyh2YXIoLS1jbHItZ3JpZC1ndXR0ZXItd2lkdGgpICogLjUpOy0tY2xyLWdyaWQtY29sdW1uLXBhZGRpbmc6Y2FsYyh2YXIoLS1jbHItZ3JpZC1ndXR0ZXItd2lkdGgpICogLjUpOy0tY2xy''@;'; put 'put ''LWdyaWQtcm93LW1hcmdpbjpjYWxjKHZhcigtLWNsci1ncmlkLWd1dHRlci13aWR0aCkgKiAtLjUpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWNsb3NlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWNsb3NlLWNvbG9yLWhvdmVyOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWNsb3NlLWNvbG9yLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItYmFzZWZvbnQtc2l6ZToxMjUlOy0tY2xyLWdsb2JhbC1ib3JkZXJyYWRp''@;'; put 'put ''dXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHItZ2xvYmFsLWFwcC1iYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYXBw''@;'; put 'put ''LWJhY2tncm91bmQpOy0tY2xyLWdsb2JhbC1zZWxlY3Rpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1nbG9iYWwtb24tc2VsZWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24t''@;'; put 'put ''Y29sb3Itc2VsZWN0ZWQpOy0tY2xyLWdsb2JhbC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcik7LS1jbHItZ2xvYmFsLWNvbnRlbnQtaGVhZGVyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTst''@;'; put 'put ''LWNsci1nbG9iYWwtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWdsb2JhbC1zdWNjZXNzLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItZ2xvYmFsLWVycm9yLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0''@;'; put 'put ''dXMtZGFuZ2VyKX06cm9vdHstLWNsci1wb3BvdmVyLWJveC1zaGFkb3ctY29sb3I6cmdiYSgxNDAsIDE0MCwgMTQwLCAuMjUpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLW1ldHJvcG9saXMtZm9udC1mYW1pbHk6TWV0cm9wb2xpcywgIkF2ZW5pciBOZXh0IiwgIkhlbHZldGljYSBOZXVlIiwg''@;'; put 'put ''QXJpYWwsIHNhbnMtc2VyaWY7LS1jbHItYm9keS1mb250OnZhcigtLWNsci1tZXRyb3BvbGlzLWZvbnQtZmFtaWx5KTstLWNsci1mb250OnZhcigtLWNsci1ib2R5LWZvbnQpOy0tY2xyLWRpc3BsYXktZm9udDp2YXIoLS1jbHItbWV0cm9wb2xpcy1mb250LWZhbWlseSk7LS1jbHItZm9udC13''@;'; put 'put ''ZWlnaHQtbGlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbGlnaHQpOy0tY2xyLWZvbnQtd2VpZ2h0LXJlZ3VsYXI6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtcmVndWxhcik7LS1jbHItZm9udC13ZWlnaHQtc2VtaWJvbGQ6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLWZvbnQtd2VpZ2h0LWJvbGQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtYm9sZCk7LS1jbHItZm9udC13ZWlnaHQtZXh0cmFib2xkOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWZvbnQtd2VpZ2h0LWV4dHJhYm9sZCk7LS1jbHItaDEtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMzAwKTstLWNsci1oMS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXNpemUpOy0tY2xyLWgxLWZvbnQtd2VpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQpOy0tY2xyLWgxLWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWgxLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQpOy0tY2xy''@;'; put 'put ''LWgxLWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLWgyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMCk7LS1jbHItaDItZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWhlYWRsaW5lLWZvbnQtc2l6ZSk7LS1jbHItaDItZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGxpbmUtZm9udC13ZWlnaHQpOy0tY2xyLWgyLWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWgyLWxpbmUtaGVpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRsaW5lLWxpbmUtaGVpZ2h0KTstLWNsci1oMi1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkbGluZS1sZXR0ZXItc3BhY2luZyk7LS1jbHItaDMtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29s''@;'; put 'put ''b3ItMzAwKTstLWNsci1oMy1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtZm9udC1zaXplKTstLWNsci1oMy1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS10aXRsZS1mb250LXdlaWdodCk7LS1jbHItaDMtZm9udC1mYW1pbHk6dmFyKC0t''@;'; put 'put ''Y2xyLWRpc3BsYXktZm9udCk7LS1jbHItaDMtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQpOy0tY2xyLWgzLWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRpdGxlLWxldHRlci1zcGFjaW5nKTstLWNsci1o''@;'; put 'put ''NC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0zMDApOy0tY2xyLWg0LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZSk7LS1jbHItaDQtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlv''@;'; put 'put ''bi1mb250LXdlaWdodCk7LS1jbHItaDQtZm9udC1mYW1pbHk6dmFyKC0tY2xyLWRpc3BsYXktZm9udCk7LS1jbHItaDQtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCk7LS1jbHItaDQtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItaDUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMzAwKTstLWNsci1oNS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpOy0tY2xy''@;'; put 'put ''LWg1LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQpOy0tY2xyLWg1LWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWg1LWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNl''@;'; put 'put ''Y3Rpb24tbGluZS1oZWlnaHQpOy0tY2xyLWg1LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpOy0tY2xyLWg2LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMCk7LS1jbHItaDYtZm9udC1z''@;'; put 'put ''aXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC1zaXplKTstLWNsci1oNi1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtd2VpZ2h0KTstLWNsci1oNi1mb250LWZhbWlseTp2YXIoLS1jbHItZGlzcGxheS1mb250KTst''@;'; put 'put ''LWNsci1oNi1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0KTstLWNsci1oNi1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWxldHRlci1zcGFjaW5nKTstLWNsci1wMC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLXAwLWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7LS1jbHItcDAtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7LS1jbHIt''@;'; put 'put ''cDAtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7LS1jbHItcDAtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDEtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktY29sb3ItNDUwKTstLWNsci1wMS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpOy0tY2xyLXAxLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpOy0tY2xyLXAxLWxpbmUtaGVp''@;'; put 'put ''Z2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpOy0tY2xyLXAxLWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLXAyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNv''@;'; put 'put ''bG9yLTQ1MCk7LS1jbHItcDItZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLXAyLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bSk7LS1jbHItcDItbGluZS1oZWlnaHQ6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1wMi1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLXAzLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDMt''@;'; put 'put ''Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLXAzLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7LS1jbHItcDMtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS05KTstLWNsci1wMy1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLXA0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDQtZm9udC1zaXplOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLXA0LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci1wNC1saW5lLWhlaWdodDpjYWxjKDIwICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWJhc2UpKSk7LS1jbHItcDQtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTstLWNsci1wNS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLXA1LWZvbnQtc2l6ZTp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTstLWNsci1wNS1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpOy0tY2xyLXA1LWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1j''@;'; put 'put ''bHItcDUtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTstLWNsci1wNi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLXA2LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7LS1jbHItcDYtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7LS1jbHItcDYtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7''@;'; put 'put ''LS1jbHItcDYtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTstLWNsci1wNy1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtc2l6ZSk7LS1jbHItcDctZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1wNy1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRp''@;'; put 'put ''b24tbGluZS1oZWlnaHQpOy0tY2xyLXA3LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDgtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTstLWNsci1wOC1mb250LXNp''@;'; put 'put ''emU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtc2l6ZSk7LS1jbHItcDgtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1wOC1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGluZS1oZWlnaHQpOy0tY2xyLXA4LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItbGlzdC1pdGVtLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWNvbG9yLTQwMCl9LmNsci1hbGlnbi1iYXNlbGluZXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi10b3B7dmVydGljYWwtYWxpZ246dG9wIWltcG9ydGFudH0uY2xyLWFsaWduLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''YWxpZ24tYm90dG9te3ZlcnRpY2FsLWFsaWduOmJvdHRvbSFpbXBvcnRhbnR9LmNsci1hbGlnbi10ZXh0LWJvdHRvbXt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbSFpbXBvcnRhbnR9LmNsci1hbGlnbi10ZXh0LXRvcHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcCFpbXBvcnRhbnR9LmNsci1j''@;'; put 'put ''bGVhcmZpeDphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6dGFibGU7Y2xlYXI6Ym90aH0uY2xyLWRpc3BsYXktYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmNsci1kaXNwbGF5LWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmNsci1kaXNwbGF5LWlu''@;'; put 'put ''bGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9LmNsci1mbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3chaW1wb3J0YW50fS5jbHItZmxleC1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uIWltcG9ydGFudH0uY2xyLWZsZXgtcm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJl''@;'; put 'put ''dmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LXdyYXB7ZmxleC13cmFwOndyYXAhaW1wb3J0YW50fS5jbHItZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9''@;'; put 'put ''LmNsci1mbGV4LXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtZmlsbHtmbGV4OjEgMSBhdXRvIWltcG9ydGFudH0uY2xyLWZsZXgtZ3Jvdy0we2ZsZXgtZ3JvdzowIWltcG9ydGFudH0uY2xyLWZsZXgtZ3Jvdy0xe2ZsZXgtZ3JvdzoxIWlt''@;'; put 'put ''cG9ydGFudH0uY2xyLWZsZXgtc2hyaW5rLTB7ZmxleC1zaHJpbms6MCFpbXBvcnRhbnR9LmNsci1mbGV4LXNocmluay0xe2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWp1''@;'; put 'put ''c3RpZnktY29udGVudC1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2Ut''@;'; put 'put ''YmV0d2VlbiFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1lbmR7YWxp''@;'; put 'put ''Z24taXRlbXM6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zdHJldGNoe2Fs''@;'; put 'put ''aWduLWl0ZW1zOnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWNl''@;'; put 'put ''bnRlcnthbGlnbi1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0u''@;'; put 'put ''Y2xyLWFsaWduLWNvbnRlbnQtc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1hdXRve2FsaWduLXNlbGY6YXV0byFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1h''@;'; put 'put ''bGlnbi1zZWxmLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxm''@;'; put 'put ''LXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoIWltcG9ydGFudH1AbWVkaWEobWluLXdpZHRoOjU3NnB4KXsuY2xyLWZsZXgtc20tcm93e2ZsZXgtZGlyZWN0aW9uOnJvdyFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4haW1wb3J0YW50fS5jbHIt''@;'; put 'put ''ZmxleC1zbS1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLWNvbHVtbi1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtc20td3JhcHtmbGV4LXdyYXA6d3JhcCFpbXBvcnRh''@;'; put 'put ''bnR9LmNsci1mbGV4LXNtLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH0uY2xyLWZsZXgtc20td3JhcC1yZXZlcnNle2ZsZXgtd3JhcDp3cmFwLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1zbS1maWxse2ZsZXg6MSAxIGF1dG8haW1wb3J0YW50fS5jbHItZmxleC1zbS1n''@;'; put 'put ''cm93LTB7ZmxleC1ncm93OjAhaW1wb3J0YW50fS5jbHItZmxleC1zbS1ncm93LTF7ZmxleC1ncm93OjEhaW1wb3J0YW50fS5jbHItZmxleC1zbS1zaHJpbmstMHtmbGV4LXNocmluazowIWltcG9ydGFudH0uY2xyLWZsZXgtc20tc2hyaW5rLTF7ZmxleC1zaHJpbms6MSFpbXBvcnRhbnR9LmNs''@;'; put 'put ''ci1qdXN0aWZ5LWNvbnRlbnQtc20tc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXNtLWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXNtLWNlbnRlcntqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1zbS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1zbS1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRh''@;'; put 'put ''bnR9LmNsci1hbGlnbi1pdGVtcy1zbS1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXNtLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zbS1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyIWlt''@;'; put 'put ''cG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXNtLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXNtLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXNtLXN0YXJ0e2FsaWduLWNvbnRl''@;'; put 'put ''bnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXNtLWVuZHthbGlnbi1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc20tY2VudGVye2FsaWduLWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc20t''@;'; put 'put ''YmV0d2VlbnthbGlnbi1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zbS1hcm91bmR7YWxpZ24tY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zbS1zdHJldGNoe2FsaWduLWNvbnRlbnQ6c3RyZXRjaCFp''@;'; put 'put ''bXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLWF1dG97YWxpZ24tc2VsZjphdXRvIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtc20tc3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtc20tZW5ke2FsaWduLXNlbGY6ZmxleC1lbmQhaW1wb3J0''@;'; put 'put ''YW50fS5jbHItYWxpZ24tc2VsZi1zbS1jZW50ZXJ7YWxpZ24tc2VsZjpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1zbS1iYXNlbGluZXthbGlnbi1zZWxmOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtc20tc3RyZXRjaHthbGlnbi1zZWxmOnN0cmV0Y2ghaW1w''@;'; put 'put ''b3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZsZXgtbWQtcm93e2ZsZXgtZGlyZWN0aW9uOnJvdyFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4haW1wb3J0YW50fS5jbHItZmxleC1tZC1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVj''@;'; put 'put ''dGlvbjpyb3ctcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWNvbHVtbi1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtd3JhcHtmbGV4LXdyYXA6d3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLW5vd3JhcHtmbGV4LXdy''@;'; put 'put ''YXA6bm93cmFwIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtd3JhcC1yZXZlcnNle2ZsZXgtd3JhcDp3cmFwLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1tZC1maWxse2ZsZXg6MSAxIGF1dG8haW1wb3J0YW50fS5jbHItZmxleC1tZC1ncm93LTB7ZmxleC1ncm93OjAhaW1wb3J0YW50fS5j''@;'; put 'put ''bHItZmxleC1tZC1ncm93LTF7ZmxleC1ncm93OjEhaW1wb3J0YW50fS5jbHItZmxleC1tZC1zaHJpbmstMHtmbGV4LXNocmluazowIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtc2hyaW5rLTF7ZmxleC1zaHJpbms6MSFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbWQtc3RhcnR7anVz''@;'; put 'put ''dGlmeS1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LW1kLWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LW1kLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xy''@;'; put 'put ''LWp1c3RpZnktY29udGVudC1tZC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1tZC1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1tZC1zdGFydHth''@;'; put 'put ''bGlnbi1pdGVtczpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLW1kLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1tZC1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLW1kLWJh''@;'; put 'put ''c2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLW1kLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LW1kLXN0YXJ0e2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1h''@;'; put 'put ''bGlnbi1jb250ZW50LW1kLWVuZHthbGlnbi1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbWQtY2VudGVye2FsaWduLWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbWQtYmV0d2VlbnthbGlnbi1jb250ZW50OnNwYWNlLWJl''@;'; put 'put ''dHdlZW4haW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1tZC1hcm91bmR7YWxpZ24tY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1tZC1zdHJldGNoe2FsaWduLWNvbnRlbnQ6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLW1kLWF1''@;'; put 'put ''dG97YWxpZ24tc2VsZjphdXRvIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbWQtc3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbWQtZW5ke2FsaWduLXNlbGY6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1tZC1jZW50ZXJ7''@;'; put 'put ''YWxpZ24tc2VsZjpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1tZC1iYXNlbGluZXthbGlnbi1zZWxmOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbWQtc3RyZXRjaHthbGlnbi1zZWxmOnN0cmV0Y2ghaW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjk5MnB4''@;'; put 'put ''KXsuY2xyLWZsZXgtbGctcm93e2ZsZXgtZGlyZWN0aW9uOnJvdyFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4haW1wb3J0YW50fS5jbHItZmxleC1sZy1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZSFpbXBvcnRhbnR9LmNs''@;'; put 'put ''ci1mbGV4LWxnLWNvbHVtbi1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtbGctd3JhcHtmbGV4LXdyYXA6d3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH0uY2xyLWZsZXgt''@;'; put 'put ''bGctd3JhcC1yZXZlcnNle2ZsZXgtd3JhcDp3cmFwLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1sZy1maWxse2ZsZXg6MSAxIGF1dG8haW1wb3J0YW50fS5jbHItZmxleC1sZy1ncm93LTB7ZmxleC1ncm93OjAhaW1wb3J0YW50fS5jbHItZmxleC1sZy1ncm93LTF7ZmxleC1ncm93OjEh''@;'; put 'put ''aW1wb3J0YW50fS5jbHItZmxleC1sZy1zaHJpbmstMHtmbGV4LXNocmluazowIWltcG9ydGFudH0uY2xyLWZsZXgtbGctc2hyaW5rLTF7ZmxleC1zaHJpbms6MSFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbGctc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0''@;'; put 'put ''YW50fS5jbHItanVzdGlmeS1jb250ZW50LWxnLWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LWxnLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1sZy1iZXR3ZWVue2p1''@;'; put 'put ''c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1sZy1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1sZy1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0IWltcG9ydGFu''@;'; put 'put ''dH0uY2xyLWFsaWduLWl0ZW1zLWxnLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1sZy1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLWxnLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lIWlt''@;'; put 'put ''cG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLWxnLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWxnLXN0YXJ0e2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWxnLWVuZHthbGlnbi1jb250''@;'; put 'put ''ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbGctY2VudGVye2FsaWduLWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbGctYmV0d2VlbnthbGlnbi1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItYWxpZ24tY29u''@;'; put 'put ''dGVudC1sZy1hcm91bmR7YWxpZ24tY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1sZy1zdHJldGNoe2FsaWduLWNvbnRlbnQ6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWxnLWF1dG97YWxpZ24tc2VsZjphdXRvIWltcG9ydGFudH0u''@;'; put 'put ''Y2xyLWFsaWduLXNlbGYtbGctc3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbGctZW5ke2FsaWduLXNlbGY6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1sZy1jZW50ZXJ7YWxpZ24tc2VsZjpjZW50ZXIhaW1wb3J0YW50fS5j''@;'; put 'put ''bHItYWxpZ24tc2VsZi1sZy1iYXNlbGluZXthbGlnbi1zZWxmOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbGctc3RyZXRjaHthbGlnbi1zZWxmOnN0cmV0Y2ghaW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbGV4LXhsLXJvd3tmbGV4LWRpcmVj''@;'; put 'put ''dGlvbjpyb3chaW1wb3J0YW50fS5jbHItZmxleC14bC1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uIWltcG9ydGFudH0uY2xyLWZsZXgteGwtcm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC14bC1jb2x1bW4tcmV2ZXJzZXtmbGV4''@;'; put 'put ''LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLXdyYXB7ZmxleC13cmFwOndyYXAhaW1wb3J0YW50fS5jbHItZmxleC14bC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3Jh''@;'; put 'put ''cC1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgteGwtZmlsbHtmbGV4OjEgMSBhdXRvIWltcG9ydGFudH0uY2xyLWZsZXgteGwtZ3Jvdy0we2ZsZXgtZ3JvdzowIWltcG9ydGFudH0uY2xyLWZsZXgteGwtZ3Jvdy0xe2ZsZXgtZ3JvdzoxIWltcG9ydGFudH0uY2xyLWZsZXgteGwtc2hyaW5r''@;'; put 'put ''LTB7ZmxleC1zaHJpbms6MCFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLXNocmluay0xe2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXhsLXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC14bC1l''@;'; put 'put ''bmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC14bC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQteGwtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFp''@;'; put 'put ''bXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQteGwtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMteGwtc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy14bC1lbmR7YWxp''@;'; put 'put ''Z24taXRlbXM6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMteGwtY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy14bC1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy14bC1z''@;'; put 'put ''dHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC14bC1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC14bC1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1h''@;'; put 'put ''bGlnbi1jb250ZW50LXhsLWNlbnRlcnthbGlnbi1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXhsLWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQteGwtYXJvdW5ke2FsaWduLWNvbnRlbnQ6''@;'; put 'put ''c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQteGwtc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1hdXRve2FsaWduLXNlbGY6YXV0byFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXhsLXN0YXJ0e2FsaWdu''@;'; put 'put ''LXNlbGY6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXhsLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYteGwtY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYteGwtYmFzZWxpbmV7YWxp''@;'; put 'put ''Z24tc2VsZjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXhsLXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoIWltcG9ydGFudH19LmNsci1mbGV4LXhzLWZpcnN0e29yZGVyOi0xfS5jbHItZmxleC14cy1sYXN0e29yZGVyOjF9LmNsci1mbGV4LXhzLXVub3JkZXJlZHtvcmRl''@;'; put 'put ''cjowfS5jbHItZmxleC1pdGVtcy14cy10b3B7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMteHMtbWlkZGxle2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMteHMtYm90dG9te2FsaWduLWl0ZW1zOmZsZXgtZW5kfS5jbHItZmxleC14cy10b3B7YWxpZ24t''@;'; put 'put ''c2VsZjpmbGV4LXN0YXJ0fS5jbHItZmxleC14cy1taWRkbGV7YWxpZ24tc2VsZjpjZW50ZXJ9LmNsci1mbGV4LXhzLWJvdHRvbXthbGlnbi1zZWxmOmZsZXgtZW5kfS5jbHItZmxleC1pdGVtcy14cy1sZWZ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy14cy1j''@;'; put 'put ''ZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMteHMtcmlnaHR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5jbHItZmxleC1pdGVtcy14cy1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uY2xyLWZsZXgtaXRlbXMteHMtYmV0d2VlbntqdXN0''@;'; put 'put ''aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn1AbWVkaWEobWluLXdpZHRoOjU3NnB4KXsuY2xyLWZsZXgtc20tZmlyc3R7b3JkZXI6LTF9LmNsci1mbGV4LXNtLWxhc3R7b3JkZXI6MX0uY2xyLWZsZXgtc20tdW5vcmRlcmVke29yZGVyOjB9fUBtZWRpYShtaW4td2lkdGg6NTc2cHgpey5jbHIt''@;'; put 'put ''ZmxleC1pdGVtcy1zbS10b3B7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMtc20tbWlkZGxle2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMtc20tYm90dG9te2FsaWduLWl0ZW1zOmZsZXgtZW5kfX1AbWVkaWEobWluLXdpZHRoOjU3NnB4KXsuY2xyLWZs''@;'; put 'put ''ZXgtc20tdG9we2FsaWduLXNlbGY6ZmxleC1zdGFydH0uY2xyLWZsZXgtc20tbWlkZGxle2FsaWduLXNlbGY6Y2VudGVyfS5jbHItZmxleC1zbS1ib3R0b217YWxpZ24tc2VsZjpmbGV4LWVuZH19QG1lZGlhKG1pbi13aWR0aDo1NzZweCl7LmNsci1mbGV4LWl0ZW1zLXNtLWxlZnR7anVzdGlm''@;'; put 'put ''eS1jb250ZW50OmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLXNtLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jbHItZmxleC1pdGVtcy1zbS1yaWdodHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmNsci1mbGV4LWl0ZW1zLXNtLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3Bh''@;'; put 'put ''Y2UtYXJvdW5kfS5jbHItZmxleC1pdGVtcy1zbS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufX1AbWVkaWEobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZsZXgtbWQtZmlyc3R7b3JkZXI6LTF9LmNsci1mbGV4LW1kLWxhc3R7b3JkZXI6MX0uY2xyLWZsZXgtbWQtdW5vcmRl''@;'; put 'put ''cmVke29yZGVyOjB9fUBtZWRpYShtaW4td2lkdGg6NzY4cHgpey5jbHItZmxleC1pdGVtcy1tZC10b3B7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMtbWQtbWlkZGxle2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMtbWQtYm90dG9te2FsaWduLWl0ZW1z''@;'; put 'put ''OmZsZXgtZW5kfX1AbWVkaWEobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZsZXgtbWQtdG9we2FsaWduLXNlbGY6ZmxleC1zdGFydH0uY2xyLWZsZXgtbWQtbWlkZGxle2FsaWduLXNlbGY6Y2VudGVyfS5jbHItZmxleC1tZC1ib3R0b217YWxpZ24tc2VsZjpmbGV4LWVuZH19QG1lZGlhKG1pbi13''@;'; put 'put ''aWR0aDo3NjhweCl7LmNsci1mbGV4LWl0ZW1zLW1kLWxlZnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLW1kLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jbHItZmxleC1pdGVtcy1tZC1yaWdodHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmNs''@;'; put 'put ''ci1mbGV4LWl0ZW1zLW1kLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5jbHItZmxleC1pdGVtcy1tZC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufX1AbWVkaWEobWluLXdpZHRoOjk5MnB4KXsuY2xyLWZsZXgtbGctZmlyc3R7b3JkZXI6LTF9LmNs''@;'; put 'put ''ci1mbGV4LWxnLWxhc3R7b3JkZXI6MX0uY2xyLWZsZXgtbGctdW5vcmRlcmVke29yZGVyOjB9fUBtZWRpYShtaW4td2lkdGg6OTkycHgpey5jbHItZmxleC1pdGVtcy1sZy10b3B7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMtbGctbWlkZGxle2FsaWduLWl0ZW1zOmNl''@;'; put 'put ''bnRlcn0uY2xyLWZsZXgtaXRlbXMtbGctYm90dG9te2FsaWduLWl0ZW1zOmZsZXgtZW5kfX1AbWVkaWEobWluLXdpZHRoOjk5MnB4KXsuY2xyLWZsZXgtbGctdG9we2FsaWduLXNlbGY6ZmxleC1zdGFydH0uY2xyLWZsZXgtbGctbWlkZGxle2FsaWduLXNlbGY6Y2VudGVyfS5jbHItZmxleC1s''@;'; put 'put ''Zy1ib3R0b217YWxpZ24tc2VsZjpmbGV4LWVuZH19QG1lZGlhKG1pbi13aWR0aDo5OTJweCl7LmNsci1mbGV4LWl0ZW1zLWxnLWxlZnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLWxnLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jbHItZmxleC1p''@;'; put 'put ''dGVtcy1sZy1yaWdodHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmNsci1mbGV4LWl0ZW1zLWxnLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5jbHItZmxleC1pdGVtcy1sZy1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufX1AbWVkaWEobWluLXdp''@;'; put 'put ''ZHRoOjEyMDBweCl7LmNsci1mbGV4LXhsLWZpcnN0e29yZGVyOi0xfS5jbHItZmxleC14bC1sYXN0e29yZGVyOjF9LmNsci1mbGV4LXhsLXVub3JkZXJlZHtvcmRlcjowfX1AbWVkaWEobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbGV4LWl0ZW1zLXhsLXRvcHthbGlnbi1pdGVtczpmbGV4LXN0''@;'; put 'put ''YXJ0fS5jbHItZmxleC1pdGVtcy14bC1taWRkbGV7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItZmxleC1pdGVtcy14bC1ib3R0b217YWxpZ24taXRlbXM6ZmxleC1lbmR9fUBtZWRpYShtaW4td2lkdGg6MTIwMHB4KXsuY2xyLWZsZXgteGwtdG9we2FsaWduLXNlbGY6ZmxleC1zdGFydH0uY2xy''@;'; put 'put ''LWZsZXgteGwtbWlkZGxle2FsaWduLXNlbGY6Y2VudGVyfS5jbHItZmxleC14bC1ib3R0b217YWxpZ24tc2VsZjpmbGV4LWVuZH19QG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpey5jbHItZmxleC1pdGVtcy14bC1sZWZ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVt''@;'; put 'put ''cy14bC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMteGwtcmlnaHR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5jbHItZmxleC1pdGVtcy14bC1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uY2xyLWZsZXgtaXRlbXMteGwtYmV0d2Vl''@;'; put 'put ''bntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn19LmNsci1mbG9hdC14cy1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5jbHItZmxvYXQteHMtcmlnaHR7ZmxvYXQ6cmlnaHQhaW1wb3J0YW50fS5jbHItZmxvYXQteHMtbm9uZXtmbG9hdDpub25lIWltcG9ydGFudH1AbWVkaWEobWlu''@;'; put 'put ''LXdpZHRoOjU3NnB4KXsuY2xyLWZsb2F0LXNtLWxlZnR7ZmxvYXQ6bGVmdCFpbXBvcnRhbnR9LmNsci1mbG9hdC1zbS1yaWdodHtmbG9hdDpyaWdodCFpbXBvcnRhbnR9LmNsci1mbG9hdC1zbS1ub25le2Zsb2F0Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjc2OHB4KXsuY2xy''@;'; put 'put ''LWZsb2F0LW1kLWxlZnR7ZmxvYXQ6bGVmdCFpbXBvcnRhbnR9LmNsci1mbG9hdC1tZC1yaWdodHtmbG9hdDpyaWdodCFpbXBvcnRhbnR9LmNsci1mbG9hdC1tZC1ub25le2Zsb2F0Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjk5MnB4KXsuY2xyLWZsb2F0LWxnLWxlZnR7Zmxv''@;'; put 'put ''YXQ6bGVmdCFpbXBvcnRhbnR9LmNsci1mbG9hdC1sZy1yaWdodHtmbG9hdDpyaWdodCFpbXBvcnRhbnR9LmNsci1mbG9hdC1sZy1ub25le2Zsb2F0Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbG9hdC14bC1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50''@;'; put 'put ''fS5jbHItZmxvYXQteGwtcmlnaHR7ZmxvYXQ6cmlnaHQhaW1wb3J0YW50fS5jbHItZmxvYXQteGwtbm9uZXtmbG9hdDpub25lIWltcG9ydGFudH19LmNsci1pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50fS5jbHItaGlkZGVuLXhzLXVwe2Rpc3BsYXk6bm9uZSFpbXBvcnRh''@;'; put 'put ''bnR9QG1lZGlhKG1heC13aWR0aDo1NzUuOThweCl7LmNsci1oaWRkZW4teHMtZG93bntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjU3NnB4KXsuY2xyLWhpZGRlbi1zbS11cHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEobWF4LXdpZHRoOjc2Ny45OHB4''@;'; put 'put ''KXsuY2xyLWhpZGRlbi1zbS1kb3due2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6NzY4cHgpey5jbHItaGlkZGVuLW1kLXVwe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYShtYXgtd2lkdGg6OTkxLjk4cHgpey5jbHItaGlkZGVuLW1kLWRvd257ZGlzcGxh''@;'; put 'put ''eTpub25lIWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDo5OTJweCl7LmNsci1oaWRkZW4tbGctdXB7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhKG1heC13aWR0aDoxMTk5Ljk4cHgpey5jbHItaGlkZGVuLWxnLWRvd257ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhKG1p''@;'; put 'put ''bi13aWR0aDoxMjAwcHgpey5jbHItaGlkZGVuLXhsLXVwe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fS5jbHItaGlkZGVuLXhsLWRvd24sLmNsci12aXNpYmxlLXByaW50LWJsb2Nre2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIHByaW50ey5jbHItdmlzaWJsZS1wcmludC1ibG9ja3tk''@;'; put 'put ''aXNwbGF5OmJsb2NrIWltcG9ydGFudH19LmNsci12aXNpYmxlLXByaW50LWlubGluZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fUBtZWRpYSBwcmludHsuY2xyLXZpc2libGUtcHJpbnQtaW5saW5le2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH19LmNsci12aXNpYmxlLXByaW50LWlubGluZS1i''@;'; put 'put ''bG9ja3tkaXNwbGF5Om5vbmUhaW1wb3J0YW50fUBtZWRpYSBwcmludHsuY2xyLXZpc2libGUtcHJpbnQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH19QG1lZGlhIHByaW50ey5jbHItaGlkZGVuLXByaW50e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fS5jbHIt''@;'; put 'put ''Y29udGFpbmVye3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDp2YXIoLS1jbHItZ3JpZC1jb250YWluZXItcGFkZGluZyk7cGFkZGluZy1sZWZ0OnZhcigtLWNsci1ncmlkLWNvbnRhaW5lci1wYWRkaW5nKTttYXJnaW4tcmlnaHQ6YXV0bzttYXJnaW4tbGVmdDphdXRvfS5jbHItcm93e2Rpc3Bs''@;'; put 'put ''YXk6ZmxleDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tcmlnaHQ6dmFyKC0tY2xyLWdyaWQtcm93LW1hcmdpbik7bWFyZ2luLWxlZnQ6dmFyKC0tY2xyLWdyaWQtcm93LW1hcmdpbil9LmNsci1uby1ndXR0ZXJze21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjB9LmNsci1uby1ndXR0ZXJzPi5j''@;'; put 'put ''bHItY29sLC5jbHItbm8tZ3V0dGVycz5bY2xhc3MqPWNsci1jb2wtXXtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjB9LmNsci1jb2wteGwsLmNsci1jb2wteGwtYXV0bywuY2xyLWNvbC14bC0xMiwuY2xyLWNvbC14bC0xMSwuY2xyLWNvbC14bC0xMCwuY2xyLWNvbC14bC05LC5jbHIt''@;'; put 'put ''Y29sLXhsLTgsLmNsci1jb2wteGwtNywuY2xyLWNvbC14bC02LC5jbHItY29sLXhsLTUsLmNsci1jb2wteGwtNCwuY2xyLWNvbC14bC0zLC5jbHItY29sLXhsLTIsLmNsci1jb2wteGwtMSwuY2xyLWNvbC1sZywuY2xyLWNvbC1sZy1hdXRvLC5jbHItY29sLWxnLTEyLC5jbHItY29sLWxnLTEx''@;'; put 'put ''LC5jbHItY29sLWxnLTEwLC5jbHItY29sLWxnLTksLmNsci1jb2wtbGctOCwuY2xyLWNvbC1sZy03LC5jbHItY29sLWxnLTYsLmNsci1jb2wtbGctNSwuY2xyLWNvbC1sZy00LC5jbHItY29sLWxnLTMsLmNsci1jb2wtbGctMiwuY2xyLWNvbC1sZy0xLC5jbHItY29sLW1kLC5jbHItY29sLW1k''@;'; put 'put ''LWF1dG8sLmNsci1jb2wtbWQtMTIsLmNsci1jb2wtbWQtMTEsLmNsci1jb2wtbWQtMTAsLmNsci1jb2wtbWQtOSwuY2xyLWNvbC1tZC04LC5jbHItY29sLW1kLTcsLmNsci1jb2wtbWQtNiwuY2xyLWNvbC1tZC01LC5jbHItY29sLW1kLTQsLmNsci1jb2wtbWQtMywuY2xyLWNvbC1tZC0yLC5j''@;'; put 'put ''bHItY29sLW1kLTEsLmNsci1jb2wtc20sLmNsci1jb2wtc20tYXV0bywuY2xyLWNvbC1zbS0xMiwuY2xyLWNvbC1zbS0xMSwuY2xyLWNvbC1zbS0xMCwuY2xyLWNvbC1zbS05LC5jbHItY29sLXNtLTgsLmNsci1jb2wtc20tNywuY2xyLWNvbC1zbS02LC5jbHItY29sLXNtLTUsLmNsci1jb2wt''@;'; put 'put ''c20tNCwuY2xyLWNvbC1zbS0zLC5jbHItY29sLXNtLTIsLmNsci1jb2wtc20tMSwuY2xyLWNvbCwuY2xyLWNvbC1hdXRvLC5jbHItY29sLTEyLC5jbHItY29sLTExLC5jbHItY29sLTEwLC5jbHItY29sLTksLmNsci1jb2wtOCwuY2xyLWNvbC03LC5jbHItY29sLTYsLmNsci1jb2wtNSwuY2xy''@;'; put 'put ''LWNvbC00LC5jbHItY29sLTMsLmNsci1jb2wtMiwuY2xyLWNvbC0xe3dpZHRoOjEwMCU7bWluLWhlaWdodDouMDVyZW07cGFkZGluZy1yaWdodDp2YXIoLS1jbHItZ3JpZC1jb2x1bW4tcGFkZGluZyk7cGFkZGluZy1sZWZ0OnZhcigtLWNsci1ncmlkLWNvbHVtbi1wYWRkaW5nKX0uY2xyLWNv''@;'; put 'put ''bHtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCV9LmNsci1jb2wtYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRoOmF1dG87bWF4LXdpZHRoOm5vbmV9LmNsci1jb2wtMXtmbGV4OjAgMCA4LjMzMzMzMzMzMzMlO21heC13aWR0aDo4LjMzMzMzMzMzMzMlfS5jbHItY29sLTJ7''@;'; put 'put ''ZmxleDowIDAgMTYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjE2LjY2NjY2NjY2NjclfS5jbHItY29sLTN7ZmxleDowIDAgMjUlO21heC13aWR0aDoyNSV9LmNsci1jb2wtNHtmbGV4OjAgMCAzMy4zMzMzMzMzMzMzJTttYXgtd2lkdGg6MzMuMzMzMzMzMzMzMyV9LmNsci1jb2wtNXtmbGV4OjAg''@;'; put 'put ''MCA0MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY2NjY2NyV9LmNsci1jb2wtNntmbGV4OjAgMCA1MCU7bWF4LXdpZHRoOjUwJX0uY2xyLWNvbC03e2ZsZXg6MCAwIDU4LjMzMzMzMzMzMzMlO21heC13aWR0aDo1OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC04e2ZsZXg6MCAwIDY2LjY2''@;'; put 'put ''NjY2NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjY2NjY3JX0uY2xyLWNvbC05e2ZsZXg6MCAwIDc1JTttYXgtd2lkdGg6NzUlfS5jbHItY29sLTEwe2ZsZXg6MCAwIDgzLjMzMzMzMzMzMzMlO21heC13aWR0aDo4My4zMzMzMzMzMzMzJX0uY2xyLWNvbC0xMXtmbGV4OjAgMCA5MS42NjY2NjY2''@;'; put 'put ''NjY3JTttYXgtd2lkdGg6OTEuNjY2NjY2NjY2NyV9LmNsci1jb2wtMTJ7ZmxleDowIDAgMTAwJTttYXgtd2lkdGg6MTAwJX0uY2xyLW9yZGVyLWZpcnN0e29yZGVyOi0xfS5jbHItb3JkZXItbGFzdHtvcmRlcjoxM30uY2xyLW9yZGVyLTB7b3JkZXI6MH0uY2xyLW9yZGVyLTF7b3JkZXI6MX0u''@;'; put 'put ''Y2xyLW9yZGVyLTJ7b3JkZXI6Mn0uY2xyLW9yZGVyLTN7b3JkZXI6M30uY2xyLW9yZGVyLTR7b3JkZXI6NH0uY2xyLW9yZGVyLTV7b3JkZXI6NX0uY2xyLW9yZGVyLTZ7b3JkZXI6Nn0uY2xyLW9yZGVyLTd7b3JkZXI6N30uY2xyLW9yZGVyLTh7b3JkZXI6OH0uY2xyLW9yZGVyLTl7b3JkZXI6''@;'; put 'put ''OX0uY2xyLW9yZGVyLTEwe29yZGVyOjEwfS5jbHItb3JkZXItMTF7b3JkZXI6MTF9LmNsci1vcmRlci0xMntvcmRlcjoxMn0uY2xyLW9mZnNldC0xe21hcmdpbi1sZWZ0OjguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC0z''@;'; put 'put ''e21hcmdpbi1sZWZ0OjI1JX0uY2xyLW9mZnNldC00e21hcmdpbi1sZWZ0OjMzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LTV7bWFyZ2luLWxlZnQ6NDEuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtNnttYXJnaW4tbGVmdDo1MCV9LmNsci1vZmZzZXQtN3ttYXJnaW4tbGVmdDo1OC4zMzMzMzMz''@;'; put 'put ''MzMzJX0uY2xyLW9mZnNldC04e21hcmdpbi1sZWZ0OjY2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LTl7bWFyZ2luLWxlZnQ6NzUlfS5jbHItb2Zmc2V0LTEwe21hcmdpbi1sZWZ0OjgzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LTExe21hcmdpbi1sZWZ0OjkxLjY2NjY2NjY2NjclfUBtZWRp''@;'; put 'put ''YShtaW4td2lkdGg6NTc2cHgpey5jbHItY29sLXNte2ZsZXgtYmFzaXM6MDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJX0uY2xyLWNvbC1zbS1hdXRve2ZsZXg6MCAwIGF1dG87d2lkdGg6YXV0bzttYXgtd2lkdGg6bm9uZX0uY2xyLWNvbC1zbS0xe2ZsZXg6MCAwIDguMzMzMzMzMzMzMyU7''@;'; put 'put ''bWF4LXdpZHRoOjguMzMzMzMzMzMzMyV9LmNsci1jb2wtc20tMntmbGV4OjAgMCAxNi42NjY2NjY2NjY3JTttYXgtd2lkdGg6MTYuNjY2NjY2NjY2NyV9LmNsci1jb2wtc20tM3tmbGV4OjAgMCAyNSU7bWF4LXdpZHRoOjI1JX0uY2xyLWNvbC1zbS00e2ZsZXg6MCAwIDMzLjMzMzMzMzMzMzMl''@;'; put 'put ''O21heC13aWR0aDozMy4zMzMzMzMzMzMzJX0uY2xyLWNvbC1zbS01e2ZsZXg6MCAwIDQxLjY2NjY2NjY2NjclO21heC13aWR0aDo0MS42NjY2NjY2NjY3JX0uY2xyLWNvbC1zbS02e2ZsZXg6MCAwIDUwJTttYXgtd2lkdGg6NTAlfS5jbHItY29sLXNtLTd7ZmxleDowIDAgNTguMzMzMzMzMzMz''@;'; put 'put ''MyU7bWF4LXdpZHRoOjU4LjMzMzMzMzMzMzMlfS5jbHItY29sLXNtLTh7ZmxleDowIDAgNjYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjY2LjY2NjY2NjY2NjclfS5jbHItY29sLXNtLTl7ZmxleDowIDAgNzUlO21heC13aWR0aDo3NSV9LmNsci1jb2wtc20tMTB7ZmxleDowIDAgODMuMzMzMzMz''@;'; put 'put ''MzMzMyU7bWF4LXdpZHRoOjgzLjMzMzMzMzMzMzMlfS5jbHItY29sLXNtLTExe2ZsZXg6MCAwIDkxLjY2NjY2NjY2NjclO21heC13aWR0aDo5MS42NjY2NjY2NjY3JX0uY2xyLWNvbC1zbS0xMntmbGV4OjAgMCAxMDAlO21heC13aWR0aDoxMDAlfS5jbHItb3JkZXItc20tZmlyc3R7b3JkZXI6''@;'; put 'put ''LTF9LmNsci1vcmRlci1zbS1sYXN0e29yZGVyOjEzfS5jbHItb3JkZXItc20tMHtvcmRlcjowfS5jbHItb3JkZXItc20tMXtvcmRlcjoxfS5jbHItb3JkZXItc20tMntvcmRlcjoyfS5jbHItb3JkZXItc20tM3tvcmRlcjozfS5jbHItb3JkZXItc20tNHtvcmRlcjo0fS5jbHItb3JkZXItc20t''@;'; put 'put ''NXtvcmRlcjo1fS5jbHItb3JkZXItc20tNntvcmRlcjo2fS5jbHItb3JkZXItc20tN3tvcmRlcjo3fS5jbHItb3JkZXItc20tOHtvcmRlcjo4fS5jbHItb3JkZXItc20tOXtvcmRlcjo5fS5jbHItb3JkZXItc20tMTB7b3JkZXI6MTB9LmNsci1vcmRlci1zbS0xMXtvcmRlcjoxMX0uY2xyLW9y''@;'; put 'put ''ZGVyLXNtLTEye29yZGVyOjEyfS5jbHItb2Zmc2V0LXNtLTB7bWFyZ2luLWxlZnQ6MH0uY2xyLW9mZnNldC1zbS0xe21hcmdpbi1sZWZ0OjguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtc20tMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1zbS0ze21hcmdpbi1sZWZ0''@;'; put 'put ''OjI1JX0uY2xyLW9mZnNldC1zbS00e21hcmdpbi1sZWZ0OjMzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXNtLTV7bWFyZ2luLWxlZnQ6NDEuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtc20tNnttYXJnaW4tbGVmdDo1MCV9LmNsci1vZmZzZXQtc20tN3ttYXJnaW4tbGVmdDo1OC4zMzMzMzMz''@;'; put 'put ''MzMzJX0uY2xyLW9mZnNldC1zbS04e21hcmdpbi1sZWZ0OjY2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LXNtLTl7bWFyZ2luLWxlZnQ6NzUlfS5jbHItb2Zmc2V0LXNtLTEwe21hcmdpbi1sZWZ0OjgzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXNtLTExe21hcmdpbi1sZWZ0OjkxLjY2NjY2''@;'; put 'put ''NjY2NjclfX1AbWVkaWEobWluLXdpZHRoOjc2OHB4KXsuY2xyLWNvbC1tZHtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCV9LmNsci1jb2wtbWQtYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRoOmF1dG87bWF4LXdpZHRoOm5vbmV9LmNsci1jb2wtbWQtMXtmbGV4OjAgMCA4''@;'; put 'put ''LjMzMzMzMzMzMzMlO21heC13aWR0aDo4LjMzMzMzMzMzMzMlfS5jbHItY29sLW1kLTJ7ZmxleDowIDAgMTYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjE2LjY2NjY2NjY2NjclfS5jbHItY29sLW1kLTN7ZmxleDowIDAgMjUlO21heC13aWR0aDoyNSV9LmNsci1jb2wtbWQtNHtmbGV4OjAgMCAz''@;'; put 'put ''My4zMzMzMzMzMzMzJTttYXgtd2lkdGg6MzMuMzMzMzMzMzMzMyV9LmNsci1jb2wtbWQtNXtmbGV4OjAgMCA0MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY2NjY2NyV9LmNsci1jb2wtbWQtNntmbGV4OjAgMCA1MCU7bWF4LXdpZHRoOjUwJX0uY2xyLWNvbC1tZC03e2ZsZXg6MCAw''@;'; put 'put ''IDU4LjMzMzMzMzMzMzMlO21heC13aWR0aDo1OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC1tZC04e2ZsZXg6MCAwIDY2LjY2NjY2NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjY2NjY3JX0uY2xyLWNvbC1tZC05e2ZsZXg6MCAwIDc1JTttYXgtd2lkdGg6NzUlfS5jbHItY29sLW1kLTEwe2ZsZXg6''@;'; put 'put ''MCAwIDgzLjMzMzMzMzMzMzMlO21heC13aWR0aDo4My4zMzMzMzMzMzMzJX0uY2xyLWNvbC1tZC0xMXtmbGV4OjAgMCA5MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6OTEuNjY2NjY2NjY2NyV9LmNsci1jb2wtbWQtMTJ7ZmxleDowIDAgMTAwJTttYXgtd2lkdGg6MTAwJX0uY2xyLW9yZGVyLW1k''@;'; put 'put ''LWZpcnN0e29yZGVyOi0xfS5jbHItb3JkZXItbWQtbGFzdHtvcmRlcjoxM30uY2xyLW9yZGVyLW1kLTB7b3JkZXI6MH0uY2xyLW9yZGVyLW1kLTF7b3JkZXI6MX0uY2xyLW9yZGVyLW1kLTJ7b3JkZXI6Mn0uY2xyLW9yZGVyLW1kLTN7b3JkZXI6M30uY2xyLW9yZGVyLW1kLTR7b3JkZXI6NH0u''@;'; put 'put ''Y2xyLW9yZGVyLW1kLTV7b3JkZXI6NX0uY2xyLW9yZGVyLW1kLTZ7b3JkZXI6Nn0uY2xyLW9yZGVyLW1kLTd7b3JkZXI6N30uY2xyLW9yZGVyLW1kLTh7b3JkZXI6OH0uY2xyLW9yZGVyLW1kLTl7b3JkZXI6OX0uY2xyLW9yZGVyLW1kLTEwe29yZGVyOjEwfS5jbHItb3JkZXItbWQtMTF7b3Jk''@;'; put 'put ''ZXI6MTF9LmNsci1vcmRlci1tZC0xMntvcmRlcjoxMn0uY2xyLW9mZnNldC1tZC0we21hcmdpbi1sZWZ0OjB9LmNsci1vZmZzZXQtbWQtMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LW1kLTJ7bWFyZ2luLWxlZnQ6MTYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtbWQt''@;'; put 'put ''M3ttYXJnaW4tbGVmdDoyNSV9LmNsci1vZmZzZXQtbWQtNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1tZC01e21hcmdpbi1sZWZ0OjQxLjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LW1kLTZ7bWFyZ2luLWxlZnQ6NTAlfS5jbHItb2Zmc2V0LW1kLTd7bWFyZ2luLWxl''@;'; put 'put ''ZnQ6NTguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtbWQtOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1tZC05e21hcmdpbi1sZWZ0Ojc1JX0uY2xyLW9mZnNldC1tZC0xMHttYXJnaW4tbGVmdDo4My4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1tZC0xMXttYXJnaW4t''@;'; put 'put ''bGVmdDo5MS42NjY2NjY2NjY3JX19QG1lZGlhKG1pbi13aWR0aDo5OTJweCl7LmNsci1jb2wtbGd7ZmxleC1iYXNpczowO2ZsZXgtZ3JvdzoxO21heC13aWR0aDoxMDAlfS5jbHItY29sLWxnLWF1dG97ZmxleDowIDAgYXV0bzt3aWR0aDphdXRvO21heC13aWR0aDpub25lfS5jbHItY29sLWxn''@;'; put 'put ''LTF7ZmxleDowIDAgOC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC1sZy0ye2ZsZXg6MCAwIDE2LjY2NjY2NjY2NjclO21heC13aWR0aDoxNi42NjY2NjY2NjY3JX0uY2xyLWNvbC1sZy0ze2ZsZXg6MCAwIDI1JTttYXgtd2lkdGg6MjUlfS5jbHItY29sLWxn''@;'; put 'put ''LTR7ZmxleDowIDAgMzMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjMzLjMzMzMzMzMzMzMlfS5jbHItY29sLWxnLTV7ZmxleDowIDAgNDEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjQxLjY2NjY2NjY2NjclfS5jbHItY29sLWxnLTZ7ZmxleDowIDAgNTAlO21heC13aWR0aDo1MCV9LmNsci1jb2wt''@;'; put 'put ''bGctN3tmbGV4OjAgMCA1OC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6NTguMzMzMzMzMzMzMyV9LmNsci1jb2wtbGctOHtmbGV4OjAgMCA2Ni42NjY2NjY2NjY3JTttYXgtd2lkdGg6NjYuNjY2NjY2NjY2NyV9LmNsci1jb2wtbGctOXtmbGV4OjAgMCA3NSU7bWF4LXdpZHRoOjc1JX0uY2xyLWNv''@;'; put 'put ''bC1sZy0xMHtmbGV4OjAgMCA4My4zMzMzMzMzMzMzJTttYXgtd2lkdGg6ODMuMzMzMzMzMzMzMyV9LmNsci1jb2wtbGctMTF7ZmxleDowIDAgOTEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjkxLjY2NjY2NjY2NjclfS5jbHItY29sLWxnLTEye2ZsZXg6MCAwIDEwMCU7bWF4LXdpZHRoOjEwMCV9''@;'; put 'put ''LmNsci1vcmRlci1sZy1maXJzdHtvcmRlcjotMX0uY2xyLW9yZGVyLWxnLWxhc3R7b3JkZXI6MTN9LmNsci1vcmRlci1sZy0we29yZGVyOjB9LmNsci1vcmRlci1sZy0xe29yZGVyOjF9LmNsci1vcmRlci1sZy0ye29yZGVyOjJ9LmNsci1vcmRlci1sZy0ze29yZGVyOjN9LmNsci1vcmRlci1s''@;'; put 'put ''Zy00e29yZGVyOjR9LmNsci1vcmRlci1sZy01e29yZGVyOjV9LmNsci1vcmRlci1sZy02e29yZGVyOjZ9LmNsci1vcmRlci1sZy03e29yZGVyOjd9LmNsci1vcmRlci1sZy04e29yZGVyOjh9LmNsci1vcmRlci1sZy05e29yZGVyOjl9LmNsci1vcmRlci1sZy0xMHtvcmRlcjoxMH0uY2xyLW9y''@;'; put 'put ''ZGVyLWxnLTExe29yZGVyOjExfS5jbHItb3JkZXItbGctMTJ7b3JkZXI6MTJ9LmNsci1vZmZzZXQtbGctMHttYXJnaW4tbGVmdDowfS5jbHItb2Zmc2V0LWxnLTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1sZy0ye21hcmdpbi1sZWZ0OjE2LjY2NjY2NjY2NjclfS5j''@;'; put 'put ''bHItb2Zmc2V0LWxnLTN7bWFyZ2luLWxlZnQ6MjUlfS5jbHItb2Zmc2V0LWxnLTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtbGctNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1sZy02e21hcmdpbi1sZWZ0OjUwJX0uY2xyLW9mZnNldC1s''@;'; put 'put ''Zy03e21hcmdpbi1sZWZ0OjU4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LWxnLTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtbGctOXttYXJnaW4tbGVmdDo3NSV9LmNsci1vZmZzZXQtbGctMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQt''@;'; put 'put ''bGctMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2NjY2NyV9fUBtZWRpYShtaW4td2lkdGg6MTIwMHB4KXsuY2xyLWNvbC14bHtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCV9LmNsci1jb2wteGwtYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRoOmF1dG87bWF4LXdpZHRoOm5v''@;'; put 'put ''bmV9LmNsci1jb2wteGwtMXtmbGV4OjAgMCA4LjMzMzMzMzMzMzMlO21heC13aWR0aDo4LjMzMzMzMzMzMzMlfS5jbHItY29sLXhsLTJ7ZmxleDowIDAgMTYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjE2LjY2NjY2NjY2NjclfS5jbHItY29sLXhsLTN7ZmxleDowIDAgMjUlO21heC13aWR0aDoy''@;'; put 'put ''NSV9LmNsci1jb2wteGwtNHtmbGV4OjAgMCAzMy4zMzMzMzMzMzMzJTttYXgtd2lkdGg6MzMuMzMzMzMzMzMzMyV9LmNsci1jb2wteGwtNXtmbGV4OjAgMCA0MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY2NjY2NyV9LmNsci1jb2wteGwtNntmbGV4OjAgMCA1MCU7bWF4LXdpZHRo''@;'; put 'put ''OjUwJX0uY2xyLWNvbC14bC03e2ZsZXg6MCAwIDU4LjMzMzMzMzMzMzMlO21heC13aWR0aDo1OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC14bC04e2ZsZXg6MCAwIDY2LjY2NjY2NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjY2NjY3JX0uY2xyLWNvbC14bC05e2ZsZXg6MCAwIDc1JTttYXgtd2lk''@;'; put 'put ''dGg6NzUlfS5jbHItY29sLXhsLTEwe2ZsZXg6MCAwIDgzLjMzMzMzMzMzMzMlO21heC13aWR0aDo4My4zMzMzMzMzMzMzJX0uY2xyLWNvbC14bC0xMXtmbGV4OjAgMCA5MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6OTEuNjY2NjY2NjY2NyV9LmNsci1jb2wteGwtMTJ7ZmxleDowIDAgMTAwJTtt''@;'; put 'put ''YXgtd2lkdGg6MTAwJX0uY2xyLW9yZGVyLXhsLWZpcnN0e29yZGVyOi0xfS5jbHItb3JkZXIteGwtbGFzdHtvcmRlcjoxM30uY2xyLW9yZGVyLXhsLTB7b3JkZXI6MH0uY2xyLW9yZGVyLXhsLTF7b3JkZXI6MX0uY2xyLW9yZGVyLXhsLTJ7b3JkZXI6Mn0uY2xyLW9yZGVyLXhsLTN7b3JkZXI6''@;'; put 'put ''M30uY2xyLW9yZGVyLXhsLTR7b3JkZXI6NH0uY2xyLW9yZGVyLXhsLTV7b3JkZXI6NX0uY2xyLW9yZGVyLXhsLTZ7b3JkZXI6Nn0uY2xyLW9yZGVyLXhsLTd7b3JkZXI6N30uY2xyLW9yZGVyLXhsLTh7b3JkZXI6OH0uY2xyLW9yZGVyLXhsLTl7b3JkZXI6OX0uY2xyLW9yZGVyLXhsLTEwe29y''@;'; put 'put ''ZGVyOjEwfS5jbHItb3JkZXIteGwtMTF7b3JkZXI6MTF9LmNsci1vcmRlci14bC0xMntvcmRlcjoxMn0uY2xyLW9mZnNldC14bC0we21hcmdpbi1sZWZ0OjB9LmNsci1vZmZzZXQteGwtMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXhsLTJ7bWFyZ2luLWxlZnQ6MTYu''@;'; put 'put ''NjY2NjY2NjY2NyV9LmNsci1vZmZzZXQteGwtM3ttYXJnaW4tbGVmdDoyNSV9LmNsci1vZmZzZXQteGwtNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC14bC01e21hcmdpbi1sZWZ0OjQxLjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LXhsLTZ7bWFyZ2luLWxlZnQ6NTAl''@;'; put 'put ''fS5jbHItb2Zmc2V0LXhsLTd7bWFyZ2luLWxlZnQ6NTguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQteGwtOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC14bC05e21hcmdpbi1sZWZ0Ojc1JX0uY2xyLW9mZnNldC14bC0xMHttYXJnaW4tbGVmdDo4My4zMzMzMzMzMzMz''@;'; put 'put ''JX0uY2xyLW9mZnNldC14bC0xMXttYXJnaW4tbGVmdDo5MS42NjY2NjY2NjY3JX19LmNsci1icmVhay1yb3d7d2lkdGg6MTAwJX0qLDpiZWZvcmUsOmFmdGVye2JveC1zaXppbmc6Ym9yZGVyLWJveH11bC5saXN0LXVuc3R5bGVkOm5vdChbY2RzLWxpc3RdKXtwYWRkaW5nLWxlZnQ6MDttYXJn''@;'; put 'put ''aW4tbGVmdDowO2xpc3Qtc3R5bGUtcG9zaXRpb246b3V0c2lkZX11bC5saXN0LXVuc3R5bGVkOm5vdChbY2RzLWxpc3RdKSBsaTo6bWFya2Vye2NvbG9yOnRyYW5zcGFyZW50fWxpe2NvbG9yOnZhcigtLWNsci1saXN0LWl0ZW0tY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9dWw6bm90KFtjZHMtbGlzdF0pLG9sOm5vdChbY2RzLWxpc3RdKXtsaXN0LXN0eWxlLXBvc2l0aW9uOmluc2lkZTttYXJnaW4tbGVmdDowO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7cGFkZGluZy1sZWZ0OjB9dWwubGlz''@;'; put 'put ''dDpub3QoW2Nkcy1saXN0XSksb2wubGlzdDpub3QoW2Nkcy1saXN0XSl7bGlzdC1zdHlsZS1wb3NpdGlvbjpvdXRzaWRlO21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9dWwubGlzdDpub3QoW2Nkcy1saXN0XSkuY29tcGFjdD5saSxvbC5saXN0Om5vdChbY2RzLWxpc3Rd''@;'; put 'put ''KS5jb21wYWN0Pmxpe21hcmdpbi1ib3R0b206MH11bDpub3QoLmxpc3QtdW5zdHlsZWQpOm5vdChbY2RzLWxpc3RdKT5saT51bC5saXN0LXVuc3R5bGVkLG9sOm5vdChbY2RzLWxpc3RdKT5saT51bC5saXN0LXVuc3R5bGVke21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9''@;'; put 'put ''bGk+dWw6bm90KFtjZHMtbGlzdF0pe21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfXVsLmxpc3QtZ3JvdXA6bm90KFtjZHMtbGlzdF0pe21hcmdpbi10b3A6MH11bDpub3QoW2Nkcy1saXN0XSkubGlzdC1zcGFjZXIsb2w6bm90KFtjZHMtbGlzdF0p''@;'; put 'put ''Lmxpc3Qtc3BhY2Vye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX1wcmV7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgMH1wcmV7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1jb250YWluZXItYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfXByZSBjb2Rle3doaXRlLXNwYWNlOnByZX1jb2RlLmNsci1jb2Rle2NvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LXJlZCk7cGFkZGlu''@;'; put 'put ''ZzowO2JhY2tncm91bmQ6MCAwfWgxOm5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1oMS1mb250LWZhbWlseSk7Y29sb3I6dmFyKC0tY2xyLWgxLWNvbG9yKTtmb250LXNpemU6''@;'; put 'put ''dmFyKC0tY2xyLWgxLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWgxLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItaDEtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1oMS1sZXR0ZXItc3BhY2luZyl9aDI6bm90KFtjZHMtdGV4dF0pe21h''@;'; put 'put ''cmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWgyLWZvbnQtZmFtaWx5KTtjb2xvcjp2YXIoLS1jbHItaDItY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItaDItZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIo''@;'; put 'put ''LS1jbHItaDItZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1oMi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLWgyLWxldHRlci1zcGFjaW5nKX1oMzpub3QoW2Nkcy10ZXh0XSl7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdp''@;'; put 'put ''bi1ib3R0b206MDtmb250LWZhbWlseTp2YXIoLS1jbHItaDMtZm9udC1mYW1pbHkpO2NvbG9yOnZhcigtLWNsci1oMy1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1oMy1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oMy1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2xyLWgzLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItaDMtbGV0dGVyLXNwYWNpbmcpfWg0Om5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1oNC1mb250''@;'; put 'put ''LWZhbWlseSk7Y29sb3I6dmFyKC0tY2xyLWg0LWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2xyLWg0LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWg0LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItaDQtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigt''@;'; put 'put ''LWNsci1oNC1sZXR0ZXItc3BhY2luZyl9aDU6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWg1LWZvbnQtZmFtaWx5KTtjb2xvcjp2YXIoLS1jbHItaDUtY29sb3IpO2ZvbnQt''@;'; put 'put ''c2l6ZTp2YXIoLS1jbHItaDUtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItaDUtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1oNS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLWg1LWxldHRlci1zcGFjaW5nKX1oNjpub3QoW2Nkcy10ZXh0''@;'; put 'put ''XSl7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbi1ib3R0b206MDtmb250LWZhbWlseTp2YXIoLS1jbHItaDYtZm9udC1mYW1pbHkpO2NvbG9yOnZhcigtLWNsci1oNi1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1oNi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0''@;'; put 'put ''OnZhcigtLWNsci1oNi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLWg2LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItaDYtbGV0dGVyLXNwYWNpbmcpfWJvZHk6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRv''@;'; put 'put ''bTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIoLS1jbHItcDEtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDEtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItcDEtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1wMS1saW5lLWhlaWdo''@;'; put 'put ''dCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXAxLWxldHRlci1zcGFjaW5nKX1ib2R5IHA6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1wMS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wMS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAxLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDEtbGV0dGVyLXNwYWNpbmcp''@;'; put 'put ''fWJvZHkgLnAwOm5vdChbY2RzLXRleHRdKSxib2R5IHAucDA6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wMC1jb2xvcik7Zm9udC1z''@;'; put 'put ''aXplOnZhcigtLWNsci1wMC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAwLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDAtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnAyOm5vdChbY2Rz''@;'; put 'put ''LXRleHRdKSxib2R5IHAucDI6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wMi1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wMi1m''@;'; put 'put ''b250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAyLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDItbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnAzOm5vdChbY2RzLXRleHRdKSxib2R5IHAucDM6''@;'; put 'put ''bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wMy1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wMy1mb250LXNpemUpO2ZvbnQtd2Vp''@;'; put 'put ''Z2h0OnZhcigtLWNsci1wMy1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAzLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDMtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA0Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDQ6bm90KFtjZHMtdGV4dF0pe21h''@;'; put 'put ''cmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wNC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNC1m''@;'; put 'put ''b250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA0LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDQtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA1Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDU6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wNS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNS1mb250LXdlaWdodCk7bGluZS1o''@;'; put 'put ''ZWlnaHQ6dmFyKC0tY2xyLXA1LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDUtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA2Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDY6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtt''@;'; put 'put ''YXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wNi1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA2''@;'; put 'put ''LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDYtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA3Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDc6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9u''@;'; put 'put ''dC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wNy1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNy1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNy1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA3LWxpbmUtaGVpZ2h0KTtsZXR0''@;'; put 'put ''ZXItc3BhY2luZzp2YXIoLS1jbHItcDctbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA4Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDg6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xy''@;'; put 'put ''LWZvbnQpO2NvbG9yOnZhcigtLWNsci1wOC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wOC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wOC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA4LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1j''@;'; put 'put ''bHItcDgtbGV0dGVyLXNwYWNpbmcpfS50ZXh0LWxpZ2h0e2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1mb250LXdlaWdodC1saWdodCl9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH0udGV4dC1sZWZ0''@;'; put 'put ''e3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9LnRleHQtanVzdGlmeXt0ZXh0LWFsaWduOmp1c3RpZnkhaW1wb3J0YW50fWh0bWw6bm90KFtjZHMtdGV4dF0pe2NvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2Zv''@;'; put 'put ''bnQtc2l6ZTpjYWxjKHZhcigtLWNkcy1nbG9iYWwtYmFzZSkvMTYqMTAwJSl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItbGluay1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvcik7LS1jbHItbGluay1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1saW5rLWNvbG9yKTstLWNsci1saW5rLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItaG92ZXIpOy0tY2xyLWxpbmstdmlzaXRlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQpOy0tY2xyLWxp''@;'; put 'put ''bmstdmlzaXRlZC1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXIpfWh0bWx7Ym94LXNpemluZzpib3JkZXItYm94fSosOmJlZm9yZSw6YWZ0ZXJ7Ym94LXNpemluZzppbmhlcml0fWh0bWx7LW1zLW92ZXJmbG93LXN0eWxlOnNj''@;'; put 'put ''cm9sbGJhcjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9aW1ne3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1bcm9sZT1idXR0b25de2N1cnNvcjpwb2ludGVyfWEsYXJlYSxidXR0b24sW3JvbGU9YnV0dG9uXSxpbnB1dCxsYWJlbCxzZWxlY3Qsc3VtbWFyeSx0ZXh0YXJl''@;'; put 'put ''YXt0b3VjaC1hY3Rpb246bWFuaXB1bGF0aW9ufWlucHV0LGJ1dHRvbixzZWxlY3QsdGV4dGFyZWF7Ym9yZGVyLXJhZGl1czowfWlucHV0W3R5cGU9cmFkaW9dOmRpc2FibGVkLGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH1pbnB1dFt0eXBlPWRhdGVd''@;'; put 'put ''LGlucHV0W3R5cGU9dGltZV0saW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF0saW5wdXRbdHlwZT1tb250aF17LXdlYmtpdC1hcHBlYXJhbmNlOmxpc3Rib3h9dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfWZpZWxkc2V0e21pbi13aWR0aDowO3BhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MH1s''@;'; put 'put ''ZWdlbmR7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO3BhZGRpbmc6MDtsaW5lLWhlaWdodDppbmhlcml0fWlucHV0W3R5cGU9c2VhcmNoXXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX1baGlkZGVuXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fWRse21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9w''@;'; put 'put ''OjFyZW19dGFibGV7Ym9yZGVyLXNwYWNpbmc6MH0uY2xyLXNyLW9ubHl7cG9zaXRpb246YWJzb2x1dGU7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmluc2V0KDUwJSk7cGFkZGluZzowO2JvcmRlcjowO2hlaWdodDoxcHg7d2lkdGg6MXB4O292ZXJmbG93OmhpZGRlbjt3''@;'; put 'put ''aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowfS5hbGVydC1pY29uLC5jbHItaWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3BhZGRpbmc6MDtiYWNrZ3JvdW5kLXJlcGVh''@;'; put 'put ''dDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47dmVydGljYWwtYWxpZ246bWlkZGxlfS5hbGVydC1pY29uLmNsci1pY29uLXdhcm5pbmcsLmFsZXJ0LWljb24uaWNvbi13YXJuaW5nLC5jbHItaWNvbi5jbHItaWNvbi13YXJuaW5nLC5jbHItaWNvbi5pY29uLXdhcm5pbmd7YmFj''@;'; put 'put ''a2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTIwdmlld0JveCUzRCUyMjUlMjA1JTIwMjYlMjAyNiUyMiUyMHByZXNlcnZlQXNwZWN0UmF0aW8lM0QlMjJ4TWlkWU1pZCUyMG1lZXQlMjIlMjB4bWxu''@;'; put 'put ''cyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHhtbG5zJTNBeGxpbmslM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUyMiUzRSUzQ2RlZnMlM0UlM0NzdHlsZSUyMHR5cGUlM0QlMjJ0ZXh0JTJGY3NzJTIyJTNFJTBBJTA5''@;'; put 'put ''LmNsci1pLW91dGxpbmUlN0JmaWxsLXJ1bGUlM0FldmVub2RkJTNCY2xpcC1ydWxlJTNBZXZlbm9kZCUzQmZpbGwlM0ElMjM3NDc0NzQlM0IlN0QlM0MlMkZzdHlsZSUzRSUzQyUyRmRlZnMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0N0''@;'; put 'put ''aXRsZSUzRWV4Y2xhbWF0aW9uLXRyaWFuZ2xlLWxpbmUlM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMSUyMiUyMGQlM0Ql''@;'; put 'put ''MjJNMTglMkMyMS4zMmExLjMlMkMxLjMlMkMwJTJDMCUyQzAlMkMxLjMtMS4zVjE0YTEuMyUyQzEuMyUyQzAlMkMxJTJDMC0yLjYlMkMwdjZBMS4zJTJDMS4zJTJDMCUyQzAlMkMwJTJDMTglMkMyMS4zMlolMjIlM0UlM0MlMkZwYXRoJTNFJTNDY2lyY2xlJTIwY2xhc3MlM0QlMjJjbHItaS1v''@;'; put 'put ''dXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTIlMjIlMjBjeCUzRCUyMjE3Ljk1JTIyJTIwY3klM0QlMjIyNC4yNyUyMiUyMHIlM0QlMjIxLjUlMjIlM0UlM0MlMkZjaXJjbGUlM0UlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTMlMjIl''@;'; put 'put ''MjBkJTNEJTIyTTMwLjMzJTJDMjUuNTQlMkMyMC41OSUyQzcuNmEzJTJDMyUyQzAlMkMwJTJDMC01LjI3JTJDMEw1LjU3JTJDMjUuNTRBMyUyQzMlMkMwJTJDMCUyQzAlMkM4LjIxJTJDMzBIMjcuNjlhMyUyQzMlMkMwJTJDMCUyQzAlMkMyLjY0LTQuNDNabS0xLjc4JTJDMS45NGExJTJDMSUy''@;'; put 'put ''QzAlMkMwJTJDMS0uODYuNDlIOC4yMWExJTJDMSUyQzAlMkMwJTJDMS0uODgtMS40OEwxNy4wNyUyQzguNTVhMSUyQzElMkMwJTJDMCUyQzElMkMxLjc2JTJDMGw5Ljc0JTJDMTcuOTRBMSUyQzElMkMwJTJDMCUyQzElMkMyOC41NSUyQzI3LjQ4WiUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZzdmclM0UpfS5hbGVydC1pY29uLmNsci1pY29uLXdhcm5pbmctd2hpdGUsLmNsci1pY29uLmNsci1pY29uLXdhcm5pbmctd2hpdGV7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0''@;'; put 'put ''ZjgsJTNDc3ZnJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHZpZXdCb3glM0QlMjI1JTIwNSUyMDI2JTIwMjYlMjIlMjBwcmVzZXJ2ZUFzcGVjdFJhdGlvJTNEJTIyeE1pZFlNaWQlMjBtZWV0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIl''@;'; put 'put ''MjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmslMjIlM0UlM0NkZWZzJTNFJTNDc3R5bGUlMjB0eXBlJTNEJTIydGV4dCUyRmNzcyUyMiUzRSUwQSUwOS5jbHItaS1vdXRsaW5lJTdCZmlsbC1ydWxlJTNBZXZlbm9kZCUzQmNsaXAtcnVs''@;'; put 'put ''ZSUzQWV2ZW5vZGQlM0JmaWxsJTNBaHNsKDE5OCwgMCUsIDEwMCUpJTNCJTdEJTNDJTJGc3R5bGUlM0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VleGNsYW1hdGlvbi10cmlhbmdsZS1saW5lJTNDJTJG''@;'; put 'put ''dGl0bGUlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTElMjIlMjBkJTNEJTIyTTE4JTJDMjEuMzJhMS4zJTJDMS4zJTJDMCUyQzAlMkMwJTJD''@;'; put 'put ''MS4zLTEuM1YxNGExLjMlMkMxLjMlMkMwJTJDMSUyQzAtMi42JTJDMHY2QTEuMyUyQzEuMyUyQzAlMkMwJTJDMCUyQzE4JTJDMjEuMzJaJTIyJTNFJTNDJTJGcGF0aCUzRSUzQ2NpcmNsZSUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0yJTIyJTIwY3gl''@;'; put 'put ''M0QlMjIxNy45NSUyMiUyMGN5JTNEJTIyMjQuMjclMjIlMjByJTNEJTIyMS41JTIyJTNFJTNDJTJGY2lyY2xlJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0zJTIyJTIwZCUzRCUyMk0zMC4zMyUyQzI1LjU0JTJDMjAuNTklMkM3LjZh''@;'; put 'put ''MyUyQzMlMkMwJTJDMCUyQzAtNS4yNyUyQzBMNS41NyUyQzI1LjU0QTMlMkMzJTJDMCUyQzAlMkMwJTJDOC4yMSUyQzMwSDI3LjY5YTMlMkMzJTJDMCUyQzAlMkMwJTJDMi42NC00LjQzWm0tMS43OCUyQzEuOTRhMSUyQzElMkMwJTJDMCUyQzEtLjg2LjQ5SDguMjFhMSUyQzElMkMwJTJDMCUy''@;'; put 'put ''QzEtLjg4LTEuNDhMMTcuMDclMkM4LjU1YTElMkMxJTJDMCUyQzAlMkMxJTJDMS43NiUyQzBsOS43NCUyQzE3Ljk0QTElMkMxJTJDMCUyQzAlMkMxJTJDMjguNTUlMkMyNy40OFolMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJG''@;'; put 'put ''c3ZnJTNFIil9LmFsZXJ0LWljb24uY2xyLXZtdy1sb2dvLC5jbHItaWNvbi5jbHItdm13LWxvZ297YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMzYlMjAzNiUyMiUyMHZlcnNpb24lM0Ql''@;'; put 'put ''MjIxLjElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHhtbG5zJTNBeGxpbmslM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3RpdGxlJTNFdm0lMjBidWclM0Ml''@;'; put 'put ''MkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RlZnMlM0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDZyUyMGlkJTNEJTIySGVhZGVycyUyMiUyMHN0cm9rZSUzRCUyMm5vbmUlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIxJTIyJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBmaWxsLXJ1''@;'; put 'put ''bGUlM0QlMjJldmVub2RkJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZyUyMGlkJTNEJTIyQ0wtSGVhZGVycy1TcGVjcyUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSgtMjYyLjAwMDAwMCUyQyUyMC0xNzUuMDAwMDAwKSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBpZCUzRCUyMjAxJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlKDIzOC4wMDAwMDAlMkMlMjAxNjMuMDAwMDAwKSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBpZCUzRCUy''@;'; put 'put ''MnZtLWJ1ZyUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSgyNC43MDMxMjUlMkMlMjAxMi4wMDAwMDApJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGlkJTNEJTIyUmVjdGFuZ2xlLTQyJTIy''@;'; put 'put ''JTIwZmlsbC1vcGFjaXR5JTNEJTIyMC4yNSUyMiUyMGZpbGwlM0QlMjIlMjNEREREREQlMjIlMjBvcGFjaXR5JTNEJTIyMC42JTIyJTIweCUzRCUyMjAlMjIlMjB5JTNEJTIyMCUyMiUyMHdpZHRoJTNEJTIyMzYlMjIlMjBoZWlnaHQlM0QlMjIzNiUyMiUyMHJ4JTNEJTIyMyUyMiUzRSUzQyUy''@;'; put 'put ''RnJlY3QlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk03LjYzOTQ4Mzc2JTJDMTMuODc2MjQwMiUyMEM3LjMyMjY1MzI0JTJDMTMuMjA5NzA4MiUyMDYuNTM5NzgxNTIlMkMxMi45MDg1MTM5''@;'; put 'put ''JTIwNS44MDkyMzA0MiUyQzEzLjIxOTkzNCUyMEM1LjA3NzcxMDQzJTJDMTMuNTMyMjgzNyUyMDQuODA5MzI0OTUlMkMxNC4zMTAzNjkxJTIwNS4xMzk3MjAwNyUyQzE0Ljk3NjkwMTElMjBMOC4yMDcyNTk1NCUyQzIxLjM3NDQ5MjMlMjBDOC42ODk3NzIwNyUyQzIyLjM3ODQ3MzUlMjA5LjE5''@;'; put 'put ''ODQ0NDkxJTJDMjIuOTAzNzA0NCUyMDEwLjE1MjgxMjElMkMyMi45MDM3MDQ0JTIwQzExLjE3MjA5NTUlMkMyMi45MDM3MDQ0JTIwMTEuNjE2ODIwOSUyQzIyLjMzMTA2MzMlMjAxMi4wOTgzNjQ2JTJDMjEuMzc0NDkyMyUyMEMxMi4wOTgzNjQ2JTJDMjEuMzc0NDkyMyUyMDE0Ljc3NDQ2ODIl''@;'; put 'put ''MkMxNS43ODQ3MzQxJTIwMTQuODAxNTk3NCUyQzE1LjcyNjE2ODUlMjBDMTQuODI4NzI2NiUyQzE1LjY2NjY3MzMlMjAxNC45MTQ5NTg4JTJDMTUuNDg2MzI4NiUyMDE1LjE4NzIxOTklMkMxNS40ODcyNTgyJTIwQzE1LjQxNzgxODIlMkMxNS40OTAwNDclMjAxNS42MTA2Mjk0JTJDMTUuNjY1''@;'; put 'put ''NzQzNyUyMDE1LjYxMDYyOTQlMkMxNS45MDE4NjUyJTIwTDE1LjYxMDYyOTQlMkMyMS4zNjk4NDQzJTIwQzE1LjYxMDYyOTQlMkMyMi4yMTIwNzMlMjAxNi4wOTc5ODY1JTJDMjIuOTAzNzA0NCUyMDE3LjAzNDkxMzQlMkMyMi45MDM3MDQ0JTIwQzE3Ljk3MTg0MDMlMkMyMi45MDM3MDQ0JTIw''@;'; put 'put ''MTguNDc4NTc1NCUyQzIyLjIxMjA3MyUyMDE4LjQ3ODU3NTQlMkMyMS4zNjk4NDQzJTIwTDE4LjQ3ODU3NTQlMkMxNi44OTY1NTAzJTIwQzE4LjQ3ODU3NTQlMkMxNi4wMzM4NzAyJTIwMTkuMTIxOTI1NCUyQzE1LjQ3NDI0MzYlMjAyMC4wMDA3MTgzJTJDMTUuNDc0MjQzNiUyMEMyMC44Nzg1''@;'; put 'put ''NDIzJTJDMTUuNDc0MjQzNiUyMDIxLjQ2Mzc1ODMlMkMxNi4wNTI0NjI0JTIwMjEuNDYzNzU4MyUyQzE2Ljg5NjU1MDMlMjBMMjEuNDYzNzU4MyUyQzIxLjM2OTg0NDMlMjBDMjEuNDYzNzU4MyUyQzIyLjIxMjA3MyUyMDIxLjk1MjA4NDIlMkMyMi45MDM3MDQ0JTIwMjIuODg4MDQyMyUyQzIy''@;'; put 'put ''LjkwMzcwNDQlMjBDMjMuODI0MDAwMyUyQzIyLjkwMzcwNDQlMjAyNC4zMzI2NzMxJTJDMjIuMjEyMDczJTIwMjQuMzMyNjczMSUyQzIxLjM2OTg0NDMlMjBMMjQuMzMyNjczMSUyQzE2Ljg5NjU1MDMlMjBDMjQuMzMyNjczMSUyQzE2LjAzMzg3MDIlMjAyNC45NzUwNTQzJTJDMTUuNDc0MjQz''@;'; put 'put ''NiUyMDI1Ljg1Mzg0NzIlMkMxNS40NzQyNDM2JTIwQzI2LjczMDcwMjMlMkMxNS40NzQyNDM2JTIwMjcuMzE2ODg3MSUyQzE2LjA1MjQ2MjQlMjAyNy4zMTY4ODcxJTJDMTYuODk2NTUwMyUyMEwyNy4zMTY4ODcxJTJDMjEuMzY5ODQ0MyUyMEMyNy4zMTY4ODcxJTJDMjIuMjEyMDczJTIwMjcu''@;'; put 'put ''ODA1MjEzMSUyQzIyLjkwMzcwNDQlMjAyOC43NDIxNCUyQzIyLjkwMzcwNDQlMjBDMjkuNjc3MTI5MSUyQzIyLjkwMzcwNDQlMjAzMC4xODQ4MzMxJTJDMjIuMjEyMDczJTIwMzAuMTg0ODMzMSUyQzIxLjM2OTg0NDMlMjBMMzAuMTg0ODMzMSUyQzE2LjI3ODM1ODIlMjBDMzAuMTg0ODMzMSUy''@;'; put 'put ''QzE0LjQwNzA0ODglMjAyOC42MTgxMjA3JTJDMTMuMDk2Mjk1NiUyMDI2LjczMDcwMjMlMkMxMy4wOTYyOTU2JTIwQzI0Ljg0NTIyMTYlMkMxMy4wOTYyOTU2JTIwMjMuNjY1MTAwNiUyQzE0LjM0NzU1MzYlMjAyMy42NjUxMDA2JTJDMTQuMzQ3NTUzNiUyMEMyMy4wMzcyNTMlMkMxMy41NjY2''@;'; put 'put ''NzkzJTIwMjIuMTcyMDI0NyUyQzEzLjA5NzIyNTIlMjAyMC43MDg5ODQ3JTJDMTMuMDk3MjI1MiUyMEMxOS4xNjQ1NTclMkMxMy4wOTcyMjUyJTIwMTcuODEyOTQwNiUyQzE0LjM0NzU1MzYlMjAxNy44MTI5NDA2JTJDMTQuMzQ3NTUzNiUyMEMxNy4xODQxMjQxJTJDMTMuNTY2Njc5MyUyMDE2''@;'; put 'put ''LjExNTQyNjclMkMxMy4wOTcyMjUyJTIwMTUuMjMwODIwNCUyQzEzLjA5NzIyNTIlMjBDMTMuODYxNzYzOCUyQzEzLjA5NzIyNTIlMjAxMi43NzQ2NTcyJTJDMTMuNjc1NDQ0JTIwMTIuMTExOTI5MiUyQzE1LjEzMDI4NzElMjBMMTAuMTUyODEyMSUyQzE5LjU2MDgxODklMjBMNy42Mzk0ODM3''@;'; put 'put ''NiUyQzEzLjg3NjI0MDIlMjIlMjBpZCUzRCUyMkZpbGwtNCUyMiUyMGZpbGwlM0QlMjIlMjNGRkZGRkYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZnJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUzQyUyRnN2ZyUzRSIpfS5pcy1vZmYtc2NyZWVue3Bvc2l0aW9uOmZpeGVkIWltcG9ydGFudDtib3JkZXI6MCFpbXBvcnRhbnQ7aGVp''@;'; put 'put ''Z2h0OjFweCFpbXBvcnRhbnQ7d2lkdGg6MXB4IWltcG9ydGFudDtsZWZ0OjAhaW1wb3J0YW50O3RvcDouMDVyZW0haW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjAgMCAuMDVy''@;'; put 'put ''ZW0haW1wb3J0YW50fS5jbHItcG9wb3Zlci1jb250ZW50e3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTA1MH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1idG4tdmVydGljYWwtbWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7LS1jbHItYnRuLWhvcml6b250YWwtbWFyZ2luOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItYnRuLWhvcml6b250YWwtcGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLWJ0bi12ZXJ0aWNhbC1wYWRkaW5nOjA7LS1jbHItYnRuLXBhZGRpbmc6dmFyKC0tY2xyLWJ0bi12ZXJ0aWNhbC1wYWRkaW5nKSB2YXIoLS1jbHIt''@;'; put 'put ''YnRuLWhvcml6b250YWwtcGFkZGluZyk7LS1jbHItYnRuLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTstLWNsci1idG4taGVpZ2h0LXNtOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHItYnRuLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3Jk''@;'; put 'put ''ZXItcmFkaXVzLTEwMCk7LS1jbHItYnRuLWJvcmRlci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpOy0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodDp2YXIoLS1jbHItYnRuLWhlaWdodC1zbSk7LS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtcGFkZGluZzow''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItYnRuLWFwcGVhcmFuY2UtZm9ybS1oZWlnaHQ6dmFyKC0tY2xyLWJ0bi1oZWlnaHQpOy0tY2xyLWJ0bi1hcHBlYXJh''@;'; put 'put ''bmNlLWZvcm0tcGFkZGluZzp2YXIoLS1jbHItYnRuLXBhZGRpbmcpOy0tY2xyLWJ0bi1ncm91cC1mb2N1cy1vdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSk7LS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3Qtb3BhY2l0eS0wKTstLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1kZWZhdWx0LWJvcmRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLWRlZmF1bHQtY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLXNlY29uZGFy''@;'; put 'put ''eS1ob3Zlcik7LS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaW5mby1ob3Zlcik7LS1jbHItYnRuLWRlZmF1bHQtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtYWN0aXZlLWJn''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVs''@;'; put 'put ''dC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0t''@;'; put 'put ''Y2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhv''@;'; put 'put ''dmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1ob3Zlcik7LS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0''@;'; put 'put ''aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtYmct''@;'; put 'put ''Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRs''@;'; put 'put ''aW5lLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2Vjb25k''@;'; put 'put ''YXJ5LWhvdmVyKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWluZm8taG92ZXIpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWNvbG9yKTst''@;'; put 'put ''LWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1kZWZh''@;'; put 'put ''dWx0LW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1kZWZh''@;'; put 'put ''dWx0LW91dGxpbmUtY2hlY2tlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXByaW1hcnkt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tcHJpbWFyeS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1wcmltYXJ5LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xy''@;'; put 'put ''LWJ0bi1wcmltYXJ5LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1ob3Zlcik7LS1jbHItYnRuLXByaW1hcnktaG92ZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNvbG9yKTstLWNsci1idG4tcHJpbWFyeS1hY3RpdmUtY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tcHJpbWFyeS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWFjdGl2ZSk7LS1jbHItYnRuLXByaW1hcnktZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uKTstLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1k''@;'; put 'put ''aXNhYmxlZCk7LS1jbHItYnRuLXByaW1hcnktY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tcHJpbWFyeS1vdXRs''@;'; put 'put ''aW5lLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbyk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1v''@;'; put 'put ''dXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWNvbmRhcnktaG92ZXIpOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktaW5mby1ob3Zlcik7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0''@;'; put 'put ''bGluZS1jb2xvcik7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1i''@;'; put 'put ''Zy1jb2xvcik7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jaGVja2VkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEw''@;'; put 'put ''MCk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1zdWNjZXNz''@;'; put 'put ''LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItYnRuLXN1Y2Nlc3MtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1iZy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3MtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRl''@;'; put 'put ''cmFjdGlvbi1zdWNjZXNzLWhvdmVyKTstLWNsci1idG4tc3VjY2Vzcy1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1zdWNj''@;'; put 'put ''ZXNzLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1Y2Nlc3MtYWN0aXZlKTstLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi1zdWNjZXNz''@;'; put 'put ''LWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWJnLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1idG4tc3VjY2Vzcy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYmctY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1idG4tc3Vj''@;'; put 'put ''Y2Vzcy1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWhvdmVyLWJnLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1zZWNvbmRhcnktaG92ZXIpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3VjY2Vzcy1ob3Zlcik7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGlu''@;'; put 'put ''ZS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2Fi''@;'; put 'put ''bGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVk''@;'; put 'put ''LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtY2hlY2tlZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xy''@;'; put 'put ''LWJ0bi1kYW5nZXItYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWJnLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWhvdmVyKTstLWNsci1idG4tZGFuZ2VyLWhvdmVyLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tZGFuZ2VyLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1hY3RpdmUpOy0tY2xyLWJ0bi1kYW5nZXItYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLWRhbmdlci1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHIt''@;'; put 'put ''YnRuLWRhbmdlci1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWJnLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi1kYW5nZXItY29sb3IpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRh''@;'; put 'put ''bmdlci1vdXRsaW5lLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLXNlY29uZGFyeS1ob3Zlcik7LS1jbHItYnRu''@;'; put 'put ''LWRhbmdlci1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRhbmdlci1ob3Zlcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tZGFuZ2Vy''@;'; put 'put ''LW91dGxpbmUtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWRpc2Fi''@;'; put 'put ''bGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jaGVja2Vk''@;'; put 'put ''LWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItYmxhY2spOy0tY2xyLWJ0bi13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZyk7LS1jbHItYnRuLXdhcm5pbmctYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctaG92ZXItYmctY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWhvdmVyKTstLWNsci1idG4td2FybmluZy1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWludGVyYWN0aW9uLXdhcm5pbmctYWN0aXZlKTstLWNsci1idG4td2FybmluZy1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yKTstLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0''@;'; put 'put ''b24pOy0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4td2FybmluZy1j''@;'; put 'put ''aGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13''@;'; put 'put ''YXJuaW5nLWRhcmspOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyayk7LS1jbHItYnRu''@;'; put 'put ''LXdhcm5pbmctb3V0bGluZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctc2Vjb25kYXJ5LWhvdmVyKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXdhcm5pbmct''@;'; put 'put ''aG92ZXIpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jb2xvcik7''@;'; put 'put ''LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1j''@;'; put 'put ''bHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWJnLWNvbG9yKTstLWNs''@;'; put 'put ''ci1idG4td2FybmluZy1vdXRsaW5lLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1uZXV0cmFsLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLW5ldXRyYWwtYmctY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1idG4tbmV1dHJhbC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWJnLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRy''@;'; put 'put ''YWwtaG92ZXIpOy0tY2xyLWJ0bi1uZXV0cmFsLWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1hY3RpdmUpOy0tY2xyLWJ0bi1u''@;'; put 'put ''ZXV0cmFsLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtY29sb3IpOy0tY2xyLWJ0bi1uZXV0cmFsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkLWJ1dHRvbik7LS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQtYmctY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1uZXV0cmFsLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWJnLWNv''@;'; put 'put ''bG9yKTstLWNsci1idG4tbmV1dHJhbC1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtYmctY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LW5ldXRyYWwtaG92ZXIpOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLXNlY29uZGFyeS1ob3Zlcik7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1hY3RpdmUtY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFs''@;'; put 'put ''LW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1saW5rLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbyk7LS1jbHItYnRuLWxpbmstYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstYm9yZGVyLWNvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY29sb3IpOy0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1ob3Zl''@;'; put 'put ''ci1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1pbmZvLWhvdmVyKTstLWNsci1idG4tbGluay12aXNpdGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWxpbmstY29sb3ItdmlzaXRlZCk7LS1jbHItYnRuLWxpbmstdmlzaXRlZC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXIpOy0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWRpc2FibGVkKTstLWNsci1idG4tbGluay1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRu''@;'; put 'put ''LWxpbmstY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1jaGVja2VkLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXN0YXR1cy1pbmZvKTstLWNsci1idG4tbGluay1wcmltYXJ5LWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1s''@;'; put 'put ''aW5rLXByaW1hcnktaG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1pbmZvLWhvdmVyKTstLWNsci1idG4tbGluay1wcmltYXJ5LWFjdGl2''@;'; put 'put ''ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1wcmltYXJ5LWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRy''@;'; put 'put ''YW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1wcmltYXJ5LWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWNvbG9y''@;'; put 'put ''KTstLWNsci1idG4tbGluay1zdWNjZXNzLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1zdWNjZXNzLWJvcmRlci1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1zdWNjZXNzLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktc3VjY2Vzcy1ob3Zlcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29s''@;'; put 'put ''b3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRu''@;'; put 'put ''LWxpbmstc3VjY2Vzcy1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1''@;'; put 'put ''Y2Nlc3MtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jb2xvcik7LS1jbHItYnRuLWxpbmstd2FybmluZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyayk7LS1jbHItYnRuLWxpbmstd2FybmluZy1iZy1jb2xvcjp2YXIoLS1jbHItYnRu''@;'; put 'put ''LXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay13YXJuaW5nLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay13YXJuaW5nLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29s''@;'; put 'put ''b3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktd2FybmluZy1ob3Zlcik7LS1jbHItYnRuLWxpbmstd2FybmluZy1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctY29sb3IpOy0tY2xyLWJ0bi1saW5r''@;'; put 'put ''LXdhcm5pbmctYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJs''@;'; put 'put ''ZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstd2FybmluZy1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstd2FybmluZy1jaGVja2VkLWJnLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFu''@;'; put 'put ''Z2VyKTstLWNsci1idG4tbGluay1kYW5nZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1kYW5nZXIt''@;'; put 'put ''aG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRhbmdlci1ob3Zlcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWFjdGl2ZS1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLWxpbmstZGFuZ2VyLWNvbG9yKTstLWNsci1idG4tbGluay1kYW5nZXItYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1kaXNhYmxlZCk7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xv''@;'; put 'put ''cik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1jb2xvcik7LS1jbHItYnRuLWxpbmstbmV1''@;'; put 'put ''dHJhbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFu''@;'; put 'put ''c3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFsLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW5ldXRyYWwtaG92''@;'; put 'put ''ZXIpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFsLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1u''@;'; put 'put ''ZXV0cmFsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtZGlzYWJs''@;'; put 'put ''ZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFsLWNoZWNrZWQtY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtY29sb3IpOy0tY2xyLWJ0bi1pbnZlcnNlLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2xyLWJ0bi1pbnZlcnNlLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNsci1idG4taW52ZXJz''@;'; put 'put ''ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4taW52ZXJzZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtaG92ZXIpOy0tY2xyLWJ0bi1pbnZlcnNlLWhvdmVyLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1idG4taW52ZXJzZS1jb2xvcik7LS1jbHItYnRuLWludmVyc2UtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1hY3RpdmUpOy0tY2xyLWJ0bi1pbnZlcnNlLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdo''@;'; put 'put ''aXRlKTstLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1pbnZl''@;'; put 'put ''cnNlLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1iZy1jb2xvcik7LS1jbHItYnRuLWludmVyc2UtY2hlY2tlZC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWludmVyc2UtY29sb3IpfS5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7YWxpZ24taXRlbXM6Y2VudGVyO3BsYWNlLWNvbnRlbnQ6Y2VudGVy''@;'; put 'put ''Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtib3JkZXI6dmFyKC0tY2xyLWJ0bi1ib3JkZXItd2lkdGgpIHNvbGlkO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNCk7bWF4LXdpZHRo''@;'; put 'put ''OmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO2JvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0yKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7dGV4dC10cmFuc2Zv''@;'; put 'put ''cm06dXBwZXJjYXNlO2hlaWdodDp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2UtZm9ybS1oZWlnaHQpO3BhZGRpbmc6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0tcGFkZGluZyl9LmJ0bjpob3ZlciwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46aG92ZXJ7dGV4dC1kZWNv''@;'; put 'put ''cmF0aW9uOm5vbmV9LmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKX0uYnRu''@;'; put 'put ''OmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWhvdmVyLWNvbG9yKX0uYnRuOmhvdmVyIGNkcy1pY29uLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3IpfS5idG46YWN0''@;'; put 'put ''aXZlLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYWN0aXZlLWNvbG9yKX0uYnRuOmFjdGl2ZSBjZHMtaWNvbiwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1jb2xvcil9LmJ0''@;'; put 'put ''bi5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5kaXNhYmxlZC5idG4sLmJ0bjpkaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90''@;'; put 'put ''LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gLmRpc2FibGVkLmJ0biBjZHMtaWNvbiwuYnRuLmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmRpc2FibGVkLmJ0biBjbHItaWNvbiwuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0''@;'; put 'put ''bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuOmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtY29sb3IpfS5idG4gLmNsci1sb2FkaW5nLWJ0bi1jb250''@;'; put 'put ''ZW50LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biAuY2xyLWxvYWRpbmctYnRuLWNvbnRlbnR7ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2FsaWduLWl0ZW1zOmNlbnRlcn0uYnRuLWdyb3VwPi5idG4gY2xyLWljb24sLmJ0biBjbHItaWNvbiwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb257dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsY2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpKSwwKX1hLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuLC5idG4uYnRuLXNlY29uZGFyeSwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5LmJ0biwuYnRuLXNlY29uZGFyeSAuYnRuLC5idG4tc2Vjb25kYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5IC5idG57''@;'; put 'put ''Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY29sb3IpfWEuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gYS5idG4gY2RzLWljb24sYS5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnkgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeS5idG4gY2Rz''@;'; put 'put ''LWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5IGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnkuYnRuIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnkgLmJ0biBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeSAuYnRuIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5IC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKX1hLmJ0bjpob3ZlciwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmhvdmVyLC5idG4uYnRuLXNlY29uZGFyeTpob3Zlciwu''@;'; put 'put ''YnRuLXNlY29uZGFyeSAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3IpfWEuYnRuOmhvdmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gYS5idG46aG92ZXIgY2RzLWljb24sYS5idG46aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnk6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5OmhvdmVyIGNsci1pY29u''@;'; put 'put ''LC5idG4tc2Vjb25kYXJ5IC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3IpfWEuYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmFjdGl2''@;'; put 'put ''ZSwuYnRuLmJ0bi1zZWNvbmRhcnk6YWN0aXZlLC5idG4tc2Vjb25kYXJ5IC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1jb2xvcil9YS5idG46YWN0aXZl''@;'; put 'put ''IGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG46YWN0aXZlIGNkcy1pY29uLGEuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnk6YWN0aXZlIGNkcy1p''@;'; put 'put ''Y29uLC5idG4uYnRuLXNlY29uZGFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1jb2xvcil9YS5idG4uZGlzYWJs''@;'; put 'put ''ZWQsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmRpc2FibGVkLmJ0bixhLmJ0bjpkaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmRpc2FibGVkLC5idG4uYnRuLXNlY29uZGFyeS5kaXNhYmxlZCwuYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQsLmJ0''@;'; put 'put ''bi1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxlZCwuYnRuLXNlY29uZGFyeSAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVk''@;'; put 'put ''LWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWJvcmRlci1jb2xvcil9YS5idG4uZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmRpc2FibGVkLmJ0biBjZHMtaWNvbixhLmJ0bi5kaXNhYmxlZCBjbHIt''@;'; put 'put ''aWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuZGlzYWJsZWQuYnRuIGNsci1pY29uLGEuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG46ZGlzYWJsZWQgY2RzLWljb24sYS5idG46ZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXNlY29uZGFyeTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0''@;'; put 'put ''bi1zZWNvbmRhcnk6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bjpk''@;'; put 'put ''aXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWluZm8sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8uYnRuLC5idG4taW5mbyAuYnRuLC5idG4taW5mbyAuYWxlcnQtYXBwLWxldmVsIC5hbGVy''@;'; put 'put ''dC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8gLmJ0biwuYnRuLmJ0bi1wcmltYXJ5LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LmJ0biwuYnRuLXByaW1hcnkgLmJ0biwuYnRuLXByaW1hcnkgLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5IC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWJnLWNvbG9yKTtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY29sb3IpfS5idG4uYnRuLWluZm8gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8uYnRuIGNkcy1pY29uLC5idG4uYnRuLWluZm8gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRu''@;'; put 'put ''LWluZm8uYnRuIGNsci1pY29uLC5idG4taW5mbyAuYnRuIGNkcy1pY29uLC5idG4taW5mbyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8gLmJ0biBjZHMtaWNvbiwuYnRuLWluZm8gLmJ0biBj''@;'; put 'put ''bHItaWNvbiwuYnRuLWluZm8gLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvIC5idG4gY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1p''@;'; put 'put ''dGVtIC5idG4tcHJpbWFyeS5idG4gY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS5idG4gY2xyLWljb24sLmJ0bi1wcmltYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1wcmltYXJ5IC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeSAuYnRuIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWlj''@;'; put 'put ''b24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnkgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY29sb3IpfS5idG4uYnRuLWluZm86aG92ZXIsLmJ0bi1pbmZvIC5idG46aG92ZXIsLmJ0bi5idG4tcHJpbWFyeTpob3ZlciwuYnRuLXBy''@;'; put 'put ''aW1hcnkgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1pbmZvOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWluZm86aG92ZXIgY2xy''@;'; put 'put ''LWljb24sLmJ0bi1pbmZvIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1pbmZvIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1wcmltYXJ5OmhvdmVyIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmhvdmVyIGNkcy1pY29uLC5i''@;'; put 'put ''dG4tcHJpbWFyeSAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1ob3Zlci1jb2xvcil9LmJ0bi5idG4taW5mbzphY3RpdmUsLmJ0bi1pbmZvIC5idG46YWN0aXZlLC5idG4uYnRuLXByaW1hcnk6YWN0aXZlLC5idG4tcHJpbWFyeSAuYnRuOmFjdGl2ZXti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWluZm86YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLWluZm86YWN0aXZlIGNsci1pY29uLC5idG4taW5m''@;'; put 'put ''byAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWluZm8gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi1wcmltYXJ5IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tcHJpbWFy''@;'; put 'put ''eSAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1pbmZvLmRpc2FibGVkLC5idG4uYnRuLWluZm86ZGlzYWJsZWQsLmJ0bi1pbmZvIC5idG4uZGlzYWJsZWQsLmJ0bi1pbmZvIC5idG46ZGlzYWJsZWQsLmJ0bi5i''@;'; put 'put ''dG4tcHJpbWFyeS5kaXNhYmxlZCwuYnRuLmJ0bi1wcmltYXJ5OmRpc2FibGVkLC5idG4tcHJpbWFyeSAuYnRuLmRpc2FibGVkLC5idG4tcHJpbWFyeSAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4taW5mby5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvLmRpc2Fi''@;'; put 'put ''bGVkIGNsci1pY29uLC5idG4uYnRuLWluZm86ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4taW5mbzpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWluZm8gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWluZm8gLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWluZm8gLmJ0bjpkaXNhYmxl''@;'; put 'put ''ZCBjZHMtaWNvbiwuYnRuLWluZm8gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1wcmltYXJ5LmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnkuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1wcmltYXJ5''@;'; put 'put ''OmRpc2FibGVkIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmRpc2FibGVkIGNsci1pY29ue2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tc3VjY2VzcywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2Vzcy5idG4sLmJ0bi1zdWNjZXNzIC5idG4sLmJ0bi1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0g''@;'; put 'put ''LmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2VzcyAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWJ0bi1zdWNjZXNzLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNj''@;'; put 'put ''ZXNzLmJ0biBjbHItaWNvbiwuYnRuLXN1Y2Nlc3MgLmJ0biBjZHMtaWNvbiwuYnRuLXN1Y2Nlc3MgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzIC5idG4gY2RzLWljb24sLmJ0bi1zdWNj''@;'; put 'put ''ZXNzIC5idG4gY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2VzcyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jb2xvcil9''@;'; put 'put ''LmJ0bi5idG4tc3VjY2Vzczpob3ZlciwuYnRuLXN1Y2Nlc3MgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzOmhvdmVy''@;'; put 'put ''IGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3M6aG92ZXIgY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNz''@;'; put 'put ''OmFjdGl2ZSwuYnRuLXN1Y2Nlc3MgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzOmFjdGl2ZSBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1zdWNjZXNzOmFjdGl2ZSBjbHItaWNvbiwuYnRuLXN1Y2Nlc3MgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3MuZGlzYWJs''@;'; put 'put ''ZWQsLmJ0bi5idG4tc3VjY2VzczpkaXNhYmxlZCwuYnRuLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCwuYnRuLXN1Y2Nlc3MgLmJ0bjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3MuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy5kaXNhYmxlZCBjbHItaWNv''@;'; put 'put ''biwuYnRuLmJ0bi1zdWNjZXNzOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3M6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5idG46ZGlz''@;'; put 'put ''YWJsZWQgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLmJ0biwuYnRuLXdh''@;'; put 'put ''cm5pbmcgLmJ0biwuYnRuLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1ib3JkZXItY29sb3IpO2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY29sb3IpfS5idG4uYnRuLXdhcm5pbmcgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmcuYnRuIGNkcy1pY29uLC5idG4uYnRuLXdh''@;'; put 'put ''cm5pbmcgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmcuYnRuIGNsci1pY29uLC5idG4td2FybmluZyAuYnRuIGNkcy1pY29uLC5idG4td2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmcgLmJ0biBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0biBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJu''@;'; put 'put ''aW5nIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nOmhvdmVyLC5idG4td2FybmluZyAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLXdhcm5pbmctaG92ZXItY29sb3IpfS5idG4uYnRuLXdhcm5pbmc6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4td2FybmluZzpob3ZlciBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpob3ZlciBjbHItaWNvbntjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLXdhcm5pbmctaG92ZXItY29sb3IpfS5idG4uYnRuLXdhcm5pbmc6YWN0aXZlLC5idG4td2FybmluZyAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4td2Fy''@;'; put 'put ''bmluZy1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXdhcm5pbmc6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmc6YWN0aXZlIGNsci1pY29uLC5idG4td2FybmluZyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi13YXJuaW5nLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4td2FybmluZy5kaXNhYmxlZCwuYnRuLmJ0bi13YXJuaW5nOmRpc2FibGVkLC5idG4td2FybmluZyAuYnRuLmRpc2FibGVkLC5idG4td2FybmluZyAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1k''@;'; put 'put ''aXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4td2Fybmlu''@;'; put 'put ''Zy5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi13YXJuaW5nLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXdhcm5pbmc6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4td2FybmluZzpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRu''@;'; put 'put ''LXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWRhbmdlciwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyLmJ0biwuYnRuLWRhbmdlciAuYnRuLC5idG4tZGFuZ2VyIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyIC5idG57Ym9yZGVyLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tZGFuZ2VyLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItY29sb3IpfS5idG4uYnRuLWRhbmdlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVy''@;'; put 'put ''dC1pdGVtIC5idG4tZGFuZ2VyLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlci5idG4gY2xyLWljb24sLmJ0bi1kYW5nZXIgLmJ0biBjZHMtaWNvbiwuYnRuLWRhbmdlciAuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''IC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlciAuYnRuIGNkcy1pY29uLC5idG4tZGFuZ2VyIC5idG4gY2xyLWljb24sLmJ0bi1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXIgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyOmhvdmVyLC5idG4tZGFuZ2VyIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRh''@;'; put 'put ''bmdlci1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItaG92ZXItY29sb3IpfS5idG4uYnRuLWRhbmdlcjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXI6aG92ZXIgY2xyLWljb24sLmJ0bi1kYW5nZXIgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWRhbmdl''@;'; put 'put ''ciAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXI6YWN0aXZlLC5idG4tZGFuZ2VyIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItYWN0aXZlLWJnLWNvbG9yKTtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWRhbmdlcjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWRhbmdlciAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWRhbmdlciAuYnRuOmFjdGl2ZSBjbHIt''@;'; put 'put ''aWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWRhbmdlci5kaXNhYmxlZCwuYnRuLmJ0bi1kYW5nZXI6ZGlzYWJsZWQsLmJ0bi1kYW5nZXIgLmJ0bi5kaXNhYmxlZCwuYnRuLWRhbmdlciAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tZGFuZ2VyLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5i''@;'; put 'put ''dG4tZGFuZ2VyLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWRhbmdlci5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1kYW5nZXI6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyOmRpc2FibGVkIGNsci1pY29uLC5idG4tZGFuZ2VyIC5idG4uZGlzYWJsZWQgY2RzLWljb24s''@;'; put 'put ''LmJ0bi1kYW5nZXIgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWRhbmdlciAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tZGFuZ2VyIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLW5ldXRyYWws''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwuYnRuLC5idG4tbmV1dHJhbCAuYnRuLC5idG4tbmV1dHJhbCAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwgLmJ0bntib3JkZXIt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC5idG4gY2RzLWljb24sLmJ0bi5idG4tbmV1dHJhbCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC5idG4gY2xyLWljb24sLmJ0bi1uZXV0cmFsIC5idG4gY2RzLWljb24sLmJ0bi1uZXV0cmFsIC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbCAuYnRuIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVt''@;'; put 'put ''IC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtY29sb3IpfS5idG4uYnRuLW5ldXRyYWw6aG92ZXIsLmJ0bi1uZXV0cmFsIC5idG46aG92ZXJ7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbDpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsOmhvdmVyIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYnRu''@;'; put 'put ''OmhvdmVyIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbDphY3RpdmUsLmJ0bi1uZXV0cmFsIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWJ0bi1uZXV0cmFsLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbDphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbmV1dHJhbDphY3RpdmUgY2xyLWljb24sLmJ0bi1uZXV0cmFsIC5idG46YWN0aXZlIGNk''@;'; put 'put ''cy1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLmRpc2FibGVkLC5idG4uYnRuLW5ldXRyYWw6ZGlzYWJsZWQsLmJ0bi1uZXV0cmFsIC5idG4uZGlzYWJsZWQsLmJ0''@;'; put 'put ''bi1uZXV0cmFsIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLW5ldXRyYWwtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbmV1dHJhbDpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsOmRpc2Fi''@;'; put 'put ''bGVkIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tbmV1dHJhbC1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tb3V0bGluZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS5idG4sLmJ0bi5idG4tb3V0bGluZSAuYnRuLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLC5hbGVydC1hcHAtbGV2ZWwg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5idG4sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnksLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmJ0biwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4sLmJ0bi1zZWNvbmRhcnkt''@;'; put 'put ''b3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuLC5idG4tb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQt''@;'; put 'put ''aXRlbSAuYnRuLW91dGxpbmUgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQt''@;'; put 'put ''b3V0bGluZS1jb2xvcil9LmJ0bi5idG4tb3V0bGluZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS5idG4gY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS5i''@;'; put 'put ''dG4gY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5LW91dGxpbmUuYnRu''@;'; put 'put ''IGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5idG4gY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zZWNvbmRhcnkuYnRuIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5LW91''@;'; put 'put ''dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXNlY29uZGFy''@;'; put 'put ''eS1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXNlY29uZGFyeSAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuIGNkcy1pY29uLC5idG4t''@;'; put 'put ''b3V0bGluZS1zZWNvbmRhcnkgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0biBjbHItaWNvbiwu''@;'; put 'put ''YnRuLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5idG4gY2xyLWljb24s''@;'; put 'put ''LmJ0bi1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lOmhvdmVyLC5idG4uYnRuLW91dGxpbmUgLmJ0bjpob3ZlciwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpob3ZlciwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpob3ZlciwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAu''@;'; put 'put ''YnRuOmhvdmVyLC5idG4tb3V0bGluZSAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1vdXRsaW5lOmhv''@;'; put 'put ''dmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpob3ZlciBjZHMtaWNvbiwuYnRu''@;'; put 'put ''LmJ0bi1zZWNvbmRhcnktb3V0bGluZTpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpob3ZlciBjbHItaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24s''@;'; put 'put ''LmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0''@;'; put 'put ''bi1vdXRsaW5lIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLW91dGxpbmU6YWN0aXZlLC5idG4uYnRuLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6YWN0aXZl''@;'; put 'put ''LC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmFjdGl2ZSwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZh''@;'; put 'put ''dWx0LW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLW91dGxpbmU6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmU6YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0''@;'; put 'put ''bjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtc2Vjb25k''@;'; put 'put ''YXJ5OmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4tb3V0bGluZS1z''@;'; put 'put ''ZWNvbmRhcnkgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVm''@;'; put 'put ''YXVsdC1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lOmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxp''@;'; put 'put ''bmUuZGlzYWJsZWQsLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQsLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tc2Vj''@;'; put 'put ''b25kYXJ5LW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG4uZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuOmRpc2FibGVkLC5idG4tb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZSAuYnRuOmRpc2FibGVke2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1v''@;'; put 'put ''dXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLmJ0bi1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24s''@;'; put 'put ''LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlz''@;'; put 'put ''YWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGlu''@;'; put 'put ''ZS1zZWNvbmRhcnk6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2RzLWlj''@;'; put 'put ''b24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAu''@;'; put 'put ''YnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUgLmJ0bjpkaXNhYmxl''@;'; put 'put ''ZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5''@;'; put 'put ''LW91dGxpbmUuYnRuLC5idG4tb3V0bGluZS1pbmZvIC5idG4sLmJ0bi1vdXRsaW5lLWluZm8gLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWluZm8gLmJ0biwuYnRuLWluZm8tb3V0bGluZSAuYnRuLC5i''@;'; put 'put ''dG4taW5mby1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mby1vdXRsaW5lIC5idG4sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0biwuYnRuLXByaW1hcnktb3V0bGluZSAuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''IC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG4sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0biwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnksLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeS5idG4sLmJ0bi5idG4tb3V0bGluZS1pbmZvLC5hbGVydC1hcHAtbGV2ZWwgLmFs''@;'; put 'put ''ZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWluZm8uYnRuLC5idG4uYnRuLWluZm8tb3V0bGluZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mby1vdXRsaW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bntib3JkZXItY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5l''@;'; put 'put ''IGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LW91dGxpbmUuYnRuIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS1vdXRsaW5lLmJ0biBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1pbmZvIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1pbmZvIC5idG4gY2RzLWljb24sLmJ0bi1v''@;'; put 'put ''dXRsaW5lLWluZm8gLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtaW5mbyAuYnRuIGNsci1pY29uLC5idG4taW5mby1vdXRsaW5l''@;'; put 'put ''IC5idG4gY2RzLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuIGNsci1p''@;'; put 'put ''Y29uLC5idG4taW5mby1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mby1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRu''@;'; put 'put ''LXByaW1hcnktb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1w''@;'; put 'put ''cmltYXJ5LW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuIGNkcy1pY29uLC5idG4tb3V0''@;'; put 'put ''bGluZS1wcmltYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxp''@;'; put 'put ''bmUtcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1wcmltYXJ5LmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeS5idG4gY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1p''@;'; put 'put ''bmZvIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWluZm8uYnRuIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5mbyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1pbmZvLmJ0biBjbHItaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1pbmZvLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8tb3V0bGluZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0bi5idG4taW5mby1vdXRsaW5l''@;'; put 'put ''IGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvLW91dGxpbmUuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWNvbG9y''@;'; put 'put ''KX0uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6aG92ZXIsLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjpob3ZlciwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjpob3ZlciwuYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXByaW1hcnk6aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1pbmZvOmhvdmVyLC5idG4uYnRuLWluZm8tb3V0bGluZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFy''@;'; put 'put ''eS1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpob3ZlciBjbHItaWNvbiwuYnRuLW91dGxp''@;'; put 'put ''bmUtaW5mbyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS1pbmZvIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5i''@;'; put 'put ''dG46aG92ZXIgY2RzLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5''@;'; put 'put ''OmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWluZm86aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmhvdmVyIGNsci1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZTpob3ZlciBjZHMtaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXByaW1hcnktb3V0bGluZTphY3RpdmUsLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjphY3RpdmUsLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjphY3Rp''@;'; put 'put ''dmUsLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjphY3RpdmUsLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lLWluZm86YWN0aXZlLC5idG4uYnRuLWluZm8tb3V0bGluZTphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVt''@;'; put 'put ''IC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXByaW1hcnktb3V0bGluZTphY3RpdmUgY2RzLWlj''@;'; put 'put ''b24sLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRu''@;'; put 'put ''LWluZm8tb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRu''@;'; put 'put ''LW91dGxpbmUtcHJpbWFyeSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0''@;'; put 'put ''bi1vdXRsaW5lLWluZm86YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZTphY3RpdmUgY2xyLWlj''@;'; put 'put ''b24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLmRpc2FibGVkLC5idG4uYnRuLXByaW1hcnkt''@;'; put 'put ''b3V0bGluZTpkaXNhYmxlZCwuYnRuLW91dGxpbmUtaW5mbyAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1pbmZvIC5idG46ZGlzYWJsZWQsLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmRpc2FibGVkLC5idG4tcHJpbWFyeS1vdXRsaW5l''@;'; put 'put ''IC5idG4uZGlzYWJsZWQsLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkLC5idG4uYnRuLW91''@;'; put 'put ''dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1pbmZvOmRpc2FibGVkLC5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNh''@;'; put 'put ''YmxlZCwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQgY2Rz''@;'; put 'put ''LWljb24sLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bi5kaXNhYmxl''@;'; put 'put ''ZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1pbmZvIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuLmRpc2FibGVk''@;'; put 'put ''IGNkcy1pY29uLC5idG4taW5mby1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG4uZGlzYWJs''@;'; put 'put ''ZWQgY2RzLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkg''@;'; put 'put ''LmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQgY2xyLWljb24sLmJ0''@;'; put 'put ''bi5idG4tb3V0bGluZS1pbmZvLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRu''@;'; put 'put ''LWluZm8tb3V0bGluZS5kaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5h''@;'; put 'put ''bGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZTpkaXNhYmxl''@;'; put 'put ''ZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lLC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLW91dGxpbmUuYnRuLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuLC5idG4uYnRuLW91dGxpbmUtc3VjY2VzcywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zdWNjZXNzLmJ0''@;'; put 'put ''biwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0biwu''@;'; put 'put ''YnRuLW91dGxpbmUtc3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ib3JkZXItY29sb3Ip''@;'; put 'put ''O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRuLXN1Y2Nlc3Mtb3V0bGluZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNz''@;'; put 'put ''LW91dGxpbmUuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtc3VjY2VzcyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zdWNjZXNzLmJ0''@;'; put 'put ''biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5idG4gY2xyLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzLW91dGxp''@;'; put 'put ''bmU6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmhvdmVyLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bjpob3ZlcntiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxl''@;'; put 'put ''cnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1''@;'; put 'put ''Y2Nlc3M6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmhvdmVyIGNsci1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAu''@;'; put 'put ''YnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1z''@;'; put 'put ''dWNjZXNzIC5hbGVydC1pdGVtIC5idG46YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtc3VjY2VzczphY3RpdmUsLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nl''@;'; put 'put ''c3Mtb3V0bGluZS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0''@;'; put 'put ''bjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmFjdGl2ZSBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6YWN0aXZlIGNsci1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46YWN0aXZlIGNkcy1pY29u''@;'; put 'put ''LC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lLmRpc2FibGVkLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQt''@;'; put 'put ''aXRlbSAuYnRuLmRpc2FibGVkLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTpkaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1zdWNj''@;'; put 'put ''ZXNzOmRpc2FibGVkLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxp''@;'; put 'put ''bmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lLmRpc2Fi''@;'; put 'put ''bGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0g''@;'; put 'put ''LmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzLmRpc2FibGVk''@;'; put 'put ''IGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkIGNsci1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4u''@;'; put 'put ''ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXN1''@;'; put 'put ''Y2Nlc3MgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLW91dGxpbmUuYnRuLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQt''@;'; put 'put ''aXRlbSAuYnRuLC5idG4uYnRuLW91dGxpbmUtd2FybmluZywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS13YXJuaW5nLmJ0biwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuLC5idG4td2FybmluZy1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0g''@;'; put 'put ''LmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4td2FybmluZy1vdXRsaW5lIC5idG4sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0biwuYnRuLW91dGxpbmUtd2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQt''@;'; put 'put ''aXRlbSAuYnRuLW91dGxpbmUtd2FybmluZyAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''d2FybmluZy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmctb3V0bGluZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5i''@;'; put 'put ''dG4gY2RzLWljb24sLmJ0bi5idG4td2FybmluZy1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLW91dGxpbmUuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29u''@;'; put 'put ''LC5idG4uYnRuLW91dGxpbmUtd2FybmluZyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS13YXJuaW5nLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRu''@;'; put 'put ''LW91dGxpbmUtd2FybmluZy5idG4gY2xyLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXdhcm5pbmctb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdh''@;'; put 'put ''cm5pbmctb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJu''@;'; put 'put ''aW5nLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGlu''@;'; put 'put ''ZS13YXJuaW5nIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUt''@;'; put 'put ''d2FybmluZyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmU6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46aG92ZXIsLmJ0bi5idG4tb3V0bGlu''@;'; put 'put ''ZS13YXJuaW5nOmhvdmVyLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXdh''@;'; put 'put ''cm5pbmctb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmctb3V0bGluZTpob3ZlciBjbHIt''@;'; put 'put ''aWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmc6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmhvdmVyIGNsci1pY29uLC5idG4td2FybmluZy1vdXRs''@;'; put 'put ''aW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi13YXJuaW5nLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXdhcm5pbmctb3V0bGluZTphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtd2FybmluZzphY3RpdmUsLmJ0bi13YXJuaW5nLW91''@;'; put 'put ''dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9''@;'; put 'put ''LmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmc6YWN0aXZlIGNsci1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46YWN0aXZlIGNkcy1p''@;'; put 'put ''Y29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5l''@;'; put 'put ''LWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lLmRpc2FibGVkLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkLC5idG4uYnRuLXdhcm5pbmctb3V0bGluZTpkaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdh''@;'; put 'put ''cm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bjpkaXNh''@;'; put 'put ''YmxlZCwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4td2FybmluZy1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkIGNsci1pY29u''@;'; put 'put ''LC5idG4uYnRuLXdhcm5pbmctb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi13YXJuaW5nLW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtd2FybmluZy5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmc6''@;'; put 'put ''ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkIGNsci1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXdhcm5pbmctb3V0''@;'; put 'put ''bGluZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4t''@;'; put 'put ''b3V0bGluZS13YXJuaW5nIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUsLmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlci1vdXRsaW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWRhbmdl''@;'; put 'put ''ci5idG4sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLC5idG4tZGFuZ2VyLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0biwu''@;'; put 'put ''YnRuLW91dGxpbmUtZGFuZ2VyIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1ib3JkZXItY29sb3IpO2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRh''@;'; put 'put ''bmdlci1vdXRsaW5lLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXItb3V0bGluZS5i''@;'; put 'put ''dG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1kYW5nZXIuYnRuIGNkcy1pY29uLC5i''@;'; put 'put ''dG4uYnRuLW91dGxpbmUtZGFuZ2VyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWRhbmdlci5idG4gY2xyLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVt''@;'; put 'put ''IC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuIGNsci1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRu''@;'; put 'put ''IGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxl''@;'; put 'put ''cnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6aG92ZXIsLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91''@;'; put 'put ''dGxpbmUtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2Rz''@;'; put 'put ''LWljb24sLmJ0bi5idG4tZGFuZ2VyLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlcjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRh''@;'; put 'put ''bmdlcjpob3ZlciBjbHItaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG46''@;'; put 'put ''aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmU6YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46YWN0aXZlLC5idG4uYnRuLW91dGxpbmUt''@;'; put 'put ''ZGFuZ2VyOmFjdGl2ZSwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5n''@;'; put 'put ''ZXItb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXItb3V0bGluZTphY3RpdmUgY2xyLWlj''@;'; put 'put ''b24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5l''@;'; put 'put ''IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''ZGFuZ2VyLW91dGxpbmUtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXItb3V0bGluZS5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmRpc2FibGVkLC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6ZGlzYWJsZWQsLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0''@;'; put 'put ''bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG4uZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXItb3V0bGluZS5kaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5i''@;'; put 'put ''dG4uYnRuLWRhbmdlci1vdXRsaW5lOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyLW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5h''@;'; put 'put ''bGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlci5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlci5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZCBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bjpkaXNh''@;'; put 'put ''YmxlZCBjZHMtaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5i''@;'; put 'put ''dG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1p''@;'; put 'put ''dGVtIC5idG4tbmV1dHJhbC1vdXRsaW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtbmV1dHJhbC5idG4sLmJ0bi1uZXV0''@;'; put 'put ''cmFsLW91dGxpbmUgLmJ0biwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG4sLmJ0bi1vdXRsaW5l''@;'; put 'put ''LW5ldXRyYWwgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1uZXV0cmFs''@;'; put 'put ''LW91dGxpbmUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwtb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC1vdXRsaW5lLmJ0''@;'; put 'put ''biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWwgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtbmV1dHJhbC5idG4gY2RzLWljb24s''@;'; put 'put ''LmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLW5ldXRyYWwuYnRuIGNsci1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''IC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lOmhvdmVyLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpob3ZlciwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsOmhvdmVy''@;'; put 'put ''IGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpob3ZlciBjbHItaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bjpob3ZlciBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuOmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWw6YWN0aXZlLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUt''@;'; put 'put ''YWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNk''@;'; put 'put ''cy1pY29uLC5idG4uYnRuLW5ldXRyYWwtb3V0bGluZTphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tb3V0''@;'; put 'put ''bGluZS1uZXV0cmFsOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW91dGxp''@;'; put 'put ''bmUtbmV1dHJhbCAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZS5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bi5k''@;'; put 'put ''aXNhYmxlZCwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsLmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpkaXNhYmxl''@;'; put 'put ''ZCwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbmV1''@;'; put 'put ''dHJhbC1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWRpc2FibGVk''@;'; put 'put ''LWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lLmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwtb3V0bGluZS5kaXNhYmxlZCBjbHItaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46ZGlzYWJs''@;'; put 'put ''ZWQgY2RzLWljb24sLmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lOmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbC5kaXNhYmxlZCBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWwuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuLmRpc2FibGVkIGNk''@;'; put 'put ''cy1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG4u''@;'; put 'put ''ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWJ0bi1uZXV0cmFsLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWxpbmssLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsuYnRuLC5idG4tbGluayAuYnRuLC5idG4tbGluayAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1jb2xvcil9LmJ0bi5idG4t''@;'; put 'put ''bGluayBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay5idG4gY2RzLWljb24sLmJ0bi5idG4tbGluayBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay5idG4gY2xyLWljb24sLmJ0bi1saW5rIC5idG4gY2RzLWljb24s''@;'; put 'put ''LmJ0bi1saW5rIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluayAuYnRuIGNkcy1pY29uLC5idG4tbGluayAuYnRuIGNsci1pY29uLC5idG4tbGluayAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1p''@;'; put 'put ''dGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY29sb3IpfS5idG4uYnRuLWxpbms6aG92ZXIsLmJ0bi1saW5rIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLWxpbmstaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluazpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rOmhvdmVyIGNsci1pY29uLC5idG4tbGluayAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbGlu''@;'; put 'put ''ayAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluazphY3RpdmUsLmJ0bi1saW5rIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluazphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbGluazphY3RpdmUgY2xyLWljb24sLmJ0bi1saW5rIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluayAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWxpbmstYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1saW5rLmRpc2FibGVkLC5idG4uYnRuLWxpbms6ZGlzYWJsZWQsLmJ0bi1saW5rIC5idG4uZGlzYWJsZWQsLmJ0bi1saW5rIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWNvbG9yKTtjdXJz''@;'; put 'put ''b3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRu''@;'; put 'put ''LWxpbmsuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbGluazpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rOmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluayAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluayAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluayAu''@;'; put 'put ''YnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluayAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXByaW1hcnku''@;'; put 'put ''YnRuLC5idG4tbGluay1wcmltYXJ5IC5idG4sLmJ0bi1saW5rLXByaW1hcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXByaW1hcnkgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXBy''@;'; put 'put ''aW1hcnktYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5IGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFs''@;'; put 'put ''ZXJ0LWl0ZW0gLmJ0bi1saW5rLXByaW1hcnkuYnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmstcHJpbWFyeSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1wcmltYXJ5LmJ0biBjbHItaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYnRuIGNkcy1pY29uLC5i''@;'; put 'put ''dG4tbGluay1wcmltYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1wcmltYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstcHJp''@;'; put 'put ''bWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstcHJpbWFyeSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWNvbG9yKX0uYnRuLmJ0bi1saW5rLXBy''@;'; put 'put ''aW1hcnk6aG92ZXIsLmJ0bi1saW5rLXByaW1hcnkgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay1wcmlt''@;'; put 'put ''YXJ5OmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWxpbmstcHJpbWFyeTpob3ZlciBjbHItaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnkt''@;'; put 'put ''aG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstcHJpbWFyeTphY3RpdmUsLmJ0bi1saW5rLXByaW1hcnkgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5''@;'; put 'put ''LWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5OmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXByaW1hcnk6YWN0aXZlIGNsci1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46YWN0aXZlIGNsci1p''@;'; put 'put ''Y29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5LmRpc2FibGVkLC5idG4uYnRuLWxpbmstcHJpbWFyeTpkaXNhYmxlZCwuYnRuLWxpbmstcHJpbWFyeSAuYnRuLmRpc2FibGVkLC5idG4tbGluay1wcmltYXJ5IC5i''@;'; put 'put ''dG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWJ0bi1saW5rLXByaW1hcnktZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXByaW1hcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1wcmltYXJ5LmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbmstcHJpbWFyeTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRu''@;'; put 'put ''LmJ0bi1saW5rLXByaW1hcnk6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1s''@;'; put 'put ''aW5rLXByaW1hcnkgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXN1Y2Nlc3MuYnRuLC5idG4tbGlu''@;'; put 'put ''ay1zdWNjZXNzIC5idG4sLmJ0bi1saW5rLXN1Y2Nlc3MgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtYm9yZGVy''@;'; put 'put ''LWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0''@;'; put 'put ''bi1saW5rLXN1Y2Nlc3MuYnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmstc3VjY2VzcyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1zdWNjZXNzLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuIGNkcy1pY29uLC5idG4tbGluay1zdWNj''@;'; put 'put ''ZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1zdWNjZXNzIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstc3VjY2VzcyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXN1Y2Nlc3M6aG92ZXIs''@;'; put 'put ''LmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzOmhvdmVyIGNk''@;'; put 'put ''cy1pY29uLC5idG4uYnRuLWxpbmstc3VjY2Vzczpob3ZlciBjbHItaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtaG92ZXItY29sb3Ip''@;'; put 'put ''fS5idG4uYnRuLWxpbmstc3VjY2VzczphY3RpdmUsLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWFjdGl2ZS1jb2xv''@;'; put 'put ''cil9LmJ0bi5idG4tbGluay1zdWNjZXNzOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXN1Y2Nlc3M6YWN0aXZlIGNsci1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tbGluay1zdWNjZXNzLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzLmRpc2FibGVkLC5idG4uYnRuLWxpbmstc3VjY2VzczpkaXNhYmxlZCwuYnRuLWxpbmstc3VjY2VzcyAuYnRuLmRpc2FibGVkLC5idG4tbGluay1zdWNjZXNzIC5idG46ZGlzYWJsZWR7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1''@;'; put 'put ''Y2Nlc3MtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXN1Y2Nlc3MuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1zdWNjZXNzLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbmstc3VjY2VzczpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXN1''@;'; put 'put ''Y2Nlc3M6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3Mg''@;'; put 'put ''LmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXdhcm5pbmcuYnRuLC5idG4tbGluay13YXJuaW5nIC5i''@;'; put 'put ''dG4sLmJ0bi1saW5rLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctYm9yZGVyLWNvbG9yKTtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXdhcm5p''@;'; put 'put ''bmcuYnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmstd2FybmluZyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay13YXJuaW5nLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuIGNkcy1pY29uLC5idG4tbGluay13YXJuaW5nIC5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay13YXJuaW5nIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLXdhcm5pbmcgLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5h''@;'; put 'put ''bGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstd2FybmluZyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXdhcm5pbmc6aG92ZXIsLmJ0bi1saW5rLXdh''@;'; put 'put ''cm5pbmcgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nOmhvdmVyIGNkcy1pY29uLC5idG4u''@;'; put 'put ''YnRuLWxpbmstd2FybmluZzpob3ZlciBjbHItaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctaG92ZXItY29sb3IpfS5idG4uYnRuLWxp''@;'; put 'put ''bmstd2FybmluZzphY3RpdmUsLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4t''@;'; put 'put ''bGluay13YXJuaW5nOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXdhcm5pbmc6YWN0aXZlIGNsci1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''bGluay13YXJuaW5nLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nLmRpc2FibGVkLC5idG4uYnRuLWxpbmstd2FybmluZzpkaXNhYmxlZCwuYnRuLWxpbmstd2FybmluZyAuYnRuLmRpc2FibGVkLC5idG4tbGluay13YXJuaW5nIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJs''@;'; put 'put ''ZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXdhcm5pbmcuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay13YXJuaW5nLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbmstd2FybmluZzpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXdhcm5pbmc6ZGlzYWJs''@;'; put 'put ''ZWQgY2xyLWljb24sLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bjpkaXNhYmxl''@;'; put 'put ''ZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay1kYW5nZXIsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyLmJ0biwuYnRuLWxpbmstZGFuZ2VyIC5idG4sLmJ0bi1saW5rLWRh''@;'; put 'put ''bmdlciAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1idG4tbGluay1kYW5nZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLWRhbmdlci5idG4gY2RzLWljb24sLmJ0bi5i''@;'; put 'put ''dG4tbGluay1kYW5nZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4g''@;'; put 'put ''Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuIGNsci1pY29uLC5idG4tbGluay1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLWRhbmdlciAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyOmhvdmVyLC5idG4tbGluay1kYW5nZXIgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tbGluay1kYW5nZXItaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWxpbmstZGFuZ2VyOmhvdmVyIGNsci1pY29uLC5idG4t''@;'; put 'put ''bGluay1kYW5nZXIgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay1kYW5nZXI6YWN0aXZlLC5idG4tbGluay1kYW5nZXIgLmJ0bjph''@;'; put 'put ''Y3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLWRh''@;'; put 'put ''bmdlcjphY3RpdmUgY2xyLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1saW5rLWRhbmdlci5k''@;'; put 'put ''aXNhYmxlZCwuYnRuLmJ0bi1saW5rLWRhbmdlcjpkaXNhYmxlZCwuYnRuLWxpbmstZGFuZ2VyIC5idG4uZGlzYWJsZWQsLmJ0bi1saW5rLWRhbmdlciAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dl''@;'; put 'put ''ZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbGluay1kYW5nZXIuZGlzYWJsZWQgY2RzLWljb24s''@;'; put 'put ''LmJ0bi5idG4tbGluay1kYW5nZXIuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbGluay1kYW5nZXI6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1kYW5nZXI6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGlu''@;'; put 'put ''ay1kYW5nZXIgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItZGlzYWJsZWQtY29sb3IpfS5idG4u''@;'; put 'put ''YnRuLWxpbmstbmV1dHJhbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1uZXV0cmFsLmJ0biwuYnRuLWxpbmstbmV1dHJhbCAuYnRuLC5idG4tbGluay1uZXV0cmFsIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVy''@;'; put 'put ''dC1pdGVtIC5idG4tbGluay1uZXV0cmFsIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5l''@;'; put 'put ''dXRyYWwtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1uZXV0cmFsLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLW5ldXRyYWwgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRuLWxpbmstbmV1dHJhbC5idG4gY2xyLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0biBjZHMtaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstbmV1''@;'; put 'put ''dHJhbCAuYnRuIGNkcy1pY29uLC5idG4tbGluay1uZXV0cmFsIC5idG4gY2xyLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLW5ldXRyYWwgLmJ0biBj''@;'; put 'put ''bHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1jb2xvcil9LmJ0bi5idG4tbGluay1uZXV0cmFsOmhvdmVyLC5idG4tbGluay1uZXV0cmFsIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1ob3Zlci1iZy1jb2xvcik7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbDpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLW5ldXRyYWw6aG92ZXIgY2xyLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWxp''@;'; put 'put ''bmstbmV1dHJhbCAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLW5ldXRyYWw6YWN0aXZlLC5idG4tbGluay1uZXV0cmFsIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1saW5rLW5ldXRyYWwtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbDphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbGluay1uZXV0cmFsOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWxpbmst''@;'; put 'put ''bmV1dHJhbCAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbC5kaXNhYmxlZCwuYnRuLmJ0bi1saW5rLW5ldXRy''@;'; put 'put ''YWw6ZGlzYWJsZWQsLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLWxpbmstbmV1dHJhbC1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbGluay1uZXV0cmFsLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWxpbmstbmV1dHJh''@;'; put 'put ''bC5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1saW5rLW5ldXRyYWw6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1uZXV0cmFsOmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1uZXV0cmFsIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bi5k''@;'; put 'put ''aXNhYmxlZCBjbHItaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluay1uZXV0cmFsIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWludmVyc2Us''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVyc2UuYnRuLC5idG4taW52ZXJzZSAuYnRuLC5idG4taW52ZXJzZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVyc2UgLmJ0bntib3JkZXIt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jb2xvcil9LmJ0bi5idG4taW52ZXJzZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1pdGVtIC5idG4taW52ZXJzZS5idG4gY2RzLWljb24sLmJ0bi5idG4taW52ZXJzZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW52ZXJzZS5idG4gY2xyLWljb24sLmJ0bi1pbnZlcnNlIC5idG4gY2RzLWljb24sLmJ0bi1pbnZlcnNlIC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW52ZXJzZSAuYnRuIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuIGNsci1pY29uLC5idG4taW52ZXJzZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVt''@;'; put 'put ''IC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVyc2UgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY29sb3IpfS5idG4uYnRuLWludmVyc2U6aG92ZXIsLmJ0bi1pbnZlcnNlIC5idG46aG92ZXJ7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4taW52ZXJzZTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1pbnZlcnNlOmhvdmVyIGNsci1pY29uLC5idG4taW52ZXJzZSAuYnRu''@;'; put 'put ''OmhvdmVyIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4taW52ZXJzZTphY3RpdmUsLmJ0bi1pbnZlcnNlIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWJ0bi1pbnZlcnNlLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4taW52ZXJzZTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4taW52ZXJzZTphY3RpdmUgY2xyLWljb24sLmJ0bi1pbnZlcnNlIC5idG46YWN0aXZlIGNk''@;'; put 'put ''cy1pY29uLC5idG4taW52ZXJzZSAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1pbnZlcnNlLmRpc2FibGVkLC5idG4uYnRuLWludmVyc2U6ZGlzYWJsZWQsLmJ0bi1pbnZlcnNlIC5idG4uZGlzYWJsZWQsLmJ0''@;'; put 'put ''bi1pbnZlcnNlIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWludmVyc2UtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1pbnZlcnNlLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWludmVyc2UuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4taW52ZXJzZTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1pbnZlcnNlOmRpc2Fi''@;'; put 'put ''bGVkIGNsci1pY29uLC5idG4taW52ZXJzZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4taW52ZXJzZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tc20sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5idG4tc20gLmJ0bntmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC1zaXpl''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0xKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOmNhbGMoLjIqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtoZWlnaHQ6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodCk7cGFkZGluZzp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtcGFkZGluZyl9LmJ0bi1ibG9ja3tkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJX0uYnRuLC5hbGVydC1hcHAtbGV2ZWwg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gLmJ0bnttYXJnaW46dmFyKC0tY2xyLWJ0bi12ZXJ0aWNhbC1tYXJnaW4pIHZhcigtLWNsci1idG4taG9yaXpvbnRhbC1tYXJnaW4pIHZhcigtLWNsci1idG4tdmVydGljYWwtbWFyZ2luKSAwfS5idG4uYnRuLWxpbmssLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRuLWxpbmsuYnRue21hcmdpbi1yaWdodDowfS5idG4uYnRuLWxpbmsuYnRuLWludmVyc2V7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5idG4tc206bm90KC5idG4tbGluaykgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOm5vdCguYnRuLWxpbmspIGNsci1p''@;'; put 'put ''Y29ue3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLGNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSksMCl9LmJ0bi1zbTpub3QoLmJ0bi1saW5rKSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46bm90KC5idG4tbGluaykgY2xyLWljb24sLmJ0bi1zbTpu''@;'; put 'put ''b3QoLmJ0bi1saW5rKSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46bm90KC5idG4tbGluaykgY2RzLWljb257aGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1z''@;'; put 'put ''dGFuZGFyZC1pY29uLXNpemUpfS5idG4taWNvbnttaW4td2lkdGg6MH0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGV7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWJnLWNv''@;'; put 'put ''bG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY29sb3IpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZSBjZHMtaWNvbiwuYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNvbG9yKX0uYnRu''@;'; put 'put ''LWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1ob3Zlci1jb2xvcil9LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xl''@;'; put 'put ''OmhvdmVyIGNkcy1pY29uLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItY29sb3IpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmV7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLWxpbmstYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYWN0aXZlLWNvbG9yKX0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6YWN0aXZlIGNkcy1pY29uLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2ds''@;'; put 'put ''ZTphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcil9LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlLmRpc2FibGVkLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLWxpbmstZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5idG4tZ3JvdXAu''@;'; put 'put ''YnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZS5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGUuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkIGNkcy1pY29uLC5idG4tZ3JvdXAu''@;'; put 'put ''YnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtY29sb3IpfS5idG4tZ3JvdXAuYnRuLXNtIC5idG4tZ3JvdXAtb3ZlcmZsb3c+LmRyb3Bkb3duLXRvZ2dsZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1p''@;'; put 'put ''dGVtIC5idG4tZ3JvdXAuYnRuIC5idG4tZ3JvdXAtb3ZlcmZsb3c+LmRyb3Bkb3duLXRvZ2dsZXtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0x''@;'; put 'put ''KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOmNhbGMoLjIqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtoZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdo''@;'; put 'put ''dCk7cGFkZGluZzp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtcGFkZGluZyl9LmNoZWNrYm94LmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4sLmNoZWNrYm94LWlubGluZS5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuY2hl''@;'; put 'put ''Y2tib3gtaW5saW5lLmJ0biwucmFkaW8uYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biwucmFkaW8taW5saW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5yYWRpby1pbmxpbmUuYnRue3BhZGRpbmc6MH0uY2hlY2tib3guYnRuIGxhYmVsLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0biBsYWJlbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGxhYmVsLC5yYWRpby5idG4gbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbSAucmFkaW8uYnRuIGxhYmVsLC5yYWRpby1pbmxpbmUuYnRuIGxhYmVsLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLnJhZGlvLWlubGluZS5idG4gbGFiZWx7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS01KTthbGlnbi1pdGVtczpjZW50ZXI7cGxhY2UtY29udGVudDpjZW50ZXI7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmUhaW1wb3J0YW50O3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5jaGVja2JveC5idG4uZGlzYWJsZWQgbGFiZWwsLmNoZWNrYm94LmJ0bjpkaXNhYmxl''@;'; put 'put ''ZCBsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bjpkaXNhYmxlZCBsYWJlbCwucmFkaW8uYnRuLmRpc2FibGVkIGxhYmVsLC5yYWRpby5idG46ZGlzYWJsZWQgbGFiZWwsLnJhZGlvLWlubGluZS5idG4uZGlzYWJsZWQgbGFiZWws''@;'; put 'put ''LnJhZGlvLWlubGluZS5idG46ZGlzYWJsZWQgbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YmVmb3JlLC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YWZ0ZXIsLmNoZWNrYm94LWlubGluZS5i''@;'; put 'put ''dG4gaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YmVmb3JlLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdK2xhYmVsOmFmdGVye2NvbnRlbnQ6bm9uZX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dK2xhYmVsOmJlZm9yZSwucmFkaW8uYnRuIGlucHV0W3R5''@;'; put 'put ''cGU9cmFkaW9dK2xhYmVsOmFmdGVyLC5yYWRpby1pbmxpbmUuYnRuIGlucHV0W3R5cGU9cmFkaW9dK2xhYmVsOmJlZm9yZSwucmFkaW8taW5saW5lLmJ0biBpbnB1dFt0eXBlPXJhZGlvXStsYWJlbDphZnRlcntjb250ZW50Om5vbmV9LmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94''@;'; put 'put ''XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQt''@;'; put 'put ''Y29sb3IpfS5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06''@;'; put 'put ''Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRu''@;'; put 'put ''LWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1jb2xvcil9LmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2ti''@;'; put 'put ''b3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNo''@;'; put 'put ''ZWNrZWQtaG92ZXItY29sb3IpfS5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRu''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LmNoZWNrYm94LmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG46ZGlzYWJsZWQgaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtYmctY29sb3IpfS5jaGVja2JveC5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG46''@;'; put 'put ''ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmRpc2FibGVkIGlucHV0W3R5''@;'; put 'put ''cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKX0uY2hlY2tib3guYnRuIGxhYmVsLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0biBsYWJl''@;'; put 'put ''bCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGxhYmVse3dpZHRoOjEwMCV9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBl''@;'; put 'put ''PWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gu''@;'; put 'put ''YnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNo''@;'; put 'put ''ZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91''@;'; put 'put ''dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94''@;'; put 'put ''XTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2ti''@;'; put 'put ''b3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29u''@;'; put 'put ''LC5jaGVja2JveC5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZSBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBl''@;'; put 'put ''PWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hl''@;'; put 'put ''Y2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQr''@;'; put 'put ''bGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06''@;'; put 'put ''Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2Jv''@;'; put 'put ''eC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0''@;'; put 'put ''bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxp''@;'; put 'put ''bmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVj''@;'; put 'put ''a2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24s''@;'; put 'put ''LmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlu''@;'; put 'put ''bGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxp''@;'; put 'put ''bmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwu''@;'; put 'put ''Y2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpo''@;'; put 'put ''b3ZlcitsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''OmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVj''@;'; put 'put ''a2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxp''@;'; put 'put ''bmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5s''@;'; put 'put ''aW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVs''@;'; put 'put ''e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hl''@;'; put 'put ''Y2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFi''@;'; put 'put ''ZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hl''@;'; put 'put ''Y2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94''@;'; put 'put ''LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hl''@;'; put 'put ''Y2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29u''@;'; put 'put ''LC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xy''@;'; put 'put ''LWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5j''@;'; put 'put ''bHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlu''@;'; put 'put ''cHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeSBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbyBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91''@;'; put 'put ''dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5i''@;'; put 'put ''dG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWlj''@;'; put 'put ''b24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpo''@;'; put 'put ''b3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1p''@;'; put 'put ''dGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItY29s''@;'; put 'put ''b3IpfS5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3Rp''@;'; put 'put ''dmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94''@;'; put 'put ''LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNr''@;'; put 'put ''Ym94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNo''@;'; put 'put ''ZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFj''@;'; put 'put ''dGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+''@;'; put 'put ''Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZSts''@;'; put 'put ''YWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''OmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNr''@;'; put 'put ''Ym94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1p''@;'; put 'put ''bmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5j''@;'; put 'put ''aGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29u''@;'; put 'put ''LC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWlj''@;'; put 'put ''b24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWlj''@;'; put 'put ''b24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZSts''@;'; put 'put ''YWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJp''@;'; put 'put ''bWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUu''@;'; put 'put ''YnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2Rz''@;'; put 'put ''LWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNv''@;'; put 'put ''biwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25k''@;'; put 'put ''YXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNr''@;'; put 'put ''Ym94LmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXByaW1h''@;'; put 'put ''cnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91''@;'; put 'put ''dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlz''@;'; put 'put ''YWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVk''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4u''@;'; put 'put ''ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNr''@;'; put 'put ''Ym94LmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxl''@;'; put 'put ''ZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJl''@;'; put 'put ''bCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94''@;'; put 'put ''XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5s''@;'; put 'put ''aW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFs''@;'; put 'put ''ZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94''@;'; put 'put ''LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVse2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1j''@;'; put 'put ''aGVja2VkLWRpc2FibGVkLWJnLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06''@;'; put 'put ''Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hl''@;'; put 'put ''Y2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNk''@;'; put 'put ''cy1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNr''@;'; put 'put ''Ym94LmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXBy''@;'; put 'put ''aW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5i''@;'; put 'put ''dG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5j''@;'; put 'put ''aGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJl''@;'; put 'put ''bD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlu''@;'; put 'put ''cHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFy''@;'; put 'put ''eS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0''@;'; put 'put ''bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xh''@;'; put 'put ''YmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3guYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1p''@;'; put 'put ''bmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNk''@;'; put 'put ''cy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVs''@;'; put 'put ''PmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xh''@;'; put 'put ''YmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLmRpc2FibGVkIGlucHV0W3R5''@;'; put 'put ''cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbzpkaXNhYmxlZCBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lOmRp''@;'; put 'put ''c2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''LmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWlj''@;'; put 'put ''b24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGlu''@;'; put 'put ''ZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxp''@;'; put 'put ''bmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1j''@;'; put 'put ''aGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNv''@;'; put 'put ''bmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gt''@;'; put 'put ''aW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFi''@;'; put 'put ''ZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZS5k''@;'; put 'put ''aXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29u''@;'; put 'put ''LC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG46ZGlzYWJsZWQgaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVy''@;'; put 'put ''dC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNs''@;'; put 'put ''ci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9y''@;'; put 'put ''KX0uY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJp''@;'; put 'put ''bWFyeS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnkgaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc3VjY2Vz''@;'; put 'put ''cyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zdWNjZXNzIGlu''@;'; put 'put ''cHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zdWNjZXNzIGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4td2Fy''@;'; put 'put ''bmluZyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY2hlY2tlZC1iZy1jb2xvcik7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNk''@;'; put 'put ''cy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCts''@;'; put 'put ''YWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNr''@;'; put 'put ''Ym94LWlubGluZS5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCts''@;'; put 'put ''YWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1jaGVja2VkLWNvbG9yKX0u''@;'; put 'put ''Y2hlY2tib3guYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1saW5rIGlu''@;'; put 'put ''cHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94''@;'; put 'put ''LmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY2hlY2tl''@;'; put 'put ''ZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLWludmVyc2UgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWludmVyc2UgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1iZy1jb2xvcik7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1k''@;'; put 'put ''ZWZhdWx0LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hl''@;'; put 'put ''Y2tlZC1ob3Zlci1jb2xvcil9LnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hl''@;'; put 'put ''Y2tlZC1ob3Zlci1jb2xvcil9LnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNr''@;'; put 'put ''ZWQtYWN0aXZlLWNvbG9yKX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNo''@;'; put 'put ''ZWNrZWQtYWN0aXZlLWNvbG9yKX0ucmFkaW8uYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2Fi''@;'; put 'put ''bGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWJnLWNvbG9yKX0ucmFkaW8uYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5kaXNhYmxlZCBpbnB1dFt0''@;'; put 'put ''eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtY29sb3IpfS5yYWRpby5idG4gbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGxhYmVse3dpZHRoOjEwMCV9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106''@;'; put 'put ''Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUt''@;'; put 'put ''c2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1y''@;'; put 'put ''YWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQt''@;'; put 'put ''Y2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4taW5m''@;'; put 'put ''byBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWlj''@;'; put 'put ''b24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0''@;'; put 'put ''bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1y''@;'; put 'put ''YWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5j''@;'; put 'put ''ZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0''@;'; put 'put ''bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0''@;'; put 'put ''bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91''@;'; put 'put ''dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKX0u''@;'; put 'put ''cmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVj''@;'; put 'put ''a2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLnJhZGlvLmJ0''@;'; put 'put ''bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRb''@;'; put 'put ''dHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlv''@;'; put 'put ''XTpjaGVja2VkOmhvdmVyK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRb''@;'; put 'put ''dHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIr''@;'; put 'put ''bGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0''@;'; put 'put ''bi1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5l''@;'; put 'put ''IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1''@;'; put 'put ''dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJh''@;'; put 'put ''ZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106''@;'; put 'put ''Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBl''@;'; put 'put ''PXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlu''@;'; put 'put ''cHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9d''@;'; put 'put ''OmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItY29sb3IpfS5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvIGlu''@;'; put 'put ''cHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xh''@;'; put 'put ''YmVsLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRp''@;'; put 'put ''by5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZl''@;'; put 'put ''LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtY29sb3IpfS5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRb''@;'; put 'put ''dHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xh''@;'; put 'put ''YmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRu''@;'; put 'put ''LmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXNl''@;'; put 'put ''Y29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxp''@;'; put 'put ''bmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNv''@;'; put 'put ''bmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lIGlu''@;'; put 'put ''cHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8t''@;'; put 'put ''b3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVm''@;'; put 'put ''YXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlv''@;'; put 'put ''LmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9d''@;'; put 'put ''OmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRu''@;'; put 'put ''LXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6''@;'; put 'put ''ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1y''@;'; put 'put ''YWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFi''@;'; put 'put ''ZWwsLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwu''@;'; put 'put ''cmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRp''@;'; put 'put ''by5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVj''@;'; put 'put ''a2VkLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWJnLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFk''@;'; put 'put ''aW8uYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNv''@;'; put 'put ''bmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBl''@;'; put 'put ''PXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2Rz''@;'; put 'put ''LWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0''@;'; put 'put ''bi1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZS5k''@;'; put 'put ''aXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNh''@;'; put 'put ''YmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2Fi''@;'; put 'put ''bGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNh''@;'; put 'put ''YmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2Fi''@;'; put 'put ''bGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVk''@;'; put 'put ''IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQg''@;'; put 'put ''aW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVk''@;'; put 'put ''IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgaW5w''@;'; put 'put ''dXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGlu''@;'; put 'put ''ZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5i''@;'; put 'put ''dG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNv''@;'; put 'put ''biwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNk''@;'; put 'put ''cy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY2hlY2tlZC1iZy1jb2xvcik7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWlj''@;'; put 'put ''b257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigt''@;'; put 'put ''LWNsci1idG4td2FybmluZy1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4td2FybmluZy1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tZGFuZ2VyLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nl''@;'; put 'put ''c3Mtb3V0bGluZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJh''@;'; put 'put ''ZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9''@;'; put 'put ''cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4td2FybmluZy1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVt''@;'; put 'put ''IC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNoZWNrZWQtYmct''@;'; put 'put ''Y29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXdhcm5pbmctb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxl''@;'; put 'put ''cnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4td2FybmluZy1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5h''@;'; put 'put ''bGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcg''@;'; put 'put ''aW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1kYW5nZXItb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1kYW5nZXItb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtZGFuZ2VyIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0''@;'; put 'put ''bi5idG4tb3V0bGluZS1kYW5nZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4u''@;'; put 'put ''YnRuLWxpbmsgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi1pbnZlcnNlLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW52ZXJz''@;'; put 'put ''ZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWNvbG9yKX0uYnRuLWdyb3Vwe2Rpc3BsYXk6aW5saW5lLWZsZXg7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LmJ0bi1ncm91''@;'; put 'put ''cCBjbHItZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtib3JkZXItcmFkaXVzOjB9LmJ0bi1ncm91cCBjbHItZHJvcGRvd246bGFzdC1jaGlsZCAuZHJvcGRvd24tdG9nZ2xle2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWNsci1idG4tYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLWJvdHRv''@;'; put 'put ''bS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzKX0uYnRuLWdyb3VwIC5idG57bWFyZ2luOjA7b3ZlcmZsb3c6aGlkZGVufS5idG4tZ3JvdXAgLmJ0biBsYWJlbHtoZWlnaHQ6MTAwJX0uYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1yYWRpb106aG92ZXIsLmJ0bi1n''@;'; put 'put ''cm91cCAuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmhvdmVye2FwcGVhcmFuY2U6bm9uZTtvcGFjaXR5OjE7dG9wOjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtib3JkZXI6SGlnaGxpZ2h0IHNvbGlkIDJweH0uYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1yYWRpb106aG92ZXI6Oi1tcy1j''@;'; put 'put ''aGVjaywuYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06aG92ZXI6Oi1tcy1jaGVja3tkaXNwbGF5Om5vbmV9LmJ0bi1ncm91cCAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmJ0bi1n''@;'; put 'put ''cm91cCAuYnRuOm5vdCg6bGFzdC1jaGlsZCl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5idG4tZ3JvdXAgLmJ0bjpkaXNhYmxlZDpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci1yaWdodDpub25lfS5idG4tZ3JvdXAgLnRvb2x0aXA6bm90''@;'; put 'put ''KDpmaXJzdC1jaGlsZCkgLmJ0bntib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5idG4tZ3JvdXAgLnRvb2x0aXA6bm90KDpsYXN0LWNoaWxkKSAuYnRue2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRp''@;'; put 'put ''dXM6MH0uYnRuLWdyb3VwLmJ0bi1wcmltYXJ5IC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCk+LmJ0biwuYnRuLWdyb3VwLmJ0bi1wcmltYXJ5Pi5idG46bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0bi1uZXV0cmFsIC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCk+LmJ0biwuYnRuLWdy''@;'; put 'put ''b3VwLmJ0bi1uZXV0cmFsPi5idG46bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0bi1zdWNjZXNzIC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCk+LmJ0biwuYnRuLWdyb3VwLmJ0bi1zdWNjZXNzPi5idG46bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0bi1kYW5nZXIgLnRvb2x0''@;'; put 'put ''aXA6bm90KDpsYXN0LWNoaWxkKT4uYnRuLC5idG4tZ3JvdXAuYnRuLWRhbmdlcj4uYnRuOm5vdCg6bGFzdC1jaGlsZCksLmJ0bi1ncm91cC5idG4td2FybmluZyAudG9vbHRpcDpub3QoOmxhc3QtY2hpbGQpPi5idG4sLmJ0bi1ncm91cC5idG4td2FybmluZz4uYnRuOm5vdCg6bGFzdC1jaGls''@;'; put 'put ''ZCl7bWFyZ2luOjAgdmFyKC0tY2xyLWJ0bi1ib3JkZXItd2lkdGgpIDAgMH0uYnRuLWdyb3VwPi5idG4tZ3JvdXAtb3ZlcmZsb3d7cG9zaXRpb246cmVsYXRpdmV9LmJ0bi1ncm91cD4uYnRuLWdyb3VwLW92ZXJmbG93Omxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCk+LmJ0bjpmaXJzdC1j''@;'; put 'put ''aGlsZHtib3JkZXItcmFkaXVzOjAgdmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzKSB2YXIoLS1jbHItYnRuLWJvcmRlci1yYWRpdXMpIDB9LmJ0bi1ncm91cD4uYnRuLWdyb3VwLW92ZXJmbG93Omxhc3QtY2hpbGQ6Zmlyc3QtY2hpbGQ+LmJ0bjpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVz''@;'; put 'put ''OnZhcigtLWNsci1idG4tYm9yZGVyLXJhZGl1cyl9LmJ0bi1ncm91cCAuYnRuOm5vdChbZGlzYWJsZWRdKSsuYnRue2JvcmRlci1sZWZ0Om5vbmV9LmJ0bi1ncm91cCAudG9vbHRpcDpub3QoOmZpcnN0LWNoaWxkKSAuYnRue2JvcmRlci1sZWZ0Om5vbmV9LmJ0bi1ncm91cCAuYnRuOm5vdChb''@;'; put 'put ''ZGlzYWJsZWRdKSsuYnRuLWdyb3VwLW92ZXJmbG93IC5idG57Ym9yZGVyLWxlZnQ6bm9uZX0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGUsLmJ0bi1ncm91cC5idG4taWNvbi1saW5rLmJ0bi1saW5rIC5idG4sLmJ0bi1ncm91cC5idG4taWNvbiAuYnRue21pbi13aWR0aDow''@;'; put 'put ''fS5idG4tZ3JvdXAgLmNsci1pY29uLXRpdGxle2Rpc3BsYXk6bm9uZTt0ZXh0LXRyYW5zZm9ybTpub25lfS5idG4tZ3JvdXAgLmRyb3Bkb3duLXRvZ2dsZXtkaXNwbGF5OmJsb2NrfS5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgY2RzLWljb24sLmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudSBj''@;'; put 'put ''bHItaWNvbntkaXNwbGF5Om5vbmV9LmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudSAuY2xyLWljb24tdGl0bGV7ZGlzcGxheTppbmxpbmV9LmNoZWNrYm94LC5yYWRpb3twb3NpdGlvbjpyZWxhdGl2ZX0uY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0sLmNoZWNrYm94IGlucHV0W3R5cGU9''@;'; put 'put ''cmFkaW9dLC5yYWRpbyBpbnB1dFt0eXBlPWNoZWNrYm94XSwucmFkaW8gaW5wdXRbdHlwZT1yYWRpb117Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2hlaWdodDowO3dpZHRoOjA7b3BhY2l0eTowfS5kcm9wZG93bi1tZW51LmNsci1idXR0b24tZ3JvdXAt''@;'; put 'put ''bWVudXt2aXNpYmlsaXR5OnZpc2libGV9YnV0dG9uLmNsb3Nle3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0uY2xvc2V7ZmxvYXQ6cmlnaHQ7Zm9udC1zaXplOjEuOHJlbTt0cmFuc2l0aW9uOmNvbG9yIGxp''@;'; put 'put ''bmVhciAuMnM7Zm9udC13ZWlnaHQ6MjAwO3RleHQtc2hhZG93Om5vbmU7bGluZS1oZWlnaHQ6aW5oZXJpdDtjb2xvcjp2YXIoLS1jbHItY2xvc2UtY29sb3IpfS5jbG9zZSBjZHMtaWNvbiwuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItY2xvc2UtY29sb3IpfS5jbG9zZTpob3Zlcntj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItY2xvc2UtY29sb3ItaG92ZXIpfS5jbG9zZTpob3ZlciBjZHMtaWNvbiwuY2xvc2U6aG92ZXIgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItY2xvc2UtY29sb3ItaG92ZXIpfS5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWNsb3NlLWNvbG9yLWFjdGl2ZSl9LmNs''@;'; put 'put ''b3NlOmFjdGl2ZSBjZHMtaWNvbiwuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWNsb3NlLWNvbG9yLWFjdGl2ZSl9LmNsb3NlOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5lLWNvbG9yOi13ZWJraXQt''@;'; put 'put ''Zm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1hbGVydC1ib3JkZXJyYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEw''@;'; put 'put ''MCk7LS1jbHItYXBwLWFsZXJ0LXBhZ2VyLXdpZHRoOmNhbGMoMTQ0ICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItYWxlcnQtYWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYWxlcnQtYWN0aW9uLWFjdGl2ZS1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItYWxlcnQtY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWNvbG9yKTstLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1h''@;'; put 'put ''Y3Rpb24tYWN0aXZlLWNvbG9yKTstLWNsci1hcHAtbGV2ZWwtYWxlcnQtY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jbHItYXBwLWFsZXJ0LWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1sZXZlbC1hbGVydC1jb2xvcik7LS1jbHItYWxlcnQtaW5mby1iZy1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tdGludCk7LS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYWxlcnQtaW5mby1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTst''@;'; put 'put ''LWNsci1hbGVydC1pbmZvLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcik7LS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWFjdGl2ZS1jb2xvcik7LS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1jbG9zZS1pY29u''@;'; put 'put ''LWhvdmVyLWNvbG9yKTstLWNsci1hbGVydC1zdWNjZXNzLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcy10aW50KTstLWNsci1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1hbGVydC1zdWNj''@;'; put 'put ''ZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKTstLWNsci1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFs''@;'; put 'put ''ZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hbGVydC1hY3Rpb24tYWN0aXZlLWNv''@;'; put 'put ''bG9yKTstLWNsci1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWNsb3NlLWljb24taG92ZXItY29sb3IpOy0tY2xyLWFsZXJ0LXdhcm5pbmctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLXRpbnQpOy0tY2xyLWFsZXJ0''@;'; put 'put ''LXdhcm5pbmctZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWFsZXJ0LXdhcm5pbmctYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZyk7LS1jbHItYWxlcnQtd2FybmluZy1pY29uLWNvbG9yOnZhcigtLWNsci1h''@;'; put 'put ''bGVydC13YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9y''@;'; put 'put ''KTstLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWFjdGlvbi1hY3RpdmUtY29sb3IpOy0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1h''@;'; put 'put ''bGVydC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItdGludCk7LS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1hbGVydC1kYW5nZXItYm9yZGVyLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci1hbGVydC1kYW5nZXItaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItZm9udC1jb2xvcik7LS1jbHIt''@;'; put 'put ''YWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hbGVydC1hY3Rpb24tYWN0aXZlLWNvbG9yKTstLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNv''@;'; put 'put ''bi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcik7LS1jbHItYWxlcnQtbmV1dHJhbC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludCk7LS1jbHItYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYWxlcnQtbmV1dHJhbC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1hbGVydC1uZXV0cmFsLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7LS1jbHItYWxl''@;'; put 'put ''cnQtbmV1dHJhbC1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWFjdGl2''@;'; put 'put ''ZS1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWFjdGl2ZS1jb2xvcik7LS1jbHItYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1iZy1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1hcHAtYWxlcnQtaW5mby1ib3JkZXItY29sb3I6bm9uZTstLWNsci1hcHAtYWxlcnQtaW5mby1pY29uLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVy''@;'; put 'put ''dC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZv''@;'; put 'put ''bnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZyk7LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1i''@;'; put 'put ''b3JkZXItY29sb3I6bm9uZTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250''@;'; put 'put ''LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29s''@;'; put 'put ''b3IpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLWFwcC1h''@;'; put 'put ''bGVydC1kYW5nZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItYm9yZGVyLWNvbG9yOm5vbmU7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWZv''@;'; put 'put ''bnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTst''@;'; put 'put ''LWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3Ip''@;'; put 'put ''Oy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWJv''@;'; put 'put ''cmRlci1jb2xvcjpub25lOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQt''@;'; put 'put ''Y29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xv''@;'; put 'put ''cik7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1hcHAt''@;'; put 'put ''YWxlcnQtbmV1dHJhbC1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYm9yZGVyLWNvbG9yOm5vbmU7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRy''@;'; put 'put ''YWwtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250''@;'; put 'put ''LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJh''@;'; put 'put ''bC1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtcGFnZXItdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWFwcC1hbGVydC1pbmZvLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mby1zaGFkZSk7LS1jbHItYXBw''@;'; put 'put ''LWFsZXJ0LXdhcm5pbmctcGFnZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLXNoYWRlKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXNoYWRlKTstLWNsci1hcHAtYWxlcnQtc3VjY2Vz''@;'; put 'put ''cy1wYWdlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3Mtc2hhZGUpOy0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbC1zaGFkZSk7LS1jbHItYXBwLWFsZXJ0LWluZm8tcGFnZXItZm9udC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLXBhZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1wYWdlci1mb250LWNvbG9yOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtcGFnZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1saWdodHdlaWdodC1hbGVydC1pbmZvLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1saWdodHdlaWdodC1hbGVydC1pbmZvLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAw''@;'; put 'put ''KTstLWNsci1saWdodHdlaWdodC1hbGVydC13YXJuaW5nLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcmspOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0t''@;'; put 'put ''Y2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LWRhbmdlci1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci1saWdodHdlaWdodC1hbGVydC1kYW5nZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxpZ2h0d2Vp''@;'; put 'put ''Z2h0LWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0''@;'; put 'put ''LW5ldXRyYWwtaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtc2hhZGUpOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApfS5hbGVydC1pY29ue2hlaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5hbGVydC1pY29uLXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtZmxleDtm''@;'; put 'put ''bGV4OjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5hbGVydC1pdGVte2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDpub3dyYXA7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpfS5hbGVydC1p''@;'; put 'put ''dGVtc3tmbGV4OjEgMSBhdXRvO2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2Rpc3BsYXk6ZmxleH0uYWxlcnQtaXRlbT5zcGFuLC5hbGVydC10ZXh0e2ZsZXg6MSAxO3RleHQt''@;'; put 'put ''YWxpZ246bGVmdDthbGlnbi1zZWxmOmNlbnRlcn0uYWxlcnR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0zKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OmNhbGMo''@;'; put 'put ''MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7d2lkdGg6YXV0''@;'; put 'put ''bztib3JkZXItcmFkaXVzOnZhcigtLWNsci1hbGVydC1ib3JkZXJyYWRpdXMpO3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KTtiYWNrZ3JvdW5kOnZhcigt''@;'; put 'put ''LWNsci1hbGVydC1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYWxlcnQtaW5mby1ib3JkZXItY29sb3IpfS5hbGVydCAuYWxl''@;'; put 'put ''cnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2RzLWljb24sLmFsZXJ0IC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5v''@;'; put 'put ''dCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0IC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWljb24tY29sb3IpfS5hbGVydCAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5m''@;'; put 'put ''by1hY3Rpb24tY29sb3IpfS5hbGVydCAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQg''@;'; put 'put ''LmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0IC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0''@;'; put 'put ''aW9uLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVy''@;'; put 'put ''dCAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2xyLWljb24sLmFsZXJ0IC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9''@;'; put 'put ''LmFsZXJ0IC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQgLmNsb3NlIGNkcy1pY29uLC5hbGVydCAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQgLmNsb3NlOmZv''@;'; put 'put ''Y3VzLC5hbGVydCAuY2xvc2U6aG92ZXIsLmFsZXJ0IC5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0IC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQgLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydCAuY2xv''@;'; put 'put ''c2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0IC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC5h''@;'; put 'put ''bGVydC1pbmZve2JhY2tncm91bmQ6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hbGVydC1pbmZv''@;'; put 'put ''LWJvcmRlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSl7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRn''@;'; put 'put ''ZSkgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtaWNvbntjb2xvcjp2YXIoLS1jbHItYWxl''@;'; put 'put ''cnQtaW5mby1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tYWN0''@;'; put 'put ''aXZlLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQuYWxl''@;'; put 'put ''cnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuIGNkcy1pY29uLC5h''@;'; put 'put ''bGVydC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZv''@;'; put 'put ''LWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5h''@;'; put 'put ''bGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93''@;'; put 'put ''bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2Ug''@;'; put 'put ''Y2RzLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlOmZvY3VzLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTpob3ZlciwuYWxlcnQuYWxlcnQtaW5m''@;'; put 'put ''byAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8g''@;'; put 'put ''LmNsb3NlOmhvdmVyIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTphY3RpdmUgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQt''@;'; put 'put ''aW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1ib3JkZXItY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3Ip''@;'; put 'put ''fS5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nl''@;'; put 'put ''c3MtZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xle2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlv''@;'; put 'put ''bi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0biBjbHItaWNvbiwuYWxlcnQuYWxlcnQtc3Vj''@;'; put 'put ''Y2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24u''@;'; put 'put ''YnRuOmFjdGl2ZSwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0''@;'; put 'put ''LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlIGNkcy1pY29uLC5hbGVydC5h''@;'; put 'put ''bGVydC1zdWNjZXNzIC5jbG9zZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZTpmb2N1cywuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6aG92ZXIsLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3Mg''@;'; put 'put ''LmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC5hbGVy''@;'; put 'put ''dC1zdWNjZXNzIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2Zp''@;'; put 'put ''bGw6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcik7Ym9yZGVy''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctYm9yZGVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYWxl''@;'; put 'put ''cnQtd2FybmluZy1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxs''@;'; put 'put ''OnZhcigtLWNsci1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWljb24tY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb25zIC5kcm9wZG93biAuZHJvcGRv''@;'; put 'put ''d24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24sLmFsZXJ0LmFsZXJ0LXdhcm5p''@;'; put 'put ''bmcgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG4gY2xy''@;'; put 'put ''LWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQt''@;'; put 'put ''d2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG46''@;'; put 'put ''YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2ds''@;'; put 'put ''ZS5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5j''@;'; put 'put ''bG9zZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2U6Zm9jdXMsLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmhvdmVy''@;'; put 'put ''LC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTpmb2N1''@;'; put 'put ''cyBjbHItaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNs''@;'; put 'put ''b3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2Vy''@;'; put 'put ''LWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hbGVydC1kYW5nZXItYm9yZGVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Up''@;'; put 'put ''IGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9ucyAuZHJvcGRv''@;'; put 'put ''d24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLC5hbGVydC5hbGVy''@;'; put 'put ''dC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0biBjbHIt''@;'; put 'put ''aWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1kYW5n''@;'; put 'put ''ZXIgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBj''@;'; put 'put ''ZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2''@;'; put 'put ''ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5jbG9zZSBjZHMtaWNvbiwu''@;'; put 'put ''YWxlcnQuYWxlcnQtZGFuZ2VyIC5jbG9zZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMsLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIsLmFsZXJ0LmFsZXJ0LWRhbmdl''@;'; put 'put ''ciAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFsZXJ0LmFsZXJ0''@;'; put 'put ''LWRhbmdlciAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZh''@;'; put 'put ''cigtLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LW5ldXRyYWx7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtbmV1dHJhbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7Ym9yZGVyOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFsZXJ0LW5ldXRyYWwtYm9yZGVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtbmV1''@;'; put 'put ''dHJhbC1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxsOnZhcigt''@;'; put 'put ''LWNsci1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpfS5hbGVydCAuYWxlcnQtaXRlbT5zcGFuLC5hbGVydCAuYWxlcnQtaXRlbSAuYWxlcnQtdGV4dCwuYWxlcnQgLmFsZXJ0LWl0ZW0gLmFsZXJ0LWFjdGlvbnN7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIDB9LmFsZXJ0IC5h''@;'; put 'put ''bGVydC1pdGVtIC5jbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfS5hbGVydCAuYWxlcnQtaXRlbSAuY2xyLWljb24rLmFsZXJ0LXRleHR7''@;'; put 'put ''cGFkZGluZy1sZWZ0OjB9LmFsZXJ0IC5hbGVydC1pdGVtIC5jbHItaWNvbisuYWxlcnQtdGV4dDpiZWZvcmV7Y29udGVudDpub25lfS5hbGVydCAuYWxlcnQtYWN0aW9uc3tmbGV4OjAgMCBhdXRvO3doaXRlLXNwYWNlOm5vd3JhcH0uYWxlcnQgLmFsZXJ0LWFjdGlvbnM+LmFsZXJ0LWFjdGlv''@;'; put 'put ''bjpub3QoOmxhc3QtY2hpbGQpLC5hbGVydCAuYWxlcnQtYWN0aW9ucz4uZHJvcGRvd246bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uYWxlcnQgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duLWl0ZW17Y29sb3I6dmFyKC0tY2xyLWRyb3Bk''@;'; put 'put ''b3duLXRleHQtY29sb3IpfS5hbGVydCAuYWxlcnQtYWN0aW9uLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xle3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmFsZXJ0IC5hbGVydC1hY3Rpb24gYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7YmFja2dyb3VuZDowIDA7Y3Vyc29yOnBv''@;'; put 'put ''aW50ZXI7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLXRleHQtY29sb3IpfS5hbGVydCAuZHJvcGRvd24tdG9nZ2xlOm5vdCguYnRuKXtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MH0uYWxlcnQgLmNsb3Nle29yZGVyOjEwMDtmbGV4OjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2hlaWdo''@;'; put 'put ''dDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMH0uYWxlcnQgLmNsb3NlIGNkcy1pY29uLC5hbGVydCAuY2xvc2UgY2xyLWljb257aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmFsZXJ0IC5hbGVydC1zcGlubmVyLnNwaW5uZXItaW5saW5le2hlaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbjowfS5hbGVydCAuYWxlcnQtc3Bpbm5lci5zcGlubmVyLWlu''@;'; put 'put ''bGluZTpiZWZvcmUsLmFsZXJ0IC5hbGVydC1zcGlubmVyLnNwaW5uZXItaW5saW5lOmFmdGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi13aWR0''@;'; put 'put ''aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5hbGVydCAuY2xvc2V+LmFsZXJ0LWl0ZW0+LmFsZXJ0LWFjdGlvbnN7cGFkZGluZy1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5hbGVydCAuY2xvc2V+LmFsZXJ0LWl0ZW0+LmFsZXJ0LWFjdGlvbnM+LmFsZXJ0LWFjdGlvbjps''@;'; put 'put ''YXN0LWNoaWxke21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5hbGVydC5hbGVydC1saWdodHdlaWdodHtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MH0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1ze3BhZGRpbmc6MH0uYWxlcnQuYWxlcnQtbGlnaHR3''@;'; put 'put ''ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVte21pbi1oZWlnaHQ6MDttYXJnaW46MH0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtPnNwYW4sLmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0IC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSAuYWxlcnQt''@;'; put 'put ''YWN0aW9ucywuYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIC5hbGVydC10ZXh0e2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9k''@;'; put 'put ''eS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0IC5jbG9z''@;'; put 'put ''ZXtkaXNwbGF5Om5vbmV9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0Om5vdCguYWxlcnQtc20pIC5hbGVydC1pY29ue21hcmdpbjowfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1pbmZvIC5hbGVydC10ZXh0e2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC1pbmZvLWZv''@;'; put 'put ''bnQtY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1pbmZvIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC1pbmZvLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC13YXJuaW5nIC5hbGVydC10ZXh0e2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC13YXJuaW5nIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC13YXJuaW5nLWljb24tY29sb3IpfS5hbGVydC5hbGVy''@;'; put 'put ''dC1saWdodHdlaWdodC5hbGVydC1kYW5nZXIgLmFsZXJ0LXRleHR7Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1saWdodHdl''@;'; put 'put ''aWdodC1hbGVydC1kYW5nZXItaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LXRleHR7Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFsZXJ0''@;'; put 'put ''LXN1Y2Nlc3MgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LXRleHR7Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LW5ldXRy''@;'; put 'put ''YWwtZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LW5ldXRyYWwtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbHttYXJnaW46MDtib3JkZXI6MDtib3JkZXItcmFk''@;'; put 'put ''aXVzOjA7b3ZlcmZsb3cteTphdXRvO2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQg''@;'; put 'put ''dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWJvcmRlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRl''@;'; put 'put ''bXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFs''@;'; put 'put ''ZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24sLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9n''@;'; put 'put ''Z2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUu''@;'; put 'put ''YnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFs''@;'; put 'put ''ZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2UgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6''@;'; put 'put ''Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsIC5jbG9zZTpmb2N1cyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbCAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bnttYXJnaW46MH0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm97YmFja2dyb3VuZDp2''@;'; put 'put ''YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYm9yZGVyLWNv''@;'; put 'put ''bG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSl7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVy''@;'; put 'put ''dC1pbmZvIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFj''@;'; put 'put ''dGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0''@;'; put 'put ''LWluZm8tYWN0aW9uLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRu''@;'; put 'put ''IGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1j''@;'; put 'put ''b2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5i''@;'; put 'put ''dG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZXtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZv''@;'; put 'put ''LWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuY2xvc2U6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFs''@;'; put 'put ''ZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuY2xv''@;'; put 'put ''c2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmFjdGl2ZSBjbHIt''@;'; put 'put ''aWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlcntiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRh''@;'; put 'put ''bmdlci1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1ib3JkZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRl''@;'; put 'put ''bSBhOm5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFu''@;'; put 'put ''Z2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1k''@;'; put 'put ''YW5nZXItaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1h''@;'; put 'put ''bGVydC1kYW5nZXItYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1j''@;'; put 'put ''b2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcik7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpfS5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRu''@;'; put 'put ''OmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xv''@;'; put 'put ''c2V7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAt''@;'; put 'put ''YWxlcnQtZGFuZ2VyLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmFjdGl2ZXtjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LWRhbmdlciAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFse2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWJn''@;'; put 'put ''LWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWJvcmRlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5i''@;'; put 'put ''YWRnZSkgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1''@;'; put 'put ''dHJhbCAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWFjdGlvbi1hY3RpdmUtY29sb3IpfS5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAu''@;'; put 'put ''YWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24t''@;'; put 'put ''Y29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5kcm9wZG93bi10''@;'; put 'put ''b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0''@;'; put 'put ''LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1h''@;'; put 'put ''Y3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1h''@;'; put 'put ''cHAtYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtY2xv''@;'; put 'put ''c2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1h''@;'; put 'put ''cHAtYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5h''@;'; put 'put ''bGVydC1uZXV0cmFsIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQt''@;'; put 'put ''bmV1dHJhbCAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZ3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1iZy1jb2xv''@;'; put 'put ''cik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1ib3JkZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxl''@;'; put 'put ''cnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Up''@;'; put 'put ''IGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcg''@;'; put 'put ''LmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmct''@;'; put 'put ''YWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9n''@;'; put 'put ''Z2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZl''@;'; put 'put ''IGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBw''@;'; put 'put ''LWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlIGNkcy1pY29u''@;'; put 'put ''LC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0''@;'; put 'put ''LXdhcm5pbmcgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmZv''@;'; put 'put ''Y3VzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmhvdmVyIGNs''@;'; put 'put ''ci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXIt''@;'; put 'put ''Y29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJv''@;'; put 'put ''cmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1ib3JkZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nl''@;'; put 'put ''c3MtZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBj''@;'; put 'put ''bHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQt''@;'; put 'put ''c3VjY2VzcyAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1hY3RpdmUtY29sb3IpfS5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2Vz''@;'; put 'put ''cyAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rp''@;'; put 'put ''b24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5kcm9wZG93''@;'; put 'put ''bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFs''@;'; put 'put ''ZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVy''@;'; put 'put ''dC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3Nle2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1hcHAtYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3Mt''@;'; put 'put ''Y2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1hcHAtYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bC5hbGVydC1zdWNjZXNzIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxl''@;'; put 'put ''cnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW1ze2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNCl9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYWxlcnQtYWN0aW9uc3twYWRk''@;'; put 'put ''aW5nOjB9LmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2V7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgMH0uYWxlcnQtc20gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVte21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20gLmFsZXJ0LWljb24td3JhcHBl''@;'; put 'put ''cntkaXNwbGF5OmZsZXg7ZmxleC1iYXNpczp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5hbGVydC1zbSAuYWxlcnQtaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20gLmFsZXJ0LWl0ZW0+c3BhbiwuYWxlcnQtc20gLmFsZXJ0LWl0ZW0gLmFsZXJ0LXRleHQsLmFsZXJ0LXNtIC5hbGVydC1pdGVtIC5h''@;'; put 'put ''bGVydC1hY3Rpb25ze2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOjB9LmFsZXJ0LXNtIC5jbG9zZXttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAwfS5hbGVy''@;'; put 'put ''dC1zbSAuYWxlcnQtc3Bpbm5lci5zcGlubmVyLWlubGluZXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS03KX0uYWxlcnQtc20gLmFsZXJ0LXNwaW5uZXIuc3Bpbm5lci1pbmxpbmU6YmVmb3JlLC5hbGVydC1zbSAuYWxlcnQtc3Bpbm5lci5zcGlubmVyLWlubGluZTphZnRlcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcp''@;'; put 'put ''O21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHR7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjB9LmFsZXJ0LXNtLmFsZXJ0LWxpZ2h0d2VpZ2h0IC5hbGVydC1pdGVt''@;'; put 'put ''c3tnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVte3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAwfS5hbGVydC1zbS5hbGVydC1saWdodHdlaWdodCAuYWxlcnQtaXRlbXMgLmFs''@;'; put 'put ''ZXJ0LWl0ZW0+c3BhbiwuYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIC5hbGVydC1hY3Rpb25zLC5hbGVydC1zbS5hbGVydC1saWdodHdlaWdodCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gLmFsZXJ0LXRleHR7Zm9udC1zaXplOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXIt''@;'; put 'put ''c3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKX0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIC5hbGVydC1pY29uLXdyYXBwZXJ7ZmxleC1iYXNpczp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTcpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5hbGVydC1zbS5hbGVydC1saWdodHdlaWdodCAuY2xvc2V7ZGlzcGxheTpub25lfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHgpey5hbGVydCAuYWxlcnQtaXRlbXtmbGV4LXdyYXA6d3JhcH0uYWxlcnQgLmFs''@;'; put 'put ''ZXJ0LWl0ZW0gLmFsZXJ0LXRleHR7bWF4LXdpZHRoOjkwJTt3aWR0aDo5MCU7ZmxleC1iYXNpczo5MCV9LmFsZXJ0IC5hbGVydC1pdGVtIC5hbGVydC1hY3Rpb25ze2ZsZXg6MSAwIDEwMCV9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uc3ttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTEyKX19LmFsZXJ0LWhpZGRlbntkaXNwbGF5Om5vbmV9LmFsZXJ0cyAuYWxlcnR7bWFyZ2luLXRvcDowfS5hbGVydHMgLmFsZXJ0cy13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmFsZXJ0cyAuYWxlcnRzLXdyYXBwZXIgY2xyLWFsZXJ0e2ZsZXg6''@;'; put 'put ''MSAxIDEwMCV9LmFsZXJ0cy5hbGVydC1pbmZve2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLXBhZ2VyLWJnLWNvbG9yKX0uYWxlcnRzLmFsZXJ0LXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctcGFnZXItYmctY29sb3IpfS5hbGVydHMu''@;'; put 'put ''YWxlcnQtZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItcGFnZXItYmctY29sb3IpfS5hbGVydHMuYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1wYWdlci1iZy1jb2xvcil9LmFsZXJ0cy5hbGVydC1uZXV0cmFs''@;'; put 'put ''e2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWJnLWNvbG9yKX0uYWxlcnRzLXBhZ2Vye2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtcGFnZXItdGV4dC1jb2xvcik7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtmbGV4OjEgMCB2YXIo''@;'; put 'put ''LS1jbHItYXBwLWFsZXJ0LXBhZ2VyLXdpZHRoKX0uYWxlcnQtaW5mbyAuYWxlcnRzLXBhZ2Vye2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1wYWdlci1mb250LWNvbG9yKX0uYWxlcnQtd2FybmluZyAuYWxlcnRzLXBhZ2Vye2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2Fybmlu''@;'; put 'put ''Zy1wYWdlci1mb250LWNvbG9yKX0uYWxlcnQtZGFuZ2VyIC5hbGVydHMtcGFnZXJ7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0cy1wYWdlcntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtcGFn''@;'; put 'put ''ZXItZm9udC1jb2xvcil9LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0cy1wYWdlcntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0cy1wYWdlci1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1z''@;'; put 'put ''LWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1wYWdlci10ZXh0LWNvbG9yKTtjdXJzb3I6cG9p''@;'; put 'put ''bnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodCl9YnV0dG9uLmFsZXJ0cy1wYWdlci1idXR0b257Y3Vyc29yOnBvaW50ZXJ9LmFsZXJ0cy1wYWdlci1idXR0b24gY2RzLWljb24s''@;'; put 'put ''LmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1wYWdlci10ZXh0LWNvbG9yKX0uYWxlcnQtaW5mbyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjZHMtaWNvbiwuYWxlcnQtaW5mbyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjbHItaWNvbntjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0cy1wYWdlci1idXR0b24gY2RzLWljb24sLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5n''@;'; put 'put ''LXBhZ2VyLWZvbnQtY29sb3IpfS5hbGVydC1kYW5nZXIgLmFsZXJ0cy1wYWdlci1idXR0b24gY2RzLWljb24sLmFsZXJ0LWRhbmdlciAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1wYWdlci1mb250LWNvbG9yKX0uYWxlcnQt''@;'; put 'put ''c3VjY2VzcyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjZHMtaWNvbiwuYWxlcnQtc3VjY2VzcyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0cy1wYWdlci1i''@;'; put 'put ''dXR0b24gY2RzLWljb24sLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWZvbnQtY29sb3IpfS5hbGVydHMtcGFnZXItY29udHJvbHtkaXNwbGF5OmZsZXg7d2hpdGUtc3BhY2U6bm93cmFw''@;'; put 'put ''O2hlaWdodDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uYWxlcnRzLXBhZ2VyLWNvbnRyb2w+KntkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleDoxIDEgYXV0''@;'; put 'put ''b306cm9vdCBbY2RzLXRoZW1lXXstLWNsci1jYXJkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWNhcmQtZGl2aWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItY2FyZC10aXRsZS1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWNhcmQtdGl0bGUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpOy0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1jYXJkLWJvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApOy0tY2xyLWNhcmQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1jYXJkLWJveC1z''@;'; put 'put ''aGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMzAwKTstLWNsci1jYXJkLWNsaWNrYWJsZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItY2FyZC1jbGlja2FibGUtYm94LXNoYWRvdzow''@;'; put 'put ''IDAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHZhcigtLWNsci1jYXJkLWNsaWNrYWJsZS1ib3JkZXItY29sb3IpOy0tY2xyLWNhcmQtaGVhZGVyLXRpdGxlLWNvbG9yOnZhcigtLWNsci1jYXJkLXRpdGxlLWNvbG9yKTstLWNsci1jYXJkLWNvbnRlbnQtdGl0bGUtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWNhcmQtdGl0bGUtY29sb3IpOy0tY2xyLWNhcmQtdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApfS5jYXJke2JveC1zaGFkb3c6dmFyKC0tY2xyLWNhcmQtYm94LXNoYWRvdyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItY2FyZC1ib3JkZXItcmFk''@;'; put 'put ''aXVzKTtib3JkZXI6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItY2FyZC1ib3JkZXItY29sb3IpfS5jYXJkLmNsaWNrYWJsZTpob3Zlcntib3gtc2hhZG93OnZhcigtLWNsci1jYXJkLWNsaWNrYWJsZS1ib3gtc2hhZG93KTtib3JkZXI6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItY2FyZC1jbGlja2FibGUtYm9yZGVyLWNvbG9yKTtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt0cmFuc2l0aW9uOmJvcmRlciAuMnMgZWFzZSxib3gtc2hhZG93IC4ycyBlYXNlLHRyYW5zZm9y''@;'; put 'put ''bSAuMnMgZWFzZX0uY2FyZC1ibG9jayAuY2FyZC1kaXZpZGVyLC5jYXJkIC5jYXJkLXRpdGxlLC5jYXJkIC5jYXJkLXRleHQsLmNhcmQgLmNhcmQtbWVkaWEtYmxvY2ssLmNhcmQgLmxpc3QsLmNhcmQgLmxpc3QtdW5zdHlsZWR7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS03KX0uY2FyZC1ibG9jayAuY2FyZC1kaXZpZGVyOmxhc3QtY2hpbGQsLmNhcmQgLmNhcmQtdGl0bGU6bGFzdC1jaGlsZCwuY2FyZCAuY2FyZC10ZXh0Omxhc3QtY2hpbGQsLmNhcmQgLmNhcmQtbWVkaWEtYmxvY2s6bGFzdC1jaGlsZCwuY2FyZCAubGlzdDpsYXN0LWNo''@;'; put 'put ''aWxkLC5jYXJkIC5saXN0LXVuc3R5bGVkOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5jYXJkLmNhcmQtaW1nPmltZywuY2FyZD4uY2FyZC1pbWc6Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZD5pbWcsLmNhcmQtaW1nPmltZ3tkaXNwbGF5OmJsb2NrO2hlaWdodDphdXRvO3dpZHRoOjEwMCU7''@;'; put 'put ''bWF4LXdpZHRoOjEwMCV9LmNhcmR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1jYXJkLWJnLWNvbG9yKTt3aWR0aDoxMDAlO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uY2FyZCAuYWxlcnR7bWFyZ2luOjAg''@;'; put 'put ''MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDB9LmNhcmQgLmJ0bi1saW5re21pbi13aWR0aDowO3BhZGRpbmc6MH0uY2FyZC5jbGlja2FibGV7Y29sb3I6aW5oZXJpdH0uY2FyZD4ubGlzdCwuY2FyZD4ubGlzdC11bnN0eWxlZHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikg''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KX0uY2FyZCAubGlzdC1ncm91cHtwYWRkaW5nLWxlZnQ6MDttYXJnaW4tYm90dG9tOjA7bGlzdC1zdHlsZTpub25lfS5jYXJkIC5saXN0LWdyb3VwLWl0ZW17Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXpl''@;'; put 'put ''KTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxl''@;'; put 'put ''dHRlci1zcGFjaW5nKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY2FyZC1iZy1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItY2FyZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1jYXJkLWJvcmRlci1jb2xv''@;'; put 'put ''cil9QHN1cHBvcnRzICgtbXMtaW1lLWFsaWduOmF1dG8pey5jYXJkIC5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKX19LmNhcmQtYmxvY2t7cGFkZGluZzp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jYXJkLWZvb3RlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfWgzLmNhcmQt''@;'; put 'put ''aGVhZGVyLC5jYXJkLWhlYWRlcntmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtjb2xvcjp2YXIoLS1jbHItY2FyZC1oZWFkZXItdGl0bGUt''@;'; put 'put ''Y29sb3IpfWg0LmNhcmQtdGl0bGUsLmNhcmQtdGl0bGV7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdo''@;'; put 'put ''dDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItY2FyZC1jb250ZW50LXRpdGxlLWNvbG9yKX1o''@;'; put 'put ''MS5jYXJkLWhlYWRlcixoMS5jYXJkLXRpdGxlLGgyLmNhcmQtaGVhZGVyLGgyLmNhcmQtdGl0bGUsaDMuY2FyZC1oZWFkZXIsaDMuY2FyZC10aXRsZSxoNC5jYXJkLWhlYWRlcixoNC5jYXJkLXRpdGxlLGg1LmNhcmQtaGVhZGVyLGg1LmNhcmQtdGl0bGUsaDYuY2FyZC1oZWFkZXIsaDYuY2Fy''@;'; put 'put ''ZC10aXRsZXttYXJnaW4tdG9wOjB9LmNhcmQtdGV4dHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1jYXJkLXRleHQtY29sb3IpfS5jYXJkLWltZzpmaXJzdC1jaGlsZD5pbWd7Ym9yZGVyLXJh''@;'; put 'put ''ZGl1czowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1cyl9LmNhcmQtaW1nOmxhc3QtY2hpbGQ+aW1ne2JvcmRlci1yYWRpdXM6MDtib3JkZXItYm90''@;'; put 'put ''dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMpfS5jYXJkLmNhcmQtaW1nPmltZywuY2FyZD4uY2FyZC1pbWc6Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZD5pbWd7''@;'; put 'put ''Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItY2FyZC1ib3JkZXItcmFkaXVzKX0uY2FyZC1ibG9jayAuYnRuLC5jYXJkLWJsb2NrIC5idG4uYnRuLWxpbmssLmNhcmQtYmxvY2sgLmNhcmQtbGluaywuY2FyZC1mb290ZXIgLmJ0biwuY2FyZC1mb290ZXIgLmJ0bi5idG4tbGluaywuY2FyZC1mb290''@;'; put 'put ''ZXIgLmNhcmQtbGluaywuY2FyZC1ibG9jayAuYnRuLWdyb3VwIC5idG4sLmNhcmQtZm9vdGVyIC5idG4tZ3JvdXAgLmJ0bnttYXJnaW46MH0uY2FyZC1oZWFkZXIsLmNhcmQtYmxvY2t7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItY2FyZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1j''@;'; put 'put ''YXJkLWJvcmRlci1jb2xvcil9LmNhcmQtaGVhZGVyOmxhc3QtY2hpbGQsLmNhcmQtYmxvY2s6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9LmNhcmQtZGl2aWRlcntkaXNwbGF5OmJsb2NrO2JvcmRlci1ib3R0b206dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIo''@;'; put 'put ''LS1jbHItY2FyZC1kaXZpZGVyLWNvbG9yKX0uY2FyZC1ibG9jayAuY2FyZC1kaXZpZGVye21hcmdpbi1sZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSk7bWFyZ2luLXJpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSk7d2lkdGg6YXV0b30uY2FyZC1o''@;'; put 'put ''ZWFkZXIrLmNhcmQtZGl2aWRlciwuY2FyZC1ibG9jaysuY2FyZC1kaXZpZGVye2Rpc3BsYXk6bm9uZX0uY2FyZC1tZWRpYS1ibG9ja3tkaXNwbGF5OmZsZXh9LmNhcmQtbWVkaWEtYmxvY2sgLmNhcmQtbWVkaWEtaW1hZ2V7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleDowIDAgYXV0bztoZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyk7bWF4LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzKTttYXgtd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyl9LmNhcmQtbWVkaWEtYmxvY2sgLmNhcmQtbWVk''@;'; put 'put ''aWEtZGVzY3JpcHRpb257Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1i''@;'; put 'put ''b2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2NvbG9yOnZhcigtLWNsci1jYXJkLXRleHQtY29sb3IpO21hcmdpbi1sZWZ0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNhcmQtbWVkaWEtYmxvY2sgLmNhcmQtbWVkaWEtdGl0bGUsLmNhcmQtbWVkaWEtYmxvY2sgc3BhbiwuY2FyZC1tZWRpYS1ibG9jayAuY2FyZC1tZWRpYS10ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jYXJkLW1lZGlhLWJsb2NrLndyYXB7ZmxleC1k''@;'; put 'put ''aXJlY3Rpb246Y29sdW1ufS5jYXJkLW1lZGlhLWJsb2NrLndyYXAgLmNhcmQtbWVkaWEtZGVzY3JpcHRpb257bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNhcmQtYmxvY2s+Lmxpc3QsLmNhcmQtYmxvY2s+Lmxpc3QtdW5zdHlsZWR7cGFkZGlu''@;'; put 'put ''ZzowfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NTc2cHgpey5jYXJkLWNvbHVtbnN7Y29sdW1uLWNvdW50OjM7Y29sdW1uLWdhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2JyZWFrLWluc2lkZTphdm9pZDtjb2x1bW4tZmlsbDpiYWxhbmNlOy13ZWJraXQtcGVyc3BlY3RpdmU6''@;'; put 'put ''MX0uY2FyZC1jb2x1bW5zLmNhcmQtY29sdW1ucy0ye2NvbHVtbi1jb3VudDoyfS5jYXJkLWNvbHVtbnMuY2FyZC1jb2x1bW5zLTR7Y29sdW1uLWNvdW50OjR9LmNhcmQtY29sdW1ucyAuY2FyZHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KX0u''@;'; put 'put ''Y2FyZC1jb2x1bW5zIC5jbGlja2FibGV7YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW59fUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2FyZCAuY2hlY2tib3guYnRuIGxhYmVsLC5jYXJkIC5jaGVja2JveC1pbmxpbmUuYnRuIGxhYmVsLC5jYXJkIC5yYWRpby5idG4gbGFiZWws''@;'; put 'put ''LmNhcmQgLnJhZGlvLWlubGluZS5idG4gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2t9fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLW5hdi1ib3gtc2hhZG93LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1uYXYtYWN0aXZlLWJnLWNvbG9yOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLW5hdi1zZWxlY3RlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbmF2LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItbmF2LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1uYXYtc2VsZWN0ZWQtYWN0aXZlLWJhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItbmF2LWxpbmstY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItbmF2LWxpbmstYWN0aXZlLWNvbG9yOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKX1AbWVkaWEgc2NyZWVue3NlY3Rpb25bYXJpYS1oaWRkZW49dHJ1ZV17ZGlzcGxheTpub25lfX1bZGF0YS1oaWRkZW49dHJ1ZV17ZGlzcGxheTpub25lfWJ1dHRvbi5uYXYtbGlua3tib3JkZXItcmFkaXVzOjA7dGV4''@;'; put 'put ''dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZTttaW4td2lkdGg6MH0udGFicy1vdmVyZmxvd3twb3NpdGlvbjpyZWxhdGl2ZX0udGFicy1vdmVyZmxvdyAuZHJvcGRvd24tbWVudXtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMCk7Ym94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LXNoYWRvdy0xMDApO292ZXJmbG93OmhpZGRlbn0udGFicy1vdmVyZmxvdyAuYnRue2xpbmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtNCk7cGFkZGluZzp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTApfS50YWItY29udGVudHtkaXNwbGF5OmlubGluZX1fOi1tcy1mdWxsc2NyZWVuIC50YWItY29udGVudCw6cm9vdCAudGFiLWNvbnRlbnR7ZGlz''@;'; put 'put ''cGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJX0udGFicy12ZXJ0aWNhbHtkaXNwbGF5OmZsZXh9LnRhYnMtdmVydGljYWw+Lm5hdntoZWlnaHQ6YXV0bztib3gtc2hhZG93Om5vbmU7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOnN0cmV0Y2g7bWFyZ2luLXJpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtOSk7b3ZlcmZsb3c6YXV0bztmbGV4LXNocmluazowO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIp''@;'; put 'put ''O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS50YWJzLXZlcnRpY2FsPi5uYXYgLm5hdi1saW5re3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtib3JkZXI6MDtmbGV4LXNocmluazowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO3dp''@;'; put 'put ''ZHRoOjEwMCV9LnRhYnMtdmVydGljYWw+Lm5hdiAubmF2LWxpbmsuYnRue21hcmdpbi1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0udGFicy12ZXJ0aWNhbD4ubmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC50YWJzLXZlcnRpY2FsPi5uYXYgLm5hdi1saW5rOmhvdmVyOmJl''@;'; put 'put ''Zm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFj''@;'; put 'put ''dGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFzZS1pbn0udGFicy1hY3Rpb25ze2Rpc3BsYXk6aW5saW5lLWZsZXg7d2lkdGg6MTAwJX0udGFicy1hY3Rpb25zW3Bvc2l0aW9ufj1sZWZ0XXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9LnRhYnMt''@;'; put 'put ''YWN0aW9uc1twb3NpdGlvbn49cmlnaHRde2p1c3RpZnktY29udGVudDplbmR9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItZHJvcGRvd24tYWN0aXZlLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLWRyb3Bkb3duLWJnLWNv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWRyb3Bkb3duLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItZHJvcGRvd24tZGl2aWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWJvcmRlci1jb2xvci10aW50KTstLWNsci1kcm9wZG93bi1kaXZpZGVyLWJvcmRlci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpOy0tY2xyLWRyb3Bkb3duLWNoaWxkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItZHJvcGRv''@;'; put 'put ''d24tYmctaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci1kcm9wZG93bi1zZWxlY3Rpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1k''@;'; put 'put ''cm9wZG93bi10ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRyb3Bkb3duLWhlYWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWRyb3Bkb3duLWhlYWRlci1mb250LXdlaWdodDp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pOy0tY2xyLWRyb3Bkb3duLWl0ZW0tZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTstLWNsci1kcm9wZG93bi1pdGVtLWNvbG9yOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tYmctY29sb3I6dHJhbnNwYXJlbnQ7LS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1kcm9wZG93bi1p''@;'; put 'put ''dGVtLWhvdmVyLWJnLWNvbG9yOnZhciggLS1jbHItZHJvcGRvd24tYmctaG92ZXItY29sb3IgKTstLWNsci1kcm9wZG93bi1pdGVtLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUt''@;'; put 'put ''YmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZSk7LS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKTstLWNsci1kcm9wZG93bi1p''@;'; put 'put ''dGVtLXNlbGVjdGVkLWJnLWNvbG9yOnZhciggLS1jbHItZHJvcGRvd24tc2VsZWN0aW9uLWNvbG9yICk7LS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtaG92ZXIp''@;'; put 'put ''Oy0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmUpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1iZy1jb2xvcjp0cmFuc3BhcmVudH0uZHJvcGRvd24tbWVudSAuYnRuLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LC5kcm9wZG93bi1tZW51IC5idG4taW5mbywuZHJvcGRvd24t''@;'; put 'put ''bWVudSAuYnRuLW91dGxpbmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnksLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLC5kcm9wZG93bi1tZW51IC5idG4t''@;'; put 'put ''bGluaywuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taGVhZGVye292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3RleHQtYWxpZ246bGVmdDtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9LmRyb3Bkb3due3Bvc2l0aW9uOnJl''@;'; put 'put ''bGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbjowO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9pbnRlcn0uZHJvcGRvd24g''@;'; put 'put ''LmRyb3Bkb3duLXRvZ2dsZSBjbHItaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlIGNsci1pY29uW3NoYXBlXj1hbmdsZV17Y29sb3I6aW5oZXJpdDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZSBjZHMtaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlIGNkcy1pY29uW3No''@;'; put 'put ''YXBlXj1hbmdsZV17bWFyZ2luLXRvcDp1bnNldDtjb2xvcjppbmhlcml0O2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUuYnRue3RleHQtb3ZlcmZsb3c6dW5zZXR9LmRyb3Bk''@;'; put 'put ''b3duIC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29ue3RyYW5zZm9ybTpub25lfS5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93''@;'; put 'put ''biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbltzaGFwZV49YW5nbGVdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbltzaGFwZV49YW5nbGVde3JpZ2h0OnZhcigtLWNsci1idG4taG9yaXpvbnRhbC1wYWRkaW5nKX0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2ds''@;'; put 'put ''ZTpub3QoLmJ0bil7cGFkZGluZzowO2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1hY3RpdmUtdGV4dC1jb2xvcil9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNkcy1pY29uW3NoYXBlXj1jYXJldF0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNs''@;'; put 'put ''ci1pY29uW3NoYXBlXj1jYXJldF0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNkcy1pY29uW3NoYXBlXj1hbmdsZV0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNsci1pY29uW3NoYXBlXj1hbmdsZV17cmlnaHQ6MH0uZHJvcGRvd24gYnV0dG9u''@;'; put 'put ''LmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWFjdGl2ZS10ZXh0LWNvbG9yKX0uZHJvcGRvd24tbWVudT4qe2Rpc3BsYXk6YmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwfS5kcm9w''@;'; put 'put ''ZG93bi1tZW51e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7bGVmdDowO21pbi13aWR0aDpjYWxjKDEyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtYmFzZSkpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1iZy1jb2xvcik7Ym9yZGVyLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24t''@;'; put 'put ''Ym9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMjAwKTttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMik7cGFkZGluZzp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTYpIDA7dmlzaWJpbGl0eTpoaWRkZW47ei1pbmRleDoxMDUwfS5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1oZWFkZXJ7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWhlYWRlci1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNl''@;'; put 'put ''Y29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1kcm9wZG93bi1oZWFkZXItZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRl''@;'; put 'put ''ci1zcGFjaW5nKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttYXJnaW46MH0uZHJvcGRvd24tbWVudSAuZHJvcGRvd24taGVhZGVyfi5kcm9wZG93bi1pdGVtLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1oZWFkZXJ+LmRyb3Bkb3duPi5kcm9wZG93bi1pdGVte3BhZGRp''@;'; put 'put ''bmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKX0uZHJvcGRvd24tbWVudSAuYnRuLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LC5kcm9wZG93bi1tZW51IC5idG4taW5mbywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5l''@;'; put 'put ''LXByaW1hcnksLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLC5kcm9wZG93bi1t''@;'; put 'put ''ZW51IC5idG4tZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLC5kcm9wZG93bi1tZW51IC5idG4tbGluaywuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbXtmb250LXNpemU6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1iZy1jb2xvcik7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2dh''@;'; put 'put ''cDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6YXV0bzttYXJnaW46MDt3aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9LmRyb3Bkb3duLW1lbnUgLmJ0bi5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuYWN0aXZlLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4taW5mby5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5hY3RpdmUsLmRyb3Bkb3duLW1l''@;'; put 'put ''bnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmJ0bi1wcmltYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbS5hY3RpdmV7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYmctY29sb3IpfS5kcm9wZG93bi1tZW51IC5idG46aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnk6aG92ZXIsLmRy''@;'; put 'put ''b3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZTpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeTpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmhvdmVyLC5kcm9wZG93bi1tZW51IC5i''@;'; put 'put ''dG4tb3V0bGluZS13YXJuaW5nOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXI6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXI6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmlt''@;'; put 'put ''YXJ5OmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3M6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmhvdmVye2NvbG9yOnZhcigtLWNsci1kcm9w''@;'; put 'put ''ZG93bi1pdGVtLWhvdmVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0uZHJvcGRvd24tbWVudSAuYnRuOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpo''@;'; put 'put ''b3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxp''@;'; put 'put ''bmUtc2Vjb25kYXJ5OmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6aG92ZXIu''@;'; put 'put ''YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnk6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmhvdmVyLmFj''@;'; put 'put ''dGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWxpbms6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmhvdmVyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWhvdmVyLWJnLWNvbG9yKX0uZHJvcGRvd24tbWVu''@;'; put 'put ''dSAuYnRuOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmFjdGl2ZSwuZHJv''@;'; put 'put ''cGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6YWN0''@;'; put 'put ''aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnk6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWxp''@;'; put 'put ''bms6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWJnLWNvbG9yKX0uZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnk6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm86YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91''@;'; put 'put ''dGxpbmUtcHJpbWFyeTphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXI6''@;'; put 'put ''YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzczphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0''@;'; put 'put ''bi13YXJuaW5nOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06YWN0aXZlLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9LmRyb3Bkb3duLW1lbnUgLmJ0bjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWluZm86Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1v''@;'; put 'put ''dXRsaW5lOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmc6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRs''@;'; put 'put ''aW5lLWRhbmdlcjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzczpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nOmZvY3VzLC5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG4tc3VjY2Vzczpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWxpbms6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06Zm9jdXN7ei1pbmRleDppbmhlcml0fS5kcm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bjpkaXNh''@;'; put 'put ''YmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmRpc2FibGVkLC5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5idG4tb3V0bGluZS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmRpc2Fi''@;'; put 'put ''bGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUt''@;'; put 'put ''c3VjY2VzczpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmRpc2FibGVkLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4td2FybmluZy5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2VzczpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRu''@;'; put 'put ''LWxpbmsuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmU7Y29sb3I6dmFyKC0tY2xyLWRy''@;'; put 'put ''b3Bkb3duLWl0ZW0tZGlzYWJsZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZGlzYWJsZWQtYmctY29sb3IpOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5kcm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQ6aG92ZXIs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmJ0bjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZGlzYWJsZWQ6aG92ZXIs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlz''@;'; put 'put ''YWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkOmhv''@;'; put 'put ''dmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3du''@;'; put 'put ''LW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzczpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWRh''@;'; put 'put ''bmdlci5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5i''@;'; put 'put ''dG4td2FybmluZy5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2VzczpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24t''@;'; put 'put ''bWVudSAuYnRuLWxpbmsuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmRpc2FibGVkOmhvdmVye2JhY2tn''@;'; put 'put ''cm91bmQ6MCAwfS5kcm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG46ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpkaXNhYmxl''@;'; put 'put ''ZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm86ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lOmRp''@;'; put 'put ''c2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQ6''@;'; put 'put ''YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzpkaXNhYmxlZDphY3RpdmUs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1t''@;'; put 'put ''ZW51IC5idG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXI6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5kaXNhYmxlZDph''@;'; put 'put ''Y3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNz''@;'; put 'put ''LmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3M6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuZHJvcGRv''@;'; put 'put ''d24taXRlbS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06ZGlzYWJsZWQ6YWN0aXZle2JhY2tncm91bmQ6MCAwO2JveC1zaGFkb3c6bm9uZX0uZHJvcGRvd24tbWVudSAuYnRuLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5hY3RpdmUs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmFjdGl2ZSwuZHJvcGRvd24t''@;'; put 'put ''bWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmFjdGl2ZSwuZHJvcGRvd24tbWVu''@;'; put 'put ''dSAuYnRuLXByaW1hcnkuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmFjdGl2ZXtwb3Np''@;'; put 'put ''dGlvbjpyZWxhdGl2ZX0uZHJvcGRvd24tbWVudSAuYnRuLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuYWN0aXZl''@;'; put 'put ''OmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5hY3RpdmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5hY3RpdmU6YmVmb3JlLC5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5hY3RpdmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmFj''@;'; put 'put ''dGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0u''@;'; put 'put ''YWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFzZS1pbn0uZHJvcGRvd24tbWVudSAuYnRuLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLWlu''@;'; put 'put ''Zm8uZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLW91dGxpbmUtd2FybmluZy5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmV4cGFuZGFibGUsLmRy''@;'; put 'put ''b3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmRyb3Bkb3duLWl0ZW0uZXhwYW5kYWJsZXtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmRyb3Bkb3duLW1lbnUgLmJ0bi5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmJ0bi1pbmZvLmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmV4''@;'; put 'put ''cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZXhwYW5kYWJs''@;'; put 'put ''ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc3Vj''@;'; put 'put ''Y2Vzcy5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGU6YWZ0ZXJ7Y29udGVudDoiIjstd2Via2l0LW1hc2s6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNl''@;'; put 'put ''dD11dGY4LCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTIlMjAxMiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RlZnMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NzdHlsZSUz''@;'; put 'put ''RS5jbHMtMSU3QmZpbGwlM0Enbm9uZSclM0IlN0QlM0MlMkZzdHlsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRmRlZnMlM0UlMEElMjAlMjAlMjAlMjAlM0N0aXRsZSUzRUNhcmV0JTNDJTJGdGl0bGUlM0UlMEElMjAlMjAlMjAlMjAlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHMtMSUyMiUyMGQl''@;'; put 'put ''M0QlMjJNNiUyQzlMMS4yJTJDNC4yYTAuNjglMkMwLjY4JTJDMCUyQzAlMkMxJTJDMS0xTDYlMkM3LjA4JTJDOS44NCUyQzMuMjRhMC42OCUyQzAuNjglMkMwJTJDMSUyQzElMkMxJTJDMVolMjIlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEiKTttYXNrOnVybCgiZGF0YTppbWFnZS9zdmcreG1s''@;'; put 'put ''O2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEyJTIwMTIlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTND''@;'; put 'put ''c3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBJ25vbmUnJTNCJTdEJTNDJTJGc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VDYXJldCUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTEl''@;'; put 'put ''MjIlMjBkJTNEJTIyTTYlMkM5TDEuMiUyQzQuMmEwLjY4JTJDMC42OCUyQzAlMkMwJTJDMSUyQzEtMUw2JTJDNy4wOCUyQzkuODQlMkMzLjI0YTAuNjglMkMwLjY4JTJDMCUyQzElMkMxJTJDMSUyQzFaJTIyJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIik7LXdlYmtpdC1tYXNrLXJlcGVhdDpu''@;'; put 'put ''by1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvdmVyO21hc2stc2l6ZTpjb3ZlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTt3aWR0aDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTYpO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTttYXJnaW4tbGVmdDphdXRvfS5kcm9wZG93bi1tZW51IC5idG4uZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bk''@;'; put 'put ''b3duLW1lbnUgLmJ0bi1pbmZvLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24t''@;'; put 'put ''bWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZS5hY3RpdmU6''@;'; put 'put ''YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmV4cGFuZGFibGUuYWN0aXZlOmFm''@;'; put 'put ''dGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93''@;'; put 'put ''bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtY29sb3IpfS5kcm9wZG93bi1tZW51IC5idG4uZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRu''@;'; put 'put ''LXNlY29uZGFyeS5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4taW5mby5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmlt''@;'; put 'put ''YXJ5LmV4cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0''@;'; put 'put ''bi1vdXRsaW5lLWRhbmdlci5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLmV4cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLXByaW1hcnkuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZXhw''@;'; put 'put ''YW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbS5leHBhbmRhYmxlOmhvdmVyOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0taG92ZXItY29sb3IpfS5kcm9wZG93bi1tZW51IC5idG4uZXhwYW5kYWJsZTphY3RpdmU6''@;'; put 'put ''YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5leHBhbmRhYmxlOmFjdGl2ZTphZnRlciwuZHJv''@;'; put 'put ''cGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRhYmxlOmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGU6''@;'; put 'put ''YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5k''@;'; put 'put ''YWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlOmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZXhwYW5kYWJsZTphY3Rp''@;'; put 'put ''dmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWNvbG9y''@;'; put 'put ''KX0uZHJvcGRvd24tbWVudSAuYnRuLmV4cGFuZGFibGUuZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmV4cGFuZGFibGUuZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91''@;'; put 'put ''dGxpbmUuZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5i''@;'; put 'put ''dG4tb3V0bGluZS1wcmltYXJ5LmV4cGFuZGFibGU6ZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZXhwYW5kYWJsZTpkaXNhYmxl''@;'; put 'put ''ZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGU6ZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdl''@;'; put 'put ''ci5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5idG4tb3V0bGluZS1zdWNjZXNzLmV4cGFuZGFibGU6ZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1t''@;'; put 'put ''ZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5idG4td2FybmluZy5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5i''@;'; put 'put ''dG4tbGluay5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGUuZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3du''@;'; put 'put ''LWl0ZW0uZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWRpc2FibGVkLWNvbG9yKX0uZHJvcGRvd24tbWVudSAuYnRuOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5OmZvY3VzLC5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5idG4taW5mbzpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUt''@;'; put 'put ''d2FybmluZzpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeTpmb2N1cywu''@;'; put 'put ''ZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tbGluazpmb2N1cywuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbTpmb2N1c3tvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtMikpfS5kcm9wZG93bi1tZW51IC5idG4sLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW17cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7LmRyb3Bkb3duLW1lbnUgLmJ0biwuZHJv''@;'; put 'put ''cGRvd24tbWVudSAuZHJvcGRvd24taXRlbXtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX19LmRyb3Bkb3duLW1lbnUgYS5kcm9wZG93bi1pdGVte3RleHQtZGVjb3JhdGlvbjpub25lfS5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1k''@;'; put 'put ''aXZpZGVye2JvcmRlci1ib3R0b20td2lkdGg6dmFyKC0tY2xyLWRyb3Bkb3duLWRpdmlkZXItYm9yZGVyLXdpZHRoKTtib3JkZXItYm90dG9tLXN0eWxlOnNvbGlkO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWRpdmlkZXItY29sb3IpO21hcmdpbjp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTYpfS5idG4tZ3JvdXAtb3ZlcmZsb3cub3Blbj4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93Lm9wZW4+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5vcGVuPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJm''@;'; put 'put ''bG93Lm9wZW4+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51e3Zpc2liaWxpdHk6dmlzaWJsZX0uYnRuLWdyb3VwLW92ZXJm''@;'; put 'put ''bG93LmJvdHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cuYm90dG9tLXJpZ2h0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmJvdHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudSwu''@;'; put 'put ''ZHJvcGRvd24uYm90dG9tLWxlZnQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudXt0b3A6MTAwJTtib3R0b206YXV0bzttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSAwIDAgMH0uYnRuLWdyb3VwLW92ZXJmbG93LmJvdHRvbS1sZWZ0''@;'; put 'put ''Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmJvdHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5ib3R0b20tbGVmdD4uZHJvcGRvd24tbWVudXtsZWZ0OjA7cmlnaHQ6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudSwudGFi''@;'; put 'put ''cy1vdmVyZmxvdy5ib3R0b20tcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudXtyaWdodDowO2xlZnQ6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cudG9wLXJp''@;'; put 'put ''Z2h0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnRvcC1yaWdodD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24udG9wLWxlZnQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnRvcC1yaWdodD4uZHJvcGRvd24tbWVu''@;'; put 'put ''dXt0b3A6YXV0bztib3R0b206MTAwJTttYXJnaW46MCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikgMH0uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi50b3AtbGVmdD4u''@;'; put 'put ''ZHJvcGRvd24tbWVudXtsZWZ0OjA7cmlnaHQ6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1yaWdodD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy50b3AtcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnRvcC1yaWdodD4uZHJvcGRvd24tbWVudXtyaWdodDowO2xlZnQ6''@;'; put 'put ''YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cubGVmdC1ib3R0b20+LmRy''@;'; put 'put ''b3Bkb3duLW1lbnUsLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudXtyaWdodDoxMDAlO2xlZnQ6YXV0bzttYXJnaW46MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIDAgMH0uYnRuLWdyb3VwLW92ZXJmbG93Lmxl''@;'; put 'put ''ZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmxlZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudXt0b3A6MDtib3R0b206YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LmxlZnQtdG9wPi5kcm9wZG93bi1tZW51''@;'; put 'put ''LC50YWJzLW92ZXJmbG93LmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudXtib3R0b206MDt0b3A6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LWJv''@;'; put 'put ''dHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJv''@;'; put 'put ''cGRvd24tbWVudXtsZWZ0OjEwMCU7cmlnaHQ6YXV0bzttYXJnaW46MCAwIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0uYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLmRy''@;'; put 'put ''b3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudXt0b3A6MDtib3R0b206YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJvcGRv''@;'; put 'put ''d24tbWVudXtib3R0b206MDt0b3A6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93biAuZHJvcGRvd24tbWVudXtib3JkZXItY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWRyb3Bkb3duLWNoaWxkLWJvcmRlci1jb2xvcik7cG9zaXRpb246YWJzb2x1dGV9LmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUsLmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUtd3JhcHBl''@;'; put 'put ''cj4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93bi5sZWZ0LXRv''@;'; put 'put ''cD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnV7aW5zZXQ6MCAxMDAlIGF1dG8gYXV0bzttYXJnaW4tdG9wOmNhbGMoKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCkpIC0gdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS0xKSk7bWFyZ2luLXJpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSl9LmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cgLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJv''@;'; put 'put ''cGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93bi5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC5kcm9wZG93''@;'; put 'put ''biAuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93biAuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnV7aW5zZXQ6MCBhdXRvIGF1dG8gMTAwJTttYXJnaW4tdG9wOmNhbGMoKC0xKnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtOCkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7bWFyZ2luLWxlZnQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKX0uYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93IC5k''@;'; put 'put ''cm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3Jh''@;'; put 'put ''cHBlcj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLmxlZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93biAuZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudXtpbnNldDphdXRvIDEwMCUgMCBhdXRvO21hcmdp''@;'; put 'put ''bi1ib3R0b206Y2FsYygoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTttYXJnaW4tcmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKX0uYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5yaWdodC1ib3R0b20+''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUsLmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAu''@;'; put 'put ''ZHJvcGRvd24ucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4u''@;'; put 'put ''ZHJvcGRvd24tbWVudXtpbnNldDphdXRvIGF1dG8gMCAxMDAlO21hcmdpbi1ib3R0b206Y2FsYygoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTttYXJnaW4tbGVmdDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpfTpy''@;'; put 'put ''b290IFtjZHMtdGhlbWVdey0tY2xyLWxvZ2luLXRpdGxlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItbG9naW4taGludC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWxvZ2luLWZvb3Rlci1nYXA6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1sb2dpbi1jb3B5cmlnaHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvcik7LS1jbHItbG9naW4tYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTst''@;'; put 'put ''LWNsci1sb2dpbi13ZWxjb21lLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItbG9naW4tZXJyb3ItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWJnLWNvbG9yKTstLWNsci1sb2dpbi1lcnJvci1pY29uLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1hbGVydC1kYW5nZXItaWNvbi1jb2xvcik7LS1jbHItbG9naW4tbG9nby1jb2xvcjojNzE3MTc1Oy0tY2xyLWxvZ2luLXRyYWRlbWFyay1jb2xvcjp2YXIoLS1jbHItaDItY29sb3IpOy0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LXdlaWdodDp2YXIoLS1jbHItaDItZm9udC13ZWln''@;'; put 'put ''aHQpOy0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LWZhbWlseTp2YXIoLS1jbHItaDItZm9udC1mYW1pbHkpOy0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LXNpemU6dmFyKC0tY2xyLWgyLWZvbnQtc2l6ZSk7LS1jbHItbG9naW4tdHJhZGVtYXJrLWxldHRlci1zcGFjaW5nOnZhcigtLWNs''@;'; put 'put ''ci1oMi1sZXR0ZXItc3BhY2luZyl9OnJvb3QgW2Nkcy10aGVtZX49ZGFya117LS1jbHItbG9naW4tbG9nby1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKX0ubG9naW4td3JhcHBlcntkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDp1cmwoZGF0YTppbWFnZS9z''@;'; put 'put ''dmcreG1sO2NoYXJzZXQ9dXRmOCwlM0MlM0Z4bWwlMjB2ZXJzaW9uJTNEJTIyMS4wJTIyJTIwZW5jb2RpbmclM0QlMjJ1dGYtOCUyMiUzRiUzRSUwRCUwQSUzQyUyMURPQ1RZUEUlMjBzdmclMjBQVUJMSUMlMjAlMjItJTJGJTJGVzNDJTJGJTJGRFREJTIwU1ZHJTIwMS4xJTJGJTJGRU4lMjIl''@;'; put 'put ''MjAlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRkdyYXBoaWNzJTJGU1ZHJTJGMS4xJTJGRFREJTJGc3ZnMTEuZHRkJTIyJTNFJTBEJTBBJTNDc3ZnJTBEJTBBJTIwJTIwJTIwJTIwJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMGlkJTNEJTIybm8tYXNwZWN0''@;'; put 'put ''LXJhdGlvJTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmslMjIlMEQl''@;'; put 'put ''MEElMjAlMjAlMjAlMjAlMjB4JTNEJTIyMHB4JTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIweSUzRCUyMjBweCUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMGhlaWdodCUzRCUyMjIwNTUuNTVweCUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMHdpZHRoJTNEJTIyMTQ0MHB4JTIyJTBEJTBBJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMjA1NS41NSUyMDE0NDAlMjIlMEQlMEElMjAlMjAlMjAlMjAlMjBwcmVzZXJ2ZUFzcGVjdFJhdGlvJTNEJTIyeE1pbllNaW4lMjBzbGljZSUyMiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2Rlc2MlM0VMb2dpbiUyMElt''@;'; put 'put ''YWdlJTNDJTJGZGVzYyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBzdHJva2UlM0QlMjJub25lJTIyJTIwc3Ryb2tlLXdpZHRoJTNEJTIyMSUyMiUyMGZpbGwlM0QlMjJub25lJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyMHRy''@;'; put 'put ''YW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODAuMDAwMDAwJTJDJTIwLTQuMDAwMDAwJTI5JTIyJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyM0ZBRkFGQSUyMiUyMHglM0QlMjIwJTIyJTIweSUzRCUyMjQlMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTND''@;'; put 'put ''cG9seWdvbiUyMGZpbGwlM0QlMjIlMjMwMDdDQkIlMjIlMjBvcGFjaXR5JTNEJTIyMC40JTIyJTIwc3R5bGUlM0QlMjJtaXgtYmxlbmQtbW9kZSUzQSUyMG11bHRpcGx5JTNCJTIyJTIwcG9pbnRzJTNEJTIyMTEwOC40MyUyMDE0NDMuNjMlMjAxMTA5LjA4JTIwMTQ0My42MyUyMDQ0My40NCUy''@;'; put 'put ''MDc3Ny43NCUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkzRDhDQSUyMiUyMG9wYWNpdHklM0QlMjIwLjYlMjIlMjBzdHlsZSUzRCUyMm1peC1ibGVuZC1t''@;'; put 'put ''b2RlJTNBJTIwb3ZlcmxheSUzQiUyMiUyMHBvaW50cyUzRCUyMjAuNzklMjAzMzQuOTIlMjA0NDMuNDQlMjA3NzcuNzQlMjAwLjc5JTIwMzM0LjQ5JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3Bv''@;'; put 'put ''bHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMC43OSUyMDIxMS44OCUyMDAuNzklMjAzMjkuNiUyMDU5LjYyJTIwMjcwLjc3JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTYwLjY1JTIwMTY5Ljc0JTIwMC43OSUyMDkuNzMlMjAwLjc5JTIwMjExLjg4JTIwOTAuMjclMjAzMDEuNDYlMjA1OS42MiUyMDI3MC43NyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0NERTNFRSUyMiUyMHBvaW50cyUzRCUyMjUwMy43NyUyMDE0NDMuNjMlMjA2OTcuNDclMjAxNDQzLjYzJTIwODAzLjc0JTIwMTMzNy4zNiUyMDcwNi45MyUyMDEyNDAuNDMl''@;'; put 'put ''MjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNDREUzRUUlMjIlMjBwb2ludHMlM0QlMjIxNTguMzMlMjA2OTEuMTUlMjAwLjc5JTIwODQ4LjcyJTIwMC43OSUy''@;'; put 'put ''MDE0MjcuNDMlMjA0NDcuNTIlMjA5ODAuNyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0NFRERFMCUyMiUyMHBvaW50cyUzRCUyMjI1Ny43MSUyMDU5MS43''@;'; put 'put ''NSUyMDAuNzklMjAzMzQuNDklMjAwLjc5JTIwNTMzLjQyJTIwMTU4LjMzJTIwNjkxLjE1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTlDOUQ1JTIyJTIw''@;'; put 'put ''cG9pbnRzJTNEJTIyMC43OSUyMDUzMy40MiUyMDAuNzklMjA4NDguNzIlMjAxNTguMzMlMjA2OTEuMTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBRkQ0''@;'; put 'put ''RTclMjIlMjBwb2ludHMlM0QlMjI4MDYuNDYlMjAxMTQwLjg5JTIwNTQ2Ljk0JTIwODgxLjI4JTIwNDQ3LjUyJTIwOTgwLjclMjA3MDYuOTMlMjAxMjQwLjQzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOEZDNERGJTIyJTIwcG9pbnRzJTNEJTIyNDQ3LjUyJTIwOTgwLjclMjAwLjc5JTIwMTQyNy40MyUyMDAuNzklMjAxNDQzLjYzJTIwNTAzLjc3JTIwMTQ0My42MyUyMDcwNi45MyUyMDEyNDAuNDMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBB''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3MEMwREMlMjIlMjBwb2ludHMlM0QlMjI2MDguMjMlMjA4MTkuOTklMjA1NDYuOTQlMjA4ODEuMjglMjA4MDYuNDYlMjAxMTQwLjg5JTIwODY3LjY0JTIwMTA3''@;'; put 'put ''OS43JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyNDIwLjA1JTIwNDI5LjM5JTIwMzE5LjAxJTIwNTMwLjQ1JTIw''@;'; put 'put ''NjA4LjIzJTIwODE5Ljk5JTIwNzA5LjMlMjA3MTguOTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM2OUFGRDQlMjIlMjBwb2ludHMlM0QlMjI3MDkuMyUy''@;'; put 'put ''MDcxOC45MSUyMDYwOC4yMyUyMDgxOS45OSUyMDg2Ny42NCUyMDEwNzkuNyUyMDk2OC43NCUyMDk3OC42JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOEVC''@;'; put 'put ''NUJDJTIyJTIwcG9pbnRzJTNEJTIyNjE5LjU5JTIwMjI5LjgyJTIwMzkzLjQyJTIwMy4xMiUyMDMyNy4yNyUyMDMuMTIlMjAxNjAuNjUlMjAxNjkuNzQlMjA0MjAuMDUlMjA0MjkuMzklMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4RUI1QkMlMjIlMjBwb2ludHMlM0QlMjIzMTkuMDElMjA1MzAuNDUlMjAzMTkuMDElMjA1MzAuNDUlMjA5MC4yNyUyMDMwMS40NiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzdDQjBDNyUyMiUyMHBvaW50cyUzRCUyMjE2MC42NSUyMDE2OS43NCUyMDU5LjYyJTIwMjcwLjc3JTIwOTAuMjclMjAzMDEuNDYlMjAzMTkuMDElMjA1MzAuNDUlMjA0MjAuMDUlMjA0MjkuMzklMjIl''@;'; put 'put ''M0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4NEM0RDIlMjIlMjBwb2ludHMlM0QlMjI1OS42MiUyMDI3MC43NyUyMDAuNzklMjAzMjkuNiUyMDAuNzklMjAzMzQu''@;'; put 'put ''NDklMjAyNTcuNzElMjA1OTEuNzUlMjAzMTkuMDElMjA1MzAuNDUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3Q0IwQzclMjIlMjBwb2ludHMlM0QlMjI1''@;'; put 'put ''MzcuNTUlMjAzLjEyJTIwMzkzLjQyJTIwMy4xMiUyMDYxOS41OSUyMDIyOS44MiUyMDY5MS43NCUyMDE1Ny42NiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUy''@;'; put 'put ''Mzg3RDFEQiUyMiUyMHBvaW50cyUzRCUyMjg0Ni4yNSUyMDMuMTIlMjA1MzcuNTUlMjAzLjEyJTIwNjkxLjc0JTIwMTU3LjY2JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxs''@;'; put 'put ''JTNEJTIyJTIzQ0RFM0VFJTIyJTIwcG9pbnRzJTNEJTIyOTA5Ljg3JTIwMTQ0My42MyUyMDg1MC4xOSUyMDEzODMuODclMjA3OTAuNDMlMjAxNDQzLjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUz''@;'; put 'put ''Q3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMzE5LjAxJTIwNTMwLjQ1JTIwMjU3LjcxJTIwNTkxLjc1JTIwNDQzLjQ0JTIwNzc3Ljc0JTIwNTQ2Ljk0JTIwODgxLjI4JTIwNjA4LjIzJTIwODE5Ljk5JTIwODY3LjY0JTIwMTA3OS43JTIwODY3LjY0JTIw''@;'; put 'put ''MTA3OS43JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyODY3LjY0JTIwMTA3OS43JTIwODA2LjQ2JTIwMTE0MC44''@;'; put 'put ''OSUyMDkwMy4zMSUyMDEyMzcuNzglMjA5NjQuNDYlMjAxMTc2LjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIy''@;'; put 'put ''MTA2NS41NyUyMDEwNzUuNTIlMjA5NjguNzQlMjA5NzguNiUyMDg2Ny42NCUyMDEwNzkuNyUyMDk2NC40NiUyMDExNzYuNjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwl''@;'; put 'put ''M0QlMjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjI5NjQuNDYlMjAxMTc2LjYzJTIwODY3LjY0JTIwMTA3OS43JTIwODY3LjY0JTIwMTA3OS43JTIwOTY0LjQ2JTIwMTE3Ni42MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjEwMTAuOTIlMjAxMjIzLjEzJTIwMTIzMS4xNiUyMDE0NDMuNjMlMjAxMDEwLjkyJTIwMTIyMy4xMyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjEyNDAuMDglMjA3MDcuMjIlMjAxMTY3LjklMjA3NzkuNCUyMDEyNjQuNjglMjA4NzYuNCUyMDEzMzYuODclMjA4MDQuMjIlMjAxMjQwLjA4JTIw''@;'; put 'put ''NzA3LjIxJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyOTgwLjgzJTIwNDQ3LjM5JTIwNjkxLjc0JTIwMTU3LjY2''@;'; put 'put ''JTIwNjE5LjU5JTIwMjI5LjgyJTIwOTA4LjY2JTIwNTE5LjU2JTIwOTgwLjgzJTIwNDQ3LjM5JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQUZENEU3JTIy''@;'; put 'put ''JTIwcG9pbnRzJTNEJTIyNzA5LjMlMjA3MTguOTElMjA5NjguNzQlMjA5NzguNiUyMDExNjcuOTElMjA3NzkuNCUyMDkwOC42NiUyMDUxOS41NSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5''@;'; put 'put ''Z29uJTIwZmlsbCUzRCUyMiUyMzY5QUZENCUyMiUyMHBvaW50cyUzRCUyMjk4MC44MyUyMDQ0Ny4zOSUyMDkwOC42NiUyMDUxOS41NSUyMDExNjcuOTElMjA3NzkuNCUyMDEyNDAuMDglMjA3MDcuMjElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIxMDM0LjU5JTIwMy4xMiUyMDg0Ni4yNSUyMDMuMTIlMjA2OTEuNzQlMjAxNTcuNjYlMjA5ODAuODMlMjA0NDcuMzklMjAxMjI5Ljc1JTIwMTk4LjQ3JTIyJTNF''@;'; put 'put ''JTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMTI0MC4wOCUyMDcwNy4yMSUyMDEzMzYuODclMjA4MDQuMjIlMjAxNTg2LjAx''@;'; put 'put ''JTIwNTU1LjA4JTIwMTQ4OS4xNCUyMDQ1OC4xMiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzcwQzBEQyUyMiUyMHBvaW50cyUzRCUyMjEyMjkuNzUlMjAx''@;'; put 'put ''OTguNDclMjA5ODAuODMlMjA0NDcuMzklMjAxMjQwLjA4JTIwNzA3LjIxJTIwMTQ4OS4xNCUyMDQ1OC4xMiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0I3''@;'; put 'put ''Q0VEMiUyMiUyMHBvaW50cyUzRCUyMjEyOTIuMjIlMjAxMzAyLjM4JTIwMTQzMy4zMiUyMDE0NDMuNjMlMjAxODMwLjYxJTIwMTQ0My42MyUyMDE0OTEuMTglMjAxMTAzLjQyJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMTAxMC45MiUyMDEyMjMuMTMlMjA5NDkuNzglMjAxMjg0LjI3JTIwMTEwOS4wOCUyMDE0NDMuNjMlMjAxMTUwLjk4JTIwMTQ0My42MyUyMDExOTEuMDklMjAxNDAzLjUxJTIyJTNFJTND''@;'; put 'put ''JTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNzVCOEM1JTIyJTIwcG9pbnRzJTNEJTIyMTE1MC45OCUyMDE0NDMuNjMlMjAxMjMxLjE2JTIwMTQ0My42MyUyMDExOTEuMDkl''@;'; put 'put ''MjAxNDAzLjUxJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTI5Mi4yMiUyMDEzMDIuMzglMjAxMTEyLjAzJTIw''@;'; put 'put ''MTEyMi4wMiUyMDEwMTAuOTIlMjAxMjIzLjEzJTIwMTE5MS4wOSUyMDE0MDMuNTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM2RUE0QkMlMjIlMjBwb2lu''@;'; put 'put ''dHMlM0QlMjIxMTkxLjA5JTIwMTQwMy41MSUyMDEyMzEuMTYlMjAxNDQzLjYzJTIwMTQzMy4zMiUyMDE0NDMuNjMlMjAxMjkyLjIyJTIwMTMwMi4zOCUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nw''@;'; put 'put ''b2x5Z29uJTIwZmlsbCUzRCUyMiUyMzAwN0NCQiUyMiUyMG9wYWNpdHklM0QlMjIwLjQlMjIlMjBzdHlsZSUzRCUyMm1peC1ibGVuZC1tb2RlJTNBJTIwbXVsdGlwbHklM0IlMjIlMjBwb2ludHMlM0QlMjIxMzgzLjMlMjA4NTAuNzUlMjAxMzExLjEyJTIwOTIyLjk0JTIwMTQ5MS4xOCUyMDEx''@;'; put 'put ''MDMuNDIlMjAxNTYzLjM3JTIwMTAzMS4yMyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0I3Q0VEMiUyMiUyMHBvaW50cyUzRCUyMjE0OTEuMTglMjAxMTAz''@;'; put 'put ''LjQyJTIwMTgzMC42MSUyMDE0NDMuNjMlMjAxOTc0Ljg2JTIwMTQ0My42MyUyMDE1NjMuMzclMjAxMDMxLjIzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIz''@;'; put 'put ''NkVBNEJDJTIyJTIwcG9pbnRzJTNEJTIyMTQ5MS4xOCUyMDExMDMuNDIlMjAxODMwLjYxJTIwMTQ0My42MyUyMDE5NzQuODYlMjAxNDQzLjYzJTIwMTU2My4zNyUyMDEwMzEuMjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIxODEyLjY1JTIwNzgxLjk1JTIwMTYzMi40NiUyMDYwMS41OSUyMDEzODMuMyUyMDg1MC43NSUyMDE1NjMuMzclMjAxMDMxLjIzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjdDRUQyJTIyJTIwcG9pbnRzJTNEJTIyMTU2My4zNyUyMDEwMzEuMjMlMjAxOTc0Ljg2JTIwMTQ0My42MyUyMDIwNTQuNDUlMjAxNDQzLjYzJTIwMjA1NC40NSUy''@;'; put 'put ''MDEwMjMuOTklMjAxODEyLjY1JTIwNzgxLjk1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNzhDQUQ0JTIyJTIwcG9pbnRzJTNEJTIyMTU2My4zNyUyMDEw''@;'; put 'put ''MzEuMjMlMjAxOTc0Ljg2JTIwMTQ0My42MyUyMDIwNTQuNDUlMjAxNDQzLjYzJTIwMjA1NC40NSUyMDEwMjMuOTklMjAxODEyLjY1JTIwNzgxLjk1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3Bv''@;'; put 'put ''bHlnb24lMjBmaWxsJTNEJTIyJTIzOTFDNUUwJTIyJTIwcG9pbnRzJTNEJTIyODAzLjc0JTIwMTMzNy4zNiUyMDg1MC4xOSUyMDEzODMuODclMjA5NDkuNzglMjAxMjg0LjI3JTIwOTAzLjMxJTIwMTIzNy43OCUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkxQzVFMCUyMiUyMHBvaW50cyUzRCUyMjEwNjUuNTclMjAxMDc1LjUyJTIwMTExMi4wMyUyMDExMjIuMDIlMjAxMzExLjEyJTIwOTIyLjk0JTIwMTI2NC42OSUyMDg3Ni40JTIyJTNFJTNDJTJG''@;'; put 'put ''cG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNzdCOEQ5JTIyJTIwcG9pbnRzJTNEJTIyNjk3LjQ3JTIwMTQ0My42MyUyMDc5MC40MyUyMDE0NDMuNjMlMjA4NTAuMTklMjAxMzgz''@;'; put 'put ''Ljg3JTIwODAzLjc0JTIwMTMzNy4zNiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0EwREVFQSUyMiUyMHBvaW50cyUzRCUyMjk2NC40NiUyMDExNzYuNjMl''@;'; put 'put ''MjA5MDMuMzElMjAxMjM3Ljc4JTIwOTQ5Ljc4JTIwMTI4NC4yNyUyMDEwMTAuOTIlMjAxMjIzLjEzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNURCNUQ2''@;'; put 'put ''JTIyJTIwcG9pbnRzJTNEJTIyOTY0LjQ2JTIwMTE3Ni42MyUyMDkwMy4zMSUyMDEyMzcuNzglMjA5NDkuNzglMjAxMjg0LjI3JTIwMTAxMC45MiUyMDEyMjMuMTMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxMDM4LjI0NzI5NyUyQyUyMDExNDkuMjc1NDI5JTI5JTIwcm90YXRlJTI4LTQ0Ljk3MDAwMCUyOSUyMHRyYW5zbGF0ZSUyOC0xMDM4LjI0NzI5NyUyQyUyMC0xMTQ5LjI3NTQy''@;'; put 'put ''OSUyOSUyMCUyMiUyMHglM0QlMjI5NjYuNzUyMjk3JTIyJTIweSUzRCUyMjExMTYuNDEwNDMlMjIlMjB3aWR0aCUzRCUyMjE0Mi45OSUyMiUyMGhlaWdodCUzRCUyMjY1LjczJTIyJTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzNTdBOEQwJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlJTI4MTAzOC4yNDcyOTclMkMlMjAxMTQ5LjI3NTQyOSUyOSUyMHJvdGF0ZSUyOC00NC45NzAwMDAlMjklMjB0cmFuc2xhdGUlMjgtMTAzOC4yNDcyOTclMkMlMjAtMTE0OS4y''@;'; put 'put ''NzU0MjklMjklMjAlMjIlMjB4JTNEJTIyOTY2Ljc1MjI5NyUyMiUyMHklM0QlMjIxMTE2LjQxMDQzJTIyJTIwd2lkdGglM0QlMjIxNDIuOTklMjIlMjBoZWlnaHQlM0QlMjI2NS43MyUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjEwMTAuOTIlMjAxMjIzLjEzJTIwMTAxMC45MiUyMDEyMjMuMTMlMjA5NjQuNDYlMjAxMTc2LjYzJTIwOTY0LjQ2JTIwMTE3Ni42MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEEl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzAwMDAwMCUyMiUyMG9wYWNpdHklM0QlMjIwLjQyJTIyJTIwcG9pbnRzJTNEJTIyMTAxMC45MiUyMDEyMjMuMTMlMjAxMDEwLjkyJTIwMTIyMy4xMyUyMDk2NC40''@;'; put 'put ''NiUyMDExNzYuNjMlMjA5NjQuNDYlMjAxMTc2LjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzMDA3Q0JCJTIyJTIwb3BhY2l0eSUzRCUyMjAuNCUyMiUy''@;'; put 'put ''MHN0eWxlJTNEJTIybWl4LWJsZW5kLW1vZGUlM0ElMjBtdWx0aXBseSUzQiUyMiUyMHBvaW50cyUzRCUyMjEzMzYuODclMjA4MDQuMjIlMjAxMjY0LjY5JTIwODc2LjQlMjAxMzExLjEyJTIwOTIyLjk0JTIwMTM4My4zJTIwODUwLjc1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNTdBOEQwJTIyJTIwcG9pbnRzJTNEJTIyMTMzNi44NyUyMDgwNC4yMiUyMDEyNjQuNjklMjA4NzYuNCUyMDEzMTEuMTIlMjA5MjIuOTQlMjAxMzgzLjMlMjA4NTAuNzUl''@;'; put 'put ''MjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5M0Q4Q0ElMjIlMjBvcGFjaXR5JTNEJTIyMC42JTIyJTIwc3R5bGUlM0QlMjJtaXgtYmxlbmQtbW9kZSUzQSUy''@;'; put 'put ''MG92ZXJsYXklM0IlMjIlMjBwb2ludHMlM0QlMjIxMzM2Ljg3JTIwODA0LjIyJTIwMTM4My4zJTIwODUwLjc1JTIwMTYzMi40NiUyMDYwMS41OSUyMDE1ODYuMDElMjA1NTUuMDglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM1REI1RDYlMjIlMjBwb2ludHMlM0QlMjIxMzM2Ljg3JTIwODA0LjIyJTIwMTM4My4zJTIwODUwLjc1JTIwMTYzMi40NiUyMDYwMS41OSUyMDE1ODYuMDElMjA1NTUuMDglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBRkQzRTYlMjIlMjBwb2ludHMlM0QlMjIyMDU2JTIwMC4xMiUyMDE2NDUuNDklMjAwLjEyJTIwMTY0OC40OSUyMDMuMTIlMjAxOTQ0LjA3JTIwMy4xMiUyMDE3OTYu''@;'; put 'put ''MjIlMjAxNTAuOTklMjAxODkzLjEyJTIwMjQ3Ljk3JTIwMjA1NC40NSUyMDg2LjY0JTIwMjA1NC40NSUyMDE3OS42JTIwMTkzOS41OCUyMDI5NC40NyUyMDIwNTYlMjA0MTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3QUI5RDklMjIlMjBwb2ludHMlM0QlMjIxNjQ4LjQ5JTIwMy4xMiUyMDE3OTYuMjIlMjAxNTAuOTklMjAxOTQ0LjA3JTIwMy4xMiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzY2QUVENCUyMiUyMHBvaW50cyUzRCUyMjIwNTQuNDUlMjA4Ni42NCUyMDE4OTMuMTIlMjAyNDcuOTclMjAxOTM5LjU4JTIwMjk0LjQ3JTIwMjA1NC40NSUyMDE3OS42JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUw''@;'; put 'put ''RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjdDRUQyJTIyJTIwcG9pbnRzJTNEJTIyMTg4NC44MiUyMDcwOS43OCUyMDIwNTQuNDUlMjA4NzkuNTclMjAyMDU0LjQ1JTIwNTQwLjE1JTIyJTNFJTND''@;'; put 'put ''JTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQUZENEU3JTIyJTIwcG9pbnRzJTNEJTIyMTQ4OS4xNCUyMDQ1OC4xMiUyMDE0ODkuMTQlMjA0NTguMTIlMjAxMzcxLjEzJTIw''@;'; put 'put ''MzM5Ljk5JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQUZENEU3JTIyJTIwcG9pbnRzJTNEJTIyMTc5Ni4yMiUyMDE1MC45OSUyMDE2NDguNDklMjAzLjEy''@;'; put 'put ''JTIwMTQyNS4xJTIwMy4xMiUyMDEzMDEuOTElMjAxMjYuMzElMjAxNTYxLjMlMjAzODUuOTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM5MUM1RTAlMjIlMjB0''@;'; put 'put ''cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxNzk4Ljk1NDA2NiUyQyUyMDM4OC43OTg3ODElMjklMjByb3RhdGUlMjgtNDQuOTcwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTE3OTguOTU0MDY2JTJDJTIwLTM4OC43OTg3ODElMjklMjAlMjIlMjB4JTNEJTIyMTYzMi44MjQwNyUyMiUyMHklM0Ql''@;'; put 'put ''MjIzNTUuOTMzNzgxJTIyJTIwd2lkdGglM0QlMjIzMzIuMjYlMjIlMjBoZWlnaHQlM0QlMjI2NS43MyUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkxQzVFMCUy''@;'; put 'put ''MiUyMHBvaW50cyUzRCUyMjE1ODYuMDElMjA1NTUuMDglMjAxNjMyLjQ2JTIwNjAxLjU5JTIwMTYzMi40NiUyMDYwMS41OSUyMDE1ODYuMDElMjA1NTUuMDglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTNDcmVjdCUyMGZpbGwlM0QlMjIlMjNCM0VBRUUlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxNTczLjcxMTU3NyUyQyUyMDQ3MC42MjAyNjMlMjklMjByb3RhdGUlMjgtNDUuMDAwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTE1NzMuNzExNTc3JTJDJTIwLTQ3MC42MjAyNjMlMjkl''@;'; put 'put ''MjAlMjIlMjB4JTNEJTIyMTUyMi42ODE1OCUyMiUyMHklM0QlMjI0MDIuMDg1MjYzJTIyJTIwd2lkdGglM0QlMjIxMDIuMDYlMjIlMjBoZWlnaHQlM0QlMjIxMzcuMDclMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjNCM0VBRUUlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxNzU4LjY3Njc1OCUyQyUyMDY1NS43NjcxMjAlMjklMjByb3RhdGUlMjgtNDQuOTcwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTE3NTguNjc2NzU4JTJDJTIwLTY1NS43NjcxMjAl''@;'; put 'put ''MjklMjAlMjIlMjB4JTNEJTIyMTcwNy42NDY3NiUyMiUyMHklM0QlMjI1MjguMjkyMTIlMjIlMjB3aWR0aCUzRCUyMjEwMi4wNiUyMiUyMGhlaWdodCUzRCUyMjI1NC45NSUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0IzRUFFRSUyMiUyMHBvaW50cyUzRCUyMjEzMDEuOTElMjAxMjYuMzElMjAxMTc4Ljg0JTIwMy4xMiUyMDEwMzQuNTklMjAzLjEyJTIwMTIyOS43NSUyMDE5OC40NyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzgzQzBDOCUyMiUyMHBvaW50cyUzRCUyMjE4MTIuNjUlMjA3ODEuOTUlMjAyMDU0LjQ1JTIwMTAyMy45OSUyMDIwNTQuNDUlMjA4NzkuNTclMjAxODg0LjgyJTIwNzA5Ljc4JTIyJTNF''@;'; put 'put ''JTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzN0RDNkRDJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlJTI4MTM5NS41MTY5MDElMkMlMjAyOTIuMjA2NTE5JTI5JTIw''@;'; put 'put ''cm90YXRlJTI4LTQ1LjAwMDAwMCUyOSUyMHRyYW5zbGF0ZSUyOC0xMzk1LjUxNjkwMSUyQyUyMC0yOTIuMjA2NTE5JTI5JTIwJTIyJTIweCUzRCUyMjEzNDQuNDkxOSUyMiUyMHklM0QlMjIxMDguNzAxNTE5JTIyJTIwd2lkdGglM0QlMjIxMDIuMDUlMjIlMjBoZWlnaHQlM0QlMjIzNjcuMDEl''@;'; put 'put ''MjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM2OEI4RDUlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxNjQ1LjMxMzYxOSUyQyUyMDU0Mi4yNDk3NjAlMjkl''@;'; put 'put ''MjByb3RhdGUlMjgtNDUuMDAwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTE2NDUuMzEzNjE5JTJDJTIwLTU0Mi4yNDk3NjAlMjklMjAlMjIlMjB4JTNEJTIyMTU5NC4yODM2MiUyMiUyMHklM0QlMjI1MDkuMzg0NzYlMjIlMjB3aWR0aCUzRCUyMjEwMi4wNiUyMiUyMGhlaWdodCUzRCUyMjY1Ljcz''@;'; put 'put ''JTIyJTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlJTI4MC4wMDAwMDAlMkMlMjAzLjAw''@;'; put 'put ''MDAwMCUyOSUyMiUyMHN0cm9rZSUzRCUyMiUyMzAwMDAwMCUyMiUyMG9wYWNpdHklM0QlMjIwLjE1JTIyJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGQlM0QlMjJNMC45NSUyQzAuMTIlMjBMMC45NSUyQzg0MC4xMiUy''@;'; put 'put ''MiUyMGlkJTNEJTIyU2hhcGUlMjIlM0UlM0MlMkZwYXRoJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEQlMEElMjAlMjAlMjAlMjAlM0MlMkZnJTNFJTBEJTBBJTND''@;'; put 'put ''JTJGc3ZnJTNFKTtiYWNrZ3JvdW5kLXNpemU6MTAwJTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNhbGMoNTgwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSAwO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdH0ubG9naW4td3JhcHBlciAubG9naW57YmFja2dyb3VuZDp2YXIoLS1jbHIt''@;'; put 'put ''bG9naW4tYmFja2dyb3VuZC1jb2xvcik7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7aGVpZ2h0OmF1dG87''@;'; put 'put ''bWluLWhlaWdodDoxMDB2aDt3aWR0aDpjYWxjKDU4MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1mb290ZXIsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1oZWFkZXJ7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7ZmxleC1k''@;'; put 'put ''aXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcn0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWZvb3RlciAuYWN0aW9ucywubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWhlYWRlciAuYWN0aW9uc3ttYXJnaW4tbGVmdDphdXRvfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9n''@;'; put 'put ''aW4taGVhZGVyIC5sb2dve2hlaWdodDoxNnB4O3dpZHRoOjEwMCU7LXdlYmtpdC1tYXNrOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LFwgJTNDc3ZnJTIwd2lkdGglM0QlMjIxMDUlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEwNSUy''@;'; put 'put ''MDE2JTIyJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUzQ3BhdGglMjBkJTNEJTIyTTQ0LjkzNzElMjAxNC44TDQwLjM1OTglMjAyLjAwMDgyQzQwLjI5MzIlMjAxLjgwMDk0JTIwNDAuMjI2NiUy''@;'; put 'put ''MDEuNjAxMDYlMjA0MC4yMjY2JTIwMS40MDExN0M0MC4yMjY2JTIwMC44NjgxNTMlMjA0MC42OTMlMjAwLjM0MTc5NyUyMDQxLjM1MjYlMjAwLjM0MTc5N0M0MS45NTIyJTIwMC4zNDE3OTclMjA0Mi4zNDUzJTIwMC43NDE1NjMlMjA0Mi40Nzg2JTIwMS4yNjc5Mkw0Ni4yNTY0JTIwMTIuMjc0''@;'; put 'put ''OEw1MC4xMDA4JTIwMS4yNjc5MkM1MC4zMDA3JTIwMC43MzQ5JTIwNTAuNjMzOCUyMDAuMzQxNzk3JTIwNTEuMjI2OCUyMDAuMzQxNzk3SDUxLjM2QzUxLjk1OTclMjAwLjM0MTc5NyUyMDUyLjM1MjglMjAwLjc0MTU2MyUyMDUyLjU1MjclMjAxLjI2NzkyTDU2LjMzMDUlMjAxMi4yNzQ4TDYw''@;'; put 'put ''LjE3NDklMjAxLjIwMTI5QzYwLjMwODIlMjAwLjczNDkwMSUyMDYwLjY0MTMlMjAwLjM0MTc5NyUyMDYxLjIzNDMlMjAwLjM0MTc5N0M2MS45MDA2JTIwMC4zNDE3OTclMjA2Mi4zNjAzJTIwMC44MDgxODglMjA2Mi4zNjAzJTIwMS40MDExN0M2Mi4zNjAzJTIwMS42MDEwNiUyMDYyLjI5MzYl''@;'; put 'put ''MjAxLjg2NzU3JTIwNjIuMjI3JTIwMi4wMDA4Mkw1Ny41ODMxJTIwMTQuOEM1Ny4zMTY2JTIwMTUuNDY2MyUyMDU2Ljg1MDIlMjAxNS43OTI4JTIwNTYuMzIzOCUyMDE1Ljc5MjhINTYuMjU3MkM1NS42NTc1JTIwMTUuNzkyOCUyMDU1LjI2NDQlMjAxNS40NTk2JTIwNTQuOTk3OSUyMDE0LjhM''@;'; put 'put ''NTEuMjg2OCUyMDMuOTI2MzZMNDcuNTA5JTIwMTQuOEM0Ny4zMDkxJTIwMTUuNDY2MyUyMDQ2Ljg0OTQlMjAxNS43OTI4JTIwNDYuMzE2MyUyMDE1Ljc5MjhINDYuMjQ5N0M0NS42NTAxJTIwMTUuNzkyOCUyMDQ1LjE5MDMlMjAxNS40NTk2JTIwNDQuOTIzOCUyMDE0LjhINDQuOTM3MVolMjIl''@;'; put 'put ''MjBmaWxsJTNEJTIyJTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDcGF0aCUyMGQlM0QlMjJNNzguMzUyNSUyMDEuNDY3OEM3OC4zNTI1JTIwMC44NjgxNTIlMjA3OC44MTg5JTIwMC4zNDE3OTclMjA3OS40Nzg1JTIwMC4zNDE3OTdDODAuMTM4MiUyMDAuMzQxNzk3JTIwODAuNjA0NSUyMDAuODA4''@;'; put 'put ''MTg3JTIwODAuNjA0NSUyMDEuNDY3OFY0LjA1Mjk2QzgxLjczMDYlMjAxLjUzNDQzJTIwODQuMTgyNSUyMDAuMzQxNzk3JTIwODUuODQxNSUyMDAuMzQxNzk3Qzg2LjUwMTElMjAwLjM0MTc5NyUyMDg2Ljk2NzUlMjAwLjgwODE4NyUyMDg2Ljk2NzUlMjAxLjQ2NzhDODYuOTY3NSUyMDIuMDY3''@;'; put 'put ''NDUlMjA4Ni41Njc3JTIwMi41MjcxOCUyMDg1Ljk3NDclMjAyLjU5MzgxQzgzLjA1NjQlMjAyLjkyNjk1JTIwODAuNjcxMiUyMDUuMTEyMzQlMjA4MC42NzEyJTIwOS40ODk3OFYxNC41OTM1QzgwLjY3MTIlMjAxNS4xOTMxJTIwODAuMjA0OCUyMDE1LjcxOTUlMjA3OS41NDUyJTIwMTUuNzE5''@;'; put 'put ''NUM3OC44ODU2JTIwMTUuNzE5NSUyMDc4LjQxOTIlMjAxNS4xODY0JTIwNzguNDE5MiUyMDE0LjU5MzVWMS40NjExNCUyMiUyMGZpbGwlM0QlMjIlMjM3MTcxNzUlMjIlMkYlM0UlMEElM0NwYXRoJTIwZCUzRCUyMk05NC4xMjk0JTIwMTUuOTI3MkM5MC4wODUxJTIwMTUuOTI3MiUyMDg2Ljcw''@;'; put 'put ''NyUyMDEyLjc0MjQlMjA4Ni43MDclMjA4LjE3MTdWOC4xMDUwOEM4Ni43MDclMjAzLjc5NDI3JTIwODkuNjkxOSUyMDAuMzQ5NjA5JTIwOTMuODAyOSUyMDAuMzQ5NjA5Qzk4LjE4MDMlMjAwLjM0OTYwOSUyMDEwMC42OTklMjAzLjk5NDE1JTIwMTAwLjY5OSUyMDcuOTExODZDMTAwLjY5OSUy''@;'; put 'put ''MDguNTExNTElMjAxMDAuMjMyJTIwOC45NzEyMyUyMDk5LjYzOTUlMjA4Ljk3MTIzSDg4Ljg5OTFDODkuMjMyMiUyMDEyLjIyMjclMjA5MS40ODQyJTIwMTQuMDA4MyUyMDk0LjEzNiUyMDE0LjAwODNDOTUuOTk0OSUyMDE0LjAwODMlMjA5Ny4zMjA4JTIwMTMuMjgyJTIwOTguMzgwMiUyMDEy''@;'; put 'put ''LjI4MjZDOTguNTgwMSUyMDEyLjE0OTQlMjA5OC43OCUyMDEyLjAxNjElMjA5OS4wMzk4JTIwMTIuMDE2MUM5OS41NzI4JTIwMTIuMDE2MSUyMDEwMC4wMzMlMjAxMi40ODI1JTIwMTAwLjAzMyUyMDEyLjk0MjJDMTAwLjAzMyUyMDEzLjIwODglMjA5OS44OTkzJTIwMTMuNDc1MyUyMDk5LjY5''@;'; put 'put ''OTQlMjAxMy42Njg1Qzk4LjMwNjklMjAxNC45OTQ0JTIwOTYuNjQ3OSUyMDE1LjkyMDUlMjA5NC4xMjk0JTIwMTUuOTIwNVYxNS45MjcyWk05OC41MDY4JTIwNy4yMzg5MUM5OC4zMDY5JTIwNC41MjA1MSUyMDk2LjcxNDUlMjAyLjEzNTIzJTIwOTMuODAyOSUyMDIuMTM1MjNDOTEuMjE3NyUy''@;'; put 'put ''MDIuMTM1MjMlMjA4OS4yOTIyJTIwNC4zMjA2MiUyMDg4Ljk2NTclMjA3LjIzODkxSDk4LjUxMzVIOTguNTA2OFolMjIlMjBmaWxsJTNEJTIyJTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDcGF0aCUyMGQlM0QlMjJNNjIuMzc1JTIwMTEuMjE1OEM2Mi4zNzUlMjA3Ljk2NDQlMjA2NS4wMjY4JTIw''@;'; put 'put ''Ni4zMDUzNyUyMDY4LjgwNDYlMjA2LjMwNTM3QzcwLjczMDElMjA2LjMwNTM3JTIwNzIuMTIyNiUyMDYuNTcxODglMjA3My40NDE5JTIwNi45NzE2NVY2LjQzODYzQzczLjQ0MTklMjAzLjcyMDIyJTIwNzEuNzgyOCUyMDIuMzI3NyUyMDY4LjkzMTIlMjAyLjMyNzdDNjcuNDA1NCUyMDIuMzI3''@;'; put 'put ''NyUyMDY2LjU0NTklMjAyLjUyNzU4JTIwNjUuNDE5OSUyMDIuOTkzOTdDNjUuMjg2NiUyMDMuMDYwNiUyMDY1LjE1MzQlMjAzLjA2MDYlMjA2NS4wMjAxJTIwMy4wNjA2QzY0LjQ4NzElMjAzLjA2MDYlMjA2NC4wMjc0JTIwMi41OTQyMSUyMDY0LjAyNzQlMjAyLjA2Nzg1QzY0LjAyNzQlMjAx''@;'; put 'put ''LjYwMTQ2JTIwNjQuMjI3MyUyMDEuMzQxNjElMjA2NC42MjclMjAxLjE0MTcyQzY2LjA4NjIlMjAwLjQ3NTQ0NyUyMDY3LjIxMjIlMjAwLjI4MjIyNyUyMDY5LjEzNzclMjAwLjI4MjIyN0M3MS4yNTY1JTIwMC4yODIyMjclMjA3Mi45MTU1JTIwMC44MTUyNTIlMjA3My45NzQ5JTIwMS45NDEy''@;'; put 'put ''NkM3NC45Njc2JTIwMi45MzQwMSUyMDc1LjUwMDclMjA0LjM5MzE2JTIwNzUuNTAwNyUyMDYuMzE4N1YxNC42MDcyQzc1LjUwMDclMjAxNS4yNzM1JTIwNzUuMDM0MyUyMDE1LjczMzIlMjA3NC40NDEzJTIwMTUuNzMzMkM3My43NzUlMjAxNS43MzMyJTIwNzMuMzgxOSUyMDE1LjI2NjglMjA3''@;'; put 'put ''My4zODE5JTIwMTQuNjczOFYxMy4yMTQ3QzcyLjMyMjUlMjAxNC42MDcyJTIwNzAuNTk2OSUyMDE1Ljc5OTglMjA2Ny45NDUxJTIwMTUuNzk5OEM2NS4yMjY3JTIwMTUuOTMzMSUyMDYyLjM3NSUyMDE0LjM0MDclMjA2Mi4zNzUlMjAxMS4yMjI1VjExLjIxNThaTTczLjUxNTIlMjAxMC4wODk4''@;'; put 'put ''VjguNjMwNjhDNzIuMzg5MSUyMDguMjk3NTQlMjA3MC45MyUyMDcuOTY0NCUyMDY5LjA3MTElMjA3Ljk2NDRDNjYuMjE5NCUyMDcuOTY0NCUyMDY0LjY5MzclMjA5LjIyMzY2JTIwNjQuNjkzNyUyMDExLjA4MjZWMTEuMTQ5MkM2NC42OTM3JTIwMTMuMDc0NyUyMDY2LjQxOTMlMjAxNC4xMzQx''@;'; put 'put ''JTIwNjguNDcxNCUyMDE0LjEzNDFDNzEuMjU2NSUyMDE0LjEzNDElMjA3My41MDg1JTIwMTIuNDc1MSUyMDczLjUwODUlMjAxMC4wODk4SDczLjUxNTJaJTIyJTIwZmlsbCUzRCUyMiUyMzcxNzE3NSUyMiUyRiUzRSUwQSUzQ3BhdGglMjBkJTNEJTIyTTQuMTAyMjIlMjAxLjI2ODYyQzMuNjM1''@;'; put 'put ''ODMlMjAwLjIwOTIzNyUyMDIuMzc2NTYlMjAtMC4zMjM3ODclMjAxLjI1MDU1JTIwMC4yMDkyMzVDMC4xMjQ1NDUlMjAwLjc0MjI1NiUyMC0wLjI3NTIxOCUyMDIuMDAxNTIlMjAwLjE5MTE3NiUyMDMuMDYwOUw0Ljk2MTcyJTIwMTMuNDc0OEM1LjY4Nzk2JTIwMTUuMTMzOCUyMDYuNDg3NDkl''@;'; put 'put ''MjAxNS45MjY3JTIwOC4wMTMyNyUyMDE1LjkyNjdDOS41MzkwNCUyMDE1LjkyNjclMjAxMC4yNjUzJTIwMTUuMDAwNiUyMDExLjA2NDglMjAxMy40NzQ4QzExLjA2NDglMjAxMy40NzQ4JTIwMTUuMjQyNCUyMDQuMzg2NzklMjAxNS4zMDklMjA0LjMyNjgzQzE1LjM3NTYlMjA0LjI2MDIlMjAx''@;'; put 'put ''NS41MDg5JTIwMy45MjcwNiUyMDE1LjkwODYlMjAzLjkyNzA2QzE2LjI0MTglMjAzLjkyNzA2JTIwMTYuNTY4MyUyMDQuMTkzNTclMjAxNi41NjgzJTIwNC41OTMzNFYxMy40ODE1QzE2LjU2ODMlMjAxNC44NzQlMjAxNy4yOTQ1JTIwMTYlMjAxOC44MjAzJTIwMTZDMjAuMzQ2MSUyMDE2JTIw''@;'; put 'put ''MjEuMDcyMyUyMDE0Ljg3NCUyMDIxLjA3MjMlMjAxMy40ODE1VjYuMTg1NzRDMjEuMDcyMyUyMDQuNzkzMjIlMjAyMi4wNjUlMjAzLjg2NzElMjAyMy40NTc2JTIwMy44NjcxQzI0Ljg1MDElMjAzLjg2NzElMjAyNS43MDk2JTIwNC43OTMyMiUyMDI1LjcwOTYlMjA2LjE4NTc0VjEzLjQ4MTVD''@;'; put 'put ''MjUuNzA5NiUyMDE0Ljg3NCUyMDI2LjQ0MjUlMjAxNiUyMDI3Ljk2MTYlMjAxNkMyOS40ODA3JTIwMTYlMjAzMC4yMTM2JTIwMTQuODc0JTIwMzAuMjEzNiUyMDEzLjQ4MTVWNi4xODU3NEMzMC4yMTM2JTIwNC43OTMyMiUyMDMxLjIwNjQlMjAzLjg2NzElMjAzMi41OTg5JTIwMy44NjcxQzMz''@;'; put 'put ''Ljk5MTQlMjAzLjg2NzElMjAzNC44NTA5JTIwNC43OTMyMiUyMDM0Ljg1MDklMjA2LjE4NTc0VjEzLjQ4MTVDMzQuODUwOSUyMDE0Ljg3NCUyMDM1LjU3NzElMjAxNiUyMDM3LjEwMjklMjAxNkMzOC42Mjg3JTIwMTYlMjAzOS4zNTQ5JTIwMTQuODc0JTIwMzkuMzU0OSUyMDEzLjQ4MTVWNS4x''@;'; put 'put ''OTI5OUMzOS4zNTQ5JTIwMi4xNDE0NCUyMDM2LjkwMyUyMDAuMDIyNjc4MSUyMDMzLjk4NDclMjAwLjAyMjY3ODFDMzEuMDY2NCUyMDAuMDIyNjc4MSUyMDI5LjIxNDIlMjAyLjA4MTQ4JTIwMjkuMjE0MiUyMDIuMDgxNDhDMjguMDg4MiUyMDAuODIyMjEzJTIwMjYuNzYyMyUyMDAuMDIyNjc4''@;'; put 'put ''MSUyMDI0LjUxMDMlMjAwLjAyMjY3ODFDMjIuMTI1JTIwMC4wMjI2NzgxJTIwMTkuOTk5NiUyMDIuMDgxNDglMjAxOS45OTk2JTIwMi4wODE0OEMxOS4wMDY4JTIwMC44MjIyMTMlMjAxNy4zNDc4JTIwMC4wMjI2NzgxJTIwMTUuOTU1MyUyMDAuMDIyNjc4MUMxMy44MzY1JTIwMC4wMjI2Nzgx''@;'; put 'put ''JTIwMTIuMTEwOSUyMDAuOTQ4ODA1JTIwMTEuMTE4MSUyMDMuMzQwNzRMOC4wNjY1NyUyMDEwLjU2OThMNC4wODg4OSUyMDEuMjg4NjFMNC4xMDIyMiUyMDEuMjY4NjJaJTIyJTIwZmlsbCUzRCUyMiUyMzcxNzE3NSUyMiUyRiUzRSUwQSUzQ3BhdGglMjBkJTNEJTIyTTEwMC44OTIlMjAyLjIw''@;'; put 'put ''MDcxQzEwMC44OTIlMjAxLjE0MTMzJTIwMTAxLjY4NCUyMDAuMzQxNzk3JTIwMTAyLjc1MSUyMDAuMzQxNzk3QzEwMy44MTclMjAwLjM0MTc5NyUyMDEwNC42MDklMjAxLjIwMTI5JTIwMTA0LjYwOSUyMDIuMjAwNzFDMTA0LjYwOSUyMDMuMjAwMTMlMjAxMDMuODE3JTIwNC4wNTk2MiUyMDEw''@;'; put 'put ''Mi43NTElMjA0LjA1OTYyQzEwMS43NTglMjA0LjA1OTYyJTIwMTAwLjg5MiUyMDMuMjAwMTMlMjAxMDAuODkyJTIwMi4yMDA3MVpNMTA0LjI3JTIwMi4yMDA3MUMxMDQuMjclMjAxLjM0MTIxJTIwMTAzLjYxJTIwMC42NzQ5MzUlMjAxMDIuNzQ0JTIwMC42NzQ5MzVDMTAxLjg3OCUyMDAuNjc0''@;'; put 'put ''OTM1JTIwMTAxLjIxOCUyMDEuNDAxMTglMjAxMDEuMjE4JTIwMi4yMDA3MUMxMDEuMjE4JTIwMy4wNjAyMSUyMDEwMS44NzglMjAzLjcyNjQ4JTIwMTAyLjc0NCUyMDMuNzI2NDhDMTAzLjYxJTIwMy43MjY0OCUyMDEwNC4yNyUyMDMuMDAwMjQlMjAxMDQuMjclMjAyLjIwMDcxWiUyMiUyMGZp''@;'; put 'put ''bGwlM0QlMjIlMjM3MTcxNzUlMjIlMkYlM0UlMEElM0NwYXRoJTIwZCUzRCUyMk0xMDIuMDg1JTIwMS40MDIwM0MxMDIuMDg1JTIwMS4yNjg3NyUyMDEwMi4xNTIlMjAxLjIwMjE1JTIwMTAyLjI4NSUyMDEuMjAyMTVIMTAyLjg4NUMxMDMuMTUxJTIwMS4yMDIxNSUyMDEwMy4yODQlMjAxLjI2''@;'; put 'put ''ODc3JTIwMTAzLjQxOCUyMDEuNDAyMDNDMTAzLjU1MSUyMDEuNTM1MjglMjAxMDMuNTUxJTIwMS42Njg1NCUyMDEwMy41NTElMjAxLjgwMTc5QzEwMy41NTElMjAyLjA2ODMlMjAxMDMuNDE4JTIwMi4yNjgxOSUyMDEwMy4yMTglMjAyLjMzNDgyTDEwMy40ODQlMjAyLjY2Nzk2QzEwMy41Mjkl''@;'; put 'put ''MjAyLjcxMjM3JTIwMTAzLjU1MSUyMDIuNzU2NzklMjAxMDMuNTUxJTIwMi44MDEyMUMxMDMuNTUxJTIwMi45MzQ0NiUyMDEwMy40ODQlMjAzLjAwMTA5JTIwMTAzLjM1MSUyMDMuMDAxMDlDMTAzLjI4NCUyMDMuMDAxMDklMjAxMDMuMjE4JTIwMi45MzQ0NyUyMDEwMy4xNTElMjAyLjg2Nzg0''@;'; put 'put ''TDEwMi43NTElMjAyLjQwMTQ0SDEwMi40MThWMi44MDEyMUMxMDIuNDE4JTIwMi45MzQ0NiUyMDEwMi4zNTIlMjAzLjAwMTA5JTIwMTAyLjIxOCUyMDMuMDAxMDlDMTAyLjA4NSUyMDMuMDAxMDklMjAxMDIuMDE5JTIwMi45MzQ0NiUyMDEwMi4wMTklMjAyLjgwMTIxVjEuNDA4NjlIMTAyLjA4''@;'; put 'put ''NVYxLjQwMjAzWk0xMDIuODc4JTIwMi4xMjgyN0MxMDMuMDc4JTIwMi4xMjgyNyUyMDEwMy4yMTElMjAxLjk5NTAyJTIwMTAzLjIxMSUyMDEuODYxNzZDMTAzLjIxMSUyMDEuNjYxODglMjAxMDMuMDc4JTIwMS41OTUyNSUyMDEwMi44NzglMjAxLjU5NTI1SDEwMi40NzhWMi4xMjgyN0gxMDIu''@;'; put 'put ''ODc4WiUyMiUyMGZpbGwlM0QlMjIlMjM3MTcxNzUlMjIlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEpO21hc2s6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsXCAlM0NzdmclMjB3aWR0aCUzRCUyMjEwNSUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAl''@;'; put 'put ''MjAwJTIwMTA1JTIwMTYlMjIlMjBmaWxsJTNEJTIybm9uZSUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTNDcGF0aCUyMGQlM0QlMjJNNDQuOTM3MSUyMDE0LjhMNDAuMzU5OCUyMDIuMDAwODJDNDAuMjkzMiUyMDEuODAwOTQl''@;'; put 'put ''MjA0MC4yMjY2JTIwMS42MDEwNiUyMDQwLjIyNjYlMjAxLjQwMTE3QzQwLjIyNjYlMjAwLjg2ODE1MyUyMDQwLjY5MyUyMDAuMzQxNzk3JTIwNDEuMzUyNiUyMDAuMzQxNzk3QzQxLjk1MjIlMjAwLjM0MTc5NyUyMDQyLjM0NTMlMjAwLjc0MTU2MyUyMDQyLjQ3ODYlMjAxLjI2NzkyTDQ2LjI1''@;'; put 'put ''NjQlMjAxMi4yNzQ4TDUwLjEwMDglMjAxLjI2NzkyQzUwLjMwMDclMjAwLjczNDklMjA1MC42MzM4JTIwMC4zNDE3OTclMjA1MS4yMjY4JTIwMC4zNDE3OTdINTEuMzZDNTEuOTU5NyUyMDAuMzQxNzk3JTIwNTIuMzUyOCUyMDAuNzQxNTYzJTIwNTIuNTUyNyUyMDEuMjY3OTJMNTYuMzMwNSUy''@;'; put 'put ''MDEyLjI3NDhMNjAuMTc0OSUyMDEuMjAxMjlDNjAuMzA4MiUyMDAuNzM0OTAxJTIwNjAuNjQxMyUyMDAuMzQxNzk3JTIwNjEuMjM0MyUyMDAuMzQxNzk3QzYxLjkwMDYlMjAwLjM0MTc5NyUyMDYyLjM2MDMlMjAwLjgwODE4OCUyMDYyLjM2MDMlMjAxLjQwMTE3QzYyLjM2MDMlMjAxLjYwMTA2''@;'; put 'put ''JTIwNjIuMjkzNiUyMDEuODY3NTclMjA2Mi4yMjclMjAyLjAwMDgyTDU3LjU4MzElMjAxNC44QzU3LjMxNjYlMjAxNS40NjYzJTIwNTYuODUwMiUyMDE1Ljc5MjglMjA1Ni4zMjM4JTIwMTUuNzkyOEg1Ni4yNTcyQzU1LjY1NzUlMjAxNS43OTI4JTIwNTUuMjY0NCUyMDE1LjQ1OTYlMjA1NC45''@;'; put 'put ''OTc5JTIwMTQuOEw1MS4yODY4JTIwMy45MjYzNkw0Ny41MDklMjAxNC44QzQ3LjMwOTElMjAxNS40NjYzJTIwNDYuODQ5NCUyMDE1Ljc5MjglMjA0Ni4zMTYzJTIwMTUuNzkyOEg0Ni4yNDk3QzQ1LjY1MDElMjAxNS43OTI4JTIwNDUuMTkwMyUyMDE1LjQ1OTYlMjA0NC45MjM4JTIwMTQuOEg0''@;'; put 'put ''NC45MzcxWiUyMiUyMGZpbGwlM0QlMjIlMjM3MTcxNzUlMjIlMkYlM0UlMEElM0NwYXRoJTIwZCUzRCUyMk03OC4zNTI1JTIwMS40Njc4Qzc4LjM1MjUlMjAwLjg2ODE1MiUyMDc4LjgxODklMjAwLjM0MTc5NyUyMDc5LjQ3ODUlMjAwLjM0MTc5N0M4MC4xMzgyJTIwMC4zNDE3OTclMjA4MC42''@;'; put 'put ''MDQ1JTIwMC44MDgxODclMjA4MC42MDQ1JTIwMS40Njc4VjQuMDUyOTZDODEuNzMwNiUyMDEuNTM0NDMlMjA4NC4xODI1JTIwMC4zNDE3OTclMjA4NS44NDE1JTIwMC4zNDE3OTdDODYuNTAxMSUyMDAuMzQxNzk3JTIwODYuOTY3NSUyMDAuODA4MTg3JTIwODYuOTY3NSUyMDEuNDY3OEM4Ni45''@;'; put 'put ''Njc1JTIwMi4wNjc0NSUyMDg2LjU2NzclMjAyLjUyNzE4JTIwODUuOTc0NyUyMDIuNTkzODFDODMuMDU2NCUyMDIuOTI2OTUlMjA4MC42NzEyJTIwNS4xMTIzNCUyMDgwLjY3MTIlMjA5LjQ4OTc4VjE0LjU5MzVDODAuNjcxMiUyMDE1LjE5MzElMjA4MC4yMDQ4JTIwMTUuNzE5NSUyMDc5LjU0''@;'; put 'put ''NTIlMjAxNS43MTk1Qzc4Ljg4NTYlMjAxNS43MTk1JTIwNzguNDE5MiUyMDE1LjE4NjQlMjA3OC40MTkyJTIwMTQuNTkzNVYxLjQ2MTE0JTIyJTIwZmlsbCUzRCUyMiUyMzcxNzE3NSUyMiUyRiUzRSUwQSUzQ3BhdGglMjBkJTNEJTIyTTk0LjEyOTQlMjAxNS45MjcyQzkwLjA4NTElMjAxNS45''@;'; put 'put ''MjcyJTIwODYuNzA3JTIwMTIuNzQyNCUyMDg2LjcwNyUyMDguMTcxN1Y4LjEwNTA4Qzg2LjcwNyUyMDMuNzk0MjclMjA4OS42OTE5JTIwMC4zNDk2MDklMjA5My44MDI5JTIwMC4zNDk2MDlDOTguMTgwMyUyMDAuMzQ5NjA5JTIwMTAwLjY5OSUyMDMuOTk0MTUlMjAxMDAuNjk5JTIwNy45MTE4''@;'; put 'put ''NkMxMDAuNjk5JTIwOC41MTE1MSUyMDEwMC4yMzIlMjA4Ljk3MTIzJTIwOTkuNjM5NSUyMDguOTcxMjNIODguODk5MUM4OS4yMzIyJTIwMTIuMjIyNyUyMDkxLjQ4NDIlMjAxNC4wMDgzJTIwOTQuMTM2JTIwMTQuMDA4M0M5NS45OTQ5JTIwMTQuMDA4MyUyMDk3LjMyMDglMjAxMy4yODIlMjA5''@;'; put 'put ''OC4zODAyJTIwMTIuMjgyNkM5OC41ODAxJTIwMTIuMTQ5NCUyMDk4Ljc4JTIwMTIuMDE2MSUyMDk5LjAzOTglMjAxMi4wMTYxQzk5LjU3MjglMjAxMi4wMTYxJTIwMTAwLjAzMyUyMDEyLjQ4MjUlMjAxMDAuMDMzJTIwMTIuOTQyMkMxMDAuMDMzJTIwMTMuMjA4OCUyMDk5Ljg5OTMlMjAxMy40''@;'; put 'put ''NzUzJTIwOTkuNjk5NCUyMDEzLjY2ODVDOTguMzA2OSUyMDE0Ljk5NDQlMjA5Ni42NDc5JTIwMTUuOTIwNSUyMDk0LjEyOTQlMjAxNS45MjA1VjE1LjkyNzJaTTk4LjUwNjglMjA3LjIzODkxQzk4LjMwNjklMjA0LjUyMDUxJTIwOTYuNzE0NSUyMDIuMTM1MjMlMjA5My44MDI5JTIwMi4xMzUy''@;'; put 'put ''M0M5MS4yMTc3JTIwMi4xMzUyMyUyMDg5LjI5MjIlMjA0LjMyMDYyJTIwODguOTY1NyUyMDcuMjM4OTFIOTguNTEzNUg5OC41MDY4WiUyMiUyMGZpbGwlM0QlMjIlMjM3MTcxNzUlMjIlMkYlM0UlMEElM0NwYXRoJTIwZCUzRCUyMk02Mi4zNzUlMjAxMS4yMTU4QzYyLjM3NSUyMDcuOTY0NCUy''@;'; put 'put ''MDY1LjAyNjglMjA2LjMwNTM3JTIwNjguODA0NiUyMDYuMzA1MzdDNzAuNzMwMSUyMDYuMzA1MzclMjA3Mi4xMjI2JTIwNi41NzE4OCUyMDczLjQ0MTklMjA2Ljk3MTY1VjYuNDM4NjNDNzMuNDQxOSUyMDMuNzIwMjIlMjA3MS43ODI4JTIwMi4zMjc3JTIwNjguOTMxMiUyMDIuMzI3N0M2Ny40''@;'; put 'put ''MDU0JTIwMi4zMjc3JTIwNjYuNTQ1OSUyMDIuNTI3NTglMjA2NS40MTk5JTIwMi45OTM5N0M2NS4yODY2JTIwMy4wNjA2JTIwNjUuMTUzNCUyMDMuMDYwNiUyMDY1LjAyMDElMjAzLjA2MDZDNjQuNDg3MSUyMDMuMDYwNiUyMDY0LjAyNzQlMjAyLjU5NDIxJTIwNjQuMDI3NCUyMDIuMDY3ODVD''@;'; put 'put ''NjQuMDI3NCUyMDEuNjAxNDYlMjA2NC4yMjczJTIwMS4zNDE2MSUyMDY0LjYyNyUyMDEuMTQxNzJDNjYuMDg2MiUyMDAuNDc1NDQ3JTIwNjcuMjEyMiUyMDAuMjgyMjI3JTIwNjkuMTM3NyUyMDAuMjgyMjI3QzcxLjI1NjUlMjAwLjI4MjIyNyUyMDcyLjkxNTUlMjAwLjgxNTI1MiUyMDczLjk3''@;'; put 'put ''NDklMjAxLjk0MTI2Qzc0Ljk2NzYlMjAyLjkzNDAxJTIwNzUuNTAwNyUyMDQuMzkzMTYlMjA3NS41MDA3JTIwNi4zMTg3VjE0LjYwNzJDNzUuNTAwNyUyMDE1LjI3MzUlMjA3NS4wMzQzJTIwMTUuNzMzMiUyMDc0LjQ0MTMlMjAxNS43MzMyQzczLjc3NSUyMDE1LjczMzIlMjA3My4zODE5JTIw''@;'; put 'put ''MTUuMjY2OCUyMDczLjM4MTklMjAxNC42NzM4VjEzLjIxNDdDNzIuMzIyNSUyMDE0LjYwNzIlMjA3MC41OTY5JTIwMTUuNzk5OCUyMDY3Ljk0NTElMjAxNS43OTk4QzY1LjIyNjclMjAxNS45MzMxJTIwNjIuMzc1JTIwMTQuMzQwNyUyMDYyLjM3NSUyMDExLjIyMjVWMTEuMjE1OFpNNzMuNTE1''@;'; put 'put ''MiUyMDEwLjA4OThWOC42MzA2OEM3Mi4zODkxJTIwOC4yOTc1NCUyMDcwLjkzJTIwNy45NjQ0JTIwNjkuMDcxMSUyMDcuOTY0NEM2Ni4yMTk0JTIwNy45NjQ0JTIwNjQuNjkzNyUyMDkuMjIzNjYlMjA2NC42OTM3JTIwMTEuMDgyNlYxMS4xNDkyQzY0LjY5MzclMjAxMy4wNzQ3JTIwNjYuNDE5''@;'; put 'put ''MyUyMDE0LjEzNDElMjA2OC40NzE0JTIwMTQuMTM0MUM3MS4yNTY1JTIwMTQuMTM0MSUyMDczLjUwODUlMjAxMi40NzUxJTIwNzMuNTA4NSUyMDEwLjA4OThINzMuNTE1MlolMjIlMjBmaWxsJTNEJTIyJTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDcGF0aCUyMGQlM0QlMjJNNC4xMDIyMiUyMDEu''@;'; put 'put ''MjY4NjJDMy42MzU4MyUyMDAuMjA5MjM3JTIwMi4zNzY1NiUyMC0wLjMyMzc4NyUyMDEuMjUwNTUlMjAwLjIwOTIzNUMwLjEyNDU0NSUyMDAuNzQyMjU2JTIwLTAuMjc1MjE4JTIwMi4wMDE1MiUyMDAuMTkxMTc2JTIwMy4wNjA5TDQuOTYxNzIlMjAxMy40NzQ4QzUuNjg3OTYlMjAxNS4xMzM4''@;'; put 'put ''JTIwNi40ODc0OSUyMDE1LjkyNjclMjA4LjAxMzI3JTIwMTUuOTI2N0M5LjUzOTA0JTIwMTUuOTI2NyUyMDEwLjI2NTMlMjAxNS4wMDA2JTIwMTEuMDY0OCUyMDEzLjQ3NDhDMTEuMDY0OCUyMDEzLjQ3NDglMjAxNS4yNDI0JTIwNC4zODY3OSUyMDE1LjMwOSUyMDQuMzI2ODNDMTUuMzc1NiUy''@;'; put 'put ''MDQuMjYwMiUyMDE1LjUwODklMjAzLjkyNzA2JTIwMTUuOTA4NiUyMDMuOTI3MDZDMTYuMjQxOCUyMDMuOTI3MDYlMjAxNi41NjgzJTIwNC4xOTM1NyUyMDE2LjU2ODMlMjA0LjU5MzM0VjEzLjQ4MTVDMTYuNTY4MyUyMDE0Ljg3NCUyMDE3LjI5NDUlMjAxNiUyMDE4LjgyMDMlMjAxNkMyMC4z''@;'; put 'put ''NDYxJTIwMTYlMjAyMS4wNzIzJTIwMTQuODc0JTIwMjEuMDcyMyUyMDEzLjQ4MTVWNi4xODU3NEMyMS4wNzIzJTIwNC43OTMyMiUyMDIyLjA2NSUyMDMuODY3MSUyMDIzLjQ1NzYlMjAzLjg2NzFDMjQuODUwMSUyMDMuODY3MSUyMDI1LjcwOTYlMjA0Ljc5MzIyJTIwMjUuNzA5NiUyMDYuMTg1''@;'; put 'put ''NzRWMTMuNDgxNUMyNS43MDk2JTIwMTQuODc0JTIwMjYuNDQyNSUyMDE2JTIwMjcuOTYxNiUyMDE2QzI5LjQ4MDclMjAxNiUyMDMwLjIxMzYlMjAxNC44NzQlMjAzMC4yMTM2JTIwMTMuNDgxNVY2LjE4NTc0QzMwLjIxMzYlMjA0Ljc5MzIyJTIwMzEuMjA2NCUyMDMuODY3MSUyMDMyLjU5ODkl''@;'; put 'put ''MjAzLjg2NzFDMzMuOTkxNCUyMDMuODY3MSUyMDM0Ljg1MDklMjA0Ljc5MzIyJTIwMzQuODUwOSUyMDYuMTg1NzRWMTMuNDgxNUMzNC44NTA5JTIwMTQuODc0JTIwMzUuNTc3MSUyMDE2JTIwMzcuMTAyOSUyMDE2QzM4LjYyODclMjAxNiUyMDM5LjM1NDklMjAxNC44NzQlMjAzOS4zNTQ5JTIw''@;'; put 'put ''MTMuNDgxNVY1LjE5Mjk5QzM5LjM1NDklMjAyLjE0MTQ0JTIwMzYuOTAzJTIwMC4wMjI2NzgxJTIwMzMuOTg0NyUyMDAuMDIyNjc4MUMzMS4wNjY0JTIwMC4wMjI2NzgxJTIwMjkuMjE0MiUyMDIuMDgxNDglMjAyOS4yMTQyJTIwMi4wODE0OEMyOC4wODgyJTIwMC44MjIyMTMlMjAyNi43NjIz''@;'; put 'put ''JTIwMC4wMjI2NzgxJTIwMjQuNTEwMyUyMDAuMDIyNjc4MUMyMi4xMjUlMjAwLjAyMjY3ODElMjAxOS45OTk2JTIwMi4wODE0OCUyMDE5Ljk5OTYlMjAyLjA4MTQ4QzE5LjAwNjglMjAwLjgyMjIxMyUyMDE3LjM0NzglMjAwLjAyMjY3ODElMjAxNS45NTUzJTIwMC4wMjI2NzgxQzEzLjgzNjUl''@;'; put 'put ''MjAwLjAyMjY3ODElMjAxMi4xMTA5JTIwMC45NDg4MDUlMjAxMS4xMTgxJTIwMy4zNDA3NEw4LjA2NjU3JTIwMTAuNTY5OEw0LjA4ODg5JTIwMS4yODg2MUw0LjEwMjIyJTIwMS4yNjg2MlolMjIlMjBmaWxsJTNEJTIyJTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDcGF0aCUyMGQlM0QlMjJNMTAw''@;'; put 'put ''Ljg5MiUyMDIuMjAwNzFDMTAwLjg5MiUyMDEuMTQxMzMlMjAxMDEuNjg0JTIwMC4zNDE3OTclMjAxMDIuNzUxJTIwMC4zNDE3OTdDMTAzLjgxNyUyMDAuMzQxNzk3JTIwMTA0LjYwOSUyMDEuMjAxMjklMjAxMDQuNjA5JTIwMi4yMDA3MUMxMDQuNjA5JTIwMy4yMDAxMyUyMDEwMy44MTclMjA0''@;'; put 'put ''LjA1OTYyJTIwMTAyLjc1MSUyMDQuMDU5NjJDMTAxLjc1OCUyMDQuMDU5NjIlMjAxMDAuODkyJTIwMy4yMDAxMyUyMDEwMC44OTIlMjAyLjIwMDcxWk0xMDQuMjclMjAyLjIwMDcxQzEwNC4yNyUyMDEuMzQxMjElMjAxMDMuNjElMjAwLjY3NDkzNSUyMDEwMi43NDQlMjAwLjY3NDkzNUMxMDEu''@;'; put 'put ''ODc4JTIwMC42NzQ5MzUlMjAxMDEuMjE4JTIwMS40MDExOCUyMDEwMS4yMTglMjAyLjIwMDcxQzEwMS4yMTglMjAzLjA2MDIxJTIwMTAxLjg3OCUyMDMuNzI2NDglMjAxMDIuNzQ0JTIwMy43MjY0OEMxMDMuNjElMjAzLjcyNjQ4JTIwMTA0LjI3JTIwMy4wMDAyNCUyMDEwNC4yNyUyMDIuMjAw''@;'; put 'put ''NzFaJTIyJTIwZmlsbCUzRCUyMiUyMzcxNzE3NSUyMiUyRiUzRSUwQSUzQ3BhdGglMjBkJTNEJTIyTTEwMi4wODUlMjAxLjQwMjAzQzEwMi4wODUlMjAxLjI2ODc3JTIwMTAyLjE1MiUyMDEuMjAyMTUlMjAxMDIuMjg1JTIwMS4yMDIxNUgxMDIuODg1QzEwMy4xNTElMjAxLjIwMjE1JTIwMTAz''@;'; put 'put ''LjI4NCUyMDEuMjY4NzclMjAxMDMuNDE4JTIwMS40MDIwM0MxMDMuNTUxJTIwMS41MzUyOCUyMDEwMy41NTElMjAxLjY2ODU0JTIwMTAzLjU1MSUyMDEuODAxNzlDMTAzLjU1MSUyMDIuMDY4MyUyMDEwMy40MTglMjAyLjI2ODE5JTIwMTAzLjIxOCUyMDIuMzM0ODJMMTAzLjQ4NCUyMDIuNjY3''@;'; put 'put ''OTZDMTAzLjUyOSUyMDIuNzEyMzclMjAxMDMuNTUxJTIwMi43NTY3OSUyMDEwMy41NTElMjAyLjgwMTIxQzEwMy41NTElMjAyLjkzNDQ2JTIwMTAzLjQ4NCUyMDMuMDAxMDklMjAxMDMuMzUxJTIwMy4wMDEwOUMxMDMuMjg0JTIwMy4wMDEwOSUyMDEwMy4yMTglMjAyLjkzNDQ3JTIwMTAzLjE1''@;'; put 'put ''MSUyMDIuODY3ODRMMTAyLjc1MSUyMDIuNDAxNDRIMTAyLjQxOFYyLjgwMTIxQzEwMi40MTglMjAyLjkzNDQ2JTIwMTAyLjM1MiUyMDMuMDAxMDklMjAxMDIuMjE4JTIwMy4wMDEwOUMxMDIuMDg1JTIwMy4wMDEwOSUyMDEwMi4wMTklMjAyLjkzNDQ2JTIwMTAyLjAxOSUyMDIuODAxMjFWMS40''@;'; put 'put ''MDg2OUgxMDIuMDg1VjEuNDAyMDNaTTEwMi44NzglMjAyLjEyODI3QzEwMy4wNzglMjAyLjEyODI3JTIwMTAzLjIxMSUyMDEuOTk1MDIlMjAxMDMuMjExJTIwMS44NjE3NkMxMDMuMjExJTIwMS42NjE4OCUyMDEwMy4wNzglMjAxLjU5NTI1JTIwMTAyLjg3OCUyMDEuNTk1MjVIMTAyLjQ3OFYy''@;'; put 'put ''LjEyODI3SDEwMi44NzhaJTIyJTIwZmlsbCUzRCUyMiUyMzcxNzE3NSUyMiUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSk7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWxvZ2luLWxvZ28tY29sb3Ip''@;'; put 'put ''fS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZm9vdGVye2dhcDp2YXIoLS1jbHItbG9naW4tZm9vdGVyLWdhcCl9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1mb290ZXIgYSwubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWZvb3RlciAuY29weXJpZ2h0e2ZvbnQtc2l6ZTp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7''@;'; put 'put ''bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7Y29sb3I6dmFyKC0tY2xyLWxvZ2luLWNvcHlyaWdodC1jb2xvcil9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ib2R5e2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtm''@;'; put 'put ''bGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2lkdGg6Y2FsYygzMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAudGl0bGV7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNwbGF5LWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItbG9naW4tdGl0bGUtY29sb3IpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAudGl0bGUgLndlbGNvbWV7Y29sb3I6dmFyKC0tY2xyLWxvZ2luLXdlbGNvbWUtY29sb3IpO21hcmdp''@;'; put 'put ''bjowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAudGl0bGUgLnN1YnRpdGxlLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAudGl0bGUgLmhpbnR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplKTtm''@;'; put 'put ''b250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0''@;'; put 'put ''aW9uLWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItbG9naW4taGludC1jb2xvcik7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMCAwIDB9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50cmFkZW1hcmt7Y29sb3I6dmFyKC0tY2xyLWxvZ2luLXRyYWRlbWFyay1jb2xvcik7''@;'; put 'put ''Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LXdlaWdodCk7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LWZhbWlseSk7Zm9udC1zaXplOnZhcigtLWNsci1sb2dpbi10cmFkZW1hcmstZm9udC1zaXplKTtsZXR0ZXItc3BhY2luZzp2''@;'; put 'put ''YXIoLS1jbHItbG9naW4tdHJhZGVtYXJrLWxldHRlci1zcGFjaW5nKX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3Vwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cGFkZGluZy10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyk7d2lkdGg6MTAwJX0ubG9n''@;'; put 'put ''aW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5hdXRoLXNvdXJjZSwubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC51c2VybmFtZSwubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5wYXNzd29yZCwubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdy''@;'; put 'put ''b3VwIC5jaGVja2JveCwubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5jbHItZm9ybS1jb250cm9se21hcmdpbjowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSAwfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jaGVja2JveC13cmFwcGVye21h''@;'; put 'put ''cmdpbjowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMykgMH0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5jbHItY29udHJvbC1jb250YWluZXJ7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250''@;'; put 'put ''cm9sLWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVyLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLXNlbGVjdHt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNv''@;'; put 'put ''bnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXI+LmNsci1pbnB1dHt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXJ7d2lkdGg6MTAwJX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2lu''@;'; put 'put ''LWdyb3VwIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyPi5jbHItaW5wdXQtZ3JvdXB7bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFw''@;'; put 'put ''cGVyPi5jbHItaW5wdXQtZ3JvdXA+LmNsci1pbnB1dHt3aWR0aDpjYWxjKDEwMCUgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpKX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC50b29sdGlwLXZhbGlkYXRpb257bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTQpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnRvb2x0aXAtdmFsaWRhdGlvbiAudXNlcm5hbWUsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAudG9vbHRpcC12YWxpZGF0aW9uIC5wYXNzd29yZHt3aWR0aDoxMDAlO21hcmdpbi10b3A6MH0ubG9naW4t''@;'; put 'put ''d3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5lcnJvcntmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdo''@;'; put 'put ''dDpjYWxjKDIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO2Rpc3BsYXk6bm9uZTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7YmFja2dyb3Vu''@;'; put 'put ''ZDp2YXIoLS1jbHItbG9naW4tZXJyb3ItYmFja2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hbGVydC1kYW5nZXItYm9yZGVyLWNvbG9yKX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5lcnJvcjpiZWZvcmV7Y29udGVudDoiIjstd2Via2l0LW1hc2s6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hh''@;'; put 'put ''cnNldD11dGY4LCUzQ3N2ZyUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB2aWV3Qm94JTNEJTIyNSUyMDUlMjAyNiUyMDI2JTIyJTIwcHJlc2VydmVBc3BlY3RSYXRpbyUzRCUyMnhNaWRZTWlkJTIwbWVldCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJG''@;'; put 'put ''c3ZnJTIyJTIweG1sbnMlM0F4bGluayUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTNFJTNDZGVmcyUzRSUzQ3N0eWxlJTNFLmNsci1pLW91dGxpbmUlN0JmaWxsJTNBJ25vbmUnJTNCJTdEJTNDJTJGc3R5bGUlM0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VleGNsYW1hdGlvbi1jaXJjbGUtbGluZSUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xy''@;'; put 'put ''LWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0xJTIyJTIwZCUzRCUyMk0xOCUyQzZBMTIlMkMxMiUyQzAlMkMxJTJDMCUyQzMwJTJDMTglMkMxMiUyQzEyJTJDMCUyQzAlMkMwJTJDMTglMkM2Wm0wJTJDMjJBMTAlMkMxMCUyQzAlMkMxJTJDMSUyQzI4JTJDMTglMkMxMCUyQzEwJTJD''@;'; put 'put ''MCUyQzAlMkMxJTJDMTglMkMyOFolMjIlM0UlM0MlMkZwYXRoJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0yJTIyJTIwZCUzRCUyMk0xOCUyQzIwLjA3YTEuMyUyQzEuMyUyQzAlMkMwJTJDMS0xLjMtMS4zdi02YTEuMyUyQzEuMyUy''@;'; put 'put ''QzAlMkMxJTJDMSUyQzIuNiUyQzB2NkExLjMlMkMxLjMlMkMwJTJDMCUyQzElMkMxOCUyQzIwLjA3WiUyMiUzRSUzQyUyRnBhdGglM0UlM0NjaXJjbGUlMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMyUyMiUyMGN4JTNEJTIyMTcuOTUlMjIlMjBjeSUz''@;'; put 'put ''RCUyMjIzLjAyJTIyJTIwciUzRCUyMjEuNSUyMiUzRSUzQyUyRmNpcmNsZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRnN2ZyUzRSIpO21hc2s6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHZlcnNpb24lM0QlMjIx''@;'; put 'put ''LjElMjIlMjB2aWV3Qm94JTNEJTIyNSUyMDUlMjAyNiUyMDI2JTIyJTIwcHJlc2VydmVBc3BlY3RSYXRpbyUzRCUyMnhNaWRZTWlkJTIwbWVldCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIweG1sbnMlM0F4bGluayUzRCUyMmh0dHAl''@;'; put 'put ''M0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTNFJTNDZGVmcyUzRSUzQ3N0eWxlJTNFLmNsci1pLW91dGxpbmUlN0JmaWxsJTNBJ25vbmUnJTNCJTdEJTNDJTJGc3R5bGUlM0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTNDdGl0bGUlM0VleGNsYW1hdGlvbi1jaXJjbGUtbGluZSUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''JTIyJTIwZCUzRCUyMk0xOCUyQzZBMTIlMkMxMiUyQzAlMkMxJTJDMCUyQzMwJTJDMTglMkMxMiUyQzEyJTJDMCUyQzAlMkMwJTJDMTglMkM2Wm0wJTJDMjJBMTAlMkMxMCUyQzAlMkMxJTJDMSUyQzI4JTJDMTglMkMxMCUyQzEwJTJDMCUyQzAlMkMxJTJDMTglMkMyOFolMjIlM0UlM0MlMkZw''@;'; put 'put ''YXRoJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0yJTIyJTIwZCUzRCUyMk0xOCUyQzIwLjA3YTEuMyUyQzEuMyUyQzAlMkMwJTJDMS0xLjMtMS4zdi02YTEuMyUyQzEuMyUyQzAlMkMxJTJDMSUyQzIuNiUyQzB2NkExLjMlMkMxLjMl''@;'; put 'put ''MkMwJTJDMCUyQzElMkMxOCUyQzIwLjA3WiUyMiUzRSUzQyUyRnBhdGglM0UlM0NjaXJjbGUlMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMyUyMiUyMGN4JTNEJTIyMTcuOTUlMjIlMjBjeSUzRCUyMjIzLjAyJTIyJTIwciUzRCUyMjEuNSUyMiUzRSUz''@;'; put 'put ''QyUyRmNpcmNsZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRnN2ZyUzRSIpOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb3ZlcjttYXNrLXNpemU6Y292ZXI7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItbG9naW4tZXJyb3ItaWNvbi1jb2xvcik7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSAwIDA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS03KX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5lcnJvci5hY3RpdmV7ZGlzcGxheTpmbGV4fS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmVycm9yLmFjdGl2ZTpiZWZvcmV7ZmxleDowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0ubG9n''@;'; put 'put ''aW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5idG57bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMDttYXgtd2lkdGg6bm9uZX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5zaWdudXB7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktYm9keS1mb250LXdlaWdodCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVy''@;'; put 'put ''LXNwYWNpbmcpO3RleHQtYWxpZ246Y2VudGVyfS5sb2dpbi13cmFwcGVyIC5sb2dpbjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItYmxhY2spO29wYWNpdHk6LjE7dG9wOjA7cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpKX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2OHB4KXsubG9naW4td3JhcHBlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6dmFy''@;'; put 'put ''KC0tY2xyLWxvZ2luLWJhY2tncm91bmQtY29sb3IpfS5sb2dpbi13cmFwcGVyIC5sb2dpbnt3aWR0aDoxMDAlO21hcmdpbi1sZWZ0OjA7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDIwJX0ubG9naW4td3JhcHBlciAubG9naW46YWZ0ZXJ7Y29udGVudDpub25lfX1AbWVkaWEg''@;'; put 'put ''c2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsubG9naW4td3JhcHBlciAubG9naW57cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDE1JX19Lm1haW4tY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMHZoO2JhY2tncm91bmQ6''@;'; put 'put ''dmFyKC0tY2xyLWdsb2JhbC1hcHAtYmFja2dyb3VuZCl9Lm1haW4tY29udGFpbmVyIC5hbGVydC5hbGVydC1hcHAtbGV2ZWx7ZmxleDowIDAgYXV0bztvdmVyZmxvdy14OmhpZGRlbn0ubWFpbi1jb250YWluZXIgaGVhZGVyLC5tYWluLWNvbnRhaW5lciAuaGVhZGVye2ZsZXg6MCAwIHZhcigt''@;'; put 'put ''LWNsci1oZWFkZXItaGVpZ2h0KX0ubWFpbi1jb250YWluZXIgLnN1Yi1uYXYsLm1haW4tY29udGFpbmVyIC5zdWJuYXZ7ZmxleDowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSl9Lm1haW4tY29udGFpbmVyIC51LW1haW4tY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlv''@;'; put 'put ''bjpjb2x1bW47ZmxleDoxIDEgYXV0bztvdmVyZmxvdzpoaWRkZW59Lm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bzttaW4taGVpZ2h0Oi4wNXJlbX0ubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFy''@;'; put 'put ''ZWF7ZmxleDoxIDEgYXV0bztvdmVyZmxvdy15OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cGFkZGluZzoxLjJyZW19Lm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lciAuY29udGVudC1hcmVhPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1haW4tY29u''@;'; put 'put ''dGFpbmVyIC5jb250ZW50LWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdntmbGV4OjAgMCBhdXRvO29yZGVyOi0xfUBtZWRpYSBwcmludHsubWFpbi1jb250YWluZXJ7aGVpZ2h0OmF1dG99fWJvZHkubm8tc2Nyb2xsaW5nLGJvZHlbY2RzLWxheW91dD1uby1zY3JvbGxpbmddLGJvZHkubm8t''@;'; put 'put ''c2Nyb2xsaW5nIC5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXIgLmNvbnRlbnQtYXJlYSxib2R5W2Nkcy1sYXlvdXQ9bm8tc2Nyb2xsaW5nXSAubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWF7b3ZlcmZsb3c6aGlkZGVufTpyb290IFtjZHMt''@;'; put 'put ''dGhlbWVdey0tY2xyLW1vZGFsLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItbW9kYWwtY2xvc2UtY29sb3I6dmFyKC0tY2xyLWNsb3NlLWNvbG9yKTstLWNsci1tb2RhbC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1tb2RhbC1jb250ZW50LWJveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMzAwKTstLWNsci1tb2RhbC1iYWNrZHJvcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW92ZXJsYXktYmFja2Ryb3AtYmFja2dyb3Vu''@;'; put 'put ''ZCk7LS1jbHItbW9kYWwtc20td2lkdGg6Y2FsYygyODggKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNsci1tb2RhbC1tZC13aWR0aDpjYWxjKDU3NiAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLW1vZGFsLWxnLXdpZHRoOmNhbGMoODY0ICog''@;'; put 'put ''KDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItbW9kYWwteGwtd2lkdGg6Y2FsYygxMTUyICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItbW9kYWwtdGl0bGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNs''@;'; put 'put ''ci1tb2RhbC10aXRsZS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpOy0tY2xyLW1vZGFsLXRpdGxlLWZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTstLWNsci1tb2RhbC10aXRsZS1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1tb2RhbC10aXRsZS1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTstLWNsci1tb2RhbC10aXRsZS1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWN0aW9uLWxldHRlci1zcGFjaW5nKX0uY2xyLXNpZGUtcGFuZWwtcGlubmVkLXNte3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLW1vZGFsLXNtLXdpZHRoKSFpbXBvcnRhbnR9LmNsci1zaWRlLXBhbmVsLXBpbm5lZC1tZHtwYWRkaW5nLXJpZ2h0OnZhcigtLWNsci1tb2RhbC1tZC13aWR0''@;'; put 'put ''aCkhaW1wb3J0YW50fS5jbHItc2lkZS1wYW5lbC1waW5uZWQtbGd7cGFkZGluZy1yaWdodDp2YXIoLS1jbHItbW9kYWwtbGctd2lkdGgpIWltcG9ydGFudH0uY2xyLXNpZGUtcGFuZWwtcGlubmVkLXhse3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLW1vZGFsLXhsLXdpZHRoKSFpbXBvcnRhbnR9''@;'; put 'put ''LmNsci1tb2RhbC1ob3N0e292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0uY2xyLW1vZGFsLWhvc3QgLm1vZGFsLC5jbHItbW9kYWwtaG9zdCAubW9kYWwtYmFja2Ryb3B7cG9zaXRpb246YWJzb2x1dGV9Lm1vZGFse3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoxMDUw''@;'; put 'put ''O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkqMik7bWF4LXdpZHRoOjEwMCV9Lm1vZGFsIC5hbGVydCsubW9kYWwtaGVhZGVyLC5t''@;'; put 'put ''b2RhbCAuYWxlcnQrLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7Lm1vZGFse3BhZGRpbmc6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpLzIpfX0ubW9k''@;'; put 'put ''YWwgLm1vZGFsLWJvZHl7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5zaWRlLXBhbmVsIC5tb2RhbHtsZWZ0OmluaXRpYWw7cGFkZGluZzowO2hlaWdodDoxMDAlfS5zaWRlLXBhbmVsIC5tb2RhbCAubW9kYWwtY29udGVudC13cmFwcGVye2hlaWdodDoxMDAlfS5zaWRlLXBh''@;'; put 'put ''bmVsIC5tb2RhbCAubW9kYWwtY29udGVudC13cmFwcGVyIC5tb2RhbC1jb250ZW50e2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LnNpZGUtcGFuZWwgLm1vZGFsIC5tb2RhbC1kaWFsb2d7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2hlaWdodDoxMDAl''@;'; put 'put ''fS5zaWRlLXBhbmVsIC5tb2RhbC5tb2RhbC1mdWxsLXNjcmVlbntpbnNldDowO3BhZGRpbmc6MH0uc2lkZS1wYW5lbCAubW9kYWwgLm1vZGFsLWJvZHktd3JhcHBlcntmbGV4OjEgMTttYXgtaGVpZ2h0OjEwMCV9Lm1vZGFsLWRpYWxvZ3twb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjEwNTA7''@;'; put 'put ''d2lkdGg6dmFyKC0tY2xyLW1vZGFsLW1kLXdpZHRoKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1tb2RhbC1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLWNsci1tb2RhbC1jb250ZW50LWJveC1zaGFkb3cpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0''@;'; put 'put ''aC0xMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbW9kYWwtYmctY29sb3IpO21heC13aWR0aDoxMDAlfS5tb2RhbC1kaWFsb2cubW9kYWwtc217d2lkdGg6dmFyKC0tY2xyLW1vZGFsLXNt''@;'; put 'put ''LXdpZHRoKX0ubW9kYWwtZGlhbG9nLm1vZGFsLWxne3dpZHRoOnZhcigtLWNsci1tb2RhbC1sZy13aWR0aCl9Lm1vZGFsLWRpYWxvZy5tb2RhbC14bHt3aWR0aDp2YXIoLS1jbHItbW9kYWwteGwtd2lkdGgpfS5tb2RhbC1oZWFkZXIsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXtib3JkZXIt''@;'; put 'put ''Ym90dG9tOm5vbmU7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgMH0ubW9kYWwtaGVhZGVyKy5tb2RhbC1mb290ZXIsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSsubW9kYWwtZm9vdGVye3BhZGRpbmctdG9wOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtOSl9Lm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH0ubW9kYWwtaGVhZGVyIC5tb2RhbC10aXRsZSwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5tb2Rh''@;'; put 'put ''bC10aXRsZSwubW9kYWwtaGVhZGVyIC5zaWRlLXBhbmVsLXRpdGxlLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnNpZGUtcGFuZWwtdGl0bGV7Y29sb3I6dmFyKC0tY2xyLW1vZGFsLXRpdGxlLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1m''@;'; put 'put ''b250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbjowfS5tb2RhbC1oZWFkZXIgLm1vZGFsLXRpdGxlOm5vdChbY2RzLXRleHRdKSwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5tb2RhbC10aXRsZTpub3QoW2Nkcy10ZXh0XSksLm1vZGFsLWhlYWRlciAuc2lkZS1wYW5lbC10''@;'; put 'put ''aXRsZTpub3QoW2Nkcy10ZXh0XSksLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuc2lkZS1wYW5lbC10aXRsZTpub3QoW2Nkcy10ZXh0XSl7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLW1vZGFsLXRpdGxlLWZvbnQtZmFtaWx5KTtmb250LXNpemU6dmFyKC0tY2xyLW1vZGFsLXRpdGxlLWZvbnQt''@;'; put 'put ''c2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLW1vZGFsLXRpdGxlLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1tb2RhbC10aXRsZS1sZXR0ZXItc3BhY2luZyl9Lm1vZGFsLWhlYWRl''@;'; put 'put ''ciAuY2xvc2UsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2UsLm1vZGFsLWhlYWRlciAucGlubmFibGUsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAucGlubmFibGV7Zm9udC1zaXplOmluaXRpYWw7bGluZS1oZWlnaHQ6aW5pdGlhbH0ubW9kYWwtaGVhZGVyIC5jbG9zZSBjZHMt''@;'; put 'put ''aWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5jbG9zZSBjbHItaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZSBjbHItaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJsZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVy''@;'; put 'put ''LS1hY2Nlc3NpYmxlIC5waW5uYWJsZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJsZSBjbHItaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1tb2RhbC1jbG9zZS1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0ubW9kYWwtaGVhZGVyIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5jbG9zZTpob3ZlciBjbHItaWNvbiwu''@;'; put 'put ''bW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZTpob3ZlciBjbHItaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJsZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJsZTpob3Zl''@;'; put 'put ''ciBjbHItaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZTpob3ZlciBjbHItaWNvbntmaWxsOnZhcigtLWNsci1jbG9zZS1jb2xvci1ob3Zlcil9Lm1vZGFsLWhlYWRlciAuY2xvc2U6aG92ZXI6YWN0aXZlIGNkcy1pY29uLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUg''@;'; put 'put ''LmNsb3NlOmhvdmVyOmFjdGl2ZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5jbG9zZTpob3ZlcjphY3RpdmUgY2xyLWljb24sLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2U6aG92ZXI6YWN0aXZlIGNsci1pY29uLC5tb2RhbC1oZWFkZXIgLnBpbm5hYmxlOmhvdmVyOmFjdGl2ZSBj''@;'; put 'put ''ZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZTpob3ZlcjphY3RpdmUgY2RzLWljb24sLm1vZGFsLWhlYWRlciAucGlubmFibGU6aG92ZXI6YWN0aXZlIGNsci1pY29uLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnBpbm5hYmxlOmhvdmVyOmFjdGl2ZSBjbHIt''@;'; put 'put ''aWNvbntmaWxsOnZhcigtLWNsci1jbG9zZS1jb2xvci1hY3RpdmUpfS5tb2RhbC1oZWFkZXIgLnBpbm5hYmxlLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnBpbm5hYmxle3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDttYXJnaW4tcmlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS02KTthcHBlYXJhbmNlOm5vbmU7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Lm1vZGFsLXRpdGxlLXdyYXBwZXJ7ZmxleDoxfS5tb2RhbC10aXRsZS13cmFwcGVyIC5tb2RhbC10aXRsZSBoMywubW9kYWwtdGl0bGUtd3JhcHBlciAuc2lkZS1wYW5lbC10aXRs''@;'; put 'put ''ZSBoM3ttYXJnaW4tdG9wOjB9Lm1vZGFsLWJvZHktd3JhcHBlcnttYXgtaGVpZ2h0Ojcwdmg7b3ZlcmZsb3cteTphdXRvO292ZXJmbG93LXg6aGlkZGVufS5tb2RhbC1ib2R5LXdyYXBwZXIgLm1vZGFsLWJvZHksLm1vZGFsLWJvZHktd3JhcHBlciAuc2lkZS1wYW5lbC1ib2R5e2NvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX0ubW9kYWwtYm9keS13cmFwcGVyPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1vZGFsLWJvZHktd3JhcHBl''@;'; put 'put ''cj46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vZGFsLWZvb3RlcntwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5tb2RhbC1mb290ZXIsLnNpZGUtcGFuZWwtZm9vdGVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6ZmxleC1lbmQ7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9Lm1vZGFsLWZvb3RlciAuYnRuLC5zaWRlLXBhbmVsLWZvb3RlciAuYnRue21hcmdpbjowfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHgpYW5kIChvcmllbnRhdGlvbjpsYW5kc2NhcGUpey5tb2RhbC1i''@;'; put 'put ''b2R5LXdyYXBwZXJ7bWF4LWhlaWdodDo1NXZofX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsubW9kYWwtYm9keS13cmFwcGVye21heC1oZWlnaHQ6NTV2aH19Lm1vZGFsLWJhY2tkcm9we3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItbW9kYWwtYmFja2Ryb3AtY29sb3IpO3otaW5kZXg6MTA0MH0ubW9kYWwgLm1vZGFsLW5hdntkaXNwbGF5Om5vbmV9Lm1vZGFsLm1vZGFsLWZ1bGwtc2NyZWVue3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtoZWlnaHQ6MTAwJX0ubW9kYWwubW9kYWwtZnVsbC1zY3JlZW4g''@;'; put 'put ''Lm1vZGFsLWRpYWxvZ3tkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0ubW9kYWwubW9kYWwtZnVsbC1zY3JlZW4gLm1vZGFsLWRpYWxvZyAubW9kYWwtY29udGVudC13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MX0ubW9kYWwubW9kYWwtZnVsbC1zY3JlZW4gLm1v''@;'; put 'put ''ZGFsLWRpYWxvZyAubW9kYWwtY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxfS5tb2RhbC5tb2RhbC1mdWxsLXNjcmVlbiAubW9kYWwtZGlhbG9nIC5tb2RhbC1ib2R5LXdyYXBwZXIsLm1vZGFsLm1vZGFsLWZ1bGwtc2NyZWVuIC5tb2RhbC1k''@;'; put 'put ''aWFsb2cgLm1vZGFsLWJvZHl7ZmxleC1ncm93OjE7bWF4LWhlaWdodDoxMDAlfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWhlYWRlci1oZWlnaHQ6Y2FsYyg2MCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLWhlYWRlci1kaXZpZGVyLWNvbG9yOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jbHItaGVhZGVyLWJnLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTEwMDApOy0tY2xyLWhlYWRlci0yLWJnLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jbHItaGVh''@;'; put 'put ''ZGVyLTMtYmctY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1henVyZS05MDApOy0tY2xyLWhlYWRlci00LWJnLWNvbG9yOnZhcigtLWNsci1oZWFkZXItMy1iZy1jb2xvcik7LS1jbHItaGVhZGVyLTUtYmctY29sb3I6dmFyKC0tY2xyLWhlYWRlci0zLWJnLWNvbG9yKTstLWNsci1oZWFk''@;'; put 'put ''ZXItNi1iZy1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLWJnLWNvbG9yKTstLWNsci1oZWFkZXItNy1iZy1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLTItYmctY29sb3IpOy0tY2xyLWhlYWRlci1mb250LWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jbHIt''@;'; put 'put ''aGVhZGVyLWZvbnQtY29sb3ItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2xyLWhlYWRlci10aXRsZS1mb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdlaWdodCk7LS1jbHItaGVhZGVyLXRpdGxl''@;'; put 'put ''LWZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTstLWNsci1oZWFkZXItc2VhcmNoLWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLWhlYWRlci1zZWFyY2gtbWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTstLWNsci1oZWFkZXItc2VhcmNoLW1h''@;'; put 'put ''cmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWhlYWRlci1zZWFyY2gtZ2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7LS1jbHItaGVhZGVyLXNlYXJjaC1pbnB1dC1mb250LWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2xyLWhlYWRl''@;'; put 'put ''ci1zZWFyY2gtcGxhY2Vob2xkZXItZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXJlZ3VsYXIpOy0tY2xyLWhlYWRlci1zZWFyY2gtcGxhY2Vob2xkZXItdGV4dC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDAp''@;'; put 'put ''Oy0tY2xyLWhlYWRlci1zZWFyY2gtYm9yZGVyLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIEhpZ2hsaWdodDstLWNsci1oZWFkZXItc2VhcmNoLWJvcmRlci1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDAp''@;'; put 'put ''IHNvbGlkIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTQwMCl9aGVhZGVyLC5oZWFkZXJ7ZGlzcGxheTpmbGV4O2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLWJnLWNvbG9yKTtoZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2xyLWhlYWRlci1oZWlnaHQpO3doaXRlLXNwYWNlOm5vd3JhcH1oZWFkZXIuaGVhZGVyLTEsLmhlYWRlci5oZWFkZXItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItYmctY29sb3IpfWhlYWRlci5oZWFkZXItMiwuaGVhZGVyLmhlYWRlci0ye2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWhlYWRlci0yLWJnLWNvbG9yKX1oZWFkZXIuaGVhZGVyLTMsLmhlYWRlci5oZWFkZXItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItMy1iZy1jb2xvcil9aGVhZGVyLmhlYWRlci00LC5oZWFkZXIuaGVhZGVyLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItaGVhZGVyLTQtYmctY29sb3IpfWhlYWRlci5oZWFkZXItNSwuaGVhZGVyLmhlYWRlci01e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci01LWJnLWNvbG9yKX1oZWFkZXIuaGVhZGVyLTYsLmhlYWRlci5oZWFkZXItNntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1o''@;'; put 'put ''ZWFkZXItNi1iZy1jb2xvcil9aGVhZGVyLmhlYWRlci03LC5oZWFkZXIuaGVhZGVyLTd7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLTctYmctY29sb3IpfWhlYWRlci5oZWFkZXItOCwuaGVhZGVyLmhlYWRlci04e2JhY2tncm91bmQtY29sb3I6IzBmMTcxY31oZWFkZXIgLmJy''@;'; put 'put ''YW5kaW5nLC5oZWFkZXIgLmJyYW5kaW5ne2Rpc3BsYXk6ZmxleDtmbGV4OjAgMCBhdXRvO21pbi13aWR0aDpjYWxjKDIwNCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9aGVhZGVyIC5icmFuZGluZz5hLGhlYWRlciAu''@;'; put 'put ''YnJhbmRpbmc+Lm5hdi1saW5rLC5oZWFkZXIgLmJyYW5kaW5nPmEsLmhlYWRlciAuYnJhbmRpbmc+Lm5hdi1saW5re2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3BhZGRpbmc6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX1oZWFkZXIgLmJyYW5kaW5nPmE6Zm9jdXMsaGVhZGVyIC5icmFuZGluZz4ubmF2LWxpbms6Zm9jdXMsLmhlYWRlciAuYnJhbmRpbmc+YTpmb2N1cywuaGVhZGVyIC5icmFuZGluZz4ubmF2LWxpbms6Zm9jdXN7b3V0bGluZS1vZmZzZXQ6Y2FsYygt''@;'; put 'put ''MSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpKX1oZWFkZXIgLmJyYW5kaW5nIC5jbHItaWNvbixoZWFkZXIgLmJyYW5kaW5nIGNkcy1pY29uLGhlYWRlciAuYnJhbmRpbmcgY2xyLWljb24sLmhlYWRlciAuYnJhbmRpbmcgLmNsci1pY29uLC5oZWFkZXIgLmJyYW5kaW5nIGNkcy1pY29uLC5o''@;'; put 'put ''ZWFkZXIgLmJyYW5kaW5nIGNsci1pY29ue2ZsZXgtZ3JvdzowO2ZsZXgtc2hyaW5rOjA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpfWhlYWRlciAuYnJhbmRpbmcgLnRpdGxlLC5oZWFkZXIgLmJyYW5kaW5nIC50aXRs''@;'; put 'put ''ZXtjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3IpO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1oZWFkZXItdGl0bGUtZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xy''@;'; put 'put ''LWhlYWRlci10aXRsZS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZyk7dGV4dC1k''@;'; put 'put ''ZWNvcmF0aW9uOm5vbmV9aGVhZGVyIC5zZXR0aW5ncyAubmF2LXRleHQsaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtdGV4dCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtdGV4dCwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LXRleHQsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LXRleHQsLmhl''@;'; put 'put ''YWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi10ZXh0e2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX1oZWFkZXIgLnNldHRpbmdzIGNsci1pY29uLGhlYWRlciAuaGVhZGVyLW5hdiBjbHItaWNvbixoZWFkZXIgLmhlYWRlci1hY3Rpb25zIGNsci1pY29uLC5o''@;'; put 'put ''ZWFkZXIgLnNldHRpbmdzIGNsci1pY29uLC5oZWFkZXIgLmhlYWRlci1uYXYgY2xyLWljb24sLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayxoZWFkZXIgLmhlYWRlci1u''@;'; put 'put ''YXYgLm5hdi1saW5rLGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluaywuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluaywuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmt7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1p''@;'; put 'put ''dGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKX1o''@;'; put 'put ''ZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluazpob3ZlcixoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmhvdmVyLGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rOmhvdmVyLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluazpob3ZlciwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYt''@;'; put 'put ''bGluazpob3ZlciwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbms6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yLWhvdmVyKX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluazpkaXNhYmxlZCxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmRpc2FibGVk''@;'; put 'put ''LGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rOmRpc2FibGVkLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluazpkaXNhYmxlZCwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpkaXNhYmxlZCwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbms6ZGlzYWJsZWR7Y3Vy''@;'; put 'put ''c29yOm5vdC1hbGxvd2VkfWhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rIGNkcy1pY29uLGhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rIGNsci1pY29uLGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsgY2RzLWljb24saGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayBjbHItaWNvbixo''@;'; put 'put ''ZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayBjZHMtaWNvbixoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayBjbHItaWNvbiwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsgY2RzLWljb24sLmhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rIGNsci1pY29uLC5oZWFkZXIg''@;'; put 'put ''LmhlYWRlci1uYXYgLm5hdi1saW5rIGNkcy1pY29uLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rIGNsci1pY29uLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayBjZHMtaWNvbiwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgY2xyLWljb257aGVpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0LGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsubmF2LWljb24tdGV4dCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5u''@;'; put 'put ''YXYtbGluay5uYXYtaWNvbi10ZXh0LC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0LC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLm5hdi1pY29uLXRleHR7Z2FwOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtNCl9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjZHMtaWNvbixoZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNsci1pY29uLGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsubmF2LWljb24tdGV4dCBj''@;'; put 'put ''ZHMtaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2xyLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjZHMtaWNvbixoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNs''@;'; put 'put ''ci1pY29uLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNkcy1pY29uLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNsci1pY29uLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24sLmhl''@;'; put 'put ''YWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjZHMtaWNvbiwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbnt0''@;'; put 'put ''cmFuc2Zvcm06bm9uZX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5o''@;'; put 'put ''ZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRleHQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRleHR7ZGlzcGxheTpub25lfWhl''@;'; put 'put ''YWRlciAuc2V0dGluZ3MgLm5hdi1saW5rLmFjdGl2ZSAubmF2LXRleHQsaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluay5hY3RpdmUgLm5hdi10ZXh0LGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLmFjdGl2ZSAubmF2LXRleHQsLmhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5r''@;'; put 'put ''LmFjdGl2ZSAubmF2LXRleHQsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtdGV4dCwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsuYWN0aXZlIC5uYXYtdGV4dHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNp''@;'; put 'put ''emUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcp''@;'; put 'put ''fWhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rOmZvY3VzLGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6Zm9jdXMsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbms6Zm9jdXMsLmhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rOmZvY3VzLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5h''@;'; put 'put ''di1saW5rOmZvY3VzLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluazpmb2N1c3tvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkpfWhlYWRlciAuaGVhZGVyLW5hdiwuaGVhZGVyIC5oZWFkZXItbmF2e2Rpc3BsYXk6ZmxleDtmbGV4OjAgMCBh''@;'; put 'put ''dXRvO2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX1oZWFkZXIgLmhlYWRlci1uYXY6YmVmb3JlLC5oZWFkZXIgLmhlYWRlci1uYXY6YmVmb3Jle2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItaGVhZGVyLWRpdmlkZXItY29sb3IpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2xlZnQ6MH1oZWFkZXIgLmhlYWRlci1uYXYg''@;'; put 'put ''Lm5hdi1saW5rOmZpcnN0LW9mLXR5cGUsaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpsYXN0LW9mLXR5cGUsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6Zmlyc3Qtb2YtdHlwZSwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpsYXN0LW9mLXR5cGV7cG9zaXRpb246cmVs''@;'; put 'put ''YXRpdmV9aGVhZGVyIC5zZXR0aW5ncyxoZWFkZXIgLmhlYWRlci1hY3Rpb25zLC5oZWFkZXIgLnNldHRpbmdzLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25ze2ZsZXg6MSAwIGF1dG87ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1oZWFkZXIgLnNldHRpbmdzPjpub3QoLmRy''@;'; put 'put ''b3Bkb3duKTpiZWZvcmUsaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTpiZWZvcmUsaGVhZGVyIC5oZWFkZXItYWN0aW9ucz46bm90KC5kcm9wZG93bik6YmVmb3JlLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6YmVm''@;'; put 'put ''b3JlLC5oZWFkZXIgLnNldHRpbmdzPjpub3QoLmRyb3Bkb3duKTpiZWZvcmUsLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6YmVmb3JlLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPjpub3QoLmRyb3Bkb3duKTpiZWZvcmUsLmhlYWRlciAuaGVhZGVyLWFjdGlv''@;'; put 'put ''bnM+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6YmVmb3Jle2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLWRpdmlkZXItY29sb3IpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTExKTt3aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2xlZnQ6MH1oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3du''@;'; put 'put ''Pi5kcm9wZG93bi10b2dnbGUsLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGUsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGV7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7cG9zaXRpb246cmVsYXRpdmU7cGFk''@;'; put 'put ''ZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpKTthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKX1oZWFk''@;'; put 'put ''ZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmhvdmVyLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6aG92ZXIsLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6aG92ZXIsLmhlYWRlciAuaGVh''@;'; put 'put ''ZGVyLWFjdGlvbnM+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yLWhvdmVyKX1oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRy''@;'; put 'put ''b3Bkb3duPi5kcm9wZG93bi10b2dnbGU6ZGlzYWJsZWQsLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6ZGlzYWJsZWQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2Vk''@;'; put 'put ''fWhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2RzLWljb246bm90KFtzaGFwZV49YW5nbGVdKSxoZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNsci1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSks''@;'; put 'put ''aGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjZHMtaWNvbjpub3QoW3NoYXBlXj1hbmdsZV0pLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2xyLWljb246bm90KFtzaGFw''@;'; put 'put ''ZV49YW5nbGVdKSwuaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjZHMtaWNvbjpub3QoW3NoYXBlXj1hbmdsZV0pLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNsci1pY29uOm5vdChbc2hh''@;'; put 'put ''cGVePWFuZ2xlXSksLmhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2RzLWljb246bm90KFtzaGFwZV49YW5nbGVdKSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjbHIt''@;'; put 'put ''aWNvbjpub3QoW3NoYXBlXj1hbmdsZV0pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUsaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24g''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUsLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi1tZW51LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tbWVudXttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSk7bWFyZ2luLXJpZ2h0''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7bGVmdDphdXRvO3JpZ2h0OjB9aGVhZGVyIC5zZWFyY2gtYm94LGhlYWRlciAuc2VhcmNoLC5oZWFkZXIgLnNlYXJjaC1ib3gsLmhlYWRlciAuc2VhcmNoe2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleDowIDAgYXV0bzttYXgt''@;'; put 'put ''d2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3BhZGRpbmc6MDtwb3NpdGlvbjpyZWxhdGl2ZTtjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3IpfWhlYWRlciAuc2VhcmNoLWJveDpob3ZlcixoZWFkZXIgLnNlYXJjaDpob3ZlciwuaGVhZGVyIC5z''@;'; put 'put ''ZWFyY2gtYm94OmhvdmVyLC5oZWFkZXIgLnNlYXJjaDpob3Zlcntjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3ItaG92ZXIpfWhlYWRlciAuc2VhcmNoLWJveDpkaXNhYmxlZCxoZWFkZXIgLnNlYXJjaDpkaXNhYmxlZCwuaGVhZGVyIC5zZWFyY2gtYm94OmRpc2FibGVkLC5oZWFk''@;'; put 'put ''ZXIgLnNlYXJjaDpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9aGVhZGVyIC5zZWFyY2gtYm94OmJlZm9yZSxoZWFkZXIgLnNlYXJjaDpiZWZvcmUsLmhlYWRlciAuc2VhcmNoLWJveDpiZWZvcmUsLmhlYWRlciAuc2VhcmNoOmJlZm9yZXtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlv''@;'; put 'put ''bjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTt0b3A6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS02KTtsZWZ0OmF1dG99aGVhZGVyIC5zZWFyY2gtYm94Pi5uYXYtaWNvbixoZWFkZXIgLnNlYXJjaD4ubmF2LWljb24sLmhlYWRlciAuc2VhcmNoLWJveD4ubmF2LWljb24sLmhlYWRlciAuc2VhcmNoPi5uYXYtaWNvbnttYXJnaW46MCB2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTQpIGNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX1oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWwsaGVhZGVyIC5zZWFyY2ggbGFiZWwsLmhlYWRlciAuc2VhcmNoLWJveCBsYWJlbCwuaGVhZGVyIC5zZWFyY2ggbGFiZWx7''@;'; put 'put ''ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1sZWZ0OnZhcigtLWNsci1oZWFkZXItc2VhcmNoLWdhcCk7bWFyZ2luLWxlZnQ6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtbWFyZ2luLWxlZnQpO21hcmdpbi1yaWdodDp2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1tYXJnaW4tcmlnaHQpO3Rl''@;'; put 'put ''eHQtYWxpZ246Y2VudGVyfWhlYWRlciAuc2VhcmNoLWJveCBsYWJlbDpiZWZvcmUsaGVhZGVyIC5zZWFyY2ggbGFiZWw6YmVmb3JlLC5oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWw6YmVmb3JlLC5oZWFkZXIgLnNlYXJjaCBsYWJlbDpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVu''@;'; put 'put ''dDoiIjtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMzYlMjAzNiUyMiUzRSUzQ2RlZnMlM0Ul''@;'; put 'put ''M0NzdHlsZSUzRS5jbHMtMSU3QmZpbGwlM0ElMjNmZmZmZmYlM0IlN0QlM0MlMkZzdHlsZSUzRSUzQyUyRmRlZnMlM0UlM0N0aXRsZSUzRVNlYXJjaCUzQyUyRnRpdGxlJTNFJTNDZyUyMGlkJTNEJTIyaWNvbnMlMjIlM0UlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHMtMSUyMiUyMGQlM0QlMjJN''@;'; put 'put ''MTUlMkM0LjA1QTEwLjk1JTJDMTAuOTUlMkMwJTJDMSUyQzElMkM0LjA1JTJDMTUlMkMxMSUyQzExJTJDMCUyQzAlMkMxJTJDMTUlMkM0LjA1TTE1JTJDMkExMyUyQzEzJTJDMCUyQzElMkMwJTJDMjglMkMxNSUyQzEzJTJDMTMlMkMwJTJDMCUyQzAlMkMxNSUyQzJaJTIyJTJGJTNFJTNDcGF0''@;'; put 'put ''aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIlMjAlMjBkJTNEJTIyTTMzLjcxJTJDMzIuMjlsLTcuMzctNy40Mi0xLjQyJTJDMS40MSUyQzcuMzclMkM3LjQyYTElMkMxJTJDMCUyQzElMkMwJTJDMS40Mi0xLjQxWiUyMiUyRiUzRSUzQyUyRmclM0UlM0MlMkZzdmclM0UpO2JhY2tncm91bmQtcmVw''@;'; put 'put ''ZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtaWNvbi1zaXplKTt3aWR0aDp2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1pY29uLXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLWhlYWRlci1z''@;'; put 'put ''ZWFyY2gtaWNvbi1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtaWNvbi1zaXplKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luOjA7bWFyZ2luLXJpZ2h0OmNhbGMoLTEqKHZhcigtLWNsci1oZWFkZXItc2VhcmNoLWljb24tc2l6ZSkgKyB2YXIoLS1jbHItaGVh''@;'; put 'put ''ZGVyLXNlYXJjaC1nYXApKSl9aGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsIGlucHV0LGhlYWRlciAuc2VhcmNoIGxhYmVsIGlucHV0LC5oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWwgaW5wdXQsLmhlYWRlciAuc2VhcmNoIGxhYmVsIGlucHV0e2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtOSk7bWFyZ2luOmF1dG99aGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF0saGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XSwuaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF0sLmhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF17Ym9yZGVy''@;'; put 'put ''OjA7YmFja2dyb3VuZDowIDA7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtaW5wdXQtZm9udC1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7cGFkZGluZzow''@;'; put 'put ''IDAgMCBjYWxjKHZhcigtLWNsci1oZWFkZXItc2VhcmNoLWljb24tc2l6ZSkgKyAyKnZhcigtLWNsci1oZWFkZXItc2VhcmNoLWdhcCkpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpfWhlYWRlciAuc2VhcmNo''@;'; put 'put ''LWJveCBpbnB1dFt0eXBlPXRleHRdOi13ZWJraXQtYXV0b2ZpbGwsaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06LXdlYmtpdC1hdXRvZmlsbDpmb2N1cyxoZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOi13ZWJraXQtYXV0b2ZpbGwsaGVhZGVyIC5zZWFyY2ggaW5w''@;'; put 'put ''dXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxsOmZvY3VzLC5oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxsLC5oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxsOmZvY3VzLC5oZWFkZXIgLnNlYXJj''@;'; put 'put ''aCBpbnB1dFt0eXBlPXRleHRdOi13ZWJraXQtYXV0b2ZpbGwsLmhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06LXdlYmtpdC1hdXRvZmlsbDpmb2N1c3std2Via2l0LXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwcyA2MDAwMDBzLGNvbG9yIDBzIDYwMDAwMHM7dHJhbnNpdGlv''@;'; put 'put ''bjpiYWNrZ3JvdW5kLWNvbG9yIDBzIDYwMDAwMHMsY29sb3IgMHMgNjAwMDAwc31oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTo6cGxhY2Vob2xkZXIsaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTo6cGxhY2Vob2xkZXIsLmhlYWRlciAuc2VhcmNoLWJveCBpbnB1''@;'; put 'put ''dFt0eXBlPXRleHRdOjpwbGFjZWhvbGRlciwuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTo6cGxhY2Vob2xkZXJ7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtcGxhY2Vob2xkZXItdGV4dC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJv''@;'; put 'put ''ZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNw''@;'; put 'put ''YWNpbmcpfWhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdOmhvdmVyLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06aG92ZXIsLmhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdOmhvdmVyLC5oZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOmhv''@;'; put 'put ''dmVye2JvcmRlcjp2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1ib3JkZXItaG92ZXIpfWhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdOmZvY3VzLXZpc2libGUsaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cy12aXNpYmxlLC5oZWFkZXIgLnNlYXJjaC1ib3gg''@;'; put 'put ''aW5wdXRbdHlwZT10ZXh0XTpmb2N1cy12aXNpYmxlLC5oZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOmZvY3VzLXZpc2libGV7b3V0bGluZTowO2JvcmRlcjp2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1ib3JkZXItYWN0aXZlKX1oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10''@;'; put 'put ''ZXh0XTpmb2N1cyxoZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTphY3RpdmUsaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cyxoZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOmFjdGl2ZSwuaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4''@;'; put 'put ''dF06Zm9jdXMsLmhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdOmFjdGl2ZSwuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cywuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTphY3RpdmV7YmFja2dyb3VuZDowIDB9aGVhZGVyIC5icmFuZGluZysu''@;'; put 'put ''c2VhcmNoLGhlYWRlciAuYnJhbmRpbmcrLnNlYXJjaC1ib3gsLmhlYWRlciAuYnJhbmRpbmcrLnNlYXJjaCwuaGVhZGVyIC5icmFuZGluZysuc2VhcmNoLWJveHtwb3NpdGlvbjpyZWxhdGl2ZX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2OHB4KXtoZWFkZXIgLnNlYXJjaC1ib3gs''@;'; put 'put ''aGVhZGVyIC5zZWFyY2gsLmhlYWRlciAuc2VhcmNoLWJveCwuaGVhZGVyIC5zZWFyY2h7ZmxleDoxIDAgYXV0bzttYXgtd2lkdGg6bm9uZTtkaXNwbGF5Om5vbmV9aGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsLGhlYWRlciAuc2VhcmNoIGxhYmVsLC5oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWws''@;'; put 'put ''LmhlYWRlciAuc2VhcmNoIGxhYmVse3BhZGRpbmc6MH19YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayl7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWln''@;'; put 'put ''aHQtcmVndWxhcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0zKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOmNhbGMoLS4xKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX1hOm5vdCguYnRu''@;'; put 'put ''LC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTpsaW5re2NvbG9yOnZhcigtLWNsci1saW5rLWNvbG9yKX1hOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwu''@;'; put 'put ''YmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTpsaW5rOmhvdmVye2NvbG9yOnZhcigtLWNsci1saW5rLWhvdmVyLWNvbG9yKX1hOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTpsaW5rOmhvdmVy''@;'; put 'put ''IGNkcy1pY29uLGE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOmxpbms6aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWxpbmstaG92ZXItY29sb3IpfWE6bm90KC5idG4sLm5hdi1s''@;'; put 'put ''aW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOmxpbms6YWN0aXZle2NvbG9yOnZhcigtLWNsci1saW5rLWFjdGl2ZS1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1h''@;'; put 'put ''Y3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGluazphY3RpdmUgY2RzLWljb24sYTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGluazphY3RpdmUgY2xyLWljb257Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWxpbmstYWN0aXZlLWNvbG9yKX1hOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTp2aXNpdGVke2NvbG9yOnZhcigtLWNsci1saW5rLXZpc2l0ZWQtY29sb3IpfWE6bm90KC5i''@;'; put 'put ''dG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOnZpc2l0ZWQgY2RzLWljb24sYTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJl''@;'; put 'put ''ZW5vZGUtbGluayk6dmlzaXRlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItbGluay12aXNpdGVkLWNvbG9yKX1hOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTp2aXNpdGVkOmhvdmVye2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1saW5rLXZpc2l0ZWQtY29sb3ItaG92ZXIpfWE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOnZpc2l0ZWQ6aG92ZXIgY2RzLWljb24sYTpub3QoLmJ0biwubmF2LWxp''@;'; put 'put ''bmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6dmlzaXRlZDpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItbGluay12aXNpdGVkLWNvbG9yLWhvdmVyKX1hLmxpbmstbm9ybWFsOmxpbmt7Y29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWxpbmstY29sb3IpfWEubGluay1ob3ZlcmVkOmxpbmt7Y29sb3I6dmFyKC0tY2xyLWxpbmstaG92ZXItY29sb3IpfWEubGluay1jbGlja2VkOmxpbmt7Y29sb3I6dmFyKC0tY2xyLWxpbmstYWN0aXZlLWNvbG9yKX1hLmxpbmstdmlzaXRlZDpsaW5re2NvbG9yOnZhcigtLWNsci1saW5rLXZp''@;'; put 'put ''c2l0ZWQtY29sb3IpfWEubGluay12aXNpdGVkLWhvdmVyOmxpbmt7Y29sb3I6dmFyKC0tY2xyLWxpbmstdmlzaXRlZC1jb2xvci1ob3Zlcil9Lm5hdntkaXNwbGF5OmZsZXg7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO2xpc3Qtc3R5bGUtdHlwZTpub25lO2FsaWduLWl0ZW1z''@;'; put 'put ''OmNlbnRlcjttYXJnaW46MDt3aWR0aDoxMDAlO3doaXRlLXNwYWNlOm5vd3JhcDtib3gtc2hhZG93OjAgY2FsYygtMSp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApKSAwIHZhcigtLWNsci1uYXYtYm94LXNoYWRvdy1jb2xvcikgaW5zZXQ7Z2FwOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtOSl9Lm5hdiAubmF2LWl0ZW17ZGlzcGxheTppbmxpbmUtYmxvY2t9Lm5hdiAubmF2LWl0ZW0uYWN0aXZlPi5uYXYtbGlua3tjb2xvcjp2YXIoLS1jbHItbmF2LWxpbmstYWN0aXZlLWNvbG9yKTtib3gtc2hhZG93OjAgY2FsYygtMSp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWJvcmRlci13aWR0aC0xMDApKSAwIHZhcigtLWNsci1uYXYtYm94LXNoYWRvdy1jb2xvcikgaW5zZXR9Lm5hdiAubmF2LWxpbmt7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6dmFyKC0tY2xyLW5hdi1saW5rLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9k''@;'; put 'put ''eS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5uYXYgLm5hdi1saW5rLmJ0bnt0ZXh0LXRyYW5zZm9ybTpub25lO21hcmdpbjowIDAgY2FsYygtMSp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTtib3JkZXItcmFkaXVzOjB9Lm5hdiAubmF2LWxpbmsuZHJvcGRvd24tdG9nZ2xle3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0ubmF2IC5uYXYtbGluay5kcm9wZG93bi10b2dnbGUgY2RzLWljb257Y29sb3I6dmFyKC0tY2xyLW5h''@;'; put 'put ''di1saW5rLWNvbG9yKX0ubmF2IC5uYXYtbGluazpob3ZlciwubmF2IC5uYXYtbGluazpmb2N1cywubmF2IC5uYXYtbGluazphY3RpdmV7Y29sb3I6aW5oZXJpdH0ubmF2IC5uYXYtbGluazphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbmF2LWFjdGl2ZS1iZy1jb2xvcil9Lm5h''@;'; put 'put ''diAubmF2LWxpbms6aG92ZXI6YmVmb3JlLC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXI6MDtib3JkZXItYm90dG9tOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9y''@;'; put 'put ''ZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItYm90dG9tIC4ycyBlYXNlLWlufS5uYXYgLm5hdi1saW5rOmhvdmVyLC5uYXYgLm5hdi1saW5rOmZvY3VzLC5uYXYgLm5h''@;'; put 'put ''di1saW5rOmFjdGl2ZSwubmF2IC5uYXYtbGluay5hY3RpdmV7dGV4dC1kZWNvcmF0aW9uOm5vbmV9Lm5hdiAubmF2LWxpbmsuYWN0aXZle2NvbG9yOnZhcigtLWNsci1uYXYtbGluay1hY3RpdmUtY29sb3IpfS5uYXYgLm5hdi1saW5rLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1uYXYtc2VsZWN0ZWQtaG92ZXItYmFja2dyb3VuZC1jb2xvcil9Lm5hdiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1uYXYtc2VsZWN0ZWQtYWN0aXZlLWJhY2tncm91bmQtY29sb3IpfS5uYXYgLm5hdi1saW5rLm5hdi1pdGVte21h''@;'; put 'put ''cmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLXN1Ym5hdi1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKX0uc3ViLW5hdiwuc3VibmF2e2Rpc3BsYXk6ZmxleDtib3gtc2hhZG93OjAg''@;'; put 'put ''Y2FsYygtMSp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApKSAwIHZhcigtLWNsci1uYXYtYm94LXNoYWRvdy1jb2xvcikgaW5zZXQ7Ym94LXNoYWRvdzowIC0uMDVyZW0gMCB2YXIoLS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3IsIGhzbCgxOTgsIDAlLCA4MCUpKSBp''@;'; put 'put ''bnNldDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc3VibmF2LWJnLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSl9LnN1Yi1uYXYgLm5hdiwuc3VibmF2IC5uYXZ7ZmxleDox''@;'; put 'put ''IDEgYXV0bztwYWRkaW5nLWxlZnQ6MS4ycmVtfS5zdWItbmF2IC5uYXYtaXRlbSwuc3ViLW5hdiAubmF2LWl0ZW0gYSwuc3VibmF2IC5uYXYtaXRlbSwuc3VibmF2IC5uYXYtaXRlbSBhe3RleHQtZGVjb3JhdGlvbjpub25lfS5zdWItbmF2IGFzaWRlLC5zdWJuYXYgYXNpZGV7ZmxleDowIDAg''@;'; put 'put ''YXV0bztkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtwYWRkaW5nOjAgMS4ycmVtfS5zdWItbmF2IGFzaWRlPjpsYXN0LWNoaWxkLC5zdWJuYXYgYXNpZGU+Omxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0OjA7cGFkZGluZy1y''@;'; put 'put ''aWdodDowfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLXZlcnRpY2FsLW5hdi1kaXZpZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItdmVydGljYWwt''@;'; put 'put ''bmF2LWljb24tYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLXZlcnRpY2FsLW5hdi1pY29uLXJpZ2h0LW1hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpOy0tY2xyLXZlcnRpY2FsLW5hdi1jb2xsYXBzZWQtY2FyZXQtc2l6''@;'; put 'put ''ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRl''@;'; put 'put ''cmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLXBhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci12''@;'; put 'put ''ZXJ0aWNhbC1uYXYtaXRlbS1jaGlsZC1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApOy0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWhlaWdo''@;'; put 'put ''dDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTstLWNsci12ZXJ0aWNhbC1uYXYtbWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIpOy0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1mb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWln''@;'; put 'put ''aHQtc2VtaWJvbGQpOy0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQpOy0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQtaG92ZXIpOy0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWFj''@;'; put 'put ''dGl2ZSk7LS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZSk7LS1jbHItdmVydGljYWwtbmF2LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3Vu''@;'; put 'put ''ZC1zaGFkZS1ob3Zlcik7LS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtYWN0aXZlKTstLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS10b3AtbGV2ZWwtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWljb24tY29sb3I6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtaWNvbi1hY3RpdmUt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtaWNvbi1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci12ZXJ0aWNh''@;'; put 'put ''bC1uYXYtdG9nZ2xlLWJ1dHRvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApOy0tY2xyLXZlcnRpY2FsLW5hdi10cmlnZ2VyLWRpdmlkZXItYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1k''@;'; put 'put ''aXZpZGVyLWJvcmRlci13aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoKTstLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1jb2xsYXBzZWQtbWFyZ2luOm1peGlucy5iYXNlbGluZVB4KDMpOy0tY2xyLXZlcnRpY2FsLW5hdi1oZWFkZXItZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci12ZXJ0aWNhbC1uYXYtaGVhZGVyLXBhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItdmVydGljYWwtbmF2e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVj''@;'; put 'put ''dGlvbjpjb2x1bW47d2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYmctY29sb3IpO3dpbGwtY2hhbmdlOndpZHRoO3Ry''@;'; put 'put ''YW5zaXRpb246d2lkdGggLjJzIGVhc2UtaW4tb3V0fS5jbHItdmVydGljYWwtbmF2IC5uYXYtZGl2aWRlcntib3JkZXItdG9wOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10cmlnZ2VyLWRp''@;'; put 'put ''dmlkZXItYm9yZGVyLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWNvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4OjEgMSBhdXRvO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''OCk7b3ZlcmZsb3cteTphdXRvO292ZXJmbG93LXg6aGlkZGVufS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXB7ZGlzcGxheTpibG9jaztmbGV4OjAgMCBhdXRvO2hlaWdodDphdXRvO21pbi1oZWlnaHQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWhlaWdodCl9LmNsci12ZXJ0aWNh''@;'; put 'put ''bC1uYXYgLm5hdi1ncm91cC1jb250ZW50e2Rpc3BsYXk6ZmxleDtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudC5hY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1j''@;'; put 'put ''b2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWJnLWNvbG9yKTtwb3NpdGlvbjpyZWxhdGl2ZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQuYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3Rv''@;'; put 'put ''cDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlv''@;'; put 'put ''bjpib3JkZXItbGVmdCAuMnMgZWFzZS1pbn0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQuYWN0aXZlIC5uYXYtaWNvbntmaWxsOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1hY3RpdmUtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudC5h''@;'; put 'put ''Y3RpdmU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWhvdmVyLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQuYWN0aXZlOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1u''@;'; put 'put ''YXYtc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQ6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWhvdmVy''@;'; put 'put ''LWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQ6YWN0aXZle2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZl''@;'; put 'put ''LWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5re2ZsZXg6MSAxIGF1dG87cGFkZGluZy1sZWZ0OjA7bWluLXdpZHRoOjB9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50IC5uYXYtaWNvbnttYXJnaW4tbGVmdDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LXRleHR7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50IC5uYXYtaWNvbisubmF2LXRleHR7cGFk''@;'; put 'put ''ZGluZy1sZWZ0OjB9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50IC5uYXYtbGluaysubmF2LWdyb3VwLXRleHR7ZGlzcGxheTpub25lfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudD4ubmF2LWxpbmsuYWN0aXZlLC5jbHItdmVydGljYWwtbmF2IC5uYXYt''@;'; put 'put ''Z3JvdXAtY29udGVudD4ubmF2LWxpbms6YWN0aXZle2ZvbnQtd2VpZ2h0OnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtZm9udC13ZWlnaHQpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY2hpbGRyZW57b3ZlcmZsb3cteTpoaWRkZW59LmNsci12ZXJ0aWNhbC1uYXYg''@;'; put 'put ''Lm5hdi10cmlnZ2VyLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlcntmbGV4OjAgMCB2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1idXR0b24tc2l6ZSk7Ym9yZGVyOjA7aGVpZ2h0OnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWJ1dHRvbi1zaXplKTtwYWRk''@;'; put 'put ''aW5nOjA7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lLW9mZnNldDpjYWxjKC0xKmNhbGMoNSooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlciBjZHMtaWNvbltzaGFwZT1hbmdsZS1k''@;'; put 'put ''b3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlciBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlciBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJp''@;'; put 'put ''Z2dlciBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVde2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWljb24tY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlciBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdOmhvdmVyLC5jbHItdmVydGljYWwtbmF2''@;'; put 'put ''IC5uYXYtdHJpZ2dlciBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdOmhvdmVyLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlciBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdOmhvdmVyLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlciBjbHItaWNv''@;'; put 'put ''bltzaGFwZT1hbmdsZS1kb3VibGVdOmhvdmVye2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWljb24taG92ZXItY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlciBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdOmFjdGl2ZSwuY2xyLXZlcnRpY2FsLW5h''@;'; put 'put ''diAubmF2LXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTphY3RpdmUsLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC10cmlnZ2VyIGNkcy1pY29uW3NoYXBlPWFuZ2xlLWRvdWJsZV06YWN0aXZlLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlciBjbHIt''@;'; put 'put ''aWNvbltzaGFwZT1hbmdsZS1kb3VibGVdOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWFjdGl2ZS1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2VyOmRpc2FibGVkIGNkcy1pY29uW3NoYXBlPWFuZ2xlLWRvdWJsZV0sLmNsci12ZXJ0''@;'; put 'put ''aWNhbC1uYXYgLm5hdi10cmlnZ2VyOmRpc2FibGVkIGNsci1pY29uW3NoYXBlPWFuZ2xlLWRvdWJsZV0sLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2VyLmRpc2FibGVkIGNkcy1pY29uW3NoYXBlPWFuZ2xlLWRvdWJsZV0sLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2VyLmRpc2Fi''@;'; put 'put ''bGVkIGNsci1pY29uW3NoYXBlPWFuZ2xlLWRvdWJsZV0sLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC10cmlnZ2VyOmRpc2FibGVkIGNkcy1pY29uW3NoYXBlPWFuZ2xlLWRvdWJsZV0sLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC10cmlnZ2VyOmRpc2FibGVkIGNsci1pY29uW3No''@;'; put 'put ''YXBlPWFuZ2xlLWRvdWJsZV0sLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC10cmlnZ2VyLmRpc2FibGVkIGNkcy1pY29uW3NoYXBlPWFuZ2xlLWRvdWJsZV0sLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC10cmlnZ2VyLmRpc2FibGVkIGNsci1pY29uW3NoYXBlPWFuZ2xlLWRvdWJs''@;'; put 'put ''ZV17Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtaWNvbi1kaXNhYmxlZC1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2Vye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2hlaWdodDp2YXIoLS1jbHIt''@;'; put 'put ''dmVydGljYWwtbmF2LWl0ZW0taGVpZ2h0KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttYXJnaW4tYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2VyIGNkcy1pY29u''@;'; put 'put ''e21hcmdpbi1yaWdodDowO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2VyLm9uLWNvbGxhcHNle2Rpc3BsYXk6YmxvY2t9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmln''@;'; put 'put ''Z2VyLm9uLWNvbGxhcHNlIGNkcy1pY29ue21hcmdpbjowfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlcntkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bztjb2xvcjppbmhlcml0O292ZXJmbG93OmhpZGRlbjt0ZXh0LWFsaWduOmxlZnR9LmNsci12ZXJ0aWNhbC1uYXYgLm5h''@;'; put 'put ''di1ncm91cC10cmlnZ2VyIC5uYXYtZ3JvdXAtdHJpZ2dlci1pY29ue2ZsZXgtc2hyaW5rOjA7d2lkdGg6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pY29uLXNpemUpO21hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2FsaWduLXNlbGY6Y2VudGVyO3RyYW5zaXRpb246YWxsIC4ycyBl''@;'; put 'put ''YXNlLWluLW91dH0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXItaWNvbnt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXR9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2VyKy5uYXYtY29udGVudHtib3JkZXItdG9wOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1k''@;'; put 'put ''aXZpZGVyLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10cmlnZ2VyLWRpdmlkZXItYm9yZGVyLWNvbG9yKTtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdGV4dCwuY2xyLXZlcnRpY2Fs''@;'; put 'put ''LW5hdiAubmF2LWxpbmt7aGVpZ2h0OnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1oZWlnaHQpO3BhZGRpbmc6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLXBhZGRpbmcpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtkaXNwbGF5OmZsZXg7YWxp''@;'; put 'put ''Z24taXRlbXM6Y2VudGVyO291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqY2FsYyg1KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSl9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC10ZXh0LC5jbHItdmVydGljYWwtbmF2IC5uYXYtdGV4dHtmbGV4OjEgMSBhdXRvO3doaXRlLXNwYWNl''@;'; put 'put ''Om5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmt7ZGlzcGxheTpmbGV4O3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1jb2xvcil9LmNsci12ZXJ0aWNhbC1u''@;'; put 'put ''YXYgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3IpO3Bvc2l0aW9uOnJlbGF0aXZlfS5jbHItdmVydGljYWwtbmF2IC5u''@;'; put 'put ''YXYtbGluay5hY3RpdmU6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7Ym9yZGVyOjA7Ym9yZGVyLWxlZnQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMzAwKSBzb2xpZCB2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTt0cmFuc2l0aW9uOmJvcmRlci1sZWZ0IC4ycyBlYXNlLWlufS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29ue2ZpbGw6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pY29uLWFjdGl2ZS1j''@;'; put 'put ''b2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1saW5rLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluay5hY3RpdmU6YWN0aXZle2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1hY3RpdmUtYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluazpob3Zlcntjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12''@;'; put 'put ''ZXJ0aWNhbC1uYXYtaG92ZXItYmctY29sb3IpO3RleHQtZGVjb3JhdGlvbjpub25lfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluazphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5h''@;'; put 'put ''di1hY3RpdmUtYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtaGVhZGVye3BhZGRpbmc6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1oZWFkZXItcGFkZGluZyk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0yKTtmb250LXdlaWdodDp2YXIoLS1j''@;'; put 'put ''bHItdmVydGljYWwtbmF2LWhlYWRlci1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6MS4zMzMzMzNlbTtsZXR0ZXItc3BhY2luZzotLjAwODMzMzMzZW19LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1pY29ue2ZsZXg6MCAwIHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1zaXplKTthbGlnbi1z''@;'; put 'put ''ZWxmOmNlbnRlcjtoZWlnaHQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLXZlcnRpY2Fs''@;'; put 'put ''LW5hdi1pY29uLXNpemUpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2xyLXZlcnRpY2FsLW5hdiBjbHItdmVydGljYWwtbmF2LWdyb3VwLWNoaWxkcmVue2Rpc3BsYXk6YmxvY2t9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1i''@;'; put 'put ''dG57ZmxleDoxIDEgYXV0bztwYWRkaW5nOjA7bWFyZ2luOjA7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSpjYWxjKDUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpKX0uY2xyLXZlcnRpY2FsLW5hdj4ubmF2LWxpbmss''@;'; put 'put ''LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1jb250ZW50Pi5uYXYtbGlua3tmbGV4OjAgMCB2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1idXR0b24tc2l6ZSl9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1saW5rKy5uYXYtZ3JvdXAtdHJpZ2dlcntmbGV4OjAgMCB2YXIoLS1jbHItdmVydGlj''@;'; put 'put ''YWwtbmF2LXRvZ2dsZS1idXR0b24tc2l6ZSl9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1saW5rKy5uYXYtZ3JvdXAtdHJpZ2dlciAubmF2LWdyb3VwLXRleHR7ZGlzcGxheTpub25lfS5jbHItdmVydGljYWwtbmF2IC5uYXYtaWNvbisubmF2LWdyb3VwLXRleHR7cGFkZGluZy1sZWZ0OjB9LmNs''@;'; put 'put ''ci12ZXJ0aWNhbC1uYXYuaGFzLW5hdi1ncm91cHMgLm5hdi1jb250ZW50Pi5uYXYtbGluaywuY2xyLXZlcnRpY2FsLW5hdi5oYXMtbmF2LWdyb3VwcyAubmF2LWdyb3VwIC5uYXYtZ3JvdXAtdGV4dCwuY2xyLXZlcnRpY2FsLW5hdi5oYXMtbmF2LWdyb3VwcyAubmF2LWdyb3VwIC5uYXYtZ3Jv''@;'; put 'put ''dXAtdHJpZ2dlcntmb250LXdlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tdG9wLWxldmVsLWZvbnQtd2VpZ2h0KX0uY2xyLXZlcnRpY2FsLW5hdi5oYXMtbmF2LWdyb3VwcyAubmF2LWdyb3VwLWNoaWxkcmVuIC5uYXYtbGluaywuY2xyLXZlcnRpY2FsLW5hdi5oYXMtaWNvbnMg''@;'; put 'put ''Lm5hdi1ncm91cC1jaGlsZHJlbiAubmF2LWxpbmt7cGFkZGluZzp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY2hpbGQtcGFkZGluZyl9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC5hY3RpdmU6bm90KC5pcy1leHBhbmRlZCkgLm5hdi1ncm91cC1jb250ZW50e2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC5hY3RpdmU6bm90KC5pcy1leHBhbmRlZCkgLm5hdi1ncm91cC1jb250ZW50IC5uYXYtaWNvbntmaWxsOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1h''@;'; put 'put ''Y3RpdmUtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWxpbmsuYWN0aXZlfi5uYXYtZ3JvdXAtdHJpZ2dlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5u''@;'; put 'put ''YXYtZ3JvdXAtY29udGVudCAubmF2LWxpbms6aG92ZXJ+Lm5hdi1ncm91cC10cmlnZ2Vye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50IC5uYXYtbGluazphY3RpdmV+Lm5h''@;'; put 'put ''di1ncm91cC10cmlnZ2Vye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWxpbmsuYWN0aXZlOmhvdmVyfi5uYXYtZ3JvdXAtdHJpZ2dlcntiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZX4ubmF2LWdyb3VwLXRyaWdnZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGlj''@;'; put 'put ''YWwtbmF2LXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXY6bm90KC5pcy1jb2xsYXBzZWQpIC5uYXYtbGluaysubmF2LWdyb3VwLXRyaWdnZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1t''@;'; put 'put ''ZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZHt3aWR0aDp2YXIoLS1jbHItdmVydGljYWwtbmF2LW1pbi13aWR0aCk7bWluLXdpZHRoOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtbWluLXdpZHRoKTttYXgtd2lkdGg6''@;'; put 'put ''Y2FsYyh2YXIoLS1jbHItdmVydGljYWwtbmF2LW1pbi13aWR0aCkgKyBjYWxjKDE0KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSk7Y3Vyc29yOnBvaW50ZXJ9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFt''@;'; put 'put ''YnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQgLm5hdi1pY29ue21hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5tYWluLWNvbnRhaW5lcjpub3QoW2Ns''@;'; put 'put ''YXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWxpbmt7ZmxleDowIDAgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1taW4td2lkdGgpfS5t''@;'; put 'put ''YWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWxpbmt+Lm5hdi1ncm91cC10cmlnZ2Vye2ZsZXg6''@;'; put 'put ''MCAwIGNhbGModmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1jb2xsYXBzZWQtY2FyZXQtc2l6ZSkgKyB2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tcmlnaHQtbWFyZ2luKSk7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKC0xKnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1zaXplKSkpO3Bv''@;'; put 'put ''aW50ZXItZXZlbnRzOm5vbmV9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lcjpub3QoW2Ns''@;'; put 'put ''YXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAtdHJpZ2dlcntwYWRkaW5nOjB9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVu''@;'; put 'put ''dV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQgLm5hdi1ncm91cC10cmlnZ2Vye3BhZGRpbmctbGVmdDowfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1v''@;'; put 'put ''cGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAtdHJpZ2dlciBjbHItaWNvbi5uYXYtZ3JvdXAtdHJpZ2dlci1pY29ue2hlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0taGVpZ2h0KTt3aWR0aDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTcpO21hcmdpbi1sZWZ0OmNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWFyZ2luLXJpZ2h0OjB9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xy''@;'; put 'put ''LXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQgLm5hdi1ncm91cC10cmlnZ2VyIGNkcy1pY29uLm5hdi1ncm91cC10cmlnZ2VyLWljb257d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttYXJnaW46MH0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51''@;'; put 'put ''XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLC5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNs''@;'; put 'put ''ci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtbGlua3tkaXNwbGF5Om5vbmV9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQu''@;'; put 'put ''aGFzLWljb25zIC5uYXYtZ3JvdXB7ZGlzcGxheTpibG9ja30ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZC5oYXMtaWNvbnMgLm5hdi1s''@;'; put 'put ''aW5re2Rpc3BsYXk6ZmxleH0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZC5oYXMtaWNvbnMgLm5hdi1ncm91cC10ZXh0LC5tYWluLWNv''@;'; put 'put ''bnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkLmhhcy1pY29ucyAubmF2LXRleHR7cG9zaXRpb246YWJzb2x1dGU7Y2xpcDpyZWN0KDFweCwxcHgsMXB4''@;'; put 'put ''LDFweCk7Y2xpcC1wYXRoOmluc2V0KDUwJSk7cGFkZGluZzowO2JvcmRlcjowO2hlaWdodDoxcHg7d2lkdGg6MXB4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowfS5jbHItdmVydGljYWwtbmF2Lm5hdi10cmlnZ2VyLS1ib3R0b20gLm5hdi10cmlnZ2Vy''@;'; put 'put ''e29yZGVyOjI7bWFyZ2luLXRvcDowfS5jbHItdmVydGljYWwtbmF2Lm5hdi10cmlnZ2VyLS1ib3R0b20gLm5hdi10cmlnZ2VyKy5uYXYtY29udGVudHtib3JkZXItdG9wOjA7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGgp''@;'; put 'put ''IHNvbGlkIHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcik7cGFkZGluZy10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1zbGlkaW5nLXBhbmVsLXRleHQtY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1ncmF5LTcwMCk7LS1jbHItcmVzcG9uc2l2ZS1uYXYtdHJpZ2dlci1iZy1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktMCk7LS1jbHItcmVzcG9uc2l2ZS1uYXYtdHJpZ2dlci1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0x''@;'; put 'put ''MDApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LW92ZXJmbG93LWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItcmVzcG9uc2l2ZS1uYXYtaGFtYnVyZ2VyLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXIt''@;'; put 'put ''cmFkaXVzLTEwMCl9LmNsci1uYXYtY2xvc2V7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7Y29sb3I6dmFyKC0tY29sb3IpOy0tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSl9LmNsci1uYXYtY2xvc2U6aG92ZXIsLmNs''@;'; put 'put ''ci1uYXYtY2xvc2U6Zm9jdXN7LS1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS0xMDApfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIsLmhlYWRlci1vdmVyZmxvdy10cmlnZ2Vye2Rpc3BsYXk6bm9uZX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyPnNwYW4sLmhlYWRl''@;'; put 'put ''ci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmJlZm9yZSwuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyPnNwYW46YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMik7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtiYWNrZ3JvdW5k''@;'; put 'put ''OnZhcigtLWNsci1yZXNwb25zaXZlLW5hdi10cmlnZ2VyLWJnLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3Bhbntwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjpt''@;'; put 'put ''aWRkbGV9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmJlZm9yZSwuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyPnNwYW46YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjB9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmJlZm9yZXt0b3A6Y2FsYygt''@;'; put 'put ''MSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyPnNwYW46YWZ0ZXJ7Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlci5hY3RpdmU+c3BhbntiYWNrZ3JvdW5kOjAgMH0uaGVh''@;'; put 'put ''ZGVyLWhhbWJ1cmdlci10cmlnZ2VyLmFjdGl2ZT5zcGFuOmJlZm9yZSwuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVye2xlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt0cmFuc2Zvcm0tb3JpZ2luOjklO3RyYW5zaXRpb246dHJhbnNmb3JtIC42cyBlYXNl''@;'; put 'put ''fS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIuYWN0aXZlPnNwYW46YmVmb3Jle3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIuYWN0aXZlPnNwYW46YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcj5z''@;'; put 'put ''cGFuLC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcj5zcGFuOmJlZm9yZSwuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2Jh''@;'; put 'put ''Y2tncm91bmQ6dmFyKC0tY2xyLXJlc3BvbnNpdmUtbmF2LXRyaWdnZXItYmctY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3Bhbntwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lmhl''@;'; put 'put ''YWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW46YmVmb3JlLC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcj5zcGFuOmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcj5zcGFuOmJlZm9yZXt0b3A6Y2FsYygtMSp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTUpKX0uaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjphZnRlcntib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKX0uaGVhZGVyLW92ZXJmbG93LXRyaWdnZXIuYWN0aXZlPnNwYW57YmFja2dyb3VuZDowIDB9LmhlYWRlci1vdmVyZmxvdy10''@;'; put 'put ''cmlnZ2VyLmFjdGl2ZT5zcGFuOmJlZm9yZSwuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXIuYWN0aXZlPnNwYW46YWZ0ZXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMik7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS00KSk7dHJhbnNmb3JtLW9yaWdpbjotMyU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFuOmJlZm9yZXt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uaGVhZGVyLW92ZXJmbG93LXRyaWdnZXIuYWN0aXZlPnNwYW46''@;'; put 'put ''YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6OTkycHgpey5tYWluLWNvbnRhaW5lciAuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXJ7ZGlzcGxheTppbmxpbmUt''@;'; put 'put ''YmxvY2s7Ym9yZGVyOjA7YmFja2dyb3VuZDowIDA7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7aGVpZ2h0OnZhcigtLWNsci1oZWFkZXItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItaGVhZGVyLWhlaWdodCk7cGFkZGluZzowIDAgdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS0zKSAwO3RleHQtYWxpZ246Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDtjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3IpfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyOmZvY3VzLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW92''@;'; put 'put ''ZXJmbG93LXRyaWdnZXI6Zm9jdXN7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpKX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcjpob3ZlciwubWFpbi1jb250YWluZXIgLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyOmhvdmVy''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvci1ob3Zlcil9Lm1haW4tY29udGFpbmVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI6ZGlzYWJsZWQsLm1haW4tY29udGFpbmVyIC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcjpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9Lm1h''@;'; put 'put ''aW4tY29udGFpbmVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1s''@;'; put 'put ''ZXZlbC0xe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MCBhdXRvIDAgMDtiYWNrZ3JvdW5kOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYmctY29sb3IpO3otaW5kZXg6MTAzOTtoZWlnaHQ6MTAwdmg7dHJhbnNmb3JtOnRyYW5zbGF0ZShj''@;'; put 'put ''YWxjKC0xKmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSkpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yLC5t''@;'; put 'put ''YWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyIC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3Bvc2l0aW9uOmZpeGVkO2luc2V0OjAgMCAwIGF1dG87YmFja2dyb3Vu''@;'; put 'put ''ZDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKTt6LWluZGV4OjEwMzk7aGVpZ2h0OjEwMHZoO3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX0ubWFpbi1jb250YWlu''@;'; put 'put ''ZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgYXNpZGUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEg''@;'; put 'put ''YXNpZGUsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIGFzaWRlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiwubWFpbi1jb250YWluZXIgLnN1Yi1u''@;'; put 'put ''YXYuY2xyLW5hdi1sZXZlbC0yIGFzaWRle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpzdHJldGNofS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSBhc2lkZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xIGFzaWRlLC5tYWlu''@;'; put 'put ''LWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIGFzaWRle2p1c3RpZnktY29udGVudDpjZW50ZXI7d2lkdGg6MTAwJX0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5h''@;'; put 'put ''diwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2e3BhZGRpbmctbGVmdDowO2dhcDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTUpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtaXRlbSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1pdGVtLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2''@;'; put 'put ''ZWwtMiAubmF2IC5uYXYtaXRlbSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1pdGVte2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTttYXJnaW4tcmlnaHQ6MH0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEg''@;'; put 'put ''Lm5hdiAubmF2LWxpbmssLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluaywubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmssLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwt''@;'; put 'put ''MiAubmF2IC5uYXYtbGlua3twYWRkaW5nOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1wYWRkaW5nKTt3aWR0aDoxMDAlO21heC13aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1jb2xv''@;'; put 'put ''cil9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVs''@;'; put 'put ''LTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZle2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZl''@;'; put 'put ''cnRpY2FsLW5hdi1zZWxlY3RlZC1iZy1jb2xvcik7cG9zaXRpb246cmVsYXRpdmV9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpiZWZvcmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5u''@;'; put 'put ''YXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZXtjb250''@;'; put 'put ''ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNr''@;'; put 'put ''Z3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFzZS1pbn0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0x''@;'; put 'put ''IC5uYXYgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb24sLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb24sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluay5hY3Rp''@;'; put 'put ''dmUgLm5hdi1pY29ue2ZpbGw6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pY29uLWFjdGl2ZS1jb2xvcil9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZl''@;'; put 'put ''bC0xIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmhv''@;'; put 'put ''dmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1ob3Zlci1iZy1jb2xvcil9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNs''@;'; put 'put ''ci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluay5hY3RpdmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxp''@;'; put 'put ''bmsuYWN0aXZlOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yKX0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWIt''@;'; put 'put ''bmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluazpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazpob3Zlcntj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaG92ZXItYmctY29sb3IpO3RleHQtZGVjb3JhdGlvbjpub25lfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAu''@;'; put 'put ''bmF2IC5uYXYtbGluazphY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluazphY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rOmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1''@;'; put 'put ''Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1iZy1jb2xvcil9Lm1haW4tY29udGFpbmVyIC5zdWJu''@;'; put 'put ''YXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluazpob3Zlciwu''@;'; put 'put ''bWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5u''@;'; put 'put ''YXYgLm5hdi1saW5rLmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZle2JveC1zaGFkb3c6bm9uZX0ubWFp''@;'; put 'put ''bi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6aG92ZXI6bm90KC5hY3RpdmUpOmJlZm9yZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rOmhvdmVyOm5vdCguYWN0aXZlKTpiZWZvcmUsLm1haW4t''@;'; put 'put ''Y29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rOmhvdmVyOm5vdCguYWN0aXZlKTpiZWZvcmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazpob3Zlcjpub3QoLmFjdGl2ZSk6YmVmb3Jle2NvbnRlbnQ6''@;'; put 'put ''bm9uZX0ubWFpbi1jb250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7Ym9yZGVyLXJpZ2h0Om5vbmV9Lm1haW4tY29udGFpbmVyIC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcntw''@;'; put 'put ''b3NpdGlvbjpyZWxhdGl2ZX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLWRpdmlkZXItY29sb3IpO2hl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2xlZnQ6MH0ubWFpbi1jb250YWluZXIgLmhlYWRlciAuYnJhbmRpbmd7bWF4LXdpZHRoOmNhbGMo''@;'; put 'put ''MjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttaW4td2lkdGg6MDtvdmVyZmxvdzpoaWRkZW59Lm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcisuYnJhbmRpbmd7cGFkZGluZy1sZWZ0OjA7bWFyZ2luLWxlZnQ6Y2FsYygtMSp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTUpKX0ubWFpbi1jb250YWluZXIgLmhlYWRlciAuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyKy5icmFuZGluZyAuY2xyLWljb24sLm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcisuYnJhbmRpbmcgLmxvZ28sLm1haW4tY29u''@;'; put 'put ''dGFpbmVyIC5oZWFkZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcisuYnJhbmRpbmcgY2RzLWljb24sLm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcisuYnJhbmRpbmcgY2xyLWljb257ZGlzcGxheTpub25lfS5tYWluLWNvbnRhaW5lciAuaGVhZGVy''@;'; put 'put ''IC5icmFuZGluZysuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXIsLm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmhlYWRlci1uYXYrLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItbmF2Ky5jZGstdmlzdWFsbHktaGlkZGVuKy5oZWFkZXItb3Zl''@;'; put 'put ''cmZsb3ctdHJpZ2dlcnttYXJnaW4tbGVmdDphdXRvfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1iYWNrZHJvcCwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1iYWNrZHJvcHtwb3NpdGlvbjpmaXhl''@;'; put 'put ''ZDtpbnNldDowO2JhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vdmVybGF5LWJhY2tkcm9wLWJhY2tncm91bmQpO2N1cnNvcjpwb2ludGVyO3otaW5kZXg6MTAzOH0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYt''@;'; put 'put ''bGV2ZWwtMSAubmF2LWxpbmssLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxl''@;'; put 'put ''dmVsLTEgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5re2ZsZXg6MCAwIGF1dG87b3BhY2l0eToxO2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1jb2xvcil9Lm1h''@;'; put 'put ''aW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5uYXYtaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2''@;'; put 'put ''LWxpbmsgLmZhLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAubmF2LWljb24sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2''@;'; put 'put ''LWxldmVsLTIgLm5hdi1saW5rIC5mYSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAubmF2LWljb24sLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXIt''@;'; put 'put ''bmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsgLmZhLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rIC5uYXYtaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFk''@;'; put 'put ''ZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAuZmF7ZGlzcGxheTpub25lfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAubmF2LXRleHQsLm1haW4tY29udGFpbmVy''@;'; put 'put ''Lm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rIC5uYXYtdGV4dCwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAubmF2LXRl''@;'; put 'put ''eHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLm5hdi10ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSAwIHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtNCkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aGl0ZS1zcGFjZTpub3JtYWw7Y29sb3I6dmFyKC0tY2xyLXNsaWRpbmctcGFuZWwtdGV4dC1jb2xvcik7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtmb250LXdlaWdodDo0MDB9Lm1haW4tY29udGFp''@;'; put 'put ''bmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5h''@;'; put 'put ''di1saW5rIC5uYXYtaWNvbisubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dCwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5o''@;'; put 'put ''ZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGlu''@;'; put 'put ''ay5hY3RpdmUsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZl''@;'; put 'put ''bC0xIC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZle2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1iZy1jb2xvcik7cG9zaXRpb246cmVsYXRpdmV9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZTpiZWZvcmUs''@;'; put 'put ''Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZTpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwt''@;'; put 'put ''MSAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7''@;'; put 'put ''bGVmdDowO3dpZHRoOjEwMCU7Ym9yZGVyOjA7Ym9yZGVyLWxlZnQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMzAwKSBzb2xpZCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTt0cmFuc2l0aW9uOmJvcmRlci1sZWZ0''@;'; put 'put ''IC4ycyBlYXNlLWlufS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1u''@;'; put 'put ''YXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb24sLm1haW4tY29udGFpbmVyLm9wZW4t''@;'; put 'put ''b3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbntmaWxsOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1hY3RpdmUtY29sb3IpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFk''@;'; put 'put ''ZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZTpob3ZlciwubWFpbi1jb250YWluZXIu''@;'; put 'put ''b3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZl''@;'; put 'put ''OmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1ob3Zlci1iZy1jb2xvcil9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZTphY3Rp''@;'; put 'put ''dmUsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2''@;'; put 'put ''ZWwtMSAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1z''@;'; put 'put ''ZWxlY3RlZC1hY3RpdmUtYmctY29sb3IpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluazpob3ZlciwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXIt''@;'; put 'put ''bmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVy''@;'; put 'put ''IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbms6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246''@;'; put 'put ''bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbms6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0y''@;'; put 'put ''IC5uYXYtbGluazphY3RpdmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbms6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHIt''@;'; put 'put ''bmF2LWxldmVsLTIgLm5hdi1saW5rOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1iZy1jb2xvcil9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUg''@;'; put 'put ''LmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZT4ubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZT4ubmF2LXRleHQsLm1h''@;'; put 'put ''aW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlPi5uYXYtdGV4dCwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0y''@;'; put 'put ''IC5uYXYtbGluay5hY3RpdmU+Lm5hdi10ZXh0e2NvbG9yOmluaGVyaXR9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2VyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYgLm5h''@;'; put 'put ''di10cmlnZ2Vye2Rpc3BsYXk6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZ3twb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkp''@;'; put 'put ''KTttYXgtd2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3otaW5kZXg6MTA0MDtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZz4ubmF2LWxp''@;'; put 'put ''bmt7b3ZlcmZsb3c6aGlkZGVufS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmJyYW5kaW5nIC5jbHItaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyAubG9nbywubWFpbi1jb250YWluZXIub3Blbi1o''@;'; put 'put ''YW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyBjZHMtaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyBjbHItaWNvbntkaXNwbGF5OmlubGluZS1ibG9ja30ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVh''@;'; put 'put ''ZGVyIC5icmFuZGluZyBjZHMtaWNvbltzaGFwZT12bS1idWddLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmJyYW5kaW5nIGNsci1pY29uW3NoYXBlPXZtLWJ1Z10sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRp''@;'; put 'put ''bmcgLmNsci12bXctbG9nb3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItYmctY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJh''@;'; put 'put ''bmRpbmcgLnRpdGxle2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1jb2xvcik7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztvdmVyZmxvdzpoaWRkZW59Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2V7cG9zaXRpb246Zml4ZWQ7dG9wOjA7''@;'; put 'put ''cmlnaHQ6YXV0bztsZWZ0OjA7ei1pbmRleDoxMDM5O3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYyhjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29u''@;'; put 'put ''dGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U6YWZ0ZXJ7Y29udGVudDpub25lfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW57YmFja2dyb3VuZDowIDB9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1l''@;'; put 'put ''bnUgLmNsci1uYXYtY2xvc2U+c3BhbjpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjphZnRlcntsZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7dHJhbnNmb3JtLW9yaWdpbjo5JTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAu''@;'; put 'put ''NnMgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZXt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFuOmFmdGVye3RyYW5zZm9y''@;'; put 'put ''bTpyb3RhdGUoLTQ1ZGVnKX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFt''@;'; put 'put ''YnVyZ2VyLW1lbnUgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLWNsci1oZWFkZXItaGVpZ2h0KSArIHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtOSkpO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAu''@;'; put 'put ''c3VibmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMnt0cmFuc2Zvcm06dHJh''@;'; put 'put ''bnNsYXRlKDApO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlfS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIsLm1h''@;'; put 'put ''aW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTJ7cGFkZGluZy10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3Nle3Bvc2l0aW9uOmZpeGVkO3RvcDow''@;'; put 'put ''O3JpZ2h0OjA7bGVmdDphdXRvO3otaW5kZXg6MTAzOTt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoLTEqY2FsYyhjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKSkpO3RyYW5zaXRpb246dHJhbnNmb3JtIC42cyBlYXNl''@;'; put 'put ''fS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmNsci1uYXYtY2xvc2U6YWZ0ZXJ7Y29udGVudDpub25lfS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbntiYWNrZ3JvdW5kOjAgMH0ubWFpbi1jb250YWluZXIub3Blbi1vdmVy''@;'; put 'put ''Zmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YmVmb3JlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjphZnRlcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xl''@;'; put 'put ''ZnQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpKTt0cmFuc2Zvcm0tb3JpZ2luOi0zJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNnMgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YmVmb3Jle3RyYW5zZm9ybTpyb3Rh''@;'; put 'put ''dGUoNDVkZWcpfS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjphZnRlcnt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWlu''@;'; put 'put ''LWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLXZlcnRpY2Fs''@;'; put 'put ''LW5hdi5jbHItbmF2LWxldmVsLTF7b3ZlcmZsb3c6aW5oZXJpdDt3aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXIt''@;'; put 'put ''bWVudSAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTE6YmVmb3JlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xOmJlZm9yZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVs''@;'; put 'put ''LTE6YmVmb3JlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMTpiZWZvcmV7Y29udGVudDpub25lfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAu''@;'; put 'put ''bmF2LWxpbmssLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmssLm1haW4tY29udGFpbmVy''@;'; put 'put ''Lm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGlua3t3aWR0aDoxMDAlfS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJm''@;'; put 'put ''bG93LW1lbnUgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7d2lk''@;'; put 'put ''dGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTc2cHgpey5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5icmFuZGluZ3tt''@;'; put 'put ''YXgtd2lkdGg6Y2FsYygxNDQqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21pbi13aWR0aDowO292ZXJmbG93OmhpZGRlbn0ubWFpbi1jb250YWluZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSwubWFp''@;'; put 'put ''bi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTF7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKC0xKmNhbGMoMjg4KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSkpfS5tYWluLWNv''@;'; put 'put ''bnRhaW5lciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyIC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwt''@;'; put 'put ''Mnt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoMjg4KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmd7d2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21h''@;'; put 'put ''eC13aWR0aDpjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWJuYXYuY2xyLW5hdi1s''@;'; put 'put ''ZXZlbC0xLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTF7b3ZlcmZsb3c6aW5oZXJpdDt3aWR0aDpjYWxj''@;'; put 'put ''KDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMoMjg4KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLW5hdi1jbG9zZXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDph''@;'; put 'put ''dXRvO2xlZnQ6MDt6LWluZGV4OjEwMzk7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKGNhbGMoMjg4KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNnMgZWFzZX0ubWFpbi1jb250YWluZXIu''@;'; put 'put ''b3Blbi1oYW1idXJnZXItbWVudSAuY2xyLW5hdi1jbG9zZTphZnRlcntjb250ZW50Om5vbmV9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuc3VibmF2LmNsci1u''@;'; put 'put ''YXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMnt3aWR0aDpjYWxjKDI4OCooMXJlbS92YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMoMjg4KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3Nle3Bvc2l0aW9uOmZpeGVkO3RvcDowO3JpZ2h0OjA7bGVmdDphdXRvO3otaW5k''@;'; put 'put ''ZXg6MTAzOTt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoLTEqY2FsYyhjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKSkpO3RyYW5zaXRpb246dHJhbnNmb3JtIC42cyBlYXNlfS5tYWluLWNvbnRhaW5lci5vcGVuLW92''@;'; put 'put ''ZXJmbG93LW1lbnUgLmNsci1uYXYtY2xvc2U6YWZ0ZXJ7Y29udGVudDpub25lfX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1iYWRnZS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWdyYXkpOy0tY2xyLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWNvbG9yLTEwMCk7LS1jbHItYmFkZ2UtaW5mby1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1ibHVlKTstLWNsci1iYWRnZS1pbmZvLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYmFkZ2Utc3VjY2Vzcy1iZy1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbik7LS1jbHItYmFkZ2Utc3VjY2Vzcy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJhZGdlLXdhcm5pbmctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93KTstLWNsci1iYWRnZS13''@;'; put 'put ''YXJuaW5nLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2xyLWJhZGdlLWRhbmdlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1yZWQpOy0tY2xyLWJhZGdlLWRhbmdlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0t''@;'; put 'put ''Y2xyLWJhZGdlLWdyYXktYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheSk7LS1jbHItYmFkZ2UtZ3JheS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJhZGdlLXB1cnBsZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0''@;'; put 'put ''eS12aW9sZXQpOy0tY2xyLWJhZGdlLXB1cnBsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJhZGdlLWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZGFyay1ibHVlKTstLWNsci1iYWRnZS1ibHVlLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYmFkZ2Utb3JhbmdlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LXRhbmdlcmluZSk7LS1jbHItYmFkZ2Utb3JhbmdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYmFk''@;'; put 'put ''Z2UtbGlnaHQtYmx1ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1saWdodC1ibHVlKTstLWNsci1iYWRnZS1saWdodC1ibHVlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCl9LmJhZGdle2Rpc3BsYXk6aW5saW5lLWZsZXg7dmVydGljYWwtYWxp''@;'; put 'put ''Z246bWlkZGxlO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJhZGdlLWJhY2tncm91bmQtY29sb3IpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTcpO2JvcmRlci1yYWRpdXM6Y2FsYygyKnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktc21hbGxjYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1sZXR0ZXItc3BhY2lu''@;'; put 'put ''Zyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLWNsci1iYWRnZS1jb2xv''@;'; put 'put ''cil9LmJhZGdlOnZpc2l0ZWR7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWNvbG9yKX0uYmFkZ2U6bGlua3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1iYWRnZS1ncmF5LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtZ3JheS1jb2xvcil9LmJhZGdlLmJhZGdlLWdyYXksLmJhZGdl''@;'; put 'put ''LmJhZGdlLTF7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtZ3JheS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWdyYXktY29sb3IpfS5iYWRnZS5iYWRnZS1wdXJwbGUsLmJhZGdlLmJhZGdlLTJ7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtcHVycGxlLWJnLWNvbG9yKTtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYmFkZ2UtcHVycGxlLWNvbG9yKX0uYmFkZ2UuYmFkZ2UtYmx1ZSwuYmFkZ2UuYmFkZ2UtM3tiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1ibHVlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtYmx1ZS1jb2xvcil9LmJhZGdlLmJhZGdlLW9yYW5nZSwu''@;'; put 'put ''YmFkZ2UuYmFkZ2UtNHtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1vcmFuZ2UtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1vcmFuZ2UtY29sb3IpfS5iYWRnZS5iYWRnZS1saWdodC1ibHVlLC5iYWRnZS5iYWRnZS01e2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWxpZ2h0''@;'; put 'put ''LWJsdWUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1saWdodC1ibHVlLWNvbG9yKX0uYmFkZ2UuYmFkZ2UtaW5mb3tiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtaW5mby1jb2xvcil9LmJhZGdlLmJhZGdlLXN1''@;'; put 'put ''Y2Nlc3N7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utc3VjY2Vzcy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXN1Y2Nlc3MtY29sb3IpfS5iYWRnZS5iYWRnZS1kYW5nZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtZGFuZ2VyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYmFkZ2UtZGFuZ2VyLWNvbG9yKX0uYmFkZ2UuYmFkZ2Utd2FybmluZ3tiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS13YXJuaW5nLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2Utd2FybmluZy1jb2xvcil9XzotbXMtaW5wdXQtcGxhY2Vob2xkZXIgLmJhZGdlLDpyb290IC5i''@;'; put 'put ''YWRnZXtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikgY2FsYygzKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSAwfUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuYmFkZ2V7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIGNhbGMoMyooMXJlbS92''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkgMH19OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItbGFiZWwtZm9udC1jb2xvci1saWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLWZvbnQtY29sb3ItZGFyazp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0x''@;'; put 'put ''MDAwKTstLWNsci1sYWJlbC1kZWZhdWx0LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5KTstLWNsci1sYWJlbC1kZWZhdWx0LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKTstLWNsci1sYWJlbC1iZy1ob3Zlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpOy0tY2xyLWxhYmVsLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWxhYmVsLWJnLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci1sYWJlbC1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLWxhYmVsLWJnLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tYmFja2dyb3VuZC1kaXNhYmxlZCk7LS1jbHItbGFiZWwtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWxhYmVsLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNs''@;'; put 'put ''ci1sYWJlbC1ncmF5LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKTstLWNsci1sYWJlbC1ncmF5LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5KTstLWNsci1sYWJlbC1ncmF5LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWNvbG9yLTUwMCk7LS1jbHItbGFiZWwtcHVycGxlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKTstLWNsci1sYWJlbC1wdXJwbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LXZpb2xldCk7LS1jbHItbGFiZWwtcHVycGxlLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFiZWwtYmx1ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtYmx1ZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZGFyay1ibHVlKTstLWNs''@;'; put 'put ''ci1sYWJlbC1ibHVlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFiZWwtb3JhbmdlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKTstLWNsci1sYWJlbC1vcmFuZ2UtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy11dGlsaXR5LXRhbmdlcmluZSk7LS1jbHItbGFiZWwtb3JhbmdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFiZWwtbGlnaHQtYmx1ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtbGln''@;'; put 'put ''aHQtYmx1ZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktbGlnaHQtYmx1ZSk7LS1jbHItbGFiZWwtbGlnaHQtYmx1ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLWluZm8tYmctY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXV0aWxpdHktYmx1ZS10aW50KTstLWNsci1sYWJlbC1pbmZvLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1pbmZvLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1ibHVlKTstLWNsci1sYWJlbC1zdWNjZXNz''@;'; put 'put ''LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWdyZWVuLXRpbnQpOy0tY2xyLWxhYmVsLXN1Y2Nlc3MtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLXN1Y2Nlc3MtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11''@;'; put 'put ''dGlsaXR5LWdyZWVuKTstLWNsci1sYWJlbC13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdy10aW50KTstLWNsci1sYWJlbC13YXJuaW5nLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC13YXJu''@;'; put 'put ''aW5nLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS15ZWxsb3cpOy0tY2xyLWxhYmVsLWRhbmdlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1yZWQtdGludCk7LS1jbHItbGFiZWwtZGFuZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1kYW5nZXItYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LXJlZCk7LS1jbHItbGFiZWwtYm9yZGVyLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCl9LmxhYmVsLGEubGFiZWx7Zm9udC1zaXpl''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0''@;'; put 'put ''KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKTtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3BhZGRp''@;'; put 'put ''bmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtZGVmYXVsdC1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1ib3JkZXItcmFkaXVzLTIwMCk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIDA7d2hpdGUtc3BhY2U6bm93cmFwO2NvbG9yOnZhcigtLWNsci1sYWJlbC1m''@;'; put 'put ''b250LWNvbG9yLWxpZ2h0KTt0ZXh0LWRlY29yYXRpb246bm9uZX0ubGFiZWw6aGFzKD4uYmFkZ2UpLC5sYWJlbDpoYXMoPmNkcy1pY29uKSxhLmxhYmVsOmhhcyg+LmJhZGdlKSxhLmxhYmVsOmhhcyg+Y2RzLWljb24pe3BhZGRpbmctcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0u''@;'; put 'put ''bGFiZWwgLmJhZGdlLC5sYWJlbCBjZHMtaWNvbixhLmxhYmVsIC5iYWRnZSxhLmxhYmVsIGNkcy1pY29ue21hcmdpbjowO3RleHQtZGVjb3JhdGlvbjpub25lfS5sYWJlbDpoYXMoLmJhZGdlKSxhLmxhYmVsOmhhcyguYmFkZ2Upe2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5sYWJl''@;'; put 'put ''bC5jbGlja2FibGU6bm90KDpoYXMoLnRleHQpKSxhLmxhYmVsLmNsaWNrYWJsZTpub3QoOmhhcygudGV4dCkpe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmxhYmVsLmNsaWNrYWJsZT4udGV4dCxhLmxhYmVsLmNsaWNrYWJsZT4udGV4dHt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5s''@;'; put 'put ''YWJlbDp2aXNpdGVkLGEubGFiZWw6dmlzaXRlZHtjb2xvcjp2YXIoLS1jbHItbGFiZWwtZm9udC1jb2xvci1saWdodCl9LmxhYmVsOmZvY3VzLC5sYWJlbDpob3ZlciwubGFiZWw6YWN0aXZlLGEubGFiZWw6Zm9jdXMsYS5sYWJlbDpob3ZlcixhLmxhYmVsOmFjdGl2ZXt0ZXh0LWRlY29yYXRp''@;'; put 'put ''b246bm9uZX0ubGFiZWwuY2xpY2thYmxlOm5vdCguZGlzYWJsZWQpOmhvdmVyLGEubGFiZWwuY2xpY2thYmxlOm5vdCguZGlzYWJsZWQpOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWJnLWhvdmVyLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''bGFiZWwtaG92ZXItY29sb3IpfS5sYWJlbC5jbGlja2FibGU6bm90KC5kaXNhYmxlZCk6YWN0aXZlLGEubGFiZWwuY2xpY2thYmxlOm5vdCguZGlzYWJsZWQpOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItbGFiZWwtYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJlbC1iZy1h''@;'; put 'put ''Y3RpdmUtY29sb3IpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikpfS5sYWJlbC5sYWJlbC1ncmF5LC5sYWJlbC5sYWJlbC0xLGEubGFiZWwubGFiZWwtZ3JheSxhLmxhYmVsLmxhYmVsLTF7Ym9yZGVyOnZhcigtLWNsci1sYWJlbC1ib3JkZXItd2lkdGgp''@;'; put 'put ''IHNvbGlkIHZhcigtLWNsci1sYWJlbC1ncmF5LWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbGFiZWwtZ3JheS1iZy1jb2xvcil9LmxhYmVsLmxhYmVsLWdyYXk+LmJhZGdlLGEubGFiZWwubGFiZWwtZ3JheT4uYmFkZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFk''@;'; put 'put ''Z2UtZ3JheS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWdyYXktY29sb3IpfS5sYWJlbC5sYWJlbC1wdXJwbGUsLmxhYmVsLmxhYmVsLTIsYS5sYWJlbC5sYWJlbC1wdXJwbGUsYS5sYWJlbC5sYWJlbC0ye2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdpZHRoKSBzb2xp''@;'; put 'put ''ZCB2YXIoLS1jbHItbGFiZWwtcHVycGxlLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbGFiZWwtcHVycGxlLWJnLWNvbG9yKX0ubGFiZWwubGFiZWwtcHVycGxlPi5iYWRnZSxhLmxhYmVsLmxhYmVsLXB1cnBsZT4uYmFkZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHIt''@;'; put 'put ''YmFkZ2UtcHVycGxlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtcHVycGxlLWNvbG9yKX0ubGFiZWwubGFiZWwtYmx1ZSwubGFiZWwubGFiZWwtMyxhLmxhYmVsLmxhYmVsLWJsdWUsYS5sYWJlbC5sYWJlbC0ze2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdpZHRoKSBz''@;'; put 'put ''b2xpZCB2YXIoLS1jbHItbGFiZWwtYmx1ZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWxhYmVsLWJsdWUtYmctY29sb3IpfS5sYWJlbC5sYWJlbC1ibHVlPi5iYWRnZSxhLmxhYmVsLmxhYmVsLWJsdWU+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdl''@;'; put 'put ''LWJsdWUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1ibHVlLWNvbG9yKX0ubGFiZWwubGFiZWwtb3JhbmdlLC5sYWJlbC5sYWJlbC00LGEubGFiZWwubGFiZWwtb3JhbmdlLGEubGFiZWwubGFiZWwtNHtib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29saWQg''@;'; put 'put ''dmFyKC0tY2xyLWxhYmVsLW9yYW5nZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWxhYmVsLW9yYW5nZS1iZy1jb2xvcil9LmxhYmVsLmxhYmVsLW9yYW5nZT4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1vcmFuZ2U+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWJh''@;'; put 'put ''ZGdlLW9yYW5nZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLW9yYW5nZS1jb2xvcil9LmxhYmVsLmxhYmVsLWxpZ2h0LWJsdWUsLmxhYmVsLmxhYmVsLTUsYS5sYWJlbC5sYWJlbC1saWdodC1ibHVlLGEubGFiZWwubGFiZWwtNXtib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRl''@;'; put 'put ''ci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLWxpZ2h0LWJsdWUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1sYWJlbC1saWdodC1ibHVlLWJnLWNvbG9yKX0ubGFiZWwubGFiZWwtbGlnaHQtYmx1ZT4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1saWdodC1ibHVl''@;'; put 'put ''Pi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1saWdodC1ibHVlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtbGlnaHQtYmx1ZS1jb2xvcil9LmxhYmVsLmxhYmVsLWluZm8sYS5sYWJlbC5sYWJlbC1pbmZve2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWluZm8t''@;'; put 'put ''YmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1sYWJlbC1pbmZvLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtaW5mby1ib3JkZXItY29sb3IpfS5sYWJlbC5sYWJlbC1pbmZvPi5iYWRnZSxhLmxhYmVsLmxhYmVs''@;'; put 'put ''LWluZm8+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWluZm8tYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1pbmZvLWNvbG9yKX0ubGFiZWwubGFiZWwtc3VjY2VzcyxhLmxhYmVsLmxhYmVsLXN1Y2Nlc3N7YmFja2dyb3VuZDp2YXIoLS1jbHItbGFiZWwtc3VjY2Vz''@;'; put 'put ''cy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLXN1Y2Nlc3MtZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNsci1sYWJlbC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1sYWJlbC1zdWNjZXNzLWJvcmRlci1jb2xvcil9LmxhYmVsLmxhYmVsLXN1Y2Nlc3M+LmJhZGdlLGEu''@;'; put 'put ''bGFiZWwubGFiZWwtc3VjY2Vzcz4uYmFkZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utc3VjY2Vzcy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXN1Y2Nlc3MtY29sb3IpfS5sYWJlbC5sYWJlbC13YXJuaW5nLGEubGFiZWwubGFiZWwtd2FybmluZ3tiYWNrZ3JvdW5kOnZh''@;'; put 'put ''cigtLWNsci1sYWJlbC13YXJuaW5nLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItbGFiZWwtd2FybmluZy1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLXdhcm5pbmctYm9yZGVyLWNvbG9yKX0ubGFiZWwubGFi''@;'; put 'put ''ZWwtd2FybmluZz4uYmFkZ2UsYS5sYWJlbC5sYWJlbC13YXJuaW5nPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS13YXJuaW5nLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2Utd2FybmluZy1jb2xvcil9LmxhYmVsLmxhYmVsLWRhbmdlcixhLmxhYmVsLmxhYmVsLWRh''@;'; put 'put ''bmdlcntiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJlbC1kYW5nZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1sYWJlbC1kYW5nZXItZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNsci1sYWJlbC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1sYWJlbC1kYW5nZXItYm9yZGVyLWNv''@;'; put 'put ''bG9yKX0ubGFiZWwubGFiZWwtZGFuZ2VyPi5iYWRnZSxhLmxhYmVsLmxhYmVsLWRhbmdlcj4uYmFkZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtZGFuZ2VyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtZGFuZ2VyLWNvbG9yKX0ubGFiZWw+LmJhZGdlLGEubGFiZWw+LmJh''@;'; put 'put ''ZGdle21hcmdpbjowfS5sYWJlbC5kaXNhYmxlZCwubGFiZWw6ZGlzYWJsZWQsYS5sYWJlbC5kaXNhYmxlZCxhLmxhYmVsOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZDtwb2ludGVyLWV2ZW50czpub25lO2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWJnLWRpc2FibGVkLWNvbG9yKTtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItbGFiZWwtZGlzYWJsZWQtY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItbGFiZWwtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0ubGFiZWwuZGlzYWJsZWQgLmJhZGdlLC5sYWJlbDpkaXNhYmxlZCAuYmFkZ2UsYS5sYWJlbC5kaXNhYmxlZCAuYmFkZ2UsYS5sYWJl''@;'; put 'put ''bDpkaXNhYmxlZCAuYmFkZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItbGFiZWwtZGlzYWJsZWQtY29sb3IpfUAtbW96LWRvY3VtZW50IHVybC1wcmVmaXgoKXsubGFiZWwsYS5sYWJlbHt2ZXJ0aWNhbC1hbGlnbjpib3R0b219fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLXByb2dyZXNzLWRlZmF1''@;'; put 'put ''bHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMTp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXNoYWRlKTstLWNs''@;'; put 'put ''ci1wcm9ncmVzcy1hbHQtY29sb3ItMzp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmcpOy0tY2xyLXByb2dyZXNzLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtc2hhZGUpOy0tY2xyLXByb2dyZXNzLWxhYmVsLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCl9LnByb2dyZXNzLC5wcm9ncmVzcy1zdGF0aWN7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjA7Zm9udC1zaXplOmluaGVyaXQ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7bWFyZ2luOjA7b3Zl''@;'; put 'put ''cmZsb3c6aGlkZGVuO21heC1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlfS5wcm9ncmVzcz5wcm9ncmVzc3std2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVh''@;'; put 'put ''cmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZTtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtZGVmYXVsdC1jb2xvcik7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvcik7Ym9yZGVyOjA7aGVpZ2h0''@;'; put 'put ''OjEwMCU7d2lkdGg6MTAwJX0ucHJvZ3Jlc3M+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtZGVmYXVsdC1jb2xvcil9LnByb2dyZXNzPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1wcm9ncmVzcy1kZWZhdWx0LWNvbG9yKX0ucHJvZ3Jlc3M+cHJvZ3Jlc3NbdmFsdWU9IjAiXTo6LW1vei1wcm9ncmVzcy1iYXJ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5v''@;'; put 'put ''bmU7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWJnLWNvbG9yKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9LnByb2dyZXNzPnByb2dyZXNzW3ZhbHVlPSIwIl06Oi13ZWJraXQt''@;'; put 'put ''cHJvZ3Jlc3MtdmFsdWV7LXdlYmtpdC10cmFuc2l0aW9uOm5vbmU7dHJhbnNpdGlvbjpub25lfS5wcm9ncmVzcz5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy1iYXJ7Ym9yZGVyLXJhZGl1czowO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWJnLWNvbG9yKX0ucHJvZ3Jl''@;'; put 'put ''c3M+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtaW5uZXItZWxlbWVudHstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZX0ucHJvZ3Jlc3M+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3Mt''@;'; put 'put ''dmFsdWV7LXdlYmtpdC10cmFuc2l0aW9uOndpZHRoIC4yM3MgZWFzZS1pbjt0cmFuc2l0aW9uOndpZHRoIC4yM3MgZWFzZS1pbjtib3JkZXItcmFkaXVzOjB9LnByb2dyZXNzLnN1Y2Nlc3M+cHJvZ3Jlc3N7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0xKX0ucHJvZ3Jlc3Mu''@;'; put 'put ''c3VjY2Vzcz5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSl9LnByb2dyZXNzLnN1Y2Nlc3M+cHJvZ3Jlc3M6Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXBy''@;'; put 'put ''b2dyZXNzLWFsdC1jb2xvci0xKX0ucHJvZ3Jlc3Mud2FybmluZz5wcm9ncmVzc3tjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTMpfS5wcm9ncmVzcy53YXJuaW5nPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXBy''@;'; put 'put ''b2dyZXNzLWFsdC1jb2xvci0zKX0ucHJvZ3Jlc3Mud2FybmluZz5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTMpfS5wcm9ncmVzcy5kYW5nZXI+cHJvZ3Jlc3N7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNz''@;'; put 'put ''LWFsdC1jb2xvci0yKX0ucHJvZ3Jlc3MuZGFuZ2VyPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yKX0ucHJvZ3Jlc3MuZGFuZ2VyPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcntiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LnByb2dyZXNzLmxhYmVsZWQsLnByb2dyZXNzLXN0YXRpYy5sYWJlbGVke3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmctcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7Y29sb3I6dmFyKC0tY2xyLXByb2dy''@;'; put 'put ''ZXNzLWxhYmVsLWNvbG9yKX0ucHJvZ3Jlc3MubGFiZWxlZD5zcGFuLC5wcm9ncmVzcy1zdGF0aWMubGFiZWxlZD5zcGFue2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDttYXJnaW4tdG9wOjA7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRp''@;'; put 'put ''b24tbGV0dGVyLXNwYWNpbmcpfS5wcm9ncmVzcy5jb21wYWN0Om5vdCgubGFiZWxlZCksLnByb2dyZXNzLXN0YXRpYy5jb21wYWN0Om5vdCgubGFiZWxlZCl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LnByb2dyZXNzLmNvbXBhY3QubGFiZWxlZD4ucHJvZ3Jlc3MtbWV0ZXIs''@;'; put 'put ''LnByb2dyZXNzLXN0YXRpYy5jb21wYWN0LmxhYmVsZWQ+LnByb2dyZXNzLW1ldGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfUBrZXlmcmFtZXMgY2xyLXByb2dyZXNzLWZhZGV7MCV7b3BhY2l0eToxfXRve29wYWNpdHk6''@;'; put 'put ''MH19LnByb2dyZXNzLnByb2dyZXNzLWZhZGU+cHJvZ3Jlc3NbdmFsdWU9IjEwMCJdLC5wcm9ncmVzcy5wcm9ncmVzcy1mYWRlPnByb2dyZXNzW3ZhbHVlPSIxMDAiXStzcGFue2FuaW1hdGlvbjpjbHItcHJvZ3Jlc3MtZmFkZSAuM3MgbGluZWFyIC41cyBmb3J3YXJkc30ucHJvZ3Jlc3MuZmxh''@;'; put 'put ''c2gtZGFuZ2VyPnByb2dyZXNzLC5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzc3t0cmFuc2l0aW9uOmNvbG9yIC4xcyBlYXNlLW91dCAxc30ucHJvZ3Jlc3MuZmxhc2gtZGFuZ2VyPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVlLC5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzczo6LXdlYmtp''@;'; put 'put ''dC1wcm9ncmVzcy12YWx1ZXstd2Via2l0LXRyYW5zaXRpb246d2lkdGggLjIzcyBlYXNlLWluLGJhY2tncm91bmQtY29sb3IgLjFzIGVhc2Utb3V0IC4zczt0cmFuc2l0aW9uOndpZHRoIC4yM3MgZWFzZS1pbixiYWNrZ3JvdW5kLWNvbG9yIC4xcyBlYXNlLW91dCAuM3N9LnByb2dyZXNzLmZs''@;'; put 'put ''YXNoLWRhbmdlcj5wcm9ncmVzc1t2YWx1ZT0iMCJdOjotd2Via2l0LXByb2dyZXNzLXZhbHVlLC5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMCJdOjotd2Via2l0LXByb2dyZXNzLXZhbHVley13ZWJraXQtdHJhbnNpdGlvbjpub25lO3RyYW5zaXRpb246bm9uZX0ucHJvZ3Jlc3Mu''@;'; put 'put ''Zmxhc2gtZGFuZ2VyPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhciwucHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3M6Oi1tb3otcHJvZ3Jlc3MtYmFyey1tb3otdHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVhc2UtaW4sYmFja2dyb3VuZC1jb2xvciAuMXMgZWFzZS1vdXQgLjNzO3RyYW5zaXRpb246''@;'; put 'put ''d2lkdGggLjIzcyBlYXNlLWluLGJhY2tncm91bmQtY29sb3IgLjFzIGVhc2Utb3V0IC4zc30ucHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3NbdmFsdWU9IjEwMCJde2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSl9LnByb2dyZXNzLmZsYXNoPnByb2dyZXNzW3ZhbHVlPSIxMDAi''@;'; put 'put ''XTo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSl9LnByb2dyZXNzLmZsYXNoPnByb2dyZXNzW3ZhbHVlPSIxMDAiXTo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jl''@;'; put 'put ''c3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy5wcm9ncmVzcy1mYWRlLmZsYXNoPnByb2dyZXNzW3ZhbHVlPSIxMDAiXSwucHJvZ3Jlc3MucHJvZ3Jlc3MtZmFkZS5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMTAwIl0rc3BhbnthbmltYXRpb246Y2xyLXByb2dyZXNzLWZhZGUgLjZzIGxpbmVhciAx''@;'; put 'put ''cyBmb3J3YXJkc30ucHJvZ3Jlc3MuZmxhc2gtZGFuZ2VyPnByb2dyZXNzW3ZhbHVlPSIxMDAiXXtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTIpfS5wcm9ncmVzcy5mbGFzaC1kYW5nZXI+cHJvZ3Jlc3NbdmFsdWU9IjEwMCJdOjotd2Via2l0LXByb2dyZXNzLXZhbHVle2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yKX0ucHJvZ3Jlc3MuZmxhc2gtZGFuZ2VyPnByb2dyZXNzW3ZhbHVlPSIxMDAiXTo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTIpfUBrZXlm''@;'; put 'put ''cmFtZXMgY2xyLXByb2dyZXNzLWxvb3BlcnswJXtsZWZ0Oi0xMDAlfXRve2xlZnQ6MTAwJX19LnByb2dyZXNzLmxvb3B7cG9zaXRpb246cmVsYXRpdmV9LnByb2dyZXNzLmxvb3A+cHJvZ3Jlc3N7b3ZlcmZsb3c6aGlkZGVuO2NvbG9yOnRyYW5zcGFyZW50fS5wcm9ncmVzcy5sb29wPnByb2dy''@;'; put 'put ''ZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVle2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LnByb2dyZXNzLmxvb3A+cHJvZ3Jlc3M6Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LnByb2dyZXNzLmxvb3A6YWZ0ZXJ7YW5pbWF0aW9uOmNsci1w''@;'; put 'put ''cm9ncmVzcy1sb29wZXIgMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7Y29udGVudDoiICI7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtZGVmYXVsdC1jb2xvcik7d2lkdGg6NTAl''@;'; put 'put ''fS5wcm9ncmVzcy5sb29wLmRhbmdlcjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LnByb2dyZXNzLmxvb3Aud2FybmluZzphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMyl9LnByb2dyZXNz''@;'; put 'put ''Lmxvb3Auc3VjY2VzczphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSl9LnByb2dyZXNzLXN0YXRpY3twb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXI6MDt3aWR0aDoxMDAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVye2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWJnLWNvbG9yKTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjB9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29s''@;'; put 'put ''b3IpO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO3dpZHRoOjA7Y29udGVudDoiICJ9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRl''@;'; put 'put ''cltkYXRhLXZhbHVlPSIyIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjMiXTpiZWZvcmV7d2lkdGg6MiV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5w''@;'; put 'put ''cm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjYiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNyJdOmJlZm9yZXt3aWR0aDo1JX0ucHJvZ3Jl''@;'; put 'put ''c3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTAiXTpiZWZvcmUsLnBy''@;'; put 'put ''b2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTIiXTpiZWZvcmV7d2lkdGg6MTAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9''@;'; put 'put ''IjEzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjE0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjE1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEt''@;'; put 'put ''dmFsdWU9IjE2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjE3Il06YmVmb3Jle3dpZHRoOjE1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxOCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9n''@;'; put 'put ''cmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxOSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyMCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyMSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGlj''@;'; put 'put ''Pi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyMiJdOmJlZm9yZXt3aWR0aDoyMCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjQiXTpiZWZvcmUs''@;'; put 'put ''LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjYiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjciXTpi''@;'; put 'put ''ZWZvcmV7d2lkdGg6MjUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2Rh''@;'; put 'put ''dGEtdmFsdWU9IjMwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjMxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjMyIl06YmVmb3Jle3dpZHRoOjMwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5w''@;'; put 'put ''cm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzMyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzNCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzNSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3Rh''@;'; put 'put ''dGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzNiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzNyJdOmJlZm9yZXt3aWR0aDozNSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzgiXTpiZWZv''@;'; put 'put ''cmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDAiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDEi''@;'; put 'put ''XTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDIiXTpiZWZvcmV7d2lkdGg6NDAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVy''@;'; put 'put ''W2RhdGEtdmFsdWU9IjQ0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQ1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQ2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNz''@;'; put 'put ''LW1ldGVyW2RhdGEtdmFsdWU9IjQ3Il06YmVmb3Jle3dpZHRoOjQ1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0OCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0OSJdOmJlZm9yZSwucHJvZ3Jlc3Mt''@;'; put 'put ''c3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1MCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1MSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1MiJdOmJlZm9yZXt3aWR0''@;'; put 'put ''aDo1MCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0i''@;'; put 'put ''NTUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTYiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTciXTpiZWZvcmV7d2lkdGg6NTUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1l''@;'; put 'put ''dGVyW2RhdGEtdmFsdWU9IjU4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjYwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dy''@;'; put 'put ''ZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjYxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjYyIl06YmVmb3Jle3dpZHRoOjYwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MyJdOmJlZm9yZSwucHJvZ3Jl''@;'; put 'put ''c3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2NCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2NSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2NiJdOmJlZm9yZSwu''@;'; put 'put ''cHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2NyJdOmJlZm9yZXt3aWR0aDo2NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1''@;'; put 'put ''ZT0iNjkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNzAiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNzEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0''@;'; put 'put ''YS12YWx1ZT0iNzIiXTpiZWZvcmV7d2lkdGg6NzAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjczIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijc0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnBy''@;'; put 'put ''b2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijc1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijc2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijc3Il06YmVmb3Jle3dpZHRoOjc1JX0ucHJv''@;'; put 'put ''Z3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3OCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3OSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4MCJdOmJlZm9y''@;'; put 'put ''ZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4MSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4MiJdOmJlZm9yZXt3aWR0aDo4MCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12''@;'; put 'put ''YWx1ZT0iODMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJb''@;'; put 'put ''ZGF0YS12YWx1ZT0iODYiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODciXTpiZWZvcmV7d2lkdGg6ODUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+''@;'; put 'put ''LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjkwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjkxIl06YmVmb3JlLC5wcm9ncmVzcy1z''@;'; put 'put ''dGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjkyIl06YmVmb3Jle3dpZHRoOjkwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5NCJdOmJl''@;'; put 'put ''Zm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5NSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5NiJdOmJlZm9yZXt3aWR0aDo5NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0''@;'; put 'put ''YS12YWx1ZT0iOTciXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTkiXTpiZWZvcmV7d2lkdGg6OTglfS5wcm9ncmVzcy1zdGF0aWM+LnBy''@;'; put 'put ''b2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEwMCJdOmJlZm9yZXt3aWR0aDoxMDAlfS5wcm9ncmVzcy1zdGF0aWMubGFiZWxlZD4ucHJvZ3Jlc3MtbWV0ZXJ7cmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSl9LnByb2dyZXNzLXN0YXRpYy5zdWNjZXNzPi5wcm9ncmVzcy1tZXRlcjpi''@;'; put 'put ''ZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy1zdGF0aWMud2FybmluZz4ucHJvZ3Jlc3MtbWV0ZXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0zKX0ucHJvZ3Jlc3Mtc3Rh''@;'; put 'put ''dGljLmRhbmdlcj4ucHJvZ3Jlc3MtbWV0ZXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yKX0uY2FyZC1ibG9jayAucHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLXN0YXRpYywuY2FyZC1mb290ZXIgLnByb2dyZXNzLC5jYXJkLWZv''@;'; put 'put ''b3RlciAucHJvZ3Jlc3Mtc3RhdGlje2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDttYXJnaW46Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKSAwIDB9LmNhcmQtYmxvY2sgLnByb2dyZXNzLnRvcCwuY2FyZC1ibG9jayAu''@;'; put 'put ''cHJvZ3Jlc3Mtc3RhdGljLnRvcCwuY2FyZC1mb290ZXIgLnByb2dyZXNzLnRvcCwuY2FyZC1mb290ZXIgLnByb2dyZXNzLXN0YXRpYy50b3B7bWFyZ2luLXRvcDowO3RvcDowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1cywgdmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCkpO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMsIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApKX0uY2FyZC1ibG9jayAucHJvZ3Jlc3M+cHJvZ3Jlc3MsLmNhcmQt''@;'; put 'put ''YmxvY2sgLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXIsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcz5wcm9ncmVzcywuY2FyZC1mb290ZXIgLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7cG9zaXRpb246YWJzb2x1''@;'; put 'put ''dGV9LnByb2dyZXNzLWJsb2Nre2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1sYWJlbC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29u''@;'; put 'put ''ZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5wcm9ncmVzcy1ibG9jaz4qe2ZsZXg6MCAwIGF1dG87cGFkZGluZy1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5wcm9ncmVzcy1ibG9jaz46bGFzdC1jaGlsZHtwYWRkaW5nLXJpZ2h0OjB9LnByb2dy''@;'; put 'put ''ZXNzLWJsb2NrPmxhYmVsLC5wcm9ncmVzcy1ibG9jaz5zcGFue21heC13aWR0aDozMyV9LnByb2dyZXNzLWJsb2NrPi5wcm9ncmVzcywucHJvZ3Jlc3MtYmxvY2s+LnByb2dyZXNzLXN0YXRpY3tmbGV4OjAgMSBhdXRvfS5wcm9ncmVzcy1ibG9jaz4ucHJvZ3Jlc3MtZ3JvdXB7ZmxleC1kaXJl''@;'; put 'put ''Y3Rpb246Y29sdW1uO2hlaWdodDphdXRvO2ZsZXg6MCAxIGF1dG87ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCV9LnByb2dyZXNzLWJsb2NrPi5wcm9ncmVzcy1ncm91cCAuY2xyLXJvd3ttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1sYWJlbC1j''@;'; put 'put ''b2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0''@;'; put 'put ''aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKX0ucHJvZ3Jlc3MtYmxvY2s+LnByb2dyZXNzLWdyb3VwIC5jbHItcm93PltjbGFzcyo9Y2xyLWNvbC1de3BhZGRpbmctbGVmdDowO3BhZGRpbmct''@;'; put 'put ''cmlnaHQ6MH0uY2FyZC1ibG9jayAucHJvZ3Jlc3MtYmxvY2t7bWFyZ2luLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3BhZGRpbmc6MH0uY2FyZC1ibG9jayAucHJvZ3Jlc3MtYmxvY2s6bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LmNhcmQtYmxvY2sgLnByb2dyZXNzLWJs''@;'; put 'put ''b2NrPmxhYmVse21heC13aWR0aDozMyV9LmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcywuY2FyZC1ibG9jayAucHJvZ3Jlc3MtYmxvY2sgLnByb2dyZXNzLXN0YXRpY3twb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTttYXJnaW4t''@;'; put 'put ''dG9wOjB9LmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcz5wcm9ncmVzcywuY2FyZC1ibG9jayAucHJvZ3Jlc3MtYmxvY2sgLnByb2dyZXNzPi5wcm9ncmVzcy1tZXRlciwuY2FyZC1ibG9jayAucHJvZ3Jlc3MtYmxvY2sgLnByb2dyZXNzLXN0YXRpYz5wcm9ncmVzcywuY2Fy''@;'; put 'put ''ZC1ibG9jayAucHJvZ3Jlc3MtYmxvY2sgLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9XzotbXMtaW5wdXQtcGxhY2Vob2xkZXIgLnByb2dyZXNzLWJsb2NrPmxhYmVsLDpyb290IC5wcm9ncmVzcy1ibG9jaz5sYWJlbHtk''@;'; put 'put ''aXNwbGF5OmlubGluZS1ibG9ja306cm9vdCBbY2RzLXRoZW1lXXstLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTE0KTstLWNsci1zcGlubmVyLW1lZGl1bS1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpOy0tY2xyLXNwaW5uZXItc21hbGwt''@;'; put 'put ''c2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpOy0tY2xyLXNwaW5uZXItaW5zaWRlLWJ1dHRvbi1zdHJva2Utd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTstLWNsci1zcGlubmVyLWluc2lkZS10cmVldmlldy1zdHJva2Utd2lkdGg6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTstLWNsci1zcGlubmVyLWRlZmF1bHQtc3Ryb2tlLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7LS1jbHItc3Bpbm5lci1tZWRpdW0tc3Ryb2tlLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTQw''@;'; put 'put ''MCk7LS1jbHItc3Bpbm5lci1zbWFsbC1zdHJva2Utd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMjAwKTstLWNsci1zcGlubmVyLWZpbGwtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1zaGFkZSk7LS1jbHItc3Bp''@;'; put 'put ''bm5lci1maWxsLWludmVyc2UtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1pbnZlcnNlLXRpbnQpOy0tY2xyLXNwaW5uZXItZmlsbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLXNwaW5uZXItZmlsbC1pbnZlcnNl''@;'; put 'put ''LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mby10aW50KTstLWNsci1zcGlubmVyLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTMwMCk7LS1jbHItc3Bpbm5lci1tYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0u''@;'; put 'put ''c3Bpbm5lcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTt3aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1kZWZhdWx0LXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXpl''@;'; put 'put ''KTttaW4td2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTts''@;'; put 'put ''aW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7YW5pbWF0aW9uOnNwaW4gMXMgbGluZWFyIGluZmluaXRlO21h''@;'; put 'put ''cmdpbi1yaWdodDowO3BhZGRpbmc6MDt0ZXh0LWluZGVudDoxMDAlO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9LnNwaW5uZXI6YWZ0ZXJ7Y29udGVudDoiIjtoZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTt3aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1k''@;'; put 'put ''ZWZhdWx0LXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7Y2xpcC1wYXRoOmVsbGlwc2UoMTAwJSA1My41JSBhdCAwIDAp''@;'; put 'put ''O2JvcmRlcjp2YXIoLS1jbHItc3Bpbm5lci1kZWZhdWx0LXN0cm9rZS13aWR0aCkgc29saWQgdmFyKC0tY2xyLXNwaW5uZXItZmlsbC1jb2xvcik7Ym9yZGVyLXJpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b20tY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czp2YXIo''@;'; put 'put ''LS1jbHItc3Bpbm5lci1ib3JkZXItcmFkaXVzKX0uc3Bpbm5lcjpiZWZvcmV7Y29udGVudDoiIjtoZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTt3aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1kZWZhdWx0LXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItZGVm''@;'; put 'put ''YXVsdC1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7Ym9yZGVyOnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc3Ryb2tlLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItc3Bpbm5lci1maWxsLWJnLWNv''@;'; put 'put ''bG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1zcGlubmVyLWJvcmRlci1yYWRpdXMpfS5zcGlubmVyLnNwaW5uZXItbWR7aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLW1lZGl1bS1zaXplKTt3aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZSk7bWluLWhlaWdodDp2YXIoLS1j''@;'; put 'put ''bHItc3Bpbm5lci1tZWRpdW0tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLW1lZGl1bS1zaXplKX0uc3Bpbm5lci5zcGlubmVyLW1kOmJlZm9yZSwuc3Bpbm5lci5zcGlubmVyLW1kOmFmdGVye2hlaWdodDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZSk7d2lkdGg6dmFy''@;'; put 'put ''KC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO21pbi13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZSk7Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLW1lZGl1bS1zdHJva2Utd2lkdGgpfS5z''@;'; put 'put ''cGlubmVyLnNwaW5uZXItaW5saW5lLC5zcGlubmVyLnNwaW5uZXItc217aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLXNtYWxsLXNpemUpO3dpZHRoOnZhcigtLWNsci1zcGlubmVyLXNtYWxsLXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItc21hbGwtc2l6ZSk7bWluLXdpZHRo''@;'; put 'put ''OnZhcigtLWNsci1zcGlubmVyLXNtYWxsLXNpemUpfS5zcGlubmVyLnNwaW5uZXItaW5saW5lOmJlZm9yZSwuc3Bpbm5lci5zcGlubmVyLWlubGluZTphZnRlciwuc3Bpbm5lci5zcGlubmVyLXNtOmJlZm9yZSwuc3Bpbm5lci5zcGlubmVyLXNtOmFmdGVye2hlaWdodDp2YXIoLS1jbHItc3Bp''@;'; put 'put ''bm5lci1zbWFsbC1zaXplKTt3aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLXNtYWxsLXNpemUpO21pbi13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLXNwaW5uZXIt''@;'; put 'put ''c21hbGwtc3Ryb2tlLXdpZHRoKX0uc3Bpbm5lci5zcGlubmVyLWlubGluZXt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbTttYXJnaW4tcmlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItbWFyZ2luLXJpZ2h0KX0uc3Bpbm5lci5zcGlubmVyLWludmVyc2U6YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItc3Bpbm5lci1maWxsLWludmVyc2UtYmctY29sb3IpfS5zcGlubmVyLnNwaW5uZXItaW52ZXJzZTphZnRlcntib3JkZXItY29sb3I6dmFyKC0tY2xyLXNwaW5uZXItZmlsbC1pbnZlcnNlLWNvbG9yKTtib3JkZXItcmlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbS1j''@;'; put 'put ''b2xvcjp0cmFuc3BhcmVudH0uc3Bpbm5lci5zcGlubmVyLW5ldXRyYWwtMDpiZWZvcmV7Ym9yZGVyLWNvbG9yOiMwMDB9LnNwaW5uZXIuc3Bpbm5lci1uZXV0cmFsLTA6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1zcGlubmVyLWZpbGwtY29sb3IpO2JvcmRlci1yaWdodC1jb2xvcjp0''@;'; put 'put ''cmFuc3BhcmVudDtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50fS5zcGlubmVyLnNwaW5uZXItY2hlY2t7YW5pbWF0aW9uOm5vbmU7LXdlYmtpdC1tYXNrOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB2aWV3''@;'; put 'put ''Qm94JTNEJTIyMCUyMDAlMjAzNiUyMDM2JTIyJTIwcHJlc2VydmVBc3BlY3RSYXRpbyUzRCUyMnhNaWRZTWlkJTIwbWVldCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIweG1sbnMlM0F4bGluayUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cu''@;'; put 'put ''dzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTIwZm9jdXNhYmxlJTNEJTIyZmFsc2UlMjIlMjBhcmlhLWhpZGRlbiUzRCUyMnRydWUlMjIlMjByb2xlJTNEJTIyaW1nJTIyJTNFJTNDcGF0aCUyMGZpbGwlM0QlMjIlMjM3NDc0NzQlMjIlMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSUyMiUyMGQlM0QlMjJNMTMuNzIlMkMyNy42OSUyQzMuMjklMkMxNy4yN2ExJTJDMSUyQzAlMkMwJTJDMSUyQzEuNDEtMS40MWw5JTJDOUwzMS4yOSUyQzcuMjlhMSUyQzElMkMwJTJDMCUyQzElMkMxLjQxJTJDMS40MVolMjIlM0UlM0MlMkZwYXRoJTNFJTNDJTJG''@;'; put 'put ''c3ZnJTNFKTttYXNrOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAzNiUyMDM2JTIyJTIwcHJlc2VydmVBc3BlY3RSYXRpbyUzRCUyMnhNaWRZTWlkJTIwbWVldCUyMiUyMHhtbG5z''@;'; put 'put ''JTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIweG1sbnMlM0F4bGluayUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTIwZm9jdXNhYmxlJTNEJTIyZmFsc2UlMjIlMjBhcmlhLWhpZGRlbiUzRCUyMnRydWUlMjIlMjBy''@;'; put 'put ''b2xlJTNEJTIyaW1nJTIyJTNFJTNDcGF0aCUyMGZpbGwlM0QlMjIlMjM3NDc0NzQlMjIlMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMSUyMiUyMGQlM0QlMjJNMTMuNzIlMkMyNy42OSUyQzMuMjklMkMxNy4yN2ExJTJDMSUyQzAlMkMwJTJDMSUyQzEu''@;'; put 'put ''NDEtMS40MWw5JTJDOUwzMS4yOSUyQzcuMjlhMSUyQzElMkMwJTJDMCUyQzElMkMxLjQxJTJDMS40MVolMjIlM0UlM0MlMkZwYXRoJTNFJTNDJTJGc3ZnJTNFKTstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcil9LnNwaW5uZXIuc3Bpbm5lci1jaGVjazphZnRlciwuc3Bpbm5lci5zcGlubmVyLWNoZWNrOmJlZm9yZXtib3JkZXI6MH0uYnRuIC5zcGlubmVye21hcmdpbi1yaWdodDowO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dp''@;'; put 'put ''ZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5idG4gLnNwaW5uZXI6YmVmb3JlLC5idG4gLnNwaW5uZXI6YWZ0ZXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLWluc2lkZS1idXR0b24tc3Ry''@;'; put 'put ''b2tlLXdpZHRoKX0uYnRuLWljb246bm90KC5idG4tc20pIC5zcGlubmVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi13aWR0aDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTcpfS5jbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXIgLnNwaW5uZXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdp''@;'; put 'put ''ZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lciAuc3Bpbm5lcjpiZWZvcmUsLmNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lciAuc3Bpbm5lcjphZnRlcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItaW5zaWRlLXRyZWV2aWV3LXN0cm9rZS13aWR0aCl9QGtleWZy''@;'; put 'put ''YW1lcyBzcGluezAle3RyYW5zZm9ybTpyb3RhdGUoMCl9dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci10YWJsZS1ib3JkZXJ3aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApOy0tY2xyLXRhYmxlLWJvcmRlci1y''@;'; put 'put ''YWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci10YWJsZS1jZWxsLXBhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLXRhYmxlLWNlbGwtY29tcGFjdC1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci10YWJsZS1ub2JvcmRlci1ib3JkZXJ3aWR0aDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTApOy0tY2xyLXRhYmxlLWRhdGEtY2VsbC1mb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS00KTstLWNsci10YWJsZS1kYXRhLWNlbGwtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci10YWJsZS1kYXRhLWNlbGwt''@;'; put 'put ''Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXJlZ3VsYXIpOy0tY2xyLXRhYmxlLWhlYWRlci1jZWxsLWZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTEpOy0tY2xyLXRhYmxlLWhlYWRlci1jZWxsLWxpbmUt''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItdGFibGUtaGVhZGVyLWNlbGwtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci10YWJsZS1iZ2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29u''@;'; put 'put ''dGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLXRoZWFkLWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC10aW50KTstLWNsci10YWJsZS1oZWFkZXItYm9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7''@;'; put 'put ''LS1jbHItdGFibGUtZm9vdGVyLWJvcmRlci10b3AtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdGFibGVyb3ctYm9yZGVyY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLXRhYmxlLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci10YWJsZS1tYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSAwIDAgMDstLWNsci10aGVhZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXRhYmxlLXNtYWxscGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpOy0tY2xyLXRhYmxlLWJvdHRvbWNlbGxwYWRkaW5nOmNhbGModmFyKC0tY2xyLXRhYmxlLWNlbGxwYWRkaW5nKSAtIHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMSkpOy0tY2xyLXRhYmxlLXRvcGNlbGxwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItdGFibGUtZm9udHNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7LS1jbHItdGFibGUtbGluZWhlaWdodDptaXhp''@;'; put 'put ''bnMuYmFzZWxpbmVQeCgxNCk7LS1jbHItdGFibGUtY2VsbHBhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTstLWNsci10YWJsZS1jb21wYWN0LXJvdy1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci10YWJsZS1jb21wYWN0LXZlcnRpY2FsLXBhZGRpbmc6Y2Fs''@;'; put 'put ''YyggKHZhcigtLWNsci10YWJsZS1jb21wYWN0LXJvdy1oZWlnaHQpIC0gdmFyKC0tY2xyLXRhYmxlLWxpbmVoZWlnaHQpKSAqIC41ICl9LnRhYmxle2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXI6dmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoKSBzb2xpZCB2YXIoLS1jbHItdGFi''@;'; put 'put ''bGUtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci10YWJsZS1ib3JkZXItcmFkaXVzKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10YWJsZS1iZ2NvbG9yKTtjb2xvcjp2YXIoLS1jbHItdGFibGUtZm9udC1jb2xvcik7bWFyZ2luOnZhcigtLWNsci10YWJsZS1tYXJn''@;'; put 'put ''aW4pO21heC13aWR0aDoxMDAlO3dpZHRoOjEwMCV9LnRhYmxlIHRoLC50YWJsZSB0ZHtib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6dmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoKTtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci10YWJsZXJvdy1ib3JkZXJjb2xv''@;'; put 'put ''cik7cGFkZGluZzp2YXIoLS1jbHItdGFibGUtY2VsbC1wYWRkaW5nKTt0ZXh0LWFsaWduOmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjp0b3B9LnRhYmxlIHRoLmxlZnQsLnRhYmxlIHRkLmxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50YWJsZSB0aC5sZWZ0OmZpcnN0LWNoaWxkLC50YWJsZSB0ZC5sZWZ0''@;'; put 'put ''OmZpcnN0LWNoaWxke3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS50YWJsZSB0aC5yaWdodCwudGFibGUgdGQucmlnaHR7dGV4dC1hbGlnbjpyaWdodH0udGFibGUgdGR7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtmb250LXNpemU6dmFyKC0t''@;'; put 'put ''Y2xyLXRhYmxlLWRhdGEtY2VsbC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci10YWJsZS1kYXRhLWNlbGwtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci10YWJsZS1kYXRhLWNlbGwtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyl9LnRhYmxlIHRoe2NvbG9yOnZhcigtLWNsci10aGVhZC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItdGhlYWQtYmdjb2xvcik7dmVydGljYWwtYWxpZ246bWlkZGxlO2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJv''@;'; put 'put ''cmRlci1jb2xvcik7Ym9yZGVyLXRvcDowIG5vbmV9LnRhYmxlIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3A6MCBub25lfS50YWJsZSB0Ym9keSt0Ym9keXtib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6dmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRo''@;'; put 'put ''KTtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS50YWJsZSB0aGVhZCB0aDpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cyl9LnRhYmxlIHRoZWFkIHRo''@;'; put 'put ''Omxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItYm90''@;'; put 'put ''dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3Ju''@;'; put 'put ''ZXJjZWxscmFkaXVzKX0udGFibGUtY29tcGFjdCB0aCwudGFibGUtY29tcGFjdCB0ZHttaW4taGVpZ2h0OnZhcigtLWNsci10YWJsZS1jb21wYWN0LXJvdy1oZWlnaHQpO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLWNlbGwtY29tcGFjdC1wYWRkaW5nKX0udGFibGUudGFibGUtdmVydGljYWwg''@;'; put 'put ''dGhlYWQgdGh7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2Rpc3BsYXk6bm9uZX0udGFibGUudGFibGUtdmVydGljYWwgdGh7Ym9yZGVyLWJvdHRvbTowO2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci10''@;'; put 'put ''b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7dmVydGljYWwtYWxpZ246dG9wfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0ZCwudGFibGUudGFibGUtdmVydGljYWwgdGh7dGV4dC1hbGlnbjpsZWZ0O2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9y''@;'; put 'put ''KX0udGFibGUudGFibGUtdmVydGljYWwgdGQ6Zmlyc3QtY2hpbGQsLnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRoOmZpcnN0LWNoaWxke2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtd2lkdGg6dmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoKTtib3JkZXItcmlnaHQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGhlYWQtYmdjb2xvcik7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKX0udGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6''@;'; put 'put ''Zmlyc3Qtb2YtdHlwZSB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6Zmlyc3Qtb2YtdHlwZSB0cjpmaXJzdC1jaGlsZCB0ZHtib3JkZXItdG9wOjAgbm9uZX0udGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6Zmlyc3Qtb2YtdHlwZSB0cjpmaXJzdC1jaGls''@;'; put 'put ''ZCB0aDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6Zmlyc3Qtb2YtdHlwZSB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cyl9LnRh''@;'; put 'put ''YmxlLnRhYmxlLXZlcnRpY2FsIHRib2R5OmZpcnN0LW9mLXR5cGUgdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwudGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6Zmlyc3Qtb2YtdHlwZSB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9w''@;'; put 'put ''LXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cyl9LnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNo''@;'; put 'put ''aWxkIHRkOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsLnRh''@;'; put 'put ''YmxlLnRhYmxlLXZlcnRpY2FsIHRib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cyl9LnRhYmxlLnRhYmxlLW5vYm9yZGVye2Jv''@;'; put 'put ''cmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItd2lkdGg6MH0udGFibGUudGFibGUtbm9ib3JkZXIgdGh7Ym9yZGVyLWJvdHRvbS1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItdG9wOjAgbm9uZX0udGFibGUudGFibGUtbm9i''@;'; put 'put ''b3JkZXIgdGg6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0OjAgbm9uZX0udGFibGUudGFibGUtbm9ib3JkZXIgdGR7Ym9yZGVyLXRvcDowIG5vbmU7cGFkZGluZy10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0udGFibGUudGFibGUtbm9ib3JkZXIgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVy''@;'; put 'put ''LXJpZ2h0OjAgbm9uZX0udGFibGUudGFibGUtbm9ib3JkZXIgdGhlYWQgdGg6Zmlyc3QtY2hpbGQsLnRhYmxlLnRhYmxlLW5vYm9yZGVyIHRoZWFkIHRoOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowfS50YWJsZS50YWJsZS1ub2JvcmRlciB0aCwudGFibGUudGFibGUtbm9ib3JkZXIgdGR7''@;'; put 'put ''Ym9yZGVyLXJhZGl1czowIWltcG9ydGFudH0udGFibGUudGFibGUtbm9ib3JkZXIgdGg6Zmlyc3QtY2hpbGQsLnRhYmxlLnRhYmxlLW5vYm9yZGVyIHRkOmZpcnN0LWNoaWxke3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLXRv''@;'; put 'put ''b2x0aXAtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItdG9vbHRpcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLXRvb2x0aXAtYm9yZGVyLXJhZGl1czp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci10b29sdGlwLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KX0udG9vbHRpcHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWdu''@;'; put 'put ''OmxlZnQ7b3ZlcmZsb3c6dmlzaWJsZX0udG9vbHRpcD4udG9vbHRpcC1jb250ZW50e3Zpc2liaWxpdHk6aGlkZGVuO29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGxpbmVhcjt3aGl0ZS1zcGFjZTpub3JtYWw7ei1pbmRleDoxMDUwfS50b29sdGlwPi50b29sdGlwLWNvbnRlbnQ6''@;'; put 'put ''YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6LTIwcHg7Y29udGVudDoiIjt6LWluZGV4Oi0xfS50b29sdGlwPi50b29sdGlwLWNvbnRlbnQgbGl7Y29sb3I6aW5oZXJpdH0udG9vbHRpcDpob3Zlcj4udG9vbHRpcC1jb250ZW50LC50b29sdGlwOmZvY3VzPi50b29sdGlwLWNvbnRlbnR7''@;'; put 'put ''dmlzaWJpbGl0eTp2aXNpYmxlO29wYWNpdHk6MX0udG9vbHRpcDpob3Zlcj4udG9vbHRpcC1jb250ZW50OmVtcHR5LC50b29sdGlwOmZvY3VzPi50b29sdGlwLWNvbnRlbnQ6ZW1wdHl7dmlzaWJpbGl0eTpoaWRkZW47b3BhY2l0eTowfS50b29sdGlwOmZvY3Vze291dGxpbmU6MH0udG9vbHRp''@;'; put 'put ''cDpmb2N1cz46Zmlyc3QtY2hpbGR7b3V0bGluZS1vZmZzZXQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLW9mZnNldCk7b3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpfS50b29sdGlwPi50b29sdGlwLWNvbnRlbnQs''@;'; put 'put ''LnRvb2x0aXAudG9vbHRpcC10b3AtcmlnaHQ+LnRvb2x0aXAtY29udGVudCwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtdG9wLXJpZ2h0e21hcmdpbjowO3dpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtib3JkZXItcmFkaXVzOnZhcigtLWNs''@;'; put 'put ''ci10b29sdGlwLWJvcmRlci1yYWRpdXMpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtjb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci10b29sdGlwLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVy''@;'; put 'put ''LXNwYWNpbmcpO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OmF1dG8gYXV0byAxMDAlIDUwJTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7bWFyZ2luLWJvdHRvbTpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKX0udG9vbHRpcD4u''@;'; put 'put ''dG9vbHRpcC1jb250ZW50OmJlZm9yZSwudG9vbHRpcC50b29sdGlwLXRvcC1yaWdodD4udG9vbHRpcC1jb250ZW50OmJlZm9yZSwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtdG9wLXJpZ2h0OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZl''@;'; put 'put ''bnRzOm5vbmU7bGVmdDowO3RvcDphdXRvO3JpZ2h0OmF1dG87Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSk7Ym9yZGVyLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXIt''@;'; put 'put ''dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTUpIHNvbGlkIHRyYW5zcGFyZW50fS50b29sdGlwLnRvb2x0aXAtdG9wLWxlZnQ+LnRvb2x0aXAtY29udGVudCwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtdG9wLWxlZnR7bWFyZ2luOjA7d2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2Jv''@;'; put 'put ''cmRlci1yYWRpdXM6dmFyKC0tY2xyLXRvb2x0aXAtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2NvbG9yOnZhcigtLWNsci10b29sdGlwLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2Zv''@;'; put 'put ''bnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6YXV0byA1MCUgMTAwJSBhdXRvO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7bWFyZ2luLWJvdHRvbTpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgKyB2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTUpKX0udG9vbHRpcC50b29sdGlwLXRvcC1sZWZ0Pi50b29sdGlwLWNvbnRlbnQ6YmVmb3JlLC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtbGVmdDpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO3JpZ2h0''@;'; put 'put ''OjA7dG9wOmF1dG87bGVmdDphdXRvO2JvdHRvbTpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikpO2JvcmRlci1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci10b3A6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFu''@;'; put 'put ''c3BhcmVudH0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1yaWdodD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tcmlnaHR7bWFyZ2luOjA7d2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JvcmRlci1y''@;'; put 'put ''YWRpdXM6dmFyKC0tY2xyLXRvb2x0aXAtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2NvbG9yOnZhcigtLWNsci10b29sdGlwLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2ZvbnQtc2l6''@;'; put 'put ''ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktYm9keS1sZXR0ZXItc3BhY2luZyk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MTAwJSBhdXRvIGF1dG8gNTAlO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDttYXJnaW4tdG9wOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS50''@;'; put 'put ''b29sdGlwLnRvb2x0aXAtYm90dG9tLXJpZ2h0Pi50b29sdGlwLWNvbnRlbnQ6YmVmb3JlLC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtsZWZ0OjA7Ym90''@;'; put 'put ''dG9tOmF1dG87cmlnaHQ6YXV0bzt0b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtib3JkZXItbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJl''@;'; put 'put ''bnR9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdHttYXJnaW46MDt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7Ym9yZGVyLXJhZGl1czp2''@;'; put 'put ''YXIoLS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Y29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Zm9udC1zaXplOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5''@;'; put 'put ''LWxldHRlci1zcGFjaW5nKTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDoxMDAlIDUwJSBhdXRvIGF1dG87Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDttYXJnaW4tdG9wOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS50b29sdGlw''@;'; put 'put ''LnRvb2x0aXAtYm90dG9tLWxlZnQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7cmlnaHQ6MDtib3R0b206YXV0''@;'; put 'put ''bztsZWZ0OmF1dG87dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSk7Ym9yZGVyLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50fS50b29s''@;'; put 'put ''dGlwLnRvb2x0aXAtcmlnaHQ+LnRvb2x0aXAtY29udGVudCwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtcmlnaHR7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6NTAlIGF1dG8gYXV0byAxMDAlO21hcmdpbjowO3dpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''YmFzZSkpKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci10b29sdGlwLWJvcmRlci1yYWRpdXMpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtjb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci10b29sdGlwLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDttYXJnaW4tbGVmdDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKX0udG9vbHRpcC50b29sdGlwLXJpZ2h0Pi50b29s''@;'; put 'put ''dGlwLWNvbnRlbnQ6YmVmb3JlLC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1yaWdodDpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2JvdHRvbTphdXRvO3JpZ2h0OmF1dG87bGVmdDpjYWxjKC0xKnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNikpO2JvcmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudH0udG9vbHRpcC50b29sdGlwLWxlZnQ+LnRvb2x0aXAtY29udGVu''@;'; put 'put ''dCwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtbGVmdHtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDo1MCUgMTAwJSBhdXRvIGF1dG87bWFyZ2luOjA7d2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRv''@;'; put 'put ''b2x0aXAtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2NvbG9yOnZhcigtLWNsci10b29sdGlwLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3Bh''@;'; put 'put ''Y2luZyk7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDttYXJnaW4tcmlnaHQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LnRvb2x0aXAudG9vbHRpcC1sZWZ0Pi50b29sdGlwLWNvbnRlbnQ6YmVmb3JlLC50b29sdGlwIC50b29s''@;'; put 'put ''dGlwLWNvbnRlbnQudG9vbHRpcC1sZWZ0OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7Ym90dG9tOmF1dG87bGVmdDphdXRvO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSk7Ym9yZGVyLXRvcDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50fS50b29sdGlwLnRvb2x0aXAteHM+LnRvb2x0aXAtY29udGVudCwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAt''@;'; put 'put ''eHN7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNCl9LnRvb2x0aXAudG9vbHRpcC1zbT4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1zbXt3aWR0aDpjYWxjKDEyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LnRvb2x0aXAu''@;'; put 'put ''dG9vbHRpcC1tZD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1tZHt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LnRvb2x0aXAudG9vbHRpcC1sZz4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlw''@;'; put 'put ''LWNvbnRlbnQudG9vbHRpcC1sZ3t3aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LnRvb2x0aXA+LmJ0bisudG9vbHRpcC1jb250ZW50LC50b29sdGlwLnRvb2x0aXAtdG9wLXJpZ2h0Pi5idG4rLnRvb2x0aXAtY29udGVudCwudG9vbHRpcC50b29sdGlwLXRv''@;'; put 'put ''cC1sZWZ0Pi5idG4rLnRvb2x0aXAtY29udGVudHttYXJnaW4tYm90dG9tOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgLSB2YXIoLS1jbHItYnRuLXZlcnRpY2FsLW1hcmdpbikpfS50b29sdGlwLnRvb2x0aXAtYm90dG9tLXJpZ2h0''@;'; put 'put ''Pi5idG4rLnRvb2x0aXAtY29udGVudCwudG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0Pi5idG4rLnRvb2x0aXAtY29udGVudHttYXJnaW4tdG9wOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgLSB2YXIoLS1jbHItYnRuLXZlcnRp''@;'; put 'put ''Y2FsLW1hcmdpbikpfS50b29sdGlwLnRvb2x0aXAtcmlnaHQ+LmJ0bisudG9vbHRpcC1jb250ZW50e21hcmdpbi1sZWZ0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgLSB2YXIoLS1jbHItYnRuLWhvcml6b250YWwtbWFyZ2luKSl9''@;'; put 'put ''LnRvb2x0aXA+LmNsci1pY29ue21hcmdpbi1yaWdodDowfS50b29sdGlwPnN2Z3twb2ludGVyLWV2ZW50czpub25lfS50b29sdGlwLXRyaWdnZXI6Zm9jdXMrLnRvb2x0aXAtY29udGVudHt2aXNpYmlsaXR5OnZpc2libGV9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItZm9ybXMtYmFzZWxpbmU6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KTstLWNsci1mb3Jtcy1pY29uLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1mb3JtLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci1m''@;'; put 'put ''b3Jtcy1sYWJlbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWZvcm1zLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMt''@;'; put 'put ''ZGFuZ2VyKTstLWNsci1mb3Jtcy1pbnZhbGlkLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItZm9ybXMtdmFsaWQtdGV4dC1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWZvcm1zLXN1YnRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMzAwKTstLWNsci1mb3Jtcy1wbGFjZWhvbGRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0yMDApOy0tY2xyLWZvcm1z''@;'; put 'put ''LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1jb2xvcik7LS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTstLWNsci1mb3Jtcy1zdWJ0ZXh0''@;'; put 'put ''LWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1mb3Jtcy1ib3JkZXItZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItZm9ybXMtbGFiZWwtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXBsYWNlaG9sZGVyLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1mb3Jtcy1sYWJlbC1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItZm9ybXMtaW5wdXQtcGFkZGluZzowIGNhbGMoNCAqIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkg''@;'; put 'put ''LyAzKTstLWNsci1mb3Jtcy1pbnB1dC13cmFwcGVyLWhlaWdodDpjYWxjKDQgKiB2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKTstLWNsci1mb3Jtcy1pbnB1dC1ncm91cC1pY29uLWFjdGlvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItZm9ybXMtaW5wdXQtZ3JvdXAt''@;'; put 'put ''aWNvbi1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1mb3Jtcy1jaGVja2JveC1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1mb3Jtcy1jaGVja2JveC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''Ym9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLWZvcm1zLWNoZWNrYm94LWxhYmVsLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1sYWJlbC1jb2xvcik7LS1jbHItZm9ybXMtY2hlY2tib3gtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQt''@;'; put 'put ''aGlnaGxpZ2h0KTstLWNsci1mb3Jtcy1jaGVja2JveC1pbmRldGVybWluYXRlLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTstLWNsci1mb3Jtcy1jaGVja2JveC1tYXJrLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtbGFiZWwtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWRpc2FibGVkLWNvbG9yKTstLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1mb3JtLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3IpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWNoZWNrZWQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1ib3JkZXItY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtaW5kZXRlcm1pbmF0ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1tYXJrLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItZm9ybXMtcmFkaW8tbGFiZWwtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWNvbG9yKTstLWNsci1mb3Jtcy1yYWRpby1sYWJlbC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1k''@;'; put 'put ''aXNhYmxlZCk7LS1jbHItZm9ybXMtcmFkaW8tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybS1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKTstLWNsci1mb3Jtcy1yYWRpby1kaXNhYmxlZC1tYXJrLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9y''@;'; put 'put ''LTEwMCk7LS1jbHItZm9ybXMtcmFkaW8tc2VsZWN0ZWQtc2hhZG93Omluc2V0IDAgMCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItZm9ybXMtcmFkaW8tY2hlY2tlZC1kaXNh''@;'; put 'put ''YmxlZC1zaGFkb3c6aW5zZXQgMCAwIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci1mb3Jtcy1wYXNzd29yZC1leWUtaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVy''@;'; put 'put ''YWN0aW9uLWNvbG9yKTstLWNsci1mb3Jtcy1wYXNzd29yZC1kaXNhYmxlZC1leWUtaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24t''@;'; put 'put ''YmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtc2hhZGUpOy0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTstLWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTstLWNsci1mb3Jtcy1yYW5nZS10''@;'; put 'put ''cmFjay1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMik7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7LS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvci1kaXNhYmxlZDp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci1mb3Jtcy1yYW5nZS10cmFjay1jb2xvci1kaXNhYmxlZDp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkLXRpbnQpOy0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci1jb2xvci1kaXNhYmxlZDp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci1mb3Jtcy1zZWxlY3QtaG92ZXItYmFja2dyb3VuZDp0cmFuc3BhcmVudDstLWNsci1mb3Jtcy1zZWxlY3QtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlv''@;'; put 'put ''bi1jb2xvci1kaXNhYmxlZCk7LS1jbHItZm9ybXMtc2VsZWN0LWhvdmVyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1mb3Jtcy1zZWxlY3QtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1mb3Jtcy1zZWxlY3QtY2FyZXQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItZm9ybXMtc2VsZWN0LWNhcmV0LXNpemU6Y2FsYygxMCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLWZvcm1zLXNlbGVjdC1vcHRpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAw''@;'; put 'put ''KTstLWNsci1mb3Jtcy1zZWxlY3Qtb3B0aW9uLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRh''@;'; put 'put ''aW5lci1iYWNrZ3JvdW5kKTstLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtb3B0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNv''@;'; put 'put ''bG9yLTQwMCk7LS1jbHItZm9ybXMtc2VsZWN0LW11bHRpcGxlLXNlbGVjdGVkLW9wdGlvbi1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItZm9ybXMtdGV4dGFyZWEtYmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1mb3Jtcy10ZXh0YXJlYS1kaXNhYmxlZC1iYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWZvcm1zLXRleHRhcmVhLWJvcmRlci1yYWRpdXM6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItZm9ybXMtZGF0YWxpc3QtY2FyZXQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''c3RhdHVzLWRpc2FibGVkKTstLWNsci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1pY29uLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLWZvcm0tY29udHJvbHttYXJnaW4tdG9wOmNhbGMoNCp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJl''@;'; put 'put ''Y3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmNsci1mb3JtLWNvbnRyb2wgaW5wdXQ6Oi1tcy1yZXZlYWwsLmNsci1mb3JtLWNvbnRyb2wgaW5wdXQ6Oi1tcy1jbGVhcntkaXNwbGF5Om5vbmV9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWZv''@;'; put 'put ''cm1zLXRleHQtZGlzYWJsZWQtY29sb3IpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIGxhYmVsLC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY29udHJvbC1sYWJlbHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtZGlzYWJsZWQtY29sb3IpfS5jbHItZm9ybS1jb250cm9s''@;'; put 'put ''LWRpc2FibGVkIC5jbHItaW5wdXQsLmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci10ZXh0YXJlYSwuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLXNlbGVjdCwuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLW51bWJlci1pbnB1dHtjb2xvcjp2YXIoLS1jbHItZm9y''@;'; put 'put ''bXMtdGV4dC1kaXNhYmxlZC1jb2xvcik7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWRpc2FibGVkLWNvbG9yKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCBpbnB1dFt0eXBlPXJhbmdlXTo6LXdlYmtpdC1zbGlkZXItdGh1bWIsLmNsci1mb3JtLWNvbnRy''@;'; put 'put ''b2wtZGlzYWJsZWQgaW5wdXRbdHlwZT1yYW5nZV06Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvci1kaXNhYmxlZCwgdmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3ItZGlzYWJs''@;'; put 'put ''ZWQpKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLXN1YnRleHR7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXN1YnRleHQtZGlzYWJsZWQtY29sb3IpfS5jbHItZm9ybS1jb250cm9sLW11bHRpe2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6d3JhcH0uY2xyLWZvcm0tY29udHJv''@;'; put 'put ''bC1tdWx0aSAuY2xyLWNvbnRyb2wtbGFiZWx7d2lkdGg6MTAwJX0uY2xyLWNvbnRyb2wtbGFiZWx7ZGlzcGxheTpibG9jaztjb2xvcjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtm''@;'; put 'put ''b250LXdlaWdodDp2YXIoLS1jbHItZm9ybXMtbGFiZWwtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRl''@;'; put 'put ''ci1zcGFjaW5nKX0uY2xyLWNvbnRyb2wtY29udGFpbmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDItZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLWNvbnRyb2wtaW5saW5le2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDthbGlnbi1jb250ZW50OmZsZXgtc3RhcnR9''@;'; put 'put ''LmNsci1jb250cm9sLWlubGluZSAuY2xyLWNvbnRyb2wtbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OmNhbGMoMip2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKTt3aWR0aDphdXRvfS5jbHItc3VidGV4dHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNw''@;'; put 'put ''YWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXN1YnRleHQtY29sb3IpO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLXN1YnRleHQuZXJyb3J7Y29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWZvcm1zLWludmFsaWQtdGV4dC1jb2xvcil9LmNsci1zdWJ0ZXh0LnN1Y2Nlc3N7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLXRleHQtY29sb3IpfS5jbHItc3VidGV4dC13cmFwcGVye2ZsZXgtYmFzaXM6MTAwJTtkaXNwbGF5OmZsZXh9LmNsci12YWxpZGF0ZS1pY29ue2hlaWdodDp2''@;'; put 'put ''YXIoLS1jbHItZm9ybXMtaWNvbi1zaXplKTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtaWNvbi1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpO21pbi13aWR0aDp2YXIoLS1jbHItZm9ybXMtaWNvbi1zaXplKTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1j''@;'; put 'put ''b2xvcik7ZmlsbDp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7ZGlzcGxheTpub25lfS5jbHItc3VjY2VzcyAuY2xyLXZhbGlkYXRlLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtmaWxsOnZhcigtLWNsci1mb3Jtcy12''@;'; put 'put ''YWxpZC1jb2xvcil9LmNsci1lcnJvciAuY2xyLXZhbGlkYXRlLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1mb3JtLWhvcml6b250YWwgLmNsci1mb3JtLWNvbnRyb2w+LmNsci1jb250cm9sLWxhYmVsLC5jbHItZm9ybS1ob3Jpem9udGFsIC5jbHItZm9ybS1jb250cm9sPi5jbHIt''@;'; put 'put ''Zm9ybS1jb250cm9sLmNsci1mb3JtLWNvbnRyb2wtbXVsdGkgLmNsci1jb250cm9sLWxhYmVse3dpZHRoOmNhbGMoMzIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSk7ZmxleC1zaHJpbms6MDttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci1mb3JtLWhvcml6b250''@;'; put 'put ''YWwuY2xyLXJvdyAuY2xyLWNvbnRyb2wtbGFiZWx7d2lkdGg6YXV0b30uY2xyLWZvcm0taG9yaXpvbnRhbCAuY2xyLWZvcm0tY29udHJvbHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5jbHItZm9ybTpub3QoLmNsci1mb3JtLWNvbXBhY3QpIC5jbHItY29udHJvbC1jb250YWlu''@;'; put 'put ''ZXIuY2xyLWVycm9yPi5jbHItc3VidGV4dC13cmFwcGVyIC5jbHItdmFsaWRhdGUtaWNvbiwuY2xyLWZvcm06bm90KC5jbHItZm9ybS1jb21wYWN0KSAuY2xyLWNvbnRyb2wtY29udGFpbmVyLmNsci1zdWNjZXNzPi5jbHItc3VidGV4dC13cmFwcGVyIC5jbHItdmFsaWRhdGUtaWNvbnttYXJn''@;'; put 'put ''aW4tbGVmdDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZm9ybS1jb250cm9sPi5jbHItY29udHJvbC1sYWJlbHt3aWR0aDpjYWxjKDMyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO21pbi13aWR0aDpjYWxjKDMyKnZhcigtLWNs''@;'; put 'put ''ci1mb3Jtcy1iYXNlbGluZSkpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZm9ybS1jb250cm9sLmNsci1yb3c+LmNsci1jb250cm9sLWxhYmVse3dpZHRoOmF1dG87bWluLXdpZHRoOmF1dG99LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jb250cm9sLWxhYmVse21hcmdpbi10b3A6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS0zKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZvcm0tY29udHJvbHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O21hcmdpbi10b3A6Y2FsYygyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItY29udHJvbC1jb250''@;'; put 'put ''YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwfS5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VidGV4dHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tbGVmdDp2YXIoLS1jbHItZm9ybXMtaWNvbi1zaXplKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWVycm9yIC5jbHItc3VidGV4''@;'; put 'put ''dCwuY2xyLWZvcm0tY29tcGFjdCAuY2xyLXN1Y2Nlc3MgLmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1lcnJvciAuY2xyLXN1YnRleHQuZXJyb3IsLmNsci1mb3JtLWNvbXBhY3QgLmNsci1lcnJvciAuY2xy''@;'; put 'put ''LXN1YnRleHQuc3VjY2VzcywuY2xyLWZvcm0tY29tcGFjdCAuY2xyLXN1Y2Nlc3MgLmNsci1zdWJ0ZXh0LmVycm9yLC5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VjY2VzcyAuY2xyLXN1YnRleHQuc3VjY2Vzc3ttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfS5jbHItZm9y''@;'; put 'put ''bS1jb21wYWN0IC5jbHItZXJyb3IgLmNsci12YWxpZGF0ZS1pY29uLC5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VjY2VzcyAuY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLXN1YnRleHQtd3JhcHBlcntmbGV4LWJhc2lzOmF1dG87ZGlzcGxh''@;'; put 'put ''eTppbmxpbmUtYmxvY2t9LmNsci1mb3Jte3BhZGRpbmc6dmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKX0uY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWNvbnRyb2wtY29udGFpbmVyLC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIC5jbHIt''@;'; put 'put ''c2VsZWN0LXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wgLmNsci1pbnB1dC13cmFwcGVyLC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIC5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1m''@;'; put 'put ''b3JtLWNvbnRyb2wgLmNsci1jb21ib2JveHt3aWR0aDpjYWxjKDEwMCUgLSB2YXIoLS1jbHItZm9ybXMtaWNvbi1zaXplKSl9LmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wgLmNsci1jb21ib2JveC13cmFwcGVyLC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1j''@;'; put 'put ''b250cm9sIC5jbHItY29tYm9ib3gtaW5wdXQtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLXRleHRhcmVhLXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wgLmNsci1pbnB1dC1ncm91cCwuY2xyLWZvcm0tZnVs''@;'; put 'put ''bC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCBpbnB1dCwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCB0ZXh0YXJlYSwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCBzZWxlY3R7d2lkdGg6MTAwJX0uY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZv''@;'; put 'put ''cm0tY29udHJvbCAuY2xyLWNvbWJvYm94LC5jbHItZm9ybS1mdWxsLXdpZHRoLmNsci1mb3JtLWNvbXBhY3QgLmNsci1mb3JtLWNvbnRyb2wgLmNsci1pbnB1dC13cmFwcGVyLC5jbHItZm9ybS1mdWxsLXdpZHRoLmNsci1mb3JtLWNvbXBhY3QgLmNsci1mb3JtLWNvbnRyb2wgLmNsci1udW1i''@;'; put 'put ''ZXItaW5wdXQtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aC5jbHItZm9ybS1jb21wYWN0IC5jbHItZm9ybS1jb250cm9sIC5jbHItc2VsZWN0LXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGguY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLW11bHRpc2VsZWN0''@;'; put 'put ''LXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtZmxleH0uY2xyLWZvcm0tZnVsbC13aWR0aC5jbHItZm9ybS1jb21wYWN0IC5jbHItY29udHJvbC1jb250YWluZXJ7ZmxleC13cmFwOm5vd3JhcH0uY2xyLWZvcm0tZnVsbC13aWR0aC5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VidGV4dHtmbGV4OjAg''@;'; put 'put ''MCBhdXRvfS5jbHItZm9ybS1mdWxsLXdpZHRoOm5vdCguY2xyLWZvcm0tY29tcGFjdCkgLmNsci1mb3JtLWNvbnRyb2wgLmNsci1lcnJvciAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVyLC5jbHItZm9ybS1mdWxsLXdpZHRoOm5vdCguY2xyLWZvcm0tY29tcGFjdCkgLmNsci1mb3JtLWNvbnRy''@;'; put 'put ''b2wgLmNsci1zdWNjZXNzIC5jbHItc2VsZWN0LXdyYXBwZXI6YWZ0ZXJ7cmlnaHQ6dmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKX0uY2xyLWZvcm0tZnVsbC13aWR0aDpub3QoLmNsci1mb3JtLWNvbXBhY3QpIC5jbHItZm9ybS1jb250cm9sIC5jbHItY29udHJvbC1jb250YWluZXI6bm90KC5j''@;'; put 'put ''bHItZXJyb3IpOm5vdCguY2xyLXN1Y2Nlc3MpIHRleHRhcmVhe3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpKX0uY2xyLWZvcm0tZ3JvdXB7cGFkZGluZzp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItcmVxdWlyZWQtbWFyazphZnRlcntjb250ZW50''@;'; put 'put ''OiIqIjtjb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7ZmlsbDp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0zKTttYXJnaW4tbGVmdDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUp''@;'; put 'put ''fS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZX0uY2xyLWNoZWNrYm94LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRp''@;'; put 'put ''dmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLWNoZWNrYm94LXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVse2ZvbnQtd2VpZ2h0OjQwMDtkaXNwbGF5OmJsb2NrfS5jbHItY2hlY2tib3gtd3JhcHBlcn4uY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xy''@;'; put 'put ''LWNoZWNrYm94LXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjA7Y3Vyc29yOnBvaW50ZXI7bWluLWhlaWdodDpj''@;'; put 'put ''YWxjKHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkqNCk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDA7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9u''@;'; put 'put ''dC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNl''@;'; put 'put ''Y29uZGFyeS1sZXR0ZXItc3BhY2luZyl9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hde3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLWhlaWdodDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWJvcmRlci1yYWRpdXMpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAwfS5jbHItY2hlY2tib3gtd3Jh''@;'; put 'put ''cHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKXtjdXJzb3I6cG9pbnRlcn0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtib3JkZXI6LjA1cmVtIHNvbGlkIHZhcigtLWNsci1mb3Jtcy1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWJvcmRlci1yYWRpdXMpfS5jbHIt''@;'; put 'put ''Y2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2Rpc3BsYXk6bm9uZTtoZWlnaHQ6Y2FsYyhjYWxjKGNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSouNSkqLjUpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS0xKSk7d2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKi41KTtib3JkZXItbGVmdDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykqLjEyNSkgc29saWQgdmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LW1hcmstY29sb3IpO2JvcmRlci1ib3R0b206Y2FsYyh2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTcpKi4xMjUpIHNvbGlkIHZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1tYXJrLWNvbG9yKTtsZWZ0OmNhbGMoY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKi41KSouNSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoY2FsYyhjYWxjKHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNykqLjUpKi41KSkgcm90YXRlKC00NWRlZyl9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmZvY3Vze291dGxpbmU6MH0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Zm9jdXM6YmVmb3Jle291dGxpbmU6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDpjYWxjKDMqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpjaGVja2VkOmJlZm9yZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXI6MH0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphZnRlcntkaXNwbGF5OmlubGluZS1ibG9ja30uY2xy''@;'; put 'put ''LWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF0uY2xyLWluZGV0ZXJtaW5hdGU6YmVmb3JlLC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTppbmRldGVybWluYXRlOmJlZm9yZXtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXIt''@;'; put 'put ''d2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1ib3JkZXItY29sb3IpfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XS5jbHItaW5kZXRlcm1pbmF0ZTphZnRlciwuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06aW5kZXRlcm1pbmF0ZTphZnRlcntib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtYm9yZGVyLWNvbG9yKTtkaXNwbGF5OmlubGluZS1ibG9jazt0cmFuc2Zvcm06dHJhbnNsYXRl''@;'; put 'put ''WShjYWxjKGNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSouNSkqLjUpKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQrbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1sYWJlbC1kaXNhYmxlZC1jb2xv''@;'; put 'put ''cil9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVkOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3JtLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJs''@;'; put 'put ''ZWQtYm9yZGVyLWNvbG9yKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6Y2hlY2tlZDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtY2hlY2tlZC1iYWNrZ3JvdW5kLWNvbG9yKTtib3Jk''@;'; put 'put ''ZXI6MH0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6Y2hlY2tlZDphZnRlcntib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLW1hcmstY29sb3IpfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpkaXNhYmxlZC5jbHItaW5kZXRlcm1pbmF0ZTphZnRlciwuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6aW5kZXRlcm1pbmF0ZTphZnRlcntib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWluZGV0''@;'; put 'put ''ZXJtaW5hdGUtY29sb3IpO2JvcmRlci1sZWZ0Om5vbmV9LmNsci1jaGVja2JveC13cmFwcGVyLmNsci1jaGVja2JveC1pbmxpbmV7ZGlzcGxheTpmbGV4fS5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtaW5saW5lIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmlubGluZS1i''@;'; put 'put ''bG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRoOmF1dG99LmNsci1lcnJvciAuY2xyLWNoZWNrYm94LXdyYXBwZXI6bm90KC5kYXRhZ3JpZC1zZWxlY3QgLmNsci1jaGVja2JveC13cmFwcGVyKSBpbnB1dFt0eXBlPWNoZWNrYm94XTpiZWZv''@;'; put 'put ''cmV7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWNoZWNrYm94LXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVsLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxl''@;'; put 'put ''ZCAuY2xyLWNvbnRyb2wtbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1sYWJlbC1kaXNhYmxlZC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmJlZm9yZSwuY2xy''@;'; put 'put ''LWNoZWNrYm94LXdyYXBwZXIuY2xyLWNoZWNrYm94LXdyYXBwZXItZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1j''@;'; put 'put ''aGVja2JveC1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmJlZm9yZSwuY2xyLWNoZWNrYm94LXdyYXBwZXIuY2xyLWNoZWNrYm94LXdyYXBwZXItZGlzYWJs''@;'; put 'put ''ZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtY2hlY2tlZC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXI6MH0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWNoZWNrYm94''@;'; put 'put ''LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphZnRlciwuY2xyLWNoZWNrYm94LXdyYXBwZXIuY2xyLWNoZWNrYm94LXdyYXBwZXItZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphZnRlcntib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWNoZWNr''@;'; put 'put ''Ym94LWRpc2FibGVkLW1hcmstY29sb3IpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XS5jbHItaW5kZXRlcm1pbmF0ZTphZnRlciwuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWNoZWNrYm94LXdyYXBw''@;'; put 'put ''ZXIgaW5wdXRbdHlwZT1jaGVja2JveF06aW5kZXRlcm1pbmF0ZTphZnRlciwuY2xyLWNoZWNrYm94LXdyYXBwZXIuY2xyLWNoZWNrYm94LXdyYXBwZXItZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF0uY2xyLWluZGV0ZXJtaW5hdGU6YWZ0ZXIsLmNsci1jaGVja2JveC13cmFwcGVyLmNs''@;'; put 'put ''ci1jaGVja2JveC13cmFwcGVyLWRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmluZGV0ZXJtaW5hdGU6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1pbmRldGVybWluYXRlLWNvbG9yKTtib3JkZXItbGVmdDpub25lfS5jbHItZm9ybS1j''@;'; put 'put ''b21wYWN0IC5jbHItY2hlY2tib3gtd3JhcHBlcnttYXgtd2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7bWluLWhlaWdodDpjYWxjKHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkqNCl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVyfi5jbHItc3VidGV4dHttYXJnaW4tbGVm''@;'; put 'put ''dDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OmNhbGMoMip2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKTt3aWR0aDphdXRv''@;'; put 'put ''fS5jbHItZm9ybS1jb21wYWN0IC5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7bWFyZ2luLXRvcDowfS5jbHItZmlsZS13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi10b3A6dmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKX0uY2xyLWZpbGUtd3JhcHBlciAu''@;'; put 'put ''Y2xyLWNvbnRyb2wtbGFiZWx7Zm9udC13ZWlnaHQ6NDAwO2Rpc3BsYXk6YmxvY2t9LmNsci1maWxlLXdyYXBwZXJ+LmNsci12YWxpZGF0ZS1pY29ue21hcmdpbi1sZWZ0OjB9LmNsci1maWxlLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItZmlsZS13cmFw''@;'; put 'put ''cGVyIC5idG57bWFyZ2luOjB9LmNsci1maWxle2hlaWdodDowO3dpZHRoOjA7b3BhY2l0eTowO292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Oi0xfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVye21heC13aWR0aDoxMDAlO21hcmdpbi10b3A6MH0u''@;'; put 'put ''Y2xyLWZvcm0tY29tcGFjdCAuY2xyLWZpbGUtd3JhcHBlcn4uY2xyLXN1YnRleHR7bWFyZ2luLWxlZnQ6dmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZpbGUtd3JhcHBlcn4uY2xyLXZhbGlkYXRlLWljb257bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1j''@;'; put 'put ''bHItZm9ybXMtYmFzZWxpbmUpKjQpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyfi5jbHItc3VidGV4dHtsaW5lLWhlaWdodDpjYWxjKHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkqNCk7bWFyZ2luLXRvcDowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVy''@;'; put 'put ''IC5jbHItY29udHJvbC1sYWJlbHttYXJnaW4tdG9wOjA7bGluZS1oZWlnaHQ6MS4wOHJlbX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZpbGUtd3JhcHBlciAuYnRue2hlaWdodDoxLjJyZW19LmNsci1maWxlLWlucHV0LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlO21h''@;'; put 'put ''cmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLWZpbGUtaW5wdXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXR7aGVpZ2h0OjA7d2lkdGg6MDtvcGFjaXR5OjA7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6LTF9LmNsci1maWxlLWlucHV0LXdy''@;'; put 'put ''YXBwZXIgLmNsci1maWxlLWlucHV0LWJyb3dzZS1idXR0b24sLmNsci1maWxlLWlucHV0LXdyYXBwZXIgLmNsci1maWxlLWlucHV0LWNsZWFyLWJ1dHRvbnttYXJnaW46MDttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0uY2xyLWZpbGUtaW5wdXQtd3JhcHBlciAuY2xy''@;'; put 'put ''LWZpbGUtaW5wdXQtY2xlYXItYnV0dG9ue3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIWltcG9ydGFudDttaW4td2lkdGg6dW5zZXQ7Ym9yZGVyOjB9LmNsci1maWxlLWlucHV0LXdyYXBwZXIgLmNsci1maWxlLWlucHV0LWJyb3dzZS1idXR0b24tdGV4dHtvdmVyZmxvdzpo''@;'; put 'put ''aWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZpbGUtaW5wdXQtd3JhcHBlcnttYXJnaW4tdG9wOjB9QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDo3NjhweCl7LmNsci1mb3JtLWhvcml6b250YWwgLmNsci1maWxlLWlucHV0LXdyYXBwZXJ7''@;'; put 'put ''bWFyZ2luLXRvcDowfX0uY2xyLWZpbGUtbGlzdCAuY2xyLWZpbGUtbGlzdC1pdGVte21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTttYXgtd2lkdGg6NTAwcHh9LmNsci1maWxlLWxpc3QgLmNsci1maWxlLWxhYmVsLWFuZC1zdGF0dXMtaWNvbntkaXNwbGF5OmlubGluZS1m''@;'; put 'put ''bGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLWZpbGUtbGlzdCAuY2xyLWZpbGUtbGFiZWx7d2hpdGUtc3BhY2U6d3JhcDtoZWlnaHQ6dW5zZXQ7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMik7cGFkZGluZy1yaWdo''@;'; put 'put ''dDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItZmlsZS1saXN0IC5jbHItZmlsZS1jbGVhci1idXR0b257bWFyZ2luOjA7cGFkZGluZzowO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2hlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxp''@;'; put 'put ''bmUtaGVpZ2h0KX0uY2xyLWZpbGUtbGlzdCAuY2xyLWZpbGUtY2xlYXItYnV0dG9uIGNkcy1pY29ue21hcmdpbjowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS1saXN0LWl0ZW17ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjtjb2x1bW4tZ2FwOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLWxpc3QtaXRlbSAuY2xyLXN1YnRleHR7bWFyZ2luOjAhaW1wb3J0YW50fS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS1saXN0LWJyZWFre2ZsZXgtYmFzaXM6MTAwJTtoZWlnaHQ6MH0uY2xyLWlu''@;'; put 'put ''cHV0LXdyYXBwZXJ7d2hpdGUtc3BhY2U6bm93cmFwO21heC1oZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWlucHV0LXdyYXBwZXItaGVpZ2h0KX0uY2xyLWlucHV0ey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFy''@;'; put 'put ''YW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtaW5wdXQtd3JhcHBlci1oZWlnaHQpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWNvbG9yKTti''@;'; put 'put ''b3JkZXItYm90dG9tOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLWJvcmRlci1jb2xvcik7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzp2YXIoLS1jbHItZm9ybXMtaW5wdXQtcGFkZGlu''@;'; put 'put ''Zyk7bWF4LWhlaWdodDp2YXIoLS1jbHItZm9ybXMtaW5wdXQtd3JhcHBlci1oZWlnaHQpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13''@;'; put 'put ''ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLWlucHV0OmZvY3Vze291dGxpbmU6MH0uY2xyLWlucHV0W3JlYWRvbmx5XXtib3Jk''@;'; put 'put ''ZXI6MH0uY2xyLWlucHV0Om5vdChbcmVhZG9ubHldKXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yKSA5NSUpIG5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6MCAxMDAlO3RyYW5zaXRpb246''@;'; put 'put ''YmFja2dyb3VuZC1zaXplIC4ycyBlYXNlfS5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pOmZvY3VzLC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pLmNsci1mb2N1cywuY2xyLWlucHV0Om5vdChbcmVhZG9ubHldKTpmb2N1cy13aXRoaW57Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''Zm9ybXMtZm9jdXNlZC1jb2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLWlucHV0OmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1pbnB1dDpkaXNhYmxlZDo6cGxhY2Vob2xkZXJ7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWZvcm1zLXBsYWNlaG9sZGVyLWRpc2FibGVkLWNvbG9yKX0uY2xyLWVycm9yIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRv''@;'; put 'put ''IGJvdHRvbSx0cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1lcnJvciAuY2xyLWlucHV0Om5vdChbcmVhZG9ubHld''@;'; put 'put ''KTpmb2N1cywuY2xyLWVycm9yIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pLmNsci1mb2N1cywuY2xyLWVycm9yIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLXNpemU6MTAwJSAxMDAlfS5jbHItc3VjY2VzcyAuY2xyLWlucHV0Om5vdChbcmVhZG9ubHldKXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcik7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtdmFsaWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1zdWNjZXNzIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pOmZvY3VzLC5jbHItc3VjY2VzcyAuY2xyLWlu''@;'; put 'put ''cHV0Om5vdChbcmVhZG9ubHldKS5jbHItZm9jdXMsLmNsci1zdWNjZXNzIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLWZv''@;'; put 'put ''cm0tY29udHJvbC5yb3cgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpjYWxjKDEwMCUgLSB2YXIoLS1jbHItZm9ybXMtaWNvbi1zaXplKSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1pbnB1dHttYXgtd2lkdGg6MTAwJX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWlucHV0fi5jbHItc3Vi''@;'; put 'put ''dGV4dHttYXJnaW4tbGVmdDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZm9ybS1jb250cm9sLXJlYWRvbmx5IC5jbHItaW5wdXR7Ym9yZGVyOjB9LmNsci1mb3JtLWNvbnRyb2wtbXVsdGkgLmNsci1pbnB1dHttYXgtd2lkdGg6Y2FsYygxMDAlICsgdmFyKC0tY2xyLWZvcm1zLWlj''@;'; put 'put ''b24tc2l6ZSkpfTo6cGxhY2Vob2xkZXJ7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXBsYWNlaG9sZGVyLWNvbG9yKX0uY2xyLWlucHV0LWdyb3Vwe2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWNvbG9yKTtib3JkZXItYm90dG9tOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRo''@;'; put 'put ''LTEwMCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLWJvcmRlci1jb2xvcik7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcikg''@;'; put 'put ''OTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZTtwb3NpdGlvbjpyZWxhdGl2ZTttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pbnB1dC13cmFwcGVyLWhlaWdodCl9LmNsci1pbnB1''@;'; put 'put ''dC1ncm91cDpmb2N1cywuY2xyLWlucHV0LWdyb3VwLmNsci1mb2N1cywuY2xyLWlucHV0LWdyb3VwOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItaW5wdXQtZ3JvdXAu''@;'; put 'put ''Y2xyLWZvY3Vze3dpZHRoOmF1dG99LmNsci1pbnB1dC1ncm91cCAuY2xyLWlucHV0e2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO21hcmdpbi1yaWdodDowO21heC13aWR0aDoxMDAlfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXN7YmFja2dyb3VuZC1z''@;'; put 'put ''aXplOjA7Ym9yZGVyOjB9LmNsci1pbnB1dC1ncm91cCBzZWxlY3QsLmNsci1pbnB1dC1ncm91cCAuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdCwuY2xyLWlucHV0LWdyb3VwIC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3R7Ym9yZGVyOjB9LmNsci1pbnB1dC1ncm91cCAuY2xyLWlu''@;'; put 'put ''cHV0LWdyb3VwLWFkZG9ue2NvbG9yOnZhcigtLWNsci1mb3Jtcy1zdWJ0ZXh0LWNvbG9yKX0uY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXQtZ3JvdXAtYWN0aW9uc3tkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXQtZ3Jv''@;'; put 'put ''dXAtaWNvbi1hY3Rpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dy''@;'; put 'put ''b3VuZDowIDA7cGFkZGluZzowIGNhbGMoMS41KnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO2N1cnNvcjpwb2ludGVyfWJ1dHRvbi5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbntjdXJzb3I6cG9pbnRlcn0uY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXQt''@;'; put 'put ''Z3JvdXAtaWNvbi1hY3Rpb24gY2RzLWljb24sLmNsci1pbnB1dC1ncm91cCAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uIGNsci1pY29ue2ZpbGw6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pbnB1dC1ncm91cC1p''@;'; put 'put ''Y29uLWFjdGlvbi1zaXplKTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb24tc2l6ZSk7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpLGNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSkpfS5jbHIt''@;'; put 'put ''ZXJyb3IgLmNsci1pbnB1dC1ncm91cHtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKSA5NSUpIG5v''@;'; put 'put ''LXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6MCAxMDAlO3RyYW5zaXRpb246YmFja2dyb3VuZC1zaXplIC4ycyBlYXNlfS5jbHItZXJyb3IgLmNsci1pbnB1dC1ncm91cDpmb2N1cywuY2xyLWVycm9yIC5jbHItaW5wdXQtZ3JvdXAuY2xyLWZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dC1ncm91''@;'; put 'put ''cDpmb2N1cy13aXRoaW57Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dC1ncm91cHtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1j''@;'; put 'put ''b2xvcik7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9ybXMtdmFsaWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNs''@;'; put 'put ''ci1zdWNjZXNzIC5jbHItaW5wdXQtZ3JvdXA6Zm9jdXMsLmNsci1zdWNjZXNzIC5jbHItaW5wdXQtZ3JvdXAuY2xyLWZvY3VzLC5jbHItc3VjY2VzcyAuY2xyLWlucHV0LWdyb3VwOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcik7''@;'; put 'put ''YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWlucHV0LWdyb3Vwe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWJvcmRlci1kaXNhYmxlZC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1pbnB1''@;'; put 'put ''dC1ncm91cC1pY29uLWFjdGlvbntjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb24gY2RzLWljb257ZmlsbDp2YXIoLS1jbHItZm9y''@;'; put 'put ''bXMtaW5wdXQtZ3JvdXAtaWNvbi1kaXNhYmxlZC1jb2xvcil9LmNsci1pbnB1dC1ncm91cDpoYXMoaW5wdXRbcmVhZG9ubHldKSwuY2xyLWZvcm0tY29udHJvbC1yZWFkb25seSAuY2xyLWlucHV0LWdyb3Vwe2JvcmRlcjowO2JhY2tncm91bmQ6MCAwfS5jbHItaW5wdXQtZ3JvdXA6aGFzKGlu''@;'; put 'put ''cHV0W3JlYWRvbmx5XSkgLmNsci1pbnB1dC1ncm91cC1hY3Rpb25zLC5jbHItZm9ybS1jb250cm9sLXJlYWRvbmx5IC5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91cC1hY3Rpb25ze2Rpc3BsYXk6bm9uZX0uY2xyLWZvcm0taG9yaXpvbnRhbCAuY2xyLWlucHV0LWdyb3Vwe21heC13''@;'; put 'put ''aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MH0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb117LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmV9LmNsci1yYWRpby13cmFwcGVy''@;'; put 'put ''e3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmNsci1yYWRpby13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtmb250LXdlaWdodDo0MDA7ZGlzcGxheTpibG9ja30uY2xyLXJhZGlvLXdyYXBwZXJ+LmNsci12YWxpZGF0ZS1pY29ue21hcmdpbi1s''@;'; put 'put ''ZWZ0OjB9LmNsci1yYWRpby13cmFwcGVyfi5jbHItc3VidGV4dHtkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb117cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS05KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Ym9yZGVyLXJhZGl1czo1MCU7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDB9LmNsci1yYWRpby13cmFwcGVyIGlucHV0''@;'; put 'put ''W3R5cGU9cmFkaW9dOm5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JvcmRlcjouMDVyZW0gc29saWQgdmFyKC0tY2xyLWZvcm1zLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czo1MCV9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YmVmb3Jle2JvcmRlcjow''@;'; put 'put ''O2JveC1zaGFkb3c6dmFyKC0tY2xyLWZvcm1zLXJhZGlvLXNlbGVjdGVkLXNoYWRvdyl9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6ZGlzYWJsZWQ6YmVmb3Jle2JveC1zaGFkb3c6dmFyKC0tY2xyLWZvcm1zLXJhZGlvLWNoZWNrZWQtZGlzYWJsZWQtc2hh''@;'; put 'put ''ZG93KX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106Zm9jdXN7b3V0bGluZTowfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXTpmb2N1czpiZWZvcmV7b3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpO291dGxp''@;'; put 'put ''bmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OmNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dOmRpc2FibGVkK2xhYmVse2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItZm9ybXMtcmFkaW8tbGFiZWwtZGlzYWJsZWQtY29sb3IpfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXTpkaXNhYmxlZDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFkaW8tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcik7Ym9y''@;'; put 'put ''ZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpfS5jbHItcmFkaW8td3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjA7Y3Vyc29yOnBvaW50ZXI7bWluLWhl''@;'; put 'put ''aWdodDpjYWxjKHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkqNCk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDA7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhZGlvLWxhYmVsLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZv''@;'; put 'put ''bnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyl9LmNsci1yYWRpby13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbDplbXB0eXtwYWRkaW5nLWxlZnQ6MH0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLXJhZGlvLXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVse2N1cnNv''@;'; put 'put ''cjpub3QtYWxsb3dlZDtjb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFkaW8tbGFiZWwtZGlzYWJsZWQtY29sb3IpfS5jbHItZXJyb3IgLmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpfS5j''@;'; put 'put ''bHItZm9ybS1jb21wYWN0IC5jbHItcmFkaW8td3JhcHBlcnttYXgtd2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7bWluLWhlaWdodDpjYWxjKDQqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVyfi5jbHItc3VidGV4dHttYXJnaW4t''@;'; put 'put ''bGVmdDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItcmFkaW8td3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OmNhbGMoMip2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKTt3aWR0aDphdXRv''@;'; put 'put ''fS5jbHItZm9ybS1jb21wYWN0IC5jbHItcmFkaW8td3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7bWFyZ2luLXRvcDowfS5jbHItc2VsZWN0LXdyYXBwZXIsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO3doaXRlLXNwYWNlOm5vd3JhcH0uY2xyLXNlbGVjdC13''@;'; put 'put ''cmFwcGVyIHNlbGVjdCwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0ey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXIt''@;'; put 'put ''cmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWNvbG9yKTtib3JkZXItYm90dG9tOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29s''@;'; put 'put ''aWQgdmFyKC0tY2xyLWZvcm1zLWJvcmRlci1jb2xvcik7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Zm9udC1zaXplOnZhcigtLWNsci1wMi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdo''@;'; put 'put ''dCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MCBjYWxjKHZhcigtLWNsci1mb3Jtcy1zZWxlY3Qt''@;'; put 'put ''Y2FyZXQtc2l6ZSkgKyB2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKjIpIDAgdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKTtjdXJzb3I6cG9pbnRlcjt6LWluZGV4OjJ9LmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6Zm9jdXMsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDpmb2N1''@;'; put 'put ''c3tvdXRsaW5lOjB9LmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pe2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xy''@;'; put 'put ''LWZvcm1zLWZvY3VzZWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pOmZvY3VzLC5jbHItc2VsZWN0LXdyYXBwZXIg''@;'; put 'put ''c2VsZWN0Om5vdChbbXVsdGlwbGVdKS5jbHItZm9jdXMsLmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pOmZvY3VzLXdpdGhpbiwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpmb2N1cywuY2xyLW11bHRpc2VsZWN0LXdyYXBw''@;'; put 'put ''ZXIgc2VsZWN0Om5vdChbbXVsdGlwbGVdKS5jbHItZm9jdXMsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpO2JhY2tncm91bmQtc2l6ZTox''@;'; put 'put ''MDAlIDEwMCV9LmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3RbbXVsdGlwbGVdOmZvY3VzLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3RbbXVsdGlwbGVdOmZvY3Vze291dGxpbmUtY29sb3I6SGlnaGxpZ2h0O291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291''@;'; put 'put ''dGxpbmUtc3R5bGU6YXV0bztvdXRsaW5lLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMil9LmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6aG92ZXIsLmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6YWN0aXZlLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6aG92ZXIsLmNs''@;'; put 'put ''ci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDphY3RpdmV7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtaG92ZXItYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtaG92ZXItYmFja2dyb3VuZCl9LmNsci1zZWxlY3Qtd3JhcHBlciBz''@;'; put 'put ''ZWxlY3Q6aG92ZXI6ZGlzYWJsZWQsLmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6YWN0aXZlOmRpc2FibGVkLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6aG92ZXI6ZGlzYWJsZWQsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDphY3RpdmU6ZGlzYWJsZWR7Y3Vyc29y''@;'; put 'put ''Om5vdC1hbGxvd2VkO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6ZGlzYWJsZWQgb3B0aW9uLC5jbHItc2VsZWN0LXdyYXBwZXIgc2VsZWN0IG9wdGlvbjpkaXNhYmxlZCwuY2xyLW11''@;'; put 'put ''bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmRpc2FibGVkIG9wdGlvbiwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0IG9wdGlvbjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1zZWxlY3Qt''@;'; put 'put ''d3JhcHBlciBzZWxlY3Qgb3B0aW9uLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Qgb3B0aW9ue2NvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3Qtb3B0aW9uLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3Qtb3B0aW9uLWJhY2tncm91bmQtY29s''@;'; put 'put ''b3IpfS5jbHItc2VsZWN0LXdyYXBwZXIgc2VsZWN0OjotbXMtZXhwYW5kLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6Oi1tcy1leHBhbmR7ZGlzcGxheTpub25lfS5jbHItc2VsZWN0LXdyYXBwZXJ7bWF4LWhlaWdodDpjYWxjKDQqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSk7''@;'; put 'put ''ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1zZWxlY3Qtd3JhcHBlcjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWNhcmV0LXNpemUpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtY2FyZXQtc2l6ZSk7dG9wOmNh''@;'; put 'put ''bGMoLjUqKDQqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSAtIHZhcigtLWNsci1mb3Jtcy1zZWxlY3QtY2FyZXQtc2l6ZSkpKTtyaWdodDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpO21hcmdpbjowOy13ZWJraXQtbWFzazp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwl''@;'; put 'put ''M0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEyJTIwMTIlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3R5bGUlM0UuY2xzLTEl''@;'; put 'put ''N0JmaWxsJTNBJTIzOWE5YTlhJTNCJTdEJTNDJTJGc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VDYXJldCUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIlMjBkJTNEJTIy''@;'; put 'put ''TTYlMkM5TDEuMiUyQzQuMmEwLjY4JTJDMC42OCUyQzAlMkMwJTJDMSUyQzEtMUw2JTJDNy4wOCUyQzkuODQlMkMzLjI0YTAuNjglMkMwLjY4JTJDMCUyQzElMkMxJTJDMSUyQzFaJTIyJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBKTttYXNrOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNl''@;'; put 'put ''dD11dGY4LCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTIlMjAxMiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RlZnMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NzdHlsZSUz''@;'; put 'put ''RS5jbHMtMSU3QmZpbGwlM0ElMjM5YTlhOWElM0IlN0QlM0MlMkZzdHlsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRmRlZnMlM0UlMEElMjAlMjAlMjAlMjAlM0N0aXRsZSUzRUNhcmV0JTNDJTJGdGl0bGUlM0UlMEElMjAlMjAlMjAlMjAlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHMtMSUyMiUy''@;'; put 'put ''MGQlM0QlMjJNNiUyQzlMMS4yJTJDNC4yYTAuNjglMkMwLjY4JTJDMCUyQzAlMkMxJTJDMS0xTDYlMkM3LjA4JTJDOS44NCUyQzMuMjRhMC42OCUyQzAuNjglMkMwJTJDMSUyQzElMkMxJTJDMVolMjIlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEpOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVw''@;'; put 'put ''ZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtY2FyZXQtY29sb3IpfS5jbHItc2VsZWN0LXdyYXBwZXI6aG92ZXI6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWNhcmV0LWhvdmVyLWNv''@;'; put 'put ''bG9yKX0uY2xyLWVycm9yIC5jbHItc2VsZWN0LXdyYXBwZXI6YWZ0ZXIsLmNsci1zdWNjZXNzIC5jbHItc2VsZWN0LXdyYXBwZXI6YWZ0ZXJ7cmlnaHQ6Y2FsYyh2YXIoLS1jbHItZm9ybXMtaWNvbi1zaXplKSArIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpfS5jbHItbXVsdGlzZWxlY3Qt''@;'; put 'put ''d3JhcHBlcntkaXNwbGF5OmZsZXh9LmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIC5jbHItdmFsaWRhdGUtaWNvbnttYXJnaW4tbGVmdDowfXNlbGVjdFttdWx0aXBsZV0sc2VsZWN0W3NpemVde3BhZGRpbmc6MDtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAw''@;'; put 'put ''KSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtc2VsZWN0LW11bHRpcGxlLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZDp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LW11bHRpcGxlLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVz''@;'; put 'put ''LTEwMCk7aGVpZ2h0OmF1dG87bWluLXdpZHRoOmNhbGMoMTIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX1zZWxlY3RbbXVsdGlwbGVdOmhvdmVyLHNlbGVjdFttdWx0aXBsZV06YWN0aXZlLHNlbGVjdFtzaXplXTpob3ZlcixzZWxlY3Rbc2l6ZV06YWN0aXZle2JhY2tncm91bmQ6''@;'; put 'put ''dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1ib3JkZXItY29sb3IpfXNlbGVjdFttdWx0aXBsZV0gb3B0aW9uLHNlbGVjdFtzaXplXSBvcHRpb257cGFkZGluZzpjYWxj''@;'; put 'put ''KHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkqLjUpIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSk7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1vcHRpb24tY29sb3IpfXNlbGVjdFttdWx0aXBsZV0gb3B0aW9uOmNoZWNrZWQsc2VsZWN0W3NpemVdIG9wdGlvbjpjaGVj''@;'; put 'put ''a2Vke2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1zZWxlY3RlZC1vcHRpb24tYmFja2dyb3VuZC1jb2xvcil9LmNsci1lcnJvciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQt''@;'; put 'put ''Y29sb3IpO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9''@;'; put 'put ''LmNsci1lcnJvciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pOmZvY3VzLC5jbHItZXJyb3Igc2VsZWN0Om5vdChbbXVsdGlwbGVdKS5jbHItZm9jdXMsLmNsci1lcnJvciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jt''@;'; put 'put ''cy1pbnZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItZXJyb3Igc2VsZWN0W211bHRpcGxlXXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpfS5jbHItc3VjY2VzcyBzZWxlY3Q6bm90KFttdWx0aXBsZV0pe2JvcmRlci1ib3R0b20t''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9u''@;'; put 'put ''OmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLXN1Y2Nlc3Mgc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpmb2N1cywuY2xyLXN1Y2Nlc3Mgc2VsZWN0Om5vdChbbXVsdGlwbGVdKS5jbHItZm9jdXMsLmNsci1zdWNjZXNzIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMtd2l0aGlue2Jv''@;'; put 'put ''cmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItc3VjY2VzcyBzZWxlY3RbbXVsdGlwbGVde2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtdmFsaWQtY29sb3IpfS5jbHItZm9ybS1jb250cm9sLWRp''@;'; put 'put ''c2FibGVkIC5jbHItc2VsZWN0LmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLXNlbGVjdC5kaXNhYmxlZDpob3ZlcjphZnRlcntjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItZm9ybXMtc2VsZWN0LWNhcmV0LWNvbG9yKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLXNlbGVjdC5kaXNhYmxlZD5zZWxlY3QsLmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3Qgc2VsZWN0OmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxl''@;'; put 'put ''Y3QtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLXNlbGVjdC5kaXNhYmxlZD5zZWxlY3Q6aG92ZXIsLmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3Qgc2VsZWN0OmRpc2FibGVkOmhvdmVye2JhY2tn''@;'; put 'put ''cm91bmQ6MCAwO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXJ7bWFyZ2luLXRvcDowfS5jbHItdGV4dGFyZWEtd3JhcHBlcnt3aGl0ZS1zcGFjZTpub3dyYXA7ZGlzcGxheTpmbGV4O21h''@;'; put 'put ''cmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uY2xyLXRleHRhcmVhLXdyYXBwZXIgLmNsci12YWxpZGF0ZS1pY29ue21hcmdpbi1sZWZ0OjB9LmNsci10ZXh0YXJlYXttYXgtd2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSk7aGVpZ2h0OmF1dG87''@;'; put 'put ''cmVzaXplOnZlcnRpY2FsO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1mb3Jtcy1ib3JkZXItY29sb3IpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLXRleHRhcmVhLWJhY2tncm91bmQtY29sb3IpO2NvbG9yOnZhcigt''@;'; put 'put ''LWNsci1mb3Jtcy10ZXh0LWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1mb3Jtcy10ZXh0YXJlYS1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNp''@;'; put 'put ''emUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6Y2FsYygyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25k''@;'; put 'put ''YXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLXRleHRhcmVhOmZvY3Vze291dGxpbmUtY29sb3I6SGlnaGxpZ2h0O291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtc3R5bGU6YXV0bztvdXRsaW5lLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMik7b3V0''@;'; put 'put ''bGluZS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yKX0uY2xyLXRleHRhcmVhOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFs''@;'; put 'put ''bG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dGFyZWEtZGlzYWJsZWQtYmFja2dyb3VuZCk7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1ib3JkZXItZGlzYWJsZWQtY29sb3IpfS5jbHItc3VjY2VzcyAuY2xyLXRleHRhcmVhe2JvcmRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtdmFsaWQtY29sb3IpO291dGxpbmUtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKX0uY2xyLWVycm9yIC5jbHItdGV4dGFyZWF7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtvdXRsaW5lLWNvbG9yOnZhcigtLWNsci1mb3Jt''@;'; put 'put ''cy1pbnZhbGlkLWNvbG9yKX0uY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhe3dpZHRoOmF1dG99LmNsci1mb3JtLWNvbnRyb2wucm93IC5jbHItdGV4dGFyZWEtd3JhcHBlcnttYXgtd2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSl9LmNsci1mb3JtLWNv''@;'; put 'put ''bXBhY3QgLmNsci10ZXh0YXJlYS13cmFwcGVye21hcmdpbi10b3A6MH0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLXRleHRhcmVhLXdyYXBwZXIgLmNsci10ZXh0YXJlYXttYXgtd2lkdGg6MTAwJX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLXRleHRhcmVhLXdyYXBwZXIgLmNsci10ZXh0YXJlYX4u''@;'; put 'put ''Y2xyLXN1YnRleHR7bWFyZ2luLWxlZnQ6dmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci10b2dnbGUtYmctY29sb3Itb2ZmOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbCk7LS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9uOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItdG9nZ2xlLWhhbmRsZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLXRvZ2dsZS1oYW5kbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtYmctY29sb3Itb2ZmKTstLWNsci10''@;'; put 'put ''b2dnbGUtaGFuZGxlLWJvcmRlci1jb2xvci1vbjp2YXIoLS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9uKTstLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHItdG9nZ2xl''@;'; put 'put ''LWRpc2FibGVkLWRlZmF1bHQtaGFuZGxlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1ib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWJvcmRlci1jb2xvcik7''@;'; put 'put ''LS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1iZy1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLWRlZmF1bHQtaGFuZGxlLWNvbG9yKTstLWNsci10b2dnbGUtZGlzYWJsZWQtb2ZmLWhhbmRsZS1ib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWJv''@;'; put 'put ''cmRlci1jb2xvcik7LS1jbHItdG9nZ2xlLWRpc2FibGVkLW9uLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLWRlZmF1bHQtYm9yZGVyLWNvbG9yKTstLWNsci10b2dnbGUtZGlzYWJsZWQtb24tYmctY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0''@;'; put 'put ''LWJvcmRlci1jb2xvcik7LS1jbHItdG9nZ2xlLWRpc2FibGVkLW9uLWhhbmRsZS1ib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWJvcmRlci1jb2xvcil9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XXstd2Via2l0LWFwcGVhcmFu''@;'; put 'put ''Y2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZX0uY2xyLXRvZ2dsZS13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtNik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7anVzdGlmeS1jb250ZW50OnN0YXJ0O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5jbHItdG9nZ2xlLXdyYXBwZXIgbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7Y3Vy''@;'; put 'put ''c29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7ZmxleDoxIDEgYXV0b30uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hde3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtMTApO2ZsZXg6MCAwIGF1dG87Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMjAwKX0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOm5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfS5jbHIt''@;'; put 'put ''dG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbnRlbnQ6IiI7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkgc29saWQgdmFyKC0tY2xyLXRvZ2dsZS1i''@;'; put 'put ''Zy1jb2xvci1vZmYpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTIwMCk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9n''@;'; put 'put ''Z2xlLWJnLWNvbG9yLW9mZik7dHJhbnNpdGlvbi1kdXJhdGlvbjouMTVzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW47dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZC1jb2xvcn0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2ti''@;'; put 'put ''b3hdOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbnRlbnQ6IiI7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkgc29saWQgdmFyKC0tY2xyLXRvZ2dsZS1oYW5kbGUtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVz''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0zMDApO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1oYW5kbGUtYmctY29sb3IpO2xlZnQ6MDtyaWdodDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3RyYW5zaXRpb24tZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6cmlnaHQsbGVmdH0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdOmZvY3Vze291dGxpbmU6MH0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmZvY3VzOmJlZm9yZXtvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSk7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmct''@;'; put 'put ''Y29sb3I7b3V0bGluZS1vZmZzZXQ6Y2FsYygzKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9uKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci10b2dnbGUtYmctY29sb3Itb24pO3RyYW5zaXRpb24tZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9LmNsci10b2dnbGUtd3Jh''@;'; put 'put ''cHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWhhbmRsZS1ib3JkZXItY29sb3Itb24pO3RyYW5zaXRpb24tZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO3RyYW5zaXRpb24t''@;'; put 'put ''cHJvcGVydHk6cmlnaHQsbGVmdDtsZWZ0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKTtyaWdodDowfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQrbGFiZWx7Y3Vyc29yOm5vdC1hbGxv''@;'; put 'put ''d2VkfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6bm90KDpjaGVja2VkKXtsZWZ0OjB9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9nZ2xl''@;'; put 'put ''LWRpc2FibGVkLW9mZi1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtb2ZmLWJvcmRlci1jb2xvcil9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZDphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10''@;'; put 'put ''b2dnbGUtZGlzYWJsZWQtb2ZmLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vZmYtaGFuZGxlLWJvcmRlci1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXRv''@;'; put 'put ''Z2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6ZGlzYWJsZWQ6YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9uLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9uLWJnLWNv''@;'; put 'put ''bG9yKX0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6ZGlzYWJsZWQ6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtb24taGFuZGxlLWJvcmRlci1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7''@;'; put 'put ''d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXRvZ2dsZS13cmFwcGVyLmRpc2FibGVkIGxhYmVse2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXRvZ2dsZS13cmFwcGVyLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YmVmb3Jle2JvcmRlci1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9uLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9uLWJnLWNvbG9yKX0uY2xyLXRvZ2dsZS13cmFwcGVyLnJpZ2h0LWxhYmVse2ZsZXgtZmxvdzpyb3ctcmV2ZXJzZX0uY2xyLXRvZ2dsZS13''@;'; put 'put ''cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUt''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMDttYXJn''@;'; put 'put ''aW4tdG9wOjB9LmNsci1jb250cm9sLWlubGluZSAuY2xyLXRvZ2dsZS13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MH0uY2xyLXRvZ2dsZS1yaWdodCAuY2xyLXRvZ2dsZS13cmFwcGVye2ZsZXgtZmxvdzpyb3ctcmV2ZXJzZX0u''@;'; put 'put ''Y2xyLXRvZ2dsZS1yaWdodCBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLXJhbmdlLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2FsaWduLWl0ZW1zOmZsZXgtZW5kO2hlaWdodDp2YXIoLS1jbHItZm9ybXMt''@;'; put 'put ''cmFuZ2UtdGh1bWItaGVpZ2h0KTt3aGl0ZS1zcGFjZTpub3dyYXB9LmNsci1yYW5nZS13cmFwcGVyIC5maWxsLWlucHV0e3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7cG9pbnRl''@;'; put 'put ''ci1ldmVudHM6bm9uZTtjdXJzb3I6cG9pbnRlcjt6LWluZGV4OjEwO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci1yYWRpdXMpO2JvcmRlci1z''@;'; put 'put ''dHlsZTpub25lfS5jbHItcmFuZ2V7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6ZmxleC1lbmQ7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQpfS5jbHItcmFuZ2U6ZGlzYWJsZWR7cG9pbnRlci1ldmVudHM6YXV0bztjdXJz''@;'; put 'put ''b3I6bm90LWFsbG93ZWQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bGVmdDowO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2staGVpZ2h0KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1jb2xvci1kaXNhYmxlZCl9LmNsci1yYW5nZTpkaXNh''@;'; put 'put ''YmxlZDo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KS8yIC0gdmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCkvMiArIHZhcigtLWNs''@;'; put 'put ''ci1mb3Jtcy1yYW5nZS10cmFjay1ib3JkZXItd2lkdGgpKSk7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvci1kaXNhYmxlZCk7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQp''@;'; put 'put ''O3dpZHRoOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQpfS5jbHItcmFuZ2U6ZGlzYWJsZWQ6Oi1tb3otcmFuZ2UtdGh1bWJ7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xv''@;'; put 'put ''ci1kaXNhYmxlZCk7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQpfS5jbHItcmFuZ2U6ZGlzYWJsZWQrLmZpbGwtaW5wdXR7cG9pbnRlci1ldmVudHM6YXV0bztjdXJzb3I6bm90LWFsbG93''@;'; put 'put ''ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvci1kaXNhYmxlZCl9aW5wdXRbdHlwZT1yYW5nZV17cGFkZGluZzowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2xlZnQ6MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNr''@;'; put 'put ''LWhlaWdodCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stY29sb3IpO2JvcmRlcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLWNvbG9yKTtib3JkZXIt''@;'; put 'put ''cmFkaXVzOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1ib3JkZXItcmFkaXVzKX1pbnB1dFt0eXBlPXJhbmdlXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1''@;'; put 'put ''bWItaGVpZ2h0KS8yIC0gdmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCkvMiArIHZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1ib3JkZXItd2lkdGgpKSk7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3Mt''@;'; put 'put ''ZmlsbC1jb2xvcik7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQpfWlucHV0W3R5cGU9cmFuZ2VdOmRpc2FibGVke2JvcmRlcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVy''@;'; put 'put ''LXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLWNvbG9yLWRpc2FibGVkKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1ib3JkZXItcmFkaXVzKX1pbnB1dFt0eXBlPXJhbmdlXTo6LW1vei1yYW5nZS10aHVtYntib3JkZXI6''@;'; put 'put ''MDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCk7d2lkdGg6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCl9''@;'; put 'put ''QHN1cHBvcnRzICgtbXMtaW1lLWFsaWduOmF1dG8pey5jbHItcmFuZ2Utd3JhcHBlciAuZmlsbC1pbnB1dHtkaXNwbGF5Om5vbmV9LmNsci1yYW5nZS13cmFwcGVyLnByb2dyZXNzLWZpbGwgaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy1maWxsLWxvd2Vye2hlaWdodDp2YXIoLS1jbHItZm9ybXMt''@;'; put 'put ''cmFuZ2UtdHJhY2staGVpZ2h0KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yKX1pbnB1dFt0eXBlPXJhbmdlXXtib3JkZXI6MDttYXJnaW46MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtsZWZ0OjA7aGVpZ2h0OnZhcigtLWNsci1m''@;'; put 'put ''b3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9aW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10cmFja3ttYXJnaW46MDtib3JkZXI6MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7Y3Vyc29yOnBvaW50ZXI7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stY29sb3IpfWlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdGh1bWJ7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvcik7aGVp''@;'; put 'put ''Z2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQpfX1fOi1tcy1mdWxsc2NyZWVuIC5jbHItcmFuZ2Utd3JhcHBlciAuZmlsbC1pbnB1dCw6cm9vdCAuY2xyLXJhbmdlLXdyYXBwZXIgLmZpbGwtaW5w''@;'; put 'put ''dXR7ZGlzcGxheTpub25lfV86LW1zLWZ1bGxzY3JlZW4gLmNsci1yYW5nZS13cmFwcGVyLnByb2dyZXNzLWZpbGwgaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy1maWxsLWxvd2VyLDpyb290IC5jbHItcmFuZ2Utd3JhcHBlci5wcm9ncmVzcy1maWxsIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmls''@;'; put 'put ''bC1sb3dlcntoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvcil9XzotbXMtZnVsbHNjcmVlbiBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRvb2x0aXAsOnJvb3Qg''@;'; put 'put ''aW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10b29sdGlwe3Zpc2liaWxpdHk6aGlkZGVufV86LW1zLWZ1bGxzY3JlZW4gaW5wdXRbdHlwZT1yYW5nZV0sOnJvb3QgaW5wdXRbdHlwZT1yYW5nZV17Ym9yZGVyOjA7bWFyZ2luOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bGVmdDowO2hlaWdodDp2''@;'; put 'put ''YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fV86LW1zLWZ1bGxzY3JlZW4gaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10cmFjayw6cm9vdCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRyYWNre2JvcmRlcjowO21hcmdpbjowO2hl''@;'; put 'put ''aWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2staGVpZ2h0KTtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1jb2xvcil9XzotbXMtZnVsbHNjcmVlbiBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1iLDpyb290IGlucHV0''@;'; put 'put ''W3R5cGU9cmFuZ2VdOjotbXMtdGh1bWJ7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvcik7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQpO3dpZHRoOnZhcigt''@;'; put 'put ''LWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQpfWlucHV0W2NsckRhdGFsaXN0SW5wdXRde3Bvc2l0aW9uOnJlbGF0aXZlfWlucHV0W2NsckRhdGFsaXN0SW5wdXRdOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7b3BhY2l0eTowO2N1cnNvcjp0ZXh0fS5jbHItaW5wdXQt''@;'; put 'put ''Z3JvdXAgaW5wdXRbY2xyRGF0YWxpc3RJbnB1dF17ei1pbmRleDoyfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1kYXRhbGlzdC1jYXJldHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MjUlO3JpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWRhdGFsaXN0''@;'; put 'put ''LWNhcmV0LWNvbG9yKTtjdXJzb3I6dGV4dDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0LWljb24tc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0LWljb24tc2l6ZSl9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1kYXRhbGlzdC1j''@;'; put 'put ''YXJldHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtZGF0YWxpc3QtY2FyZXQtZGlzYWJsZWQtY29sb3IpfWNsci1kYXRhbGlzdC1jb250YWluZXIgLmNsci1pbnB1dC1ncm91cHtwYWRkaW5nLXJpZ2h0OjB9LmNsci1pbnB1dC13cmFwcGVyIGlucHV0W2NsclBhc3N3b3JkXStidXR0b24uY2xyLWlu''@;'; put 'put ''cHV0LWdyb3VwLWljb24tYWN0aW9uIC5jbHItcGFzc3dvcmQtZXllLWljb257Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXBhc3N3b3JkLWV5ZS1pY29uLWNvbG9yKX0uY2xyLWlucHV0LXdyYXBwZXIgaW5wdXRbY2xyUGFzc3dvcmRdK2J1dHRvbi5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb25b''@;'; put 'put ''ZGlzYWJsZWRdIC5jbHItcGFzc3dvcmQtZXllLWljb257ZmlsbDp2YXIoLS1jbHItZm9ybXMtcGFzc3dvcmQtZGlzYWJsZWQtZXllLWljb24tY29sb3IpfS5jbHItaW5wdXQtd3JhcHBlciBpbnB1dFtjbHJQYXNzd29yZF1bZGlzYWJsZWRde2NvbG9yOnZhcigtLWNsci1mb3Jtcy1wYXNzd29y''@;'; put 'put ''ZC1kaXNhYmxlZC1leWUtaWNvbi1jb2xvcil9LmNsci1udW1iZXItaW5wdXQtd3JhcHBlcntkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7bWF4LWhlaWdodDp2YXIoLS1jbHItZm9ybXMtaW5wdXQtd3JhcHBlci1oZWlnaHQpfS5jbHItbnVtYmVyLWlucHV0LXdyYXBw''@;'; put 'put ''ZXIgLmNsci1udW1iZXItaW5wdXR7LW1vei1hcHBlYXJhbmNlOnRleHRmaWVsZH0uY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItbnVtYmVyLWlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLC5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXIgLmNsci1udW1iZXItaW5wdXQ6Oi13''@;'; put 'put ''ZWJraXQtaW5uZXItc3Bpbi1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9LmNsci1udW1iZXItaW5wdXQtd3JhcHBlciAuY2xyLW51bWJlci1pbnB1dC1zZXBhcmF0b3J7YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7d2lkdGg6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb257aGVpZ2h0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSAtIHZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkpO3dpZHRoOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSAtIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkpO3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItbnVtYmVyLWlucHV0''@;'; put 'put ''LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcil9LmNsci1udW1iZXItaW5wdXQtd3JhcHBlciAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0''@;'; put 'put ''aW9uOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpfS5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbjpkaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnVu''@;'; put 'put ''c2V0fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWNhbGVuZGFyLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItY2FsZW5kYXItYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTst''@;'; put 'put ''LWNsci1jYWxlbmRhci1vcHRpb24tdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1jYWxlbmRhci1hY3RpdmUtb3B0aW9uLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGln''@;'; put 'put ''aGxpZ2h0KTstLWNsci1jYWxlbmRhci1yYW5nZS1jZWxsLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1jYWxlbmRhci1idG4tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlv''@;'; put 'put ''bi1jb2xvcik7LS1jbHItY2FsZW5kYXItdG9kYXktZGF0ZS1jZWxsLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItY2FsZW5kYXItdG9kYXktZGF0ZS1jZWxsLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJv''@;'; put 'put ''cmRlci1jb2xvcik7LS1jbHItY2FsZW5kYXItYWN0aXZlLWNlbGwtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTstLWNsci1jYWxlbmRhci1hY3RpdmUtZm9jdXMtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWNhbGVuZGFyLWFjdGl2ZS1jZWxsLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItY2FsZW5kYXItYnRuLXBpY2tlci10cmlnZ2VyLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3IpOy0tY2xyLWNhbGVuZGFyLWJ0bi1waWNrZXItdHJpZ2dlci1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWhvdmVyKTstLWNsci1jYWxlbmRhci1idG4tcGlja2VyLXRyaWdnZXIt''@;'; put 'put ''YWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3IpOy0tY2xyLWNhbGVuZGFyLWJ0bi1ob3Zlci1mb2N1cy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpOy0tY2xyLWNhbGVuZGFyLWJ0bi1ob3Zl''@;'; put 'put ''ci1mb2N1cy1jb2xvci10ZXh0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWNhbGVuZGFyLWJ0bi1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLWNhbGVuZGFyLWJ0''@;'; put 'put ''bi1hY3RpdmUtY29sb3ItYmc6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZSk7LS1jbHItY2FsZW5kYXItd2Vla2RheS1mb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0zKTstLWNsci1jYWxlbmRhci10b2Rh''@;'; put 'put ''eS1kYXRlLWNlbGwtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci1jYWxlbmRhci1waWNrZXItYnRuLWZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTYpOy0tY2xyLWNhbGVuZGFy''@;'; put 'put ''LXBpY2tlci1idG4tZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bSl9LmRhdGVwaWNrZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJn''@;'; put 'put ''aW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOmNhbGMoKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpICsgKDIqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSkgKyAoMip2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWJvcmRlci13aWR0aC0xMDApKSk7aGVpZ2h0OmNhbGMoKDgqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpICsgKDIqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSkgKyAoMip2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApKSArIDYqdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS0zKSk7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWNhbGVuZGFyLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTtib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTEwMCk7ei1pbmRleDoxMDUwfS5kYXRlcGlja2VyIC5kYXRlcGlja2VyLXZpZXctbWFuYWdlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29s''@;'; put 'put ''dW1uO3Jvdy1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTt3aWR0aDpjYWxjKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpfS5kYXRlcGlja2VyLmhhcy1yYW5nZS1vcHRpb257d2lkdGg6Y2FsYygoNyp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSkgKyAoMip2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTcpKSArICgyKnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpICsgMTUwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSArIDIqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lk''@;'; put 'put ''dGgtMTAwKSl9LmRhdGVwaWNrZXIuaGFzLWFjdGlvbi1idXR0b25ze2hlaWdodDpjYWxjKCg4KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKSArICgyKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpICsgKDIqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgKyA2''@;'; put 'put ''KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgKyB2YXIoLS1jbHItYnRuLWhlaWdodCkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSk7cm93LWdhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5kYXRlcGlja2VyIC5kYXRlcGlja2Vy''@;'; put 'put ''LWFjdGlvbnN7bWluLXdpZHRoOjEwMCU7aGVpZ2h0OmNhbGModmFyKC0tY2xyLWJ0bi1oZWlnaHQpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSk7ZGlzcGxheTpmbGV4O2JvcmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSBzb2xpZCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWNvbnRhaW5lci1ib3JkZXItY29sb3IpO2p1c3RpZnktY29udGVudDplbmQ7cGFkZGluZy10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtnYXA6dmFyKC0tY2xyLWJ0bi1ob3Jpem9udGFsLW1hcmdpbil9LmRhdGVwaWNrZXIgLmRhdGVwaWNrZXItYWN0aW9ucyBidXR0b257bWFyZ2lu''@;'; put 'put ''OjB9LmNsci1kYXRlLXJhbmdlLXBpY2tlci1uYXZ7d2lkdGg6Y2FsYygxNTAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7aGVpZ2h0OjEwMCV9LmNhbGVuZGFyLWhlYWRlcntkaXNw''@;'; put 'put ''bGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO3dpZHRoOmNhbGMoNyp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSl9LmNhbGVuZGFyLXN3aXRjaGVycywueWVhci1zd2l0Y2hlcnN7ZGlzcGxheTpmbGV4fS55ZWFyLXN3aXRjaGVyc3tm''@;'; put 'put ''bGV4OjAgMCBhdXRvO2FsaWduLXNlbGY6Y2VudGVyO3dpZHRoOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkqMyl9LmNhbGVuZGFyLXRhYmxle2ZsZXg6MSAxIGF1dG87Ym9yZGVyLXNwYWNpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO3dpZHRoOjEwMCV9dGQuY2FsZW5k''@;'; put 'put ''YXItY2VsbCx0ZC5jYWxlbmRhci10YWJsZSAuY2FsZW5kYXItY2VsbHtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTttaW4td2lkdGg6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS0xMSk7cGFkZGluZzowO3RleHQtYWxpZ246Y2VudGVyfS5kYXl7ZGlzcGxheTppbmxpbmV9LndlZWtkYXlze2ZsZXg6MCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpfS53ZWVrZGF5e2ZvbnQtc2l6ZTp2YXIoLS1jbHItY2FsZW5kYXItd2Vla2RheS1mb250LXNp''@;'; put 'put ''emUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyl9LmNhbGVuZGFyLWJ0bntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTttaW4td2lkdGg6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS0xMSk7cGFkZGluZzowO21hcmdpbjowIWltcG9ydGFudDtjb2xvcjppbmhlcml0O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZDowIDA7Y3Vyc29yOnBvaW50ZXI7Zm9udC1z''@;'; put 'put ''aXplOnZhcigtLWNsci1jYWxlbmRhci1waWNrZXItYnRuLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWNhbGVuZGFyLXBpY2tlci1idG4tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRl''@;'; put 'put ''ci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpfS5jYWxlbmRhci1idG4uaW4tcmFuZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItcmFuZ2UtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItcmFkaXVzOjB9LmNhbGVu''@;'; put 'put ''ZGFyLWJ0bjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3IpfS5jYWxlbmRhci1idG46Zm9jdXN7b3V0bGluZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwKSBzb2xpZCAycHg7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTIpKTtiYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcil9LmNhbGVuZGFyLWJ0bjphY3RpdmV7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWFjdGl2ZS1jb2xvci1iZyl9LmRheS1i''@;'; put 'put ''dG57aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3BhZGRpbmc6MDttYXJnaW46MCFp''@;'; put 'put ''bXBvcnRhbnQ7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTtiYWNrZ3JvdW5kOjAgMDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9u''@;'; put 'put ''dC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7''@;'; put 'put ''d2lkdGg6MTAwJTtjb2xvcjppbmhlcml0fS5kYXktYnRuLmluLXJhbmdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLXJhbmdlLWNlbGwtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXJhZGl1czowfS5kYXktYnRuOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0''@;'; put 'put ''bi1ob3Zlci1mb2N1cy1jb2xvcil9LmRheS1idG46Zm9jdXN7b3V0bGluZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwKSBzb2xpZCAycHg7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpKTtiYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcil9LmRheS1idG46YWN0aXZle2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1hY3RpdmUtY29sb3ItYmcpfS5kYXktYnRuOmhvdmVye2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3It''@;'; put 'put ''dGV4dCl9LmRheS1idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yKX0uZGF5LWJ0bi5pcy10b2RheXtjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItdG9kYXktZGF0ZS1jZWxsLWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSBz''@;'; put 'put ''b2xpZCB2YXIoLS1jbHItY2FsZW5kYXItdG9kYXktZGF0ZS1jZWxsLWJvcmRlci1jb2xvcik7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1mb250LXdlaWdodCl9LmRheS1idG4uaXMtc2VsZWN0ZWQsLmRheS1idG4uaXMtc3RhcnQtcmFuZ2UsLmRheS1i''@;'; put 'put ''dG4uaXMtZW5kLXJhbmdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLWFjdGl2ZS1jZWxsLWJhY2tncm91bmQtY29sb3IpO2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1hY3RpdmUtY2VsbC1jb2xvcil9LmRheS1idG4uaXMtc3RhcnQtcmFuZ2U6bm90KC5pcy1lbmQtcmFuZ2Upe2Jv''@;'; put 'put ''cmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uZGF5LWJ0bi5pcy1lbmQtcmFuZ2U6bm90KC5pcy1zdGFydC1yYW5nZSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uZGF5LWJ0bi5pcy1zZWxl''@;'; put 'put ''Y3RlZDpmb2N1c3tiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1hY3RpdmUtZm9jdXMtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yKX0uZGF5LWJ0bi5pcy1leGNsdWRlZHtkaXNwbGF5Om5vbmV9LmRheS1idG4uaXMtZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRl''@;'; put 'put ''cmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kOjAgMH0uY2FsZW5kYXItcGlja2Vyc3tkaXNwbGF5OmZsZXh9LnN3aXRjaGVye2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4tY29sb3IpfS5zd2l0Y2hlcjpob3Zlcntjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItY2FsZW5kYXItYnRuLWhvdmVyLWZvY3VzLWNvbG9yLXRleHQpfS5zd2l0Y2hlcjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1hY3RpdmUtY29sb3IpfS5zd2l0Y2hlciBjZHMtaWNvbiwuc3dpdGNoZXIgY2xyLWljb257aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtOCk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KX0ubW9udGhwaWNrZXItdHJpZ2dlciwueWVhcnBpY2tlci10cmlnZ2Vye3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMpO2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4tcGlja2VyLXRyaWdnZXItY29sb3IpO3Rl''@;'; put 'put ''eHQtYWxpZ246Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30ubW9udGhwaWNrZXItdHJpZ2dlci55ZWFyLXJhbmdlLC55ZWFycGlja2VyLXRyaWdnZXIueWVhci1yYW5nZXt3aWR0aDp1bnNldDthbGlnbi1jb250ZW50OmNl''@;'; put 'put ''bnRlcjtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9Lm1vbnRocGlja2VyLC55ZWFycGlja2Vye21pbi1oZWlnaHQ6Y2FsYyg2KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIpKX0ubW9udGhwaWNrZXIsLnllYXJwaWNrZXIsLmRheXBpY2tlcntkaXNwbGF5OmZsZXg7ZmxleC13''@;'; put 'put ''cmFwOndyYXA7cm93LWdhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2hlaWdodDpjYWxjKDkqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCkgKyAzKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpO3dpZHRoOmNhbGMoNyp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSl9LnllYXJze2Zs''@;'; put 'put ''ZXgtZGlyZWN0aW9uOnJvd30ubW9udGgsLnllYXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMTEpO3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO21hcmdpbjowIWltcG9ydGFudDtjb2xvcjppbmhlcml0O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZDowIDA7Y3Vyc29yOnBv''@;'; put 'put ''aW50ZXI7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''c2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTt3aWR0aDpjYWxjKC41KmNhbGMoKDcqdmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS0xMSkpICsgKDIqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSkgKyAoMip2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApKSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpIC0gdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSl9Lm1v''@;'; put 'put ''bnRoOmhvdmVyLC55ZWFyOmhvdmVye2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3ItdGV4dCl9Lm1vbnRoOmFjdGl2ZSwueWVhcjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1hY3RpdmUtY29sb3IpfS5tb250aC5pcy10b2RheSwueWVh''@;'; put 'put ''ci5pcy10b2RheXtjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItdG9kYXktZGF0ZS1jZWxsLWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSBzb2xpZCB2YXIoLS1jbHItY2FsZW5kYXItdG9kYXktZGF0ZS1jZWxsLWJvcmRlci1jb2xvcik7Zm9udC13ZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1mb250LXdlaWdodCl9Lm1vbnRoLmlzLXNlbGVjdGVkLC5tb250aC5pcy1zdGFydC1yYW5nZSwubW9udGguaXMtZW5kLXJhbmdlLC55ZWFyLmlzLXNlbGVjdGVkLC55ZWFyLmlzLXN0YXJ0LXJhbmdlLC55ZWFyLmlzLWVuZC1yYW5nZXtiYWNr''@;'; put 'put ''Z3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1hY3RpdmUtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYWN0aXZlLWNlbGwtY29sb3IpfS5tb250aC5pcy1zdGFydC1yYW5nZTpub3QoLmlzLWVuZC1yYW5nZSksLnllYXIuaXMtc3RhcnQtcmFuZ2U6bm90''@;'; put 'put ''KC5pcy1lbmQtcmFuZ2Upe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0ubW9udGguaXMtZW5kLXJhbmdlOm5vdCguaXMtc3RhcnQtcmFuZ2UpLC55ZWFyLmlzLWVuZC1yYW5nZTpub3QoLmlzLXN0YXJ0LXJhbmdlKXtib3JkZXItdG9wLWxl''@;'; put 'put ''ZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5tb250aC5pcy1zZWxlY3RlZDpmb2N1cywueWVhci5pcy1zZWxlY3RlZDpmb2N1c3tiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1hY3RpdmUtZm9jdXMtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yKX0ubW9udGguaXMt''@;'; put 'put ''ZGlzYWJsZWQsLnllYXIuaXMtZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7cG9pbnRlci1ldmVudHM6bm9uZX0ubW9udGguaXMtZGlzYWJsZWQ6aG92ZXIsLnllYXIuaXMtZGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDow''@;'; put 'put ''IDB9Lm1vbnRocywueWVhcnN7cm93LWdhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2ZsZXgtd3JhcDp3cmFwO2Rpc3BsYXk6ZmxleH0ubW9udGh7dGV4dC1hbGlnbjpjZW50ZXI7aGVpZ2h0OmNhbGMoNSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKTt3aGl0ZS1zcGFjZTpub3dyYXA7''@;'; put 'put ''b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LnllYXJ7dGV4dC1hbGlnbjpjZW50ZXJ9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItY29tYm9ib3gtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1jb21ib2JveC1pbnB1''@;'; put 'put ''dC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtdGludCk7LS1jbHItY29tYm9ib3gtcGlsbC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItY29tYm9i''@;'; put 'put ''b3gtcGlsbC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWNvbWJvYm94LXBpbGwtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWNvbWJvYm94LWZpbHRlci1oaWdobGlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItY29tYm9ib3gtbWluLXdpZHRoOmNhbGMoMTY4ICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItY29tYm9ib3gtbXVsdGktbWluLXdpZHRoOmNhbGMoMzYwICogKDFy''@;'; put 'put ''ZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItY29tYm9ib3gtbWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLWNvbWJvYm94LWZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7LS1jbHItY29t''@;'; put 'put ''Ym9ib3gtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7LS1jbHItY29tYm9ib3gtdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWNvbWJvYm94LWJvcmRlci1yYWRpdXM6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItY29tYm9ib3gtcGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7LS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTstLWNsci1jb21i''@;'; put 'put ''b2JveC10cmlnZ2VyLXBhZGRpbmctcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTstLWNsci1jb21ib2JveC10cmlnZ2VyLWdhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLWNvbWJvYm94LXRyaWdnZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLWNvbG9yKTstLWNsci1jb21ib2JveC1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItY29tYm9ib3gtYWN0aXZlLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZSk7LS1jbHItY29tYm9ib3gtcGlsbC1wYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTstLWNsci1jb21ib2JveC1waWxsLW1hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIHZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMykgMCAwOy0tY2xyLWNvbWJvYm94LXBpbGwtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItY29tYm9ib3gtcGlsbC1yZW1vdmUtaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1jb21ib2JveC1jYXJldC1p''@;'; put 'put ''Y29uLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1jb21ib2JveC1waWxsLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCl9LmNsci1jb21ib2JveC1mb3JtLWNvbnRyb2x7YWxpZ24taXRlbXM6c3RyZXRjaH0uY2xyLWNv''@;'; put 'put ''bWJvYm94LWZvcm0tY29udHJvbCAuY2xyLWVycm9yIC5jbHItdmFsaWRhdGUtaWNvbnttYXJnaW4tbGVmdDowfS5jbHItZm9jdXMtaW5kaWNhdG9ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIp''@;'; put 'put ''O3dpZHRoOjA7dHJhbnNpdGlvbjp3aWR0aCAuMnMgZWFzZTtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTtsZWZ0OjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1jbHItY29tYm9ib3gtYm9yZGVyLXJhZGl1cyk7Ym9y''@;'; put 'put ''ZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLWNvbWJvYm94LWJvcmRlci1yYWRpdXMpfS5jbHItZm9jdXN7d2lkdGg6MTAwJX0uY2xyLWVycm9yIC5jbHItZm9jdXMtaW5kaWNhdG9ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpfS5jbHIt''@;'; put 'put ''Y29tYm9ib3gtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjAgY2FsYyh2YXIoLS1jbHItY29tYm9ib3gtdHJpZ2dlci1nYXApICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNsci1jb21ib2JveC10cmlnZ2VyLXBhZGRpbmctcmlnaHQpKSAwIHZhcigtLWNs''@;'; put 'put ''ci1jb21ib2JveC10cmlnZ2VyLXBhZGRpbmctbGVmdCk7bWluLWhlaWdodDp2YXIoLS1jbHItY29tYm9ib3gtbWluLWhlaWdodCk7bWluLXdpZHRoOnZhcigtLWNsci1jb21ib2JveC1taW4td2lkdGgpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItY29tYm9ib3gtZm9udC1zaXplKTtmb250LXdlaWdo''@;'; put 'put ''dDp2YXIoLS1jbHItY29tYm9ib3gtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWNvbG9yKTtib3JkZXItYm90dG9tOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdp''@;'; put 'put ''ZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLWJvcmRlci1jb2xvcik7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtaW5wdXQtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXdpZHRoOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1jb21ib2JveC1ib3JkZXItcmFkaXVzKX0uY2xyLWNvbWJvYm94LXdyYXBw''@;'; put 'put ''ZXIgLmNsci1pbnB1dHtwYWRkaW5nOjA7bWF4LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItY29tYm9ib3gtd3JhcHBlciAuY2xyLWlucHV0Om5vdCg6ZGlzYWJsZWQpe2NvbG9yOnZhcigtLWNsci1jb21ib2JveC10ZXh0LWNvbG9yKX0uY2xyLWNvbWJvYm94LXdyYXBw''@;'; put 'put ''ZXIubXVsdGl7bWluLXdpZHRoOm1pbih2YXIoLS1jbHItY29tYm9ib3gtbXVsdGktbWluLXdpZHRoKSwxMDAlKTtwYWRkaW5nLWJvdHRvbTpjYWxjKDMqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItY29tYm9ib3gtd3JhcHBlciAuY2xyLWlucHV0LmNsci1jb21ib2JveC1p''@;'; put 'put ''bnB1dDpmb2N1c3tiYWNrZ3JvdW5kOjAgMH0uY2xyLWNvbWJvYm94LXdyYXBwZXIuaW52YWxpZHtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmNsci1jb21ib2JveC1pbnB1dHtiYWNrZ3JvdW5kOjAgMDti''@;'; put 'put ''b3JkZXItYm90dG9tOm5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5jbHItY29tYm9ib3gtd3JhcHBlciAuY2xyLWNvbWJvYm94LXJlbW92ZS1idG57YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O3BhZGRpbmc6MDtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''Y29tYm9ib3gtcGlsbC1yZW1vdmUtaWNvbi1jb2xvcil9LmNsci1jb21ib2JveC13cmFwcGVyIC5sYWJlbC1jb21ib2JveC1waWxse2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7aGVpZ2h0OnZhcigt''@;'; put 'put ''LWNsci1jb21ib2JveC1waWxsLWhlaWdodCk7bWFyZ2luOnZhcigtLWNsci1jb21ib2JveC1waWxsLW1hcmdpbik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTti''@;'; put 'put ''b3JkZXItc3R5bGU6c29saWQ7YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1jb21ib2JveC1waWxsLWJvcmRlci1jb2xvcik7cGFkZGluZzp2YXIoLS1jbHItY29tYm9i''@;'; put 'put ''b3gtcGlsbC1wYWRkaW5nKX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmxhYmVsLWNvbWJvYm94LXBpbGwgLmNsci1jb21ib2JveC1waWxsLWNvbnRlbnR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtjb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1mb250LWNvbG9yKTtwYWRkaW5nOjB9LmNsci1jb21ib2JveC13cmFwcGVyIC5sYWJlbC1jb21ib2JveC1waWxsIGNkcy1pY29uLC5jbHItY29tYm9ib3gtd3JhcHBlciAu''@;'; put 'put ''bGFiZWwtY29tYm9ib3gtcGlsbCBjbHItaWNvbnttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LmNsci1jb21ib2JveC13cmFwcGVyIC5sYWJlbC1jb21ib2JveC1waWxsIGNkcy1pY29uW3NoYXBlPXdpbmRvdy1jbG9zZV0sLmNsci1jb21ib2JveC13cmFw''@;'; put 'put ''cGVyIC5sYWJlbC1jb21ib2JveC1waWxsIGNsci1pY29uW3NoYXBlPXdpbmRvdy1jbG9zZV17Y29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtZm9udC1jb2xvcil9LmNsci1jb21ib2JveC13cmFwcGVyIC5jbHItY29tYm9ib3gtaW5wdXQtd3JhcHBlcntib3JkZXI6MDtiYWNrZ3JvdW5k''@;'; put 'put ''OjAgMH0uY2xyLWNvbWJvYm94LXdyYXBwZXI6bm90KC5kaXNhYmxlZCk6aG92ZXIsLmNsci1jb21ib2JveC13cmFwcGVyOmZvY3VzLXdpdGhpbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1jb21ib2JveC1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yKX0uY2xyLWNvbWJvYm94LXRyaWdnZXJ7''@;'; put 'put ''cGFkZGluZy1sZWZ0OnZhcigtLWNsci1jb21ib2JveC10cmlnZ2VyLXBhZGRpbmctbGVmdCk7cGFkZGluZy1yaWdodDp2YXIoLS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLXJpZ2h0KTttYXJnaW46YXV0bztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2Jh''@;'; put 'put ''Y2tncm91bmQ6MCAwO2JvcmRlcjowO2NvbG9yOmN1cnJlbnRDb2xvcjtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjB9LmNsci1jb21ib2JveC10cmlnZ2VyOmRpc2FibGVke2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpfS5jbHItY29tYm9i''@;'; put 'put ''b3gtdHJpZ2dlcjpkaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZV0sLmNsci1jb21ib2JveC10cmlnZ2VyOmRpc2FibGVkIGNsci1pY29uW3NoYXBlPWFuZ2xlXXtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKX0uY2xyLWNvbWJvYm94''@;'; put 'put ''LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGVdLC5jbHItY29tYm9ib3gtdHJpZ2dlciBjbHItaWNvbltzaGFwZT1hbmdsZV17Y29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LXRyaWdnZXItZm9udC1jb2xvcik7aGVpZ2h0OnZhcigtLWNsci1jb21ib2JveC1jYXJldC1pY29uLXNpemUpO3dp''@;'; put 'put ''ZHRoOnZhcigtLWNsci1jb21ib2JveC1jYXJldC1pY29uLXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLWNvbWJvYm94LWNhcmV0LWljb24tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1jb21ib2JveC1jYXJldC1pY29uLXNpemUpfS5jbHItY29tYm9ib3gtb3B0aW9uc3tkaXNwbGF5OmZs''@;'; put 'put ''ZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO2xlZnQ6MDttaW4td2lkdGg6Y2FsYygxMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24tYmctY29sb3IpO2JvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWJvcmRlci1jb2xvcik7Ym9yZGVy''@;'; put 'put ''LXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTtib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTIwMCk7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02''@;'; put 'put ''KSAwO3Zpc2liaWxpdHk6aGlkZGVuO3otaW5kZXg6MTA1MDtwb3NpdGlvbjpzdGF0aWM7bWF4LWhlaWdodDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7b3ZlcmZsb3cteTphdXRvO3Zpc2liaWxpdHk6dmlzaWJsZX0uY2xyLWNvbWJvYm94LW9wdGlvbnMgLmNsci1j''@;'; put 'put ''b21ib2JveC1vcHRpb25zLWxvYWRpbmd7cGFkZGluZzpjYWxjKDMqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSl9LmNsci1jb21ib2JveC1vcHRpb25zIC5jbHItY29tYm9ib3gtb3B0aW9ucy1sb2FkaW5nIC5jbHItY29tYm9ib3gtb3B0''@;'; put 'put ''aW9ucy1sb2FkaW5nLXRleHR7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9LmNsci1jb21ib2JveC1vcHRpb25zIC5jbHItY29tYm9ib3gtb3B0aW9ucy1lbXB0eS10ZXh0e3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5jbHItY29tYm9ib3gt''@;'; put 'put ''b3B0aW9ue2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2lu''@;'; put 'put ''Zzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWJnLWNvbG9yKTtib3JkZXI6MDtjdXJzb3I6cG9pbnRl''@;'; put 'put ''cjtkaXNwbGF5OmZsZXg7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDphdXRvO21hcmdpbjowO3dpZHRoOjEwMCU7dGV4dC10cmFuc2Zvcm06bm9uZX0uY2xyLWNvbWJvYm94LW9wdGlvbi5hY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWRyb3Bk''@;'; put 'put ''b3duLWl0ZW0tc2VsZWN0ZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYmctY29sb3IpfS5jbHItY29tYm9ib3gtb3B0aW9uOmhvdmVye2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWNvbG9yKTtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0uY2xyLWNvbWJvYm94LW9wdGlvbjpob3Zlci5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1ob3Zlci1iZy1jb2xv''@;'; put 'put ''cil9LmNsci1jb21ib2JveC1vcHRpb246YWN0aXZle2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtYmctY29sb3IpfS5jbHItY29tYm9ib3gtb3B0aW9uOmFjdGl2ZS5hY3Rp''@;'; put 'put ''dmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1hY3RpdmUtYmctY29sb3IpfS5jbHItY29tYm9ib3gtb3B0aW9uOmZvY3Vze3otaW5kZXg6aW5oZXJpdH0uY2xyLWNvbWJvYm94LW9wdGlvbi5kaXNhYmxlZCwuY2xyLWNvbWJvYm94LW9wdGlvbjpk''@;'; put 'put ''aXNhYmxlZHtwb2ludGVyLWV2ZW50czpub25lO2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWRpc2FibGVkLWJnLWNvbG9yKTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1z''@;'; put 'put ''ZWxlY3Q6bm9uZX0uY2xyLWNvbWJvYm94LW9wdGlvbi5kaXNhYmxlZDpob3ZlciwuY2xyLWNvbWJvYm94LW9wdGlvbjpkaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOjAgMH0uY2xyLWNvbWJvYm94LW9wdGlvbi5kaXNhYmxlZDphY3RpdmUsLmNsci1jb21ib2JveC1vcHRpb246ZGlzYWJsZWQ6''@;'; put 'put ''YWN0aXZle2JhY2tncm91bmQ6MCAwO2JveC1zaGFkb3c6bm9uZX0uY2xyLWNvbWJvYm94LW9wdGlvbi5jbHItZm9jdXN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtYWN0aXZlLWJhY2tncm91bmQtY29sb3IpfS5jbHItY29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94''@;'; put 'put ''LW9wdGlvbntwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsuY2xyLWNvbWJvYm94LW9wdGlvbnMgLmNsci1jb21ib2JveC1vcHRpb257cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpIHZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtOSl9fS5jbHItY29tYm9ib3gtZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWNvbWJvYm94LWRpc2FibGVkIC5jbHItY29tYm9ib3gtaW5wdXQsLmNsci1jb21ib2JveC1kaXNh''@;'; put 'put ''YmxlZCAuY2xyLWNvbWJvYm94LXJlbW92ZS1idG4sLmNsci1jb21ib2JveC1kaXNhYmxlZCAuY2xyLWNvbWJvYm94LXRyaWdnZXJ7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jbHItZmlsdGVyLWhpZ2hsaWdodCBie2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdl''@;'; put 'put ''aWdodC1zZW1pYm9sZCk7Y29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LWZpbHRlci1oaWdobGlnaHQpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLXN0YWNrLXZpZXctYm9yZGVyLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHItc3RhY2stdmlldy1i''@;'; put 'put ''b3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXN0YWNrLXZpZXctYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1zdGFjay1ibG9jay1jaGFuZ2VkLWJvcmRlci10b3AtY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLXN0YWNrLXZpZXctYm9yZGVyLWNvbG9yKTstLWNsci1zdGFjay12aWV3LXRpdGxlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItc3RhY2stdmlldy1yb3ctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAw''@;'; put 'put ''KTstLWNsci1zdGFjay12aWV3LXJvdy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLXN0''@;'; put 'put ''YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWhvdmVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIp''@;'; put 'put ''Oy0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYmctaG92ZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1iZy1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZSk7LS1jbHItc3RhY2stdmlldy1leHBhbmRlZC1yb3ctY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1zZWxlY3RlZCk7LS1jbHItc3RhY2stdmlldy1leHBhbmRlZC1yb3ctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLWhvdmVyLXJv''@;'; put 'put ''dy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtaG92ZXIpOy0tY2xyLXN0YWNrLXZpZXctZXhwYW5kZWQtYWN0aXZlLXJvdy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQt''@;'; put 'put ''c2VsZWN0ZWQtYWN0aXZlKTstLWNsci1zdGFjay12aWV3LXJvdy1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7LS1jbHItc3RhY2stdmlldy1yb3ctZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5''@;'; put 'put ''LWZvbnQtd2VpZ2h0KTstLWNsci1zdGFjay12aWV3LXJvdy1saW5lLWhlaWdodDpjYWxjKDIwICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItc3RhY2stdmlldy1yb3ctbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxl''@;'; put 'put ''dHRlci1zcGFjaW5nKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWJvcmRlci1ib3R0b206dmFyKC0tY2xyLXN0YWNrLXZpZXctYm9yZGVyLWNvbG9yKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWNoaWxkcmVuLXN0YWNrLWJsb2NrLWJvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LXN0YWNrLXZpZXctYm9yZGVyLWNvbG9yKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWNoaWxkcmVuLXN0YWNrLWJsb2NrLWxhYmVsLWFuZC1jb250ZW50LWJnLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWJnLWNvbG9yKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWNhcmV0LWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWNvbG9yKTstLWNsci1zdGFjay12aWV3LWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXJvdy1jb2xvcik7LS1jbHItc3RhY2stdmlldy1iZy1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1yb3ctYmctY29sb3IpOy0t''@;'; put 'put ''Y2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stbGFiZWwtZm9udC1zaXplOnZhcigtLWNsci1zdGFjay12aWV3LXJvdy1mb250LXNpemUpOy0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stbGFiZWwtZm9udC13ZWlnaHQ6dmFyKC0tY2xyLXN0YWNrLXZpZXctcm93LWZvbnQtd2VpZ2h0KTst''@;'; put 'put ''LWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWxhYmVsLWxpbmUtaGVpZ2h0OnZhcigtLWNsci1zdGFjay12aWV3LXJvdy1saW5lLWhlaWdodCk7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1sZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItc3RhY2stdmlldy1yb3ctbGV0dGVy''@;'; put 'put ''LXNwYWNpbmcpOy0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stZXhwYW5kZWQtYmctY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kZWQtcm93LWJnLWNvbG9yKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGFibGUtaG92ZXI6dmFyKC0tY2xyLXN0YWNrLXZp''@;'; put 'put ''ZXctZXhwYW5kYWJsZS1yb3ctaG92ZXIpOy0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stZXhwYW5kZWQtdGV4dC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1leHBhbmRlZC1yb3ctY29sb3IpfS5zdGFjay1oZWFkZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtZW5kfS5z''@;'; put 'put ''dGFjay1oZWFkZXIgLnN0YWNrLXRpdGxle2Rpc3BsYXk6YmxvY2s7ZmxleDoxIDEgYXV0bzttYXJnaW46MDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMDtjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy10aXRsZS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXIt''@;'; put 'put ''c3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nKX0uc3RhY2staGVhZGVyIC5zdGFjay1hY3Rpb25ze2Rpc3BsYXk6YmxvY2s7ZmxleDowIDAgYXV0b30uc3RhY2staGVhZGVyIC5zdGFjay1hY3Rpb25zIC5zdGFjay1hY3Rpb257bWlu''@;'; put 'put ''LXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpfS5zdGFjay12aWV3e292ZXJmbG93LXk6YXV0bzt3b3JkLXdyYXA6YnJlYWstd29yZDttYXJnaW4tdG9wOjA7Ym9yZGVyOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLXN0YWNrLXZpZXct''@;'; put 'put ''Ym9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1yYWRpdXMpfS5zdGFjay12aWV3IGRkLC5zdGFjay12aWV3IGR0e21hcmdpbi1pbmxpbmUtc3RhcnQ6MDttYXJnaW4tbGVmdDowfS5zdGFjay12aWV3IC5zdGFjay1ibG9ja3tkaXNwbGF5OmZs''@;'; put 'put ''ZXg7ZmxleC1mbG93OnJvdyB3cmFwO292ZXJmbG93LXk6aGlkZGVuO2JvcmRlci1ib3R0b20td2lkdGg6dmFyKC0tY2xyLXN0YWNrLXZpZXctYm9yZGVyLXdpZHRoKTtib3JkZXItYm90dG9tLXN0eWxlOnNvbGlkO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctc3Rh''@;'; put 'put ''Y2stYmxvY2stYm9yZGVyLWJvdHRvbSl9LnN0YWNrLXZpZXc+LnN0YWNrLWJsb2NrOmxhc3QtY2hpbGQsLnN0YWNrLXZpZXc+Omxhc3QtY2hpbGQgLnN0YWNrLWJsb2NrOmxhc3Qtb2YtdHlwZXtib3JkZXItYm90dG9tOm5vbmV9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNoYW5nZWQ6YmVm''@;'; put 'put ''b3Jle2NvbnRlbnQ6IiAiO3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDowO3dpZHRoOjA7Ym9yZGVyLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIHNvbGlkIHZhcigtLWNsci1zdGFjay1ibG9jay1jaGFuZ2VkLWJvcmRlci10b3AtY29sb3IpO2JvcmRlci1yaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTYpIHNvbGlkIHRyYW5zcGFyZW50fS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1jYXJldHthbGlnbi1zZWxmOmNlbnRlcn0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stbGFiZWx7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNikgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1iZy1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1z''@;'; put 'put ''dGFjay12aWV3LXN0YWNrLWJsb2NrLWxhYmVsLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stbGFiZWwtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWxhYmVsLWxpbmUtaGVpZ2h0''@;'; put 'put ''KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1sZXR0ZXItc3BhY2luZyk7ZmxleDoxIDEgYXV0bztkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1sYWJlbDpmb2N1c3tvdXRsaW5lLWNv''@;'; put 'put ''bG9yOkhpZ2hsaWdodDtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLXN0eWxlOmF1dG87b3V0bGluZS13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnN0''@;'; put 'put ''YWNrLXZpZXcgLnN0YWNrLXZpZXcta2V5e2ZsZXg6MCAxIDQwJTttYXgtd2lkdGg6NDAlO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1jYXJldHtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWNhcmV0LWNvbG9yKTttYXJnaW4tcmlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stY29udGVudHtmbGV4OjEgMSBhdXRvO3dpZHRoOjYwJTttYXJnaW4tYm90dG9tOjB9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNvbnRlbnQ+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0uc3RhY2stdmll''@;'; put 'put ''dyAuc3RhY2stYmxvY2stY29udGVudD46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVue2ZsZXg6MCAwIGF1dG87d2lkdGg6MTAwJX0uc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2Nre2JvcmRlci1ib3R0b20tY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLXN0YWNrLXZpZXctc3RhY2stY2hpbGRyZW4tc3RhY2stYmxvY2stYm9yZGVyLWJvdHRvbS1jb2xvcil9LnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuPi5zdGFjay1ibG9jazpsYXN0LWNoaWxkLC5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbj46bGFzdC1jaGlsZCAuc3Rh''@;'; put 'put ''Y2stYmxvY2s6bGFzdC1vZi10eXBle2JvcmRlci1ib3R0b206bm9uZX0uc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2NrLWxhYmVsLC5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbiAuc3RhY2stYmxvY2stY29udGVudHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1z''@;'; put 'put ''dGFjay12aWV3LXN0YWNrLWNoaWxkcmVuLXN0YWNrLWJsb2NrLWxhYmVsLWFuZC1jb250ZW50LWJnLWNvbG9yKX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stbGFiZWx7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYmctY29sb3IpO2N1cnNvcjpwb2ludGVyfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlPi5zdGFjay1i''@;'; put 'put ''bG9jay1sYWJlbDpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDoiIjtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS03KTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47dmVydGljYWwtYWxpZ246bWlkZGxlO2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHhtbG5z''@;'; put 'put ''JTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTIlMjAxMiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RlZnMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NzdHlsZSUzRS5jbHMtMSU3QmZpbGwlM0F2YXIo''@;'; put 'put ''LS1jbHItYWNjb3JkaW9uLXRleHQtY29sb3IpJTNCJTdEJTNDJTJGc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VDYXJldCUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIl''@;'; put 'put ''MjBkJTNEJTIyTTYlMkM5TDEuMiUyQzQuMmEwLjY4JTJDMC42OCUyQzAlMkMwJTJDMSUyQzEtMUw2JTJDNy4wOCUyQzkuODQlMkMzLjI0YTAuNjglMkMwLjY4JTJDMCUyQzElMkMxJTJDMSUyQzFaJTIyJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIik7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcp''@;'; put 'put ''O21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlPi5zdGFjay1ibG9jay1sYWJlbCwuc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stY29udGVudHt0cmFuc2l0aW9uOmJh''@;'; put 'put ''Y2tncm91bmQtY29sb3IgLjJzIGVhc2UtaW4tb3V0LGNvbG9yIC4ycyBlYXNlLWluLW91dH0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZTpub3QoLnN0YWNrLWJsb2NrLWV4cGFuZGVkKT4uc3RhY2stYmxvY2stbGFiZWw6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXN0YWNrLXZp''@;'; put 'put ''ZXctc3RhY2stYmxvY2stZXhwYW5kYWJsZS1ob3Zlcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1iZy1ob3Zlcil9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU6bm90KC5zdGFjay1ibG9jay1leHBhbmRlZCk+LnN0YWNr''@;'; put 'put ''LWJsb2NrLWxhYmVsOmhvdmVyIC5zdGFjay1ibG9jay1jYXJldHtmaWxsOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGFibGUtaG92ZXIpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlOm5vdCguc3RhY2stYmxvY2stZXhwYW5kZWQpPi5zdGFjay1i''@;'; put 'put ''bG9jay1sYWJlbDpob3ZlcjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYWN0aXZlKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWJnLWFjdGl2ZSl9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4''@;'; put 'put ''cGFuZGFibGU6bm90KC5zdGFjay1ibG9jay1leHBhbmRlZCk+LnN0YWNrLWJsb2NrLWxhYmVsOmhvdmVyOmFjdGl2ZSAuc3RhY2stYmxvY2stY2FyZXR7ZmlsbDp2YXIoLS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1hY3RpdmUpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBh''@;'; put 'put ''bmRhYmxlLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbHtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci13aWR0aCk7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1zdGFjay12''@;'; put 'put ''aWV3LXN0YWNrLWJsb2NrLWJvcmRlci1ib3R0b20pO2NvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLXRleHQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stZXhwYW5kZWQtYmctY29sb3IpfS5zdGFj''@;'; put 'put ''ay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbDpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSgwKX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZS5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxv''@;'; put 'put ''Y2stbGFiZWwgLnN0YWNrLWJsb2NrLWNhcmV0e2ZpbGw6dmFyKC0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stZXhwYW5kZWQtdGV4dC1jb2xvcil9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGUuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWxhYmVsOmhv''@;'; put 'put ''dmVye2NvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGFibGUtaG92ZXIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kZWQtaG92ZXItcm93LWJnLWNvbG9yKX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZS5z''@;'; put 'put ''dGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stbGFiZWw6aG92ZXIgLnN0YWNrLWJsb2NrLWNhcmV0e2ZpbGw6dmFyKC0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stZXhwYW5kYWJsZS1ob3Zlcil9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGUuc3RhY2stYmxv''@;'; put 'put ''Y2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWxhYmVsOmhvdmVyOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1hY3RpdmUpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kZWQtYWN0aXZlLXJvdy1iZy1jb2xvcil9LnN0''@;'; put 'put ''YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGUuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWxhYmVsOmhvdmVyOmFjdGl2ZSAuc3RhY2stYmxvY2stY2FyZXR7ZmlsbDp2YXIoLS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1hY3RpdmUpfS5tb2RhbCAuc3Rh''@;'; put 'put ''Y2stdmlld3ttYXJnaW4tYm90dG9tOjB9LnN0YWNrLXZpZXcgY2xyLXN0YWNrLWJsb2NrLnN0YWNrLWJsb2NrLWV4cGFuZGFibGUgLnN0YWNrLWJsb2NrLWxhYmVsOmJlZm9yZXtjb250ZW50Om5vbmV9LnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIGNsci1zdGFjay1ibG9jayAuc3RhY2st''@;'; put 'put ''YmxvY2stbGFiZWwgLnN0YWNrLXZpZXcta2V5LC5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbiAuc3RhY2stYmxvY2stbGFiZWwgLnN0YWNrLXZpZXcta2V5e3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbiBjbHItc3Rh''@;'; put 'put ''Y2stYmxvY2sgLnN0YWNrLWJsb2NrLWxhYmVsOmJlZm9yZSwuc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2NrLWxhYmVsOmJlZm9yZXtkaXNwbGF5Om5vbmV9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItdHJlZS1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXRyZWUtbGluay1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpOy0tY2xyLXRyZWUtbGluay1zZWxlY3Rpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFj''@;'; put 'put ''dGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci10cmVlLWxpbmstdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci10cmVlLW5vZGUtY2FyZXQtbGluay1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLWNvbG9yLWhvdmVyKTstLWNsci10cmVlLW5vZGUtY2FyZXQtbGluay1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXRyZWUtbm9kZS1jYXJldC1saW5rLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLXRyZWUtbm9kZS1jYXJldC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci10cmVlLW5vZGUtY2FyZXQtaG92ZXItY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jYXJldC1s''@;'; put 'put ''aW5rLWhvdmVyLWNvbG9yKTstLWNsci10cmVlLW5vZGUtY2FyZXQtYWN0aXZlLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY2FyZXQtbGluay1hY3RpdmUtY29sb3IpOy0tY2xyLXRyZWUtbm9kZS1jYXJldC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWxpbmst''@;'; put 'put ''ZGlzYWJsZWQtY29sb3IpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LXRleHQtb25seS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbG9yOnZhcigtLWNsci10cmVlLWxpbmstdGV4dC1jb2xvcik7LS1jbHItdHJl''@;'; put 'put ''ZS1ub2RlLWNvbnRlbnQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50''@;'; put 'put ''LWJnLWhvdmVyLWNvbG9yOnZhcigtLWNsci10cmVlLWxpbmstaG92ZXItY29sb3IpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctYWN0''@;'; put 'put ''aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LXNlbGVjdGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3Itc2VsZWN0ZWQpOy0tY2xyLXRyZWUt''@;'; put 'put ''bm9kZS1jb250ZW50LWJnLXNlbGVjdGVkLWNvbG9yOnZhcigtLWNsci10cmVlLWxpbmstc2VsZWN0aW9uLWNvbG9yKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1zZWxlY3RlZC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2Vs''@;'; put 'put ''ZWN0ZWQtaG92ZXIpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLXNlbGVjdGVkLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtYWN0aXZlKTstLWNsci10cmVlLW5vZGUtY29udGVudC1kaXNhYmxlZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApfS5jbHItdHJlZS1ub2Rle2Rpc3BsYXk6YmxvY2t9LmNsci10cmVlLW5vZGUuZGlzYWJsZWQg''@;'; put 'put ''LmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXJ7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtbGlua3twb2ludGVyLWV2ZW50czpub25lfS5jbHItdHJlZS1ub2RlLmRp''@;'; put 'put ''c2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtbGluaywuY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNvbnRlbnQsLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNs''@;'; put 'put ''ci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jaGVja2JveHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1kaXNhYmxlZC1jb2xvcil9LmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1j''@;'; put 'put ''b250YWluZXIgLmNsci10cmVlbm9kZS1saW5rLC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY29udGVudCwuY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAu''@;'; put 'put ''Y2xyLXRyZWVub2RlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdKy5jbHItY29udHJvbC1sYWJlbHtjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtZGlzYWJsZWQtY29sb3IpfS5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFp''@;'; put 'put ''bmVyIC5jbHItdHJlZW5vZGUtbGluayBjZHMtaWNvbiwuY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWxpbmsgY2xyLWljb24sLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1j''@;'; put 'put ''b250YWluZXIgLmNsci10cmVlbm9kZS1jb250ZW50IGNkcy1pY29uLC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY29udGVudCBjbHItaWNvbiwuY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9k''@;'; put 'put ''ZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdKy5jbHItY29udHJvbC1sYWJlbCBjZHMtaWNvbiwuY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNo''@;'; put 'put ''ZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdKy5jbHItY29udHJvbC1sYWJlbCBjbHItaWNvbntmaWxsOnZhcigtLWNsci10cmVlLW5vZGUtY2FyZXQtZGlzYWJsZWQtY29sb3IpfS5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHIt''@;'; put 'put ''dHJlZW5vZGUtY2FyZXR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY2FyZXQgY2RzLWljb24sLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVu''@;'; put 'put ''dC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jYXJldCBjbHItaWNvbntmaWxsOnZhcigtLWNsci10cmVlLW5vZGUtY2FyZXQtZGlzYWJsZWQtY29sb3IpfS5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Zm9udC1zaXplOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVp''@;'; put 'put ''Z2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyPi5jbHItdHJlZW5vZGUtY2hlY2tib3guY2xyLWNoZWNrYm94LXdyYXBwZXJ7d2lkdGg6MTAwJTtwYWRk''@;'; put 'put ''aW5nOjAgMCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXI+LmNsci10cmVlbm9kZS1jaGVja2JveC5jbHItY2hlY2tib3gtd3JhcHBlcjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKX0u''@;'; put 'put ''Y2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lcj4uY2xyLXRyZWVub2RlLWNoZWNrYm94LmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHt3aWR0aDoxMDAlO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUp''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMH0uY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lcjpmb2N1cy12aXNpYmxle291dGxpbmU6MH0uY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lcjpmb2N1cz4uY2xyLXRyZWVub2RlLWNvbnRlbnQsLmNsci10cmVlLW5vZGUtY29u''@;'; put 'put ''dGVudC1jb250YWluZXI6Zm9jdXM+LmNsci10cmVlbm9kZS1jaGVja2JveHtvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkpO291dGxpbmUtY29sb3I6SGlnaGxpZ2h0O291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5n''@;'; put 'put ''LWNvbG9yO291dGxpbmUtc3R5bGU6YXV0bztvdXRsaW5lLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCl9LmNsci10cmVlbm9kZS1jb250ZW50e2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjttaW4taGVpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtMTApO2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC10ZXh0LW9ubHktY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci10cmVlLWJvcmRlci1y''@;'; put 'put ''YWRpdXMpIDAgMCB2YXIoLS1jbHItdHJlZS1ib3JkZXItcmFkaXVzKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQ6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCl9LmNsci10cmVlbm9kZS1jb250ZW50Om5vdCg6aGFzKC5jbHItdHJlZW5vZGUtbGluaykp''@;'; put 'put ''e3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5jbHItdHJlZW5vZGUtY29udGVudCBjZHMtaWNvbiwuY2xyLXRyZWVub2RlLWNvbnRlbnQgY2xyLWljb257aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03''@;'; put 'put ''KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LXRleHQtb25seS1jb2xvcik7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7''@;'; put 'put ''dmVydGljYWwtYWxpZ246bWlkZGxlfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbmsuYWN0aXZlLC5jbHItdHJlZW5vZGUtY2hlY2tib3g6aGFzKGlucHV0W3R5cGU9Y2hlY2tib3hdOm5vdCg6ZGlzYWJsZWQpOmNoZWNrZWQpe2NvbG9yOnZhcigtLWNsci10cmVlLW5v''@;'; put 'put ''ZGUtY29udGVudC1zZWxlY3RlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctc2VsZWN0ZWQtY29sb3IpfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbmssLmNsci10cmVlbm9kZS1jaGVja2JveHtib3JkZXItcmFk''@;'; put 'put ''aXVzOnZhcigtLWNsci10cmVlLWJvcmRlci1yYWRpdXMpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rOmhvdmVyLC5jbHItdHJlZW5vZGUtY2hlY2tib3g6aG92ZXJ7''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctaG92ZXItY29sb3IpfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbms6YWN0aXZlLC5jbHItdHJlZW5vZGUtY2hlY2tib3g6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LXRyZWUtbm9kZS1jb250ZW50LWJnLWFjdGl2ZS1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluaywuY2xyLXRyZWVub2RlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdKy5jbHItY29udHJvbC1sYWJlbHtjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2Rl''@;'; put 'put ''LWNvbnRlbnQtY29sb3IpfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbmsgY2RzLWljb24sLmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluayBjbHItaWNvbiwuY2xyLXRyZWVub2RlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdKy5jbHIt''@;'; put 'put ''Y29udHJvbC1sYWJlbCBjZHMtaWNvbiwuY2xyLXRyZWVub2RlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdKy5jbHItY29udHJvbC1sYWJlbCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29sb3IpfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRy''@;'; put 'put ''ZWVub2RlLWxpbms6aG92ZXIsLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWw6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWhvdmVyLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVl''@;'; put 'put ''bm9kZS1saW5rOmhvdmVyIGNkcy1pY29uLC5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbms6aG92ZXIgY2xyLWljb24sLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWw6aG92ZXIgY2RzLWljb24sLmNsci10''@;'; put 'put ''cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWw6aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWhvdmVyLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rOmFjdGl2''@;'; put 'put ''ZSwuY2xyLXRyZWVub2RlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdKy5jbHItY29udHJvbC1sYWJlbDphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWFjdGl2ZS1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluazphY3Rp''@;'; put 'put ''dmUgY2RzLWljb24sLmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluazphY3RpdmUgY2xyLWljb24sLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWw6YWN0aXZlIGNkcy1pY29uLC5jbHItdHJlZW5vZGUtY2hl''@;'; put 'put ''Y2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYWN0aXZlLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rLmFjdGl2ZTpob3Zlciwu''@;'; put 'put ''Y2xyLXRyZWVub2RlLWNoZWNrYm94OmhhcyhpbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKTpjaGVja2VkKTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1zZWxlY3RlZC1ob3Zlci1jb2xvcil9LmNsci10cmVlbm9kZS1jb250''@;'; put 'put ''ZW50IC5jbHItdHJlZW5vZGUtbGluay5hY3RpdmU6YWN0aXZlLC5jbHItdHJlZW5vZGUtY2hlY2tib3g6aGFzKGlucHV0W3R5cGU9Y2hlY2tib3hdOm5vdCg6ZGlzYWJsZWQpOmNoZWNrZWQpOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1z''@;'; put 'put ''ZWxlY3RlZC1hY3RpdmUtY29sb3IpfS5jbHItdHJlZW5vZGUtY2FyZXR7ZmxleDowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7bWFyZ2luOjA7cGFkZGluZzowO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtt''@;'; put 'put ''aW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDtjdXJzb3I6cG9pbnRlcjtjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWNvbG9yKX0uY2xyLXRyZWVub2Rl''@;'; put 'put ''LWNhcmV0OmhvdmVye2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY2FyZXQtaG92ZXItY29sb3IpfS5jbHItdHJlZW5vZGUtY2FyZXQ6YWN0aXZle2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY2FyZXQtYWN0aXZlLWNvbG9yKX0uY2xyLXRyZWUtbm9kZS1jYXJldC1pY29ue2hlaWdodDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7dmVydGljYWwtYWxpZ246bWlkZGxlfS5jbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO3dpZHRoOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtMTApO3BhZGRpbmc6Y2FsYygodmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKSouNSl9LmNsci10cmVlbm9kZS1zcGlubmVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItdHJlZW5vZGUtY2hpbGRyZW57bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7d2lsbC1jaGFuZ2U6aGVpZ2h0O292''@;'; put 'put ''ZXJmbG93LXk6aGlkZGVufS5jbHItdHJlZW5vZGUtbGlua3tkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO21hcmdpbjowO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtib3JkZXI6MDtjdXJzb3I6cG9pbnRlcjt0ZXh0LWFsaWduOmxlZnR9LmNsci10cmVlbm9kZS1saW5rOmhvdmVyLC5jbHItdHJlZW5vZGUtbGluazpmb2N1c3t0ZXh0LWRlY29yYXRpb246bm9uZX06cm9vdCBbY2RzLXRoZW1lXXst''@;'; put 'put ''LWNsci1kYXRhZ3JpZC1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItZGF0YWdyaWQtZGVmYXVsdC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWRhdGFncmlkLWljb24tY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItZGF0YWdyaWQtcm93LWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItZGF0YWdyaWQtcm93LWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci1kYXRhZ3JpZC1yb3ctaG92ZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWRhdGFncmlkLWFjdGlvbi10b2dnbGUtY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLWRhdGFncmlkLXBhZ2luYXRpb24tYnRuLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRhdGFncmlkLXBhZ2luYXRpb24tYnRuLWRpc2FibGVkLWNvbG9yOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWRhdGFncmlkLXBhZ2luYXRpb24taW5wdXQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWlucHV0LWJvcmRlci1mb2N1cy1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcik7LS1jbHItZGF0YWdyaWQtcG9wb3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJv''@;'; put 'put ''cmRlci1jb2xvcik7LS1jbHItZGF0YWdyaWQtcG9wb3Zlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItZGF0YWdyaWQtYWN0aW9uLXBvcG92ZXItaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNr''@;'; put 'put ''Z3JvdW5kLWhvdmVyKTstLWNsci1kYXRhZ3JpZC1yb3ctc2VsZWN0ZWQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1kYXRhZ3JpZC1yb3ctc2VsZWN0ZWQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tn''@;'; put 'put ''cm91bmQtc2VsZWN0ZWQpOy0tY2xyLWRhdGFncmlkLXJvdy1zZWxlY3RlZC1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtYWN0aXZlKTstLWNsci1kYXRhZ3JpZC1yb3ctc2VsZWN0ZWQtaG92ZXIt''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtaG92ZXIpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi1zd2l0Y2gtaGVhZGVyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xv''@;'; put 'put ''cik7LS1jbHItZGF0YWdyaWQtY29sdW1uLXN3aXRjaC1oZWFkZXItZm9udC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tc3dpdGNoLWhlYWRlci1mb250LWhvdmVyLWFjdGl2ZTp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb24tb3Blbi1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTstLWNsci1kYXRhZ3JpZC1kZXRh''@;'; put 'put ''aWwtY2FyZXQtaWNvbi1vcGVuLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0yMDApOy0tY2xyLWRhdGFncmlkLWxv''@;'; put 'put ''YWRpbmctYmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZHJvcC1iYWNrZ3JvdW5kKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWdhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtcGFkZGlu''@;'; put 'put ''ZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1ib3JkZXItY29sb3IpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jbHItYnRu''@;'; put 'put ''LWRlZmF1bHQtZGlzYWJsZWQtY29sb3IpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtYm9yZGVyLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtaG92ZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXRleHQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWJv''@;'; put 'put ''cmRlci1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1ib3JkZXItY29sb3IpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWRhdGFncmlkLWNv''@;'; put 'put ''bHVtbi10b2dnbGUtdGV4dC1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1jb250ZW50LXBhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1j''@;'; put 'put ''bG9zZS1pY29uLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1kYXRhZ3JpZC1kZXRhaWwtYm9keS10ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLWhlYWRlci10aXRsZS1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplKTstLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTstLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1sZXR0ZXItc3BhY2luZzp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxldHRlci1zcGFjaW5nKTstLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWRhdGFncmlkLXBvcG92ZXJzLWJveC1zaGFk''@;'; put 'put ''b3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMTAwKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yLWhlaWdodDpjYWxjKDEwMCUgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yLXdpZHRoOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMSk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXJlc2l6ZS1oYW5kbGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03''@;'; put 'put ''KTstLWNsci1kYXRhZ3JpZC1mb290ZXItcGFnaW5hdGlvbi1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTstLWNsci1kYXRhZ3JpZC1maXhlZC1jb2x1bW4tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yLWV4cGFuZGJ5''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItZGF0YWdyaWQtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItZGF0YWdyaWQtYWN0aW9uLWFycm93LXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KTstLWNsci1kYXRhZ3JpZC1jb21wYWN0LW91dGxp''@;'; put 'put ''bmUtb2Zmc2V0OmNhbGMoLTEgKiB0b2tlbnMuJGNkcy1nbG9iYWwtc3BhY2UtMyk7LS1jbHItZGF0YWdyaWQtaG9yaXpvbnRhbC1wYWRkaW5nOm1peGlucy5iYXNlbGluZVB4KDkpfS5kYXRhZ3JpZHtib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7Ym9yZGVyOnZhcigtLWNsci10YWJsZS1ib3Jk''@;'; put 'put ''ZXJ3aWR0aCkgc29saWQgdmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdGFibGUtYm9yZGVyLXJhZGl1cyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYmdjb2xvcik7Y29sb3I6dmFyKC0tY2xyLXRhYmxlLWZvbnQtY29sb3Ip''@;'; put 'put ''O21hcmdpbjp2YXIoLS1jbHItdGFibGUtbWFyZ2luKTttYXgtd2lkdGg6MTAwJTt3aWR0aDoxMDAlfS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1uLC5kYXRhZ3JpZCAuZGF0YWdyaWQtY2VsbHtib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6dmFyKC0tY2xyLXRhYmxl''@;'; put 'put ''LWJvcmRlcndpZHRoKTtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci10YWJsZXJvdy1ib3JkZXJjb2xvcik7cGFkZGluZzp2YXIoLS1jbHItdGFibGUtY2VsbC1wYWRkaW5nKTt0ZXh0LWFsaWduOmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmRhdGFncmlkIC5kYXRhZ3JpZC1jb2x1bW4u''@;'; put 'put ''bGVmdCwuZGF0YWdyaWQgLmRhdGFncmlkLWNlbGwubGVmdHt0ZXh0LWFsaWduOmxlZnR9LmRhdGFncmlkIC5kYXRhZ3JpZC1jb2x1bW4ubGVmdDpmaXJzdC1jaGlsZCwuZGF0YWdyaWQgLmRhdGFncmlkLWNlbGwubGVmdDpmaXJzdC1jaGlsZHtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS03KX0uZGF0YWdyaWQgLmRhdGFncmlkLWNvbHVtbi5yaWdodCwuZGF0YWdyaWQgLmRhdGFncmlkLWNlbGwucmlnaHR7dGV4dC1hbGlnbjpyaWdodH0uZGF0YWdyaWQgLmRhdGFncmlkLWNlbGx7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtmb250LXNpemU6''@;'; put 'put ''dmFyKC0tY2xyLXRhYmxlLWRhdGEtY2VsbC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci10YWJsZS1kYXRhLWNlbGwtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci10YWJsZS1kYXRhLWNlbGwtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyl9LmRhdGFncmlkIC5kYXRhZ3JpZC1jb2x1bW57Y29sb3I6dmFyKC0tY2xyLXRoZWFkLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRl''@;'; put 'put ''ci1zcGFjaW5nKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLWJvdHRvbS1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKTtib3JkZXItdG9wOjAgbm9uZX0uZGF0YWdyaWQgLmRhdGFncmlkLWJvZHkgLmRhdGFncmlkLXJvdzpmaXJzdC1jaGlsZCAuZGF0YWdyaWQtY2VsbHtib3JkZXItdG9wOjAgbm9uZX0uZGF0YWdyaWQgLmRhdGFncmlkLWJvZHkrLmRh''@;'; put 'put ''dGFncmlkLWJvZHl7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKX0uZGF0YWdyaWQgLmRhdGFncmlkLWhlYWRlciAuZGF0YWdyaWQt''@;'; put 'put ''Y29sdW1uOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0uZGF0YWdyaWQgLmRhdGFncmlkLWhlYWRlciAuZGF0YWdyaWQtY29sdW1uOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2Jv''@;'; put 'put ''cmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0uZGF0YWdyaWQgLmRhdGFncmlkLWJvZHk6bGFzdC1jaGlsZCAuZGF0YWdyaWQtcm93Omxhc3QtY2hpbGQgLmRhdGFncmlkLWNlbGw6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRl''@;'; put 'put ''ci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS5kYXRhZ3JpZCAuZGF0YWdyaWQtYm9keTpsYXN0LWNoaWxkIC5kYXRhZ3JpZC1yb3c6bGFzdC1jaGlsZCAuZGF0YWdyaWQtY2VsbDpsYXN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXIt''@;'; put 'put ''Ym90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cyl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWNvbHVtbiwuZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtY2VsbHttaW4taGVpZ2h0OnZhcigtLWNsci10YWJsZS1jb21wYWN0LXJvdy1oZWln''@;'; put 'put ''aHQpO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLWNlbGwtY29tcGFjdC1wYWRkaW5nKX0uZGF0YWdyaWQtaG9zdHtkaXNwbGF5OmZsZXg7ZmxleC1mbG93OmNvbHVtbiBub3dyYXA7cG9zaXRpb246cmVsYXRpdmV9LmRhdGFncmlke2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXIt''@;'; put 'put ''Ym90dG9tLXJpZ2h0LXJhZGl1czowOy1tcy1vdmVyZmxvdy1zdHlsZTotbXMtYXV0b2hpZGluZy1zY3JvbGxiYXI7b3ZlcmZsb3c6YXV0bztmbGV4OjEgMSBhdXRvO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uZGF0YWdyaWQuY2RrLXZpcnR1YWwtc2Nyb2xsYWJsZSAu''@;'; put 'put ''ZGF0YWdyaWQtcm93c3tmbGV4LWdyb3c6MH0uZGF0YWdyaWQtb3ZlcmZsb3ctZWxsaXBzaXMgLmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2Nyb2xsaW5nLWNlbGxzPi5kYXRhZ3JpZC1jZWxse3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3Jh''@;'; put 'put ''cH0uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikgdmFyKC0tY2xyLWRhdGFncmlkLWhvcml6b250YWwtcGFkZGluZykgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt0ZXh0LWFsaWduOmNlbnRlcn0uZGF0YWdyaWQtZXhwYW5kYWJs''@;'; put 'put ''ZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRp''@;'; put 'put ''dXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApfWJ1dHRvbi5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5kYXRhZ3JpZC1leHBh''@;'; put 'put ''bmRhYmxlLWNhcmV0LWJ1dHRvbntjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1pY29ue2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLWNvbG9yKX0uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdy''@;'; put 'put ''aWQtZXhwYW5kYWJsZS1jYXJldC1pY29uIHN2Z3t0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXR9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLnNwaW5uZXJ7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfS5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0''@;'; put 'put ''LmRhdGFncmlkLWNvbHVtbntwYWRkaW5nOnZhcigtLWNsci10YWJsZS10b3BjZWxscGFkZGluZykgdmFyKC0tY2xyLXRhYmxlLWNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtYm90dG9tY2VsbHBhZGRpbmcpfS5kYXRhZ3JpZC1oZWFkZXIsLmRhdGFncmlkLWJvZHksLmRhdGFncmlkLXJv''@;'; put 'put ''dywuZGF0YWdyaWQtY29sdW1uLC5kYXRhZ3JpZC1jZWxsLC5kYXRhZ3JpZC1maXhlZC1jb2x1bW57ZGlzcGxheTpibG9ja30uZGF0YWdyaWQtcm93e2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci10b3At''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcil9LmRhdGFncmlkLXJvdzpmaXJzdC1vZi10eXBle2JvcmRlci10b3A6bm9uZX0uZGF0YWdyaWQtcm93OmhvdmVyLC5kYXRhZ3JpZC1yb3c6aG92ZXIgLmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItZGF0YWdyaWQtcm93LWhvdmVyLWNvbG9yKX0uZGF0YWdyaWQtcm93LmRhdGFncmlkLXNlbGVjdGVkLC5kYXRhZ3JpZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQgLmRhdGFncmlkLXJvdy1zdGlja3l7Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1zZWxlY3RlZCk7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkLWJhY2tncm91bmQtY29sb3IpfS5kYXRhZ3JpZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQ6aG92ZXIsLmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1zZWxlY3RlZDpob3ZlciAuZGF0YWdyaWQtcm93LXN0aWNreXtiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1kYXRhZ3JpZC1yb3ctc2VsZWN0ZWQtaG92ZXItYmFja2dyb3VuZC1jb2xvcil9LmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1zZWxlY3RlZDphY3RpdmUsLmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1zZWxlY3RlZDphY3RpdmUgLmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKX0uZGF0YWdyaWQtcm93OmFjdGl2ZSwuZGF0YWdyaWQtcm93OmFjdGl2ZSAuZGF0YWdyaWQtcm93LXN0aWNreXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3Jp''@;'; put 'put ''ZC1yb3ctYWN0aXZlLWNvbG9yKX0uZGF0YWdyaWQtcm93LmRhdGFncmlkLXJvdy1za2VsZXRvbntiYWNrZ3JvdW5kLWNvbG9yOnVuc2V0fS5kYXRhZ3JpZC1yb3cuZGF0YWdyaWQtcm93LXNrZWxldG9uIC5kYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSwuZGF0YWdyaWQtcm93LmRhdGFncmlkLXJv''@;'; put 'put ''dy1za2VsZXRvbiAuZGF0YWdyaWQtcm93LXN0aWNreXtkaXNwbGF5Om5vbmV9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtcm93LWRldGFpbC13cmFwcGVye2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpmbGV4fS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXJvdy1kZXRhaWx7d2lkdGg6YXV0b30uZGF0''@;'; put 'put ''YWdyaWQtcm93IC5kYXRhZ3JpZC1yb3ctZGV0YWlsIC5kYXRhZ3JpZC1jZWxse3BhZGRpbmctdG9wOjA7Ym9yZGVyOjB9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtY2VsbC5kYXRhZ3JpZC1jb250YWluZXJ7Zm9udC1zaXplOnZhcigtLWNsci10YWJsZS1m''@;'; put 'put ''b250c2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''Ym9keS1sZXR0ZXItc3BhY2luZyl9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2VsZWN0e21pbi13aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgLSB2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpKTthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTMpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2VsZWN0LC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVjdCBpbnB1dHtjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zZWxlY3QuY2xyLWZvcm0tY29u''@;'; put 'put ''dHJvbC1kaXNhYmxlZCwuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zZWxlY3QuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCBpbnB1dHtjdXJzb3I6bm90LWFsbG93ZWR9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAuc2lnbnBvc3R7bWFyZ2luOmNhbGMoLTEqdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS01KSkgMDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIC5zaWducG9zdCAuc2lnbnBvc3QtdHJpZ2dlcntoZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTkpfS5kYXRhZ3JpZC1yb3cuZGF0YWdyaWQtcm93LWxvYWRpbmcgLmRhdGFncmlkLXJvdy1zdGlja3l7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1yb3cuZGF0YWdyaWQtcm93LWxvYWRpbmcgLmRhdGFncmlkLWNlbGx7ZGlzcGxheTpmbGV4O3BhZGRpbmc6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS05KTthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uZGF0YWdyaWQtcm93LXN0aWNreXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10YWJsZS1iZ2NvbG9yKTtkaXNwbGF5OmZsZXg7''@;'; put 'put ''ZmxleC13cmFwOm5vd3JhcDtwb3NpdGlvbjpzdGlja3k7bGVmdDowO3otaW5kZXg6NTAwfS5kYXRhZ3JpZC1yb3ctc3RpY2t5IC5kYXRhZ3JpZC1jZWxsOmxhc3QtY2hpbGQ6YWZ0ZXJ7Y29udGVudDoiIjt3aWR0aDp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci13aWR0aCk7''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yLWhlaWdodCk7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS5kYXRhZ3JpZC1y''@;'; put 'put ''b3ctc2Nyb2xsYWJsZXtmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6Y29sdW1uIG5vd3JhcH0uZGF0YWdyaWQtcm93LXNjcm9sbGFibGUuaXMtcmVwbGFjZWR7ZmxleC1kaXJlY3Rpb246cm93fS5kYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZS5pcy1yZXBsYWNlZCAuZGF0YWdy''@;'; put 'put ''aWQtc2Nyb2xsaW5nLWNlbGxze2ZsZXg6MCAwIGF1dG99LmRhdGFncmlkLXJvdy1zY3JvbGxhYmxlIC5kYXRhZ3JpZC1jb2x1bW46bGFzdC1jaGlsZCAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvcntkaXNwbGF5Om5vbmV9LmRhdGFncmlkLXJvdy1mbGV4e2ZsZXg6MSAxIGF1dG87ZGlzcGxh''@;'; put 'put ''eTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93cmFwfS5kYXRhZ3JpZC1yb3ctZmxleCAuZGF0YWdyaWQtcm93LWRldGFpbHtkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyBub3dyYXB9LmRhdGFncmlkLXJvdy1mbGV4IC5kYXRhZ3JpZC1yb3ctZGV0YWlsIC5kYXRhZ3JpZC1jZWxse3BhZGRpbmct''@;'; put 'put ''dG9wOjB9LmRhdGFncmlkLXNjcm9sbGluZy1jZWxscywuZGF0YWdyaWQtc2Nyb2xsaW5nLWRldGFpbHN7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87ZmxleC1mbG93OnJvdyBub3dyYXB9LmRhdGFncmlkLWFjdGlvbi1iYXJ7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkp''@;'; put 'put ''fS5kYXRhZ3JpZC1hY3Rpb24tYmFyfi5kYXRhZ3JpZC1zcGlubmVye2hlaWdodDpjYWxjKDEwMCUgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtaGVhZGVye3Bvc2l0aW9uOnN0aWNreTt0b3A6MDt6LWluZGV4OjUw''@;'; put 'put ''MTt3aWR0aDphdXRvfS5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbntib3JkZXItYm90dG9tOm5vbmV9LmRhdGFncmlkLWhlYWRlciAuZGF0YWdyaWQtcm93e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRoZWFkLWJnY29sb3IpO2JvcmRlci10b3A6bm9uZTtib3JkZXItYm90''@;'; put 'put ''dG9tLXN0eWxlOnNvbGlkO2JvcmRlci1ib3R0b20td2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLXJvdyAuZGF0YWdy''@;'; put 'put ''aWQtcm93LXN0aWNreXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKTt6LWluZGV4OjUwMn0uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1yb3c6aG92ZXIsLmRhdGFncmlkLWhlYWRlciAuZGF0YWdyaWQtcm93OmhvdmVyIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRoZWFkLWJnY29sb3IpfS5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLXJvdy1zY3JvbGxhYmxle2ZsZXgtZGlyZWN0aW9uOnJvd30uZGF0YWdyaWQtdGFibGUtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bzttaW4taGVpZ2h0OjEw''@;'; put 'put ''MCV9LmRhdGFncmlkLXRhYmxlLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcm93c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXg6MSAxIGF1dG99LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1ib2R5e3dpZHRoOmF1dG99LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3Jp''@;'; put 'put ''ZC1jb2x1bW57cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpsZWZ0O21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTE1KTtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bzt2ZXJ0aWNhbC1hbGlnbjp0b3A7Ym9yZGVyOjB9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1''@;'; put 'put ''bW46Zm9jdXN7b3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpO291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSl9LmRhdGFncmlkLXRhYmxl''@;'; put 'put ''IC5kYXRhZ3JpZC1jb2x1bW4gY2xyLWRnLWZpbHRlciwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiBjbHItZGctc3RyaW5nLWZpbHRlciwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiBjbHItZGctbnVtZXJpYy1maWx0ZXJ7ZGlzcGxheTpmbGV4O29yZGVyOjk5O21h''@;'; put 'put ''cmdpbi1sZWZ0OmF1dG87YWxpZ24taXRlbXM6Y2VudGVyfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1udW1lcmljLWZpbHRlci1pbnB1dHt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTE0KX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAu''@;'; put 'put ''ZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItaW5wdXQgLmNsci1mb3JtLWNvbnRyb2x7bWFyZ2luLXRvcDowfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xley13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1t''@;'; put 'put ''cy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2Zsb2F0OnJpZ2h0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtoZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLWRhdGFncmlkLWZpbHRlci10b2dnbGUtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpbHRlci10b2dnbGUtc2l6ZSk7bWluLWhlaWdodDp2YXIoLS1jbHItZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZS1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLWRhdGFncmlk''@;'; put 'put ''LWZpbHRlci10b2dnbGUtc2l6ZSk7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW59YnV0dG9uLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRl''@;'; put 'put ''ci10b2dnbGV7Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRlci10b2dnbGUgY2RzLWljb24sLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRlci10b2dnbGUgY2xyLWljb257Y29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcil9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRlci10b2dnbGU6aG92ZXIgY2RzLWljb24sLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRlci10b2dn''@;'; put 'put ''bGU6aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcil9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRlci10b2dnbGUuZGF0YWdyaWQtZmlsdGVyLW9wZW4gY2RzLWljb24sLmRhdGFn''@;'; put 'put ''cmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRlci10b2dnbGUuZGF0YWdyaWQtZmlsdGVyLW9wZW4gY2xyLWljb257Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29s''@;'; put 'put ''dW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlcmVkIGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlcmVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24tY29sb3Itc2VsZWN0ZWQpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uLmRhdGFncmlkLWZpeGVkLXdpZHRoe2ZsZXg6MCAwIGF1dG99LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1mbGV4e2Rpc3BsYXk6Zmxl''@;'; put 'put ''eDtmbGV4OjEgMSBhdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tdGl0bGV7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7''@;'; put 'put ''cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7Y29sb3I6dmFyKC0tY2xyLXRhYmxlLWZvbnQtY29sb3IpO3RleHQtYWxpZ246bGVmdDtmbGV4OjEgMSBhdXRvO2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1zZWxmOmNlbnRl''@;'; put 'put ''cjtkaXNwbGF5OmZsZXh9YnV0dG9uLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi10aXRsZXtjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXRpdGxlIC5zaWducG9zdCAuc2lnbnBv''@;'; put 'put ''c3QtYWN0aW9uLmJ0bntoZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0fS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tdGl0bGUgLmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHttYXJnaW4tdG9wOmNhbGMoLTEq''@;'; put 'put ''MTAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIGJ1dHRvbi5kYXRhZ3JpZC1jb2x1bW4tdGl0bGU6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFn''@;'; put 'put ''cmlkLWNvbHVtbiBidXR0b24uZGF0YWdyaWQtY29sdW1uLXRpdGxlIC5zb3J0LWljb257Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7bWFyZ2luLWxlZnQ6YXV0bztoZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLWljb24tc2l6ZSk7d2lkdGg6dmFyKC0t''@;'; put 'put ''Y2xyLWRhdGFncmlkLWljb24tc2l6ZSk7dmVydGljYWwtYWxpZ246bWlkZGxlfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIGJ1dHRvbi5kYXRhZ3JpZC1jb2x1bW4tdGl0bGUgLnNvcnQtaWNvbjpob3Zlcntjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LWNvbG9yLWhvdmVyKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiBidXR0b24uZGF0YWdyaWQtY29sdW1uLXRpdGxlIC5zb3J0LWljb246YWN0aXZle2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKX0uZGF0YWdyaWQtdGFibGUg''@;'; put 'put ''LmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXg6MCAwIGF1dG87d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtvcmRlcjoxMDA7bWFyZ2luLWxlZnQ6YXV0bzto''@;'; put 'put ''ZWlnaHQ6MTAwJX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvcjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1oZWlnaHQpO3dpZHRoOnZh''@;'; put 'put ''cigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yLXdpZHRoKTtyaWdodDowO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcil9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IgLmRhdGFncmlk''@;'; put 'put ''LWNvbHVtbi1oYW5kbGV7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dy''@;'; put 'put ''b3VuZDowIDA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpKTt0b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTQpKTtjdXJzb3I6Y29sLXJlc2l6ZTtoZWlnaHQ6Y2FsYygxMDAlICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSAtIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpO3otaW5kZXg6NTAxfWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1u''@;'; put 'put ''IC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIC5kYXRhZ3JpZC1jb2x1bW4taGFuZGxle2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIC5kYXRhZ3JpZC1jb2x1bW4tcmVzaXplLXRyYWNrZXJ7cG9zaXRp''@;'; put 'put ''b246YWJzb2x1dGU7dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSk7ZGlzcGxheTpub25lO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7aGVpZ2h0OjA7Ym9yZGVyLXJpZ2h0LXN0eWxlOmRvdHRlZDtib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1ibHVlLTMwMCk7Ym9yZGVyLXJpZ2h0LXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKTtjdXJzb3I6Y29sLXJlc2l6ZX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29s''@;'; put 'put ''dW1uLXNlcGFyYXRvciAuZGF0YWdyaWQtY29sdW1uLXJlc2l6ZS10cmFja2VyLm9uLWFycm93LWtleS1yZXNpemV7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2Utb3V0fS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIC5leGNl''@;'; put 'put ''ZWRlZC1tYXh7Ym9yZGVyLXJpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgZG90dGVkIHZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLWRhcmspfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1zaWducG9zdC10cmlnZ2Vy''@;'; put 'put ''IC5zaWducG9zdHttYXJnaW46Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKSAwO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIC5zaWducG9zdCAuc2lnbnBv''@;'; put 'put ''c3QtdHJpZ2dlcntoZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uLmRhdGFncmlkLXNlbGVjdCwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbi5kYXRhZ3JpZC1leHBhbmRhYmxl''@;'; put 'put ''LWNhcmV0LC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uLmRhdGFncmlkLXJvdy1hY3Rpb25ze21heC13aWR0aDp2YXIoLS1jbHItZGF0YWdyaWQtZml4ZWQtY29sdW1uLXNpemUpO21pbi13aWR0aDp2YXIoLS1jbHItZGF0YWdyaWQtZml4ZWQtY29sdW1uLXNpemUpfS5kYXRhZ3Jp''@;'; put 'put ''ZC10YWJsZSAuZGF0YWdyaWQtY2VsbHtmbGV4OjEgMSBhdXRvO3RleHQtYWxpZ246bGVmdDttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNSk7Ym9yZGVyOjB9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsLmRhdGFncmlkLWZpeGVkLXdpZHRoe2ZsZXg6MCAwIGF1dG99''@;'; put 'put ''LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsLmRhdGFncmlkLWZpeGVkLWNvbHVtbntmbGV4OjAgMCB2YXIoLS1jbHItZGF0YWdyaWQtZml4ZWQtY29sdW1uLXNpemUpO21heC13aWR0aDp2YXIoLS1jbHItZGF0YWdyaWQtZml4ZWQtY29sdW1uLXNpemUpO21pbi13aWR0aDp2YXIoLS1j''@;'; put 'put ''bHItZGF0YWdyaWQtZml4ZWQtY29sdW1uLXNpemUpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbC5kYXRhZ3JpZC1yb3ctYWN0aW9uc3tiYWNrZ3JvdW5kOjAgMH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldHtwYWRkaW5nOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtMikgdmFyKC0tY2xyLWRhdGFncmlkLWhvcml6b250YWwtcGFkZGluZykgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt0ZXh0LWFsaWduOmNlbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGw6Zm9jdXN7b3V0bGluZTp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpO291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsIC5kYXRhZ3JpZC1hY3Rp''@;'; put 'put ''b24tdG9nZ2xley13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6''@;'; put 'put ''MCAwO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9YnV0dG9uLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsIC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xle2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC10YWJsZSAuZGF0''@;'; put 'put ''YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZSBjZHMtaWNvbiwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwgLmRhdGFncmlkLWFjdGlvbi10b2dnbGUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWljb24tY29sb3IpfS5kYXRhZ3JpZC10YWJsZSAuZGF0''@;'; put 'put ''YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZTphY3RpdmUgY2RzLWljb24sLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsIC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZS1jb2xv''@;'; put 'put ''cil9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsIC5jbHItdG9nZ2xlLXdyYXBwZXJ7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikpO3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1k''@;'; put 'put ''ZXRhaWwtY2FyZXQsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1yb3ctYWN0aW9ucywuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXR7cG9zaXRpb246cmVsYXRpdmV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLmRhdGFncmlkLWFjdGlv''@;'; put 'put ''bi10b2dnbGU6YmVmb3JlLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWRldGFpbC1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b246''@;'; put 'put ''YmVmb3JlLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcm93LWFjdGlvbnMgLmRhdGFncmlkLWFjdGlvbi10b2dnbGU6YmVmb3JlLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcm93LWFjdGlvbnMgLmRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b246YmVmb3JlLC5kYXRhZ3JpZC10YWJs''@;'; put 'put ''ZSAuZGF0YWdyaWQtcm93LWFjdGlvbnMgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWFjdGlvbi10b2dnbGU6YmVmb3JlLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQt''@;'; put 'put ''ZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbjpiZWZvcmUsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1dHRvbjpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0''@;'; put 'put ''ZTtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO3RvcDowO2xlZnQ6MH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRhaW5lcntmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVy''@;'; put 'put ''LXRvcC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKTtib3JkZXItdG9wLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlcntiYWNrZ3JvdW5kOnZhcigtLWNsci1kYXRhZ3Jp''@;'; put 'put ''ZC1wbGFjZWhvbGRlci1iYWNrZ3JvdW5kLWNvbG9yKTtkaXNwbGF5Om5vbmU7d2lkdGg6MTAwJX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXBsYWNlaG9sZGVyLmRhdGFncmlkLWVtcHR5e2JvcmRlci10b3A6MDtkaXNwbGF5OmZsZXg7ZmxleC1mbG93OmNvbHVtbiBub3dyYXA7YWxpZ24t''@;'; put 'put ''aXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtmb250LXNpemU6dmFyKC0tY2xyLWRhdGFncmlkLXBsYWNlaG9sZGVyLWZvbnQtc2l6ZSk7Zm9udC13ZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLWRhdGFncmlkLXBsYWNlaG9sZGVyLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1sZXR0ZXItc3BhY2luZyk7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbG9yKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXBsYWNlaG9sZGVyIC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1pbWFnZXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyk7d2lkdGg6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS0xMyk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyO2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHZpZXdCb3glM0Ql''@;'; put 'put ''MjIwJTIwMCUyMDYwJTIwNzIlMjIlMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmslMjIlM0UlMEEl''@;'; put 'put ''MjAlMjAlMjAlMjAlM0NkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZWxsaXBzZSUyMGlkJTNEJTIycGF0aC0xJTIyJTIwY3glM0QlMjIzMCUyMiUyMGN5JTNEJTIyNjEuNzY2NjY2NyUyMiUyMHJ4JTNEJTIyMTUuNDUxMjkwNCUyMiUyMHJ5JTNEJTIyNC43MzMzMzMzMyUy''@;'; put 'put ''MiUzRSUzQyUyRmVsbGlwc2UlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NtYXNrJTIwaWQlM0QlMjJtYXNrLTIlMjIlMjBtYXNrQ29udGVudFVuaXRzJTNEJTIydXNlclNwYWNlT25Vc2UlMjIlMjBtYXNrVW5pdHMlM0QlMjJvYmplY3RCb3VuZGluZ0JveCUyMiUyMHglM0QlMjIw''@;'; put 'put ''JTIyJTIweSUzRCUyMjAlMjIlMjB3aWR0aCUzRCUyMjMwLjkwMjU4MDglMjIlMjBoZWlnaHQlM0QlMjI5LjQ2NjY2NjY3JTIyJTIwZmlsbCUzRCUyMndoaXRlJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDdXNlJTIweGxpbmslM0FocmVmJTNEJTIyJTIz''@;'; put 'put ''cGF0aC0xJTIyJTNFJTNDJTJGdXNlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGbWFzayUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRmRlZnMlM0UlMEElMjAlMjAlMjAlMjAlM0NnJTIwaWQlM0QlMjJQYWdlLTElMjIlMjBzdHJva2UlM0QlMjJub25lJTIyJTIwc3Ryb2tlLXdp''@;'; put 'put ''ZHRoJTNEJTIyMSUyMiUyMGZpbGwlM0QlMjJub25lJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBpZCUzRCUyMkFydGJvYXJkJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDdXNl''@;'; put 'put ''JTIwaWQlM0QlMjJPdmFsLTEwJTIyJTIwc3Ryb2tlJTNEJTIyJTIzQzFERkVGJTIyJTIwbWFzayUzRCUyMnVybCglMjNtYXNrLTIpJTIyJTIwc3Ryb2tlLXdpZHRoJTNEJTIyMi44JTIyJTIwc3Ryb2tlLWxpbmVjYXAlM0QlMjJzcXVhcmUlMjIlMjBzdHJva2UtZGFzaGFycmF5JTNEJTIyMyUy''@;'; put 'put ''QzYlMkMzJTJDNSUyMiUyMHhsaW5rJTNBaHJlZiUzRCUyMiUyM3BhdGgtMSUyMiUzRSUzQyUyRnVzZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BhdGglMjBkJTNEJTIyTTM4LjQ2MTM2NDclMkMxOC4xNjQyNDU2JTIwTDMwLjk4OTAxMzclMkMzNC45MTQx''@;'; put 'put ''ODQ2JTIwTDMxJTJDNDclMjBMMzIuNTk3Nzc4MyUyQzQ2LjUxNjcyMzYlMjBMMzIuNTk3Nzc4MyUyQzM0LjkxNDE4NDYlMjBMNTEuMDY3MzIxOCUyQzE1Ljc1NjA0MjUlMjBDNTEuMDY3MzIxOCUyQzE1Ljc1NjA0MjUlMjA0OC42Mjk1MTY2JTJDMTYuNjU0Mjk2OSUyMDQ0Ljk2Mjg5MDYlMkMx''@;'; put 'put ''Ny4zMzkyMzM0JTIwQzQxLjI5NjI2NDYlMkMxOC4wMjQxNjk5JTIwMzguNDYxMzY0NyUyQzE4LjE2NDI0NTYlMjAzOC40NjEzNjQ3JTJDMTguMTY0MjQ1NiUyMFolMjIlMjBpZCUzRCUyMlBhdGgtMTk1JTIyJTIwZmlsbCUzRCUyMiUyM0MxREZFRiUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk00Ljc0NjM5MjI2JTJDMTIuNTY2MTg1NSUyMEw0LjYyMDY1NzI2JTJDMTIuMTYwNTM0OCUyMEw1LjM1MTU0MTQlMkMxMS4xNjI1MDQ0JTIwTDUuNzc2MjIzODUlMkMxMS4xNTk5MzklMjBMNi4yMDkzNjMw''@;'; put 'put ''OSUyQzEyLjU1NzM0ODElMjBMNC43NDYzOTIyNiUyQzEyLjU2NjE4NTUlMjBaJTIwTTYuMjA5MzYzMDklMkMxMi41NTczNDgxJTIwTDYuMzI1NDI2MzIlMkMxMi45MzE3OTU0JTIwTDI4LjQ5NjM4NTUlMkMzNC44Nzk2NzE4JTIwTDI4LjQ5NjM4NTUlMkM0Ny44MDk2NjkxJTIwTDMyLjYlMkM0''@;'; put 'put ''Ni40ODM2NTEzJTIwTDMyLjYlMkMzNC44OTkyMzY1JTIwTDUzLjk3MzQ5NCUyQzEyLjcwMzU4MTMlMjBMNTMuOTczNDk0JTJDMTIuMjY4ODIwMSUyMEw2LjIwOTM2MzA5JTJDMTIuNTU3MzQ4MSUyMFolMjBNNTUuMzczNDk0JTJDMTAuODYwMzM3NiUyMEw1NS4zNzM0OTQlMkMxMy4yNjgwNjY0''@;'; put 'put ''JTIwTDM0JTJDMzUuNDYzNzIxNiUyMEwzNCUyQzQ3LjUwMjU0MDElMjBMMjcuMDk2Mzg1NSUyQzQ5LjczMzMzMzMlMjBMMjcuMDk2Mzg1NSUyQzM1LjQ2MzcyMTklMjBMNS4wOTE3OTY4OCUyQzEzLjY4MDU0MiUyMEw0LjMxMzI1MzAxJTJDMTEuMTY4Nzc2NCUyMEw1NS4zNzM0OTQlMkMxMC44''@;'; put 'put ''NjAzMzc2JTIwWiUyMiUyMGlkJTNEJTIyUGF0aC0xNDklMjIlMjBmaWxsJTNEJTIyJTIzN0ZCREREJTIyJTNFJTNDJTJGcGF0aCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2VsbGlwc2UlMjBpZCUzRCUyMk92YWwtOSUyMiUyMGZpbGwlM0QlMjIlMjNGRkZG''@;'; put 'put ''RkYlMjIlMjBjeCUzRCUyMjMwJTIyJTIwY3klM0QlMjIxMS43ODU2NTQlMjIlMjByeCUzRCUyMjI2JTIyJTIwcnklM0QlMjI2Ljc4NTY1NDAxJTIyJTNFJTNDJTJGZWxsaXBzZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BhdGglMjBkJTNEJTIyTTMwJTJD''@;'; put 'put ''MTcuMTcxMzA4JTIwQzM2Ljg3NzIxNzclMkMxNy4xNzEzMDglMjA0My4zMTEyMjgyJTJDMTYuNDYxMDcwMSUyMDQ4LjAzMTIzNzElMkMxNS4yMjkyMTA2JTIwQzUwLjI3Nzc2MTElMkMxNC42NDI4OTc3JTIwNTIuMDUwNzYxOSUyQzEzLjk1Nzk2NzclMjA1My4yMjE2MjMxJTJDMTMuMjM1NDk3''@;'; put 'put ''MyUyMEM1NC4xOTM4NTY1JTJDMTIuNjM1NTg4NiUyMDU0LjYlMkMxMi4xMTc1ODkxJTIwNTQuNiUyQzExLjc4NTY1NCUyMEM1NC42JTJDMTEuNDUzNzE4OSUyMDU0LjE5Mzg1NjUlMkMxMC45MzU3MTk0JTIwNTMuMjIxNjIzMSUyQzEwLjMzNTgxMDclMjBDNTIuMDUwNzYxOSUyQzkuNjEzMzQw''@;'; put 'put ''MzIlMjA1MC4yNzc3NjExJTJDOC45Mjg0MTAzNCUyMDQ4LjAzMTIzNzElMkM4LjM0MjA5NzQ2JTIwQzQzLjMxMTIyODIlMkM3LjExMDIzNzk1JTIwMzYuODc3MjE3NyUyQzYuNCUyMDMwJTJDNi40JTIwQzIzLjEyMjc4MjMlMkM2LjQlMjAxNi42ODg3NzE4JTJDNy4xMTAyMzc5NSUyMDExLjk2''@;'; put 'put ''ODc2MjklMkM4LjM0MjA5NzQ2JTIwQzkuNzIyMjM4ODYlMkM4LjkyODQxMDM0JTIwNy45NDkyMzgxNCUyQzkuNjEzMzQwMzIlMjA2Ljc3ODM3Njg5JTJDMTAuMzM1ODEwNyUyMEM1LjgwNjE0MzUlMkMxMC45MzU3MTk0JTIwNS40JTJDMTEuNDUzNzE4OSUyMDUuNCUyQzExLjc4NTY1NCUyMEM1''@;'; put 'put ''LjQlMkMxMi4xMTc1ODkxJTIwNS44MDYxNDM1JTJDMTIuNjM1NTg4NiUyMDYuNzc4Mzc2ODklMkMxMy4yMzU0OTczJTIwQzcuOTQ5MjM4MTQlMkMxMy45NTc5Njc3JTIwOS43MjIyMzg4NiUyQzE0LjY0Mjg5NzclMjAxMS45Njg3NjI5JTJDMTUuMjI5MjEwNiUyMEMxNi42ODg3NzE4JTJDMTYu''@;'; put 'put ''NDYxMDcwMSUyMDIzLjEyMjc4MjMlMkMxNy4xNzEzMDglMjAzMCUyQzE3LjE3MTMwOCUyMFolMjBNMzAlMkMxOC41NzEzMDglMjBDMTUuNjQwNTk2NSUyQzE4LjU3MTMwOCUyMDQlMkMxNS41MzMyNjcyJTIwNCUyQzExLjc4NTY1NCUyMEM0JTJDOC4wMzgwNDA3OCUyMDE1LjY0MDU5NjUlMkM1''@;'; put 'put ''JTIwMzAlMkM1JTIwQzQ0LjM1OTQwMzUlMkM1JTIwNTYlMkM4LjAzODA0MDc4JTIwNTYlMkMxMS43ODU2NTQlMjBDNTYlMkMxNS41MzMyNjcyJTIwNDQuMzU5NDAzNSUyQzE4LjU3MTMwOCUyMDMwJTJDMTguNTcxMzA4JTIwWiUyMiUyMGlkJTNEJTIyT3ZhbC05LUNvcHklMjIlMjBmaWxsJTNE''@;'; put 'put ''JTIyJTIzN0ZCREREJTIyJTNFJTNDJTJGcGF0aCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BhdGglMjBkJTNEJTIyTTE4LjI2MDg2NDMlMkM3LjE0NTYyOTg4JTIwTDIyLjcyNzM1NiUyQzE2LjkwNDcyNDElMjBDMjIuNzI3MzU2JTJDMTYuOTA0NzI0MSUy''@;'; put 'put ''MDE1LjMwMDY1OTIlMkMxNi4zOTExNzQzJTIwMTAuMjc2MDAxJTJDMTQuNzUxMTU5NyUyMEM1LjI1MTM0Mjc3JTJDMTMuMTExMTQ1JTIwNS4zODAzMTAwNiUyQzExLjgyODQzMDIlMjA1LjM4MDMxMDA2JTJDMTEuNjg4MjkzNSUyMEM1LjM4MDMxMDA2JTJDMTAuNDgzMjgzMSUyMDguMTY2MzMx''@;'; put 'put ''NTIlMkM5LjQxODc3NzE2JTIwMTEuMTE0NTYzJTJDOC41NzMyNDIxOSUyMEMxNC41NDkzMTklMkM3LjU4ODE3NDkyJTIwMTguMjYwODY0MyUyQzcuMTQ1NjI5ODglMjAxOC4yNjA4NjQzJTJDNy4xNDU2Mjk4OCUyMFolMjIlMjBpZCUzRCUyMlBhdGgtMTk2JTIyJTIwZmlsbCUzRCUyMiUyM0Mx''@;'; put 'put ''REZFRiUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZnJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUzQyUyRnN2ZyUzRSIpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtaGlkZGVuLWNvbHVtbi5kYXRhZ3JpZC1jb2x1bW4sLmRhdGFn''@;'; put 'put ''cmlkLXRhYmxlIC5kYXRhZ3JpZC1oaWRkZW4tY29sdW1uLmRhdGFncmlkLWNlbGx7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcm93LXNjcm9sbGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvcjphZnRlcntiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tcmVzaXplLWhhbmRsZXItY29sb3IpfS5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRhdGFncmlkLXNjcm9sbGluZy1jZWxscyAuZGF0YWdyaWQtY2VsbDpub3QoLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQpOm5vdCguZGF0YWdyaWQtcm93''@;'; put 'put ''LWFjdGlvbnMpOm5vdCguZGF0YWdyaWQtc2VsZWN0KXtkaXNwbGF5Om5vbmV9LmRhdGFncmlkLXJvdy1yZXBsYWNlZCAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtY2VsbHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLWNlbGwtcGFkZGluZyl9LmRhdGFncmlk''@;'; put 'put ''LXJvdy1yZXBsYWNlZCAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtY2VsbC5kYXRhZ3JpZC1oaWRkZW4tY29sdW1ue2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtcm93LXJlcGxhY2VkIC5kYXRhZ3JpZC1yb3ctZGV0YWlsIC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0e3BhZGRpbmct''@;'; put 'put ''dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMil9LmRhdGFncmlkLWZvb3RlcntmbGV4OjAgMCBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpzdHJldGNoO3BhZGRpbmc6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGhlYWQtYmdjb2xvcik7Ym9yZGVy''@;'; put 'put ''LXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdGFibGUtZm9vdGVyLWJvcmRlci10b3AtY29sb3IpO2JvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO2JvcmRlci10b3A6bm9uZTtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRv''@;'; put 'put ''bS1yaWdodC1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKX0uZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9ue2Rpc3BsYXk6Zmxl''@;'; put 'put ''eDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2dhcDp2YXIoLS1jbHItZGF0YWdyaWQtZm9vdGVyLXBhZ2luYXRpb24tZ2FwKX0uZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLXNpemV7ZGlzcGxheTpibG9jaztmbGV4OjEgMSBh''@;'; put 'put ''dXRvO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWFsaWduOnJpZ2h0fS5kYXRhZ3JpZC1mb290ZXIgLnBhZ2luYXRpb24tc2l6ZSAuY2xyLXBhZ2Utc2l6ZS1zZWxlY3R7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2Vp''@;'; put 'put ''Z2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1z''@;'; put 'put ''bWFsbGNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7dmVydGljYWwtYWxpZ246bWlkZGxlfS5kYXRhZ3JpZC1mb290ZXIgLnBhZ2luYXRpb24tZGVzY3JpcHRpb257d2hp''@;'; put 'put ''dGUtc3BhY2U6bm93cmFwfS5kYXRhZ3JpZC1mb290ZXIgLnBhZ2luYXRpb24tbGlzdHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4OjAgMCBhdXRvO2Rpc3BsYXk6Zmxl''@;'; put 'put ''eDthbGlnbi1pdGVtczpjZW50ZXJ9LmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1hY3Rpb257bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCk7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZTtwYWRkaW5nOnZhcigtLWNsci1k''@;'; put 'put ''YXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXBhZGRpbmcpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1jb2xvcik7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtdGV4dC1jb2xvcik7bWFyZ2luOjB9LmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1hY3Rpb24uZGlzYWJsZWQsLmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1''@;'; put 'put ''bW4tdG9nZ2xlLS1hY3Rpb246ZGlzYWJsZWQsLmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1hY3Rpb24uZGlzYWJsZWQ6aG92ZXIsLmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1hY3Rp''@;'; put 'put ''b246ZGlzYWJsZWQ6aG92ZXIsLmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1hY3Rpb24uZGlzYWJsZWQ6YWN0aXZlLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uOmRpc2Fi''@;'; put 'put ''bGVkOmFjdGl2ZXtjdXJzb3I6bm90LWFsbG93ZWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWRpc2FibGVkLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1kaXNhYmxlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1maWxsLWNvbG9yKX0uZGF0YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi10b2dnbGUtLWFjdGlvbjpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtYm9yZGVy''@;'; put 'put ''LWhvdmVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtaG92ZXItY29sb3IpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXRleHQtaG92ZXItY29sb3IpfS5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1z''@;'; put 'put ''d2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uOmFjdGl2ZSwuZGF0YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi10b2dnbGUtLWFjdGlvbjpmb2N1c3tib3gtc2hhZG93Om5vbmU7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1''@;'; put 'put ''bW4tdG9nZ2xlLWJvcmRlci1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1hY3RpdmUtY29sb3IpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXRleHQtYWN0aXZlLWNvbG9yKX0uZGF0YWdy''@;'; put 'put ''aWQtZm9vdGVyIC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVke2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjEwMCV9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmRhdGFncmlkLWZvb3Rlci1zZWxlY3QuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1j''@;'; put 'put ''aGVja2JveF06Y2hlY2tlZCtsYWJlbHtjdXJzb3I6ZGVmYXVsdDttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuZGF0YWdyaWQtZm9vdGVyLXNlbGVjdC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpjaGVja2VkK2xhYmVsOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1sYWJlbC1kaXNhYmxlZC1jb2xvcil9LmRhdGFncmlkLXNwaW5uZXJ7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6''@;'; put 'put ''Y2VudGVyO3dpZHRoOjEwMCU7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7aGVpZ2h0OmNhbGMoMTAwJSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWxvYWRpbmctYmFja2dyb3VuZCk7ei1pbmRleDo1OTB9LmRh''@;'; put 'put ''dGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLXJvdy1yZXBsYWNlZCAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtY2VsbHtwYWRkaW5nOnZhcigtLWNsci10YWJsZS1jZWxsLWNvbXBhY3QtcGFkZGluZyl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQt''@;'; put 'put ''Y29sdW1uLXNlcGFyYXRvcjphZnRlcntoZWlnaHQ6Y2FsYygxMDAlIC0gKC41KnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yLWV4cGFuZGJ5KSkpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVjdHtwYWRkaW5nOjAgdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS03KX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LmRhdGFncmlkLWNlbGx7cGFkZGluZzowfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1jZWxsIGNsci1pY29ue21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMp''@;'; put 'put ''IC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7bWFyZ2luLWJvdHRvbTpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSkpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1j''@;'; put 'put ''ZWxsIGNkcy1pY29ue21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7bWFyZ2luLWJvdHRvbTpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1j''@;'; put 'put ''ZWxsIC5iYWRnZXttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSk7bWFyZ2luLWJvdHRvbTpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0e3RleHQtYWxpZ246Y2Vu''@;'; put 'put ''dGVyfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5zcGlubmVye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJl''@;'; put 'put ''dC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDow''@;'; put 'put ''IDA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtvdXRsaW5lLW9mZnNldDp2YXIoLS1jbHItZGF0YWdyaWQtY29tcGFjdC1vdXRsaW5lLW9mZnNldCl9YnV0dG9uLmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWV4cGFu''@;'; put 'put ''ZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9ue2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWljb257bWFyZ2luOjB9LmRhdGFncmlkLWNvbXBhY3Qg''@;'; put 'put ''LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQuZGF0YWdyaWQtY2VsbHtwYWRkaW5nOjB9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQuZGF0YWdyaWQtY29sdW1ue3BhZGRpbmctdG9wOmNhbGModmFyKC0tY2xyLXRhYmxlLWNvbXBhY3QtdmVydGljYWwtcGFk''@;'; put 'put ''ZGluZykgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTtwYWRkaW5nLWJvdHRvbTp2YXIoLS1jbHItdGFibGUtY29tcGFjdC12ZXJ0aWNhbC1wYWRkaW5nKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAuc2lnbnBvc3QgLnNpZ25wb3N0LXRyaWdnZXIg''@;'; put 'put ''Y2RzLWljb246bm90KFtzaGFwZT1pbmZvLWNpcmNsZV0sW3NoYXBlPWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXSxbc2hhcGU9ZXhjbGFtYXRpb24tY2lyY2xlXSxbc2hhcGU9Y2hlY2stY2lyY2xlXSxbc2hhcGU9aW5mb10sW3NoYXBlPWVycm9yXSksLmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlk''@;'; put 'put ''LXNpZ25wb3N0LXRyaWdnZXIgLnNpZ25wb3N0IC5zaWducG9zdC10cmlnZ2VyIGNsci1pY29uOm5vdChbc2hhcGU9aW5mby1jaXJjbGVdLFtzaGFwZT1leGNsYW1hdGlvbi10cmlhbmdsZV0sW3NoYXBlPWV4Y2xhbWF0aW9uLWNpcmNsZV0sW3NoYXBlPWNoZWNrLWNpcmNsZV0sW3NoYXBlPWlu''@;'; put 'put ''Zm9dLFtzaGFwZT1lcnJvcl0pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3RlcntwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0''@;'; put 'put ''OnZhcigtLWNsci10YWJsZS1jb21wYWN0LXJvdy1oZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSktdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9ue2xpbmUtaGVpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtOSl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1hY3Rpb257b3V0bGluZS1vZmZzZXQ6dmFyKC0tY2xyLWRhdGFncmlkLWNvbXBhY3Qtb3V0bGluZS1vZmZzZXQpfS5kYXRh''@;'; put 'put ''Z3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290ZXIgLmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmRhdGFncmlkLWZvb3Rlci1zZWxlY3QuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHt0b3A6MH0uZGF0YWdyaWQtZm9vdGVyLWRlc2Ny''@;'; put 'put ''aXB0aW9ue2ZsZXg6MSAxIGF1dG87ZmxleC13cmFwOm5vd3JhcDt3aGl0ZS1zcGFjZTpub3dyYXA7ZGlzcGxheTpibG9jazt0ZXh0LWFsaWduOnJpZ2h0O21hcmdpbjphdXRvIDB9LnBhZ2luYXRpb24tbGlzdHtsaXN0LXN0eWxlOm5vbmU7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93''@;'; put 'put ''cmFwO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6c3RyZXRjaH0ucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLWN1cnJlbnR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24t''@;'; put 'put ''bGV0dGVyLXNwYWNpbmcpO2JhY2tncm91bmQ6MCAwO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHRhcmVhLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcGFnaW5hdGlvbi1pbnB1dC1ib3JkZXItY29sb3IpO2JvcmRlci13aWR0''@;'; put 'put ''aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3RleHQtYWxpZ246''@;'; put 'put ''Y2VudGVyO3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1jdXJyZW50OmZvY3VzLC5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tY3VycmVudC5jbHItZm9jdXN7YmFja2dyb3VuZDowIDA7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWRhdGFncmlkLXBhZ2luYXRpb24taW5wdXQtYm9yZGVyLWZvY3VzLWNvbG9yKX0ucGFnaW5hdGlvbi1saXN0Pip7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMil9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlv''@;'; put 'put ''bi1maXJzdCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLWxhc3QsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1wcmV2aW91cywucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLW5leHR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXJlcGVhdDpu''@;'; put 'put ''by1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW59LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1maXJzdDpkaXNhYmxlZCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLWxhc3Q6ZGlzYWJsZWQsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1wcmV2aW91czpkaXNhYmxl''@;'; put 'put ''ZCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLW5leHQ6ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7Y3Vyc29yOm5vdC1hbGxvd2VkO29wYWNpdHk6MX0ucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLWZpcnN0LC5wYWdpbmF0aW9uLWxpc3Qg''@;'; put 'put ''LnBhZ2luYXRpb24tcHJldmlvdXN7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1sYXN0LC5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tbmV4dHttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYp''@;'; put 'put ''fS5wYWdpbmF0aW9uLWxpc3QgYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpu''@;'; put 'put ''b25lO2JhY2tncm91bmQ6MCAwO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWJ0bi1jb2xvcik7Y3Vyc29yOnBvaW50ZXJ9YnV0dG9uLnBhZ2luYXRpb24tbGlzdCBidXR0b257Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLWNlbGwtd2lkdGgtemVyb3tib3JkZXI6MCFpbXBv''@;'; put 'put ''cnRhbnQ7cGFkZGluZzowIWltcG9ydGFudDt3aWR0aDowO2ZsZXg6MCAwIGF1dG8haW1wb3J0YW50O21pbi13aWR0aDowIWltcG9ydGFudDtkaXNwbGF5OmJsb2NrIWltcG9ydGFudDt2aXNpYmlsaXR5OmhpZGRlbiFpbXBvcnRhbnQ7cG9zaXRpb246YWJzb2x1dGUhaW1wb3J0YW50O3RvcDow''@;'; put 'put ''O2xlZnQ6MH0uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtZ3JvdzoxO292ZXJmbG93OmF1dG99LmRhdGFncmlkLWlubmVyLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWdyb3c6MTtvdmVy''@;'; put 'put ''ZmxvdzphdXRvO21pbi13aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmRhdGFncmlkLWRldGFpbC1vcGVuPi5kYXRhZ3JpZC1vdXRlci13cmFwcGVyPi5kYXRhZ3JpZC1pbm5lci13cmFwcGVyIGRpdi5kYXRhZ3JpZC10YWJsZXttYXgtd2lkdGg6MTAwJTtv''@;'; put 'put ''dmVyZmxvdzpoaWRkZW59LmRhdGFncmlkLWRldGFpbC1vcGVuPi5kYXRhZ3JpZC1vdXRlci13cmFwcGVyPi5kYXRhZ3JpZC1pbm5lci13cmFwcGVyPi5jZGstdmlydHVhbC1zY3JvbGxhYmxlIGRpdi5kYXRhZ3JpZC10YWJsZXtvdmVyZmxvdzp1bnNldH0uZGF0YWdyaWQtZGV0YWlsLW9wZW4+''@;'; put 'put ''LmRhdGFncmlkLW91dGVyLXdyYXBwZXI+LmRhdGFncmlkLWlubmVyLXdyYXBwZXIgY2xyLWRnLWNlbGx7d2lkdGg6MTAwJSFpbXBvcnRhbnR9LmRhdGFncmlkLWRldGFpbC1vcGVuPi5kYXRhZ3JpZC1vdXRlci13cmFwcGVyPi5kYXRhZ3JpZC1pbm5lci13cmFwcGVyIGNsci1kZy1jb2x1bW46''@;'; put 'put ''Zmlyc3QtY2hpbGR7d2lkdGg6YXV0byFpbXBvcnRhbnR9LmRhdGFncmlkLWRldGFpbC1vcGVuIC5kYXRhZ3JpZHtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1yaWdodDpub25lfS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQtaW5uZXItd3JhcHBlcnt3aWR0aDozNCV9''@;'; put 'put ''LmRhdGFncmlkLWRldGFpbC1vcGVuIC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250YWluZXIsLmRhdGFncmlkLWRldGFpbC1vcGVuIC5kYXRhZ3JpZC1yb3d7Ym9yZGVyLXJpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLXRhYmxl''@;'; put 'put ''LWJvcmRlci1jb2xvcil9LmRhdGFncmlkLWRldGFpbC1vcGVuIC5kYXRhZ3JpZC1mb290ZXJ7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uZGF0YWdyaWQtZGV0YWlsLW9wZW4gLnBhZ2luYXRpb257d2lkdGg6MTAwJX0uZGF0YWdyaWQtZGV0YWlsLW9wZW4gLnBhZ2luYXRpb24tZGVz''@;'; put 'put ''Y3JpcHRpb24tY29tcGFjdHt0ZXh0LWFsaWduOmxlZnQ7ZmxleDoxfS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLWxpc3R7bWFyZ2luLXJpZ2h0OjB9LmRhdGFncmlkLXJvdy1kZXRhaWwtb3Blbntwb3NpdGlvbjpyZWxhdGl2ZX0uZGF0YWdyaWQt''@;'; put 'put ''cm93LWRldGFpbC1vcGVuOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVy''@;'; put 'put ''LWNvbG9yKTt0b3A6Y2FsYygxMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7cmlnaHQ6MH0uZGF0YWdyaWQtcm93LWRldGFpbC1vcGVuOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yKTt0b3A6Y2FsYygxMSooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEp''@;'; put 'put ''KX0uZGF0YWdyaWQtZGV0YWlsLXBhbmV7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2JvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlk''@;'; put 'put ''LWRldGFpbC1wYW5lLWJvcmRlci1jb2xvcik7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRl''@;'; put 'put ''ci1yYWRpdXMtMTAwKTtiYWNrZ3JvdW5kOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1iZy1jb2xvcik7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7ZmxleC1ncm93OjI7d2lkdGg6NjYlfS5kYXRhZ3JpZC1kZXRhaWwtcGFuZS1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4''@;'; put 'put ''LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3c6YXV0bztoZWlnaHQ6MTAwJTtwYWRkaW5nOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1jb250ZW50LXBhZGRpbmcpfS5kYXRhZ3JpZC1kZXRhaWwtYm9keXtmbGV4OjEgMSBhdXRvO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS03KSAwO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtYm9keS10ZXh0LWNvbG9yKX0uZGF0YWdyaWQtZGV0YWlsLWhlYWRlcntmbGV4OjAgMCBhdXRvO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3Bh''@;'; put 'put ''Y2luZyk7bWFyZ2luLXRvcDowO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmRhdGFncmlkLWRldGFpbC1oZWFkZXIgLmRhdGFncmlkLWRldGFpbC1oZWFkZXItdGl0bGV7ZmxleDoxIDEgYXV0bztjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLWhlYWRlci10aXRsZS1j''@;'; put 'put ''b2xvcil9LmRhdGFncmlkLWRldGFpbC1oZWFkZXIgLmRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3Nle2ZsZXg6MSAxIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmRhdGFncmlkLWRldGFpbC1oZWFkZXIgLmRhdGFncmlk''@;'; put 'put ''LWRldGFpbC1wYW5lLWNsb3NlIC5idG4uYnRuLWxpbmt7bWluLXdpZHRoOmF1dG87bWFyZ2luOjA7cGFkZGluZy1yaWdodDowfS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1kZXRhaWwtcGFuZS1jbG9zZSAuYnRuLmJ0bi1saW5rIGNkcy1pY29ue2hlaWdodDp2YXIoLS1jbHIt''@;'; put 'put ''ZGF0YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UtaWNvbi1zaXplKTt3aWR0aDp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UtaWNvbi1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1jbG9zZS1pY29uLXNpemUpO21pbi13aWR0aDp2YXIo''@;'; put 'put ''LS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UtaWNvbi1zaXplKTtjb2xvcjp2YXIoLS1jbHItbW9kYWwtY2xvc2UtY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmRhdGFncmlkLWRldGFpbC1jYXJldC5kYXRh''@;'; put 'put ''Z3JpZC1jZWxse3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAwfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLmRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTst''@;'; put 'put ''by1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS05KX1idXR0b24uZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9ue2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLmRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b246ZGlzYWJsZWQgY2RzLWljb24uZGF0YWdyaWQtZGV0''@;'; put 'put ''YWlsLWNhcmV0LWljb257LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKX0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uLmlzLW9wZW4gLmRhdGFncmlkLWRldGFpbC1jYXJldC1pY29ue2Jv''@;'; put 'put ''cmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb24tb3Blbi1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1jYXJldC1pY29u''@;'; put 'put ''LW9wZW4taWNvbi1jb2xvcil9LmRhdGFncmlkLWRldGFpbC1jYXJldCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb257Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWljb24tY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLnNwaW5uZXJ7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTQpfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQuZGF0YWdyaWQtY29sdW1ue3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLXRvcGNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtY2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJsZS1ib3R0b21jZWxscGFkZGluZyl9LmRhdGFncmlkLWRl''@;'; put 'put ''dGFpbC1vdmVybGF5LmRhdGFncmlkLWRldGFpbC1vcGVuPi5kYXRhZ3JpZC1vdXRlci13cmFwcGVyPi5kYXRhZ3JpZC1pbm5lci13cmFwcGVye3dpZHRoOjA7bWluLXdpZHRoOnVuc2V0fS5kYXRhZ3JpZC1kZXRhaWwtb3ZlcmxheSAuZGF0YWdyaWQtZGV0YWlsLXBhbmV7Ym9yZGVyLWxlZnQ6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTt3aWR0''@;'; put 'put ''aDoxMDAlfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTc2cHgpey5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlcntkaXNwbGF5Om5vbmV9LmRhdGFncmlkLWRldGFpbC1wYW5le2JvcmRlci1sZWZ0OnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCl9fS5jb2x1bW4t''@;'; put 'put ''c3dpdGNoe2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYmctY29sb3IpO2JvcmRlci13aWR0aDp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yKTtib3gtc2hhZG93OnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVycy1ib3gtc2hhZG93KTt3''@;'; put 'put ''aWR0aDpjYWxjKDI1MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt6LWluZGV4OjEwNTB9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVu''@;'; put 'put ''O2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vi''@;'; put 'put ''c2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZyl9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgaDEsLmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgaDIsLmNvbHVtbi1z''@;'; put 'put ''d2l0Y2ggLnN3aXRjaC1oZWFkZXIgaDMsLmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgaDQsLmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgaDUsLmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgaDZ7Y29sb3I6dmFyKC0tY2xyLXAxLWNvbG9yKTtmb250LXNpemU6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWln''@;'; put 'put ''aHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbjowfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGJ1dHRvbnttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KTttYXJnaW46MDtw''@;'; put 'put ''YWRkaW5nOjB9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgYnV0dG9uIGNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc3dpdGNoLWhlYWRlci1mb250LWNvbG9yKX0uY29sdW1uLXN3aXRjaCAuc3dpdGNoLWhlYWRlciBidXR0b24gY2RzLWljb246aG92ZXJ7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi1zd2l0Y2gtaGVhZGVyLWZvbnQtaG92ZXItY29sb3IpfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGJ1dHRvbiBjZHMtaWNvbjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi1zd2l0Y2gtaGVhZGVyLWZv''@;'; put 'put ''bnQtYWN0aXZlLWNvbG9yKX0uY29sdW1uLXN3aXRjaCAuc3dpdGNoLWNvbnRlbnR7bWF4LWhlaWdodDpjYWxjKDMwMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7b3ZlcmZsb3cteTphdXRvO21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpICsgdmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSl9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1jb250ZW50IGxpe2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMil9LmNvbHVtbi1zd2l0Y2ggLnN3''@;'; put 'put ''aXRjaC1mb290ZXIgLmJ0bnttYXJnaW46MDtwYWRkaW5nOjB9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1mb290ZXIgLmFjdGlvbi1yaWdodHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5kYXRhZ3JpZC1maWx0ZXJ7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTMpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYmctY29sb3IpO2JvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92''@;'; put 'put ''ZXItYm9yZGVyLWNvbG9yKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCk7Ym94LXNoYWRvdzp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3ZlcnMtYm94LXNoYWRvdyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTtmb250LXdl''@;'; put 'put ''aWdodDo0MDB9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtZmlsdGVyLWNsb3NlLXdyYXBwZXJ7dGV4dC1hbGlnbjpyaWdodH0uZGF0YWdyaWQtZmlsdGVyIC5kYXRhZ3JpZC1maWx0ZXItY2xvc2Utd3JhcHBlciAuY2xvc2V7ZmxvYXQ6bm9uZTtmb250LXNpemU6dW5zZXR9LmRhdGFncmlk''@;'; put 'put ''LWZpbHRlciAuZGF0YWdyaWQtZmlsdGVyLWFwcGx5e21hcmdpbi1ib3R0b206MH0uZGF0YWdyaWQtZmlsdGVyIC5kYXRhZ3JpZC1udW1lcmljLWZpbHRlci1mb3Jte2Rpc3BsYXk6ZmxleDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uZGF0YWdyaWQtZmlsdGVyIC5kYXRhZ3JpZC1u''@;'; put 'put ''dW1lcmljLWZpbHRlci1mb3JtIGlucHV0LmRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0e3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTUpfS5kYXRhZ3JpZC1maWx0ZXIgLmNsci1mb3JtLWNvbnRyb2x7bWFyZ2luLXRvcDowfS5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3d7cG9z''@;'; put 'put ''aXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1iZy1jb2xvcik7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0''@;'; put 'put ''aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1ib3JkZXItY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXJzLWJveC1zaGFkb3cpO2JvcmRlci1yYWRpdXM6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Zm9udC13ZWlnaHQ6NDAwO3doaXRlLXNwYWNlOm5vd3JhcH0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTAwJTtoZWlnaHQ6MDt3''@;'; put 'put ''aWR0aDowO21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jbHItZGF0YWdyaWQtYWN0aW9uLWFycm93LXNpemUpKTtib3JkZXItdG9wOnZhcigtLWNsci1kYXRhZ3JpZC1hY3Rpb24tYXJyb3ctc2l6ZSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItZGF0YWdyaWQt''@;'; put 'put ''YWN0aW9uLWFycm93LXNpemUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC13aWR0aDp2YXIoLS1jbHItZGF0YWdyaWQtYWN0aW9uLWFycm93LXNpemUpO2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXIt''@;'; put 'put ''Ym9yZGVyLWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDoxMDAlO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNsci1kYXRhZ3JpZC1hY3Rpb24tYXJyb3ctc2l6''@;'; put 'put ''ZSkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTtib3JkZXItdG9wOmNhbGModmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206Y2FsYyh2YXIoLS1jbHItZGF0''@;'; put 'put ''YWdyaWQtYWN0aW9uLWFycm93LXNpemUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0LXdpZHRoOmNhbGModmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpO2Jv''@;'; put 'put ''cmRlci1yaWdodC1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYmctY29sb3IpfS5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVte2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnkt''@;'; put 'put ''Zm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcp''@;'; put 'put ''O2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWJnLWNvbG9yKTtib3JkZXI6MDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7YWxpZ24taXRl''@;'; put 'put ''bXM6Y2VudGVyO2hlaWdodDphdXRvO21hcmdpbjowO3dpZHRoOjEwMCU7dGV4dC10cmFuc2Zvcm06bm9uZX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbS5hY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtY29sb3IpO2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYmctY29sb3IpfS5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtOmhvdmVye2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1k''@;'; put 'put ''cm9wZG93bi1pdGVtLWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpob3Zlci5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1ob3Zlci1iZy1jb2xv''@;'; put 'put ''cil9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06YWN0aXZle2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtYmctY29sb3IpfS5kYXRhZ3JpZC1hY3Rp''@;'; put 'put ''b24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtOmFjdGl2ZS5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1hY3RpdmUtYmctY29sb3IpfS5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtOmZvY3Vze3otaW5kZXg6aW5oZXJp''@;'; put 'put ''dH0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbS5kaXNhYmxlZCwuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpkaXNhYmxlZHtwb2ludGVyLWV2ZW50czpub25lO2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWRpc2FibGVkLWNvbG9yKTti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWRpc2FibGVkLWJnLWNvbG9yKTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbS5kaXNhYmxlZDpob3ZlciwuZGF0YWdyaWQt''@;'; put 'put ''YWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpkaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOjAgMH0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbS5kaXNhYmxlZDphY3RpdmUsLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06ZGlzYWJsZWQ6YWN0''@;'; put 'put ''aXZle2JhY2tncm91bmQ6MCAwO2JveC1zaGFkb3c6bm9uZX0uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZXtkaXNwbGF5OmJsb2NrfS5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZCwuZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxj''@;'; put 'put ''dWxhdGUtbW9kZSAuZGF0YWdyaWQtZm9vdGVyLC5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1yb3ctbWFzdGVyLC5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1yb3ctY2xpY2thYmxle2Rpc3BsYXk6bm9uZX0u''@;'; put 'put ''ZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGV7ZGlzcGxheTp0YWJsZTt0YWJsZS1sYXlvdXQ6YXV0b30uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGUg''@;'; put 'put ''LmRhdGFncmlkLWNhbGN1bGF0aW9uLWhlYWRlcntkaXNwbGF5OnRhYmxlLWhlYWRlci1ncm91cH0uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGUgLmRhdGFncmlkLWNhbGN1bGF0aW9uLWhlYWRlciAuZGF0YWdyaWQtY29s''@;'; put 'put ''dW1ue2Rpc3BsYXk6dGFibGUtY2VsbDttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNSl9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi1oZWFkZXIgLmRhdGFncmlk''@;'; put 'put ''LWNvbHVtbntib3JkZXItY29sb3I6dmFyKC0tY2xyLXRhYmxlcm93LWJvcmRlcmNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoKTtib3JkZXItc3R5bGU6c29saWQ7cGFkZGluZzp2YXIoLS1jbHItdGFibGUtdG9wY2VsbHBhZGRpbmcpIHZhcigtLWNsci10''@;'; put 'put ''YWJsZS1jZWxscGFkZGluZykgdmFyKC0tY2xyLXRhYmxlLWJvdHRvbWNlbGxwYWRkaW5nKTt2ZXJ0aWNhbC1hbGlnbjp0b3A7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKTttYXJnaW4tdG9wOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowfS5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJsZSAuZGF0YWdyaWQtcm93e2Rpc3BsYXk6dGFibGUtcm93fS5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1''@;'; put 'put ''bGF0ZS1tb2RlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJsZSAuZGF0YWdyaWQtcm93IGNsci1leHBhbmRhYmxlLWFuaW1hdGlvbntkaXNwbGF5Om5vbmV9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIC5kYXRhZ3Jp''@;'; put 'put ''ZC1yb3cgLmRhdGFncmlkLWNlbGx7ZGlzcGxheTp0YWJsZS1jZWxsO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTE1KTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7cGFkZGluZzp2YXIoLS1jbHItdGFibGUtdG9wY2VsbHBhZGRpbmcpIHZh''@;'; put 'put ''cigtLWNsci10YWJsZS1jZWxscGFkZGluZykgdmFyKC0tY2xyLXRhYmxlLWJvdHRvbWNlbGxwYWRkaW5nKTt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IsLmRhdGFncmlkLWhvc3QuZGF0''@;'; put 'put ''YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRhaW5lciwuZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtZml4ZWQtY29sdW1ue2Rpc3BsYXk6bm9uZX1Aa2V5ZnJhbWVzIGNsci1za2VsZXRvbi1sb2FkaW5nezAle2Jh''@;'; put 'put ''Y2tncm91bmQtcG9zaXRpb24teDowfXRve2JhY2tncm91bmQtcG9zaXRpb24teDotMjAwJX19LmZhZGV7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuMnMgZWFzZS1pbi1vdXQ7d2lsbC1jaGFuZ2U6b3BhY2l0eX0uZmFkZS5pbntvcGFjaXR5OjF9LmZhZGVEb3due29wYWNpdHk6MDt0''@;'; put 'put ''cmFuc2Zvcm06dHJhbnNsYXRlWSgtMjUlKTt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGVhc2UtaW4tb3V0LHRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXQ7d2lsbC1jaGFuZ2U6b3BhY2l0eSx0cmFuc2Zvcm19LmZhZGVEb3duLmlue29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlKDApfS5z''@;'; put 'put ''a2VsZXRvbi1sb2FkaW5nOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTtiYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3Qtc2tlbGV0b24tbG9hZGluZy1ncmFkaWVudCk7YW5pbWF0aW9uOnZhcigtLWNkcy1nbG9iYWwtYW5pbWF0aW9uLXNrZWxldG9uLWR1cmF0aW9uKSBjbHItc2tlbGV0b24tbG9hZGluZyB2YXIoLS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1lYXNpbmctaW4tb3V0KSBpbmZpbml0ZTtiYWNrZ3Jv''@;'; put 'put ''dW5kLXNpemU6MjAwJSAxMDAlfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHItd2l6YXJkLW1haW4tYmdjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW92ZXJsYXktYmFja2dyb3VuZCk7LS1jbHIt''@;'; put 'put ''d2l6YXJkLW1haW4tdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXdpemFyZC1zdGVwbmF2LWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci13aXphcmQtc3RlcG5hdi10ZXh0OnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtdGV4dC1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQtaG92ZXI6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcik7LS1jbHItd2l6YXJkLXN0ZXBuYXYtdGV4dC0tYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3Itc2VsZWN0ZWQpOy0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQtZGlzYWJsZWQ6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0tYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbC10aW50KTstLWNsci13aXphcmQtc3RlcG5hdi1ib3JkZXItc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpOy0tY2xy''@;'; put 'put ''LXdpemFyZC1zdGVwbmF2LWl0ZW0tYm9yZGVyLWNvbG9yLS1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci13aXphcmQtc3RlcG5hdi1zZWxlY3RlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhp''@;'; put 'put ''Z2hsaWdodCk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtYWN0aXZlLWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci13aXphcmQtc3RlcG5hdi1zZWxlY3RlZC1iZ2NvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1h''@;'; put 'put ''Y3RpdmUtYmdjb2xvcik7LS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtaG92ZXItYmdjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtaG92ZXIpOy0tY2xyLXdpemFyZC1zdGVwbmF2LXNlbGVjdGVkLWFjdGl2ZS1iZ2NvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmUpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstZXJyb3ItaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1j''@;'; put 'put ''b21wbGV0ZS1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJvcmRlci1jb2xvcik7LS1jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1ob3Zlci1i''@;'; put 'put ''Zy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLXdp''@;'; put 'put ''emFyZC1zdGVwbmF2LWxpbmstcGFkZGluZzpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTstLWNsci13aXphcmQtc3RlcG5hdi1pdGVtLWVycm9yLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1j''@;'; put 'put ''bHItd2l6YXJkLXRpdGxlLXRleHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci13aXphcmQtZm9vdGVyLWhlaWdodDphdXRvOy0tY2xyLXdpemFyZC1oZWFkZXItYWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3Ip''@;'; put 'put ''Oy0tY2xyLXdpemFyZC1oZWFkZXItYWN0aW9uLWNvbG9yLS1ob3ZlcmVkOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLXdpemFyZC1ib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTMwMCk7LS1jbHItd2l6YXJkLWJv''@;'; put 'put ''cmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItd2l6YXJkLWNvbnRlbnQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKX0uY2xyLXdpemFyZCAubW9kYWwtZGlhbG9ne2Rp''@;'; put 'put ''c3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaGFkb3c6dmFyKC0tY2xyLXdpemFyZC1ib3gtc2hhZG93KTtoZWlnaHQ6NTAlO21heC1oZWlnaHQ6MTAwJX0uY2xyLXdpemFyZCAubW9kYWwtY29udGVudHtib3JkZXItcmFkaXVzOjAgdmFy''@;'; put 'put ''KC0tY2xyLXdpemFyZC1ib3JkZXItcmFkaXVzKSB2YXIoLS1jbHItd2l6YXJkLWJvcmRlci1yYWRpdXMpIDA7Ym94LXNoYWRvdzpub25lO3BhZGRpbmc6MDtmbGV4OjIgMiBhdXRvO3dpZHRoOjY2JTtoZWlnaHQ6aW5pdGlhbDtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpmbGV4O2FsaWduLWl0''@;'; put 'put ''ZW1zOmZsZXgtc3RhcnQ7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jbHItd2l6YXJkIC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGV7ZmxleDowIDAgYXV0bzt3aWR0aDoxMDAlO3BhZGRpbmc6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKSB2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQt''@;'; put 'put ''c3BhY2UpIDB9LmNsci13aXphcmQgLm1vZGFsLXRpdGxle2NvbG9yOnZhcigtLWNsci13aXphcmQtdGl0bGUtdGV4dCk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzt3aWR0aDoxMDAlfS5jbHItd2l6YXJkIC5tb2RhbC1ib2R5e2ZsZXg6MSAxIGF1dG87Y29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LXdpemFyZC1tYWluLXRleHQtY29sb3IpO3dpZHRoOjEwMCU7cGFkZGluZzp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpfS5jbHItd2l6YXJkIC5tb2RhbC1mb290ZXJ7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2ZsZXg6MCAwIHZhcigtLWNsci13aXphcmQtZm9vdGVyLWhlaWdo''@;'; put 'put ''dCk7aGVpZ2h0OnZhcigtLWNsci13aXphcmQtZm9vdGVyLWhlaWdodCk7bWluLWhlaWdodDp2YXIoLS1jbHItd2l6YXJkLWZvb3Rlci1oZWlnaHQpO21heC1oZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1mb290ZXItaGVpZ2h0KTtwYWRkaW5nOjAgdmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNw''@;'; put 'put ''YWNlKSB2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWJ0bnttYXJnaW46MDttYXgtd2lkdGg6MTAwJTtkaXNwbGF5OmJsb2NrfS5jbHItd2l6YXJkIC5tb2RhbC10aXRsZS10ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXg6MCAxIGF1''@;'; put 'put ''dG87d2lkdGg6MTAwJTtvdXRsaW5lOjB9LmNsci13aXphcmQgLm1vZGFsLXRpdGxlLXdyYXBwZXJ7d2lkdGg6MTAwJX0uY2xyLXdpemFyZCAubW9kYWwtaGVhZGVyLWFjdGlvbnMtd3JhcHBlcntmbGV4OjEgMCBhdXRvO2hlaWdodDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO3Bh''@;'; put 'put ''ZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO3BhZGRpbmctcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1oZWFkZXItYWN0aW9uLXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtZmxleH0uY2xyLXdpemFyZCAuY2xyLXdpemFy''@;'; put 'put ''ZC1oZWFkZXItYWN0aW9ue2hlaWdodDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO3dpZHRoOnZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSk7Ym9yZGVyOjA7cGFkZGluZzowO21hcmdpbjowO21pbi13aWR0aDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO2xp''@;'; put 'put ''bmUtaGVpZ2h0OnZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSk7Zm9udC1zaXplOnZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSk7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1oZWFkZXItYWN0aW9uLWNvbG9yKTt0cmFuc2l0aW9uOmNvbG9yIGxpbmVhciAuMnN9LmNsci13aXph''@;'; put 'put ''cmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbiBhe2NvbG9yOnZhcigtLWNsci13aXphcmQtaGVhZGVyLWFjdGlvbi1jb2xvcil9LmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbjpob3ZlciwuY2xyLXdpemFyZCAuY2xyLXdpemFyZC1oZWFkZXItYWN0aW9uOmFjdGl2ZSwu''@;'; put 'put ''Y2xyLXdpemFyZCAuY2xyLXdpemFyZC1oZWFkZXItYWN0aW9uOmZvY3Vze2NvbG9yOnZhcigtLWNsci13aXphcmQtaGVhZGVyLWFjdGlvbi1jb2xvci0taG92ZXJlZCl9LmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbiBjZHMtaWNvbiwuY2xyLXdpemFyZCAuY2xyLXdpemFy''@;'; put 'put ''ZC1oZWFkZXItYWN0aW9uIGNsci1pY29ue2hlaWdodDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO3dpZHRoOnZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSl9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVye2ZsZXg6MSAxIGF1dG87aGVpZ2h0OjEw''@;'; put 'put ''MCU7d2lkdGg6MzQlO21heC13aWR0aDozNCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtvcmRlcjotMTtvdmVyZmxvdzpoaWRkZW47b3ZlcmZsb3cteTphdXRvO2JvcmRlci1yaWdodDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoKSBzb2xpZCB2YXIoLS1jbHItd2l6''@;'; put 'put ''YXJkLXN0ZXBuYXYtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1iZ2NvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci13aXphcmQtYm9yZGVyLXJhZGl1cykgMCAwIHZhcigtLWNsci13aXphcmQtYm9yZGVyLXJhZGl1cyl9LmNsci13''@;'; put 'put ''aXphcmQgLmNsci13aXphcmQtc3RlcG5hdntwYWRkaW5nOjAgMCB2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpIHZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSk7ZGlzcGxheTpibG9jaztjb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtdGV4dCk7d2lkdGg6MTAwJTtm''@;'; put 'put ''bGV4OjEgMSBhdXRvfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGlzdHtkaXNwbGF5OmJsb2NrO2JveC1zaGFkb3c6bm9uZTtjb3VudGVyLXJlc2V0OmE7d2hpdGUtc3BhY2U6bm93cmFwO2hlaWdodDphdXRvO2xpc3Qtc3R5bGUtdHlwZTpub25lO21hcmdpbjowO3dpZHRoOjEw''@;'; put 'put ''MCV9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVte2Rpc3BsYXk6YmxvY2s7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWJvcmRlci1zaXplKSBzb2xpZCB2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS1ib3JkZXItY29sb3IpO21hcmdpbi1ib3R0''@;'; put 'put ''b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTtjb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtdGV4dCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtYmdjb2xvcil9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtIGJ1dHRvbi5jbHIt''@;'; put 'put ''d2l6YXJkLXN0ZXBuYXYtbGlua3tjb2xvcjppbmhlcml0O2JhY2tncm91bmQtY29sb3I6aW5oZXJpdH0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQtZGlzYWJsZWQpfS5jbHItd2l6YXJkIC5j''@;'; put 'put ''bHItd2l6YXJkLXN0ZXBuYXYtaXRlbS5hY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQtLWFjdGl2ZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtYmdjb2xvcik7Ym9yZGVyLWxlZnQtY29sb3I6dmFyKC0tY2xyLXdp''@;'; put 'put ''emFyZC1zdGVwbmF2LXNlbGVjdGVkLWJvcmRlci1jb2xvcil9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1zZWxlY3RlZC1ob3Zlci1iZ2NvbG9yKX0uY2xyLXdpemFyZCAu''@;'; put 'put ''Y2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uYWN0aXZlOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1zZWxlY3RlZC1hY3RpdmUtYmdjb2xvcil9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtOm5vdCguZGlzYWJsZWQpOm5vdCguYWN0''@;'; put 'put ''aXZlKTpob3Zlcntjb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtdGV4dC1ob3Zlcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1ob3Zlci1iZy1jb2xvcil9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtOm5vdCguZGlzYWJs''@;'; put 'put ''ZWQpOm5vdCguYWN0aXZlKTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQtYWN0aXZlKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1saW5rLWFjdGl2ZS1iZy1jb2xvcil9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1p''@;'; put 'put ''dGVtIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGluay10aXRsZXt3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7d2hpdGUtc3BhY2U6bm9ybWFsfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS5jb21wbGV0ZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0t''@;'; put 'put ''Ym9yZGVyLWNvbG9yLS1hY3RpdmUpO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4ycyBlYXNlLWlufS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS5jb21wbGV0ZSAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstaWNvbiBjZHMtaWNvbnstLWNvbG9yOnZhcigtLWNsci13aXph''@;'; put 'put ''cmQtc3RlcG5hdi1saW5rLWNvbXBsZXRlLWljb24tY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS5lcnJvcntib3JkZXItY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0tZXJyb3ItYm9yZGVyLWNvbG9yKTt0cmFuc2l0aW9uOmJvcmRlci1jb2xv''@;'; put 'put ''ciAuMnMgZWFzZS1pbn0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uZXJyb3IgLmNsci13aXphcmQtc3RlcG5hdi1saW5rLWljb24gY2RzLWljb257LS1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1lcnJvci1pY29uLWNvbG9yKX0uY2xyLXdpemFyZCAu''@;'; put 'put ''Y2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0ubm8tY2xpY2sgYnV0dG9ue3BvaW50ZXItZXZlbnRzOm5vbmV9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1saW5re3dpZHRoOjEwMCU7ZGlzcGxheTpmbGV4O3BsYWNlLWNvbnRlbnQ6bm9ybWFsO2NvbG9yOmluaGVyaXQ7YWxpZ24taXRl''@;'; put 'put ''bXM6Y2VudGVyO3RleHQtYWxpZ246bGVmdDt0ZXh0LXRyYW5zZm9ybTpub25lO21hcmdpbjowO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtoZWlnaHQ6YXV0bzttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIpO21heC13aWR0aDppbmhlcml0O2ZvbnQtc2l6''@;'; put 'put ''ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbWVkaXVtKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0''@;'; put 'put ''ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmsgLmNsci13aXphcmQtc3RlcG5hdi1saW5rLWljb257ZGlzcGxheTpmbGV4fS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0''@;'; put 'put ''ZXBuYXYtbGluayAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstaWNvbiwuY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmsgLmNsci13aXphcmQtc3RlcG5hdi1saW5rLXBhZ2UtbnVtYmVye3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci13aXphcmQgLmNsci13''@;'; put 'put ''aXphcmQtdGl0bGV7bWFyZ2luLXRvcDowO2ZsZXg6MCAwIGF1dG87Y29sb3I6dmFyKC0tY2xyLXdpemFyZC10aXRsZS10ZXh0KTtwYWRkaW5nOnZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1z''@;'; put 'put ''aXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWN0aW9uLWxldHRlci1zcGFjaW5nKX0uY2xyLXdpemFyZCAubW9kYWwtY29udGVudC13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleDoxIDEgMTAwJTtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2xyLXdpemFyZCAubW9kYWwt''@;'; put 'put ''Y29udGVudC13cmFwcGVyIC5tb2RhbC1uYXZ7aGVpZ2h0OmF1dG99LmNsci13aXphcmQgLmNsci13aXphcmQtZm9vdGVyLWJ1dHRvbnN7dGV4dC1hbGlnbjpyaWdodDttYXJnaW46MH0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1mb290ZXItYnV0dG9ucy13cmFwcGVye2Rpc3BsYXk6ZmxleDtm''@;'; put 'put ''bGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci13aXphcmQgLmNsci13aXphcmQtYnRuLXdyYXBwZXJ7ZmxleDowIDEgYXV0b30uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1i''@;'; put 'put ''dG4td3JhcHBlclthcmlhLWhpZGRlbj10cnVlXXtkaXNwbGF5Om5vbmV9LmNsci13aXphcmQgLmNsci13aXphcmQtYnRuLmJ0bi1saW5re3BhZGRpbmc6MH0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1jb250ZW50e2Rpc3BsYXk6YmxvY2t9LmNsci13aXphcmQgLmNsci13aXphcmQtcGFnZTpu''@;'; put 'put ''b3QoW2FyaWEtaGlkZGVuPXRydWVdKXtkaXNwbGF5OmJsb2NrfS5jbHItd2l6YXJkIC5tb2RhbC1kaWFsb2d7aGVpZ2h0Ojc1dmh9LmNsci13aXphcmQgLm1vZGFsLWJvZHktd3JhcHBlcnttYXgtaGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO3dpZHRoOjEwMCV9LmNsci13''@;'; put 'put ''aXphcmQud2l6YXJkLW1kIC5tb2RhbC1kaWFsb2d7bWluLWhlaWdodDpjYWxjKDQyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LWhlaWdodDpjYWxjKDUwNCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmNsci13aXphcmQud2l6YXJkLW1kIC5tb2RhbC1jb250''@;'; put 'put ''ZW50LC5jbHItd2l6YXJkLndpemFyZC1tZCAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXJ7bWF4LWhlaWdodDpjYWxjKDUwNCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmNsci13aXphcmQud2l6YXJkLW1kIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlcnttaW4td2lkdGg6''@;'; put 'put ''Y2FsYygyMTYqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmNsci13aXphcmQud2l6YXJkLWxnIC5tb2RhbC1kaWFsb2d7bWluLWhlaWdodDpjYWxjKDQyMCooMXJlbS92YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWJhc2UpKSk7bWF4LWhlaWdodDpjYWxjKDcyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmNsci13aXphcmQud2l6YXJkLWxnIC5tb2RhbC1jb250ZW50LC5jbHItd2l6YXJkLndpemFyZC1sZyAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXJ7bWF4LWhlaWdodDpjYWxj''@;'; put 'put ''KDcyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmNsci13aXphcmQud2l6YXJkLWxnIC5uYXYtcGFuZWwsLmNsci13aXphcmQud2l6YXJkLWxnIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlcnttaW4td2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNl''@;'; put 'put ''KSkpO21heC13aWR0aDpjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmNsci13aXphcmQud2l6YXJkLXhsIC5tb2RhbC1kaWFsb2d7aGVpZ2h0Ojc1dmg7bWF4LWhlaWdodDpub25lfS5jbHItd2l6YXJkLndpemFyZC14bCAubmF2LXBhbmVsLC5jbHItd2l6YXJkLndp''@;'; put 'put ''emFyZC14bCAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXJ7bWluLXdpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygzMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkIC5zcGlubmVyOm5vdCguc3Bp''@;'; put 'put ''bm5lci1pbmxpbmUpOm5vdCguY2xyLXRyZWVub2RlLXNwaW5uZXIpe2xlZnQ6Y2FsYyg1MCUgKyBjYWxjKDExNSooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo0MCV9LmNsci13aXphcmQtcGFnZT46Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDow''@;'; put 'put ''fS5jbHItd2l6YXJkLXBhZ2U+OmZpcnN0LWNoaWxkPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LmNsci13aXphcmQtcGFnZT5mb3JtOmZpcnN0LWNoaWxke3BhZGRpbmctdG9wOjB9LmNsci13aXphcmQtcGFnZT5mb3JtOmZpcnN0LWNoaWxkPi5mb3JtLWJsb2NrOmZpcnN0LWNoaWxke21h''@;'; put 'put ''cmdpbi10b3A6MH0uY2xyLXdpemFyZC0taW5saW5le2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lPmNsci1tb2RhbD4ubW9kYWw6Zm9jdXN7b3V0bGluZS1zdHlsZTpub25lO291dGxpbmUtY29sb3I6dHJhbnNwYXJlbnR9LmNsci13aXphcmQtLWlubGluZSBj''@;'; put 'put ''bHItbW9kYWx7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtkaXNwbGF5OmJsb2NrfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFse3BhZGRpbmc6MDtwb3NpdGlvbjpzdGF0aWM7aGVpZ2h0OjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsIC5jb250ZW50LWNv''@;'; put 'put ''bnRhaW5lcntoZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbCAuY29udGVudC1jb250YWluZXIgLm5hdi1wYW5lbHtoZWlnaHQ6OTklO3dpZHRoOjk5JX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbCAubW9kYWwtY29udGVudHtib3gtc2hhZG93Om5vbmV9LmNsci13aXph''@;'; put 'put ''cmQtLWlubGluZSAubW9kYWwgLm1vZGFsLWRpYWxvZ3ttaW4taGVpZ2h0OjEwMCU7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTt6LWluZGV4OmF1dG99LmNsci13aXphcmQtLWlubGluZSAubW9kYWwtYm9keS13cmFwcGVye2hlaWdodDoxMDAlfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsLWhl''@;'; put 'put ''YWRlciAuY2xvc2V7ZGlzcGxheTpub25lfS5jbHItd2l6YXJkLS1pbmxpbmUgLm5hdi5uYXZMaXN0e3BhZGRpbmctdG9wOjB9LmNsci13aXphcmQtLWlubGluZSAubW9kYWwtZGlhbG9nIC5tb2RhbC1jb250ZW50IC5tb2RhbC1ib2R5IC5jb250ZW50LWFyZWF7b3ZlcmZsb3cteTphdXRvfS5j''@;'; put 'put ''bHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsLWJhY2tkcm9we2hlaWdodDowO3dpZHRoOjA7ZGlzcGxheTpub25lfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsLWNvbnRlbnQtd3JhcHBlcnthbGlnbi1pdGVtczpzdHJldGNoO2hlaWdodDoxMDAlfS5jbHItd2l6YXJkLS1pbmxpbmUgLmNsci13''@;'; put 'put ''aXphcmQtc3RlcG5hdi13cmFwcGVyLC5jbHItd2l6YXJkLS1pbmxpbmUuY2xyLXdpemFyZCAubW9kYWwtY29udGVudHttaW4taGVpZ2h0OjEwMCU7aGVpZ2h0OmF1dG87bWF4LWhlaWdodDoxMDAlfS5jbHItd2l6YXJkLS1pbmxpbmUgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVyIC5jbHIt''@;'; put 'put ''d2l6YXJkLXN0ZXBuYXYsLmNsci13aXphcmQtLWlubGluZS5jbHItd2l6YXJkIC5tb2RhbC1jb250ZW50IC5jbHItd2l6YXJkLXN0ZXBuYXZ7aGVpZ2h0OjEwMCV9LmNsci13aXphcmQtLW5vLXNoYWRvdyAubW9kYWwtY29udGVudC13cmFwcGVyLC5jbHItd2l6YXJkLS1uby1zaGFkb3cgLm1v''@;'; put 'put ''ZGFsLWRpYWxvZ3tib3gtc2hhZG93Om5vbmV9LmNsci13aXphcmQtLW5vLXRpdGxlIC5jbHItd2l6YXJkLXRpdGxle2Rpc3BsYXk6bm9uZX0uY2xyLXdpemFyZC0tbm8tdGl0bGUgLmNsci13aXphcmQtc3RlcG5hdntwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5tYWlu''@;'; put 'put ''LWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXIgLmNvbnRlbnQtYXJlYSAud2l6YXJkLWluLXBhZ2Uud2l6YXJkLWluLXBhZ2UtLWZpbGwtY29udGVudC1hcmVhe2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OmNhbGMoMTAwJSArIDIuNHJlbSk7bWFyZ2luOi0xLjJyZW19LndpemFyZC1pbi1wYWdl''@;'; put 'put ''IC5jbHItd2l6YXJkLWZvb3Rlci1idXR0b25zLXdyYXBwZXJ7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9QG1lZGlhIHNjcmVlbnsuY2xyLXdpemFyZC1wYWdlW2FyaWEtaGlkZGVuPXRydWVde2Rpc3BsYXk6bm9uZX19QHN1cHBvcnRzICgtbXMtaW1lLWFsaWduOmF1dG8pey5jbHItd2l6''@;'; put 'put ''YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb257bWFyZ2luLXRvcDpjYWxjKC0zKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX19OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItc2lnbnBvc3QtY29udGVudC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDAp''@;'; put 'put ''Oy0tY2xyLXNpZ25wb3N0LWNvbnRlbnQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItc2lnbnBvc3QtY29udGVudC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1ib3JkZXItY29sb3IpOy0t''@;'; put 'put ''Y2xyLXNpZ25wb3N0LWFjdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1zaWducG9zdC1hY3Rpb24taG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcik7LS1jbHItc2lnbnBvc3Qt''@;'; put 'put ''YWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItc2lnbnBvc3QtYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1zaWducG9zdC1wb2ludGVyLXNp''@;'; put 'put ''emU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTstLWNsci1zaWducG9zdC1wb2ludGVyLWJvcmRlcjp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1zaXplKSBzb2xpZCB2YXIoLS1jbHItc2lnbnBvc3QtY29udGVudC1ib3JkZXItY29sb3IpOy0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52''@;'; put 'put ''aXNpYmxlLWJvcmRlcjp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1zaXplKSBzb2xpZCB0cmFuc3BhcmVudDstLWNsci1zaWducG9zdC1wb2ludGVyLXBzZXVkby1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItc2l6ZSkgc29saWQgdmFyKC0tY2xyLXNpZ25wb3N0LWNvbnRl''@;'; put 'put ''bnQtYmctY29sb3IpOy0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcjp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1wc2V1ZG8tYm9yZGVyKTstLWNsci1zaWducG9zdC1ib3JkZXItc2l6ZTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1zaXplKX0uc2lnbnBvc3R7ZGlz''@;'; put 'put ''cGxheTppbmxpbmUtYmxvY2t9LnNpZ25wb3N0OmhvdmVye2N1cnNvcjpwb2ludGVyfS5zaWducG9zdCAuc2lnbnBvc3QtYWN0aW9uOm5vdCguY2xvc2Upe21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXItd2lkdGg6MDtjb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtYWN0aW9uLWNvbG9yKX0uc2ln''@;'; put 'put ''bnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKSBjZHMtaWNvbiwuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKSBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1zaWducG9zdC1hY3Rpb24tY29sb3IpfS5zaWducG9zdCAuc2lnbnBvc3QtYWN0aW9uOm5vdCguY2xvc2UpIGNkcy1pY29uOmhvdmVyLC5zaWducG9zdCAuc2lnbnBvc3QtYWN0aW9uOm5vdCguY2xvc2UpIGNsci1pY29uOmhvdmVyLC5zaWducG9zdCAuc2lnbnBvc3QtYWN0aW9u''@;'; put 'put ''Om5vdCguY2xvc2UpOmhvdmVye2NvbG9yOnZhcigtLWNsci1zaWducG9zdC1hY3Rpb24taG92ZXItY29sb3IpfS5zaWducG9zdCAuc2lnbnBvc3QtYWN0aW9uOm5vdCguY2xvc2UpLmFjdGl2ZSBjZHMtaWNvbiwuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKS5hY3RpdmUg''@;'; put 'put ''Y2xyLWljb24sLnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb246bm90KC5jbG9zZSkuYWN0aXZle2NvbG9yOnZhcigtLWNsci1zaWducG9zdC1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uc2lnbnBvc3QgLnNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIGJ1dHRvbntsaW5lLWhlaWdodDowO2hlaWdodDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5zaWducG9zdCAuc2lnbnBvc3QtY29udGVudC1oZWFkZXIg''@;'; put 'put ''YnV0dG9uIGNkcy1pY29uLC5zaWducG9zdCAuc2lnbnBvc3QtY29udGVudC1oZWFkZXIgYnV0dG9uIGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTcpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5zaWducG9zdC10cmlnZ2Vye21hcmdpbjowO2Rpc3BsYXk6aW5saW5lLWZsZXh9LnNpZ25wb3N0LWNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDttaW4td2lkdGg6Y2FsYygyMTYqKDFyZW0vdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTttYXgtaGVpZ2h0OmNhbGMoNTA0KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtkaXNwbGF5''@;'; put 'put ''OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjEwNTB9LnNpZ25wb3N0LWNvbnRlbnQ6aG92ZXJ7Y3Vyc29yOmRlZmF1bHR9LnNpZ25wb3N0LWNvbnRlbnQgLnBvcG92ZXItcG9pbnRlcntoZWlnaHQ6MDt3aWR0aDowO3Bvc2l0aW9uOmFic29sdXRlfS5zaWducG9zdC1j''@;'; put 'put ''b250ZW50IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2NvbnRlbnQ6IiI7aGVpZ2h0OjA7d2lkdGg6MDtwb3NpdGlvbjphYnNvbHV0ZX0uc2lnbnBvc3QtY29udGVudC50b3AtbGVmdCAucG9wb3Zlci1wb2ludGVyLC5zaWducG9zdC1jb250ZW50LnRvcC1taWRkbGUgLnBvcG92ZXItcG9pbnRl''@;'; put 'put ''ciwuc2lnbnBvc3QtY29udGVudC50b3AtcmlnaHQgLnBvcG92ZXItcG9pbnRlcntib3JkZXItdG9wOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWJvcmRlcik7Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1zaXplKSl9LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxl''@;'; put 'put ''ZnQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQudG9wLW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZSwuc2lnbnBvc3QtY29udGVudC50b3AtcmlnaHQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9p''@;'; put 'put ''bnRlci1wc3VlZG8tYm9yZGVyKTtib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0uc2lnbnBvc3QtY29udGVudC50b3AtbGVmdCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5zaWducG9zdC1jb250ZW50LnRvcC1sZWZ0IC5wb3BvdmVyLXBvaW50''@;'; put 'put ''ZXJ7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC50b3AtbGVmdCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItbGVmdDp2''@;'; put 'put ''YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtyaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpfS5zaWducG9zdC1jb250ZW50LnRvcC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcntib3JkZXItcmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52''@;'; put 'put ''aXNpYmxlLWJvcmRlcik7bGVmdDo1MCV9LnNpZ25wb3N0LWNvbnRlbnQudG9wLW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItcmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7bGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEp''@;'; put 'put ''fS5zaWducG9zdC1jb250ZW50LnRvcC1yaWdodCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LnNpZ25wb3N0LWNvbnRlbnQudG9wLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJs''@;'; put 'put ''ZS1ib3JkZXIpO2xlZnQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC50b3AtcmlnaHQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC5ib3R0b20tbGVmdCAucG9wb3Zlci1wb2ludGVyLC5zaWducG9zdC1jb250ZW50LmJvdHRvbS1taWRkbGUgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC5ib3R0b20tcmlnaHQgLnBvcG92ZXItcG9p''@;'; put 'put ''bnRlcntib3JkZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWJvcmRlcik7dG9wOmNhbGMoLTEqdmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1zaXplKSl9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLWxlZnQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNv''@;'; put 'put ''bnRlbnQuYm90dG9tLW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZSwuc2lnbnBvc3QtY29udGVudC5ib3R0b20tcmlnaHQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1wc3VlZG8tYm9yZGVyKTt0b3A6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS0yKX0uc2lnbnBvc3QtY29udGVudC5ib3R0b20tbGVmdCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1sZWZ0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25w''@;'; put 'put ''b3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5ib3R0b20tbGVmdCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItbGVmdDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1p''@;'; put 'put ''bnZpc2libGUtYm9yZGVyKTtyaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1taWRkbGUgLnBvcG92ZXItcG9pbnRlcntib3JkZXItcmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7bGVmdDo1MCV9''@;'; put 'put ''LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItcmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7cmlnaHQ6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpIC0gdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5zaWducG9zdC13cmFwe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC5ib3R0b20tcmlnaHQgLnBvcG92ZXItcG9pbnRlcntib3JkZXItcmlnaHQ6dmFyKC0tY2xy''@;'; put 'put ''LXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7bGVmdDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1yaWdodCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItcmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBv''@;'; put 'put ''aW50ZXItaW52aXNpYmxlLWJvcmRlcik7bGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpfS5zaWducG9zdC1jb250ZW50LmxlZnQtdG9wIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQubGVmdC1taWRkbGUgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC5s''@;'; put 'put ''ZWZ0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVye2JvcmRlci1sZWZ0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWJvcmRlcik7cmlnaHQ6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpKX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LXRvcCAucG9wb3Zlci1wb2ludGVy''@;'; put 'put ''OmJlZm9yZSwuc2lnbnBvc3QtY29udGVudC5sZWZ0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZSwuc2lnbnBvc3QtY29udGVudC5sZWZ0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItbGVmdDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1wc3VlZG8tYm9y''@;'; put 'put ''ZGVyKX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LXRvcCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5zaWducG9zdC1jb250ZW50LmxlZnQtdG9wIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2li''@;'; put 'put ''bGUtYm9yZGVyKTtib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LXRvcCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItdG9wOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDpj''@;'; put 'put ''YWxjKC0xKnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItc2l6ZSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTtyaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5zaWducG9zdC1jb250ZW50LmxlZnQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIo''@;'; put 'put ''LS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6NTAlfS5zaWducG9zdC1jb250ZW50LmxlZnQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7dG9w''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7bGVmdDpjYWxjKC0xKnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItc2l6ZSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpKX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LWJvdHRvbSAuc2lnbnBvc3Qtd3JhcHtib3JkZXItdG9wLXJpZ2h0LXJh''@;'; put 'put ''ZGl1czowfS5zaWducG9zdC1jb250ZW50LmxlZnQtYm90dG9tIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29u''@;'; put 'put ''dGVudC5sZWZ0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO2xlZnQ6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9y''@;'; put 'put ''ZGVyLXNpemUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSl9LnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtdG9wIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtYm90dG9tIC5w''@;'; put 'put ''b3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWJvcmRlcik7bGVmdDpjYWxjKC0xKnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItc2l6ZSkpfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LXRvcCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZSwuc2ln''@;'; put 'put ''bnBvc3QtY29udGVudC5yaWdodC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtYm90dG9tIC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1wc3VlZG8tYm9yZGVyKTtsZWZ0''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMil9LnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtdG9wIC5zaWducG9zdC13cmFwe2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC5yaWdodC10b3AgLnBvcG92ZXItcG9pbnRlcntib3JkZXItdG9wOnZhcigtLWNsci1z''@;'; put 'put ''aWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2JvdHRvbTpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LXRvcCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItdG9wOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVy''@;'; put 'put ''LWludmlzaWJsZS1ib3JkZXIpO3RvcDpjYWxjKC0xKnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItc2l6ZSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5yaWdodC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcntib3JkZXItYm90dG9tOnZhcigtLWNsci1z''@;'; put 'put ''aWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDo1MCV9LnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7dG9wOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtMSl9LnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtYm90dG9tIC5zaWducG9zdC13cmFwe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC5yaWdodC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcntib3JkZXItYm90dG9tOnZhcigtLWNsci1z''@;'; put 'put ''aWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2lu''@;'; put 'put ''dGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpfS5zaWducG9zdC1jb250ZW50LWhlYWRlcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO3dpZHRoOjEwMCU7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjppbmhlcml0O3RvcDowO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1yYWRpdXMpfS5zaWducG9zdC1jb250ZW50LWhlYWRlciAuc2lnbnBvc3QtdGl0bGV7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXpl''@;'; put 'put ''KTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''Y2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7bWFyZ2luLXJpZ2h0OmF1dG99LnNpZ25wb3N0LXdyYXB7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykgY2FsYygxNSooMXJlbS92YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWJhc2UpKSk7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLXNpZ25wb3N0LWNvbnRlbnQtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItcmFkaXVzKTti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zaWducG9zdC1jb250ZW50LWJnLWNvbG9yKTt6LWluZGV4OjEwNTA7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uc2lnbnBvc3QtY29udGVudC1ib2R5e3BhZGRpbmctYm90dG9tOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtMSk7Y29sb3I6dmFyKC0tY2xyLXNpZ25wb3N0LWNvbnRlbnQtY29sb3IpO3RleHQtYWxpZ246bGVmdDttYXgtaGVpZ2h0OmNhbGMoNDUwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtvdmVyZmxvdy15OmF1dG87Zm9udC1zaXplOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWJvZHktbGV0dGVyLXNwYWNpbmcpfS5jbHItYWNjb3JkaW9ue2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5jbHItYWNjb3JkaW9uLXBhbmVse2Rpc3BsYXk6YmxvY2t9LmNsci1hY2NvcmRpb24taGVhZGVye2NvbG9yOnZhcigtLWNsci1h''@;'; put 'put ''Y2NvcmRpb24tdGV4dC1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS1jbHItYWNjb3JkaW9uLWhlYWRlci1sZWZ0LWluZGljYXRvcik7YmFja2dyb3VuZDp2YXIoLS1jbHItYWNjb3JkaW9uLWhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yKTt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXQ7Ym9y''@;'; put 'put ''ZGVyOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItY29sb3IpO2JvcmRlci1ib3R0b20td2lkdGg6MDt3aWR0aDoxMDAlO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250''@;'; put 'put ''LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0''@;'; put 'put ''ZXItc3BhY2luZyk7dGV4dC1hbGlnbjpsZWZ0fS5jbHItYWNjb3JkaW9uLWhlYWRlcjpob3Zlcntjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXRleHQtY29sb3ItaG92ZXIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItaG92ZXItYmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cil9LmNsci1hY2NvcmRpb24taGVhZGVyOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXRleHQtY29sb3ItYWN0aXZlKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1wYW5l''@;'; put 'put ''bC1kaXNhYmxlZD5kaXY+LmNsci1hY2NvcmRpb24taGVhZGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItYmFja2dyb3VuZC1jb2xvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQ+ZGl2Pi5jbHItYWNjb3JkaW9uLWhlYWRlcjpob3ZlciwuY2xy''@;'; put 'put ''LWFjY29yZGlvbi1wYW5lbC1kaXNhYmxlZD5kaXY+LmNsci1hY2NvcmRpb24taGVhZGVyOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkPi5jbHItYWNjb3JkaW9u''@;'; put 'put ''LXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQ+LmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbj4uY2xy''@;'; put 'put ''LWFjY29yZGlvbi1oZWFkZXI6aG92ZXIsLmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQ+LmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbj4uY2xyLWFjY29yZGlvbi1oZWFkZXI6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItZGlzYWJsZWQtYmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcil9LmNsci1hY2NvcmRpb24tcGFuZWw6bGFzdC1jaGlsZCAuY2xyLWFjY29yZGlvbi1jb250ZW50LC5jbHItYWNjb3JkaW9uLXBhbmVsOmxhc3QtY2hpbGQgLmNsci1hY2NvcmRpb24taGVhZGVye2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSBz''@;'; put 'put ''b2xpZCB2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1jb2xvcil9LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbntkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyB3cmFwO2ZsZXg6MSAxIDA7d2lkdGg6MTAwJTtib3JkZXI6MDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCk7''@;'; put 'put ''YmFja2dyb3VuZDowIDA7dGV4dC1hbGlnbjpsZWZ0O2N1cnNvcjpwb2ludGVyO2NvbG9yOmluaGVyaXQ7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9QG1lZGlhKG1pbi13aWR0aDo1NzZweCl7LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbntmbGV4LWZsb3c6cm93fX0uY2xyLWFj''@;'; put 'put ''Y29yZGlvbi1oZWFkZXItYnV0dG9uOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uOmRpc2FibGVkIC5jbHItYWNjb3JkaW9uLXN0YXR1cywuY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uOmRpc2FibGVkIC5jbHItYWNjb3JkaW9uLXRp''@;'; put 'put ''dGxlLC5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b246ZGlzYWJsZWQgLmNsci1hY2NvcmRpb24tZGVzY3JpcHRpb257Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1wYW5lbC1kaXNhYmxlZC1jb2xvcil9LmNsci1hY2NvcmRpb24tc3RhdHVze3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOnRvcH0uY2xyLWFjY29yZGlvbi10aXRsZXtkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLWFjY29yZGlvbi1oZWFkZXItaGFzLWRlc2NyaXB0aW9uIC5jbHItYWNjb3JkaW9uLXRpdGxle21pbi13aWR0aDp2YXIoLS1j''@;'; put 'put ''bHItYWNjb3JkaW9uLXN0ZXAtdGl0bGUtbWluLXdpZHRoKTttYXgtd2lkdGg6Y2FsYygyNjQqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3dpZHRoOjEwMCV9LmNsci1hY2NvcmRpb24tZGVzY3JpcHRpb257ZGlzcGxheTppbmxpbmUtYmxvY2s7bWF4LXdpZHRoOmNhbGMoNjUwKigx''@;'; put 'put ''cmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX1AbWVkaWEobWluLXdpZHRoOjU3NnB4KXsuY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbnttYXJnaW4tbGVmdDpjYWxjKDQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX19LmNsci1hY2NvcmRpb24tY29udGVudHtiYWNrZ3JvdW5k''@;'; put 'put ''OnZhcigtLWNsci1hY2NvcmRpb24tY29udGVudC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSBzb2xpZCB2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1jb2xvcik7Ym9yZGVyLWJvdHRvbTowO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtOCk7ZGlzcGxheTpub25lfS5jbHItYWNjb3JkaW9uLWNvbnRlbnQgLmNsci1mb3JtLC5jbHItYWNjb3JkaW9uLWNvbnRlbnQubmctdHJpZ2dlcntwYWRkaW5nOjB9QG1lZGlhKG1pbi13aWR0aDo1NzZweCl7LmNsci1hY2NvcmRpb24tY29udGVudHtwYWRkaW5n''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCkgY2FsYyg1NCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9fS5jbHItYWNjb3JkaW9uLWlubmVyLWNvbnRlbnR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfUBtZWRpYShtaW4td2lkdGg6NTc2cHgpey5jbHItYWNjb3Jk''@;'; put 'put ''aW9uLWlubmVyLWNvbnRlbnR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpIGNhbGMoNTQqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfX0uY2xyLWFjY29yZGlvbi1hbmdsZXt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXQ7dHJhbnNmb3JtOnJvdGF0ZSg5MGRl''@;'; put 'put ''Zyl9LmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbj4uY2xyLWFjY29yZGlvbi1oZWFkZXJ7Ym94LXNoYWRvdzp2YXIoLS1jbHItYWNjb3JkaW9uLWhlYWRlci1sZWZ0LWN1cnJlbnQtaW5kaWNhdG9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuIC5jbHItYWNjb3JkaW9uLXBhbmVsLWNvbXBs''@;'; put 'put ''ZXRlPi5jbHItYWNjb3JkaW9uLWhlYWRlcntib3gtc2hhZG93Omluc2V0IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMCAwIHZhcigtLWNsci1hY2NvcmRpb24tYm9yZGVyLWxlZnQtY29sb3ItY29tcGxldGUpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4gLmNsci1hY2NvcmRpb24tcGFu''@;'; put 'put ''ZWwtZXJyb3I+LmNsci1hY2NvcmRpb24taGVhZGVye2JveC1zaGFkb3c6aW5zZXQgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1lcnJvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbj4uY2xyLWFjY29yZGlvbi1j''@;'; put 'put ''b250ZW50LXJlZ2lvbiAuY2xyLWFjY29yZGlvbi1jb250ZW50e2Rpc3BsYXk6YmxvY2t9LmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbj4uY2xyLWFjY29yZGlvbi1oZWFkZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItYWNjb3JkaW9uLWhlYWRlci1vcGVuLWJhY2tncm91bmQtY29sb3IpfS5jbHIt''@;'; put 'put ''YWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItb3Blbi1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhl''@;'; put 'put ''YWRlcjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yLWFjdGl2ZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWhlYWRlci1vcGVuLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNj''@;'; put 'put ''b3JkaW9uLWhlYWRlciAuY2xyLWFjY29yZGlvbi1hbmdsZXt2aXNpYmlsaXR5OnZpc2libGU7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfS5jbHItYWNjb3JkaW9uLXBhbmVsLWNvbXBsZXRlPi5jbHItYWNjb3JkaW9uLWNvbXBsZXRlLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWFjY29yZGlvbi1jb21wbGV0ZS1jb2xvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGU+LmNsci1hY2NvcmRpb24tYW5nbGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5jbHItYWNjb3JkaW9uLXBhbmVsLWNvbXBsZXRlPi5jbHItYWNjb3JkaW9uLWhlYWRlcntib3gtc2hh''@;'; put 'put ''ZG93Omluc2V0IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMCAwIHZhcigtLWNsci1hY2NvcmRpb24tYm9yZGVyLWxlZnQtY29sb3ItY29tcGxldGUpfS5jbHItYWNjb3JkaW9uLXBhbmVsLWNvbXBsZXRlIC5uZy10cmlnZ2VyLmNsci1hY2NvcmRpb24tY29udGVudHtkaXNwbGF5OmJsb2Nr''@;'; put 'put ''fS5jbHItYWNjb3JkaW9uLXBhbmVsLWVycm9yPi5jbHItYWNjb3JkaW9uLWhlYWRlcntib3gtc2hhZG93Omluc2V0IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMCAwIHZhcigtLWNsci1hY2NvcmRpb24tYm9yZGVyLWxlZnQtY29sb3ItZXJyb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLWVy''@;'; put 'put ''cm9yPi5jbHItYWNjb3JkaW9uLWVycm9yLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1lcnJvci1jb2xvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtZXJyb3IgLmNsci1hY2NvcmRpb24tbnVtYmVyLC5jbHItYWNjb3JkaW9uLXBhbmVsLWNvbXBs''@;'; put 'put ''ZXRlIC5jbHItYWNjb3JkaW9uLW51bWJlcntwb3NpdGlvbjphYnNvbHV0ZTtjbGlwOnJlY3QoMXB4LDFweCwxcHgsMXB4KTtjbGlwLXBhdGg6aW5zZXQoNTAlKTtwYWRkaW5nOjA7Ym9yZGVyOjA7aGVpZ2h0OjFweDt3aWR0aDoxcHg7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3Jh''@;'; put 'put ''cDt0b3A6MDtsZWZ0OjB9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24taGVhZGVyOm5vdCguY2xyLXN0ZXBwZXItaGVhZGVyKXtib3gtc2hhZG93Om5vbmV9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2Nv''@;'; put 'put ''cmRpb24tcGFuZWwgLmNsci1hY2NvcmRpb24taGVhZGVyOm5vdCguY2xyLXN0ZXBwZXItaGVhZGVyKXtib3JkZXItcmFkaXVzOnZhcigtLWNsci1hY2NvcmRpb24tYm9yZGVyLXJhZGl1cyl9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tcGFu''@;'; put 'put ''ZWwgLmNsci1hY2NvcmRpb24taGVhZGVyOm5vdCguY2xyLXN0ZXBwZXItaGVhZGVyKSsuY2xyLWFjY29yZGlvbi1jb250ZW50LXJlZ2lvbj4uY2xyLWFjY29yZGlvbi1jb250ZW50e2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItcmFkaXVzKTti''@;'; put 'put ''b3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1yYWRpdXMpfS5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLXBhbmVsKy5jbHItYWNjb3JkaW9uLXBhbmVsPmRpdltjbGFzcyo9Y2xyLWFjY29yZGlv''@;'; put 'put ''bi1wYW5lbC1dPi5jbHItYWNjb3JkaW9uLWhlYWRlcjpub3QoLmNsci1zdGVwcGVyLWhlYWRlcil7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp1bnNldDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp1bnNldH0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29y''@;'; put 'put ''ZGlvbi1wYW5lbDpub3QoOmxhc3QtY2hpbGQpPmRpdltjbGFzcyo9Y2xyLWFjY29yZGlvbi1wYW5lbC1dPi5jbHItYWNjb3JkaW9uLWhlYWRlcjpub3QoLmNsci1zdGVwcGVyLWhlYWRlciksLmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tcGFu''@;'; put 'put ''ZWw6bm90KDpsYXN0LWNoaWxkKT5kaXZbY2xhc3MqPWNsci1hY2NvcmRpb24tcGFuZWwtXT4uY2xyLWFjY29yZGlvbi1oZWFkZXI6bm90KC5jbHItc3RlcHBlci1oZWFkZXIpKy5jbHItYWNjb3JkaW9uLWNvbnRlbnQtcmVnaW9uPi5jbHItYWNjb3JkaW9uLWNvbnRlbnR7Ym9yZGVyLWJvdHRv''@;'; put 'put ''bTpub25lO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dW5zZXQ7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dW5zZXR9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbnthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGlu''@;'; put 'put ''Zzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tY29udGVudHtwYWRkaW5nOjB9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3Jtcykg''@;'; put 'put ''LmNsci1hY2NvcmRpb24taW5uZXItY29udGVudHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO2NvbG9yOnZhcigtLWNsci1hY2NvcmRp''@;'; put 'put ''b24tY29udGVudC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1hY2NvcmRpb24tY29udGVudC1mb250LXNpemUpfS5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkIC5jbHItYWNjb3JkaW9uLWlubmVyLWNvbnRlbnR7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1wYW5lbC1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLXN0YXR1c3t3aWR0aDphdXRvfS5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0''@;'; put 'put ''ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLXN0YXR1cyBjZHMtaWNvbiwuY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1zdGF0dXMgY2xyLWljb257aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS03KX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlcntib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjAhaW1wb3J0YW50O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjAhaW1wb3J0YW50O2JvcmRlci1ib3R0b206MCFpbXBvcnRhbnR9''@;'; put 'put ''OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItYWNjb3JkaW9uLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItYWNjb3JkaW9uLXRleHQtY29sb3ItaG92ZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zl''@;'; put 'put ''cik7LS1jbHItYWNjb3JkaW9uLXRleHQtY29sb3ItYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1k''@;'; put 'put ''aXNhYmxlZCk7LS1jbHItYWNjb3JkaW9uLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItYWNjb3JkaW9uLWNvbnRlbnQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1hY2NvcmRpb24tY29udGVudC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLWFjY29yZGlvbi1jb250ZW50LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnkt''@;'; put 'put ''Zm9udC1zaXplKTstLWNsci1hY2NvcmRpb24taGVhZGVyLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWFjY29yZGlvbi1oZWFkZXItaG92ZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpOy0tY2xyLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlLWJhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZSk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1vcGVuLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcik7LS1jbHItYWNjb3JkaW9u''@;'; put 'put ''LWhlYWRlci1vcGVuLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmUpOy0tY2xyLWFjY29yZGlvbi1oZWFkZXItb3Blbi1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcik7LS1jbHItYWNjb3JkaW9uLWVycm9yLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci1hY2NvcmRpb24tY29tcGxldGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNj''@;'; put 'put ''ZXNzKTstLWNsci1hY2NvcmRpb24tYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1hY2NvcmRpb24tYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1hY2NvcmRpb24tYm9yZGVy''@;'; put 'put ''LWxlZnQtY29sb3ItY29tcGxldGU6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1hY2NvcmRpb24tYm9yZGVyLWxlZnQtY29sb3ItZXJyb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLWFjY29yZGlvbi1oZWFkZXItbGVmdC1pbmRpY2F0b3I6aW5z''@;'; put 'put ''ZXQgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAgdmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLXRpbnQpOy0tY2xyLWFjY29yZGlvbi1oZWFkZXItbGVmdC1jdXJyZW50LWluZGljYXRvcjppbnNldCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDAgMCB2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTstLWNsci1hY2NvcmRpb24tc3RlcC10aXRsZS1taW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyl9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVh''@;'; put 'put ''ZGVyLWJ1dHRvbnthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLWhlaWdodDpjYWxjKDU2KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS04KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtc3RhdHVze21pbi1oZWlnaHQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS05KTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7ZGlzcGxheTppbmxpbmUtZmxleDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01''@;'; put 'put ''KTthbGlnbi1pdGVtczpjZW50ZXJ9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtc3RhdHVzPi5jbHItc3RlcC1lcnJvci1pY29uLC5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVy''@;'; put 'put ''Pi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLXN0YXR1cz4uY2xyLXN0ZXAtY29tcGxldGUtaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3BhZGRpbmc6MH0uY2xyLXN0ZXBwZXItZm9ybXMg''@;'; put 'put ''LmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC1zdGF0dXM+LmNsci1zdGVwLWVycm9yLWljb257Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1lcnJvci1jb2xvcil9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+''@;'; put 'put ''LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtc3RhdHVzPi5jbHItc3RlcC1jb21wbGV0ZS1pY29ue2NvbG9yOnZhcigtLWNsci1hY2NvcmRpb24tY29tcGxldGUtY29sb3IpfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9u''@;'; put 'put ''LWhlYWRlci1idXR0b24+LmNsci1zdGVwLXRpdGxlLXdyYXBwZXJ7bWluLXdpZHRoOnZhcigtLWNsci1hY2NvcmRpb24tc3RlcC10aXRsZS1taW4td2lkdGgpO21heC13aWR0aDpjYWxjKDI2NCoxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpO3dpZHRoOjEwMCU7ZGlzcGxheTppbmxpbmUt''@;'; put 'put ''ZmxleDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTthbGlnbi1pdGVtczpjZW50ZXI7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9s''@;'; put 'put ''ZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNs''@;'; put 'put ''ci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtdGl0bGUtd3JhcHBlcj4uY2xyLXN0ZXAtbnVtYmVye21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1i''@;'; put 'put ''dXR0b24+LmNsci1zdGVwLXRpdGxlLXdyYXBwZXI+LmNsci1hY2NvcmRpb24tdGl0bGV7bWluLXdpZHRoOmluaXRpYWw7bWF4LXdpZHRoOmluaXRpYWw7d2lkdGg6aW5pdGlhbDttYXJnaW4tbGVmdDowfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3Jk''@;'; put 'put ''aW9uLWhlYWRlci1idXR0b24+LmNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24sLmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtZGVzY3JpcHRpb257bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS05KTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGlu''@;'; put 'put ''ZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpfUBtZWRpYShtYXgtd2lkdGg6NTc2cHgpey5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b257''@;'; put 'put ''Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtc3RhdHVze21pbi13aWR0aDppbml0aWFsO3dpZHRoOmluaXRpYWx9LmNsci1zdGVwcGVyLWZvcm1z''@;'; put 'put ''IC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtdGl0bGUtd3JhcHBlcnt3aWR0aDppbml0aWFsfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVw''@;'; put 'put ''LXRpdGxlLXdyYXBwZXI+LmNsci1zdGVwLW51bWJlcnttaW4td2lkdGg6aW5pdGlhbH0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uLC5jbHItc3RlcHBlci1mb3JtcyAu''@;'; put 'put ''Y2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLWRlc2NyaXB0aW9ue21hcmdpbi1sZWZ0OjB9fS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLWFjY29yZGlvbi1wYW5lbC1pbmFjdGl2ZTpub3QoLmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbik+''@;'; put 'put ''LmNsci1zdGVwcGVyLWhlYWRlciAuY2xyLXN0ZXAtYW5nbGV7dmlzaWJpbGl0eTpoaWRkZW59QG1lZGlhKG1heC13aWR0aDo1NzZweCl7LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItYWNjb3JkaW9uLXBhbmVsLWluYWN0aXZlOm5vdCguY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuKT4uY2xyLXN0''@;'; put 'put ''ZXBwZXItaGVhZGVyIC5jbHItc3RlcC1hbmdsZXtkaXNwbGF5Om5vbmV9fS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXAtYnV0dG9ue21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX1jbHItc3RlcHBl''@;'; put 'put ''ci1wYW5lbCAuY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50e3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci10aW1lbGluZS1saW5lLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci10aW1lbGluZS1zdGVwLWhlYWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXRpbWVsaW5lLXN0ZXAtdGl0bGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAw''@;'; put 'put ''KTstLWNsci10aW1lbGluZS1zdGVwLWRlc2NyaXB0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItdGltZWxpbmUtaW5jb21wbGV0ZS1zdGVwLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTst''@;'; put 'put ''LWNsci10aW1lbGluZS1jdXJyZW50LXN0ZXAtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItdGltZWxpbmUtc3VjY2Vzcy1zdGVwLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItdGlt''@;'; put 'put ''ZWxpbmUtZXJyb3Itc3RlcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItdGltZWxpbmUtc3RlcC10aXRsZS1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItdGltZWxpbmUtc3RlcC1pbnRl''@;'; put 'put ''cm5hbC1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LmNsci10aW1lbGluZXtkaXNwbGF5OmZsZXg7cGFkZGluZzp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKX0uY2xyLXRpbWVsaW5lLXN0ZXB7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNv''@;'; put 'put ''bHVtbjt3aWR0aDoxMDAlO21pbi13aWR0aDpjYWxjKDE3NSooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uY2xyLXRpbWVsaW5lLXN0ZXAgY2RzLWljb24sLmNsci10aW1lbGluZS1zdGVwIGNsci1pY29ue2hlaWdo''@;'; put 'put ''dDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKX0uY2xyLXRpbWVsaW5lLXN0ZXAgY2RzLWljb25b''@;'; put 'put ''c2hhcGU9Y2lyY2xlXSwuY2xyLXRpbWVsaW5lLXN0ZXAgY2xyLWljb25bc2hhcGU9Y2lyY2xlXXtjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtaW5jb21wbGV0ZS1zdGVwLWNvbG9yKX0uY2xyLXRpbWVsaW5lLXN0ZXAgY2RzLWljb25bc2hhcGU9ZG90LWNpcmNsZV0sLmNsci10aW1lbGluZS1z''@;'; put 'put ''dGVwIGNsci1pY29uW3NoYXBlPWRvdC1jaXJjbGVde2NvbG9yOnZhcigtLWNsci10aW1lbGluZS1jdXJyZW50LXN0ZXAtY29sb3IpfS5jbHItdGltZWxpbmUtc3RlcCBjZHMtaWNvbltzaGFwZT1zdWNjZXNzLXN0YW5kYXJkXSwuY2xyLXRpbWVsaW5lLXN0ZXAgY2xyLWljb25bc2hhcGU9c3Vj''@;'; put 'put ''Y2Vzcy1zdGFuZGFyZF17Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLXN1Y2Nlc3Mtc3RlcC1jb2xvcil9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uW3NoYXBlPWVycm9yLXN0YW5kYXJkXSwuY2xyLXRpbWVsaW5lLXN0ZXAgY2xyLWljb25bc2hhcGU9ZXJyb3Itc3RhbmRhcmRde2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci10aW1lbGluZS1lcnJvci1zdGVwLWNvbG9yKX0uY2xyLXRpbWVsaW5lLXN0ZXAgY2xyLXNwaW5uZXIuc3Bpbm5lcnttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0uY2xyLXRpbWVsaW5lLXN0ZXAgY2xyLXNwaW5uZXIuc3Bpbm5lciwuY2xyLXRpbWVsaW5lLXN0''@;'; put 'put ''ZXAgY2xyLXNwaW5uZXIuc3Bpbm5lcjphZnRlciwuY2xyLXRpbWVsaW5lLXN0ZXAgY2xyLXNwaW5uZXIuc3Bpbm5lcjpiZWZvcmV7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS0xMCk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApfS5jbHItdGltZWxpbmUtc3RlcDpub3QoOmxhc3Qtb2YtdHlwZSkgLmNsci10aW1lbGluZS1zdGVwLWJvZHk6YmVmb3Jle2NvbnRlbnQ6IiI7YmFja2dyb3VuZDp2YXIoLS1jbHItdGltZWxpbmUtbGlu''@;'; put 'put ''ZS1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCk7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkgKyB2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKSk7dHJhbnNmb3JtOnRyYW5zbGF0''@;'; put 'put ''ZShjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpIC0gdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMjAwKSksY2FsYygtLjUqKHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSkpKX0uY2xy''@;'; put 'put ''LXRpbWVsaW5lLXN0ZXAtaGVhZGVye3doaXRlLXNwYWNlOm5vd3JhcDttYXJnaW4tYm90dG9tOnZhcigtLWNsci10aW1lbGluZS1zdGVwLWludGVybmFsLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci10aW1lbGluZS1zdGVwLWhlYWRlci1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bSk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3Bh''@;'; put 'put ''Y2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItdGltZWxpbmUtc3RlcC1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb24sLmNsci10aW1lbGluZS1z''@;'; put 'put ''dGVwLWJvZHkgY2xyLWljb257aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6aW5pdGlhbDttaW4taGVpZ2h0OmluaXRpYWx9LmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb25bc2hhcGU9Y2lyY2xl''@;'; put 'put ''XSwuY2xyLXRpbWVsaW5lLXN0ZXAtYm9keSBjZHMtaWNvbltzaGFwZT1kb3QtY2lyY2xlXSwuY2xyLXRpbWVsaW5lLXN0ZXAtYm9keSBjZHMtaWNvbltzaGFwZT1zdWNjZXNzLXN0YW5kYXJkXSwuY2xyLXRpbWVsaW5lLXN0ZXAtYm9keSBjZHMtaWNvbltzaGFwZT1lcnJvci1zdGFuZGFyZF0s''@;'; put 'put ''LmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb25bc2hhcGU9Y2lyY2xlXSwuY2xyLXRpbWVsaW5lLXN0ZXAtYm9keSBjbHItaWNvbltzaGFwZT1kb3QtY2lyY2xlXSwuY2xyLXRpbWVsaW5lLXN0ZXAtYm9keSBjbHItaWNvbltzaGFwZT1zdWNjZXNzLXN0YW5kYXJkXSwuY2xyLXRpbWVs''@;'; put 'put ''aW5lLXN0ZXAtYm9keSBjbHItaWNvbltzaGFwZT1lcnJvci1zdGFuZGFyZF17Y29sb3I6aW5oZXJpdH0uY2xyLXRpbWVsaW5lLXN0ZXAtdGl0bGV7bWFyZ2luOnZhcigtLWNsci10aW1lbGluZS1zdGVwLWludGVybmFsLXNwYWNpbmcpIDA7Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAt''@;'; put 'put ''dGl0bGUtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC10aXRsZS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''c2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItdGltZWxpbmUtc3RlcC1kZXNjcmlwdGlvbntjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1kZXNjcmlwdGlvbi1j''@;'; put 'put ''b2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0''@;'; put 'put ''aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKX0uY2xyLXRpbWVsaW5lLXN0ZXAtZGVzY3JpcHRpb24gYnV0dG9ue2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDp2YXIoLS1jbHItdGltZWxpbmUt''@;'; put 'put ''c3RlcC1pbnRlcm5hbC1zcGFjaW5nKX0uY2xyLXRpbWVsaW5lLXN0ZXAtZGVzY3JpcHRpb24gaW1ne3dpZHRoOjEwMCU7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5jbHItdGltZWxpbmUuY2xyLXRpbWVsaW5lLXZlcnRpY2Fse2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtt''@;'; put 'put ''aW4td2lkdGg6Y2FsYygzMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItdGltZWxpbmUuY2xyLXRpbWVsaW5lLXZlcnRpY2FsIC5jbHItdGltZWxpbmUtc3RlcHtmbGV4LWRpcmVjdGlvbjpyb3c7bWFyZ2luLWxlZnQ6MDtwb3NpdGlvbjpyZWxhdGl2ZX0uY2xyLXRpbWVs''@;'; put 'put ''aW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbCAuY2xyLXRpbWVsaW5lLXN0ZXA6bm90KDpsYXN0LW9mLXR5cGUpe21hcmdpbi1ib3R0b206dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZyl9LmNsci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWwgLmNsci10aW1l''@;'; put 'put ''bGluZS1zdGVwOm5vdCg6bGFzdC1vZi10eXBlKSAuY2xyLXRpbWVsaW5lLXN0ZXAtYm9keTpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMjAwKTtoZWlnaHQ6Y2FsYygxMDAlIC0gKC41KnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtMTEpICsgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMjAwKSkpO3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYygtLjUqKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpICsgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMjAwKSkgLSB2YXIoLS1j''@;'; put 'put ''bHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKSksY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSAtIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkpKX0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbCAuY2xyLXRpbWVsaW5lLXN0''@;'; put 'put ''ZXAtaGVhZGVye3RleHQtYWxpZ246cmlnaHQ7d2hpdGUtc3BhY2U6bm9ybWFsO3dvcmQtYnJlYWs6YnJlYWstd29yZDt3aWR0aDpjYWxjKDYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttaW4td2lkdGg6Y2FsYyg2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWFy''@;'; put 'put ''Z2luOnZhcigtLWNsci10aW1lbGluZS1zdGVwLWludGVybmFsLXNwYWNpbmcpIHZhcigtLWNsci10aW1lbGluZS1zdGVwLWludGVybmFsLXNwYWNpbmcpIDAgMH0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbCAuY2xyLXRpbWVsaW5lLXN0ZXAtYm9keXtkaXNwbGF5OmZsZXg7''@;'; put 'put ''ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDpjYWxjKDE3OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWFyZ2luLWxlZnQ6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZyl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItYnJlYWRjcnVtYi1pdGVt''@;'; put 'put ''LXNwYWNlOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmNsci1icmVhZGNydW1iLW1lbnV7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLWJyZWFkY3J1bWItbWVudSAuY2xyLWJyZWFkY3J1bWItaXRlbXtkaXNwbGF5OmZsZXg7YWxpZ24taXRl''@;'; put 'put ''bXM6Y2VudGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLWJyZWFkY3J1bWItbWVudSAuY2xyLWJyZWFkY3J1bWItaXRlbSBhe3RleHQtZGVjb3JhdGlvbjpub25lO3RleHQt''@;'; put 'put ''YWxpZ246Y2VudGVyO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmNsci1icmVhZGNydW1iLW1lbnUgLmNsci1icmVhZGNydW1iLWl0ZW06bm90KDpsYXN0LWNoaWxkKTphZnRlcntjb250ZW50OiIvIjttYXJnaW46MCB2YXIoLS1jbHItYnJlYWRjcnVtYi1pdGVtLXNw''@;'; put 'put ''YWNlKTtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApfS5jbHItYnJlYWRjcnVtYi1tZW51IC5jbHItYnJlYWRjcnVtYi1pdGVtOmxhc3QtY2hpbGR7Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKX0uY2xyLWJyZWFkY3J1bWItbWVu''@;'; put 'put ''dSAuY2xyLWJyZWFkY3J1bWItZXhwYW5ke21hcmdpbjowO3BhZGRpbmc6MDtnYXA6MDttaW4td2lkdGg6Zml0LWNvbnRlbnR9Y2xyLW1vZGFse2Rpc3BsYXk6bm9uZX1jbHItbW9kYWwub3BlbntkaXNwbGF5OmlubGluZX1jbHItZXhwYW5kYWJsZS1hbmltYXRpb257ZGlzcGxheTpibG9ja31j''@;'; put 'put ''bHItc3RhY2stYmxvY2t7ZGlzcGxheTpibG9ja31jbHItc3RhY2staGVhZGVye2Rpc3BsYXk6YmxvY2t9Y2xyLXN0YWNrLXZpZXd7ZGlzcGxheTpibG9ja306cm9vdCBbY2RzLXRoZW1lXXstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseTp2YXIoLS1jbHItbWV0cm9wb2xpcy1m''@;'; put 'put ''b250LWZhbWlseSk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZHJvcC1iYWNrZ3JvdW5kOmhzbGEoMCwgMCUsIDEwMCUsIC42KTstLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTc1KTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0''@;'; put 'put ''cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tc2tlbGV0b24tZHVyYXRpb246NHM7LS1jZHMtZ2xv''@;'; put 'put ''YmFsLWFuaW1hdGlvbi1lYXNpbmctaW4tb3V0OmN1YmljLWJlemllciguNDIsIC4wMSwgLjU4LCAxKTstLWNkcy1hbGlhcy1vYmplY3Qtc2tlbGV0b24tbG9hZGluZy1ncmFkaWVudDpsaW5lYXItZ3JhZGllbnQoIDkwZGVnLCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJh''@;'; put 'put ''Y2tncm91bmQpIDAlLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApIDM1JSwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKSA2NSUsIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCkgMTAwJSApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lOkhpZ2hsaWdodCBhdXRvIDJweDstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5m''@;'; put 'put ''by1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWNsaWNrKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWNsaWNrKTstLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtaW50ZXJhY3Rpb24td2FybmluZy1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWNsaWNrKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRh''@;'; put 'put ''bmdlci1jbGljayk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1jbGljayk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtYWN0aXZlOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1jbGljayk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dy''@;'; put 'put ''b3VuZC1zaGFkZS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29u''@;'; put 'put ''c3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVy''@;'; put 'put ''c2U6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5l''@;'; put 'put ''ci1iYWNrZ3JvdW5kLWludmVyc2Utc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKX06cm9vdCBbY2RzLXRoZW1lfj1kYXJrXXstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXk6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1h''@;'; put 'put ''bGlhcy1zdGF0dXMtd2FybmluZy1kYXJrOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtOTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXRpbnQ6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tkcm9wLWJhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXI6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1z''@;'; put 'put ''ZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLW9iamVjdC1za2VsZXRvbi1sb2FkaW5nLWdyYWRpZW50OmxpbmVhci1ncmFkaWVudCggOTBkZWcsIHZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24tYmFja2dyb3VuZCkgMCUsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCkgMzUlLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApIDY1JSwgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5k''@;'; put 'put ''KSAxMDAlICk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1''@;'; put 'put ''Y3Rpb24tOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWFjdGl2ZTp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3Jv''@;'; put 'put ''dW5kLXNoYWRlLXNlbGVjdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9u''@;'; put 'put ''LTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2U6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS10aW50OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2Utc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKX1AY2hhcnNldCAiVVRGLTgiO1tjbGFzcyo9aHQtdGhlbWUtY2xhc3NpY10gLmh0''@;'; put 'put ''RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0U3VibWVudSAuaHRJdGVtV3JhcHBlcjphZnRlcixbY2xhc3MqPWh0LXRoZW1lLWNsYXNzaWNdIC5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0U3VibWVudSAuaHRJdGVtV3JhcHBlcjphZnRlcixbY2xhc3MqPWh0LXRo''@;'; put 'put ''ZW1lLWNsYXNzaWNdIC5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFN1Ym1lbnUgLmh0SXRlbVdyYXBwZXI6YWZ0ZXIsW2NsYXNzKj1odC10aGVtZS1jbGFzc2ljXSAucGlrYS1zaW5nbGUgLnBpa2EtbmV4dHt3aWR0aDp2YXIoLS1odC1pY29uLXNpemUpO2hl''@;'; put 'put ''aWdodDp2YXIoLS1odC1pY29uLXNpemUpOy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47LXdlYmtpdC1tYXNrLWltYWdlOnVybCgvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvYXJyb3ctcmlnaHQuMzQ5ZWIzY2E2MzRkN2RhZC1zdmcp''@;'; put 'put ''O2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfVtjbGFzcyo9aHQtdGhlbWUtY2xhc3NpY10gLnBpa2Etc2luZ2xlIC5waWthLXByZXZ7d2lkdGg6dmFyKC0taHQtaWNvbi1zaXplKTtoZWlnaHQ6dmFyKC0taHQtaWNvbi1zaXplKTstd2Via2l0LW1hc2stc2l6ZTpjb250YWluOy13ZWJr''@;'; put 'put ''aXQtbWFzay1pbWFnZTp1cmwoL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2Fycm93LWxlZnQuMTRmNDQyZDAzM2RhNzY4NS1zdmcpO2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfVtjbGFzcyo9aHQtdGhlbWUtY2xhc3NpY10g''@;'; put 'put ''Lmh0LXBhZ2Utc2l6ZS1zZWN0aW9uX19zZWxlY3Qtd3JhcHBlcjphZnRlcnt3aWR0aDp2YXIoLS1odC1pY29uLXNpemUpO2hlaWdodDp2YXIoLS1odC1pY29uLXNpemUpOy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47LXdlYmtpdC1tYXNrLWltYWdlOnVybCgvU0FTU3RvcmVkUHJvY2Vzcy8/''@;'; put 'put ''X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvYXJyb3ctZG93bi5kODhkZWUxNjM2M2M2OTU3LXN2Zyk7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9W2NsYXNzKj1odC10aGVtZS1jbGFzc2ljXSAuY2hhbmdlVHlwZTpiZWZvcmV7d2lkdGg6dmFyKC0taHQtaWNv''@;'; put 'put ''bi1zaXplKTtoZWlnaHQ6dmFyKC0taHQtaWNvbi1zaXplKTstd2Via2l0LW1hc2stc2l6ZTpjb250YWluOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L3NlbGVjdC1hcnJvdy41NWMxY2VkNmM4''@;'; put 'put ''YjI1YjEyLXN2Zyk7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9W2NsYXNzKj1odC10aGVtZS1jbGFzc2ljXSAuaHRVSVNlbGVjdENhcHRpb246YWZ0ZXIsLmh0QXV0b2NvbXBsZXRlQXJyb3c6YWZ0ZXJ7d2lkdGg6dmFyKC0taHQtaWNvbi1zaXplKTtoZWlnaHQ6dmFyKC0taHQtaWNv''@;'; put 'put ''bi1zaXplKTstd2Via2l0LW1hc2stc2l6ZTpjb250YWluOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L3NlbGVjdC1hcnJvdy41NWMxY2VkNmM4YjI1YjEyLXN2Zyk7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjpjdXJyZW50Q29sb3J9W2NsYXNzKj1odC10aGVtZS1jbGFzc2ljXSAuY29sdW1uU29ydGluZy5zb3J0QWN0aW9uLmFzY2VuZGluZzpiZWZvcmV7d2lkdGg6dmFyKC0taHQtaWNvbi1zaXplKTtoZWlnaHQ6dmFyKC0taHQtaWNvbi1zaXplKTstd2Via2l0LW1hc2stc2l6ZTpjb250YWluOy13''@;'; put 'put ''ZWJraXQtbWFzay1pbWFnZTp1cmwoL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2Fycm93LW5hcnJvdy11cC5mNjY4YTM5ZDljYjYxMzU1LXN2Zyk7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9W2NsYXNzKj1odC10aGVtZS1j''@;'; put 'put ''bGFzc2ljXSAuY29sdW1uU29ydGluZy5zb3J0QWN0aW9uLmRlc2NlbmRpbmc6YmVmb3Jle3dpZHRoOnZhcigtLWh0LWljb24tc2l6ZSk7aGVpZ2h0OnZhcigtLWh0LWljb24tc2l6ZSk7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9TQVNTdG9yZWRQ''@;'; put 'put ''cm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9hcnJvdy1uYXJyb3ctZG93bi41OWRjZTI2ZmZiN2I2ODcwLXN2Zyk7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9W2NsYXNzKj1odC10aGVtZS1jbGFzc2ljXSAuaHQtcGFnZS1uYXZpZ2F0aW9uLXNl''@;'; put 'put ''Y3Rpb24gLmh0LXBhZ2UtZmlyc3Q6YmVmb3Jle3dpZHRoOnZhcigtLWh0LWljb24tc2l6ZSk7aGVpZ2h0OnZhcigtLWh0LWljb24tc2l6ZSk7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5''@;'; put 'put ''NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9hcnJvdy1sZWZ0LXdpdGgtYmFyLjRhNGMwMzM1ZTg0N2ZjZjgtc3ZnKTtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn1bY2xhc3MqPWh0LXRoZW1lLWNsYXNzaWNdIFtkaXI9cnRsXSAuaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb24gLmh0LXBh''@;'; put 'put ''Z2UtZmlyc3Q6YmVmb3Jle3dpZHRoOnZhcigtLWh0LWljb24tc2l6ZSk7aGVpZ2h0OnZhcigtLWh0LWljb24tc2l6ZSk7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExD''@;'; put 'put ''ZmRBPT0vd2ViOS9hcnJvdy1yaWdodC13aXRoLWJhci4wNWU3NWM1MGFmYzkyOTZkLXN2Zyk7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9W2NsYXNzKj1odC10aGVtZS1jbGFzc2ljXSAuaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb24gLmh0LXBhZ2UtcHJldjpiZWZvcmV7d2lkdGg6''@;'; put 'put ''dmFyKC0taHQtaWNvbi1zaXplKTtoZWlnaHQ6dmFyKC0taHQtaWNvbi1zaXplKTstd2Via2l0LW1hc2stc2l6ZTpjb250YWluOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2Fycm93LWxlZnQu''@;'; put 'put ''MTRmNDQyZDAzM2RhNzY4NS1zdmcpO2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfVtjbGFzcyo9aHQtdGhlbWUtY2xhc3NpY10gW2Rpcj1ydGxdIC5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbiAuaHQtcGFnZS1wcmV2OmJlZm9yZXt3aWR0aDp2YXIoLS1odC1pY29uLXNpemUpO2hl''@;'; put 'put ''aWdodDp2YXIoLS1odC1pY29uLXNpemUpOy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47LXdlYmtpdC1tYXNrLWltYWdlOnVybCgvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvYXJyb3ctcmlnaHQuMzQ5ZWIzY2E2MzRkN2RhZC1zdmcp''@;'; put 'put ''O2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfVtjbGFzcyo9aHQtdGhlbWUtY2xhc3NpY10gLmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uIC5odC1wYWdlLW5leHQ6YmVmb3Jle3dpZHRoOnZhcigtLWh0LWljb24tc2l6ZSk7aGVpZ2h0OnZhcigtLWh0LWljb24tc2l6ZSk7LXdlYmtp''@;'; put 'put ''dC1tYXNrLXNpemU6Y29udGFpbjstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9hcnJvdy1yaWdodC4zNDllYjNjYTYzNGQ3ZGFkLXN2Zyk7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9''@;'; put 'put ''W2NsYXNzKj1odC10aGVtZS1jbGFzc2ljXSBbZGlyPXJ0bF0gLmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uIC5odC1wYWdlLW5leHQ6YmVmb3Jle3dpZHRoOnZhcigtLWh0LWljb24tc2l6ZSk7aGVpZ2h0OnZhcigtLWh0LWljb24tc2l6ZSk7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjst''@;'; put 'put ''d2Via2l0LW1hc2staW1hZ2U6dXJsKC9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9hcnJvdy1sZWZ0LjE0ZjQ0MmQwMzNkYTc2ODUtc3ZnKTtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn1bY2xhc3MqPWh0LXRoZW1lLWNsYXNz''@;'; put 'put ''aWNdIC5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbiAuaHQtcGFnZS1sYXN0OmJlZm9yZXt3aWR0aDp2YXIoLS1odC1pY29uLXNpemUpO2hlaWdodDp2YXIoLS1odC1pY29uLXNpemUpOy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47LXdlYmtpdC1tYXNrLWltYWdlOnVybCgvU0FTU3RvcmVk''@;'; put 'put ''UHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvYXJyb3ctcmlnaHQtd2l0aC1iYXIuMDVlNzVjNTBhZmM5Mjk2ZC1zdmcpO2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfVtjbGFzcyo9aHQtdGhlbWUtY2xhc3NpY10gW2Rpcj1ydGxdIC5odC1wYWdl''@;'; put 'put ''LW5hdmlnYXRpb24tc2VjdGlvbiAuaHQtcGFnZS1sYXN0OmJlZm9yZXt3aWR0aDp2YXIoLS1odC1pY29uLXNpemUpO2hlaWdodDp2YXIoLS1odC1pY29uLXNpemUpOy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47LXdlYmtpdC1tYXNrLWltYWdlOnVybCgvU0FTU3RvcmVkUHJvY2Vzcy8/X1BS''@;'; put 'put ''T0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvYXJyb3ctbGVmdC13aXRoLWJhci40YTRjMDMzNWU4NDdmY2Y4LXN2Zyk7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9W2NsYXNzKj1odC10aGVtZS1jbGFzc2ljXSAuaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIg''@;'; put 'put ''dGQgLmh0SXRlbVdyYXBwZXIgc3Bhbi5zZWxlY3RlZDphZnRlcixbY2xhc3MqPWh0LXRoZW1lLWNsYXNzaWNdIC5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVyIHNwYW4uc2VsZWN0ZWQ6YWZ0ZXIsW2NsYXNzKj1odC10aGVtZS1jbGFzc2ljXSAuaHRGaWx0''@;'; put 'put ''ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXIgc3Bhbi5zZWxlY3RlZDphZnRlcnt3aWR0aDp2YXIoLS1odC1pY29uLXNpemUpO2hlaWdodDp2YXIoLS1odC1pY29uLXNpemUpOy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47LXdlYmtpdC1tYXNrLWlt''@;'; put 'put ''YWdlOnVybCgvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvY2hlY2suYTdlNjRiZGUxODUwMjQwOC1zdmcpO2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfVtjbGFzcyo9aHQtdGhlbWUtY2xhc3NpY10gLmh0Q2hlY2tib3hSZW5k''@;'; put 'put ''ZXJlcklucHV0e2FwcGVhcmFuY2U6bm9uZX1bY2xhc3MqPWh0LXRoZW1lLWNsYXNzaWNdIC5odENoZWNrYm94UmVuZGVyZXJJbnB1dDphZnRlcnt3aWR0aDp2YXIoLS1odC1pY29uLXNpemUpO2hlaWdodDp2YXIoLS1odC1pY29uLXNpemUpOy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47LXdl''@;'; put 'put ''YmtpdC1tYXNrLWltYWdlOnVybCgvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvY2hlY2tib3guZWFmODI0MzVjYmI1NmVlMi1zdmcpO2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfVtjbGFzcyo9aHQtdGhlbWUtY2xhc3NpY10g''@;'; put 'put ''dGguYmVmb3JlSGlkZGVuQ29sdW1uOmFmdGVye3dpZHRoOnZhcigtLWh0LWljb24tc2l6ZSk7aGVpZ2h0OnZhcigtLWh0LWljb24tc2l6ZSk7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5''@;'; put 'put ''NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9jYXJldC1oaWRkZW4tbGVmdC41ZGE0NDM0NWVjZjNiM2QzLXN2Zyk7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9W2NsYXNzKj1odC10aGVtZS1jbGFzc2ljXSB0aC5hZnRlckhpZGRlbkNvbHVtbjpiZWZvcmV7d2lkdGg6dmFyKC0taHQtaWNv''@;'; put 'put ''bi1zaXplKTtoZWlnaHQ6dmFyKC0taHQtaWNvbi1zaXplKTstd2Via2l0LW1hc2stc2l6ZTpjb250YWluOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2NhcmV0LWhpZGRlbi1yaWdodC5kNjY1''@;'; put 'put ''NWI0ZGExM2M0MzZiLXN2Zyk7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9W2NsYXNzKj1odC10aGVtZS1jbGFzc2ljXSB0aC5iZWZvcmVIaWRkZW5Sb3c6YWZ0ZXJ7d2lkdGg6dmFyKC0taHQtaWNvbi1zaXplKTtoZWlnaHQ6dmFyKC0taHQtaWNvbi1zaXplKTstd2Via2l0LW1hc2st''@;'; put 'put ''c2l6ZTpjb250YWluOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2NhcmV0LWhpZGRlbi11cC4zYmI5NjQ0YTEwOTUwNWE4LXN2Zyk7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9W2Ns''@;'; put 'put ''YXNzKj1odC10aGVtZS1jbGFzc2ljXSB0aC5hZnRlckhpZGRlblJvdzpiZWZvcmV7d2lkdGg6dmFyKC0taHQtaWNvbi1zaXplKTtoZWlnaHQ6dmFyKC0taHQtaWNvbi1zaXplKTstd2Via2l0LW1hc2stc2l6ZTpjb250YWluOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoL1NBU1N0b3JlZFByb2Nl''@;'; put 'put ''c3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2NhcmV0LWhpZGRlbi1kb3duLmFiYWNjMTk1NTI2Y2NjYzQtc3ZnKTtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn1bY2xhc3MqPWh0LXRoZW1lLWNsYXNzaWNdIC5jb2xsYXBzaWJsZUluZGljYXRvcjpiZWZv''@;'; put 'put ''cmUsW2NsYXNzKj1odC10aGVtZS1jbGFzc2ljXSAuaHRfbmVzdGluZ0J1dHRvbjpiZWZvcmV7d2lkdGg6dmFyKC0taHQtaWNvbi1zaXplKTtoZWlnaHQ6dmFyKC0taHQtaWNvbi1zaXplKTstd2Via2l0LW1hc2stc2l6ZTpjb250YWluOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoL1NBU1N0b3Jl''@;'; put 'put ''ZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2NvbGxhcHNlLW9mZi42ZjhjYmIyZTY0M2E1YTg1LXN2Zyk7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9W2NsYXNzKj1odC10aGVtZS1jbGFzc2ljXSAuY29sbGFwc2libGVJbmRpY2F0b3IuY29s''@;'; put 'put ''bGFwc2VkOmJlZm9yZSxbY2xhc3MqPWh0LXRoZW1lLWNsYXNzaWNdIC5odF9uZXN0aW5nQnV0dG9uLmh0X25lc3RpbmdFeHBhbmQ6YmVmb3Jle3dpZHRoOnZhcigtLWh0LWljb24tc2l6ZSk7aGVpZ2h0OnZhcigtLWh0LWljb24tc2l6ZSk7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjstd2Vi''@;'; put 'put ''a2l0LW1hc2staW1hZ2U6dXJsKC9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9jb2xsYXBzZS1vbi41ZmU1Y2NlM2JmNjRlODM3LXN2Zyk7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9W2NsYXNzKj1odC10aGVtZS1jbGFzc2lj''@;'; put 'put ''XSAuaHRVSVJhZGlvPmlucHV0W3R5cGU9cmFkaW9dOmFmdGVye3dpZHRoOnZhcigtLWh0LWljb24tc2l6ZSk7aGVpZ2h0OnZhcigtLWh0LWljb24tc2l6ZSk7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JB''@;'; put 'put ''TT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9yYWRpby42MDYxY2YwNGZlYzZhMTE3LXN2Zyk7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9W2NsYXNzKj1odC10aGVtZS1jbGFzc2ljXSAuaHQtbXVsdGktc2VsZWN0LWNoaXAtcmVtb3ZlOmJlZm9yZXt3aWR0aDp2YXIoLS1o''@;'; put 'put ''dC1pY29uLXNpemUpO2hlaWdodDp2YXIoLS1odC1pY29uLXNpemUpOy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47LXdlYmtpdC1tYXNrLWltYWdlOnVybCgvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvY2hpcC1jbG9zZS5lMDBmNmQ3''@;'; put 'put ''MWZlNjU2Zjg4LXN2Zyk7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9W2NsYXNzKj1odC10aGVtZS1jbGFzc2ljXSAuaHQtbm90aWZpY2F0aW9uX19jbG9zZTpiZWZvcmV7d2lkdGg6dmFyKC0taHQtaWNvbi1zaXplKTtoZWlnaHQ6dmFyKC0taHQtaWNvbi1zaXplKTstd2Via2l0LW1h''@;'; put 'put ''c2stc2l6ZTpjb250YWluOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2NoaXAtY2xvc2UuZTAwZjZkNzFmZTY1NmY4OC1zdmcpO2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfVtjbGFz''@;'; put 'put ''cyo9aHQtdGhlbWUtY2xhc3NpY10gLmh0LW11bHRpLXNlbGVjdC1lZGl0b3Itc2VhcmNoLWljb257d2lkdGg6dmFyKC0taHQtaWNvbi1zaXplKTtoZWlnaHQ6dmFyKC0taHQtaWNvbi1zaXplKTstd2Via2l0LW1hc2stc2l6ZTpjb250YWluOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoL1NBU1N0''@;'; put 'put ''b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L3NlYXJjaC5lNTdkNDVhOTVhNTA2NmU3LXN2Zyk7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9W2NsYXNzKj1odC10aGVtZS1jbGFzc2ljXSAuaHQtbXVsdGktc2VsZWN0LWVkaXRvci1pdGVt''@;'; put 'put ''LXNlbGVjdGVkIGlucHV0OmFmdGVye3dpZHRoOnZhcigtLWh0LWljb24tc2l6ZSk7aGVpZ2h0OnZhcigtLWh0LWljb24tc2l6ZSk7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZS''@;'; put 'put ''UWxOMExDZmRBPT0vd2ViOS9jaGVja2JveC5lYWY4MjQzNWNiYjU2ZWUyLXN2Zyk7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9QGZvbnQtZmFjZXtmb250LWZhbWlseTpNZXRyb3BvbGlzO3NyYzp1cmwoL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4w''@;'; put 'put ''TENmZEE9PS93ZWI5L01ldHJvcG9saXMtMjAwLjA2MDkzMzdhNzI2MzIzZTAtd29mZikgZm9ybWF0KCJ3b2ZmIik7Zm9udC13ZWlnaHQ6MjAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtZGlzcGxheTpzd2FwfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6TWV0cm9wb2xpcztzcmM6dXJsKC9TQVNT''@;'; put 'put ''dG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9NZXRyb3BvbGlzLTQwMC4wNTQ0NjY3MGQyN2Y3NjY2LXdvZmYpIGZvcm1hdCgid29mZiIpO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXN0eWxlOm5vcm1hbDtmb250LWRpc3BsYXk6c3dhcH1AZm9udC1m''@;'; put 'put ''YWNle2ZvbnQtZmFtaWx5Ok1ldHJvcG9saXM7c3JjOnVybCgvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvTWV0cm9wb2xpcy01MDAuNGVmZDU4MGE0M2I0ZTExNi13b2ZmKSBmb3JtYXQoIndvZmYiKTtmb250LXdlaWdodDo1MDA7Zm9u''@;'; put 'put ''dC1zdHlsZTpub3JtYWw7Zm9udC1kaXNwbGF5OnN3YXB9QGZvbnQtZmFjZXtmb250LWZhbWlseTpNZXRyb3BvbGlzO3NyYzp1cmwoL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L01ldHJvcG9saXMtNjAwLmIyODAxYTM4YTc0ZWM2YzEt''@;'; put 'put ''d29mZikgZm9ybWF0KCJ3b2ZmIik7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtZGlzcGxheTpzd2FwfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6dGV4dC1zZWN1cml0eS1kaXNjO3NyYzp1cmwoL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJR''@;'; put 'put ''bE4wTENmZEE9PS93ZWI5L3RleHQtc2VjdXJpdHktZGlzYy5mNzU4MTMwYmMwZmZjMTExLXdvZmYpIGZvcm1hdCgid29mZiIpfWFwcC1lZGl0b3IgLmNhcmR7bWFyZ2luLXRvcDowO2JvcmRlcjowfWFwcC1lZGl0b3IgLmJ1dHRvbkJhcntwYWRkaW5nOjJweCAxMHB4O2FsaWduLWl0ZW1zOmNl''@;'; put 'put ''bnRlcn1hcHAtZWRpdG9yIC50ZXN0UmVke2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZjAwYyFpbXBvcnRhbnR9YXBwLWVkaXRvciBob3QtdGFibGUgLmZpcnN0Q29sdW1uSGVhZGVyU3R5bGUgYnV0dG9uLmNoYW5nZVR5cGV7ZGlzcGxheTpub25lfWFwcC1lZGl0b3IgaG90LXRhYmxlIC5oYW5k''@;'; put 'put ''c29udGFibGUgdGJvZHkgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGUsYXBwLWVkaXRvciBob3QtdGFibGUgLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDBiMCFpbXBv''@;'; put 'put ''cnRhbnR9YXBwLWVkaXRvciBob3QtdGFibGUgLnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDA2ZSFpbXBvcnRhbnR9YXBwLWVkaXRvciBob3QtdGFibGUgdGgucmVhZG9ubHlDZWxsIGRpdntvcGFjaXR5Oi40fWFwcC1lZGl0b3IgaG90LXRhYmxlIHRkLnJl''@;'; put 'put ''YWRvbmx5Q2VsbHtvcGFjaXR5Oi41fWFwcC1lZGl0b3IgaG90LXRhYmxlIHRoLnJvd1N0YXR1c0FkZGVke2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWxhYmVsLXN1Y2Nlc3MtYmctY29sb3IpIWltcG9ydGFudH1hcHAtZWRpdG9yIGhvdC10YWJsZSB0aC5yb3dTdGF0dXNEZWxldGVke2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWxhYmVsLWRhbmdlci1iZy1jb2xvcikhaW1wb3J0YW50fWFwcC1lZGl0b3IgaG90LXRhYmxlIHRoLnJvd1N0YXR1c01vZGlmaWVke2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWxhYmVsLXdhcm5pbmctYmctY29sb3IpIWltcG9ydGFudH1hcHAt''@;'; put 'put ''ZWRpdG9yIC5zdWJtaXQtcmVhc29ue21pbi1oZWlnaHQ6MTIwcHg7bWF4LWhlaWdodDoxMjBweDtoZWlnaHQ6MTIwcHh9YXBwLWVkaXRvciAuaW5mb0JhcnttYXJnaW4tdG9wOjE0cHh9YXBwLWVkaXRvciAucGtIZWFkZXJ7YmFja2dyb3VuZDojNjg3NjgyO2NvbG9yOiNmZmY7bWFyZ2luOi0x''@;'; put 'put ''cHh9YXBwLWVkaXRvciAuaGVhZGVyQmFye2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYmctY29sb3IpfWFwcC1lZGl0b3IgLmVycm9yLWljb257d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtjb2xvcjpyZWR9YXBwLWVkaXRvciAuYnRuQ3RybHtk''@;'; put 'put ''aXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfWFwcC1lZGl0b3IgLmNhcmQtaGVhZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHRyYW5zcGFyZW50fWFwcC1lZGl0b3IgLmhpZGRlbnt2aXNpYmlsaXR5OmhpZGRlbn1hcHAtZWRpdG9yIC5teS1kcm9wLXpvbmV7Ym9yZGVy''@;'; put 'put ''OnNvbGlkIDFweCBsaWdodGdyYXk7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6I2Y1ZjVmNTtib3gtc2hhZG93Omluc2V0IDAgMCA0cHggMnB4ICNhN2E1YTUyYjtoZWlnaHQ6NTB2aH1hcHAtZWRpdG9yIC5udi1maWxlLW92ZXJ7Ym9yZGVyOnNvbGlkIDJweCBncmVlbn1hcHAtZWRp''@;'; put 'put ''dG9yIC5maWxlLWRyb3AtdGV4dHt0ZXh0LWFsaWduOmNlbnRlcn1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2OHB4KXthcHAtZWRpdG9yIC5wcm9ncmVzU3RhdGlje21hcmdpbi10b3A6OXB4IWltcG9ydGFudH1hcHAtZWRpdG9yIC5wcm9ncmVzcyxhcHAtZWRpdG9yIC5wcm9ncmVz''@;'; put 'put ''cy1zdGF0aWN7d2lkdGg6Y2FsYygxMDAlIC0gMTRweCl9fWFwcC1lZGl0b3IgLmhvdEVkaXRvcntwb3NpdGlvbjpyZWxhdGl2ZX1hcHAtZWRpdG9yIC5leGNlbC1wYXJzaW5ne2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJl''@;'; put 'put ''bGF0aXZlfWFwcC1lZGl0b3IgLmV4Y2VsLXBhcnNpbmcgLmRldGFpbHN7bWFyZ2luOjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOi00NXB4fWFwcC1lZGl0b3IgLmVkaXQtcmVjb3JkLXNwaW5uZXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVy''@;'; put 'put ''O2JhY2tncm91bmQ6I2ZmZjk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7d2lkdGg6MTAwJTt6LWluZGV4OjUwMH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjQ4MHB4KXthcHAtZWRpdG9yIC5wcm9ncmVzU3RhdGlje21hcmdpbi10b3A6MzJweCFpbXBvcnRhbnR9YXBw''@;'; put 'put ''LWVkaXRvciAuY2FyZC1ibG9jayxhcHAtZWRpdG9yIC5jYXJkLWZvb3RlcntwYWRkaW5nOjEwcHggMCAwfX1hcHAtZWRpdG9yIC5jb250ZW50LWFyZWF7cGFkZGluZzowIC44cmVtIC44cmVtIWltcG9ydGFudDtwYWRkaW5nLXRvcDowfWFwcC1lZGl0b3IgLmRyb3AtYXJlYXtwb3NpdGlvbjpm''@;'; put 'put ''aXhlZDtpbnNldDowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luOjFweDtib3JkZXI6MnB4IGRhc2hlZCAjZmZmO3otaW5kZXg6LTF9YXBwLWVkaXRvciAuZHJvcC1hcmVhIHNwYW57Zm9udC1zaXplOjIwcHg7bWFyZ2lu''@;'; put 'put ''LXRvcDoyMHB4O3BhZGRpbmc6MTBweDtiYWNrZ3JvdW5kOiNkYmRiZGI7Ym9yZGVyLXJhZGl1czo1cHg7Y29sb3I6IzAwMH1hcHAtZWRpdG9yICNzdWJtaXRCdG4sYXBwLWVkaXRvciAjY2FuY2VsU3VibWl0QnRue3dpZHRoOjE1MHB4fWFwcC1lZGl0b3IgLnZpZXctdGFibGV7Zm9udC1zaXpl''@;'; put 'put ''OmluaGVyaXQhaW1wb3J0YW50O2NvbG9yOiMxYTU3YmIhaW1wb3J0YW50fUBtZWRpYShtYXgtd2lkdGg6OTkycHgpe2FwcC1lZGl0b3IgLmljb24tY29sbGFwc2UgLnRleHR7ZGlzcGxheTpub25lfX1teS1hcHAgYXBwLXJlcXVlc3RzLW1vZGFse3otaW5kZXg6MTAwMDB9bXktYXBwIGhlYWRl''@;'; put 'put ''ci5hcHAtaGVhZGVye2JhY2tncm91bmQ6IzMxNDM1MSFpbXBvcnRhbnQ7Y29sb3I6I2ZmZn1teS1hcHAgLmxvZ28gaW1nLndpdGhvdXQtdGV4dHt3aWR0aDozMHB4fW15LWFwcCAubG9nbyBpbWcud2l0aC10ZXh0e3dpZHRoOjIxMHB4fW15LWFwcCAuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2Vy''@;'; put 'put ''e2Rpc3BsYXk6YmxvY2s7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6MDttYXJnaW4tbGVmdDoxMHB4fW15LWFwcCAuZGVtby1leHBpcmVkLW5vdGljZXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246Zml4ZWQ7bGVm''@;'; put 'put ''dDowO3RvcDowO2hlaWdodDoxMDB2aCFpbXBvcnRhbnQ7d2lkdGg6MTAwdnchaW1wb3J0YW50O3otaW5kZXg6MTA1O2JhY2tncm91bmQ6IzIxMjEyMTgwfW15LWFwcCAuZGVtby1leHBpcmVkLW5vdGljZSAuZXhwaXJlZC1kZXRhaWxze2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVt''@;'; put 'put ''czpjZW50ZXI7cGFkZGluZzozMHB4O3otaW5kZXg6MTEwO2JhY2tncm91bmQ6IzMxNDM1MX1teS1hcHAgLmRlbW8tZXhwaXJlZC1ub3RpY2UgLmV4cGlyZWQtZGV0YWlscyAuZXhwaXJlZC1ub3RpY2V7Y29sb3I6I2UwZTBlMDtmb250LXNpemU6MTZweH1teS1hcHAgLmRlbW8tZXhwaXJlZC1u''@;'; put 'put ''b3RpY2UgLmV4cGlyZWQtZGV0YWlscyAuZXhwaXJlZC1ub3RpY2UgLm1haWx0b3tjb2xvcjojOGRjNTNlfW15LWFwcCAubWFpbi1jb250YWluZXIgLnVwZGF0ZS1rZXl7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtjb2xvcjojZmZmO3BhZGRpbmc6MCAxMHB4O2JhY2tncm91bmQ6''@;'; put 'put ''IzAwMDAwMDI2fW15LWFwcCAuYWxlcnQtaWNvbi13cmFwcGVye21hcmdpbi10b3A6MCFpbXBvcnRhbnR9bXktYXBwIC5uYXYtdGV4dHttYXJnaW4tcmlnaHQ6MjBweH1teS1hcHAgLnNpZGViYXItdG9nZ2xle2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJTthbGlnbi1pdGVtczpjZW50ZXI7cGFk''@;'; put 'put ''ZGluZy1sZWZ0OjEwcHh9bXktYXBwIC5zaWRlYmFyLXRvZ2dsZSBjbHItaWNvbntjdXJzb3I6cG9pbnRlcjt3aWR0aDozMHB4O2hlaWdodDozMHB4fW15LWFwcCBoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5kcm9wZG93bntwb3NpdGlvbjp1bnNldH1teS1hcHAgaGVhZGVyIC5uYXYtbGluazpo''@;'; put 'put ''b3Zlcntjb2xvcjojZmFmYWZhfW15LWFwcCBoZWFkZXIgLm5hdi1saW5rLmFjdGl2ZXtiYWNrZ3JvdW5kOiMxZDJmM2R9bXktYXBwIC5ub3Rme2JhY2tncm91bmQ6IzE2YTU3YTtjb2xvcjojZmZmY2ZjO2ZvbnQtc2l6ZToxMnB4fW15LWFwcCAudG9nZ2xlLXN3aXRjaCBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkK2xhYmVsOmJlZm9yZXtib3JkZXItY29sb3I6IzYxNzE3ZDtiYWNrZ3JvdW5kLWNvbG9yOiM2MTcxN2Q7dHJhbnNpdGlvbjouMTVzIGVhc2UtaW47dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZC1jb2xvcn1teS1hcHAgLm1haW4tY29u''@;'; put 'put ''dGFpbmVye21pbi1oZWlnaHQ6MTAwdmghaW1wb3J0YW50fW15LWFwcCAuY29udGVudC1jb250YWluZXJ7ei1pbmRleDowIWltcG9ydGFudH1teS1hcHAgLm5hdkJhclJlc3B7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YmFja2dyb3VuZDojNDk1YTY3O2NvbG9yOiNmZmZ9''@;'; put 'put ''bXktYXBwIC5hcHAtbG9hZGluZyAubG9hZGluZy1sb2dve21heC13aWR0aDo0MDBweDt3aWR0aDoxMDAlfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHgpe215LWFwcCAubmF2QmFyUmVzcHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7YmFja2dyb3Vu''@;'; put 'put ''ZDojNDk1YTY3O2NvbG9yOiNmZmZ9bXktYXBwIC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmssbXktYXBwIC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmssbXktYXBwIC5tYWluLWNvbnRh''@;'; put 'put ''aW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluayxteS1hcHAgLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5re3BhZGRpbmc6MCAuNXJlbSAwIDFyZW07d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpo''@;'; put 'put ''aWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztib3JkZXItcmFkaXVzOi4xMjVyZW0gMCAwIC4xMjVyZW07Y29sb3I6Izk1Yzg0Yn1teS1hcHAgLmNhcmQtYmxvY2ssbXktYXBwIC5jYXJkLWZvb3RlcntwYWRkaW5nOjEwcHggMCAwfW15LWFwcCAubWFpbi1jb250YWluZXJbX25nY29udGVu''@;'; put 'put ''dC1jMF0gLmNvbnRlbnQtY29udGFpbmVyW19uZ2NvbnRlbnQtYzBdIC5jb250ZW50LWFyZWFbX25nY29udGVudC1jMF17cGFkZGluZzowcmVtfX0uaHRJbnZhbGlke2JhY2tncm91bmQ6IzAwMCFpbXBvcnRhbnR9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7aDJ7Zm9udC1z''@;'; put 'put ''aXplOi43cmVtIWltcG9ydGFudH1oM3tmb250LXNpemU6LjdyZW19fS5uYXYtbGlua3twYWRkaW5nOjByZW0gMXJlbX1ib2R5W2Nkcy10aGVtZT1saWdodF0gLmJ0bi1wcmltYXJ5IC5idG4sYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5idG4uYnRuLXByaW1hcnl7Ym9yZGVyLWNvbG9yOiMzMTQz''@;'; put 'put ''NTE7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxO2NvbG9yOiNmZmZ9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmJ0bi1wcmltYXJ5IC5idG4sYm9keVtjZHMtdGhlbWU9ZGFya10gLmJ0bi5idG4tcHJpbWFyeXtib3JkZXItY29sb3I6IzVlNzM4MjtiYWNrZ3JvdW5kLWNvbG9yOiM1ZTczODI7Y29s''@;'; put 'put ''b3I6I2ZmZn1ib2R5W2Nkcy10aGVtZT1kYXJrXSAuYnRuLXByaW1hcnkgLmJ0biBjbHItaWNvbixib2R5W2Nkcy10aGVtZT1kYXJrXSAuYnRuLXByaW1hcnkgLmJ0biBjZHMtaWNvbixib2R5W2Nkcy10aGVtZT1kYXJrXSAuYnRuLmJ0bi1wcmltYXJ5IGNsci1pY29uLGJvZHlbY2RzLXRoZW1l''@;'; put 'put ''PWRhcmtdIC5idG4uYnRuLXByaW1hcnkgY2RzLWljb257Y29sb3I6I2ZmZn0uYnRuLXByaW1hcnkgLmJ0bjpkaXNhYmxlZCwuYnRuLmJ0bi1wcmltYXJ5OmRpc2FibGVke29wYWNpdHk6LjY1fS5idG57Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7LXdlYmtpdC1hcHBlYXJh''@;'; put 'put ''bmNlOm5vbmUhaW1wb3J0YW50O2JvcmRlci1yYWRpdXM6LjEyNXJlbTtib3JkZXI6MXB4IHNvbGlkO21pbi13aWR0aDozcmVtO21heC13aWR0aDoxNXJlbTt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpjZW50ZXI7''@;'; put 'put ''dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtsaW5lLWhlaWdodDoxLjVyZW07bGV0dGVyLXNwYWNpbmc6LjEyZW07Zm9udC1zaXplOi41cmVtO2ZvbnQtd2VpZ2h0OjUwMDtoZWlnaHQ6MS41cmVtO3BhZGRpbmc6MCAuNXJlbX0uYnRuLmJ0bi1vdXRsaW5l''@;'; put 'put ''OmhvdmVye2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzQ5NWE2Nztjb2xvcjojZmZmfS5tb2RhbC10aXRsZS13cmFwcGVyOmZvY3VzLC5tb2RhbC10aXRsZS13cmFwcGVyOmZvY3VzLXZpc2libGV7b3V0bGluZTpub25lfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5idG4u''@;'; put 'put ''YnRuLWljb24uYnRuLWRpbW1lZHtjb2xvcjojNzI5NWFlfWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuYnRuLmJ0bi1pY29uLmJ0bi1kaW1tZWR7Y29sb3I6IzMxNDM1MX1ib2R5W2Nkcy10aGVtZT1saWdodF0gLmJ0bi5idG4tb3V0bGluZXtib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOiMzMTQzNTF9Lmh0TW9iaWxlRWRpdG9yQ29udGFpbmVyIC5pbnB1dHMgdGV4dGFyZWF7Zm9udC1zaXplOjEzcHQ7Ym9yZGVyOjJweCBzb2xpZCAjNDg1OTY3O2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2JveC1zaGFk''@;'; put 'put ''b3c6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowIDAgMCAxNHB4O3BhZGRpbmc6N3B0O3dpZHRoOjI5MHB4fS5odE1vYmlsZUVkaXRvckNvbnRhaW5lciAucG9zaXRpb25Db250cm9sc3t3aWR0aDozMzNweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDo1cHQ7dG9wOjUwcHg7Ym90dG9t''@;'; put 'put ''OjA7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmh0TW9iaWxlRWRpdG9yQ29udGFpbmVyLmFjdGl2ZXtkaXNwbGF5OmJsb2NrO2hlaWdodDoxMjBweDt3aWR0aDozNTBweH1ib2R5W2Nkcy10aGVtZT1saWdodF0gLnd0Qm9yZGVye2JhY2tncm91bmQtY29sb3I6IzQ5NWE2''@;'; put 'put ''NyFpbXBvcnRhbnR9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC5odF9tYXN0ZXIgdHI6bnRoLW9mLXR5cGUob2RkKT50ZHtmaWx0ZXI6YnJpZ2h0bmVzcyguOTcpfWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuaHRfbWFzdGVyIC5odERpbW1lZHtjb2xvcjojMzczNzM3IWltcG9ydGFudDtmaWx0ZXI6''@;'; put 'put ''YnJpZ2h0bmVzcygxKSFpbXBvcnRhbnR9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmh0X21hc3RlciB0cjpudGgtb2YtdHlwZShvZGQpPnRke2ZpbHRlcjpicmlnaHRuZXNzKDEuMil9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmh0X21hc3Rlcjpub3QoLmVtcHR5Q29sdW1ucyl+LmhhbmRzb250YWJs''@;'; put 'put ''ZSB0Ym9keSB0ciB0aCxib2R5W2Nkcy10aGVtZT1kYXJrXSAuaHRfbWFzdGVyOm5vdCguZW1wdHlDb2x1bW5zKX4uaGFuZHNvbnRhYmxlOm5vdCguaHRfY2xvbmVfdG9wKSB0aGVhZCB0ciB0aDpmaXJzdC1jaGlsZHtiYWNrZ3JvdW5kLWNvbG9yOiMyZDQwNDg7Ym9yZGVyLWNvbG9yOiM2OTdj''@;'; put 'put ''ODV9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSB0ZHtib3JkZXItY29sb3I6IzY5N2M4NX1ib2R5W2Nkcy10aGVtZT1kYXJrXSAuaGFuZHNvbnRhYmxlIC5odERpbW1lZHtjb2xvcjojZWVlIWltcG9ydGFudDtiYWNrZ3JvdW5kLWNvbG9yOiMzYzU2NjIhaW1wb3J0YW50fWJv''@;'; put 'put ''ZHlbY2RzLXRoZW1lPWRhcmtdIFtjbGFzcyo9aHQtdGhlbWUtY2xhc3NpY117Y29sb3Itc2NoZW1lOmRhcms7LS1odC1mb3JlZ3JvdW5kLWNvbG9yOiAjZWVlOy0taHQtYmFja2dyb3VuZC1jb2xvcjogIzNjNTY2MjstLWh0LWJhY2tncm91bmQtc2Vjb25kYXJ5LWNvbG9yOiAjMmQ0MDQ4Oy0t''@;'; put 'put ''aHQtYm9yZGVyLWNvbG9yOiAjNjk3Yzg1Oy0taHQtcmVhZC1vbmx5LWNvbG9yOiAjZWVlOy0taHQtaGVhZGVyLWJhY2tncm91bmQtY29sb3I6ICM0ODdkOTY7LS1odC1oZWFkZXItcm93LWJhY2tncm91bmQtY29sb3I6ICM0ODdkOTY7LS1odC1oZWFkZXItaGlnaGxpZ2h0ZWQtYmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjogIzNiNmI4MTstLWh0LWhlYWRlci1yb3ctaGlnaGxpZ2h0ZWQtYmFja2dyb3VuZC1jb2xvcjogIzNiNmI4MTstLWh0LXNjcm9sbGJhci10aHVtYi1jb2xvcjogIzY5N2M4NTstLWh0LWlucHV0LWJhY2tncm91bmQtY29sb3I6ICM3MDhiOTg7LS1odC1pbnB1dC1mb3JlZ3JvdW5k''@;'; put 'put ''LWNvbG9yOiAjZmZmOy0taHQtY2VsbC1lZGl0b3ItYmFja2dyb3VuZC1jb2xvcjogIzcwOGI5ODstLWh0LWNlbGwtZWRpdG9yLWZvcmVncm91bmQtY29sb3I6ICNmZmZ9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSB0cjpmaXJzdC1jaGlsZCB0aCxib2R5W2Nkcy10aGVtZT1k''@;'; put 'put ''YXJrXSAuaGFuZHNvbnRhYmxlIHRyOmZpcnN0LWNoaWxkIHRkLGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgLmhhbmRzb250YWJsZS5odF9jbG9uZV90b3AgLnd0SGlkZXJ7Ym9yZGVyLWNvbG9yOiM2OTdjODV9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSAu''@;'; put 'put ''Y2hhbmdlVHlwZXtiYWNrZ3JvdW5kLWNvbG9yOiMzYzU2NjI7Ym9yZGVyLWNvbG9yOiM2OTdjODV9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZUlucHV0e2JhY2tncm91bmQtY29sb3I6IzcwOGI5OH0uaGFuZHNvbnRhYmxlIC5oYW5kc29udGFibGUuaHRfY2xvbmVfdG9wIC53''@;'; put 'put ''dEhpZGVye3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjA7Ym9yZGVyLWJvdHRvbTozcHggc29saWQgI2Q2ZDNkM31ib2R5W2Nkcy10aGVtZT1saWdodF0gLmNvbnRlbnQtY29udGFpbmVye2JhY2tncm91bmQ6I2Y1ZjZmZn0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQsLmRhdGFncmlk''@;'; put 'put ''LWhpc3RvcnkgLmRhdGFncmlke2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6LjEyNXJlbTttYXJnaW46MDttYXJnaW4tdG9wOjFyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJTtwYWRkaW5nOjE1cHggMTVweCA1''@;'; put 'put ''MHB4fS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290LC5kYXRhZ3JpZC1oaXN0b3J5IC5kYXRhZ3JpZC1mb290e2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtoZWlnaHQ6MS41cmVtO3BhZGRpbmc6MCAuNXJlbTtsaW5lLWhlaWdodDpjYWxjKDEuNXJlbSAtIDNweCk7Zm9udC1zaXpl''@;'; put 'put ''Oi40NTgzM3JlbTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjB9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3RlciwuZGF0YWdyaWQtaGlzdG9yeSAuZGF0YWdyaWQtZm9vdGVye3Bvc2l0aW9uOmFic29sdXRlO3Jp''@;'; put 'put ''Z2h0OjMwcHg7dG9wOjFweH0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQgLmRhdGFncmlkLWhlYWQsLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFke2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjfS5kcm9wZG93bi1t''@;'; put 'put ''ZW51e3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO2xlZnQ6MDttYXJnaW4tdG9wOi4wODMzMzNyZW07ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOi41cmVtIDA7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JveC1zaGFkb3c6MCAxcHggLjEyNXJlbSAjNzM3Mzcz''@;'; put 'put ''NDA7bWluLXdpZHRoOjVyZW07bWF4LXdpZHRoOjE1cmVtO2JvcmRlci1yYWRpdXM6LjEyNXJlbTt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwMDB9LnRhYmxle2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6MDtt''@;'; put 'put ''YXJnaW46MDttYXJnaW4tdG9wOjFyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0udGFibGUgdGh7Zm9udC1zaXplOi40NTgzM3JlbTtmb250LXdlaWdodDo2MDA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dmVydGljYWwtYWxpZ246Ym90dG9tO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNj''@;'; put 'put ''Y2M7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXJ7bWluLWhlaWdodDowcHg7cG9zaXRpb246cmVsYXRpdmV9aG9tZS1jb21wb25lbnQgY2xyLXRyZWUtbm9kZSBidXR0b257d2hpdGUtc3BhY2U6bm93cmFwfWhvbWUtY29tcG9uZW50''@;'; put 'put ''IC5jYXJkLWJsb2Nre2hlaWdodDoxMDAlO3BhZGRpbmc6MH1ob21lLWNvbXBvbmVudCAubm8tdGFibGUtc2VsZWN0ZWR7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjEwMCV9aG9tZS1jb21wb25lbnQgLnNwaW5uZXItd3JhcHBlci1mdWxscGFnZXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250''@;'; put 'put ''ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX1jbHItaWNvbi5pcy1ibHVlLGNsci1pY29uLmlzLWluZm97ZmlsbDojNmE5MjM1fWFwcC1zaWRlYmFyIC5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluay5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp0''@;'; put 'put ''cmFuc3BhcmVudH1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2e3dpZHRoOjI3MnB4O21pbi13aWR0aDoyNzJweDtoZWlnaHQ6MTAwJTttYXgtd2lkdGg6Mzc1cHg7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNoYWRvdzowIDAgNXB4ICMwMDAwMDAxZn1hcHAtc2lkZWJhciBjbHItdmVydGlj''@;'; put 'put ''YWwtbmF2IC5zdW4tZHJvcGRvd257bWluLWhlaWdodDozNnB4fWFwcC1zaWRlYmFyIGNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmVle2hlaWdodDoxMDAlO292ZXJmbG93LXk6YXV0b31hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2LmNsb3NlZHttYXJnaW4tbGVmdDotMjcycHh9YXBwLXNp''@;'; put 'put ''ZGViYXIgY2xyLXZlcnRpY2FsLW5hdiAucmVzaXplLWhhbmRsZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDotM3B4O2JvcmRlci1yaWdodDo0cHggc29saWQgIzgwYjQ0MTtjdXJzb3I6Y29sLXJlc2l6ZTtvcGFjaXR5OjA7dHJhbnNpdGlvbjphbGwgLjFzIGVhc2Ut''@;'; put 'put ''aW4tb3V0fWFwcC1zaWRlYmFyIGNsci12ZXJ0aWNhbC1uYXYgLnJlc2l6ZS1oYW5kbGU6aG92ZXJ7b3BhY2l0eTouNX1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2IC5yZXNpemUtaGFuZGxlLnJlc2l6aW5ne29wYWNpdHk6MX1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2LnJlc2l6''@;'; put 'put ''aW5ne3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9YXBwLXNpZGViYXIgLm5hdi1kaXZpZGVye2JvcmRlcjowO2JvcmRlci10b3A6MXB4IHNvbGlkICNkM2QzZDM7bWFyZ2luLWJvdHRvbTowfWFwcC1zaWRlYmFyIC5wYWdlLXRpdGxle21hcmdpbjowO2ZvbnQtc2l6ZToxOHB4O3RleHQtYWxp''@;'; put 'put ''Z246Y2VudGVyfWFwcC1zaWRlYmFyIC56ZXJvLW1hcmdpbnttYXJnaW46MCFpbXBvcnRhbnR9YXBwLXNpZGViYXIgLnVzZXItbmF2LWJ0bntwYWRkaW5nOjAgMnB4fWFwcC1zaWRlYmFyICNzaWRlYmFyTmF2e3otaW5kZXg6MjAwfUBtZWRpYShtYXgtd2lkdGg6NzY3cHgpe2FwcC1zaWRlYmFy''@;'; put 'put ''ICNzaWRlYmFyTmF2e3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3RvcDowfX1hcHAteGxtYXAgLmNhcmR7bWFyZ2luLXRvcDowO2ZsZXg6MTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWFwcC14bG1hcCBjbHItdHJlZS1ub2RlIGJ1dHRvbnt3aGl0ZS1zcGFjZTpub3dy''@;'; put 'put ''YXB9YXBwLXhsbWFwIC5uby10YWJsZS1zZWxlY3RlZHtwb3NpdGlvbjpyZWxhdGl2ZX1hcHAteGxtYXAgLmhlYWRlci1yb3cgLnRpdGxlLWNvbHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfWFwcC14bG1hcCAuaGVhZGVyLXJvdyAub3B0aW9ucy1jb2x7ZGlzcGxheTpmbGV4O2p1''@;'; put 'put ''c3RpZnktY29udGVudDpmbGV4LWVuZH1hcHAteGxtYXAgLnN3e21hcmdpbjoxcmVtIDByZW0gLjVyZW0gMXJlbX1hcHAteGxtYXAgLnZpZXdlclRpdGxle3RleHQtYWxpZ246Y2VudGVyfWFwcC14bG1hcCAuY2FyZEZsZXh7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9YXBw''@;'; put 'put ''LXhsbWFwIC5jb250ZW50LWFyZWF7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1hcHAteGxtYXAgaG90LXRhYmxlIC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDojMzA2YjAwNmV9YXBwLXhsbWFwIC5kcm9wLWFyZWF7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtk''@;'; put 'put ''aXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW46MXB4O2JvcmRlcjoycHggZGFzaGVkICNmZmY7ei1pbmRleDotMX1hcHAteGxtYXAgLmRyb3AtYXJlYSBzcGFue2ZvbnQtc2l6ZToyMHB4O21hcmdpbi10b3A6MjBweDtjb2xvcjojZmZmfWFwcC1tdWx0aS1kYXRhc2V0''@;'; put 'put ''IC5uby10YWJsZS1zZWxlY3RlZHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvcik7ei1pbmRl''@;'; put 'put ''eDoxMDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RvcDowfWFwcC1tdWx0aS1kYXRhc2V0IC5oZWFkZXItcm93e3BhZGRpbmc6MTVweCAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkM2QzZDN9YXBwLW11bHRpLWRhdGFzZXQgLmRhdGFzZXQtaW5wdXQtd3JhcHBlcnttYXgtd2lkdGg6NTAw''@;'; put 'put ''cHg7d2lkdGg6MTAwJX1hcHAtbXVsdGktZGF0YXNldCAuc3VibWl0LXJlYXNvbnttaW4taGVpZ2h0OjcwcHg7bWF4LWhlaWdodDo3MHB4O2hlaWdodDo3MHB4fWFwcC1tdWx0aS1kYXRhc2V0IC5sb2ctd3JhcHBlcnttYXJnaW46MCAxMHB4O2hlaWdodDphdXRvfWFwcC1tdWx0aS1kYXRhc2V0''@;'; put 'put ''IC5kYXRhc2V0LXNlbGVjdGlvbi1hY3Rpb25ze2JvcmRlci10b3A6MXB4IHNvbGlkICNkM2QzZDN9YXBwLW11bHRpLWRhdGFzZXQgLmxpY2VuY2UtbGltaXQtbm90aWNle2NvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrKX1hcHAtbXVsdGktZGF0YXNldCAuc3VibWlz''@;'; put 'put ''c2lvbi1yZXN1bHRze2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkM2QzZDN9dGQubm90LW1hdGNoZWR7YmFja2dyb3VuZC1jb2xvcjojZmYwMDAwNTR9YXBwLXN1Ym1pdHRlZCAubm9Cb3JkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdHJhbnNwYXJlbnQhaW1wb3J0YW50fWFwcC1zdWJt''@;'; put 'put ''aXR0ZWQgLnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdD4udG9vbHRpcC1jb250ZW50LGFwcC1zdWJtaXR0ZWQgLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0e2JhY2tncm91bmQ6IzMxNDM1MSFpbXBvcnRhbnR9YXBwLXN1Ym1pdHRlZCAudG9vbHRpcC50''@;'; put 'put ''b29sdGlwLWJvdHRvbS1sZWZ0Pi50b29sdGlwLWNvbnRlbnQ6YmVmb3JlLGFwcC1zdWJtaXR0ZWQgLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0OmJlZm9yZXtib3JkZXItcmlnaHQ6LjI1cmVtIHNvbGlkICMzMTQzNTE7Ym9yZGVyLWJvdHRvbTouMjA4MzNy''@;'; put 'put ''ZW0gc29saWQgIzMxNDM1MX1hcHAtc3VibWl0dGVkIC5uby1zdWJtaXR0ZWQtdGFibGVze2hlaWdodDpjYWxjKDEwMHZoIC0gMjAwcHgpfWFwcC1hcHByb3ZlIC5jb2x1bW4tY2VudGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcjth''@;'; put 'put ''bGlnbi1pdGVtczpjZW50ZXJ9YXBwLWFwcHJvdmUgLmRhdGFncmlkIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi10aXRsZXtvdXRsaW5lOm5vbmUhaW1wb3J0YW50fWFwcC1hcHByb3ZlIC5saW5rc3tmb250LXdlaWdodDo3MDA7Y3Vyc29yOnBvaW50ZXJ9YXBwLWFwcHJvdmUg''@;'; put 'put ''LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdD4udG9vbHRpcC1jb250ZW50LGFwcC1hcHByb3ZlIC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdHtiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50fWFwcC1hcHByb3ZlIC50b29sdGlwLnRvb2x0aXAtYm90''@;'; put 'put ''dG9tLWxlZnQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsYXBwLWFwcHJvdmUgLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0OmJlZm9yZXtib3JkZXItcmlnaHQ6LjI1cmVtIHNvbGlkICMzMTQzNTE7Ym9yZGVyLWJvdHRvbTouMjA4MzNyZW0gc29saWQgIzMx''@;'; put 'put ''NDM1MX1hcHAtYXBwcm92ZSAubm9Cb3JkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdHJhbnNwYXJlbnQhaW1wb3J0YW50fWFwcC1hcHByb3ZlIC5hcHByb3ZhbHMtbGlzdC13cmFwcGVye2hlaWdodDo3MHZoO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGly''@;'; put 'put ''ZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXJ9YXBwLWFwcHJvdmUgLm5vYXBwcm92YWxzLWluZm8td3JhcHBlcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDpjYWxjKDEwMHZo''@;'; put 'put ''IC0gMjAwcHgpfWFwcC1oaXN0b3J5IC5yZWplY3RlZHtjb2xvcjojOTIyMDFhO2ZvbnQtd2VpZ2h0OjcwMH1hcHAtaGlzdG9yeSAuYWNjZXB0ZWR7Y29sb3I6IzEwNWMyNjtmb250LXdlaWdodDo3MDB9YXBwLWhpc3RvcnkgLmhzQ2VsbHtkaXNwbGF5OmZsZXghaW1wb3J0YW50O2ZsZXgtZGly''@;'; put 'put ''ZWN0aW9uOmNvbHVtbiFpbXBvcnRhbnQ7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBvcnRhbnQ7YWxpZ24taXRlbXM6Y2VudGVyIWltcG9ydGFudDtwYWRkaW5nOjdweH1hcHAtaGlzdG9yeSAuYnRDZWxse2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnQ7anVzdGlmeS1jb250ZW50OmNlbnRlciFp''@;'; put 'put ''bXBvcnRhbnR9YXBwLWhpc3RvcnkgLnZlckNlbnRlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3dvcmQtYnJlYWs6YnJlYWstYWxsfWFwcC1oaXN0b3J5IC5sb2FkLW1vcmUgaW5wdXR7d2lkdGg6OTBweH1hcHAtaGlzdG9yeSAjbm9EYXRhQ29udGFpbmVye2hlaWdodDpjYWxj''@;'; put 'put ''KDEwMHZoIC0gMjAwcHgpfWFwcC1oaXN0b3J5IC50YWJsZS1saW5re3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC13ZWlnaHQ6NzAwfWFwcC12aWV3ZXIgLmNhcmR7bWFyZ2luLXRvcDowO2ZsZXg6MTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWFwcC12aWV3ZXIg''@;'; put 'put ''Y2xyLXRyZWUtbm9kZSBidXR0b257d2hpdGUtc3BhY2U6bm93cmFwfWFwcC12aWV3ZXIgLnRvZ2dsZS1zd2l0Y2ggaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbDpiZWZvcmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxIWltcG9ydGFudDt0''@;'; put 'put ''cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfWFwcC12aWV3ZXIgLmhlYWRlci1yb3cgLnRpdGxlLWNvbHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfWFwcC12aWV3ZXIgLmhlYWRlci1yb3cgLm9w''@;'; put 'put ''dGlvbnMtY29se2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7YWxpZ24taXRlbXM6Y2VudGVyfWFwcC12aWV3ZXIgLnN3e21hcmdpbjoxcmVtIDByZW0gLjVyZW0gMXJlbX1hcHAtdmlld2VyIC5pbmZvQmFye21hcmdpbi10b3A6MTBweH1hcHAtdmlld2VyIC5maWx0ZXJT''@;'; put 'put ''aWRle21hcmdpbi10b3A6MjZweDttYXJnaW4tYm90dG9tOjE5cHh9YXBwLXZpZXdlciAub3B0aW9ucy1kcm9wZG93biBjbHItaWNvbnttYXJnaW4tcmlnaHQ6NXB4fWFwcC12aWV3ZXIgLmRyb3Bkb3duLW1lbnV7d2lkdGg6MTgwcHg7bWFyZ2luLXRvcDotMThweDtwYWRkaW5nOjB9YXBwLXZp''@;'; put 'put ''ZXdlciAuZHJvcGRvd24tbWVudSAuYnRue3dpZHRoOjEwMCU7dGV4dC10cmFuc2Zvcm06bm9uZX1hcHAtdmlld2VyIC5jYXJkRmxleHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn1hcHAtdmlld2VyIC5ub0RhdGF7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50''@;'; put 'put ''ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4OjF9YXBwLXZpZXdlciAuZmlsdGVyQnRue2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9YXBwLXZpZXdlciAuZWRpdEJ0bntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgt''@;'; put 'put ''c3RhcnR9YXBwLXZpZXdlciAuYnRuVmlld3ttYXJnaW46MCFpbXBvcnRhbnR9YXBwLXZpZXdlciAuY29udGVudC1hcmVhe3BhZGRpbmc6LjVyZW0haW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59YXBwLXZpZXdlciAuZG93bmxvYWQtc2VsZWN0IC5jbHItc2Vs''@;'; put 'put ''ZWN0LXdyYXBwZXJ7bWF4LWhlaWdodDp1bnNldCFpbXBvcnRhbnR9YXBwLXZpZXdlciAucmVmcmVzaC10YWJsZXtjdXJzb3I6cG9pbnRlcjttYXJnaW4tbGVmdDo1cHh9YXBwLXZpZXdlciAubGliaW5mb3twYWRkaW5nOjEwcHggMjBweDtvdmVyZmxvdzphdXRvfWFwcC12aWV3ZXIgaG90LXRh''@;'; put 'put ''Ymxle2hlaWdodDpjYWxjKDEwMHZoIC0gMjAwcHgpfWFwcC12aWV3ZXIgaG90LXRhYmxlIC5oYW5kc29udGFibGUgdGJvZHkgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGUsYXBwLXZpZXdlciBob3QtdGFibGUgLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxp''@;'; put 'put ''Z2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDBiMCFpbXBvcnRhbnR9YXBwLXZpZXdlciBob3QtdGFibGUgLnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDA2ZSFpbXBvcnRhbnR9YXBwLXZpZXdlciAubm8tdGFibGUt''@;'; put 'put ''c2VsZWN0ZWQtaW5mb3tiYWNrZ3JvdW5kOm5vbmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW59YXBwLXZpZXdlciAud2ViLXF1ZXJ5e21heC1oZWlnaHQ6MzV2aH1hcHAtdmlld2VyIC53ZWItcXVlcnkgLndlYi1xdWVyeS10ZXh0e21pbi1o''@;'; put 'put ''ZWlnaHQ6MTAwcHg7bWF4LWhlaWdodDoxMDBweDt3aWR0aDoxMDAlIWltcG9ydGFudH1hcHAtdmlld2VyIC53ZWItcXVlcnkgLndlYi1xdWVyeS13cmFwcGVyIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX1hcHAtdmlld2VyIC53ZWItcXVlcnkgLndlYi1xdWVyeS13cmFwcGVy''@;'; put 'put ''IGNsci10ZXh0YXJlYS1jb250YWluZXJ7bWFyZ2luOjAhaW1wb3J0YW50fWFwcC12aWV3ZXIgLndlYi1xdWVyeSAud2ViLXF1ZXJ5LXdyYXBwZXIgLmNsci10ZXh0YXJlYS13cmFwcGVye21hcmdpbjowIWltcG9ydGFudH1hcHAtdmlld2VyIC50YWJsZS1zZWFyY2gtd3JhcHBlcnttYXJnaW4t''@;'; put 'put ''bGVmdDowfWFwcC12aWV3ZXIgLnRhYmxlLXNlYXJjaC13cmFwcGVyIGZvcm17cGFkZGluZy1sZWZ0OjB9YXBwLXZpZXdlciAudGFibGUtc2VhcmNoLXdyYXBwZXIgY2xyLWljb257bWFyZ2luLXRvcDo0cHh9YXBwLXZpZXdlciAudGFibGUtc2VhcmNoLXdyYXBwZXIgY2xyLWlucHV0LWNvbnRh''@;'; put 'put ''aW5lcnttYXJnaW4tdG9wOjB9YXBwLXZpZXdlciAudGFibGUtc2VhcmNoLXdyYXBwZXIgLmNsci1jb250cm9sLWNvbnRhaW5lcnttYXJnaW4tbGVmdDowfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHgpe2FwcC12aWV3ZXIgLmZpbHRlckJ0bntkaXNwbGF5OmZsZXg7anVzdGlm''@;'; put 'put ''eS1jb250ZW50OmNlbnRlcn1hcHAtdmlld2VyIC5lZGl0QnRue2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfX1AbWVkaWEobWluLXdpZHRoOjU3NnB4KXthcHAtdmlld2VyIC5yb3d7bWFyZ2luLXJpZ2h0OjByZW07bWFyZ2luLWxlZnQ6MHJlbX19YXBwLWdyb3VwIC5zaWRl''@;'; put 'put ''YmFyLWhlaWdodHtoZWlnaHQ6MTAwJX1hcHAtZ3JvdXAgLmdyb3VwLWluZm8tdGV4dHtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MjBweH1hcHAtZ3JvdXAgLmdyb3VwLWluZm97Ym9yZGVyOjFweCBzb2xpZDtib3JkZXItcmFkaXVzOjNweH1hcHAtZ3JvdXAgLmdyb3VwLWluZm8gdGR7dGV4''@;'; put 'put ''dC1hbGlnbjpjZW50ZXJ9YXBwLWdyb3VwIC5ncm91cC1kYXRhe2JvcmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9YXBwLWdyb3VwIC5ncm91cC1kYXRhe21pbi1oZWlnaHQ6YXV0b31hcHAtZ3JvdXAgLmdyb3VwLWRhdGEgaDMsYXBwLWdyb3VwIC5ncm91cC1kYXRhIGg1e3RleHQt''@;'; put 'put ''YWxpZ246Y2VudGVyfWFwcC1ncm91cCAuZ3JvdXAtZGF0YSAubWVtYmVyLXRhYmxle3dpZHRoOjEwMCV9YXBwLWdyb3VwIC5ncm91cC1kYXRhIC5tZW1iZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9YXBwLWdyb3VwIC50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3c6YXV0''@;'; put 'put ''b31AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2OHB4KXthcHAtZ3JvdXAgLmdyb3VwLWRhdGF7bWluLWhlaWdodDp1bnNldCFpbXBvcnRhbnR9fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1ncm91cCAuZ3JvdXAtaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Ym9yZGVyLWNv''@;'; put 'put ''bG9yOiMzMTQzNTF9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLWdyb3VwIC5ncm91cC1kYXRhe2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtib3JkZXItY29sb3I6IzMxNDM1MX1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtZ3JvdXAgLm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOiMyOTQwNGJ9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC1ncm91cCAuZ3JvdXAtaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyLWNvbG9yOiNhN2E3YTc7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN31ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBw''@;'; put 'put ''LWdyb3VwIC5ncm91cC1kYXRhe2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtZ3JvdXAgLm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOiNlNmU2ZTZ9YXBwLXVzZXIgLnNpZGViYXItaGVpZ2h0e2hlaWdodDoxMDAlfWFwcC11c2VyIC51c2VyLWluZm8tdGV4dHtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MjBweH1hcHAtdXNlciAudXNlci1pbmZve2JvcmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9YXBw''@;'; put 'put ''LXVzZXIgLnVzZXItaW5mbyB0ZHt0ZXh0LWFsaWduOmNlbnRlcn1hcHAtdXNlciAudXNlci1kYXRhe2JvcmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9YXBwLXVzZXIgLnVzZXItZGF0YXttaW4taGVpZ2h0OmF1dG99YXBwLXVzZXIgLnVzZXItZGF0YSBoMyxhcHAtdXNlciAudXNl''@;'; put 'put ''ci1kYXRhIGg1e3RleHQtYWxpZ246Y2VudGVyfWFwcC11c2VyIC51c2VyLXRhYmxle3dpZHRoOjEwMCV9YXBwLXVzZXIgLnVzZXItdGFibGUgdGhlYWR7YmFja2dyb3VuZC1jb2xvcjojZGFkYWRhfWFwcC11c2VyIC51c2VyLXRhYmxlIHRib2R5IHRyOmhvdmVye2N1cnNvcjpwb2ludGVyfWFw''@;'; put 'put ''cC11c2VyIC53aWR0aC01MHt3aWR0aDo1MCV9YXBwLXVzZXIgLndpZHRoLTMze3dpZHRoOjMzJX1hcHAtdXNlciAudGFibGUtY29udGFpbmVye292ZXJmbG93LXk6c2Nyb2xsO21heC1oZWlnaHQ6NTAwcHh9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjhweCl7YXBwLXVzZXIgLnVz''@;'; put 'put ''ZXItZGF0YXttaW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudH19Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLXVzZXIgLnVzZXItaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Ym9yZGVyLWNvbG9yOiMzMTQzNTF9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLXVzZXIgLnVzZXItZGF0YXti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Ym9yZGVyLWNvbG9yOiMzMTQzNTF9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLXVzZXIgLnVzZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMjk0MDRifWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtdXNlciAudXNlci1p''@;'; put 'put ''bmZve2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtdXNlciAudXNlci1kYXRhe2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdh''@;'; put 'put ''Nztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtdXNlciAudXNlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTZ9YXBwLXJlcXVlc3RzLW1vZGFsey0tbGluZS1oZWlnaHQ6IDE2cHg7LS1saW5lLXRvcDog''@;'; put 'put ''MHB4fWFwcC1yZXF1ZXN0cy1tb2RhbCAubG9nLXdyYXBwZXIuc2FzbG9ne3Bvc2l0aW9uOnJlbGF0aXZlO3doaXRlLXNwYWNlOnByZTtmb250LWZhbWlseTptb25vc3BhY2V9YXBwLXJlcXVlc3RzLW1vZGFsIC5sb2ctd3JhcHBlci5zYXNsb2cgLmhpZ2hsaWdodGVkLWxpbmV7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjojZmYwM31hcHAtcmVxdWVzdHMtbW9kYWwgLmxpbmUtaGlnaGxpZ2h0LW92ZXJsYXl7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3dpZHRoOjEwMCU7cG9pbnRlci1ldmVudHM6bm9uZTthbmltYXRpb246ZmFkZU91dCAzcyBmb3J3YXJkczt6LWluZGV4OjEwfWFwcC1yZXF1ZXN0''@;'; put 'put ''cy1tb2RhbCAudGVtcC1oZWlnaHQtc2V0dGVye2hlaWdodDp2YXIoLS1saW5lLWhlaWdodCl9YXBwLXJlcXVlc3RzLW1vZGFsIC5saW5lLXBvc2l0aW9uLXNldHRlcnt0b3A6dmFyKC0tbGluZS10b3ApfWFwcC1yZXF1ZXN0cy1tb2RhbCAudGVtcC1saW5lLWhlaWdodC1jYWxje3Bvc2l0aW9u''@;'; put 'put ''OmFic29sdXRlO3Zpc2liaWxpdHk6aGlkZGVuO2hlaWdodDphdXRvfWFwcC1yZXF1ZXN0cy1tb2RhbCAuZXJyb3ItaGlnaGxpZ2h0e2JhY2tncm91bmQtY29sb3I6I2YwMDN9YXBwLXJlcXVlc3RzLW1vZGFsIC53YXJuaW5nLWhpZ2hsaWdodHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjAzfUBrZXlm''@;'; put 'put ''cmFtZXMgZmFkZU91dHswJXtvcGFjaXR5OjF9NzAle29wYWNpdHk6MX10b3tvcGFjaXR5OjB9fWFwcC1yZXF1ZXN0cy1tb2RhbCAuaGlnaGxpZ2h0ZWQtbGluZXtiYWNrZ3JvdW5kLWNvbG9yOiM2MWEyMjAyYn1hcHAtcmVxdWVzdHMtbW9kYWwgLmVycm9yLWxpbmV7Y29sb3I6I2UxMjIwMH1h''@;'; put 'put ''cHAtcmVxdWVzdHMtbW9kYWwgLndhcm5pbmctbGluZXtjb2xvcjojZjJhZjAwfWFwcC1yZXF1ZXN0cy1tb2RhbCAubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxle2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNGU0ZTQ7cGFkZGluZzowIDAgLjVyZW07bWFyZ2luLWJvdHRvbTo1cHh9YXBwLXJl''@;'; put 'put ''cXVlc3RzLW1vZGFsIC5kcm9wZG93bi1pdGVtLnNlbGVjdGVke2JhY2tncm91bmQ6I2Q4ZTNlOX1hcHAtcmVxdWVzdHMtbW9kYWwgLm5vLXJlcXN7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTAxOTYwNzg0Myk7cGFkZGluZy10b3A6NXB4O3RleHQtYWxpZ246Y2VudGVyfS5y''@;'; put 'put ''ZXF1ZXN0cy1tb2RhbCAubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlLS1hY2Nlc3NpYmxlIC5jbG9zZSBjbHItaWNvbntkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0ucmVxdWVzdHMtbW9kYWwgLm1vZGFsLWNvbnRlbnR7cGFkZGluZzoyMHB4IDEwcHggNXB4fS53b3JrLXRhYmxlcy1kcm9wZG93''@;'; put 'put ''biBidXR0b257Y29sb3I6dmFyKC0tY2xyLW5hdi1saW5rLWNvbG9yLCAjOGM4YzhjKSFpbXBvcnRhbnR9LnN0YWNrLXZpZXd7aGVpZ2h0OmF1dG8haW1wb3J0YW50O21hc2staW1hZ2U6bm9uZSFpbXBvcnRhbnQ7LXdlYmtpdC1tYXNrLWltYWdlOm5vbmUhaW1wb3J0YW50fS5jb250ZW50IGNs''@;'; put 'put ''ci1pY29ue21hcmdpbi1ib3R0b206NXB4fS5jb250ZW50IHByZXt3b3JkLWJyZWFrOmJyZWFrLWFsbDt3aGl0ZS1zcGFjZTpwcmUtd3JhcDttYXgtaGVpZ2h0OmluaXRpYWw7b3ZlcmZsb3c6dmlzaWJsZTtib3JkZXI6MH0uY29udGVudCAuc3RhY2stYmxvY2stbGFiZWx7d2lkdGg6MTAwJTtw''@;'; put 'put ''YWRkaW5nLWxlZnQ6LjZyZW0haW1wb3J0YW50fS5jb250ZW50IC5zdGFjay1ibG9jay1sYWJlbCAuc3RhY2stdmlldy1rZXl7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZXJyLWxpbmtzIC5jbHItdHJlZW5vZGUtY2hpbGRyZW57bWF4LWhlaWdodDo1NXB4O292ZXJmbG93OmF1dG99YXBwLXN5''@;'; put 'put ''c3RlbSAuY29udGVudC1ib3h7bWF4LXdpZHRoOjEyODlweH1hcHAtc3lzdGVtIC5zeXMtaW5mbz5kaXZ7ZmxleDoxfWFwcC1zeXN0ZW0gLnN5cy1pbmZvIGRpdjpudGgtY2hpbGQoMil7bWFyZ2luOjAgMzBweH1hcHAtc3lzdGVtIC5hZG1pbi1hY3Rpb24sYXBwLXN5c3RlbSAudXNlci1hY3Rp''@;'; put 'put ''b257ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjVweCAxMHB4O2JvcmRlci1yYWRpdXM6NnB4O2JvcmRlcjoxcHggc29saWQgI2RlZGVkZTttYXJnaW4tYm90dG9tOjVweH1hcHAtc3lzdGVtIC5hZG1pbi1hY3Rp''@;'; put 'put ''b24gYnV0dG9uLGFwcC1zeXN0ZW0gLnVzZXItYWN0aW9uIGJ1dHRvbnttaW4td2lkdGg6MTAycHh9YXBwLXN5c3RlbSAuZGFya3tmb250LXdlaWdodDo3MDA7bWFyZ2luLWxlZnQ6NXB4fUBtZWRpYShtYXgtd2lkdGg6OTkzcHgpe2FwcC1zeXN0ZW0gLnN5cy1pbmZvIGRpdjpudGgtY2hpbGQo''@;'; put 'put ''Mil7bWFyZ2luOjB9YXBwLXN5c3RlbSAuc3lzLWluZm8gZGl2e21hcmdpbjoyMHB4IDB9fWFwcC1xdWVyeSAuY29udGVudHtkaXNwbGF5OmZsZXh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWFwcC1xdWVy''@;'; put 'put ''eSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1sb2dpY3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cGFkZGluZzoxNXB4fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVy''@;'; put 'put ''eXtwYWRkaW5nOjMwcHggMCAyMHB4IDIwcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeT4uY2xyLXJvd3tq''@;'; put 'put ''dXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnk+LmNsci1yb3c6bm90KDpsYXN0LWNoaWxkKXtwYWRkaW5nLWJvdHRvbToxNXB4O21hcmdpbi1ib3R0b206MTVweDtib3JkZXItYm90dG9tOjFweCBz''@;'; put 'put ''b2xpZCByZ2JhKDAsMCwwLC4xNil9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC5yZW1vdmUtZ3JvdXAtY2xhdXNlLWJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDoxMHB4O2NvbG9yOmdyYXl9YXBwLXF1ZXJ5IC5jb250ZW50''@;'; put 'put ''IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YXJpYWJsZS1jb2x7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7cGFkZGluZy1ib3R0b206MXB4fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFyaWFibGUt''@;'; put 'put ''Y29sIC5kYXRhbGlzdC13cmFwcGVye3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YXJpYWJsZS1jb2wgLmRhdGFsaXN0LXdyYXBwZXIgaW5wdXR7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29u''@;'; put 'put ''dGFpbmVyIC5jbGF1c2UtcXVlcnkgLm9wZXJhdG9yLWNvbHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLm9wZXJhdG9yLWNvbCBjbHItc2VsZWN0LWNvbnRhaW5lcntoZWlnaHQ6''@;'; put 'put ''NDVweDttYXJnaW4tdG9wOjA7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwYWRkaW5nLWJvdHRvbToxcHh9YXBwLXF1ZXJ5IC5jb250ZW50''@;'; put 'put ''IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLmNoZWNrYm94LXZhbHN7d2lkdGg6MTAwJTtwYWRkaW5nOjAgNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMpfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNs''@;'; put 'put ''YXVzZS1xdWVyeSAudmFsdWUtY29sIC5jaGVja2JveC12YWxzIGNsci1jaGVja2JveC1jb250YWluZXJ7bWFyZ2luLXRvcDowfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5jaGVja2JveC12YWxzIHNlY3Rpb257bWF4LWhl''@;'; put 'put ''aWdodDoxMjBweDtvdmVyZmxvdy15OnNjcm9sbH1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuc2luZ2xlLWZpZWxkLXZhbHN7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1''@;'; put 'put ''c2UtcXVlcnkgLnZhbHVlLWNvbCAuc2luZ2xlLWZpZWxkLXZhbHMgLmNsci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5zaW5nbGUtZmllbGQtdmFscyAuY2xyLWNvbnRy''@;'; put 'put ''b2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlcnttYXgtd2lkdGg6bm9uZX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuc2luZ2xlLWZpZWxkLXZhbHMgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdy''@;'; put 'put ''YXBwZXIgLmNsci1pbnB1dC1ncm91cHt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5zaW5nbGUtZmllbGQtdmFscz5pbnB1dHt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250''@;'; put 'put ''YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5zaW5nbGUtZmllbGQtdmFscyBpbnB1dFt0eXBlPXRpbWVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5n''@;'; put 'put ''ZS12YWxze3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLmNsci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIg''@;'; put 'put ''LmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5nZS12YWxzIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25lfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5nZS12''@;'; put 'put ''YWxzIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXB7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAucmFuZ2UtdmFscyAuZnJvbXttYXJnaW4tYm90''@;'; put 'put ''dG9tOjEwcHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLmZyb20+aW5wdXR7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVl''@;'; put 'put ''LWNvbCAucmFuZ2UtdmFscyAuZnJvbSBpbnB1dFt0eXBlPXRpbWVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5nZS12YWxzIC5mcm9tLGFwcC1xdWVyeSAuY29u''@;'; put 'put ''dGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5nZS12YWxzIC50b3ttaW4td2lkdGg6MTAwcHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLmZyb20+aW5w''@;'; put 'put ''dXQsYXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLnRvPmlucHV0e3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJh''@;'; put 'put ''bmdlLXZhbHMgLmZyb20gaW5wdXRbdHlwZT10aW1lXSxhcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAucmFuZ2UtdmFscyAudG8gaW5wdXRbdHlwZT10aW1lXXt3aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MTdweH1hcHAtcXVl''@;'; put 'put ''cnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuY29udGFpbnMtdmFsc3t3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5jb250YWlucy12YWxzIC5jbHIt''@;'; put 'put ''Y29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuY29udGFpbnMtdmFscyAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlcnttYXgtd2lkdGg6bm9uZX1h''@;'; put 'put ''cHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuY29udGFpbnMtdmFscyAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlciAuY2xyLWlucHV0LWdyb3Vwe3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50''@;'; put 'put ''IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLmNvbnRhaW5zLXZhbHM+aW5wdXR7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuY29udGFpbnMtdmFscyBpbnB1dFt0eXBl''@;'; put 'put ''PXRpbWVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAuY2xhdXNlLWJ1dHRvbnN7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7ZmxleC1kaXJlY3Rpb246cm93''@;'; put 'put ''O2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLmNsYXVzZS1idXR0b25zIGJ1dHRvbnttaW4td2lkdGg6YXV0b31hcHAtcXVlcnkgLmludmFsaWQtY2xhdXNle2JvcmRlci1sZWZ0OjJweCBzb2xpZCAjZDk0YjMx''@;'; put 'put ''fWFwcC1xdWVyeSAuY2xhdXNlLXJvdyBjbHItaWNvbnttYXJnaW46MH1hcHAtcXVlcnkgcHJlW2NsYXNzKj1sYW5ndWFnZS1de3BhZGRpbmc6OHB4O21hcmdpbjowO2JvcmRlci1yYWRpdXM6MXB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRl''@;'; put 'put ''cjttaW4taGVpZ2h0OjY2cHg7cG9zaXRpb246cmVsYXRpdmV9YXBwLXF1ZXJ5IHByZVtjbGFzcyo9bGFuZ3VhZ2UtXSBzcGFuLnNwaW5uZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoxMHB4O3RvcDoxMHB4fWFwcC1xdWVyeSBwcmVbY2xhc3MqPWxhbmd1YWdlLV0gY29kZXt3aGl0ZS1zcGFj''@;'; put 'put ''ZTpwcmUtd3JhcDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9YXBwLXF1ZXJ5IC5pbnB1dC12YWx7Ym9yZGVyOjBweDtiYWNrZ3JvdW5kOiNmYmY4Zjg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzk5OTk5OX1hcHAtcXVlcnkgY2xyLWRhdGUtY29udGFpbmVye21hcmdpbi10b3A6MnB4IWltcG9y''@;'; put 'put ''dGFudH1hcHAtcXVlcnkgaW5wdXRbdHlwZT10aW1lXXtib3JkZXI6MDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNiM2IzYjN9YXBwLXF1ZXJ5IGlucHV0W3R5cGU9dGltZV06Zm9jdXN7b3V0bGluZTpub25lfWFwcC1xdWVyeSAuaW4tdmFsdWVzLW1v''@;'; put 'put ''ZGFsIC5tb2RhbC1mb290ZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgI2Q4ZDhkODttYXJnaW4tdG9wOjEwcHh9YXBwLXF1ZXJ5IC5wcm9ncmVzcyxhcHAtcXVlcnkgLnByb2dyZXNzLXN0YXRpY3tiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3dpZHRoOjEwMCU7aGVpZ2h0OjRweDt0b3A6''@;'; put 'put ''M3B4fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtcXVlcnkgLmNsYXVzZS1sb2dpY3tiYWNrZ3JvdW5kOiNlOWU5ZTl9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC1xdWVyeSAuY2xhdXNlLXF1ZXJ5e2JhY2tncm91bmQ6I2ZiZjhmOH1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtcXVlcnkg''@;'; put 'put ''LmxpbmUtbnVtYmVyc3tib3JkZXItY29sb3I6Izk4OTc5NyFpbXBvcnRhbnR9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLXF1ZXJ5IC5jbGF1c2UtbG9naWN7YmFja2dyb3VuZDojMTkyYTMwfWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1xdWVyeSAuY2xhdXNlLXF1ZXJ5e2JhY2tncm91bmQ6''@;'; put 'put ''IzI2M2U0OH1hcHAtbG9naW4gLnNpZGVCYXJQcm9wc3tiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50O2NvbG9yOiNlMGUwZTB9YXBwLWxvZ2luIC5zaWRlQmFyUHJvcHMgaDIsYXBwLWxvZ2luIC5zaWRlQmFyUHJvcHMgaDMsYXBwLWxvZ2luIC5zaWRlQmFyUHJvcHMgaDQsYXBwLWxvZ2lu''@;'; put 'put ''IC5zaWRlQmFyUHJvcHMgaDUsYXBwLWxvZ2luIC5zaWRlQmFyUHJvcHMgaW5wdXR7Y29sb3I6I2UwZTBlMH1hcHAtbG9naW4gLnNpZGVCYXJQcm9wcyBidXR0b257Ym9yZGVyLWNvbG9yOndoZWF0IWltcG9ydGFudH1hcHAtbG9naW4gLnNpZGVCYXJQcm9wcyBhe2NvbG9yOiNlMGUwZTB9YXBw''@;'; put 'put ''LWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXJ7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7cG9pbnRlci1ldmVudHM6bm9uZTt6LWluZGV4OjEwMDAwfWFwcC1sb2dpbiAubG9naW4tc2lkZWJhci13cmFwcGVyPip7cG9pbnRlci1ldmVudHM6''@;'; put 'put ''YXV0b31hcHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tc2lkZWJhcnt3aWR0aDo0MDBweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yaWdodDoxcHggc29saWQgI2RkZDtwYWRkaW5nOjQwcHg7dHJh''@;'; put 'put ''bnNmb3JtOnRyYW5zbGF0ZSgtNDAwcHgpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlfWFwcC1sb2dpbiAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1zaWRlYmFyIGZvcm0ubG9naW57ei1pbmRleDoxMDE7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0''@;'; put 'put ''aWZ5LWNvbnRlbnQ6Y2VudGVyfWFwcC1sb2dpbiAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1zaWRlYmFyIGZvcm0ubG9naW4gLnRpdGxle2ZvbnQtc2l6ZTozMnB4O2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdodDozNnB4fWFwcC1sb2dpbiAubG9naW4tc2lkZWJhci13''@;'; put 'put ''cmFwcGVyIC5sb2dpbi1zaWRlYmFyIGZvcm0ubG9naW4gLnRpdGxlIC53ZWxjb21le21hcmdpbi10b3A6MzZweH1hcHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tc2lkZWJhciBmb3JtLmxvZ2luIC5sb2dpbi1ncm91cHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246''@;'; put 'put ''Y29sdW1uO3BhZGRpbmc6NDhweCAwIDB9YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLXNpZGViYXIgZm9ybS5sb2dpbiAubG9naW4tZ3JvdXA+KnttYXJnaW46NnB4IDAgMThweH1hcHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlci5hY3RpdmUgLmxvZ2luLXNp''@;'; put 'put ''ZGViYXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKTt6LWluZGV4OjEwMX1hcHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlci5hY3RpdmUgLm92ZXJsYXl7ZGlzcGxheTpibG9ja31hcHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlciAub3ZlcmxheXtkaXNwbGF5Om5vbmU7cG9zaXRp''@;'; put 'put ''b246Zml4ZWQ7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7YmFja2dyb3VuZDojMjEyMTIxODA7ei1pbmRleDoxMDB9YXBwLWxvZ2luIC5sb2dpbi1sb2dve21heC13aWR0aDoyMDBweH0ubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wt''@;'; put 'put ''Y29udGFpbmVyLC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIC5jbHItaW5wdXQtZ3JvdXAsLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLnVzZXJuYW1lLC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIC5wYXNzd29yZHt3aWR0aDoxMDAl''@;'; put 'put ''fS5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIC5jbHItaW5wdXQtd3JhcHBlciwubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCBidXR0b257bWF4LXdpZHRoOm5vbmV9YXBwLXRlcm1zIDpob3N0e2hlaWdodDoxMDAlO2JhY2tncm91bmQ6I2Y1ZjZmZn1hcHAt''@;'; put 'put ''dGVybXMgLmNsci1jaGVja2JveC13cmFwcGVyLmRpc2FibGVke29wYWNpdHk6LjV9YXBwLXRlcm1zIC5jYXJke2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWFyZ2luLXRvcDowfWFwcC10ZXJtcyAuY2FyZCAuY2FyZC1ibG9ja3tmbGV4OjE7b3ZlcmZs''@;'; put 'put ''b3c6YXV0b31hcHAtdGVybXMgLmFjY2VwdC1jaGVja2JveHtwYWRkaW5nOjEwcHggMTVweH1hcHAtZGVwbG95IC5jYXJke21hcmdpbi10b3A6MH1hcHAtZGVwbG95IC5idG57bWFyZ2luLXRvcDoxMHB4fWFwcC1kZXBsb3kgLmxvZy13cmFwcGVye3dpZHRoOjEwMCU7YmFja2dyb3VuZDojZjBm''@;'; put 'put ''MGYwO2JvcmRlcjoxcHggc29saWQgI2M5YzljOTtwYWRkaW5nOjEwcHg7b3ZlcmZsb3c6YXV0bzt3aGl0ZS1zcGFjZTpwcmUtd3JhcH1hcHAtZGVwbG95ICNjb250ZXh0cy1idG57cGFkZGluZzozcHggMCAwO21pbi13aWR0aDozMHB4O21hcmdpbi1sZWZ0OjEwcHg7aGVpZ2h0OjMwcHg7ZGlz''@;'; put 'put ''cGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtZGVwbG95IC52YWxpZGF0aW9uLWJhcntkaXNwbGF5OmZsZXg7bWFyZ2luLXRvcDoyMHB4O2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtZGVwbG95IC52YWxpZGF0aW9uLWJhciBjbHIt''@;'; put 'put ''aWNvbnttYXJnaW4tcmlnaHQ6NXB4fWFwcC1kZXBsb3kgLmF1dG9kZXBsb3ktc2VjdGlvbntwYWRkaW5nOjAgMTVweH1hcHAtZGVwbG95IC5hdXRvZGVwbG95LXNlY3Rpb24gLmNsci1jaGVja2JveC13cmFwcGVye21hcmdpbjoyMHB4IDB9YXBwLWRlcGxveSAuYXV0b2RlcGxveS1zZWN0aW9u''@;'; put 'put ''IC5idG4tYXV0b2RlcGxveXtkaXNwbGF5OmJsb2NrO21hcmdpbjoxNXB4IDB9YXBwLWFsZXJ0cyBjbHItYWxlcnRze2Rpc3BsYXk6YmxvY2t9YXBwLW1hbnVhbC1kZXBsb3kgLmNsZWFyLW1lbW9yeS1idXR0b257cmlnaHQ6MTBweDt0b3A6MnB4fWFwcC1saW5lYWdlIC50b2dnbGUtc3dpdGNo''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw6YmVmb3Jle2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MSFpbXBvcnRhbnQ7dHJhbnNpdGlvbjouMTVzIGVhc2UtaW47dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcn1hcHAtbGluZWFnZSAjZ3JhcGh7aGVpZ2h0OmNhbGMoMTAwdmggLSAxOTVweCk7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtib3JkZXI6MXB4IHNvbGlkICNlNGU0ZTQ7bWFyZ2luLXRvcDoxMHB4fWFwcC1saW5lYWdl''@;'; put 'put ''IC5zZWxlY3Rpb24td3JhcHBlcnt3aWR0aDoxMDAlO21heC13aWR0aDo2NzBweH1hcHAtbGluZWFnZSAuY29sdW1uLWFjdGl2ZXtiYWNrZ3JvdW5kOiNkOGUzZTk7Y29sb3I6IzAwMH1hcHAtbGluZWFnZSAuY29udGVudC1hcmVhe3BhZGRpbmc6LjVyZW0haW1wb3J0YW50fWFwcC1saW5lYWdl''@;'; put 'put ''IC5jb250ZW50LWFyZWEgLmNhcmR7bWluLWhlaWdodDpjYWxjKDEwMHZoIC0gMTIwcHgpfWFwcC1saW5lYWdlIC5jb250ZW50LWFyZWEgLmNhcmQgLmNhcmQtYmxvY2t7cGFkZGluZzouNXJlbSAuMzVyZW0haW1wb3J0YW50fWFwcC1saW5lYWdlIGNsci10cmVlLW5vZGUgYnV0dG9ue3doaXRl''@;'; put 'put ''LXNwYWNlOm5vd3JhcH1hcHAtbGluZWFnZSAuYnRuLWdyb3VwLmRpcmVjdGlvbnttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfWFwcC1saW5lYWdlIC5ncmFwaC1yZW5kZXItc3Bpbm5lcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlO2Rpc3BsYXk6Zmxl''@;'; put 'put ''eDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbi10b3A6MTBweH1hcHAtbGluZWFnZSAuYmlnbGluZWFnZS1yb3d7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjIwcHh9YXBwLWxpbmVhZ2UgLm1v''@;'; put 'put ''ZGFsLWZvb3RlciBwe21hcmdpbjowfWFwcC1saW5lYWdlIC5saW5lYWdlLXRpdGxlLXdyYXBwZXJ7bGVmdDoxMnB4fWFwcC1saW5lYWdlIC5tYXgtZGVwdGgtaW5wdXR7d2lkdGg6MTAwJX1AbWVkaWEobWF4LXdpZHRoOjc2OHB4KXthcHAtbGluZWFnZSAudG9nZ2xlLXN3aXRjaC1jb250YWlu''@;'; put 'put ''ZXJ7bWFyZ2luLWJvdHRvbToyMHB4fX1kYy10cmVlIGNsci10cmVlLW5vZGUgYnV0dG9ue3doaXRlLXNwYWNlOm5vd3JhcH1kYy10cmVlIGNsci10cmVlIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyOmZvY3VzIC5jbHItdHJlZW5vZGUtbGlua3tiYWNrZ3JvdW5kOiNlOGU4ZTg7''@;'; put 'put ''YmFja2dyb3VuZDp2YXIoLS1jbHItdHJlZS1saW5rLWhvdmVyLWNvbG9yLCAjZThlOGU4KTt0ZXh0LWRlY29yYXRpb246bm9uZX1hcHAtbWV0YWRhdGEgLm9iamVjdHMtY29se2hlaWdodDo3NXZoO292ZXJmbG93OnNjcm9sbDtib3JkZXI6MXB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLXJhZGl1''@;'; put 'put ''czo0cHh9YXBwLW1ldGFkYXRhIC5jb2xzLWhlYWR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjY2NjO3BhZGRpbmc6MTBweDtkaXNwbGF5OmZsZXh9YXBwLW1ldGFkYXRhIC5vYmplY3QtdGV4dHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2Ut''@;'; put 'put ''YmV0d2VlbjttYXJnaW4tbGVmdDoxMHB4O2ZsZXg6MX1hcHAtbWV0YWRhdGEgLnJlcG8tZHJvcGRvd257bWFyZ2luLXJpZ2h0OjE1cHg7bWFyZ2luLWxlZnQ6MTVweDttYXJnaW4tYm90dG9tOjEwcHh9YXBwLW1ldGFkYXRhIC5jbHItYWNjb3JkaW9uLXRpdGxle3dpZHRoOjEwMCV9YXBwLW1l''@;'; put 'put ''dGFkYXRhIC5mbG9hdC1yaWdodHttYXJnaW46MDtmbG9hdDpyaWdodH1hcHAtbWV0YWRhdGEgLmZ1bGwtd2lkdGh7d2lkdGg6MTAwJX1hcHAtbWV0YWRhdGEgLm9iamVjdC11cml7bWFyZ2luOjVweCAwIDB9YXBwLW1ldGFkYXRhIC5vYmplY3QtaGVhZGVye2Rpc3BsYXk6ZmxleDthbGlnbi1p''@;'; put 'put ''dGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZy1sZWZ0OjNweDtwYWRkaW5nLXJpZ2h0OjNweH1hcHAtbWV0YWRhdGEgLm9iamVjdC1oZWFkZXI6aG92ZXJ7Ym9yZGVyLXJhZGl1czozcHh9YXBwLW1ldGFkYXRhIC5kYXRhZ3JpZC1ob3N0e2Rpc3BsYXk6''@;'; put 'put ''dW5zZXQhaW1wb3J0YW50fWFwcC1tZXRhZGF0YSAuY2FyZHttYXJnaW4tdG9wOjA7ZmxleDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59YXBwLW1ldGFkYXRhIC5jb250ZW50LWFyZWF7cGFkZGluZzouNXJlbSFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0''@;'; put 'put ''aW9uOmNvbHVtbn1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtbWV0YWRhdGEgLm9iamVjdC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNDA1NTYwfWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtbWV0YWRhdGEgLm9iamVjdHMtY29se2JhY2tncm91bmQ6I2ZmZn1ib2R5W2Nkcy10''@;'; put 'put ''aGVtZT1saWdodF0gYXBwLW1ldGFkYXRhIC5vYmplY3QtaGVhZGVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2Q4ZTNlOX1hcHAtbGljZW5zaW5ne2hlaWdodDpjYWxjKDEwMCUgLSA5NnB4KTtwYWRkaW5nOjIwcHh9YXBwLWxpY2Vuc2luZyAuY2FyZHttYXJnaW4tdG9wOjB9YXBwLWxpY2Vu''@;'; put 'put ''c2luZyAua2V5LWVycm9ye2ZvbnQtc2l6ZToxNnB4fWFwcC1saWNlbnNpbmcgLm1pc3NrZXl7Y29sb3I6I2U3NGMzY31hcHAtbGljZW5zaW5nIC5saWNlbnNlLWtleS1mb3JtLGFwcC1saWNlbnNpbmcgLmFjdGl2YXRpb24ta2V5LWZvcm0sYXBwLWxpY2Vuc2luZyAuY29tYmluZWQta2V5LWZv''@;'; put 'put ''cm17cGFkZGluZzowfWFwcC1saWNlbnNpbmcgLmxpY2Vuc2Uta2V5LWZvcm0gLmNsci1jb250cm9sLWNvbnRhaW5lcixhcHAtbGljZW5zaW5nIC5hY3RpdmF0aW9uLWtleS1mb3JtIC5jbHItY29udHJvbC1jb250YWluZXIsYXBwLWxpY2Vuc2luZyAuY29tYmluZWQta2V5LWZvcm0gLmNsci1j''@;'; put 'put ''b250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlfWFwcC1saWNlbnNpbmcgLmxpY2Vuc2Uta2V5LWZvcm0gLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYSxhcHAtbGljZW5zaW5nIC5hY3RpdmF0aW9uLWtleS1mb3JtIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4dGFyZWEsYXBwLWxp''@;'; put 'put ''Y2Vuc2luZyAuY29tYmluZWQta2V5LWZvcm0gLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYXt3aWR0aDoxMDAlO2hlaWdodDoxNzBweDttYXgtaGVpZ2h0OjE3MHB4O21pbi1oZWlnaHQ6MTcwcHg7cmVzaXplOm5vbmV9YXBwLWxpY2Vuc2luZyAuYXBwbHkta2V5c3toZWlnaHQ6NDBw''@;'; put 'put ''eH1hcHAtbGljZW5zaW5nIC5kcm9wLWFyZWF7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MTVweDtib3JkZXI6MnB4IGRhc2hlZCAjYjJiMmIyO2JvcmRlci1yYWRpdXM6NHB4O2N1cnNvcjpwb2ludGVyO21hcmdpbjoxMHB4''@;'; put 'put ''IDB9YXBwLWxpY2Vuc2luZyBjbHItdGFicyBidXR0b257Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH1hcHAtdmlld2JveGVzIC5saWNlbmNlLW5vdGljZXtmb250LXNpemU6MTRweDtkaXNwbGF5OmJsb2NrO29wYWNpdHk6LjZ9YXBwLXZpZXdib3hlcyBjbHItbW9kYWwucm9vdC1tb2RhbHt6''@;'; put 'put ''LWluZGV4OjEzMDB9YXBwLXZpZXdib3hlcyBjbHItbW9kYWwucm9vdC1tb2RhbCAubW9kYWwtYm9keS13cmFwcGVye2hlaWdodDpjYWxjKDEwMCUgLSA2MHB4KX1hcHAtdmlld2JveGVzIGNsci1tb2RhbC5yb290LW1vZGFsIC5tb2RhbC1jb250ZW50e2hlaWdodDo4MHZofWFwcC12aWV3Ym94''@;'; put 'put ''ZXMgY2xyLW1vZGFsLnJvb3QtbW9kYWwgLm1vZGFsLWJvZHl7bWF4LWhlaWdodDoxMDAlO2hlaWdodDoxMDAlfWFwcC12aWV3Ym94ZXMgZGMtdHJlZXtvdmVyZmxvdzphdXRvO2ZsZXg6MX1hcHAtdmlld2JveGVzIC50b29sdGlwLWxvbmd7d29yZC1icmVhazpicmVhay13b3JkfWFwcC12aWV3''@;'; put 'put ''Ym94ZXMgLmFkZC1uZXd7d2lkdGg6NTAlO3BhZGRpbmctcmlnaHQ6NXB4fWFwcC12aWV3Ym94ZXMgLmFkZC1uZXc+cHttYXJnaW4tYm90dG9tOjFweH1hcHAtdmlld2JveGVzIC52aWV3Ym94LWxpbWl0LW5vdGljZXtvcGFjaXR5Oi43O2NvbG9yOiNlNzRjM2N9YXBwLXZpZXdib3hlcyAuY3Vy''@;'; put 'put ''cmVudGx5LW9wZW57d2lkdGg6NTAlfWFwcC12aWV3Ym94ZXMgLmN1cnJlbnRseS1vcGVuIC5vcGVuLXZpZXdib3h7Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzozcHggNXB4fWFwcC12aWV3Ym94ZXMgLmN1cnJlbnRseS1vcGVuIC5vcGVuLXZpZXdib3guc2VsZWN0ZWR7YmFja2dyb3VuZDojM2M4''@;'; put 'put ''NTAwMmV9YXBwLXZpZXdib3hlcyAudmlld2JveGVzLWNvbnRhaW5lcntwb3NpdGlvbjpmaXhlZDtpbnNldDowO3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDo5OTl9YXBwLXZpZXdib3hlcyAudmlld2JveHttaW4td2lkdGg6MjAwcHg7bWluLWhlaWdodDoyMDBweDtwb3NpdGlvbjpmaXhl''@;'; put 'put ''ZDtsZWZ0OjA7dG9wOjA7cG9pbnRlci1ldmVudHM6YWxsO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czozcHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAwIDEwcHggLTNweCAjMDAwfWFwcC12aWV3Ym94''@;'; put 'put ''ZXMgLnZpZXdib3guZm9jdXNlZHt6LWluZGV4OjExMDA7b3V0bGluZTpub25lfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmNvbnRlbnR7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4zMDE5NjA3ODQzKTtiYWNrZ3JvdW5kOiNmZmY7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtmbGV4OjE7''@;'; put 'put ''b3ZlcmZsb3cteDphdXRvfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWctaGFuZGxle3dpZHRoOjEwMCU7bWluLWhlaWdodDoyMHB4O2JhY2tncm91bmQtY29sb3I6IzNjODUwMDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7Y29sb3I6''@;'; put 'put ''I2ZmZjtwYWRkaW5nOjAgNXB4O3BvaW50ZXItZXZlbnRzOmFsbH1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5kcmFnLWhhbmRsZSAudGFibGUtdGl0bGV7d2hpdGUtc3BhY2U6cHJlLXdyYXA7d29yZC1icmVhazpicmVhay1hbGx9YXBwLXZpZXdib3hlcyAudmlld2JveCAuZHJhZy1oYW5kbGUg''@;'; put 'put ''LmFjdGlvbnN7ZGlzcGxheTpmbGV4O21pbi13aWR0aDozNXB4fWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWctaGFuZGxlIC5hY3Rpb25zIGNsci1pY29ue2N1cnNvcjpwb2ludGVyO21hcmdpbi1sZWZ0OjVweH1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5kcmFnLWhhbmRsZSAuYWN0aW9u''@;'; put 'put ''cyBjbHItaWNvbjpob3Zlcnt0cmFuc2Zvcm06c2NhbGUoMS4zKX1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5jbGljay1pY29ue2N1cnNvcjpwb2ludGVyfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmNsaWNrLWljb246aG92ZXJ7dHJhbnNmb3JtOnNjYWxlKDEuMyl9YXBwLXZpZXdib3hlcyAu''@;'; put 'put ''dmlld2JveCAuZHJhZ0hhbmRsZXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE4MH1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5kcmFnSGFuZGxlLmNvcm5lcnt3aWR0aDoxNXB4O2hlaWdodDoxNXB4O2N1cnNvcjpud3NlLXJlc2l6ZTt6LWluZGV4OjE4MX1hcHAtdmlld2JveGVzIC52aWV3''@;'; put 'put ''Ym94IC5kcmFnSGFuZGxlLmNvcm5lci1sZWZ0e3dpZHRoOjE1cHg7aGVpZ2h0OjE1cHg7Y3Vyc29yOm5lc3ctcmVzaXplO3otaW5kZXg6MTgxfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWdIYW5kbGUucmlnaHR7d2lkdGg6MnB4O2hlaWdodDoxMDAlO2N1cnNvcjpldy1yZXNpemV9YXBw''@;'; put 'put ''LXZpZXdib3hlcyAudmlld2JveCAuZHJhZ0hhbmRsZS5sZWZ0e3dpZHRoOjJweDtoZWlnaHQ6MTAwJTtjdXJzb3I6ZXctcmVzaXplfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWdIYW5kbGUuYm90dG9te2hlaWdodDoycHg7d2lkdGg6MTAwJTtjdXJzb3I6bnMtcmVzaXplfWFwcC12aWV3''@;'; put 'put ''Ym94ZXMgLmNvbHMtc2VhcmNoe3dpZHRoOjEwMCU7bWFyZ2luLXRvcDo1cHg7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4yNzg0MzEzNzI1KTtib3JkZXItcmFkaXVzOjNweH1hcHAtdmlld2JveGVzIC5jb2xzLWxpc3R7Ym9yZGVyOnNvbGlkIDFweCAjY2NjO21pbi1oZWlnaHQ6NjBw''@;'; put 'put ''eDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpibG9jazt3aWR0aDo0MDBweDttYXgtd2lkdGg6MTAwJTttYXJnaW4tdG9wOjVweH1hcHAtdmlld2JveGVzIC5jb2wtYm94e3BhZGRpbmc6MnB4IDEwcHg7Ym9yZGVyLWJvdHRvbTpzb2xpZCAxcHggI2NjYztjb2xv''@;'; put 'put ''cjojMDAwMDAwZGU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Ym94LXNpemluZzpib3JkZXItYm94O2N1cnNvcjptb3ZlO2ZvbnQtc2l6ZToxNHB4fWFwcC12aWV3Ym94ZXMgLmNvbC1ib3gu''@;'; put 'put ''c2VhcmNoOmZvY3Vze2JhY2tncm91bmQ6IzAwMDAwMDFhfWFwcC12aWV3Ym94ZXMgLmNvbC1ib3gucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6IzMwNmIwMDI0fWFwcC12aWV3Ym94ZXMgLmNkay1kcmFnLXByZXZpZXd7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRp''@;'; put 'put ''dXM6NHB4O2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggIzAwMDMsMCA4cHggMTBweCAxcHggIzAwMDAwMDI0LDAgM3B4IDE0cHggMnB4ICMwMDAwMDAxZjt6LWluZGV4OjEzMDAhaW1wb3J0YW50fWFwcC12aWV3Ym94ZXMgLmNkay1kcmFnLXBsYWNlaG9sZGVye29wYWNpdHk6MH1hcHAtdmll''@;'; put 'put ''d2JveGVzIC5jZGstZHJhZy1hbmltYXRpbmd7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjI1cyBjdWJpYy1iZXppZXIoMCwwLC4yLDEpfWFwcC12aWV3Ym94ZXMgLmNvbC1ib3g6bGFzdC1jaGlsZHtib3JkZXI6bm9uZX1hcHAtdmlld2JveGVzIC5jb2xzLWxpc3QuY2RrLWRyb3AtbGlzdC1kcmFn''@;'; put 'put ''Z2luZyAuY29sLWJveDpub3QoLmNkay1kcmFnLXBsYWNlaG9sZGVyKXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzIGN1YmljLWJlemllcigwLDAsLjIsMSl9YXBwLXZpZXdib3hlcyAuZGlzYWJsZWR7b3BhY2l0eTouNTt0cmFuc2Zvcm06bm9uZSFpbXBvcnRhbnQ7cG9pbnRlci1ldmVudHM6''@;'; put 'put ''bm9uZX1hcHAtdmlld2JveGVzIC5maWx0ZXItYWN0aXZle2NvbG9yOiMwMDcyYTN9YXBwLXZpZXdib3hlcyBob3QtdGFibGUgLmZpcnN0Q29sdW1uSGVhZGVyU3R5bGUgYnV0dG9uLmNoYW5nZVR5cGV7ZGlzcGxheTpub25lfWFwcC12aWV3Ym94ZXMgaG90LXRhYmxlIC5oYW5kc29udGFibGUg''@;'; put 'put ''dGJvZHkgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGUsYXBwLXZpZXdib3hlcyBob3QtdGFibGUgLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kOiMzMDZiMDBiMH1hcHAtdmlld2JveGVzIGhv''@;'; put 'put ''dC10YWJsZSAucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6IzMwNmIwMDZlfWFwcC12aWV3Ym94ZXMgaG90LXRhYmxlIHRoLnJlYWRvbmx5Q2VsbCBkaXZ7b3BhY2l0eTouNH1hcHAtdmlld2JveGVzIGhvdC10YWJsZSB0ZC5yZWFkb25seUNlbGx7b3BhY2l0eTouNX1ib2R5W2Nk''@;'; put 'put ''cy10aGVtZT1kYXJrXSBhcHAtdmlld2JveGVzIC5jdXJyZW50bHktb3BlbiAub3Blbi12aWV3Ym94OmhvdmVye2JhY2tncm91bmQ6IzMxNGI1N31ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtdmlld2JveGVzIC5jb2xzLWxpc3R7YmFja2dyb3VuZDojMzE0YjU3O2NvbG9yOiNmZmY7Ym9yZGVy''@;'; put 'put ''LWNvbG9yOiM4NTg1ODV9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLXZpZXdib3hlcyAuY29sLWJveHtiYWNrZ3JvdW5kOiMzMTRiNTc7Ym9yZGVyLWNvbG9yOiM4NTg1ODU7Y29sb3I6aW5oZXJpdH1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXZpZXdib3hlcyAuY3VycmVudGx5LW9wZW4g''@;'; put 'put ''Lm9wZW4tdmlld2JveDpob3ZlcntiYWNrZ3JvdW5kOiNlOGU4ZTh9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC12aWV3Ym94ZXMgLmNvbHMtbGlzdHtiYWNrZ3JvdW5kOiNmZmZ9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC12aWV3Ym94ZXMgLmNvbC1ib3h7YmFja2dyb3VuZDojZmZmfWFw''@;'; put 'put ''cC1hdXRvbWF0aWMtZGVwbG95IC5kZXBsb3ktaW50cm97bWFyZ2luOjAgMCA1cHh9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLmRlcGxveS1maWVsZHttYXJnaW4tdG9wOjI1cHh9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLmRlcGxveS1maWVsZCAuY2xyLWNvbnRyb2wtbGFiZWx7Zm9udC13ZWlnaHQ6''@;'; put 'put ''NjAwfWFwcC1hdXRvbWF0aWMtZGVwbG95IC5kZXBsb3ktZmllbGQgLmRlcGxveS1maWVsZC1kZXNjcmlwdGlvbnttYXJnaW46MDtmb250LXNpemU6Ljg1cmVtO29wYWNpdHk6Ljc1fWFwcC1hdXRvbWF0aWMtZGVwbG95IC5kYy1sb2MtaW5wdXQtd3JhcHBlciBpbnB1dHt3aWR0aDo1MDBweH1h''@;'; put 'put ''cHAtYXV0b21hdGljLWRlcGxveSAuYXV0by1kZXBsb3l7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3VuZDojMDAwNjt6LWluZGV4OjEwMH1hcHAtYXV0b21hdGljLWRlcGxveSAuc3Bp''@;'; put 'put ''bm5lci1ib3h7d2lkdGg6NDAwcHg7cGFkZGluZzoyMHB4O2JvcmRlci1yYWRpdXM6M3B4O2JhY2tncm91bmQ6I2ZmZjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JveC1zaGFkb3c6MXB4IDFweCA4''@;'; put 'put ''cHggIzAwMDAwMDgyfWFwcC1hdXRvbWF0aWMtZGVwbG95IC5zcGlubmVyLWJveCAuYnV0dG9uc3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47d2lkdGg6MTAwJX1hcHAtYXV0b21hdGljLWRlcGxveSAuZGVwbG95LXN0YXR1cy1yb3d7ZGlzcGxheTpmbGV4O2Fs''@;'; put 'put ''aWduLWl0ZW1zOmNlbnRlcjthbGlnbi1zZWxmOmZsZXgtc3RhcnR9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLmRlcGxveS1zdGF0dXMtcm93IHB7bWFyZ2luOjAgMCAwIDEwcHh9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLmRlcGxveS1zdWNjZXNze2NvbG9yOiM2ZWNmNDR9YXBwLWF1dG9tYXRpYy1k''@;'; put 'put ''ZXBsb3kgLmRlcGxveS1lcnJvcntjb2xvcjojZTc0YzNjfWFwcC1hdXRvbWF0aWMtZGVwbG95IC5kZXBsb3ktdW5kZXRlcm1pbmF0ZWR7Y29sb3I6I2NhY2FjYX1hcHAtYXV0b21hdGljLWRlcGxveSBocntib3JkZXI6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4yNzA1''@;'; put 'put ''ODgyMzUzKX1hcHAtaW5mby1tb2RhbCAuY2xyLWFib3J0LW1vZGFsIC5tb2RhbC10aXRsZS13cmFwcGVye3dpZHRoOjEwMCV9YXBwLWluZm8tbW9kYWwgLmNsci1hYm9ydC1tb2RhbCAubW9kYWx7ei1pbmRleDoyMDUwfWFwcC1pbmZvLW1vZGFsIC5tb2RhbC10aXRsZXtwb3NpdGlvbjpyZWxh''@;'; put 'put ''dGl2ZX1hcHAtaW5mby1tb2RhbCAuc2FzU2VydmljZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDoxMHB4O21hcmdpbjowfWFwcC1pbmZvLW1vZGFsIC5tb2RhbC1mb290ZXJ7cG9zaXRpb246cmVsYXRpdmV9YXBwLWluZm8tbW9kYWwgLnN5c3RleHR7b3ZlcmZsb3c6YXV0bzttYXJn''@;'; put 'put ''aW4tdG9wOjIwcHg7cGFkZGluZzoxMHB4IDA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RjZGNkY31hcHAtaW5mby1tb2RhbCAuc3lzdGV4dCBwe21hcmdpbi10b3A6MDt3b3JkLXdyYXA6YnJlYWstd29yZH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnl7''@;'; put 'put ''ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSAubmFtZS1pbnB1dC1yb3d7d2lkdGg6MTAwJTttYXgtd2lkdGg6MjYwcHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1t''@;'; put 'put ''b2RhbCAuY29sdW1uLWVudHJ5IC5uYW1lLWlucHV0LXJvdyAuY2VsbC1kZXNje21hcmdpbi1yaWdodDozMHB4O21hcmdpbi10b3A6MTBweH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkgLmlucHV0cy13cmFwcGVye2ZsZXg6MTtkaXNwbGF5OmZsZXg7''@;'; put 'put ''YWxpZ24taXRlbXM6Y2VudGVyfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSAuaW5wdXRzLXdyYXBwZXI+Kjpub3QoLmRhdGUtZmllbGQpOm5vdChjbHItc2VsZWN0LWNvbnRhaW5lcil7ZmxleDoxfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQt''@;'; put 'put ''bW9kYWwgLmNvbHVtbi1lbnRyeSBwe21hcmdpbi10b3A6MH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkgLmNsci10ZXh0YXJlYS13cmFwcGVye21hcmdpbi10b3A6MCFpbXBvcnRhbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAu''@;'; put 'put ''Y29sdW1uLWVudHJ5IC5jbHItZm9ybS1jb250cm9se21hcmdpbi10b3A6MCFpbXBvcnRhbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5IGFwcC1zb2Z0LXNlbGVjdHtkaXNwbGF5OmJsb2NrO3dpZHRoOjIyNHB4O2JvcmRlcjoxcHggc29saWQgIzk5''@;'; put 'put ''OTtjb2xvcjojMDAwO3BhZGRpbmc6Y2FsYyguMjVyZW0gKyAycHgpIC41cmVtO2JvcmRlci1yYWRpdXM6LjEyNXJlbTtmb250LXNpemU6LjU0MTY2N3JlbTttYXJnaW4tcmlnaHQ6NnB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSBhcHAtc29mdC1z''@;'; put 'put ''ZWxlY3QgaW5wdXR7d2lkdGg6MTAwJTtib3JkZXI6MH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkgYXBwLXNvZnQtc2VsZWN0IGlucHV0OmZvY3Vze2JhY2tncm91bmQ6bm9uZTtib3JkZXI6MCFpbXBvcnRhbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNv''@;'; put 'put ''cmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5IGFwcC1zb2Z0LXNlbGVjdCBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbixhcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkgYXBwLXNvZnQtc2VsZWN0IGlucHV0Ojotd2Via2l0LWlubmVyLXNw''@;'; put 'put ''aW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeTpmaXJzdC1jaGlsZCBwOmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFs''@;'; put 'put ''IC5kYXRlLWZpZWxke2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuZGF0ZS1pbnB1dHt3aWR0aDoxMDAlO21hcmdpbjowO3BhZGRpbmc6Y2FsYyguMjVyZW0gKyAycHgpIC41cmVtO2ZvbnQtc2l6ZTouNjVyZW07bGlu''@;'; put 'put ''ZS1oZWlnaHQ6MXJlbTtiYWNrZ3JvdW5kOnZhcigtLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yLCAjZmFmYWZhKTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1jb2xvciwgIzIxMzMzYik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9y''@;'; put 'put ''LCAjOTk5KTtib3JkZXItcmFkaXVzOi4xMjVyZW07Y29sb3Itc2NoZW1lOmxpZ2h0fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmRhdGUtaW5wdXQ6Zm9jdXN7b3V0bGluZTpub25lO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvciwgIzAwNzJh''@;'; put 'put ''Myl9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuZGF0ZS1pbnB1dC5pbnZhbGlkLWRhdGF7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yLCAjZTEyMjAwKTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvciwgI2UxMjIwMCl9YXBw''@;'; put 'put ''LWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAubW9kYWwtYm9keXtwYWRkaW5nLWJvdHRvbToxMHB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLXNlbGVjdC1jb250YWluZXJ7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2NvbG9yOiMwMDA7Ym9yZGVyLXJhZGl1''@;'; put 'put ''czouMTI1cmVtO21hcmdpbi1yaWdodDo1cHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVye21heC1oZWlnaHQ6dW5zZXR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItc2VsZWN0''@;'; put 'put ''LWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3RvcDoxNXB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLXNlbGVjdC1jb250YWluZXIgc2VsZWN0e2hlaWdodDphdXRvO3BhZGRpbmc6MTBweCAyMHB4IDEwcHggMTBweDtib3JkZXI6MCFpbXBvcnRh''@;'; put 'put ''bnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItc2VsZWN0LWNvbnRhaW5lciBzZWxlY3Q6Zm9jdXN7YmFja2dyb3VuZDowIDAhaW1wb3J0YW50fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLXNlbGVjdC1jb250YWluZXIgc2VsZWN0OmhvdmVy''@;'; put 'put ''e2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItaW5wdXQtY29udGFpbmVye3dpZHRoOjIyNHB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtjb2xvcjojMDAwO3BhZGRpbmc6Y2FsYyguMjVyZW0gKyAycHgpIC41cmVtO2JvcmRlci1y''@;'; put 'put ''YWRpdXM6LjEyNXJlbTtmb250LXNpemU6LjU0MTY2N3JlbTttYXJnaW4tcmlnaHQ6NnB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLWlucHV0LWNvbnRhaW5lciAuY2xyLWlucHV0LWdyb3Vwe3dpZHRoOjEwMCU7Ym9yZGVyOjB9YXBwLWVkaXQtcmVjb3JkIC5yZWNv''@;'; put 'put ''cmQtZWRpdC1tb2RhbCBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0e3dpZHRoOjEwMCU7Ym9yZGVyOjB9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0OmZvY3Vze2JhY2tncm91bmQ6bm9uZTtib3JkZXI6MCFpbXBvcnRhbnR9YXBw''@;'; put 'put ''LWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLGFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLWlucHV0LWNvbnRhaW5lciBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGlu''@;'; put 'put ''LWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIGNsci1pbnB1dC1jb250YWluZXIuaW52YWxpZC1kYXRhe2JvcmRlci1jb2xvcjpyZWR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAubW9k''@;'; put 'put ''YWwtZGlhbG9ne3dpZHRoOjgwdnd9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhe3dpZHRoOjEw''@;'; put 'put ''MCU7cmVzaXplOm5vbmU7Ym9yZGVyLWNvbG9yOiM5OTl9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhLmludmFsaWQtZGF0YXtib3JkZXItY29sb3I6cmVkO291dGxpbmU6MH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1l''@;'; put 'put ''ZGl0LW1vZGFsIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4dGFyZWEubm90LWNoYXJ7Zm9udC1mYW1pbHk6THVjaWRhIENvbnNvbGUsTW9uYWNvLG1vbm9zcGFjZX1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5nZW5lcmF0ZS1yZWNvcmQtdXJse3JpZ2h0OjQwcHg7dG9w''@;'; put 'put ''OjQwcHg7Zm9udC1zaXplOjEycHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuZ2VuZXJhdGUtcmVjb3JkLXVybC1idXR0b257cmlnaHQ6MjVweDt0b3A6NXB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXtw''@;'; put 'put ''YWRkaW5nOi41cmVtIC43NXJlbSAxcmVtfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLm1vZGFsLWZvb3RlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQt''@;'; put 'put ''bW9kYWwgLm1vZGFsLWZvb3RlciAuYWxlcnR7bWFyZ2luOjB9YXBwLWVkaXQtcmVjb3JkIC5wcmV2LW5leHR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6Ljc1cmVtfWFwcC1lZGl0LXJlY29yZCAucHJldi1uZXh0IHB7bWFyZ2luOjB9YXBwLWVkaXQtcmVjb3JkIC5wcmV2''@;'; put 'put ''LW5leHQgYnV0dG9ue21hcmdpbjowfWFwcC1lZGl0LXJlY29yZCAuZm9jdXNhYmxlOmZvY3Vze2JveC1zaGFkb3c6MCAwIDNweCAjNWFhMjIwfWFwcC1lZGl0LXJlY29yZCAuZW50cnktaW5wdXQtbGVmdC1vZmZzZXR7bGVmdDotMzBweH1hcHAtZWRpdC1yZWNvcmQgLnZhbGlkYXRpb24taW5m''@;'; put 'put ''by1hbGVydHt3aWR0aDozMTBweH1hcHAtYXV0b2NvbXBsZXRlIC5pbnB1dC12YWx7Ym9yZGVyOjBweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM5OTk5OTl9YXBwLWF1dG9jb21wbGV0ZSBpbnB1dHt3aWR0aDoxMDAlO291dGxpbmU6bm9uZX1hcHAt''@;'; put 'put ''YXV0b2NvbXBsZXRlIGlucHV0Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bWFyZ2luLXRvcDotNXB4fWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5vdmVybGF5e3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoxNTAwfWFwcC1hdXRvY29t''@;'; put 'put ''cGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5kYXRhbGlzdHtwb3NpdGlvbjpmaXhlZDtib3gtc2hhZG93OjAgM3B4IDEwcHggLTFweCAjMDAwMDAwMmI7b3ZlcmZsb3c6YXV0bzt6LWluZGV4OjIwMDB9YXBwLWF1dG9jb21wbGV0ZSAuYXV0b2NvbXBsZXRlLXdyYXBwZXIgLmRhdGFsaXN0''@;'; put 'put ''IG9wdGlvbntwYWRkaW5nOjVweCAxMHB4O2N1cnNvcjpwb2ludGVyfWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5kYXRhbGlzdCBvcHRpb246aG92ZXJ7YmFja2dyb3VuZDojMDAwMDAwMGZ9YXBwLWF1dG9jb21wbGV0ZSAuYXV0b2NvbXBsZXRlLXdyYXBwZXIgLmRh''@;'; put 'put ''dGFsaXN0IG9wdGlvbi5mb2N1c2Vke2JhY2tncm91bmQ6IzAwMDAwMDBmfWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5sb2FkLW1vcmV7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlNn1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAt''@;'; put 'put ''YXV0b2NvbXBsZXRlIC5kYXRhbGlzdHtiYWNrZ3JvdW5kOiMyMTMzM2I7Ym9yZGVyOjFweCBzb2xpZCAjNTc1NzU3fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1hdXRvY29tcGxldGUgaW5wdXR7Y29sb3I6I2ZmZn1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtYXV0b2NvbXBsZXRlIC5kYXRh''@;'; put 'put ''bGlzdCBvcHRpb257Y29sb3I6I2ZmZn1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLWF1dG9jb21wbGV0ZSAuZGF0YWxpc3R7YmFja2dyb3VuZDojZmZmfWFwcC1jb250YWN0LWxpbmsgLnVuc2V0e2NvbG9yOnVuc2V0fWFwcC1kYXRhc2V0LWluZm8gLm1vZGFsLWJvZHkgY2xyLXRhYnN7bWF4''@;'; put 'put ''LWhlaWdodDo3MHZofWFwcC1kYXRhc2V0LWluZm8gLm1vZGFsLWJvZHkgLnRhYi1jb250ZW50e3dpZHRoOjEwMCU7b3ZlcmZsb3c6YXV0b31hcHAtZGF0YXNldC1pbmZvIC5tb2RhbC1ib2R5IC50YWItY29udGVudCAuZGF0YWdyaWQtb3V0ZXItd3JhcHBlcnt3aWR0aDoxMDAlfWFwcC1kYXRh''@;'; put 'put ''c2V0LWluZm8gY2xyLW1vZGFsIC5tb2RhbC1kaWFsb2d7aGVpZ2h0OjEwMCV9YXBwLWRhdGFzZXQtaW5mbyAuY2xpY2thYmxlLXJvd3tjdXJzb3I6cG9pbnRlcn1hcHAtZGF0YXNldC1pbmZvIC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbDpmb2N1c3tvdXRsaW5lOm5vbmU7b3V0bGlu''@;'; put 'put ''ZS1vZmZzZXQ6MH1hcHAtdXBsb2FkLXN0YXRlcntkaXNwbGF5OmJsb2NrfWFwcC11cGxvYWQtc3RhdGVyIHB7bWFyZ2luOjA7dGV4dC1hbGlnbjpjZW50ZXJ9YXBwLWFwcHJvdmUtZGV0YWlscyAubG9hZGVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2hlaWdodDo3NXZo''@;'; put 'put ''O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW59YXBwLWFwcHJvdmUtZGV0YWlscyAubW9kYWxMYXJnZXt3aWR0aDo1MHJlbSFpbXBvcnRhbnR9YXBwLWFwcHJvdmUtZGV0YWlscyAuYWRkZWRSb3d7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDksNzcsMTE3LC4yKTtib3Jk''@;'; put 'put ''ZXItcmFkaXVzOjVweH1hcHAtYXBwcm92ZS1kZXRhaWxzIC5kZWxldGVkUm93e2JvcmRlcjoxcHggc29saWQgcmdiYSg3MCw3MSw3MCwuMik7Ym9yZGVyLXJhZGl1czo1cHh9YXBwLWFwcHJvdmUtZGV0YWlscyAudXBkYXRlZFJvd3tib3JkZXI6MXB4IHNvbGlkIHJnYmEoOSwxMTcsOSwuMik7''@;'; put 'put ''Ym9yZGVyLXJhZGl1czo1cHh9YXBwLWFwcHJvdmUtZGV0YWlscyAuY2h7YmFja2dyb3VuZDojMDAwMDAwMWE7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDEwNCwxMDAsMCwuNCk7Ym9yZGVyLXJhZGl1czo1cHh9YXBwLWFwcHJvdmUtZGV0YWlscyAuY2g6aG92ZXJ7YmFja2dyb3VuZDojZmM4Nzc4''@;'; put 'put ''NjZ9YXBwLWFwcHJvdmUtZGV0YWlscyAudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtdG9wLXJpZ2h0LGFwcC1hcHByb3ZlLWRldGFpbHMgLnRvb2x0aXAudG9vbHRpcC10b3AtcmlnaHQ+LnRvb2x0aXAtY29udGVudCxhcHAtYXBwcm92ZS1kZXRhaWxzIC50b29sdGlwPi50b29s''@;'; put 'put ''dGlwLWNvbnRlbnR7Zm9udC1zaXplOi41NDE2N3JlbTtmb250LXdlaWdodDo0MDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2JhY2tncm91bmQ6IzMxNDM1MTtib3JkZXItcmFkaXVzOi4xMjVyZW07Y29sb3I6I2YwZjFlYztsaW5lLWhlaWdodDouNzVyZW07bWFyZ2luOjA7cGFkZGluZzouMzc1''@;'; put 'put ''cmVtIC41cmVtO3dpZHRoOjIzNXB4O3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OmF1dG8gYXV0byAxMDAlIDEycHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO21hcmdpbi1ib3R0b206LjY2NjY3cmVtfWFwcC1hcHByb3ZlLWRldGFpbHMgLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50''@;'; put 'put ''b29sdGlwLXRvcC1yaWdodDpiZWZvcmUsYXBwLWFwcHJvdmUtZGV0YWlscyAudG9vbHRpcC50b29sdGlwLXRvcC1yaWdodD4udG9vbHRpcC1jb250ZW50OmJlZm9yZSxhcHAtYXBwcm92ZS1kZXRhaWxzIC50b29sdGlwPi50b29sdGlwLWNvbnRlbnQ6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRl''@;'; put 'put ''O2JvdHRvbTotLjM3NXJlbTtsZWZ0OjA7dG9wOmF1dG87cmlnaHQ6YXV0bztjb250ZW50OiIiO2JvcmRlci1sZWZ0Oi4yNXJlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci10b3A6LjIwODMzcmVtIHNvbGlkICMzMTQzNTE7Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3Jk''@;'; put 'put ''ZXItYm90dG9tOi4yMDgzM3JlbSBzb2xpZCB0cmFuc3BhcmVudH1hcHAtYXBwcm92ZS1kZXRhaWxzIC50YWJsZXtib3JkZXI6MHB4IHNvbGlkfWFwcC1hcHByb3ZlLWRldGFpbHMgLnRvZ2dsZS1zd2l0Y2ggaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbDpiZWZvcmV7Ym9yZGVy''@;'; put 'put ''LWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxIWltcG9ydGFudDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfWFwcC1hcHByb3ZlLWRldGFpbHMgLnRhYmxlQ29udHtvdmVyZmxvdzph''@;'; put 'put ''dXRvO21hcmdpbjoxNXB4IDEwcHggMTBweH1hcHAtYXBwcm92ZS1kZXRhaWxzIC50YWJsZUNvbnQgdGR7d29yZC1icmVhazpicmVhay13b3JkfWFwcC1hcHByb3ZlLWRldGFpbHMgLmFwcHJvdmFsSW5mb3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfWFwcC1hcHByb3Zl''@;'; put 'put ''LWRldGFpbHMgLmFwcHJvdmFsQmFja3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjhweCl7YXBwLWFwcHJvdmUtZGV0YWlscyAuYXBwcm92YWxJbmZve2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2Vu''@;'; put 'put ''dGVyO21hcmdpbi10b3A6MTVweH1hcHAtYXBwcm92ZS1kZXRhaWxzIC5hcHByb3ZhbEJhY2t7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNXB4fWFwcC1hcHByb3ZlLWRldGFpbHMgLmNhcmR7bWFyZ2luLXRvcDowcmVtIWltcG9ydGFudDttaW4t''@;'; put 'put ''aGVpZ2h0OmNhbGMoMTAwdmggKyAtMHB4KSFpbXBvcnRhbnR9YXBwLWFwcHJvdmUtZGV0YWlscyAudGFibGUgdGQubGVmdCxhcHAtYXBwcm92ZS1kZXRhaWxzIC50YWJsZSB0aC5sZWZ0e3RleHQtYWxpZ246bGVmdDt3aWR0aDoxNTBweCFpbXBvcnRhbnQ7ZmxleDowfX1hcHAtYXBwcm92ZS1k''@;'; put 'put ''ZXRhaWxzIC50YWJsZSB0ZC5sZWZ0LGFwcC1hcHByb3ZlLWRldGFpbHMgLnRhYmxlIHRoLmxlZnR7dGV4dC1hbGlnbjpsZWZ0O2ZsZXg6MTt3aWR0aDozMDBweCFpbXBvcnRhbnR9YXBwLWFwcHJvdmUtZGV0YWlscyAudG9vbGx7cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDojZTZiM2Iz''@;'; put 'put ''O2NvbG9yOiMzMTQzNTE7dG9wOjA7aGVpZ2h0OjM2cHg7d2lkdGg6MTAwJTtsZWZ0OjA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4fWFwcC1hcHByb3ZlLWRldGFpbHMgI2FjY2VwdEJ0bixhcHAtYXBwcm92ZS1kZXRhaWxzICNyZWplY3RC''@;'; put 'put ''dG57d2lkdGg6MTc1cHh9YXBwLWFwcHJvdmUtZGV0YWlscyAjcmVqZWN0QnRue2JhY2tncm91bmQtY29sb3I6I2E2MmYxNiFpbXBvcnRhbnR9YXBwLWFwcHJvdmUtZGV0YWlscyAuZm9ybWF0dGVkLXZhbHVlcy10b2dnbGV7bWluLXdpZHRoOjc1cHh9YXBwLWFwcHJvdmUtZGV0YWlscyBjbHIt''@;'; put 'put ''bW9kYWwgLm1vZGFsLWJvZHktd3JhcHBlcntvdmVyZmxvdzphdXRvfWFwcC1hcHByb3ZlLWRldGFpbHMgLnJvd3Mtbm90aWNle2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLXJpZ2h0OjEwcHg7Y29sb3I6IzZhNmE2YTtmb250LXNpemU6MTVweH1hcHAtYXBwcm92ZS1k''@;'; put 'put ''ZXRhaWxzIC5yb3dzLW5vdGljZSBjbHItaWNvbnttYXJnaW46MH1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtYXBwcm92ZS1kZXRhaWxzIHRhYmxlIC51cGRhdGVkUm93e2JhY2tncm91bmQ6IzkzOTcxZX1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtYXBwcm92ZS1kZXRhaWxzIHRhYmxlIC5h''@;'; put 'put ''ZGRlZFJvd3tiYWNrZ3JvdW5kOiM1Njk5NWZ9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLWFwcHJvdmUtZGV0YWlscyB0YWJsZSAuZGVsZXRlZFJvd3tiYWNrZ3JvdW5kOiM4YTVhNWF9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC1hcHByb3ZlLWRldGFpbHMgdGFibGUgLnVwZGF0ZWRSb3d7''@;'; put 'put ''YmFja2dyb3VuZDojZmFmZGE4fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtYXBwcm92ZS1kZXRhaWxzIHRhYmxlIC5hZGRlZFJvd3tiYWNrZ3JvdW5kOiM5MmQwOWF9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC1hcHByb3ZlLWRldGFpbHMgdGFibGUgLmRlbGV0ZWRSb3d7YmFja2dyb3Vu''@;'; put 'put ''ZDojZTZiM2IzfWFwcC12aXlhLWFwaS1leHBsb3JlciAuYXBpLWNvbGxlY3Rpb24tZHJvcGRvd257bWFyZ2luLWxlZnQ6MTVweDttYXJnaW4tcmlnaHQ6MTVweDttYXJnaW4tYm90dG9tOjEwcHh9YXBwLXZpeWEtYXBpLWV4cGxvcmVyIC5qc29uLWFyZWF7ZGlzcGxheTpmbGV4O2ZsZXgtZGly''@;'; put 'put ''ZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG99YXBwLXZpeWEtYXBpLWV4cGxvcmVyIC5qc29uLWFyZWEgYXt0ZXh0LWRlY29yYXRpb246bm9uZX1hcHAtdml5YS1hcGktZXhwbG9yZXIgLmpzb24tYXJlYT5uZ3gtanNvbi12aWV3ZXJ7aGVpZ2h0OjEw''@;'; put 'put ''MCV9YXBwLXZpeWEtYXBpLWV4cGxvcmVyIC5qc29uLWFyZWE+bmd4LWpzb24tdmlld2VyPi5uZ3gtanNvbi12aWV3ZXJ7b3ZlcmZsb3c6YXV0b31hcHAtdml5YS1hcGktZXhwbG9yZXIgLmpzb24tdG9nZ2xle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MTBweDttYXJnaW46MH1hcHAtdml5YS1h''@;'; put 'put ''cGktZXhwbG9yZXIgLmVuZHBvaW50LWJyZWFkY3J1bXN7bWFyZ2luOjAgMCAwIDEwcHh9YXBwLXZpeWEtYXBpLWV4cGxvcmVyIC5xdWVyeS1wYXJhbXMgaW5wdXR7d2lkdGg6NzBweH1hcHAtbG9hZGluZy1pbmRpY2F0b3IgLmxvYWRpbmctaW5kaWNhdG9ye2xpbmUtaGVpZ2h0OjIuNXJlbTto''@;'; put 'put ''ZWlnaHQ6Mi41cmVtO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjEwMCU7bWFyZ2luLXJpZ2h0OjEwcHh9YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWluZGljYXRvciAuc3Bpbm5lcnt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9YXBwLWxvYWRpbmctaW5kaWNh''@;'; put 'put ''dG9yIC5sb2FkaW5nLWluZGljYXRvciBjbHItc2lnbnBvc3QtY29udGVudHtsaW5lLWhlaWdodDoyNHB4O2NvbG9yOiM1NjU2NTY7Y3Vyc29yOmF1dG99YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWluZGljYXRvciBjbHItc2lnbnBvc3QtY29udGVudCBwe21hcmdpbi10b3A6MTBw''@;'; put 'put ''eDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWluZGljYXRvciBjbHItc2lnbnBvc3QtY29udGVudCBwOmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH1hcHAtbG9hZGluZy1pbmRpY2F0b3IgLmxvYWRpbmct''@;'; put 'put ''aW5kaWNhdG9yIGNsci1zaWducG9zdC1jb250ZW50IHA6bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWluZGljYXRvciBjbHItc2lnbnBvc3QtY29udGVudCBwIHNwYW57bWFyZ2luLWxlZnQ6MTBweH1hcHAtbG9hZGluZy1pbmRpY2F0''@;'; put 'put ''b3IgLmxvYWRpbmctaW5kaWNhdG9yIGNsci1zaWducG9zdC1jb250ZW50IHAgc3Bhbi5ydW5uaW5ne2NvbG9yOiNlOWJmMDR9YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWluZGljYXRvciBjbHItc2lnbnBvc3QtY29udGVudCBwIHNwYW4uc3VjY2Vzc3tjb2xvcjojNjBiNTE1fWFw''@;'; put 'put ''cC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3IgY2xyLXNpZ25wb3N0LWNvbnRlbnQgcCBzcGFuLmZhaWx7Y29sb3I6I2M5MjEwMH1hcHAtZXhjZWwtcGFzc3dvcmQtbW9kYWwgLmV4Y2VsLXBhc3N3b3JkLXJvb3QgLm1vZGFse3otaW5kZXg6MTA2MH1hcHAtZXhjZWwtcGFz''@;'; put 'put ''c3dvcmQtbW9kYWwgLm1vZGFsLWZvb3RlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufWFwcC1leGNlbC1wYXNzd29yZC1tb2RhbCAubW9kYWwtZm9vdGVyIC5idXR0b25ze2Rpc3BsYXk6ZmxleDtnYXA6NXB4fWFwcC1zdGFn''@;'; put 'put ''ZSAucmVqZWN0ZWR7Y29sb3I6IzkyMjAxYTtmb250LXdlaWdodDo3MDB9YXBwLXN0YWdlIC5hY2NlcHRlZHtjb2xvcjojMTA1YzI2O2ZvbnQtd2VpZ2h0OjcwMH1hcHAtc3RhZ2UgLmJhc2VUYWJsZUxpbmt7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLXRvcDoxMHB4O2NvbG9yOiMwMDdjYmJ9YXBw''@;'; put 'put ''LXN0YWdlIC5odEZvY3VzQ2F0Y2hlcntwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnQ7bGVmdDotOTk5OXB4IWltcG9ydGFudDt3aWR0aDoxcHghaW1wb3J0YW50O2hlaWdodDoxcHghaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnQ7Y2xpcDpyZWN0KDAsMCwwLDApIWltcG9y''@;'; put 'put ''dGFudDtib3JkZXI6MCFpbXBvcnRhbnQ7bWFyZ2luOi0xcHghaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnR9YXBwLXN0YWdlIC5odEZvY3VzQ2F0Y2hlcjpmb2N1c3tvdXRsaW5lOm5vbmUhaW1wb3J0YW50fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1zdGFnZSAuYmFzZVRhYmxlTGlu''@;'; put 'put ''a3tjb2xvcjojNGVjMGZmfWFwcC1zb2Z0LXNlbGVjdCAuaW5wdXQtdmFse2JvcmRlcjowcHg7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5OTk5fWFwcC1zb2Z0LXNlbGVjdCBpbnB1dHt3aWR0aDoxMDAlO291dGxpbmU6bm9uZX1hcHAtc29mdC1z''@;'; put 'put ''ZWxlY3QgaW5wdXQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvcnttYXJnaW4tdG9wOi01cHh9YXBwLXNvZnQtc2VsZWN0IGNsci1kYXRlLWNvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tdG9wOjJweCFpbXBvcnRhbnR9YXBwLXNvZnQtc2VsZWN0IGNsci1kYXRl''@;'; put 'put ''LWNvbnRhaW5lciAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9ue3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi01cHh9YXBwLXNvZnQtc2VsZWN0IGNsci1kYXRlLWNvbnRhaW5lciBpbnB1dDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye21hcmdpbi1yaWdodDoyMHB4O21h''@;'; put 'put ''cmdpbi10b3A6LTVweH1hcHAtc29mdC1zZWxlY3QgbGFiZWwuc2Vjb25kTGFiZWxBY3RpdmUgc3Bhbjpub3QoLnZhbHVlLXR5cGUtc2VsZWN0ZWQpe3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2g7Y3Vyc29yOnBvaW50ZXI7b3BhY2l0eTouNn1hcHAtc2FzanMtY29uZmlndXJhdG9yIC5j''@;'; put 'put ''bHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6NTB2d31hcHAtc2FzanMtY29uZmlndXJhdG9yIC5jbHItaW5wdXQtd3JhcHBlcnt3aWR0aDoxMDAlfWFwcC1zYXNqcy1jb25maWd1cmF0b3IgLmNsci1pbnB1dC13cmFwcGVyIGlucHV0e3dpZHRoOjEwMCV9YXBwLXNhc2pzLWNvbmZpZ3VyYXRv''@;'; put 'put ''ciAudGhpblByb2dyZXNze2xlZnQ6MDtyaWdodDowO3dpZHRoOnVuc2V0O2hlaWdodDoxcHg7bWFyZ2luLXRvcDowIWltcG9ydGFudH1hcHAtc2FzanMtY29uZmlndXJhdG9yIC50aGluUHJvZ3Jlc3M6YWZ0ZXJ7dG9wOjB9YXBwLWhlYWRlci1hY3Rpb25ze2Rpc3BsYXk6Y29udGVudHN9YXBw''@;'; put 'put ''LWhlYWRlci1hY3Rpb25zIC5jb3B5UmlnaHR7bWFyZ2luLXRvcDoxMHB4fWFwcC1oZWFkZXItYWN0aW9ucyAuY29weVJpZ2h0IHNwYW57d29yZC1icmVhazpicmVhay13b3JkO3doaXRlLXNwYWNlOnByZS13cmFwO3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6MS41''@;'; put 'put ''fWFwcC1oZWFkZXItYWN0aW9ucyAudXNlci1uYXYtdG9nZ2xle3BhZGRpbmc6MCAxMHB4IWltcG9ydGFudDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoxMDAlfWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93bntwYWRkaW5nLXJpZ2h0OjE1cHg7bGlu''@;'; put 'put ''ZS1oZWlnaHQ6M3JlbTtoZWlnaHQ6M3JlbX1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24+YnV0dG9uLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojZmFmYWZhO3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93bj5idXR0b24uZHJv''@;'; put 'put ''cGRvd24tdG9nZ2xlOmFmdGVye2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO29wYWNpdHk6LjE1O2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7aGVpZ2h0OjQwcHg7dG9wOjEwcHh9YXBwLWhlYWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duPmJ1dHRv''@;'; put 'put ''bi5kcm9wZG93bi10b2dnbGUgLmJhZGdlLmhpZGRlbnt2aXNpYmlsaXR5OmhpZGRlbn1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnV7Y29sb3I6IzU2NTY1NjtwYWRkaW5nLWJvdHRvbTowfWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1k''@;'; put 'put ''cm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuc2VwYXJhdG9ye21hcmdpbjoxMHB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgZ3JheX1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW17ZGlzcGxheTpmbGV4O2Zs''@;'; put 'put ''ZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjQ1cHg7bGluZS1oZWlnaHQ6NDBweH1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0gLmJhZGdle3Bvc2l0''@;'; put 'put ''aW9uOmFic29sdXRlO3RvcDoxNXB4O3JpZ2h0OjI2cHg7bWFyZ2luLXJpZ2h0OjB9YXBwLWhlYWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duIGNsci1kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmRlYnVnLXN3aXRjaC1pdGVte3BhZGRpbmc6MH1hcHAtaGVhZGVyLWFjdGlvbnMg''@;'; put 'put ''LmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0gLnRvZ2dsZS1zd2l0Y2h7bWFyZ2luOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJv''@;'; put 'put ''cGRvd24tbWVudSAuZHJvcGRvd24taXRlbSAuY2xyLWxvZ291dHtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoyMHB4O3RvcDoxNXB4fWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSAuY2xyLWNvbnRyb2wtY29udGFp''@;'; put 'put ''bmVye3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9YXBwLWhlYWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duIGNsci1kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtIGNsci10b2dnbGUtd3JhcHBlcnt3aWR0aDoxMDAlO21hcmdpbjowO2hlaWdodDoxMDAlO3BhZGRpbmc6MTBweCAyMHB4''@;'; put 'put ''fWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSBpbnB1dHtpbnNldDowO2N1cnNvcjpwb2ludGVyfWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuZHJvcGRvd24t''@;'; put 'put ''aXRlbSAuY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdK2xhYmVsOmFmdGVye3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9YXBwLWhlYWRlci1hY3Rpb25zIC5kZWJ1Zy10b2dnbGUtbGFiZWx7cGFkZGluZy1sZWZ0OjQycHh9QG1lZGlhKG1heC13aWR0aDo3NjhweCl7''@;'; put 'put ''YXBwLWhlYWRlci1hY3Rpb25zIC5zaWRlbmF2LWNvbnRlbnQgYS5uYXYtbGluay5hY3RpdmV7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjE1cHg7YmFja2dyb3VuZDojNTY1NjU2fX1hcHAtaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLmQtYmxvY2sgc3Bhbi5iYWRnZXtwb3NpdGlvbjphYnNvbHV0''@;'; put 'put ''ZX1hcHAtaGVhZGVyLWFjdGlvbnMgLmF2YXRhci1pbWd7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tbGVmdDoxMHB4O2JvcmRlci1yYWRpdXM6NTBweH0uY2xyLWlucHV0LXdyYXBwZXIuc21hbGwtbXQgLmNsci1mb3JtLWNvbnRyb2x7bWFyZ2luLXRvcDo1cHghaW1wb3J0YW50fWJv''@;'; put 'put ''ZHlbY2RzLXRoZW1lPWRhcmtde3Njcm9sbGJhci13aWR0aDp0aGluO3Njcm9sbGJhci1jb2xvcjojM2I1MjY4ICMyNzM4NDl9Ym9keVtjZHMtdGhlbWU9ZGFya106Oi13ZWJraXQtc2Nyb2xsYmFye3dpZHRoOjExcHh9Ym9keVtjZHMtdGhlbWU9ZGFya106Oi13ZWJraXQtc2Nyb2xsYmFyLXRy''@;'; put 'put ''YWNre2JhY2tncm91bmQ6IzNiNTI2OH1ib2R5W2Nkcy10aGVtZT1kYXJrXTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojMjczODQ5O2JvcmRlci1yYWRpdXM6NnB4O2JvcmRlcjozcHggc29saWQgIzNiNTI2OH1ib2R5W2Nkcy10aGVtZT1kYXJrXSBjbHItaWNv''@;'; put 'put ''bi5pcy1oaWdobGlnaHR7ZmlsbDojNGVjMGZmfWJvZHksaHRtbHtmb250LXdlaWdodDo0MDAhaW1wb3J0YW50O3BhZGRpbmc6MDttYXJnaW46MH1ib2R5LnNob3VsZC1sb2dpbiBjbHItbW9kYWwsaHRtbC5zaG91bGQtbG9naW4gY2xyLW1vZGFse2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9Ym9k''@;'; put 'put ''eVtjZHMtdGhlbWU9ZGFya10gYnV0dG9uOmZvY3Vze291dGxpbmU6bm9uZX1ib2R5W2Nkcy10aGVtZT1kYXJrXSBidXR0b246Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjFweCBzb2xpZCByZ2IoMjU1LDI1NSwyNTUpfWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBidXR0b246Zm9jdXN7b3V0bGluZTpu''@;'; put 'put ''b25lfWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBidXR0b246Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjFweCBzb2xpZCByZ2IoMCwwLDApfS5zZWxlY3QtdGFibGUtaWNvbiwuc2VsZWN0LWxpYnJhcnktaWNvbnt3aWR0aDo4MHB4fVtjZHMtdGV4dD1sYWJlbF17Y29sb3I6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LWNvbG9yLTIwMCl9W2Nkcy10ZXh0PWxhYmVsTGlua117bGluZS1oZWlnaHQ6MS44IWltcG9ydGFudH1bY2RzLXRleHQ9Y2FwdGlvbl9jbGVhbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0''@;'; put 'put ''ZXItc3BhY2luZyl9W2Nkcy10ZXh0PWNhcHRpb25fY2xlYW5dOmFmdGVyLFtjZHMtdGV4dD1jYXB0aW9uX2NsZWFuXTpiZWZvcmV7ZGlzcGxheTpub25lfS5tb2RhbCAubW9kYWwtYm9keXtwYWRkaW5nOjE1cHh9Lm1vZGFsIC5tb2RhbC1mb290ZXJ7cGFkZGluZzowIDE1cHggMTVweH0ubG9n''@;'; put 'put ''LXdyYXBwZXJ7bWluLWhlaWdodDo1MHB4O3BhZGRpbmc6MTBweDttYXJnaW4tdG9wOjEwcHg7d2hpdGUtc3BhY2U6cHJlLXdyYXA7Ym9yZGVyLXJhZGl1czozcHg7Ym9yZGVyOjFweCBzb2xpZCAjZTJlMmUyO2hlaWdodDo0OHZoO292ZXJmbG93OmF1dG99LnNsaWRlcntwb3NpdGlvbjpyZWxh''@;'; put 'put ''dGl2ZTt3aWR0aDozMjBweDttYXJnaW4tbGVmdDowO21hcmdpbi10b3A6MjBweDtoZWlnaHQ6NXB4O292ZXJmbG93LXg6aGlkZGVufS5saW5le3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6LjQ7YmFja2dyb3VuZDojNzNkNTQ0O3dpZHRoOjE1MCU7aGVpZ2h0OjVweH0uc3VibGluZXtwb3Np''@;'; put 'put ''dGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOiM3M2Q1NDQ7aGVpZ2h0OjVweH0uaW5je2FuaW1hdGlvbjppbmNyZWFzZSAycyBpbmZpbml0ZX0uZGVje2FuaW1hdGlvbjpkZWNyZWFzZSAycyAuNXMgaW5maW5pdGV9QGtleWZyYW1lcyBpbmNyZWFzZXswJXtsZWZ0Oi01JTt3aWR0aDo1JX10b3ts''@;'; put 'put ''ZWZ0OjEzMCU7d2lkdGg6MTAwJX19QGtleWZyYW1lcyBkZWNyZWFzZXswJXtsZWZ0Oi04MCU7d2lkdGg6ODAlfXRve2xlZnQ6MTEwJTt3aWR0aDoxMCV9fS5hcHAtbG9hZGluZ3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjEw''@;'; put 'put ''MHZoO2JhY2tncm91bmQ6IzMxNDM1MTtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ei1pbmRleDoyMDAwO3Bvc2l0aW9uOmZpeGVkO2luc2V0OjB9LnN0YXJ0dXAtY2hlY2tze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweDttYXJnaW4tdG9wOjI0cHg7bWF4LXdpZHRo''@;'; put 'put ''OjQyMHB4O3dpZHRoOjkwJX0uc3RhcnR1cC1jaGVja3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Zm9udC1zaXplOjEzcHg7Y29sb3I6IzY2Nn0uc3RhcnR1cC1jaGVjay0tZG9uZXtjb2xvcjojM2M4NTAwfS5zdGFydHVwLWNoZWNrLS1lcnJvcntjb2xvcjojYzIx''@;'; put 'put ''ZDAwfS5zdGFydHVwLWNoZWNrX19pY29uLS1wZW5kaW5ne2NvbG9yOiM5OTl9LnN0YXJ0dXAtY2hlY2tfX2ljb24tLWRvbmV7Y29sb3I6IzNjODUwMH0uc3RhcnR1cC1jaGVja19faWNvbi0tZXJyb3J7Y29sb3I6I2MyMWQwMH0uc3RhcnR1cC1jaGVja19fbGFiZWx7Zm9udC13ZWlnaHQ6NTAw''@;'; put 'put ''fS5zdGFydHVwLWNoZWNrX19kZXRhaWx7Y29sb3I6Izk5OTtmb250LXNpemU6MTJweDttYXJnaW4tbGVmdDphdXRvO3RleHQtYWxpZ246cmlnaHQ7d29yZC1icmVhazpicmVhay13b3JkfS5zZWxlY3Qtbm9uZXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uaC1h''@;'; put 'put ''dXRve2hlaWdodDphdXRvfS5oLXVuc2V0LWl7aGVpZ2h0OnVuc2V0IWltcG9ydGFudH0ubWluLWgtNTB2aHttaW4taGVpZ2h0OjUwdmh9LmgtMjR2aCwuaC0yNXZoe2hlaWdodDoyNXZofS5oLTcwdmh7aGVpZ2h0Ojcwdmh9LmgtODB2aHtoZWlnaHQ6ODB2aH0uaC0xMDB7aGVpZ2h0OjEwMCV9''@;'; put 'put ''LnctNTB2d3t3aWR0aDo1MHZ3fS53LTEwMHt3aWR0aDoxMDAlfS53LTEwMC1pe3dpZHRoOjEwMCUhaW1wb3J0YW50fS53LTQwe3dpZHRoOjQwJX0ubWluLXctMHttaW4td2lkdGg6MHB4fS5teC01e21hcmdpbjowIDVweH0ubXktNXttYXJnaW46NXB4IDB9Lm15LTE1e21hcmdpbjoxNXB4IDB9''@;'; put 'put ''Lm15LTEwLW14LWF1dG97bWFyZ2luOjEwcHggYXV0b30ubS0we21hcmdpbjowIWltcG9ydGFudH0ubS0xMHttYXJnaW46MTBweH0ubXQtMHttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS5tdC0zLW5lZ2F0aXZle21hcmdpbi10b3A6LTNweH0ubXQtNXttYXJnaW4tdG9wOjVweH0ubXQtNS1pe21h''@;'; put 'put ''cmdpbi10b3A6NXB4IWltcG9ydGFudH0ubXQtMnttYXJnaW4tdG9wOjJweH0ubXQtMi1pe21hcmdpbi10b3A6MnB4IWltcG9ydGFudH0ubXQtMTB7bWFyZ2luLXRvcDoxMHB4fS5tdC0xNXttYXJnaW4tdG9wOjE1cHh9Lm10LTIwe21hcmdpbi10b3A6MjBweH0ubWwtMHttYXJnaW4tbGVmdDow''@;'; put 'put ''fS5tbC0ze21hcmdpbi1sZWZ0OjNweH0ubWwtNXttYXJnaW4tbGVmdDo1cHh9Lm1sLTUtaXttYXJnaW4tbGVmdDo1cHghaW1wb3J0YW50fS5tbC0xMHttYXJnaW4tbGVmdDoxMHB4fS5tbC0xNXttYXJnaW4tbGVmdDoxNXB4fS5tbC0yMHttYXJnaW4tbGVmdDoyMHB4fS5tbC0yMC1pe21hcmdp''@;'; put 'put ''bi1sZWZ0OjIwcHghaW1wb3J0YW50fS5tci0we21hcmdpbi1yaWdodDowfS5tci01e21hcmdpbi1yaWdodDo1cHh9Lm1yLTVpe21hcmdpbi1yaWdodDo1cHghaW1wb3J0YW50fS5tci0xMHttYXJnaW4tcmlnaHQ6MTBweH0ubXItMTJ7bWFyZ2luLXJpZ2h0OjEycHh9Lm1yLTIwe21hcmdpbi1y''@;'; put 'put ''aWdodDoyMHB4fS5tYi0we21hcmdpbi1ib3R0b206MH0ubWItMGl7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH0ubWItNXttYXJnaW4tYm90dG9tOjVweH0ubWItMTB7bWFyZ2luLWJvdHRvbToxMHB4fS5tYi0xMC1pe21hcmdpbi1ib3R0b206MTBweCFpbXBvcnRhbnR9Lm1iLTE1e21hcmdp''@;'; put 'put ''bi1ib3R0b206MTVweH0ubWItMjB7bWFyZ2luLWJvdHRvbToyMHB4fS5tYi0zMHttYXJnaW4tYm90dG9tOjMwcHh9LnAtMHtwYWRkaW5nOjB9LnAtMTB7cGFkZGluZzoxMHB4fS5wYi0we3BhZGRpbmctYm90dG9tOjB9LnBiLTEwe3BhZGRpbmctYm90dG9tOjEwcHh9LnB5LTV7cGFkZGluZzo1''@;'; put 'put ''cHggMH0ucHktMTB7cGFkZGluZzoxMHB4IDB9LmJhY2tncm91bmQtdHJhbnNwYXJlbnR7YmFja2dyb3VuZDp0cmFuc3BhcmVudH0uYmFja2dyb3VuZC10cmFuc3BhcmVudC1pe2JhY2tncm91bmQ6dHJhbnNwYXJlbnQhaW1wb3J0YW50fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuY29sb3ItZ3Jh''@;'; put 'put ''eXtjb2xvcjojNWE1YTVhfWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuY29sb3ItZGFyay1ncmF5e2NvbG9yOiM0OTU5Njd9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC5jb2xvci1kYXJrZXItZ3JheXtjb2xvcjojMzE0MzUxfS5jb2xvci13aGl0ZXtjb2xvcjojZmZmfS5jb2xvci13aGl0ZS1pe2Nv''@;'; put 'put ''bG9yOiNmZmYhaW1wb3J0YW50fS5jb2xvci1ncmVlbntjb2xvcjojNGI5ZTRifS5jb2xvci1kYy1ncmVlbntjb2xvcjojODFiNDQwfS5jb2xvci1yZWR7Y29sb3I6I2U0NTQ1NH0uY29sb3Itb3Jhbmdle2NvbG9yOiNlNjdlMjJ9LmNvbG9yLWJsdWV7Y29sb3I6IzNmOGNjM30uY29sb3IteWVs''@;'; put 'put ''bG93e2NvbG9yOiNmMWM0MGZ9LmN1cnNvci1wb2ludGVye2N1cnNvcjpwb2ludGVyfS5jdXJzb3ItZGVmdWFsdHtjdXJzb3I6ZGVmYXVsdH0uY3Vyc29yLWRlZmF1bHQtaXtjdXJzb3I6ZGVmYXVsdCFpbXBvcnRhbnR9LmJhY2tncm91bmQtdHJhbnNwYXJlbnR7YmFja2dyb3VuZC1jb2xvcjp0''@;'; put 'put ''cmFuc3BhcmVudH0ucG9pbnRlci1ldmVudHMtbm9uZXtwb2ludGVyLWV2ZW50czpub25lfS53aGl0ZXNwYWNlLW5vd3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS5mb250LXNpemUtMTV7Zm9udC1zaXplOjE1cHh9LmZvbnQtc2l6ZS0xOHtm''@;'; put 'put ''b250LXNpemU6MThweH0uZm9udC1ib2xke2ZvbnQtd2VpZ2h0OjcwMH0uZm9udC1ib2xkLWl7Zm9udC13ZWlnaHQ6NzAwIWltcG9ydGFudH0uZm9udC13ZWlnaHQtMzAwe2ZvbnQtd2VpZ2h0OjMwMH0uZm9udC13ZWlnaHQtNzAwe2ZvbnQtd2VpZ2h0OjcwMH0ud29yZC1icmVha3t3b3JkLWJy''@;'; put 'put ''ZWFrOmJyZWFrLXdvcmR9LndvcmQtYnJlYWstYWxse3dvcmQtYnJlYWs6YnJlYWstYWxsfS5wb3NpdGlvbi1yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0ucG9zaXRpb24tYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LmQtbm9uZXtkaXNwbGF5Om5vbmV9LmQtYmxvY2t7ZGlzcGxheTpi''@;'; put 'put ''bG9ja30uZC1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmQtZmxleHtkaXNwbGF5OmZsZXh9LmQtY29udGVudHN7ZGlzcGxheTpjb250ZW50c30uZmxleC11bnNldHtmbGV4OnVuc2V0fS5hbGlnbi1zZWxmLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kfS5hbGlnbi1zZWxmLXN0''@;'; put 'put ''YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydH0uYWxpZ24taXRlbXMtY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlcn0uanVzdGlmeS1jb250ZW50LWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5qdXN0aWZ5LWNvbnRlbnQtY2VudGVyLWl7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBv''@;'; put 'put ''cnRhbnR9Lmp1c3RpZnktY29udGVudC1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uanVzdGlmeS1jb250ZW50LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9Lmp1c3RpZnktY29udGVudC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5qdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmZsZXgtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xyLWdhcC01e2dhcDo1cHh9LmNsci1nYXAtMHtnYXA6MH0ub3ZlcmZsb3ctYXV0b3tvdmVyZmxvdzphdXRvfS56LWluZGV4LWhpZ2hlc3R7ei1p''@;'; put 'put ''bmRleDoxMDAwMDAwMH0udmVydGljYWwtYWxpZ24tbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uaWNvbi1kYy1maWxse2ZpbGw6IzgxYjQ0MH0uZGF0YWdyaWQtY3VzdG9tLWZvb3RlciAuZGF0YWdyaWQtb3V0ZXItd3JhcHBlciwudGV4dC1hcmVhLWZ1bGwtd2lkdGggLmNsci1jb250''@;'; put 'put ''cm9sLWNvbnRhaW5lciwudGV4dC1hcmVhLWZ1bGwtd2lkdGggLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYXt3aWR0aDoxMDAlfS50ZXh0LWFyZWEtZnVsbC13aWR0aCBjbHItdGV4dGFyZWEtY29udGFpbmVye21hcmdpbjowIWltcG9ydGFudH0udGV4dC1hcmVhLWZ1bGwtd2lkdGgg''@;'; put 'put ''LmNsci10ZXh0YXJlYS13cmFwcGVye21hcmdpbjowIWltcG9ydGFudH0ucHJvZ3Jlc1N0YXRpY3ttYXJnaW4tdG9wOi02cHghaW1wb3J0YW50O3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDt6LWluZGV4OjEwMDAwIWltcG9ydGFudH0ucHJvZ3Jlc3MsLnByb2dyZXNzLXN0YXRpY3tiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOiNmNWY2ZmU7Ym9yZGVyLXJhZGl1czowO2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDo2cHg7bWFyZ2luOjA7bWF4LWhlaWdodDouNTgzMzMzcmVtO21pbi1oZWlnaHQ6LjE2NjY2N3JlbTtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpibG9jazt3aWR0aDpjYWxjKDEwMCUg''@;'; put 'put ''LSA2M3B4KX0ucHJvZ3Jlc3MubG9vcDphZnRlcnthbmltYXRpb246Y2xyLXByb2dyZXNzLWxvb3BlciAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO2NvbnRlbnQ6IiAiO3RvcDouMTY2NjY3cmVtO2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6IzYwYjUxNTt3aWR0aDo3NSV9LmJhZGdlLXdhcm5pbmd7Y29sb3I6I2ZmZiFpbXBvcnRhbnR9LmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWEgLmNhcmQtaGVhZGVyIGgze21hcmdpbi10b3A6MTBweH0ubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxle3BhZGRpbmc6''@;'; put 'put ''MTVweCAxNXB4IDB9Lm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2UgY2xyLWljb257ZGlzcGxheTpub25lfS5zaG93LWNsb3NlIC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLmNsb3NlIGNsci1pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDot''@;'; put 'put ''MThweDtyaWdodDotMTBweH0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlcntiYWNrZ3JvdW5kOiNkOTRiMmU7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZX0uY2FyZC1oZWFkZXJ7Zm9udC13ZWlnaHQ6MzAwfS5zZWxlY3Qgc2VsZWN0OmZvY3Vze2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM0''@;'; put 'put ''OTU5Njc7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTgwZGVnLHRyYW5zcGFyZW50IDk1JSwjNDk1YTY3IDApIG5vLXJlcGVhdH0uY2xyLXRyZWVub2RlLWNoaWxkcmVue21hcmdpbi1sZWZ0Oi4ycmVtIWltcG9ydGFudH0udGFibGUtYWN0aXZlOmZvY3Vze2JhY2tncm91bmQ6I2Q4ZTNl''@;'; put 'put ''OX1jbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLWNvbnRyb2wtY29udGFpbmVyLGNsci1zZWxlY3QtY29udGFpbmVyIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1zZWxlY3Qtd3JhcHBlcixjbHItc2VsZWN0LWNvbnRhaW5lciBzZWxlY3R7d2lkdGg6MTAwJX10Ym9keXtmb250LXdlaWdo''@;'; put 'put ''dDo0MDB9aDMsaDR7Y29sb3I6IzU4NTg1ODtmb250LXdlaWdodDo0MDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2xpbmUtaGVpZ2h0OjFyZW07bWFyZ2luLXRvcDoxcmVtO21hcmdpbi1ib3R0b206MH1oMSxoMntjb2xvcjojNTg1ODU4O2ZvbnQtd2VpZ2h0OjQwMDtsZXR0ZXItc3BhY2luZzpu''@;'; put 'put ''b3JtYWw7bGluZS1oZWlnaHQ6MnJlbTttYXJnaW4tdG9wOjFyZW07bWFyZ2luLWJvdHRvbTowfWNsci1pY29uLmlzLWluZm97ZmlsbDojODBiNDQxfS5kYXRhZ3JpZC1ob3N0LC5kYXRhZ3JpZC1vdmVybGF5LXdyYXBwZXJ7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5Oi13ZWJraXQtYm94''@;'; put 'put ''IWltcG9ydGFudH0uYnRuIC5jbHItbG9hZGluZy1idG4tY29udGVudHtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5idG4uYnRuLWRhbmdlciwuYnRuLmJ0bi13YXJuaW5ne2JvcmRlci1jb2xvcjojZWY0ZjJlO2JhY2tncm91bmQtY29sb3I6I2Q5NGIyZTtjb2xvcjojZmZmfS5idG4uYnRuLXNt''@;'; put 'put ''OmhhcyhjbHItaWNvbil7bGluZS1oZWlnaHQ6Mn0uZC1ub25le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmQtYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmNsci1mbGV4LTF7ZmxleDoxfS5jbHItZmxleC1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jbHItZmxleC1yb3d7''@;'; put 'put ''ZmxleC1kaXJlY3Rpb246cm93fS5ib3JkZXItMHtib3JkZXI6MH0uYm94LXNoYWRvdy1ub25le2JveC1zaGFkb3c6bm9uZX0uYm94LXNoYWRvdy1ub25lLWl7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH0uaHRDdXN0b21IaWRkZW57ZGlzcGxheTpub25lfWJvZHlbY2RzLXRoZW1lPWRhcmtd''@;'; put 'put ''IC5odERhcmt7YmFja2dyb3VuZDojODg4O2NvbG9yOiNmZmZ9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSAuaHREYXJre2JhY2tncm91bmQ6IzNjNTY2Mjtjb2xvcjojZWVlfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgLmRhcmtUSDpub3QoLnByaW1hcnlL''@;'; put 'put ''ZXlIZWFkZXJTdHlsZSl7YmFja2dyb3VuZDojNDg3ZDk2O2NvbG9yOiNlZWV9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSAuZGFya1RILmh0X19oaWdobGlnaHR7YmFja2dyb3VuZDojM2I2YjgxfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5yZWNvcmQtZWRpdC1tb2RhbCAuZGF0''@;'; put 'put ''ZS1pbnB1dHtjb2xvci1zY2hlbWU6ZGFya30uaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIGEsLmhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mbyBhOmhvdmVye2NvbG9yOiMwNjl9LmhhbmRzb250YWJsZSAuaHRBdXRvY29tcGxldGVBcnJvd3tjb2xvcjojODI4MjgyfS5oYW5kc29udGFibGUubGlz''@;'; put 'put ''dGJveHtib3gtc2hhZG93OjAgNHB4IDIwcHggIzAwMDAwMDcwO2JvcmRlcjowIWltcG9ydGFudDtvdXRsaW5lOnZhcigtLWh0LW1lbnUtYm9yZGVyLXdpZHRoLCAxcHgpIHNvbGlkIHZhcigtLWh0LW1lbnUtYm9yZGVyLWNvbG9yLCAjZTVlNWU5KTtvdXRsaW5lLW9mZnNldDpjYWxjKC0xICog''@;'; put 'put ''dmFyKC0taHQtbWVudS1ib3JkZXItd2lkdGgsIDFweCkpfS5oYW5kc29udGFibGUubGlzdGJveCAud3RIb2xkZXJ7b3ZlcmZsb3cteDpoaWRkZW59LmhhbmRzb250YWJsZSB0ZC5odEludmFsaWQsLmhhbmRzb250YWJsZSB0ZC5kYy1pbnZhbGlkLWNlbGx7YmFja2dyb3VuZDojZTYyNzAwYWQh''@;'; put 'put ''aW1wb3J0YW50O2JvcmRlcjoxcHggc29saWQgcmVkIWltcG9ydGFudDtjb2xvcjojZmZmIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIHRkLmRjLXdhcm5pbmctY2VsbHtiYWNrZ3JvdW5kOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMzAwKSFpbXBvcnRhbnQ7Ym9yZGVyOjFweCBzb2xp''@;'; put 'put ''ZCB2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmcpIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIC5udW1lcmljTGlzdGJveHt0ZXh0LWFsaWduOnJpZ2h0fS5tYXJnaW4tdG9wLTIwe21hcmdpbi10b3A6MjBweH0uaGlkZGVue2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LnVudmlzaWJsZXt2''@;'; put 'put ''aXNpYmlsaXR5OmhpZGRlbn0ubm8tYm9yZGVyc3tib3JkZXI6MH0uY2FyZC5uby1ib3JkZXJzLC5jYXJkLm5vLWJvcmRlcnMgLmNhcmQtaGVhZGVyLC5jYXJkLm5vLWJvcmRlcnMgLmNhcmQtYmxvY2ssLmNhcmQubm8tYm9yZGVycyAuY2FyZC1mb290ZXIsLmNhcmQubm8taW5uZXItYm9yZGVy''@;'; put 'put ''cyAuY2FyZC1oZWFkZXIsLmNhcmQubm8taW5uZXItYm9yZGVycyAuY2FyZC1ibG9jaywuY2FyZC5uby1pbm5lci1ib3JkZXJzIC5jYXJkLWZvb3Rlcntib3JkZXI6MDtib3gtc2hhZG93Om5vbmV9QG1lZGlhKG1pbi13aWR0aDo1NzZweCl7LmQtc20tbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0''@;'; put 'put ''YW50fS5kLXNtLWlubGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9LmQtc20taW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH0uZC1zbS1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uZC1zbS10YWJsZXtkaXNwbGF5OnRhYmxlIWltcG9ydGFudH0u''@;'; put 'put ''ZC1zbS10YWJsZS1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbCFpbXBvcnRhbnR9LmQtc20tZmxleHtkaXNwbGF5OmZsZXghaW1wb3J0YW50fS5kLXNtLWlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXghaW1wb3J0YW50fS5jbHItZmxleC1zbS1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29s''@;'; put 'put ''dW1ufS5jbHItZmxleC1zbS1yb3d7ZmxleC1kaXJlY3Rpb246cm93fS5jbHItZ2FwLXNtLTV7Z2FwOjVweH0uY2xyLWdhcC1zbS0we2dhcDowfX1AbWVkaWEobWluLXdpZHRoOjc2OHB4KXsuZC1tZC1ub25le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmQtbWQtaW5saW5le2Rpc3BsYXk6aW5s''@;'; put 'put ''aW5lIWltcG9ydGFudH0uZC1tZC1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fS5kLW1kLWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5kLW1kLXRhYmxle2Rpc3BsYXk6dGFibGUhaW1wb3J0YW50fS5kLW1kLXRhYmxlLWNlbGx7ZGlzcGxheTp0YWJs''@;'; put 'put ''ZS1jZWxsIWltcG9ydGFudH0uZC1tZC1mbGV4e2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9LmQtbWQtaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleCFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNsci1mbGV4LW1kLXJvd3tmbGV4LWRp''@;'; put 'put ''cmVjdGlvbjpyb3d9LmNsci1nYXAtbWQtNXtnYXA6NXB4fS5jbHItZ2FwLW1kLTB7Z2FwOjB9fUBtZWRpYShtaW4td2lkdGg6OTkycHgpey5kLWxnLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZC1sZy1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fS5kLWxnLWlubGluZS1i''@;'; put 'put ''bG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmQtbGctYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmQtbGctdGFibGV7ZGlzcGxheTp0YWJsZSFpbXBvcnRhbnR9LmQtbGctdGFibGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGwhaW1wb3J0YW50fS5kLWxnLWZsZXh7''@;'; put 'put ''ZGlzcGxheTpmbGV4IWltcG9ydGFudH0uZC1sZy1pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4IWltcG9ydGFudH0uY2xyLWZsZXgtbGctY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xyLWZsZXgtbGctcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uY2xyLWdhcC1sZy01e2dh''@;'; put 'put ''cDo1cHh9LmNsci1nYXAtbGctMHtnYXA6MH19LmRhdGFncmlkLWJvZHl7cGFkZGluZy1ib3R0b206MnJlbSFpbXBvcnRhbnR9LmFib3J0TXNne3doaXRlLXNwYWNlOnByZS13cmFwO2ZvbnQtZmFtaWx5Om1vbm9zcGFjZX0jZ3JhcGggc3Zne2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9Lm5vLXRh''@;'; put 'put ''YmxlLXNlbGVjdGVke2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKTt6LWluZGV4OjEwO3dp''@;'; put 'put ''ZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjB9LmNvcHlSaWdodHtiYWNrZ3JvdW5kOiM0OTU5NjchaW1wb3J0YW50O2NvbG9yOiNmZmY7ZGlzcGxheTpmbGV4IWltcG9ydGFudDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjVweCAwIDRweDt6LWlu''@;'; put 'put ''ZGV4OjEwMH0ubmF2LXRyZWU+Y2xyLXRyZWUtbm9kZS5jbHItZXhwYW5kZWR7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fWNsci10cmVlLW5vZGV7b3ZlcmZsb3cteTp2aXNpYmxlfWNsci10cmVlLW5vZGU6Zm9jdXN7b3V0bGluZTpub25lIWltcG9ydGFudH1jbHItdHJlZS1ub2Rl''@;'; put 'put ''IC5jbHItdHJlZW5vZGUtY2FyZXR7d2lkdGg6YXV0byFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8haW1wb3J0YW50fWNsci10cmVlLW5vZGUgLmNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lcntwYWRkaW5nOjAgOHB4O3dpZHRoOmF1dG87aGVpZ2h0OmF1dG87YWxpZ24taXRlbXM6Y2VudGVy''@;'; put 'put ''fWNsci10cmVlLW5vZGUgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXI6Zm9jdXN7b3V0bGluZTpub25lIWltcG9ydGFudH0uY2xyLXRyZWVub2RlLWNvbnRlbnQgcHt3aGl0ZS1zcGFjZTpub3dyYXB9LnNlYXJjaC1ub2Rle21hcmdpbi1ib3R0b206NXB4fS50cmVlLXNlYXJjaC13''@;'; put 'put ''cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LnRyZWUtc2VhcmNoLXdyYXBwZXIgY2xyLWlucHV0LWNvbnRhaW5lcnttYXJnaW46MH0udHJlZS1zZWFyY2gtd3JhcHBlciBjbHItaWNvbntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO2Jv''@;'; put 'put ''dHRvbTowO21hcmdpbjowIDAgM3B4O2N1cnNvcjpwb2ludGVyfS5jbHItdHJlZS1ub2Rle292ZXJmbG93OnZpc2libGUhaW1wb3J0YW50fS5jb250ZW50LWNvbnRhaW5lcnt3aWR0aDoxMDAlfUAtbW96LWRvY3VtZW50IHVybC1wcmVmaXgoKXsud3RIb2xkZXJ7d2lkdGg6MTAwJSFpbXBvcnRh''@;'; put 'put ''bnR9fWlucHV0OjotbXMtY2xlYXJ7ZGlzcGxheTpub25lfUBtZWRpYSBhbGwgYW5kICgtbXMtaGlnaC1jb250cmFzdDpub25lKSwoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXtjbHItdHJlZS1ub2RlLmNsci1leHBhbmRlZHtwYWRkaW5nLWJvdHRvbToyMHB4O21pbi1oZWlnaHQ6YXV0b30u''@;'; put 'put ''Y2xyLXRyZWUtbm9kZXttaW4taGVpZ2h0OjI0cHh9LmNsci10cmVlbm9kZS1jaGlsZHJlbntvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50fS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLWljb24sLmNsci10cmVlbm9kZS1jb250ZW50IGNsci1pY29ue21pbi13aWR0aDoxNnB4O21pbi1oZWln''@;'; put 'put ''aHQ6MTZweH0udHJlZS1zZWFyY2gtd3JhcHBlciBjbHItaWNvbntib3R0b206MnB4fS5jb250ZW50LWNvbnRhaW5lcntoZWlnaHQ6MTAwJX0uY29udGVudC1hcmVhPi5jYXJke21hcmdpbi1ib3R0b206MjBweH0ucmVjb3JkLWVkaXQtbW9kYWwgdGV4dGFyZWF7bWluLWhlaWdodDo0MnB4fX0u''@;'; put 'put ''Ym9yZGVyLWJvdHRvbS1kaXZpZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkM2QzZDN9LmxvYWRpbmdTcGlubmVye2hlaWdodDo3MHZoO2ZsZXg6MTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVy''@;'; put 'put ''fS5kaXNhYmxlLXBhc3N3b3JkLW1hbmFnZXJ7LXdlYmtpdC10ZXh0LXNlY3VyaXR5OmRpc2M7LW1vei10ZXh0LXNlY3VyaXR5OmRpc2M7dGV4dC1zZWN1cml0eTpkaXNjO2ZvbnQtZmFtaWx5OnRleHQtc2VjdXJpdHktZGlzY30ucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9aHIubGlnaHR7''@;'; put 'put ''Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RlZGVkZX0uc3Bpbm5lcntiYWNrZ3JvdW5kOnVybCgvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvc3Bpbm5lci4xNmY3NjNjZWJjNmI2NGRmLXN2ZykhaW1wb3J0YW50fS5j''@;'; put 'put ''bHItc2VsZWN0LXdyYXBwZXI6YWZ0ZXJ7YmFja2dyb3VuZDp1cmwoL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2NhcmV0LjY1ZjFmYzBhY2JlNGM3ZmYtc3ZnKSFpbXBvcnRhbnR9Ym9keVtjZHMtdGhlbWU9ZGFya10gLnRhYmxlLXNl''@;'; put 'put ''YXJjaC13cmFwcGVye2JhY2tncm91bmQ6IzIxMzMzYn0udGFibGUtc2VhcmNoLXdyYXBwZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS50YWJsZS1zZWFyY2gtd3JhcHBlciAuaW5wdXQtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTttaW4td2lkdGg6MTcwcHh9LnRhYmxlLXNlYXJjaC13cmFw''@;'; put 'put ''cGVyIC5pbnB1dC13cmFwcGVyIGNsci1pY29uLC50YWJsZS1zZWFyY2gtd3JhcHBlciAuaW5wdXQtd3JhcHBlciAuc3Bpbm5lcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxOXB4O3RvcDowfS50YWJsZS1zZWFyY2gtd3JhcHBlciAuaW5wdXQtd3JhcHBlciBjbHItaWNvbntjdXJzb3I6cG9p''@;'; put 'put ''bnRlcn0udGFibGUtc2VhcmNoLXdyYXBwZXIgLmlucHV0LXdyYXBwZXIgW25hbWU9c2VhcmNoLWlucHV0XXtwYWRkaW5nLXJpZ2h0OjI1cHh9LnRhYmxlLXNlYXJjaC13cmFwcGVyIGNsci1pbnB1dC1jb250YWluZXJ7bWFyZ2luLXRvcDotNXB4O21hcmdpbi1yaWdodDowfS50YWJsZS1zZWFy''@;'; put 'put ''Y2gtd3JhcHBlciBjbHItaW5wdXQtY29udGFpbmVyIGxhYmVse2Rpc3BsYXk6bm9uZX0udGFibGUtc2VhcmNoLXdyYXBwZXIgY2xyLWNoZWNrYm94LWNvbnRhaW5lcnttYXJnaW4tdG9wOjB9LnRhYmxlLXNlYXJjaC13cmFwcGVyIGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLC50''@;'; put 'put ''YWJsZS1zZWFyY2gtd3JhcHBlciBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MH0udGFibGUtc2VhcmNoLXdyYXBwZXIgaW5wdXRbdHlwZT1udW1iZXJdey1tb3otYXBwZWFyYW5jZTp0ZXh0ZmllbGR9LmRjLWxvY2tlZC1j''@;'; put 'put ''b250cm9se29wYWNpdHk6LjQ7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudH0ubGluay1pdHtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5pbmZvQmFye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtnYXA6''@;'; put 'put ''OHB4O2JhY2tncm91bmQ6IzQ5NTk2Nztjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6M3B4IDhweDtmb250LXNpemU6MTZweDtmb250LWZhbWlseTpMdWNpZGEgQ29uc29sZSxNb25hY28sbW9ub3NwYWNlfS5pbmZvQmFyIC5pbmZvQmFyLXRleHR7ZmxleDoxO21pbi13aWR0''@;'; put 'put ''aDowO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30uaW5mb0Jhci5leHBhbmRlZHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5pbmZvQmFyLmV4cGFuZGVkIC5pbmZvQmFyLXRleHR7b3ZlcmZsb3c6dmlzaWJsZTt3aGl0ZS1zcGFjZTpu''@;'; put 'put ''b3JtYWw7dGV4dC1vdmVyZmxvdzpjbGlwO292ZXJmbG93LXdyYXA6YW55d2hlcmV9LmluZm9CYXIgLmluZm9CYXItdG9nZ2xle2ZsZXg6bm9uZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO2NvbG9yOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzowIDJweDtsaW5lLWhl''@;'; put 'put ''aWdodDoxfS5pbmZvQmFyIC5pbmZvQmFyLXRvZ2dsZSBjbHItaWNvbnt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTVzIGVhc2UtaW59LmluZm9CYXIuZXhwYW5kZWQgLmluZm9CYXItdG9nZ2xlIGNsci1pY29ue3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0K'';'; put 'run;'; put '%sasjsout(CSS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=text-security-disc.f758130bc0ffc111-woff; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''d09GRgABAAAAAAusAAsAAAAAMGgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAPgAAAFZjRmM5Y21hcAAAAYQAAAgCAAArYmjjYVVnbHlmAAAJiAAAAEEAAABQiOYj2mhlYWQAAAnMAAAALgAAADYR8XmmaGhlYQAACfwAAAAcAAAAJAqNAyNo''@;'; put 'put ''bXR4AAAKGAAAAAgAAAAIAyAAAGxvY2EAAAogAAAABgAAAAYAKAAAbWF4cAAACigAAAAeAAAAIAEOACJuYW1lAAAKSAAAAUIAAAKOcN63t3Bvc3QAAAuMAAAAHQAAAC5lhHRpeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGSc''@;'; put 'put ''wDiBgZWBgSGVtYKBgVECQjMfYEhiYmFgYGJgZWbACgLSXFMYHIAq/rNfAHK3gEmgASACAIekCT4AAHic7dhl0zDVmUXh5+XFHYK7E0IguFtwt4QQgmtwd3d3d7cED+4SXIO7u7vbsNfaUzU1fyGcu66u1adOf+6uHhgYGGpgYGDwL37/iyEHBoZZcWDQLzUw9NK/7A5if/DA8OwPOfQknBky+0P8''@;'; put 'put ''/PPPOcd1UJ785frr/Dq/zq/z6/w3zsCgoX/xX74GRsxbcYpRB1iDB/7PGvT/DFGDenBwe8hKD1XpoSs9TKWHrfRwlR6+0iNUesRKj1TpkSs9SqVHrfRolR690r+p9BiVHrPSY1V67EqPU+lxKz1epcev9ASVnrDSE1V64kpPUulJKz1ZpSev9BSVnrLSU1V66kr/ttLTVPp3lZ62/KJSerpKT1/p''@;'; put 'put ''P1R6hkrPWOmZKj1zpWep9KyVnq3Ss1d6jkrPWem5Kj13peep9LyVnq/S81d6gUr/sdILVnqhSi9c6UUqvWilF6v04pVeotJLVnqpSi9d6WUqvWyll6v08pVeodIrVvpPlf5zpVeq9F8qvXKl/1rpVSr9t0qvWunVKr16pdeo9JqVXqvSa1d6nUqvW+n1Kr1+pTeo9N8rvWGlN6r0xpXepNKbVnqz''@;'; put 'put ''Sm9e6S0qvWWlt6r01pXeptLbVnq7Sm9f6R0qvWOld6r0zpXepdK7Vnq3Su9e6T0qvWel96r03pXep9L7Vnq/Su9f6QMqfWClD6r0wZU+pNKHVvqwSh9e6SMqfWSlj6r00ZU+ptLHVvq4Sh9f6RMqfWKlT6r0yZU+pdKnVvq0Sp9e6TMqfWalz6r02ZU+p9LnVvq8Sp9f6QsqfWGl/1Hpf1b6okpf''@;'; put 'put ''XOlLKn1ppS+r9OWVvqLS/6r0lZW+qtJXV/qaSl9b6esqfX2lb6j0jZW+qdI3V/qWSt9a6dsqfXul76j0vyt9Z6XvqvTdlb6n0vdW+r5K31/pByr9YKUfqvTDlX6k0v+p9KOVfqzSj1f6iUo/WemnKv10pZ+p9LOVfq7Sz1f6hUq/WOmXKv1ypV+p9KuVfq3Sr1f6jUq/Wem3Kv12pd+p9LuVfq/S''@;'; put 'put ''71f6g0p/WOmPKv1xpT+p9KeV/qzSn1f6i0p/WemvKv11pb+p9LeV/q7S31f6h0r/WOmfKv1zDfI26KKHED1Y9JCihxI9tOhhRA8rejjRw4seQfSIokcSPbLoUUSPKno00aOL/o3oMUSPKXos0WOLHkf0uKLHEz2+6AlETyh6ItETi55E9KSiJxM9uegpRE8peirRU4v+rehpRP9O9LSify96OtHT''@;'; put 'put ''i/6D6BlEzyh6JtEzi55F9KyiZxM9u+g5RM8pei7Rc4ueR/S8oucTPb/oBUT/UfSCohcSvbDoRUQvKnox0YuLXkL0kqKXEr206GVELyt6OdHLi15B9Iqi/yT6z6JXEv0X0SuL/qvoVUT/TfSqolcTvbroNUSvKXot0WuLXkf0uqLXE72+6A1E/130hqI3Er2x6E1Ebyp6M9Gbi95C9JaitxK9teht''@;'; put 'put ''RG8rejvR24veQfSOoncSvbPoXUTvKno30buL3kP0nqL3Er236H1E7yt6P9H7iz5A9IGiDxJ9sOhDRB8q+jDRh4s+QvSRoo8SfbToY0QfK/o40ceLPkH0iaJPEn2y6FNEnyr6NNGniz5D9JmizxJ9tuhzRJ8r+jzR54u+QPSFov8h+p+iLxJ9sehLRF8q+jLRl4u+QvS/RF8p+irRV4u+RvS1oq8T''@;'; put 'put ''fb3oG0TfKPom0TeLvkX0raJvE3276DtE/1v0naLvEn236HtE3yv6PtH3i35A9IOiHxL9sOhHRP9H9KOiHxP9uOgnRD8p+inRT4t+RvSzop8T/bzoF0S/KPol0S+LfkX0q6JfE/266DdEvyn6LdFvi35H9Lui3xP9vugPRH8o+iPRH4v+RPSnoj8T/bnoL0R/Kfor0V+L/kb0t6K/E/296B9E/yj6''@;'; put 'put ''J9E/K/2/v/npoocQPVj0kKKHEj206GFEDyt6ONHDix5B9IiiRxI9suhRRI8qejTRo4v+jegxRI8peizRY4seR/S4oscTPb7oCURPKHoi0ROLnkT0pKInEz256ClETyl6KtFTi/6t6GlE/070tKJ/L3o60dOL/oPoGUTPKHom0TOLnkX0rKJnEz276DlEzyl6LtFzi55H9Lyi5xM9v+gFRP9R9IKi''@;'; put 'put ''FxK9sOhFRC8qejHRi4teQvSSopcSvbToZUQvK3o50cuLXkH0iqL/JPrPolcS/RfRK4v+q+hVRP9N9KqiVxO9uug1RK8pei3Ra4teR/S6otcTvb7oDUT/XfSGojcSvbHoTURvKnoz0ZuL3kL0lqK3Er216G1Ebyt6O9Hbi95B9I6idxK9s+hdRO8qejfRu4veQ/SeovcSvbfofUTvK3o/0fuLPkD0''@;'; put 'put ''gaIPEn2w6ENEHyr6MNGHiz5C9JGijxJ9tOhjRB8r+jjRx4s+QfSJok8SfbLoU0SfKvo00aeLPkP0maLPEn226HNEnyv6PNHni75A9IWi/yH6n6IvEn2x6EtEXyr6MtGXi75C9L9EXyn6KtFXi75G9LWirxN9vegbRN8o+ibRN4u+RfStom8TfbvoO0T/W/Sdou8Sfbfoe0TfK/o+0feLfkD0g6If''@;'; put 'put ''Ev2w6EdE/0f0o6IfE/246CdEPyn6KdFPi35G9LOinxP9vOgXRL8o+iXRL4t+RfSrol8T/broN0S/Kfot0W+Lfkf0u6LfE/2+6A9Efyj6I9Efi/5E9KeiPxP9uegvRH8p+ivRX4v+RvS3or8T/b3oH0T/KPon0T9rYND/AOaSEScAAHicY2BiAAKmPSy+QEqUgYFRUURcTFzMyNzM3MxEXU1dTYmd''@;'; put 'put ''jZ2NccK/K5oaLm6L3Fw0NOEMZoVAFD6IAQD4PA9iAAAAeJxjYGRgYADilrme/fH8Nl8ZuNkvAEUYbnDPcEOmmfaw+AIpDgYmEA8AHMMJGAAAeJxjYGRgYL/AAATMCiCSaQ8DIwMqYAIAK/QBvQAAAAADIAAAAAAAAAAoAAB4nGNgZGBgYGIQA2IGMIuBgQsIGRj+g/kMAArUATEAAHicjY69TsMw''@;'; put 'put ''FIWP+4doJYSKhMTmoUJIqOnPWIm1ZWDq0IEtTZw2VRpHjlu1D8A7MPMczAw8DM/AifFEl9qS9d1zzr3XAK7xBYHqCHTdW50aLlj9cZ1057lBfvTcRAdPnlvUnz23mXj13MEN3jhBNC6p9PDuuYYrfHquU//23CD/eG7iVnQ9t9ATD57bWIgXzx3ciw+rDrZfqmhnUnvsx2kZzdVql4Xm1DhVFsqU''@;'; put 'put ''qc7lKBiemjOVKxNaFcvlUZb71djaRCZGb+VU51ZlmZaF0RsV2WBtbTEZDBKvB5HewkLhwLePkhRhB4OU9ZFKTCqpzems6GQI6Z7TcU5mQceQUmjkkBghwPCszhmd3HWHLh+ze8mEpLvnT8dULRLWCTMaW9LUbanSGa+mUjhv47ZY7l67rgITDHiTf/mAKU76BTuXfk8AAHicY2BigAARBuyAiZGJ''@;'; put 'put ''kZmBJSWzOJmBAQALQwHHAAAA'';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=va-early.8e7fa37723acbd9f-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3RyeXt2YXIgZT13aW5kb3cubG9jYXRpb24uaGFzaHx8IiIsaT1lLmluZGV4T2YoIj8iKT49MD9lLnNwbGl0KCI/IilbMV06IiI7aWYoInZhIiE9PW5ldyBVUkxTZWFyY2hQYXJhbXMoaSkuZ2V0KCJlbWJlZCIpKXJldHVybn1jYXRjaHtyZXR1cm59''@;'; put 'put ''d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uKGEpe3ZhciB0PWEmJmEuZGF0YTt0JiYib2JqZWN0Ij09dHlwZW9mIHQmJiJzdHJpbmciPT10eXBlb2YgdC5yZXN1bHROYW1lJiYod2luZG93Ll9fdmFMYXN0TWVzc2FnZT17dDpEYXRlLm5vdygpLG9yaWdpbjphLm9y''@;'; put 'put ''aWdpbixkYXRhOnR9KX0sITEpfSgpOw=='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/web9/images; %let service=datacontroller-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0iMTY5MCIgaGVpZ2h0PSIyNDAiIHZpZXdCb3g9IjAgMCAxNjkwIDI0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEwNV83KSI+CjxwYXRoIGQ9Ik0xMjQuOSA1NS4yMDAxQzEyOC4y''@;'; put 'put ''IDU1LjYwMDEgMTMxLjQgNTUuOTAwMSAxMzQuNyA1Ni4zMDAxQzE0Mi42IDU3LjQwMDEgMTUwLjMgNTguOTAwMSAxNTcuNSA2Mi42MDAxQzE1OS42IDYzLjcwMDEgMTYxLjYgNjQuOTAwMSAxNjMuMSA2Ni44MDAxQzE2NS41IDY5LjYwMDEgMTY1LjQgNzIuNjAwMSAxNjMgNzUuNDAwMUMxNjAu''@;'; put 'put ''NSA3OC4yMDAxIDE1Ny4zIDc5LjgwMDEgMTUzLjkgODEuMTAwMUMxNDYgODQuMjAwMSAxMzcuNyA4NS42MDAxIDEyOS4zIDg2LjMwMDFDMTE1LjYgODcuNDAwMSAxMDIuMSA4Ni45MDAxIDg4LjcgODMuNzAwMUM4NC4zIDgyLjcwMDEgODAgODEuMzAwMSA3Ni4xIDc5LjEwMDFDNzQuNiA3OC4z''@;'; put 'put ''MDAxIDczLjIgNzcuMzAwMSA3MS45IDc2LjEwMDFDNjguMyA3Mi42MDAxIDY4LjMgNjguOTAwMSA3MiA2NS42MDAxQzc2IDYyLjAwMDEgODAuOSA2MC4zMDAxIDg1LjkgNTguOTAwMUM5Mi45IDU2LjkwMDEgMTAwIDU1LjkwMDEgMTA3LjIgNTUuNDAwMUMxMDcuOCA1NS40MDAxIDEwOC41IDU1''@;'; put 'put ''LjYwMDEgMTA5IDU1LjEwMDFDMTE0LjIgNTUuMjAwMSAxMTkuNiA1NS4yMDAxIDEyNC45IDU1LjIwMDFaIiBmaWxsPSIjRTBFMEUwIi8+CjxwYXRoIGQ9Ik02OS4yMDAxIDEzNy4zQzc1LjYwMDEgMTQ1LjUgODQuNzAwMSAxNDguNSA5NC4xMDAxIDE1MC41QzExMi43IDE1NC41IDEzMS4zIDE1''@;'; put 'put ''NCAxNDkuNCAxNDcuNkMxNTUgMTQ1LjYgMTYwLjIgMTQyLjkgMTYzLjkgMTM3LjlDMTY0LjUgMTM3LjEgMTY0LjggMTM3LjUgMTY1LjEgMTM4LjFDMTY1LjcgMTM5LjQgMTY2IDE0MC43IDE2NiAxNDIuMUMxNjYgMTQ3IDE2NiAxNTIgMTY2IDE1Ni45QzE2NiAxNjAuMSAxNjQuNSAxNjIuNiAx''@;'; put 'put ''NjIuMyAxNjQuOEMxNTcuNyAxNjkuNCAxNTEuOSAxNzEuOSAxNDUuOCAxNzMuOEMxMzMuNSAxNzcuNiAxMjAuOSAxNzguNCAxMDguMiAxNzcuNUM5OC43MDAxIDE3Ni44IDg5LjUgMTc1IDgwLjggMTcxLjFDNzcuMSAxNjkuNCA3My43MDAxIDE2Ny40IDcxLjAwMDEgMTY0LjNDNjguOTAwMSAx''@;'; put 'put ''NjEuOSA2Ny44IDE1OS4yIDY3LjggMTU2QzY3LjkgMTUxLjUgNjcuOCAxNDcgNjcuOCAxNDIuNUM2Ny44IDE0MC43IDY4LjEwMDEgMTM5IDY5LjIwMDEgMTM3LjNaIiBmaWxsPSIjOEVDNjNGIi8+CjxwYXRoIGQ9Ik02OS4yOTk5IDEwNi40Qzc0LjU5OTkgMTEzLjUgODEuOTk5OSAxMTYuNSA4''@;'; put 'put ''OS44OTk5IDExOC42QzEwOC44IDEyMy42IDEyNy43IDEyMy41IDE0Ni40IDExNy45QzE1Mi42IDExNi4xIDE1OC40IDExMy40IDE2Mi45IDEwOC41QzE2My41IDEwNy45IDE2My45IDEwNi41IDE2NC42IDEwNi43QzE2NS42IDEwNyAxNjUuNiAxMDguNCAxNjUuOSAxMDkuNUMxNjYuMyAxMTEu''@;'; put 'put ''MiAxNjYuMSAxMTIuOSAxNjYuMSAxMTQuNkMxNjYuMSAxMTggMTY2IDEyMS4zIDE2Ni4xIDEyNC43QzE2Ni4zIDEyOC45IDE2NC42IDEzMi4yIDE2MS41IDEzNC45QzE1Ni44IDEzOS4xIDE1MS4xIDE0MS42IDE0NSAxNDMuMkMxMjQuNSAxNDguNyAxMDQuMSAxNDguNiA4My45OTk5IDE0MS42''@;'; put 'put ''Qzc5LjA5OTkgMTM5LjkgNzQuNTk5OSAxMzcuNSA3MC45OTk5IDEzMy42QzY4Ljc5OTkgMTMxLjIgNjcuNyAxMjguNCA2Ny43IDEyNS4xQzY3LjggMTIwLjcgNjcuNyAxMTYuMiA2Ny43IDExMS44QzY3LjggMTEwIDY4LjA5OTkgMTA4LjIgNjkuMjk5OSAxMDYuNFoiIGZpbGw9IiNFMEUwRTAi''@;'; put 'put ''Lz4KPHBhdGggZD0iTTY5LjEgNzYuN0M3MC42IDgxLjEgNzQuMiA4My4wOTk5IDc4IDg0Ljg5OTlDODQuOCA4OC4wOTk5IDkyLjEgODkuNiA5OS40IDkwLjVDMTEzLjkgOTIuMyAxMjguNCA5Mi4xIDE0Mi43IDg5LjFDMTQ4LjUgODcuOSAxNTQuMSA4Ni4zIDE1OS4yIDgzLjFDMTYyLjEgODEu''@;'; put 'put ''MyAxNjMuNiA3OS42IDE2NC42IDc2LjhDMTY1LjYgNzguMiAxNjUuOSA3OS43IDE2NS45IDgxLjJDMTY1LjkgODYuMiAxNjYgOTEuMSAxNjUuOSA5Ni4xQzE2NS44IDEwMC4zIDE2My40IDEwMy4zIDE2MC4zIDEwNS44QzE1NC41IDExMC40IDE0Ny43IDExMi44IDE0MC42IDExNC40QzEyMS44''@;'; put 'put ''IDExOC41IDEwMy4yIDExOC4yIDg0LjkgMTEyQzgwLjEgMTEwLjQgNzUuNSAxMDguMSA3MS44IDEwNC41QzY5IDEwMS44IDY3LjUgOTguNyA2Ny42IDk0LjdDNjcuNyA5MC40IDY3LjYgODYuMSA2Ny42IDgxLjhDNjcuOCA3OS45IDY4LjEgNzguMyA2OS4xIDc2LjdaIiBmaWxsPSIjOEVDNjNG''@;'; put 'put ''Ii8+CjxwYXRoIGQ9Ik0xODMuOSAyMTAuOUMyMDAuMiAyMTEuOCAyMDguOSAxOTEuOCAxOTcuMSAxODAuNUMxODQuNyAxNjguNiAxNjQuMyAxNzkuNyAxNjcuNSAxOTYuNUM5My44IDI0My41IC0wLjk5OTk4MSAxNzMuMiAyNiA4Ny44MDAxTDcuODAwMDIgNzUuNjAwMUMtMzMuMSAxODQuMyA5''@;'; put 'put ''Mi44IDI3Ni4yIDE4My45IDIxMC45Wk0xNzguNyAxODcuNEMxODYuMyAxNzkuNSAxOTguNCAxOTAuNSAxOTEuMyAxOTguOEMxODMuOCAyMDcuNSAxNzAuNiAxOTUuOCAxNzguNyAxODcuNFoiIGZpbGw9IiNFMEUwRTAiLz4KPHBhdGggZD0iTTM1LjIgNTAuNzAwMUM0Ni45IDYxLjkwMDEgNjYu''@;'; put 'put ''MiA1Mi43MDAxIDY1LjEgMzYuNzAwMUMxMzguNyAtMTAuNyAyMzQgNTkuNTAwMSAyMDcgMTQ1LjJMMjI1LjIgMTU3LjRDMjY0LjkgNTEuODAwMSAxNDQuNCAtNDMuMjk5OSA1MS4yIDIwLjYwMDFDMzMuNyAxNy4wMDAxIDIyLjQgMzguNDAwMSAzNS4yIDUwLjcwMDFaTTUzLjYgNDMuODAwMUM0''@;'; put 'put ''NS44IDUxLjkwMDEgMzMuNSA0MC4xMDAxIDQxLjMgMzIuMDAwMUM0OS4xIDIzLjkwMDEgNjEuNCAzNS43MDAxIDUzLjYgNDMuODAwMVoiIGZpbGw9IiM4RUM2M0YiLz4KPHBhdGggZD0iTTMyMy41NzUgNDcuODg3NEMzMjMuNTc1IDQ2Ljc5MDEgMzIzLjkxNyA0NS44OTg1IDMyNC42MDMgNDUu''@;'; put 'put ''MjEyN0MzMjUuNDI2IDQ0LjM4OTcgMzI2LjM4NiA0My45NzgyIDMyNy40ODQgNDMuOTc4MkgzNjkuMDQ0QzM3OC45MiA0My45NzgyIDM4OC4wNDEgNDUuNzYxMyAzOTYuNDA4IDQ5LjMyNzZDNDA0LjkxMyA1Mi44OTM4IDQxMi4yNTEgNTcuOTAwMyA0MTguNDIzIDY0LjM0N0M0MjQuNTk2IDcw''@;'; put 'put ''LjY1NjUgNDI5LjQ2NSA3OC4yMDA1IDQzMy4wMzEgODYuOTc5QzQzNi41OTcgOTUuNzU3NSA0MzguMzggMTA1LjQyOCA0MzguMzggMTE1Ljk4OUM0MzguMzggMTI2LjU1MSA0MzYuNTk3IDEzNi4yMjEgNDMzLjAzMSAxNDQuOTk5QzQyOS40NjUgMTUzLjc3OCA0MjQuNTk2IDE2MS4zOSA0MTgu''@;'; put 'put ''NDIzIDE2Ny44MzdDNDEyLjI1MSAxNzQuMTQ2IDQwNC45MTMgMTc5LjA4NCAzOTYuNDA4IDE4Mi42NTFDMzg4LjA0MSAxODYuMjE3IDM3OC45MiAxODggMzY5LjA0NCAxODhIMzI3LjQ4NEMzMjYuMzg2IDE4OCAzMjUuNDI2IDE4Ny42NTcgMzI0LjYwMyAxODYuOTcxQzMyMy45MTcgMTg2LjE0''@;'; put 'put ''OCAzMjMuNTc1IDE4NS4xODggMzIzLjU3NSAxODQuMDkxVjQ3Ljg4NzRaTTM0OS4yOTMgNjkuMjg0OVYxNjIuNjkzSDM2OS42NjJDMzc1LjgzNCAxNjIuNjkzIDM4MS40NTggMTYxLjUyNyAzODYuNTMzIDE1OS4xOTZDMzkxLjYwOCAxNTYuODY0IDM5NS45MjggMTUzLjY0MSAzOTkuNDk1IDE0''@;'; put 'put ''OS41MjZDNDAzLjE5OCAxNDUuNDExIDQwNi4wMSAxNDAuNTQxIDQwNy45MyAxMzQuOTE4QzQwOS45ODggMTI5LjE1NyA0MTEuMDE2IDEyMi44NDcgNDExLjAxNiAxMTUuOTg5QzQxMS4wMTYgMTA5LjI2OCA0MDkuOTg4IDEwMy4wMjcgNDA3LjkzIDk3LjI2NjNDNDA2LjAxIDkxLjUwNTQgNDAz''@;'; put 'put ''LjE5OCA4Ni41Njc1IDM5OS40OTUgODIuNDUyNkMzOTUuOTI4IDc4LjMzNzcgMzkxLjYwOCA3NS4xMTQzIDM4Ni41MzMgNzIuNzgyNkMzODEuNDU4IDcwLjQ1MDggMzc1LjgzNCA2OS4yODQ5IDM2OS42NjIgNjkuMjg0OUgzNDkuMjkzWk01MzEuMDkzIDE3Ny45MThDNTI3LjM4OSAxODAuNjYy''@;'; put 'put ''IDUyMy4xMzcgMTgzLjEzMSA1MTguMzM3IDE4NS4zMjVDNTEzLjUzNiAxODcuMzgzIDUwOC43MzUgMTg4LjQxMSA1MDMuOTM1IDE4OC40MTFDNDk2LjgwMiAxODguNDExIDQ5MC4yMTggMTg3LjEwOCA0ODQuMTgzIDE4NC41MDJDNDc4LjE0OCAxODEuODk2IDQ3Mi45MzYgMTc4LjI2MSA0Njgu''@;'; put 'put ''NTQ2IDE3My41OThDNDY0LjI5NCAxNjguOTM0IDQ2MC45MzQgMTYzLjQ0OCA0NTguNDY1IDE1Ny4xMzhDNDU1Ljk5NiAxNTAuODI5IDQ1NC43NjEgMTQzLjk3IDQ1NC43NjEgMTM2LjU2NEM0NTQuNzYxIDEyOS40MzEgNDU2LjA2NCAxMjIuNzc5IDQ1OC42NzEgMTE2LjYwNkM0NjEuMjc3IDEx''@;'; put 'put ''MC4yOTcgNDY0Ljg0MyAxMDQuODEgNDY5LjM2OSAxMDAuMTQ3QzQ3My44OTYgOTUuMzQ2IDQ3OS4xMDggOTEuNTc0IDQ4NS4wMDYgODguODMwN0M0OTEuMDQxIDg2LjA4NzQgNDk3LjQ4OCA4NC43MTU4IDUwNC4zNDYgODQuNzE1OEM1MDkuMTQ3IDg0LjcxNTggNTEzLjg3OSA4NS44MTMxIDUx''@;'; put 'put ''OC41NDIgODguMDA3N0M1MjMuMjA2IDkwLjA2NTIgNTI3LjM4OSA5Mi40NjU1IDUzMS4wOTMgOTUuMjA4OFY4OS4wMzY1QzUzMS4wOTMgODcuOTM5MSA1MzEuNDM2IDg3LjA0NzYgNTMyLjEyMiA4Ni4zNjE4QzUzMi45NDUgODUuNTM4OCA1MzMuOTA1IDg1LjEyNzMgNTM1LjAwMiA4NS4xMjcz''@;'; put 'put ''SDU1MS4wNUM1NTMuNjU2IDg1LjEyNzMgNTU0Ljk1OSA4Ni40MzAzIDU1NC45NTkgODkuMDM2NVYxODQuMDkxQzU1NC45NTkgMTg2LjY5NyA1NTMuNjU2IDE4OCA1NTEuMDUgMTg4SDUzNS4wMDJDNTMzLjkwNSAxODggNTMyLjk0NSAxODcuNjU3IDUzMi4xMjIgMTg2Ljk3MUM1MzEuNDM2IDE4''@;'; put 'put ''Ni4xNDggNTMxLjA5MyAxODUuMTg4IDUzMS4wOTMgMTg0LjA5MVYxNzcuOTE4Wk00NzkuNjU3IDEzNi41NjRDNDc5LjY1NyAxNDAuMjY3IDQ4MC4zNDIgMTQzLjc2NSA0ODEuNzE0IDE0Ny4wNTdDNDgzLjA4NiAxNTAuMjExIDQ4NC45MzcgMTUzLjAyMyA0ODcuMjY5IDE1NS40OTJDNDg5LjYw''@;'; put 'put ''MSAxNTcuOTYxIDQ5Mi4yNzYgMTU5Ljk1IDQ5NS4yOTMgMTYxLjQ1OUM0OTguNDQ4IDE2Mi44MyA1MDEuNzQgMTYzLjUxNiA1MDUuMTY5IDE2My41MTZDNTA4Ljg3MiAxNjMuNTE2IDUxMi4yMzMgMTYyLjgzIDUxNS4yNTEgMTYxLjQ1OUM1MTguMjY4IDE1OS45NSA1MjAuODc0IDE1Ny45NjEg''@;'; put 'put ''NTIzLjA2OSAxNTUuNDkyQzUyNS40MDEgMTUzLjAyMyA1MjcuMTg0IDE1MC4yMTEgNTI4LjQxOCAxNDcuMDU3QzUyOS42NTMgMTQzLjc2NSA1MzAuMjcgMTQwLjI2NyA1MzAuMjcgMTM2LjU2NEM1MzAuMjcgMTMyLjg2IDUyOS42NTMgMTI5LjQzMSA1MjguNDE4IDEyNi4yNzZDNTI3LjE4NCAx''@;'; put 'put ''MjIuOTg0IDUyNS40MDEgMTIwLjEwNCA1MjMuMDY5IDExNy42MzVDNTIwLjg3NCAxMTUuMTY2IDUxOC4yNjggMTEzLjI0NiA1MTUuMjUxIDExMS44NzRDNTEyLjIzMyAxMTAuMzY1IDUwOC44NzIgMTA5LjYxMSA1MDUuMTY5IDEwOS42MTFDNTAxLjc0IDEwOS42MTEgNDk4LjQ0OCAxMTAuMzY1''@;'; put 'put ''IDQ5NS4yOTMgMTExLjg3NEM0OTIuMjc2IDExMy4yNDYgNDg5LjYwMSAxMTUuMTY2IDQ4Ny4yNjkgMTE3LjYzNUM0ODQuOTM3IDEyMC4xMDQgNDgzLjA4NiAxMjIuOTg0IDQ4MS43MTQgMTI2LjI3NkM0ODAuMzQyIDEyOS40MzEgNDc5LjY1NyAxMzIuODYgNDc5LjY1NyAxMzYuNTY0Wk01NzQu''@;'; put 'put ''NDA3IDg5LjAzNjVDNTc0LjQwNyA4Ny45MzkxIDU3NC43NSA4Ny4wNDc2IDU3NS40MzYgODYuMzYxOEM1NzYuMTIyIDg1LjUzODggNTc3LjAxMyA4NS4xMjczIDU3OC4xMTEgODUuMTI3M0g1OTMuMzM2VjU4LjE3NDZDNTkzLjMzNiA1Ny4wNzczIDU5My42NzkgNTYuMTg1OCA1OTQuMzY0IDU1''@;'; put 'put ''LjQ5OTlDNTk1LjE4NyA1NC42NzcgNTk2LjE0OCA1NC4yNjU1IDU5Ny4yNDUgNTQuMjY1NUg2MTMuMjkzQzYxNS44OTkgNTQuMjY1NSA2MTcuMjAyIDU1LjU2ODUgNjE3LjIwMiA1OC4xNzQ2Vjg1LjEyNzNINjM1LjMwOEM2MzYuNDA1IDg1LjEyNzMgNjM3LjI5NyA4NS41Mzg4IDYzNy45ODIg''@;'; put 'put ''ODYuMzYxOEM2MzguNjY4IDg3LjA0NzYgNjM5LjAxMSA4Ny45MzkxIDYzOS4wMTEgODkuMDM2NVYxMDQuMjYyQzYzOS4wMTEgMTA1LjM1OSA2MzguNjY4IDEwNi4yNSA2MzcuOTgyIDEwNi45MzZDNjM3LjI5NyAxMDcuNjIyIDYzNi40MDUgMTA3Ljk2NSA2MzUuMzA4IDEwNy45NjVINjE3LjIw''@;'; put 'put ''MlYxODQuMDkxQzYxNy4yMDIgMTg2LjY5NyA2MTUuODk5IDE4OCA2MTMuMjkzIDE4OEg1OTcuMjQ1QzU5Ni4xNDggMTg4IDU5NS4xODcgMTg3LjY1NyA1OTQuMzY0IDE4Ni45NzFDNTkzLjY3OSAxODYuMTQ4IDU5My4zMzYgMTg1LjE4OCA1OTMuMzM2IDE4NC4wOTFWMTA3Ljk2NUg1NzguMTEx''@;'; put 'put ''QzU3Ny4wMTMgMTA3Ljk2NSA1NzYuMTIyIDEwNy42MjIgNTc1LjQzNiAxMDYuOTM2QzU3NC43NSAxMDYuMjUgNTc0LjQwNyAxMDUuMzU5IDU3NC40MDcgMTA0LjI2MlY4OS4wMzY1Wk03MjkuNjkzIDE3Ny45MThDNzI1Ljk5IDE4MC42NjIgNzIxLjczOCAxODMuMTMxIDcxNi45MzcgMTg1LjMy''@;'; put 'put ''NUM3MTIuMTM3IDE4Ny4zODMgNzA3LjMzNiAxODguNDExIDcwMi41MzUgMTg4LjQxMUM2OTUuNDAzIDE4OC40MTEgNjg4LjgxOSAxODcuMTA4IDY4Mi43ODQgMTg0LjUwMkM2NzYuNzQ4IDE4MS44OTYgNjcxLjUzNiAxNzguMjYxIDY2Ny4xNDcgMTczLjU5OEM2NjIuODk1IDE2OC45MzQgNjU5''@;'; put 'put ''LjUzNCAxNjMuNDQ4IDY1Ny4wNjUgMTU3LjEzOEM2NTQuNTk2IDE1MC44MjkgNjUzLjM2MiAxNDMuOTcgNjUzLjM2MiAxMzYuNTY0QzY1My4zNjIgMTI5LjQzMSA2NTQuNjY1IDEyMi43NzkgNjU3LjI3MSAxMTYuNjA2QzY1OS44NzcgMTEwLjI5NyA2NjMuNDQzIDEwNC44MSA2NjcuOTcgMTAw''@;'; put 'put ''LjE0N0M2NzIuNDk2IDk1LjM0NiA2NzcuNzA4IDkxLjU3NCA2ODMuNjA3IDg4LjgzMDdDNjg5LjY0MiA4Ni4wODc0IDY5Ni4wODggODQuNzE1OCA3MDIuOTQ3IDg0LjcxNThDNzA3Ljc0NyA4NC43MTU4IDcxMi40NzkgODUuODEzMSA3MTcuMTQzIDg4LjAwNzdDNzIxLjgwNyA5MC4wNjUyIDcy''@;'; put 'put ''NS45OSA5Mi40NjU1IDcyOS42OTMgOTUuMjA4OFY4OS4wMzY1QzcyOS42OTMgODcuOTM5MSA3MzAuMDM2IDg3LjA0NzYgNzMwLjcyMiA4Ni4zNjE4QzczMS41NDUgODUuNTM4OCA3MzIuNTA1IDg1LjEyNzMgNzMzLjYwMyA4NS4xMjczSDc0OS42NTFDNzUyLjI1NyA4NS4xMjczIDc1My41NiA4''@;'; put 'put ''Ni40MzAzIDc1My41NiA4OS4wMzY1VjE4NC4wOTFDNzUzLjU2IDE4Ni42OTcgNzUyLjI1NyAxODggNzQ5LjY1MSAxODhINzMzLjYwM0M3MzIuNTA1IDE4OCA3MzEuNTQ1IDE4Ny42NTcgNzMwLjcyMiAxODYuOTcxQzczMC4wMzYgMTg2LjE0OCA3MjkuNjkzIDE4NS4xODggNzI5LjY5MyAxODQu''@;'; put 'put ''MDkxVjE3Ny45MThaTTY3OC4yNTcgMTM2LjU2NEM2NzguMjU3IDE0MC4yNjcgNjc4Ljk0MyAxNDMuNzY1IDY4MC4zMTUgMTQ3LjA1N0M2ODEuNjg2IDE1MC4yMTEgNjgzLjUzOCAxNTMuMDIzIDY4NS44NyAxNTUuNDkyQzY4OC4yMDEgMTU3Ljk2MSA2OTAuODc2IDE1OS45NSA2OTMuODk0IDE2''@;'; put 'put ''MS40NTlDNjk3LjA0OSAxNjIuODMgNzAwLjM0IDE2My41MTYgNzAzLjc3IDE2My41MTZDNzA3LjQ3MyAxNjMuNTE2IDcxMC44MzMgMTYyLjgzIDcxMy44NTEgMTYxLjQ1OUM3MTYuODY5IDE1OS45NSA3MTkuNDc1IDE1Ny45NjEgNzIxLjY2OSAxNTUuNDkyQzcyNC4wMDEgMTUzLjAyMyA3MjUu''@;'; put 'put ''Nzg0IDE1MC4yMTEgNzI3LjAxOSAxNDcuMDU3QzcyOC4yNTMgMTQzLjc2NSA3MjguODcgMTQwLjI2NyA3MjguODcgMTM2LjU2NEM3MjguODcgMTMyLjg2IDcyOC4yNTMgMTI5LjQzMSA3MjcuMDE5IDEyNi4yNzZDNzI1Ljc4NCAxMjIuOTg0IDcyNC4wMDEgMTIwLjEwNCA3MjEuNjY5IDExNy42''@;'; put 'put ''MzVDNzE5LjQ3NSAxMTUuMTY2IDcxNi44NjkgMTEzLjI0NiA3MTMuODUxIDExMS44NzRDNzEwLjgzMyAxMTAuMzY1IDcwNy40NzMgMTA5LjYxMSA3MDMuNzcgMTA5LjYxMUM3MDAuMzQgMTA5LjYxMSA2OTcuMDQ5IDExMC4zNjUgNjkzLjg5NCAxMTEuODc0QzY5MC44NzYgMTEzLjI0NiA2ODgu''@;'; put 'put ''MjAxIDExNS4xNjYgNjg1Ljg3IDExNy42MzVDNjgzLjUzOCAxMjAuMTA0IDY4MS42ODYgMTIyLjk4NCA2ODAuMzE1IDEyNi4yNzZDNjc4Ljk0MyAxMjkuNDMxIDY3OC4yNTcgMTMyLjg2IDY3OC4yNTcgMTM2LjU2NFoiIGZpbGw9IiNFMEUwRTAiLz4KPHBhdGggZD0iTTg3My4yMDYgNzQuMjIy''@;'; put 'put ''OEM4NzIuNjU3IDc1LjA0NTggODcxLjkwMyA3NS41MjU4IDg3MC45NDMgNzUuNjYzQzg2OS45ODIgNzUuODAwMiA4NjkuMDIyIDc1LjU5NDQgODY4LjA2MiA3NS4wNDU4Qzg2NC45MDcgNzMuMTI1NSA4NjEuMTM1IDcxLjQ3OTUgODU2Ljc0NiA3MC4xMDc5Qzg1Mi4zNTcgNjguNzM2MiA4NDcu''@;'; put 'put ''ODk5IDY4LjExOSA4NDMuMzczIDY4LjI1NjJDODM3LjQ3NSA2OC4yNTYyIDgzMS45ODggNjkuNTU5MiA4MjYuOTEzIDcyLjE2NTNDODIxLjk3NSA3NC42MzQzIDgxNy42NTQgNzguMDYzNCA4MTMuOTUxIDgyLjQ1MjZDODEwLjI0OCA4Ni43MDQ3IDgwNy4zNjcgOTEuNzExMSA4MDUuMzEgOTcu''@;'; put 'put ''NDcyQzgwMy4yNTIgMTAzLjIzMyA4MDIuMjkyIDEwOS40MDUgODAyLjQyOSAxMTUuOTg5QzgwMi41NjYgMTIyLjg0NyA4MDMuNTk1IDEyOS4yMjUgODA1LjUxNSAxMzUuMTIzQzgwNy41NzMgMTQwLjg4NCA4MTAuMzg1IDE0NS44OTEgODEzLjk1MSAxNTAuMTQzQzgxNy41MTcgMTU0LjM5NSA4''@;'; put 'put ''MjEuODM4IDE1Ny43NTUgODI2LjkxMyAxNjAuMjI0QzgzMS45ODggMTYyLjU1NiA4MzcuNjggMTYzLjcyMiA4NDMuOTkgMTYzLjcyMkM4NTAuMDI1IDE2My41ODUgODU1LjUxMiAxNjIuNTU2IDg2MC40NSAxNjAuNjM2Qzg2NS41MjUgMTU4LjcxNiA4NzAuNTMxIDE1NS45NzIgODc1LjQ2OSAx''@;'; put 'put ''NTIuNDA2Qzg3Ni40MjkgMTUxLjcyIDg3Ny40NTggMTUxLjUxNCA4NzguNTU1IDE1MS43ODlDODc5LjY1MiAxNTEuOTI2IDg4MC41NDQgMTUyLjQ3NSA4ODEuMjMgMTUzLjQzNUw4OTEuMTA2IDE2OC4yNDhDODkyLjM0IDE3MC4xNjkgODkxLjk5NyAxNzEuODgzIDg5MC4wNzcgMTczLjM5MkM4''@;'; put 'put ''ODIuNTMzIDE3OS4xNTMgODc1LjE5NSAxODMuMzM2IDg2OC4wNjIgMTg1Ljk0M0M4NjAuOTMgMTg4LjU0OSA4NTIuOTc0IDE4OS44NTIgODQ0LjE5NiAxODkuODUyQzgzMy42MzQgMTg5Ljk4OSA4MjQuMTAxIDE4OC4zNDMgODE1LjU5NyAxODQuOTE0QzgwNy4yMyAxODEuMzQ4IDgwMC4wMjkg''@;'; put 'put ''MTc2LjM0MSA3OTMuOTk0IDE2OS44OTRDNzg4LjA5NiAxNjMuMzExIDc4My41MDEgMTU1LjQ5MiA3ODAuMjA5IDE0Ni40MzlDNzc3LjA1NCAxMzcuMzg3IDc3NS40MDggMTI3LjM3NCA3NzUuMjcxIDExNi40MDFDNzc1LjEzNCAxMDcuMDczIDc3Ni41NzQgOTguMDIwNyA3NzkuNTkyIDg5LjI0''@;'; put 'put ''MjJDNzgyLjc0NiA4MC4zMjY2IDc4Ny4yMDQgNzIuMzcxMSA3OTIuOTY1IDY1LjM3NTdDNzk4LjcyNiA1OC4zODA0IDgwNS43MjEgNTIuNzU2NyA4MTMuOTUxIDQ4LjUwNDZDODIyLjE4MSA0NC4yNTI1IDgzMS40MzkgNDIuMTI2NSA4NDEuNzI3IDQyLjEyNjVDODQ4LjcyMiA0MS45ODkzIDg1''@;'; put 'put ''NS41OCA0Mi44MTIzIDg2Mi4zMDEgNDQuNTk1NEM4NjkuMTU5IDQ2LjM3ODYgODc1Ljg4IDQ5LjY3MDUgODgyLjQ2NCA1NC40NzEyQzg4My40MjQgNTUuMTU3IDg4My45NzMgNTYuMDQ4NiA4ODQuMTEgNTcuMTQ1OUM4ODQuMjQ3IDU4LjEwNjEgODgzLjk3MyA1OS4wNjYyIDg4My4yODcgNjAu''@;'; put 'put ''MDI2M0w4NzMuMjA2IDc0LjIyMjhaTTkwNi4yMTIgMTM2LjU2NEM5MDYuMjEyIDEyOS4yOTQgOTA3LjUxNSAxMjIuNTA0IDkxMC4xMjEgMTE2LjE5NUM5MTIuNzI3IDEwOS44ODUgOTE2LjIyNSAxMDQuMzk5IDkyMC42MTQgOTkuNzM1MkM5MjUuMTQgOTUuMDcxNyA5MzAuNDIxIDkxLjQzNjgg''@;'; put 'put ''OTM2LjQ1NiA4OC44MzA3Qzk0Mi40OTIgODYuMDg3NCA5NDkuMDA3IDg0LjcxNTggOTU2LjAwMiA4NC43MTU4Qzk2Mi45OTggODQuNzE1OCA5NjkuNDQ0IDg2LjA4NzQgOTc1LjM0MiA4OC44MzA3Qzk4MS4zNzcgOTEuNDM2OCA5ODYuNTkgOTUuMDcxNyA5OTAuOTc5IDk5LjczNTJDOTk1LjUw''@;'; put 'put ''NSAxMDQuMzk5IDk5OS4wMDMgMTA5Ljg4NSAxMDAxLjQ3IDExNi4xOTVDMTAwNC4wOCAxMjIuNTA0IDEwMDUuMzggMTI5LjI5NCAxMDA1LjM4IDEzNi41NjRDMTAwNS4zOCAxNDMuODMzIDEwMDQuMDggMTUwLjYyMyAxMDAxLjQ3IDE1Ni45MzJDOTk5LjAwMyAxNjMuMjQyIDk5NS41MDUgMTY4''@;'; put 'put ''LjcyOSA5OTAuOTc5IDE3My4zOTJDOTg2LjU5IDE3OC4wNTYgOTgxLjM3NyAxODEuNzU5IDk3NS4zNDIgMTg0LjUwMkM5NjkuMzA3IDE4Ny4xMDggOTYyLjc5MiAxODguNDExIDk1NS43OTYgMTg4LjQxMUM5NDguODAxIDE4OC40MTEgOTQyLjI4NiAxODcuMTA4IDkzNi4yNTEgMTg0LjUwMkM5''@;'; put 'put ''MzAuMjE1IDE4MS43NTkgOTI0LjkzNSAxNzguMDU2IDkyMC40MDggMTczLjM5MkM5MTYuMDE5IDE2OC43MjkgOTEyLjUyMSAxNjMuMjQyIDkwOS45MTUgMTU2LjkzMkM5MDcuNDQ2IDE1MC42MjMgOTA2LjIxMiAxNDMuODMzIDkwNi4yMTIgMTM2LjU2NFpNOTMxLjEwNyAxMzYuNTY0QzkzMS4x''@;'; put 'put ''MDcgMTQwLjQwNCA5MzEuNzI0IDE0NC4wMzkgOTMyLjk1OSAxNDcuNDY4QzkzNC4xOTMgMTUwLjc2IDkzNS45MDggMTUzLjY0MSA5MzguMTAyIDE1Ni4xMDlDOTQwLjI5NyAxNTguNTc4IDk0Mi45MDMgMTYwLjU2NyA5NDUuOTIxIDE2Mi4wNzZDOTQ4LjkzOCAxNjMuNDQ4IDk1Mi4yMyAxNjQu''@;'; put 'put ''MTM0IDk1NS43OTYgMTY0LjEzNEM5NTkuMzYzIDE2NC4xMzQgOTYyLjY1NSAxNjMuNDQ4IDk2NS42NzIgMTYyLjA3NkM5NjguODI3IDE2MC41NjcgOTcxLjUwMiAxNTguNTc4IDk3My42OTYgMTU2LjEwOUM5NzUuODkxIDE1My42NDEgOTc3LjYwNSAxNTAuNzYgOTc4Ljg0IDE0Ny40NjhDOTgw''@;'; put 'put ''LjA3NCAxNDQuMDM5IDk4MC42OTIgMTQwLjQwNCA5ODAuNjkyIDEzNi41NjRDOTgwLjY5MiAxMzIuNzIzIDk4MC4wNzQgMTI5LjE1NyA5NzguODQgMTI1Ljg2NUM5NzcuNjA1IDEyMi40MzYgOTc1Ljg5MSAxMTkuNDg3IDk3My42OTYgMTE3LjAxOEM5NzEuNTAyIDExNC41NDkgOTY4LjgyNyAx''@;'; put 'put ''MTIuNjI5IDk2NS42NzIgMTExLjI1N0M5NjIuNjU1IDEwOS43NDggOTU5LjM2MyAxMDguOTk0IDk1NS43OTYgMTA4Ljk5NEM5NTIuMjMgMTA4Ljk5NCA5NDguOTM4IDEwOS43NDggOTQ1LjkyMSAxMTEuMjU3Qzk0Mi45MDMgMTEyLjYyOSA5NDAuMjk3IDExNC41NDkgOTM4LjEwMiAxMTcuMDE4''@;'; put 'put ''QzkzNS45MDggMTE5LjQ4NyA5MzQuMTkzIDEyMi40MzYgOTMyLjk1OSAxMjUuODY1QzkzMS43MjQgMTI5LjE1NyA5MzEuMTA3IDEzMi43MjMgOTMxLjEwNyAxMzYuNTY0Wk0xMDUwLjkgMTg0LjA5MUMxMDUwLjkgMTg2LjY5NyAxMDQ5LjU5IDE4OCAxMDQ2Ljk5IDE4OEgxMDMwLjk0QzEwMjku''@;'; put 'put ''ODQgMTg4IDEwMjguODggMTg3LjY1NyAxMDI4LjA2IDE4Ni45NzFDMTAyNy4zNyAxODYuMTQ4IDEwMjcuMDMgMTg1LjE4OCAxMDI3LjAzIDE4NC4wOTFWODkuMDM2NUMxMDI3LjAzIDg3LjkzOTEgMTAyNy4zNyA4Ny4wNDc2IDEwMjguMDYgODYuMzYxOEMxMDI4Ljg4IDg1LjUzODggMTAyOS44''@;'; put 'put ''NCA4NS4xMjczIDEwMzAuOTQgODUuMTI3M0gxMDQ2Ljk5QzEwNDkuNTkgODUuMTI3MyAxMDUwLjkgODYuNDMwMyAxMDUwLjkgODkuMDM2NVY5Ni42NDlDMTA1NC44OCA5My4zNTcxIDEwNTkuNDcgOTAuNTQ1MyAxMDY0LjY4IDg4LjIxMzVDMTA2OS44OSA4NS44ODE3IDEwNzUuMDQgODQuNzE1''@;'; put 'put ''OCAxMDgwLjExIDg0LjcxNThDMTA4NC45MSA4NC43MTU4IDEwODkuMzcgODUuNjA3NCAxMDkzLjQ5IDg3LjM5MDVDMTA5Ny42IDg5LjAzNjUgMTEwMS4xIDkxLjQzNjggMTEwMy45OCA5NC41OTE2QzExMDcgOTcuNjA5MiAxMTA5LjMzIDEwMS4xNzUgMTExMC45OCAxMDUuMjlDMTExMi42MiAx''@;'; put 'put ''MDkuNDA1IDExMTMuNDQgMTEzLjkzMiAxMTEzLjQ0IDExOC44N1YxODQuMDkxQzExMTMuNDQgMTg2LjY5NyAxMTEyLjE0IDE4OCAxMTA5LjUzIDE4OEgxMDkzLjQ5QzEwOTIuMzkgMTg4IDEwOTEuNDMgMTg3LjY1NyAxMDkwLjYxIDE4Ni45NzFDMTA4OS45MiAxODYuMTQ4IDEwODkuNTggMTg1''@;'; put 'put ''LjE4OCAxMDg5LjU4IDE4NC4wOTFWMTI2LjY4OEMxMDg5LjU4IDEyMS4wNjQgMTA4OC4yNyAxMTYuNzQ0IDEwODUuNjcgMTEzLjcyNkMxMDgzLjA2IDExMC41NzEgMTA3OS4zNiAxMDguOTk0IDEwNzQuNTYgMTA4Ljk5NEMxMDcxLjU0IDEwOC45OTQgMTA2OC41OSAxMDkuNjExIDEwNjUuNzEg''@;'; put 'put ''MTEwLjg0NUMxMDYyLjk3IDExMS45NDMgMTA2MC41IDExMy41MiAxMDU4LjMgMTE1LjU3OEMxMDU2LjI1IDExNy40OTggMTA1NC41MyAxMTkuODMgMTA1My4xNiAxMjIuNTczQzEwNTEuOTMgMTI1LjMxNiAxMDUxLjMxIDEyOC4xOTcgMTA1MS4zMSAxMzEuMjE0TDEwNTAuOSAxODQuMDkxWk0x''@;'; put 'put ''MTI3Ljg3IDg5LjAzNjVDMTEyNy44NyA4Ny45MzkxIDExMjguMjEgODcuMDQ3NiAxMTI4LjkgODYuMzYxOEMxMTI5LjU4IDg1LjUzODggMTEzMC40OCA4NS4xMjczIDExMzEuNTcgODUuMTI3M0gxMTQ2LjhWNTguMTc0NkMxMTQ2LjggNTcuMDc3MyAxMTQ3LjE0IDU2LjE4NTggMTE0Ny44MyA1''@;'; put 'put ''NS40OTk5QzExNDguNjUgNTQuNjc3IDExNDkuNjEgNTQuMjY1NSAxMTUwLjcxIDU0LjI2NTVIMTE2Ni43NkMxMTY5LjM2IDU0LjI2NTUgMTE3MC42NyA1NS41Njg1IDExNzAuNjcgNTguMTc0NlY4NS4xMjczSDExODguNzdDMTE4OS44NyA4NS4xMjczIDExOTAuNzYgODUuNTM4OCAxMTkxLjQ1''@;'; put 'put ''IDg2LjM2MThDMTE5Mi4xMyA4Ny4wNDc2IDExOTIuNDcgODcuOTM5MSAxMTkyLjQ3IDg5LjAzNjVWMTA0LjI2MkMxMTkyLjQ3IDEwNS4zNTkgMTE5Mi4xMyAxMDYuMjUgMTE5MS40NSAxMDYuOTM2QzExOTAuNzYgMTA3LjYyMiAxMTg5Ljg3IDEwNy45NjUgMTE4OC43NyAxMDcuOTY1SDExNzAu''@;'; put 'put ''NjdWMTg0LjA5MUMxMTcwLjY3IDE4Ni42OTcgMTE2OS4zNiAxODggMTE2Ni43NiAxODhIMTE1MC43MUMxMTQ5LjYxIDE4OCAxMTQ4LjY1IDE4Ny42NTcgMTE0Ny44MyAxODYuOTcxQzExNDcuMTQgMTg2LjE0OCAxMTQ2LjggMTg1LjE4OCAxMTQ2LjggMTg0LjA5MVYxMDcuOTY1SDExMzEuNTdD''@;'; put 'put ''MTEzMC40OCAxMDcuOTY1IDExMjkuNTggMTA3LjYyMiAxMTI4LjkgMTA2LjkzNkMxMTI4LjIxIDEwNi4yNSAxMTI3Ljg3IDEwNS4zNTkgMTEyNy44NyAxMDQuMjYyVjg5LjAzNjVaTTEyNzMuMjggMTA4LjE3MUMxMjcyLjg3IDEwOS4yNjggMTI3Mi4xOCAxMTAuMDIyIDEyNzEuMjIgMTEwLjQz''@;'; put 'put ''NEMxMjcwLjI2IDExMC44NDUgMTI2OS4yMyAxMTAuNzc3IDEyNjguMTQgMTEwLjIyOEMxMjY3LjA0IDEwOS42OCAxMjY1LjY3IDEwOS4yIDEyNjQuMDIgMTA4Ljc4OEMxMjYyLjUxIDEwOC4zNzcgMTI2MC44NyAxMDguMTcxIDEyNTkuMDggMTA4LjE3MUMxMjU2LjA3IDEwOC4xNzEgMTI1My4x''@;'; put 'put ''OSAxMDguNzg4IDEyNTAuNDQgMTEwLjAyMkMxMjQ3LjcgMTExLjI1NyAxMjQ1LjIzIDExMi45NzIgMTI0My4wNCAxMTUuMTY2QzEyNDAuOTggMTE3LjIyNCAxMjM5LjMzIDExOS42OTMgMTIzOC4xIDEyMi41NzNDMTIzNi44NiAxMjUuMzE2IDEyMzYuMjUgMTI4LjE5NyAxMjM2LjI1IDEzMS4y''@;'; put 'put ''MTRMMTIzNS44NCAxODQuMDkxQzEyMzUuODQgMTg1LjE4OCAxMjM1LjQ5IDE4Ni4xNDggMTIzNC44MSAxODYuOTcxQzEyMzQuMTIgMTg3LjY1NyAxMjMzLjIzIDE4OCAxMjMyLjEzIDE4OEgxMjE1Ljg4QzEyMTQuNzggMTg4IDEyMTMuODIgMTg3LjY1NyAxMjEzIDE4Ni45NzFDMTIxMi4zMSAx''@;'; put 'put ''ODYuMTQ4IDEyMTEuOTcgMTg1LjE4OCAxMjExLjk3IDE4NC4wOTFWODkuMDM2NUMxMjExLjk3IDg3LjkzOTEgMTIxMi4zMSA4Ny4wNDc2IDEyMTMgODYuMzYxOEMxMjEzLjgyIDg1LjUzODggMTIxNC43OCA4NS4xMjczIDEyMTUuODggODUuMTI3M0gxMjMyLjEzQzEyMzMuMjMgODUuMTI3MyAx''@;'; put 'put ''MjM0LjEyIDg1LjUzODggMTIzNC44MSA4Ni4zNjE4QzEyMzUuNDkgODcuMDQ3NiAxMjM1Ljg0IDg3LjkzOTEgMTIzNS44NCA4OS4wMzY1Vjk0LjU5MTZDMTIzOS44MSA5MS43MTExIDEyNDQuMDcgODkuMzc5NCAxMjQ4LjU5IDg3LjU5NjJDMTI1My4xMiA4NS42NzU5IDEyNTcuOTkgODQuNzE1''@;'; put 'put ''OCAxMjYzLjIgODQuNzE1OEMxMjY4LjU1IDg0LjcxNTggMTI3My4yMSA4NS43NDQ1IDEyNzcuMTkgODcuODAyQzEyNzkuMTEgODkuMDM2NSAxMjc5LjczIDkwLjYxMzggMTI3OS4wNCA5Mi41MzQxTDEyNzMuMjggMTA4LjE3MVpNMTI4NS4zMyAxMzYuNTY0QzEyODUuMzMgMTI5LjI5NCAxMjg2''@;'; put 'put ''LjYzIDEyMi41MDQgMTI4OS4yNCAxMTYuMTk1QzEyOTEuODUgMTA5Ljg4NSAxMjk1LjM0IDEwNC4zOTkgMTI5OS43MyA5OS43MzUyQzEzMDQuMjYgOTUuMDcxNyAxMzA5LjU0IDkxLjQzNjggMTMxNS41NyA4OC44MzA3QzEzMjEuNjEgODYuMDg3NCAxMzI4LjEyIDg0LjcxNTggMTMzNS4xMiA4''@;'; put 'put ''NC43MTU4QzEzNDIuMTIgODQuNzE1OCAxMzQ4LjU2IDg2LjA4NzQgMTM1NC40NiA4OC44MzA3QzEzNjAuNSA5MS40MzY4IDEzNjUuNzEgOTUuMDcxNyAxMzcwLjEgOTkuNzM1MkMxMzc0LjYyIDEwNC4zOTkgMTM3OC4xMiAxMDkuODg1IDEzODAuNTkgMTE2LjE5NUMxMzgzLjIgMTIyLjUwNCAx''@;'; put 'put ''Mzg0LjUgMTI5LjI5NCAxMzg0LjUgMTM2LjU2NEMxMzg0LjUgMTQzLjgzMyAxMzgzLjIgMTUwLjYyMyAxMzgwLjU5IDE1Ni45MzJDMTM3OC4xMiAxNjMuMjQyIDEzNzQuNjIgMTY4LjcyOSAxMzcwLjEgMTczLjM5MkMxMzY1LjcxIDE3OC4wNTYgMTM2MC41IDE4MS43NTkgMTM1NC40NiAxODQu''@;'; put 'put ''NTAyQzEzNDguNDMgMTg3LjEwOCAxMzQxLjkxIDE4OC40MTEgMTMzNC45MSAxODguNDExQzEzMjcuOTIgMTg4LjQxMSAxMzIxLjQgMTg3LjEwOCAxMzE1LjM3IDE4NC41MDJDMTMwOS4zMyAxODEuNzU5IDEzMDQuMDUgMTc4LjA1NiAxMjk5LjUzIDE3My4zOTJDMTI5NS4xNCAxNjguNzI5IDEy''@;'; put 'put ''OTEuNjQgMTYzLjI0MiAxMjg5LjAzIDE1Ni45MzJDMTI4Ni41NiAxNTAuNjIzIDEyODUuMzMgMTQzLjgzMyAxMjg1LjMzIDEzNi41NjRaTTEzMTAuMjMgMTM2LjU2NEMxMzEwLjIzIDE0MC40MDQgMTMxMC44NCAxNDQuMDM5IDEzMTIuMDggMTQ3LjQ2OEMxMzEzLjMxIDE1MC43NiAxMzE1LjAz''@;'; put 'put ''IDE1My42NDEgMTMxNy4yMiAxNTYuMTA5QzEzMTkuNDIgMTU4LjU3OCAxMzIyLjAyIDE2MC41NjcgMTMyNS4wNCAxNjIuMDc2QzEzMjguMDYgMTYzLjQ0OCAxMzMxLjM1IDE2NC4xMzQgMTMzNC45MSAxNjQuMTM0QzEzMzguNDggMTY0LjEzNCAxMzQxLjc3IDE2My40NDggMTM0NC43OSAxNjIu''@;'; put 'put ''MDc2QzEzNDcuOTUgMTYwLjU2NyAxMzUwLjYyIDE1OC41NzggMTM1Mi44MSAxNTYuMTA5QzEzNTUuMDEgMTUzLjY0MSAxMzU2LjcyIDE1MC43NiAxMzU3Ljk2IDE0Ny40NjhDMTM1OS4xOSAxNDQuMDM5IDEzNTkuODEgMTQwLjQwNCAxMzU5LjgxIDEzNi41NjRDMTM1OS44MSAxMzIuNzIzIDEz''@;'; put 'put ''NTkuMTkgMTI5LjE1NyAxMzU3Ljk2IDEyNS44NjVDMTM1Ni43MiAxMjIuNDM2IDEzNTUuMDEgMTE5LjQ4NyAxMzUyLjgxIDExNy4wMThDMTM1MC42MiAxMTQuNTQ5IDEzNDcuOTUgMTEyLjYyOSAxMzQ0Ljc5IDExMS4yNTdDMTM0MS43NyAxMDkuNzQ4IDEzMzguNDggMTA4Ljk5NCAxMzM0Ljkx''@;'; put 'put ''IDEwOC45OTRDMTMzMS4zNSAxMDguOTk0IDEzMjguMDYgMTA5Ljc0OCAxMzI1LjA0IDExMS4yNTdDMTMyMi4wMiAxMTIuNjI5IDEzMTkuNDIgMTE0LjU0OSAxMzE3LjIyIDExNy4wMThDMTMxNS4wMyAxMTkuNDg3IDEzMTMuMzEgMTIyLjQzNiAxMzEyLjA4IDEyNS44NjVDMTMxMC44NCAxMjku''@;'; put 'put ''MTU3IDEzMTAuMjMgMTMyLjcyMyAxMzEwLjIzIDEzNi41NjRaTTE0MDguMjEgMzcuMzk0NEMxNDA4LjIxIDM2LjI5NyAxNDA4LjU1IDM1LjQwNTUgMTQwOS4yNCAzNC43MTk3QzE0MTAuMDYgMzQuMDMzOCAxNDExLjAyIDMzLjY5MDkgMTQxMi4xMiAzMy42OTA5SDE0MjguMTZDMTQyOS4yNiAz''@;'; put 'put ''My42OTA5IDE0MzAuMTUgMzQuMDMzOCAxNDMwLjg0IDM0LjcxOTdDMTQzMS42NiAzNS40MDU1IDE0MzIuMDcgMzYuMjk3IDE0MzIuMDcgMzcuMzk0NFYxODQuMDkxQzE0MzIuMDcgMTg2LjY5NyAxNDMwLjc3IDE4OCAxNDI4LjE2IDE4OEgxNDEyLjEyQzE0MTEuMDIgMTg4IDE0MTAuMDYgMTg3''@;'; put 'put ''LjY1NyAxNDA5LjI0IDE4Ni45NzFDMTQwOC41NSAxODYuMTQ4IDE0MDguMjEgMTg1LjE4OCAxNDA4LjIxIDE4NC4wOTFWMzcuMzk0NFpNMTQ2MyAzNy4zOTQ0QzE0NjMgMzYuMjk3IDE0NjMuMzUgMzUuNDA1NSAxNDY0LjAzIDM0LjcxOTdDMTQ2NC44NSAzNC4wMzM4IDE0NjUuODEgMzMuNjkw''@;'; put 'put ''OSAxNDY2LjkxIDMzLjY5MDlIMTQ4Mi45NkMxNDg0LjA2IDMzLjY5MDkgMTQ4NC45NSAzNC4wMzM4IDE0ODUuNjMgMzQuNzE5N0MxNDg2LjQ2IDM1LjQwNTUgMTQ4Ni44NyAzNi4yOTcgMTQ4Ni44NyAzNy4zOTQ0VjE4NC4wOTFDMTQ4Ni44NyAxODYuNjk3IDE0ODUuNTcgMTg4IDE0ODIuOTYg''@;'; put 'put ''MTg4SDE0NjYuOTFDMTQ2NS44MSAxODggMTQ2NC44NSAxODcuNjU3IDE0NjQuMDMgMTg2Ljk3MUMxNDYzLjM1IDE4Ni4xNDggMTQ2MyAxODUuMTg4IDE0NjMgMTg0LjA5MVYzNy4zOTQ0Wk0xNTM3Ljc2IDE0OC4wODVDMTUzOS42OCAxNTIuODg2IDE1NDIuNTYgMTU2Ljc5NSAxNTQ2LjQgMTU5''@;'; put 'put ''LjgxM0MxNTUwLjM3IDE2Mi44MyAxNTU0LjkgMTY0LjMzOSAxNTU5Ljk4IDE2NC4zMzlDMTU2My42OCAxNjQuMzM5IDE1NjcuMjUgMTYzLjcyMiAxNTcwLjY3IDE2Mi40ODhDMTU3NC4xIDE2MS4yNTMgMTU3Ni45OCAxNTkuNTM5IDE1NzkuMzIgMTU3LjM0NEMxNTgwLjE0IDE1Ni42NTggMTU4''@;'; put 'put ''MS4wMyAxNTYuMzg0IDE1ODEuOTkgMTU2LjUyMUMxNTgzLjA5IDE1Ni41MjEgMTU4My45OCAxNTYuODY0IDE1ODQuNjcgMTU3LjU1TDE1OTYuMzkgMTY4LjY2QzE1OTcuMDggMTY5LjM0NiAxNTk3LjQyIDE3MC4yMzcgMTU5Ny40MiAxNzEuMzM1QzE1OTcuNDIgMTcyLjI5NSAxNTk3LjA4IDE3''@;'; put 'put ''My4xMTggMTU5Ni4zOSAxNzMuODA0QzE1OTEuODcgMTc4LjYwNCAxNTg2LjUyIDE4Mi4yMzkgMTU4MC4zNCAxODQuNzA4QzE1NzQuMTcgMTg3LjE3NyAxNTY3LjM4IDE4OC40MTEgMTU1OS45OCAxODguNDExQzE1NTMuMTIgMTg4LjQxMSAxNTQ2Ljc0IDE4Ny4xNzcgMTU0MC44NCAxODQuNzA4''@;'; put 'put ''QzE1MzUuMDggMTgyLjIzOSAxNTMwLjAxIDE3OC43NDEgMTUyNS42MiAxNzQuMjE1QzE1MjAuODIgMTY5LjQxNCAxNTE3LjExIDE2My43MjIgMTUxNC41MSAxNTcuMTM4QzE1MTEuOSAxNTAuNTU0IDE1MTAuNiAxNDMuNTU5IDE1MTAuNiAxMzYuMTUyQzE1MTAuNiAxMjkuMDIgMTUxMS45IDEy''@;'; put 'put ''Mi4zNjcgMTUxNC41MSAxMTYuMTk1QzE1MTcuMTEgMTA5Ljg4NSAxNTIwLjYxIDEwNC4zOTkgMTUyNSA5OS43MzUyQzE1MjkuNTMgOTUuMDcxNyAxNTM0LjgxIDkxLjQzNjggMTU0MC44NCA4OC44MzA3QzE1NDYuODggODYuMDg3NCAxNTUzLjMyIDg0LjcxNTggMTU2MC4xOCA4NC43MTU4QzE1''@;'; put 'put ''NjYuNDkgODQuNzE1OCAxNTcyLjMyIDg1Ljg4MTcgMTU3Ny42NyA4OC4yMTM1QzE1ODMuMTYgOTAuNTQ1MyAxNTg3Ljk2IDkzLjc2ODYgMTU5Mi4wNyA5Ny44ODM1QzE1OTMuODYgOTkuNTI5NSAxNTk1LjU3IDEwMS40NSAxNTk3LjIyIDEwMy42NDRDMTU5OC44NiAxMDUuODM5IDE2MDAuMyAx''@;'; put 'put ''MDguMzc3IDE2MDEuNTQgMTExLjI1N0MxNjAyLjc3IDExNC4xMzcgMTYwMy43MyAxMTcuNDk4IDE2MDQuNDIgMTIxLjMzOEMxNjA1LjI0IDEyNS4wNDIgMTYwNS42NSAxMjkuMjk0IDE2MDUuNjUgMTM0LjA5NUMxNjA1LjY1IDEzNy4zODcgMTYwNS40NSAxNDAuOTUzIDE2MDUuMDMgMTQ0Ljc5''@;'; put 'put ''M0MxNjA0Ljc2IDE0Ni45ODggMTYwMy41MyAxNDguMDg1IDE2MDEuMzMgMTQ4LjA4NUgxNTM3Ljc2Wk0xNTU5LjU2IDEwOC43ODhDMTU1My44IDEwOC43ODggMTU0OS4wNyAxMTAuMzY1IDE1NDUuMzcgMTEzLjUyQzE1NDEuNjYgMTE2LjY3NSAxNTM5LjA2IDEyMC41ODQgMTUzNy41NSAxMjUu''@;'; put 'put ''MjQ4SDE1ODAuNzZDMTU3OS4yNSAxMjAuODU4IDE1NzYuNzEgMTE3LjAxOCAxNTczLjE0IDExMy43MjZDMTU2OS43MSAxMTAuNDM0IDE1NjUuMTkgMTA4Ljc4OCAxNTU5LjU2IDEwOC43ODhaTTE2ODguNTEgMTA4LjE3MUMxNjg4LjEgMTA5LjI2OCAxNjg3LjQxIDExMC4wMjIgMTY4Ni40NSAx''@;'; put 'put ''MTAuNDM0QzE2ODUuNDkgMTEwLjg0NSAxNjg0LjQ2IDExMC43NzcgMTY4My4zNyAxMTAuMjI4QzE2ODIuMjcgMTA5LjY4IDE2ODAuOSAxMDkuMiAxNjc5LjI1IDEwOC43ODhDMTY3Ny43NCAxMDguMzc3IDE2NzYuMSAxMDguMTcxIDE2NzQuMzEgMTA4LjE3MUMxNjcxLjI5IDEwOC4xNzEgMTY2''@;'; put 'put ''OC40MSAxMDguNzg4IDE2NjUuNjcgMTEwLjAyMkMxNjYyLjkzIDExMS4yNTcgMTY2MC40NiAxMTIuOTcyIDE2NTguMjYgMTE1LjE2NkMxNjU2LjIxIDExNy4yMjQgMTY1NC41NiAxMTkuNjkzIDE2NTMuMzMgMTIyLjU3M0MxNjUyLjA5IDEyNS4zMTYgMTY1MS40NyAxMjguMTk3IDE2NTEuNDcg''@;'; put 'put ''MTMxLjIxNEwxNjUxLjA2IDE4NC4wOTFDMTY1MS4wNiAxODUuMTg4IDE2NTAuNzIgMTg2LjE0OCAxNjUwLjAzIDE4Ni45NzFDMTY0OS4zNSAxODcuNjU3IDE2NDguNDYgMTg4IDE2NDcuMzYgMTg4SDE2MzEuMTFDMTYzMC4wMSAxODggMTYyOS4wNSAxODcuNjU3IDE2MjguMjMgMTg2Ljk3MUMx''@;'; put 'put ''NjI3LjU0IDE4Ni4xNDggMTYyNy4yIDE4NS4xODggMTYyNy4yIDE4NC4wOTFWODkuMDM2NUMxNjI3LjIgODcuOTM5MSAxNjI3LjU0IDg3LjA0NzYgMTYyOC4yMyA4Ni4zNjE4QzE2MjkuMDUgODUuNTM4OCAxNjMwLjAxIDg1LjEyNzMgMTYzMS4xMSA4NS4xMjczSDE2NDcuMzZDMTY0OC40NiA4''@;'; put 'put ''NS4xMjczIDE2NDkuMzUgODUuNTM4OCAxNjUwLjAzIDg2LjM2MThDMTY1MC43MiA4Ny4wNDc2IDE2NTEuMDYgODcuOTM5MSAxNjUxLjA2IDg5LjAzNjVWOTQuNTkxNkMxNjU1LjA0IDkxLjcxMTEgMTY1OS4yOSA4OS4zNzk0IDE2NjMuODIgODcuNTk2MkMxNjY4LjM1IDg1LjY3NTkgMTY3My4y''@;'; put 'put ''MiA4NC43MTU4IDE2NzguNDMgODQuNzE1OEMxNjgzLjc4IDg0LjcxNTggMTY4OC40NCA4NS43NDQ1IDE2OTIuNDIgODcuODAyQzE2OTQuMzQgODkuMDM2NSAxNjk0Ljk2IDkwLjYxMzggMTY5NC4yNyA5Mi41MzQxTDE2ODguNTEgMTA4LjE3MVoiIGZpbGw9IiM4RUM2M0YiLz4KPC9nPgo8ZGVm''@;'; put 'put ''cz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMDVfNyI+CjxyZWN0IHdpZHRoPSIxNjg5IiBoZWlnaHQ9IjI0MCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=dc-logo-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0iNzAiIGhlaWdodD0iNzAiIHZpZXdCb3g9IjAgMCA3MCA3MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEwMV84KSI+CjxwYXRoIGQ9Ik0zNy41OTkzIDE2LjYyMTJDMzguNTkxNiAx''@;'; put 'put ''Ni43NDE1IDM5LjU1MzggMTYuODMxNyA0MC41NDYxIDE2Ljk1MTlDNDIuOTIxNiAxNy4yODI3IDQ1LjIzNyAxNy43MzM3IDQ3LjQwMiAxOC44NDYzQzQ4LjAzMzQgMTkuMTc3MSA0OC42MzQ4IDE5LjUzNzkgNDkuMDg1OSAyMC4xMDkyQzQ5LjgwNzUgMjAuOTUxMiA0OS43Nzc0IDIxLjg1MzMg''@;'; put 'put ''NDkuMDU1OCAyMi42OTUyQzQ4LjMwNCAyMy41MzcxIDQ3LjM0MTggMjQuMDE4MyA0Ni4zMTk1IDI0LjQwOTJDNDMuOTQ0IDI1LjM0MTMgNDEuNDQ4MiAyNS43NjIzIDM4LjkyMjQgMjUuOTcyOEMzNC44MDI5IDI2LjMwMzUgMzAuNzQzNSAyNi4xNTMyIDI2LjcxNDIgMjUuMTkxQzI1LjM5MTEg''@;'; put 'put ''MjQuODkwMyAyNC4wOTgxIDI0LjQ2OTMgMjIuOTI1NCAyMy44MDc4QzIyLjQ3NDQgMjMuNTY3MiAyMi4wNTM0IDIzLjI2NjUgMjEuNjYyNSAyMi45MDU3QzIwLjU4IDIxLjg1MzMgMjAuNTggMjAuNzQwNyAyMS42OTI2IDE5Ljc0ODRDMjIuODk1NCAxOC42NjU5IDI0LjM2ODggMTguMTU0NyAy''@;'; put 'put ''NS44NzIyIDE3LjczMzdDMjcuOTc3MSAxNy4xMzI0IDMwLjExMiAxNi44MzE3IDMyLjI3NyAxNi42ODEzQzMyLjQ1NzUgMTYuNjgxMyAzMi42Njc5IDE2Ljc0MTUgMzIuODE4MyAxNi41OTExQzM0LjM4MTkgMTYuNjIxMiAzNi4wMDU2IDE2LjYyMTIgMzcuNTk5MyAxNi42MjEyWiIgZmlsbD0i''@;'; put 'put ''I0UwRTBFMCIvPgo8cGF0aCBkPSJNMjAuODUwNyA0MS4zMDgyQzIyLjc3NTEgNDMuNzczOCAyNS41MTE1IDQ0LjY3NTkgMjguMzM4IDQ1LjI3NzNDMzMuOTMwOSA0Ni40ODAxIDM5LjUyMzggNDYuMzI5NyA0NC45NjYzIDQ0LjQwNTNDNDYuNjUwMiA0My44MDM5IDQ4LjIxMzggNDIuOTkyIDQ5''@;'; put 'put ''LjMyNjQgNDEuNDg4NkM0OS41MDY4IDQxLjI0OCA0OS41OTcgNDEuMzY4MyA0OS42ODcyIDQxLjU0ODdDNDkuODY3NyA0MS45Mzk2IDQ5Ljk1NzkgNDIuMzMwNSA0OS45NTc5IDQyLjc1MTVDNDkuOTU3OSA0NC4yMjQ5IDQ5Ljk1NzkgNDUuNzI4NCA0OS45NTc5IDQ3LjIwMThDNDkuOTU3OSA0''@;'; put 'put ''OC4xNjQgNDkuNTA2OCA0OC45MTU3IDQ4Ljg0NTMgNDkuNTc3MkM0Ny40NjIxIDUwLjk2MDQgNDUuNzE4MSA1MS43MTIyIDQzLjg4MzggNTIuMjgzNUM0MC4xODUzIDUzLjQyNjEgMzYuMzk2NiA1My42NjY3IDMyLjU3NzcgNTMuMzk2MUMyOS43MjEyIDUzLjE4NTYgMjYuOTU0OCA1Mi42NDQz''@;'; put 'put ''IDI0LjMzODcgNTEuNDcxNkMyMy4yMjYxIDUwLjk2MDQgMjIuMjAzOCA1MC4zNTkxIDIxLjM5MTkgNDkuNDI2OUMyMC43NjA1IDQ4LjcwNTIgMjAuNDI5NyA0Ny44OTM0IDIwLjQyOTcgNDYuOTMxMUMyMC40NTk4IDQ1LjU3OCAyMC40Mjk3IDQ0LjIyNDkgMjAuNDI5NyA0Mi44NzE4QzIwLjQy''@;'; put 'put ''OTcgNDIuMzMwNSAyMC41MTk5IDQxLjgxOTMgMjAuODUwNyA0MS4zMDgyWiIgZmlsbD0iIzhFQzYzRiIvPgo8cGF0aCBkPSJNMjAuODgwNyAzMi4wMTY3QzIyLjQ3NDQgMzQuMTUxNiAyNC42OTk2IDM1LjA1MzcgMjcuMDc1IDM1LjY4NTJDMzIuNzU4MiAzNy4xODg2IDM4LjQ0MTMgMzcuMTU4''@;'; put 'put ''NiA0NC4wNjQzIDM1LjQ3NDdDNDUuOTI4NiAzNC45MzM0IDQ3LjY3MjYgMzQuMTIxNiA0OS4wMjU4IDMyLjY0ODJDNDkuMjA2MiAzMi40Njc3IDQ5LjMyNjUgMzIuMDQ2OCA0OS41MzY5IDMyLjEwNjlDNDkuODM3NiAzMi4xOTcxIDQ5LjgzNzYgMzIuNjE4MSA0OS45Mjc4IDMyLjk0ODhDNTAu''@;'; put 'put ''MDQ4MSAzMy40NiA0OS45ODggMzMuOTcxMiA0OS45ODggMzQuNDgyNEM0OS45ODggMzUuNTA0NyA0OS45NTc5IDM2LjQ5NyA0OS45ODggMzcuNTE5NEM1MC4wNDgxIDM4Ljc4MjMgNDkuNTM2OSAzOS43NzQ2IDQ4LjYwNDggNDAuNTg2NUM0Ny4xOTE1IDQxLjg0OTQgNDUuNDc3NiA0Mi42MDEx''@;'; put 'put ''IDQzLjY0MzMgNDMuMDgyMkMzNy40NzkxIDQ0LjczNjEgMzEuMzQ0OSA0NC43MDYgMjUuMzAwOSA0Mi42MDExQzIzLjgyNzUgNDIuMDkgMjIuNDc0NCA0MS4zNjgzIDIxLjM5MTkgNDAuMTk1NkMyMC43MzA0IDM5LjQ3MzkgMjAuMzk5NyAzOC42MzIgMjAuMzk5NyAzNy42Mzk3QzIwLjQyOTcg''@;'; put 'put ''MzYuMzE2NiAyMC4zOTk3IDM0Ljk2MzUgMjAuMzk5NyAzMy42NDA0QzIwLjQyOTcgMzMuMDk5MiAyMC41MTk5IDMyLjU1NzkgMjAuODgwNyAzMi4wMTY3WiIgZmlsbD0iI0UwRTBFMCIvPgo8cGF0aCBkPSJNMjAuODIwNyAyMy4wODYxQzIxLjI3MTcgMjQuNDA5MSAyMi4zNTQyIDI1LjAxMDUg''@;'; put 'put ''MjMuNDk2OSAyNS41NTE3QzI1LjU0MTYgMjYuNTE0IDI3LjczNjYgMjYuOTY1IDI5LjkzMTcgMjcuMjM1N0MzNC4yOTE4IDI3Ljc3NjkgMzguNjUxOSAyNy43MTY4IDQyLjk1MTggMjYuODE0N0M0NC42OTU4IDI2LjQ1MzkgNDYuMzc5NyAyNS45NzI3IDQ3LjkxMzIgMjUuMDEwNUM0OC43ODUz''@;'; put 'put ''IDI0LjQ2OTMgNDkuMjM2MyAyMy45NTgxIDQ5LjUzNyAyMy4xMTYxQzQ5LjgzNzcgMjMuNTM3MSA0OS45Mjc5IDIzLjk4ODIgNDkuOTI3OSAyNC40MzkyQzQ5LjkyNzkgMjUuOTQyNyA0OS45NTggMjcuNDE2MSA0OS45Mjc5IDI4LjkxOTVDNDkuODk3OCAzMC4xODI1IDQ5LjE3NjIgMzEuMDg0''@;'; put 'put ''NSA0OC4yNDQgMzEuODM2M0M0Ni41IDMzLjIxOTUgNDQuNDU1MyAzMy45NDExIDQyLjMyMDMgMzQuNDIyM0MzNi42NjczIDM1LjY1NTEgMzEuMDc0NCAzNS41NjQ5IDI1LjU3MTcgMzMuNzAwNkMyNC4xMjgzIDMzLjIxOTUgMjIuNzQ1MSAzMi41Mjc5IDIxLjYzMjYgMzEuNDQ1NEMyMC43OTA2''@;'; put 'put ''IDMwLjYzMzUgMjAuMzM5NiAyOS43MDE0IDIwLjM2OTYgMjguNDk4NkMyMC4zOTk3IDI3LjIwNTYgMjAuMzY5NiAyNS45MTI2IDIwLjM2OTYgMjQuNjE5NkMyMC40Mjk4IDI0LjA0ODMgMjAuNTIgMjMuNTY3MiAyMC44MjA3IDIzLjA4NjFaIiBmaWxsPSIjOEVDNjNGIi8+CjxwYXRoIGQ9Ik01''@;'; put 'put ''NS4zNDAzIDYzLjQzOTNDNjAuMjQxNyA2My43MDk5IDYyLjg1NzcgNTcuNjk2IDU5LjMwOTUgNTQuMjk4MUM1NS41ODA5IDUwLjcxOTkgNDkuNDQ2NyA1NC4wNTc2IDUwLjQwOSA1OS4xMDkzQzI4LjI0NzggNzMuMjQxOSAtMC4yNTgwMzQgNTIuMTAzMSA3Ljg2MDcxIDI2LjQyMzhMMi4zODgw''@;'; put 'put ''OCAyMi43NTUzQy05LjkxMDMzIDU1LjQ0MDggMjcuOTQ3MSA4My4wNzQ2IDU1LjM0MDMgNjMuNDM5M1pNNTMuNzc2NyA1Ni4zNzI5QzU2LjA2MiA1My45OTc0IDU5LjcwMDQgNTcuMzA1MSA1Ny41NjU1IDU5LjgwMDlDNTUuMzEwMyA2Mi40MTY5IDUxLjM0MTEgNTguODk4OCA1My43NzY3IDU2''@;'; put 'put ''LjM3MjlaIiBmaWxsPSIjRTBFMEUwIi8+CjxwYXRoIGQ9Ik0xMC42MjcyIDE1LjI2ODFDMTQuMTQ1MyAxOC42MzU4IDE5Ljk0ODcgMTUuODY5NCAxOS42MTc5IDExLjA1ODNDNDEuNzQ5IC0zLjE5NDYxIDcwLjQwNTIgMTcuOTE0MiA2Mi4yODY1IDQzLjY4MzZMNjcuNzU5MSA0Ny4zNTIxQzc5''@;'; put 'put ''LjY5NjcgMTUuNTk4OCA0My40NjMgLTEyLjk5NzIgMTUuNDM4MyA2LjIxNzE1QzEwLjE3NjEgNS4xMzQ2NSA2Ljc3ODI3IDExLjU2OTUgMTAuNjI3MiAxNS4yNjgxWk0xNi4xNTk5IDEzLjE5MzNDMTMuODE0NSAxNS42Mjg5IDEwLjExNiAxMi4wODA3IDEyLjQ2MTQgOS42NDUwN0MxNC44MDY4''@;'; put 'put ''IDcuMjA5NDQgMTguNTA1NCAxMC43NTc2IDE2LjE1OTkgMTMuMTkzM1oiIGZpbGw9IiM4RUM2M0YiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMDFfOCI+CjxyZWN0IHdpZHRoPSI3MCIgaGVpZ2h0PSI3MCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8''@;'; put 'put ''L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=favicon-ico; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''iVBORw0KGgoAAAANSUhEUgAAApgAAAJ6CAYAAACMvTJAAAAMFGlDQ1BJQ0MgUHJvZmlsZQAASImVVwdUk8kWnr+kEBJaIAJSQm+CFOnSe0c62AhJgFAiJAQVO7Ko4FpQEQFR0RUQRdcCyKIidmUR7P1hQWVlXSzYUHmTArq+dt49Z/75cufeO9+d3JkzA4CiNSsnJwtVAiCbnyeICvBmJiQmMUmP''@;'; put 'put ''AAY0AB0YAiUWW5jjFRkZCqCM9X+XdzcAIu6vWopj/ev4fxVlDlfIBgCJhDiFI2RnQ3wYAFydnSPIA4DQBfUGc/NyxHgIYlUBJAgAERfjNClWF+MUKZ4ksYmJ8oHYEwAylcUSpAGgIObNzGenwTgKYo7WfA6PD3E1xO7sdBYH4nsQT8rOngOxIhli05Tv4qT9LWbKeEwWK20cS3ORCNmXJ8zJYs3/''@;'; put 'put ''P5fjf0t2lmhsDn3YqOmCwChxznDd6jPnhIgxFeJ2fkp4BMQqEJ/ncST2YnwnXRQYK7MfZAt94JoBBgAo4LB8QyDWgpghyoz1kmFblkDiC+3RcF5eUIwMpwjmRMnio/n8rPBQWZyV6dygMVzDFfpFj9mk8vyDIIaVhh4uSI+Jl/JET+fz4sIhVoC4R5gZHSLzfVCQ7hM+ZiMQRYk5G0L8NlXgHyW1''@;'; put 'put ''wdSzhWN5YVZslmQuWAuYZ156TKDUF0vgChNCxzhwuL5+Ug4Yh8uPlXHDYHV5R8l8i3OyImX2WA03KyBKus7YAWF+9JjvlTxYYNJ1wB5lsIIjZXO9y8mLjJFyw1EQCnyAL2ACEWwpYA7IALzuwZZB+Es64g9YQADSABdYyjRjHvGSET78RoMC8CdEXCAc9/OWjHJBPtR/GddKv5YgVTKaL/HIBE8h''@;'; put 'put ''zsY1cXfcFQ+FX0/YbHEn3HnMj6k4NivRj+hLDCT6E83GebAh6yzYBID3b3QhsOfC7MRc+GM5fItHeEroJTwiXCf0EW6DOPBEEkVmNZtXKPiBOROEgT4YzV+WXcr32eHGkLU97o27Qf6QO87ANYElPgVm4oV7wNzsofZ7hqJxbt/W8sf5xKy/z0emVzBXsJexSBn/Z3zGrX6M4vPdGnFgH/KjJbYS''@;'; put 'put ''O4Sdw05iF7B2rAUwsRNYK9aFHRPj8Up4IqmEsdmiJNwyYRzemI11o/WA9ecf5mbJ5hevlzCPOy9PvBl85uTMF/DS0vOYXvA05jKD+GyrSUxbaxsnAMRnu/ToeMOQnNkI4+I3XW4HAM4lUJn2TccyAODoUwDo777pDF7Dcl8HwLEetkiQL9WJj2NAABSgCHeFBtABBsAU5mMLHIAr8AR+IBhEgBiQ''@;'; put 'put ''CGbBFU8H2ZDzXLAQLAPFoBSsA5tAJdgGdoJ6sA8cBC2gHZwEZ8El0AOug7uwLvrBCzAE3oERBEFICA2hIxqILmKEWCC2iBPijvghoUgUkogkI2kIHxEhC5HlSClShlQiO5AG5FfkKHISuYD0IreRh8gA8hr5hGIoFVVFtVFjdDLqhHqhIWgMOhNNQ3PRArQIXYNWoLXoXrQZPYleQq+jfegLdBgD''@;'; put 'put ''mDzGwPQwS8wJ88EisCQsFRNgi7ESrByrxZqwNvg/X8X6sEHsI07E6TgTt4S1GYjH4mw8F1+Mr8Yr8Xq8GT+NX8Uf4kP4VwKNoEWwILgQgggJhDTCXEIxoZywm3CEcAbum37COyKRyCCaEB3hvkwkZhAXEFcTtxL3EzuIvcTHxGESiaRBsiC5kSJILFIeqZi0hbSXdIJ0hdRP+kCWJ+uSbcn+5CQy''@;'; put 'put ''n1xILifvIR8nXyE/I4/IKckZybnIRchx5ObLrZXbJdcmd1muX26EokwxobhRYigZlGWUCkoT5QzlHuWNvLy8vryz/DR5nvxS+Qr5A/Ln5R/Kf6SqUM2pPtQZVBF1DbWO2kG9TX1Do9GMaZ60JFoebQ2tgXaK9oD2QYGuYKUQpMBRWKJQpdCscEXhpaKcopGil+IsxQLFcsVDipcVB5XklIyVfJRY''@;'; put 'put ''SouVqpSOKt1UGlamK9soRyhnK69W3qN8Qfm5CknFWMVPhaNSpLJT5ZTKYzpGN6D70Nn05fRd9DP0flWiqolqkGqGaqnqPtVu1SE1FbUpanFq89Sq1I6p9TEwhjEjiJHFWMs4yLjB+DRBe4LXBO6EVROaJlyZ8F59orqnOle9RH2/+nX1TxpMDT+NTI31Gi0a9zVxTXPNaZpzNWs0z2gOTlSd6DqR''@;'; put 'put ''PbFk4sGJd7RQLXOtKK0FWju1urSGtXW0A7RztLdon9Ie1GHoeOpk6GzUOa4zoEvXddfl6W7UPaH7B1ON6cXMYlYwTzOH9LT0AvVEejv0uvVG9E30Y/UL9ffr3zegGDgZpBpsNOg0GDLUNQwzXGjYaHjHSM7IySjdaLPROaP3xibG8cYrjFuMn5uomwSZFJg0mtwzpZl6mOaa1ppeMyOaOZllmm01''@;'; put 'put ''6zFHze3N082rzC9boBYOFjyLrRa9kwiTnCfxJ9VOumlJtfSyzLdstHxoxbAKtSq0arF6OdlwctLk9ZPPTf5qbW+dZb3L+q6Nik2wTaFNm81rW3Nbtm2V7TU7mp2/3RK7VrtXUyymcKfUTLllT7cPs19h32n/xcHRQeDQ5DDgaOiY7FjteNNJ1SnSabXTeWeCs7fzEud2548uDi55Lgdd/nK1dM10''@;'; put 'put ''3eP6fKrJVO7UXVMfu+m7sdx2uPW5M92T3be793noebA8aj0eeRp4cjx3ez7zMvPK8Nrr9dLb2lvgfcT7vY+LzyKfDl/MN8C3xLfbT8Uv1q/S74G/vn+af6P/UIB9wIKAjkBCYEjg+sCbQdpB7KCGoKFgx+BFwadDqCHRIZUhj0LNQwWhbWFoWHDYhrB74Ubh/PCWCBARFLEh4n6kSWRu5G/TiNMi''@;'; put 'put ''p1VNexplE7Uw6lw0PXp29J7odzHeMWtj7saaxopiO+MU42bENcS9j/eNL4vvS5icsCjhUqJmIi+xNYmUFJe0O2l4ut/0TdP7Z9jPKJ5xY6bJzHkzL8zSnJU169hsxdms2YeSCcnxyXuSP7MiWLWs4ZSglOqUIbYPezP7BceTs5EzwHXjlnGfpbqllqU+T3NL25A2kO6RXp4+yPPhVfJeZQRmbMt4''@;'; put 'put ''nxmRWZc5mhWftT+bnJ2cfZSvws/kn56jM2fenN4ci5zinL5cl9xNuUOCEMFuISKcKWzNU4XXnC6Rqegn0cN89/yq/A9z4+Yemqc8jz+va775/FXznxX4F/yyAF/AXtC5UG/hsoUPF3kt2rEYWZyyuHOJwZKiJf1LA5bWL6Msy1z2e6F1YVnh2+Xxy9uKtIuWFj3+KeCnxmKFYkHxzRWuK7atxFfy''@;'; put 'put ''Vnavslu1ZdXXEk7JxVLr0vLSz6vZqy/+bPNzxc+ja1LXdK91WFuzjriOv+7Geo/19WXKZQVljzeEbWjeyNxYsvHtptmbLpRPKd+2mbJZtLmvIrSidYvhlnVbPlemV16v8q7aX61Vvar6/VbO1is1njVN27S3lW77tJ23/daOgB3Ntca15TuJO/N3Pt0Vt+vcL06/NOzW3F26+0sdv66vPqr+dINj''@;'; put 'put ''Q8MerT1rG9FGUePA3hl7e/b57mttsmzasZ+xv/QAOCA68Mevyb/eOBhysPOQ06Gmw0aHq4/Qj5Q0I83zm4da0lv6WhNbe48GH+1sc2078pvVb3Xteu1Vx9SOrT1OOV50fPREwYnhjpyOwZNpJx93zu68eyrh1LXT0053nwk5c/6s/9lT57zOnTjvdr79gsuFoxedLrZccrjU3GXfdeR3+9+PdDt0''@;'; put 'put ''N192vNza49zT1ju19/gVjysnr/pePXst6Nql6+HXe2/E3rh1c8bNvlucW89vZ91+dSf/zsjdpfcI90ruK90vf6D1oPYfZv/Y3+fQd+yh78OuR9GP7j5mP37xRPjkc3/RU9rT8me6zxqe2z5vH/Af6Plj+h/9L3JejAwW/6n8Z/VL05eH//L8q2soYaj/leDV6OvVbzTe1L2d8rZzOHL4wbvsdyPv''@;'; put 'put ''Sz5ofKj/6PTx3Kf4T89G5n4mfa74Yval7WvI13uj2aOjOSwBS3IVwGBDU1MBeF0HAC0R3h16AKAoSN9eEkGk70UJAv8JS99nEnEAoM4TgNilAITCO0oNbEYQU2EvvnrHeALUzm68yUSYamcrjUWFLxjCh9HRN9oAkNoA+CIYHR3ZOjr6ZRckexuAjlzpm08sRHi/324mRt2XRobAD/JPCotuA2JA''@;'; put 'put ''n4YAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAGdaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8y''@;'; put 'put ''Mi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjY2NDwvZXhpZjpQaXhlbFhEaW1lbnNp''@;'; put 'put ''b24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj42MzQ8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KSHKtHgAAABxpRE9UAAAAAgAAAAAAAAE9AAAAKAAAAT0AAAE9AACKlRxL/UIAAEAASURB''@;'; put 'put ''VHgB7L0HgNxmeqb5FVChIzuRTTZzzlESRUVSFCUqzIwmjyZnx71zWO96b89h7b31ede+27O9DjOe8eSo0USlURxpGESKYhBzzqFJdrNzqADg3g/FoppUk6zuQlWjUC+kZmXgx/OjUC++GFq25v2OcCEBEiABEiABEiABEiABjwiEKDA9IsnVkAAJkAAJkAAJkAAJuAQoMHkgkAAJkAAJkAAJkAAJ''@;'; put 'put ''eEqAAtNTnFwZCZAACZAACZAACZAABSaPARIgARIgARIgARIgAU8JUGB6ipMrIwESIAESIAESIAESoMDkMUACJEACJEACJEACJOApAQpMT3FyZSRAAiRAAiRAAiRAAhSYPAZIgARIgARIgARIgAQ8JUCB6SlOrowESIAESIAESIAESIACk8cACZAACZAACZAACZCApwQoMD3FyZWRAAmQAAmQAAmQ''@;'; put 'put ''AAlQYPIYIAESIAESIAESIAES8JQABaanOLkyEiABEiABEiABEiABCkweAyRAAiRAAiRAAiRAAp4SoMD0FCdXRgIkQAIkQAIkQAIkQIHJY4AESIAESIAESIAESMBTAhSYnuLkykiABEiABEiABEiABCgweQyQAAmQAAmQAAmQAAl4SoAC01OcXBkJkAAJkAAJkAAJkAAFJo8BEiABEiABEiABEiAB''@;'; put 'put ''TwlQYHqKkysjARIgARIgARIgARKgwOQxQAIkQAIkQAIkQAIk4CkBCkxPcXJlJEACJEACJEACJEACFJg8BkiABAJBwHEcMc2QmGFbwtGQhCM27ockEnMkHBOJRHGL52OVtlRW2VJW5UhZpT7W53G/PCTRCkdC+O+GC162EiL9vY4k4yGJ9+OvRx+HpKcTt90hSeA5Ky6SSuI+3qvvTyUMsZL4DJ6z''@;'; put 'put ''UrqFm2znhoPgiyRAAiTgbwIUmP6eH46OBEgAOiwCsRgpE4mVO64grKjCfQjDimo8rtDnRaJ4LVrmuILSjAhEo4hpiBhh/BkG/iDp8E9IHLHtNFbbdtw70KaiAhUvZbdgTFgdVog7+r/7l34yvQUR27Lxh1tszMF2kokQBCfEJv5SEKb9EKAJiNI4/vp7DOntdiBUcb/r8nN9+j5DUimIXt0AFxIg''@;'; put 'put ''ARIoIgIUmEU0WRwqCQSVQCjkSLlaFGFBrKh1ZFSDI1U16fsV+jwEZQRWyDCskZGwIWYEMi6juSAKIeH0H1ckqk7URUXdFb145U76tYL9e3mMeuPeNdJPGHqL/43LAlXHo0N0LAeC0oYYtcVSyyj+etU62mVId4dIT7uBPzwHS2lPZ0iSeN1x0uvUdXAhARIgAb8QoMD0y0xwHCQQeAJqXRRYHW2p''@;'; put 'put ''qheprrelpt6RStxW1YorLqNwU0diEJBwdeuiVkUHwtG1NEIwXjY8ptVYUHmltSesrek7KkYzQlRFqA2LZjKekr5uQ/p6HAhPU7pbRbouhaSzNS1A1U2fhBv+pu7+oDLkfpEACYw4AQrMEZ8CDoAEgkfAhFtahaRaIkc12lI7xpHqBkuqa+DOhkUyVhZ24yPThkeISFju1PLoCsmRsjYWyzRcNlhe''@;'; put 'put ''EZ5m2hKq2Ky4Lf39DuJARbph6Wxvgei8gFv86WMVpY59eQXFsr8cJwmQQFESoMAsymnjoEnAHwTUwhhBvGNlLayREJH14yAqxzpSOxqJNDVIoIFFUt3Zqh4zlkiKyDzOnWpHuN3VABxCgpMbD4r7qbiFWE+Izg5HOi4Y0nbelLaLAvEJiydc7bZF0ZnHWeGqSaAkCVBgluS0c6dJYHgEDI2VRGJN''@;'; put 'put ''TaMjDeNtaWiCoMT9asRLRitMJNVArMAsqRZJ5LjAJElz5PBIe/wpFZwqPDE/IVg89b4FV3tfry29bQ7EpiGtZwy51GxAgGrSEWM7PZ4Bro4ESo4ABWbJTTl3mASyJ2AY6tqGmISQHD0RgnICXN6Imyyv1jJABvQjxCSECvQkxWT2WP3zTgjO8GXRqZbPVMKCGx1WTrjW284ZcvEUROc5uNcvocQS''@;'; put 'put ''Xev+mTeOhASKgAAFZhFMEodIAoUiYJrpDO6GCbY0TlFBaSMZR7O7w9AfaTe3pdnZapmkcbJQ01K47ailE4LTtXSmIxtgzbSksw1CExbOC8dD0noWVk4kFdmWW6ipcGPjlkiABIqKAAVmUU0XB0sC3hIIwUJZhfjJMRMdaZzqyGgIylGjYaGshB/VdXUjfk/FJF3d3oIvprUNtHIiL70PgrPrkrgu''@;'; put 'put ''9fPHDWk5bbgC1EHNTy4kQAIkkCFAgZkhwVsSKAkC6cLkGj85biqslPirHWMj49uE5QqSEiIhpVXIr9QDKgko3MmhEMBxEtaC9e41iNbptKTjvMgFuNObj4Wk5YyJgvHIVqeFeyhU+V4SCBwBCszATSl3iASuJqBWyuo6WCinODJ+puXGUlbVaXccLVmD0jZaIogWyquh8VH2BNTCibR1vUDRxCHN''@;'; put 'put ''VG89G5LmI6ach0u9HQlEzFLPHiffSQJBIUCBGZSZ5H6QwAACZlhLBjkybrolTbNsqUctysoaFKeE21sLdWscJWMoBwDjXW8IZGI4VXAiaSgO6+YlZKU3Q2g2HzZh3Uz3aUekpzfb41pIgAR8S4AC07dTw4GRwNAIRNFGsX6CJRNm2tI0A7UoUT6orNx0M73VskQr5dB48t0eEBhg3Uyh/WUnug2p''@;'; put 'put ''G/2Mis0T6l6H0GSrSw9AcxUk4D8CFJj+mxOOiASyIqBFzmNlIg0oHzRxliXjYamsGYNWi1HUMITrW3ta00qZFUq+qRAEoCU1O91AAXgLsb49bbacg8g8cwCudIhOt8sQxWYhZoLbIIGCEKDALAhmboQEvCNgRhwZo5bKOY4rLGsaL4tKTdDR6uZMrvAONteUNwIG3OgmxKbmlHWh2PuF4yKnDkJs''@;'; put 'put ''InaztwebpdjMG3uumAQKQYACsxCUuQ0SyJGAgfqUdYipnDQbwnK2dtBBi8YyJOlQVOZIlh/3A4EQxKYmCmlocNclWDaPGXJ6ryHnjpuS6NMRMmbTD/PEMZDAUAhQYA6FFt9LAgUkoIXNq2odCEpLpsyH1XKSjXaMSNWl+7uAs8BNFZpAxrJpIcRDOwqdOWjIyX3oKoRC71aCQrPQ88HtkcBwCVBg''@;'; put 'put ''DpccP0cCeSDgxlWWizRNs2TyAhtlhWypqjHh9XYQUwnzDssJ5YE6V+lLAtCSrtiEZTMZt6UFpY9O7Ydlc78p7RCejkWx6ct546BI4DIBCkweCiTgAwLqAteC51MX2jJhnpYVciQcNhBTCWnpNvr2wSA5BBIYKQLQkvp9EPzf3+Wg7JHI8V2mnD1sSH+vCk2KzZGaGm6XBK5HgALzemT4PAnkmYBa''@;'; put 'put ''K8sqHNSpdGTGopQ0ThOpqEIcGuIqLSbr5Jk+V1+sBNxe6UgO0koJHS0O3OchObHHlEvokW7Rqlms08pxB5AABWYAJ5W75G8C2lmnZowjUxdZMnW+JbVjUboF5VtYq9Lf88bR+Y+Aljwy4UKP99pyHiWPju40ELMZln7NQqdV038TxhGVFAEKzJKabu7sSBIIwQ3eiESdOStSMnEmrJfV6SxwWitH''@;'; put 'put ''cla47UAQ0ILul62a7RccOYEMdHWht51nT/RAzC93oigJUGAW5bRx0MVCwE3agRt84hxbZt1iSeNkR6IxxlYWy/xxnMVHIGPV7O9x5PiekBzZhtqap/RijnGaxTebHHExE6DALObZ49j9S0BLDNU4Mg1u8BnLbNSwRH5CyJBkEgGWLITu33njyAJDQGM1IxFD4nFLLsB9fnir6RZyj/fCeR6i2AzM''@;'; put 'put ''RHNHfEuAAtO3U8OBFSMBrV1ZN9aWGbfYMm2hJdUNJmIrbbG1xBAXEiCBwhOAlowgA11LfV06J3L4LVOOvRWSng6kpDNOs/DzwS2WDAEKzJKZau5oPglo4s6YyYivvM2SSXNtZIObkoSwZImhfFLnuklgaARc9znEZmeL5cZoHt5uSPsFjdOkRXNoJPluErg5AQrMmzPiO0jgugS0fuW4GZbMXY4W''@;'; put 'put ''jkjciZWjtV0S9VNYEP26zPgCCYw0AW1NqVbNnk5LTqJT0MHNprSgU5BjU2iO9Nxw+8EhQIEZnLnknhSQgAlhOXGOJXPusKVpqiXhSJjxlQXkz02RgCcEEKcZRZxmX68lZw+FZP8bYTl/3EAtWgpNT/hyJSVNgAKzpKefOz9UAmbYlsnoCz5vhSVjpkBYmhSWQ2XI95OA7whonGYUYS1ICDp7JCQH''@;'; put 'put ''NoflDLoEUWj6bqY4oCIiQIFZRJPFoY4cgbSwtGXuClvGTnXcLFRN3mFG+MjNCbdMAp4TUKEZMSWVTKEdZVj2bwrJ6QNI1KNF03PUXGHwCVBgBn+OuYc5EDBNWyaiN/j8OwcIS42x5EICJBBcApeFpjZBaD4Wkn2vG3IKQpMWzeBOOffMewIUmN4z5RoDQECTdybOtGT+PbaMmwaLpbZypLAMwMxy''@;'; put 'put ''F0hgCAQgNMOwaFpWSs4dMmXvJkPOHqbQHAJBvrWECVBglvDkc9ffSUDbOTZNsWXePSlkhdtu8k6KxdHfCYrPkEApEbgsNNV1fvqQIfs3huUckoHYHaiUDgLu61AJUGAOlRjfH0gCBupY1jfZsuDelEyeq+0cEfBPYRnIueZOkcCwCVx2nSeQDHTqQEj2rtfyRrBosrzRsJHyg8ElQIEZ3LnlnmVB''@;'; put 'put ''QDvGVY+GsLwrJdOWoEB6BepYJtjOMQt0fAsJlC4BnDeiyDrv67FRsF1kz+th6WDB9tI9HrjngxKgwBwUC58MPgFHyqscmYNyQ3NQJL26lgXSgz/n3EMS8JjA5Tqa3SjYfuhNuM5RR7OnHeqTLSg9Bs3VFSMBCsxinDWOOScCkYgjU5elZCEywxuaDLZ0zIkmP0wCJJDpDNR20ZZ9KG10ZFtY+ntD''@;'; put 'put ''bjkz0iGBUiVAgVmqM1+C+62Z4ePR1nHRKiTyTLPdbo52yilBEtxlEiCBfBAw0ILSRAvKCydt2bXOlFP7kIGeUosmFxIoPQIUmKU35yW3x6GQIzWNtixamZRpC1F2BLFTKY2z5EICJEACeSBgov2kbdtyen9Idr8Wlovoc85EoDyA5ip9TYAC09fTw8HlQsBxHKmoEpm9IiXz7rCkahQTeHLhyc+S''@;'; put 'put ''AAkMgQAMl9oVqK/PkiNbDdm70ZSuNgMroEVzCBT51iImQIFZxJPHoV+fgBl2ZPI8SxbfZ8no8Yak0JHDsegOvz4xvkICJJAXApcTgdouWrJnvSFHtkckmaDIzAtrrtRXBCgwfTUdHEyuBNQdXj/OlsWrbZk83xIjZCAGiq0dc+XKz5MACeRGQOMz9e/sEZGdvzJZqD03nPx0ERCgwCyCSeIQb05A''@;'; put 'put ''3eFllSJz1R1+J93hNyfGd5AACYwEAY0B10Lth+E2370+LN1tas2kRXMk5oLbzC8BCsz88uXaC0DAzQ5HW8clq1Mybgrd4QVAzk2QAAnkQgChmFHEZ7Zd0GxzuM13hMVKUmTmgpSf9R8BCkz/zQlHlDUBR6rqHJQdSsmspbaYUbjDk3SHZ42PbyQBEhhRAuoy125iJw/Abf5KBG0nQ+I4FJojOinc''@;'; put 'put ''uGcEKDA9Q8kVFZKAGbZl6mJYLZHEUz/WcF1OwhyeQk4Bt0UCJOARgXAM2eZdlux93ZR9aDuZ6KPI9AgtVzOCBCgwRxA+Nz10Anq1XzPGkqX3Q2AugrUSotJmdvjQQfITJEACviKg3YDCpoHkH1t2vBRmEpCvZoeDGQ4BCszhUONnRoSAiRaPs27RTjwpqalnTcsRmQRulARIIK8EwijSHo/bcvAN''@;'; put 'put ''Q/agG1BPl8GWk3klzpXniwAFZr7Icr2eEXBLD421ZemDFmpbwmhpO7RaekaXKyIBEvAdgcu1M5vRcnL7iyhpdNTEOY9uc9/NEwd0QwIUmDfEwxe9IKACMYzC52ZYxIg6KMiRPlGqUEyhT6+N7Ekrpd7ud55ATbx/1rIUYi1TSOgJSxLlPbiQAAmQQCkQ0JaTyYQjBzZnrJmaFPTO82QpsOA+Fh8B''@;'; put 'put ''CszimzMfj9iRylr0/R5tS22j9v9Glne1LVG0aywrg7iEiztk4A/Fz1VLhhBCaaHDTjIBl1CfSH9XSLo6DOlqEem4COGJ1xfcjVjL+bBYYq/ZicfHU8+hkQAJ5IfAZWvmeVgzt72I2Myj6GtOa2Z+WHOtnhKgwPQUZ+mtLFpmy+iJtjTNsGTsFJFRDSh4XoVg9bD23H3bne0meOMf93YAJvdaXPUm''@;'; put 'put ''7hiGxhrph0SSKQslh9DLN3a5E8+1HxywDt4lgaESuMoIdPmBeyzqiq7cuclaBx7PKPR/ZRn4/JUneYcEciOg1sxEwpYDGw3ZtT4i8d5sD9TctstPk8BwCVBgDpdcCX/OMEUap6RkynxbJs52pLpeRAPTNZs7pRndcH3nurg60/0n1zXx80En4P7MwsqjC65R8A9a8qlKTBvK3edV/zn6HyIsbJjG''@;'; put 'put ''bbQPtS0cs3jBsWEtx3Fr41at5LbWIbzJIaxGeC3w795ie2qZN3S7JuqxYhAGLrBC+J5oOEh6fFilrlPH4W7THVD6q6KPb7I9dyf4DwngGIvgXHv2iCNbnzel5TSOYRy3XEjAjwQoMP04Kz4dU7TclikLLZl9K6yW421YFxETicLmdF37dMICMqy0QIN4U8GoVu6McIQosyAWk8i41RjeOGoHpuIh''@;'; put 'put ''3DrS3yuoJYjQix48j+cSsPYk+/FcHJ9BSEYqhYuhBGJ/ITjVUu4gBsO9LsI67SzCfF2LOwSkKkYznB6bhoBEEGdsRnDBFcNfFBb4Mlj08RetwB/CRGIVCBep1Pvpx5EY4pNjKhqwDl0PVuxqTR2PCmGNDdGteHDRll4T/w0CAW032d9tyVu/NhGfaeJYxpeCCwn4jAAFps8mxI/DiZZZKA9ky5wV''@;'; put 'put ''ttShqLmNHzsLFqCbWXn8uC8ck38JuJ5qWGhMtQhqhxNXQDoQhRCREId9PRCOiNPt6dA/Q3o7Q9Lbhdjd7hAEZVpAppAwZkNspmMt/Luvhlo8kfgWU6FZrqJTpHwUYpjxV1GTvtX7KkzLIEo1VCQMAeooJFcEqwUWd9L/+3dHObK8EdDviH5XTuwTWDPD0n4RIhPHAxcS8AsBCky/zIQPx6Fuv2mL''@;'; put 'put ''LVm80paG8WrtUdciz2A+nKqiGlLGZayu5BBEU0ZIxvtTEodY7IFw7LhgSMclke4WU7rbVVymrZBqqfS7ePRqMtRiG47ZUo4kuSokz2kC3Sgk0FXX6WMbVRVgES2DyID1U5lk3P9q7aTL3atZ8P96IugC1H7Rkm0vmHJyH3qaozIHFxLwAwEKTD/Mgu/G4Ej9OFtueTAlk7TuJMZnJyksfTdNRTCg''@;'; put 'put ''a8WkKp8UEhXUha2WyI6WkLRdCEknqgZ0tqhVEglecYMC6SZzayL+s0ItnhCdtWNQsWEc/hosiE9YPKu1aoOJUAKITjgaUrgwFFg7+Q2+CdQiflljfh3EU+zdZMquX6HtJC7IWM6oiCc0IEOnwAzIRHq1GyHDlnl32LL4viR+wMKIacsiIM2rjXM9RU/AFZSXW95p/VONdezvtaX7kiFtEJGtZwxp''@;'; put 'put ''P49yVK1wa+NH0GK5FQ/nPO1uV+tmLRoT1EN06m3NaJEKiM4o3OyaAOVgTjR2VWt/UXR6iH+kV4UvXxSxmWeQAPTmLw0kAJm4UKM1c6SnpZS3T4FZyrM/YN/VvlGF2K/lj6ZkxmK1euAZjfHiQgI3IKA/X24smFuWynETbrphheyAiGyBmLx0FsKyGS7ubtNNqLnBqvhSPgjAYhxDfGdVHcJcmhxp''@;'; put 'put ''QEmxBngnqhs07lNj+C7HVKuVk4IzHzNQ8HVqAlBvpy1bXzLk2A4YCRCXzIUERoIABeZIUPfbNmFpapxky13vs6RhgiZL0Grptynyy3jcn6rLFkoNntQMbo2RbD0bkgsnDdwidhLxk5rRzcWfBExkv1fUWq6Fc8zkdEUIbYxQVmWIaaqrFRZOCk5/Tl6WozLwHdXv5wG4zHfAZd6L5Di6zLOEx7d5''@;'; put 'put ''RoAC0zOUxbkidWNORj3LOx9LIYsVLkvEx3EhgYEEtCyQCg+9TSEWt6fTkfZzITl33ICoRBzlRRMlgSgoBzIrpvuamF4Jt7paOMdMsWTMZEfqxtjIXtc5h4XTrRnKGM5imlN3rJjXjMt8y7Ome/FHl3nRzWJRD5gCs6inL7fBa5b4zFtTcsejlphRLe9Cl3huRIPxaVcqagZzGDFc+K+/N+VaJZsh''@;'; put 'put ''KM8fxw/VGS0PRItIMGb7nXuhFk51qY+BV6NpOiycuK2qD0GspJOG1LqpyUNcioOAusy72y2UMorI8d3aGY0Xg8Uxc8U/SgrM4p/DYe2BistZt1ly57tR90UD/xlvOSyOQfmQ/uRkYiltCAi1UraeCsmZo6Y0Hwu55YLQvZNLCRKIlaeThZpm2DJuakrqmxC/WYEsdZg+U3pQMHbT90eFusy1g9Tu''@;'; put 'put ''9cgyfzWM2rIUmb6ftAAMkAIzAJM41F3IWC7veg9+HLR+HmKuuJQegbSoRNwdalFqUldXqy0X4fI+fcB04ym722mlLL2j4sZ7rO0xR9U7Mg6WzfGzYN2cYKM4PDoQIYQilaTYvDG9EX4VhoQIkvGO77Vly7Nh6URlB1TuH+FBcfNBJkCBGeTZHWTfNOZyygJb7v1gUgwUaKblchBIAX7KFZUaUwn3''@;'; put 'put ''t4rKbojKc8cMOX3QkIsn0vXzArz73DVPCaTrcI6basnEOY6MRfxmZQ36sFNsekrZ65VpYfbWs7Zsetp0Q14c9jL3GjHXd5kABWYpHQoQl2MnOXL/J+MoXaLB+7RclsL0uzaKyzGV6v7uaHPkAuIpT+6FqDxJUVkKx0Ah9rGyxpax0yyZNEBsapKQRTd6IfAPaRtmxEAdWlveRPefI1vDaP9LS+aQ''@;'; put 'put ''APLNWRGgwMwKU/G/SZM1RiFTdM2nU1LXxGzx4p/Rm++BZgebl+tTakzlRZQROr43JM2Iq+zthOLkQgJ5IqDF3sfPdCA2kzJ6CiydVZowph3BkCCUp21ytUMjoDHX2jJr16uGvPVahMk/Q8PHd2dBgAIzC0hBeEsk4sg9H0rI9KUG61wGYUKvsw9qhwjBRWmERRL9trSeFjm535BT6FHc2UpReR1s''@;'; put 'put ''fDpPBDQkR/unT5pny+R5joxusiVcpt4TaBvNRs/TdrnaLAnghBFBlvnhbSJvPIMLz27GXWdJjm/LggAFZhaQiv0tIdOWBXdZcvu7UMeQrR+LfToHHX/GWmkjYauzzZYz+005tgexVqdZlmRQYHyy4ARMXOSOmaB1d5Myaa4j1Sh9pNnNllo1qTQLPh8DNxhB7/rmo7Zs+ElE2tHSFZepA1/mfRIY''@;'; put 'put ''FgEKzGFhK6IPwYIwZoIlD34uhStVZowX0czddKjuzwAyQzVZK9HjyPlTgjp3ppsF3oc6lVxIwK8EyqscmTgrJVMWatwm2lmWw6qJJHRaNUduxsJI/ulssWT9T8Ny/miYon/kpiIwW6bADMxUDr4jkZgtqz+eRJYnyojQejk4pCJ7VqWjgSB9/QXoanfkNKyVR3cY0oI2jbZFYVlk01nSwzVwAVyH''@;'; put 'put ''UkfTITQnzUvJqAaEd+CiyUL3IFo1C39o6MVqsldkMzr/HN1hMvmn8FMQqC1SYAZqOq/eGa13Oef2FHqMj6xr3LW0wRWmrQa1OPOVnrj4BdGOIDZu1bXLgKyr5+/aR2k3eLq8UOsZR47tNOUEMsF72hlbeS0rPi4+AuXVSAqabcm0pZY0TtbYwLTQZCH3ws6lm/yD8/FbSP7ZieQfXrQWln+QtkaB''@;'; put 'put ''GaTZHLAvmjVejbIhj/xGQirqDHEKXJJIxZDGV2kP6wQsp71d6GHdJRLvgTu3HyIT/0XLbYlWog9ytYi6zGJlKJeB2owpWC8oNtOT6Ypz6EcD2eCJXlvOomblkW2mnD0CS0OcwnLAIc+7ASGgsZpjJ1syY5lmoltSUYMMdD0lqFUzIPvo+93AiScCL8nezSJvPhfmucb3E+bPAVJg+nNech6Vdty4''@;'; put 'put ''ZU1SlqyBEOlHcFOBFrVShiEq4wjcbzkpcuYQivmi1WBHiymJPtWNKpkGLhCWldodxIbVAnFZs21pQK3OCrSiS+oPCgRnKS5pYQkZDpHe22nLqQMhOYx6dRdP4ce2NJGU4mFQ0vusrQ3rxzkybbElUxdaUtOAbwXc5yx1VKDDQkUm4jKP77Ll9V9EpKdjgPepQEPgZoqbAAVmcc/fdUbvSM0YRx7+''@;'; put 'put ''Yhw9g2G9VPdznhcVRG7xXojZ0/sMObAFYghFvG1YHoayqFu/fpwtM5ba+FFBTFY9+uZCrMKPPpTVFO17XWEJayXSsdDKzcHJPR0L1XaB1sqinVQOPGcClTXIPl+QkpmwajaMS3tH3OzznNfMFdyMgJthfsyWdU9GkATknqFu9hG+TgIuAQrMAB4Iar1ctiYlS9dI3q2XerpRo6QmnTQfdWT7S2Fp''@;'; put 'put ''PmbmThXB/zWwas5HeaXpt8KVHkW5HRWaAV2Uo7rBVUZ3XLDlyM6wHNsRkq42D1gGlBl3q/QIxMrh5UAy0Jxb0Ad9CrwlmhCk9TRL4/pzxCZcM8zbmm1Z/yQMB2dwscse5iM2F8W0YQrMYpqtLMaqbqVR9Y489IW4VNZCsOTRxeyKS7hwraQjezaasvs1uLUT3lraQtBX49F+btnaFOKyUCQ+obVM''@;'; put 'put ''sgBRJG95W1g6cqlZ5Og2Q44ieae3y1uORYKDwySBrAhEoojPnO3I7FuTMm6agXhBB0ITkecBOjdkBaKAbzJxkd+DGrsbfhqRs4fx20KRWUD6xbkpCszinLfrjjoE6+U8ZI7ficzxfMZeqjBy4wO7bdn8VERO7EHrmDwtmrBUhQxTFZmzb0FGvPrdi9yY6fKDxVLFcutZWw4hcefErrD0IQmKCwmQ''@;'; put 'put ''QHYEwrgAHTsrKfOWO9I0UxNThCWOskM3rHe5ZYz6HNn48wjCdygyhwWxhD5EgRmwydYr+wc/l5CxU/LnUk6LS0O6ECO4Di6TC4i1LMQSiTmy8J6ULL7Pgi7DKIowLvOKsASwtnMQltvVFW5SWBbiAOI2AkvAxClonCs0YdmcEZKwCk26zvMy36EwEq0SjmxGdvmhNzXDnxfFeQEdgJVSYAZgEq/s''@;'; put 'put ''Ar7nTXAnP/iZZLrTVx7cRa5Aglu865LIaz8KSwuymgu5hCO2zLvDklvWQmSqi6ZIfGLuKRgGyzCslpfOQ1hu1eSdMFzh7iuFRMhtkUBgCajQbJqZkrk4RzRNh9AMo8YuXeeez7dbKxO/L9teNGT3BnT9YYMHzxkHYYUUmEGYxcv7oMk9t61NyKL7EKuYh9JEaZEUkjg6Pbz6A4+SeYbBXy2Zi1al''@;'; put 'put ''ZMkqxF1pzUyfL1q6yYSw7O2y5ehbpuxFvGp3G2MsfT5tHF4REzAhLLXkmZ4nxkxCTQZciGot4DxccxcxpRyHjgQrFfQ7Xg7JW1qQPcWL5RyJBu7jFJgBmtJYmSUPfTEp9eO1Vpz3p1I9fdhwTb/+c1MOb8tfzGU2UxKrsGXFuyyZdStiTX3aAjPdeQc1QeO2nNwVkj2vh+XSucJafLNhyfeQQFAJ''@;'; put 'put ''RMscmb4UFs3bbZQ/Q0KihtWoRTOoO1zo/cKPQhgVRHb9GtbMFyIIS6DILPQU+Hl7FJh+np2hjA1lfRon2bIW8ZfaQcfrM6ieNkKwwh14QwUmApxGfEG2fIMjqz8BQT32cku5ER9TegCZLkY2Et5PHxbZs27krL0+QcJhkMCIEiivsmX2cr0gtd2C7W63MDg/KDQ9mBb8OLhdf14X2fJcRFJJikwP''@;'; put 'put ''qAZiFRSYgZhGzei2ZeGdltz+Hu+zx93TBdwhbRcceenrUent9od7V0MCJs+zZeWH8xdzOpTDw+UEcW+A1cWTtuzeGJaTu7XYPE+4Q+HI95JAvgiMakAMN86TM2DVjKFbmK3dwqgyc8eNU5x2/dm/yZE3nmVrydyBBmMNFJjBmEe4KRy590MJmbbEkJTHLmOVR45hyIYfm3IEGc9+WlxX+buTMusW''@;'; put 'put ''xJ16vN9D2U+NszTQIrPrki374Qo/iHqWiT5/CPGh7AffSwKlQGDMJEsWrrRkEmppmoj2YSKQN7OuXX8ObxWUMUJN5DjPf95QLd61UGAW79xdNfIyxCQ+8hsJGdWIgHYEs3u1uLY3WOTOHxd58ZuIsUn566QRQmjA2Cm23A9XebgMoy1w6SI3zhLCsr/fkWNvhWT3+jBEpr8YeXUscD0kECQCBs4d''@;'; put 'put ''k+dbsuDelDSiiYPN+ExPptcVmdsui8x+ngs9gVqkK6HALNKJu3rY6N893pFH0XvcQI0yLwOLXIEJAfX6Tw05uHVkE3uu3ue3H8XKbbnjMe1THCqYFVO5uKU6oDDPHbaRRRlFq0yeTN+eFd4jgeIgEMX5Y/ZtllvaaFQd6gfTbZ7zxKnIPLLNkQ0/o7s8Z5hFvAIKzCKevMzQ1Yo3ZYElqz9uuW0b''@;'; put 'put ''M8/neqsiyoGA0oLqv/xKFMXA/SmgDJQkmTTHklWPIxazAO3LXHc4Ep60Z7iWHDoM4Z1iiY5cDzd+ngRGlEDNGJQ1WpmSqQttiURRiYP1M3OaD4rMnPAF4sMUmAGYRk12WXhPUpY/Cgueh/Uv01Y6Qw7vcGT9kzHfktIad1V1jqz9VEJqkFGuPwz5WDLZ4cm4yBG4wzU7vJPu8Hyg5jpJYMQITJqL''@;'; put 'put ''bmGrbGmcorGZ6ba0+TmjjNguFmzDaXe5g8ojYUnQXV4w7n7ZEAWmX2Yih3FoUeHbH0nK/Hu8F5haSXfTz0NyYIs/3eMZbNFyR5aDwdzbvXeTu2ECMN5qEs/FkyHZ/kpIzhz0N48MF96SAAkMnYC6zefekZL5K2wpH4WLVi3STpU5dJD4BEXmsLAF4kMUmAGYxnxlkKuwSsL1++I3TLl4yt+CykQW''@;'; put 'put ''/exbLcRi2ggT8K67jxsmgKDWODLCD2wOyT5kiMd5JR6Abw13gQRuTqBhvCVL70vJxHmGhEIoacQi7TeHNsg7IuUmzp+2bPqF1sn0Z6jVIMPmUzkSoMDMEaAfPq7i6sFPJ9CDFwXHE96IK1dY4Z+eDkH8ZUx6OvUZ/y4hw5GmGYhD/VjKLTviVaKTusW15/mR7SjT9DM/FJj37xxwZCQQRAImQpBm''@;'; put 'put ''LLPQgjclo+qRbc4koGFNcxiJP26dzKcgMhmzPiyGxfYhCsxim7FBxhuOWvIIWkQ2TEif/AZ5y5CfcuWkFldvRoLPV6OS8HtNMyQ61Y+F0P5sQmKVGL1H5YpcgYn2mEd3hGT9T6JD5sgPkAAJBINAzWhLFt+fkukLQ6ggwd7mQ55VnJbDUVP2rNeOPyhyb9GSOWSGRfYBCswim7DBhhstt+ThL6Bl''@;'; put 'put ''YlM6Vmiw9wz1ubTAFGk5HYLA1B6zfj8ZaOtIS9Z+JiWV9agF6lGiT8aCeQy9xNc9SYE51OOI7yeBIBHAmUVm3AKhiSLtNag5TGvmEGf3ssjc+Qp6l78chsh0f2mGuBK+vVgIUGAWy0zdYJz5FJitZ0Py3Ff8V2D9nTjSAvOhz6akoo4C8518+AwJkIBXBKrrbVn6QDJtzUR4DmMzh0BWRWbEkG0v''@;'; put 'put ''iux8LUKROQR0xfZWCsxim7FBxps/gRmSjouOPPuvcJH7PrGFFsxBDg0+RQIkkCcCV6yZqzU2M31Ry0zzLGFDZJpmCH3LDdm7KQyBTktmluSK6m0UmEU1XYMPNl8CU6ty9HVrDGZMutp87iJHDGbDOEce+EweYjA1yectkQ0/8W8t0MGPDD5LAiSQbwJaoP2WB5MyZb6BhECtmwmLZr43GoT1I8Zf''@;'; put 'put ''az9pjcwj2xGTaVNkBmFaB+4DBeZAGkV6Pxyx5aEvJNx+ul6X6LFwZfnSt01pPubvMkVXssg/jixyExPp0Rk+HYOJ7MctjrzxNGMwi/QrwmGTQF4JaC3iObdrbGZKyqohNFGgndbMmyPXdrsWGrCt+7EpJ/eYbsWOm3+K7ygWAhSYxTJTNxinlim6/xMJmTjHuzJFujm9ngxBrb3xnCN7N/hbXLl1''@;'; put 'put ''MG9LyZ2PiaQS1g1oDe2ltMA0ZNevUWD9ZZYpGho9vpsESotA42RLbllrSdN0GDJZziiryTfCaI7R68jL3w/LeRgyKMyzwlYUb6LALIppuvEgzbAtd70/JbNvy0MnH/TcPrHbkVe/72/3sHbeWPHuJIqtG5KMeyswbduQN5833CLrN54JvkoCJFDqBMoqHFl8XxIWTUdMXJM62gWo1KHcZP9NJP30''@;'; put 'put ''tNnyyncj0nIO4VgIS+JS/AQoMIt/DtHC0JFb1iRlyQMQmH0eiiuw0RNjb6fIc/8WlZ52f8Zh6ul7VH06/rKmwdte5GrBTCZM2fjTkBzf4+8wgQAcytwFEggMgelLUrLsAQvnJu1pjrMUVeYN59aMGnLprCO/+m5YOi6hc5LrQ7vhR/iizwlQYPp8grIZnsYfzkKbxHs+6EjKQ+udbjvjJt/8TLpN''@;'; put 'put ''YjbjKfR7NP5p6iLd/xRin7zduu5/b6/Iq9+NysXT/hTY3u4x10YCJOAVgbqxttz2CFpNzoLItBGX6U2jNa+G57v1hGOmnDtky69+GJH+bp5vfTdBQxwQBeYQgfnx7WplGzvNkgeRQe31VZ8KLMH3XAuuP/81f/aRjVU6svKDCZmEfsGexl9i121kp3deMOSFb0alr8ul4cdDgGMiARLwKYFIzJYl''@;'; put 'put ''91sy73Y77TJnP/MbzlQELSWPbLdlw0+jCHfiOfeGsHz+IgWmzycom+G5LuJaWx75rYSUVyGD0aM2iZlt61fcMQy4iQ05vM1fbmIND5g4x5b7HkcqojvQzKhzv1XhrijPHRZ5+btltD7kjpRrIIGSJTBjqSXLHkxIdQ1a+mopI7rMr3ssqMjc/ZojW55nIfbrQiqCFygwi2CSshmilip68DNJGTfD''@;'; put 'put ''20xy3bar26C22lF0/UXEYvb1+sd1UV5ly6rHUzJ+BrLHk976n1RgOo4m94Rkyy+ZQZ7Nccj3kAAJXJ9Aw3hL7niXJWOm4dzCLPPrg8K5N4wE0zeeDcme11mI/fqg/P0KBaa/5yfr0bmJPmhdtmSNt4k+mQGoyDTwhd+9AVeVz/ojozwctWXeHYhxethGLTVvxaXutwpMK2nKhp8bcmynFtfkQgIk''@;'; put 'put ''QAK5ESivcuTWB1Poaa4mTC3Mnk6mzG2twft0CIXY1Rv36x+H5cQu1sgsxhmmwCzGWRtkzCHECk6cY8n9n7TcvriDvCXnp1RwpZBEs+7JMIrijqyr3EBi09jplqx+3JJIOU7QiGvyclFB7YBpT1tIXvhWVLpa/WO19XI/uS4SIIHCE9DEzPl3oTA7yhnFyrQwuwY6cbmWgNbI7O9B0s93Y3L+JM7K''@;'; put 'put ''LF90LSJfP6bA9PX0ZD84BwE9laMcefS34lJZmz5hZf/p7N6poktwVdndgbqYyKpu1XplI7FA+NWORtzlR1NS16SdIPJjvdST2ckDIq99P4pYTHfvR2JvuU0SIIGAEpg8z5LbHk1KTR0MmWrJpMp8x0xr+aL2Zlte/nYU5Ys0jZXn4ndA8ukTFJg+nZjhDEvL9dz5GAr8rvC24PrAsehXOwRvcds5''@;'; put 'put ''kVd+UHjLnpvQVOPI3R/WuMuQp1njV+0ndtS2UGD9BS3PxPjLgWx4nwRIwDsC9eNtxGUmpXEqXMJsMTkoWC1fdOZAunxRwkc5AIMOlk9eIUCBeQVF8d9RN/mkuSlZrW7yVP72xxWZcF20nhH59RMR6WgplCXTkaoanIzfl5IpKEnkZceed9BS9zgKy7/4rYh0Fmz/3jEKPkECJFACBCqqHVkOkTlt''@;'; put 'put ''gVox2cd8sCnXzPK9G2wk/kTFStGKORgjvz1Hgem3GclxPLEKWx76XELqx6OjDVqU5WvRr7eB9l7t523Z+POInD+e5yQYCL66RojLxyzXcplPcZnOHg/Jsd0hWfcjf/dgz9f8cr0kQAKFJRCGB2oJkn8WrHDgJWLyzzvo40dHW0puedqQPZuQ9GNRZL6Dkc+eoMD02YTkOhzNJl9wT0pufxQtDvs9''@;'; put 'put ''bmtzzeD06x0yQxJHp5vtr5hycLOZl1hF3afxsyxZjo4YdY1m3tzimd1TgZlE9vj6Hxlycn+ehXNmo7wlARIoeQIaS6/JP8vWpCQaS2dR589MUHy4NbNcDSevPmHK6f0oX8TYeF9PIgWmr6dn6IPTGMWaelse/iKKro/KT7LPwFG515D40odMQ07stuWtVyJyqdkbl7nuSwVKeiy4OyVz7rQliqtX''@;'; put 'put ''C7Xj8rm41kts4PzxEILK/dm5KJ/7z3WTAAmMPIGpC1NoMWlJFRI3NfGHyT9vz4lmlne3O27ST1uza+Z4+0Xe8xUBCkxfTYc3g1GL37I1SVmqNTHzbMXMjFi/5uq+6Oly0OZLO/6Y0o4Wi8NZ9Cq+rMKRKYttmb/CkoYmxFuqsPS4Q9FgY1OBaVumbHo6JIe2jmwppsHGx+dIgARKg8DYqZabtFk7''@;'; put 'put ''BpZMnBMpMt+ed7dn+REk/XwPPct7hvc78/baeC9fBCgw80V2BNebtmI6sGLGC2LFzOxq2poJoYmC7D2djpw7EoJV05ALJw3p6775SSActqWmEYlK82yZutCS+rFoqYazaj5jSTNj19u3rZfIkEcZpmT85mMe+HneJwESIAEvCdQi7vzO9yZk7FT1RjH5ZyBbTfrZ97otm59m0s9ALn66T4Hpp9nw''@;'; put 'put ''cCxqxVy4MinLHy6cFTMz/IzQDEdM16Xd02FLx0VDLp0LSRcys/s6ULBdswDxv1oqK5EZXoOr9PpxKRk1Wp8Lu20fbY+Lp2fGd71bFZippCGvo3PP0Z20Xl6PE58nARIoHAGtb3zH+xIyeTbiD1Esk5bMy+xxvlZjxuanUEpuM+IxbTzBxVcEKDB9NR3eDqa8yhLtT94wAbGLeShGns1o3a88EoFM''@;'; put 'put ''xGkauNWAdW3/lWlboaLObQmG522M0RrwWjbr9+o9Og5VvCf2oVPRE7giZoaiV2i5HhIggRwJxModuf3daC+5BP4piswrNPW3I5VAPOZ30pVMKL6voPHFHQpMX0xDfgahdTG1U8R9H0VdTFV0qu64vIOAaktNRuzvFjem5+JpZo6/AxKfIAESGFEC4YgttzyclHnLNXQH53Sez935cDv9nLNQsxiN''@;'; put 'put ''P+AhY6efET1Mr9o4BeZVOIL3QLv7rHg3Tkp3Ft5VXiw03dhLx0SpJUd2vca6l8UybxwnCZQaAQM9zJfej1qZKx107WWtzMz8azzmke22rPsxvE9J1x2VeYm3I0iAAnME4Rdi05p9WFVrywOfTko9srFHylVeiH0dzjZccYl/zh5Cz3G0vkwmeHIaDkd+hgRIoHAEFt+XlCWrIDKRGCn4n8ZMEc0s''@;'; put 'put ''3/KsyO4NiMdkiFPhDsYbbIkC8wZwgvKSiqix0xCP+cmkGFHtd8vTkc6tKyXhbepsDcmr349I23lmjQflmOd+kEDQCWh94KWrUxBW2FOKTLSWAwa0SH75e2FpPqxF2IN+BPh//ygw/T9HnowwBNfK3Nu1rpqNDG6ejTLiMtlnyIZfaJF4Zo17cqBxJSRAAgUjMHdFSm590JJwGdQUGreVuqbSWszt''@;'; put 'put ''zZfjMdsQj6nWFS4jRoACc8TQF37DWrrotoeSsmgV4zH1vGPbhux4OSS71kUKPxncIgmQAAl4QGDO7SoyUxIp05Oam87pwVqLdxUaj3l4q8j6n2iZPHqlRnImKTBHkv4IbDuCTMS7PpCSmbeUrshMX9Qasvf1kLz5HFwpaWf5CMwGN0kCJEACuROYudSSWx9NSlk5RabS1MzyTfBM7d9ssj5m7ofX''@;'; put 'put ''sNdAgTlsdMX7wRiKm9/zwbhMXWRKsg9+lRJaXHEZMuTgmyJbnkGvcS34zoUESIAEipzADIjM2ygy3VkMoeZyot+Wl74ZlYunYcXUOnRcCk6AArPgyEd+g5pZXlntyL0fTMnEBbBklojIzIjLA2868uYzUYrLkT8UOQISIAEPCajIXA6RGaMlU8KwYjYftVGEPSpxxNpzKTwBCszCM/fNFssqtM9t''@;'; put 'put ''SqYvhciMBzdC3L121fMLYi73bArJjhfRipKWS98chxwICZCAdwRmL08i1t6WSAwpPyWezxkpN2XnKyJbcc63WbrIu4MsyzVRYGYJKqhvi8RsWf4ICrHfYUhS20lqq8YALSouQ2G4S/pCsvNVCMz1iMlhzGWAZpi7QgIkcC2B2Uj8Wb4W2eWlLjLxA6C/Aa+gdNHpAzj301V+7aGS18cUmHnFWxwr''@;'; put 'put ''1+4QC1ehptp9Fgr3hlBLLBgiU13i2v+8sxVXsC+F5fhOtoAsjiOSoyQBEsiVwLw7U3LLAxCZ0dK2ZBooXdRxwZEXvhGWbpYuyvWwGtLnKTCHhCu4b9a+5VPmw5r5rqRUN5iS6i/e5B+9YtWiuyEDMTiHHXkDmeKXmikug3v0cs9IgAQGI7BoJTr+rEZWtVnavcu1dNH+zQ4yyyMoXeT+QgyGi895''@;'; put 'put ''TIAC02Ogxb06R2pGO67LfMoCwy3IXmxdf9JWS0P6ey3Z97oJl3gY7R8Z4F3cxyVHTwIkMFwCy9YkZNFKXHCjd3nJdrdRTYmfgQ1PhuUoPFmOTZE53ONpKJ+jwBwKrRJ5rxlG158Vliy6NylVdWFJFEECkJ4uNNZS/zt7xJEdr4Tl/HFaLUvkkOVukgAJXIeAeqdueyQl8+/Q0KfSFZka/tVzyZbn''@;'; put 'put ''vxaTjrb0b8V1kPFpjwhQYHoEMnirgTVzjCOL0et2+gJLzBgyrxP+yzR3hSXiLA0jJK3NNoqnm3JsO7PEg3c8co9IgASGSyAMo8GK9yTRYANrcEpXZKqr/BDK1G34aZhdfoZ7MA3hcxSYQ4BVim/Vq9+maZYsXGlJ0wyRMAKmkz4QmpkEHu01237RQmuwiBzaZkpfN10fpXiccp9JgARuTEArhtzz''@;'; put 'put ''vqRMXghfsVOiMZn4eTDg2Fr3o4gc22mgXTB/L2581OT2KgVmbvxK5tMqNCfMsmT27ZaMn25LWRWshChrVMiMc/dUAGtlOJyOD209I3J0uylHdyPmsptxliVzMHJHSYAEhkWgrMqWVR+GsQDncG24UYoxma6rvB2u8q/SVT6sg2gIH6LAHAIsvhUEIDRHN9kybYktk+ZYSAoKiQmrppWyxbIQ4+Nx''@;'; put 'put ''hSO1VGrbL9PUq01HutstaT4CNzhEZfNRCM0khSWPSxIgARLIlsCoBlvuezwpdeP0E6UpMtVVfnCLIxt/Rld5tsfNcN5HgTkcavyMSyBaZsvYqRYsm46MnWbLqDpHohVht7CtWjZtXB6rKMxGdLrWSRWTiKXUP42p1Of6+1LS0x5y+8meOWzKeYjK3i733ZwFEiABEiCBYRAYM9GSe2DJHFWvzTWy''@;'; put 'put ''OkUPYys+/oj7WyPy6ydMOb4rzALseZoqCsw8gS211ZphW2qRFNQwERbOCZogZEtljQXBaUg0elkwuuLxajKIN0c4kCOWbUsi4UiyV2ClDElHiyGXzhnSciYkXbifiFNUXk2OjwYSMFDzNAwrNy5RUI5FZHRDndy+dKHMnzVDImHt3uSxaX3gxod5Xy+++uNxaWvvlIuX2uVSe4f719HZJV3dvdLb''@;'; put 'put ''1y/JVGqYa+fHSODGBCbMSSEmMyWxKnxncCz67xty4/Hn+mq6ALstL349Kl34zdF4fi7eEqDA9JYn13aFAKyZZSLlVY7EKhGzWRnCYwdJQmqlvPwmCMsEit4m+0TiPSE3QaevN4Qi76GSO9ldwcY7VwhEI2EpLyuTyspyqa6skKqKChlVXSU1+jeqSirdx5VSWV4uFeVlUlYWc+PK9ODR12trRiG0''@;'; put 'put ''wt+lqvRHTf/S8XC4wEomXdHZB3HZ1dMrnV09V4Rna1uHtLa1u4K0HSK0o6tb+vrj8BLgKo0LCQyDwOzbknLHY9o8N23GLDWRqa7yXevQ6Q3NOCz2Kh/GEXTjj1Bg3pgPXyUBEsgDARVV5RCEVRCOdRCC9bU1Mrq+VhrqavBXi/t1MqqqQioqyt33RSMRicViCJ1IX53orYqyjLjK3Opzum7L0ixZ''@;'; put 'put ''jS8rrp9MHbsuun96X28z9zP7k0gkICz7pfuyAG3r6JQWWEBbLrXJxdY2aYEIVSGqVlAK0DwcvAFb5a1rE7J4FTzliKMvrm+LBxOhXzdo6xe/G0bXN3WVe7BOruIKAQrMKyh4hwRIwEsCGRFZW1Mto+vqZFxjgzSNHSONcF+Paah3LZGjqiulDMIxIx71MyoWM38qqgaKRy/HV6zrGihC1UKrj/U2''@;'; put 'put ''I0DjcLurAO3p7RMVn2r5PH+xVc5daHFvVYy2dXTABU/rZ7EeA16O2zRtuftDSZmxBImUSVyYebnyIliXGTXQlMOWl78VlXhfxr1WBAMvgiFSYBbBJHGIJOB3AmWxqGt5HNc4WiY2jXX/xo8bA2FZ67q1K2GJjMAKqWIoIxoHWhn1OS7eEFDGmb+MAM1YfJV5b1+fdHR2w9XeIc0trdJ8oVVOnjmH''@;'; put 'put ''2xbXEtoJ17sm6HEpHQLlFbas/lRSGicjJh4JmqU2+2G4yrc866C1cERsuso9O/ApMD1DyRWRQPAJqHDReMfG0fUyeUKTTJ3YJFMmjod1crTUw9VdVVWJOqXqakq7p1NIUsncp4j0x/Ghc6iCU8Vnxv2uVmIVnl0Qly2weJ5tviAnIDpVeJ7BfbWCJhJJf+wAR5EXAnWNttz/qbhU1cKKV2JJP1q5''@;'; put 'put ''JN6L2phfj0lbs/rNmfDjxUFGgekFRa6DBAJKQOuPumJyfJPMnj5Fpk+ZKBOaGiEma9z4SBUoKk7UMpZxawcUReB3KyM8M+JTH+sFQndPj7S0tsups81y7NQZOXryNIRnsys6dd65BIfARGSWr/xQSsIxSCyYMUvJkqkJP4e3ObL+J0j4YX1lTw5qCkxPMHIlJBAMAhoPqa7tGRCSc2ZMdW/Hjhnt''@;'; put 'put ''urnVMqkiUkWH3tIiGYw5v9leqODMiE691Uz3ru4eOXseVs7T52T/4WNy5Php93F/PHGz1fF1nxOYf1dSlj+KQWqinM/H6unw1GgJ4+2vfxCRE3s0iZBWzFz5UmDmSpCfJ4EiJhBBKaAmuLfnzJgmC+bMkOmTJ7iJOFWVle5eqYUqY50s4t3k0D0mkBGc6mbXRa2c5xHLqdbNvYeOysGjJ1yLZzLJ''@;'; put 'put ''Op4eo8/76mC4lrseS8isFYiXLrGkH+1K13rGkRe/EZG+Hib85HqwUWDmSpCfJ4EiIqDCoHZUtcycOkkWz5sl82ZPlwnjGmGhrHYTQzLWSbVQciGBbAnocaV/auXWpau7G3GcF+UAhObOvQdcwdmK7HUmD2VLdGTfF9Okn4+lZNx0xFKXWNKPusrffF5k12vw2DDhJ6cDkQIzJ3z8MAn4n0AYVqYJ''@;'; put 'put ''yOxWQblo7iyZOW2SWyZIxQAtlP6fv2Ic4UALpx5jrajRefj4KXkLYvOtvYeQOHQeoRaM3/Tz3NaNtWXNpxNSOQomzRJK+rmS8PNvSPi5oG5yusqHe5xSYA6XHD9HAj4moGWDpk+eKEsXznWF5dRJ49HdZpQbN6lWSv3R50IChSKgrvRM1rq2wjx64rRs27VPtu/e72aqsyVmoWZiaNuZujAl934w''@;'; put 'put ''JYZGQpRQ0o9aMQ9uEdn4M1OsFF3lQztq3n43BebbLHiPBIqagCbozJo2WW5dPF+WQVhORLZ3BdopDkzMKeod5OADQSDjStcsdY3d1AShzdt3ytad+5AodJEXPz6b5VseTMqS+9DwoJQ6/cBoqVn0L34nLOeOoOwaI4aGdVRSYA4LGz9EAv4gEIGbW62Ty5culOVL5rs1KcvRm1stlGqpZKa3P+aJ''@;'; put 'put ''oxicQEZs6u0ltLfUBKGNW3a41k3ttc5l5AmEI7bc9/GkTJoFT7lVOkXYw+jwc/awIy9/JyLJOK2YwzkSKTCHQ42fIYERJKCWH+3ZfRsslXctXyrzZk1HT+9KisoRnBNuOncC6kLPlMI6fe68vLF9l6x/Y7scO3lG6ELPnW8ua6hpQDzm5+JSXQOhVULxmNpGcsOThhzcmk5ey4VhKX6WArMUZ537''@;'; put 'put ''XJQE1Fo5fcoEuXfFrXLHrYtRXmiMux+ZzO+i3CkOmgQGIaBCU/+0beXOvQflVxvfkB1aevCmAABAAElEQVR7DqDbUP8g7+ZThSAwBfGYKy/HY5ZKJ1EjHJL2CyLPfCkKKyaTfYZ6nFFgDpUY308CBSagsZWL5s6UB1beIUsXzHWLnmuxaybqFHgiuLmCE1DXufaw1+P9CLLQX9nwhmx88y25hD7q''@;'; put 'put ''XApPYPkjSVl4T2nFY2rCz6anRfasixQeeJFvkQKzyCeQww8ugfKyGJJ15snDq+9yywvFIDT1h5Y1KoM759yzwQloWIgKTV1Oo2WlCs3XXn9TzrdcYpzx4Mjy8mwkBlf5JxOoj4ki7CVSHzNkhqS305an/6VM+rpoxRzKgUWBORRafC8JFIBALBqFpXKOvOuBlbJ4/mxR17gKSybsFAA+N+F7Auo6''@;'; put 'put ''13jNc8g4f3n9ZvkVxKYKTV54FWbqRk+w5IFPpSRaoZnWpZH0E4UVc8erIm8+RyvmUI4yCsyh0OJ7SSCPBMJh0+39/dja1XLnbUtEhSaFZR6Bc9VFTWCg0Hz+1Q2u2Gxto+u8EJM6D/3Kby+hfuUh5DYlEf77zJcj0tGSbo9aCM7Fvg0KzGKfQY6/6AmoZXJ0fa08ev+9cIffLXW1NXSFF/2scgcK''@;'; put 'put ''RSAjNI8cPylPvfCabHhzh/T09hVq8yW5nZDhyH2PJ2XKotLpV65WzL2bHNn402hJzvlwdpoCczjU+BkS8IiAWimXLZwjH3r3Wpk/e4Zbu5LJOx7B5WpKikAU3yX97mzduVd+9PQLbv9ztqPM3yEwCqWLHkQryap6xCWWQOkihAHj+HLkuX+NSus5WjGzObIoMLOhxPeQQB4INNTVymNr75NH7r9H''@;'; put 'put ''KivKJZFI5GErXCUJlA4BTQZSodmGLPNfvPCq/Oz5X0k8zu9Vvo6AGUstufsDqZKJxYzETDm83ZbXfhjLF9JArZcCM1DTyZ0pBgKaoDAbLR0//eHH3CQetbrQalkMM8cxFguBTN9zzTT/9pNPSfPF1mIZelGNEw5yuefDSZmxVLPKLW1XHuhFrZgw1srzX4vIhRO0Yt5ssikwb0aIr5OAhwQ0kWfV''@;'; put 'put ''HbfJJz7wLhnXOBrWlbiHa+eqSIAEMgTUmqmlvbR+5pe+9YTsP3xMUriY4+Itgeo6uMo/m5Tqeqy3BFzlasU8tsuSV74DK6YqTi7XJUCBeV00fIEEvCUQi0Vlzd23y+c/9n7R4umaIc6FBEggvwRUZGqf8y9/50nZtHUn207mAfeMZXCVvw+uctgwS8GKCWUJK2ZYmo/Tinmjw4kC80Z0+BoJeERA''@;'; put 'put ''i6Z/8NEH5MPvWYuL3hBd4h5x5WpIIBsCWqS9vz8uX/nuk/Iq3ObxBC/usuGW7XtUWN77kYRMX2KUhKs8gh7lJ/Y78vI3Y4EX1NkeA4O9jwJzMCp8jgQ8JFBRXiYff/+j8v5H1rhZ4iwI7SFcrooEsiSg5YwS8Bp8+Vs/ktc2UWRmiS3rt2lW+drPJaRyFNzGQS/Ajl1EF1N5/uthOXcknDWjUnsj''@;'; put 'put ''BWapzTj3t6AEVFx+BFbLjzz2sJslzm48BcXPjZHAVQRUZKol8x++9j26y68i482DOSuScud7oC8R6xp0V3kmFvNlxGKqV4rLOwlQYL6TCZ8hAU8IaI3Lh+67S37jEx9029jRcukJVq6EBHIioO7yVsRk/o9//JocOHJcLNvOaX388NsETBRgX/2JhEyYg+dQMzLIIjOtKRGL+XVTmo/Rivn2UfD2''@;'; put 'put ''PQrMt1nwHgl4RkDLpGgB9T/+3c+5CT0sQ+QZWq6IBHImoIk/ew8ekb/556/LBfQx5+IdgdETkVX+qYREyrVXOayZ3q3ad2tSK+bRncgo/y6tmINNDgXmYFT4HAnkSGDsmAb5T//uczJ35nSWIsqRJT9OAvkgUF5eLk+i48/3fvqs9Pah0TQXzwgsezApS1c5Ylt2oAUmksk13FR++dWIXDzFjPJr''@;'; put 'put ''DyAKzGuJ8DEJ5EhAM8Y/gIzxT37w3Yj34g9Xjjj5cRLICwEDWRra5ee//f1XZM+Bw3SVe0g5Vo6En8/HpX4cFBgiEIJuxTy41ZZ1P2J3n2sPIQrMa4nwMQnkQECDvSdPaJK/+KPfltH1dW7WeA6r40dJgATySKCsrEx+jYzyf/za96WrpzePWyq9VU9ZmJKVH7bFgMIMssDUWEwb8abPfDkql5pp''@;'; put 'put ''xRx4pFNgDqTB+ySQI4EyFFPX/uKf++j7ab3MkSU/TgL5JqAXhFoT8//6/74s+w4dpRXTQ+BaG3PVRxMydVHwa2NGy0zZvcGRTb+Iekiw+FdFgVn8c8g98BGBuppqxF5+Hj3G5zD20kfzwqGQwPUIaCzmD372nDzx1POMxbwepGE+39DkyJrPxKVME36wjqBaMkOoiRnvE3nmX6LS1YYHXFwCFJg8''@;'; put 'put ''EEjAIwIa0zVz6kS4x39XKivK3dJEHq2aqyEBEsgTgSjKie3ef0j++n99Vdo7u/O0ldJd7S0PJGXJaiT8pILtKlcr5raXHNn2Iq2YmaOdAjNDgrckkCOBCIo43718qfzRb3+GsZc5suTHSaBQBLSkWHtnl/zZ3/yTnDxzDlnBQbWzFYro1dupqHTkQST81DZqsGJwa2MaZkh6Omx56p9i0t9LK6Ye''@;'; put 'put ''BRSYV38X+IgEhk1AC6u/a8298kUUVo/H48NeDz9IAiRQOAIah5lMpeSvkE2+e/9hSaELDRdvCcy+LSV3vg/p5AEvW6RWzA0/Fdm3KeItwCJdGwVmkU4ch+0/Am6Cz0Or5XOPv48JPv6bHo6IBK5LQK2Y/x2dfd7YsQveBwrM64Ia5gtmxJEHUHy9aTriMAPc4ccMh6TlnC3PfqlMrJRGnZb2QoFZ''@;'; put 'put ''2vPPvfeQQBm6g7z7wZXyeWSQ04LpIViuigTySEAtmPr31//r3+TNnXsoMPPEeuJsC1nlKQmbwXWTK7pw1JCXv2PIiT1sH0mBmacvE1dbegSi6HG86s7b5A9+45OSSCRKDwD3mASKkIAm5/X3x+Wv/kELrh9hqaI8zaHa81Z9NB74skUqME/td+SFb0TdC5c84SyK1VJgFsU0cZDFQMDED9WCOTPk''@;'; put 'put ''T3//NyUajTBZoBgmjWMseQLqHr/Y2iZ//rf/JGeaL5Q8j3wCGDPJQp9yWDHLkEgV1FwqKGkH4abPfSUqLWdKO9mHAjOf3yauu+QINI6ulz/7g9+UaZMnSjKZLLn95w6TQLERiCG05c0du+X/+fK3pLOLZYryPX93PpaQ2XdgK8ngli1i4fX0UUSBme9vE9dfUgQqysvkU+hB/n70Iu/rQ+VdLiRA''@;'; put 'put ''Ar4moO0iv/KdJ+WZl9ehqw9DW/I9WTVjbHnoiwkB9sAWXw8ZIenrseVplCzq7SpdKyYFZr6/TVx/SRFQN/nCuTPlT2HF1LqYrKlXUtPPnS0yAmF8R1svtclf/M8vy4nTZ/l9LdD8LX8oKQtXBrv4uloxX/+5yJ6NpVuyiAKzQF8obqZ0CFRXVcjvfPojsvruFSxXVDrTzj0tQgLaJvJHaBH5fbSK''@;'; put 'put ''7O3rL8I9KM4hV9fBivmFuFSMMiSEwvZBDMc0IyG5eNqW576MkkVWaZYsosAszu8nR+1jAgZKnsydNc1N9qmqrMDJhXX1fDxdHFqJEtAWkafPNst/Q4H1U7jlUlgCyx5MytL7gm3F1LqYz3/DlLOHSrNkEQVmYb9T3FqJENCi6+9F0fXPfOS9rIlZInPO3SweApnal//wb9+TdZu3SYIJeQWfvMpa''@;'; put 'put ''Wx6GFbOyJrhWzEjMlEPbbPn1E7GC8/XDBikw/TALHEMgCdSOqpbf+8LH5a7ly5jwE8gZ5k4VKwFN7PnZcy/Lt3/8NF3jIziJSx9IyLL70KI8oC0kQ8jviSPX8+l/jkh3uzmCpEdm0xSYI8OdWy0BAmolmTCuUf74dz8rM6dNoSWzBOacu+h/Ahp3ueGN7fKPX/++tHV0+n/AAR5hZQ2smF/shxXT''@;'; put 'put ''DGwsppvs8zSSfdaVXrJPSQnMD73rAdmyY4+cOHMuwF9Z7pqfCGhW+ewZU+SPfuszMh5iky0k/TQ7HEupEVBxuX33Pvm7f/22nG+5VGq778v9dWMxVyEWM6BWTDfZ55TIs/8axT6WVrJPyQjM8WPHyD/+1X+Wvv6EfPvJp+T51zayJIUvTzfBG1QYnULmzZ4uv//FT8j4sRSZwZth7lExEFC3+Ft7''@;'; put 'put ''9ovGXZ670MLzv08mzc0o/3xCKmpQFzOgDX4MeMd/+bWINB8tLTd5yQhMtV5+8RMfcntEa+2z19/cIV//4c/k9Dm2BvPJeSbQw3AtmdOnyP+OmMypkybQkhno2ebO+YmAhqqouNy09S350reekOaLrX4aHscCAssfRl3Me4ObUa5u8r0bHdn482hJzXdJCEztNfs3f/IHKB0z3RWYOsN6wmlta5fv''@;'; put 'put ''wJr53K82lHxT+pI66vO0sxH0152xJCnHdoYR2P3O7g36Qzd5wjhYMj8pc2dOc49FFmLP02RwtSQAAnru17/nX90Az9XTcqm9Y9BzvXaXKa+25eJJU6xUabkx/XCg1IL/WmSUl5WHAtndxzBD0ttpyy/+MSb9ve/8bfDDHORjDCUhMOfOnCr//f/8A5ffwB90PfGoNXPd5q3yjSd+LufOt+SDMddZ''@;'; put 'put ''AgQM05GJsyy58wO2rH/ClDOHr+8Kmdg0Vj72vkdk5R23um461sksgQOEu1hwApFIBCFRcbeQ+lMvvubev94glqxOyrRFlrz6g6i0X1CBSZF5PVb5ev6u9yZk1gqsPaA9yrVk0Ws/FDm8vXSSfUpCYH7+8ffKR977yHVLxag1s6X1knznx8/IL3Glq5YmLiQwFAKxCkfu/WBCpi4wZd8blqz/cfSG''@;'; put 'put ''x9Go6ip5cOUd8oFH1khdbQ2tmUOBzfeSwA0I6Pk7Fou5RdS/8t0fyzYk9aRS1292ECt35IHP9kvT1LDseMWRt16NSDLO34AbIM7LS6MnWbL2UykJwxMUxNY+4aghJ/fa8tK3UBOzRDRG4AWmFrz+u7/8Y5kAq1EqlbruF2OgNfPrP/gZ43SuS4ovXEsghMj0xsmWrPl0SiJRuEK6Q/Lq90y5eOr6''@;'; put 'put ''VkxdRzhsytwZ0+Tx9z4kSxfMdVd7o2P02u3yMQmQwNUE1GqpHoFNW3fKE2gBefTkmZsm88y9PSnLH4U7PWJLd6sjL34rIh0t6sakyLyabn4fqXdx9ccSMmURuKfswGlM1ZSJhCPP/EtMOltLw00eeIF5y6J58pf/4XdvKC4Hfm20jEXzhYuuNfOldZsGvsT7JDAogUjMkYX3pOSWtTgvxtVSEpKj''@;'; put 'put ''O0TW/ySKk+TNf6SqqyplzT0r5D1rV0lT4xj3WKXbfFDUfJIEBiWQMRBo68cfP/uSrEedy55eVLi+yVJWKXL/J/pl9ER8a2E4MyKGbPyZATcmYjGTN//u3mT1fHmIBCbOsWTVRy0JG8ETmIrCrYn5FGpiri8NN3ngBea/++zj+OFefV33+GDHv8ZlGqhfqLGZas1kvbTBKPG5DIGySlvu+2hKmmYI''@;'; put 'put ''fpRs1/uRiBsQmIac2pddD1rtXz5pQpO8a829surO20RFZxLt62zbzmyGtyRAAtcQ0PO09hS/1NYhr76+RZ59ZZ2cbb54U6tlZjWL79N+2BCXhoXPwKuAOLkj20U2/cIcNFEv8zne5oeAiVj2Bz6TkHHTMRm4Vse/gVrCkZCcO+7IL/81lpXxodh3PtACs6qyHO7x/ySNo+tdt8lQJ0utmWebL8Ca''@;'; put 'put ''+bS8suGNoX6c7y8FAjB71DXa8iBOiuXVhjj2ZZsljB8Xz4TkV99DokFX9u6QCC5utDD7u9aslOVLF0hlRQWFZikcR9zHIRFQYanu8O6eXrf80DMvr5MjJ07dMNby2g2MnoALQ7hkK0bhO+uEXDGj2b7tLY689I0oWvtl/729dt18PHwCs29NyR3vx4V6EAuv43fBxm/Ecyi63nr2xiFUwyfon08G''@;'; put 'put ''WmDeccsi+bM//O0rpYmGg12tmRo0/hqujr/xw1/IxUttw1kNPxNQAiE3e9yW1R9PYA9x9rh8yZ2O4Tbk4JtqDYkM+Wo1Go3Iwjkz5dH775FlCPMoRyIaLZoBPYi4W1kTyLjCu7p75I0du+S5V9bL4WOnJAFr/1AWDWu57/G4NM3UsjiOa710P2+EJNXryAvfjkjrGVwwQnhyKSyBWLm2j0xIbaOq''@;'; put 'put ''McxNYTef962pm/zN5wUJZcF3kwdaYGrnlEfuv3dI7vHrHV1qzTxx+qzbBUjje7iQgBIwI47Mvg1X3O9xXPf4QCoqMq2UIVtfCsm+jcM7mcSQpDYf9VvXrrpLNJ5Ys89VaDJGcyBp3g8yAb3A1wt9FZda7WPz9l3y8vrNrrBM3iBx83pMVFAufzQpc+9QcZl2jV95r6snHSTpReXUIQjMEmvtd4XD''@;'; put 'put ''CN9ZtgahC6uhL5GwFTSBaYZD8G7Z8uyXymDNdA+4Eaadv80HVmBWV1W42eNjGobnHh8MuZ7kUjjgX8HJ7Xs/fRaF2jsGexufKyECboLPyqTc8kBIkv1Xl0JxTx34p79fZPPTYTmOAuzDXdR1PnPaJFl91+1yx62LZXR9nRufqVnnA2u7Dnf9/BwJ+I1Axg2ucch6cb9u8zY3eefc+Yti5RCbvOje''@;'; put 'put ''pCy5X4uwXyMuLwMwIADW/ciU47tZdH2kjgktvP4QCq/HKnARAIUZKJGJ3wS1y/7yKzFUGgl2GEZgBaYX7vHBvlx6Na1B5afOnHM7Q6zfQmvmYJxK5blImQ1xaSGLHPWB3Qzyq/fcFZk4h/ShdNHrPzfl1P7hi0xds7acHNc4Wu5evtT907aTGoumQpNWzavZ81HxERhorezs6pY9Bw7LrzdtRS3L''@;'; put 'put ''/aKPc13m3YlqD2uQpQwXuSB/bjDhYmom+c8NObLNlBQzyXNFPqzP60XzqscTMn0JrMioYTrYPA1rxT75kLrJt73oyLaXgt06MrAC8w/gHn/YI/f4YMdkxpr5MkoZfe+nz7ktyAZ7H58LNoEoijQvfwTuttthwRxEYOreuyIT8dx9+H3c8kxEju3yJri7sqJcFs+b5XYEWjh31lVWTWafB/u4C9re''@;'; put 'put ''qftbL5QSiYScPnferWP5OnqHHz911vUa5bq/Wqt28aqULFrliBmGsryOuNTtqMDc9DTip7ewVFGu3HP5/CQtWfQxS8xQ8EoWqZu85QxqYn45hjAA9xciF1S+/WwgBab+8P79fx1+9ni2s5WxZh4/dcatm7nxTRQ/5FJSBKIISF/xrhTiMK8vMBWInkJCSCCI9zuy5dmwHNkRfjuxIEdiGavmbUvm''@;'; put 'put ''y+1LF7lZ6FWVlVdc6BSbOQLmx/NCIJOwo8fnRcRW7oCV8nUUSN8Nq6XWsNTzqxeLdupZtjYps2+FuzWEMJYbiEvdHgWmF9RzX0cYhe8f+kJSGiYgy/8mc5b71gq8Bj20YaV9FuWKWpBMFtQlkALztsXz5S9QXF2TIQqxqDVTg83Vmvn9n/2S1sxCQPfJNrIVmDpc9+cS5xKtkXkAVa/2rotIf583''@;'; put 'put ''P6IZHBqrOWVik9yK74AmBU2fPFGqUFNTf8TVhU43eoYUbwtNQAXjwLhKTdjZd/g4ROVbsnv/YWnr6HSPUy/HpaWIboWHYfy0ECxFsIRl4WulwPRyBnJb16KVCbl1LdKyApjs42aT/xLZ5L8aXgJobmQL8+lACszf+fRH5L0P3+9J9ni205CxZh5FLTbtab5p285sP8r3FTGBoQjMzG4asGTqD93p''@;'; put 'put ''QyI70fc4X4HeGbG5ZMEcWTp/jkyfMtHte67HaiZmkwlCmVnhbT4I6LGmF+DuRTgu+NVSue/QMXlz5x5XVLZeakclmixU3xAHZ6B82PRFKVn2kC1V1TBaarmbLDdDgTlE2Hl8+6gGLVkUlzJN9sF2spzCPI7Iu1WbKLp+/pgtz32lDPvlraHBu1HmtqbACcwYEnD+7i//o0wcP879Ec0Nz9A/rXFE''@;'; put 'put ''ccQRaZvJH8CaqVflXIJLYDgCU2ngd9d1mfd02LL39bAc3prfziFhxLiNbqiTeTOnydKFc2X29CkydkyDVKD8llo3VXDqLQVncI/VQuxZxkqp7m+1Vvb29sq5Cy2umNwOF/jBo8elvbM7r8dZ3ThbFt6bkinz1d0N3+oQO8JQYBbiSMluG3o+uu+jCZmq/ckDVnhdfwOslCNPfykq7Re8icvPjmrh''@;'; put 'put ''3hU4gTl/9nT56//8++4JbKR+LAdaM7/15FPyxvbdhZtRbqmgBIYrMHWQes0aQucQB7XQzp90ZPc6U84eNGHR0Vfyu1SUl8nUieNl7qxpbp1NzUYfXV8rZSjoPtCdPlLfofzuPdfuFYFrBaWGJV1qa5ejJ8+4sZR7Dx51Swz19ce92uR11xOrcGTWLRYS7lJS3aAu8eytlgNXSoE5kMbI35+yICUr''@;'; put 'put ''P2KLgeDZIFkwlay6yTf+AuFSG4LpJg+cwPzEBx6VT33osYK6x6/3FXStmfGEvPDaRvnhL57HlXvX9d7K54uUQKTMkVsfTMmCuwcvU5TNbumVrLaoS8RD6F0usm+TKRdOGp4lOdxsDCoStID7ZFj9Z02fLLOnTZGpk8ZLQ10N4jer3I9r7KYKT1o5b0Yz2K9nBKW6vNVCqVnfbe0dyPy+ANf3UcRU''@;'; put 'put ''HpWjJ85IB851+XB9D0YXxlKZNC8lc++0ZNxkvAPfJ0fF5WBvzuI5CswsIBXwLVGUglM3ee1YnBMD1tknHDXk5P50a1LXrVVAroXYVKAEptp9/vbP/73MnTm9YAk+N5ukjDXz8LETbt3MLW/tudlH+HoREUjXwYRL7h7numWKst0dFZpm2EA5IwdFnpEIhDIpl86NTIZheVlMxo8d48Ztzpw62b0d''@;'; put 'put ''B5e6CtFYLOZ6CCg6s53Z4nxfRkxm3N26Fz09PUhi7HRLCR08clwOHjvpWijbO7pyKn4+HEIGSg81TrNlHoTlxFmOhBHTZqdyt3JRYA5nNvL7mdseTsqiex1P5je/Ix3a2kM4vff3iTzzTzHp7lAFE6wlUAJzEiww/++f/xEKoaP3c7YR3QWaz0yNt2fRO/eJp17wpGhwgYbOzdyAgJcCM7MZTQIK''@;'; put 'put ''oU5ab7stpw5qPb6wtJ5GweHMG0bgVksh1cOiqaJTrZuanT5p/FjEcY6WqsoKt/mADku/d5nuQmrt5OJ/AiokrxWTOo+9fX2uJbL5QivqUZ6RIydOywk0mGhGTKWWERqpc6y2ehwz2YErPCkT54VEyxDZiGXz6pRPgem/Y7ZxkiUPfDYpEfSpGMnzYD7IRGDF/NX3DTmaQ6e3fIzLi3UGSmA+uuZe''@;'; put 'put ''+b0vfMIX7vHBJidjzTx09IR880e/kG274A/lUtQE8iEwFYhey2rdTG1b19dty2kIzcNbDblwIoxSQ/5ApolDtTXVEJ2NSKobK9MQx6kCtHF0HZ4fJeWI51RXqgqRgcIz89gfe1E6o8iISL3NWCV1LtTN3dvX77q6my+2yqmzzXLyjP6dkwstl6Srp9cNjRhpUobhyNgptsxCjOXEWSJllegknsyu''@;'; put 'put ''9NBQxk6BORRahXmvzv3azyVk7FTIy4DVxNQ4zP2bHVn/k+B19QmUwPyT3/ui3LPiVvR+RvNnHy9qzexH0Pvzl2MzvWiB5uPdDfTQ8iUwB0JzXefoLpLAYX3huCOHUKT9LARn3OMamgO3Odz7Kl40gaihrtYVm01oazmhqdFtbzkG/dNrRlVJGVzs6mbX92bEprrb9T5jPIdHXlnqonGRumQEZOZ5''@;'; put 'put ''tSr3wSLpCkm4s1U4nm9pdV3dZ5svuI870IqxHzHjflsiMVvGz7JlJhJ4xk8NSaRMs2+9F5aZ/TZhUdryTEj2bcbFHFtFZrCM+O2ilUnUxNT42mC1jtT4+84WR57655gkE8FykwdGYNYgNuzv/usfuz9sxVBMWk/8+iOrcUxf/+HPZMeeAyP+BeYAhk6gEAIzMyrVEBqjaSHQvf2cI0d3m3Jyjykd''@;'; put 'put ''LSMTp5kZVza3eryXxaJSO6ra/Y5qiaTG0fVuqSTNXq+HxVNd7eUQp2r5VIGUEUeZ5KKMyz1zq4I0yEtm/3UfM8JRb/VPX8u8nrFCqiVSs7XV4qgXrS2oMdlyqc0Vjxdb2+QiHmvyTWd3jy8skjebu+p6W6bMtWTKEktGNxk49vMrLDPjCcdMefM5ZPa+jl7kCf9/tzLjDvpt3Vh09vl8XKLlOBEG''@;'; put 'put ''7KuvrUyf+2oUyZ3BKlcUGIG5fMkC+S9/9Du+Se7J9svuWjPjcXnucmxmF07+XIqHQCEFZoaKXuMaEJp6UurucKT5aMhNCmo+HpaED62amXHf6DaGuOnKigokEVVKHcTmOMR2ahZ7fe0o192uF5DaAlato5qApK73KGreZsTWwHVnrKAZATpQkGaeG/j+wZ4b+PpQ7mdE37WfGSgIM2Ix81zm8cDP''@;'; put 'put ''6Jj1QlnL/miXsP7+hPQn4q4FsqurxxWJrSgHpHV222CRbEPiTXtnp3R190ovPDhxH1oiB+7f9e5HY46MnmzL9IUpWC0dqarViEsk76gr/Hof8vh5V2D+MiR7NxoUmB6zzWV1eiRoHOb4GfCRB9BNvgVdfd4KWFefwAjML3zs/fLh9zzk2/jLG32x9IdGfyw1NpPWzBuR8t9rIyEwMxRcZwoMLOEw''@;'; put 'put ''LC1wGbZfQJmj/SGUvQhJ+9mwpHwSq5kZby63KsJUhKq4VAtnNdpfVsPiWVUFUYpSSlUQn3rfFaF4PSNEowhH0e9WBIxUlCorXZcmLelt5k+/g3o/I/oGik59buAy8DV9Xh8PFLV6P/Onr6UwESoSUyoY9RaP47ioVGujuqTVbd0HUaiJM92wPnbjtqcHf3Bp62N9Xl+PJ5KucLQCljylZYZqYZ2a''@;'; put 'put ''NM+SSbNTUjcOc4VwNHWDj4SQoMAceLT76/78u5Ny+yPBc5NruaLThxx54d9w4F9zvvHXDAxtNIEQmJps8D/+5Pdljo/KEw1tGtLvVmumZm4+89Kv5cfPvoQfF9Qv4OJrAmmBaaFM0fDrYHqxg65VE3GayAtC2QtbWs+F5PQ+Q84eNqT9IkoUW1eLJC+26fd1qDDUdpkqKvU2ghRUFZb6PVOxqm54''@;'; put 'put ''FaDu87hv4P1agSKzpD+f/mzmpG+hm4i6ogfWeFQxmYD40+fSVseUKyRVTCaT6fsqKlVgaiykPqf3rxWqme2Wwi2mREY1WjIB1qjxc2wZPR5JO2gHiOiPglorB2NNgTkYFX88VzvalrVfSCDBCzoMx0qhrNr53ntN6OzvseVpxGH2dAYnLCMQAnPCuEb5n//lPyCmMVr0J233Rw0/egcQm/nNJ34u''@;'; put 'put ''b+09mO9jm+vPgUAELr0lq5KyZE1Ikv3+MBnqBbDGamoqerzHgtg05MzBkJw7Epa2i5p5W3piM4cp5kc9IqDflfomW5qmOzJ+puVaLcsrTJyzCxNbme1uUGBmS6rw70u7yRNwk2PbASy6/tK3EFe/LzhxmIEQmA+uvEP+/W99xvfZ40P5OqpbT62Z2gHoyadfHMpH+d4CEtAfzcWrUrJ0DSyYPhGY''@;'; put 'put ''A3dfC/maprp+ITZh2VSBqTGb546giPtZXDX3BudqeeB+8/7IE4CxGDGUSNCZ5EBUWtKI2pVV9WiPF0NNV3i/1Rqst35bKDD9NiNXj2cB3OTLH4X1El6BoFgwdQ+1XNHO1xx549nglCsKhMD8w9/8pKxddXegBKYecGFYMl9EKaO//+p33dgwfY6Lvwj4XWAOpKV2SwNudBWdVkqk+5JaN9EH/Sha''@;'; put 'put ''U54ypas13a5y4Gd4nwSyJaDHVeUoGzGUtluvcgySdWrHiJRXIeMdFzl2ErGqKiqzXeEIvY8Cc4TAZ7lZtYKv/SyyycuC5Ykx0YnqwklHnv0SOqW5lZCzBOLjtxW9wFS3+N/9xX9EoedxbnyTj1kPeWgaj/S3//w12bRt15A/yw8UhkAxCcyBRNxTM+qvhdWVDh9lf78tXZccaT1jysVTIbdzUOcl''@;'; put 'put ''uP3jeJ0LCQxCIBKxpbJORMvHjJlkS8MEW0aNTgvKsApKnMDUSjkSiTqDDDfrpygws0Y1Im8Moej6Q59Lyli0CRVEJfn9giVbSOplSiYcNw6z81IwzrtFLzBnTp0kf/Onf+hmgAYpaF5jMc+jq8b/8X//vVuKJNuDlO8rLIFiFZjXUnKtmxCb2jlIY5v6+yzp7RBkpqvgNORSc0g6kKXe14NEjBJM''@;'; put 'put ''GLqWV6k9Nk0HiRW21DSK1I+33VjKukZHKmsdtGpEghQuVhyrOAXltXNJgXktEf89Xnp/0g1LCpqbPIIarK98PyTH3kLR1wAsRS8w3/3ASvnfPv/xoixPdKPjx0TW67pNW+Vv/+UbN3obXxthAkERmNdi1KvpEESDxm+qjcCCe7OvB3U320XamtPCU0VnF660412oF+iP/KZrd4OPh0HAjDhSUenA''@;'; put 'put ''GgkX91gISlgoa/Cn1spyFLlWV55mkLkxlBCVmqQTpIUC0/+zOXZKSh74TEq0GkGQDj+Nw9y93pZNT8X8PwlZjLDoBeYf/+5nZfXdKwIXf2mgbMo/ff378sJrr2cxjXzLSBEIqsC8lqdKCoHW1DI/IbVyQlWkIDrjKK3RC4HZAfd6J8ohdeBPYzl7ukIS70bXIQrPa1H65rEBq2SsDFbIOojJBgdi''@;'; put 'put ''0pEaiMpR9RCYNfoa6oWqmMTVhpPCRYbW38T/QfpBH2wyKDAHo+Kv5yJRRx7+YhzxvojvxbkoKMdkJg7zuf+fvesAkKo6u2fq9mVhadKLgKggCAFEaVKEqMRobFEsPxr9TTEaY/1jS6ImakSCYk9ETSxYwQIiUhRQmoICgvTey9Zpb/7zvWUImIXd2ZnZeffufbq8KW/uu/fcO/PO+8r5ns6gI8n+''@;'; put 'put ''1XUW8HH2RmmCKaLLj933ezRv2kS7+EvRwLzzobHYuIXmIrM5FoG6QjArmwD750/4x0FLp1g9o3Svh4KWrcVZVuShm53Ec7cbxXtJPPe6+Jxu9mLGGpW5qRXJUHb5kNlShoDA62WsZEZuFHkFTMKhS1tIZB5JZC6JZQWRpP4nM7tFi0+skTHLpFy1dblwxwOwIZjxoJW+Y08bGUKnXiSXCiSOVRcl''@;'; put 'put ''+b6yYBfjMP38vVQ/DlNpgqlr/KVUFFm6fBXueeTJCqtBdVenOa7WEajLBPNoYNuUkf8cQTxJVSxaM0XKKcj6AeXllEg6IJZOkHSSgPJx7HmAcZ6BUrpgwxWE52jnMa/bxkXGP1rIzAIyKD6dXc9Cdj7lgbjPpUs7u4DPs/leLv8yaYEWFQFexYRISka3JBJC3NwGzEMIGIJ5CApHP2jNcqIDLuJN''@;'; put 'put ''alQvuSKp6jPtJephLlNfD1Npgnn24H749ejL9Iu/9HjxxqQpeOnNyY7+gpvOAYZgxrcKbIMl/7H1Oe1/SJLYhCTo8TrBKjcspxikXFIp7ISiAPfltHiW0Q1fStIpj4OyLwHCAR7HYyMhciT+CWkSd64OmwzD440yy59/JI9+ksPMbBJJEsUsWiOz+ZdLi2RmHl3ZfD2DsZHiNpQkATevSzaJFFxp''@;'; put 'put ''JRZhIEnAERZpiGTVq8MQzKoxcsIRObx5GnFNObLzeNMka90JnUpCHyQOc/H0KBZOUV8PU2mCefN1ozC0f1/t4i/FRfXHMU+bKj5J+LKmugkhmKcMDOOUMyusc6k+n+7t2/SQ/0hWslw13EJC+X/sdYtEyWKN6jCJU9gmli6EKe0RJNkM0TIaLHfzMd30tJAG5LVyPqbUUohup3CQf6xiJMdLNSPL''@;'; put 'put ''kox4WvKoCRqReCe2Lao60YNZ8rYqRXXjoFi3znb3sxmGT9N6K8/lsdQ4j3I8/GNiqNTY9rIapawbL//8GSSG3EsspJe6fhlZFnx8LNZGv7zG432Mg/SQPHp9UkedbUs9UG5CqKOMixQrpC1YLiRdl6tsGhe6IZhpBD/OUw+5IoDmHfghfgl0Wfpiwdy8ysJHz2dU/KbEiYmTDleWYEr9cYm/bNOy''@;'; put 'put ''uXbxl9t27MKtfx6DomKaaczmaAQqapFbrEUuRMZktNTWZNkU6yDREtIlm9t+zndihFRelAMlN4XMS3JU5B8hZBYJakQIWUTqtHMvx9jvSz3sCqJm8T2JKY0eg2TKRY2foLWRpxViKScUQsm+CMEUUul2W/Zzed8jfeSf/X6MLB68Mh66QNp9kc4c7JP9gP2wXzH/pBoBQzBTjXDy2u/SP4Qew+Sm''@;'; put 'put ''UB83ufw2lBywMOmJDOUrrSlLMFtSWP3Ru2+GlFTUSf9S5IlmzV2AR556MXnfQtNSyhAwBDNl0Ka04UOe9IMPSPsqyOhhZz10zGGvHevhD62HRzw/+OSI147VmHkvbQgYgpk26OM+cdM2EQweRbkihpJocwNm34O68OFzXmxfz7tShTdlCeaAPj1w269G0w1G35dGm8gTPfvyREyeNkujUek7FEMw''@;'; put 'put ''9Z1bM7K6iYAhmOrMu4SUDL8myJKkZGW8e9OFZEoc5udvA8vnMZ5G4U1ZgnntZefjgrOHaZXgIzFcpWXluPvhJ/D9uo0KL6u603VDMOvOXJuR1g0EDMFUa54HXBxA2y5URtBIrkiS9VYuiGL2RLUTfZQlmA/e8Rt0PbETs0gZua/JJgRz3cbNuOPBsSgr18syq8kU/dcw/FlR/GhECCf0krrdJgbz''@;'; put 'put ''vwAyLxgEFEPA6/dg/ocuLJ/rsZPCFOt+netu59NC6H22XnGYHhaz2L05iklPZVYk8Ck6q0oSzHp5uXj8/ttQvyCfgfkVwfCK4n9EtyX+8pPZ8/D4c68c8bp54lwE/HTR9D47jI49DcF07iyZnhkEqo+AaIXOm+zGyvkeW22g+p80R6YDgYYtwxh2ZYRqC/q4yEUpIlAaweTxWSzPa0eIpwPahM+p''@;'; put 'put ''JME8sWM7PHjHjXZyj04JPqY8ZMLrudYbEILZ55wwOvQwBLPWwTcnNAikAAFDMFMAagqbrIjDDDAOk7IMGsVhyjqc+k9KFq2kFIWim5IEU0eB9Vj85f/9dRzWrN+k6HKqe932Z0dxxnkhtGEMUDhoXOR1bwWYEeuGgCGY6s3ogEuCaHMy+61RHKYk+sybBHzzmbqJPkoSzBuvuQzDB52hlcC6ib9U''@;'; put 'put ''70dNemwIpprzZnptEDgaAoZgHg0Z577e5Ywwegyni1wjPUxJ9Fm1MIpZb6ib6KMcwfRQVfmvf7gJndq3ZVk5lvLQZBP3uOhfPvr0BE1GVDeGYRPMn8rds9tYMOvGlJtRao6AIZjqTfBx7cMYfFmElbP0icOURJ+ddGZ+8JSfxR/UjMNUjmAW1q9nJ/jk5eZol+Dz3CsT8d7Umep9u+twjyX+p+95''@;'; put 'put ''EbTtKqUIjYu8Di8FM3RNEDAEU72JzM5jXfJrA8gpYF1yTeIwJdGnvJgVfcZnoPQA40sV3JQjmCd1bI8H77zRJpc6JfgEgyHc99hTWLZyjYLLqO522ZYpGh7GCb1Zi9zIFNXdhWBGrg0CQjDnvOPG94tNFrkqk0oVTAy5OohmbSm1XvG/Kl0/ej9ptJTQuY+eZ0WfdWpW9FGOYOqY4OOm23/rjp24''@;'; put 'put ''7U9jsL+o+OgLzrzjOAR8GVF0HRhGtzNJMMuNBdNxE2Q6ZBCIEwE3XZOzJ3qwbikJZlhN12ScQ9bicNEjPvmMKKywpVVFn5lvuLBqgZqZ5MoRzBuuvBgjzxqkVQUfIZiLli7D/Y89o1VddS1+taoYhMcfRaeeYfQ517jIq4DKvG0QUAMBcsqZr3qx8TsPrIghmGpMGnB89zBOv4C62Jplki+ZGcWX''@;'; put 'put ''H6iZ6KMcwdSxgo+XAusTJ0/Fi29Qk8BsSiHgZlB5i44WBl7KilKKBmIrBbjprEEglQiQT4aZOzp9At2SGzy84TcEM5VwJ7PtwuYRnHVVCF41uVilUHj9bmxYbmHahMxK33f6i0oRzLycbIy5/1Y0KmyACOUItNlcbjz61D/x2ZeLtRlSnRmIK4rCJhaGXhWEP4eB2BYDgMxmEDAIKImAy+NCyd4o''@;'; put 'put ''Ba79OLBbyKUhmKpMpCRcjvhFAPUK+TusSaKPm+tx306WjHwyQ8mqUkoRzLYtm+ORu2+mFIHcWepzIS8pLYMIrK/buEWV77Lp52EIZDGD8czLgmjc0s2YLX1Klx42RPPQIFAnEJAEn62rgRl0kZeXqJm5WycmqpJBCicYdgUTfTryTd7o68AQmOODQAB4/wk/ivaptx6VIpin9+yGu377CwJOxDXZ''@;'; put 'put ''JEts/aYtuOPBsSgtK9dkVHVrGL5MCz2GRnDSGSbRp27NvBmtbgiIuPXS2cDiaR6qQqh3QddtPuIdT8/hQXTpR36pUaKPWDE/et6DbWvVS/RRimBe+pPhuPLi87RK8PEw/nLO/MV4aNwL8X6XzPEOQUDiMFt3ttDvYgZvGQOmQ2bFdMMgED8C4iKf9ZoH65eZBJ/40Uv/Jzr0CKPvT/VL9Jn5OjPJ''@;'; put 'put ''FxqCmdIV9rvrRmFI/75alYj0eLx4/b2P8PJb76cUO9N46hAQ10y9BhYGM8C8XqGLmac6OGdSh5dp2SDgRASEXBbtAab904v9eyjYbeIvnThNx+xT41YRDL0yDK9XDxe5DFZqki+eHsXCKeplLyljwRQpn7/e9Vuc0KGdViUiwQSfvz39ImZ/seiYXxzzprMR8GVY1MKMoOsAI7ju7JkyvTMIVI6A''@;'; put 'put ''jxfyZZ8DC6bSPV5u3OOVo+TsV7Pzo/gxE32y85mexft8HW71JWxj9WILM17LcDb4lfROGYKZn5eLscwgb1C/QKsMcom7/MNfn8CaDSw6ajZlEXDx16xxS1oxR1EmQxQljKtc2bk0Ha+DCDCZwmKEy7SXvdixnu5xy2SPq7gK3O4oho8OoFEr9p6/wToQTEk827HBYk3yTOXGowzBbN3iODx69+9o''@;'; put 'put ''+vZqk0EuCT5bd+zCrX/8G4pKSlX8Pps+H4aAP9tCn7ND6NDDbcpGHoaLeWgQcDoCYiVasySKOW97ESgz1kunz9ex+tf/oiDancLikeGIcoSssnFJkk8RpbMmM5M8oJhlXRmC2bt7F9x98/UIBilorckmcktffbsC9zwyXhvSrMnU1GgYYsVs0pqSRZeH4MvgD5zRxKwRjuZDBoFaRcDNuOkwxdVf''@;'; put 'put ''8WLrGje/t8Z6Wav4J/lk3QeHcMogWi+pla2DBVOkisIh0cIUbVa1apIrQzBHDhuIG666RKsMcjcJ5kfTP8P4Ca8n+StmmksXAiJZdOqQCE6mVIapTZ6uWTDnNQhUHwE79nIukyg+8iFYbshl9ZFz5pHtu1WUjHRZ+tQkFyvmlBc8vAFSK5NcGYJ5/agLcd6IwVoRTJEoeu6ViXhv6kxnflNNr2qA''@;'; put 'put ''QBT5hYzFvCKEgoZGeL0GAJqPGARqDQG3102rkIXpL/uwb4e4xg3BrDXwU3Sixi0PZpL79Mok//RVMNnHlyLUUtOsMgTznpuvQ+9TT9FKZD1CF+pD457Dgq+XpWZ2TatpQcDWxTw5gv4XhCtcNDr4adKCpDmpQSCFCJBLCp2c/ZYX67/xsAqXIZcpRLvWms6tz0Sfa8qRnVshNKXDz69IFc2fEsXX''@;'; put 'put ''09WSKlKCYEpijyT4tG/TUiuJIikRKRV8Nm7ZVmtfPnOi2kHAli0aEkbXfi6T8FM7kJuzGATiQkASe5bMAr76xFTtiQs4hx/s9Vn48bVBFDQlwdSkJrkQzGVzLcx5Ry2pIiUIZv16+Xjsvt+jQUE9bSSKJIN809btuP2BMSguKXP4V9Z0ryYIZLNG+ek/C6JVJ7mARWrShPmMQcAgkAIEhFyu+9bC''@;'; put 'put ''3Ld9KC02WeMpgDh9TZJUDtWsJrnX78b65VF8MsEQzKQvrNbNKVF07y3wMilGqqbosIlw/JLlK3H3w09qMyYd5iWpY2BWeUFDCwMuCaGwmQfhoCGZScXXNGYQqAECQi63r4tg1kRm5e4St7hxjdcARkd/pO/IIDr0Zhc1qUnu8bqwa4tFqSLRwlRnvSphwTy1S2fcd8sNCIepJaHJJgk+02bNxdjn''@;'; put 'put ''/6XJiMwwKkNApIsatrDQ/8IQ8iXpJ2QU2CvDybxmEKgNBLx+D/ZstTDrDS/2bhODRW2c1ZyjthE4ZVAI3QfrI1UkWeTFey28R6miYJk6UkVKEMxhA07DzdddqVcGOWuQ/+vt9/Hqux/V9nfPnK+WEZDqEo1bR9DvggjyCt3GklnL+JvTGQQEgRi5/OwtD3ZvFnKpjiXIzGB8CBzfPYTTz+fdgyZS''@;'; put 'put ''RS5qtQbKK8TWi/epE9KhBMH8+U9H4IoLf6IVwXTRRT72uVcw/fMv4/vmmKOVRMAuJdkqgr4kmQWNXIgEjSVTyYk0nVYSAdstznJ7c5gxvne7sVwqOYlxdLpZ+zDOvCwCj0cTqSK5F6LqzPvP+LF7i7FgxrEUqj70N6N/jh8P7q8VwQyFwvjT488wDnNV1QCYI7RAQEhmg+Oi6H9RGPWbMDzIkEwt''@;'; put 'put ''5tUMwsEI8MIs5HLjCgvzJnkZc2m0Lh08W0nrWoPGFoaOLkdGFudbkzAIDzVbP37Rg00rDcFM2kKRhu5lichep3bVSgOzqLgEdz40lpnkO5KKlWnM6QjQXU5LZo/hFpq1ZbUficnU5AfQ6cib/tUtBMSt6GHs2spFUSya4kPJAcrWSN09s2mPQBYVPEZcG0BugVsrqaJP/02x9a/UEVt3vIvcQ1fy''@;'; put 'put ''o/f8Dse3ba2NBqb8yG3dvhO3PfA4DhQVa/9lNwP8IQKs9tMwiu7UyWzfBRDBfVO3/IcYmecGgZojINYeqd+8ZIYb384RBQd14tZqPmrzyRgCumphzpsUxTefqSO27niCmZuTjTHUwGzcsFArDczvVq+jBfPv2owp9sU2++ojIHfZJ54W5p8Fb4bJMK8+cuZIg8DRERDNwOK9UXw13Y3vF3thRYzV''@;'; put 'put ''8uho6fmOzPiQ/wmgWRu6hyr+V36gIrb+9Ywo5n9oCGbSJrNRYX2bYObm5DAhTI/ECJEomjv/Kzw47vmk4WQaSj8CYm1v0awJ2rZqjhlzFlSrQ76MKFqfFEG3MyOsYe6i1cW4zKsFnDnIIPADBFx0h4tLfOv3Liyc5sbOjW56Bqoml16vB5kZfpSUlhtN4h9gqvLTARcH0LaLC9GIpUUUkhDMFV9E''@;'; put 'put ''8dlbhmAmbV22a9UCD//hJv5w6COy7vX58MG0WRg/4fWk4WQaSj8CebS2//LqS9H1xI544PFn8c1331erU5L8U9jcQrfBEbTsJO5yJgxGTGBmtcAzBxkEiICHVstwuYXl8zx0ibtRVlS9RIiC/Dxcf8WFOOH4tviUih6vT5qKsvKAwVQDBHqfG0LnPvw91URs3cc1vvYbC9NfyVRmdhzvIu92Uif8''@;'; put 'put ''8dZf6SWyTg3MV96ajNfem6LMQjEdPTYCcgN0Conlnb++Bn6/D6vXbcBD417A9l17jv3Bw97NzLHQqVfEdpln5Rlr5mHQmIcGgUoRsBN5pMrJJuDrT1l+d5WXxQyqtlpKYxILf93lP8MIKpR4mBAk1dXGv/gapsycg2AwVOn5zIvqIKCb2LrX58bWtRY+eCZDmWQ1xxPMAX164HZetMvLy9VZ2VX0''@;'; put 'put ''VFzk41jBZyor+ZhNDwTycrN5sboQg/v1sdeqXKwWLlmGR5+eQNdb9WvNu6nb1riVha5nhtGsHbGhIdNYM/VYI2YUyUVArJahsiizxF1Y9pkXxfuEWFaPXEpPenU7GTdeezmyMyvqO2dkZGD5ytWUj3sWe/cfSG5nTWu1jkCnPmGcdq5YMCNauMilXORuVqGaJOUiFSkS4HiCOXLYANxw1aVaaWBK''@;'; put 'put ''1vDDT/4DXyxeWutfOnPC5CMglpDj27TEPZTTys/LtRO35DVxcn8yex6efmkiQnGWOc3IjuL4U5kA1NdCfn0XPy9M07jNkz97pkXVEHDzQis0cttaF5bMcnPvqbbVMjZWuSEUb8MJHXgXd7BepHxng6EQ7vvbU1ixai3VHfSI+Y+Nua7t23Zl9bQLI3BpUs1HykUe2BXFJJaLDCmiiuB4gjnqgnNw''@;'; put 'put ''Gf/KyqpvBXL6FykQDOLuh5/EyjXrnd5V079qIJDh97MQQD9ce9kFR2i1ygXL4sXrnQ8/wUtvvh93AoHEZtZrZOFkksy23SIUjBbpFZMEVI0pMYdoiIC4w70kl/sZdbJirgurFnkRKK2+xTIGiZcepNGXnIezBp0BNnnE99LP7/LY517GjLkLEDBu8hhkSu5bdIxgwCVheDWp5uPmYi0psjD5yQyU''@;'; put 'put ''Fashu+V4gvnLqy7GucMGaUUwi0tKcceDjxuRdSV/tv6702K1vImutt6VFAMQkhlmFuMbk6bUOObW66sQZz/xDAvN20fh8Zn4zP+eBfOKtgjwwuojsSwttrBmCTNp57ntijw1cRN6GSt9+QVn85oykHGXzDI/aL2MYZeZmYm3PpjGGPn3UVqmT1hWbHx1ad+oZQRDrwzDx99PHXw/dj3yAOuRj/Mz''@;'; put 'put ''HMQQzKSs5VtvuAqDTu+tTQymEI7tO3eTYI7Fnn37k4KRaSS9CDRv2hj33fK/aNKoYaXJaBKPKdaQf7/9Ad7+aHqNOyuSRs07RHBCHwtNGKfpYdC3sWjWGE7zQacjQOuij2s8QJ63aQWwfK4HOze7a6xrGSOXI88aRMslQ1h+QC4FDonDXPj1t3j4qRdNEQynr48q+lef5SKHjQ6wXKSYqas4WIG3''@;'; put 'put ''uWS59hmDSQvmvp3VU0lI97Acb8G8/5Yb0JPB2IGAHtIRQjA3bN6G2x8YY+6Q0736k3B+uWh16dwBd914LV0xR5fSknkPMdj8dVoyJ07+uNKLW3W748uwKGdkoSMzzpu2isJtiGZ1oTPHqYDAQYtlIGhh80oXvvvCg+3r44+zPHyoonV5+fnnYCQtl+JqrIxcyvHiPhcDwL2PPmk8TIcDqODj3PoW''@;'; put 'put ''hl8TQHZuRcyu8hyTBJMLFx8+68fOTYZgJrwk5aL88P/dhM4d21M2Iphwe05oQKxZK75fa6r4OGEyktAHv89LC3sv/Gb0ZVWuUZl7SfZ5mfGYk6bOSDiJQCyazWjR7HCqhaZto8jIFHc83UFGQzMJM2uaqG0ERCjdy78A9Sw3r3Tju/nuhImljCGLWeJXXTQSwwaeweQgfj8qsVzGxirXnHAkgj+N''@;'; put 'put ''eQZLl69K+Dsaa9fsax+B7FxaMK8pR34Djzb1yOXm6KMXvHZiW+0jGv8ZHW3B9FOQXMpEtmrRTJs65EIyFi1dbmcqxj9d5hNOQ0AuXucNPxNXXDiyWmEcMv+lFHKe/PEMWjKn0XWe+I2Tx2ehUXOgffewbdnMLmB8DnOBwhQY1sE15LQ5N/1JLgKSFS4ZsqX7o9hIV/iqhR7s3kKLZVhMNolt9evl''@;'; put 'put ''4xfUuuzbsxuJJSu6HINcxs7k43XnEbrIP/9ycdzqD7E2zD79CPgzoxhOF3lBE1owOe/KWzAJqdfrxscT3Nj4nTf9AFejB44mmLE65EeLbavG+Bx3iGhgzp63AA+Pf9FxfTMdih+B7KxMJg2cg/N/PKTaiWhCMoOhMGbOnW8nE+zdXxT/iSv5hJtZ53mFFlqdGEGbkyw0aFbxg2SsmpWAZV5KLwK0''@;'; put 'put ''xEhGuFSt2rvTwoZvPFi7xI19u6pX3rE6nZfY6F//z6U4sdPxjF2jFmI1yKW0K3GYT00QwfW5DM1K/AawOn01xyQfAY/HwohfhNDguCgJph732r4MDz55xYV1Sw3BTHjFyN3nY/f+Hg3q17O1BRNu0AENCMGc8unneOKfrzqgN6YLiSKQk52F0Zeeb8sUxSOlJSRTJIwWUYz9pTcnY93GLYl25YjP''@;'; put 'put ''+/xRNG1DsnlSGMd1iCJfrJo0CEWMC/0InMyTWkSA68/jcdNaCQTKLGynjuXapR5sWulBeYn0I3GLZWw0XTt3pFfhXHRq36bSxLvYcZXtJZP8H6+9g/emfIpyQzArg0iJ19zuKM66OojGbcguNXHmSD3yT19zYTUlulTYHG3BbNqoEI/ddyvESmRpInorQeQig/GP195VYX2YPlaBQG5OFq4fddGh''@;'; put 'put ''Cj5VHH7E2xLvJURz3aYteHniZHz51TdHvJ+MJzwFsvMYo9neQuvOEVYJiiKnHpOR+J8hm8lA2LRRFQLi/pYqJKJ4sG8H6N7zYMO3buzZVvOM8KOdUxLthvY/DRecPQSNGzaokWEiKyuLcdKT8eb7/eqQVQAACklJREFUH5u65EcDWoHX5bdvyNUBNBOCqYkF08vqVQunulgW1afADPCWsfvgnxJ6''@;'; put 'put ''Z24tmzWlBfMWO7Ovuu4NZ47kP73ysA75y29OYjbx1P+8aB4pi4AQTCkROYQXtZqWM5Wbjn0HiuzEn/c/mR1Xacl4gJM7+uwCSh21i6A5s9AbtSTZzHezri3jNY1lMx4ozbHHQoDrSZIRhFTSM40DuyPYtoakcrkbO9Z5bNkhublK9taEBokLzxmK/n16IjPDXyNyKX0SgvnqOx/aig9GCzPZs1S7''@;'; put 'put ''7Q0eFUCLjjwnq6A5lujEAYkQzK8/BUmmP45Ppe9QRxPMDm1b4S93/da28mhDMEkmnv/Xm3h3yoz0zbo5c9IQSAbBlM54aHkRQfZFS5fh37y4rV63MWl9rKwhqRKUW2DZ7qPmrHjRRMhmfTf7IVpr4krXxKdU2eDNa8lHgHzRS/e3i+tHLJVFrLazbb0bm1eIxJCLLnAhlMknlbGB/KjbSbjkJyNw''@;'; put 'put ''PK8ZDLZMyOMlLvIXX3+Xv9GfGgtmDGBF9wMvDaL1yew8Ex51IJhy07ZmCTDztQwlZsTRBPNkBmf/+fZfJ/Rj4bRZcPMKPu6Ff+HjWfOc1jXTnxogkCyCKacWq44QzW07dtmC7J/M/iIpWeZVDotkMzsnioYUb2/GSkGN20RQ0BDwM6Bc4kSNK71KBOveAeSKHlopXbzgybotL4ngwE4Xtq0jqfze''@;'; put 'put ''hV3U6Qva1X1TRyoF9IYNCmxtyyH9ToPUFw9TBizRzcRgJoqgcz7f/6IA2nVlMhlvmHUhmGtJMGcYgpn4Iut+8gm4//e/TMqPRuK9SVIL/DF+7JmXMGvewiQ1aJpJJwLJJJixcdjWTIqyL6Q1U0TZv1u9LvZWyvfiKfDz5rheEwvHtWGiEN3pDZqSgNZjcgbzhKK0bobpbhKXk9nqEALkieL2lnhK''@;'; put 'put ''qYITCkVQvBfYs9Vtk8rt61gjfIe4xLlIamHz0RPUp0dXnD9iMNq1aZmw1fLwLksW+fP/fgvvT5vNJB89CnwcPr669LjfzwJo300fginfvx0bLXzwdJYS0+hoC2afU7vgDzddX6WAtRJIH+xkhBfmR8b/A/MWLVWp26avR0EgFQRTTiVWIYnN3L13H6ZSLmXKjM+xa8++o/QidS+LKz0730LDFrCz''@;'; put 'put ''0huyvm+9hlFk5njZR8Y1GcKZOvDT2TJ5oodrMGahDAdIKA+4sG8bbOukuL33bmcZx1LpZGqtlD+EoWO71rb27I9Y4U10aEOh0A8PSei5EMzxL76GqbOMTFFCQDrgw6f/JIjje3F98oZdh1tiqUe+b3sU747LdAC6VXfB0QSzX+9Tcedvrq1x8kTVw6/9IyS27YG/P2eLrdf+2c0Zk41AqghmrJ9i''@;'; put 'put ''zSSTw9oNmyjOPhOfz/8qrSVG3R5qbTaIorA566G3tlDYzEJ+IQlnNqtliIWToZtyExUVC6cOv+ixidB5z+tvzN3NKEqGJEVRXkZCua/CKrlroxs7t7hwYAflhMTtHa1dQhmD/rgmDTGc1XjOPP1HqF9Qz/ZspSI23xDMGOLq7/UkmBYJprFgJrw6B/btidt/dU21BawTPmEtNBAMhvDnsc9iCcuQ''@;'; put 'put ''mU19BEQH80pW8Rl51qCUrlOpLiJlJpetXE2iOctOBgpwLaV7k8x0qfnboFnUzkovpKhxfkOL9X9JWvwkx5JwIUlDQjjlz2zpReAwy6SQSU4Ps7ojKD0AFO12UTqI8ZMkk/tpnSzex9Km1BlPRcZ3PCA0KqxPUtkLQ/r1QdPGDW3B9Iikp6doMwQzRcCmoVkdCeaebRYmPWEIZsLL6dyhA3DDVZdo''@;'; put 'put ''ZcGUyhD3/m0865GvSxgf00D6ERCCOepn59ouu3iE1mvS85jbXMSfly5fSbf5HCz6ZjlDSNJPNGPjEbd5JhOG6jVm0hDJZgNaOAv4OKcea6XnuCuqt5DViGtdEojEWmYsnTH0krinkdGOmZREHJJKWTuSrBUoJZlk4ajivR6SSdDl7aE2pcu2VgbL5fzpsU5WNnLRsTyjV3ebWIpknWzJSOKp7FyH''@;'; put 'put ''v2YI5uFoqP1YO4LJ73HRnijeGmNc5AmvzCt44b7kvBEs16VPoLUEjd/76HgmbqxPGB/TQPoRqE2CGRutkAWxaArR/Pa7VbYigdS3Lym103Zjhzlm76FbPTu/wrJZ0ISkk0lD+SxpmZ3PsnzZJJ5ZjOdkb+08T0M8qz9vBE3WAjkk5YEq9hJOYZFIBmmVDLA6TvEBNy2TJJI7hUhWWClLi2iZtH9S''@;'; put 'put ''BXXnbVLiUbxX/Xv3QDM+lq02iGUMCUMwY0iov9eNYNozwq/thLsNwUx4dV5+/tn4Of90IZhyMSgpLcVdf3mCpQE3J4yPaSD9CKSDYMZGHSOaYQawr1q7HjPmzMcXi5di526m9zp8q7B0WsirD+QyhrOAiUOSPJRNd3tWLvd5kuQkuoq0wNnedYnrFI97RXyn7Wy3/3H4QBPpnhBHfl4C+2WuxRIp''@;'; put 'put ''Gdzyori2g4EwiSRd3NSYLGECTvFexknSzX1gF5/TvV28HwiVixtcWnH25vV60LFtawxifGUvJu80LGxgy9PVJrGMIWQIZgwJ9fdaEkxOy4R7DMFMeHVeP+pCnDtsoDZZ5IZgJrwkHNdAOgnm4WCIRVPI19YdO/ElFQpmfbEQq9dvpls0dbFqh58/WY/dZJMZWYzrbGAhpwB2QlEuqw/JX1ZexXte''@;'; put 'put ''/rb6M4SAMsbTdv/y7CSf4nIXd7vtdudLkmh0iIMeepCsntawnQp+KIZGEsWKJzZpFPIozJH/S1ejtEJGKA4dDFh2HKSQyDJaHktJJEuYfFMkfxQzL9vvRlkp3d+2/KM0qtZWkJ+HHl07YwCr73Tu0A45Odl2Vng6SwMbgqnWGjpWb3UkmPLdePm+7GMN2zHvOTqL/LZfXo1+dJMkW4YiXegbgpku''@;'; put 'put ''5FN3XqcQzNgIRdpI6puXlJRiBfUzP/tyERZ/s0IJq2ZsDEfbe9wWvJkuZqxbdpxnZh5Y6lIsnizvl2sxxlNc7i5kZFjw8zi3Nwo3S/b6xBIqBE6EPIWQygliXIxsTnhpbLMpaex5bB978/B97PPc07Z46B2bOMozeUnalsdCfvmogjQKcZQ/un2ZQBMKuEgiKVROklhezOxtksgyurbLikgoiyus''@;'; put 'put ''k4EyN49hW9Z/ziPNqrpl+P2suNMSfXt2Q8+uJ+I4usE9nBv5nU9FVni8OBmCGS9izj1eN4JpyxTtoEzR340FM+FVd9sNJJh9DMFMGEjTQMoQcBrBjA005j6XC/b2nbuxdMUqzF3wFZYzuexAEZmLphsdwjap9Aqx9FnwMdnSz8fezCh8/E32ZXDPMr4iJu/xR1k5ifGs3FeQUVZSYla820twyAxt''@;'; put 'put ''PkqSam+yO8jvLBI9SyyGfC4Z8lZIpH1IGENCHGlN5D4UdiMc4D7oIpEkiWR4bDggRNFCJFiRnS1xkHK8fPZQ4/JQw02sza2aH4ceXTrbLvC2rVsgmzW/xcKeDjf4sSA2BPNY6Kj1npYEc7s6MkX/DwAA///r8VITAABAAElEQVTsXQd8FNX2/rZl0xMSSkLovXcBBUSKgNg7dkXF8tRn74o+n/7V''@;'; put 'put ''J4oFsIMdO4KCFEFA6b33HkpIAklI22z5nzNhNcQkpGyZuXvmR5jd2Zk7937nzsw3p5q6DrrUA50uj919C/r17o6ioiKd9rBq3TKZTMjNy8NTr4zDnv2pVTtY9tYlAlGREbjhigtxybCByM/P12UfLRYLbDYbHHQdHTpyFBu2bMfS1euxbdc+ZGXn6LLPeuqUx/P3LZKvYVkqh4DNakXD+kno2rEN''@;'; put 'put ''undqh6YNUxAXGwO32w2n04mSuFauxcDsZbfbMX7SZMxeuASFhY7AnFTO4hcEzrrUgVY9TPA4Xfj7KvbLqQLSqMlswvEjbvz0TkRAzlfTk5iEYNYUwsofLwSz8lgZZU8jEMySWFrpoc9/TDaPpKVj07adWLl+M7Zs3430Y8d1+9AvOQb5rF8EIiPC0aRhfXTt0Aad27VGo5QkxMbEaPOKSSWTS70v''@;'; put 'put ''YWFheOvDz/H74hUodKih3NA75v7q39lXFaJZJyKYLrc6BPMwEcxxQjBrPGdEg1ljCKUBPyNgNIJZEg6vZtPlciE94xh2k1Z93aZt2Eikc//Bw8gvKCy5u3wWBP6BgNlsRp3EWmjVtDE6t2+NNi2aoH69OoiIiADPK/4zAqksOTDW9o/94DMsWLJKexEr+Zt8NhYCqhFMs8WEQzs9mDkx3BCCEA1m''@;'; put 'put ''AMUkGswAgh2gUxmZYJaEiIkCP1h5yc8vQOrhNGzfvZfM6TvIlL4XR9IzyKzpKnmIfA5RBGKjozTTd8e2LdG2RVM0bZSChFrx4BcWJpRGd2kqJpifE8FcKQTT4HN84PWFaNiaBuH2KKHBtFhN2L0O+P1ruyEko2uC+fg9I9G3ZzfD37C8M0EIphcJddaqEMzSEuGHLBMG1j5l5+QQ4TyKrTt3Y8uO''@;'; put 'put ''Pdi5dz+Oph9DEZk8ZVEfAZ7jKUl10apZY7Rv3QLNGqeQ1jIBEeHhf/lTGk1LWZHUhGBWhI5xfmMf33NvdCClFfVZIYK5YzWw8DshmDWeiQ/dcQMG9OmlHMF8+tVx2L1PgnxqPEF00ICqBLMktKzdZLLp1VDlnMjFwSNp2LF7P5FOIpx79iMtI1NM6iVBM/Bn1lAmk5mbCWXblqyhbKCZwSPJ7M0v''@;'; put 'put ''yayhZE2lqosQTDUkazYRwbzFgaSmFN5Drr8qBPlYw8xYPRdYPTvMEELStQbzRorOHXHJeRTJp44vWKHDgefGTNA0QYaYIdLJChEIBYJZGoCShJO1BCeIcGZQgNCeAweJbB7Ajj37cODgERyjCHWViUhpXIz4nSO9E2vFUTBOMmkmG6Bl00ZaYE5iQi1NQ8lj4uAc/guVRQimGpI2W9wYdqsTtRu4''@;'; put 'put ''QVxTCYJps1uwdAawYX6xO5PeJaVrgnndZcNx3WUXqEUwKe3Fc68LwdT7hVHZ/oUiwSyNDWu1WLvJ0em8sIaL0x8dPpqB/amHsWvfAeyjNWs9s7JPiGm9NIAB+m61WlArNlbTTnKkd/MmDdGI0ghxkA6nD2L58QsDk8lQfjEQghmgCenn01htHgy/vRDxSSYimGr4YIaFWzB3sgm7Vhffa/0MYY2b''@;'; put 'put ''1zXBHHHxMNx45UVKEUwOlPjvm+9jLUXrymJ8BIRgli3DklpO3oOtEGxaT888rkWoc5T6vtRDREIzadsx5FFgkV7zIpY9Qv1uZRyjoyJRKy4WKcl10TC5Hho1SKZ1EmonxFPaoGhwKh5emEjyn0o+lDWVjBDMmiKoj+PDI9wYQgSzVh2zMj6YNjKRz/nCjL0bhGDWeJYN6tsTj9w9UrcJrKszQCfl''@;'; put 'put ''43pl3EdYsXZTdQ6XY3SGgBDMyguEtZys7WRNGa9ZU8YR68ezs8nEnqVFrh+k6PVDaRk4cOgwjmXlaMQzlLVpFaHLGsmoyEjEk/axXp0ELT0Qpwhi/8m6tRO07fw7486LkMmK0Pz7N56f/5swCYtXrBVt+9+wGO5TZCyZyG8rRHS8WRkNJkeRz/7EigPbiq9pvQtF1xrMc87qgcfvuU0pgumBCWPe''@;'; put 'put ''nYQ/l6/R+9yQ/lUCASGYlQCpgl2YaHq1nbzmPyaeeVTxKic3D8eJZLJ/J6dJOkLazqOUrzPzeJZmgj+Rl48CcjlRlYCaCRu7PQycvDyOkpXXio9BnYQEjUzWq5NI60QkkJYymoJyOKLba+JmDaaXTIpWuILJV85PrMEc894n+HPZGklTVA5GRtgcm1hMMMMjyUROHVYhyMdMlXx+/ciKw3uEYNZ4''@;'; put 'put ''Dp7ZvTOevn8UHBQYo8piogfo2A+oSsSi5aoMKaTHIQTTP+Jnoukln17iyWdi4sTm9gJKAp9P66ycE5pfJ6+PZ2VrWk/2/8wmczyb5HM1Ekr7ExFl4soWhGCag1mbGGazajlHw4k88vyJJi0jm7TjYqKIRMaRaTuGtI+x2nf2jeR9IohkhlMJQ68WmIkjj4fXPB4hkr6bh2Ii9x2WwWwpIcmNoSML''@;'; put 'put ''YQsneqkCu2SWTOmWfnk/DBkHhWDWeG717NIBzz54pzJpihgQC5lf3vn4S8yav7jG+EgDwUdACGZwZFCagHrJqJdwMeniYCPO2lBU5NQIJn9mX08Hlf/LLyjQCCoTVS4HWEBklbfzvk4isbzmsAD2mebPbs8/SxxyBLaNyKJ2bpOZ/Bpt8G5j8sg1re20LSLcjgj+TNtY08i/8TZtX/rdTv6QrH3k''@;'; put 'put ''MXmXkuPwEkghkV50/LsWgulffAPVer0mLgy+wUnXlhoBPmTQoPuRBz+PD0NWuhDMGs+jTu1a4b+P3qOUCYwJ5qTJU/DDjN9qjI80EHwEhGAGXwYV9cBL2pgEekko7+/dXvJzSQLn/exdl3cObpMX77rkZz7We7xXa1p6XXIfrSH5L+gICMEMugh80oGGrV045xonOB+mEgpMMo8X5rkwbUI4co//''@;'; put 'put ''/TLqE7D81IiufTA50e8rT92v3by9N2o/4RCwZi0WKyb/NB1f/kjJrGQxPAJMMDlf68XDBirlK2x4wcgABIFqIlBMMKUWeTXh081hLbq60OcyKgjALiS66VX1O8L+l7nZRDDHhaMgTwhm9ZE8eWRjSq3x+uiHNb8jVQgmm8J+mjkPH375Q43xkQaCjwD7zo0ccQnOG9iP/AILgt8h6YEgIAjUCAFO''@;'; put 'put ''4fQ2uTHN+3OZ5j5Ro8bk4KAh0LZPEXqdR+6X5PKiBMG0mJCV4cbP4+wocgjBrPHESq5XG2Ofe0TzZVKFYLKJfM6CxXjroy9rjI80EHwEoqMicOcNV2FQv95CMIMvDumBIFBjBNh3dsInX2MW3acLKThMFmMi0PXcInTpT0FwFNinAsHkFEUZB4Fp5IPp8RS75uhdMro2kXNSYNZgciSl13dJ74Ce''@;'; put 'put ''rn9MMBctW42Xx318ul3ldwMgwATzjuuvxOCzzxSCaQB5SRcFgdMhwATzwy++xy+/LdSCxE63v/yuTwTOutiBlj05MkYNDabVZkbqTjd+/dB+is+3PtEv7pWuCSZXnHjjuYeplFmCMoE+HFywZsMWKhf57l8BAHqeINK3ihEQglkxPvKrIGA0BMIp0n/S11M0VyZObyWLMRE4Z0QhGndkgqmGBpPr''@;'; put 'put ''kO9a78K8L8INIxBdE0zO+zb2+Ueo3Fk9LeebYVCtoKNMMLfv2ovHX3pTS4dSwa7ykwEQEBO5AYQkXRQEqoBAREQEvvjhZ3z/yxwtrVUVDpVddYKAiYziw251oG4TMo5ThjEVTORch3zTYg8WTSku86oTqCvshq4JJnsZjP3Po2jepBHloiuqcCBG+ZHTmaRSObzHXxpLiaDzjNJt6Wc5CMRSFZV7''@;'; put 'put ''Rl6Dvj27aQnAy9lNNgsCgoBBEGCCOXnKdHwzbZYQTIPIrHQ3w+xEMG8vQHxddcpEMsFcTdkNV86ylR6ubr/rmmAyai89fi86t2+jTDUfJphHMzLx1CvvIC09U7cTQzpWOQRioiM1H0wJ8qkcXrKXIKB3BESDqXcJnb5/UXFEMKkOeVQc5b/lfLSnP0T3ezDBXDwV2PinEEyfCeup+25D317dlQqg''@;'; put 'put ''4GoiTDD37E/1GU7SUHAQ4DRFt15zKYYN6KvUHA0OmnJWQSD4CLAP5kTywZxK6eTEBzP48qhOD5QrE0kgMMGc+6UJu9ZaqwNJUI7RvQbz37ddp+UYzM/PDwpA/jgpl5574c33sX7zdn80L20GEIFIqhF93aXDcfkFQyTRegBxl1MJAv5CwJumaOb8RVr5UH+dR9r1HwIprVwYQFV8LGY1tJeMFKcp''@;'; put 'put ''mjXJgtTtQjB9NnNuufpiXH3xeWo9vKlu8evvfYKFS1f5DCdpKDgIcF3pi4acg1tGXCoazOCIQM4qCPgUAYvFglfHT8SSleskENOnyAausZbdXDiLq/gokgMTHJDipjrk74ch86Ax6pCztHWvwbxs+CCMojyDKmkwORcm51mbOut3loEsBkbARrLs07MrHr7zJmUC0QwsDum6IFAjBDjLR0FhIZ4f''@;'; put 'put ''8y627txD/IRCkGUxHAJdBjjQZRDFkitSxcdEZSId+S5MHW+cOuQ8aXRPMAf26YlH/zVSKYLJ5SK/+3k2PvmWPHZlMTQCFnogtWnZFM8+cAfsVGJOlYpThhaKdF4QqCYCfG9OPXxEI5iH0tKr2YocFmwE+lxciBY9qZyiIknWzVQmMueYm+qQ2+EoMEaZSJ4DuieYZ3Ruj9EP3aWUdog1mPMXLceY''@;'; put 'put ''9z4N9nUo568hAkwo69VJxHM0RxulJCs1T2sIjRwuCBgOAfa/XLpqHd744HNk55wwXP+lw4QA3ZMH3+hASiv6TGZlFSLI2f/yaKobv5AG06PZy40had0TzJZNG+HVpx/QSiOpoh2Saj7GuDgq28sYiiT/1y3XoP+ZPcQPs7KgyX6CgA4R4Ajyz7//GT9Mn4P8gkId9lC6dDoEbGFunHebA/FJ6qQo''@;'; put 'put ''soaZsW+TG3M+M04VH5aT7glmct3aeIOq+UTQha9KPXLOhbn3wEGtmo/cxE53u9D/72FhNgzpfxbuvulqSbauf3FJDwWBMhHg+zL7XL7wxntYv2WHMuWJyxyswhuj492UZL0QkdFEMGmcKmgwi6v4uKmKj91QktM9wVSxHrkkWzfUNXLazrI8mzSoj/88cjfiYmPkwXRaxGQHQUB/CISRD/XWnbvx''@;'; put 'put ''0lsfIj3zuP46KD2qFAJ1G7lw7o1OWG1qmMd50Ewwl88A1v5unCTr3G/dE0x2un599ENo1rihUv5tHKk4+rUJ2EZ1yWUxPgJsJueSkWf3FjO58aUpIwhFBMQ8robUm3Z2ot/lbqrg41ZCe8lSYYI5bzKwc7UQTJ/PUtYM9ejcQSnzI/keY8y7n2DRijU+x0saDDwCVsqd17t7Jzxy181aJLkq/sKB''@;'; put 'put ''R1LOKAgEHgHOfclBPc+9/i527tkv2SACLwKfnVG1FEUMDEeRz/zYgkO7jJNknfutew0md/KBUddj6Dl9lUpVxJHkH335PX6a+TsPURYFEIgn8/hjlFKrc/vWSr0MKSAaGYIgUCECXH/859nztRKRuXnqVI2rcNCK/tj3CkpR1NUMjyIpisgDC04nJVkfH4asdOMkWefpZQiCeeMVF+Lay85XjmBO''@;'; put 'put ''/20B3v30W0Uv89AbFidd70tJ1x8YdYMWkCZazNCbAzJi4yHAWT2YVD5P2svt5LLkpjQ3shgTAbPJg3NHOpDUhGRIOfJVkKSZkqznZrsx9R07CvONkwOTZ5AhCOawAX1w/+03KEUw+aa2ct0m/IciFmVRBwEO8vn3rdfizB5dJGWROmKVkSiMAGsvv5n6Kyb/9Cvy8gsUHqn6Q4uMdmMopSiKSVAn''@;'; put 'put ''RRHnwEw74MH0CXYizBwXb5zFEARTxWTrTDD37E+VVEXGuVYq1VNvZZ8n770NMdFRElFeKdRkJ0EgOAhw5Piefal46e0PqYJPWnA6IWf1GQKJ9V0YeksRrGE+azLoDdnsFuxc68bvXxkrRREDZwiC2bRRCl575kGwI7ZKZses7Bw88fLbOHTkaNAnsXTAdwiE28Nw0ZBzcPPVl4gvpu9glZYEAZ8i''@;'; put 'put ''wC/5bA7nYMulq9ajyOn0afvSWOARaNqJIsivUC+CfM1cN1bMFILplxmVEB+Lsc8/ivi4WKU0Qi6XWzORr9u8zS+4SaPBQyAuJhr3UHWffr27K+XaETxE5cyCgG8R4LREP/wyG1/8OF1M476FNmitdR1UhM4DyPfS5VLC/5KB5BRFC74zYdtyY0WQc98NocG0Wi2UC/Nh5XJhmkkj++6n32DG3D9Y''@;'; put 'put ''FrIohAAnX29Yvx4evfsWbd4WUt5TWQQBQUAfCLDf5bLV6zGWao5nHs/SR6ekFzVGoP8IB5p0oGZIeaNCgA8DYuEURZOsOLjDWBHk3HdDEEzu6OgH70Cvbp2VMjlyEvmfZs7Fh1/+yEOURTEE2B+zXavmeOjOG1EnMQEOh0OxEcpwBAHjIWC327F73wG8Om4i9h08rJTblfGk4bseW60erURkQjIR''@;'; put 'put ''G2KXKhBMTlFU5OAURXZkZxorgpwlaxiCeecNV+KS8wYpZW5kH6BV6zdr6TF8d5lJS3pCgLXv3Tq0xX0UWc4uHkVFRXrqnvRFEAgpBJhcss/7axMmaVXUuPa4LGogEJdIAT63FSE8kogNDUkFgskJ1rPTPZhGBLPIYawIcp5VhiGYHDRx980jlCKYbEZNPXQEj744VsvDpsZlLqMojQDnx+zZtYPm''@;'; put 'put ''k8mR5UIySyMk3wUB/yPA5DItPUMzi6/fskMpf37/o6f/MzRs7UL/a12wUAJMFcglI24NMyN1u5uq+ITrXwBl9NAwBJMf0KMfvEs5MyMn+H361XcoZdHBMsQjm1RBgEkml5K8+6arEU11y50SsaqKaGUcBkCAyeVBSkP01kdfYuO2nUIuDSCzqnax09lF6DZEvQCfjYs8WPyTMfMuGYZgNk5Jxmuj''@;'; put 'put ''HwI/qFVKVQSTmdJkTMIfy1ZX9XqS/Q2GAJvLu3dsh/tuuw5cVlJ8Mg0mQOmuIRHgaPFde/fjzQ+/0OqMi1nckGI8bafPvqoQzTqZKIJcHQ0mR5D/SSEam5fYTjt+Pe5gGIIZEx2ppSriYAkXpSBQZeHcnt9Mm4nPv/9FlSHJOCpAgOV9Vo/OuIVyZNarkygkswKs5CdBoCYIsAsSay5Xk5/7BMrW''@;'; put 'put ''cYDckZRSTtQEHMWOtdrcOI8q+NRSKMCHRcRVfGZOtFAEufFSFHH/DUMw+Wbx8pP/Roc2LZV6KHOqomWr1uHFtz5kecgSAgiwJrND6xa49ZpL0bxJI20+y4MvBAQvQwwYAvwix0GUs+Yvwmff/aylIuJniCxqIlCrrhtDbimEPYpkrIgDJk9Xx8kI8hwDRpDzTDMMweTO3k+mxaED+ipV45lvevxm''@;'; put 'put ''/ZgE+rCIQ2bhh1+TBvVx/eXnU/qtTppPplsiWkNG/jJQ/yFgs9lQSCnBfp49H19NmYGCQkkP5j+09dFyk44unH2li9ITqWMe5/yXmUc9+GWcnZ4Pxnw5MhTBvHz4YNx+/RVKRZLz5ZlfUIhnKNBn594D+rhapRcBQyAhPg6XDhuA88/tjzB6MEqEecCglxMpiAD7W3Iwz+SfZuDP5WukQo+CMi5r''@;'; put 'put ''SN2HOdCpH+B2qkMwuQb57vUuzP3CmBHkLCdDEcwzOrfHcw/frZSJXBMCabPe+fhLzFm4tKxrR7YpjkBkRDj5ZXbBiIuHoX5SXTGZKy5vGZ7vEfCaxNnf8vMffsGOPfuV8tX3PWLqtMi6vcE3FyKlOVnH3R5VLORaichVczxYNduYEeQ8wwxFMBsk18WYZx/SHLdV8lnjij5sznnv8+/UuepDcSRU''@;'; put 'put ''PiIyGrBHeHAsrWpVF7jqT7MmDXHVhUPQm0zmvEgqo1CcRDLmqiLAgTw5J3K1e+jPcxbgWFZ2VZtATIIbucdNcLuNaYqs8oAVOiAixo3htxciKt5MJnJ1CCZrMOd+YSItpjEDfHiKGYpghtvDMPY/jyIlqZ5SD1/2x9uwZTue/d94KqEqlSWMeu8LI2LZY0gREhsAcz+zIje7aiSTx82J2Af17YlL''@;'; put 'put ''hg2kKPPaWmlUlV6mjCpb6bf+EGCtJf9t3LpTM4nzPdRR5KxyR9v3caLbQDc2Lzdh7TwrigqFZFYZxCAeUL+FCwOvddJcUIdccoCP00n+l+/acbyKyoogiuIfpzYUweTeP/fQXVQVpaNSNck50CfzeBae+L+3cORoxj+EJBv0j4DZ7EG9JnSju8EJm82CPRtclL+MyntV42FlpYdmk4b1cRn5HPfu''@;'; put 'put ''1lHT2EvOTP3PAelhYBDg+yVrLdMzMjF97h+YMXchjmefqNbJG7Zxos9lbkREe5B/woM5E8OQfpie7h4hmdUCNAgHdepPCdbPVSvB+t8lIsOoRGTVFRVBEEOZpzQcwbzl6otx9cXnKRfo4yLfkVfHf4xlqzeUKSjZqG8EwiLc6HVBEVp1N8Pp4DytFmxe5sGK6bZqm93YN5P9ji85byBaNWtC7biV''@;'; put 'put ''0tzrW6LSOz0iEBZGD1yqgrVk5VpM+XUe+Vruo2uienmR4+q4cc7VDsTVI1MeGY6sZJJcORvY8IcVzmq8GOoRL9X7xNadQdc50LAdjdSljgaTS0Tu2+TGnM+MG+DDc89wBLP/mT3w+D23KpWqiAXBpp5vplLCdXJQl8VgCJDvZWKyB+fe5IA9kipJ0MsCmzjcHnJ9WACsmmOj79XTiPANNCE+FoP7''@;'; put 'put ''9cYwStHFQUAcaa5SsQGDSVu6GwQEOPUQL9t27sGUmfOwYu3GGkWIs580V35JbmEq9tuj3IlmqxkZB9zk9xZWLfeWIMAS8qeMiPJg6KgCxNZSy/+SK/gYPcCHJ6fhCGbTRil47ZkHNUKmkm8a+2FyBOTzb7wn1SYMdtu02jxo09uFnsM9J7WXxQNgTulykVznmLDxz5qV+mKCmlS3Ns4lojmQfDTZ''@;'; put 'put ''P1OIpsEminS3yghwACS/fO/Zn4qZvy/C74uWIyuneuZw78nZV6/XRQ607EYXKOdN9Cbm1r56MO/LMKTuNFPJweq9FHrPI2v/I5DczIVB16vlf8mo2UiDOecLM/ZuMG6AD4/DcAQzItyOt//7OOrWTlRKi8MEIi09A0++/DbSM4+zbGQxCAL2SA/6XlGExm1NpxJM7j+5z7C5bdVvZDJfXPObhZnm''@;'; put 'put ''SXK9OhQI1EsjmnwdsOlc8mcaZLJINyuFAGss+aV7/8HD+G3hEsz7cznSjx2v8cs32RfQdYgLHfuQTZzs4n+Ry5O94sjdNfM8WPc75aQVM3mlZBXMnTqdTf6XQ9Tyv2TFRFGRGz9PsCM73RJMeGt8bsMRTB7x8w/fhTO6qBXow+MSP0xGwWiLh1KckJnmZgeiEujxRX5AJRdNB8Ik00Ekc45vSCa3''@;'; put 'put ''z0SzLtUyH3DWGejfuzsaplARXlqYaKqk2dcGJf+FBAL8ks3EkufvvtRDRCqX4ffFK7QXbp/MaWq30wAnugwgbmly/YNcMsgWmxkHd3ow/ysbCvKMG1wRChOG58TgG4rQoDXdcxXKf8n1xzMPE8EcH05KNGNr0Q1JMG+68kJcc+n5ygX6sDno22mz8Ol300Lh/qDEGE0UPZ7cnMw0lCbDxC+bp/JL''@;'; put 'put ''bYx/k0yQZsSKdQss1fbJLAu0WnGx6EWZFdg/uVWzRoiKitKStYufZlloyTa9IcCaSiaW/HK0ffc+zP1jKRZTEM+xrBzfdZXISEfSdnUeaILFSuSynGxwJirPl5flxsyJrD3iK9fYD3jfAai/liJjPTjvtgIl819uX+XBgm+Mm2DdO1sMSTDP6tEZT99/h1KpilggfKNdv3k7Rr8m+TC9E1Tva4vV''@;'; put 'put ''jRZdPTjrUhdcZNYob/GSTDf7ZM4in8wlpKkpf/fymqlwu53yxLZp3gRnk0azW8e2mp8mv+Vzwnapc14hdPJjgBFgbaXXvzIrOwfrNm/TzOBrN22tUfBOWcMwUxBex/5OdDqH7rEWijin666M98DiQ+lCdVMqzTmfW5G2x1LtDBBl9UO2+RaBhq1d6H+ti/J1qFMekhHiAJ9FP5mwaVHNXap8i3jV''@;'; put 'put ''WzMkwUyhSNoxox9COOVC84nppOq4+e2IbHJgf+Llt6ie7lG/nUMa9h0C1jA3OvR1o/sQD/lsnT5diuZfU2imFEaUDmU+JXX2Q44zflFJIK1m907t0Lt7J7Rp0RRxsTHatSJk03eyl5aqjgAH7Hi1lexfuWTlOixasQZ7ySRe3XRDFfXCaiWfy3OL0LY36SLNREQq8VLHOQgXfGulXLZmuA1uoqwI''@;'; put 'put ''G6P/1p2KWnTq71Gq/jgrzPkZMeNDG9L2Gtv/kueXIQmm1WrB66MfRrPGDdULbqDZNfaDzzB/8UqjX/8h0X+b3Y0ug1zodDb5P1aCYDIoZrNJ863ZtdaDNXMpJUqWpt/0C16sJapfrzbl0+ygEc4WTRsimkzootn0C9zSaBkIMKnkechz7iglR2dt5eIVa7GeKu+cyM0v4wjfbLJTbtqe5zvRvAsH''@;'; put 'put ''i/8zoKe8s7Af5uKpZmxfaSGrhP+uzfLOL9tPjwAXthhyi4OKW7D/ZQUa6dM3pas9+NnALho/jbejUAEfYEMSTJ4RD4y6HkP691EvHybdiGfO+wPjJn2tq4kvnSkbAVs4lYccWoR2Z5oqTTC5JQ7S8dDfIQooWDXbivRU/7+t2mxWNEiuh64d2qAHJXBv3rgBYmNiNPM5+2uKz2bZMpatVUOAzd9e''@;'; put 'put ''v0p2zcik6O+tO/dqfpVMKtMzjlFMRrlG6qqdrJy942q7Nc1lk/acl7by5JKbY4K55Gczti0XglkOvEHfXKuuG0NHFiKM8g6TB0T5Lg9B72nVOqAlWN9CFaU+sVftQJ3ubViCef7gs3HvyGuVC/ThmzPnfHvqlXeQm+e/t3udzkfDdUur4HO+C616VF6D6R0kiVozhxyn6qBrfrNhz3qOWg2MxoSt''@;'; put 'put ''AClJ9dClfSt069AWzZs0REKteC34iIMtmBio5n7ixV3WvkeACaVXU8llTdMzj2Hz9t1YRbl9N2zdoZFKF82pQCz1W7rQdZATtVPoWiqZ57KSJxeCWUmggrhb6zOc6H0xMUt6Mfbvq0pgB8n+lytm0vNgbs3yJge21+WfzbAEs2XTRnj16Qe0B6JqD0IHPeD/QwnXN27dWb7k5BddIFBMMJ1EMKum''@;'; put 'put ''wfR2numkyWJGYQGwdRkF//xhJdNIYEimtw9c+7x2YjzatWxGwUHtNJ/NOom1wGX5mGiK36YXKVl7EeAXYS+h5G3ZFKiTejgNm7bv0kzg23fto/rgOQF9SbGRP3TrXi6yJrgRGUfc0lm90oFCML1S1u/6bCrx2awjydhFL8L67WaVe8YpimZNsiJ1u/8tWlXuXDUOMCzB5DrNY59/hKqb1FHOtGe1''@;'; put 'put ''2vDlDz/jq59+rYZI5ZBAIlBTguntK/vesH7n8A56e51HEaz7gnODYeIQExWJFvQC16ltK7Rv3RwN69fTTOn8G5NNNqWr9lLnlYOsy0agNKHMy8ujwhCZVAt8PzZs2YEtO3cj9VAanDQ3grEkJLvQ+RwXGrbhSHEK/CiVj7YqfRKCWRW0Ar+vVh7y9kLEUt5hE7laqEIwNf/LEx5MfYdysOYG5/7v''@;'; put 'put ''a2kalmAyEE/eexv6UUqWggJS/yi0sGZg3aZtkq7IADL1FcHkoWomcyKaudkeqvpjIR8wKxwFgdVmloacTenJ9BLHkegdiGy2ataYqmglIDIyUttVzOmlEVPju9fkzfciXphQHqUKYzuJUG7ZsZt8KvfgwKEjPk8pVFX0wuweNOvGWksX4hIo3oMTbteQcQjBrKoUArt/wzYunHONi4qkqaW9ZP/L''@;'; put 'put ''A9s9mPUR5b/kh4ECi6EJ5mXDB2HU9Vcq54fJ84r9L5+kdEX7Ug8rMM3UHYIvCSajVGwyJ20mqTMP7TRpSdmP7NbP2yxbDlij2apZE3Ro0wKNqYIQm9O9hNNrTpe8m8aZ86ydZELJkd78mWV3Ijf3Lw0lm7u37dqDg0eOBp1QlkQ1qYkL7fu6kNKyWGvJVbRqyC215oVglkRZf597nU9pp84iWTvV''@;'; put 'put ''Ipia/+Vsyiwyx/gJ1r2zxtAEsy1pVV5+6n7NXKeayc5MmoP3P/8Ov8xZ4JWVrHWIgK8JpneI/AKrmUxygZ2rKG/mUgtyj+uvdF0x4UzSgoT4emzSsD7qJiYgOjpKIy18XXpJp2rXqFdWRlp7yaRXQ8l9ZwtQ5vEsHEpLx+59qUQm92prNoGzP7jelthE8rXs7USLTh6Ex3Bi9JprLUuOUQhmSTT0''@;'; put 'put ''9Zn9bIfdVoRaSR6loscZZfa//HWiBYd2GD/BunfWGJpgRoTb8eZ/HlXSD5NNU0tXrcOLb33olZWsdYiARjAvoCjy7lWPIq/McLR0RsQrjx/xYAuZzXett1A6JP0RTe9YwsJsqFc7USOazRo1IOLZgPJw1kV8XAyiTprVhXR60fLvmkkkE0rWTPJnxj0/Px9czCGNUgVxvW/2odx74KBW2CEnN0/T''@;'; put 'put ''Xvq3V9VvPTLGg+bdnGjZ3YXYRHoD46I8NbWHl9EdIZhlgKKTTay1HnorJ74k4ZO62hcaaz0MjZUJuTluTHvHjgIF8l96MTU0weRBPH7PSKrBfIZyfpg8No7CfOKlN3H4KOWxkUWXCIRFUB7MYWSy6VW9KPLKDIrN5mYreRyRf9nh3cCmJfSWu81KmsHKHB3cfZjgcNBQvTqJaNygvkY8G6UkIalO''@;'; put 'put ''bdSKj0VEePhfSbg5eIjNs/wn2s7KyY3x9f55Tdz8nbXGOSdywWUYj6RnYP/BIxqh5PVh0lTydn+Qs8r1ump7Rca40aQjlWQlX8uEJL4aSGPpI3N4WT0RglkWKvrYxgE+nSkFVQt6ybCRxk/TXuujazXqBftf7t/swexP1ch/6QXD8ATz/EH9cO+t1ynph2kircP4iZMxa8Fir7xkrTMEbOFUJnIw''@;'; put 'put ''+4L5R4NZcrjEGyg1jJmqVwEHd5JGc4mV/DSZePJD1zgLEyA2rdemvJv1k+qgQf0kNKDyr/Xr1aFcnHGIJfM6+3R6A0zKIp6hREC9BJLXjIlXM8kYFBYWIr+gEMezsin35HHNzM3BN4fSjpJWMo1M39na78aZHX/3NCrOgyYdqBJPNzcS6nHcAxMK//vdCcH8WwZ6/dSwjZPK8zqRkMzJ8DmrhV57''@;'; put 'put ''Wrl+sf/lkp+pfPBCNfJfekdteILJ1Ug4HybfeFV76FjItPXnslV4ZdxEr7xkrTMEmGB2G8z1yCtXi9wX3WeiyfWSnQ4mmiZsW2GmtfGrjjBxioqMQEJ8HFUcqktazkQkE+nkqHXeVkw8I2Cn/Jxcz9q7lNR68j2Av3sXvd4TmCx5Fx43L7z2/nl/Y3LtJZEnKJL7GBHGjGNZWgAOm7bTqPRiJn1n''@;'; put 'put ''a0dBIU0IBRau0tK0swuNO7gQz6bwABFLL3RCML1I6HsdGU3azMFFaNHVQ1aQk764+u5y2b3jKU5a+V8+CEP6fv0EdJbd2aptNTzBDKPyd2889ygaNUjWzEJVG76+9+aH0DHSTIiZXL9yCgbB9KLBHMVCpvMiCnJI28vBQFbs32pSooatd4zetY3SJcWQZjMuNgbx9JdIms7aCbU04plApva4mGiq''@;'; put 'put ''sR6paUbt9jCNhPJLJ5uNy3r59JJQ75rPw2S0NCEt/d3bn5IEkbfxd++2kp+95LHkcUwavflEC6nqDRPD/PwCMIHMzsklbWSOdt0zkeTgG/7LIr/JE+QjydrK8vrkPYcR11abB3WbuNG8E0eFU6L0WNLMk1YqGJHCQjCNNYMatXORNpMCf+oZU5vJyoKsdPK/HGeHs0i//vXVmRWGJ5g86H/dfDUu''@;'; put 'put ''HDJASTM5R5OPm/gVZs0XM3l1Jri/jwkmwfSOzUs02Ucz85AHezZasWeDGdnpat2svOMta82kjgOMIux2RETYERURoRFSJp2sFY0mk3tUZLj2OZyCA8PD7LDbbRoRDSNtKNdp54pGxSZoYu6kU7CSO4LJVBwcU/qcHipB6C196KJqIpxgnMkqE8aiIqdGGjkC2+Eo0ohhHkVq5xGJ5PRjubn5Gplk''@;'; put 'put ''H8lcCrrJzy/U9udjVSSPpbHzfuexxtYGGrV2olEHN+o0AKw2E1xkBueqA8GyegrB9ErIOOsICgDrOqgIzbu66aXSWL6ZbB7fstSDP35QJz2Rd+YoQTD79eqGJyjpOpuSVFtYA7J8zQYtmjyUHj5GkaMeCKYXK6ZFHAxkMnm0ZO0HdwB7N9hweI856AnbvX3U41ozS5/UQHJiea8Gkgkn/8YE3ruw''@;'; put 'put ''rxd/dxKpZELJf05nMbnk65MDZ+Q69aJV9poDNeo2pcCd9i4kkdYyKo4NhEQKivzvX1l2j07dKgTzVDyM9I3dKrqR2TwhyQJnoTHqlNvsFvw+2YSda9RJT+SdM0oQTA4WGEvpitiEVtLk5R2k0des6eCk6weoFJss+kJATwTTi4zGh0h5yWTJSdqgY4c9ZDrnKEULfSYzUnCq+Xm7J+sQRMBO2RZq''@;'; put 'put ''N3ShUVsXkpt6EFObEruzHzGR82BqK8sShRDMslAxzrbIWNJmDihCs+7km0kujXqONOeXVUcBmcfH23HiuFr+lzxjlCCYPJD/PnoPunZsSyYpNRzdeUzehYN9Pv7yB0yZOc+7SdY6QUCPBLMkNEw2zTYKHqEPBfkeZBwksrnFgoM7zMhKM14EesmxyWd9I2CPcCMxxU31wd1IIlIZVxfkisAmcDJ/''@;'; put 'put ''kwY4WCbw06EmBPN0CBnjd9aQdzuXk7LrV5tppXtz6g43Zn4cbgxQq9hLZQjm5cMH4XZFy0aymW795u0YPWYCaZ9E/VTFOe7X3fVOMEsOnt+WOSiI1/m5bvLXBFIp+vwwpTo6dpi0SYo5mJccu3wODAIRFNlbhzSV9VuRprIxaSrrkC8rkUoPkUq3jkllSXSEYJZEw9ifo0ib2UWLNGfXFv/mT60O''@;'; put 'put ''Uux/uWw6sG7+31kxqtOOXo9RhmC2aNJQS1fEZExFHyiONH1uzHhs3blXr3MpJPtlJIJZUkAUu0IBLcVks7DAQ9pMN47s4zJlZqQftCA/m/ZmJiqLIFABAmZ6aEcnUIBOIw9SWri0dXQtrh5E2nHKbmAUUllyiEIwS6KhxuemlJ2g60AH4pOscOnFN5Nur8xVZnB6ogPqmcd55ihDMNkhf8zoh9GM''@;'; put 'put ''8mJyChDVFk638t3Ps/HJt1NVG5qhx2NUglkSdKaRHBzE6TI4gvdElgfHDgKHiXCm7aUUGkctcOQL2SyJWSh/DrNT4vPk4rRCyRSsUyuJ0grF0MsKvdyzzy/8WGUnELgLwQwEyoE/Byfu7zLIQXkzi9+d/VkNqjKj49rjmQfd+PldO1km1cz4oQzBZIHeft1luPz8IUqmK+LIVq7Q8diLY7VUJ5WZ''@;'; put 'put ''wLKP/xFQgWCWREmjkScDhEDaqaJCIpzHgczDZqRRNPpRIp45aRby5xTCWRI3lT9brGTqTiBC2chNuSpJS9mAtJbxQFg4WYuYT5LpW2+BOjWRhxDMmqCn/2ObdXGSNpOS+NelF6IgajPZPL5uoQfLflYvPZF3FihFMLt2aIP/PPIvJTWYLDBO5THm3Un4c/kar/xkHWQEVCOYpeFkGmkizSb7bvIM''@;'; put 'put ''1Agnmc+z0kxITyXfTfrLPEI+nTkSnV4aO6N+t1DS8xgikAn1XahHhDKhvgfxtT2wRxancOJyjW6Daykrko0QzIrQUeO36HjOm+lAsy5cICE4vpmswZz1iQWp29RLT+SdJUoRTK5vPPb5R5BUt46SwTBSOtI7bfWzVp1glkZa01sS4SxOQu6hlzkPCvJIy5lJVaeOmJBxqDhgiJO8F+ZSbkOPaDpL''@;'; put 'put ''Y6i372GUQiiW/CgTUzxIbOBCYhJpKBPdlLDeqr1c/OVLqdewbx8DKgTTx4DqtDn2f+TE7F0GOlErwNpMdkfKyXRReqJwSlOkpnmcxa4UweQB3XfrtRg+6GwlzeQ8vmzKifn0K+9g/8HD/FWWICMQagSzNNwafaT7o4UTktMbOXmta1rO/FwP+XJyKiQyrx+yaBrP7Ayg8ASlDJFECKVhDNh3WxgR''@;'; put 'put ''R4qsja9DZDKZfCmJVMbVoWTnsVQJyU6CpHxWXkLJeYRChFOegr8QzFPgUP5LTLwbXSmdUdPOpM2kGR8I30xOrr51uRt/fG9XGl/lCGbvbp3wzAN3KJkPk2eixWLFVz/+gq9++lXpiWmUwYU6wSxLTsVaTpqrFKruJZ1OqtLCpDM/x4wcIprHj5roz4wT6SbkZpnIp7PYn6+s9mRb1RFgGYRFeqim''@;'; put 'put ''txtxiUQoiUzWqgf67CKCaUJ4JLk9aBk3in0oA/FQrfoognOEEMzg4B7Ms7I2s0U3NzqfQ5HmdSnS3OHfKkC2MDN++9xCZX3VjB73ylI5ghkbE423qKpPAlX3UTFnJKdh2rX3AJ5+9R0J9vHO4iCuhWBWDnyNdNJ/mj/nyfRIXDvdUeBCYR75cJ4gjecxC9VPNyE7kzSeR4E88vUszJP8nBUhzJmk''@;'; put 'put ''7EQkwyn/ZEwtN9X2Jo0k/XFQTjRpZsKjiWhGUI112pG1kRyQw2QyVLWTFWHp/U0IpheJ0FvzNcR5M5uTNpMvEn+8eJnJSpCbQ9Hj4+z00q2ueZxnj3IEkwf14KgbcG7/s1BQUMBflVs42Oe18ROxaOVa5cZmtAEJwayZxDTiSf5IXGnIfJJ4sjahiKI7CylSvZh8msjcToTzGK/NRDxNyMuh30gj''@;'; put 'put ''6ijg1Eqc+7Zm/dDz0VarmyK2vRpJUO1uIo/0IGQzd2QcmbxjSCNJfpQ2ikq1EJDs9soPRibwHv5TGBt/yE0Ipj9QNU6bfP9p1d2FzuSbGZtIwYs+1mayeXz7ag8WfK1u9LhX2koSzL49u+LJ+25HYWGhd5xKrS2U83PZ6vV48a0PtUStSg3OYIMRgukfgWnEk8gSE08T/ceaT20b3fxdFFjkKKIA''@;'; put 'put ''o0JaEwktIC1nYS4R0BO8JvJJnwv5cz7V+c2jYCN6z3QXAUVURZbJqJuy6gR7sVg84GhtK7lg2aiIhz2SNY2kcYwCIqI8RBpZKwnKL0mfo9ywhpOPZDiRSDKtWdnXlTWSRBw5kTlxSPogRNJXMhWC6Sskjd1OLAW6dSVtZpOOxb6ZnDnBFwtfw3O/NGP3enWjx704KUkwVTeTc07M/IJCPENm8h17''@;'; put 'put ''9ntlKesgICAEMwig0ynZNMz/kccIrTk2hQNUtI9ah1hz52QtHqXUcRK5dDrY1E5rqsHgJKLppHdPRyFpP3k7fS+i7S6NgNJvRRTo4mLNKFei0WgtkTn6TqTW42Zyx6cgOwKd30JKiGLjs4c0sNDIn4nyRtro2WGmtSXMQ8EznOaJCCSRSSsF2dh4bad9iFjy8RZaM2nkVFCsgSxun87ABJLZsLbm''@;'; put 'put ''UwqJ1ITr5/+EYPoZYEM1z76ZLnQf4iKXE7NmWalJ90PJPM44KUkweWD333Ydhg7oq6yZnCv7TJ05Dx98+QMPV5YgISAEM0jAV/K0XiLKuzN385I3vtFrX0qQUt6n3OUkuWPS99dCTZj5BNzUaRbtMI0rMkktboSTlGufuNHif6dpRX4OBAJCMAOBsrHOEVvbhZ7nFaFRe28J1OJruKqj0Mzjq8g8''@;'; put 'put ''/o365nHGRlmC2bNLB4x+6C5lo8lZe3I0IxNP/N9bSM+kUiuyBAUBJpjdB7vQvi9pwchvUBZBQBAwNgJCMI0tP3/1ni0VrXq5tLyZ0XGWat3vrSfN43tCwDzOclCWYEaE2/EmRZOrmnSdhWcmm9ykb6bgxxlz+assQUCA/eJ60Jtt216mat1wgtBlOaUgIAhUgIAQzArAkZ8oUwNpM4cVoXEHCgA6''@;'; put 'put ''WdWqMrBo5vFsF6a+E07+4ezbo/6iLMFk0Y26/nJcNvxcZZOuF6cs2o+nKPF6Xr6aEfN6vwQ5MKPXBS6KOhQNpt5lJf0TBCqDgBDMyqAU2vuwNrPNmS50HcB5ZSvnm8m1x7cspeTqP6idXL3kzFCaYHZo3QIvPn4v+cazc3z1fCZKgqXLz2Qqf/ujLzH3z2W67J7qndII5vlOtOohGkzVZS3jCw0E''@;'; put 'put ''hGCGhpx9Mcr4ui6yYDnRuK2ZggApo8NJ/+qy2uZ5NfsTEw5spai+EFmUJphWSuczZvRDaN6kEYqKKIRUwYVTFq3btA3PjZlAUbPiAxhoEQvBDDTicj5BwL8ICMH0L76qte7VZnYZ6KK0YmVrM7n2+PEMN34ZF07p0ioRFagISEoTTJbR1RcNxS0jLlXWTM5jdNFb0yvvfITlazfyV1kCiIAQzACC''@;'; put 'put ''LacSBAKAgBDMAICs4Clq1SvWZjZq809tJpvH1/7uxvIZoWMeZxErTzAb1k/StJhhlHROVTM5+2IuX7MBL739UXHePAUvXr0OSQimXiUj/RIEqoeAEMzq4SZHEaEyedD2TCdVAXIjMvqkNvOkwvLXD2xI26927fHSc0B5gskDfo7SFfXs2lHZyj48Rgdlin7xzQ+wbvM2/ipLgBAQghkgoOU0gkCA''@;'; put 'put ''EBCCGSCgFT5NfD0neg53oSFpMznH7eE9Tkx/P7y4UIPC4y49tJAgmOec2QOP3XOrsknXWahW0tDOX7Qcr737SWkZy3c/IhBGNaB7Dneg9Rll+9748dTStCAgCPgBASGYfgA1BJs0m0mb2ceJHkM8WDXHhPXzQye4xyvukCCYMVGRGEs5MeskJsClaCAMJ14vKHRQsM94bNmxxytfWfsZAZud69W6''@;'; put 'put ''0LGfpCnyM9TSvCAQEASYYC6aYsbO1RatbGhATionURaBhCQXCnJNyMsJjdyXJQUZEgSTBzzqOsqJeb66OTF5jBYqH7lwyQr8b4JoMRmPQCxcW7rdWW70GEa1r6WSTyAgl3MIAn5FgCN+F3xnwd71lEj7ZC16v55QGhcEFEUgZAhm6+aN8fKT95MTLiUVUDQnJo8tv6AQz78+QbSYAbpgLVYPmnZy''@;'; put 'put ''oe/lLridiuZaDRCWchpBIOgIcECGy4PfvrLh4A5LyPnMBR1/6YBSCIQMweT7xouP34fO7VsrW5+cZ6ZoMQN7fXLUYFITFwbd4ITZSucWjhlYAcjZBAFfImA2wZHrwZxPwpB+mJ4aHn5yyCIICALVQSBkCCaDc+7ZvfHgHTcpHewjWszqXAbVP4a14XGJHgy6yYHYRNKOk/ZDFkFAEDAmAmwezzxC''@;'; put 'put ''GsxJYcgNQZ85Y0pNeq1XBEKKYMZER2Hs848oHezDE421mH8sXan5YqrqDqCnC8oe6cZZlzrRtIMJTodUU9KTbKQvgkBVELDZLdi+0oMlv1jhyAu9oIyqYCX7CgKnQyCkCCaDMfLqi3HVxecpXdmHx+mg0pj/pbyY6zdv56+y+BEBi82DNj1d6HWhBPr4EWZpWhDwOwKWMDMWUwT59lUU4FMk5nG/''@;'; put 'put ''Ay4nUBqBkCOYjRsk47VnHoLNZlU22IdnLNcoX0GlIzn5usvtVnoSB3twFFuFhBQXhtzogC2CtB5UulMWQUAQMBgC5H9ZmOsm/0s7MsT/0mDCk+7qEYGQI5gshGfuH4Uze3RRurIPj5NrlL82YSKWrFrPX2XxIwL2SA/6XuZA4/ZmMZP7EWdpWhDwFwJWMo/vWushDaYVhfliHvcXztJu6CAQkgTz''@;'; put 'put ''jC7tMfrBu1BEZmSVF9Zibtq2E6PHTCAy7VB5qEEfm8XiQeOObvS7oogCfYLeHemAICAIVBUBskTM/9qK/VstlHJMzONVhU/2FwRKIxCSBNNGQTD/e+YBtGjaWHmSSYk/MX7SZMxesKS07OW7jxGIjHVj4DUO1GlsJv8tcUvwMbzSnCDgNwSsYRak7nBj4WQb8nJFe+k3oKXhkEIgJAkmS/j8Qf1w''@;'; put 'put ''763XKR/sYzabsS/1MJ58+S3knMgNqckd6MFarG406+JGn0vccLuEYAYafzmfIFAtBEhZyfrKBd9YsXczaS+lek+1YJSDBIHSCIQswYyNicYbzz2sfMoiFrjVasNn303FN9NmlZa/fPcxAhFRbpx9VRFSWokvpo+hleYEAb8gwKmJdorvpV+wlUZDG4GQJZgs9puuvBDXXHq+8lpMTr6ecSwLz7z6''@;'; put 'put ''Dg4eORraM97PozebqbJPMzcGjHDCaqdCIBJR7mfEpXlBoPoImCixegFV7vntUxsyDpops4j4XlYfTTlSEDgVgZAmmMn1auP10Q8jMiICbsVT+VhtNsya9yfenvjVqTNAvvkcAZvdg479i9B1oAlFhRLx43OApUFBwBcIEJdkF6Jl083YulzyXvoCUmlDECiJQEgTTAbivpHXYPjg/iGhxSygSPKX''@;'; put 'put ''3voQ6zZvKzkH5LMfEIiIJlP5lU40aC0k0w/wSpOCQI0RsIVbsHWZmwimDQ5JS1RjPKUBQaA0AiFPMFs0aYhXnn4AFnqTVb2sIqctWrtxK14Y+75W6af0ZJDvvkNAS76e7EL/EUVUq5yiyp0S9OM7dKUlQaBmCHDOy8O73FhAaYlysswU5COm8ZohKkcLAv9EIOQJJkPyxL234uzePVBQUPBPhBTb''@;'; put 'put ''YiIizWmLZs1frNjI9Dcck8WNBi0oAfvlRbBHmig6VSr86E9K0qNQQ8BqM+NYugfzJ1tx7JCFFAuhhoCMVxAIDAJCMAnnTm1b4oVH79E0mKprMTng58jRDDxNAT9HM44FZpaF8FksVg+atHfiTEpdZLFR0I+QzBCeDTL0YCNgIXJ54hhpLr+x4eh+M/nei+Yy2DKR86uLgBBMki2Trucfugs9unRQ''@;'; put 'put ''vnwkT2ULJZr/Zc4CvPfZt+rObB2NzGLzoHlnJ3qeLyRTR2KRroQYAkwuc7Pc+PMHGw7uJJcoIZchNgNkuIFGQAjmScTP6EzlI4lkql4+kofLhJoDfl586wOs37w90HMuJM/HJLMFkcwzLnBTXlKIuTwkZ4EMOlgIcKWe7AyXRi4P7xFyGSw5yHlDCwEhmCflzUE+/33sHnRu3yY0tJgn65Q///q7''@;'; put 'put ''yC8oDK1ZH6TRcqWf5p3d6HkB5cgkbYpU+wmSIOS0IYUAJ1LPPOzBoh8sSCOzuOS6DCnxy2CDiIAQzBLg9+7WEc88cCccDkeJrep+tFismPTNFPww/Td1B6mzkZktHrTs7kS3QW6Ex5ikZrnO5CPdUQsBTkV0aJcHi6dYcDxNAnrUkq6MRu8ICMEsISGr1YIXH7sXHdq0DAmSyabyrJwTGP2/8dhz''@;'; put 'put ''4GAJJOSjPxFgc3mDVk50H+ZBfG3A6ZAURv7EW9oOQQTMXCLXjN0bgGU/W8n3koN5JKAnBGeCDDmICAjBLAV+nzO64Mn7bg8JgslDt5JD4OIVa/DK+ElwuaTqTKnp4LevXFIyMcWF7kPdSGkOFHGeTOGZfsNbGg4dBMxU/pErs21facWKmRYUFRDblEUQEAQCjoAQzFKQh5oWk4cvuTFLTYIAfo2O''@;'; put 'put ''d1NZSSdadKfgH4skZA8g9HIqBRGwhJlReAJY+7sZO1bRZ6nQo6CUZUhGQUAIZhmSCqWIch4+1+NNS8/E6DHjcfDw0TIQkU3+RMAW7kbTjm50PseF2AQqLVlEqkxJ/uxPyKVt1RAwm8gaY0LaXmD1b1SlZze/rIlJXDUxy3iMhYAQzDLkxRHlLzz6L3Tp0DYkIsoZAqvNhoVLVmDMu5/CReYlWQKL''@;'; put 'put ''AJvMayW50GWACw3aerRUUm6nsMzASkHOZkQEOL+lk17Ktq0wY9NCK7KPc+FHIZdGlKX0WS0EhGCWI89uHdviOcqLGUp+iZqpfCKVkVwgZSTLmRZ+32yPcKNZFxfa9/EgjgKAioqIZLqFaPodeDmB4RAwkdbSQlrLzEMerJ1nwf6tRDQd4m9pOEFKh5VFQAhmOaLlCOvRD9yBXt07h0SNcoaBTeVc''@;'; put 'put ''PnL0a+ORejitHGRks78RMJkouryeG+37utCknRu2CDL3idnc37BL+0ZBgJSTNtJaFuR5yM8S2LTIhpxjrLEUraVRRCj9DA0EhGBWIOd2rZrhxcfv025bqtco98LApvIlWlT5RDidElXuxSUYa05nVL+5Cx36uFGvKZnNSWOjEc1gdEbOKQjoAAE2h7sp2wWXetz4hw1H9oB8LUVrqQPRSBcEgX8g''@;'; put 'put ''IATzH5CcuuGRu27GzJmaHAAAQABJREFUwL69QkaLyaM3U5Wfj778HlNnzT8VDPkWFATCIjxo0tGFNj1dqF3fRJVI+KEqfrJBEYacNCgImMkUbqYXrIyDbmxabMXeDRY4CkRjGRRhyEkFgUoiIATzNEA1bpCM/z3zIOxhYVputdPsrsTP7B5wIjcPXEZy++59SozJ6INgDXpUjAdNO7nQsqcbCfWI''@;'; put 'put ''aBLHFKJpdMlK/ytCgHNaMrnMJo+drStN2LnKgtxsCuGhe5QsgoAgoG8EhGBWQj533nAlLjlvEPLz8yuxtxq7WEiLuXHrTrww9j3k5ReoMSglRuFBRAzQrFNx7syEJB4Umc5ZoymxQEpIWAYBCt4xw2QBso+Sn+VqM3autiCHosPhEWIp80MQMAoCQjArIanaCfF447lHERcbHVJR5Vzl5/tfZlO9''@;'; put 'put ''8qmVQEl2CSQCHmKTkdFAo/YutOjGpnOP9lB2cmojiToPpCjkXL5CgLgjl3fk96TjR4hYrjFhzzoK4DlOG4RY+gplaUcQCBgCQjArCfWVF5yLW6+9PKS0mGyGKipy4vX3P8PilWsriZTsFmgErHY3GrR0o0VXCgZq5kF4uAlOF1FQ+pNFENA7Ahy8xknSucBAxgFg51rysdxoQT5V5JHIcL1LT/on''@;'; put 'put ''CJSPgBDM8rE55ZeoyAi8Pvph1E+qS9HVzlN+U/kLpy46cjQDz1LqosNp6SoP1fBjs1jdVN/cg+aURzOltQextdikCJqvYj43vHBVGwBrK6k0KsgMXpDjQepOE3atMVMFHqodXihmcNXELeMJTQSEYFZB7sMG9MF9t14XMtV9vNCwqXzZ6vV4ZdxEOIqKvJtlrVMEOI9mVJwbjdpRUFAHJ5FOyhto''@;'; put 'put ''59J5HkrxIlpNnYotJLploqAdK/3xS8+xI8C+TRbs3WTG8aNkGncJsQyJSSCDDBkEhGBWQdSsxXzm/jvQqV2rkCOZFosVX02ZTn8zqoCY7BpsBDiXZr1GLjSmWucpLUirSbXOObErk02P+GoGWzwhcX4mlRb6Y2169nEPDpO2cs96M9UNp1RDoq0MiTkggwxNBIRgVkHubC7mEpJP/fv2kEq+zhCx''@;'; put 'put ''P2aho4hqlX+CZWs2VAE12VUXCJBWMzIKSGnlQsN2LiQ14mh0Cz3zPaRNoie/kE1diEmVTvxFKulOmZvlwtH9ZuzbbMYhSpCel03aSlGkqyJqGYcgUC4CQjDLhabsH8JsVvzr5hEYOqBvSAX8MBqcuoj9MJ8bMwEHjxwtGyDZqnsETGb2z3Sjfis3GrYmv80GoIh0fuh7RLOpe+nptIOkoORE6Fwb''@;'; put 'put ''nPOz5ma7SUNpxoHt5Fe5g/LqZvH8op1kEQQEgZBBQAhmNUTdKCUJLz52X8ilLWKo2B9z5bpN5I/5MfILCquBnhyiJwTMFjabE9lsSWUpW7hQpwFpOkmzCdJ4aj6brNkUbZOeRKafvnD0N5m+TRSrwyVMsylPZdpe4OAOC47sNp3UVAqp1I/ApCeCQGAREIJZDbytVgsuGz4YI0dcGnJaTIaLSeZP''@;'; put 'put ''M+fhgy++l4oa1Zg/ej2ENZvRpNms19iDlJaUW5PIZkw8aaVsxVopTn0kpnS9Si8A/SKuaCFSyZV12JG3MNeJYxScc2SviUilGZmpFhTkcT+EVAZAGnIKQUD3CAjBrKaI4mNjMPrBO9GqeRM4HI5qtmLMw9gfk5VaEyZNxqwFS4w5COl1xQiQBjM8Akio70Jy8+JAobh6QEQUVVgh/uBxUfoj1m6K''@;'; put 'put ''72bFOBr5V5Izm721co3sg13gQm4O56okUrnHqhHLLCKYbon+NrKUpe+CgN8QEIJZTWjNdMPt1a0THvvXLVoL7L8WSguTzByqV/7yOx9pJSVDaeyhOFY2pcfU8mh5Nus1cSGxvhuxtSlQKNKqmdO1uuic3J2vg9C6FNSZDkQoWUNpIg0lX9/OQiKUWR5kHjHj6D6O+jbheJoZhfm0o2gp1ZG7jEQQ''@;'; put 'put ''8BMCQjBrACwH/Nw78lqc2/+skDSVc9DP/oOH8Z833tOSsdcASjnUYAhY2Jye6CENp5v8NilQiEpVxhHhDI8ivzwbabWIaHIlIRcFfIiWU4fC9WonmVCSDyWXYszPd5LfpAnHDpmQTlrK9FQzsohcFhQU/67DUYR8l2z0DLKH2RAVGYnwsDDY6LM3RJ/f85xUia2ALGx5efnII0G6tAsy5GETAAKE''@;'; put 'put ''gBDMGgLdILkeBfzcg4Ra8SFV4ccLG/tjrli7Aa+OnyRBP15QQnBtJpN6RCyRzLpEOpPcSEj2IJ4+R9E2O5nVuRQgazfZtM7k0y3BQ4GbJV7NJAXkEJ8kBTOVZSTtZP4JD7IzyHfysBkZRCozD1JKoWNmFGkeP6yllEVPCERGhCO5Xh00bVgfjVOStapyibXiEBsTjXA7kUubjYKuLKf4xTtdLi1n''@;'; put 'put ''M6eYyzmRi6MZx5B6OA17DxzCngMHkXoojdLPhZaLl55kqnpfhGDWUMKsxbtgcD/ceePV9KbPr/qht1jpxjZ9zgK8+9m3xSbS0INARlwGAnRpIDKWTOl1PKhFZDO+jovM6rQt3kWaTjPCqLoQ+/hpxJMt66zxZLWLmNnLQPM0m5gPklmb85lzDkr6qBENFwFamOdEfq4ZJ46xiZs0lEQos2idTd8d''@;'; put 'put ''eZKT8jTIBvXnlKQ66NS2FTrSX/PGDVA7IR6RpK3U/ODpOuGyxcXXT7F7Cn/m30ou/J3/OI+z94/3O0GEMy0jE1t27Maq9ZuxadtOHMvKKXmofBYEaoSAEMwawVd8MFf4efLe29CVkrAXFoZm6h6z2YJJ30zBjzPm+gBRaUJVBLiMpT2CUiGRZpPJZkxtIqAUuR5di4hnHJnYIz2w2oGwMCs9FAkF''@;'; put 'put ''IpyauZ3LqdNDkasPMQcNOT/Pk5yBrdmshmRizqZtjWjQJlehm4Jw3CjIp0TmWUBOOnCctJM5FISTfYzzUrJPJTdyKvng5mTRFwJ1EmuhZ5cO6Nm1I1o0aYha8XGanIuoTK/b7dauA1/0mOcOK0hY8+kiTWdaegY2bNmBhUtXYc2mrRS8KmWBfYFzKLchBNMH0ucLtW2Lpnj+4bvpwWjTbgI+aNZQ''@;'; put 'put ''TTAGRU6XVulnyap1huq7dFYPCHioXjpgJ4IZGcPkk9ZUTz2GSGcEE0+qQsS/hdE+VkqbZAujaHZW19GiEVEioExENULqjWw/SUY1Qso7/vWBv+hgOcn1NNqnMcdi4sg9I2WTRiR5SNqYyHeuyEF/RBId+R7SSBKJzLTgxHHgRCYlMifTdl6OCQW5bP7mFoRIMgpGWfjlqW3LZhjS/0x07dAGdWsn''@;'; put 'put ''aqSSM5Twb4FYmGyGkR8nE9mde/bhtz+WYQGRzeNZ2VpfAtEHOYdaCAjB9JE8beSLOOKSYbjusgtCMuCHYWTzy5GjGXiNyklu27XXR8hKM4IA0SUKKgqz0194MdEMjy4OKIqIdmvEMyKKfqO/cCagtI+VYh2sNjcsYTwvKfDISuZBzh+vqf0IUeJff1Ew/nCSyBWv6H/vM927Pp0QvI1p7RZ/0f7X''@;'; put 'put ''iGNx+381xc0T+eWAC05m73KaKFE5iEB6UFRABJL+ColA5hFZzD9Bf2S1zM+hYBtaF1AEtyOfgze49eLznK5r8rt+EeAX887tWmH4oH4aseRgHTZ7s0YxmAsTTSace/enYubvizB74RLNhzOYfZJzGw8BIZg+lBnnxnz2wTvQunnTkMuN6YWRSebOPfvx2nuf4OBhKSfpxUXWgUKATOyUUslMWk6L''@;'; put 'put ''1Wtu98BC5NQWRppPIp62cLdmhrfa6Hfaj9dc4pD3N1PWJYvVreV+5Ie/2UwklROLk2n/L9JZciisPiUNk5MIosftLbdJJmviBy4igW4nkUH6c1EchYO0j07vmrSMHFtRVGAm0zURy0Iz7c8+deyTKsSxJMSqfm7VrDEuHjqA0t11RGREhPbMCJS2srKYchAnm9B37d2Pb6fNwvwlK0PSQldZvGS/''@;'; put 'put ''UxEQgnkqHjX6xuSqS/vWeOb+UZpJQW83ixoNrgoHm+nNd82GLXjj/c9wPFucxqsAnewqCAgCiiOQQD6VlwwbgHPPPlOLAGeTtN6fFUwyeVm+ZgM++24adu8/qPs+Kz6NDDE8IZg+FhObym+66kJcccHQkDWVs+aHTZELl67EOxO/QkGhpMHw8TST5gQBQcCACPTs0h7XX34hmlFEOJvBOWjHSEsE''@;'; put 'put ''aVozMo/h66kz8ctvCzQ3DyP1X/oaWASEYPoBb35Dff7hu+gm0jBkTeVMMjnWYua8P/DR5B/J9BdcnyI/iFmaFAQEAUGgUgjEREXi6ouHYSgV5QgnR2H2szTqwr6Z/Dd/8Qp8TPf29EyKNJNFECgDASGYZYBS001cRrJbp7Z46r7bQ9pUziTTRSzzh+mz8cUP02sKqxwvCAgCgoDhEGhCidFvu/Yy''@;'; put 'put ''dGrXmvx03YbTWpYHOOfj3LZzN97++Cts371PTOblARXC24Vg+kn4xabyi8hUPiRkTeUMLfulchWJz7+fhqmz5vsJbWlWEBAEBAH9IdCzaweMvPoSpFDFNyNrLctD1m63I/PYcYz/5GssXbWeFArGMvmXNy7Z7hsEhGD6BscyW0mIj6WAH4oqb9E0ZBOwMzCsyWQ/zI+/+hGzFiwuEyvZKAgIAoKA''@;'; put 'put ''SggMpZyWN1x5EeKolKOK5NIrK44053KT73/+nZY7M9gplrz9knXwERCC6UcZsPauU9uWeJqiylmjaTSHbl9Cw1icyM3TyklypQhZBAFBQBBQFYFLKP3QNZcO12qEh8J9n30yWXv5yTc/YdpsDv4Rn3tV53ZVxiUEsypoVWNfq9WCERcNw/VXXBjSpnKGjknm8ewTGEeR5cso3YUsgoAgIAiohsDl''@;'; put 'put ''wwdT0Y3zEGYLLaUC39/ZWvXBF99j+tw/hGSqNrGrMR4hmNUAraqHRHOt8vu4Vnk7FBQUVPVwpfbnmxBHHY6bNBmr1m9WamwyGEFAEAhtBM6nijw3XXWxRi71ntvSH5Li+zuXbB1P9/d5fy6HUzSZ/oDZMG0KwQyAqPitrkWThnjuobsQEx0V8m92bE5JS8/E2A8+x4atOwIgATmFICAICAL+RaBf''@;'; put 'put ''r26468arqCpPeEhHVPP93UGBnS+P+wir1m3WCKd/kZfW9YqAEMwASYYvuvMG9MFdN10NI1Ru8Dcs/KZ7mOqWv/3Rl0Iy/Q22tC8ICAJ+RaBdq2Z4cNSNqJNYK6R97b0gc+WfoxmZ+M/r72HPAan648Ul1NZCMAMocbs9DPfecg0GU4mw/Pz8AJ5Zn6cSkqlPuUivBAFBoPII1E1MwKP/uhktmzYW''@;'; put 'put ''clkCtvDwcGzYvA0vvvWhlAwugUsofRSCGWBp162dgP88fDcapiSHbJWfkpALySyJhnwWBAQBIyHAQZysNDj7zB4wUcdD0e+yInlxMvYfZ8yhFHVT4KCa67KEFgJCMAMsbyZUXdq31oJ+Qj11kRd6L8l8hypCrN+y3btZ1oKAICAI6BqB4QP74pYRl1IaOouQyzIkxfEH/Pfau59g0fI1koi9DIxU''@;'; put 'put ''3iQEMwjS5bdeTmVxM1V4CPWoci/8TDKPUODP2x99QSRTAn+8uMhaEBAE9IlAY7JCPUHZQZLqJAq5rEBE7I+ZevgInnl1nBbcWcGu8pNiCAjBDJJAOdLw4TtvwllndBV/zJMy8EaXc9kxSWEUpIkppxUEBIHTImCloM37br1WM41zffFgLawd5Psm//HCL+q8eE31XEGIk557v2s/BuE/MZUHAXQd''@;'; put 'put ''nFIIZhCFkJJUF6MfvBP1ac2R5bJAu1FmUG3bdz/9FktXrxdIBAFBQBDQHQK9u3XCv2+7nir12ALeNyaVYWFh2nlzc3ORcSxLyy3M981cDh71gPplR1xsNNjnPyEuFvHxcZqp2ks4A91p7jPnxHxuzARs3Loz6IQ30OMP1fMJwQyi5M100XXr1BZP3Hsb+I04FEqKVQZufhs/np2jVYSQspKVQUz2''@;'; put 'put ''EQQEgUAhEBFux1P/vh0d2rREILWXrJ1kYpmbl4ct23dr1dA2Uh7hQ2npyMsvu4BHGJmnE2rFUYR7I3Tt0Aad27VGUt3aGsELtFKDo8qXrFyLl9/5WKtdHih5yXmCh4AQzOBhr52Z/TEvO2+Q5igu/ph/C4Nvply7/NNvp2Hm/EV//yCfBAFBQBAIIgID+5yBO2+8OqDVeuykkTxB2so/l63Gr78v''@;'; put 'put ''ws49+6tVJacWaTP7nNGFUuX1RvMmjTSCHKi64azF5OW/b74vCdiDOH8DeWohmIFEu5xzhVN+TPbnGdi3t/hjlsCISWZ+QSG+mjIdP838vcQv8lEQEAQEgcAjwNrLp/89Cu1aN2dHR793wOtfuYzchb6dNgvbdu2tFrEs3dEoKl88qG9PXDx0IJLr1UFhYWHpXfzyXbSYfoFVt40KwdSJaGonxGul''@;'; put 'put ''JJs1bhiwi10nQ6+wG0wyi5wuTPn1NyKav4Z8mc0KwZIfBQFBwK8IsPbvnluuRUR4mN/9CNkczlacyT/NwIy5f6LADySQ4wBGjrgEvbp3hpPiAPwdDMRaTK5V/ixFlG/cJr6Yfp2sOmhcCKYOhMBd4AuvXctmmm8P1ytnZ2xZihFgkukmZcHM3//AJ99M1bSago0gIAgIAoFEwEL3oYfvugm9u3Wm''@;'; put 'put ''0/pXe8km8dRDR/DuZ99g7aZt9Dxw+W2o7P9/1UVDtdR57LLl71iAiIgITJs1j3zsf5Dk636Tqj4aFoKpDzloveAb2MC+vXDvyGu0i9zfb5M6Gvppu8IE3ET4LFq+Gu999p2UHjstYrKDICAI+BKBZo0a4On7b0cCRWT7897M5HL3vgMY+8Hnmq8la/wCsZxLfpm3XnMZRaD7VzvLZv9Minh/7KU3''@;'; put 'put ''ceRoRiCGJucIEgJCMIMEfHmn5eo+119+Pq6++DzxxywFEpNMM92c1m7coqUxSj2cVmoP+SoICAKCgH8QuPLCIRhB92WL2eQ3gllMLlPx+vufEslM9bs2sTRS/Xp1IxeAEVqaI39qMnmcbxKB/u2PpT7xKS09DvmuDwSEYOpDDqf0gh3JOQl7n57dhGSegkzxFyuR8J1792MCJWTfunNvGXvIJkFA''@;'; put 'put ''EBAEfIcAp/th7WXHtq38FtzDFW/SqJrZa+9OwtYde4JWVvG8AX1w+/VXgNPo+UtTy8E+fyxdqZWQLHRIDmjfzVR9tSQEU1/y+Ks3nCD32QfugAT9/AXJKR+YZPLN+IMvvseSVetO+U2+CAKCgCDgSwSaNUohgnkHmcdj/UK6ioMZnZpZfOmq9RTYGFwf/Fsp8OcSSp/nr1gANpMfy8rGoy+8rpUI''@;'; put 'put ''9qWspC39ICAEUz+yOKUnbA5u3byJFvQTHxvjtwv9lJMa7AvfpHLz8im6fAamzZ7vlxu/wSCR7goCgoAfEBg+qB9uufoS2CgIxh9aPTYZfzN1Jr6ZNrPcpOl+GFa5TXIp46dPJpP3V55M1tj+39sfUvL1dUHT1pYLgPzgEwSEYPoERv80wkE/Z/borJnLmXD60yfGPyPwf6v85u9yufHLbwvw5Y/T''@;'; put 'put ''JcLc/5DLGQSBkEPg/tuvR/8ze/jFPM7kchOl7HmFKtwczTymG2zbtmiKZ6mUMbts+YNUc33yb6b+qhXTCLbGVjegK9YRIZg6FyinjbhoyDm47drL4XA4/HKh6xyC03ZPizA3mbF8zQa89/m3OJqhn5v0aTsvOwgCgoCuEeCk5Oyu1KpZY5/3k+9dHCM+5t1PNFcff6Yjqk7n77zxSgwfdDZcfjDZ''@;'; put 'put ''M7Feu3Ernn99AuX4dFSne3KMzhEQgqlzAXH32MH81msuxcXDBkrQTzny4hs1m8x37NmH9ymN0eYdu8vZUzYLAoKAIFB5BBqlJBHBvBOJVNPb1wuTrKXkQ/4GRVRn55zwdfM1bq9Bcl28+Ph9iIuJ9rlyg+/XGZSu6NEX3tCV5rbGoEkDfyEgBPMvKPT9gd+iH7rjRpx1RlchmRWIioN/+KbFCdnn''@;'; put 'put ''LVpewZ7ykyAgCAgCp0egZ9cOuP/2GxDpY1NxseXFhP9NmEQkM/iBPeUh8a+br8bQAX19rsXk8bvcbjz18ltaNhB/mOHLG5NsDwwCQjADg7NPzlInoRaevO82tKGKPwUFBT5pU8VG+M24kNwJps76nXx8ZmmfVRynjEkQEAT8j8CF5/bHTVddDKvF7FMtHge57KJ0ay+88b6uNXidKDXTMw+MovFb''@;'; put 'put ''fA42l8N8+Z2PqIDGGgn08Tm6wW9QCGbwZVDpHvAbX+MGyRTdNwrJ9epoPpmVPjjEduTgHyrAiaWr12Hi5Ck4lJYeYgjIcAUBQcAXCNxM5JJJpsXHBJNLJn7/y2x88cMvuogcLw8rDvJ5iczkzRo38HmgKWPwwRff4aeZ8/xaDrO8scl2/yIgBNO/+Pq8dSZOHdq0wBP33IroqEhJX1QBwl6/zL0H''@;'; put 'put ''DuKjr37E6g1bKthbfhIEBAFB4J8I+COC3Gsef21CcXCP3qOo777pKgwb2M/nZnKOJP/u51mY9PVPQc/9+U/Jy5aaIiAEs6YIBuF4b/qiB0fdCI4y91eesiAMzS+nZL/ME7l5Wo45NptzWiNZBAFBQBA4HQJMBB/71y3o1bXj6Xat0u+sKOCgnudff5eqkh3wqem9Sh2p5M5D+5+Ju2+5Bm6Xq5JH''@;'; put 'put ''VG431mDOnPcHxk2aDEdRcJPLV67HsldVEBCCWRW0dLQv+xlySa9RVNKL82OKg3TFwuEbOqcDWUjlyT79dpqkMqoYLvlVEBAECAF+gX/qvtvRuX1rcrjx3cL+l3v3H8Tzb7yrVSTzXcv+aalD6xZaqiabzerTE3DJyAWLV2i116VkpE+h1UVjQjB1IYbqdYJvflddOBTXX36B5MisBIQlTeYfk1/m''@;'; put 'put ''qvWbK3GU7CIICAKhioA9jGuQjyK3pJY+TbLO6Yk2bNmOl976EMezc3QPb0pSXfzfE/chJjrKp31lHJavXo+XKNCnUHJh+hRbPTQmBFMPUqhBH2xk/h1JdWMvHT5Y0hdVEkc2meecyNWizH+cMVeizCuJm+wmCIQaAlwycTRVs/F1knUmVivXbaQURZ/oMv9laTnXrZ2AFx+7B3USE3xqLWMcVq3b''@;'; put 'put ''hBfefF8IZmnQFfguBFMBIfJb9j0jr8G5Z58lJLOS8mSTOWs0V6zdiE/IZM6BQLIIAoKAIFASAbs9DKMpyXqblk19aiL3Eqv/UQWfLANoMGsnxGsaTH8QzOVrSIP5tmgwS847VT4LwVREkjEUUf7AqBskEXsV5cm+UEeOZuCrKTPw28Ilmp9mFZuQ3QUBQUBRBNhC9PT9t6Mj5YL0pQ8m53/cvH0X''@;'; put 'put ''/jv2fUOYyJPqJGoEs1Z8nE81mJoP5hLywXzvU7IkFSk6i0J3WEIwFZJ9QnwsHqRqPz06dxBNZhXkyiZzThOycMlKfE456aSWeRXAk10FAYURYEvHE/eMpHtqe5+Oku85Bw+n4bkxEwyRo7c55cB84dF7wDkxfblwFPnsBYvw9kdfShS5L4HVSVtCMHUiCF91oy75yDxKaTXaU9SfVPupPKolA4C+''@;'; put 'put ''/HEGFq1YU/mDZU9BQBBQFgEu0duvV3fS3PkuvRkT1/yCQox+bTy279oLt4dzXOh36d2tIx65eyTMvlTj0nA5D+aUGb/hwy9/kDyY+hV/tXsmBLPa0On3wOR6temt+za0bNZYSGYVxcSaBQeZamaTufzrn37FsazsKrYguwsCgoBKCIy67nKtFreF2JUv08GxmfzNDz/H74tWkPZO3+bhay4ehmsu''@;'; put 'put ''PZ9yCPs2VyVrMCdO/hHfT58jlXxUumhOjkUIpoJC5SE1rJ9ECYJHonmThkIyqyhj1mYy0dxFCZC//PEXLFm1vootyO6CgCCgCgJXnD8YIy4Z7vNa5Ox/OGPuQnDKNC4EodeF74fPUi3ybh3b+bxUJGMwhgKd5v25TGqR63UC1KBfQjBrAJ6eD+WbQtOG9TWS2TAlmVJAFOq5u7rsG5NMdjyf9+dS''@;'; put 'put ''qgI0S3wzdSkl6ZQg4F8EzjmzB+666Wpwtg5fajD5/nLoyFGMHjOe1un+HUQNWq9fr44W4BMbE12DVv55KD+jGM/nxryL9ZQTlAuGyKIWAkIw1ZLnKaPhC5idsx+5+xZNoykk8xR4KvWFfaX478DBI/h66q+YT1Un9O0tValhyU6CgCBQSQRaNG2Ep/99O+J8TLD49Gwmf4vN5HRf0WsU9aXnDcTN''@;'; put 'put ''V1/i8zKRfF/lfMSPvTgWqRTwJIt6CAjBVE+mp4yISWbLpg3x+D23ol6d2lrFn1N2kC+VQoBLc7roDXvR8jVaTfO9Bw5V6jjZSRAQBIyLQDSlf7vsvEE4b2BfhFNOTF8vnA9z3aateGXcRF36e3Oi+f9S9Di7Wvlaw8gp4rbt2oOnXn5bC3jyNbbSXvAREIIZfBn4vQdMMts0b0KazJuFZNYQbb4p''@;'; put 'put ''pqVnYurMeZg5f5HcGGuIpxwuCOgVgTMoNdHVFNzSiu6dbpfLp+bxkmPml9e3KE3PAkqTprdgn6HnnIW7bx7hc+0lj58DfGb9/ifemThZd+MuKR/5XH0EhGBWHztDHamRzBZEMu+6GUl164hPZg2kxw8EKgOETVt3kNl8JlZv2FKD1uRQQUAQ0BMCyeRzePnwQeh/5hla3sciP0d480vr7n2pePGt''@;'; put 'put ''D3A4TT++mLXiYvDfx+5Fg+R6Ptdesrw5wOftj76gF/XFFJ3u0tMUkL74CAEhmD4C0gjNFJPMpnjozhtRv15dIZk1FBo/GPLyC8gvczl+/HUuJU4+WsMW5XBBQBAIFgJsAh/crzcuGnIO6ifV1UiPr83C5Y2NydZPZBX57LtpyM3LL2+3gG6/44Yrcf7gs+GiIhS+XvhZxOngnnz5LeykbB2+DJ7y''@;'; put 'put ''dV+lveojIASz+tgZ8ki+sDm6/FFKYdRIostrLEN2VOdoUNY88APitz+W6uYBUePBSQOCQIgg0LVDG1x5wRB0aNtSKwnp9AOpqghKvi9z8OA4MhfrwVTet2dXPHD7DbBYzH4hf/xyvp38L59+dZzcLyuaGAb/TQimwQVYne4Xk8wUPEo+mY0bpkiezOqAWOoYNpubiGxuofrC3/08G8vWbPDLjbnU''@;'; put 'put ''aeWrICAI1ACBFNJUXkbmcK7UExUZEdQgSH5Rzco5gf+Nn4gNW3cGzWzcjDKPcNR8Yq14v5jGWVzsfzl5ynR88cN0qeBTg/mr90OFYOpdQn7sH2swH77zJs2JPT9fH2YZPw43IE3zmzk76i9ZuQ5TyGy+jcrAySIICAL6QoBzOg45u7dmAq5D5XXZBzBQ5vCKkOC0RVyj/PX3PtXuHZy5IpBLUt3a''@;'; put 'put ''ePLeW9G0UQOqrON70ziPxautfZa0lxvIj13M44GUcGDPJQQzsHjr7mwNkutqppD2bVpCSKbvxMMPimzSRsylChU/z1mgJVT2XevSkiAgCFQHgTCbVdNWXjz0HDRrXJx6R28BJpy6KPXQEYybNJkSkO8ImCYzqU4i+effhDYtmvqNXLLM+N64eftOqsM+Qczj1ZnEBjpGCKaBhOWvrtatnYB/33Yd''@;'; put 'put ''undqLyTThyB7/TPT0jMwY96flJJjEY5n5/jwDNKUICAIVAYB1pp169hWy2nZoU0L8i20wN/R4ZXpV3n7MAk7npWtlZFcuHSV39P4cEGO+269Tst36W9c2Dz+3qffYBq9ePtLS1oerrI9sAgIwQws3ro8G5so2N/m3pHX4KwzuiIvT791cXUJ4Gk6xQ8zJpv7KDn7dKo9zFpNjj6XRRAQBPyPAGvk''@;'; put 'put ''WGPZs2tHSpZuD6qfZVVGyz6ZTjLd/zr3D3z3yxxkHDtelcMrvW+fM7rgtmsvA7sK+Jtc8r2QX7Ife/ENXZfHrDR4smOFCAjBrBCe0PoxNjoKo66/AoPPPlML/BHfGN/Knx8YnD9z/aZtmtl85bpNVB7O4duTSGuCgCCgIcABPJefPxhMoGKiow2Zlo01r2wy37V3P76dNguLVqz1mTYzsVacptEd''@;'; put 'put ''RlWKbHRvCoSrQGRkJH6cPgcfffWjBPeEwHUqBDMEhFyVIUaE23HzVRfjQsoF5yDyIySzKuhVbl8OBOK6wxu2bMMvcxZizcatPntoVK4HspcgoC4C7EvI+SwH9OlJRSVqa2ZYPQTw1ARxNpmzOZmDYmaQRnPV+s3VtoJwAvVzzjoDwwb0BZNwbjcQ93m24uQXFODJ/3sbu/enBuScNcFcjq05AkIw''@;'; put 'put ''a46hci3w2+wIKpF21UVDtchKo9+c9Sgg1kywRrOw0IF1m7dppvO1G7cJ0dSjsKRPhkCAfckHEakcROSSiSXftwKhlQsUOHzP8BLNfamHsHzNRo1o7j1wENkncivsRgxZp5pRZPgZXdqhV7dOSKZqbkwqA+kDydrLKTNYezlF7nMVSkudH4VgqiNLn46EfWXOH9QPI0dcojnEB/JG5NOB6LyxkkRz''@;'; put 'put ''/Zbt+HXeH1R6cquYznUuN+mefhDg0o79e3fXtHKskeNF9fsVW0H4Hl1YWIj0zGOaP+Pho+nIPJ5N7k2FGgZ2qkwUHxuDFMoUUp8wYj97NrczNoHGh/vKWTWefPltMDmWJTQQEIIZGnKu1igtZNLoRzfuO6lkWHRUpN8dwKvVSUUOYqJZbDp3YPO2XZj5+59YSWYwvZSNUwRmGYZCCDCZPOesHhqx''@;'; put 'put ''DIZGTg9Q8n3Dm63C+9lr7ubv/Jk1uUwog6nN5cjxT7+dim+mzaS+SN1xPcydQPRBCGYgUDbwOfjm1ZHSejww6gbUrZ1oSEd5I8HPDwU2nbtcbkq0vAe/LVyCxZS0nSt8yCIICAJAEyp1O6hvL3A5Q458DrSpV2RQNQTYrM9BSs/+bzyOUeolWUIHASGYoSPrao+USQ+XD7v/tuvRslljyZVZbST/''@;'; put 'put ''v73zfI7qStP4u2NQzhEhDBJCEogcTDAGG9tg43EoxxnP7Hpqy7sftnb/jN2q/bjhw1ZN7Uxt7YTd8YzHM2MccMAYE2whkEgiCOWcc8Sw+z6HObjBwghJ3X3vPc+tajrQ995zfu9t9dPvecPMd7RC84Z6IBqaWgW18L746pR0dPfO/CB8JwkEhABWU0qKlpnkna0b1kqGZkDDIxdNr1xA0IZ1GsaL''@;'; put 'put ''qmf453//mcaMnhf8PePmDgEKTHdsPeeZ5moQ/d//9eumntyEZgPapZg5H5gH+E4CWDrHhoLtKFNy+ESFegRaPNHa7jsHzv8kgTkSQFWLdatKNHFnm7lHi0fUamTi4RzBRmh3LI2jLNHP//cPLEsUIeZeOg0Fppes4YOxJCclyJs/fFH2PbaTf+gjbC8EyuM2qIWKkXn+2bGT2kquZtblSiI8fJ6O''@;'; put 'put ''BGZMICMtVbZvXmeSd0qKCiRGf2RBWPJH7YwRRv2NSCiq1rJK//Rv/8ml8ahbIzoDoMCMDndfn3WBipwfaAmjV5/bxwzzKFgScbEmIUhLHNVqbBOWz788fVY6uXweBWvwlPNFANf1siV5snvbJtNRDJnPWGJFggqF5XxRjsxxEEeOH8L/+K8/lcu1jbRfZLB77iwUmJ4ziT8GhJioPTsf0hZjL2uX''@;'; put 'put ''jETftF/zB92ZjzJ0+RzFl7/4qlIuXq1Te1yb+UH4ThKIIoHEhHiz/L17+yZzn67eS8RWRrqUThQRBOrU+KGASMt/+ekvzI/f65rFzs1NAhSYbtp9XmaNPyRlxcvlH7SH+bIli017yXk5MA9y3wSsVxOdMmrqGk2sZnnlOSYF3TdJ7hAJArhel2h9xh2b18vDWzYYzyWyjRlfGQn64TsHPM740ftf''@;'; put 'put ''v/mDvPPhIZYkCh9qXxyZAtMXZvL2IFGP7u/eeE22bFjDHuZRNpXNPscwenr75Iz2PT92ssp4NYdHxqI8Op7edQKpmqSzrqxEdm3dJKtLiwTeSiTsQFhy8zcB/O3Bj4Tfaq3LX779HpN6/G3OeRk9Bea8YORBUIj9J68+L89o9x+WD/HG9QAvEf7gT2pP+aaWdm0rV21iNeubWk0vdG+MkqMIOoFY''@;'; put 'put ''vQaLly+V7dqicMv61bJYf5AijpveyuBYHuISST1/PHhIfs5WkMEx7BxnQoE5R4Dc/RsCyHB+af/j2sP8aUF5EXolvmET7UdYtoJ9RkZHTYmjijMXpOJstbZt62AtwWgbJ4Dnx7W2dPEi7X29Wm9rTB3d+Lg4xlYG0NY2POft9z5Wz+UB/ngNoI1nOyUKzNmS437TElio2YPwUrz5oxclf1Eu4zKn''@;'; put 'put ''pRS9F+0SOr4UhjTLs1braZZrAeTK85ektaOLYjN6pvH9mSEqES6zcc1K2bZxrRRpc4ZkXRK3rQqZCe57E39rAsgWh31//c778rbWu2QbyG8hcvoFCkynzR+eyUO8oNzI32qG+ca1q0x7SX65hIf1XI4KO+ELAqJzcGhI6nTpHJnolXprae+SKcbFzQWvE/suWABRmWtE5ZZ1ZVJUsERSU1JMWRpk''@;'; put 'put ''gbMgenAvAyyJoxTRz/7nHa3JWy7MFg+urWc7MwrM2ZLjfvckkJaSLD984WnZ//gjAjHDsiP3RBa1N4SKTSyjN2rM5pnqy3K2ukaFZ4surTNBKGrG8diJEf6CqhEbVpeaskLLl+ZLin7W8SOSotJjxgrDcPCDFB16rtQ2yH/892/kYk0961yGgXMQDkmBGQQrengOsTELtV7mVvmrV56T9NQU4830''@;'; put 'put ''8HA5NCVgl9Gx5DkxOSntunR+8Wq9VOkyek19k3T39tNb4diVgs46JZqos76s1GR/L87NkURN7LMJffRUunFBIJYbtv74yAn51e/fk76BITcmzlnOigAF5qywcaf7IYCi7KXa7u1vfvyyrNK6mZMqWrhkfj8Eo/temyAEMdE/MGgSg85pq8pqFZ0NzW0yNDwS3QHy7PNOICE+TutU5srKFYXqpSw2''@;'; put 'put ''STpZGemmxiGuAybwzTtyTx8QPzZRkaJOO4f9SksQoXMYl8Q9bTJPDI4C0xNmcGMQGWkp8uOXvi97d++41QLOjZkHZ5Z2KR33KH/Uo97MOk0UunClVi6p4Gxp75TRsfHgTNiRmcTGxkhuVoZ6KZfJ6pIiLSu0TPJyssxSKBBg6RvCkptbBPA5R6xlX/+AfHj4mLz70efqtRw0f7/dIsHZzoYABeZs''@;'; put 'put ''qHGfWROI0SXzx3XJ/A1dMk/jkvmsOXplR3g2kCiEDV2E+voHpb65VfsPN5iOQk2t7TI4PEqPtVcM9udxwEOZl5NtknJWFhWqhzJf8rT3d3JSkhEP9FJ6zGARHo71WGLF4mj5aTnw8RFpauvg5zjCdvD76Sgw/W5BH44fS+YrCpfKm6+/KGtXlZg+5ozh8qEhpxmyFZyI40QoBL6g2rp65KrGbiJL''@;'; put 'put ''vUFv3X39MjY+Mc3efCkcBFA6LC012Sx5o3QQPntL8/MkOyNN4ygTbwlKeCkZuhIOC/jjmPBWIhwGn93O7h45Vl6psZZfSqP+SOR14Q8bem2UFJhes4hD40HbuFef2yfPPrnb/GGb0iVXbsEiAMFpb/CKjY6NSa96OVvUG4JMdXg72zp7pKun14hOfpHNzf5IqkvRz9Vi9UYi03u5CkoUPM9SMYkV''@;'; put 'put ''AwgIbHbJm7znxtvPe0NIhopK1MW9VFsvxyvOyFenz0n/IBN4/GxfL4ydAtMLVnB4DPCubN+8Tt7QNpMP6hfhhC6z8ksvuBcEvtSs4MSXG0TnmIrOAf1y69J4zpa2TmlW8Qnh2dM3IAODwybWM7hEZjczMExNTpTM9DRT3BwFzvH5yc/LEZQHS9UbkjLwWQJj3LhKMDvWft4LnzdsVkziusFj3PC3''@;'; put 'put ''Fj/2EENddeGS3i7rj71u/v31s8E9NnYKTI8ZxMXh4I/d4twsLWX0vDyydaP5AwcPCzc3CIR++UF0YsPyOmpvDmqGeo8uqXd290q7LrV39fSZ5/0qPPH/ExOTckNFVBA3FDFP0HqDKUk3hWROVros0sSb3KxMyc3OlJzMdI2ZTDRJGBAOEJP43EBIUkwG8YqYfk74/MAzjR8ReGw3++Niauqaad84''@;'; put 'put ''rPVtkaCDzxKqP9Q2NEurCkoUSw/dz+7PexKYKwEKzLkS5P7zRgCZrHt3bTfF2TPUMwORwc1dAhCbuEE8WeGJL1FcF4jhHFHP59DQiC7lDZsvzl7NdMVjLO2hdBIE6PjklHk/vmS9IkQhHGNUEMSqhzEx4aaATE1JUs9jinokU029WNwjbhLL3YkqMuM1KcfGx1nhYIUknnNzkwCuCfyo+Ojz43Li''@;'; put 'put ''lJYOun7jz2IRnusbxvs/rj/CEJoyqp8ZfA64kUCkCFBgRoo0zzMjAkgAQtzYT157QTZpm0kbKzajnfkmZwhAcMLrYsUnnkNoWfEFETqpX6ao14iySRMqNEfHx81jPMeXLrLecQ8vKEouTU5eM+0xv1YRaz2B+JK+doc3HefAeRcuXCDf+4ub48DjGL3hCx/38XFxEqcdb+JURCYkxBmRiMxteCQT''@;'; put 'put ''9Tn+Hx1xIDLNvnqPY2Kz8wgVkPRIOnNpz2iiuPZRPqi1o9MUPD9WXsXWrjMixzdFkgAFZiRp81wzJgDPzvef2CUv7n/CxJPRmzljdHyjEsAXsF32s2IUz60n1ApSC8uKOjy3wi70Mf4/dMOxIAjtOUIf4zX7OvbBYysQ7zx26HlDj8/HJHA3AigLhmvq2MlKFZfvm5jlO6/Pu+3L10kgkgQoMCNJ''@;'; put 'put ''m+e6LwK2A9BfvvKs9j1eSW/mfdHjm+eLQKhYDD0mv9RDafBxJAjEqee7V2OS33r3Izl4+LjxvEfivDwHCcyGAAXmbKhxn4gSSNKex888/oi89MyTJiaN3syI4ufJSIAEokwAHnJ4Lk9WnZNf/O6A1De1slVjlG3C09+bAAXmvRnxHR4gcMub+bJ6M9esNBmTiJPjRgIkQAJBJoBYSzQseOeDQ/Le''@;'; put 'put ''p0dM3HCQ58u5BYcABWZwbOnETJAosV+9mS+rNzM9LdVkCHOp0gnTc5Ik4BQBeCzhuTx19oL88u0D2g2rmV5Lp64A/0+WAtP/NnRuBt/TAPdCzTR//YX9pkg7ACBbmBsJkAAJ+J0AYn7htUSs5e8/+FQ+OHSUXku/G9XR8VNgOmr4IEwbbfEe2/GQaTe5RLuYIDbTZusGYX6cAwmQgFsEUOYKW3nl''@;'; put 'put ''OVN+CAXRr2vhfG4k4EcCFJh+tBrHfIsAfu0v0q4mLz3zhOx5eKvWHIw3QvPWG/iABEiABDxOwHotO7Rb1VvvHpRPj37FougetxmHd28CFJj3ZsR3+IAAuqOsLyuRHzz/tKxZWcwkIB/YjEMkARIQ0zN+SkN8Dh8/KW+/94kWT+8yxfbJhgT8ToAC0+8W5PhvI4CSRvse3SEvPLVHcrRnM5bNmQR0''@;'; put 'put ''GyI+IQES8AABJPBgSbymrkF+/c4HmsxT/a2uUR4YJodAArMmQIE5a3Tc0asE0KUlf1GOvPLsXtm1daO27IvjsrlXjcVxkYBjBOxy+ODQsBz4+HN5V2+DwyOOUeB0XSBAgemClR2d481l81J57bl9Ztkcnkxmmzt6MXDaJOABAjHacx71e8urzstbfzoodY0tTOLxgF04hPAQoMAMD1ce1UME4uNi''@;'; put 'put ''Zc/OrfLi048Lss0hMq9fv+6hEXIoJEACQSZgl8PrGpvlt9rm8XjFGUHcJTcSCDIBCswgW5dzu0UAy1JZGWny3N5HNUbzYUlNSWZ85i06fEACJBAOAnY5HJ14Dnzyuda0PCb9g0PhOBWPSQKeI0CB6TmTcEDhJICWkwVL8403c+dDG0xB46mpKSYChRM6j00CDhJAsXQkGR4trzQF0xu1puUNDdPh''@;'; put 'put ''RgKuEKDAdMXSnOdtBBCfuVbLGaF+5vqyUtOSDUKTGwmQAAnMhYAtln7uUo387sBHcqb6isZdMiRnLky5rz8JUGD6024c9TwRiNEyIfBkPv/UY1JaVGg6ATERaJ7g8jAk4BAB2zsc3Xf++OEh+fzLCpmY5I9Why4BTvUOAhSYdwDhUzcJoH7mozu2yLNP7pZlSxazULublwFnTQL3TcAm8KALz4ef''@;'; put 'put ''HZWDh4/LgJYg4kYCrhOgwHT9CuD8byOQnpoiTzyyTZ7es1Py83JNSRGUFeFGAiRAAqEEUG8XZYcGNGnnM+3CgySe9s4exnOHQuJjpwlQYDptfk5+OgI243yfdgTau3uH5GZnUWhOB4qvkYCDBGxm+MjomCbwnJZ3PzosjS3trGfp4LXAKX83AQrM7+bD/3WYAL5IcjLTZa8KTXg1F+VkU2g6fD1w''@;'; put 'put ''6m4TwN8DeCzHxyfkq8pzRljW1DfJ16yp6/aFwdnflQAF5l3R8D9I4CYBKzSf3L1dnty1nUKTFwYJOETACstJrTJx6swF+ZN6LC9cqWOzBoeuAU51dgQoMGfHjXs5SOAboQmP5lYjNNERiDGaDl4MnHLgCYQKy9NnqzXG8oig9BBLDgXe9JzgPBGgwJwnkDyMOwTwxZOVniZ7VGTCo7lEk4HQ55x1''@;'; put 'put ''NN25BjjT4BLA5xtF0ie0SDo8lhCW5y9fpbAMrsk5szARoMAME1ge1g0CyDrftW2jaT9Z8GC+ILOUnYHcsD1nGSwCNit8VJN3KtRj+f6nX0h1TS2FZbDMzNlEkAAFZgRh81TBJADvJepoPrxlvXo0d8jKFQWCbh4o2H7jxo1gTpqzIoGAELB1LIeGRzR556wc/Oy4XKptYIxlQOzLaUSPAAVm9Njz''@;'; put 'put ''zAEkgM5A68qKZf+eXeY+KTHRCE3EanIjARLwDgF03sGtp7dPjlWckU+OnJD6plaWG/KOiTgSnxOgwPS5ATl8bxJY8MADUlTwoInR3L5prWRlZhiPCNtQetNeHJUbBBBfidUF3Le0dcjhExV6OykdXb1cbXDjEuAsI0iAAjOCsHkq9wjgiyw3O1N2b98sj27fIgUPLjYQIDSxtM6NBEgg/AQQXwlh''@;'; put 'put ''iZWEK3UNcuhouRyvqJL+QbZ0DD99nsFVAhSYrlqe8444gcSEeNm8dpU8pW0oVxYVSEJCApfPI24FntAlAnYZfHhkVM5drJFPvvhSKs9fMhniLnHgXEkgGgQoMKNBned0mkBsbIwKzEL1am6SzevKJCcr03gz6dV0+rLg5OeJAFYNICzhtezo6jaeyiNfnpbahmbGV84TYx6GBGZCgAJzJpT4HhII''@;'; put 'put ''A4Hv6Rdhji6fb9u4VnY+tEGKC5dKXFwcvZphYM1DBp8AssEhLPFDrb6pRfuEV8mhY+W6DD7EcJTgm58z9CABCkwPGoVDco9AnBZ2XlVcaEodbVm/2ng1QQFdgljqyL3rgTOeGYHQpJ3+gSE5e/GyHD5+UjvuXJUx7RnOjQRIIHoEKDCjx55nJoFvEcCyXmZ6qmzSWM1Htm6UUo3VTE5KMskJEJtM''@;'; put 'put ''DPoWMr7gIAFbuxL9wesbW8wy+IlTZ6W9q4f1Kx28HjhlbxKgwPSmXTgqEpCFutyHrHMsoW9ZXybLtFMQPJ0QmsiGpdjkReISAfz4whI4tq6eXjl97qIcO1kl1VdqNWlnyiUUnCsJ+IIABaYvzMRBuk4gThODykqKZOvGNbJpzSrJy82+FW/GIu6uXx3Bnb8VlVgKHxwalktX61VUVkrV+cvSp7GV''@;'; put 'put ''DB8Jru05M/8ToMD0vw05A4cI4Is2JSnRiE0UcF+7qtjEa2LJEMkNFJsOXQwBnarNAsc1PTI6KnWNrVJedU4qqi5Ia2cXe4MH1O6cVvAIUGAGz6ackSME4N1JS0mSNSuLZeuGNbK6dIVkZ6aLFZvw7nAZ3ZGLwefTDBWV45qc09jSJhVnL0jFmQuaEd4mU/rjiRsJkIC/CFBg+steHC0JTEsAYjM9''@;'; put 'put ''NUU9m8tNbc3VupyODkIxMTEmZpMJQtNi44tRJGCXv3E/Nj4uTS3tJq7y1NlqqW1slskpisoomoenJoE5E6DAnDNCHoAEvEXALqOXriiQDWWluoxeIvmLsiU+Pt7ErLH0kbfs5dJo4F3HDaJyeGREvZOtGk95SSovXDa1KykqXboaONegE6DADLqFOT/nCSTEx0nh0nxZp0JzfVmJLM3PkzT1dkKI''@;'; put 'put ''MiPd+csjrABwjUFQIvsb8cEoen61vkmqLlySM9VXpLW9S65pVQRuJEACwSNAgRk8m3JGJHBXAviyz8vJMvU1N6wplZLCZZoklGG8mxAAuDF28674+B8zIGC9lLjH0nen1qa8VNtglr+v1DVKT28/WzbOgCPfQgJ+J0CB6XcLcvwkMAcCSYkJUrBksSYIFZlbgdbaRCwnPE4QmlZ0zuEU3DXgBEJj''@;'; put 'put ''KXG99PYPmCSdcxdrtEZlndQ3t7KrTsCvAU6PBKYjQIE5HRW+RgIOEnhA4+Iy0lJl+bIlJlmoWL2bDy7OlXR9Dd4oKzjp4XTw4giZMq4FKyohKFGfsqW9Uy6rlxJFz6/WN0vfwCC9lCHM+JAEXCRAgemi1TlnEpgBAQjOLC17VKjdhFYVL5cVBUuN4ExNSZZY7SgUKjjxmFvwCCCG0opJ3CNmF4Ky''@;'; put 'put ''raNLrmgsJQqfI+O7s7uPNViDZ37OiATmRIACc074uDMJuEMAghPicmn+IikuXGo8nVhSz8pIk8SEBJM0hLqbNkudNTj9dW1YMQkhCS8ltomJCeONhIfyakOz1NQ1mWzvnn71UKr3khsJkAAJ3I0ABebdyPB1EiCBexJAhnp2ZoYs1yx1LK0jnjMvN0sLwCdLgopOiBV4NyE6ITjp6bwn0oi84U4x''@;'; put 'put ''ieeTk5MyNDyifb77pKm1QwVlk/FOtnV0y8jYOG0XEcvwJCQQHAIUmMGxJWdCAlEnAKGSlBhv2lcuW5JnBCc8nrlZmaY0UrK2uUQCEcSm9XZSeIbPbLCHFZM2dhK8xzW7e3h0zIjJ5rYOaWhuM4k5EJMoJfQ1vZPhMwqPTAKOEKDAdMTQnCYJRJNAfFysZKanaomkbI3jXCRL8nLU05ltWlumJCdJ''@;'; put 'put ''ghaBh/DEFhrbCTGEzd6bJ/znNgJWROLeikg8BjN4JYdHRmVA4yY7u3tNMg4EZasKSTyHx/I642dv48knJEAC80OAAnN+OPIoJEAC90kAIigxId6URUJbS9wW6/I6vJ2LsrM03jNJ63PGSZwmFEE4WdEEAYobBJRdcg+qAMWc7YZwg9AbXrcicnxiUkbHxjRecsh4Jds6u6S9s0c6e3qlW+tODg6N''@;'; put 'put ''sJ+3Bcl7EiCBiBCgwIwIZp6EBEjgfgjEag/1m+IzWT2faZKtxeCzNZkIZZTS01KMKE1U8QkBivei5zrEV6ggs0IU57VC1N7bsURSmIaODefHeO09/g83+xpex9gQu3rt2jX1RE7JmIpItFccGBzWWpOD0t7VLT19A0ZEwkMJEQmhGck5mQnwHxIgARKYhgAF5jRQ+BIJkIC3CSzU5XQkGOGGzPZU''@;'; put 'put ''XWZPSU785rHGeiLeEyIV74EXFPvExcbIAwu0daF6RO1ysvUKWvEZej+dWMP/W0FoKVnxaAUi7u178H57g2DEkvS1qWvGo4je2xMqHkc1iQZdbxAXiWVrCEbcQzTi8Yi+Pqr/Pz4xZUSnPS/vSYAESMCrBCgwvWoZjosESGBeCCxcuMCIy9iYhcbTiXsIzjiNC41diNcW3hSqRqQmmQx4/D/EaXJS''@;'; put 'put ''wm1jwGspKlzhKYQAvKFeRgjJGzf+T8Xh6E2hqGJxSOMecYNAnND3jmu5nyn1REJM4jY5NSVTt0TmlJb8YR3R20DzCQmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQ''@;'; put 'put ''AAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfs''@;'; put 'put ''wdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4i+ZHtw4AAADdSURBVAAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAF''@;'; put 'put ''prfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8J/D97oVzdCcK8fgAAAABJRU5ErkJggg=='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=select-library-png; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''iVBORw0KGgoAAAANSUhEUgAAAdsAAAG7CAYAAACLjj9uAAAAAXNSR0IArs4c6QAAIABJREFUeF7snQecVNW9x0+7907dQhNLYmLLS4wmStmOYIslGk0sicanRo0JILALqIltLXRYECtJjGkmKinGhiCwC1soorFEk5iosWEBtszutFvOee8uDM7OzrLT596Z/37ey8rOOf/y/Z+Z39x7T8EIfoAA''@;'; put 'put ''EAACQAAIAIGsEsBZtQ7GgQAQAAJAAAgAAQRiC4MACAABIAAEgECWCYDYZhkwmAcCQAAIAAEgAGILYwAIAAEgAASAQJYJpC229zVP9Zgxjo4JtMur82vH/yyQ5fjBfJ4IPL6v7rHuL5pyf1+eQgK3RUYg8tkzdfL9foyReKjtB96ran/ZW2QYIF2bEBggtg83X+EIGOIPCvZ8HSOKMSYYIRxp0/8b''@;'; put 'put ''7/u3+aL5GkYYMSq7zVf6Xx7+R+xtsu/X8O2HaiESNmEGmfbPABOp2MtU3ilkknBtIoUxO8QWyGY5p4CpoLqkPV5j3qRpv18Tpqsbql8gMcChEJF/7/2973XzlxBYGOb/EkxoiPted1J+/pVTfhVK2CE0BAI5IDDgHXl/6yXlSO79d8jwjcyBb3ABBIAAEMgoAZm4exzcfcTV1as7M2oYjAGBNAkM''@;'; put 'put ''ENtVO84ZJTj+d0DvKUvTLnQHAkAACOScgEScPRhrR06v2LAn587BIRA4AIEBYvtA+/ljkMTfDOrdpUANCAABIGA3AhJxdGscHdlQvRaubO1WvAKPd5DYYln8O6B1lRR43pAeEAACBUgAxLYAi1ogKQ0SWyKjt/xaZ/8MY/gBAkAACNiJAIitnapVXLHGEVv8tl/b4y4uDHuz5ULXCGZSsrmbEyIN''@;'; put 'put ''oYXMmdoCcZ5sf2h/YAKMKC6zhcG1MCWSMhyvvfVQg8O1K4bXI+ySyVXn4f4le2bfyH8n2v+zWcOJ9tjfLt505/2fT+bqB0YU53BWTbGlGjtiat0zXcO1hdeBQC4JDBTbV84fI+nSB77wJ3EFRwjBBSIXC52/SBDSdSUsJE6Exknu1gXE0JGT8K0ZoQPGqTn35pHsNw1/dEw2WWUqO4M5rZkadKay''@;'; put 'put ''dAihIe6xDFWjRGqR69zTeUOnzM10uo+dFOSpsU8n8H19NWPoz4Z4ddAMOuS4FIgwGUvHIkyfoYTJ8cIDsc1A0cBEVggMElvFcH7SHfowrjMhOHeotHTalBabSEpWmIFRIAAE8kRgUVuNVwj1A5m64s4rAbHNU2HA7bAEkhZb3ucsmfuNdQMuIIb1Ag2AABAAAhkgsHJrRYlfNd5TmDvuigkQ2wxA''@;'; put 'put ''BhNZIQBimxWsYBQIAIFsENh7ZRv+QKbuoa5se6jGvgjPbLNBH2ymQwDENh160BcIAIGcEth3G/lDmbq88RxLxNGjK+Ev1J/Q0p3TwMAZEBiGAIgtDBEgAARsQwDE1jalgkBjCIDYwpAAAkDANgRAbG1TKggUxBbGABAAAnYlcF/zZE8v8++E28h2rWDxxp3sla3B+5ylMBu5eAcMZA4E8kkgEbGV''@;'; put 'put ''mXH4tePX9+QzTvANBGIJgNjCmAACQMA2BPaKbWCnTJ1DTpACsbVNOYsqUBDboio3JAsE7E1g7zNbzRTbuHuLmbORQWztXeNCjR7EtlArC3kBgQIkAGJbgEUtkpRAbIuk0JAmECgEAuYOUgFNfHiAK9tumRlfgGe2hVDtwsoBxLaw6gnZAIGCJrBwx7hSFKQfgNgWdJkLMjkQ24IsKyQFBAqTwMId''@;'; put 'put ''p5aioO+AYqsr4S/CDlKFWX87ZzVIbIk69Hm2QnBY+mPnakPsQMDmBEyxxUHfB9LQE6S6QWxtXuQCDT+pw+NBbAt0FEBaQMAmBEBsbVIoCHMQgQFiu/KlM0crhvMdv7Yn7tncILYwgoAAEMgngeXNk8tUFngfrmzzWQXwnQoBENtUqEEfIAAE8kIAxDYv2MFpBgiA2GYAIpgAAkAgNwQWtNaWE6S+''@;'; put 'put ''B1e2ueENXjJHII7YOt72a51xd2eB28iZAw+WgAAQSJ4AiG3yzKCHNQiA2FqjDhAFEAACCRBIRGypxo6YWvdMVwLmoAkQyBkBENucoQZHQAAIpEugqaNqhGYY7x7oNjKIbbqUoX82CIDYZoMq2AQCQCArBEBss4IVjOaAAIhtDiCDCyAABDJDAMQ2MxzBSu4JgNjmnjl4BAJAIEUCw4ktI0o30yR4''@;'; put 'put ''ZpsiX+iWPQKw9Cd7bMEyEAACGSYAYpthoGAuZwRAbHOGGhwBASCQLgEQ23QJQv98EQCxzRd58AsEgEDSBIZb+gO3kZNGCh1yRADENkegwQ0QAALpEwCxTZ8hWMgPARDb/HAHr0AACKRAYLi9keHKNgWo0CUnBEBsc4IZnAABIJAJAiC2maAINvJBAMQ2H9TBJxAAAikRGO48W7iyTQkrdMoBARDb''@;'; put 'put ''HEAGF0AACGSGAIhtZjiCldwTALHNPXPwCASAQIoE4DZyiuCgW94JgNjmvQQQABAAAokSALFNlBS0sxqBeGL7X7+2xxUvUCE4533OkrnfWOe3WiIQDxAAAoVPAJb+FH6NCzVDENtCrSzkBQQKkEACO0h1MU06Es6zLcDi2zwlEFubFxDCBwLFRMAUW9Uw3pWp0xMvb0YUENtiGhA2yhWe2dqoWBAq''@;'; put 'put ''ECh2AkubJ4/SWeCdA4mtoahH1J/Q0l3srCB/axEYILardpwzCgnJfGbrhme21ioURAMEgABCKzfXjQ7g8NsgtjAa7EYgabE1JHro9RNbPrZbohAvEAAC9iewYuspB4W13v9IQ95GljsNRTsSrmztX+tCyyCO2LJ3/Fpn3OchQgguU8/Vugg0myCECDPzt65JmBKOdSwG2IuGZb4eD57BiYj+OxN4''@;'; put 'put ''wL8TAR7tdyg/FEv9/g3tsxjJUDHta3sg3xRzbIi9sUf/94Cchdb/Oo/JMZGcYttEx2ocIL5ILNG/k/UXySvSj+7LI9pOdE5UGrpmRpy+w8UTqVVsvcx/J8phf+w4/rgbLoZEXo/lFMsr0bpH84sen0ONgdj6m7WObWvoQ78XE8ktmTaUDa7//vdGVP0jPA40Xky/aoxzrCKdMF01BNYkIh2v8/Bf''@;'; put 'put ''GJEd8WJkRO5UmDji2vHre5LJAdoCgWwTGPAmvXfb+SMZQe8EtE7vUI650DUuuGG+jhGO9B9SZLOdQPbs788twy5E1JeJaGzmn9PwaZqK/poSMR35W/Trsa+llWF0PmkZSrGzFYde0t8XU8g9l3mnnE9KHcWAgRz5h+j/MUFJ1BF3aaL5mim2cGWbwnCCLlknEEdsxdsBrask657BARAAAkAgwwRA''@;'; put 'put ''bDMMFMxljACIbcZQgiEgAATyTcAUW6bJR8E623xXAvzHEhi09Ec2lLcCWteQt5EBIRAAAkDAqgQYUToJNo6ZXrFhj1VjhLiKk8AAsb1v+1ljKVbePNAz2+LEBFkDASBgBwLmphYKU465dvxTu+0QL8RYPAQGiO09L517iFO43vOFP6LFgwAyBQJAoFAImGJLsHE0XNkWSkULJ48BYnt/6yXlsuTa''@;'; put 'put ''iAzjYC6M/hnH5gxZbE483v8TmdaKzcnIOMw+HqMagSGJOIwxHxGkGHivmajpttF2Y2dWpjSJMeWqiIHzeFO2k0zHgUyH7jl8bEPPBk6UYprzWhNNJRk8SbYdyCCBvIfHmmQEiTVPY7Z5lIPk6pW6z/iFHfq9OhDqvqnD/XHvrc/e2cTmMiHe/2+MCRVIZwGy86Ch+DHiQJI28j2EEUci+nNoYI/I''@;'; put 'put ''yoiA3vOqgpzfmzZldV9iNYFWQCA3BAa9b3/zymXu3s4Q9o5wCPO3GYZXdfS/OYIjnf2//WqXKA+7he4Mlwpm/KtP/aR0qHCduPyLP6564r+ZTEcIhO9Zc6Y8lM2xh3vEx+/27c9txllrwpn0D7aAQKERWPnsmUpiOR0V0+w//f8233MXHbs6donssCZXbf72wV34g3/J1Bl3nohC3bsJL5kQFMYn''@;'; put 'put ''pjHzc8e9y69ddNFqI/I54HUehLsUf//73RfepTVOadGHdQwNgECOCST3JTkmOFOYQ1r4gz71k7Kh4lZlqexGWGCe47KCOyBgDwKL2mq8nIffV5g77hd2B/N2hiV2ZP0JT8Bex/YoKUQ5BIE0xfZ0d0grfb9P/bR8KMI4jMvrp8Cm4DACgQAQGExg4fPjSoWC31OYO+7afhcr6eZhfgQs5YHRY3cC''@;'; put 'put ''aYntkldOd5fqZR/2hYe+jQxia/chAvEDgewRMMUWOfB7Mo0vtk5W2mMIeuT0ir/AUp7slQEs54BAWmL7m1dOd4dAbHNQJnABBAqTwHBXtk5W6jMEPQLEtjDrX0xZZUBsy3f2hT8ecntHuLItpuEEuQKB5AgkILY9hIijYN1sclyhtfUIgNharyYQERAoGgIgtkVT6qJPFMS26IcAAAAC+SOwvHly''@;'; put 'put ''WZj1vXugZ7ZwZZu/+oDnzBEAsc0cS7AEBIBAkgRAbJMEBs1tSwDE1ralg8CBgP0J7BVb/3sydcXd1MKcjQxXtvavM2QwYBvG5HGYs5HD+siPesM7hzwlCCZIJc8VegCBYiEAYlsslYY8076yBbGFQQQEgECqBBa01pZjFH4XrmxTJQj97EIAxNYulYI4gUABEgCxLcCiQkpxCYDYwsAAAkAgbwSa''@;'; put 'put ''OqpGqIb+X7iyzVsJwHGOCIDY5gg0uAECQGAwARBbGBXFQgDEtlgqDXkCAQsSGF5svT2EYNhByoK1g5CSIwBimxwvaA0EgEAGCczfNnEkUcU7Q99GBrHNIG4wlUcCaYntfa9f6JFDbCcs/cljBcE1ELAxgUTE1hASnPpj4xpD6HsJpC22Uoh8CAcRwHACAkAgFQKJiC3cRk6FLPSxGgEQW6tVBOIB''@;'; put 'put ''AkVEYGnzuFE6I2/DbeQiKnqRpgpiW6SFh7SBgBUIJHJlC7eRrVApiCFdAiC26RKE/kAACKRMIJErWxDblPFCRwsRALG1UDEgFCBQbARAbIut4sWbL4ht8dYeMgcCeSewT2zfkqmrJF4wLlbSrQt21PSKv+zJe7AQABBIg0BaYmue+hPSy3fCbOQ0KgBdgUARE9j7zJa/PdTh8SC2RTw4Cix1ENsC''@;'; put 'put ''KyikAwTsRADE1k7VgljTIQBimw496AsEgEBaBEBs08IHnW1EAMTWRsWKF2pTR5VT455yig2JEnlQPSWuCm3f3xnhg17XVSOtMRAbU7wYBrXBg+PIVBkMQUSsLYOr/X9jMu3/rfO9bUw2kbaRv/W3IxwLxgjWGcdqYM+0KS19mYoP7AwkAGILI6JYCKT1QQvPbPM/TJZvOfm2oNYz08E85fmPprAi''@;'; put 'put ''0IyQ3+s4+JefuqQ5jceuVgsrO2tkA2JrjTpAFNknAGKbfcZZ9XDvtnNWqobvuqw6KWLjpY7DfutV1KsvArHNyigwxRaH+dsKc8Ns5KwQBqNWIQBia5VKpBjHA9u/dXdQ756RYnfoNgyBcvlzD6nI9eNrx/9MA1iZJwBim3mmYNGaBEBsrVmXhKMCsU0YVUoNS5SDf26IkmkgtinhG7YTiO2wiKBB''@;'; put 'put ''gRAAsbV5Ie9/4byVIa0LbiNnqY5eeewD14x/bGqWzBe9WRDboh8CRQMAxNbmpQaxzW4BPdLoe3444Y9wmz5LmEFsswQWzFqOAIit5UqSXEDDiS1BLIQx1QXi+5a5YGH+RHmJHQMxS2f6/zloOU1yUVquNUYIY4wRFoIzgQznUBG62Ii7fzTxL7Msl0GBBARiWyCFhDSGJQBiOywiazc40DNbc+kK''@;'; put 'put ''w55zZtduaLZ2FvmLblnb5EpMxJahxbZ8xY8mPlGfvwgL2zOIbWHXF7L7jACIrc1Hw4HEVgjOdcG/ckNt+79snmbWwl/RVvMlTtg/h3LgpGXLf1zx14asBVDkhhMR24CuHtlQvbazyFFB+jYnAGJr8wI+sP28FUG9a+ZQaXCdHztnUusbNk8za+Eva609BlM65JcRh1TaNHXCk7OzFkCRGx5ObB3M''@;'; put 'put ''2x3SNRDbIh8nhZA+iK3Nqzjc0h8d83HXV7W+ZPM0sxY+iG3W0CZkeFixlbxdIU07Cq5sE8IJjSxMAMTWwsVJJLThJkgZQjtubk3H3xOxVYxtFrXVfEk6wG1khZUumzbxyTnFyCYXOYPY5oIy+LACARBbK1QhjRhAbNOAhxBa2jH5fwgS/xjKCohtenyH6w1iOxwheL1QCIDY2rySILbpFXD5lklf''@;'; put 'put ''FgIP+UwbxDY9vsP1BrEdjhC8XigEQGxtXslV2867x290TR8qDbiNfOACL91c9xXCyOtDXtmS0mXTKuE2crbeJiC22SILdq1GAMTWahVJMp5V2759j9/YM6TYqlz/6o217UOKSZLuCq75kvbJX6VYvAa3kfNTWhDb/HAHr7knAGKbe+YZ9Qhimx7Opo5JxyGEXwWxTY9jqr1BbFMlB/3sRgDE1m4V''@;'; put 'put ''i4kXxDa9Ai7ZWnc85eQVENv0OKbau6mjakRY194Z6jxbByz9SRUt9LMYARBbixUk2XBAbJMlNrD9stbar2FKXx7KCmxqkR7f4XrDle1whOD1QiEAYmvzSoLYplfA4a5sYbvG9PgO1xvEdjhC8HqhEACxtXklQWzTKyCIbXr80u0Nt5HTJQj97UIAxNYulRoizuHW2cJs5AMXeLjZyC4Gp/5k8y0C''@;'; put 'put ''YptNumDbSgRAbK1UjRRiAbFNAVpUl6a2mmMRYUNuZwm3kdPjO1xvENvhCMHrhUIAxNbmlRxObGFTi/SubEFss/sGAbHNLl+wbh0CILbWqUVKkQx36g9C4viG6s1DbtqQktMC6jTcbWQQ2+wWG8Q2u3zBunUIgNhapxYpRXL/9nOXh/SeWUN1hvNsD4x1uO0aHVJ509QJT8B5timNzuE7gdgOzwha''@;'; put 'put ''FAYBEFub1/GBbec0BQ1ffbw0DK5rmJOvw+HxQxd5uCtbOIggu28QENvs8gXr1iEAYmudWqQUyX1bz1ka5r64V14G18Iy9f6vykWLadyzz0OYOuLWXSI61jgT8QKJvGb+jn59qPYpJRPTKdbXgWwyEj+n+H38/X/WeVhwrtRoPPTHoWwr1Lt4WsXTN2QiH7AxmACILYyKYiEAYmvzSt+37axFYcN/''@;'; put 'put ''/VBpECwhgpjNs8xe+BzpiAttSAcycS+YXvnsT7MXQXFb3ie2byvMXRqPBGzXWNzjo5CyB7G1eTVXbjtzoW4E4MorS3WUqGPedRVrb86S+aI3C2Jb9EOgaACA2Nq81CC22S0gJY47Z1auvTW7XorXOoht8da+2DIHsbV5xe/bevbSMO+D2bJZqiPFyu0zq9Y1Zsl80ZsFsS36IVA0AEBsbV7qVdu/''@;'; put 'put ''c79f3/1jm6dh2fAJke+YVfn8bZYN0OaBgdjavIAQfsIEQGwTRmXNhr986bJHukPvXWLN6OwflUy9S6ZXPD3kBDT7Z5jfDEBs88sfvOeOAIht7lhnxdN9289dGtQ6Z2bFeJEb1Yxgr0PyLquvaplX5Ciylj6IbdbQgmGLEQCxtVhBkg3n8ccvpG+M3iWVKOH+WvrCStx1ssnaLfb2Jk/WXcbH9nn0''@;'; put 'put ''iy5abRQ7j2zlD2KbLbJg12oEQGytVhGIBwgUEQEQ2yIqdpGnCmJb5AMA0gcC+SQAYptP+uA7lwRAbHNJG3wBASAwgACILQyIYiEAYlsslYY8gYAFCYDYWrAoEFJWCKQttmF95Ee94Z3eoaLDYVxeP6WlOyvRg1EgAARsTQDE1tblg+CTIABimwQsaAoEgEBmCYDYZpYnWLMuARBb69YGIgMCBU8A''@;'; put 'put ''xLbgSwwJ7iOQdbFVZansxvHre4A4EAACQCCWAIgtjIliIQBiWyyVhjyBgAUJgNhasCgQUlYIgNhmBSsYBQJAIBECILaJUII2hUAAxLYQqgg5AAGbEtgrturbCvOUxkvBIXm7Qpp2VEP12k6bpghhA4F+AiC2MBCAABDIGwEQ27yhB8c5JgBim2Pg4A4IAIHPCIDYwmgoFgIgtsVSacgTCFiQQCJi''@;'; put 'put ''i0LiyKl1z3RZMHwICQgkTADENmFU0BAIAIFMEwCxzTRRsGdVAiC2Vq0MxAUEioAAiG0RFBlS7CcAYgsDAQgAgbwRALHNG3pwnGMCILY5Bg7ugAAQ+IwAiC2MhmIhAGJbLJWGPIGABQmA2FqwKBBSVgiA2GYFKxgFAkAgEQIgtolQgjaFQADEthCqCDkAAZsSWNBaW45E8J0D7SAFS39sWlwIewAB''@;'; put 'put ''EFsYEEAACOSNAIht3tCD4xwTALHNMXBwBwSAwGcEQGxhNBQLARDbYqk05AkELEjAfGar6upbMvOUxQvPPIgAbiNbsHAQUtIEQGyTRgYdgAAQyBSBRMQWTv3JFG2wk08CILb5pA++gUCREwCxLfIBUETpg9gWUbEh1cEEVm49s4RpvZTLClENJhyGX/Riod9Q294LvLJPAMQ2+4zBgzUIgNhaow4Q''@;'; put 'put ''RY4IPNB++hjElK8KjC+gmNb4Qp8ezpHOorYuFQghPsL5hY+ccsm/e4IfvEwRXa0K450ZlWt8OQqzaNyA2BZNqYs+0ayLLQ7j8vopLd1FTxoA5I1AY/NkNkJhxxGqzPaFPj5DorKbEtmRaEA6V4MOWrITY/J7QvD90yY++3GifaHdgQmA2MIIKRYCILbFUukizNMU2TKZnhAwfHdSTGol6nCni0Ei''@;'; put 'put ''zg8RMn6DdHTvdbXP70zXXrH3B7Et9hFQPPmD2BZPrYsq06U7Jo+iKp2ncf9ljCjOeMlzYWgG1zSBuIEQEv3/hzAmmFKCmUwwNW8vx/3Rufa2g7l/rLDO5mvHv6gVFdwMJgtim0GYYMrSBEBsLV0eCC4VAstbTzmCE+0xjPH42P5CCNGn7Xnfzcr+GtT61hHD8cJNp277JLrd0uZxo8JYP06RPZOJ''@;'; put 'put ''YBcLJI7BGMd9r0jE/Qw39Btn1qz7eyqxFnsfENtiHwHFkz+IbfHUuigyXdo6uRYT47cYky9EJ8yFoUvE2RxSux8Mcve6xiktfYkAWbVjnBTQvIeGdf+tAolvK9RdGttPM0J+Fy19REP6HQ3VGz9MxC602UsAxBZGQrEQALEtlkoXQZ53d0w5RQjyMMf656LTDWm+lwlVfurylW+ccdaacKoozK0F''@;'; put 'put ''GeFXqnrgJ06pdFSsHdXw90jY9XNFkhZOr9iwJ1U/xdQPxLaYql3cuYLYFnf9Cyb7pe2TJgW1zt+75ZGHRpIyuKZS6rgHh/hdmZwRv3j75LFM53cZXP8+JZISCzGk9b7mlcfM2FPi7Wg8drVaMJCzkAiIbRaggklLEgCxtWRZIKhkCCzfMvkLYS3wnMycX4r004xwgAvjbnffqNvTuZo9UBxL2iee''@;'; put 'put ''rBt8oUQdJ8ROpjK4FlZoyTpMjDv2BLSXG6e06MnkVCxtQWyLpdKQJ4gtjAFbEzB3gBJC/7Mh1FOirmjDlEjfa6je9JdcJLe4teqbjCrLEeJHmrOZo30KwTlC9A+c8VvmVmx+Jxfx2MkHiK2dqgWxpkMAxDYdetA3rwSEQLipfVITwmhmZLYwF7pGBLmpobZ1SS6DW/nsmYrfs/smgfRpDlYyItY3''@;'; put 'put ''RnQXIWRxSA+ugq0gP6OTiNhyLh09veIv8Aw8lwMafGWcQNpiq+ojPvaFP/IMFRnsIJXxmoHBfQTuaTvtEA1rbyAs9s8QFgI90Vu26+LGY9/Iy7PSxc0TxiJKZguMpkrU4YotFuf6fzGhd3K347G5X1vnL/ZigtgW+wgonvxBbIun1gWX6d1bTr1N5+ptkavakO7rZNR5yvU1HS/nO9llrbXH+I3u''@;'; put 'put ''+zzyyFNjYxGCG4bgWyXsmHvohyO2X3TRanNTjaL8AbEtyrIXZdIgtkVZdvsn3dTxjREyZVtUo++YSDaaoTXdUNcx2yrZPf74hfSdQ94/m2JpMcFk/+StSHw6Dwcl4nqaCH7HzJqWotwUY/62iSNJ2PjPgQ6Ph9vIVhnREEc6BEBs06EHffNGYPmWyVcIIR7+TGjD78tCqqif1PpR3oIawvHy5sll''@;'; put 'put ''OlNvF5hfE2/rSCzIJ5hIi0pD6gNXTmkJWS3+bMZjB7E1vzT5R++SAmNGM9ITLCUyoiaTsC5zt673EM2nvYuQDjPOszlS7G8bxNb+NSy6DMxdnQQ6/OGAuufSSPIC4ftmV7dMtzKMee3jv+okJTcIrl8ab/tHr3zwS0Gts2ns+6WPFsutZSuLbf9Zx5LzK5KQr/Yqoyo6g+8frBp9I7m5lTYWiGIF''@;'; put 'put ''OZjX71XGfCiE+lpfuGsdIupz145/+j0rj0OILT8EQGzzwx28pkHAPGSAhMULCKP+LRnN7RIxIt+9vm7L02mYzUnXRoGIs73mJCx4E6Py12OdmttKKrRkrUaCNzRMbH49J0Hl0YkVxfbe7eccSxGZRbF8mk/debB5KEUiiMx9t7nQwxJ17qBIukUTPdsaqrcEE+kLbQqfAIht4de44DK8u+O0UzQR''@;'; put 'put ''WEMwk8zkJOJ4WSBykp0Od29snuxwSoGLQ1rf7V5l9OGxRVKNgE+h7l/qQl4wt2bdpwVXxH0JWUVsV+04xxXS1QqJOqf7QjtPlamzJB3m5hK0gNbziVcZvVx3Satg5nk6NAujL4htYdSxqLJYseXUei60pqikf3vYB2OutOOtV1NsREi9DmMyw8G85YOudDl/n1HncoLpQ3b6MpHogLSC2C7fcvKJ''@;'; put 'put ''BEkLQ3p39VBnHhtC1wyuBnQeDplHMyKECMVMokR2mM/hhzqO0dzUhGBpi8Ska6dPXFvwdyoSrXsxtgOxLcaq2zzne7Z+49caD/1vJA0h0NTZNZsesHNai9urjwypvgedUukkSgbftlT1wBtO5r3GIfe8UEjn5+ZTbBtfv1Au83WfgYRYypF2dOz4Mbfc1Hn4n5jQjbqubuE88CZj7p2qEQ66VSY0''@;'; put 'put ''6nAgWTvIMPRjFNk7zjDUixiRv0CJNOi2c0jv63TS0lk91ZMeacSN3M5jFWJPjQCIbWrcoFeeCJi3+whyPtGrfnLafrFFxjmzq9ss/7x2OGTm81xl87hTKVWWUcyOjTeJihHpCYTETddVbPgHxv2n3dv6J19ia7L2ttfcbSDjqtgZ4poR6iOYNYeMvntvOemVdYkCNm06Wk88TWalDVyoUyI7m1UV''@;'; put 'put ''AAAgAElEQVSPOaL7O5n3J9zfd++0BI94TNQ3tLM+ARBb69cIIowi8FDbuV5VxpuCevcJ+8WW46rZtS1bCwVUY/NkprDg/wqhLY13a1k1Ar0Sdq5yCj5/al1bl53zzpfY3rP1zDmq0bcIY0Ki+WlG8In//wbTGKrd/lojRildgZqi6+o4+YsOwpbrInxOtP3+OVRIPC8bnstmTFqzy861g9iTIwBi''@;'; put 'put ''mxwvaJ1nAqbY6or0vF/bXREJhRN0+pzKTc/nObSMu5+/uW40Fv6ZCJPpCht8aD0S+CNMyJ0UK4/Y9XluPsR2efvJjboI3Rh9PGJQ9+2WsGNqqVN9IlO36c0vTW7ZuLJEPqjRr+06JHqAOGhpW5j3zayv2vhSxgcOGLQkARBbS5YFghqKgHkbmWL3477wR2dH2hhCmzm3pmNloVJb2l59eEDtfNAt''@;'; put 'put ''jz4NY9K/oUL0T0jzvexio2d2q2qH3TZWyLXYLu845Tydh39DCfVGGPapu9+nhF1z06RX1mZjDK1om/IlHRuPEowHLPXCiP4LCfrd+prn8769aDbyBpsDCYDYwoiwFYGHmyc7VM+In/m1PZdFAidIvm1W9fN32CqRFIJd0Fo5WQh9kUwdJ8bOftWMUEAizieRwHc11NpnfW4uxfbebacc0xvuXacw''@;'; put 'put ''5/6lVn3q7vfccsl5s6u3/C2FkiTcpamj6lCK3Q8aQvtmdCcnK31D4331nRWT1sPEqYRx2rIhiK0ty1bcQd+99bRbDK7uF1cH8z76qdt5eeOxq/Ny0k8uq2Ee5Rf0dl6iGoF5bnnEwbG+da4GJaSswowunFW54ZNcxpaKr1yJrbmu2S1pj1PC9j9DVY1ApyDkez+p2ZbwJKhUcoz0WbL2dLfh7n5E''@;'; put 'put ''Js5vRdtR9cBup1x6dVfF+qdSfU6cTlzQNzcEQGxzwxm8ZJDAPS+cW6NpPW0Rk2Gt70M3HnNCMU04adwxzuX0k1sZc14fb9ayEOJDIUij7HP+dsZZa8IZxJ9RU7kSW3MtbUjzNSvMvX+zCpWH5t5Yu21pRhMaxtjCHeNKcUh+RCLy/scgZhenVN4Z0rtvqK9q+UUu4wFfuSMAYps71uApQwTu237W''@;'; put 'put ''WH+46wVG5cNMk+bGAUiwc2bXNj+bIRe2MbO8tfYIv+h9yMXKJscGbR7lF9b9bzho+bSG2g2tVkwqF2Lb1FHlNDhdTQndL3CcG+sNJL59Q217b665LGqr8eqG/16nVLp/rbgZQ1jv6ypxHHz5tIlPP5XrmMBf9gmA2GafMXjIMAHzVqpWGnwUY3FexDRG9A/11RsvybArW5gzD2boCbHTCGKLCWHH''@;'; put 'put ''xga97yi/ZwzEb5lT3fJPKyWVC7FdufXMSiH0pwyhjjJz14xgH8POc2fXbmrOFwvzJKF3D9l5Bcbogej1uOY+3xJx3H3Yh2NuteOOaPniaQe/ILZ2qBLEOIjA0vbJFxAsVkdecEnl7wlNr/5x9dMfFiuuBa215YgHZgssfuRgJSNjOZhH+SFMFypG6NdWWZ+bbbE1l994JON3hJCLIzy4MDb0qeyb''@;'; put 'put ''jRY4zvCOluOnUkxud0ql/V8EzB/zQAOFuhtxMNgEm18Uzrs5LbG97/ULPUqIfuQLf+QZCgkO4/L6KS3dhYMMMrECAfNWnEyU1wQy9s8slYiy4LrKdT+1Qnz5jGFRW80hEqa3GUK7nBJZiY3F4Oo7FEm3M5/70Xw/z8222N7TdtohksPbElD39G/HaAqZYQR/cP2kF36VzxpF+17WVlMZ0H1/jp3w''@;'; put 'put ''hgV5UmD5yobqtZ1WiRXiSJ1AWmL7m1dOd6v6iI9BbFMvAPRMnUBT++SlCPMGhHD/OCaIfcyRGN9QvbFor26jaZpLhQgSyxmRj4/dKclsJxHns9wI3TCjuuX1fG39mG2xXd5+8skq9/9Voo7+CwLOjY8IMY602tF3d246/mQhxG898ogBm1+4pPLHdN47bXrFhj2pv1OgpxUIgNhaoQoQQ0oEFm+f''@;'; put 'put ''PFaEgy9K1BH1AYU3MeI81647KqUE4gCd+p8NHvrhN83nuRjjY2Kb9i8Vwo4nOSO3zq7Y8Gam/Q9nL+tiu2XyFZzzX0ZmbBPMtjql7kmZ2iVquPySeX3e5nEH6zzY4pVHD6hTWO/7m8JKz4EvkcnQtF5bEFvr1QQiSoLA4s2V1xHKmiKbPJh7zzLCVh38/sjrYILJZyAX7ji1lISC1ziZd7bGg2Nj''@;'; put 'put ''ETPs8AnEHyQGuvu62ud3JlGCtJpmW2zv3XrG3SoPzjCDNGdnU8QWdVefdItVN5CYt7XiIAd3PI4RmjQArMCvCY4vm13X/EpawKFz3giA2OYNPTjOBAFzZnK4xPdnSthZEXvmczmK6Z3dYXGn3bYvzASTA9lYumPyKKLyOw2uXxm9N3Ckj/k8l2B5gUcpeeTa8U8Fsh1PU0fVCFVX35KZpyyeL4fk''@;'; put 'put ''7eJcOnp6xV9Suo26tK1mEyGsX7h0roawoGfOrWtryXZe6dhfubWipC+s/tkhlZwSbSegdX3slkedDfspp0M3f31BbPPHHjxniMDSzRVfMbB4UqLOI6NNKswzhxHyQC5EI0Op5MzMoraKKRJx3s6FVhnvKDgHK2kJ6b2LfKWjN2ZzZ65siq05E3mky7FdM4L9J0RpPBwQyJh4Y+0Llj/E3ZwAKLj2''@;'; put 'put ''S5k5L4geFJoe2ClL7svrq1rW52ywgKOMEMi62KqyVHbj+PU9GYkWjACBIQgs6qiaKHT9TzJz9W90EfXzHJbYtPoJG94GeIMJLGmv/hbD8jKO+BF430SzSCvzljzF8p8QN26ZWdP8ZjYmUWVTbJc3Ty7zoV2veZVR/WNCNYJ9MqWHN1RvscXsXnOXMNkvHlaY+4LoCW4hvbdLwq6r5tS2PZGNmsD7''@;'; put 'put ''JDsEQGyzwxWs5oHAkvbqKg8b85ug0XVUtHsnK/MFjb5FmhG6Jx87BuUBRVIuTVEK08BcQuhsFmepEMVSJ0XSYr/huz/T/LIptnufB6N/yczZv+aYC6NXptphMyq3+ZIClOfGS9qrF1Is3RAdhvnFgRF56pyatt/mOTxwnyABENsEQUEzexBY2lo7LqB3/tGjjP5CdMTmc1yB0DaZOX809t2Sv8Pk''@;'; put 'put ''qcH1NI/y6wl9usKrjD6DEdkxkB/nmhH6p1sZ03BdxTMZO4oum2Jr7kOs9al/c8sjvmjmYu7OpEieI+1wQEM0e3NG+b9G/+N2tzLypoGCG/C5pRGzrqtc+7A93p3FHWVaYpvIphZwG7m4B1g+sjc/wANq8A8uufT0WP/mB67O1Y2KVHq91bYuzAerWJ/mB/s7h+w8StV9D7rlEYP2Wza4Fg7pfa94''@;'; put 'put ''pPJZPdWbtqV7So1Zq5CuvuXIwgSpvc9sPa2a0Vtp5mnGrgt+xk/qtlp6glS8cSAEwkvbKk/RRPgxBysZEWnDBTcEN37DMZ6Z6bsOVhiPhRQDiG0hVRNy2U/APFJNIl0zEcJzorfCizQIar7dXmXMQp2jh2GHnsEDxxQqiXRfpPHQ/BLloP27dEVa7r1KLPmdQfC82RPXvZ/q0DNv9aKw/h8H82Zl''@;'; put 'put ''NvKy9snrMRb9s3r7D6zA5OaGqk0L7fqsc17bCWcig//aKZWNjmbuZGW/MkTfHNj8ItWRmP1+ILbZZwwe8khg5ea60WHCmzBGF8ebddsb/vS/HmXk9R45+IQVNzrII7p+1+YkHUeAXG4Izdy/d8AHvPl6UPftlqjzQdznWTj3G+v8yca7T2z/7WDe8nh90136c++2by5Tjd6GiG2C5I1OufMMO9d6''@;'; put 'put ''0eaqiRjjPzIqfS6aGcG0WaKOS6ZNfPbjZOsA7bNPAMQ2+4zBgwUILNg04WKBjUUK9Xx+8PmvQsjU+3vV0Bsbqtf+xwLhWi6Epo6qQ33hzgc88ugzIxuIRAepGaF/O2nJNWM/KGtL5nn40uZxo1Qq3syW2C7pqJlFBG2K1Nwjj3ozRAK1M05cs8tykJMIaMGmqhM04XvSI++daR35YcjRShm9CAQ3''@;'; put 'put ''CZg5agpimyPQ4Cb/BMyj6LqD7PtcGHcozB27RKj/mZ5MvL/QmViUzq3R/GeanQgaBSKujuov6kbotw7mrYr1woVhnp/7moOUXZHoTkfZFtvlraccEeDd25ySp/9Unf7lTES6ZFbVhseyQyl3Vhc3TxgrKyXPcqT3ryOO/AiB/05k+i1Y7pa7WiTiCcQ2EUrQpqAI3Nc82RNk+lUCi9soYYNuX4Z0''@;'; put 'put ''X6dMvQ8jhSycM75ld0Eln4FkGl//iqx0ur6vG+G7Yk+qMc2bz3MZcTwkGfyuGZNaD3gFOextZObp5EI+JtUdpMxafyI+XFPmOKR2b+pCOGjpQ/oefXq+TzzKQCnQgi2VX8CaYa4vPzHankLdrxp66Nszaja+lQk/YCN9AiC26TMECzYlsLi9+kgh+DyCyHnxti6kWPkHEfguEg4/CeeKDi7y/M11''@;'; put 'put ''oykO34gQvlaiDndsC8GN9xBh87lb/t3cr8V/nrt3NnLYnCAV/5ltmmJrxtTUMeWksN77V4W5S81/q0aw10VHnjOjes0mmw7dAWGb5xhrRvczHnnkgLsNYd3/scxc35ldvbmjEPK0ew4gtnavIMSfNoElrbUVfm3Xg15lzHEYExprkAu+hWF2u1P2bbTzxJq0QQ1hYEHrieNcbOT1quH/VuyXFnMG''@;'; put 'put ''sFsa1ebXulf2quKZ2APbTaEQIvBWNsXWnJnulIJ/lIjj7EgKGNFWQ+bfLpQ7F+aXFs0Qj0hUOSO6TBiRnYLz7zbUbmrNVv3BbmIEQGwT4wStioDAgs0Tr8ZI3CEz18Gx6ZrPc12sfDXi+u27qqretuqpMfks0+L26tMJJsuxIP+DMSaxsUjEtUY39J/2VNe8GuGXC7E141jWVnOWwPhJgun+L1OE''@;'; put 'put ''KD+ZWbFukV2XAcXyNW+Z+1loFSXSd6O3dwxqPbsVWnrJnNpNz+dzfBS7bxDbYh8BkP8AAuZVUKmDzmBYWqTx4CA6BtdVSpV7ZIIXwJrGwYPH3HxhSVvVDIdUcr3OQwMOQjdby8TZKzD5hSHCi8ydnHIltk0dVc6wrj+qMNe5n13dkk4h8PcaajauK5S3gTl+FeJfpEiu/mMFIz/79lO+fG5d21OF''@;'; put 'put ''kqvd8gCxtVvFIN6cEGhqm3IspdIKQ4RPjeeQYvkfHImbe0rKn87mqTg5STYLTpY2Tx6FJe0mXWhXS9TpiXVBhLQbYX67QfE6NdyzPfI8Nbadg3k6KSFfunb8U2lPVGvqmHxUQOtsc0nlB0X8+NXOD71s1Cmzapv/lQUMeTFpzhp3bJ5wHSL4LjmKvWr4fRJx3N5Q3ba8UK7m8wI4RacZEFv2sS+8''@;'; put 'put ''c9DkiEg8sF1jipWBbnknYJ6Vq5b4LvA6xs7xq7u/HhuQeWvZq4x50q91roBJKIPLZX7oO9snnuikJbNUHro43vrcEnns33rCO78Wfdsz2pIptjrj/5OJdbHmVffi9vHTKHasiL6dzLDjhTAOXD23svXVvA+6DAVg5jq/ddxZQmgPRX+5MJ+hUywtdso9t8L8gwzBTtAMiG2CoKBZ8RIwb0ES5Lwq''@;'; put 'put ''bPhvlqhj/1VRhEhY9/cokvfXOhULrp/YArv3xBkq5vm5BtcXSMRxAiVMjm1iHhOB8eCPI1NssaZ9+cc16z7NxAg03cxrOf5hh1xy6UDxF68yJF8xo3r93zLhxyo2FrR8fULQ6HukzHno0dExYST9FhMx126HMliFaypxZEBs6Ue+8EeDbhPBlW0q5YA+ViZgbv0YxGojQujyeEtdAlr3J25pxK2U''@;'; put 'put ''OB6dUbnGVse45YK7uT7X3V12GhZkMSH0K/F8xoquQj17NEGPnVX55CeZinHJ2tPdyB1sxFjUR1/h+tXOj1ys/OqGms1rCuk2610dVYeqwV3PlDkP/Vo0w6Dme8Ell15UX9Xy30yxBTtDEwCxhdEBBJIksHhTxdGESYsxwufEWyqEEHqJc3RzX82mtemeipNkaLZo3j9ZSdNuYlS5nhImHegqV6Gu''@;'; put 'put ''PZqQMiq2pj8zht5Qz30eZeTl0bewVSOwW6auH9ZXbSqog9nnr584MoA+3TTCdfix0bxVI/ASI95vz6nZ+K4tBo+Ng8y62OIwLq+f0tJtY0YQOhAYRMB8Hlm6dUpVX2jXg25l5FdjG3Bh6DpXN8nU9aOG6hbYbznOGFq0teKwcMj/kEceOegoRLO5eZVLMetm1FExveLZNzM9DPceJ/juFUKg5TJ1''@;'; put 'put ''evffjTOCfTJ1Lmmo3nRHpn3m015jR9UIovke90ij+k9Bivz4wp++5XGOvXhOZfOL+Yyv0H1nXWwFUz4P+8wW+jAq3vzMU3HcquuH3NB+IlFlTCyJ/ue5zP1LrPMl9ZNaPypeUvEzN/er7vTTOl0Eb1GYu4IRxRnb0iONaNG5eqvfob001E5UqXI1vzQprePPZ0S+hxJp//pq88uSQypZperGrYV0''@;'; put 'put ''BOOStce7NQdbKDPXj6KfWQdV325Z8lztr259Cu7GpDqaDtwvbbGVQ2xnb3jn/m+Fse6cdNTNqtHVzAUWCOlI54QjpO1vRjDDBIth49jbP7Uf077Z/0B+eAIxIMRQtA0ujP6YCKb99s38DvRDhsjhQLlxoQuTUWqZJ9crkTokYzHRmpk5xtqlFAvDENj8HfsaFyTlsRBriwhdmHGa/0/ZQF+Gvndc''@;'; put 'put ''mn8XuggbQuv3S6W97bBBuUG4y/xNiDzSLZXcEzA6B9ymi/jrCX/yjlsecYcQ+E9wyPfgUWSKnret9qiA0fOASyqfEnsyk87VkGYEX3PL5dd1h8SLjVNaDvxmS2agmptetNYe4zd6nvLII46J7hrUul50OMvOnz1xc8pn9iYZSk6aL2mbdJHB/atk5tl/jrBmhAKcG8vd/tF3FsK+0TkBmYSTtD7E''@;'; put 'put ''73v9Qo8UIh/2hT8uScInNAUCBUHA3OCCC10TiHMkhCEzd/8H11Aza/cl/TIWeF6Pip6O3bqwIKCkmUT/phjtFWf+/x3kOymRv0Zits/sP+QAy09QxO+cVdue0bWx5jGCQrBHMCYnDUhDoH8ILK4utOVdi9omfNvFRt+rcf+AHdOwIE0uxXfLteNfDKRZTugeRSAtsX2o7Vyv4XR+AGILYwoIDCZw''@;'; put 'put ''INHVudqqMM9VMyqe/08hzXzN5DhYvLnyalUE73JJZYOWW5lbEDLiWEV1x4o5UzJ3MtPCHaeW4qD/DxKVz4zOxZyp7JZHn9dQvXF7JnPMty1zSZaqBx6JPb0JI/YzSuS5MKs+cxUCsc0cS7AEBOISGEp0heAGxcoDKtPnwfrc+INnefPkMo0Gb2LMMSe2hUDmFg3G+xSRBb7yPb9sPPYNNRNDcNWO''@;'; put 'put ''ca6ekHI3I9LV0fZUPbCbYuUHhbbl4cK2CcfqRvgvLql8/1pcIYT5DOVZB+eXTa1r68oE12K3kZbYrtx6ZolDKnkfrmyLfRhB/sMRONBVbkDrv2q61SW5f3/t+Kfg1l0MTPPW8sptk47qC/t+7pRKB97iRQiZh9aHNN8rCi2ZOreubdtwtUjkdXPiVk+A/YRSpTH6+XFY7+uhVJl1fU3HrxKxY5c2''@;'; put 'put ''C1qPKw+ogfZy52Ffjo5ZcL2dY/e352ZoUxG78MhGnGmJ7f2vnl3ONM9/QWyzURqwWYgEhhJdUzAwpi8jTu7AJPR8Q/WWwacgFCKQJHIyt88MebtPE0jcJVFlwAYNphnVCPQy7HiSIL6gobb99SRMD3FHAuGFrRMuR0jcrTD3/nkpmhHsY9g5v1fDSzI9USvdmNPpv7R53CiV8tUOVjI52g7F0lZD''@;'; put 'put ''6JfBErZ06CKUnti2nl3OXO53+sKf9B/KDD9AAAgkRmDoW8tC6FzdrEhlM7orKv8OR/kN5mluSKHq4gpDhG53SqWjY1uYJ9zI1PNL2RCLZkxq3ZVYRYZuNX/T+LM4Uh92SeUDlnYx5LhPR6iglgat3FpRsifQvbrUMXbA2ueg1vsPr1J+wYzKDW+ky7NY+6clto+/fqHc2+uZjwQ7VOehgMG1/dPx''@;'; put 'put ''zecpGCPOhcHNJyscC47NBwFcCIT2HnWJScySn30LOvi+qHB/W/Mn+mhMbq61OeDSD3Mhh9mL76uqQGb7yL8QwnGX4Jiv7/UjCBeYkwOyEQktFRrK1/DDbaB9My7eH/fev8fw6P/33vzi5zacv4G5D9c68rrge7+skf3+P4uLR/GOtfdZtAf2FLv8I7o1RnE20jXzx8l/gRQC7V3CFTVm9udojmOT''@;'; put 'put ''O+HmkBYYmaPYHJjmX7kwiPl6/184xsKclcwFNgxz3COM+/9t/t18HWHOkWE6IkTCzpGE0Ckc952IKXXFkjCvnmTi/JmOlEVwCy/+OJm3teIgWcU3C4KvYkQetD7XMNR3EKY3+8s7/5ju89xFbRPH64b6hFMqPTQ6GoPrz0rM8YNC2mN471pc+pBDKrk4OldVD7zHsPvSOXUtbYl+RkC7zwikJbYA''@;'; put 'put ''EggAgfQILG+tPULF+nyKpQtil7mYlmXqfksYxq17qqoehavc+KwXbppQzTFvUqhrQrzTgyTiWKMb4Z/Oqm55JZ2Z3/PaJ3yda6E1bnnE2AGRcNKuyOKCaQV0CIW5jzXb47jXxbzXROca0vu6FFL2ndm1G5rTG/nF1xvEtvhqDhlbjIB5mdzUVns0pqQJIXx2bHi8f9YyfRlhdGN9Vct6i4VviXAa''@;'; put 'put ''myczWQqeLmNpGcH0f2KDMrimIsQeVRi5aUZlywepBr2obfyXKHauJZgcPsAGxlslQ/rOdbXP70zVttX6mdtZ/mfsW3co1H1jzP7RPoW6L6+vbnnCajFbOR4QWytXB2IrKgL9h363T7hA17X5Lrn0yNjkdR4OysT1a4H5IjipJf7QmL9t4kgc1mZyIX7slEpHxbYigu5GGN0uwvx3qe7ZPr914jG6''@;'; put 'put ''7n/Wo4waUCOK5W2c8UvqJ2x4u5AG7rxNX/shxnShg3nLI3mZm4s4qffmztLy+xuPXZ2RJVeFxCxeLiC2hV5hyM92BMwj4ISr59L/n9xwR7zzc0O6r1Mh3l9i4lxQSPv2ZrJQi9pqDkHCuEEg4wqZugbtcKfp4f9IVJmPsPpoKjO/mzqqRggh/RFjPCU6blUPviUT75UNtRtaM5lPvm0t6qiaGFK7''@;'; put 'put ''V3vlMZ8fEIsQf2KG+8czJq1JeyJavnPMtn8Q22wTBvtAIEUCi5orDjOodgfB7EKZOgedGU2x8g+OtJuFCK1JRTBSDMtW3ea3jqvwsPL6sBE4jxJJiQ3eyUo3B7Sulb1lY59K9grN3G3Kw5UHVb3vu9F2Zer+WNX6ZvpqTv5jIT1nn7d53IkSlh5nVBlwRS+E2ECpdGkhTRLLxiAHsc0GVbAJBDJI''@;'; put 'put ''wDw/lzK2RCD8zejDziMuhBDbERY/7a1qbYYTW+KDX9xa9U1KpGUY4wEHDZitzZ28ZOp+Thf63Pqq9f9IpnTmMiSElZ8Jblwy8Lmmv8fBSq/trqxbXUiCu3hz5YmaCD0ZOytbIq6NQkXfhSvcoUcPiG0y7yxoCwTyRMCcRLWg9YTvCCEWO6XSL8aGYS6vo9Txc86NOxuqN36YpzAt7baxebLDzfSZ''@;'; put 'put ''DsnboPHAoOMQGVZ6EDLuC3N6dzLLrczarNgy5XaB+C3RACiW/aoevHNuXdsiS4NJMrhlHVUnKKT81yr3H7f/Cx8SwsVGNOuq/7JCmiSWJJoDNgexzSRNsAUEskxg34YO30eI3y4z54DTWkzX5vNcmbh/5pCUpdMrNuzJcji2NL98c93BgpJGQ2iXx7u1zDl/n2ByW0PNpocTTdCc3FbWcfJVBtIe''@;'; put 'put ''jL7C7d8ZTOD5vTWtjYV012FFa83nVcz/xIg8PpoRQcoOZPDvzKpb/16i7IqlHYhtsVQa8iwoAndtmvA5hNSbJaJcKlGnOzY5guTXMRLzVTf5a6YPXC8EkOaylncOee9kwY0FMnOPi83JPDxewZ61GtJ/0lC9/rVEcu6/+7B5wmyJyvMoYfL+qz7BDUbdt3QFQwW1veOC1glHcK79zimVVkXzYdjx''@;'; put 'put ''gi7QJQ3Va/+TCLdiaQNiWyyVhjwLkoD5PNenf/zzEuXgiYwog3ZR0oW6yck8c/Z4yl5NdgJQQQKLSco8cKAzIF2uc/8dLqn8IIxx9PZs5n7LPRJ2/tyQybJET2ZauHn8d3WuLnfJ5QM2v5CQc6mGREHNIF+4Y1wp8pOHZcl1fjTasO7/l4OWXllfs2FLMYyjRHIEsU2EErQBAhYnsGjz+IlhI/gr''@;'; put 'put ''jzJqwKktZtgG18IaV5sdzHMdbCYfv5DmnsBhg16hGcFbHaxkZGyrsN7XRZG8otSlLk3kUPUl7dVf9Yf3PFHiGDtg5q5f71rvoJ5L59Z0fGrxIZVweOaRhL6gdC+lypXRnfrU3R84SMn3r5+0ZVPCxgq4IYhtARcXUisuAuYEIIJ23cSoY7qDecpisw9qPbtc8qjbekL6w41TWkLFRSexbJe2Vx/e''@;'; put 'put ''G9p9b4njoLPibf0Y0nr/rtCSaxpqWrYNt/WjudtUUPU9U+I4eODmF4g9g3X1ykwckpBYVtlvZW7vKO9WlijMOz367oCq93XLzPm9huq257IfhbU9gNhauz4QHRBImkDj1ooSWdXvkqjjRxQzKdqAOWvZr3V+4JZG3Iax/hiszx2M13ye++6hH345pAfvd0sldbEtDK5rQa1rh1sZNW129ea/HahA''@;'; put 'put ''5uYXfrXvGbc8ojK6XXfwo9fKXYecW0g7gZmTxOTN46+UqHw/JdL+Z9aaEfQzosztrW5dVUiTxJJ9Y4LYJksM2gMBmxBY2loxzqfuub/MeejE2JDNCUAGN7bIxDOjvub5l22SUk7DNO8UyKT3YpX7G0uUg74Q61ztP5nJ9RA2jEX1k1o/Giq4Ba215f7wB8+OcB0+QHBDat/rTlp2bn1dYW3vuKB1''@;'; put 'put ''whmaEfi5Rx51WISJ+ShDYd57///IqztmVK7x5bSQFnEGYmuRQkAYQCAbBCKCYYjwTW555NGDBcPf45DKH2WGsWBa9cb3hrs1mo0YrW7TfJ4b1ND3VSNwy6ATfxBCAa37E4k4H+SI3f2TurauePksaqvxYkrSxfgAACAASURBVMxXMSx/L/p187mmWy65eHb1lg6rc0gmvsXt1V9HHP2eUWnAHAIh''@;'; put 'put ''+DqMpR8U41pwENtkRhC0BQI2JRCZAIQFuZ0QOuh5rvlsjVHvQwLJi5PZ0MGmOFIKe97mcQczTOcIJK6Rqcsba0Q31LcpkZdKNPTIjMptg67eVj57phL0di6mhE0lmLFI/6DWvUvGjmv8ddueKqTbrEs3V3wlYPj/6FFGDhBcSuTNBjcuKTbBBbFN6W0HnYCAPQks2TTpi5jxJoSQufXj/g/8SDaM''@;'; put 'put ''OP7JuT73kA9GrLnootXmUffwE0PAZBgW3ebh6nXxGAY130tuVvKjmdWbdsS7U7C4tWImJmxJ9PP0sO7voVhqCNRu+VUhCe6CLZVfCAb3PFfmOORL0RgNrr/gQK7zimm3KRBb+CgBAkVGoH/zhfbxZ5bIB9+m6r5Bz3PNvYI98pinekN7ls2pa2krMjwJpWtOBnK3VZ6NCVsc7/xcc+coiqQ/c67d''@;'; put 'put ''PLuu7c1Yo/Pbxp+FOP9d9LF1OldDFEt3z67ZfGNCQdik0bJNEz5nEGoeYDDgmbVC3X/ThXbxzMrn/22TVNIKE8Q2LXzQGQjYl8C+25qXCCHmxdv60fzwd7CS3xoM3VY/fu2QE4DsSyD9yM3jEHVn1w0IiRkKc5fGWlSNgI9ix88Upt4Ze2t5cdvEOoMbf1WYZ/85seZsccTFQ706m9o4pUVPP0Jr''@;'; put 'put ''WGjcMc6F+wJrvPKYSdER9am73y2XDz3juup1/7RGpNmLAsQ2e2zBMhCwBYEl7dVjsKA/EsiYQYk0aEMHmXreMWeXCiSvgvNz45d0wabxJyjMeZ3G1Ysk6hiwfaYQQnjlg17waZ+u6Csd86fonbzu3PTVb0vEdb9MnQdFLJvtGZFX4C7pJzPOWhO2xSBKIEhz3kBIE79j1HlOzC3ltxBml82t2VTQ''@;'; put 'put ''u02B2CYwSKAJECgGAuazSM7C87Ag5zMiO2JzJpi9KhC+3SU5n7t2/FOBYmCSTI7m7fmFm080D5OfJzHX+HjPc2XqeU7j+k31VWtfithe0F49QVW7HvcqYwYsL+KCP+Zg8rRCOlDCFNy+cPjnDqn0omi2GLH/IoyvrK9a35IMczu1BbG1U7UgViCQAwLLOiadIBGlSefq5Fh35rNILowOiuTbejXc''@;'; put 'put ''Wki3OjOJdklr1fmEyAsxRoPOzzW4GsKIPWogftMNte07Tb+L26uPZEL6MyLo+Og4VD2w1iGXXF5IB7Objy/Cpb3zKaYNA3P1d8vM/YOG6k1/yWQtrGILxNYqlYA4gICFCPTvonTIB1cHdd/NbnnkoRjhQZ8VEnE9jLBx53UV696xUOiWCWXv89w9N2CErpPjbJ8phPgQYXRnb+nuhxuPfUM1t4pU''@;'; put 'put ''9fBTDsmz/5xYMxku+EYu0UsTPQjBMgAOEIi5vSPahZZ4pZHTo7fFNIxwH2POy2dVNv+l0NZ8g9jaYWRCjEAgxwTua57s8TFdcjDHWJkoD4aNvgETWyLhBHXf7hL54LtIMPDQtCktfTkO0xbuFrXVHEIQ/wlC5IfRR++ZwZszvzUj/B9MyPU31G59sn89tM4eo4SdEZ2cX+38u5O4Lp4zadsbtkg6''@;'; put 'put ''wSAXt1Z9U+Ohh51SyahIF3NiHsOsya0EGq8d/6KWoCnLNwOxtXyJIEAgkH0C5qH0WHIdjHV8iUydp6p68JiA3ikTRKhEnSXxNuWPRMUFN9fjbndK7plhvefvsN9y/Hot3DShWkPh+Q7qqYw9tN7gahghspoJfFtQVntQ0HjQIXsuiLbEhf5PxPH359S1vZj9EZE7D+as7KDe9zuvPPrz0V4pVn5n''@;'; put 'put ''CDyzUCblgdjmbkyBJyBgOQKLt08eS3R0BUXk0rDRd7hMnYN2Rko0aI2HA1ig7UwpnX7Yf0v+CZtiDCZn3j51drlOEhzFPbQ+pPv2IIR+rQi2QjDlZoTQD6InWgW0ro8d1PuDObXtaxKtix3aLW6f8PWQau42NXrACUkIoY0Sly8rhM0vQGztMBIhRiCQYQLmrU2BtBu5oV7skErHZNK8agR7HVLp''@;'; put 'put ''7wUjt8P63PhkzdvFvaHgtQLjOS6pbBD/oNb1osxKV7lY6aVho/ekaCtBrXePQj0//PzOg/5aSF9o5neM+x83HvFrQ6gDNlqRqWcD14PXzqjZ+FYmx2mubYHY5po4+AMCeSRw77ZTRmq6qPdrXde65M+ekw28Xdk/41gzN1gIG71dGDGdIGwwqqCw0ScTzCSZukowItT8b4wHT54y7VGsPDSzat3V''@;'; put 'put ''eUzX8q7NI/hUQ5+LEZ4uUacnNmAHLQmPdh+lvO/bv1Kov4nOw0GB8NJgzZbGQtresf9Oi6Y9RjCtQ1GT8mTmek1F/HsNE9e+bvmiDhEgiK1dKwdxA4EkCSzZWne8P/Dx417l4GPiCWRA6/rEr3W+7iCe+72O8mZfWPF9ZddoYbp548LV4iurL9z/efHG6F1YYf7PEyHOkqn74pDhPy56B6WQ3rvH''@;'; put 'put ''6SyfWD+hsI6PSxJ5ws3vajthvDD4CrdUVpNoJ4Nrqsycd82s3HBnon3s0G5p87hRkmPkbw0RHjBJzC2NfDNs+C6fUbl+qx3yiI0RxNaOVYOYgUASBMznhI7OkukI8dvlmKsn81xbzQhvxgg3obDRFmJef7JrZxubJzOF6V6Mtat0IzTXvOpVqHNZV+XGWwvpqisJ5Ck1Neuk7Hacr/LgwtgNLoYy''@;'; put 'put ''aN59oJj+zCn3ziikmbvmhD1faHdrieOQcdG564b6jkMq++aMyjW2m5UNYpvS2wI6AQF7EDDXelKvdpvBw+ZWjEp01J3B918rlUbf4jecaxuntIQykZG59aOmB8+h1PX4DbXtvZmwWWw2FrQeV24Y6DqM6QynVDpo+8x4PDAiqyVKflxIu02Zt9g5Z48RQk6Nzplz423GHJfPqlxvq0MyQGyL7Z0M''@;'; put 'put ''+RYNgVU7xkm7/NoKhXqvoYRJkcQ1I+QnWJ7HtN4H6qe83F00QGyW6F2bJnwuZHQu8UgjzjTvFgwbvhAbCZevnFW3/r1h29qkgbneu5v6fuVk3u9Eh9wb3vXfcuWQb8+oXv83m6SCQGztUimIEwgkSeDuradeqevafZggZ6RrSPN9igid89O6Hb9N0hw0zxOBZa21xwQN34NDnZ8bHZYvtPNfZfJh''@;'; put 'put ''35pV2/yvPIWbcbfm7XVP18hpAhkLKZHkiIM+ddd7Hlb+nYba9h0Zd5oFgyC2WYAKJoFAvgksaau5SCD+K0bk/UJLsfyGqgd/MLeubVu+4wP/yROYt+nEi7jQVrjl8rHRM3VjLYW0vjddxHHarLr2grnCNXNc0l73XYzE7wimNJKzwY1XEeanza3p+DR5orntAWKbW97gDQhknUBTx6nHhbWu5xTJ''@;'; put 'put ''c0jEmWYE35ao8r2G6tbtWQ8AHGSNgHkurBIgNxOMr4u3VOgzEdLeogh/1y5XfYkCW9JePQMjvNRcchbpw4jjibHvlVxg9TXHILaJVhnaAQEbEFjUVuNFQntOos7qSLi6oX6AiXT53JrNG22QAoSYAAHzlCBV6/2FSx4x6GSmSPeQ7utUSOnZs2tbbLlUZigMTe2TViCMZ0ZeN/eXVojrkulVax9P''@;'; put 'put ''AF3emoDY5g09OAYCmSewcus3Zuk8tDzqCkelWPpRQ82mhzPvDSzmk4C55Mophc5CAt3BiHRcvP2rg5pvt0ceOW1m1XpLC1EyHJe8crqb+3paJOoYH3V1+09K6JRpE5/9OBlbuWwLYptL2uALCGSRwPId3zhYC/k6GJH3H0IeUPc8r4QPOX/uN9b5s+gaTOeZwOL26u8wrCxBiH8xNhS/uucDh1Qy''@;'; put 'put ''zg7PNRPFuLS1dpwuws/LzFUe6eNk5cs+mfD16xtxI0/UTi7bgdjmkjb4AgJZJLByyzdu0EVoYcQFQfRtgfVv1ldt/kcW3YJpixAw91sOavQ2jMVURmRHJCyKpUe6QvrVmVpLbZF00dKOutsJIrdG4lH14Kdeh+tr0ya2WPLqFsTWKiMH4gACaRBYsfWUg/pCu7e65LL9V7Wc85vm1LbOT8MsdLUh''@;'; put 'put ''gaaOkw9FwrhVIHENpfJWhsU5hbTZRaQki7ZOPkyova/JzFMW+ZtM3OdNr3z2r1YsG4itFasCMQGBJAk0tU26imOximDSvywirPs/8CqlXy/ED9kk0RRl85XPnqmoJb6TCaEfNFRvfq0QIew9rtD7Z4k4zo7k55VH/+Ka8X+8xor5gthasSoQExBIgoC5U5Qv5FhHCds/M5Vz/Z6+mvZZsDdxEiCh''@;'; put 'put ''qe0ILGmdPJlS0RwJ3COP/rceDFZMrXumy2rJgNharSIQDxBIksDyzXUHh1HwFZm5R5tdzdNgGJYm19ds2pKkKWgOBGxFYOGOU0tFoOsthXn695DWjFCfh42aOK3qGcvNUwCxtdXQgmCBwGACK7ee8hW/2tMROeLOr3budMueiQ3VWz4EXkCgkAmYt8v18uA2JMTXInliwi6sr9zwR6vlDWJrtYpA''@;'; put 'put ''PEAgSQJNHafMNHhw8Wf7xuK/1Fe1fAdj1H8WLfwAgUIl8PjjF9LdXwzfG9J6fhTJUZZK7pk+4akZVssZxNZqFYF4gECSBO7ectpjhlAv2nsLWVcxQj+cU9v+6yTNQHMgYEsCyztOnsWFtiyyqUeZ47C1PzjxkQEHz1shMRBbK1QBYgACaRBYsHn8PxXm/pJpQjUCPkKkE6+v6XgrDZPQFQjYhsCK''@;'; put 'put ''LVMqdK61EUyZGbSEXe/Jkuf4a8ev7rFSEiC2VqoGxAIEUiDwsxcu+HuftuvYvWIb7MWYT7ihdkfBHLGWAhLoUkQE7mk77ZAQCrxDCes/fk/V/d2YlB97Q+3zO62EAcTWStWAWIBAkgRWbj2zBAn+mi5Cn49c2WIsf/mG2nZLfdAkmRY0BwIJE1i149RSzZDeVI3AGLOTQMLcmrRudvVmSx0sD2Kb''@;'; put 'put ''cEmhIRCwHgHzgyagin8IpB9sRhfW/T0COY/+6aTWXdaLFiICApknYB7IcKh3zKu96idfNq0bXA0z6rikvqr5z5n3lrpFENvU2UFPIJB3AsubJ5fJLu/LYcN3eOTKVuLoq7NPeuH9vAcHAQCBHBBoFI1k1AsvPq/qvpMj7hhx1M+oXLsiB+4TdgFimzAqaAgErEdg+d8ml/GA8TLGJCK2veZxa3Nq''@;'; put 'put ''Ot61XrQQERDIPAEhEL532xmLNR6cE7HukEoemjrhqasz7y11iyC2qbODnkAg7wQaX79QLvd1bzKEWmkGo/NwUCB69g217fu3sMt7kBAAEMgygbu3nHK5ztWH8L69wZ1SecePJzxRk2W3SZkHsU0KFzQGAtYjsHLr6ct1Hp4ViYwjfsec6tbbrBcpRAQEskNgWdspUwwUeDZytKBLGvnOx32dxzRO''@;'; put 'put ''adGz4zF5qyC2yTODHkDAUgRWbvvG/4Y034OMyE4zMG4Y22fXtlXCDlKWKhMEk0UCTW1TjtWEf6tEnR7TjUzcPk2RD68/4YnuLLpNyjSIbVK4oDEQsB6BRZsnniew+I1MXV4zurDWt4s6vcdfb9FDtK1HECKyO4FFbTWHCB5+XWbuvWfbCtQnCflL11lorS2Ird1HGcRf9ATMDxoZs1aB0RH9V7ZC''@;'; put 'put ''1wjH5zbUtT1X9HAAQFEQ2Lve3Nihi/DRZsI6V0MKcZ4ys3pjh1UAgNhapRIQBxBIkYC5zpDgPU965BFn9n+pF0L8/1Xusj0VlTc04kaeolnoBgRsRWD+5nEvOZjnBDNo85hJh1Ry7nUVz621ShIgtlapBMQBBNIgsLjtpDouAs9EbiX3qXs+cLhGTYBbyWlAha62InDftrN/ETb6rooErVDvvbsm''@;'; put 'put ''jp9plS+cILa2Gk4QLBCIT2DVjnGu3rCrhWAyIdKCYmXejMp1t8BEKRg1xUBg+ZbJNwkh7orkOsJ5+NP/7X7vfKvMSAaxLYZRCDkWBYFl7bUNGNNlkWRDum+PRx4xaUblhjeKAgAkWdQEVmw95XhV929lROmflW9wfecoTTryyiktISuAAbG1QhUgBiCQAQIrtp5ykISdm8NG7zERcwSR58JcveiG''@;'; put 'put ''2vbeDLgAE0DAsgSWtdZ+TUdqW2T5T7njc592hd76QkP1lqAVggaxtUIVIAYgkCECTR0n34iQsSBijgvDoITdVl/VMi9DLsAMELAkgRVbKw4KqOobDlYywgzQHPsuufSYqROeedsKAYPYWqEKEAMQyBCBJa+c7qaB8FNIoCkRk4bguyim/9tQ3QJLgTLEGcxYj8Dyv51XVmI4X+tRdx5mRicENwgi''@;'; put 'put ''dfU1m7ZYIVoQWytUAWIAAhkkcPfW044Oqp3bZebZu8AfIeRXO99xOcecMbtiw5sZdAWmgIBlCJhrbcN69z8pkfuPmzTFVsKu6hnVa7dbIUgQWytUAWIAAhkm0NQ26SoD6fdTIskR0wTR17Hg351Z0/L3DLsDc0Ag7wQebp7sCLlL1gb1nkl7xVYIJyuZM7Xi6aa8B4cQArG1QhUgBiCQYQJL2ydN''@;'; put 'put ''EsJ4lhLmjjatUO+rWJDLplY++WqGXYI5IJB3AvduP3u5qvftP5SjxHHoYwb/12XXjn9Ry3dwILb5rgD4BwIZIrDy2TMVURaqlZjn0t7wroslqrjimQ7rfe8rjpIzGyY2v54h12AGCFiCwAPbzvlm0PA9FRXMe4y4jptRucaX7wBBbPNdAfAPBDJAYOXWyYcFtNBKjMTpEnUMuJqNmNeMUMDJSj/F''@;'; put 'put ''mP5V13pX1te1WWKWZgbSBxNAoJ/AkrZJV1GCfxHBUeI4pNMX6jy6oXptZ74RgdjmuwLgHwikSWBp+0kTEDIeIpgeF2vK4FqYEcd7Ahl/MAReXaKw9384br0PdpVKEzp0tySBFe0nTQjxwHqZukoiATqR97AfVz/9Yb4DBrHNdwXAPxBIg0BT+6TT/VrnL93yyEOjzZgiq7CSP2s8cG9v6e4djce+''@;'; put 'put ''oabhBroCAVsQMO/waIa+A2N6UCRgQtjXZlVuyPscBRBbWwwhCBIIDCawuL36CsNQVyjMXRp51ZyBGTb6PpCQ43p/XcfjjRjBqT8weIqGwP+1d+fxdZTl4sDfbWbOknOSphuUTQGvCAoCaZOcpG3SdKOKChcKondB0UopaZO2FMX7MaJQuiVtCkJBFC4XvbYISIHSLUmzF1IuXBblB1xRsC2U7Ged''@;'; put 'put ''mfd9f59JOSEcWrKd/Tz5w4+fnJnnfZ7vTHkyc2bet7q1MNene593qrnnhIu2sdySpTOeOJBoBGi2iT4CMD4IjEGgpqXkqhDvf2Dou7TW1SzG6GEbs/9kWf7+zjGEhV1AIKUFpES4tn3+PVyGbvy42bo3L52xsyLRhUGzTfQRgPFBYJQCm1tLF3iNzoccyoRTwrsGzb4uhbhuPOvw1D8uXryDjzIk''@;'; put 'put ''bA4CaSNQ0zrvdon0/wgX5GAT6/wm/XqlZ0dC50iGZps2pxgUkgkCte1l53cHj+x0qZPPHtJoO6XES2+b/eL2TDCAGkHgswQ2tcz+Acbo/vA2kxznvNiv9M++6YId3kTKQbNNpD6MDQKjENjYUTIJBY3thLDBeY91HuinxPat1UWNdaMIBZuCQNoKVLeWLBTS3EkwZVaRE9TT/hpQ0aVLL/xddyKL''@;'; put 'put ''hmabSH0YGwRGIbClde5ajoxbw7sIaRoCyeW3FLXeO4owsCkIpLXAuuaiPCTNvQq1DcwNzojtQ405L1yS9/iRRBYOzTaR+jA2CIxQoKap+Gwv7212qrkDk6xbPwYPPnZL8cHF8M7sCBFhs4wQ2NAyfwqSvpcoYQP/Vgwe8CrYWVBZnNgZ06DZZsTpB0WmssD27VfTw2f0VnERvA1jPPBvNmh6X2NU''@;'; put 'put ''++YtRa1vp3JtkDsIRFugpr4kR7HbD+rC/0/h2BjjeRWFDfuiPdZo4kGzHY0WbAsCCRCobi7J06WvTqUOlzW8zv19Gsm6rqKo/pkEpANDgkBSC2zruNwR0P0NApnTP05Urqj0NG5JZOLQbBOpD2ODwAgEatsW/tSUgV+EN+0NHu3QnNkLf5L/PLxLOwI/2CSzBKw7QZ2fMx8MmF3/Fq6cEdvm8oLd''@;'; put 'put ''CX3XFpptZp2HUG2KCVS3LshVCNpviOBXrdSF5Bwj5ZqVRfV/TLFSIF0QiJvAlra5VVwaPwsP6FQm/veS6Y9/O24JnGAgaLaJ1IexQWAYgZqW0q9JLJ4Ob6Zz/1GVsrxKT1vCJ1aHgwcCySqwuXX21QKhwffOnUruCwibJUvydvoTlTM020TJw7ggMAKB2vb5600RWj14O4xqz5m8/8pKT1tCZ8MZ''@;'; put 'put ''QeqwCQgkTGBTc0kBpaRNyOOTqdmY67BqGl+5IYFL7UGzTdjpAAODwGcLbHh5vhP3BeoIJTPCW0okf7TS07gN7EAABE4ucE/rgnNNLN7k8vhiV7rp7XGoU6xF5N9LlBs020TJw7ggMIzA+vqSU0K485BTzZ1mbWrNf0yw4+JbZ7b8HfBAAAROLrCt4/JJvlDfSwijgaUnDR70qcReXFHU8FKi3KDZ''@;'; put 'put ''JkoexgWB4ZptY8ElAhn7wyv7EMTeCIng9DXFLf2ABwIgcHKB39aX2PSs3J0+o3NueCsu5A2rixsfTJQbNNtEycO4IDCMwJ0H8hZRQnco1OawNnUpU59j3g+uuL60IQh4IAACJxeoqi9hkx3OmhD3LgtvxbC6qbxw76pEuUGzTZQ8jAsCwwhsbC66khA2+IqPylxPiQl8cfkXdoUADwRA4LMFatvm''@;'; put 'put ''3qiL0FaCCbW21Iht100Fuxclyg2abaLkYVwQGEZgQ4vneoqV34Q3s7MJv3vfqVxfdcGO4099wA8IgMBJBba0ly4yuP4kwUyxNlKo41W/oXjWFD+VkK9hoNnCyQoCSSqwsanwh4Sqg08eO5SJD2L8txuX5B0ykjRlSAsEkkZgQ4unEEnUQImiWkm51FPe7dd7vlqZoNd/oNkmzakBiYDAJwU2tBRf''@;'; put 'put ''TzEdvLJ1sOz/OurUvg9XtnCmgMDwAtWtc04T0niTYGK3tg6Z3u4skvvlm4v3Hh5+7+hvAc02+qYQEQSiInBX84zrFKz9J/7oO6cJ2unPdIf0qys9O2BCi6gIQ5B0FrirY2624T36mlOdOPD6j24G+h006+LyorqErJQFzTadzzaoLaUFtrSUfNnP+xs1ljXh+F/m/sMuzX3hsvz9sABBSh9ZSD4e''@;'; put 'put ''AlUSEVfr7IMYozxrPFPoQRvL+mZ5wd498Rg/cgxotolQhzFBYAQCm9vLpgZCPYc0JWvgL3MphUBCXrJyZvPLI9gdNgGBjBaQEuFtHVc85De6/jUMgSX9eUVRXVUiYKDZJkIdxgSBEQhYt8HsBmnkMnTh4OaYXFNZWD84wfoIwsAmIJCRAlazvfeFy9cHzb7Bd2tt1P3I0vydg803njDQbOOpDWOB''@;'; put 'put ''wCgEqupLbE7FeIIStnBwN4lqK4sOLB9FGNgUBDJWoLqt5Eec61sGn0jWpuz7waU75iUCBJptItRhTBAYocD6Fs8tDCvrwpvbmbuhlwS+dWvevt4RhoDNQCBjBapbS87Vue9FlTpcFoLf7PmbG02bXj5r17F4o0Czjbc4jAcCoxDY2Fpynmn6W1Vm/+ghKW+3xtxXVHrqD4wiDGwKAhkpsK656IsY''@;'; put 'put ''8ecZ0dwWgFs91R8S3muPTc97pgpXiXiiQLONpzaMBQKjFNjWcanj/f7gnixtUlF4V4rV6uWFe1eOMhRsDgIZJ7ChxTPF4MG/2Jhr4I9V60dIbmrUtVbqaGs8r3Ch2Wbc6QcFp5rA1raFJYYM1Ifz9htdRxzKhAWVnsZXUq0WyBcE4imwffvV9G/TDu+hhM2JHNend75rV3M32UPkwZtKG7yxzgua''@;'; put 'put ''bayFIT4IjFOgtj3f3eXrbnTbT70oHIoR+z1dLlclzCY1TlzYPe0FNljvqxvHttmZ62JGtIHZpIb+BE1fm5O5V3WHxItVMVxRC5pt2p9qUGA6CGxsLrpMIvkEJYpm1WMthq0xx3UrCuufSof6oAYQiKVA1Wvnq1k9ORcFDd99DjXnksixrFvLIdPf5FZyly8r3PcqxkhGOx9ottEWhXggECOBn+77''@;'; put 'put ''fFuu48yCwatbrL5uULxw5Yw978ZoSAgLAmklsLG+ZBJS+A8Vqq3k0siNLE6j7k5T6A8KBW2uyNt9JJrFQ7ONpibEAoEYCmxoKsjnyNyjUufAk5XWj5S8KUubsHBJ3k5/DIeG0CCQVgLrmoumEYRuJ5hcjzEhny6O/ZUS/Ivy/H0PResqF5ptWp1CUEw6C1gz4qxvzr9bobalQ+tkxP4IDQSXxuMh''@;'; put 'put ''j3T2hdoyS8CaOzm7teTCPv2Du13a5MGn/T/+Q1YIU5gvOdmEpcsKnz04Xh1otuMVhP1BII4C1m2wfnT02Wxt6vShw1Kk3a87UeXqi/b44pgODAUCKS9gzdRmU3zfIJLeyah2TmRBBg/5bcz9uOTGL1cU178x1oKh2Y5VDvYDgQQJ1LSVfM7kxnZK2CcaLkH0SYlFRUVhwzsJSg2GBYGUFVjXXOSS''@;'; put 'put ''wriZy9AKu5IzObKQgNn3YZaaW2swfu+qvIYPR1soNNvRisH2IJAEAlbD7Qkc3pttO/Xcoen49Z43s5SJN/ToorWqtMFMglQhBRBIKYFNB6afYRL6M4LxdylRB57+/+QPeYthdocpvX+o9LSNeG1paLYpdRpAsiDwscDa+kvO1dSsnQjj84a6CGmaWNIHMWG/qPTU/QPMQAAERi+wtiV/PpXs5wTj''@;'; put 'put ''6QRTOjSCtdylS52836d3bzntH5OeW7x4Bx9uBGi2wwnB5yCQxAIbWuZPMXnXkxpzFkam6Te6j7qVU+9Apv8P5bOa4j7xehKzQWogMCKBqvoSZleCi4Qw1mos6/zInaQU3MbcT5jE+Pny6Xte/ayg0GxHRA4bgUDyClS3FtrtbOr2gNn99cgshRQ8aPZ8MMl+9n2G7v/1zcV7DydvJZAZCCSngPVv''@;'; put 'put ''THB6FSZkLcb4tMgsTTHwENVjCOm3lRc0vHeiKqDZJuexhaxAYMQC9zy/cLrk+DFd+s882U7WbS8hRSu2KVeM5eGOEScDdT3IRAAAH41JREFUG4JAGgtsODDr8338H7/KUibNVKjN+ek/btEbDjVnWdAIvljp2d019HNotml8YkBp6S1wV8fcbLuJ1wSMnqUqdWSfqFrd9PYw6viQIuUPQjG3rZzR''@;'; put 'put ''CLNNpfdpAdXFWMB6PzeraeZ5Pt55f5Y6sfCEk2JI/GebMuHGpTOeGFwKE5ptjA8MhAeBWAhsbJx5viTiXkrYrE//dc1NjNBfpJS/IUTbDg9JxeIIQEwQQGh9c8E1GNF1BJMzIpuuQpzPkID/2vBkM9Bs4YwBgRQTqG4uylOY+2FD+D/xwIaUUtqYqz1g9PyGI/SHNcUt/SlWGqQLAiknUNt+mZsS''@;'; put 'put ''tj9k9uUNJi9Rv8q065bl73k6/Dtotil3aCHhTBaoaZtZ5A31bHequdOGOoRM7+s26r6lN+f9vVUXvK5nshHUDgLxFNjaOvcrXrP3gMYcgwvUa9T902MzLl1bhasENNt4Hg0YCwSiILC+saAoJHyfarSmNJ5UOF1aMaspqquURCFlCAECaS9wR8NX/mRXc78RLlRI8Q7Scqavytv5iVmm4Mo27U8F''@;'; put 'put ''KDAdBNa3eM4JGN11LnXK4BPHOvf3M2Jf79J81UvyDsGqP+lwoKGGlBLY1FxSYEr/XoXas6zEheScYmVphaf+/shCoNmm1KGFZDNRwHrqWPq6ntMU1+Batjr396nYXllZ3PhgJppAzSCQaIGBd28FOUCGzFGuEeeuY/kzvj709jHcRk70kYLxQWAEAtayelsOzl0nhLE6vLk1a40p+G1rZrauG0EI''@;'; put 'put ''2AQEQCAGAhubi9YSwm79uJkSH8ZK2YrCPSdcjg+ubGNwECAkCERLYENbSQk3fX9SqWNwwXiM6dYVBXXLo7WodbRyhTggkCkCtY2XTSYqPqgL3+c/brZ0e4Wn7pqTGUCzzZSzA+pMOYGB21SS7SSYlIWT7wu9/5aTuOevnv38X1OuIEgYBNJE4O62RZUh4d2IMR7oodw0OylBsyuLW16DZpsmBxnK''@;'; put 'put ''yByBmrbZl5nceIISZWCZL4MHfQqyfbty5oGdmaMAlYJAcglsap5dasrAU+GHoqzsFOpYc3P+rvWflSlc2SbXcYRsQGBAoOq1q9Wcvu4/CmkMLi7Ahfm42xa8dkneIQOYQAAE4i9g3W1ixPV7U4S+GR7detVH5Vkzymft+syVtaDZxv94wYggMKzAxpZZs0wReFqlDpe1sTU7FMaytNLTNDjX6rBB''@;'; put 'put ''YAMQAIGoCmxunXO1LgIPM6LarcBCcpNhbdkKz/5tww0EzXY4IfgcBBIgsPX5y/7DMP23h4fm0njTp6sXVpU2BBOQDgwJAhkvsP75klMUk+yRiH8ljKFSx06nP7D4+hH8u4Rmm/GnEAAkm8C2jssdAd1/QCBzYK5V61UfhPAvVxY1ViVbrpAPCGSKQHVraTVCoiJcL5bYiwiZXVFY9+JIDKDZjkQJ''@;'; put 'put ''tgGBOApsbi79IsfmQYzJwLJ5pggFKFGLVnoa/yeOacBQIAACHwnc3TLnLMqymgO89/QwCsHq4z1B45qq0gZzJFDQbEeiBNuAQBwFNrXOuklKuYVgQq1hQ6b3HY2p51d62gJxTAOGAgEQ+EhgS9v8X3EZujEMIkyzkzBaWulpfGWkSNBsRyoF24FAnATu71h8p1d//8fh4bgwn1hd3HJlnIaHYUAA''@;'; put 'put ''BIYI1LbOvTjAvc0K1RzWr62vdVSadevNBbs2jgYKmu1otGBbEIixgDU9Y237vBe41C+1hjJ40M+w4+qVxfXPxnhoCA8CIBAhYL2CN8nbv13ngcFXfUxpvCk0x/Rb8/b1jgYMmu1otGBbEIixwK+avjYBqeTlIO87wxrq+IIDquezZqaJcUoQHgQyVmBzW9k1XOiP4o++0uHC0BViLx/Jqz6RaNBs''@;'; put 'put ''M/Y0gsKTUWBbx9zsgC4PCWSe81Gz7VeofTY8HJWMRwtySmeBmvqSHKShRonk4Ks+jNie7HK5r6m6YIc+2tqh2Y5WDLYHgRgKWLeRH37pXx7vCvz9W9YwQgouhbxt9cxmWOEnhu4QGgQiBWrb5pebMrQl/HshzE5G1a+tKKw/4ao+wwlCsx1OCD4HgTgKWM3214eueaBfP/r98LAY0Y0VnrrBJfbi''@;'; put 'put ''mA4MBQIZKVDTNvdLCtGe07n3zEEAiR7p0/H3RvqqD9xGzshTB4pOJYHa9vnrTREabK42ln3P0hlPLUulGiBXEEhVgSpZRZwtu5+kRL08XINpBo8qijanorDxz2OtC65sxyoH+4FAjAS2tJf9kAtzcK5Vm+Les3T6zgUxGg7CggAIDBGobp0zQ+f9e4euIa1grfLmwj0144GCZjsePdgXBGIgsKW1''@;'; put 'put ''tCwkAjsZ0QYmO7dR9+tL83deEIOhICQIgECEwNa2+Y8bMnTF4FWtNN600ey88oJdfePBgmY7Hj3YFwRiIFDTVHx2SAYOqSwrxwqvm/6eLM197rL8/Z0xGA5CggAIfCRgveqjc/9DjKg261fWqj5EkhsqixsfHi8SNNvxCsL+IBBlgbs65maTQH87o7bzrNBcGCGGldKKogNtUR4KwoEACHwksK65''@;'; put 'put ''yKUS1iwRujCMohHXrpsKnl4UDSRottFQhBggEGWBjS0znyCYDLz+M/CD6S/7Cmb9rApXiSgPBeFAAAQQQrXtC1bq3L8uPCc5kqifYm3hcs+e1mgAQbONhiLEAIEoC2xuLVnCpbgXYzzwb5QRewfqwsXli3aFojwUhAOBjBeobl1wbsD8oM3O3JMG/75FdHuFp+6aaOFAs42WJMQBgSgKbG4u+qKP''@;'; put 'put ''+5rsSvZkK6w1uYWKtenlnn2wzF4UnSEUCFTVl7AJGruHI+OHYQ2Th95XmFo6nld9ImWh2cK5BgJJKLB9+9X06Jm995si9L1weobQnwkY2lVVpQ3BJEwZUgKBlBTY3DY/3+D9DfSjh6KsIihWypcX7tsazYKg2UZTE2KBQBQFNjYXfUci+SAlimaFtRaRV6ijuKKw7sUoDgOhQCBjBapeO19VP9Se''@;'; put 'put ''tinueYN/1HL9DYUiT6WnrSuaMNBso6kJsUAgigK17fluIbJ2CWR6Pr66De3KsRlXLck75I/iUBAKBDJSoKZlzhxd+HYq1DawVq2QpoER+eHKoqaHog0CzTbaohAPBKIosKHF8wOC6H0YE/Lx1W3WdysK9z0exWEgFAhknMDdB8smhri+GyMysHa09aPRrGcdft8/Xx+Dr2qg2WbcKQYFp5JAdWuh''@;'; put 'put ''XQj2FCFkbjjvgNF7jFHnojXFLR2pVAvkCgLJJLC1fd5yQ4RqEDr+xL+C7ZILlL+i6LkXYpEnNNtYqEJMEIiiwKam4osCon+PQ8mZMhgWo3aT4itumdFwNIpDQSgQyAiBmsaZp/plb4ddmTAtXDAj9j91BYLWA4hmLBCg2cZCFWKCQJQF1rd45mOJngo/LGWF183AQQ2r11XMbP6/KA8H4UAgrQXu''@;'; put 'put ''aV94a4D7fhmewIJz4xgj6vyKooaXYlU4NNtYyUJcEIiywNrGSx7RmOu7Q8MSRNtMJL63ytPwlygPB+FAIC0FNreV5vv0nqftyvEJLKz5jxmx3bKicN+4VvUZDgua7XBC8DkIJImA9XSyN6Q/NvQ1BSs1r975bo596ne6Zsxsgekck+RgQRpJKVD77GWa33Vsl0qdpeEEdTPwukPFheUFB8e1qs9w''@;'; put 'put ''BUOzHU4IPgeBJBKwGm7IINspVT+xvq3Bgz5GbNswtt1R6dkd1fcDk6h8SAUExiVQ3Vw2ExGzMRxESiEQxj9Y6Wn8zbgCj2BnaLYjQIJNQCCZBO6pL8nqpj2/cbDsq4fmJaWUAaP3Lac2cXlFYd2uZMoZcgGBRAtUty7IFdy3i1A6I5wLI9qTGtO+syRvZ8zfW4dmm+gzAMYHgTEIWDPfKB/afkAw''@;'; put 'put ''uUNjzuyhIbgwdEbtBzAS/7GisP7gGMLDLiCQdgKbmmduwISsChcmhNmpMvvXywv2tcejWGi28VCGMUAgRgJ3tl56ntd37NFcx5kXEkzZ0GGsW8uUqI+rSPl5eVHd2zFKAcKCQNILbG6aeyZTWL0uAmcPJivRI306/l6sXvWJRIFmm/SnCSQIAsMLrG2avlDnvm0udfKZkVvrpreHYHU7o+4fw/e5''@;'; put 'put ''w1vCFuklYC3q0XmWfmuA9/wyXJlhBo+oilYWzVV9hlODZjucEHwOAikisKHFM8VndG91sOxvMKLZItMO6L3/59BylvS6P2isuuB1PUXKgjRBYFwCNW2zLwuZvt+r9PjXLdazDYxoq5YX7q0eV+BR7gzNdpRgsDkIJLvAhgOzPi9o6CGF2GZF5mr9h8arH3s5S8m9cWVxS1y+q0p2L8gvvQXuPrjo''@;'; put 'put ''KZ37Lg9XyYXxFiXywkpPWyCelUOzjac2jAUCcRIYWDqsy75MCHPNJ6Z5/Gh8U+hBjNAfNKb9tLyg4b04pQXDgEBcBWray64yTP8j7KO1arkwDULoj+Lxqk9kodBs43roYTAQiK9AdWthLhdoFZfGTSp1uiNHD5p9XRgpv2M05xeri/Z8EN/sYDQQiJ1AbePMyZyxOonEl8OjDMx/7HItrrpgR9y/''@;'; put 'put ''RoFmG7tjDZFBIGkE1rUVfMmGs1eHzN5rGdHskYm5tFP+0qcfrRUO7T9XX7THlzSJQyIgMAYBKRHe3Dpzo0B4BcZ4YHlKJGQfxsrCiqL9bWMIOe5doNmOmxACgEDqCGxsKiomlNVKKS4Kr5E7NHtKtH0cyx+f/rec/1m8eAdPncogUxD4WKC2Zc45CnM0BHj/6eHfEkR+t8JT/51EOUGzTZQ8jAsC''@;'; put 'put ''CRKw1sjlgnzfpU29zW90nhKZBkYkoFLnw6bsq15e0PhmgtKEYUFgzAK17fPvM0VoSTiAyUPvY0WZv7qg6X/HHHScO0KzHScg7A4CqSpwV8fcbKYbtxGEVp+wBon8hCq/IF1KTfmiXaFUrRPyziyB2ta5F/vNnjqVOXMGr2qxUhnrVX2GU4ZmO5wQfA4CaSxgfbe1sdVzAcOOm00R+HdKmBpZrlOd''@;'; put 'put ''8qpf/3CrRMFH4v26RBrTQ2kxEPhtfYmtz679FxfBfw6H58J8267Y8pfl7++MwZAjDgnNdsRUsCEIpLfAxpZZsxCSGwgmgxO1hyu21vxUaVajQObPVhTsa05vCaguVQW2tJddGzL9vw2/6mPVQST94YqiugcSXRM020QfARgfBJJIwHo/19U7ZT7FZK2QfPCViaFNF0uyExP0s4rCxlcxRjKJ0odU''@;'; put 'put ''MlhgY0fJJBISexHGXw0zKMT+lCF6r02GOzLQbDP45ITSQeBkAlbTdfa4fyyEXK1QmzNyOylFn8ocWzEyaxJ9ew6OIghYAjVtc2+U0vhVWIMiJUQoLr45f29HMghBs02GowA5gECSCmxuL5saNPu3qcT+zROlaHLjQ4bpzyuLm+5O0hIgrQwQqHmh7GzG2W5DBM8dbLZY++Op72ZfkyyvsEGzzYAT''@;'; put 'put ''EUoEgfEIWKumvDPt7wv8oa7Nbvu0L5zgKpcr1NHKublmhWd/O9xaHo827DtagSpZRRzNu/7IqO1b4X2tVX0UwuZVFre8Ntp4sdoemm2sZCEuCKSZQFXHpQ5H0HZ50OzelKVOPi2yPFOE/Bipj1HCflLpqftHmpUP5SSpwOaWsukh4W1QqM1hpWjNf6xgddWKovraZEoZmm0yHQ3IBQRSQKCmviRH''@;'; put 'put ''Z97lXPJyG3PnRqasm4EjCrNVG6r6wK15+3pToCRIMUUFql67Wp3U3/+oLgJXhUsImt7/zeauoptKG7zJVBY022Q6GpALCKSQQHVr4WlevX+rnbkXUaJokan79e43XbapK7pdOfsSMfF7ClFCqmMUqGkrvVJK8cfw7tYrakjKG1YVtzw8xpAx2w2abcxoITAIZIbAXQcKPZSSaoLp9MFJ34eUzoi9''@;'; put 'put ''wRT6morCuhfg+9zMOCfiUWV164JcJAP7h77qw7D6uCm9302GV30iDaDZxuOsgDFAIM0FqupLmFPVvxYw+u7OUicOTv4eLptL01CIfadEbGVF4XPvpDkHlBcHgdrWuStMZNQMXtUK3s2wtmBF0f4X4jD8qIeAZjtqMtgBBEDgZAK17fnugIErJRKVKrW7Irfj3PjQruTcpwteU+nZ3QWSIDAWgS3t''@;'; put 'put ''877QFzxS5xzyh521qs+09yb9a7K86gNXtmM5srAPCIDAqAQ2HZh1hk92VmvUeZlC7Z+aFCNg9r3t0iYuDxiBxjXFLf2jCg4bZ7zA5tay+wQyh67qcxQryoJEruoz3EGBK9vhhOBzEACBMQusb/GcY4rQvRpxlJ1o/VxfqPNVhzK1/IzDuY3JekUy5uJhx5gIVLfOmaHzvj0qdWZbA0gpBCO21csL''@;'; put 'put ''91bHZMAoBYVmGyVICAMCIHBygXWNhd8ypO9eO8uZijH+xH93TBEKEET/QAX5Se/MsvercJUASxA4kYC1StXaxot32xT3vPDnhjD+n2qo+RWlDT3JrAbNNpmPDuQGAmkksK65yCWlvhwhdItKHZ/6PtdqugiRR20se2V5wa6+NCodSomSQO3BsplBw7+bEdVuheTCCGGEv7+quOXRKA0RszDQbGNG''@;'; put 'put ''C4FBAAROJHBX8/QLODfW2Zh7UeRVrpRSOtXJL+umd3VXMNRQVdpggiIIWAK17Ze5De6rxxhfEhZhxPbkKX93X5UKX0FAs4XzGARAIO4C1u3ADS1FxQih9YywgsgErCsWhdrrJZK3VRTWvRj3BGHApBOoaS27SUi9Nvzdv+SylxJlXrK+6hMJCM026U4pSAgEMkfAmm/ZFqT/kqVMWq1z3zmRlQvB''@;'; put 'put ''ezTmepibwXtXFNe/kTkyUOlQAWv1qb7g0eez1Elnhn9PMP3vFYV1304VKWi2qXKkIE8QSGOBDS/Pd6L+wBohQxUKtWdFlmpy/RgjyjpGnQ/A97lpfCKcoDTrLkjtwbkruTA2hD82TP9hhdkXVnoaX0kVDWi2qXKkIE8QyACBtU3Tz7Yz90qDB26gRFEjS87WTvlLd+hozcrCAw/A1I8ZcEIMLAo/''@;'; put 'put ''5xK/0b3bztyTwhUzzJaXF+5PqlV9hjsa0GyHE4LPQQAE4ipQJRFxNhdMx4TVEkxnRA4upeCU2Oq4aa5eObP+5bgmB4PFVaCqvsRmo96nVeYsCw8sBP8rsrEZq/IaPoxrMuMcDJrtOAFhdxAAgdgIDKyfG2DftSu5qw3hPzdyFOv7XIU4fi2wfk9FYQPMtxybw5DQqFta55UFeO8Tn5j6E9MbKwvr''@;'; put 'put ''7ktoYmMYHJrtGNBgFxAAgfgJHF8/138Tl0blidbPtb7PtTFnLTJC28pnNR2LX2YwUiwF7j5YNtFvBJ5mRBl8Wl2lzp1Ov3/x9aUNwViOHYvY0GxjoQoxQQAEoi5Q0zjz1BAO3E2wsogR1RY5QEDvPqxR11a7qdydbAuHRx0jAwJWt5QuFUjfTDBTrHIxwj6KtDnlnt3Pp2L50GxT8ahBziCQwQJ3''@;'; put 'put ''NE4vCxgfbM6xnfklggmNpFCw41UuzdtJD3uqfNGuUAZTpWzp1lUtF6iJS/NL4SIYsf+pK7/gylSdzhOabcqejpA4CGSugPUQla0p/3JTBu5zKBNOiZSQUgpT6B2a4vzBioL9/5u5UqlXufWqz9bnF67STe+dBFM2UIGUfZTSOcsL6g+lXkXHM4Zmm6pHDvIGARBAd3Vcmh3o7d+sKa5v2ljWhEgS''@;'; put 'put ''U4T8EuGn7dj+k/KiureBLPkFNjXPLjVlcKdCbQNLM3JhGip13Jrsq/oMJwvNdjgh+BwEQCDpBTa350/1Br13KTRrsUJtjsiEDR706dz/ikPN+WmW6m9bknfIn/RFZWCCtc9epuEJ/PeGDF0RLt9a1UchrsJKz+6uVCaBZpvKRw9yBwEQ+ITAna2XnodNtAYhfIXGjq93OvTHWuhAIvEGRuheVdof''@;'; put 'put ''6zSMD2Cxg+Q5iba2LSwJ8J5nGNEG/mDiwtQp1Zan4qs+karQbJPnPINMQAAEoiSwscVzltforrZT98ITXelaw1hXuypxPE0xXecKmX9OxddJosSVFGFqOhacinT9OYnEheGENJr1rN9mLF590R5fUiQ5jiSg2Y4DD3YFARBIbgFr+kck5BpMyHXqCeZcDmdPEH1bYvSIoOw3ldP3vAdTQcb/uFa3''@;'; put 'put ''lW5BUpSHR7ZW9dG0rG8sm/FsY/yzif6I0GyjbwoRQQAEkkjAerp17fMzclFQ/6lE6Lt2JXtwjt3INK2l/UwResfO3A8yibf7ZKhrTXFLfxKV85mpbOu4VEFogsPgklGT0n5FJ0qQY8NGpSqoNBnnPOgOrSl+Kqlqqmlb+DkbVVsCZu+0cIGMKDtQl/Iv6fL6FjTbVPlXBHmCAAiMW6Cm/qs5QUYW''@;'; put 'put ''S4GWKcx+Hv1owoQTBbZuMzOiee1swh6d+/YRotQhhPoSueqQtToS9WGNEFNBBtaoSs5lRPsCRuSrNuY+3eDGNJ17J+tmX5YuQkQiMfjfeOvr6ix1IpcSfTjBfvobhgh1h8y+twSnj9k4f+/7CWzAW9rm3cul/qPwcRCCd2GpzEmnua+h2Y77ny8EAAEQSDUB6wqwL+T6Ijd9twtszj7RNJCRNenc''@;'; put 'put ''3ysl8mVrU17RpdGgUdtugxvHOBPcFpKcaNkhtd8Zur70oVFPJfjb+n+3CaVLkURTuNqnmcLGpGEQQlm2RMY/SYRnEMIulFKc1hN8b6r1/inGmFKsapQo2nj8rT8qnGruMYU46rjQd0rM2xl5v3NJ3iFjPHFHum/twdKL/KH+BpU5c6x9pBRCpVlrluXv2pROt/Oh2Y70jIDtQAAE0lLAem0oYPCv''@;'; put 'put ''ZSmTvu03ugsUavvUeronK1zngT400Bwcerbt9KMqdbzNkfG+Yfr/RiR52RB6jySoH3MhqEKkkIIhRBWExCSKqWYI/iWHkjNBIvk5hm2nBY3eM3pC/3CZIjgwmQNGhI4mn2gcoJDp7861n9FkysCvHb7A3lg+OFZVX8Im2tTtQ1/14cJ8i9vsebfm7euNRj3JEgOabbIcCcgDBEAg4QLr22d9AZv8''@;'; put 'put ''KkbUqwwRPJ9gqhBMPzUlZMITPUkC1lWhRFJYyxBKJCUa+P9yYGuMMbb+9/gUl4RghMnx3534R0huutUp9Qb3387YsYOxuNKtaS+7yjSDj1LCBtYutr4zZ0hdVlHc8OtkNR5rXtBsxyoH+4EACKStgDUdJGooUR1KYI6N5SySUi7SuXfaeG/ZRgvMakoKcXQRjI5QqrXrPHCYmwGvIQIfcsTfZcT9''@;'; put 'put ''jkqFty+k9Q0dU3X4s4lunG5yfiYjyufsWm5xQO8rUqnttJPlZjVujblekdy4Mytk7IzWla61Vu0EGz3EpXl+eGyNZj2zdMYzl6fT7eNwbdBso3X2QxwQAIG0FahuLbRjk+UEcahAY7ZLNOK+pD/0/vkCmW6F2LMoUQauzKL1Y32Pago9YGMuL6XqEYbYC0He9xZC6GVpsne5U+2agLqNI/azzaoL''@;'; put 'put ''duhjHdd6UrumrdCGOT3VIPhrutFf7lCzP7V2sBXfutKVUh60kewbb/Y8+8pYxwzvt6Vt3o9MEfrV4NW1RP0atS+6qeC55vHGTsb9odkm41GBnEAABJJeYFvHpY5OTu1KCJ/GEf+8JORUjdpzGVJPVZnrLILIWbrpzzFkUDOFQax7uAgjoRG7oSouv5DysJDme7rpPyIx7xZcD5hC9yLMj1JC/mow''@;'; put 'put ''ckTpyQn6VD0Ur1muqjouddh86ldVpvxbkPdfdaIHx3Qe6Lez7EelKdeumLnv72M5UJuen3+GItB+U4S+EN7fetWnK2BeF69ax5L3ePaBZjsePdgXBEAABE4isH371fRvX+y1aQFKeSBANGbikMmkrhhcIdPMSs+OQDLjbW4qOjMgA9WUqJeFp08cmm/Q9Ha5tMm/lBI/OJrXoSyXI2f0buUydGM4''@;'; put 'put ''nmEGj6jUvqiiqOGlZDYZT27QbMejB/uCAAiAQJoLbGjxfJkRezUXoTknelgMY/Yywfhn3QHzmZFclVqv+vhC/QeGzl3NkFJR7tm3OZ0podmm89GF2kAABEAgSgJ3NU9fnKNN+7HP6L4Io08/xexUpjweNHo3Lffsaf2sIbe0z3+Mi9A/h7cRUrzjEO5Lls58pjtKqSZlGGi2SXlYICkQAAEQSD6B''@;'; put 'put ''qtfOV909U2/gUv8FJSw3MsOBp6Spcxsj4vZl+fs7Iz+vaSm7ypC+h4felsaILKnw1N+ffNVGNyNottH1hGggAAIgkPYCNU3FZ+vIvINgcuWJnsRmxPYGFuh2A/U9UelpG/hu+q6OudlKSK/HGF8cBlKw9kSnO/va8TxRnSrY0GxT5UhBniAAAiCQZALVzUV5PaEPfuXSJl8U2XSPvyok2jWSXY4I''@;'; put 'put ''elsI/dumDN1tTTU5UIZEfUgST2Vx/WtJVlZM0oFmGxNWCAoCIAACmSOwvrloZsjsfcCpTvxiZNVCCm5Xcv6uYtXdb3w4Mfw5Repjyz17r84UJWi2mXKkoU4QAAEQiKGA9X2u2mnfyIhyAyOa/bOGEoJ3U0qKKgob/xzDlJIqNDTbpDockAwIgAAIpK6ANSPVXe0FZxFTriWYXnGy6S0Voq64uWDv''@;'; put 'put ''ltStdPSZQ7MdvRnsAQIgAAIg8BkC1sQV7007fJ7A5E6CyTeGbqrz4OvI7vKk26o+w50Q0GyHE4LPQQAEQAAExiRgLaGXpfAbhDRvZ1SdTJGiE8wW3Fz4XMOYAqbwTtBsU/jgQeogAAIgkAoCtY0zJyNVu19KkhXktivXFD/Vnwp5RzNHaLbR1IRYIAACIAACIHACAWi2cFqAAAiAAAiAQIwFoNnG''@;'; put 'put ''GBjCgwAIgAAIgAA0WzgHQAAEQAAEQCDGAtBsYwwM4UEABEAABEAAmi2cAyAAAiAAAiAQYwFotjEGhvAgAAIgAAIg8P8BcbF+IvaVe9EAAAAASUVORK5CYII='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=select-table-png; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''iVBORw0KGgoAAAANSUhEUgAAAdsAAAGTCAYAAABgcbg1AAAAAXNSR0IArs4c6QAAIABJREFUeF7sXQecVNXVv+WVmdm+gKBgRY3GLxqlLNsQY4nGoFGDGhOjsVNEqiXFoKJIEdTYiCWxRlEESyAWBNkCKGpMYo0FQRTp26a89+69X+7Mzu7b2ZmdXnb2zC+R3Zl7zzn3f+7b/9xyzsEIXoAAIAAI''@;'; put 'put ''AAKAACCQVgRwWqWDcEAAEAAEAAFAABBA3ch2ycYrSpqdjKrEgYvaAbK4JuSPJvP6/3Ux3f9vKl4mc3eTZZTELr+ItfVoSwstiOsLhdbk67G9Sl1xyQvg1n2ModjZ5bppwAaVOvz/KsToprMnn4Tqi4ZnpDEnMtZY50QsmMQqK1y74Jij+dPeN3S8oX4I+iKIfbBvLM9FT+ON5p9oczwWnOJ9Duwy''@;'; put 'put ''48EwFltiwTw4/+1z30van4e2wPPgpSZWiO7/mfk8hGjU+8uj798Trw3QHhDIBAIdf8SXNI5zGq7yvzrVku8TTDVKVAUjQjHCGOMAKQuBhP+39pdAnWSNEepGekKIsEQopKT2V6BfZ7PgL+3v2PrHy++ddgYNxn57O3nLbn9ksANy4mVY+xgjjdWPKeq0E0mspS4/3lii0q7b3kb2acdPCG63O4Bd''@;'; put 'put ''AKcgrl3ADTPILoC09+wJFzkf4p2Ydrvi7Rtve2ybWz341P9R13FiTNpxD37WPu3lgNvHTBBCAcjlmKQfgvPePtcDHgg/90Nt6vrciK4PQ+dzFvwp3ocgMJs6n7Uu6mP1ZWzPSUB06PPck/+6zv1g/y7zyz9e+R/p1/Z574deyDe4fI+zgF6iMeH9zBJt55x71H2t8c4baA8IpBuBjgfxkbfO39+H''@;'; put 'put ''PJ95rL1aupWCfEAAEAAEUo1AodYfKaR4n0uO+8uOVMsGeYBAsgh0kO3ijecNFcL7kdvcqyYrFPoDAoAAIJBpBCTZEoP0u6zq2d2Z1g36AIFoCHSQ7QPvnXMYstiHbnOPEq0TfA4IAAKAQK4hIMnW8njLJ9T+Hc5tc805YE/nUeRD74w71OLmR0C2MCsAAUCgNyIgybaNsrKpxy7f2xvtB5vzG4GQ''@;'; put 'put ''bWTfx0C2+e1wGB0gkK8IANnmq2fzY1ydF6TePvsQA/FPgGzzw7EwCkCgryEAZNvXPN67xttBtg9uGHcwI+anPZEt46ZPIG4PN+kI7rFf2O8MeuiIVEggZKF3AZmgte34+4Mwgj93hPtQouo9yWXcMgViZrsT8hTj2EJoAlEncUUl2RoHfmyfw1KOdAcmWNHsoW7hfGFxn0eIQPhJ11e4EKmYxxJO''@;'; put 'put ''VbzjS3BKZr2b/ZnwuyXwH0ykXyhRI0ZLANlm3XdgQA8IdPzBuf+9nx2ELfTfnshWI/opFmL/kvKIYfBW3ddBvJrbhYVmyEBEpFIW01+9tiRcozGas+RixmhbECf5r0GcWPXKfzlWiY5VpBSVuoY8tcP9+bHhYBIyxhbT3zBFvGp5GZN4mIrV5Y++Thn29uALzd3pJ8OWrCNW/4WzK9axJ+H6HrtG''@;'; put 'put ''sz34ueHhGKGCgKz2f4KChWEShVFKNO2nnBv3RiJcl1q6wmDGTB9r2okNjRPdx32MCoelCK9idTwD0g9B2T35I3Rgdv/YP7P7Kls4pkJvpLlify6kHtlOqBpRGR4qBK+PpFuSbekXRDn33GfDfPlJhcUgAxBIHAHbme24A4QwP+95G7loyLSql7cmrg56xorAkg/GaYgPeuXrln+NCU+2nCMujpxe''@;'; put 'put ''W/9prDKhXXwILGo4sZIh31qCadgb+i6t/MGrhi+7Ij6p0DpRBO7ZcGI/g1k7gWwTRRD6ZROBDrK9960z96cYf9ET2apcG3x1zWvfZNPgvqJ78cYr1BKHvvKb5n+dGIlsGWKHX1vd+HlfwSTT47yjfswoga16gikNp7tA7f/IlSOWXpppu/qqPiDbvur5/Bh3XGSLEB0yreoNWNlmwPexkC3G1vem''@;'; put 'put ''Va37LAPm9EkVd647ocLiZkMksi3UBz1+xbBnft0nwcnCoBc2/rgcIe8uWNlmAXxQmTQCnRek1p89hFH+Zc/byEC2SSMeo4BYyJZwcdjU2vovYhQJzeJEAMg2TsDS3BzINs0Ag/i0ItB5Qapx3GCsmpuAbNOKd8zCJdkWadqKba3/PinSNjK38KEzj1/7ZcxCoWFcCATI1mogmITdRi5S933i8hFP''@;'; put 'put ''XxiXUGicMAJAtglDBx1zAIEOsn343TP2Mxn5Csg2B7yCEAKyzb4fgGyz7wO7BUC2ueUPsCY+BGy3kc/eVwi+Gcg2PgDT1RrINl3Ixi43Ktlqg568fPgzv4pdIrRMBgEg22TQg77ZRiAusoXbyJlzF5Bt5rCOpCkq2cI2ckadBGSbUbhBWYoRsN1GHjeIYnMLhP6kGOEExQHZJghcCrtFuyAFZ7Yp''@;'; put 'put ''BDsGUUC2MYAETXIWASDbHHVNLGRrEHPoDZXrN+XoEHq9WQsba0dyIRoh9Cc3XAlkmxt+ACsSQwDINjHc0t7LH/qj6Su/aY2c1ALINr1uWNBw/AiE2Dog2/TiHKt0INtYkYJ2uYiALc72jIGMkq9hGzk33BRLnC2QbXp9BWSbXnzjlQ5kGy9i0D6XEOiMs33/rH2wIbYC2eaGe4Bss++HhfVjhnNs''@;'; put 'put ''rY+0si3SBj52+fAlF2Xf0r5hAZBt3/Bzvo4SyDZHPQtkm33HANlm3wd2C4Bsc8sfYE18CADZxodXxloD2WYM6oiKgGyz7wMg29zyAViTOAJAtoljl9aeQLZphTcm4QvqaoYhguQ2ctgSe7CNHBOMKWsEK9uUQQmCsoAAkG0WQI9FJZBtLCiltw2QbXrxjVc6kG28iEH7XEKgg2wfeXfcAIOZ30C6''@;'; put 'put ''xtxwD5Bt9v0QC9ludYrLZx31rJF9a/PfAiDb/PdxPo8QyDZHvRsL2ULVn/Q6LxrZFmoDH/sGyDa9TrBJB7LNGNSgKA0IANmmAdRUiASyTQWKycmIRrbyzBZWtslhHE9vINt40IK2uYYAkG2ueaTdHiDb7Dtm0bra4xgXGyJdkIKVbWZ9BGSbWbxBW2oRALJNLZ4pkxZI16it+AaKx6cM03gFAdnG''@;'; put 'put ''i1h62wPZphdfkJ5eBGwl9sb2F4J+Cxek0gt4rNJjKUQAZ7axoplYu2hkW6QNeHSrE18BF6QSwzfeXkC28SIG7XMJgVCylbeR1cgG0iHTqt7YmksDyFdbgGyz71kg2+z7wG4BkG1u+QOsiQ8BINv48MpYa0m2xZr6929b/3NyOKVCcA4r2/S6A8g2vfjGK/2+upoyL6W7I/Ur1Pqj0i+Icu65z7J4''@;'; put 'put ''ZUN7QCDdCADZphvhBOXHQraEi8Om1tZ/kaAK6BYFASDb3JoisLLNLX+ANfEhAGQbH14Zaw1kmzGoIyqKRrZwGzmzPgKyzSzeoC21CADZphbPlEmTZFuoKS9/1/rBKZG2kWFlmzK4wwoCsk0vvvFKB7KNFzFon0sIANnmkjdstgDZZt8x0cgWbiNn1keSbE3WtEWluiucZjizzaw/QFt8CADZxodX''@;'; put 'put ''xlr7byPr9KVtLR/+GFa2GYO9i6JoZAvbyJn1y8LGynKT8S0qdQDZZhZ60JYCBIBsUwBiOkT4yValL21rA7JNB76xyIyWrhHINhYUU9emnWw3q9RRACvb1OEKkjKDAJBtZnCOW4sk2wKVvri97cNTYWUbN3wp6RCNbGEbOSUwxyxkTl1NGUGmXNkC2caMGjTMFQSAbHPFEyF2+M9sVfLCd20fnQZk''@;'; put 'put ''mx0nAdlmB/dIWmFlm1v+AGviQyA0N/JWyCAVH4Dpag1kmy5kY5cLZBs7VploCSvbTKAMOtKFAJBtupBNUm6AbPHy79o+/kmklS1kkEoS5CjdgWzTi2+80oFs40UM2ucSAkC2ueQNmy2zVo9RhpZ/74UdQLZZ8xCQbdagD6sYtpFzyx9gTXwIANnGh1fGWkuyPbTf4cu3t35yOqxsMwZ7F0VAttnB''@;'; put 'put ''PZJWINvc8gdYEx8CQLbx4ZWx1n6yLTts2Xb3pz8Fss0Y7EC22YE6Jq2wjRwTTNAoRxGA4vE56hgg2+w7Bla22feB3QJY2eaWP8Ca+BDoINv73z9rH2wIeRtZiSwC6tnGB2/irSXZHlJ22LKdsLJNHMQkewLZJglgirsD2aYYUBCXUQSAbDMKd+zK/Bekyg5/fof7k7GwjRw7bqlsCWSbSjSTlwVk''@;'; put 'put ''mzyGICF7CADZZg/7HjX7ybZ06NIdns/OALLNjpOAbLODeyStQLa55Q+wJj4EgGzjwytjrYFsMwZ1REXRyBZyI2fWR0C2mcUbtKUWgQ6yfXD9GQMZJV/DmW1qAU5UGpBtosilrl80si3SBj621Skun3XUs0bqtIIkWNnCHMhHBIBsc9SrsZCtQcyhN1Su35SjQ+j1ZkUj20J90OPfOPhlQLaZcTWs''@;'; put 'put ''bDODM2hJDwJAtunBNWmpQLZJQ5i0gKj1bIFsk8Y4HgEQZxsPWtA21xDoINt73xo3iGJzC2wj54aL/KE/5UOf29n22ZnhLBKCc1jZptdX0ci2SN33ia0udimsbNPrh6B0INvM4Axa0oMAkG16cE1aaiDO9pBnd7o//xmQbdJwJiQAyDYh2NLWCcg2bdCC4AwgAGSbAZATUSHJ9uDSQ5bs8nx+ViSy''@;'; put 'put ''FYgdMqO68atE5EOf6Ajc0Tj6WCH4WwTTsIleirRBT2518ktgZRsdy1S0ALJNBYogI1sIANlmC/koev1kW3LwM7u8X5wNZJsdJwHZZgf3SFqBbHPLH2BNfAgA2caHV8ZaS7I9qPTAv+32bPo5kG3GYO+iaF5D1Q8JIm/DyjY7+IdqDZCtsVmlzsJwFhVq/VHpF0Q599xnWW5YDFYAAp0IANnm6GyQ''@;'; put 'put ''ZHtgyYFP7fFuGgdkmx0nzV9fezRmfCPBihrOArgglVm/ANlmFm/QlloEOsh28caz9xWCb+7pNrLKtcFX17z2TWpNAGnhEAiQ7f5P7PFuPi8S2ZqcH3x9bcNmQDA9CMxvqPo/jPC7kcgW4mzTg3vP28iwss0s6qAtVQjERbZYc+w3dfgr36ZKOciJjIAk2/1Lhjze5N1yfiSyRRY+aPrxa7cAjulB''@;'; put 'put ''YGF99VEco/cirmy1AY9udeIr4IJUevAPlbpo9ZhSn+LerFFnEWwjZwZz0JI6BDrI9k/vnrGfyshXPa1sgWxTB3w0SbGsbC1qHHjdqA1fR5MFnyeGwIK1td8XlP+TRthGLlT7P3zFiKWXJSYdesWLQIBs2zZr1AVkGy940D7rCHSQ7cPvnrGfGYVsdQXvO3Hkmm1Zt7oPGBDLBSmMrQOmVa3b2gfg''@;'; put 'put ''yMoQo5Gtk5YvHl+x7KqsGNcHlQLZ9kGn59GQO6v+NI4bjFVzU08rWyDbzHl+8cYrVAe1nukpzhbINr3+8JMt4f+kJPwFKZ0W3TOx4uWr02sFSA8iIC9IYWR81dM2sukkRROPerYVUAMEcg2BuMgWITpkWtUbsJLKgBeXfDBO85qlS3e6P/1pOHWQrjH9Tmgn2/coUbRw2oBs0+8Du4ZYbiO3UVY2''@;'; put 'put ''9djlezNrGWgDBKIjYCtEcPYQRvmXPa9sC46dOHLFP6OLhRbJIrB44y/6l+oDlmxtef+E8GQrOBbqmGk1q+qS1QX9wyOwaMOPfsQs3z8i3kbWBj7WpO6dMPOYV9sAw/QjcMdbp+wvTPcXkeKeZZwtkG36/QAaEkMgLrLdt+ioeoLoToQRoVjjAnFLqsWIYowQQVj+gxFGol0u6W6Vv03Xl79T4GXr''@;'; put 'put ''3963vX1Qkuho2ylHdhYo8LtNFiLtfYOfoYCB/pdApJsdgf7C1sYvV4SDFiPuf18g/2D9P3PBROB3/z+c+xswgREWDAkufw7IE0LI/wsmm8i+8j2pnbQLxEIw4bWafrrLvckRybXl+gH/UTXnJyp2StAxwYpAwmYvlqBggiUSApF2QDDCfn/J//n/L/9DMMWys+wSwJi0YxEQYrdB4tn+RrvdkSef''@;'; put 'put ''HGg7PAGQbK8gtp3zpdu8CHg07EsgbvNNpz8k9n4/Ci4hbveHH2/5s+DyJb+pMCE448iyuLDkz1z6hSP5m8kopophef5vr2/LsZFGV6wP2uNUyl4XmPsoUUm7ukBCBakOYyx4YADEP4ElthjLH7EgBBGB/S9E/S7wf+b/3f84BeazdF7AT4Hf2ueo9GH3Z6LjHX/D0Gci+DwE5m1QVvfnMej/yF7t''@;'; put 'put ''/CSIe/BZCPrajr8EQ45Ytg08E50+CkriyD9RuPSDQEz+y2RDizHGkeGzuEm5YEV7PJvC5gqXcoBsY/EYtMkWArakFmfuTzH+oueqP9kyE/QCAoAAINAzAkC2MENyGQEg21z2DtgGCAACMSMAZBszVNAwCwjYklqMO0AI83NY2WbBC6ASEAAEkkYAyDZpCEFAGhEAsk0juCAaEAAEMocAkG3msAZN''@;'; put 'put ''8SMAZBs/ZtADEAAEchABINscdAqY1IEAkC1MBkAAEMgLBIBs88KNeTuIuMiWCybDGsKGwkRAKErbeETlrQ9sAwtGLwXeihRPGOwgwyMECkQYwSsVCHQJM8IYExoIu4n84sIyAyE/tmYhoVLhevcoNBVDyTsZgWejp2cCyDbvnJ5XA4rrNjJB6kU+3Po2FVhgRjkjnDFOBCUcMyywxhixsIqDv4ci''@;'; put 'put ''RU015G+MgSyiYIVbCbMuUwNxpdQMxPYGfw/qDr4faktou2helWMO10aOP/i+IsyOnxkPtGdq5+d+OwUWEqugPPlzwH6OiUooshRCFItyoZaVOYY83OTbemg4vfIP/P/+8MzmzFwqKPNhxjgjCsOW1UG+FhGYklDMw480aEcnbjxpPqAkGG8dkBrExD9eIrD8PbSN3To5l6L5JdLndl9EkxG0K2iL''@;'; put 'put ''oJRgRnVC1fM4YtdHIlyK9dWM+f5oMW8gX7hCOTM4U7WAz02DY+RASDE4tjQi5L/yfemXAAaB8dmxl/Mgmr3dnqsQnOPtn6n2dv+HezaCz4HdHvn8yGdFCKxoRDlOIPRUJHuheHymPAl6EkEgLrKFeraJQJxYH1mI4ODSoc/t8nx2Zniy5VxgetSMqjUfJ6YBekVDYNG62uMYF+sJpmGLxytEnz95''@;'; put 'put ''1KvXRpMDn6cGgXs2nNjPYNZOINvU4AlSMotAB9k+uD56ukYg28w5J0C2By/Z5fnirEhkyxA7/Nrqxs8zZ1Xf0nRHXc0xgoi3I6VrVIlzwdWj/jGzb6GSvdEubKwsNxnfrFJHQTgrYGWbPd+A5ugIdJDt/TFU/QGyjQ5oqlq0r2yX7vJ8dkYksuUWPnTm8Wu/TJVOkNMVgYWNo3/ABXsnEtnqSsFd''@;'; put 'put ''E0eumAK4ZQaBQCECcwuQbWbwBi2pRaCDbNuLx8sSe2G3zKRaINvUgt+TNEm2Q8sOf36H+5OxkcjWIObQGyrXb8qcVX1LUzSy1WjxnyZVvDS5b6GSvdEC2WYPe9CcPAK228hn7ysE/wrINnlQUyFBku0hZYct66nEnkDskBnVjV+lQh/I6I7A/PW1R2PGN0Zc2UI924xOm1hK7JV+QZRzz302UAwC''@;'; put 'put ''XoBADiEAZJtDzrCbIsn20H6HL9/e+snpkVa2QLbpdV7gzBZtjBRuAvVs04t/qHQg28ziDdpSiwCQbWrxTJk0SbaHlR/x4ndtH50WiWxhGzllcIcVBGSbXnzjlQ5kGy9i0D6XEAgl2809FSKAM9vMuW7xxivUIpW+uK3tw1OBbDOHu13TvIaqHxJE3o60stWUknsnjXxxUnas63ta4cy27/k8n0YM''@;'; put 'put ''ZJuj3pRkW6gpL3/X+sEpQLbZcdIdjaOPFYK/FYlsHUrJvROAbDPmHCDbjEENitKAAJBtGkBNhUhJtsWa+vdvW/9zMpBtKhCNX0Y0snUqxfeNH/nSxPglQ49EEACyTQQ16JMrCNgySI0bRLG5BbaRc8M1/m1kTVuxrfXfJwHZZscn0cjWoZTcP2HkixOyY13f0wpk2/d8nk8jBrLNUW8C2WbfMVHJ''@;'; put 'put ''Vi19YMKIF8Zn39K+YQGQbd/wc76OEsg2Rz0rybbEoa/8pvlfJ8LKNjtOas+NvCHimS2QbUYdA2SbUbhBWYoRALJNMaCpEgdkmyokE5cTjWydtHTx+IoXrkpcA/SMBwHIjRwPWtA21xCIi2wRokOmVb2xNdcGkY/2LPlgnMbFoBWwss2ed6OTbfni8RXLgGwz5CIg2wwBDWrSggCQbVpgTV5oLGQL''@;'; put 'put ''hQiSx7knCdHI1qWU/fmqkcuvTK8VID2IAJAtzIXejACQbY56z7+NrGkrvunhNjKQbXqdF5VstfIHrxq+7Ir0WgHSgWxhDuQDAkC2OerFWG4jA9mm13nRbiO7gGzT64AQ6bCyzSjcoCzFCNiKx58xkFHydU9xtnBmm2L0exAXS1ILINv0+iMa2TqV8ofGj1x2eXqtAOmwsoU5kA8IANnmqBeBbLPv''@;'; put 'put ''GCDb7PvAbgGsbHPLH2BNfAgA2caHV8ZaB8hWefnbHnIjw8o2ve4IkC3bEKmerUvt9/BVI56/LL1WgHRY2cIcyAcEgGxz1Iv+M1udvrSt5cMfhzNRCM6BbNPrvEDVH/xWJLJ1Kv0eGj/yedhGTq8bOqTDyjZDQIOatCAAZJsWWJMX2l5i76VtbUC2yaOZmIRAPVvxNqxsE8Mv1b2AbFONKMjLJAJA''@;'; put 'put ''tplEOw5dkmwLVPri9h7q2cLKNg5AE2g6f33t0ZjxjUC2CYCXhi5AtmkAFURmDIFQspVVf9TI2iGDVKY8469nq5IXvmv76DTYRs4U6l31LGwc/QMu2DuRt5HhNnImPQNkm0m0QVeqEQCyTTWiKZInydal4uU72j7+CZBtikCNU8zC+uqjOEbvAdnGCVyamgPZpglYEJsRBIBsMwJz/Er828gaWra9''@;'; put 'put ''9ZPTgWzjxy8VPW6vrz6KYvQexUrY3R6Is00FyrHLALKNHStomXsIANnmnk/8FvnJVhHPb3d/+lMg2+w4acHa2u8Lyv8JZJsd/EO1Atnmhh/AisQQALJNDLe095q1eowytOzw53e4PxkLZJt2uMMqmLtu1JGE0fcpCb+ydSnlD141EnIjZ8o7QLaZQhr0pAMBINt0oJoCmX6yLR26dIfnszOAbFMA''@;'; put 'put ''aAIigGwTAC2NXYBs0wguiE47AkC2aYc4MQVAtonhlspeCxorjxCcyJWtFk4ulNhLJdrRZQXIln2lUmdhuNaFWn9U+gVRzj33WRZdGrQABDKLAJBtZvGOWZsk20PKhz63s+2zM2FlGzNsKW04t776ewShfwHZphTWhIUB2SYMHXTMAQSAbHPACeFM8JNt2dBnd7o/+xmQbXacdEddzeEc839TooZd''@;'; put 'put ''2Tpp+eLxFcuuyo51fU/rnLqaMoKMzbCy7Xu+z4cRA9nmqBf9ZFt6yLM7PZ9HJFuDmENvqFy/KUeH0OvNmvdmxWGY0v9EIluHWvrAhBEvjO/1A+0lAwCy7SWOAjPDIgBkm6MTI3Bme8iSHZ7Pz4q0sgWyTa/z5jVUDcUCfUCJqofTBGSbXvxDpQPZZhZv0JZaBIBsU4tnyqRJsj249JAlu4BsU4Zp''@;'; put 'put ''vILmvznyYESVj4Bs40UuPe2BbNODK0jNDAJAtpnBOW4tAbI9eMkuzxewso0bvdR0mLNu1EEKwx9TosHKNjWQJiUFyDYp+KBzlhEAss2yAyKp95NtycHP7PJ+cTZsI2fHSQsaqg7kQnysEM0RdhtZKbl/wsgXJ2THur6nFci27/k8n0YMZJuj3gSyzb5j5q6uGIJV8t8eyPbe/pv0ayCuMzO+kmSL''@;'; put 'put ''kfGVRp1F4TRCnG1m/ABaEkMAyDYx3NLeC7aR0w5xh4L5759SoDdRl6X4NKEoBFsWVzkVFjW/bzHj5UhntrpScNfEkSumZM7Svq2pnWw3a5DUom9PhF46eiDbHHUckG36HDNLzCIDGxv7W0T7vqpovyCIVDf5vh3MhRVS3QcjhWgFGHc8Jl2MUnHBoqsrV0xLn6Ug2Y4AkC3Mh96MAJBtjnovFrIV''@;'; put 'put ''iB0yo7rxqxwdQs6ZJVewDq9yJEF4SpN326kq1QsjrVojGS+EQEHydaglD/T/Up8E28iZcTVsI2cGZ9CSHgQ6yPb+98/aBxvia7e5J2ztzoB6OmRa1Rtb02MKSLUjAGSbuvmwZMk4um1Ia42F2uZa3DhaIbozWemSdAv1gV9YyHPRxOEv1ycrD/pHRwDINjpG0CJ3EQCyzVHfANmmxjF3rj9xoEDo''@;'; put 'put ''JsNs/ZVKHQXhpDJuGVyYBhfMFIhzhBDGiGCMqUKxqkfKjSxlCcG/cinlV5q7jDWTf7LSlxqrQUo4BIBsYV70ZgTiIluVa4Ovrnntm9484N5ieyy3kWEbuWdv3t140rEM878IwY4JbSkJ1sfa9jiUwic8vj1rsa69r7jJXspNS7ZlRFWwohRZ1HdMobLPGCZ8Yy1hHBjuZjLjps+plrwqkHXzwK9K''@;'; put 'put ''34Nt5fQ8ZUC26cEVpGYGASDbzOAct5ZAIYKDnt7p/vKccJ2F4BzINjKsi9adeJLg1sMIowPsrSQxqsS5xme1PkQ8npUzf/yvtlids7BxzKEm89wskBgb7kasxX0ehRY8qDIyd1d19bZZeJZcJcMrRQgA2aYISBCTFQSAbLMCe3SlkmwPKjvo6d09kK3J+cHX1zZsji6tb7W4a/3JP6FIeczg7n7B''@;'; put 'put ''kQshuMHcnyjYcd3M2vqXkkFkwcYx/bHJrzTNthmaUlgaKstkPrdCtD9h7Jw3reqV3cnogr6dCADZwmzozQjERbZwQSpzrvaTbemBf9vt2fRzWNnGjvuC9cefbBqtz+hKYVkn0cpzWDzfYZDZE09Y0xq7tJ5bzq2v3k8j+u1MGBcQTGloa8Nq+8ipFF+2p/KN9bMwglVuksAD2SYJIHTPKgJAtlmF''@;'; put 'put ''P7LywAWpA5/a5dk0Dsg2NifdWXfSASbyrKFUOTjYw+I+N+Pm7TeMfueW2KTE32pufcUJROBFhGhH45CgXC4sU8H6S4yJm6fXrn4/funQI4gAkC3Mhd6MAJBtjnovcEHqwKd2eYFsY3HRotVjSlWXc4XB3JXB9gZra1Kx64LpNWtXxCIjmTYy/HZBfc3PKFXvQIh3kH1QpiRdgtSlCKM/TKsqLbZ5''@;'; put 'put ''AAAgAElEQVRa81kyuvpqXyDbvur5/Bh3XGQLt5Ez53Qg2/iwvqvxpMWWMC63ryyFYNOnV9cvjE9Scq3vXl9R7DHFbwUS4zXqKg6VhhHdoSqOuw2L3QfnufFhDWQbH17QOrcQiCuDFJBt5pwHZ7axY333+tOGGFbre4SQ/sFeBCkrzQI6buYxr8Z82zh2jdFb3rZhZD9ikt9hIa5UqcNl7yGQvK7F''@;'; put 'put ''vlKwfptZqDyVLRujjyK3WgTI1veVRl1QiCC3XAPWxIBAXGQLF6RiQDRFTRZvvEJ1EOPpXd4vI5bY4xY+dObxa79MkcpeK+bet8Yu8FnN04MD8FltTQrVTptZ3bgum4OSW8sL62sO8/K2R5xqcXWoLVwwC2H0jiL0q6+pWrURYySyaW+u617YWFluMGsTkG2uewrsC4dAXGSrENf+k0et/BqgTD8C''@;'; put 'put ''kmyd1Fqy0/P5z8Jpk3G2DLHDr61u/Dz91uSuhvsbTtmHaIXvtJm7hgStFEjc01K59ppcuQF894rTdKOkdSzByrxw57kyPpdifSm3xI3w5SnyXJNkazL2lQpVf3L3gQTLIiLQQbb3vjVuEMXm5p5yI2u04HuTKlZ8CnimH4G/rB7jUMuPXLa97cNTI5Etwnj49Kq176XfmtzVcO+Gn17rtZpuw5j4''@;'; put 'put ''Q284t7bpyDUsFzOdSbIQnNxkCvOicDVZiVB2CiJu1i3jiQm19XtyF/XsWCbjm5HP+pZgqoSzIN31bOVOxf31p5eqql7AEHYylfvtoCaxGLG82GG1jv/B3/fCDkV25keua42LbIv0fW8yedsGwRBjwuBCcMEx98vAmGKCBOaYYsyE/z2CSYd8jgPv2YMRWTs63QIUQ1CTMv3yBOvYZpPvhf4eCra0''@;'; put 'put ''Jx0O4Ah32+4T7bYREfiMCy4E7WzXxdYw/YPYBfs7qKvIQUsW7fR+vn94shXCoRT92RLGiwJhU7aRNhBBbBgFfEMxIXYZnAfw9L8oQkF/hfrMP44wfgu1J+ifoI9C/SX9HBxXt75+vIIzAaEgZhKvAM4MCYGEBJTL8bVjyhnFuu4qdpLia5t8X1cF5QqE751etWZSOvyeKplz6iqGOajraoH4ReFk''@;'; put 'put ''Fqj9PjKYd7XAbIVg5h7DP7dMRLDAghHCMcIEUyw4IfK9gJ86fSoZQH4elB18RoO/y2fVrjfcc+KfI1HmRk94yPkf6XP7c2Gfe/45jLAgRPqey1oPQm7fCMFMpCJEGTlYYPZYJLnpIFtJsA+v+3GZ0It/SDC9wKmU/rDJ+93BbdYOnTOG5RQlSOMurcwo1vfZLBD/3GLeNwXz/H2X1vodnMen6qnp''@;'; put 'put ''/XI6HrrFG8/eVyZV77nqT+8fcG8ZgUyKTzDtoQJTbxlJcnbK9IqBP8L+v92hf8AFxaozGNpqccOLED/n2poNaQ/1SW5Ugd5z6ytOxogsoFj9QWh8rvzcYqaJMJdfpOzkiG2/Br7odvkYoXjLBqZiLKmU0ZPPw+WmDupOJdkubBzn1LDnSIrJVYiQMa3Gd0Mo0WKuFmUwT7OmuN5xKcVz3KbvHbh5''@;'; put 'put ''nsoZ0jtlAdn2Tr+B1WEQ0GnhB8jdNiqVWaLSDfSsjcNcDrf6S0u4b3GpZQPD6bPX0E23Pb1ZfirIdvHGsS6DmbWaUjhhj3vzCeG2++PFyG3u3Vag9rvD4L7F19U0tMTbH9rnBwIdZPund8/YT2VkE6xs88OxfXEUClGfmTzq9fN749gXrB7WnynKHwTiF4eLzwXCje7VZMn2rvWnDEMCzfaxluOV''@;'; put 'put ''CKtYIYSwhOHh3PT5t7f9WwtYIVhVKVZ0SlStB0vXaFS5clLFKrj3Et2dedcilGzlNnLYywd5N3IYUK9HoDsB4SnTqtbc1ZsHtqiu5hC3aH3UQYsqg5e+7OMB0o3s3UTJVsa093PqZyKE7zC558BQDXJbW2CxmSCl3sfa1mJufc4x30QJbvVZVLiQ6vAq7oHYoocV6v0rTOY5lxJlcDj/eazmnU61''@;'; put 'put ''ZMaQLQOegFKMvflJjd92INv4MYMeOYJAKPFwbp0zo6bh+RwxLykz5jVUnUMEuRljfAQOueAmBQPpdoc3EbKVRFugmvMF4leGrmZN5nUrWFtrIu9fMNJWxroFLI8GnF71VI26rjKstiqVOgrs1spQL00p+QPnzfdNq1rnSWqiQOdegwCQba9xFRgaikA3smVW7Yzahvp8QWphY6XTYugSk3tnOdXi''@;'; put 'put ''juxYsNIN7+F4yXbJknF02wHNV/uslrn27V/GLUMg9IZA1k3X1WxYn8x8mrd+9GEKx7O5YOeEVobigr2iUP2iKaNWfZeMDujbOxAAsu0dfuqTVsqchh0DxzKODHcJWQklW8HF6ZkoOpBpZ8g0hQQZv8eYjFeI3u1GrB0HSRT+AJowq+HArebA3eVwW5yZHleq9cVDtv7sXg211zNk3Wi/4WxYbXsJ''@;'; put 'put ''Vq+5tnZdxBCjROyeW1d1Yalz37ltxs597f1dSnmDlzdPmDJq1b8SkQt9eg8CcZGtigseNkXbJ0gG2GLBhJDBtpbhDzYLhGe0x9wG4mv9zRD2x8v5fydcYN4Zeyvfw7a4hWD/UPj8f2fDvPziQ16YhIuBDcT8Be0MdpF2SZuCv3eMIyRGEHfEnYSTHWuKPVnOlCDcoY8iab9//FgQLCjFWEYTEhUT''@;'; put 'put ''SnXqGOCgJVe1GNs7CqB3HaoQKil4jTHPGxayWoRgjGNuII4shDmX8Yq43R/y54A/Om2VIZuiPUbT7oOOPu1+kp91vNfuq6A/pL+C/gzKCJ0Dof6Rc8L+nt0nQX8E5oycYkhI1Pw2SHukYv+HiDq1ogOKtIGTdns2l3T4E/Ebp1fVpa2UXrYf6wUNVQd6rNZHnUpJDWlP4mG3iSDFawnfrYbl/ZfA''@;'; put 'put ''FqNIUbhAJibM4DL2XYblYqRiQXSM/JGrCsEyNFsG7WKKBCYEyzhegQnvjCfiBAl7nLQMeu58ZgLPZjAeW/5MOMGcdvbHtudUzvQuNrOuz4/sJ9tLV/vnV/uzT5Di1KnjSB9r+3UkP8RDtgvX/WgsZ+ZThJDCoDyv1bxLxerlM2vfWpYOX8vzeIvwZylWj+v6DNBPKMFnTx616sN06AWZuYFAXGSL''@;'; put 'put ''Ncd+U4e/8m1umJ7/Vjz49nmPtJjbfhP2i4ZM10jxEdeOWvvf/Eci/AgXv33O023mzvOCn+qKa8HEkStn5jsec9cMPxkr2kKKlaPC1c8lSFnq4+7f3VD79hf5hMV9dTVlHkJ2hYtJluOMlWz9dY+xZyMlyoAgPh6zaYdGCsfOrK3fkE7MbltbO6BIcz1ucu+P7XqcStknHqvpymlVq99Mp36QnT0E''@;'; put 'put ''QuNsZbrGiLeRCVEGwflC5pz10Mbz/tJsbLs4EtkiCx80/fi1WzJnUW5pWtgwejrCeEHQqmJ90Evu4uZxkw9b6U+Ekc8vuQ06t6HyCs69tzmU4vLQsTJuGjotfNRQjd/OGL5mZz5gIWsW+xT35kixr7GS7cLGMa8hJE4KYmJxs0WGXF1Xsz4jl+vmv39KAW71LCWYdCFcxs0WlTgvmFK16uV88BeM''@;'; put 'put ''oSsCQLY5PCMeeuf8x5t93/4KyDa8k+6sr/6egdh7wXNMk/l2OEXZUZNHr9yRw25NqWm3bxxWItrQDZjQiVpIgn55SoI5+e5/pxJzplSuujulirMgLEC2bbLEXrc6wbGubBetO+lIw2p5235DWAh807SqNTdlMqdxoO4xflKl+k/tUBbq+7S0+XZOmVq1+pEsQAwq04hAaG7kLT2tbHUF7ztx5Jpt''@;'; put 'put ''abQHRNsQePjdX/2tybslbJIGWfXHosaB143a0GerMN2+8aQS1ef7AmPiX9nJg16FOs++ZtQrL/S1ibSwsfLQVl/T/YX6gI4VWxADmYjBYG0fOdTyK6ZWvtbQW7GR/kaeps3JkO3Cxh+9jhA7MYgBRqTBp9HTrx/+elOmcZn/ytEFPl3c7dLKL7HrNpi7xUFLxk2pev2VTNsE+tKHQAfZPrj+jIGM''@;'; put 'put ''kq+BbNMHdryS//LuhUv2eDePi7Syxdg6YFrVuq3xys2n9netO+VVJnwnB8ek0YKX+C4xbvJP8n8rOdSPizcOU3d58ckO7LoTYXxY6OfyprJGClZalF07vRdmMUp2ZXvn+lOPVjCpN1ibv/i8xQ2PQvSzp1Wt+Ue2nolZApGidTW/sph5v0odrqAdMsaXIHX+zNr6WdmyDfSmFoEOsr3//bP2wYbY''@;'; put 'put ''2hPZwgWp1IIfTdqj7168tKfi8UC2CN297uSLLWH8JYhlsWPQd8J0V15e8dKX0fDN18/9pETdN3BkXe5QispCx6lgRzOhdD73isW9acu9nWzlytZPlqGvaGe2d647ZQUXvtOC/VTifNdttYyJNVlFuuaLPH+/Ze0PLlexNk9XCjtv1wvOHbTkVkXBt185/CV3uvSD3MwgAGSbGZwT0vLYe5cu3+n5''@;'; put 'put ''7MxIK9u+vo0scZHF45lC/2Mwd8fNUodScu/2tuYps05YYyUEfJ50mt9QtQ9BZBbGdHzYOcTZZqroc00nfbQ3lIKT8cYYGV8lckHq7ndPG1CE+v97j3dzZ7EHgWdMq15zR664e279yOEm8/3dpZbuE7RJHgFggZebyLoo218KcgWn3moHkG0Oe+7xf1724g73f8dGItu+fhs5iMud6068iwtrcvB3''@;'; put 'put ''ih07VayfOGHUi30+UYBcNd2+duQJAvM5DqVgZLi5pCuFr3HGbxq4pXB9LufrbU/usVkNuQgWHFNPK9t71p9yssdqfSlYflAI8R1hzmOnjs6tUMbZb/5gNBfsyUJtwBA74TqUoqd9zJoEpfpy+A92FNM6yPaRd8cNMJj5DWwj544zgWxj88W9b40Z1OrzvatSrSM7j0YK3scEnTpx5Aq40Pc/GGet''@;'; put 'put ''HuMoUs1TOMJzKKHfD0VW1gLWSMEKxNlvp9Ss/iQ25DPbKhmyvXvdKeMt4bsvaDHBSuNeLztx1glrvJkdRXRtMnlJi2/HyyWO/f7P3tpjNr2tKfv8dGb1q9ujS4EWuYYAkG2ueaTdHpkg/ZCyw5btdH/aJTSg89su5ybnB19f27A5R4eQUbMWNv7oei6M2fb8sy6l7Am3pV4xrepZSPbe7g0ZKkS8''@;'; put 'put ''2uUOpXiaxb1dUgfKJgQpuzBBf2Zc3Dut6o2cunyXDNne/9bP/uqx9lzUQbZEnT9l1OvXZnSSxqFsbn31fhSTvxFMRtu7CSHe5YhcNLN6zX/iEAdNcwABINsccEI4EyTZHtrv8OXbWz85PdznMvQHyLYTGVn022O2vMyFOCH4LhfMctCSu3YWuX4766hnjRx1dVbMunP9iQOZZd7EkPHrcPmWObc2''@;'; put 'put ''YUJvL9TaHr9y+Ds5cTknGbK9e90p71jC15EmkSD11FwPrVnYWFnuY9Zynbpq7ZOk2bvtC5fe75xrqxv/mZXJA0oTQgDINiHY0t8JyDZ+jO+oqzmGY/EiJcoBwd6yFqlLLb7B7eB/7g2XgOIfdXI95q0dcTylzpsFEtXh8i07SNHrBvLMcyp711w5/J1AsfQsvST5mIx9lciZ7QNvn/WJ29x9uDTd''@;'; put 'put ''ZN42lWo/mlZV91aWhhKzWvkFQyX8MYLVLjtcPrN1K6GOC6+tbliTyWQcMRsODbshAGSbo5MiFrIViB0yo7rxqxwdQlbMmreuthpZ5lKF6p23Tv2W0FUqIlN3VdZ8MAvPkvUN4NWOwN0rTtON4ubTEca3EkyPCAVGfmGh1PkyYvyP02pWf5At4BIl23tXjylsIq1bHGpBqbTdYG3NRC/83rW9JEGP''@;'; put 'put ''zDbVZpiP6Erh2f6yHO0vWThBVwrGT6usfw4IN1uzMna9QLaxY5XRlkC2icN9x9raEwtdAx9tM3YMtktRifNbxn0PKJTcO6li1a7ENeRnT3mei930dwjjCaEFz+WIMSLfUarfYTHxcDZuxSYa+iP7KYhvolT1p3lkzGpSVcf3elue9/n11fMIpjPshRjkFweVOK+ZVlX3KBBubj+XQLY56h8/2ZYd''@;'; put 'put ''vny7O/KZLaxsIztvXn11rcGan3Gp5d0uASGENmrUOVmlOzZme2s0F6ffvIaqoR6j6V6XWjImGCpjt9Ni3o8Ltf4zrF389Uxm6kqUbGWaR+Jxf6VQ1Z8wwmSe1gKtaNikXphF69Y3j1mgUdckSjQ96BOZ3tFFy6bs9hlP5eLt6lyc49mwyVaIYGx/Iei3EPqTDTd01xkg28OWbe/hNrJBzKE3VK7f''@;'; put 'put ''lBsW554V/j/OwnhRU5w1odbJwvQWN9c4ievKydVvfJ571mffornrRh3JTPOvOi0YLgvLhlrkNlveK9RKxu8ddfzbmdiaT5RsFzZWOov0A95p8W07MjgGFevnX1356jPZRzl+CxY21pxqMnOpPb2jlCK4eMxCbBIkv4gf00z0iItsVa4NvrrmtW8yYVhf1wFkm5oZIONLncQ9SxAxIVyaP6/VvLtI''@;'; put 'put ''22+OT2n7a76UoksNcgEpsz74vubYVXARE6Ys5dcvXP1cBy15EjE0a1L1irTeHwiQrU9W/Yk7XeO9G8Zu9LHmYUFsnErJHYRsvaG37mzMqTvuVILUboRbqPZ7TODmyVdmobBCKuddPsoCss1RrwLZptYxc+urizSiPyIQ+3m3VS4Swm3s/tqllM+cXrO2V652UotWd2nyEpW7aPdlQrBbdaWgI39v''@;'; put 'put ''sGXgEpXjHiTU29J1npsM2T688fyHmoxvLw3aq9OiOuRu/cnEE9a0phu7dMmf82blsZSI5QrVO27fy9pXBKsNXDjPn1b1ck7FSacLh94iF8g2Rz0VC9lyCx868/i1fTbhfryukxVWHHUjLmDImu1Uig8M7c8FZw6l9BnBfLdcXfXqx/HK7wvtb68bdoDbar6nVN+vWxpRWT/XYr7/FjnKp0wYsXJl''@;'; put 'put ''qvFoJ9tNiZTYu2v9KXMY910ftKnUMXiTz+OpGF+9rFdnY7q9fsRRXqPphWLHvkPteKvE1aAI8avxlf+AY6ZUT8QE5QHZJghcursB2aYP4Vkbh7mcXvXXgrM/aIprv1BNcpWmK8V/xZjPvbriVfgyEwKQ/0tLw4gjBeMP6WrhqO5fWphlWG3vF6r9Lp9c9fp7qfJkMmS76O0TD7G87vcp1QqlPTIp''@;'; put 'put ''jK4UXDKp4h+Ppsq+bMlZ2Fg5GCP9BYFExza5tAUj/AEl9NzJo1Z9mC3bQG8nAnGRLUJ0SK6lcMtXZwLZpt+zcmtZRcpVjJvXUUXtF6pRJj/QqPNBhavz4a5Cd38EznOLLzV5240FWvmg0BYW93k0WvioMH03Tx1d922yHpVki4T3y3Db2FJ2T4UIAoXa8bsurdSf2EK+CtT+j/t2uC/P5I3qZDGI''@;'; put 'put ''1P/2uuoDkDCWa4rrWHsbjRa8L5hx4dVVr/87XbpBbmwIhJKtLESgRu4KZBsbrMm3ArJNHsNYJcx7s+IwQfFslejnhuujEOcnBKM5ptv7wtQT1uyNVW5faXfb2toBCrb+KBC/OGx8rkDfKIrjLmooD06o/fueRHFJhmylzoWNJxxvce8/FKI55O8GczcV6gPOmDRyxdpEbcqlfrKkomG1vexUS0fY''@;'; put 'put ''7fKaLd8UqCW/vqZq9apcsrev2QJkm6MeX7zxCrVAwc9vd38csRABnNmm1nkL64+vdVt7H3FppYeGSubCMglW/q0QZY6u7H2ht95iTS1indJkKb95DRUVBbT8WkO4zwqnp1Qf8n6LueM+r+X423U1L7bEa4u/eDxt+VJTCv2ZoEJf0YrHL1kyjm4Zsv0NjFBHcn+M6DqdGadPqK1P+EtAvONIZ/u7''@;'; put 'put ''19YO8GH2OKXqj+16MCLfcI4un16zekU69YPsyAgA2ebo7ACyzY5jAreWtUkW902npPvWsixFV6D2W2IS67YpI/6Rk6XosoNcQOvijcPUZsP5UwWpCwTih4SzxamUreKI3bBjxLB34onPTZZspS3zG2pPR4I/T4miBW1TSeEtuzxtN886YY2VTexSpVveSXC51UcURT/PLtNjNu8s0EovnVK5+sVU''@;'; put 'put ''6QI5sSMAZBs7VhltCWSbUbi7KVuwcUx/Byu402e1/BJ3pqPtaOezWvc4lJLHKOELJo9a83V2rc097TJrE/X6rtAV19RwpfwU7GhSqf6UwT2Lrhn12n9jGYEkWw9t/sKhFJWFax9tZSv7yHPmgj1lL1CinBqUQZDahAm96JpRr7wQix29oY0/vpx6F1GqXEYwVYI2y3zKBWr5dIe69ynYncmsJ4Fs''@;'; put 'put ''M4t3zNr8ZKuhZT2V2INt5JjhTKjhXY0/qjK4dzXBihaOcKVQhegfC85vcWjO5VcOfyknStElNNg0dfKX8mPGHy1uXKhSh/8msP2FEf1OUxx3Gm3uB6Kdh8vczdwtvkyGbKXuRevGHNRm7Gq0p/JsNXZtKdIH/Xhq5esfpQmKjIuVuwx7vcoMjMiNwXNqaYT/tj0puG23z5wH6R0z5xYg28xhHZcm''@;'; put 'put ''INu44EpL4/nra49GFnsrmB9YyIPJMKtc+cerRB/0ktdqWqyre9+EFUN3d8ytrxjloEVTfax1bLj6uaX64Hfcxt4HsNf9dKREEwGyRV86lMKEV7ZBy+bVVVxDiLrAvupzKCX/NLn3smtGvfpOWiZUloTOqRs5Dgv2Z/tZNxfMdKjFf24zmm6A9I6ZcQyQbWZwjlsLkG3ckKW8w/y1tUcjwt6mRO04''@;'; put 'put ''35NKIpGuPM91KcVPCSxmQ3xueHfMq6s8lSNztkqcP8SY0NBWLrV8tSV8s/hOsSE0JEduI3tp66ZEQn9C9ciMWE2urQ861eILCKYddhBMP6aEXnh1xWsbUz6hsijwtrXDqy3uW1KolXeJK3epZSuYcF81ceSrW7JoXp9QDWSbo24Gss2+Y9qL0b9lv0wTtCoS4crP3eaebcXqgFm+AvoEFKzv7kdJ''@;'; put 'put ''dN7SljNUpM0TiB0U2kJ+adGJ62VMldm7R1b+O3iJyn9BSmnbnEhu5HCzqf38djbGZBqxEX+bsfubArXsN9Oq176a/VmYOgvmvzn6YA/f+UqhPuAwu1ST+T4qpCVnTKx65bPUaQNJoQgA2ebonJBk61Lx8h1tH/8knIkyAw6c2abXefMaqn6IBZZkGzb2XCUFzxJC93cbu44LXf1Kywim/yGC3mah''@;'; put 'put ''1uXTqtZ50mtt75Mu42YpMq5ngl8ZbrWKEd2hE+c9mJkPjK9+dbskW0Nxb1Gps9vZrxx9LBekQlGSF4kUtPsBh1b8S/uWso+5tzvU4omDN5cvO/fcZ1nvQze8xTL5hdfcubrYMSjkpjj+r44LzpxY+fe8ObPONZ8B2eaaR9rtAbLNvmPmras9jnC+nuDwZIuRdotVgOeqHlbV6t31gFMtOghj0q0U''@;'; put 'put ''ncmNtS5SNmlX5cgP4gl1yT4CmbFgTl3NIaa1589OtXR0uC82QvAtFKvzKKfPe1DLfxWiu8JZlgjZBuXMr6++FCFxr71+rzyLV4h6a5MPz8mXsCA5XpnfGmN9uUrULtmmvGbT9kLHwJ9PrnilLjOe71tagGxz1N+SbAtVvPw7WNlmzUML6mqGISLWRSJbhejzJ4969VppoIxtLPDpl3HOfqtSx8BQ''@;'; put 'put ''o+WFFJ0W/oWZ1q1Tal/fnLVB5bDiW9cMPxkTMVujjmPDYV7mOODjPd7NR0QaQjJkK2XOWTv8HJU67iOY7mPX4VTKHm013dfOrH61VxctsI9J1vi1OH7wf2fU59u30DlnpkacF+2urH4Gvhim9mEJIVvyjdvcC+kaU4txQtKAbBOCLaWdFjQcPwIh1mjfXrQrUIjrjsmjVs6wv3fv6jGFbYpnASHa''@;'; put 'put ''ZfY/YsE2/tWD1n8WwuqTk0etbE6pwXkibEHjmCNMq/kxjRbKovUdf6OCw4t0Xp4s2Ur5i+pOPMQjmt5wKAVdqkK5jb3/LHaUjc23mOpF68b8knP2mH1HRgjBkeD3t1SfNBkIN3UPFZBt6rBMqaQA2ZIXvmv76LRwguHMNqVwhxW2sLF2JBeiISLZUufCyRX/mB6u89z66u8RhG6jRDk79HNZik7B''@;'; put 'put ''2gcCidlTKldB/dwIrpzXUHWOgtQ5CKMuF3oika4kW4GaSpMtnC7jcAlSn2HCGGk3jSDyscXMX82orc+r0KAFDTUXFqgD7vRYu8s7xyuERov+wgWfCl8KU/O3Bsg2NTimXAqQbcohjVvgnXUnVFjErI9EtiouWHR15YppkQTLsNyFDWMq2sydjxTq/Y7sRrqCcyZYg0pdV+ZTMoW4ge6hg7zAVKAZ''@;'; put 'put ''VzDmuylSTuTgSleSbRtlZVOPXZ50sQiZAUvx+p4nhPzIbl6rsXOLQy//2bWVde+mcpzZlrWw4YQzfaz1L7ri6hLD7FCKnkY+MSGZAhLZHluu6AeyzRVPhNgBZJt9x9y57oQKi0cmW10puGviyBVTolkqCcOleH4tELo53HmuP9SFFv3FomjOdIh3jLDLUFluMH4jRuLScLeRJeE6lCKkUMeRVw5f''@;'; put 'put ''+nE0n8TyuTwS8GniPoTRhfb2XrNlm6o4LptZ3fj3WOT0ljYLGqpGmMz3nK4UHmC3WaHOemyy86DMZHKeBLJNDr+09QayTRu0MQuORrYaLf7TpIqXJscqUK6WkLt5Dsb41+FK0bnN3d8WaANuobjtycmjNsB5bgiwcqdg0brKoV7T95hDLaoMh7vgfLOuFV04ccSKOoyRiNU3kdr5V9aqeSMlyg32''@;'; put 'put ''NibzuQlRp8ysrnswWR251H9RXc0hzWz36iJtQBfCJUh5jxDtjMmjVkIe8AQdBmSbIHDp7gZkm26Eo8uPRrZOUnzf+FEvTYwuqWuLhY2VP2CczAp3nssFswii/8IIz3HpLVDKLwy4MimGUdx8OsZUfnHpKAYfbBpMisE4nzWtZvUH8fontL2/fGB9xXiB+O32hBoyNEjFrtl7q16/bRZGPFk9udJ/''@;'; put 'put ''YWPloUIoz2BMjrPb5KBF7wsufgGxuIl5Csg2MdzS3gvINu0QR1UQjWwdaukDE0a8MD6qoDANZJL4Fl9BpdvYdV+h3v+o0CaMWyYTxlqXWjx58qhVHyaiI9/7zH/llAJc4LnC4K2/cyjF/ULHazJPq0KcfyTw2c8AACAASURBVOZIn5ts2I6fcNeOOMtC5gNOtWRAUJescyyPAEwubphW9crufMHc''@;'; put 'put ''X2GJtKx2qIU/7Lqi93xeqAwYC4Qbv6fjIluVa4Nh3z5+kBPp4U/XqNIXt7d92FEKzC4HbiMngmp8faKRrVMpf2j8yGWXxye1a2t5LuhRzcuZsK4Ld55rWK17VVLwEOFi4dTRdd8moytf+857a8wgjeHbuGAXI9Q9VMhixhcqdczVfOKpSEUOYsVmfsPISsMyn3OqxV1yDCMkVmHNeeHU4a/kjY9k''@;'; put 'put ''hi+d4ucRImPs+BiWZ7Ouui6dWrnm9Vhxg3YIAdnm6CyQZFuk0he3AdlmzUPRyLZA7f/IlSOWXpoKA2WoEOe+3xNMfhbuApAs5Yc4noMIWQ6hGOERv72x8seIWbepxHlsaHyu3ClwaaVrOOM3DdxSuD6ZFIxz6o4bZjLvC4XagMF2SwjSGpmCz8+nS25z66uLFEwfxxifaR+rz2prcmllF1wz6rUV''@;'; put 'put ''qZj/fUEGkG2OejkWsjWIOfSGyvWbcnQIvd6saGRbpA149PLhz12cyoEurK8ejqljDuPGCaFJMeSWJUL0HYrobJfe/CqU8uuOvMyMxDgZS4l2O0L84NAWFve5FaQvJ4jcPKVm9SeJ+u62upGHE4SWa9TZJaSLYPVdSsjP86nqk8RUcOVuhNEl9uQXBnM3O9XSSXsqXnsyn86sE50T0foB2UZDKEuf''@;'; put 'put ''A9lmCXib2mhJLQr1QY9/c9yRF6c6y468AetUPL9g3JjlUIu73AqV5skLQE61bAli1pxdPuOzfMrbmyqv3722doCbmDcIbl6sh6l/SwTdqSj6Imqxh2SRg0T03vLmDw8zrZalpc4hP7D3V6nrPcLJL/PtXPP2N0dcjwj+nWYrBGFxn0dXim/cU1Ry96yjnjUSwbGv9Okg27vfHTdAY8bWntI1wplt''@;'; put 'put ''5qbFkg/GaZbV/4WetpEFYofMqG78KnNW9S1N0ci2SBv05FYnvyRdf2TkFh4ldCLi/DpCaGko+l6rZZdTKXuCK/SOfNq6TOUsk1VudKLcZHDvuHDhVoybnyvUdYfmtR5P5Dx3YWNlucXE05RoJ9m3rg3m+dxJS399TdWrjakcT7Zl3VF//Ale1vSM/ZKYtIlztgQ5lIkzhq/ZmW0bc1U/kG2OegbI''@;'; put 'put ''NvuOiZYbudgx+Kli3fzNuWn+Rj+voWooQmIOEuinCtGcocioxPkpFmQ+9rqfToQwso90+i2YVz+y1qX0m+yxmsbaK/sENReq/RpazZ33NfvI87NOWOONx6LbNw4r0c3Suzg3L8QYd1R9Uolzq8HarmmpqluWT9us89bVVmtCeY4jPqgrTniNrqBfTBy5Zls8+PWVtkC2OeppINvsO2Zh/ZjhHFvr''@;'; put 'put ''IqVrLNH3e7rIYV2UbrINIiHPcxXqmm9wb224IgcY4XcQJn9o8vLXYGs5/PxZ2Hj8WYxbswkmR4SWQ2TcMhSivyy4uLG5+viP4jke8Ce/UIz7CKEX2eV6rZY9Gim8rLV67fJ8ItwFddU1hvAsdShFXSokKdixSuXigkS35rP/1KfPAiDb9GGblGRJtobV/4WeQn9gGzkpiKN2jka2xfrgZ4od5q8z''@;'; put 'put ''RbbSYBmfu9en/4pbvlt0tbDLbVj/dp6wTIdS8rTB2M3NlZVfxEMYUQHJkwYLVo/pLxTrUodaNNXk7m7lEAlSdxGCHjF9xp+mH792SzzDXlBf/VuO+B8UojmC/QhWWi1mzDngm0Fzk7kFHY8dmWh725qRlUWO8sUm93Q5s3YqZXXMbL5wUvUbcMRlcwSQbSZmZQI6JNmaVr/lPVX9AbJNANg4ukSr''@;'; put 'put ''ZyvJ1l2856LJh630xSE2JU3lSqpYF1fL+rnhznMNq22vQgsf1hibO3l03Y6UKM0zIQsbfzSYYHSLxX2/Clc/V3C2WRB6a6sPPxLPTsEddTW/Zth6QCF61y1/IWY3V639Yz6tcO+oqzkcEbIUY/x/9ukhb2UjC50FtZs7UQGyzdE/IAGyLV/WU/F4CP1Jr/MWras9jnG+PlLx+BJ98NNtxXsuzgbZ''@;'; put 'put ''dmwtN1Yeagk8nyI6FmNCQxHRaMHnnLGbd1dWPgGr3PDzZX7dqJM4EvMVoh8Trn6uTgpf93HP76ZWvvF2rPmW59QNm0CxuiCUcDXs/MNOr3dBvOfC6Z3pyUlf0Fh5BGfiWYXqXQhXo4Xvc8EvmDxqJWRAQ7akFnAbObkJl+re/gxSGlq2vfWT08PJlhmkgGxTjXpXeXc0jj5WCLYhEtnKC1Luoj2X''@;'; put 'put ''ZJNsgxbPbzi+ss27fXGxc58uW3qBz4VAiL7nIPpvJoz6x7/Si1rvlD7rg+9rzj3FlzDuu9WhFNvqugbGI3NWO2jJY6Zi/T7WLFG3r/3hmQhrj2vUWdSJihA6Lb631SS/va7mxZbeiVZ3qwPZpsgyhPDx9k85Y18rquMXU0a9Xp8vY010HLCyTRS5NPeTZOui7Lkdns/OiES2sI2cXifMX197NGZ8''@;'; put 'put ''YySylXG23uLmy3OBbCUSswQihetqT7ZM78Oa6gpznssZ50adQp2XT6ta81l60eud0mX6TLdmTWTc9zt70YHglxZ5iYpSxz2GSm65fvjrTdFGKW+Su307Xyl27Ds02FYIIQzuqVedBWfnU6hMoCQh+ivC4hw7LvJIQ1eLL5ha+cbKaHjl8+dxkS3WHPvF+q0un0HLxNgk2TpV9uzOts+6pEnrfGA5''@;'; put 'put ''Nzk/+Prahs2ZsKcv6pjfUPV/GOF3I5FtgTrgkW9deHy64mwTxVz+0WtWWmZjRC7pThgIecymnQVq/5s4ok/lU/L8RPEK10+eRbZae+4p0vuf3P1zIQzL+6mmF10+rWJVXTS9t7x59MGG1bqizLn/Efa2Oil43ce9F0+remNrNBm95fNZq8coDsWzWKOOS7oQLnM360rhb6ZWrn6+t4wl1XYC2aYa''@;'; put 'put ''0RTJ869sFb50h/u/YyOtbIFsUwR2BDELG0f/gAv2TiSydWnlD25zKpNyjWyDw7lnw4n9DMu6B2F0fugQueCszdy1tUQdNJvQtmegfm73SSCJo0ixjjKEsVhXnBWhLRg3DbfV9E+HUjrxupqGjT3NxtvW1g5gfO8LBVp5lzq8e73ffliuDT47mdSR6X0K4pe+ZMk4umm/r6cihG6x38o2mbdNU1w3''@;'; put 'put ''Tq1cvTB+qb2/RwfZ3v/+Wftgg3/dUwYpWNlmzuEBskVLd7g/iUi2sI2cXn9E20Z2KCX3Thj54qT0WpG89LsaTzix1dz7oFMt7pYrWJ5FCiHeVhXHVVNGrYLz3DBwy5vfuuK5wGAtfwwtqi6by5SFKnb+1RDG7OtqGr6J5DFJuG2+LS/2KzhwlL2N12j9QNOKfj6jas3HyXs7NyTIkoRzGyp/gYT1''@;'; put 'put ''gH13RX7J0xTXXT6HuHHmMa+25Ya1mbEiLrJViGv/yaNWfp0Z0/q2lrv/e5rez3PQi9+1fnhKpJUts/AR1x6/9r99G6n0jT4QZ2s2RlrZynq221ubro4nLCR91vYsWdYnJbo+zWPtvlRTXCHl4RAymLvFoZQ8TjhfOLn6jc+zZWcu65XpMzEWFxtW2+9camm3+Fyf1bpHIY4HsKkunHFC+LSF8185''@;'; put 'put ''ugC5Cv5KqfZz+1jbjF1bC7SyX06rqnszlzGI17YFDaNHK8TxLBe+juQXQgiOkHhdV7QLJlWs2hWvzN7aPi6ydan9xpm89R1BKUG+QGihhVW/DEp4h6wgGBbu/l6gbaBPtl7UDG+XtIepRATtCrazvxePzQo3RU8BmLpNmEVU7Nen6YgJUxTj0tICvd8jW1v+8/3wZCu4QhxTEBb/wIxxO9bh8I3k''@;'; put 'put ''i2jjybavotkX7XPGzQ5/yraKICL4nv9nDXd8LkzWnmov4Bmd0rEeq2V+uGxN8vNS5+B6w/BcyxjbYREPZlzOna4et+MXaks426VNoe/bbfQ/c7YxKX6dnS/L9hzqluIfD1YUji2LW5wIrtMinSsTLGFexYSvI7VgUIIkDJUWPEKZuAPq54afXfMbqvZhzLgOYXx5uDNxWT+XEm2BJawnrqtp6Hbj''@;'; put 'put ''+O4Vp+m+kj0LKdYn2DXIs3RdcY2fUd34XLR53Zs+n19XU8GEsUxTnPva7VawusYS9Jy+cm8gLrINbDlxFr+jZehBrr1kkWlpV/di052W2j8P/pzsWHrS568vHMRKUKJ2ZKGJhB7jpk/4x5HaV+q+DdnHm3o7kxl1ONDs4yZY1cPFXdp1ymdC/r/rnLG38EtMHZzdfd35ZUHu3XWdXna98hKsbCsU''@;'; put 'put ''ohfIcclfQ9p3GE6x8m/O0c20SXtp8k8yn7QjGb9mqu+CtbXfd/PdfypQ+42x50QO6m8z9mws1vpfs+/X/TaEZo6S58FOpW0CQvhWe/1ig7U1q8R5fUvprodnHfVh3lTRWdhY+YNm354Xi/WBB3X5csiMtxxC+WlfSLwSF9lmahKDHkAAEMgcApFIV5byK9b3e8nH9t7vUPbWQ/3c7j6Rq1R30c5T''@;'; put 'put ''CFZuU4jWJamDbC3r5xKsv4gYv2XG6LpuyR1urx9+GmPscada3C8oXX55w4LciYl547SqdZ7MzYT0apr3ZsVhiuJYijDqEguuEH2jQN4LrhmV30diXW4jq8zY6jH3qumFHKQDAoBALiIQiXQN5m5y0JLHmWLMmz4yvlzBuTjOdNh09/qKYq9JbubI/I1GC4pDdfi354lzseVw3B4an3v7myNGCyxe''@;'; put 'put ''0pXOfjJpDUL4rxibk/KJcBetrd3Xg9r+7lCKjrVj1Grs3FzgHHTy9IpVn6bDP7kgs3Nl23DWPkjlWzzWXi0XDAMbAAFAIDsIRCJdnRZ+6bVaHlaZ+HNf2PZLBP05dccNc+DCySYyxnXLjYwQKtb3e6fZu31Bgb53qX2n4NY3jzlXpQUPKEQtC+qVhOtUSx+iBE29cvhL7kTsycU+d64/cSBj5jMY''@;'; put 'put ''d802JQT6inN23sza+g25aHeyNnWQ7b1v/WQQQepXQLbJQgr9AYHej0BP57kYkX9igWY79cKV+UQCqfTavIaKUyxm3aJR5zCCaZec1bIyk4odL3Bs3jh4y8BPg+e5c+oqhvmspudCzzUxpi9SrF84edTK5lTamE1ZMga8zdf6mKo4fmK3g2L9aySs866peqMxm/alQ7eNbM/cnyD0GZBtOmAGmYBA''@;'; put 'put ''70QgEun6L4Vh9A7i9KZWE0P93DDuDdS49Z2GMb4FY3pkaP1cGZ9LBPkbU7U/XjdqjT+kclFdzSGC0mUIoaPtImUsNCHk3KmVazb1zpnU3WqZ/GLLkB13YSQm2j/1Wi27VFI4YWbN2iX5MlY5jg6yXbxx3AGMez/2Ws1dy0Ll02hhLIAAIJBSBBi3TF0tfJQb7BYopxYeWnme2+IzpyHEJznVko6L''@;'; put 'put ''UMHWFjO+RIjOdlvKU7Ia0Jy6EYcIzl9wqIVdLlwpxPEOo9a5U0es+iKlTsyiMJnPW3nzqPt1pfQ3lCgd94UMy9PkUEuv3G9LyXP5UgO4c2X7wbhCl1d/AGEyCCMZdcwRwYpCEVUxIQQJTAIlvGTQACFEYIwwIQh3DWsQQoaucCHjCrgU5P+5M5Yxkl+7hmFkIEQEd4TYdDNJCNZzKI1/jN1fojNs''@;'; put 'put ''xx/BYy/HxQWPKBMjiU/7xxK99l/8sRo4ACPnXTEhBOP2wI2gI7AI8UUkrIP62uOeutgl38visxdRtYzTSsSuwBixnJb+WK9QGbzDl/4AqsDnsnkgBktI7NsvqwiB5Lyw+0H6gMr/kKA/2r/BRsfQb073lwzIke8G50BAXsD/AnMZIM6FkJNBcIQ5978vAs0xQfJxk591jBPL4cu5wjEm/gdR/kuo''@;'; put 'put ''//32lz9sRVBFzjXGDS9HvCPkRCN6kVMp2adQ22e/7W2f9m/yhU/j6zWbthdo+8zeU1yyOFfTVyYyf1LZ59a1w/ZViToTIzKRErXb3RiDuT/GgvzBU7vh+ZI1Y4oN1feUSrTT7DaYzLdZI/r5U6vfXJdK27Ita97ainMwoU9SotrTDyBC1DudivN3+XBcEf2PQra9APoBAUAgYwg81DiunGraYIHE''@;'; put 'put ''LynVTvWYzUe4rV1d/gD2ZIwQaCOlzkv3Voz6D9TPDY/U3LXDRxrCXOBSiqtDt5YDMdv0OY7M3xNDa+KK93GF6qfaJRGsbGaMnTe9Zs36jE2MDCiaUzdqDOe+5+xhUFKtTgqeRR73JRNPWNOaATPSpgLINm3QgmBAoPcg8KcNYw+mhFzJmfEzg7u/l4zl/rW24I26ql8yKY9DOZLBSPadV1d5KsZk''@;'; put 'put ''PiVKt/hcf7IUbj5MSMEcjShzLeE7z67PazXvduDii6fVvvlSsnbkUv85bw4/liHjJZda1qVEJMFqgyzdN2XUqu9yyd54bAGyjQctaAsI5BkCd68/bQjj3ttM7v05xaojWsaseIYvCUOjroeRQf8wefTKHfH07SttZ20c5lJarMkKVa7TlMJS+7jlcYDPbP1PgV52j4uWXd5i7hjelXBbdzvV4svz''@;'; put 'put ''rWzdbauHHVHo6Pe0JXzH2MfrUEtXM+659OqKV7/sjfMDyLY3eg1sBgSSRODutacNQBr/rdvYc5mmOAsjiTOs1r1MpmlFnBOkcIKpUKiOfFar6r+8gQgJJYlQWbpS8uSATfpF+XLRJUnow3afU1dTRoR5o6o4poQ2kF9a/ld/GPd3HUy3NL/b5WMZRoQQWVSku3+fTxm+5q6vGKJyx1KE0Ej7gBXq''@;'; put 'put ''eI9x9supla9/lA4/pFMmkG060QXZgEAOInB3449H7vFtebJQ6z803ErWbe7d5rNaP3IpJYtVjlcRXWtr9umi3PO1QOgw/4h2Oz24WPfhZs3ArraCwQgbp1Kq/txgnmN0paAkOGyDeVp0pfzoqZX/yJuQlXS51F+Wbu2IWkzIXSp1/DBWPZKMKXHc6lL33JpvhOsU5X+1hPvELitcpfgDg7VeOqVy''@;'; put 'put ''da9KfgFkG+uMhnaAQB4gML9h9CzOvdPtye+Dw/IxTx3B5E4ulNU+S2mJt3SgTK7vKFIKFK/vGou7p8oV7/8KHcyaMmrNzfab+XkAY1qHIPMte4p3ne+z2mYXav2HxKJMEq5K9L8y4Z6cT+kdF6we079NfPtakWNQly8fpuX9zKWUjL266tVeUwMYyDaWmQxtAIFejsD8908p0D3oNpN5rw5dzTZ5''@;'; put 'put ''vv3IpZf/3mM6Vsg4z1QMVf6RtFT3OV7T9WiqZKbCrt4kQ24tC942DWNyta4UduwW9DQGjNQXmGZdNmN4+Hq6vWn8QVtvXV8xULXIEwrRTrLbzzn/XKHKL3vLChfItjfOPrAZEIgDgVliFnE1rHxUIY5f2buZzNOmEsftPs7vvaG2fk8cIqFpBhGYW1+9n8fY9WenWjxGpc6CaKoxIm9iRn+dT0lG''@;'; put 'put ''5EUytZU9qquFZ9nTX7b4tn9VqA84a3rV2vei4ZLtz4Fss+0B0A8IpBEBeQ54z1unX8K5+RATnYXtPWbTdxjR64zR7zw+C8ukGPDKdQRk/VyfaH3QoRRVRrs13uT99jOXs/yM6yrX97qLRJH8MOuD72uFu0vGc4xuV4jWUeu71dj5ta4UnHVdzVsbc9mHQLa57B2wDRBIEoGFDbXnG9z3Z406i2yi''@;'; put 'put ''3uXCvGpGdePbSYqH7hlGwF8/t3jvxabV+sf/b+/M46Oqzj5+lrvMloSEHbVaW1srVqwEkswkmMgmuFYL1drW2triAoEEBKy+bbq4QIAkIChql7eLWql1QUDCkpA9CO5Lbat1X1izzXKXc87bG3rzxoBCktnnmX9aP3PP8/ye77nkN3fmnPO4lazRn5c+qLe/Icuuixb7mt6MssyIpitvyPuOQOLB''@;'; put 'put ''3l2VOGevYkZmLDw/fltAgtlG9LaA4EAgdgQqG3xf1bjZIEuOYbYKzez6J6Xq7MW+phdipwwyD5ZAeaN3BGOhhQKROb1Xf/eNa3LjTSKUHywqqG0YbM54Gr+sIW8uQWQlJVLPsZcycTwhDpGrimdu+f+vcOJINJhtHE0GSAEC4SKwtqbQ00X9z8iSy2fHZJx9LLj5rcWTWhrDlQfixJbA8l05Z2gi''@;'; put 'put ''cL9Tzijo28rPVtalH/zALQ37VrId71je4LNO31r0//e3qTultGvn5j7zSGxn5djZwWzjcVZAExAYJIGKpsk3C2TeY4exjlAkmF5f4q357SBDw/A4JFBen/fN/zQi+QXF0llHGsZ8+hU02g845IybFnp3bYhD+QOSVL51mttwHNjmkNPy7AAydf2TYDzp5ombPx5Q0AgOArONIFwIDQRiQWBdfX5m''@;'; put 'put ''F2bPSUQ5zc4fNNsbnJJzWjLtwYwF23jOaS0gSjs87JsyVctNoZ/SV2unvv9dtxgxflFR8mwLKq/LOcdEvFaVXJl2vQ7qufOmnE23xdtcgdnG24yAHiAwSAKrm6f/1BShO+wwBElvc8Smlnpr/zXI0DA8AQisrisYHqLmbYLz62Xq6N4qZPWJJFj5M22Tfxyvv2kOFO2KxvxfEUxvt8ebTDukyO6z''@;'; put 'put ''4q1pAZjtQGcYxgGBOCRwT+MFp3aa7Y2q7OnumiIEZ0yYSxfnN6+IQ7kgKYIEVjXlnUSxa5nOQrMwwnWmw/Gtpdnb2yOYMiahVzVdcJJutr9in9HNuKkTpHxzYX7N5pgI+oykYLbxNBugBQgMksC61otLQ6xzpR0moLe95VJcE0q9zYcGGRqGJyAB66tl10HXBKHQd5bktr6fgCWckOTyeu8zlMrT''@;'; put 'put ''7YvdcuZv50x44kcnNDhKF4HZRgk0pAECkSawqinPiZGzViDW0ynFYMFlSwp2L410bogPBGJJoLJx0iSOUS1CuNvT3PLQfyHckT0njp7kwWxjeYdAbiAQRgJ3tk4cSjT+uiK5h1thGdc1hHH2Lb6mV8KYBkIBgbgjYP1OHUChN5T/LpQyuRZQkPO8Bfk1b8SLWDDbeJkJ0AEEBkmgvKXgHG5oTfb5''@;'; put 'put ''uX790IcOOe0bt/ia9g0yNAwHAnFNYP2eS1y6abxo8OCXLaHWVjeJKFfNz9v+aLwIB7ONl5kAHUBgkASqmqcuZkJf1hMG06dL83ZeMsiwMBwIxD0B6wzwe/dc+kDIaO/5ndYhpd1708Snb4oX8WC28TIToAMIDILA+j3jZc5OfiLI2mZaYbjgDBF6w6K82gcHERaGAoGEIVDZMmUp58ZdtuDhzi/W''@;'; put 'put ''mW1vT78uTG0jBwsCzHawBGE8EIgDAla/Wt7Z8cp/Goh3H2Rhcj2kIMe58fSbVRxgAglJTKCycdokjrVddolOacghZJCv3eh7PC5+RgGzTeKbD0pLHQLWWcjO9JNebtPe7zZba3EUQ2T80vzGV1OHAlSaygTWNEwd4xdtryvUlf7fD5xBj5p19k0TNr0VD1zAbONhFkADEBgkgdUtM9Iplv6usY7u''@;'; put 'put ''tmvWky2j4mu35rW8PcjQMBwIJASBVU3TsyQiXja5NsYSjJGkUypNKc7ZWh8PBYDZxsMsgAYgMEgC6/dMyQga+A0u9JG22QpEvrQkv/HDQYaG4UAgIQhYK5IRkpv8+sFxtmBVSr/u5okbfx8PBYDZxsMsgAYgMEgC1pOtSh2v+41D3Z/qrSdbWdCxJQUNcfEV2iDLg+FA4LgEyl6dpWR2tD/GhHax''@;'; put 'put ''fXG6MvrX12c/8j/HHRyFC8BsowAZUgCBSBNY1uBLk4n8GkLiZCsX44amSNLX5+fW/TPSuSE+EIgXAlUtU+/8z3qFW209Q92nP3ntuN9dHg/6wGzjYRZAAxAYJIGymkLHUKej0eDB86xQXJgGQerFpb6d1YMMDcOBQMIQqGiefI0Q5p9swVnO017xK4G8m8du6Ip1EWC2sZ4ByA8EwkRgXevF60Ks''@;'; put 'put ''80Y7nISVlcV52xaFKTyEAQJxT2Bl0ySvEKKOYEItsUMcJ30SMIJj5+Y8fjDW4sFsYz0DkB8IhInA2taLfqSxrp5DLDAiL5V4a3oWi4QpDYQBAnFLoKI+/3QNac/b238cNL2LUvkrc7L/9lGsRYPZxnoGID8QCBOB8gbfbILJwxgT0v1VMjeDArtPu8VXHReb+sNUJoQBAp9JYEXN+GEaYX93yhlD''@;'; put 'put ''rYswokFVdsbFXlswW7hxgUCSELD2GcqYvGaIQPf2Hy6YSTCaXepteDxJSoQygMDnErBW5ROMX9KZ/9Qj/wZMQ6LuixbkVm+LNTow21jPAOQHAmEi8LuaQsd+SauXqJJth1Soa83cnC3FYUoBYYBAXBOw9tp2am0vE0xOtz9wuqWhs2/MeTLmHzjBbOP61gFxQKB/BFY1Tb4QIXOLPSpotH/icI6Y''@;'; put 'put ''sHBi9Xv9iwRXA4HEJHBv62V/CLK279nq3fKw++dMeGxOrKsBs431DEB+IBBGAtYZyaZDbmVCP8sKK5AQElbL5+dtWxLGNBAKCMQtgarmaWVMaD+3BY50f23HNePumxJrwWC2sZ4ByA8EwkygovH8xQKjnr62JtcCijrkvAUTnnkjzKkgHBCIOwKrm6ZPNFGo1RZGCG1zSu6T5mRvDMRSLJhtLOlD''@;'; put 'put ''biAQAQLr6vMzkZLZGmIdZ9jhJeKoDZpdly7Jb+yMQEoICQTihkBFc4FPCNJgCxrh/krnoWDg5OLcP3fEUiSYbSzpQ24gECECK5uKbsWI32mHF0IImaq/Ks7d1vP1WoRSQ1ggEFMCFXUFozUUfE2R3EMsIYwbwaHKF776w4mPxHTdAphtTG8LSA4EIkPAaiaPuwKPE0yn2hkoVvxCiCsXeLdvjUxW''@;'; put 'put ''iAoEYk+goqZwiDtt+PNd+r7/9nY2dCyYd1FB695YqgOzjSV9yA0EIkhg+e7CUUbw8EtOechwO43fOPyuU86avshb+/cIpobQQCBmBKy9tkHj4CsydZ5y5MnW1CmSfaX5tXtiJqr7gA14AQEgkLQEltXnfE+mjj98qkCBXsYIf7/EV/tC0hYOhaUsAWu/ecDp2qhxf/cKZCE4l6lrYXHu1spYQgGz''@;'; put 'put ''jSV9yA0EIkzA2ncrhP4ExkTtnUqhnhcpkX9yQ/YTz2KMRIRlQHggEFUClc1T7+ZC79nulqaM+OuPszfMiqqIPsnAbGNJuzpOogAAIABJREFUH3IDgQgQsNrtpcvG2YQ4vxMwDv/AIXsyj5UmZHT826WOvHxB7jMvRUAGhAQCMSOwumnG+SYK1NoChOBvd+r0jLKiWjNWosBsY0Ue8gKBCBAob/SO''@;'; put 'put ''YJzdi5GYJlOn51gpDBbsUojnQ4LpFs3Q1i4+HxrMR2AqIGQMCSxvyJkpEccmW0KaMvqg3vnxaTcX1casry2YbQxvCEgNBMJJYEXj+RM40u+TsNLdQL73y+RaECP6Bsb0Mcz5RhOLt2DPbTjpQ6x4IrB816QzOAnuVagrzdJl3f8SyTi51Lv1UKx0gtnGijzkBQJhIiAEwhUN518c5O2/ccoZPSuP''@;'; put 'put ''j/yR0UMSdTzMuXZvl6q9Wpa9N6an6ISpZAgDBD6XgHWwS4iS1xHC3R2wGDc0WeCvLChofDdW6MBsY0Ue8gKBMBCwjLa8yXst50aV3TDbCmsdYvGf32vfVqnntsUFzQ+HIRWEAAIJQ2BZgy/NZP6XnHJGz15bB/GMm+etjtmWNzDbhLl9QCgQOJpARUPRFZro+l1vo2Xc0AmWH2IyvnXxxNqPgRsQ''@;'; put 'put ''SDUCZa/OUkYH+B/8xoFv99SO6a9L83b+T6xYgNnGijzkBQKDJLCq8YJpOmv/iyJ5uo+ls14GC/kl4rxhoa/2T4MMD8OBQEITWLt7ZqVm+ufbRcjEvWle7uaLY1UUmG2syENeIDAIAiuaCs8M6gd3upWs0XYYnQW7kOA/XjppzyODCA1DgUBSEKhsnlzMhVllF5PpOHn3def9OSdWxYHZxoo85AUC''@;'; put 'put ''AyRw954pGVIo+BQh0iQ7hGb621XivqQ0f1f9AMPCMCCQVARWNRZdhjB/wi4qQx39jinYuDnZG9pjUSiYbSyoQ04gMAgClU0X3MWEuRhjTKww1kpLhsz5S/N3rx9EWBgKBJKKwIqWwnxJ0Houjpxj4ZSGhJDJvnyj9+kPYlEomG0sqENOIDBAApUNRV/tYodqXfKQUXYIxvW/nfrhybNnz97ABhgW''@;'; put 'put ''hgGBpCNQ8ezk07GJnufCTLeK48I03MqQ826csOmVWBQLZhsL6pATCAyQwJrmC8sMEezpSWuw0FuYqxfCKVADBArDkpZAxfOXD3Ex/IpfP3TSEbNlpoN6Lpub+8zmWBQNZhsL6pATCAyAwIr6/PEa79zklId0b9Q3ua6pkusH83N3wIKoAfCEIclNYP2eS1y6aTQZPDjOqtTaey4Reen8vB3LY1E5''@;'; put 'put ''mG0sqENOIDAAAqubp91uCu1X9tAu/cBrTpkW3eJ7ad8AwsEQIJDUBNbvGS9z/oUHguaha+1C3XLW+jkTHr8hFoWD2caCOuQEAv0ksK7+okyuiFqd+c+xhloHV0hYuabEV/vXfoaCy4FAyhCobL7gV//5+vh2u+Asxxc3/uC8318aCwBgtrGgDjmBQD8JVLZMudIwgw9RIinWUM3s+pAQx4Ql+Y0f''@;'; put 'put ''9jMUXA4EUoZARfPka4Qwew54yVJPeYUFO7w/yn+qM9oQwGyjTRzyAYEBELhn98X36GbnzfZQUxgPZ6jatXOy9xoDCAdDgEBKEKhsLspBCLdwcWShvkvK2icM9PUbfY9H/acXMNuUuOWgyEQmsH7PlAzNoC2mCJ1p1WG1C+OM/WDp+c8+msh1gXYgEGkCFXUFo3WsvyJTR5aVy9r+QxXHmSUTdrwV''@;'; put 'put ''6dx944PZRps45AMC/SRQ0Vx4mmZ2vaBQd4Y11K8f+sgphp6zqKj2QD9DweVAIKUIrK0p9Phl7WWJKN3df6ztP4rkvqA4Z2vUT1oDs02pWw+KTUQClY2TJunC2CoRxWHpZ9x8lhJ+fqm3OZiI9YBmIBAtAqs3z1Cdw92bOo39k62cQgiuSmk/nZuzaVm0NNh5wGyjTRzyAYF+Eihv9H6XYvmP9jCF''@;'; put 'put ''ev46N2fTrH6GgcuBQMoRKBNlZOSzz1cEzbZiu3iPMuL3P8necF20YYDZRps45AMC/SRQ1Tz1eib0B+xhEpE3FOdun93PMHA5EEhJAn3//WSoo5t+NP4RX7RhgNlGmzjkAwL9JFDVMmUR40a5PUym7j/My9ncs1G/n+HgciCQUgQqWyZP5dystotOV0a8fX32hi9GGwKYbbSJQz4g0E8Clc2Tf8qF''@;'; put 'put ''eYc9zCGlPXjTxKd/3M8wcDkQSEkCK+p9+YRKPQuiMh2nfcIDh8+I9l5bMNuUvP2g6EQiUNU8uZQJc6WtWaFpDx3wOK8rG7tBT6Q6QCsQiAUBazW/yYyXKZE8Vn5rRbJE1ZMX5O74JJp6wGyjSRtyAYEBEChv8P0IIbTOPj0qTR65sdMQ3y71boDVyAPgCUNSi0BFTeGQIG1/0yGlH9lryzmThHr6''@;'; put 'put ''goLt70aTBJhtNGlDLiAwAAIrmgrPNJm/VaGu7r6cmtn1nioNO7fUu/XQAMLBECCQUgRWNeU5kVAaEEbnWYULwTnF0swF3pqt0QQBZhtN2pALCAyAwPLdhaOEFnpZpuowa7hudrXJ2JmzsKDhHwMIB0OAQEoRePTRWfSTL3StNHhgfrfZou5We3fPz93x02iCALONJm3IBQQGQMDq+CMU3KqxzjOs''@;'; put 'put ''4SbXQ5TQWQu9DU8PIBwMAQIpR6CiqXCRQKJnRb9LHva3GyY8dmU0QYDZRpM25AICAyBgNcEOGoGtXJj59nDO2PJFBQ1LBhAOhgCBlCOwoiH3GkLUnu4/QxwntfzwvIfyogkCzDaatCEXEBgggYrmwp8LIcrs4U4pY1fI33F5SVFt2wBDwjAgkDIEKuunfMHA/n9QoqhW0ZrZtS/LNWbsnOyNUTtf''@;'; put 'put ''HMw2ZW43KDSRCVS1TBsfNDp2KlTtXiSls0CHiw65tNi7bVci1wXagUA0CKxo9J7KOHtepo5MK1+GOiakmV1X35Sz8Ylo5LdygNlGizTkAQKDILCswZfm1/Y/PcQ5epIdRiHO1QeCoYVlRbXmIELDUCCQ9ASsFckBw/+WS84cZRers2CHRx66kuvo3uJJW/ZHGgKYbaQJQ3wgECYCFc1FPs30b1Go''@;'; put 'put ''M80KGTI7Djllz9SSvPrnwpQCwgCBpCRQVlMouSX9aUrl6X0LDBiHPnJKGStkajxYnNvaESkAYLaRIgtxgUCYCVTUnDvkEO+qzXSeNM4OLRPXAweDwZvg6TbMsCFc0hFY1uD7qma0/a8qeb4uU4erb4EhM7DbLWWWHNb058qKakPhBgBmG26iEA8IRJDAquai2SYL/l4iqtNKYzAtoMqe7y/I3f5Y''@;'; put 'put ''BNNCaCCQFASEQLiy6fzcgNmxzimnjUMIH+WBQaOzziFnLSjN2/4CxkiEq3Aw23CRhDhAIAoErKPn2sXH29MdI8fb6QiSXpKEuHSub+c7UZAAKYBAwhO4s3XiUKpL18tEni+wGIX7mK5K0w5yod+vSfqqRdm1YVmxDGab8LcNFJBqBJY3F/iYEdysSu7ulcndLy4andhxxY2+6n2pxgPqBQIDJWCt''@;'; put 'put ''UuYC3Y6Q+K5EFEffOARLbxMk3am5xEO3jKv2DzSPNQ7MdjD0YCwQiBGB5fV590hUubl3eoW6/0h0PP+mgk2HYyQL0gKBhCSwqsE31m+2/9YlZ03A+Oivlk2m7VXl9DnFOdXPDfSrZTDbhLw1QHSqE7h7z/iMYEdXdYZj1ESbhXXmqyp5fm/4A6Vw2EWq3yFQ/0AI3N0wYTbm9A5ZUr/cd7wQgsvU''@;'; put 'put ''+RfMxS/neav/3t/4YLb9JQbXA4E4IXDH9pyRskqelqiS3WO4QgiFurYZXP9hqXfnB3EiFWQAgYQhsLolJz1o4FKM0WJ7IWJv8ToLdqYpQ1czDVX1Z38umG3C3AIgFAgcTWBZg2+MX/9kxxDHSWf2fjdotr/pVob9YEHu9gbgBgSAQP8JLN816Qwi4V8KYV5h95Lu/aGWEvkdgpQ7TdH2p1Jv83F7''@;'; put 'put ''S4PZ9n8OYAQQiCsCdzXlfZky8YhE1Z4VypZAg4X8quR+lGD+s+Lc2vfjSjSIAQIJQMBqz/fvMe9dJGHldozxhL6SueAsUx29q0Pft6bEW/u5Rz+C2SbAhINEIHA8AtZWBjMU/ItHzprc99qQ2XXIIw//BaWhR2+eWPvx8WLB+0AACHyaQFlNocMta1dwwctk6uhuddn7xbihOaS0pwRGdxTnbH3x''@;'; put 'put ''WPzAbOGuAgJJQuDuPVMy0oXrzyGj/aK+JVmLpzTTf3iE60sPBFnb+nk51f9OkrKhDCAQNQJrawo9IUVcTTD5lUB8ZN/E1rdJDinjcS6xn5dM2PFW7/fBbKM2TZAICESWwL3PXjyRmWyDLgJf+LxMlCgvOCQyc0721o8iqwiiA4HkJLCqKe/LHaHDD7iUzNxj7c8VAv3dqaSXhgy9tdS79ZBFAcw2''@;'; put 'put ''Oe8FqCqFCKyrvyjTkMylQfPwjXaTgr7l62ZXm0RdBxXq/JtA4oH5udv+mUKIoFQgEHYCR37P/fAbutm+1q0M7dmCZycyuR7EiP7DrWTOv2nixl1gtmGfAggIBKJHoKJxch7GaC1H5jeO+upYCCFT9V1TmPcLKv/RQ9SDc7I3BqKnDjIBgeQnsH7PeFeX5rkGI/4zhMnJfSt2ShlbjZDxPTDb5L8X''@;'; put 'put ''oMIkJVDVMnWmg6bf5zcOnNK7ROsTdZoy8pWAceARJ0e/u6mgAU6UStJ7AMqKHwIVe6aPdiPPti79wFhbFRa4y6mkffeGCRufBLONn7kCJUDghAmsaZ56qd9s+4NCXRm9B+lm4DVC5RJHe8au4plbtBMOCBcCASAwKAKrm6ZPDPH2Gomo3e37uGDMIaeXzZ24+dfWf4PZDgovDAYC0SdQ0Vh0kcY7''@;'; put 'put ''/6xQd4/RWvv9OGIbXZLz+rk5Ow5GXxVkBAKpS8DaGuSS/Fsk6iq0KXDB3zZV9dyl2dvbwWxT996AyhOUQFXjtLO7zE+2O+UhPdsOdBbskqjjDqXNXQFPswk6sSA7oQlUtUwv0sz2TfbxjlwwUyaO0vl529f0fKWc0BWCeCCQQgRW7CkcxkKhapmoPYuhrH19hMjzbvE1/C6FUECpQCBuCNzbOG2E''@;'; put 'put ''gdlOE5k9v9VKxPmkyduv7n2MI3yNHDdTBkKAwGcTEALhe1ovXG7w4CL7KiE4Rwj/cqGv7hfADggAgdgQqGgqukcg3tPuEgsSoJjmF3u3P99bEZhtbOYHsgKBfhFY2TC5yBSdT8rUmWYPlInz/oPB0PyyotpQv4LBxUAACISFQHnjtBEeSdkbZJ09W34k4niiOHfrN/smALMNC3IIAgQiR6D7iDhV''@;'; put 'put ''bMIITbKzdGr73nHTYTMXTap/LXKZITIQAAKfR2Bt68WLNda5zL7G2uojMPeWeuteBrOFewcIJBiBiqbJlxs88LB9LJzOAh2EyLMW+5qqE6wUkAsEkoZAeeOkCwzm3+CQPFlWUdaiKFVy3zYvZ+vyYxUJT7ZJM/VQSDISWNWU55RJ5lMG90+x6+OCP7HQW38FxkgkY81QExCIdwLWVp8sp/KwybXL''@;'; put 'put ''ba2Ms39LhnReSVFtG5htvM8g6AMCfQisaio432D6Jpk63NZb1ulQBCmXLcrftQ1gAQEgEBsCVS2TrzKY9keCqWQpYNw0JCLNLfHuuv+zFMGTbWzmCrICgRMiUNU87TYmtO4TaI78ozb+JRnKhM/69HxCQeEiIAAEBkxg5e5pp8icbzO58VU7iEKdG2W6/8o52XsNMNsBo4WBQCA2BH5XU+g4JPPt''@;'; put 'put ''mGCfrYAIcucCX81tsVEEWYEAEKhsumANR2xuDwmBOglRpy7Iq279PDrwZAv3DhCIUwIV9ZNPZ1jbQwjNtCTqLNCpUMeUUm/97jiVDLKAQFITWN0y4yyZyNuCZvuYXh+A/zLmg2HXzJ69gYHZJvX0Q3HJSmBZo/c6LMS6nlXIRugDQeSv3wpdfJJ1yqGuOCawfs942WQjH9SY//u2TJNpn2DimHKL''@;'; put 'put ''r/aV40mHJ9vjEYL3gUCMCNy3+5JFfqPtbowJtSRwzjYqHWmz4PzjGE0IpE1pAlVN07xBdniLQl3p3f8eBTMl4lq8IK+64kTAgNmeCCW4BgjEgMDKxvydGNMiOzUV8uXzfdufjIEUSAkEUprA6s0zVGko/WuIdV7c81QrjH96OMk50X7RYLYpfQtB8fFKoHzrNDfxaI0Yo3GWRpNrAUqU/IXeuk+d''@;'; put 'put ''txqv+kEXEEgmAlWt067Vja71lMjqkada0yCC3liaX/ebE60TzPZEScF1QCCKBKxP0n73vlpV9uRaaRk3dAk7C0t8O5qjKANSAYGUJ1DZMnkk4mIHR6ynq49MnE8ZvP2q3l19jgcKzPZ4hOB9IBAjAmtaZ6wxWKBni4EQ4vaFvro7YiQH0gKBlCRwT/OFpboIrrSLF5y3YSJPL/Xu7NeuADDblLx9''@;'; put 'put ''oOhEILCmdfqvDRbq2VMrEUdlce7WkkTQDhqBQDIQuKd15lcwwtUa6zrVrocgeYNTOXzN5x1gcazawWyT4Y6AGpKSQEVz4c+FEGV2cW45a/2cCY/fkJTFQlFAIM4IWD2kVzblbySYXmRLM5m+jyLHtIUFNS/2Vy6YbX+JwfVAIEoEVjYWfJcL9qC9KMMjDd8p+w9cdB30r43SDECaVCawumVKbtDo''@;'; put 'put ''3G6fSy6EEDJWSou92ysHwgXMdiDUYAwQiAKB5XUFPoH1apk6XFa6dGXUOwzxcXOyN7RHIT2kAAIpTeCe3TOe1M3ApTYEnYVeV02nd6DnkoPZpvTtBMXHM4EVjd5TTa6/pFB39yZ6gwXbZeoZW+rd+UE86wZtQCDRCVQ2T/62wQK/p0Rx9NQi0A9Lfbt+N9DawGwHSg7GAYEIE1hXn59pSM43mNCH''@;'; put 'put ''W6msr7Ewki4s9e2EpvERZg/hU5fAPa2ThxqM1Qgkvm5TUGnaZoniWXOyNwYGSgbMdqDkYBwQiAKBquZp1UxoU+1UElFWFuduWxSF1JACCKQkgTXN00p0HlqBMSbdAATqlIkyY17etsbBAAGzHQw9GAsEIkygsmn6XI5Ca+w0CnW/6DfaC5bkN3ZGODWEBwIpR8DqtBXgh1qdcvqwng+4WPnbofQh''@;'; put 'put ''V5eN3aAPBgiY7WDowVggEGECVY2FZwd5V4NC3RlWKoMFuxx0yPT53uqmCKeG8EAg5QhUtUz5DePGD+3CGTMOSJJjeknezucGCwPMdrAEYTwQiCCBsppCaYQ7408hs+3bPX8AuFmd7sj65mB+P4qgZAgNBBKSgLXVJ2C0b7W7+lhFqJL71psmbF6GMRKDLQrMdrAEYTwQiDCBVQ2TfsQxu5dgSbZS''@;'; put 'put ''aaa/PUMZNumm3GdeinBqCA8EUobAsvqJ9TJ15vf6UPsvD3b7bvRV7wsHBDDbcFCEGEAgggSsVclcSd+pM/+5PX8IkLllmCZfAQdcRBA8hE4ZAhXNUwpNFnjGPkCGcVOnVJ1fmrfzvnBBALMNF0mIAwQiSKCiuaiUcWMZwVSy0jBuaAp1fX9+3vZHI5gWQgOBpCewum7GcJMGtiKMvmEXK2PX04Zo''@;'; put 'put ''m92frj7HAwVmezxC8D4QiAMC6/eMd/k1z9MIo55m8n790EcuxfOthd5mWCwVB3MEEhKTwNqWC5eGmP8OjEn3Vh+rqw9CdMbC/NqWcFYEZhtOmhALCESQQHl9fo7OuzY65YzuQy6sF8XSiyY1Llk4se69CKaG0EAgKQks3104Sg8efsElDxlpFyghecMhzfxOWVGtGc6iwWzDSRNiAYEIE6hsmXKl''@;'; put 'put ''yUKP2F8nW+lMpj+HufytW86v+3eE00N4IJBUBNa0Tl2sm9pd9gEWJtP2SVSZUuqteznchYLZhpsoxAMCESRQ9uosxXn4/T/KRJndOw1Byh5dsKsW+3a+GcH0EBoIJA2BypbJ5wT0thqH5Mmyi5KpY8m8nK3LI1EkmG0kqEJMIBBBAssafGkCmU8rxDGpd5oO/ZO30qVR3y7x1e4Nx77ACJYAoYFA''@;'; put 'put ''zAncXZ+9U6HunjUQjJtvojT3uFvGVfsjIQ7MNhJUISYQiDCBu/dMyZBCob8SQqf0TmWtUqZEXoeQ49el3q2HIiwDwgOBhCRgHWBhML0JY9ztgVaTD4LpDSXemvsjVRCYbaTIQlwgEGEC5Vunubmz7VFZcs7smypotL/llrKuW+DbWRdhGRAeCCQUgdV1BcOZRLYLhM6xhTto2tZ9Huelgz3/+PNA''@;'; put 'put ''gNkm1G0CYoHApwms3jxDDbgPlCCCb1Oo09P7XSE4o1ja9p+9DD9b4Nv1LLADAqlOQAiEK5oKKxAW83tYCNyFEZ1W4tvRHEk+YLaRpAuxgUCUCCyvyz3vsPbhg8PdX+zZmG+n7j4NhyhPCEletHBiNWwRitKcQJr4I7B2d+EoJFy7NeY/xVaHkfzoSe9nfmf27A0skorBbCNJF2IDgSgSKHv1LMV5''@;'; put 'put ''OP1ik4Xu670X15Zgci1AkLyBK3Tp4om1H0dRGqQCAjEnYD3V3rvnkltDRscdPR9EmbEfU2XSIm/t3yMtEMw20oQhPhCIMoHKlpyRXaHQgy5lyMXHSh0yO99Jk4YtIJq+/eai2q4oy4N0QCAmBCqaC6cYTNsoEcVhC5CxWjovr7oiGoLAbKNBGXIAgSgTsD7FVzUWfcUkxv8SRHP6pmfcNIJG2z/S''@;'; put 'put ''naNK2nJ27CjDiEdZIqQDAlEjsH7PeNlko57QWFfPYsJIb/XpWxyYbdSmGxIBgegTWFtT6OmS/SWMm/MdUvrQo01X12Ti3oIJXnw4x/dmGS4D043+NEHGCBOobJ78bZOH/mi3qfzvVp/rS7w1v41w6p7wYLbRIg15gEAMCdzZOnGobKhLTR78sSq5M/pK0VmgQyGOJxGWby317vwghlIhNRAIK4E1''@;'; put 'put ''DVPHcCp2MGGcaQdWiXvL/jT35ZHc6gNPtmGdRggGBBKLwN0NE8aqJL3Y4P7vSUR19lU/xHHKv7r0g/cFTfn+JflPdSZWdaAWCHyaQJkoI0Oa66o4YnPtdzAifozR5AV5Na3R5AVPttGkDbmAQJwQWNVUcD5CZJUQ4lz7EPbe0hTqrkPY/J8Dfr0p3N1P4gQByEgBAqsbZ3xJluW6oNk+xi6XYvWx''@;'; put 'put ''+XnV34p2+WC20SYO+YBAnBDoPoHK3XldmjJsccjs6Nl32OsJIOhWsv5imv6Km3KfeSlOZIMMIHBCBKyn2qHNTfcaSPuJPYBzdljG0qT5vtpXTihIGC8Csw0jTAgFBBKRgHXOsqqJn+m88ydyn1OorHo45wcdkms1wubauTk7DiZijaA59QisaZ2a7dfbdijUlW5VL4TgMnUuLs7dujIWNMBsY0Ed''@;'; put 'put ''cgKBOCRwd4NvrEfKWBQ0266mRFb7SsxQxvyjXf9oHULa/aXe5mAclgCSgEA3gVVNeU6ZZm4wmP8iG4nBjH8Ip2vi0uzt7bHABGYbC+qQEwjEMYGVDecXISyWCyS+QTChfaUqxNNoIm1pW9Bsgd9z43giU1haVeu0axnTft/z9bEwDSLoj0vz6/43VljAbGNFHvICgTgnsKr5/Etk7Fxh8OBX+krl''@;'; put 'put ''ghkSkbdxwZaW5NW9Av1z43wyU0jePa2ThzKO6pkwv2aXLRPHU/Nyt14WSwxgtrGkD7mBQJwTKH9xmpv4g7eZTJt3rN9zMSJBgukyJuga6J8b55OZIvJWN19YbIpglV0uFiQgMC4q9e7cHUsEYLaxpA+5gUCCEFjW4BuDEL9fIvJMjI403O79MljoY5mqd5d663r+yCVIaSAziQhUtUw9Q8bqjhDr''@;'; put 'put ''7FldT5Hy1/nebbNiXSaYbaxnAPIDgQQhYJ23fHfDhMma3rYu3TnmjL6yrSPwVMndojNtQayfIhIEKcgMIwGrt7OW3vUEJeTCnrACdSJB8krza14NY6oBhQKzHRA2GAQEUpdAWU2hpNLgZQbvqvAow47an2v1z5Ww8jhiZknJpPqPUpcUVB5NAquaLpios67tCnWm2XkV6lw8N+eZ8mjq+KxcYLbx''@;'; put 'put ''MAugAQgkIIFlDb40wULzEcG3KNTdvZfx0y/sJ5jeGZLx2lhtt0hArCB5AATKagodWU7HIyYP9iyCYpz9W+VpOcWTtuwfQMiwDwGzDTtSCAgEUovA8prCUSFy6D6PnHnM1Z5+/fA/3UpWcUdebTW08kuteyNa1R7p6qP9iWAqWTkZN3QJKTeX5Nc+GC0Nx8sDZns8QvA+EAACxyVg/Z5b3jgxHyO5''@;'; put 'put ''nBLpGP1zDV2hzjqB+O3zc2t2w1ah4yKFC06QwLr6/EydKg0csbPsIRJ1blTp/ivnZO81TjBMxC8Ds404YkgABFKHwJFFKh2XhcyOCreS1XP4u03A5FqAIvlvskRvLc6tfT91yEClkSJQ1TJ1vsFCK3sOYBG4kxA8NdpdfY5XH5jt8QjB+0AACPSbwF31+ZkE6QsFEvPss2l7B2HcOKSQtLWGoq1e''@;'; put 'put ''lF17oN8JYAAQQAhVNBee1qUdaHArQ0+ygVhdfQ6H9Kvi7XQzMFu4ZYEAEIgYAWt/rma236dS92SZOlx9EwWNjn+nKyMXBFhnzZL8RuifG7GZSM7Aq5oK70VI3GBXZ5ihjyXsunBhQc2L8VYxmG28zQjoAQJJSKCiPv90Hem/lYhagDEhfUvs0g6+7paH3nzKhyPqZs/ewJIQAZQUZgKVzUU5QaNz''@;'; put 'put ''qyq5M6zQXHCmUNeSWHX1OV55YLbHIwTvAwEgEDYCyxt839bMjlWf8XtukCD5b5TS2096b/h7YLphw550gcpePUtRDzq3qJLnArs4LsTbbuTIudFXvS8eCwazjcdZAU1AIIkJdP+eK4xbEBbFMnW6+5aqm/42SuTHEE776S1x+ocziacnIUqrapo6WeNdGyWiOI881ZoGxcrcEm/N/fFaAJhtvM4M''@;'; put 'put ''6AICSU7grvqc8RixcooV77H657rkzBd0pi1JCwbrriuqDSU5DijvBAms2FM4jBpouxBinD1EJu5NBj88K577LIPZnuAEw2VAAAhEhkB5o/cCiuVyIfi5x/o9V5XSmgyk3zrm7YxG+Go5MnOQSFHXtMxYZPDA/x/BKEQHEvLFpfk76uO5DjDbeJ4d0AYEUoSAddyeW9ZuSFNHLQkYh0b1LZsgSVel''@;'; put 'put ''9IeDKFBeMmHra3AoRorcGH3KXNZSeLLCjMD4AAALhklEQVQW2t/U+0xuq6sPbpO+WzxzixbPVMBs43l2QBsQSDECa2sKPSFF/I9ArNQ+eq83AoIkTSbOCo0b5dA/N8VuDoRQZfPUn3Kh32FXbjLtE4qk6QsLGuJuq0/f2QGzTb37FSoGAnFPYNmu3K+5HVm3a2bX1Rgf3T830/mFN7u0g2vm5W6G''@;'; put 'put ''/rlxP5vhEVjVMm180Di8Q6Gu7q0+CAlBiVoyP3dbQtwDYLbhuQ8gChAAAmEmYJ23XNU0qQARaS0X7Oy+4a3+uS4la69p+hfMy9vWGOb0EC7OCNxVl12jSu5CW5YQ4l1Vks+bm7PjYJxJPaYcMNtEmCXQCARSmMCqpjwnE+LHHnnELUGz/eS+KAiSdbeS9YhfdNy5YMIzb6QwqqQtfXXr5IKQ4d8q''@;'; put 'put ''EbV7q4/J9RDFSvFC364HEqVoMNtEmSnQCQRSnMDqlpx0zZAXM6TPV6jT0xcHRiQoEccKoaM18dLDNMWnLCzlW119ggRvx5icZwdUafozEkVXzsneGAhLkigEAbONAmRIAQSAQPgIVLbkjNQN8YBEnZccK6rOAh0Sdi0zHTI0rQ8f9phFsrr6mCy0yt4WhhHxYyHPXOCrrouZqAEkBrMdADQYAgSA''@;'; put 'put ''QGwJWL/nLqufODNotlVmOEZ/+VhqVOp5nXHjDhrSn7y5qLYrtooh+0AIlDdOG6EQvosJ40x7vEKdG92B0OxEO+gEzHYgdwCMAQJAIC4IdP+ey9iFIRZc51ayjtqfa4nk3HxepWmlI99Lq4dDMeJi2k5YxLrWi5YEzY477adaxoz9MlIvWVBQ03rCQeLkQjDbOJkIkAEEgMDACayoGT+sU3RVOSXP''@;'; put 'put ''TEXyDOkb6b8LaqpV2fHToCrevmVctX/g2WBkNAgsb/AVcB56qvd8SsSx6FBOXkUZLuPR0BDOHGC24aQJsYAAEIgpgYq6gtFdon2FTByXHmsRlWW6JtdedytDbw+ZgXrooRvT6frc5FXNU/7KhHGlfZHJ2VuyIY0vKapti1/Vn60MzDYRZw00AwEg8LkE7t6V93VMxW1CsJkKdaX1vZhxU8eE/Atj''@;'; put 'put ''6TcKkx4Z+eGQT+Ar5vi5qVa3TMnVzECt3aCCcdOQSHx39TkePTDb4xGC94EAEEhYAlbT+k7WVqlS9wUydRzVzs8qLGR2HFJp2haKXFWyHnodFlPFdrorWyaP5MzcijDq6eqjUs8zGjt0RTx39TkeNTDb4xGC94EAEEh4Aivqcs5iGC3igl2hSu7/Hvf36bKsnqgESW9hgh8mWH5Id+IP4bfd6E/9''@;'; put 'put ''qqYL1iDE5tqZKZI1KkTRXN+O5uirCV9GMNvwsYRIQAAIxDmBZQ2+MUwEf4YFvkqVPMc0XasELphpMv0dh5z2W0rowwpVP0mUAxTW7xkvK51pNICGS1LaYerXHR5V0ok9NViTu0yZM1WSTIQ+NDLfOp3Hy1foFc0XnuakanPAbOtZWW5t9ZHp/ivnZO814vz2+lx5YLaJPHugHQgAgQERuLN14lBq''@;'; put 'put ''8O9xjn5CifxFiSiOzwrEBWecm++7lMxtIda5iZquVpdLabeMKtoGUCbKyOi9G6llpgeyFCoHmYdil4th7RTM8akYo7EuKeNUk7HTTB4cFTQ73IzrMsLCMtvuv/dCCO6WMzWMSGe6Y9TrGvd/4Nf3v0q5a7OJ2z48+f2T9ViZ7z0tM36j88AP7bng3DyIhDJ9UUHN3gFNdBwNArONo8kAKUAACESf''@;'; put 'put ''QHldwTkMB39BsDxdIkr32buf97IaIBg89PEQx+iXQ2Zgl0zlzQiZBw3OdM4DHW5FN62nxddmjRX92aJiGelZG17Fh0/PJFrGewR1onQcMGXmUCVFmE7G6TlEoBxKlXOY4Ke0h97NIogqEnWmEUzo8XQf730hOFcl97syce/UTP8mzFhLNBeOrW6dPk43A3t712Jt9SnO3bryeNoT4X0w20SYJdAI''@;'; put 'put ''BIBAxAlYx0AaJrrao4z+jt848I1j9dP9PBFHjolU/WnqiI8cNO1NnQU/0HnnmxiRF02EOxSBAowbAssSJwxTJoTEEc8iWFYQ5mNV6swiWDqVEPVk3ew8rUPfN5RxXZWp46hzoCMOAyGkM39bmjJyu879a9tDqKGsqNaMVF7rg8aIZ/duCpkdF9o5hODvcI9zbLL8bg5mG6m7B+ICASCQsASWt0w6''@;'; put 'put ''g3B2pYxd15g8dBZCVlfdo/vqxmOBAgmBRI8ygf77HwYLdlj/X6au9CPvdv/5x9b/YPT5taUpI3aGjM5fReoUrqqWaVeZLPSQzdj69oAiac4C386E6epzvHsBzPZ4hOB9IAAEUpaAdQbzL16bJbsOvzvFpQyfyUxtBkP66fECRDe72hQprR0jtE+W0p43WPAjQ/i7DFM7wDF/28XlN3Widmn5De29''@;'; put 'put ''Nac35w3RGP8iY9rpquQ+TZU92UH9cJ5Mnad8Vm3Wb70ydT1nCv2XHSG+JVxPulZXH0N2NDNufNXOrVLP5v0e1zfLxm7Q44X1YHWA2Q6WIIwHAkAgZQiU1RRK6So6jQk91yVnTfDIQ70HAm+fihAfap/fG24Y1lOeRJRPKJU/RAjV+fWDb1Ikv0EpfR8Zos3lChwY7Ipi60PF/XvHS22G/GVqSjN1''@;'; put 'put ''EZjnkNJOPVYtXDAmOGqVZc+NC3KfeWmw9Va1TL2Zcf2eXs/inZSSovm5ib8oqjcbMNvB3ikwHggAgZQlYJnvqeg0qd35XgY32Sk6D54pSdLJEnFmqcQ5XMKOUQLxMRrzp+ksqDJhUowwwRhxmTg1RXL5KZIOcSz2cW7sN5jexkWgyxCsTTD2Eab0X7JKP2nvpIdHp3WyaK1+Xr15hhpKPzhRpWlz''@;'; put 'put ''TK5fhY+xAItxQ3NKQx5CLPSLub6d7wzkJljTMHUMkmmdwYJfssdLyPHkqPfTr4zViuiB1HEiY8BsT4QSXAMEgAAQ6CcBa9EPqq0lZ40YTvz79hM9LY10HNR6/ubStE4uDR/C1fZTeOZbh+Nmr2vfMlc0XnCqybsqJaJcQjA9atVz0Gjfn66OucPgh+/vzwlPFp+s3c3rTRa63s4pOD+MhFS0sKDm''@;'; put 'put ''xX7ijvvLwWzjfopAIBAAAkAgtgS6vz6Xja9yTO5ECF3Ud6uRdQgIwfQlgskvnHLHlhN5Al/dMvkszQw+Z59/bFUoU7V0Xk51RWyrjUx2MNvIcIWoQAAIAIGkI2CdTtUeVC73qCOWhMy28X0L7P5qWc56LGR2rO/SSdNnLaKy4ujmsEcNHrq856lWiHc9asbXEuWkrv5OLphtf4nB9UAACACBFCew''@;'; put 'put ''qinPaXBxreD8Z4rkHN0Xh8GCXQ4p4086xz+/xVe9r+/7lU0XzDK49idKJMV6r3urD5ZvXODdsT5Z0YLZJuvMQl1AAAgAgQgTWN7o/RLnxi8xwpfK1HnU4RsKdb+JEP+VTOUN9hNrRU3hEKTieoH42bY8mbg3iUPiyuKZW7QIS45ZeDDbmKGHxEAACACBxCdg/Z7rlI1sv7ZvXbpjxNkES3LfqgTC''@;'; put 'put ''zzqJ+0Yqaf8KGeT7TGir7WswIn4kRH6Jr/aFxKfx2RWA2Sbz7EJtQAAIAIEoESh79SzFczhzssb89zjljKMO/rAWUXnU4Z/I2JHern2YZsuSiPpEcW71N6MkM2ZpwGxjhh4SAwEgAASSj8CKmsJhTArdiRC/+lhfLX+qYoE6COUFC3LrB304RryTBLON9xkCfUAACACBBCRQ3ug9myD5Lia0yRJR''@;'; put 'put ''j+qmZLUuVKlj4bzcbVUJWF6/JYPZ9hsZDAACQAAIAIETJVDRWHguxnSlKfTze+/PNTl7y21I424uqu060ViJfB2YbSLPHmgHAkAACCQAAWtfrV9PX8C4toQSeShFikGwdNm8vC1bEkB+WCSC2YYFIwQBAkAACACB4xFY0zrtizJx/wYh7NJZcFpx7paO441JlvfBbJNlJqEOIAAEgEACELDORB69''@;'; put 'put ''d68jWU+K+qwp+D9J1vEz+kjcvQAAAABJRU5ErkJggg=='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; options notes; data _null_; format url $256.; rc=METADATA_GETURI("Stored Process Web App",url); url=coalescec(url,"localhost/SASStoredProcess"); urlEscaped = tranwrd(trim(url)," ","%20"); putlog "NOTE: SASjs Streaming App Created! Check it out here:" ; putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- "; putlog "NOTE- " urlEscaped +(-1) "?_program=&appLoc/services/clickme" ; putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- "; run;